fs-uae-2.2.3+dfsg/0000755000175000017500000000000012162366653014053 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/common.mk0000644000175000017500000000140412162366654015674 0ustar glaubitzglaubitzuname := $(shell uname -a) arch := android := 0 ifeq ($(android), 1) os = android cc = arm-linux-androideabi-gcc cxx = arm-linux-androideabi-g++ ar = arm-linux-androideabi-ar make = make else ifneq ($(findstring Msys,$(uname)),) os = windows cc = gcc cxx = g++ ar = ar make = make else ifneq ($(findstring Darwin,$(uname)),) os = macosx cc = gcc cxx = g++ ar = ar make = make else ifneq ($(findstring FreeBSD,$(uname)),) os = freebsd cc = $(CC) cxx = $(CXX) ar = $(AR) make = gmake else ifneq ($(findstring OpenBSD,$(uname)),) os = openbsd cc = $(CC) cxx = $(CXX) ar = $(AR) make = gmake else os = linux cc = $(CC) cxx = $(CXX) ar = $(AR) make = make endif debug := 0 devel := 0 optimize := 1 noflags := 0 prefix := /usr docdir := $(prefix)/share/doc/fs-uae fs-uae-2.2.3+dfsg/gensrc/0000755000175000017500000000000012162366654015335 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/gensrc/cpuemu_21.cpp0000644000175000017500000353463212162366654017661 0ustar glaubitzglaubitz#include "sysconfig.h" #include "sysdeps.h" #include "options.h" #include "uae/memory.h" #include "custom.h" #include "events.h" #include "newcpu.h" #include "cpu_prefetch.h" #include "cputbl.h" #include "cpummu.h" #define CPUFUNC(x) x##_ff #define SET_CFLG_ALWAYS(x) SET_CFLG(x) #define SET_NFLG_ALWAYS(x) SET_NFLG(x) #ifdef NOFLAGS #include "noflags.h" #endif #if !defined(PART_1) && !defined(PART_2) && !defined(PART_3) && !defined(PART_4) && !defined(PART_5) && !defined(PART_6) && !defined(PART_7) && !defined(PART_8) #define PART_1 1 #define PART_2 1 #define PART_3 1 #define PART_4 1 #define PART_5 1 #define PART_6 1 #define PART_7 1 #define PART_8 1 #endif #ifdef PART_1 /* OR.B #.B,Dn */ void REGPARAM2 CPUFUNC(op_0000_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* OR.B #.B,(An) */ void REGPARAM2 CPUFUNC(op_0010_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* OR.B #.B,(An)+ */ void REGPARAM2 CPUFUNC(op_0018_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* OR.B #.B,-(An) */ void REGPARAM2 CPUFUNC(op_0020_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* OR.B #.B,(d16,An) */ void REGPARAM2 CPUFUNC(op_0028_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* OR.B #.B,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_0030_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s8 dst = x_get_byte (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* OR.B #.B,(xxx).W */ void REGPARAM2 CPUFUNC(op_0038_21)(uae_u32 opcode) { {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* OR.B #.B,(xxx).L */ void REGPARAM2 CPUFUNC(op_0039_21)(uae_u32 opcode) { {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } /* ORSR.B #.W */ void REGPARAM2 CPUFUNC(op_003c_21)(uae_u32 opcode) { { MakeSR (); { uae_s16 src = get_word_ce020_prefetch (2); src &= 0xFF; regs.sr |= src; MakeFromSR (); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* OR.W #.W,Dn */ void REGPARAM2 CPUFUNC(op_0040_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* OR.W #.W,(An) */ void REGPARAM2 CPUFUNC(op_0050_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* OR.W #.W,(An)+ */ void REGPARAM2 CPUFUNC(op_0058_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) += 2; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* OR.W #.W,-(An) */ void REGPARAM2 CPUFUNC(op_0060_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) = dsta; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* OR.W #.W,(d16,An) */ void REGPARAM2 CPUFUNC(op_0068_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s16 dst = x_get_word (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* OR.W #.W,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_0070_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s16 dst = x_get_word (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* OR.W #.W,(xxx).W */ void REGPARAM2 CPUFUNC(op_0078_21)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s16 dst = x_get_word (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* OR.W #.W,(xxx).L */ void REGPARAM2 CPUFUNC(op_0079_21)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (4); { uae_s16 dst = x_get_word (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } /* ORSR.W #.W */ void REGPARAM2 CPUFUNC(op_007c_21)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel7150; } { MakeSR (); { uae_s16 src = get_word_ce020_prefetch (2); regs.sr |= src; MakeFromSR (); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); endlabel7150: ; return; } /* OR.L #.L,Dn */ void REGPARAM2 CPUFUNC(op_0080_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* OR.L #.L,(An) */ void REGPARAM2 CPUFUNC(op_0090_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* OR.L #.L,(An)+ */ void REGPARAM2 CPUFUNC(op_0098_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) += 4; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* OR.L #.L,-(An) */ void REGPARAM2 CPUFUNC(op_00a0_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) = dsta; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* OR.L #.L,(d16,An) */ void REGPARAM2 CPUFUNC(op_00a8_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (6); { uae_s32 dst = x_get_long (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } /* OR.L #.L,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_00b0_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (6); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s32 dst = x_get_long (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* OR.L #.L,(xxx).W */ void REGPARAM2 CPUFUNC(op_00b8_21)(uae_u32 opcode) { {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (6); { uae_s32 dst = x_get_long (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } /* OR.L #.L,(xxx).L */ void REGPARAM2 CPUFUNC(op_00b9_21)(uae_u32 opcode) { {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (6); { uae_s32 dst = x_get_long (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (10); return; } /* CHK2.B #.W,(An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_00d0_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = (uae_s32)(uae_s8)x_get_byte (dsta); upper = (uae_s32)(uae_s8)x_get_byte (dsta + 1); if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s8)reg; SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel7159; } } }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); endlabel7159: ; return; } #endif /* CHK2.B #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_00e8_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = (uae_s32)(uae_s8)x_get_byte (dsta); upper = (uae_s32)(uae_s8)x_get_byte (dsta + 1); if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s8)reg; SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel7160; } } }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); endlabel7160: ; return; } #endif /* CHK2.B #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_00f0_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = (uae_s32)(uae_s8)x_get_byte (dsta); upper = (uae_s32)(uae_s8)x_get_byte (dsta + 1); if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s8)reg; SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel7161; } } }}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel7161: ; return; } #endif /* CHK2.B #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_00f8_21)(uae_u32 opcode) { {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = (uae_s32)(uae_s8)x_get_byte (dsta); upper = (uae_s32)(uae_s8)x_get_byte (dsta + 1); if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s8)reg; SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel7162; } } }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); endlabel7162: ; return; } #endif /* CHK2.B #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_00f9_21)(uae_u32 opcode) { {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (4); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = (uae_s32)(uae_s8)x_get_byte (dsta); upper = (uae_s32)(uae_s8)x_get_byte (dsta + 1); if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s8)reg; SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel7163; } } }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); endlabel7163: ; return; } #endif /* CHK2.B #.W,(d16,PC) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_00fa_21)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_word_ce020_prefetch (4); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = (uae_s32)(uae_s8)x_get_byte (dsta); upper = (uae_s32)(uae_s8)x_get_byte (dsta + 1); if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s8)reg; SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel7164; } } }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); endlabel7164: ; return; } #endif /* CHK2.B #.W,(d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_00fb_21)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr tmppc; uaecptr dsta; m68k_incpc (4); { tmppc = m68k_getpc (); dsta = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = (uae_s32)(uae_s8)x_get_byte (dsta); upper = (uae_s32)(uae_s8)x_get_byte (dsta + 1); if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s8)reg; SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel7165; } } }}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel7165: ; return; } #endif /* BTST.L Dn,Dn */ void REGPARAM2 CPUFUNC(op_0100_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= 31; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* MVPMR.W (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_0108_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; { uaecptr memp = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_u16 val = (x_get_byte (memp) << 8) + x_get_byte (memp + 2); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* BTST.B Dn,(An) */ void REGPARAM2 CPUFUNC(op_0110_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* BTST.B Dn,(An)+ */ void REGPARAM2 CPUFUNC(op_0118_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* BTST.B Dn,-(An) */ void REGPARAM2 CPUFUNC(op_0120_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* BTST.B Dn,(d16,An) */ void REGPARAM2 CPUFUNC(op_0128_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* BTST.B Dn,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_0130_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* BTST.B Dn,(xxx).W */ void REGPARAM2 CPUFUNC(op_0138_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* BTST.B Dn,(xxx).L */ void REGPARAM2 CPUFUNC(op_0139_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* BTST.B Dn,(d16,PC) */ void REGPARAM2 CPUFUNC(op_013a_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = 2; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_getpc () + 2; dsta += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* BTST.B Dn,(d8,PC,Xn) */ void REGPARAM2 CPUFUNC(op_013b_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = 3; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr tmppc; uaecptr dsta; m68k_incpc (2); { tmppc = m68k_getpc (); dsta = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* BTST.B Dn,#.B */ void REGPARAM2 CPUFUNC(op_013c_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = (uae_u8)get_word_ce020_prefetch (2); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* BCHG.L Dn,Dn */ void REGPARAM2 CPUFUNC(op_0140_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= 31; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); m68k_dreg (regs, dstreg) = (dst); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* MVPMR.L (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_0148_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; { uaecptr memp = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_u32 val = (x_get_byte (memp) << 24) + (x_get_byte (memp + 2) << 16) + (x_get_byte (memp + 4) << 8) + x_get_byte (memp + 6); m68k_dreg (regs, dstreg) = (val); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* BCHG.B Dn,(An) */ void REGPARAM2 CPUFUNC(op_0150_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* BCHG.B Dn,(An)+ */ void REGPARAM2 CPUFUNC(op_0158_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* BCHG.B Dn,-(An) */ void REGPARAM2 CPUFUNC(op_0160_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* BCHG.B Dn,(d16,An) */ void REGPARAM2 CPUFUNC(op_0168_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* BCHG.B Dn,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_0170_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s8 dst = x_get_byte (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); x_put_byte (dsta, dst); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* BCHG.B Dn,(xxx).W */ void REGPARAM2 CPUFUNC(op_0178_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* BCHG.B Dn,(xxx).L */ void REGPARAM2 CPUFUNC(op_0179_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* BCHG.B Dn,(d16,PC) */ void REGPARAM2 CPUFUNC(op_017a_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = 2; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_getpc () + 2; dsta += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* BCHG.B Dn,(d8,PC,Xn) */ void REGPARAM2 CPUFUNC(op_017b_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = 3; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr tmppc; uaecptr dsta; m68k_incpc (2); { tmppc = m68k_getpc (); dsta = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s8 dst = x_get_byte (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); x_put_byte (dsta, dst); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* BCLR.L Dn,Dn */ void REGPARAM2 CPUFUNC(op_0180_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= 31; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); m68k_dreg (regs, dstreg) = (dst); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* MVPRM.W Dn,(d16,An) */ void REGPARAM2 CPUFUNC(op_0188_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); uaecptr memp = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); x_put_byte (memp, src >> 8); x_put_byte (memp + 2, src); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* BCLR.B Dn,(An) */ void REGPARAM2 CPUFUNC(op_0190_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* BCLR.B Dn,(An)+ */ void REGPARAM2 CPUFUNC(op_0198_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* BCLR.B Dn,-(An) */ void REGPARAM2 CPUFUNC(op_01a0_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* BCLR.B Dn,(d16,An) */ void REGPARAM2 CPUFUNC(op_01a8_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* BCLR.B Dn,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_01b0_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); x_put_byte (dsta, dst); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* BCLR.B Dn,(xxx).W */ void REGPARAM2 CPUFUNC(op_01b8_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* BCLR.B Dn,(xxx).L */ void REGPARAM2 CPUFUNC(op_01b9_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* BCLR.B Dn,(d16,PC) */ void REGPARAM2 CPUFUNC(op_01ba_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = 2; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_getpc () + 2; dsta += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* BCLR.B Dn,(d8,PC,Xn) */ void REGPARAM2 CPUFUNC(op_01bb_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = 3; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr tmppc; uaecptr dsta; m68k_incpc (2); { tmppc = m68k_getpc (); dsta = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); x_put_byte (dsta, dst); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* BSET.L Dn,Dn */ void REGPARAM2 CPUFUNC(op_01c0_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= 31; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); m68k_dreg (regs, dstreg) = (dst); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* MVPRM.L Dn,(d16,An) */ void REGPARAM2 CPUFUNC(op_01c8_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); uaecptr memp = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); x_put_byte (memp, src >> 24); x_put_byte (memp + 2, src >> 16); x_put_byte (memp + 4, src >> 8); x_put_byte (memp + 6, src); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* BSET.B Dn,(An) */ void REGPARAM2 CPUFUNC(op_01d0_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* BSET.B Dn,(An)+ */ void REGPARAM2 CPUFUNC(op_01d8_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* BSET.B Dn,-(An) */ void REGPARAM2 CPUFUNC(op_01e0_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* BSET.B Dn,(d16,An) */ void REGPARAM2 CPUFUNC(op_01e8_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* BSET.B Dn,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_01f0_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); x_put_byte (dsta, dst); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* BSET.B Dn,(xxx).W */ void REGPARAM2 CPUFUNC(op_01f8_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* BSET.B Dn,(xxx).L */ void REGPARAM2 CPUFUNC(op_01f9_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* BSET.B Dn,(d16,PC) */ void REGPARAM2 CPUFUNC(op_01fa_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = 2; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_getpc () + 2; dsta += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* BSET.B Dn,(d8,PC,Xn) */ void REGPARAM2 CPUFUNC(op_01fb_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = 3; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr tmppc; uaecptr dsta; m68k_incpc (2); { tmppc = m68k_getpc (); dsta = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); x_put_byte (dsta, dst); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* AND.B #.B,Dn */ void REGPARAM2 CPUFUNC(op_0200_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* AND.B #.B,(An) */ void REGPARAM2 CPUFUNC(op_0210_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* AND.B #.B,(An)+ */ void REGPARAM2 CPUFUNC(op_0218_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* AND.B #.B,-(An) */ void REGPARAM2 CPUFUNC(op_0220_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* AND.B #.B,(d16,An) */ void REGPARAM2 CPUFUNC(op_0228_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* AND.B #.B,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_0230_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s8 dst = x_get_byte (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* AND.B #.B,(xxx).W */ void REGPARAM2 CPUFUNC(op_0238_21)(uae_u32 opcode) { {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* AND.B #.B,(xxx).L */ void REGPARAM2 CPUFUNC(op_0239_21)(uae_u32 opcode) { {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } /* ANDSR.B #.W */ void REGPARAM2 CPUFUNC(op_023c_21)(uae_u32 opcode) { { MakeSR (); { uae_s16 src = get_word_ce020_prefetch (2); src |= 0xFF00; regs.sr &= src; MakeFromSR (); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* AND.W #.W,Dn */ void REGPARAM2 CPUFUNC(op_0240_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* AND.W #.W,(An) */ void REGPARAM2 CPUFUNC(op_0250_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* AND.W #.W,(An)+ */ void REGPARAM2 CPUFUNC(op_0258_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) += 2; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* AND.W #.W,-(An) */ void REGPARAM2 CPUFUNC(op_0260_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) = dsta; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* AND.W #.W,(d16,An) */ void REGPARAM2 CPUFUNC(op_0268_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s16 dst = x_get_word (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* AND.W #.W,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_0270_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s16 dst = x_get_word (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* AND.W #.W,(xxx).W */ void REGPARAM2 CPUFUNC(op_0278_21)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s16 dst = x_get_word (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* AND.W #.W,(xxx).L */ void REGPARAM2 CPUFUNC(op_0279_21)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (4); { uae_s16 dst = x_get_word (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } /* ANDSR.W #.W */ void REGPARAM2 CPUFUNC(op_027c_21)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel7228; } { MakeSR (); { uae_s16 src = get_word_ce020_prefetch (2); regs.sr &= src; MakeFromSR (); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); endlabel7228: ; return; } /* AND.L #.L,Dn */ void REGPARAM2 CPUFUNC(op_0280_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* AND.L #.L,(An) */ void REGPARAM2 CPUFUNC(op_0290_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* AND.L #.L,(An)+ */ void REGPARAM2 CPUFUNC(op_0298_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) += 4; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* AND.L #.L,-(An) */ void REGPARAM2 CPUFUNC(op_02a0_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) = dsta; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* AND.L #.L,(d16,An) */ void REGPARAM2 CPUFUNC(op_02a8_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (6); { uae_s32 dst = x_get_long (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } /* AND.L #.L,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_02b0_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (6); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s32 dst = x_get_long (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* AND.L #.L,(xxx).W */ void REGPARAM2 CPUFUNC(op_02b8_21)(uae_u32 opcode) { {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (6); { uae_s32 dst = x_get_long (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } /* AND.L #.L,(xxx).L */ void REGPARAM2 CPUFUNC(op_02b9_21)(uae_u32 opcode) { {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (6); { uae_s32 dst = x_get_long (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (10); return; } /* CHK2.W #.W,(An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_02d0_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = (uae_s32)(uae_s16)x_get_word (dsta); upper = (uae_s32)(uae_s16)x_get_word (dsta + 2); if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s16)reg; SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel7237; } } }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); endlabel7237: ; return; } #endif /* CHK2.W #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_02e8_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = (uae_s32)(uae_s16)x_get_word (dsta); upper = (uae_s32)(uae_s16)x_get_word (dsta + 2); if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s16)reg; SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel7238; } } }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); endlabel7238: ; return; } #endif /* CHK2.W #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_02f0_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = (uae_s32)(uae_s16)x_get_word (dsta); upper = (uae_s32)(uae_s16)x_get_word (dsta + 2); if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s16)reg; SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel7239; } } }}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel7239: ; return; } #endif /* CHK2.W #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_02f8_21)(uae_u32 opcode) { {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = (uae_s32)(uae_s16)x_get_word (dsta); upper = (uae_s32)(uae_s16)x_get_word (dsta + 2); if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s16)reg; SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel7240; } } }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); endlabel7240: ; return; } #endif /* CHK2.W #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_02f9_21)(uae_u32 opcode) { {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (4); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = (uae_s32)(uae_s16)x_get_word (dsta); upper = (uae_s32)(uae_s16)x_get_word (dsta + 2); if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s16)reg; SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel7241; } } }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); endlabel7241: ; return; } #endif /* CHK2.W #.W,(d16,PC) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_02fa_21)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_word_ce020_prefetch (4); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = (uae_s32)(uae_s16)x_get_word (dsta); upper = (uae_s32)(uae_s16)x_get_word (dsta + 2); if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s16)reg; SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel7242; } } }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); endlabel7242: ; return; } #endif /* CHK2.W #.W,(d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_02fb_21)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr tmppc; uaecptr dsta; m68k_incpc (4); { tmppc = m68k_getpc (); dsta = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = (uae_s32)(uae_s16)x_get_word (dsta); upper = (uae_s32)(uae_s16)x_get_word (dsta + 2); if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s16)reg; SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel7243; } } }}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel7243: ; return; } #endif /* SUB.B #.B,Dn */ void REGPARAM2 CPUFUNC(op_0400_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUB.B #.B,(An) */ void REGPARAM2 CPUFUNC(op_0410_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUB.B #.B,(An)+ */ void REGPARAM2 CPUFUNC(op_0418_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUB.B #.B,-(An) */ void REGPARAM2 CPUFUNC(op_0420_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUB.B #.B,(d16,An) */ void REGPARAM2 CPUFUNC(op_0428_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* SUB.B #.B,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_0430_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* SUB.B #.B,(xxx).W */ void REGPARAM2 CPUFUNC(op_0438_21)(uae_u32 opcode) { {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* SUB.B #.B,(xxx).L */ void REGPARAM2 CPUFUNC(op_0439_21)(uae_u32 opcode) { {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } /* SUB.W #.W,Dn */ void REGPARAM2 CPUFUNC(op_0440_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUB.W #.W,(An) */ void REGPARAM2 CPUFUNC(op_0450_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUB.W #.W,(An)+ */ void REGPARAM2 CPUFUNC(op_0458_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) += 2; {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUB.W #.W,-(An) */ void REGPARAM2 CPUFUNC(op_0460_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUB.W #.W,(d16,An) */ void REGPARAM2 CPUFUNC(op_0468_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* SUB.W #.W,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_0470_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* SUB.W #.W,(xxx).W */ void REGPARAM2 CPUFUNC(op_0478_21)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* SUB.W #.W,(xxx).L */ void REGPARAM2 CPUFUNC(op_0479_21)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (4); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } /* SUB.L #.L,Dn */ void REGPARAM2 CPUFUNC(op_0480_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* SUB.L #.L,(An) */ void REGPARAM2 CPUFUNC(op_0490_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* SUB.L #.L,(An)+ */ void REGPARAM2 CPUFUNC(op_0498_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) += 4; {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* SUB.L #.L,-(An) */ void REGPARAM2 CPUFUNC(op_04a0_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* SUB.L #.L,(d16,An) */ void REGPARAM2 CPUFUNC(op_04a8_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (6); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } /* SUB.L #.L,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_04b0_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (6); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* SUB.L #.L,(xxx).W */ void REGPARAM2 CPUFUNC(op_04b8_21)(uae_u32 opcode) { {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (6); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } /* SUB.L #.L,(xxx).L */ void REGPARAM2 CPUFUNC(op_04b9_21)(uae_u32 opcode) { {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (6); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (10); return; } /* CHK2.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_04d0_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = x_get_long (dsta); upper = x_get_long (dsta + 4); SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel7268; } } }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); endlabel7268: ; return; } #endif /* CHK2.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_04e8_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = x_get_long (dsta); upper = x_get_long (dsta + 4); SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel7269; } } }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); endlabel7269: ; return; } #endif /* CHK2.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_04f0_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = x_get_long (dsta); upper = x_get_long (dsta + 4); SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel7270; } } }}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel7270: ; return; } #endif /* CHK2.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_04f8_21)(uae_u32 opcode) { {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = x_get_long (dsta); upper = x_get_long (dsta + 4); SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel7271; } } }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); endlabel7271: ; return; } #endif /* CHK2.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_04f9_21)(uae_u32 opcode) { {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (4); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = x_get_long (dsta); upper = x_get_long (dsta + 4); SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel7272; } } }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); endlabel7272: ; return; } #endif /* CHK2.L #.W,(d16,PC) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_04fa_21)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_word_ce020_prefetch (4); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = x_get_long (dsta); upper = x_get_long (dsta + 4); SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel7273; } } }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); endlabel7273: ; return; } #endif /* CHK2.L #.W,(d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_04fb_21)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr tmppc; uaecptr dsta; m68k_incpc (4); { tmppc = m68k_getpc (); dsta = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = x_get_long (dsta); upper = x_get_long (dsta + 4); SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel7274; } } }}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel7274: ; return; } #endif /* ADD.B #.B,Dn */ void REGPARAM2 CPUFUNC(op_0600_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADD.B #.B,(An) */ void REGPARAM2 CPUFUNC(op_0610_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADD.B #.B,(An)+ */ void REGPARAM2 CPUFUNC(op_0618_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADD.B #.B,-(An) */ void REGPARAM2 CPUFUNC(op_0620_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADD.B #.B,(d16,An) */ void REGPARAM2 CPUFUNC(op_0628_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* ADD.B #.B,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_0630_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* ADD.B #.B,(xxx).W */ void REGPARAM2 CPUFUNC(op_0638_21)(uae_u32 opcode) { {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* ADD.B #.B,(xxx).L */ void REGPARAM2 CPUFUNC(op_0639_21)(uae_u32 opcode) { {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } /* ADD.W #.W,Dn */ void REGPARAM2 CPUFUNC(op_0640_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADD.W #.W,(An) */ void REGPARAM2 CPUFUNC(op_0650_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADD.W #.W,(An)+ */ void REGPARAM2 CPUFUNC(op_0658_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) += 2; {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADD.W #.W,-(An) */ void REGPARAM2 CPUFUNC(op_0660_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADD.W #.W,(d16,An) */ void REGPARAM2 CPUFUNC(op_0668_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* ADD.W #.W,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_0670_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* ADD.W #.W,(xxx).W */ void REGPARAM2 CPUFUNC(op_0678_21)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* ADD.W #.W,(xxx).L */ void REGPARAM2 CPUFUNC(op_0679_21)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (4); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } /* ADD.L #.L,Dn */ void REGPARAM2 CPUFUNC(op_0680_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* ADD.L #.L,(An) */ void REGPARAM2 CPUFUNC(op_0690_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* ADD.L #.L,(An)+ */ void REGPARAM2 CPUFUNC(op_0698_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) += 4; {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* ADD.L #.L,-(An) */ void REGPARAM2 CPUFUNC(op_06a0_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* ADD.L #.L,(d16,An) */ void REGPARAM2 CPUFUNC(op_06a8_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (6); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } /* ADD.L #.L,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_06b0_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (6); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* ADD.L #.L,(xxx).W */ void REGPARAM2 CPUFUNC(op_06b8_21)(uae_u32 opcode) { {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (6); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } /* ADD.L #.L,(xxx).L */ void REGPARAM2 CPUFUNC(op_06b9_21)(uae_u32 opcode) { {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (6); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (10); return; } /* RTM.L Dn */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_06c0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); { m68k_incpc (2); op_illg (opcode); } regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* RTM.L An */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_06c8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); { m68k_incpc (2); op_illg (opcode); } regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* CALLM.L (An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_06d0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); { m68k_incpc (2); op_illg (opcode); } regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* CALLM.L (d16,An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_06e8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); { m68k_incpc (2); op_illg (opcode); } regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* CALLM.L (d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_06f0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); { m68k_incpc (2); op_illg (opcode); } regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* CALLM.L (xxx).W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_06f8_21)(uae_u32 opcode) { { m68k_incpc (2); op_illg (opcode); } regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* CALLM.L (xxx).L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_06f9_21)(uae_u32 opcode) { { m68k_incpc (2); op_illg (opcode); } regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* CALLM.L (d16,PC) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_06fa_21)(uae_u32 opcode) { { m68k_incpc (2); op_illg (opcode); } regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* CALLM.L (d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_06fb_21)(uae_u32 opcode) { { m68k_incpc (2); op_illg (opcode); } regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* BTST.L #.W,Dn */ void REGPARAM2 CPUFUNC(op_0800_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= 31; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* BTST.B #.W,(An) */ void REGPARAM2 CPUFUNC(op_0810_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* BTST.B #.W,(An)+ */ void REGPARAM2 CPUFUNC(op_0818_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* BTST.B #.W,-(An) */ void REGPARAM2 CPUFUNC(op_0820_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* BTST.B #.W,(d16,An) */ void REGPARAM2 CPUFUNC(op_0828_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* BTST.B #.W,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_0830_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* BTST.B #.W,(xxx).W */ void REGPARAM2 CPUFUNC(op_0838_21)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* BTST.B #.W,(xxx).L */ void REGPARAM2 CPUFUNC(op_0839_21)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } /* BTST.B #.W,(d16,PC) */ void REGPARAM2 CPUFUNC(op_083a_21)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* BTST.B #.W,(d8,PC,Xn) */ void REGPARAM2 CPUFUNC(op_083b_21)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr tmppc; uaecptr dsta; m68k_incpc (4); { tmppc = m68k_getpc (); dsta = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* BTST.B #.W,#.B */ void REGPARAM2 CPUFUNC(op_083c_21)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); { uae_s8 dst = (uae_u8)get_word_ce020_prefetch (4); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* BCHG.L #.W,Dn */ void REGPARAM2 CPUFUNC(op_0840_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= 31; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); m68k_dreg (regs, dstreg) = (dst); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* BCHG.B #.W,(An) */ void REGPARAM2 CPUFUNC(op_0850_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* BCHG.B #.W,(An)+ */ void REGPARAM2 CPUFUNC(op_0858_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* BCHG.B #.W,-(An) */ void REGPARAM2 CPUFUNC(op_0860_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* BCHG.B #.W,(d16,An) */ void REGPARAM2 CPUFUNC(op_0868_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* BCHG.B #.W,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_0870_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s8 dst = x_get_byte (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); x_put_byte (dsta, dst); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* BCHG.B #.W,(xxx).W */ void REGPARAM2 CPUFUNC(op_0878_21)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* BCHG.B #.W,(xxx).L */ void REGPARAM2 CPUFUNC(op_0879_21)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } /* BCHG.B #.W,(d16,PC) */ void REGPARAM2 CPUFUNC(op_087a_21)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* BCHG.B #.W,(d8,PC,Xn) */ void REGPARAM2 CPUFUNC(op_087b_21)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr tmppc; uaecptr dsta; m68k_incpc (4); { tmppc = m68k_getpc (); dsta = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s8 dst = x_get_byte (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); x_put_byte (dsta, dst); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* BCLR.L #.W,Dn */ void REGPARAM2 CPUFUNC(op_0880_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= 31; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); m68k_dreg (regs, dstreg) = (dst); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* BCLR.B #.W,(An) */ void REGPARAM2 CPUFUNC(op_0890_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* BCLR.B #.W,(An)+ */ void REGPARAM2 CPUFUNC(op_0898_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* BCLR.B #.W,-(An) */ void REGPARAM2 CPUFUNC(op_08a0_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* BCLR.B #.W,(d16,An) */ void REGPARAM2 CPUFUNC(op_08a8_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* BCLR.B #.W,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_08b0_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); x_put_byte (dsta, dst); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* BCLR.B #.W,(xxx).W */ void REGPARAM2 CPUFUNC(op_08b8_21)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* BCLR.B #.W,(xxx).L */ void REGPARAM2 CPUFUNC(op_08b9_21)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } /* BCLR.B #.W,(d16,PC) */ void REGPARAM2 CPUFUNC(op_08ba_21)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* BCLR.B #.W,(d8,PC,Xn) */ void REGPARAM2 CPUFUNC(op_08bb_21)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr tmppc; uaecptr dsta; m68k_incpc (4); { tmppc = m68k_getpc (); dsta = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); x_put_byte (dsta, dst); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* BSET.L #.W,Dn */ void REGPARAM2 CPUFUNC(op_08c0_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= 31; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); m68k_dreg (regs, dstreg) = (dst); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* BSET.B #.W,(An) */ void REGPARAM2 CPUFUNC(op_08d0_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* BSET.B #.W,(An)+ */ void REGPARAM2 CPUFUNC(op_08d8_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* BSET.B #.W,-(An) */ void REGPARAM2 CPUFUNC(op_08e0_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* BSET.B #.W,(d16,An) */ void REGPARAM2 CPUFUNC(op_08e8_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* BSET.B #.W,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_08f0_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); x_put_byte (dsta, dst); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* BSET.B #.W,(xxx).W */ void REGPARAM2 CPUFUNC(op_08f8_21)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* BSET.B #.W,(xxx).L */ void REGPARAM2 CPUFUNC(op_08f9_21)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } /* BSET.B #.W,(d16,PC) */ void REGPARAM2 CPUFUNC(op_08fa_21)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* BSET.B #.W,(d8,PC,Xn) */ void REGPARAM2 CPUFUNC(op_08fb_21)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr tmppc; uaecptr dsta; m68k_incpc (4); { tmppc = m68k_getpc (); dsta = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); x_put_byte (dsta, dst); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* EOR.B #.B,Dn */ void REGPARAM2 CPUFUNC(op_0a00_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uae_s8 dst = m68k_dreg (regs, dstreg); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* EOR.B #.B,(An) */ void REGPARAM2 CPUFUNC(op_0a10_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* EOR.B #.B,(An)+ */ void REGPARAM2 CPUFUNC(op_0a18_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* EOR.B #.B,-(An) */ void REGPARAM2 CPUFUNC(op_0a20_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* EOR.B #.B,(d16,An) */ void REGPARAM2 CPUFUNC(op_0a28_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* EOR.B #.B,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_0a30_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s8 dst = x_get_byte (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* EOR.B #.B,(xxx).W */ void REGPARAM2 CPUFUNC(op_0a38_21)(uae_u32 opcode) { {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* EOR.B #.B,(xxx).L */ void REGPARAM2 CPUFUNC(op_0a39_21)(uae_u32 opcode) { {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } /* EORSR.B #.W */ void REGPARAM2 CPUFUNC(op_0a3c_21)(uae_u32 opcode) { { MakeSR (); { uae_s16 src = get_word_ce020_prefetch (2); src &= 0xFF; regs.sr ^= src; MakeFromSR (); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* EOR.W #.W,Dn */ void REGPARAM2 CPUFUNC(op_0a40_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uae_s16 dst = m68k_dreg (regs, dstreg); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* EOR.W #.W,(An) */ void REGPARAM2 CPUFUNC(op_0a50_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* EOR.W #.W,(An)+ */ void REGPARAM2 CPUFUNC(op_0a58_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) += 2; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* EOR.W #.W,-(An) */ void REGPARAM2 CPUFUNC(op_0a60_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) = dsta; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* EOR.W #.W,(d16,An) */ void REGPARAM2 CPUFUNC(op_0a68_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s16 dst = x_get_word (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* EOR.W #.W,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_0a70_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s16 dst = x_get_word (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* EOR.W #.W,(xxx).W */ void REGPARAM2 CPUFUNC(op_0a78_21)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s16 dst = x_get_word (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* EOR.W #.W,(xxx).L */ void REGPARAM2 CPUFUNC(op_0a79_21)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (4); { uae_s16 dst = x_get_word (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } /* EORSR.W #.W */ void REGPARAM2 CPUFUNC(op_0a7c_21)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel7366; } { MakeSR (); { uae_s16 src = get_word_ce020_prefetch (2); regs.sr ^= src; MakeFromSR (); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); endlabel7366: ; return; } /* EOR.L #.L,Dn */ void REGPARAM2 CPUFUNC(op_0a80_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uae_s32 dst = m68k_dreg (regs, dstreg); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } #endif #ifdef PART_2 /* EOR.L #.L,(An) */ void REGPARAM2 CPUFUNC(op_0a90_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* EOR.L #.L,(An)+ */ void REGPARAM2 CPUFUNC(op_0a98_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) += 4; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* EOR.L #.L,-(An) */ void REGPARAM2 CPUFUNC(op_0aa0_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) = dsta; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* EOR.L #.L,(d16,An) */ void REGPARAM2 CPUFUNC(op_0aa8_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (6); { uae_s32 dst = x_get_long (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } /* EOR.L #.L,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_0ab0_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (6); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s32 dst = x_get_long (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* EOR.L #.L,(xxx).W */ void REGPARAM2 CPUFUNC(op_0ab8_21)(uae_u32 opcode) { {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (6); { uae_s32 dst = x_get_long (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } /* EOR.L #.L,(xxx).L */ void REGPARAM2 CPUFUNC(op_0ab9_21)(uae_u32 opcode) { {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (6); { uae_s32 dst = x_get_long (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (10); return; } /* CAS.B #.W,(An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0ad0_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(m68k_dreg (regs, rc))); { int flgs = ((uae_s8)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(m68k_dreg (regs, rc))) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); m68k_incpc (4); if (GET_ZFLG ()){ x_put_byte (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = (m68k_dreg(regs, rc) & ~0xff) | (dst & 0xff); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* CAS.B #.W,(An)+ */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0ad8_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(m68k_dreg (regs, rc))); { int flgs = ((uae_s8)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(m68k_dreg (regs, rc))) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); m68k_incpc (4); if (GET_ZFLG ()){ x_put_byte (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = (m68k_dreg(regs, rc) & ~0xff) | (dst & 0xff); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* CAS.B #.W,-(An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0ae0_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(m68k_dreg (regs, rc))); { int flgs = ((uae_s8)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(m68k_dreg (regs, rc))) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); m68k_incpc (4); if (GET_ZFLG ()){ x_put_byte (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = (m68k_dreg(regs, rc) & ~0xff) | (dst & 0xff); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* CAS.B #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0ae8_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(m68k_dreg (regs, rc))); { int flgs = ((uae_s8)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(m68k_dreg (regs, rc))) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); m68k_incpc (6); if (GET_ZFLG ()){ x_put_byte (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = (m68k_dreg(regs, rc) & ~0xff) | (dst & 0xff); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* CAS.B #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0af0_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s8 dst = x_get_byte (dsta); { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(m68k_dreg (regs, rc))); { int flgs = ((uae_s8)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(m68k_dreg (regs, rc))) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); if (GET_ZFLG ()){ x_put_byte (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = (m68k_dreg(regs, rc) & ~0xff) | (dst & 0xff); }}}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* CAS.B #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0af8_21)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(m68k_dreg (regs, rc))); { int flgs = ((uae_s8)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(m68k_dreg (regs, rc))) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); m68k_incpc (6); if (GET_ZFLG ()){ x_put_byte (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = (m68k_dreg(regs, rc) & ~0xff) | (dst & 0xff); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* CAS.B #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0af9_21)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(m68k_dreg (regs, rc))); { int flgs = ((uae_s8)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(m68k_dreg (regs, rc))) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); m68k_incpc (8); if (GET_ZFLG ()){ x_put_byte (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = (m68k_dreg(regs, rc) & ~0xff) | (dst & 0xff); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* CMP.B #.B,Dn */ void REGPARAM2 CPUFUNC(op_0c00_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* CMP.B #.B,(An) */ void REGPARAM2 CPUFUNC(op_0c10_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* CMP.B #.B,(An)+ */ void REGPARAM2 CPUFUNC(op_0c18_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* CMP.B #.B,-(An) */ void REGPARAM2 CPUFUNC(op_0c20_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* CMP.B #.B,(d16,An) */ void REGPARAM2 CPUFUNC(op_0c28_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* CMP.B #.B,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_0c30_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* CMP.B #.B,(xxx).W */ void REGPARAM2 CPUFUNC(op_0c38_21)(uae_u32 opcode) { {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* CMP.B #.B,(xxx).L */ void REGPARAM2 CPUFUNC(op_0c39_21)(uae_u32 opcode) { {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } /* CMP.B #.B,(d16,PC) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0c3a_21)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } #endif /* CMP.B #.B,(d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0c3b_21)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr tmppc; uaecptr dsta; m68k_incpc (4); { tmppc = m68k_getpc (); dsta = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* CMP.W #.W,Dn */ void REGPARAM2 CPUFUNC(op_0c40_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* CMP.W #.W,(An) */ void REGPARAM2 CPUFUNC(op_0c50_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* CMP.W #.W,(An)+ */ void REGPARAM2 CPUFUNC(op_0c58_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) += 2; {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* CMP.W #.W,-(An) */ void REGPARAM2 CPUFUNC(op_0c60_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* CMP.W #.W,(d16,An) */ void REGPARAM2 CPUFUNC(op_0c68_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* CMP.W #.W,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_0c70_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* CMP.W #.W,(xxx).W */ void REGPARAM2 CPUFUNC(op_0c78_21)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* CMP.W #.W,(xxx).L */ void REGPARAM2 CPUFUNC(op_0c79_21)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (4); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } /* CMP.W #.W,(d16,PC) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0c7a_21)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } #endif /* CMP.W #.W,(d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0c7b_21)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr tmppc; uaecptr dsta; m68k_incpc (4); { tmppc = m68k_getpc (); dsta = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* CMP.L #.L,Dn */ void REGPARAM2 CPUFUNC(op_0c80_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* CMP.L #.L,(An) */ void REGPARAM2 CPUFUNC(op_0c90_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* CMP.L #.L,(An)+ */ void REGPARAM2 CPUFUNC(op_0c98_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) += 4; {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* CMP.L #.L,-(An) */ void REGPARAM2 CPUFUNC(op_0ca0_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* CMP.L #.L,(d16,An) */ void REGPARAM2 CPUFUNC(op_0ca8_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (6); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } /* CMP.L #.L,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_0cb0_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (6); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* CMP.L #.L,(xxx).W */ void REGPARAM2 CPUFUNC(op_0cb8_21)(uae_u32 opcode) { {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (6); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } /* CMP.L #.L,(xxx).L */ void REGPARAM2 CPUFUNC(op_0cb9_21)(uae_u32 opcode) { {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (6); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (10); return; } /* CMP.L #.L,(d16,PC) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0cba_21)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta = m68k_getpc () + 6; dsta += (uae_s32)(uae_s16)get_word_ce020_prefetch (6); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } #endif /* CMP.L #.L,(d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0cbb_21)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr tmppc; uaecptr dsta; m68k_incpc (6); { tmppc = m68k_getpc (); dsta = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* CAS.W #.W,(An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0cd0_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(m68k_dreg (regs, rc))); { int flgs = ((uae_s16)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(m68k_dreg (regs, rc))) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); m68k_incpc (4); if (GET_ZFLG ()){ x_put_word (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = (m68k_dreg(regs, rc) & ~0xffff) | (dst & 0xffff); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* CAS.W #.W,(An)+ */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0cd8_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) += 2; { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(m68k_dreg (regs, rc))); { int flgs = ((uae_s16)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(m68k_dreg (regs, rc))) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); m68k_incpc (4); if (GET_ZFLG ()){ x_put_word (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = (m68k_dreg(regs, rc) & ~0xffff) | (dst & 0xffff); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* CAS.W #.W,-(An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0ce0_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) = dsta; { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(m68k_dreg (regs, rc))); { int flgs = ((uae_s16)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(m68k_dreg (regs, rc))) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); m68k_incpc (4); if (GET_ZFLG ()){ x_put_word (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = (m68k_dreg(regs, rc) & ~0xffff) | (dst & 0xffff); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* CAS.W #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0ce8_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s16 dst = x_get_word (dsta); { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(m68k_dreg (regs, rc))); { int flgs = ((uae_s16)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(m68k_dreg (regs, rc))) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); m68k_incpc (6); if (GET_ZFLG ()){ x_put_word (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = (m68k_dreg(regs, rc) & ~0xffff) | (dst & 0xffff); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* CAS.W #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0cf0_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s16 dst = x_get_word (dsta); { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(m68k_dreg (regs, rc))); { int flgs = ((uae_s16)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(m68k_dreg (regs, rc))) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); if (GET_ZFLG ()){ x_put_word (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = (m68k_dreg(regs, rc) & ~0xffff) | (dst & 0xffff); }}}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* CAS.W #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0cf8_21)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s16 dst = x_get_word (dsta); { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(m68k_dreg (regs, rc))); { int flgs = ((uae_s16)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(m68k_dreg (regs, rc))) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); m68k_incpc (6); if (GET_ZFLG ()){ x_put_word (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = (m68k_dreg(regs, rc) & ~0xffff) | (dst & 0xffff); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* CAS.W #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0cf9_21)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (4); { uae_s16 dst = x_get_word (dsta); { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(m68k_dreg (regs, rc))); { int flgs = ((uae_s16)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(m68k_dreg (regs, rc))) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); m68k_incpc (8); if (GET_ZFLG ()){ x_put_word (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = (m68k_dreg(regs, rc) & ~0xffff) | (dst & 0xffff); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* CAS2.W #.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0cfc_21)(uae_u32 opcode) { {{ uae_s32 extra = get_long_ce020_prefetch (2); uae_u32 rn1 = regs.regs[(extra >> 28) & 15]; uae_u32 rn2 = regs.regs[(extra >> 12) & 15]; uae_u16 dst1 = x_get_word (rn1), dst2 = x_get_word (rn2); {uae_u32 newv = ((uae_s16)(dst1)) - ((uae_s16)(m68k_dreg (regs, (extra >> 16) & 7))); { int flgs = ((uae_s16)(m68k_dreg (regs, (extra >> 16) & 7))) < 0; int flgo = ((uae_s16)(dst1)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(m68k_dreg (regs, (extra >> 16) & 7))) > ((uae_u16)(dst1))); SET_NFLG (flgn != 0); if (GET_ZFLG ()) { {uae_u32 newv = ((uae_s16)(dst2)) - ((uae_s16)(m68k_dreg (regs, extra & 7))); { int flgs = ((uae_s16)(m68k_dreg (regs, extra & 7))) < 0; int flgo = ((uae_s16)(dst2)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(m68k_dreg (regs, extra & 7))) > ((uae_u16)(dst2))); SET_NFLG (flgn != 0); if (GET_ZFLG ()) { x_put_word (rn1, m68k_dreg (regs, (extra >> 22) & 7)); x_put_word (rn2, m68k_dreg (regs, (extra >> 6) & 7)); }} }}}} if (! GET_ZFLG ()) { m68k_dreg (regs, (extra >> 6) & 7) = (m68k_dreg (regs, (extra >> 6) & 7) & ~0xffff) | (dst2 & 0xffff); m68k_dreg (regs, (extra >> 22) & 7) = (m68k_dreg (regs, (extra >> 22) & 7) & ~0xffff) | (dst1 & 0xffff); } }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } #endif /* MOVES.B #.W,(An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0e10_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel7420; } {{ uae_s16 extra = get_word_ce020_prefetch (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = m68k_areg (regs, dstreg); x_put_byte (dsta, src); }}else{{ uaecptr srca = m68k_areg (regs, dstreg); { uae_s8 src = x_get_byte (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = (uae_s32)(uae_s8)src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (m68k_dreg (regs, (extra >> 12) & 7) & ~0xff) | ((src) & 0xff); } }}} m68k_incpc (4); }}} regs.ce020memcycles += 2 * cpucycleunit; endlabel7420: ; return; } #endif /* MOVES.B #.W,(An)+ */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0e18_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel7421; } {{ uae_s16 extra = get_word_ce020_prefetch (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; x_put_byte (dsta, src); }}else{{ uaecptr srca = m68k_areg (regs, dstreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = (uae_s32)(uae_s8)src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (m68k_dreg (regs, (extra >> 12) & 7) & ~0xff) | ((src) & 0xff); } }}} m68k_incpc (4); }}} regs.ce020memcycles += 2 * cpucycleunit; endlabel7421: ; return; } #endif /* MOVES.B #.W,-(An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0e20_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel7422; } {{ uae_s16 extra = get_word_ce020_prefetch (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; x_put_byte (dsta, src); }}else{{ uaecptr srca; srca = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, dstreg) = srca; if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = (uae_s32)(uae_s8)src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (m68k_dreg (regs, (extra >> 12) & 7) & ~0xff) | ((src) & 0xff); } }}} m68k_incpc (4); }}} regs.ce020memcycles += 2 * cpucycleunit; endlabel7422: ; return; } #endif /* MOVES.B #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0e28_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel7423; } {{ uae_s16 extra = get_word_ce020_prefetch (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); x_put_byte (dsta, src); }}else{{ uaecptr srca = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s8 src = x_get_byte (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = (uae_s32)(uae_s8)src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (m68k_dreg (regs, (extra >> 12) & 7) & ~0xff) | ((src) & 0xff); } }}} m68k_incpc (6); }}} regs.ce020memcycles += 2 * cpucycleunit; endlabel7423: ; return; } #endif /* MOVES.B #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0e30_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel7424; } {{ uae_s16 extra = get_word_ce020_prefetch (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); x_put_byte (dsta, src); }}}else{{ uaecptr srca; m68k_incpc (4); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s8 src = x_get_byte (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = (uae_s32)(uae_s8)src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (m68k_dreg (regs, (extra >> 12) & 7) & ~0xff) | ((src) & 0xff); } }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel7424: ; return; } #endif /* MOVES.B #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0e38_21)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel7425; } {{ uae_s16 extra = get_word_ce020_prefetch (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); x_put_byte (dsta, src); }}else{{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s8 src = x_get_byte (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = (uae_s32)(uae_s8)src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (m68k_dreg (regs, (extra >> 12) & 7) & ~0xff) | ((src) & 0xff); } }}} m68k_incpc (6); }}} regs.ce020memcycles += 2 * cpucycleunit; endlabel7425: ; return; } #endif /* MOVES.B #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0e39_21)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel7426; } {{ uae_s16 extra = get_word_ce020_prefetch (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = get_long_ce020_prefetch (4); x_put_byte (dsta, src); }}else{{ uaecptr srca = get_long_ce020_prefetch (4); { uae_s8 src = x_get_byte (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = (uae_s32)(uae_s8)src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (m68k_dreg (regs, (extra >> 12) & 7) & ~0xff) | ((src) & 0xff); } }}} m68k_incpc (8); }}} regs.ce020memcycles += 2 * cpucycleunit; endlabel7426: ; return; } #endif /* MOVES.W #.W,(An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0e50_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel7427; } {{ uae_s16 extra = get_word_ce020_prefetch (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = m68k_areg (regs, dstreg); x_put_word (dsta, src); }}else{{ uaecptr srca = m68k_areg (regs, dstreg); { uae_s16 src = x_get_word (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = (uae_s32)(uae_s16)src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (m68k_dreg (regs, (extra >> 12) & 7) & ~0xffff) | ((src) & 0xffff); } }}} m68k_incpc (4); }}} regs.ce020memcycles += 2 * cpucycleunit; endlabel7427: ; return; } #endif /* MOVES.W #.W,(An)+ */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0e58_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel7428; } {{ uae_s16 extra = get_word_ce020_prefetch (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 2; x_put_word (dsta, src); }}else{{ uaecptr srca = m68k_areg (regs, dstreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, dstreg) += 2; if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = (uae_s32)(uae_s16)src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (m68k_dreg (regs, (extra >> 12) & 7) & ~0xffff) | ((src) & 0xffff); } }}} m68k_incpc (4); }}} regs.ce020memcycles += 2 * cpucycleunit; endlabel7428: ; return; } #endif /* MOVES.W #.W,-(An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0e60_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel7429; } {{ uae_s16 extra = get_word_ce020_prefetch (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; m68k_areg (regs, dstreg) = dsta; x_put_word (dsta, src); }}else{{ uaecptr srca; srca = m68k_areg (regs, dstreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, dstreg) = srca; if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = (uae_s32)(uae_s16)src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (m68k_dreg (regs, (extra >> 12) & 7) & ~0xffff) | ((src) & 0xffff); } }}} m68k_incpc (4); }}} regs.ce020memcycles += 2 * cpucycleunit; endlabel7429: ; return; } #endif /* MOVES.W #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0e68_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel7430; } {{ uae_s16 extra = get_word_ce020_prefetch (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); x_put_word (dsta, src); }}else{{ uaecptr srca = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s16 src = x_get_word (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = (uae_s32)(uae_s16)src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (m68k_dreg (regs, (extra >> 12) & 7) & ~0xffff) | ((src) & 0xffff); } }}} m68k_incpc (6); }}} regs.ce020memcycles += 2 * cpucycleunit; endlabel7430: ; return; } #endif /* MOVES.W #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0e70_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel7431; } {{ uae_s16 extra = get_word_ce020_prefetch (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); x_put_word (dsta, src); }}}else{{ uaecptr srca; m68k_incpc (4); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s16 src = x_get_word (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = (uae_s32)(uae_s16)src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (m68k_dreg (regs, (extra >> 12) & 7) & ~0xffff) | ((src) & 0xffff); } }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel7431: ; return; } #endif /* MOVES.W #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0e78_21)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel7432; } {{ uae_s16 extra = get_word_ce020_prefetch (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); x_put_word (dsta, src); }}else{{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s16 src = x_get_word (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = (uae_s32)(uae_s16)src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (m68k_dreg (regs, (extra >> 12) & 7) & ~0xffff) | ((src) & 0xffff); } }}} m68k_incpc (6); }}} regs.ce020memcycles += 2 * cpucycleunit; endlabel7432: ; return; } #endif /* MOVES.W #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0e79_21)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel7433; } {{ uae_s16 extra = get_word_ce020_prefetch (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = get_long_ce020_prefetch (4); x_put_word (dsta, src); }}else{{ uaecptr srca = get_long_ce020_prefetch (4); { uae_s16 src = x_get_word (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = (uae_s32)(uae_s16)src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (m68k_dreg (regs, (extra >> 12) & 7) & ~0xffff) | ((src) & 0xffff); } }}} m68k_incpc (8); }}} regs.ce020memcycles += 2 * cpucycleunit; endlabel7433: ; return; } #endif /* MOVES.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0e90_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel7434; } {{ uae_s16 extra = get_word_ce020_prefetch (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = m68k_areg (regs, dstreg); x_put_long (dsta, src); }}else{{ uaecptr srca = m68k_areg (regs, dstreg); { uae_s32 src = x_get_long (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (src); } }}} m68k_incpc (4); }}} regs.ce020memcycles += 2 * cpucycleunit; endlabel7434: ; return; } #endif /* MOVES.L #.W,(An)+ */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0e98_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel7435; } {{ uae_s16 extra = get_word_ce020_prefetch (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 4; x_put_long (dsta, src); }}else{{ uaecptr srca = m68k_areg (regs, dstreg); { uae_s32 src = x_get_long (srca); m68k_areg (regs, dstreg) += 4; if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (src); } }}} m68k_incpc (4); }}} regs.ce020memcycles += 2 * cpucycleunit; endlabel7435: ; return; } #endif /* MOVES.L #.W,-(An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0ea0_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel7436; } {{ uae_s16 extra = get_word_ce020_prefetch (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; m68k_areg (regs, dstreg) = dsta; x_put_long (dsta, src); }}else{{ uaecptr srca; srca = m68k_areg (regs, dstreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, dstreg) = srca; if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (src); } }}} m68k_incpc (4); }}} regs.ce020memcycles += 2 * cpucycleunit; endlabel7436: ; return; } #endif /* MOVES.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0ea8_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel7437; } {{ uae_s16 extra = get_word_ce020_prefetch (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); x_put_long (dsta, src); }}else{{ uaecptr srca = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s32 src = x_get_long (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (src); } }}} m68k_incpc (6); }}} regs.ce020memcycles += 2 * cpucycleunit; endlabel7437: ; return; } #endif /* MOVES.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0eb0_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel7438; } {{ uae_s16 extra = get_word_ce020_prefetch (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); x_put_long (dsta, src); }}}else{{ uaecptr srca; m68k_incpc (4); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s32 src = x_get_long (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (src); } }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel7438: ; return; } #endif /* MOVES.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0eb8_21)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel7439; } {{ uae_s16 extra = get_word_ce020_prefetch (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); x_put_long (dsta, src); }}else{{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s32 src = x_get_long (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (src); } }}} m68k_incpc (6); }}} regs.ce020memcycles += 2 * cpucycleunit; endlabel7439: ; return; } #endif /* MOVES.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0eb9_21)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel7440; } {{ uae_s16 extra = get_word_ce020_prefetch (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = get_long_ce020_prefetch (4); x_put_long (dsta, src); }}else{{ uaecptr srca = get_long_ce020_prefetch (4); { uae_s32 src = x_get_long (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (src); } }}} m68k_incpc (8); }}} regs.ce020memcycles += 2 * cpucycleunit; endlabel7440: ; return; } #endif /* CAS.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0ed0_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(m68k_dreg (regs, rc))); { int flgs = ((uae_s32)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(m68k_dreg (regs, rc))) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); m68k_incpc (4); if (GET_ZFLG ()){ x_put_long (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = dst; }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* CAS.L #.W,(An)+ */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0ed8_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) += 4; { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(m68k_dreg (regs, rc))); { int flgs = ((uae_s32)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(m68k_dreg (regs, rc))) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); m68k_incpc (4); if (GET_ZFLG ()){ x_put_long (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = dst; }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* CAS.L #.W,-(An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0ee0_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) = dsta; { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(m68k_dreg (regs, rc))); { int flgs = ((uae_s32)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(m68k_dreg (regs, rc))) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); m68k_incpc (4); if (GET_ZFLG ()){ x_put_long (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = dst; }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* CAS.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0ee8_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s32 dst = x_get_long (dsta); { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(m68k_dreg (regs, rc))); { int flgs = ((uae_s32)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(m68k_dreg (regs, rc))) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); m68k_incpc (6); if (GET_ZFLG ()){ x_put_long (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = dst; }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* CAS.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0ef0_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s32 dst = x_get_long (dsta); { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(m68k_dreg (regs, rc))); { int flgs = ((uae_s32)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(m68k_dreg (regs, rc))) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); if (GET_ZFLG ()){ x_put_long (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = dst; }}}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* CAS.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0ef8_21)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s32 dst = x_get_long (dsta); { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(m68k_dreg (regs, rc))); { int flgs = ((uae_s32)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(m68k_dreg (regs, rc))) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); m68k_incpc (6); if (GET_ZFLG ()){ x_put_long (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = dst; }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* CAS.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0ef9_21)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (4); { uae_s32 dst = x_get_long (dsta); { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(m68k_dreg (regs, rc))); { int flgs = ((uae_s32)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(m68k_dreg (regs, rc))) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); m68k_incpc (8); if (GET_ZFLG ()){ x_put_long (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = dst; }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* CAS2.L #.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0efc_21)(uae_u32 opcode) { {{ uae_s32 extra = get_long_ce020_prefetch (2); uae_u32 rn1 = regs.regs[(extra >> 28) & 15]; uae_u32 rn2 = regs.regs[(extra >> 12) & 15]; uae_u32 dst1 = x_get_long (rn1), dst2 = x_get_long (rn2); {uae_u32 newv = ((uae_s32)(dst1)) - ((uae_s32)(m68k_dreg (regs, (extra >> 16) & 7))); { int flgs = ((uae_s32)(m68k_dreg (regs, (extra >> 16) & 7))) < 0; int flgo = ((uae_s32)(dst1)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(m68k_dreg (regs, (extra >> 16) & 7))) > ((uae_u32)(dst1))); SET_NFLG (flgn != 0); if (GET_ZFLG ()) { {uae_u32 newv = ((uae_s32)(dst2)) - ((uae_s32)(m68k_dreg (regs, extra & 7))); { int flgs = ((uae_s32)(m68k_dreg (regs, extra & 7))) < 0; int flgo = ((uae_s32)(dst2)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(m68k_dreg (regs, extra & 7))) > ((uae_u32)(dst2))); SET_NFLG (flgn != 0); if (GET_ZFLG ()) { x_put_long (rn1, m68k_dreg (regs, (extra >> 22) & 7)); x_put_long (rn2, m68k_dreg (regs, (extra >> 6) & 7)); }} }}}} if (! GET_ZFLG ()) { m68k_dreg (regs, (extra >> 6) & 7) = dst2; m68k_dreg (regs, (extra >> 22) & 7) = dst1; } }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } #endif /* MOVE.B Dn,Dn */ void REGPARAM2 CPUFUNC(op_1000_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); m68k_incpc (2); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (An),Dn */ void REGPARAM2 CPUFUNC(op_1010_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (An)+,Dn */ void REGPARAM2 CPUFUNC(op_1018_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B -(An),Dn */ void REGPARAM2 CPUFUNC(op_1020_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_1028_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (d8,An,Xn),Dn */ void REGPARAM2 CPUFUNC(op_1030_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s8 src = x_get_byte (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (xxx).W,Dn */ void REGPARAM2 CPUFUNC(op_1038_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (xxx).L,Dn */ void REGPARAM2 CPUFUNC(op_1039_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (d16,PC),Dn */ void REGPARAM2 CPUFUNC(op_103a_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (d8,PC,Xn),Dn */ void REGPARAM2 CPUFUNC(op_103b_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s8 src = x_get_byte (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B #.B,Dn */ void REGPARAM2 CPUFUNC(op_103c_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); m68k_incpc (4); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B Dn,(An) */ void REGPARAM2 CPUFUNC(op_1080_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (2); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (An),(An) */ void REGPARAM2 CPUFUNC(op_1090_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (An)+,(An) */ void REGPARAM2 CPUFUNC(op_1098_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B -(An),(An) */ void REGPARAM2 CPUFUNC(op_10a0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (d16,An),(An) */ void REGPARAM2 CPUFUNC(op_10a8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (d8,An,Xn),(An) */ void REGPARAM2 CPUFUNC(op_10b0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (xxx).W,(An) */ void REGPARAM2 CPUFUNC(op_10b8_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (xxx).L,(An) */ void REGPARAM2 CPUFUNC(op_10b9_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (d16,PC),(An) */ void REGPARAM2 CPUFUNC(op_10ba_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (d8,PC,Xn),(An) */ void REGPARAM2 CPUFUNC(op_10bb_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B #.B,(An) */ void REGPARAM2 CPUFUNC(op_10bc_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B Dn,(An)+ */ void REGPARAM2 CPUFUNC(op_10c0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (2); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (An),(An)+ */ void REGPARAM2 CPUFUNC(op_10d0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (An)+,(An)+ */ void REGPARAM2 CPUFUNC(op_10d8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B -(An),(An)+ */ void REGPARAM2 CPUFUNC(op_10e0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (d16,An),(An)+ */ void REGPARAM2 CPUFUNC(op_10e8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (d8,An,Xn),(An)+ */ void REGPARAM2 CPUFUNC(op_10f0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (xxx).W,(An)+ */ void REGPARAM2 CPUFUNC(op_10f8_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (xxx).L,(An)+ */ void REGPARAM2 CPUFUNC(op_10f9_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (d16,PC),(An)+ */ void REGPARAM2 CPUFUNC(op_10fa_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (d8,PC,Xn),(An)+ */ void REGPARAM2 CPUFUNC(op_10fb_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B #.B,(An)+ */ void REGPARAM2 CPUFUNC(op_10fc_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B Dn,-(An) */ void REGPARAM2 CPUFUNC(op_1100_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (2); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (An),-(An) */ void REGPARAM2 CPUFUNC(op_1110_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (An)+,-(An) */ void REGPARAM2 CPUFUNC(op_1118_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B -(An),-(An) */ void REGPARAM2 CPUFUNC(op_1120_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (d16,An),-(An) */ void REGPARAM2 CPUFUNC(op_1128_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (d8,An,Xn),-(An) */ void REGPARAM2 CPUFUNC(op_1130_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s8 src = x_get_byte (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (xxx).W,-(An) */ void REGPARAM2 CPUFUNC(op_1138_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (xxx).L,-(An) */ void REGPARAM2 CPUFUNC(op_1139_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (d16,PC),-(An) */ void REGPARAM2 CPUFUNC(op_113a_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (d8,PC,Xn),-(An) */ void REGPARAM2 CPUFUNC(op_113b_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s8 src = x_get_byte (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B #.B,-(An) */ void REGPARAM2 CPUFUNC(op_113c_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B Dn,(d16,An) */ void REGPARAM2 CPUFUNC(op_1140_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (An),(d16,An) */ void REGPARAM2 CPUFUNC(op_1150_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (An)+,(d16,An) */ void REGPARAM2 CPUFUNC(op_1158_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B -(An),(d16,An) */ void REGPARAM2 CPUFUNC(op_1160_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (d16,An),(d16,An) */ void REGPARAM2 CPUFUNC(op_1168_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (d8,An,Xn),(d16,An) */ void REGPARAM2 CPUFUNC(op_1170_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (0); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (2); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (xxx).W,(d16,An) */ void REGPARAM2 CPUFUNC(op_1178_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (xxx).L,(d16,An) */ void REGPARAM2 CPUFUNC(op_1179_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (8); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (d16,PC),(d16,An) */ void REGPARAM2 CPUFUNC(op_117a_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (d8,PC,Xn),(d16,An) */ void REGPARAM2 CPUFUNC(op_117b_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (0); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (2); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B #.B,(d16,An) */ void REGPARAM2 CPUFUNC(op_117c_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (6); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B Dn,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_1180_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (An),(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_1190_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (An)+,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_1198_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B -(An),(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_11a0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (d16,An),(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_11a8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (d8,An,Xn),(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_11b0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s8 src = x_get_byte (srca); { uaecptr dsta; { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (xxx).W,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_11b8_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (xxx).L,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_11b9_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta; m68k_incpc (6); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (d16,PC),(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_11ba_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (d8,PC,Xn),(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_11bb_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s8 src = x_get_byte (srca); { uaecptr dsta; { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B #.B,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_11bc_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B Dn,(xxx).W */ void REGPARAM2 CPUFUNC(op_11c0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (An),(xxx).W */ void REGPARAM2 CPUFUNC(op_11d0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (An)+,(xxx).W */ void REGPARAM2 CPUFUNC(op_11d8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B -(An),(xxx).W */ void REGPARAM2 CPUFUNC(op_11e0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (d16,An),(xxx).W */ void REGPARAM2 CPUFUNC(op_11e8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (d8,An,Xn),(xxx).W */ void REGPARAM2 CPUFUNC(op_11f0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (0); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (2); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (xxx).W,(xxx).W */ void REGPARAM2 CPUFUNC(op_11f8_21)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (xxx).L,(xxx).W */ void REGPARAM2 CPUFUNC(op_11f9_21)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (8); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (d16,PC),(xxx).W */ void REGPARAM2 CPUFUNC(op_11fa_21)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (d8,PC,Xn),(xxx).W */ void REGPARAM2 CPUFUNC(op_11fb_21)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (0); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (2); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B #.B,(xxx).W */ void REGPARAM2 CPUFUNC(op_11fc_21)(uae_u32 opcode) { {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (6); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B Dn,(xxx).L */ void REGPARAM2 CPUFUNC(op_13c0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (6); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (An),(xxx).L */ void REGPARAM2 CPUFUNC(op_13d0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = get_long_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (An)+,(xxx).L */ void REGPARAM2 CPUFUNC(op_13d8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uaecptr dsta = get_long_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B -(An),(xxx).L */ void REGPARAM2 CPUFUNC(op_13e0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = get_long_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (d16,An),(xxx).L */ void REGPARAM2 CPUFUNC(op_13e8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = get_long_ce020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (8); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (d8,An,Xn),(xxx).L */ void REGPARAM2 CPUFUNC(op_13f0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = get_long_ce020_prefetch (0); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (xxx).W,(xxx).L */ void REGPARAM2 CPUFUNC(op_13f8_21)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = get_long_ce020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (8); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (xxx).L,(xxx).L */ void REGPARAM2 CPUFUNC(op_13f9_21)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = get_long_ce020_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (10); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (d16,PC),(xxx).L */ void REGPARAM2 CPUFUNC(op_13fa_21)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = get_long_ce020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (8); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (d8,PC,Xn),(xxx).L */ void REGPARAM2 CPUFUNC(op_13fb_21)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = get_long_ce020_prefetch (0); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B #.B,(xxx).L */ void REGPARAM2 CPUFUNC(op_13fc_21)(uae_u32 opcode) { {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (8); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L Dn,Dn */ void REGPARAM2 CPUFUNC(op_2000_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpc (2); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L An,Dn */ void REGPARAM2 CPUFUNC(op_2008_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpc (2); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (An),Dn */ void REGPARAM2 CPUFUNC(op_2010_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (An)+,Dn */ void REGPARAM2 CPUFUNC(op_2018_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) += 4; { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L -(An),Dn */ void REGPARAM2 CPUFUNC(op_2020_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) = srca; { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_2028_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (d8,An,Xn),Dn */ void REGPARAM2 CPUFUNC(op_2030_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (xxx).W,Dn */ void REGPARAM2 CPUFUNC(op_2038_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (xxx).L,Dn */ void REGPARAM2 CPUFUNC(op_2039_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (d16,PC),Dn */ void REGPARAM2 CPUFUNC(op_203a_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (d8,PC,Xn),Dn */ void REGPARAM2 CPUFUNC(op_203b_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L #.L,Dn */ void REGPARAM2 CPUFUNC(op_203c_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpc (6); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVEA.L Dn,An */ void REGPARAM2 CPUFUNC(op_2040_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { m68k_areg (regs, dstreg) = (src); m68k_incpc (2); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVEA.L An,An */ void REGPARAM2 CPUFUNC(op_2048_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { m68k_areg (regs, dstreg) = (src); m68k_incpc (2); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVEA.L (An),An */ void REGPARAM2 CPUFUNC(op_2050_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); { m68k_areg (regs, dstreg) = (src); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVEA.L (An)+,An */ void REGPARAM2 CPUFUNC(op_2058_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) += 4; { m68k_areg (regs, dstreg) = (src); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVEA.L -(An),An */ void REGPARAM2 CPUFUNC(op_2060_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) = srca; { m68k_areg (regs, dstreg) = (src); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVEA.L (d16,An),An */ void REGPARAM2 CPUFUNC(op_2068_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { m68k_areg (regs, dstreg) = (src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVEA.L (d8,An,Xn),An */ void REGPARAM2 CPUFUNC(op_2070_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { m68k_areg (regs, dstreg) = (src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVEA.L (xxx).W,An */ void REGPARAM2 CPUFUNC(op_2078_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { m68k_areg (regs, dstreg) = (src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVEA.L (xxx).L,An */ void REGPARAM2 CPUFUNC(op_2079_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { m68k_areg (regs, dstreg) = (src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVEA.L (d16,PC),An */ void REGPARAM2 CPUFUNC(op_207a_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { m68k_areg (regs, dstreg) = (src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVEA.L (d8,PC,Xn),An */ void REGPARAM2 CPUFUNC(op_207b_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { m68k_areg (regs, dstreg) = (src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVEA.L #.L,An */ void REGPARAM2 CPUFUNC(op_207c_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { m68k_areg (regs, dstreg) = (src); m68k_incpc (6); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L Dn,(An) */ void REGPARAM2 CPUFUNC(op_2080_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (2); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L An,(An) */ void REGPARAM2 CPUFUNC(op_2088_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (2); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (An),(An) */ void REGPARAM2 CPUFUNC(op_2090_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (An)+,(An) */ void REGPARAM2 CPUFUNC(op_2098_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) += 4; { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L -(An),(An) */ void REGPARAM2 CPUFUNC(op_20a0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (d16,An),(An) */ void REGPARAM2 CPUFUNC(op_20a8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (d8,An,Xn),(An) */ void REGPARAM2 CPUFUNC(op_20b0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (xxx).W,(An) */ void REGPARAM2 CPUFUNC(op_20b8_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (xxx).L,(An) */ void REGPARAM2 CPUFUNC(op_20b9_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (d16,PC),(An) */ void REGPARAM2 CPUFUNC(op_20ba_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (d8,PC,Xn),(An) */ void REGPARAM2 CPUFUNC(op_20bb_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L #.L,(An) */ void REGPARAM2 CPUFUNC(op_20bc_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (6); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L Dn,(An)+ */ void REGPARAM2 CPUFUNC(op_20c0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (2); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L An,(An)+ */ void REGPARAM2 CPUFUNC(op_20c8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (2); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (An),(An)+ */ void REGPARAM2 CPUFUNC(op_20d0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (An)+,(An)+ */ void REGPARAM2 CPUFUNC(op_20d8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) += 4; { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L -(An),(An)+ */ void REGPARAM2 CPUFUNC(op_20e0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (d16,An),(An)+ */ void REGPARAM2 CPUFUNC(op_20e8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (d8,An,Xn),(An)+ */ void REGPARAM2 CPUFUNC(op_20f0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (xxx).W,(An)+ */ void REGPARAM2 CPUFUNC(op_20f8_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (xxx).L,(An)+ */ void REGPARAM2 CPUFUNC(op_20f9_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (d16,PC),(An)+ */ void REGPARAM2 CPUFUNC(op_20fa_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (d8,PC,Xn),(An)+ */ void REGPARAM2 CPUFUNC(op_20fb_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L #.L,(An)+ */ void REGPARAM2 CPUFUNC(op_20fc_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (6); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L Dn,-(An) */ void REGPARAM2 CPUFUNC(op_2100_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (2); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L An,-(An) */ void REGPARAM2 CPUFUNC(op_2108_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (2); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (An),-(An) */ void REGPARAM2 CPUFUNC(op_2110_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (An)+,-(An) */ void REGPARAM2 CPUFUNC(op_2118_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) += 4; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L -(An),-(An) */ void REGPARAM2 CPUFUNC(op_2120_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (d16,An),-(An) */ void REGPARAM2 CPUFUNC(op_2128_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (d8,An,Xn),-(An) */ void REGPARAM2 CPUFUNC(op_2130_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (xxx).W,-(An) */ void REGPARAM2 CPUFUNC(op_2138_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (xxx).L,-(An) */ void REGPARAM2 CPUFUNC(op_2139_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (d16,PC),-(An) */ void REGPARAM2 CPUFUNC(op_213a_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (d8,PC,Xn),-(An) */ void REGPARAM2 CPUFUNC(op_213b_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L #.L,-(An) */ void REGPARAM2 CPUFUNC(op_213c_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (6); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L Dn,(d16,An) */ void REGPARAM2 CPUFUNC(op_2140_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (4); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L An,(d16,An) */ void REGPARAM2 CPUFUNC(op_2148_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (4); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (An),(d16,An) */ void REGPARAM2 CPUFUNC(op_2150_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (An)+,(d16,An) */ void REGPARAM2 CPUFUNC(op_2158_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) += 4; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L -(An),(d16,An) */ void REGPARAM2 CPUFUNC(op_2160_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (d16,An),(d16,An) */ void REGPARAM2 CPUFUNC(op_2168_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } #endif #ifdef PART_3 /* MOVE.L (d8,An,Xn),(d16,An) */ void REGPARAM2 CPUFUNC(op_2170_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (0); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (2); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (xxx).W,(d16,An) */ void REGPARAM2 CPUFUNC(op_2178_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (xxx).L,(d16,An) */ void REGPARAM2 CPUFUNC(op_2179_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (8); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (d16,PC),(d16,An) */ void REGPARAM2 CPUFUNC(op_217a_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (d8,PC,Xn),(d16,An) */ void REGPARAM2 CPUFUNC(op_217b_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (0); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (2); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L #.L,(d16,An) */ void REGPARAM2 CPUFUNC(op_217c_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (8); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L Dn,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_2180_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L An,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_2188_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (An),(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_2190_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (An)+,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_2198_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) += 4; { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L -(An),(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_21a0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (d16,An),(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_21a8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (d8,An,Xn),(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_21b0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { uaecptr dsta; { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (xxx).W,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_21b8_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (xxx).L,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_21b9_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta; m68k_incpc (6); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (d16,PC),(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_21ba_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (d8,PC,Xn),(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_21bb_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { uaecptr dsta; { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L #.L,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_21bc_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (6); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L Dn,(xxx).W */ void REGPARAM2 CPUFUNC(op_21c0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (4); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L An,(xxx).W */ void REGPARAM2 CPUFUNC(op_21c8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_areg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (4); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (An),(xxx).W */ void REGPARAM2 CPUFUNC(op_21d0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (An)+,(xxx).W */ void REGPARAM2 CPUFUNC(op_21d8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) += 4; { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L -(An),(xxx).W */ void REGPARAM2 CPUFUNC(op_21e0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (d16,An),(xxx).W */ void REGPARAM2 CPUFUNC(op_21e8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (d8,An,Xn),(xxx).W */ void REGPARAM2 CPUFUNC(op_21f0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (0); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (2); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (xxx).W,(xxx).W */ void REGPARAM2 CPUFUNC(op_21f8_21)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (xxx).L,(xxx).W */ void REGPARAM2 CPUFUNC(op_21f9_21)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (8); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (d16,PC),(xxx).W */ void REGPARAM2 CPUFUNC(op_21fa_21)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (d8,PC,Xn),(xxx).W */ void REGPARAM2 CPUFUNC(op_21fb_21)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (0); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (2); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L #.L,(xxx).W */ void REGPARAM2 CPUFUNC(op_21fc_21)(uae_u32 opcode) { {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (8); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L Dn,(xxx).L */ void REGPARAM2 CPUFUNC(op_23c0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (6); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L An,(xxx).L */ void REGPARAM2 CPUFUNC(op_23c8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_areg (regs, srcreg); { uaecptr dsta = get_long_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (6); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (An),(xxx).L */ void REGPARAM2 CPUFUNC(op_23d0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); { uaecptr dsta = get_long_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (An)+,(xxx).L */ void REGPARAM2 CPUFUNC(op_23d8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) += 4; { uaecptr dsta = get_long_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L -(An),(xxx).L */ void REGPARAM2 CPUFUNC(op_23e0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = get_long_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (d16,An),(xxx).L */ void REGPARAM2 CPUFUNC(op_23e8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta = get_long_ce020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (8); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (d8,An,Xn),(xxx).L */ void REGPARAM2 CPUFUNC(op_23f0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { uaecptr dsta = get_long_ce020_prefetch (0); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (4); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (xxx).W,(xxx).L */ void REGPARAM2 CPUFUNC(op_23f8_21)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta = get_long_ce020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (8); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (xxx).L,(xxx).L */ void REGPARAM2 CPUFUNC(op_23f9_21)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta = get_long_ce020_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (10); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (d16,PC),(xxx).L */ void REGPARAM2 CPUFUNC(op_23fa_21)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta = get_long_ce020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (8); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (d8,PC,Xn),(xxx).L */ void REGPARAM2 CPUFUNC(op_23fb_21)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { uaecptr dsta = get_long_ce020_prefetch (0); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (4); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L #.L,(xxx).L */ void REGPARAM2 CPUFUNC(op_23fc_21)(uae_u32 opcode) { {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (10); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W Dn,Dn */ void REGPARAM2 CPUFUNC(op_3000_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpc (2); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W An,Dn */ void REGPARAM2 CPUFUNC(op_3008_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpc (2); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (An),Dn */ void REGPARAM2 CPUFUNC(op_3010_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (An)+,Dn */ void REGPARAM2 CPUFUNC(op_3018_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W -(An),Dn */ void REGPARAM2 CPUFUNC(op_3020_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_3028_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (d8,An,Xn),Dn */ void REGPARAM2 CPUFUNC(op_3030_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (xxx).W,Dn */ void REGPARAM2 CPUFUNC(op_3038_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (xxx).L,Dn */ void REGPARAM2 CPUFUNC(op_3039_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (d16,PC),Dn */ void REGPARAM2 CPUFUNC(op_303a_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (d8,PC,Xn),Dn */ void REGPARAM2 CPUFUNC(op_303b_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W #.W,Dn */ void REGPARAM2 CPUFUNC(op_303c_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpc (4); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVEA.W Dn,An */ void REGPARAM2 CPUFUNC(op_3040_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpc (2); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVEA.W An,An */ void REGPARAM2 CPUFUNC(op_3048_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpc (2); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVEA.W (An),An */ void REGPARAM2 CPUFUNC(op_3050_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVEA.W (An)+,An */ void REGPARAM2 CPUFUNC(op_3058_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVEA.W -(An),An */ void REGPARAM2 CPUFUNC(op_3060_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVEA.W (d16,An),An */ void REGPARAM2 CPUFUNC(op_3068_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVEA.W (d8,An,Xn),An */ void REGPARAM2 CPUFUNC(op_3070_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVEA.W (xxx).W,An */ void REGPARAM2 CPUFUNC(op_3078_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVEA.W (xxx).L,An */ void REGPARAM2 CPUFUNC(op_3079_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVEA.W (d16,PC),An */ void REGPARAM2 CPUFUNC(op_307a_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVEA.W (d8,PC,Xn),An */ void REGPARAM2 CPUFUNC(op_307b_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVEA.W #.W,An */ void REGPARAM2 CPUFUNC(op_307c_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpc (4); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W Dn,(An) */ void REGPARAM2 CPUFUNC(op_3080_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (2); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W An,(An) */ void REGPARAM2 CPUFUNC(op_3088_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (2); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (An),(An) */ void REGPARAM2 CPUFUNC(op_3090_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (An)+,(An) */ void REGPARAM2 CPUFUNC(op_3098_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W -(An),(An) */ void REGPARAM2 CPUFUNC(op_30a0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (d16,An),(An) */ void REGPARAM2 CPUFUNC(op_30a8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (d8,An,Xn),(An) */ void REGPARAM2 CPUFUNC(op_30b0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (xxx).W,(An) */ void REGPARAM2 CPUFUNC(op_30b8_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (xxx).L,(An) */ void REGPARAM2 CPUFUNC(op_30b9_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (d16,PC),(An) */ void REGPARAM2 CPUFUNC(op_30ba_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (d8,PC,Xn),(An) */ void REGPARAM2 CPUFUNC(op_30bb_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W #.W,(An) */ void REGPARAM2 CPUFUNC(op_30bc_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W Dn,(An)+ */ void REGPARAM2 CPUFUNC(op_30c0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (2); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W An,(An)+ */ void REGPARAM2 CPUFUNC(op_30c8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (2); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (An),(An)+ */ void REGPARAM2 CPUFUNC(op_30d0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (An)+,(An)+ */ void REGPARAM2 CPUFUNC(op_30d8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W -(An),(An)+ */ void REGPARAM2 CPUFUNC(op_30e0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (d16,An),(An)+ */ void REGPARAM2 CPUFUNC(op_30e8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (d8,An,Xn),(An)+ */ void REGPARAM2 CPUFUNC(op_30f0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (xxx).W,(An)+ */ void REGPARAM2 CPUFUNC(op_30f8_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (xxx).L,(An)+ */ void REGPARAM2 CPUFUNC(op_30f9_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (d16,PC),(An)+ */ void REGPARAM2 CPUFUNC(op_30fa_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (d8,PC,Xn),(An)+ */ void REGPARAM2 CPUFUNC(op_30fb_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W #.W,(An)+ */ void REGPARAM2 CPUFUNC(op_30fc_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W Dn,-(An) */ void REGPARAM2 CPUFUNC(op_3100_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (2); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W An,-(An) */ void REGPARAM2 CPUFUNC(op_3108_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (2); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (An),-(An) */ void REGPARAM2 CPUFUNC(op_3110_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (An)+,-(An) */ void REGPARAM2 CPUFUNC(op_3118_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W -(An),-(An) */ void REGPARAM2 CPUFUNC(op_3120_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (d16,An),-(An) */ void REGPARAM2 CPUFUNC(op_3128_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (d8,An,Xn),-(An) */ void REGPARAM2 CPUFUNC(op_3130_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (xxx).W,-(An) */ void REGPARAM2 CPUFUNC(op_3138_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (xxx).L,-(An) */ void REGPARAM2 CPUFUNC(op_3139_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (d16,PC),-(An) */ void REGPARAM2 CPUFUNC(op_313a_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (d8,PC,Xn),-(An) */ void REGPARAM2 CPUFUNC(op_313b_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W #.W,-(An) */ void REGPARAM2 CPUFUNC(op_313c_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W Dn,(d16,An) */ void REGPARAM2 CPUFUNC(op_3140_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W An,(d16,An) */ void REGPARAM2 CPUFUNC(op_3148_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (An),(d16,An) */ void REGPARAM2 CPUFUNC(op_3150_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (An)+,(d16,An) */ void REGPARAM2 CPUFUNC(op_3158_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W -(An),(d16,An) */ void REGPARAM2 CPUFUNC(op_3160_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (d16,An),(d16,An) */ void REGPARAM2 CPUFUNC(op_3168_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (d8,An,Xn),(d16,An) */ void REGPARAM2 CPUFUNC(op_3170_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (0); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (2); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (xxx).W,(d16,An) */ void REGPARAM2 CPUFUNC(op_3178_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (xxx).L,(d16,An) */ void REGPARAM2 CPUFUNC(op_3179_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (8); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (d16,PC),(d16,An) */ void REGPARAM2 CPUFUNC(op_317a_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (d8,PC,Xn),(d16,An) */ void REGPARAM2 CPUFUNC(op_317b_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (0); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (2); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W #.W,(d16,An) */ void REGPARAM2 CPUFUNC(op_317c_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W Dn,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_3180_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W An,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_3188_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (An),(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_3190_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (An)+,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_3198_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W -(An),(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_31a0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (d16,An),(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_31a8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (d8,An,Xn),(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_31b0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uaecptr dsta; { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (xxx).W,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_31b8_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (xxx).L,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_31b9_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta; m68k_incpc (6); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (d16,PC),(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_31ba_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (d8,PC,Xn),(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_31bb_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uaecptr dsta; { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W #.W,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_31bc_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W Dn,(xxx).W */ void REGPARAM2 CPUFUNC(op_31c0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W An,(xxx).W */ void REGPARAM2 CPUFUNC(op_31c8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_areg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (An),(xxx).W */ void REGPARAM2 CPUFUNC(op_31d0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (An)+,(xxx).W */ void REGPARAM2 CPUFUNC(op_31d8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W -(An),(xxx).W */ void REGPARAM2 CPUFUNC(op_31e0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (d16,An),(xxx).W */ void REGPARAM2 CPUFUNC(op_31e8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (d8,An,Xn),(xxx).W */ void REGPARAM2 CPUFUNC(op_31f0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (0); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (2); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (xxx).W,(xxx).W */ void REGPARAM2 CPUFUNC(op_31f8_21)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (xxx).L,(xxx).W */ void REGPARAM2 CPUFUNC(op_31f9_21)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (8); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (d16,PC),(xxx).W */ void REGPARAM2 CPUFUNC(op_31fa_21)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (d8,PC,Xn),(xxx).W */ void REGPARAM2 CPUFUNC(op_31fb_21)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (0); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (2); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W #.W,(xxx).W */ void REGPARAM2 CPUFUNC(op_31fc_21)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W Dn,(xxx).L */ void REGPARAM2 CPUFUNC(op_33c0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W An,(xxx).L */ void REGPARAM2 CPUFUNC(op_33c8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_areg (regs, srcreg); { uaecptr dsta = get_long_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (An),(xxx).L */ void REGPARAM2 CPUFUNC(op_33d0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); { uaecptr dsta = get_long_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (An)+,(xxx).L */ void REGPARAM2 CPUFUNC(op_33d8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uaecptr dsta = get_long_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W -(An),(xxx).L */ void REGPARAM2 CPUFUNC(op_33e0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = get_long_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (d16,An),(xxx).L */ void REGPARAM2 CPUFUNC(op_33e8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta = get_long_ce020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (8); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (d8,An,Xn),(xxx).L */ void REGPARAM2 CPUFUNC(op_33f0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uaecptr dsta = get_long_ce020_prefetch (0); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (xxx).W,(xxx).L */ void REGPARAM2 CPUFUNC(op_33f8_21)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta = get_long_ce020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (8); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (xxx).L,(xxx).L */ void REGPARAM2 CPUFUNC(op_33f9_21)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta = get_long_ce020_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (10); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (d16,PC),(xxx).L */ void REGPARAM2 CPUFUNC(op_33fa_21)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta = get_long_ce020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (8); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (d8,PC,Xn),(xxx).L */ void REGPARAM2 CPUFUNC(op_33fb_21)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uaecptr dsta = get_long_ce020_prefetch (0); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W #.W,(xxx).L */ void REGPARAM2 CPUFUNC(op_33fc_21)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (8); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* NEGX.B Dn */ void REGPARAM2 CPUFUNC(op_4000_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((newv) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NEGX.B (An) */ void REGPARAM2 CPUFUNC(op_4010_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); x_put_byte (srca, newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NEGX.B (An)+ */ void REGPARAM2 CPUFUNC(op_4018_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); x_put_byte (srca, newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NEGX.B -(An) */ void REGPARAM2 CPUFUNC(op_4020_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); x_put_byte (srca, newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NEGX.B (d16,An) */ void REGPARAM2 CPUFUNC(op_4028_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); x_put_byte (srca, newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* NEGX.B (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_4030_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s8 src = x_get_byte (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); x_put_byte (srca, newv); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* NEGX.B (xxx).W */ void REGPARAM2 CPUFUNC(op_4038_21)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); x_put_byte (srca, newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* NEGX.B (xxx).L */ void REGPARAM2 CPUFUNC(op_4039_21)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); x_put_byte (srca, newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* NEGX.W Dn */ void REGPARAM2 CPUFUNC(op_4040_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | ((newv) & 0xffff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NEGX.W (An) */ void REGPARAM2 CPUFUNC(op_4050_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); x_put_word (srca, newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NEGX.W (An)+ */ void REGPARAM2 CPUFUNC(op_4058_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); x_put_word (srca, newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NEGX.W -(An) */ void REGPARAM2 CPUFUNC(op_4060_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); x_put_word (srca, newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NEGX.W (d16,An) */ void REGPARAM2 CPUFUNC(op_4068_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); x_put_word (srca, newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* NEGX.W (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_4070_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); x_put_word (srca, newv); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* NEGX.W (xxx).W */ void REGPARAM2 CPUFUNC(op_4078_21)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); x_put_word (srca, newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* NEGX.W (xxx).L */ void REGPARAM2 CPUFUNC(op_4079_21)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); x_put_word (srca, newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* NEGX.L Dn */ void REGPARAM2 CPUFUNC(op_4080_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, srcreg) = (newv); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NEGX.L (An) */ void REGPARAM2 CPUFUNC(op_4090_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); x_put_long (srca, newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NEGX.L (An)+ */ void REGPARAM2 CPUFUNC(op_4098_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) += 4; { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); x_put_long (srca, newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NEGX.L -(An) */ void REGPARAM2 CPUFUNC(op_40a0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) = srca; { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); x_put_long (srca, newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NEGX.L (d16,An) */ void REGPARAM2 CPUFUNC(op_40a8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); x_put_long (srca, newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* NEGX.L (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_40b0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); x_put_long (srca, newv); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* NEGX.L (xxx).W */ void REGPARAM2 CPUFUNC(op_40b8_21)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); x_put_long (srca, newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* NEGX.L (xxx).L */ void REGPARAM2 CPUFUNC(op_40b9_21)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); x_put_long (srca, newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* MVSR2.W Dn */ void REGPARAM2 CPUFUNC(op_40c0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel7777; } {{ MakeSR (); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | ((regs.sr) & 0xffff); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); endlabel7777: ; return; } /* MVSR2.W (An) */ void REGPARAM2 CPUFUNC(op_40d0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel7778; } {{ uaecptr srca = m68k_areg (regs, srcreg); MakeSR (); x_put_word (srca, regs.sr); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); endlabel7778: ; return; } /* MVSR2.W (An)+ */ void REGPARAM2 CPUFUNC(op_40d8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel7779; } {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += 2; MakeSR (); x_put_word (srca, regs.sr); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); endlabel7779: ; return; } /* MVSR2.W -(An) */ void REGPARAM2 CPUFUNC(op_40e0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel7780; } {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; m68k_areg (regs, srcreg) = srca; MakeSR (); x_put_word (srca, regs.sr); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); endlabel7780: ; return; } /* MVSR2.W (d16,An) */ void REGPARAM2 CPUFUNC(op_40e8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel7781; } {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); MakeSR (); x_put_word (srca, regs.sr); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); endlabel7781: ; return; } /* MVSR2.W (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_40f0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel7782; } {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); MakeSR (); x_put_word (srca, regs.sr); }}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel7782: ; return; } /* MVSR2.W (xxx).W */ void REGPARAM2 CPUFUNC(op_40f8_21)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel7783; } {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); MakeSR (); x_put_word (srca, regs.sr); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); endlabel7783: ; return; } /* MVSR2.W (xxx).L */ void REGPARAM2 CPUFUNC(op_40f9_21)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel7784; } {{ uaecptr srca = get_long_ce020_prefetch (2); MakeSR (); x_put_word (srca, regs.sr); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); endlabel7784: ; return; } /* CHK.L Dn,Dn */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4100_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); m68k_incpc (2); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel7785; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel7785; } }}} regs.ce020memcycles += 2 * cpucycleunit; endlabel7785: ; return; } #endif /* CHK.L (An),Dn */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4110_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); m68k_incpc (2); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel7786; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel7786; } }}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel7786: ; return; } #endif /* CHK.L (An)+,Dn */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4118_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) += 4; { uae_s32 dst = m68k_dreg (regs, dstreg); m68k_incpc (2); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel7787; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel7787; } }}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel7787: ; return; } #endif /* CHK.L -(An),Dn */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4120_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_dreg (regs, dstreg); m68k_incpc (2); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel7788; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel7788; } }}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel7788: ; return; } #endif /* CHK.L (d16,An),Dn */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4128_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); m68k_incpc (4); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel7789; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel7789; } }}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel7789: ; return; } #endif /* CHK.L (d8,An,Xn),Dn */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4130_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel7790; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel7790; } }}}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel7790: ; return; } #endif /* CHK.L (xxx).W,Dn */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4138_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); m68k_incpc (4); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel7791; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel7791; } }}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel7791: ; return; } #endif /* CHK.L (xxx).L,Dn */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4139_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); m68k_incpc (6); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel7792; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel7792; } }}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel7792: ; return; } #endif /* CHK.L (d16,PC),Dn */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_413a_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); m68k_incpc (4); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel7793; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel7793; } }}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel7793: ; return; } #endif /* CHK.L (d8,PC,Xn),Dn */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_413b_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel7794; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel7794; } }}}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel7794: ; return; } #endif /* CHK.L #.L,Dn */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_413c_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uae_s32 dst = m68k_dreg (regs, dstreg); m68k_incpc (6); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel7795; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel7795; } }}} regs.ce020memcycles += 2 * cpucycleunit; endlabel7795: ; return; } #endif /* CHK.W Dn,Dn */ void REGPARAM2 CPUFUNC(op_4180_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); m68k_incpc (2); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel7796; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel7796; } }}} regs.ce020memcycles += 2 * cpucycleunit; endlabel7796: ; return; } /* CHK.W (An),Dn */ void REGPARAM2 CPUFUNC(op_4190_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); m68k_incpc (2); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel7797; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel7797; } }}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel7797: ; return; } /* CHK.W (An)+,Dn */ void REGPARAM2 CPUFUNC(op_4198_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s16 dst = m68k_dreg (regs, dstreg); m68k_incpc (2); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel7798; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel7798; } }}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel7798: ; return; } /* CHK.W -(An),Dn */ void REGPARAM2 CPUFUNC(op_41a0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s16 dst = m68k_dreg (regs, dstreg); m68k_incpc (2); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel7799; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel7799; } }}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel7799: ; return; } /* CHK.W (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_41a8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); m68k_incpc (4); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel7800; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel7800; } }}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel7800: ; return; } /* CHK.W (d8,An,Xn),Dn */ void REGPARAM2 CPUFUNC(op_41b0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel7801; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel7801; } }}}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel7801: ; return; } /* CHK.W (xxx).W,Dn */ void REGPARAM2 CPUFUNC(op_41b8_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); m68k_incpc (4); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel7802; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel7802; } }}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel7802: ; return; } /* CHK.W (xxx).L,Dn */ void REGPARAM2 CPUFUNC(op_41b9_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); m68k_incpc (6); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel7803; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel7803; } }}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel7803: ; return; } /* CHK.W (d16,PC),Dn */ void REGPARAM2 CPUFUNC(op_41ba_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); m68k_incpc (4); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel7804; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel7804; } }}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel7804: ; return; } /* CHK.W (d8,PC,Xn),Dn */ void REGPARAM2 CPUFUNC(op_41bb_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel7805; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel7805; } }}}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel7805: ; return; } /* CHK.W #.W,Dn */ void REGPARAM2 CPUFUNC(op_41bc_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uae_s16 dst = m68k_dreg (regs, dstreg); m68k_incpc (4); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel7806; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel7806; } }}} regs.ce020memcycles += 2 * cpucycleunit; endlabel7806: ; return; } /* LEA.L (An),An */ void REGPARAM2 CPUFUNC(op_41d0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { m68k_areg (regs, dstreg) = (srca); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* LEA.L (d16,An),An */ void REGPARAM2 CPUFUNC(op_41e8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { m68k_areg (regs, dstreg) = (srca); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* LEA.L (d8,An,Xn),An */ void REGPARAM2 CPUFUNC(op_41f0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { m68k_areg (regs, dstreg) = (srca); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* LEA.L (xxx).W,An */ void REGPARAM2 CPUFUNC(op_41f8_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { m68k_areg (regs, dstreg) = (srca); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* LEA.L (xxx).L,An */ void REGPARAM2 CPUFUNC(op_41f9_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { m68k_areg (regs, dstreg) = (srca); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* LEA.L (d16,PC),An */ void REGPARAM2 CPUFUNC(op_41fa_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { m68k_areg (regs, dstreg) = (srca); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* LEA.L (d8,PC,Xn),An */ void REGPARAM2 CPUFUNC(op_41fb_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { m68k_areg (regs, dstreg) = (srca); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* CLR.B Dn */ void REGPARAM2 CPUFUNC(op_4200_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ CLEAR_CZNV (); SET_ZFLG (((uae_s8)(0)) == 0); SET_NFLG (((uae_s8)(0)) < 0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((0) & 0xff); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CLR.B (An) */ void REGPARAM2 CPUFUNC(op_4210_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(0)) == 0); SET_NFLG (((uae_s8)(0)) < 0); x_put_byte (srca, 0); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CLR.B (An)+ */ void REGPARAM2 CPUFUNC(op_4218_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(0)) == 0); SET_NFLG (((uae_s8)(0)) < 0); x_put_byte (srca, 0); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CLR.B -(An) */ void REGPARAM2 CPUFUNC(op_4220_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(0)) == 0); SET_NFLG (((uae_s8)(0)) < 0); x_put_byte (srca, 0); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CLR.B (d16,An) */ void REGPARAM2 CPUFUNC(op_4228_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(0)) == 0); SET_NFLG (((uae_s8)(0)) < 0); x_put_byte (srca, 0); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* CLR.B (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_4230_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(0)) == 0); SET_NFLG (((uae_s8)(0)) < 0); x_put_byte (srca, 0); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* CLR.B (xxx).W */ void REGPARAM2 CPUFUNC(op_4238_21)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(0)) == 0); SET_NFLG (((uae_s8)(0)) < 0); x_put_byte (srca, 0); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* CLR.B (xxx).L */ void REGPARAM2 CPUFUNC(op_4239_21)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(0)) == 0); SET_NFLG (((uae_s8)(0)) < 0); x_put_byte (srca, 0); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* CLR.W Dn */ void REGPARAM2 CPUFUNC(op_4240_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ CLEAR_CZNV (); SET_ZFLG (((uae_s16)(0)) == 0); SET_NFLG (((uae_s16)(0)) < 0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | ((0) & 0xffff); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CLR.W (An) */ void REGPARAM2 CPUFUNC(op_4250_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(0)) == 0); SET_NFLG (((uae_s16)(0)) < 0); x_put_word (srca, 0); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CLR.W (An)+ */ void REGPARAM2 CPUFUNC(op_4258_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(0)) == 0); SET_NFLG (((uae_s16)(0)) < 0); x_put_word (srca, 0); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CLR.W -(An) */ void REGPARAM2 CPUFUNC(op_4260_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; m68k_areg (regs, srcreg) = srca; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(0)) == 0); SET_NFLG (((uae_s16)(0)) < 0); x_put_word (srca, 0); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CLR.W (d16,An) */ void REGPARAM2 CPUFUNC(op_4268_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(0)) == 0); SET_NFLG (((uae_s16)(0)) < 0); x_put_word (srca, 0); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* CLR.W (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_4270_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(0)) == 0); SET_NFLG (((uae_s16)(0)) < 0); x_put_word (srca, 0); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* CLR.W (xxx).W */ void REGPARAM2 CPUFUNC(op_4278_21)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(0)) == 0); SET_NFLG (((uae_s16)(0)) < 0); x_put_word (srca, 0); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* CLR.W (xxx).L */ void REGPARAM2 CPUFUNC(op_4279_21)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(0)) == 0); SET_NFLG (((uae_s16)(0)) < 0); x_put_word (srca, 0); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* CLR.L Dn */ void REGPARAM2 CPUFUNC(op_4280_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ CLEAR_CZNV (); SET_ZFLG (((uae_s32)(0)) == 0); SET_NFLG (((uae_s32)(0)) < 0); m68k_dreg (regs, srcreg) = (0); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CLR.L (An) */ void REGPARAM2 CPUFUNC(op_4290_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(0)) == 0); SET_NFLG (((uae_s32)(0)) < 0); x_put_long (srca, 0); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CLR.L (An)+ */ void REGPARAM2 CPUFUNC(op_4298_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(0)) == 0); SET_NFLG (((uae_s32)(0)) < 0); x_put_long (srca, 0); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CLR.L -(An) */ void REGPARAM2 CPUFUNC(op_42a0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; m68k_areg (regs, srcreg) = srca; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(0)) == 0); SET_NFLG (((uae_s32)(0)) < 0); x_put_long (srca, 0); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CLR.L (d16,An) */ void REGPARAM2 CPUFUNC(op_42a8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(0)) == 0); SET_NFLG (((uae_s32)(0)) < 0); x_put_long (srca, 0); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* CLR.L (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_42b0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(0)) == 0); SET_NFLG (((uae_s32)(0)) < 0); x_put_long (srca, 0); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* CLR.L (xxx).W */ void REGPARAM2 CPUFUNC(op_42b8_21)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(0)) == 0); SET_NFLG (((uae_s32)(0)) < 0); x_put_long (srca, 0); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* CLR.L (xxx).L */ void REGPARAM2 CPUFUNC(op_42b9_21)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(0)) == 0); SET_NFLG (((uae_s32)(0)) < 0); x_put_long (srca, 0); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* MVSR2.B Dn */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_42c0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ MakeSR (); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | ((regs.sr & 0xff) & 0xffff); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } #endif #endif #ifdef PART_4 /* MVSR2.B (An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_42d0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); MakeSR (); x_put_word (srca, regs.sr & 0xff); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } #endif /* MVSR2.B (An)+ */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_42d8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += 2; MakeSR (); x_put_word (srca, regs.sr & 0xff); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } #endif /* MVSR2.B -(An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_42e0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; m68k_areg (regs, srcreg) = srca; MakeSR (); x_put_word (srca, regs.sr & 0xff); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } #endif /* MVSR2.B (d16,An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_42e8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); MakeSR (); x_put_word (srca, regs.sr & 0xff); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } #endif /* MVSR2.B (d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_42f0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); MakeSR (); x_put_word (srca, regs.sr & 0xff); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* MVSR2.B (xxx).W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_42f8_21)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); MakeSR (); x_put_word (srca, regs.sr & 0xff); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } #endif /* MVSR2.B (xxx).L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_42f9_21)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); MakeSR (); x_put_word (srca, regs.sr & 0xff); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } #endif /* NEG.B Dn */ void REGPARAM2 CPUFUNC(op_4400_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); {{uae_u32 dst = ((uae_s8)(0)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(dst)) < 0; SET_ZFLG (((uae_s8)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((dst) & 0xff); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NEG.B (An) */ void REGPARAM2 CPUFUNC(op_4410_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); {{uae_u32 dst = ((uae_s8)(0)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(dst)) < 0; SET_ZFLG (((uae_s8)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (srca, dst); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NEG.B (An)+ */ void REGPARAM2 CPUFUNC(op_4418_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{uae_u32 dst = ((uae_s8)(0)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(dst)) < 0; SET_ZFLG (((uae_s8)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (srca, dst); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NEG.B -(An) */ void REGPARAM2 CPUFUNC(op_4420_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; {{uae_u32 dst = ((uae_s8)(0)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(dst)) < 0; SET_ZFLG (((uae_s8)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (srca, dst); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NEG.B (d16,An) */ void REGPARAM2 CPUFUNC(op_4428_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); {{uae_u32 dst = ((uae_s8)(0)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(dst)) < 0; SET_ZFLG (((uae_s8)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (srca, dst); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* NEG.B (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_4430_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s8 src = x_get_byte (srca); {{uae_u32 dst = ((uae_s8)(0)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(dst)) < 0; SET_ZFLG (((uae_s8)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (srca, dst); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* NEG.B (xxx).W */ void REGPARAM2 CPUFUNC(op_4438_21)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); {{uae_u32 dst = ((uae_s8)(0)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(dst)) < 0; SET_ZFLG (((uae_s8)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (srca, dst); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* NEG.B (xxx).L */ void REGPARAM2 CPUFUNC(op_4439_21)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); {{uae_u32 dst = ((uae_s8)(0)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(dst)) < 0; SET_ZFLG (((uae_s8)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (srca, dst); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* NEG.W Dn */ void REGPARAM2 CPUFUNC(op_4440_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); {{uae_u32 dst = ((uae_s16)(0)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(dst)) < 0; SET_ZFLG (((uae_s16)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | ((dst) & 0xffff); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NEG.W (An) */ void REGPARAM2 CPUFUNC(op_4450_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); {{uae_u32 dst = ((uae_s16)(0)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(dst)) < 0; SET_ZFLG (((uae_s16)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (srca, dst); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NEG.W (An)+ */ void REGPARAM2 CPUFUNC(op_4458_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; {{uae_u32 dst = ((uae_s16)(0)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(dst)) < 0; SET_ZFLG (((uae_s16)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (srca, dst); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NEG.W -(An) */ void REGPARAM2 CPUFUNC(op_4460_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; {{uae_u32 dst = ((uae_s16)(0)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(dst)) < 0; SET_ZFLG (((uae_s16)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (srca, dst); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NEG.W (d16,An) */ void REGPARAM2 CPUFUNC(op_4468_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); {{uae_u32 dst = ((uae_s16)(0)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(dst)) < 0; SET_ZFLG (((uae_s16)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (srca, dst); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* NEG.W (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_4470_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s16 src = x_get_word (srca); {{uae_u32 dst = ((uae_s16)(0)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(dst)) < 0; SET_ZFLG (((uae_s16)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (srca, dst); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* NEG.W (xxx).W */ void REGPARAM2 CPUFUNC(op_4478_21)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); {{uae_u32 dst = ((uae_s16)(0)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(dst)) < 0; SET_ZFLG (((uae_s16)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (srca, dst); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* NEG.W (xxx).L */ void REGPARAM2 CPUFUNC(op_4479_21)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); {{uae_u32 dst = ((uae_s16)(0)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(dst)) < 0; SET_ZFLG (((uae_s16)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (srca, dst); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* NEG.L Dn */ void REGPARAM2 CPUFUNC(op_4480_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); {{uae_u32 dst = ((uae_s32)(0)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(dst)) < 0; SET_ZFLG (((uae_s32)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, srcreg) = (dst); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NEG.L (An) */ void REGPARAM2 CPUFUNC(op_4490_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); {{uae_u32 dst = ((uae_s32)(0)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(dst)) < 0; SET_ZFLG (((uae_s32)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (srca, dst); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NEG.L (An)+ */ void REGPARAM2 CPUFUNC(op_4498_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) += 4; {{uae_u32 dst = ((uae_s32)(0)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(dst)) < 0; SET_ZFLG (((uae_s32)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (srca, dst); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NEG.L -(An) */ void REGPARAM2 CPUFUNC(op_44a0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) = srca; {{uae_u32 dst = ((uae_s32)(0)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(dst)) < 0; SET_ZFLG (((uae_s32)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (srca, dst); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NEG.L (d16,An) */ void REGPARAM2 CPUFUNC(op_44a8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); {{uae_u32 dst = ((uae_s32)(0)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(dst)) < 0; SET_ZFLG (((uae_s32)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (srca, dst); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* NEG.L (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_44b0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s32 src = x_get_long (srca); {{uae_u32 dst = ((uae_s32)(0)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(dst)) < 0; SET_ZFLG (((uae_s32)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (srca, dst); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* NEG.L (xxx).W */ void REGPARAM2 CPUFUNC(op_44b8_21)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); {{uae_u32 dst = ((uae_s32)(0)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(dst)) < 0; SET_ZFLG (((uae_s32)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (srca, dst); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* NEG.L (xxx).L */ void REGPARAM2 CPUFUNC(op_44b9_21)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); {{uae_u32 dst = ((uae_s32)(0)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(dst)) < 0; SET_ZFLG (((uae_s32)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (srca, dst); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* MV2SR.B Dn */ void REGPARAM2 CPUFUNC(op_44c0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* MV2SR.B (An) */ void REGPARAM2 CPUFUNC(op_44d0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* MV2SR.B (An)+ */ void REGPARAM2 CPUFUNC(op_44d8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* MV2SR.B -(An) */ void REGPARAM2 CPUFUNC(op_44e0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* MV2SR.B (d16,An) */ void REGPARAM2 CPUFUNC(op_44e8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* MV2SR.B (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_44f0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s16 src = x_get_word (srca); MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MV2SR.B (xxx).W */ void REGPARAM2 CPUFUNC(op_44f8_21)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* MV2SR.B (xxx).L */ void REGPARAM2 CPUFUNC(op_44f9_21)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* MV2SR.B (d16,PC) */ void REGPARAM2 CPUFUNC(op_44fa_21)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* MV2SR.B (d8,PC,Xn) */ void REGPARAM2 CPUFUNC(op_44fb_21)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s16 src = x_get_word (srca); MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MV2SR.B #.B */ void REGPARAM2 CPUFUNC(op_44fc_21)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* NOT.B Dn */ void REGPARAM2 CPUFUNC(op_4600_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(dst)) == 0); SET_NFLG (((uae_s8)(dst)) < 0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((dst) & 0xff); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NOT.B (An) */ void REGPARAM2 CPUFUNC(op_4610_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(dst)) == 0); SET_NFLG (((uae_s8)(dst)) < 0); x_put_byte (srca, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NOT.B (An)+ */ void REGPARAM2 CPUFUNC(op_4618_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(dst)) == 0); SET_NFLG (((uae_s8)(dst)) < 0); x_put_byte (srca, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NOT.B -(An) */ void REGPARAM2 CPUFUNC(op_4620_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(dst)) == 0); SET_NFLG (((uae_s8)(dst)) < 0); x_put_byte (srca, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NOT.B (d16,An) */ void REGPARAM2 CPUFUNC(op_4628_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(dst)) == 0); SET_NFLG (((uae_s8)(dst)) < 0); x_put_byte (srca, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* NOT.B (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_4630_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s8 src = x_get_byte (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(dst)) == 0); SET_NFLG (((uae_s8)(dst)) < 0); x_put_byte (srca, dst); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* NOT.B (xxx).W */ void REGPARAM2 CPUFUNC(op_4638_21)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(dst)) == 0); SET_NFLG (((uae_s8)(dst)) < 0); x_put_byte (srca, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* NOT.B (xxx).L */ void REGPARAM2 CPUFUNC(op_4639_21)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(dst)) == 0); SET_NFLG (((uae_s8)(dst)) < 0); x_put_byte (srca, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* NOT.W Dn */ void REGPARAM2 CPUFUNC(op_4640_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(dst)) == 0); SET_NFLG (((uae_s16)(dst)) < 0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | ((dst) & 0xffff); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NOT.W (An) */ void REGPARAM2 CPUFUNC(op_4650_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(dst)) == 0); SET_NFLG (((uae_s16)(dst)) < 0); x_put_word (srca, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NOT.W (An)+ */ void REGPARAM2 CPUFUNC(op_4658_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(dst)) == 0); SET_NFLG (((uae_s16)(dst)) < 0); x_put_word (srca, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NOT.W -(An) */ void REGPARAM2 CPUFUNC(op_4660_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(dst)) == 0); SET_NFLG (((uae_s16)(dst)) < 0); x_put_word (srca, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NOT.W (d16,An) */ void REGPARAM2 CPUFUNC(op_4668_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(dst)) == 0); SET_NFLG (((uae_s16)(dst)) < 0); x_put_word (srca, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* NOT.W (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_4670_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(dst)) == 0); SET_NFLG (((uae_s16)(dst)) < 0); x_put_word (srca, dst); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* NOT.W (xxx).W */ void REGPARAM2 CPUFUNC(op_4678_21)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(dst)) == 0); SET_NFLG (((uae_s16)(dst)) < 0); x_put_word (srca, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* NOT.W (xxx).L */ void REGPARAM2 CPUFUNC(op_4679_21)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(dst)) == 0); SET_NFLG (((uae_s16)(dst)) < 0); x_put_word (srca, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* NOT.L Dn */ void REGPARAM2 CPUFUNC(op_4680_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); m68k_dreg (regs, srcreg) = (dst); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NOT.L (An) */ void REGPARAM2 CPUFUNC(op_4690_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); x_put_long (srca, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NOT.L (An)+ */ void REGPARAM2 CPUFUNC(op_4698_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) += 4; { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); x_put_long (srca, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NOT.L -(An) */ void REGPARAM2 CPUFUNC(op_46a0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) = srca; { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); x_put_long (srca, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NOT.L (d16,An) */ void REGPARAM2 CPUFUNC(op_46a8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); x_put_long (srca, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* NOT.L (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_46b0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); x_put_long (srca, dst); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* NOT.L (xxx).W */ void REGPARAM2 CPUFUNC(op_46b8_21)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); x_put_long (srca, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* NOT.L (xxx).L */ void REGPARAM2 CPUFUNC(op_46b9_21)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); x_put_long (srca, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* MV2SR.W Dn */ void REGPARAM2 CPUFUNC(op_46c0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel7905; } {{ uae_s16 src = m68k_dreg (regs, srcreg); regs.sr = src; MakeFromSR (); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); endlabel7905: ; return; } /* MV2SR.W (An) */ void REGPARAM2 CPUFUNC(op_46d0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel7906; } {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); regs.sr = src; MakeFromSR (); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); endlabel7906: ; return; } /* MV2SR.W (An)+ */ void REGPARAM2 CPUFUNC(op_46d8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel7907; } {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; regs.sr = src; MakeFromSR (); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); endlabel7907: ; return; } /* MV2SR.W -(An) */ void REGPARAM2 CPUFUNC(op_46e0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel7908; } {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; regs.sr = src; MakeFromSR (); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); endlabel7908: ; return; } /* MV2SR.W (d16,An) */ void REGPARAM2 CPUFUNC(op_46e8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel7909; } {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); regs.sr = src; MakeFromSR (); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); endlabel7909: ; return; } /* MV2SR.W (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_46f0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel7910; } {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s16 src = x_get_word (srca); regs.sr = src; MakeFromSR (); }}}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel7910: ; return; } /* MV2SR.W (xxx).W */ void REGPARAM2 CPUFUNC(op_46f8_21)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel7911; } {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); regs.sr = src; MakeFromSR (); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); endlabel7911: ; return; } /* MV2SR.W (xxx).L */ void REGPARAM2 CPUFUNC(op_46f9_21)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel7912; } {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); regs.sr = src; MakeFromSR (); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); endlabel7912: ; return; } /* MV2SR.W (d16,PC) */ void REGPARAM2 CPUFUNC(op_46fa_21)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel7913; } {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); regs.sr = src; MakeFromSR (); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); endlabel7913: ; return; } /* MV2SR.W (d8,PC,Xn) */ void REGPARAM2 CPUFUNC(op_46fb_21)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel7914; } {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s16 src = x_get_word (srca); regs.sr = src; MakeFromSR (); }}}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel7914: ; return; } /* MV2SR.W #.W */ void REGPARAM2 CPUFUNC(op_46fc_21)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel7915; } {{ uae_s16 src = get_word_ce020_prefetch (2); regs.sr = src; MakeFromSR (); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); endlabel7915: ; return; } /* NBCD.B Dn */ void REGPARAM2 CPUFUNC(op_4800_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = - (src & 0xF0); uae_u16 newv; int cflg; if (newv_lo > 9) { newv_lo -= 6; } newv = newv_hi + newv_lo; cflg = (newv & 0x1F0) > 0x90; if (cflg) newv -= 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((newv) & 0xff); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* LINK.L An,#.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4808_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr olda; olda = m68k_areg (regs, 7) - 4; m68k_areg (regs, 7) = olda; { uae_s32 src = m68k_areg (regs, srcreg); { uae_s32 offs = get_long_ce020_prefetch (2); x_put_long (olda, src); m68k_areg (regs, srcreg) = (m68k_areg (regs, 7)); m68k_areg (regs, 7) += offs; }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } #endif /* NBCD.B (An) */ void REGPARAM2 CPUFUNC(op_4810_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { uae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = - (src & 0xF0); uae_u16 newv; int cflg; if (newv_lo > 9) { newv_lo -= 6; } newv = newv_hi + newv_lo; cflg = (newv & 0x1F0) > 0x90; if (cflg) newv -= 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); x_put_byte (srca, newv); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NBCD.B (An)+ */ void REGPARAM2 CPUFUNC(op_4818_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = - (src & 0xF0); uae_u16 newv; int cflg; if (newv_lo > 9) { newv_lo -= 6; } newv = newv_hi + newv_lo; cflg = (newv & 0x1F0) > 0x90; if (cflg) newv -= 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); x_put_byte (srca, newv); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NBCD.B -(An) */ void REGPARAM2 CPUFUNC(op_4820_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = - (src & 0xF0); uae_u16 newv; int cflg; if (newv_lo > 9) { newv_lo -= 6; } newv = newv_hi + newv_lo; cflg = (newv & 0x1F0) > 0x90; if (cflg) newv -= 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); x_put_byte (srca, newv); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NBCD.B (d16,An) */ void REGPARAM2 CPUFUNC(op_4828_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = - (src & 0xF0); uae_u16 newv; int cflg; if (newv_lo > 9) { newv_lo -= 6; } newv = newv_hi + newv_lo; cflg = (newv & 0x1F0) > 0x90; if (cflg) newv -= 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); x_put_byte (srca, newv); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* NBCD.B (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_4830_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s8 src = x_get_byte (srca); { uae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = - (src & 0xF0); uae_u16 newv; int cflg; if (newv_lo > 9) { newv_lo -= 6; } newv = newv_hi + newv_lo; cflg = (newv & 0x1F0) > 0x90; if (cflg) newv -= 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); x_put_byte (srca, newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* NBCD.B (xxx).W */ void REGPARAM2 CPUFUNC(op_4838_21)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = - (src & 0xF0); uae_u16 newv; int cflg; if (newv_lo > 9) { newv_lo -= 6; } newv = newv_hi + newv_lo; cflg = (newv & 0x1F0) > 0x90; if (cflg) newv -= 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); x_put_byte (srca, newv); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* NBCD.B (xxx).L */ void REGPARAM2 CPUFUNC(op_4839_21)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = - (src & 0xF0); uae_u16 newv; int cflg; if (newv_lo > 9) { newv_lo -= 6; } newv = newv_hi + newv_lo; cflg = (newv & 0x1F0) > 0x90; if (cflg) newv -= 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); x_put_byte (srca, newv); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* SWAP.W Dn */ void REGPARAM2 CPUFUNC(op_4840_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_u32 dst = ((src >> 16)&0xFFFF) | ((src&0xFFFF)<<16); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); m68k_dreg (regs, srcreg) = (dst); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* BKPTQ.L # */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4848_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); { m68k_incpc (2); op_illg (opcode); } regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* PEA.L (An) */ void REGPARAM2 CPUFUNC(op_4850_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, 7) - 4; m68k_areg (regs, 7) = dsta; x_put_long (dsta, srca); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* PEA.L (d16,An) */ void REGPARAM2 CPUFUNC(op_4868_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, 7) - 4; m68k_areg (regs, 7) = dsta; x_put_long (dsta, srca); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* PEA.L (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_4870_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uaecptr dsta; dsta = m68k_areg (regs, 7) - 4; m68k_areg (regs, 7) = dsta; x_put_long (dsta, srca); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* PEA.L (xxx).W */ void REGPARAM2 CPUFUNC(op_4878_21)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, 7) - 4; m68k_areg (regs, 7) = dsta; x_put_long (dsta, srca); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* PEA.L (xxx).L */ void REGPARAM2 CPUFUNC(op_4879_21)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, 7) - 4; m68k_areg (regs, 7) = dsta; x_put_long (dsta, srca); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* PEA.L (d16,PC) */ void REGPARAM2 CPUFUNC(op_487a_21)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, 7) - 4; m68k_areg (regs, 7) = dsta; x_put_long (dsta, srca); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* PEA.L (d8,PC,Xn) */ void REGPARAM2 CPUFUNC(op_487b_21)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uaecptr dsta; dsta = m68k_areg (regs, 7) - 4; m68k_areg (regs, 7) = dsta; x_put_long (dsta, srca); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* EXT.W Dn */ void REGPARAM2 CPUFUNC(op_4880_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_u16 dst = (uae_s16)(uae_s8)src; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(dst)) == 0); SET_NFLG (((uae_s16)(dst)) < 0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | ((dst) & 0xffff); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* MVMLE.W #.W,(An) */ void REGPARAM2 CPUFUNC(op_4890_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_ce020_prefetch (2); { uaecptr srca = m68k_areg (regs, dstreg); { uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; while (dmask) { x_put_word (srca, m68k_dreg (regs, movem_index1[dmask])); srca += 2; dmask = movem_next[dmask]; } while (amask) { x_put_word (srca, m68k_areg (regs, movem_index1[amask])); srca += 2; amask = movem_next[amask]; } }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* MVMLE.W #.W,-(An) */ void REGPARAM2 CPUFUNC(op_48a0_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_ce020_prefetch (2); { uaecptr srca; srca = m68k_areg (regs, dstreg) - 0; { uae_u16 amask = mask & 0xff, dmask = (mask >> 8) & 0xff; int type = get_cpu_model () >= 68020; while (amask) { srca -= 2; if (type) m68k_areg (regs, dstreg) = srca; x_put_word (srca, m68k_areg (regs, movem_index2[amask])); amask = movem_next[amask]; } while (dmask) { srca -= 2; x_put_word (srca, m68k_dreg (regs, movem_index2[dmask])); dmask = movem_next[dmask]; } m68k_areg (regs, dstreg) = srca; }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* MVMLE.W #.W,(d16,An) */ void REGPARAM2 CPUFUNC(op_48a8_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_ce020_prefetch (2); { uaecptr srca = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; while (dmask) { x_put_word (srca, m68k_dreg (regs, movem_index1[dmask])); srca += 2; dmask = movem_next[dmask]; } while (amask) { x_put_word (srca, m68k_areg (regs, movem_index1[amask])); srca += 2; amask = movem_next[amask]; } }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* MVMLE.W #.W,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_48b0_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_ce020_prefetch (2); { uaecptr srca; m68k_incpc (4); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; while (dmask) { x_put_word (srca, m68k_dreg (regs, movem_index1[dmask])); srca += 2; dmask = movem_next[dmask]; } while (amask) { x_put_word (srca, m68k_areg (regs, movem_index1[amask])); srca += 2; amask = movem_next[amask]; } }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MVMLE.W #.W,(xxx).W */ void REGPARAM2 CPUFUNC(op_48b8_21)(uae_u32 opcode) { { uae_u16 mask = get_word_ce020_prefetch (2); { uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; while (dmask) { x_put_word (srca, m68k_dreg (regs, movem_index1[dmask])); srca += 2; dmask = movem_next[dmask]; } while (amask) { x_put_word (srca, m68k_areg (regs, movem_index1[amask])); srca += 2; amask = movem_next[amask]; } }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* MVMLE.W #.W,(xxx).L */ void REGPARAM2 CPUFUNC(op_48b9_21)(uae_u32 opcode) { { uae_u16 mask = get_word_ce020_prefetch (2); { uaecptr srca = get_long_ce020_prefetch (4); { uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; while (dmask) { x_put_word (srca, m68k_dreg (regs, movem_index1[dmask])); srca += 2; dmask = movem_next[dmask]; } while (amask) { x_put_word (srca, m68k_areg (regs, movem_index1[amask])); srca += 2; amask = movem_next[amask]; } }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } /* EXT.L Dn */ void REGPARAM2 CPUFUNC(op_48c0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_u32 dst = (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); m68k_dreg (regs, srcreg) = (dst); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* MVMLE.L #.W,(An) */ void REGPARAM2 CPUFUNC(op_48d0_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_ce020_prefetch (2); { uaecptr srca = m68k_areg (regs, dstreg); { uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; while (dmask) { x_put_long (srca, m68k_dreg (regs, movem_index1[dmask])); srca += 4; dmask = movem_next[dmask]; } while (amask) { x_put_long (srca, m68k_areg (regs, movem_index1[amask])); srca += 4; amask = movem_next[amask]; } }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* MVMLE.L #.W,-(An) */ void REGPARAM2 CPUFUNC(op_48e0_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_ce020_prefetch (2); { uaecptr srca; srca = m68k_areg (regs, dstreg) - 0; { uae_u16 amask = mask & 0xff, dmask = (mask >> 8) & 0xff; int type = get_cpu_model () >= 68020; while (amask) { srca -= 4; if (type) m68k_areg (regs, dstreg) = srca; x_put_long (srca, m68k_areg (regs, movem_index2[amask])); amask = movem_next[amask]; } while (dmask) { srca -= 4; x_put_long (srca, m68k_dreg (regs, movem_index2[dmask])); dmask = movem_next[dmask]; } m68k_areg (regs, dstreg) = srca; }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* MVMLE.L #.W,(d16,An) */ void REGPARAM2 CPUFUNC(op_48e8_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_ce020_prefetch (2); { uaecptr srca = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; while (dmask) { x_put_long (srca, m68k_dreg (regs, movem_index1[dmask])); srca += 4; dmask = movem_next[dmask]; } while (amask) { x_put_long (srca, m68k_areg (regs, movem_index1[amask])); srca += 4; amask = movem_next[amask]; } }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* MVMLE.L #.W,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_48f0_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_ce020_prefetch (2); { uaecptr srca; m68k_incpc (4); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; while (dmask) { x_put_long (srca, m68k_dreg (regs, movem_index1[dmask])); srca += 4; dmask = movem_next[dmask]; } while (amask) { x_put_long (srca, m68k_areg (regs, movem_index1[amask])); srca += 4; amask = movem_next[amask]; } }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MVMLE.L #.W,(xxx).W */ void REGPARAM2 CPUFUNC(op_48f8_21)(uae_u32 opcode) { { uae_u16 mask = get_word_ce020_prefetch (2); { uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; while (dmask) { x_put_long (srca, m68k_dreg (regs, movem_index1[dmask])); srca += 4; dmask = movem_next[dmask]; } while (amask) { x_put_long (srca, m68k_areg (regs, movem_index1[amask])); srca += 4; amask = movem_next[amask]; } }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* MVMLE.L #.W,(xxx).L */ void REGPARAM2 CPUFUNC(op_48f9_21)(uae_u32 opcode) { { uae_u16 mask = get_word_ce020_prefetch (2); { uaecptr srca = get_long_ce020_prefetch (4); { uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; while (dmask) { x_put_long (srca, m68k_dreg (regs, movem_index1[dmask])); srca += 4; dmask = movem_next[dmask]; } while (amask) { x_put_long (srca, m68k_areg (regs, movem_index1[amask])); srca += 4; amask = movem_next[amask]; } }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } /* EXT.B Dn */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_49c0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_u32 dst = (uae_s32)(uae_s8)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); m68k_dreg (regs, srcreg) = (dst); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } #endif /* TST.B Dn */ void REGPARAM2 CPUFUNC(op_4a00_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* TST.B (An) */ void REGPARAM2 CPUFUNC(op_4a10_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* TST.B (An)+ */ void REGPARAM2 CPUFUNC(op_4a18_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* TST.B -(An) */ void REGPARAM2 CPUFUNC(op_4a20_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* TST.B (d16,An) */ void REGPARAM2 CPUFUNC(op_4a28_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* TST.B (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_4a30_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s8 src = x_get_byte (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* TST.B (xxx).W */ void REGPARAM2 CPUFUNC(op_4a38_21)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* TST.B (xxx).L */ void REGPARAM2 CPUFUNC(op_4a39_21)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* TST.B (d16,PC) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4a3a_21)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } #endif /* TST.B (d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4a3b_21)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s8 src = x_get_byte (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* TST.B #.B */ void REGPARAM2 CPUFUNC(op_4a3c_21)(uae_u32 opcode) { {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* TST.W Dn */ void REGPARAM2 CPUFUNC(op_4a40_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* TST.W An */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4a48_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_areg (regs, srcreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } #endif /* TST.W (An) */ void REGPARAM2 CPUFUNC(op_4a50_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* TST.W (An)+ */ void REGPARAM2 CPUFUNC(op_4a58_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* TST.W -(An) */ void REGPARAM2 CPUFUNC(op_4a60_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* TST.W (d16,An) */ void REGPARAM2 CPUFUNC(op_4a68_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* TST.W (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_4a70_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s16 src = x_get_word (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* TST.W (xxx).W */ void REGPARAM2 CPUFUNC(op_4a78_21)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* TST.W (xxx).L */ void REGPARAM2 CPUFUNC(op_4a79_21)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* TST.W (d16,PC) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4a7a_21)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } #endif /* TST.W (d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4a7b_21)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s16 src = x_get_word (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* TST.W #.W */ void REGPARAM2 CPUFUNC(op_4a7c_21)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* TST.L Dn */ void REGPARAM2 CPUFUNC(op_4a80_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* TST.L An */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4a88_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_areg (regs, srcreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } #endif /* TST.L (An) */ void REGPARAM2 CPUFUNC(op_4a90_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* TST.L (An)+ */ void REGPARAM2 CPUFUNC(op_4a98_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* TST.L -(An) */ void REGPARAM2 CPUFUNC(op_4aa0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) = srca; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* TST.L (d16,An) */ void REGPARAM2 CPUFUNC(op_4aa8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* TST.L (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_4ab0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s32 src = x_get_long (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* TST.L (xxx).W */ void REGPARAM2 CPUFUNC(op_4ab8_21)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* TST.L (xxx).L */ void REGPARAM2 CPUFUNC(op_4ab9_21)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* TST.L (d16,PC) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4aba_21)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } #endif /* TST.L (d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4abb_21)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s32 src = x_get_long (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* TST.L #.L */ void REGPARAM2 CPUFUNC(op_4abc_21)(uae_u32 opcode) { {{ uae_s32 src = get_long_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* TAS.B Dn */ void REGPARAM2 CPUFUNC(op_4ac0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); src |= 0x80; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((src) & 0xff); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* TAS.B (An) */ void REGPARAM2 CPUFUNC(op_4ad0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); src |= 0x80; x_put_byte (srca, src); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* TAS.B (An)+ */ void REGPARAM2 CPUFUNC(op_4ad8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); src |= 0x80; x_put_byte (srca, src); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* TAS.B -(An) */ void REGPARAM2 CPUFUNC(op_4ae0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); src |= 0x80; x_put_byte (srca, src); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* TAS.B (d16,An) */ void REGPARAM2 CPUFUNC(op_4ae8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); src |= 0x80; x_put_byte (srca, src); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* TAS.B (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_4af0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s8 src = x_get_byte (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); src |= 0x80; x_put_byte (srca, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* TAS.B (xxx).W */ void REGPARAM2 CPUFUNC(op_4af8_21)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); src |= 0x80; x_put_byte (srca, src); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* TAS.B (xxx).L */ void REGPARAM2 CPUFUNC(op_4af9_21)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); src |= 0x80; x_put_byte (srca, src); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* MULL.L #.W,Dn */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4c00_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ce020memcycles += 40 * cpucycleunit; m68k_incpc (4); m68k_mull(opcode, dst, extra); }}}return; } #endif /* MULL.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4c10_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); regs.ce020memcycles += 40 * cpucycleunit; m68k_incpc (4); m68k_mull(opcode, dst, extra); }}}}return; } #endif /* MULL.L #.W,(An)+ */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4c18_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) += 4; regs.ce020memcycles += 40 * cpucycleunit; m68k_incpc (4); m68k_mull(opcode, dst, extra); }}}}return; } #endif /* MULL.L #.W,-(An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4c20_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) = dsta; regs.ce020memcycles += 40 * cpucycleunit; m68k_incpc (4); m68k_mull(opcode, dst, extra); }}}}return; } #endif /* MULL.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4c28_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s32 dst = x_get_long (dsta); regs.ce020memcycles += 40 * cpucycleunit; m68k_incpc (6); m68k_mull(opcode, dst, extra); }}}}return; } #endif /* MULL.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4c30_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s32 dst = x_get_long (dsta); regs.ce020memcycles += 40 * cpucycleunit; m68k_mull(opcode, dst, extra); }}}}}return; } #endif /* MULL.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4c38_21)(uae_u32 opcode) { {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s32 dst = x_get_long (dsta); regs.ce020memcycles += 40 * cpucycleunit; m68k_incpc (6); m68k_mull(opcode, dst, extra); }}}}return; } #endif /* MULL.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4c39_21)(uae_u32 opcode) { {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (4); { uae_s32 dst = x_get_long (dsta); regs.ce020memcycles += 40 * cpucycleunit; m68k_incpc (8); m68k_mull(opcode, dst, extra); }}}}return; } #endif /* MULL.L #.W,(d16,PC) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4c3a_21)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s32 dst = x_get_long (dsta); regs.ce020memcycles += 40 * cpucycleunit; m68k_incpc (6); m68k_mull(opcode, dst, extra); }}}}return; } #endif /* MULL.L #.W,(d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4c3b_21)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr tmppc; uaecptr dsta; m68k_incpc (4); { tmppc = m68k_getpc (); dsta = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s32 dst = x_get_long (dsta); regs.ce020memcycles += 40 * cpucycleunit; m68k_mull(opcode, dst, extra); }}}}}return; } #endif /* MULL.L #.W,#.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4c3c_21)(uae_u32 opcode) { {{ uae_s16 extra = get_word_ce020_prefetch (2); { uae_s32 dst = get_long_ce020_prefetch (4); regs.ce020memcycles += 40 * cpucycleunit; m68k_incpc (8); m68k_mull(opcode, dst, extra); }}}return; } #endif /* DIVL.L #.W,Dn */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4c40_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ce020memcycles += 70 * cpucycleunit; m68k_incpc (4); m68k_divl(opcode, dst, extra); }}}return; } #endif /* DIVL.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4c50_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); regs.ce020memcycles += 70 * cpucycleunit; m68k_incpc (4); m68k_divl(opcode, dst, extra); }}}}return; } #endif /* DIVL.L #.W,(An)+ */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4c58_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) += 4; regs.ce020memcycles += 70 * cpucycleunit; m68k_incpc (4); m68k_divl(opcode, dst, extra); }}}}return; } #endif /* DIVL.L #.W,-(An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4c60_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) = dsta; regs.ce020memcycles += 70 * cpucycleunit; m68k_incpc (4); m68k_divl(opcode, dst, extra); }}}}return; } #endif /* DIVL.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4c68_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s32 dst = x_get_long (dsta); regs.ce020memcycles += 70 * cpucycleunit; m68k_incpc (6); m68k_divl(opcode, dst, extra); }}}}return; } #endif /* DIVL.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4c70_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s32 dst = x_get_long (dsta); regs.ce020memcycles += 70 * cpucycleunit; m68k_divl(opcode, dst, extra); }}}}}return; } #endif /* DIVL.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4c78_21)(uae_u32 opcode) { {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s32 dst = x_get_long (dsta); regs.ce020memcycles += 70 * cpucycleunit; m68k_incpc (6); m68k_divl(opcode, dst, extra); }}}}return; } #endif /* DIVL.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4c79_21)(uae_u32 opcode) { {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (4); { uae_s32 dst = x_get_long (dsta); regs.ce020memcycles += 70 * cpucycleunit; m68k_incpc (8); m68k_divl(opcode, dst, extra); }}}}return; } #endif /* DIVL.L #.W,(d16,PC) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4c7a_21)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s32 dst = x_get_long (dsta); regs.ce020memcycles += 70 * cpucycleunit; m68k_incpc (6); m68k_divl(opcode, dst, extra); }}}}return; } #endif /* DIVL.L #.W,(d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4c7b_21)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr tmppc; uaecptr dsta; m68k_incpc (4); { tmppc = m68k_getpc (); dsta = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s32 dst = x_get_long (dsta); regs.ce020memcycles += 70 * cpucycleunit; m68k_divl(opcode, dst, extra); }}}}}return; } #endif /* DIVL.L #.W,#.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4c7c_21)(uae_u32 opcode) { {{ uae_s16 extra = get_word_ce020_prefetch (2); { uae_s32 dst = get_long_ce020_prefetch (4); regs.ce020memcycles += 70 * cpucycleunit; m68k_incpc (8); m68k_divl(opcode, dst, extra); }}}return; } #endif /* MVMEL.W #.W,(An) */ void REGPARAM2 CPUFUNC(op_4c90_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_ce020_prefetch (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca = m68k_areg (regs, dstreg); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = (uae_s32)(uae_s16)x_get_word (srca); srca += 2; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = (uae_s32)(uae_s16)x_get_word (srca); srca += 2; amask = movem_next[amask]; } }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* MVMEL.W #.W,(An)+ */ void REGPARAM2 CPUFUNC(op_4c98_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_ce020_prefetch (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca = m68k_areg (regs, dstreg); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = (uae_s32)(uae_s16)x_get_word (srca); srca += 2; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = (uae_s32)(uae_s16)x_get_word (srca); srca += 2; amask = movem_next[amask]; } m68k_areg (regs, dstreg) = srca; }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* MVMEL.W #.W,(d16,An) */ void REGPARAM2 CPUFUNC(op_4ca8_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_ce020_prefetch (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = (uae_s32)(uae_s16)x_get_word (srca); srca += 2; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = (uae_s32)(uae_s16)x_get_word (srca); srca += 2; amask = movem_next[amask]; } }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* MVMEL.W #.W,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_4cb0_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_ce020_prefetch (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca; m68k_incpc (4); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = (uae_s32)(uae_s16)x_get_word (srca); srca += 2; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = (uae_s32)(uae_s16)x_get_word (srca); srca += 2; amask = movem_next[amask]; } }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MVMEL.W #.W,(xxx).W */ void REGPARAM2 CPUFUNC(op_4cb8_21)(uae_u32 opcode) { { uae_u16 mask = get_word_ce020_prefetch (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = (uae_s32)(uae_s16)x_get_word (srca); srca += 2; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = (uae_s32)(uae_s16)x_get_word (srca); srca += 2; amask = movem_next[amask]; } }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* MVMEL.W #.W,(xxx).L */ void REGPARAM2 CPUFUNC(op_4cb9_21)(uae_u32 opcode) { { uae_u16 mask = get_word_ce020_prefetch (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca = get_long_ce020_prefetch (4); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = (uae_s32)(uae_s16)x_get_word (srca); srca += 2; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = (uae_s32)(uae_s16)x_get_word (srca); srca += 2; amask = movem_next[amask]; } }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } /* MVMEL.W #.W,(d16,PC) */ void REGPARAM2 CPUFUNC(op_4cba_21)(uae_u32 opcode) { uae_u32 dstreg = 2; { uae_u16 mask = get_word_ce020_prefetch (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca = m68k_getpc () + 4; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = (uae_s32)(uae_s16)x_get_word (srca); srca += 2; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = (uae_s32)(uae_s16)x_get_word (srca); srca += 2; amask = movem_next[amask]; } }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* MVMEL.W #.W,(d8,PC,Xn) */ void REGPARAM2 CPUFUNC(op_4cbb_21)(uae_u32 opcode) { uae_u32 dstreg = 3; { uae_u16 mask = get_word_ce020_prefetch (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr tmppc; uaecptr srca; m68k_incpc (4); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = (uae_s32)(uae_s16)x_get_word (srca); srca += 2; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = (uae_s32)(uae_s16)x_get_word (srca); srca += 2; amask = movem_next[amask]; } }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MVMEL.L #.W,(An) */ void REGPARAM2 CPUFUNC(op_4cd0_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_ce020_prefetch (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca = m68k_areg (regs, dstreg); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = x_get_long (srca); srca += 4; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = x_get_long (srca); srca += 4; amask = movem_next[amask]; } }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* MVMEL.L #.W,(An)+ */ void REGPARAM2 CPUFUNC(op_4cd8_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_ce020_prefetch (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca = m68k_areg (regs, dstreg); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = x_get_long (srca); srca += 4; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = x_get_long (srca); srca += 4; amask = movem_next[amask]; } m68k_areg (regs, dstreg) = srca; }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* MVMEL.L #.W,(d16,An) */ void REGPARAM2 CPUFUNC(op_4ce8_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_ce020_prefetch (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = x_get_long (srca); srca += 4; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = x_get_long (srca); srca += 4; amask = movem_next[amask]; } }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* MVMEL.L #.W,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_4cf0_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_ce020_prefetch (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca; m68k_incpc (4); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = x_get_long (srca); srca += 4; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = x_get_long (srca); srca += 4; amask = movem_next[amask]; } }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MVMEL.L #.W,(xxx).W */ void REGPARAM2 CPUFUNC(op_4cf8_21)(uae_u32 opcode) { { uae_u16 mask = get_word_ce020_prefetch (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = x_get_long (srca); srca += 4; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = x_get_long (srca); srca += 4; amask = movem_next[amask]; } }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* MVMEL.L #.W,(xxx).L */ void REGPARAM2 CPUFUNC(op_4cf9_21)(uae_u32 opcode) { { uae_u16 mask = get_word_ce020_prefetch (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca = get_long_ce020_prefetch (4); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = x_get_long (srca); srca += 4; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = x_get_long (srca); srca += 4; amask = movem_next[amask]; } }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } /* MVMEL.L #.W,(d16,PC) */ void REGPARAM2 CPUFUNC(op_4cfa_21)(uae_u32 opcode) { uae_u32 dstreg = 2; { uae_u16 mask = get_word_ce020_prefetch (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca = m68k_getpc () + 4; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = x_get_long (srca); srca += 4; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = x_get_long (srca); srca += 4; amask = movem_next[amask]; } }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* MVMEL.L #.W,(d8,PC,Xn) */ void REGPARAM2 CPUFUNC(op_4cfb_21)(uae_u32 opcode) { uae_u32 dstreg = 3; { uae_u16 mask = get_word_ce020_prefetch (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr tmppc; uaecptr srca; m68k_incpc (4); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = x_get_long (srca); srca += 4; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = x_get_long (srca); srca += 4; amask = movem_next[amask]; } }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* TRAPQ.L # */ void REGPARAM2 CPUFUNC(op_4e40_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 15); {{ uae_u32 src = srcreg; m68k_incpc (2); Exception (src + 32); }} regs.ce020memcycles += 2 * cpucycleunit; return; } /* LINK.W An,#.W */ void REGPARAM2 CPUFUNC(op_4e50_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr olda; olda = m68k_areg (regs, 7) - 4; m68k_areg (regs, 7) = olda; { uae_s32 src = m68k_areg (regs, srcreg); { uae_s16 offs = get_word_ce020_prefetch (2); x_put_long (olda, src); m68k_areg (regs, srcreg) = (m68k_areg (regs, 7)); m68k_areg (regs, 7) += offs; }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* UNLK.L An */ void REGPARAM2 CPUFUNC(op_4e58_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_areg (regs, srcreg); m68k_areg (regs, 7) = src; { uaecptr olda = m68k_areg (regs, 7); { uae_s32 old = x_get_long (olda); m68k_areg (regs, 7) += 4; m68k_areg (regs, srcreg) = (old); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* MVR2USP.L An */ void REGPARAM2 CPUFUNC(op_4e60_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel8033; } {{ uae_s32 src = m68k_areg (regs, srcreg); regs.usp = src; }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); endlabel8033: ; return; } /* MVUSP2R.L An */ void REGPARAM2 CPUFUNC(op_4e68_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel8034; } {{ m68k_areg (regs, srcreg) = (regs.usp); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); endlabel8034: ; return; } /* RESET.L */ void REGPARAM2 CPUFUNC(op_4e70_21)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel8035; } { cpureset (); m68k_incpc (2); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel8035: ; return; } /* NOP.L */ void REGPARAM2 CPUFUNC(op_4e71_21)(uae_u32 opcode) { { do_cycles_ce020 (6); } regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* STOP.L #.W */ void REGPARAM2 CPUFUNC(op_4e72_21)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel8037; } {{ uae_s16 src = get_word_ce020_prefetch (2); regs.sr = src; MakeFromSR (); m68k_setstopped (); m68k_incpc (4); }}} regs.ce020memcycles += 2 * cpucycleunit; endlabel8037: ; return; } /* RTE.L */ void REGPARAM2 CPUFUNC(op_4e73_21)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel8038; } { uae_u16 newsr; uae_u32 newpc; for (;;) { uaecptr a = m68k_areg (regs, 7); uae_s16 sr = x_get_word (a); uae_s32 pc = x_get_long (a + 2); uae_s16 format = x_get_word (a + 2 + 4); int frame = format >> 12; int offset = 8; newsr = sr; newpc = pc; if (frame == 0x0) { m68k_areg (regs, 7) += offset; break; } else if (frame == 0x1) { m68k_areg (regs, 7) += offset; } else if (frame == 0x2) { m68k_areg (regs, 7) += offset + 4; break; } else if (frame == 0x4) { m68k_areg (regs, 7) += offset + 8; break; } else if (frame == 0x8) { m68k_areg (regs, 7) += offset + 50; break; } else if (frame == 0x9) { m68k_areg (regs, 7) += offset + 12; break; } else if (frame == 0xa) { m68k_areg (regs, 7) += offset + 24; break; } else if (frame == 0xb) { m68k_areg (regs, 7) += offset + 84; break; } else { m68k_areg (regs, 7) += offset; Exception (14); goto endlabel8038; } regs.sr = newsr; MakeFromSR (); } regs.sr = newsr; MakeFromSR (); if (newpc & 1) { exception3i (0x4E73, newpc); goto endlabel8038; } m68k_setpc (newpc); ipl_fetch (); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel8038: ; return; } /* RTD.L #.W */ void REGPARAM2 CPUFUNC(op_4e74_21)(uae_u32 opcode) { {{ uaecptr pca = m68k_areg (regs, 7); { uae_s32 pc = x_get_long (pca); m68k_areg (regs, 7) += 4; { uae_s16 offs = get_word_ce020_prefetch (2); m68k_areg (regs, 7) += offs; if (pc & 1) { exception3i (0x4E74, pc); goto endlabel8039; } if (pc & 1) { exception3i (0x4E74, pc); goto endlabel8039; } m68k_setpc (pc); }}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel8039: ; return; } /* RTS.L */ void REGPARAM2 CPUFUNC(op_4e75_21)(uae_u32 opcode) { { uaecptr pc = m68k_getpc (); m68k_do_rts_ce020 (); if (m68k_getpc () & 1) { uaecptr faultpc = m68k_getpc (); m68k_setpc (pc); exception3i (0x4E75, faultpc); } } regs.ce020memcycles += 2 * cpucycleunit; return; } /* TRAPV.L */ void REGPARAM2 CPUFUNC(op_4e76_21)(uae_u32 opcode) { { m68k_incpc (2); if (GET_VFLG ()) { Exception (7); goto endlabel8041; } } regs.ce020memcycles += 2 * cpucycleunit; endlabel8041: ; return; } /* RTR.L */ void REGPARAM2 CPUFUNC(op_4e77_21)(uae_u32 opcode) { { uaecptr oldpc = m68k_getpc (); MakeSR (); { uaecptr sra = m68k_areg (regs, 7); { uae_s16 sr = x_get_word (sra); m68k_areg (regs, 7) += 2; { uaecptr pca = m68k_areg (regs, 7); { uae_s32 pc = x_get_long (pca); m68k_areg (regs, 7) += 4; regs.sr &= 0xFF00; sr &= 0xFF; regs.sr |= sr; m68k_setpc (pc); MakeFromSR (); if (m68k_getpc () & 1) { uaecptr faultpc = m68k_getpc (); m68k_setpc (oldpc); exception3i (0x4E77, faultpc); } }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVEC2.L #.W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4e7a_21)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel8043; } {{ uae_s16 src = get_word_ce020_prefetch (2); { int regno = (src >> 12) & 15; uae_u32 *regp = regs.regs + regno; if (! m68k_movec2(src & 0xFFF, regp)) goto endlabel8043; }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); endlabel8043: ; return; } #endif /* MOVE2C.L #.W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4e7b_21)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel8044; } {{ uae_s16 src = get_word_ce020_prefetch (2); { int regno = (src >> 12) & 15; uae_u32 *regp = regs.regs + regno; if (! m68k_move2c(src & 0xFFF, regp)) goto endlabel8044; }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); endlabel8044: ; return; } #endif /* JSR.L (An) */ void REGPARAM2 CPUFUNC(op_4e90_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uaecptr oldpc = m68k_getpc () + 2; if (srca & 1) { exception3i (opcode, srca); goto endlabel8045; } m68k_setpc (srca); m68k_areg (regs, 7) -= 4; x_put_long (m68k_areg (regs, 7), oldpc); }}} regs.ce020memcycles += 2 * cpucycleunit; endlabel8045: ; return; } /* JSR.L (d16,An) */ void REGPARAM2 CPUFUNC(op_4ea8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uaecptr oldpc = m68k_getpc () + 4; if (srca & 1) { exception3i (opcode, srca); goto endlabel8046; } m68k_setpc (srca); m68k_areg (regs, 7) -= 4; x_put_long (m68k_areg (regs, 7), oldpc); }}} regs.ce020memcycles += 2 * cpucycleunit; endlabel8046: ; return; } /* JSR.L (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_4eb0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uaecptr oldpc = m68k_getpc () + 0; if (srca & 1) { exception3i (opcode, srca); goto endlabel8047; } m68k_setpc (srca); m68k_areg (regs, 7) -= 4; x_put_long (m68k_areg (regs, 7), oldpc); }}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel8047: ; return; } /* JSR.L (xxx).W */ void REGPARAM2 CPUFUNC(op_4eb8_21)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uaecptr oldpc = m68k_getpc () + 4; if (srca & 1) { exception3i (opcode, srca); goto endlabel8048; } m68k_setpc (srca); m68k_areg (regs, 7) -= 4; x_put_long (m68k_areg (regs, 7), oldpc); }}} regs.ce020memcycles += 2 * cpucycleunit; endlabel8048: ; return; } /* JSR.L (xxx).L */ void REGPARAM2 CPUFUNC(op_4eb9_21)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); { uaecptr oldpc = m68k_getpc () + 6; if (srca & 1) { exception3i (opcode, srca); goto endlabel8049; } m68k_setpc (srca); m68k_areg (regs, 7) -= 4; x_put_long (m68k_areg (regs, 7), oldpc); }}} regs.ce020memcycles += 2 * cpucycleunit; endlabel8049: ; return; } /* JSR.L (d16,PC) */ void REGPARAM2 CPUFUNC(op_4eba_21)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uaecptr oldpc = m68k_getpc () + 4; if (srca & 1) { exception3i (opcode, srca); goto endlabel8050; } m68k_setpc (srca); m68k_areg (regs, 7) -= 4; x_put_long (m68k_areg (regs, 7), oldpc); }}} regs.ce020memcycles += 2 * cpucycleunit; endlabel8050: ; return; } /* JSR.L (d8,PC,Xn) */ void REGPARAM2 CPUFUNC(op_4ebb_21)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uaecptr oldpc = m68k_getpc () + 0; if (srca & 1) { exception3i (opcode, srca); goto endlabel8051; } m68k_setpc (srca); m68k_areg (regs, 7) -= 4; x_put_long (m68k_areg (regs, 7), oldpc); }}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel8051: ; return; } /* JMP.L (An) */ void REGPARAM2 CPUFUNC(op_4ed0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3i (opcode, srca); goto endlabel8052; } m68k_setpc (srca); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel8052: ; return; } /* JMP.L (d16,An) */ void REGPARAM2 CPUFUNC(op_4ee8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); if (srca & 1) { exception3i (opcode, srca); goto endlabel8053; } m68k_setpc (srca); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel8053: ; return; } /* JMP.L (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_4ef0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); if (srca & 1) { exception3i (opcode, srca); goto endlabel8054; } m68k_setpc (srca); }}} regs.ce020memcycles += 2 * cpucycleunit; endlabel8054: ; return; } /* JMP.L (xxx).W */ void REGPARAM2 CPUFUNC(op_4ef8_21)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); if (srca & 1) { exception3i (opcode, srca); goto endlabel8055; } m68k_setpc (srca); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel8055: ; return; } /* JMP.L (xxx).L */ void REGPARAM2 CPUFUNC(op_4ef9_21)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); if (srca & 1) { exception3i (opcode, srca); goto endlabel8056; } m68k_setpc (srca); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel8056: ; return; } /* JMP.L (d16,PC) */ void REGPARAM2 CPUFUNC(op_4efa_21)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); if (srca & 1) { exception3i (opcode, srca); goto endlabel8057; } m68k_setpc (srca); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel8057: ; return; } /* JMP.L (d8,PC,Xn) */ void REGPARAM2 CPUFUNC(op_4efb_21)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); if (srca & 1) { exception3i (opcode, srca); goto endlabel8058; } m68k_setpc (srca); }}} regs.ce020memcycles += 2 * cpucycleunit; endlabel8058: ; return; } /* ADDQ.B #,Dn */ void REGPARAM2 CPUFUNC(op_5000_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADDQ.B #,(An) */ void REGPARAM2 CPUFUNC(op_5010_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADDQ.B #,(An)+ */ void REGPARAM2 CPUFUNC(op_5018_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADDQ.B #,-(An) */ void REGPARAM2 CPUFUNC(op_5020_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADDQ.B #,(d16,An) */ void REGPARAM2 CPUFUNC(op_5028_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADDQ.B #,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_5030_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* ADDQ.B #,(xxx).W */ void REGPARAM2 CPUFUNC(op_5038_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADDQ.B #,(xxx).L */ void REGPARAM2 CPUFUNC(op_5039_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = get_long_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* ADDQ.W #,Dn */ void REGPARAM2 CPUFUNC(op_5040_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADDAQ.W #,An */ void REGPARAM2 CPUFUNC(op_5048_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADDQ.W #,(An) */ void REGPARAM2 CPUFUNC(op_5050_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADDQ.W #,(An)+ */ void REGPARAM2 CPUFUNC(op_5058_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) += 2; {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADDQ.W #,-(An) */ void REGPARAM2 CPUFUNC(op_5060_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADDQ.W #,(d16,An) */ void REGPARAM2 CPUFUNC(op_5068_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADDQ.W #,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_5070_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } #endif #ifdef PART_5 /* ADDQ.W #,(xxx).W */ void REGPARAM2 CPUFUNC(op_5078_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADDQ.W #,(xxx).L */ void REGPARAM2 CPUFUNC(op_5079_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = get_long_ce020_prefetch (2); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* ADDQ.L #,Dn */ void REGPARAM2 CPUFUNC(op_5080_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADDAQ.L #,An */ void REGPARAM2 CPUFUNC(op_5088_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADDQ.L #,(An) */ void REGPARAM2 CPUFUNC(op_5090_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADDQ.L #,(An)+ */ void REGPARAM2 CPUFUNC(op_5098_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) += 4; {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADDQ.L #,-(An) */ void REGPARAM2 CPUFUNC(op_50a0_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADDQ.L #,(d16,An) */ void REGPARAM2 CPUFUNC(op_50a8_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADDQ.L #,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_50b0_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* ADDQ.L #,(xxx).W */ void REGPARAM2 CPUFUNC(op_50b8_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADDQ.L #,(xxx).L */ void REGPARAM2 CPUFUNC(op_50b9_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = get_long_ce020_prefetch (2); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* Scc.B Dn */ void REGPARAM2 CPUFUNC(op_50c0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (0) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* DBcc.W Dn,#.W */ void REGPARAM2 CPUFUNC(op_50c8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_word_ce020_prefetch (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (0)) { m68k_incpc ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { regs.ce020memcycles += 4 * cpucycleunit; if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel8086; } return; } regs.ce020memcycles += 8 * cpucycleunit; } else { regs.ce020memcycles += 4 * cpucycleunit; } m68k_setpc (oldpc + 4); }}}endlabel8086: ; return; } /* Scc.B (An) */ void REGPARAM2 CPUFUNC(op_50d0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (0) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B (An)+ */ void REGPARAM2 CPUFUNC(op_50d8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (0) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B -(An) */ void REGPARAM2 CPUFUNC(op_50e0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (0) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B (d16,An) */ void REGPARAM2 CPUFUNC(op_50e8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); {{ int val = cctrue (0) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* Scc.B (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_50f0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); {{ int val = cctrue (0) ? 0xff : 0; x_put_byte (srca, val); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* Scc.B (xxx).W */ void REGPARAM2 CPUFUNC(op_50f8_21)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); {{ int val = cctrue (0) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* Scc.B (xxx).L */ void REGPARAM2 CPUFUNC(op_50f9_21)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); {{ int val = cctrue (0) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_50fa_21)(uae_u32 opcode) { {{ uae_s16 dummy = get_word_ce020_prefetch (2); if (cctrue (0)) { Exception (7); goto endlabel8094; } }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); endlabel8094: ; return; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_50fb_21)(uae_u32 opcode) { {{ uae_s32 dummy = get_long_ce020_prefetch (2); if (cctrue (0)) { Exception (7); goto endlabel8095; } }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); endlabel8095: ; return; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_50fc_21)(uae_u32 opcode) { { if (cctrue (0)) { Exception (7); goto endlabel8096; } } regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); endlabel8096: ; return; } #endif /* SUBQ.B #,Dn */ void REGPARAM2 CPUFUNC(op_5100_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUBQ.B #,(An) */ void REGPARAM2 CPUFUNC(op_5110_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUBQ.B #,(An)+ */ void REGPARAM2 CPUFUNC(op_5118_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUBQ.B #,-(An) */ void REGPARAM2 CPUFUNC(op_5120_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUBQ.B #,(d16,An) */ void REGPARAM2 CPUFUNC(op_5128_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUBQ.B #,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_5130_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* SUBQ.B #,(xxx).W */ void REGPARAM2 CPUFUNC(op_5138_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUBQ.B #,(xxx).L */ void REGPARAM2 CPUFUNC(op_5139_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = get_long_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* SUBQ.W #,Dn */ void REGPARAM2 CPUFUNC(op_5140_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUBAQ.W #,An */ void REGPARAM2 CPUFUNC(op_5148_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUBQ.W #,(An) */ void REGPARAM2 CPUFUNC(op_5150_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUBQ.W #,(An)+ */ void REGPARAM2 CPUFUNC(op_5158_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) += 2; {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUBQ.W #,-(An) */ void REGPARAM2 CPUFUNC(op_5160_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUBQ.W #,(d16,An) */ void REGPARAM2 CPUFUNC(op_5168_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUBQ.W #,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_5170_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* SUBQ.W #,(xxx).W */ void REGPARAM2 CPUFUNC(op_5178_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUBQ.W #,(xxx).L */ void REGPARAM2 CPUFUNC(op_5179_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = get_long_ce020_prefetch (2); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* SUBQ.L #,Dn */ void REGPARAM2 CPUFUNC(op_5180_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUBAQ.L #,An */ void REGPARAM2 CPUFUNC(op_5188_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUBQ.L #,(An) */ void REGPARAM2 CPUFUNC(op_5190_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUBQ.L #,(An)+ */ void REGPARAM2 CPUFUNC(op_5198_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) += 4; {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUBQ.L #,-(An) */ void REGPARAM2 CPUFUNC(op_51a0_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUBQ.L #,(d16,An) */ void REGPARAM2 CPUFUNC(op_51a8_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUBQ.L #,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_51b0_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* SUBQ.L #,(xxx).W */ void REGPARAM2 CPUFUNC(op_51b8_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUBQ.L #,(xxx).L */ void REGPARAM2 CPUFUNC(op_51b9_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = get_long_ce020_prefetch (2); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* Scc.B Dn */ void REGPARAM2 CPUFUNC(op_51c0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (1) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* DBcc.W Dn,#.W */ void REGPARAM2 CPUFUNC(op_51c8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_word_ce020_prefetch (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (1)) { m68k_incpc ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { regs.ce020memcycles += 4 * cpucycleunit; if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel8124; } return; } regs.ce020memcycles += 8 * cpucycleunit; } else { regs.ce020memcycles += 4 * cpucycleunit; } m68k_setpc (oldpc + 4); }}}endlabel8124: ; return; } /* Scc.B (An) */ void REGPARAM2 CPUFUNC(op_51d0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (1) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B (An)+ */ void REGPARAM2 CPUFUNC(op_51d8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (1) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B -(An) */ void REGPARAM2 CPUFUNC(op_51e0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (1) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B (d16,An) */ void REGPARAM2 CPUFUNC(op_51e8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); {{ int val = cctrue (1) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* Scc.B (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_51f0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); {{ int val = cctrue (1) ? 0xff : 0; x_put_byte (srca, val); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* Scc.B (xxx).W */ void REGPARAM2 CPUFUNC(op_51f8_21)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); {{ int val = cctrue (1) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* Scc.B (xxx).L */ void REGPARAM2 CPUFUNC(op_51f9_21)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); {{ int val = cctrue (1) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_51fa_21)(uae_u32 opcode) { {{ uae_s16 dummy = get_word_ce020_prefetch (2); if (cctrue (1)) { Exception (7); goto endlabel8132; } }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); endlabel8132: ; return; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_51fb_21)(uae_u32 opcode) { {{ uae_s32 dummy = get_long_ce020_prefetch (2); if (cctrue (1)) { Exception (7); goto endlabel8133; } }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); endlabel8133: ; return; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_51fc_21)(uae_u32 opcode) { { if (cctrue (1)) { Exception (7); goto endlabel8134; } } regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); endlabel8134: ; return; } #endif /* Scc.B Dn */ void REGPARAM2 CPUFUNC(op_52c0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (2) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* DBcc.W Dn,#.W */ void REGPARAM2 CPUFUNC(op_52c8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_word_ce020_prefetch (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (2)) { m68k_incpc ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { regs.ce020memcycles += 4 * cpucycleunit; if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel8136; } return; } regs.ce020memcycles += 8 * cpucycleunit; } else { regs.ce020memcycles += 4 * cpucycleunit; } m68k_setpc (oldpc + 4); }}}endlabel8136: ; return; } /* Scc.B (An) */ void REGPARAM2 CPUFUNC(op_52d0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (2) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B (An)+ */ void REGPARAM2 CPUFUNC(op_52d8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (2) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B -(An) */ void REGPARAM2 CPUFUNC(op_52e0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (2) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B (d16,An) */ void REGPARAM2 CPUFUNC(op_52e8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); {{ int val = cctrue (2) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* Scc.B (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_52f0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); {{ int val = cctrue (2) ? 0xff : 0; x_put_byte (srca, val); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* Scc.B (xxx).W */ void REGPARAM2 CPUFUNC(op_52f8_21)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); {{ int val = cctrue (2) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* Scc.B (xxx).L */ void REGPARAM2 CPUFUNC(op_52f9_21)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); {{ int val = cctrue (2) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_52fa_21)(uae_u32 opcode) { {{ uae_s16 dummy = get_word_ce020_prefetch (2); if (cctrue (2)) { Exception (7); goto endlabel8144; } }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); endlabel8144: ; return; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_52fb_21)(uae_u32 opcode) { {{ uae_s32 dummy = get_long_ce020_prefetch (2); if (cctrue (2)) { Exception (7); goto endlabel8145; } }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); endlabel8145: ; return; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_52fc_21)(uae_u32 opcode) { { if (cctrue (2)) { Exception (7); goto endlabel8146; } } regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); endlabel8146: ; return; } #endif /* Scc.B Dn */ void REGPARAM2 CPUFUNC(op_53c0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (3) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* DBcc.W Dn,#.W */ void REGPARAM2 CPUFUNC(op_53c8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_word_ce020_prefetch (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (3)) { m68k_incpc ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { regs.ce020memcycles += 4 * cpucycleunit; if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel8148; } return; } regs.ce020memcycles += 8 * cpucycleunit; } else { regs.ce020memcycles += 4 * cpucycleunit; } m68k_setpc (oldpc + 4); }}}endlabel8148: ; return; } /* Scc.B (An) */ void REGPARAM2 CPUFUNC(op_53d0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (3) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B (An)+ */ void REGPARAM2 CPUFUNC(op_53d8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (3) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B -(An) */ void REGPARAM2 CPUFUNC(op_53e0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (3) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B (d16,An) */ void REGPARAM2 CPUFUNC(op_53e8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); {{ int val = cctrue (3) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* Scc.B (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_53f0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); {{ int val = cctrue (3) ? 0xff : 0; x_put_byte (srca, val); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* Scc.B (xxx).W */ void REGPARAM2 CPUFUNC(op_53f8_21)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); {{ int val = cctrue (3) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* Scc.B (xxx).L */ void REGPARAM2 CPUFUNC(op_53f9_21)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); {{ int val = cctrue (3) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_53fa_21)(uae_u32 opcode) { {{ uae_s16 dummy = get_word_ce020_prefetch (2); if (cctrue (3)) { Exception (7); goto endlabel8156; } }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); endlabel8156: ; return; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_53fb_21)(uae_u32 opcode) { {{ uae_s32 dummy = get_long_ce020_prefetch (2); if (cctrue (3)) { Exception (7); goto endlabel8157; } }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); endlabel8157: ; return; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_53fc_21)(uae_u32 opcode) { { if (cctrue (3)) { Exception (7); goto endlabel8158; } } regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); endlabel8158: ; return; } #endif /* Scc.B Dn */ void REGPARAM2 CPUFUNC(op_54c0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (4) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* DBcc.W Dn,#.W */ void REGPARAM2 CPUFUNC(op_54c8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_word_ce020_prefetch (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (4)) { m68k_incpc ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { regs.ce020memcycles += 4 * cpucycleunit; if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel8160; } return; } regs.ce020memcycles += 8 * cpucycleunit; } else { regs.ce020memcycles += 4 * cpucycleunit; } m68k_setpc (oldpc + 4); }}}endlabel8160: ; return; } /* Scc.B (An) */ void REGPARAM2 CPUFUNC(op_54d0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (4) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B (An)+ */ void REGPARAM2 CPUFUNC(op_54d8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (4) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B -(An) */ void REGPARAM2 CPUFUNC(op_54e0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (4) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B (d16,An) */ void REGPARAM2 CPUFUNC(op_54e8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); {{ int val = cctrue (4) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* Scc.B (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_54f0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); {{ int val = cctrue (4) ? 0xff : 0; x_put_byte (srca, val); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* Scc.B (xxx).W */ void REGPARAM2 CPUFUNC(op_54f8_21)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); {{ int val = cctrue (4) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* Scc.B (xxx).L */ void REGPARAM2 CPUFUNC(op_54f9_21)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); {{ int val = cctrue (4) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_54fa_21)(uae_u32 opcode) { {{ uae_s16 dummy = get_word_ce020_prefetch (2); if (cctrue (4)) { Exception (7); goto endlabel8168; } }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); endlabel8168: ; return; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_54fb_21)(uae_u32 opcode) { {{ uae_s32 dummy = get_long_ce020_prefetch (2); if (cctrue (4)) { Exception (7); goto endlabel8169; } }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); endlabel8169: ; return; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_54fc_21)(uae_u32 opcode) { { if (cctrue (4)) { Exception (7); goto endlabel8170; } } regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); endlabel8170: ; return; } #endif /* Scc.B Dn */ void REGPARAM2 CPUFUNC(op_55c0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (5) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* DBcc.W Dn,#.W */ void REGPARAM2 CPUFUNC(op_55c8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_word_ce020_prefetch (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (5)) { m68k_incpc ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { regs.ce020memcycles += 4 * cpucycleunit; if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel8172; } return; } regs.ce020memcycles += 8 * cpucycleunit; } else { regs.ce020memcycles += 4 * cpucycleunit; } m68k_setpc (oldpc + 4); }}}endlabel8172: ; return; } /* Scc.B (An) */ void REGPARAM2 CPUFUNC(op_55d0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (5) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B (An)+ */ void REGPARAM2 CPUFUNC(op_55d8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (5) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B -(An) */ void REGPARAM2 CPUFUNC(op_55e0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (5) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B (d16,An) */ void REGPARAM2 CPUFUNC(op_55e8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); {{ int val = cctrue (5) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* Scc.B (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_55f0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); {{ int val = cctrue (5) ? 0xff : 0; x_put_byte (srca, val); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* Scc.B (xxx).W */ void REGPARAM2 CPUFUNC(op_55f8_21)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); {{ int val = cctrue (5) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* Scc.B (xxx).L */ void REGPARAM2 CPUFUNC(op_55f9_21)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); {{ int val = cctrue (5) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_55fa_21)(uae_u32 opcode) { {{ uae_s16 dummy = get_word_ce020_prefetch (2); if (cctrue (5)) { Exception (7); goto endlabel8180; } }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); endlabel8180: ; return; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_55fb_21)(uae_u32 opcode) { {{ uae_s32 dummy = get_long_ce020_prefetch (2); if (cctrue (5)) { Exception (7); goto endlabel8181; } }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); endlabel8181: ; return; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_55fc_21)(uae_u32 opcode) { { if (cctrue (5)) { Exception (7); goto endlabel8182; } } regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); endlabel8182: ; return; } #endif /* Scc.B Dn */ void REGPARAM2 CPUFUNC(op_56c0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (6) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* DBcc.W Dn,#.W */ void REGPARAM2 CPUFUNC(op_56c8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_word_ce020_prefetch (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (6)) { m68k_incpc ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { regs.ce020memcycles += 4 * cpucycleunit; if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel8184; } return; } regs.ce020memcycles += 8 * cpucycleunit; } else { regs.ce020memcycles += 4 * cpucycleunit; } m68k_setpc (oldpc + 4); }}}endlabel8184: ; return; } /* Scc.B (An) */ void REGPARAM2 CPUFUNC(op_56d0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (6) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B (An)+ */ void REGPARAM2 CPUFUNC(op_56d8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (6) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B -(An) */ void REGPARAM2 CPUFUNC(op_56e0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (6) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B (d16,An) */ void REGPARAM2 CPUFUNC(op_56e8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); {{ int val = cctrue (6) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* Scc.B (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_56f0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); {{ int val = cctrue (6) ? 0xff : 0; x_put_byte (srca, val); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* Scc.B (xxx).W */ void REGPARAM2 CPUFUNC(op_56f8_21)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); {{ int val = cctrue (6) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* Scc.B (xxx).L */ void REGPARAM2 CPUFUNC(op_56f9_21)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); {{ int val = cctrue (6) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_56fa_21)(uae_u32 opcode) { {{ uae_s16 dummy = get_word_ce020_prefetch (2); if (cctrue (6)) { Exception (7); goto endlabel8192; } }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); endlabel8192: ; return; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_56fb_21)(uae_u32 opcode) { {{ uae_s32 dummy = get_long_ce020_prefetch (2); if (cctrue (6)) { Exception (7); goto endlabel8193; } }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); endlabel8193: ; return; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_56fc_21)(uae_u32 opcode) { { if (cctrue (6)) { Exception (7); goto endlabel8194; } } regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); endlabel8194: ; return; } #endif /* Scc.B Dn */ void REGPARAM2 CPUFUNC(op_57c0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (7) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* DBcc.W Dn,#.W */ void REGPARAM2 CPUFUNC(op_57c8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_word_ce020_prefetch (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (7)) { m68k_incpc ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { regs.ce020memcycles += 4 * cpucycleunit; if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel8196; } return; } regs.ce020memcycles += 8 * cpucycleunit; } else { regs.ce020memcycles += 4 * cpucycleunit; } m68k_setpc (oldpc + 4); }}}endlabel8196: ; return; } /* Scc.B (An) */ void REGPARAM2 CPUFUNC(op_57d0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (7) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B (An)+ */ void REGPARAM2 CPUFUNC(op_57d8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (7) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B -(An) */ void REGPARAM2 CPUFUNC(op_57e0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (7) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B (d16,An) */ void REGPARAM2 CPUFUNC(op_57e8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); {{ int val = cctrue (7) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* Scc.B (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_57f0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); {{ int val = cctrue (7) ? 0xff : 0; x_put_byte (srca, val); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* Scc.B (xxx).W */ void REGPARAM2 CPUFUNC(op_57f8_21)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); {{ int val = cctrue (7) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* Scc.B (xxx).L */ void REGPARAM2 CPUFUNC(op_57f9_21)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); {{ int val = cctrue (7) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_57fa_21)(uae_u32 opcode) { {{ uae_s16 dummy = get_word_ce020_prefetch (2); if (cctrue (7)) { Exception (7); goto endlabel8204; } }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); endlabel8204: ; return; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_57fb_21)(uae_u32 opcode) { {{ uae_s32 dummy = get_long_ce020_prefetch (2); if (cctrue (7)) { Exception (7); goto endlabel8205; } }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); endlabel8205: ; return; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_57fc_21)(uae_u32 opcode) { { if (cctrue (7)) { Exception (7); goto endlabel8206; } } regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); endlabel8206: ; return; } #endif /* Scc.B Dn */ void REGPARAM2 CPUFUNC(op_58c0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (8) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* DBcc.W Dn,#.W */ void REGPARAM2 CPUFUNC(op_58c8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_word_ce020_prefetch (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (8)) { m68k_incpc ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { regs.ce020memcycles += 4 * cpucycleunit; if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel8208; } return; } regs.ce020memcycles += 8 * cpucycleunit; } else { regs.ce020memcycles += 4 * cpucycleunit; } m68k_setpc (oldpc + 4); }}}endlabel8208: ; return; } /* Scc.B (An) */ void REGPARAM2 CPUFUNC(op_58d0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (8) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B (An)+ */ void REGPARAM2 CPUFUNC(op_58d8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (8) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B -(An) */ void REGPARAM2 CPUFUNC(op_58e0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (8) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B (d16,An) */ void REGPARAM2 CPUFUNC(op_58e8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); {{ int val = cctrue (8) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* Scc.B (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_58f0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); {{ int val = cctrue (8) ? 0xff : 0; x_put_byte (srca, val); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* Scc.B (xxx).W */ void REGPARAM2 CPUFUNC(op_58f8_21)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); {{ int val = cctrue (8) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* Scc.B (xxx).L */ void REGPARAM2 CPUFUNC(op_58f9_21)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); {{ int val = cctrue (8) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_58fa_21)(uae_u32 opcode) { {{ uae_s16 dummy = get_word_ce020_prefetch (2); if (cctrue (8)) { Exception (7); goto endlabel8216; } }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); endlabel8216: ; return; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_58fb_21)(uae_u32 opcode) { {{ uae_s32 dummy = get_long_ce020_prefetch (2); if (cctrue (8)) { Exception (7); goto endlabel8217; } }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); endlabel8217: ; return; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_58fc_21)(uae_u32 opcode) { { if (cctrue (8)) { Exception (7); goto endlabel8218; } } regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); endlabel8218: ; return; } #endif /* Scc.B Dn */ void REGPARAM2 CPUFUNC(op_59c0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (9) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* DBcc.W Dn,#.W */ void REGPARAM2 CPUFUNC(op_59c8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_word_ce020_prefetch (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (9)) { m68k_incpc ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { regs.ce020memcycles += 4 * cpucycleunit; if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel8220; } return; } regs.ce020memcycles += 8 * cpucycleunit; } else { regs.ce020memcycles += 4 * cpucycleunit; } m68k_setpc (oldpc + 4); }}}endlabel8220: ; return; } /* Scc.B (An) */ void REGPARAM2 CPUFUNC(op_59d0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (9) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B (An)+ */ void REGPARAM2 CPUFUNC(op_59d8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (9) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B -(An) */ void REGPARAM2 CPUFUNC(op_59e0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (9) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B (d16,An) */ void REGPARAM2 CPUFUNC(op_59e8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); {{ int val = cctrue (9) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* Scc.B (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_59f0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); {{ int val = cctrue (9) ? 0xff : 0; x_put_byte (srca, val); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* Scc.B (xxx).W */ void REGPARAM2 CPUFUNC(op_59f8_21)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); {{ int val = cctrue (9) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* Scc.B (xxx).L */ void REGPARAM2 CPUFUNC(op_59f9_21)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); {{ int val = cctrue (9) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_59fa_21)(uae_u32 opcode) { {{ uae_s16 dummy = get_word_ce020_prefetch (2); if (cctrue (9)) { Exception (7); goto endlabel8228; } }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); endlabel8228: ; return; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_59fb_21)(uae_u32 opcode) { {{ uae_s32 dummy = get_long_ce020_prefetch (2); if (cctrue (9)) { Exception (7); goto endlabel8229; } }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); endlabel8229: ; return; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_59fc_21)(uae_u32 opcode) { { if (cctrue (9)) { Exception (7); goto endlabel8230; } } regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); endlabel8230: ; return; } #endif /* Scc.B Dn */ void REGPARAM2 CPUFUNC(op_5ac0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (10) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* DBcc.W Dn,#.W */ void REGPARAM2 CPUFUNC(op_5ac8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_word_ce020_prefetch (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (10)) { m68k_incpc ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { regs.ce020memcycles += 4 * cpucycleunit; if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel8232; } return; } regs.ce020memcycles += 8 * cpucycleunit; } else { regs.ce020memcycles += 4 * cpucycleunit; } m68k_setpc (oldpc + 4); }}}endlabel8232: ; return; } /* Scc.B (An) */ void REGPARAM2 CPUFUNC(op_5ad0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (10) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B (An)+ */ void REGPARAM2 CPUFUNC(op_5ad8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (10) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B -(An) */ void REGPARAM2 CPUFUNC(op_5ae0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (10) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B (d16,An) */ void REGPARAM2 CPUFUNC(op_5ae8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); {{ int val = cctrue (10) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* Scc.B (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_5af0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); {{ int val = cctrue (10) ? 0xff : 0; x_put_byte (srca, val); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* Scc.B (xxx).W */ void REGPARAM2 CPUFUNC(op_5af8_21)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); {{ int val = cctrue (10) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* Scc.B (xxx).L */ void REGPARAM2 CPUFUNC(op_5af9_21)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); {{ int val = cctrue (10) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_5afa_21)(uae_u32 opcode) { {{ uae_s16 dummy = get_word_ce020_prefetch (2); if (cctrue (10)) { Exception (7); goto endlabel8240; } }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); endlabel8240: ; return; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_5afb_21)(uae_u32 opcode) { {{ uae_s32 dummy = get_long_ce020_prefetch (2); if (cctrue (10)) { Exception (7); goto endlabel8241; } }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); endlabel8241: ; return; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_5afc_21)(uae_u32 opcode) { { if (cctrue (10)) { Exception (7); goto endlabel8242; } } regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); endlabel8242: ; return; } #endif /* Scc.B Dn */ void REGPARAM2 CPUFUNC(op_5bc0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (11) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* DBcc.W Dn,#.W */ void REGPARAM2 CPUFUNC(op_5bc8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_word_ce020_prefetch (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (11)) { m68k_incpc ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { regs.ce020memcycles += 4 * cpucycleunit; if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel8244; } return; } regs.ce020memcycles += 8 * cpucycleunit; } else { regs.ce020memcycles += 4 * cpucycleunit; } m68k_setpc (oldpc + 4); }}}endlabel8244: ; return; } /* Scc.B (An) */ void REGPARAM2 CPUFUNC(op_5bd0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (11) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B (An)+ */ void REGPARAM2 CPUFUNC(op_5bd8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (11) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B -(An) */ void REGPARAM2 CPUFUNC(op_5be0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (11) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B (d16,An) */ void REGPARAM2 CPUFUNC(op_5be8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); {{ int val = cctrue (11) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* Scc.B (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_5bf0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); {{ int val = cctrue (11) ? 0xff : 0; x_put_byte (srca, val); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* Scc.B (xxx).W */ void REGPARAM2 CPUFUNC(op_5bf8_21)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); {{ int val = cctrue (11) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* Scc.B (xxx).L */ void REGPARAM2 CPUFUNC(op_5bf9_21)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); {{ int val = cctrue (11) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_5bfa_21)(uae_u32 opcode) { {{ uae_s16 dummy = get_word_ce020_prefetch (2); if (cctrue (11)) { Exception (7); goto endlabel8252; } }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); endlabel8252: ; return; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_5bfb_21)(uae_u32 opcode) { {{ uae_s32 dummy = get_long_ce020_prefetch (2); if (cctrue (11)) { Exception (7); goto endlabel8253; } }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); endlabel8253: ; return; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_5bfc_21)(uae_u32 opcode) { { if (cctrue (11)) { Exception (7); goto endlabel8254; } } regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); endlabel8254: ; return; } #endif /* Scc.B Dn */ void REGPARAM2 CPUFUNC(op_5cc0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (12) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* DBcc.W Dn,#.W */ void REGPARAM2 CPUFUNC(op_5cc8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_word_ce020_prefetch (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (12)) { m68k_incpc ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { regs.ce020memcycles += 4 * cpucycleunit; if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel8256; } return; } regs.ce020memcycles += 8 * cpucycleunit; } else { regs.ce020memcycles += 4 * cpucycleunit; } m68k_setpc (oldpc + 4); }}}endlabel8256: ; return; } /* Scc.B (An) */ void REGPARAM2 CPUFUNC(op_5cd0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (12) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B (An)+ */ void REGPARAM2 CPUFUNC(op_5cd8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (12) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B -(An) */ void REGPARAM2 CPUFUNC(op_5ce0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (12) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B (d16,An) */ void REGPARAM2 CPUFUNC(op_5ce8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); {{ int val = cctrue (12) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* Scc.B (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_5cf0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); {{ int val = cctrue (12) ? 0xff : 0; x_put_byte (srca, val); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* Scc.B (xxx).W */ void REGPARAM2 CPUFUNC(op_5cf8_21)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); {{ int val = cctrue (12) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* Scc.B (xxx).L */ void REGPARAM2 CPUFUNC(op_5cf9_21)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); {{ int val = cctrue (12) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_5cfa_21)(uae_u32 opcode) { {{ uae_s16 dummy = get_word_ce020_prefetch (2); if (cctrue (12)) { Exception (7); goto endlabel8264; } }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); endlabel8264: ; return; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_5cfb_21)(uae_u32 opcode) { {{ uae_s32 dummy = get_long_ce020_prefetch (2); if (cctrue (12)) { Exception (7); goto endlabel8265; } }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); endlabel8265: ; return; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_5cfc_21)(uae_u32 opcode) { { if (cctrue (12)) { Exception (7); goto endlabel8266; } } regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); endlabel8266: ; return; } #endif /* Scc.B Dn */ void REGPARAM2 CPUFUNC(op_5dc0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (13) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* DBcc.W Dn,#.W */ void REGPARAM2 CPUFUNC(op_5dc8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_word_ce020_prefetch (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (13)) { m68k_incpc ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { regs.ce020memcycles += 4 * cpucycleunit; if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel8268; } return; } regs.ce020memcycles += 8 * cpucycleunit; } else { regs.ce020memcycles += 4 * cpucycleunit; } m68k_setpc (oldpc + 4); }}}endlabel8268: ; return; } /* Scc.B (An) */ void REGPARAM2 CPUFUNC(op_5dd0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (13) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B (An)+ */ void REGPARAM2 CPUFUNC(op_5dd8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (13) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B -(An) */ void REGPARAM2 CPUFUNC(op_5de0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (13) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B (d16,An) */ void REGPARAM2 CPUFUNC(op_5de8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); {{ int val = cctrue (13) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* Scc.B (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_5df0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); {{ int val = cctrue (13) ? 0xff : 0; x_put_byte (srca, val); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* Scc.B (xxx).W */ void REGPARAM2 CPUFUNC(op_5df8_21)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); {{ int val = cctrue (13) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* Scc.B (xxx).L */ void REGPARAM2 CPUFUNC(op_5df9_21)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); {{ int val = cctrue (13) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_5dfa_21)(uae_u32 opcode) { {{ uae_s16 dummy = get_word_ce020_prefetch (2); if (cctrue (13)) { Exception (7); goto endlabel8276; } }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); endlabel8276: ; return; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_5dfb_21)(uae_u32 opcode) { {{ uae_s32 dummy = get_long_ce020_prefetch (2); if (cctrue (13)) { Exception (7); goto endlabel8277; } }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); endlabel8277: ; return; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_5dfc_21)(uae_u32 opcode) { { if (cctrue (13)) { Exception (7); goto endlabel8278; } } regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); endlabel8278: ; return; } #endif /* Scc.B Dn */ void REGPARAM2 CPUFUNC(op_5ec0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (14) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* DBcc.W Dn,#.W */ void REGPARAM2 CPUFUNC(op_5ec8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_word_ce020_prefetch (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (14)) { m68k_incpc ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { regs.ce020memcycles += 4 * cpucycleunit; if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel8280; } return; } regs.ce020memcycles += 8 * cpucycleunit; } else { regs.ce020memcycles += 4 * cpucycleunit; } m68k_setpc (oldpc + 4); }}}endlabel8280: ; return; } /* Scc.B (An) */ void REGPARAM2 CPUFUNC(op_5ed0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (14) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B (An)+ */ void REGPARAM2 CPUFUNC(op_5ed8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (14) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B -(An) */ void REGPARAM2 CPUFUNC(op_5ee0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (14) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B (d16,An) */ void REGPARAM2 CPUFUNC(op_5ee8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); {{ int val = cctrue (14) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* Scc.B (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_5ef0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); {{ int val = cctrue (14) ? 0xff : 0; x_put_byte (srca, val); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* Scc.B (xxx).W */ void REGPARAM2 CPUFUNC(op_5ef8_21)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); {{ int val = cctrue (14) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* Scc.B (xxx).L */ void REGPARAM2 CPUFUNC(op_5ef9_21)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); {{ int val = cctrue (14) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_5efa_21)(uae_u32 opcode) { {{ uae_s16 dummy = get_word_ce020_prefetch (2); if (cctrue (14)) { Exception (7); goto endlabel8288; } }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); endlabel8288: ; return; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_5efb_21)(uae_u32 opcode) { {{ uae_s32 dummy = get_long_ce020_prefetch (2); if (cctrue (14)) { Exception (7); goto endlabel8289; } }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); endlabel8289: ; return; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_5efc_21)(uae_u32 opcode) { { if (cctrue (14)) { Exception (7); goto endlabel8290; } } regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); endlabel8290: ; return; } #endif /* Scc.B Dn */ void REGPARAM2 CPUFUNC(op_5fc0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (15) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* DBcc.W Dn,#.W */ void REGPARAM2 CPUFUNC(op_5fc8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_word_ce020_prefetch (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (15)) { m68k_incpc ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { regs.ce020memcycles += 4 * cpucycleunit; if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel8292; } return; } regs.ce020memcycles += 8 * cpucycleunit; } else { regs.ce020memcycles += 4 * cpucycleunit; } m68k_setpc (oldpc + 4); }}}endlabel8292: ; return; } /* Scc.B (An) */ void REGPARAM2 CPUFUNC(op_5fd0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (15) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B (An)+ */ void REGPARAM2 CPUFUNC(op_5fd8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (15) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B -(An) */ void REGPARAM2 CPUFUNC(op_5fe0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (15) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B (d16,An) */ void REGPARAM2 CPUFUNC(op_5fe8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); {{ int val = cctrue (15) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* Scc.B (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_5ff0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); {{ int val = cctrue (15) ? 0xff : 0; x_put_byte (srca, val); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* Scc.B (xxx).W */ void REGPARAM2 CPUFUNC(op_5ff8_21)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); {{ int val = cctrue (15) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* Scc.B (xxx).L */ void REGPARAM2 CPUFUNC(op_5ff9_21)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); {{ int val = cctrue (15) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_5ffa_21)(uae_u32 opcode) { {{ uae_s16 dummy = get_word_ce020_prefetch (2); if (cctrue (15)) { Exception (7); goto endlabel8300; } }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); endlabel8300: ; return; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_5ffb_21)(uae_u32 opcode) { {{ uae_s32 dummy = get_long_ce020_prefetch (2); if (cctrue (15)) { Exception (7); goto endlabel8301; } }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); endlabel8301: ; return; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_5ffc_21)(uae_u32 opcode) { { if (cctrue (15)) { Exception (7); goto endlabel8302; } } regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); endlabel8302: ; return; } #endif /* Bcc.W #.W */ void REGPARAM2 CPUFUNC(op_6000_21)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); if (!cctrue (0)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel8303; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (4); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel8303: ; return; } /* BccQ.B # */ void REGPARAM2 CPUFUNC(op_6001_21)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (0)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel8304; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (2); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel8304: ; return; } /* Bcc.L #.L */ void REGPARAM2 CPUFUNC(op_60ff_21)(uae_u32 opcode) { {{ uae_s32 src = get_long_ce020_prefetch (2); if (!cctrue (0)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel8305; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (6); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel8305: ; return; } /* BSR.W #.W */ void REGPARAM2 CPUFUNC(op_6100_21)(uae_u32 opcode) { { uae_s32 s; { uae_s16 src = get_word_ce020_prefetch (2); s = (uae_s32)src + 2; if (src & 1) { exception3 (opcode, m68k_getpc () + s, 0, 1, m68k_getpc () + s); goto endlabel8306; } m68k_do_bsr_ce020 (m68k_getpc () + 4, s); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel8306: ; return; } /* BSRQ.B # */ void REGPARAM2 CPUFUNC(op_6101_21)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); { uae_s32 s; { uae_u32 src = srcreg; s = (uae_s32)src + 2; if (src & 1) { exception3 (opcode, m68k_getpc () + s, 0, 1, m68k_getpc () + s); goto endlabel8307; } m68k_do_bsr_ce020 (m68k_getpc () + 2, s); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel8307: ; return; } /* BSR.L #.L */ void REGPARAM2 CPUFUNC(op_61ff_21)(uae_u32 opcode) { { uae_s32 s; { uae_s32 src = get_long_ce020_prefetch (2); s = (uae_s32)src + 2; if (src & 1) { exception3 (opcode, m68k_getpc () + s, 0, 1, m68k_getpc () + s); goto endlabel8308; } m68k_do_bsr_ce020 (m68k_getpc () + 6, s); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel8308: ; return; } #endif #ifdef PART_6 /* Bcc.W #.W */ void REGPARAM2 CPUFUNC(op_6200_21)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); if (!cctrue (2)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel8309; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (4); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel8309: ; return; } /* BccQ.B # */ void REGPARAM2 CPUFUNC(op_6201_21)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (2)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel8310; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (2); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel8310: ; return; } /* Bcc.L #.L */ void REGPARAM2 CPUFUNC(op_62ff_21)(uae_u32 opcode) { {{ uae_s32 src = get_long_ce020_prefetch (2); if (!cctrue (2)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel8311; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (6); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel8311: ; return; } /* Bcc.W #.W */ void REGPARAM2 CPUFUNC(op_6300_21)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); if (!cctrue (3)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel8312; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (4); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel8312: ; return; } /* BccQ.B # */ void REGPARAM2 CPUFUNC(op_6301_21)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (3)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel8313; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (2); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel8313: ; return; } /* Bcc.L #.L */ void REGPARAM2 CPUFUNC(op_63ff_21)(uae_u32 opcode) { {{ uae_s32 src = get_long_ce020_prefetch (2); if (!cctrue (3)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel8314; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (6); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel8314: ; return; } /* Bcc.W #.W */ void REGPARAM2 CPUFUNC(op_6400_21)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); if (!cctrue (4)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel8315; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (4); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel8315: ; return; } /* BccQ.B # */ void REGPARAM2 CPUFUNC(op_6401_21)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (4)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel8316; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (2); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel8316: ; return; } /* Bcc.L #.L */ void REGPARAM2 CPUFUNC(op_64ff_21)(uae_u32 opcode) { {{ uae_s32 src = get_long_ce020_prefetch (2); if (!cctrue (4)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel8317; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (6); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel8317: ; return; } /* Bcc.W #.W */ void REGPARAM2 CPUFUNC(op_6500_21)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); if (!cctrue (5)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel8318; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (4); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel8318: ; return; } /* BccQ.B # */ void REGPARAM2 CPUFUNC(op_6501_21)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (5)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel8319; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (2); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel8319: ; return; } /* Bcc.L #.L */ void REGPARAM2 CPUFUNC(op_65ff_21)(uae_u32 opcode) { {{ uae_s32 src = get_long_ce020_prefetch (2); if (!cctrue (5)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel8320; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (6); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel8320: ; return; } /* Bcc.W #.W */ void REGPARAM2 CPUFUNC(op_6600_21)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); if (!cctrue (6)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel8321; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (4); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel8321: ; return; } /* BccQ.B # */ void REGPARAM2 CPUFUNC(op_6601_21)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (6)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel8322; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (2); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel8322: ; return; } /* Bcc.L #.L */ void REGPARAM2 CPUFUNC(op_66ff_21)(uae_u32 opcode) { {{ uae_s32 src = get_long_ce020_prefetch (2); if (!cctrue (6)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel8323; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (6); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel8323: ; return; } /* Bcc.W #.W */ void REGPARAM2 CPUFUNC(op_6700_21)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); if (!cctrue (7)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel8324; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (4); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel8324: ; return; } /* BccQ.B # */ void REGPARAM2 CPUFUNC(op_6701_21)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (7)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel8325; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (2); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel8325: ; return; } /* Bcc.L #.L */ void REGPARAM2 CPUFUNC(op_67ff_21)(uae_u32 opcode) { {{ uae_s32 src = get_long_ce020_prefetch (2); if (!cctrue (7)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel8326; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (6); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel8326: ; return; } /* Bcc.W #.W */ void REGPARAM2 CPUFUNC(op_6800_21)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); if (!cctrue (8)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel8327; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (4); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel8327: ; return; } /* BccQ.B # */ void REGPARAM2 CPUFUNC(op_6801_21)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (8)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel8328; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (2); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel8328: ; return; } /* Bcc.L #.L */ void REGPARAM2 CPUFUNC(op_68ff_21)(uae_u32 opcode) { {{ uae_s32 src = get_long_ce020_prefetch (2); if (!cctrue (8)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel8329; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (6); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel8329: ; return; } /* Bcc.W #.W */ void REGPARAM2 CPUFUNC(op_6900_21)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); if (!cctrue (9)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel8330; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (4); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel8330: ; return; } /* BccQ.B # */ void REGPARAM2 CPUFUNC(op_6901_21)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (9)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel8331; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (2); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel8331: ; return; } /* Bcc.L #.L */ void REGPARAM2 CPUFUNC(op_69ff_21)(uae_u32 opcode) { {{ uae_s32 src = get_long_ce020_prefetch (2); if (!cctrue (9)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel8332; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (6); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel8332: ; return; } /* Bcc.W #.W */ void REGPARAM2 CPUFUNC(op_6a00_21)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); if (!cctrue (10)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel8333; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (4); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel8333: ; return; } /* BccQ.B # */ void REGPARAM2 CPUFUNC(op_6a01_21)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (10)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel8334; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (2); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel8334: ; return; } /* Bcc.L #.L */ void REGPARAM2 CPUFUNC(op_6aff_21)(uae_u32 opcode) { {{ uae_s32 src = get_long_ce020_prefetch (2); if (!cctrue (10)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel8335; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (6); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel8335: ; return; } /* Bcc.W #.W */ void REGPARAM2 CPUFUNC(op_6b00_21)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); if (!cctrue (11)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel8336; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (4); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel8336: ; return; } /* BccQ.B # */ void REGPARAM2 CPUFUNC(op_6b01_21)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (11)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel8337; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (2); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel8337: ; return; } /* Bcc.L #.L */ void REGPARAM2 CPUFUNC(op_6bff_21)(uae_u32 opcode) { {{ uae_s32 src = get_long_ce020_prefetch (2); if (!cctrue (11)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel8338; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (6); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel8338: ; return; } /* Bcc.W #.W */ void REGPARAM2 CPUFUNC(op_6c00_21)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); if (!cctrue (12)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel8339; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (4); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel8339: ; return; } /* BccQ.B # */ void REGPARAM2 CPUFUNC(op_6c01_21)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (12)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel8340; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (2); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel8340: ; return; } /* Bcc.L #.L */ void REGPARAM2 CPUFUNC(op_6cff_21)(uae_u32 opcode) { {{ uae_s32 src = get_long_ce020_prefetch (2); if (!cctrue (12)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel8341; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (6); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel8341: ; return; } /* Bcc.W #.W */ void REGPARAM2 CPUFUNC(op_6d00_21)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); if (!cctrue (13)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel8342; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (4); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel8342: ; return; } /* BccQ.B # */ void REGPARAM2 CPUFUNC(op_6d01_21)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (13)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel8343; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (2); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel8343: ; return; } /* Bcc.L #.L */ void REGPARAM2 CPUFUNC(op_6dff_21)(uae_u32 opcode) { {{ uae_s32 src = get_long_ce020_prefetch (2); if (!cctrue (13)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel8344; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (6); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel8344: ; return; } /* Bcc.W #.W */ void REGPARAM2 CPUFUNC(op_6e00_21)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); if (!cctrue (14)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel8345; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (4); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel8345: ; return; } /* BccQ.B # */ void REGPARAM2 CPUFUNC(op_6e01_21)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (14)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel8346; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (2); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel8346: ; return; } /* Bcc.L #.L */ void REGPARAM2 CPUFUNC(op_6eff_21)(uae_u32 opcode) { {{ uae_s32 src = get_long_ce020_prefetch (2); if (!cctrue (14)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel8347; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (6); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel8347: ; return; } /* Bcc.W #.W */ void REGPARAM2 CPUFUNC(op_6f00_21)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); if (!cctrue (15)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel8348; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (4); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel8348: ; return; } /* BccQ.B # */ void REGPARAM2 CPUFUNC(op_6f01_21)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (15)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel8349; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (2); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel8349: ; return; } /* Bcc.L #.L */ void REGPARAM2 CPUFUNC(op_6fff_21)(uae_u32 opcode) { {{ uae_s32 src = get_long_ce020_prefetch (2); if (!cctrue (15)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel8350; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (6); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel8350: ; return; } /* MOVEQ.L #,Dn */ void REGPARAM2 CPUFUNC(op_7000_21)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_u32 src = srcreg; { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpc (2); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* OR.B Dn,Dn */ void REGPARAM2 CPUFUNC(op_8000_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* OR.B (An),Dn */ void REGPARAM2 CPUFUNC(op_8010_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* OR.B (An)+,Dn */ void REGPARAM2 CPUFUNC(op_8018_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* OR.B -(An),Dn */ void REGPARAM2 CPUFUNC(op_8020_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* OR.B (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_8028_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* OR.B (d8,An,Xn),Dn */ void REGPARAM2 CPUFUNC(op_8030_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* OR.B (xxx).W,Dn */ void REGPARAM2 CPUFUNC(op_8038_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* OR.B (xxx).L,Dn */ void REGPARAM2 CPUFUNC(op_8039_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* OR.B (d16,PC),Dn */ void REGPARAM2 CPUFUNC(op_803a_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* OR.B (d8,PC,Xn),Dn */ void REGPARAM2 CPUFUNC(op_803b_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* OR.B #.B,Dn */ void REGPARAM2 CPUFUNC(op_803c_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* OR.W Dn,Dn */ void REGPARAM2 CPUFUNC(op_8040_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* OR.W (An),Dn */ void REGPARAM2 CPUFUNC(op_8050_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* OR.W (An)+,Dn */ void REGPARAM2 CPUFUNC(op_8058_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* OR.W -(An),Dn */ void REGPARAM2 CPUFUNC(op_8060_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* OR.W (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_8068_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* OR.W (d8,An,Xn),Dn */ void REGPARAM2 CPUFUNC(op_8070_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* OR.W (xxx).W,Dn */ void REGPARAM2 CPUFUNC(op_8078_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* OR.W (xxx).L,Dn */ void REGPARAM2 CPUFUNC(op_8079_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* OR.W (d16,PC),Dn */ void REGPARAM2 CPUFUNC(op_807a_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* OR.W (d8,PC,Xn),Dn */ void REGPARAM2 CPUFUNC(op_807b_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* OR.W #.W,Dn */ void REGPARAM2 CPUFUNC(op_807c_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* OR.L Dn,Dn */ void REGPARAM2 CPUFUNC(op_8080_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* OR.L (An),Dn */ void REGPARAM2 CPUFUNC(op_8090_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* OR.L (An)+,Dn */ void REGPARAM2 CPUFUNC(op_8098_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) += 4; { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* OR.L -(An),Dn */ void REGPARAM2 CPUFUNC(op_80a0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* OR.L (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_80a8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* OR.L (d8,An,Xn),Dn */ void REGPARAM2 CPUFUNC(op_80b0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* OR.L (xxx).W,Dn */ void REGPARAM2 CPUFUNC(op_80b8_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* OR.L (xxx).L,Dn */ void REGPARAM2 CPUFUNC(op_80b9_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* OR.L (d16,PC),Dn */ void REGPARAM2 CPUFUNC(op_80ba_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* OR.L (d8,PC,Xn),Dn */ void REGPARAM2 CPUFUNC(op_80bb_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* OR.L #.L,Dn */ void REGPARAM2 CPUFUNC(op_80bc_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* DIVU.W Dn,Dn */ void REGPARAM2 CPUFUNC(op_80c0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); if (dst < 0) SET_NFLG (1); m68k_incpc (2); Exception (5); goto endlabel8385; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; regs.ce020memcycles += 36 * cpucycleunit; if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (2); } }}}endlabel8385: ; return; } /* DIVU.W (An),Dn */ void REGPARAM2 CPUFUNC(op_80d0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); if (dst < 0) SET_NFLG (1); m68k_incpc (2); Exception (5); goto endlabel8386; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; regs.ce020memcycles += 36 * cpucycleunit; if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (2); } }}}}endlabel8386: ; return; } /* DIVU.W (An)+,Dn */ void REGPARAM2 CPUFUNC(op_80d8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); if (dst < 0) SET_NFLG (1); m68k_incpc (2); Exception (5); goto endlabel8387; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; regs.ce020memcycles += 36 * cpucycleunit; if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (2); } }}}}endlabel8387: ; return; } /* DIVU.W -(An),Dn */ void REGPARAM2 CPUFUNC(op_80e0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); if (dst < 0) SET_NFLG (1); m68k_incpc (2); Exception (5); goto endlabel8388; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; regs.ce020memcycles += 36 * cpucycleunit; if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (2); } }}}}endlabel8388: ; return; } /* DIVU.W (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_80e8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); if (dst < 0) SET_NFLG (1); m68k_incpc (4); Exception (5); goto endlabel8389; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; regs.ce020memcycles += 36 * cpucycleunit; if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (4); } }}}}endlabel8389: ; return; } /* DIVU.W (d8,An,Xn),Dn */ void REGPARAM2 CPUFUNC(op_80f0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); if (dst < 0) SET_NFLG (1); m68k_incpc (0); Exception (5); goto endlabel8390; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; regs.ce020memcycles += 36 * cpucycleunit; if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } } }}}}}endlabel8390: ; return; } /* DIVU.W (xxx).W,Dn */ void REGPARAM2 CPUFUNC(op_80f8_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); if (dst < 0) SET_NFLG (1); m68k_incpc (4); Exception (5); goto endlabel8391; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; regs.ce020memcycles += 36 * cpucycleunit; if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (4); } }}}}endlabel8391: ; return; } /* DIVU.W (xxx).L,Dn */ void REGPARAM2 CPUFUNC(op_80f9_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); if (dst < 0) SET_NFLG (1); m68k_incpc (6); Exception (5); goto endlabel8392; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; regs.ce020memcycles += 36 * cpucycleunit; if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (6); } }}}}endlabel8392: ; return; } /* DIVU.W (d16,PC),Dn */ void REGPARAM2 CPUFUNC(op_80fa_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); if (dst < 0) SET_NFLG (1); m68k_incpc (4); Exception (5); goto endlabel8393; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; regs.ce020memcycles += 36 * cpucycleunit; if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (4); } }}}}endlabel8393: ; return; } /* DIVU.W (d8,PC,Xn),Dn */ void REGPARAM2 CPUFUNC(op_80fb_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); if (dst < 0) SET_NFLG (1); m68k_incpc (0); Exception (5); goto endlabel8394; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; regs.ce020memcycles += 36 * cpucycleunit; if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } } }}}}}endlabel8394: ; return; } /* DIVU.W #.W,Dn */ void REGPARAM2 CPUFUNC(op_80fc_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); if (dst < 0) SET_NFLG (1); m68k_incpc (4); Exception (5); goto endlabel8395; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; regs.ce020memcycles += 36 * cpucycleunit; if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (4); } }}}endlabel8395: ; return; } /* SBCD.B Dn,Dn */ void REGPARAM2 CPUFUNC(op_8100_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); { uae_u16 newv_lo = (dst & 0xF) - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = (dst & 0xF0) - (src & 0xF0); uae_u16 newv, tmp_newv; int bcd = 0; newv = tmp_newv = newv_hi + newv_lo; if (newv_lo & 0xF0) { newv -= 6; bcd = 6; }; if ((((dst & 0xFF) - (src & 0xFF) - (GET_XFLG () ? 1 : 0)) & 0x100) > 0xFF) { newv -= 0x60; } SET_CFLG ((((dst & 0xFF) - (src & 0xFF) - bcd - (GET_XFLG () ? 1 : 0)) & 0x300) > 0xFF); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); SET_VFLG ((tmp_newv & 0x80) != 0 && (newv & 0x80) == 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SBCD.B -(An),-(An) */ void REGPARAM2 CPUFUNC(op_8108_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; { uae_u16 newv_lo = (dst & 0xF) - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = (dst & 0xF0) - (src & 0xF0); uae_u16 newv, tmp_newv; int bcd = 0; newv = tmp_newv = newv_hi + newv_lo; if (newv_lo & 0xF0) { newv -= 6; bcd = 6; }; if ((((dst & 0xFF) - (src & 0xFF) - (GET_XFLG () ? 1 : 0)) & 0x100) > 0xFF) { newv -= 0x60; } SET_CFLG ((((dst & 0xFF) - (src & 0xFF) - bcd - (GET_XFLG () ? 1 : 0)) & 0x300) > 0xFF); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); SET_VFLG ((tmp_newv & 0x80) != 0 && (newv & 0x80) == 0); x_put_byte (dsta, newv); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* OR.B Dn,(An) */ void REGPARAM2 CPUFUNC(op_8110_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* OR.B Dn,(An)+ */ void REGPARAM2 CPUFUNC(op_8118_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* OR.B Dn,-(An) */ void REGPARAM2 CPUFUNC(op_8120_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* OR.B Dn,(d16,An) */ void REGPARAM2 CPUFUNC(op_8128_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* OR.B Dn,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_8130_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s8 dst = x_get_byte (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* OR.B Dn,(xxx).W */ void REGPARAM2 CPUFUNC(op_8138_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* OR.B Dn,(xxx).L */ void REGPARAM2 CPUFUNC(op_8139_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* PACK.L Dn,Dn */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_8140_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; { uae_u16 val = m68k_dreg (regs, srcreg) + get_word_ce020_prefetch (2); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & 0xffffff00) | ((val >> 4) & 0xf0) | (val & 0xf); } regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } #endif /* PACK.L -(An),-(An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_8148_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; { uae_u16 val; m68k_areg (regs, srcreg) -= areg_byteinc[srcreg]; val = (uae_u16)x_get_byte (m68k_areg (regs, srcreg)); m68k_areg (regs, srcreg) -= areg_byteinc[srcreg]; val = (val | ((uae_u16)x_get_byte (m68k_areg (regs, srcreg)) << 8)) + get_word_ce020_prefetch (2); m68k_areg (regs, dstreg) -= areg_byteinc[dstreg]; x_put_byte (m68k_areg (regs, dstreg),((val >> 4) & 0xf0) | (val & 0xf)); } regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } #endif /* OR.W Dn,(An) */ void REGPARAM2 CPUFUNC(op_8150_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* OR.W Dn,(An)+ */ void REGPARAM2 CPUFUNC(op_8158_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) += 2; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* OR.W Dn,-(An) */ void REGPARAM2 CPUFUNC(op_8160_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) = dsta; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* OR.W Dn,(d16,An) */ void REGPARAM2 CPUFUNC(op_8168_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 dst = x_get_word (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* OR.W Dn,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_8170_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s16 dst = x_get_word (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* OR.W Dn,(xxx).W */ void REGPARAM2 CPUFUNC(op_8178_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 dst = x_get_word (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* OR.W Dn,(xxx).L */ void REGPARAM2 CPUFUNC(op_8179_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_ce020_prefetch (2); { uae_s16 dst = x_get_word (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* UNPK.L Dn,Dn */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_8180_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; { uae_u16 val = m68k_dreg (regs, srcreg); val = (((val << 4) & 0xf00) | (val & 0xf)) + get_word_ce020_prefetch (2); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & 0xffff0000) | (val & 0xffff); } regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } #endif /* UNPK.L -(An),-(An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_8188_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; { uae_u16 val; m68k_areg (regs, srcreg) -= areg_byteinc[srcreg]; val = (uae_u16)x_get_byte (m68k_areg (regs, srcreg)); val = (((val << 4) & 0xf00) | (val & 0xf)) + get_word_ce020_prefetch (2); m68k_areg (regs, dstreg) -= 2 * areg_byteinc[dstreg]; x_put_byte (m68k_areg (regs, dstreg) + areg_byteinc[dstreg], val); x_put_byte (m68k_areg (regs, dstreg), val >> 8); } regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } #endif /* OR.L Dn,(An) */ void REGPARAM2 CPUFUNC(op_8190_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* OR.L Dn,(An)+ */ void REGPARAM2 CPUFUNC(op_8198_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) += 4; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* OR.L Dn,-(An) */ void REGPARAM2 CPUFUNC(op_81a0_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) = dsta; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* OR.L Dn,(d16,An) */ void REGPARAM2 CPUFUNC(op_81a8_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 dst = x_get_long (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* OR.L Dn,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_81b0_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s32 dst = x_get_long (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* OR.L Dn,(xxx).W */ void REGPARAM2 CPUFUNC(op_81b8_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 dst = x_get_long (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* OR.L Dn,(xxx).L */ void REGPARAM2 CPUFUNC(op_81b9_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_ce020_prefetch (2); { uae_s32 dst = x_get_long (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* DIVS.W Dn,Dn */ void REGPARAM2 CPUFUNC(op_81c0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); SET_ZFLG (1); m68k_incpc (2); Exception (5); goto endlabel8423; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; regs.ce020memcycles += 46 * cpucycleunit; if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (2); } }}}endlabel8423: ; return; } /* DIVS.W (An),Dn */ void REGPARAM2 CPUFUNC(op_81d0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); SET_ZFLG (1); m68k_incpc (2); Exception (5); goto endlabel8424; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; regs.ce020memcycles += 46 * cpucycleunit; if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (2); } }}}}endlabel8424: ; return; } /* DIVS.W (An)+,Dn */ void REGPARAM2 CPUFUNC(op_81d8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); SET_ZFLG (1); m68k_incpc (2); Exception (5); goto endlabel8425; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; regs.ce020memcycles += 46 * cpucycleunit; if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (2); } }}}}endlabel8425: ; return; } /* DIVS.W -(An),Dn */ void REGPARAM2 CPUFUNC(op_81e0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); SET_ZFLG (1); m68k_incpc (2); Exception (5); goto endlabel8426; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; regs.ce020memcycles += 46 * cpucycleunit; if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (2); } }}}}endlabel8426: ; return; } /* DIVS.W (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_81e8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); SET_ZFLG (1); m68k_incpc (4); Exception (5); goto endlabel8427; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; regs.ce020memcycles += 46 * cpucycleunit; if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (4); } }}}}endlabel8427: ; return; } /* DIVS.W (d8,An,Xn),Dn */ void REGPARAM2 CPUFUNC(op_81f0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); SET_ZFLG (1); m68k_incpc (0); Exception (5); goto endlabel8428; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; regs.ce020memcycles += 46 * cpucycleunit; if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } } }}}}}endlabel8428: ; return; } /* DIVS.W (xxx).W,Dn */ void REGPARAM2 CPUFUNC(op_81f8_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); SET_ZFLG (1); m68k_incpc (4); Exception (5); goto endlabel8429; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; regs.ce020memcycles += 46 * cpucycleunit; if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (4); } }}}}endlabel8429: ; return; } /* DIVS.W (xxx).L,Dn */ void REGPARAM2 CPUFUNC(op_81f9_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); SET_ZFLG (1); m68k_incpc (6); Exception (5); goto endlabel8430; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; regs.ce020memcycles += 46 * cpucycleunit; if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (6); } }}}}endlabel8430: ; return; } /* DIVS.W (d16,PC),Dn */ void REGPARAM2 CPUFUNC(op_81fa_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); SET_ZFLG (1); m68k_incpc (4); Exception (5); goto endlabel8431; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; regs.ce020memcycles += 46 * cpucycleunit; if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (4); } }}}}endlabel8431: ; return; } /* DIVS.W (d8,PC,Xn),Dn */ void REGPARAM2 CPUFUNC(op_81fb_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); SET_ZFLG (1); m68k_incpc (0); Exception (5); goto endlabel8432; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; regs.ce020memcycles += 46 * cpucycleunit; if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } } }}}}}endlabel8432: ; return; } /* DIVS.W #.W,Dn */ void REGPARAM2 CPUFUNC(op_81fc_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); SET_ZFLG (1); m68k_incpc (4); Exception (5); goto endlabel8433; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; regs.ce020memcycles += 46 * cpucycleunit; if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (4); } }}}endlabel8433: ; return; } /* SUB.B Dn,Dn */ void REGPARAM2 CPUFUNC(op_9000_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUB.B (An),Dn */ void REGPARAM2 CPUFUNC(op_9010_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUB.B (An)+,Dn */ void REGPARAM2 CPUFUNC(op_9018_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUB.B -(An),Dn */ void REGPARAM2 CPUFUNC(op_9020_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUB.B (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_9028_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUB.B (d8,An,Xn),Dn */ void REGPARAM2 CPUFUNC(op_9030_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* SUB.B (xxx).W,Dn */ void REGPARAM2 CPUFUNC(op_9038_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUB.B (xxx).L,Dn */ void REGPARAM2 CPUFUNC(op_9039_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* SUB.B (d16,PC),Dn */ void REGPARAM2 CPUFUNC(op_903a_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUB.B (d8,PC,Xn),Dn */ void REGPARAM2 CPUFUNC(op_903b_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* SUB.B #.B,Dn */ void REGPARAM2 CPUFUNC(op_903c_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUB.W Dn,Dn */ void REGPARAM2 CPUFUNC(op_9040_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUB.W An,Dn */ void REGPARAM2 CPUFUNC(op_9048_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUB.W (An),Dn */ void REGPARAM2 CPUFUNC(op_9050_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUB.W (An)+,Dn */ void REGPARAM2 CPUFUNC(op_9058_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUB.W -(An),Dn */ void REGPARAM2 CPUFUNC(op_9060_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUB.W (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_9068_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUB.W (d8,An,Xn),Dn */ void REGPARAM2 CPUFUNC(op_9070_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* SUB.W (xxx).W,Dn */ void REGPARAM2 CPUFUNC(op_9078_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUB.W (xxx).L,Dn */ void REGPARAM2 CPUFUNC(op_9079_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* SUB.W (d16,PC),Dn */ void REGPARAM2 CPUFUNC(op_907a_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUB.W (d8,PC,Xn),Dn */ void REGPARAM2 CPUFUNC(op_907b_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* SUB.W #.W,Dn */ void REGPARAM2 CPUFUNC(op_907c_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUB.L Dn,Dn */ void REGPARAM2 CPUFUNC(op_9080_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUB.L An,Dn */ void REGPARAM2 CPUFUNC(op_9088_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUB.L (An),Dn */ void REGPARAM2 CPUFUNC(op_9090_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUB.L (An)+,Dn */ void REGPARAM2 CPUFUNC(op_9098_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) += 4; { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUB.L -(An),Dn */ void REGPARAM2 CPUFUNC(op_90a0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUB.L (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_90a8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUB.L (d8,An,Xn),Dn */ void REGPARAM2 CPUFUNC(op_90b0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* SUB.L (xxx).W,Dn */ void REGPARAM2 CPUFUNC(op_90b8_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUB.L (xxx).L,Dn */ void REGPARAM2 CPUFUNC(op_90b9_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* SUB.L (d16,PC),Dn */ void REGPARAM2 CPUFUNC(op_90ba_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUB.L (d8,PC,Xn),Dn */ void REGPARAM2 CPUFUNC(op_90bb_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* SUB.L #.L,Dn */ void REGPARAM2 CPUFUNC(op_90bc_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* SUBA.W Dn,An */ void REGPARAM2 CPUFUNC(op_90c0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUBA.W An,An */ void REGPARAM2 CPUFUNC(op_90c8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUBA.W (An),An */ void REGPARAM2 CPUFUNC(op_90d0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUBA.W (An)+,An */ void REGPARAM2 CPUFUNC(op_90d8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUBA.W -(An),An */ void REGPARAM2 CPUFUNC(op_90e0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUBA.W (d16,An),An */ void REGPARAM2 CPUFUNC(op_90e8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUBA.W (d8,An,Xn),An */ void REGPARAM2 CPUFUNC(op_90f0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* SUBA.W (xxx).W,An */ void REGPARAM2 CPUFUNC(op_90f8_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUBA.W (xxx).L,An */ void REGPARAM2 CPUFUNC(op_90f9_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* SUBA.W (d16,PC),An */ void REGPARAM2 CPUFUNC(op_90fa_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUBA.W (d8,PC,Xn),An */ void REGPARAM2 CPUFUNC(op_90fb_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* SUBA.W #.W,An */ void REGPARAM2 CPUFUNC(op_90fc_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUBX.B Dn,Dn */ void REGPARAM2 CPUFUNC(op_9100_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = dst - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUBX.B -(An),-(An) */ void REGPARAM2 CPUFUNC(op_9108_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; { uae_u32 newv = dst - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUB.B Dn,(An) */ void REGPARAM2 CPUFUNC(op_9110_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUB.B Dn,(An)+ */ void REGPARAM2 CPUFUNC(op_9118_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUB.B Dn,-(An) */ void REGPARAM2 CPUFUNC(op_9120_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUB.B Dn,(d16,An) */ void REGPARAM2 CPUFUNC(op_9128_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUB.B Dn,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_9130_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* SUB.B Dn,(xxx).W */ void REGPARAM2 CPUFUNC(op_9138_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUB.B Dn,(xxx).L */ void REGPARAM2 CPUFUNC(op_9139_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* SUBX.W Dn,Dn */ void REGPARAM2 CPUFUNC(op_9140_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = dst - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUBX.W -(An),-(An) */ void REGPARAM2 CPUFUNC(op_9148_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) = dsta; { uae_u32 newv = dst - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUB.W Dn,(An) */ void REGPARAM2 CPUFUNC(op_9150_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUB.W Dn,(An)+ */ void REGPARAM2 CPUFUNC(op_9158_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) += 2; {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUB.W Dn,-(An) */ void REGPARAM2 CPUFUNC(op_9160_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUB.W Dn,(d16,An) */ void REGPARAM2 CPUFUNC(op_9168_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUB.W Dn,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_9170_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* SUB.W Dn,(xxx).W */ void REGPARAM2 CPUFUNC(op_9178_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUB.W Dn,(xxx).L */ void REGPARAM2 CPUFUNC(op_9179_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_ce020_prefetch (2); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* SUBX.L Dn,Dn */ void REGPARAM2 CPUFUNC(op_9180_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = dst - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUBX.L -(An),-(An) */ void REGPARAM2 CPUFUNC(op_9188_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) = dsta; { uae_u32 newv = dst - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUB.L Dn,(An) */ void REGPARAM2 CPUFUNC(op_9190_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUB.L Dn,(An)+ */ void REGPARAM2 CPUFUNC(op_9198_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) += 4; {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUB.L Dn,-(An) */ void REGPARAM2 CPUFUNC(op_91a0_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUB.L Dn,(d16,An) */ void REGPARAM2 CPUFUNC(op_91a8_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUB.L Dn,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_91b0_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* SUB.L Dn,(xxx).W */ void REGPARAM2 CPUFUNC(op_91b8_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUB.L Dn,(xxx).L */ void REGPARAM2 CPUFUNC(op_91b9_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_ce020_prefetch (2); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* SUBA.L Dn,An */ void REGPARAM2 CPUFUNC(op_91c0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUBA.L An,An */ void REGPARAM2 CPUFUNC(op_91c8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUBA.L (An),An */ void REGPARAM2 CPUFUNC(op_91d0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUBA.L (An)+,An */ void REGPARAM2 CPUFUNC(op_91d8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) += 4; { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUBA.L -(An),An */ void REGPARAM2 CPUFUNC(op_91e0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUBA.L (d16,An),An */ void REGPARAM2 CPUFUNC(op_91e8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUBA.L (d8,An,Xn),An */ void REGPARAM2 CPUFUNC(op_91f0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* SUBA.L (xxx).W,An */ void REGPARAM2 CPUFUNC(op_91f8_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUBA.L (xxx).L,An */ void REGPARAM2 CPUFUNC(op_91f9_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* SUBA.L (d16,PC),An */ void REGPARAM2 CPUFUNC(op_91fa_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUBA.L (d8,PC,Xn),An */ void REGPARAM2 CPUFUNC(op_91fb_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* SUBA.L #.L,An */ void REGPARAM2 CPUFUNC(op_91fc_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* CMP.B Dn,Dn */ void REGPARAM2 CPUFUNC(op_b000_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CMP.B (An),Dn */ void REGPARAM2 CPUFUNC(op_b010_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CMP.B (An)+,Dn */ void REGPARAM2 CPUFUNC(op_b018_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CMP.B -(An),Dn */ void REGPARAM2 CPUFUNC(op_b020_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CMP.B (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_b028_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* CMP.B (d8,An,Xn),Dn */ void REGPARAM2 CPUFUNC(op_b030_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* CMP.B (xxx).W,Dn */ void REGPARAM2 CPUFUNC(op_b038_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* CMP.B (xxx).L,Dn */ void REGPARAM2 CPUFUNC(op_b039_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* CMP.B (d16,PC),Dn */ void REGPARAM2 CPUFUNC(op_b03a_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* CMP.B (d8,PC,Xn),Dn */ void REGPARAM2 CPUFUNC(op_b03b_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* CMP.B #.B,Dn */ void REGPARAM2 CPUFUNC(op_b03c_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* CMP.W Dn,Dn */ void REGPARAM2 CPUFUNC(op_b040_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CMP.W An,Dn */ void REGPARAM2 CPUFUNC(op_b048_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CMP.W (An),Dn */ void REGPARAM2 CPUFUNC(op_b050_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CMP.W (An)+,Dn */ void REGPARAM2 CPUFUNC(op_b058_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CMP.W -(An),Dn */ void REGPARAM2 CPUFUNC(op_b060_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CMP.W (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_b068_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* CMP.W (d8,An,Xn),Dn */ void REGPARAM2 CPUFUNC(op_b070_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* CMP.W (xxx).W,Dn */ void REGPARAM2 CPUFUNC(op_b078_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* CMP.W (xxx).L,Dn */ void REGPARAM2 CPUFUNC(op_b079_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* CMP.W (d16,PC),Dn */ void REGPARAM2 CPUFUNC(op_b07a_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* CMP.W (d8,PC,Xn),Dn */ void REGPARAM2 CPUFUNC(op_b07b_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* CMP.W #.W,Dn */ void REGPARAM2 CPUFUNC(op_b07c_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* CMP.L Dn,Dn */ void REGPARAM2 CPUFUNC(op_b080_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CMP.L An,Dn */ void REGPARAM2 CPUFUNC(op_b088_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } #endif #ifdef PART_7 /* CMP.L (An),Dn */ void REGPARAM2 CPUFUNC(op_b090_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CMP.L (An)+,Dn */ void REGPARAM2 CPUFUNC(op_b098_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) += 4; { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CMP.L -(An),Dn */ void REGPARAM2 CPUFUNC(op_b0a0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CMP.L (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_b0a8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* CMP.L (d8,An,Xn),Dn */ void REGPARAM2 CPUFUNC(op_b0b0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* CMP.L (xxx).W,Dn */ void REGPARAM2 CPUFUNC(op_b0b8_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* CMP.L (xxx).L,Dn */ void REGPARAM2 CPUFUNC(op_b0b9_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* CMP.L (d16,PC),Dn */ void REGPARAM2 CPUFUNC(op_b0ba_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* CMP.L (d8,PC,Xn),Dn */ void REGPARAM2 CPUFUNC(op_b0bb_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* CMP.L #.L,Dn */ void REGPARAM2 CPUFUNC(op_b0bc_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* CMPA.W Dn,An */ void REGPARAM2 CPUFUNC(op_b0c0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CMPA.W An,An */ void REGPARAM2 CPUFUNC(op_b0c8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CMPA.W (An),An */ void REGPARAM2 CPUFUNC(op_b0d0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CMPA.W (An)+,An */ void REGPARAM2 CPUFUNC(op_b0d8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CMPA.W -(An),An */ void REGPARAM2 CPUFUNC(op_b0e0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CMPA.W (d16,An),An */ void REGPARAM2 CPUFUNC(op_b0e8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* CMPA.W (d8,An,Xn),An */ void REGPARAM2 CPUFUNC(op_b0f0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* CMPA.W (xxx).W,An */ void REGPARAM2 CPUFUNC(op_b0f8_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* CMPA.W (xxx).L,An */ void REGPARAM2 CPUFUNC(op_b0f9_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* CMPA.W (d16,PC),An */ void REGPARAM2 CPUFUNC(op_b0fa_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* CMPA.W (d8,PC,Xn),An */ void REGPARAM2 CPUFUNC(op_b0fb_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* CMPA.W #.W,An */ void REGPARAM2 CPUFUNC(op_b0fc_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* EOR.B Dn,Dn */ void REGPARAM2 CPUFUNC(op_b100_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CMPM.B (An)+,(An)+ */ void REGPARAM2 CPUFUNC(op_b108_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* EOR.B Dn,(An) */ void REGPARAM2 CPUFUNC(op_b110_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* EOR.B Dn,(An)+ */ void REGPARAM2 CPUFUNC(op_b118_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* EOR.B Dn,-(An) */ void REGPARAM2 CPUFUNC(op_b120_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* EOR.B Dn,(d16,An) */ void REGPARAM2 CPUFUNC(op_b128_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* EOR.B Dn,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_b130_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s8 dst = x_get_byte (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* EOR.B Dn,(xxx).W */ void REGPARAM2 CPUFUNC(op_b138_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* EOR.B Dn,(xxx).L */ void REGPARAM2 CPUFUNC(op_b139_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* EOR.W Dn,Dn */ void REGPARAM2 CPUFUNC(op_b140_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CMPM.W (An)+,(An)+ */ void REGPARAM2 CPUFUNC(op_b148_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) += 2; {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* EOR.W Dn,(An) */ void REGPARAM2 CPUFUNC(op_b150_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* EOR.W Dn,(An)+ */ void REGPARAM2 CPUFUNC(op_b158_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) += 2; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* EOR.W Dn,-(An) */ void REGPARAM2 CPUFUNC(op_b160_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) = dsta; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* EOR.W Dn,(d16,An) */ void REGPARAM2 CPUFUNC(op_b168_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 dst = x_get_word (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* EOR.W Dn,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_b170_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s16 dst = x_get_word (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* EOR.W Dn,(xxx).W */ void REGPARAM2 CPUFUNC(op_b178_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 dst = x_get_word (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* EOR.W Dn,(xxx).L */ void REGPARAM2 CPUFUNC(op_b179_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_ce020_prefetch (2); { uae_s16 dst = x_get_word (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* EOR.L Dn,Dn */ void REGPARAM2 CPUFUNC(op_b180_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CMPM.L (An)+,(An)+ */ void REGPARAM2 CPUFUNC(op_b188_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) += 4; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) += 4; {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* EOR.L Dn,(An) */ void REGPARAM2 CPUFUNC(op_b190_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* EOR.L Dn,(An)+ */ void REGPARAM2 CPUFUNC(op_b198_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) += 4; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* EOR.L Dn,-(An) */ void REGPARAM2 CPUFUNC(op_b1a0_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) = dsta; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* EOR.L Dn,(d16,An) */ void REGPARAM2 CPUFUNC(op_b1a8_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 dst = x_get_long (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* EOR.L Dn,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_b1b0_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s32 dst = x_get_long (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* EOR.L Dn,(xxx).W */ void REGPARAM2 CPUFUNC(op_b1b8_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 dst = x_get_long (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* EOR.L Dn,(xxx).L */ void REGPARAM2 CPUFUNC(op_b1b9_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_ce020_prefetch (2); { uae_s32 dst = x_get_long (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* CMPA.L Dn,An */ void REGPARAM2 CPUFUNC(op_b1c0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CMPA.L An,An */ void REGPARAM2 CPUFUNC(op_b1c8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CMPA.L (An),An */ void REGPARAM2 CPUFUNC(op_b1d0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CMPA.L (An)+,An */ void REGPARAM2 CPUFUNC(op_b1d8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) += 4; { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CMPA.L -(An),An */ void REGPARAM2 CPUFUNC(op_b1e0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CMPA.L (d16,An),An */ void REGPARAM2 CPUFUNC(op_b1e8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* CMPA.L (d8,An,Xn),An */ void REGPARAM2 CPUFUNC(op_b1f0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* CMPA.L (xxx).W,An */ void REGPARAM2 CPUFUNC(op_b1f8_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* CMPA.L (xxx).L,An */ void REGPARAM2 CPUFUNC(op_b1f9_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* CMPA.L (d16,PC),An */ void REGPARAM2 CPUFUNC(op_b1fa_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* CMPA.L (d8,PC,Xn),An */ void REGPARAM2 CPUFUNC(op_b1fb_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* CMPA.L #.L,An */ void REGPARAM2 CPUFUNC(op_b1fc_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* AND.B Dn,Dn */ void REGPARAM2 CPUFUNC(op_c000_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* AND.B (An),Dn */ void REGPARAM2 CPUFUNC(op_c010_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* AND.B (An)+,Dn */ void REGPARAM2 CPUFUNC(op_c018_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* AND.B -(An),Dn */ void REGPARAM2 CPUFUNC(op_c020_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* AND.B (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_c028_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* AND.B (d8,An,Xn),Dn */ void REGPARAM2 CPUFUNC(op_c030_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* AND.B (xxx).W,Dn */ void REGPARAM2 CPUFUNC(op_c038_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* AND.B (xxx).L,Dn */ void REGPARAM2 CPUFUNC(op_c039_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* AND.B (d16,PC),Dn */ void REGPARAM2 CPUFUNC(op_c03a_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* AND.B (d8,PC,Xn),Dn */ void REGPARAM2 CPUFUNC(op_c03b_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* AND.B #.B,Dn */ void REGPARAM2 CPUFUNC(op_c03c_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* AND.W Dn,Dn */ void REGPARAM2 CPUFUNC(op_c040_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* AND.W (An),Dn */ void REGPARAM2 CPUFUNC(op_c050_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* AND.W (An)+,Dn */ void REGPARAM2 CPUFUNC(op_c058_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* AND.W -(An),Dn */ void REGPARAM2 CPUFUNC(op_c060_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* AND.W (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_c068_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* AND.W (d8,An,Xn),Dn */ void REGPARAM2 CPUFUNC(op_c070_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* AND.W (xxx).W,Dn */ void REGPARAM2 CPUFUNC(op_c078_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* AND.W (xxx).L,Dn */ void REGPARAM2 CPUFUNC(op_c079_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* AND.W (d16,PC),Dn */ void REGPARAM2 CPUFUNC(op_c07a_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* AND.W (d8,PC,Xn),Dn */ void REGPARAM2 CPUFUNC(op_c07b_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* AND.W #.W,Dn */ void REGPARAM2 CPUFUNC(op_c07c_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* AND.L Dn,Dn */ void REGPARAM2 CPUFUNC(op_c080_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* AND.L (An),Dn */ void REGPARAM2 CPUFUNC(op_c090_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* AND.L (An)+,Dn */ void REGPARAM2 CPUFUNC(op_c098_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) += 4; { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* AND.L -(An),Dn */ void REGPARAM2 CPUFUNC(op_c0a0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* AND.L (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_c0a8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* AND.L (d8,An,Xn),Dn */ void REGPARAM2 CPUFUNC(op_c0b0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* AND.L (xxx).W,Dn */ void REGPARAM2 CPUFUNC(op_c0b8_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* AND.L (xxx).L,Dn */ void REGPARAM2 CPUFUNC(op_c0b9_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* AND.L (d16,PC),Dn */ void REGPARAM2 CPUFUNC(op_c0ba_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* AND.L (d8,PC,Xn),Dn */ void REGPARAM2 CPUFUNC(op_c0bb_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* AND.L #.L,Dn */ void REGPARAM2 CPUFUNC(op_c0bc_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* MULU.W Dn,Dn */ void REGPARAM2 CPUFUNC(op_c0c0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); regs.ce020memcycles += 20 * cpucycleunit; m68k_dreg (regs, dstreg) = (newv); m68k_incpc (2); }}}}return; } /* MULU.W (An),Dn */ void REGPARAM2 CPUFUNC(op_c0d0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); regs.ce020memcycles += 20 * cpucycleunit; m68k_dreg (regs, dstreg) = (newv); m68k_incpc (2); }}}}}return; } /* MULU.W (An)+,Dn */ void REGPARAM2 CPUFUNC(op_c0d8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); regs.ce020memcycles += 20 * cpucycleunit; m68k_dreg (regs, dstreg) = (newv); m68k_incpc (2); }}}}}return; } /* MULU.W -(An),Dn */ void REGPARAM2 CPUFUNC(op_c0e0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); regs.ce020memcycles += 20 * cpucycleunit; m68k_dreg (regs, dstreg) = (newv); m68k_incpc (2); }}}}}return; } /* MULU.W (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_c0e8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); regs.ce020memcycles += 20 * cpucycleunit; m68k_dreg (regs, dstreg) = (newv); m68k_incpc (4); }}}}}return; } /* MULU.W (d8,An,Xn),Dn */ void REGPARAM2 CPUFUNC(op_c0f0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); regs.ce020memcycles += 20 * cpucycleunit; m68k_dreg (regs, dstreg) = (newv); }}}}}}return; } /* MULU.W (xxx).W,Dn */ void REGPARAM2 CPUFUNC(op_c0f8_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); regs.ce020memcycles += 20 * cpucycleunit; m68k_dreg (regs, dstreg) = (newv); m68k_incpc (4); }}}}}return; } /* MULU.W (xxx).L,Dn */ void REGPARAM2 CPUFUNC(op_c0f9_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); regs.ce020memcycles += 20 * cpucycleunit; m68k_dreg (regs, dstreg) = (newv); m68k_incpc (6); }}}}}return; } /* MULU.W (d16,PC),Dn */ void REGPARAM2 CPUFUNC(op_c0fa_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); regs.ce020memcycles += 20 * cpucycleunit; m68k_dreg (regs, dstreg) = (newv); m68k_incpc (4); }}}}}return; } /* MULU.W (d8,PC,Xn),Dn */ void REGPARAM2 CPUFUNC(op_c0fb_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); regs.ce020memcycles += 20 * cpucycleunit; m68k_dreg (regs, dstreg) = (newv); }}}}}}return; } /* MULU.W #.W,Dn */ void REGPARAM2 CPUFUNC(op_c0fc_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); regs.ce020memcycles += 20 * cpucycleunit; m68k_dreg (regs, dstreg) = (newv); m68k_incpc (4); }}}}return; } /* ABCD.B Dn,Dn */ void REGPARAM2 CPUFUNC(op_c100_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); { uae_u16 newv_lo = (src & 0xF) + (dst & 0xF) + (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = (src & 0xF0) + (dst & 0xF0); uae_u16 newv, tmp_newv; int cflg; newv = tmp_newv = newv_hi + newv_lo; if (newv_lo > 9) { newv += 6; } cflg = (newv & 0x3F0) > 0x90; if (cflg) newv += 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); SET_VFLG ((tmp_newv & 0x80) == 0 && (newv & 0x80) != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ABCD.B -(An),-(An) */ void REGPARAM2 CPUFUNC(op_c108_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; { uae_u16 newv_lo = (src & 0xF) + (dst & 0xF) + (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = (src & 0xF0) + (dst & 0xF0); uae_u16 newv, tmp_newv; int cflg; newv = tmp_newv = newv_hi + newv_lo; if (newv_lo > 9) { newv += 6; } cflg = (newv & 0x3F0) > 0x90; if (cflg) newv += 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); SET_VFLG ((tmp_newv & 0x80) == 0 && (newv & 0x80) != 0); x_put_byte (dsta, newv); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* AND.B Dn,(An) */ void REGPARAM2 CPUFUNC(op_c110_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* AND.B Dn,(An)+ */ void REGPARAM2 CPUFUNC(op_c118_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* AND.B Dn,-(An) */ void REGPARAM2 CPUFUNC(op_c120_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* AND.B Dn,(d16,An) */ void REGPARAM2 CPUFUNC(op_c128_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* AND.B Dn,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_c130_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s8 dst = x_get_byte (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* AND.B Dn,(xxx).W */ void REGPARAM2 CPUFUNC(op_c138_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* AND.B Dn,(xxx).L */ void REGPARAM2 CPUFUNC(op_c139_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* EXG.L Dn,Dn */ void REGPARAM2 CPUFUNC(op_c140_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); m68k_dreg (regs, srcreg) = (dst); m68k_dreg (regs, dstreg) = (src); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* EXG.L An,An */ void REGPARAM2 CPUFUNC(op_c148_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); m68k_areg (regs, srcreg) = (dst); m68k_areg (regs, dstreg) = (src); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* AND.W Dn,(An) */ void REGPARAM2 CPUFUNC(op_c150_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* AND.W Dn,(An)+ */ void REGPARAM2 CPUFUNC(op_c158_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) += 2; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* AND.W Dn,-(An) */ void REGPARAM2 CPUFUNC(op_c160_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) = dsta; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* AND.W Dn,(d16,An) */ void REGPARAM2 CPUFUNC(op_c168_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 dst = x_get_word (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* AND.W Dn,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_c170_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s16 dst = x_get_word (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* AND.W Dn,(xxx).W */ void REGPARAM2 CPUFUNC(op_c178_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 dst = x_get_word (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* AND.W Dn,(xxx).L */ void REGPARAM2 CPUFUNC(op_c179_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_ce020_prefetch (2); { uae_s16 dst = x_get_word (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* EXG.L Dn,An */ void REGPARAM2 CPUFUNC(op_c188_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); m68k_dreg (regs, srcreg) = (dst); m68k_areg (regs, dstreg) = (src); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* AND.L Dn,(An) */ void REGPARAM2 CPUFUNC(op_c190_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* AND.L Dn,(An)+ */ void REGPARAM2 CPUFUNC(op_c198_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) += 4; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* AND.L Dn,-(An) */ void REGPARAM2 CPUFUNC(op_c1a0_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) = dsta; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* AND.L Dn,(d16,An) */ void REGPARAM2 CPUFUNC(op_c1a8_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 dst = x_get_long (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* AND.L Dn,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_c1b0_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s32 dst = x_get_long (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* AND.L Dn,(xxx).W */ void REGPARAM2 CPUFUNC(op_c1b8_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 dst = x_get_long (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* AND.L Dn,(xxx).L */ void REGPARAM2 CPUFUNC(op_c1b9_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_ce020_prefetch (2); { uae_s32 dst = x_get_long (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* MULS.W Dn,Dn */ void REGPARAM2 CPUFUNC(op_c1c0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); regs.ce020memcycles += 20 * cpucycleunit; m68k_dreg (regs, dstreg) = (newv); }}}} m68k_incpc (2); return; } /* MULS.W (An),Dn */ void REGPARAM2 CPUFUNC(op_c1d0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); regs.ce020memcycles += 20 * cpucycleunit; m68k_dreg (regs, dstreg) = (newv); }}}}} m68k_incpc (2); return; } /* MULS.W (An)+,Dn */ void REGPARAM2 CPUFUNC(op_c1d8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); regs.ce020memcycles += 20 * cpucycleunit; m68k_dreg (regs, dstreg) = (newv); }}}}} m68k_incpc (2); return; } /* MULS.W -(An),Dn */ void REGPARAM2 CPUFUNC(op_c1e0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); regs.ce020memcycles += 20 * cpucycleunit; m68k_dreg (regs, dstreg) = (newv); }}}}} m68k_incpc (2); return; } /* MULS.W (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_c1e8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); regs.ce020memcycles += 20 * cpucycleunit; m68k_dreg (regs, dstreg) = (newv); }}}}} m68k_incpc (4); return; } /* MULS.W (d8,An,Xn),Dn */ void REGPARAM2 CPUFUNC(op_c1f0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); regs.ce020memcycles += 20 * cpucycleunit; m68k_dreg (regs, dstreg) = (newv); }}}}}}return; } /* MULS.W (xxx).W,Dn */ void REGPARAM2 CPUFUNC(op_c1f8_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); regs.ce020memcycles += 20 * cpucycleunit; m68k_dreg (regs, dstreg) = (newv); }}}}} m68k_incpc (4); return; } /* MULS.W (xxx).L,Dn */ void REGPARAM2 CPUFUNC(op_c1f9_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); regs.ce020memcycles += 20 * cpucycleunit; m68k_dreg (regs, dstreg) = (newv); }}}}} m68k_incpc (6); return; } /* MULS.W (d16,PC),Dn */ void REGPARAM2 CPUFUNC(op_c1fa_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); regs.ce020memcycles += 20 * cpucycleunit; m68k_dreg (regs, dstreg) = (newv); }}}}} m68k_incpc (4); return; } /* MULS.W (d8,PC,Xn),Dn */ void REGPARAM2 CPUFUNC(op_c1fb_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); regs.ce020memcycles += 20 * cpucycleunit; m68k_dreg (regs, dstreg) = (newv); }}}}}}return; } /* MULS.W #.W,Dn */ void REGPARAM2 CPUFUNC(op_c1fc_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); regs.ce020memcycles += 20 * cpucycleunit; m68k_dreg (regs, dstreg) = (newv); }}}} m68k_incpc (4); return; } /* ADD.B Dn,Dn */ void REGPARAM2 CPUFUNC(op_d000_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADD.B (An),Dn */ void REGPARAM2 CPUFUNC(op_d010_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADD.B (An)+,Dn */ void REGPARAM2 CPUFUNC(op_d018_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADD.B -(An),Dn */ void REGPARAM2 CPUFUNC(op_d020_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADD.B (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_d028_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADD.B (d8,An,Xn),Dn */ void REGPARAM2 CPUFUNC(op_d030_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* ADD.B (xxx).W,Dn */ void REGPARAM2 CPUFUNC(op_d038_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADD.B (xxx).L,Dn */ void REGPARAM2 CPUFUNC(op_d039_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* ADD.B (d16,PC),Dn */ void REGPARAM2 CPUFUNC(op_d03a_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADD.B (d8,PC,Xn),Dn */ void REGPARAM2 CPUFUNC(op_d03b_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* ADD.B #.B,Dn */ void REGPARAM2 CPUFUNC(op_d03c_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADD.W Dn,Dn */ void REGPARAM2 CPUFUNC(op_d040_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADD.W An,Dn */ void REGPARAM2 CPUFUNC(op_d048_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADD.W (An),Dn */ void REGPARAM2 CPUFUNC(op_d050_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADD.W (An)+,Dn */ void REGPARAM2 CPUFUNC(op_d058_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADD.W -(An),Dn */ void REGPARAM2 CPUFUNC(op_d060_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADD.W (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_d068_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADD.W (d8,An,Xn),Dn */ void REGPARAM2 CPUFUNC(op_d070_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* ADD.W (xxx).W,Dn */ void REGPARAM2 CPUFUNC(op_d078_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADD.W (xxx).L,Dn */ void REGPARAM2 CPUFUNC(op_d079_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* ADD.W (d16,PC),Dn */ void REGPARAM2 CPUFUNC(op_d07a_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADD.W (d8,PC,Xn),Dn */ void REGPARAM2 CPUFUNC(op_d07b_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* ADD.W #.W,Dn */ void REGPARAM2 CPUFUNC(op_d07c_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADD.L Dn,Dn */ void REGPARAM2 CPUFUNC(op_d080_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADD.L An,Dn */ void REGPARAM2 CPUFUNC(op_d088_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADD.L (An),Dn */ void REGPARAM2 CPUFUNC(op_d090_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADD.L (An)+,Dn */ void REGPARAM2 CPUFUNC(op_d098_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) += 4; { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADD.L -(An),Dn */ void REGPARAM2 CPUFUNC(op_d0a0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADD.L (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_d0a8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADD.L (d8,An,Xn),Dn */ void REGPARAM2 CPUFUNC(op_d0b0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* ADD.L (xxx).W,Dn */ void REGPARAM2 CPUFUNC(op_d0b8_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADD.L (xxx).L,Dn */ void REGPARAM2 CPUFUNC(op_d0b9_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* ADD.L (d16,PC),Dn */ void REGPARAM2 CPUFUNC(op_d0ba_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADD.L (d8,PC,Xn),Dn */ void REGPARAM2 CPUFUNC(op_d0bb_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* ADD.L #.L,Dn */ void REGPARAM2 CPUFUNC(op_d0bc_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* ADDA.W Dn,An */ void REGPARAM2 CPUFUNC(op_d0c0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADDA.W An,An */ void REGPARAM2 CPUFUNC(op_d0c8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADDA.W (An),An */ void REGPARAM2 CPUFUNC(op_d0d0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADDA.W (An)+,An */ void REGPARAM2 CPUFUNC(op_d0d8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADDA.W -(An),An */ void REGPARAM2 CPUFUNC(op_d0e0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADDA.W (d16,An),An */ void REGPARAM2 CPUFUNC(op_d0e8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADDA.W (d8,An,Xn),An */ void REGPARAM2 CPUFUNC(op_d0f0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* ADDA.W (xxx).W,An */ void REGPARAM2 CPUFUNC(op_d0f8_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADDA.W (xxx).L,An */ void REGPARAM2 CPUFUNC(op_d0f9_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* ADDA.W (d16,PC),An */ void REGPARAM2 CPUFUNC(op_d0fa_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADDA.W (d8,PC,Xn),An */ void REGPARAM2 CPUFUNC(op_d0fb_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* ADDA.W #.W,An */ void REGPARAM2 CPUFUNC(op_d0fc_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADDX.B Dn,Dn */ void REGPARAM2 CPUFUNC(op_d100_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = dst + src + (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgo) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADDX.B -(An),-(An) */ void REGPARAM2 CPUFUNC(op_d108_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; { uae_u32 newv = dst + src + (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgo) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADD.B Dn,(An) */ void REGPARAM2 CPUFUNC(op_d110_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADD.B Dn,(An)+ */ void REGPARAM2 CPUFUNC(op_d118_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADD.B Dn,-(An) */ void REGPARAM2 CPUFUNC(op_d120_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADD.B Dn,(d16,An) */ void REGPARAM2 CPUFUNC(op_d128_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADD.B Dn,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_d130_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* ADD.B Dn,(xxx).W */ void REGPARAM2 CPUFUNC(op_d138_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADD.B Dn,(xxx).L */ void REGPARAM2 CPUFUNC(op_d139_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* ADDX.W Dn,Dn */ void REGPARAM2 CPUFUNC(op_d140_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = dst + src + (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgo) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADDX.W -(An),-(An) */ void REGPARAM2 CPUFUNC(op_d148_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) = dsta; { uae_u32 newv = dst + src + (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgo) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADD.W Dn,(An) */ void REGPARAM2 CPUFUNC(op_d150_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADD.W Dn,(An)+ */ void REGPARAM2 CPUFUNC(op_d158_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) += 2; {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADD.W Dn,-(An) */ void REGPARAM2 CPUFUNC(op_d160_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADD.W Dn,(d16,An) */ void REGPARAM2 CPUFUNC(op_d168_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADD.W Dn,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_d170_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* ADD.W Dn,(xxx).W */ void REGPARAM2 CPUFUNC(op_d178_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADD.W Dn,(xxx).L */ void REGPARAM2 CPUFUNC(op_d179_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_ce020_prefetch (2); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* ADDX.L Dn,Dn */ void REGPARAM2 CPUFUNC(op_d180_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = dst + src + (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgo) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADDX.L -(An),-(An) */ void REGPARAM2 CPUFUNC(op_d188_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) = dsta; { uae_u32 newv = dst + src + (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgo) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADD.L Dn,(An) */ void REGPARAM2 CPUFUNC(op_d190_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADD.L Dn,(An)+ */ void REGPARAM2 CPUFUNC(op_d198_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) += 4; {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADD.L Dn,-(An) */ void REGPARAM2 CPUFUNC(op_d1a0_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADD.L Dn,(d16,An) */ void REGPARAM2 CPUFUNC(op_d1a8_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADD.L Dn,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_d1b0_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* ADD.L Dn,(xxx).W */ void REGPARAM2 CPUFUNC(op_d1b8_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADD.L Dn,(xxx).L */ void REGPARAM2 CPUFUNC(op_d1b9_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_ce020_prefetch (2); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* ADDA.L Dn,An */ void REGPARAM2 CPUFUNC(op_d1c0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADDA.L An,An */ void REGPARAM2 CPUFUNC(op_d1c8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADDA.L (An),An */ void REGPARAM2 CPUFUNC(op_d1d0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADDA.L (An)+,An */ void REGPARAM2 CPUFUNC(op_d1d8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) += 4; { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADDA.L -(An),An */ void REGPARAM2 CPUFUNC(op_d1e0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADDA.L (d16,An),An */ void REGPARAM2 CPUFUNC(op_d1e8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADDA.L (d8,An,Xn),An */ void REGPARAM2 CPUFUNC(op_d1f0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* ADDA.L (xxx).W,An */ void REGPARAM2 CPUFUNC(op_d1f8_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADDA.L (xxx).L,An */ void REGPARAM2 CPUFUNC(op_d1f9_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* ADDA.L (d16,PC),An */ void REGPARAM2 CPUFUNC(op_d1fa_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADDA.L (d8,PC,Xn),An */ void REGPARAM2 CPUFUNC(op_d1fb_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* ADDA.L #.L,An */ void REGPARAM2 CPUFUNC(op_d1fc_21)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* ASRQ.B #,Dn */ void REGPARAM2 CPUFUNC(op_e000_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; uae_u32 sign = (0x80 & val) >> 7; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 8) { val = 0xff & (uae_u32)-sign; SET_CFLG (sign); COPY_CARRY (); } else { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; val |= (0xff << (8 - cnt)) & (uae_u32)-sign; val &= 0xff; } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* LSRQ.B #,Dn */ void REGPARAM2 CPUFUNC(op_e008_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 8) { SET_CFLG ((cnt == 8) & (val >> 7)); COPY_CARRY (); val = 0; } else { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ROXRQ.B #,Dn */ void REGPARAM2 CPUFUNC(op_e010_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { cnt--; { uae_u32 carry; uae_u32 hival = (val << 1) | GET_XFLG (); hival <<= (7 - cnt); val >>= cnt; carry = val & 1; val >>= 1; val |= hival; SET_XFLG (carry); val &= 0xff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* RORQ.B #,Dn */ void REGPARAM2 CPUFUNC(op_e018_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { uae_u32 hival; cnt &= 7; hival = val << (8 - cnt); val >>= cnt; val |= hival; val &= 0xff; SET_CFLG ((val & 0x80) >> 7); } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ASR.B Dn,Dn */ void REGPARAM2 CPUFUNC(op_e020_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 cnt = m68k_dreg (regs, srcreg); { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; uae_u32 sign = (0x80 & val) >> 7; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 8) { val = 0xff & (uae_u32)-sign; SET_CFLG (sign); COPY_CARRY (); } else if (cnt > 0) { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; val |= (0xff << (8 - cnt)) & (uae_u32)-sign; val &= 0xff; } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* LSR.B Dn,Dn */ void REGPARAM2 CPUFUNC(op_e028_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 cnt = m68k_dreg (regs, srcreg); { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 8) { SET_CFLG ((cnt == 8) & (val >> 7)); COPY_CARRY (); val = 0; } else if (cnt > 0) { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ROXR.B Dn,Dn */ void REGPARAM2 CPUFUNC(op_e030_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 cnt = m68k_dreg (regs, srcreg); { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 36) cnt -= 36; if (cnt >= 18) cnt -= 18; if (cnt >= 9) cnt -= 9; if (cnt > 0) { cnt--; { uae_u32 carry; uae_u32 hival = (val << 1) | GET_XFLG (); hival <<= (7 - cnt); val >>= cnt; carry = val & 1; val >>= 1; val |= hival; SET_XFLG (carry); val &= 0xff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } #endif #ifdef PART_8 /* ROR.B Dn,Dn */ void REGPARAM2 CPUFUNC(op_e038_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 cnt = m68k_dreg (regs, srcreg); { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt > 0) { uae_u32 hival; cnt &= 7; hival = val << (8 - cnt); val >>= cnt; val |= hival; val &= 0xff; SET_CFLG ((val & 0x80) >> 7); } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ASRQ.W #,Dn */ void REGPARAM2 CPUFUNC(op_e040_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; uae_u32 sign = (0x8000 & val) >> 15; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 16) { val = 0xffff & (uae_u32)-sign; SET_CFLG (sign); COPY_CARRY (); } else { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; val |= (0xffff << (16 - cnt)) & (uae_u32)-sign; val &= 0xffff; } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* LSRQ.W #,Dn */ void REGPARAM2 CPUFUNC(op_e048_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 16) { SET_CFLG ((cnt == 16) & (val >> 15)); COPY_CARRY (); val = 0; } else { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ROXRQ.W #,Dn */ void REGPARAM2 CPUFUNC(op_e050_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { cnt--; { uae_u32 carry; uae_u32 hival = (val << 1) | GET_XFLG (); hival <<= (15 - cnt); val >>= cnt; carry = val & 1; val >>= 1; val |= hival; SET_XFLG (carry); val &= 0xffff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* RORQ.W #,Dn */ void REGPARAM2 CPUFUNC(op_e058_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { uae_u32 hival; cnt &= 15; hival = val << (16 - cnt); val >>= cnt; val |= hival; val &= 0xffff; SET_CFLG ((val & 0x8000) >> 15); } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ASR.W Dn,Dn */ void REGPARAM2 CPUFUNC(op_e060_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 cnt = m68k_dreg (regs, srcreg); { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; uae_u32 sign = (0x8000 & val) >> 15; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 16) { val = 0xffff & (uae_u32)-sign; SET_CFLG (sign); COPY_CARRY (); } else if (cnt > 0) { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; val |= (0xffff << (16 - cnt)) & (uae_u32)-sign; val &= 0xffff; } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* LSR.W Dn,Dn */ void REGPARAM2 CPUFUNC(op_e068_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 cnt = m68k_dreg (regs, srcreg); { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 16) { SET_CFLG ((cnt == 16) & (val >> 15)); COPY_CARRY (); val = 0; } else if (cnt > 0) { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ROXR.W Dn,Dn */ void REGPARAM2 CPUFUNC(op_e070_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 cnt = m68k_dreg (regs, srcreg); { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 34) cnt -= 34; if (cnt >= 17) cnt -= 17; if (cnt > 0) { cnt--; { uae_u32 carry; uae_u32 hival = (val << 1) | GET_XFLG (); hival <<= (15 - cnt); val >>= cnt; carry = val & 1; val >>= 1; val |= hival; SET_XFLG (carry); val &= 0xffff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ROR.W Dn,Dn */ void REGPARAM2 CPUFUNC(op_e078_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 cnt = m68k_dreg (regs, srcreg); { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt > 0) { uae_u32 hival; cnt &= 15; hival = val << (16 - cnt); val >>= cnt; val |= hival; val &= 0xffff; SET_CFLG ((val & 0x8000) >> 15); } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ASRQ.L #,Dn */ void REGPARAM2 CPUFUNC(op_e080_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; uae_u32 sign = (0x80000000 & val) >> 31; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 32) { val = 0xffffffff & (uae_u32)-sign; SET_CFLG (sign); COPY_CARRY (); } else { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; val |= (0xffffffff << (32 - cnt)) & (uae_u32)-sign; val &= 0xffffffff; } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* LSRQ.L #,Dn */ void REGPARAM2 CPUFUNC(op_e088_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 32) { SET_CFLG ((cnt == 32) & (val >> 31)); COPY_CARRY (); val = 0; } else { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ROXRQ.L #,Dn */ void REGPARAM2 CPUFUNC(op_e090_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { cnt--; { uae_u32 carry; uae_u32 hival = (val << 1) | GET_XFLG (); hival <<= (31 - cnt); val >>= cnt; carry = val & 1; val >>= 1; val |= hival; SET_XFLG (carry); val &= 0xffffffff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* RORQ.L #,Dn */ void REGPARAM2 CPUFUNC(op_e098_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { uae_u32 hival; cnt &= 31; hival = val << (32 - cnt); val >>= cnt; val |= hival; val &= 0xffffffff; SET_CFLG ((val & 0x80000000) >> 31); } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ASR.L Dn,Dn */ void REGPARAM2 CPUFUNC(op_e0a0_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 cnt = m68k_dreg (regs, srcreg); { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; uae_u32 sign = (0x80000000 & val) >> 31; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 32) { val = 0xffffffff & (uae_u32)-sign; SET_CFLG (sign); COPY_CARRY (); } else if (cnt > 0) { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; val |= (0xffffffff << (32 - cnt)) & (uae_u32)-sign; val &= 0xffffffff; } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* LSR.L Dn,Dn */ void REGPARAM2 CPUFUNC(op_e0a8_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 cnt = m68k_dreg (regs, srcreg); { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 32) { SET_CFLG ((cnt == 32) & (val >> 31)); COPY_CARRY (); val = 0; } else if (cnt > 0) { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ROXR.L Dn,Dn */ void REGPARAM2 CPUFUNC(op_e0b0_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 cnt = m68k_dreg (regs, srcreg); { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 33) cnt -= 33; if (cnt > 0) { cnt--; { uae_u32 carry; uae_u32 hival = (val << 1) | GET_XFLG (); hival <<= (31 - cnt); val >>= cnt; carry = val & 1; val >>= 1; val |= hival; SET_XFLG (carry); val &= 0xffffffff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ROR.L Dn,Dn */ void REGPARAM2 CPUFUNC(op_e0b8_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 cnt = m68k_dreg (regs, srcreg); { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt > 0) { uae_u32 hival; cnt &= 31; hival = val << (32 - cnt); val >>= cnt; val |= hival; val &= 0xffffffff; SET_CFLG ((val & 0x80000000) >> 31); } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ASRW.W (An) */ void REGPARAM2 CPUFUNC(op_e0d0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = x_get_word (dataa); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 cflg = val & 1; val = (val >> 1) | sign; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (cflg); COPY_CARRY (); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ASRW.W (An)+ */ void REGPARAM2 CPUFUNC(op_e0d8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = x_get_word (dataa); m68k_areg (regs, srcreg) += 2; { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 cflg = val & 1; val = (val >> 1) | sign; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (cflg); COPY_CARRY (); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ASRW.W -(An) */ void REGPARAM2 CPUFUNC(op_e0e0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; dataa = m68k_areg (regs, srcreg) - 2; { uae_s16 data = x_get_word (dataa); m68k_areg (regs, srcreg) = dataa; { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 cflg = val & 1; val = (val >> 1) | sign; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (cflg); COPY_CARRY (); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ASRW.W (d16,An) */ void REGPARAM2 CPUFUNC(op_e0e8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 data = x_get_word (dataa); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 cflg = val & 1; val = (val >> 1) | sign; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (cflg); COPY_CARRY (); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ASRW.W (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_e0f0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; m68k_incpc (2); { dataa = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s16 data = x_get_word (dataa); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 cflg = val & 1; val = (val >> 1) | sign; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (cflg); COPY_CARRY (); x_put_word (dataa, val); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* ASRW.W (xxx).W */ void REGPARAM2 CPUFUNC(op_e0f8_21)(uae_u32 opcode) { {{ uaecptr dataa = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 data = x_get_word (dataa); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 cflg = val & 1; val = (val >> 1) | sign; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (cflg); COPY_CARRY (); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ASRW.W (xxx).L */ void REGPARAM2 CPUFUNC(op_e0f9_21)(uae_u32 opcode) { {{ uaecptr dataa = get_long_ce020_prefetch (2); { uae_s16 data = x_get_word (dataa); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 cflg = val & 1; val = (val >> 1) | sign; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (cflg); COPY_CARRY (); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* ASLQ.B #,Dn */ void REGPARAM2 CPUFUNC(op_e100_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 8) { SET_VFLG (val != 0); SET_CFLG (cnt == 8 ? val & 1 : 0); COPY_CARRY (); val = 0; } else { uae_u32 mask = (0xff << (7 - cnt)) & 0xff; SET_VFLG ((val & mask) != mask && (val & mask) != 0); val <<= cnt - 1; SET_CFLG ((val & 0x80) >> 7); COPY_CARRY (); val <<= 1; val &= 0xff; } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* LSLQ.B #,Dn */ void REGPARAM2 CPUFUNC(op_e108_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 8) { SET_CFLG (cnt == 8 ? val & 1 : 0); COPY_CARRY (); val = 0; } else { val <<= (cnt - 1); SET_CFLG ((val & 0x80) >> 7); COPY_CARRY (); val <<= 1; val &= 0xff; } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ROXLQ.B #,Dn */ void REGPARAM2 CPUFUNC(op_e110_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { cnt--; { uae_u32 carry; uae_u32 loval = val >> (7 - cnt); carry = loval & 1; val = (((val << 1) | GET_XFLG ()) << cnt) | (loval >> 1); SET_XFLG (carry); val &= 0xff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ROLQ.B #,Dn */ void REGPARAM2 CPUFUNC(op_e118_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { uae_u32 loval; cnt &= 7; loval = val >> (8 - cnt); val <<= cnt; val |= loval; val &= 0xff; SET_CFLG (val & 1); } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ASL.B Dn,Dn */ void REGPARAM2 CPUFUNC(op_e120_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 cnt = m68k_dreg (regs, srcreg); { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 8) { SET_VFLG (val != 0); SET_CFLG (cnt == 8 ? val & 1 : 0); COPY_CARRY (); val = 0; } else if (cnt > 0) { uae_u32 mask = (0xff << (7 - cnt)) & 0xff; SET_VFLG ((val & mask) != mask && (val & mask) != 0); val <<= cnt - 1; SET_CFLG ((val & 0x80) >> 7); COPY_CARRY (); val <<= 1; val &= 0xff; } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* LSL.B Dn,Dn */ void REGPARAM2 CPUFUNC(op_e128_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 cnt = m68k_dreg (regs, srcreg); { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 8) { SET_CFLG (cnt == 8 ? val & 1 : 0); COPY_CARRY (); val = 0; } else if (cnt > 0) { val <<= (cnt - 1); SET_CFLG ((val & 0x80) >> 7); COPY_CARRY (); val <<= 1; val &= 0xff; } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ROXL.B Dn,Dn */ void REGPARAM2 CPUFUNC(op_e130_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 cnt = m68k_dreg (regs, srcreg); { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 36) cnt -= 36; if (cnt >= 18) cnt -= 18; if (cnt >= 9) cnt -= 9; if (cnt > 0) { cnt--; { uae_u32 carry; uae_u32 loval = val >> (7 - cnt); carry = loval & 1; val = (((val << 1) | GET_XFLG ()) << cnt) | (loval >> 1); SET_XFLG (carry); val &= 0xff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ROL.B Dn,Dn */ void REGPARAM2 CPUFUNC(op_e138_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 cnt = m68k_dreg (regs, srcreg); { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt > 0) { uae_u32 loval; cnt &= 7; loval = val >> (8 - cnt); val <<= cnt; val |= loval; val &= 0xff; SET_CFLG (val & 1); } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ASLQ.W #,Dn */ void REGPARAM2 CPUFUNC(op_e140_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 16) { SET_VFLG (val != 0); SET_CFLG (cnt == 16 ? val & 1 : 0); COPY_CARRY (); val = 0; } else { uae_u32 mask = (0xffff << (15 - cnt)) & 0xffff; SET_VFLG ((val & mask) != mask && (val & mask) != 0); val <<= cnt - 1; SET_CFLG ((val & 0x8000) >> 15); COPY_CARRY (); val <<= 1; val &= 0xffff; } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* LSLQ.W #,Dn */ void REGPARAM2 CPUFUNC(op_e148_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 16) { SET_CFLG (cnt == 16 ? val & 1 : 0); COPY_CARRY (); val = 0; } else { val <<= (cnt - 1); SET_CFLG ((val & 0x8000) >> 15); COPY_CARRY (); val <<= 1; val &= 0xffff; } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ROXLQ.W #,Dn */ void REGPARAM2 CPUFUNC(op_e150_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { cnt--; { uae_u32 carry; uae_u32 loval = val >> (15 - cnt); carry = loval & 1; val = (((val << 1) | GET_XFLG ()) << cnt) | (loval >> 1); SET_XFLG (carry); val &= 0xffff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ROLQ.W #,Dn */ void REGPARAM2 CPUFUNC(op_e158_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { uae_u32 loval; cnt &= 15; loval = val >> (16 - cnt); val <<= cnt; val |= loval; val &= 0xffff; SET_CFLG (val & 1); } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ASL.W Dn,Dn */ void REGPARAM2 CPUFUNC(op_e160_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 cnt = m68k_dreg (regs, srcreg); { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 16) { SET_VFLG (val != 0); SET_CFLG (cnt == 16 ? val & 1 : 0); COPY_CARRY (); val = 0; } else if (cnt > 0) { uae_u32 mask = (0xffff << (15 - cnt)) & 0xffff; SET_VFLG ((val & mask) != mask && (val & mask) != 0); val <<= cnt - 1; SET_CFLG ((val & 0x8000) >> 15); COPY_CARRY (); val <<= 1; val &= 0xffff; } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* LSL.W Dn,Dn */ void REGPARAM2 CPUFUNC(op_e168_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 cnt = m68k_dreg (regs, srcreg); { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 16) { SET_CFLG (cnt == 16 ? val & 1 : 0); COPY_CARRY (); val = 0; } else if (cnt > 0) { val <<= (cnt - 1); SET_CFLG ((val & 0x8000) >> 15); COPY_CARRY (); val <<= 1; val &= 0xffff; } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ROXL.W Dn,Dn */ void REGPARAM2 CPUFUNC(op_e170_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 cnt = m68k_dreg (regs, srcreg); { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 34) cnt -= 34; if (cnt >= 17) cnt -= 17; if (cnt > 0) { cnt--; { uae_u32 carry; uae_u32 loval = val >> (15 - cnt); carry = loval & 1; val = (((val << 1) | GET_XFLG ()) << cnt) | (loval >> 1); SET_XFLG (carry); val &= 0xffff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ROL.W Dn,Dn */ void REGPARAM2 CPUFUNC(op_e178_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 cnt = m68k_dreg (regs, srcreg); { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt > 0) { uae_u32 loval; cnt &= 15; loval = val >> (16 - cnt); val <<= cnt; val |= loval; val &= 0xffff; SET_CFLG (val & 1); } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ASLQ.L #,Dn */ void REGPARAM2 CPUFUNC(op_e180_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 32) { SET_VFLG (val != 0); SET_CFLG (cnt == 32 ? val & 1 : 0); COPY_CARRY (); val = 0; } else { uae_u32 mask = (0xffffffff << (31 - cnt)) & 0xffffffff; SET_VFLG ((val & mask) != mask && (val & mask) != 0); val <<= cnt - 1; SET_CFLG ((val & 0x80000000) >> 31); COPY_CARRY (); val <<= 1; val &= 0xffffffff; } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* LSLQ.L #,Dn */ void REGPARAM2 CPUFUNC(op_e188_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 32) { SET_CFLG (cnt == 32 ? val & 1 : 0); COPY_CARRY (); val = 0; } else { val <<= (cnt - 1); SET_CFLG ((val & 0x80000000) >> 31); COPY_CARRY (); val <<= 1; val &= 0xffffffff; } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ROXLQ.L #,Dn */ void REGPARAM2 CPUFUNC(op_e190_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { cnt--; { uae_u32 carry; uae_u32 loval = val >> (31 - cnt); carry = loval & 1; val = (((val << 1) | GET_XFLG ()) << cnt) | (loval >> 1); SET_XFLG (carry); val &= 0xffffffff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ROLQ.L #,Dn */ void REGPARAM2 CPUFUNC(op_e198_21)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { uae_u32 loval; cnt &= 31; loval = val >> (32 - cnt); val <<= cnt; val |= loval; val &= 0xffffffff; SET_CFLG (val & 1); } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ASL.L Dn,Dn */ void REGPARAM2 CPUFUNC(op_e1a0_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 cnt = m68k_dreg (regs, srcreg); { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 32) { SET_VFLG (val != 0); SET_CFLG (cnt == 32 ? val & 1 : 0); COPY_CARRY (); val = 0; } else if (cnt > 0) { uae_u32 mask = (0xffffffff << (31 - cnt)) & 0xffffffff; SET_VFLG ((val & mask) != mask && (val & mask) != 0); val <<= cnt - 1; SET_CFLG ((val & 0x80000000) >> 31); COPY_CARRY (); val <<= 1; val &= 0xffffffff; } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* LSL.L Dn,Dn */ void REGPARAM2 CPUFUNC(op_e1a8_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 cnt = m68k_dreg (regs, srcreg); { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 32) { SET_CFLG (cnt == 32 ? val & 1 : 0); COPY_CARRY (); val = 0; } else if (cnt > 0) { val <<= (cnt - 1); SET_CFLG ((val & 0x80000000) >> 31); COPY_CARRY (); val <<= 1; val &= 0xffffffff; } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ROXL.L Dn,Dn */ void REGPARAM2 CPUFUNC(op_e1b0_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 cnt = m68k_dreg (regs, srcreg); { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 33) cnt -= 33; if (cnt > 0) { cnt--; { uae_u32 carry; uae_u32 loval = val >> (31 - cnt); carry = loval & 1; val = (((val << 1) | GET_XFLG ()) << cnt) | (loval >> 1); SET_XFLG (carry); val &= 0xffffffff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ROL.L Dn,Dn */ void REGPARAM2 CPUFUNC(op_e1b8_21)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 cnt = m68k_dreg (regs, srcreg); { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt > 0) { uae_u32 loval; cnt &= 31; loval = val >> (32 - cnt); val <<= cnt; val |= loval; val &= 0xffffffff; SET_CFLG (val & 1); } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ASLW.W (An) */ void REGPARAM2 CPUFUNC(op_e1d0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = x_get_word (dataa); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 sign2; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); sign2 = 0x8000 & val; SET_CFLG (sign != 0); COPY_CARRY (); SET_VFLG (GET_VFLG () | (sign2 != sign)); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ASLW.W (An)+ */ void REGPARAM2 CPUFUNC(op_e1d8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = x_get_word (dataa); m68k_areg (regs, srcreg) += 2; { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 sign2; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); sign2 = 0x8000 & val; SET_CFLG (sign != 0); COPY_CARRY (); SET_VFLG (GET_VFLG () | (sign2 != sign)); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ASLW.W -(An) */ void REGPARAM2 CPUFUNC(op_e1e0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; dataa = m68k_areg (regs, srcreg) - 2; { uae_s16 data = x_get_word (dataa); m68k_areg (regs, srcreg) = dataa; { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 sign2; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); sign2 = 0x8000 & val; SET_CFLG (sign != 0); COPY_CARRY (); SET_VFLG (GET_VFLG () | (sign2 != sign)); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ASLW.W (d16,An) */ void REGPARAM2 CPUFUNC(op_e1e8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 data = x_get_word (dataa); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 sign2; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); sign2 = 0x8000 & val; SET_CFLG (sign != 0); COPY_CARRY (); SET_VFLG (GET_VFLG () | (sign2 != sign)); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ASLW.W (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_e1f0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; m68k_incpc (2); { dataa = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s16 data = x_get_word (dataa); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 sign2; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); sign2 = 0x8000 & val; SET_CFLG (sign != 0); COPY_CARRY (); SET_VFLG (GET_VFLG () | (sign2 != sign)); x_put_word (dataa, val); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* ASLW.W (xxx).W */ void REGPARAM2 CPUFUNC(op_e1f8_21)(uae_u32 opcode) { {{ uaecptr dataa = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 data = x_get_word (dataa); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 sign2; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); sign2 = 0x8000 & val; SET_CFLG (sign != 0); COPY_CARRY (); SET_VFLG (GET_VFLG () | (sign2 != sign)); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ASLW.W (xxx).L */ void REGPARAM2 CPUFUNC(op_e1f9_21)(uae_u32 opcode) { {{ uaecptr dataa = get_long_ce020_prefetch (2); { uae_s16 data = x_get_word (dataa); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 sign2; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); sign2 = 0x8000 & val; SET_CFLG (sign != 0); COPY_CARRY (); SET_VFLG (GET_VFLG () | (sign2 != sign)); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* LSRW.W (An) */ void REGPARAM2 CPUFUNC(op_e2d0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = x_get_word (dataa); { uae_u32 val = (uae_u16)data; uae_u32 carry = val & 1; val >>= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* LSRW.W (An)+ */ void REGPARAM2 CPUFUNC(op_e2d8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = x_get_word (dataa); m68k_areg (regs, srcreg) += 2; { uae_u32 val = (uae_u16)data; uae_u32 carry = val & 1; val >>= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* LSRW.W -(An) */ void REGPARAM2 CPUFUNC(op_e2e0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; dataa = m68k_areg (regs, srcreg) - 2; { uae_s16 data = x_get_word (dataa); m68k_areg (regs, srcreg) = dataa; { uae_u32 val = (uae_u16)data; uae_u32 carry = val & 1; val >>= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* LSRW.W (d16,An) */ void REGPARAM2 CPUFUNC(op_e2e8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 data = x_get_word (dataa); { uae_u32 val = (uae_u16)data; uae_u32 carry = val & 1; val >>= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* LSRW.W (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_e2f0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; m68k_incpc (2); { dataa = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s16 data = x_get_word (dataa); { uae_u32 val = (uae_u16)data; uae_u32 carry = val & 1; val >>= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); x_put_word (dataa, val); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* LSRW.W (xxx).W */ void REGPARAM2 CPUFUNC(op_e2f8_21)(uae_u32 opcode) { {{ uaecptr dataa = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 data = x_get_word (dataa); { uae_u32 val = (uae_u16)data; uae_u32 carry = val & 1; val >>= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* LSRW.W (xxx).L */ void REGPARAM2 CPUFUNC(op_e2f9_21)(uae_u32 opcode) { {{ uaecptr dataa = get_long_ce020_prefetch (2); { uae_s16 data = x_get_word (dataa); { uae_u32 val = (uae_u16)data; uae_u32 carry = val & 1; val >>= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* LSLW.W (An) */ void REGPARAM2 CPUFUNC(op_e3d0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* LSLW.W (An)+ */ void REGPARAM2 CPUFUNC(op_e3d8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = x_get_word (dataa); m68k_areg (regs, srcreg) += 2; { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* LSLW.W -(An) */ void REGPARAM2 CPUFUNC(op_e3e0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; dataa = m68k_areg (regs, srcreg) - 2; { uae_s16 data = x_get_word (dataa); m68k_areg (regs, srcreg) = dataa; { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* LSLW.W (d16,An) */ void REGPARAM2 CPUFUNC(op_e3e8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* LSLW.W (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_e3f0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; m68k_incpc (2); { dataa = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); x_put_word (dataa, val); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* LSLW.W (xxx).W */ void REGPARAM2 CPUFUNC(op_e3f8_21)(uae_u32 opcode) { {{ uaecptr dataa = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* LSLW.W (xxx).L */ void REGPARAM2 CPUFUNC(op_e3f9_21)(uae_u32 opcode) { {{ uaecptr dataa = get_long_ce020_prefetch (2); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* ROXRW.W (An) */ void REGPARAM2 CPUFUNC(op_e4d0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (GET_XFLG ()) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ROXRW.W (An)+ */ void REGPARAM2 CPUFUNC(op_e4d8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = x_get_word (dataa); m68k_areg (regs, srcreg) += 2; { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (GET_XFLG ()) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ROXRW.W -(An) */ void REGPARAM2 CPUFUNC(op_e4e0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; dataa = m68k_areg (regs, srcreg) - 2; { uae_s16 data = x_get_word (dataa); m68k_areg (regs, srcreg) = dataa; { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (GET_XFLG ()) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ROXRW.W (d16,An) */ void REGPARAM2 CPUFUNC(op_e4e8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (GET_XFLG ()) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ROXRW.W (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_e4f0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; m68k_incpc (2); { dataa = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (GET_XFLG ()) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); x_put_word (dataa, val); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* ROXRW.W (xxx).W */ void REGPARAM2 CPUFUNC(op_e4f8_21)(uae_u32 opcode) { {{ uaecptr dataa = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (GET_XFLG ()) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ROXRW.W (xxx).L */ void REGPARAM2 CPUFUNC(op_e4f9_21)(uae_u32 opcode) { {{ uaecptr dataa = get_long_ce020_prefetch (2); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (GET_XFLG ()) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* ROXLW.W (An) */ void REGPARAM2 CPUFUNC(op_e5d0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (GET_XFLG ()) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ROXLW.W (An)+ */ void REGPARAM2 CPUFUNC(op_e5d8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = x_get_word (dataa); m68k_areg (regs, srcreg) += 2; { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (GET_XFLG ()) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ROXLW.W -(An) */ void REGPARAM2 CPUFUNC(op_e5e0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; dataa = m68k_areg (regs, srcreg) - 2; { uae_s16 data = x_get_word (dataa); m68k_areg (regs, srcreg) = dataa; { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (GET_XFLG ()) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ROXLW.W (d16,An) */ void REGPARAM2 CPUFUNC(op_e5e8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (GET_XFLG ()) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ROXLW.W (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_e5f0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; m68k_incpc (2); { dataa = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (GET_XFLG ()) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); x_put_word (dataa, val); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* ROXLW.W (xxx).W */ void REGPARAM2 CPUFUNC(op_e5f8_21)(uae_u32 opcode) { {{ uaecptr dataa = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (GET_XFLG ()) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ROXLW.W (xxx).L */ void REGPARAM2 CPUFUNC(op_e5f9_21)(uae_u32 opcode) { {{ uaecptr dataa = get_long_ce020_prefetch (2); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (GET_XFLG ()) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* RORW.W (An) */ void REGPARAM2 CPUFUNC(op_e6d0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (carry) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* RORW.W (An)+ */ void REGPARAM2 CPUFUNC(op_e6d8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = x_get_word (dataa); m68k_areg (regs, srcreg) += 2; { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (carry) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* RORW.W -(An) */ void REGPARAM2 CPUFUNC(op_e6e0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; dataa = m68k_areg (regs, srcreg) - 2; { uae_s16 data = x_get_word (dataa); m68k_areg (regs, srcreg) = dataa; { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (carry) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* RORW.W (d16,An) */ void REGPARAM2 CPUFUNC(op_e6e8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (carry) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* RORW.W (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_e6f0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; m68k_incpc (2); { dataa = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (carry) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); x_put_word (dataa, val); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* RORW.W (xxx).W */ void REGPARAM2 CPUFUNC(op_e6f8_21)(uae_u32 opcode) { {{ uaecptr dataa = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (carry) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* RORW.W (xxx).L */ void REGPARAM2 CPUFUNC(op_e6f9_21)(uae_u32 opcode) { {{ uaecptr dataa = get_long_ce020_prefetch (2); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (carry) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* ROLW.W (An) */ void REGPARAM2 CPUFUNC(op_e7d0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (carry) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ROLW.W (An)+ */ void REGPARAM2 CPUFUNC(op_e7d8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = x_get_word (dataa); m68k_areg (regs, srcreg) += 2; { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (carry) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ROLW.W -(An) */ void REGPARAM2 CPUFUNC(op_e7e0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; dataa = m68k_areg (regs, srcreg) - 2; { uae_s16 data = x_get_word (dataa); m68k_areg (regs, srcreg) = dataa; { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (carry) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ROLW.W (d16,An) */ void REGPARAM2 CPUFUNC(op_e7e8_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (carry) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ROLW.W (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_e7f0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; m68k_incpc (2); { dataa = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (carry) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); x_put_word (dataa, val); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* ROLW.W (xxx).W */ void REGPARAM2 CPUFUNC(op_e7f8_21)(uae_u32 opcode) { {{ uaecptr dataa = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (carry) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ROLW.W (xxx).L */ void REGPARAM2 CPUFUNC(op_e7f9_21)(uae_u32 opcode) { {{ uaecptr dataa = get_long_ce020_prefetch (2); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (carry) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* BFTST.L #.W,Dn */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_e8c0_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); {{ uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp = m68k_dreg(regs, dstreg); offset &= 0x1f; tmp = (tmp << offset) | (tmp >> (32 - offset)); bdata[0] = tmp & ((1 << (32 - width)) - 1); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } #endif /* BFTST.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_e8d0_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } #endif /* BFTST.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_e8e8_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } #endif /* BFTST.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_e8f0_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* BFTST.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_e8f8_21)(uae_u32 opcode) { {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } #endif /* BFTST.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_e8f9_21)(uae_u32 opcode) { {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } #endif /* BFTST.L #.W,(d16,PC) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_e8fa_21)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } #endif /* BFTST.L #.W,(d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_e8fb_21)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr tmppc; uaecptr dsta; m68k_incpc (4); { tmppc = m68k_getpc (); dsta = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* BFEXTU.L #.W,Dn */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_e9c0_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); {{ uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp = m68k_dreg(regs, dstreg); offset &= 0x1f; tmp = (tmp << offset) | (tmp >> (32 - offset)); bdata[0] = tmp & ((1 << (32 - width)) - 1); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } #endif /* BFEXTU.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_e9d0_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } #endif /* BFEXTU.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_e9e8_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } #endif /* BFEXTU.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_e9f0_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* BFEXTU.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_e9f8_21)(uae_u32 opcode) { {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } #endif /* BFEXTU.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_e9f9_21)(uae_u32 opcode) { {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } #endif /* BFEXTU.L #.W,(d16,PC) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_e9fa_21)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } #endif /* BFEXTU.L #.W,(d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_e9fb_21)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr tmppc; uaecptr dsta; m68k_incpc (4); { tmppc = m68k_getpc (); dsta = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* BFCHG.L #.W,Dn */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_eac0_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); {{ uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp = m68k_dreg(regs, dstreg); offset &= 0x1f; tmp = (tmp << offset) | (tmp >> (32 - offset)); bdata[0] = tmp & ((1 << (32 - width)) - 1); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = tmp ^ (0xffffffffu >> (32 - width)); tmp = bdata[0] | (tmp << (32 - width)); m68k_dreg(regs, dstreg) = (tmp >> offset) | (tmp << (32 - offset)); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } #endif /* BFCHG.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_ead0_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = tmp ^ (0xffffffffu >> (32 - width)); x_put_bitfield(dsta, bdata, tmp, offset, width); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } #endif /* BFCHG.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_eae8_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = tmp ^ (0xffffffffu >> (32 - width)); x_put_bitfield(dsta, bdata, tmp, offset, width); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } #endif /* BFCHG.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_eaf0_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = tmp ^ (0xffffffffu >> (32 - width)); x_put_bitfield(dsta, bdata, tmp, offset, width); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* BFCHG.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_eaf8_21)(uae_u32 opcode) { {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = tmp ^ (0xffffffffu >> (32 - width)); x_put_bitfield(dsta, bdata, tmp, offset, width); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } #endif /* BFCHG.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_eaf9_21)(uae_u32 opcode) { {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = tmp ^ (0xffffffffu >> (32 - width)); x_put_bitfield(dsta, bdata, tmp, offset, width); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } #endif /* BFEXTS.L #.W,Dn */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_ebc0_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); {{ uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp = m68k_dreg(regs, dstreg); offset &= 0x1f; tmp = (tmp << offset) | (tmp >> (32 - offset)); bdata[0] = tmp & ((1 << (32 - width)) - 1); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp = (uae_s32)tmp >> (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } #endif /* BFEXTS.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_ebd0_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp = (uae_s32)tmp >> (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } #endif /* BFEXTS.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_ebe8_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp = (uae_s32)tmp >> (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } #endif /* BFEXTS.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_ebf0_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp = (uae_s32)tmp >> (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* BFEXTS.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_ebf8_21)(uae_u32 opcode) { {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp = (uae_s32)tmp >> (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } #endif /* BFEXTS.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_ebf9_21)(uae_u32 opcode) { {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp = (uae_s32)tmp >> (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } #endif /* BFEXTS.L #.W,(d16,PC) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_ebfa_21)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp = (uae_s32)tmp >> (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } #endif /* BFEXTS.L #.W,(d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_ebfb_21)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr tmppc; uaecptr dsta; m68k_incpc (4); { tmppc = m68k_getpc (); dsta = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp = (uae_s32)tmp >> (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* BFCLR.L #.W,Dn */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_ecc0_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); {{ uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp = m68k_dreg(regs, dstreg); offset &= 0x1f; tmp = (tmp << offset) | (tmp >> (32 - offset)); bdata[0] = tmp & ((1 << (32 - width)) - 1); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = 0; tmp = bdata[0] | (tmp << (32 - width)); m68k_dreg(regs, dstreg) = (tmp >> offset) | (tmp << (32 - offset)); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } #endif /* BFCLR.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_ecd0_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = 0; x_put_bitfield(dsta, bdata, tmp, offset, width); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } #endif /* BFCLR.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_ece8_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = 0; x_put_bitfield(dsta, bdata, tmp, offset, width); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } #endif /* BFCLR.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_ecf0_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = 0; x_put_bitfield(dsta, bdata, tmp, offset, width); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* BFCLR.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_ecf8_21)(uae_u32 opcode) { {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = 0; x_put_bitfield(dsta, bdata, tmp, offset, width); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } #endif /* BFCLR.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_ecf9_21)(uae_u32 opcode) { {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = 0; x_put_bitfield(dsta, bdata, tmp, offset, width); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } #endif /* BFFFO.L #.W,Dn */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_edc0_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); {{ uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp = m68k_dreg(regs, dstreg); offset &= 0x1f; tmp = (tmp << offset) | (tmp >> (32 - offset)); bdata[0] = tmp & ((1 << (32 - width)) - 1); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); { uae_u32 mask = 1 << (width - 1); while (mask) { if (tmp & mask) break; mask >>= 1; offset++; }} m68k_dreg (regs, (extra >> 12) & 7) = offset; }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } #endif /* BFFFO.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_edd0_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); { uae_u32 mask = 1 << (width - 1); while (mask) { if (tmp & mask) break; mask >>= 1; offset++; }} m68k_dreg (regs, (extra >> 12) & 7) = offset; }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } #endif /* BFFFO.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_ede8_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); { uae_u32 mask = 1 << (width - 1); while (mask) { if (tmp & mask) break; mask >>= 1; offset++; }} m68k_dreg (regs, (extra >> 12) & 7) = offset; }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } #endif /* BFFFO.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_edf0_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); { uae_u32 mask = 1 << (width - 1); while (mask) { if (tmp & mask) break; mask >>= 1; offset++; }} m68k_dreg (regs, (extra >> 12) & 7) = offset; }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* BFFFO.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_edf8_21)(uae_u32 opcode) { {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); { uae_u32 mask = 1 << (width - 1); while (mask) { if (tmp & mask) break; mask >>= 1; offset++; }} m68k_dreg (regs, (extra >> 12) & 7) = offset; }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } #endif /* BFFFO.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_edf9_21)(uae_u32 opcode) { {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); { uae_u32 mask = 1 << (width - 1); while (mask) { if (tmp & mask) break; mask >>= 1; offset++; }} m68k_dreg (regs, (extra >> 12) & 7) = offset; }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } #endif /* BFFFO.L #.W,(d16,PC) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_edfa_21)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); { uae_u32 mask = 1 << (width - 1); while (mask) { if (tmp & mask) break; mask >>= 1; offset++; }} m68k_dreg (regs, (extra >> 12) & 7) = offset; }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } #endif /* BFFFO.L #.W,(d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_edfb_21)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr tmppc; uaecptr dsta; m68k_incpc (4); { tmppc = m68k_getpc (); dsta = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); { uae_u32 mask = 1 << (width - 1); while (mask) { if (tmp & mask) break; mask >>= 1; offset++; }} m68k_dreg (regs, (extra >> 12) & 7) = offset; }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* BFSET.L #.W,Dn */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_eec0_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); {{ uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp = m68k_dreg(regs, dstreg); offset &= 0x1f; tmp = (tmp << offset) | (tmp >> (32 - offset)); bdata[0] = tmp & ((1 << (32 - width)) - 1); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = 0xffffffffu >> (32 - width); tmp = bdata[0] | (tmp << (32 - width)); m68k_dreg(regs, dstreg) = (tmp >> offset) | (tmp << (32 - offset)); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } #endif /* BFSET.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_eed0_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = 0xffffffffu >> (32 - width); x_put_bitfield(dsta, bdata, tmp, offset, width); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } #endif /* BFSET.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_eee8_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = 0xffffffffu >> (32 - width); x_put_bitfield(dsta, bdata, tmp, offset, width); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } #endif /* BFSET.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_eef0_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = 0xffffffffu >> (32 - width); x_put_bitfield(dsta, bdata, tmp, offset, width); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* BFSET.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_eef8_21)(uae_u32 opcode) { {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = 0xffffffffu >> (32 - width); x_put_bitfield(dsta, bdata, tmp, offset, width); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } #endif /* BFSET.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_eef9_21)(uae_u32 opcode) { {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = 0xffffffffu >> (32 - width); x_put_bitfield(dsta, bdata, tmp, offset, width); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } #endif /* BFINS.L #.W,Dn */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_efc0_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); {{ uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp = m68k_dreg(regs, dstreg); offset &= 0x1f; tmp = (tmp << offset) | (tmp >> (32 - offset)); bdata[0] = tmp & ((1 << (32 - width)) - 1); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = m68k_dreg (regs, (extra >> 12) & 7); tmp = tmp & (0xffffffffu >> (32 - width)); SET_NFLG (tmp & (1 << (width - 1)) ? 1 : 0); SET_ZFLG (tmp == 0); tmp = bdata[0] | (tmp << (32 - width)); m68k_dreg(regs, dstreg) = (tmp >> offset) | (tmp << (32 - offset)); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } #endif /* BFINS.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_efd0_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = m68k_dreg (regs, (extra >> 12) & 7); tmp = tmp & (0xffffffffu >> (32 - width)); SET_NFLG (tmp & (1 << (width - 1)) ? 1 : 0); SET_ZFLG (tmp == 0); x_put_bitfield(dsta, bdata, tmp, offset, width); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } #endif /* BFINS.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_efe8_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = m68k_dreg (regs, (extra >> 12) & 7); tmp = tmp & (0xffffffffu >> (32 - width)); SET_NFLG (tmp & (1 << (width - 1)) ? 1 : 0); SET_ZFLG (tmp == 0); x_put_bitfield(dsta, bdata, tmp, offset, width); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } #endif /* BFINS.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_eff0_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = m68k_dreg (regs, (extra >> 12) & 7); tmp = tmp & (0xffffffffu >> (32 - width)); SET_NFLG (tmp & (1 << (width - 1)) ? 1 : 0); SET_ZFLG (tmp == 0); x_put_bitfield(dsta, bdata, tmp, offset, width); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* BFINS.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_eff8_21)(uae_u32 opcode) { {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = m68k_dreg (regs, (extra >> 12) & 7); tmp = tmp & (0xffffffffu >> (32 - width)); SET_NFLG (tmp & (1 << (width - 1)) ? 1 : 0); SET_ZFLG (tmp == 0); x_put_bitfield(dsta, bdata, tmp, offset, width); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } #endif /* BFINS.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_eff9_21)(uae_u32 opcode) { {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = m68k_dreg (regs, (extra >> 12) & 7); tmp = tmp & (0xffffffffu >> (32 - width)); SET_NFLG (tmp & (1 << (width - 1)) ? 1 : 0); SET_ZFLG (tmp == 0); x_put_bitfield(dsta, bdata, tmp, offset, width); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } #endif /* FPP.L #.W,Dn */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f200_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { #ifdef FPUEMU { uae_s16 extra = get_word_ce020_prefetch (2); m68k_incpc (4); fpuop_arithmetic(opcode, extra); } #endif } regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* FPP.L #.W,An */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f208_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { #ifdef FPUEMU { uae_s16 extra = get_word_ce020_prefetch (2); m68k_incpc (4); fpuop_arithmetic(opcode, extra); } #endif } regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* FPP.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f210_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { #ifdef FPUEMU { uae_s16 extra = get_word_ce020_prefetch (2); m68k_incpc (4); fpuop_arithmetic(opcode, extra); } #endif } regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* FPP.L #.W,(An)+ */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f218_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { #ifdef FPUEMU { uae_s16 extra = get_word_ce020_prefetch (2); m68k_incpc (4); fpuop_arithmetic(opcode, extra); } #endif } regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* FPP.L #.W,-(An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f220_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { #ifdef FPUEMU { uae_s16 extra = get_word_ce020_prefetch (2); m68k_incpc (4); fpuop_arithmetic(opcode, extra); } #endif } regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* FPP.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f228_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { #ifdef FPUEMU { uae_s16 extra = get_word_ce020_prefetch (2); m68k_incpc (4); fpuop_arithmetic(opcode, extra); } #endif } regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* FPP.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f230_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { #ifdef FPUEMU { uae_s16 extra = get_word_ce020_prefetch (2); m68k_incpc (4); fpuop_arithmetic(opcode, extra); } #endif } regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* FPP.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f238_21)(uae_u32 opcode) { { #ifdef FPUEMU { uae_s16 extra = get_word_ce020_prefetch (2); m68k_incpc (4); fpuop_arithmetic(opcode, extra); } #endif } regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* FPP.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f239_21)(uae_u32 opcode) { { #ifdef FPUEMU { uae_s16 extra = get_word_ce020_prefetch (2); m68k_incpc (4); fpuop_arithmetic(opcode, extra); } #endif } regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* FPP.L #.W,(d16,PC) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f23a_21)(uae_u32 opcode) { uae_u32 dstreg = 2; { #ifdef FPUEMU { uae_s16 extra = get_word_ce020_prefetch (2); m68k_incpc (4); fpuop_arithmetic(opcode, extra); } #endif } regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* FPP.L #.W,(d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f23b_21)(uae_u32 opcode) { uae_u32 dstreg = 3; { #ifdef FPUEMU { uae_s16 extra = get_word_ce020_prefetch (2); m68k_incpc (4); fpuop_arithmetic(opcode, extra); } #endif } regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* FPP.L #.W,#.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f23c_21)(uae_u32 opcode) { { #ifdef FPUEMU { uae_s16 extra = get_word_ce020_prefetch (2); m68k_incpc (4); fpuop_arithmetic(opcode, extra); } #endif } regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* FScc.L #.W,Dn */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f240_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { #ifdef FPUEMU { uae_s16 extra = get_word_ce020_prefetch (2); m68k_incpc (4); fpuop_scc (opcode, extra); } #endif } regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* FDBcc.L #.W,Dn */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f248_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { #ifdef FPUEMU { uae_s16 extra = get_word_ce020_prefetch (2); m68k_incpc (4); fpuop_dbcc (opcode, extra); } #endif } regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* FScc.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f250_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { #ifdef FPUEMU { uae_s16 extra = get_word_ce020_prefetch (2); m68k_incpc (4); fpuop_scc (opcode, extra); } #endif } regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* FScc.L #.W,(An)+ */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f258_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { #ifdef FPUEMU { uae_s16 extra = get_word_ce020_prefetch (2); m68k_incpc (4); fpuop_scc (opcode, extra); } #endif } regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* FScc.L #.W,-(An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f260_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { #ifdef FPUEMU { uae_s16 extra = get_word_ce020_prefetch (2); m68k_incpc (4); fpuop_scc (opcode, extra); } #endif } regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* FScc.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f268_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { #ifdef FPUEMU { uae_s16 extra = get_word_ce020_prefetch (2); m68k_incpc (4); fpuop_scc (opcode, extra); } #endif } regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* FScc.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f270_21)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { #ifdef FPUEMU { uae_s16 extra = get_word_ce020_prefetch (2); m68k_incpc (4); fpuop_scc (opcode, extra); } #endif } regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* FScc.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f278_21)(uae_u32 opcode) { { #ifdef FPUEMU { uae_s16 extra = get_word_ce020_prefetch (2); m68k_incpc (4); fpuop_scc (opcode, extra); } #endif } regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* FScc.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f279_21)(uae_u32 opcode) { { #ifdef FPUEMU { uae_s16 extra = get_word_ce020_prefetch (2); m68k_incpc (4); fpuop_scc (opcode, extra); } #endif } regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* FTRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f27a_21)(uae_u32 opcode) { { #ifdef FPUEMU uaecptr oldpc = m68k_getpc (); uae_u16 extra = get_word_ce020_prefetch (2); { uae_s16 dummy = get_word_ce020_prefetch (4); m68k_incpc (6); fpuop_trapcc (opcode, oldpc, extra); } #endif } regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* FTRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f27b_21)(uae_u32 opcode) { { #ifdef FPUEMU uaecptr oldpc = m68k_getpc (); uae_u16 extra = get_word_ce020_prefetch (2); { uae_s32 dummy = get_long_ce020_prefetch (4); m68k_incpc (8); fpuop_trapcc (opcode, oldpc, extra); } #endif } regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* FTRAPcc.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f27c_21)(uae_u32 opcode) { { #ifdef FPUEMU uaecptr oldpc = m68k_getpc (); uae_u16 extra = get_word_ce020_prefetch (2); m68k_incpc (4); fpuop_trapcc (opcode, oldpc, extra); #endif } regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* FBccQ.L #,#.W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f280_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 63); { #ifdef FPUEMU m68k_incpc (2); { uaecptr pc = m68k_getpc (); { uae_s16 extra = get_word_ce020_prefetch (0); m68k_incpc (2); fpuop_bcc (opcode, pc,extra); }} #endif } regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* FBccQ.L #,#.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f2c0_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 63); { #ifdef FPUEMU m68k_incpc (2); { uaecptr pc = m68k_getpc (); { uae_s32 extra = get_long_ce020_prefetch (0); m68k_incpc (4); fpuop_bcc (opcode, pc,extra); }} #endif } regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* FSAVE.L (An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f310_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel8959; } { #ifdef FPUEMU m68k_incpc (2); fpuop_save (opcode); #endif }} regs.ce020memcycles += 2 * cpucycleunit; endlabel8959: ; return; } #endif /* FSAVE.L -(An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f320_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel8960; } { #ifdef FPUEMU m68k_incpc (2); fpuop_save (opcode); #endif }} regs.ce020memcycles += 2 * cpucycleunit; endlabel8960: ; return; } #endif /* FSAVE.L (d16,An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f328_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel8961; } { #ifdef FPUEMU m68k_incpc (2); fpuop_save (opcode); #endif }} regs.ce020memcycles += 2 * cpucycleunit; endlabel8961: ; return; } #endif /* FSAVE.L (d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f330_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel8962; } { #ifdef FPUEMU m68k_incpc (2); fpuop_save (opcode); #endif }} regs.ce020memcycles += 2 * cpucycleunit; endlabel8962: ; return; } #endif /* FSAVE.L (xxx).W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f338_21)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel8963; } { #ifdef FPUEMU m68k_incpc (2); fpuop_save (opcode); #endif }} regs.ce020memcycles += 2 * cpucycleunit; endlabel8963: ; return; } #endif /* FSAVE.L (xxx).L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f339_21)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel8964; } { #ifdef FPUEMU m68k_incpc (2); fpuop_save (opcode); #endif }} regs.ce020memcycles += 2 * cpucycleunit; endlabel8964: ; return; } #endif /* FRESTORE.L (An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f350_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel8965; } { #ifdef FPUEMU m68k_incpc (2); fpuop_restore (opcode); #endif }} regs.ce020memcycles += 2 * cpucycleunit; endlabel8965: ; return; } #endif /* FRESTORE.L (An)+ */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f358_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel8966; } { #ifdef FPUEMU m68k_incpc (2); fpuop_restore (opcode); #endif }} regs.ce020memcycles += 2 * cpucycleunit; endlabel8966: ; return; } #endif /* FRESTORE.L (d16,An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f368_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel8967; } { #ifdef FPUEMU m68k_incpc (2); fpuop_restore (opcode); #endif }} regs.ce020memcycles += 2 * cpucycleunit; endlabel8967: ; return; } #endif /* FRESTORE.L (d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f370_21)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel8968; } { #ifdef FPUEMU m68k_incpc (2); fpuop_restore (opcode); #endif }} regs.ce020memcycles += 2 * cpucycleunit; endlabel8968: ; return; } #endif /* FRESTORE.L (xxx).W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f378_21)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel8969; } { #ifdef FPUEMU m68k_incpc (2); fpuop_restore (opcode); #endif }} regs.ce020memcycles += 2 * cpucycleunit; endlabel8969: ; return; } #endif /* FRESTORE.L (xxx).L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f379_21)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel8970; } { #ifdef FPUEMU m68k_incpc (2); fpuop_restore (opcode); #endif }} regs.ce020memcycles += 2 * cpucycleunit; endlabel8970: ; return; } #endif /* FRESTORE.L (d16,PC) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f37a_21)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel8971; } { #ifdef FPUEMU m68k_incpc (2); fpuop_restore (opcode); #endif }} regs.ce020memcycles += 2 * cpucycleunit; endlabel8971: ; return; } #endif /* FRESTORE.L (d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f37b_21)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel8972; } { #ifdef FPUEMU m68k_incpc (2); fpuop_restore (opcode); #endif }} regs.ce020memcycles += 2 * cpucycleunit; endlabel8972: ; return; } #endif #endif fs-uae-2.2.3+dfsg/gensrc/cpustbl.cpp0000644000175000017500000447566412162366654017547 0ustar glaubitzglaubitz#include "sysconfig.h" #include "sysdeps.h" #include "options.h" #include "uae/memory.h" #include "custom.h" #include "events.h" #include "newcpu.h" #include "cpu_prefetch.h" #include "cputbl.h" #include "cpummu.h" #define CPUFUNC(x) x##_ff #define SET_CFLG_ALWAYS(x) SET_CFLG(x) #define SET_NFLG_ALWAYS(x) SET_NFLG(x) #ifdef NOFLAGS #include "noflags.h" #endif #ifdef CPUEMU_0 const struct cputbl CPUFUNC(op_smalltbl_0)[] = { { CPUFUNC(op_0000_0), 0 }, /* OR */ { CPUFUNC(op_0010_0), 16 }, /* OR */ { CPUFUNC(op_0018_0), 24 }, /* OR */ { CPUFUNC(op_0020_0), 32 }, /* OR */ { CPUFUNC(op_0028_0), 40 }, /* OR */ { CPUFUNC(op_0030_0), 48 }, /* OR */ { CPUFUNC(op_0038_0), 56 }, /* OR */ { CPUFUNC(op_0039_0), 57 }, /* OR */ { CPUFUNC(op_003c_0), 60 }, /* ORSR */ { CPUFUNC(op_0040_0), 64 }, /* OR */ { CPUFUNC(op_0050_0), 80 }, /* OR */ { CPUFUNC(op_0058_0), 88 }, /* OR */ { CPUFUNC(op_0060_0), 96 }, /* OR */ { CPUFUNC(op_0068_0), 104 }, /* OR */ { CPUFUNC(op_0070_0), 112 }, /* OR */ { CPUFUNC(op_0078_0), 120 }, /* OR */ { CPUFUNC(op_0079_0), 121 }, /* OR */ { CPUFUNC(op_007c_0), 124 }, /* ORSR */ { CPUFUNC(op_0080_0), 128 }, /* OR */ { CPUFUNC(op_0090_0), 144 }, /* OR */ { CPUFUNC(op_0098_0), 152 }, /* OR */ { CPUFUNC(op_00a0_0), 160 }, /* OR */ { CPUFUNC(op_00a8_0), 168 }, /* OR */ { CPUFUNC(op_00b0_0), 176 }, /* OR */ { CPUFUNC(op_00b8_0), 184 }, /* OR */ { CPUFUNC(op_00b9_0), 185 }, /* OR */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_00d0_0), 208 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_00e8_0), 232 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_00f0_0), 240 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_00f8_0), 248 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_00f9_0), 249 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_00fa_0), 250 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_00fb_0), 251 }, /* CHK2 */ #endif { CPUFUNC(op_0100_0), 256 }, /* BTST */ { CPUFUNC(op_0108_0), 264 }, /* MVPMR */ { CPUFUNC(op_0110_0), 272 }, /* BTST */ { CPUFUNC(op_0118_0), 280 }, /* BTST */ { CPUFUNC(op_0120_0), 288 }, /* BTST */ { CPUFUNC(op_0128_0), 296 }, /* BTST */ { CPUFUNC(op_0130_0), 304 }, /* BTST */ { CPUFUNC(op_0138_0), 312 }, /* BTST */ { CPUFUNC(op_0139_0), 313 }, /* BTST */ { CPUFUNC(op_013a_0), 314 }, /* BTST */ { CPUFUNC(op_013b_0), 315 }, /* BTST */ { CPUFUNC(op_013c_0), 316 }, /* BTST */ { CPUFUNC(op_0140_0), 320 }, /* BCHG */ { CPUFUNC(op_0148_0), 328 }, /* MVPMR */ { CPUFUNC(op_0150_0), 336 }, /* BCHG */ { CPUFUNC(op_0158_0), 344 }, /* BCHG */ { CPUFUNC(op_0160_0), 352 }, /* BCHG */ { CPUFUNC(op_0168_0), 360 }, /* BCHG */ { CPUFUNC(op_0170_0), 368 }, /* BCHG */ { CPUFUNC(op_0178_0), 376 }, /* BCHG */ { CPUFUNC(op_0179_0), 377 }, /* BCHG */ { CPUFUNC(op_017a_0), 378 }, /* BCHG */ { CPUFUNC(op_017b_0), 379 }, /* BCHG */ { CPUFUNC(op_0180_0), 384 }, /* BCLR */ { CPUFUNC(op_0188_0), 392 }, /* MVPRM */ { CPUFUNC(op_0190_0), 400 }, /* BCLR */ { CPUFUNC(op_0198_0), 408 }, /* BCLR */ { CPUFUNC(op_01a0_0), 416 }, /* BCLR */ { CPUFUNC(op_01a8_0), 424 }, /* BCLR */ { CPUFUNC(op_01b0_0), 432 }, /* BCLR */ { CPUFUNC(op_01b8_0), 440 }, /* BCLR */ { CPUFUNC(op_01b9_0), 441 }, /* BCLR */ { CPUFUNC(op_01ba_0), 442 }, /* BCLR */ { CPUFUNC(op_01bb_0), 443 }, /* BCLR */ { CPUFUNC(op_01c0_0), 448 }, /* BSET */ { CPUFUNC(op_01c8_0), 456 }, /* MVPRM */ { CPUFUNC(op_01d0_0), 464 }, /* BSET */ { CPUFUNC(op_01d8_0), 472 }, /* BSET */ { CPUFUNC(op_01e0_0), 480 }, /* BSET */ { CPUFUNC(op_01e8_0), 488 }, /* BSET */ { CPUFUNC(op_01f0_0), 496 }, /* BSET */ { CPUFUNC(op_01f8_0), 504 }, /* BSET */ { CPUFUNC(op_01f9_0), 505 }, /* BSET */ { CPUFUNC(op_01fa_0), 506 }, /* BSET */ { CPUFUNC(op_01fb_0), 507 }, /* BSET */ { CPUFUNC(op_0200_0), 512 }, /* AND */ { CPUFUNC(op_0210_0), 528 }, /* AND */ { CPUFUNC(op_0218_0), 536 }, /* AND */ { CPUFUNC(op_0220_0), 544 }, /* AND */ { CPUFUNC(op_0228_0), 552 }, /* AND */ { CPUFUNC(op_0230_0), 560 }, /* AND */ { CPUFUNC(op_0238_0), 568 }, /* AND */ { CPUFUNC(op_0239_0), 569 }, /* AND */ { CPUFUNC(op_023c_0), 572 }, /* ANDSR */ { CPUFUNC(op_0240_0), 576 }, /* AND */ { CPUFUNC(op_0250_0), 592 }, /* AND */ { CPUFUNC(op_0258_0), 600 }, /* AND */ { CPUFUNC(op_0260_0), 608 }, /* AND */ { CPUFUNC(op_0268_0), 616 }, /* AND */ { CPUFUNC(op_0270_0), 624 }, /* AND */ { CPUFUNC(op_0278_0), 632 }, /* AND */ { CPUFUNC(op_0279_0), 633 }, /* AND */ { CPUFUNC(op_027c_0), 636 }, /* ANDSR */ { CPUFUNC(op_0280_0), 640 }, /* AND */ { CPUFUNC(op_0290_0), 656 }, /* AND */ { CPUFUNC(op_0298_0), 664 }, /* AND */ { CPUFUNC(op_02a0_0), 672 }, /* AND */ { CPUFUNC(op_02a8_0), 680 }, /* AND */ { CPUFUNC(op_02b0_0), 688 }, /* AND */ { CPUFUNC(op_02b8_0), 696 }, /* AND */ { CPUFUNC(op_02b9_0), 697 }, /* AND */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_02d0_0), 720 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_02e8_0), 744 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_02f0_0), 752 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_02f8_0), 760 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_02f9_0), 761 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_02fa_0), 762 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_02fb_0), 763 }, /* CHK2 */ #endif { CPUFUNC(op_0400_0), 1024 }, /* SUB */ { CPUFUNC(op_0410_0), 1040 }, /* SUB */ { CPUFUNC(op_0418_0), 1048 }, /* SUB */ { CPUFUNC(op_0420_0), 1056 }, /* SUB */ { CPUFUNC(op_0428_0), 1064 }, /* SUB */ { CPUFUNC(op_0430_0), 1072 }, /* SUB */ { CPUFUNC(op_0438_0), 1080 }, /* SUB */ { CPUFUNC(op_0439_0), 1081 }, /* SUB */ { CPUFUNC(op_0440_0), 1088 }, /* SUB */ { CPUFUNC(op_0450_0), 1104 }, /* SUB */ { CPUFUNC(op_0458_0), 1112 }, /* SUB */ { CPUFUNC(op_0460_0), 1120 }, /* SUB */ { CPUFUNC(op_0468_0), 1128 }, /* SUB */ { CPUFUNC(op_0470_0), 1136 }, /* SUB */ { CPUFUNC(op_0478_0), 1144 }, /* SUB */ { CPUFUNC(op_0479_0), 1145 }, /* SUB */ { CPUFUNC(op_0480_0), 1152 }, /* SUB */ { CPUFUNC(op_0490_0), 1168 }, /* SUB */ { CPUFUNC(op_0498_0), 1176 }, /* SUB */ { CPUFUNC(op_04a0_0), 1184 }, /* SUB */ { CPUFUNC(op_04a8_0), 1192 }, /* SUB */ { CPUFUNC(op_04b0_0), 1200 }, /* SUB */ { CPUFUNC(op_04b8_0), 1208 }, /* SUB */ { CPUFUNC(op_04b9_0), 1209 }, /* SUB */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_04d0_0), 1232 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_04e8_0), 1256 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_04f0_0), 1264 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_04f8_0), 1272 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_04f9_0), 1273 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_04fa_0), 1274 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_04fb_0), 1275 }, /* CHK2 */ #endif { CPUFUNC(op_0600_0), 1536 }, /* ADD */ { CPUFUNC(op_0610_0), 1552 }, /* ADD */ { CPUFUNC(op_0618_0), 1560 }, /* ADD */ { CPUFUNC(op_0620_0), 1568 }, /* ADD */ { CPUFUNC(op_0628_0), 1576 }, /* ADD */ { CPUFUNC(op_0630_0), 1584 }, /* ADD */ { CPUFUNC(op_0638_0), 1592 }, /* ADD */ { CPUFUNC(op_0639_0), 1593 }, /* ADD */ { CPUFUNC(op_0640_0), 1600 }, /* ADD */ { CPUFUNC(op_0650_0), 1616 }, /* ADD */ { CPUFUNC(op_0658_0), 1624 }, /* ADD */ { CPUFUNC(op_0660_0), 1632 }, /* ADD */ { CPUFUNC(op_0668_0), 1640 }, /* ADD */ { CPUFUNC(op_0670_0), 1648 }, /* ADD */ { CPUFUNC(op_0678_0), 1656 }, /* ADD */ { CPUFUNC(op_0679_0), 1657 }, /* ADD */ { CPUFUNC(op_0680_0), 1664 }, /* ADD */ { CPUFUNC(op_0690_0), 1680 }, /* ADD */ { CPUFUNC(op_0698_0), 1688 }, /* ADD */ { CPUFUNC(op_06a0_0), 1696 }, /* ADD */ { CPUFUNC(op_06a8_0), 1704 }, /* ADD */ { CPUFUNC(op_06b0_0), 1712 }, /* ADD */ { CPUFUNC(op_06b8_0), 1720 }, /* ADD */ { CPUFUNC(op_06b9_0), 1721 }, /* ADD */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_06c0_0), 1728 }, /* RTM */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_06c8_0), 1736 }, /* RTM */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_06d0_0), 1744 }, /* CALLM */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_06e8_0), 1768 }, /* CALLM */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_06f0_0), 1776 }, /* CALLM */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_06f8_0), 1784 }, /* CALLM */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_06f9_0), 1785 }, /* CALLM */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_06fa_0), 1786 }, /* CALLM */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_06fb_0), 1787 }, /* CALLM */ #endif { CPUFUNC(op_0800_0), 2048 }, /* BTST */ { CPUFUNC(op_0810_0), 2064 }, /* BTST */ { CPUFUNC(op_0818_0), 2072 }, /* BTST */ { CPUFUNC(op_0820_0), 2080 }, /* BTST */ { CPUFUNC(op_0828_0), 2088 }, /* BTST */ { CPUFUNC(op_0830_0), 2096 }, /* BTST */ { CPUFUNC(op_0838_0), 2104 }, /* BTST */ { CPUFUNC(op_0839_0), 2105 }, /* BTST */ { CPUFUNC(op_083a_0), 2106 }, /* BTST */ { CPUFUNC(op_083b_0), 2107 }, /* BTST */ { CPUFUNC(op_083c_0), 2108 }, /* BTST */ { CPUFUNC(op_0840_0), 2112 }, /* BCHG */ { CPUFUNC(op_0850_0), 2128 }, /* BCHG */ { CPUFUNC(op_0858_0), 2136 }, /* BCHG */ { CPUFUNC(op_0860_0), 2144 }, /* BCHG */ { CPUFUNC(op_0868_0), 2152 }, /* BCHG */ { CPUFUNC(op_0870_0), 2160 }, /* BCHG */ { CPUFUNC(op_0878_0), 2168 }, /* BCHG */ { CPUFUNC(op_0879_0), 2169 }, /* BCHG */ { CPUFUNC(op_087a_0), 2170 }, /* BCHG */ { CPUFUNC(op_087b_0), 2171 }, /* BCHG */ { CPUFUNC(op_0880_0), 2176 }, /* BCLR */ { CPUFUNC(op_0890_0), 2192 }, /* BCLR */ { CPUFUNC(op_0898_0), 2200 }, /* BCLR */ { CPUFUNC(op_08a0_0), 2208 }, /* BCLR */ { CPUFUNC(op_08a8_0), 2216 }, /* BCLR */ { CPUFUNC(op_08b0_0), 2224 }, /* BCLR */ { CPUFUNC(op_08b8_0), 2232 }, /* BCLR */ { CPUFUNC(op_08b9_0), 2233 }, /* BCLR */ { CPUFUNC(op_08ba_0), 2234 }, /* BCLR */ { CPUFUNC(op_08bb_0), 2235 }, /* BCLR */ { CPUFUNC(op_08c0_0), 2240 }, /* BSET */ { CPUFUNC(op_08d0_0), 2256 }, /* BSET */ { CPUFUNC(op_08d8_0), 2264 }, /* BSET */ { CPUFUNC(op_08e0_0), 2272 }, /* BSET */ { CPUFUNC(op_08e8_0), 2280 }, /* BSET */ { CPUFUNC(op_08f0_0), 2288 }, /* BSET */ { CPUFUNC(op_08f8_0), 2296 }, /* BSET */ { CPUFUNC(op_08f9_0), 2297 }, /* BSET */ { CPUFUNC(op_08fa_0), 2298 }, /* BSET */ { CPUFUNC(op_08fb_0), 2299 }, /* BSET */ { CPUFUNC(op_0a00_0), 2560 }, /* EOR */ { CPUFUNC(op_0a10_0), 2576 }, /* EOR */ { CPUFUNC(op_0a18_0), 2584 }, /* EOR */ { CPUFUNC(op_0a20_0), 2592 }, /* EOR */ { CPUFUNC(op_0a28_0), 2600 }, /* EOR */ { CPUFUNC(op_0a30_0), 2608 }, /* EOR */ { CPUFUNC(op_0a38_0), 2616 }, /* EOR */ { CPUFUNC(op_0a39_0), 2617 }, /* EOR */ { CPUFUNC(op_0a3c_0), 2620 }, /* EORSR */ { CPUFUNC(op_0a40_0), 2624 }, /* EOR */ { CPUFUNC(op_0a50_0), 2640 }, /* EOR */ { CPUFUNC(op_0a58_0), 2648 }, /* EOR */ { CPUFUNC(op_0a60_0), 2656 }, /* EOR */ { CPUFUNC(op_0a68_0), 2664 }, /* EOR */ { CPUFUNC(op_0a70_0), 2672 }, /* EOR */ { CPUFUNC(op_0a78_0), 2680 }, /* EOR */ { CPUFUNC(op_0a79_0), 2681 }, /* EOR */ { CPUFUNC(op_0a7c_0), 2684 }, /* EORSR */ { CPUFUNC(op_0a80_0), 2688 }, /* EOR */ { CPUFUNC(op_0a90_0), 2704 }, /* EOR */ { CPUFUNC(op_0a98_0), 2712 }, /* EOR */ { CPUFUNC(op_0aa0_0), 2720 }, /* EOR */ { CPUFUNC(op_0aa8_0), 2728 }, /* EOR */ { CPUFUNC(op_0ab0_0), 2736 }, /* EOR */ { CPUFUNC(op_0ab8_0), 2744 }, /* EOR */ { CPUFUNC(op_0ab9_0), 2745 }, /* EOR */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0ad0_0), 2768 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0ad8_0), 2776 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0ae0_0), 2784 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0ae8_0), 2792 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0af0_0), 2800 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0af8_0), 2808 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0af9_0), 2809 }, /* CAS */ #endif { CPUFUNC(op_0c00_0), 3072 }, /* CMP */ { CPUFUNC(op_0c10_0), 3088 }, /* CMP */ { CPUFUNC(op_0c18_0), 3096 }, /* CMP */ { CPUFUNC(op_0c20_0), 3104 }, /* CMP */ { CPUFUNC(op_0c28_0), 3112 }, /* CMP */ { CPUFUNC(op_0c30_0), 3120 }, /* CMP */ { CPUFUNC(op_0c38_0), 3128 }, /* CMP */ { CPUFUNC(op_0c39_0), 3129 }, /* CMP */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0c3a_0), 3130 }, /* CMP */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0c3b_0), 3131 }, /* CMP */ #endif { CPUFUNC(op_0c40_0), 3136 }, /* CMP */ { CPUFUNC(op_0c50_0), 3152 }, /* CMP */ { CPUFUNC(op_0c58_0), 3160 }, /* CMP */ { CPUFUNC(op_0c60_0), 3168 }, /* CMP */ { CPUFUNC(op_0c68_0), 3176 }, /* CMP */ { CPUFUNC(op_0c70_0), 3184 }, /* CMP */ { CPUFUNC(op_0c78_0), 3192 }, /* CMP */ { CPUFUNC(op_0c79_0), 3193 }, /* CMP */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0c7a_0), 3194 }, /* CMP */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0c7b_0), 3195 }, /* CMP */ #endif { CPUFUNC(op_0c80_0), 3200 }, /* CMP */ { CPUFUNC(op_0c90_0), 3216 }, /* CMP */ { CPUFUNC(op_0c98_0), 3224 }, /* CMP */ { CPUFUNC(op_0ca0_0), 3232 }, /* CMP */ { CPUFUNC(op_0ca8_0), 3240 }, /* CMP */ { CPUFUNC(op_0cb0_0), 3248 }, /* CMP */ { CPUFUNC(op_0cb8_0), 3256 }, /* CMP */ { CPUFUNC(op_0cb9_0), 3257 }, /* CMP */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0cba_0), 3258 }, /* CMP */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0cbb_0), 3259 }, /* CMP */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0cd0_0), 3280 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0cd8_0), 3288 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0ce0_0), 3296 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0ce8_0), 3304 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0cf0_0), 3312 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0cf8_0), 3320 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0cf9_0), 3321 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0cfc_0), 3324 }, /* CAS2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0e10_0), 3600 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0e18_0), 3608 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0e20_0), 3616 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0e28_0), 3624 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0e30_0), 3632 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0e38_0), 3640 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0e39_0), 3641 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0e50_0), 3664 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0e58_0), 3672 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0e60_0), 3680 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0e68_0), 3688 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0e70_0), 3696 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0e78_0), 3704 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0e79_0), 3705 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0e90_0), 3728 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0e98_0), 3736 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0ea0_0), 3744 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0ea8_0), 3752 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0eb0_0), 3760 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0eb8_0), 3768 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0eb9_0), 3769 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0ed0_0), 3792 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0ed8_0), 3800 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0ee0_0), 3808 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0ee8_0), 3816 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0ef0_0), 3824 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0ef8_0), 3832 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0ef9_0), 3833 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0efc_0), 3836 }, /* CAS2 */ #endif { CPUFUNC(op_1000_0), 4096 }, /* MOVE */ { CPUFUNC(op_1010_0), 4112 }, /* MOVE */ { CPUFUNC(op_1018_0), 4120 }, /* MOVE */ { CPUFUNC(op_1020_0), 4128 }, /* MOVE */ { CPUFUNC(op_1028_0), 4136 }, /* MOVE */ { CPUFUNC(op_1030_0), 4144 }, /* MOVE */ { CPUFUNC(op_1038_0), 4152 }, /* MOVE */ { CPUFUNC(op_1039_0), 4153 }, /* MOVE */ { CPUFUNC(op_103a_0), 4154 }, /* MOVE */ { CPUFUNC(op_103b_0), 4155 }, /* MOVE */ { CPUFUNC(op_103c_0), 4156 }, /* MOVE */ { CPUFUNC(op_1080_0), 4224 }, /* MOVE */ { CPUFUNC(op_1090_0), 4240 }, /* MOVE */ { CPUFUNC(op_1098_0), 4248 }, /* MOVE */ { CPUFUNC(op_10a0_0), 4256 }, /* MOVE */ { CPUFUNC(op_10a8_0), 4264 }, /* MOVE */ { CPUFUNC(op_10b0_0), 4272 }, /* MOVE */ { CPUFUNC(op_10b8_0), 4280 }, /* MOVE */ { CPUFUNC(op_10b9_0), 4281 }, /* MOVE */ { CPUFUNC(op_10ba_0), 4282 }, /* MOVE */ { CPUFUNC(op_10bb_0), 4283 }, /* MOVE */ { CPUFUNC(op_10bc_0), 4284 }, /* MOVE */ { CPUFUNC(op_10c0_0), 4288 }, /* MOVE */ { CPUFUNC(op_10d0_0), 4304 }, /* MOVE */ { CPUFUNC(op_10d8_0), 4312 }, /* MOVE */ { CPUFUNC(op_10e0_0), 4320 }, /* MOVE */ { CPUFUNC(op_10e8_0), 4328 }, /* MOVE */ { CPUFUNC(op_10f0_0), 4336 }, /* MOVE */ { CPUFUNC(op_10f8_0), 4344 }, /* MOVE */ { CPUFUNC(op_10f9_0), 4345 }, /* MOVE */ { CPUFUNC(op_10fa_0), 4346 }, /* MOVE */ { CPUFUNC(op_10fb_0), 4347 }, /* MOVE */ { CPUFUNC(op_10fc_0), 4348 }, /* MOVE */ { CPUFUNC(op_1100_0), 4352 }, /* MOVE */ { CPUFUNC(op_1110_0), 4368 }, /* MOVE */ { CPUFUNC(op_1118_0), 4376 }, /* MOVE */ { CPUFUNC(op_1120_0), 4384 }, /* MOVE */ { CPUFUNC(op_1128_0), 4392 }, /* MOVE */ { CPUFUNC(op_1130_0), 4400 }, /* MOVE */ { CPUFUNC(op_1138_0), 4408 }, /* MOVE */ { CPUFUNC(op_1139_0), 4409 }, /* MOVE */ { CPUFUNC(op_113a_0), 4410 }, /* MOVE */ { CPUFUNC(op_113b_0), 4411 }, /* MOVE */ { CPUFUNC(op_113c_0), 4412 }, /* MOVE */ { CPUFUNC(op_1140_0), 4416 }, /* MOVE */ { CPUFUNC(op_1150_0), 4432 }, /* MOVE */ { CPUFUNC(op_1158_0), 4440 }, /* MOVE */ { CPUFUNC(op_1160_0), 4448 }, /* MOVE */ { CPUFUNC(op_1168_0), 4456 }, /* MOVE */ { CPUFUNC(op_1170_0), 4464 }, /* MOVE */ { CPUFUNC(op_1178_0), 4472 }, /* MOVE */ { CPUFUNC(op_1179_0), 4473 }, /* MOVE */ { CPUFUNC(op_117a_0), 4474 }, /* MOVE */ { CPUFUNC(op_117b_0), 4475 }, /* MOVE */ { CPUFUNC(op_117c_0), 4476 }, /* MOVE */ { CPUFUNC(op_1180_0), 4480 }, /* MOVE */ { CPUFUNC(op_1190_0), 4496 }, /* MOVE */ { CPUFUNC(op_1198_0), 4504 }, /* MOVE */ { CPUFUNC(op_11a0_0), 4512 }, /* MOVE */ { CPUFUNC(op_11a8_0), 4520 }, /* MOVE */ { CPUFUNC(op_11b0_0), 4528 }, /* MOVE */ { CPUFUNC(op_11b8_0), 4536 }, /* MOVE */ { CPUFUNC(op_11b9_0), 4537 }, /* MOVE */ { CPUFUNC(op_11ba_0), 4538 }, /* MOVE */ { CPUFUNC(op_11bb_0), 4539 }, /* MOVE */ { CPUFUNC(op_11bc_0), 4540 }, /* MOVE */ { CPUFUNC(op_11c0_0), 4544 }, /* MOVE */ { CPUFUNC(op_11d0_0), 4560 }, /* MOVE */ { CPUFUNC(op_11d8_0), 4568 }, /* MOVE */ { CPUFUNC(op_11e0_0), 4576 }, /* MOVE */ { CPUFUNC(op_11e8_0), 4584 }, /* MOVE */ { CPUFUNC(op_11f0_0), 4592 }, /* MOVE */ { CPUFUNC(op_11f8_0), 4600 }, /* MOVE */ { CPUFUNC(op_11f9_0), 4601 }, /* MOVE */ { CPUFUNC(op_11fa_0), 4602 }, /* MOVE */ { CPUFUNC(op_11fb_0), 4603 }, /* MOVE */ { CPUFUNC(op_11fc_0), 4604 }, /* MOVE */ { CPUFUNC(op_13c0_0), 5056 }, /* MOVE */ { CPUFUNC(op_13d0_0), 5072 }, /* MOVE */ { CPUFUNC(op_13d8_0), 5080 }, /* MOVE */ { CPUFUNC(op_13e0_0), 5088 }, /* MOVE */ { CPUFUNC(op_13e8_0), 5096 }, /* MOVE */ { CPUFUNC(op_13f0_0), 5104 }, /* MOVE */ { CPUFUNC(op_13f8_0), 5112 }, /* MOVE */ { CPUFUNC(op_13f9_0), 5113 }, /* MOVE */ { CPUFUNC(op_13fa_0), 5114 }, /* MOVE */ { CPUFUNC(op_13fb_0), 5115 }, /* MOVE */ { CPUFUNC(op_13fc_0), 5116 }, /* MOVE */ { CPUFUNC(op_2000_0), 8192 }, /* MOVE */ { CPUFUNC(op_2008_0), 8200 }, /* MOVE */ { CPUFUNC(op_2010_0), 8208 }, /* MOVE */ { CPUFUNC(op_2018_0), 8216 }, /* MOVE */ { CPUFUNC(op_2020_0), 8224 }, /* MOVE */ { CPUFUNC(op_2028_0), 8232 }, /* MOVE */ { CPUFUNC(op_2030_0), 8240 }, /* MOVE */ { CPUFUNC(op_2038_0), 8248 }, /* MOVE */ { CPUFUNC(op_2039_0), 8249 }, /* MOVE */ { CPUFUNC(op_203a_0), 8250 }, /* MOVE */ { CPUFUNC(op_203b_0), 8251 }, /* MOVE */ { CPUFUNC(op_203c_0), 8252 }, /* MOVE */ { CPUFUNC(op_2040_0), 8256 }, /* MOVEA */ { CPUFUNC(op_2048_0), 8264 }, /* MOVEA */ { CPUFUNC(op_2050_0), 8272 }, /* MOVEA */ { CPUFUNC(op_2058_0), 8280 }, /* MOVEA */ { CPUFUNC(op_2060_0), 8288 }, /* MOVEA */ { CPUFUNC(op_2068_0), 8296 }, /* MOVEA */ { CPUFUNC(op_2070_0), 8304 }, /* MOVEA */ { CPUFUNC(op_2078_0), 8312 }, /* MOVEA */ { CPUFUNC(op_2079_0), 8313 }, /* MOVEA */ { CPUFUNC(op_207a_0), 8314 }, /* MOVEA */ { CPUFUNC(op_207b_0), 8315 }, /* MOVEA */ { CPUFUNC(op_207c_0), 8316 }, /* MOVEA */ { CPUFUNC(op_2080_0), 8320 }, /* MOVE */ { CPUFUNC(op_2088_0), 8328 }, /* MOVE */ { CPUFUNC(op_2090_0), 8336 }, /* MOVE */ { CPUFUNC(op_2098_0), 8344 }, /* MOVE */ { CPUFUNC(op_20a0_0), 8352 }, /* MOVE */ { CPUFUNC(op_20a8_0), 8360 }, /* MOVE */ { CPUFUNC(op_20b0_0), 8368 }, /* MOVE */ { CPUFUNC(op_20b8_0), 8376 }, /* MOVE */ { CPUFUNC(op_20b9_0), 8377 }, /* MOVE */ { CPUFUNC(op_20ba_0), 8378 }, /* MOVE */ { CPUFUNC(op_20bb_0), 8379 }, /* MOVE */ { CPUFUNC(op_20bc_0), 8380 }, /* MOVE */ { CPUFUNC(op_20c0_0), 8384 }, /* MOVE */ { CPUFUNC(op_20c8_0), 8392 }, /* MOVE */ { CPUFUNC(op_20d0_0), 8400 }, /* MOVE */ { CPUFUNC(op_20d8_0), 8408 }, /* MOVE */ { CPUFUNC(op_20e0_0), 8416 }, /* MOVE */ { CPUFUNC(op_20e8_0), 8424 }, /* MOVE */ { CPUFUNC(op_20f0_0), 8432 }, /* MOVE */ { CPUFUNC(op_20f8_0), 8440 }, /* MOVE */ { CPUFUNC(op_20f9_0), 8441 }, /* MOVE */ { CPUFUNC(op_20fa_0), 8442 }, /* MOVE */ { CPUFUNC(op_20fb_0), 8443 }, /* MOVE */ { CPUFUNC(op_20fc_0), 8444 }, /* MOVE */ { CPUFUNC(op_2100_0), 8448 }, /* MOVE */ { CPUFUNC(op_2108_0), 8456 }, /* MOVE */ { CPUFUNC(op_2110_0), 8464 }, /* MOVE */ { CPUFUNC(op_2118_0), 8472 }, /* MOVE */ { CPUFUNC(op_2120_0), 8480 }, /* MOVE */ { CPUFUNC(op_2128_0), 8488 }, /* MOVE */ { CPUFUNC(op_2130_0), 8496 }, /* MOVE */ { CPUFUNC(op_2138_0), 8504 }, /* MOVE */ { CPUFUNC(op_2139_0), 8505 }, /* MOVE */ { CPUFUNC(op_213a_0), 8506 }, /* MOVE */ { CPUFUNC(op_213b_0), 8507 }, /* MOVE */ { CPUFUNC(op_213c_0), 8508 }, /* MOVE */ { CPUFUNC(op_2140_0), 8512 }, /* MOVE */ { CPUFUNC(op_2148_0), 8520 }, /* MOVE */ { CPUFUNC(op_2150_0), 8528 }, /* MOVE */ { CPUFUNC(op_2158_0), 8536 }, /* MOVE */ { CPUFUNC(op_2160_0), 8544 }, /* MOVE */ { CPUFUNC(op_2168_0), 8552 }, /* MOVE */ { CPUFUNC(op_2170_0), 8560 }, /* MOVE */ { CPUFUNC(op_2178_0), 8568 }, /* MOVE */ { CPUFUNC(op_2179_0), 8569 }, /* MOVE */ { CPUFUNC(op_217a_0), 8570 }, /* MOVE */ { CPUFUNC(op_217b_0), 8571 }, /* MOVE */ { CPUFUNC(op_217c_0), 8572 }, /* MOVE */ { CPUFUNC(op_2180_0), 8576 }, /* MOVE */ { CPUFUNC(op_2188_0), 8584 }, /* MOVE */ { CPUFUNC(op_2190_0), 8592 }, /* MOVE */ { CPUFUNC(op_2198_0), 8600 }, /* MOVE */ { CPUFUNC(op_21a0_0), 8608 }, /* MOVE */ { CPUFUNC(op_21a8_0), 8616 }, /* MOVE */ { CPUFUNC(op_21b0_0), 8624 }, /* MOVE */ { CPUFUNC(op_21b8_0), 8632 }, /* MOVE */ { CPUFUNC(op_21b9_0), 8633 }, /* MOVE */ { CPUFUNC(op_21ba_0), 8634 }, /* MOVE */ { CPUFUNC(op_21bb_0), 8635 }, /* MOVE */ { CPUFUNC(op_21bc_0), 8636 }, /* MOVE */ { CPUFUNC(op_21c0_0), 8640 }, /* MOVE */ { CPUFUNC(op_21c8_0), 8648 }, /* MOVE */ { CPUFUNC(op_21d0_0), 8656 }, /* MOVE */ { CPUFUNC(op_21d8_0), 8664 }, /* MOVE */ { CPUFUNC(op_21e0_0), 8672 }, /* MOVE */ { CPUFUNC(op_21e8_0), 8680 }, /* MOVE */ { CPUFUNC(op_21f0_0), 8688 }, /* MOVE */ { CPUFUNC(op_21f8_0), 8696 }, /* MOVE */ { CPUFUNC(op_21f9_0), 8697 }, /* MOVE */ { CPUFUNC(op_21fa_0), 8698 }, /* MOVE */ { CPUFUNC(op_21fb_0), 8699 }, /* MOVE */ { CPUFUNC(op_21fc_0), 8700 }, /* MOVE */ { CPUFUNC(op_23c0_0), 9152 }, /* MOVE */ { CPUFUNC(op_23c8_0), 9160 }, /* MOVE */ { CPUFUNC(op_23d0_0), 9168 }, /* MOVE */ { CPUFUNC(op_23d8_0), 9176 }, /* MOVE */ { CPUFUNC(op_23e0_0), 9184 }, /* MOVE */ { CPUFUNC(op_23e8_0), 9192 }, /* MOVE */ { CPUFUNC(op_23f0_0), 9200 }, /* MOVE */ { CPUFUNC(op_23f8_0), 9208 }, /* MOVE */ { CPUFUNC(op_23f9_0), 9209 }, /* MOVE */ { CPUFUNC(op_23fa_0), 9210 }, /* MOVE */ { CPUFUNC(op_23fb_0), 9211 }, /* MOVE */ { CPUFUNC(op_23fc_0), 9212 }, /* MOVE */ { CPUFUNC(op_3000_0), 12288 }, /* MOVE */ { CPUFUNC(op_3008_0), 12296 }, /* MOVE */ { CPUFUNC(op_3010_0), 12304 }, /* MOVE */ { CPUFUNC(op_3018_0), 12312 }, /* MOVE */ { CPUFUNC(op_3020_0), 12320 }, /* MOVE */ { CPUFUNC(op_3028_0), 12328 }, /* MOVE */ { CPUFUNC(op_3030_0), 12336 }, /* MOVE */ { CPUFUNC(op_3038_0), 12344 }, /* MOVE */ { CPUFUNC(op_3039_0), 12345 }, /* MOVE */ { CPUFUNC(op_303a_0), 12346 }, /* MOVE */ { CPUFUNC(op_303b_0), 12347 }, /* MOVE */ { CPUFUNC(op_303c_0), 12348 }, /* MOVE */ { CPUFUNC(op_3040_0), 12352 }, /* MOVEA */ { CPUFUNC(op_3048_0), 12360 }, /* MOVEA */ { CPUFUNC(op_3050_0), 12368 }, /* MOVEA */ { CPUFUNC(op_3058_0), 12376 }, /* MOVEA */ { CPUFUNC(op_3060_0), 12384 }, /* MOVEA */ { CPUFUNC(op_3068_0), 12392 }, /* MOVEA */ { CPUFUNC(op_3070_0), 12400 }, /* MOVEA */ { CPUFUNC(op_3078_0), 12408 }, /* MOVEA */ { CPUFUNC(op_3079_0), 12409 }, /* MOVEA */ { CPUFUNC(op_307a_0), 12410 }, /* MOVEA */ { CPUFUNC(op_307b_0), 12411 }, /* MOVEA */ { CPUFUNC(op_307c_0), 12412 }, /* MOVEA */ { CPUFUNC(op_3080_0), 12416 }, /* MOVE */ { CPUFUNC(op_3088_0), 12424 }, /* MOVE */ { CPUFUNC(op_3090_0), 12432 }, /* MOVE */ { CPUFUNC(op_3098_0), 12440 }, /* MOVE */ { CPUFUNC(op_30a0_0), 12448 }, /* MOVE */ { CPUFUNC(op_30a8_0), 12456 }, /* MOVE */ { CPUFUNC(op_30b0_0), 12464 }, /* MOVE */ { CPUFUNC(op_30b8_0), 12472 }, /* MOVE */ { CPUFUNC(op_30b9_0), 12473 }, /* MOVE */ { CPUFUNC(op_30ba_0), 12474 }, /* MOVE */ { CPUFUNC(op_30bb_0), 12475 }, /* MOVE */ { CPUFUNC(op_30bc_0), 12476 }, /* MOVE */ { CPUFUNC(op_30c0_0), 12480 }, /* MOVE */ { CPUFUNC(op_30c8_0), 12488 }, /* MOVE */ { CPUFUNC(op_30d0_0), 12496 }, /* MOVE */ { CPUFUNC(op_30d8_0), 12504 }, /* MOVE */ { CPUFUNC(op_30e0_0), 12512 }, /* MOVE */ { CPUFUNC(op_30e8_0), 12520 }, /* MOVE */ { CPUFUNC(op_30f0_0), 12528 }, /* MOVE */ { CPUFUNC(op_30f8_0), 12536 }, /* MOVE */ { CPUFUNC(op_30f9_0), 12537 }, /* MOVE */ { CPUFUNC(op_30fa_0), 12538 }, /* MOVE */ { CPUFUNC(op_30fb_0), 12539 }, /* MOVE */ { CPUFUNC(op_30fc_0), 12540 }, /* MOVE */ { CPUFUNC(op_3100_0), 12544 }, /* MOVE */ { CPUFUNC(op_3108_0), 12552 }, /* MOVE */ { CPUFUNC(op_3110_0), 12560 }, /* MOVE */ { CPUFUNC(op_3118_0), 12568 }, /* MOVE */ { CPUFUNC(op_3120_0), 12576 }, /* MOVE */ { CPUFUNC(op_3128_0), 12584 }, /* MOVE */ { CPUFUNC(op_3130_0), 12592 }, /* MOVE */ { CPUFUNC(op_3138_0), 12600 }, /* MOVE */ { CPUFUNC(op_3139_0), 12601 }, /* MOVE */ { CPUFUNC(op_313a_0), 12602 }, /* MOVE */ { CPUFUNC(op_313b_0), 12603 }, /* MOVE */ { CPUFUNC(op_313c_0), 12604 }, /* MOVE */ { CPUFUNC(op_3140_0), 12608 }, /* MOVE */ { CPUFUNC(op_3148_0), 12616 }, /* MOVE */ { CPUFUNC(op_3150_0), 12624 }, /* MOVE */ { CPUFUNC(op_3158_0), 12632 }, /* MOVE */ { CPUFUNC(op_3160_0), 12640 }, /* MOVE */ { CPUFUNC(op_3168_0), 12648 }, /* MOVE */ { CPUFUNC(op_3170_0), 12656 }, /* MOVE */ { CPUFUNC(op_3178_0), 12664 }, /* MOVE */ { CPUFUNC(op_3179_0), 12665 }, /* MOVE */ { CPUFUNC(op_317a_0), 12666 }, /* MOVE */ { CPUFUNC(op_317b_0), 12667 }, /* MOVE */ { CPUFUNC(op_317c_0), 12668 }, /* MOVE */ { CPUFUNC(op_3180_0), 12672 }, /* MOVE */ { CPUFUNC(op_3188_0), 12680 }, /* MOVE */ { CPUFUNC(op_3190_0), 12688 }, /* MOVE */ { CPUFUNC(op_3198_0), 12696 }, /* MOVE */ { CPUFUNC(op_31a0_0), 12704 }, /* MOVE */ { CPUFUNC(op_31a8_0), 12712 }, /* MOVE */ { CPUFUNC(op_31b0_0), 12720 }, /* MOVE */ { CPUFUNC(op_31b8_0), 12728 }, /* MOVE */ { CPUFUNC(op_31b9_0), 12729 }, /* MOVE */ { CPUFUNC(op_31ba_0), 12730 }, /* MOVE */ { CPUFUNC(op_31bb_0), 12731 }, /* MOVE */ { CPUFUNC(op_31bc_0), 12732 }, /* MOVE */ { CPUFUNC(op_31c0_0), 12736 }, /* MOVE */ { CPUFUNC(op_31c8_0), 12744 }, /* MOVE */ { CPUFUNC(op_31d0_0), 12752 }, /* MOVE */ { CPUFUNC(op_31d8_0), 12760 }, /* MOVE */ { CPUFUNC(op_31e0_0), 12768 }, /* MOVE */ { CPUFUNC(op_31e8_0), 12776 }, /* MOVE */ { CPUFUNC(op_31f0_0), 12784 }, /* MOVE */ { CPUFUNC(op_31f8_0), 12792 }, /* MOVE */ { CPUFUNC(op_31f9_0), 12793 }, /* MOVE */ { CPUFUNC(op_31fa_0), 12794 }, /* MOVE */ { CPUFUNC(op_31fb_0), 12795 }, /* MOVE */ { CPUFUNC(op_31fc_0), 12796 }, /* MOVE */ { CPUFUNC(op_33c0_0), 13248 }, /* MOVE */ { CPUFUNC(op_33c8_0), 13256 }, /* MOVE */ { CPUFUNC(op_33d0_0), 13264 }, /* MOVE */ { CPUFUNC(op_33d8_0), 13272 }, /* MOVE */ { CPUFUNC(op_33e0_0), 13280 }, /* MOVE */ { CPUFUNC(op_33e8_0), 13288 }, /* MOVE */ { CPUFUNC(op_33f0_0), 13296 }, /* MOVE */ { CPUFUNC(op_33f8_0), 13304 }, /* MOVE */ { CPUFUNC(op_33f9_0), 13305 }, /* MOVE */ { CPUFUNC(op_33fa_0), 13306 }, /* MOVE */ { CPUFUNC(op_33fb_0), 13307 }, /* MOVE */ { CPUFUNC(op_33fc_0), 13308 }, /* MOVE */ { CPUFUNC(op_4000_0), 16384 }, /* NEGX */ { CPUFUNC(op_4010_0), 16400 }, /* NEGX */ { CPUFUNC(op_4018_0), 16408 }, /* NEGX */ { CPUFUNC(op_4020_0), 16416 }, /* NEGX */ { CPUFUNC(op_4028_0), 16424 }, /* NEGX */ { CPUFUNC(op_4030_0), 16432 }, /* NEGX */ { CPUFUNC(op_4038_0), 16440 }, /* NEGX */ { CPUFUNC(op_4039_0), 16441 }, /* NEGX */ { CPUFUNC(op_4040_0), 16448 }, /* NEGX */ { CPUFUNC(op_4050_0), 16464 }, /* NEGX */ { CPUFUNC(op_4058_0), 16472 }, /* NEGX */ { CPUFUNC(op_4060_0), 16480 }, /* NEGX */ { CPUFUNC(op_4068_0), 16488 }, /* NEGX */ { CPUFUNC(op_4070_0), 16496 }, /* NEGX */ { CPUFUNC(op_4078_0), 16504 }, /* NEGX */ { CPUFUNC(op_4079_0), 16505 }, /* NEGX */ { CPUFUNC(op_4080_0), 16512 }, /* NEGX */ { CPUFUNC(op_4090_0), 16528 }, /* NEGX */ { CPUFUNC(op_4098_0), 16536 }, /* NEGX */ { CPUFUNC(op_40a0_0), 16544 }, /* NEGX */ { CPUFUNC(op_40a8_0), 16552 }, /* NEGX */ { CPUFUNC(op_40b0_0), 16560 }, /* NEGX */ { CPUFUNC(op_40b8_0), 16568 }, /* NEGX */ { CPUFUNC(op_40b9_0), 16569 }, /* NEGX */ { CPUFUNC(op_40c0_0), 16576 }, /* MVSR2 */ { CPUFUNC(op_40d0_0), 16592 }, /* MVSR2 */ { CPUFUNC(op_40d8_0), 16600 }, /* MVSR2 */ { CPUFUNC(op_40e0_0), 16608 }, /* MVSR2 */ { CPUFUNC(op_40e8_0), 16616 }, /* MVSR2 */ { CPUFUNC(op_40f0_0), 16624 }, /* MVSR2 */ { CPUFUNC(op_40f8_0), 16632 }, /* MVSR2 */ { CPUFUNC(op_40f9_0), 16633 }, /* MVSR2 */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4100_0), 16640 }, /* CHK */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4110_0), 16656 }, /* CHK */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4118_0), 16664 }, /* CHK */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4120_0), 16672 }, /* CHK */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4128_0), 16680 }, /* CHK */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4130_0), 16688 }, /* CHK */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4138_0), 16696 }, /* CHK */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4139_0), 16697 }, /* CHK */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_413a_0), 16698 }, /* CHK */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_413b_0), 16699 }, /* CHK */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_413c_0), 16700 }, /* CHK */ #endif { CPUFUNC(op_4180_0), 16768 }, /* CHK */ { CPUFUNC(op_4190_0), 16784 }, /* CHK */ { CPUFUNC(op_4198_0), 16792 }, /* CHK */ { CPUFUNC(op_41a0_0), 16800 }, /* CHK */ { CPUFUNC(op_41a8_0), 16808 }, /* CHK */ { CPUFUNC(op_41b0_0), 16816 }, /* CHK */ { CPUFUNC(op_41b8_0), 16824 }, /* CHK */ { CPUFUNC(op_41b9_0), 16825 }, /* CHK */ { CPUFUNC(op_41ba_0), 16826 }, /* CHK */ { CPUFUNC(op_41bb_0), 16827 }, /* CHK */ { CPUFUNC(op_41bc_0), 16828 }, /* CHK */ { CPUFUNC(op_41d0_0), 16848 }, /* LEA */ { CPUFUNC(op_41e8_0), 16872 }, /* LEA */ { CPUFUNC(op_41f0_0), 16880 }, /* LEA */ { CPUFUNC(op_41f8_0), 16888 }, /* LEA */ { CPUFUNC(op_41f9_0), 16889 }, /* LEA */ { CPUFUNC(op_41fa_0), 16890 }, /* LEA */ { CPUFUNC(op_41fb_0), 16891 }, /* LEA */ { CPUFUNC(op_4200_0), 16896 }, /* CLR */ { CPUFUNC(op_4210_0), 16912 }, /* CLR */ { CPUFUNC(op_4218_0), 16920 }, /* CLR */ { CPUFUNC(op_4220_0), 16928 }, /* CLR */ { CPUFUNC(op_4228_0), 16936 }, /* CLR */ { CPUFUNC(op_4230_0), 16944 }, /* CLR */ { CPUFUNC(op_4238_0), 16952 }, /* CLR */ { CPUFUNC(op_4239_0), 16953 }, /* CLR */ { CPUFUNC(op_4240_0), 16960 }, /* CLR */ { CPUFUNC(op_4250_0), 16976 }, /* CLR */ { CPUFUNC(op_4258_0), 16984 }, /* CLR */ { CPUFUNC(op_4260_0), 16992 }, /* CLR */ { CPUFUNC(op_4268_0), 17000 }, /* CLR */ { CPUFUNC(op_4270_0), 17008 }, /* CLR */ { CPUFUNC(op_4278_0), 17016 }, /* CLR */ { CPUFUNC(op_4279_0), 17017 }, /* CLR */ { CPUFUNC(op_4280_0), 17024 }, /* CLR */ { CPUFUNC(op_4290_0), 17040 }, /* CLR */ { CPUFUNC(op_4298_0), 17048 }, /* CLR */ { CPUFUNC(op_42a0_0), 17056 }, /* CLR */ { CPUFUNC(op_42a8_0), 17064 }, /* CLR */ { CPUFUNC(op_42b0_0), 17072 }, /* CLR */ { CPUFUNC(op_42b8_0), 17080 }, /* CLR */ { CPUFUNC(op_42b9_0), 17081 }, /* CLR */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_42c0_0), 17088 }, /* MVSR2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_42d0_0), 17104 }, /* MVSR2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_42d8_0), 17112 }, /* MVSR2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_42e0_0), 17120 }, /* MVSR2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_42e8_0), 17128 }, /* MVSR2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_42f0_0), 17136 }, /* MVSR2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_42f8_0), 17144 }, /* MVSR2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_42f9_0), 17145 }, /* MVSR2 */ #endif { CPUFUNC(op_4400_0), 17408 }, /* NEG */ { CPUFUNC(op_4410_0), 17424 }, /* NEG */ { CPUFUNC(op_4418_0), 17432 }, /* NEG */ { CPUFUNC(op_4420_0), 17440 }, /* NEG */ { CPUFUNC(op_4428_0), 17448 }, /* NEG */ { CPUFUNC(op_4430_0), 17456 }, /* NEG */ { CPUFUNC(op_4438_0), 17464 }, /* NEG */ { CPUFUNC(op_4439_0), 17465 }, /* NEG */ { CPUFUNC(op_4440_0), 17472 }, /* NEG */ { CPUFUNC(op_4450_0), 17488 }, /* NEG */ { CPUFUNC(op_4458_0), 17496 }, /* NEG */ { CPUFUNC(op_4460_0), 17504 }, /* NEG */ { CPUFUNC(op_4468_0), 17512 }, /* NEG */ { CPUFUNC(op_4470_0), 17520 }, /* NEG */ { CPUFUNC(op_4478_0), 17528 }, /* NEG */ { CPUFUNC(op_4479_0), 17529 }, /* NEG */ { CPUFUNC(op_4480_0), 17536 }, /* NEG */ { CPUFUNC(op_4490_0), 17552 }, /* NEG */ { CPUFUNC(op_4498_0), 17560 }, /* NEG */ { CPUFUNC(op_44a0_0), 17568 }, /* NEG */ { CPUFUNC(op_44a8_0), 17576 }, /* NEG */ { CPUFUNC(op_44b0_0), 17584 }, /* NEG */ { CPUFUNC(op_44b8_0), 17592 }, /* NEG */ { CPUFUNC(op_44b9_0), 17593 }, /* NEG */ { CPUFUNC(op_44c0_0), 17600 }, /* MV2SR */ { CPUFUNC(op_44d0_0), 17616 }, /* MV2SR */ { CPUFUNC(op_44d8_0), 17624 }, /* MV2SR */ { CPUFUNC(op_44e0_0), 17632 }, /* MV2SR */ { CPUFUNC(op_44e8_0), 17640 }, /* MV2SR */ { CPUFUNC(op_44f0_0), 17648 }, /* MV2SR */ { CPUFUNC(op_44f8_0), 17656 }, /* MV2SR */ { CPUFUNC(op_44f9_0), 17657 }, /* MV2SR */ { CPUFUNC(op_44fa_0), 17658 }, /* MV2SR */ { CPUFUNC(op_44fb_0), 17659 }, /* MV2SR */ { CPUFUNC(op_44fc_0), 17660 }, /* MV2SR */ { CPUFUNC(op_4600_0), 17920 }, /* NOT */ { CPUFUNC(op_4610_0), 17936 }, /* NOT */ { CPUFUNC(op_4618_0), 17944 }, /* NOT */ { CPUFUNC(op_4620_0), 17952 }, /* NOT */ { CPUFUNC(op_4628_0), 17960 }, /* NOT */ { CPUFUNC(op_4630_0), 17968 }, /* NOT */ { CPUFUNC(op_4638_0), 17976 }, /* NOT */ { CPUFUNC(op_4639_0), 17977 }, /* NOT */ { CPUFUNC(op_4640_0), 17984 }, /* NOT */ { CPUFUNC(op_4650_0), 18000 }, /* NOT */ { CPUFUNC(op_4658_0), 18008 }, /* NOT */ { CPUFUNC(op_4660_0), 18016 }, /* NOT */ { CPUFUNC(op_4668_0), 18024 }, /* NOT */ { CPUFUNC(op_4670_0), 18032 }, /* NOT */ { CPUFUNC(op_4678_0), 18040 }, /* NOT */ { CPUFUNC(op_4679_0), 18041 }, /* NOT */ { CPUFUNC(op_4680_0), 18048 }, /* NOT */ { CPUFUNC(op_4690_0), 18064 }, /* NOT */ { CPUFUNC(op_4698_0), 18072 }, /* NOT */ { CPUFUNC(op_46a0_0), 18080 }, /* NOT */ { CPUFUNC(op_46a8_0), 18088 }, /* NOT */ { CPUFUNC(op_46b0_0), 18096 }, /* NOT */ { CPUFUNC(op_46b8_0), 18104 }, /* NOT */ { CPUFUNC(op_46b9_0), 18105 }, /* NOT */ { CPUFUNC(op_46c0_0), 18112 }, /* MV2SR */ { CPUFUNC(op_46d0_0), 18128 }, /* MV2SR */ { CPUFUNC(op_46d8_0), 18136 }, /* MV2SR */ { CPUFUNC(op_46e0_0), 18144 }, /* MV2SR */ { CPUFUNC(op_46e8_0), 18152 }, /* MV2SR */ { CPUFUNC(op_46f0_0), 18160 }, /* MV2SR */ { CPUFUNC(op_46f8_0), 18168 }, /* MV2SR */ { CPUFUNC(op_46f9_0), 18169 }, /* MV2SR */ { CPUFUNC(op_46fa_0), 18170 }, /* MV2SR */ { CPUFUNC(op_46fb_0), 18171 }, /* MV2SR */ { CPUFUNC(op_46fc_0), 18172 }, /* MV2SR */ { CPUFUNC(op_4800_0), 18432 }, /* NBCD */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4808_0), 18440 }, /* LINK */ #endif { CPUFUNC(op_4810_0), 18448 }, /* NBCD */ { CPUFUNC(op_4818_0), 18456 }, /* NBCD */ { CPUFUNC(op_4820_0), 18464 }, /* NBCD */ { CPUFUNC(op_4828_0), 18472 }, /* NBCD */ { CPUFUNC(op_4830_0), 18480 }, /* NBCD */ { CPUFUNC(op_4838_0), 18488 }, /* NBCD */ { CPUFUNC(op_4839_0), 18489 }, /* NBCD */ { CPUFUNC(op_4840_0), 18496 }, /* SWAP */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4848_0), 18504 }, /* BKPT */ #endif { CPUFUNC(op_4850_0), 18512 }, /* PEA */ { CPUFUNC(op_4868_0), 18536 }, /* PEA */ { CPUFUNC(op_4870_0), 18544 }, /* PEA */ { CPUFUNC(op_4878_0), 18552 }, /* PEA */ { CPUFUNC(op_4879_0), 18553 }, /* PEA */ { CPUFUNC(op_487a_0), 18554 }, /* PEA */ { CPUFUNC(op_487b_0), 18555 }, /* PEA */ { CPUFUNC(op_4880_0), 18560 }, /* EXT */ { CPUFUNC(op_4890_0), 18576 }, /* MVMLE */ { CPUFUNC(op_48a0_0), 18592 }, /* MVMLE */ { CPUFUNC(op_48a8_0), 18600 }, /* MVMLE */ { CPUFUNC(op_48b0_0), 18608 }, /* MVMLE */ { CPUFUNC(op_48b8_0), 18616 }, /* MVMLE */ { CPUFUNC(op_48b9_0), 18617 }, /* MVMLE */ { CPUFUNC(op_48c0_0), 18624 }, /* EXT */ { CPUFUNC(op_48d0_0), 18640 }, /* MVMLE */ { CPUFUNC(op_48e0_0), 18656 }, /* MVMLE */ { CPUFUNC(op_48e8_0), 18664 }, /* MVMLE */ { CPUFUNC(op_48f0_0), 18672 }, /* MVMLE */ { CPUFUNC(op_48f8_0), 18680 }, /* MVMLE */ { CPUFUNC(op_48f9_0), 18681 }, /* MVMLE */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_49c0_0), 18880 }, /* EXT */ #endif { CPUFUNC(op_4a00_0), 18944 }, /* TST */ { CPUFUNC(op_4a10_0), 18960 }, /* TST */ { CPUFUNC(op_4a18_0), 18968 }, /* TST */ { CPUFUNC(op_4a20_0), 18976 }, /* TST */ { CPUFUNC(op_4a28_0), 18984 }, /* TST */ { CPUFUNC(op_4a30_0), 18992 }, /* TST */ { CPUFUNC(op_4a38_0), 19000 }, /* TST */ { CPUFUNC(op_4a39_0), 19001 }, /* TST */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4a3a_0), 19002 }, /* TST */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4a3b_0), 19003 }, /* TST */ #endif { CPUFUNC(op_4a3c_0), 19004 }, /* TST */ { CPUFUNC(op_4a40_0), 19008 }, /* TST */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4a48_0), 19016 }, /* TST */ #endif { CPUFUNC(op_4a50_0), 19024 }, /* TST */ { CPUFUNC(op_4a58_0), 19032 }, /* TST */ { CPUFUNC(op_4a60_0), 19040 }, /* TST */ { CPUFUNC(op_4a68_0), 19048 }, /* TST */ { CPUFUNC(op_4a70_0), 19056 }, /* TST */ { CPUFUNC(op_4a78_0), 19064 }, /* TST */ { CPUFUNC(op_4a79_0), 19065 }, /* TST */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4a7a_0), 19066 }, /* TST */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4a7b_0), 19067 }, /* TST */ #endif { CPUFUNC(op_4a7c_0), 19068 }, /* TST */ { CPUFUNC(op_4a80_0), 19072 }, /* TST */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4a88_0), 19080 }, /* TST */ #endif { CPUFUNC(op_4a90_0), 19088 }, /* TST */ { CPUFUNC(op_4a98_0), 19096 }, /* TST */ { CPUFUNC(op_4aa0_0), 19104 }, /* TST */ { CPUFUNC(op_4aa8_0), 19112 }, /* TST */ { CPUFUNC(op_4ab0_0), 19120 }, /* TST */ { CPUFUNC(op_4ab8_0), 19128 }, /* TST */ { CPUFUNC(op_4ab9_0), 19129 }, /* TST */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4aba_0), 19130 }, /* TST */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4abb_0), 19131 }, /* TST */ #endif { CPUFUNC(op_4abc_0), 19132 }, /* TST */ { CPUFUNC(op_4ac0_0), 19136 }, /* TAS */ { CPUFUNC(op_4ad0_0), 19152 }, /* TAS */ { CPUFUNC(op_4ad8_0), 19160 }, /* TAS */ { CPUFUNC(op_4ae0_0), 19168 }, /* TAS */ { CPUFUNC(op_4ae8_0), 19176 }, /* TAS */ { CPUFUNC(op_4af0_0), 19184 }, /* TAS */ { CPUFUNC(op_4af8_0), 19192 }, /* TAS */ { CPUFUNC(op_4af9_0), 19193 }, /* TAS */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4c00_0), 19456 }, /* MULL */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4c10_0), 19472 }, /* MULL */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4c18_0), 19480 }, /* MULL */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4c20_0), 19488 }, /* MULL */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4c28_0), 19496 }, /* MULL */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4c30_0), 19504 }, /* MULL */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4c38_0), 19512 }, /* MULL */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4c39_0), 19513 }, /* MULL */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4c3a_0), 19514 }, /* MULL */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4c3b_0), 19515 }, /* MULL */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4c3c_0), 19516 }, /* MULL */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4c40_0), 19520 }, /* DIVL */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4c50_0), 19536 }, /* DIVL */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4c58_0), 19544 }, /* DIVL */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4c60_0), 19552 }, /* DIVL */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4c68_0), 19560 }, /* DIVL */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4c70_0), 19568 }, /* DIVL */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4c78_0), 19576 }, /* DIVL */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4c79_0), 19577 }, /* DIVL */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4c7a_0), 19578 }, /* DIVL */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4c7b_0), 19579 }, /* DIVL */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4c7c_0), 19580 }, /* DIVL */ #endif { CPUFUNC(op_4c90_0), 19600 }, /* MVMEL */ { CPUFUNC(op_4c98_0), 19608 }, /* MVMEL */ { CPUFUNC(op_4ca8_0), 19624 }, /* MVMEL */ { CPUFUNC(op_4cb0_0), 19632 }, /* MVMEL */ { CPUFUNC(op_4cb8_0), 19640 }, /* MVMEL */ { CPUFUNC(op_4cb9_0), 19641 }, /* MVMEL */ { CPUFUNC(op_4cba_0), 19642 }, /* MVMEL */ { CPUFUNC(op_4cbb_0), 19643 }, /* MVMEL */ { CPUFUNC(op_4cd0_0), 19664 }, /* MVMEL */ { CPUFUNC(op_4cd8_0), 19672 }, /* MVMEL */ { CPUFUNC(op_4ce8_0), 19688 }, /* MVMEL */ { CPUFUNC(op_4cf0_0), 19696 }, /* MVMEL */ { CPUFUNC(op_4cf8_0), 19704 }, /* MVMEL */ { CPUFUNC(op_4cf9_0), 19705 }, /* MVMEL */ { CPUFUNC(op_4cfa_0), 19706 }, /* MVMEL */ { CPUFUNC(op_4cfb_0), 19707 }, /* MVMEL */ { CPUFUNC(op_4e40_0), 20032 }, /* TRAP */ { CPUFUNC(op_4e50_0), 20048 }, /* LINK */ { CPUFUNC(op_4e58_0), 20056 }, /* UNLK */ { CPUFUNC(op_4e60_0), 20064 }, /* MVR2USP */ { CPUFUNC(op_4e68_0), 20072 }, /* MVUSP2R */ { CPUFUNC(op_4e70_0), 20080 }, /* RESET */ { CPUFUNC(op_4e71_0), 20081 }, /* NOP */ { CPUFUNC(op_4e72_0), 20082 }, /* STOP */ { CPUFUNC(op_4e73_0), 20083 }, /* RTE */ { CPUFUNC(op_4e74_0), 20084 }, /* RTD */ { CPUFUNC(op_4e75_0), 20085 }, /* RTS */ { CPUFUNC(op_4e76_0), 20086 }, /* TRAPV */ { CPUFUNC(op_4e77_0), 20087 }, /* RTR */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4e7a_0), 20090 }, /* MOVEC2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4e7b_0), 20091 }, /* MOVE2C */ #endif { CPUFUNC(op_4e90_0), 20112 }, /* JSR */ { CPUFUNC(op_4ea8_0), 20136 }, /* JSR */ { CPUFUNC(op_4eb0_0), 20144 }, /* JSR */ { CPUFUNC(op_4eb8_0), 20152 }, /* JSR */ { CPUFUNC(op_4eb9_0), 20153 }, /* JSR */ { CPUFUNC(op_4eba_0), 20154 }, /* JSR */ { CPUFUNC(op_4ebb_0), 20155 }, /* JSR */ { CPUFUNC(op_4ed0_0), 20176 }, /* JMP */ { CPUFUNC(op_4ee8_0), 20200 }, /* JMP */ { CPUFUNC(op_4ef0_0), 20208 }, /* JMP */ { CPUFUNC(op_4ef8_0), 20216 }, /* JMP */ { CPUFUNC(op_4ef9_0), 20217 }, /* JMP */ { CPUFUNC(op_4efa_0), 20218 }, /* JMP */ { CPUFUNC(op_4efb_0), 20219 }, /* JMP */ { CPUFUNC(op_5000_0), 20480 }, /* ADD */ { CPUFUNC(op_5010_0), 20496 }, /* ADD */ { CPUFUNC(op_5018_0), 20504 }, /* ADD */ { CPUFUNC(op_5020_0), 20512 }, /* ADD */ { CPUFUNC(op_5028_0), 20520 }, /* ADD */ { CPUFUNC(op_5030_0), 20528 }, /* ADD */ { CPUFUNC(op_5038_0), 20536 }, /* ADD */ { CPUFUNC(op_5039_0), 20537 }, /* ADD */ { CPUFUNC(op_5040_0), 20544 }, /* ADD */ { CPUFUNC(op_5048_0), 20552 }, /* ADDA */ { CPUFUNC(op_5050_0), 20560 }, /* ADD */ { CPUFUNC(op_5058_0), 20568 }, /* ADD */ { CPUFUNC(op_5060_0), 20576 }, /* ADD */ { CPUFUNC(op_5068_0), 20584 }, /* ADD */ { CPUFUNC(op_5070_0), 20592 }, /* ADD */ { CPUFUNC(op_5078_0), 20600 }, /* ADD */ { CPUFUNC(op_5079_0), 20601 }, /* ADD */ { CPUFUNC(op_5080_0), 20608 }, /* ADD */ { CPUFUNC(op_5088_0), 20616 }, /* ADDA */ { CPUFUNC(op_5090_0), 20624 }, /* ADD */ { CPUFUNC(op_5098_0), 20632 }, /* ADD */ { CPUFUNC(op_50a0_0), 20640 }, /* ADD */ { CPUFUNC(op_50a8_0), 20648 }, /* ADD */ { CPUFUNC(op_50b0_0), 20656 }, /* ADD */ { CPUFUNC(op_50b8_0), 20664 }, /* ADD */ { CPUFUNC(op_50b9_0), 20665 }, /* ADD */ { CPUFUNC(op_50c0_0), 20672 }, /* Scc */ { CPUFUNC(op_50c8_0), 20680 }, /* DBcc */ { CPUFUNC(op_50d0_0), 20688 }, /* Scc */ { CPUFUNC(op_50d8_0), 20696 }, /* Scc */ { CPUFUNC(op_50e0_0), 20704 }, /* Scc */ { CPUFUNC(op_50e8_0), 20712 }, /* Scc */ { CPUFUNC(op_50f0_0), 20720 }, /* Scc */ { CPUFUNC(op_50f8_0), 20728 }, /* Scc */ { CPUFUNC(op_50f9_0), 20729 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_50fa_0), 20730 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_50fb_0), 20731 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_50fc_0), 20732 }, /* TRAPcc */ #endif { CPUFUNC(op_5100_0), 20736 }, /* SUB */ { CPUFUNC(op_5110_0), 20752 }, /* SUB */ { CPUFUNC(op_5118_0), 20760 }, /* SUB */ { CPUFUNC(op_5120_0), 20768 }, /* SUB */ { CPUFUNC(op_5128_0), 20776 }, /* SUB */ { CPUFUNC(op_5130_0), 20784 }, /* SUB */ { CPUFUNC(op_5138_0), 20792 }, /* SUB */ { CPUFUNC(op_5139_0), 20793 }, /* SUB */ { CPUFUNC(op_5140_0), 20800 }, /* SUB */ { CPUFUNC(op_5148_0), 20808 }, /* SUBA */ { CPUFUNC(op_5150_0), 20816 }, /* SUB */ { CPUFUNC(op_5158_0), 20824 }, /* SUB */ { CPUFUNC(op_5160_0), 20832 }, /* SUB */ { CPUFUNC(op_5168_0), 20840 }, /* SUB */ { CPUFUNC(op_5170_0), 20848 }, /* SUB */ { CPUFUNC(op_5178_0), 20856 }, /* SUB */ { CPUFUNC(op_5179_0), 20857 }, /* SUB */ { CPUFUNC(op_5180_0), 20864 }, /* SUB */ { CPUFUNC(op_5188_0), 20872 }, /* SUBA */ { CPUFUNC(op_5190_0), 20880 }, /* SUB */ { CPUFUNC(op_5198_0), 20888 }, /* SUB */ { CPUFUNC(op_51a0_0), 20896 }, /* SUB */ { CPUFUNC(op_51a8_0), 20904 }, /* SUB */ { CPUFUNC(op_51b0_0), 20912 }, /* SUB */ { CPUFUNC(op_51b8_0), 20920 }, /* SUB */ { CPUFUNC(op_51b9_0), 20921 }, /* SUB */ { CPUFUNC(op_51c0_0), 20928 }, /* Scc */ { CPUFUNC(op_51c8_0), 20936 }, /* DBcc */ { CPUFUNC(op_51d0_0), 20944 }, /* Scc */ { CPUFUNC(op_51d8_0), 20952 }, /* Scc */ { CPUFUNC(op_51e0_0), 20960 }, /* Scc */ { CPUFUNC(op_51e8_0), 20968 }, /* Scc */ { CPUFUNC(op_51f0_0), 20976 }, /* Scc */ { CPUFUNC(op_51f8_0), 20984 }, /* Scc */ { CPUFUNC(op_51f9_0), 20985 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_51fa_0), 20986 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_51fb_0), 20987 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_51fc_0), 20988 }, /* TRAPcc */ #endif { CPUFUNC(op_52c0_0), 21184 }, /* Scc */ { CPUFUNC(op_52c8_0), 21192 }, /* DBcc */ { CPUFUNC(op_52d0_0), 21200 }, /* Scc */ { CPUFUNC(op_52d8_0), 21208 }, /* Scc */ { CPUFUNC(op_52e0_0), 21216 }, /* Scc */ { CPUFUNC(op_52e8_0), 21224 }, /* Scc */ { CPUFUNC(op_52f0_0), 21232 }, /* Scc */ { CPUFUNC(op_52f8_0), 21240 }, /* Scc */ { CPUFUNC(op_52f9_0), 21241 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_52fa_0), 21242 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_52fb_0), 21243 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_52fc_0), 21244 }, /* TRAPcc */ #endif { CPUFUNC(op_53c0_0), 21440 }, /* Scc */ { CPUFUNC(op_53c8_0), 21448 }, /* DBcc */ { CPUFUNC(op_53d0_0), 21456 }, /* Scc */ { CPUFUNC(op_53d8_0), 21464 }, /* Scc */ { CPUFUNC(op_53e0_0), 21472 }, /* Scc */ { CPUFUNC(op_53e8_0), 21480 }, /* Scc */ { CPUFUNC(op_53f0_0), 21488 }, /* Scc */ { CPUFUNC(op_53f8_0), 21496 }, /* Scc */ { CPUFUNC(op_53f9_0), 21497 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_53fa_0), 21498 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_53fb_0), 21499 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_53fc_0), 21500 }, /* TRAPcc */ #endif { CPUFUNC(op_54c0_0), 21696 }, /* Scc */ { CPUFUNC(op_54c8_0), 21704 }, /* DBcc */ { CPUFUNC(op_54d0_0), 21712 }, /* Scc */ { CPUFUNC(op_54d8_0), 21720 }, /* Scc */ { CPUFUNC(op_54e0_0), 21728 }, /* Scc */ { CPUFUNC(op_54e8_0), 21736 }, /* Scc */ { CPUFUNC(op_54f0_0), 21744 }, /* Scc */ { CPUFUNC(op_54f8_0), 21752 }, /* Scc */ { CPUFUNC(op_54f9_0), 21753 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_54fa_0), 21754 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_54fb_0), 21755 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_54fc_0), 21756 }, /* TRAPcc */ #endif { CPUFUNC(op_55c0_0), 21952 }, /* Scc */ { CPUFUNC(op_55c8_0), 21960 }, /* DBcc */ { CPUFUNC(op_55d0_0), 21968 }, /* Scc */ { CPUFUNC(op_55d8_0), 21976 }, /* Scc */ { CPUFUNC(op_55e0_0), 21984 }, /* Scc */ { CPUFUNC(op_55e8_0), 21992 }, /* Scc */ { CPUFUNC(op_55f0_0), 22000 }, /* Scc */ { CPUFUNC(op_55f8_0), 22008 }, /* Scc */ { CPUFUNC(op_55f9_0), 22009 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_55fa_0), 22010 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_55fb_0), 22011 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_55fc_0), 22012 }, /* TRAPcc */ #endif { CPUFUNC(op_56c0_0), 22208 }, /* Scc */ { CPUFUNC(op_56c8_0), 22216 }, /* DBcc */ { CPUFUNC(op_56d0_0), 22224 }, /* Scc */ { CPUFUNC(op_56d8_0), 22232 }, /* Scc */ { CPUFUNC(op_56e0_0), 22240 }, /* Scc */ { CPUFUNC(op_56e8_0), 22248 }, /* Scc */ { CPUFUNC(op_56f0_0), 22256 }, /* Scc */ { CPUFUNC(op_56f8_0), 22264 }, /* Scc */ { CPUFUNC(op_56f9_0), 22265 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_56fa_0), 22266 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_56fb_0), 22267 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_56fc_0), 22268 }, /* TRAPcc */ #endif { CPUFUNC(op_57c0_0), 22464 }, /* Scc */ { CPUFUNC(op_57c8_0), 22472 }, /* DBcc */ { CPUFUNC(op_57d0_0), 22480 }, /* Scc */ { CPUFUNC(op_57d8_0), 22488 }, /* Scc */ { CPUFUNC(op_57e0_0), 22496 }, /* Scc */ { CPUFUNC(op_57e8_0), 22504 }, /* Scc */ { CPUFUNC(op_57f0_0), 22512 }, /* Scc */ { CPUFUNC(op_57f8_0), 22520 }, /* Scc */ { CPUFUNC(op_57f9_0), 22521 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_57fa_0), 22522 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_57fb_0), 22523 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_57fc_0), 22524 }, /* TRAPcc */ #endif { CPUFUNC(op_58c0_0), 22720 }, /* Scc */ { CPUFUNC(op_58c8_0), 22728 }, /* DBcc */ { CPUFUNC(op_58d0_0), 22736 }, /* Scc */ { CPUFUNC(op_58d8_0), 22744 }, /* Scc */ { CPUFUNC(op_58e0_0), 22752 }, /* Scc */ { CPUFUNC(op_58e8_0), 22760 }, /* Scc */ { CPUFUNC(op_58f0_0), 22768 }, /* Scc */ { CPUFUNC(op_58f8_0), 22776 }, /* Scc */ { CPUFUNC(op_58f9_0), 22777 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_58fa_0), 22778 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_58fb_0), 22779 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_58fc_0), 22780 }, /* TRAPcc */ #endif { CPUFUNC(op_59c0_0), 22976 }, /* Scc */ { CPUFUNC(op_59c8_0), 22984 }, /* DBcc */ { CPUFUNC(op_59d0_0), 22992 }, /* Scc */ { CPUFUNC(op_59d8_0), 23000 }, /* Scc */ { CPUFUNC(op_59e0_0), 23008 }, /* Scc */ { CPUFUNC(op_59e8_0), 23016 }, /* Scc */ { CPUFUNC(op_59f0_0), 23024 }, /* Scc */ { CPUFUNC(op_59f8_0), 23032 }, /* Scc */ { CPUFUNC(op_59f9_0), 23033 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_59fa_0), 23034 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_59fb_0), 23035 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_59fc_0), 23036 }, /* TRAPcc */ #endif { CPUFUNC(op_5ac0_0), 23232 }, /* Scc */ { CPUFUNC(op_5ac8_0), 23240 }, /* DBcc */ { CPUFUNC(op_5ad0_0), 23248 }, /* Scc */ { CPUFUNC(op_5ad8_0), 23256 }, /* Scc */ { CPUFUNC(op_5ae0_0), 23264 }, /* Scc */ { CPUFUNC(op_5ae8_0), 23272 }, /* Scc */ { CPUFUNC(op_5af0_0), 23280 }, /* Scc */ { CPUFUNC(op_5af8_0), 23288 }, /* Scc */ { CPUFUNC(op_5af9_0), 23289 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_5afa_0), 23290 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_5afb_0), 23291 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_5afc_0), 23292 }, /* TRAPcc */ #endif { CPUFUNC(op_5bc0_0), 23488 }, /* Scc */ { CPUFUNC(op_5bc8_0), 23496 }, /* DBcc */ { CPUFUNC(op_5bd0_0), 23504 }, /* Scc */ { CPUFUNC(op_5bd8_0), 23512 }, /* Scc */ { CPUFUNC(op_5be0_0), 23520 }, /* Scc */ { CPUFUNC(op_5be8_0), 23528 }, /* Scc */ { CPUFUNC(op_5bf0_0), 23536 }, /* Scc */ { CPUFUNC(op_5bf8_0), 23544 }, /* Scc */ { CPUFUNC(op_5bf9_0), 23545 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_5bfa_0), 23546 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_5bfb_0), 23547 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_5bfc_0), 23548 }, /* TRAPcc */ #endif { CPUFUNC(op_5cc0_0), 23744 }, /* Scc */ { CPUFUNC(op_5cc8_0), 23752 }, /* DBcc */ { CPUFUNC(op_5cd0_0), 23760 }, /* Scc */ { CPUFUNC(op_5cd8_0), 23768 }, /* Scc */ { CPUFUNC(op_5ce0_0), 23776 }, /* Scc */ { CPUFUNC(op_5ce8_0), 23784 }, /* Scc */ { CPUFUNC(op_5cf0_0), 23792 }, /* Scc */ { CPUFUNC(op_5cf8_0), 23800 }, /* Scc */ { CPUFUNC(op_5cf9_0), 23801 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_5cfa_0), 23802 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_5cfb_0), 23803 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_5cfc_0), 23804 }, /* TRAPcc */ #endif { CPUFUNC(op_5dc0_0), 24000 }, /* Scc */ { CPUFUNC(op_5dc8_0), 24008 }, /* DBcc */ { CPUFUNC(op_5dd0_0), 24016 }, /* Scc */ { CPUFUNC(op_5dd8_0), 24024 }, /* Scc */ { CPUFUNC(op_5de0_0), 24032 }, /* Scc */ { CPUFUNC(op_5de8_0), 24040 }, /* Scc */ { CPUFUNC(op_5df0_0), 24048 }, /* Scc */ { CPUFUNC(op_5df8_0), 24056 }, /* Scc */ { CPUFUNC(op_5df9_0), 24057 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_5dfa_0), 24058 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_5dfb_0), 24059 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_5dfc_0), 24060 }, /* TRAPcc */ #endif { CPUFUNC(op_5ec0_0), 24256 }, /* Scc */ { CPUFUNC(op_5ec8_0), 24264 }, /* DBcc */ { CPUFUNC(op_5ed0_0), 24272 }, /* Scc */ { CPUFUNC(op_5ed8_0), 24280 }, /* Scc */ { CPUFUNC(op_5ee0_0), 24288 }, /* Scc */ { CPUFUNC(op_5ee8_0), 24296 }, /* Scc */ { CPUFUNC(op_5ef0_0), 24304 }, /* Scc */ { CPUFUNC(op_5ef8_0), 24312 }, /* Scc */ { CPUFUNC(op_5ef9_0), 24313 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_5efa_0), 24314 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_5efb_0), 24315 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_5efc_0), 24316 }, /* TRAPcc */ #endif { CPUFUNC(op_5fc0_0), 24512 }, /* Scc */ { CPUFUNC(op_5fc8_0), 24520 }, /* DBcc */ { CPUFUNC(op_5fd0_0), 24528 }, /* Scc */ { CPUFUNC(op_5fd8_0), 24536 }, /* Scc */ { CPUFUNC(op_5fe0_0), 24544 }, /* Scc */ { CPUFUNC(op_5fe8_0), 24552 }, /* Scc */ { CPUFUNC(op_5ff0_0), 24560 }, /* Scc */ { CPUFUNC(op_5ff8_0), 24568 }, /* Scc */ { CPUFUNC(op_5ff9_0), 24569 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_5ffa_0), 24570 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_5ffb_0), 24571 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_5ffc_0), 24572 }, /* TRAPcc */ #endif { CPUFUNC(op_6000_0), 24576 }, /* Bcc */ { CPUFUNC(op_6001_0), 24577 }, /* Bcc */ { CPUFUNC(op_60ff_0), 24831 }, /* Bcc */ { CPUFUNC(op_6100_0), 24832 }, /* BSR */ { CPUFUNC(op_6101_0), 24833 }, /* BSR */ { CPUFUNC(op_61ff_0), 25087 }, /* BSR */ { CPUFUNC(op_6200_0), 25088 }, /* Bcc */ { CPUFUNC(op_6201_0), 25089 }, /* Bcc */ { CPUFUNC(op_62ff_0), 25343 }, /* Bcc */ { CPUFUNC(op_6300_0), 25344 }, /* Bcc */ { CPUFUNC(op_6301_0), 25345 }, /* Bcc */ { CPUFUNC(op_63ff_0), 25599 }, /* Bcc */ { CPUFUNC(op_6400_0), 25600 }, /* Bcc */ { CPUFUNC(op_6401_0), 25601 }, /* Bcc */ { CPUFUNC(op_64ff_0), 25855 }, /* Bcc */ { CPUFUNC(op_6500_0), 25856 }, /* Bcc */ { CPUFUNC(op_6501_0), 25857 }, /* Bcc */ { CPUFUNC(op_65ff_0), 26111 }, /* Bcc */ { CPUFUNC(op_6600_0), 26112 }, /* Bcc */ { CPUFUNC(op_6601_0), 26113 }, /* Bcc */ { CPUFUNC(op_66ff_0), 26367 }, /* Bcc */ { CPUFUNC(op_6700_0), 26368 }, /* Bcc */ { CPUFUNC(op_6701_0), 26369 }, /* Bcc */ { CPUFUNC(op_67ff_0), 26623 }, /* Bcc */ { CPUFUNC(op_6800_0), 26624 }, /* Bcc */ { CPUFUNC(op_6801_0), 26625 }, /* Bcc */ { CPUFUNC(op_68ff_0), 26879 }, /* Bcc */ { CPUFUNC(op_6900_0), 26880 }, /* Bcc */ { CPUFUNC(op_6901_0), 26881 }, /* Bcc */ { CPUFUNC(op_69ff_0), 27135 }, /* Bcc */ { CPUFUNC(op_6a00_0), 27136 }, /* Bcc */ { CPUFUNC(op_6a01_0), 27137 }, /* Bcc */ { CPUFUNC(op_6aff_0), 27391 }, /* Bcc */ { CPUFUNC(op_6b00_0), 27392 }, /* Bcc */ { CPUFUNC(op_6b01_0), 27393 }, /* Bcc */ { CPUFUNC(op_6bff_0), 27647 }, /* Bcc */ { CPUFUNC(op_6c00_0), 27648 }, /* Bcc */ { CPUFUNC(op_6c01_0), 27649 }, /* Bcc */ { CPUFUNC(op_6cff_0), 27903 }, /* Bcc */ { CPUFUNC(op_6d00_0), 27904 }, /* Bcc */ { CPUFUNC(op_6d01_0), 27905 }, /* Bcc */ { CPUFUNC(op_6dff_0), 28159 }, /* Bcc */ { CPUFUNC(op_6e00_0), 28160 }, /* Bcc */ { CPUFUNC(op_6e01_0), 28161 }, /* Bcc */ { CPUFUNC(op_6eff_0), 28415 }, /* Bcc */ { CPUFUNC(op_6f00_0), 28416 }, /* Bcc */ { CPUFUNC(op_6f01_0), 28417 }, /* Bcc */ { CPUFUNC(op_6fff_0), 28671 }, /* Bcc */ { CPUFUNC(op_7000_0), 28672 }, /* MOVE */ { CPUFUNC(op_8000_0), 32768 }, /* OR */ { CPUFUNC(op_8010_0), 32784 }, /* OR */ { CPUFUNC(op_8018_0), 32792 }, /* OR */ { CPUFUNC(op_8020_0), 32800 }, /* OR */ { CPUFUNC(op_8028_0), 32808 }, /* OR */ { CPUFUNC(op_8030_0), 32816 }, /* OR */ { CPUFUNC(op_8038_0), 32824 }, /* OR */ { CPUFUNC(op_8039_0), 32825 }, /* OR */ { CPUFUNC(op_803a_0), 32826 }, /* OR */ { CPUFUNC(op_803b_0), 32827 }, /* OR */ { CPUFUNC(op_803c_0), 32828 }, /* OR */ { CPUFUNC(op_8040_0), 32832 }, /* OR */ { CPUFUNC(op_8050_0), 32848 }, /* OR */ { CPUFUNC(op_8058_0), 32856 }, /* OR */ { CPUFUNC(op_8060_0), 32864 }, /* OR */ { CPUFUNC(op_8068_0), 32872 }, /* OR */ { CPUFUNC(op_8070_0), 32880 }, /* OR */ { CPUFUNC(op_8078_0), 32888 }, /* OR */ { CPUFUNC(op_8079_0), 32889 }, /* OR */ { CPUFUNC(op_807a_0), 32890 }, /* OR */ { CPUFUNC(op_807b_0), 32891 }, /* OR */ { CPUFUNC(op_807c_0), 32892 }, /* OR */ { CPUFUNC(op_8080_0), 32896 }, /* OR */ { CPUFUNC(op_8090_0), 32912 }, /* OR */ { CPUFUNC(op_8098_0), 32920 }, /* OR */ { CPUFUNC(op_80a0_0), 32928 }, /* OR */ { CPUFUNC(op_80a8_0), 32936 }, /* OR */ { CPUFUNC(op_80b0_0), 32944 }, /* OR */ { CPUFUNC(op_80b8_0), 32952 }, /* OR */ { CPUFUNC(op_80b9_0), 32953 }, /* OR */ { CPUFUNC(op_80ba_0), 32954 }, /* OR */ { CPUFUNC(op_80bb_0), 32955 }, /* OR */ { CPUFUNC(op_80bc_0), 32956 }, /* OR */ { CPUFUNC(op_80c0_0), 32960 }, /* DIVU */ { CPUFUNC(op_80d0_0), 32976 }, /* DIVU */ { CPUFUNC(op_80d8_0), 32984 }, /* DIVU */ { CPUFUNC(op_80e0_0), 32992 }, /* DIVU */ { CPUFUNC(op_80e8_0), 33000 }, /* DIVU */ { CPUFUNC(op_80f0_0), 33008 }, /* DIVU */ { CPUFUNC(op_80f8_0), 33016 }, /* DIVU */ { CPUFUNC(op_80f9_0), 33017 }, /* DIVU */ { CPUFUNC(op_80fa_0), 33018 }, /* DIVU */ { CPUFUNC(op_80fb_0), 33019 }, /* DIVU */ { CPUFUNC(op_80fc_0), 33020 }, /* DIVU */ { CPUFUNC(op_8100_0), 33024 }, /* SBCD */ { CPUFUNC(op_8108_0), 33032 }, /* SBCD */ { CPUFUNC(op_8110_0), 33040 }, /* OR */ { CPUFUNC(op_8118_0), 33048 }, /* OR */ { CPUFUNC(op_8120_0), 33056 }, /* OR */ { CPUFUNC(op_8128_0), 33064 }, /* OR */ { CPUFUNC(op_8130_0), 33072 }, /* OR */ { CPUFUNC(op_8138_0), 33080 }, /* OR */ { CPUFUNC(op_8139_0), 33081 }, /* OR */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_8140_0), 33088 }, /* PACK */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_8148_0), 33096 }, /* PACK */ #endif { CPUFUNC(op_8150_0), 33104 }, /* OR */ { CPUFUNC(op_8158_0), 33112 }, /* OR */ { CPUFUNC(op_8160_0), 33120 }, /* OR */ { CPUFUNC(op_8168_0), 33128 }, /* OR */ { CPUFUNC(op_8170_0), 33136 }, /* OR */ { CPUFUNC(op_8178_0), 33144 }, /* OR */ { CPUFUNC(op_8179_0), 33145 }, /* OR */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_8180_0), 33152 }, /* UNPK */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_8188_0), 33160 }, /* UNPK */ #endif { CPUFUNC(op_8190_0), 33168 }, /* OR */ { CPUFUNC(op_8198_0), 33176 }, /* OR */ { CPUFUNC(op_81a0_0), 33184 }, /* OR */ { CPUFUNC(op_81a8_0), 33192 }, /* OR */ { CPUFUNC(op_81b0_0), 33200 }, /* OR */ { CPUFUNC(op_81b8_0), 33208 }, /* OR */ { CPUFUNC(op_81b9_0), 33209 }, /* OR */ { CPUFUNC(op_81c0_0), 33216 }, /* DIVS */ { CPUFUNC(op_81d0_0), 33232 }, /* DIVS */ { CPUFUNC(op_81d8_0), 33240 }, /* DIVS */ { CPUFUNC(op_81e0_0), 33248 }, /* DIVS */ { CPUFUNC(op_81e8_0), 33256 }, /* DIVS */ { CPUFUNC(op_81f0_0), 33264 }, /* DIVS */ { CPUFUNC(op_81f8_0), 33272 }, /* DIVS */ { CPUFUNC(op_81f9_0), 33273 }, /* DIVS */ { CPUFUNC(op_81fa_0), 33274 }, /* DIVS */ { CPUFUNC(op_81fb_0), 33275 }, /* DIVS */ { CPUFUNC(op_81fc_0), 33276 }, /* DIVS */ { CPUFUNC(op_9000_0), 36864 }, /* SUB */ { CPUFUNC(op_9010_0), 36880 }, /* SUB */ { CPUFUNC(op_9018_0), 36888 }, /* SUB */ { CPUFUNC(op_9020_0), 36896 }, /* SUB */ { CPUFUNC(op_9028_0), 36904 }, /* SUB */ { CPUFUNC(op_9030_0), 36912 }, /* SUB */ { CPUFUNC(op_9038_0), 36920 }, /* SUB */ { CPUFUNC(op_9039_0), 36921 }, /* SUB */ { CPUFUNC(op_903a_0), 36922 }, /* SUB */ { CPUFUNC(op_903b_0), 36923 }, /* SUB */ { CPUFUNC(op_903c_0), 36924 }, /* SUB */ { CPUFUNC(op_9040_0), 36928 }, /* SUB */ { CPUFUNC(op_9048_0), 36936 }, /* SUB */ { CPUFUNC(op_9050_0), 36944 }, /* SUB */ { CPUFUNC(op_9058_0), 36952 }, /* SUB */ { CPUFUNC(op_9060_0), 36960 }, /* SUB */ { CPUFUNC(op_9068_0), 36968 }, /* SUB */ { CPUFUNC(op_9070_0), 36976 }, /* SUB */ { CPUFUNC(op_9078_0), 36984 }, /* SUB */ { CPUFUNC(op_9079_0), 36985 }, /* SUB */ { CPUFUNC(op_907a_0), 36986 }, /* SUB */ { CPUFUNC(op_907b_0), 36987 }, /* SUB */ { CPUFUNC(op_907c_0), 36988 }, /* SUB */ { CPUFUNC(op_9080_0), 36992 }, /* SUB */ { CPUFUNC(op_9088_0), 37000 }, /* SUB */ { CPUFUNC(op_9090_0), 37008 }, /* SUB */ { CPUFUNC(op_9098_0), 37016 }, /* SUB */ { CPUFUNC(op_90a0_0), 37024 }, /* SUB */ { CPUFUNC(op_90a8_0), 37032 }, /* SUB */ { CPUFUNC(op_90b0_0), 37040 }, /* SUB */ { CPUFUNC(op_90b8_0), 37048 }, /* SUB */ { CPUFUNC(op_90b9_0), 37049 }, /* SUB */ { CPUFUNC(op_90ba_0), 37050 }, /* SUB */ { CPUFUNC(op_90bb_0), 37051 }, /* SUB */ { CPUFUNC(op_90bc_0), 37052 }, /* SUB */ { CPUFUNC(op_90c0_0), 37056 }, /* SUBA */ { CPUFUNC(op_90c8_0), 37064 }, /* SUBA */ { CPUFUNC(op_90d0_0), 37072 }, /* SUBA */ { CPUFUNC(op_90d8_0), 37080 }, /* SUBA */ { CPUFUNC(op_90e0_0), 37088 }, /* SUBA */ { CPUFUNC(op_90e8_0), 37096 }, /* SUBA */ { CPUFUNC(op_90f0_0), 37104 }, /* SUBA */ { CPUFUNC(op_90f8_0), 37112 }, /* SUBA */ { CPUFUNC(op_90f9_0), 37113 }, /* SUBA */ { CPUFUNC(op_90fa_0), 37114 }, /* SUBA */ { CPUFUNC(op_90fb_0), 37115 }, /* SUBA */ { CPUFUNC(op_90fc_0), 37116 }, /* SUBA */ { CPUFUNC(op_9100_0), 37120 }, /* SUBX */ { CPUFUNC(op_9108_0), 37128 }, /* SUBX */ { CPUFUNC(op_9110_0), 37136 }, /* SUB */ { CPUFUNC(op_9118_0), 37144 }, /* SUB */ { CPUFUNC(op_9120_0), 37152 }, /* SUB */ { CPUFUNC(op_9128_0), 37160 }, /* SUB */ { CPUFUNC(op_9130_0), 37168 }, /* SUB */ { CPUFUNC(op_9138_0), 37176 }, /* SUB */ { CPUFUNC(op_9139_0), 37177 }, /* SUB */ { CPUFUNC(op_9140_0), 37184 }, /* SUBX */ { CPUFUNC(op_9148_0), 37192 }, /* SUBX */ { CPUFUNC(op_9150_0), 37200 }, /* SUB */ { CPUFUNC(op_9158_0), 37208 }, /* SUB */ { CPUFUNC(op_9160_0), 37216 }, /* SUB */ { CPUFUNC(op_9168_0), 37224 }, /* SUB */ { CPUFUNC(op_9170_0), 37232 }, /* SUB */ { CPUFUNC(op_9178_0), 37240 }, /* SUB */ { CPUFUNC(op_9179_0), 37241 }, /* SUB */ { CPUFUNC(op_9180_0), 37248 }, /* SUBX */ { CPUFUNC(op_9188_0), 37256 }, /* SUBX */ { CPUFUNC(op_9190_0), 37264 }, /* SUB */ { CPUFUNC(op_9198_0), 37272 }, /* SUB */ { CPUFUNC(op_91a0_0), 37280 }, /* SUB */ { CPUFUNC(op_91a8_0), 37288 }, /* SUB */ { CPUFUNC(op_91b0_0), 37296 }, /* SUB */ { CPUFUNC(op_91b8_0), 37304 }, /* SUB */ { CPUFUNC(op_91b9_0), 37305 }, /* SUB */ { CPUFUNC(op_91c0_0), 37312 }, /* SUBA */ { CPUFUNC(op_91c8_0), 37320 }, /* SUBA */ { CPUFUNC(op_91d0_0), 37328 }, /* SUBA */ { CPUFUNC(op_91d8_0), 37336 }, /* SUBA */ { CPUFUNC(op_91e0_0), 37344 }, /* SUBA */ { CPUFUNC(op_91e8_0), 37352 }, /* SUBA */ { CPUFUNC(op_91f0_0), 37360 }, /* SUBA */ { CPUFUNC(op_91f8_0), 37368 }, /* SUBA */ { CPUFUNC(op_91f9_0), 37369 }, /* SUBA */ { CPUFUNC(op_91fa_0), 37370 }, /* SUBA */ { CPUFUNC(op_91fb_0), 37371 }, /* SUBA */ { CPUFUNC(op_91fc_0), 37372 }, /* SUBA */ { CPUFUNC(op_b000_0), 45056 }, /* CMP */ { CPUFUNC(op_b010_0), 45072 }, /* CMP */ { CPUFUNC(op_b018_0), 45080 }, /* CMP */ { CPUFUNC(op_b020_0), 45088 }, /* CMP */ { CPUFUNC(op_b028_0), 45096 }, /* CMP */ { CPUFUNC(op_b030_0), 45104 }, /* CMP */ { CPUFUNC(op_b038_0), 45112 }, /* CMP */ { CPUFUNC(op_b039_0), 45113 }, /* CMP */ { CPUFUNC(op_b03a_0), 45114 }, /* CMP */ { CPUFUNC(op_b03b_0), 45115 }, /* CMP */ { CPUFUNC(op_b03c_0), 45116 }, /* CMP */ { CPUFUNC(op_b040_0), 45120 }, /* CMP */ { CPUFUNC(op_b048_0), 45128 }, /* CMP */ { CPUFUNC(op_b050_0), 45136 }, /* CMP */ { CPUFUNC(op_b058_0), 45144 }, /* CMP */ { CPUFUNC(op_b060_0), 45152 }, /* CMP */ { CPUFUNC(op_b068_0), 45160 }, /* CMP */ { CPUFUNC(op_b070_0), 45168 }, /* CMP */ { CPUFUNC(op_b078_0), 45176 }, /* CMP */ { CPUFUNC(op_b079_0), 45177 }, /* CMP */ { CPUFUNC(op_b07a_0), 45178 }, /* CMP */ { CPUFUNC(op_b07b_0), 45179 }, /* CMP */ { CPUFUNC(op_b07c_0), 45180 }, /* CMP */ { CPUFUNC(op_b080_0), 45184 }, /* CMP */ { CPUFUNC(op_b088_0), 45192 }, /* CMP */ { CPUFUNC(op_b090_0), 45200 }, /* CMP */ { CPUFUNC(op_b098_0), 45208 }, /* CMP */ { CPUFUNC(op_b0a0_0), 45216 }, /* CMP */ { CPUFUNC(op_b0a8_0), 45224 }, /* CMP */ { CPUFUNC(op_b0b0_0), 45232 }, /* CMP */ { CPUFUNC(op_b0b8_0), 45240 }, /* CMP */ { CPUFUNC(op_b0b9_0), 45241 }, /* CMP */ { CPUFUNC(op_b0ba_0), 45242 }, /* CMP */ { CPUFUNC(op_b0bb_0), 45243 }, /* CMP */ { CPUFUNC(op_b0bc_0), 45244 }, /* CMP */ { CPUFUNC(op_b0c0_0), 45248 }, /* CMPA */ { CPUFUNC(op_b0c8_0), 45256 }, /* CMPA */ { CPUFUNC(op_b0d0_0), 45264 }, /* CMPA */ { CPUFUNC(op_b0d8_0), 45272 }, /* CMPA */ { CPUFUNC(op_b0e0_0), 45280 }, /* CMPA */ { CPUFUNC(op_b0e8_0), 45288 }, /* CMPA */ { CPUFUNC(op_b0f0_0), 45296 }, /* CMPA */ { CPUFUNC(op_b0f8_0), 45304 }, /* CMPA */ { CPUFUNC(op_b0f9_0), 45305 }, /* CMPA */ { CPUFUNC(op_b0fa_0), 45306 }, /* CMPA */ { CPUFUNC(op_b0fb_0), 45307 }, /* CMPA */ { CPUFUNC(op_b0fc_0), 45308 }, /* CMPA */ { CPUFUNC(op_b100_0), 45312 }, /* EOR */ { CPUFUNC(op_b108_0), 45320 }, /* CMPM */ { CPUFUNC(op_b110_0), 45328 }, /* EOR */ { CPUFUNC(op_b118_0), 45336 }, /* EOR */ { CPUFUNC(op_b120_0), 45344 }, /* EOR */ { CPUFUNC(op_b128_0), 45352 }, /* EOR */ { CPUFUNC(op_b130_0), 45360 }, /* EOR */ { CPUFUNC(op_b138_0), 45368 }, /* EOR */ { CPUFUNC(op_b139_0), 45369 }, /* EOR */ { CPUFUNC(op_b140_0), 45376 }, /* EOR */ { CPUFUNC(op_b148_0), 45384 }, /* CMPM */ { CPUFUNC(op_b150_0), 45392 }, /* EOR */ { CPUFUNC(op_b158_0), 45400 }, /* EOR */ { CPUFUNC(op_b160_0), 45408 }, /* EOR */ { CPUFUNC(op_b168_0), 45416 }, /* EOR */ { CPUFUNC(op_b170_0), 45424 }, /* EOR */ { CPUFUNC(op_b178_0), 45432 }, /* EOR */ { CPUFUNC(op_b179_0), 45433 }, /* EOR */ { CPUFUNC(op_b180_0), 45440 }, /* EOR */ { CPUFUNC(op_b188_0), 45448 }, /* CMPM */ { CPUFUNC(op_b190_0), 45456 }, /* EOR */ { CPUFUNC(op_b198_0), 45464 }, /* EOR */ { CPUFUNC(op_b1a0_0), 45472 }, /* EOR */ { CPUFUNC(op_b1a8_0), 45480 }, /* EOR */ { CPUFUNC(op_b1b0_0), 45488 }, /* EOR */ { CPUFUNC(op_b1b8_0), 45496 }, /* EOR */ { CPUFUNC(op_b1b9_0), 45497 }, /* EOR */ { CPUFUNC(op_b1c0_0), 45504 }, /* CMPA */ { CPUFUNC(op_b1c8_0), 45512 }, /* CMPA */ { CPUFUNC(op_b1d0_0), 45520 }, /* CMPA */ { CPUFUNC(op_b1d8_0), 45528 }, /* CMPA */ { CPUFUNC(op_b1e0_0), 45536 }, /* CMPA */ { CPUFUNC(op_b1e8_0), 45544 }, /* CMPA */ { CPUFUNC(op_b1f0_0), 45552 }, /* CMPA */ { CPUFUNC(op_b1f8_0), 45560 }, /* CMPA */ { CPUFUNC(op_b1f9_0), 45561 }, /* CMPA */ { CPUFUNC(op_b1fa_0), 45562 }, /* CMPA */ { CPUFUNC(op_b1fb_0), 45563 }, /* CMPA */ { CPUFUNC(op_b1fc_0), 45564 }, /* CMPA */ { CPUFUNC(op_c000_0), 49152 }, /* AND */ { CPUFUNC(op_c010_0), 49168 }, /* AND */ { CPUFUNC(op_c018_0), 49176 }, /* AND */ { CPUFUNC(op_c020_0), 49184 }, /* AND */ { CPUFUNC(op_c028_0), 49192 }, /* AND */ { CPUFUNC(op_c030_0), 49200 }, /* AND */ { CPUFUNC(op_c038_0), 49208 }, /* AND */ { CPUFUNC(op_c039_0), 49209 }, /* AND */ { CPUFUNC(op_c03a_0), 49210 }, /* AND */ { CPUFUNC(op_c03b_0), 49211 }, /* AND */ { CPUFUNC(op_c03c_0), 49212 }, /* AND */ { CPUFUNC(op_c040_0), 49216 }, /* AND */ { CPUFUNC(op_c050_0), 49232 }, /* AND */ { CPUFUNC(op_c058_0), 49240 }, /* AND */ { CPUFUNC(op_c060_0), 49248 }, /* AND */ { CPUFUNC(op_c068_0), 49256 }, /* AND */ { CPUFUNC(op_c070_0), 49264 }, /* AND */ { CPUFUNC(op_c078_0), 49272 }, /* AND */ { CPUFUNC(op_c079_0), 49273 }, /* AND */ { CPUFUNC(op_c07a_0), 49274 }, /* AND */ { CPUFUNC(op_c07b_0), 49275 }, /* AND */ { CPUFUNC(op_c07c_0), 49276 }, /* AND */ { CPUFUNC(op_c080_0), 49280 }, /* AND */ { CPUFUNC(op_c090_0), 49296 }, /* AND */ { CPUFUNC(op_c098_0), 49304 }, /* AND */ { CPUFUNC(op_c0a0_0), 49312 }, /* AND */ { CPUFUNC(op_c0a8_0), 49320 }, /* AND */ { CPUFUNC(op_c0b0_0), 49328 }, /* AND */ { CPUFUNC(op_c0b8_0), 49336 }, /* AND */ { CPUFUNC(op_c0b9_0), 49337 }, /* AND */ { CPUFUNC(op_c0ba_0), 49338 }, /* AND */ { CPUFUNC(op_c0bb_0), 49339 }, /* AND */ { CPUFUNC(op_c0bc_0), 49340 }, /* AND */ { CPUFUNC(op_c0c0_0), 49344 }, /* MULU */ { CPUFUNC(op_c0d0_0), 49360 }, /* MULU */ { CPUFUNC(op_c0d8_0), 49368 }, /* MULU */ { CPUFUNC(op_c0e0_0), 49376 }, /* MULU */ { CPUFUNC(op_c0e8_0), 49384 }, /* MULU */ { CPUFUNC(op_c0f0_0), 49392 }, /* MULU */ { CPUFUNC(op_c0f8_0), 49400 }, /* MULU */ { CPUFUNC(op_c0f9_0), 49401 }, /* MULU */ { CPUFUNC(op_c0fa_0), 49402 }, /* MULU */ { CPUFUNC(op_c0fb_0), 49403 }, /* MULU */ { CPUFUNC(op_c0fc_0), 49404 }, /* MULU */ { CPUFUNC(op_c100_0), 49408 }, /* ABCD */ { CPUFUNC(op_c108_0), 49416 }, /* ABCD */ { CPUFUNC(op_c110_0), 49424 }, /* AND */ { CPUFUNC(op_c118_0), 49432 }, /* AND */ { CPUFUNC(op_c120_0), 49440 }, /* AND */ { CPUFUNC(op_c128_0), 49448 }, /* AND */ { CPUFUNC(op_c130_0), 49456 }, /* AND */ { CPUFUNC(op_c138_0), 49464 }, /* AND */ { CPUFUNC(op_c139_0), 49465 }, /* AND */ { CPUFUNC(op_c140_0), 49472 }, /* EXG */ { CPUFUNC(op_c148_0), 49480 }, /* EXG */ { CPUFUNC(op_c150_0), 49488 }, /* AND */ { CPUFUNC(op_c158_0), 49496 }, /* AND */ { CPUFUNC(op_c160_0), 49504 }, /* AND */ { CPUFUNC(op_c168_0), 49512 }, /* AND */ { CPUFUNC(op_c170_0), 49520 }, /* AND */ { CPUFUNC(op_c178_0), 49528 }, /* AND */ { CPUFUNC(op_c179_0), 49529 }, /* AND */ { CPUFUNC(op_c188_0), 49544 }, /* EXG */ { CPUFUNC(op_c190_0), 49552 }, /* AND */ { CPUFUNC(op_c198_0), 49560 }, /* AND */ { CPUFUNC(op_c1a0_0), 49568 }, /* AND */ { CPUFUNC(op_c1a8_0), 49576 }, /* AND */ { CPUFUNC(op_c1b0_0), 49584 }, /* AND */ { CPUFUNC(op_c1b8_0), 49592 }, /* AND */ { CPUFUNC(op_c1b9_0), 49593 }, /* AND */ { CPUFUNC(op_c1c0_0), 49600 }, /* MULS */ { CPUFUNC(op_c1d0_0), 49616 }, /* MULS */ { CPUFUNC(op_c1d8_0), 49624 }, /* MULS */ { CPUFUNC(op_c1e0_0), 49632 }, /* MULS */ { CPUFUNC(op_c1e8_0), 49640 }, /* MULS */ { CPUFUNC(op_c1f0_0), 49648 }, /* MULS */ { CPUFUNC(op_c1f8_0), 49656 }, /* MULS */ { CPUFUNC(op_c1f9_0), 49657 }, /* MULS */ { CPUFUNC(op_c1fa_0), 49658 }, /* MULS */ { CPUFUNC(op_c1fb_0), 49659 }, /* MULS */ { CPUFUNC(op_c1fc_0), 49660 }, /* MULS */ { CPUFUNC(op_d000_0), 53248 }, /* ADD */ { CPUFUNC(op_d010_0), 53264 }, /* ADD */ { CPUFUNC(op_d018_0), 53272 }, /* ADD */ { CPUFUNC(op_d020_0), 53280 }, /* ADD */ { CPUFUNC(op_d028_0), 53288 }, /* ADD */ { CPUFUNC(op_d030_0), 53296 }, /* ADD */ { CPUFUNC(op_d038_0), 53304 }, /* ADD */ { CPUFUNC(op_d039_0), 53305 }, /* ADD */ { CPUFUNC(op_d03a_0), 53306 }, /* ADD */ { CPUFUNC(op_d03b_0), 53307 }, /* ADD */ { CPUFUNC(op_d03c_0), 53308 }, /* ADD */ { CPUFUNC(op_d040_0), 53312 }, /* ADD */ { CPUFUNC(op_d048_0), 53320 }, /* ADD */ { CPUFUNC(op_d050_0), 53328 }, /* ADD */ { CPUFUNC(op_d058_0), 53336 }, /* ADD */ { CPUFUNC(op_d060_0), 53344 }, /* ADD */ { CPUFUNC(op_d068_0), 53352 }, /* ADD */ { CPUFUNC(op_d070_0), 53360 }, /* ADD */ { CPUFUNC(op_d078_0), 53368 }, /* ADD */ { CPUFUNC(op_d079_0), 53369 }, /* ADD */ { CPUFUNC(op_d07a_0), 53370 }, /* ADD */ { CPUFUNC(op_d07b_0), 53371 }, /* ADD */ { CPUFUNC(op_d07c_0), 53372 }, /* ADD */ { CPUFUNC(op_d080_0), 53376 }, /* ADD */ { CPUFUNC(op_d088_0), 53384 }, /* ADD */ { CPUFUNC(op_d090_0), 53392 }, /* ADD */ { CPUFUNC(op_d098_0), 53400 }, /* ADD */ { CPUFUNC(op_d0a0_0), 53408 }, /* ADD */ { CPUFUNC(op_d0a8_0), 53416 }, /* ADD */ { CPUFUNC(op_d0b0_0), 53424 }, /* ADD */ { CPUFUNC(op_d0b8_0), 53432 }, /* ADD */ { CPUFUNC(op_d0b9_0), 53433 }, /* ADD */ { CPUFUNC(op_d0ba_0), 53434 }, /* ADD */ { CPUFUNC(op_d0bb_0), 53435 }, /* ADD */ { CPUFUNC(op_d0bc_0), 53436 }, /* ADD */ { CPUFUNC(op_d0c0_0), 53440 }, /* ADDA */ { CPUFUNC(op_d0c8_0), 53448 }, /* ADDA */ { CPUFUNC(op_d0d0_0), 53456 }, /* ADDA */ { CPUFUNC(op_d0d8_0), 53464 }, /* ADDA */ { CPUFUNC(op_d0e0_0), 53472 }, /* ADDA */ { CPUFUNC(op_d0e8_0), 53480 }, /* ADDA */ { CPUFUNC(op_d0f0_0), 53488 }, /* ADDA */ { CPUFUNC(op_d0f8_0), 53496 }, /* ADDA */ { CPUFUNC(op_d0f9_0), 53497 }, /* ADDA */ { CPUFUNC(op_d0fa_0), 53498 }, /* ADDA */ { CPUFUNC(op_d0fb_0), 53499 }, /* ADDA */ { CPUFUNC(op_d0fc_0), 53500 }, /* ADDA */ { CPUFUNC(op_d100_0), 53504 }, /* ADDX */ { CPUFUNC(op_d108_0), 53512 }, /* ADDX */ { CPUFUNC(op_d110_0), 53520 }, /* ADD */ { CPUFUNC(op_d118_0), 53528 }, /* ADD */ { CPUFUNC(op_d120_0), 53536 }, /* ADD */ { CPUFUNC(op_d128_0), 53544 }, /* ADD */ { CPUFUNC(op_d130_0), 53552 }, /* ADD */ { CPUFUNC(op_d138_0), 53560 }, /* ADD */ { CPUFUNC(op_d139_0), 53561 }, /* ADD */ { CPUFUNC(op_d140_0), 53568 }, /* ADDX */ { CPUFUNC(op_d148_0), 53576 }, /* ADDX */ { CPUFUNC(op_d150_0), 53584 }, /* ADD */ { CPUFUNC(op_d158_0), 53592 }, /* ADD */ { CPUFUNC(op_d160_0), 53600 }, /* ADD */ { CPUFUNC(op_d168_0), 53608 }, /* ADD */ { CPUFUNC(op_d170_0), 53616 }, /* ADD */ { CPUFUNC(op_d178_0), 53624 }, /* ADD */ { CPUFUNC(op_d179_0), 53625 }, /* ADD */ { CPUFUNC(op_d180_0), 53632 }, /* ADDX */ { CPUFUNC(op_d188_0), 53640 }, /* ADDX */ { CPUFUNC(op_d190_0), 53648 }, /* ADD */ { CPUFUNC(op_d198_0), 53656 }, /* ADD */ { CPUFUNC(op_d1a0_0), 53664 }, /* ADD */ { CPUFUNC(op_d1a8_0), 53672 }, /* ADD */ { CPUFUNC(op_d1b0_0), 53680 }, /* ADD */ { CPUFUNC(op_d1b8_0), 53688 }, /* ADD */ { CPUFUNC(op_d1b9_0), 53689 }, /* ADD */ { CPUFUNC(op_d1c0_0), 53696 }, /* ADDA */ { CPUFUNC(op_d1c8_0), 53704 }, /* ADDA */ { CPUFUNC(op_d1d0_0), 53712 }, /* ADDA */ { CPUFUNC(op_d1d8_0), 53720 }, /* ADDA */ { CPUFUNC(op_d1e0_0), 53728 }, /* ADDA */ { CPUFUNC(op_d1e8_0), 53736 }, /* ADDA */ { CPUFUNC(op_d1f0_0), 53744 }, /* ADDA */ { CPUFUNC(op_d1f8_0), 53752 }, /* ADDA */ { CPUFUNC(op_d1f9_0), 53753 }, /* ADDA */ { CPUFUNC(op_d1fa_0), 53754 }, /* ADDA */ { CPUFUNC(op_d1fb_0), 53755 }, /* ADDA */ { CPUFUNC(op_d1fc_0), 53756 }, /* ADDA */ { CPUFUNC(op_e000_0), 57344 }, /* ASR */ { CPUFUNC(op_e008_0), 57352 }, /* LSR */ { CPUFUNC(op_e010_0), 57360 }, /* ROXR */ { CPUFUNC(op_e018_0), 57368 }, /* ROR */ { CPUFUNC(op_e020_0), 57376 }, /* ASR */ { CPUFUNC(op_e028_0), 57384 }, /* LSR */ { CPUFUNC(op_e030_0), 57392 }, /* ROXR */ { CPUFUNC(op_e038_0), 57400 }, /* ROR */ { CPUFUNC(op_e040_0), 57408 }, /* ASR */ { CPUFUNC(op_e048_0), 57416 }, /* LSR */ { CPUFUNC(op_e050_0), 57424 }, /* ROXR */ { CPUFUNC(op_e058_0), 57432 }, /* ROR */ { CPUFUNC(op_e060_0), 57440 }, /* ASR */ { CPUFUNC(op_e068_0), 57448 }, /* LSR */ { CPUFUNC(op_e070_0), 57456 }, /* ROXR */ { CPUFUNC(op_e078_0), 57464 }, /* ROR */ { CPUFUNC(op_e080_0), 57472 }, /* ASR */ { CPUFUNC(op_e088_0), 57480 }, /* LSR */ { CPUFUNC(op_e090_0), 57488 }, /* ROXR */ { CPUFUNC(op_e098_0), 57496 }, /* ROR */ { CPUFUNC(op_e0a0_0), 57504 }, /* ASR */ { CPUFUNC(op_e0a8_0), 57512 }, /* LSR */ { CPUFUNC(op_e0b0_0), 57520 }, /* ROXR */ { CPUFUNC(op_e0b8_0), 57528 }, /* ROR */ { CPUFUNC(op_e0d0_0), 57552 }, /* ASRW */ { CPUFUNC(op_e0d8_0), 57560 }, /* ASRW */ { CPUFUNC(op_e0e0_0), 57568 }, /* ASRW */ { CPUFUNC(op_e0e8_0), 57576 }, /* ASRW */ { CPUFUNC(op_e0f0_0), 57584 }, /* ASRW */ { CPUFUNC(op_e0f8_0), 57592 }, /* ASRW */ { CPUFUNC(op_e0f9_0), 57593 }, /* ASRW */ { CPUFUNC(op_e100_0), 57600 }, /* ASL */ { CPUFUNC(op_e108_0), 57608 }, /* LSL */ { CPUFUNC(op_e110_0), 57616 }, /* ROXL */ { CPUFUNC(op_e118_0), 57624 }, /* ROL */ { CPUFUNC(op_e120_0), 57632 }, /* ASL */ { CPUFUNC(op_e128_0), 57640 }, /* LSL */ { CPUFUNC(op_e130_0), 57648 }, /* ROXL */ { CPUFUNC(op_e138_0), 57656 }, /* ROL */ { CPUFUNC(op_e140_0), 57664 }, /* ASL */ { CPUFUNC(op_e148_0), 57672 }, /* LSL */ { CPUFUNC(op_e150_0), 57680 }, /* ROXL */ { CPUFUNC(op_e158_0), 57688 }, /* ROL */ { CPUFUNC(op_e160_0), 57696 }, /* ASL */ { CPUFUNC(op_e168_0), 57704 }, /* LSL */ { CPUFUNC(op_e170_0), 57712 }, /* ROXL */ { CPUFUNC(op_e178_0), 57720 }, /* ROL */ { CPUFUNC(op_e180_0), 57728 }, /* ASL */ { CPUFUNC(op_e188_0), 57736 }, /* LSL */ { CPUFUNC(op_e190_0), 57744 }, /* ROXL */ { CPUFUNC(op_e198_0), 57752 }, /* ROL */ { CPUFUNC(op_e1a0_0), 57760 }, /* ASL */ { CPUFUNC(op_e1a8_0), 57768 }, /* LSL */ { CPUFUNC(op_e1b0_0), 57776 }, /* ROXL */ { CPUFUNC(op_e1b8_0), 57784 }, /* ROL */ { CPUFUNC(op_e1d0_0), 57808 }, /* ASLW */ { CPUFUNC(op_e1d8_0), 57816 }, /* ASLW */ { CPUFUNC(op_e1e0_0), 57824 }, /* ASLW */ { CPUFUNC(op_e1e8_0), 57832 }, /* ASLW */ { CPUFUNC(op_e1f0_0), 57840 }, /* ASLW */ { CPUFUNC(op_e1f8_0), 57848 }, /* ASLW */ { CPUFUNC(op_e1f9_0), 57849 }, /* ASLW */ { CPUFUNC(op_e2d0_0), 58064 }, /* LSRW */ { CPUFUNC(op_e2d8_0), 58072 }, /* LSRW */ { CPUFUNC(op_e2e0_0), 58080 }, /* LSRW */ { CPUFUNC(op_e2e8_0), 58088 }, /* LSRW */ { CPUFUNC(op_e2f0_0), 58096 }, /* LSRW */ { CPUFUNC(op_e2f8_0), 58104 }, /* LSRW */ { CPUFUNC(op_e2f9_0), 58105 }, /* LSRW */ { CPUFUNC(op_e3d0_0), 58320 }, /* LSLW */ { CPUFUNC(op_e3d8_0), 58328 }, /* LSLW */ { CPUFUNC(op_e3e0_0), 58336 }, /* LSLW */ { CPUFUNC(op_e3e8_0), 58344 }, /* LSLW */ { CPUFUNC(op_e3f0_0), 58352 }, /* LSLW */ { CPUFUNC(op_e3f8_0), 58360 }, /* LSLW */ { CPUFUNC(op_e3f9_0), 58361 }, /* LSLW */ { CPUFUNC(op_e4d0_0), 58576 }, /* ROXRW */ { CPUFUNC(op_e4d8_0), 58584 }, /* ROXRW */ { CPUFUNC(op_e4e0_0), 58592 }, /* ROXRW */ { CPUFUNC(op_e4e8_0), 58600 }, /* ROXRW */ { CPUFUNC(op_e4f0_0), 58608 }, /* ROXRW */ { CPUFUNC(op_e4f8_0), 58616 }, /* ROXRW */ { CPUFUNC(op_e4f9_0), 58617 }, /* ROXRW */ { CPUFUNC(op_e5d0_0), 58832 }, /* ROXLW */ { CPUFUNC(op_e5d8_0), 58840 }, /* ROXLW */ { CPUFUNC(op_e5e0_0), 58848 }, /* ROXLW */ { CPUFUNC(op_e5e8_0), 58856 }, /* ROXLW */ { CPUFUNC(op_e5f0_0), 58864 }, /* ROXLW */ { CPUFUNC(op_e5f8_0), 58872 }, /* ROXLW */ { CPUFUNC(op_e5f9_0), 58873 }, /* ROXLW */ { CPUFUNC(op_e6d0_0), 59088 }, /* RORW */ { CPUFUNC(op_e6d8_0), 59096 }, /* RORW */ { CPUFUNC(op_e6e0_0), 59104 }, /* RORW */ { CPUFUNC(op_e6e8_0), 59112 }, /* RORW */ { CPUFUNC(op_e6f0_0), 59120 }, /* RORW */ { CPUFUNC(op_e6f8_0), 59128 }, /* RORW */ { CPUFUNC(op_e6f9_0), 59129 }, /* RORW */ { CPUFUNC(op_e7d0_0), 59344 }, /* ROLW */ { CPUFUNC(op_e7d8_0), 59352 }, /* ROLW */ { CPUFUNC(op_e7e0_0), 59360 }, /* ROLW */ { CPUFUNC(op_e7e8_0), 59368 }, /* ROLW */ { CPUFUNC(op_e7f0_0), 59376 }, /* ROLW */ { CPUFUNC(op_e7f8_0), 59384 }, /* ROLW */ { CPUFUNC(op_e7f9_0), 59385 }, /* ROLW */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_e8c0_0), 59584 }, /* BFTST */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_e8d0_0), 59600 }, /* BFTST */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_e8e8_0), 59624 }, /* BFTST */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_e8f0_0), 59632 }, /* BFTST */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_e8f8_0), 59640 }, /* BFTST */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_e8f9_0), 59641 }, /* BFTST */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_e8fa_0), 59642 }, /* BFTST */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_e8fb_0), 59643 }, /* BFTST */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_e9c0_0), 59840 }, /* BFEXTU */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_e9d0_0), 59856 }, /* BFEXTU */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_e9e8_0), 59880 }, /* BFEXTU */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_e9f0_0), 59888 }, /* BFEXTU */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_e9f8_0), 59896 }, /* BFEXTU */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_e9f9_0), 59897 }, /* BFEXTU */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_e9fa_0), 59898 }, /* BFEXTU */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_e9fb_0), 59899 }, /* BFEXTU */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_eac0_0), 60096 }, /* BFCHG */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_ead0_0), 60112 }, /* BFCHG */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_eae8_0), 60136 }, /* BFCHG */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_eaf0_0), 60144 }, /* BFCHG */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_eaf8_0), 60152 }, /* BFCHG */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_eaf9_0), 60153 }, /* BFCHG */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_ebc0_0), 60352 }, /* BFEXTS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_ebd0_0), 60368 }, /* BFEXTS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_ebe8_0), 60392 }, /* BFEXTS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_ebf0_0), 60400 }, /* BFEXTS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_ebf8_0), 60408 }, /* BFEXTS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_ebf9_0), 60409 }, /* BFEXTS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_ebfa_0), 60410 }, /* BFEXTS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_ebfb_0), 60411 }, /* BFEXTS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_ecc0_0), 60608 }, /* BFCLR */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_ecd0_0), 60624 }, /* BFCLR */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_ece8_0), 60648 }, /* BFCLR */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_ecf0_0), 60656 }, /* BFCLR */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_ecf8_0), 60664 }, /* BFCLR */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_ecf9_0), 60665 }, /* BFCLR */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_edc0_0), 60864 }, /* BFFFO */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_edd0_0), 60880 }, /* BFFFO */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_ede8_0), 60904 }, /* BFFFO */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_edf0_0), 60912 }, /* BFFFO */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_edf8_0), 60920 }, /* BFFFO */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_edf9_0), 60921 }, /* BFFFO */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_edfa_0), 60922 }, /* BFFFO */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_edfb_0), 60923 }, /* BFFFO */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_eec0_0), 61120 }, /* BFSET */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_eed0_0), 61136 }, /* BFSET */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_eee8_0), 61160 }, /* BFSET */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_eef0_0), 61168 }, /* BFSET */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_eef8_0), 61176 }, /* BFSET */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_eef9_0), 61177 }, /* BFSET */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_efc0_0), 61376 }, /* BFINS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_efd0_0), 61392 }, /* BFINS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_efe8_0), 61416 }, /* BFINS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_eff0_0), 61424 }, /* BFINS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_eff8_0), 61432 }, /* BFINS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_eff9_0), 61433 }, /* BFINS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f000_0), 61440 }, /* MMUOP030 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f008_0), 61448 }, /* MMUOP030 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f010_0), 61456 }, /* MMUOP030 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f018_0), 61464 }, /* MMUOP030 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f020_0), 61472 }, /* MMUOP030 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f028_0), 61480 }, /* MMUOP030 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f030_0), 61488 }, /* MMUOP030 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f038_0), 61496 }, /* MMUOP030 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f039_0), 61497 }, /* MMUOP030 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f200_0), 61952 }, /* FPP */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f208_0), 61960 }, /* FPP */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f210_0), 61968 }, /* FPP */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f218_0), 61976 }, /* FPP */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f220_0), 61984 }, /* FPP */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f228_0), 61992 }, /* FPP */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f230_0), 62000 }, /* FPP */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f238_0), 62008 }, /* FPP */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f239_0), 62009 }, /* FPP */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f23a_0), 62010 }, /* FPP */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f23b_0), 62011 }, /* FPP */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f23c_0), 62012 }, /* FPP */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f240_0), 62016 }, /* FScc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f248_0), 62024 }, /* FDBcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f250_0), 62032 }, /* FScc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f258_0), 62040 }, /* FScc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f260_0), 62048 }, /* FScc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f268_0), 62056 }, /* FScc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f270_0), 62064 }, /* FScc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f278_0), 62072 }, /* FScc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f279_0), 62073 }, /* FScc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f27a_0), 62074 }, /* FTRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f27b_0), 62075 }, /* FTRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f27c_0), 62076 }, /* FTRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f280_0), 62080 }, /* FBcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f2c0_0), 62144 }, /* FBcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f310_0), 62224 }, /* FSAVE */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f320_0), 62240 }, /* FSAVE */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f328_0), 62248 }, /* FSAVE */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f330_0), 62256 }, /* FSAVE */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f338_0), 62264 }, /* FSAVE */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f339_0), 62265 }, /* FSAVE */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f350_0), 62288 }, /* FRESTORE */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f358_0), 62296 }, /* FRESTORE */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f368_0), 62312 }, /* FRESTORE */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f370_0), 62320 }, /* FRESTORE */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f378_0), 62328 }, /* FRESTORE */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f379_0), 62329 }, /* FRESTORE */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f37a_0), 62330 }, /* FRESTORE */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f37b_0), 62331 }, /* FRESTORE */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f408_0), 62472 }, /* CINVL */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f410_0), 62480 }, /* CINVP */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f418_0), 62488 }, /* CINVA */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f419_0), 62489 }, /* CINVA */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f41a_0), 62490 }, /* CINVA */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f41b_0), 62491 }, /* CINVA */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f41c_0), 62492 }, /* CINVA */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f41d_0), 62493 }, /* CINVA */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f41e_0), 62494 }, /* CINVA */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f41f_0), 62495 }, /* CINVA */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f428_0), 62504 }, /* CPUSHL */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f430_0), 62512 }, /* CPUSHP */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f438_0), 62520 }, /* CPUSHA */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f439_0), 62521 }, /* CPUSHA */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f43a_0), 62522 }, /* CPUSHA */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f43b_0), 62523 }, /* CPUSHA */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f43c_0), 62524 }, /* CPUSHA */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f43d_0), 62525 }, /* CPUSHA */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f43e_0), 62526 }, /* CPUSHA */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f43f_0), 62527 }, /* CPUSHA */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f500_0), 62720 }, /* PFLUSHN */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f508_0), 62728 }, /* PFLUSH */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f510_0), 62736 }, /* PFLUSHAN */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f518_0), 62744 }, /* PFLUSHA */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f548_0), 62792 }, /* PTESTR */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f568_0), 62824 }, /* PTESTW */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f588_0), 62856 }, /* PLPAR */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f5c8_0), 62920 }, /* PLPAW */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f600_0), 62976 }, /* MOVE16 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f608_0), 62984 }, /* MOVE16 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f610_0), 62992 }, /* MOVE16 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f618_0), 63000 }, /* MOVE16 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f620_0), 63008 }, /* MOVE16 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f800_0), 63488 }, /* LPSTOP */ #endif { 0, 0 }}; #endif /* CPUEMU_0 */ #ifndef CPUEMU_68000_ONLY const struct cputbl CPUFUNC(op_smalltbl_1)[] = { { CPUFUNC(op_0000_0), 0 }, /* OR */ { CPUFUNC(op_0010_0), 16 }, /* OR */ { CPUFUNC(op_0018_0), 24 }, /* OR */ { CPUFUNC(op_0020_0), 32 }, /* OR */ { CPUFUNC(op_0028_0), 40 }, /* OR */ { CPUFUNC(op_0030_0), 48 }, /* OR */ { CPUFUNC(op_0038_0), 56 }, /* OR */ { CPUFUNC(op_0039_0), 57 }, /* OR */ { CPUFUNC(op_003c_0), 60 }, /* ORSR */ { CPUFUNC(op_0040_0), 64 }, /* OR */ { CPUFUNC(op_0050_0), 80 }, /* OR */ { CPUFUNC(op_0058_0), 88 }, /* OR */ { CPUFUNC(op_0060_0), 96 }, /* OR */ { CPUFUNC(op_0068_0), 104 }, /* OR */ { CPUFUNC(op_0070_0), 112 }, /* OR */ { CPUFUNC(op_0078_0), 120 }, /* OR */ { CPUFUNC(op_0079_0), 121 }, /* OR */ { CPUFUNC(op_007c_0), 124 }, /* ORSR */ { CPUFUNC(op_0080_0), 128 }, /* OR */ { CPUFUNC(op_0090_0), 144 }, /* OR */ { CPUFUNC(op_0098_0), 152 }, /* OR */ { CPUFUNC(op_00a0_0), 160 }, /* OR */ { CPUFUNC(op_00a8_0), 168 }, /* OR */ { CPUFUNC(op_00b0_0), 176 }, /* OR */ { CPUFUNC(op_00b8_0), 184 }, /* OR */ { CPUFUNC(op_00b9_0), 185 }, /* OR */ { CPUFUNC(op_00d0_0), 208 }, /* CHK2 */ { CPUFUNC(op_00e8_0), 232 }, /* CHK2 */ { CPUFUNC(op_00f0_0), 240 }, /* CHK2 */ { CPUFUNC(op_00f8_0), 248 }, /* CHK2 */ { CPUFUNC(op_00f9_0), 249 }, /* CHK2 */ { CPUFUNC(op_00fa_0), 250 }, /* CHK2 */ { CPUFUNC(op_00fb_0), 251 }, /* CHK2 */ { CPUFUNC(op_0100_0), 256 }, /* BTST */ { CPUFUNC(op_0108_0), 264 }, /* MVPMR */ { CPUFUNC(op_0110_0), 272 }, /* BTST */ { CPUFUNC(op_0118_0), 280 }, /* BTST */ { CPUFUNC(op_0120_0), 288 }, /* BTST */ { CPUFUNC(op_0128_0), 296 }, /* BTST */ { CPUFUNC(op_0130_0), 304 }, /* BTST */ { CPUFUNC(op_0138_0), 312 }, /* BTST */ { CPUFUNC(op_0139_0), 313 }, /* BTST */ { CPUFUNC(op_013a_0), 314 }, /* BTST */ { CPUFUNC(op_013b_0), 315 }, /* BTST */ { CPUFUNC(op_013c_0), 316 }, /* BTST */ { CPUFUNC(op_0140_0), 320 }, /* BCHG */ { CPUFUNC(op_0148_0), 328 }, /* MVPMR */ { CPUFUNC(op_0150_0), 336 }, /* BCHG */ { CPUFUNC(op_0158_0), 344 }, /* BCHG */ { CPUFUNC(op_0160_0), 352 }, /* BCHG */ { CPUFUNC(op_0168_0), 360 }, /* BCHG */ { CPUFUNC(op_0170_0), 368 }, /* BCHG */ { CPUFUNC(op_0178_0), 376 }, /* BCHG */ { CPUFUNC(op_0179_0), 377 }, /* BCHG */ { CPUFUNC(op_017a_0), 378 }, /* BCHG */ { CPUFUNC(op_017b_0), 379 }, /* BCHG */ { CPUFUNC(op_0180_0), 384 }, /* BCLR */ { CPUFUNC(op_0188_0), 392 }, /* MVPRM */ { CPUFUNC(op_0190_0), 400 }, /* BCLR */ { CPUFUNC(op_0198_0), 408 }, /* BCLR */ { CPUFUNC(op_01a0_0), 416 }, /* BCLR */ { CPUFUNC(op_01a8_0), 424 }, /* BCLR */ { CPUFUNC(op_01b0_0), 432 }, /* BCLR */ { CPUFUNC(op_01b8_0), 440 }, /* BCLR */ { CPUFUNC(op_01b9_0), 441 }, /* BCLR */ { CPUFUNC(op_01ba_0), 442 }, /* BCLR */ { CPUFUNC(op_01bb_0), 443 }, /* BCLR */ { CPUFUNC(op_01c0_0), 448 }, /* BSET */ { CPUFUNC(op_01c8_0), 456 }, /* MVPRM */ { CPUFUNC(op_01d0_0), 464 }, /* BSET */ { CPUFUNC(op_01d8_0), 472 }, /* BSET */ { CPUFUNC(op_01e0_0), 480 }, /* BSET */ { CPUFUNC(op_01e8_0), 488 }, /* BSET */ { CPUFUNC(op_01f0_0), 496 }, /* BSET */ { CPUFUNC(op_01f8_0), 504 }, /* BSET */ { CPUFUNC(op_01f9_0), 505 }, /* BSET */ { CPUFUNC(op_01fa_0), 506 }, /* BSET */ { CPUFUNC(op_01fb_0), 507 }, /* BSET */ { CPUFUNC(op_0200_0), 512 }, /* AND */ { CPUFUNC(op_0210_0), 528 }, /* AND */ { CPUFUNC(op_0218_0), 536 }, /* AND */ { CPUFUNC(op_0220_0), 544 }, /* AND */ { CPUFUNC(op_0228_0), 552 }, /* AND */ { CPUFUNC(op_0230_0), 560 }, /* AND */ { CPUFUNC(op_0238_0), 568 }, /* AND */ { CPUFUNC(op_0239_0), 569 }, /* AND */ { CPUFUNC(op_023c_0), 572 }, /* ANDSR */ { CPUFUNC(op_0240_0), 576 }, /* AND */ { CPUFUNC(op_0250_0), 592 }, /* AND */ { CPUFUNC(op_0258_0), 600 }, /* AND */ { CPUFUNC(op_0260_0), 608 }, /* AND */ { CPUFUNC(op_0268_0), 616 }, /* AND */ { CPUFUNC(op_0270_0), 624 }, /* AND */ { CPUFUNC(op_0278_0), 632 }, /* AND */ { CPUFUNC(op_0279_0), 633 }, /* AND */ { CPUFUNC(op_027c_0), 636 }, /* ANDSR */ { CPUFUNC(op_0280_0), 640 }, /* AND */ { CPUFUNC(op_0290_0), 656 }, /* AND */ { CPUFUNC(op_0298_0), 664 }, /* AND */ { CPUFUNC(op_02a0_0), 672 }, /* AND */ { CPUFUNC(op_02a8_0), 680 }, /* AND */ { CPUFUNC(op_02b0_0), 688 }, /* AND */ { CPUFUNC(op_02b8_0), 696 }, /* AND */ { CPUFUNC(op_02b9_0), 697 }, /* AND */ { CPUFUNC(op_02d0_0), 720 }, /* CHK2 */ { CPUFUNC(op_02e8_0), 744 }, /* CHK2 */ { CPUFUNC(op_02f0_0), 752 }, /* CHK2 */ { CPUFUNC(op_02f8_0), 760 }, /* CHK2 */ { CPUFUNC(op_02f9_0), 761 }, /* CHK2 */ { CPUFUNC(op_02fa_0), 762 }, /* CHK2 */ { CPUFUNC(op_02fb_0), 763 }, /* CHK2 */ { CPUFUNC(op_0400_0), 1024 }, /* SUB */ { CPUFUNC(op_0410_0), 1040 }, /* SUB */ { CPUFUNC(op_0418_0), 1048 }, /* SUB */ { CPUFUNC(op_0420_0), 1056 }, /* SUB */ { CPUFUNC(op_0428_0), 1064 }, /* SUB */ { CPUFUNC(op_0430_0), 1072 }, /* SUB */ { CPUFUNC(op_0438_0), 1080 }, /* SUB */ { CPUFUNC(op_0439_0), 1081 }, /* SUB */ { CPUFUNC(op_0440_0), 1088 }, /* SUB */ { CPUFUNC(op_0450_0), 1104 }, /* SUB */ { CPUFUNC(op_0458_0), 1112 }, /* SUB */ { CPUFUNC(op_0460_0), 1120 }, /* SUB */ { CPUFUNC(op_0468_0), 1128 }, /* SUB */ { CPUFUNC(op_0470_0), 1136 }, /* SUB */ { CPUFUNC(op_0478_0), 1144 }, /* SUB */ { CPUFUNC(op_0479_0), 1145 }, /* SUB */ { CPUFUNC(op_0480_0), 1152 }, /* SUB */ { CPUFUNC(op_0490_0), 1168 }, /* SUB */ { CPUFUNC(op_0498_0), 1176 }, /* SUB */ { CPUFUNC(op_04a0_0), 1184 }, /* SUB */ { CPUFUNC(op_04a8_0), 1192 }, /* SUB */ { CPUFUNC(op_04b0_0), 1200 }, /* SUB */ { CPUFUNC(op_04b8_0), 1208 }, /* SUB */ { CPUFUNC(op_04b9_0), 1209 }, /* SUB */ { CPUFUNC(op_04d0_0), 1232 }, /* CHK2 */ { CPUFUNC(op_04e8_0), 1256 }, /* CHK2 */ { CPUFUNC(op_04f0_0), 1264 }, /* CHK2 */ { CPUFUNC(op_04f8_0), 1272 }, /* CHK2 */ { CPUFUNC(op_04f9_0), 1273 }, /* CHK2 */ { CPUFUNC(op_04fa_0), 1274 }, /* CHK2 */ { CPUFUNC(op_04fb_0), 1275 }, /* CHK2 */ { CPUFUNC(op_0600_0), 1536 }, /* ADD */ { CPUFUNC(op_0610_0), 1552 }, /* ADD */ { CPUFUNC(op_0618_0), 1560 }, /* ADD */ { CPUFUNC(op_0620_0), 1568 }, /* ADD */ { CPUFUNC(op_0628_0), 1576 }, /* ADD */ { CPUFUNC(op_0630_0), 1584 }, /* ADD */ { CPUFUNC(op_0638_0), 1592 }, /* ADD */ { CPUFUNC(op_0639_0), 1593 }, /* ADD */ { CPUFUNC(op_0640_0), 1600 }, /* ADD */ { CPUFUNC(op_0650_0), 1616 }, /* ADD */ { CPUFUNC(op_0658_0), 1624 }, /* ADD */ { CPUFUNC(op_0660_0), 1632 }, /* ADD */ { CPUFUNC(op_0668_0), 1640 }, /* ADD */ { CPUFUNC(op_0670_0), 1648 }, /* ADD */ { CPUFUNC(op_0678_0), 1656 }, /* ADD */ { CPUFUNC(op_0679_0), 1657 }, /* ADD */ { CPUFUNC(op_0680_0), 1664 }, /* ADD */ { CPUFUNC(op_0690_0), 1680 }, /* ADD */ { CPUFUNC(op_0698_0), 1688 }, /* ADD */ { CPUFUNC(op_06a0_0), 1696 }, /* ADD */ { CPUFUNC(op_06a8_0), 1704 }, /* ADD */ { CPUFUNC(op_06b0_0), 1712 }, /* ADD */ { CPUFUNC(op_06b8_0), 1720 }, /* ADD */ { CPUFUNC(op_06b9_0), 1721 }, /* ADD */ { CPUFUNC(op_06c0_0), 1728 }, /* RTM */ { CPUFUNC(op_06c8_0), 1736 }, /* RTM */ { CPUFUNC(op_06d0_0), 1744 }, /* CALLM */ { CPUFUNC(op_06e8_0), 1768 }, /* CALLM */ { CPUFUNC(op_06f0_0), 1776 }, /* CALLM */ { CPUFUNC(op_06f8_0), 1784 }, /* CALLM */ { CPUFUNC(op_06f9_0), 1785 }, /* CALLM */ { CPUFUNC(op_06fa_0), 1786 }, /* CALLM */ { CPUFUNC(op_06fb_0), 1787 }, /* CALLM */ { CPUFUNC(op_0800_0), 2048 }, /* BTST */ { CPUFUNC(op_0810_0), 2064 }, /* BTST */ { CPUFUNC(op_0818_0), 2072 }, /* BTST */ { CPUFUNC(op_0820_0), 2080 }, /* BTST */ { CPUFUNC(op_0828_0), 2088 }, /* BTST */ { CPUFUNC(op_0830_0), 2096 }, /* BTST */ { CPUFUNC(op_0838_0), 2104 }, /* BTST */ { CPUFUNC(op_0839_0), 2105 }, /* BTST */ { CPUFUNC(op_083a_0), 2106 }, /* BTST */ { CPUFUNC(op_083b_0), 2107 }, /* BTST */ { CPUFUNC(op_083c_0), 2108 }, /* BTST */ { CPUFUNC(op_0840_0), 2112 }, /* BCHG */ { CPUFUNC(op_0850_0), 2128 }, /* BCHG */ { CPUFUNC(op_0858_0), 2136 }, /* BCHG */ { CPUFUNC(op_0860_0), 2144 }, /* BCHG */ { CPUFUNC(op_0868_0), 2152 }, /* BCHG */ { CPUFUNC(op_0870_0), 2160 }, /* BCHG */ { CPUFUNC(op_0878_0), 2168 }, /* BCHG */ { CPUFUNC(op_0879_0), 2169 }, /* BCHG */ { CPUFUNC(op_087a_0), 2170 }, /* BCHG */ { CPUFUNC(op_087b_0), 2171 }, /* BCHG */ { CPUFUNC(op_0880_0), 2176 }, /* BCLR */ { CPUFUNC(op_0890_0), 2192 }, /* BCLR */ { CPUFUNC(op_0898_0), 2200 }, /* BCLR */ { CPUFUNC(op_08a0_0), 2208 }, /* BCLR */ { CPUFUNC(op_08a8_0), 2216 }, /* BCLR */ { CPUFUNC(op_08b0_0), 2224 }, /* BCLR */ { CPUFUNC(op_08b8_0), 2232 }, /* BCLR */ { CPUFUNC(op_08b9_0), 2233 }, /* BCLR */ { CPUFUNC(op_08ba_0), 2234 }, /* BCLR */ { CPUFUNC(op_08bb_0), 2235 }, /* BCLR */ { CPUFUNC(op_08c0_0), 2240 }, /* BSET */ { CPUFUNC(op_08d0_0), 2256 }, /* BSET */ { CPUFUNC(op_08d8_0), 2264 }, /* BSET */ { CPUFUNC(op_08e0_0), 2272 }, /* BSET */ { CPUFUNC(op_08e8_0), 2280 }, /* BSET */ { CPUFUNC(op_08f0_0), 2288 }, /* BSET */ { CPUFUNC(op_08f8_0), 2296 }, /* BSET */ { CPUFUNC(op_08f9_0), 2297 }, /* BSET */ { CPUFUNC(op_08fa_0), 2298 }, /* BSET */ { CPUFUNC(op_08fb_0), 2299 }, /* BSET */ { CPUFUNC(op_0a00_0), 2560 }, /* EOR */ { CPUFUNC(op_0a10_0), 2576 }, /* EOR */ { CPUFUNC(op_0a18_0), 2584 }, /* EOR */ { CPUFUNC(op_0a20_0), 2592 }, /* EOR */ { CPUFUNC(op_0a28_0), 2600 }, /* EOR */ { CPUFUNC(op_0a30_0), 2608 }, /* EOR */ { CPUFUNC(op_0a38_0), 2616 }, /* EOR */ { CPUFUNC(op_0a39_0), 2617 }, /* EOR */ { CPUFUNC(op_0a3c_0), 2620 }, /* EORSR */ { CPUFUNC(op_0a40_0), 2624 }, /* EOR */ { CPUFUNC(op_0a50_0), 2640 }, /* EOR */ { CPUFUNC(op_0a58_0), 2648 }, /* EOR */ { CPUFUNC(op_0a60_0), 2656 }, /* EOR */ { CPUFUNC(op_0a68_0), 2664 }, /* EOR */ { CPUFUNC(op_0a70_0), 2672 }, /* EOR */ { CPUFUNC(op_0a78_0), 2680 }, /* EOR */ { CPUFUNC(op_0a79_0), 2681 }, /* EOR */ { CPUFUNC(op_0a7c_0), 2684 }, /* EORSR */ { CPUFUNC(op_0a80_0), 2688 }, /* EOR */ { CPUFUNC(op_0a90_0), 2704 }, /* EOR */ { CPUFUNC(op_0a98_0), 2712 }, /* EOR */ { CPUFUNC(op_0aa0_0), 2720 }, /* EOR */ { CPUFUNC(op_0aa8_0), 2728 }, /* EOR */ { CPUFUNC(op_0ab0_0), 2736 }, /* EOR */ { CPUFUNC(op_0ab8_0), 2744 }, /* EOR */ { CPUFUNC(op_0ab9_0), 2745 }, /* EOR */ { CPUFUNC(op_0ad0_0), 2768 }, /* CAS */ { CPUFUNC(op_0ad8_0), 2776 }, /* CAS */ { CPUFUNC(op_0ae0_0), 2784 }, /* CAS */ { CPUFUNC(op_0ae8_0), 2792 }, /* CAS */ { CPUFUNC(op_0af0_0), 2800 }, /* CAS */ { CPUFUNC(op_0af8_0), 2808 }, /* CAS */ { CPUFUNC(op_0af9_0), 2809 }, /* CAS */ { CPUFUNC(op_0c00_0), 3072 }, /* CMP */ { CPUFUNC(op_0c10_0), 3088 }, /* CMP */ { CPUFUNC(op_0c18_0), 3096 }, /* CMP */ { CPUFUNC(op_0c20_0), 3104 }, /* CMP */ { CPUFUNC(op_0c28_0), 3112 }, /* CMP */ { CPUFUNC(op_0c30_0), 3120 }, /* CMP */ { CPUFUNC(op_0c38_0), 3128 }, /* CMP */ { CPUFUNC(op_0c39_0), 3129 }, /* CMP */ { CPUFUNC(op_0c3a_0), 3130 }, /* CMP */ { CPUFUNC(op_0c3b_0), 3131 }, /* CMP */ { CPUFUNC(op_0c40_0), 3136 }, /* CMP */ { CPUFUNC(op_0c50_0), 3152 }, /* CMP */ { CPUFUNC(op_0c58_0), 3160 }, /* CMP */ { CPUFUNC(op_0c60_0), 3168 }, /* CMP */ { CPUFUNC(op_0c68_0), 3176 }, /* CMP */ { CPUFUNC(op_0c70_0), 3184 }, /* CMP */ { CPUFUNC(op_0c78_0), 3192 }, /* CMP */ { CPUFUNC(op_0c79_0), 3193 }, /* CMP */ { CPUFUNC(op_0c7a_0), 3194 }, /* CMP */ { CPUFUNC(op_0c7b_0), 3195 }, /* CMP */ { CPUFUNC(op_0c80_0), 3200 }, /* CMP */ { CPUFUNC(op_0c90_0), 3216 }, /* CMP */ { CPUFUNC(op_0c98_0), 3224 }, /* CMP */ { CPUFUNC(op_0ca0_0), 3232 }, /* CMP */ { CPUFUNC(op_0ca8_0), 3240 }, /* CMP */ { CPUFUNC(op_0cb0_0), 3248 }, /* CMP */ { CPUFUNC(op_0cb8_0), 3256 }, /* CMP */ { CPUFUNC(op_0cb9_0), 3257 }, /* CMP */ { CPUFUNC(op_0cba_0), 3258 }, /* CMP */ { CPUFUNC(op_0cbb_0), 3259 }, /* CMP */ { CPUFUNC(op_0cd0_0), 3280 }, /* CAS */ { CPUFUNC(op_0cd8_0), 3288 }, /* CAS */ { CPUFUNC(op_0ce0_0), 3296 }, /* CAS */ { CPUFUNC(op_0ce8_0), 3304 }, /* CAS */ { CPUFUNC(op_0cf0_0), 3312 }, /* CAS */ { CPUFUNC(op_0cf8_0), 3320 }, /* CAS */ { CPUFUNC(op_0cf9_0), 3321 }, /* CAS */ { CPUFUNC(op_0cfc_0), 3324 }, /* CAS2 */ { CPUFUNC(op_0e10_0), 3600 }, /* MOVES */ { CPUFUNC(op_0e18_0), 3608 }, /* MOVES */ { CPUFUNC(op_0e20_0), 3616 }, /* MOVES */ { CPUFUNC(op_0e28_0), 3624 }, /* MOVES */ { CPUFUNC(op_0e30_0), 3632 }, /* MOVES */ { CPUFUNC(op_0e38_0), 3640 }, /* MOVES */ { CPUFUNC(op_0e39_0), 3641 }, /* MOVES */ { CPUFUNC(op_0e50_0), 3664 }, /* MOVES */ { CPUFUNC(op_0e58_0), 3672 }, /* MOVES */ { CPUFUNC(op_0e60_0), 3680 }, /* MOVES */ { CPUFUNC(op_0e68_0), 3688 }, /* MOVES */ { CPUFUNC(op_0e70_0), 3696 }, /* MOVES */ { CPUFUNC(op_0e78_0), 3704 }, /* MOVES */ { CPUFUNC(op_0e79_0), 3705 }, /* MOVES */ { CPUFUNC(op_0e90_0), 3728 }, /* MOVES */ { CPUFUNC(op_0e98_0), 3736 }, /* MOVES */ { CPUFUNC(op_0ea0_0), 3744 }, /* MOVES */ { CPUFUNC(op_0ea8_0), 3752 }, /* MOVES */ { CPUFUNC(op_0eb0_0), 3760 }, /* MOVES */ { CPUFUNC(op_0eb8_0), 3768 }, /* MOVES */ { CPUFUNC(op_0eb9_0), 3769 }, /* MOVES */ { CPUFUNC(op_0ed0_0), 3792 }, /* CAS */ { CPUFUNC(op_0ed8_0), 3800 }, /* CAS */ { CPUFUNC(op_0ee0_0), 3808 }, /* CAS */ { CPUFUNC(op_0ee8_0), 3816 }, /* CAS */ { CPUFUNC(op_0ef0_0), 3824 }, /* CAS */ { CPUFUNC(op_0ef8_0), 3832 }, /* CAS */ { CPUFUNC(op_0ef9_0), 3833 }, /* CAS */ { CPUFUNC(op_0efc_0), 3836 }, /* CAS2 */ { CPUFUNC(op_1000_0), 4096 }, /* MOVE */ { CPUFUNC(op_1010_0), 4112 }, /* MOVE */ { CPUFUNC(op_1018_0), 4120 }, /* MOVE */ { CPUFUNC(op_1020_0), 4128 }, /* MOVE */ { CPUFUNC(op_1028_0), 4136 }, /* MOVE */ { CPUFUNC(op_1030_0), 4144 }, /* MOVE */ { CPUFUNC(op_1038_0), 4152 }, /* MOVE */ { CPUFUNC(op_1039_0), 4153 }, /* MOVE */ { CPUFUNC(op_103a_0), 4154 }, /* MOVE */ { CPUFUNC(op_103b_0), 4155 }, /* MOVE */ { CPUFUNC(op_103c_0), 4156 }, /* MOVE */ { CPUFUNC(op_1080_0), 4224 }, /* MOVE */ { CPUFUNC(op_1090_0), 4240 }, /* MOVE */ { CPUFUNC(op_1098_0), 4248 }, /* MOVE */ { CPUFUNC(op_10a0_0), 4256 }, /* MOVE */ { CPUFUNC(op_10a8_0), 4264 }, /* MOVE */ { CPUFUNC(op_10b0_0), 4272 }, /* MOVE */ { CPUFUNC(op_10b8_0), 4280 }, /* MOVE */ { CPUFUNC(op_10b9_0), 4281 }, /* MOVE */ { CPUFUNC(op_10ba_0), 4282 }, /* MOVE */ { CPUFUNC(op_10bb_0), 4283 }, /* MOVE */ { CPUFUNC(op_10bc_0), 4284 }, /* MOVE */ { CPUFUNC(op_10c0_0), 4288 }, /* MOVE */ { CPUFUNC(op_10d0_0), 4304 }, /* MOVE */ { CPUFUNC(op_10d8_0), 4312 }, /* MOVE */ { CPUFUNC(op_10e0_0), 4320 }, /* MOVE */ { CPUFUNC(op_10e8_0), 4328 }, /* MOVE */ { CPUFUNC(op_10f0_0), 4336 }, /* MOVE */ { CPUFUNC(op_10f8_0), 4344 }, /* MOVE */ { CPUFUNC(op_10f9_0), 4345 }, /* MOVE */ { CPUFUNC(op_10fa_0), 4346 }, /* MOVE */ { CPUFUNC(op_10fb_0), 4347 }, /* MOVE */ { CPUFUNC(op_10fc_0), 4348 }, /* MOVE */ { CPUFUNC(op_1100_0), 4352 }, /* MOVE */ { CPUFUNC(op_1110_0), 4368 }, /* MOVE */ { CPUFUNC(op_1118_0), 4376 }, /* MOVE */ { CPUFUNC(op_1120_0), 4384 }, /* MOVE */ { CPUFUNC(op_1128_0), 4392 }, /* MOVE */ { CPUFUNC(op_1130_0), 4400 }, /* MOVE */ { CPUFUNC(op_1138_0), 4408 }, /* MOVE */ { CPUFUNC(op_1139_0), 4409 }, /* MOVE */ { CPUFUNC(op_113a_0), 4410 }, /* MOVE */ { CPUFUNC(op_113b_0), 4411 }, /* MOVE */ { CPUFUNC(op_113c_0), 4412 }, /* MOVE */ { CPUFUNC(op_1140_0), 4416 }, /* MOVE */ { CPUFUNC(op_1150_0), 4432 }, /* MOVE */ { CPUFUNC(op_1158_0), 4440 }, /* MOVE */ { CPUFUNC(op_1160_0), 4448 }, /* MOVE */ { CPUFUNC(op_1168_0), 4456 }, /* MOVE */ { CPUFUNC(op_1170_0), 4464 }, /* MOVE */ { CPUFUNC(op_1178_0), 4472 }, /* MOVE */ { CPUFUNC(op_1179_0), 4473 }, /* MOVE */ { CPUFUNC(op_117a_0), 4474 }, /* MOVE */ { CPUFUNC(op_117b_0), 4475 }, /* MOVE */ { CPUFUNC(op_117c_0), 4476 }, /* MOVE */ { CPUFUNC(op_1180_0), 4480 }, /* MOVE */ { CPUFUNC(op_1190_0), 4496 }, /* MOVE */ { CPUFUNC(op_1198_0), 4504 }, /* MOVE */ { CPUFUNC(op_11a0_0), 4512 }, /* MOVE */ { CPUFUNC(op_11a8_0), 4520 }, /* MOVE */ { CPUFUNC(op_11b0_0), 4528 }, /* MOVE */ { CPUFUNC(op_11b8_0), 4536 }, /* MOVE */ { CPUFUNC(op_11b9_0), 4537 }, /* MOVE */ { CPUFUNC(op_11ba_0), 4538 }, /* MOVE */ { CPUFUNC(op_11bb_0), 4539 }, /* MOVE */ { CPUFUNC(op_11bc_0), 4540 }, /* MOVE */ { CPUFUNC(op_11c0_0), 4544 }, /* MOVE */ { CPUFUNC(op_11d0_0), 4560 }, /* MOVE */ { CPUFUNC(op_11d8_0), 4568 }, /* MOVE */ { CPUFUNC(op_11e0_0), 4576 }, /* MOVE */ { CPUFUNC(op_11e8_0), 4584 }, /* MOVE */ { CPUFUNC(op_11f0_0), 4592 }, /* MOVE */ { CPUFUNC(op_11f8_0), 4600 }, /* MOVE */ { CPUFUNC(op_11f9_0), 4601 }, /* MOVE */ { CPUFUNC(op_11fa_0), 4602 }, /* MOVE */ { CPUFUNC(op_11fb_0), 4603 }, /* MOVE */ { CPUFUNC(op_11fc_0), 4604 }, /* MOVE */ { CPUFUNC(op_13c0_0), 5056 }, /* MOVE */ { CPUFUNC(op_13d0_0), 5072 }, /* MOVE */ { CPUFUNC(op_13d8_0), 5080 }, /* MOVE */ { CPUFUNC(op_13e0_0), 5088 }, /* MOVE */ { CPUFUNC(op_13e8_0), 5096 }, /* MOVE */ { CPUFUNC(op_13f0_0), 5104 }, /* MOVE */ { CPUFUNC(op_13f8_0), 5112 }, /* MOVE */ { CPUFUNC(op_13f9_0), 5113 }, /* MOVE */ { CPUFUNC(op_13fa_0), 5114 }, /* MOVE */ { CPUFUNC(op_13fb_0), 5115 }, /* MOVE */ { CPUFUNC(op_13fc_0), 5116 }, /* MOVE */ { CPUFUNC(op_2000_0), 8192 }, /* MOVE */ { CPUFUNC(op_2008_0), 8200 }, /* MOVE */ { CPUFUNC(op_2010_0), 8208 }, /* MOVE */ { CPUFUNC(op_2018_0), 8216 }, /* MOVE */ { CPUFUNC(op_2020_0), 8224 }, /* MOVE */ { CPUFUNC(op_2028_0), 8232 }, /* MOVE */ { CPUFUNC(op_2030_0), 8240 }, /* MOVE */ { CPUFUNC(op_2038_0), 8248 }, /* MOVE */ { CPUFUNC(op_2039_0), 8249 }, /* MOVE */ { CPUFUNC(op_203a_0), 8250 }, /* MOVE */ { CPUFUNC(op_203b_0), 8251 }, /* MOVE */ { CPUFUNC(op_203c_0), 8252 }, /* MOVE */ { CPUFUNC(op_2040_0), 8256 }, /* MOVEA */ { CPUFUNC(op_2048_0), 8264 }, /* MOVEA */ { CPUFUNC(op_2050_0), 8272 }, /* MOVEA */ { CPUFUNC(op_2058_0), 8280 }, /* MOVEA */ { CPUFUNC(op_2060_0), 8288 }, /* MOVEA */ { CPUFUNC(op_2068_0), 8296 }, /* MOVEA */ { CPUFUNC(op_2070_0), 8304 }, /* MOVEA */ { CPUFUNC(op_2078_0), 8312 }, /* MOVEA */ { CPUFUNC(op_2079_0), 8313 }, /* MOVEA */ { CPUFUNC(op_207a_0), 8314 }, /* MOVEA */ { CPUFUNC(op_207b_0), 8315 }, /* MOVEA */ { CPUFUNC(op_207c_0), 8316 }, /* MOVEA */ { CPUFUNC(op_2080_0), 8320 }, /* MOVE */ { CPUFUNC(op_2088_0), 8328 }, /* MOVE */ { CPUFUNC(op_2090_0), 8336 }, /* MOVE */ { CPUFUNC(op_2098_0), 8344 }, /* MOVE */ { CPUFUNC(op_20a0_0), 8352 }, /* MOVE */ { CPUFUNC(op_20a8_0), 8360 }, /* MOVE */ { CPUFUNC(op_20b0_0), 8368 }, /* MOVE */ { CPUFUNC(op_20b8_0), 8376 }, /* MOVE */ { CPUFUNC(op_20b9_0), 8377 }, /* MOVE */ { CPUFUNC(op_20ba_0), 8378 }, /* MOVE */ { CPUFUNC(op_20bb_0), 8379 }, /* MOVE */ { CPUFUNC(op_20bc_0), 8380 }, /* MOVE */ { CPUFUNC(op_20c0_0), 8384 }, /* MOVE */ { CPUFUNC(op_20c8_0), 8392 }, /* MOVE */ { CPUFUNC(op_20d0_0), 8400 }, /* MOVE */ { CPUFUNC(op_20d8_0), 8408 }, /* MOVE */ { CPUFUNC(op_20e0_0), 8416 }, /* MOVE */ { CPUFUNC(op_20e8_0), 8424 }, /* MOVE */ { CPUFUNC(op_20f0_0), 8432 }, /* MOVE */ { CPUFUNC(op_20f8_0), 8440 }, /* MOVE */ { CPUFUNC(op_20f9_0), 8441 }, /* MOVE */ { CPUFUNC(op_20fa_0), 8442 }, /* MOVE */ { CPUFUNC(op_20fb_0), 8443 }, /* MOVE */ { CPUFUNC(op_20fc_0), 8444 }, /* MOVE */ { CPUFUNC(op_2100_0), 8448 }, /* MOVE */ { CPUFUNC(op_2108_0), 8456 }, /* MOVE */ { CPUFUNC(op_2110_0), 8464 }, /* MOVE */ { CPUFUNC(op_2118_0), 8472 }, /* MOVE */ { CPUFUNC(op_2120_0), 8480 }, /* MOVE */ { CPUFUNC(op_2128_0), 8488 }, /* MOVE */ { CPUFUNC(op_2130_0), 8496 }, /* MOVE */ { CPUFUNC(op_2138_0), 8504 }, /* MOVE */ { CPUFUNC(op_2139_0), 8505 }, /* MOVE */ { CPUFUNC(op_213a_0), 8506 }, /* MOVE */ { CPUFUNC(op_213b_0), 8507 }, /* MOVE */ { CPUFUNC(op_213c_0), 8508 }, /* MOVE */ { CPUFUNC(op_2140_0), 8512 }, /* MOVE */ { CPUFUNC(op_2148_0), 8520 }, /* MOVE */ { CPUFUNC(op_2150_0), 8528 }, /* MOVE */ { CPUFUNC(op_2158_0), 8536 }, /* MOVE */ { CPUFUNC(op_2160_0), 8544 }, /* MOVE */ { CPUFUNC(op_2168_0), 8552 }, /* MOVE */ { CPUFUNC(op_2170_0), 8560 }, /* MOVE */ { CPUFUNC(op_2178_0), 8568 }, /* MOVE */ { CPUFUNC(op_2179_0), 8569 }, /* MOVE */ { CPUFUNC(op_217a_0), 8570 }, /* MOVE */ { CPUFUNC(op_217b_0), 8571 }, /* MOVE */ { CPUFUNC(op_217c_0), 8572 }, /* MOVE */ { CPUFUNC(op_2180_0), 8576 }, /* MOVE */ { CPUFUNC(op_2188_0), 8584 }, /* MOVE */ { CPUFUNC(op_2190_0), 8592 }, /* MOVE */ { CPUFUNC(op_2198_0), 8600 }, /* MOVE */ { CPUFUNC(op_21a0_0), 8608 }, /* MOVE */ { CPUFUNC(op_21a8_0), 8616 }, /* MOVE */ { CPUFUNC(op_21b0_0), 8624 }, /* MOVE */ { CPUFUNC(op_21b8_0), 8632 }, /* MOVE */ { CPUFUNC(op_21b9_0), 8633 }, /* MOVE */ { CPUFUNC(op_21ba_0), 8634 }, /* MOVE */ { CPUFUNC(op_21bb_0), 8635 }, /* MOVE */ { CPUFUNC(op_21bc_0), 8636 }, /* MOVE */ { CPUFUNC(op_21c0_0), 8640 }, /* MOVE */ { CPUFUNC(op_21c8_0), 8648 }, /* MOVE */ { CPUFUNC(op_21d0_0), 8656 }, /* MOVE */ { CPUFUNC(op_21d8_0), 8664 }, /* MOVE */ { CPUFUNC(op_21e0_0), 8672 }, /* MOVE */ { CPUFUNC(op_21e8_0), 8680 }, /* MOVE */ { CPUFUNC(op_21f0_0), 8688 }, /* MOVE */ { CPUFUNC(op_21f8_0), 8696 }, /* MOVE */ { CPUFUNC(op_21f9_0), 8697 }, /* MOVE */ { CPUFUNC(op_21fa_0), 8698 }, /* MOVE */ { CPUFUNC(op_21fb_0), 8699 }, /* MOVE */ { CPUFUNC(op_21fc_0), 8700 }, /* MOVE */ { CPUFUNC(op_23c0_0), 9152 }, /* MOVE */ { CPUFUNC(op_23c8_0), 9160 }, /* MOVE */ { CPUFUNC(op_23d0_0), 9168 }, /* MOVE */ { CPUFUNC(op_23d8_0), 9176 }, /* MOVE */ { CPUFUNC(op_23e0_0), 9184 }, /* MOVE */ { CPUFUNC(op_23e8_0), 9192 }, /* MOVE */ { CPUFUNC(op_23f0_0), 9200 }, /* MOVE */ { CPUFUNC(op_23f8_0), 9208 }, /* MOVE */ { CPUFUNC(op_23f9_0), 9209 }, /* MOVE */ { CPUFUNC(op_23fa_0), 9210 }, /* MOVE */ { CPUFUNC(op_23fb_0), 9211 }, /* MOVE */ { CPUFUNC(op_23fc_0), 9212 }, /* MOVE */ { CPUFUNC(op_3000_0), 12288 }, /* MOVE */ { CPUFUNC(op_3008_0), 12296 }, /* MOVE */ { CPUFUNC(op_3010_0), 12304 }, /* MOVE */ { CPUFUNC(op_3018_0), 12312 }, /* MOVE */ { CPUFUNC(op_3020_0), 12320 }, /* MOVE */ { CPUFUNC(op_3028_0), 12328 }, /* MOVE */ { CPUFUNC(op_3030_0), 12336 }, /* MOVE */ { CPUFUNC(op_3038_0), 12344 }, /* MOVE */ { CPUFUNC(op_3039_0), 12345 }, /* MOVE */ { CPUFUNC(op_303a_0), 12346 }, /* MOVE */ { CPUFUNC(op_303b_0), 12347 }, /* MOVE */ { CPUFUNC(op_303c_0), 12348 }, /* MOVE */ { CPUFUNC(op_3040_0), 12352 }, /* MOVEA */ { CPUFUNC(op_3048_0), 12360 }, /* MOVEA */ { CPUFUNC(op_3050_0), 12368 }, /* MOVEA */ { CPUFUNC(op_3058_0), 12376 }, /* MOVEA */ { CPUFUNC(op_3060_0), 12384 }, /* MOVEA */ { CPUFUNC(op_3068_0), 12392 }, /* MOVEA */ { CPUFUNC(op_3070_0), 12400 }, /* MOVEA */ { CPUFUNC(op_3078_0), 12408 }, /* MOVEA */ { CPUFUNC(op_3079_0), 12409 }, /* MOVEA */ { CPUFUNC(op_307a_0), 12410 }, /* MOVEA */ { CPUFUNC(op_307b_0), 12411 }, /* MOVEA */ { CPUFUNC(op_307c_0), 12412 }, /* MOVEA */ { CPUFUNC(op_3080_0), 12416 }, /* MOVE */ { CPUFUNC(op_3088_0), 12424 }, /* MOVE */ { CPUFUNC(op_3090_0), 12432 }, /* MOVE */ { CPUFUNC(op_3098_0), 12440 }, /* MOVE */ { CPUFUNC(op_30a0_0), 12448 }, /* MOVE */ { CPUFUNC(op_30a8_0), 12456 }, /* MOVE */ { CPUFUNC(op_30b0_0), 12464 }, /* MOVE */ { CPUFUNC(op_30b8_0), 12472 }, /* MOVE */ { CPUFUNC(op_30b9_0), 12473 }, /* MOVE */ { CPUFUNC(op_30ba_0), 12474 }, /* MOVE */ { CPUFUNC(op_30bb_0), 12475 }, /* MOVE */ { CPUFUNC(op_30bc_0), 12476 }, /* MOVE */ { CPUFUNC(op_30c0_0), 12480 }, /* MOVE */ { CPUFUNC(op_30c8_0), 12488 }, /* MOVE */ { CPUFUNC(op_30d0_0), 12496 }, /* MOVE */ { CPUFUNC(op_30d8_0), 12504 }, /* MOVE */ { CPUFUNC(op_30e0_0), 12512 }, /* MOVE */ { CPUFUNC(op_30e8_0), 12520 }, /* MOVE */ { CPUFUNC(op_30f0_0), 12528 }, /* MOVE */ { CPUFUNC(op_30f8_0), 12536 }, /* MOVE */ { CPUFUNC(op_30f9_0), 12537 }, /* MOVE */ { CPUFUNC(op_30fa_0), 12538 }, /* MOVE */ { CPUFUNC(op_30fb_0), 12539 }, /* MOVE */ { CPUFUNC(op_30fc_0), 12540 }, /* MOVE */ { CPUFUNC(op_3100_0), 12544 }, /* MOVE */ { CPUFUNC(op_3108_0), 12552 }, /* MOVE */ { CPUFUNC(op_3110_0), 12560 }, /* MOVE */ { CPUFUNC(op_3118_0), 12568 }, /* MOVE */ { CPUFUNC(op_3120_0), 12576 }, /* MOVE */ { CPUFUNC(op_3128_0), 12584 }, /* MOVE */ { CPUFUNC(op_3130_0), 12592 }, /* MOVE */ { CPUFUNC(op_3138_0), 12600 }, /* MOVE */ { CPUFUNC(op_3139_0), 12601 }, /* MOVE */ { CPUFUNC(op_313a_0), 12602 }, /* MOVE */ { CPUFUNC(op_313b_0), 12603 }, /* MOVE */ { CPUFUNC(op_313c_0), 12604 }, /* MOVE */ { CPUFUNC(op_3140_0), 12608 }, /* MOVE */ { CPUFUNC(op_3148_0), 12616 }, /* MOVE */ { CPUFUNC(op_3150_0), 12624 }, /* MOVE */ { CPUFUNC(op_3158_0), 12632 }, /* MOVE */ { CPUFUNC(op_3160_0), 12640 }, /* MOVE */ { CPUFUNC(op_3168_0), 12648 }, /* MOVE */ { CPUFUNC(op_3170_0), 12656 }, /* MOVE */ { CPUFUNC(op_3178_0), 12664 }, /* MOVE */ { CPUFUNC(op_3179_0), 12665 }, /* MOVE */ { CPUFUNC(op_317a_0), 12666 }, /* MOVE */ { CPUFUNC(op_317b_0), 12667 }, /* MOVE */ { CPUFUNC(op_317c_0), 12668 }, /* MOVE */ { CPUFUNC(op_3180_0), 12672 }, /* MOVE */ { CPUFUNC(op_3188_0), 12680 }, /* MOVE */ { CPUFUNC(op_3190_0), 12688 }, /* MOVE */ { CPUFUNC(op_3198_0), 12696 }, /* MOVE */ { CPUFUNC(op_31a0_0), 12704 }, /* MOVE */ { CPUFUNC(op_31a8_0), 12712 }, /* MOVE */ { CPUFUNC(op_31b0_0), 12720 }, /* MOVE */ { CPUFUNC(op_31b8_0), 12728 }, /* MOVE */ { CPUFUNC(op_31b9_0), 12729 }, /* MOVE */ { CPUFUNC(op_31ba_0), 12730 }, /* MOVE */ { CPUFUNC(op_31bb_0), 12731 }, /* MOVE */ { CPUFUNC(op_31bc_0), 12732 }, /* MOVE */ { CPUFUNC(op_31c0_0), 12736 }, /* MOVE */ { CPUFUNC(op_31c8_0), 12744 }, /* MOVE */ { CPUFUNC(op_31d0_0), 12752 }, /* MOVE */ { CPUFUNC(op_31d8_0), 12760 }, /* MOVE */ { CPUFUNC(op_31e0_0), 12768 }, /* MOVE */ { CPUFUNC(op_31e8_0), 12776 }, /* MOVE */ { CPUFUNC(op_31f0_0), 12784 }, /* MOVE */ { CPUFUNC(op_31f8_0), 12792 }, /* MOVE */ { CPUFUNC(op_31f9_0), 12793 }, /* MOVE */ { CPUFUNC(op_31fa_0), 12794 }, /* MOVE */ { CPUFUNC(op_31fb_0), 12795 }, /* MOVE */ { CPUFUNC(op_31fc_0), 12796 }, /* MOVE */ { CPUFUNC(op_33c0_0), 13248 }, /* MOVE */ { CPUFUNC(op_33c8_0), 13256 }, /* MOVE */ { CPUFUNC(op_33d0_0), 13264 }, /* MOVE */ { CPUFUNC(op_33d8_0), 13272 }, /* MOVE */ { CPUFUNC(op_33e0_0), 13280 }, /* MOVE */ { CPUFUNC(op_33e8_0), 13288 }, /* MOVE */ { CPUFUNC(op_33f0_0), 13296 }, /* MOVE */ { CPUFUNC(op_33f8_0), 13304 }, /* MOVE */ { CPUFUNC(op_33f9_0), 13305 }, /* MOVE */ { CPUFUNC(op_33fa_0), 13306 }, /* MOVE */ { CPUFUNC(op_33fb_0), 13307 }, /* MOVE */ { CPUFUNC(op_33fc_0), 13308 }, /* MOVE */ { CPUFUNC(op_4000_0), 16384 }, /* NEGX */ { CPUFUNC(op_4010_0), 16400 }, /* NEGX */ { CPUFUNC(op_4018_0), 16408 }, /* NEGX */ { CPUFUNC(op_4020_0), 16416 }, /* NEGX */ { CPUFUNC(op_4028_0), 16424 }, /* NEGX */ { CPUFUNC(op_4030_0), 16432 }, /* NEGX */ { CPUFUNC(op_4038_0), 16440 }, /* NEGX */ { CPUFUNC(op_4039_0), 16441 }, /* NEGX */ { CPUFUNC(op_4040_0), 16448 }, /* NEGX */ { CPUFUNC(op_4050_0), 16464 }, /* NEGX */ { CPUFUNC(op_4058_0), 16472 }, /* NEGX */ { CPUFUNC(op_4060_0), 16480 }, /* NEGX */ { CPUFUNC(op_4068_0), 16488 }, /* NEGX */ { CPUFUNC(op_4070_0), 16496 }, /* NEGX */ { CPUFUNC(op_4078_0), 16504 }, /* NEGX */ { CPUFUNC(op_4079_0), 16505 }, /* NEGX */ { CPUFUNC(op_4080_0), 16512 }, /* NEGX */ { CPUFUNC(op_4090_0), 16528 }, /* NEGX */ { CPUFUNC(op_4098_0), 16536 }, /* NEGX */ { CPUFUNC(op_40a0_0), 16544 }, /* NEGX */ { CPUFUNC(op_40a8_0), 16552 }, /* NEGX */ { CPUFUNC(op_40b0_0), 16560 }, /* NEGX */ { CPUFUNC(op_40b8_0), 16568 }, /* NEGX */ { CPUFUNC(op_40b9_0), 16569 }, /* NEGX */ { CPUFUNC(op_40c0_0), 16576 }, /* MVSR2 */ { CPUFUNC(op_40d0_0), 16592 }, /* MVSR2 */ { CPUFUNC(op_40d8_0), 16600 }, /* MVSR2 */ { CPUFUNC(op_40e0_0), 16608 }, /* MVSR2 */ { CPUFUNC(op_40e8_0), 16616 }, /* MVSR2 */ { CPUFUNC(op_40f0_0), 16624 }, /* MVSR2 */ { CPUFUNC(op_40f8_0), 16632 }, /* MVSR2 */ { CPUFUNC(op_40f9_0), 16633 }, /* MVSR2 */ { CPUFUNC(op_4100_0), 16640 }, /* CHK */ { CPUFUNC(op_4110_0), 16656 }, /* CHK */ { CPUFUNC(op_4118_0), 16664 }, /* CHK */ { CPUFUNC(op_4120_0), 16672 }, /* CHK */ { CPUFUNC(op_4128_0), 16680 }, /* CHK */ { CPUFUNC(op_4130_0), 16688 }, /* CHK */ { CPUFUNC(op_4138_0), 16696 }, /* CHK */ { CPUFUNC(op_4139_0), 16697 }, /* CHK */ { CPUFUNC(op_413a_0), 16698 }, /* CHK */ { CPUFUNC(op_413b_0), 16699 }, /* CHK */ { CPUFUNC(op_413c_0), 16700 }, /* CHK */ { CPUFUNC(op_4180_0), 16768 }, /* CHK */ { CPUFUNC(op_4190_0), 16784 }, /* CHK */ { CPUFUNC(op_4198_0), 16792 }, /* CHK */ { CPUFUNC(op_41a0_0), 16800 }, /* CHK */ { CPUFUNC(op_41a8_0), 16808 }, /* CHK */ { CPUFUNC(op_41b0_0), 16816 }, /* CHK */ { CPUFUNC(op_41b8_0), 16824 }, /* CHK */ { CPUFUNC(op_41b9_0), 16825 }, /* CHK */ { CPUFUNC(op_41ba_0), 16826 }, /* CHK */ { CPUFUNC(op_41bb_0), 16827 }, /* CHK */ { CPUFUNC(op_41bc_0), 16828 }, /* CHK */ { CPUFUNC(op_41d0_0), 16848 }, /* LEA */ { CPUFUNC(op_41e8_0), 16872 }, /* LEA */ { CPUFUNC(op_41f0_0), 16880 }, /* LEA */ { CPUFUNC(op_41f8_0), 16888 }, /* LEA */ { CPUFUNC(op_41f9_0), 16889 }, /* LEA */ { CPUFUNC(op_41fa_0), 16890 }, /* LEA */ { CPUFUNC(op_41fb_0), 16891 }, /* LEA */ { CPUFUNC(op_4200_0), 16896 }, /* CLR */ { CPUFUNC(op_4210_0), 16912 }, /* CLR */ { CPUFUNC(op_4218_0), 16920 }, /* CLR */ { CPUFUNC(op_4220_0), 16928 }, /* CLR */ { CPUFUNC(op_4228_0), 16936 }, /* CLR */ { CPUFUNC(op_4230_0), 16944 }, /* CLR */ { CPUFUNC(op_4238_0), 16952 }, /* CLR */ { CPUFUNC(op_4239_0), 16953 }, /* CLR */ { CPUFUNC(op_4240_0), 16960 }, /* CLR */ { CPUFUNC(op_4250_0), 16976 }, /* CLR */ { CPUFUNC(op_4258_0), 16984 }, /* CLR */ { CPUFUNC(op_4260_0), 16992 }, /* CLR */ { CPUFUNC(op_4268_0), 17000 }, /* CLR */ { CPUFUNC(op_4270_0), 17008 }, /* CLR */ { CPUFUNC(op_4278_0), 17016 }, /* CLR */ { CPUFUNC(op_4279_0), 17017 }, /* CLR */ { CPUFUNC(op_4280_0), 17024 }, /* CLR */ { CPUFUNC(op_4290_0), 17040 }, /* CLR */ { CPUFUNC(op_4298_0), 17048 }, /* CLR */ { CPUFUNC(op_42a0_0), 17056 }, /* CLR */ { CPUFUNC(op_42a8_0), 17064 }, /* CLR */ { CPUFUNC(op_42b0_0), 17072 }, /* CLR */ { CPUFUNC(op_42b8_0), 17080 }, /* CLR */ { CPUFUNC(op_42b9_0), 17081 }, /* CLR */ { CPUFUNC(op_42c0_0), 17088 }, /* MVSR2 */ { CPUFUNC(op_42d0_0), 17104 }, /* MVSR2 */ { CPUFUNC(op_42d8_0), 17112 }, /* MVSR2 */ { CPUFUNC(op_42e0_0), 17120 }, /* MVSR2 */ { CPUFUNC(op_42e8_0), 17128 }, /* MVSR2 */ { CPUFUNC(op_42f0_0), 17136 }, /* MVSR2 */ { CPUFUNC(op_42f8_0), 17144 }, /* MVSR2 */ { CPUFUNC(op_42f9_0), 17145 }, /* MVSR2 */ { CPUFUNC(op_4400_0), 17408 }, /* NEG */ { CPUFUNC(op_4410_0), 17424 }, /* NEG */ { CPUFUNC(op_4418_0), 17432 }, /* NEG */ { CPUFUNC(op_4420_0), 17440 }, /* NEG */ { CPUFUNC(op_4428_0), 17448 }, /* NEG */ { CPUFUNC(op_4430_0), 17456 }, /* NEG */ { CPUFUNC(op_4438_0), 17464 }, /* NEG */ { CPUFUNC(op_4439_0), 17465 }, /* NEG */ { CPUFUNC(op_4440_0), 17472 }, /* NEG */ { CPUFUNC(op_4450_0), 17488 }, /* NEG */ { CPUFUNC(op_4458_0), 17496 }, /* NEG */ { CPUFUNC(op_4460_0), 17504 }, /* NEG */ { CPUFUNC(op_4468_0), 17512 }, /* NEG */ { CPUFUNC(op_4470_0), 17520 }, /* NEG */ { CPUFUNC(op_4478_0), 17528 }, /* NEG */ { CPUFUNC(op_4479_0), 17529 }, /* NEG */ { CPUFUNC(op_4480_0), 17536 }, /* NEG */ { CPUFUNC(op_4490_0), 17552 }, /* NEG */ { CPUFUNC(op_4498_0), 17560 }, /* NEG */ { CPUFUNC(op_44a0_0), 17568 }, /* NEG */ { CPUFUNC(op_44a8_0), 17576 }, /* NEG */ { CPUFUNC(op_44b0_0), 17584 }, /* NEG */ { CPUFUNC(op_44b8_0), 17592 }, /* NEG */ { CPUFUNC(op_44b9_0), 17593 }, /* NEG */ { CPUFUNC(op_44c0_0), 17600 }, /* MV2SR */ { CPUFUNC(op_44d0_0), 17616 }, /* MV2SR */ { CPUFUNC(op_44d8_0), 17624 }, /* MV2SR */ { CPUFUNC(op_44e0_0), 17632 }, /* MV2SR */ { CPUFUNC(op_44e8_0), 17640 }, /* MV2SR */ { CPUFUNC(op_44f0_0), 17648 }, /* MV2SR */ { CPUFUNC(op_44f8_0), 17656 }, /* MV2SR */ { CPUFUNC(op_44f9_0), 17657 }, /* MV2SR */ { CPUFUNC(op_44fa_0), 17658 }, /* MV2SR */ { CPUFUNC(op_44fb_0), 17659 }, /* MV2SR */ { CPUFUNC(op_44fc_0), 17660 }, /* MV2SR */ { CPUFUNC(op_4600_0), 17920 }, /* NOT */ { CPUFUNC(op_4610_0), 17936 }, /* NOT */ { CPUFUNC(op_4618_0), 17944 }, /* NOT */ { CPUFUNC(op_4620_0), 17952 }, /* NOT */ { CPUFUNC(op_4628_0), 17960 }, /* NOT */ { CPUFUNC(op_4630_0), 17968 }, /* NOT */ { CPUFUNC(op_4638_0), 17976 }, /* NOT */ { CPUFUNC(op_4639_0), 17977 }, /* NOT */ { CPUFUNC(op_4640_0), 17984 }, /* NOT */ { CPUFUNC(op_4650_0), 18000 }, /* NOT */ { CPUFUNC(op_4658_0), 18008 }, /* NOT */ { CPUFUNC(op_4660_0), 18016 }, /* NOT */ { CPUFUNC(op_4668_0), 18024 }, /* NOT */ { CPUFUNC(op_4670_0), 18032 }, /* NOT */ { CPUFUNC(op_4678_0), 18040 }, /* NOT */ { CPUFUNC(op_4679_0), 18041 }, /* NOT */ { CPUFUNC(op_4680_0), 18048 }, /* NOT */ { CPUFUNC(op_4690_0), 18064 }, /* NOT */ { CPUFUNC(op_4698_0), 18072 }, /* NOT */ { CPUFUNC(op_46a0_0), 18080 }, /* NOT */ { CPUFUNC(op_46a8_0), 18088 }, /* NOT */ { CPUFUNC(op_46b0_0), 18096 }, /* NOT */ { CPUFUNC(op_46b8_0), 18104 }, /* NOT */ { CPUFUNC(op_46b9_0), 18105 }, /* NOT */ { CPUFUNC(op_46c0_0), 18112 }, /* MV2SR */ { CPUFUNC(op_46d0_0), 18128 }, /* MV2SR */ { CPUFUNC(op_46d8_0), 18136 }, /* MV2SR */ { CPUFUNC(op_46e0_0), 18144 }, /* MV2SR */ { CPUFUNC(op_46e8_0), 18152 }, /* MV2SR */ { CPUFUNC(op_46f0_0), 18160 }, /* MV2SR */ { CPUFUNC(op_46f8_0), 18168 }, /* MV2SR */ { CPUFUNC(op_46f9_0), 18169 }, /* MV2SR */ { CPUFUNC(op_46fa_0), 18170 }, /* MV2SR */ { CPUFUNC(op_46fb_0), 18171 }, /* MV2SR */ { CPUFUNC(op_46fc_0), 18172 }, /* MV2SR */ { CPUFUNC(op_4800_0), 18432 }, /* NBCD */ { CPUFUNC(op_4808_0), 18440 }, /* LINK */ { CPUFUNC(op_4810_0), 18448 }, /* NBCD */ { CPUFUNC(op_4818_0), 18456 }, /* NBCD */ { CPUFUNC(op_4820_0), 18464 }, /* NBCD */ { CPUFUNC(op_4828_0), 18472 }, /* NBCD */ { CPUFUNC(op_4830_0), 18480 }, /* NBCD */ { CPUFUNC(op_4838_0), 18488 }, /* NBCD */ { CPUFUNC(op_4839_0), 18489 }, /* NBCD */ { CPUFUNC(op_4840_0), 18496 }, /* SWAP */ { CPUFUNC(op_4848_0), 18504 }, /* BKPT */ { CPUFUNC(op_4850_0), 18512 }, /* PEA */ { CPUFUNC(op_4868_0), 18536 }, /* PEA */ { CPUFUNC(op_4870_0), 18544 }, /* PEA */ { CPUFUNC(op_4878_0), 18552 }, /* PEA */ { CPUFUNC(op_4879_0), 18553 }, /* PEA */ { CPUFUNC(op_487a_0), 18554 }, /* PEA */ { CPUFUNC(op_487b_0), 18555 }, /* PEA */ { CPUFUNC(op_4880_0), 18560 }, /* EXT */ { CPUFUNC(op_4890_0), 18576 }, /* MVMLE */ { CPUFUNC(op_48a0_0), 18592 }, /* MVMLE */ { CPUFUNC(op_48a8_0), 18600 }, /* MVMLE */ { CPUFUNC(op_48b0_0), 18608 }, /* MVMLE */ { CPUFUNC(op_48b8_0), 18616 }, /* MVMLE */ { CPUFUNC(op_48b9_0), 18617 }, /* MVMLE */ { CPUFUNC(op_48c0_0), 18624 }, /* EXT */ { CPUFUNC(op_48d0_0), 18640 }, /* MVMLE */ { CPUFUNC(op_48e0_0), 18656 }, /* MVMLE */ { CPUFUNC(op_48e8_0), 18664 }, /* MVMLE */ { CPUFUNC(op_48f0_0), 18672 }, /* MVMLE */ { CPUFUNC(op_48f8_0), 18680 }, /* MVMLE */ { CPUFUNC(op_48f9_0), 18681 }, /* MVMLE */ { CPUFUNC(op_49c0_0), 18880 }, /* EXT */ { CPUFUNC(op_4a00_0), 18944 }, /* TST */ { CPUFUNC(op_4a10_0), 18960 }, /* TST */ { CPUFUNC(op_4a18_0), 18968 }, /* TST */ { CPUFUNC(op_4a20_0), 18976 }, /* TST */ { CPUFUNC(op_4a28_0), 18984 }, /* TST */ { CPUFUNC(op_4a30_0), 18992 }, /* TST */ { CPUFUNC(op_4a38_0), 19000 }, /* TST */ { CPUFUNC(op_4a39_0), 19001 }, /* TST */ { CPUFUNC(op_4a3a_0), 19002 }, /* TST */ { CPUFUNC(op_4a3b_0), 19003 }, /* TST */ { CPUFUNC(op_4a3c_0), 19004 }, /* TST */ { CPUFUNC(op_4a40_0), 19008 }, /* TST */ { CPUFUNC(op_4a48_0), 19016 }, /* TST */ { CPUFUNC(op_4a50_0), 19024 }, /* TST */ { CPUFUNC(op_4a58_0), 19032 }, /* TST */ { CPUFUNC(op_4a60_0), 19040 }, /* TST */ { CPUFUNC(op_4a68_0), 19048 }, /* TST */ { CPUFUNC(op_4a70_0), 19056 }, /* TST */ { CPUFUNC(op_4a78_0), 19064 }, /* TST */ { CPUFUNC(op_4a79_0), 19065 }, /* TST */ { CPUFUNC(op_4a7a_0), 19066 }, /* TST */ { CPUFUNC(op_4a7b_0), 19067 }, /* TST */ { CPUFUNC(op_4a7c_0), 19068 }, /* TST */ { CPUFUNC(op_4a80_0), 19072 }, /* TST */ { CPUFUNC(op_4a88_0), 19080 }, /* TST */ { CPUFUNC(op_4a90_0), 19088 }, /* TST */ { CPUFUNC(op_4a98_0), 19096 }, /* TST */ { CPUFUNC(op_4aa0_0), 19104 }, /* TST */ { CPUFUNC(op_4aa8_0), 19112 }, /* TST */ { CPUFUNC(op_4ab0_0), 19120 }, /* TST */ { CPUFUNC(op_4ab8_0), 19128 }, /* TST */ { CPUFUNC(op_4ab9_0), 19129 }, /* TST */ { CPUFUNC(op_4aba_0), 19130 }, /* TST */ { CPUFUNC(op_4abb_0), 19131 }, /* TST */ { CPUFUNC(op_4abc_0), 19132 }, /* TST */ { CPUFUNC(op_4ac0_0), 19136 }, /* TAS */ { CPUFUNC(op_4ad0_0), 19152 }, /* TAS */ { CPUFUNC(op_4ad8_0), 19160 }, /* TAS */ { CPUFUNC(op_4ae0_0), 19168 }, /* TAS */ { CPUFUNC(op_4ae8_0), 19176 }, /* TAS */ { CPUFUNC(op_4af0_0), 19184 }, /* TAS */ { CPUFUNC(op_4af8_0), 19192 }, /* TAS */ { CPUFUNC(op_4af9_0), 19193 }, /* TAS */ { CPUFUNC(op_4c00_0), 19456 }, /* MULL */ { CPUFUNC(op_4c10_0), 19472 }, /* MULL */ { CPUFUNC(op_4c18_0), 19480 }, /* MULL */ { CPUFUNC(op_4c20_0), 19488 }, /* MULL */ { CPUFUNC(op_4c28_0), 19496 }, /* MULL */ { CPUFUNC(op_4c30_0), 19504 }, /* MULL */ { CPUFUNC(op_4c38_0), 19512 }, /* MULL */ { CPUFUNC(op_4c39_0), 19513 }, /* MULL */ { CPUFUNC(op_4c3a_0), 19514 }, /* MULL */ { CPUFUNC(op_4c3b_0), 19515 }, /* MULL */ { CPUFUNC(op_4c3c_0), 19516 }, /* MULL */ { CPUFUNC(op_4c40_0), 19520 }, /* DIVL */ { CPUFUNC(op_4c50_0), 19536 }, /* DIVL */ { CPUFUNC(op_4c58_0), 19544 }, /* DIVL */ { CPUFUNC(op_4c60_0), 19552 }, /* DIVL */ { CPUFUNC(op_4c68_0), 19560 }, /* DIVL */ { CPUFUNC(op_4c70_0), 19568 }, /* DIVL */ { CPUFUNC(op_4c78_0), 19576 }, /* DIVL */ { CPUFUNC(op_4c79_0), 19577 }, /* DIVL */ { CPUFUNC(op_4c7a_0), 19578 }, /* DIVL */ { CPUFUNC(op_4c7b_0), 19579 }, /* DIVL */ { CPUFUNC(op_4c7c_0), 19580 }, /* DIVL */ { CPUFUNC(op_4c90_0), 19600 }, /* MVMEL */ { CPUFUNC(op_4c98_0), 19608 }, /* MVMEL */ { CPUFUNC(op_4ca8_0), 19624 }, /* MVMEL */ { CPUFUNC(op_4cb0_0), 19632 }, /* MVMEL */ { CPUFUNC(op_4cb8_0), 19640 }, /* MVMEL */ { CPUFUNC(op_4cb9_0), 19641 }, /* MVMEL */ { CPUFUNC(op_4cba_0), 19642 }, /* MVMEL */ { CPUFUNC(op_4cbb_0), 19643 }, /* MVMEL */ { CPUFUNC(op_4cd0_0), 19664 }, /* MVMEL */ { CPUFUNC(op_4cd8_0), 19672 }, /* MVMEL */ { CPUFUNC(op_4ce8_0), 19688 }, /* MVMEL */ { CPUFUNC(op_4cf0_0), 19696 }, /* MVMEL */ { CPUFUNC(op_4cf8_0), 19704 }, /* MVMEL */ { CPUFUNC(op_4cf9_0), 19705 }, /* MVMEL */ { CPUFUNC(op_4cfa_0), 19706 }, /* MVMEL */ { CPUFUNC(op_4cfb_0), 19707 }, /* MVMEL */ { CPUFUNC(op_4e40_0), 20032 }, /* TRAP */ { CPUFUNC(op_4e50_0), 20048 }, /* LINK */ { CPUFUNC(op_4e58_0), 20056 }, /* UNLK */ { CPUFUNC(op_4e60_0), 20064 }, /* MVR2USP */ { CPUFUNC(op_4e68_0), 20072 }, /* MVUSP2R */ { CPUFUNC(op_4e70_0), 20080 }, /* RESET */ { CPUFUNC(op_4e71_0), 20081 }, /* NOP */ { CPUFUNC(op_4e72_0), 20082 }, /* STOP */ { CPUFUNC(op_4e73_0), 20083 }, /* RTE */ { CPUFUNC(op_4e74_0), 20084 }, /* RTD */ { CPUFUNC(op_4e75_0), 20085 }, /* RTS */ { CPUFUNC(op_4e76_0), 20086 }, /* TRAPV */ { CPUFUNC(op_4e77_0), 20087 }, /* RTR */ { CPUFUNC(op_4e7a_0), 20090 }, /* MOVEC2 */ { CPUFUNC(op_4e7b_0), 20091 }, /* MOVE2C */ { CPUFUNC(op_4e90_0), 20112 }, /* JSR */ { CPUFUNC(op_4ea8_0), 20136 }, /* JSR */ { CPUFUNC(op_4eb0_0), 20144 }, /* JSR */ { CPUFUNC(op_4eb8_0), 20152 }, /* JSR */ { CPUFUNC(op_4eb9_0), 20153 }, /* JSR */ { CPUFUNC(op_4eba_0), 20154 }, /* JSR */ { CPUFUNC(op_4ebb_0), 20155 }, /* JSR */ { CPUFUNC(op_4ed0_0), 20176 }, /* JMP */ { CPUFUNC(op_4ee8_0), 20200 }, /* JMP */ { CPUFUNC(op_4ef0_0), 20208 }, /* JMP */ { CPUFUNC(op_4ef8_0), 20216 }, /* JMP */ { CPUFUNC(op_4ef9_0), 20217 }, /* JMP */ { CPUFUNC(op_4efa_0), 20218 }, /* JMP */ { CPUFUNC(op_4efb_0), 20219 }, /* JMP */ { CPUFUNC(op_5000_0), 20480 }, /* ADD */ { CPUFUNC(op_5010_0), 20496 }, /* ADD */ { CPUFUNC(op_5018_0), 20504 }, /* ADD */ { CPUFUNC(op_5020_0), 20512 }, /* ADD */ { CPUFUNC(op_5028_0), 20520 }, /* ADD */ { CPUFUNC(op_5030_0), 20528 }, /* ADD */ { CPUFUNC(op_5038_0), 20536 }, /* ADD */ { CPUFUNC(op_5039_0), 20537 }, /* ADD */ { CPUFUNC(op_5040_0), 20544 }, /* ADD */ { CPUFUNC(op_5048_0), 20552 }, /* ADDA */ { CPUFUNC(op_5050_0), 20560 }, /* ADD */ { CPUFUNC(op_5058_0), 20568 }, /* ADD */ { CPUFUNC(op_5060_0), 20576 }, /* ADD */ { CPUFUNC(op_5068_0), 20584 }, /* ADD */ { CPUFUNC(op_5070_0), 20592 }, /* ADD */ { CPUFUNC(op_5078_0), 20600 }, /* ADD */ { CPUFUNC(op_5079_0), 20601 }, /* ADD */ { CPUFUNC(op_5080_0), 20608 }, /* ADD */ { CPUFUNC(op_5088_0), 20616 }, /* ADDA */ { CPUFUNC(op_5090_0), 20624 }, /* ADD */ { CPUFUNC(op_5098_0), 20632 }, /* ADD */ { CPUFUNC(op_50a0_0), 20640 }, /* ADD */ { CPUFUNC(op_50a8_0), 20648 }, /* ADD */ { CPUFUNC(op_50b0_0), 20656 }, /* ADD */ { CPUFUNC(op_50b8_0), 20664 }, /* ADD */ { CPUFUNC(op_50b9_0), 20665 }, /* ADD */ { CPUFUNC(op_50c0_0), 20672 }, /* Scc */ { CPUFUNC(op_50c8_0), 20680 }, /* DBcc */ { CPUFUNC(op_50d0_0), 20688 }, /* Scc */ { CPUFUNC(op_50d8_0), 20696 }, /* Scc */ { CPUFUNC(op_50e0_0), 20704 }, /* Scc */ { CPUFUNC(op_50e8_0), 20712 }, /* Scc */ { CPUFUNC(op_50f0_0), 20720 }, /* Scc */ { CPUFUNC(op_50f8_0), 20728 }, /* Scc */ { CPUFUNC(op_50f9_0), 20729 }, /* Scc */ { CPUFUNC(op_50fa_0), 20730 }, /* TRAPcc */ { CPUFUNC(op_50fb_0), 20731 }, /* TRAPcc */ { CPUFUNC(op_50fc_0), 20732 }, /* TRAPcc */ { CPUFUNC(op_5100_0), 20736 }, /* SUB */ { CPUFUNC(op_5110_0), 20752 }, /* SUB */ { CPUFUNC(op_5118_0), 20760 }, /* SUB */ { CPUFUNC(op_5120_0), 20768 }, /* SUB */ { CPUFUNC(op_5128_0), 20776 }, /* SUB */ { CPUFUNC(op_5130_0), 20784 }, /* SUB */ { CPUFUNC(op_5138_0), 20792 }, /* SUB */ { CPUFUNC(op_5139_0), 20793 }, /* SUB */ { CPUFUNC(op_5140_0), 20800 }, /* SUB */ { CPUFUNC(op_5148_0), 20808 }, /* SUBA */ { CPUFUNC(op_5150_0), 20816 }, /* SUB */ { CPUFUNC(op_5158_0), 20824 }, /* SUB */ { CPUFUNC(op_5160_0), 20832 }, /* SUB */ { CPUFUNC(op_5168_0), 20840 }, /* SUB */ { CPUFUNC(op_5170_0), 20848 }, /* SUB */ { CPUFUNC(op_5178_0), 20856 }, /* SUB */ { CPUFUNC(op_5179_0), 20857 }, /* SUB */ { CPUFUNC(op_5180_0), 20864 }, /* SUB */ { CPUFUNC(op_5188_0), 20872 }, /* SUBA */ { CPUFUNC(op_5190_0), 20880 }, /* SUB */ { CPUFUNC(op_5198_0), 20888 }, /* SUB */ { CPUFUNC(op_51a0_0), 20896 }, /* SUB */ { CPUFUNC(op_51a8_0), 20904 }, /* SUB */ { CPUFUNC(op_51b0_0), 20912 }, /* SUB */ { CPUFUNC(op_51b8_0), 20920 }, /* SUB */ { CPUFUNC(op_51b9_0), 20921 }, /* SUB */ { CPUFUNC(op_51c0_0), 20928 }, /* Scc */ { CPUFUNC(op_51c8_0), 20936 }, /* DBcc */ { CPUFUNC(op_51d0_0), 20944 }, /* Scc */ { CPUFUNC(op_51d8_0), 20952 }, /* Scc */ { CPUFUNC(op_51e0_0), 20960 }, /* Scc */ { CPUFUNC(op_51e8_0), 20968 }, /* Scc */ { CPUFUNC(op_51f0_0), 20976 }, /* Scc */ { CPUFUNC(op_51f8_0), 20984 }, /* Scc */ { CPUFUNC(op_51f9_0), 20985 }, /* Scc */ { CPUFUNC(op_51fa_0), 20986 }, /* TRAPcc */ { CPUFUNC(op_51fb_0), 20987 }, /* TRAPcc */ { CPUFUNC(op_51fc_0), 20988 }, /* TRAPcc */ { CPUFUNC(op_52c0_0), 21184 }, /* Scc */ { CPUFUNC(op_52c8_0), 21192 }, /* DBcc */ { CPUFUNC(op_52d0_0), 21200 }, /* Scc */ { CPUFUNC(op_52d8_0), 21208 }, /* Scc */ { CPUFUNC(op_52e0_0), 21216 }, /* Scc */ { CPUFUNC(op_52e8_0), 21224 }, /* Scc */ { CPUFUNC(op_52f0_0), 21232 }, /* Scc */ { CPUFUNC(op_52f8_0), 21240 }, /* Scc */ { CPUFUNC(op_52f9_0), 21241 }, /* Scc */ { CPUFUNC(op_52fa_0), 21242 }, /* TRAPcc */ { CPUFUNC(op_52fb_0), 21243 }, /* TRAPcc */ { CPUFUNC(op_52fc_0), 21244 }, /* TRAPcc */ { CPUFUNC(op_53c0_0), 21440 }, /* Scc */ { CPUFUNC(op_53c8_0), 21448 }, /* DBcc */ { CPUFUNC(op_53d0_0), 21456 }, /* Scc */ { CPUFUNC(op_53d8_0), 21464 }, /* Scc */ { CPUFUNC(op_53e0_0), 21472 }, /* Scc */ { CPUFUNC(op_53e8_0), 21480 }, /* Scc */ { CPUFUNC(op_53f0_0), 21488 }, /* Scc */ { CPUFUNC(op_53f8_0), 21496 }, /* Scc */ { CPUFUNC(op_53f9_0), 21497 }, /* Scc */ { CPUFUNC(op_53fa_0), 21498 }, /* TRAPcc */ { CPUFUNC(op_53fb_0), 21499 }, /* TRAPcc */ { CPUFUNC(op_53fc_0), 21500 }, /* TRAPcc */ { CPUFUNC(op_54c0_0), 21696 }, /* Scc */ { CPUFUNC(op_54c8_0), 21704 }, /* DBcc */ { CPUFUNC(op_54d0_0), 21712 }, /* Scc */ { CPUFUNC(op_54d8_0), 21720 }, /* Scc */ { CPUFUNC(op_54e0_0), 21728 }, /* Scc */ { CPUFUNC(op_54e8_0), 21736 }, /* Scc */ { CPUFUNC(op_54f0_0), 21744 }, /* Scc */ { CPUFUNC(op_54f8_0), 21752 }, /* Scc */ { CPUFUNC(op_54f9_0), 21753 }, /* Scc */ { CPUFUNC(op_54fa_0), 21754 }, /* TRAPcc */ { CPUFUNC(op_54fb_0), 21755 }, /* TRAPcc */ { CPUFUNC(op_54fc_0), 21756 }, /* TRAPcc */ { CPUFUNC(op_55c0_0), 21952 }, /* Scc */ { CPUFUNC(op_55c8_0), 21960 }, /* DBcc */ { CPUFUNC(op_55d0_0), 21968 }, /* Scc */ { CPUFUNC(op_55d8_0), 21976 }, /* Scc */ { CPUFUNC(op_55e0_0), 21984 }, /* Scc */ { CPUFUNC(op_55e8_0), 21992 }, /* Scc */ { CPUFUNC(op_55f0_0), 22000 }, /* Scc */ { CPUFUNC(op_55f8_0), 22008 }, /* Scc */ { CPUFUNC(op_55f9_0), 22009 }, /* Scc */ { CPUFUNC(op_55fa_0), 22010 }, /* TRAPcc */ { CPUFUNC(op_55fb_0), 22011 }, /* TRAPcc */ { CPUFUNC(op_55fc_0), 22012 }, /* TRAPcc */ { CPUFUNC(op_56c0_0), 22208 }, /* Scc */ { CPUFUNC(op_56c8_0), 22216 }, /* DBcc */ { CPUFUNC(op_56d0_0), 22224 }, /* Scc */ { CPUFUNC(op_56d8_0), 22232 }, /* Scc */ { CPUFUNC(op_56e0_0), 22240 }, /* Scc */ { CPUFUNC(op_56e8_0), 22248 }, /* Scc */ { CPUFUNC(op_56f0_0), 22256 }, /* Scc */ { CPUFUNC(op_56f8_0), 22264 }, /* Scc */ { CPUFUNC(op_56f9_0), 22265 }, /* Scc */ { CPUFUNC(op_56fa_0), 22266 }, /* TRAPcc */ { CPUFUNC(op_56fb_0), 22267 }, /* TRAPcc */ { CPUFUNC(op_56fc_0), 22268 }, /* TRAPcc */ { CPUFUNC(op_57c0_0), 22464 }, /* Scc */ { CPUFUNC(op_57c8_0), 22472 }, /* DBcc */ { CPUFUNC(op_57d0_0), 22480 }, /* Scc */ { CPUFUNC(op_57d8_0), 22488 }, /* Scc */ { CPUFUNC(op_57e0_0), 22496 }, /* Scc */ { CPUFUNC(op_57e8_0), 22504 }, /* Scc */ { CPUFUNC(op_57f0_0), 22512 }, /* Scc */ { CPUFUNC(op_57f8_0), 22520 }, /* Scc */ { CPUFUNC(op_57f9_0), 22521 }, /* Scc */ { CPUFUNC(op_57fa_0), 22522 }, /* TRAPcc */ { CPUFUNC(op_57fb_0), 22523 }, /* TRAPcc */ { CPUFUNC(op_57fc_0), 22524 }, /* TRAPcc */ { CPUFUNC(op_58c0_0), 22720 }, /* Scc */ { CPUFUNC(op_58c8_0), 22728 }, /* DBcc */ { CPUFUNC(op_58d0_0), 22736 }, /* Scc */ { CPUFUNC(op_58d8_0), 22744 }, /* Scc */ { CPUFUNC(op_58e0_0), 22752 }, /* Scc */ { CPUFUNC(op_58e8_0), 22760 }, /* Scc */ { CPUFUNC(op_58f0_0), 22768 }, /* Scc */ { CPUFUNC(op_58f8_0), 22776 }, /* Scc */ { CPUFUNC(op_58f9_0), 22777 }, /* Scc */ { CPUFUNC(op_58fa_0), 22778 }, /* TRAPcc */ { CPUFUNC(op_58fb_0), 22779 }, /* TRAPcc */ { CPUFUNC(op_58fc_0), 22780 }, /* TRAPcc */ { CPUFUNC(op_59c0_0), 22976 }, /* Scc */ { CPUFUNC(op_59c8_0), 22984 }, /* DBcc */ { CPUFUNC(op_59d0_0), 22992 }, /* Scc */ { CPUFUNC(op_59d8_0), 23000 }, /* Scc */ { CPUFUNC(op_59e0_0), 23008 }, /* Scc */ { CPUFUNC(op_59e8_0), 23016 }, /* Scc */ { CPUFUNC(op_59f0_0), 23024 }, /* Scc */ { CPUFUNC(op_59f8_0), 23032 }, /* Scc */ { CPUFUNC(op_59f9_0), 23033 }, /* Scc */ { CPUFUNC(op_59fa_0), 23034 }, /* TRAPcc */ { CPUFUNC(op_59fb_0), 23035 }, /* TRAPcc */ { CPUFUNC(op_59fc_0), 23036 }, /* TRAPcc */ { CPUFUNC(op_5ac0_0), 23232 }, /* Scc */ { CPUFUNC(op_5ac8_0), 23240 }, /* DBcc */ { CPUFUNC(op_5ad0_0), 23248 }, /* Scc */ { CPUFUNC(op_5ad8_0), 23256 }, /* Scc */ { CPUFUNC(op_5ae0_0), 23264 }, /* Scc */ { CPUFUNC(op_5ae8_0), 23272 }, /* Scc */ { CPUFUNC(op_5af0_0), 23280 }, /* Scc */ { CPUFUNC(op_5af8_0), 23288 }, /* Scc */ { CPUFUNC(op_5af9_0), 23289 }, /* Scc */ { CPUFUNC(op_5afa_0), 23290 }, /* TRAPcc */ { CPUFUNC(op_5afb_0), 23291 }, /* TRAPcc */ { CPUFUNC(op_5afc_0), 23292 }, /* TRAPcc */ { CPUFUNC(op_5bc0_0), 23488 }, /* Scc */ { CPUFUNC(op_5bc8_0), 23496 }, /* DBcc */ { CPUFUNC(op_5bd0_0), 23504 }, /* Scc */ { CPUFUNC(op_5bd8_0), 23512 }, /* Scc */ { CPUFUNC(op_5be0_0), 23520 }, /* Scc */ { CPUFUNC(op_5be8_0), 23528 }, /* Scc */ { CPUFUNC(op_5bf0_0), 23536 }, /* Scc */ { CPUFUNC(op_5bf8_0), 23544 }, /* Scc */ { CPUFUNC(op_5bf9_0), 23545 }, /* Scc */ { CPUFUNC(op_5bfa_0), 23546 }, /* TRAPcc */ { CPUFUNC(op_5bfb_0), 23547 }, /* TRAPcc */ { CPUFUNC(op_5bfc_0), 23548 }, /* TRAPcc */ { CPUFUNC(op_5cc0_0), 23744 }, /* Scc */ { CPUFUNC(op_5cc8_0), 23752 }, /* DBcc */ { CPUFUNC(op_5cd0_0), 23760 }, /* Scc */ { CPUFUNC(op_5cd8_0), 23768 }, /* Scc */ { CPUFUNC(op_5ce0_0), 23776 }, /* Scc */ { CPUFUNC(op_5ce8_0), 23784 }, /* Scc */ { CPUFUNC(op_5cf0_0), 23792 }, /* Scc */ { CPUFUNC(op_5cf8_0), 23800 }, /* Scc */ { CPUFUNC(op_5cf9_0), 23801 }, /* Scc */ { CPUFUNC(op_5cfa_0), 23802 }, /* TRAPcc */ { CPUFUNC(op_5cfb_0), 23803 }, /* TRAPcc */ { CPUFUNC(op_5cfc_0), 23804 }, /* TRAPcc */ { CPUFUNC(op_5dc0_0), 24000 }, /* Scc */ { CPUFUNC(op_5dc8_0), 24008 }, /* DBcc */ { CPUFUNC(op_5dd0_0), 24016 }, /* Scc */ { CPUFUNC(op_5dd8_0), 24024 }, /* Scc */ { CPUFUNC(op_5de0_0), 24032 }, /* Scc */ { CPUFUNC(op_5de8_0), 24040 }, /* Scc */ { CPUFUNC(op_5df0_0), 24048 }, /* Scc */ { CPUFUNC(op_5df8_0), 24056 }, /* Scc */ { CPUFUNC(op_5df9_0), 24057 }, /* Scc */ { CPUFUNC(op_5dfa_0), 24058 }, /* TRAPcc */ { CPUFUNC(op_5dfb_0), 24059 }, /* TRAPcc */ { CPUFUNC(op_5dfc_0), 24060 }, /* TRAPcc */ { CPUFUNC(op_5ec0_0), 24256 }, /* Scc */ { CPUFUNC(op_5ec8_0), 24264 }, /* DBcc */ { CPUFUNC(op_5ed0_0), 24272 }, /* Scc */ { CPUFUNC(op_5ed8_0), 24280 }, /* Scc */ { CPUFUNC(op_5ee0_0), 24288 }, /* Scc */ { CPUFUNC(op_5ee8_0), 24296 }, /* Scc */ { CPUFUNC(op_5ef0_0), 24304 }, /* Scc */ { CPUFUNC(op_5ef8_0), 24312 }, /* Scc */ { CPUFUNC(op_5ef9_0), 24313 }, /* Scc */ { CPUFUNC(op_5efa_0), 24314 }, /* TRAPcc */ { CPUFUNC(op_5efb_0), 24315 }, /* TRAPcc */ { CPUFUNC(op_5efc_0), 24316 }, /* TRAPcc */ { CPUFUNC(op_5fc0_0), 24512 }, /* Scc */ { CPUFUNC(op_5fc8_0), 24520 }, /* DBcc */ { CPUFUNC(op_5fd0_0), 24528 }, /* Scc */ { CPUFUNC(op_5fd8_0), 24536 }, /* Scc */ { CPUFUNC(op_5fe0_0), 24544 }, /* Scc */ { CPUFUNC(op_5fe8_0), 24552 }, /* Scc */ { CPUFUNC(op_5ff0_0), 24560 }, /* Scc */ { CPUFUNC(op_5ff8_0), 24568 }, /* Scc */ { CPUFUNC(op_5ff9_0), 24569 }, /* Scc */ { CPUFUNC(op_5ffa_0), 24570 }, /* TRAPcc */ { CPUFUNC(op_5ffb_0), 24571 }, /* TRAPcc */ { CPUFUNC(op_5ffc_0), 24572 }, /* TRAPcc */ { CPUFUNC(op_6000_0), 24576 }, /* Bcc */ { CPUFUNC(op_6001_0), 24577 }, /* Bcc */ { CPUFUNC(op_60ff_0), 24831 }, /* Bcc */ { CPUFUNC(op_6100_0), 24832 }, /* BSR */ { CPUFUNC(op_6101_0), 24833 }, /* BSR */ { CPUFUNC(op_61ff_0), 25087 }, /* BSR */ { CPUFUNC(op_6200_0), 25088 }, /* Bcc */ { CPUFUNC(op_6201_0), 25089 }, /* Bcc */ { CPUFUNC(op_62ff_0), 25343 }, /* Bcc */ { CPUFUNC(op_6300_0), 25344 }, /* Bcc */ { CPUFUNC(op_6301_0), 25345 }, /* Bcc */ { CPUFUNC(op_63ff_0), 25599 }, /* Bcc */ { CPUFUNC(op_6400_0), 25600 }, /* Bcc */ { CPUFUNC(op_6401_0), 25601 }, /* Bcc */ { CPUFUNC(op_64ff_0), 25855 }, /* Bcc */ { CPUFUNC(op_6500_0), 25856 }, /* Bcc */ { CPUFUNC(op_6501_0), 25857 }, /* Bcc */ { CPUFUNC(op_65ff_0), 26111 }, /* Bcc */ { CPUFUNC(op_6600_0), 26112 }, /* Bcc */ { CPUFUNC(op_6601_0), 26113 }, /* Bcc */ { CPUFUNC(op_66ff_0), 26367 }, /* Bcc */ { CPUFUNC(op_6700_0), 26368 }, /* Bcc */ { CPUFUNC(op_6701_0), 26369 }, /* Bcc */ { CPUFUNC(op_67ff_0), 26623 }, /* Bcc */ { CPUFUNC(op_6800_0), 26624 }, /* Bcc */ { CPUFUNC(op_6801_0), 26625 }, /* Bcc */ { CPUFUNC(op_68ff_0), 26879 }, /* Bcc */ { CPUFUNC(op_6900_0), 26880 }, /* Bcc */ { CPUFUNC(op_6901_0), 26881 }, /* Bcc */ { CPUFUNC(op_69ff_0), 27135 }, /* Bcc */ { CPUFUNC(op_6a00_0), 27136 }, /* Bcc */ { CPUFUNC(op_6a01_0), 27137 }, /* Bcc */ { CPUFUNC(op_6aff_0), 27391 }, /* Bcc */ { CPUFUNC(op_6b00_0), 27392 }, /* Bcc */ { CPUFUNC(op_6b01_0), 27393 }, /* Bcc */ { CPUFUNC(op_6bff_0), 27647 }, /* Bcc */ { CPUFUNC(op_6c00_0), 27648 }, /* Bcc */ { CPUFUNC(op_6c01_0), 27649 }, /* Bcc */ { CPUFUNC(op_6cff_0), 27903 }, /* Bcc */ { CPUFUNC(op_6d00_0), 27904 }, /* Bcc */ { CPUFUNC(op_6d01_0), 27905 }, /* Bcc */ { CPUFUNC(op_6dff_0), 28159 }, /* Bcc */ { CPUFUNC(op_6e00_0), 28160 }, /* Bcc */ { CPUFUNC(op_6e01_0), 28161 }, /* Bcc */ { CPUFUNC(op_6eff_0), 28415 }, /* Bcc */ { CPUFUNC(op_6f00_0), 28416 }, /* Bcc */ { CPUFUNC(op_6f01_0), 28417 }, /* Bcc */ { CPUFUNC(op_6fff_0), 28671 }, /* Bcc */ { CPUFUNC(op_7000_0), 28672 }, /* MOVE */ { CPUFUNC(op_8000_0), 32768 }, /* OR */ { CPUFUNC(op_8010_0), 32784 }, /* OR */ { CPUFUNC(op_8018_0), 32792 }, /* OR */ { CPUFUNC(op_8020_0), 32800 }, /* OR */ { CPUFUNC(op_8028_0), 32808 }, /* OR */ { CPUFUNC(op_8030_0), 32816 }, /* OR */ { CPUFUNC(op_8038_0), 32824 }, /* OR */ { CPUFUNC(op_8039_0), 32825 }, /* OR */ { CPUFUNC(op_803a_0), 32826 }, /* OR */ { CPUFUNC(op_803b_0), 32827 }, /* OR */ { CPUFUNC(op_803c_0), 32828 }, /* OR */ { CPUFUNC(op_8040_0), 32832 }, /* OR */ { CPUFUNC(op_8050_0), 32848 }, /* OR */ { CPUFUNC(op_8058_0), 32856 }, /* OR */ { CPUFUNC(op_8060_0), 32864 }, /* OR */ { CPUFUNC(op_8068_0), 32872 }, /* OR */ { CPUFUNC(op_8070_0), 32880 }, /* OR */ { CPUFUNC(op_8078_0), 32888 }, /* OR */ { CPUFUNC(op_8079_0), 32889 }, /* OR */ { CPUFUNC(op_807a_0), 32890 }, /* OR */ { CPUFUNC(op_807b_0), 32891 }, /* OR */ { CPUFUNC(op_807c_0), 32892 }, /* OR */ { CPUFUNC(op_8080_0), 32896 }, /* OR */ { CPUFUNC(op_8090_0), 32912 }, /* OR */ { CPUFUNC(op_8098_0), 32920 }, /* OR */ { CPUFUNC(op_80a0_0), 32928 }, /* OR */ { CPUFUNC(op_80a8_0), 32936 }, /* OR */ { CPUFUNC(op_80b0_0), 32944 }, /* OR */ { CPUFUNC(op_80b8_0), 32952 }, /* OR */ { CPUFUNC(op_80b9_0), 32953 }, /* OR */ { CPUFUNC(op_80ba_0), 32954 }, /* OR */ { CPUFUNC(op_80bb_0), 32955 }, /* OR */ { CPUFUNC(op_80bc_0), 32956 }, /* OR */ { CPUFUNC(op_80c0_0), 32960 }, /* DIVU */ { CPUFUNC(op_80d0_0), 32976 }, /* DIVU */ { CPUFUNC(op_80d8_0), 32984 }, /* DIVU */ { CPUFUNC(op_80e0_0), 32992 }, /* DIVU */ { CPUFUNC(op_80e8_0), 33000 }, /* DIVU */ { CPUFUNC(op_80f0_0), 33008 }, /* DIVU */ { CPUFUNC(op_80f8_0), 33016 }, /* DIVU */ { CPUFUNC(op_80f9_0), 33017 }, /* DIVU */ { CPUFUNC(op_80fa_0), 33018 }, /* DIVU */ { CPUFUNC(op_80fb_0), 33019 }, /* DIVU */ { CPUFUNC(op_80fc_0), 33020 }, /* DIVU */ { CPUFUNC(op_8100_0), 33024 }, /* SBCD */ { CPUFUNC(op_8108_0), 33032 }, /* SBCD */ { CPUFUNC(op_8110_0), 33040 }, /* OR */ { CPUFUNC(op_8118_0), 33048 }, /* OR */ { CPUFUNC(op_8120_0), 33056 }, /* OR */ { CPUFUNC(op_8128_0), 33064 }, /* OR */ { CPUFUNC(op_8130_0), 33072 }, /* OR */ { CPUFUNC(op_8138_0), 33080 }, /* OR */ { CPUFUNC(op_8139_0), 33081 }, /* OR */ { CPUFUNC(op_8140_0), 33088 }, /* PACK */ { CPUFUNC(op_8148_0), 33096 }, /* PACK */ { CPUFUNC(op_8150_0), 33104 }, /* OR */ { CPUFUNC(op_8158_0), 33112 }, /* OR */ { CPUFUNC(op_8160_0), 33120 }, /* OR */ { CPUFUNC(op_8168_0), 33128 }, /* OR */ { CPUFUNC(op_8170_0), 33136 }, /* OR */ { CPUFUNC(op_8178_0), 33144 }, /* OR */ { CPUFUNC(op_8179_0), 33145 }, /* OR */ { CPUFUNC(op_8180_0), 33152 }, /* UNPK */ { CPUFUNC(op_8188_0), 33160 }, /* UNPK */ { CPUFUNC(op_8190_0), 33168 }, /* OR */ { CPUFUNC(op_8198_0), 33176 }, /* OR */ { CPUFUNC(op_81a0_0), 33184 }, /* OR */ { CPUFUNC(op_81a8_0), 33192 }, /* OR */ { CPUFUNC(op_81b0_0), 33200 }, /* OR */ { CPUFUNC(op_81b8_0), 33208 }, /* OR */ { CPUFUNC(op_81b9_0), 33209 }, /* OR */ { CPUFUNC(op_81c0_0), 33216 }, /* DIVS */ { CPUFUNC(op_81d0_0), 33232 }, /* DIVS */ { CPUFUNC(op_81d8_0), 33240 }, /* DIVS */ { CPUFUNC(op_81e0_0), 33248 }, /* DIVS */ { CPUFUNC(op_81e8_0), 33256 }, /* DIVS */ { CPUFUNC(op_81f0_0), 33264 }, /* DIVS */ { CPUFUNC(op_81f8_0), 33272 }, /* DIVS */ { CPUFUNC(op_81f9_0), 33273 }, /* DIVS */ { CPUFUNC(op_81fa_0), 33274 }, /* DIVS */ { CPUFUNC(op_81fb_0), 33275 }, /* DIVS */ { CPUFUNC(op_81fc_0), 33276 }, /* DIVS */ { CPUFUNC(op_9000_0), 36864 }, /* SUB */ { CPUFUNC(op_9010_0), 36880 }, /* SUB */ { CPUFUNC(op_9018_0), 36888 }, /* SUB */ { CPUFUNC(op_9020_0), 36896 }, /* SUB */ { CPUFUNC(op_9028_0), 36904 }, /* SUB */ { CPUFUNC(op_9030_0), 36912 }, /* SUB */ { CPUFUNC(op_9038_0), 36920 }, /* SUB */ { CPUFUNC(op_9039_0), 36921 }, /* SUB */ { CPUFUNC(op_903a_0), 36922 }, /* SUB */ { CPUFUNC(op_903b_0), 36923 }, /* SUB */ { CPUFUNC(op_903c_0), 36924 }, /* SUB */ { CPUFUNC(op_9040_0), 36928 }, /* SUB */ { CPUFUNC(op_9048_0), 36936 }, /* SUB */ { CPUFUNC(op_9050_0), 36944 }, /* SUB */ { CPUFUNC(op_9058_0), 36952 }, /* SUB */ { CPUFUNC(op_9060_0), 36960 }, /* SUB */ { CPUFUNC(op_9068_0), 36968 }, /* SUB */ { CPUFUNC(op_9070_0), 36976 }, /* SUB */ { CPUFUNC(op_9078_0), 36984 }, /* SUB */ { CPUFUNC(op_9079_0), 36985 }, /* SUB */ { CPUFUNC(op_907a_0), 36986 }, /* SUB */ { CPUFUNC(op_907b_0), 36987 }, /* SUB */ { CPUFUNC(op_907c_0), 36988 }, /* SUB */ { CPUFUNC(op_9080_0), 36992 }, /* SUB */ { CPUFUNC(op_9088_0), 37000 }, /* SUB */ { CPUFUNC(op_9090_0), 37008 }, /* SUB */ { CPUFUNC(op_9098_0), 37016 }, /* SUB */ { CPUFUNC(op_90a0_0), 37024 }, /* SUB */ { CPUFUNC(op_90a8_0), 37032 }, /* SUB */ { CPUFUNC(op_90b0_0), 37040 }, /* SUB */ { CPUFUNC(op_90b8_0), 37048 }, /* SUB */ { CPUFUNC(op_90b9_0), 37049 }, /* SUB */ { CPUFUNC(op_90ba_0), 37050 }, /* SUB */ { CPUFUNC(op_90bb_0), 37051 }, /* SUB */ { CPUFUNC(op_90bc_0), 37052 }, /* SUB */ { CPUFUNC(op_90c0_0), 37056 }, /* SUBA */ { CPUFUNC(op_90c8_0), 37064 }, /* SUBA */ { CPUFUNC(op_90d0_0), 37072 }, /* SUBA */ { CPUFUNC(op_90d8_0), 37080 }, /* SUBA */ { CPUFUNC(op_90e0_0), 37088 }, /* SUBA */ { CPUFUNC(op_90e8_0), 37096 }, /* SUBA */ { CPUFUNC(op_90f0_0), 37104 }, /* SUBA */ { CPUFUNC(op_90f8_0), 37112 }, /* SUBA */ { CPUFUNC(op_90f9_0), 37113 }, /* SUBA */ { CPUFUNC(op_90fa_0), 37114 }, /* SUBA */ { CPUFUNC(op_90fb_0), 37115 }, /* SUBA */ { CPUFUNC(op_90fc_0), 37116 }, /* SUBA */ { CPUFUNC(op_9100_0), 37120 }, /* SUBX */ { CPUFUNC(op_9108_0), 37128 }, /* SUBX */ { CPUFUNC(op_9110_0), 37136 }, /* SUB */ { CPUFUNC(op_9118_0), 37144 }, /* SUB */ { CPUFUNC(op_9120_0), 37152 }, /* SUB */ { CPUFUNC(op_9128_0), 37160 }, /* SUB */ { CPUFUNC(op_9130_0), 37168 }, /* SUB */ { CPUFUNC(op_9138_0), 37176 }, /* SUB */ { CPUFUNC(op_9139_0), 37177 }, /* SUB */ { CPUFUNC(op_9140_0), 37184 }, /* SUBX */ { CPUFUNC(op_9148_0), 37192 }, /* SUBX */ { CPUFUNC(op_9150_0), 37200 }, /* SUB */ { CPUFUNC(op_9158_0), 37208 }, /* SUB */ { CPUFUNC(op_9160_0), 37216 }, /* SUB */ { CPUFUNC(op_9168_0), 37224 }, /* SUB */ { CPUFUNC(op_9170_0), 37232 }, /* SUB */ { CPUFUNC(op_9178_0), 37240 }, /* SUB */ { CPUFUNC(op_9179_0), 37241 }, /* SUB */ { CPUFUNC(op_9180_0), 37248 }, /* SUBX */ { CPUFUNC(op_9188_0), 37256 }, /* SUBX */ { CPUFUNC(op_9190_0), 37264 }, /* SUB */ { CPUFUNC(op_9198_0), 37272 }, /* SUB */ { CPUFUNC(op_91a0_0), 37280 }, /* SUB */ { CPUFUNC(op_91a8_0), 37288 }, /* SUB */ { CPUFUNC(op_91b0_0), 37296 }, /* SUB */ { CPUFUNC(op_91b8_0), 37304 }, /* SUB */ { CPUFUNC(op_91b9_0), 37305 }, /* SUB */ { CPUFUNC(op_91c0_0), 37312 }, /* SUBA */ { CPUFUNC(op_91c8_0), 37320 }, /* SUBA */ { CPUFUNC(op_91d0_0), 37328 }, /* SUBA */ { CPUFUNC(op_91d8_0), 37336 }, /* SUBA */ { CPUFUNC(op_91e0_0), 37344 }, /* SUBA */ { CPUFUNC(op_91e8_0), 37352 }, /* SUBA */ { CPUFUNC(op_91f0_0), 37360 }, /* SUBA */ { CPUFUNC(op_91f8_0), 37368 }, /* SUBA */ { CPUFUNC(op_91f9_0), 37369 }, /* SUBA */ { CPUFUNC(op_91fa_0), 37370 }, /* SUBA */ { CPUFUNC(op_91fb_0), 37371 }, /* SUBA */ { CPUFUNC(op_91fc_0), 37372 }, /* SUBA */ { CPUFUNC(op_b000_0), 45056 }, /* CMP */ { CPUFUNC(op_b010_0), 45072 }, /* CMP */ { CPUFUNC(op_b018_0), 45080 }, /* CMP */ { CPUFUNC(op_b020_0), 45088 }, /* CMP */ { CPUFUNC(op_b028_0), 45096 }, /* CMP */ { CPUFUNC(op_b030_0), 45104 }, /* CMP */ { CPUFUNC(op_b038_0), 45112 }, /* CMP */ { CPUFUNC(op_b039_0), 45113 }, /* CMP */ { CPUFUNC(op_b03a_0), 45114 }, /* CMP */ { CPUFUNC(op_b03b_0), 45115 }, /* CMP */ { CPUFUNC(op_b03c_0), 45116 }, /* CMP */ { CPUFUNC(op_b040_0), 45120 }, /* CMP */ { CPUFUNC(op_b048_0), 45128 }, /* CMP */ { CPUFUNC(op_b050_0), 45136 }, /* CMP */ { CPUFUNC(op_b058_0), 45144 }, /* CMP */ { CPUFUNC(op_b060_0), 45152 }, /* CMP */ { CPUFUNC(op_b068_0), 45160 }, /* CMP */ { CPUFUNC(op_b070_0), 45168 }, /* CMP */ { CPUFUNC(op_b078_0), 45176 }, /* CMP */ { CPUFUNC(op_b079_0), 45177 }, /* CMP */ { CPUFUNC(op_b07a_0), 45178 }, /* CMP */ { CPUFUNC(op_b07b_0), 45179 }, /* CMP */ { CPUFUNC(op_b07c_0), 45180 }, /* CMP */ { CPUFUNC(op_b080_0), 45184 }, /* CMP */ { CPUFUNC(op_b088_0), 45192 }, /* CMP */ { CPUFUNC(op_b090_0), 45200 }, /* CMP */ { CPUFUNC(op_b098_0), 45208 }, /* CMP */ { CPUFUNC(op_b0a0_0), 45216 }, /* CMP */ { CPUFUNC(op_b0a8_0), 45224 }, /* CMP */ { CPUFUNC(op_b0b0_0), 45232 }, /* CMP */ { CPUFUNC(op_b0b8_0), 45240 }, /* CMP */ { CPUFUNC(op_b0b9_0), 45241 }, /* CMP */ { CPUFUNC(op_b0ba_0), 45242 }, /* CMP */ { CPUFUNC(op_b0bb_0), 45243 }, /* CMP */ { CPUFUNC(op_b0bc_0), 45244 }, /* CMP */ { CPUFUNC(op_b0c0_0), 45248 }, /* CMPA */ { CPUFUNC(op_b0c8_0), 45256 }, /* CMPA */ { CPUFUNC(op_b0d0_0), 45264 }, /* CMPA */ { CPUFUNC(op_b0d8_0), 45272 }, /* CMPA */ { CPUFUNC(op_b0e0_0), 45280 }, /* CMPA */ { CPUFUNC(op_b0e8_0), 45288 }, /* CMPA */ { CPUFUNC(op_b0f0_0), 45296 }, /* CMPA */ { CPUFUNC(op_b0f8_0), 45304 }, /* CMPA */ { CPUFUNC(op_b0f9_0), 45305 }, /* CMPA */ { CPUFUNC(op_b0fa_0), 45306 }, /* CMPA */ { CPUFUNC(op_b0fb_0), 45307 }, /* CMPA */ { CPUFUNC(op_b0fc_0), 45308 }, /* CMPA */ { CPUFUNC(op_b100_0), 45312 }, /* EOR */ { CPUFUNC(op_b108_0), 45320 }, /* CMPM */ { CPUFUNC(op_b110_0), 45328 }, /* EOR */ { CPUFUNC(op_b118_0), 45336 }, /* EOR */ { CPUFUNC(op_b120_0), 45344 }, /* EOR */ { CPUFUNC(op_b128_0), 45352 }, /* EOR */ { CPUFUNC(op_b130_0), 45360 }, /* EOR */ { CPUFUNC(op_b138_0), 45368 }, /* EOR */ { CPUFUNC(op_b139_0), 45369 }, /* EOR */ { CPUFUNC(op_b140_0), 45376 }, /* EOR */ { CPUFUNC(op_b148_0), 45384 }, /* CMPM */ { CPUFUNC(op_b150_0), 45392 }, /* EOR */ { CPUFUNC(op_b158_0), 45400 }, /* EOR */ { CPUFUNC(op_b160_0), 45408 }, /* EOR */ { CPUFUNC(op_b168_0), 45416 }, /* EOR */ { CPUFUNC(op_b170_0), 45424 }, /* EOR */ { CPUFUNC(op_b178_0), 45432 }, /* EOR */ { CPUFUNC(op_b179_0), 45433 }, /* EOR */ { CPUFUNC(op_b180_0), 45440 }, /* EOR */ { CPUFUNC(op_b188_0), 45448 }, /* CMPM */ { CPUFUNC(op_b190_0), 45456 }, /* EOR */ { CPUFUNC(op_b198_0), 45464 }, /* EOR */ { CPUFUNC(op_b1a0_0), 45472 }, /* EOR */ { CPUFUNC(op_b1a8_0), 45480 }, /* EOR */ { CPUFUNC(op_b1b0_0), 45488 }, /* EOR */ { CPUFUNC(op_b1b8_0), 45496 }, /* EOR */ { CPUFUNC(op_b1b9_0), 45497 }, /* EOR */ { CPUFUNC(op_b1c0_0), 45504 }, /* CMPA */ { CPUFUNC(op_b1c8_0), 45512 }, /* CMPA */ { CPUFUNC(op_b1d0_0), 45520 }, /* CMPA */ { CPUFUNC(op_b1d8_0), 45528 }, /* CMPA */ { CPUFUNC(op_b1e0_0), 45536 }, /* CMPA */ { CPUFUNC(op_b1e8_0), 45544 }, /* CMPA */ { CPUFUNC(op_b1f0_0), 45552 }, /* CMPA */ { CPUFUNC(op_b1f8_0), 45560 }, /* CMPA */ { CPUFUNC(op_b1f9_0), 45561 }, /* CMPA */ { CPUFUNC(op_b1fa_0), 45562 }, /* CMPA */ { CPUFUNC(op_b1fb_0), 45563 }, /* CMPA */ { CPUFUNC(op_b1fc_0), 45564 }, /* CMPA */ { CPUFUNC(op_c000_0), 49152 }, /* AND */ { CPUFUNC(op_c010_0), 49168 }, /* AND */ { CPUFUNC(op_c018_0), 49176 }, /* AND */ { CPUFUNC(op_c020_0), 49184 }, /* AND */ { CPUFUNC(op_c028_0), 49192 }, /* AND */ { CPUFUNC(op_c030_0), 49200 }, /* AND */ { CPUFUNC(op_c038_0), 49208 }, /* AND */ { CPUFUNC(op_c039_0), 49209 }, /* AND */ { CPUFUNC(op_c03a_0), 49210 }, /* AND */ { CPUFUNC(op_c03b_0), 49211 }, /* AND */ { CPUFUNC(op_c03c_0), 49212 }, /* AND */ { CPUFUNC(op_c040_0), 49216 }, /* AND */ { CPUFUNC(op_c050_0), 49232 }, /* AND */ { CPUFUNC(op_c058_0), 49240 }, /* AND */ { CPUFUNC(op_c060_0), 49248 }, /* AND */ { CPUFUNC(op_c068_0), 49256 }, /* AND */ { CPUFUNC(op_c070_0), 49264 }, /* AND */ { CPUFUNC(op_c078_0), 49272 }, /* AND */ { CPUFUNC(op_c079_0), 49273 }, /* AND */ { CPUFUNC(op_c07a_0), 49274 }, /* AND */ { CPUFUNC(op_c07b_0), 49275 }, /* AND */ { CPUFUNC(op_c07c_0), 49276 }, /* AND */ { CPUFUNC(op_c080_0), 49280 }, /* AND */ { CPUFUNC(op_c090_0), 49296 }, /* AND */ { CPUFUNC(op_c098_0), 49304 }, /* AND */ { CPUFUNC(op_c0a0_0), 49312 }, /* AND */ { CPUFUNC(op_c0a8_0), 49320 }, /* AND */ { CPUFUNC(op_c0b0_0), 49328 }, /* AND */ { CPUFUNC(op_c0b8_0), 49336 }, /* AND */ { CPUFUNC(op_c0b9_0), 49337 }, /* AND */ { CPUFUNC(op_c0ba_0), 49338 }, /* AND */ { CPUFUNC(op_c0bb_0), 49339 }, /* AND */ { CPUFUNC(op_c0bc_0), 49340 }, /* AND */ { CPUFUNC(op_c0c0_0), 49344 }, /* MULU */ { CPUFUNC(op_c0d0_0), 49360 }, /* MULU */ { CPUFUNC(op_c0d8_0), 49368 }, /* MULU */ { CPUFUNC(op_c0e0_0), 49376 }, /* MULU */ { CPUFUNC(op_c0e8_0), 49384 }, /* MULU */ { CPUFUNC(op_c0f0_0), 49392 }, /* MULU */ { CPUFUNC(op_c0f8_0), 49400 }, /* MULU */ { CPUFUNC(op_c0f9_0), 49401 }, /* MULU */ { CPUFUNC(op_c0fa_0), 49402 }, /* MULU */ { CPUFUNC(op_c0fb_0), 49403 }, /* MULU */ { CPUFUNC(op_c0fc_0), 49404 }, /* MULU */ { CPUFUNC(op_c100_0), 49408 }, /* ABCD */ { CPUFUNC(op_c108_0), 49416 }, /* ABCD */ { CPUFUNC(op_c110_0), 49424 }, /* AND */ { CPUFUNC(op_c118_0), 49432 }, /* AND */ { CPUFUNC(op_c120_0), 49440 }, /* AND */ { CPUFUNC(op_c128_0), 49448 }, /* AND */ { CPUFUNC(op_c130_0), 49456 }, /* AND */ { CPUFUNC(op_c138_0), 49464 }, /* AND */ { CPUFUNC(op_c139_0), 49465 }, /* AND */ { CPUFUNC(op_c140_0), 49472 }, /* EXG */ { CPUFUNC(op_c148_0), 49480 }, /* EXG */ { CPUFUNC(op_c150_0), 49488 }, /* AND */ { CPUFUNC(op_c158_0), 49496 }, /* AND */ { CPUFUNC(op_c160_0), 49504 }, /* AND */ { CPUFUNC(op_c168_0), 49512 }, /* AND */ { CPUFUNC(op_c170_0), 49520 }, /* AND */ { CPUFUNC(op_c178_0), 49528 }, /* AND */ { CPUFUNC(op_c179_0), 49529 }, /* AND */ { CPUFUNC(op_c188_0), 49544 }, /* EXG */ { CPUFUNC(op_c190_0), 49552 }, /* AND */ { CPUFUNC(op_c198_0), 49560 }, /* AND */ { CPUFUNC(op_c1a0_0), 49568 }, /* AND */ { CPUFUNC(op_c1a8_0), 49576 }, /* AND */ { CPUFUNC(op_c1b0_0), 49584 }, /* AND */ { CPUFUNC(op_c1b8_0), 49592 }, /* AND */ { CPUFUNC(op_c1b9_0), 49593 }, /* AND */ { CPUFUNC(op_c1c0_0), 49600 }, /* MULS */ { CPUFUNC(op_c1d0_0), 49616 }, /* MULS */ { CPUFUNC(op_c1d8_0), 49624 }, /* MULS */ { CPUFUNC(op_c1e0_0), 49632 }, /* MULS */ { CPUFUNC(op_c1e8_0), 49640 }, /* MULS */ { CPUFUNC(op_c1f0_0), 49648 }, /* MULS */ { CPUFUNC(op_c1f8_0), 49656 }, /* MULS */ { CPUFUNC(op_c1f9_0), 49657 }, /* MULS */ { CPUFUNC(op_c1fa_0), 49658 }, /* MULS */ { CPUFUNC(op_c1fb_0), 49659 }, /* MULS */ { CPUFUNC(op_c1fc_0), 49660 }, /* MULS */ { CPUFUNC(op_d000_0), 53248 }, /* ADD */ { CPUFUNC(op_d010_0), 53264 }, /* ADD */ { CPUFUNC(op_d018_0), 53272 }, /* ADD */ { CPUFUNC(op_d020_0), 53280 }, /* ADD */ { CPUFUNC(op_d028_0), 53288 }, /* ADD */ { CPUFUNC(op_d030_0), 53296 }, /* ADD */ { CPUFUNC(op_d038_0), 53304 }, /* ADD */ { CPUFUNC(op_d039_0), 53305 }, /* ADD */ { CPUFUNC(op_d03a_0), 53306 }, /* ADD */ { CPUFUNC(op_d03b_0), 53307 }, /* ADD */ { CPUFUNC(op_d03c_0), 53308 }, /* ADD */ { CPUFUNC(op_d040_0), 53312 }, /* ADD */ { CPUFUNC(op_d048_0), 53320 }, /* ADD */ { CPUFUNC(op_d050_0), 53328 }, /* ADD */ { CPUFUNC(op_d058_0), 53336 }, /* ADD */ { CPUFUNC(op_d060_0), 53344 }, /* ADD */ { CPUFUNC(op_d068_0), 53352 }, /* ADD */ { CPUFUNC(op_d070_0), 53360 }, /* ADD */ { CPUFUNC(op_d078_0), 53368 }, /* ADD */ { CPUFUNC(op_d079_0), 53369 }, /* ADD */ { CPUFUNC(op_d07a_0), 53370 }, /* ADD */ { CPUFUNC(op_d07b_0), 53371 }, /* ADD */ { CPUFUNC(op_d07c_0), 53372 }, /* ADD */ { CPUFUNC(op_d080_0), 53376 }, /* ADD */ { CPUFUNC(op_d088_0), 53384 }, /* ADD */ { CPUFUNC(op_d090_0), 53392 }, /* ADD */ { CPUFUNC(op_d098_0), 53400 }, /* ADD */ { CPUFUNC(op_d0a0_0), 53408 }, /* ADD */ { CPUFUNC(op_d0a8_0), 53416 }, /* ADD */ { CPUFUNC(op_d0b0_0), 53424 }, /* ADD */ { CPUFUNC(op_d0b8_0), 53432 }, /* ADD */ { CPUFUNC(op_d0b9_0), 53433 }, /* ADD */ { CPUFUNC(op_d0ba_0), 53434 }, /* ADD */ { CPUFUNC(op_d0bb_0), 53435 }, /* ADD */ { CPUFUNC(op_d0bc_0), 53436 }, /* ADD */ { CPUFUNC(op_d0c0_0), 53440 }, /* ADDA */ { CPUFUNC(op_d0c8_0), 53448 }, /* ADDA */ { CPUFUNC(op_d0d0_0), 53456 }, /* ADDA */ { CPUFUNC(op_d0d8_0), 53464 }, /* ADDA */ { CPUFUNC(op_d0e0_0), 53472 }, /* ADDA */ { CPUFUNC(op_d0e8_0), 53480 }, /* ADDA */ { CPUFUNC(op_d0f0_0), 53488 }, /* ADDA */ { CPUFUNC(op_d0f8_0), 53496 }, /* ADDA */ { CPUFUNC(op_d0f9_0), 53497 }, /* ADDA */ { CPUFUNC(op_d0fa_0), 53498 }, /* ADDA */ { CPUFUNC(op_d0fb_0), 53499 }, /* ADDA */ { CPUFUNC(op_d0fc_0), 53500 }, /* ADDA */ { CPUFUNC(op_d100_0), 53504 }, /* ADDX */ { CPUFUNC(op_d108_0), 53512 }, /* ADDX */ { CPUFUNC(op_d110_0), 53520 }, /* ADD */ { CPUFUNC(op_d118_0), 53528 }, /* ADD */ { CPUFUNC(op_d120_0), 53536 }, /* ADD */ { CPUFUNC(op_d128_0), 53544 }, /* ADD */ { CPUFUNC(op_d130_0), 53552 }, /* ADD */ { CPUFUNC(op_d138_0), 53560 }, /* ADD */ { CPUFUNC(op_d139_0), 53561 }, /* ADD */ { CPUFUNC(op_d140_0), 53568 }, /* ADDX */ { CPUFUNC(op_d148_0), 53576 }, /* ADDX */ { CPUFUNC(op_d150_0), 53584 }, /* ADD */ { CPUFUNC(op_d158_0), 53592 }, /* ADD */ { CPUFUNC(op_d160_0), 53600 }, /* ADD */ { CPUFUNC(op_d168_0), 53608 }, /* ADD */ { CPUFUNC(op_d170_0), 53616 }, /* ADD */ { CPUFUNC(op_d178_0), 53624 }, /* ADD */ { CPUFUNC(op_d179_0), 53625 }, /* ADD */ { CPUFUNC(op_d180_0), 53632 }, /* ADDX */ { CPUFUNC(op_d188_0), 53640 }, /* ADDX */ { CPUFUNC(op_d190_0), 53648 }, /* ADD */ { CPUFUNC(op_d198_0), 53656 }, /* ADD */ { CPUFUNC(op_d1a0_0), 53664 }, /* ADD */ { CPUFUNC(op_d1a8_0), 53672 }, /* ADD */ { CPUFUNC(op_d1b0_0), 53680 }, /* ADD */ { CPUFUNC(op_d1b8_0), 53688 }, /* ADD */ { CPUFUNC(op_d1b9_0), 53689 }, /* ADD */ { CPUFUNC(op_d1c0_0), 53696 }, /* ADDA */ { CPUFUNC(op_d1c8_0), 53704 }, /* ADDA */ { CPUFUNC(op_d1d0_0), 53712 }, /* ADDA */ { CPUFUNC(op_d1d8_0), 53720 }, /* ADDA */ { CPUFUNC(op_d1e0_0), 53728 }, /* ADDA */ { CPUFUNC(op_d1e8_0), 53736 }, /* ADDA */ { CPUFUNC(op_d1f0_0), 53744 }, /* ADDA */ { CPUFUNC(op_d1f8_0), 53752 }, /* ADDA */ { CPUFUNC(op_d1f9_0), 53753 }, /* ADDA */ { CPUFUNC(op_d1fa_0), 53754 }, /* ADDA */ { CPUFUNC(op_d1fb_0), 53755 }, /* ADDA */ { CPUFUNC(op_d1fc_0), 53756 }, /* ADDA */ { CPUFUNC(op_e000_0), 57344 }, /* ASR */ { CPUFUNC(op_e008_0), 57352 }, /* LSR */ { CPUFUNC(op_e010_0), 57360 }, /* ROXR */ { CPUFUNC(op_e018_0), 57368 }, /* ROR */ { CPUFUNC(op_e020_0), 57376 }, /* ASR */ { CPUFUNC(op_e028_0), 57384 }, /* LSR */ { CPUFUNC(op_e030_0), 57392 }, /* ROXR */ { CPUFUNC(op_e038_0), 57400 }, /* ROR */ { CPUFUNC(op_e040_0), 57408 }, /* ASR */ { CPUFUNC(op_e048_0), 57416 }, /* LSR */ { CPUFUNC(op_e050_0), 57424 }, /* ROXR */ { CPUFUNC(op_e058_0), 57432 }, /* ROR */ { CPUFUNC(op_e060_0), 57440 }, /* ASR */ { CPUFUNC(op_e068_0), 57448 }, /* LSR */ { CPUFUNC(op_e070_0), 57456 }, /* ROXR */ { CPUFUNC(op_e078_0), 57464 }, /* ROR */ { CPUFUNC(op_e080_0), 57472 }, /* ASR */ { CPUFUNC(op_e088_0), 57480 }, /* LSR */ { CPUFUNC(op_e090_0), 57488 }, /* ROXR */ { CPUFUNC(op_e098_0), 57496 }, /* ROR */ { CPUFUNC(op_e0a0_0), 57504 }, /* ASR */ { CPUFUNC(op_e0a8_0), 57512 }, /* LSR */ { CPUFUNC(op_e0b0_0), 57520 }, /* ROXR */ { CPUFUNC(op_e0b8_0), 57528 }, /* ROR */ { CPUFUNC(op_e0d0_0), 57552 }, /* ASRW */ { CPUFUNC(op_e0d8_0), 57560 }, /* ASRW */ { CPUFUNC(op_e0e0_0), 57568 }, /* ASRW */ { CPUFUNC(op_e0e8_0), 57576 }, /* ASRW */ { CPUFUNC(op_e0f0_0), 57584 }, /* ASRW */ { CPUFUNC(op_e0f8_0), 57592 }, /* ASRW */ { CPUFUNC(op_e0f9_0), 57593 }, /* ASRW */ { CPUFUNC(op_e100_0), 57600 }, /* ASL */ { CPUFUNC(op_e108_0), 57608 }, /* LSL */ { CPUFUNC(op_e110_0), 57616 }, /* ROXL */ { CPUFUNC(op_e118_0), 57624 }, /* ROL */ { CPUFUNC(op_e120_0), 57632 }, /* ASL */ { CPUFUNC(op_e128_0), 57640 }, /* LSL */ { CPUFUNC(op_e130_0), 57648 }, /* ROXL */ { CPUFUNC(op_e138_0), 57656 }, /* ROL */ { CPUFUNC(op_e140_0), 57664 }, /* ASL */ { CPUFUNC(op_e148_0), 57672 }, /* LSL */ { CPUFUNC(op_e150_0), 57680 }, /* ROXL */ { CPUFUNC(op_e158_0), 57688 }, /* ROL */ { CPUFUNC(op_e160_0), 57696 }, /* ASL */ { CPUFUNC(op_e168_0), 57704 }, /* LSL */ { CPUFUNC(op_e170_0), 57712 }, /* ROXL */ { CPUFUNC(op_e178_0), 57720 }, /* ROL */ { CPUFUNC(op_e180_0), 57728 }, /* ASL */ { CPUFUNC(op_e188_0), 57736 }, /* LSL */ { CPUFUNC(op_e190_0), 57744 }, /* ROXL */ { CPUFUNC(op_e198_0), 57752 }, /* ROL */ { CPUFUNC(op_e1a0_0), 57760 }, /* ASL */ { CPUFUNC(op_e1a8_0), 57768 }, /* LSL */ { CPUFUNC(op_e1b0_0), 57776 }, /* ROXL */ { CPUFUNC(op_e1b8_0), 57784 }, /* ROL */ { CPUFUNC(op_e1d0_0), 57808 }, /* ASLW */ { CPUFUNC(op_e1d8_0), 57816 }, /* ASLW */ { CPUFUNC(op_e1e0_0), 57824 }, /* ASLW */ { CPUFUNC(op_e1e8_0), 57832 }, /* ASLW */ { CPUFUNC(op_e1f0_0), 57840 }, /* ASLW */ { CPUFUNC(op_e1f8_0), 57848 }, /* ASLW */ { CPUFUNC(op_e1f9_0), 57849 }, /* ASLW */ { CPUFUNC(op_e2d0_0), 58064 }, /* LSRW */ { CPUFUNC(op_e2d8_0), 58072 }, /* LSRW */ { CPUFUNC(op_e2e0_0), 58080 }, /* LSRW */ { CPUFUNC(op_e2e8_0), 58088 }, /* LSRW */ { CPUFUNC(op_e2f0_0), 58096 }, /* LSRW */ { CPUFUNC(op_e2f8_0), 58104 }, /* LSRW */ { CPUFUNC(op_e2f9_0), 58105 }, /* LSRW */ { CPUFUNC(op_e3d0_0), 58320 }, /* LSLW */ { CPUFUNC(op_e3d8_0), 58328 }, /* LSLW */ { CPUFUNC(op_e3e0_0), 58336 }, /* LSLW */ { CPUFUNC(op_e3e8_0), 58344 }, /* LSLW */ { CPUFUNC(op_e3f0_0), 58352 }, /* LSLW */ { CPUFUNC(op_e3f8_0), 58360 }, /* LSLW */ { CPUFUNC(op_e3f9_0), 58361 }, /* LSLW */ { CPUFUNC(op_e4d0_0), 58576 }, /* ROXRW */ { CPUFUNC(op_e4d8_0), 58584 }, /* ROXRW */ { CPUFUNC(op_e4e0_0), 58592 }, /* ROXRW */ { CPUFUNC(op_e4e8_0), 58600 }, /* ROXRW */ { CPUFUNC(op_e4f0_0), 58608 }, /* ROXRW */ { CPUFUNC(op_e4f8_0), 58616 }, /* ROXRW */ { CPUFUNC(op_e4f9_0), 58617 }, /* ROXRW */ { CPUFUNC(op_e5d0_0), 58832 }, /* ROXLW */ { CPUFUNC(op_e5d8_0), 58840 }, /* ROXLW */ { CPUFUNC(op_e5e0_0), 58848 }, /* ROXLW */ { CPUFUNC(op_e5e8_0), 58856 }, /* ROXLW */ { CPUFUNC(op_e5f0_0), 58864 }, /* ROXLW */ { CPUFUNC(op_e5f8_0), 58872 }, /* ROXLW */ { CPUFUNC(op_e5f9_0), 58873 }, /* ROXLW */ { CPUFUNC(op_e6d0_0), 59088 }, /* RORW */ { CPUFUNC(op_e6d8_0), 59096 }, /* RORW */ { CPUFUNC(op_e6e0_0), 59104 }, /* RORW */ { CPUFUNC(op_e6e8_0), 59112 }, /* RORW */ { CPUFUNC(op_e6f0_0), 59120 }, /* RORW */ { CPUFUNC(op_e6f8_0), 59128 }, /* RORW */ { CPUFUNC(op_e6f9_0), 59129 }, /* RORW */ { CPUFUNC(op_e7d0_0), 59344 }, /* ROLW */ { CPUFUNC(op_e7d8_0), 59352 }, /* ROLW */ { CPUFUNC(op_e7e0_0), 59360 }, /* ROLW */ { CPUFUNC(op_e7e8_0), 59368 }, /* ROLW */ { CPUFUNC(op_e7f0_0), 59376 }, /* ROLW */ { CPUFUNC(op_e7f8_0), 59384 }, /* ROLW */ { CPUFUNC(op_e7f9_0), 59385 }, /* ROLW */ { CPUFUNC(op_e8c0_0), 59584 }, /* BFTST */ { CPUFUNC(op_e8d0_0), 59600 }, /* BFTST */ { CPUFUNC(op_e8e8_0), 59624 }, /* BFTST */ { CPUFUNC(op_e8f0_0), 59632 }, /* BFTST */ { CPUFUNC(op_e8f8_0), 59640 }, /* BFTST */ { CPUFUNC(op_e8f9_0), 59641 }, /* BFTST */ { CPUFUNC(op_e8fa_0), 59642 }, /* BFTST */ { CPUFUNC(op_e8fb_0), 59643 }, /* BFTST */ { CPUFUNC(op_e9c0_0), 59840 }, /* BFEXTU */ { CPUFUNC(op_e9d0_0), 59856 }, /* BFEXTU */ { CPUFUNC(op_e9e8_0), 59880 }, /* BFEXTU */ { CPUFUNC(op_e9f0_0), 59888 }, /* BFEXTU */ { CPUFUNC(op_e9f8_0), 59896 }, /* BFEXTU */ { CPUFUNC(op_e9f9_0), 59897 }, /* BFEXTU */ { CPUFUNC(op_e9fa_0), 59898 }, /* BFEXTU */ { CPUFUNC(op_e9fb_0), 59899 }, /* BFEXTU */ { CPUFUNC(op_eac0_0), 60096 }, /* BFCHG */ { CPUFUNC(op_ead0_0), 60112 }, /* BFCHG */ { CPUFUNC(op_eae8_0), 60136 }, /* BFCHG */ { CPUFUNC(op_eaf0_0), 60144 }, /* BFCHG */ { CPUFUNC(op_eaf8_0), 60152 }, /* BFCHG */ { CPUFUNC(op_eaf9_0), 60153 }, /* BFCHG */ { CPUFUNC(op_ebc0_0), 60352 }, /* BFEXTS */ { CPUFUNC(op_ebd0_0), 60368 }, /* BFEXTS */ { CPUFUNC(op_ebe8_0), 60392 }, /* BFEXTS */ { CPUFUNC(op_ebf0_0), 60400 }, /* BFEXTS */ { CPUFUNC(op_ebf8_0), 60408 }, /* BFEXTS */ { CPUFUNC(op_ebf9_0), 60409 }, /* BFEXTS */ { CPUFUNC(op_ebfa_0), 60410 }, /* BFEXTS */ { CPUFUNC(op_ebfb_0), 60411 }, /* BFEXTS */ { CPUFUNC(op_ecc0_0), 60608 }, /* BFCLR */ { CPUFUNC(op_ecd0_0), 60624 }, /* BFCLR */ { CPUFUNC(op_ece8_0), 60648 }, /* BFCLR */ { CPUFUNC(op_ecf0_0), 60656 }, /* BFCLR */ { CPUFUNC(op_ecf8_0), 60664 }, /* BFCLR */ { CPUFUNC(op_ecf9_0), 60665 }, /* BFCLR */ { CPUFUNC(op_edc0_0), 60864 }, /* BFFFO */ { CPUFUNC(op_edd0_0), 60880 }, /* BFFFO */ { CPUFUNC(op_ede8_0), 60904 }, /* BFFFO */ { CPUFUNC(op_edf0_0), 60912 }, /* BFFFO */ { CPUFUNC(op_edf8_0), 60920 }, /* BFFFO */ { CPUFUNC(op_edf9_0), 60921 }, /* BFFFO */ { CPUFUNC(op_edfa_0), 60922 }, /* BFFFO */ { CPUFUNC(op_edfb_0), 60923 }, /* BFFFO */ { CPUFUNC(op_eec0_0), 61120 }, /* BFSET */ { CPUFUNC(op_eed0_0), 61136 }, /* BFSET */ { CPUFUNC(op_eee8_0), 61160 }, /* BFSET */ { CPUFUNC(op_eef0_0), 61168 }, /* BFSET */ { CPUFUNC(op_eef8_0), 61176 }, /* BFSET */ { CPUFUNC(op_eef9_0), 61177 }, /* BFSET */ { CPUFUNC(op_efc0_0), 61376 }, /* BFINS */ { CPUFUNC(op_efd0_0), 61392 }, /* BFINS */ { CPUFUNC(op_efe8_0), 61416 }, /* BFINS */ { CPUFUNC(op_eff0_0), 61424 }, /* BFINS */ { CPUFUNC(op_eff8_0), 61432 }, /* BFINS */ { CPUFUNC(op_eff9_0), 61433 }, /* BFINS */ { CPUFUNC(op_f000_0), 61440 }, /* MMUOP030 */ { CPUFUNC(op_f008_0), 61448 }, /* MMUOP030 */ { CPUFUNC(op_f010_0), 61456 }, /* MMUOP030 */ { CPUFUNC(op_f018_0), 61464 }, /* MMUOP030 */ { CPUFUNC(op_f020_0), 61472 }, /* MMUOP030 */ { CPUFUNC(op_f028_0), 61480 }, /* MMUOP030 */ { CPUFUNC(op_f030_0), 61488 }, /* MMUOP030 */ { CPUFUNC(op_f038_0), 61496 }, /* MMUOP030 */ { CPUFUNC(op_f039_0), 61497 }, /* MMUOP030 */ { CPUFUNC(op_f200_0), 61952 }, /* FPP */ { CPUFUNC(op_f208_0), 61960 }, /* FPP */ { CPUFUNC(op_f210_0), 61968 }, /* FPP */ { CPUFUNC(op_f218_0), 61976 }, /* FPP */ { CPUFUNC(op_f220_0), 61984 }, /* FPP */ { CPUFUNC(op_f228_0), 61992 }, /* FPP */ { CPUFUNC(op_f230_0), 62000 }, /* FPP */ { CPUFUNC(op_f238_0), 62008 }, /* FPP */ { CPUFUNC(op_f239_0), 62009 }, /* FPP */ { CPUFUNC(op_f23a_0), 62010 }, /* FPP */ { CPUFUNC(op_f23b_0), 62011 }, /* FPP */ { CPUFUNC(op_f23c_0), 62012 }, /* FPP */ { CPUFUNC(op_f240_0), 62016 }, /* FScc */ { CPUFUNC(op_f248_0), 62024 }, /* FDBcc */ { CPUFUNC(op_f250_0), 62032 }, /* FScc */ { CPUFUNC(op_f258_0), 62040 }, /* FScc */ { CPUFUNC(op_f260_0), 62048 }, /* FScc */ { CPUFUNC(op_f268_0), 62056 }, /* FScc */ { CPUFUNC(op_f270_0), 62064 }, /* FScc */ { CPUFUNC(op_f278_0), 62072 }, /* FScc */ { CPUFUNC(op_f279_0), 62073 }, /* FScc */ { CPUFUNC(op_f27a_0), 62074 }, /* FTRAPcc */ { CPUFUNC(op_f27b_0), 62075 }, /* FTRAPcc */ { CPUFUNC(op_f27c_0), 62076 }, /* FTRAPcc */ { CPUFUNC(op_f280_0), 62080 }, /* FBcc */ { CPUFUNC(op_f2c0_0), 62144 }, /* FBcc */ { CPUFUNC(op_f310_0), 62224 }, /* FSAVE */ { CPUFUNC(op_f320_0), 62240 }, /* FSAVE */ { CPUFUNC(op_f328_0), 62248 }, /* FSAVE */ { CPUFUNC(op_f330_0), 62256 }, /* FSAVE */ { CPUFUNC(op_f338_0), 62264 }, /* FSAVE */ { CPUFUNC(op_f339_0), 62265 }, /* FSAVE */ { CPUFUNC(op_f350_0), 62288 }, /* FRESTORE */ { CPUFUNC(op_f358_0), 62296 }, /* FRESTORE */ { CPUFUNC(op_f368_0), 62312 }, /* FRESTORE */ { CPUFUNC(op_f370_0), 62320 }, /* FRESTORE */ { CPUFUNC(op_f378_0), 62328 }, /* FRESTORE */ { CPUFUNC(op_f379_0), 62329 }, /* FRESTORE */ { CPUFUNC(op_f37a_0), 62330 }, /* FRESTORE */ { CPUFUNC(op_f37b_0), 62331 }, /* FRESTORE */ { CPUFUNC(op_f408_0), 62472 }, /* CINVL */ { CPUFUNC(op_f410_0), 62480 }, /* CINVP */ { CPUFUNC(op_f418_0), 62488 }, /* CINVA */ { CPUFUNC(op_f419_0), 62489 }, /* CINVA */ { CPUFUNC(op_f41a_0), 62490 }, /* CINVA */ { CPUFUNC(op_f41b_0), 62491 }, /* CINVA */ { CPUFUNC(op_f41c_0), 62492 }, /* CINVA */ { CPUFUNC(op_f41d_0), 62493 }, /* CINVA */ { CPUFUNC(op_f41e_0), 62494 }, /* CINVA */ { CPUFUNC(op_f41f_0), 62495 }, /* CINVA */ { CPUFUNC(op_f428_0), 62504 }, /* CPUSHL */ { CPUFUNC(op_f430_0), 62512 }, /* CPUSHP */ { CPUFUNC(op_f438_0), 62520 }, /* CPUSHA */ { CPUFUNC(op_f439_0), 62521 }, /* CPUSHA */ { CPUFUNC(op_f43a_0), 62522 }, /* CPUSHA */ { CPUFUNC(op_f43b_0), 62523 }, /* CPUSHA */ { CPUFUNC(op_f43c_0), 62524 }, /* CPUSHA */ { CPUFUNC(op_f43d_0), 62525 }, /* CPUSHA */ { CPUFUNC(op_f43e_0), 62526 }, /* CPUSHA */ { CPUFUNC(op_f43f_0), 62527 }, /* CPUSHA */ { CPUFUNC(op_f500_0), 62720 }, /* PFLUSHN */ { CPUFUNC(op_f508_0), 62728 }, /* PFLUSH */ { CPUFUNC(op_f510_0), 62736 }, /* PFLUSHAN */ { CPUFUNC(op_f518_0), 62744 }, /* PFLUSHA */ { CPUFUNC(op_f548_0), 62792 }, /* PTESTR */ { CPUFUNC(op_f568_0), 62824 }, /* PTESTW */ { CPUFUNC(op_f600_0), 62976 }, /* MOVE16 */ { CPUFUNC(op_f608_0), 62984 }, /* MOVE16 */ { CPUFUNC(op_f610_0), 62992 }, /* MOVE16 */ { CPUFUNC(op_f618_0), 63000 }, /* MOVE16 */ { CPUFUNC(op_f620_0), 63008 }, /* MOVE16 */ { 0, 0 }}; #endif /* CPUEMU_68000_ONLY */ #ifndef CPUEMU_68000_ONLY const struct cputbl CPUFUNC(op_smalltbl_2)[] = { { CPUFUNC(op_0000_0), 0 }, /* OR */ { CPUFUNC(op_0010_0), 16 }, /* OR */ { CPUFUNC(op_0018_0), 24 }, /* OR */ { CPUFUNC(op_0020_0), 32 }, /* OR */ { CPUFUNC(op_0028_0), 40 }, /* OR */ { CPUFUNC(op_0030_0), 48 }, /* OR */ { CPUFUNC(op_0038_0), 56 }, /* OR */ { CPUFUNC(op_0039_0), 57 }, /* OR */ { CPUFUNC(op_003c_0), 60 }, /* ORSR */ { CPUFUNC(op_0040_0), 64 }, /* OR */ { CPUFUNC(op_0050_0), 80 }, /* OR */ { CPUFUNC(op_0058_0), 88 }, /* OR */ { CPUFUNC(op_0060_0), 96 }, /* OR */ { CPUFUNC(op_0068_0), 104 }, /* OR */ { CPUFUNC(op_0070_0), 112 }, /* OR */ { CPUFUNC(op_0078_0), 120 }, /* OR */ { CPUFUNC(op_0079_0), 121 }, /* OR */ { CPUFUNC(op_007c_0), 124 }, /* ORSR */ { CPUFUNC(op_0080_0), 128 }, /* OR */ { CPUFUNC(op_0090_0), 144 }, /* OR */ { CPUFUNC(op_0098_0), 152 }, /* OR */ { CPUFUNC(op_00a0_0), 160 }, /* OR */ { CPUFUNC(op_00a8_0), 168 }, /* OR */ { CPUFUNC(op_00b0_0), 176 }, /* OR */ { CPUFUNC(op_00b8_0), 184 }, /* OR */ { CPUFUNC(op_00b9_0), 185 }, /* OR */ { CPUFUNC(op_00d0_0), 208 }, /* CHK2 */ { CPUFUNC(op_00e8_0), 232 }, /* CHK2 */ { CPUFUNC(op_00f0_0), 240 }, /* CHK2 */ { CPUFUNC(op_00f8_0), 248 }, /* CHK2 */ { CPUFUNC(op_00f9_0), 249 }, /* CHK2 */ { CPUFUNC(op_00fa_0), 250 }, /* CHK2 */ { CPUFUNC(op_00fb_0), 251 }, /* CHK2 */ { CPUFUNC(op_0100_0), 256 }, /* BTST */ { CPUFUNC(op_0108_0), 264 }, /* MVPMR */ { CPUFUNC(op_0110_0), 272 }, /* BTST */ { CPUFUNC(op_0118_0), 280 }, /* BTST */ { CPUFUNC(op_0120_0), 288 }, /* BTST */ { CPUFUNC(op_0128_0), 296 }, /* BTST */ { CPUFUNC(op_0130_0), 304 }, /* BTST */ { CPUFUNC(op_0138_0), 312 }, /* BTST */ { CPUFUNC(op_0139_0), 313 }, /* BTST */ { CPUFUNC(op_013a_0), 314 }, /* BTST */ { CPUFUNC(op_013b_0), 315 }, /* BTST */ { CPUFUNC(op_013c_0), 316 }, /* BTST */ { CPUFUNC(op_0140_0), 320 }, /* BCHG */ { CPUFUNC(op_0148_0), 328 }, /* MVPMR */ { CPUFUNC(op_0150_0), 336 }, /* BCHG */ { CPUFUNC(op_0158_0), 344 }, /* BCHG */ { CPUFUNC(op_0160_0), 352 }, /* BCHG */ { CPUFUNC(op_0168_0), 360 }, /* BCHG */ { CPUFUNC(op_0170_0), 368 }, /* BCHG */ { CPUFUNC(op_0178_0), 376 }, /* BCHG */ { CPUFUNC(op_0179_0), 377 }, /* BCHG */ { CPUFUNC(op_017a_0), 378 }, /* BCHG */ { CPUFUNC(op_017b_0), 379 }, /* BCHG */ { CPUFUNC(op_0180_0), 384 }, /* BCLR */ { CPUFUNC(op_0188_0), 392 }, /* MVPRM */ { CPUFUNC(op_0190_0), 400 }, /* BCLR */ { CPUFUNC(op_0198_0), 408 }, /* BCLR */ { CPUFUNC(op_01a0_0), 416 }, /* BCLR */ { CPUFUNC(op_01a8_0), 424 }, /* BCLR */ { CPUFUNC(op_01b0_0), 432 }, /* BCLR */ { CPUFUNC(op_01b8_0), 440 }, /* BCLR */ { CPUFUNC(op_01b9_0), 441 }, /* BCLR */ { CPUFUNC(op_01ba_0), 442 }, /* BCLR */ { CPUFUNC(op_01bb_0), 443 }, /* BCLR */ { CPUFUNC(op_01c0_0), 448 }, /* BSET */ { CPUFUNC(op_01c8_0), 456 }, /* MVPRM */ { CPUFUNC(op_01d0_0), 464 }, /* BSET */ { CPUFUNC(op_01d8_0), 472 }, /* BSET */ { CPUFUNC(op_01e0_0), 480 }, /* BSET */ { CPUFUNC(op_01e8_0), 488 }, /* BSET */ { CPUFUNC(op_01f0_0), 496 }, /* BSET */ { CPUFUNC(op_01f8_0), 504 }, /* BSET */ { CPUFUNC(op_01f9_0), 505 }, /* BSET */ { CPUFUNC(op_01fa_0), 506 }, /* BSET */ { CPUFUNC(op_01fb_0), 507 }, /* BSET */ { CPUFUNC(op_0200_0), 512 }, /* AND */ { CPUFUNC(op_0210_0), 528 }, /* AND */ { CPUFUNC(op_0218_0), 536 }, /* AND */ { CPUFUNC(op_0220_0), 544 }, /* AND */ { CPUFUNC(op_0228_0), 552 }, /* AND */ { CPUFUNC(op_0230_0), 560 }, /* AND */ { CPUFUNC(op_0238_0), 568 }, /* AND */ { CPUFUNC(op_0239_0), 569 }, /* AND */ { CPUFUNC(op_023c_0), 572 }, /* ANDSR */ { CPUFUNC(op_0240_0), 576 }, /* AND */ { CPUFUNC(op_0250_0), 592 }, /* AND */ { CPUFUNC(op_0258_0), 600 }, /* AND */ { CPUFUNC(op_0260_0), 608 }, /* AND */ { CPUFUNC(op_0268_0), 616 }, /* AND */ { CPUFUNC(op_0270_0), 624 }, /* AND */ { CPUFUNC(op_0278_0), 632 }, /* AND */ { CPUFUNC(op_0279_0), 633 }, /* AND */ { CPUFUNC(op_027c_0), 636 }, /* ANDSR */ { CPUFUNC(op_0280_0), 640 }, /* AND */ { CPUFUNC(op_0290_0), 656 }, /* AND */ { CPUFUNC(op_0298_0), 664 }, /* AND */ { CPUFUNC(op_02a0_0), 672 }, /* AND */ { CPUFUNC(op_02a8_0), 680 }, /* AND */ { CPUFUNC(op_02b0_0), 688 }, /* AND */ { CPUFUNC(op_02b8_0), 696 }, /* AND */ { CPUFUNC(op_02b9_0), 697 }, /* AND */ { CPUFUNC(op_02d0_0), 720 }, /* CHK2 */ { CPUFUNC(op_02e8_0), 744 }, /* CHK2 */ { CPUFUNC(op_02f0_0), 752 }, /* CHK2 */ { CPUFUNC(op_02f8_0), 760 }, /* CHK2 */ { CPUFUNC(op_02f9_0), 761 }, /* CHK2 */ { CPUFUNC(op_02fa_0), 762 }, /* CHK2 */ { CPUFUNC(op_02fb_0), 763 }, /* CHK2 */ { CPUFUNC(op_0400_0), 1024 }, /* SUB */ { CPUFUNC(op_0410_0), 1040 }, /* SUB */ { CPUFUNC(op_0418_0), 1048 }, /* SUB */ { CPUFUNC(op_0420_0), 1056 }, /* SUB */ { CPUFUNC(op_0428_0), 1064 }, /* SUB */ { CPUFUNC(op_0430_0), 1072 }, /* SUB */ { CPUFUNC(op_0438_0), 1080 }, /* SUB */ { CPUFUNC(op_0439_0), 1081 }, /* SUB */ { CPUFUNC(op_0440_0), 1088 }, /* SUB */ { CPUFUNC(op_0450_0), 1104 }, /* SUB */ { CPUFUNC(op_0458_0), 1112 }, /* SUB */ { CPUFUNC(op_0460_0), 1120 }, /* SUB */ { CPUFUNC(op_0468_0), 1128 }, /* SUB */ { CPUFUNC(op_0470_0), 1136 }, /* SUB */ { CPUFUNC(op_0478_0), 1144 }, /* SUB */ { CPUFUNC(op_0479_0), 1145 }, /* SUB */ { CPUFUNC(op_0480_0), 1152 }, /* SUB */ { CPUFUNC(op_0490_0), 1168 }, /* SUB */ { CPUFUNC(op_0498_0), 1176 }, /* SUB */ { CPUFUNC(op_04a0_0), 1184 }, /* SUB */ { CPUFUNC(op_04a8_0), 1192 }, /* SUB */ { CPUFUNC(op_04b0_0), 1200 }, /* SUB */ { CPUFUNC(op_04b8_0), 1208 }, /* SUB */ { CPUFUNC(op_04b9_0), 1209 }, /* SUB */ { CPUFUNC(op_04d0_0), 1232 }, /* CHK2 */ { CPUFUNC(op_04e8_0), 1256 }, /* CHK2 */ { CPUFUNC(op_04f0_0), 1264 }, /* CHK2 */ { CPUFUNC(op_04f8_0), 1272 }, /* CHK2 */ { CPUFUNC(op_04f9_0), 1273 }, /* CHK2 */ { CPUFUNC(op_04fa_0), 1274 }, /* CHK2 */ { CPUFUNC(op_04fb_0), 1275 }, /* CHK2 */ { CPUFUNC(op_0600_0), 1536 }, /* ADD */ { CPUFUNC(op_0610_0), 1552 }, /* ADD */ { CPUFUNC(op_0618_0), 1560 }, /* ADD */ { CPUFUNC(op_0620_0), 1568 }, /* ADD */ { CPUFUNC(op_0628_0), 1576 }, /* ADD */ { CPUFUNC(op_0630_0), 1584 }, /* ADD */ { CPUFUNC(op_0638_0), 1592 }, /* ADD */ { CPUFUNC(op_0639_0), 1593 }, /* ADD */ { CPUFUNC(op_0640_0), 1600 }, /* ADD */ { CPUFUNC(op_0650_0), 1616 }, /* ADD */ { CPUFUNC(op_0658_0), 1624 }, /* ADD */ { CPUFUNC(op_0660_0), 1632 }, /* ADD */ { CPUFUNC(op_0668_0), 1640 }, /* ADD */ { CPUFUNC(op_0670_0), 1648 }, /* ADD */ { CPUFUNC(op_0678_0), 1656 }, /* ADD */ { CPUFUNC(op_0679_0), 1657 }, /* ADD */ { CPUFUNC(op_0680_0), 1664 }, /* ADD */ { CPUFUNC(op_0690_0), 1680 }, /* ADD */ { CPUFUNC(op_0698_0), 1688 }, /* ADD */ { CPUFUNC(op_06a0_0), 1696 }, /* ADD */ { CPUFUNC(op_06a8_0), 1704 }, /* ADD */ { CPUFUNC(op_06b0_0), 1712 }, /* ADD */ { CPUFUNC(op_06b8_0), 1720 }, /* ADD */ { CPUFUNC(op_06b9_0), 1721 }, /* ADD */ { CPUFUNC(op_06c0_0), 1728 }, /* RTM */ { CPUFUNC(op_06c8_0), 1736 }, /* RTM */ { CPUFUNC(op_06d0_0), 1744 }, /* CALLM */ { CPUFUNC(op_06e8_0), 1768 }, /* CALLM */ { CPUFUNC(op_06f0_0), 1776 }, /* CALLM */ { CPUFUNC(op_06f8_0), 1784 }, /* CALLM */ { CPUFUNC(op_06f9_0), 1785 }, /* CALLM */ { CPUFUNC(op_06fa_0), 1786 }, /* CALLM */ { CPUFUNC(op_06fb_0), 1787 }, /* CALLM */ { CPUFUNC(op_0800_0), 2048 }, /* BTST */ { CPUFUNC(op_0810_0), 2064 }, /* BTST */ { CPUFUNC(op_0818_0), 2072 }, /* BTST */ { CPUFUNC(op_0820_0), 2080 }, /* BTST */ { CPUFUNC(op_0828_0), 2088 }, /* BTST */ { CPUFUNC(op_0830_0), 2096 }, /* BTST */ { CPUFUNC(op_0838_0), 2104 }, /* BTST */ { CPUFUNC(op_0839_0), 2105 }, /* BTST */ { CPUFUNC(op_083a_0), 2106 }, /* BTST */ { CPUFUNC(op_083b_0), 2107 }, /* BTST */ { CPUFUNC(op_083c_0), 2108 }, /* BTST */ { CPUFUNC(op_0840_0), 2112 }, /* BCHG */ { CPUFUNC(op_0850_0), 2128 }, /* BCHG */ { CPUFUNC(op_0858_0), 2136 }, /* BCHG */ { CPUFUNC(op_0860_0), 2144 }, /* BCHG */ { CPUFUNC(op_0868_0), 2152 }, /* BCHG */ { CPUFUNC(op_0870_0), 2160 }, /* BCHG */ { CPUFUNC(op_0878_0), 2168 }, /* BCHG */ { CPUFUNC(op_0879_0), 2169 }, /* BCHG */ { CPUFUNC(op_087a_0), 2170 }, /* BCHG */ { CPUFUNC(op_087b_0), 2171 }, /* BCHG */ { CPUFUNC(op_0880_0), 2176 }, /* BCLR */ { CPUFUNC(op_0890_0), 2192 }, /* BCLR */ { CPUFUNC(op_0898_0), 2200 }, /* BCLR */ { CPUFUNC(op_08a0_0), 2208 }, /* BCLR */ { CPUFUNC(op_08a8_0), 2216 }, /* BCLR */ { CPUFUNC(op_08b0_0), 2224 }, /* BCLR */ { CPUFUNC(op_08b8_0), 2232 }, /* BCLR */ { CPUFUNC(op_08b9_0), 2233 }, /* BCLR */ { CPUFUNC(op_08ba_0), 2234 }, /* BCLR */ { CPUFUNC(op_08bb_0), 2235 }, /* BCLR */ { CPUFUNC(op_08c0_0), 2240 }, /* BSET */ { CPUFUNC(op_08d0_0), 2256 }, /* BSET */ { CPUFUNC(op_08d8_0), 2264 }, /* BSET */ { CPUFUNC(op_08e0_0), 2272 }, /* BSET */ { CPUFUNC(op_08e8_0), 2280 }, /* BSET */ { CPUFUNC(op_08f0_0), 2288 }, /* BSET */ { CPUFUNC(op_08f8_0), 2296 }, /* BSET */ { CPUFUNC(op_08f9_0), 2297 }, /* BSET */ { CPUFUNC(op_08fa_0), 2298 }, /* BSET */ { CPUFUNC(op_08fb_0), 2299 }, /* BSET */ { CPUFUNC(op_0a00_0), 2560 }, /* EOR */ { CPUFUNC(op_0a10_0), 2576 }, /* EOR */ { CPUFUNC(op_0a18_0), 2584 }, /* EOR */ { CPUFUNC(op_0a20_0), 2592 }, /* EOR */ { CPUFUNC(op_0a28_0), 2600 }, /* EOR */ { CPUFUNC(op_0a30_0), 2608 }, /* EOR */ { CPUFUNC(op_0a38_0), 2616 }, /* EOR */ { CPUFUNC(op_0a39_0), 2617 }, /* EOR */ { CPUFUNC(op_0a3c_0), 2620 }, /* EORSR */ { CPUFUNC(op_0a40_0), 2624 }, /* EOR */ { CPUFUNC(op_0a50_0), 2640 }, /* EOR */ { CPUFUNC(op_0a58_0), 2648 }, /* EOR */ { CPUFUNC(op_0a60_0), 2656 }, /* EOR */ { CPUFUNC(op_0a68_0), 2664 }, /* EOR */ { CPUFUNC(op_0a70_0), 2672 }, /* EOR */ { CPUFUNC(op_0a78_0), 2680 }, /* EOR */ { CPUFUNC(op_0a79_0), 2681 }, /* EOR */ { CPUFUNC(op_0a7c_0), 2684 }, /* EORSR */ { CPUFUNC(op_0a80_0), 2688 }, /* EOR */ { CPUFUNC(op_0a90_0), 2704 }, /* EOR */ { CPUFUNC(op_0a98_0), 2712 }, /* EOR */ { CPUFUNC(op_0aa0_0), 2720 }, /* EOR */ { CPUFUNC(op_0aa8_0), 2728 }, /* EOR */ { CPUFUNC(op_0ab0_0), 2736 }, /* EOR */ { CPUFUNC(op_0ab8_0), 2744 }, /* EOR */ { CPUFUNC(op_0ab9_0), 2745 }, /* EOR */ { CPUFUNC(op_0ad0_0), 2768 }, /* CAS */ { CPUFUNC(op_0ad8_0), 2776 }, /* CAS */ { CPUFUNC(op_0ae0_0), 2784 }, /* CAS */ { CPUFUNC(op_0ae8_0), 2792 }, /* CAS */ { CPUFUNC(op_0af0_0), 2800 }, /* CAS */ { CPUFUNC(op_0af8_0), 2808 }, /* CAS */ { CPUFUNC(op_0af9_0), 2809 }, /* CAS */ { CPUFUNC(op_0c00_0), 3072 }, /* CMP */ { CPUFUNC(op_0c10_0), 3088 }, /* CMP */ { CPUFUNC(op_0c18_0), 3096 }, /* CMP */ { CPUFUNC(op_0c20_0), 3104 }, /* CMP */ { CPUFUNC(op_0c28_0), 3112 }, /* CMP */ { CPUFUNC(op_0c30_0), 3120 }, /* CMP */ { CPUFUNC(op_0c38_0), 3128 }, /* CMP */ { CPUFUNC(op_0c39_0), 3129 }, /* CMP */ { CPUFUNC(op_0c3a_0), 3130 }, /* CMP */ { CPUFUNC(op_0c3b_0), 3131 }, /* CMP */ { CPUFUNC(op_0c40_0), 3136 }, /* CMP */ { CPUFUNC(op_0c50_0), 3152 }, /* CMP */ { CPUFUNC(op_0c58_0), 3160 }, /* CMP */ { CPUFUNC(op_0c60_0), 3168 }, /* CMP */ { CPUFUNC(op_0c68_0), 3176 }, /* CMP */ { CPUFUNC(op_0c70_0), 3184 }, /* CMP */ { CPUFUNC(op_0c78_0), 3192 }, /* CMP */ { CPUFUNC(op_0c79_0), 3193 }, /* CMP */ { CPUFUNC(op_0c7a_0), 3194 }, /* CMP */ { CPUFUNC(op_0c7b_0), 3195 }, /* CMP */ { CPUFUNC(op_0c80_0), 3200 }, /* CMP */ { CPUFUNC(op_0c90_0), 3216 }, /* CMP */ { CPUFUNC(op_0c98_0), 3224 }, /* CMP */ { CPUFUNC(op_0ca0_0), 3232 }, /* CMP */ { CPUFUNC(op_0ca8_0), 3240 }, /* CMP */ { CPUFUNC(op_0cb0_0), 3248 }, /* CMP */ { CPUFUNC(op_0cb8_0), 3256 }, /* CMP */ { CPUFUNC(op_0cb9_0), 3257 }, /* CMP */ { CPUFUNC(op_0cba_0), 3258 }, /* CMP */ { CPUFUNC(op_0cbb_0), 3259 }, /* CMP */ { CPUFUNC(op_0cd0_0), 3280 }, /* CAS */ { CPUFUNC(op_0cd8_0), 3288 }, /* CAS */ { CPUFUNC(op_0ce0_0), 3296 }, /* CAS */ { CPUFUNC(op_0ce8_0), 3304 }, /* CAS */ { CPUFUNC(op_0cf0_0), 3312 }, /* CAS */ { CPUFUNC(op_0cf8_0), 3320 }, /* CAS */ { CPUFUNC(op_0cf9_0), 3321 }, /* CAS */ { CPUFUNC(op_0cfc_0), 3324 }, /* CAS2 */ { CPUFUNC(op_0e10_0), 3600 }, /* MOVES */ { CPUFUNC(op_0e18_0), 3608 }, /* MOVES */ { CPUFUNC(op_0e20_0), 3616 }, /* MOVES */ { CPUFUNC(op_0e28_0), 3624 }, /* MOVES */ { CPUFUNC(op_0e30_0), 3632 }, /* MOVES */ { CPUFUNC(op_0e38_0), 3640 }, /* MOVES */ { CPUFUNC(op_0e39_0), 3641 }, /* MOVES */ { CPUFUNC(op_0e50_0), 3664 }, /* MOVES */ { CPUFUNC(op_0e58_0), 3672 }, /* MOVES */ { CPUFUNC(op_0e60_0), 3680 }, /* MOVES */ { CPUFUNC(op_0e68_0), 3688 }, /* MOVES */ { CPUFUNC(op_0e70_0), 3696 }, /* MOVES */ { CPUFUNC(op_0e78_0), 3704 }, /* MOVES */ { CPUFUNC(op_0e79_0), 3705 }, /* MOVES */ { CPUFUNC(op_0e90_0), 3728 }, /* MOVES */ { CPUFUNC(op_0e98_0), 3736 }, /* MOVES */ { CPUFUNC(op_0ea0_0), 3744 }, /* MOVES */ { CPUFUNC(op_0ea8_0), 3752 }, /* MOVES */ { CPUFUNC(op_0eb0_0), 3760 }, /* MOVES */ { CPUFUNC(op_0eb8_0), 3768 }, /* MOVES */ { CPUFUNC(op_0eb9_0), 3769 }, /* MOVES */ { CPUFUNC(op_0ed0_0), 3792 }, /* CAS */ { CPUFUNC(op_0ed8_0), 3800 }, /* CAS */ { CPUFUNC(op_0ee0_0), 3808 }, /* CAS */ { CPUFUNC(op_0ee8_0), 3816 }, /* CAS */ { CPUFUNC(op_0ef0_0), 3824 }, /* CAS */ { CPUFUNC(op_0ef8_0), 3832 }, /* CAS */ { CPUFUNC(op_0ef9_0), 3833 }, /* CAS */ { CPUFUNC(op_0efc_0), 3836 }, /* CAS2 */ { CPUFUNC(op_1000_0), 4096 }, /* MOVE */ { CPUFUNC(op_1010_0), 4112 }, /* MOVE */ { CPUFUNC(op_1018_0), 4120 }, /* MOVE */ { CPUFUNC(op_1020_0), 4128 }, /* MOVE */ { CPUFUNC(op_1028_0), 4136 }, /* MOVE */ { CPUFUNC(op_1030_0), 4144 }, /* MOVE */ { CPUFUNC(op_1038_0), 4152 }, /* MOVE */ { CPUFUNC(op_1039_0), 4153 }, /* MOVE */ { CPUFUNC(op_103a_0), 4154 }, /* MOVE */ { CPUFUNC(op_103b_0), 4155 }, /* MOVE */ { CPUFUNC(op_103c_0), 4156 }, /* MOVE */ { CPUFUNC(op_1080_0), 4224 }, /* MOVE */ { CPUFUNC(op_1090_0), 4240 }, /* MOVE */ { CPUFUNC(op_1098_0), 4248 }, /* MOVE */ { CPUFUNC(op_10a0_0), 4256 }, /* MOVE */ { CPUFUNC(op_10a8_0), 4264 }, /* MOVE */ { CPUFUNC(op_10b0_0), 4272 }, /* MOVE */ { CPUFUNC(op_10b8_0), 4280 }, /* MOVE */ { CPUFUNC(op_10b9_0), 4281 }, /* MOVE */ { CPUFUNC(op_10ba_0), 4282 }, /* MOVE */ { CPUFUNC(op_10bb_0), 4283 }, /* MOVE */ { CPUFUNC(op_10bc_0), 4284 }, /* MOVE */ { CPUFUNC(op_10c0_0), 4288 }, /* MOVE */ { CPUFUNC(op_10d0_0), 4304 }, /* MOVE */ { CPUFUNC(op_10d8_0), 4312 }, /* MOVE */ { CPUFUNC(op_10e0_0), 4320 }, /* MOVE */ { CPUFUNC(op_10e8_0), 4328 }, /* MOVE */ { CPUFUNC(op_10f0_0), 4336 }, /* MOVE */ { CPUFUNC(op_10f8_0), 4344 }, /* MOVE */ { CPUFUNC(op_10f9_0), 4345 }, /* MOVE */ { CPUFUNC(op_10fa_0), 4346 }, /* MOVE */ { CPUFUNC(op_10fb_0), 4347 }, /* MOVE */ { CPUFUNC(op_10fc_0), 4348 }, /* MOVE */ { CPUFUNC(op_1100_0), 4352 }, /* MOVE */ { CPUFUNC(op_1110_0), 4368 }, /* MOVE */ { CPUFUNC(op_1118_0), 4376 }, /* MOVE */ { CPUFUNC(op_1120_0), 4384 }, /* MOVE */ { CPUFUNC(op_1128_0), 4392 }, /* MOVE */ { CPUFUNC(op_1130_0), 4400 }, /* MOVE */ { CPUFUNC(op_1138_0), 4408 }, /* MOVE */ { CPUFUNC(op_1139_0), 4409 }, /* MOVE */ { CPUFUNC(op_113a_0), 4410 }, /* MOVE */ { CPUFUNC(op_113b_0), 4411 }, /* MOVE */ { CPUFUNC(op_113c_0), 4412 }, /* MOVE */ { CPUFUNC(op_1140_0), 4416 }, /* MOVE */ { CPUFUNC(op_1150_0), 4432 }, /* MOVE */ { CPUFUNC(op_1158_0), 4440 }, /* MOVE */ { CPUFUNC(op_1160_0), 4448 }, /* MOVE */ { CPUFUNC(op_1168_0), 4456 }, /* MOVE */ { CPUFUNC(op_1170_0), 4464 }, /* MOVE */ { CPUFUNC(op_1178_0), 4472 }, /* MOVE */ { CPUFUNC(op_1179_0), 4473 }, /* MOVE */ { CPUFUNC(op_117a_0), 4474 }, /* MOVE */ { CPUFUNC(op_117b_0), 4475 }, /* MOVE */ { CPUFUNC(op_117c_0), 4476 }, /* MOVE */ { CPUFUNC(op_1180_0), 4480 }, /* MOVE */ { CPUFUNC(op_1190_0), 4496 }, /* MOVE */ { CPUFUNC(op_1198_0), 4504 }, /* MOVE */ { CPUFUNC(op_11a0_0), 4512 }, /* MOVE */ { CPUFUNC(op_11a8_0), 4520 }, /* MOVE */ { CPUFUNC(op_11b0_0), 4528 }, /* MOVE */ { CPUFUNC(op_11b8_0), 4536 }, /* MOVE */ { CPUFUNC(op_11b9_0), 4537 }, /* MOVE */ { CPUFUNC(op_11ba_0), 4538 }, /* MOVE */ { CPUFUNC(op_11bb_0), 4539 }, /* MOVE */ { CPUFUNC(op_11bc_0), 4540 }, /* MOVE */ { CPUFUNC(op_11c0_0), 4544 }, /* MOVE */ { CPUFUNC(op_11d0_0), 4560 }, /* MOVE */ { CPUFUNC(op_11d8_0), 4568 }, /* MOVE */ { CPUFUNC(op_11e0_0), 4576 }, /* MOVE */ { CPUFUNC(op_11e8_0), 4584 }, /* MOVE */ { CPUFUNC(op_11f0_0), 4592 }, /* MOVE */ { CPUFUNC(op_11f8_0), 4600 }, /* MOVE */ { CPUFUNC(op_11f9_0), 4601 }, /* MOVE */ { CPUFUNC(op_11fa_0), 4602 }, /* MOVE */ { CPUFUNC(op_11fb_0), 4603 }, /* MOVE */ { CPUFUNC(op_11fc_0), 4604 }, /* MOVE */ { CPUFUNC(op_13c0_0), 5056 }, /* MOVE */ { CPUFUNC(op_13d0_0), 5072 }, /* MOVE */ { CPUFUNC(op_13d8_0), 5080 }, /* MOVE */ { CPUFUNC(op_13e0_0), 5088 }, /* MOVE */ { CPUFUNC(op_13e8_0), 5096 }, /* MOVE */ { CPUFUNC(op_13f0_0), 5104 }, /* MOVE */ { CPUFUNC(op_13f8_0), 5112 }, /* MOVE */ { CPUFUNC(op_13f9_0), 5113 }, /* MOVE */ { CPUFUNC(op_13fa_0), 5114 }, /* MOVE */ { CPUFUNC(op_13fb_0), 5115 }, /* MOVE */ { CPUFUNC(op_13fc_0), 5116 }, /* MOVE */ { CPUFUNC(op_2000_0), 8192 }, /* MOVE */ { CPUFUNC(op_2008_0), 8200 }, /* MOVE */ { CPUFUNC(op_2010_0), 8208 }, /* MOVE */ { CPUFUNC(op_2018_0), 8216 }, /* MOVE */ { CPUFUNC(op_2020_0), 8224 }, /* MOVE */ { CPUFUNC(op_2028_0), 8232 }, /* MOVE */ { CPUFUNC(op_2030_0), 8240 }, /* MOVE */ { CPUFUNC(op_2038_0), 8248 }, /* MOVE */ { CPUFUNC(op_2039_0), 8249 }, /* MOVE */ { CPUFUNC(op_203a_0), 8250 }, /* MOVE */ { CPUFUNC(op_203b_0), 8251 }, /* MOVE */ { CPUFUNC(op_203c_0), 8252 }, /* MOVE */ { CPUFUNC(op_2040_0), 8256 }, /* MOVEA */ { CPUFUNC(op_2048_0), 8264 }, /* MOVEA */ { CPUFUNC(op_2050_0), 8272 }, /* MOVEA */ { CPUFUNC(op_2058_0), 8280 }, /* MOVEA */ { CPUFUNC(op_2060_0), 8288 }, /* MOVEA */ { CPUFUNC(op_2068_0), 8296 }, /* MOVEA */ { CPUFUNC(op_2070_0), 8304 }, /* MOVEA */ { CPUFUNC(op_2078_0), 8312 }, /* MOVEA */ { CPUFUNC(op_2079_0), 8313 }, /* MOVEA */ { CPUFUNC(op_207a_0), 8314 }, /* MOVEA */ { CPUFUNC(op_207b_0), 8315 }, /* MOVEA */ { CPUFUNC(op_207c_0), 8316 }, /* MOVEA */ { CPUFUNC(op_2080_0), 8320 }, /* MOVE */ { CPUFUNC(op_2088_0), 8328 }, /* MOVE */ { CPUFUNC(op_2090_0), 8336 }, /* MOVE */ { CPUFUNC(op_2098_0), 8344 }, /* MOVE */ { CPUFUNC(op_20a0_0), 8352 }, /* MOVE */ { CPUFUNC(op_20a8_0), 8360 }, /* MOVE */ { CPUFUNC(op_20b0_0), 8368 }, /* MOVE */ { CPUFUNC(op_20b8_0), 8376 }, /* MOVE */ { CPUFUNC(op_20b9_0), 8377 }, /* MOVE */ { CPUFUNC(op_20ba_0), 8378 }, /* MOVE */ { CPUFUNC(op_20bb_0), 8379 }, /* MOVE */ { CPUFUNC(op_20bc_0), 8380 }, /* MOVE */ { CPUFUNC(op_20c0_0), 8384 }, /* MOVE */ { CPUFUNC(op_20c8_0), 8392 }, /* MOVE */ { CPUFUNC(op_20d0_0), 8400 }, /* MOVE */ { CPUFUNC(op_20d8_0), 8408 }, /* MOVE */ { CPUFUNC(op_20e0_0), 8416 }, /* MOVE */ { CPUFUNC(op_20e8_0), 8424 }, /* MOVE */ { CPUFUNC(op_20f0_0), 8432 }, /* MOVE */ { CPUFUNC(op_20f8_0), 8440 }, /* MOVE */ { CPUFUNC(op_20f9_0), 8441 }, /* MOVE */ { CPUFUNC(op_20fa_0), 8442 }, /* MOVE */ { CPUFUNC(op_20fb_0), 8443 }, /* MOVE */ { CPUFUNC(op_20fc_0), 8444 }, /* MOVE */ { CPUFUNC(op_2100_0), 8448 }, /* MOVE */ { CPUFUNC(op_2108_0), 8456 }, /* MOVE */ { CPUFUNC(op_2110_0), 8464 }, /* MOVE */ { CPUFUNC(op_2118_0), 8472 }, /* MOVE */ { CPUFUNC(op_2120_0), 8480 }, /* MOVE */ { CPUFUNC(op_2128_0), 8488 }, /* MOVE */ { CPUFUNC(op_2130_0), 8496 }, /* MOVE */ { CPUFUNC(op_2138_0), 8504 }, /* MOVE */ { CPUFUNC(op_2139_0), 8505 }, /* MOVE */ { CPUFUNC(op_213a_0), 8506 }, /* MOVE */ { CPUFUNC(op_213b_0), 8507 }, /* MOVE */ { CPUFUNC(op_213c_0), 8508 }, /* MOVE */ { CPUFUNC(op_2140_0), 8512 }, /* MOVE */ { CPUFUNC(op_2148_0), 8520 }, /* MOVE */ { CPUFUNC(op_2150_0), 8528 }, /* MOVE */ { CPUFUNC(op_2158_0), 8536 }, /* MOVE */ { CPUFUNC(op_2160_0), 8544 }, /* MOVE */ { CPUFUNC(op_2168_0), 8552 }, /* MOVE */ { CPUFUNC(op_2170_0), 8560 }, /* MOVE */ { CPUFUNC(op_2178_0), 8568 }, /* MOVE */ { CPUFUNC(op_2179_0), 8569 }, /* MOVE */ { CPUFUNC(op_217a_0), 8570 }, /* MOVE */ { CPUFUNC(op_217b_0), 8571 }, /* MOVE */ { CPUFUNC(op_217c_0), 8572 }, /* MOVE */ { CPUFUNC(op_2180_0), 8576 }, /* MOVE */ { CPUFUNC(op_2188_0), 8584 }, /* MOVE */ { CPUFUNC(op_2190_0), 8592 }, /* MOVE */ { CPUFUNC(op_2198_0), 8600 }, /* MOVE */ { CPUFUNC(op_21a0_0), 8608 }, /* MOVE */ { CPUFUNC(op_21a8_0), 8616 }, /* MOVE */ { CPUFUNC(op_21b0_0), 8624 }, /* MOVE */ { CPUFUNC(op_21b8_0), 8632 }, /* MOVE */ { CPUFUNC(op_21b9_0), 8633 }, /* MOVE */ { CPUFUNC(op_21ba_0), 8634 }, /* MOVE */ { CPUFUNC(op_21bb_0), 8635 }, /* MOVE */ { CPUFUNC(op_21bc_0), 8636 }, /* MOVE */ { CPUFUNC(op_21c0_0), 8640 }, /* MOVE */ { CPUFUNC(op_21c8_0), 8648 }, /* MOVE */ { CPUFUNC(op_21d0_0), 8656 }, /* MOVE */ { CPUFUNC(op_21d8_0), 8664 }, /* MOVE */ { CPUFUNC(op_21e0_0), 8672 }, /* MOVE */ { CPUFUNC(op_21e8_0), 8680 }, /* MOVE */ { CPUFUNC(op_21f0_0), 8688 }, /* MOVE */ { CPUFUNC(op_21f8_0), 8696 }, /* MOVE */ { CPUFUNC(op_21f9_0), 8697 }, /* MOVE */ { CPUFUNC(op_21fa_0), 8698 }, /* MOVE */ { CPUFUNC(op_21fb_0), 8699 }, /* MOVE */ { CPUFUNC(op_21fc_0), 8700 }, /* MOVE */ { CPUFUNC(op_23c0_0), 9152 }, /* MOVE */ { CPUFUNC(op_23c8_0), 9160 }, /* MOVE */ { CPUFUNC(op_23d0_0), 9168 }, /* MOVE */ { CPUFUNC(op_23d8_0), 9176 }, /* MOVE */ { CPUFUNC(op_23e0_0), 9184 }, /* MOVE */ { CPUFUNC(op_23e8_0), 9192 }, /* MOVE */ { CPUFUNC(op_23f0_0), 9200 }, /* MOVE */ { CPUFUNC(op_23f8_0), 9208 }, /* MOVE */ { CPUFUNC(op_23f9_0), 9209 }, /* MOVE */ { CPUFUNC(op_23fa_0), 9210 }, /* MOVE */ { CPUFUNC(op_23fb_0), 9211 }, /* MOVE */ { CPUFUNC(op_23fc_0), 9212 }, /* MOVE */ { CPUFUNC(op_3000_0), 12288 }, /* MOVE */ { CPUFUNC(op_3008_0), 12296 }, /* MOVE */ { CPUFUNC(op_3010_0), 12304 }, /* MOVE */ { CPUFUNC(op_3018_0), 12312 }, /* MOVE */ { CPUFUNC(op_3020_0), 12320 }, /* MOVE */ { CPUFUNC(op_3028_0), 12328 }, /* MOVE */ { CPUFUNC(op_3030_0), 12336 }, /* MOVE */ { CPUFUNC(op_3038_0), 12344 }, /* MOVE */ { CPUFUNC(op_3039_0), 12345 }, /* MOVE */ { CPUFUNC(op_303a_0), 12346 }, /* MOVE */ { CPUFUNC(op_303b_0), 12347 }, /* MOVE */ { CPUFUNC(op_303c_0), 12348 }, /* MOVE */ { CPUFUNC(op_3040_0), 12352 }, /* MOVEA */ { CPUFUNC(op_3048_0), 12360 }, /* MOVEA */ { CPUFUNC(op_3050_0), 12368 }, /* MOVEA */ { CPUFUNC(op_3058_0), 12376 }, /* MOVEA */ { CPUFUNC(op_3060_0), 12384 }, /* MOVEA */ { CPUFUNC(op_3068_0), 12392 }, /* MOVEA */ { CPUFUNC(op_3070_0), 12400 }, /* MOVEA */ { CPUFUNC(op_3078_0), 12408 }, /* MOVEA */ { CPUFUNC(op_3079_0), 12409 }, /* MOVEA */ { CPUFUNC(op_307a_0), 12410 }, /* MOVEA */ { CPUFUNC(op_307b_0), 12411 }, /* MOVEA */ { CPUFUNC(op_307c_0), 12412 }, /* MOVEA */ { CPUFUNC(op_3080_0), 12416 }, /* MOVE */ { CPUFUNC(op_3088_0), 12424 }, /* MOVE */ { CPUFUNC(op_3090_0), 12432 }, /* MOVE */ { CPUFUNC(op_3098_0), 12440 }, /* MOVE */ { CPUFUNC(op_30a0_0), 12448 }, /* MOVE */ { CPUFUNC(op_30a8_0), 12456 }, /* MOVE */ { CPUFUNC(op_30b0_0), 12464 }, /* MOVE */ { CPUFUNC(op_30b8_0), 12472 }, /* MOVE */ { CPUFUNC(op_30b9_0), 12473 }, /* MOVE */ { CPUFUNC(op_30ba_0), 12474 }, /* MOVE */ { CPUFUNC(op_30bb_0), 12475 }, /* MOVE */ { CPUFUNC(op_30bc_0), 12476 }, /* MOVE */ { CPUFUNC(op_30c0_0), 12480 }, /* MOVE */ { CPUFUNC(op_30c8_0), 12488 }, /* MOVE */ { CPUFUNC(op_30d0_0), 12496 }, /* MOVE */ { CPUFUNC(op_30d8_0), 12504 }, /* MOVE */ { CPUFUNC(op_30e0_0), 12512 }, /* MOVE */ { CPUFUNC(op_30e8_0), 12520 }, /* MOVE */ { CPUFUNC(op_30f0_0), 12528 }, /* MOVE */ { CPUFUNC(op_30f8_0), 12536 }, /* MOVE */ { CPUFUNC(op_30f9_0), 12537 }, /* MOVE */ { CPUFUNC(op_30fa_0), 12538 }, /* MOVE */ { CPUFUNC(op_30fb_0), 12539 }, /* MOVE */ { CPUFUNC(op_30fc_0), 12540 }, /* MOVE */ { CPUFUNC(op_3100_0), 12544 }, /* MOVE */ { CPUFUNC(op_3108_0), 12552 }, /* MOVE */ { CPUFUNC(op_3110_0), 12560 }, /* MOVE */ { CPUFUNC(op_3118_0), 12568 }, /* MOVE */ { CPUFUNC(op_3120_0), 12576 }, /* MOVE */ { CPUFUNC(op_3128_0), 12584 }, /* MOVE */ { CPUFUNC(op_3130_0), 12592 }, /* MOVE */ { CPUFUNC(op_3138_0), 12600 }, /* MOVE */ { CPUFUNC(op_3139_0), 12601 }, /* MOVE */ { CPUFUNC(op_313a_0), 12602 }, /* MOVE */ { CPUFUNC(op_313b_0), 12603 }, /* MOVE */ { CPUFUNC(op_313c_0), 12604 }, /* MOVE */ { CPUFUNC(op_3140_0), 12608 }, /* MOVE */ { CPUFUNC(op_3148_0), 12616 }, /* MOVE */ { CPUFUNC(op_3150_0), 12624 }, /* MOVE */ { CPUFUNC(op_3158_0), 12632 }, /* MOVE */ { CPUFUNC(op_3160_0), 12640 }, /* MOVE */ { CPUFUNC(op_3168_0), 12648 }, /* MOVE */ { CPUFUNC(op_3170_0), 12656 }, /* MOVE */ { CPUFUNC(op_3178_0), 12664 }, /* MOVE */ { CPUFUNC(op_3179_0), 12665 }, /* MOVE */ { CPUFUNC(op_317a_0), 12666 }, /* MOVE */ { CPUFUNC(op_317b_0), 12667 }, /* MOVE */ { CPUFUNC(op_317c_0), 12668 }, /* MOVE */ { CPUFUNC(op_3180_0), 12672 }, /* MOVE */ { CPUFUNC(op_3188_0), 12680 }, /* MOVE */ { CPUFUNC(op_3190_0), 12688 }, /* MOVE */ { CPUFUNC(op_3198_0), 12696 }, /* MOVE */ { CPUFUNC(op_31a0_0), 12704 }, /* MOVE */ { CPUFUNC(op_31a8_0), 12712 }, /* MOVE */ { CPUFUNC(op_31b0_0), 12720 }, /* MOVE */ { CPUFUNC(op_31b8_0), 12728 }, /* MOVE */ { CPUFUNC(op_31b9_0), 12729 }, /* MOVE */ { CPUFUNC(op_31ba_0), 12730 }, /* MOVE */ { CPUFUNC(op_31bb_0), 12731 }, /* MOVE */ { CPUFUNC(op_31bc_0), 12732 }, /* MOVE */ { CPUFUNC(op_31c0_0), 12736 }, /* MOVE */ { CPUFUNC(op_31c8_0), 12744 }, /* MOVE */ { CPUFUNC(op_31d0_0), 12752 }, /* MOVE */ { CPUFUNC(op_31d8_0), 12760 }, /* MOVE */ { CPUFUNC(op_31e0_0), 12768 }, /* MOVE */ { CPUFUNC(op_31e8_0), 12776 }, /* MOVE */ { CPUFUNC(op_31f0_0), 12784 }, /* MOVE */ { CPUFUNC(op_31f8_0), 12792 }, /* MOVE */ { CPUFUNC(op_31f9_0), 12793 }, /* MOVE */ { CPUFUNC(op_31fa_0), 12794 }, /* MOVE */ { CPUFUNC(op_31fb_0), 12795 }, /* MOVE */ { CPUFUNC(op_31fc_0), 12796 }, /* MOVE */ { CPUFUNC(op_33c0_0), 13248 }, /* MOVE */ { CPUFUNC(op_33c8_0), 13256 }, /* MOVE */ { CPUFUNC(op_33d0_0), 13264 }, /* MOVE */ { CPUFUNC(op_33d8_0), 13272 }, /* MOVE */ { CPUFUNC(op_33e0_0), 13280 }, /* MOVE */ { CPUFUNC(op_33e8_0), 13288 }, /* MOVE */ { CPUFUNC(op_33f0_0), 13296 }, /* MOVE */ { CPUFUNC(op_33f8_0), 13304 }, /* MOVE */ { CPUFUNC(op_33f9_0), 13305 }, /* MOVE */ { CPUFUNC(op_33fa_0), 13306 }, /* MOVE */ { CPUFUNC(op_33fb_0), 13307 }, /* MOVE */ { CPUFUNC(op_33fc_0), 13308 }, /* MOVE */ { CPUFUNC(op_4000_0), 16384 }, /* NEGX */ { CPUFUNC(op_4010_0), 16400 }, /* NEGX */ { CPUFUNC(op_4018_0), 16408 }, /* NEGX */ { CPUFUNC(op_4020_0), 16416 }, /* NEGX */ { CPUFUNC(op_4028_0), 16424 }, /* NEGX */ { CPUFUNC(op_4030_0), 16432 }, /* NEGX */ { CPUFUNC(op_4038_0), 16440 }, /* NEGX */ { CPUFUNC(op_4039_0), 16441 }, /* NEGX */ { CPUFUNC(op_4040_0), 16448 }, /* NEGX */ { CPUFUNC(op_4050_0), 16464 }, /* NEGX */ { CPUFUNC(op_4058_0), 16472 }, /* NEGX */ { CPUFUNC(op_4060_0), 16480 }, /* NEGX */ { CPUFUNC(op_4068_0), 16488 }, /* NEGX */ { CPUFUNC(op_4070_0), 16496 }, /* NEGX */ { CPUFUNC(op_4078_0), 16504 }, /* NEGX */ { CPUFUNC(op_4079_0), 16505 }, /* NEGX */ { CPUFUNC(op_4080_0), 16512 }, /* NEGX */ { CPUFUNC(op_4090_0), 16528 }, /* NEGX */ { CPUFUNC(op_4098_0), 16536 }, /* NEGX */ { CPUFUNC(op_40a0_0), 16544 }, /* NEGX */ { CPUFUNC(op_40a8_0), 16552 }, /* NEGX */ { CPUFUNC(op_40b0_0), 16560 }, /* NEGX */ { CPUFUNC(op_40b8_0), 16568 }, /* NEGX */ { CPUFUNC(op_40b9_0), 16569 }, /* NEGX */ { CPUFUNC(op_40c0_0), 16576 }, /* MVSR2 */ { CPUFUNC(op_40d0_0), 16592 }, /* MVSR2 */ { CPUFUNC(op_40d8_0), 16600 }, /* MVSR2 */ { CPUFUNC(op_40e0_0), 16608 }, /* MVSR2 */ { CPUFUNC(op_40e8_0), 16616 }, /* MVSR2 */ { CPUFUNC(op_40f0_0), 16624 }, /* MVSR2 */ { CPUFUNC(op_40f8_0), 16632 }, /* MVSR2 */ { CPUFUNC(op_40f9_0), 16633 }, /* MVSR2 */ { CPUFUNC(op_4100_0), 16640 }, /* CHK */ { CPUFUNC(op_4110_0), 16656 }, /* CHK */ { CPUFUNC(op_4118_0), 16664 }, /* CHK */ { CPUFUNC(op_4120_0), 16672 }, /* CHK */ { CPUFUNC(op_4128_0), 16680 }, /* CHK */ { CPUFUNC(op_4130_0), 16688 }, /* CHK */ { CPUFUNC(op_4138_0), 16696 }, /* CHK */ { CPUFUNC(op_4139_0), 16697 }, /* CHK */ { CPUFUNC(op_413a_0), 16698 }, /* CHK */ { CPUFUNC(op_413b_0), 16699 }, /* CHK */ { CPUFUNC(op_413c_0), 16700 }, /* CHK */ { CPUFUNC(op_4180_0), 16768 }, /* CHK */ { CPUFUNC(op_4190_0), 16784 }, /* CHK */ { CPUFUNC(op_4198_0), 16792 }, /* CHK */ { CPUFUNC(op_41a0_0), 16800 }, /* CHK */ { CPUFUNC(op_41a8_0), 16808 }, /* CHK */ { CPUFUNC(op_41b0_0), 16816 }, /* CHK */ { CPUFUNC(op_41b8_0), 16824 }, /* CHK */ { CPUFUNC(op_41b9_0), 16825 }, /* CHK */ { CPUFUNC(op_41ba_0), 16826 }, /* CHK */ { CPUFUNC(op_41bb_0), 16827 }, /* CHK */ { CPUFUNC(op_41bc_0), 16828 }, /* CHK */ { CPUFUNC(op_41d0_0), 16848 }, /* LEA */ { CPUFUNC(op_41e8_0), 16872 }, /* LEA */ { CPUFUNC(op_41f0_0), 16880 }, /* LEA */ { CPUFUNC(op_41f8_0), 16888 }, /* LEA */ { CPUFUNC(op_41f9_0), 16889 }, /* LEA */ { CPUFUNC(op_41fa_0), 16890 }, /* LEA */ { CPUFUNC(op_41fb_0), 16891 }, /* LEA */ { CPUFUNC(op_4200_0), 16896 }, /* CLR */ { CPUFUNC(op_4210_0), 16912 }, /* CLR */ { CPUFUNC(op_4218_0), 16920 }, /* CLR */ { CPUFUNC(op_4220_0), 16928 }, /* CLR */ { CPUFUNC(op_4228_0), 16936 }, /* CLR */ { CPUFUNC(op_4230_0), 16944 }, /* CLR */ { CPUFUNC(op_4238_0), 16952 }, /* CLR */ { CPUFUNC(op_4239_0), 16953 }, /* CLR */ { CPUFUNC(op_4240_0), 16960 }, /* CLR */ { CPUFUNC(op_4250_0), 16976 }, /* CLR */ { CPUFUNC(op_4258_0), 16984 }, /* CLR */ { CPUFUNC(op_4260_0), 16992 }, /* CLR */ { CPUFUNC(op_4268_0), 17000 }, /* CLR */ { CPUFUNC(op_4270_0), 17008 }, /* CLR */ { CPUFUNC(op_4278_0), 17016 }, /* CLR */ { CPUFUNC(op_4279_0), 17017 }, /* CLR */ { CPUFUNC(op_4280_0), 17024 }, /* CLR */ { CPUFUNC(op_4290_0), 17040 }, /* CLR */ { CPUFUNC(op_4298_0), 17048 }, /* CLR */ { CPUFUNC(op_42a0_0), 17056 }, /* CLR */ { CPUFUNC(op_42a8_0), 17064 }, /* CLR */ { CPUFUNC(op_42b0_0), 17072 }, /* CLR */ { CPUFUNC(op_42b8_0), 17080 }, /* CLR */ { CPUFUNC(op_42b9_0), 17081 }, /* CLR */ { CPUFUNC(op_42c0_0), 17088 }, /* MVSR2 */ { CPUFUNC(op_42d0_0), 17104 }, /* MVSR2 */ { CPUFUNC(op_42d8_0), 17112 }, /* MVSR2 */ { CPUFUNC(op_42e0_0), 17120 }, /* MVSR2 */ { CPUFUNC(op_42e8_0), 17128 }, /* MVSR2 */ { CPUFUNC(op_42f0_0), 17136 }, /* MVSR2 */ { CPUFUNC(op_42f8_0), 17144 }, /* MVSR2 */ { CPUFUNC(op_42f9_0), 17145 }, /* MVSR2 */ { CPUFUNC(op_4400_0), 17408 }, /* NEG */ { CPUFUNC(op_4410_0), 17424 }, /* NEG */ { CPUFUNC(op_4418_0), 17432 }, /* NEG */ { CPUFUNC(op_4420_0), 17440 }, /* NEG */ { CPUFUNC(op_4428_0), 17448 }, /* NEG */ { CPUFUNC(op_4430_0), 17456 }, /* NEG */ { CPUFUNC(op_4438_0), 17464 }, /* NEG */ { CPUFUNC(op_4439_0), 17465 }, /* NEG */ { CPUFUNC(op_4440_0), 17472 }, /* NEG */ { CPUFUNC(op_4450_0), 17488 }, /* NEG */ { CPUFUNC(op_4458_0), 17496 }, /* NEG */ { CPUFUNC(op_4460_0), 17504 }, /* NEG */ { CPUFUNC(op_4468_0), 17512 }, /* NEG */ { CPUFUNC(op_4470_0), 17520 }, /* NEG */ { CPUFUNC(op_4478_0), 17528 }, /* NEG */ { CPUFUNC(op_4479_0), 17529 }, /* NEG */ { CPUFUNC(op_4480_0), 17536 }, /* NEG */ { CPUFUNC(op_4490_0), 17552 }, /* NEG */ { CPUFUNC(op_4498_0), 17560 }, /* NEG */ { CPUFUNC(op_44a0_0), 17568 }, /* NEG */ { CPUFUNC(op_44a8_0), 17576 }, /* NEG */ { CPUFUNC(op_44b0_0), 17584 }, /* NEG */ { CPUFUNC(op_44b8_0), 17592 }, /* NEG */ { CPUFUNC(op_44b9_0), 17593 }, /* NEG */ { CPUFUNC(op_44c0_0), 17600 }, /* MV2SR */ { CPUFUNC(op_44d0_0), 17616 }, /* MV2SR */ { CPUFUNC(op_44d8_0), 17624 }, /* MV2SR */ { CPUFUNC(op_44e0_0), 17632 }, /* MV2SR */ { CPUFUNC(op_44e8_0), 17640 }, /* MV2SR */ { CPUFUNC(op_44f0_0), 17648 }, /* MV2SR */ { CPUFUNC(op_44f8_0), 17656 }, /* MV2SR */ { CPUFUNC(op_44f9_0), 17657 }, /* MV2SR */ { CPUFUNC(op_44fa_0), 17658 }, /* MV2SR */ { CPUFUNC(op_44fb_0), 17659 }, /* MV2SR */ { CPUFUNC(op_44fc_0), 17660 }, /* MV2SR */ { CPUFUNC(op_4600_0), 17920 }, /* NOT */ { CPUFUNC(op_4610_0), 17936 }, /* NOT */ { CPUFUNC(op_4618_0), 17944 }, /* NOT */ { CPUFUNC(op_4620_0), 17952 }, /* NOT */ { CPUFUNC(op_4628_0), 17960 }, /* NOT */ { CPUFUNC(op_4630_0), 17968 }, /* NOT */ { CPUFUNC(op_4638_0), 17976 }, /* NOT */ { CPUFUNC(op_4639_0), 17977 }, /* NOT */ { CPUFUNC(op_4640_0), 17984 }, /* NOT */ { CPUFUNC(op_4650_0), 18000 }, /* NOT */ { CPUFUNC(op_4658_0), 18008 }, /* NOT */ { CPUFUNC(op_4660_0), 18016 }, /* NOT */ { CPUFUNC(op_4668_0), 18024 }, /* NOT */ { CPUFUNC(op_4670_0), 18032 }, /* NOT */ { CPUFUNC(op_4678_0), 18040 }, /* NOT */ { CPUFUNC(op_4679_0), 18041 }, /* NOT */ { CPUFUNC(op_4680_0), 18048 }, /* NOT */ { CPUFUNC(op_4690_0), 18064 }, /* NOT */ { CPUFUNC(op_4698_0), 18072 }, /* NOT */ { CPUFUNC(op_46a0_0), 18080 }, /* NOT */ { CPUFUNC(op_46a8_0), 18088 }, /* NOT */ { CPUFUNC(op_46b0_0), 18096 }, /* NOT */ { CPUFUNC(op_46b8_0), 18104 }, /* NOT */ { CPUFUNC(op_46b9_0), 18105 }, /* NOT */ { CPUFUNC(op_46c0_0), 18112 }, /* MV2SR */ { CPUFUNC(op_46d0_0), 18128 }, /* MV2SR */ { CPUFUNC(op_46d8_0), 18136 }, /* MV2SR */ { CPUFUNC(op_46e0_0), 18144 }, /* MV2SR */ { CPUFUNC(op_46e8_0), 18152 }, /* MV2SR */ { CPUFUNC(op_46f0_0), 18160 }, /* MV2SR */ { CPUFUNC(op_46f8_0), 18168 }, /* MV2SR */ { CPUFUNC(op_46f9_0), 18169 }, /* MV2SR */ { CPUFUNC(op_46fa_0), 18170 }, /* MV2SR */ { CPUFUNC(op_46fb_0), 18171 }, /* MV2SR */ { CPUFUNC(op_46fc_0), 18172 }, /* MV2SR */ { CPUFUNC(op_4800_2), 18432 }, /* NBCD */ { CPUFUNC(op_4808_0), 18440 }, /* LINK */ { CPUFUNC(op_4810_2), 18448 }, /* NBCD */ { CPUFUNC(op_4818_2), 18456 }, /* NBCD */ { CPUFUNC(op_4820_2), 18464 }, /* NBCD */ { CPUFUNC(op_4828_2), 18472 }, /* NBCD */ { CPUFUNC(op_4830_2), 18480 }, /* NBCD */ { CPUFUNC(op_4838_2), 18488 }, /* NBCD */ { CPUFUNC(op_4839_2), 18489 }, /* NBCD */ { CPUFUNC(op_4840_0), 18496 }, /* SWAP */ { CPUFUNC(op_4848_0), 18504 }, /* BKPT */ { CPUFUNC(op_4850_0), 18512 }, /* PEA */ { CPUFUNC(op_4868_0), 18536 }, /* PEA */ { CPUFUNC(op_4870_0), 18544 }, /* PEA */ { CPUFUNC(op_4878_0), 18552 }, /* PEA */ { CPUFUNC(op_4879_0), 18553 }, /* PEA */ { CPUFUNC(op_487a_0), 18554 }, /* PEA */ { CPUFUNC(op_487b_0), 18555 }, /* PEA */ { CPUFUNC(op_4880_0), 18560 }, /* EXT */ { CPUFUNC(op_4890_0), 18576 }, /* MVMLE */ { CPUFUNC(op_48a0_0), 18592 }, /* MVMLE */ { CPUFUNC(op_48a8_0), 18600 }, /* MVMLE */ { CPUFUNC(op_48b0_0), 18608 }, /* MVMLE */ { CPUFUNC(op_48b8_0), 18616 }, /* MVMLE */ { CPUFUNC(op_48b9_0), 18617 }, /* MVMLE */ { CPUFUNC(op_48c0_0), 18624 }, /* EXT */ { CPUFUNC(op_48d0_0), 18640 }, /* MVMLE */ { CPUFUNC(op_48e0_0), 18656 }, /* MVMLE */ { CPUFUNC(op_48e8_0), 18664 }, /* MVMLE */ { CPUFUNC(op_48f0_0), 18672 }, /* MVMLE */ { CPUFUNC(op_48f8_0), 18680 }, /* MVMLE */ { CPUFUNC(op_48f9_0), 18681 }, /* MVMLE */ { CPUFUNC(op_49c0_0), 18880 }, /* EXT */ { CPUFUNC(op_4a00_0), 18944 }, /* TST */ { CPUFUNC(op_4a10_0), 18960 }, /* TST */ { CPUFUNC(op_4a18_0), 18968 }, /* TST */ { CPUFUNC(op_4a20_0), 18976 }, /* TST */ { CPUFUNC(op_4a28_0), 18984 }, /* TST */ { CPUFUNC(op_4a30_0), 18992 }, /* TST */ { CPUFUNC(op_4a38_0), 19000 }, /* TST */ { CPUFUNC(op_4a39_0), 19001 }, /* TST */ { CPUFUNC(op_4a3a_0), 19002 }, /* TST */ { CPUFUNC(op_4a3b_0), 19003 }, /* TST */ { CPUFUNC(op_4a3c_0), 19004 }, /* TST */ { CPUFUNC(op_4a40_0), 19008 }, /* TST */ { CPUFUNC(op_4a48_0), 19016 }, /* TST */ { CPUFUNC(op_4a50_0), 19024 }, /* TST */ { CPUFUNC(op_4a58_0), 19032 }, /* TST */ { CPUFUNC(op_4a60_0), 19040 }, /* TST */ { CPUFUNC(op_4a68_0), 19048 }, /* TST */ { CPUFUNC(op_4a70_0), 19056 }, /* TST */ { CPUFUNC(op_4a78_0), 19064 }, /* TST */ { CPUFUNC(op_4a79_0), 19065 }, /* TST */ { CPUFUNC(op_4a7a_0), 19066 }, /* TST */ { CPUFUNC(op_4a7b_0), 19067 }, /* TST */ { CPUFUNC(op_4a7c_0), 19068 }, /* TST */ { CPUFUNC(op_4a80_0), 19072 }, /* TST */ { CPUFUNC(op_4a88_0), 19080 }, /* TST */ { CPUFUNC(op_4a90_0), 19088 }, /* TST */ { CPUFUNC(op_4a98_0), 19096 }, /* TST */ { CPUFUNC(op_4aa0_0), 19104 }, /* TST */ { CPUFUNC(op_4aa8_0), 19112 }, /* TST */ { CPUFUNC(op_4ab0_0), 19120 }, /* TST */ { CPUFUNC(op_4ab8_0), 19128 }, /* TST */ { CPUFUNC(op_4ab9_0), 19129 }, /* TST */ { CPUFUNC(op_4aba_0), 19130 }, /* TST */ { CPUFUNC(op_4abb_0), 19131 }, /* TST */ { CPUFUNC(op_4abc_0), 19132 }, /* TST */ { CPUFUNC(op_4ac0_0), 19136 }, /* TAS */ { CPUFUNC(op_4ad0_0), 19152 }, /* TAS */ { CPUFUNC(op_4ad8_0), 19160 }, /* TAS */ { CPUFUNC(op_4ae0_0), 19168 }, /* TAS */ { CPUFUNC(op_4ae8_0), 19176 }, /* TAS */ { CPUFUNC(op_4af0_0), 19184 }, /* TAS */ { CPUFUNC(op_4af8_0), 19192 }, /* TAS */ { CPUFUNC(op_4af9_0), 19193 }, /* TAS */ { CPUFUNC(op_4c00_0), 19456 }, /* MULL */ { CPUFUNC(op_4c10_0), 19472 }, /* MULL */ { CPUFUNC(op_4c18_0), 19480 }, /* MULL */ { CPUFUNC(op_4c20_0), 19488 }, /* MULL */ { CPUFUNC(op_4c28_0), 19496 }, /* MULL */ { CPUFUNC(op_4c30_0), 19504 }, /* MULL */ { CPUFUNC(op_4c38_0), 19512 }, /* MULL */ { CPUFUNC(op_4c39_0), 19513 }, /* MULL */ { CPUFUNC(op_4c3a_0), 19514 }, /* MULL */ { CPUFUNC(op_4c3b_0), 19515 }, /* MULL */ { CPUFUNC(op_4c3c_0), 19516 }, /* MULL */ { CPUFUNC(op_4c40_0), 19520 }, /* DIVL */ { CPUFUNC(op_4c50_0), 19536 }, /* DIVL */ { CPUFUNC(op_4c58_0), 19544 }, /* DIVL */ { CPUFUNC(op_4c60_0), 19552 }, /* DIVL */ { CPUFUNC(op_4c68_0), 19560 }, /* DIVL */ { CPUFUNC(op_4c70_0), 19568 }, /* DIVL */ { CPUFUNC(op_4c78_0), 19576 }, /* DIVL */ { CPUFUNC(op_4c79_0), 19577 }, /* DIVL */ { CPUFUNC(op_4c7a_0), 19578 }, /* DIVL */ { CPUFUNC(op_4c7b_0), 19579 }, /* DIVL */ { CPUFUNC(op_4c7c_0), 19580 }, /* DIVL */ { CPUFUNC(op_4c90_0), 19600 }, /* MVMEL */ { CPUFUNC(op_4c98_0), 19608 }, /* MVMEL */ { CPUFUNC(op_4ca8_0), 19624 }, /* MVMEL */ { CPUFUNC(op_4cb0_0), 19632 }, /* MVMEL */ { CPUFUNC(op_4cb8_0), 19640 }, /* MVMEL */ { CPUFUNC(op_4cb9_0), 19641 }, /* MVMEL */ { CPUFUNC(op_4cba_0), 19642 }, /* MVMEL */ { CPUFUNC(op_4cbb_0), 19643 }, /* MVMEL */ { CPUFUNC(op_4cd0_0), 19664 }, /* MVMEL */ { CPUFUNC(op_4cd8_0), 19672 }, /* MVMEL */ { CPUFUNC(op_4ce8_0), 19688 }, /* MVMEL */ { CPUFUNC(op_4cf0_0), 19696 }, /* MVMEL */ { CPUFUNC(op_4cf8_0), 19704 }, /* MVMEL */ { CPUFUNC(op_4cf9_0), 19705 }, /* MVMEL */ { CPUFUNC(op_4cfa_0), 19706 }, /* MVMEL */ { CPUFUNC(op_4cfb_0), 19707 }, /* MVMEL */ { CPUFUNC(op_4e40_0), 20032 }, /* TRAP */ { CPUFUNC(op_4e50_0), 20048 }, /* LINK */ { CPUFUNC(op_4e58_0), 20056 }, /* UNLK */ { CPUFUNC(op_4e60_0), 20064 }, /* MVR2USP */ { CPUFUNC(op_4e68_0), 20072 }, /* MVUSP2R */ { CPUFUNC(op_4e70_0), 20080 }, /* RESET */ { CPUFUNC(op_4e71_0), 20081 }, /* NOP */ { CPUFUNC(op_4e72_0), 20082 }, /* STOP */ { CPUFUNC(op_4e73_0), 20083 }, /* RTE */ { CPUFUNC(op_4e74_0), 20084 }, /* RTD */ { CPUFUNC(op_4e75_0), 20085 }, /* RTS */ { CPUFUNC(op_4e76_0), 20086 }, /* TRAPV */ { CPUFUNC(op_4e77_0), 20087 }, /* RTR */ { CPUFUNC(op_4e7a_0), 20090 }, /* MOVEC2 */ { CPUFUNC(op_4e7b_0), 20091 }, /* MOVE2C */ { CPUFUNC(op_4e90_0), 20112 }, /* JSR */ { CPUFUNC(op_4ea8_0), 20136 }, /* JSR */ { CPUFUNC(op_4eb0_0), 20144 }, /* JSR */ { CPUFUNC(op_4eb8_0), 20152 }, /* JSR */ { CPUFUNC(op_4eb9_0), 20153 }, /* JSR */ { CPUFUNC(op_4eba_0), 20154 }, /* JSR */ { CPUFUNC(op_4ebb_0), 20155 }, /* JSR */ { CPUFUNC(op_4ed0_0), 20176 }, /* JMP */ { CPUFUNC(op_4ee8_0), 20200 }, /* JMP */ { CPUFUNC(op_4ef0_0), 20208 }, /* JMP */ { CPUFUNC(op_4ef8_0), 20216 }, /* JMP */ { CPUFUNC(op_4ef9_0), 20217 }, /* JMP */ { CPUFUNC(op_4efa_0), 20218 }, /* JMP */ { CPUFUNC(op_4efb_0), 20219 }, /* JMP */ { CPUFUNC(op_5000_0), 20480 }, /* ADD */ { CPUFUNC(op_5010_0), 20496 }, /* ADD */ { CPUFUNC(op_5018_0), 20504 }, /* ADD */ { CPUFUNC(op_5020_0), 20512 }, /* ADD */ { CPUFUNC(op_5028_0), 20520 }, /* ADD */ { CPUFUNC(op_5030_0), 20528 }, /* ADD */ { CPUFUNC(op_5038_0), 20536 }, /* ADD */ { CPUFUNC(op_5039_0), 20537 }, /* ADD */ { CPUFUNC(op_5040_0), 20544 }, /* ADD */ { CPUFUNC(op_5048_0), 20552 }, /* ADDA */ { CPUFUNC(op_5050_0), 20560 }, /* ADD */ { CPUFUNC(op_5058_0), 20568 }, /* ADD */ { CPUFUNC(op_5060_0), 20576 }, /* ADD */ { CPUFUNC(op_5068_0), 20584 }, /* ADD */ { CPUFUNC(op_5070_0), 20592 }, /* ADD */ { CPUFUNC(op_5078_0), 20600 }, /* ADD */ { CPUFUNC(op_5079_0), 20601 }, /* ADD */ { CPUFUNC(op_5080_0), 20608 }, /* ADD */ { CPUFUNC(op_5088_0), 20616 }, /* ADDA */ { CPUFUNC(op_5090_0), 20624 }, /* ADD */ { CPUFUNC(op_5098_0), 20632 }, /* ADD */ { CPUFUNC(op_50a0_0), 20640 }, /* ADD */ { CPUFUNC(op_50a8_0), 20648 }, /* ADD */ { CPUFUNC(op_50b0_0), 20656 }, /* ADD */ { CPUFUNC(op_50b8_0), 20664 }, /* ADD */ { CPUFUNC(op_50b9_0), 20665 }, /* ADD */ { CPUFUNC(op_50c0_0), 20672 }, /* Scc */ { CPUFUNC(op_50c8_0), 20680 }, /* DBcc */ { CPUFUNC(op_50d0_0), 20688 }, /* Scc */ { CPUFUNC(op_50d8_0), 20696 }, /* Scc */ { CPUFUNC(op_50e0_0), 20704 }, /* Scc */ { CPUFUNC(op_50e8_0), 20712 }, /* Scc */ { CPUFUNC(op_50f0_0), 20720 }, /* Scc */ { CPUFUNC(op_50f8_0), 20728 }, /* Scc */ { CPUFUNC(op_50f9_0), 20729 }, /* Scc */ { CPUFUNC(op_50fa_0), 20730 }, /* TRAPcc */ { CPUFUNC(op_50fb_0), 20731 }, /* TRAPcc */ { CPUFUNC(op_50fc_0), 20732 }, /* TRAPcc */ { CPUFUNC(op_5100_0), 20736 }, /* SUB */ { CPUFUNC(op_5110_0), 20752 }, /* SUB */ { CPUFUNC(op_5118_0), 20760 }, /* SUB */ { CPUFUNC(op_5120_0), 20768 }, /* SUB */ { CPUFUNC(op_5128_0), 20776 }, /* SUB */ { CPUFUNC(op_5130_0), 20784 }, /* SUB */ { CPUFUNC(op_5138_0), 20792 }, /* SUB */ { CPUFUNC(op_5139_0), 20793 }, /* SUB */ { CPUFUNC(op_5140_0), 20800 }, /* SUB */ { CPUFUNC(op_5148_0), 20808 }, /* SUBA */ { CPUFUNC(op_5150_0), 20816 }, /* SUB */ { CPUFUNC(op_5158_0), 20824 }, /* SUB */ { CPUFUNC(op_5160_0), 20832 }, /* SUB */ { CPUFUNC(op_5168_0), 20840 }, /* SUB */ { CPUFUNC(op_5170_0), 20848 }, /* SUB */ { CPUFUNC(op_5178_0), 20856 }, /* SUB */ { CPUFUNC(op_5179_0), 20857 }, /* SUB */ { CPUFUNC(op_5180_0), 20864 }, /* SUB */ { CPUFUNC(op_5188_0), 20872 }, /* SUBA */ { CPUFUNC(op_5190_0), 20880 }, /* SUB */ { CPUFUNC(op_5198_0), 20888 }, /* SUB */ { CPUFUNC(op_51a0_0), 20896 }, /* SUB */ { CPUFUNC(op_51a8_0), 20904 }, /* SUB */ { CPUFUNC(op_51b0_0), 20912 }, /* SUB */ { CPUFUNC(op_51b8_0), 20920 }, /* SUB */ { CPUFUNC(op_51b9_0), 20921 }, /* SUB */ { CPUFUNC(op_51c0_0), 20928 }, /* Scc */ { CPUFUNC(op_51c8_0), 20936 }, /* DBcc */ { CPUFUNC(op_51d0_0), 20944 }, /* Scc */ { CPUFUNC(op_51d8_0), 20952 }, /* Scc */ { CPUFUNC(op_51e0_0), 20960 }, /* Scc */ { CPUFUNC(op_51e8_0), 20968 }, /* Scc */ { CPUFUNC(op_51f0_0), 20976 }, /* Scc */ { CPUFUNC(op_51f8_0), 20984 }, /* Scc */ { CPUFUNC(op_51f9_0), 20985 }, /* Scc */ { CPUFUNC(op_51fa_0), 20986 }, /* TRAPcc */ { CPUFUNC(op_51fb_0), 20987 }, /* TRAPcc */ { CPUFUNC(op_51fc_0), 20988 }, /* TRAPcc */ { CPUFUNC(op_52c0_0), 21184 }, /* Scc */ { CPUFUNC(op_52c8_0), 21192 }, /* DBcc */ { CPUFUNC(op_52d0_0), 21200 }, /* Scc */ { CPUFUNC(op_52d8_0), 21208 }, /* Scc */ { CPUFUNC(op_52e0_0), 21216 }, /* Scc */ { CPUFUNC(op_52e8_0), 21224 }, /* Scc */ { CPUFUNC(op_52f0_0), 21232 }, /* Scc */ { CPUFUNC(op_52f8_0), 21240 }, /* Scc */ { CPUFUNC(op_52f9_0), 21241 }, /* Scc */ { CPUFUNC(op_52fa_0), 21242 }, /* TRAPcc */ { CPUFUNC(op_52fb_0), 21243 }, /* TRAPcc */ { CPUFUNC(op_52fc_0), 21244 }, /* TRAPcc */ { CPUFUNC(op_53c0_0), 21440 }, /* Scc */ { CPUFUNC(op_53c8_0), 21448 }, /* DBcc */ { CPUFUNC(op_53d0_0), 21456 }, /* Scc */ { CPUFUNC(op_53d8_0), 21464 }, /* Scc */ { CPUFUNC(op_53e0_0), 21472 }, /* Scc */ { CPUFUNC(op_53e8_0), 21480 }, /* Scc */ { CPUFUNC(op_53f0_0), 21488 }, /* Scc */ { CPUFUNC(op_53f8_0), 21496 }, /* Scc */ { CPUFUNC(op_53f9_0), 21497 }, /* Scc */ { CPUFUNC(op_53fa_0), 21498 }, /* TRAPcc */ { CPUFUNC(op_53fb_0), 21499 }, /* TRAPcc */ { CPUFUNC(op_53fc_0), 21500 }, /* TRAPcc */ { CPUFUNC(op_54c0_0), 21696 }, /* Scc */ { CPUFUNC(op_54c8_0), 21704 }, /* DBcc */ { CPUFUNC(op_54d0_0), 21712 }, /* Scc */ { CPUFUNC(op_54d8_0), 21720 }, /* Scc */ { CPUFUNC(op_54e0_0), 21728 }, /* Scc */ { CPUFUNC(op_54e8_0), 21736 }, /* Scc */ { CPUFUNC(op_54f0_0), 21744 }, /* Scc */ { CPUFUNC(op_54f8_0), 21752 }, /* Scc */ { CPUFUNC(op_54f9_0), 21753 }, /* Scc */ { CPUFUNC(op_54fa_0), 21754 }, /* TRAPcc */ { CPUFUNC(op_54fb_0), 21755 }, /* TRAPcc */ { CPUFUNC(op_54fc_0), 21756 }, /* TRAPcc */ { CPUFUNC(op_55c0_0), 21952 }, /* Scc */ { CPUFUNC(op_55c8_0), 21960 }, /* DBcc */ { CPUFUNC(op_55d0_0), 21968 }, /* Scc */ { CPUFUNC(op_55d8_0), 21976 }, /* Scc */ { CPUFUNC(op_55e0_0), 21984 }, /* Scc */ { CPUFUNC(op_55e8_0), 21992 }, /* Scc */ { CPUFUNC(op_55f0_0), 22000 }, /* Scc */ { CPUFUNC(op_55f8_0), 22008 }, /* Scc */ { CPUFUNC(op_55f9_0), 22009 }, /* Scc */ { CPUFUNC(op_55fa_0), 22010 }, /* TRAPcc */ { CPUFUNC(op_55fb_0), 22011 }, /* TRAPcc */ { CPUFUNC(op_55fc_0), 22012 }, /* TRAPcc */ { CPUFUNC(op_56c0_0), 22208 }, /* Scc */ { CPUFUNC(op_56c8_0), 22216 }, /* DBcc */ { CPUFUNC(op_56d0_0), 22224 }, /* Scc */ { CPUFUNC(op_56d8_0), 22232 }, /* Scc */ { CPUFUNC(op_56e0_0), 22240 }, /* Scc */ { CPUFUNC(op_56e8_0), 22248 }, /* Scc */ { CPUFUNC(op_56f0_0), 22256 }, /* Scc */ { CPUFUNC(op_56f8_0), 22264 }, /* Scc */ { CPUFUNC(op_56f9_0), 22265 }, /* Scc */ { CPUFUNC(op_56fa_0), 22266 }, /* TRAPcc */ { CPUFUNC(op_56fb_0), 22267 }, /* TRAPcc */ { CPUFUNC(op_56fc_0), 22268 }, /* TRAPcc */ { CPUFUNC(op_57c0_0), 22464 }, /* Scc */ { CPUFUNC(op_57c8_0), 22472 }, /* DBcc */ { CPUFUNC(op_57d0_0), 22480 }, /* Scc */ { CPUFUNC(op_57d8_0), 22488 }, /* Scc */ { CPUFUNC(op_57e0_0), 22496 }, /* Scc */ { CPUFUNC(op_57e8_0), 22504 }, /* Scc */ { CPUFUNC(op_57f0_0), 22512 }, /* Scc */ { CPUFUNC(op_57f8_0), 22520 }, /* Scc */ { CPUFUNC(op_57f9_0), 22521 }, /* Scc */ { CPUFUNC(op_57fa_0), 22522 }, /* TRAPcc */ { CPUFUNC(op_57fb_0), 22523 }, /* TRAPcc */ { CPUFUNC(op_57fc_0), 22524 }, /* TRAPcc */ { CPUFUNC(op_58c0_0), 22720 }, /* Scc */ { CPUFUNC(op_58c8_0), 22728 }, /* DBcc */ { CPUFUNC(op_58d0_0), 22736 }, /* Scc */ { CPUFUNC(op_58d8_0), 22744 }, /* Scc */ { CPUFUNC(op_58e0_0), 22752 }, /* Scc */ { CPUFUNC(op_58e8_0), 22760 }, /* Scc */ { CPUFUNC(op_58f0_0), 22768 }, /* Scc */ { CPUFUNC(op_58f8_0), 22776 }, /* Scc */ { CPUFUNC(op_58f9_0), 22777 }, /* Scc */ { CPUFUNC(op_58fa_0), 22778 }, /* TRAPcc */ { CPUFUNC(op_58fb_0), 22779 }, /* TRAPcc */ { CPUFUNC(op_58fc_0), 22780 }, /* TRAPcc */ { CPUFUNC(op_59c0_0), 22976 }, /* Scc */ { CPUFUNC(op_59c8_0), 22984 }, /* DBcc */ { CPUFUNC(op_59d0_0), 22992 }, /* Scc */ { CPUFUNC(op_59d8_0), 23000 }, /* Scc */ { CPUFUNC(op_59e0_0), 23008 }, /* Scc */ { CPUFUNC(op_59e8_0), 23016 }, /* Scc */ { CPUFUNC(op_59f0_0), 23024 }, /* Scc */ { CPUFUNC(op_59f8_0), 23032 }, /* Scc */ { CPUFUNC(op_59f9_0), 23033 }, /* Scc */ { CPUFUNC(op_59fa_0), 23034 }, /* TRAPcc */ { CPUFUNC(op_59fb_0), 23035 }, /* TRAPcc */ { CPUFUNC(op_59fc_0), 23036 }, /* TRAPcc */ { CPUFUNC(op_5ac0_0), 23232 }, /* Scc */ { CPUFUNC(op_5ac8_0), 23240 }, /* DBcc */ { CPUFUNC(op_5ad0_0), 23248 }, /* Scc */ { CPUFUNC(op_5ad8_0), 23256 }, /* Scc */ { CPUFUNC(op_5ae0_0), 23264 }, /* Scc */ { CPUFUNC(op_5ae8_0), 23272 }, /* Scc */ { CPUFUNC(op_5af0_0), 23280 }, /* Scc */ { CPUFUNC(op_5af8_0), 23288 }, /* Scc */ { CPUFUNC(op_5af9_0), 23289 }, /* Scc */ { CPUFUNC(op_5afa_0), 23290 }, /* TRAPcc */ { CPUFUNC(op_5afb_0), 23291 }, /* TRAPcc */ { CPUFUNC(op_5afc_0), 23292 }, /* TRAPcc */ { CPUFUNC(op_5bc0_0), 23488 }, /* Scc */ { CPUFUNC(op_5bc8_0), 23496 }, /* DBcc */ { CPUFUNC(op_5bd0_0), 23504 }, /* Scc */ { CPUFUNC(op_5bd8_0), 23512 }, /* Scc */ { CPUFUNC(op_5be0_0), 23520 }, /* Scc */ { CPUFUNC(op_5be8_0), 23528 }, /* Scc */ { CPUFUNC(op_5bf0_0), 23536 }, /* Scc */ { CPUFUNC(op_5bf8_0), 23544 }, /* Scc */ { CPUFUNC(op_5bf9_0), 23545 }, /* Scc */ { CPUFUNC(op_5bfa_0), 23546 }, /* TRAPcc */ { CPUFUNC(op_5bfb_0), 23547 }, /* TRAPcc */ { CPUFUNC(op_5bfc_0), 23548 }, /* TRAPcc */ { CPUFUNC(op_5cc0_0), 23744 }, /* Scc */ { CPUFUNC(op_5cc8_0), 23752 }, /* DBcc */ { CPUFUNC(op_5cd0_0), 23760 }, /* Scc */ { CPUFUNC(op_5cd8_0), 23768 }, /* Scc */ { CPUFUNC(op_5ce0_0), 23776 }, /* Scc */ { CPUFUNC(op_5ce8_0), 23784 }, /* Scc */ { CPUFUNC(op_5cf0_0), 23792 }, /* Scc */ { CPUFUNC(op_5cf8_0), 23800 }, /* Scc */ { CPUFUNC(op_5cf9_0), 23801 }, /* Scc */ { CPUFUNC(op_5cfa_0), 23802 }, /* TRAPcc */ { CPUFUNC(op_5cfb_0), 23803 }, /* TRAPcc */ { CPUFUNC(op_5cfc_0), 23804 }, /* TRAPcc */ { CPUFUNC(op_5dc0_0), 24000 }, /* Scc */ { CPUFUNC(op_5dc8_0), 24008 }, /* DBcc */ { CPUFUNC(op_5dd0_0), 24016 }, /* Scc */ { CPUFUNC(op_5dd8_0), 24024 }, /* Scc */ { CPUFUNC(op_5de0_0), 24032 }, /* Scc */ { CPUFUNC(op_5de8_0), 24040 }, /* Scc */ { CPUFUNC(op_5df0_0), 24048 }, /* Scc */ { CPUFUNC(op_5df8_0), 24056 }, /* Scc */ { CPUFUNC(op_5df9_0), 24057 }, /* Scc */ { CPUFUNC(op_5dfa_0), 24058 }, /* TRAPcc */ { CPUFUNC(op_5dfb_0), 24059 }, /* TRAPcc */ { CPUFUNC(op_5dfc_0), 24060 }, /* TRAPcc */ { CPUFUNC(op_5ec0_0), 24256 }, /* Scc */ { CPUFUNC(op_5ec8_0), 24264 }, /* DBcc */ { CPUFUNC(op_5ed0_0), 24272 }, /* Scc */ { CPUFUNC(op_5ed8_0), 24280 }, /* Scc */ { CPUFUNC(op_5ee0_0), 24288 }, /* Scc */ { CPUFUNC(op_5ee8_0), 24296 }, /* Scc */ { CPUFUNC(op_5ef0_0), 24304 }, /* Scc */ { CPUFUNC(op_5ef8_0), 24312 }, /* Scc */ { CPUFUNC(op_5ef9_0), 24313 }, /* Scc */ { CPUFUNC(op_5efa_0), 24314 }, /* TRAPcc */ { CPUFUNC(op_5efb_0), 24315 }, /* TRAPcc */ { CPUFUNC(op_5efc_0), 24316 }, /* TRAPcc */ { CPUFUNC(op_5fc0_0), 24512 }, /* Scc */ { CPUFUNC(op_5fc8_0), 24520 }, /* DBcc */ { CPUFUNC(op_5fd0_0), 24528 }, /* Scc */ { CPUFUNC(op_5fd8_0), 24536 }, /* Scc */ { CPUFUNC(op_5fe0_0), 24544 }, /* Scc */ { CPUFUNC(op_5fe8_0), 24552 }, /* Scc */ { CPUFUNC(op_5ff0_0), 24560 }, /* Scc */ { CPUFUNC(op_5ff8_0), 24568 }, /* Scc */ { CPUFUNC(op_5ff9_0), 24569 }, /* Scc */ { CPUFUNC(op_5ffa_0), 24570 }, /* TRAPcc */ { CPUFUNC(op_5ffb_0), 24571 }, /* TRAPcc */ { CPUFUNC(op_5ffc_0), 24572 }, /* TRAPcc */ { CPUFUNC(op_6000_0), 24576 }, /* Bcc */ { CPUFUNC(op_6001_0), 24577 }, /* Bcc */ { CPUFUNC(op_60ff_0), 24831 }, /* Bcc */ { CPUFUNC(op_6100_0), 24832 }, /* BSR */ { CPUFUNC(op_6101_0), 24833 }, /* BSR */ { CPUFUNC(op_61ff_0), 25087 }, /* BSR */ { CPUFUNC(op_6200_0), 25088 }, /* Bcc */ { CPUFUNC(op_6201_0), 25089 }, /* Bcc */ { CPUFUNC(op_62ff_0), 25343 }, /* Bcc */ { CPUFUNC(op_6300_0), 25344 }, /* Bcc */ { CPUFUNC(op_6301_0), 25345 }, /* Bcc */ { CPUFUNC(op_63ff_0), 25599 }, /* Bcc */ { CPUFUNC(op_6400_0), 25600 }, /* Bcc */ { CPUFUNC(op_6401_0), 25601 }, /* Bcc */ { CPUFUNC(op_64ff_0), 25855 }, /* Bcc */ { CPUFUNC(op_6500_0), 25856 }, /* Bcc */ { CPUFUNC(op_6501_0), 25857 }, /* Bcc */ { CPUFUNC(op_65ff_0), 26111 }, /* Bcc */ { CPUFUNC(op_6600_0), 26112 }, /* Bcc */ { CPUFUNC(op_6601_0), 26113 }, /* Bcc */ { CPUFUNC(op_66ff_0), 26367 }, /* Bcc */ { CPUFUNC(op_6700_0), 26368 }, /* Bcc */ { CPUFUNC(op_6701_0), 26369 }, /* Bcc */ { CPUFUNC(op_67ff_0), 26623 }, /* Bcc */ { CPUFUNC(op_6800_0), 26624 }, /* Bcc */ { CPUFUNC(op_6801_0), 26625 }, /* Bcc */ { CPUFUNC(op_68ff_0), 26879 }, /* Bcc */ { CPUFUNC(op_6900_0), 26880 }, /* Bcc */ { CPUFUNC(op_6901_0), 26881 }, /* Bcc */ { CPUFUNC(op_69ff_0), 27135 }, /* Bcc */ { CPUFUNC(op_6a00_0), 27136 }, /* Bcc */ { CPUFUNC(op_6a01_0), 27137 }, /* Bcc */ { CPUFUNC(op_6aff_0), 27391 }, /* Bcc */ { CPUFUNC(op_6b00_0), 27392 }, /* Bcc */ { CPUFUNC(op_6b01_0), 27393 }, /* Bcc */ { CPUFUNC(op_6bff_0), 27647 }, /* Bcc */ { CPUFUNC(op_6c00_0), 27648 }, /* Bcc */ { CPUFUNC(op_6c01_0), 27649 }, /* Bcc */ { CPUFUNC(op_6cff_0), 27903 }, /* Bcc */ { CPUFUNC(op_6d00_0), 27904 }, /* Bcc */ { CPUFUNC(op_6d01_0), 27905 }, /* Bcc */ { CPUFUNC(op_6dff_0), 28159 }, /* Bcc */ { CPUFUNC(op_6e00_0), 28160 }, /* Bcc */ { CPUFUNC(op_6e01_0), 28161 }, /* Bcc */ { CPUFUNC(op_6eff_0), 28415 }, /* Bcc */ { CPUFUNC(op_6f00_0), 28416 }, /* Bcc */ { CPUFUNC(op_6f01_0), 28417 }, /* Bcc */ { CPUFUNC(op_6fff_0), 28671 }, /* Bcc */ { CPUFUNC(op_7000_0), 28672 }, /* MOVE */ { CPUFUNC(op_8000_0), 32768 }, /* OR */ { CPUFUNC(op_8010_0), 32784 }, /* OR */ { CPUFUNC(op_8018_0), 32792 }, /* OR */ { CPUFUNC(op_8020_0), 32800 }, /* OR */ { CPUFUNC(op_8028_0), 32808 }, /* OR */ { CPUFUNC(op_8030_0), 32816 }, /* OR */ { CPUFUNC(op_8038_0), 32824 }, /* OR */ { CPUFUNC(op_8039_0), 32825 }, /* OR */ { CPUFUNC(op_803a_0), 32826 }, /* OR */ { CPUFUNC(op_803b_0), 32827 }, /* OR */ { CPUFUNC(op_803c_0), 32828 }, /* OR */ { CPUFUNC(op_8040_0), 32832 }, /* OR */ { CPUFUNC(op_8050_0), 32848 }, /* OR */ { CPUFUNC(op_8058_0), 32856 }, /* OR */ { CPUFUNC(op_8060_0), 32864 }, /* OR */ { CPUFUNC(op_8068_0), 32872 }, /* OR */ { CPUFUNC(op_8070_0), 32880 }, /* OR */ { CPUFUNC(op_8078_0), 32888 }, /* OR */ { CPUFUNC(op_8079_0), 32889 }, /* OR */ { CPUFUNC(op_807a_0), 32890 }, /* OR */ { CPUFUNC(op_807b_0), 32891 }, /* OR */ { CPUFUNC(op_807c_0), 32892 }, /* OR */ { CPUFUNC(op_8080_0), 32896 }, /* OR */ { CPUFUNC(op_8090_0), 32912 }, /* OR */ { CPUFUNC(op_8098_0), 32920 }, /* OR */ { CPUFUNC(op_80a0_0), 32928 }, /* OR */ { CPUFUNC(op_80a8_0), 32936 }, /* OR */ { CPUFUNC(op_80b0_0), 32944 }, /* OR */ { CPUFUNC(op_80b8_0), 32952 }, /* OR */ { CPUFUNC(op_80b9_0), 32953 }, /* OR */ { CPUFUNC(op_80ba_0), 32954 }, /* OR */ { CPUFUNC(op_80bb_0), 32955 }, /* OR */ { CPUFUNC(op_80bc_0), 32956 }, /* OR */ { CPUFUNC(op_80c0_0), 32960 }, /* DIVU */ { CPUFUNC(op_80d0_0), 32976 }, /* DIVU */ { CPUFUNC(op_80d8_0), 32984 }, /* DIVU */ { CPUFUNC(op_80e0_0), 32992 }, /* DIVU */ { CPUFUNC(op_80e8_0), 33000 }, /* DIVU */ { CPUFUNC(op_80f0_0), 33008 }, /* DIVU */ { CPUFUNC(op_80f8_0), 33016 }, /* DIVU */ { CPUFUNC(op_80f9_0), 33017 }, /* DIVU */ { CPUFUNC(op_80fa_0), 33018 }, /* DIVU */ { CPUFUNC(op_80fb_0), 33019 }, /* DIVU */ { CPUFUNC(op_80fc_0), 33020 }, /* DIVU */ { CPUFUNC(op_8100_2), 33024 }, /* SBCD */ { CPUFUNC(op_8108_2), 33032 }, /* SBCD */ { CPUFUNC(op_8110_0), 33040 }, /* OR */ { CPUFUNC(op_8118_0), 33048 }, /* OR */ { CPUFUNC(op_8120_0), 33056 }, /* OR */ { CPUFUNC(op_8128_0), 33064 }, /* OR */ { CPUFUNC(op_8130_0), 33072 }, /* OR */ { CPUFUNC(op_8138_0), 33080 }, /* OR */ { CPUFUNC(op_8139_0), 33081 }, /* OR */ { CPUFUNC(op_8140_0), 33088 }, /* PACK */ { CPUFUNC(op_8148_0), 33096 }, /* PACK */ { CPUFUNC(op_8150_0), 33104 }, /* OR */ { CPUFUNC(op_8158_0), 33112 }, /* OR */ { CPUFUNC(op_8160_0), 33120 }, /* OR */ { CPUFUNC(op_8168_0), 33128 }, /* OR */ { CPUFUNC(op_8170_0), 33136 }, /* OR */ { CPUFUNC(op_8178_0), 33144 }, /* OR */ { CPUFUNC(op_8179_0), 33145 }, /* OR */ { CPUFUNC(op_8180_0), 33152 }, /* UNPK */ { CPUFUNC(op_8188_0), 33160 }, /* UNPK */ { CPUFUNC(op_8190_0), 33168 }, /* OR */ { CPUFUNC(op_8198_0), 33176 }, /* OR */ { CPUFUNC(op_81a0_0), 33184 }, /* OR */ { CPUFUNC(op_81a8_0), 33192 }, /* OR */ { CPUFUNC(op_81b0_0), 33200 }, /* OR */ { CPUFUNC(op_81b8_0), 33208 }, /* OR */ { CPUFUNC(op_81b9_0), 33209 }, /* OR */ { CPUFUNC(op_81c0_0), 33216 }, /* DIVS */ { CPUFUNC(op_81d0_0), 33232 }, /* DIVS */ { CPUFUNC(op_81d8_0), 33240 }, /* DIVS */ { CPUFUNC(op_81e0_0), 33248 }, /* DIVS */ { CPUFUNC(op_81e8_0), 33256 }, /* DIVS */ { CPUFUNC(op_81f0_0), 33264 }, /* DIVS */ { CPUFUNC(op_81f8_0), 33272 }, /* DIVS */ { CPUFUNC(op_81f9_0), 33273 }, /* DIVS */ { CPUFUNC(op_81fa_0), 33274 }, /* DIVS */ { CPUFUNC(op_81fb_0), 33275 }, /* DIVS */ { CPUFUNC(op_81fc_0), 33276 }, /* DIVS */ { CPUFUNC(op_9000_0), 36864 }, /* SUB */ { CPUFUNC(op_9010_0), 36880 }, /* SUB */ { CPUFUNC(op_9018_0), 36888 }, /* SUB */ { CPUFUNC(op_9020_0), 36896 }, /* SUB */ { CPUFUNC(op_9028_0), 36904 }, /* SUB */ { CPUFUNC(op_9030_0), 36912 }, /* SUB */ { CPUFUNC(op_9038_0), 36920 }, /* SUB */ { CPUFUNC(op_9039_0), 36921 }, /* SUB */ { CPUFUNC(op_903a_0), 36922 }, /* SUB */ { CPUFUNC(op_903b_0), 36923 }, /* SUB */ { CPUFUNC(op_903c_0), 36924 }, /* SUB */ { CPUFUNC(op_9040_0), 36928 }, /* SUB */ { CPUFUNC(op_9048_0), 36936 }, /* SUB */ { CPUFUNC(op_9050_0), 36944 }, /* SUB */ { CPUFUNC(op_9058_0), 36952 }, /* SUB */ { CPUFUNC(op_9060_0), 36960 }, /* SUB */ { CPUFUNC(op_9068_0), 36968 }, /* SUB */ { CPUFUNC(op_9070_0), 36976 }, /* SUB */ { CPUFUNC(op_9078_0), 36984 }, /* SUB */ { CPUFUNC(op_9079_0), 36985 }, /* SUB */ { CPUFUNC(op_907a_0), 36986 }, /* SUB */ { CPUFUNC(op_907b_0), 36987 }, /* SUB */ { CPUFUNC(op_907c_0), 36988 }, /* SUB */ { CPUFUNC(op_9080_0), 36992 }, /* SUB */ { CPUFUNC(op_9088_0), 37000 }, /* SUB */ { CPUFUNC(op_9090_0), 37008 }, /* SUB */ { CPUFUNC(op_9098_0), 37016 }, /* SUB */ { CPUFUNC(op_90a0_0), 37024 }, /* SUB */ { CPUFUNC(op_90a8_0), 37032 }, /* SUB */ { CPUFUNC(op_90b0_0), 37040 }, /* SUB */ { CPUFUNC(op_90b8_0), 37048 }, /* SUB */ { CPUFUNC(op_90b9_0), 37049 }, /* SUB */ { CPUFUNC(op_90ba_0), 37050 }, /* SUB */ { CPUFUNC(op_90bb_0), 37051 }, /* SUB */ { CPUFUNC(op_90bc_0), 37052 }, /* SUB */ { CPUFUNC(op_90c0_0), 37056 }, /* SUBA */ { CPUFUNC(op_90c8_0), 37064 }, /* SUBA */ { CPUFUNC(op_90d0_0), 37072 }, /* SUBA */ { CPUFUNC(op_90d8_0), 37080 }, /* SUBA */ { CPUFUNC(op_90e0_0), 37088 }, /* SUBA */ { CPUFUNC(op_90e8_0), 37096 }, /* SUBA */ { CPUFUNC(op_90f0_0), 37104 }, /* SUBA */ { CPUFUNC(op_90f8_0), 37112 }, /* SUBA */ { CPUFUNC(op_90f9_0), 37113 }, /* SUBA */ { CPUFUNC(op_90fa_0), 37114 }, /* SUBA */ { CPUFUNC(op_90fb_0), 37115 }, /* SUBA */ { CPUFUNC(op_90fc_0), 37116 }, /* SUBA */ { CPUFUNC(op_9100_0), 37120 }, /* SUBX */ { CPUFUNC(op_9108_0), 37128 }, /* SUBX */ { CPUFUNC(op_9110_0), 37136 }, /* SUB */ { CPUFUNC(op_9118_0), 37144 }, /* SUB */ { CPUFUNC(op_9120_0), 37152 }, /* SUB */ { CPUFUNC(op_9128_0), 37160 }, /* SUB */ { CPUFUNC(op_9130_0), 37168 }, /* SUB */ { CPUFUNC(op_9138_0), 37176 }, /* SUB */ { CPUFUNC(op_9139_0), 37177 }, /* SUB */ { CPUFUNC(op_9140_0), 37184 }, /* SUBX */ { CPUFUNC(op_9148_0), 37192 }, /* SUBX */ { CPUFUNC(op_9150_0), 37200 }, /* SUB */ { CPUFUNC(op_9158_0), 37208 }, /* SUB */ { CPUFUNC(op_9160_0), 37216 }, /* SUB */ { CPUFUNC(op_9168_0), 37224 }, /* SUB */ { CPUFUNC(op_9170_0), 37232 }, /* SUB */ { CPUFUNC(op_9178_0), 37240 }, /* SUB */ { CPUFUNC(op_9179_0), 37241 }, /* SUB */ { CPUFUNC(op_9180_0), 37248 }, /* SUBX */ { CPUFUNC(op_9188_0), 37256 }, /* SUBX */ { CPUFUNC(op_9190_0), 37264 }, /* SUB */ { CPUFUNC(op_9198_0), 37272 }, /* SUB */ { CPUFUNC(op_91a0_0), 37280 }, /* SUB */ { CPUFUNC(op_91a8_0), 37288 }, /* SUB */ { CPUFUNC(op_91b0_0), 37296 }, /* SUB */ { CPUFUNC(op_91b8_0), 37304 }, /* SUB */ { CPUFUNC(op_91b9_0), 37305 }, /* SUB */ { CPUFUNC(op_91c0_0), 37312 }, /* SUBA */ { CPUFUNC(op_91c8_0), 37320 }, /* SUBA */ { CPUFUNC(op_91d0_0), 37328 }, /* SUBA */ { CPUFUNC(op_91d8_0), 37336 }, /* SUBA */ { CPUFUNC(op_91e0_0), 37344 }, /* SUBA */ { CPUFUNC(op_91e8_0), 37352 }, /* SUBA */ { CPUFUNC(op_91f0_0), 37360 }, /* SUBA */ { CPUFUNC(op_91f8_0), 37368 }, /* SUBA */ { CPUFUNC(op_91f9_0), 37369 }, /* SUBA */ { CPUFUNC(op_91fa_0), 37370 }, /* SUBA */ { CPUFUNC(op_91fb_0), 37371 }, /* SUBA */ { CPUFUNC(op_91fc_0), 37372 }, /* SUBA */ { CPUFUNC(op_b000_0), 45056 }, /* CMP */ { CPUFUNC(op_b010_0), 45072 }, /* CMP */ { CPUFUNC(op_b018_0), 45080 }, /* CMP */ { CPUFUNC(op_b020_0), 45088 }, /* CMP */ { CPUFUNC(op_b028_0), 45096 }, /* CMP */ { CPUFUNC(op_b030_0), 45104 }, /* CMP */ { CPUFUNC(op_b038_0), 45112 }, /* CMP */ { CPUFUNC(op_b039_0), 45113 }, /* CMP */ { CPUFUNC(op_b03a_0), 45114 }, /* CMP */ { CPUFUNC(op_b03b_0), 45115 }, /* CMP */ { CPUFUNC(op_b03c_0), 45116 }, /* CMP */ { CPUFUNC(op_b040_0), 45120 }, /* CMP */ { CPUFUNC(op_b048_0), 45128 }, /* CMP */ { CPUFUNC(op_b050_0), 45136 }, /* CMP */ { CPUFUNC(op_b058_0), 45144 }, /* CMP */ { CPUFUNC(op_b060_0), 45152 }, /* CMP */ { CPUFUNC(op_b068_0), 45160 }, /* CMP */ { CPUFUNC(op_b070_0), 45168 }, /* CMP */ { CPUFUNC(op_b078_0), 45176 }, /* CMP */ { CPUFUNC(op_b079_0), 45177 }, /* CMP */ { CPUFUNC(op_b07a_0), 45178 }, /* CMP */ { CPUFUNC(op_b07b_0), 45179 }, /* CMP */ { CPUFUNC(op_b07c_0), 45180 }, /* CMP */ { CPUFUNC(op_b080_0), 45184 }, /* CMP */ { CPUFUNC(op_b088_0), 45192 }, /* CMP */ { CPUFUNC(op_b090_0), 45200 }, /* CMP */ { CPUFUNC(op_b098_0), 45208 }, /* CMP */ { CPUFUNC(op_b0a0_0), 45216 }, /* CMP */ { CPUFUNC(op_b0a8_0), 45224 }, /* CMP */ { CPUFUNC(op_b0b0_0), 45232 }, /* CMP */ { CPUFUNC(op_b0b8_0), 45240 }, /* CMP */ { CPUFUNC(op_b0b9_0), 45241 }, /* CMP */ { CPUFUNC(op_b0ba_0), 45242 }, /* CMP */ { CPUFUNC(op_b0bb_0), 45243 }, /* CMP */ { CPUFUNC(op_b0bc_0), 45244 }, /* CMP */ { CPUFUNC(op_b0c0_0), 45248 }, /* CMPA */ { CPUFUNC(op_b0c8_0), 45256 }, /* CMPA */ { CPUFUNC(op_b0d0_0), 45264 }, /* CMPA */ { CPUFUNC(op_b0d8_0), 45272 }, /* CMPA */ { CPUFUNC(op_b0e0_0), 45280 }, /* CMPA */ { CPUFUNC(op_b0e8_0), 45288 }, /* CMPA */ { CPUFUNC(op_b0f0_0), 45296 }, /* CMPA */ { CPUFUNC(op_b0f8_0), 45304 }, /* CMPA */ { CPUFUNC(op_b0f9_0), 45305 }, /* CMPA */ { CPUFUNC(op_b0fa_0), 45306 }, /* CMPA */ { CPUFUNC(op_b0fb_0), 45307 }, /* CMPA */ { CPUFUNC(op_b0fc_0), 45308 }, /* CMPA */ { CPUFUNC(op_b100_0), 45312 }, /* EOR */ { CPUFUNC(op_b108_0), 45320 }, /* CMPM */ { CPUFUNC(op_b110_0), 45328 }, /* EOR */ { CPUFUNC(op_b118_0), 45336 }, /* EOR */ { CPUFUNC(op_b120_0), 45344 }, /* EOR */ { CPUFUNC(op_b128_0), 45352 }, /* EOR */ { CPUFUNC(op_b130_0), 45360 }, /* EOR */ { CPUFUNC(op_b138_0), 45368 }, /* EOR */ { CPUFUNC(op_b139_0), 45369 }, /* EOR */ { CPUFUNC(op_b140_0), 45376 }, /* EOR */ { CPUFUNC(op_b148_0), 45384 }, /* CMPM */ { CPUFUNC(op_b150_0), 45392 }, /* EOR */ { CPUFUNC(op_b158_0), 45400 }, /* EOR */ { CPUFUNC(op_b160_0), 45408 }, /* EOR */ { CPUFUNC(op_b168_0), 45416 }, /* EOR */ { CPUFUNC(op_b170_0), 45424 }, /* EOR */ { CPUFUNC(op_b178_0), 45432 }, /* EOR */ { CPUFUNC(op_b179_0), 45433 }, /* EOR */ { CPUFUNC(op_b180_0), 45440 }, /* EOR */ { CPUFUNC(op_b188_0), 45448 }, /* CMPM */ { CPUFUNC(op_b190_0), 45456 }, /* EOR */ { CPUFUNC(op_b198_0), 45464 }, /* EOR */ { CPUFUNC(op_b1a0_0), 45472 }, /* EOR */ { CPUFUNC(op_b1a8_0), 45480 }, /* EOR */ { CPUFUNC(op_b1b0_0), 45488 }, /* EOR */ { CPUFUNC(op_b1b8_0), 45496 }, /* EOR */ { CPUFUNC(op_b1b9_0), 45497 }, /* EOR */ { CPUFUNC(op_b1c0_0), 45504 }, /* CMPA */ { CPUFUNC(op_b1c8_0), 45512 }, /* CMPA */ { CPUFUNC(op_b1d0_0), 45520 }, /* CMPA */ { CPUFUNC(op_b1d8_0), 45528 }, /* CMPA */ { CPUFUNC(op_b1e0_0), 45536 }, /* CMPA */ { CPUFUNC(op_b1e8_0), 45544 }, /* CMPA */ { CPUFUNC(op_b1f0_0), 45552 }, /* CMPA */ { CPUFUNC(op_b1f8_0), 45560 }, /* CMPA */ { CPUFUNC(op_b1f9_0), 45561 }, /* CMPA */ { CPUFUNC(op_b1fa_0), 45562 }, /* CMPA */ { CPUFUNC(op_b1fb_0), 45563 }, /* CMPA */ { CPUFUNC(op_b1fc_0), 45564 }, /* CMPA */ { CPUFUNC(op_c000_0), 49152 }, /* AND */ { CPUFUNC(op_c010_0), 49168 }, /* AND */ { CPUFUNC(op_c018_0), 49176 }, /* AND */ { CPUFUNC(op_c020_0), 49184 }, /* AND */ { CPUFUNC(op_c028_0), 49192 }, /* AND */ { CPUFUNC(op_c030_0), 49200 }, /* AND */ { CPUFUNC(op_c038_0), 49208 }, /* AND */ { CPUFUNC(op_c039_0), 49209 }, /* AND */ { CPUFUNC(op_c03a_0), 49210 }, /* AND */ { CPUFUNC(op_c03b_0), 49211 }, /* AND */ { CPUFUNC(op_c03c_0), 49212 }, /* AND */ { CPUFUNC(op_c040_0), 49216 }, /* AND */ { CPUFUNC(op_c050_0), 49232 }, /* AND */ { CPUFUNC(op_c058_0), 49240 }, /* AND */ { CPUFUNC(op_c060_0), 49248 }, /* AND */ { CPUFUNC(op_c068_0), 49256 }, /* AND */ { CPUFUNC(op_c070_0), 49264 }, /* AND */ { CPUFUNC(op_c078_0), 49272 }, /* AND */ { CPUFUNC(op_c079_0), 49273 }, /* AND */ { CPUFUNC(op_c07a_0), 49274 }, /* AND */ { CPUFUNC(op_c07b_0), 49275 }, /* AND */ { CPUFUNC(op_c07c_0), 49276 }, /* AND */ { CPUFUNC(op_c080_0), 49280 }, /* AND */ { CPUFUNC(op_c090_0), 49296 }, /* AND */ { CPUFUNC(op_c098_0), 49304 }, /* AND */ { CPUFUNC(op_c0a0_0), 49312 }, /* AND */ { CPUFUNC(op_c0a8_0), 49320 }, /* AND */ { CPUFUNC(op_c0b0_0), 49328 }, /* AND */ { CPUFUNC(op_c0b8_0), 49336 }, /* AND */ { CPUFUNC(op_c0b9_0), 49337 }, /* AND */ { CPUFUNC(op_c0ba_0), 49338 }, /* AND */ { CPUFUNC(op_c0bb_0), 49339 }, /* AND */ { CPUFUNC(op_c0bc_0), 49340 }, /* AND */ { CPUFUNC(op_c0c0_0), 49344 }, /* MULU */ { CPUFUNC(op_c0d0_0), 49360 }, /* MULU */ { CPUFUNC(op_c0d8_0), 49368 }, /* MULU */ { CPUFUNC(op_c0e0_0), 49376 }, /* MULU */ { CPUFUNC(op_c0e8_0), 49384 }, /* MULU */ { CPUFUNC(op_c0f0_0), 49392 }, /* MULU */ { CPUFUNC(op_c0f8_0), 49400 }, /* MULU */ { CPUFUNC(op_c0f9_0), 49401 }, /* MULU */ { CPUFUNC(op_c0fa_0), 49402 }, /* MULU */ { CPUFUNC(op_c0fb_0), 49403 }, /* MULU */ { CPUFUNC(op_c0fc_0), 49404 }, /* MULU */ { CPUFUNC(op_c100_2), 49408 }, /* ABCD */ { CPUFUNC(op_c108_2), 49416 }, /* ABCD */ { CPUFUNC(op_c110_0), 49424 }, /* AND */ { CPUFUNC(op_c118_0), 49432 }, /* AND */ { CPUFUNC(op_c120_0), 49440 }, /* AND */ { CPUFUNC(op_c128_0), 49448 }, /* AND */ { CPUFUNC(op_c130_0), 49456 }, /* AND */ { CPUFUNC(op_c138_0), 49464 }, /* AND */ { CPUFUNC(op_c139_0), 49465 }, /* AND */ { CPUFUNC(op_c140_0), 49472 }, /* EXG */ { CPUFUNC(op_c148_0), 49480 }, /* EXG */ { CPUFUNC(op_c150_0), 49488 }, /* AND */ { CPUFUNC(op_c158_0), 49496 }, /* AND */ { CPUFUNC(op_c160_0), 49504 }, /* AND */ { CPUFUNC(op_c168_0), 49512 }, /* AND */ { CPUFUNC(op_c170_0), 49520 }, /* AND */ { CPUFUNC(op_c178_0), 49528 }, /* AND */ { CPUFUNC(op_c179_0), 49529 }, /* AND */ { CPUFUNC(op_c188_0), 49544 }, /* EXG */ { CPUFUNC(op_c190_0), 49552 }, /* AND */ { CPUFUNC(op_c198_0), 49560 }, /* AND */ { CPUFUNC(op_c1a0_0), 49568 }, /* AND */ { CPUFUNC(op_c1a8_0), 49576 }, /* AND */ { CPUFUNC(op_c1b0_0), 49584 }, /* AND */ { CPUFUNC(op_c1b8_0), 49592 }, /* AND */ { CPUFUNC(op_c1b9_0), 49593 }, /* AND */ { CPUFUNC(op_c1c0_0), 49600 }, /* MULS */ { CPUFUNC(op_c1d0_0), 49616 }, /* MULS */ { CPUFUNC(op_c1d8_0), 49624 }, /* MULS */ { CPUFUNC(op_c1e0_0), 49632 }, /* MULS */ { CPUFUNC(op_c1e8_0), 49640 }, /* MULS */ { CPUFUNC(op_c1f0_0), 49648 }, /* MULS */ { CPUFUNC(op_c1f8_0), 49656 }, /* MULS */ { CPUFUNC(op_c1f9_0), 49657 }, /* MULS */ { CPUFUNC(op_c1fa_0), 49658 }, /* MULS */ { CPUFUNC(op_c1fb_0), 49659 }, /* MULS */ { CPUFUNC(op_c1fc_0), 49660 }, /* MULS */ { CPUFUNC(op_d000_0), 53248 }, /* ADD */ { CPUFUNC(op_d010_0), 53264 }, /* ADD */ { CPUFUNC(op_d018_0), 53272 }, /* ADD */ { CPUFUNC(op_d020_0), 53280 }, /* ADD */ { CPUFUNC(op_d028_0), 53288 }, /* ADD */ { CPUFUNC(op_d030_0), 53296 }, /* ADD */ { CPUFUNC(op_d038_0), 53304 }, /* ADD */ { CPUFUNC(op_d039_0), 53305 }, /* ADD */ { CPUFUNC(op_d03a_0), 53306 }, /* ADD */ { CPUFUNC(op_d03b_0), 53307 }, /* ADD */ { CPUFUNC(op_d03c_0), 53308 }, /* ADD */ { CPUFUNC(op_d040_0), 53312 }, /* ADD */ { CPUFUNC(op_d048_0), 53320 }, /* ADD */ { CPUFUNC(op_d050_0), 53328 }, /* ADD */ { CPUFUNC(op_d058_0), 53336 }, /* ADD */ { CPUFUNC(op_d060_0), 53344 }, /* ADD */ { CPUFUNC(op_d068_0), 53352 }, /* ADD */ { CPUFUNC(op_d070_0), 53360 }, /* ADD */ { CPUFUNC(op_d078_0), 53368 }, /* ADD */ { CPUFUNC(op_d079_0), 53369 }, /* ADD */ { CPUFUNC(op_d07a_0), 53370 }, /* ADD */ { CPUFUNC(op_d07b_0), 53371 }, /* ADD */ { CPUFUNC(op_d07c_0), 53372 }, /* ADD */ { CPUFUNC(op_d080_0), 53376 }, /* ADD */ { CPUFUNC(op_d088_0), 53384 }, /* ADD */ { CPUFUNC(op_d090_0), 53392 }, /* ADD */ { CPUFUNC(op_d098_0), 53400 }, /* ADD */ { CPUFUNC(op_d0a0_0), 53408 }, /* ADD */ { CPUFUNC(op_d0a8_0), 53416 }, /* ADD */ { CPUFUNC(op_d0b0_0), 53424 }, /* ADD */ { CPUFUNC(op_d0b8_0), 53432 }, /* ADD */ { CPUFUNC(op_d0b9_0), 53433 }, /* ADD */ { CPUFUNC(op_d0ba_0), 53434 }, /* ADD */ { CPUFUNC(op_d0bb_0), 53435 }, /* ADD */ { CPUFUNC(op_d0bc_0), 53436 }, /* ADD */ { CPUFUNC(op_d0c0_0), 53440 }, /* ADDA */ { CPUFUNC(op_d0c8_0), 53448 }, /* ADDA */ { CPUFUNC(op_d0d0_0), 53456 }, /* ADDA */ { CPUFUNC(op_d0d8_0), 53464 }, /* ADDA */ { CPUFUNC(op_d0e0_0), 53472 }, /* ADDA */ { CPUFUNC(op_d0e8_0), 53480 }, /* ADDA */ { CPUFUNC(op_d0f0_0), 53488 }, /* ADDA */ { CPUFUNC(op_d0f8_0), 53496 }, /* ADDA */ { CPUFUNC(op_d0f9_0), 53497 }, /* ADDA */ { CPUFUNC(op_d0fa_0), 53498 }, /* ADDA */ { CPUFUNC(op_d0fb_0), 53499 }, /* ADDA */ { CPUFUNC(op_d0fc_0), 53500 }, /* ADDA */ { CPUFUNC(op_d100_0), 53504 }, /* ADDX */ { CPUFUNC(op_d108_0), 53512 }, /* ADDX */ { CPUFUNC(op_d110_0), 53520 }, /* ADD */ { CPUFUNC(op_d118_0), 53528 }, /* ADD */ { CPUFUNC(op_d120_0), 53536 }, /* ADD */ { CPUFUNC(op_d128_0), 53544 }, /* ADD */ { CPUFUNC(op_d130_0), 53552 }, /* ADD */ { CPUFUNC(op_d138_0), 53560 }, /* ADD */ { CPUFUNC(op_d139_0), 53561 }, /* ADD */ { CPUFUNC(op_d140_0), 53568 }, /* ADDX */ { CPUFUNC(op_d148_0), 53576 }, /* ADDX */ { CPUFUNC(op_d150_0), 53584 }, /* ADD */ { CPUFUNC(op_d158_0), 53592 }, /* ADD */ { CPUFUNC(op_d160_0), 53600 }, /* ADD */ { CPUFUNC(op_d168_0), 53608 }, /* ADD */ { CPUFUNC(op_d170_0), 53616 }, /* ADD */ { CPUFUNC(op_d178_0), 53624 }, /* ADD */ { CPUFUNC(op_d179_0), 53625 }, /* ADD */ { CPUFUNC(op_d180_0), 53632 }, /* ADDX */ { CPUFUNC(op_d188_0), 53640 }, /* ADDX */ { CPUFUNC(op_d190_0), 53648 }, /* ADD */ { CPUFUNC(op_d198_0), 53656 }, /* ADD */ { CPUFUNC(op_d1a0_0), 53664 }, /* ADD */ { CPUFUNC(op_d1a8_0), 53672 }, /* ADD */ { CPUFUNC(op_d1b0_0), 53680 }, /* ADD */ { CPUFUNC(op_d1b8_0), 53688 }, /* ADD */ { CPUFUNC(op_d1b9_0), 53689 }, /* ADD */ { CPUFUNC(op_d1c0_0), 53696 }, /* ADDA */ { CPUFUNC(op_d1c8_0), 53704 }, /* ADDA */ { CPUFUNC(op_d1d0_0), 53712 }, /* ADDA */ { CPUFUNC(op_d1d8_0), 53720 }, /* ADDA */ { CPUFUNC(op_d1e0_0), 53728 }, /* ADDA */ { CPUFUNC(op_d1e8_0), 53736 }, /* ADDA */ { CPUFUNC(op_d1f0_0), 53744 }, /* ADDA */ { CPUFUNC(op_d1f8_0), 53752 }, /* ADDA */ { CPUFUNC(op_d1f9_0), 53753 }, /* ADDA */ { CPUFUNC(op_d1fa_0), 53754 }, /* ADDA */ { CPUFUNC(op_d1fb_0), 53755 }, /* ADDA */ { CPUFUNC(op_d1fc_0), 53756 }, /* ADDA */ { CPUFUNC(op_e000_0), 57344 }, /* ASR */ { CPUFUNC(op_e008_0), 57352 }, /* LSR */ { CPUFUNC(op_e010_0), 57360 }, /* ROXR */ { CPUFUNC(op_e018_0), 57368 }, /* ROR */ { CPUFUNC(op_e020_0), 57376 }, /* ASR */ { CPUFUNC(op_e028_0), 57384 }, /* LSR */ { CPUFUNC(op_e030_0), 57392 }, /* ROXR */ { CPUFUNC(op_e038_0), 57400 }, /* ROR */ { CPUFUNC(op_e040_0), 57408 }, /* ASR */ { CPUFUNC(op_e048_0), 57416 }, /* LSR */ { CPUFUNC(op_e050_0), 57424 }, /* ROXR */ { CPUFUNC(op_e058_0), 57432 }, /* ROR */ { CPUFUNC(op_e060_0), 57440 }, /* ASR */ { CPUFUNC(op_e068_0), 57448 }, /* LSR */ { CPUFUNC(op_e070_0), 57456 }, /* ROXR */ { CPUFUNC(op_e078_0), 57464 }, /* ROR */ { CPUFUNC(op_e080_0), 57472 }, /* ASR */ { CPUFUNC(op_e088_0), 57480 }, /* LSR */ { CPUFUNC(op_e090_0), 57488 }, /* ROXR */ { CPUFUNC(op_e098_0), 57496 }, /* ROR */ { CPUFUNC(op_e0a0_0), 57504 }, /* ASR */ { CPUFUNC(op_e0a8_0), 57512 }, /* LSR */ { CPUFUNC(op_e0b0_0), 57520 }, /* ROXR */ { CPUFUNC(op_e0b8_0), 57528 }, /* ROR */ { CPUFUNC(op_e0d0_0), 57552 }, /* ASRW */ { CPUFUNC(op_e0d8_0), 57560 }, /* ASRW */ { CPUFUNC(op_e0e0_0), 57568 }, /* ASRW */ { CPUFUNC(op_e0e8_0), 57576 }, /* ASRW */ { CPUFUNC(op_e0f0_0), 57584 }, /* ASRW */ { CPUFUNC(op_e0f8_0), 57592 }, /* ASRW */ { CPUFUNC(op_e0f9_0), 57593 }, /* ASRW */ { CPUFUNC(op_e100_0), 57600 }, /* ASL */ { CPUFUNC(op_e108_0), 57608 }, /* LSL */ { CPUFUNC(op_e110_0), 57616 }, /* ROXL */ { CPUFUNC(op_e118_0), 57624 }, /* ROL */ { CPUFUNC(op_e120_0), 57632 }, /* ASL */ { CPUFUNC(op_e128_0), 57640 }, /* LSL */ { CPUFUNC(op_e130_0), 57648 }, /* ROXL */ { CPUFUNC(op_e138_0), 57656 }, /* ROL */ { CPUFUNC(op_e140_0), 57664 }, /* ASL */ { CPUFUNC(op_e148_0), 57672 }, /* LSL */ { CPUFUNC(op_e150_0), 57680 }, /* ROXL */ { CPUFUNC(op_e158_0), 57688 }, /* ROL */ { CPUFUNC(op_e160_0), 57696 }, /* ASL */ { CPUFUNC(op_e168_0), 57704 }, /* LSL */ { CPUFUNC(op_e170_0), 57712 }, /* ROXL */ { CPUFUNC(op_e178_0), 57720 }, /* ROL */ { CPUFUNC(op_e180_0), 57728 }, /* ASL */ { CPUFUNC(op_e188_0), 57736 }, /* LSL */ { CPUFUNC(op_e190_0), 57744 }, /* ROXL */ { CPUFUNC(op_e198_0), 57752 }, /* ROL */ { CPUFUNC(op_e1a0_0), 57760 }, /* ASL */ { CPUFUNC(op_e1a8_0), 57768 }, /* LSL */ { CPUFUNC(op_e1b0_0), 57776 }, /* ROXL */ { CPUFUNC(op_e1b8_0), 57784 }, /* ROL */ { CPUFUNC(op_e1d0_0), 57808 }, /* ASLW */ { CPUFUNC(op_e1d8_0), 57816 }, /* ASLW */ { CPUFUNC(op_e1e0_0), 57824 }, /* ASLW */ { CPUFUNC(op_e1e8_0), 57832 }, /* ASLW */ { CPUFUNC(op_e1f0_0), 57840 }, /* ASLW */ { CPUFUNC(op_e1f8_0), 57848 }, /* ASLW */ { CPUFUNC(op_e1f9_0), 57849 }, /* ASLW */ { CPUFUNC(op_e2d0_0), 58064 }, /* LSRW */ { CPUFUNC(op_e2d8_0), 58072 }, /* LSRW */ { CPUFUNC(op_e2e0_0), 58080 }, /* LSRW */ { CPUFUNC(op_e2e8_0), 58088 }, /* LSRW */ { CPUFUNC(op_e2f0_0), 58096 }, /* LSRW */ { CPUFUNC(op_e2f8_0), 58104 }, /* LSRW */ { CPUFUNC(op_e2f9_0), 58105 }, /* LSRW */ { CPUFUNC(op_e3d0_0), 58320 }, /* LSLW */ { CPUFUNC(op_e3d8_0), 58328 }, /* LSLW */ { CPUFUNC(op_e3e0_0), 58336 }, /* LSLW */ { CPUFUNC(op_e3e8_0), 58344 }, /* LSLW */ { CPUFUNC(op_e3f0_0), 58352 }, /* LSLW */ { CPUFUNC(op_e3f8_0), 58360 }, /* LSLW */ { CPUFUNC(op_e3f9_0), 58361 }, /* LSLW */ { CPUFUNC(op_e4d0_0), 58576 }, /* ROXRW */ { CPUFUNC(op_e4d8_0), 58584 }, /* ROXRW */ { CPUFUNC(op_e4e0_0), 58592 }, /* ROXRW */ { CPUFUNC(op_e4e8_0), 58600 }, /* ROXRW */ { CPUFUNC(op_e4f0_0), 58608 }, /* ROXRW */ { CPUFUNC(op_e4f8_0), 58616 }, /* ROXRW */ { CPUFUNC(op_e4f9_0), 58617 }, /* ROXRW */ { CPUFUNC(op_e5d0_0), 58832 }, /* ROXLW */ { CPUFUNC(op_e5d8_0), 58840 }, /* ROXLW */ { CPUFUNC(op_e5e0_0), 58848 }, /* ROXLW */ { CPUFUNC(op_e5e8_0), 58856 }, /* ROXLW */ { CPUFUNC(op_e5f0_0), 58864 }, /* ROXLW */ { CPUFUNC(op_e5f8_0), 58872 }, /* ROXLW */ { CPUFUNC(op_e5f9_0), 58873 }, /* ROXLW */ { CPUFUNC(op_e6d0_0), 59088 }, /* RORW */ { CPUFUNC(op_e6d8_0), 59096 }, /* RORW */ { CPUFUNC(op_e6e0_0), 59104 }, /* RORW */ { CPUFUNC(op_e6e8_0), 59112 }, /* RORW */ { CPUFUNC(op_e6f0_0), 59120 }, /* RORW */ { CPUFUNC(op_e6f8_0), 59128 }, /* RORW */ { CPUFUNC(op_e6f9_0), 59129 }, /* RORW */ { CPUFUNC(op_e7d0_0), 59344 }, /* ROLW */ { CPUFUNC(op_e7d8_0), 59352 }, /* ROLW */ { CPUFUNC(op_e7e0_0), 59360 }, /* ROLW */ { CPUFUNC(op_e7e8_0), 59368 }, /* ROLW */ { CPUFUNC(op_e7f0_0), 59376 }, /* ROLW */ { CPUFUNC(op_e7f8_0), 59384 }, /* ROLW */ { CPUFUNC(op_e7f9_0), 59385 }, /* ROLW */ { CPUFUNC(op_e8c0_0), 59584 }, /* BFTST */ { CPUFUNC(op_e8d0_0), 59600 }, /* BFTST */ { CPUFUNC(op_e8e8_0), 59624 }, /* BFTST */ { CPUFUNC(op_e8f0_0), 59632 }, /* BFTST */ { CPUFUNC(op_e8f8_0), 59640 }, /* BFTST */ { CPUFUNC(op_e8f9_0), 59641 }, /* BFTST */ { CPUFUNC(op_e8fa_0), 59642 }, /* BFTST */ { CPUFUNC(op_e8fb_0), 59643 }, /* BFTST */ { CPUFUNC(op_e9c0_0), 59840 }, /* BFEXTU */ { CPUFUNC(op_e9d0_0), 59856 }, /* BFEXTU */ { CPUFUNC(op_e9e8_0), 59880 }, /* BFEXTU */ { CPUFUNC(op_e9f0_0), 59888 }, /* BFEXTU */ { CPUFUNC(op_e9f8_0), 59896 }, /* BFEXTU */ { CPUFUNC(op_e9f9_0), 59897 }, /* BFEXTU */ { CPUFUNC(op_e9fa_0), 59898 }, /* BFEXTU */ { CPUFUNC(op_e9fb_0), 59899 }, /* BFEXTU */ { CPUFUNC(op_eac0_0), 60096 }, /* BFCHG */ { CPUFUNC(op_ead0_0), 60112 }, /* BFCHG */ { CPUFUNC(op_eae8_0), 60136 }, /* BFCHG */ { CPUFUNC(op_eaf0_0), 60144 }, /* BFCHG */ { CPUFUNC(op_eaf8_0), 60152 }, /* BFCHG */ { CPUFUNC(op_eaf9_0), 60153 }, /* BFCHG */ { CPUFUNC(op_ebc0_0), 60352 }, /* BFEXTS */ { CPUFUNC(op_ebd0_0), 60368 }, /* BFEXTS */ { CPUFUNC(op_ebe8_0), 60392 }, /* BFEXTS */ { CPUFUNC(op_ebf0_0), 60400 }, /* BFEXTS */ { CPUFUNC(op_ebf8_0), 60408 }, /* BFEXTS */ { CPUFUNC(op_ebf9_0), 60409 }, /* BFEXTS */ { CPUFUNC(op_ebfa_0), 60410 }, /* BFEXTS */ { CPUFUNC(op_ebfb_0), 60411 }, /* BFEXTS */ { CPUFUNC(op_ecc0_0), 60608 }, /* BFCLR */ { CPUFUNC(op_ecd0_0), 60624 }, /* BFCLR */ { CPUFUNC(op_ece8_0), 60648 }, /* BFCLR */ { CPUFUNC(op_ecf0_0), 60656 }, /* BFCLR */ { CPUFUNC(op_ecf8_0), 60664 }, /* BFCLR */ { CPUFUNC(op_ecf9_0), 60665 }, /* BFCLR */ { CPUFUNC(op_edc0_0), 60864 }, /* BFFFO */ { CPUFUNC(op_edd0_0), 60880 }, /* BFFFO */ { CPUFUNC(op_ede8_0), 60904 }, /* BFFFO */ { CPUFUNC(op_edf0_0), 60912 }, /* BFFFO */ { CPUFUNC(op_edf8_0), 60920 }, /* BFFFO */ { CPUFUNC(op_edf9_0), 60921 }, /* BFFFO */ { CPUFUNC(op_edfa_0), 60922 }, /* BFFFO */ { CPUFUNC(op_edfb_0), 60923 }, /* BFFFO */ { CPUFUNC(op_eec0_0), 61120 }, /* BFSET */ { CPUFUNC(op_eed0_0), 61136 }, /* BFSET */ { CPUFUNC(op_eee8_0), 61160 }, /* BFSET */ { CPUFUNC(op_eef0_0), 61168 }, /* BFSET */ { CPUFUNC(op_eef8_0), 61176 }, /* BFSET */ { CPUFUNC(op_eef9_0), 61177 }, /* BFSET */ { CPUFUNC(op_efc0_0), 61376 }, /* BFINS */ { CPUFUNC(op_efd0_0), 61392 }, /* BFINS */ { CPUFUNC(op_efe8_0), 61416 }, /* BFINS */ { CPUFUNC(op_eff0_0), 61424 }, /* BFINS */ { CPUFUNC(op_eff8_0), 61432 }, /* BFINS */ { CPUFUNC(op_eff9_0), 61433 }, /* BFINS */ { CPUFUNC(op_f000_0), 61440 }, /* MMUOP030 */ { CPUFUNC(op_f008_0), 61448 }, /* MMUOP030 */ { CPUFUNC(op_f010_0), 61456 }, /* MMUOP030 */ { CPUFUNC(op_f018_0), 61464 }, /* MMUOP030 */ { CPUFUNC(op_f020_0), 61472 }, /* MMUOP030 */ { CPUFUNC(op_f028_0), 61480 }, /* MMUOP030 */ { CPUFUNC(op_f030_0), 61488 }, /* MMUOP030 */ { CPUFUNC(op_f038_0), 61496 }, /* MMUOP030 */ { CPUFUNC(op_f039_0), 61497 }, /* MMUOP030 */ { CPUFUNC(op_f200_0), 61952 }, /* FPP */ { CPUFUNC(op_f208_0), 61960 }, /* FPP */ { CPUFUNC(op_f210_0), 61968 }, /* FPP */ { CPUFUNC(op_f218_0), 61976 }, /* FPP */ { CPUFUNC(op_f220_0), 61984 }, /* FPP */ { CPUFUNC(op_f228_0), 61992 }, /* FPP */ { CPUFUNC(op_f230_0), 62000 }, /* FPP */ { CPUFUNC(op_f238_0), 62008 }, /* FPP */ { CPUFUNC(op_f239_0), 62009 }, /* FPP */ { CPUFUNC(op_f23a_0), 62010 }, /* FPP */ { CPUFUNC(op_f23b_0), 62011 }, /* FPP */ { CPUFUNC(op_f23c_0), 62012 }, /* FPP */ { CPUFUNC(op_f240_0), 62016 }, /* FScc */ { CPUFUNC(op_f248_0), 62024 }, /* FDBcc */ { CPUFUNC(op_f250_0), 62032 }, /* FScc */ { CPUFUNC(op_f258_0), 62040 }, /* FScc */ { CPUFUNC(op_f260_0), 62048 }, /* FScc */ { CPUFUNC(op_f268_0), 62056 }, /* FScc */ { CPUFUNC(op_f270_0), 62064 }, /* FScc */ { CPUFUNC(op_f278_0), 62072 }, /* FScc */ { CPUFUNC(op_f279_0), 62073 }, /* FScc */ { CPUFUNC(op_f27a_0), 62074 }, /* FTRAPcc */ { CPUFUNC(op_f27b_0), 62075 }, /* FTRAPcc */ { CPUFUNC(op_f27c_0), 62076 }, /* FTRAPcc */ { CPUFUNC(op_f280_0), 62080 }, /* FBcc */ { CPUFUNC(op_f2c0_0), 62144 }, /* FBcc */ { CPUFUNC(op_f310_0), 62224 }, /* FSAVE */ { CPUFUNC(op_f320_0), 62240 }, /* FSAVE */ { CPUFUNC(op_f328_0), 62248 }, /* FSAVE */ { CPUFUNC(op_f330_0), 62256 }, /* FSAVE */ { CPUFUNC(op_f338_0), 62264 }, /* FSAVE */ { CPUFUNC(op_f339_0), 62265 }, /* FSAVE */ { CPUFUNC(op_f350_0), 62288 }, /* FRESTORE */ { CPUFUNC(op_f358_0), 62296 }, /* FRESTORE */ { CPUFUNC(op_f368_0), 62312 }, /* FRESTORE */ { CPUFUNC(op_f370_0), 62320 }, /* FRESTORE */ { CPUFUNC(op_f378_0), 62328 }, /* FRESTORE */ { CPUFUNC(op_f379_0), 62329 }, /* FRESTORE */ { CPUFUNC(op_f37a_0), 62330 }, /* FRESTORE */ { CPUFUNC(op_f37b_0), 62331 }, /* FRESTORE */ { 0, 0 }}; #endif /* CPUEMU_68000_ONLY */ #ifndef CPUEMU_68000_ONLY const struct cputbl CPUFUNC(op_smalltbl_3)[] = { { CPUFUNC(op_0000_0), 0 }, /* OR */ { CPUFUNC(op_0010_0), 16 }, /* OR */ { CPUFUNC(op_0018_0), 24 }, /* OR */ { CPUFUNC(op_0020_0), 32 }, /* OR */ { CPUFUNC(op_0028_0), 40 }, /* OR */ { CPUFUNC(op_0030_0), 48 }, /* OR */ { CPUFUNC(op_0038_0), 56 }, /* OR */ { CPUFUNC(op_0039_0), 57 }, /* OR */ { CPUFUNC(op_003c_0), 60 }, /* ORSR */ { CPUFUNC(op_0040_0), 64 }, /* OR */ { CPUFUNC(op_0050_0), 80 }, /* OR */ { CPUFUNC(op_0058_0), 88 }, /* OR */ { CPUFUNC(op_0060_0), 96 }, /* OR */ { CPUFUNC(op_0068_0), 104 }, /* OR */ { CPUFUNC(op_0070_0), 112 }, /* OR */ { CPUFUNC(op_0078_0), 120 }, /* OR */ { CPUFUNC(op_0079_0), 121 }, /* OR */ { CPUFUNC(op_007c_0), 124 }, /* ORSR */ { CPUFUNC(op_0080_0), 128 }, /* OR */ { CPUFUNC(op_0090_0), 144 }, /* OR */ { CPUFUNC(op_0098_0), 152 }, /* OR */ { CPUFUNC(op_00a0_0), 160 }, /* OR */ { CPUFUNC(op_00a8_0), 168 }, /* OR */ { CPUFUNC(op_00b0_0), 176 }, /* OR */ { CPUFUNC(op_00b8_0), 184 }, /* OR */ { CPUFUNC(op_00b9_0), 185 }, /* OR */ { CPUFUNC(op_00d0_0), 208 }, /* CHK2 */ { CPUFUNC(op_00e8_0), 232 }, /* CHK2 */ { CPUFUNC(op_00f0_0), 240 }, /* CHK2 */ { CPUFUNC(op_00f8_0), 248 }, /* CHK2 */ { CPUFUNC(op_00f9_0), 249 }, /* CHK2 */ { CPUFUNC(op_00fa_0), 250 }, /* CHK2 */ { CPUFUNC(op_00fb_0), 251 }, /* CHK2 */ { CPUFUNC(op_0100_0), 256 }, /* BTST */ { CPUFUNC(op_0108_0), 264 }, /* MVPMR */ { CPUFUNC(op_0110_0), 272 }, /* BTST */ { CPUFUNC(op_0118_0), 280 }, /* BTST */ { CPUFUNC(op_0120_0), 288 }, /* BTST */ { CPUFUNC(op_0128_0), 296 }, /* BTST */ { CPUFUNC(op_0130_0), 304 }, /* BTST */ { CPUFUNC(op_0138_0), 312 }, /* BTST */ { CPUFUNC(op_0139_0), 313 }, /* BTST */ { CPUFUNC(op_013a_0), 314 }, /* BTST */ { CPUFUNC(op_013b_0), 315 }, /* BTST */ { CPUFUNC(op_013c_0), 316 }, /* BTST */ { CPUFUNC(op_0140_0), 320 }, /* BCHG */ { CPUFUNC(op_0148_0), 328 }, /* MVPMR */ { CPUFUNC(op_0150_0), 336 }, /* BCHG */ { CPUFUNC(op_0158_0), 344 }, /* BCHG */ { CPUFUNC(op_0160_0), 352 }, /* BCHG */ { CPUFUNC(op_0168_0), 360 }, /* BCHG */ { CPUFUNC(op_0170_0), 368 }, /* BCHG */ { CPUFUNC(op_0178_0), 376 }, /* BCHG */ { CPUFUNC(op_0179_0), 377 }, /* BCHG */ { CPUFUNC(op_017a_0), 378 }, /* BCHG */ { CPUFUNC(op_017b_0), 379 }, /* BCHG */ { CPUFUNC(op_0180_0), 384 }, /* BCLR */ { CPUFUNC(op_0188_0), 392 }, /* MVPRM */ { CPUFUNC(op_0190_0), 400 }, /* BCLR */ { CPUFUNC(op_0198_0), 408 }, /* BCLR */ { CPUFUNC(op_01a0_0), 416 }, /* BCLR */ { CPUFUNC(op_01a8_0), 424 }, /* BCLR */ { CPUFUNC(op_01b0_0), 432 }, /* BCLR */ { CPUFUNC(op_01b8_0), 440 }, /* BCLR */ { CPUFUNC(op_01b9_0), 441 }, /* BCLR */ { CPUFUNC(op_01ba_0), 442 }, /* BCLR */ { CPUFUNC(op_01bb_0), 443 }, /* BCLR */ { CPUFUNC(op_01c0_0), 448 }, /* BSET */ { CPUFUNC(op_01c8_0), 456 }, /* MVPRM */ { CPUFUNC(op_01d0_0), 464 }, /* BSET */ { CPUFUNC(op_01d8_0), 472 }, /* BSET */ { CPUFUNC(op_01e0_0), 480 }, /* BSET */ { CPUFUNC(op_01e8_0), 488 }, /* BSET */ { CPUFUNC(op_01f0_0), 496 }, /* BSET */ { CPUFUNC(op_01f8_0), 504 }, /* BSET */ { CPUFUNC(op_01f9_0), 505 }, /* BSET */ { CPUFUNC(op_01fa_0), 506 }, /* BSET */ { CPUFUNC(op_01fb_0), 507 }, /* BSET */ { CPUFUNC(op_0200_0), 512 }, /* AND */ { CPUFUNC(op_0210_0), 528 }, /* AND */ { CPUFUNC(op_0218_0), 536 }, /* AND */ { CPUFUNC(op_0220_0), 544 }, /* AND */ { CPUFUNC(op_0228_0), 552 }, /* AND */ { CPUFUNC(op_0230_0), 560 }, /* AND */ { CPUFUNC(op_0238_0), 568 }, /* AND */ { CPUFUNC(op_0239_0), 569 }, /* AND */ { CPUFUNC(op_023c_0), 572 }, /* ANDSR */ { CPUFUNC(op_0240_0), 576 }, /* AND */ { CPUFUNC(op_0250_0), 592 }, /* AND */ { CPUFUNC(op_0258_0), 600 }, /* AND */ { CPUFUNC(op_0260_0), 608 }, /* AND */ { CPUFUNC(op_0268_0), 616 }, /* AND */ { CPUFUNC(op_0270_0), 624 }, /* AND */ { CPUFUNC(op_0278_0), 632 }, /* AND */ { CPUFUNC(op_0279_0), 633 }, /* AND */ { CPUFUNC(op_027c_0), 636 }, /* ANDSR */ { CPUFUNC(op_0280_0), 640 }, /* AND */ { CPUFUNC(op_0290_0), 656 }, /* AND */ { CPUFUNC(op_0298_0), 664 }, /* AND */ { CPUFUNC(op_02a0_0), 672 }, /* AND */ { CPUFUNC(op_02a8_0), 680 }, /* AND */ { CPUFUNC(op_02b0_0), 688 }, /* AND */ { CPUFUNC(op_02b8_0), 696 }, /* AND */ { CPUFUNC(op_02b9_0), 697 }, /* AND */ { CPUFUNC(op_02d0_0), 720 }, /* CHK2 */ { CPUFUNC(op_02e8_0), 744 }, /* CHK2 */ { CPUFUNC(op_02f0_0), 752 }, /* CHK2 */ { CPUFUNC(op_02f8_0), 760 }, /* CHK2 */ { CPUFUNC(op_02f9_0), 761 }, /* CHK2 */ { CPUFUNC(op_02fa_0), 762 }, /* CHK2 */ { CPUFUNC(op_02fb_0), 763 }, /* CHK2 */ { CPUFUNC(op_0400_0), 1024 }, /* SUB */ { CPUFUNC(op_0410_0), 1040 }, /* SUB */ { CPUFUNC(op_0418_0), 1048 }, /* SUB */ { CPUFUNC(op_0420_0), 1056 }, /* SUB */ { CPUFUNC(op_0428_0), 1064 }, /* SUB */ { CPUFUNC(op_0430_0), 1072 }, /* SUB */ { CPUFUNC(op_0438_0), 1080 }, /* SUB */ { CPUFUNC(op_0439_0), 1081 }, /* SUB */ { CPUFUNC(op_0440_0), 1088 }, /* SUB */ { CPUFUNC(op_0450_0), 1104 }, /* SUB */ { CPUFUNC(op_0458_0), 1112 }, /* SUB */ { CPUFUNC(op_0460_0), 1120 }, /* SUB */ { CPUFUNC(op_0468_0), 1128 }, /* SUB */ { CPUFUNC(op_0470_0), 1136 }, /* SUB */ { CPUFUNC(op_0478_0), 1144 }, /* SUB */ { CPUFUNC(op_0479_0), 1145 }, /* SUB */ { CPUFUNC(op_0480_0), 1152 }, /* SUB */ { CPUFUNC(op_0490_0), 1168 }, /* SUB */ { CPUFUNC(op_0498_0), 1176 }, /* SUB */ { CPUFUNC(op_04a0_0), 1184 }, /* SUB */ { CPUFUNC(op_04a8_0), 1192 }, /* SUB */ { CPUFUNC(op_04b0_0), 1200 }, /* SUB */ { CPUFUNC(op_04b8_0), 1208 }, /* SUB */ { CPUFUNC(op_04b9_0), 1209 }, /* SUB */ { CPUFUNC(op_04d0_0), 1232 }, /* CHK2 */ { CPUFUNC(op_04e8_0), 1256 }, /* CHK2 */ { CPUFUNC(op_04f0_0), 1264 }, /* CHK2 */ { CPUFUNC(op_04f8_0), 1272 }, /* CHK2 */ { CPUFUNC(op_04f9_0), 1273 }, /* CHK2 */ { CPUFUNC(op_04fa_0), 1274 }, /* CHK2 */ { CPUFUNC(op_04fb_0), 1275 }, /* CHK2 */ { CPUFUNC(op_0600_0), 1536 }, /* ADD */ { CPUFUNC(op_0610_0), 1552 }, /* ADD */ { CPUFUNC(op_0618_0), 1560 }, /* ADD */ { CPUFUNC(op_0620_0), 1568 }, /* ADD */ { CPUFUNC(op_0628_0), 1576 }, /* ADD */ { CPUFUNC(op_0630_0), 1584 }, /* ADD */ { CPUFUNC(op_0638_0), 1592 }, /* ADD */ { CPUFUNC(op_0639_0), 1593 }, /* ADD */ { CPUFUNC(op_0640_0), 1600 }, /* ADD */ { CPUFUNC(op_0650_0), 1616 }, /* ADD */ { CPUFUNC(op_0658_0), 1624 }, /* ADD */ { CPUFUNC(op_0660_0), 1632 }, /* ADD */ { CPUFUNC(op_0668_0), 1640 }, /* ADD */ { CPUFUNC(op_0670_0), 1648 }, /* ADD */ { CPUFUNC(op_0678_0), 1656 }, /* ADD */ { CPUFUNC(op_0679_0), 1657 }, /* ADD */ { CPUFUNC(op_0680_0), 1664 }, /* ADD */ { CPUFUNC(op_0690_0), 1680 }, /* ADD */ { CPUFUNC(op_0698_0), 1688 }, /* ADD */ { CPUFUNC(op_06a0_0), 1696 }, /* ADD */ { CPUFUNC(op_06a8_0), 1704 }, /* ADD */ { CPUFUNC(op_06b0_0), 1712 }, /* ADD */ { CPUFUNC(op_06b8_0), 1720 }, /* ADD */ { CPUFUNC(op_06b9_0), 1721 }, /* ADD */ { CPUFUNC(op_06c0_0), 1728 }, /* RTM */ { CPUFUNC(op_06c8_0), 1736 }, /* RTM */ { CPUFUNC(op_06d0_0), 1744 }, /* CALLM */ { CPUFUNC(op_06e8_0), 1768 }, /* CALLM */ { CPUFUNC(op_06f0_0), 1776 }, /* CALLM */ { CPUFUNC(op_06f8_0), 1784 }, /* CALLM */ { CPUFUNC(op_06f9_0), 1785 }, /* CALLM */ { CPUFUNC(op_06fa_0), 1786 }, /* CALLM */ { CPUFUNC(op_06fb_0), 1787 }, /* CALLM */ { CPUFUNC(op_0800_0), 2048 }, /* BTST */ { CPUFUNC(op_0810_0), 2064 }, /* BTST */ { CPUFUNC(op_0818_0), 2072 }, /* BTST */ { CPUFUNC(op_0820_0), 2080 }, /* BTST */ { CPUFUNC(op_0828_0), 2088 }, /* BTST */ { CPUFUNC(op_0830_0), 2096 }, /* BTST */ { CPUFUNC(op_0838_0), 2104 }, /* BTST */ { CPUFUNC(op_0839_0), 2105 }, /* BTST */ { CPUFUNC(op_083a_0), 2106 }, /* BTST */ { CPUFUNC(op_083b_0), 2107 }, /* BTST */ { CPUFUNC(op_083c_0), 2108 }, /* BTST */ { CPUFUNC(op_0840_0), 2112 }, /* BCHG */ { CPUFUNC(op_0850_0), 2128 }, /* BCHG */ { CPUFUNC(op_0858_0), 2136 }, /* BCHG */ { CPUFUNC(op_0860_0), 2144 }, /* BCHG */ { CPUFUNC(op_0868_0), 2152 }, /* BCHG */ { CPUFUNC(op_0870_0), 2160 }, /* BCHG */ { CPUFUNC(op_0878_0), 2168 }, /* BCHG */ { CPUFUNC(op_0879_0), 2169 }, /* BCHG */ { CPUFUNC(op_087a_0), 2170 }, /* BCHG */ { CPUFUNC(op_087b_0), 2171 }, /* BCHG */ { CPUFUNC(op_0880_0), 2176 }, /* BCLR */ { CPUFUNC(op_0890_0), 2192 }, /* BCLR */ { CPUFUNC(op_0898_0), 2200 }, /* BCLR */ { CPUFUNC(op_08a0_0), 2208 }, /* BCLR */ { CPUFUNC(op_08a8_0), 2216 }, /* BCLR */ { CPUFUNC(op_08b0_0), 2224 }, /* BCLR */ { CPUFUNC(op_08b8_0), 2232 }, /* BCLR */ { CPUFUNC(op_08b9_0), 2233 }, /* BCLR */ { CPUFUNC(op_08ba_0), 2234 }, /* BCLR */ { CPUFUNC(op_08bb_0), 2235 }, /* BCLR */ { CPUFUNC(op_08c0_0), 2240 }, /* BSET */ { CPUFUNC(op_08d0_0), 2256 }, /* BSET */ { CPUFUNC(op_08d8_0), 2264 }, /* BSET */ { CPUFUNC(op_08e0_0), 2272 }, /* BSET */ { CPUFUNC(op_08e8_0), 2280 }, /* BSET */ { CPUFUNC(op_08f0_0), 2288 }, /* BSET */ { CPUFUNC(op_08f8_0), 2296 }, /* BSET */ { CPUFUNC(op_08f9_0), 2297 }, /* BSET */ { CPUFUNC(op_08fa_0), 2298 }, /* BSET */ { CPUFUNC(op_08fb_0), 2299 }, /* BSET */ { CPUFUNC(op_0a00_0), 2560 }, /* EOR */ { CPUFUNC(op_0a10_0), 2576 }, /* EOR */ { CPUFUNC(op_0a18_0), 2584 }, /* EOR */ { CPUFUNC(op_0a20_0), 2592 }, /* EOR */ { CPUFUNC(op_0a28_0), 2600 }, /* EOR */ { CPUFUNC(op_0a30_0), 2608 }, /* EOR */ { CPUFUNC(op_0a38_0), 2616 }, /* EOR */ { CPUFUNC(op_0a39_0), 2617 }, /* EOR */ { CPUFUNC(op_0a3c_0), 2620 }, /* EORSR */ { CPUFUNC(op_0a40_0), 2624 }, /* EOR */ { CPUFUNC(op_0a50_0), 2640 }, /* EOR */ { CPUFUNC(op_0a58_0), 2648 }, /* EOR */ { CPUFUNC(op_0a60_0), 2656 }, /* EOR */ { CPUFUNC(op_0a68_0), 2664 }, /* EOR */ { CPUFUNC(op_0a70_0), 2672 }, /* EOR */ { CPUFUNC(op_0a78_0), 2680 }, /* EOR */ { CPUFUNC(op_0a79_0), 2681 }, /* EOR */ { CPUFUNC(op_0a7c_0), 2684 }, /* EORSR */ { CPUFUNC(op_0a80_0), 2688 }, /* EOR */ { CPUFUNC(op_0a90_0), 2704 }, /* EOR */ { CPUFUNC(op_0a98_0), 2712 }, /* EOR */ { CPUFUNC(op_0aa0_0), 2720 }, /* EOR */ { CPUFUNC(op_0aa8_0), 2728 }, /* EOR */ { CPUFUNC(op_0ab0_0), 2736 }, /* EOR */ { CPUFUNC(op_0ab8_0), 2744 }, /* EOR */ { CPUFUNC(op_0ab9_0), 2745 }, /* EOR */ { CPUFUNC(op_0ad0_0), 2768 }, /* CAS */ { CPUFUNC(op_0ad8_0), 2776 }, /* CAS */ { CPUFUNC(op_0ae0_0), 2784 }, /* CAS */ { CPUFUNC(op_0ae8_0), 2792 }, /* CAS */ { CPUFUNC(op_0af0_0), 2800 }, /* CAS */ { CPUFUNC(op_0af8_0), 2808 }, /* CAS */ { CPUFUNC(op_0af9_0), 2809 }, /* CAS */ { CPUFUNC(op_0c00_0), 3072 }, /* CMP */ { CPUFUNC(op_0c10_0), 3088 }, /* CMP */ { CPUFUNC(op_0c18_0), 3096 }, /* CMP */ { CPUFUNC(op_0c20_0), 3104 }, /* CMP */ { CPUFUNC(op_0c28_0), 3112 }, /* CMP */ { CPUFUNC(op_0c30_0), 3120 }, /* CMP */ { CPUFUNC(op_0c38_0), 3128 }, /* CMP */ { CPUFUNC(op_0c39_0), 3129 }, /* CMP */ { CPUFUNC(op_0c3a_0), 3130 }, /* CMP */ { CPUFUNC(op_0c3b_0), 3131 }, /* CMP */ { CPUFUNC(op_0c40_0), 3136 }, /* CMP */ { CPUFUNC(op_0c50_0), 3152 }, /* CMP */ { CPUFUNC(op_0c58_0), 3160 }, /* CMP */ { CPUFUNC(op_0c60_0), 3168 }, /* CMP */ { CPUFUNC(op_0c68_0), 3176 }, /* CMP */ { CPUFUNC(op_0c70_0), 3184 }, /* CMP */ { CPUFUNC(op_0c78_0), 3192 }, /* CMP */ { CPUFUNC(op_0c79_0), 3193 }, /* CMP */ { CPUFUNC(op_0c7a_0), 3194 }, /* CMP */ { CPUFUNC(op_0c7b_0), 3195 }, /* CMP */ { CPUFUNC(op_0c80_0), 3200 }, /* CMP */ { CPUFUNC(op_0c90_0), 3216 }, /* CMP */ { CPUFUNC(op_0c98_0), 3224 }, /* CMP */ { CPUFUNC(op_0ca0_0), 3232 }, /* CMP */ { CPUFUNC(op_0ca8_0), 3240 }, /* CMP */ { CPUFUNC(op_0cb0_0), 3248 }, /* CMP */ { CPUFUNC(op_0cb8_0), 3256 }, /* CMP */ { CPUFUNC(op_0cb9_0), 3257 }, /* CMP */ { CPUFUNC(op_0cba_0), 3258 }, /* CMP */ { CPUFUNC(op_0cbb_0), 3259 }, /* CMP */ { CPUFUNC(op_0cd0_0), 3280 }, /* CAS */ { CPUFUNC(op_0cd8_0), 3288 }, /* CAS */ { CPUFUNC(op_0ce0_0), 3296 }, /* CAS */ { CPUFUNC(op_0ce8_0), 3304 }, /* CAS */ { CPUFUNC(op_0cf0_0), 3312 }, /* CAS */ { CPUFUNC(op_0cf8_0), 3320 }, /* CAS */ { CPUFUNC(op_0cf9_0), 3321 }, /* CAS */ { CPUFUNC(op_0cfc_0), 3324 }, /* CAS2 */ { CPUFUNC(op_0e10_0), 3600 }, /* MOVES */ { CPUFUNC(op_0e18_0), 3608 }, /* MOVES */ { CPUFUNC(op_0e20_0), 3616 }, /* MOVES */ { CPUFUNC(op_0e28_0), 3624 }, /* MOVES */ { CPUFUNC(op_0e30_0), 3632 }, /* MOVES */ { CPUFUNC(op_0e38_0), 3640 }, /* MOVES */ { CPUFUNC(op_0e39_0), 3641 }, /* MOVES */ { CPUFUNC(op_0e50_0), 3664 }, /* MOVES */ { CPUFUNC(op_0e58_0), 3672 }, /* MOVES */ { CPUFUNC(op_0e60_0), 3680 }, /* MOVES */ { CPUFUNC(op_0e68_0), 3688 }, /* MOVES */ { CPUFUNC(op_0e70_0), 3696 }, /* MOVES */ { CPUFUNC(op_0e78_0), 3704 }, /* MOVES */ { CPUFUNC(op_0e79_0), 3705 }, /* MOVES */ { CPUFUNC(op_0e90_0), 3728 }, /* MOVES */ { CPUFUNC(op_0e98_0), 3736 }, /* MOVES */ { CPUFUNC(op_0ea0_0), 3744 }, /* MOVES */ { CPUFUNC(op_0ea8_0), 3752 }, /* MOVES */ { CPUFUNC(op_0eb0_0), 3760 }, /* MOVES */ { CPUFUNC(op_0eb8_0), 3768 }, /* MOVES */ { CPUFUNC(op_0eb9_0), 3769 }, /* MOVES */ { CPUFUNC(op_0ed0_0), 3792 }, /* CAS */ { CPUFUNC(op_0ed8_0), 3800 }, /* CAS */ { CPUFUNC(op_0ee0_0), 3808 }, /* CAS */ { CPUFUNC(op_0ee8_0), 3816 }, /* CAS */ { CPUFUNC(op_0ef0_0), 3824 }, /* CAS */ { CPUFUNC(op_0ef8_0), 3832 }, /* CAS */ { CPUFUNC(op_0ef9_0), 3833 }, /* CAS */ { CPUFUNC(op_0efc_0), 3836 }, /* CAS2 */ { CPUFUNC(op_1000_0), 4096 }, /* MOVE */ { CPUFUNC(op_1010_0), 4112 }, /* MOVE */ { CPUFUNC(op_1018_0), 4120 }, /* MOVE */ { CPUFUNC(op_1020_0), 4128 }, /* MOVE */ { CPUFUNC(op_1028_0), 4136 }, /* MOVE */ { CPUFUNC(op_1030_0), 4144 }, /* MOVE */ { CPUFUNC(op_1038_0), 4152 }, /* MOVE */ { CPUFUNC(op_1039_0), 4153 }, /* MOVE */ { CPUFUNC(op_103a_0), 4154 }, /* MOVE */ { CPUFUNC(op_103b_0), 4155 }, /* MOVE */ { CPUFUNC(op_103c_0), 4156 }, /* MOVE */ { CPUFUNC(op_1080_0), 4224 }, /* MOVE */ { CPUFUNC(op_1090_0), 4240 }, /* MOVE */ { CPUFUNC(op_1098_0), 4248 }, /* MOVE */ { CPUFUNC(op_10a0_0), 4256 }, /* MOVE */ { CPUFUNC(op_10a8_0), 4264 }, /* MOVE */ { CPUFUNC(op_10b0_0), 4272 }, /* MOVE */ { CPUFUNC(op_10b8_0), 4280 }, /* MOVE */ { CPUFUNC(op_10b9_0), 4281 }, /* MOVE */ { CPUFUNC(op_10ba_0), 4282 }, /* MOVE */ { CPUFUNC(op_10bb_0), 4283 }, /* MOVE */ { CPUFUNC(op_10bc_0), 4284 }, /* MOVE */ { CPUFUNC(op_10c0_0), 4288 }, /* MOVE */ { CPUFUNC(op_10d0_0), 4304 }, /* MOVE */ { CPUFUNC(op_10d8_0), 4312 }, /* MOVE */ { CPUFUNC(op_10e0_0), 4320 }, /* MOVE */ { CPUFUNC(op_10e8_0), 4328 }, /* MOVE */ { CPUFUNC(op_10f0_0), 4336 }, /* MOVE */ { CPUFUNC(op_10f8_0), 4344 }, /* MOVE */ { CPUFUNC(op_10f9_0), 4345 }, /* MOVE */ { CPUFUNC(op_10fa_0), 4346 }, /* MOVE */ { CPUFUNC(op_10fb_0), 4347 }, /* MOVE */ { CPUFUNC(op_10fc_0), 4348 }, /* MOVE */ { CPUFUNC(op_1100_0), 4352 }, /* MOVE */ { CPUFUNC(op_1110_0), 4368 }, /* MOVE */ { CPUFUNC(op_1118_0), 4376 }, /* MOVE */ { CPUFUNC(op_1120_0), 4384 }, /* MOVE */ { CPUFUNC(op_1128_0), 4392 }, /* MOVE */ { CPUFUNC(op_1130_0), 4400 }, /* MOVE */ { CPUFUNC(op_1138_0), 4408 }, /* MOVE */ { CPUFUNC(op_1139_0), 4409 }, /* MOVE */ { CPUFUNC(op_113a_0), 4410 }, /* MOVE */ { CPUFUNC(op_113b_0), 4411 }, /* MOVE */ { CPUFUNC(op_113c_0), 4412 }, /* MOVE */ { CPUFUNC(op_1140_0), 4416 }, /* MOVE */ { CPUFUNC(op_1150_0), 4432 }, /* MOVE */ { CPUFUNC(op_1158_0), 4440 }, /* MOVE */ { CPUFUNC(op_1160_0), 4448 }, /* MOVE */ { CPUFUNC(op_1168_0), 4456 }, /* MOVE */ { CPUFUNC(op_1170_0), 4464 }, /* MOVE */ { CPUFUNC(op_1178_0), 4472 }, /* MOVE */ { CPUFUNC(op_1179_0), 4473 }, /* MOVE */ { CPUFUNC(op_117a_0), 4474 }, /* MOVE */ { CPUFUNC(op_117b_0), 4475 }, /* MOVE */ { CPUFUNC(op_117c_0), 4476 }, /* MOVE */ { CPUFUNC(op_1180_0), 4480 }, /* MOVE */ { CPUFUNC(op_1190_0), 4496 }, /* MOVE */ { CPUFUNC(op_1198_0), 4504 }, /* MOVE */ { CPUFUNC(op_11a0_0), 4512 }, /* MOVE */ { CPUFUNC(op_11a8_0), 4520 }, /* MOVE */ { CPUFUNC(op_11b0_0), 4528 }, /* MOVE */ { CPUFUNC(op_11b8_0), 4536 }, /* MOVE */ { CPUFUNC(op_11b9_0), 4537 }, /* MOVE */ { CPUFUNC(op_11ba_0), 4538 }, /* MOVE */ { CPUFUNC(op_11bb_0), 4539 }, /* MOVE */ { CPUFUNC(op_11bc_0), 4540 }, /* MOVE */ { CPUFUNC(op_11c0_0), 4544 }, /* MOVE */ { CPUFUNC(op_11d0_0), 4560 }, /* MOVE */ { CPUFUNC(op_11d8_0), 4568 }, /* MOVE */ { CPUFUNC(op_11e0_0), 4576 }, /* MOVE */ { CPUFUNC(op_11e8_0), 4584 }, /* MOVE */ { CPUFUNC(op_11f0_0), 4592 }, /* MOVE */ { CPUFUNC(op_11f8_0), 4600 }, /* MOVE */ { CPUFUNC(op_11f9_0), 4601 }, /* MOVE */ { CPUFUNC(op_11fa_0), 4602 }, /* MOVE */ { CPUFUNC(op_11fb_0), 4603 }, /* MOVE */ { CPUFUNC(op_11fc_0), 4604 }, /* MOVE */ { CPUFUNC(op_13c0_0), 5056 }, /* MOVE */ { CPUFUNC(op_13d0_0), 5072 }, /* MOVE */ { CPUFUNC(op_13d8_0), 5080 }, /* MOVE */ { CPUFUNC(op_13e0_0), 5088 }, /* MOVE */ { CPUFUNC(op_13e8_0), 5096 }, /* MOVE */ { CPUFUNC(op_13f0_0), 5104 }, /* MOVE */ { CPUFUNC(op_13f8_0), 5112 }, /* MOVE */ { CPUFUNC(op_13f9_0), 5113 }, /* MOVE */ { CPUFUNC(op_13fa_0), 5114 }, /* MOVE */ { CPUFUNC(op_13fb_0), 5115 }, /* MOVE */ { CPUFUNC(op_13fc_0), 5116 }, /* MOVE */ { CPUFUNC(op_2000_0), 8192 }, /* MOVE */ { CPUFUNC(op_2008_0), 8200 }, /* MOVE */ { CPUFUNC(op_2010_0), 8208 }, /* MOVE */ { CPUFUNC(op_2018_0), 8216 }, /* MOVE */ { CPUFUNC(op_2020_0), 8224 }, /* MOVE */ { CPUFUNC(op_2028_0), 8232 }, /* MOVE */ { CPUFUNC(op_2030_0), 8240 }, /* MOVE */ { CPUFUNC(op_2038_0), 8248 }, /* MOVE */ { CPUFUNC(op_2039_0), 8249 }, /* MOVE */ { CPUFUNC(op_203a_0), 8250 }, /* MOVE */ { CPUFUNC(op_203b_0), 8251 }, /* MOVE */ { CPUFUNC(op_203c_0), 8252 }, /* MOVE */ { CPUFUNC(op_2040_0), 8256 }, /* MOVEA */ { CPUFUNC(op_2048_0), 8264 }, /* MOVEA */ { CPUFUNC(op_2050_0), 8272 }, /* MOVEA */ { CPUFUNC(op_2058_0), 8280 }, /* MOVEA */ { CPUFUNC(op_2060_0), 8288 }, /* MOVEA */ { CPUFUNC(op_2068_0), 8296 }, /* MOVEA */ { CPUFUNC(op_2070_0), 8304 }, /* MOVEA */ { CPUFUNC(op_2078_0), 8312 }, /* MOVEA */ { CPUFUNC(op_2079_0), 8313 }, /* MOVEA */ { CPUFUNC(op_207a_0), 8314 }, /* MOVEA */ { CPUFUNC(op_207b_0), 8315 }, /* MOVEA */ { CPUFUNC(op_207c_0), 8316 }, /* MOVEA */ { CPUFUNC(op_2080_0), 8320 }, /* MOVE */ { CPUFUNC(op_2088_0), 8328 }, /* MOVE */ { CPUFUNC(op_2090_0), 8336 }, /* MOVE */ { CPUFUNC(op_2098_0), 8344 }, /* MOVE */ { CPUFUNC(op_20a0_0), 8352 }, /* MOVE */ { CPUFUNC(op_20a8_0), 8360 }, /* MOVE */ { CPUFUNC(op_20b0_0), 8368 }, /* MOVE */ { CPUFUNC(op_20b8_0), 8376 }, /* MOVE */ { CPUFUNC(op_20b9_0), 8377 }, /* MOVE */ { CPUFUNC(op_20ba_0), 8378 }, /* MOVE */ { CPUFUNC(op_20bb_0), 8379 }, /* MOVE */ { CPUFUNC(op_20bc_0), 8380 }, /* MOVE */ { CPUFUNC(op_20c0_0), 8384 }, /* MOVE */ { CPUFUNC(op_20c8_0), 8392 }, /* MOVE */ { CPUFUNC(op_20d0_0), 8400 }, /* MOVE */ { CPUFUNC(op_20d8_0), 8408 }, /* MOVE */ { CPUFUNC(op_20e0_0), 8416 }, /* MOVE */ { CPUFUNC(op_20e8_0), 8424 }, /* MOVE */ { CPUFUNC(op_20f0_0), 8432 }, /* MOVE */ { CPUFUNC(op_20f8_0), 8440 }, /* MOVE */ { CPUFUNC(op_20f9_0), 8441 }, /* MOVE */ { CPUFUNC(op_20fa_0), 8442 }, /* MOVE */ { CPUFUNC(op_20fb_0), 8443 }, /* MOVE */ { CPUFUNC(op_20fc_0), 8444 }, /* MOVE */ { CPUFUNC(op_2100_0), 8448 }, /* MOVE */ { CPUFUNC(op_2108_0), 8456 }, /* MOVE */ { CPUFUNC(op_2110_0), 8464 }, /* MOVE */ { CPUFUNC(op_2118_0), 8472 }, /* MOVE */ { CPUFUNC(op_2120_0), 8480 }, /* MOVE */ { CPUFUNC(op_2128_0), 8488 }, /* MOVE */ { CPUFUNC(op_2130_0), 8496 }, /* MOVE */ { CPUFUNC(op_2138_0), 8504 }, /* MOVE */ { CPUFUNC(op_2139_0), 8505 }, /* MOVE */ { CPUFUNC(op_213a_0), 8506 }, /* MOVE */ { CPUFUNC(op_213b_0), 8507 }, /* MOVE */ { CPUFUNC(op_213c_0), 8508 }, /* MOVE */ { CPUFUNC(op_2140_0), 8512 }, /* MOVE */ { CPUFUNC(op_2148_0), 8520 }, /* MOVE */ { CPUFUNC(op_2150_0), 8528 }, /* MOVE */ { CPUFUNC(op_2158_0), 8536 }, /* MOVE */ { CPUFUNC(op_2160_0), 8544 }, /* MOVE */ { CPUFUNC(op_2168_0), 8552 }, /* MOVE */ { CPUFUNC(op_2170_0), 8560 }, /* MOVE */ { CPUFUNC(op_2178_0), 8568 }, /* MOVE */ { CPUFUNC(op_2179_0), 8569 }, /* MOVE */ { CPUFUNC(op_217a_0), 8570 }, /* MOVE */ { CPUFUNC(op_217b_0), 8571 }, /* MOVE */ { CPUFUNC(op_217c_0), 8572 }, /* MOVE */ { CPUFUNC(op_2180_0), 8576 }, /* MOVE */ { CPUFUNC(op_2188_0), 8584 }, /* MOVE */ { CPUFUNC(op_2190_0), 8592 }, /* MOVE */ { CPUFUNC(op_2198_0), 8600 }, /* MOVE */ { CPUFUNC(op_21a0_0), 8608 }, /* MOVE */ { CPUFUNC(op_21a8_0), 8616 }, /* MOVE */ { CPUFUNC(op_21b0_0), 8624 }, /* MOVE */ { CPUFUNC(op_21b8_0), 8632 }, /* MOVE */ { CPUFUNC(op_21b9_0), 8633 }, /* MOVE */ { CPUFUNC(op_21ba_0), 8634 }, /* MOVE */ { CPUFUNC(op_21bb_0), 8635 }, /* MOVE */ { CPUFUNC(op_21bc_0), 8636 }, /* MOVE */ { CPUFUNC(op_21c0_0), 8640 }, /* MOVE */ { CPUFUNC(op_21c8_0), 8648 }, /* MOVE */ { CPUFUNC(op_21d0_0), 8656 }, /* MOVE */ { CPUFUNC(op_21d8_0), 8664 }, /* MOVE */ { CPUFUNC(op_21e0_0), 8672 }, /* MOVE */ { CPUFUNC(op_21e8_0), 8680 }, /* MOVE */ { CPUFUNC(op_21f0_0), 8688 }, /* MOVE */ { CPUFUNC(op_21f8_0), 8696 }, /* MOVE */ { CPUFUNC(op_21f9_0), 8697 }, /* MOVE */ { CPUFUNC(op_21fa_0), 8698 }, /* MOVE */ { CPUFUNC(op_21fb_0), 8699 }, /* MOVE */ { CPUFUNC(op_21fc_0), 8700 }, /* MOVE */ { CPUFUNC(op_23c0_0), 9152 }, /* MOVE */ { CPUFUNC(op_23c8_0), 9160 }, /* MOVE */ { CPUFUNC(op_23d0_0), 9168 }, /* MOVE */ { CPUFUNC(op_23d8_0), 9176 }, /* MOVE */ { CPUFUNC(op_23e0_0), 9184 }, /* MOVE */ { CPUFUNC(op_23e8_0), 9192 }, /* MOVE */ { CPUFUNC(op_23f0_0), 9200 }, /* MOVE */ { CPUFUNC(op_23f8_0), 9208 }, /* MOVE */ { CPUFUNC(op_23f9_0), 9209 }, /* MOVE */ { CPUFUNC(op_23fa_0), 9210 }, /* MOVE */ { CPUFUNC(op_23fb_0), 9211 }, /* MOVE */ { CPUFUNC(op_23fc_0), 9212 }, /* MOVE */ { CPUFUNC(op_3000_0), 12288 }, /* MOVE */ { CPUFUNC(op_3008_0), 12296 }, /* MOVE */ { CPUFUNC(op_3010_0), 12304 }, /* MOVE */ { CPUFUNC(op_3018_0), 12312 }, /* MOVE */ { CPUFUNC(op_3020_0), 12320 }, /* MOVE */ { CPUFUNC(op_3028_0), 12328 }, /* MOVE */ { CPUFUNC(op_3030_0), 12336 }, /* MOVE */ { CPUFUNC(op_3038_0), 12344 }, /* MOVE */ { CPUFUNC(op_3039_0), 12345 }, /* MOVE */ { CPUFUNC(op_303a_0), 12346 }, /* MOVE */ { CPUFUNC(op_303b_0), 12347 }, /* MOVE */ { CPUFUNC(op_303c_0), 12348 }, /* MOVE */ { CPUFUNC(op_3040_0), 12352 }, /* MOVEA */ { CPUFUNC(op_3048_0), 12360 }, /* MOVEA */ { CPUFUNC(op_3050_0), 12368 }, /* MOVEA */ { CPUFUNC(op_3058_0), 12376 }, /* MOVEA */ { CPUFUNC(op_3060_0), 12384 }, /* MOVEA */ { CPUFUNC(op_3068_0), 12392 }, /* MOVEA */ { CPUFUNC(op_3070_0), 12400 }, /* MOVEA */ { CPUFUNC(op_3078_0), 12408 }, /* MOVEA */ { CPUFUNC(op_3079_0), 12409 }, /* MOVEA */ { CPUFUNC(op_307a_0), 12410 }, /* MOVEA */ { CPUFUNC(op_307b_0), 12411 }, /* MOVEA */ { CPUFUNC(op_307c_0), 12412 }, /* MOVEA */ { CPUFUNC(op_3080_0), 12416 }, /* MOVE */ { CPUFUNC(op_3088_0), 12424 }, /* MOVE */ { CPUFUNC(op_3090_0), 12432 }, /* MOVE */ { CPUFUNC(op_3098_0), 12440 }, /* MOVE */ { CPUFUNC(op_30a0_0), 12448 }, /* MOVE */ { CPUFUNC(op_30a8_0), 12456 }, /* MOVE */ { CPUFUNC(op_30b0_0), 12464 }, /* MOVE */ { CPUFUNC(op_30b8_0), 12472 }, /* MOVE */ { CPUFUNC(op_30b9_0), 12473 }, /* MOVE */ { CPUFUNC(op_30ba_0), 12474 }, /* MOVE */ { CPUFUNC(op_30bb_0), 12475 }, /* MOVE */ { CPUFUNC(op_30bc_0), 12476 }, /* MOVE */ { CPUFUNC(op_30c0_0), 12480 }, /* MOVE */ { CPUFUNC(op_30c8_0), 12488 }, /* MOVE */ { CPUFUNC(op_30d0_0), 12496 }, /* MOVE */ { CPUFUNC(op_30d8_0), 12504 }, /* MOVE */ { CPUFUNC(op_30e0_0), 12512 }, /* MOVE */ { CPUFUNC(op_30e8_0), 12520 }, /* MOVE */ { CPUFUNC(op_30f0_0), 12528 }, /* MOVE */ { CPUFUNC(op_30f8_0), 12536 }, /* MOVE */ { CPUFUNC(op_30f9_0), 12537 }, /* MOVE */ { CPUFUNC(op_30fa_0), 12538 }, /* MOVE */ { CPUFUNC(op_30fb_0), 12539 }, /* MOVE */ { CPUFUNC(op_30fc_0), 12540 }, /* MOVE */ { CPUFUNC(op_3100_0), 12544 }, /* MOVE */ { CPUFUNC(op_3108_0), 12552 }, /* MOVE */ { CPUFUNC(op_3110_0), 12560 }, /* MOVE */ { CPUFUNC(op_3118_0), 12568 }, /* MOVE */ { CPUFUNC(op_3120_0), 12576 }, /* MOVE */ { CPUFUNC(op_3128_0), 12584 }, /* MOVE */ { CPUFUNC(op_3130_0), 12592 }, /* MOVE */ { CPUFUNC(op_3138_0), 12600 }, /* MOVE */ { CPUFUNC(op_3139_0), 12601 }, /* MOVE */ { CPUFUNC(op_313a_0), 12602 }, /* MOVE */ { CPUFUNC(op_313b_0), 12603 }, /* MOVE */ { CPUFUNC(op_313c_0), 12604 }, /* MOVE */ { CPUFUNC(op_3140_0), 12608 }, /* MOVE */ { CPUFUNC(op_3148_0), 12616 }, /* MOVE */ { CPUFUNC(op_3150_0), 12624 }, /* MOVE */ { CPUFUNC(op_3158_0), 12632 }, /* MOVE */ { CPUFUNC(op_3160_0), 12640 }, /* MOVE */ { CPUFUNC(op_3168_0), 12648 }, /* MOVE */ { CPUFUNC(op_3170_0), 12656 }, /* MOVE */ { CPUFUNC(op_3178_0), 12664 }, /* MOVE */ { CPUFUNC(op_3179_0), 12665 }, /* MOVE */ { CPUFUNC(op_317a_0), 12666 }, /* MOVE */ { CPUFUNC(op_317b_0), 12667 }, /* MOVE */ { CPUFUNC(op_317c_0), 12668 }, /* MOVE */ { CPUFUNC(op_3180_0), 12672 }, /* MOVE */ { CPUFUNC(op_3188_0), 12680 }, /* MOVE */ { CPUFUNC(op_3190_0), 12688 }, /* MOVE */ { CPUFUNC(op_3198_0), 12696 }, /* MOVE */ { CPUFUNC(op_31a0_0), 12704 }, /* MOVE */ { CPUFUNC(op_31a8_0), 12712 }, /* MOVE */ { CPUFUNC(op_31b0_0), 12720 }, /* MOVE */ { CPUFUNC(op_31b8_0), 12728 }, /* MOVE */ { CPUFUNC(op_31b9_0), 12729 }, /* MOVE */ { CPUFUNC(op_31ba_0), 12730 }, /* MOVE */ { CPUFUNC(op_31bb_0), 12731 }, /* MOVE */ { CPUFUNC(op_31bc_0), 12732 }, /* MOVE */ { CPUFUNC(op_31c0_0), 12736 }, /* MOVE */ { CPUFUNC(op_31c8_0), 12744 }, /* MOVE */ { CPUFUNC(op_31d0_0), 12752 }, /* MOVE */ { CPUFUNC(op_31d8_0), 12760 }, /* MOVE */ { CPUFUNC(op_31e0_0), 12768 }, /* MOVE */ { CPUFUNC(op_31e8_0), 12776 }, /* MOVE */ { CPUFUNC(op_31f0_0), 12784 }, /* MOVE */ { CPUFUNC(op_31f8_0), 12792 }, /* MOVE */ { CPUFUNC(op_31f9_0), 12793 }, /* MOVE */ { CPUFUNC(op_31fa_0), 12794 }, /* MOVE */ { CPUFUNC(op_31fb_0), 12795 }, /* MOVE */ { CPUFUNC(op_31fc_0), 12796 }, /* MOVE */ { CPUFUNC(op_33c0_0), 13248 }, /* MOVE */ { CPUFUNC(op_33c8_0), 13256 }, /* MOVE */ { CPUFUNC(op_33d0_0), 13264 }, /* MOVE */ { CPUFUNC(op_33d8_0), 13272 }, /* MOVE */ { CPUFUNC(op_33e0_0), 13280 }, /* MOVE */ { CPUFUNC(op_33e8_0), 13288 }, /* MOVE */ { CPUFUNC(op_33f0_0), 13296 }, /* MOVE */ { CPUFUNC(op_33f8_0), 13304 }, /* MOVE */ { CPUFUNC(op_33f9_0), 13305 }, /* MOVE */ { CPUFUNC(op_33fa_0), 13306 }, /* MOVE */ { CPUFUNC(op_33fb_0), 13307 }, /* MOVE */ { CPUFUNC(op_33fc_0), 13308 }, /* MOVE */ { CPUFUNC(op_4000_0), 16384 }, /* NEGX */ { CPUFUNC(op_4010_0), 16400 }, /* NEGX */ { CPUFUNC(op_4018_0), 16408 }, /* NEGX */ { CPUFUNC(op_4020_0), 16416 }, /* NEGX */ { CPUFUNC(op_4028_0), 16424 }, /* NEGX */ { CPUFUNC(op_4030_0), 16432 }, /* NEGX */ { CPUFUNC(op_4038_0), 16440 }, /* NEGX */ { CPUFUNC(op_4039_0), 16441 }, /* NEGX */ { CPUFUNC(op_4040_0), 16448 }, /* NEGX */ { CPUFUNC(op_4050_0), 16464 }, /* NEGX */ { CPUFUNC(op_4058_0), 16472 }, /* NEGX */ { CPUFUNC(op_4060_0), 16480 }, /* NEGX */ { CPUFUNC(op_4068_0), 16488 }, /* NEGX */ { CPUFUNC(op_4070_0), 16496 }, /* NEGX */ { CPUFUNC(op_4078_0), 16504 }, /* NEGX */ { CPUFUNC(op_4079_0), 16505 }, /* NEGX */ { CPUFUNC(op_4080_0), 16512 }, /* NEGX */ { CPUFUNC(op_4090_0), 16528 }, /* NEGX */ { CPUFUNC(op_4098_0), 16536 }, /* NEGX */ { CPUFUNC(op_40a0_0), 16544 }, /* NEGX */ { CPUFUNC(op_40a8_0), 16552 }, /* NEGX */ { CPUFUNC(op_40b0_0), 16560 }, /* NEGX */ { CPUFUNC(op_40b8_0), 16568 }, /* NEGX */ { CPUFUNC(op_40b9_0), 16569 }, /* NEGX */ { CPUFUNC(op_40c0_0), 16576 }, /* MVSR2 */ { CPUFUNC(op_40d0_0), 16592 }, /* MVSR2 */ { CPUFUNC(op_40d8_0), 16600 }, /* MVSR2 */ { CPUFUNC(op_40e0_0), 16608 }, /* MVSR2 */ { CPUFUNC(op_40e8_0), 16616 }, /* MVSR2 */ { CPUFUNC(op_40f0_0), 16624 }, /* MVSR2 */ { CPUFUNC(op_40f8_0), 16632 }, /* MVSR2 */ { CPUFUNC(op_40f9_0), 16633 }, /* MVSR2 */ { CPUFUNC(op_4100_0), 16640 }, /* CHK */ { CPUFUNC(op_4110_0), 16656 }, /* CHK */ { CPUFUNC(op_4118_0), 16664 }, /* CHK */ { CPUFUNC(op_4120_0), 16672 }, /* CHK */ { CPUFUNC(op_4128_0), 16680 }, /* CHK */ { CPUFUNC(op_4130_0), 16688 }, /* CHK */ { CPUFUNC(op_4138_0), 16696 }, /* CHK */ { CPUFUNC(op_4139_0), 16697 }, /* CHK */ { CPUFUNC(op_413a_0), 16698 }, /* CHK */ { CPUFUNC(op_413b_0), 16699 }, /* CHK */ { CPUFUNC(op_413c_0), 16700 }, /* CHK */ { CPUFUNC(op_4180_0), 16768 }, /* CHK */ { CPUFUNC(op_4190_0), 16784 }, /* CHK */ { CPUFUNC(op_4198_0), 16792 }, /* CHK */ { CPUFUNC(op_41a0_0), 16800 }, /* CHK */ { CPUFUNC(op_41a8_0), 16808 }, /* CHK */ { CPUFUNC(op_41b0_0), 16816 }, /* CHK */ { CPUFUNC(op_41b8_0), 16824 }, /* CHK */ { CPUFUNC(op_41b9_0), 16825 }, /* CHK */ { CPUFUNC(op_41ba_0), 16826 }, /* CHK */ { CPUFUNC(op_41bb_0), 16827 }, /* CHK */ { CPUFUNC(op_41bc_0), 16828 }, /* CHK */ { CPUFUNC(op_41d0_0), 16848 }, /* LEA */ { CPUFUNC(op_41e8_0), 16872 }, /* LEA */ { CPUFUNC(op_41f0_0), 16880 }, /* LEA */ { CPUFUNC(op_41f8_0), 16888 }, /* LEA */ { CPUFUNC(op_41f9_0), 16889 }, /* LEA */ { CPUFUNC(op_41fa_0), 16890 }, /* LEA */ { CPUFUNC(op_41fb_0), 16891 }, /* LEA */ { CPUFUNC(op_4200_0), 16896 }, /* CLR */ { CPUFUNC(op_4210_0), 16912 }, /* CLR */ { CPUFUNC(op_4218_0), 16920 }, /* CLR */ { CPUFUNC(op_4220_0), 16928 }, /* CLR */ { CPUFUNC(op_4228_0), 16936 }, /* CLR */ { CPUFUNC(op_4230_0), 16944 }, /* CLR */ { CPUFUNC(op_4238_0), 16952 }, /* CLR */ { CPUFUNC(op_4239_0), 16953 }, /* CLR */ { CPUFUNC(op_4240_0), 16960 }, /* CLR */ { CPUFUNC(op_4250_0), 16976 }, /* CLR */ { CPUFUNC(op_4258_0), 16984 }, /* CLR */ { CPUFUNC(op_4260_0), 16992 }, /* CLR */ { CPUFUNC(op_4268_0), 17000 }, /* CLR */ { CPUFUNC(op_4270_0), 17008 }, /* CLR */ { CPUFUNC(op_4278_0), 17016 }, /* CLR */ { CPUFUNC(op_4279_0), 17017 }, /* CLR */ { CPUFUNC(op_4280_0), 17024 }, /* CLR */ { CPUFUNC(op_4290_0), 17040 }, /* CLR */ { CPUFUNC(op_4298_0), 17048 }, /* CLR */ { CPUFUNC(op_42a0_0), 17056 }, /* CLR */ { CPUFUNC(op_42a8_0), 17064 }, /* CLR */ { CPUFUNC(op_42b0_0), 17072 }, /* CLR */ { CPUFUNC(op_42b8_0), 17080 }, /* CLR */ { CPUFUNC(op_42b9_0), 17081 }, /* CLR */ { CPUFUNC(op_42c0_0), 17088 }, /* MVSR2 */ { CPUFUNC(op_42d0_0), 17104 }, /* MVSR2 */ { CPUFUNC(op_42d8_0), 17112 }, /* MVSR2 */ { CPUFUNC(op_42e0_0), 17120 }, /* MVSR2 */ { CPUFUNC(op_42e8_0), 17128 }, /* MVSR2 */ { CPUFUNC(op_42f0_0), 17136 }, /* MVSR2 */ { CPUFUNC(op_42f8_0), 17144 }, /* MVSR2 */ { CPUFUNC(op_42f9_0), 17145 }, /* MVSR2 */ { CPUFUNC(op_4400_0), 17408 }, /* NEG */ { CPUFUNC(op_4410_0), 17424 }, /* NEG */ { CPUFUNC(op_4418_0), 17432 }, /* NEG */ { CPUFUNC(op_4420_0), 17440 }, /* NEG */ { CPUFUNC(op_4428_0), 17448 }, /* NEG */ { CPUFUNC(op_4430_0), 17456 }, /* NEG */ { CPUFUNC(op_4438_0), 17464 }, /* NEG */ { CPUFUNC(op_4439_0), 17465 }, /* NEG */ { CPUFUNC(op_4440_0), 17472 }, /* NEG */ { CPUFUNC(op_4450_0), 17488 }, /* NEG */ { CPUFUNC(op_4458_0), 17496 }, /* NEG */ { CPUFUNC(op_4460_0), 17504 }, /* NEG */ { CPUFUNC(op_4468_0), 17512 }, /* NEG */ { CPUFUNC(op_4470_0), 17520 }, /* NEG */ { CPUFUNC(op_4478_0), 17528 }, /* NEG */ { CPUFUNC(op_4479_0), 17529 }, /* NEG */ { CPUFUNC(op_4480_0), 17536 }, /* NEG */ { CPUFUNC(op_4490_0), 17552 }, /* NEG */ { CPUFUNC(op_4498_0), 17560 }, /* NEG */ { CPUFUNC(op_44a0_0), 17568 }, /* NEG */ { CPUFUNC(op_44a8_0), 17576 }, /* NEG */ { CPUFUNC(op_44b0_0), 17584 }, /* NEG */ { CPUFUNC(op_44b8_0), 17592 }, /* NEG */ { CPUFUNC(op_44b9_0), 17593 }, /* NEG */ { CPUFUNC(op_44c0_0), 17600 }, /* MV2SR */ { CPUFUNC(op_44d0_0), 17616 }, /* MV2SR */ { CPUFUNC(op_44d8_0), 17624 }, /* MV2SR */ { CPUFUNC(op_44e0_0), 17632 }, /* MV2SR */ { CPUFUNC(op_44e8_0), 17640 }, /* MV2SR */ { CPUFUNC(op_44f0_0), 17648 }, /* MV2SR */ { CPUFUNC(op_44f8_0), 17656 }, /* MV2SR */ { CPUFUNC(op_44f9_0), 17657 }, /* MV2SR */ { CPUFUNC(op_44fa_0), 17658 }, /* MV2SR */ { CPUFUNC(op_44fb_0), 17659 }, /* MV2SR */ { CPUFUNC(op_44fc_0), 17660 }, /* MV2SR */ { CPUFUNC(op_4600_0), 17920 }, /* NOT */ { CPUFUNC(op_4610_0), 17936 }, /* NOT */ { CPUFUNC(op_4618_0), 17944 }, /* NOT */ { CPUFUNC(op_4620_0), 17952 }, /* NOT */ { CPUFUNC(op_4628_0), 17960 }, /* NOT */ { CPUFUNC(op_4630_0), 17968 }, /* NOT */ { CPUFUNC(op_4638_0), 17976 }, /* NOT */ { CPUFUNC(op_4639_0), 17977 }, /* NOT */ { CPUFUNC(op_4640_0), 17984 }, /* NOT */ { CPUFUNC(op_4650_0), 18000 }, /* NOT */ { CPUFUNC(op_4658_0), 18008 }, /* NOT */ { CPUFUNC(op_4660_0), 18016 }, /* NOT */ { CPUFUNC(op_4668_0), 18024 }, /* NOT */ { CPUFUNC(op_4670_0), 18032 }, /* NOT */ { CPUFUNC(op_4678_0), 18040 }, /* NOT */ { CPUFUNC(op_4679_0), 18041 }, /* NOT */ { CPUFUNC(op_4680_0), 18048 }, /* NOT */ { CPUFUNC(op_4690_0), 18064 }, /* NOT */ { CPUFUNC(op_4698_0), 18072 }, /* NOT */ { CPUFUNC(op_46a0_0), 18080 }, /* NOT */ { CPUFUNC(op_46a8_0), 18088 }, /* NOT */ { CPUFUNC(op_46b0_0), 18096 }, /* NOT */ { CPUFUNC(op_46b8_0), 18104 }, /* NOT */ { CPUFUNC(op_46b9_0), 18105 }, /* NOT */ { CPUFUNC(op_46c0_0), 18112 }, /* MV2SR */ { CPUFUNC(op_46d0_0), 18128 }, /* MV2SR */ { CPUFUNC(op_46d8_0), 18136 }, /* MV2SR */ { CPUFUNC(op_46e0_0), 18144 }, /* MV2SR */ { CPUFUNC(op_46e8_0), 18152 }, /* MV2SR */ { CPUFUNC(op_46f0_0), 18160 }, /* MV2SR */ { CPUFUNC(op_46f8_0), 18168 }, /* MV2SR */ { CPUFUNC(op_46f9_0), 18169 }, /* MV2SR */ { CPUFUNC(op_46fa_0), 18170 }, /* MV2SR */ { CPUFUNC(op_46fb_0), 18171 }, /* MV2SR */ { CPUFUNC(op_46fc_0), 18172 }, /* MV2SR */ { CPUFUNC(op_4800_2), 18432 }, /* NBCD */ { CPUFUNC(op_4808_0), 18440 }, /* LINK */ { CPUFUNC(op_4810_2), 18448 }, /* NBCD */ { CPUFUNC(op_4818_2), 18456 }, /* NBCD */ { CPUFUNC(op_4820_2), 18464 }, /* NBCD */ { CPUFUNC(op_4828_2), 18472 }, /* NBCD */ { CPUFUNC(op_4830_2), 18480 }, /* NBCD */ { CPUFUNC(op_4838_2), 18488 }, /* NBCD */ { CPUFUNC(op_4839_2), 18489 }, /* NBCD */ { CPUFUNC(op_4840_0), 18496 }, /* SWAP */ { CPUFUNC(op_4848_0), 18504 }, /* BKPT */ { CPUFUNC(op_4850_0), 18512 }, /* PEA */ { CPUFUNC(op_4868_0), 18536 }, /* PEA */ { CPUFUNC(op_4870_0), 18544 }, /* PEA */ { CPUFUNC(op_4878_0), 18552 }, /* PEA */ { CPUFUNC(op_4879_0), 18553 }, /* PEA */ { CPUFUNC(op_487a_0), 18554 }, /* PEA */ { CPUFUNC(op_487b_0), 18555 }, /* PEA */ { CPUFUNC(op_4880_0), 18560 }, /* EXT */ { CPUFUNC(op_4890_0), 18576 }, /* MVMLE */ { CPUFUNC(op_48a0_0), 18592 }, /* MVMLE */ { CPUFUNC(op_48a8_0), 18600 }, /* MVMLE */ { CPUFUNC(op_48b0_0), 18608 }, /* MVMLE */ { CPUFUNC(op_48b8_0), 18616 }, /* MVMLE */ { CPUFUNC(op_48b9_0), 18617 }, /* MVMLE */ { CPUFUNC(op_48c0_0), 18624 }, /* EXT */ { CPUFUNC(op_48d0_0), 18640 }, /* MVMLE */ { CPUFUNC(op_48e0_0), 18656 }, /* MVMLE */ { CPUFUNC(op_48e8_0), 18664 }, /* MVMLE */ { CPUFUNC(op_48f0_0), 18672 }, /* MVMLE */ { CPUFUNC(op_48f8_0), 18680 }, /* MVMLE */ { CPUFUNC(op_48f9_0), 18681 }, /* MVMLE */ { CPUFUNC(op_49c0_0), 18880 }, /* EXT */ { CPUFUNC(op_4a00_0), 18944 }, /* TST */ { CPUFUNC(op_4a10_0), 18960 }, /* TST */ { CPUFUNC(op_4a18_0), 18968 }, /* TST */ { CPUFUNC(op_4a20_0), 18976 }, /* TST */ { CPUFUNC(op_4a28_0), 18984 }, /* TST */ { CPUFUNC(op_4a30_0), 18992 }, /* TST */ { CPUFUNC(op_4a38_0), 19000 }, /* TST */ { CPUFUNC(op_4a39_0), 19001 }, /* TST */ { CPUFUNC(op_4a3a_0), 19002 }, /* TST */ { CPUFUNC(op_4a3b_0), 19003 }, /* TST */ { CPUFUNC(op_4a3c_0), 19004 }, /* TST */ { CPUFUNC(op_4a40_0), 19008 }, /* TST */ { CPUFUNC(op_4a48_0), 19016 }, /* TST */ { CPUFUNC(op_4a50_0), 19024 }, /* TST */ { CPUFUNC(op_4a58_0), 19032 }, /* TST */ { CPUFUNC(op_4a60_0), 19040 }, /* TST */ { CPUFUNC(op_4a68_0), 19048 }, /* TST */ { CPUFUNC(op_4a70_0), 19056 }, /* TST */ { CPUFUNC(op_4a78_0), 19064 }, /* TST */ { CPUFUNC(op_4a79_0), 19065 }, /* TST */ { CPUFUNC(op_4a7a_0), 19066 }, /* TST */ { CPUFUNC(op_4a7b_0), 19067 }, /* TST */ { CPUFUNC(op_4a7c_0), 19068 }, /* TST */ { CPUFUNC(op_4a80_0), 19072 }, /* TST */ { CPUFUNC(op_4a88_0), 19080 }, /* TST */ { CPUFUNC(op_4a90_0), 19088 }, /* TST */ { CPUFUNC(op_4a98_0), 19096 }, /* TST */ { CPUFUNC(op_4aa0_0), 19104 }, /* TST */ { CPUFUNC(op_4aa8_0), 19112 }, /* TST */ { CPUFUNC(op_4ab0_0), 19120 }, /* TST */ { CPUFUNC(op_4ab8_0), 19128 }, /* TST */ { CPUFUNC(op_4ab9_0), 19129 }, /* TST */ { CPUFUNC(op_4aba_0), 19130 }, /* TST */ { CPUFUNC(op_4abb_0), 19131 }, /* TST */ { CPUFUNC(op_4abc_0), 19132 }, /* TST */ { CPUFUNC(op_4ac0_0), 19136 }, /* TAS */ { CPUFUNC(op_4ad0_0), 19152 }, /* TAS */ { CPUFUNC(op_4ad8_0), 19160 }, /* TAS */ { CPUFUNC(op_4ae0_0), 19168 }, /* TAS */ { CPUFUNC(op_4ae8_0), 19176 }, /* TAS */ { CPUFUNC(op_4af0_0), 19184 }, /* TAS */ { CPUFUNC(op_4af8_0), 19192 }, /* TAS */ { CPUFUNC(op_4af9_0), 19193 }, /* TAS */ { CPUFUNC(op_4c00_0), 19456 }, /* MULL */ { CPUFUNC(op_4c10_0), 19472 }, /* MULL */ { CPUFUNC(op_4c18_0), 19480 }, /* MULL */ { CPUFUNC(op_4c20_0), 19488 }, /* MULL */ { CPUFUNC(op_4c28_0), 19496 }, /* MULL */ { CPUFUNC(op_4c30_0), 19504 }, /* MULL */ { CPUFUNC(op_4c38_0), 19512 }, /* MULL */ { CPUFUNC(op_4c39_0), 19513 }, /* MULL */ { CPUFUNC(op_4c3a_0), 19514 }, /* MULL */ { CPUFUNC(op_4c3b_0), 19515 }, /* MULL */ { CPUFUNC(op_4c3c_0), 19516 }, /* MULL */ { CPUFUNC(op_4c40_0), 19520 }, /* DIVL */ { CPUFUNC(op_4c50_0), 19536 }, /* DIVL */ { CPUFUNC(op_4c58_0), 19544 }, /* DIVL */ { CPUFUNC(op_4c60_0), 19552 }, /* DIVL */ { CPUFUNC(op_4c68_0), 19560 }, /* DIVL */ { CPUFUNC(op_4c70_0), 19568 }, /* DIVL */ { CPUFUNC(op_4c78_0), 19576 }, /* DIVL */ { CPUFUNC(op_4c79_0), 19577 }, /* DIVL */ { CPUFUNC(op_4c7a_0), 19578 }, /* DIVL */ { CPUFUNC(op_4c7b_0), 19579 }, /* DIVL */ { CPUFUNC(op_4c7c_0), 19580 }, /* DIVL */ { CPUFUNC(op_4c90_0), 19600 }, /* MVMEL */ { CPUFUNC(op_4c98_0), 19608 }, /* MVMEL */ { CPUFUNC(op_4ca8_0), 19624 }, /* MVMEL */ { CPUFUNC(op_4cb0_0), 19632 }, /* MVMEL */ { CPUFUNC(op_4cb8_0), 19640 }, /* MVMEL */ { CPUFUNC(op_4cb9_0), 19641 }, /* MVMEL */ { CPUFUNC(op_4cba_0), 19642 }, /* MVMEL */ { CPUFUNC(op_4cbb_0), 19643 }, /* MVMEL */ { CPUFUNC(op_4cd0_0), 19664 }, /* MVMEL */ { CPUFUNC(op_4cd8_0), 19672 }, /* MVMEL */ { CPUFUNC(op_4ce8_0), 19688 }, /* MVMEL */ { CPUFUNC(op_4cf0_0), 19696 }, /* MVMEL */ { CPUFUNC(op_4cf8_0), 19704 }, /* MVMEL */ { CPUFUNC(op_4cf9_0), 19705 }, /* MVMEL */ { CPUFUNC(op_4cfa_0), 19706 }, /* MVMEL */ { CPUFUNC(op_4cfb_0), 19707 }, /* MVMEL */ { CPUFUNC(op_4e40_0), 20032 }, /* TRAP */ { CPUFUNC(op_4e50_0), 20048 }, /* LINK */ { CPUFUNC(op_4e58_0), 20056 }, /* UNLK */ { CPUFUNC(op_4e60_0), 20064 }, /* MVR2USP */ { CPUFUNC(op_4e68_0), 20072 }, /* MVUSP2R */ { CPUFUNC(op_4e70_0), 20080 }, /* RESET */ { CPUFUNC(op_4e71_0), 20081 }, /* NOP */ { CPUFUNC(op_4e72_0), 20082 }, /* STOP */ { CPUFUNC(op_4e73_0), 20083 }, /* RTE */ { CPUFUNC(op_4e74_0), 20084 }, /* RTD */ { CPUFUNC(op_4e75_0), 20085 }, /* RTS */ { CPUFUNC(op_4e76_0), 20086 }, /* TRAPV */ { CPUFUNC(op_4e77_0), 20087 }, /* RTR */ { CPUFUNC(op_4e7a_0), 20090 }, /* MOVEC2 */ { CPUFUNC(op_4e7b_0), 20091 }, /* MOVE2C */ { CPUFUNC(op_4e90_0), 20112 }, /* JSR */ { CPUFUNC(op_4ea8_0), 20136 }, /* JSR */ { CPUFUNC(op_4eb0_0), 20144 }, /* JSR */ { CPUFUNC(op_4eb8_0), 20152 }, /* JSR */ { CPUFUNC(op_4eb9_0), 20153 }, /* JSR */ { CPUFUNC(op_4eba_0), 20154 }, /* JSR */ { CPUFUNC(op_4ebb_0), 20155 }, /* JSR */ { CPUFUNC(op_4ed0_0), 20176 }, /* JMP */ { CPUFUNC(op_4ee8_0), 20200 }, /* JMP */ { CPUFUNC(op_4ef0_0), 20208 }, /* JMP */ { CPUFUNC(op_4ef8_0), 20216 }, /* JMP */ { CPUFUNC(op_4ef9_0), 20217 }, /* JMP */ { CPUFUNC(op_4efa_0), 20218 }, /* JMP */ { CPUFUNC(op_4efb_0), 20219 }, /* JMP */ { CPUFUNC(op_5000_0), 20480 }, /* ADD */ { CPUFUNC(op_5010_0), 20496 }, /* ADD */ { CPUFUNC(op_5018_0), 20504 }, /* ADD */ { CPUFUNC(op_5020_0), 20512 }, /* ADD */ { CPUFUNC(op_5028_0), 20520 }, /* ADD */ { CPUFUNC(op_5030_0), 20528 }, /* ADD */ { CPUFUNC(op_5038_0), 20536 }, /* ADD */ { CPUFUNC(op_5039_0), 20537 }, /* ADD */ { CPUFUNC(op_5040_0), 20544 }, /* ADD */ { CPUFUNC(op_5048_0), 20552 }, /* ADDA */ { CPUFUNC(op_5050_0), 20560 }, /* ADD */ { CPUFUNC(op_5058_0), 20568 }, /* ADD */ { CPUFUNC(op_5060_0), 20576 }, /* ADD */ { CPUFUNC(op_5068_0), 20584 }, /* ADD */ { CPUFUNC(op_5070_0), 20592 }, /* ADD */ { CPUFUNC(op_5078_0), 20600 }, /* ADD */ { CPUFUNC(op_5079_0), 20601 }, /* ADD */ { CPUFUNC(op_5080_0), 20608 }, /* ADD */ { CPUFUNC(op_5088_0), 20616 }, /* ADDA */ { CPUFUNC(op_5090_0), 20624 }, /* ADD */ { CPUFUNC(op_5098_0), 20632 }, /* ADD */ { CPUFUNC(op_50a0_0), 20640 }, /* ADD */ { CPUFUNC(op_50a8_0), 20648 }, /* ADD */ { CPUFUNC(op_50b0_0), 20656 }, /* ADD */ { CPUFUNC(op_50b8_0), 20664 }, /* ADD */ { CPUFUNC(op_50b9_0), 20665 }, /* ADD */ { CPUFUNC(op_50c0_0), 20672 }, /* Scc */ { CPUFUNC(op_50c8_0), 20680 }, /* DBcc */ { CPUFUNC(op_50d0_0), 20688 }, /* Scc */ { CPUFUNC(op_50d8_0), 20696 }, /* Scc */ { CPUFUNC(op_50e0_0), 20704 }, /* Scc */ { CPUFUNC(op_50e8_0), 20712 }, /* Scc */ { CPUFUNC(op_50f0_0), 20720 }, /* Scc */ { CPUFUNC(op_50f8_0), 20728 }, /* Scc */ { CPUFUNC(op_50f9_0), 20729 }, /* Scc */ { CPUFUNC(op_50fa_0), 20730 }, /* TRAPcc */ { CPUFUNC(op_50fb_0), 20731 }, /* TRAPcc */ { CPUFUNC(op_50fc_0), 20732 }, /* TRAPcc */ { CPUFUNC(op_5100_0), 20736 }, /* SUB */ { CPUFUNC(op_5110_0), 20752 }, /* SUB */ { CPUFUNC(op_5118_0), 20760 }, /* SUB */ { CPUFUNC(op_5120_0), 20768 }, /* SUB */ { CPUFUNC(op_5128_0), 20776 }, /* SUB */ { CPUFUNC(op_5130_0), 20784 }, /* SUB */ { CPUFUNC(op_5138_0), 20792 }, /* SUB */ { CPUFUNC(op_5139_0), 20793 }, /* SUB */ { CPUFUNC(op_5140_0), 20800 }, /* SUB */ { CPUFUNC(op_5148_0), 20808 }, /* SUBA */ { CPUFUNC(op_5150_0), 20816 }, /* SUB */ { CPUFUNC(op_5158_0), 20824 }, /* SUB */ { CPUFUNC(op_5160_0), 20832 }, /* SUB */ { CPUFUNC(op_5168_0), 20840 }, /* SUB */ { CPUFUNC(op_5170_0), 20848 }, /* SUB */ { CPUFUNC(op_5178_0), 20856 }, /* SUB */ { CPUFUNC(op_5179_0), 20857 }, /* SUB */ { CPUFUNC(op_5180_0), 20864 }, /* SUB */ { CPUFUNC(op_5188_0), 20872 }, /* SUBA */ { CPUFUNC(op_5190_0), 20880 }, /* SUB */ { CPUFUNC(op_5198_0), 20888 }, /* SUB */ { CPUFUNC(op_51a0_0), 20896 }, /* SUB */ { CPUFUNC(op_51a8_0), 20904 }, /* SUB */ { CPUFUNC(op_51b0_0), 20912 }, /* SUB */ { CPUFUNC(op_51b8_0), 20920 }, /* SUB */ { CPUFUNC(op_51b9_0), 20921 }, /* SUB */ { CPUFUNC(op_51c0_0), 20928 }, /* Scc */ { CPUFUNC(op_51c8_0), 20936 }, /* DBcc */ { CPUFUNC(op_51d0_0), 20944 }, /* Scc */ { CPUFUNC(op_51d8_0), 20952 }, /* Scc */ { CPUFUNC(op_51e0_0), 20960 }, /* Scc */ { CPUFUNC(op_51e8_0), 20968 }, /* Scc */ { CPUFUNC(op_51f0_0), 20976 }, /* Scc */ { CPUFUNC(op_51f8_0), 20984 }, /* Scc */ { CPUFUNC(op_51f9_0), 20985 }, /* Scc */ { CPUFUNC(op_51fa_0), 20986 }, /* TRAPcc */ { CPUFUNC(op_51fb_0), 20987 }, /* TRAPcc */ { CPUFUNC(op_51fc_0), 20988 }, /* TRAPcc */ { CPUFUNC(op_52c0_0), 21184 }, /* Scc */ { CPUFUNC(op_52c8_0), 21192 }, /* DBcc */ { CPUFUNC(op_52d0_0), 21200 }, /* Scc */ { CPUFUNC(op_52d8_0), 21208 }, /* Scc */ { CPUFUNC(op_52e0_0), 21216 }, /* Scc */ { CPUFUNC(op_52e8_0), 21224 }, /* Scc */ { CPUFUNC(op_52f0_0), 21232 }, /* Scc */ { CPUFUNC(op_52f8_0), 21240 }, /* Scc */ { CPUFUNC(op_52f9_0), 21241 }, /* Scc */ { CPUFUNC(op_52fa_0), 21242 }, /* TRAPcc */ { CPUFUNC(op_52fb_0), 21243 }, /* TRAPcc */ { CPUFUNC(op_52fc_0), 21244 }, /* TRAPcc */ { CPUFUNC(op_53c0_0), 21440 }, /* Scc */ { CPUFUNC(op_53c8_0), 21448 }, /* DBcc */ { CPUFUNC(op_53d0_0), 21456 }, /* Scc */ { CPUFUNC(op_53d8_0), 21464 }, /* Scc */ { CPUFUNC(op_53e0_0), 21472 }, /* Scc */ { CPUFUNC(op_53e8_0), 21480 }, /* Scc */ { CPUFUNC(op_53f0_0), 21488 }, /* Scc */ { CPUFUNC(op_53f8_0), 21496 }, /* Scc */ { CPUFUNC(op_53f9_0), 21497 }, /* Scc */ { CPUFUNC(op_53fa_0), 21498 }, /* TRAPcc */ { CPUFUNC(op_53fb_0), 21499 }, /* TRAPcc */ { CPUFUNC(op_53fc_0), 21500 }, /* TRAPcc */ { CPUFUNC(op_54c0_0), 21696 }, /* Scc */ { CPUFUNC(op_54c8_0), 21704 }, /* DBcc */ { CPUFUNC(op_54d0_0), 21712 }, /* Scc */ { CPUFUNC(op_54d8_0), 21720 }, /* Scc */ { CPUFUNC(op_54e0_0), 21728 }, /* Scc */ { CPUFUNC(op_54e8_0), 21736 }, /* Scc */ { CPUFUNC(op_54f0_0), 21744 }, /* Scc */ { CPUFUNC(op_54f8_0), 21752 }, /* Scc */ { CPUFUNC(op_54f9_0), 21753 }, /* Scc */ { CPUFUNC(op_54fa_0), 21754 }, /* TRAPcc */ { CPUFUNC(op_54fb_0), 21755 }, /* TRAPcc */ { CPUFUNC(op_54fc_0), 21756 }, /* TRAPcc */ { CPUFUNC(op_55c0_0), 21952 }, /* Scc */ { CPUFUNC(op_55c8_0), 21960 }, /* DBcc */ { CPUFUNC(op_55d0_0), 21968 }, /* Scc */ { CPUFUNC(op_55d8_0), 21976 }, /* Scc */ { CPUFUNC(op_55e0_0), 21984 }, /* Scc */ { CPUFUNC(op_55e8_0), 21992 }, /* Scc */ { CPUFUNC(op_55f0_0), 22000 }, /* Scc */ { CPUFUNC(op_55f8_0), 22008 }, /* Scc */ { CPUFUNC(op_55f9_0), 22009 }, /* Scc */ { CPUFUNC(op_55fa_0), 22010 }, /* TRAPcc */ { CPUFUNC(op_55fb_0), 22011 }, /* TRAPcc */ { CPUFUNC(op_55fc_0), 22012 }, /* TRAPcc */ { CPUFUNC(op_56c0_0), 22208 }, /* Scc */ { CPUFUNC(op_56c8_0), 22216 }, /* DBcc */ { CPUFUNC(op_56d0_0), 22224 }, /* Scc */ { CPUFUNC(op_56d8_0), 22232 }, /* Scc */ { CPUFUNC(op_56e0_0), 22240 }, /* Scc */ { CPUFUNC(op_56e8_0), 22248 }, /* Scc */ { CPUFUNC(op_56f0_0), 22256 }, /* Scc */ { CPUFUNC(op_56f8_0), 22264 }, /* Scc */ { CPUFUNC(op_56f9_0), 22265 }, /* Scc */ { CPUFUNC(op_56fa_0), 22266 }, /* TRAPcc */ { CPUFUNC(op_56fb_0), 22267 }, /* TRAPcc */ { CPUFUNC(op_56fc_0), 22268 }, /* TRAPcc */ { CPUFUNC(op_57c0_0), 22464 }, /* Scc */ { CPUFUNC(op_57c8_0), 22472 }, /* DBcc */ { CPUFUNC(op_57d0_0), 22480 }, /* Scc */ { CPUFUNC(op_57d8_0), 22488 }, /* Scc */ { CPUFUNC(op_57e0_0), 22496 }, /* Scc */ { CPUFUNC(op_57e8_0), 22504 }, /* Scc */ { CPUFUNC(op_57f0_0), 22512 }, /* Scc */ { CPUFUNC(op_57f8_0), 22520 }, /* Scc */ { CPUFUNC(op_57f9_0), 22521 }, /* Scc */ { CPUFUNC(op_57fa_0), 22522 }, /* TRAPcc */ { CPUFUNC(op_57fb_0), 22523 }, /* TRAPcc */ { CPUFUNC(op_57fc_0), 22524 }, /* TRAPcc */ { CPUFUNC(op_58c0_0), 22720 }, /* Scc */ { CPUFUNC(op_58c8_0), 22728 }, /* DBcc */ { CPUFUNC(op_58d0_0), 22736 }, /* Scc */ { CPUFUNC(op_58d8_0), 22744 }, /* Scc */ { CPUFUNC(op_58e0_0), 22752 }, /* Scc */ { CPUFUNC(op_58e8_0), 22760 }, /* Scc */ { CPUFUNC(op_58f0_0), 22768 }, /* Scc */ { CPUFUNC(op_58f8_0), 22776 }, /* Scc */ { CPUFUNC(op_58f9_0), 22777 }, /* Scc */ { CPUFUNC(op_58fa_0), 22778 }, /* TRAPcc */ { CPUFUNC(op_58fb_0), 22779 }, /* TRAPcc */ { CPUFUNC(op_58fc_0), 22780 }, /* TRAPcc */ { CPUFUNC(op_59c0_0), 22976 }, /* Scc */ { CPUFUNC(op_59c8_0), 22984 }, /* DBcc */ { CPUFUNC(op_59d0_0), 22992 }, /* Scc */ { CPUFUNC(op_59d8_0), 23000 }, /* Scc */ { CPUFUNC(op_59e0_0), 23008 }, /* Scc */ { CPUFUNC(op_59e8_0), 23016 }, /* Scc */ { CPUFUNC(op_59f0_0), 23024 }, /* Scc */ { CPUFUNC(op_59f8_0), 23032 }, /* Scc */ { CPUFUNC(op_59f9_0), 23033 }, /* Scc */ { CPUFUNC(op_59fa_0), 23034 }, /* TRAPcc */ { CPUFUNC(op_59fb_0), 23035 }, /* TRAPcc */ { CPUFUNC(op_59fc_0), 23036 }, /* TRAPcc */ { CPUFUNC(op_5ac0_0), 23232 }, /* Scc */ { CPUFUNC(op_5ac8_0), 23240 }, /* DBcc */ { CPUFUNC(op_5ad0_0), 23248 }, /* Scc */ { CPUFUNC(op_5ad8_0), 23256 }, /* Scc */ { CPUFUNC(op_5ae0_0), 23264 }, /* Scc */ { CPUFUNC(op_5ae8_0), 23272 }, /* Scc */ { CPUFUNC(op_5af0_0), 23280 }, /* Scc */ { CPUFUNC(op_5af8_0), 23288 }, /* Scc */ { CPUFUNC(op_5af9_0), 23289 }, /* Scc */ { CPUFUNC(op_5afa_0), 23290 }, /* TRAPcc */ { CPUFUNC(op_5afb_0), 23291 }, /* TRAPcc */ { CPUFUNC(op_5afc_0), 23292 }, /* TRAPcc */ { CPUFUNC(op_5bc0_0), 23488 }, /* Scc */ { CPUFUNC(op_5bc8_0), 23496 }, /* DBcc */ { CPUFUNC(op_5bd0_0), 23504 }, /* Scc */ { CPUFUNC(op_5bd8_0), 23512 }, /* Scc */ { CPUFUNC(op_5be0_0), 23520 }, /* Scc */ { CPUFUNC(op_5be8_0), 23528 }, /* Scc */ { CPUFUNC(op_5bf0_0), 23536 }, /* Scc */ { CPUFUNC(op_5bf8_0), 23544 }, /* Scc */ { CPUFUNC(op_5bf9_0), 23545 }, /* Scc */ { CPUFUNC(op_5bfa_0), 23546 }, /* TRAPcc */ { CPUFUNC(op_5bfb_0), 23547 }, /* TRAPcc */ { CPUFUNC(op_5bfc_0), 23548 }, /* TRAPcc */ { CPUFUNC(op_5cc0_0), 23744 }, /* Scc */ { CPUFUNC(op_5cc8_0), 23752 }, /* DBcc */ { CPUFUNC(op_5cd0_0), 23760 }, /* Scc */ { CPUFUNC(op_5cd8_0), 23768 }, /* Scc */ { CPUFUNC(op_5ce0_0), 23776 }, /* Scc */ { CPUFUNC(op_5ce8_0), 23784 }, /* Scc */ { CPUFUNC(op_5cf0_0), 23792 }, /* Scc */ { CPUFUNC(op_5cf8_0), 23800 }, /* Scc */ { CPUFUNC(op_5cf9_0), 23801 }, /* Scc */ { CPUFUNC(op_5cfa_0), 23802 }, /* TRAPcc */ { CPUFUNC(op_5cfb_0), 23803 }, /* TRAPcc */ { CPUFUNC(op_5cfc_0), 23804 }, /* TRAPcc */ { CPUFUNC(op_5dc0_0), 24000 }, /* Scc */ { CPUFUNC(op_5dc8_0), 24008 }, /* DBcc */ { CPUFUNC(op_5dd0_0), 24016 }, /* Scc */ { CPUFUNC(op_5dd8_0), 24024 }, /* Scc */ { CPUFUNC(op_5de0_0), 24032 }, /* Scc */ { CPUFUNC(op_5de8_0), 24040 }, /* Scc */ { CPUFUNC(op_5df0_0), 24048 }, /* Scc */ { CPUFUNC(op_5df8_0), 24056 }, /* Scc */ { CPUFUNC(op_5df9_0), 24057 }, /* Scc */ { CPUFUNC(op_5dfa_0), 24058 }, /* TRAPcc */ { CPUFUNC(op_5dfb_0), 24059 }, /* TRAPcc */ { CPUFUNC(op_5dfc_0), 24060 }, /* TRAPcc */ { CPUFUNC(op_5ec0_0), 24256 }, /* Scc */ { CPUFUNC(op_5ec8_0), 24264 }, /* DBcc */ { CPUFUNC(op_5ed0_0), 24272 }, /* Scc */ { CPUFUNC(op_5ed8_0), 24280 }, /* Scc */ { CPUFUNC(op_5ee0_0), 24288 }, /* Scc */ { CPUFUNC(op_5ee8_0), 24296 }, /* Scc */ { CPUFUNC(op_5ef0_0), 24304 }, /* Scc */ { CPUFUNC(op_5ef8_0), 24312 }, /* Scc */ { CPUFUNC(op_5ef9_0), 24313 }, /* Scc */ { CPUFUNC(op_5efa_0), 24314 }, /* TRAPcc */ { CPUFUNC(op_5efb_0), 24315 }, /* TRAPcc */ { CPUFUNC(op_5efc_0), 24316 }, /* TRAPcc */ { CPUFUNC(op_5fc0_0), 24512 }, /* Scc */ { CPUFUNC(op_5fc8_0), 24520 }, /* DBcc */ { CPUFUNC(op_5fd0_0), 24528 }, /* Scc */ { CPUFUNC(op_5fd8_0), 24536 }, /* Scc */ { CPUFUNC(op_5fe0_0), 24544 }, /* Scc */ { CPUFUNC(op_5fe8_0), 24552 }, /* Scc */ { CPUFUNC(op_5ff0_0), 24560 }, /* Scc */ { CPUFUNC(op_5ff8_0), 24568 }, /* Scc */ { CPUFUNC(op_5ff9_0), 24569 }, /* Scc */ { CPUFUNC(op_5ffa_0), 24570 }, /* TRAPcc */ { CPUFUNC(op_5ffb_0), 24571 }, /* TRAPcc */ { CPUFUNC(op_5ffc_0), 24572 }, /* TRAPcc */ { CPUFUNC(op_6000_0), 24576 }, /* Bcc */ { CPUFUNC(op_6001_0), 24577 }, /* Bcc */ { CPUFUNC(op_60ff_0), 24831 }, /* Bcc */ { CPUFUNC(op_6100_0), 24832 }, /* BSR */ { CPUFUNC(op_6101_0), 24833 }, /* BSR */ { CPUFUNC(op_61ff_0), 25087 }, /* BSR */ { CPUFUNC(op_6200_0), 25088 }, /* Bcc */ { CPUFUNC(op_6201_0), 25089 }, /* Bcc */ { CPUFUNC(op_62ff_0), 25343 }, /* Bcc */ { CPUFUNC(op_6300_0), 25344 }, /* Bcc */ { CPUFUNC(op_6301_0), 25345 }, /* Bcc */ { CPUFUNC(op_63ff_0), 25599 }, /* Bcc */ { CPUFUNC(op_6400_0), 25600 }, /* Bcc */ { CPUFUNC(op_6401_0), 25601 }, /* Bcc */ { CPUFUNC(op_64ff_0), 25855 }, /* Bcc */ { CPUFUNC(op_6500_0), 25856 }, /* Bcc */ { CPUFUNC(op_6501_0), 25857 }, /* Bcc */ { CPUFUNC(op_65ff_0), 26111 }, /* Bcc */ { CPUFUNC(op_6600_0), 26112 }, /* Bcc */ { CPUFUNC(op_6601_0), 26113 }, /* Bcc */ { CPUFUNC(op_66ff_0), 26367 }, /* Bcc */ { CPUFUNC(op_6700_0), 26368 }, /* Bcc */ { CPUFUNC(op_6701_0), 26369 }, /* Bcc */ { CPUFUNC(op_67ff_0), 26623 }, /* Bcc */ { CPUFUNC(op_6800_0), 26624 }, /* Bcc */ { CPUFUNC(op_6801_0), 26625 }, /* Bcc */ { CPUFUNC(op_68ff_0), 26879 }, /* Bcc */ { CPUFUNC(op_6900_0), 26880 }, /* Bcc */ { CPUFUNC(op_6901_0), 26881 }, /* Bcc */ { CPUFUNC(op_69ff_0), 27135 }, /* Bcc */ { CPUFUNC(op_6a00_0), 27136 }, /* Bcc */ { CPUFUNC(op_6a01_0), 27137 }, /* Bcc */ { CPUFUNC(op_6aff_0), 27391 }, /* Bcc */ { CPUFUNC(op_6b00_0), 27392 }, /* Bcc */ { CPUFUNC(op_6b01_0), 27393 }, /* Bcc */ { CPUFUNC(op_6bff_0), 27647 }, /* Bcc */ { CPUFUNC(op_6c00_0), 27648 }, /* Bcc */ { CPUFUNC(op_6c01_0), 27649 }, /* Bcc */ { CPUFUNC(op_6cff_0), 27903 }, /* Bcc */ { CPUFUNC(op_6d00_0), 27904 }, /* Bcc */ { CPUFUNC(op_6d01_0), 27905 }, /* Bcc */ { CPUFUNC(op_6dff_0), 28159 }, /* Bcc */ { CPUFUNC(op_6e00_0), 28160 }, /* Bcc */ { CPUFUNC(op_6e01_0), 28161 }, /* Bcc */ { CPUFUNC(op_6eff_0), 28415 }, /* Bcc */ { CPUFUNC(op_6f00_0), 28416 }, /* Bcc */ { CPUFUNC(op_6f01_0), 28417 }, /* Bcc */ { CPUFUNC(op_6fff_0), 28671 }, /* Bcc */ { CPUFUNC(op_7000_0), 28672 }, /* MOVE */ { CPUFUNC(op_8000_0), 32768 }, /* OR */ { CPUFUNC(op_8010_0), 32784 }, /* OR */ { CPUFUNC(op_8018_0), 32792 }, /* OR */ { CPUFUNC(op_8020_0), 32800 }, /* OR */ { CPUFUNC(op_8028_0), 32808 }, /* OR */ { CPUFUNC(op_8030_0), 32816 }, /* OR */ { CPUFUNC(op_8038_0), 32824 }, /* OR */ { CPUFUNC(op_8039_0), 32825 }, /* OR */ { CPUFUNC(op_803a_0), 32826 }, /* OR */ { CPUFUNC(op_803b_0), 32827 }, /* OR */ { CPUFUNC(op_803c_0), 32828 }, /* OR */ { CPUFUNC(op_8040_0), 32832 }, /* OR */ { CPUFUNC(op_8050_0), 32848 }, /* OR */ { CPUFUNC(op_8058_0), 32856 }, /* OR */ { CPUFUNC(op_8060_0), 32864 }, /* OR */ { CPUFUNC(op_8068_0), 32872 }, /* OR */ { CPUFUNC(op_8070_0), 32880 }, /* OR */ { CPUFUNC(op_8078_0), 32888 }, /* OR */ { CPUFUNC(op_8079_0), 32889 }, /* OR */ { CPUFUNC(op_807a_0), 32890 }, /* OR */ { CPUFUNC(op_807b_0), 32891 }, /* OR */ { CPUFUNC(op_807c_0), 32892 }, /* OR */ { CPUFUNC(op_8080_0), 32896 }, /* OR */ { CPUFUNC(op_8090_0), 32912 }, /* OR */ { CPUFUNC(op_8098_0), 32920 }, /* OR */ { CPUFUNC(op_80a0_0), 32928 }, /* OR */ { CPUFUNC(op_80a8_0), 32936 }, /* OR */ { CPUFUNC(op_80b0_0), 32944 }, /* OR */ { CPUFUNC(op_80b8_0), 32952 }, /* OR */ { CPUFUNC(op_80b9_0), 32953 }, /* OR */ { CPUFUNC(op_80ba_0), 32954 }, /* OR */ { CPUFUNC(op_80bb_0), 32955 }, /* OR */ { CPUFUNC(op_80bc_0), 32956 }, /* OR */ { CPUFUNC(op_80c0_0), 32960 }, /* DIVU */ { CPUFUNC(op_80d0_0), 32976 }, /* DIVU */ { CPUFUNC(op_80d8_0), 32984 }, /* DIVU */ { CPUFUNC(op_80e0_0), 32992 }, /* DIVU */ { CPUFUNC(op_80e8_0), 33000 }, /* DIVU */ { CPUFUNC(op_80f0_0), 33008 }, /* DIVU */ { CPUFUNC(op_80f8_0), 33016 }, /* DIVU */ { CPUFUNC(op_80f9_0), 33017 }, /* DIVU */ { CPUFUNC(op_80fa_0), 33018 }, /* DIVU */ { CPUFUNC(op_80fb_0), 33019 }, /* DIVU */ { CPUFUNC(op_80fc_0), 33020 }, /* DIVU */ { CPUFUNC(op_8100_2), 33024 }, /* SBCD */ { CPUFUNC(op_8108_2), 33032 }, /* SBCD */ { CPUFUNC(op_8110_0), 33040 }, /* OR */ { CPUFUNC(op_8118_0), 33048 }, /* OR */ { CPUFUNC(op_8120_0), 33056 }, /* OR */ { CPUFUNC(op_8128_0), 33064 }, /* OR */ { CPUFUNC(op_8130_0), 33072 }, /* OR */ { CPUFUNC(op_8138_0), 33080 }, /* OR */ { CPUFUNC(op_8139_0), 33081 }, /* OR */ { CPUFUNC(op_8140_0), 33088 }, /* PACK */ { CPUFUNC(op_8148_0), 33096 }, /* PACK */ { CPUFUNC(op_8150_0), 33104 }, /* OR */ { CPUFUNC(op_8158_0), 33112 }, /* OR */ { CPUFUNC(op_8160_0), 33120 }, /* OR */ { CPUFUNC(op_8168_0), 33128 }, /* OR */ { CPUFUNC(op_8170_0), 33136 }, /* OR */ { CPUFUNC(op_8178_0), 33144 }, /* OR */ { CPUFUNC(op_8179_0), 33145 }, /* OR */ { CPUFUNC(op_8180_0), 33152 }, /* UNPK */ { CPUFUNC(op_8188_0), 33160 }, /* UNPK */ { CPUFUNC(op_8190_0), 33168 }, /* OR */ { CPUFUNC(op_8198_0), 33176 }, /* OR */ { CPUFUNC(op_81a0_0), 33184 }, /* OR */ { CPUFUNC(op_81a8_0), 33192 }, /* OR */ { CPUFUNC(op_81b0_0), 33200 }, /* OR */ { CPUFUNC(op_81b8_0), 33208 }, /* OR */ { CPUFUNC(op_81b9_0), 33209 }, /* OR */ { CPUFUNC(op_81c0_0), 33216 }, /* DIVS */ { CPUFUNC(op_81d0_0), 33232 }, /* DIVS */ { CPUFUNC(op_81d8_0), 33240 }, /* DIVS */ { CPUFUNC(op_81e0_0), 33248 }, /* DIVS */ { CPUFUNC(op_81e8_0), 33256 }, /* DIVS */ { CPUFUNC(op_81f0_0), 33264 }, /* DIVS */ { CPUFUNC(op_81f8_0), 33272 }, /* DIVS */ { CPUFUNC(op_81f9_0), 33273 }, /* DIVS */ { CPUFUNC(op_81fa_0), 33274 }, /* DIVS */ { CPUFUNC(op_81fb_0), 33275 }, /* DIVS */ { CPUFUNC(op_81fc_0), 33276 }, /* DIVS */ { CPUFUNC(op_9000_0), 36864 }, /* SUB */ { CPUFUNC(op_9010_0), 36880 }, /* SUB */ { CPUFUNC(op_9018_0), 36888 }, /* SUB */ { CPUFUNC(op_9020_0), 36896 }, /* SUB */ { CPUFUNC(op_9028_0), 36904 }, /* SUB */ { CPUFUNC(op_9030_0), 36912 }, /* SUB */ { CPUFUNC(op_9038_0), 36920 }, /* SUB */ { CPUFUNC(op_9039_0), 36921 }, /* SUB */ { CPUFUNC(op_903a_0), 36922 }, /* SUB */ { CPUFUNC(op_903b_0), 36923 }, /* SUB */ { CPUFUNC(op_903c_0), 36924 }, /* SUB */ { CPUFUNC(op_9040_0), 36928 }, /* SUB */ { CPUFUNC(op_9048_0), 36936 }, /* SUB */ { CPUFUNC(op_9050_0), 36944 }, /* SUB */ { CPUFUNC(op_9058_0), 36952 }, /* SUB */ { CPUFUNC(op_9060_0), 36960 }, /* SUB */ { CPUFUNC(op_9068_0), 36968 }, /* SUB */ { CPUFUNC(op_9070_0), 36976 }, /* SUB */ { CPUFUNC(op_9078_0), 36984 }, /* SUB */ { CPUFUNC(op_9079_0), 36985 }, /* SUB */ { CPUFUNC(op_907a_0), 36986 }, /* SUB */ { CPUFUNC(op_907b_0), 36987 }, /* SUB */ { CPUFUNC(op_907c_0), 36988 }, /* SUB */ { CPUFUNC(op_9080_0), 36992 }, /* SUB */ { CPUFUNC(op_9088_0), 37000 }, /* SUB */ { CPUFUNC(op_9090_0), 37008 }, /* SUB */ { CPUFUNC(op_9098_0), 37016 }, /* SUB */ { CPUFUNC(op_90a0_0), 37024 }, /* SUB */ { CPUFUNC(op_90a8_0), 37032 }, /* SUB */ { CPUFUNC(op_90b0_0), 37040 }, /* SUB */ { CPUFUNC(op_90b8_0), 37048 }, /* SUB */ { CPUFUNC(op_90b9_0), 37049 }, /* SUB */ { CPUFUNC(op_90ba_0), 37050 }, /* SUB */ { CPUFUNC(op_90bb_0), 37051 }, /* SUB */ { CPUFUNC(op_90bc_0), 37052 }, /* SUB */ { CPUFUNC(op_90c0_0), 37056 }, /* SUBA */ { CPUFUNC(op_90c8_0), 37064 }, /* SUBA */ { CPUFUNC(op_90d0_0), 37072 }, /* SUBA */ { CPUFUNC(op_90d8_0), 37080 }, /* SUBA */ { CPUFUNC(op_90e0_0), 37088 }, /* SUBA */ { CPUFUNC(op_90e8_0), 37096 }, /* SUBA */ { CPUFUNC(op_90f0_0), 37104 }, /* SUBA */ { CPUFUNC(op_90f8_0), 37112 }, /* SUBA */ { CPUFUNC(op_90f9_0), 37113 }, /* SUBA */ { CPUFUNC(op_90fa_0), 37114 }, /* SUBA */ { CPUFUNC(op_90fb_0), 37115 }, /* SUBA */ { CPUFUNC(op_90fc_0), 37116 }, /* SUBA */ { CPUFUNC(op_9100_0), 37120 }, /* SUBX */ { CPUFUNC(op_9108_0), 37128 }, /* SUBX */ { CPUFUNC(op_9110_0), 37136 }, /* SUB */ { CPUFUNC(op_9118_0), 37144 }, /* SUB */ { CPUFUNC(op_9120_0), 37152 }, /* SUB */ { CPUFUNC(op_9128_0), 37160 }, /* SUB */ { CPUFUNC(op_9130_0), 37168 }, /* SUB */ { CPUFUNC(op_9138_0), 37176 }, /* SUB */ { CPUFUNC(op_9139_0), 37177 }, /* SUB */ { CPUFUNC(op_9140_0), 37184 }, /* SUBX */ { CPUFUNC(op_9148_0), 37192 }, /* SUBX */ { CPUFUNC(op_9150_0), 37200 }, /* SUB */ { CPUFUNC(op_9158_0), 37208 }, /* SUB */ { CPUFUNC(op_9160_0), 37216 }, /* SUB */ { CPUFUNC(op_9168_0), 37224 }, /* SUB */ { CPUFUNC(op_9170_0), 37232 }, /* SUB */ { CPUFUNC(op_9178_0), 37240 }, /* SUB */ { CPUFUNC(op_9179_0), 37241 }, /* SUB */ { CPUFUNC(op_9180_0), 37248 }, /* SUBX */ { CPUFUNC(op_9188_0), 37256 }, /* SUBX */ { CPUFUNC(op_9190_0), 37264 }, /* SUB */ { CPUFUNC(op_9198_0), 37272 }, /* SUB */ { CPUFUNC(op_91a0_0), 37280 }, /* SUB */ { CPUFUNC(op_91a8_0), 37288 }, /* SUB */ { CPUFUNC(op_91b0_0), 37296 }, /* SUB */ { CPUFUNC(op_91b8_0), 37304 }, /* SUB */ { CPUFUNC(op_91b9_0), 37305 }, /* SUB */ { CPUFUNC(op_91c0_0), 37312 }, /* SUBA */ { CPUFUNC(op_91c8_0), 37320 }, /* SUBA */ { CPUFUNC(op_91d0_0), 37328 }, /* SUBA */ { CPUFUNC(op_91d8_0), 37336 }, /* SUBA */ { CPUFUNC(op_91e0_0), 37344 }, /* SUBA */ { CPUFUNC(op_91e8_0), 37352 }, /* SUBA */ { CPUFUNC(op_91f0_0), 37360 }, /* SUBA */ { CPUFUNC(op_91f8_0), 37368 }, /* SUBA */ { CPUFUNC(op_91f9_0), 37369 }, /* SUBA */ { CPUFUNC(op_91fa_0), 37370 }, /* SUBA */ { CPUFUNC(op_91fb_0), 37371 }, /* SUBA */ { CPUFUNC(op_91fc_0), 37372 }, /* SUBA */ { CPUFUNC(op_b000_0), 45056 }, /* CMP */ { CPUFUNC(op_b010_0), 45072 }, /* CMP */ { CPUFUNC(op_b018_0), 45080 }, /* CMP */ { CPUFUNC(op_b020_0), 45088 }, /* CMP */ { CPUFUNC(op_b028_0), 45096 }, /* CMP */ { CPUFUNC(op_b030_0), 45104 }, /* CMP */ { CPUFUNC(op_b038_0), 45112 }, /* CMP */ { CPUFUNC(op_b039_0), 45113 }, /* CMP */ { CPUFUNC(op_b03a_0), 45114 }, /* CMP */ { CPUFUNC(op_b03b_0), 45115 }, /* CMP */ { CPUFUNC(op_b03c_0), 45116 }, /* CMP */ { CPUFUNC(op_b040_0), 45120 }, /* CMP */ { CPUFUNC(op_b048_0), 45128 }, /* CMP */ { CPUFUNC(op_b050_0), 45136 }, /* CMP */ { CPUFUNC(op_b058_0), 45144 }, /* CMP */ { CPUFUNC(op_b060_0), 45152 }, /* CMP */ { CPUFUNC(op_b068_0), 45160 }, /* CMP */ { CPUFUNC(op_b070_0), 45168 }, /* CMP */ { CPUFUNC(op_b078_0), 45176 }, /* CMP */ { CPUFUNC(op_b079_0), 45177 }, /* CMP */ { CPUFUNC(op_b07a_0), 45178 }, /* CMP */ { CPUFUNC(op_b07b_0), 45179 }, /* CMP */ { CPUFUNC(op_b07c_0), 45180 }, /* CMP */ { CPUFUNC(op_b080_0), 45184 }, /* CMP */ { CPUFUNC(op_b088_0), 45192 }, /* CMP */ { CPUFUNC(op_b090_0), 45200 }, /* CMP */ { CPUFUNC(op_b098_0), 45208 }, /* CMP */ { CPUFUNC(op_b0a0_0), 45216 }, /* CMP */ { CPUFUNC(op_b0a8_0), 45224 }, /* CMP */ { CPUFUNC(op_b0b0_0), 45232 }, /* CMP */ { CPUFUNC(op_b0b8_0), 45240 }, /* CMP */ { CPUFUNC(op_b0b9_0), 45241 }, /* CMP */ { CPUFUNC(op_b0ba_0), 45242 }, /* CMP */ { CPUFUNC(op_b0bb_0), 45243 }, /* CMP */ { CPUFUNC(op_b0bc_0), 45244 }, /* CMP */ { CPUFUNC(op_b0c0_0), 45248 }, /* CMPA */ { CPUFUNC(op_b0c8_0), 45256 }, /* CMPA */ { CPUFUNC(op_b0d0_0), 45264 }, /* CMPA */ { CPUFUNC(op_b0d8_0), 45272 }, /* CMPA */ { CPUFUNC(op_b0e0_0), 45280 }, /* CMPA */ { CPUFUNC(op_b0e8_0), 45288 }, /* CMPA */ { CPUFUNC(op_b0f0_0), 45296 }, /* CMPA */ { CPUFUNC(op_b0f8_0), 45304 }, /* CMPA */ { CPUFUNC(op_b0f9_0), 45305 }, /* CMPA */ { CPUFUNC(op_b0fa_0), 45306 }, /* CMPA */ { CPUFUNC(op_b0fb_0), 45307 }, /* CMPA */ { CPUFUNC(op_b0fc_0), 45308 }, /* CMPA */ { CPUFUNC(op_b100_0), 45312 }, /* EOR */ { CPUFUNC(op_b108_0), 45320 }, /* CMPM */ { CPUFUNC(op_b110_0), 45328 }, /* EOR */ { CPUFUNC(op_b118_0), 45336 }, /* EOR */ { CPUFUNC(op_b120_0), 45344 }, /* EOR */ { CPUFUNC(op_b128_0), 45352 }, /* EOR */ { CPUFUNC(op_b130_0), 45360 }, /* EOR */ { CPUFUNC(op_b138_0), 45368 }, /* EOR */ { CPUFUNC(op_b139_0), 45369 }, /* EOR */ { CPUFUNC(op_b140_0), 45376 }, /* EOR */ { CPUFUNC(op_b148_0), 45384 }, /* CMPM */ { CPUFUNC(op_b150_0), 45392 }, /* EOR */ { CPUFUNC(op_b158_0), 45400 }, /* EOR */ { CPUFUNC(op_b160_0), 45408 }, /* EOR */ { CPUFUNC(op_b168_0), 45416 }, /* EOR */ { CPUFUNC(op_b170_0), 45424 }, /* EOR */ { CPUFUNC(op_b178_0), 45432 }, /* EOR */ { CPUFUNC(op_b179_0), 45433 }, /* EOR */ { CPUFUNC(op_b180_0), 45440 }, /* EOR */ { CPUFUNC(op_b188_0), 45448 }, /* CMPM */ { CPUFUNC(op_b190_0), 45456 }, /* EOR */ { CPUFUNC(op_b198_0), 45464 }, /* EOR */ { CPUFUNC(op_b1a0_0), 45472 }, /* EOR */ { CPUFUNC(op_b1a8_0), 45480 }, /* EOR */ { CPUFUNC(op_b1b0_0), 45488 }, /* EOR */ { CPUFUNC(op_b1b8_0), 45496 }, /* EOR */ { CPUFUNC(op_b1b9_0), 45497 }, /* EOR */ { CPUFUNC(op_b1c0_0), 45504 }, /* CMPA */ { CPUFUNC(op_b1c8_0), 45512 }, /* CMPA */ { CPUFUNC(op_b1d0_0), 45520 }, /* CMPA */ { CPUFUNC(op_b1d8_0), 45528 }, /* CMPA */ { CPUFUNC(op_b1e0_0), 45536 }, /* CMPA */ { CPUFUNC(op_b1e8_0), 45544 }, /* CMPA */ { CPUFUNC(op_b1f0_0), 45552 }, /* CMPA */ { CPUFUNC(op_b1f8_0), 45560 }, /* CMPA */ { CPUFUNC(op_b1f9_0), 45561 }, /* CMPA */ { CPUFUNC(op_b1fa_0), 45562 }, /* CMPA */ { CPUFUNC(op_b1fb_0), 45563 }, /* CMPA */ { CPUFUNC(op_b1fc_0), 45564 }, /* CMPA */ { CPUFUNC(op_c000_0), 49152 }, /* AND */ { CPUFUNC(op_c010_0), 49168 }, /* AND */ { CPUFUNC(op_c018_0), 49176 }, /* AND */ { CPUFUNC(op_c020_0), 49184 }, /* AND */ { CPUFUNC(op_c028_0), 49192 }, /* AND */ { CPUFUNC(op_c030_0), 49200 }, /* AND */ { CPUFUNC(op_c038_0), 49208 }, /* AND */ { CPUFUNC(op_c039_0), 49209 }, /* AND */ { CPUFUNC(op_c03a_0), 49210 }, /* AND */ { CPUFUNC(op_c03b_0), 49211 }, /* AND */ { CPUFUNC(op_c03c_0), 49212 }, /* AND */ { CPUFUNC(op_c040_0), 49216 }, /* AND */ { CPUFUNC(op_c050_0), 49232 }, /* AND */ { CPUFUNC(op_c058_0), 49240 }, /* AND */ { CPUFUNC(op_c060_0), 49248 }, /* AND */ { CPUFUNC(op_c068_0), 49256 }, /* AND */ { CPUFUNC(op_c070_0), 49264 }, /* AND */ { CPUFUNC(op_c078_0), 49272 }, /* AND */ { CPUFUNC(op_c079_0), 49273 }, /* AND */ { CPUFUNC(op_c07a_0), 49274 }, /* AND */ { CPUFUNC(op_c07b_0), 49275 }, /* AND */ { CPUFUNC(op_c07c_0), 49276 }, /* AND */ { CPUFUNC(op_c080_0), 49280 }, /* AND */ { CPUFUNC(op_c090_0), 49296 }, /* AND */ { CPUFUNC(op_c098_0), 49304 }, /* AND */ { CPUFUNC(op_c0a0_0), 49312 }, /* AND */ { CPUFUNC(op_c0a8_0), 49320 }, /* AND */ { CPUFUNC(op_c0b0_0), 49328 }, /* AND */ { CPUFUNC(op_c0b8_0), 49336 }, /* AND */ { CPUFUNC(op_c0b9_0), 49337 }, /* AND */ { CPUFUNC(op_c0ba_0), 49338 }, /* AND */ { CPUFUNC(op_c0bb_0), 49339 }, /* AND */ { CPUFUNC(op_c0bc_0), 49340 }, /* AND */ { CPUFUNC(op_c0c0_0), 49344 }, /* MULU */ { CPUFUNC(op_c0d0_0), 49360 }, /* MULU */ { CPUFUNC(op_c0d8_0), 49368 }, /* MULU */ { CPUFUNC(op_c0e0_0), 49376 }, /* MULU */ { CPUFUNC(op_c0e8_0), 49384 }, /* MULU */ { CPUFUNC(op_c0f0_0), 49392 }, /* MULU */ { CPUFUNC(op_c0f8_0), 49400 }, /* MULU */ { CPUFUNC(op_c0f9_0), 49401 }, /* MULU */ { CPUFUNC(op_c0fa_0), 49402 }, /* MULU */ { CPUFUNC(op_c0fb_0), 49403 }, /* MULU */ { CPUFUNC(op_c0fc_0), 49404 }, /* MULU */ { CPUFUNC(op_c100_2), 49408 }, /* ABCD */ { CPUFUNC(op_c108_2), 49416 }, /* ABCD */ { CPUFUNC(op_c110_0), 49424 }, /* AND */ { CPUFUNC(op_c118_0), 49432 }, /* AND */ { CPUFUNC(op_c120_0), 49440 }, /* AND */ { CPUFUNC(op_c128_0), 49448 }, /* AND */ { CPUFUNC(op_c130_0), 49456 }, /* AND */ { CPUFUNC(op_c138_0), 49464 }, /* AND */ { CPUFUNC(op_c139_0), 49465 }, /* AND */ { CPUFUNC(op_c140_0), 49472 }, /* EXG */ { CPUFUNC(op_c148_0), 49480 }, /* EXG */ { CPUFUNC(op_c150_0), 49488 }, /* AND */ { CPUFUNC(op_c158_0), 49496 }, /* AND */ { CPUFUNC(op_c160_0), 49504 }, /* AND */ { CPUFUNC(op_c168_0), 49512 }, /* AND */ { CPUFUNC(op_c170_0), 49520 }, /* AND */ { CPUFUNC(op_c178_0), 49528 }, /* AND */ { CPUFUNC(op_c179_0), 49529 }, /* AND */ { CPUFUNC(op_c188_0), 49544 }, /* EXG */ { CPUFUNC(op_c190_0), 49552 }, /* AND */ { CPUFUNC(op_c198_0), 49560 }, /* AND */ { CPUFUNC(op_c1a0_0), 49568 }, /* AND */ { CPUFUNC(op_c1a8_0), 49576 }, /* AND */ { CPUFUNC(op_c1b0_0), 49584 }, /* AND */ { CPUFUNC(op_c1b8_0), 49592 }, /* AND */ { CPUFUNC(op_c1b9_0), 49593 }, /* AND */ { CPUFUNC(op_c1c0_0), 49600 }, /* MULS */ { CPUFUNC(op_c1d0_0), 49616 }, /* MULS */ { CPUFUNC(op_c1d8_0), 49624 }, /* MULS */ { CPUFUNC(op_c1e0_0), 49632 }, /* MULS */ { CPUFUNC(op_c1e8_0), 49640 }, /* MULS */ { CPUFUNC(op_c1f0_0), 49648 }, /* MULS */ { CPUFUNC(op_c1f8_0), 49656 }, /* MULS */ { CPUFUNC(op_c1f9_0), 49657 }, /* MULS */ { CPUFUNC(op_c1fa_0), 49658 }, /* MULS */ { CPUFUNC(op_c1fb_0), 49659 }, /* MULS */ { CPUFUNC(op_c1fc_0), 49660 }, /* MULS */ { CPUFUNC(op_d000_0), 53248 }, /* ADD */ { CPUFUNC(op_d010_0), 53264 }, /* ADD */ { CPUFUNC(op_d018_0), 53272 }, /* ADD */ { CPUFUNC(op_d020_0), 53280 }, /* ADD */ { CPUFUNC(op_d028_0), 53288 }, /* ADD */ { CPUFUNC(op_d030_0), 53296 }, /* ADD */ { CPUFUNC(op_d038_0), 53304 }, /* ADD */ { CPUFUNC(op_d039_0), 53305 }, /* ADD */ { CPUFUNC(op_d03a_0), 53306 }, /* ADD */ { CPUFUNC(op_d03b_0), 53307 }, /* ADD */ { CPUFUNC(op_d03c_0), 53308 }, /* ADD */ { CPUFUNC(op_d040_0), 53312 }, /* ADD */ { CPUFUNC(op_d048_0), 53320 }, /* ADD */ { CPUFUNC(op_d050_0), 53328 }, /* ADD */ { CPUFUNC(op_d058_0), 53336 }, /* ADD */ { CPUFUNC(op_d060_0), 53344 }, /* ADD */ { CPUFUNC(op_d068_0), 53352 }, /* ADD */ { CPUFUNC(op_d070_0), 53360 }, /* ADD */ { CPUFUNC(op_d078_0), 53368 }, /* ADD */ { CPUFUNC(op_d079_0), 53369 }, /* ADD */ { CPUFUNC(op_d07a_0), 53370 }, /* ADD */ { CPUFUNC(op_d07b_0), 53371 }, /* ADD */ { CPUFUNC(op_d07c_0), 53372 }, /* ADD */ { CPUFUNC(op_d080_0), 53376 }, /* ADD */ { CPUFUNC(op_d088_0), 53384 }, /* ADD */ { CPUFUNC(op_d090_0), 53392 }, /* ADD */ { CPUFUNC(op_d098_0), 53400 }, /* ADD */ { CPUFUNC(op_d0a0_0), 53408 }, /* ADD */ { CPUFUNC(op_d0a8_0), 53416 }, /* ADD */ { CPUFUNC(op_d0b0_0), 53424 }, /* ADD */ { CPUFUNC(op_d0b8_0), 53432 }, /* ADD */ { CPUFUNC(op_d0b9_0), 53433 }, /* ADD */ { CPUFUNC(op_d0ba_0), 53434 }, /* ADD */ { CPUFUNC(op_d0bb_0), 53435 }, /* ADD */ { CPUFUNC(op_d0bc_0), 53436 }, /* ADD */ { CPUFUNC(op_d0c0_0), 53440 }, /* ADDA */ { CPUFUNC(op_d0c8_0), 53448 }, /* ADDA */ { CPUFUNC(op_d0d0_0), 53456 }, /* ADDA */ { CPUFUNC(op_d0d8_0), 53464 }, /* ADDA */ { CPUFUNC(op_d0e0_0), 53472 }, /* ADDA */ { CPUFUNC(op_d0e8_0), 53480 }, /* ADDA */ { CPUFUNC(op_d0f0_0), 53488 }, /* ADDA */ { CPUFUNC(op_d0f8_0), 53496 }, /* ADDA */ { CPUFUNC(op_d0f9_0), 53497 }, /* ADDA */ { CPUFUNC(op_d0fa_0), 53498 }, /* ADDA */ { CPUFUNC(op_d0fb_0), 53499 }, /* ADDA */ { CPUFUNC(op_d0fc_0), 53500 }, /* ADDA */ { CPUFUNC(op_d100_0), 53504 }, /* ADDX */ { CPUFUNC(op_d108_0), 53512 }, /* ADDX */ { CPUFUNC(op_d110_0), 53520 }, /* ADD */ { CPUFUNC(op_d118_0), 53528 }, /* ADD */ { CPUFUNC(op_d120_0), 53536 }, /* ADD */ { CPUFUNC(op_d128_0), 53544 }, /* ADD */ { CPUFUNC(op_d130_0), 53552 }, /* ADD */ { CPUFUNC(op_d138_0), 53560 }, /* ADD */ { CPUFUNC(op_d139_0), 53561 }, /* ADD */ { CPUFUNC(op_d140_0), 53568 }, /* ADDX */ { CPUFUNC(op_d148_0), 53576 }, /* ADDX */ { CPUFUNC(op_d150_0), 53584 }, /* ADD */ { CPUFUNC(op_d158_0), 53592 }, /* ADD */ { CPUFUNC(op_d160_0), 53600 }, /* ADD */ { CPUFUNC(op_d168_0), 53608 }, /* ADD */ { CPUFUNC(op_d170_0), 53616 }, /* ADD */ { CPUFUNC(op_d178_0), 53624 }, /* ADD */ { CPUFUNC(op_d179_0), 53625 }, /* ADD */ { CPUFUNC(op_d180_0), 53632 }, /* ADDX */ { CPUFUNC(op_d188_0), 53640 }, /* ADDX */ { CPUFUNC(op_d190_0), 53648 }, /* ADD */ { CPUFUNC(op_d198_0), 53656 }, /* ADD */ { CPUFUNC(op_d1a0_0), 53664 }, /* ADD */ { CPUFUNC(op_d1a8_0), 53672 }, /* ADD */ { CPUFUNC(op_d1b0_0), 53680 }, /* ADD */ { CPUFUNC(op_d1b8_0), 53688 }, /* ADD */ { CPUFUNC(op_d1b9_0), 53689 }, /* ADD */ { CPUFUNC(op_d1c0_0), 53696 }, /* ADDA */ { CPUFUNC(op_d1c8_0), 53704 }, /* ADDA */ { CPUFUNC(op_d1d0_0), 53712 }, /* ADDA */ { CPUFUNC(op_d1d8_0), 53720 }, /* ADDA */ { CPUFUNC(op_d1e0_0), 53728 }, /* ADDA */ { CPUFUNC(op_d1e8_0), 53736 }, /* ADDA */ { CPUFUNC(op_d1f0_0), 53744 }, /* ADDA */ { CPUFUNC(op_d1f8_0), 53752 }, /* ADDA */ { CPUFUNC(op_d1f9_0), 53753 }, /* ADDA */ { CPUFUNC(op_d1fa_0), 53754 }, /* ADDA */ { CPUFUNC(op_d1fb_0), 53755 }, /* ADDA */ { CPUFUNC(op_d1fc_0), 53756 }, /* ADDA */ { CPUFUNC(op_e000_0), 57344 }, /* ASR */ { CPUFUNC(op_e008_0), 57352 }, /* LSR */ { CPUFUNC(op_e010_0), 57360 }, /* ROXR */ { CPUFUNC(op_e018_0), 57368 }, /* ROR */ { CPUFUNC(op_e020_0), 57376 }, /* ASR */ { CPUFUNC(op_e028_0), 57384 }, /* LSR */ { CPUFUNC(op_e030_0), 57392 }, /* ROXR */ { CPUFUNC(op_e038_0), 57400 }, /* ROR */ { CPUFUNC(op_e040_0), 57408 }, /* ASR */ { CPUFUNC(op_e048_0), 57416 }, /* LSR */ { CPUFUNC(op_e050_0), 57424 }, /* ROXR */ { CPUFUNC(op_e058_0), 57432 }, /* ROR */ { CPUFUNC(op_e060_0), 57440 }, /* ASR */ { CPUFUNC(op_e068_0), 57448 }, /* LSR */ { CPUFUNC(op_e070_0), 57456 }, /* ROXR */ { CPUFUNC(op_e078_0), 57464 }, /* ROR */ { CPUFUNC(op_e080_0), 57472 }, /* ASR */ { CPUFUNC(op_e088_0), 57480 }, /* LSR */ { CPUFUNC(op_e090_0), 57488 }, /* ROXR */ { CPUFUNC(op_e098_0), 57496 }, /* ROR */ { CPUFUNC(op_e0a0_0), 57504 }, /* ASR */ { CPUFUNC(op_e0a8_0), 57512 }, /* LSR */ { CPUFUNC(op_e0b0_0), 57520 }, /* ROXR */ { CPUFUNC(op_e0b8_0), 57528 }, /* ROR */ { CPUFUNC(op_e0d0_0), 57552 }, /* ASRW */ { CPUFUNC(op_e0d8_0), 57560 }, /* ASRW */ { CPUFUNC(op_e0e0_0), 57568 }, /* ASRW */ { CPUFUNC(op_e0e8_0), 57576 }, /* ASRW */ { CPUFUNC(op_e0f0_0), 57584 }, /* ASRW */ { CPUFUNC(op_e0f8_0), 57592 }, /* ASRW */ { CPUFUNC(op_e0f9_0), 57593 }, /* ASRW */ { CPUFUNC(op_e100_0), 57600 }, /* ASL */ { CPUFUNC(op_e108_0), 57608 }, /* LSL */ { CPUFUNC(op_e110_0), 57616 }, /* ROXL */ { CPUFUNC(op_e118_0), 57624 }, /* ROL */ { CPUFUNC(op_e120_0), 57632 }, /* ASL */ { CPUFUNC(op_e128_0), 57640 }, /* LSL */ { CPUFUNC(op_e130_0), 57648 }, /* ROXL */ { CPUFUNC(op_e138_0), 57656 }, /* ROL */ { CPUFUNC(op_e140_0), 57664 }, /* ASL */ { CPUFUNC(op_e148_0), 57672 }, /* LSL */ { CPUFUNC(op_e150_0), 57680 }, /* ROXL */ { CPUFUNC(op_e158_0), 57688 }, /* ROL */ { CPUFUNC(op_e160_0), 57696 }, /* ASL */ { CPUFUNC(op_e168_0), 57704 }, /* LSL */ { CPUFUNC(op_e170_0), 57712 }, /* ROXL */ { CPUFUNC(op_e178_0), 57720 }, /* ROL */ { CPUFUNC(op_e180_0), 57728 }, /* ASL */ { CPUFUNC(op_e188_0), 57736 }, /* LSL */ { CPUFUNC(op_e190_0), 57744 }, /* ROXL */ { CPUFUNC(op_e198_0), 57752 }, /* ROL */ { CPUFUNC(op_e1a0_0), 57760 }, /* ASL */ { CPUFUNC(op_e1a8_0), 57768 }, /* LSL */ { CPUFUNC(op_e1b0_0), 57776 }, /* ROXL */ { CPUFUNC(op_e1b8_0), 57784 }, /* ROL */ { CPUFUNC(op_e1d0_0), 57808 }, /* ASLW */ { CPUFUNC(op_e1d8_0), 57816 }, /* ASLW */ { CPUFUNC(op_e1e0_0), 57824 }, /* ASLW */ { CPUFUNC(op_e1e8_0), 57832 }, /* ASLW */ { CPUFUNC(op_e1f0_0), 57840 }, /* ASLW */ { CPUFUNC(op_e1f8_0), 57848 }, /* ASLW */ { CPUFUNC(op_e1f9_0), 57849 }, /* ASLW */ { CPUFUNC(op_e2d0_0), 58064 }, /* LSRW */ { CPUFUNC(op_e2d8_0), 58072 }, /* LSRW */ { CPUFUNC(op_e2e0_0), 58080 }, /* LSRW */ { CPUFUNC(op_e2e8_0), 58088 }, /* LSRW */ { CPUFUNC(op_e2f0_0), 58096 }, /* LSRW */ { CPUFUNC(op_e2f8_0), 58104 }, /* LSRW */ { CPUFUNC(op_e2f9_0), 58105 }, /* LSRW */ { CPUFUNC(op_e3d0_0), 58320 }, /* LSLW */ { CPUFUNC(op_e3d8_0), 58328 }, /* LSLW */ { CPUFUNC(op_e3e0_0), 58336 }, /* LSLW */ { CPUFUNC(op_e3e8_0), 58344 }, /* LSLW */ { CPUFUNC(op_e3f0_0), 58352 }, /* LSLW */ { CPUFUNC(op_e3f8_0), 58360 }, /* LSLW */ { CPUFUNC(op_e3f9_0), 58361 }, /* LSLW */ { CPUFUNC(op_e4d0_0), 58576 }, /* ROXRW */ { CPUFUNC(op_e4d8_0), 58584 }, /* ROXRW */ { CPUFUNC(op_e4e0_0), 58592 }, /* ROXRW */ { CPUFUNC(op_e4e8_0), 58600 }, /* ROXRW */ { CPUFUNC(op_e4f0_0), 58608 }, /* ROXRW */ { CPUFUNC(op_e4f8_0), 58616 }, /* ROXRW */ { CPUFUNC(op_e4f9_0), 58617 }, /* ROXRW */ { CPUFUNC(op_e5d0_0), 58832 }, /* ROXLW */ { CPUFUNC(op_e5d8_0), 58840 }, /* ROXLW */ { CPUFUNC(op_e5e0_0), 58848 }, /* ROXLW */ { CPUFUNC(op_e5e8_0), 58856 }, /* ROXLW */ { CPUFUNC(op_e5f0_0), 58864 }, /* ROXLW */ { CPUFUNC(op_e5f8_0), 58872 }, /* ROXLW */ { CPUFUNC(op_e5f9_0), 58873 }, /* ROXLW */ { CPUFUNC(op_e6d0_0), 59088 }, /* RORW */ { CPUFUNC(op_e6d8_0), 59096 }, /* RORW */ { CPUFUNC(op_e6e0_0), 59104 }, /* RORW */ { CPUFUNC(op_e6e8_0), 59112 }, /* RORW */ { CPUFUNC(op_e6f0_0), 59120 }, /* RORW */ { CPUFUNC(op_e6f8_0), 59128 }, /* RORW */ { CPUFUNC(op_e6f9_0), 59129 }, /* RORW */ { CPUFUNC(op_e7d0_0), 59344 }, /* ROLW */ { CPUFUNC(op_e7d8_0), 59352 }, /* ROLW */ { CPUFUNC(op_e7e0_0), 59360 }, /* ROLW */ { CPUFUNC(op_e7e8_0), 59368 }, /* ROLW */ { CPUFUNC(op_e7f0_0), 59376 }, /* ROLW */ { CPUFUNC(op_e7f8_0), 59384 }, /* ROLW */ { CPUFUNC(op_e7f9_0), 59385 }, /* ROLW */ { CPUFUNC(op_e8c0_0), 59584 }, /* BFTST */ { CPUFUNC(op_e8d0_0), 59600 }, /* BFTST */ { CPUFUNC(op_e8e8_0), 59624 }, /* BFTST */ { CPUFUNC(op_e8f0_0), 59632 }, /* BFTST */ { CPUFUNC(op_e8f8_0), 59640 }, /* BFTST */ { CPUFUNC(op_e8f9_0), 59641 }, /* BFTST */ { CPUFUNC(op_e8fa_0), 59642 }, /* BFTST */ { CPUFUNC(op_e8fb_0), 59643 }, /* BFTST */ { CPUFUNC(op_e9c0_0), 59840 }, /* BFEXTU */ { CPUFUNC(op_e9d0_0), 59856 }, /* BFEXTU */ { CPUFUNC(op_e9e8_0), 59880 }, /* BFEXTU */ { CPUFUNC(op_e9f0_0), 59888 }, /* BFEXTU */ { CPUFUNC(op_e9f8_0), 59896 }, /* BFEXTU */ { CPUFUNC(op_e9f9_0), 59897 }, /* BFEXTU */ { CPUFUNC(op_e9fa_0), 59898 }, /* BFEXTU */ { CPUFUNC(op_e9fb_0), 59899 }, /* BFEXTU */ { CPUFUNC(op_eac0_0), 60096 }, /* BFCHG */ { CPUFUNC(op_ead0_0), 60112 }, /* BFCHG */ { CPUFUNC(op_eae8_0), 60136 }, /* BFCHG */ { CPUFUNC(op_eaf0_0), 60144 }, /* BFCHG */ { CPUFUNC(op_eaf8_0), 60152 }, /* BFCHG */ { CPUFUNC(op_eaf9_0), 60153 }, /* BFCHG */ { CPUFUNC(op_ebc0_0), 60352 }, /* BFEXTS */ { CPUFUNC(op_ebd0_0), 60368 }, /* BFEXTS */ { CPUFUNC(op_ebe8_0), 60392 }, /* BFEXTS */ { CPUFUNC(op_ebf0_0), 60400 }, /* BFEXTS */ { CPUFUNC(op_ebf8_0), 60408 }, /* BFEXTS */ { CPUFUNC(op_ebf9_0), 60409 }, /* BFEXTS */ { CPUFUNC(op_ebfa_0), 60410 }, /* BFEXTS */ { CPUFUNC(op_ebfb_0), 60411 }, /* BFEXTS */ { CPUFUNC(op_ecc0_0), 60608 }, /* BFCLR */ { CPUFUNC(op_ecd0_0), 60624 }, /* BFCLR */ { CPUFUNC(op_ece8_0), 60648 }, /* BFCLR */ { CPUFUNC(op_ecf0_0), 60656 }, /* BFCLR */ { CPUFUNC(op_ecf8_0), 60664 }, /* BFCLR */ { CPUFUNC(op_ecf9_0), 60665 }, /* BFCLR */ { CPUFUNC(op_edc0_0), 60864 }, /* BFFFO */ { CPUFUNC(op_edd0_0), 60880 }, /* BFFFO */ { CPUFUNC(op_ede8_0), 60904 }, /* BFFFO */ { CPUFUNC(op_edf0_0), 60912 }, /* BFFFO */ { CPUFUNC(op_edf8_0), 60920 }, /* BFFFO */ { CPUFUNC(op_edf9_0), 60921 }, /* BFFFO */ { CPUFUNC(op_edfa_0), 60922 }, /* BFFFO */ { CPUFUNC(op_edfb_0), 60923 }, /* BFFFO */ { CPUFUNC(op_eec0_0), 61120 }, /* BFSET */ { CPUFUNC(op_eed0_0), 61136 }, /* BFSET */ { CPUFUNC(op_eee8_0), 61160 }, /* BFSET */ { CPUFUNC(op_eef0_0), 61168 }, /* BFSET */ { CPUFUNC(op_eef8_0), 61176 }, /* BFSET */ { CPUFUNC(op_eef9_0), 61177 }, /* BFSET */ { CPUFUNC(op_efc0_0), 61376 }, /* BFINS */ { CPUFUNC(op_efd0_0), 61392 }, /* BFINS */ { CPUFUNC(op_efe8_0), 61416 }, /* BFINS */ { CPUFUNC(op_eff0_0), 61424 }, /* BFINS */ { CPUFUNC(op_eff8_0), 61432 }, /* BFINS */ { CPUFUNC(op_eff9_0), 61433 }, /* BFINS */ { CPUFUNC(op_f200_0), 61952 }, /* FPP */ { CPUFUNC(op_f208_0), 61960 }, /* FPP */ { CPUFUNC(op_f210_0), 61968 }, /* FPP */ { CPUFUNC(op_f218_0), 61976 }, /* FPP */ { CPUFUNC(op_f220_0), 61984 }, /* FPP */ { CPUFUNC(op_f228_0), 61992 }, /* FPP */ { CPUFUNC(op_f230_0), 62000 }, /* FPP */ { CPUFUNC(op_f238_0), 62008 }, /* FPP */ { CPUFUNC(op_f239_0), 62009 }, /* FPP */ { CPUFUNC(op_f23a_0), 62010 }, /* FPP */ { CPUFUNC(op_f23b_0), 62011 }, /* FPP */ { CPUFUNC(op_f23c_0), 62012 }, /* FPP */ { CPUFUNC(op_f240_0), 62016 }, /* FScc */ { CPUFUNC(op_f248_0), 62024 }, /* FDBcc */ { CPUFUNC(op_f250_0), 62032 }, /* FScc */ { CPUFUNC(op_f258_0), 62040 }, /* FScc */ { CPUFUNC(op_f260_0), 62048 }, /* FScc */ { CPUFUNC(op_f268_0), 62056 }, /* FScc */ { CPUFUNC(op_f270_0), 62064 }, /* FScc */ { CPUFUNC(op_f278_0), 62072 }, /* FScc */ { CPUFUNC(op_f279_0), 62073 }, /* FScc */ { CPUFUNC(op_f27a_0), 62074 }, /* FTRAPcc */ { CPUFUNC(op_f27b_0), 62075 }, /* FTRAPcc */ { CPUFUNC(op_f27c_0), 62076 }, /* FTRAPcc */ { CPUFUNC(op_f280_0), 62080 }, /* FBcc */ { CPUFUNC(op_f2c0_0), 62144 }, /* FBcc */ { CPUFUNC(op_f310_0), 62224 }, /* FSAVE */ { CPUFUNC(op_f320_0), 62240 }, /* FSAVE */ { CPUFUNC(op_f328_0), 62248 }, /* FSAVE */ { CPUFUNC(op_f330_0), 62256 }, /* FSAVE */ { CPUFUNC(op_f338_0), 62264 }, /* FSAVE */ { CPUFUNC(op_f339_0), 62265 }, /* FSAVE */ { CPUFUNC(op_f350_0), 62288 }, /* FRESTORE */ { CPUFUNC(op_f358_0), 62296 }, /* FRESTORE */ { CPUFUNC(op_f368_0), 62312 }, /* FRESTORE */ { CPUFUNC(op_f370_0), 62320 }, /* FRESTORE */ { CPUFUNC(op_f378_0), 62328 }, /* FRESTORE */ { CPUFUNC(op_f379_0), 62329 }, /* FRESTORE */ { CPUFUNC(op_f37a_0), 62330 }, /* FRESTORE */ { CPUFUNC(op_f37b_0), 62331 }, /* FRESTORE */ { 0, 0 }}; #endif /* CPUEMU_68000_ONLY */ #ifndef CPUEMU_68000_ONLY const struct cputbl CPUFUNC(op_smalltbl_4)[] = { { CPUFUNC(op_0000_0), 0 }, /* OR */ { CPUFUNC(op_0010_0), 16 }, /* OR */ { CPUFUNC(op_0018_0), 24 }, /* OR */ { CPUFUNC(op_0020_0), 32 }, /* OR */ { CPUFUNC(op_0028_0), 40 }, /* OR */ { CPUFUNC(op_0030_4), 48 }, /* OR */ { CPUFUNC(op_0038_0), 56 }, /* OR */ { CPUFUNC(op_0039_0), 57 }, /* OR */ { CPUFUNC(op_003c_0), 60 }, /* ORSR */ { CPUFUNC(op_0040_0), 64 }, /* OR */ { CPUFUNC(op_0050_0), 80 }, /* OR */ { CPUFUNC(op_0058_0), 88 }, /* OR */ { CPUFUNC(op_0060_0), 96 }, /* OR */ { CPUFUNC(op_0068_0), 104 }, /* OR */ { CPUFUNC(op_0070_4), 112 }, /* OR */ { CPUFUNC(op_0078_0), 120 }, /* OR */ { CPUFUNC(op_0079_0), 121 }, /* OR */ { CPUFUNC(op_007c_0), 124 }, /* ORSR */ { CPUFUNC(op_0080_0), 128 }, /* OR */ { CPUFUNC(op_0090_0), 144 }, /* OR */ { CPUFUNC(op_0098_0), 152 }, /* OR */ { CPUFUNC(op_00a0_0), 160 }, /* OR */ { CPUFUNC(op_00a8_0), 168 }, /* OR */ { CPUFUNC(op_00b0_4), 176 }, /* OR */ { CPUFUNC(op_00b8_0), 184 }, /* OR */ { CPUFUNC(op_00b9_0), 185 }, /* OR */ { CPUFUNC(op_0100_0), 256 }, /* BTST */ { CPUFUNC(op_0108_0), 264 }, /* MVPMR */ { CPUFUNC(op_0110_0), 272 }, /* BTST */ { CPUFUNC(op_0118_0), 280 }, /* BTST */ { CPUFUNC(op_0120_0), 288 }, /* BTST */ { CPUFUNC(op_0128_0), 296 }, /* BTST */ { CPUFUNC(op_0130_4), 304 }, /* BTST */ { CPUFUNC(op_0138_0), 312 }, /* BTST */ { CPUFUNC(op_0139_0), 313 }, /* BTST */ { CPUFUNC(op_013a_0), 314 }, /* BTST */ { CPUFUNC(op_013b_4), 315 }, /* BTST */ { CPUFUNC(op_013c_0), 316 }, /* BTST */ { CPUFUNC(op_0140_0), 320 }, /* BCHG */ { CPUFUNC(op_0148_0), 328 }, /* MVPMR */ { CPUFUNC(op_0150_0), 336 }, /* BCHG */ { CPUFUNC(op_0158_0), 344 }, /* BCHG */ { CPUFUNC(op_0160_0), 352 }, /* BCHG */ { CPUFUNC(op_0168_0), 360 }, /* BCHG */ { CPUFUNC(op_0170_4), 368 }, /* BCHG */ { CPUFUNC(op_0178_0), 376 }, /* BCHG */ { CPUFUNC(op_0179_0), 377 }, /* BCHG */ { CPUFUNC(op_017a_0), 378 }, /* BCHG */ { CPUFUNC(op_017b_4), 379 }, /* BCHG */ { CPUFUNC(op_0180_0), 384 }, /* BCLR */ { CPUFUNC(op_0188_0), 392 }, /* MVPRM */ { CPUFUNC(op_0190_0), 400 }, /* BCLR */ { CPUFUNC(op_0198_0), 408 }, /* BCLR */ { CPUFUNC(op_01a0_0), 416 }, /* BCLR */ { CPUFUNC(op_01a8_0), 424 }, /* BCLR */ { CPUFUNC(op_01b0_4), 432 }, /* BCLR */ { CPUFUNC(op_01b8_0), 440 }, /* BCLR */ { CPUFUNC(op_01b9_0), 441 }, /* BCLR */ { CPUFUNC(op_01ba_0), 442 }, /* BCLR */ { CPUFUNC(op_01bb_4), 443 }, /* BCLR */ { CPUFUNC(op_01c0_0), 448 }, /* BSET */ { CPUFUNC(op_01c8_0), 456 }, /* MVPRM */ { CPUFUNC(op_01d0_0), 464 }, /* BSET */ { CPUFUNC(op_01d8_0), 472 }, /* BSET */ { CPUFUNC(op_01e0_0), 480 }, /* BSET */ { CPUFUNC(op_01e8_0), 488 }, /* BSET */ { CPUFUNC(op_01f0_4), 496 }, /* BSET */ { CPUFUNC(op_01f8_0), 504 }, /* BSET */ { CPUFUNC(op_01f9_0), 505 }, /* BSET */ { CPUFUNC(op_01fa_0), 506 }, /* BSET */ { CPUFUNC(op_01fb_4), 507 }, /* BSET */ { CPUFUNC(op_0200_0), 512 }, /* AND */ { CPUFUNC(op_0210_0), 528 }, /* AND */ { CPUFUNC(op_0218_0), 536 }, /* AND */ { CPUFUNC(op_0220_0), 544 }, /* AND */ { CPUFUNC(op_0228_0), 552 }, /* AND */ { CPUFUNC(op_0230_4), 560 }, /* AND */ { CPUFUNC(op_0238_0), 568 }, /* AND */ { CPUFUNC(op_0239_0), 569 }, /* AND */ { CPUFUNC(op_023c_0), 572 }, /* ANDSR */ { CPUFUNC(op_0240_0), 576 }, /* AND */ { CPUFUNC(op_0250_0), 592 }, /* AND */ { CPUFUNC(op_0258_0), 600 }, /* AND */ { CPUFUNC(op_0260_0), 608 }, /* AND */ { CPUFUNC(op_0268_0), 616 }, /* AND */ { CPUFUNC(op_0270_4), 624 }, /* AND */ { CPUFUNC(op_0278_0), 632 }, /* AND */ { CPUFUNC(op_0279_0), 633 }, /* AND */ { CPUFUNC(op_027c_0), 636 }, /* ANDSR */ { CPUFUNC(op_0280_0), 640 }, /* AND */ { CPUFUNC(op_0290_0), 656 }, /* AND */ { CPUFUNC(op_0298_0), 664 }, /* AND */ { CPUFUNC(op_02a0_0), 672 }, /* AND */ { CPUFUNC(op_02a8_0), 680 }, /* AND */ { CPUFUNC(op_02b0_4), 688 }, /* AND */ { CPUFUNC(op_02b8_0), 696 }, /* AND */ { CPUFUNC(op_02b9_0), 697 }, /* AND */ { CPUFUNC(op_0400_0), 1024 }, /* SUB */ { CPUFUNC(op_0410_0), 1040 }, /* SUB */ { CPUFUNC(op_0418_0), 1048 }, /* SUB */ { CPUFUNC(op_0420_0), 1056 }, /* SUB */ { CPUFUNC(op_0428_0), 1064 }, /* SUB */ { CPUFUNC(op_0430_4), 1072 }, /* SUB */ { CPUFUNC(op_0438_0), 1080 }, /* SUB */ { CPUFUNC(op_0439_0), 1081 }, /* SUB */ { CPUFUNC(op_0440_0), 1088 }, /* SUB */ { CPUFUNC(op_0450_0), 1104 }, /* SUB */ { CPUFUNC(op_0458_0), 1112 }, /* SUB */ { CPUFUNC(op_0460_0), 1120 }, /* SUB */ { CPUFUNC(op_0468_0), 1128 }, /* SUB */ { CPUFUNC(op_0470_4), 1136 }, /* SUB */ { CPUFUNC(op_0478_0), 1144 }, /* SUB */ { CPUFUNC(op_0479_0), 1145 }, /* SUB */ { CPUFUNC(op_0480_0), 1152 }, /* SUB */ { CPUFUNC(op_0490_0), 1168 }, /* SUB */ { CPUFUNC(op_0498_0), 1176 }, /* SUB */ { CPUFUNC(op_04a0_0), 1184 }, /* SUB */ { CPUFUNC(op_04a8_0), 1192 }, /* SUB */ { CPUFUNC(op_04b0_4), 1200 }, /* SUB */ { CPUFUNC(op_04b8_0), 1208 }, /* SUB */ { CPUFUNC(op_04b9_0), 1209 }, /* SUB */ { CPUFUNC(op_0600_0), 1536 }, /* ADD */ { CPUFUNC(op_0610_0), 1552 }, /* ADD */ { CPUFUNC(op_0618_0), 1560 }, /* ADD */ { CPUFUNC(op_0620_0), 1568 }, /* ADD */ { CPUFUNC(op_0628_0), 1576 }, /* ADD */ { CPUFUNC(op_0630_4), 1584 }, /* ADD */ { CPUFUNC(op_0638_0), 1592 }, /* ADD */ { CPUFUNC(op_0639_0), 1593 }, /* ADD */ { CPUFUNC(op_0640_0), 1600 }, /* ADD */ { CPUFUNC(op_0650_0), 1616 }, /* ADD */ { CPUFUNC(op_0658_0), 1624 }, /* ADD */ { CPUFUNC(op_0660_0), 1632 }, /* ADD */ { CPUFUNC(op_0668_0), 1640 }, /* ADD */ { CPUFUNC(op_0670_4), 1648 }, /* ADD */ { CPUFUNC(op_0678_0), 1656 }, /* ADD */ { CPUFUNC(op_0679_0), 1657 }, /* ADD */ { CPUFUNC(op_0680_0), 1664 }, /* ADD */ { CPUFUNC(op_0690_0), 1680 }, /* ADD */ { CPUFUNC(op_0698_0), 1688 }, /* ADD */ { CPUFUNC(op_06a0_0), 1696 }, /* ADD */ { CPUFUNC(op_06a8_0), 1704 }, /* ADD */ { CPUFUNC(op_06b0_4), 1712 }, /* ADD */ { CPUFUNC(op_06b8_0), 1720 }, /* ADD */ { CPUFUNC(op_06b9_0), 1721 }, /* ADD */ { CPUFUNC(op_0800_0), 2048 }, /* BTST */ { CPUFUNC(op_0810_0), 2064 }, /* BTST */ { CPUFUNC(op_0818_0), 2072 }, /* BTST */ { CPUFUNC(op_0820_0), 2080 }, /* BTST */ { CPUFUNC(op_0828_0), 2088 }, /* BTST */ { CPUFUNC(op_0830_4), 2096 }, /* BTST */ { CPUFUNC(op_0838_0), 2104 }, /* BTST */ { CPUFUNC(op_0839_0), 2105 }, /* BTST */ { CPUFUNC(op_083a_0), 2106 }, /* BTST */ { CPUFUNC(op_083b_4), 2107 }, /* BTST */ { CPUFUNC(op_083c_0), 2108 }, /* BTST */ { CPUFUNC(op_0840_0), 2112 }, /* BCHG */ { CPUFUNC(op_0850_0), 2128 }, /* BCHG */ { CPUFUNC(op_0858_0), 2136 }, /* BCHG */ { CPUFUNC(op_0860_0), 2144 }, /* BCHG */ { CPUFUNC(op_0868_0), 2152 }, /* BCHG */ { CPUFUNC(op_0870_4), 2160 }, /* BCHG */ { CPUFUNC(op_0878_0), 2168 }, /* BCHG */ { CPUFUNC(op_0879_0), 2169 }, /* BCHG */ { CPUFUNC(op_087a_0), 2170 }, /* BCHG */ { CPUFUNC(op_087b_4), 2171 }, /* BCHG */ { CPUFUNC(op_0880_0), 2176 }, /* BCLR */ { CPUFUNC(op_0890_0), 2192 }, /* BCLR */ { CPUFUNC(op_0898_0), 2200 }, /* BCLR */ { CPUFUNC(op_08a0_0), 2208 }, /* BCLR */ { CPUFUNC(op_08a8_0), 2216 }, /* BCLR */ { CPUFUNC(op_08b0_4), 2224 }, /* BCLR */ { CPUFUNC(op_08b8_0), 2232 }, /* BCLR */ { CPUFUNC(op_08b9_0), 2233 }, /* BCLR */ { CPUFUNC(op_08ba_0), 2234 }, /* BCLR */ { CPUFUNC(op_08bb_4), 2235 }, /* BCLR */ { CPUFUNC(op_08c0_0), 2240 }, /* BSET */ { CPUFUNC(op_08d0_0), 2256 }, /* BSET */ { CPUFUNC(op_08d8_0), 2264 }, /* BSET */ { CPUFUNC(op_08e0_0), 2272 }, /* BSET */ { CPUFUNC(op_08e8_0), 2280 }, /* BSET */ { CPUFUNC(op_08f0_4), 2288 }, /* BSET */ { CPUFUNC(op_08f8_0), 2296 }, /* BSET */ { CPUFUNC(op_08f9_0), 2297 }, /* BSET */ { CPUFUNC(op_08fa_0), 2298 }, /* BSET */ { CPUFUNC(op_08fb_4), 2299 }, /* BSET */ { CPUFUNC(op_0a00_0), 2560 }, /* EOR */ { CPUFUNC(op_0a10_0), 2576 }, /* EOR */ { CPUFUNC(op_0a18_0), 2584 }, /* EOR */ { CPUFUNC(op_0a20_0), 2592 }, /* EOR */ { CPUFUNC(op_0a28_0), 2600 }, /* EOR */ { CPUFUNC(op_0a30_4), 2608 }, /* EOR */ { CPUFUNC(op_0a38_0), 2616 }, /* EOR */ { CPUFUNC(op_0a39_0), 2617 }, /* EOR */ { CPUFUNC(op_0a3c_0), 2620 }, /* EORSR */ { CPUFUNC(op_0a40_0), 2624 }, /* EOR */ { CPUFUNC(op_0a50_0), 2640 }, /* EOR */ { CPUFUNC(op_0a58_0), 2648 }, /* EOR */ { CPUFUNC(op_0a60_0), 2656 }, /* EOR */ { CPUFUNC(op_0a68_0), 2664 }, /* EOR */ { CPUFUNC(op_0a70_4), 2672 }, /* EOR */ { CPUFUNC(op_0a78_0), 2680 }, /* EOR */ { CPUFUNC(op_0a79_0), 2681 }, /* EOR */ { CPUFUNC(op_0a7c_0), 2684 }, /* EORSR */ { CPUFUNC(op_0a80_0), 2688 }, /* EOR */ { CPUFUNC(op_0a90_0), 2704 }, /* EOR */ { CPUFUNC(op_0a98_0), 2712 }, /* EOR */ { CPUFUNC(op_0aa0_0), 2720 }, /* EOR */ { CPUFUNC(op_0aa8_0), 2728 }, /* EOR */ { CPUFUNC(op_0ab0_4), 2736 }, /* EOR */ { CPUFUNC(op_0ab8_0), 2744 }, /* EOR */ { CPUFUNC(op_0ab9_0), 2745 }, /* EOR */ { CPUFUNC(op_0c00_0), 3072 }, /* CMP */ { CPUFUNC(op_0c10_0), 3088 }, /* CMP */ { CPUFUNC(op_0c18_0), 3096 }, /* CMP */ { CPUFUNC(op_0c20_0), 3104 }, /* CMP */ { CPUFUNC(op_0c28_0), 3112 }, /* CMP */ { CPUFUNC(op_0c30_4), 3120 }, /* CMP */ { CPUFUNC(op_0c38_0), 3128 }, /* CMP */ { CPUFUNC(op_0c39_0), 3129 }, /* CMP */ { CPUFUNC(op_0c40_0), 3136 }, /* CMP */ { CPUFUNC(op_0c50_0), 3152 }, /* CMP */ { CPUFUNC(op_0c58_0), 3160 }, /* CMP */ { CPUFUNC(op_0c60_0), 3168 }, /* CMP */ { CPUFUNC(op_0c68_0), 3176 }, /* CMP */ { CPUFUNC(op_0c70_4), 3184 }, /* CMP */ { CPUFUNC(op_0c78_0), 3192 }, /* CMP */ { CPUFUNC(op_0c79_0), 3193 }, /* CMP */ { CPUFUNC(op_0c80_0), 3200 }, /* CMP */ { CPUFUNC(op_0c90_0), 3216 }, /* CMP */ { CPUFUNC(op_0c98_0), 3224 }, /* CMP */ { CPUFUNC(op_0ca0_0), 3232 }, /* CMP */ { CPUFUNC(op_0ca8_0), 3240 }, /* CMP */ { CPUFUNC(op_0cb0_4), 3248 }, /* CMP */ { CPUFUNC(op_0cb8_0), 3256 }, /* CMP */ { CPUFUNC(op_0cb9_0), 3257 }, /* CMP */ { CPUFUNC(op_1000_0), 4096 }, /* MOVE */ { CPUFUNC(op_1010_0), 4112 }, /* MOVE */ { CPUFUNC(op_1018_0), 4120 }, /* MOVE */ { CPUFUNC(op_1020_0), 4128 }, /* MOVE */ { CPUFUNC(op_1028_0), 4136 }, /* MOVE */ { CPUFUNC(op_1030_4), 4144 }, /* MOVE */ { CPUFUNC(op_1038_0), 4152 }, /* MOVE */ { CPUFUNC(op_1039_0), 4153 }, /* MOVE */ { CPUFUNC(op_103a_0), 4154 }, /* MOVE */ { CPUFUNC(op_103b_4), 4155 }, /* MOVE */ { CPUFUNC(op_103c_0), 4156 }, /* MOVE */ { CPUFUNC(op_1080_0), 4224 }, /* MOVE */ { CPUFUNC(op_1090_0), 4240 }, /* MOVE */ { CPUFUNC(op_1098_0), 4248 }, /* MOVE */ { CPUFUNC(op_10a0_0), 4256 }, /* MOVE */ { CPUFUNC(op_10a8_0), 4264 }, /* MOVE */ { CPUFUNC(op_10b0_4), 4272 }, /* MOVE */ { CPUFUNC(op_10b8_0), 4280 }, /* MOVE */ { CPUFUNC(op_10b9_0), 4281 }, /* MOVE */ { CPUFUNC(op_10ba_0), 4282 }, /* MOVE */ { CPUFUNC(op_10bb_4), 4283 }, /* MOVE */ { CPUFUNC(op_10bc_0), 4284 }, /* MOVE */ { CPUFUNC(op_10c0_0), 4288 }, /* MOVE */ { CPUFUNC(op_10d0_0), 4304 }, /* MOVE */ { CPUFUNC(op_10d8_0), 4312 }, /* MOVE */ { CPUFUNC(op_10e0_0), 4320 }, /* MOVE */ { CPUFUNC(op_10e8_0), 4328 }, /* MOVE */ { CPUFUNC(op_10f0_4), 4336 }, /* MOVE */ { CPUFUNC(op_10f8_0), 4344 }, /* MOVE */ { CPUFUNC(op_10f9_0), 4345 }, /* MOVE */ { CPUFUNC(op_10fa_0), 4346 }, /* MOVE */ { CPUFUNC(op_10fb_4), 4347 }, /* MOVE */ { CPUFUNC(op_10fc_0), 4348 }, /* MOVE */ { CPUFUNC(op_1100_0), 4352 }, /* MOVE */ { CPUFUNC(op_1110_0), 4368 }, /* MOVE */ { CPUFUNC(op_1118_0), 4376 }, /* MOVE */ { CPUFUNC(op_1120_0), 4384 }, /* MOVE */ { CPUFUNC(op_1128_0), 4392 }, /* MOVE */ { CPUFUNC(op_1130_4), 4400 }, /* MOVE */ { CPUFUNC(op_1138_0), 4408 }, /* MOVE */ { CPUFUNC(op_1139_0), 4409 }, /* MOVE */ { CPUFUNC(op_113a_0), 4410 }, /* MOVE */ { CPUFUNC(op_113b_4), 4411 }, /* MOVE */ { CPUFUNC(op_113c_0), 4412 }, /* MOVE */ { CPUFUNC(op_1140_0), 4416 }, /* MOVE */ { CPUFUNC(op_1150_0), 4432 }, /* MOVE */ { CPUFUNC(op_1158_0), 4440 }, /* MOVE */ { CPUFUNC(op_1160_0), 4448 }, /* MOVE */ { CPUFUNC(op_1168_0), 4456 }, /* MOVE */ { CPUFUNC(op_1170_4), 4464 }, /* MOVE */ { CPUFUNC(op_1178_0), 4472 }, /* MOVE */ { CPUFUNC(op_1179_0), 4473 }, /* MOVE */ { CPUFUNC(op_117a_0), 4474 }, /* MOVE */ { CPUFUNC(op_117b_4), 4475 }, /* MOVE */ { CPUFUNC(op_117c_0), 4476 }, /* MOVE */ { CPUFUNC(op_1180_4), 4480 }, /* MOVE */ { CPUFUNC(op_1190_4), 4496 }, /* MOVE */ { CPUFUNC(op_1198_4), 4504 }, /* MOVE */ { CPUFUNC(op_11a0_4), 4512 }, /* MOVE */ { CPUFUNC(op_11a8_4), 4520 }, /* MOVE */ { CPUFUNC(op_11b0_4), 4528 }, /* MOVE */ { CPUFUNC(op_11b8_4), 4536 }, /* MOVE */ { CPUFUNC(op_11b9_4), 4537 }, /* MOVE */ { CPUFUNC(op_11ba_4), 4538 }, /* MOVE */ { CPUFUNC(op_11bb_4), 4539 }, /* MOVE */ { CPUFUNC(op_11bc_4), 4540 }, /* MOVE */ { CPUFUNC(op_11c0_0), 4544 }, /* MOVE */ { CPUFUNC(op_11d0_0), 4560 }, /* MOVE */ { CPUFUNC(op_11d8_0), 4568 }, /* MOVE */ { CPUFUNC(op_11e0_0), 4576 }, /* MOVE */ { CPUFUNC(op_11e8_0), 4584 }, /* MOVE */ { CPUFUNC(op_11f0_4), 4592 }, /* MOVE */ { CPUFUNC(op_11f8_0), 4600 }, /* MOVE */ { CPUFUNC(op_11f9_0), 4601 }, /* MOVE */ { CPUFUNC(op_11fa_0), 4602 }, /* MOVE */ { CPUFUNC(op_11fb_4), 4603 }, /* MOVE */ { CPUFUNC(op_11fc_0), 4604 }, /* MOVE */ { CPUFUNC(op_13c0_0), 5056 }, /* MOVE */ { CPUFUNC(op_13d0_0), 5072 }, /* MOVE */ { CPUFUNC(op_13d8_0), 5080 }, /* MOVE */ { CPUFUNC(op_13e0_0), 5088 }, /* MOVE */ { CPUFUNC(op_13e8_0), 5096 }, /* MOVE */ { CPUFUNC(op_13f0_4), 5104 }, /* MOVE */ { CPUFUNC(op_13f8_0), 5112 }, /* MOVE */ { CPUFUNC(op_13f9_0), 5113 }, /* MOVE */ { CPUFUNC(op_13fa_0), 5114 }, /* MOVE */ { CPUFUNC(op_13fb_4), 5115 }, /* MOVE */ { CPUFUNC(op_13fc_0), 5116 }, /* MOVE */ { CPUFUNC(op_2000_0), 8192 }, /* MOVE */ { CPUFUNC(op_2008_0), 8200 }, /* MOVE */ { CPUFUNC(op_2010_0), 8208 }, /* MOVE */ { CPUFUNC(op_2018_0), 8216 }, /* MOVE */ { CPUFUNC(op_2020_0), 8224 }, /* MOVE */ { CPUFUNC(op_2028_0), 8232 }, /* MOVE */ { CPUFUNC(op_2030_4), 8240 }, /* MOVE */ { CPUFUNC(op_2038_0), 8248 }, /* MOVE */ { CPUFUNC(op_2039_0), 8249 }, /* MOVE */ { CPUFUNC(op_203a_0), 8250 }, /* MOVE */ { CPUFUNC(op_203b_4), 8251 }, /* MOVE */ { CPUFUNC(op_203c_0), 8252 }, /* MOVE */ { CPUFUNC(op_2040_0), 8256 }, /* MOVEA */ { CPUFUNC(op_2048_0), 8264 }, /* MOVEA */ { CPUFUNC(op_2050_0), 8272 }, /* MOVEA */ { CPUFUNC(op_2058_0), 8280 }, /* MOVEA */ { CPUFUNC(op_2060_0), 8288 }, /* MOVEA */ { CPUFUNC(op_2068_0), 8296 }, /* MOVEA */ { CPUFUNC(op_2070_4), 8304 }, /* MOVEA */ { CPUFUNC(op_2078_0), 8312 }, /* MOVEA */ { CPUFUNC(op_2079_0), 8313 }, /* MOVEA */ { CPUFUNC(op_207a_0), 8314 }, /* MOVEA */ { CPUFUNC(op_207b_4), 8315 }, /* MOVEA */ { CPUFUNC(op_207c_0), 8316 }, /* MOVEA */ { CPUFUNC(op_2080_0), 8320 }, /* MOVE */ { CPUFUNC(op_2088_0), 8328 }, /* MOVE */ { CPUFUNC(op_2090_0), 8336 }, /* MOVE */ { CPUFUNC(op_2098_0), 8344 }, /* MOVE */ { CPUFUNC(op_20a0_0), 8352 }, /* MOVE */ { CPUFUNC(op_20a8_0), 8360 }, /* MOVE */ { CPUFUNC(op_20b0_4), 8368 }, /* MOVE */ { CPUFUNC(op_20b8_0), 8376 }, /* MOVE */ { CPUFUNC(op_20b9_0), 8377 }, /* MOVE */ { CPUFUNC(op_20ba_0), 8378 }, /* MOVE */ { CPUFUNC(op_20bb_4), 8379 }, /* MOVE */ { CPUFUNC(op_20bc_0), 8380 }, /* MOVE */ { CPUFUNC(op_20c0_0), 8384 }, /* MOVE */ { CPUFUNC(op_20c8_0), 8392 }, /* MOVE */ { CPUFUNC(op_20d0_0), 8400 }, /* MOVE */ { CPUFUNC(op_20d8_0), 8408 }, /* MOVE */ { CPUFUNC(op_20e0_0), 8416 }, /* MOVE */ { CPUFUNC(op_20e8_0), 8424 }, /* MOVE */ { CPUFUNC(op_20f0_4), 8432 }, /* MOVE */ { CPUFUNC(op_20f8_0), 8440 }, /* MOVE */ { CPUFUNC(op_20f9_0), 8441 }, /* MOVE */ { CPUFUNC(op_20fa_0), 8442 }, /* MOVE */ { CPUFUNC(op_20fb_4), 8443 }, /* MOVE */ { CPUFUNC(op_20fc_0), 8444 }, /* MOVE */ { CPUFUNC(op_2100_0), 8448 }, /* MOVE */ { CPUFUNC(op_2108_0), 8456 }, /* MOVE */ { CPUFUNC(op_2110_0), 8464 }, /* MOVE */ { CPUFUNC(op_2118_0), 8472 }, /* MOVE */ { CPUFUNC(op_2120_0), 8480 }, /* MOVE */ { CPUFUNC(op_2128_0), 8488 }, /* MOVE */ { CPUFUNC(op_2130_4), 8496 }, /* MOVE */ { CPUFUNC(op_2138_0), 8504 }, /* MOVE */ { CPUFUNC(op_2139_0), 8505 }, /* MOVE */ { CPUFUNC(op_213a_0), 8506 }, /* MOVE */ { CPUFUNC(op_213b_4), 8507 }, /* MOVE */ { CPUFUNC(op_213c_0), 8508 }, /* MOVE */ { CPUFUNC(op_2140_0), 8512 }, /* MOVE */ { CPUFUNC(op_2148_0), 8520 }, /* MOVE */ { CPUFUNC(op_2150_0), 8528 }, /* MOVE */ { CPUFUNC(op_2158_0), 8536 }, /* MOVE */ { CPUFUNC(op_2160_0), 8544 }, /* MOVE */ { CPUFUNC(op_2168_0), 8552 }, /* MOVE */ { CPUFUNC(op_2170_4), 8560 }, /* MOVE */ { CPUFUNC(op_2178_0), 8568 }, /* MOVE */ { CPUFUNC(op_2179_0), 8569 }, /* MOVE */ { CPUFUNC(op_217a_0), 8570 }, /* MOVE */ { CPUFUNC(op_217b_4), 8571 }, /* MOVE */ { CPUFUNC(op_217c_0), 8572 }, /* MOVE */ { CPUFUNC(op_2180_4), 8576 }, /* MOVE */ { CPUFUNC(op_2188_4), 8584 }, /* MOVE */ { CPUFUNC(op_2190_4), 8592 }, /* MOVE */ { CPUFUNC(op_2198_4), 8600 }, /* MOVE */ { CPUFUNC(op_21a0_4), 8608 }, /* MOVE */ { CPUFUNC(op_21a8_4), 8616 }, /* MOVE */ { CPUFUNC(op_21b0_4), 8624 }, /* MOVE */ { CPUFUNC(op_21b8_4), 8632 }, /* MOVE */ { CPUFUNC(op_21b9_4), 8633 }, /* MOVE */ { CPUFUNC(op_21ba_4), 8634 }, /* MOVE */ { CPUFUNC(op_21bb_4), 8635 }, /* MOVE */ { CPUFUNC(op_21bc_4), 8636 }, /* MOVE */ { CPUFUNC(op_21c0_0), 8640 }, /* MOVE */ { CPUFUNC(op_21c8_0), 8648 }, /* MOVE */ { CPUFUNC(op_21d0_0), 8656 }, /* MOVE */ { CPUFUNC(op_21d8_0), 8664 }, /* MOVE */ { CPUFUNC(op_21e0_0), 8672 }, /* MOVE */ { CPUFUNC(op_21e8_0), 8680 }, /* MOVE */ { CPUFUNC(op_21f0_4), 8688 }, /* MOVE */ { CPUFUNC(op_21f8_0), 8696 }, /* MOVE */ { CPUFUNC(op_21f9_0), 8697 }, /* MOVE */ { CPUFUNC(op_21fa_0), 8698 }, /* MOVE */ { CPUFUNC(op_21fb_4), 8699 }, /* MOVE */ { CPUFUNC(op_21fc_0), 8700 }, /* MOVE */ { CPUFUNC(op_23c0_0), 9152 }, /* MOVE */ { CPUFUNC(op_23c8_0), 9160 }, /* MOVE */ { CPUFUNC(op_23d0_0), 9168 }, /* MOVE */ { CPUFUNC(op_23d8_0), 9176 }, /* MOVE */ { CPUFUNC(op_23e0_0), 9184 }, /* MOVE */ { CPUFUNC(op_23e8_0), 9192 }, /* MOVE */ { CPUFUNC(op_23f0_4), 9200 }, /* MOVE */ { CPUFUNC(op_23f8_0), 9208 }, /* MOVE */ { CPUFUNC(op_23f9_0), 9209 }, /* MOVE */ { CPUFUNC(op_23fa_0), 9210 }, /* MOVE */ { CPUFUNC(op_23fb_4), 9211 }, /* MOVE */ { CPUFUNC(op_23fc_0), 9212 }, /* MOVE */ { CPUFUNC(op_3000_0), 12288 }, /* MOVE */ { CPUFUNC(op_3008_0), 12296 }, /* MOVE */ { CPUFUNC(op_3010_0), 12304 }, /* MOVE */ { CPUFUNC(op_3018_0), 12312 }, /* MOVE */ { CPUFUNC(op_3020_0), 12320 }, /* MOVE */ { CPUFUNC(op_3028_0), 12328 }, /* MOVE */ { CPUFUNC(op_3030_4), 12336 }, /* MOVE */ { CPUFUNC(op_3038_0), 12344 }, /* MOVE */ { CPUFUNC(op_3039_0), 12345 }, /* MOVE */ { CPUFUNC(op_303a_0), 12346 }, /* MOVE */ { CPUFUNC(op_303b_4), 12347 }, /* MOVE */ { CPUFUNC(op_303c_0), 12348 }, /* MOVE */ { CPUFUNC(op_3040_0), 12352 }, /* MOVEA */ { CPUFUNC(op_3048_0), 12360 }, /* MOVEA */ { CPUFUNC(op_3050_0), 12368 }, /* MOVEA */ { CPUFUNC(op_3058_0), 12376 }, /* MOVEA */ { CPUFUNC(op_3060_0), 12384 }, /* MOVEA */ { CPUFUNC(op_3068_0), 12392 }, /* MOVEA */ { CPUFUNC(op_3070_4), 12400 }, /* MOVEA */ { CPUFUNC(op_3078_0), 12408 }, /* MOVEA */ { CPUFUNC(op_3079_0), 12409 }, /* MOVEA */ { CPUFUNC(op_307a_0), 12410 }, /* MOVEA */ { CPUFUNC(op_307b_4), 12411 }, /* MOVEA */ { CPUFUNC(op_307c_0), 12412 }, /* MOVEA */ { CPUFUNC(op_3080_0), 12416 }, /* MOVE */ { CPUFUNC(op_3088_0), 12424 }, /* MOVE */ { CPUFUNC(op_3090_0), 12432 }, /* MOVE */ { CPUFUNC(op_3098_0), 12440 }, /* MOVE */ { CPUFUNC(op_30a0_0), 12448 }, /* MOVE */ { CPUFUNC(op_30a8_0), 12456 }, /* MOVE */ { CPUFUNC(op_30b0_4), 12464 }, /* MOVE */ { CPUFUNC(op_30b8_0), 12472 }, /* MOVE */ { CPUFUNC(op_30b9_0), 12473 }, /* MOVE */ { CPUFUNC(op_30ba_0), 12474 }, /* MOVE */ { CPUFUNC(op_30bb_4), 12475 }, /* MOVE */ { CPUFUNC(op_30bc_0), 12476 }, /* MOVE */ { CPUFUNC(op_30c0_0), 12480 }, /* MOVE */ { CPUFUNC(op_30c8_0), 12488 }, /* MOVE */ { CPUFUNC(op_30d0_0), 12496 }, /* MOVE */ { CPUFUNC(op_30d8_0), 12504 }, /* MOVE */ { CPUFUNC(op_30e0_0), 12512 }, /* MOVE */ { CPUFUNC(op_30e8_0), 12520 }, /* MOVE */ { CPUFUNC(op_30f0_4), 12528 }, /* MOVE */ { CPUFUNC(op_30f8_0), 12536 }, /* MOVE */ { CPUFUNC(op_30f9_0), 12537 }, /* MOVE */ { CPUFUNC(op_30fa_0), 12538 }, /* MOVE */ { CPUFUNC(op_30fb_4), 12539 }, /* MOVE */ { CPUFUNC(op_30fc_0), 12540 }, /* MOVE */ { CPUFUNC(op_3100_0), 12544 }, /* MOVE */ { CPUFUNC(op_3108_0), 12552 }, /* MOVE */ { CPUFUNC(op_3110_0), 12560 }, /* MOVE */ { CPUFUNC(op_3118_0), 12568 }, /* MOVE */ { CPUFUNC(op_3120_0), 12576 }, /* MOVE */ { CPUFUNC(op_3128_0), 12584 }, /* MOVE */ { CPUFUNC(op_3130_4), 12592 }, /* MOVE */ { CPUFUNC(op_3138_0), 12600 }, /* MOVE */ { CPUFUNC(op_3139_0), 12601 }, /* MOVE */ { CPUFUNC(op_313a_0), 12602 }, /* MOVE */ { CPUFUNC(op_313b_4), 12603 }, /* MOVE */ { CPUFUNC(op_313c_0), 12604 }, /* MOVE */ { CPUFUNC(op_3140_0), 12608 }, /* MOVE */ { CPUFUNC(op_3148_0), 12616 }, /* MOVE */ { CPUFUNC(op_3150_0), 12624 }, /* MOVE */ { CPUFUNC(op_3158_0), 12632 }, /* MOVE */ { CPUFUNC(op_3160_0), 12640 }, /* MOVE */ { CPUFUNC(op_3168_0), 12648 }, /* MOVE */ { CPUFUNC(op_3170_4), 12656 }, /* MOVE */ { CPUFUNC(op_3178_0), 12664 }, /* MOVE */ { CPUFUNC(op_3179_0), 12665 }, /* MOVE */ { CPUFUNC(op_317a_0), 12666 }, /* MOVE */ { CPUFUNC(op_317b_4), 12667 }, /* MOVE */ { CPUFUNC(op_317c_0), 12668 }, /* MOVE */ { CPUFUNC(op_3180_4), 12672 }, /* MOVE */ { CPUFUNC(op_3188_4), 12680 }, /* MOVE */ { CPUFUNC(op_3190_4), 12688 }, /* MOVE */ { CPUFUNC(op_3198_4), 12696 }, /* MOVE */ { CPUFUNC(op_31a0_4), 12704 }, /* MOVE */ { CPUFUNC(op_31a8_4), 12712 }, /* MOVE */ { CPUFUNC(op_31b0_4), 12720 }, /* MOVE */ { CPUFUNC(op_31b8_4), 12728 }, /* MOVE */ { CPUFUNC(op_31b9_4), 12729 }, /* MOVE */ { CPUFUNC(op_31ba_4), 12730 }, /* MOVE */ { CPUFUNC(op_31bb_4), 12731 }, /* MOVE */ { CPUFUNC(op_31bc_4), 12732 }, /* MOVE */ { CPUFUNC(op_31c0_0), 12736 }, /* MOVE */ { CPUFUNC(op_31c8_0), 12744 }, /* MOVE */ { CPUFUNC(op_31d0_0), 12752 }, /* MOVE */ { CPUFUNC(op_31d8_0), 12760 }, /* MOVE */ { CPUFUNC(op_31e0_0), 12768 }, /* MOVE */ { CPUFUNC(op_31e8_0), 12776 }, /* MOVE */ { CPUFUNC(op_31f0_4), 12784 }, /* MOVE */ { CPUFUNC(op_31f8_0), 12792 }, /* MOVE */ { CPUFUNC(op_31f9_0), 12793 }, /* MOVE */ { CPUFUNC(op_31fa_0), 12794 }, /* MOVE */ { CPUFUNC(op_31fb_4), 12795 }, /* MOVE */ { CPUFUNC(op_31fc_0), 12796 }, /* MOVE */ { CPUFUNC(op_33c0_0), 13248 }, /* MOVE */ { CPUFUNC(op_33c8_0), 13256 }, /* MOVE */ { CPUFUNC(op_33d0_0), 13264 }, /* MOVE */ { CPUFUNC(op_33d8_0), 13272 }, /* MOVE */ { CPUFUNC(op_33e0_0), 13280 }, /* MOVE */ { CPUFUNC(op_33e8_0), 13288 }, /* MOVE */ { CPUFUNC(op_33f0_4), 13296 }, /* MOVE */ { CPUFUNC(op_33f8_0), 13304 }, /* MOVE */ { CPUFUNC(op_33f9_0), 13305 }, /* MOVE */ { CPUFUNC(op_33fa_0), 13306 }, /* MOVE */ { CPUFUNC(op_33fb_4), 13307 }, /* MOVE */ { CPUFUNC(op_33fc_0), 13308 }, /* MOVE */ { CPUFUNC(op_4000_0), 16384 }, /* NEGX */ { CPUFUNC(op_4010_0), 16400 }, /* NEGX */ { CPUFUNC(op_4018_0), 16408 }, /* NEGX */ { CPUFUNC(op_4020_0), 16416 }, /* NEGX */ { CPUFUNC(op_4028_0), 16424 }, /* NEGX */ { CPUFUNC(op_4030_4), 16432 }, /* NEGX */ { CPUFUNC(op_4038_0), 16440 }, /* NEGX */ { CPUFUNC(op_4039_0), 16441 }, /* NEGX */ { CPUFUNC(op_4040_0), 16448 }, /* NEGX */ { CPUFUNC(op_4050_0), 16464 }, /* NEGX */ { CPUFUNC(op_4058_0), 16472 }, /* NEGX */ { CPUFUNC(op_4060_0), 16480 }, /* NEGX */ { CPUFUNC(op_4068_0), 16488 }, /* NEGX */ { CPUFUNC(op_4070_4), 16496 }, /* NEGX */ { CPUFUNC(op_4078_0), 16504 }, /* NEGX */ { CPUFUNC(op_4079_0), 16505 }, /* NEGX */ { CPUFUNC(op_4080_0), 16512 }, /* NEGX */ { CPUFUNC(op_4090_0), 16528 }, /* NEGX */ { CPUFUNC(op_4098_0), 16536 }, /* NEGX */ { CPUFUNC(op_40a0_0), 16544 }, /* NEGX */ { CPUFUNC(op_40a8_0), 16552 }, /* NEGX */ { CPUFUNC(op_40b0_4), 16560 }, /* NEGX */ { CPUFUNC(op_40b8_0), 16568 }, /* NEGX */ { CPUFUNC(op_40b9_0), 16569 }, /* NEGX */ { CPUFUNC(op_40c0_0), 16576 }, /* MVSR2 */ { CPUFUNC(op_40d0_0), 16592 }, /* MVSR2 */ { CPUFUNC(op_40d8_0), 16600 }, /* MVSR2 */ { CPUFUNC(op_40e0_0), 16608 }, /* MVSR2 */ { CPUFUNC(op_40e8_0), 16616 }, /* MVSR2 */ { CPUFUNC(op_40f0_4), 16624 }, /* MVSR2 */ { CPUFUNC(op_40f8_0), 16632 }, /* MVSR2 */ { CPUFUNC(op_40f9_0), 16633 }, /* MVSR2 */ { CPUFUNC(op_4180_0), 16768 }, /* CHK */ { CPUFUNC(op_4190_0), 16784 }, /* CHK */ { CPUFUNC(op_4198_0), 16792 }, /* CHK */ { CPUFUNC(op_41a0_0), 16800 }, /* CHK */ { CPUFUNC(op_41a8_0), 16808 }, /* CHK */ { CPUFUNC(op_41b0_4), 16816 }, /* CHK */ { CPUFUNC(op_41b8_0), 16824 }, /* CHK */ { CPUFUNC(op_41b9_0), 16825 }, /* CHK */ { CPUFUNC(op_41ba_0), 16826 }, /* CHK */ { CPUFUNC(op_41bb_4), 16827 }, /* CHK */ { CPUFUNC(op_41bc_0), 16828 }, /* CHK */ { CPUFUNC(op_41d0_0), 16848 }, /* LEA */ { CPUFUNC(op_41e8_0), 16872 }, /* LEA */ { CPUFUNC(op_41f0_4), 16880 }, /* LEA */ { CPUFUNC(op_41f8_0), 16888 }, /* LEA */ { CPUFUNC(op_41f9_0), 16889 }, /* LEA */ { CPUFUNC(op_41fa_0), 16890 }, /* LEA */ { CPUFUNC(op_41fb_4), 16891 }, /* LEA */ { CPUFUNC(op_4200_0), 16896 }, /* CLR */ { CPUFUNC(op_4210_0), 16912 }, /* CLR */ { CPUFUNC(op_4218_0), 16920 }, /* CLR */ { CPUFUNC(op_4220_0), 16928 }, /* CLR */ { CPUFUNC(op_4228_0), 16936 }, /* CLR */ { CPUFUNC(op_4230_4), 16944 }, /* CLR */ { CPUFUNC(op_4238_0), 16952 }, /* CLR */ { CPUFUNC(op_4239_0), 16953 }, /* CLR */ { CPUFUNC(op_4240_0), 16960 }, /* CLR */ { CPUFUNC(op_4250_0), 16976 }, /* CLR */ { CPUFUNC(op_4258_0), 16984 }, /* CLR */ { CPUFUNC(op_4260_0), 16992 }, /* CLR */ { CPUFUNC(op_4268_0), 17000 }, /* CLR */ { CPUFUNC(op_4270_4), 17008 }, /* CLR */ { CPUFUNC(op_4278_0), 17016 }, /* CLR */ { CPUFUNC(op_4279_0), 17017 }, /* CLR */ { CPUFUNC(op_4280_0), 17024 }, /* CLR */ { CPUFUNC(op_4290_0), 17040 }, /* CLR */ { CPUFUNC(op_4298_0), 17048 }, /* CLR */ { CPUFUNC(op_42a0_0), 17056 }, /* CLR */ { CPUFUNC(op_42a8_0), 17064 }, /* CLR */ { CPUFUNC(op_42b0_4), 17072 }, /* CLR */ { CPUFUNC(op_42b8_0), 17080 }, /* CLR */ { CPUFUNC(op_42b9_0), 17081 }, /* CLR */ { CPUFUNC(op_42c0_0), 17088 }, /* MVSR2 */ { CPUFUNC(op_42d0_0), 17104 }, /* MVSR2 */ { CPUFUNC(op_42d8_0), 17112 }, /* MVSR2 */ { CPUFUNC(op_42e0_0), 17120 }, /* MVSR2 */ { CPUFUNC(op_42e8_0), 17128 }, /* MVSR2 */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_42f0_4), 17136 }, /* MVSR2 */ #endif { CPUFUNC(op_42f8_0), 17144 }, /* MVSR2 */ { CPUFUNC(op_42f9_0), 17145 }, /* MVSR2 */ { CPUFUNC(op_4400_0), 17408 }, /* NEG */ { CPUFUNC(op_4410_0), 17424 }, /* NEG */ { CPUFUNC(op_4418_0), 17432 }, /* NEG */ { CPUFUNC(op_4420_0), 17440 }, /* NEG */ { CPUFUNC(op_4428_0), 17448 }, /* NEG */ { CPUFUNC(op_4430_4), 17456 }, /* NEG */ { CPUFUNC(op_4438_0), 17464 }, /* NEG */ { CPUFUNC(op_4439_0), 17465 }, /* NEG */ { CPUFUNC(op_4440_0), 17472 }, /* NEG */ { CPUFUNC(op_4450_0), 17488 }, /* NEG */ { CPUFUNC(op_4458_0), 17496 }, /* NEG */ { CPUFUNC(op_4460_0), 17504 }, /* NEG */ { CPUFUNC(op_4468_0), 17512 }, /* NEG */ { CPUFUNC(op_4470_4), 17520 }, /* NEG */ { CPUFUNC(op_4478_0), 17528 }, /* NEG */ { CPUFUNC(op_4479_0), 17529 }, /* NEG */ { CPUFUNC(op_4480_0), 17536 }, /* NEG */ { CPUFUNC(op_4490_0), 17552 }, /* NEG */ { CPUFUNC(op_4498_0), 17560 }, /* NEG */ { CPUFUNC(op_44a0_0), 17568 }, /* NEG */ { CPUFUNC(op_44a8_0), 17576 }, /* NEG */ { CPUFUNC(op_44b0_4), 17584 }, /* NEG */ { CPUFUNC(op_44b8_0), 17592 }, /* NEG */ { CPUFUNC(op_44b9_0), 17593 }, /* NEG */ { CPUFUNC(op_44c0_0), 17600 }, /* MV2SR */ { CPUFUNC(op_44d0_0), 17616 }, /* MV2SR */ { CPUFUNC(op_44d8_0), 17624 }, /* MV2SR */ { CPUFUNC(op_44e0_0), 17632 }, /* MV2SR */ { CPUFUNC(op_44e8_0), 17640 }, /* MV2SR */ { CPUFUNC(op_44f0_4), 17648 }, /* MV2SR */ { CPUFUNC(op_44f8_0), 17656 }, /* MV2SR */ { CPUFUNC(op_44f9_0), 17657 }, /* MV2SR */ { CPUFUNC(op_44fa_0), 17658 }, /* MV2SR */ { CPUFUNC(op_44fb_4), 17659 }, /* MV2SR */ { CPUFUNC(op_44fc_0), 17660 }, /* MV2SR */ { CPUFUNC(op_4600_0), 17920 }, /* NOT */ { CPUFUNC(op_4610_0), 17936 }, /* NOT */ { CPUFUNC(op_4618_0), 17944 }, /* NOT */ { CPUFUNC(op_4620_0), 17952 }, /* NOT */ { CPUFUNC(op_4628_0), 17960 }, /* NOT */ { CPUFUNC(op_4630_4), 17968 }, /* NOT */ { CPUFUNC(op_4638_0), 17976 }, /* NOT */ { CPUFUNC(op_4639_0), 17977 }, /* NOT */ { CPUFUNC(op_4640_0), 17984 }, /* NOT */ { CPUFUNC(op_4650_0), 18000 }, /* NOT */ { CPUFUNC(op_4658_0), 18008 }, /* NOT */ { CPUFUNC(op_4660_0), 18016 }, /* NOT */ { CPUFUNC(op_4668_0), 18024 }, /* NOT */ { CPUFUNC(op_4670_4), 18032 }, /* NOT */ { CPUFUNC(op_4678_0), 18040 }, /* NOT */ { CPUFUNC(op_4679_0), 18041 }, /* NOT */ { CPUFUNC(op_4680_0), 18048 }, /* NOT */ { CPUFUNC(op_4690_0), 18064 }, /* NOT */ { CPUFUNC(op_4698_0), 18072 }, /* NOT */ { CPUFUNC(op_46a0_0), 18080 }, /* NOT */ { CPUFUNC(op_46a8_0), 18088 }, /* NOT */ { CPUFUNC(op_46b0_4), 18096 }, /* NOT */ { CPUFUNC(op_46b8_0), 18104 }, /* NOT */ { CPUFUNC(op_46b9_0), 18105 }, /* NOT */ { CPUFUNC(op_46c0_0), 18112 }, /* MV2SR */ { CPUFUNC(op_46d0_0), 18128 }, /* MV2SR */ { CPUFUNC(op_46d8_0), 18136 }, /* MV2SR */ { CPUFUNC(op_46e0_0), 18144 }, /* MV2SR */ { CPUFUNC(op_46e8_0), 18152 }, /* MV2SR */ { CPUFUNC(op_46f0_4), 18160 }, /* MV2SR */ { CPUFUNC(op_46f8_0), 18168 }, /* MV2SR */ { CPUFUNC(op_46f9_0), 18169 }, /* MV2SR */ { CPUFUNC(op_46fa_0), 18170 }, /* MV2SR */ { CPUFUNC(op_46fb_4), 18171 }, /* MV2SR */ { CPUFUNC(op_46fc_0), 18172 }, /* MV2SR */ { CPUFUNC(op_4800_2), 18432 }, /* NBCD */ { CPUFUNC(op_4810_2), 18448 }, /* NBCD */ { CPUFUNC(op_4818_2), 18456 }, /* NBCD */ { CPUFUNC(op_4820_2), 18464 }, /* NBCD */ { CPUFUNC(op_4828_2), 18472 }, /* NBCD */ { CPUFUNC(op_4830_4), 18480 }, /* NBCD */ { CPUFUNC(op_4838_2), 18488 }, /* NBCD */ { CPUFUNC(op_4839_2), 18489 }, /* NBCD */ { CPUFUNC(op_4840_0), 18496 }, /* SWAP */ { CPUFUNC(op_4850_0), 18512 }, /* PEA */ { CPUFUNC(op_4868_0), 18536 }, /* PEA */ { CPUFUNC(op_4870_4), 18544 }, /* PEA */ { CPUFUNC(op_4878_0), 18552 }, /* PEA */ { CPUFUNC(op_4879_0), 18553 }, /* PEA */ { CPUFUNC(op_487a_0), 18554 }, /* PEA */ { CPUFUNC(op_487b_4), 18555 }, /* PEA */ { CPUFUNC(op_4880_0), 18560 }, /* EXT */ { CPUFUNC(op_4890_0), 18576 }, /* MVMLE */ { CPUFUNC(op_48a0_0), 18592 }, /* MVMLE */ { CPUFUNC(op_48a8_0), 18600 }, /* MVMLE */ { CPUFUNC(op_48b0_4), 18608 }, /* MVMLE */ { CPUFUNC(op_48b8_0), 18616 }, /* MVMLE */ { CPUFUNC(op_48b9_0), 18617 }, /* MVMLE */ { CPUFUNC(op_48c0_0), 18624 }, /* EXT */ { CPUFUNC(op_48d0_0), 18640 }, /* MVMLE */ { CPUFUNC(op_48e0_0), 18656 }, /* MVMLE */ { CPUFUNC(op_48e8_0), 18664 }, /* MVMLE */ { CPUFUNC(op_48f0_4), 18672 }, /* MVMLE */ { CPUFUNC(op_48f8_0), 18680 }, /* MVMLE */ { CPUFUNC(op_48f9_0), 18681 }, /* MVMLE */ { CPUFUNC(op_4a00_0), 18944 }, /* TST */ { CPUFUNC(op_4a10_0), 18960 }, /* TST */ { CPUFUNC(op_4a18_0), 18968 }, /* TST */ { CPUFUNC(op_4a20_0), 18976 }, /* TST */ { CPUFUNC(op_4a28_0), 18984 }, /* TST */ { CPUFUNC(op_4a30_4), 18992 }, /* TST */ { CPUFUNC(op_4a38_0), 19000 }, /* TST */ { CPUFUNC(op_4a39_0), 19001 }, /* TST */ { CPUFUNC(op_4a3c_0), 19004 }, /* TST */ { CPUFUNC(op_4a40_0), 19008 }, /* TST */ { CPUFUNC(op_4a50_0), 19024 }, /* TST */ { CPUFUNC(op_4a58_0), 19032 }, /* TST */ { CPUFUNC(op_4a60_0), 19040 }, /* TST */ { CPUFUNC(op_4a68_0), 19048 }, /* TST */ { CPUFUNC(op_4a70_4), 19056 }, /* TST */ { CPUFUNC(op_4a78_0), 19064 }, /* TST */ { CPUFUNC(op_4a79_0), 19065 }, /* TST */ { CPUFUNC(op_4a7c_0), 19068 }, /* TST */ { CPUFUNC(op_4a80_0), 19072 }, /* TST */ { CPUFUNC(op_4a90_0), 19088 }, /* TST */ { CPUFUNC(op_4a98_0), 19096 }, /* TST */ { CPUFUNC(op_4aa0_0), 19104 }, /* TST */ { CPUFUNC(op_4aa8_0), 19112 }, /* TST */ { CPUFUNC(op_4ab0_4), 19120 }, /* TST */ { CPUFUNC(op_4ab8_0), 19128 }, /* TST */ { CPUFUNC(op_4ab9_0), 19129 }, /* TST */ { CPUFUNC(op_4abc_0), 19132 }, /* TST */ { CPUFUNC(op_4ac0_4), 19136 }, /* TAS */ { CPUFUNC(op_4ad0_4), 19152 }, /* TAS */ { CPUFUNC(op_4ad8_4), 19160 }, /* TAS */ { CPUFUNC(op_4ae0_4), 19168 }, /* TAS */ { CPUFUNC(op_4ae8_4), 19176 }, /* TAS */ { CPUFUNC(op_4af0_4), 19184 }, /* TAS */ { CPUFUNC(op_4af8_4), 19192 }, /* TAS */ { CPUFUNC(op_4af9_4), 19193 }, /* TAS */ { CPUFUNC(op_4c90_0), 19600 }, /* MVMEL */ { CPUFUNC(op_4c98_0), 19608 }, /* MVMEL */ { CPUFUNC(op_4ca8_0), 19624 }, /* MVMEL */ { CPUFUNC(op_4cb0_4), 19632 }, /* MVMEL */ { CPUFUNC(op_4cb8_0), 19640 }, /* MVMEL */ { CPUFUNC(op_4cb9_0), 19641 }, /* MVMEL */ { CPUFUNC(op_4cba_0), 19642 }, /* MVMEL */ { CPUFUNC(op_4cbb_4), 19643 }, /* MVMEL */ { CPUFUNC(op_4cd0_0), 19664 }, /* MVMEL */ { CPUFUNC(op_4cd8_0), 19672 }, /* MVMEL */ { CPUFUNC(op_4ce8_0), 19688 }, /* MVMEL */ { CPUFUNC(op_4cf0_4), 19696 }, /* MVMEL */ { CPUFUNC(op_4cf8_0), 19704 }, /* MVMEL */ { CPUFUNC(op_4cf9_0), 19705 }, /* MVMEL */ { CPUFUNC(op_4cfa_0), 19706 }, /* MVMEL */ { CPUFUNC(op_4cfb_4), 19707 }, /* MVMEL */ { CPUFUNC(op_4e40_0), 20032 }, /* TRAP */ { CPUFUNC(op_4e50_0), 20048 }, /* LINK */ { CPUFUNC(op_4e58_0), 20056 }, /* UNLK */ { CPUFUNC(op_4e60_0), 20064 }, /* MVR2USP */ { CPUFUNC(op_4e68_0), 20072 }, /* MVUSP2R */ { CPUFUNC(op_4e70_0), 20080 }, /* RESET */ { CPUFUNC(op_4e71_0), 20081 }, /* NOP */ { CPUFUNC(op_4e72_0), 20082 }, /* STOP */ { CPUFUNC(op_4e73_0), 20083 }, /* RTE */ { CPUFUNC(op_4e74_0), 20084 }, /* RTD */ { CPUFUNC(op_4e75_0), 20085 }, /* RTS */ { CPUFUNC(op_4e76_0), 20086 }, /* TRAPV */ { CPUFUNC(op_4e77_0), 20087 }, /* RTR */ { CPUFUNC(op_4e7a_0), 20090 }, /* MOVEC2 */ { CPUFUNC(op_4e7b_0), 20091 }, /* MOVE2C */ { CPUFUNC(op_4e90_0), 20112 }, /* JSR */ { CPUFUNC(op_4ea8_0), 20136 }, /* JSR */ { CPUFUNC(op_4eb0_4), 20144 }, /* JSR */ { CPUFUNC(op_4eb8_0), 20152 }, /* JSR */ { CPUFUNC(op_4eb9_0), 20153 }, /* JSR */ { CPUFUNC(op_4eba_0), 20154 }, /* JSR */ { CPUFUNC(op_4ebb_4), 20155 }, /* JSR */ { CPUFUNC(op_4ed0_0), 20176 }, /* JMP */ { CPUFUNC(op_4ee8_0), 20200 }, /* JMP */ { CPUFUNC(op_4ef0_4), 20208 }, /* JMP */ { CPUFUNC(op_4ef8_0), 20216 }, /* JMP */ { CPUFUNC(op_4ef9_0), 20217 }, /* JMP */ { CPUFUNC(op_4efa_0), 20218 }, /* JMP */ { CPUFUNC(op_4efb_4), 20219 }, /* JMP */ { CPUFUNC(op_5000_0), 20480 }, /* ADD */ { CPUFUNC(op_5010_0), 20496 }, /* ADD */ { CPUFUNC(op_5018_0), 20504 }, /* ADD */ { CPUFUNC(op_5020_0), 20512 }, /* ADD */ { CPUFUNC(op_5028_0), 20520 }, /* ADD */ { CPUFUNC(op_5030_4), 20528 }, /* ADD */ { CPUFUNC(op_5038_0), 20536 }, /* ADD */ { CPUFUNC(op_5039_0), 20537 }, /* ADD */ { CPUFUNC(op_5040_0), 20544 }, /* ADD */ { CPUFUNC(op_5048_0), 20552 }, /* ADDA */ { CPUFUNC(op_5050_0), 20560 }, /* ADD */ { CPUFUNC(op_5058_0), 20568 }, /* ADD */ { CPUFUNC(op_5060_0), 20576 }, /* ADD */ { CPUFUNC(op_5068_0), 20584 }, /* ADD */ { CPUFUNC(op_5070_4), 20592 }, /* ADD */ { CPUFUNC(op_5078_0), 20600 }, /* ADD */ { CPUFUNC(op_5079_0), 20601 }, /* ADD */ { CPUFUNC(op_5080_0), 20608 }, /* ADD */ { CPUFUNC(op_5088_0), 20616 }, /* ADDA */ { CPUFUNC(op_5090_0), 20624 }, /* ADD */ { CPUFUNC(op_5098_0), 20632 }, /* ADD */ { CPUFUNC(op_50a0_0), 20640 }, /* ADD */ { CPUFUNC(op_50a8_0), 20648 }, /* ADD */ { CPUFUNC(op_50b0_4), 20656 }, /* ADD */ { CPUFUNC(op_50b8_0), 20664 }, /* ADD */ { CPUFUNC(op_50b9_0), 20665 }, /* ADD */ { CPUFUNC(op_50c0_0), 20672 }, /* Scc */ { CPUFUNC(op_50c8_0), 20680 }, /* DBcc */ { CPUFUNC(op_50d0_0), 20688 }, /* Scc */ { CPUFUNC(op_50d8_0), 20696 }, /* Scc */ { CPUFUNC(op_50e0_0), 20704 }, /* Scc */ { CPUFUNC(op_50e8_0), 20712 }, /* Scc */ { CPUFUNC(op_50f0_4), 20720 }, /* Scc */ { CPUFUNC(op_50f8_0), 20728 }, /* Scc */ { CPUFUNC(op_50f9_0), 20729 }, /* Scc */ { CPUFUNC(op_5100_0), 20736 }, /* SUB */ { CPUFUNC(op_5110_0), 20752 }, /* SUB */ { CPUFUNC(op_5118_0), 20760 }, /* SUB */ { CPUFUNC(op_5120_0), 20768 }, /* SUB */ { CPUFUNC(op_5128_0), 20776 }, /* SUB */ { CPUFUNC(op_5130_4), 20784 }, /* SUB */ { CPUFUNC(op_5138_0), 20792 }, /* SUB */ { CPUFUNC(op_5139_0), 20793 }, /* SUB */ { CPUFUNC(op_5140_0), 20800 }, /* SUB */ { CPUFUNC(op_5148_0), 20808 }, /* SUBA */ { CPUFUNC(op_5150_0), 20816 }, /* SUB */ { CPUFUNC(op_5158_0), 20824 }, /* SUB */ { CPUFUNC(op_5160_0), 20832 }, /* SUB */ { CPUFUNC(op_5168_0), 20840 }, /* SUB */ { CPUFUNC(op_5170_4), 20848 }, /* SUB */ { CPUFUNC(op_5178_0), 20856 }, /* SUB */ { CPUFUNC(op_5179_0), 20857 }, /* SUB */ { CPUFUNC(op_5180_0), 20864 }, /* SUB */ { CPUFUNC(op_5188_0), 20872 }, /* SUBA */ { CPUFUNC(op_5190_0), 20880 }, /* SUB */ { CPUFUNC(op_5198_0), 20888 }, /* SUB */ { CPUFUNC(op_51a0_0), 20896 }, /* SUB */ { CPUFUNC(op_51a8_0), 20904 }, /* SUB */ { CPUFUNC(op_51b0_4), 20912 }, /* SUB */ { CPUFUNC(op_51b8_0), 20920 }, /* SUB */ { CPUFUNC(op_51b9_0), 20921 }, /* SUB */ { CPUFUNC(op_51c0_0), 20928 }, /* Scc */ { CPUFUNC(op_51c8_0), 20936 }, /* DBcc */ { CPUFUNC(op_51d0_0), 20944 }, /* Scc */ { CPUFUNC(op_51d8_0), 20952 }, /* Scc */ { CPUFUNC(op_51e0_0), 20960 }, /* Scc */ { CPUFUNC(op_51e8_0), 20968 }, /* Scc */ { CPUFUNC(op_51f0_4), 20976 }, /* Scc */ { CPUFUNC(op_51f8_0), 20984 }, /* Scc */ { CPUFUNC(op_51f9_0), 20985 }, /* Scc */ { CPUFUNC(op_52c0_0), 21184 }, /* Scc */ { CPUFUNC(op_52c8_0), 21192 }, /* DBcc */ { CPUFUNC(op_52d0_0), 21200 }, /* Scc */ { CPUFUNC(op_52d8_0), 21208 }, /* Scc */ { CPUFUNC(op_52e0_0), 21216 }, /* Scc */ { CPUFUNC(op_52e8_0), 21224 }, /* Scc */ { CPUFUNC(op_52f0_4), 21232 }, /* Scc */ { CPUFUNC(op_52f8_0), 21240 }, /* Scc */ { CPUFUNC(op_52f9_0), 21241 }, /* Scc */ { CPUFUNC(op_53c0_0), 21440 }, /* Scc */ { CPUFUNC(op_53c8_0), 21448 }, /* DBcc */ { CPUFUNC(op_53d0_0), 21456 }, /* Scc */ { CPUFUNC(op_53d8_0), 21464 }, /* Scc */ { CPUFUNC(op_53e0_0), 21472 }, /* Scc */ { CPUFUNC(op_53e8_0), 21480 }, /* Scc */ { CPUFUNC(op_53f0_4), 21488 }, /* Scc */ { CPUFUNC(op_53f8_0), 21496 }, /* Scc */ { CPUFUNC(op_53f9_0), 21497 }, /* Scc */ { CPUFUNC(op_54c0_0), 21696 }, /* Scc */ { CPUFUNC(op_54c8_0), 21704 }, /* DBcc */ { CPUFUNC(op_54d0_0), 21712 }, /* Scc */ { CPUFUNC(op_54d8_0), 21720 }, /* Scc */ { CPUFUNC(op_54e0_0), 21728 }, /* Scc */ { CPUFUNC(op_54e8_0), 21736 }, /* Scc */ { CPUFUNC(op_54f0_4), 21744 }, /* Scc */ { CPUFUNC(op_54f8_0), 21752 }, /* Scc */ { CPUFUNC(op_54f9_0), 21753 }, /* Scc */ { CPUFUNC(op_55c0_0), 21952 }, /* Scc */ { CPUFUNC(op_55c8_0), 21960 }, /* DBcc */ { CPUFUNC(op_55d0_0), 21968 }, /* Scc */ { CPUFUNC(op_55d8_0), 21976 }, /* Scc */ { CPUFUNC(op_55e0_0), 21984 }, /* Scc */ { CPUFUNC(op_55e8_0), 21992 }, /* Scc */ { CPUFUNC(op_55f0_4), 22000 }, /* Scc */ { CPUFUNC(op_55f8_0), 22008 }, /* Scc */ { CPUFUNC(op_55f9_0), 22009 }, /* Scc */ { CPUFUNC(op_56c0_0), 22208 }, /* Scc */ { CPUFUNC(op_56c8_0), 22216 }, /* DBcc */ { CPUFUNC(op_56d0_0), 22224 }, /* Scc */ { CPUFUNC(op_56d8_0), 22232 }, /* Scc */ { CPUFUNC(op_56e0_0), 22240 }, /* Scc */ { CPUFUNC(op_56e8_0), 22248 }, /* Scc */ { CPUFUNC(op_56f0_4), 22256 }, /* Scc */ { CPUFUNC(op_56f8_0), 22264 }, /* Scc */ { CPUFUNC(op_56f9_0), 22265 }, /* Scc */ { CPUFUNC(op_57c0_0), 22464 }, /* Scc */ { CPUFUNC(op_57c8_0), 22472 }, /* DBcc */ { CPUFUNC(op_57d0_0), 22480 }, /* Scc */ { CPUFUNC(op_57d8_0), 22488 }, /* Scc */ { CPUFUNC(op_57e0_0), 22496 }, /* Scc */ { CPUFUNC(op_57e8_0), 22504 }, /* Scc */ { CPUFUNC(op_57f0_4), 22512 }, /* Scc */ { CPUFUNC(op_57f8_0), 22520 }, /* Scc */ { CPUFUNC(op_57f9_0), 22521 }, /* Scc */ { CPUFUNC(op_58c0_0), 22720 }, /* Scc */ { CPUFUNC(op_58c8_0), 22728 }, /* DBcc */ { CPUFUNC(op_58d0_0), 22736 }, /* Scc */ { CPUFUNC(op_58d8_0), 22744 }, /* Scc */ { CPUFUNC(op_58e0_0), 22752 }, /* Scc */ { CPUFUNC(op_58e8_0), 22760 }, /* Scc */ { CPUFUNC(op_58f0_4), 22768 }, /* Scc */ { CPUFUNC(op_58f8_0), 22776 }, /* Scc */ { CPUFUNC(op_58f9_0), 22777 }, /* Scc */ { CPUFUNC(op_59c0_0), 22976 }, /* Scc */ { CPUFUNC(op_59c8_0), 22984 }, /* DBcc */ { CPUFUNC(op_59d0_0), 22992 }, /* Scc */ { CPUFUNC(op_59d8_0), 23000 }, /* Scc */ { CPUFUNC(op_59e0_0), 23008 }, /* Scc */ { CPUFUNC(op_59e8_0), 23016 }, /* Scc */ { CPUFUNC(op_59f0_4), 23024 }, /* Scc */ { CPUFUNC(op_59f8_0), 23032 }, /* Scc */ { CPUFUNC(op_59f9_0), 23033 }, /* Scc */ { CPUFUNC(op_5ac0_0), 23232 }, /* Scc */ { CPUFUNC(op_5ac8_0), 23240 }, /* DBcc */ { CPUFUNC(op_5ad0_0), 23248 }, /* Scc */ { CPUFUNC(op_5ad8_0), 23256 }, /* Scc */ { CPUFUNC(op_5ae0_0), 23264 }, /* Scc */ { CPUFUNC(op_5ae8_0), 23272 }, /* Scc */ { CPUFUNC(op_5af0_4), 23280 }, /* Scc */ { CPUFUNC(op_5af8_0), 23288 }, /* Scc */ { CPUFUNC(op_5af9_0), 23289 }, /* Scc */ { CPUFUNC(op_5bc0_0), 23488 }, /* Scc */ { CPUFUNC(op_5bc8_0), 23496 }, /* DBcc */ { CPUFUNC(op_5bd0_0), 23504 }, /* Scc */ { CPUFUNC(op_5bd8_0), 23512 }, /* Scc */ { CPUFUNC(op_5be0_0), 23520 }, /* Scc */ { CPUFUNC(op_5be8_0), 23528 }, /* Scc */ { CPUFUNC(op_5bf0_4), 23536 }, /* Scc */ { CPUFUNC(op_5bf8_0), 23544 }, /* Scc */ { CPUFUNC(op_5bf9_0), 23545 }, /* Scc */ { CPUFUNC(op_5cc0_0), 23744 }, /* Scc */ { CPUFUNC(op_5cc8_0), 23752 }, /* DBcc */ { CPUFUNC(op_5cd0_0), 23760 }, /* Scc */ { CPUFUNC(op_5cd8_0), 23768 }, /* Scc */ { CPUFUNC(op_5ce0_0), 23776 }, /* Scc */ { CPUFUNC(op_5ce8_0), 23784 }, /* Scc */ { CPUFUNC(op_5cf0_4), 23792 }, /* Scc */ { CPUFUNC(op_5cf8_0), 23800 }, /* Scc */ { CPUFUNC(op_5cf9_0), 23801 }, /* Scc */ { CPUFUNC(op_5dc0_0), 24000 }, /* Scc */ { CPUFUNC(op_5dc8_0), 24008 }, /* DBcc */ { CPUFUNC(op_5dd0_0), 24016 }, /* Scc */ { CPUFUNC(op_5dd8_0), 24024 }, /* Scc */ { CPUFUNC(op_5de0_0), 24032 }, /* Scc */ { CPUFUNC(op_5de8_0), 24040 }, /* Scc */ { CPUFUNC(op_5df0_4), 24048 }, /* Scc */ { CPUFUNC(op_5df8_0), 24056 }, /* Scc */ { CPUFUNC(op_5df9_0), 24057 }, /* Scc */ { CPUFUNC(op_5ec0_0), 24256 }, /* Scc */ { CPUFUNC(op_5ec8_0), 24264 }, /* DBcc */ { CPUFUNC(op_5ed0_0), 24272 }, /* Scc */ { CPUFUNC(op_5ed8_0), 24280 }, /* Scc */ { CPUFUNC(op_5ee0_0), 24288 }, /* Scc */ { CPUFUNC(op_5ee8_0), 24296 }, /* Scc */ { CPUFUNC(op_5ef0_4), 24304 }, /* Scc */ { CPUFUNC(op_5ef8_0), 24312 }, /* Scc */ { CPUFUNC(op_5ef9_0), 24313 }, /* Scc */ { CPUFUNC(op_5fc0_0), 24512 }, /* Scc */ { CPUFUNC(op_5fc8_0), 24520 }, /* DBcc */ { CPUFUNC(op_5fd0_0), 24528 }, /* Scc */ { CPUFUNC(op_5fd8_0), 24536 }, /* Scc */ { CPUFUNC(op_5fe0_0), 24544 }, /* Scc */ { CPUFUNC(op_5fe8_0), 24552 }, /* Scc */ { CPUFUNC(op_5ff0_4), 24560 }, /* Scc */ { CPUFUNC(op_5ff8_0), 24568 }, /* Scc */ { CPUFUNC(op_5ff9_0), 24569 }, /* Scc */ { CPUFUNC(op_6000_0), 24576 }, /* Bcc */ { CPUFUNC(op_6001_0), 24577 }, /* Bcc */ { CPUFUNC(op_60ff_4), 24831 }, /* Bcc */ { CPUFUNC(op_6100_0), 24832 }, /* BSR */ { CPUFUNC(op_6101_0), 24833 }, /* BSR */ { CPUFUNC(op_61ff_4), 25087 }, /* BSR */ { CPUFUNC(op_6200_0), 25088 }, /* Bcc */ { CPUFUNC(op_6201_0), 25089 }, /* Bcc */ { CPUFUNC(op_62ff_4), 25343 }, /* Bcc */ { CPUFUNC(op_6300_0), 25344 }, /* Bcc */ { CPUFUNC(op_6301_0), 25345 }, /* Bcc */ { CPUFUNC(op_63ff_4), 25599 }, /* Bcc */ { CPUFUNC(op_6400_0), 25600 }, /* Bcc */ { CPUFUNC(op_6401_0), 25601 }, /* Bcc */ { CPUFUNC(op_64ff_4), 25855 }, /* Bcc */ { CPUFUNC(op_6500_0), 25856 }, /* Bcc */ { CPUFUNC(op_6501_0), 25857 }, /* Bcc */ { CPUFUNC(op_65ff_4), 26111 }, /* Bcc */ { CPUFUNC(op_6600_0), 26112 }, /* Bcc */ { CPUFUNC(op_6601_0), 26113 }, /* Bcc */ { CPUFUNC(op_66ff_4), 26367 }, /* Bcc */ { CPUFUNC(op_6700_0), 26368 }, /* Bcc */ { CPUFUNC(op_6701_0), 26369 }, /* Bcc */ { CPUFUNC(op_67ff_4), 26623 }, /* Bcc */ { CPUFUNC(op_6800_0), 26624 }, /* Bcc */ { CPUFUNC(op_6801_0), 26625 }, /* Bcc */ { CPUFUNC(op_68ff_4), 26879 }, /* Bcc */ { CPUFUNC(op_6900_0), 26880 }, /* Bcc */ { CPUFUNC(op_6901_0), 26881 }, /* Bcc */ { CPUFUNC(op_69ff_4), 27135 }, /* Bcc */ { CPUFUNC(op_6a00_0), 27136 }, /* Bcc */ { CPUFUNC(op_6a01_0), 27137 }, /* Bcc */ { CPUFUNC(op_6aff_4), 27391 }, /* Bcc */ { CPUFUNC(op_6b00_0), 27392 }, /* Bcc */ { CPUFUNC(op_6b01_0), 27393 }, /* Bcc */ { CPUFUNC(op_6bff_4), 27647 }, /* Bcc */ { CPUFUNC(op_6c00_0), 27648 }, /* Bcc */ { CPUFUNC(op_6c01_0), 27649 }, /* Bcc */ { CPUFUNC(op_6cff_4), 27903 }, /* Bcc */ { CPUFUNC(op_6d00_0), 27904 }, /* Bcc */ { CPUFUNC(op_6d01_0), 27905 }, /* Bcc */ { CPUFUNC(op_6dff_4), 28159 }, /* Bcc */ { CPUFUNC(op_6e00_0), 28160 }, /* Bcc */ { CPUFUNC(op_6e01_0), 28161 }, /* Bcc */ { CPUFUNC(op_6eff_4), 28415 }, /* Bcc */ { CPUFUNC(op_6f00_0), 28416 }, /* Bcc */ { CPUFUNC(op_6f01_0), 28417 }, /* Bcc */ { CPUFUNC(op_6fff_4), 28671 }, /* Bcc */ { CPUFUNC(op_7000_0), 28672 }, /* MOVE */ { CPUFUNC(op_8000_0), 32768 }, /* OR */ { CPUFUNC(op_8010_0), 32784 }, /* OR */ { CPUFUNC(op_8018_0), 32792 }, /* OR */ { CPUFUNC(op_8020_0), 32800 }, /* OR */ { CPUFUNC(op_8028_0), 32808 }, /* OR */ { CPUFUNC(op_8030_4), 32816 }, /* OR */ { CPUFUNC(op_8038_0), 32824 }, /* OR */ { CPUFUNC(op_8039_0), 32825 }, /* OR */ { CPUFUNC(op_803a_0), 32826 }, /* OR */ { CPUFUNC(op_803b_4), 32827 }, /* OR */ { CPUFUNC(op_803c_0), 32828 }, /* OR */ { CPUFUNC(op_8040_0), 32832 }, /* OR */ { CPUFUNC(op_8050_0), 32848 }, /* OR */ { CPUFUNC(op_8058_0), 32856 }, /* OR */ { CPUFUNC(op_8060_0), 32864 }, /* OR */ { CPUFUNC(op_8068_0), 32872 }, /* OR */ { CPUFUNC(op_8070_4), 32880 }, /* OR */ { CPUFUNC(op_8078_0), 32888 }, /* OR */ { CPUFUNC(op_8079_0), 32889 }, /* OR */ { CPUFUNC(op_807a_0), 32890 }, /* OR */ { CPUFUNC(op_807b_4), 32891 }, /* OR */ { CPUFUNC(op_807c_0), 32892 }, /* OR */ { CPUFUNC(op_8080_0), 32896 }, /* OR */ { CPUFUNC(op_8090_0), 32912 }, /* OR */ { CPUFUNC(op_8098_0), 32920 }, /* OR */ { CPUFUNC(op_80a0_0), 32928 }, /* OR */ { CPUFUNC(op_80a8_0), 32936 }, /* OR */ { CPUFUNC(op_80b0_4), 32944 }, /* OR */ { CPUFUNC(op_80b8_0), 32952 }, /* OR */ { CPUFUNC(op_80b9_0), 32953 }, /* OR */ { CPUFUNC(op_80ba_0), 32954 }, /* OR */ { CPUFUNC(op_80bb_4), 32955 }, /* OR */ { CPUFUNC(op_80bc_0), 32956 }, /* OR */ { CPUFUNC(op_80c0_0), 32960 }, /* DIVU */ { CPUFUNC(op_80d0_0), 32976 }, /* DIVU */ { CPUFUNC(op_80d8_0), 32984 }, /* DIVU */ { CPUFUNC(op_80e0_0), 32992 }, /* DIVU */ { CPUFUNC(op_80e8_0), 33000 }, /* DIVU */ { CPUFUNC(op_80f0_4), 33008 }, /* DIVU */ { CPUFUNC(op_80f8_0), 33016 }, /* DIVU */ { CPUFUNC(op_80f9_0), 33017 }, /* DIVU */ { CPUFUNC(op_80fa_0), 33018 }, /* DIVU */ { CPUFUNC(op_80fb_4), 33019 }, /* DIVU */ { CPUFUNC(op_80fc_0), 33020 }, /* DIVU */ { CPUFUNC(op_8100_2), 33024 }, /* SBCD */ { CPUFUNC(op_8108_2), 33032 }, /* SBCD */ { CPUFUNC(op_8110_0), 33040 }, /* OR */ { CPUFUNC(op_8118_0), 33048 }, /* OR */ { CPUFUNC(op_8120_0), 33056 }, /* OR */ { CPUFUNC(op_8128_0), 33064 }, /* OR */ { CPUFUNC(op_8130_4), 33072 }, /* OR */ { CPUFUNC(op_8138_0), 33080 }, /* OR */ { CPUFUNC(op_8139_0), 33081 }, /* OR */ { CPUFUNC(op_8150_0), 33104 }, /* OR */ { CPUFUNC(op_8158_0), 33112 }, /* OR */ { CPUFUNC(op_8160_0), 33120 }, /* OR */ { CPUFUNC(op_8168_0), 33128 }, /* OR */ { CPUFUNC(op_8170_4), 33136 }, /* OR */ { CPUFUNC(op_8178_0), 33144 }, /* OR */ { CPUFUNC(op_8179_0), 33145 }, /* OR */ { CPUFUNC(op_8190_0), 33168 }, /* OR */ { CPUFUNC(op_8198_0), 33176 }, /* OR */ { CPUFUNC(op_81a0_0), 33184 }, /* OR */ { CPUFUNC(op_81a8_0), 33192 }, /* OR */ { CPUFUNC(op_81b0_4), 33200 }, /* OR */ { CPUFUNC(op_81b8_0), 33208 }, /* OR */ { CPUFUNC(op_81b9_0), 33209 }, /* OR */ { CPUFUNC(op_81c0_0), 33216 }, /* DIVS */ { CPUFUNC(op_81d0_0), 33232 }, /* DIVS */ { CPUFUNC(op_81d8_0), 33240 }, /* DIVS */ { CPUFUNC(op_81e0_0), 33248 }, /* DIVS */ { CPUFUNC(op_81e8_0), 33256 }, /* DIVS */ { CPUFUNC(op_81f0_4), 33264 }, /* DIVS */ { CPUFUNC(op_81f8_0), 33272 }, /* DIVS */ { CPUFUNC(op_81f9_0), 33273 }, /* DIVS */ { CPUFUNC(op_81fa_0), 33274 }, /* DIVS */ { CPUFUNC(op_81fb_4), 33275 }, /* DIVS */ { CPUFUNC(op_81fc_0), 33276 }, /* DIVS */ { CPUFUNC(op_9000_0), 36864 }, /* SUB */ { CPUFUNC(op_9010_0), 36880 }, /* SUB */ { CPUFUNC(op_9018_0), 36888 }, /* SUB */ { CPUFUNC(op_9020_0), 36896 }, /* SUB */ { CPUFUNC(op_9028_0), 36904 }, /* SUB */ { CPUFUNC(op_9030_4), 36912 }, /* SUB */ { CPUFUNC(op_9038_0), 36920 }, /* SUB */ { CPUFUNC(op_9039_0), 36921 }, /* SUB */ { CPUFUNC(op_903a_0), 36922 }, /* SUB */ { CPUFUNC(op_903b_4), 36923 }, /* SUB */ { CPUFUNC(op_903c_0), 36924 }, /* SUB */ { CPUFUNC(op_9040_0), 36928 }, /* SUB */ { CPUFUNC(op_9048_0), 36936 }, /* SUB */ { CPUFUNC(op_9050_0), 36944 }, /* SUB */ { CPUFUNC(op_9058_0), 36952 }, /* SUB */ { CPUFUNC(op_9060_0), 36960 }, /* SUB */ { CPUFUNC(op_9068_0), 36968 }, /* SUB */ { CPUFUNC(op_9070_4), 36976 }, /* SUB */ { CPUFUNC(op_9078_0), 36984 }, /* SUB */ { CPUFUNC(op_9079_0), 36985 }, /* SUB */ { CPUFUNC(op_907a_0), 36986 }, /* SUB */ { CPUFUNC(op_907b_4), 36987 }, /* SUB */ { CPUFUNC(op_907c_0), 36988 }, /* SUB */ { CPUFUNC(op_9080_0), 36992 }, /* SUB */ { CPUFUNC(op_9088_0), 37000 }, /* SUB */ { CPUFUNC(op_9090_0), 37008 }, /* SUB */ { CPUFUNC(op_9098_0), 37016 }, /* SUB */ { CPUFUNC(op_90a0_0), 37024 }, /* SUB */ { CPUFUNC(op_90a8_0), 37032 }, /* SUB */ { CPUFUNC(op_90b0_4), 37040 }, /* SUB */ { CPUFUNC(op_90b8_0), 37048 }, /* SUB */ { CPUFUNC(op_90b9_0), 37049 }, /* SUB */ { CPUFUNC(op_90ba_0), 37050 }, /* SUB */ { CPUFUNC(op_90bb_4), 37051 }, /* SUB */ { CPUFUNC(op_90bc_0), 37052 }, /* SUB */ { CPUFUNC(op_90c0_0), 37056 }, /* SUBA */ { CPUFUNC(op_90c8_0), 37064 }, /* SUBA */ { CPUFUNC(op_90d0_0), 37072 }, /* SUBA */ { CPUFUNC(op_90d8_0), 37080 }, /* SUBA */ { CPUFUNC(op_90e0_0), 37088 }, /* SUBA */ { CPUFUNC(op_90e8_0), 37096 }, /* SUBA */ { CPUFUNC(op_90f0_4), 37104 }, /* SUBA */ { CPUFUNC(op_90f8_0), 37112 }, /* SUBA */ { CPUFUNC(op_90f9_0), 37113 }, /* SUBA */ { CPUFUNC(op_90fa_0), 37114 }, /* SUBA */ { CPUFUNC(op_90fb_4), 37115 }, /* SUBA */ { CPUFUNC(op_90fc_0), 37116 }, /* SUBA */ { CPUFUNC(op_9100_0), 37120 }, /* SUBX */ { CPUFUNC(op_9108_0), 37128 }, /* SUBX */ { CPUFUNC(op_9110_0), 37136 }, /* SUB */ { CPUFUNC(op_9118_0), 37144 }, /* SUB */ { CPUFUNC(op_9120_0), 37152 }, /* SUB */ { CPUFUNC(op_9128_0), 37160 }, /* SUB */ { CPUFUNC(op_9130_4), 37168 }, /* SUB */ { CPUFUNC(op_9138_0), 37176 }, /* SUB */ { CPUFUNC(op_9139_0), 37177 }, /* SUB */ { CPUFUNC(op_9140_0), 37184 }, /* SUBX */ { CPUFUNC(op_9148_0), 37192 }, /* SUBX */ { CPUFUNC(op_9150_0), 37200 }, /* SUB */ { CPUFUNC(op_9158_0), 37208 }, /* SUB */ { CPUFUNC(op_9160_0), 37216 }, /* SUB */ { CPUFUNC(op_9168_0), 37224 }, /* SUB */ { CPUFUNC(op_9170_4), 37232 }, /* SUB */ { CPUFUNC(op_9178_0), 37240 }, /* SUB */ { CPUFUNC(op_9179_0), 37241 }, /* SUB */ { CPUFUNC(op_9180_0), 37248 }, /* SUBX */ { CPUFUNC(op_9188_0), 37256 }, /* SUBX */ { CPUFUNC(op_9190_0), 37264 }, /* SUB */ { CPUFUNC(op_9198_0), 37272 }, /* SUB */ { CPUFUNC(op_91a0_0), 37280 }, /* SUB */ { CPUFUNC(op_91a8_0), 37288 }, /* SUB */ { CPUFUNC(op_91b0_4), 37296 }, /* SUB */ { CPUFUNC(op_91b8_0), 37304 }, /* SUB */ { CPUFUNC(op_91b9_0), 37305 }, /* SUB */ { CPUFUNC(op_91c0_0), 37312 }, /* SUBA */ { CPUFUNC(op_91c8_0), 37320 }, /* SUBA */ { CPUFUNC(op_91d0_0), 37328 }, /* SUBA */ { CPUFUNC(op_91d8_0), 37336 }, /* SUBA */ { CPUFUNC(op_91e0_0), 37344 }, /* SUBA */ { CPUFUNC(op_91e8_0), 37352 }, /* SUBA */ { CPUFUNC(op_91f0_4), 37360 }, /* SUBA */ { CPUFUNC(op_91f8_0), 37368 }, /* SUBA */ { CPUFUNC(op_91f9_0), 37369 }, /* SUBA */ { CPUFUNC(op_91fa_0), 37370 }, /* SUBA */ { CPUFUNC(op_91fb_4), 37371 }, /* SUBA */ { CPUFUNC(op_91fc_0), 37372 }, /* SUBA */ { CPUFUNC(op_b000_0), 45056 }, /* CMP */ { CPUFUNC(op_b010_0), 45072 }, /* CMP */ { CPUFUNC(op_b018_0), 45080 }, /* CMP */ { CPUFUNC(op_b020_0), 45088 }, /* CMP */ { CPUFUNC(op_b028_0), 45096 }, /* CMP */ { CPUFUNC(op_b030_4), 45104 }, /* CMP */ { CPUFUNC(op_b038_0), 45112 }, /* CMP */ { CPUFUNC(op_b039_0), 45113 }, /* CMP */ { CPUFUNC(op_b03a_0), 45114 }, /* CMP */ { CPUFUNC(op_b03b_4), 45115 }, /* CMP */ { CPUFUNC(op_b03c_0), 45116 }, /* CMP */ { CPUFUNC(op_b040_0), 45120 }, /* CMP */ { CPUFUNC(op_b048_0), 45128 }, /* CMP */ { CPUFUNC(op_b050_0), 45136 }, /* CMP */ { CPUFUNC(op_b058_0), 45144 }, /* CMP */ { CPUFUNC(op_b060_0), 45152 }, /* CMP */ { CPUFUNC(op_b068_0), 45160 }, /* CMP */ { CPUFUNC(op_b070_4), 45168 }, /* CMP */ { CPUFUNC(op_b078_0), 45176 }, /* CMP */ { CPUFUNC(op_b079_0), 45177 }, /* CMP */ { CPUFUNC(op_b07a_0), 45178 }, /* CMP */ { CPUFUNC(op_b07b_4), 45179 }, /* CMP */ { CPUFUNC(op_b07c_0), 45180 }, /* CMP */ { CPUFUNC(op_b080_0), 45184 }, /* CMP */ { CPUFUNC(op_b088_0), 45192 }, /* CMP */ { CPUFUNC(op_b090_0), 45200 }, /* CMP */ { CPUFUNC(op_b098_0), 45208 }, /* CMP */ { CPUFUNC(op_b0a0_0), 45216 }, /* CMP */ { CPUFUNC(op_b0a8_0), 45224 }, /* CMP */ { CPUFUNC(op_b0b0_4), 45232 }, /* CMP */ { CPUFUNC(op_b0b8_0), 45240 }, /* CMP */ { CPUFUNC(op_b0b9_0), 45241 }, /* CMP */ { CPUFUNC(op_b0ba_0), 45242 }, /* CMP */ { CPUFUNC(op_b0bb_4), 45243 }, /* CMP */ { CPUFUNC(op_b0bc_0), 45244 }, /* CMP */ { CPUFUNC(op_b0c0_0), 45248 }, /* CMPA */ { CPUFUNC(op_b0c8_0), 45256 }, /* CMPA */ { CPUFUNC(op_b0d0_0), 45264 }, /* CMPA */ { CPUFUNC(op_b0d8_0), 45272 }, /* CMPA */ { CPUFUNC(op_b0e0_0), 45280 }, /* CMPA */ { CPUFUNC(op_b0e8_0), 45288 }, /* CMPA */ { CPUFUNC(op_b0f0_4), 45296 }, /* CMPA */ { CPUFUNC(op_b0f8_0), 45304 }, /* CMPA */ { CPUFUNC(op_b0f9_0), 45305 }, /* CMPA */ { CPUFUNC(op_b0fa_0), 45306 }, /* CMPA */ { CPUFUNC(op_b0fb_4), 45307 }, /* CMPA */ { CPUFUNC(op_b0fc_0), 45308 }, /* CMPA */ { CPUFUNC(op_b100_0), 45312 }, /* EOR */ { CPUFUNC(op_b108_0), 45320 }, /* CMPM */ { CPUFUNC(op_b110_0), 45328 }, /* EOR */ { CPUFUNC(op_b118_0), 45336 }, /* EOR */ { CPUFUNC(op_b120_0), 45344 }, /* EOR */ { CPUFUNC(op_b128_0), 45352 }, /* EOR */ { CPUFUNC(op_b130_4), 45360 }, /* EOR */ { CPUFUNC(op_b138_0), 45368 }, /* EOR */ { CPUFUNC(op_b139_0), 45369 }, /* EOR */ { CPUFUNC(op_b140_0), 45376 }, /* EOR */ { CPUFUNC(op_b148_0), 45384 }, /* CMPM */ { CPUFUNC(op_b150_0), 45392 }, /* EOR */ { CPUFUNC(op_b158_0), 45400 }, /* EOR */ { CPUFUNC(op_b160_0), 45408 }, /* EOR */ { CPUFUNC(op_b168_0), 45416 }, /* EOR */ { CPUFUNC(op_b170_4), 45424 }, /* EOR */ { CPUFUNC(op_b178_0), 45432 }, /* EOR */ { CPUFUNC(op_b179_0), 45433 }, /* EOR */ { CPUFUNC(op_b180_0), 45440 }, /* EOR */ { CPUFUNC(op_b188_0), 45448 }, /* CMPM */ { CPUFUNC(op_b190_0), 45456 }, /* EOR */ { CPUFUNC(op_b198_0), 45464 }, /* EOR */ { CPUFUNC(op_b1a0_0), 45472 }, /* EOR */ { CPUFUNC(op_b1a8_0), 45480 }, /* EOR */ { CPUFUNC(op_b1b0_4), 45488 }, /* EOR */ { CPUFUNC(op_b1b8_0), 45496 }, /* EOR */ { CPUFUNC(op_b1b9_0), 45497 }, /* EOR */ { CPUFUNC(op_b1c0_0), 45504 }, /* CMPA */ { CPUFUNC(op_b1c8_0), 45512 }, /* CMPA */ { CPUFUNC(op_b1d0_0), 45520 }, /* CMPA */ { CPUFUNC(op_b1d8_0), 45528 }, /* CMPA */ { CPUFUNC(op_b1e0_0), 45536 }, /* CMPA */ { CPUFUNC(op_b1e8_0), 45544 }, /* CMPA */ { CPUFUNC(op_b1f0_4), 45552 }, /* CMPA */ { CPUFUNC(op_b1f8_0), 45560 }, /* CMPA */ { CPUFUNC(op_b1f9_0), 45561 }, /* CMPA */ { CPUFUNC(op_b1fa_0), 45562 }, /* CMPA */ { CPUFUNC(op_b1fb_4), 45563 }, /* CMPA */ { CPUFUNC(op_b1fc_0), 45564 }, /* CMPA */ { CPUFUNC(op_c000_0), 49152 }, /* AND */ { CPUFUNC(op_c010_0), 49168 }, /* AND */ { CPUFUNC(op_c018_0), 49176 }, /* AND */ { CPUFUNC(op_c020_0), 49184 }, /* AND */ { CPUFUNC(op_c028_0), 49192 }, /* AND */ { CPUFUNC(op_c030_4), 49200 }, /* AND */ { CPUFUNC(op_c038_0), 49208 }, /* AND */ { CPUFUNC(op_c039_0), 49209 }, /* AND */ { CPUFUNC(op_c03a_0), 49210 }, /* AND */ { CPUFUNC(op_c03b_4), 49211 }, /* AND */ { CPUFUNC(op_c03c_0), 49212 }, /* AND */ { CPUFUNC(op_c040_0), 49216 }, /* AND */ { CPUFUNC(op_c050_0), 49232 }, /* AND */ { CPUFUNC(op_c058_0), 49240 }, /* AND */ { CPUFUNC(op_c060_0), 49248 }, /* AND */ { CPUFUNC(op_c068_0), 49256 }, /* AND */ { CPUFUNC(op_c070_4), 49264 }, /* AND */ { CPUFUNC(op_c078_0), 49272 }, /* AND */ { CPUFUNC(op_c079_0), 49273 }, /* AND */ { CPUFUNC(op_c07a_0), 49274 }, /* AND */ { CPUFUNC(op_c07b_4), 49275 }, /* AND */ { CPUFUNC(op_c07c_0), 49276 }, /* AND */ { CPUFUNC(op_c080_0), 49280 }, /* AND */ { CPUFUNC(op_c090_0), 49296 }, /* AND */ { CPUFUNC(op_c098_0), 49304 }, /* AND */ { CPUFUNC(op_c0a0_0), 49312 }, /* AND */ { CPUFUNC(op_c0a8_0), 49320 }, /* AND */ { CPUFUNC(op_c0b0_4), 49328 }, /* AND */ { CPUFUNC(op_c0b8_0), 49336 }, /* AND */ { CPUFUNC(op_c0b9_0), 49337 }, /* AND */ { CPUFUNC(op_c0ba_0), 49338 }, /* AND */ { CPUFUNC(op_c0bb_4), 49339 }, /* AND */ { CPUFUNC(op_c0bc_0), 49340 }, /* AND */ { CPUFUNC(op_c0c0_0), 49344 }, /* MULU */ { CPUFUNC(op_c0d0_0), 49360 }, /* MULU */ { CPUFUNC(op_c0d8_0), 49368 }, /* MULU */ { CPUFUNC(op_c0e0_0), 49376 }, /* MULU */ { CPUFUNC(op_c0e8_0), 49384 }, /* MULU */ { CPUFUNC(op_c0f0_4), 49392 }, /* MULU */ { CPUFUNC(op_c0f8_0), 49400 }, /* MULU */ { CPUFUNC(op_c0f9_0), 49401 }, /* MULU */ { CPUFUNC(op_c0fa_0), 49402 }, /* MULU */ { CPUFUNC(op_c0fb_4), 49403 }, /* MULU */ { CPUFUNC(op_c0fc_0), 49404 }, /* MULU */ { CPUFUNC(op_c100_2), 49408 }, /* ABCD */ { CPUFUNC(op_c108_2), 49416 }, /* ABCD */ { CPUFUNC(op_c110_0), 49424 }, /* AND */ { CPUFUNC(op_c118_0), 49432 }, /* AND */ { CPUFUNC(op_c120_0), 49440 }, /* AND */ { CPUFUNC(op_c128_0), 49448 }, /* AND */ { CPUFUNC(op_c130_4), 49456 }, /* AND */ { CPUFUNC(op_c138_0), 49464 }, /* AND */ { CPUFUNC(op_c139_0), 49465 }, /* AND */ { CPUFUNC(op_c140_0), 49472 }, /* EXG */ { CPUFUNC(op_c148_0), 49480 }, /* EXG */ { CPUFUNC(op_c150_0), 49488 }, /* AND */ { CPUFUNC(op_c158_0), 49496 }, /* AND */ { CPUFUNC(op_c160_0), 49504 }, /* AND */ { CPUFUNC(op_c168_0), 49512 }, /* AND */ { CPUFUNC(op_c170_4), 49520 }, /* AND */ { CPUFUNC(op_c178_0), 49528 }, /* AND */ { CPUFUNC(op_c179_0), 49529 }, /* AND */ { CPUFUNC(op_c188_0), 49544 }, /* EXG */ { CPUFUNC(op_c190_0), 49552 }, /* AND */ { CPUFUNC(op_c198_0), 49560 }, /* AND */ { CPUFUNC(op_c1a0_0), 49568 }, /* AND */ { CPUFUNC(op_c1a8_0), 49576 }, /* AND */ { CPUFUNC(op_c1b0_4), 49584 }, /* AND */ { CPUFUNC(op_c1b8_0), 49592 }, /* AND */ { CPUFUNC(op_c1b9_0), 49593 }, /* AND */ { CPUFUNC(op_c1c0_0), 49600 }, /* MULS */ { CPUFUNC(op_c1d0_0), 49616 }, /* MULS */ { CPUFUNC(op_c1d8_0), 49624 }, /* MULS */ { CPUFUNC(op_c1e0_0), 49632 }, /* MULS */ { CPUFUNC(op_c1e8_0), 49640 }, /* MULS */ { CPUFUNC(op_c1f0_4), 49648 }, /* MULS */ { CPUFUNC(op_c1f8_0), 49656 }, /* MULS */ { CPUFUNC(op_c1f9_0), 49657 }, /* MULS */ { CPUFUNC(op_c1fa_0), 49658 }, /* MULS */ { CPUFUNC(op_c1fb_4), 49659 }, /* MULS */ { CPUFUNC(op_c1fc_0), 49660 }, /* MULS */ { CPUFUNC(op_d000_0), 53248 }, /* ADD */ { CPUFUNC(op_d010_0), 53264 }, /* ADD */ { CPUFUNC(op_d018_0), 53272 }, /* ADD */ { CPUFUNC(op_d020_0), 53280 }, /* ADD */ { CPUFUNC(op_d028_0), 53288 }, /* ADD */ { CPUFUNC(op_d030_4), 53296 }, /* ADD */ { CPUFUNC(op_d038_0), 53304 }, /* ADD */ { CPUFUNC(op_d039_0), 53305 }, /* ADD */ { CPUFUNC(op_d03a_0), 53306 }, /* ADD */ { CPUFUNC(op_d03b_4), 53307 }, /* ADD */ { CPUFUNC(op_d03c_0), 53308 }, /* ADD */ { CPUFUNC(op_d040_0), 53312 }, /* ADD */ { CPUFUNC(op_d048_0), 53320 }, /* ADD */ { CPUFUNC(op_d050_0), 53328 }, /* ADD */ { CPUFUNC(op_d058_0), 53336 }, /* ADD */ { CPUFUNC(op_d060_0), 53344 }, /* ADD */ { CPUFUNC(op_d068_0), 53352 }, /* ADD */ { CPUFUNC(op_d070_4), 53360 }, /* ADD */ { CPUFUNC(op_d078_0), 53368 }, /* ADD */ { CPUFUNC(op_d079_0), 53369 }, /* ADD */ { CPUFUNC(op_d07a_0), 53370 }, /* ADD */ { CPUFUNC(op_d07b_4), 53371 }, /* ADD */ { CPUFUNC(op_d07c_0), 53372 }, /* ADD */ { CPUFUNC(op_d080_0), 53376 }, /* ADD */ { CPUFUNC(op_d088_0), 53384 }, /* ADD */ { CPUFUNC(op_d090_0), 53392 }, /* ADD */ { CPUFUNC(op_d098_0), 53400 }, /* ADD */ { CPUFUNC(op_d0a0_0), 53408 }, /* ADD */ { CPUFUNC(op_d0a8_0), 53416 }, /* ADD */ { CPUFUNC(op_d0b0_4), 53424 }, /* ADD */ { CPUFUNC(op_d0b8_0), 53432 }, /* ADD */ { CPUFUNC(op_d0b9_0), 53433 }, /* ADD */ { CPUFUNC(op_d0ba_0), 53434 }, /* ADD */ { CPUFUNC(op_d0bb_4), 53435 }, /* ADD */ { CPUFUNC(op_d0bc_0), 53436 }, /* ADD */ { CPUFUNC(op_d0c0_0), 53440 }, /* ADDA */ { CPUFUNC(op_d0c8_0), 53448 }, /* ADDA */ { CPUFUNC(op_d0d0_0), 53456 }, /* ADDA */ { CPUFUNC(op_d0d8_0), 53464 }, /* ADDA */ { CPUFUNC(op_d0e0_0), 53472 }, /* ADDA */ { CPUFUNC(op_d0e8_0), 53480 }, /* ADDA */ { CPUFUNC(op_d0f0_4), 53488 }, /* ADDA */ { CPUFUNC(op_d0f8_0), 53496 }, /* ADDA */ { CPUFUNC(op_d0f9_0), 53497 }, /* ADDA */ { CPUFUNC(op_d0fa_0), 53498 }, /* ADDA */ { CPUFUNC(op_d0fb_4), 53499 }, /* ADDA */ { CPUFUNC(op_d0fc_0), 53500 }, /* ADDA */ { CPUFUNC(op_d100_0), 53504 }, /* ADDX */ { CPUFUNC(op_d108_0), 53512 }, /* ADDX */ { CPUFUNC(op_d110_0), 53520 }, /* ADD */ { CPUFUNC(op_d118_0), 53528 }, /* ADD */ { CPUFUNC(op_d120_0), 53536 }, /* ADD */ { CPUFUNC(op_d128_0), 53544 }, /* ADD */ { CPUFUNC(op_d130_4), 53552 }, /* ADD */ { CPUFUNC(op_d138_0), 53560 }, /* ADD */ { CPUFUNC(op_d139_0), 53561 }, /* ADD */ { CPUFUNC(op_d140_0), 53568 }, /* ADDX */ { CPUFUNC(op_d148_0), 53576 }, /* ADDX */ { CPUFUNC(op_d150_0), 53584 }, /* ADD */ { CPUFUNC(op_d158_0), 53592 }, /* ADD */ { CPUFUNC(op_d160_0), 53600 }, /* ADD */ { CPUFUNC(op_d168_0), 53608 }, /* ADD */ { CPUFUNC(op_d170_4), 53616 }, /* ADD */ { CPUFUNC(op_d178_0), 53624 }, /* ADD */ { CPUFUNC(op_d179_0), 53625 }, /* ADD */ { CPUFUNC(op_d180_0), 53632 }, /* ADDX */ { CPUFUNC(op_d188_0), 53640 }, /* ADDX */ { CPUFUNC(op_d190_0), 53648 }, /* ADD */ { CPUFUNC(op_d198_0), 53656 }, /* ADD */ { CPUFUNC(op_d1a0_0), 53664 }, /* ADD */ { CPUFUNC(op_d1a8_0), 53672 }, /* ADD */ { CPUFUNC(op_d1b0_4), 53680 }, /* ADD */ { CPUFUNC(op_d1b8_0), 53688 }, /* ADD */ { CPUFUNC(op_d1b9_0), 53689 }, /* ADD */ { CPUFUNC(op_d1c0_0), 53696 }, /* ADDA */ { CPUFUNC(op_d1c8_0), 53704 }, /* ADDA */ { CPUFUNC(op_d1d0_0), 53712 }, /* ADDA */ { CPUFUNC(op_d1d8_0), 53720 }, /* ADDA */ { CPUFUNC(op_d1e0_0), 53728 }, /* ADDA */ { CPUFUNC(op_d1e8_0), 53736 }, /* ADDA */ { CPUFUNC(op_d1f0_4), 53744 }, /* ADDA */ { CPUFUNC(op_d1f8_0), 53752 }, /* ADDA */ { CPUFUNC(op_d1f9_0), 53753 }, /* ADDA */ { CPUFUNC(op_d1fa_0), 53754 }, /* ADDA */ { CPUFUNC(op_d1fb_4), 53755 }, /* ADDA */ { CPUFUNC(op_d1fc_0), 53756 }, /* ADDA */ { CPUFUNC(op_e000_0), 57344 }, /* ASR */ { CPUFUNC(op_e008_0), 57352 }, /* LSR */ { CPUFUNC(op_e010_0), 57360 }, /* ROXR */ { CPUFUNC(op_e018_0), 57368 }, /* ROR */ { CPUFUNC(op_e020_0), 57376 }, /* ASR */ { CPUFUNC(op_e028_0), 57384 }, /* LSR */ { CPUFUNC(op_e030_0), 57392 }, /* ROXR */ { CPUFUNC(op_e038_0), 57400 }, /* ROR */ { CPUFUNC(op_e040_0), 57408 }, /* ASR */ { CPUFUNC(op_e048_0), 57416 }, /* LSR */ { CPUFUNC(op_e050_0), 57424 }, /* ROXR */ { CPUFUNC(op_e058_0), 57432 }, /* ROR */ { CPUFUNC(op_e060_0), 57440 }, /* ASR */ { CPUFUNC(op_e068_0), 57448 }, /* LSR */ { CPUFUNC(op_e070_0), 57456 }, /* ROXR */ { CPUFUNC(op_e078_0), 57464 }, /* ROR */ { CPUFUNC(op_e080_0), 57472 }, /* ASR */ { CPUFUNC(op_e088_0), 57480 }, /* LSR */ { CPUFUNC(op_e090_0), 57488 }, /* ROXR */ { CPUFUNC(op_e098_0), 57496 }, /* ROR */ { CPUFUNC(op_e0a0_0), 57504 }, /* ASR */ { CPUFUNC(op_e0a8_0), 57512 }, /* LSR */ { CPUFUNC(op_e0b0_0), 57520 }, /* ROXR */ { CPUFUNC(op_e0b8_0), 57528 }, /* ROR */ { CPUFUNC(op_e0d0_0), 57552 }, /* ASRW */ { CPUFUNC(op_e0d8_0), 57560 }, /* ASRW */ { CPUFUNC(op_e0e0_0), 57568 }, /* ASRW */ { CPUFUNC(op_e0e8_0), 57576 }, /* ASRW */ { CPUFUNC(op_e0f0_4), 57584 }, /* ASRW */ { CPUFUNC(op_e0f8_0), 57592 }, /* ASRW */ { CPUFUNC(op_e0f9_0), 57593 }, /* ASRW */ { CPUFUNC(op_e100_0), 57600 }, /* ASL */ { CPUFUNC(op_e108_0), 57608 }, /* LSL */ { CPUFUNC(op_e110_0), 57616 }, /* ROXL */ { CPUFUNC(op_e118_0), 57624 }, /* ROL */ { CPUFUNC(op_e120_0), 57632 }, /* ASL */ { CPUFUNC(op_e128_0), 57640 }, /* LSL */ { CPUFUNC(op_e130_0), 57648 }, /* ROXL */ { CPUFUNC(op_e138_0), 57656 }, /* ROL */ { CPUFUNC(op_e140_0), 57664 }, /* ASL */ { CPUFUNC(op_e148_0), 57672 }, /* LSL */ { CPUFUNC(op_e150_0), 57680 }, /* ROXL */ { CPUFUNC(op_e158_0), 57688 }, /* ROL */ { CPUFUNC(op_e160_0), 57696 }, /* ASL */ { CPUFUNC(op_e168_0), 57704 }, /* LSL */ { CPUFUNC(op_e170_0), 57712 }, /* ROXL */ { CPUFUNC(op_e178_0), 57720 }, /* ROL */ { CPUFUNC(op_e180_0), 57728 }, /* ASL */ { CPUFUNC(op_e188_0), 57736 }, /* LSL */ { CPUFUNC(op_e190_0), 57744 }, /* ROXL */ { CPUFUNC(op_e198_0), 57752 }, /* ROL */ { CPUFUNC(op_e1a0_0), 57760 }, /* ASL */ { CPUFUNC(op_e1a8_0), 57768 }, /* LSL */ { CPUFUNC(op_e1b0_0), 57776 }, /* ROXL */ { CPUFUNC(op_e1b8_0), 57784 }, /* ROL */ { CPUFUNC(op_e1d0_0), 57808 }, /* ASLW */ { CPUFUNC(op_e1d8_0), 57816 }, /* ASLW */ { CPUFUNC(op_e1e0_0), 57824 }, /* ASLW */ { CPUFUNC(op_e1e8_0), 57832 }, /* ASLW */ { CPUFUNC(op_e1f0_4), 57840 }, /* ASLW */ { CPUFUNC(op_e1f8_0), 57848 }, /* ASLW */ { CPUFUNC(op_e1f9_0), 57849 }, /* ASLW */ { CPUFUNC(op_e2d0_0), 58064 }, /* LSRW */ { CPUFUNC(op_e2d8_0), 58072 }, /* LSRW */ { CPUFUNC(op_e2e0_0), 58080 }, /* LSRW */ { CPUFUNC(op_e2e8_0), 58088 }, /* LSRW */ { CPUFUNC(op_e2f0_4), 58096 }, /* LSRW */ { CPUFUNC(op_e2f8_0), 58104 }, /* LSRW */ { CPUFUNC(op_e2f9_0), 58105 }, /* LSRW */ { CPUFUNC(op_e3d0_0), 58320 }, /* LSLW */ { CPUFUNC(op_e3d8_0), 58328 }, /* LSLW */ { CPUFUNC(op_e3e0_0), 58336 }, /* LSLW */ { CPUFUNC(op_e3e8_0), 58344 }, /* LSLW */ { CPUFUNC(op_e3f0_4), 58352 }, /* LSLW */ { CPUFUNC(op_e3f8_0), 58360 }, /* LSLW */ { CPUFUNC(op_e3f9_0), 58361 }, /* LSLW */ { CPUFUNC(op_e4d0_0), 58576 }, /* ROXRW */ { CPUFUNC(op_e4d8_0), 58584 }, /* ROXRW */ { CPUFUNC(op_e4e0_0), 58592 }, /* ROXRW */ { CPUFUNC(op_e4e8_0), 58600 }, /* ROXRW */ { CPUFUNC(op_e4f0_4), 58608 }, /* ROXRW */ { CPUFUNC(op_e4f8_0), 58616 }, /* ROXRW */ { CPUFUNC(op_e4f9_0), 58617 }, /* ROXRW */ { CPUFUNC(op_e5d0_0), 58832 }, /* ROXLW */ { CPUFUNC(op_e5d8_0), 58840 }, /* ROXLW */ { CPUFUNC(op_e5e0_0), 58848 }, /* ROXLW */ { CPUFUNC(op_e5e8_0), 58856 }, /* ROXLW */ { CPUFUNC(op_e5f0_4), 58864 }, /* ROXLW */ { CPUFUNC(op_e5f8_0), 58872 }, /* ROXLW */ { CPUFUNC(op_e5f9_0), 58873 }, /* ROXLW */ { CPUFUNC(op_e6d0_0), 59088 }, /* RORW */ { CPUFUNC(op_e6d8_0), 59096 }, /* RORW */ { CPUFUNC(op_e6e0_0), 59104 }, /* RORW */ { CPUFUNC(op_e6e8_0), 59112 }, /* RORW */ { CPUFUNC(op_e6f0_4), 59120 }, /* RORW */ { CPUFUNC(op_e6f8_0), 59128 }, /* RORW */ { CPUFUNC(op_e6f9_0), 59129 }, /* RORW */ { CPUFUNC(op_e7d0_0), 59344 }, /* ROLW */ { CPUFUNC(op_e7d8_0), 59352 }, /* ROLW */ { CPUFUNC(op_e7e0_0), 59360 }, /* ROLW */ { CPUFUNC(op_e7e8_0), 59368 }, /* ROLW */ { CPUFUNC(op_e7f0_4), 59376 }, /* ROLW */ { CPUFUNC(op_e7f8_0), 59384 }, /* ROLW */ { CPUFUNC(op_e7f9_0), 59385 }, /* ROLW */ { 0, 0 }}; #endif /* CPUEMU_68000_ONLY */ #ifndef CPUEMU_68000_ONLY const struct cputbl CPUFUNC(op_smalltbl_5)[] = { { CPUFUNC(op_0000_0), 0 }, /* OR */ { CPUFUNC(op_0010_0), 16 }, /* OR */ { CPUFUNC(op_0018_0), 24 }, /* OR */ { CPUFUNC(op_0020_0), 32 }, /* OR */ { CPUFUNC(op_0028_0), 40 }, /* OR */ { CPUFUNC(op_0030_4), 48 }, /* OR */ { CPUFUNC(op_0038_0), 56 }, /* OR */ { CPUFUNC(op_0039_0), 57 }, /* OR */ { CPUFUNC(op_003c_0), 60 }, /* ORSR */ { CPUFUNC(op_0040_0), 64 }, /* OR */ { CPUFUNC(op_0050_0), 80 }, /* OR */ { CPUFUNC(op_0058_0), 88 }, /* OR */ { CPUFUNC(op_0060_0), 96 }, /* OR */ { CPUFUNC(op_0068_0), 104 }, /* OR */ { CPUFUNC(op_0070_4), 112 }, /* OR */ { CPUFUNC(op_0078_0), 120 }, /* OR */ { CPUFUNC(op_0079_0), 121 }, /* OR */ { CPUFUNC(op_007c_0), 124 }, /* ORSR */ { CPUFUNC(op_0080_0), 128 }, /* OR */ { CPUFUNC(op_0090_0), 144 }, /* OR */ { CPUFUNC(op_0098_0), 152 }, /* OR */ { CPUFUNC(op_00a0_0), 160 }, /* OR */ { CPUFUNC(op_00a8_0), 168 }, /* OR */ { CPUFUNC(op_00b0_4), 176 }, /* OR */ { CPUFUNC(op_00b8_0), 184 }, /* OR */ { CPUFUNC(op_00b9_0), 185 }, /* OR */ { CPUFUNC(op_0100_0), 256 }, /* BTST */ { CPUFUNC(op_0108_0), 264 }, /* MVPMR */ { CPUFUNC(op_0110_0), 272 }, /* BTST */ { CPUFUNC(op_0118_0), 280 }, /* BTST */ { CPUFUNC(op_0120_0), 288 }, /* BTST */ { CPUFUNC(op_0128_0), 296 }, /* BTST */ { CPUFUNC(op_0130_4), 304 }, /* BTST */ { CPUFUNC(op_0138_0), 312 }, /* BTST */ { CPUFUNC(op_0139_0), 313 }, /* BTST */ { CPUFUNC(op_013a_0), 314 }, /* BTST */ { CPUFUNC(op_013b_4), 315 }, /* BTST */ { CPUFUNC(op_013c_0), 316 }, /* BTST */ { CPUFUNC(op_0140_0), 320 }, /* BCHG */ { CPUFUNC(op_0148_0), 328 }, /* MVPMR */ { CPUFUNC(op_0150_0), 336 }, /* BCHG */ { CPUFUNC(op_0158_0), 344 }, /* BCHG */ { CPUFUNC(op_0160_0), 352 }, /* BCHG */ { CPUFUNC(op_0168_0), 360 }, /* BCHG */ { CPUFUNC(op_0170_4), 368 }, /* BCHG */ { CPUFUNC(op_0178_0), 376 }, /* BCHG */ { CPUFUNC(op_0179_0), 377 }, /* BCHG */ { CPUFUNC(op_017a_0), 378 }, /* BCHG */ { CPUFUNC(op_017b_4), 379 }, /* BCHG */ { CPUFUNC(op_0180_0), 384 }, /* BCLR */ { CPUFUNC(op_0188_0), 392 }, /* MVPRM */ { CPUFUNC(op_0190_0), 400 }, /* BCLR */ { CPUFUNC(op_0198_0), 408 }, /* BCLR */ { CPUFUNC(op_01a0_0), 416 }, /* BCLR */ { CPUFUNC(op_01a8_0), 424 }, /* BCLR */ { CPUFUNC(op_01b0_4), 432 }, /* BCLR */ { CPUFUNC(op_01b8_0), 440 }, /* BCLR */ { CPUFUNC(op_01b9_0), 441 }, /* BCLR */ { CPUFUNC(op_01ba_0), 442 }, /* BCLR */ { CPUFUNC(op_01bb_4), 443 }, /* BCLR */ { CPUFUNC(op_01c0_0), 448 }, /* BSET */ { CPUFUNC(op_01c8_0), 456 }, /* MVPRM */ { CPUFUNC(op_01d0_0), 464 }, /* BSET */ { CPUFUNC(op_01d8_0), 472 }, /* BSET */ { CPUFUNC(op_01e0_0), 480 }, /* BSET */ { CPUFUNC(op_01e8_0), 488 }, /* BSET */ { CPUFUNC(op_01f0_4), 496 }, /* BSET */ { CPUFUNC(op_01f8_0), 504 }, /* BSET */ { CPUFUNC(op_01f9_0), 505 }, /* BSET */ { CPUFUNC(op_01fa_0), 506 }, /* BSET */ { CPUFUNC(op_01fb_4), 507 }, /* BSET */ { CPUFUNC(op_0200_0), 512 }, /* AND */ { CPUFUNC(op_0210_0), 528 }, /* AND */ { CPUFUNC(op_0218_0), 536 }, /* AND */ { CPUFUNC(op_0220_0), 544 }, /* AND */ { CPUFUNC(op_0228_0), 552 }, /* AND */ { CPUFUNC(op_0230_4), 560 }, /* AND */ { CPUFUNC(op_0238_0), 568 }, /* AND */ { CPUFUNC(op_0239_0), 569 }, /* AND */ { CPUFUNC(op_023c_0), 572 }, /* ANDSR */ { CPUFUNC(op_0240_0), 576 }, /* AND */ { CPUFUNC(op_0250_0), 592 }, /* AND */ { CPUFUNC(op_0258_0), 600 }, /* AND */ { CPUFUNC(op_0260_0), 608 }, /* AND */ { CPUFUNC(op_0268_0), 616 }, /* AND */ { CPUFUNC(op_0270_4), 624 }, /* AND */ { CPUFUNC(op_0278_0), 632 }, /* AND */ { CPUFUNC(op_0279_0), 633 }, /* AND */ { CPUFUNC(op_027c_0), 636 }, /* ANDSR */ { CPUFUNC(op_0280_0), 640 }, /* AND */ { CPUFUNC(op_0290_0), 656 }, /* AND */ { CPUFUNC(op_0298_0), 664 }, /* AND */ { CPUFUNC(op_02a0_0), 672 }, /* AND */ { CPUFUNC(op_02a8_0), 680 }, /* AND */ { CPUFUNC(op_02b0_4), 688 }, /* AND */ { CPUFUNC(op_02b8_0), 696 }, /* AND */ { CPUFUNC(op_02b9_0), 697 }, /* AND */ { CPUFUNC(op_0400_0), 1024 }, /* SUB */ { CPUFUNC(op_0410_0), 1040 }, /* SUB */ { CPUFUNC(op_0418_0), 1048 }, /* SUB */ { CPUFUNC(op_0420_0), 1056 }, /* SUB */ { CPUFUNC(op_0428_0), 1064 }, /* SUB */ { CPUFUNC(op_0430_4), 1072 }, /* SUB */ { CPUFUNC(op_0438_0), 1080 }, /* SUB */ { CPUFUNC(op_0439_0), 1081 }, /* SUB */ { CPUFUNC(op_0440_0), 1088 }, /* SUB */ { CPUFUNC(op_0450_0), 1104 }, /* SUB */ { CPUFUNC(op_0458_0), 1112 }, /* SUB */ { CPUFUNC(op_0460_0), 1120 }, /* SUB */ { CPUFUNC(op_0468_0), 1128 }, /* SUB */ { CPUFUNC(op_0470_4), 1136 }, /* SUB */ { CPUFUNC(op_0478_0), 1144 }, /* SUB */ { CPUFUNC(op_0479_0), 1145 }, /* SUB */ { CPUFUNC(op_0480_0), 1152 }, /* SUB */ { CPUFUNC(op_0490_0), 1168 }, /* SUB */ { CPUFUNC(op_0498_0), 1176 }, /* SUB */ { CPUFUNC(op_04a0_0), 1184 }, /* SUB */ { CPUFUNC(op_04a8_0), 1192 }, /* SUB */ { CPUFUNC(op_04b0_4), 1200 }, /* SUB */ { CPUFUNC(op_04b8_0), 1208 }, /* SUB */ { CPUFUNC(op_04b9_0), 1209 }, /* SUB */ { CPUFUNC(op_0600_0), 1536 }, /* ADD */ { CPUFUNC(op_0610_0), 1552 }, /* ADD */ { CPUFUNC(op_0618_0), 1560 }, /* ADD */ { CPUFUNC(op_0620_0), 1568 }, /* ADD */ { CPUFUNC(op_0628_0), 1576 }, /* ADD */ { CPUFUNC(op_0630_4), 1584 }, /* ADD */ { CPUFUNC(op_0638_0), 1592 }, /* ADD */ { CPUFUNC(op_0639_0), 1593 }, /* ADD */ { CPUFUNC(op_0640_0), 1600 }, /* ADD */ { CPUFUNC(op_0650_0), 1616 }, /* ADD */ { CPUFUNC(op_0658_0), 1624 }, /* ADD */ { CPUFUNC(op_0660_0), 1632 }, /* ADD */ { CPUFUNC(op_0668_0), 1640 }, /* ADD */ { CPUFUNC(op_0670_4), 1648 }, /* ADD */ { CPUFUNC(op_0678_0), 1656 }, /* ADD */ { CPUFUNC(op_0679_0), 1657 }, /* ADD */ { CPUFUNC(op_0680_0), 1664 }, /* ADD */ { CPUFUNC(op_0690_0), 1680 }, /* ADD */ { CPUFUNC(op_0698_0), 1688 }, /* ADD */ { CPUFUNC(op_06a0_0), 1696 }, /* ADD */ { CPUFUNC(op_06a8_0), 1704 }, /* ADD */ { CPUFUNC(op_06b0_4), 1712 }, /* ADD */ { CPUFUNC(op_06b8_0), 1720 }, /* ADD */ { CPUFUNC(op_06b9_0), 1721 }, /* ADD */ { CPUFUNC(op_0800_0), 2048 }, /* BTST */ { CPUFUNC(op_0810_0), 2064 }, /* BTST */ { CPUFUNC(op_0818_0), 2072 }, /* BTST */ { CPUFUNC(op_0820_0), 2080 }, /* BTST */ { CPUFUNC(op_0828_0), 2088 }, /* BTST */ { CPUFUNC(op_0830_4), 2096 }, /* BTST */ { CPUFUNC(op_0838_0), 2104 }, /* BTST */ { CPUFUNC(op_0839_0), 2105 }, /* BTST */ { CPUFUNC(op_083a_0), 2106 }, /* BTST */ { CPUFUNC(op_083b_4), 2107 }, /* BTST */ { CPUFUNC(op_083c_0), 2108 }, /* BTST */ { CPUFUNC(op_0840_0), 2112 }, /* BCHG */ { CPUFUNC(op_0850_0), 2128 }, /* BCHG */ { CPUFUNC(op_0858_0), 2136 }, /* BCHG */ { CPUFUNC(op_0860_0), 2144 }, /* BCHG */ { CPUFUNC(op_0868_0), 2152 }, /* BCHG */ { CPUFUNC(op_0870_4), 2160 }, /* BCHG */ { CPUFUNC(op_0878_0), 2168 }, /* BCHG */ { CPUFUNC(op_0879_0), 2169 }, /* BCHG */ { CPUFUNC(op_087a_0), 2170 }, /* BCHG */ { CPUFUNC(op_087b_4), 2171 }, /* BCHG */ { CPUFUNC(op_0880_0), 2176 }, /* BCLR */ { CPUFUNC(op_0890_0), 2192 }, /* BCLR */ { CPUFUNC(op_0898_0), 2200 }, /* BCLR */ { CPUFUNC(op_08a0_0), 2208 }, /* BCLR */ { CPUFUNC(op_08a8_0), 2216 }, /* BCLR */ { CPUFUNC(op_08b0_4), 2224 }, /* BCLR */ { CPUFUNC(op_08b8_0), 2232 }, /* BCLR */ { CPUFUNC(op_08b9_0), 2233 }, /* BCLR */ { CPUFUNC(op_08ba_0), 2234 }, /* BCLR */ { CPUFUNC(op_08bb_4), 2235 }, /* BCLR */ { CPUFUNC(op_08c0_0), 2240 }, /* BSET */ { CPUFUNC(op_08d0_0), 2256 }, /* BSET */ { CPUFUNC(op_08d8_0), 2264 }, /* BSET */ { CPUFUNC(op_08e0_0), 2272 }, /* BSET */ { CPUFUNC(op_08e8_0), 2280 }, /* BSET */ { CPUFUNC(op_08f0_4), 2288 }, /* BSET */ { CPUFUNC(op_08f8_0), 2296 }, /* BSET */ { CPUFUNC(op_08f9_0), 2297 }, /* BSET */ { CPUFUNC(op_08fa_0), 2298 }, /* BSET */ { CPUFUNC(op_08fb_4), 2299 }, /* BSET */ { CPUFUNC(op_0a00_0), 2560 }, /* EOR */ { CPUFUNC(op_0a10_0), 2576 }, /* EOR */ { CPUFUNC(op_0a18_0), 2584 }, /* EOR */ { CPUFUNC(op_0a20_0), 2592 }, /* EOR */ { CPUFUNC(op_0a28_0), 2600 }, /* EOR */ { CPUFUNC(op_0a30_4), 2608 }, /* EOR */ { CPUFUNC(op_0a38_0), 2616 }, /* EOR */ { CPUFUNC(op_0a39_0), 2617 }, /* EOR */ { CPUFUNC(op_0a3c_0), 2620 }, /* EORSR */ { CPUFUNC(op_0a40_0), 2624 }, /* EOR */ { CPUFUNC(op_0a50_0), 2640 }, /* EOR */ { CPUFUNC(op_0a58_0), 2648 }, /* EOR */ { CPUFUNC(op_0a60_0), 2656 }, /* EOR */ { CPUFUNC(op_0a68_0), 2664 }, /* EOR */ { CPUFUNC(op_0a70_4), 2672 }, /* EOR */ { CPUFUNC(op_0a78_0), 2680 }, /* EOR */ { CPUFUNC(op_0a79_0), 2681 }, /* EOR */ { CPUFUNC(op_0a7c_0), 2684 }, /* EORSR */ { CPUFUNC(op_0a80_0), 2688 }, /* EOR */ { CPUFUNC(op_0a90_0), 2704 }, /* EOR */ { CPUFUNC(op_0a98_0), 2712 }, /* EOR */ { CPUFUNC(op_0aa0_0), 2720 }, /* EOR */ { CPUFUNC(op_0aa8_0), 2728 }, /* EOR */ { CPUFUNC(op_0ab0_4), 2736 }, /* EOR */ { CPUFUNC(op_0ab8_0), 2744 }, /* EOR */ { CPUFUNC(op_0ab9_0), 2745 }, /* EOR */ { CPUFUNC(op_0c00_0), 3072 }, /* CMP */ { CPUFUNC(op_0c10_0), 3088 }, /* CMP */ { CPUFUNC(op_0c18_0), 3096 }, /* CMP */ { CPUFUNC(op_0c20_0), 3104 }, /* CMP */ { CPUFUNC(op_0c28_0), 3112 }, /* CMP */ { CPUFUNC(op_0c30_4), 3120 }, /* CMP */ { CPUFUNC(op_0c38_0), 3128 }, /* CMP */ { CPUFUNC(op_0c39_0), 3129 }, /* CMP */ { CPUFUNC(op_0c40_0), 3136 }, /* CMP */ { CPUFUNC(op_0c50_0), 3152 }, /* CMP */ { CPUFUNC(op_0c58_0), 3160 }, /* CMP */ { CPUFUNC(op_0c60_0), 3168 }, /* CMP */ { CPUFUNC(op_0c68_0), 3176 }, /* CMP */ { CPUFUNC(op_0c70_4), 3184 }, /* CMP */ { CPUFUNC(op_0c78_0), 3192 }, /* CMP */ { CPUFUNC(op_0c79_0), 3193 }, /* CMP */ { CPUFUNC(op_0c80_0), 3200 }, /* CMP */ { CPUFUNC(op_0c90_0), 3216 }, /* CMP */ { CPUFUNC(op_0c98_0), 3224 }, /* CMP */ { CPUFUNC(op_0ca0_0), 3232 }, /* CMP */ { CPUFUNC(op_0ca8_0), 3240 }, /* CMP */ { CPUFUNC(op_0cb0_4), 3248 }, /* CMP */ { CPUFUNC(op_0cb8_0), 3256 }, /* CMP */ { CPUFUNC(op_0cb9_0), 3257 }, /* CMP */ { CPUFUNC(op_1000_0), 4096 }, /* MOVE */ { CPUFUNC(op_1010_0), 4112 }, /* MOVE */ { CPUFUNC(op_1018_0), 4120 }, /* MOVE */ { CPUFUNC(op_1020_0), 4128 }, /* MOVE */ { CPUFUNC(op_1028_0), 4136 }, /* MOVE */ { CPUFUNC(op_1030_4), 4144 }, /* MOVE */ { CPUFUNC(op_1038_0), 4152 }, /* MOVE */ { CPUFUNC(op_1039_0), 4153 }, /* MOVE */ { CPUFUNC(op_103a_0), 4154 }, /* MOVE */ { CPUFUNC(op_103b_4), 4155 }, /* MOVE */ { CPUFUNC(op_103c_0), 4156 }, /* MOVE */ { CPUFUNC(op_1080_0), 4224 }, /* MOVE */ { CPUFUNC(op_1090_0), 4240 }, /* MOVE */ { CPUFUNC(op_1098_0), 4248 }, /* MOVE */ { CPUFUNC(op_10a0_0), 4256 }, /* MOVE */ { CPUFUNC(op_10a8_0), 4264 }, /* MOVE */ { CPUFUNC(op_10b0_4), 4272 }, /* MOVE */ { CPUFUNC(op_10b8_0), 4280 }, /* MOVE */ { CPUFUNC(op_10b9_0), 4281 }, /* MOVE */ { CPUFUNC(op_10ba_0), 4282 }, /* MOVE */ { CPUFUNC(op_10bb_4), 4283 }, /* MOVE */ { CPUFUNC(op_10bc_0), 4284 }, /* MOVE */ { CPUFUNC(op_10c0_0), 4288 }, /* MOVE */ { CPUFUNC(op_10d0_0), 4304 }, /* MOVE */ { CPUFUNC(op_10d8_0), 4312 }, /* MOVE */ { CPUFUNC(op_10e0_0), 4320 }, /* MOVE */ { CPUFUNC(op_10e8_0), 4328 }, /* MOVE */ { CPUFUNC(op_10f0_4), 4336 }, /* MOVE */ { CPUFUNC(op_10f8_0), 4344 }, /* MOVE */ { CPUFUNC(op_10f9_0), 4345 }, /* MOVE */ { CPUFUNC(op_10fa_0), 4346 }, /* MOVE */ { CPUFUNC(op_10fb_4), 4347 }, /* MOVE */ { CPUFUNC(op_10fc_0), 4348 }, /* MOVE */ { CPUFUNC(op_1100_0), 4352 }, /* MOVE */ { CPUFUNC(op_1110_0), 4368 }, /* MOVE */ { CPUFUNC(op_1118_0), 4376 }, /* MOVE */ { CPUFUNC(op_1120_0), 4384 }, /* MOVE */ { CPUFUNC(op_1128_0), 4392 }, /* MOVE */ { CPUFUNC(op_1130_4), 4400 }, /* MOVE */ { CPUFUNC(op_1138_0), 4408 }, /* MOVE */ { CPUFUNC(op_1139_0), 4409 }, /* MOVE */ { CPUFUNC(op_113a_0), 4410 }, /* MOVE */ { CPUFUNC(op_113b_4), 4411 }, /* MOVE */ { CPUFUNC(op_113c_0), 4412 }, /* MOVE */ { CPUFUNC(op_1140_0), 4416 }, /* MOVE */ { CPUFUNC(op_1150_0), 4432 }, /* MOVE */ { CPUFUNC(op_1158_0), 4440 }, /* MOVE */ { CPUFUNC(op_1160_0), 4448 }, /* MOVE */ { CPUFUNC(op_1168_0), 4456 }, /* MOVE */ { CPUFUNC(op_1170_4), 4464 }, /* MOVE */ { CPUFUNC(op_1178_0), 4472 }, /* MOVE */ { CPUFUNC(op_1179_0), 4473 }, /* MOVE */ { CPUFUNC(op_117a_0), 4474 }, /* MOVE */ { CPUFUNC(op_117b_4), 4475 }, /* MOVE */ { CPUFUNC(op_117c_0), 4476 }, /* MOVE */ { CPUFUNC(op_1180_4), 4480 }, /* MOVE */ { CPUFUNC(op_1190_4), 4496 }, /* MOVE */ { CPUFUNC(op_1198_4), 4504 }, /* MOVE */ { CPUFUNC(op_11a0_4), 4512 }, /* MOVE */ { CPUFUNC(op_11a8_4), 4520 }, /* MOVE */ { CPUFUNC(op_11b0_4), 4528 }, /* MOVE */ { CPUFUNC(op_11b8_4), 4536 }, /* MOVE */ { CPUFUNC(op_11b9_4), 4537 }, /* MOVE */ { CPUFUNC(op_11ba_4), 4538 }, /* MOVE */ { CPUFUNC(op_11bb_4), 4539 }, /* MOVE */ { CPUFUNC(op_11bc_4), 4540 }, /* MOVE */ { CPUFUNC(op_11c0_0), 4544 }, /* MOVE */ { CPUFUNC(op_11d0_0), 4560 }, /* MOVE */ { CPUFUNC(op_11d8_0), 4568 }, /* MOVE */ { CPUFUNC(op_11e0_0), 4576 }, /* MOVE */ { CPUFUNC(op_11e8_0), 4584 }, /* MOVE */ { CPUFUNC(op_11f0_4), 4592 }, /* MOVE */ { CPUFUNC(op_11f8_0), 4600 }, /* MOVE */ { CPUFUNC(op_11f9_0), 4601 }, /* MOVE */ { CPUFUNC(op_11fa_0), 4602 }, /* MOVE */ { CPUFUNC(op_11fb_4), 4603 }, /* MOVE */ { CPUFUNC(op_11fc_0), 4604 }, /* MOVE */ { CPUFUNC(op_13c0_0), 5056 }, /* MOVE */ { CPUFUNC(op_13d0_0), 5072 }, /* MOVE */ { CPUFUNC(op_13d8_0), 5080 }, /* MOVE */ { CPUFUNC(op_13e0_0), 5088 }, /* MOVE */ { CPUFUNC(op_13e8_0), 5096 }, /* MOVE */ { CPUFUNC(op_13f0_4), 5104 }, /* MOVE */ { CPUFUNC(op_13f8_0), 5112 }, /* MOVE */ { CPUFUNC(op_13f9_0), 5113 }, /* MOVE */ { CPUFUNC(op_13fa_0), 5114 }, /* MOVE */ { CPUFUNC(op_13fb_4), 5115 }, /* MOVE */ { CPUFUNC(op_13fc_0), 5116 }, /* MOVE */ { CPUFUNC(op_2000_0), 8192 }, /* MOVE */ { CPUFUNC(op_2008_0), 8200 }, /* MOVE */ { CPUFUNC(op_2010_0), 8208 }, /* MOVE */ { CPUFUNC(op_2018_0), 8216 }, /* MOVE */ { CPUFUNC(op_2020_0), 8224 }, /* MOVE */ { CPUFUNC(op_2028_0), 8232 }, /* MOVE */ { CPUFUNC(op_2030_4), 8240 }, /* MOVE */ { CPUFUNC(op_2038_0), 8248 }, /* MOVE */ { CPUFUNC(op_2039_0), 8249 }, /* MOVE */ { CPUFUNC(op_203a_0), 8250 }, /* MOVE */ { CPUFUNC(op_203b_4), 8251 }, /* MOVE */ { CPUFUNC(op_203c_0), 8252 }, /* MOVE */ { CPUFUNC(op_2040_0), 8256 }, /* MOVEA */ { CPUFUNC(op_2048_0), 8264 }, /* MOVEA */ { CPUFUNC(op_2050_0), 8272 }, /* MOVEA */ { CPUFUNC(op_2058_0), 8280 }, /* MOVEA */ { CPUFUNC(op_2060_0), 8288 }, /* MOVEA */ { CPUFUNC(op_2068_0), 8296 }, /* MOVEA */ { CPUFUNC(op_2070_4), 8304 }, /* MOVEA */ { CPUFUNC(op_2078_0), 8312 }, /* MOVEA */ { CPUFUNC(op_2079_0), 8313 }, /* MOVEA */ { CPUFUNC(op_207a_0), 8314 }, /* MOVEA */ { CPUFUNC(op_207b_4), 8315 }, /* MOVEA */ { CPUFUNC(op_207c_0), 8316 }, /* MOVEA */ { CPUFUNC(op_2080_0), 8320 }, /* MOVE */ { CPUFUNC(op_2088_0), 8328 }, /* MOVE */ { CPUFUNC(op_2090_0), 8336 }, /* MOVE */ { CPUFUNC(op_2098_0), 8344 }, /* MOVE */ { CPUFUNC(op_20a0_0), 8352 }, /* MOVE */ { CPUFUNC(op_20a8_0), 8360 }, /* MOVE */ { CPUFUNC(op_20b0_4), 8368 }, /* MOVE */ { CPUFUNC(op_20b8_0), 8376 }, /* MOVE */ { CPUFUNC(op_20b9_0), 8377 }, /* MOVE */ { CPUFUNC(op_20ba_0), 8378 }, /* MOVE */ { CPUFUNC(op_20bb_4), 8379 }, /* MOVE */ { CPUFUNC(op_20bc_0), 8380 }, /* MOVE */ { CPUFUNC(op_20c0_0), 8384 }, /* MOVE */ { CPUFUNC(op_20c8_0), 8392 }, /* MOVE */ { CPUFUNC(op_20d0_0), 8400 }, /* MOVE */ { CPUFUNC(op_20d8_0), 8408 }, /* MOVE */ { CPUFUNC(op_20e0_0), 8416 }, /* MOVE */ { CPUFUNC(op_20e8_0), 8424 }, /* MOVE */ { CPUFUNC(op_20f0_4), 8432 }, /* MOVE */ { CPUFUNC(op_20f8_0), 8440 }, /* MOVE */ { CPUFUNC(op_20f9_0), 8441 }, /* MOVE */ { CPUFUNC(op_20fa_0), 8442 }, /* MOVE */ { CPUFUNC(op_20fb_4), 8443 }, /* MOVE */ { CPUFUNC(op_20fc_0), 8444 }, /* MOVE */ { CPUFUNC(op_2100_0), 8448 }, /* MOVE */ { CPUFUNC(op_2108_0), 8456 }, /* MOVE */ { CPUFUNC(op_2110_0), 8464 }, /* MOVE */ { CPUFUNC(op_2118_0), 8472 }, /* MOVE */ { CPUFUNC(op_2120_0), 8480 }, /* MOVE */ { CPUFUNC(op_2128_0), 8488 }, /* MOVE */ { CPUFUNC(op_2130_4), 8496 }, /* MOVE */ { CPUFUNC(op_2138_0), 8504 }, /* MOVE */ { CPUFUNC(op_2139_0), 8505 }, /* MOVE */ { CPUFUNC(op_213a_0), 8506 }, /* MOVE */ { CPUFUNC(op_213b_4), 8507 }, /* MOVE */ { CPUFUNC(op_213c_0), 8508 }, /* MOVE */ { CPUFUNC(op_2140_0), 8512 }, /* MOVE */ { CPUFUNC(op_2148_0), 8520 }, /* MOVE */ { CPUFUNC(op_2150_0), 8528 }, /* MOVE */ { CPUFUNC(op_2158_0), 8536 }, /* MOVE */ { CPUFUNC(op_2160_0), 8544 }, /* MOVE */ { CPUFUNC(op_2168_0), 8552 }, /* MOVE */ { CPUFUNC(op_2170_4), 8560 }, /* MOVE */ { CPUFUNC(op_2178_0), 8568 }, /* MOVE */ { CPUFUNC(op_2179_0), 8569 }, /* MOVE */ { CPUFUNC(op_217a_0), 8570 }, /* MOVE */ { CPUFUNC(op_217b_4), 8571 }, /* MOVE */ { CPUFUNC(op_217c_0), 8572 }, /* MOVE */ { CPUFUNC(op_2180_4), 8576 }, /* MOVE */ { CPUFUNC(op_2188_4), 8584 }, /* MOVE */ { CPUFUNC(op_2190_4), 8592 }, /* MOVE */ { CPUFUNC(op_2198_4), 8600 }, /* MOVE */ { CPUFUNC(op_21a0_4), 8608 }, /* MOVE */ { CPUFUNC(op_21a8_4), 8616 }, /* MOVE */ { CPUFUNC(op_21b0_4), 8624 }, /* MOVE */ { CPUFUNC(op_21b8_4), 8632 }, /* MOVE */ { CPUFUNC(op_21b9_4), 8633 }, /* MOVE */ { CPUFUNC(op_21ba_4), 8634 }, /* MOVE */ { CPUFUNC(op_21bb_4), 8635 }, /* MOVE */ { CPUFUNC(op_21bc_4), 8636 }, /* MOVE */ { CPUFUNC(op_21c0_0), 8640 }, /* MOVE */ { CPUFUNC(op_21c8_0), 8648 }, /* MOVE */ { CPUFUNC(op_21d0_0), 8656 }, /* MOVE */ { CPUFUNC(op_21d8_0), 8664 }, /* MOVE */ { CPUFUNC(op_21e0_0), 8672 }, /* MOVE */ { CPUFUNC(op_21e8_0), 8680 }, /* MOVE */ { CPUFUNC(op_21f0_4), 8688 }, /* MOVE */ { CPUFUNC(op_21f8_0), 8696 }, /* MOVE */ { CPUFUNC(op_21f9_0), 8697 }, /* MOVE */ { CPUFUNC(op_21fa_0), 8698 }, /* MOVE */ { CPUFUNC(op_21fb_4), 8699 }, /* MOVE */ { CPUFUNC(op_21fc_0), 8700 }, /* MOVE */ { CPUFUNC(op_23c0_0), 9152 }, /* MOVE */ { CPUFUNC(op_23c8_0), 9160 }, /* MOVE */ { CPUFUNC(op_23d0_0), 9168 }, /* MOVE */ { CPUFUNC(op_23d8_0), 9176 }, /* MOVE */ { CPUFUNC(op_23e0_0), 9184 }, /* MOVE */ { CPUFUNC(op_23e8_0), 9192 }, /* MOVE */ { CPUFUNC(op_23f0_4), 9200 }, /* MOVE */ { CPUFUNC(op_23f8_0), 9208 }, /* MOVE */ { CPUFUNC(op_23f9_0), 9209 }, /* MOVE */ { CPUFUNC(op_23fa_0), 9210 }, /* MOVE */ { CPUFUNC(op_23fb_4), 9211 }, /* MOVE */ { CPUFUNC(op_23fc_0), 9212 }, /* MOVE */ { CPUFUNC(op_3000_0), 12288 }, /* MOVE */ { CPUFUNC(op_3008_0), 12296 }, /* MOVE */ { CPUFUNC(op_3010_0), 12304 }, /* MOVE */ { CPUFUNC(op_3018_0), 12312 }, /* MOVE */ { CPUFUNC(op_3020_0), 12320 }, /* MOVE */ { CPUFUNC(op_3028_0), 12328 }, /* MOVE */ { CPUFUNC(op_3030_4), 12336 }, /* MOVE */ { CPUFUNC(op_3038_0), 12344 }, /* MOVE */ { CPUFUNC(op_3039_0), 12345 }, /* MOVE */ { CPUFUNC(op_303a_0), 12346 }, /* MOVE */ { CPUFUNC(op_303b_4), 12347 }, /* MOVE */ { CPUFUNC(op_303c_0), 12348 }, /* MOVE */ { CPUFUNC(op_3040_0), 12352 }, /* MOVEA */ { CPUFUNC(op_3048_0), 12360 }, /* MOVEA */ { CPUFUNC(op_3050_0), 12368 }, /* MOVEA */ { CPUFUNC(op_3058_0), 12376 }, /* MOVEA */ { CPUFUNC(op_3060_0), 12384 }, /* MOVEA */ { CPUFUNC(op_3068_0), 12392 }, /* MOVEA */ { CPUFUNC(op_3070_4), 12400 }, /* MOVEA */ { CPUFUNC(op_3078_0), 12408 }, /* MOVEA */ { CPUFUNC(op_3079_0), 12409 }, /* MOVEA */ { CPUFUNC(op_307a_0), 12410 }, /* MOVEA */ { CPUFUNC(op_307b_4), 12411 }, /* MOVEA */ { CPUFUNC(op_307c_0), 12412 }, /* MOVEA */ { CPUFUNC(op_3080_0), 12416 }, /* MOVE */ { CPUFUNC(op_3088_0), 12424 }, /* MOVE */ { CPUFUNC(op_3090_0), 12432 }, /* MOVE */ { CPUFUNC(op_3098_0), 12440 }, /* MOVE */ { CPUFUNC(op_30a0_0), 12448 }, /* MOVE */ { CPUFUNC(op_30a8_0), 12456 }, /* MOVE */ { CPUFUNC(op_30b0_4), 12464 }, /* MOVE */ { CPUFUNC(op_30b8_0), 12472 }, /* MOVE */ { CPUFUNC(op_30b9_0), 12473 }, /* MOVE */ { CPUFUNC(op_30ba_0), 12474 }, /* MOVE */ { CPUFUNC(op_30bb_4), 12475 }, /* MOVE */ { CPUFUNC(op_30bc_0), 12476 }, /* MOVE */ { CPUFUNC(op_30c0_0), 12480 }, /* MOVE */ { CPUFUNC(op_30c8_0), 12488 }, /* MOVE */ { CPUFUNC(op_30d0_0), 12496 }, /* MOVE */ { CPUFUNC(op_30d8_0), 12504 }, /* MOVE */ { CPUFUNC(op_30e0_0), 12512 }, /* MOVE */ { CPUFUNC(op_30e8_0), 12520 }, /* MOVE */ { CPUFUNC(op_30f0_4), 12528 }, /* MOVE */ { CPUFUNC(op_30f8_0), 12536 }, /* MOVE */ { CPUFUNC(op_30f9_0), 12537 }, /* MOVE */ { CPUFUNC(op_30fa_0), 12538 }, /* MOVE */ { CPUFUNC(op_30fb_4), 12539 }, /* MOVE */ { CPUFUNC(op_30fc_0), 12540 }, /* MOVE */ { CPUFUNC(op_3100_0), 12544 }, /* MOVE */ { CPUFUNC(op_3108_0), 12552 }, /* MOVE */ { CPUFUNC(op_3110_0), 12560 }, /* MOVE */ { CPUFUNC(op_3118_0), 12568 }, /* MOVE */ { CPUFUNC(op_3120_0), 12576 }, /* MOVE */ { CPUFUNC(op_3128_0), 12584 }, /* MOVE */ { CPUFUNC(op_3130_4), 12592 }, /* MOVE */ { CPUFUNC(op_3138_0), 12600 }, /* MOVE */ { CPUFUNC(op_3139_0), 12601 }, /* MOVE */ { CPUFUNC(op_313a_0), 12602 }, /* MOVE */ { CPUFUNC(op_313b_4), 12603 }, /* MOVE */ { CPUFUNC(op_313c_0), 12604 }, /* MOVE */ { CPUFUNC(op_3140_0), 12608 }, /* MOVE */ { CPUFUNC(op_3148_0), 12616 }, /* MOVE */ { CPUFUNC(op_3150_0), 12624 }, /* MOVE */ { CPUFUNC(op_3158_0), 12632 }, /* MOVE */ { CPUFUNC(op_3160_0), 12640 }, /* MOVE */ { CPUFUNC(op_3168_0), 12648 }, /* MOVE */ { CPUFUNC(op_3170_4), 12656 }, /* MOVE */ { CPUFUNC(op_3178_0), 12664 }, /* MOVE */ { CPUFUNC(op_3179_0), 12665 }, /* MOVE */ { CPUFUNC(op_317a_0), 12666 }, /* MOVE */ { CPUFUNC(op_317b_4), 12667 }, /* MOVE */ { CPUFUNC(op_317c_0), 12668 }, /* MOVE */ { CPUFUNC(op_3180_4), 12672 }, /* MOVE */ { CPUFUNC(op_3188_4), 12680 }, /* MOVE */ { CPUFUNC(op_3190_4), 12688 }, /* MOVE */ { CPUFUNC(op_3198_4), 12696 }, /* MOVE */ { CPUFUNC(op_31a0_4), 12704 }, /* MOVE */ { CPUFUNC(op_31a8_4), 12712 }, /* MOVE */ { CPUFUNC(op_31b0_4), 12720 }, /* MOVE */ { CPUFUNC(op_31b8_4), 12728 }, /* MOVE */ { CPUFUNC(op_31b9_4), 12729 }, /* MOVE */ { CPUFUNC(op_31ba_4), 12730 }, /* MOVE */ { CPUFUNC(op_31bb_4), 12731 }, /* MOVE */ { CPUFUNC(op_31bc_4), 12732 }, /* MOVE */ { CPUFUNC(op_31c0_0), 12736 }, /* MOVE */ { CPUFUNC(op_31c8_0), 12744 }, /* MOVE */ { CPUFUNC(op_31d0_0), 12752 }, /* MOVE */ { CPUFUNC(op_31d8_0), 12760 }, /* MOVE */ { CPUFUNC(op_31e0_0), 12768 }, /* MOVE */ { CPUFUNC(op_31e8_0), 12776 }, /* MOVE */ { CPUFUNC(op_31f0_4), 12784 }, /* MOVE */ { CPUFUNC(op_31f8_0), 12792 }, /* MOVE */ { CPUFUNC(op_31f9_0), 12793 }, /* MOVE */ { CPUFUNC(op_31fa_0), 12794 }, /* MOVE */ { CPUFUNC(op_31fb_4), 12795 }, /* MOVE */ { CPUFUNC(op_31fc_0), 12796 }, /* MOVE */ { CPUFUNC(op_33c0_0), 13248 }, /* MOVE */ { CPUFUNC(op_33c8_0), 13256 }, /* MOVE */ { CPUFUNC(op_33d0_0), 13264 }, /* MOVE */ { CPUFUNC(op_33d8_0), 13272 }, /* MOVE */ { CPUFUNC(op_33e0_0), 13280 }, /* MOVE */ { CPUFUNC(op_33e8_0), 13288 }, /* MOVE */ { CPUFUNC(op_33f0_4), 13296 }, /* MOVE */ { CPUFUNC(op_33f8_0), 13304 }, /* MOVE */ { CPUFUNC(op_33f9_0), 13305 }, /* MOVE */ { CPUFUNC(op_33fa_0), 13306 }, /* MOVE */ { CPUFUNC(op_33fb_4), 13307 }, /* MOVE */ { CPUFUNC(op_33fc_0), 13308 }, /* MOVE */ { CPUFUNC(op_4000_0), 16384 }, /* NEGX */ { CPUFUNC(op_4010_0), 16400 }, /* NEGX */ { CPUFUNC(op_4018_0), 16408 }, /* NEGX */ { CPUFUNC(op_4020_0), 16416 }, /* NEGX */ { CPUFUNC(op_4028_0), 16424 }, /* NEGX */ { CPUFUNC(op_4030_4), 16432 }, /* NEGX */ { CPUFUNC(op_4038_0), 16440 }, /* NEGX */ { CPUFUNC(op_4039_0), 16441 }, /* NEGX */ { CPUFUNC(op_4040_0), 16448 }, /* NEGX */ { CPUFUNC(op_4050_0), 16464 }, /* NEGX */ { CPUFUNC(op_4058_0), 16472 }, /* NEGX */ { CPUFUNC(op_4060_0), 16480 }, /* NEGX */ { CPUFUNC(op_4068_0), 16488 }, /* NEGX */ { CPUFUNC(op_4070_4), 16496 }, /* NEGX */ { CPUFUNC(op_4078_0), 16504 }, /* NEGX */ { CPUFUNC(op_4079_0), 16505 }, /* NEGX */ { CPUFUNC(op_4080_0), 16512 }, /* NEGX */ { CPUFUNC(op_4090_0), 16528 }, /* NEGX */ { CPUFUNC(op_4098_0), 16536 }, /* NEGX */ { CPUFUNC(op_40a0_0), 16544 }, /* NEGX */ { CPUFUNC(op_40a8_0), 16552 }, /* NEGX */ { CPUFUNC(op_40b0_4), 16560 }, /* NEGX */ { CPUFUNC(op_40b8_0), 16568 }, /* NEGX */ { CPUFUNC(op_40b9_0), 16569 }, /* NEGX */ { CPUFUNC(op_40c0_5), 16576 }, /* MVSR2 */ { CPUFUNC(op_40d0_5), 16592 }, /* MVSR2 */ { CPUFUNC(op_40d8_5), 16600 }, /* MVSR2 */ { CPUFUNC(op_40e0_5), 16608 }, /* MVSR2 */ { CPUFUNC(op_40e8_5), 16616 }, /* MVSR2 */ { CPUFUNC(op_40f0_5), 16624 }, /* MVSR2 */ { CPUFUNC(op_40f8_5), 16632 }, /* MVSR2 */ { CPUFUNC(op_40f9_5), 16633 }, /* MVSR2 */ { CPUFUNC(op_4180_0), 16768 }, /* CHK */ { CPUFUNC(op_4190_0), 16784 }, /* CHK */ { CPUFUNC(op_4198_0), 16792 }, /* CHK */ { CPUFUNC(op_41a0_0), 16800 }, /* CHK */ { CPUFUNC(op_41a8_0), 16808 }, /* CHK */ { CPUFUNC(op_41b0_4), 16816 }, /* CHK */ { CPUFUNC(op_41b8_0), 16824 }, /* CHK */ { CPUFUNC(op_41b9_0), 16825 }, /* CHK */ { CPUFUNC(op_41ba_0), 16826 }, /* CHK */ { CPUFUNC(op_41bb_4), 16827 }, /* CHK */ { CPUFUNC(op_41bc_0), 16828 }, /* CHK */ { CPUFUNC(op_41d0_0), 16848 }, /* LEA */ { CPUFUNC(op_41e8_0), 16872 }, /* LEA */ { CPUFUNC(op_41f0_4), 16880 }, /* LEA */ { CPUFUNC(op_41f8_0), 16888 }, /* LEA */ { CPUFUNC(op_41f9_0), 16889 }, /* LEA */ { CPUFUNC(op_41fa_0), 16890 }, /* LEA */ { CPUFUNC(op_41fb_4), 16891 }, /* LEA */ { CPUFUNC(op_4200_0), 16896 }, /* CLR */ { CPUFUNC(op_4210_0), 16912 }, /* CLR */ { CPUFUNC(op_4218_0), 16920 }, /* CLR */ { CPUFUNC(op_4220_0), 16928 }, /* CLR */ { CPUFUNC(op_4228_0), 16936 }, /* CLR */ { CPUFUNC(op_4230_4), 16944 }, /* CLR */ { CPUFUNC(op_4238_0), 16952 }, /* CLR */ { CPUFUNC(op_4239_0), 16953 }, /* CLR */ { CPUFUNC(op_4240_0), 16960 }, /* CLR */ { CPUFUNC(op_4250_0), 16976 }, /* CLR */ { CPUFUNC(op_4258_0), 16984 }, /* CLR */ { CPUFUNC(op_4260_0), 16992 }, /* CLR */ { CPUFUNC(op_4268_0), 17000 }, /* CLR */ { CPUFUNC(op_4270_4), 17008 }, /* CLR */ { CPUFUNC(op_4278_0), 17016 }, /* CLR */ { CPUFUNC(op_4279_0), 17017 }, /* CLR */ { CPUFUNC(op_4280_0), 17024 }, /* CLR */ { CPUFUNC(op_4290_0), 17040 }, /* CLR */ { CPUFUNC(op_4298_0), 17048 }, /* CLR */ { CPUFUNC(op_42a0_0), 17056 }, /* CLR */ { CPUFUNC(op_42a8_0), 17064 }, /* CLR */ { CPUFUNC(op_42b0_4), 17072 }, /* CLR */ { CPUFUNC(op_42b8_0), 17080 }, /* CLR */ { CPUFUNC(op_42b9_0), 17081 }, /* CLR */ { CPUFUNC(op_4400_0), 17408 }, /* NEG */ { CPUFUNC(op_4410_0), 17424 }, /* NEG */ { CPUFUNC(op_4418_0), 17432 }, /* NEG */ { CPUFUNC(op_4420_0), 17440 }, /* NEG */ { CPUFUNC(op_4428_0), 17448 }, /* NEG */ { CPUFUNC(op_4430_4), 17456 }, /* NEG */ { CPUFUNC(op_4438_0), 17464 }, /* NEG */ { CPUFUNC(op_4439_0), 17465 }, /* NEG */ { CPUFUNC(op_4440_0), 17472 }, /* NEG */ { CPUFUNC(op_4450_0), 17488 }, /* NEG */ { CPUFUNC(op_4458_0), 17496 }, /* NEG */ { CPUFUNC(op_4460_0), 17504 }, /* NEG */ { CPUFUNC(op_4468_0), 17512 }, /* NEG */ { CPUFUNC(op_4470_4), 17520 }, /* NEG */ { CPUFUNC(op_4478_0), 17528 }, /* NEG */ { CPUFUNC(op_4479_0), 17529 }, /* NEG */ { CPUFUNC(op_4480_0), 17536 }, /* NEG */ { CPUFUNC(op_4490_0), 17552 }, /* NEG */ { CPUFUNC(op_4498_0), 17560 }, /* NEG */ { CPUFUNC(op_44a0_0), 17568 }, /* NEG */ { CPUFUNC(op_44a8_0), 17576 }, /* NEG */ { CPUFUNC(op_44b0_4), 17584 }, /* NEG */ { CPUFUNC(op_44b8_0), 17592 }, /* NEG */ { CPUFUNC(op_44b9_0), 17593 }, /* NEG */ { CPUFUNC(op_44c0_0), 17600 }, /* MV2SR */ { CPUFUNC(op_44d0_0), 17616 }, /* MV2SR */ { CPUFUNC(op_44d8_0), 17624 }, /* MV2SR */ { CPUFUNC(op_44e0_0), 17632 }, /* MV2SR */ { CPUFUNC(op_44e8_0), 17640 }, /* MV2SR */ { CPUFUNC(op_44f0_4), 17648 }, /* MV2SR */ { CPUFUNC(op_44f8_0), 17656 }, /* MV2SR */ { CPUFUNC(op_44f9_0), 17657 }, /* MV2SR */ { CPUFUNC(op_44fa_0), 17658 }, /* MV2SR */ { CPUFUNC(op_44fb_4), 17659 }, /* MV2SR */ { CPUFUNC(op_44fc_0), 17660 }, /* MV2SR */ { CPUFUNC(op_4600_0), 17920 }, /* NOT */ { CPUFUNC(op_4610_0), 17936 }, /* NOT */ { CPUFUNC(op_4618_0), 17944 }, /* NOT */ { CPUFUNC(op_4620_0), 17952 }, /* NOT */ { CPUFUNC(op_4628_0), 17960 }, /* NOT */ { CPUFUNC(op_4630_4), 17968 }, /* NOT */ { CPUFUNC(op_4638_0), 17976 }, /* NOT */ { CPUFUNC(op_4639_0), 17977 }, /* NOT */ { CPUFUNC(op_4640_0), 17984 }, /* NOT */ { CPUFUNC(op_4650_0), 18000 }, /* NOT */ { CPUFUNC(op_4658_0), 18008 }, /* NOT */ { CPUFUNC(op_4660_0), 18016 }, /* NOT */ { CPUFUNC(op_4668_0), 18024 }, /* NOT */ { CPUFUNC(op_4670_4), 18032 }, /* NOT */ { CPUFUNC(op_4678_0), 18040 }, /* NOT */ { CPUFUNC(op_4679_0), 18041 }, /* NOT */ { CPUFUNC(op_4680_0), 18048 }, /* NOT */ { CPUFUNC(op_4690_0), 18064 }, /* NOT */ { CPUFUNC(op_4698_0), 18072 }, /* NOT */ { CPUFUNC(op_46a0_0), 18080 }, /* NOT */ { CPUFUNC(op_46a8_0), 18088 }, /* NOT */ { CPUFUNC(op_46b0_4), 18096 }, /* NOT */ { CPUFUNC(op_46b8_0), 18104 }, /* NOT */ { CPUFUNC(op_46b9_0), 18105 }, /* NOT */ { CPUFUNC(op_46c0_0), 18112 }, /* MV2SR */ { CPUFUNC(op_46d0_0), 18128 }, /* MV2SR */ { CPUFUNC(op_46d8_0), 18136 }, /* MV2SR */ { CPUFUNC(op_46e0_0), 18144 }, /* MV2SR */ { CPUFUNC(op_46e8_0), 18152 }, /* MV2SR */ { CPUFUNC(op_46f0_4), 18160 }, /* MV2SR */ { CPUFUNC(op_46f8_0), 18168 }, /* MV2SR */ { CPUFUNC(op_46f9_0), 18169 }, /* MV2SR */ { CPUFUNC(op_46fa_0), 18170 }, /* MV2SR */ { CPUFUNC(op_46fb_4), 18171 }, /* MV2SR */ { CPUFUNC(op_46fc_0), 18172 }, /* MV2SR */ { CPUFUNC(op_4800_2), 18432 }, /* NBCD */ { CPUFUNC(op_4810_2), 18448 }, /* NBCD */ { CPUFUNC(op_4818_2), 18456 }, /* NBCD */ { CPUFUNC(op_4820_2), 18464 }, /* NBCD */ { CPUFUNC(op_4828_2), 18472 }, /* NBCD */ { CPUFUNC(op_4830_4), 18480 }, /* NBCD */ { CPUFUNC(op_4838_2), 18488 }, /* NBCD */ { CPUFUNC(op_4839_2), 18489 }, /* NBCD */ { CPUFUNC(op_4840_0), 18496 }, /* SWAP */ { CPUFUNC(op_4850_0), 18512 }, /* PEA */ { CPUFUNC(op_4868_0), 18536 }, /* PEA */ { CPUFUNC(op_4870_4), 18544 }, /* PEA */ { CPUFUNC(op_4878_0), 18552 }, /* PEA */ { CPUFUNC(op_4879_0), 18553 }, /* PEA */ { CPUFUNC(op_487a_0), 18554 }, /* PEA */ { CPUFUNC(op_487b_4), 18555 }, /* PEA */ { CPUFUNC(op_4880_0), 18560 }, /* EXT */ { CPUFUNC(op_4890_0), 18576 }, /* MVMLE */ { CPUFUNC(op_48a0_0), 18592 }, /* MVMLE */ { CPUFUNC(op_48a8_0), 18600 }, /* MVMLE */ { CPUFUNC(op_48b0_4), 18608 }, /* MVMLE */ { CPUFUNC(op_48b8_0), 18616 }, /* MVMLE */ { CPUFUNC(op_48b9_0), 18617 }, /* MVMLE */ { CPUFUNC(op_48c0_0), 18624 }, /* EXT */ { CPUFUNC(op_48d0_0), 18640 }, /* MVMLE */ { CPUFUNC(op_48e0_0), 18656 }, /* MVMLE */ { CPUFUNC(op_48e8_0), 18664 }, /* MVMLE */ { CPUFUNC(op_48f0_4), 18672 }, /* MVMLE */ { CPUFUNC(op_48f8_0), 18680 }, /* MVMLE */ { CPUFUNC(op_48f9_0), 18681 }, /* MVMLE */ { CPUFUNC(op_4a00_0), 18944 }, /* TST */ { CPUFUNC(op_4a10_0), 18960 }, /* TST */ { CPUFUNC(op_4a18_0), 18968 }, /* TST */ { CPUFUNC(op_4a20_0), 18976 }, /* TST */ { CPUFUNC(op_4a28_0), 18984 }, /* TST */ { CPUFUNC(op_4a30_4), 18992 }, /* TST */ { CPUFUNC(op_4a38_0), 19000 }, /* TST */ { CPUFUNC(op_4a39_0), 19001 }, /* TST */ { CPUFUNC(op_4a3c_0), 19004 }, /* TST */ { CPUFUNC(op_4a40_0), 19008 }, /* TST */ { CPUFUNC(op_4a50_0), 19024 }, /* TST */ { CPUFUNC(op_4a58_0), 19032 }, /* TST */ { CPUFUNC(op_4a60_0), 19040 }, /* TST */ { CPUFUNC(op_4a68_0), 19048 }, /* TST */ { CPUFUNC(op_4a70_4), 19056 }, /* TST */ { CPUFUNC(op_4a78_0), 19064 }, /* TST */ { CPUFUNC(op_4a79_0), 19065 }, /* TST */ { CPUFUNC(op_4a7c_0), 19068 }, /* TST */ { CPUFUNC(op_4a80_0), 19072 }, /* TST */ { CPUFUNC(op_4a90_0), 19088 }, /* TST */ { CPUFUNC(op_4a98_0), 19096 }, /* TST */ { CPUFUNC(op_4aa0_0), 19104 }, /* TST */ { CPUFUNC(op_4aa8_0), 19112 }, /* TST */ { CPUFUNC(op_4ab0_4), 19120 }, /* TST */ { CPUFUNC(op_4ab8_0), 19128 }, /* TST */ { CPUFUNC(op_4ab9_0), 19129 }, /* TST */ { CPUFUNC(op_4abc_0), 19132 }, /* TST */ { CPUFUNC(op_4ac0_4), 19136 }, /* TAS */ { CPUFUNC(op_4ad0_4), 19152 }, /* TAS */ { CPUFUNC(op_4ad8_4), 19160 }, /* TAS */ { CPUFUNC(op_4ae0_4), 19168 }, /* TAS */ { CPUFUNC(op_4ae8_4), 19176 }, /* TAS */ { CPUFUNC(op_4af0_4), 19184 }, /* TAS */ { CPUFUNC(op_4af8_4), 19192 }, /* TAS */ { CPUFUNC(op_4af9_4), 19193 }, /* TAS */ { CPUFUNC(op_4c90_0), 19600 }, /* MVMEL */ { CPUFUNC(op_4c98_0), 19608 }, /* MVMEL */ { CPUFUNC(op_4ca8_0), 19624 }, /* MVMEL */ { CPUFUNC(op_4cb0_4), 19632 }, /* MVMEL */ { CPUFUNC(op_4cb8_0), 19640 }, /* MVMEL */ { CPUFUNC(op_4cb9_0), 19641 }, /* MVMEL */ { CPUFUNC(op_4cba_0), 19642 }, /* MVMEL */ { CPUFUNC(op_4cbb_4), 19643 }, /* MVMEL */ { CPUFUNC(op_4cd0_0), 19664 }, /* MVMEL */ { CPUFUNC(op_4cd8_0), 19672 }, /* MVMEL */ { CPUFUNC(op_4ce8_0), 19688 }, /* MVMEL */ { CPUFUNC(op_4cf0_4), 19696 }, /* MVMEL */ { CPUFUNC(op_4cf8_0), 19704 }, /* MVMEL */ { CPUFUNC(op_4cf9_0), 19705 }, /* MVMEL */ { CPUFUNC(op_4cfa_0), 19706 }, /* MVMEL */ { CPUFUNC(op_4cfb_4), 19707 }, /* MVMEL */ { CPUFUNC(op_4e40_0), 20032 }, /* TRAP */ { CPUFUNC(op_4e50_0), 20048 }, /* LINK */ { CPUFUNC(op_4e58_0), 20056 }, /* UNLK */ { CPUFUNC(op_4e60_0), 20064 }, /* MVR2USP */ { CPUFUNC(op_4e68_0), 20072 }, /* MVUSP2R */ { CPUFUNC(op_4e70_0), 20080 }, /* RESET */ { CPUFUNC(op_4e71_0), 20081 }, /* NOP */ { CPUFUNC(op_4e72_0), 20082 }, /* STOP */ { CPUFUNC(op_4e73_5), 20083 }, /* RTE */ { CPUFUNC(op_4e74_0), 20084 }, /* RTD */ { CPUFUNC(op_4e75_0), 20085 }, /* RTS */ { CPUFUNC(op_4e76_0), 20086 }, /* TRAPV */ { CPUFUNC(op_4e77_0), 20087 }, /* RTR */ { CPUFUNC(op_4e90_0), 20112 }, /* JSR */ { CPUFUNC(op_4ea8_0), 20136 }, /* JSR */ { CPUFUNC(op_4eb0_4), 20144 }, /* JSR */ { CPUFUNC(op_4eb8_0), 20152 }, /* JSR */ { CPUFUNC(op_4eb9_0), 20153 }, /* JSR */ { CPUFUNC(op_4eba_0), 20154 }, /* JSR */ { CPUFUNC(op_4ebb_4), 20155 }, /* JSR */ { CPUFUNC(op_4ed0_0), 20176 }, /* JMP */ { CPUFUNC(op_4ee8_0), 20200 }, /* JMP */ { CPUFUNC(op_4ef0_4), 20208 }, /* JMP */ { CPUFUNC(op_4ef8_0), 20216 }, /* JMP */ { CPUFUNC(op_4ef9_0), 20217 }, /* JMP */ { CPUFUNC(op_4efa_0), 20218 }, /* JMP */ { CPUFUNC(op_4efb_4), 20219 }, /* JMP */ { CPUFUNC(op_5000_0), 20480 }, /* ADD */ { CPUFUNC(op_5010_0), 20496 }, /* ADD */ { CPUFUNC(op_5018_0), 20504 }, /* ADD */ { CPUFUNC(op_5020_0), 20512 }, /* ADD */ { CPUFUNC(op_5028_0), 20520 }, /* ADD */ { CPUFUNC(op_5030_4), 20528 }, /* ADD */ { CPUFUNC(op_5038_0), 20536 }, /* ADD */ { CPUFUNC(op_5039_0), 20537 }, /* ADD */ { CPUFUNC(op_5040_0), 20544 }, /* ADD */ { CPUFUNC(op_5048_0), 20552 }, /* ADDA */ { CPUFUNC(op_5050_0), 20560 }, /* ADD */ { CPUFUNC(op_5058_0), 20568 }, /* ADD */ { CPUFUNC(op_5060_0), 20576 }, /* ADD */ { CPUFUNC(op_5068_0), 20584 }, /* ADD */ { CPUFUNC(op_5070_4), 20592 }, /* ADD */ { CPUFUNC(op_5078_0), 20600 }, /* ADD */ { CPUFUNC(op_5079_0), 20601 }, /* ADD */ { CPUFUNC(op_5080_0), 20608 }, /* ADD */ { CPUFUNC(op_5088_0), 20616 }, /* ADDA */ { CPUFUNC(op_5090_0), 20624 }, /* ADD */ { CPUFUNC(op_5098_0), 20632 }, /* ADD */ { CPUFUNC(op_50a0_0), 20640 }, /* ADD */ { CPUFUNC(op_50a8_0), 20648 }, /* ADD */ { CPUFUNC(op_50b0_4), 20656 }, /* ADD */ { CPUFUNC(op_50b8_0), 20664 }, /* ADD */ { CPUFUNC(op_50b9_0), 20665 }, /* ADD */ { CPUFUNC(op_50c0_0), 20672 }, /* Scc */ { CPUFUNC(op_50c8_0), 20680 }, /* DBcc */ { CPUFUNC(op_50d0_0), 20688 }, /* Scc */ { CPUFUNC(op_50d8_0), 20696 }, /* Scc */ { CPUFUNC(op_50e0_0), 20704 }, /* Scc */ { CPUFUNC(op_50e8_0), 20712 }, /* Scc */ { CPUFUNC(op_50f0_4), 20720 }, /* Scc */ { CPUFUNC(op_50f8_0), 20728 }, /* Scc */ { CPUFUNC(op_50f9_0), 20729 }, /* Scc */ { CPUFUNC(op_5100_0), 20736 }, /* SUB */ { CPUFUNC(op_5110_0), 20752 }, /* SUB */ { CPUFUNC(op_5118_0), 20760 }, /* SUB */ { CPUFUNC(op_5120_0), 20768 }, /* SUB */ { CPUFUNC(op_5128_0), 20776 }, /* SUB */ { CPUFUNC(op_5130_4), 20784 }, /* SUB */ { CPUFUNC(op_5138_0), 20792 }, /* SUB */ { CPUFUNC(op_5139_0), 20793 }, /* SUB */ { CPUFUNC(op_5140_0), 20800 }, /* SUB */ { CPUFUNC(op_5148_0), 20808 }, /* SUBA */ { CPUFUNC(op_5150_0), 20816 }, /* SUB */ { CPUFUNC(op_5158_0), 20824 }, /* SUB */ { CPUFUNC(op_5160_0), 20832 }, /* SUB */ { CPUFUNC(op_5168_0), 20840 }, /* SUB */ { CPUFUNC(op_5170_4), 20848 }, /* SUB */ { CPUFUNC(op_5178_0), 20856 }, /* SUB */ { CPUFUNC(op_5179_0), 20857 }, /* SUB */ { CPUFUNC(op_5180_0), 20864 }, /* SUB */ { CPUFUNC(op_5188_0), 20872 }, /* SUBA */ { CPUFUNC(op_5190_0), 20880 }, /* SUB */ { CPUFUNC(op_5198_0), 20888 }, /* SUB */ { CPUFUNC(op_51a0_0), 20896 }, /* SUB */ { CPUFUNC(op_51a8_0), 20904 }, /* SUB */ { CPUFUNC(op_51b0_4), 20912 }, /* SUB */ { CPUFUNC(op_51b8_0), 20920 }, /* SUB */ { CPUFUNC(op_51b9_0), 20921 }, /* SUB */ { CPUFUNC(op_51c0_0), 20928 }, /* Scc */ { CPUFUNC(op_51c8_0), 20936 }, /* DBcc */ { CPUFUNC(op_51d0_0), 20944 }, /* Scc */ { CPUFUNC(op_51d8_0), 20952 }, /* Scc */ { CPUFUNC(op_51e0_0), 20960 }, /* Scc */ { CPUFUNC(op_51e8_0), 20968 }, /* Scc */ { CPUFUNC(op_51f0_4), 20976 }, /* Scc */ { CPUFUNC(op_51f8_0), 20984 }, /* Scc */ { CPUFUNC(op_51f9_0), 20985 }, /* Scc */ { CPUFUNC(op_52c0_0), 21184 }, /* Scc */ { CPUFUNC(op_52c8_0), 21192 }, /* DBcc */ { CPUFUNC(op_52d0_0), 21200 }, /* Scc */ { CPUFUNC(op_52d8_0), 21208 }, /* Scc */ { CPUFUNC(op_52e0_0), 21216 }, /* Scc */ { CPUFUNC(op_52e8_0), 21224 }, /* Scc */ { CPUFUNC(op_52f0_4), 21232 }, /* Scc */ { CPUFUNC(op_52f8_0), 21240 }, /* Scc */ { CPUFUNC(op_52f9_0), 21241 }, /* Scc */ { CPUFUNC(op_53c0_0), 21440 }, /* Scc */ { CPUFUNC(op_53c8_0), 21448 }, /* DBcc */ { CPUFUNC(op_53d0_0), 21456 }, /* Scc */ { CPUFUNC(op_53d8_0), 21464 }, /* Scc */ { CPUFUNC(op_53e0_0), 21472 }, /* Scc */ { CPUFUNC(op_53e8_0), 21480 }, /* Scc */ { CPUFUNC(op_53f0_4), 21488 }, /* Scc */ { CPUFUNC(op_53f8_0), 21496 }, /* Scc */ { CPUFUNC(op_53f9_0), 21497 }, /* Scc */ { CPUFUNC(op_54c0_0), 21696 }, /* Scc */ { CPUFUNC(op_54c8_0), 21704 }, /* DBcc */ { CPUFUNC(op_54d0_0), 21712 }, /* Scc */ { CPUFUNC(op_54d8_0), 21720 }, /* Scc */ { CPUFUNC(op_54e0_0), 21728 }, /* Scc */ { CPUFUNC(op_54e8_0), 21736 }, /* Scc */ { CPUFUNC(op_54f0_4), 21744 }, /* Scc */ { CPUFUNC(op_54f8_0), 21752 }, /* Scc */ { CPUFUNC(op_54f9_0), 21753 }, /* Scc */ { CPUFUNC(op_55c0_0), 21952 }, /* Scc */ { CPUFUNC(op_55c8_0), 21960 }, /* DBcc */ { CPUFUNC(op_55d0_0), 21968 }, /* Scc */ { CPUFUNC(op_55d8_0), 21976 }, /* Scc */ { CPUFUNC(op_55e0_0), 21984 }, /* Scc */ { CPUFUNC(op_55e8_0), 21992 }, /* Scc */ { CPUFUNC(op_55f0_4), 22000 }, /* Scc */ { CPUFUNC(op_55f8_0), 22008 }, /* Scc */ { CPUFUNC(op_55f9_0), 22009 }, /* Scc */ { CPUFUNC(op_56c0_0), 22208 }, /* Scc */ { CPUFUNC(op_56c8_0), 22216 }, /* DBcc */ { CPUFUNC(op_56d0_0), 22224 }, /* Scc */ { CPUFUNC(op_56d8_0), 22232 }, /* Scc */ { CPUFUNC(op_56e0_0), 22240 }, /* Scc */ { CPUFUNC(op_56e8_0), 22248 }, /* Scc */ { CPUFUNC(op_56f0_4), 22256 }, /* Scc */ { CPUFUNC(op_56f8_0), 22264 }, /* Scc */ { CPUFUNC(op_56f9_0), 22265 }, /* Scc */ { CPUFUNC(op_57c0_0), 22464 }, /* Scc */ { CPUFUNC(op_57c8_0), 22472 }, /* DBcc */ { CPUFUNC(op_57d0_0), 22480 }, /* Scc */ { CPUFUNC(op_57d8_0), 22488 }, /* Scc */ { CPUFUNC(op_57e0_0), 22496 }, /* Scc */ { CPUFUNC(op_57e8_0), 22504 }, /* Scc */ { CPUFUNC(op_57f0_4), 22512 }, /* Scc */ { CPUFUNC(op_57f8_0), 22520 }, /* Scc */ { CPUFUNC(op_57f9_0), 22521 }, /* Scc */ { CPUFUNC(op_58c0_0), 22720 }, /* Scc */ { CPUFUNC(op_58c8_0), 22728 }, /* DBcc */ { CPUFUNC(op_58d0_0), 22736 }, /* Scc */ { CPUFUNC(op_58d8_0), 22744 }, /* Scc */ { CPUFUNC(op_58e0_0), 22752 }, /* Scc */ { CPUFUNC(op_58e8_0), 22760 }, /* Scc */ { CPUFUNC(op_58f0_4), 22768 }, /* Scc */ { CPUFUNC(op_58f8_0), 22776 }, /* Scc */ { CPUFUNC(op_58f9_0), 22777 }, /* Scc */ { CPUFUNC(op_59c0_0), 22976 }, /* Scc */ { CPUFUNC(op_59c8_0), 22984 }, /* DBcc */ { CPUFUNC(op_59d0_0), 22992 }, /* Scc */ { CPUFUNC(op_59d8_0), 23000 }, /* Scc */ { CPUFUNC(op_59e0_0), 23008 }, /* Scc */ { CPUFUNC(op_59e8_0), 23016 }, /* Scc */ { CPUFUNC(op_59f0_4), 23024 }, /* Scc */ { CPUFUNC(op_59f8_0), 23032 }, /* Scc */ { CPUFUNC(op_59f9_0), 23033 }, /* Scc */ { CPUFUNC(op_5ac0_0), 23232 }, /* Scc */ { CPUFUNC(op_5ac8_0), 23240 }, /* DBcc */ { CPUFUNC(op_5ad0_0), 23248 }, /* Scc */ { CPUFUNC(op_5ad8_0), 23256 }, /* Scc */ { CPUFUNC(op_5ae0_0), 23264 }, /* Scc */ { CPUFUNC(op_5ae8_0), 23272 }, /* Scc */ { CPUFUNC(op_5af0_4), 23280 }, /* Scc */ { CPUFUNC(op_5af8_0), 23288 }, /* Scc */ { CPUFUNC(op_5af9_0), 23289 }, /* Scc */ { CPUFUNC(op_5bc0_0), 23488 }, /* Scc */ { CPUFUNC(op_5bc8_0), 23496 }, /* DBcc */ { CPUFUNC(op_5bd0_0), 23504 }, /* Scc */ { CPUFUNC(op_5bd8_0), 23512 }, /* Scc */ { CPUFUNC(op_5be0_0), 23520 }, /* Scc */ { CPUFUNC(op_5be8_0), 23528 }, /* Scc */ { CPUFUNC(op_5bf0_4), 23536 }, /* Scc */ { CPUFUNC(op_5bf8_0), 23544 }, /* Scc */ { CPUFUNC(op_5bf9_0), 23545 }, /* Scc */ { CPUFUNC(op_5cc0_0), 23744 }, /* Scc */ { CPUFUNC(op_5cc8_0), 23752 }, /* DBcc */ { CPUFUNC(op_5cd0_0), 23760 }, /* Scc */ { CPUFUNC(op_5cd8_0), 23768 }, /* Scc */ { CPUFUNC(op_5ce0_0), 23776 }, /* Scc */ { CPUFUNC(op_5ce8_0), 23784 }, /* Scc */ { CPUFUNC(op_5cf0_4), 23792 }, /* Scc */ { CPUFUNC(op_5cf8_0), 23800 }, /* Scc */ { CPUFUNC(op_5cf9_0), 23801 }, /* Scc */ { CPUFUNC(op_5dc0_0), 24000 }, /* Scc */ { CPUFUNC(op_5dc8_0), 24008 }, /* DBcc */ { CPUFUNC(op_5dd0_0), 24016 }, /* Scc */ { CPUFUNC(op_5dd8_0), 24024 }, /* Scc */ { CPUFUNC(op_5de0_0), 24032 }, /* Scc */ { CPUFUNC(op_5de8_0), 24040 }, /* Scc */ { CPUFUNC(op_5df0_4), 24048 }, /* Scc */ { CPUFUNC(op_5df8_0), 24056 }, /* Scc */ { CPUFUNC(op_5df9_0), 24057 }, /* Scc */ { CPUFUNC(op_5ec0_0), 24256 }, /* Scc */ { CPUFUNC(op_5ec8_0), 24264 }, /* DBcc */ { CPUFUNC(op_5ed0_0), 24272 }, /* Scc */ { CPUFUNC(op_5ed8_0), 24280 }, /* Scc */ { CPUFUNC(op_5ee0_0), 24288 }, /* Scc */ { CPUFUNC(op_5ee8_0), 24296 }, /* Scc */ { CPUFUNC(op_5ef0_4), 24304 }, /* Scc */ { CPUFUNC(op_5ef8_0), 24312 }, /* Scc */ { CPUFUNC(op_5ef9_0), 24313 }, /* Scc */ { CPUFUNC(op_5fc0_0), 24512 }, /* Scc */ { CPUFUNC(op_5fc8_0), 24520 }, /* DBcc */ { CPUFUNC(op_5fd0_0), 24528 }, /* Scc */ { CPUFUNC(op_5fd8_0), 24536 }, /* Scc */ { CPUFUNC(op_5fe0_0), 24544 }, /* Scc */ { CPUFUNC(op_5fe8_0), 24552 }, /* Scc */ { CPUFUNC(op_5ff0_4), 24560 }, /* Scc */ { CPUFUNC(op_5ff8_0), 24568 }, /* Scc */ { CPUFUNC(op_5ff9_0), 24569 }, /* Scc */ { CPUFUNC(op_6000_0), 24576 }, /* Bcc */ { CPUFUNC(op_6001_0), 24577 }, /* Bcc */ { CPUFUNC(op_60ff_4), 24831 }, /* Bcc */ { CPUFUNC(op_6100_0), 24832 }, /* BSR */ { CPUFUNC(op_6101_0), 24833 }, /* BSR */ { CPUFUNC(op_61ff_4), 25087 }, /* BSR */ { CPUFUNC(op_6200_0), 25088 }, /* Bcc */ { CPUFUNC(op_6201_0), 25089 }, /* Bcc */ { CPUFUNC(op_62ff_4), 25343 }, /* Bcc */ { CPUFUNC(op_6300_0), 25344 }, /* Bcc */ { CPUFUNC(op_6301_0), 25345 }, /* Bcc */ { CPUFUNC(op_63ff_4), 25599 }, /* Bcc */ { CPUFUNC(op_6400_0), 25600 }, /* Bcc */ { CPUFUNC(op_6401_0), 25601 }, /* Bcc */ { CPUFUNC(op_64ff_4), 25855 }, /* Bcc */ { CPUFUNC(op_6500_0), 25856 }, /* Bcc */ { CPUFUNC(op_6501_0), 25857 }, /* Bcc */ { CPUFUNC(op_65ff_4), 26111 }, /* Bcc */ { CPUFUNC(op_6600_0), 26112 }, /* Bcc */ { CPUFUNC(op_6601_0), 26113 }, /* Bcc */ { CPUFUNC(op_66ff_4), 26367 }, /* Bcc */ { CPUFUNC(op_6700_0), 26368 }, /* Bcc */ { CPUFUNC(op_6701_0), 26369 }, /* Bcc */ { CPUFUNC(op_67ff_4), 26623 }, /* Bcc */ { CPUFUNC(op_6800_0), 26624 }, /* Bcc */ { CPUFUNC(op_6801_0), 26625 }, /* Bcc */ { CPUFUNC(op_68ff_4), 26879 }, /* Bcc */ { CPUFUNC(op_6900_0), 26880 }, /* Bcc */ { CPUFUNC(op_6901_0), 26881 }, /* Bcc */ { CPUFUNC(op_69ff_4), 27135 }, /* Bcc */ { CPUFUNC(op_6a00_0), 27136 }, /* Bcc */ { CPUFUNC(op_6a01_0), 27137 }, /* Bcc */ { CPUFUNC(op_6aff_4), 27391 }, /* Bcc */ { CPUFUNC(op_6b00_0), 27392 }, /* Bcc */ { CPUFUNC(op_6b01_0), 27393 }, /* Bcc */ { CPUFUNC(op_6bff_4), 27647 }, /* Bcc */ { CPUFUNC(op_6c00_0), 27648 }, /* Bcc */ { CPUFUNC(op_6c01_0), 27649 }, /* Bcc */ { CPUFUNC(op_6cff_4), 27903 }, /* Bcc */ { CPUFUNC(op_6d00_0), 27904 }, /* Bcc */ { CPUFUNC(op_6d01_0), 27905 }, /* Bcc */ { CPUFUNC(op_6dff_4), 28159 }, /* Bcc */ { CPUFUNC(op_6e00_0), 28160 }, /* Bcc */ { CPUFUNC(op_6e01_0), 28161 }, /* Bcc */ { CPUFUNC(op_6eff_4), 28415 }, /* Bcc */ { CPUFUNC(op_6f00_0), 28416 }, /* Bcc */ { CPUFUNC(op_6f01_0), 28417 }, /* Bcc */ { CPUFUNC(op_6fff_4), 28671 }, /* Bcc */ { CPUFUNC(op_7000_0), 28672 }, /* MOVE */ { CPUFUNC(op_8000_0), 32768 }, /* OR */ { CPUFUNC(op_8010_0), 32784 }, /* OR */ { CPUFUNC(op_8018_0), 32792 }, /* OR */ { CPUFUNC(op_8020_0), 32800 }, /* OR */ { CPUFUNC(op_8028_0), 32808 }, /* OR */ { CPUFUNC(op_8030_4), 32816 }, /* OR */ { CPUFUNC(op_8038_0), 32824 }, /* OR */ { CPUFUNC(op_8039_0), 32825 }, /* OR */ { CPUFUNC(op_803a_0), 32826 }, /* OR */ { CPUFUNC(op_803b_4), 32827 }, /* OR */ { CPUFUNC(op_803c_0), 32828 }, /* OR */ { CPUFUNC(op_8040_0), 32832 }, /* OR */ { CPUFUNC(op_8050_0), 32848 }, /* OR */ { CPUFUNC(op_8058_0), 32856 }, /* OR */ { CPUFUNC(op_8060_0), 32864 }, /* OR */ { CPUFUNC(op_8068_0), 32872 }, /* OR */ { CPUFUNC(op_8070_4), 32880 }, /* OR */ { CPUFUNC(op_8078_0), 32888 }, /* OR */ { CPUFUNC(op_8079_0), 32889 }, /* OR */ { CPUFUNC(op_807a_0), 32890 }, /* OR */ { CPUFUNC(op_807b_4), 32891 }, /* OR */ { CPUFUNC(op_807c_0), 32892 }, /* OR */ { CPUFUNC(op_8080_0), 32896 }, /* OR */ { CPUFUNC(op_8090_0), 32912 }, /* OR */ { CPUFUNC(op_8098_0), 32920 }, /* OR */ { CPUFUNC(op_80a0_0), 32928 }, /* OR */ { CPUFUNC(op_80a8_0), 32936 }, /* OR */ { CPUFUNC(op_80b0_4), 32944 }, /* OR */ { CPUFUNC(op_80b8_0), 32952 }, /* OR */ { CPUFUNC(op_80b9_0), 32953 }, /* OR */ { CPUFUNC(op_80ba_0), 32954 }, /* OR */ { CPUFUNC(op_80bb_4), 32955 }, /* OR */ { CPUFUNC(op_80bc_0), 32956 }, /* OR */ { CPUFUNC(op_80c0_0), 32960 }, /* DIVU */ { CPUFUNC(op_80d0_0), 32976 }, /* DIVU */ { CPUFUNC(op_80d8_0), 32984 }, /* DIVU */ { CPUFUNC(op_80e0_0), 32992 }, /* DIVU */ { CPUFUNC(op_80e8_0), 33000 }, /* DIVU */ { CPUFUNC(op_80f0_4), 33008 }, /* DIVU */ { CPUFUNC(op_80f8_0), 33016 }, /* DIVU */ { CPUFUNC(op_80f9_0), 33017 }, /* DIVU */ { CPUFUNC(op_80fa_0), 33018 }, /* DIVU */ { CPUFUNC(op_80fb_4), 33019 }, /* DIVU */ { CPUFUNC(op_80fc_0), 33020 }, /* DIVU */ { CPUFUNC(op_8100_2), 33024 }, /* SBCD */ { CPUFUNC(op_8108_2), 33032 }, /* SBCD */ { CPUFUNC(op_8110_0), 33040 }, /* OR */ { CPUFUNC(op_8118_0), 33048 }, /* OR */ { CPUFUNC(op_8120_0), 33056 }, /* OR */ { CPUFUNC(op_8128_0), 33064 }, /* OR */ { CPUFUNC(op_8130_4), 33072 }, /* OR */ { CPUFUNC(op_8138_0), 33080 }, /* OR */ { CPUFUNC(op_8139_0), 33081 }, /* OR */ { CPUFUNC(op_8150_0), 33104 }, /* OR */ { CPUFUNC(op_8158_0), 33112 }, /* OR */ { CPUFUNC(op_8160_0), 33120 }, /* OR */ { CPUFUNC(op_8168_0), 33128 }, /* OR */ { CPUFUNC(op_8170_4), 33136 }, /* OR */ { CPUFUNC(op_8178_0), 33144 }, /* OR */ { CPUFUNC(op_8179_0), 33145 }, /* OR */ { CPUFUNC(op_8190_0), 33168 }, /* OR */ { CPUFUNC(op_8198_0), 33176 }, /* OR */ { CPUFUNC(op_81a0_0), 33184 }, /* OR */ { CPUFUNC(op_81a8_0), 33192 }, /* OR */ { CPUFUNC(op_81b0_4), 33200 }, /* OR */ { CPUFUNC(op_81b8_0), 33208 }, /* OR */ { CPUFUNC(op_81b9_0), 33209 }, /* OR */ { CPUFUNC(op_81c0_0), 33216 }, /* DIVS */ { CPUFUNC(op_81d0_0), 33232 }, /* DIVS */ { CPUFUNC(op_81d8_0), 33240 }, /* DIVS */ { CPUFUNC(op_81e0_0), 33248 }, /* DIVS */ { CPUFUNC(op_81e8_0), 33256 }, /* DIVS */ { CPUFUNC(op_81f0_4), 33264 }, /* DIVS */ { CPUFUNC(op_81f8_0), 33272 }, /* DIVS */ { CPUFUNC(op_81f9_0), 33273 }, /* DIVS */ { CPUFUNC(op_81fa_0), 33274 }, /* DIVS */ { CPUFUNC(op_81fb_4), 33275 }, /* DIVS */ { CPUFUNC(op_81fc_0), 33276 }, /* DIVS */ { CPUFUNC(op_9000_0), 36864 }, /* SUB */ { CPUFUNC(op_9010_0), 36880 }, /* SUB */ { CPUFUNC(op_9018_0), 36888 }, /* SUB */ { CPUFUNC(op_9020_0), 36896 }, /* SUB */ { CPUFUNC(op_9028_0), 36904 }, /* SUB */ { CPUFUNC(op_9030_4), 36912 }, /* SUB */ { CPUFUNC(op_9038_0), 36920 }, /* SUB */ { CPUFUNC(op_9039_0), 36921 }, /* SUB */ { CPUFUNC(op_903a_0), 36922 }, /* SUB */ { CPUFUNC(op_903b_4), 36923 }, /* SUB */ { CPUFUNC(op_903c_0), 36924 }, /* SUB */ { CPUFUNC(op_9040_0), 36928 }, /* SUB */ { CPUFUNC(op_9048_0), 36936 }, /* SUB */ { CPUFUNC(op_9050_0), 36944 }, /* SUB */ { CPUFUNC(op_9058_0), 36952 }, /* SUB */ { CPUFUNC(op_9060_0), 36960 }, /* SUB */ { CPUFUNC(op_9068_0), 36968 }, /* SUB */ { CPUFUNC(op_9070_4), 36976 }, /* SUB */ { CPUFUNC(op_9078_0), 36984 }, /* SUB */ { CPUFUNC(op_9079_0), 36985 }, /* SUB */ { CPUFUNC(op_907a_0), 36986 }, /* SUB */ { CPUFUNC(op_907b_4), 36987 }, /* SUB */ { CPUFUNC(op_907c_0), 36988 }, /* SUB */ { CPUFUNC(op_9080_0), 36992 }, /* SUB */ { CPUFUNC(op_9088_0), 37000 }, /* SUB */ { CPUFUNC(op_9090_0), 37008 }, /* SUB */ { CPUFUNC(op_9098_0), 37016 }, /* SUB */ { CPUFUNC(op_90a0_0), 37024 }, /* SUB */ { CPUFUNC(op_90a8_0), 37032 }, /* SUB */ { CPUFUNC(op_90b0_4), 37040 }, /* SUB */ { CPUFUNC(op_90b8_0), 37048 }, /* SUB */ { CPUFUNC(op_90b9_0), 37049 }, /* SUB */ { CPUFUNC(op_90ba_0), 37050 }, /* SUB */ { CPUFUNC(op_90bb_4), 37051 }, /* SUB */ { CPUFUNC(op_90bc_0), 37052 }, /* SUB */ { CPUFUNC(op_90c0_0), 37056 }, /* SUBA */ { CPUFUNC(op_90c8_0), 37064 }, /* SUBA */ { CPUFUNC(op_90d0_0), 37072 }, /* SUBA */ { CPUFUNC(op_90d8_0), 37080 }, /* SUBA */ { CPUFUNC(op_90e0_0), 37088 }, /* SUBA */ { CPUFUNC(op_90e8_0), 37096 }, /* SUBA */ { CPUFUNC(op_90f0_4), 37104 }, /* SUBA */ { CPUFUNC(op_90f8_0), 37112 }, /* SUBA */ { CPUFUNC(op_90f9_0), 37113 }, /* SUBA */ { CPUFUNC(op_90fa_0), 37114 }, /* SUBA */ { CPUFUNC(op_90fb_4), 37115 }, /* SUBA */ { CPUFUNC(op_90fc_0), 37116 }, /* SUBA */ { CPUFUNC(op_9100_0), 37120 }, /* SUBX */ { CPUFUNC(op_9108_0), 37128 }, /* SUBX */ { CPUFUNC(op_9110_0), 37136 }, /* SUB */ { CPUFUNC(op_9118_0), 37144 }, /* SUB */ { CPUFUNC(op_9120_0), 37152 }, /* SUB */ { CPUFUNC(op_9128_0), 37160 }, /* SUB */ { CPUFUNC(op_9130_4), 37168 }, /* SUB */ { CPUFUNC(op_9138_0), 37176 }, /* SUB */ { CPUFUNC(op_9139_0), 37177 }, /* SUB */ { CPUFUNC(op_9140_0), 37184 }, /* SUBX */ { CPUFUNC(op_9148_0), 37192 }, /* SUBX */ { CPUFUNC(op_9150_0), 37200 }, /* SUB */ { CPUFUNC(op_9158_0), 37208 }, /* SUB */ { CPUFUNC(op_9160_0), 37216 }, /* SUB */ { CPUFUNC(op_9168_0), 37224 }, /* SUB */ { CPUFUNC(op_9170_4), 37232 }, /* SUB */ { CPUFUNC(op_9178_0), 37240 }, /* SUB */ { CPUFUNC(op_9179_0), 37241 }, /* SUB */ { CPUFUNC(op_9180_0), 37248 }, /* SUBX */ { CPUFUNC(op_9188_0), 37256 }, /* SUBX */ { CPUFUNC(op_9190_0), 37264 }, /* SUB */ { CPUFUNC(op_9198_0), 37272 }, /* SUB */ { CPUFUNC(op_91a0_0), 37280 }, /* SUB */ { CPUFUNC(op_91a8_0), 37288 }, /* SUB */ { CPUFUNC(op_91b0_4), 37296 }, /* SUB */ { CPUFUNC(op_91b8_0), 37304 }, /* SUB */ { CPUFUNC(op_91b9_0), 37305 }, /* SUB */ { CPUFUNC(op_91c0_0), 37312 }, /* SUBA */ { CPUFUNC(op_91c8_0), 37320 }, /* SUBA */ { CPUFUNC(op_91d0_0), 37328 }, /* SUBA */ { CPUFUNC(op_91d8_0), 37336 }, /* SUBA */ { CPUFUNC(op_91e0_0), 37344 }, /* SUBA */ { CPUFUNC(op_91e8_0), 37352 }, /* SUBA */ { CPUFUNC(op_91f0_4), 37360 }, /* SUBA */ { CPUFUNC(op_91f8_0), 37368 }, /* SUBA */ { CPUFUNC(op_91f9_0), 37369 }, /* SUBA */ { CPUFUNC(op_91fa_0), 37370 }, /* SUBA */ { CPUFUNC(op_91fb_4), 37371 }, /* SUBA */ { CPUFUNC(op_91fc_0), 37372 }, /* SUBA */ { CPUFUNC(op_b000_0), 45056 }, /* CMP */ { CPUFUNC(op_b010_0), 45072 }, /* CMP */ { CPUFUNC(op_b018_0), 45080 }, /* CMP */ { CPUFUNC(op_b020_0), 45088 }, /* CMP */ { CPUFUNC(op_b028_0), 45096 }, /* CMP */ { CPUFUNC(op_b030_4), 45104 }, /* CMP */ { CPUFUNC(op_b038_0), 45112 }, /* CMP */ { CPUFUNC(op_b039_0), 45113 }, /* CMP */ { CPUFUNC(op_b03a_0), 45114 }, /* CMP */ { CPUFUNC(op_b03b_4), 45115 }, /* CMP */ { CPUFUNC(op_b03c_0), 45116 }, /* CMP */ { CPUFUNC(op_b040_0), 45120 }, /* CMP */ { CPUFUNC(op_b048_0), 45128 }, /* CMP */ { CPUFUNC(op_b050_0), 45136 }, /* CMP */ { CPUFUNC(op_b058_0), 45144 }, /* CMP */ { CPUFUNC(op_b060_0), 45152 }, /* CMP */ { CPUFUNC(op_b068_0), 45160 }, /* CMP */ { CPUFUNC(op_b070_4), 45168 }, /* CMP */ { CPUFUNC(op_b078_0), 45176 }, /* CMP */ { CPUFUNC(op_b079_0), 45177 }, /* CMP */ { CPUFUNC(op_b07a_0), 45178 }, /* CMP */ { CPUFUNC(op_b07b_4), 45179 }, /* CMP */ { CPUFUNC(op_b07c_0), 45180 }, /* CMP */ { CPUFUNC(op_b080_0), 45184 }, /* CMP */ { CPUFUNC(op_b088_0), 45192 }, /* CMP */ { CPUFUNC(op_b090_0), 45200 }, /* CMP */ { CPUFUNC(op_b098_0), 45208 }, /* CMP */ { CPUFUNC(op_b0a0_0), 45216 }, /* CMP */ { CPUFUNC(op_b0a8_0), 45224 }, /* CMP */ { CPUFUNC(op_b0b0_4), 45232 }, /* CMP */ { CPUFUNC(op_b0b8_0), 45240 }, /* CMP */ { CPUFUNC(op_b0b9_0), 45241 }, /* CMP */ { CPUFUNC(op_b0ba_0), 45242 }, /* CMP */ { CPUFUNC(op_b0bb_4), 45243 }, /* CMP */ { CPUFUNC(op_b0bc_0), 45244 }, /* CMP */ { CPUFUNC(op_b0c0_0), 45248 }, /* CMPA */ { CPUFUNC(op_b0c8_0), 45256 }, /* CMPA */ { CPUFUNC(op_b0d0_0), 45264 }, /* CMPA */ { CPUFUNC(op_b0d8_0), 45272 }, /* CMPA */ { CPUFUNC(op_b0e0_0), 45280 }, /* CMPA */ { CPUFUNC(op_b0e8_0), 45288 }, /* CMPA */ { CPUFUNC(op_b0f0_4), 45296 }, /* CMPA */ { CPUFUNC(op_b0f8_0), 45304 }, /* CMPA */ { CPUFUNC(op_b0f9_0), 45305 }, /* CMPA */ { CPUFUNC(op_b0fa_0), 45306 }, /* CMPA */ { CPUFUNC(op_b0fb_4), 45307 }, /* CMPA */ { CPUFUNC(op_b0fc_0), 45308 }, /* CMPA */ { CPUFUNC(op_b100_0), 45312 }, /* EOR */ { CPUFUNC(op_b108_0), 45320 }, /* CMPM */ { CPUFUNC(op_b110_0), 45328 }, /* EOR */ { CPUFUNC(op_b118_0), 45336 }, /* EOR */ { CPUFUNC(op_b120_0), 45344 }, /* EOR */ { CPUFUNC(op_b128_0), 45352 }, /* EOR */ { CPUFUNC(op_b130_4), 45360 }, /* EOR */ { CPUFUNC(op_b138_0), 45368 }, /* EOR */ { CPUFUNC(op_b139_0), 45369 }, /* EOR */ { CPUFUNC(op_b140_0), 45376 }, /* EOR */ { CPUFUNC(op_b148_0), 45384 }, /* CMPM */ { CPUFUNC(op_b150_0), 45392 }, /* EOR */ { CPUFUNC(op_b158_0), 45400 }, /* EOR */ { CPUFUNC(op_b160_0), 45408 }, /* EOR */ { CPUFUNC(op_b168_0), 45416 }, /* EOR */ { CPUFUNC(op_b170_4), 45424 }, /* EOR */ { CPUFUNC(op_b178_0), 45432 }, /* EOR */ { CPUFUNC(op_b179_0), 45433 }, /* EOR */ { CPUFUNC(op_b180_0), 45440 }, /* EOR */ { CPUFUNC(op_b188_0), 45448 }, /* CMPM */ { CPUFUNC(op_b190_0), 45456 }, /* EOR */ { CPUFUNC(op_b198_0), 45464 }, /* EOR */ { CPUFUNC(op_b1a0_0), 45472 }, /* EOR */ { CPUFUNC(op_b1a8_0), 45480 }, /* EOR */ { CPUFUNC(op_b1b0_4), 45488 }, /* EOR */ { CPUFUNC(op_b1b8_0), 45496 }, /* EOR */ { CPUFUNC(op_b1b9_0), 45497 }, /* EOR */ { CPUFUNC(op_b1c0_0), 45504 }, /* CMPA */ { CPUFUNC(op_b1c8_0), 45512 }, /* CMPA */ { CPUFUNC(op_b1d0_0), 45520 }, /* CMPA */ { CPUFUNC(op_b1d8_0), 45528 }, /* CMPA */ { CPUFUNC(op_b1e0_0), 45536 }, /* CMPA */ { CPUFUNC(op_b1e8_0), 45544 }, /* CMPA */ { CPUFUNC(op_b1f0_4), 45552 }, /* CMPA */ { CPUFUNC(op_b1f8_0), 45560 }, /* CMPA */ { CPUFUNC(op_b1f9_0), 45561 }, /* CMPA */ { CPUFUNC(op_b1fa_0), 45562 }, /* CMPA */ { CPUFUNC(op_b1fb_4), 45563 }, /* CMPA */ { CPUFUNC(op_b1fc_0), 45564 }, /* CMPA */ { CPUFUNC(op_c000_0), 49152 }, /* AND */ { CPUFUNC(op_c010_0), 49168 }, /* AND */ { CPUFUNC(op_c018_0), 49176 }, /* AND */ { CPUFUNC(op_c020_0), 49184 }, /* AND */ { CPUFUNC(op_c028_0), 49192 }, /* AND */ { CPUFUNC(op_c030_4), 49200 }, /* AND */ { CPUFUNC(op_c038_0), 49208 }, /* AND */ { CPUFUNC(op_c039_0), 49209 }, /* AND */ { CPUFUNC(op_c03a_0), 49210 }, /* AND */ { CPUFUNC(op_c03b_4), 49211 }, /* AND */ { CPUFUNC(op_c03c_0), 49212 }, /* AND */ { CPUFUNC(op_c040_0), 49216 }, /* AND */ { CPUFUNC(op_c050_0), 49232 }, /* AND */ { CPUFUNC(op_c058_0), 49240 }, /* AND */ { CPUFUNC(op_c060_0), 49248 }, /* AND */ { CPUFUNC(op_c068_0), 49256 }, /* AND */ { CPUFUNC(op_c070_4), 49264 }, /* AND */ { CPUFUNC(op_c078_0), 49272 }, /* AND */ { CPUFUNC(op_c079_0), 49273 }, /* AND */ { CPUFUNC(op_c07a_0), 49274 }, /* AND */ { CPUFUNC(op_c07b_4), 49275 }, /* AND */ { CPUFUNC(op_c07c_0), 49276 }, /* AND */ { CPUFUNC(op_c080_0), 49280 }, /* AND */ { CPUFUNC(op_c090_0), 49296 }, /* AND */ { CPUFUNC(op_c098_0), 49304 }, /* AND */ { CPUFUNC(op_c0a0_0), 49312 }, /* AND */ { CPUFUNC(op_c0a8_0), 49320 }, /* AND */ { CPUFUNC(op_c0b0_4), 49328 }, /* AND */ { CPUFUNC(op_c0b8_0), 49336 }, /* AND */ { CPUFUNC(op_c0b9_0), 49337 }, /* AND */ { CPUFUNC(op_c0ba_0), 49338 }, /* AND */ { CPUFUNC(op_c0bb_4), 49339 }, /* AND */ { CPUFUNC(op_c0bc_0), 49340 }, /* AND */ { CPUFUNC(op_c0c0_0), 49344 }, /* MULU */ { CPUFUNC(op_c0d0_0), 49360 }, /* MULU */ { CPUFUNC(op_c0d8_0), 49368 }, /* MULU */ { CPUFUNC(op_c0e0_0), 49376 }, /* MULU */ { CPUFUNC(op_c0e8_0), 49384 }, /* MULU */ { CPUFUNC(op_c0f0_4), 49392 }, /* MULU */ { CPUFUNC(op_c0f8_0), 49400 }, /* MULU */ { CPUFUNC(op_c0f9_0), 49401 }, /* MULU */ { CPUFUNC(op_c0fa_0), 49402 }, /* MULU */ { CPUFUNC(op_c0fb_4), 49403 }, /* MULU */ { CPUFUNC(op_c0fc_0), 49404 }, /* MULU */ { CPUFUNC(op_c100_2), 49408 }, /* ABCD */ { CPUFUNC(op_c108_2), 49416 }, /* ABCD */ { CPUFUNC(op_c110_0), 49424 }, /* AND */ { CPUFUNC(op_c118_0), 49432 }, /* AND */ { CPUFUNC(op_c120_0), 49440 }, /* AND */ { CPUFUNC(op_c128_0), 49448 }, /* AND */ { CPUFUNC(op_c130_4), 49456 }, /* AND */ { CPUFUNC(op_c138_0), 49464 }, /* AND */ { CPUFUNC(op_c139_0), 49465 }, /* AND */ { CPUFUNC(op_c140_0), 49472 }, /* EXG */ { CPUFUNC(op_c148_0), 49480 }, /* EXG */ { CPUFUNC(op_c150_0), 49488 }, /* AND */ { CPUFUNC(op_c158_0), 49496 }, /* AND */ { CPUFUNC(op_c160_0), 49504 }, /* AND */ { CPUFUNC(op_c168_0), 49512 }, /* AND */ { CPUFUNC(op_c170_4), 49520 }, /* AND */ { CPUFUNC(op_c178_0), 49528 }, /* AND */ { CPUFUNC(op_c179_0), 49529 }, /* AND */ { CPUFUNC(op_c188_0), 49544 }, /* EXG */ { CPUFUNC(op_c190_0), 49552 }, /* AND */ { CPUFUNC(op_c198_0), 49560 }, /* AND */ { CPUFUNC(op_c1a0_0), 49568 }, /* AND */ { CPUFUNC(op_c1a8_0), 49576 }, /* AND */ { CPUFUNC(op_c1b0_4), 49584 }, /* AND */ { CPUFUNC(op_c1b8_0), 49592 }, /* AND */ { CPUFUNC(op_c1b9_0), 49593 }, /* AND */ { CPUFUNC(op_c1c0_0), 49600 }, /* MULS */ { CPUFUNC(op_c1d0_0), 49616 }, /* MULS */ { CPUFUNC(op_c1d8_0), 49624 }, /* MULS */ { CPUFUNC(op_c1e0_0), 49632 }, /* MULS */ { CPUFUNC(op_c1e8_0), 49640 }, /* MULS */ { CPUFUNC(op_c1f0_4), 49648 }, /* MULS */ { CPUFUNC(op_c1f8_0), 49656 }, /* MULS */ { CPUFUNC(op_c1f9_0), 49657 }, /* MULS */ { CPUFUNC(op_c1fa_0), 49658 }, /* MULS */ { CPUFUNC(op_c1fb_4), 49659 }, /* MULS */ { CPUFUNC(op_c1fc_0), 49660 }, /* MULS */ { CPUFUNC(op_d000_0), 53248 }, /* ADD */ { CPUFUNC(op_d010_0), 53264 }, /* ADD */ { CPUFUNC(op_d018_0), 53272 }, /* ADD */ { CPUFUNC(op_d020_0), 53280 }, /* ADD */ { CPUFUNC(op_d028_0), 53288 }, /* ADD */ { CPUFUNC(op_d030_4), 53296 }, /* ADD */ { CPUFUNC(op_d038_0), 53304 }, /* ADD */ { CPUFUNC(op_d039_0), 53305 }, /* ADD */ { CPUFUNC(op_d03a_0), 53306 }, /* ADD */ { CPUFUNC(op_d03b_4), 53307 }, /* ADD */ { CPUFUNC(op_d03c_0), 53308 }, /* ADD */ { CPUFUNC(op_d040_0), 53312 }, /* ADD */ { CPUFUNC(op_d048_0), 53320 }, /* ADD */ { CPUFUNC(op_d050_0), 53328 }, /* ADD */ { CPUFUNC(op_d058_0), 53336 }, /* ADD */ { CPUFUNC(op_d060_0), 53344 }, /* ADD */ { CPUFUNC(op_d068_0), 53352 }, /* ADD */ { CPUFUNC(op_d070_4), 53360 }, /* ADD */ { CPUFUNC(op_d078_0), 53368 }, /* ADD */ { CPUFUNC(op_d079_0), 53369 }, /* ADD */ { CPUFUNC(op_d07a_0), 53370 }, /* ADD */ { CPUFUNC(op_d07b_4), 53371 }, /* ADD */ { CPUFUNC(op_d07c_0), 53372 }, /* ADD */ { CPUFUNC(op_d080_0), 53376 }, /* ADD */ { CPUFUNC(op_d088_0), 53384 }, /* ADD */ { CPUFUNC(op_d090_0), 53392 }, /* ADD */ { CPUFUNC(op_d098_0), 53400 }, /* ADD */ { CPUFUNC(op_d0a0_0), 53408 }, /* ADD */ { CPUFUNC(op_d0a8_0), 53416 }, /* ADD */ { CPUFUNC(op_d0b0_4), 53424 }, /* ADD */ { CPUFUNC(op_d0b8_0), 53432 }, /* ADD */ { CPUFUNC(op_d0b9_0), 53433 }, /* ADD */ { CPUFUNC(op_d0ba_0), 53434 }, /* ADD */ { CPUFUNC(op_d0bb_4), 53435 }, /* ADD */ { CPUFUNC(op_d0bc_0), 53436 }, /* ADD */ { CPUFUNC(op_d0c0_0), 53440 }, /* ADDA */ { CPUFUNC(op_d0c8_0), 53448 }, /* ADDA */ { CPUFUNC(op_d0d0_0), 53456 }, /* ADDA */ { CPUFUNC(op_d0d8_0), 53464 }, /* ADDA */ { CPUFUNC(op_d0e0_0), 53472 }, /* ADDA */ { CPUFUNC(op_d0e8_0), 53480 }, /* ADDA */ { CPUFUNC(op_d0f0_4), 53488 }, /* ADDA */ { CPUFUNC(op_d0f8_0), 53496 }, /* ADDA */ { CPUFUNC(op_d0f9_0), 53497 }, /* ADDA */ { CPUFUNC(op_d0fa_0), 53498 }, /* ADDA */ { CPUFUNC(op_d0fb_4), 53499 }, /* ADDA */ { CPUFUNC(op_d0fc_0), 53500 }, /* ADDA */ { CPUFUNC(op_d100_0), 53504 }, /* ADDX */ { CPUFUNC(op_d108_0), 53512 }, /* ADDX */ { CPUFUNC(op_d110_0), 53520 }, /* ADD */ { CPUFUNC(op_d118_0), 53528 }, /* ADD */ { CPUFUNC(op_d120_0), 53536 }, /* ADD */ { CPUFUNC(op_d128_0), 53544 }, /* ADD */ { CPUFUNC(op_d130_4), 53552 }, /* ADD */ { CPUFUNC(op_d138_0), 53560 }, /* ADD */ { CPUFUNC(op_d139_0), 53561 }, /* ADD */ { CPUFUNC(op_d140_0), 53568 }, /* ADDX */ { CPUFUNC(op_d148_0), 53576 }, /* ADDX */ { CPUFUNC(op_d150_0), 53584 }, /* ADD */ { CPUFUNC(op_d158_0), 53592 }, /* ADD */ { CPUFUNC(op_d160_0), 53600 }, /* ADD */ { CPUFUNC(op_d168_0), 53608 }, /* ADD */ { CPUFUNC(op_d170_4), 53616 }, /* ADD */ { CPUFUNC(op_d178_0), 53624 }, /* ADD */ { CPUFUNC(op_d179_0), 53625 }, /* ADD */ { CPUFUNC(op_d180_0), 53632 }, /* ADDX */ { CPUFUNC(op_d188_0), 53640 }, /* ADDX */ { CPUFUNC(op_d190_0), 53648 }, /* ADD */ { CPUFUNC(op_d198_0), 53656 }, /* ADD */ { CPUFUNC(op_d1a0_0), 53664 }, /* ADD */ { CPUFUNC(op_d1a8_0), 53672 }, /* ADD */ { CPUFUNC(op_d1b0_4), 53680 }, /* ADD */ { CPUFUNC(op_d1b8_0), 53688 }, /* ADD */ { CPUFUNC(op_d1b9_0), 53689 }, /* ADD */ { CPUFUNC(op_d1c0_0), 53696 }, /* ADDA */ { CPUFUNC(op_d1c8_0), 53704 }, /* ADDA */ { CPUFUNC(op_d1d0_0), 53712 }, /* ADDA */ { CPUFUNC(op_d1d8_0), 53720 }, /* ADDA */ { CPUFUNC(op_d1e0_0), 53728 }, /* ADDA */ { CPUFUNC(op_d1e8_0), 53736 }, /* ADDA */ { CPUFUNC(op_d1f0_4), 53744 }, /* ADDA */ { CPUFUNC(op_d1f8_0), 53752 }, /* ADDA */ { CPUFUNC(op_d1f9_0), 53753 }, /* ADDA */ { CPUFUNC(op_d1fa_0), 53754 }, /* ADDA */ { CPUFUNC(op_d1fb_4), 53755 }, /* ADDA */ { CPUFUNC(op_d1fc_0), 53756 }, /* ADDA */ { CPUFUNC(op_e000_0), 57344 }, /* ASR */ { CPUFUNC(op_e008_0), 57352 }, /* LSR */ { CPUFUNC(op_e010_0), 57360 }, /* ROXR */ { CPUFUNC(op_e018_0), 57368 }, /* ROR */ { CPUFUNC(op_e020_0), 57376 }, /* ASR */ { CPUFUNC(op_e028_0), 57384 }, /* LSR */ { CPUFUNC(op_e030_0), 57392 }, /* ROXR */ { CPUFUNC(op_e038_0), 57400 }, /* ROR */ { CPUFUNC(op_e040_0), 57408 }, /* ASR */ { CPUFUNC(op_e048_0), 57416 }, /* LSR */ { CPUFUNC(op_e050_0), 57424 }, /* ROXR */ { CPUFUNC(op_e058_0), 57432 }, /* ROR */ { CPUFUNC(op_e060_0), 57440 }, /* ASR */ { CPUFUNC(op_e068_0), 57448 }, /* LSR */ { CPUFUNC(op_e070_0), 57456 }, /* ROXR */ { CPUFUNC(op_e078_0), 57464 }, /* ROR */ { CPUFUNC(op_e080_0), 57472 }, /* ASR */ { CPUFUNC(op_e088_0), 57480 }, /* LSR */ { CPUFUNC(op_e090_0), 57488 }, /* ROXR */ { CPUFUNC(op_e098_0), 57496 }, /* ROR */ { CPUFUNC(op_e0a0_0), 57504 }, /* ASR */ { CPUFUNC(op_e0a8_0), 57512 }, /* LSR */ { CPUFUNC(op_e0b0_0), 57520 }, /* ROXR */ { CPUFUNC(op_e0b8_0), 57528 }, /* ROR */ { CPUFUNC(op_e0d0_0), 57552 }, /* ASRW */ { CPUFUNC(op_e0d8_0), 57560 }, /* ASRW */ { CPUFUNC(op_e0e0_0), 57568 }, /* ASRW */ { CPUFUNC(op_e0e8_0), 57576 }, /* ASRW */ { CPUFUNC(op_e0f0_4), 57584 }, /* ASRW */ { CPUFUNC(op_e0f8_0), 57592 }, /* ASRW */ { CPUFUNC(op_e0f9_0), 57593 }, /* ASRW */ { CPUFUNC(op_e100_0), 57600 }, /* ASL */ { CPUFUNC(op_e108_0), 57608 }, /* LSL */ { CPUFUNC(op_e110_0), 57616 }, /* ROXL */ { CPUFUNC(op_e118_0), 57624 }, /* ROL */ { CPUFUNC(op_e120_0), 57632 }, /* ASL */ { CPUFUNC(op_e128_0), 57640 }, /* LSL */ { CPUFUNC(op_e130_0), 57648 }, /* ROXL */ { CPUFUNC(op_e138_0), 57656 }, /* ROL */ { CPUFUNC(op_e140_0), 57664 }, /* ASL */ { CPUFUNC(op_e148_0), 57672 }, /* LSL */ { CPUFUNC(op_e150_0), 57680 }, /* ROXL */ { CPUFUNC(op_e158_0), 57688 }, /* ROL */ { CPUFUNC(op_e160_0), 57696 }, /* ASL */ { CPUFUNC(op_e168_0), 57704 }, /* LSL */ { CPUFUNC(op_e170_0), 57712 }, /* ROXL */ { CPUFUNC(op_e178_0), 57720 }, /* ROL */ { CPUFUNC(op_e180_0), 57728 }, /* ASL */ { CPUFUNC(op_e188_0), 57736 }, /* LSL */ { CPUFUNC(op_e190_0), 57744 }, /* ROXL */ { CPUFUNC(op_e198_0), 57752 }, /* ROL */ { CPUFUNC(op_e1a0_0), 57760 }, /* ASL */ { CPUFUNC(op_e1a8_0), 57768 }, /* LSL */ { CPUFUNC(op_e1b0_0), 57776 }, /* ROXL */ { CPUFUNC(op_e1b8_0), 57784 }, /* ROL */ { CPUFUNC(op_e1d0_0), 57808 }, /* ASLW */ { CPUFUNC(op_e1d8_0), 57816 }, /* ASLW */ { CPUFUNC(op_e1e0_0), 57824 }, /* ASLW */ { CPUFUNC(op_e1e8_0), 57832 }, /* ASLW */ { CPUFUNC(op_e1f0_4), 57840 }, /* ASLW */ { CPUFUNC(op_e1f8_0), 57848 }, /* ASLW */ { CPUFUNC(op_e1f9_0), 57849 }, /* ASLW */ { CPUFUNC(op_e2d0_0), 58064 }, /* LSRW */ { CPUFUNC(op_e2d8_0), 58072 }, /* LSRW */ { CPUFUNC(op_e2e0_0), 58080 }, /* LSRW */ { CPUFUNC(op_e2e8_0), 58088 }, /* LSRW */ { CPUFUNC(op_e2f0_4), 58096 }, /* LSRW */ { CPUFUNC(op_e2f8_0), 58104 }, /* LSRW */ { CPUFUNC(op_e2f9_0), 58105 }, /* LSRW */ { CPUFUNC(op_e3d0_0), 58320 }, /* LSLW */ { CPUFUNC(op_e3d8_0), 58328 }, /* LSLW */ { CPUFUNC(op_e3e0_0), 58336 }, /* LSLW */ { CPUFUNC(op_e3e8_0), 58344 }, /* LSLW */ { CPUFUNC(op_e3f0_4), 58352 }, /* LSLW */ { CPUFUNC(op_e3f8_0), 58360 }, /* LSLW */ { CPUFUNC(op_e3f9_0), 58361 }, /* LSLW */ { CPUFUNC(op_e4d0_0), 58576 }, /* ROXRW */ { CPUFUNC(op_e4d8_0), 58584 }, /* ROXRW */ { CPUFUNC(op_e4e0_0), 58592 }, /* ROXRW */ { CPUFUNC(op_e4e8_0), 58600 }, /* ROXRW */ { CPUFUNC(op_e4f0_4), 58608 }, /* ROXRW */ { CPUFUNC(op_e4f8_0), 58616 }, /* ROXRW */ { CPUFUNC(op_e4f9_0), 58617 }, /* ROXRW */ { CPUFUNC(op_e5d0_0), 58832 }, /* ROXLW */ { CPUFUNC(op_e5d8_0), 58840 }, /* ROXLW */ { CPUFUNC(op_e5e0_0), 58848 }, /* ROXLW */ { CPUFUNC(op_e5e8_0), 58856 }, /* ROXLW */ { CPUFUNC(op_e5f0_4), 58864 }, /* ROXLW */ { CPUFUNC(op_e5f8_0), 58872 }, /* ROXLW */ { CPUFUNC(op_e5f9_0), 58873 }, /* ROXLW */ { CPUFUNC(op_e6d0_0), 59088 }, /* RORW */ { CPUFUNC(op_e6d8_0), 59096 }, /* RORW */ { CPUFUNC(op_e6e0_0), 59104 }, /* RORW */ { CPUFUNC(op_e6e8_0), 59112 }, /* RORW */ { CPUFUNC(op_e6f0_4), 59120 }, /* RORW */ { CPUFUNC(op_e6f8_0), 59128 }, /* RORW */ { CPUFUNC(op_e6f9_0), 59129 }, /* RORW */ { CPUFUNC(op_e7d0_0), 59344 }, /* ROLW */ { CPUFUNC(op_e7d8_0), 59352 }, /* ROLW */ { CPUFUNC(op_e7e0_0), 59360 }, /* ROLW */ { CPUFUNC(op_e7e8_0), 59368 }, /* ROLW */ { CPUFUNC(op_e7f0_4), 59376 }, /* ROLW */ { CPUFUNC(op_e7f8_0), 59384 }, /* ROLW */ { CPUFUNC(op_e7f9_0), 59385 }, /* ROLW */ { 0, 0 }}; #endif /* CPUEMU_68000_ONLY */ #ifdef CPUEMU_11 const struct cputbl CPUFUNC(op_smalltbl_11)[] = { { CPUFUNC(op_0000_11), 0 }, /* OR */ { CPUFUNC(op_0010_11), 16 }, /* OR */ { CPUFUNC(op_0018_11), 24 }, /* OR */ { CPUFUNC(op_0020_11), 32 }, /* OR */ { CPUFUNC(op_0028_11), 40 }, /* OR */ { CPUFUNC(op_0030_11), 48 }, /* OR */ { CPUFUNC(op_0038_11), 56 }, /* OR */ { CPUFUNC(op_0039_11), 57 }, /* OR */ { CPUFUNC(op_003c_11), 60 }, /* ORSR */ { CPUFUNC(op_0040_11), 64 }, /* OR */ { CPUFUNC(op_0050_11), 80 }, /* OR */ { CPUFUNC(op_0058_11), 88 }, /* OR */ { CPUFUNC(op_0060_11), 96 }, /* OR */ { CPUFUNC(op_0068_11), 104 }, /* OR */ { CPUFUNC(op_0070_11), 112 }, /* OR */ { CPUFUNC(op_0078_11), 120 }, /* OR */ { CPUFUNC(op_0079_11), 121 }, /* OR */ { CPUFUNC(op_007c_11), 124 }, /* ORSR */ { CPUFUNC(op_0080_11), 128 }, /* OR */ { CPUFUNC(op_0090_11), 144 }, /* OR */ { CPUFUNC(op_0098_11), 152 }, /* OR */ { CPUFUNC(op_00a0_11), 160 }, /* OR */ { CPUFUNC(op_00a8_11), 168 }, /* OR */ { CPUFUNC(op_00b0_11), 176 }, /* OR */ { CPUFUNC(op_00b8_11), 184 }, /* OR */ { CPUFUNC(op_00b9_11), 185 }, /* OR */ { CPUFUNC(op_0100_11), 256 }, /* BTST */ { CPUFUNC(op_0108_11), 264 }, /* MVPMR */ { CPUFUNC(op_0110_11), 272 }, /* BTST */ { CPUFUNC(op_0118_11), 280 }, /* BTST */ { CPUFUNC(op_0120_11), 288 }, /* BTST */ { CPUFUNC(op_0128_11), 296 }, /* BTST */ { CPUFUNC(op_0130_11), 304 }, /* BTST */ { CPUFUNC(op_0138_11), 312 }, /* BTST */ { CPUFUNC(op_0139_11), 313 }, /* BTST */ { CPUFUNC(op_013a_11), 314 }, /* BTST */ { CPUFUNC(op_013b_11), 315 }, /* BTST */ { CPUFUNC(op_013c_11), 316 }, /* BTST */ { CPUFUNC(op_0140_11), 320 }, /* BCHG */ { CPUFUNC(op_0148_11), 328 }, /* MVPMR */ { CPUFUNC(op_0150_11), 336 }, /* BCHG */ { CPUFUNC(op_0158_11), 344 }, /* BCHG */ { CPUFUNC(op_0160_11), 352 }, /* BCHG */ { CPUFUNC(op_0168_11), 360 }, /* BCHG */ { CPUFUNC(op_0170_11), 368 }, /* BCHG */ { CPUFUNC(op_0178_11), 376 }, /* BCHG */ { CPUFUNC(op_0179_11), 377 }, /* BCHG */ { CPUFUNC(op_017a_11), 378 }, /* BCHG */ { CPUFUNC(op_017b_11), 379 }, /* BCHG */ { CPUFUNC(op_0180_11), 384 }, /* BCLR */ { CPUFUNC(op_0188_11), 392 }, /* MVPRM */ { CPUFUNC(op_0190_11), 400 }, /* BCLR */ { CPUFUNC(op_0198_11), 408 }, /* BCLR */ { CPUFUNC(op_01a0_11), 416 }, /* BCLR */ { CPUFUNC(op_01a8_11), 424 }, /* BCLR */ { CPUFUNC(op_01b0_11), 432 }, /* BCLR */ { CPUFUNC(op_01b8_11), 440 }, /* BCLR */ { CPUFUNC(op_01b9_11), 441 }, /* BCLR */ { CPUFUNC(op_01ba_11), 442 }, /* BCLR */ { CPUFUNC(op_01bb_11), 443 }, /* BCLR */ { CPUFUNC(op_01c0_11), 448 }, /* BSET */ { CPUFUNC(op_01c8_11), 456 }, /* MVPRM */ { CPUFUNC(op_01d0_11), 464 }, /* BSET */ { CPUFUNC(op_01d8_11), 472 }, /* BSET */ { CPUFUNC(op_01e0_11), 480 }, /* BSET */ { CPUFUNC(op_01e8_11), 488 }, /* BSET */ { CPUFUNC(op_01f0_11), 496 }, /* BSET */ { CPUFUNC(op_01f8_11), 504 }, /* BSET */ { CPUFUNC(op_01f9_11), 505 }, /* BSET */ { CPUFUNC(op_01fa_11), 506 }, /* BSET */ { CPUFUNC(op_01fb_11), 507 }, /* BSET */ { CPUFUNC(op_0200_11), 512 }, /* AND */ { CPUFUNC(op_0210_11), 528 }, /* AND */ { CPUFUNC(op_0218_11), 536 }, /* AND */ { CPUFUNC(op_0220_11), 544 }, /* AND */ { CPUFUNC(op_0228_11), 552 }, /* AND */ { CPUFUNC(op_0230_11), 560 }, /* AND */ { CPUFUNC(op_0238_11), 568 }, /* AND */ { CPUFUNC(op_0239_11), 569 }, /* AND */ { CPUFUNC(op_023c_11), 572 }, /* ANDSR */ { CPUFUNC(op_0240_11), 576 }, /* AND */ { CPUFUNC(op_0250_11), 592 }, /* AND */ { CPUFUNC(op_0258_11), 600 }, /* AND */ { CPUFUNC(op_0260_11), 608 }, /* AND */ { CPUFUNC(op_0268_11), 616 }, /* AND */ { CPUFUNC(op_0270_11), 624 }, /* AND */ { CPUFUNC(op_0278_11), 632 }, /* AND */ { CPUFUNC(op_0279_11), 633 }, /* AND */ { CPUFUNC(op_027c_11), 636 }, /* ANDSR */ { CPUFUNC(op_0280_11), 640 }, /* AND */ { CPUFUNC(op_0290_11), 656 }, /* AND */ { CPUFUNC(op_0298_11), 664 }, /* AND */ { CPUFUNC(op_02a0_11), 672 }, /* AND */ { CPUFUNC(op_02a8_11), 680 }, /* AND */ { CPUFUNC(op_02b0_11), 688 }, /* AND */ { CPUFUNC(op_02b8_11), 696 }, /* AND */ { CPUFUNC(op_02b9_11), 697 }, /* AND */ { CPUFUNC(op_0400_11), 1024 }, /* SUB */ { CPUFUNC(op_0410_11), 1040 }, /* SUB */ { CPUFUNC(op_0418_11), 1048 }, /* SUB */ { CPUFUNC(op_0420_11), 1056 }, /* SUB */ { CPUFUNC(op_0428_11), 1064 }, /* SUB */ { CPUFUNC(op_0430_11), 1072 }, /* SUB */ { CPUFUNC(op_0438_11), 1080 }, /* SUB */ { CPUFUNC(op_0439_11), 1081 }, /* SUB */ { CPUFUNC(op_0440_11), 1088 }, /* SUB */ { CPUFUNC(op_0450_11), 1104 }, /* SUB */ { CPUFUNC(op_0458_11), 1112 }, /* SUB */ { CPUFUNC(op_0460_11), 1120 }, /* SUB */ { CPUFUNC(op_0468_11), 1128 }, /* SUB */ { CPUFUNC(op_0470_11), 1136 }, /* SUB */ { CPUFUNC(op_0478_11), 1144 }, /* SUB */ { CPUFUNC(op_0479_11), 1145 }, /* SUB */ { CPUFUNC(op_0480_11), 1152 }, /* SUB */ { CPUFUNC(op_0490_11), 1168 }, /* SUB */ { CPUFUNC(op_0498_11), 1176 }, /* SUB */ { CPUFUNC(op_04a0_11), 1184 }, /* SUB */ { CPUFUNC(op_04a8_11), 1192 }, /* SUB */ { CPUFUNC(op_04b0_11), 1200 }, /* SUB */ { CPUFUNC(op_04b8_11), 1208 }, /* SUB */ { CPUFUNC(op_04b9_11), 1209 }, /* SUB */ { CPUFUNC(op_0600_11), 1536 }, /* ADD */ { CPUFUNC(op_0610_11), 1552 }, /* ADD */ { CPUFUNC(op_0618_11), 1560 }, /* ADD */ { CPUFUNC(op_0620_11), 1568 }, /* ADD */ { CPUFUNC(op_0628_11), 1576 }, /* ADD */ { CPUFUNC(op_0630_11), 1584 }, /* ADD */ { CPUFUNC(op_0638_11), 1592 }, /* ADD */ { CPUFUNC(op_0639_11), 1593 }, /* ADD */ { CPUFUNC(op_0640_11), 1600 }, /* ADD */ { CPUFUNC(op_0650_11), 1616 }, /* ADD */ { CPUFUNC(op_0658_11), 1624 }, /* ADD */ { CPUFUNC(op_0660_11), 1632 }, /* ADD */ { CPUFUNC(op_0668_11), 1640 }, /* ADD */ { CPUFUNC(op_0670_11), 1648 }, /* ADD */ { CPUFUNC(op_0678_11), 1656 }, /* ADD */ { CPUFUNC(op_0679_11), 1657 }, /* ADD */ { CPUFUNC(op_0680_11), 1664 }, /* ADD */ { CPUFUNC(op_0690_11), 1680 }, /* ADD */ { CPUFUNC(op_0698_11), 1688 }, /* ADD */ { CPUFUNC(op_06a0_11), 1696 }, /* ADD */ { CPUFUNC(op_06a8_11), 1704 }, /* ADD */ { CPUFUNC(op_06b0_11), 1712 }, /* ADD */ { CPUFUNC(op_06b8_11), 1720 }, /* ADD */ { CPUFUNC(op_06b9_11), 1721 }, /* ADD */ { CPUFUNC(op_0800_11), 2048 }, /* BTST */ { CPUFUNC(op_0810_11), 2064 }, /* BTST */ { CPUFUNC(op_0818_11), 2072 }, /* BTST */ { CPUFUNC(op_0820_11), 2080 }, /* BTST */ { CPUFUNC(op_0828_11), 2088 }, /* BTST */ { CPUFUNC(op_0830_11), 2096 }, /* BTST */ { CPUFUNC(op_0838_11), 2104 }, /* BTST */ { CPUFUNC(op_0839_11), 2105 }, /* BTST */ { CPUFUNC(op_083a_11), 2106 }, /* BTST */ { CPUFUNC(op_083b_11), 2107 }, /* BTST */ { CPUFUNC(op_083c_11), 2108 }, /* BTST */ { CPUFUNC(op_0840_11), 2112 }, /* BCHG */ { CPUFUNC(op_0850_11), 2128 }, /* BCHG */ { CPUFUNC(op_0858_11), 2136 }, /* BCHG */ { CPUFUNC(op_0860_11), 2144 }, /* BCHG */ { CPUFUNC(op_0868_11), 2152 }, /* BCHG */ { CPUFUNC(op_0870_11), 2160 }, /* BCHG */ { CPUFUNC(op_0878_11), 2168 }, /* BCHG */ { CPUFUNC(op_0879_11), 2169 }, /* BCHG */ { CPUFUNC(op_087a_11), 2170 }, /* BCHG */ { CPUFUNC(op_087b_11), 2171 }, /* BCHG */ { CPUFUNC(op_0880_11), 2176 }, /* BCLR */ { CPUFUNC(op_0890_11), 2192 }, /* BCLR */ { CPUFUNC(op_0898_11), 2200 }, /* BCLR */ { CPUFUNC(op_08a0_11), 2208 }, /* BCLR */ { CPUFUNC(op_08a8_11), 2216 }, /* BCLR */ { CPUFUNC(op_08b0_11), 2224 }, /* BCLR */ { CPUFUNC(op_08b8_11), 2232 }, /* BCLR */ { CPUFUNC(op_08b9_11), 2233 }, /* BCLR */ { CPUFUNC(op_08ba_11), 2234 }, /* BCLR */ { CPUFUNC(op_08bb_11), 2235 }, /* BCLR */ { CPUFUNC(op_08c0_11), 2240 }, /* BSET */ { CPUFUNC(op_08d0_11), 2256 }, /* BSET */ { CPUFUNC(op_08d8_11), 2264 }, /* BSET */ { CPUFUNC(op_08e0_11), 2272 }, /* BSET */ { CPUFUNC(op_08e8_11), 2280 }, /* BSET */ { CPUFUNC(op_08f0_11), 2288 }, /* BSET */ { CPUFUNC(op_08f8_11), 2296 }, /* BSET */ { CPUFUNC(op_08f9_11), 2297 }, /* BSET */ { CPUFUNC(op_08fa_11), 2298 }, /* BSET */ { CPUFUNC(op_08fb_11), 2299 }, /* BSET */ { CPUFUNC(op_0a00_11), 2560 }, /* EOR */ { CPUFUNC(op_0a10_11), 2576 }, /* EOR */ { CPUFUNC(op_0a18_11), 2584 }, /* EOR */ { CPUFUNC(op_0a20_11), 2592 }, /* EOR */ { CPUFUNC(op_0a28_11), 2600 }, /* EOR */ { CPUFUNC(op_0a30_11), 2608 }, /* EOR */ { CPUFUNC(op_0a38_11), 2616 }, /* EOR */ { CPUFUNC(op_0a39_11), 2617 }, /* EOR */ { CPUFUNC(op_0a3c_11), 2620 }, /* EORSR */ { CPUFUNC(op_0a40_11), 2624 }, /* EOR */ { CPUFUNC(op_0a50_11), 2640 }, /* EOR */ { CPUFUNC(op_0a58_11), 2648 }, /* EOR */ { CPUFUNC(op_0a60_11), 2656 }, /* EOR */ { CPUFUNC(op_0a68_11), 2664 }, /* EOR */ { CPUFUNC(op_0a70_11), 2672 }, /* EOR */ { CPUFUNC(op_0a78_11), 2680 }, /* EOR */ { CPUFUNC(op_0a79_11), 2681 }, /* EOR */ { CPUFUNC(op_0a7c_11), 2684 }, /* EORSR */ { CPUFUNC(op_0a80_11), 2688 }, /* EOR */ { CPUFUNC(op_0a90_11), 2704 }, /* EOR */ { CPUFUNC(op_0a98_11), 2712 }, /* EOR */ { CPUFUNC(op_0aa0_11), 2720 }, /* EOR */ { CPUFUNC(op_0aa8_11), 2728 }, /* EOR */ { CPUFUNC(op_0ab0_11), 2736 }, /* EOR */ { CPUFUNC(op_0ab8_11), 2744 }, /* EOR */ { CPUFUNC(op_0ab9_11), 2745 }, /* EOR */ { CPUFUNC(op_0c00_11), 3072 }, /* CMP */ { CPUFUNC(op_0c10_11), 3088 }, /* CMP */ { CPUFUNC(op_0c18_11), 3096 }, /* CMP */ { CPUFUNC(op_0c20_11), 3104 }, /* CMP */ { CPUFUNC(op_0c28_11), 3112 }, /* CMP */ { CPUFUNC(op_0c30_11), 3120 }, /* CMP */ { CPUFUNC(op_0c38_11), 3128 }, /* CMP */ { CPUFUNC(op_0c39_11), 3129 }, /* CMP */ { CPUFUNC(op_0c40_11), 3136 }, /* CMP */ { CPUFUNC(op_0c50_11), 3152 }, /* CMP */ { CPUFUNC(op_0c58_11), 3160 }, /* CMP */ { CPUFUNC(op_0c60_11), 3168 }, /* CMP */ { CPUFUNC(op_0c68_11), 3176 }, /* CMP */ { CPUFUNC(op_0c70_11), 3184 }, /* CMP */ { CPUFUNC(op_0c78_11), 3192 }, /* CMP */ { CPUFUNC(op_0c79_11), 3193 }, /* CMP */ { CPUFUNC(op_0c80_11), 3200 }, /* CMP */ { CPUFUNC(op_0c90_11), 3216 }, /* CMP */ { CPUFUNC(op_0c98_11), 3224 }, /* CMP */ { CPUFUNC(op_0ca0_11), 3232 }, /* CMP */ { CPUFUNC(op_0ca8_11), 3240 }, /* CMP */ { CPUFUNC(op_0cb0_11), 3248 }, /* CMP */ { CPUFUNC(op_0cb8_11), 3256 }, /* CMP */ { CPUFUNC(op_0cb9_11), 3257 }, /* CMP */ { CPUFUNC(op_1000_11), 4096 }, /* MOVE */ { CPUFUNC(op_1010_11), 4112 }, /* MOVE */ { CPUFUNC(op_1018_11), 4120 }, /* MOVE */ { CPUFUNC(op_1020_11), 4128 }, /* MOVE */ { CPUFUNC(op_1028_11), 4136 }, /* MOVE */ { CPUFUNC(op_1030_11), 4144 }, /* MOVE */ { CPUFUNC(op_1038_11), 4152 }, /* MOVE */ { CPUFUNC(op_1039_11), 4153 }, /* MOVE */ { CPUFUNC(op_103a_11), 4154 }, /* MOVE */ { CPUFUNC(op_103b_11), 4155 }, /* MOVE */ { CPUFUNC(op_103c_11), 4156 }, /* MOVE */ { CPUFUNC(op_1080_11), 4224 }, /* MOVE */ { CPUFUNC(op_1090_11), 4240 }, /* MOVE */ { CPUFUNC(op_1098_11), 4248 }, /* MOVE */ { CPUFUNC(op_10a0_11), 4256 }, /* MOVE */ { CPUFUNC(op_10a8_11), 4264 }, /* MOVE */ { CPUFUNC(op_10b0_11), 4272 }, /* MOVE */ { CPUFUNC(op_10b8_11), 4280 }, /* MOVE */ { CPUFUNC(op_10b9_11), 4281 }, /* MOVE */ { CPUFUNC(op_10ba_11), 4282 }, /* MOVE */ { CPUFUNC(op_10bb_11), 4283 }, /* MOVE */ { CPUFUNC(op_10bc_11), 4284 }, /* MOVE */ { CPUFUNC(op_10c0_11), 4288 }, /* MOVE */ { CPUFUNC(op_10d0_11), 4304 }, /* MOVE */ { CPUFUNC(op_10d8_11), 4312 }, /* MOVE */ { CPUFUNC(op_10e0_11), 4320 }, /* MOVE */ { CPUFUNC(op_10e8_11), 4328 }, /* MOVE */ { CPUFUNC(op_10f0_11), 4336 }, /* MOVE */ { CPUFUNC(op_10f8_11), 4344 }, /* MOVE */ { CPUFUNC(op_10f9_11), 4345 }, /* MOVE */ { CPUFUNC(op_10fa_11), 4346 }, /* MOVE */ { CPUFUNC(op_10fb_11), 4347 }, /* MOVE */ { CPUFUNC(op_10fc_11), 4348 }, /* MOVE */ { CPUFUNC(op_1100_11), 4352 }, /* MOVE */ { CPUFUNC(op_1110_11), 4368 }, /* MOVE */ { CPUFUNC(op_1118_11), 4376 }, /* MOVE */ { CPUFUNC(op_1120_11), 4384 }, /* MOVE */ { CPUFUNC(op_1128_11), 4392 }, /* MOVE */ { CPUFUNC(op_1130_11), 4400 }, /* MOVE */ { CPUFUNC(op_1138_11), 4408 }, /* MOVE */ { CPUFUNC(op_1139_11), 4409 }, /* MOVE */ { CPUFUNC(op_113a_11), 4410 }, /* MOVE */ { CPUFUNC(op_113b_11), 4411 }, /* MOVE */ { CPUFUNC(op_113c_11), 4412 }, /* MOVE */ { CPUFUNC(op_1140_11), 4416 }, /* MOVE */ { CPUFUNC(op_1150_11), 4432 }, /* MOVE */ { CPUFUNC(op_1158_11), 4440 }, /* MOVE */ { CPUFUNC(op_1160_11), 4448 }, /* MOVE */ { CPUFUNC(op_1168_11), 4456 }, /* MOVE */ { CPUFUNC(op_1170_11), 4464 }, /* MOVE */ { CPUFUNC(op_1178_11), 4472 }, /* MOVE */ { CPUFUNC(op_1179_11), 4473 }, /* MOVE */ { CPUFUNC(op_117a_11), 4474 }, /* MOVE */ { CPUFUNC(op_117b_11), 4475 }, /* MOVE */ { CPUFUNC(op_117c_11), 4476 }, /* MOVE */ { CPUFUNC(op_1180_11), 4480 }, /* MOVE */ { CPUFUNC(op_1190_11), 4496 }, /* MOVE */ { CPUFUNC(op_1198_11), 4504 }, /* MOVE */ { CPUFUNC(op_11a0_11), 4512 }, /* MOVE */ { CPUFUNC(op_11a8_11), 4520 }, /* MOVE */ { CPUFUNC(op_11b0_11), 4528 }, /* MOVE */ { CPUFUNC(op_11b8_11), 4536 }, /* MOVE */ { CPUFUNC(op_11b9_11), 4537 }, /* MOVE */ { CPUFUNC(op_11ba_11), 4538 }, /* MOVE */ { CPUFUNC(op_11bb_11), 4539 }, /* MOVE */ { CPUFUNC(op_11bc_11), 4540 }, /* MOVE */ { CPUFUNC(op_11c0_11), 4544 }, /* MOVE */ { CPUFUNC(op_11d0_11), 4560 }, /* MOVE */ { CPUFUNC(op_11d8_11), 4568 }, /* MOVE */ { CPUFUNC(op_11e0_11), 4576 }, /* MOVE */ { CPUFUNC(op_11e8_11), 4584 }, /* MOVE */ { CPUFUNC(op_11f0_11), 4592 }, /* MOVE */ { CPUFUNC(op_11f8_11), 4600 }, /* MOVE */ { CPUFUNC(op_11f9_11), 4601 }, /* MOVE */ { CPUFUNC(op_11fa_11), 4602 }, /* MOVE */ { CPUFUNC(op_11fb_11), 4603 }, /* MOVE */ { CPUFUNC(op_11fc_11), 4604 }, /* MOVE */ { CPUFUNC(op_13c0_11), 5056 }, /* MOVE */ { CPUFUNC(op_13d0_11), 5072 }, /* MOVE */ { CPUFUNC(op_13d8_11), 5080 }, /* MOVE */ { CPUFUNC(op_13e0_11), 5088 }, /* MOVE */ { CPUFUNC(op_13e8_11), 5096 }, /* MOVE */ { CPUFUNC(op_13f0_11), 5104 }, /* MOVE */ { CPUFUNC(op_13f8_11), 5112 }, /* MOVE */ { CPUFUNC(op_13f9_11), 5113 }, /* MOVE */ { CPUFUNC(op_13fa_11), 5114 }, /* MOVE */ { CPUFUNC(op_13fb_11), 5115 }, /* MOVE */ { CPUFUNC(op_13fc_11), 5116 }, /* MOVE */ { CPUFUNC(op_2000_11), 8192 }, /* MOVE */ { CPUFUNC(op_2008_11), 8200 }, /* MOVE */ { CPUFUNC(op_2010_11), 8208 }, /* MOVE */ { CPUFUNC(op_2018_11), 8216 }, /* MOVE */ { CPUFUNC(op_2020_11), 8224 }, /* MOVE */ { CPUFUNC(op_2028_11), 8232 }, /* MOVE */ { CPUFUNC(op_2030_11), 8240 }, /* MOVE */ { CPUFUNC(op_2038_11), 8248 }, /* MOVE */ { CPUFUNC(op_2039_11), 8249 }, /* MOVE */ { CPUFUNC(op_203a_11), 8250 }, /* MOVE */ { CPUFUNC(op_203b_11), 8251 }, /* MOVE */ { CPUFUNC(op_203c_11), 8252 }, /* MOVE */ { CPUFUNC(op_2040_11), 8256 }, /* MOVEA */ { CPUFUNC(op_2048_11), 8264 }, /* MOVEA */ { CPUFUNC(op_2050_11), 8272 }, /* MOVEA */ { CPUFUNC(op_2058_11), 8280 }, /* MOVEA */ { CPUFUNC(op_2060_11), 8288 }, /* MOVEA */ { CPUFUNC(op_2068_11), 8296 }, /* MOVEA */ { CPUFUNC(op_2070_11), 8304 }, /* MOVEA */ { CPUFUNC(op_2078_11), 8312 }, /* MOVEA */ { CPUFUNC(op_2079_11), 8313 }, /* MOVEA */ { CPUFUNC(op_207a_11), 8314 }, /* MOVEA */ { CPUFUNC(op_207b_11), 8315 }, /* MOVEA */ { CPUFUNC(op_207c_11), 8316 }, /* MOVEA */ { CPUFUNC(op_2080_11), 8320 }, /* MOVE */ { CPUFUNC(op_2088_11), 8328 }, /* MOVE */ { CPUFUNC(op_2090_11), 8336 }, /* MOVE */ { CPUFUNC(op_2098_11), 8344 }, /* MOVE */ { CPUFUNC(op_20a0_11), 8352 }, /* MOVE */ { CPUFUNC(op_20a8_11), 8360 }, /* MOVE */ { CPUFUNC(op_20b0_11), 8368 }, /* MOVE */ { CPUFUNC(op_20b8_11), 8376 }, /* MOVE */ { CPUFUNC(op_20b9_11), 8377 }, /* MOVE */ { CPUFUNC(op_20ba_11), 8378 }, /* MOVE */ { CPUFUNC(op_20bb_11), 8379 }, /* MOVE */ { CPUFUNC(op_20bc_11), 8380 }, /* MOVE */ { CPUFUNC(op_20c0_11), 8384 }, /* MOVE */ { CPUFUNC(op_20c8_11), 8392 }, /* MOVE */ { CPUFUNC(op_20d0_11), 8400 }, /* MOVE */ { CPUFUNC(op_20d8_11), 8408 }, /* MOVE */ { CPUFUNC(op_20e0_11), 8416 }, /* MOVE */ { CPUFUNC(op_20e8_11), 8424 }, /* MOVE */ { CPUFUNC(op_20f0_11), 8432 }, /* MOVE */ { CPUFUNC(op_20f8_11), 8440 }, /* MOVE */ { CPUFUNC(op_20f9_11), 8441 }, /* MOVE */ { CPUFUNC(op_20fa_11), 8442 }, /* MOVE */ { CPUFUNC(op_20fb_11), 8443 }, /* MOVE */ { CPUFUNC(op_20fc_11), 8444 }, /* MOVE */ { CPUFUNC(op_2100_11), 8448 }, /* MOVE */ { CPUFUNC(op_2108_11), 8456 }, /* MOVE */ { CPUFUNC(op_2110_11), 8464 }, /* MOVE */ { CPUFUNC(op_2118_11), 8472 }, /* MOVE */ { CPUFUNC(op_2120_11), 8480 }, /* MOVE */ { CPUFUNC(op_2128_11), 8488 }, /* MOVE */ { CPUFUNC(op_2130_11), 8496 }, /* MOVE */ { CPUFUNC(op_2138_11), 8504 }, /* MOVE */ { CPUFUNC(op_2139_11), 8505 }, /* MOVE */ { CPUFUNC(op_213a_11), 8506 }, /* MOVE */ { CPUFUNC(op_213b_11), 8507 }, /* MOVE */ { CPUFUNC(op_213c_11), 8508 }, /* MOVE */ { CPUFUNC(op_2140_11), 8512 }, /* MOVE */ { CPUFUNC(op_2148_11), 8520 }, /* MOVE */ { CPUFUNC(op_2150_11), 8528 }, /* MOVE */ { CPUFUNC(op_2158_11), 8536 }, /* MOVE */ { CPUFUNC(op_2160_11), 8544 }, /* MOVE */ { CPUFUNC(op_2168_11), 8552 }, /* MOVE */ { CPUFUNC(op_2170_11), 8560 }, /* MOVE */ { CPUFUNC(op_2178_11), 8568 }, /* MOVE */ { CPUFUNC(op_2179_11), 8569 }, /* MOVE */ { CPUFUNC(op_217a_11), 8570 }, /* MOVE */ { CPUFUNC(op_217b_11), 8571 }, /* MOVE */ { CPUFUNC(op_217c_11), 8572 }, /* MOVE */ { CPUFUNC(op_2180_11), 8576 }, /* MOVE */ { CPUFUNC(op_2188_11), 8584 }, /* MOVE */ { CPUFUNC(op_2190_11), 8592 }, /* MOVE */ { CPUFUNC(op_2198_11), 8600 }, /* MOVE */ { CPUFUNC(op_21a0_11), 8608 }, /* MOVE */ { CPUFUNC(op_21a8_11), 8616 }, /* MOVE */ { CPUFUNC(op_21b0_11), 8624 }, /* MOVE */ { CPUFUNC(op_21b8_11), 8632 }, /* MOVE */ { CPUFUNC(op_21b9_11), 8633 }, /* MOVE */ { CPUFUNC(op_21ba_11), 8634 }, /* MOVE */ { CPUFUNC(op_21bb_11), 8635 }, /* MOVE */ { CPUFUNC(op_21bc_11), 8636 }, /* MOVE */ { CPUFUNC(op_21c0_11), 8640 }, /* MOVE */ { CPUFUNC(op_21c8_11), 8648 }, /* MOVE */ { CPUFUNC(op_21d0_11), 8656 }, /* MOVE */ { CPUFUNC(op_21d8_11), 8664 }, /* MOVE */ { CPUFUNC(op_21e0_11), 8672 }, /* MOVE */ { CPUFUNC(op_21e8_11), 8680 }, /* MOVE */ { CPUFUNC(op_21f0_11), 8688 }, /* MOVE */ { CPUFUNC(op_21f8_11), 8696 }, /* MOVE */ { CPUFUNC(op_21f9_11), 8697 }, /* MOVE */ { CPUFUNC(op_21fa_11), 8698 }, /* MOVE */ { CPUFUNC(op_21fb_11), 8699 }, /* MOVE */ { CPUFUNC(op_21fc_11), 8700 }, /* MOVE */ { CPUFUNC(op_23c0_11), 9152 }, /* MOVE */ { CPUFUNC(op_23c8_11), 9160 }, /* MOVE */ { CPUFUNC(op_23d0_11), 9168 }, /* MOVE */ { CPUFUNC(op_23d8_11), 9176 }, /* MOVE */ { CPUFUNC(op_23e0_11), 9184 }, /* MOVE */ { CPUFUNC(op_23e8_11), 9192 }, /* MOVE */ { CPUFUNC(op_23f0_11), 9200 }, /* MOVE */ { CPUFUNC(op_23f8_11), 9208 }, /* MOVE */ { CPUFUNC(op_23f9_11), 9209 }, /* MOVE */ { CPUFUNC(op_23fa_11), 9210 }, /* MOVE */ { CPUFUNC(op_23fb_11), 9211 }, /* MOVE */ { CPUFUNC(op_23fc_11), 9212 }, /* MOVE */ { CPUFUNC(op_3000_11), 12288 }, /* MOVE */ { CPUFUNC(op_3008_11), 12296 }, /* MOVE */ { CPUFUNC(op_3010_11), 12304 }, /* MOVE */ { CPUFUNC(op_3018_11), 12312 }, /* MOVE */ { CPUFUNC(op_3020_11), 12320 }, /* MOVE */ { CPUFUNC(op_3028_11), 12328 }, /* MOVE */ { CPUFUNC(op_3030_11), 12336 }, /* MOVE */ { CPUFUNC(op_3038_11), 12344 }, /* MOVE */ { CPUFUNC(op_3039_11), 12345 }, /* MOVE */ { CPUFUNC(op_303a_11), 12346 }, /* MOVE */ { CPUFUNC(op_303b_11), 12347 }, /* MOVE */ { CPUFUNC(op_303c_11), 12348 }, /* MOVE */ { CPUFUNC(op_3040_11), 12352 }, /* MOVEA */ { CPUFUNC(op_3048_11), 12360 }, /* MOVEA */ { CPUFUNC(op_3050_11), 12368 }, /* MOVEA */ { CPUFUNC(op_3058_11), 12376 }, /* MOVEA */ { CPUFUNC(op_3060_11), 12384 }, /* MOVEA */ { CPUFUNC(op_3068_11), 12392 }, /* MOVEA */ { CPUFUNC(op_3070_11), 12400 }, /* MOVEA */ { CPUFUNC(op_3078_11), 12408 }, /* MOVEA */ { CPUFUNC(op_3079_11), 12409 }, /* MOVEA */ { CPUFUNC(op_307a_11), 12410 }, /* MOVEA */ { CPUFUNC(op_307b_11), 12411 }, /* MOVEA */ { CPUFUNC(op_307c_11), 12412 }, /* MOVEA */ { CPUFUNC(op_3080_11), 12416 }, /* MOVE */ { CPUFUNC(op_3088_11), 12424 }, /* MOVE */ { CPUFUNC(op_3090_11), 12432 }, /* MOVE */ { CPUFUNC(op_3098_11), 12440 }, /* MOVE */ { CPUFUNC(op_30a0_11), 12448 }, /* MOVE */ { CPUFUNC(op_30a8_11), 12456 }, /* MOVE */ { CPUFUNC(op_30b0_11), 12464 }, /* MOVE */ { CPUFUNC(op_30b8_11), 12472 }, /* MOVE */ { CPUFUNC(op_30b9_11), 12473 }, /* MOVE */ { CPUFUNC(op_30ba_11), 12474 }, /* MOVE */ { CPUFUNC(op_30bb_11), 12475 }, /* MOVE */ { CPUFUNC(op_30bc_11), 12476 }, /* MOVE */ { CPUFUNC(op_30c0_11), 12480 }, /* MOVE */ { CPUFUNC(op_30c8_11), 12488 }, /* MOVE */ { CPUFUNC(op_30d0_11), 12496 }, /* MOVE */ { CPUFUNC(op_30d8_11), 12504 }, /* MOVE */ { CPUFUNC(op_30e0_11), 12512 }, /* MOVE */ { CPUFUNC(op_30e8_11), 12520 }, /* MOVE */ { CPUFUNC(op_30f0_11), 12528 }, /* MOVE */ { CPUFUNC(op_30f8_11), 12536 }, /* MOVE */ { CPUFUNC(op_30f9_11), 12537 }, /* MOVE */ { CPUFUNC(op_30fa_11), 12538 }, /* MOVE */ { CPUFUNC(op_30fb_11), 12539 }, /* MOVE */ { CPUFUNC(op_30fc_11), 12540 }, /* MOVE */ { CPUFUNC(op_3100_11), 12544 }, /* MOVE */ { CPUFUNC(op_3108_11), 12552 }, /* MOVE */ { CPUFUNC(op_3110_11), 12560 }, /* MOVE */ { CPUFUNC(op_3118_11), 12568 }, /* MOVE */ { CPUFUNC(op_3120_11), 12576 }, /* MOVE */ { CPUFUNC(op_3128_11), 12584 }, /* MOVE */ { CPUFUNC(op_3130_11), 12592 }, /* MOVE */ { CPUFUNC(op_3138_11), 12600 }, /* MOVE */ { CPUFUNC(op_3139_11), 12601 }, /* MOVE */ { CPUFUNC(op_313a_11), 12602 }, /* MOVE */ { CPUFUNC(op_313b_11), 12603 }, /* MOVE */ { CPUFUNC(op_313c_11), 12604 }, /* MOVE */ { CPUFUNC(op_3140_11), 12608 }, /* MOVE */ { CPUFUNC(op_3148_11), 12616 }, /* MOVE */ { CPUFUNC(op_3150_11), 12624 }, /* MOVE */ { CPUFUNC(op_3158_11), 12632 }, /* MOVE */ { CPUFUNC(op_3160_11), 12640 }, /* MOVE */ { CPUFUNC(op_3168_11), 12648 }, /* MOVE */ { CPUFUNC(op_3170_11), 12656 }, /* MOVE */ { CPUFUNC(op_3178_11), 12664 }, /* MOVE */ { CPUFUNC(op_3179_11), 12665 }, /* MOVE */ { CPUFUNC(op_317a_11), 12666 }, /* MOVE */ { CPUFUNC(op_317b_11), 12667 }, /* MOVE */ { CPUFUNC(op_317c_11), 12668 }, /* MOVE */ { CPUFUNC(op_3180_11), 12672 }, /* MOVE */ { CPUFUNC(op_3188_11), 12680 }, /* MOVE */ { CPUFUNC(op_3190_11), 12688 }, /* MOVE */ { CPUFUNC(op_3198_11), 12696 }, /* MOVE */ { CPUFUNC(op_31a0_11), 12704 }, /* MOVE */ { CPUFUNC(op_31a8_11), 12712 }, /* MOVE */ { CPUFUNC(op_31b0_11), 12720 }, /* MOVE */ { CPUFUNC(op_31b8_11), 12728 }, /* MOVE */ { CPUFUNC(op_31b9_11), 12729 }, /* MOVE */ { CPUFUNC(op_31ba_11), 12730 }, /* MOVE */ { CPUFUNC(op_31bb_11), 12731 }, /* MOVE */ { CPUFUNC(op_31bc_11), 12732 }, /* MOVE */ { CPUFUNC(op_31c0_11), 12736 }, /* MOVE */ { CPUFUNC(op_31c8_11), 12744 }, /* MOVE */ { CPUFUNC(op_31d0_11), 12752 }, /* MOVE */ { CPUFUNC(op_31d8_11), 12760 }, /* MOVE */ { CPUFUNC(op_31e0_11), 12768 }, /* MOVE */ { CPUFUNC(op_31e8_11), 12776 }, /* MOVE */ { CPUFUNC(op_31f0_11), 12784 }, /* MOVE */ { CPUFUNC(op_31f8_11), 12792 }, /* MOVE */ { CPUFUNC(op_31f9_11), 12793 }, /* MOVE */ { CPUFUNC(op_31fa_11), 12794 }, /* MOVE */ { CPUFUNC(op_31fb_11), 12795 }, /* MOVE */ { CPUFUNC(op_31fc_11), 12796 }, /* MOVE */ { CPUFUNC(op_33c0_11), 13248 }, /* MOVE */ { CPUFUNC(op_33c8_11), 13256 }, /* MOVE */ { CPUFUNC(op_33d0_11), 13264 }, /* MOVE */ { CPUFUNC(op_33d8_11), 13272 }, /* MOVE */ { CPUFUNC(op_33e0_11), 13280 }, /* MOVE */ { CPUFUNC(op_33e8_11), 13288 }, /* MOVE */ { CPUFUNC(op_33f0_11), 13296 }, /* MOVE */ { CPUFUNC(op_33f8_11), 13304 }, /* MOVE */ { CPUFUNC(op_33f9_11), 13305 }, /* MOVE */ { CPUFUNC(op_33fa_11), 13306 }, /* MOVE */ { CPUFUNC(op_33fb_11), 13307 }, /* MOVE */ { CPUFUNC(op_33fc_11), 13308 }, /* MOVE */ { CPUFUNC(op_4000_11), 16384 }, /* NEGX */ { CPUFUNC(op_4010_11), 16400 }, /* NEGX */ { CPUFUNC(op_4018_11), 16408 }, /* NEGX */ { CPUFUNC(op_4020_11), 16416 }, /* NEGX */ { CPUFUNC(op_4028_11), 16424 }, /* NEGX */ { CPUFUNC(op_4030_11), 16432 }, /* NEGX */ { CPUFUNC(op_4038_11), 16440 }, /* NEGX */ { CPUFUNC(op_4039_11), 16441 }, /* NEGX */ { CPUFUNC(op_4040_11), 16448 }, /* NEGX */ { CPUFUNC(op_4050_11), 16464 }, /* NEGX */ { CPUFUNC(op_4058_11), 16472 }, /* NEGX */ { CPUFUNC(op_4060_11), 16480 }, /* NEGX */ { CPUFUNC(op_4068_11), 16488 }, /* NEGX */ { CPUFUNC(op_4070_11), 16496 }, /* NEGX */ { CPUFUNC(op_4078_11), 16504 }, /* NEGX */ { CPUFUNC(op_4079_11), 16505 }, /* NEGX */ { CPUFUNC(op_4080_11), 16512 }, /* NEGX */ { CPUFUNC(op_4090_11), 16528 }, /* NEGX */ { CPUFUNC(op_4098_11), 16536 }, /* NEGX */ { CPUFUNC(op_40a0_11), 16544 }, /* NEGX */ { CPUFUNC(op_40a8_11), 16552 }, /* NEGX */ { CPUFUNC(op_40b0_11), 16560 }, /* NEGX */ { CPUFUNC(op_40b8_11), 16568 }, /* NEGX */ { CPUFUNC(op_40b9_11), 16569 }, /* NEGX */ { CPUFUNC(op_40c0_11), 16576 }, /* MVSR2 */ { CPUFUNC(op_40d0_11), 16592 }, /* MVSR2 */ { CPUFUNC(op_40d8_11), 16600 }, /* MVSR2 */ { CPUFUNC(op_40e0_11), 16608 }, /* MVSR2 */ { CPUFUNC(op_40e8_11), 16616 }, /* MVSR2 */ { CPUFUNC(op_40f0_11), 16624 }, /* MVSR2 */ { CPUFUNC(op_40f8_11), 16632 }, /* MVSR2 */ { CPUFUNC(op_40f9_11), 16633 }, /* MVSR2 */ { CPUFUNC(op_4180_11), 16768 }, /* CHK */ { CPUFUNC(op_4190_11), 16784 }, /* CHK */ { CPUFUNC(op_4198_11), 16792 }, /* CHK */ { CPUFUNC(op_41a0_11), 16800 }, /* CHK */ { CPUFUNC(op_41a8_11), 16808 }, /* CHK */ { CPUFUNC(op_41b0_11), 16816 }, /* CHK */ { CPUFUNC(op_41b8_11), 16824 }, /* CHK */ { CPUFUNC(op_41b9_11), 16825 }, /* CHK */ { CPUFUNC(op_41ba_11), 16826 }, /* CHK */ { CPUFUNC(op_41bb_11), 16827 }, /* CHK */ { CPUFUNC(op_41bc_11), 16828 }, /* CHK */ { CPUFUNC(op_41d0_11), 16848 }, /* LEA */ { CPUFUNC(op_41e8_11), 16872 }, /* LEA */ { CPUFUNC(op_41f0_11), 16880 }, /* LEA */ { CPUFUNC(op_41f8_11), 16888 }, /* LEA */ { CPUFUNC(op_41f9_11), 16889 }, /* LEA */ { CPUFUNC(op_41fa_11), 16890 }, /* LEA */ { CPUFUNC(op_41fb_11), 16891 }, /* LEA */ { CPUFUNC(op_4200_11), 16896 }, /* CLR */ { CPUFUNC(op_4210_11), 16912 }, /* CLR */ { CPUFUNC(op_4218_11), 16920 }, /* CLR */ { CPUFUNC(op_4220_11), 16928 }, /* CLR */ { CPUFUNC(op_4228_11), 16936 }, /* CLR */ { CPUFUNC(op_4230_11), 16944 }, /* CLR */ { CPUFUNC(op_4238_11), 16952 }, /* CLR */ { CPUFUNC(op_4239_11), 16953 }, /* CLR */ { CPUFUNC(op_4240_11), 16960 }, /* CLR */ { CPUFUNC(op_4250_11), 16976 }, /* CLR */ { CPUFUNC(op_4258_11), 16984 }, /* CLR */ { CPUFUNC(op_4260_11), 16992 }, /* CLR */ { CPUFUNC(op_4268_11), 17000 }, /* CLR */ { CPUFUNC(op_4270_11), 17008 }, /* CLR */ { CPUFUNC(op_4278_11), 17016 }, /* CLR */ { CPUFUNC(op_4279_11), 17017 }, /* CLR */ { CPUFUNC(op_4280_11), 17024 }, /* CLR */ { CPUFUNC(op_4290_11), 17040 }, /* CLR */ { CPUFUNC(op_4298_11), 17048 }, /* CLR */ { CPUFUNC(op_42a0_11), 17056 }, /* CLR */ { CPUFUNC(op_42a8_11), 17064 }, /* CLR */ { CPUFUNC(op_42b0_11), 17072 }, /* CLR */ { CPUFUNC(op_42b8_11), 17080 }, /* CLR */ { CPUFUNC(op_42b9_11), 17081 }, /* CLR */ { CPUFUNC(op_4400_11), 17408 }, /* NEG */ { CPUFUNC(op_4410_11), 17424 }, /* NEG */ { CPUFUNC(op_4418_11), 17432 }, /* NEG */ { CPUFUNC(op_4420_11), 17440 }, /* NEG */ { CPUFUNC(op_4428_11), 17448 }, /* NEG */ { CPUFUNC(op_4430_11), 17456 }, /* NEG */ { CPUFUNC(op_4438_11), 17464 }, /* NEG */ { CPUFUNC(op_4439_11), 17465 }, /* NEG */ { CPUFUNC(op_4440_11), 17472 }, /* NEG */ { CPUFUNC(op_4450_11), 17488 }, /* NEG */ { CPUFUNC(op_4458_11), 17496 }, /* NEG */ { CPUFUNC(op_4460_11), 17504 }, /* NEG */ { CPUFUNC(op_4468_11), 17512 }, /* NEG */ { CPUFUNC(op_4470_11), 17520 }, /* NEG */ { CPUFUNC(op_4478_11), 17528 }, /* NEG */ { CPUFUNC(op_4479_11), 17529 }, /* NEG */ { CPUFUNC(op_4480_11), 17536 }, /* NEG */ { CPUFUNC(op_4490_11), 17552 }, /* NEG */ { CPUFUNC(op_4498_11), 17560 }, /* NEG */ { CPUFUNC(op_44a0_11), 17568 }, /* NEG */ { CPUFUNC(op_44a8_11), 17576 }, /* NEG */ { CPUFUNC(op_44b0_11), 17584 }, /* NEG */ { CPUFUNC(op_44b8_11), 17592 }, /* NEG */ { CPUFUNC(op_44b9_11), 17593 }, /* NEG */ { CPUFUNC(op_44c0_11), 17600 }, /* MV2SR */ { CPUFUNC(op_44d0_11), 17616 }, /* MV2SR */ { CPUFUNC(op_44d8_11), 17624 }, /* MV2SR */ { CPUFUNC(op_44e0_11), 17632 }, /* MV2SR */ { CPUFUNC(op_44e8_11), 17640 }, /* MV2SR */ { CPUFUNC(op_44f0_11), 17648 }, /* MV2SR */ { CPUFUNC(op_44f8_11), 17656 }, /* MV2SR */ { CPUFUNC(op_44f9_11), 17657 }, /* MV2SR */ { CPUFUNC(op_44fa_11), 17658 }, /* MV2SR */ { CPUFUNC(op_44fb_11), 17659 }, /* MV2SR */ { CPUFUNC(op_44fc_11), 17660 }, /* MV2SR */ { CPUFUNC(op_4600_11), 17920 }, /* NOT */ { CPUFUNC(op_4610_11), 17936 }, /* NOT */ { CPUFUNC(op_4618_11), 17944 }, /* NOT */ { CPUFUNC(op_4620_11), 17952 }, /* NOT */ { CPUFUNC(op_4628_11), 17960 }, /* NOT */ { CPUFUNC(op_4630_11), 17968 }, /* NOT */ { CPUFUNC(op_4638_11), 17976 }, /* NOT */ { CPUFUNC(op_4639_11), 17977 }, /* NOT */ { CPUFUNC(op_4640_11), 17984 }, /* NOT */ { CPUFUNC(op_4650_11), 18000 }, /* NOT */ { CPUFUNC(op_4658_11), 18008 }, /* NOT */ { CPUFUNC(op_4660_11), 18016 }, /* NOT */ { CPUFUNC(op_4668_11), 18024 }, /* NOT */ { CPUFUNC(op_4670_11), 18032 }, /* NOT */ { CPUFUNC(op_4678_11), 18040 }, /* NOT */ { CPUFUNC(op_4679_11), 18041 }, /* NOT */ { CPUFUNC(op_4680_11), 18048 }, /* NOT */ { CPUFUNC(op_4690_11), 18064 }, /* NOT */ { CPUFUNC(op_4698_11), 18072 }, /* NOT */ { CPUFUNC(op_46a0_11), 18080 }, /* NOT */ { CPUFUNC(op_46a8_11), 18088 }, /* NOT */ { CPUFUNC(op_46b0_11), 18096 }, /* NOT */ { CPUFUNC(op_46b8_11), 18104 }, /* NOT */ { CPUFUNC(op_46b9_11), 18105 }, /* NOT */ { CPUFUNC(op_46c0_11), 18112 }, /* MV2SR */ { CPUFUNC(op_46d0_11), 18128 }, /* MV2SR */ { CPUFUNC(op_46d8_11), 18136 }, /* MV2SR */ { CPUFUNC(op_46e0_11), 18144 }, /* MV2SR */ { CPUFUNC(op_46e8_11), 18152 }, /* MV2SR */ { CPUFUNC(op_46f0_11), 18160 }, /* MV2SR */ { CPUFUNC(op_46f8_11), 18168 }, /* MV2SR */ { CPUFUNC(op_46f9_11), 18169 }, /* MV2SR */ { CPUFUNC(op_46fa_11), 18170 }, /* MV2SR */ { CPUFUNC(op_46fb_11), 18171 }, /* MV2SR */ { CPUFUNC(op_46fc_11), 18172 }, /* MV2SR */ { CPUFUNC(op_4800_11), 18432 }, /* NBCD */ { CPUFUNC(op_4810_11), 18448 }, /* NBCD */ { CPUFUNC(op_4818_11), 18456 }, /* NBCD */ { CPUFUNC(op_4820_11), 18464 }, /* NBCD */ { CPUFUNC(op_4828_11), 18472 }, /* NBCD */ { CPUFUNC(op_4830_11), 18480 }, /* NBCD */ { CPUFUNC(op_4838_11), 18488 }, /* NBCD */ { CPUFUNC(op_4839_11), 18489 }, /* NBCD */ { CPUFUNC(op_4840_11), 18496 }, /* SWAP */ { CPUFUNC(op_4850_11), 18512 }, /* PEA */ { CPUFUNC(op_4868_11), 18536 }, /* PEA */ { CPUFUNC(op_4870_11), 18544 }, /* PEA */ { CPUFUNC(op_4878_11), 18552 }, /* PEA */ { CPUFUNC(op_4879_11), 18553 }, /* PEA */ { CPUFUNC(op_487a_11), 18554 }, /* PEA */ { CPUFUNC(op_487b_11), 18555 }, /* PEA */ { CPUFUNC(op_4880_11), 18560 }, /* EXT */ { CPUFUNC(op_4890_11), 18576 }, /* MVMLE */ { CPUFUNC(op_48a0_11), 18592 }, /* MVMLE */ { CPUFUNC(op_48a8_11), 18600 }, /* MVMLE */ { CPUFUNC(op_48b0_11), 18608 }, /* MVMLE */ { CPUFUNC(op_48b8_11), 18616 }, /* MVMLE */ { CPUFUNC(op_48b9_11), 18617 }, /* MVMLE */ { CPUFUNC(op_48c0_11), 18624 }, /* EXT */ { CPUFUNC(op_48d0_11), 18640 }, /* MVMLE */ { CPUFUNC(op_48e0_11), 18656 }, /* MVMLE */ { CPUFUNC(op_48e8_11), 18664 }, /* MVMLE */ { CPUFUNC(op_48f0_11), 18672 }, /* MVMLE */ { CPUFUNC(op_48f8_11), 18680 }, /* MVMLE */ { CPUFUNC(op_48f9_11), 18681 }, /* MVMLE */ { CPUFUNC(op_4a00_11), 18944 }, /* TST */ { CPUFUNC(op_4a10_11), 18960 }, /* TST */ { CPUFUNC(op_4a18_11), 18968 }, /* TST */ { CPUFUNC(op_4a20_11), 18976 }, /* TST */ { CPUFUNC(op_4a28_11), 18984 }, /* TST */ { CPUFUNC(op_4a30_11), 18992 }, /* TST */ { CPUFUNC(op_4a38_11), 19000 }, /* TST */ { CPUFUNC(op_4a39_11), 19001 }, /* TST */ { CPUFUNC(op_4a3c_11), 19004 }, /* TST */ { CPUFUNC(op_4a40_11), 19008 }, /* TST */ { CPUFUNC(op_4a50_11), 19024 }, /* TST */ { CPUFUNC(op_4a58_11), 19032 }, /* TST */ { CPUFUNC(op_4a60_11), 19040 }, /* TST */ { CPUFUNC(op_4a68_11), 19048 }, /* TST */ { CPUFUNC(op_4a70_11), 19056 }, /* TST */ { CPUFUNC(op_4a78_11), 19064 }, /* TST */ { CPUFUNC(op_4a79_11), 19065 }, /* TST */ { CPUFUNC(op_4a7c_11), 19068 }, /* TST */ { CPUFUNC(op_4a80_11), 19072 }, /* TST */ { CPUFUNC(op_4a90_11), 19088 }, /* TST */ { CPUFUNC(op_4a98_11), 19096 }, /* TST */ { CPUFUNC(op_4aa0_11), 19104 }, /* TST */ { CPUFUNC(op_4aa8_11), 19112 }, /* TST */ { CPUFUNC(op_4ab0_11), 19120 }, /* TST */ { CPUFUNC(op_4ab8_11), 19128 }, /* TST */ { CPUFUNC(op_4ab9_11), 19129 }, /* TST */ { CPUFUNC(op_4abc_11), 19132 }, /* TST */ { CPUFUNC(op_4ac0_11), 19136 }, /* TAS */ { CPUFUNC(op_4ad0_11), 19152 }, /* TAS */ { CPUFUNC(op_4ad8_11), 19160 }, /* TAS */ { CPUFUNC(op_4ae0_11), 19168 }, /* TAS */ { CPUFUNC(op_4ae8_11), 19176 }, /* TAS */ { CPUFUNC(op_4af0_11), 19184 }, /* TAS */ { CPUFUNC(op_4af8_11), 19192 }, /* TAS */ { CPUFUNC(op_4af9_11), 19193 }, /* TAS */ { CPUFUNC(op_4c90_11), 19600 }, /* MVMEL */ { CPUFUNC(op_4c98_11), 19608 }, /* MVMEL */ { CPUFUNC(op_4ca8_11), 19624 }, /* MVMEL */ { CPUFUNC(op_4cb0_11), 19632 }, /* MVMEL */ { CPUFUNC(op_4cb8_11), 19640 }, /* MVMEL */ { CPUFUNC(op_4cb9_11), 19641 }, /* MVMEL */ { CPUFUNC(op_4cba_11), 19642 }, /* MVMEL */ { CPUFUNC(op_4cbb_11), 19643 }, /* MVMEL */ { CPUFUNC(op_4cd0_11), 19664 }, /* MVMEL */ { CPUFUNC(op_4cd8_11), 19672 }, /* MVMEL */ { CPUFUNC(op_4ce8_11), 19688 }, /* MVMEL */ { CPUFUNC(op_4cf0_11), 19696 }, /* MVMEL */ { CPUFUNC(op_4cf8_11), 19704 }, /* MVMEL */ { CPUFUNC(op_4cf9_11), 19705 }, /* MVMEL */ { CPUFUNC(op_4cfa_11), 19706 }, /* MVMEL */ { CPUFUNC(op_4cfb_11), 19707 }, /* MVMEL */ { CPUFUNC(op_4e40_11), 20032 }, /* TRAP */ { CPUFUNC(op_4e50_11), 20048 }, /* LINK */ { CPUFUNC(op_4e58_11), 20056 }, /* UNLK */ { CPUFUNC(op_4e60_11), 20064 }, /* MVR2USP */ { CPUFUNC(op_4e68_11), 20072 }, /* MVUSP2R */ { CPUFUNC(op_4e70_11), 20080 }, /* RESET */ { CPUFUNC(op_4e71_11), 20081 }, /* NOP */ { CPUFUNC(op_4e72_11), 20082 }, /* STOP */ { CPUFUNC(op_4e73_11), 20083 }, /* RTE */ { CPUFUNC(op_4e74_11), 20084 }, /* RTD */ { CPUFUNC(op_4e75_11), 20085 }, /* RTS */ { CPUFUNC(op_4e76_11), 20086 }, /* TRAPV */ { CPUFUNC(op_4e77_11), 20087 }, /* RTR */ { CPUFUNC(op_4e90_11), 20112 }, /* JSR */ { CPUFUNC(op_4ea8_11), 20136 }, /* JSR */ { CPUFUNC(op_4eb0_11), 20144 }, /* JSR */ { CPUFUNC(op_4eb8_11), 20152 }, /* JSR */ { CPUFUNC(op_4eb9_11), 20153 }, /* JSR */ { CPUFUNC(op_4eba_11), 20154 }, /* JSR */ { CPUFUNC(op_4ebb_11), 20155 }, /* JSR */ { CPUFUNC(op_4ed0_11), 20176 }, /* JMP */ { CPUFUNC(op_4ee8_11), 20200 }, /* JMP */ { CPUFUNC(op_4ef0_11), 20208 }, /* JMP */ { CPUFUNC(op_4ef8_11), 20216 }, /* JMP */ { CPUFUNC(op_4ef9_11), 20217 }, /* JMP */ { CPUFUNC(op_4efa_11), 20218 }, /* JMP */ { CPUFUNC(op_4efb_11), 20219 }, /* JMP */ { CPUFUNC(op_5000_11), 20480 }, /* ADD */ { CPUFUNC(op_5010_11), 20496 }, /* ADD */ { CPUFUNC(op_5018_11), 20504 }, /* ADD */ { CPUFUNC(op_5020_11), 20512 }, /* ADD */ { CPUFUNC(op_5028_11), 20520 }, /* ADD */ { CPUFUNC(op_5030_11), 20528 }, /* ADD */ { CPUFUNC(op_5038_11), 20536 }, /* ADD */ { CPUFUNC(op_5039_11), 20537 }, /* ADD */ { CPUFUNC(op_5040_11), 20544 }, /* ADD */ { CPUFUNC(op_5048_11), 20552 }, /* ADDA */ { CPUFUNC(op_5050_11), 20560 }, /* ADD */ { CPUFUNC(op_5058_11), 20568 }, /* ADD */ { CPUFUNC(op_5060_11), 20576 }, /* ADD */ { CPUFUNC(op_5068_11), 20584 }, /* ADD */ { CPUFUNC(op_5070_11), 20592 }, /* ADD */ { CPUFUNC(op_5078_11), 20600 }, /* ADD */ { CPUFUNC(op_5079_11), 20601 }, /* ADD */ { CPUFUNC(op_5080_11), 20608 }, /* ADD */ { CPUFUNC(op_5088_11), 20616 }, /* ADDA */ { CPUFUNC(op_5090_11), 20624 }, /* ADD */ { CPUFUNC(op_5098_11), 20632 }, /* ADD */ { CPUFUNC(op_50a0_11), 20640 }, /* ADD */ { CPUFUNC(op_50a8_11), 20648 }, /* ADD */ { CPUFUNC(op_50b0_11), 20656 }, /* ADD */ { CPUFUNC(op_50b8_11), 20664 }, /* ADD */ { CPUFUNC(op_50b9_11), 20665 }, /* ADD */ { CPUFUNC(op_50c0_11), 20672 }, /* Scc */ { CPUFUNC(op_50c8_11), 20680 }, /* DBcc */ { CPUFUNC(op_50d0_11), 20688 }, /* Scc */ { CPUFUNC(op_50d8_11), 20696 }, /* Scc */ { CPUFUNC(op_50e0_11), 20704 }, /* Scc */ { CPUFUNC(op_50e8_11), 20712 }, /* Scc */ { CPUFUNC(op_50f0_11), 20720 }, /* Scc */ { CPUFUNC(op_50f8_11), 20728 }, /* Scc */ { CPUFUNC(op_50f9_11), 20729 }, /* Scc */ { CPUFUNC(op_5100_11), 20736 }, /* SUB */ { CPUFUNC(op_5110_11), 20752 }, /* SUB */ { CPUFUNC(op_5118_11), 20760 }, /* SUB */ { CPUFUNC(op_5120_11), 20768 }, /* SUB */ { CPUFUNC(op_5128_11), 20776 }, /* SUB */ { CPUFUNC(op_5130_11), 20784 }, /* SUB */ { CPUFUNC(op_5138_11), 20792 }, /* SUB */ { CPUFUNC(op_5139_11), 20793 }, /* SUB */ { CPUFUNC(op_5140_11), 20800 }, /* SUB */ { CPUFUNC(op_5148_11), 20808 }, /* SUBA */ { CPUFUNC(op_5150_11), 20816 }, /* SUB */ { CPUFUNC(op_5158_11), 20824 }, /* SUB */ { CPUFUNC(op_5160_11), 20832 }, /* SUB */ { CPUFUNC(op_5168_11), 20840 }, /* SUB */ { CPUFUNC(op_5170_11), 20848 }, /* SUB */ { CPUFUNC(op_5178_11), 20856 }, /* SUB */ { CPUFUNC(op_5179_11), 20857 }, /* SUB */ { CPUFUNC(op_5180_11), 20864 }, /* SUB */ { CPUFUNC(op_5188_11), 20872 }, /* SUBA */ { CPUFUNC(op_5190_11), 20880 }, /* SUB */ { CPUFUNC(op_5198_11), 20888 }, /* SUB */ { CPUFUNC(op_51a0_11), 20896 }, /* SUB */ { CPUFUNC(op_51a8_11), 20904 }, /* SUB */ { CPUFUNC(op_51b0_11), 20912 }, /* SUB */ { CPUFUNC(op_51b8_11), 20920 }, /* SUB */ { CPUFUNC(op_51b9_11), 20921 }, /* SUB */ { CPUFUNC(op_51c0_11), 20928 }, /* Scc */ { CPUFUNC(op_51c8_11), 20936 }, /* DBcc */ { CPUFUNC(op_51d0_11), 20944 }, /* Scc */ { CPUFUNC(op_51d8_11), 20952 }, /* Scc */ { CPUFUNC(op_51e0_11), 20960 }, /* Scc */ { CPUFUNC(op_51e8_11), 20968 }, /* Scc */ { CPUFUNC(op_51f0_11), 20976 }, /* Scc */ { CPUFUNC(op_51f8_11), 20984 }, /* Scc */ { CPUFUNC(op_51f9_11), 20985 }, /* Scc */ { CPUFUNC(op_52c0_11), 21184 }, /* Scc */ { CPUFUNC(op_52c8_11), 21192 }, /* DBcc */ { CPUFUNC(op_52d0_11), 21200 }, /* Scc */ { CPUFUNC(op_52d8_11), 21208 }, /* Scc */ { CPUFUNC(op_52e0_11), 21216 }, /* Scc */ { CPUFUNC(op_52e8_11), 21224 }, /* Scc */ { CPUFUNC(op_52f0_11), 21232 }, /* Scc */ { CPUFUNC(op_52f8_11), 21240 }, /* Scc */ { CPUFUNC(op_52f9_11), 21241 }, /* Scc */ { CPUFUNC(op_53c0_11), 21440 }, /* Scc */ { CPUFUNC(op_53c8_11), 21448 }, /* DBcc */ { CPUFUNC(op_53d0_11), 21456 }, /* Scc */ { CPUFUNC(op_53d8_11), 21464 }, /* Scc */ { CPUFUNC(op_53e0_11), 21472 }, /* Scc */ { CPUFUNC(op_53e8_11), 21480 }, /* Scc */ { CPUFUNC(op_53f0_11), 21488 }, /* Scc */ { CPUFUNC(op_53f8_11), 21496 }, /* Scc */ { CPUFUNC(op_53f9_11), 21497 }, /* Scc */ { CPUFUNC(op_54c0_11), 21696 }, /* Scc */ { CPUFUNC(op_54c8_11), 21704 }, /* DBcc */ { CPUFUNC(op_54d0_11), 21712 }, /* Scc */ { CPUFUNC(op_54d8_11), 21720 }, /* Scc */ { CPUFUNC(op_54e0_11), 21728 }, /* Scc */ { CPUFUNC(op_54e8_11), 21736 }, /* Scc */ { CPUFUNC(op_54f0_11), 21744 }, /* Scc */ { CPUFUNC(op_54f8_11), 21752 }, /* Scc */ { CPUFUNC(op_54f9_11), 21753 }, /* Scc */ { CPUFUNC(op_55c0_11), 21952 }, /* Scc */ { CPUFUNC(op_55c8_11), 21960 }, /* DBcc */ { CPUFUNC(op_55d0_11), 21968 }, /* Scc */ { CPUFUNC(op_55d8_11), 21976 }, /* Scc */ { CPUFUNC(op_55e0_11), 21984 }, /* Scc */ { CPUFUNC(op_55e8_11), 21992 }, /* Scc */ { CPUFUNC(op_55f0_11), 22000 }, /* Scc */ { CPUFUNC(op_55f8_11), 22008 }, /* Scc */ { CPUFUNC(op_55f9_11), 22009 }, /* Scc */ { CPUFUNC(op_56c0_11), 22208 }, /* Scc */ { CPUFUNC(op_56c8_11), 22216 }, /* DBcc */ { CPUFUNC(op_56d0_11), 22224 }, /* Scc */ { CPUFUNC(op_56d8_11), 22232 }, /* Scc */ { CPUFUNC(op_56e0_11), 22240 }, /* Scc */ { CPUFUNC(op_56e8_11), 22248 }, /* Scc */ { CPUFUNC(op_56f0_11), 22256 }, /* Scc */ { CPUFUNC(op_56f8_11), 22264 }, /* Scc */ { CPUFUNC(op_56f9_11), 22265 }, /* Scc */ { CPUFUNC(op_57c0_11), 22464 }, /* Scc */ { CPUFUNC(op_57c8_11), 22472 }, /* DBcc */ { CPUFUNC(op_57d0_11), 22480 }, /* Scc */ { CPUFUNC(op_57d8_11), 22488 }, /* Scc */ { CPUFUNC(op_57e0_11), 22496 }, /* Scc */ { CPUFUNC(op_57e8_11), 22504 }, /* Scc */ { CPUFUNC(op_57f0_11), 22512 }, /* Scc */ { CPUFUNC(op_57f8_11), 22520 }, /* Scc */ { CPUFUNC(op_57f9_11), 22521 }, /* Scc */ { CPUFUNC(op_58c0_11), 22720 }, /* Scc */ { CPUFUNC(op_58c8_11), 22728 }, /* DBcc */ { CPUFUNC(op_58d0_11), 22736 }, /* Scc */ { CPUFUNC(op_58d8_11), 22744 }, /* Scc */ { CPUFUNC(op_58e0_11), 22752 }, /* Scc */ { CPUFUNC(op_58e8_11), 22760 }, /* Scc */ { CPUFUNC(op_58f0_11), 22768 }, /* Scc */ { CPUFUNC(op_58f8_11), 22776 }, /* Scc */ { CPUFUNC(op_58f9_11), 22777 }, /* Scc */ { CPUFUNC(op_59c0_11), 22976 }, /* Scc */ { CPUFUNC(op_59c8_11), 22984 }, /* DBcc */ { CPUFUNC(op_59d0_11), 22992 }, /* Scc */ { CPUFUNC(op_59d8_11), 23000 }, /* Scc */ { CPUFUNC(op_59e0_11), 23008 }, /* Scc */ { CPUFUNC(op_59e8_11), 23016 }, /* Scc */ { CPUFUNC(op_59f0_11), 23024 }, /* Scc */ { CPUFUNC(op_59f8_11), 23032 }, /* Scc */ { CPUFUNC(op_59f9_11), 23033 }, /* Scc */ { CPUFUNC(op_5ac0_11), 23232 }, /* Scc */ { CPUFUNC(op_5ac8_11), 23240 }, /* DBcc */ { CPUFUNC(op_5ad0_11), 23248 }, /* Scc */ { CPUFUNC(op_5ad8_11), 23256 }, /* Scc */ { CPUFUNC(op_5ae0_11), 23264 }, /* Scc */ { CPUFUNC(op_5ae8_11), 23272 }, /* Scc */ { CPUFUNC(op_5af0_11), 23280 }, /* Scc */ { CPUFUNC(op_5af8_11), 23288 }, /* Scc */ { CPUFUNC(op_5af9_11), 23289 }, /* Scc */ { CPUFUNC(op_5bc0_11), 23488 }, /* Scc */ { CPUFUNC(op_5bc8_11), 23496 }, /* DBcc */ { CPUFUNC(op_5bd0_11), 23504 }, /* Scc */ { CPUFUNC(op_5bd8_11), 23512 }, /* Scc */ { CPUFUNC(op_5be0_11), 23520 }, /* Scc */ { CPUFUNC(op_5be8_11), 23528 }, /* Scc */ { CPUFUNC(op_5bf0_11), 23536 }, /* Scc */ { CPUFUNC(op_5bf8_11), 23544 }, /* Scc */ { CPUFUNC(op_5bf9_11), 23545 }, /* Scc */ { CPUFUNC(op_5cc0_11), 23744 }, /* Scc */ { CPUFUNC(op_5cc8_11), 23752 }, /* DBcc */ { CPUFUNC(op_5cd0_11), 23760 }, /* Scc */ { CPUFUNC(op_5cd8_11), 23768 }, /* Scc */ { CPUFUNC(op_5ce0_11), 23776 }, /* Scc */ { CPUFUNC(op_5ce8_11), 23784 }, /* Scc */ { CPUFUNC(op_5cf0_11), 23792 }, /* Scc */ { CPUFUNC(op_5cf8_11), 23800 }, /* Scc */ { CPUFUNC(op_5cf9_11), 23801 }, /* Scc */ { CPUFUNC(op_5dc0_11), 24000 }, /* Scc */ { CPUFUNC(op_5dc8_11), 24008 }, /* DBcc */ { CPUFUNC(op_5dd0_11), 24016 }, /* Scc */ { CPUFUNC(op_5dd8_11), 24024 }, /* Scc */ { CPUFUNC(op_5de0_11), 24032 }, /* Scc */ { CPUFUNC(op_5de8_11), 24040 }, /* Scc */ { CPUFUNC(op_5df0_11), 24048 }, /* Scc */ { CPUFUNC(op_5df8_11), 24056 }, /* Scc */ { CPUFUNC(op_5df9_11), 24057 }, /* Scc */ { CPUFUNC(op_5ec0_11), 24256 }, /* Scc */ { CPUFUNC(op_5ec8_11), 24264 }, /* DBcc */ { CPUFUNC(op_5ed0_11), 24272 }, /* Scc */ { CPUFUNC(op_5ed8_11), 24280 }, /* Scc */ { CPUFUNC(op_5ee0_11), 24288 }, /* Scc */ { CPUFUNC(op_5ee8_11), 24296 }, /* Scc */ { CPUFUNC(op_5ef0_11), 24304 }, /* Scc */ { CPUFUNC(op_5ef8_11), 24312 }, /* Scc */ { CPUFUNC(op_5ef9_11), 24313 }, /* Scc */ { CPUFUNC(op_5fc0_11), 24512 }, /* Scc */ { CPUFUNC(op_5fc8_11), 24520 }, /* DBcc */ { CPUFUNC(op_5fd0_11), 24528 }, /* Scc */ { CPUFUNC(op_5fd8_11), 24536 }, /* Scc */ { CPUFUNC(op_5fe0_11), 24544 }, /* Scc */ { CPUFUNC(op_5fe8_11), 24552 }, /* Scc */ { CPUFUNC(op_5ff0_11), 24560 }, /* Scc */ { CPUFUNC(op_5ff8_11), 24568 }, /* Scc */ { CPUFUNC(op_5ff9_11), 24569 }, /* Scc */ { CPUFUNC(op_6000_11), 24576 }, /* Bcc */ { CPUFUNC(op_6001_11), 24577 }, /* Bcc */ { CPUFUNC(op_60ff_11), 24831 }, /* Bcc */ { CPUFUNC(op_6100_11), 24832 }, /* BSR */ { CPUFUNC(op_6101_11), 24833 }, /* BSR */ { CPUFUNC(op_61ff_11), 25087 }, /* BSR */ { CPUFUNC(op_6200_11), 25088 }, /* Bcc */ { CPUFUNC(op_6201_11), 25089 }, /* Bcc */ { CPUFUNC(op_62ff_11), 25343 }, /* Bcc */ { CPUFUNC(op_6300_11), 25344 }, /* Bcc */ { CPUFUNC(op_6301_11), 25345 }, /* Bcc */ { CPUFUNC(op_63ff_11), 25599 }, /* Bcc */ { CPUFUNC(op_6400_11), 25600 }, /* Bcc */ { CPUFUNC(op_6401_11), 25601 }, /* Bcc */ { CPUFUNC(op_64ff_11), 25855 }, /* Bcc */ { CPUFUNC(op_6500_11), 25856 }, /* Bcc */ { CPUFUNC(op_6501_11), 25857 }, /* Bcc */ { CPUFUNC(op_65ff_11), 26111 }, /* Bcc */ { CPUFUNC(op_6600_11), 26112 }, /* Bcc */ { CPUFUNC(op_6601_11), 26113 }, /* Bcc */ { CPUFUNC(op_66ff_11), 26367 }, /* Bcc */ { CPUFUNC(op_6700_11), 26368 }, /* Bcc */ { CPUFUNC(op_6701_11), 26369 }, /* Bcc */ { CPUFUNC(op_67ff_11), 26623 }, /* Bcc */ { CPUFUNC(op_6800_11), 26624 }, /* Bcc */ { CPUFUNC(op_6801_11), 26625 }, /* Bcc */ { CPUFUNC(op_68ff_11), 26879 }, /* Bcc */ { CPUFUNC(op_6900_11), 26880 }, /* Bcc */ { CPUFUNC(op_6901_11), 26881 }, /* Bcc */ { CPUFUNC(op_69ff_11), 27135 }, /* Bcc */ { CPUFUNC(op_6a00_11), 27136 }, /* Bcc */ { CPUFUNC(op_6a01_11), 27137 }, /* Bcc */ { CPUFUNC(op_6aff_11), 27391 }, /* Bcc */ { CPUFUNC(op_6b00_11), 27392 }, /* Bcc */ { CPUFUNC(op_6b01_11), 27393 }, /* Bcc */ { CPUFUNC(op_6bff_11), 27647 }, /* Bcc */ { CPUFUNC(op_6c00_11), 27648 }, /* Bcc */ { CPUFUNC(op_6c01_11), 27649 }, /* Bcc */ { CPUFUNC(op_6cff_11), 27903 }, /* Bcc */ { CPUFUNC(op_6d00_11), 27904 }, /* Bcc */ { CPUFUNC(op_6d01_11), 27905 }, /* Bcc */ { CPUFUNC(op_6dff_11), 28159 }, /* Bcc */ { CPUFUNC(op_6e00_11), 28160 }, /* Bcc */ { CPUFUNC(op_6e01_11), 28161 }, /* Bcc */ { CPUFUNC(op_6eff_11), 28415 }, /* Bcc */ { CPUFUNC(op_6f00_11), 28416 }, /* Bcc */ { CPUFUNC(op_6f01_11), 28417 }, /* Bcc */ { CPUFUNC(op_6fff_11), 28671 }, /* Bcc */ { CPUFUNC(op_7000_11), 28672 }, /* MOVE */ { CPUFUNC(op_8000_11), 32768 }, /* OR */ { CPUFUNC(op_8010_11), 32784 }, /* OR */ { CPUFUNC(op_8018_11), 32792 }, /* OR */ { CPUFUNC(op_8020_11), 32800 }, /* OR */ { CPUFUNC(op_8028_11), 32808 }, /* OR */ { CPUFUNC(op_8030_11), 32816 }, /* OR */ { CPUFUNC(op_8038_11), 32824 }, /* OR */ { CPUFUNC(op_8039_11), 32825 }, /* OR */ { CPUFUNC(op_803a_11), 32826 }, /* OR */ { CPUFUNC(op_803b_11), 32827 }, /* OR */ { CPUFUNC(op_803c_11), 32828 }, /* OR */ { CPUFUNC(op_8040_11), 32832 }, /* OR */ { CPUFUNC(op_8050_11), 32848 }, /* OR */ { CPUFUNC(op_8058_11), 32856 }, /* OR */ { CPUFUNC(op_8060_11), 32864 }, /* OR */ { CPUFUNC(op_8068_11), 32872 }, /* OR */ { CPUFUNC(op_8070_11), 32880 }, /* OR */ { CPUFUNC(op_8078_11), 32888 }, /* OR */ { CPUFUNC(op_8079_11), 32889 }, /* OR */ { CPUFUNC(op_807a_11), 32890 }, /* OR */ { CPUFUNC(op_807b_11), 32891 }, /* OR */ { CPUFUNC(op_807c_11), 32892 }, /* OR */ { CPUFUNC(op_8080_11), 32896 }, /* OR */ { CPUFUNC(op_8090_11), 32912 }, /* OR */ { CPUFUNC(op_8098_11), 32920 }, /* OR */ { CPUFUNC(op_80a0_11), 32928 }, /* OR */ { CPUFUNC(op_80a8_11), 32936 }, /* OR */ { CPUFUNC(op_80b0_11), 32944 }, /* OR */ { CPUFUNC(op_80b8_11), 32952 }, /* OR */ { CPUFUNC(op_80b9_11), 32953 }, /* OR */ { CPUFUNC(op_80ba_11), 32954 }, /* OR */ { CPUFUNC(op_80bb_11), 32955 }, /* OR */ { CPUFUNC(op_80bc_11), 32956 }, /* OR */ { CPUFUNC(op_80c0_11), 32960 }, /* DIVU */ { CPUFUNC(op_80d0_11), 32976 }, /* DIVU */ { CPUFUNC(op_80d8_11), 32984 }, /* DIVU */ { CPUFUNC(op_80e0_11), 32992 }, /* DIVU */ { CPUFUNC(op_80e8_11), 33000 }, /* DIVU */ { CPUFUNC(op_80f0_11), 33008 }, /* DIVU */ { CPUFUNC(op_80f8_11), 33016 }, /* DIVU */ { CPUFUNC(op_80f9_11), 33017 }, /* DIVU */ { CPUFUNC(op_80fa_11), 33018 }, /* DIVU */ { CPUFUNC(op_80fb_11), 33019 }, /* DIVU */ { CPUFUNC(op_80fc_11), 33020 }, /* DIVU */ { CPUFUNC(op_8100_11), 33024 }, /* SBCD */ { CPUFUNC(op_8108_11), 33032 }, /* SBCD */ { CPUFUNC(op_8110_11), 33040 }, /* OR */ { CPUFUNC(op_8118_11), 33048 }, /* OR */ { CPUFUNC(op_8120_11), 33056 }, /* OR */ { CPUFUNC(op_8128_11), 33064 }, /* OR */ { CPUFUNC(op_8130_11), 33072 }, /* OR */ { CPUFUNC(op_8138_11), 33080 }, /* OR */ { CPUFUNC(op_8139_11), 33081 }, /* OR */ { CPUFUNC(op_8150_11), 33104 }, /* OR */ { CPUFUNC(op_8158_11), 33112 }, /* OR */ { CPUFUNC(op_8160_11), 33120 }, /* OR */ { CPUFUNC(op_8168_11), 33128 }, /* OR */ { CPUFUNC(op_8170_11), 33136 }, /* OR */ { CPUFUNC(op_8178_11), 33144 }, /* OR */ { CPUFUNC(op_8179_11), 33145 }, /* OR */ { CPUFUNC(op_8190_11), 33168 }, /* OR */ { CPUFUNC(op_8198_11), 33176 }, /* OR */ { CPUFUNC(op_81a0_11), 33184 }, /* OR */ { CPUFUNC(op_81a8_11), 33192 }, /* OR */ { CPUFUNC(op_81b0_11), 33200 }, /* OR */ { CPUFUNC(op_81b8_11), 33208 }, /* OR */ { CPUFUNC(op_81b9_11), 33209 }, /* OR */ { CPUFUNC(op_81c0_11), 33216 }, /* DIVS */ { CPUFUNC(op_81d0_11), 33232 }, /* DIVS */ { CPUFUNC(op_81d8_11), 33240 }, /* DIVS */ { CPUFUNC(op_81e0_11), 33248 }, /* DIVS */ { CPUFUNC(op_81e8_11), 33256 }, /* DIVS */ { CPUFUNC(op_81f0_11), 33264 }, /* DIVS */ { CPUFUNC(op_81f8_11), 33272 }, /* DIVS */ { CPUFUNC(op_81f9_11), 33273 }, /* DIVS */ { CPUFUNC(op_81fa_11), 33274 }, /* DIVS */ { CPUFUNC(op_81fb_11), 33275 }, /* DIVS */ { CPUFUNC(op_81fc_11), 33276 }, /* DIVS */ { CPUFUNC(op_9000_11), 36864 }, /* SUB */ { CPUFUNC(op_9010_11), 36880 }, /* SUB */ { CPUFUNC(op_9018_11), 36888 }, /* SUB */ { CPUFUNC(op_9020_11), 36896 }, /* SUB */ { CPUFUNC(op_9028_11), 36904 }, /* SUB */ { CPUFUNC(op_9030_11), 36912 }, /* SUB */ { CPUFUNC(op_9038_11), 36920 }, /* SUB */ { CPUFUNC(op_9039_11), 36921 }, /* SUB */ { CPUFUNC(op_903a_11), 36922 }, /* SUB */ { CPUFUNC(op_903b_11), 36923 }, /* SUB */ { CPUFUNC(op_903c_11), 36924 }, /* SUB */ { CPUFUNC(op_9040_11), 36928 }, /* SUB */ { CPUFUNC(op_9048_11), 36936 }, /* SUB */ { CPUFUNC(op_9050_11), 36944 }, /* SUB */ { CPUFUNC(op_9058_11), 36952 }, /* SUB */ { CPUFUNC(op_9060_11), 36960 }, /* SUB */ { CPUFUNC(op_9068_11), 36968 }, /* SUB */ { CPUFUNC(op_9070_11), 36976 }, /* SUB */ { CPUFUNC(op_9078_11), 36984 }, /* SUB */ { CPUFUNC(op_9079_11), 36985 }, /* SUB */ { CPUFUNC(op_907a_11), 36986 }, /* SUB */ { CPUFUNC(op_907b_11), 36987 }, /* SUB */ { CPUFUNC(op_907c_11), 36988 }, /* SUB */ { CPUFUNC(op_9080_11), 36992 }, /* SUB */ { CPUFUNC(op_9088_11), 37000 }, /* SUB */ { CPUFUNC(op_9090_11), 37008 }, /* SUB */ { CPUFUNC(op_9098_11), 37016 }, /* SUB */ { CPUFUNC(op_90a0_11), 37024 }, /* SUB */ { CPUFUNC(op_90a8_11), 37032 }, /* SUB */ { CPUFUNC(op_90b0_11), 37040 }, /* SUB */ { CPUFUNC(op_90b8_11), 37048 }, /* SUB */ { CPUFUNC(op_90b9_11), 37049 }, /* SUB */ { CPUFUNC(op_90ba_11), 37050 }, /* SUB */ { CPUFUNC(op_90bb_11), 37051 }, /* SUB */ { CPUFUNC(op_90bc_11), 37052 }, /* SUB */ { CPUFUNC(op_90c0_11), 37056 }, /* SUBA */ { CPUFUNC(op_90c8_11), 37064 }, /* SUBA */ { CPUFUNC(op_90d0_11), 37072 }, /* SUBA */ { CPUFUNC(op_90d8_11), 37080 }, /* SUBA */ { CPUFUNC(op_90e0_11), 37088 }, /* SUBA */ { CPUFUNC(op_90e8_11), 37096 }, /* SUBA */ { CPUFUNC(op_90f0_11), 37104 }, /* SUBA */ { CPUFUNC(op_90f8_11), 37112 }, /* SUBA */ { CPUFUNC(op_90f9_11), 37113 }, /* SUBA */ { CPUFUNC(op_90fa_11), 37114 }, /* SUBA */ { CPUFUNC(op_90fb_11), 37115 }, /* SUBA */ { CPUFUNC(op_90fc_11), 37116 }, /* SUBA */ { CPUFUNC(op_9100_11), 37120 }, /* SUBX */ { CPUFUNC(op_9108_11), 37128 }, /* SUBX */ { CPUFUNC(op_9110_11), 37136 }, /* SUB */ { CPUFUNC(op_9118_11), 37144 }, /* SUB */ { CPUFUNC(op_9120_11), 37152 }, /* SUB */ { CPUFUNC(op_9128_11), 37160 }, /* SUB */ { CPUFUNC(op_9130_11), 37168 }, /* SUB */ { CPUFUNC(op_9138_11), 37176 }, /* SUB */ { CPUFUNC(op_9139_11), 37177 }, /* SUB */ { CPUFUNC(op_9140_11), 37184 }, /* SUBX */ { CPUFUNC(op_9148_11), 37192 }, /* SUBX */ { CPUFUNC(op_9150_11), 37200 }, /* SUB */ { CPUFUNC(op_9158_11), 37208 }, /* SUB */ { CPUFUNC(op_9160_11), 37216 }, /* SUB */ { CPUFUNC(op_9168_11), 37224 }, /* SUB */ { CPUFUNC(op_9170_11), 37232 }, /* SUB */ { CPUFUNC(op_9178_11), 37240 }, /* SUB */ { CPUFUNC(op_9179_11), 37241 }, /* SUB */ { CPUFUNC(op_9180_11), 37248 }, /* SUBX */ { CPUFUNC(op_9188_11), 37256 }, /* SUBX */ { CPUFUNC(op_9190_11), 37264 }, /* SUB */ { CPUFUNC(op_9198_11), 37272 }, /* SUB */ { CPUFUNC(op_91a0_11), 37280 }, /* SUB */ { CPUFUNC(op_91a8_11), 37288 }, /* SUB */ { CPUFUNC(op_91b0_11), 37296 }, /* SUB */ { CPUFUNC(op_91b8_11), 37304 }, /* SUB */ { CPUFUNC(op_91b9_11), 37305 }, /* SUB */ { CPUFUNC(op_91c0_11), 37312 }, /* SUBA */ { CPUFUNC(op_91c8_11), 37320 }, /* SUBA */ { CPUFUNC(op_91d0_11), 37328 }, /* SUBA */ { CPUFUNC(op_91d8_11), 37336 }, /* SUBA */ { CPUFUNC(op_91e0_11), 37344 }, /* SUBA */ { CPUFUNC(op_91e8_11), 37352 }, /* SUBA */ { CPUFUNC(op_91f0_11), 37360 }, /* SUBA */ { CPUFUNC(op_91f8_11), 37368 }, /* SUBA */ { CPUFUNC(op_91f9_11), 37369 }, /* SUBA */ { CPUFUNC(op_91fa_11), 37370 }, /* SUBA */ { CPUFUNC(op_91fb_11), 37371 }, /* SUBA */ { CPUFUNC(op_91fc_11), 37372 }, /* SUBA */ { CPUFUNC(op_b000_11), 45056 }, /* CMP */ { CPUFUNC(op_b010_11), 45072 }, /* CMP */ { CPUFUNC(op_b018_11), 45080 }, /* CMP */ { CPUFUNC(op_b020_11), 45088 }, /* CMP */ { CPUFUNC(op_b028_11), 45096 }, /* CMP */ { CPUFUNC(op_b030_11), 45104 }, /* CMP */ { CPUFUNC(op_b038_11), 45112 }, /* CMP */ { CPUFUNC(op_b039_11), 45113 }, /* CMP */ { CPUFUNC(op_b03a_11), 45114 }, /* CMP */ { CPUFUNC(op_b03b_11), 45115 }, /* CMP */ { CPUFUNC(op_b03c_11), 45116 }, /* CMP */ { CPUFUNC(op_b040_11), 45120 }, /* CMP */ { CPUFUNC(op_b048_11), 45128 }, /* CMP */ { CPUFUNC(op_b050_11), 45136 }, /* CMP */ { CPUFUNC(op_b058_11), 45144 }, /* CMP */ { CPUFUNC(op_b060_11), 45152 }, /* CMP */ { CPUFUNC(op_b068_11), 45160 }, /* CMP */ { CPUFUNC(op_b070_11), 45168 }, /* CMP */ { CPUFUNC(op_b078_11), 45176 }, /* CMP */ { CPUFUNC(op_b079_11), 45177 }, /* CMP */ { CPUFUNC(op_b07a_11), 45178 }, /* CMP */ { CPUFUNC(op_b07b_11), 45179 }, /* CMP */ { CPUFUNC(op_b07c_11), 45180 }, /* CMP */ { CPUFUNC(op_b080_11), 45184 }, /* CMP */ { CPUFUNC(op_b088_11), 45192 }, /* CMP */ { CPUFUNC(op_b090_11), 45200 }, /* CMP */ { CPUFUNC(op_b098_11), 45208 }, /* CMP */ { CPUFUNC(op_b0a0_11), 45216 }, /* CMP */ { CPUFUNC(op_b0a8_11), 45224 }, /* CMP */ { CPUFUNC(op_b0b0_11), 45232 }, /* CMP */ { CPUFUNC(op_b0b8_11), 45240 }, /* CMP */ { CPUFUNC(op_b0b9_11), 45241 }, /* CMP */ { CPUFUNC(op_b0ba_11), 45242 }, /* CMP */ { CPUFUNC(op_b0bb_11), 45243 }, /* CMP */ { CPUFUNC(op_b0bc_11), 45244 }, /* CMP */ { CPUFUNC(op_b0c0_11), 45248 }, /* CMPA */ { CPUFUNC(op_b0c8_11), 45256 }, /* CMPA */ { CPUFUNC(op_b0d0_11), 45264 }, /* CMPA */ { CPUFUNC(op_b0d8_11), 45272 }, /* CMPA */ { CPUFUNC(op_b0e0_11), 45280 }, /* CMPA */ { CPUFUNC(op_b0e8_11), 45288 }, /* CMPA */ { CPUFUNC(op_b0f0_11), 45296 }, /* CMPA */ { CPUFUNC(op_b0f8_11), 45304 }, /* CMPA */ { CPUFUNC(op_b0f9_11), 45305 }, /* CMPA */ { CPUFUNC(op_b0fa_11), 45306 }, /* CMPA */ { CPUFUNC(op_b0fb_11), 45307 }, /* CMPA */ { CPUFUNC(op_b0fc_11), 45308 }, /* CMPA */ { CPUFUNC(op_b100_11), 45312 }, /* EOR */ { CPUFUNC(op_b108_11), 45320 }, /* CMPM */ { CPUFUNC(op_b110_11), 45328 }, /* EOR */ { CPUFUNC(op_b118_11), 45336 }, /* EOR */ { CPUFUNC(op_b120_11), 45344 }, /* EOR */ { CPUFUNC(op_b128_11), 45352 }, /* EOR */ { CPUFUNC(op_b130_11), 45360 }, /* EOR */ { CPUFUNC(op_b138_11), 45368 }, /* EOR */ { CPUFUNC(op_b139_11), 45369 }, /* EOR */ { CPUFUNC(op_b140_11), 45376 }, /* EOR */ { CPUFUNC(op_b148_11), 45384 }, /* CMPM */ { CPUFUNC(op_b150_11), 45392 }, /* EOR */ { CPUFUNC(op_b158_11), 45400 }, /* EOR */ { CPUFUNC(op_b160_11), 45408 }, /* EOR */ { CPUFUNC(op_b168_11), 45416 }, /* EOR */ { CPUFUNC(op_b170_11), 45424 }, /* EOR */ { CPUFUNC(op_b178_11), 45432 }, /* EOR */ { CPUFUNC(op_b179_11), 45433 }, /* EOR */ { CPUFUNC(op_b180_11), 45440 }, /* EOR */ { CPUFUNC(op_b188_11), 45448 }, /* CMPM */ { CPUFUNC(op_b190_11), 45456 }, /* EOR */ { CPUFUNC(op_b198_11), 45464 }, /* EOR */ { CPUFUNC(op_b1a0_11), 45472 }, /* EOR */ { CPUFUNC(op_b1a8_11), 45480 }, /* EOR */ { CPUFUNC(op_b1b0_11), 45488 }, /* EOR */ { CPUFUNC(op_b1b8_11), 45496 }, /* EOR */ { CPUFUNC(op_b1b9_11), 45497 }, /* EOR */ { CPUFUNC(op_b1c0_11), 45504 }, /* CMPA */ { CPUFUNC(op_b1c8_11), 45512 }, /* CMPA */ { CPUFUNC(op_b1d0_11), 45520 }, /* CMPA */ { CPUFUNC(op_b1d8_11), 45528 }, /* CMPA */ { CPUFUNC(op_b1e0_11), 45536 }, /* CMPA */ { CPUFUNC(op_b1e8_11), 45544 }, /* CMPA */ { CPUFUNC(op_b1f0_11), 45552 }, /* CMPA */ { CPUFUNC(op_b1f8_11), 45560 }, /* CMPA */ { CPUFUNC(op_b1f9_11), 45561 }, /* CMPA */ { CPUFUNC(op_b1fa_11), 45562 }, /* CMPA */ { CPUFUNC(op_b1fb_11), 45563 }, /* CMPA */ { CPUFUNC(op_b1fc_11), 45564 }, /* CMPA */ { CPUFUNC(op_c000_11), 49152 }, /* AND */ { CPUFUNC(op_c010_11), 49168 }, /* AND */ { CPUFUNC(op_c018_11), 49176 }, /* AND */ { CPUFUNC(op_c020_11), 49184 }, /* AND */ { CPUFUNC(op_c028_11), 49192 }, /* AND */ { CPUFUNC(op_c030_11), 49200 }, /* AND */ { CPUFUNC(op_c038_11), 49208 }, /* AND */ { CPUFUNC(op_c039_11), 49209 }, /* AND */ { CPUFUNC(op_c03a_11), 49210 }, /* AND */ { CPUFUNC(op_c03b_11), 49211 }, /* AND */ { CPUFUNC(op_c03c_11), 49212 }, /* AND */ { CPUFUNC(op_c040_11), 49216 }, /* AND */ { CPUFUNC(op_c050_11), 49232 }, /* AND */ { CPUFUNC(op_c058_11), 49240 }, /* AND */ { CPUFUNC(op_c060_11), 49248 }, /* AND */ { CPUFUNC(op_c068_11), 49256 }, /* AND */ { CPUFUNC(op_c070_11), 49264 }, /* AND */ { CPUFUNC(op_c078_11), 49272 }, /* AND */ { CPUFUNC(op_c079_11), 49273 }, /* AND */ { CPUFUNC(op_c07a_11), 49274 }, /* AND */ { CPUFUNC(op_c07b_11), 49275 }, /* AND */ { CPUFUNC(op_c07c_11), 49276 }, /* AND */ { CPUFUNC(op_c080_11), 49280 }, /* AND */ { CPUFUNC(op_c090_11), 49296 }, /* AND */ { CPUFUNC(op_c098_11), 49304 }, /* AND */ { CPUFUNC(op_c0a0_11), 49312 }, /* AND */ { CPUFUNC(op_c0a8_11), 49320 }, /* AND */ { CPUFUNC(op_c0b0_11), 49328 }, /* AND */ { CPUFUNC(op_c0b8_11), 49336 }, /* AND */ { CPUFUNC(op_c0b9_11), 49337 }, /* AND */ { CPUFUNC(op_c0ba_11), 49338 }, /* AND */ { CPUFUNC(op_c0bb_11), 49339 }, /* AND */ { CPUFUNC(op_c0bc_11), 49340 }, /* AND */ { CPUFUNC(op_c0c0_11), 49344 }, /* MULU */ { CPUFUNC(op_c0d0_11), 49360 }, /* MULU */ { CPUFUNC(op_c0d8_11), 49368 }, /* MULU */ { CPUFUNC(op_c0e0_11), 49376 }, /* MULU */ { CPUFUNC(op_c0e8_11), 49384 }, /* MULU */ { CPUFUNC(op_c0f0_11), 49392 }, /* MULU */ { CPUFUNC(op_c0f8_11), 49400 }, /* MULU */ { CPUFUNC(op_c0f9_11), 49401 }, /* MULU */ { CPUFUNC(op_c0fa_11), 49402 }, /* MULU */ { CPUFUNC(op_c0fb_11), 49403 }, /* MULU */ { CPUFUNC(op_c0fc_11), 49404 }, /* MULU */ { CPUFUNC(op_c100_11), 49408 }, /* ABCD */ { CPUFUNC(op_c108_11), 49416 }, /* ABCD */ { CPUFUNC(op_c110_11), 49424 }, /* AND */ { CPUFUNC(op_c118_11), 49432 }, /* AND */ { CPUFUNC(op_c120_11), 49440 }, /* AND */ { CPUFUNC(op_c128_11), 49448 }, /* AND */ { CPUFUNC(op_c130_11), 49456 }, /* AND */ { CPUFUNC(op_c138_11), 49464 }, /* AND */ { CPUFUNC(op_c139_11), 49465 }, /* AND */ { CPUFUNC(op_c140_11), 49472 }, /* EXG */ { CPUFUNC(op_c148_11), 49480 }, /* EXG */ { CPUFUNC(op_c150_11), 49488 }, /* AND */ { CPUFUNC(op_c158_11), 49496 }, /* AND */ { CPUFUNC(op_c160_11), 49504 }, /* AND */ { CPUFUNC(op_c168_11), 49512 }, /* AND */ { CPUFUNC(op_c170_11), 49520 }, /* AND */ { CPUFUNC(op_c178_11), 49528 }, /* AND */ { CPUFUNC(op_c179_11), 49529 }, /* AND */ { CPUFUNC(op_c188_11), 49544 }, /* EXG */ { CPUFUNC(op_c190_11), 49552 }, /* AND */ { CPUFUNC(op_c198_11), 49560 }, /* AND */ { CPUFUNC(op_c1a0_11), 49568 }, /* AND */ { CPUFUNC(op_c1a8_11), 49576 }, /* AND */ { CPUFUNC(op_c1b0_11), 49584 }, /* AND */ { CPUFUNC(op_c1b8_11), 49592 }, /* AND */ { CPUFUNC(op_c1b9_11), 49593 }, /* AND */ { CPUFUNC(op_c1c0_11), 49600 }, /* MULS */ { CPUFUNC(op_c1d0_11), 49616 }, /* MULS */ { CPUFUNC(op_c1d8_11), 49624 }, /* MULS */ { CPUFUNC(op_c1e0_11), 49632 }, /* MULS */ { CPUFUNC(op_c1e8_11), 49640 }, /* MULS */ { CPUFUNC(op_c1f0_11), 49648 }, /* MULS */ { CPUFUNC(op_c1f8_11), 49656 }, /* MULS */ { CPUFUNC(op_c1f9_11), 49657 }, /* MULS */ { CPUFUNC(op_c1fa_11), 49658 }, /* MULS */ { CPUFUNC(op_c1fb_11), 49659 }, /* MULS */ { CPUFUNC(op_c1fc_11), 49660 }, /* MULS */ { CPUFUNC(op_d000_11), 53248 }, /* ADD */ { CPUFUNC(op_d010_11), 53264 }, /* ADD */ { CPUFUNC(op_d018_11), 53272 }, /* ADD */ { CPUFUNC(op_d020_11), 53280 }, /* ADD */ { CPUFUNC(op_d028_11), 53288 }, /* ADD */ { CPUFUNC(op_d030_11), 53296 }, /* ADD */ { CPUFUNC(op_d038_11), 53304 }, /* ADD */ { CPUFUNC(op_d039_11), 53305 }, /* ADD */ { CPUFUNC(op_d03a_11), 53306 }, /* ADD */ { CPUFUNC(op_d03b_11), 53307 }, /* ADD */ { CPUFUNC(op_d03c_11), 53308 }, /* ADD */ { CPUFUNC(op_d040_11), 53312 }, /* ADD */ { CPUFUNC(op_d048_11), 53320 }, /* ADD */ { CPUFUNC(op_d050_11), 53328 }, /* ADD */ { CPUFUNC(op_d058_11), 53336 }, /* ADD */ { CPUFUNC(op_d060_11), 53344 }, /* ADD */ { CPUFUNC(op_d068_11), 53352 }, /* ADD */ { CPUFUNC(op_d070_11), 53360 }, /* ADD */ { CPUFUNC(op_d078_11), 53368 }, /* ADD */ { CPUFUNC(op_d079_11), 53369 }, /* ADD */ { CPUFUNC(op_d07a_11), 53370 }, /* ADD */ { CPUFUNC(op_d07b_11), 53371 }, /* ADD */ { CPUFUNC(op_d07c_11), 53372 }, /* ADD */ { CPUFUNC(op_d080_11), 53376 }, /* ADD */ { CPUFUNC(op_d088_11), 53384 }, /* ADD */ { CPUFUNC(op_d090_11), 53392 }, /* ADD */ { CPUFUNC(op_d098_11), 53400 }, /* ADD */ { CPUFUNC(op_d0a0_11), 53408 }, /* ADD */ { CPUFUNC(op_d0a8_11), 53416 }, /* ADD */ { CPUFUNC(op_d0b0_11), 53424 }, /* ADD */ { CPUFUNC(op_d0b8_11), 53432 }, /* ADD */ { CPUFUNC(op_d0b9_11), 53433 }, /* ADD */ { CPUFUNC(op_d0ba_11), 53434 }, /* ADD */ { CPUFUNC(op_d0bb_11), 53435 }, /* ADD */ { CPUFUNC(op_d0bc_11), 53436 }, /* ADD */ { CPUFUNC(op_d0c0_11), 53440 }, /* ADDA */ { CPUFUNC(op_d0c8_11), 53448 }, /* ADDA */ { CPUFUNC(op_d0d0_11), 53456 }, /* ADDA */ { CPUFUNC(op_d0d8_11), 53464 }, /* ADDA */ { CPUFUNC(op_d0e0_11), 53472 }, /* ADDA */ { CPUFUNC(op_d0e8_11), 53480 }, /* ADDA */ { CPUFUNC(op_d0f0_11), 53488 }, /* ADDA */ { CPUFUNC(op_d0f8_11), 53496 }, /* ADDA */ { CPUFUNC(op_d0f9_11), 53497 }, /* ADDA */ { CPUFUNC(op_d0fa_11), 53498 }, /* ADDA */ { CPUFUNC(op_d0fb_11), 53499 }, /* ADDA */ { CPUFUNC(op_d0fc_11), 53500 }, /* ADDA */ { CPUFUNC(op_d100_11), 53504 }, /* ADDX */ { CPUFUNC(op_d108_11), 53512 }, /* ADDX */ { CPUFUNC(op_d110_11), 53520 }, /* ADD */ { CPUFUNC(op_d118_11), 53528 }, /* ADD */ { CPUFUNC(op_d120_11), 53536 }, /* ADD */ { CPUFUNC(op_d128_11), 53544 }, /* ADD */ { CPUFUNC(op_d130_11), 53552 }, /* ADD */ { CPUFUNC(op_d138_11), 53560 }, /* ADD */ { CPUFUNC(op_d139_11), 53561 }, /* ADD */ { CPUFUNC(op_d140_11), 53568 }, /* ADDX */ { CPUFUNC(op_d148_11), 53576 }, /* ADDX */ { CPUFUNC(op_d150_11), 53584 }, /* ADD */ { CPUFUNC(op_d158_11), 53592 }, /* ADD */ { CPUFUNC(op_d160_11), 53600 }, /* ADD */ { CPUFUNC(op_d168_11), 53608 }, /* ADD */ { CPUFUNC(op_d170_11), 53616 }, /* ADD */ { CPUFUNC(op_d178_11), 53624 }, /* ADD */ { CPUFUNC(op_d179_11), 53625 }, /* ADD */ { CPUFUNC(op_d180_11), 53632 }, /* ADDX */ { CPUFUNC(op_d188_11), 53640 }, /* ADDX */ { CPUFUNC(op_d190_11), 53648 }, /* ADD */ { CPUFUNC(op_d198_11), 53656 }, /* ADD */ { CPUFUNC(op_d1a0_11), 53664 }, /* ADD */ { CPUFUNC(op_d1a8_11), 53672 }, /* ADD */ { CPUFUNC(op_d1b0_11), 53680 }, /* ADD */ { CPUFUNC(op_d1b8_11), 53688 }, /* ADD */ { CPUFUNC(op_d1b9_11), 53689 }, /* ADD */ { CPUFUNC(op_d1c0_11), 53696 }, /* ADDA */ { CPUFUNC(op_d1c8_11), 53704 }, /* ADDA */ { CPUFUNC(op_d1d0_11), 53712 }, /* ADDA */ { CPUFUNC(op_d1d8_11), 53720 }, /* ADDA */ { CPUFUNC(op_d1e0_11), 53728 }, /* ADDA */ { CPUFUNC(op_d1e8_11), 53736 }, /* ADDA */ { CPUFUNC(op_d1f0_11), 53744 }, /* ADDA */ { CPUFUNC(op_d1f8_11), 53752 }, /* ADDA */ { CPUFUNC(op_d1f9_11), 53753 }, /* ADDA */ { CPUFUNC(op_d1fa_11), 53754 }, /* ADDA */ { CPUFUNC(op_d1fb_11), 53755 }, /* ADDA */ { CPUFUNC(op_d1fc_11), 53756 }, /* ADDA */ { CPUFUNC(op_e000_11), 57344 }, /* ASR */ { CPUFUNC(op_e008_11), 57352 }, /* LSR */ { CPUFUNC(op_e010_11), 57360 }, /* ROXR */ { CPUFUNC(op_e018_11), 57368 }, /* ROR */ { CPUFUNC(op_e020_11), 57376 }, /* ASR */ { CPUFUNC(op_e028_11), 57384 }, /* LSR */ { CPUFUNC(op_e030_11), 57392 }, /* ROXR */ { CPUFUNC(op_e038_11), 57400 }, /* ROR */ { CPUFUNC(op_e040_11), 57408 }, /* ASR */ { CPUFUNC(op_e048_11), 57416 }, /* LSR */ { CPUFUNC(op_e050_11), 57424 }, /* ROXR */ { CPUFUNC(op_e058_11), 57432 }, /* ROR */ { CPUFUNC(op_e060_11), 57440 }, /* ASR */ { CPUFUNC(op_e068_11), 57448 }, /* LSR */ { CPUFUNC(op_e070_11), 57456 }, /* ROXR */ { CPUFUNC(op_e078_11), 57464 }, /* ROR */ { CPUFUNC(op_e080_11), 57472 }, /* ASR */ { CPUFUNC(op_e088_11), 57480 }, /* LSR */ { CPUFUNC(op_e090_11), 57488 }, /* ROXR */ { CPUFUNC(op_e098_11), 57496 }, /* ROR */ { CPUFUNC(op_e0a0_11), 57504 }, /* ASR */ { CPUFUNC(op_e0a8_11), 57512 }, /* LSR */ { CPUFUNC(op_e0b0_11), 57520 }, /* ROXR */ { CPUFUNC(op_e0b8_11), 57528 }, /* ROR */ { CPUFUNC(op_e0d0_11), 57552 }, /* ASRW */ { CPUFUNC(op_e0d8_11), 57560 }, /* ASRW */ { CPUFUNC(op_e0e0_11), 57568 }, /* ASRW */ { CPUFUNC(op_e0e8_11), 57576 }, /* ASRW */ { CPUFUNC(op_e0f0_11), 57584 }, /* ASRW */ { CPUFUNC(op_e0f8_11), 57592 }, /* ASRW */ { CPUFUNC(op_e0f9_11), 57593 }, /* ASRW */ { CPUFUNC(op_e100_11), 57600 }, /* ASL */ { CPUFUNC(op_e108_11), 57608 }, /* LSL */ { CPUFUNC(op_e110_11), 57616 }, /* ROXL */ { CPUFUNC(op_e118_11), 57624 }, /* ROL */ { CPUFUNC(op_e120_11), 57632 }, /* ASL */ { CPUFUNC(op_e128_11), 57640 }, /* LSL */ { CPUFUNC(op_e130_11), 57648 }, /* ROXL */ { CPUFUNC(op_e138_11), 57656 }, /* ROL */ { CPUFUNC(op_e140_11), 57664 }, /* ASL */ { CPUFUNC(op_e148_11), 57672 }, /* LSL */ { CPUFUNC(op_e150_11), 57680 }, /* ROXL */ { CPUFUNC(op_e158_11), 57688 }, /* ROL */ { CPUFUNC(op_e160_11), 57696 }, /* ASL */ { CPUFUNC(op_e168_11), 57704 }, /* LSL */ { CPUFUNC(op_e170_11), 57712 }, /* ROXL */ { CPUFUNC(op_e178_11), 57720 }, /* ROL */ { CPUFUNC(op_e180_11), 57728 }, /* ASL */ { CPUFUNC(op_e188_11), 57736 }, /* LSL */ { CPUFUNC(op_e190_11), 57744 }, /* ROXL */ { CPUFUNC(op_e198_11), 57752 }, /* ROL */ { CPUFUNC(op_e1a0_11), 57760 }, /* ASL */ { CPUFUNC(op_e1a8_11), 57768 }, /* LSL */ { CPUFUNC(op_e1b0_11), 57776 }, /* ROXL */ { CPUFUNC(op_e1b8_11), 57784 }, /* ROL */ { CPUFUNC(op_e1d0_11), 57808 }, /* ASLW */ { CPUFUNC(op_e1d8_11), 57816 }, /* ASLW */ { CPUFUNC(op_e1e0_11), 57824 }, /* ASLW */ { CPUFUNC(op_e1e8_11), 57832 }, /* ASLW */ { CPUFUNC(op_e1f0_11), 57840 }, /* ASLW */ { CPUFUNC(op_e1f8_11), 57848 }, /* ASLW */ { CPUFUNC(op_e1f9_11), 57849 }, /* ASLW */ { CPUFUNC(op_e2d0_11), 58064 }, /* LSRW */ { CPUFUNC(op_e2d8_11), 58072 }, /* LSRW */ { CPUFUNC(op_e2e0_11), 58080 }, /* LSRW */ { CPUFUNC(op_e2e8_11), 58088 }, /* LSRW */ { CPUFUNC(op_e2f0_11), 58096 }, /* LSRW */ { CPUFUNC(op_e2f8_11), 58104 }, /* LSRW */ { CPUFUNC(op_e2f9_11), 58105 }, /* LSRW */ { CPUFUNC(op_e3d0_11), 58320 }, /* LSLW */ { CPUFUNC(op_e3d8_11), 58328 }, /* LSLW */ { CPUFUNC(op_e3e0_11), 58336 }, /* LSLW */ { CPUFUNC(op_e3e8_11), 58344 }, /* LSLW */ { CPUFUNC(op_e3f0_11), 58352 }, /* LSLW */ { CPUFUNC(op_e3f8_11), 58360 }, /* LSLW */ { CPUFUNC(op_e3f9_11), 58361 }, /* LSLW */ { CPUFUNC(op_e4d0_11), 58576 }, /* ROXRW */ { CPUFUNC(op_e4d8_11), 58584 }, /* ROXRW */ { CPUFUNC(op_e4e0_11), 58592 }, /* ROXRW */ { CPUFUNC(op_e4e8_11), 58600 }, /* ROXRW */ { CPUFUNC(op_e4f0_11), 58608 }, /* ROXRW */ { CPUFUNC(op_e4f8_11), 58616 }, /* ROXRW */ { CPUFUNC(op_e4f9_11), 58617 }, /* ROXRW */ { CPUFUNC(op_e5d0_11), 58832 }, /* ROXLW */ { CPUFUNC(op_e5d8_11), 58840 }, /* ROXLW */ { CPUFUNC(op_e5e0_11), 58848 }, /* ROXLW */ { CPUFUNC(op_e5e8_11), 58856 }, /* ROXLW */ { CPUFUNC(op_e5f0_11), 58864 }, /* ROXLW */ { CPUFUNC(op_e5f8_11), 58872 }, /* ROXLW */ { CPUFUNC(op_e5f9_11), 58873 }, /* ROXLW */ { CPUFUNC(op_e6d0_11), 59088 }, /* RORW */ { CPUFUNC(op_e6d8_11), 59096 }, /* RORW */ { CPUFUNC(op_e6e0_11), 59104 }, /* RORW */ { CPUFUNC(op_e6e8_11), 59112 }, /* RORW */ { CPUFUNC(op_e6f0_11), 59120 }, /* RORW */ { CPUFUNC(op_e6f8_11), 59128 }, /* RORW */ { CPUFUNC(op_e6f9_11), 59129 }, /* RORW */ { CPUFUNC(op_e7d0_11), 59344 }, /* ROLW */ { CPUFUNC(op_e7d8_11), 59352 }, /* ROLW */ { CPUFUNC(op_e7e0_11), 59360 }, /* ROLW */ { CPUFUNC(op_e7e8_11), 59368 }, /* ROLW */ { CPUFUNC(op_e7f0_11), 59376 }, /* ROLW */ { CPUFUNC(op_e7f8_11), 59384 }, /* ROLW */ { CPUFUNC(op_e7f9_11), 59385 }, /* ROLW */ { 0, 0 }}; #endif /* CPUEMU_11 */ #ifdef CPUEMU_12 const struct cputbl CPUFUNC(op_smalltbl_12)[] = { { (cpuop_func*)CPUFUNC(op_0000_12), 0 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0010_12), 16 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0018_12), 24 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0020_12), 32 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0028_12), 40 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0030_12), 48 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0038_12), 56 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0039_12), 57 }, /* OR */ { (cpuop_func*)CPUFUNC(op_003c_12), 60 }, /* ORSR */ { (cpuop_func*)CPUFUNC(op_0040_12), 64 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0050_12), 80 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0058_12), 88 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0060_12), 96 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0068_12), 104 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0070_12), 112 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0078_12), 120 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0079_12), 121 }, /* OR */ { (cpuop_func*)CPUFUNC(op_007c_12), 124 }, /* ORSR */ { (cpuop_func*)CPUFUNC(op_0080_12), 128 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0090_12), 144 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0098_12), 152 }, /* OR */ { (cpuop_func*)CPUFUNC(op_00a0_12), 160 }, /* OR */ { (cpuop_func*)CPUFUNC(op_00a8_12), 168 }, /* OR */ { (cpuop_func*)CPUFUNC(op_00b0_12), 176 }, /* OR */ { (cpuop_func*)CPUFUNC(op_00b8_12), 184 }, /* OR */ { (cpuop_func*)CPUFUNC(op_00b9_12), 185 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0100_12), 256 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0108_12), 264 }, /* MVPMR */ { (cpuop_func*)CPUFUNC(op_0110_12), 272 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0118_12), 280 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0120_12), 288 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0128_12), 296 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0130_12), 304 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0138_12), 312 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0139_12), 313 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_013a_12), 314 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_013b_12), 315 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_013c_12), 316 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0140_12), 320 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0148_12), 328 }, /* MVPMR */ { (cpuop_func*)CPUFUNC(op_0150_12), 336 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0158_12), 344 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0160_12), 352 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0168_12), 360 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0170_12), 368 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0178_12), 376 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0179_12), 377 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_017a_12), 378 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_017b_12), 379 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0180_12), 384 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_0188_12), 392 }, /* MVPRM */ { (cpuop_func*)CPUFUNC(op_0190_12), 400 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_0198_12), 408 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_01a0_12), 416 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_01a8_12), 424 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_01b0_12), 432 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_01b8_12), 440 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_01b9_12), 441 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_01ba_12), 442 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_01bb_12), 443 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_01c0_12), 448 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_01c8_12), 456 }, /* MVPRM */ { (cpuop_func*)CPUFUNC(op_01d0_12), 464 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_01d8_12), 472 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_01e0_12), 480 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_01e8_12), 488 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_01f0_12), 496 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_01f8_12), 504 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_01f9_12), 505 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_01fa_12), 506 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_01fb_12), 507 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_0200_12), 512 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0210_12), 528 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0218_12), 536 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0220_12), 544 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0228_12), 552 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0230_12), 560 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0238_12), 568 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0239_12), 569 }, /* AND */ { (cpuop_func*)CPUFUNC(op_023c_12), 572 }, /* ANDSR */ { (cpuop_func*)CPUFUNC(op_0240_12), 576 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0250_12), 592 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0258_12), 600 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0260_12), 608 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0268_12), 616 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0270_12), 624 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0278_12), 632 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0279_12), 633 }, /* AND */ { (cpuop_func*)CPUFUNC(op_027c_12), 636 }, /* ANDSR */ { (cpuop_func*)CPUFUNC(op_0280_12), 640 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0290_12), 656 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0298_12), 664 }, /* AND */ { (cpuop_func*)CPUFUNC(op_02a0_12), 672 }, /* AND */ { (cpuop_func*)CPUFUNC(op_02a8_12), 680 }, /* AND */ { (cpuop_func*)CPUFUNC(op_02b0_12), 688 }, /* AND */ { (cpuop_func*)CPUFUNC(op_02b8_12), 696 }, /* AND */ { (cpuop_func*)CPUFUNC(op_02b9_12), 697 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0400_12), 1024 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0410_12), 1040 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0418_12), 1048 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0420_12), 1056 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0428_12), 1064 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0430_12), 1072 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0438_12), 1080 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0439_12), 1081 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0440_12), 1088 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0450_12), 1104 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0458_12), 1112 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0460_12), 1120 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0468_12), 1128 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0470_12), 1136 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0478_12), 1144 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0479_12), 1145 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0480_12), 1152 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0490_12), 1168 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0498_12), 1176 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_04a0_12), 1184 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_04a8_12), 1192 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_04b0_12), 1200 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_04b8_12), 1208 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_04b9_12), 1209 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0600_12), 1536 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0610_12), 1552 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0618_12), 1560 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0620_12), 1568 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0628_12), 1576 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0630_12), 1584 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0638_12), 1592 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0639_12), 1593 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0640_12), 1600 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0650_12), 1616 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0658_12), 1624 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0660_12), 1632 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0668_12), 1640 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0670_12), 1648 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0678_12), 1656 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0679_12), 1657 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0680_12), 1664 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0690_12), 1680 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0698_12), 1688 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_06a0_12), 1696 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_06a8_12), 1704 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_06b0_12), 1712 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_06b8_12), 1720 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_06b9_12), 1721 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0800_12), 2048 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0810_12), 2064 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0818_12), 2072 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0820_12), 2080 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0828_12), 2088 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0830_12), 2096 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0838_12), 2104 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0839_12), 2105 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_083a_12), 2106 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_083b_12), 2107 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_083c_12), 2108 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0840_12), 2112 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0850_12), 2128 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0858_12), 2136 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0860_12), 2144 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0868_12), 2152 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0870_12), 2160 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0878_12), 2168 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0879_12), 2169 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_087a_12), 2170 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_087b_12), 2171 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0880_12), 2176 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_0890_12), 2192 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_0898_12), 2200 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_08a0_12), 2208 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_08a8_12), 2216 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_08b0_12), 2224 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_08b8_12), 2232 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_08b9_12), 2233 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_08ba_12), 2234 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_08bb_12), 2235 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_08c0_12), 2240 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_08d0_12), 2256 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_08d8_12), 2264 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_08e0_12), 2272 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_08e8_12), 2280 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_08f0_12), 2288 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_08f8_12), 2296 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_08f9_12), 2297 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_08fa_12), 2298 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_08fb_12), 2299 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_0a00_12), 2560 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a10_12), 2576 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a18_12), 2584 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a20_12), 2592 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a28_12), 2600 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a30_12), 2608 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a38_12), 2616 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a39_12), 2617 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a3c_12), 2620 }, /* EORSR */ { (cpuop_func*)CPUFUNC(op_0a40_12), 2624 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a50_12), 2640 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a58_12), 2648 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a60_12), 2656 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a68_12), 2664 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a70_12), 2672 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a78_12), 2680 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a79_12), 2681 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a7c_12), 2684 }, /* EORSR */ { (cpuop_func*)CPUFUNC(op_0a80_12), 2688 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a90_12), 2704 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a98_12), 2712 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0aa0_12), 2720 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0aa8_12), 2728 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0ab0_12), 2736 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0ab8_12), 2744 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0ab9_12), 2745 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0c00_12), 3072 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c10_12), 3088 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c18_12), 3096 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c20_12), 3104 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c28_12), 3112 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c30_12), 3120 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c38_12), 3128 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c39_12), 3129 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c40_12), 3136 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c50_12), 3152 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c58_12), 3160 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c60_12), 3168 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c68_12), 3176 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c70_12), 3184 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c78_12), 3192 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c79_12), 3193 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c80_12), 3200 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c90_12), 3216 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c98_12), 3224 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0ca0_12), 3232 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0ca8_12), 3240 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0cb0_12), 3248 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0cb8_12), 3256 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0cb9_12), 3257 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_1000_12), 4096 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1010_12), 4112 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1018_12), 4120 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1020_12), 4128 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1028_12), 4136 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1030_12), 4144 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1038_12), 4152 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1039_12), 4153 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_103a_12), 4154 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_103b_12), 4155 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_103c_12), 4156 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1080_12), 4224 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1090_12), 4240 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1098_12), 4248 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10a0_12), 4256 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10a8_12), 4264 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10b0_12), 4272 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10b8_12), 4280 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10b9_12), 4281 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10ba_12), 4282 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10bb_12), 4283 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10bc_12), 4284 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10c0_12), 4288 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10d0_12), 4304 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10d8_12), 4312 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10e0_12), 4320 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10e8_12), 4328 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10f0_12), 4336 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10f8_12), 4344 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10f9_12), 4345 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10fa_12), 4346 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10fb_12), 4347 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10fc_12), 4348 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1100_12), 4352 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1110_12), 4368 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1118_12), 4376 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1120_12), 4384 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1128_12), 4392 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1130_12), 4400 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1138_12), 4408 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1139_12), 4409 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_113a_12), 4410 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_113b_12), 4411 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_113c_12), 4412 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1140_12), 4416 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1150_12), 4432 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1158_12), 4440 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1160_12), 4448 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1168_12), 4456 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1170_12), 4464 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1178_12), 4472 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1179_12), 4473 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_117a_12), 4474 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_117b_12), 4475 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_117c_12), 4476 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1180_12), 4480 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1190_12), 4496 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1198_12), 4504 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11a0_12), 4512 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11a8_12), 4520 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11b0_12), 4528 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11b8_12), 4536 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11b9_12), 4537 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11ba_12), 4538 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11bb_12), 4539 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11bc_12), 4540 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11c0_12), 4544 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11d0_12), 4560 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11d8_12), 4568 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11e0_12), 4576 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11e8_12), 4584 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11f0_12), 4592 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11f8_12), 4600 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11f9_12), 4601 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11fa_12), 4602 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11fb_12), 4603 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11fc_12), 4604 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_13c0_12), 5056 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_13d0_12), 5072 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_13d8_12), 5080 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_13e0_12), 5088 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_13e8_12), 5096 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_13f0_12), 5104 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_13f8_12), 5112 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_13f9_12), 5113 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_13fa_12), 5114 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_13fb_12), 5115 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_13fc_12), 5116 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2000_12), 8192 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2008_12), 8200 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2010_12), 8208 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2018_12), 8216 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2020_12), 8224 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2028_12), 8232 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2030_12), 8240 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2038_12), 8248 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2039_12), 8249 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_203a_12), 8250 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_203b_12), 8251 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_203c_12), 8252 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2040_12), 8256 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_2048_12), 8264 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_2050_12), 8272 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_2058_12), 8280 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_2060_12), 8288 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_2068_12), 8296 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_2070_12), 8304 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_2078_12), 8312 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_2079_12), 8313 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_207a_12), 8314 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_207b_12), 8315 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_207c_12), 8316 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_2080_12), 8320 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2088_12), 8328 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2090_12), 8336 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2098_12), 8344 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20a0_12), 8352 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20a8_12), 8360 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20b0_12), 8368 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20b8_12), 8376 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20b9_12), 8377 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20ba_12), 8378 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20bb_12), 8379 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20bc_12), 8380 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20c0_12), 8384 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20c8_12), 8392 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20d0_12), 8400 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20d8_12), 8408 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20e0_12), 8416 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20e8_12), 8424 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20f0_12), 8432 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20f8_12), 8440 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20f9_12), 8441 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20fa_12), 8442 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20fb_12), 8443 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20fc_12), 8444 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2100_12), 8448 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2108_12), 8456 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2110_12), 8464 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2118_12), 8472 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2120_12), 8480 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2128_12), 8488 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2130_12), 8496 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2138_12), 8504 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2139_12), 8505 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_213a_12), 8506 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_213b_12), 8507 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_213c_12), 8508 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2140_12), 8512 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2148_12), 8520 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2150_12), 8528 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2158_12), 8536 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2160_12), 8544 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2168_12), 8552 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2170_12), 8560 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2178_12), 8568 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2179_12), 8569 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_217a_12), 8570 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_217b_12), 8571 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_217c_12), 8572 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2180_12), 8576 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2188_12), 8584 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2190_12), 8592 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2198_12), 8600 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21a0_12), 8608 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21a8_12), 8616 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21b0_12), 8624 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21b8_12), 8632 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21b9_12), 8633 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21ba_12), 8634 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21bb_12), 8635 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21bc_12), 8636 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21c0_12), 8640 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21c8_12), 8648 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21d0_12), 8656 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21d8_12), 8664 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21e0_12), 8672 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21e8_12), 8680 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21f0_12), 8688 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21f8_12), 8696 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21f9_12), 8697 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21fa_12), 8698 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21fb_12), 8699 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21fc_12), 8700 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_23c0_12), 9152 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_23c8_12), 9160 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_23d0_12), 9168 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_23d8_12), 9176 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_23e0_12), 9184 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_23e8_12), 9192 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_23f0_12), 9200 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_23f8_12), 9208 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_23f9_12), 9209 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_23fa_12), 9210 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_23fb_12), 9211 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_23fc_12), 9212 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3000_12), 12288 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3008_12), 12296 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3010_12), 12304 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3018_12), 12312 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3020_12), 12320 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3028_12), 12328 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3030_12), 12336 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3038_12), 12344 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3039_12), 12345 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_303a_12), 12346 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_303b_12), 12347 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_303c_12), 12348 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3040_12), 12352 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_3048_12), 12360 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_3050_12), 12368 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_3058_12), 12376 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_3060_12), 12384 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_3068_12), 12392 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_3070_12), 12400 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_3078_12), 12408 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_3079_12), 12409 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_307a_12), 12410 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_307b_12), 12411 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_307c_12), 12412 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_3080_12), 12416 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3088_12), 12424 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3090_12), 12432 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3098_12), 12440 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30a0_12), 12448 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30a8_12), 12456 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30b0_12), 12464 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30b8_12), 12472 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30b9_12), 12473 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30ba_12), 12474 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30bb_12), 12475 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30bc_12), 12476 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30c0_12), 12480 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30c8_12), 12488 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30d0_12), 12496 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30d8_12), 12504 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30e0_12), 12512 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30e8_12), 12520 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30f0_12), 12528 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30f8_12), 12536 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30f9_12), 12537 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30fa_12), 12538 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30fb_12), 12539 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30fc_12), 12540 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3100_12), 12544 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3108_12), 12552 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3110_12), 12560 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3118_12), 12568 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3120_12), 12576 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3128_12), 12584 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3130_12), 12592 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3138_12), 12600 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3139_12), 12601 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_313a_12), 12602 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_313b_12), 12603 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_313c_12), 12604 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3140_12), 12608 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3148_12), 12616 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3150_12), 12624 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3158_12), 12632 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3160_12), 12640 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3168_12), 12648 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3170_12), 12656 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3178_12), 12664 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3179_12), 12665 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_317a_12), 12666 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_317b_12), 12667 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_317c_12), 12668 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3180_12), 12672 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3188_12), 12680 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3190_12), 12688 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3198_12), 12696 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31a0_12), 12704 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31a8_12), 12712 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31b0_12), 12720 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31b8_12), 12728 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31b9_12), 12729 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31ba_12), 12730 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31bb_12), 12731 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31bc_12), 12732 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31c0_12), 12736 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31c8_12), 12744 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31d0_12), 12752 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31d8_12), 12760 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31e0_12), 12768 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31e8_12), 12776 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31f0_12), 12784 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31f8_12), 12792 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31f9_12), 12793 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31fa_12), 12794 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31fb_12), 12795 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31fc_12), 12796 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_33c0_12), 13248 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_33c8_12), 13256 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_33d0_12), 13264 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_33d8_12), 13272 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_33e0_12), 13280 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_33e8_12), 13288 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_33f0_12), 13296 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_33f8_12), 13304 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_33f9_12), 13305 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_33fa_12), 13306 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_33fb_12), 13307 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_33fc_12), 13308 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_4000_12), 16384 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4010_12), 16400 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4018_12), 16408 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4020_12), 16416 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4028_12), 16424 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4030_12), 16432 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4038_12), 16440 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4039_12), 16441 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4040_12), 16448 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4050_12), 16464 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4058_12), 16472 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4060_12), 16480 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4068_12), 16488 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4070_12), 16496 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4078_12), 16504 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4079_12), 16505 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4080_12), 16512 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4090_12), 16528 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4098_12), 16536 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_40a0_12), 16544 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_40a8_12), 16552 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_40b0_12), 16560 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_40b8_12), 16568 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_40b9_12), 16569 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_40c0_12), 16576 }, /* MVSR2 */ { (cpuop_func*)CPUFUNC(op_40d0_12), 16592 }, /* MVSR2 */ { (cpuop_func*)CPUFUNC(op_40d8_12), 16600 }, /* MVSR2 */ { (cpuop_func*)CPUFUNC(op_40e0_12), 16608 }, /* MVSR2 */ { (cpuop_func*)CPUFUNC(op_40e8_12), 16616 }, /* MVSR2 */ { (cpuop_func*)CPUFUNC(op_40f0_12), 16624 }, /* MVSR2 */ { (cpuop_func*)CPUFUNC(op_40f8_12), 16632 }, /* MVSR2 */ { (cpuop_func*)CPUFUNC(op_40f9_12), 16633 }, /* MVSR2 */ { (cpuop_func*)CPUFUNC(op_4180_12), 16768 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_4190_12), 16784 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_4198_12), 16792 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_41a0_12), 16800 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_41a8_12), 16808 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_41b0_12), 16816 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_41b8_12), 16824 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_41b9_12), 16825 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_41ba_12), 16826 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_41bb_12), 16827 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_41bc_12), 16828 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_41d0_12), 16848 }, /* LEA */ { (cpuop_func*)CPUFUNC(op_41e8_12), 16872 }, /* LEA */ { (cpuop_func*)CPUFUNC(op_41f0_12), 16880 }, /* LEA */ { (cpuop_func*)CPUFUNC(op_41f8_12), 16888 }, /* LEA */ { (cpuop_func*)CPUFUNC(op_41f9_12), 16889 }, /* LEA */ { (cpuop_func*)CPUFUNC(op_41fa_12), 16890 }, /* LEA */ { (cpuop_func*)CPUFUNC(op_41fb_12), 16891 }, /* LEA */ { (cpuop_func*)CPUFUNC(op_4200_12), 16896 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4210_12), 16912 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4218_12), 16920 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4220_12), 16928 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4228_12), 16936 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4230_12), 16944 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4238_12), 16952 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4239_12), 16953 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4240_12), 16960 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4250_12), 16976 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4258_12), 16984 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4260_12), 16992 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4268_12), 17000 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4270_12), 17008 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4278_12), 17016 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4279_12), 17017 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4280_12), 17024 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4290_12), 17040 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4298_12), 17048 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_42a0_12), 17056 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_42a8_12), 17064 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_42b0_12), 17072 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_42b8_12), 17080 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_42b9_12), 17081 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4400_12), 17408 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4410_12), 17424 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4418_12), 17432 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4420_12), 17440 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4428_12), 17448 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4430_12), 17456 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4438_12), 17464 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4439_12), 17465 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4440_12), 17472 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4450_12), 17488 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4458_12), 17496 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4460_12), 17504 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4468_12), 17512 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4470_12), 17520 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4478_12), 17528 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4479_12), 17529 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4480_12), 17536 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4490_12), 17552 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4498_12), 17560 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_44a0_12), 17568 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_44a8_12), 17576 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_44b0_12), 17584 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_44b8_12), 17592 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_44b9_12), 17593 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_44c0_12), 17600 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_44d0_12), 17616 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_44d8_12), 17624 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_44e0_12), 17632 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_44e8_12), 17640 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_44f0_12), 17648 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_44f8_12), 17656 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_44f9_12), 17657 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_44fa_12), 17658 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_44fb_12), 17659 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_44fc_12), 17660 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_4600_12), 17920 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4610_12), 17936 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4618_12), 17944 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4620_12), 17952 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4628_12), 17960 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4630_12), 17968 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4638_12), 17976 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4639_12), 17977 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4640_12), 17984 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4650_12), 18000 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4658_12), 18008 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4660_12), 18016 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4668_12), 18024 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4670_12), 18032 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4678_12), 18040 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4679_12), 18041 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4680_12), 18048 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4690_12), 18064 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4698_12), 18072 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_46a0_12), 18080 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_46a8_12), 18088 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_46b0_12), 18096 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_46b8_12), 18104 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_46b9_12), 18105 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_46c0_12), 18112 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_46d0_12), 18128 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_46d8_12), 18136 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_46e0_12), 18144 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_46e8_12), 18152 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_46f0_12), 18160 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_46f8_12), 18168 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_46f9_12), 18169 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_46fa_12), 18170 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_46fb_12), 18171 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_46fc_12), 18172 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_4800_12), 18432 }, /* NBCD */ { (cpuop_func*)CPUFUNC(op_4810_12), 18448 }, /* NBCD */ { (cpuop_func*)CPUFUNC(op_4818_12), 18456 }, /* NBCD */ { (cpuop_func*)CPUFUNC(op_4820_12), 18464 }, /* NBCD */ { (cpuop_func*)CPUFUNC(op_4828_12), 18472 }, /* NBCD */ { (cpuop_func*)CPUFUNC(op_4830_12), 18480 }, /* NBCD */ { (cpuop_func*)CPUFUNC(op_4838_12), 18488 }, /* NBCD */ { (cpuop_func*)CPUFUNC(op_4839_12), 18489 }, /* NBCD */ { (cpuop_func*)CPUFUNC(op_4840_12), 18496 }, /* SWAP */ { (cpuop_func*)CPUFUNC(op_4850_12), 18512 }, /* PEA */ { (cpuop_func*)CPUFUNC(op_4868_12), 18536 }, /* PEA */ { (cpuop_func*)CPUFUNC(op_4870_12), 18544 }, /* PEA */ { (cpuop_func*)CPUFUNC(op_4878_12), 18552 }, /* PEA */ { (cpuop_func*)CPUFUNC(op_4879_12), 18553 }, /* PEA */ { (cpuop_func*)CPUFUNC(op_487a_12), 18554 }, /* PEA */ { (cpuop_func*)CPUFUNC(op_487b_12), 18555 }, /* PEA */ { (cpuop_func*)CPUFUNC(op_4880_12), 18560 }, /* EXT */ { (cpuop_func*)CPUFUNC(op_4890_12), 18576 }, /* MVMLE */ { (cpuop_func*)CPUFUNC(op_48a0_12), 18592 }, /* MVMLE */ { (cpuop_func*)CPUFUNC(op_48a8_12), 18600 }, /* MVMLE */ { (cpuop_func*)CPUFUNC(op_48b0_12), 18608 }, /* MVMLE */ { (cpuop_func*)CPUFUNC(op_48b8_12), 18616 }, /* MVMLE */ { (cpuop_func*)CPUFUNC(op_48b9_12), 18617 }, /* MVMLE */ { (cpuop_func*)CPUFUNC(op_48c0_12), 18624 }, /* EXT */ { (cpuop_func*)CPUFUNC(op_48d0_12), 18640 }, /* MVMLE */ { (cpuop_func*)CPUFUNC(op_48e0_12), 18656 }, /* MVMLE */ { (cpuop_func*)CPUFUNC(op_48e8_12), 18664 }, /* MVMLE */ { (cpuop_func*)CPUFUNC(op_48f0_12), 18672 }, /* MVMLE */ { (cpuop_func*)CPUFUNC(op_48f8_12), 18680 }, /* MVMLE */ { (cpuop_func*)CPUFUNC(op_48f9_12), 18681 }, /* MVMLE */ { (cpuop_func*)CPUFUNC(op_4a00_12), 18944 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a10_12), 18960 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a18_12), 18968 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a20_12), 18976 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a28_12), 18984 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a30_12), 18992 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a38_12), 19000 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a39_12), 19001 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a3c_12), 19004 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a40_12), 19008 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a50_12), 19024 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a58_12), 19032 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a60_12), 19040 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a68_12), 19048 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a70_12), 19056 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a78_12), 19064 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a79_12), 19065 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a7c_12), 19068 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a80_12), 19072 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a90_12), 19088 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a98_12), 19096 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4aa0_12), 19104 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4aa8_12), 19112 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4ab0_12), 19120 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4ab8_12), 19128 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4ab9_12), 19129 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4abc_12), 19132 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4ac0_12), 19136 }, /* TAS */ { (cpuop_func*)CPUFUNC(op_4ad0_12), 19152 }, /* TAS */ { (cpuop_func*)CPUFUNC(op_4ad8_12), 19160 }, /* TAS */ { (cpuop_func*)CPUFUNC(op_4ae0_12), 19168 }, /* TAS */ { (cpuop_func*)CPUFUNC(op_4ae8_12), 19176 }, /* TAS */ { (cpuop_func*)CPUFUNC(op_4af0_12), 19184 }, /* TAS */ { (cpuop_func*)CPUFUNC(op_4af8_12), 19192 }, /* TAS */ { (cpuop_func*)CPUFUNC(op_4af9_12), 19193 }, /* TAS */ { (cpuop_func*)CPUFUNC(op_4c90_12), 19600 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4c98_12), 19608 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4ca8_12), 19624 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4cb0_12), 19632 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4cb8_12), 19640 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4cb9_12), 19641 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4cba_12), 19642 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4cbb_12), 19643 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4cd0_12), 19664 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4cd8_12), 19672 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4ce8_12), 19688 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4cf0_12), 19696 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4cf8_12), 19704 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4cf9_12), 19705 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4cfa_12), 19706 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4cfb_12), 19707 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4e40_12), 20032 }, /* TRAP */ { (cpuop_func*)CPUFUNC(op_4e50_12), 20048 }, /* LINK */ { (cpuop_func*)CPUFUNC(op_4e58_12), 20056 }, /* UNLK */ { (cpuop_func*)CPUFUNC(op_4e60_12), 20064 }, /* MVR2USP */ { (cpuop_func*)CPUFUNC(op_4e68_12), 20072 }, /* MVUSP2R */ { (cpuop_func*)CPUFUNC(op_4e70_12), 20080 }, /* RESET */ { (cpuop_func*)CPUFUNC(op_4e71_12), 20081 }, /* NOP */ { (cpuop_func*)CPUFUNC(op_4e72_12), 20082 }, /* STOP */ { (cpuop_func*)CPUFUNC(op_4e73_12), 20083 }, /* RTE */ { (cpuop_func*)CPUFUNC(op_4e74_12), 20084 }, /* RTD */ { (cpuop_func*)CPUFUNC(op_4e75_12), 20085 }, /* RTS */ { (cpuop_func*)CPUFUNC(op_4e76_12), 20086 }, /* TRAPV */ { (cpuop_func*)CPUFUNC(op_4e77_12), 20087 }, /* RTR */ { (cpuop_func*)CPUFUNC(op_4e90_12), 20112 }, /* JSR */ { (cpuop_func*)CPUFUNC(op_4ea8_12), 20136 }, /* JSR */ { (cpuop_func*)CPUFUNC(op_4eb0_12), 20144 }, /* JSR */ { (cpuop_func*)CPUFUNC(op_4eb8_12), 20152 }, /* JSR */ { (cpuop_func*)CPUFUNC(op_4eb9_12), 20153 }, /* JSR */ { (cpuop_func*)CPUFUNC(op_4eba_12), 20154 }, /* JSR */ { (cpuop_func*)CPUFUNC(op_4ebb_12), 20155 }, /* JSR */ { (cpuop_func*)CPUFUNC(op_4ed0_12), 20176 }, /* JMP */ { (cpuop_func*)CPUFUNC(op_4ee8_12), 20200 }, /* JMP */ { (cpuop_func*)CPUFUNC(op_4ef0_12), 20208 }, /* JMP */ { (cpuop_func*)CPUFUNC(op_4ef8_12), 20216 }, /* JMP */ { (cpuop_func*)CPUFUNC(op_4ef9_12), 20217 }, /* JMP */ { (cpuop_func*)CPUFUNC(op_4efa_12), 20218 }, /* JMP */ { (cpuop_func*)CPUFUNC(op_4efb_12), 20219 }, /* JMP */ { (cpuop_func*)CPUFUNC(op_5000_12), 20480 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5010_12), 20496 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5018_12), 20504 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5020_12), 20512 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5028_12), 20520 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5030_12), 20528 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5038_12), 20536 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5039_12), 20537 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5040_12), 20544 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5048_12), 20552 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_5050_12), 20560 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5058_12), 20568 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5060_12), 20576 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5068_12), 20584 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5070_12), 20592 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5078_12), 20600 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5079_12), 20601 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5080_12), 20608 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5088_12), 20616 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_5090_12), 20624 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5098_12), 20632 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_50a0_12), 20640 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_50a8_12), 20648 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_50b0_12), 20656 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_50b8_12), 20664 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_50b9_12), 20665 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_50c0_12), 20672 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_50c8_12), 20680 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_50d0_12), 20688 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_50d8_12), 20696 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_50e0_12), 20704 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_50e8_12), 20712 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_50f0_12), 20720 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_50f8_12), 20728 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_50f9_12), 20729 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5100_12), 20736 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5110_12), 20752 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5118_12), 20760 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5120_12), 20768 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5128_12), 20776 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5130_12), 20784 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5138_12), 20792 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5139_12), 20793 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5140_12), 20800 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5148_12), 20808 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_5150_12), 20816 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5158_12), 20824 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5160_12), 20832 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5168_12), 20840 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5170_12), 20848 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5178_12), 20856 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5179_12), 20857 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5180_12), 20864 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5188_12), 20872 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_5190_12), 20880 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5198_12), 20888 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_51a0_12), 20896 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_51a8_12), 20904 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_51b0_12), 20912 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_51b8_12), 20920 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_51b9_12), 20921 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_51c0_12), 20928 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_51c8_12), 20936 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_51d0_12), 20944 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_51d8_12), 20952 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_51e0_12), 20960 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_51e8_12), 20968 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_51f0_12), 20976 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_51f8_12), 20984 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_51f9_12), 20985 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_52c0_12), 21184 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_52c8_12), 21192 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_52d0_12), 21200 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_52d8_12), 21208 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_52e0_12), 21216 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_52e8_12), 21224 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_52f0_12), 21232 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_52f8_12), 21240 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_52f9_12), 21241 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_53c0_12), 21440 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_53c8_12), 21448 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_53d0_12), 21456 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_53d8_12), 21464 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_53e0_12), 21472 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_53e8_12), 21480 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_53f0_12), 21488 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_53f8_12), 21496 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_53f9_12), 21497 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_54c0_12), 21696 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_54c8_12), 21704 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_54d0_12), 21712 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_54d8_12), 21720 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_54e0_12), 21728 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_54e8_12), 21736 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_54f0_12), 21744 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_54f8_12), 21752 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_54f9_12), 21753 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_55c0_12), 21952 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_55c8_12), 21960 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_55d0_12), 21968 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_55d8_12), 21976 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_55e0_12), 21984 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_55e8_12), 21992 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_55f0_12), 22000 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_55f8_12), 22008 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_55f9_12), 22009 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_56c0_12), 22208 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_56c8_12), 22216 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_56d0_12), 22224 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_56d8_12), 22232 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_56e0_12), 22240 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_56e8_12), 22248 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_56f0_12), 22256 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_56f8_12), 22264 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_56f9_12), 22265 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_57c0_12), 22464 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_57c8_12), 22472 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_57d0_12), 22480 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_57d8_12), 22488 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_57e0_12), 22496 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_57e8_12), 22504 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_57f0_12), 22512 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_57f8_12), 22520 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_57f9_12), 22521 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_58c0_12), 22720 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_58c8_12), 22728 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_58d0_12), 22736 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_58d8_12), 22744 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_58e0_12), 22752 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_58e8_12), 22760 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_58f0_12), 22768 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_58f8_12), 22776 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_58f9_12), 22777 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_59c0_12), 22976 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_59c8_12), 22984 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_59d0_12), 22992 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_59d8_12), 23000 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_59e0_12), 23008 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_59e8_12), 23016 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_59f0_12), 23024 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_59f8_12), 23032 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_59f9_12), 23033 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ac0_12), 23232 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ac8_12), 23240 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_5ad0_12), 23248 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ad8_12), 23256 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ae0_12), 23264 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ae8_12), 23272 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5af0_12), 23280 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5af8_12), 23288 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5af9_12), 23289 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5bc0_12), 23488 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5bc8_12), 23496 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_5bd0_12), 23504 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5bd8_12), 23512 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5be0_12), 23520 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5be8_12), 23528 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5bf0_12), 23536 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5bf8_12), 23544 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5bf9_12), 23545 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5cc0_12), 23744 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5cc8_12), 23752 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_5cd0_12), 23760 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5cd8_12), 23768 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ce0_12), 23776 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ce8_12), 23784 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5cf0_12), 23792 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5cf8_12), 23800 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5cf9_12), 23801 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5dc0_12), 24000 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5dc8_12), 24008 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_5dd0_12), 24016 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5dd8_12), 24024 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5de0_12), 24032 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5de8_12), 24040 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5df0_12), 24048 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5df8_12), 24056 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5df9_12), 24057 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ec0_12), 24256 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ec8_12), 24264 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_5ed0_12), 24272 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ed8_12), 24280 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ee0_12), 24288 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ee8_12), 24296 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ef0_12), 24304 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ef8_12), 24312 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ef9_12), 24313 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5fc0_12), 24512 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5fc8_12), 24520 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_5fd0_12), 24528 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5fd8_12), 24536 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5fe0_12), 24544 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5fe8_12), 24552 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ff0_12), 24560 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ff8_12), 24568 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ff9_12), 24569 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_6000_12), 24576 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6001_12), 24577 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_60ff_12), 24831 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6100_12), 24832 }, /* BSR */ { (cpuop_func*)CPUFUNC(op_6101_12), 24833 }, /* BSR */ { (cpuop_func*)CPUFUNC(op_61ff_12), 25087 }, /* BSR */ { (cpuop_func*)CPUFUNC(op_6200_12), 25088 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6201_12), 25089 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_62ff_12), 25343 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6300_12), 25344 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6301_12), 25345 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_63ff_12), 25599 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6400_12), 25600 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6401_12), 25601 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_64ff_12), 25855 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6500_12), 25856 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6501_12), 25857 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_65ff_12), 26111 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6600_12), 26112 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6601_12), 26113 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_66ff_12), 26367 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6700_12), 26368 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6701_12), 26369 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_67ff_12), 26623 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6800_12), 26624 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6801_12), 26625 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_68ff_12), 26879 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6900_12), 26880 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6901_12), 26881 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_69ff_12), 27135 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6a00_12), 27136 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6a01_12), 27137 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6aff_12), 27391 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6b00_12), 27392 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6b01_12), 27393 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6bff_12), 27647 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6c00_12), 27648 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6c01_12), 27649 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6cff_12), 27903 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6d00_12), 27904 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6d01_12), 27905 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6dff_12), 28159 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6e00_12), 28160 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6e01_12), 28161 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6eff_12), 28415 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6f00_12), 28416 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6f01_12), 28417 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6fff_12), 28671 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_7000_12), 28672 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_8000_12), 32768 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8010_12), 32784 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8018_12), 32792 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8020_12), 32800 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8028_12), 32808 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8030_12), 32816 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8038_12), 32824 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8039_12), 32825 }, /* OR */ { (cpuop_func*)CPUFUNC(op_803a_12), 32826 }, /* OR */ { (cpuop_func*)CPUFUNC(op_803b_12), 32827 }, /* OR */ { (cpuop_func*)CPUFUNC(op_803c_12), 32828 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8040_12), 32832 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8050_12), 32848 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8058_12), 32856 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8060_12), 32864 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8068_12), 32872 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8070_12), 32880 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8078_12), 32888 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8079_12), 32889 }, /* OR */ { (cpuop_func*)CPUFUNC(op_807a_12), 32890 }, /* OR */ { (cpuop_func*)CPUFUNC(op_807b_12), 32891 }, /* OR */ { (cpuop_func*)CPUFUNC(op_807c_12), 32892 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8080_12), 32896 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8090_12), 32912 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8098_12), 32920 }, /* OR */ { (cpuop_func*)CPUFUNC(op_80a0_12), 32928 }, /* OR */ { (cpuop_func*)CPUFUNC(op_80a8_12), 32936 }, /* OR */ { (cpuop_func*)CPUFUNC(op_80b0_12), 32944 }, /* OR */ { (cpuop_func*)CPUFUNC(op_80b8_12), 32952 }, /* OR */ { (cpuop_func*)CPUFUNC(op_80b9_12), 32953 }, /* OR */ { (cpuop_func*)CPUFUNC(op_80ba_12), 32954 }, /* OR */ { (cpuop_func*)CPUFUNC(op_80bb_12), 32955 }, /* OR */ { (cpuop_func*)CPUFUNC(op_80bc_12), 32956 }, /* OR */ { (cpuop_func*)CPUFUNC(op_80c0_12), 32960 }, /* DIVU */ { (cpuop_func*)CPUFUNC(op_80d0_12), 32976 }, /* DIVU */ { (cpuop_func*)CPUFUNC(op_80d8_12), 32984 }, /* DIVU */ { (cpuop_func*)CPUFUNC(op_80e0_12), 32992 }, /* DIVU */ { (cpuop_func*)CPUFUNC(op_80e8_12), 33000 }, /* DIVU */ { (cpuop_func*)CPUFUNC(op_80f0_12), 33008 }, /* DIVU */ { (cpuop_func*)CPUFUNC(op_80f8_12), 33016 }, /* DIVU */ { (cpuop_func*)CPUFUNC(op_80f9_12), 33017 }, /* DIVU */ { (cpuop_func*)CPUFUNC(op_80fa_12), 33018 }, /* DIVU */ { (cpuop_func*)CPUFUNC(op_80fb_12), 33019 }, /* DIVU */ { (cpuop_func*)CPUFUNC(op_80fc_12), 33020 }, /* DIVU */ { (cpuop_func*)CPUFUNC(op_8100_12), 33024 }, /* SBCD */ { (cpuop_func*)CPUFUNC(op_8108_12), 33032 }, /* SBCD */ { (cpuop_func*)CPUFUNC(op_8110_12), 33040 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8118_12), 33048 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8120_12), 33056 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8128_12), 33064 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8130_12), 33072 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8138_12), 33080 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8139_12), 33081 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8150_12), 33104 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8158_12), 33112 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8160_12), 33120 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8168_12), 33128 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8170_12), 33136 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8178_12), 33144 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8179_12), 33145 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8190_12), 33168 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8198_12), 33176 }, /* OR */ { (cpuop_func*)CPUFUNC(op_81a0_12), 33184 }, /* OR */ { (cpuop_func*)CPUFUNC(op_81a8_12), 33192 }, /* OR */ { (cpuop_func*)CPUFUNC(op_81b0_12), 33200 }, /* OR */ { (cpuop_func*)CPUFUNC(op_81b8_12), 33208 }, /* OR */ { (cpuop_func*)CPUFUNC(op_81b9_12), 33209 }, /* OR */ { (cpuop_func*)CPUFUNC(op_81c0_12), 33216 }, /* DIVS */ { (cpuop_func*)CPUFUNC(op_81d0_12), 33232 }, /* DIVS */ { (cpuop_func*)CPUFUNC(op_81d8_12), 33240 }, /* DIVS */ { (cpuop_func*)CPUFUNC(op_81e0_12), 33248 }, /* DIVS */ { (cpuop_func*)CPUFUNC(op_81e8_12), 33256 }, /* DIVS */ { (cpuop_func*)CPUFUNC(op_81f0_12), 33264 }, /* DIVS */ { (cpuop_func*)CPUFUNC(op_81f8_12), 33272 }, /* DIVS */ { (cpuop_func*)CPUFUNC(op_81f9_12), 33273 }, /* DIVS */ { (cpuop_func*)CPUFUNC(op_81fa_12), 33274 }, /* DIVS */ { (cpuop_func*)CPUFUNC(op_81fb_12), 33275 }, /* DIVS */ { (cpuop_func*)CPUFUNC(op_81fc_12), 33276 }, /* DIVS */ { (cpuop_func*)CPUFUNC(op_9000_12), 36864 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9010_12), 36880 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9018_12), 36888 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9020_12), 36896 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9028_12), 36904 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9030_12), 36912 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9038_12), 36920 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9039_12), 36921 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_903a_12), 36922 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_903b_12), 36923 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_903c_12), 36924 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9040_12), 36928 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9048_12), 36936 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9050_12), 36944 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9058_12), 36952 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9060_12), 36960 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9068_12), 36968 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9070_12), 36976 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9078_12), 36984 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9079_12), 36985 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_907a_12), 36986 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_907b_12), 36987 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_907c_12), 36988 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9080_12), 36992 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9088_12), 37000 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9090_12), 37008 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9098_12), 37016 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_90a0_12), 37024 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_90a8_12), 37032 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_90b0_12), 37040 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_90b8_12), 37048 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_90b9_12), 37049 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_90ba_12), 37050 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_90bb_12), 37051 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_90bc_12), 37052 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_90c0_12), 37056 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_90c8_12), 37064 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_90d0_12), 37072 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_90d8_12), 37080 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_90e0_12), 37088 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_90e8_12), 37096 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_90f0_12), 37104 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_90f8_12), 37112 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_90f9_12), 37113 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_90fa_12), 37114 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_90fb_12), 37115 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_90fc_12), 37116 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_9100_12), 37120 }, /* SUBX */ { (cpuop_func*)CPUFUNC(op_9108_12), 37128 }, /* SUBX */ { (cpuop_func*)CPUFUNC(op_9110_12), 37136 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9118_12), 37144 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9120_12), 37152 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9128_12), 37160 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9130_12), 37168 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9138_12), 37176 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9139_12), 37177 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9140_12), 37184 }, /* SUBX */ { (cpuop_func*)CPUFUNC(op_9148_12), 37192 }, /* SUBX */ { (cpuop_func*)CPUFUNC(op_9150_12), 37200 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9158_12), 37208 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9160_12), 37216 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9168_12), 37224 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9170_12), 37232 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9178_12), 37240 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9179_12), 37241 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9180_12), 37248 }, /* SUBX */ { (cpuop_func*)CPUFUNC(op_9188_12), 37256 }, /* SUBX */ { (cpuop_func*)CPUFUNC(op_9190_12), 37264 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9198_12), 37272 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_91a0_12), 37280 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_91a8_12), 37288 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_91b0_12), 37296 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_91b8_12), 37304 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_91b9_12), 37305 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_91c0_12), 37312 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_91c8_12), 37320 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_91d0_12), 37328 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_91d8_12), 37336 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_91e0_12), 37344 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_91e8_12), 37352 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_91f0_12), 37360 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_91f8_12), 37368 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_91f9_12), 37369 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_91fa_12), 37370 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_91fb_12), 37371 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_91fc_12), 37372 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_b000_12), 45056 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b010_12), 45072 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b018_12), 45080 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b020_12), 45088 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b028_12), 45096 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b030_12), 45104 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b038_12), 45112 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b039_12), 45113 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b03a_12), 45114 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b03b_12), 45115 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b03c_12), 45116 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b040_12), 45120 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b048_12), 45128 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b050_12), 45136 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b058_12), 45144 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b060_12), 45152 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b068_12), 45160 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b070_12), 45168 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b078_12), 45176 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b079_12), 45177 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b07a_12), 45178 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b07b_12), 45179 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b07c_12), 45180 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b080_12), 45184 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b088_12), 45192 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b090_12), 45200 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b098_12), 45208 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b0a0_12), 45216 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b0a8_12), 45224 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b0b0_12), 45232 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b0b8_12), 45240 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b0b9_12), 45241 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b0ba_12), 45242 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b0bb_12), 45243 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b0bc_12), 45244 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b0c0_12), 45248 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b0c8_12), 45256 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b0d0_12), 45264 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b0d8_12), 45272 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b0e0_12), 45280 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b0e8_12), 45288 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b0f0_12), 45296 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b0f8_12), 45304 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b0f9_12), 45305 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b0fa_12), 45306 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b0fb_12), 45307 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b0fc_12), 45308 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b100_12), 45312 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b108_12), 45320 }, /* CMPM */ { (cpuop_func*)CPUFUNC(op_b110_12), 45328 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b118_12), 45336 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b120_12), 45344 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b128_12), 45352 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b130_12), 45360 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b138_12), 45368 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b139_12), 45369 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b140_12), 45376 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b148_12), 45384 }, /* CMPM */ { (cpuop_func*)CPUFUNC(op_b150_12), 45392 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b158_12), 45400 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b160_12), 45408 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b168_12), 45416 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b170_12), 45424 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b178_12), 45432 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b179_12), 45433 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b180_12), 45440 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b188_12), 45448 }, /* CMPM */ { (cpuop_func*)CPUFUNC(op_b190_12), 45456 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b198_12), 45464 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b1a0_12), 45472 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b1a8_12), 45480 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b1b0_12), 45488 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b1b8_12), 45496 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b1b9_12), 45497 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b1c0_12), 45504 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b1c8_12), 45512 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b1d0_12), 45520 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b1d8_12), 45528 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b1e0_12), 45536 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b1e8_12), 45544 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b1f0_12), 45552 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b1f8_12), 45560 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b1f9_12), 45561 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b1fa_12), 45562 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b1fb_12), 45563 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b1fc_12), 45564 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_c000_12), 49152 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c010_12), 49168 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c018_12), 49176 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c020_12), 49184 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c028_12), 49192 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c030_12), 49200 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c038_12), 49208 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c039_12), 49209 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c03a_12), 49210 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c03b_12), 49211 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c03c_12), 49212 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c040_12), 49216 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c050_12), 49232 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c058_12), 49240 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c060_12), 49248 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c068_12), 49256 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c070_12), 49264 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c078_12), 49272 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c079_12), 49273 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c07a_12), 49274 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c07b_12), 49275 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c07c_12), 49276 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c080_12), 49280 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c090_12), 49296 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c098_12), 49304 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c0a0_12), 49312 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c0a8_12), 49320 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c0b0_12), 49328 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c0b8_12), 49336 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c0b9_12), 49337 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c0ba_12), 49338 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c0bb_12), 49339 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c0bc_12), 49340 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c0c0_12), 49344 }, /* MULU */ { (cpuop_func*)CPUFUNC(op_c0d0_12), 49360 }, /* MULU */ { (cpuop_func*)CPUFUNC(op_c0d8_12), 49368 }, /* MULU */ { (cpuop_func*)CPUFUNC(op_c0e0_12), 49376 }, /* MULU */ { (cpuop_func*)CPUFUNC(op_c0e8_12), 49384 }, /* MULU */ { (cpuop_func*)CPUFUNC(op_c0f0_12), 49392 }, /* MULU */ { (cpuop_func*)CPUFUNC(op_c0f8_12), 49400 }, /* MULU */ { (cpuop_func*)CPUFUNC(op_c0f9_12), 49401 }, /* MULU */ { (cpuop_func*)CPUFUNC(op_c0fa_12), 49402 }, /* MULU */ { (cpuop_func*)CPUFUNC(op_c0fb_12), 49403 }, /* MULU */ { (cpuop_func*)CPUFUNC(op_c0fc_12), 49404 }, /* MULU */ { (cpuop_func*)CPUFUNC(op_c100_12), 49408 }, /* ABCD */ { (cpuop_func*)CPUFUNC(op_c108_12), 49416 }, /* ABCD */ { (cpuop_func*)CPUFUNC(op_c110_12), 49424 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c118_12), 49432 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c120_12), 49440 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c128_12), 49448 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c130_12), 49456 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c138_12), 49464 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c139_12), 49465 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c140_12), 49472 }, /* EXG */ { (cpuop_func*)CPUFUNC(op_c148_12), 49480 }, /* EXG */ { (cpuop_func*)CPUFUNC(op_c150_12), 49488 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c158_12), 49496 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c160_12), 49504 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c168_12), 49512 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c170_12), 49520 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c178_12), 49528 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c179_12), 49529 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c188_12), 49544 }, /* EXG */ { (cpuop_func*)CPUFUNC(op_c190_12), 49552 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c198_12), 49560 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c1a0_12), 49568 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c1a8_12), 49576 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c1b0_12), 49584 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c1b8_12), 49592 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c1b9_12), 49593 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c1c0_12), 49600 }, /* MULS */ { (cpuop_func*)CPUFUNC(op_c1d0_12), 49616 }, /* MULS */ { (cpuop_func*)CPUFUNC(op_c1d8_12), 49624 }, /* MULS */ { (cpuop_func*)CPUFUNC(op_c1e0_12), 49632 }, /* MULS */ { (cpuop_func*)CPUFUNC(op_c1e8_12), 49640 }, /* MULS */ { (cpuop_func*)CPUFUNC(op_c1f0_12), 49648 }, /* MULS */ { (cpuop_func*)CPUFUNC(op_c1f8_12), 49656 }, /* MULS */ { (cpuop_func*)CPUFUNC(op_c1f9_12), 49657 }, /* MULS */ { (cpuop_func*)CPUFUNC(op_c1fa_12), 49658 }, /* MULS */ { (cpuop_func*)CPUFUNC(op_c1fb_12), 49659 }, /* MULS */ { (cpuop_func*)CPUFUNC(op_c1fc_12), 49660 }, /* MULS */ { (cpuop_func*)CPUFUNC(op_d000_12), 53248 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d010_12), 53264 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d018_12), 53272 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d020_12), 53280 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d028_12), 53288 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d030_12), 53296 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d038_12), 53304 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d039_12), 53305 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d03a_12), 53306 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d03b_12), 53307 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d03c_12), 53308 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d040_12), 53312 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d048_12), 53320 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d050_12), 53328 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d058_12), 53336 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d060_12), 53344 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d068_12), 53352 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d070_12), 53360 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d078_12), 53368 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d079_12), 53369 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d07a_12), 53370 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d07b_12), 53371 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d07c_12), 53372 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d080_12), 53376 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d088_12), 53384 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d090_12), 53392 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d098_12), 53400 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d0a0_12), 53408 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d0a8_12), 53416 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d0b0_12), 53424 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d0b8_12), 53432 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d0b9_12), 53433 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d0ba_12), 53434 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d0bb_12), 53435 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d0bc_12), 53436 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d0c0_12), 53440 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d0c8_12), 53448 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d0d0_12), 53456 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d0d8_12), 53464 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d0e0_12), 53472 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d0e8_12), 53480 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d0f0_12), 53488 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d0f8_12), 53496 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d0f9_12), 53497 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d0fa_12), 53498 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d0fb_12), 53499 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d0fc_12), 53500 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d100_12), 53504 }, /* ADDX */ { (cpuop_func*)CPUFUNC(op_d108_12), 53512 }, /* ADDX */ { (cpuop_func*)CPUFUNC(op_d110_12), 53520 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d118_12), 53528 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d120_12), 53536 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d128_12), 53544 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d130_12), 53552 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d138_12), 53560 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d139_12), 53561 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d140_12), 53568 }, /* ADDX */ { (cpuop_func*)CPUFUNC(op_d148_12), 53576 }, /* ADDX */ { (cpuop_func*)CPUFUNC(op_d150_12), 53584 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d158_12), 53592 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d160_12), 53600 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d168_12), 53608 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d170_12), 53616 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d178_12), 53624 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d179_12), 53625 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d180_12), 53632 }, /* ADDX */ { (cpuop_func*)CPUFUNC(op_d188_12), 53640 }, /* ADDX */ { (cpuop_func*)CPUFUNC(op_d190_12), 53648 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d198_12), 53656 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d1a0_12), 53664 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d1a8_12), 53672 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d1b0_12), 53680 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d1b8_12), 53688 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d1b9_12), 53689 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d1c0_12), 53696 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d1c8_12), 53704 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d1d0_12), 53712 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d1d8_12), 53720 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d1e0_12), 53728 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d1e8_12), 53736 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d1f0_12), 53744 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d1f8_12), 53752 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d1f9_12), 53753 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d1fa_12), 53754 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d1fb_12), 53755 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d1fc_12), 53756 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_e000_12), 57344 }, /* ASR */ { (cpuop_func*)CPUFUNC(op_e008_12), 57352 }, /* LSR */ { (cpuop_func*)CPUFUNC(op_e010_12), 57360 }, /* ROXR */ { (cpuop_func*)CPUFUNC(op_e018_12), 57368 }, /* ROR */ { (cpuop_func*)CPUFUNC(op_e020_12), 57376 }, /* ASR */ { (cpuop_func*)CPUFUNC(op_e028_12), 57384 }, /* LSR */ { (cpuop_func*)CPUFUNC(op_e030_12), 57392 }, /* ROXR */ { (cpuop_func*)CPUFUNC(op_e038_12), 57400 }, /* ROR */ { (cpuop_func*)CPUFUNC(op_e040_12), 57408 }, /* ASR */ { (cpuop_func*)CPUFUNC(op_e048_12), 57416 }, /* LSR */ { (cpuop_func*)CPUFUNC(op_e050_12), 57424 }, /* ROXR */ { (cpuop_func*)CPUFUNC(op_e058_12), 57432 }, /* ROR */ { (cpuop_func*)CPUFUNC(op_e060_12), 57440 }, /* ASR */ { (cpuop_func*)CPUFUNC(op_e068_12), 57448 }, /* LSR */ { (cpuop_func*)CPUFUNC(op_e070_12), 57456 }, /* ROXR */ { (cpuop_func*)CPUFUNC(op_e078_12), 57464 }, /* ROR */ { (cpuop_func*)CPUFUNC(op_e080_12), 57472 }, /* ASR */ { (cpuop_func*)CPUFUNC(op_e088_12), 57480 }, /* LSR */ { (cpuop_func*)CPUFUNC(op_e090_12), 57488 }, /* ROXR */ { (cpuop_func*)CPUFUNC(op_e098_12), 57496 }, /* ROR */ { (cpuop_func*)CPUFUNC(op_e0a0_12), 57504 }, /* ASR */ { (cpuop_func*)CPUFUNC(op_e0a8_12), 57512 }, /* LSR */ { (cpuop_func*)CPUFUNC(op_e0b0_12), 57520 }, /* ROXR */ { (cpuop_func*)CPUFUNC(op_e0b8_12), 57528 }, /* ROR */ { (cpuop_func*)CPUFUNC(op_e0d0_12), 57552 }, /* ASRW */ { (cpuop_func*)CPUFUNC(op_e0d8_12), 57560 }, /* ASRW */ { (cpuop_func*)CPUFUNC(op_e0e0_12), 57568 }, /* ASRW */ { (cpuop_func*)CPUFUNC(op_e0e8_12), 57576 }, /* ASRW */ { (cpuop_func*)CPUFUNC(op_e0f0_12), 57584 }, /* ASRW */ { (cpuop_func*)CPUFUNC(op_e0f8_12), 57592 }, /* ASRW */ { (cpuop_func*)CPUFUNC(op_e0f9_12), 57593 }, /* ASRW */ { (cpuop_func*)CPUFUNC(op_e100_12), 57600 }, /* ASL */ { (cpuop_func*)CPUFUNC(op_e108_12), 57608 }, /* LSL */ { (cpuop_func*)CPUFUNC(op_e110_12), 57616 }, /* ROXL */ { (cpuop_func*)CPUFUNC(op_e118_12), 57624 }, /* ROL */ { (cpuop_func*)CPUFUNC(op_e120_12), 57632 }, /* ASL */ { (cpuop_func*)CPUFUNC(op_e128_12), 57640 }, /* LSL */ { (cpuop_func*)CPUFUNC(op_e130_12), 57648 }, /* ROXL */ { (cpuop_func*)CPUFUNC(op_e138_12), 57656 }, /* ROL */ { (cpuop_func*)CPUFUNC(op_e140_12), 57664 }, /* ASL */ { (cpuop_func*)CPUFUNC(op_e148_12), 57672 }, /* LSL */ { (cpuop_func*)CPUFUNC(op_e150_12), 57680 }, /* ROXL */ { (cpuop_func*)CPUFUNC(op_e158_12), 57688 }, /* ROL */ { (cpuop_func*)CPUFUNC(op_e160_12), 57696 }, /* ASL */ { (cpuop_func*)CPUFUNC(op_e168_12), 57704 }, /* LSL */ { (cpuop_func*)CPUFUNC(op_e170_12), 57712 }, /* ROXL */ { (cpuop_func*)CPUFUNC(op_e178_12), 57720 }, /* ROL */ { (cpuop_func*)CPUFUNC(op_e180_12), 57728 }, /* ASL */ { (cpuop_func*)CPUFUNC(op_e188_12), 57736 }, /* LSL */ { (cpuop_func*)CPUFUNC(op_e190_12), 57744 }, /* ROXL */ { (cpuop_func*)CPUFUNC(op_e198_12), 57752 }, /* ROL */ { (cpuop_func*)CPUFUNC(op_e1a0_12), 57760 }, /* ASL */ { (cpuop_func*)CPUFUNC(op_e1a8_12), 57768 }, /* LSL */ { (cpuop_func*)CPUFUNC(op_e1b0_12), 57776 }, /* ROXL */ { (cpuop_func*)CPUFUNC(op_e1b8_12), 57784 }, /* ROL */ { (cpuop_func*)CPUFUNC(op_e1d0_12), 57808 }, /* ASLW */ { (cpuop_func*)CPUFUNC(op_e1d8_12), 57816 }, /* ASLW */ { (cpuop_func*)CPUFUNC(op_e1e0_12), 57824 }, /* ASLW */ { (cpuop_func*)CPUFUNC(op_e1e8_12), 57832 }, /* ASLW */ { (cpuop_func*)CPUFUNC(op_e1f0_12), 57840 }, /* ASLW */ { (cpuop_func*)CPUFUNC(op_e1f8_12), 57848 }, /* ASLW */ { (cpuop_func*)CPUFUNC(op_e1f9_12), 57849 }, /* ASLW */ { (cpuop_func*)CPUFUNC(op_e2d0_12), 58064 }, /* LSRW */ { (cpuop_func*)CPUFUNC(op_e2d8_12), 58072 }, /* LSRW */ { (cpuop_func*)CPUFUNC(op_e2e0_12), 58080 }, /* LSRW */ { (cpuop_func*)CPUFUNC(op_e2e8_12), 58088 }, /* LSRW */ { (cpuop_func*)CPUFUNC(op_e2f0_12), 58096 }, /* LSRW */ { (cpuop_func*)CPUFUNC(op_e2f8_12), 58104 }, /* LSRW */ { (cpuop_func*)CPUFUNC(op_e2f9_12), 58105 }, /* LSRW */ { (cpuop_func*)CPUFUNC(op_e3d0_12), 58320 }, /* LSLW */ { (cpuop_func*)CPUFUNC(op_e3d8_12), 58328 }, /* LSLW */ { (cpuop_func*)CPUFUNC(op_e3e0_12), 58336 }, /* LSLW */ { (cpuop_func*)CPUFUNC(op_e3e8_12), 58344 }, /* LSLW */ { (cpuop_func*)CPUFUNC(op_e3f0_12), 58352 }, /* LSLW */ { (cpuop_func*)CPUFUNC(op_e3f8_12), 58360 }, /* LSLW */ { (cpuop_func*)CPUFUNC(op_e3f9_12), 58361 }, /* LSLW */ { (cpuop_func*)CPUFUNC(op_e4d0_12), 58576 }, /* ROXRW */ { (cpuop_func*)CPUFUNC(op_e4d8_12), 58584 }, /* ROXRW */ { (cpuop_func*)CPUFUNC(op_e4e0_12), 58592 }, /* ROXRW */ { (cpuop_func*)CPUFUNC(op_e4e8_12), 58600 }, /* ROXRW */ { (cpuop_func*)CPUFUNC(op_e4f0_12), 58608 }, /* ROXRW */ { (cpuop_func*)CPUFUNC(op_e4f8_12), 58616 }, /* ROXRW */ { (cpuop_func*)CPUFUNC(op_e4f9_12), 58617 }, /* ROXRW */ { (cpuop_func*)CPUFUNC(op_e5d0_12), 58832 }, /* ROXLW */ { (cpuop_func*)CPUFUNC(op_e5d8_12), 58840 }, /* ROXLW */ { (cpuop_func*)CPUFUNC(op_e5e0_12), 58848 }, /* ROXLW */ { (cpuop_func*)CPUFUNC(op_e5e8_12), 58856 }, /* ROXLW */ { (cpuop_func*)CPUFUNC(op_e5f0_12), 58864 }, /* ROXLW */ { (cpuop_func*)CPUFUNC(op_e5f8_12), 58872 }, /* ROXLW */ { (cpuop_func*)CPUFUNC(op_e5f9_12), 58873 }, /* ROXLW */ { (cpuop_func*)CPUFUNC(op_e6d0_12), 59088 }, /* RORW */ { (cpuop_func*)CPUFUNC(op_e6d8_12), 59096 }, /* RORW */ { (cpuop_func*)CPUFUNC(op_e6e0_12), 59104 }, /* RORW */ { (cpuop_func*)CPUFUNC(op_e6e8_12), 59112 }, /* RORW */ { (cpuop_func*)CPUFUNC(op_e6f0_12), 59120 }, /* RORW */ { (cpuop_func*)CPUFUNC(op_e6f8_12), 59128 }, /* RORW */ { (cpuop_func*)CPUFUNC(op_e6f9_12), 59129 }, /* RORW */ { (cpuop_func*)CPUFUNC(op_e7d0_12), 59344 }, /* ROLW */ { (cpuop_func*)CPUFUNC(op_e7d8_12), 59352 }, /* ROLW */ { (cpuop_func*)CPUFUNC(op_e7e0_12), 59360 }, /* ROLW */ { (cpuop_func*)CPUFUNC(op_e7e8_12), 59368 }, /* ROLW */ { (cpuop_func*)CPUFUNC(op_e7f0_12), 59376 }, /* ROLW */ { (cpuop_func*)CPUFUNC(op_e7f8_12), 59384 }, /* ROLW */ { (cpuop_func*)CPUFUNC(op_e7f9_12), 59385 }, /* ROLW */ { 0, 0 }}; #endif /* CPUEMU_12 */ #ifdef CPUEMU_20 #ifndef CPUEMU_68000_ONLY const struct cputbl CPUFUNC(op_smalltbl_20)[] = { { CPUFUNC(op_0000_20), 0 }, /* OR */ { CPUFUNC(op_0010_20), 16 }, /* OR */ { CPUFUNC(op_0018_20), 24 }, /* OR */ { CPUFUNC(op_0020_20), 32 }, /* OR */ { CPUFUNC(op_0028_20), 40 }, /* OR */ { CPUFUNC(op_0030_20), 48 }, /* OR */ { CPUFUNC(op_0038_20), 56 }, /* OR */ { CPUFUNC(op_0039_20), 57 }, /* OR */ { CPUFUNC(op_003c_20), 60 }, /* ORSR */ { CPUFUNC(op_0040_20), 64 }, /* OR */ { CPUFUNC(op_0050_20), 80 }, /* OR */ { CPUFUNC(op_0058_20), 88 }, /* OR */ { CPUFUNC(op_0060_20), 96 }, /* OR */ { CPUFUNC(op_0068_20), 104 }, /* OR */ { CPUFUNC(op_0070_20), 112 }, /* OR */ { CPUFUNC(op_0078_20), 120 }, /* OR */ { CPUFUNC(op_0079_20), 121 }, /* OR */ { CPUFUNC(op_007c_20), 124 }, /* ORSR */ { CPUFUNC(op_0080_20), 128 }, /* OR */ { CPUFUNC(op_0090_20), 144 }, /* OR */ { CPUFUNC(op_0098_20), 152 }, /* OR */ { CPUFUNC(op_00a0_20), 160 }, /* OR */ { CPUFUNC(op_00a8_20), 168 }, /* OR */ { CPUFUNC(op_00b0_20), 176 }, /* OR */ { CPUFUNC(op_00b8_20), 184 }, /* OR */ { CPUFUNC(op_00b9_20), 185 }, /* OR */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_00d0_20), 208 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_00e8_20), 232 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_00f0_20), 240 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_00f8_20), 248 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_00f9_20), 249 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_00fa_20), 250 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_00fb_20), 251 }, /* CHK2 */ #endif { CPUFUNC(op_0100_20), 256 }, /* BTST */ { CPUFUNC(op_0108_20), 264 }, /* MVPMR */ { CPUFUNC(op_0110_20), 272 }, /* BTST */ { CPUFUNC(op_0118_20), 280 }, /* BTST */ { CPUFUNC(op_0120_20), 288 }, /* BTST */ { CPUFUNC(op_0128_20), 296 }, /* BTST */ { CPUFUNC(op_0130_20), 304 }, /* BTST */ { CPUFUNC(op_0138_20), 312 }, /* BTST */ { CPUFUNC(op_0139_20), 313 }, /* BTST */ { CPUFUNC(op_013a_20), 314 }, /* BTST */ { CPUFUNC(op_013b_20), 315 }, /* BTST */ { CPUFUNC(op_013c_20), 316 }, /* BTST */ { CPUFUNC(op_0140_20), 320 }, /* BCHG */ { CPUFUNC(op_0148_20), 328 }, /* MVPMR */ { CPUFUNC(op_0150_20), 336 }, /* BCHG */ { CPUFUNC(op_0158_20), 344 }, /* BCHG */ { CPUFUNC(op_0160_20), 352 }, /* BCHG */ { CPUFUNC(op_0168_20), 360 }, /* BCHG */ { CPUFUNC(op_0170_20), 368 }, /* BCHG */ { CPUFUNC(op_0178_20), 376 }, /* BCHG */ { CPUFUNC(op_0179_20), 377 }, /* BCHG */ { CPUFUNC(op_017a_20), 378 }, /* BCHG */ { CPUFUNC(op_017b_20), 379 }, /* BCHG */ { CPUFUNC(op_0180_20), 384 }, /* BCLR */ { CPUFUNC(op_0188_20), 392 }, /* MVPRM */ { CPUFUNC(op_0190_20), 400 }, /* BCLR */ { CPUFUNC(op_0198_20), 408 }, /* BCLR */ { CPUFUNC(op_01a0_20), 416 }, /* BCLR */ { CPUFUNC(op_01a8_20), 424 }, /* BCLR */ { CPUFUNC(op_01b0_20), 432 }, /* BCLR */ { CPUFUNC(op_01b8_20), 440 }, /* BCLR */ { CPUFUNC(op_01b9_20), 441 }, /* BCLR */ { CPUFUNC(op_01ba_20), 442 }, /* BCLR */ { CPUFUNC(op_01bb_20), 443 }, /* BCLR */ { CPUFUNC(op_01c0_20), 448 }, /* BSET */ { CPUFUNC(op_01c8_20), 456 }, /* MVPRM */ { CPUFUNC(op_01d0_20), 464 }, /* BSET */ { CPUFUNC(op_01d8_20), 472 }, /* BSET */ { CPUFUNC(op_01e0_20), 480 }, /* BSET */ { CPUFUNC(op_01e8_20), 488 }, /* BSET */ { CPUFUNC(op_01f0_20), 496 }, /* BSET */ { CPUFUNC(op_01f8_20), 504 }, /* BSET */ { CPUFUNC(op_01f9_20), 505 }, /* BSET */ { CPUFUNC(op_01fa_20), 506 }, /* BSET */ { CPUFUNC(op_01fb_20), 507 }, /* BSET */ { CPUFUNC(op_0200_20), 512 }, /* AND */ { CPUFUNC(op_0210_20), 528 }, /* AND */ { CPUFUNC(op_0218_20), 536 }, /* AND */ { CPUFUNC(op_0220_20), 544 }, /* AND */ { CPUFUNC(op_0228_20), 552 }, /* AND */ { CPUFUNC(op_0230_20), 560 }, /* AND */ { CPUFUNC(op_0238_20), 568 }, /* AND */ { CPUFUNC(op_0239_20), 569 }, /* AND */ { CPUFUNC(op_023c_20), 572 }, /* ANDSR */ { CPUFUNC(op_0240_20), 576 }, /* AND */ { CPUFUNC(op_0250_20), 592 }, /* AND */ { CPUFUNC(op_0258_20), 600 }, /* AND */ { CPUFUNC(op_0260_20), 608 }, /* AND */ { CPUFUNC(op_0268_20), 616 }, /* AND */ { CPUFUNC(op_0270_20), 624 }, /* AND */ { CPUFUNC(op_0278_20), 632 }, /* AND */ { CPUFUNC(op_0279_20), 633 }, /* AND */ { CPUFUNC(op_027c_20), 636 }, /* ANDSR */ { CPUFUNC(op_0280_20), 640 }, /* AND */ { CPUFUNC(op_0290_20), 656 }, /* AND */ { CPUFUNC(op_0298_20), 664 }, /* AND */ { CPUFUNC(op_02a0_20), 672 }, /* AND */ { CPUFUNC(op_02a8_20), 680 }, /* AND */ { CPUFUNC(op_02b0_20), 688 }, /* AND */ { CPUFUNC(op_02b8_20), 696 }, /* AND */ { CPUFUNC(op_02b9_20), 697 }, /* AND */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_02d0_20), 720 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_02e8_20), 744 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_02f0_20), 752 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_02f8_20), 760 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_02f9_20), 761 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_02fa_20), 762 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_02fb_20), 763 }, /* CHK2 */ #endif { CPUFUNC(op_0400_20), 1024 }, /* SUB */ { CPUFUNC(op_0410_20), 1040 }, /* SUB */ { CPUFUNC(op_0418_20), 1048 }, /* SUB */ { CPUFUNC(op_0420_20), 1056 }, /* SUB */ { CPUFUNC(op_0428_20), 1064 }, /* SUB */ { CPUFUNC(op_0430_20), 1072 }, /* SUB */ { CPUFUNC(op_0438_20), 1080 }, /* SUB */ { CPUFUNC(op_0439_20), 1081 }, /* SUB */ { CPUFUNC(op_0440_20), 1088 }, /* SUB */ { CPUFUNC(op_0450_20), 1104 }, /* SUB */ { CPUFUNC(op_0458_20), 1112 }, /* SUB */ { CPUFUNC(op_0460_20), 1120 }, /* SUB */ { CPUFUNC(op_0468_20), 1128 }, /* SUB */ { CPUFUNC(op_0470_20), 1136 }, /* SUB */ { CPUFUNC(op_0478_20), 1144 }, /* SUB */ { CPUFUNC(op_0479_20), 1145 }, /* SUB */ { CPUFUNC(op_0480_20), 1152 }, /* SUB */ { CPUFUNC(op_0490_20), 1168 }, /* SUB */ { CPUFUNC(op_0498_20), 1176 }, /* SUB */ { CPUFUNC(op_04a0_20), 1184 }, /* SUB */ { CPUFUNC(op_04a8_20), 1192 }, /* SUB */ { CPUFUNC(op_04b0_20), 1200 }, /* SUB */ { CPUFUNC(op_04b8_20), 1208 }, /* SUB */ { CPUFUNC(op_04b9_20), 1209 }, /* SUB */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_04d0_20), 1232 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_04e8_20), 1256 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_04f0_20), 1264 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_04f8_20), 1272 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_04f9_20), 1273 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_04fa_20), 1274 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_04fb_20), 1275 }, /* CHK2 */ #endif { CPUFUNC(op_0600_20), 1536 }, /* ADD */ { CPUFUNC(op_0610_20), 1552 }, /* ADD */ { CPUFUNC(op_0618_20), 1560 }, /* ADD */ { CPUFUNC(op_0620_20), 1568 }, /* ADD */ { CPUFUNC(op_0628_20), 1576 }, /* ADD */ { CPUFUNC(op_0630_20), 1584 }, /* ADD */ { CPUFUNC(op_0638_20), 1592 }, /* ADD */ { CPUFUNC(op_0639_20), 1593 }, /* ADD */ { CPUFUNC(op_0640_20), 1600 }, /* ADD */ { CPUFUNC(op_0650_20), 1616 }, /* ADD */ { CPUFUNC(op_0658_20), 1624 }, /* ADD */ { CPUFUNC(op_0660_20), 1632 }, /* ADD */ { CPUFUNC(op_0668_20), 1640 }, /* ADD */ { CPUFUNC(op_0670_20), 1648 }, /* ADD */ { CPUFUNC(op_0678_20), 1656 }, /* ADD */ { CPUFUNC(op_0679_20), 1657 }, /* ADD */ { CPUFUNC(op_0680_20), 1664 }, /* ADD */ { CPUFUNC(op_0690_20), 1680 }, /* ADD */ { CPUFUNC(op_0698_20), 1688 }, /* ADD */ { CPUFUNC(op_06a0_20), 1696 }, /* ADD */ { CPUFUNC(op_06a8_20), 1704 }, /* ADD */ { CPUFUNC(op_06b0_20), 1712 }, /* ADD */ { CPUFUNC(op_06b8_20), 1720 }, /* ADD */ { CPUFUNC(op_06b9_20), 1721 }, /* ADD */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_06c0_20), 1728 }, /* RTM */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_06c8_20), 1736 }, /* RTM */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_06d0_20), 1744 }, /* CALLM */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_06e8_20), 1768 }, /* CALLM */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_06f0_20), 1776 }, /* CALLM */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_06f8_20), 1784 }, /* CALLM */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_06f9_20), 1785 }, /* CALLM */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_06fa_20), 1786 }, /* CALLM */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_06fb_20), 1787 }, /* CALLM */ #endif { CPUFUNC(op_0800_20), 2048 }, /* BTST */ { CPUFUNC(op_0810_20), 2064 }, /* BTST */ { CPUFUNC(op_0818_20), 2072 }, /* BTST */ { CPUFUNC(op_0820_20), 2080 }, /* BTST */ { CPUFUNC(op_0828_20), 2088 }, /* BTST */ { CPUFUNC(op_0830_20), 2096 }, /* BTST */ { CPUFUNC(op_0838_20), 2104 }, /* BTST */ { CPUFUNC(op_0839_20), 2105 }, /* BTST */ { CPUFUNC(op_083a_20), 2106 }, /* BTST */ { CPUFUNC(op_083b_20), 2107 }, /* BTST */ { CPUFUNC(op_083c_20), 2108 }, /* BTST */ { CPUFUNC(op_0840_20), 2112 }, /* BCHG */ { CPUFUNC(op_0850_20), 2128 }, /* BCHG */ { CPUFUNC(op_0858_20), 2136 }, /* BCHG */ { CPUFUNC(op_0860_20), 2144 }, /* BCHG */ { CPUFUNC(op_0868_20), 2152 }, /* BCHG */ { CPUFUNC(op_0870_20), 2160 }, /* BCHG */ { CPUFUNC(op_0878_20), 2168 }, /* BCHG */ { CPUFUNC(op_0879_20), 2169 }, /* BCHG */ { CPUFUNC(op_087a_20), 2170 }, /* BCHG */ { CPUFUNC(op_087b_20), 2171 }, /* BCHG */ { CPUFUNC(op_0880_20), 2176 }, /* BCLR */ { CPUFUNC(op_0890_20), 2192 }, /* BCLR */ { CPUFUNC(op_0898_20), 2200 }, /* BCLR */ { CPUFUNC(op_08a0_20), 2208 }, /* BCLR */ { CPUFUNC(op_08a8_20), 2216 }, /* BCLR */ { CPUFUNC(op_08b0_20), 2224 }, /* BCLR */ { CPUFUNC(op_08b8_20), 2232 }, /* BCLR */ { CPUFUNC(op_08b9_20), 2233 }, /* BCLR */ { CPUFUNC(op_08ba_20), 2234 }, /* BCLR */ { CPUFUNC(op_08bb_20), 2235 }, /* BCLR */ { CPUFUNC(op_08c0_20), 2240 }, /* BSET */ { CPUFUNC(op_08d0_20), 2256 }, /* BSET */ { CPUFUNC(op_08d8_20), 2264 }, /* BSET */ { CPUFUNC(op_08e0_20), 2272 }, /* BSET */ { CPUFUNC(op_08e8_20), 2280 }, /* BSET */ { CPUFUNC(op_08f0_20), 2288 }, /* BSET */ { CPUFUNC(op_08f8_20), 2296 }, /* BSET */ { CPUFUNC(op_08f9_20), 2297 }, /* BSET */ { CPUFUNC(op_08fa_20), 2298 }, /* BSET */ { CPUFUNC(op_08fb_20), 2299 }, /* BSET */ { CPUFUNC(op_0a00_20), 2560 }, /* EOR */ { CPUFUNC(op_0a10_20), 2576 }, /* EOR */ { CPUFUNC(op_0a18_20), 2584 }, /* EOR */ { CPUFUNC(op_0a20_20), 2592 }, /* EOR */ { CPUFUNC(op_0a28_20), 2600 }, /* EOR */ { CPUFUNC(op_0a30_20), 2608 }, /* EOR */ { CPUFUNC(op_0a38_20), 2616 }, /* EOR */ { CPUFUNC(op_0a39_20), 2617 }, /* EOR */ { CPUFUNC(op_0a3c_20), 2620 }, /* EORSR */ { CPUFUNC(op_0a40_20), 2624 }, /* EOR */ { CPUFUNC(op_0a50_20), 2640 }, /* EOR */ { CPUFUNC(op_0a58_20), 2648 }, /* EOR */ { CPUFUNC(op_0a60_20), 2656 }, /* EOR */ { CPUFUNC(op_0a68_20), 2664 }, /* EOR */ { CPUFUNC(op_0a70_20), 2672 }, /* EOR */ { CPUFUNC(op_0a78_20), 2680 }, /* EOR */ { CPUFUNC(op_0a79_20), 2681 }, /* EOR */ { CPUFUNC(op_0a7c_20), 2684 }, /* EORSR */ { CPUFUNC(op_0a80_20), 2688 }, /* EOR */ { CPUFUNC(op_0a90_20), 2704 }, /* EOR */ { CPUFUNC(op_0a98_20), 2712 }, /* EOR */ { CPUFUNC(op_0aa0_20), 2720 }, /* EOR */ { CPUFUNC(op_0aa8_20), 2728 }, /* EOR */ { CPUFUNC(op_0ab0_20), 2736 }, /* EOR */ { CPUFUNC(op_0ab8_20), 2744 }, /* EOR */ { CPUFUNC(op_0ab9_20), 2745 }, /* EOR */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0ad0_20), 2768 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0ad8_20), 2776 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0ae0_20), 2784 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0ae8_20), 2792 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0af0_20), 2800 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0af8_20), 2808 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0af9_20), 2809 }, /* CAS */ #endif { CPUFUNC(op_0c00_20), 3072 }, /* CMP */ { CPUFUNC(op_0c10_20), 3088 }, /* CMP */ { CPUFUNC(op_0c18_20), 3096 }, /* CMP */ { CPUFUNC(op_0c20_20), 3104 }, /* CMP */ { CPUFUNC(op_0c28_20), 3112 }, /* CMP */ { CPUFUNC(op_0c30_20), 3120 }, /* CMP */ { CPUFUNC(op_0c38_20), 3128 }, /* CMP */ { CPUFUNC(op_0c39_20), 3129 }, /* CMP */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0c3a_20), 3130 }, /* CMP */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0c3b_20), 3131 }, /* CMP */ #endif { CPUFUNC(op_0c40_20), 3136 }, /* CMP */ { CPUFUNC(op_0c50_20), 3152 }, /* CMP */ { CPUFUNC(op_0c58_20), 3160 }, /* CMP */ { CPUFUNC(op_0c60_20), 3168 }, /* CMP */ { CPUFUNC(op_0c68_20), 3176 }, /* CMP */ { CPUFUNC(op_0c70_20), 3184 }, /* CMP */ { CPUFUNC(op_0c78_20), 3192 }, /* CMP */ { CPUFUNC(op_0c79_20), 3193 }, /* CMP */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0c7a_20), 3194 }, /* CMP */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0c7b_20), 3195 }, /* CMP */ #endif { CPUFUNC(op_0c80_20), 3200 }, /* CMP */ { CPUFUNC(op_0c90_20), 3216 }, /* CMP */ { CPUFUNC(op_0c98_20), 3224 }, /* CMP */ { CPUFUNC(op_0ca0_20), 3232 }, /* CMP */ { CPUFUNC(op_0ca8_20), 3240 }, /* CMP */ { CPUFUNC(op_0cb0_20), 3248 }, /* CMP */ { CPUFUNC(op_0cb8_20), 3256 }, /* CMP */ { CPUFUNC(op_0cb9_20), 3257 }, /* CMP */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0cba_20), 3258 }, /* CMP */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0cbb_20), 3259 }, /* CMP */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0cd0_20), 3280 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0cd8_20), 3288 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0ce0_20), 3296 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0ce8_20), 3304 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0cf0_20), 3312 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0cf8_20), 3320 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0cf9_20), 3321 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0cfc_20), 3324 }, /* CAS2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0e10_20), 3600 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0e18_20), 3608 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0e20_20), 3616 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0e28_20), 3624 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0e30_20), 3632 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0e38_20), 3640 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0e39_20), 3641 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0e50_20), 3664 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0e58_20), 3672 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0e60_20), 3680 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0e68_20), 3688 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0e70_20), 3696 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0e78_20), 3704 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0e79_20), 3705 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0e90_20), 3728 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0e98_20), 3736 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0ea0_20), 3744 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0ea8_20), 3752 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0eb0_20), 3760 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0eb8_20), 3768 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0eb9_20), 3769 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0ed0_20), 3792 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0ed8_20), 3800 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0ee0_20), 3808 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0ee8_20), 3816 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0ef0_20), 3824 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0ef8_20), 3832 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0ef9_20), 3833 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0efc_20), 3836 }, /* CAS2 */ #endif { CPUFUNC(op_1000_20), 4096 }, /* MOVE */ { CPUFUNC(op_1010_20), 4112 }, /* MOVE */ { CPUFUNC(op_1018_20), 4120 }, /* MOVE */ { CPUFUNC(op_1020_20), 4128 }, /* MOVE */ { CPUFUNC(op_1028_20), 4136 }, /* MOVE */ { CPUFUNC(op_1030_20), 4144 }, /* MOVE */ { CPUFUNC(op_1038_20), 4152 }, /* MOVE */ { CPUFUNC(op_1039_20), 4153 }, /* MOVE */ { CPUFUNC(op_103a_20), 4154 }, /* MOVE */ { CPUFUNC(op_103b_20), 4155 }, /* MOVE */ { CPUFUNC(op_103c_20), 4156 }, /* MOVE */ { CPUFUNC(op_1080_20), 4224 }, /* MOVE */ { CPUFUNC(op_1090_20), 4240 }, /* MOVE */ { CPUFUNC(op_1098_20), 4248 }, /* MOVE */ { CPUFUNC(op_10a0_20), 4256 }, /* MOVE */ { CPUFUNC(op_10a8_20), 4264 }, /* MOVE */ { CPUFUNC(op_10b0_20), 4272 }, /* MOVE */ { CPUFUNC(op_10b8_20), 4280 }, /* MOVE */ { CPUFUNC(op_10b9_20), 4281 }, /* MOVE */ { CPUFUNC(op_10ba_20), 4282 }, /* MOVE */ { CPUFUNC(op_10bb_20), 4283 }, /* MOVE */ { CPUFUNC(op_10bc_20), 4284 }, /* MOVE */ { CPUFUNC(op_10c0_20), 4288 }, /* MOVE */ { CPUFUNC(op_10d0_20), 4304 }, /* MOVE */ { CPUFUNC(op_10d8_20), 4312 }, /* MOVE */ { CPUFUNC(op_10e0_20), 4320 }, /* MOVE */ { CPUFUNC(op_10e8_20), 4328 }, /* MOVE */ { CPUFUNC(op_10f0_20), 4336 }, /* MOVE */ { CPUFUNC(op_10f8_20), 4344 }, /* MOVE */ { CPUFUNC(op_10f9_20), 4345 }, /* MOVE */ { CPUFUNC(op_10fa_20), 4346 }, /* MOVE */ { CPUFUNC(op_10fb_20), 4347 }, /* MOVE */ { CPUFUNC(op_10fc_20), 4348 }, /* MOVE */ { CPUFUNC(op_1100_20), 4352 }, /* MOVE */ { CPUFUNC(op_1110_20), 4368 }, /* MOVE */ { CPUFUNC(op_1118_20), 4376 }, /* MOVE */ { CPUFUNC(op_1120_20), 4384 }, /* MOVE */ { CPUFUNC(op_1128_20), 4392 }, /* MOVE */ { CPUFUNC(op_1130_20), 4400 }, /* MOVE */ { CPUFUNC(op_1138_20), 4408 }, /* MOVE */ { CPUFUNC(op_1139_20), 4409 }, /* MOVE */ { CPUFUNC(op_113a_20), 4410 }, /* MOVE */ { CPUFUNC(op_113b_20), 4411 }, /* MOVE */ { CPUFUNC(op_113c_20), 4412 }, /* MOVE */ { CPUFUNC(op_1140_20), 4416 }, /* MOVE */ { CPUFUNC(op_1150_20), 4432 }, /* MOVE */ { CPUFUNC(op_1158_20), 4440 }, /* MOVE */ { CPUFUNC(op_1160_20), 4448 }, /* MOVE */ { CPUFUNC(op_1168_20), 4456 }, /* MOVE */ { CPUFUNC(op_1170_20), 4464 }, /* MOVE */ { CPUFUNC(op_1178_20), 4472 }, /* MOVE */ { CPUFUNC(op_1179_20), 4473 }, /* MOVE */ { CPUFUNC(op_117a_20), 4474 }, /* MOVE */ { CPUFUNC(op_117b_20), 4475 }, /* MOVE */ { CPUFUNC(op_117c_20), 4476 }, /* MOVE */ { CPUFUNC(op_1180_20), 4480 }, /* MOVE */ { CPUFUNC(op_1190_20), 4496 }, /* MOVE */ { CPUFUNC(op_1198_20), 4504 }, /* MOVE */ { CPUFUNC(op_11a0_20), 4512 }, /* MOVE */ { CPUFUNC(op_11a8_20), 4520 }, /* MOVE */ { CPUFUNC(op_11b0_20), 4528 }, /* MOVE */ { CPUFUNC(op_11b8_20), 4536 }, /* MOVE */ { CPUFUNC(op_11b9_20), 4537 }, /* MOVE */ { CPUFUNC(op_11ba_20), 4538 }, /* MOVE */ { CPUFUNC(op_11bb_20), 4539 }, /* MOVE */ { CPUFUNC(op_11bc_20), 4540 }, /* MOVE */ { CPUFUNC(op_11c0_20), 4544 }, /* MOVE */ { CPUFUNC(op_11d0_20), 4560 }, /* MOVE */ { CPUFUNC(op_11d8_20), 4568 }, /* MOVE */ { CPUFUNC(op_11e0_20), 4576 }, /* MOVE */ { CPUFUNC(op_11e8_20), 4584 }, /* MOVE */ { CPUFUNC(op_11f0_20), 4592 }, /* MOVE */ { CPUFUNC(op_11f8_20), 4600 }, /* MOVE */ { CPUFUNC(op_11f9_20), 4601 }, /* MOVE */ { CPUFUNC(op_11fa_20), 4602 }, /* MOVE */ { CPUFUNC(op_11fb_20), 4603 }, /* MOVE */ { CPUFUNC(op_11fc_20), 4604 }, /* MOVE */ { CPUFUNC(op_13c0_20), 5056 }, /* MOVE */ { CPUFUNC(op_13d0_20), 5072 }, /* MOVE */ { CPUFUNC(op_13d8_20), 5080 }, /* MOVE */ { CPUFUNC(op_13e0_20), 5088 }, /* MOVE */ { CPUFUNC(op_13e8_20), 5096 }, /* MOVE */ { CPUFUNC(op_13f0_20), 5104 }, /* MOVE */ { CPUFUNC(op_13f8_20), 5112 }, /* MOVE */ { CPUFUNC(op_13f9_20), 5113 }, /* MOVE */ { CPUFUNC(op_13fa_20), 5114 }, /* MOVE */ { CPUFUNC(op_13fb_20), 5115 }, /* MOVE */ { CPUFUNC(op_13fc_20), 5116 }, /* MOVE */ { CPUFUNC(op_2000_20), 8192 }, /* MOVE */ { CPUFUNC(op_2008_20), 8200 }, /* MOVE */ { CPUFUNC(op_2010_20), 8208 }, /* MOVE */ { CPUFUNC(op_2018_20), 8216 }, /* MOVE */ { CPUFUNC(op_2020_20), 8224 }, /* MOVE */ { CPUFUNC(op_2028_20), 8232 }, /* MOVE */ { CPUFUNC(op_2030_20), 8240 }, /* MOVE */ { CPUFUNC(op_2038_20), 8248 }, /* MOVE */ { CPUFUNC(op_2039_20), 8249 }, /* MOVE */ { CPUFUNC(op_203a_20), 8250 }, /* MOVE */ { CPUFUNC(op_203b_20), 8251 }, /* MOVE */ { CPUFUNC(op_203c_20), 8252 }, /* MOVE */ { CPUFUNC(op_2040_20), 8256 }, /* MOVEA */ { CPUFUNC(op_2048_20), 8264 }, /* MOVEA */ { CPUFUNC(op_2050_20), 8272 }, /* MOVEA */ { CPUFUNC(op_2058_20), 8280 }, /* MOVEA */ { CPUFUNC(op_2060_20), 8288 }, /* MOVEA */ { CPUFUNC(op_2068_20), 8296 }, /* MOVEA */ { CPUFUNC(op_2070_20), 8304 }, /* MOVEA */ { CPUFUNC(op_2078_20), 8312 }, /* MOVEA */ { CPUFUNC(op_2079_20), 8313 }, /* MOVEA */ { CPUFUNC(op_207a_20), 8314 }, /* MOVEA */ { CPUFUNC(op_207b_20), 8315 }, /* MOVEA */ { CPUFUNC(op_207c_20), 8316 }, /* MOVEA */ { CPUFUNC(op_2080_20), 8320 }, /* MOVE */ { CPUFUNC(op_2088_20), 8328 }, /* MOVE */ { CPUFUNC(op_2090_20), 8336 }, /* MOVE */ { CPUFUNC(op_2098_20), 8344 }, /* MOVE */ { CPUFUNC(op_20a0_20), 8352 }, /* MOVE */ { CPUFUNC(op_20a8_20), 8360 }, /* MOVE */ { CPUFUNC(op_20b0_20), 8368 }, /* MOVE */ { CPUFUNC(op_20b8_20), 8376 }, /* MOVE */ { CPUFUNC(op_20b9_20), 8377 }, /* MOVE */ { CPUFUNC(op_20ba_20), 8378 }, /* MOVE */ { CPUFUNC(op_20bb_20), 8379 }, /* MOVE */ { CPUFUNC(op_20bc_20), 8380 }, /* MOVE */ { CPUFUNC(op_20c0_20), 8384 }, /* MOVE */ { CPUFUNC(op_20c8_20), 8392 }, /* MOVE */ { CPUFUNC(op_20d0_20), 8400 }, /* MOVE */ { CPUFUNC(op_20d8_20), 8408 }, /* MOVE */ { CPUFUNC(op_20e0_20), 8416 }, /* MOVE */ { CPUFUNC(op_20e8_20), 8424 }, /* MOVE */ { CPUFUNC(op_20f0_20), 8432 }, /* MOVE */ { CPUFUNC(op_20f8_20), 8440 }, /* MOVE */ { CPUFUNC(op_20f9_20), 8441 }, /* MOVE */ { CPUFUNC(op_20fa_20), 8442 }, /* MOVE */ { CPUFUNC(op_20fb_20), 8443 }, /* MOVE */ { CPUFUNC(op_20fc_20), 8444 }, /* MOVE */ { CPUFUNC(op_2100_20), 8448 }, /* MOVE */ { CPUFUNC(op_2108_20), 8456 }, /* MOVE */ { CPUFUNC(op_2110_20), 8464 }, /* MOVE */ { CPUFUNC(op_2118_20), 8472 }, /* MOVE */ { CPUFUNC(op_2120_20), 8480 }, /* MOVE */ { CPUFUNC(op_2128_20), 8488 }, /* MOVE */ { CPUFUNC(op_2130_20), 8496 }, /* MOVE */ { CPUFUNC(op_2138_20), 8504 }, /* MOVE */ { CPUFUNC(op_2139_20), 8505 }, /* MOVE */ { CPUFUNC(op_213a_20), 8506 }, /* MOVE */ { CPUFUNC(op_213b_20), 8507 }, /* MOVE */ { CPUFUNC(op_213c_20), 8508 }, /* MOVE */ { CPUFUNC(op_2140_20), 8512 }, /* MOVE */ { CPUFUNC(op_2148_20), 8520 }, /* MOVE */ { CPUFUNC(op_2150_20), 8528 }, /* MOVE */ { CPUFUNC(op_2158_20), 8536 }, /* MOVE */ { CPUFUNC(op_2160_20), 8544 }, /* MOVE */ { CPUFUNC(op_2168_20), 8552 }, /* MOVE */ { CPUFUNC(op_2170_20), 8560 }, /* MOVE */ { CPUFUNC(op_2178_20), 8568 }, /* MOVE */ { CPUFUNC(op_2179_20), 8569 }, /* MOVE */ { CPUFUNC(op_217a_20), 8570 }, /* MOVE */ { CPUFUNC(op_217b_20), 8571 }, /* MOVE */ { CPUFUNC(op_217c_20), 8572 }, /* MOVE */ { CPUFUNC(op_2180_20), 8576 }, /* MOVE */ { CPUFUNC(op_2188_20), 8584 }, /* MOVE */ { CPUFUNC(op_2190_20), 8592 }, /* MOVE */ { CPUFUNC(op_2198_20), 8600 }, /* MOVE */ { CPUFUNC(op_21a0_20), 8608 }, /* MOVE */ { CPUFUNC(op_21a8_20), 8616 }, /* MOVE */ { CPUFUNC(op_21b0_20), 8624 }, /* MOVE */ { CPUFUNC(op_21b8_20), 8632 }, /* MOVE */ { CPUFUNC(op_21b9_20), 8633 }, /* MOVE */ { CPUFUNC(op_21ba_20), 8634 }, /* MOVE */ { CPUFUNC(op_21bb_20), 8635 }, /* MOVE */ { CPUFUNC(op_21bc_20), 8636 }, /* MOVE */ { CPUFUNC(op_21c0_20), 8640 }, /* MOVE */ { CPUFUNC(op_21c8_20), 8648 }, /* MOVE */ { CPUFUNC(op_21d0_20), 8656 }, /* MOVE */ { CPUFUNC(op_21d8_20), 8664 }, /* MOVE */ { CPUFUNC(op_21e0_20), 8672 }, /* MOVE */ { CPUFUNC(op_21e8_20), 8680 }, /* MOVE */ { CPUFUNC(op_21f0_20), 8688 }, /* MOVE */ { CPUFUNC(op_21f8_20), 8696 }, /* MOVE */ { CPUFUNC(op_21f9_20), 8697 }, /* MOVE */ { CPUFUNC(op_21fa_20), 8698 }, /* MOVE */ { CPUFUNC(op_21fb_20), 8699 }, /* MOVE */ { CPUFUNC(op_21fc_20), 8700 }, /* MOVE */ { CPUFUNC(op_23c0_20), 9152 }, /* MOVE */ { CPUFUNC(op_23c8_20), 9160 }, /* MOVE */ { CPUFUNC(op_23d0_20), 9168 }, /* MOVE */ { CPUFUNC(op_23d8_20), 9176 }, /* MOVE */ { CPUFUNC(op_23e0_20), 9184 }, /* MOVE */ { CPUFUNC(op_23e8_20), 9192 }, /* MOVE */ { CPUFUNC(op_23f0_20), 9200 }, /* MOVE */ { CPUFUNC(op_23f8_20), 9208 }, /* MOVE */ { CPUFUNC(op_23f9_20), 9209 }, /* MOVE */ { CPUFUNC(op_23fa_20), 9210 }, /* MOVE */ { CPUFUNC(op_23fb_20), 9211 }, /* MOVE */ { CPUFUNC(op_23fc_20), 9212 }, /* MOVE */ { CPUFUNC(op_3000_20), 12288 }, /* MOVE */ { CPUFUNC(op_3008_20), 12296 }, /* MOVE */ { CPUFUNC(op_3010_20), 12304 }, /* MOVE */ { CPUFUNC(op_3018_20), 12312 }, /* MOVE */ { CPUFUNC(op_3020_20), 12320 }, /* MOVE */ { CPUFUNC(op_3028_20), 12328 }, /* MOVE */ { CPUFUNC(op_3030_20), 12336 }, /* MOVE */ { CPUFUNC(op_3038_20), 12344 }, /* MOVE */ { CPUFUNC(op_3039_20), 12345 }, /* MOVE */ { CPUFUNC(op_303a_20), 12346 }, /* MOVE */ { CPUFUNC(op_303b_20), 12347 }, /* MOVE */ { CPUFUNC(op_303c_20), 12348 }, /* MOVE */ { CPUFUNC(op_3040_20), 12352 }, /* MOVEA */ { CPUFUNC(op_3048_20), 12360 }, /* MOVEA */ { CPUFUNC(op_3050_20), 12368 }, /* MOVEA */ { CPUFUNC(op_3058_20), 12376 }, /* MOVEA */ { CPUFUNC(op_3060_20), 12384 }, /* MOVEA */ { CPUFUNC(op_3068_20), 12392 }, /* MOVEA */ { CPUFUNC(op_3070_20), 12400 }, /* MOVEA */ { CPUFUNC(op_3078_20), 12408 }, /* MOVEA */ { CPUFUNC(op_3079_20), 12409 }, /* MOVEA */ { CPUFUNC(op_307a_20), 12410 }, /* MOVEA */ { CPUFUNC(op_307b_20), 12411 }, /* MOVEA */ { CPUFUNC(op_307c_20), 12412 }, /* MOVEA */ { CPUFUNC(op_3080_20), 12416 }, /* MOVE */ { CPUFUNC(op_3088_20), 12424 }, /* MOVE */ { CPUFUNC(op_3090_20), 12432 }, /* MOVE */ { CPUFUNC(op_3098_20), 12440 }, /* MOVE */ { CPUFUNC(op_30a0_20), 12448 }, /* MOVE */ { CPUFUNC(op_30a8_20), 12456 }, /* MOVE */ { CPUFUNC(op_30b0_20), 12464 }, /* MOVE */ { CPUFUNC(op_30b8_20), 12472 }, /* MOVE */ { CPUFUNC(op_30b9_20), 12473 }, /* MOVE */ { CPUFUNC(op_30ba_20), 12474 }, /* MOVE */ { CPUFUNC(op_30bb_20), 12475 }, /* MOVE */ { CPUFUNC(op_30bc_20), 12476 }, /* MOVE */ { CPUFUNC(op_30c0_20), 12480 }, /* MOVE */ { CPUFUNC(op_30c8_20), 12488 }, /* MOVE */ { CPUFUNC(op_30d0_20), 12496 }, /* MOVE */ { CPUFUNC(op_30d8_20), 12504 }, /* MOVE */ { CPUFUNC(op_30e0_20), 12512 }, /* MOVE */ { CPUFUNC(op_30e8_20), 12520 }, /* MOVE */ { CPUFUNC(op_30f0_20), 12528 }, /* MOVE */ { CPUFUNC(op_30f8_20), 12536 }, /* MOVE */ { CPUFUNC(op_30f9_20), 12537 }, /* MOVE */ { CPUFUNC(op_30fa_20), 12538 }, /* MOVE */ { CPUFUNC(op_30fb_20), 12539 }, /* MOVE */ { CPUFUNC(op_30fc_20), 12540 }, /* MOVE */ { CPUFUNC(op_3100_20), 12544 }, /* MOVE */ { CPUFUNC(op_3108_20), 12552 }, /* MOVE */ { CPUFUNC(op_3110_20), 12560 }, /* MOVE */ { CPUFUNC(op_3118_20), 12568 }, /* MOVE */ { CPUFUNC(op_3120_20), 12576 }, /* MOVE */ { CPUFUNC(op_3128_20), 12584 }, /* MOVE */ { CPUFUNC(op_3130_20), 12592 }, /* MOVE */ { CPUFUNC(op_3138_20), 12600 }, /* MOVE */ { CPUFUNC(op_3139_20), 12601 }, /* MOVE */ { CPUFUNC(op_313a_20), 12602 }, /* MOVE */ { CPUFUNC(op_313b_20), 12603 }, /* MOVE */ { CPUFUNC(op_313c_20), 12604 }, /* MOVE */ { CPUFUNC(op_3140_20), 12608 }, /* MOVE */ { CPUFUNC(op_3148_20), 12616 }, /* MOVE */ { CPUFUNC(op_3150_20), 12624 }, /* MOVE */ { CPUFUNC(op_3158_20), 12632 }, /* MOVE */ { CPUFUNC(op_3160_20), 12640 }, /* MOVE */ { CPUFUNC(op_3168_20), 12648 }, /* MOVE */ { CPUFUNC(op_3170_20), 12656 }, /* MOVE */ { CPUFUNC(op_3178_20), 12664 }, /* MOVE */ { CPUFUNC(op_3179_20), 12665 }, /* MOVE */ { CPUFUNC(op_317a_20), 12666 }, /* MOVE */ { CPUFUNC(op_317b_20), 12667 }, /* MOVE */ { CPUFUNC(op_317c_20), 12668 }, /* MOVE */ { CPUFUNC(op_3180_20), 12672 }, /* MOVE */ { CPUFUNC(op_3188_20), 12680 }, /* MOVE */ { CPUFUNC(op_3190_20), 12688 }, /* MOVE */ { CPUFUNC(op_3198_20), 12696 }, /* MOVE */ { CPUFUNC(op_31a0_20), 12704 }, /* MOVE */ { CPUFUNC(op_31a8_20), 12712 }, /* MOVE */ { CPUFUNC(op_31b0_20), 12720 }, /* MOVE */ { CPUFUNC(op_31b8_20), 12728 }, /* MOVE */ { CPUFUNC(op_31b9_20), 12729 }, /* MOVE */ { CPUFUNC(op_31ba_20), 12730 }, /* MOVE */ { CPUFUNC(op_31bb_20), 12731 }, /* MOVE */ { CPUFUNC(op_31bc_20), 12732 }, /* MOVE */ { CPUFUNC(op_31c0_20), 12736 }, /* MOVE */ { CPUFUNC(op_31c8_20), 12744 }, /* MOVE */ { CPUFUNC(op_31d0_20), 12752 }, /* MOVE */ { CPUFUNC(op_31d8_20), 12760 }, /* MOVE */ { CPUFUNC(op_31e0_20), 12768 }, /* MOVE */ { CPUFUNC(op_31e8_20), 12776 }, /* MOVE */ { CPUFUNC(op_31f0_20), 12784 }, /* MOVE */ { CPUFUNC(op_31f8_20), 12792 }, /* MOVE */ { CPUFUNC(op_31f9_20), 12793 }, /* MOVE */ { CPUFUNC(op_31fa_20), 12794 }, /* MOVE */ { CPUFUNC(op_31fb_20), 12795 }, /* MOVE */ { CPUFUNC(op_31fc_20), 12796 }, /* MOVE */ { CPUFUNC(op_33c0_20), 13248 }, /* MOVE */ { CPUFUNC(op_33c8_20), 13256 }, /* MOVE */ { CPUFUNC(op_33d0_20), 13264 }, /* MOVE */ { CPUFUNC(op_33d8_20), 13272 }, /* MOVE */ { CPUFUNC(op_33e0_20), 13280 }, /* MOVE */ { CPUFUNC(op_33e8_20), 13288 }, /* MOVE */ { CPUFUNC(op_33f0_20), 13296 }, /* MOVE */ { CPUFUNC(op_33f8_20), 13304 }, /* MOVE */ { CPUFUNC(op_33f9_20), 13305 }, /* MOVE */ { CPUFUNC(op_33fa_20), 13306 }, /* MOVE */ { CPUFUNC(op_33fb_20), 13307 }, /* MOVE */ { CPUFUNC(op_33fc_20), 13308 }, /* MOVE */ { CPUFUNC(op_4000_20), 16384 }, /* NEGX */ { CPUFUNC(op_4010_20), 16400 }, /* NEGX */ { CPUFUNC(op_4018_20), 16408 }, /* NEGX */ { CPUFUNC(op_4020_20), 16416 }, /* NEGX */ { CPUFUNC(op_4028_20), 16424 }, /* NEGX */ { CPUFUNC(op_4030_20), 16432 }, /* NEGX */ { CPUFUNC(op_4038_20), 16440 }, /* NEGX */ { CPUFUNC(op_4039_20), 16441 }, /* NEGX */ { CPUFUNC(op_4040_20), 16448 }, /* NEGX */ { CPUFUNC(op_4050_20), 16464 }, /* NEGX */ { CPUFUNC(op_4058_20), 16472 }, /* NEGX */ { CPUFUNC(op_4060_20), 16480 }, /* NEGX */ { CPUFUNC(op_4068_20), 16488 }, /* NEGX */ { CPUFUNC(op_4070_20), 16496 }, /* NEGX */ { CPUFUNC(op_4078_20), 16504 }, /* NEGX */ { CPUFUNC(op_4079_20), 16505 }, /* NEGX */ { CPUFUNC(op_4080_20), 16512 }, /* NEGX */ { CPUFUNC(op_4090_20), 16528 }, /* NEGX */ { CPUFUNC(op_4098_20), 16536 }, /* NEGX */ { CPUFUNC(op_40a0_20), 16544 }, /* NEGX */ { CPUFUNC(op_40a8_20), 16552 }, /* NEGX */ { CPUFUNC(op_40b0_20), 16560 }, /* NEGX */ { CPUFUNC(op_40b8_20), 16568 }, /* NEGX */ { CPUFUNC(op_40b9_20), 16569 }, /* NEGX */ { CPUFUNC(op_40c0_20), 16576 }, /* MVSR2 */ { CPUFUNC(op_40d0_20), 16592 }, /* MVSR2 */ { CPUFUNC(op_40d8_20), 16600 }, /* MVSR2 */ { CPUFUNC(op_40e0_20), 16608 }, /* MVSR2 */ { CPUFUNC(op_40e8_20), 16616 }, /* MVSR2 */ { CPUFUNC(op_40f0_20), 16624 }, /* MVSR2 */ { CPUFUNC(op_40f8_20), 16632 }, /* MVSR2 */ { CPUFUNC(op_40f9_20), 16633 }, /* MVSR2 */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4100_20), 16640 }, /* CHK */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4110_20), 16656 }, /* CHK */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4118_20), 16664 }, /* CHK */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4120_20), 16672 }, /* CHK */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4128_20), 16680 }, /* CHK */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4130_20), 16688 }, /* CHK */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4138_20), 16696 }, /* CHK */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4139_20), 16697 }, /* CHK */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_413a_20), 16698 }, /* CHK */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_413b_20), 16699 }, /* CHK */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_413c_20), 16700 }, /* CHK */ #endif { CPUFUNC(op_4180_20), 16768 }, /* CHK */ { CPUFUNC(op_4190_20), 16784 }, /* CHK */ { CPUFUNC(op_4198_20), 16792 }, /* CHK */ { CPUFUNC(op_41a0_20), 16800 }, /* CHK */ { CPUFUNC(op_41a8_20), 16808 }, /* CHK */ { CPUFUNC(op_41b0_20), 16816 }, /* CHK */ { CPUFUNC(op_41b8_20), 16824 }, /* CHK */ { CPUFUNC(op_41b9_20), 16825 }, /* CHK */ { CPUFUNC(op_41ba_20), 16826 }, /* CHK */ { CPUFUNC(op_41bb_20), 16827 }, /* CHK */ { CPUFUNC(op_41bc_20), 16828 }, /* CHK */ { CPUFUNC(op_41d0_20), 16848 }, /* LEA */ { CPUFUNC(op_41e8_20), 16872 }, /* LEA */ { CPUFUNC(op_41f0_20), 16880 }, /* LEA */ { CPUFUNC(op_41f8_20), 16888 }, /* LEA */ { CPUFUNC(op_41f9_20), 16889 }, /* LEA */ { CPUFUNC(op_41fa_20), 16890 }, /* LEA */ { CPUFUNC(op_41fb_20), 16891 }, /* LEA */ { CPUFUNC(op_4200_20), 16896 }, /* CLR */ { CPUFUNC(op_4210_20), 16912 }, /* CLR */ { CPUFUNC(op_4218_20), 16920 }, /* CLR */ { CPUFUNC(op_4220_20), 16928 }, /* CLR */ { CPUFUNC(op_4228_20), 16936 }, /* CLR */ { CPUFUNC(op_4230_20), 16944 }, /* CLR */ { CPUFUNC(op_4238_20), 16952 }, /* CLR */ { CPUFUNC(op_4239_20), 16953 }, /* CLR */ { CPUFUNC(op_4240_20), 16960 }, /* CLR */ { CPUFUNC(op_4250_20), 16976 }, /* CLR */ { CPUFUNC(op_4258_20), 16984 }, /* CLR */ { CPUFUNC(op_4260_20), 16992 }, /* CLR */ { CPUFUNC(op_4268_20), 17000 }, /* CLR */ { CPUFUNC(op_4270_20), 17008 }, /* CLR */ { CPUFUNC(op_4278_20), 17016 }, /* CLR */ { CPUFUNC(op_4279_20), 17017 }, /* CLR */ { CPUFUNC(op_4280_20), 17024 }, /* CLR */ { CPUFUNC(op_4290_20), 17040 }, /* CLR */ { CPUFUNC(op_4298_20), 17048 }, /* CLR */ { CPUFUNC(op_42a0_20), 17056 }, /* CLR */ { CPUFUNC(op_42a8_20), 17064 }, /* CLR */ { CPUFUNC(op_42b0_20), 17072 }, /* CLR */ { CPUFUNC(op_42b8_20), 17080 }, /* CLR */ { CPUFUNC(op_42b9_20), 17081 }, /* CLR */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_42c0_20), 17088 }, /* MVSR2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_42d0_20), 17104 }, /* MVSR2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_42d8_20), 17112 }, /* MVSR2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_42e0_20), 17120 }, /* MVSR2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_42e8_20), 17128 }, /* MVSR2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_42f0_20), 17136 }, /* MVSR2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_42f8_20), 17144 }, /* MVSR2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_42f9_20), 17145 }, /* MVSR2 */ #endif { CPUFUNC(op_4400_20), 17408 }, /* NEG */ { CPUFUNC(op_4410_20), 17424 }, /* NEG */ { CPUFUNC(op_4418_20), 17432 }, /* NEG */ { CPUFUNC(op_4420_20), 17440 }, /* NEG */ { CPUFUNC(op_4428_20), 17448 }, /* NEG */ { CPUFUNC(op_4430_20), 17456 }, /* NEG */ { CPUFUNC(op_4438_20), 17464 }, /* NEG */ { CPUFUNC(op_4439_20), 17465 }, /* NEG */ { CPUFUNC(op_4440_20), 17472 }, /* NEG */ { CPUFUNC(op_4450_20), 17488 }, /* NEG */ { CPUFUNC(op_4458_20), 17496 }, /* NEG */ { CPUFUNC(op_4460_20), 17504 }, /* NEG */ { CPUFUNC(op_4468_20), 17512 }, /* NEG */ { CPUFUNC(op_4470_20), 17520 }, /* NEG */ { CPUFUNC(op_4478_20), 17528 }, /* NEG */ { CPUFUNC(op_4479_20), 17529 }, /* NEG */ { CPUFUNC(op_4480_20), 17536 }, /* NEG */ { CPUFUNC(op_4490_20), 17552 }, /* NEG */ { CPUFUNC(op_4498_20), 17560 }, /* NEG */ { CPUFUNC(op_44a0_20), 17568 }, /* NEG */ { CPUFUNC(op_44a8_20), 17576 }, /* NEG */ { CPUFUNC(op_44b0_20), 17584 }, /* NEG */ { CPUFUNC(op_44b8_20), 17592 }, /* NEG */ { CPUFUNC(op_44b9_20), 17593 }, /* NEG */ { CPUFUNC(op_44c0_20), 17600 }, /* MV2SR */ { CPUFUNC(op_44d0_20), 17616 }, /* MV2SR */ { CPUFUNC(op_44d8_20), 17624 }, /* MV2SR */ { CPUFUNC(op_44e0_20), 17632 }, /* MV2SR */ { CPUFUNC(op_44e8_20), 17640 }, /* MV2SR */ { CPUFUNC(op_44f0_20), 17648 }, /* MV2SR */ { CPUFUNC(op_44f8_20), 17656 }, /* MV2SR */ { CPUFUNC(op_44f9_20), 17657 }, /* MV2SR */ { CPUFUNC(op_44fa_20), 17658 }, /* MV2SR */ { CPUFUNC(op_44fb_20), 17659 }, /* MV2SR */ { CPUFUNC(op_44fc_20), 17660 }, /* MV2SR */ { CPUFUNC(op_4600_20), 17920 }, /* NOT */ { CPUFUNC(op_4610_20), 17936 }, /* NOT */ { CPUFUNC(op_4618_20), 17944 }, /* NOT */ { CPUFUNC(op_4620_20), 17952 }, /* NOT */ { CPUFUNC(op_4628_20), 17960 }, /* NOT */ { CPUFUNC(op_4630_20), 17968 }, /* NOT */ { CPUFUNC(op_4638_20), 17976 }, /* NOT */ { CPUFUNC(op_4639_20), 17977 }, /* NOT */ { CPUFUNC(op_4640_20), 17984 }, /* NOT */ { CPUFUNC(op_4650_20), 18000 }, /* NOT */ { CPUFUNC(op_4658_20), 18008 }, /* NOT */ { CPUFUNC(op_4660_20), 18016 }, /* NOT */ { CPUFUNC(op_4668_20), 18024 }, /* NOT */ { CPUFUNC(op_4670_20), 18032 }, /* NOT */ { CPUFUNC(op_4678_20), 18040 }, /* NOT */ { CPUFUNC(op_4679_20), 18041 }, /* NOT */ { CPUFUNC(op_4680_20), 18048 }, /* NOT */ { CPUFUNC(op_4690_20), 18064 }, /* NOT */ { CPUFUNC(op_4698_20), 18072 }, /* NOT */ { CPUFUNC(op_46a0_20), 18080 }, /* NOT */ { CPUFUNC(op_46a8_20), 18088 }, /* NOT */ { CPUFUNC(op_46b0_20), 18096 }, /* NOT */ { CPUFUNC(op_46b8_20), 18104 }, /* NOT */ { CPUFUNC(op_46b9_20), 18105 }, /* NOT */ { CPUFUNC(op_46c0_20), 18112 }, /* MV2SR */ { CPUFUNC(op_46d0_20), 18128 }, /* MV2SR */ { CPUFUNC(op_46d8_20), 18136 }, /* MV2SR */ { CPUFUNC(op_46e0_20), 18144 }, /* MV2SR */ { CPUFUNC(op_46e8_20), 18152 }, /* MV2SR */ { CPUFUNC(op_46f0_20), 18160 }, /* MV2SR */ { CPUFUNC(op_46f8_20), 18168 }, /* MV2SR */ { CPUFUNC(op_46f9_20), 18169 }, /* MV2SR */ { CPUFUNC(op_46fa_20), 18170 }, /* MV2SR */ { CPUFUNC(op_46fb_20), 18171 }, /* MV2SR */ { CPUFUNC(op_46fc_20), 18172 }, /* MV2SR */ { CPUFUNC(op_4800_20), 18432 }, /* NBCD */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4808_20), 18440 }, /* LINK */ #endif { CPUFUNC(op_4810_20), 18448 }, /* NBCD */ { CPUFUNC(op_4818_20), 18456 }, /* NBCD */ { CPUFUNC(op_4820_20), 18464 }, /* NBCD */ { CPUFUNC(op_4828_20), 18472 }, /* NBCD */ { CPUFUNC(op_4830_20), 18480 }, /* NBCD */ { CPUFUNC(op_4838_20), 18488 }, /* NBCD */ { CPUFUNC(op_4839_20), 18489 }, /* NBCD */ { CPUFUNC(op_4840_20), 18496 }, /* SWAP */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4848_20), 18504 }, /* BKPT */ #endif { CPUFUNC(op_4850_20), 18512 }, /* PEA */ { CPUFUNC(op_4868_20), 18536 }, /* PEA */ { CPUFUNC(op_4870_20), 18544 }, /* PEA */ { CPUFUNC(op_4878_20), 18552 }, /* PEA */ { CPUFUNC(op_4879_20), 18553 }, /* PEA */ { CPUFUNC(op_487a_20), 18554 }, /* PEA */ { CPUFUNC(op_487b_20), 18555 }, /* PEA */ { CPUFUNC(op_4880_20), 18560 }, /* EXT */ { CPUFUNC(op_4890_20), 18576 }, /* MVMLE */ { CPUFUNC(op_48a0_20), 18592 }, /* MVMLE */ { CPUFUNC(op_48a8_20), 18600 }, /* MVMLE */ { CPUFUNC(op_48b0_20), 18608 }, /* MVMLE */ { CPUFUNC(op_48b8_20), 18616 }, /* MVMLE */ { CPUFUNC(op_48b9_20), 18617 }, /* MVMLE */ { CPUFUNC(op_48c0_20), 18624 }, /* EXT */ { CPUFUNC(op_48d0_20), 18640 }, /* MVMLE */ { CPUFUNC(op_48e0_20), 18656 }, /* MVMLE */ { CPUFUNC(op_48e8_20), 18664 }, /* MVMLE */ { CPUFUNC(op_48f0_20), 18672 }, /* MVMLE */ { CPUFUNC(op_48f8_20), 18680 }, /* MVMLE */ { CPUFUNC(op_48f9_20), 18681 }, /* MVMLE */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_49c0_20), 18880 }, /* EXT */ #endif { CPUFUNC(op_4a00_20), 18944 }, /* TST */ { CPUFUNC(op_4a10_20), 18960 }, /* TST */ { CPUFUNC(op_4a18_20), 18968 }, /* TST */ { CPUFUNC(op_4a20_20), 18976 }, /* TST */ { CPUFUNC(op_4a28_20), 18984 }, /* TST */ { CPUFUNC(op_4a30_20), 18992 }, /* TST */ { CPUFUNC(op_4a38_20), 19000 }, /* TST */ { CPUFUNC(op_4a39_20), 19001 }, /* TST */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4a3a_20), 19002 }, /* TST */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4a3b_20), 19003 }, /* TST */ #endif { CPUFUNC(op_4a3c_20), 19004 }, /* TST */ { CPUFUNC(op_4a40_20), 19008 }, /* TST */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4a48_20), 19016 }, /* TST */ #endif { CPUFUNC(op_4a50_20), 19024 }, /* TST */ { CPUFUNC(op_4a58_20), 19032 }, /* TST */ { CPUFUNC(op_4a60_20), 19040 }, /* TST */ { CPUFUNC(op_4a68_20), 19048 }, /* TST */ { CPUFUNC(op_4a70_20), 19056 }, /* TST */ { CPUFUNC(op_4a78_20), 19064 }, /* TST */ { CPUFUNC(op_4a79_20), 19065 }, /* TST */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4a7a_20), 19066 }, /* TST */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4a7b_20), 19067 }, /* TST */ #endif { CPUFUNC(op_4a7c_20), 19068 }, /* TST */ { CPUFUNC(op_4a80_20), 19072 }, /* TST */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4a88_20), 19080 }, /* TST */ #endif { CPUFUNC(op_4a90_20), 19088 }, /* TST */ { CPUFUNC(op_4a98_20), 19096 }, /* TST */ { CPUFUNC(op_4aa0_20), 19104 }, /* TST */ { CPUFUNC(op_4aa8_20), 19112 }, /* TST */ { CPUFUNC(op_4ab0_20), 19120 }, /* TST */ { CPUFUNC(op_4ab8_20), 19128 }, /* TST */ { CPUFUNC(op_4ab9_20), 19129 }, /* TST */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4aba_20), 19130 }, /* TST */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4abb_20), 19131 }, /* TST */ #endif { CPUFUNC(op_4abc_20), 19132 }, /* TST */ { CPUFUNC(op_4ac0_20), 19136 }, /* TAS */ { CPUFUNC(op_4ad0_20), 19152 }, /* TAS */ { CPUFUNC(op_4ad8_20), 19160 }, /* TAS */ { CPUFUNC(op_4ae0_20), 19168 }, /* TAS */ { CPUFUNC(op_4ae8_20), 19176 }, /* TAS */ { CPUFUNC(op_4af0_20), 19184 }, /* TAS */ { CPUFUNC(op_4af8_20), 19192 }, /* TAS */ { CPUFUNC(op_4af9_20), 19193 }, /* TAS */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4c00_20), 19456 }, /* MULL */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4c10_20), 19472 }, /* MULL */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4c18_20), 19480 }, /* MULL */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4c20_20), 19488 }, /* MULL */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4c28_20), 19496 }, /* MULL */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4c30_20), 19504 }, /* MULL */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4c38_20), 19512 }, /* MULL */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4c39_20), 19513 }, /* MULL */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4c3a_20), 19514 }, /* MULL */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4c3b_20), 19515 }, /* MULL */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4c3c_20), 19516 }, /* MULL */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4c40_20), 19520 }, /* DIVL */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4c50_20), 19536 }, /* DIVL */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4c58_20), 19544 }, /* DIVL */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4c60_20), 19552 }, /* DIVL */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4c68_20), 19560 }, /* DIVL */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4c70_20), 19568 }, /* DIVL */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4c78_20), 19576 }, /* DIVL */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4c79_20), 19577 }, /* DIVL */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4c7a_20), 19578 }, /* DIVL */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4c7b_20), 19579 }, /* DIVL */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4c7c_20), 19580 }, /* DIVL */ #endif { CPUFUNC(op_4c90_20), 19600 }, /* MVMEL */ { CPUFUNC(op_4c98_20), 19608 }, /* MVMEL */ { CPUFUNC(op_4ca8_20), 19624 }, /* MVMEL */ { CPUFUNC(op_4cb0_20), 19632 }, /* MVMEL */ { CPUFUNC(op_4cb8_20), 19640 }, /* MVMEL */ { CPUFUNC(op_4cb9_20), 19641 }, /* MVMEL */ { CPUFUNC(op_4cba_20), 19642 }, /* MVMEL */ { CPUFUNC(op_4cbb_20), 19643 }, /* MVMEL */ { CPUFUNC(op_4cd0_20), 19664 }, /* MVMEL */ { CPUFUNC(op_4cd8_20), 19672 }, /* MVMEL */ { CPUFUNC(op_4ce8_20), 19688 }, /* MVMEL */ { CPUFUNC(op_4cf0_20), 19696 }, /* MVMEL */ { CPUFUNC(op_4cf8_20), 19704 }, /* MVMEL */ { CPUFUNC(op_4cf9_20), 19705 }, /* MVMEL */ { CPUFUNC(op_4cfa_20), 19706 }, /* MVMEL */ { CPUFUNC(op_4cfb_20), 19707 }, /* MVMEL */ { CPUFUNC(op_4e40_20), 20032 }, /* TRAP */ { CPUFUNC(op_4e50_20), 20048 }, /* LINK */ { CPUFUNC(op_4e58_20), 20056 }, /* UNLK */ { CPUFUNC(op_4e60_20), 20064 }, /* MVR2USP */ { CPUFUNC(op_4e68_20), 20072 }, /* MVUSP2R */ { CPUFUNC(op_4e70_20), 20080 }, /* RESET */ { CPUFUNC(op_4e71_20), 20081 }, /* NOP */ { CPUFUNC(op_4e72_20), 20082 }, /* STOP */ { CPUFUNC(op_4e73_20), 20083 }, /* RTE */ { CPUFUNC(op_4e74_20), 20084 }, /* RTD */ { CPUFUNC(op_4e75_20), 20085 }, /* RTS */ { CPUFUNC(op_4e76_20), 20086 }, /* TRAPV */ { CPUFUNC(op_4e77_20), 20087 }, /* RTR */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4e7a_20), 20090 }, /* MOVEC2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4e7b_20), 20091 }, /* MOVE2C */ #endif { CPUFUNC(op_4e90_20), 20112 }, /* JSR */ { CPUFUNC(op_4ea8_20), 20136 }, /* JSR */ { CPUFUNC(op_4eb0_20), 20144 }, /* JSR */ { CPUFUNC(op_4eb8_20), 20152 }, /* JSR */ { CPUFUNC(op_4eb9_20), 20153 }, /* JSR */ { CPUFUNC(op_4eba_20), 20154 }, /* JSR */ { CPUFUNC(op_4ebb_20), 20155 }, /* JSR */ { CPUFUNC(op_4ed0_20), 20176 }, /* JMP */ { CPUFUNC(op_4ee8_20), 20200 }, /* JMP */ { CPUFUNC(op_4ef0_20), 20208 }, /* JMP */ { CPUFUNC(op_4ef8_20), 20216 }, /* JMP */ { CPUFUNC(op_4ef9_20), 20217 }, /* JMP */ { CPUFUNC(op_4efa_20), 20218 }, /* JMP */ { CPUFUNC(op_4efb_20), 20219 }, /* JMP */ { CPUFUNC(op_5000_20), 20480 }, /* ADD */ { CPUFUNC(op_5010_20), 20496 }, /* ADD */ { CPUFUNC(op_5018_20), 20504 }, /* ADD */ { CPUFUNC(op_5020_20), 20512 }, /* ADD */ { CPUFUNC(op_5028_20), 20520 }, /* ADD */ { CPUFUNC(op_5030_20), 20528 }, /* ADD */ { CPUFUNC(op_5038_20), 20536 }, /* ADD */ { CPUFUNC(op_5039_20), 20537 }, /* ADD */ { CPUFUNC(op_5040_20), 20544 }, /* ADD */ { CPUFUNC(op_5048_20), 20552 }, /* ADDA */ { CPUFUNC(op_5050_20), 20560 }, /* ADD */ { CPUFUNC(op_5058_20), 20568 }, /* ADD */ { CPUFUNC(op_5060_20), 20576 }, /* ADD */ { CPUFUNC(op_5068_20), 20584 }, /* ADD */ { CPUFUNC(op_5070_20), 20592 }, /* ADD */ { CPUFUNC(op_5078_20), 20600 }, /* ADD */ { CPUFUNC(op_5079_20), 20601 }, /* ADD */ { CPUFUNC(op_5080_20), 20608 }, /* ADD */ { CPUFUNC(op_5088_20), 20616 }, /* ADDA */ { CPUFUNC(op_5090_20), 20624 }, /* ADD */ { CPUFUNC(op_5098_20), 20632 }, /* ADD */ { CPUFUNC(op_50a0_20), 20640 }, /* ADD */ { CPUFUNC(op_50a8_20), 20648 }, /* ADD */ { CPUFUNC(op_50b0_20), 20656 }, /* ADD */ { CPUFUNC(op_50b8_20), 20664 }, /* ADD */ { CPUFUNC(op_50b9_20), 20665 }, /* ADD */ { CPUFUNC(op_50c0_20), 20672 }, /* Scc */ { CPUFUNC(op_50c8_20), 20680 }, /* DBcc */ { CPUFUNC(op_50d0_20), 20688 }, /* Scc */ { CPUFUNC(op_50d8_20), 20696 }, /* Scc */ { CPUFUNC(op_50e0_20), 20704 }, /* Scc */ { CPUFUNC(op_50e8_20), 20712 }, /* Scc */ { CPUFUNC(op_50f0_20), 20720 }, /* Scc */ { CPUFUNC(op_50f8_20), 20728 }, /* Scc */ { CPUFUNC(op_50f9_20), 20729 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_50fa_20), 20730 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_50fb_20), 20731 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_50fc_20), 20732 }, /* TRAPcc */ #endif { CPUFUNC(op_5100_20), 20736 }, /* SUB */ { CPUFUNC(op_5110_20), 20752 }, /* SUB */ { CPUFUNC(op_5118_20), 20760 }, /* SUB */ { CPUFUNC(op_5120_20), 20768 }, /* SUB */ { CPUFUNC(op_5128_20), 20776 }, /* SUB */ { CPUFUNC(op_5130_20), 20784 }, /* SUB */ { CPUFUNC(op_5138_20), 20792 }, /* SUB */ { CPUFUNC(op_5139_20), 20793 }, /* SUB */ { CPUFUNC(op_5140_20), 20800 }, /* SUB */ { CPUFUNC(op_5148_20), 20808 }, /* SUBA */ { CPUFUNC(op_5150_20), 20816 }, /* SUB */ { CPUFUNC(op_5158_20), 20824 }, /* SUB */ { CPUFUNC(op_5160_20), 20832 }, /* SUB */ { CPUFUNC(op_5168_20), 20840 }, /* SUB */ { CPUFUNC(op_5170_20), 20848 }, /* SUB */ { CPUFUNC(op_5178_20), 20856 }, /* SUB */ { CPUFUNC(op_5179_20), 20857 }, /* SUB */ { CPUFUNC(op_5180_20), 20864 }, /* SUB */ { CPUFUNC(op_5188_20), 20872 }, /* SUBA */ { CPUFUNC(op_5190_20), 20880 }, /* SUB */ { CPUFUNC(op_5198_20), 20888 }, /* SUB */ { CPUFUNC(op_51a0_20), 20896 }, /* SUB */ { CPUFUNC(op_51a8_20), 20904 }, /* SUB */ { CPUFUNC(op_51b0_20), 20912 }, /* SUB */ { CPUFUNC(op_51b8_20), 20920 }, /* SUB */ { CPUFUNC(op_51b9_20), 20921 }, /* SUB */ { CPUFUNC(op_51c0_20), 20928 }, /* Scc */ { CPUFUNC(op_51c8_20), 20936 }, /* DBcc */ { CPUFUNC(op_51d0_20), 20944 }, /* Scc */ { CPUFUNC(op_51d8_20), 20952 }, /* Scc */ { CPUFUNC(op_51e0_20), 20960 }, /* Scc */ { CPUFUNC(op_51e8_20), 20968 }, /* Scc */ { CPUFUNC(op_51f0_20), 20976 }, /* Scc */ { CPUFUNC(op_51f8_20), 20984 }, /* Scc */ { CPUFUNC(op_51f9_20), 20985 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_51fa_20), 20986 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_51fb_20), 20987 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_51fc_20), 20988 }, /* TRAPcc */ #endif { CPUFUNC(op_52c0_20), 21184 }, /* Scc */ { CPUFUNC(op_52c8_20), 21192 }, /* DBcc */ { CPUFUNC(op_52d0_20), 21200 }, /* Scc */ { CPUFUNC(op_52d8_20), 21208 }, /* Scc */ { CPUFUNC(op_52e0_20), 21216 }, /* Scc */ { CPUFUNC(op_52e8_20), 21224 }, /* Scc */ { CPUFUNC(op_52f0_20), 21232 }, /* Scc */ { CPUFUNC(op_52f8_20), 21240 }, /* Scc */ { CPUFUNC(op_52f9_20), 21241 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_52fa_20), 21242 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_52fb_20), 21243 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_52fc_20), 21244 }, /* TRAPcc */ #endif { CPUFUNC(op_53c0_20), 21440 }, /* Scc */ { CPUFUNC(op_53c8_20), 21448 }, /* DBcc */ { CPUFUNC(op_53d0_20), 21456 }, /* Scc */ { CPUFUNC(op_53d8_20), 21464 }, /* Scc */ { CPUFUNC(op_53e0_20), 21472 }, /* Scc */ { CPUFUNC(op_53e8_20), 21480 }, /* Scc */ { CPUFUNC(op_53f0_20), 21488 }, /* Scc */ { CPUFUNC(op_53f8_20), 21496 }, /* Scc */ { CPUFUNC(op_53f9_20), 21497 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_53fa_20), 21498 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_53fb_20), 21499 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_53fc_20), 21500 }, /* TRAPcc */ #endif { CPUFUNC(op_54c0_20), 21696 }, /* Scc */ { CPUFUNC(op_54c8_20), 21704 }, /* DBcc */ { CPUFUNC(op_54d0_20), 21712 }, /* Scc */ { CPUFUNC(op_54d8_20), 21720 }, /* Scc */ { CPUFUNC(op_54e0_20), 21728 }, /* Scc */ { CPUFUNC(op_54e8_20), 21736 }, /* Scc */ { CPUFUNC(op_54f0_20), 21744 }, /* Scc */ { CPUFUNC(op_54f8_20), 21752 }, /* Scc */ { CPUFUNC(op_54f9_20), 21753 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_54fa_20), 21754 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_54fb_20), 21755 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_54fc_20), 21756 }, /* TRAPcc */ #endif { CPUFUNC(op_55c0_20), 21952 }, /* Scc */ { CPUFUNC(op_55c8_20), 21960 }, /* DBcc */ { CPUFUNC(op_55d0_20), 21968 }, /* Scc */ { CPUFUNC(op_55d8_20), 21976 }, /* Scc */ { CPUFUNC(op_55e0_20), 21984 }, /* Scc */ { CPUFUNC(op_55e8_20), 21992 }, /* Scc */ { CPUFUNC(op_55f0_20), 22000 }, /* Scc */ { CPUFUNC(op_55f8_20), 22008 }, /* Scc */ { CPUFUNC(op_55f9_20), 22009 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_55fa_20), 22010 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_55fb_20), 22011 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_55fc_20), 22012 }, /* TRAPcc */ #endif { CPUFUNC(op_56c0_20), 22208 }, /* Scc */ { CPUFUNC(op_56c8_20), 22216 }, /* DBcc */ { CPUFUNC(op_56d0_20), 22224 }, /* Scc */ { CPUFUNC(op_56d8_20), 22232 }, /* Scc */ { CPUFUNC(op_56e0_20), 22240 }, /* Scc */ { CPUFUNC(op_56e8_20), 22248 }, /* Scc */ { CPUFUNC(op_56f0_20), 22256 }, /* Scc */ { CPUFUNC(op_56f8_20), 22264 }, /* Scc */ { CPUFUNC(op_56f9_20), 22265 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_56fa_20), 22266 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_56fb_20), 22267 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_56fc_20), 22268 }, /* TRAPcc */ #endif { CPUFUNC(op_57c0_20), 22464 }, /* Scc */ { CPUFUNC(op_57c8_20), 22472 }, /* DBcc */ { CPUFUNC(op_57d0_20), 22480 }, /* Scc */ { CPUFUNC(op_57d8_20), 22488 }, /* Scc */ { CPUFUNC(op_57e0_20), 22496 }, /* Scc */ { CPUFUNC(op_57e8_20), 22504 }, /* Scc */ { CPUFUNC(op_57f0_20), 22512 }, /* Scc */ { CPUFUNC(op_57f8_20), 22520 }, /* Scc */ { CPUFUNC(op_57f9_20), 22521 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_57fa_20), 22522 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_57fb_20), 22523 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_57fc_20), 22524 }, /* TRAPcc */ #endif { CPUFUNC(op_58c0_20), 22720 }, /* Scc */ { CPUFUNC(op_58c8_20), 22728 }, /* DBcc */ { CPUFUNC(op_58d0_20), 22736 }, /* Scc */ { CPUFUNC(op_58d8_20), 22744 }, /* Scc */ { CPUFUNC(op_58e0_20), 22752 }, /* Scc */ { CPUFUNC(op_58e8_20), 22760 }, /* Scc */ { CPUFUNC(op_58f0_20), 22768 }, /* Scc */ { CPUFUNC(op_58f8_20), 22776 }, /* Scc */ { CPUFUNC(op_58f9_20), 22777 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_58fa_20), 22778 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_58fb_20), 22779 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_58fc_20), 22780 }, /* TRAPcc */ #endif { CPUFUNC(op_59c0_20), 22976 }, /* Scc */ { CPUFUNC(op_59c8_20), 22984 }, /* DBcc */ { CPUFUNC(op_59d0_20), 22992 }, /* Scc */ { CPUFUNC(op_59d8_20), 23000 }, /* Scc */ { CPUFUNC(op_59e0_20), 23008 }, /* Scc */ { CPUFUNC(op_59e8_20), 23016 }, /* Scc */ { CPUFUNC(op_59f0_20), 23024 }, /* Scc */ { CPUFUNC(op_59f8_20), 23032 }, /* Scc */ { CPUFUNC(op_59f9_20), 23033 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_59fa_20), 23034 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_59fb_20), 23035 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_59fc_20), 23036 }, /* TRAPcc */ #endif { CPUFUNC(op_5ac0_20), 23232 }, /* Scc */ { CPUFUNC(op_5ac8_20), 23240 }, /* DBcc */ { CPUFUNC(op_5ad0_20), 23248 }, /* Scc */ { CPUFUNC(op_5ad8_20), 23256 }, /* Scc */ { CPUFUNC(op_5ae0_20), 23264 }, /* Scc */ { CPUFUNC(op_5ae8_20), 23272 }, /* Scc */ { CPUFUNC(op_5af0_20), 23280 }, /* Scc */ { CPUFUNC(op_5af8_20), 23288 }, /* Scc */ { CPUFUNC(op_5af9_20), 23289 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_5afa_20), 23290 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_5afb_20), 23291 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_5afc_20), 23292 }, /* TRAPcc */ #endif { CPUFUNC(op_5bc0_20), 23488 }, /* Scc */ { CPUFUNC(op_5bc8_20), 23496 }, /* DBcc */ { CPUFUNC(op_5bd0_20), 23504 }, /* Scc */ { CPUFUNC(op_5bd8_20), 23512 }, /* Scc */ { CPUFUNC(op_5be0_20), 23520 }, /* Scc */ { CPUFUNC(op_5be8_20), 23528 }, /* Scc */ { CPUFUNC(op_5bf0_20), 23536 }, /* Scc */ { CPUFUNC(op_5bf8_20), 23544 }, /* Scc */ { CPUFUNC(op_5bf9_20), 23545 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_5bfa_20), 23546 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_5bfb_20), 23547 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_5bfc_20), 23548 }, /* TRAPcc */ #endif { CPUFUNC(op_5cc0_20), 23744 }, /* Scc */ { CPUFUNC(op_5cc8_20), 23752 }, /* DBcc */ { CPUFUNC(op_5cd0_20), 23760 }, /* Scc */ { CPUFUNC(op_5cd8_20), 23768 }, /* Scc */ { CPUFUNC(op_5ce0_20), 23776 }, /* Scc */ { CPUFUNC(op_5ce8_20), 23784 }, /* Scc */ { CPUFUNC(op_5cf0_20), 23792 }, /* Scc */ { CPUFUNC(op_5cf8_20), 23800 }, /* Scc */ { CPUFUNC(op_5cf9_20), 23801 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_5cfa_20), 23802 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_5cfb_20), 23803 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_5cfc_20), 23804 }, /* TRAPcc */ #endif { CPUFUNC(op_5dc0_20), 24000 }, /* Scc */ { CPUFUNC(op_5dc8_20), 24008 }, /* DBcc */ { CPUFUNC(op_5dd0_20), 24016 }, /* Scc */ { CPUFUNC(op_5dd8_20), 24024 }, /* Scc */ { CPUFUNC(op_5de0_20), 24032 }, /* Scc */ { CPUFUNC(op_5de8_20), 24040 }, /* Scc */ { CPUFUNC(op_5df0_20), 24048 }, /* Scc */ { CPUFUNC(op_5df8_20), 24056 }, /* Scc */ { CPUFUNC(op_5df9_20), 24057 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_5dfa_20), 24058 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_5dfb_20), 24059 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_5dfc_20), 24060 }, /* TRAPcc */ #endif { CPUFUNC(op_5ec0_20), 24256 }, /* Scc */ { CPUFUNC(op_5ec8_20), 24264 }, /* DBcc */ { CPUFUNC(op_5ed0_20), 24272 }, /* Scc */ { CPUFUNC(op_5ed8_20), 24280 }, /* Scc */ { CPUFUNC(op_5ee0_20), 24288 }, /* Scc */ { CPUFUNC(op_5ee8_20), 24296 }, /* Scc */ { CPUFUNC(op_5ef0_20), 24304 }, /* Scc */ { CPUFUNC(op_5ef8_20), 24312 }, /* Scc */ { CPUFUNC(op_5ef9_20), 24313 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_5efa_20), 24314 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_5efb_20), 24315 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_5efc_20), 24316 }, /* TRAPcc */ #endif { CPUFUNC(op_5fc0_20), 24512 }, /* Scc */ { CPUFUNC(op_5fc8_20), 24520 }, /* DBcc */ { CPUFUNC(op_5fd0_20), 24528 }, /* Scc */ { CPUFUNC(op_5fd8_20), 24536 }, /* Scc */ { CPUFUNC(op_5fe0_20), 24544 }, /* Scc */ { CPUFUNC(op_5fe8_20), 24552 }, /* Scc */ { CPUFUNC(op_5ff0_20), 24560 }, /* Scc */ { CPUFUNC(op_5ff8_20), 24568 }, /* Scc */ { CPUFUNC(op_5ff9_20), 24569 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_5ffa_20), 24570 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_5ffb_20), 24571 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_5ffc_20), 24572 }, /* TRAPcc */ #endif { CPUFUNC(op_6000_20), 24576 }, /* Bcc */ { CPUFUNC(op_6001_20), 24577 }, /* Bcc */ { CPUFUNC(op_60ff_20), 24831 }, /* Bcc */ { CPUFUNC(op_6100_20), 24832 }, /* BSR */ { CPUFUNC(op_6101_20), 24833 }, /* BSR */ { CPUFUNC(op_61ff_20), 25087 }, /* BSR */ { CPUFUNC(op_6200_20), 25088 }, /* Bcc */ { CPUFUNC(op_6201_20), 25089 }, /* Bcc */ { CPUFUNC(op_62ff_20), 25343 }, /* Bcc */ { CPUFUNC(op_6300_20), 25344 }, /* Bcc */ { CPUFUNC(op_6301_20), 25345 }, /* Bcc */ { CPUFUNC(op_63ff_20), 25599 }, /* Bcc */ { CPUFUNC(op_6400_20), 25600 }, /* Bcc */ { CPUFUNC(op_6401_20), 25601 }, /* Bcc */ { CPUFUNC(op_64ff_20), 25855 }, /* Bcc */ { CPUFUNC(op_6500_20), 25856 }, /* Bcc */ { CPUFUNC(op_6501_20), 25857 }, /* Bcc */ { CPUFUNC(op_65ff_20), 26111 }, /* Bcc */ { CPUFUNC(op_6600_20), 26112 }, /* Bcc */ { CPUFUNC(op_6601_20), 26113 }, /* Bcc */ { CPUFUNC(op_66ff_20), 26367 }, /* Bcc */ { CPUFUNC(op_6700_20), 26368 }, /* Bcc */ { CPUFUNC(op_6701_20), 26369 }, /* Bcc */ { CPUFUNC(op_67ff_20), 26623 }, /* Bcc */ { CPUFUNC(op_6800_20), 26624 }, /* Bcc */ { CPUFUNC(op_6801_20), 26625 }, /* Bcc */ { CPUFUNC(op_68ff_20), 26879 }, /* Bcc */ { CPUFUNC(op_6900_20), 26880 }, /* Bcc */ { CPUFUNC(op_6901_20), 26881 }, /* Bcc */ { CPUFUNC(op_69ff_20), 27135 }, /* Bcc */ { CPUFUNC(op_6a00_20), 27136 }, /* Bcc */ { CPUFUNC(op_6a01_20), 27137 }, /* Bcc */ { CPUFUNC(op_6aff_20), 27391 }, /* Bcc */ { CPUFUNC(op_6b00_20), 27392 }, /* Bcc */ { CPUFUNC(op_6b01_20), 27393 }, /* Bcc */ { CPUFUNC(op_6bff_20), 27647 }, /* Bcc */ { CPUFUNC(op_6c00_20), 27648 }, /* Bcc */ { CPUFUNC(op_6c01_20), 27649 }, /* Bcc */ { CPUFUNC(op_6cff_20), 27903 }, /* Bcc */ { CPUFUNC(op_6d00_20), 27904 }, /* Bcc */ { CPUFUNC(op_6d01_20), 27905 }, /* Bcc */ { CPUFUNC(op_6dff_20), 28159 }, /* Bcc */ { CPUFUNC(op_6e00_20), 28160 }, /* Bcc */ { CPUFUNC(op_6e01_20), 28161 }, /* Bcc */ { CPUFUNC(op_6eff_20), 28415 }, /* Bcc */ { CPUFUNC(op_6f00_20), 28416 }, /* Bcc */ { CPUFUNC(op_6f01_20), 28417 }, /* Bcc */ { CPUFUNC(op_6fff_20), 28671 }, /* Bcc */ { CPUFUNC(op_7000_20), 28672 }, /* MOVE */ { CPUFUNC(op_8000_20), 32768 }, /* OR */ { CPUFUNC(op_8010_20), 32784 }, /* OR */ { CPUFUNC(op_8018_20), 32792 }, /* OR */ { CPUFUNC(op_8020_20), 32800 }, /* OR */ { CPUFUNC(op_8028_20), 32808 }, /* OR */ { CPUFUNC(op_8030_20), 32816 }, /* OR */ { CPUFUNC(op_8038_20), 32824 }, /* OR */ { CPUFUNC(op_8039_20), 32825 }, /* OR */ { CPUFUNC(op_803a_20), 32826 }, /* OR */ { CPUFUNC(op_803b_20), 32827 }, /* OR */ { CPUFUNC(op_803c_20), 32828 }, /* OR */ { CPUFUNC(op_8040_20), 32832 }, /* OR */ { CPUFUNC(op_8050_20), 32848 }, /* OR */ { CPUFUNC(op_8058_20), 32856 }, /* OR */ { CPUFUNC(op_8060_20), 32864 }, /* OR */ { CPUFUNC(op_8068_20), 32872 }, /* OR */ { CPUFUNC(op_8070_20), 32880 }, /* OR */ { CPUFUNC(op_8078_20), 32888 }, /* OR */ { CPUFUNC(op_8079_20), 32889 }, /* OR */ { CPUFUNC(op_807a_20), 32890 }, /* OR */ { CPUFUNC(op_807b_20), 32891 }, /* OR */ { CPUFUNC(op_807c_20), 32892 }, /* OR */ { CPUFUNC(op_8080_20), 32896 }, /* OR */ { CPUFUNC(op_8090_20), 32912 }, /* OR */ { CPUFUNC(op_8098_20), 32920 }, /* OR */ { CPUFUNC(op_80a0_20), 32928 }, /* OR */ { CPUFUNC(op_80a8_20), 32936 }, /* OR */ { CPUFUNC(op_80b0_20), 32944 }, /* OR */ { CPUFUNC(op_80b8_20), 32952 }, /* OR */ { CPUFUNC(op_80b9_20), 32953 }, /* OR */ { CPUFUNC(op_80ba_20), 32954 }, /* OR */ { CPUFUNC(op_80bb_20), 32955 }, /* OR */ { CPUFUNC(op_80bc_20), 32956 }, /* OR */ { CPUFUNC(op_80c0_20), 32960 }, /* DIVU */ { CPUFUNC(op_80d0_20), 32976 }, /* DIVU */ { CPUFUNC(op_80d8_20), 32984 }, /* DIVU */ { CPUFUNC(op_80e0_20), 32992 }, /* DIVU */ { CPUFUNC(op_80e8_20), 33000 }, /* DIVU */ { CPUFUNC(op_80f0_20), 33008 }, /* DIVU */ { CPUFUNC(op_80f8_20), 33016 }, /* DIVU */ { CPUFUNC(op_80f9_20), 33017 }, /* DIVU */ { CPUFUNC(op_80fa_20), 33018 }, /* DIVU */ { CPUFUNC(op_80fb_20), 33019 }, /* DIVU */ { CPUFUNC(op_80fc_20), 33020 }, /* DIVU */ { CPUFUNC(op_8100_20), 33024 }, /* SBCD */ { CPUFUNC(op_8108_20), 33032 }, /* SBCD */ { CPUFUNC(op_8110_20), 33040 }, /* OR */ { CPUFUNC(op_8118_20), 33048 }, /* OR */ { CPUFUNC(op_8120_20), 33056 }, /* OR */ { CPUFUNC(op_8128_20), 33064 }, /* OR */ { CPUFUNC(op_8130_20), 33072 }, /* OR */ { CPUFUNC(op_8138_20), 33080 }, /* OR */ { CPUFUNC(op_8139_20), 33081 }, /* OR */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_8140_20), 33088 }, /* PACK */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_8148_20), 33096 }, /* PACK */ #endif { CPUFUNC(op_8150_20), 33104 }, /* OR */ { CPUFUNC(op_8158_20), 33112 }, /* OR */ { CPUFUNC(op_8160_20), 33120 }, /* OR */ { CPUFUNC(op_8168_20), 33128 }, /* OR */ { CPUFUNC(op_8170_20), 33136 }, /* OR */ { CPUFUNC(op_8178_20), 33144 }, /* OR */ { CPUFUNC(op_8179_20), 33145 }, /* OR */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_8180_20), 33152 }, /* UNPK */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_8188_20), 33160 }, /* UNPK */ #endif { CPUFUNC(op_8190_20), 33168 }, /* OR */ { CPUFUNC(op_8198_20), 33176 }, /* OR */ { CPUFUNC(op_81a0_20), 33184 }, /* OR */ { CPUFUNC(op_81a8_20), 33192 }, /* OR */ { CPUFUNC(op_81b0_20), 33200 }, /* OR */ { CPUFUNC(op_81b8_20), 33208 }, /* OR */ { CPUFUNC(op_81b9_20), 33209 }, /* OR */ { CPUFUNC(op_81c0_20), 33216 }, /* DIVS */ { CPUFUNC(op_81d0_20), 33232 }, /* DIVS */ { CPUFUNC(op_81d8_20), 33240 }, /* DIVS */ { CPUFUNC(op_81e0_20), 33248 }, /* DIVS */ { CPUFUNC(op_81e8_20), 33256 }, /* DIVS */ { CPUFUNC(op_81f0_20), 33264 }, /* DIVS */ { CPUFUNC(op_81f8_20), 33272 }, /* DIVS */ { CPUFUNC(op_81f9_20), 33273 }, /* DIVS */ { CPUFUNC(op_81fa_20), 33274 }, /* DIVS */ { CPUFUNC(op_81fb_20), 33275 }, /* DIVS */ { CPUFUNC(op_81fc_20), 33276 }, /* DIVS */ { CPUFUNC(op_9000_20), 36864 }, /* SUB */ { CPUFUNC(op_9010_20), 36880 }, /* SUB */ { CPUFUNC(op_9018_20), 36888 }, /* SUB */ { CPUFUNC(op_9020_20), 36896 }, /* SUB */ { CPUFUNC(op_9028_20), 36904 }, /* SUB */ { CPUFUNC(op_9030_20), 36912 }, /* SUB */ { CPUFUNC(op_9038_20), 36920 }, /* SUB */ { CPUFUNC(op_9039_20), 36921 }, /* SUB */ { CPUFUNC(op_903a_20), 36922 }, /* SUB */ { CPUFUNC(op_903b_20), 36923 }, /* SUB */ { CPUFUNC(op_903c_20), 36924 }, /* SUB */ { CPUFUNC(op_9040_20), 36928 }, /* SUB */ { CPUFUNC(op_9048_20), 36936 }, /* SUB */ { CPUFUNC(op_9050_20), 36944 }, /* SUB */ { CPUFUNC(op_9058_20), 36952 }, /* SUB */ { CPUFUNC(op_9060_20), 36960 }, /* SUB */ { CPUFUNC(op_9068_20), 36968 }, /* SUB */ { CPUFUNC(op_9070_20), 36976 }, /* SUB */ { CPUFUNC(op_9078_20), 36984 }, /* SUB */ { CPUFUNC(op_9079_20), 36985 }, /* SUB */ { CPUFUNC(op_907a_20), 36986 }, /* SUB */ { CPUFUNC(op_907b_20), 36987 }, /* SUB */ { CPUFUNC(op_907c_20), 36988 }, /* SUB */ { CPUFUNC(op_9080_20), 36992 }, /* SUB */ { CPUFUNC(op_9088_20), 37000 }, /* SUB */ { CPUFUNC(op_9090_20), 37008 }, /* SUB */ { CPUFUNC(op_9098_20), 37016 }, /* SUB */ { CPUFUNC(op_90a0_20), 37024 }, /* SUB */ { CPUFUNC(op_90a8_20), 37032 }, /* SUB */ { CPUFUNC(op_90b0_20), 37040 }, /* SUB */ { CPUFUNC(op_90b8_20), 37048 }, /* SUB */ { CPUFUNC(op_90b9_20), 37049 }, /* SUB */ { CPUFUNC(op_90ba_20), 37050 }, /* SUB */ { CPUFUNC(op_90bb_20), 37051 }, /* SUB */ { CPUFUNC(op_90bc_20), 37052 }, /* SUB */ { CPUFUNC(op_90c0_20), 37056 }, /* SUBA */ { CPUFUNC(op_90c8_20), 37064 }, /* SUBA */ { CPUFUNC(op_90d0_20), 37072 }, /* SUBA */ { CPUFUNC(op_90d8_20), 37080 }, /* SUBA */ { CPUFUNC(op_90e0_20), 37088 }, /* SUBA */ { CPUFUNC(op_90e8_20), 37096 }, /* SUBA */ { CPUFUNC(op_90f0_20), 37104 }, /* SUBA */ { CPUFUNC(op_90f8_20), 37112 }, /* SUBA */ { CPUFUNC(op_90f9_20), 37113 }, /* SUBA */ { CPUFUNC(op_90fa_20), 37114 }, /* SUBA */ { CPUFUNC(op_90fb_20), 37115 }, /* SUBA */ { CPUFUNC(op_90fc_20), 37116 }, /* SUBA */ { CPUFUNC(op_9100_20), 37120 }, /* SUBX */ { CPUFUNC(op_9108_20), 37128 }, /* SUBX */ { CPUFUNC(op_9110_20), 37136 }, /* SUB */ { CPUFUNC(op_9118_20), 37144 }, /* SUB */ { CPUFUNC(op_9120_20), 37152 }, /* SUB */ { CPUFUNC(op_9128_20), 37160 }, /* SUB */ { CPUFUNC(op_9130_20), 37168 }, /* SUB */ { CPUFUNC(op_9138_20), 37176 }, /* SUB */ { CPUFUNC(op_9139_20), 37177 }, /* SUB */ { CPUFUNC(op_9140_20), 37184 }, /* SUBX */ { CPUFUNC(op_9148_20), 37192 }, /* SUBX */ { CPUFUNC(op_9150_20), 37200 }, /* SUB */ { CPUFUNC(op_9158_20), 37208 }, /* SUB */ { CPUFUNC(op_9160_20), 37216 }, /* SUB */ { CPUFUNC(op_9168_20), 37224 }, /* SUB */ { CPUFUNC(op_9170_20), 37232 }, /* SUB */ { CPUFUNC(op_9178_20), 37240 }, /* SUB */ { CPUFUNC(op_9179_20), 37241 }, /* SUB */ { CPUFUNC(op_9180_20), 37248 }, /* SUBX */ { CPUFUNC(op_9188_20), 37256 }, /* SUBX */ { CPUFUNC(op_9190_20), 37264 }, /* SUB */ { CPUFUNC(op_9198_20), 37272 }, /* SUB */ { CPUFUNC(op_91a0_20), 37280 }, /* SUB */ { CPUFUNC(op_91a8_20), 37288 }, /* SUB */ { CPUFUNC(op_91b0_20), 37296 }, /* SUB */ { CPUFUNC(op_91b8_20), 37304 }, /* SUB */ { CPUFUNC(op_91b9_20), 37305 }, /* SUB */ { CPUFUNC(op_91c0_20), 37312 }, /* SUBA */ { CPUFUNC(op_91c8_20), 37320 }, /* SUBA */ { CPUFUNC(op_91d0_20), 37328 }, /* SUBA */ { CPUFUNC(op_91d8_20), 37336 }, /* SUBA */ { CPUFUNC(op_91e0_20), 37344 }, /* SUBA */ { CPUFUNC(op_91e8_20), 37352 }, /* SUBA */ { CPUFUNC(op_91f0_20), 37360 }, /* SUBA */ { CPUFUNC(op_91f8_20), 37368 }, /* SUBA */ { CPUFUNC(op_91f9_20), 37369 }, /* SUBA */ { CPUFUNC(op_91fa_20), 37370 }, /* SUBA */ { CPUFUNC(op_91fb_20), 37371 }, /* SUBA */ { CPUFUNC(op_91fc_20), 37372 }, /* SUBA */ { CPUFUNC(op_b000_20), 45056 }, /* CMP */ { CPUFUNC(op_b010_20), 45072 }, /* CMP */ { CPUFUNC(op_b018_20), 45080 }, /* CMP */ { CPUFUNC(op_b020_20), 45088 }, /* CMP */ { CPUFUNC(op_b028_20), 45096 }, /* CMP */ { CPUFUNC(op_b030_20), 45104 }, /* CMP */ { CPUFUNC(op_b038_20), 45112 }, /* CMP */ { CPUFUNC(op_b039_20), 45113 }, /* CMP */ { CPUFUNC(op_b03a_20), 45114 }, /* CMP */ { CPUFUNC(op_b03b_20), 45115 }, /* CMP */ { CPUFUNC(op_b03c_20), 45116 }, /* CMP */ { CPUFUNC(op_b040_20), 45120 }, /* CMP */ { CPUFUNC(op_b048_20), 45128 }, /* CMP */ { CPUFUNC(op_b050_20), 45136 }, /* CMP */ { CPUFUNC(op_b058_20), 45144 }, /* CMP */ { CPUFUNC(op_b060_20), 45152 }, /* CMP */ { CPUFUNC(op_b068_20), 45160 }, /* CMP */ { CPUFUNC(op_b070_20), 45168 }, /* CMP */ { CPUFUNC(op_b078_20), 45176 }, /* CMP */ { CPUFUNC(op_b079_20), 45177 }, /* CMP */ { CPUFUNC(op_b07a_20), 45178 }, /* CMP */ { CPUFUNC(op_b07b_20), 45179 }, /* CMP */ { CPUFUNC(op_b07c_20), 45180 }, /* CMP */ { CPUFUNC(op_b080_20), 45184 }, /* CMP */ { CPUFUNC(op_b088_20), 45192 }, /* CMP */ { CPUFUNC(op_b090_20), 45200 }, /* CMP */ { CPUFUNC(op_b098_20), 45208 }, /* CMP */ { CPUFUNC(op_b0a0_20), 45216 }, /* CMP */ { CPUFUNC(op_b0a8_20), 45224 }, /* CMP */ { CPUFUNC(op_b0b0_20), 45232 }, /* CMP */ { CPUFUNC(op_b0b8_20), 45240 }, /* CMP */ { CPUFUNC(op_b0b9_20), 45241 }, /* CMP */ { CPUFUNC(op_b0ba_20), 45242 }, /* CMP */ { CPUFUNC(op_b0bb_20), 45243 }, /* CMP */ { CPUFUNC(op_b0bc_20), 45244 }, /* CMP */ { CPUFUNC(op_b0c0_20), 45248 }, /* CMPA */ { CPUFUNC(op_b0c8_20), 45256 }, /* CMPA */ { CPUFUNC(op_b0d0_20), 45264 }, /* CMPA */ { CPUFUNC(op_b0d8_20), 45272 }, /* CMPA */ { CPUFUNC(op_b0e0_20), 45280 }, /* CMPA */ { CPUFUNC(op_b0e8_20), 45288 }, /* CMPA */ { CPUFUNC(op_b0f0_20), 45296 }, /* CMPA */ { CPUFUNC(op_b0f8_20), 45304 }, /* CMPA */ { CPUFUNC(op_b0f9_20), 45305 }, /* CMPA */ { CPUFUNC(op_b0fa_20), 45306 }, /* CMPA */ { CPUFUNC(op_b0fb_20), 45307 }, /* CMPA */ { CPUFUNC(op_b0fc_20), 45308 }, /* CMPA */ { CPUFUNC(op_b100_20), 45312 }, /* EOR */ { CPUFUNC(op_b108_20), 45320 }, /* CMPM */ { CPUFUNC(op_b110_20), 45328 }, /* EOR */ { CPUFUNC(op_b118_20), 45336 }, /* EOR */ { CPUFUNC(op_b120_20), 45344 }, /* EOR */ { CPUFUNC(op_b128_20), 45352 }, /* EOR */ { CPUFUNC(op_b130_20), 45360 }, /* EOR */ { CPUFUNC(op_b138_20), 45368 }, /* EOR */ { CPUFUNC(op_b139_20), 45369 }, /* EOR */ { CPUFUNC(op_b140_20), 45376 }, /* EOR */ { CPUFUNC(op_b148_20), 45384 }, /* CMPM */ { CPUFUNC(op_b150_20), 45392 }, /* EOR */ { CPUFUNC(op_b158_20), 45400 }, /* EOR */ { CPUFUNC(op_b160_20), 45408 }, /* EOR */ { CPUFUNC(op_b168_20), 45416 }, /* EOR */ { CPUFUNC(op_b170_20), 45424 }, /* EOR */ { CPUFUNC(op_b178_20), 45432 }, /* EOR */ { CPUFUNC(op_b179_20), 45433 }, /* EOR */ { CPUFUNC(op_b180_20), 45440 }, /* EOR */ { CPUFUNC(op_b188_20), 45448 }, /* CMPM */ { CPUFUNC(op_b190_20), 45456 }, /* EOR */ { CPUFUNC(op_b198_20), 45464 }, /* EOR */ { CPUFUNC(op_b1a0_20), 45472 }, /* EOR */ { CPUFUNC(op_b1a8_20), 45480 }, /* EOR */ { CPUFUNC(op_b1b0_20), 45488 }, /* EOR */ { CPUFUNC(op_b1b8_20), 45496 }, /* EOR */ { CPUFUNC(op_b1b9_20), 45497 }, /* EOR */ { CPUFUNC(op_b1c0_20), 45504 }, /* CMPA */ { CPUFUNC(op_b1c8_20), 45512 }, /* CMPA */ { CPUFUNC(op_b1d0_20), 45520 }, /* CMPA */ { CPUFUNC(op_b1d8_20), 45528 }, /* CMPA */ { CPUFUNC(op_b1e0_20), 45536 }, /* CMPA */ { CPUFUNC(op_b1e8_20), 45544 }, /* CMPA */ { CPUFUNC(op_b1f0_20), 45552 }, /* CMPA */ { CPUFUNC(op_b1f8_20), 45560 }, /* CMPA */ { CPUFUNC(op_b1f9_20), 45561 }, /* CMPA */ { CPUFUNC(op_b1fa_20), 45562 }, /* CMPA */ { CPUFUNC(op_b1fb_20), 45563 }, /* CMPA */ { CPUFUNC(op_b1fc_20), 45564 }, /* CMPA */ { CPUFUNC(op_c000_20), 49152 }, /* AND */ { CPUFUNC(op_c010_20), 49168 }, /* AND */ { CPUFUNC(op_c018_20), 49176 }, /* AND */ { CPUFUNC(op_c020_20), 49184 }, /* AND */ { CPUFUNC(op_c028_20), 49192 }, /* AND */ { CPUFUNC(op_c030_20), 49200 }, /* AND */ { CPUFUNC(op_c038_20), 49208 }, /* AND */ { CPUFUNC(op_c039_20), 49209 }, /* AND */ { CPUFUNC(op_c03a_20), 49210 }, /* AND */ { CPUFUNC(op_c03b_20), 49211 }, /* AND */ { CPUFUNC(op_c03c_20), 49212 }, /* AND */ { CPUFUNC(op_c040_20), 49216 }, /* AND */ { CPUFUNC(op_c050_20), 49232 }, /* AND */ { CPUFUNC(op_c058_20), 49240 }, /* AND */ { CPUFUNC(op_c060_20), 49248 }, /* AND */ { CPUFUNC(op_c068_20), 49256 }, /* AND */ { CPUFUNC(op_c070_20), 49264 }, /* AND */ { CPUFUNC(op_c078_20), 49272 }, /* AND */ { CPUFUNC(op_c079_20), 49273 }, /* AND */ { CPUFUNC(op_c07a_20), 49274 }, /* AND */ { CPUFUNC(op_c07b_20), 49275 }, /* AND */ { CPUFUNC(op_c07c_20), 49276 }, /* AND */ { CPUFUNC(op_c080_20), 49280 }, /* AND */ { CPUFUNC(op_c090_20), 49296 }, /* AND */ { CPUFUNC(op_c098_20), 49304 }, /* AND */ { CPUFUNC(op_c0a0_20), 49312 }, /* AND */ { CPUFUNC(op_c0a8_20), 49320 }, /* AND */ { CPUFUNC(op_c0b0_20), 49328 }, /* AND */ { CPUFUNC(op_c0b8_20), 49336 }, /* AND */ { CPUFUNC(op_c0b9_20), 49337 }, /* AND */ { CPUFUNC(op_c0ba_20), 49338 }, /* AND */ { CPUFUNC(op_c0bb_20), 49339 }, /* AND */ { CPUFUNC(op_c0bc_20), 49340 }, /* AND */ { CPUFUNC(op_c0c0_20), 49344 }, /* MULU */ { CPUFUNC(op_c0d0_20), 49360 }, /* MULU */ { CPUFUNC(op_c0d8_20), 49368 }, /* MULU */ { CPUFUNC(op_c0e0_20), 49376 }, /* MULU */ { CPUFUNC(op_c0e8_20), 49384 }, /* MULU */ { CPUFUNC(op_c0f0_20), 49392 }, /* MULU */ { CPUFUNC(op_c0f8_20), 49400 }, /* MULU */ { CPUFUNC(op_c0f9_20), 49401 }, /* MULU */ { CPUFUNC(op_c0fa_20), 49402 }, /* MULU */ { CPUFUNC(op_c0fb_20), 49403 }, /* MULU */ { CPUFUNC(op_c0fc_20), 49404 }, /* MULU */ { CPUFUNC(op_c100_20), 49408 }, /* ABCD */ { CPUFUNC(op_c108_20), 49416 }, /* ABCD */ { CPUFUNC(op_c110_20), 49424 }, /* AND */ { CPUFUNC(op_c118_20), 49432 }, /* AND */ { CPUFUNC(op_c120_20), 49440 }, /* AND */ { CPUFUNC(op_c128_20), 49448 }, /* AND */ { CPUFUNC(op_c130_20), 49456 }, /* AND */ { CPUFUNC(op_c138_20), 49464 }, /* AND */ { CPUFUNC(op_c139_20), 49465 }, /* AND */ { CPUFUNC(op_c140_20), 49472 }, /* EXG */ { CPUFUNC(op_c148_20), 49480 }, /* EXG */ { CPUFUNC(op_c150_20), 49488 }, /* AND */ { CPUFUNC(op_c158_20), 49496 }, /* AND */ { CPUFUNC(op_c160_20), 49504 }, /* AND */ { CPUFUNC(op_c168_20), 49512 }, /* AND */ { CPUFUNC(op_c170_20), 49520 }, /* AND */ { CPUFUNC(op_c178_20), 49528 }, /* AND */ { CPUFUNC(op_c179_20), 49529 }, /* AND */ { CPUFUNC(op_c188_20), 49544 }, /* EXG */ { CPUFUNC(op_c190_20), 49552 }, /* AND */ { CPUFUNC(op_c198_20), 49560 }, /* AND */ { CPUFUNC(op_c1a0_20), 49568 }, /* AND */ { CPUFUNC(op_c1a8_20), 49576 }, /* AND */ { CPUFUNC(op_c1b0_20), 49584 }, /* AND */ { CPUFUNC(op_c1b8_20), 49592 }, /* AND */ { CPUFUNC(op_c1b9_20), 49593 }, /* AND */ { CPUFUNC(op_c1c0_20), 49600 }, /* MULS */ { CPUFUNC(op_c1d0_20), 49616 }, /* MULS */ { CPUFUNC(op_c1d8_20), 49624 }, /* MULS */ { CPUFUNC(op_c1e0_20), 49632 }, /* MULS */ { CPUFUNC(op_c1e8_20), 49640 }, /* MULS */ { CPUFUNC(op_c1f0_20), 49648 }, /* MULS */ { CPUFUNC(op_c1f8_20), 49656 }, /* MULS */ { CPUFUNC(op_c1f9_20), 49657 }, /* MULS */ { CPUFUNC(op_c1fa_20), 49658 }, /* MULS */ { CPUFUNC(op_c1fb_20), 49659 }, /* MULS */ { CPUFUNC(op_c1fc_20), 49660 }, /* MULS */ { CPUFUNC(op_d000_20), 53248 }, /* ADD */ { CPUFUNC(op_d010_20), 53264 }, /* ADD */ { CPUFUNC(op_d018_20), 53272 }, /* ADD */ { CPUFUNC(op_d020_20), 53280 }, /* ADD */ { CPUFUNC(op_d028_20), 53288 }, /* ADD */ { CPUFUNC(op_d030_20), 53296 }, /* ADD */ { CPUFUNC(op_d038_20), 53304 }, /* ADD */ { CPUFUNC(op_d039_20), 53305 }, /* ADD */ { CPUFUNC(op_d03a_20), 53306 }, /* ADD */ { CPUFUNC(op_d03b_20), 53307 }, /* ADD */ { CPUFUNC(op_d03c_20), 53308 }, /* ADD */ { CPUFUNC(op_d040_20), 53312 }, /* ADD */ { CPUFUNC(op_d048_20), 53320 }, /* ADD */ { CPUFUNC(op_d050_20), 53328 }, /* ADD */ { CPUFUNC(op_d058_20), 53336 }, /* ADD */ { CPUFUNC(op_d060_20), 53344 }, /* ADD */ { CPUFUNC(op_d068_20), 53352 }, /* ADD */ { CPUFUNC(op_d070_20), 53360 }, /* ADD */ { CPUFUNC(op_d078_20), 53368 }, /* ADD */ { CPUFUNC(op_d079_20), 53369 }, /* ADD */ { CPUFUNC(op_d07a_20), 53370 }, /* ADD */ { CPUFUNC(op_d07b_20), 53371 }, /* ADD */ { CPUFUNC(op_d07c_20), 53372 }, /* ADD */ { CPUFUNC(op_d080_20), 53376 }, /* ADD */ { CPUFUNC(op_d088_20), 53384 }, /* ADD */ { CPUFUNC(op_d090_20), 53392 }, /* ADD */ { CPUFUNC(op_d098_20), 53400 }, /* ADD */ { CPUFUNC(op_d0a0_20), 53408 }, /* ADD */ { CPUFUNC(op_d0a8_20), 53416 }, /* ADD */ { CPUFUNC(op_d0b0_20), 53424 }, /* ADD */ { CPUFUNC(op_d0b8_20), 53432 }, /* ADD */ { CPUFUNC(op_d0b9_20), 53433 }, /* ADD */ { CPUFUNC(op_d0ba_20), 53434 }, /* ADD */ { CPUFUNC(op_d0bb_20), 53435 }, /* ADD */ { CPUFUNC(op_d0bc_20), 53436 }, /* ADD */ { CPUFUNC(op_d0c0_20), 53440 }, /* ADDA */ { CPUFUNC(op_d0c8_20), 53448 }, /* ADDA */ { CPUFUNC(op_d0d0_20), 53456 }, /* ADDA */ { CPUFUNC(op_d0d8_20), 53464 }, /* ADDA */ { CPUFUNC(op_d0e0_20), 53472 }, /* ADDA */ { CPUFUNC(op_d0e8_20), 53480 }, /* ADDA */ { CPUFUNC(op_d0f0_20), 53488 }, /* ADDA */ { CPUFUNC(op_d0f8_20), 53496 }, /* ADDA */ { CPUFUNC(op_d0f9_20), 53497 }, /* ADDA */ { CPUFUNC(op_d0fa_20), 53498 }, /* ADDA */ { CPUFUNC(op_d0fb_20), 53499 }, /* ADDA */ { CPUFUNC(op_d0fc_20), 53500 }, /* ADDA */ { CPUFUNC(op_d100_20), 53504 }, /* ADDX */ { CPUFUNC(op_d108_20), 53512 }, /* ADDX */ { CPUFUNC(op_d110_20), 53520 }, /* ADD */ { CPUFUNC(op_d118_20), 53528 }, /* ADD */ { CPUFUNC(op_d120_20), 53536 }, /* ADD */ { CPUFUNC(op_d128_20), 53544 }, /* ADD */ { CPUFUNC(op_d130_20), 53552 }, /* ADD */ { CPUFUNC(op_d138_20), 53560 }, /* ADD */ { CPUFUNC(op_d139_20), 53561 }, /* ADD */ { CPUFUNC(op_d140_20), 53568 }, /* ADDX */ { CPUFUNC(op_d148_20), 53576 }, /* ADDX */ { CPUFUNC(op_d150_20), 53584 }, /* ADD */ { CPUFUNC(op_d158_20), 53592 }, /* ADD */ { CPUFUNC(op_d160_20), 53600 }, /* ADD */ { CPUFUNC(op_d168_20), 53608 }, /* ADD */ { CPUFUNC(op_d170_20), 53616 }, /* ADD */ { CPUFUNC(op_d178_20), 53624 }, /* ADD */ { CPUFUNC(op_d179_20), 53625 }, /* ADD */ { CPUFUNC(op_d180_20), 53632 }, /* ADDX */ { CPUFUNC(op_d188_20), 53640 }, /* ADDX */ { CPUFUNC(op_d190_20), 53648 }, /* ADD */ { CPUFUNC(op_d198_20), 53656 }, /* ADD */ { CPUFUNC(op_d1a0_20), 53664 }, /* ADD */ { CPUFUNC(op_d1a8_20), 53672 }, /* ADD */ { CPUFUNC(op_d1b0_20), 53680 }, /* ADD */ { CPUFUNC(op_d1b8_20), 53688 }, /* ADD */ { CPUFUNC(op_d1b9_20), 53689 }, /* ADD */ { CPUFUNC(op_d1c0_20), 53696 }, /* ADDA */ { CPUFUNC(op_d1c8_20), 53704 }, /* ADDA */ { CPUFUNC(op_d1d0_20), 53712 }, /* ADDA */ { CPUFUNC(op_d1d8_20), 53720 }, /* ADDA */ { CPUFUNC(op_d1e0_20), 53728 }, /* ADDA */ { CPUFUNC(op_d1e8_20), 53736 }, /* ADDA */ { CPUFUNC(op_d1f0_20), 53744 }, /* ADDA */ { CPUFUNC(op_d1f8_20), 53752 }, /* ADDA */ { CPUFUNC(op_d1f9_20), 53753 }, /* ADDA */ { CPUFUNC(op_d1fa_20), 53754 }, /* ADDA */ { CPUFUNC(op_d1fb_20), 53755 }, /* ADDA */ { CPUFUNC(op_d1fc_20), 53756 }, /* ADDA */ { CPUFUNC(op_e000_20), 57344 }, /* ASR */ { CPUFUNC(op_e008_20), 57352 }, /* LSR */ { CPUFUNC(op_e010_20), 57360 }, /* ROXR */ { CPUFUNC(op_e018_20), 57368 }, /* ROR */ { CPUFUNC(op_e020_20), 57376 }, /* ASR */ { CPUFUNC(op_e028_20), 57384 }, /* LSR */ { CPUFUNC(op_e030_20), 57392 }, /* ROXR */ { CPUFUNC(op_e038_20), 57400 }, /* ROR */ { CPUFUNC(op_e040_20), 57408 }, /* ASR */ { CPUFUNC(op_e048_20), 57416 }, /* LSR */ { CPUFUNC(op_e050_20), 57424 }, /* ROXR */ { CPUFUNC(op_e058_20), 57432 }, /* ROR */ { CPUFUNC(op_e060_20), 57440 }, /* ASR */ { CPUFUNC(op_e068_20), 57448 }, /* LSR */ { CPUFUNC(op_e070_20), 57456 }, /* ROXR */ { CPUFUNC(op_e078_20), 57464 }, /* ROR */ { CPUFUNC(op_e080_20), 57472 }, /* ASR */ { CPUFUNC(op_e088_20), 57480 }, /* LSR */ { CPUFUNC(op_e090_20), 57488 }, /* ROXR */ { CPUFUNC(op_e098_20), 57496 }, /* ROR */ { CPUFUNC(op_e0a0_20), 57504 }, /* ASR */ { CPUFUNC(op_e0a8_20), 57512 }, /* LSR */ { CPUFUNC(op_e0b0_20), 57520 }, /* ROXR */ { CPUFUNC(op_e0b8_20), 57528 }, /* ROR */ { CPUFUNC(op_e0d0_20), 57552 }, /* ASRW */ { CPUFUNC(op_e0d8_20), 57560 }, /* ASRW */ { CPUFUNC(op_e0e0_20), 57568 }, /* ASRW */ { CPUFUNC(op_e0e8_20), 57576 }, /* ASRW */ { CPUFUNC(op_e0f0_20), 57584 }, /* ASRW */ { CPUFUNC(op_e0f8_20), 57592 }, /* ASRW */ { CPUFUNC(op_e0f9_20), 57593 }, /* ASRW */ { CPUFUNC(op_e100_20), 57600 }, /* ASL */ { CPUFUNC(op_e108_20), 57608 }, /* LSL */ { CPUFUNC(op_e110_20), 57616 }, /* ROXL */ { CPUFUNC(op_e118_20), 57624 }, /* ROL */ { CPUFUNC(op_e120_20), 57632 }, /* ASL */ { CPUFUNC(op_e128_20), 57640 }, /* LSL */ { CPUFUNC(op_e130_20), 57648 }, /* ROXL */ { CPUFUNC(op_e138_20), 57656 }, /* ROL */ { CPUFUNC(op_e140_20), 57664 }, /* ASL */ { CPUFUNC(op_e148_20), 57672 }, /* LSL */ { CPUFUNC(op_e150_20), 57680 }, /* ROXL */ { CPUFUNC(op_e158_20), 57688 }, /* ROL */ { CPUFUNC(op_e160_20), 57696 }, /* ASL */ { CPUFUNC(op_e168_20), 57704 }, /* LSL */ { CPUFUNC(op_e170_20), 57712 }, /* ROXL */ { CPUFUNC(op_e178_20), 57720 }, /* ROL */ { CPUFUNC(op_e180_20), 57728 }, /* ASL */ { CPUFUNC(op_e188_20), 57736 }, /* LSL */ { CPUFUNC(op_e190_20), 57744 }, /* ROXL */ { CPUFUNC(op_e198_20), 57752 }, /* ROL */ { CPUFUNC(op_e1a0_20), 57760 }, /* ASL */ { CPUFUNC(op_e1a8_20), 57768 }, /* LSL */ { CPUFUNC(op_e1b0_20), 57776 }, /* ROXL */ { CPUFUNC(op_e1b8_20), 57784 }, /* ROL */ { CPUFUNC(op_e1d0_20), 57808 }, /* ASLW */ { CPUFUNC(op_e1d8_20), 57816 }, /* ASLW */ { CPUFUNC(op_e1e0_20), 57824 }, /* ASLW */ { CPUFUNC(op_e1e8_20), 57832 }, /* ASLW */ { CPUFUNC(op_e1f0_20), 57840 }, /* ASLW */ { CPUFUNC(op_e1f8_20), 57848 }, /* ASLW */ { CPUFUNC(op_e1f9_20), 57849 }, /* ASLW */ { CPUFUNC(op_e2d0_20), 58064 }, /* LSRW */ { CPUFUNC(op_e2d8_20), 58072 }, /* LSRW */ { CPUFUNC(op_e2e0_20), 58080 }, /* LSRW */ { CPUFUNC(op_e2e8_20), 58088 }, /* LSRW */ { CPUFUNC(op_e2f0_20), 58096 }, /* LSRW */ { CPUFUNC(op_e2f8_20), 58104 }, /* LSRW */ { CPUFUNC(op_e2f9_20), 58105 }, /* LSRW */ { CPUFUNC(op_e3d0_20), 58320 }, /* LSLW */ { CPUFUNC(op_e3d8_20), 58328 }, /* LSLW */ { CPUFUNC(op_e3e0_20), 58336 }, /* LSLW */ { CPUFUNC(op_e3e8_20), 58344 }, /* LSLW */ { CPUFUNC(op_e3f0_20), 58352 }, /* LSLW */ { CPUFUNC(op_e3f8_20), 58360 }, /* LSLW */ { CPUFUNC(op_e3f9_20), 58361 }, /* LSLW */ { CPUFUNC(op_e4d0_20), 58576 }, /* ROXRW */ { CPUFUNC(op_e4d8_20), 58584 }, /* ROXRW */ { CPUFUNC(op_e4e0_20), 58592 }, /* ROXRW */ { CPUFUNC(op_e4e8_20), 58600 }, /* ROXRW */ { CPUFUNC(op_e4f0_20), 58608 }, /* ROXRW */ { CPUFUNC(op_e4f8_20), 58616 }, /* ROXRW */ { CPUFUNC(op_e4f9_20), 58617 }, /* ROXRW */ { CPUFUNC(op_e5d0_20), 58832 }, /* ROXLW */ { CPUFUNC(op_e5d8_20), 58840 }, /* ROXLW */ { CPUFUNC(op_e5e0_20), 58848 }, /* ROXLW */ { CPUFUNC(op_e5e8_20), 58856 }, /* ROXLW */ { CPUFUNC(op_e5f0_20), 58864 }, /* ROXLW */ { CPUFUNC(op_e5f8_20), 58872 }, /* ROXLW */ { CPUFUNC(op_e5f9_20), 58873 }, /* ROXLW */ { CPUFUNC(op_e6d0_20), 59088 }, /* RORW */ { CPUFUNC(op_e6d8_20), 59096 }, /* RORW */ { CPUFUNC(op_e6e0_20), 59104 }, /* RORW */ { CPUFUNC(op_e6e8_20), 59112 }, /* RORW */ { CPUFUNC(op_e6f0_20), 59120 }, /* RORW */ { CPUFUNC(op_e6f8_20), 59128 }, /* RORW */ { CPUFUNC(op_e6f9_20), 59129 }, /* RORW */ { CPUFUNC(op_e7d0_20), 59344 }, /* ROLW */ { CPUFUNC(op_e7d8_20), 59352 }, /* ROLW */ { CPUFUNC(op_e7e0_20), 59360 }, /* ROLW */ { CPUFUNC(op_e7e8_20), 59368 }, /* ROLW */ { CPUFUNC(op_e7f0_20), 59376 }, /* ROLW */ { CPUFUNC(op_e7f8_20), 59384 }, /* ROLW */ { CPUFUNC(op_e7f9_20), 59385 }, /* ROLW */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_e8c0_20), 59584 }, /* BFTST */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_e8d0_20), 59600 }, /* BFTST */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_e8e8_20), 59624 }, /* BFTST */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_e8f0_20), 59632 }, /* BFTST */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_e8f8_20), 59640 }, /* BFTST */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_e8f9_20), 59641 }, /* BFTST */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_e8fa_20), 59642 }, /* BFTST */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_e8fb_20), 59643 }, /* BFTST */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_e9c0_20), 59840 }, /* BFEXTU */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_e9d0_20), 59856 }, /* BFEXTU */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_e9e8_20), 59880 }, /* BFEXTU */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_e9f0_20), 59888 }, /* BFEXTU */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_e9f8_20), 59896 }, /* BFEXTU */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_e9f9_20), 59897 }, /* BFEXTU */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_e9fa_20), 59898 }, /* BFEXTU */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_e9fb_20), 59899 }, /* BFEXTU */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_eac0_20), 60096 }, /* BFCHG */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_ead0_20), 60112 }, /* BFCHG */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_eae8_20), 60136 }, /* BFCHG */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_eaf0_20), 60144 }, /* BFCHG */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_eaf8_20), 60152 }, /* BFCHG */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_eaf9_20), 60153 }, /* BFCHG */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_ebc0_20), 60352 }, /* BFEXTS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_ebd0_20), 60368 }, /* BFEXTS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_ebe8_20), 60392 }, /* BFEXTS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_ebf0_20), 60400 }, /* BFEXTS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_ebf8_20), 60408 }, /* BFEXTS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_ebf9_20), 60409 }, /* BFEXTS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_ebfa_20), 60410 }, /* BFEXTS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_ebfb_20), 60411 }, /* BFEXTS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_ecc0_20), 60608 }, /* BFCLR */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_ecd0_20), 60624 }, /* BFCLR */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_ece8_20), 60648 }, /* BFCLR */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_ecf0_20), 60656 }, /* BFCLR */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_ecf8_20), 60664 }, /* BFCLR */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_ecf9_20), 60665 }, /* BFCLR */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_edc0_20), 60864 }, /* BFFFO */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_edd0_20), 60880 }, /* BFFFO */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_ede8_20), 60904 }, /* BFFFO */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_edf0_20), 60912 }, /* BFFFO */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_edf8_20), 60920 }, /* BFFFO */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_edf9_20), 60921 }, /* BFFFO */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_edfa_20), 60922 }, /* BFFFO */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_edfb_20), 60923 }, /* BFFFO */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_eec0_20), 61120 }, /* BFSET */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_eed0_20), 61136 }, /* BFSET */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_eee8_20), 61160 }, /* BFSET */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_eef0_20), 61168 }, /* BFSET */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_eef8_20), 61176 }, /* BFSET */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_eef9_20), 61177 }, /* BFSET */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_efc0_20), 61376 }, /* BFINS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_efd0_20), 61392 }, /* BFINS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_efe8_20), 61416 }, /* BFINS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_eff0_20), 61424 }, /* BFINS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_eff8_20), 61432 }, /* BFINS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_eff9_20), 61433 }, /* BFINS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f200_20), 61952 }, /* FPP */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f208_20), 61960 }, /* FPP */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f210_20), 61968 }, /* FPP */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f218_20), 61976 }, /* FPP */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f220_20), 61984 }, /* FPP */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f228_20), 61992 }, /* FPP */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f230_20), 62000 }, /* FPP */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f238_20), 62008 }, /* FPP */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f239_20), 62009 }, /* FPP */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f23a_20), 62010 }, /* FPP */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f23b_20), 62011 }, /* FPP */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f23c_20), 62012 }, /* FPP */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f240_20), 62016 }, /* FScc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f248_20), 62024 }, /* FDBcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f250_20), 62032 }, /* FScc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f258_20), 62040 }, /* FScc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f260_20), 62048 }, /* FScc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f268_20), 62056 }, /* FScc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f270_20), 62064 }, /* FScc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f278_20), 62072 }, /* FScc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f279_20), 62073 }, /* FScc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f27a_20), 62074 }, /* FTRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f27b_20), 62075 }, /* FTRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f27c_20), 62076 }, /* FTRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f280_20), 62080 }, /* FBcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f2c0_20), 62144 }, /* FBcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f310_20), 62224 }, /* FSAVE */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f320_20), 62240 }, /* FSAVE */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f328_20), 62248 }, /* FSAVE */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f330_20), 62256 }, /* FSAVE */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f338_20), 62264 }, /* FSAVE */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f339_20), 62265 }, /* FSAVE */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f350_20), 62288 }, /* FRESTORE */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f358_20), 62296 }, /* FRESTORE */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f368_20), 62312 }, /* FRESTORE */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f370_20), 62320 }, /* FRESTORE */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f378_20), 62328 }, /* FRESTORE */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f379_20), 62329 }, /* FRESTORE */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f37a_20), 62330 }, /* FRESTORE */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f37b_20), 62331 }, /* FRESTORE */ #endif { 0, 0 }}; #endif /* CPUEMU_68000_ONLY */ #endif /* CPUEMU_20 */ #ifdef CPUEMU_21 #ifndef CPUEMU_68000_ONLY const struct cputbl CPUFUNC(op_smalltbl_21)[] = { { (cpuop_func*)CPUFUNC(op_0000_21), 0 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0010_21), 16 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0018_21), 24 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0020_21), 32 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0028_21), 40 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0030_21), 48 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0038_21), 56 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0039_21), 57 }, /* OR */ { (cpuop_func*)CPUFUNC(op_003c_21), 60 }, /* ORSR */ { (cpuop_func*)CPUFUNC(op_0040_21), 64 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0050_21), 80 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0058_21), 88 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0060_21), 96 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0068_21), 104 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0070_21), 112 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0078_21), 120 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0079_21), 121 }, /* OR */ { (cpuop_func*)CPUFUNC(op_007c_21), 124 }, /* ORSR */ { (cpuop_func*)CPUFUNC(op_0080_21), 128 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0090_21), 144 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0098_21), 152 }, /* OR */ { (cpuop_func*)CPUFUNC(op_00a0_21), 160 }, /* OR */ { (cpuop_func*)CPUFUNC(op_00a8_21), 168 }, /* OR */ { (cpuop_func*)CPUFUNC(op_00b0_21), 176 }, /* OR */ { (cpuop_func*)CPUFUNC(op_00b8_21), 184 }, /* OR */ { (cpuop_func*)CPUFUNC(op_00b9_21), 185 }, /* OR */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_00d0_21), 208 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_00e8_21), 232 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_00f0_21), 240 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_00f8_21), 248 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_00f9_21), 249 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_00fa_21), 250 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_00fb_21), 251 }, /* CHK2 */ #endif { (cpuop_func*)CPUFUNC(op_0100_21), 256 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0108_21), 264 }, /* MVPMR */ { (cpuop_func*)CPUFUNC(op_0110_21), 272 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0118_21), 280 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0120_21), 288 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0128_21), 296 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0130_21), 304 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0138_21), 312 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0139_21), 313 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_013a_21), 314 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_013b_21), 315 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_013c_21), 316 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0140_21), 320 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0148_21), 328 }, /* MVPMR */ { (cpuop_func*)CPUFUNC(op_0150_21), 336 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0158_21), 344 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0160_21), 352 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0168_21), 360 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0170_21), 368 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0178_21), 376 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0179_21), 377 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_017a_21), 378 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_017b_21), 379 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0180_21), 384 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_0188_21), 392 }, /* MVPRM */ { (cpuop_func*)CPUFUNC(op_0190_21), 400 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_0198_21), 408 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_01a0_21), 416 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_01a8_21), 424 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_01b0_21), 432 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_01b8_21), 440 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_01b9_21), 441 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_01ba_21), 442 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_01bb_21), 443 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_01c0_21), 448 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_01c8_21), 456 }, /* MVPRM */ { (cpuop_func*)CPUFUNC(op_01d0_21), 464 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_01d8_21), 472 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_01e0_21), 480 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_01e8_21), 488 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_01f0_21), 496 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_01f8_21), 504 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_01f9_21), 505 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_01fa_21), 506 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_01fb_21), 507 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_0200_21), 512 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0210_21), 528 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0218_21), 536 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0220_21), 544 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0228_21), 552 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0230_21), 560 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0238_21), 568 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0239_21), 569 }, /* AND */ { (cpuop_func*)CPUFUNC(op_023c_21), 572 }, /* ANDSR */ { (cpuop_func*)CPUFUNC(op_0240_21), 576 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0250_21), 592 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0258_21), 600 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0260_21), 608 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0268_21), 616 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0270_21), 624 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0278_21), 632 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0279_21), 633 }, /* AND */ { (cpuop_func*)CPUFUNC(op_027c_21), 636 }, /* ANDSR */ { (cpuop_func*)CPUFUNC(op_0280_21), 640 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0290_21), 656 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0298_21), 664 }, /* AND */ { (cpuop_func*)CPUFUNC(op_02a0_21), 672 }, /* AND */ { (cpuop_func*)CPUFUNC(op_02a8_21), 680 }, /* AND */ { (cpuop_func*)CPUFUNC(op_02b0_21), 688 }, /* AND */ { (cpuop_func*)CPUFUNC(op_02b8_21), 696 }, /* AND */ { (cpuop_func*)CPUFUNC(op_02b9_21), 697 }, /* AND */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_02d0_21), 720 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_02e8_21), 744 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_02f0_21), 752 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_02f8_21), 760 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_02f9_21), 761 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_02fa_21), 762 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_02fb_21), 763 }, /* CHK2 */ #endif { (cpuop_func*)CPUFUNC(op_0400_21), 1024 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0410_21), 1040 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0418_21), 1048 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0420_21), 1056 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0428_21), 1064 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0430_21), 1072 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0438_21), 1080 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0439_21), 1081 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0440_21), 1088 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0450_21), 1104 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0458_21), 1112 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0460_21), 1120 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0468_21), 1128 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0470_21), 1136 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0478_21), 1144 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0479_21), 1145 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0480_21), 1152 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0490_21), 1168 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0498_21), 1176 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_04a0_21), 1184 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_04a8_21), 1192 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_04b0_21), 1200 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_04b8_21), 1208 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_04b9_21), 1209 }, /* SUB */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_04d0_21), 1232 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_04e8_21), 1256 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_04f0_21), 1264 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_04f8_21), 1272 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_04f9_21), 1273 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_04fa_21), 1274 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_04fb_21), 1275 }, /* CHK2 */ #endif { (cpuop_func*)CPUFUNC(op_0600_21), 1536 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0610_21), 1552 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0618_21), 1560 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0620_21), 1568 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0628_21), 1576 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0630_21), 1584 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0638_21), 1592 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0639_21), 1593 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0640_21), 1600 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0650_21), 1616 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0658_21), 1624 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0660_21), 1632 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0668_21), 1640 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0670_21), 1648 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0678_21), 1656 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0679_21), 1657 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0680_21), 1664 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0690_21), 1680 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0698_21), 1688 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_06a0_21), 1696 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_06a8_21), 1704 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_06b0_21), 1712 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_06b8_21), 1720 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_06b9_21), 1721 }, /* ADD */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_06c0_21), 1728 }, /* RTM */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_06c8_21), 1736 }, /* RTM */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_06d0_21), 1744 }, /* CALLM */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_06e8_21), 1768 }, /* CALLM */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_06f0_21), 1776 }, /* CALLM */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_06f8_21), 1784 }, /* CALLM */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_06f9_21), 1785 }, /* CALLM */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_06fa_21), 1786 }, /* CALLM */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_06fb_21), 1787 }, /* CALLM */ #endif { (cpuop_func*)CPUFUNC(op_0800_21), 2048 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0810_21), 2064 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0818_21), 2072 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0820_21), 2080 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0828_21), 2088 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0830_21), 2096 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0838_21), 2104 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0839_21), 2105 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_083a_21), 2106 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_083b_21), 2107 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_083c_21), 2108 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0840_21), 2112 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0850_21), 2128 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0858_21), 2136 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0860_21), 2144 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0868_21), 2152 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0870_21), 2160 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0878_21), 2168 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0879_21), 2169 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_087a_21), 2170 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_087b_21), 2171 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0880_21), 2176 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_0890_21), 2192 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_0898_21), 2200 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_08a0_21), 2208 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_08a8_21), 2216 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_08b0_21), 2224 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_08b8_21), 2232 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_08b9_21), 2233 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_08ba_21), 2234 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_08bb_21), 2235 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_08c0_21), 2240 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_08d0_21), 2256 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_08d8_21), 2264 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_08e0_21), 2272 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_08e8_21), 2280 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_08f0_21), 2288 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_08f8_21), 2296 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_08f9_21), 2297 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_08fa_21), 2298 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_08fb_21), 2299 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_0a00_21), 2560 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a10_21), 2576 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a18_21), 2584 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a20_21), 2592 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a28_21), 2600 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a30_21), 2608 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a38_21), 2616 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a39_21), 2617 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a3c_21), 2620 }, /* EORSR */ { (cpuop_func*)CPUFUNC(op_0a40_21), 2624 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a50_21), 2640 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a58_21), 2648 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a60_21), 2656 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a68_21), 2664 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a70_21), 2672 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a78_21), 2680 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a79_21), 2681 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a7c_21), 2684 }, /* EORSR */ { (cpuop_func*)CPUFUNC(op_0a80_21), 2688 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a90_21), 2704 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a98_21), 2712 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0aa0_21), 2720 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0aa8_21), 2728 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0ab0_21), 2736 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0ab8_21), 2744 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0ab9_21), 2745 }, /* EOR */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0ad0_21), 2768 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0ad8_21), 2776 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0ae0_21), 2784 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0ae8_21), 2792 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0af0_21), 2800 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0af8_21), 2808 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0af9_21), 2809 }, /* CAS */ #endif { (cpuop_func*)CPUFUNC(op_0c00_21), 3072 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c10_21), 3088 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c18_21), 3096 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c20_21), 3104 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c28_21), 3112 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c30_21), 3120 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c38_21), 3128 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c39_21), 3129 }, /* CMP */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0c3a_21), 3130 }, /* CMP */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0c3b_21), 3131 }, /* CMP */ #endif { (cpuop_func*)CPUFUNC(op_0c40_21), 3136 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c50_21), 3152 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c58_21), 3160 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c60_21), 3168 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c68_21), 3176 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c70_21), 3184 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c78_21), 3192 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c79_21), 3193 }, /* CMP */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0c7a_21), 3194 }, /* CMP */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0c7b_21), 3195 }, /* CMP */ #endif { (cpuop_func*)CPUFUNC(op_0c80_21), 3200 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c90_21), 3216 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c98_21), 3224 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0ca0_21), 3232 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0ca8_21), 3240 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0cb0_21), 3248 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0cb8_21), 3256 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0cb9_21), 3257 }, /* CMP */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0cba_21), 3258 }, /* CMP */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0cbb_21), 3259 }, /* CMP */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0cd0_21), 3280 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0cd8_21), 3288 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0ce0_21), 3296 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0ce8_21), 3304 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0cf0_21), 3312 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0cf8_21), 3320 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0cf9_21), 3321 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0cfc_21), 3324 }, /* CAS2 */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0e10_21), 3600 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0e18_21), 3608 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0e20_21), 3616 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0e28_21), 3624 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0e30_21), 3632 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0e38_21), 3640 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0e39_21), 3641 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0e50_21), 3664 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0e58_21), 3672 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0e60_21), 3680 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0e68_21), 3688 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0e70_21), 3696 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0e78_21), 3704 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0e79_21), 3705 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0e90_21), 3728 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0e98_21), 3736 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0ea0_21), 3744 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0ea8_21), 3752 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0eb0_21), 3760 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0eb8_21), 3768 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0eb9_21), 3769 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0ed0_21), 3792 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0ed8_21), 3800 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0ee0_21), 3808 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0ee8_21), 3816 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0ef0_21), 3824 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0ef8_21), 3832 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0ef9_21), 3833 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0efc_21), 3836 }, /* CAS2 */ #endif { (cpuop_func*)CPUFUNC(op_1000_21), 4096 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1010_21), 4112 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1018_21), 4120 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1020_21), 4128 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1028_21), 4136 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1030_21), 4144 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1038_21), 4152 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1039_21), 4153 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_103a_21), 4154 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_103b_21), 4155 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_103c_21), 4156 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1080_21), 4224 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1090_21), 4240 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1098_21), 4248 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10a0_21), 4256 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10a8_21), 4264 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10b0_21), 4272 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10b8_21), 4280 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10b9_21), 4281 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10ba_21), 4282 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10bb_21), 4283 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10bc_21), 4284 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10c0_21), 4288 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10d0_21), 4304 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10d8_21), 4312 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10e0_21), 4320 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10e8_21), 4328 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10f0_21), 4336 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10f8_21), 4344 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10f9_21), 4345 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10fa_21), 4346 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10fb_21), 4347 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10fc_21), 4348 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1100_21), 4352 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1110_21), 4368 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1118_21), 4376 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1120_21), 4384 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1128_21), 4392 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1130_21), 4400 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1138_21), 4408 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1139_21), 4409 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_113a_21), 4410 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_113b_21), 4411 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_113c_21), 4412 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1140_21), 4416 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1150_21), 4432 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1158_21), 4440 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1160_21), 4448 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1168_21), 4456 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1170_21), 4464 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1178_21), 4472 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1179_21), 4473 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_117a_21), 4474 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_117b_21), 4475 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_117c_21), 4476 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1180_21), 4480 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1190_21), 4496 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1198_21), 4504 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11a0_21), 4512 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11a8_21), 4520 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11b0_21), 4528 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11b8_21), 4536 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11b9_21), 4537 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11ba_21), 4538 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11bb_21), 4539 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11bc_21), 4540 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11c0_21), 4544 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11d0_21), 4560 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11d8_21), 4568 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11e0_21), 4576 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11e8_21), 4584 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11f0_21), 4592 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11f8_21), 4600 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11f9_21), 4601 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11fa_21), 4602 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11fb_21), 4603 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11fc_21), 4604 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_13c0_21), 5056 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_13d0_21), 5072 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_13d8_21), 5080 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_13e0_21), 5088 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_13e8_21), 5096 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_13f0_21), 5104 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_13f8_21), 5112 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_13f9_21), 5113 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_13fa_21), 5114 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_13fb_21), 5115 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_13fc_21), 5116 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2000_21), 8192 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2008_21), 8200 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2010_21), 8208 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2018_21), 8216 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2020_21), 8224 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2028_21), 8232 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2030_21), 8240 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2038_21), 8248 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2039_21), 8249 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_203a_21), 8250 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_203b_21), 8251 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_203c_21), 8252 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2040_21), 8256 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_2048_21), 8264 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_2050_21), 8272 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_2058_21), 8280 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_2060_21), 8288 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_2068_21), 8296 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_2070_21), 8304 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_2078_21), 8312 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_2079_21), 8313 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_207a_21), 8314 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_207b_21), 8315 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_207c_21), 8316 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_2080_21), 8320 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2088_21), 8328 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2090_21), 8336 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2098_21), 8344 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20a0_21), 8352 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20a8_21), 8360 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20b0_21), 8368 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20b8_21), 8376 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20b9_21), 8377 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20ba_21), 8378 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20bb_21), 8379 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20bc_21), 8380 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20c0_21), 8384 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20c8_21), 8392 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20d0_21), 8400 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20d8_21), 8408 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20e0_21), 8416 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20e8_21), 8424 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20f0_21), 8432 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20f8_21), 8440 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20f9_21), 8441 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20fa_21), 8442 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20fb_21), 8443 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20fc_21), 8444 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2100_21), 8448 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2108_21), 8456 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2110_21), 8464 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2118_21), 8472 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2120_21), 8480 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2128_21), 8488 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2130_21), 8496 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2138_21), 8504 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2139_21), 8505 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_213a_21), 8506 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_213b_21), 8507 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_213c_21), 8508 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2140_21), 8512 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2148_21), 8520 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2150_21), 8528 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2158_21), 8536 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2160_21), 8544 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2168_21), 8552 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2170_21), 8560 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2178_21), 8568 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2179_21), 8569 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_217a_21), 8570 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_217b_21), 8571 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_217c_21), 8572 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2180_21), 8576 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2188_21), 8584 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2190_21), 8592 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2198_21), 8600 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21a0_21), 8608 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21a8_21), 8616 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21b0_21), 8624 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21b8_21), 8632 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21b9_21), 8633 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21ba_21), 8634 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21bb_21), 8635 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21bc_21), 8636 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21c0_21), 8640 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21c8_21), 8648 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21d0_21), 8656 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21d8_21), 8664 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21e0_21), 8672 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21e8_21), 8680 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21f0_21), 8688 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21f8_21), 8696 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21f9_21), 8697 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21fa_21), 8698 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21fb_21), 8699 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21fc_21), 8700 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_23c0_21), 9152 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_23c8_21), 9160 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_23d0_21), 9168 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_23d8_21), 9176 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_23e0_21), 9184 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_23e8_21), 9192 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_23f0_21), 9200 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_23f8_21), 9208 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_23f9_21), 9209 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_23fa_21), 9210 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_23fb_21), 9211 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_23fc_21), 9212 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3000_21), 12288 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3008_21), 12296 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3010_21), 12304 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3018_21), 12312 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3020_21), 12320 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3028_21), 12328 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3030_21), 12336 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3038_21), 12344 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3039_21), 12345 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_303a_21), 12346 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_303b_21), 12347 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_303c_21), 12348 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3040_21), 12352 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_3048_21), 12360 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_3050_21), 12368 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_3058_21), 12376 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_3060_21), 12384 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_3068_21), 12392 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_3070_21), 12400 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_3078_21), 12408 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_3079_21), 12409 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_307a_21), 12410 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_307b_21), 12411 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_307c_21), 12412 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_3080_21), 12416 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3088_21), 12424 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3090_21), 12432 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3098_21), 12440 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30a0_21), 12448 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30a8_21), 12456 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30b0_21), 12464 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30b8_21), 12472 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30b9_21), 12473 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30ba_21), 12474 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30bb_21), 12475 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30bc_21), 12476 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30c0_21), 12480 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30c8_21), 12488 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30d0_21), 12496 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30d8_21), 12504 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30e0_21), 12512 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30e8_21), 12520 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30f0_21), 12528 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30f8_21), 12536 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30f9_21), 12537 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30fa_21), 12538 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30fb_21), 12539 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30fc_21), 12540 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3100_21), 12544 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3108_21), 12552 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3110_21), 12560 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3118_21), 12568 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3120_21), 12576 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3128_21), 12584 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3130_21), 12592 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3138_21), 12600 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3139_21), 12601 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_313a_21), 12602 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_313b_21), 12603 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_313c_21), 12604 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3140_21), 12608 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3148_21), 12616 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3150_21), 12624 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3158_21), 12632 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3160_21), 12640 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3168_21), 12648 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3170_21), 12656 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3178_21), 12664 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3179_21), 12665 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_317a_21), 12666 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_317b_21), 12667 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_317c_21), 12668 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3180_21), 12672 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3188_21), 12680 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3190_21), 12688 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3198_21), 12696 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31a0_21), 12704 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31a8_21), 12712 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31b0_21), 12720 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31b8_21), 12728 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31b9_21), 12729 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31ba_21), 12730 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31bb_21), 12731 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31bc_21), 12732 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31c0_21), 12736 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31c8_21), 12744 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31d0_21), 12752 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31d8_21), 12760 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31e0_21), 12768 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31e8_21), 12776 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31f0_21), 12784 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31f8_21), 12792 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31f9_21), 12793 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31fa_21), 12794 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31fb_21), 12795 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31fc_21), 12796 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_33c0_21), 13248 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_33c8_21), 13256 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_33d0_21), 13264 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_33d8_21), 13272 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_33e0_21), 13280 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_33e8_21), 13288 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_33f0_21), 13296 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_33f8_21), 13304 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_33f9_21), 13305 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_33fa_21), 13306 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_33fb_21), 13307 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_33fc_21), 13308 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_4000_21), 16384 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4010_21), 16400 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4018_21), 16408 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4020_21), 16416 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4028_21), 16424 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4030_21), 16432 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4038_21), 16440 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4039_21), 16441 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4040_21), 16448 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4050_21), 16464 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4058_21), 16472 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4060_21), 16480 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4068_21), 16488 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4070_21), 16496 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4078_21), 16504 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4079_21), 16505 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4080_21), 16512 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4090_21), 16528 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4098_21), 16536 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_40a0_21), 16544 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_40a8_21), 16552 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_40b0_21), 16560 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_40b8_21), 16568 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_40b9_21), 16569 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_40c0_21), 16576 }, /* MVSR2 */ { (cpuop_func*)CPUFUNC(op_40d0_21), 16592 }, /* MVSR2 */ { (cpuop_func*)CPUFUNC(op_40d8_21), 16600 }, /* MVSR2 */ { (cpuop_func*)CPUFUNC(op_40e0_21), 16608 }, /* MVSR2 */ { (cpuop_func*)CPUFUNC(op_40e8_21), 16616 }, /* MVSR2 */ { (cpuop_func*)CPUFUNC(op_40f0_21), 16624 }, /* MVSR2 */ { (cpuop_func*)CPUFUNC(op_40f8_21), 16632 }, /* MVSR2 */ { (cpuop_func*)CPUFUNC(op_40f9_21), 16633 }, /* MVSR2 */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4100_21), 16640 }, /* CHK */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4110_21), 16656 }, /* CHK */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4118_21), 16664 }, /* CHK */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4120_21), 16672 }, /* CHK */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4128_21), 16680 }, /* CHK */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4130_21), 16688 }, /* CHK */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4138_21), 16696 }, /* CHK */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4139_21), 16697 }, /* CHK */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_413a_21), 16698 }, /* CHK */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_413b_21), 16699 }, /* CHK */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_413c_21), 16700 }, /* CHK */ #endif { (cpuop_func*)CPUFUNC(op_4180_21), 16768 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_4190_21), 16784 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_4198_21), 16792 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_41a0_21), 16800 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_41a8_21), 16808 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_41b0_21), 16816 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_41b8_21), 16824 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_41b9_21), 16825 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_41ba_21), 16826 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_41bb_21), 16827 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_41bc_21), 16828 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_41d0_21), 16848 }, /* LEA */ { (cpuop_func*)CPUFUNC(op_41e8_21), 16872 }, /* LEA */ { (cpuop_func*)CPUFUNC(op_41f0_21), 16880 }, /* LEA */ { (cpuop_func*)CPUFUNC(op_41f8_21), 16888 }, /* LEA */ { (cpuop_func*)CPUFUNC(op_41f9_21), 16889 }, /* LEA */ { (cpuop_func*)CPUFUNC(op_41fa_21), 16890 }, /* LEA */ { (cpuop_func*)CPUFUNC(op_41fb_21), 16891 }, /* LEA */ { (cpuop_func*)CPUFUNC(op_4200_21), 16896 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4210_21), 16912 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4218_21), 16920 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4220_21), 16928 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4228_21), 16936 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4230_21), 16944 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4238_21), 16952 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4239_21), 16953 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4240_21), 16960 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4250_21), 16976 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4258_21), 16984 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4260_21), 16992 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4268_21), 17000 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4270_21), 17008 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4278_21), 17016 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4279_21), 17017 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4280_21), 17024 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4290_21), 17040 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4298_21), 17048 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_42a0_21), 17056 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_42a8_21), 17064 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_42b0_21), 17072 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_42b8_21), 17080 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_42b9_21), 17081 }, /* CLR */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_42c0_21), 17088 }, /* MVSR2 */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_42d0_21), 17104 }, /* MVSR2 */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_42d8_21), 17112 }, /* MVSR2 */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_42e0_21), 17120 }, /* MVSR2 */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_42e8_21), 17128 }, /* MVSR2 */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_42f0_21), 17136 }, /* MVSR2 */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_42f8_21), 17144 }, /* MVSR2 */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_42f9_21), 17145 }, /* MVSR2 */ #endif { (cpuop_func*)CPUFUNC(op_4400_21), 17408 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4410_21), 17424 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4418_21), 17432 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4420_21), 17440 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4428_21), 17448 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4430_21), 17456 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4438_21), 17464 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4439_21), 17465 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4440_21), 17472 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4450_21), 17488 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4458_21), 17496 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4460_21), 17504 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4468_21), 17512 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4470_21), 17520 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4478_21), 17528 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4479_21), 17529 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4480_21), 17536 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4490_21), 17552 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4498_21), 17560 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_44a0_21), 17568 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_44a8_21), 17576 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_44b0_21), 17584 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_44b8_21), 17592 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_44b9_21), 17593 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_44c0_21), 17600 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_44d0_21), 17616 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_44d8_21), 17624 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_44e0_21), 17632 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_44e8_21), 17640 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_44f0_21), 17648 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_44f8_21), 17656 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_44f9_21), 17657 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_44fa_21), 17658 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_44fb_21), 17659 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_44fc_21), 17660 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_4600_21), 17920 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4610_21), 17936 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4618_21), 17944 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4620_21), 17952 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4628_21), 17960 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4630_21), 17968 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4638_21), 17976 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4639_21), 17977 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4640_21), 17984 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4650_21), 18000 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4658_21), 18008 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4660_21), 18016 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4668_21), 18024 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4670_21), 18032 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4678_21), 18040 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4679_21), 18041 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4680_21), 18048 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4690_21), 18064 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4698_21), 18072 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_46a0_21), 18080 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_46a8_21), 18088 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_46b0_21), 18096 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_46b8_21), 18104 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_46b9_21), 18105 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_46c0_21), 18112 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_46d0_21), 18128 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_46d8_21), 18136 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_46e0_21), 18144 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_46e8_21), 18152 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_46f0_21), 18160 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_46f8_21), 18168 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_46f9_21), 18169 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_46fa_21), 18170 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_46fb_21), 18171 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_46fc_21), 18172 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_4800_21), 18432 }, /* NBCD */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4808_21), 18440 }, /* LINK */ #endif { (cpuop_func*)CPUFUNC(op_4810_21), 18448 }, /* NBCD */ { (cpuop_func*)CPUFUNC(op_4818_21), 18456 }, /* NBCD */ { (cpuop_func*)CPUFUNC(op_4820_21), 18464 }, /* NBCD */ { (cpuop_func*)CPUFUNC(op_4828_21), 18472 }, /* NBCD */ { (cpuop_func*)CPUFUNC(op_4830_21), 18480 }, /* NBCD */ { (cpuop_func*)CPUFUNC(op_4838_21), 18488 }, /* NBCD */ { (cpuop_func*)CPUFUNC(op_4839_21), 18489 }, /* NBCD */ { (cpuop_func*)CPUFUNC(op_4840_21), 18496 }, /* SWAP */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4848_21), 18504 }, /* BKPT */ #endif { (cpuop_func*)CPUFUNC(op_4850_21), 18512 }, /* PEA */ { (cpuop_func*)CPUFUNC(op_4868_21), 18536 }, /* PEA */ { (cpuop_func*)CPUFUNC(op_4870_21), 18544 }, /* PEA */ { (cpuop_func*)CPUFUNC(op_4878_21), 18552 }, /* PEA */ { (cpuop_func*)CPUFUNC(op_4879_21), 18553 }, /* PEA */ { (cpuop_func*)CPUFUNC(op_487a_21), 18554 }, /* PEA */ { (cpuop_func*)CPUFUNC(op_487b_21), 18555 }, /* PEA */ { (cpuop_func*)CPUFUNC(op_4880_21), 18560 }, /* EXT */ { (cpuop_func*)CPUFUNC(op_4890_21), 18576 }, /* MVMLE */ { (cpuop_func*)CPUFUNC(op_48a0_21), 18592 }, /* MVMLE */ { (cpuop_func*)CPUFUNC(op_48a8_21), 18600 }, /* MVMLE */ { (cpuop_func*)CPUFUNC(op_48b0_21), 18608 }, /* MVMLE */ { (cpuop_func*)CPUFUNC(op_48b8_21), 18616 }, /* MVMLE */ { (cpuop_func*)CPUFUNC(op_48b9_21), 18617 }, /* MVMLE */ { (cpuop_func*)CPUFUNC(op_48c0_21), 18624 }, /* EXT */ { (cpuop_func*)CPUFUNC(op_48d0_21), 18640 }, /* MVMLE */ { (cpuop_func*)CPUFUNC(op_48e0_21), 18656 }, /* MVMLE */ { (cpuop_func*)CPUFUNC(op_48e8_21), 18664 }, /* MVMLE */ { (cpuop_func*)CPUFUNC(op_48f0_21), 18672 }, /* MVMLE */ { (cpuop_func*)CPUFUNC(op_48f8_21), 18680 }, /* MVMLE */ { (cpuop_func*)CPUFUNC(op_48f9_21), 18681 }, /* MVMLE */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_49c0_21), 18880 }, /* EXT */ #endif { (cpuop_func*)CPUFUNC(op_4a00_21), 18944 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a10_21), 18960 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a18_21), 18968 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a20_21), 18976 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a28_21), 18984 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a30_21), 18992 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a38_21), 19000 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a39_21), 19001 }, /* TST */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4a3a_21), 19002 }, /* TST */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4a3b_21), 19003 }, /* TST */ #endif { (cpuop_func*)CPUFUNC(op_4a3c_21), 19004 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a40_21), 19008 }, /* TST */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4a48_21), 19016 }, /* TST */ #endif { (cpuop_func*)CPUFUNC(op_4a50_21), 19024 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a58_21), 19032 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a60_21), 19040 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a68_21), 19048 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a70_21), 19056 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a78_21), 19064 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a79_21), 19065 }, /* TST */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4a7a_21), 19066 }, /* TST */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4a7b_21), 19067 }, /* TST */ #endif { (cpuop_func*)CPUFUNC(op_4a7c_21), 19068 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a80_21), 19072 }, /* TST */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4a88_21), 19080 }, /* TST */ #endif { (cpuop_func*)CPUFUNC(op_4a90_21), 19088 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a98_21), 19096 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4aa0_21), 19104 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4aa8_21), 19112 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4ab0_21), 19120 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4ab8_21), 19128 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4ab9_21), 19129 }, /* TST */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4aba_21), 19130 }, /* TST */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4abb_21), 19131 }, /* TST */ #endif { (cpuop_func*)CPUFUNC(op_4abc_21), 19132 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4ac0_21), 19136 }, /* TAS */ { (cpuop_func*)CPUFUNC(op_4ad0_21), 19152 }, /* TAS */ { (cpuop_func*)CPUFUNC(op_4ad8_21), 19160 }, /* TAS */ { (cpuop_func*)CPUFUNC(op_4ae0_21), 19168 }, /* TAS */ { (cpuop_func*)CPUFUNC(op_4ae8_21), 19176 }, /* TAS */ { (cpuop_func*)CPUFUNC(op_4af0_21), 19184 }, /* TAS */ { (cpuop_func*)CPUFUNC(op_4af8_21), 19192 }, /* TAS */ { (cpuop_func*)CPUFUNC(op_4af9_21), 19193 }, /* TAS */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4c00_21), 19456 }, /* MULL */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4c10_21), 19472 }, /* MULL */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4c18_21), 19480 }, /* MULL */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4c20_21), 19488 }, /* MULL */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4c28_21), 19496 }, /* MULL */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4c30_21), 19504 }, /* MULL */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4c38_21), 19512 }, /* MULL */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4c39_21), 19513 }, /* MULL */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4c3a_21), 19514 }, /* MULL */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4c3b_21), 19515 }, /* MULL */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4c3c_21), 19516 }, /* MULL */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4c40_21), 19520 }, /* DIVL */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4c50_21), 19536 }, /* DIVL */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4c58_21), 19544 }, /* DIVL */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4c60_21), 19552 }, /* DIVL */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4c68_21), 19560 }, /* DIVL */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4c70_21), 19568 }, /* DIVL */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4c78_21), 19576 }, /* DIVL */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4c79_21), 19577 }, /* DIVL */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4c7a_21), 19578 }, /* DIVL */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4c7b_21), 19579 }, /* DIVL */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4c7c_21), 19580 }, /* DIVL */ #endif { (cpuop_func*)CPUFUNC(op_4c90_21), 19600 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4c98_21), 19608 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4ca8_21), 19624 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4cb0_21), 19632 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4cb8_21), 19640 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4cb9_21), 19641 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4cba_21), 19642 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4cbb_21), 19643 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4cd0_21), 19664 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4cd8_21), 19672 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4ce8_21), 19688 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4cf0_21), 19696 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4cf8_21), 19704 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4cf9_21), 19705 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4cfa_21), 19706 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4cfb_21), 19707 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4e40_21), 20032 }, /* TRAP */ { (cpuop_func*)CPUFUNC(op_4e50_21), 20048 }, /* LINK */ { (cpuop_func*)CPUFUNC(op_4e58_21), 20056 }, /* UNLK */ { (cpuop_func*)CPUFUNC(op_4e60_21), 20064 }, /* MVR2USP */ { (cpuop_func*)CPUFUNC(op_4e68_21), 20072 }, /* MVUSP2R */ { (cpuop_func*)CPUFUNC(op_4e70_21), 20080 }, /* RESET */ { (cpuop_func*)CPUFUNC(op_4e71_21), 20081 }, /* NOP */ { (cpuop_func*)CPUFUNC(op_4e72_21), 20082 }, /* STOP */ { (cpuop_func*)CPUFUNC(op_4e73_21), 20083 }, /* RTE */ { (cpuop_func*)CPUFUNC(op_4e74_21), 20084 }, /* RTD */ { (cpuop_func*)CPUFUNC(op_4e75_21), 20085 }, /* RTS */ { (cpuop_func*)CPUFUNC(op_4e76_21), 20086 }, /* TRAPV */ { (cpuop_func*)CPUFUNC(op_4e77_21), 20087 }, /* RTR */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4e7a_21), 20090 }, /* MOVEC2 */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4e7b_21), 20091 }, /* MOVE2C */ #endif { (cpuop_func*)CPUFUNC(op_4e90_21), 20112 }, /* JSR */ { (cpuop_func*)CPUFUNC(op_4ea8_21), 20136 }, /* JSR */ { (cpuop_func*)CPUFUNC(op_4eb0_21), 20144 }, /* JSR */ { (cpuop_func*)CPUFUNC(op_4eb8_21), 20152 }, /* JSR */ { (cpuop_func*)CPUFUNC(op_4eb9_21), 20153 }, /* JSR */ { (cpuop_func*)CPUFUNC(op_4eba_21), 20154 }, /* JSR */ { (cpuop_func*)CPUFUNC(op_4ebb_21), 20155 }, /* JSR */ { (cpuop_func*)CPUFUNC(op_4ed0_21), 20176 }, /* JMP */ { (cpuop_func*)CPUFUNC(op_4ee8_21), 20200 }, /* JMP */ { (cpuop_func*)CPUFUNC(op_4ef0_21), 20208 }, /* JMP */ { (cpuop_func*)CPUFUNC(op_4ef8_21), 20216 }, /* JMP */ { (cpuop_func*)CPUFUNC(op_4ef9_21), 20217 }, /* JMP */ { (cpuop_func*)CPUFUNC(op_4efa_21), 20218 }, /* JMP */ { (cpuop_func*)CPUFUNC(op_4efb_21), 20219 }, /* JMP */ { (cpuop_func*)CPUFUNC(op_5000_21), 20480 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5010_21), 20496 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5018_21), 20504 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5020_21), 20512 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5028_21), 20520 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5030_21), 20528 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5038_21), 20536 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5039_21), 20537 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5040_21), 20544 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5048_21), 20552 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_5050_21), 20560 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5058_21), 20568 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5060_21), 20576 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5068_21), 20584 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5070_21), 20592 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5078_21), 20600 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5079_21), 20601 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5080_21), 20608 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5088_21), 20616 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_5090_21), 20624 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5098_21), 20632 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_50a0_21), 20640 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_50a8_21), 20648 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_50b0_21), 20656 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_50b8_21), 20664 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_50b9_21), 20665 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_50c0_21), 20672 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_50c8_21), 20680 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_50d0_21), 20688 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_50d8_21), 20696 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_50e0_21), 20704 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_50e8_21), 20712 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_50f0_21), 20720 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_50f8_21), 20728 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_50f9_21), 20729 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_50fa_21), 20730 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_50fb_21), 20731 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_50fc_21), 20732 }, /* TRAPcc */ #endif { (cpuop_func*)CPUFUNC(op_5100_21), 20736 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5110_21), 20752 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5118_21), 20760 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5120_21), 20768 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5128_21), 20776 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5130_21), 20784 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5138_21), 20792 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5139_21), 20793 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5140_21), 20800 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5148_21), 20808 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_5150_21), 20816 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5158_21), 20824 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5160_21), 20832 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5168_21), 20840 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5170_21), 20848 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5178_21), 20856 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5179_21), 20857 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5180_21), 20864 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5188_21), 20872 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_5190_21), 20880 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5198_21), 20888 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_51a0_21), 20896 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_51a8_21), 20904 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_51b0_21), 20912 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_51b8_21), 20920 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_51b9_21), 20921 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_51c0_21), 20928 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_51c8_21), 20936 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_51d0_21), 20944 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_51d8_21), 20952 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_51e0_21), 20960 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_51e8_21), 20968 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_51f0_21), 20976 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_51f8_21), 20984 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_51f9_21), 20985 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_51fa_21), 20986 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_51fb_21), 20987 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_51fc_21), 20988 }, /* TRAPcc */ #endif { (cpuop_func*)CPUFUNC(op_52c0_21), 21184 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_52c8_21), 21192 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_52d0_21), 21200 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_52d8_21), 21208 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_52e0_21), 21216 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_52e8_21), 21224 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_52f0_21), 21232 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_52f8_21), 21240 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_52f9_21), 21241 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_52fa_21), 21242 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_52fb_21), 21243 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_52fc_21), 21244 }, /* TRAPcc */ #endif { (cpuop_func*)CPUFUNC(op_53c0_21), 21440 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_53c8_21), 21448 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_53d0_21), 21456 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_53d8_21), 21464 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_53e0_21), 21472 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_53e8_21), 21480 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_53f0_21), 21488 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_53f8_21), 21496 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_53f9_21), 21497 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_53fa_21), 21498 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_53fb_21), 21499 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_53fc_21), 21500 }, /* TRAPcc */ #endif { (cpuop_func*)CPUFUNC(op_54c0_21), 21696 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_54c8_21), 21704 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_54d0_21), 21712 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_54d8_21), 21720 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_54e0_21), 21728 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_54e8_21), 21736 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_54f0_21), 21744 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_54f8_21), 21752 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_54f9_21), 21753 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_54fa_21), 21754 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_54fb_21), 21755 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_54fc_21), 21756 }, /* TRAPcc */ #endif { (cpuop_func*)CPUFUNC(op_55c0_21), 21952 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_55c8_21), 21960 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_55d0_21), 21968 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_55d8_21), 21976 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_55e0_21), 21984 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_55e8_21), 21992 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_55f0_21), 22000 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_55f8_21), 22008 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_55f9_21), 22009 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_55fa_21), 22010 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_55fb_21), 22011 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_55fc_21), 22012 }, /* TRAPcc */ #endif { (cpuop_func*)CPUFUNC(op_56c0_21), 22208 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_56c8_21), 22216 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_56d0_21), 22224 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_56d8_21), 22232 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_56e0_21), 22240 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_56e8_21), 22248 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_56f0_21), 22256 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_56f8_21), 22264 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_56f9_21), 22265 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_56fa_21), 22266 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_56fb_21), 22267 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_56fc_21), 22268 }, /* TRAPcc */ #endif { (cpuop_func*)CPUFUNC(op_57c0_21), 22464 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_57c8_21), 22472 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_57d0_21), 22480 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_57d8_21), 22488 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_57e0_21), 22496 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_57e8_21), 22504 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_57f0_21), 22512 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_57f8_21), 22520 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_57f9_21), 22521 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_57fa_21), 22522 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_57fb_21), 22523 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_57fc_21), 22524 }, /* TRAPcc */ #endif { (cpuop_func*)CPUFUNC(op_58c0_21), 22720 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_58c8_21), 22728 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_58d0_21), 22736 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_58d8_21), 22744 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_58e0_21), 22752 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_58e8_21), 22760 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_58f0_21), 22768 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_58f8_21), 22776 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_58f9_21), 22777 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_58fa_21), 22778 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_58fb_21), 22779 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_58fc_21), 22780 }, /* TRAPcc */ #endif { (cpuop_func*)CPUFUNC(op_59c0_21), 22976 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_59c8_21), 22984 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_59d0_21), 22992 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_59d8_21), 23000 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_59e0_21), 23008 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_59e8_21), 23016 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_59f0_21), 23024 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_59f8_21), 23032 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_59f9_21), 23033 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_59fa_21), 23034 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_59fb_21), 23035 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_59fc_21), 23036 }, /* TRAPcc */ #endif { (cpuop_func*)CPUFUNC(op_5ac0_21), 23232 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ac8_21), 23240 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_5ad0_21), 23248 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ad8_21), 23256 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ae0_21), 23264 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ae8_21), 23272 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5af0_21), 23280 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5af8_21), 23288 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5af9_21), 23289 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_5afa_21), 23290 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_5afb_21), 23291 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_5afc_21), 23292 }, /* TRAPcc */ #endif { (cpuop_func*)CPUFUNC(op_5bc0_21), 23488 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5bc8_21), 23496 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_5bd0_21), 23504 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5bd8_21), 23512 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5be0_21), 23520 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5be8_21), 23528 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5bf0_21), 23536 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5bf8_21), 23544 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5bf9_21), 23545 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_5bfa_21), 23546 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_5bfb_21), 23547 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_5bfc_21), 23548 }, /* TRAPcc */ #endif { (cpuop_func*)CPUFUNC(op_5cc0_21), 23744 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5cc8_21), 23752 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_5cd0_21), 23760 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5cd8_21), 23768 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ce0_21), 23776 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ce8_21), 23784 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5cf0_21), 23792 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5cf8_21), 23800 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5cf9_21), 23801 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_5cfa_21), 23802 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_5cfb_21), 23803 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_5cfc_21), 23804 }, /* TRAPcc */ #endif { (cpuop_func*)CPUFUNC(op_5dc0_21), 24000 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5dc8_21), 24008 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_5dd0_21), 24016 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5dd8_21), 24024 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5de0_21), 24032 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5de8_21), 24040 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5df0_21), 24048 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5df8_21), 24056 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5df9_21), 24057 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_5dfa_21), 24058 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_5dfb_21), 24059 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_5dfc_21), 24060 }, /* TRAPcc */ #endif { (cpuop_func*)CPUFUNC(op_5ec0_21), 24256 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ec8_21), 24264 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_5ed0_21), 24272 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ed8_21), 24280 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ee0_21), 24288 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ee8_21), 24296 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ef0_21), 24304 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ef8_21), 24312 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ef9_21), 24313 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_5efa_21), 24314 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_5efb_21), 24315 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_5efc_21), 24316 }, /* TRAPcc */ #endif { (cpuop_func*)CPUFUNC(op_5fc0_21), 24512 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5fc8_21), 24520 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_5fd0_21), 24528 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5fd8_21), 24536 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5fe0_21), 24544 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5fe8_21), 24552 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ff0_21), 24560 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ff8_21), 24568 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ff9_21), 24569 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_5ffa_21), 24570 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_5ffb_21), 24571 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_5ffc_21), 24572 }, /* TRAPcc */ #endif { (cpuop_func*)CPUFUNC(op_6000_21), 24576 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6001_21), 24577 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_60ff_21), 24831 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6100_21), 24832 }, /* BSR */ { (cpuop_func*)CPUFUNC(op_6101_21), 24833 }, /* BSR */ { (cpuop_func*)CPUFUNC(op_61ff_21), 25087 }, /* BSR */ { (cpuop_func*)CPUFUNC(op_6200_21), 25088 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6201_21), 25089 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_62ff_21), 25343 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6300_21), 25344 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6301_21), 25345 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_63ff_21), 25599 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6400_21), 25600 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6401_21), 25601 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_64ff_21), 25855 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6500_21), 25856 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6501_21), 25857 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_65ff_21), 26111 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6600_21), 26112 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6601_21), 26113 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_66ff_21), 26367 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6700_21), 26368 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6701_21), 26369 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_67ff_21), 26623 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6800_21), 26624 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6801_21), 26625 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_68ff_21), 26879 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6900_21), 26880 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6901_21), 26881 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_69ff_21), 27135 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6a00_21), 27136 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6a01_21), 27137 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6aff_21), 27391 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6b00_21), 27392 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6b01_21), 27393 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6bff_21), 27647 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6c00_21), 27648 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6c01_21), 27649 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6cff_21), 27903 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6d00_21), 27904 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6d01_21), 27905 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6dff_21), 28159 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6e00_21), 28160 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6e01_21), 28161 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6eff_21), 28415 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6f00_21), 28416 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6f01_21), 28417 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6fff_21), 28671 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_7000_21), 28672 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_8000_21), 32768 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8010_21), 32784 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8018_21), 32792 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8020_21), 32800 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8028_21), 32808 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8030_21), 32816 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8038_21), 32824 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8039_21), 32825 }, /* OR */ { (cpuop_func*)CPUFUNC(op_803a_21), 32826 }, /* OR */ { (cpuop_func*)CPUFUNC(op_803b_21), 32827 }, /* OR */ { (cpuop_func*)CPUFUNC(op_803c_21), 32828 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8040_21), 32832 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8050_21), 32848 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8058_21), 32856 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8060_21), 32864 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8068_21), 32872 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8070_21), 32880 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8078_21), 32888 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8079_21), 32889 }, /* OR */ { (cpuop_func*)CPUFUNC(op_807a_21), 32890 }, /* OR */ { (cpuop_func*)CPUFUNC(op_807b_21), 32891 }, /* OR */ { (cpuop_func*)CPUFUNC(op_807c_21), 32892 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8080_21), 32896 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8090_21), 32912 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8098_21), 32920 }, /* OR */ { (cpuop_func*)CPUFUNC(op_80a0_21), 32928 }, /* OR */ { (cpuop_func*)CPUFUNC(op_80a8_21), 32936 }, /* OR */ { (cpuop_func*)CPUFUNC(op_80b0_21), 32944 }, /* OR */ { (cpuop_func*)CPUFUNC(op_80b8_21), 32952 }, /* OR */ { (cpuop_func*)CPUFUNC(op_80b9_21), 32953 }, /* OR */ { (cpuop_func*)CPUFUNC(op_80ba_21), 32954 }, /* OR */ { (cpuop_func*)CPUFUNC(op_80bb_21), 32955 }, /* OR */ { (cpuop_func*)CPUFUNC(op_80bc_21), 32956 }, /* OR */ { (cpuop_func*)CPUFUNC(op_80c0_21), 32960 }, /* DIVU */ { (cpuop_func*)CPUFUNC(op_80d0_21), 32976 }, /* DIVU */ { (cpuop_func*)CPUFUNC(op_80d8_21), 32984 }, /* DIVU */ { (cpuop_func*)CPUFUNC(op_80e0_21), 32992 }, /* DIVU */ { (cpuop_func*)CPUFUNC(op_80e8_21), 33000 }, /* DIVU */ { (cpuop_func*)CPUFUNC(op_80f0_21), 33008 }, /* DIVU */ { (cpuop_func*)CPUFUNC(op_80f8_21), 33016 }, /* DIVU */ { (cpuop_func*)CPUFUNC(op_80f9_21), 33017 }, /* DIVU */ { (cpuop_func*)CPUFUNC(op_80fa_21), 33018 }, /* DIVU */ { (cpuop_func*)CPUFUNC(op_80fb_21), 33019 }, /* DIVU */ { (cpuop_func*)CPUFUNC(op_80fc_21), 33020 }, /* DIVU */ { (cpuop_func*)CPUFUNC(op_8100_21), 33024 }, /* SBCD */ { (cpuop_func*)CPUFUNC(op_8108_21), 33032 }, /* SBCD */ { (cpuop_func*)CPUFUNC(op_8110_21), 33040 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8118_21), 33048 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8120_21), 33056 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8128_21), 33064 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8130_21), 33072 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8138_21), 33080 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8139_21), 33081 }, /* OR */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_8140_21), 33088 }, /* PACK */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_8148_21), 33096 }, /* PACK */ #endif { (cpuop_func*)CPUFUNC(op_8150_21), 33104 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8158_21), 33112 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8160_21), 33120 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8168_21), 33128 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8170_21), 33136 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8178_21), 33144 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8179_21), 33145 }, /* OR */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_8180_21), 33152 }, /* UNPK */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_8188_21), 33160 }, /* UNPK */ #endif { (cpuop_func*)CPUFUNC(op_8190_21), 33168 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8198_21), 33176 }, /* OR */ { (cpuop_func*)CPUFUNC(op_81a0_21), 33184 }, /* OR */ { (cpuop_func*)CPUFUNC(op_81a8_21), 33192 }, /* OR */ { (cpuop_func*)CPUFUNC(op_81b0_21), 33200 }, /* OR */ { (cpuop_func*)CPUFUNC(op_81b8_21), 33208 }, /* OR */ { (cpuop_func*)CPUFUNC(op_81b9_21), 33209 }, /* OR */ { (cpuop_func*)CPUFUNC(op_81c0_21), 33216 }, /* DIVS */ { (cpuop_func*)CPUFUNC(op_81d0_21), 33232 }, /* DIVS */ { (cpuop_func*)CPUFUNC(op_81d8_21), 33240 }, /* DIVS */ { (cpuop_func*)CPUFUNC(op_81e0_21), 33248 }, /* DIVS */ { (cpuop_func*)CPUFUNC(op_81e8_21), 33256 }, /* DIVS */ { (cpuop_func*)CPUFUNC(op_81f0_21), 33264 }, /* DIVS */ { (cpuop_func*)CPUFUNC(op_81f8_21), 33272 }, /* DIVS */ { (cpuop_func*)CPUFUNC(op_81f9_21), 33273 }, /* DIVS */ { (cpuop_func*)CPUFUNC(op_81fa_21), 33274 }, /* DIVS */ { (cpuop_func*)CPUFUNC(op_81fb_21), 33275 }, /* DIVS */ { (cpuop_func*)CPUFUNC(op_81fc_21), 33276 }, /* DIVS */ { (cpuop_func*)CPUFUNC(op_9000_21), 36864 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9010_21), 36880 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9018_21), 36888 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9020_21), 36896 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9028_21), 36904 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9030_21), 36912 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9038_21), 36920 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9039_21), 36921 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_903a_21), 36922 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_903b_21), 36923 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_903c_21), 36924 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9040_21), 36928 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9048_21), 36936 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9050_21), 36944 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9058_21), 36952 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9060_21), 36960 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9068_21), 36968 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9070_21), 36976 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9078_21), 36984 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9079_21), 36985 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_907a_21), 36986 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_907b_21), 36987 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_907c_21), 36988 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9080_21), 36992 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9088_21), 37000 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9090_21), 37008 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9098_21), 37016 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_90a0_21), 37024 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_90a8_21), 37032 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_90b0_21), 37040 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_90b8_21), 37048 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_90b9_21), 37049 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_90ba_21), 37050 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_90bb_21), 37051 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_90bc_21), 37052 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_90c0_21), 37056 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_90c8_21), 37064 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_90d0_21), 37072 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_90d8_21), 37080 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_90e0_21), 37088 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_90e8_21), 37096 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_90f0_21), 37104 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_90f8_21), 37112 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_90f9_21), 37113 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_90fa_21), 37114 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_90fb_21), 37115 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_90fc_21), 37116 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_9100_21), 37120 }, /* SUBX */ { (cpuop_func*)CPUFUNC(op_9108_21), 37128 }, /* SUBX */ { (cpuop_func*)CPUFUNC(op_9110_21), 37136 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9118_21), 37144 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9120_21), 37152 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9128_21), 37160 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9130_21), 37168 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9138_21), 37176 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9139_21), 37177 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9140_21), 37184 }, /* SUBX */ { (cpuop_func*)CPUFUNC(op_9148_21), 37192 }, /* SUBX */ { (cpuop_func*)CPUFUNC(op_9150_21), 37200 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9158_21), 37208 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9160_21), 37216 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9168_21), 37224 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9170_21), 37232 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9178_21), 37240 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9179_21), 37241 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9180_21), 37248 }, /* SUBX */ { (cpuop_func*)CPUFUNC(op_9188_21), 37256 }, /* SUBX */ { (cpuop_func*)CPUFUNC(op_9190_21), 37264 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9198_21), 37272 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_91a0_21), 37280 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_91a8_21), 37288 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_91b0_21), 37296 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_91b8_21), 37304 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_91b9_21), 37305 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_91c0_21), 37312 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_91c8_21), 37320 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_91d0_21), 37328 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_91d8_21), 37336 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_91e0_21), 37344 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_91e8_21), 37352 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_91f0_21), 37360 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_91f8_21), 37368 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_91f9_21), 37369 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_91fa_21), 37370 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_91fb_21), 37371 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_91fc_21), 37372 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_b000_21), 45056 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b010_21), 45072 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b018_21), 45080 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b020_21), 45088 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b028_21), 45096 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b030_21), 45104 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b038_21), 45112 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b039_21), 45113 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b03a_21), 45114 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b03b_21), 45115 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b03c_21), 45116 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b040_21), 45120 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b048_21), 45128 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b050_21), 45136 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b058_21), 45144 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b060_21), 45152 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b068_21), 45160 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b070_21), 45168 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b078_21), 45176 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b079_21), 45177 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b07a_21), 45178 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b07b_21), 45179 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b07c_21), 45180 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b080_21), 45184 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b088_21), 45192 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b090_21), 45200 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b098_21), 45208 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b0a0_21), 45216 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b0a8_21), 45224 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b0b0_21), 45232 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b0b8_21), 45240 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b0b9_21), 45241 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b0ba_21), 45242 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b0bb_21), 45243 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b0bc_21), 45244 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b0c0_21), 45248 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b0c8_21), 45256 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b0d0_21), 45264 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b0d8_21), 45272 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b0e0_21), 45280 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b0e8_21), 45288 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b0f0_21), 45296 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b0f8_21), 45304 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b0f9_21), 45305 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b0fa_21), 45306 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b0fb_21), 45307 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b0fc_21), 45308 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b100_21), 45312 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b108_21), 45320 }, /* CMPM */ { (cpuop_func*)CPUFUNC(op_b110_21), 45328 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b118_21), 45336 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b120_21), 45344 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b128_21), 45352 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b130_21), 45360 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b138_21), 45368 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b139_21), 45369 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b140_21), 45376 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b148_21), 45384 }, /* CMPM */ { (cpuop_func*)CPUFUNC(op_b150_21), 45392 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b158_21), 45400 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b160_21), 45408 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b168_21), 45416 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b170_21), 45424 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b178_21), 45432 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b179_21), 45433 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b180_21), 45440 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b188_21), 45448 }, /* CMPM */ { (cpuop_func*)CPUFUNC(op_b190_21), 45456 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b198_21), 45464 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b1a0_21), 45472 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b1a8_21), 45480 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b1b0_21), 45488 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b1b8_21), 45496 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b1b9_21), 45497 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b1c0_21), 45504 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b1c8_21), 45512 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b1d0_21), 45520 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b1d8_21), 45528 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b1e0_21), 45536 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b1e8_21), 45544 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b1f0_21), 45552 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b1f8_21), 45560 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b1f9_21), 45561 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b1fa_21), 45562 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b1fb_21), 45563 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b1fc_21), 45564 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_c000_21), 49152 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c010_21), 49168 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c018_21), 49176 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c020_21), 49184 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c028_21), 49192 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c030_21), 49200 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c038_21), 49208 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c039_21), 49209 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c03a_21), 49210 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c03b_21), 49211 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c03c_21), 49212 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c040_21), 49216 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c050_21), 49232 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c058_21), 49240 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c060_21), 49248 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c068_21), 49256 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c070_21), 49264 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c078_21), 49272 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c079_21), 49273 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c07a_21), 49274 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c07b_21), 49275 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c07c_21), 49276 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c080_21), 49280 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c090_21), 49296 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c098_21), 49304 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c0a0_21), 49312 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c0a8_21), 49320 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c0b0_21), 49328 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c0b8_21), 49336 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c0b9_21), 49337 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c0ba_21), 49338 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c0bb_21), 49339 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c0bc_21), 49340 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c0c0_21), 49344 }, /* MULU */ { (cpuop_func*)CPUFUNC(op_c0d0_21), 49360 }, /* MULU */ { (cpuop_func*)CPUFUNC(op_c0d8_21), 49368 }, /* MULU */ { (cpuop_func*)CPUFUNC(op_c0e0_21), 49376 }, /* MULU */ { (cpuop_func*)CPUFUNC(op_c0e8_21), 49384 }, /* MULU */ { (cpuop_func*)CPUFUNC(op_c0f0_21), 49392 }, /* MULU */ { (cpuop_func*)CPUFUNC(op_c0f8_21), 49400 }, /* MULU */ { (cpuop_func*)CPUFUNC(op_c0f9_21), 49401 }, /* MULU */ { (cpuop_func*)CPUFUNC(op_c0fa_21), 49402 }, /* MULU */ { (cpuop_func*)CPUFUNC(op_c0fb_21), 49403 }, /* MULU */ { (cpuop_func*)CPUFUNC(op_c0fc_21), 49404 }, /* MULU */ { (cpuop_func*)CPUFUNC(op_c100_21), 49408 }, /* ABCD */ { (cpuop_func*)CPUFUNC(op_c108_21), 49416 }, /* ABCD */ { (cpuop_func*)CPUFUNC(op_c110_21), 49424 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c118_21), 49432 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c120_21), 49440 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c128_21), 49448 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c130_21), 49456 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c138_21), 49464 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c139_21), 49465 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c140_21), 49472 }, /* EXG */ { (cpuop_func*)CPUFUNC(op_c148_21), 49480 }, /* EXG */ { (cpuop_func*)CPUFUNC(op_c150_21), 49488 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c158_21), 49496 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c160_21), 49504 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c168_21), 49512 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c170_21), 49520 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c178_21), 49528 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c179_21), 49529 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c188_21), 49544 }, /* EXG */ { (cpuop_func*)CPUFUNC(op_c190_21), 49552 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c198_21), 49560 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c1a0_21), 49568 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c1a8_21), 49576 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c1b0_21), 49584 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c1b8_21), 49592 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c1b9_21), 49593 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c1c0_21), 49600 }, /* MULS */ { (cpuop_func*)CPUFUNC(op_c1d0_21), 49616 }, /* MULS */ { (cpuop_func*)CPUFUNC(op_c1d8_21), 49624 }, /* MULS */ { (cpuop_func*)CPUFUNC(op_c1e0_21), 49632 }, /* MULS */ { (cpuop_func*)CPUFUNC(op_c1e8_21), 49640 }, /* MULS */ { (cpuop_func*)CPUFUNC(op_c1f0_21), 49648 }, /* MULS */ { (cpuop_func*)CPUFUNC(op_c1f8_21), 49656 }, /* MULS */ { (cpuop_func*)CPUFUNC(op_c1f9_21), 49657 }, /* MULS */ { (cpuop_func*)CPUFUNC(op_c1fa_21), 49658 }, /* MULS */ { (cpuop_func*)CPUFUNC(op_c1fb_21), 49659 }, /* MULS */ { (cpuop_func*)CPUFUNC(op_c1fc_21), 49660 }, /* MULS */ { (cpuop_func*)CPUFUNC(op_d000_21), 53248 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d010_21), 53264 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d018_21), 53272 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d020_21), 53280 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d028_21), 53288 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d030_21), 53296 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d038_21), 53304 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d039_21), 53305 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d03a_21), 53306 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d03b_21), 53307 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d03c_21), 53308 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d040_21), 53312 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d048_21), 53320 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d050_21), 53328 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d058_21), 53336 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d060_21), 53344 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d068_21), 53352 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d070_21), 53360 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d078_21), 53368 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d079_21), 53369 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d07a_21), 53370 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d07b_21), 53371 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d07c_21), 53372 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d080_21), 53376 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d088_21), 53384 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d090_21), 53392 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d098_21), 53400 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d0a0_21), 53408 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d0a8_21), 53416 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d0b0_21), 53424 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d0b8_21), 53432 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d0b9_21), 53433 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d0ba_21), 53434 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d0bb_21), 53435 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d0bc_21), 53436 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d0c0_21), 53440 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d0c8_21), 53448 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d0d0_21), 53456 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d0d8_21), 53464 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d0e0_21), 53472 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d0e8_21), 53480 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d0f0_21), 53488 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d0f8_21), 53496 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d0f9_21), 53497 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d0fa_21), 53498 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d0fb_21), 53499 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d0fc_21), 53500 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d100_21), 53504 }, /* ADDX */ { (cpuop_func*)CPUFUNC(op_d108_21), 53512 }, /* ADDX */ { (cpuop_func*)CPUFUNC(op_d110_21), 53520 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d118_21), 53528 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d120_21), 53536 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d128_21), 53544 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d130_21), 53552 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d138_21), 53560 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d139_21), 53561 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d140_21), 53568 }, /* ADDX */ { (cpuop_func*)CPUFUNC(op_d148_21), 53576 }, /* ADDX */ { (cpuop_func*)CPUFUNC(op_d150_21), 53584 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d158_21), 53592 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d160_21), 53600 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d168_21), 53608 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d170_21), 53616 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d178_21), 53624 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d179_21), 53625 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d180_21), 53632 }, /* ADDX */ { (cpuop_func*)CPUFUNC(op_d188_21), 53640 }, /* ADDX */ { (cpuop_func*)CPUFUNC(op_d190_21), 53648 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d198_21), 53656 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d1a0_21), 53664 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d1a8_21), 53672 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d1b0_21), 53680 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d1b8_21), 53688 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d1b9_21), 53689 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d1c0_21), 53696 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d1c8_21), 53704 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d1d0_21), 53712 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d1d8_21), 53720 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d1e0_21), 53728 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d1e8_21), 53736 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d1f0_21), 53744 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d1f8_21), 53752 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d1f9_21), 53753 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d1fa_21), 53754 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d1fb_21), 53755 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d1fc_21), 53756 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_e000_21), 57344 }, /* ASR */ { (cpuop_func*)CPUFUNC(op_e008_21), 57352 }, /* LSR */ { (cpuop_func*)CPUFUNC(op_e010_21), 57360 }, /* ROXR */ { (cpuop_func*)CPUFUNC(op_e018_21), 57368 }, /* ROR */ { (cpuop_func*)CPUFUNC(op_e020_21), 57376 }, /* ASR */ { (cpuop_func*)CPUFUNC(op_e028_21), 57384 }, /* LSR */ { (cpuop_func*)CPUFUNC(op_e030_21), 57392 }, /* ROXR */ { (cpuop_func*)CPUFUNC(op_e038_21), 57400 }, /* ROR */ { (cpuop_func*)CPUFUNC(op_e040_21), 57408 }, /* ASR */ { (cpuop_func*)CPUFUNC(op_e048_21), 57416 }, /* LSR */ { (cpuop_func*)CPUFUNC(op_e050_21), 57424 }, /* ROXR */ { (cpuop_func*)CPUFUNC(op_e058_21), 57432 }, /* ROR */ { (cpuop_func*)CPUFUNC(op_e060_21), 57440 }, /* ASR */ { (cpuop_func*)CPUFUNC(op_e068_21), 57448 }, /* LSR */ { (cpuop_func*)CPUFUNC(op_e070_21), 57456 }, /* ROXR */ { (cpuop_func*)CPUFUNC(op_e078_21), 57464 }, /* ROR */ { (cpuop_func*)CPUFUNC(op_e080_21), 57472 }, /* ASR */ { (cpuop_func*)CPUFUNC(op_e088_21), 57480 }, /* LSR */ { (cpuop_func*)CPUFUNC(op_e090_21), 57488 }, /* ROXR */ { (cpuop_func*)CPUFUNC(op_e098_21), 57496 }, /* ROR */ { (cpuop_func*)CPUFUNC(op_e0a0_21), 57504 }, /* ASR */ { (cpuop_func*)CPUFUNC(op_e0a8_21), 57512 }, /* LSR */ { (cpuop_func*)CPUFUNC(op_e0b0_21), 57520 }, /* ROXR */ { (cpuop_func*)CPUFUNC(op_e0b8_21), 57528 }, /* ROR */ { (cpuop_func*)CPUFUNC(op_e0d0_21), 57552 }, /* ASRW */ { (cpuop_func*)CPUFUNC(op_e0d8_21), 57560 }, /* ASRW */ { (cpuop_func*)CPUFUNC(op_e0e0_21), 57568 }, /* ASRW */ { (cpuop_func*)CPUFUNC(op_e0e8_21), 57576 }, /* ASRW */ { (cpuop_func*)CPUFUNC(op_e0f0_21), 57584 }, /* ASRW */ { (cpuop_func*)CPUFUNC(op_e0f8_21), 57592 }, /* ASRW */ { (cpuop_func*)CPUFUNC(op_e0f9_21), 57593 }, /* ASRW */ { (cpuop_func*)CPUFUNC(op_e100_21), 57600 }, /* ASL */ { (cpuop_func*)CPUFUNC(op_e108_21), 57608 }, /* LSL */ { (cpuop_func*)CPUFUNC(op_e110_21), 57616 }, /* ROXL */ { (cpuop_func*)CPUFUNC(op_e118_21), 57624 }, /* ROL */ { (cpuop_func*)CPUFUNC(op_e120_21), 57632 }, /* ASL */ { (cpuop_func*)CPUFUNC(op_e128_21), 57640 }, /* LSL */ { (cpuop_func*)CPUFUNC(op_e130_21), 57648 }, /* ROXL */ { (cpuop_func*)CPUFUNC(op_e138_21), 57656 }, /* ROL */ { (cpuop_func*)CPUFUNC(op_e140_21), 57664 }, /* ASL */ { (cpuop_func*)CPUFUNC(op_e148_21), 57672 }, /* LSL */ { (cpuop_func*)CPUFUNC(op_e150_21), 57680 }, /* ROXL */ { (cpuop_func*)CPUFUNC(op_e158_21), 57688 }, /* ROL */ { (cpuop_func*)CPUFUNC(op_e160_21), 57696 }, /* ASL */ { (cpuop_func*)CPUFUNC(op_e168_21), 57704 }, /* LSL */ { (cpuop_func*)CPUFUNC(op_e170_21), 57712 }, /* ROXL */ { (cpuop_func*)CPUFUNC(op_e178_21), 57720 }, /* ROL */ { (cpuop_func*)CPUFUNC(op_e180_21), 57728 }, /* ASL */ { (cpuop_func*)CPUFUNC(op_e188_21), 57736 }, /* LSL */ { (cpuop_func*)CPUFUNC(op_e190_21), 57744 }, /* ROXL */ { (cpuop_func*)CPUFUNC(op_e198_21), 57752 }, /* ROL */ { (cpuop_func*)CPUFUNC(op_e1a0_21), 57760 }, /* ASL */ { (cpuop_func*)CPUFUNC(op_e1a8_21), 57768 }, /* LSL */ { (cpuop_func*)CPUFUNC(op_e1b0_21), 57776 }, /* ROXL */ { (cpuop_func*)CPUFUNC(op_e1b8_21), 57784 }, /* ROL */ { (cpuop_func*)CPUFUNC(op_e1d0_21), 57808 }, /* ASLW */ { (cpuop_func*)CPUFUNC(op_e1d8_21), 57816 }, /* ASLW */ { (cpuop_func*)CPUFUNC(op_e1e0_21), 57824 }, /* ASLW */ { (cpuop_func*)CPUFUNC(op_e1e8_21), 57832 }, /* ASLW */ { (cpuop_func*)CPUFUNC(op_e1f0_21), 57840 }, /* ASLW */ { (cpuop_func*)CPUFUNC(op_e1f8_21), 57848 }, /* ASLW */ { (cpuop_func*)CPUFUNC(op_e1f9_21), 57849 }, /* ASLW */ { (cpuop_func*)CPUFUNC(op_e2d0_21), 58064 }, /* LSRW */ { (cpuop_func*)CPUFUNC(op_e2d8_21), 58072 }, /* LSRW */ { (cpuop_func*)CPUFUNC(op_e2e0_21), 58080 }, /* LSRW */ { (cpuop_func*)CPUFUNC(op_e2e8_21), 58088 }, /* LSRW */ { (cpuop_func*)CPUFUNC(op_e2f0_21), 58096 }, /* LSRW */ { (cpuop_func*)CPUFUNC(op_e2f8_21), 58104 }, /* LSRW */ { (cpuop_func*)CPUFUNC(op_e2f9_21), 58105 }, /* LSRW */ { (cpuop_func*)CPUFUNC(op_e3d0_21), 58320 }, /* LSLW */ { (cpuop_func*)CPUFUNC(op_e3d8_21), 58328 }, /* LSLW */ { (cpuop_func*)CPUFUNC(op_e3e0_21), 58336 }, /* LSLW */ { (cpuop_func*)CPUFUNC(op_e3e8_21), 58344 }, /* LSLW */ { (cpuop_func*)CPUFUNC(op_e3f0_21), 58352 }, /* LSLW */ { (cpuop_func*)CPUFUNC(op_e3f8_21), 58360 }, /* LSLW */ { (cpuop_func*)CPUFUNC(op_e3f9_21), 58361 }, /* LSLW */ { (cpuop_func*)CPUFUNC(op_e4d0_21), 58576 }, /* ROXRW */ { (cpuop_func*)CPUFUNC(op_e4d8_21), 58584 }, /* ROXRW */ { (cpuop_func*)CPUFUNC(op_e4e0_21), 58592 }, /* ROXRW */ { (cpuop_func*)CPUFUNC(op_e4e8_21), 58600 }, /* ROXRW */ { (cpuop_func*)CPUFUNC(op_e4f0_21), 58608 }, /* ROXRW */ { (cpuop_func*)CPUFUNC(op_e4f8_21), 58616 }, /* ROXRW */ { (cpuop_func*)CPUFUNC(op_e4f9_21), 58617 }, /* ROXRW */ { (cpuop_func*)CPUFUNC(op_e5d0_21), 58832 }, /* ROXLW */ { (cpuop_func*)CPUFUNC(op_e5d8_21), 58840 }, /* ROXLW */ { (cpuop_func*)CPUFUNC(op_e5e0_21), 58848 }, /* ROXLW */ { (cpuop_func*)CPUFUNC(op_e5e8_21), 58856 }, /* ROXLW */ { (cpuop_func*)CPUFUNC(op_e5f0_21), 58864 }, /* ROXLW */ { (cpuop_func*)CPUFUNC(op_e5f8_21), 58872 }, /* ROXLW */ { (cpuop_func*)CPUFUNC(op_e5f9_21), 58873 }, /* ROXLW */ { (cpuop_func*)CPUFUNC(op_e6d0_21), 59088 }, /* RORW */ { (cpuop_func*)CPUFUNC(op_e6d8_21), 59096 }, /* RORW */ { (cpuop_func*)CPUFUNC(op_e6e0_21), 59104 }, /* RORW */ { (cpuop_func*)CPUFUNC(op_e6e8_21), 59112 }, /* RORW */ { (cpuop_func*)CPUFUNC(op_e6f0_21), 59120 }, /* RORW */ { (cpuop_func*)CPUFUNC(op_e6f8_21), 59128 }, /* RORW */ { (cpuop_func*)CPUFUNC(op_e6f9_21), 59129 }, /* RORW */ { (cpuop_func*)CPUFUNC(op_e7d0_21), 59344 }, /* ROLW */ { (cpuop_func*)CPUFUNC(op_e7d8_21), 59352 }, /* ROLW */ { (cpuop_func*)CPUFUNC(op_e7e0_21), 59360 }, /* ROLW */ { (cpuop_func*)CPUFUNC(op_e7e8_21), 59368 }, /* ROLW */ { (cpuop_func*)CPUFUNC(op_e7f0_21), 59376 }, /* ROLW */ { (cpuop_func*)CPUFUNC(op_e7f8_21), 59384 }, /* ROLW */ { (cpuop_func*)CPUFUNC(op_e7f9_21), 59385 }, /* ROLW */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_e8c0_21), 59584 }, /* BFTST */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_e8d0_21), 59600 }, /* BFTST */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_e8e8_21), 59624 }, /* BFTST */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_e8f0_21), 59632 }, /* BFTST */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_e8f8_21), 59640 }, /* BFTST */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_e8f9_21), 59641 }, /* BFTST */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_e8fa_21), 59642 }, /* BFTST */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_e8fb_21), 59643 }, /* BFTST */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_e9c0_21), 59840 }, /* BFEXTU */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_e9d0_21), 59856 }, /* BFEXTU */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_e9e8_21), 59880 }, /* BFEXTU */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_e9f0_21), 59888 }, /* BFEXTU */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_e9f8_21), 59896 }, /* BFEXTU */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_e9f9_21), 59897 }, /* BFEXTU */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_e9fa_21), 59898 }, /* BFEXTU */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_e9fb_21), 59899 }, /* BFEXTU */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_eac0_21), 60096 }, /* BFCHG */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_ead0_21), 60112 }, /* BFCHG */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_eae8_21), 60136 }, /* BFCHG */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_eaf0_21), 60144 }, /* BFCHG */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_eaf8_21), 60152 }, /* BFCHG */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_eaf9_21), 60153 }, /* BFCHG */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_ebc0_21), 60352 }, /* BFEXTS */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_ebd0_21), 60368 }, /* BFEXTS */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_ebe8_21), 60392 }, /* BFEXTS */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_ebf0_21), 60400 }, /* BFEXTS */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_ebf8_21), 60408 }, /* BFEXTS */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_ebf9_21), 60409 }, /* BFEXTS */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_ebfa_21), 60410 }, /* BFEXTS */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_ebfb_21), 60411 }, /* BFEXTS */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_ecc0_21), 60608 }, /* BFCLR */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_ecd0_21), 60624 }, /* BFCLR */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_ece8_21), 60648 }, /* BFCLR */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_ecf0_21), 60656 }, /* BFCLR */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_ecf8_21), 60664 }, /* BFCLR */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_ecf9_21), 60665 }, /* BFCLR */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_edc0_21), 60864 }, /* BFFFO */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_edd0_21), 60880 }, /* BFFFO */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_ede8_21), 60904 }, /* BFFFO */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_edf0_21), 60912 }, /* BFFFO */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_edf8_21), 60920 }, /* BFFFO */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_edf9_21), 60921 }, /* BFFFO */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_edfa_21), 60922 }, /* BFFFO */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_edfb_21), 60923 }, /* BFFFO */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_eec0_21), 61120 }, /* BFSET */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_eed0_21), 61136 }, /* BFSET */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_eee8_21), 61160 }, /* BFSET */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_eef0_21), 61168 }, /* BFSET */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_eef8_21), 61176 }, /* BFSET */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_eef9_21), 61177 }, /* BFSET */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_efc0_21), 61376 }, /* BFINS */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_efd0_21), 61392 }, /* BFINS */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_efe8_21), 61416 }, /* BFINS */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_eff0_21), 61424 }, /* BFINS */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_eff8_21), 61432 }, /* BFINS */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_eff9_21), 61433 }, /* BFINS */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f200_21), 61952 }, /* FPP */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f208_21), 61960 }, /* FPP */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f210_21), 61968 }, /* FPP */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f218_21), 61976 }, /* FPP */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f220_21), 61984 }, /* FPP */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f228_21), 61992 }, /* FPP */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f230_21), 62000 }, /* FPP */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f238_21), 62008 }, /* FPP */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f239_21), 62009 }, /* FPP */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f23a_21), 62010 }, /* FPP */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f23b_21), 62011 }, /* FPP */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f23c_21), 62012 }, /* FPP */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f240_21), 62016 }, /* FScc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f248_21), 62024 }, /* FDBcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f250_21), 62032 }, /* FScc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f258_21), 62040 }, /* FScc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f260_21), 62048 }, /* FScc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f268_21), 62056 }, /* FScc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f270_21), 62064 }, /* FScc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f278_21), 62072 }, /* FScc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f279_21), 62073 }, /* FScc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f27a_21), 62074 }, /* FTRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f27b_21), 62075 }, /* FTRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f27c_21), 62076 }, /* FTRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f280_21), 62080 }, /* FBcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f2c0_21), 62144 }, /* FBcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f310_21), 62224 }, /* FSAVE */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f320_21), 62240 }, /* FSAVE */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f328_21), 62248 }, /* FSAVE */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f330_21), 62256 }, /* FSAVE */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f338_21), 62264 }, /* FSAVE */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f339_21), 62265 }, /* FSAVE */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f350_21), 62288 }, /* FRESTORE */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f358_21), 62296 }, /* FRESTORE */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f368_21), 62312 }, /* FRESTORE */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f370_21), 62320 }, /* FRESTORE */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f378_21), 62328 }, /* FRESTORE */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f379_21), 62329 }, /* FRESTORE */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f37a_21), 62330 }, /* FRESTORE */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f37b_21), 62331 }, /* FRESTORE */ #endif { 0, 0 }}; #endif /* CPUEMU_68000_ONLY */ #endif /* CPUEMU_21 */ #ifdef CPUEMU_22 #ifndef CPUEMU_68000_ONLY const struct cputbl CPUFUNC(op_smalltbl_22)[] = { { (cpuop_func*)CPUFUNC(op_0000_22), 0 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0010_22), 16 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0018_22), 24 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0020_22), 32 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0028_22), 40 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0030_22), 48 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0038_22), 56 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0039_22), 57 }, /* OR */ { (cpuop_func*)CPUFUNC(op_003c_22), 60 }, /* ORSR */ { (cpuop_func*)CPUFUNC(op_0040_22), 64 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0050_22), 80 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0058_22), 88 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0060_22), 96 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0068_22), 104 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0070_22), 112 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0078_22), 120 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0079_22), 121 }, /* OR */ { (cpuop_func*)CPUFUNC(op_007c_22), 124 }, /* ORSR */ { (cpuop_func*)CPUFUNC(op_0080_22), 128 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0090_22), 144 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0098_22), 152 }, /* OR */ { (cpuop_func*)CPUFUNC(op_00a0_22), 160 }, /* OR */ { (cpuop_func*)CPUFUNC(op_00a8_22), 168 }, /* OR */ { (cpuop_func*)CPUFUNC(op_00b0_22), 176 }, /* OR */ { (cpuop_func*)CPUFUNC(op_00b8_22), 184 }, /* OR */ { (cpuop_func*)CPUFUNC(op_00b9_22), 185 }, /* OR */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_00d0_22), 208 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_00e8_22), 232 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_00f0_22), 240 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_00f8_22), 248 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_00f9_22), 249 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_00fa_22), 250 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_00fb_22), 251 }, /* CHK2 */ #endif { (cpuop_func*)CPUFUNC(op_0100_22), 256 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0108_22), 264 }, /* MVPMR */ { (cpuop_func*)CPUFUNC(op_0110_22), 272 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0118_22), 280 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0120_22), 288 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0128_22), 296 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0130_22), 304 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0138_22), 312 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0139_22), 313 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_013a_22), 314 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_013b_22), 315 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_013c_22), 316 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0140_22), 320 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0148_22), 328 }, /* MVPMR */ { (cpuop_func*)CPUFUNC(op_0150_22), 336 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0158_22), 344 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0160_22), 352 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0168_22), 360 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0170_22), 368 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0178_22), 376 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0179_22), 377 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_017a_22), 378 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_017b_22), 379 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0180_22), 384 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_0188_22), 392 }, /* MVPRM */ { (cpuop_func*)CPUFUNC(op_0190_22), 400 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_0198_22), 408 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_01a0_22), 416 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_01a8_22), 424 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_01b0_22), 432 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_01b8_22), 440 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_01b9_22), 441 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_01ba_22), 442 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_01bb_22), 443 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_01c0_22), 448 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_01c8_22), 456 }, /* MVPRM */ { (cpuop_func*)CPUFUNC(op_01d0_22), 464 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_01d8_22), 472 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_01e0_22), 480 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_01e8_22), 488 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_01f0_22), 496 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_01f8_22), 504 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_01f9_22), 505 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_01fa_22), 506 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_01fb_22), 507 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_0200_22), 512 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0210_22), 528 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0218_22), 536 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0220_22), 544 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0228_22), 552 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0230_22), 560 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0238_22), 568 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0239_22), 569 }, /* AND */ { (cpuop_func*)CPUFUNC(op_023c_22), 572 }, /* ANDSR */ { (cpuop_func*)CPUFUNC(op_0240_22), 576 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0250_22), 592 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0258_22), 600 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0260_22), 608 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0268_22), 616 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0270_22), 624 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0278_22), 632 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0279_22), 633 }, /* AND */ { (cpuop_func*)CPUFUNC(op_027c_22), 636 }, /* ANDSR */ { (cpuop_func*)CPUFUNC(op_0280_22), 640 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0290_22), 656 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0298_22), 664 }, /* AND */ { (cpuop_func*)CPUFUNC(op_02a0_22), 672 }, /* AND */ { (cpuop_func*)CPUFUNC(op_02a8_22), 680 }, /* AND */ { (cpuop_func*)CPUFUNC(op_02b0_22), 688 }, /* AND */ { (cpuop_func*)CPUFUNC(op_02b8_22), 696 }, /* AND */ { (cpuop_func*)CPUFUNC(op_02b9_22), 697 }, /* AND */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_02d0_22), 720 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_02e8_22), 744 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_02f0_22), 752 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_02f8_22), 760 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_02f9_22), 761 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_02fa_22), 762 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_02fb_22), 763 }, /* CHK2 */ #endif { (cpuop_func*)CPUFUNC(op_0400_22), 1024 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0410_22), 1040 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0418_22), 1048 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0420_22), 1056 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0428_22), 1064 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0430_22), 1072 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0438_22), 1080 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0439_22), 1081 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0440_22), 1088 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0450_22), 1104 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0458_22), 1112 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0460_22), 1120 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0468_22), 1128 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0470_22), 1136 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0478_22), 1144 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0479_22), 1145 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0480_22), 1152 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0490_22), 1168 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0498_22), 1176 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_04a0_22), 1184 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_04a8_22), 1192 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_04b0_22), 1200 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_04b8_22), 1208 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_04b9_22), 1209 }, /* SUB */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_04d0_22), 1232 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_04e8_22), 1256 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_04f0_22), 1264 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_04f8_22), 1272 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_04f9_22), 1273 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_04fa_22), 1274 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_04fb_22), 1275 }, /* CHK2 */ #endif { (cpuop_func*)CPUFUNC(op_0600_22), 1536 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0610_22), 1552 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0618_22), 1560 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0620_22), 1568 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0628_22), 1576 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0630_22), 1584 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0638_22), 1592 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0639_22), 1593 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0640_22), 1600 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0650_22), 1616 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0658_22), 1624 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0660_22), 1632 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0668_22), 1640 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0670_22), 1648 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0678_22), 1656 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0679_22), 1657 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0680_22), 1664 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0690_22), 1680 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0698_22), 1688 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_06a0_22), 1696 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_06a8_22), 1704 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_06b0_22), 1712 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_06b8_22), 1720 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_06b9_22), 1721 }, /* ADD */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_06c0_22), 1728 }, /* RTM */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_06c8_22), 1736 }, /* RTM */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_06d0_22), 1744 }, /* CALLM */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_06e8_22), 1768 }, /* CALLM */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_06f0_22), 1776 }, /* CALLM */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_06f8_22), 1784 }, /* CALLM */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_06f9_22), 1785 }, /* CALLM */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_06fa_22), 1786 }, /* CALLM */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_06fb_22), 1787 }, /* CALLM */ #endif { (cpuop_func*)CPUFUNC(op_0800_22), 2048 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0810_22), 2064 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0818_22), 2072 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0820_22), 2080 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0828_22), 2088 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0830_22), 2096 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0838_22), 2104 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0839_22), 2105 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_083a_22), 2106 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_083b_22), 2107 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_083c_22), 2108 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0840_22), 2112 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0850_22), 2128 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0858_22), 2136 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0860_22), 2144 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0868_22), 2152 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0870_22), 2160 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0878_22), 2168 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0879_22), 2169 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_087a_22), 2170 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_087b_22), 2171 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0880_22), 2176 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_0890_22), 2192 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_0898_22), 2200 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_08a0_22), 2208 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_08a8_22), 2216 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_08b0_22), 2224 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_08b8_22), 2232 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_08b9_22), 2233 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_08ba_22), 2234 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_08bb_22), 2235 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_08c0_22), 2240 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_08d0_22), 2256 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_08d8_22), 2264 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_08e0_22), 2272 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_08e8_22), 2280 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_08f0_22), 2288 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_08f8_22), 2296 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_08f9_22), 2297 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_08fa_22), 2298 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_08fb_22), 2299 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_0a00_22), 2560 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a10_22), 2576 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a18_22), 2584 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a20_22), 2592 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a28_22), 2600 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a30_22), 2608 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a38_22), 2616 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a39_22), 2617 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a3c_22), 2620 }, /* EORSR */ { (cpuop_func*)CPUFUNC(op_0a40_22), 2624 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a50_22), 2640 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a58_22), 2648 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a60_22), 2656 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a68_22), 2664 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a70_22), 2672 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a78_22), 2680 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a79_22), 2681 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a7c_22), 2684 }, /* EORSR */ { (cpuop_func*)CPUFUNC(op_0a80_22), 2688 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a90_22), 2704 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a98_22), 2712 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0aa0_22), 2720 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0aa8_22), 2728 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0ab0_22), 2736 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0ab8_22), 2744 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0ab9_22), 2745 }, /* EOR */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0ad0_22), 2768 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0ad8_22), 2776 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0ae0_22), 2784 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0ae8_22), 2792 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0af0_22), 2800 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0af8_22), 2808 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0af9_22), 2809 }, /* CAS */ #endif { (cpuop_func*)CPUFUNC(op_0c00_22), 3072 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c10_22), 3088 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c18_22), 3096 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c20_22), 3104 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c28_22), 3112 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c30_22), 3120 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c38_22), 3128 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c39_22), 3129 }, /* CMP */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0c3a_22), 3130 }, /* CMP */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0c3b_22), 3131 }, /* CMP */ #endif { (cpuop_func*)CPUFUNC(op_0c40_22), 3136 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c50_22), 3152 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c58_22), 3160 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c60_22), 3168 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c68_22), 3176 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c70_22), 3184 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c78_22), 3192 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c79_22), 3193 }, /* CMP */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0c7a_22), 3194 }, /* CMP */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0c7b_22), 3195 }, /* CMP */ #endif { (cpuop_func*)CPUFUNC(op_0c80_22), 3200 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c90_22), 3216 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c98_22), 3224 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0ca0_22), 3232 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0ca8_22), 3240 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0cb0_22), 3248 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0cb8_22), 3256 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0cb9_22), 3257 }, /* CMP */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0cba_22), 3258 }, /* CMP */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0cbb_22), 3259 }, /* CMP */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0cd0_22), 3280 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0cd8_22), 3288 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0ce0_22), 3296 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0ce8_22), 3304 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0cf0_22), 3312 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0cf8_22), 3320 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0cf9_22), 3321 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0cfc_22), 3324 }, /* CAS2 */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0e10_22), 3600 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0e18_22), 3608 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0e20_22), 3616 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0e28_22), 3624 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0e30_22), 3632 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0e38_22), 3640 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0e39_22), 3641 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0e50_22), 3664 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0e58_22), 3672 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0e60_22), 3680 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0e68_22), 3688 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0e70_22), 3696 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0e78_22), 3704 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0e79_22), 3705 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0e90_22), 3728 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0e98_22), 3736 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0ea0_22), 3744 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0ea8_22), 3752 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0eb0_22), 3760 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0eb8_22), 3768 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0eb9_22), 3769 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0ed0_22), 3792 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0ed8_22), 3800 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0ee0_22), 3808 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0ee8_22), 3816 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0ef0_22), 3824 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0ef8_22), 3832 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0ef9_22), 3833 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_0efc_22), 3836 }, /* CAS2 */ #endif { (cpuop_func*)CPUFUNC(op_1000_22), 4096 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1010_22), 4112 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1018_22), 4120 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1020_22), 4128 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1028_22), 4136 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1030_22), 4144 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1038_22), 4152 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1039_22), 4153 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_103a_22), 4154 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_103b_22), 4155 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_103c_22), 4156 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1080_22), 4224 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1090_22), 4240 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1098_22), 4248 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10a0_22), 4256 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10a8_22), 4264 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10b0_22), 4272 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10b8_22), 4280 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10b9_22), 4281 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10ba_22), 4282 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10bb_22), 4283 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10bc_22), 4284 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10c0_22), 4288 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10d0_22), 4304 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10d8_22), 4312 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10e0_22), 4320 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10e8_22), 4328 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10f0_22), 4336 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10f8_22), 4344 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10f9_22), 4345 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10fa_22), 4346 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10fb_22), 4347 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10fc_22), 4348 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1100_22), 4352 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1110_22), 4368 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1118_22), 4376 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1120_22), 4384 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1128_22), 4392 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1130_22), 4400 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1138_22), 4408 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1139_22), 4409 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_113a_22), 4410 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_113b_22), 4411 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_113c_22), 4412 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1140_22), 4416 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1150_22), 4432 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1158_22), 4440 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1160_22), 4448 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1168_22), 4456 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1170_22), 4464 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1178_22), 4472 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1179_22), 4473 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_117a_22), 4474 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_117b_22), 4475 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_117c_22), 4476 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1180_22), 4480 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1190_22), 4496 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1198_22), 4504 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11a0_22), 4512 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11a8_22), 4520 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11b0_22), 4528 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11b8_22), 4536 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11b9_22), 4537 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11ba_22), 4538 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11bb_22), 4539 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11bc_22), 4540 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11c0_22), 4544 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11d0_22), 4560 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11d8_22), 4568 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11e0_22), 4576 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11e8_22), 4584 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11f0_22), 4592 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11f8_22), 4600 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11f9_22), 4601 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11fa_22), 4602 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11fb_22), 4603 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11fc_22), 4604 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_13c0_22), 5056 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_13d0_22), 5072 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_13d8_22), 5080 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_13e0_22), 5088 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_13e8_22), 5096 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_13f0_22), 5104 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_13f8_22), 5112 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_13f9_22), 5113 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_13fa_22), 5114 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_13fb_22), 5115 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_13fc_22), 5116 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2000_22), 8192 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2008_22), 8200 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2010_22), 8208 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2018_22), 8216 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2020_22), 8224 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2028_22), 8232 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2030_22), 8240 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2038_22), 8248 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2039_22), 8249 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_203a_22), 8250 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_203b_22), 8251 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_203c_22), 8252 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2040_22), 8256 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_2048_22), 8264 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_2050_22), 8272 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_2058_22), 8280 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_2060_22), 8288 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_2068_22), 8296 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_2070_22), 8304 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_2078_22), 8312 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_2079_22), 8313 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_207a_22), 8314 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_207b_22), 8315 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_207c_22), 8316 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_2080_22), 8320 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2088_22), 8328 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2090_22), 8336 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2098_22), 8344 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20a0_22), 8352 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20a8_22), 8360 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20b0_22), 8368 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20b8_22), 8376 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20b9_22), 8377 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20ba_22), 8378 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20bb_22), 8379 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20bc_22), 8380 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20c0_22), 8384 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20c8_22), 8392 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20d0_22), 8400 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20d8_22), 8408 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20e0_22), 8416 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20e8_22), 8424 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20f0_22), 8432 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20f8_22), 8440 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20f9_22), 8441 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20fa_22), 8442 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20fb_22), 8443 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20fc_22), 8444 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2100_22), 8448 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2108_22), 8456 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2110_22), 8464 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2118_22), 8472 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2120_22), 8480 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2128_22), 8488 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2130_22), 8496 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2138_22), 8504 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2139_22), 8505 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_213a_22), 8506 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_213b_22), 8507 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_213c_22), 8508 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2140_22), 8512 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2148_22), 8520 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2150_22), 8528 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2158_22), 8536 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2160_22), 8544 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2168_22), 8552 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2170_22), 8560 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2178_22), 8568 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2179_22), 8569 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_217a_22), 8570 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_217b_22), 8571 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_217c_22), 8572 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2180_22), 8576 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2188_22), 8584 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2190_22), 8592 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2198_22), 8600 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21a0_22), 8608 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21a8_22), 8616 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21b0_22), 8624 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21b8_22), 8632 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21b9_22), 8633 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21ba_22), 8634 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21bb_22), 8635 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21bc_22), 8636 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21c0_22), 8640 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21c8_22), 8648 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21d0_22), 8656 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21d8_22), 8664 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21e0_22), 8672 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21e8_22), 8680 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21f0_22), 8688 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21f8_22), 8696 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21f9_22), 8697 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21fa_22), 8698 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21fb_22), 8699 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21fc_22), 8700 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_23c0_22), 9152 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_23c8_22), 9160 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_23d0_22), 9168 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_23d8_22), 9176 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_23e0_22), 9184 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_23e8_22), 9192 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_23f0_22), 9200 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_23f8_22), 9208 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_23f9_22), 9209 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_23fa_22), 9210 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_23fb_22), 9211 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_23fc_22), 9212 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3000_22), 12288 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3008_22), 12296 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3010_22), 12304 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3018_22), 12312 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3020_22), 12320 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3028_22), 12328 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3030_22), 12336 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3038_22), 12344 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3039_22), 12345 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_303a_22), 12346 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_303b_22), 12347 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_303c_22), 12348 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3040_22), 12352 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_3048_22), 12360 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_3050_22), 12368 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_3058_22), 12376 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_3060_22), 12384 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_3068_22), 12392 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_3070_22), 12400 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_3078_22), 12408 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_3079_22), 12409 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_307a_22), 12410 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_307b_22), 12411 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_307c_22), 12412 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_3080_22), 12416 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3088_22), 12424 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3090_22), 12432 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3098_22), 12440 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30a0_22), 12448 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30a8_22), 12456 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30b0_22), 12464 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30b8_22), 12472 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30b9_22), 12473 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30ba_22), 12474 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30bb_22), 12475 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30bc_22), 12476 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30c0_22), 12480 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30c8_22), 12488 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30d0_22), 12496 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30d8_22), 12504 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30e0_22), 12512 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30e8_22), 12520 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30f0_22), 12528 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30f8_22), 12536 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30f9_22), 12537 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30fa_22), 12538 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30fb_22), 12539 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30fc_22), 12540 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3100_22), 12544 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3108_22), 12552 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3110_22), 12560 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3118_22), 12568 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3120_22), 12576 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3128_22), 12584 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3130_22), 12592 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3138_22), 12600 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3139_22), 12601 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_313a_22), 12602 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_313b_22), 12603 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_313c_22), 12604 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3140_22), 12608 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3148_22), 12616 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3150_22), 12624 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3158_22), 12632 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3160_22), 12640 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3168_22), 12648 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3170_22), 12656 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3178_22), 12664 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3179_22), 12665 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_317a_22), 12666 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_317b_22), 12667 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_317c_22), 12668 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3180_22), 12672 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3188_22), 12680 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3190_22), 12688 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3198_22), 12696 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31a0_22), 12704 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31a8_22), 12712 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31b0_22), 12720 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31b8_22), 12728 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31b9_22), 12729 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31ba_22), 12730 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31bb_22), 12731 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31bc_22), 12732 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31c0_22), 12736 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31c8_22), 12744 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31d0_22), 12752 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31d8_22), 12760 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31e0_22), 12768 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31e8_22), 12776 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31f0_22), 12784 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31f8_22), 12792 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31f9_22), 12793 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31fa_22), 12794 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31fb_22), 12795 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31fc_22), 12796 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_33c0_22), 13248 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_33c8_22), 13256 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_33d0_22), 13264 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_33d8_22), 13272 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_33e0_22), 13280 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_33e8_22), 13288 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_33f0_22), 13296 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_33f8_22), 13304 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_33f9_22), 13305 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_33fa_22), 13306 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_33fb_22), 13307 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_33fc_22), 13308 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_4000_22), 16384 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4010_22), 16400 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4018_22), 16408 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4020_22), 16416 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4028_22), 16424 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4030_22), 16432 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4038_22), 16440 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4039_22), 16441 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4040_22), 16448 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4050_22), 16464 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4058_22), 16472 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4060_22), 16480 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4068_22), 16488 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4070_22), 16496 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4078_22), 16504 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4079_22), 16505 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4080_22), 16512 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4090_22), 16528 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4098_22), 16536 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_40a0_22), 16544 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_40a8_22), 16552 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_40b0_22), 16560 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_40b8_22), 16568 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_40b9_22), 16569 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_40c0_22), 16576 }, /* MVSR2 */ { (cpuop_func*)CPUFUNC(op_40d0_22), 16592 }, /* MVSR2 */ { (cpuop_func*)CPUFUNC(op_40d8_22), 16600 }, /* MVSR2 */ { (cpuop_func*)CPUFUNC(op_40e0_22), 16608 }, /* MVSR2 */ { (cpuop_func*)CPUFUNC(op_40e8_22), 16616 }, /* MVSR2 */ { (cpuop_func*)CPUFUNC(op_40f0_22), 16624 }, /* MVSR2 */ { (cpuop_func*)CPUFUNC(op_40f8_22), 16632 }, /* MVSR2 */ { (cpuop_func*)CPUFUNC(op_40f9_22), 16633 }, /* MVSR2 */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4100_22), 16640 }, /* CHK */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4110_22), 16656 }, /* CHK */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4118_22), 16664 }, /* CHK */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4120_22), 16672 }, /* CHK */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4128_22), 16680 }, /* CHK */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4130_22), 16688 }, /* CHK */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4138_22), 16696 }, /* CHK */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4139_22), 16697 }, /* CHK */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_413a_22), 16698 }, /* CHK */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_413b_22), 16699 }, /* CHK */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_413c_22), 16700 }, /* CHK */ #endif { (cpuop_func*)CPUFUNC(op_4180_22), 16768 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_4190_22), 16784 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_4198_22), 16792 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_41a0_22), 16800 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_41a8_22), 16808 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_41b0_22), 16816 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_41b8_22), 16824 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_41b9_22), 16825 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_41ba_22), 16826 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_41bb_22), 16827 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_41bc_22), 16828 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_41d0_22), 16848 }, /* LEA */ { (cpuop_func*)CPUFUNC(op_41e8_22), 16872 }, /* LEA */ { (cpuop_func*)CPUFUNC(op_41f0_22), 16880 }, /* LEA */ { (cpuop_func*)CPUFUNC(op_41f8_22), 16888 }, /* LEA */ { (cpuop_func*)CPUFUNC(op_41f9_22), 16889 }, /* LEA */ { (cpuop_func*)CPUFUNC(op_41fa_22), 16890 }, /* LEA */ { (cpuop_func*)CPUFUNC(op_41fb_22), 16891 }, /* LEA */ { (cpuop_func*)CPUFUNC(op_4200_22), 16896 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4210_22), 16912 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4218_22), 16920 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4220_22), 16928 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4228_22), 16936 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4230_22), 16944 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4238_22), 16952 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4239_22), 16953 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4240_22), 16960 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4250_22), 16976 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4258_22), 16984 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4260_22), 16992 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4268_22), 17000 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4270_22), 17008 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4278_22), 17016 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4279_22), 17017 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4280_22), 17024 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4290_22), 17040 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4298_22), 17048 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_42a0_22), 17056 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_42a8_22), 17064 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_42b0_22), 17072 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_42b8_22), 17080 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_42b9_22), 17081 }, /* CLR */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_42c0_22), 17088 }, /* MVSR2 */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_42d0_22), 17104 }, /* MVSR2 */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_42d8_22), 17112 }, /* MVSR2 */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_42e0_22), 17120 }, /* MVSR2 */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_42e8_22), 17128 }, /* MVSR2 */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_42f0_22), 17136 }, /* MVSR2 */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_42f8_22), 17144 }, /* MVSR2 */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_42f9_22), 17145 }, /* MVSR2 */ #endif { (cpuop_func*)CPUFUNC(op_4400_22), 17408 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4410_22), 17424 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4418_22), 17432 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4420_22), 17440 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4428_22), 17448 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4430_22), 17456 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4438_22), 17464 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4439_22), 17465 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4440_22), 17472 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4450_22), 17488 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4458_22), 17496 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4460_22), 17504 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4468_22), 17512 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4470_22), 17520 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4478_22), 17528 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4479_22), 17529 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4480_22), 17536 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4490_22), 17552 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4498_22), 17560 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_44a0_22), 17568 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_44a8_22), 17576 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_44b0_22), 17584 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_44b8_22), 17592 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_44b9_22), 17593 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_44c0_22), 17600 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_44d0_22), 17616 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_44d8_22), 17624 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_44e0_22), 17632 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_44e8_22), 17640 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_44f0_22), 17648 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_44f8_22), 17656 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_44f9_22), 17657 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_44fa_22), 17658 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_44fb_22), 17659 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_44fc_22), 17660 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_4600_22), 17920 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4610_22), 17936 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4618_22), 17944 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4620_22), 17952 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4628_22), 17960 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4630_22), 17968 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4638_22), 17976 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4639_22), 17977 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4640_22), 17984 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4650_22), 18000 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4658_22), 18008 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4660_22), 18016 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4668_22), 18024 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4670_22), 18032 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4678_22), 18040 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4679_22), 18041 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4680_22), 18048 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4690_22), 18064 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4698_22), 18072 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_46a0_22), 18080 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_46a8_22), 18088 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_46b0_22), 18096 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_46b8_22), 18104 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_46b9_22), 18105 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_46c0_22), 18112 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_46d0_22), 18128 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_46d8_22), 18136 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_46e0_22), 18144 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_46e8_22), 18152 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_46f0_22), 18160 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_46f8_22), 18168 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_46f9_22), 18169 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_46fa_22), 18170 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_46fb_22), 18171 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_46fc_22), 18172 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_4800_22), 18432 }, /* NBCD */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4808_22), 18440 }, /* LINK */ #endif { (cpuop_func*)CPUFUNC(op_4810_22), 18448 }, /* NBCD */ { (cpuop_func*)CPUFUNC(op_4818_22), 18456 }, /* NBCD */ { (cpuop_func*)CPUFUNC(op_4820_22), 18464 }, /* NBCD */ { (cpuop_func*)CPUFUNC(op_4828_22), 18472 }, /* NBCD */ { (cpuop_func*)CPUFUNC(op_4830_22), 18480 }, /* NBCD */ { (cpuop_func*)CPUFUNC(op_4838_22), 18488 }, /* NBCD */ { (cpuop_func*)CPUFUNC(op_4839_22), 18489 }, /* NBCD */ { (cpuop_func*)CPUFUNC(op_4840_22), 18496 }, /* SWAP */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4848_22), 18504 }, /* BKPT */ #endif { (cpuop_func*)CPUFUNC(op_4850_22), 18512 }, /* PEA */ { (cpuop_func*)CPUFUNC(op_4868_22), 18536 }, /* PEA */ { (cpuop_func*)CPUFUNC(op_4870_22), 18544 }, /* PEA */ { (cpuop_func*)CPUFUNC(op_4878_22), 18552 }, /* PEA */ { (cpuop_func*)CPUFUNC(op_4879_22), 18553 }, /* PEA */ { (cpuop_func*)CPUFUNC(op_487a_22), 18554 }, /* PEA */ { (cpuop_func*)CPUFUNC(op_487b_22), 18555 }, /* PEA */ { (cpuop_func*)CPUFUNC(op_4880_22), 18560 }, /* EXT */ { (cpuop_func*)CPUFUNC(op_4890_22), 18576 }, /* MVMLE */ { (cpuop_func*)CPUFUNC(op_48a0_22), 18592 }, /* MVMLE */ { (cpuop_func*)CPUFUNC(op_48a8_22), 18600 }, /* MVMLE */ { (cpuop_func*)CPUFUNC(op_48b0_22), 18608 }, /* MVMLE */ { (cpuop_func*)CPUFUNC(op_48b8_22), 18616 }, /* MVMLE */ { (cpuop_func*)CPUFUNC(op_48b9_22), 18617 }, /* MVMLE */ { (cpuop_func*)CPUFUNC(op_48c0_22), 18624 }, /* EXT */ { (cpuop_func*)CPUFUNC(op_48d0_22), 18640 }, /* MVMLE */ { (cpuop_func*)CPUFUNC(op_48e0_22), 18656 }, /* MVMLE */ { (cpuop_func*)CPUFUNC(op_48e8_22), 18664 }, /* MVMLE */ { (cpuop_func*)CPUFUNC(op_48f0_22), 18672 }, /* MVMLE */ { (cpuop_func*)CPUFUNC(op_48f8_22), 18680 }, /* MVMLE */ { (cpuop_func*)CPUFUNC(op_48f9_22), 18681 }, /* MVMLE */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_49c0_22), 18880 }, /* EXT */ #endif { (cpuop_func*)CPUFUNC(op_4a00_22), 18944 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a10_22), 18960 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a18_22), 18968 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a20_22), 18976 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a28_22), 18984 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a30_22), 18992 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a38_22), 19000 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a39_22), 19001 }, /* TST */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4a3a_22), 19002 }, /* TST */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4a3b_22), 19003 }, /* TST */ #endif { (cpuop_func*)CPUFUNC(op_4a3c_22), 19004 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a40_22), 19008 }, /* TST */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4a48_22), 19016 }, /* TST */ #endif { (cpuop_func*)CPUFUNC(op_4a50_22), 19024 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a58_22), 19032 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a60_22), 19040 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a68_22), 19048 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a70_22), 19056 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a78_22), 19064 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a79_22), 19065 }, /* TST */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4a7a_22), 19066 }, /* TST */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4a7b_22), 19067 }, /* TST */ #endif { (cpuop_func*)CPUFUNC(op_4a7c_22), 19068 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a80_22), 19072 }, /* TST */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4a88_22), 19080 }, /* TST */ #endif { (cpuop_func*)CPUFUNC(op_4a90_22), 19088 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a98_22), 19096 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4aa0_22), 19104 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4aa8_22), 19112 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4ab0_22), 19120 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4ab8_22), 19128 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4ab9_22), 19129 }, /* TST */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4aba_22), 19130 }, /* TST */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4abb_22), 19131 }, /* TST */ #endif { (cpuop_func*)CPUFUNC(op_4abc_22), 19132 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4ac0_22), 19136 }, /* TAS */ { (cpuop_func*)CPUFUNC(op_4ad0_22), 19152 }, /* TAS */ { (cpuop_func*)CPUFUNC(op_4ad8_22), 19160 }, /* TAS */ { (cpuop_func*)CPUFUNC(op_4ae0_22), 19168 }, /* TAS */ { (cpuop_func*)CPUFUNC(op_4ae8_22), 19176 }, /* TAS */ { (cpuop_func*)CPUFUNC(op_4af0_22), 19184 }, /* TAS */ { (cpuop_func*)CPUFUNC(op_4af8_22), 19192 }, /* TAS */ { (cpuop_func*)CPUFUNC(op_4af9_22), 19193 }, /* TAS */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4c00_22), 19456 }, /* MULL */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4c10_22), 19472 }, /* MULL */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4c18_22), 19480 }, /* MULL */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4c20_22), 19488 }, /* MULL */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4c28_22), 19496 }, /* MULL */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4c30_22), 19504 }, /* MULL */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4c38_22), 19512 }, /* MULL */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4c39_22), 19513 }, /* MULL */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4c3a_22), 19514 }, /* MULL */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4c3b_22), 19515 }, /* MULL */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4c3c_22), 19516 }, /* MULL */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4c40_22), 19520 }, /* DIVL */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4c50_22), 19536 }, /* DIVL */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4c58_22), 19544 }, /* DIVL */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4c60_22), 19552 }, /* DIVL */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4c68_22), 19560 }, /* DIVL */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4c70_22), 19568 }, /* DIVL */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4c78_22), 19576 }, /* DIVL */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4c79_22), 19577 }, /* DIVL */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4c7a_22), 19578 }, /* DIVL */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4c7b_22), 19579 }, /* DIVL */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4c7c_22), 19580 }, /* DIVL */ #endif { (cpuop_func*)CPUFUNC(op_4c90_22), 19600 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4c98_22), 19608 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4ca8_22), 19624 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4cb0_22), 19632 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4cb8_22), 19640 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4cb9_22), 19641 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4cba_22), 19642 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4cbb_22), 19643 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4cd0_22), 19664 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4cd8_22), 19672 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4ce8_22), 19688 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4cf0_22), 19696 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4cf8_22), 19704 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4cf9_22), 19705 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4cfa_22), 19706 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4cfb_22), 19707 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4e40_22), 20032 }, /* TRAP */ { (cpuop_func*)CPUFUNC(op_4e50_22), 20048 }, /* LINK */ { (cpuop_func*)CPUFUNC(op_4e58_22), 20056 }, /* UNLK */ { (cpuop_func*)CPUFUNC(op_4e60_22), 20064 }, /* MVR2USP */ { (cpuop_func*)CPUFUNC(op_4e68_22), 20072 }, /* MVUSP2R */ { (cpuop_func*)CPUFUNC(op_4e70_22), 20080 }, /* RESET */ { (cpuop_func*)CPUFUNC(op_4e71_22), 20081 }, /* NOP */ { (cpuop_func*)CPUFUNC(op_4e72_22), 20082 }, /* STOP */ { (cpuop_func*)CPUFUNC(op_4e73_22), 20083 }, /* RTE */ { (cpuop_func*)CPUFUNC(op_4e74_22), 20084 }, /* RTD */ { (cpuop_func*)CPUFUNC(op_4e75_22), 20085 }, /* RTS */ { (cpuop_func*)CPUFUNC(op_4e76_22), 20086 }, /* TRAPV */ { (cpuop_func*)CPUFUNC(op_4e77_22), 20087 }, /* RTR */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4e7a_22), 20090 }, /* MOVEC2 */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_4e7b_22), 20091 }, /* MOVE2C */ #endif { (cpuop_func*)CPUFUNC(op_4e90_22), 20112 }, /* JSR */ { (cpuop_func*)CPUFUNC(op_4ea8_22), 20136 }, /* JSR */ { (cpuop_func*)CPUFUNC(op_4eb0_22), 20144 }, /* JSR */ { (cpuop_func*)CPUFUNC(op_4eb8_22), 20152 }, /* JSR */ { (cpuop_func*)CPUFUNC(op_4eb9_22), 20153 }, /* JSR */ { (cpuop_func*)CPUFUNC(op_4eba_22), 20154 }, /* JSR */ { (cpuop_func*)CPUFUNC(op_4ebb_22), 20155 }, /* JSR */ { (cpuop_func*)CPUFUNC(op_4ed0_22), 20176 }, /* JMP */ { (cpuop_func*)CPUFUNC(op_4ee8_22), 20200 }, /* JMP */ { (cpuop_func*)CPUFUNC(op_4ef0_22), 20208 }, /* JMP */ { (cpuop_func*)CPUFUNC(op_4ef8_22), 20216 }, /* JMP */ { (cpuop_func*)CPUFUNC(op_4ef9_22), 20217 }, /* JMP */ { (cpuop_func*)CPUFUNC(op_4efa_22), 20218 }, /* JMP */ { (cpuop_func*)CPUFUNC(op_4efb_22), 20219 }, /* JMP */ { (cpuop_func*)CPUFUNC(op_5000_22), 20480 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5010_22), 20496 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5018_22), 20504 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5020_22), 20512 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5028_22), 20520 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5030_22), 20528 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5038_22), 20536 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5039_22), 20537 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5040_22), 20544 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5048_22), 20552 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_5050_22), 20560 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5058_22), 20568 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5060_22), 20576 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5068_22), 20584 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5070_22), 20592 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5078_22), 20600 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5079_22), 20601 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5080_22), 20608 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5088_22), 20616 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_5090_22), 20624 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5098_22), 20632 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_50a0_22), 20640 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_50a8_22), 20648 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_50b0_22), 20656 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_50b8_22), 20664 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_50b9_22), 20665 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_50c0_22), 20672 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_50c8_22), 20680 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_50d0_22), 20688 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_50d8_22), 20696 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_50e0_22), 20704 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_50e8_22), 20712 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_50f0_22), 20720 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_50f8_22), 20728 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_50f9_22), 20729 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_50fa_22), 20730 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_50fb_22), 20731 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_50fc_22), 20732 }, /* TRAPcc */ #endif { (cpuop_func*)CPUFUNC(op_5100_22), 20736 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5110_22), 20752 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5118_22), 20760 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5120_22), 20768 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5128_22), 20776 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5130_22), 20784 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5138_22), 20792 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5139_22), 20793 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5140_22), 20800 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5148_22), 20808 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_5150_22), 20816 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5158_22), 20824 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5160_22), 20832 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5168_22), 20840 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5170_22), 20848 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5178_22), 20856 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5179_22), 20857 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5180_22), 20864 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5188_22), 20872 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_5190_22), 20880 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5198_22), 20888 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_51a0_22), 20896 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_51a8_22), 20904 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_51b0_22), 20912 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_51b8_22), 20920 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_51b9_22), 20921 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_51c0_22), 20928 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_51c8_22), 20936 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_51d0_22), 20944 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_51d8_22), 20952 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_51e0_22), 20960 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_51e8_22), 20968 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_51f0_22), 20976 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_51f8_22), 20984 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_51f9_22), 20985 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_51fa_22), 20986 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_51fb_22), 20987 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_51fc_22), 20988 }, /* TRAPcc */ #endif { (cpuop_func*)CPUFUNC(op_52c0_22), 21184 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_52c8_22), 21192 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_52d0_22), 21200 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_52d8_22), 21208 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_52e0_22), 21216 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_52e8_22), 21224 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_52f0_22), 21232 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_52f8_22), 21240 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_52f9_22), 21241 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_52fa_22), 21242 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_52fb_22), 21243 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_52fc_22), 21244 }, /* TRAPcc */ #endif { (cpuop_func*)CPUFUNC(op_53c0_22), 21440 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_53c8_22), 21448 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_53d0_22), 21456 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_53d8_22), 21464 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_53e0_22), 21472 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_53e8_22), 21480 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_53f0_22), 21488 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_53f8_22), 21496 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_53f9_22), 21497 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_53fa_22), 21498 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_53fb_22), 21499 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_53fc_22), 21500 }, /* TRAPcc */ #endif { (cpuop_func*)CPUFUNC(op_54c0_22), 21696 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_54c8_22), 21704 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_54d0_22), 21712 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_54d8_22), 21720 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_54e0_22), 21728 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_54e8_22), 21736 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_54f0_22), 21744 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_54f8_22), 21752 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_54f9_22), 21753 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_54fa_22), 21754 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_54fb_22), 21755 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_54fc_22), 21756 }, /* TRAPcc */ #endif { (cpuop_func*)CPUFUNC(op_55c0_22), 21952 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_55c8_22), 21960 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_55d0_22), 21968 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_55d8_22), 21976 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_55e0_22), 21984 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_55e8_22), 21992 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_55f0_22), 22000 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_55f8_22), 22008 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_55f9_22), 22009 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_55fa_22), 22010 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_55fb_22), 22011 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_55fc_22), 22012 }, /* TRAPcc */ #endif { (cpuop_func*)CPUFUNC(op_56c0_22), 22208 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_56c8_22), 22216 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_56d0_22), 22224 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_56d8_22), 22232 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_56e0_22), 22240 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_56e8_22), 22248 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_56f0_22), 22256 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_56f8_22), 22264 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_56f9_22), 22265 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_56fa_22), 22266 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_56fb_22), 22267 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_56fc_22), 22268 }, /* TRAPcc */ #endif { (cpuop_func*)CPUFUNC(op_57c0_22), 22464 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_57c8_22), 22472 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_57d0_22), 22480 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_57d8_22), 22488 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_57e0_22), 22496 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_57e8_22), 22504 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_57f0_22), 22512 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_57f8_22), 22520 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_57f9_22), 22521 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_57fa_22), 22522 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_57fb_22), 22523 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_57fc_22), 22524 }, /* TRAPcc */ #endif { (cpuop_func*)CPUFUNC(op_58c0_22), 22720 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_58c8_22), 22728 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_58d0_22), 22736 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_58d8_22), 22744 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_58e0_22), 22752 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_58e8_22), 22760 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_58f0_22), 22768 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_58f8_22), 22776 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_58f9_22), 22777 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_58fa_22), 22778 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_58fb_22), 22779 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_58fc_22), 22780 }, /* TRAPcc */ #endif { (cpuop_func*)CPUFUNC(op_59c0_22), 22976 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_59c8_22), 22984 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_59d0_22), 22992 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_59d8_22), 23000 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_59e0_22), 23008 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_59e8_22), 23016 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_59f0_22), 23024 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_59f8_22), 23032 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_59f9_22), 23033 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_59fa_22), 23034 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_59fb_22), 23035 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_59fc_22), 23036 }, /* TRAPcc */ #endif { (cpuop_func*)CPUFUNC(op_5ac0_22), 23232 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ac8_22), 23240 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_5ad0_22), 23248 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ad8_22), 23256 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ae0_22), 23264 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ae8_22), 23272 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5af0_22), 23280 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5af8_22), 23288 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5af9_22), 23289 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_5afa_22), 23290 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_5afb_22), 23291 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_5afc_22), 23292 }, /* TRAPcc */ #endif { (cpuop_func*)CPUFUNC(op_5bc0_22), 23488 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5bc8_22), 23496 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_5bd0_22), 23504 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5bd8_22), 23512 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5be0_22), 23520 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5be8_22), 23528 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5bf0_22), 23536 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5bf8_22), 23544 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5bf9_22), 23545 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_5bfa_22), 23546 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_5bfb_22), 23547 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_5bfc_22), 23548 }, /* TRAPcc */ #endif { (cpuop_func*)CPUFUNC(op_5cc0_22), 23744 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5cc8_22), 23752 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_5cd0_22), 23760 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5cd8_22), 23768 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ce0_22), 23776 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ce8_22), 23784 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5cf0_22), 23792 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5cf8_22), 23800 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5cf9_22), 23801 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_5cfa_22), 23802 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_5cfb_22), 23803 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_5cfc_22), 23804 }, /* TRAPcc */ #endif { (cpuop_func*)CPUFUNC(op_5dc0_22), 24000 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5dc8_22), 24008 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_5dd0_22), 24016 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5dd8_22), 24024 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5de0_22), 24032 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5de8_22), 24040 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5df0_22), 24048 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5df8_22), 24056 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5df9_22), 24057 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_5dfa_22), 24058 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_5dfb_22), 24059 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_5dfc_22), 24060 }, /* TRAPcc */ #endif { (cpuop_func*)CPUFUNC(op_5ec0_22), 24256 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ec8_22), 24264 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_5ed0_22), 24272 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ed8_22), 24280 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ee0_22), 24288 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ee8_22), 24296 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ef0_22), 24304 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ef8_22), 24312 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ef9_22), 24313 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_5efa_22), 24314 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_5efb_22), 24315 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_5efc_22), 24316 }, /* TRAPcc */ #endif { (cpuop_func*)CPUFUNC(op_5fc0_22), 24512 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5fc8_22), 24520 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_5fd0_22), 24528 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5fd8_22), 24536 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5fe0_22), 24544 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5fe8_22), 24552 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ff0_22), 24560 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ff8_22), 24568 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ff9_22), 24569 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_5ffa_22), 24570 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_5ffb_22), 24571 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_5ffc_22), 24572 }, /* TRAPcc */ #endif { (cpuop_func*)CPUFUNC(op_6000_22), 24576 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6001_22), 24577 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_60ff_22), 24831 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6100_22), 24832 }, /* BSR */ { (cpuop_func*)CPUFUNC(op_6101_22), 24833 }, /* BSR */ { (cpuop_func*)CPUFUNC(op_61ff_22), 25087 }, /* BSR */ { (cpuop_func*)CPUFUNC(op_6200_22), 25088 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6201_22), 25089 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_62ff_22), 25343 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6300_22), 25344 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6301_22), 25345 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_63ff_22), 25599 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6400_22), 25600 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6401_22), 25601 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_64ff_22), 25855 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6500_22), 25856 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6501_22), 25857 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_65ff_22), 26111 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6600_22), 26112 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6601_22), 26113 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_66ff_22), 26367 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6700_22), 26368 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6701_22), 26369 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_67ff_22), 26623 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6800_22), 26624 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6801_22), 26625 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_68ff_22), 26879 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6900_22), 26880 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6901_22), 26881 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_69ff_22), 27135 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6a00_22), 27136 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6a01_22), 27137 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6aff_22), 27391 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6b00_22), 27392 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6b01_22), 27393 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6bff_22), 27647 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6c00_22), 27648 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6c01_22), 27649 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6cff_22), 27903 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6d00_22), 27904 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6d01_22), 27905 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6dff_22), 28159 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6e00_22), 28160 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6e01_22), 28161 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6eff_22), 28415 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6f00_22), 28416 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6f01_22), 28417 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6fff_22), 28671 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_7000_22), 28672 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_8000_22), 32768 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8010_22), 32784 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8018_22), 32792 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8020_22), 32800 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8028_22), 32808 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8030_22), 32816 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8038_22), 32824 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8039_22), 32825 }, /* OR */ { (cpuop_func*)CPUFUNC(op_803a_22), 32826 }, /* OR */ { (cpuop_func*)CPUFUNC(op_803b_22), 32827 }, /* OR */ { (cpuop_func*)CPUFUNC(op_803c_22), 32828 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8040_22), 32832 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8050_22), 32848 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8058_22), 32856 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8060_22), 32864 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8068_22), 32872 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8070_22), 32880 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8078_22), 32888 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8079_22), 32889 }, /* OR */ { (cpuop_func*)CPUFUNC(op_807a_22), 32890 }, /* OR */ { (cpuop_func*)CPUFUNC(op_807b_22), 32891 }, /* OR */ { (cpuop_func*)CPUFUNC(op_807c_22), 32892 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8080_22), 32896 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8090_22), 32912 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8098_22), 32920 }, /* OR */ { (cpuop_func*)CPUFUNC(op_80a0_22), 32928 }, /* OR */ { (cpuop_func*)CPUFUNC(op_80a8_22), 32936 }, /* OR */ { (cpuop_func*)CPUFUNC(op_80b0_22), 32944 }, /* OR */ { (cpuop_func*)CPUFUNC(op_80b8_22), 32952 }, /* OR */ { (cpuop_func*)CPUFUNC(op_80b9_22), 32953 }, /* OR */ { (cpuop_func*)CPUFUNC(op_80ba_22), 32954 }, /* OR */ { (cpuop_func*)CPUFUNC(op_80bb_22), 32955 }, /* OR */ { (cpuop_func*)CPUFUNC(op_80bc_22), 32956 }, /* OR */ { (cpuop_func*)CPUFUNC(op_80c0_22), 32960 }, /* DIVU */ { (cpuop_func*)CPUFUNC(op_80d0_22), 32976 }, /* DIVU */ { (cpuop_func*)CPUFUNC(op_80d8_22), 32984 }, /* DIVU */ { (cpuop_func*)CPUFUNC(op_80e0_22), 32992 }, /* DIVU */ { (cpuop_func*)CPUFUNC(op_80e8_22), 33000 }, /* DIVU */ { (cpuop_func*)CPUFUNC(op_80f0_22), 33008 }, /* DIVU */ { (cpuop_func*)CPUFUNC(op_80f8_22), 33016 }, /* DIVU */ { (cpuop_func*)CPUFUNC(op_80f9_22), 33017 }, /* DIVU */ { (cpuop_func*)CPUFUNC(op_80fa_22), 33018 }, /* DIVU */ { (cpuop_func*)CPUFUNC(op_80fb_22), 33019 }, /* DIVU */ { (cpuop_func*)CPUFUNC(op_80fc_22), 33020 }, /* DIVU */ { (cpuop_func*)CPUFUNC(op_8100_22), 33024 }, /* SBCD */ { (cpuop_func*)CPUFUNC(op_8108_22), 33032 }, /* SBCD */ { (cpuop_func*)CPUFUNC(op_8110_22), 33040 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8118_22), 33048 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8120_22), 33056 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8128_22), 33064 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8130_22), 33072 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8138_22), 33080 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8139_22), 33081 }, /* OR */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_8140_22), 33088 }, /* PACK */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_8148_22), 33096 }, /* PACK */ #endif { (cpuop_func*)CPUFUNC(op_8150_22), 33104 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8158_22), 33112 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8160_22), 33120 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8168_22), 33128 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8170_22), 33136 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8178_22), 33144 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8179_22), 33145 }, /* OR */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_8180_22), 33152 }, /* UNPK */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_8188_22), 33160 }, /* UNPK */ #endif { (cpuop_func*)CPUFUNC(op_8190_22), 33168 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8198_22), 33176 }, /* OR */ { (cpuop_func*)CPUFUNC(op_81a0_22), 33184 }, /* OR */ { (cpuop_func*)CPUFUNC(op_81a8_22), 33192 }, /* OR */ { (cpuop_func*)CPUFUNC(op_81b0_22), 33200 }, /* OR */ { (cpuop_func*)CPUFUNC(op_81b8_22), 33208 }, /* OR */ { (cpuop_func*)CPUFUNC(op_81b9_22), 33209 }, /* OR */ { (cpuop_func*)CPUFUNC(op_81c0_22), 33216 }, /* DIVS */ { (cpuop_func*)CPUFUNC(op_81d0_22), 33232 }, /* DIVS */ { (cpuop_func*)CPUFUNC(op_81d8_22), 33240 }, /* DIVS */ { (cpuop_func*)CPUFUNC(op_81e0_22), 33248 }, /* DIVS */ { (cpuop_func*)CPUFUNC(op_81e8_22), 33256 }, /* DIVS */ { (cpuop_func*)CPUFUNC(op_81f0_22), 33264 }, /* DIVS */ { (cpuop_func*)CPUFUNC(op_81f8_22), 33272 }, /* DIVS */ { (cpuop_func*)CPUFUNC(op_81f9_22), 33273 }, /* DIVS */ { (cpuop_func*)CPUFUNC(op_81fa_22), 33274 }, /* DIVS */ { (cpuop_func*)CPUFUNC(op_81fb_22), 33275 }, /* DIVS */ { (cpuop_func*)CPUFUNC(op_81fc_22), 33276 }, /* DIVS */ { (cpuop_func*)CPUFUNC(op_9000_22), 36864 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9010_22), 36880 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9018_22), 36888 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9020_22), 36896 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9028_22), 36904 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9030_22), 36912 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9038_22), 36920 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9039_22), 36921 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_903a_22), 36922 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_903b_22), 36923 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_903c_22), 36924 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9040_22), 36928 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9048_22), 36936 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9050_22), 36944 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9058_22), 36952 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9060_22), 36960 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9068_22), 36968 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9070_22), 36976 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9078_22), 36984 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9079_22), 36985 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_907a_22), 36986 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_907b_22), 36987 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_907c_22), 36988 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9080_22), 36992 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9088_22), 37000 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9090_22), 37008 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9098_22), 37016 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_90a0_22), 37024 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_90a8_22), 37032 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_90b0_22), 37040 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_90b8_22), 37048 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_90b9_22), 37049 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_90ba_22), 37050 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_90bb_22), 37051 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_90bc_22), 37052 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_90c0_22), 37056 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_90c8_22), 37064 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_90d0_22), 37072 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_90d8_22), 37080 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_90e0_22), 37088 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_90e8_22), 37096 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_90f0_22), 37104 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_90f8_22), 37112 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_90f9_22), 37113 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_90fa_22), 37114 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_90fb_22), 37115 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_90fc_22), 37116 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_9100_22), 37120 }, /* SUBX */ { (cpuop_func*)CPUFUNC(op_9108_22), 37128 }, /* SUBX */ { (cpuop_func*)CPUFUNC(op_9110_22), 37136 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9118_22), 37144 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9120_22), 37152 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9128_22), 37160 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9130_22), 37168 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9138_22), 37176 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9139_22), 37177 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9140_22), 37184 }, /* SUBX */ { (cpuop_func*)CPUFUNC(op_9148_22), 37192 }, /* SUBX */ { (cpuop_func*)CPUFUNC(op_9150_22), 37200 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9158_22), 37208 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9160_22), 37216 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9168_22), 37224 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9170_22), 37232 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9178_22), 37240 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9179_22), 37241 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9180_22), 37248 }, /* SUBX */ { (cpuop_func*)CPUFUNC(op_9188_22), 37256 }, /* SUBX */ { (cpuop_func*)CPUFUNC(op_9190_22), 37264 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9198_22), 37272 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_91a0_22), 37280 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_91a8_22), 37288 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_91b0_22), 37296 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_91b8_22), 37304 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_91b9_22), 37305 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_91c0_22), 37312 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_91c8_22), 37320 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_91d0_22), 37328 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_91d8_22), 37336 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_91e0_22), 37344 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_91e8_22), 37352 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_91f0_22), 37360 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_91f8_22), 37368 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_91f9_22), 37369 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_91fa_22), 37370 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_91fb_22), 37371 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_91fc_22), 37372 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_b000_22), 45056 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b010_22), 45072 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b018_22), 45080 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b020_22), 45088 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b028_22), 45096 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b030_22), 45104 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b038_22), 45112 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b039_22), 45113 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b03a_22), 45114 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b03b_22), 45115 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b03c_22), 45116 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b040_22), 45120 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b048_22), 45128 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b050_22), 45136 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b058_22), 45144 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b060_22), 45152 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b068_22), 45160 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b070_22), 45168 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b078_22), 45176 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b079_22), 45177 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b07a_22), 45178 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b07b_22), 45179 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b07c_22), 45180 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b080_22), 45184 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b088_22), 45192 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b090_22), 45200 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b098_22), 45208 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b0a0_22), 45216 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b0a8_22), 45224 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b0b0_22), 45232 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b0b8_22), 45240 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b0b9_22), 45241 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b0ba_22), 45242 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b0bb_22), 45243 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b0bc_22), 45244 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b0c0_22), 45248 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b0c8_22), 45256 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b0d0_22), 45264 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b0d8_22), 45272 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b0e0_22), 45280 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b0e8_22), 45288 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b0f0_22), 45296 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b0f8_22), 45304 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b0f9_22), 45305 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b0fa_22), 45306 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b0fb_22), 45307 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b0fc_22), 45308 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b100_22), 45312 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b108_22), 45320 }, /* CMPM */ { (cpuop_func*)CPUFUNC(op_b110_22), 45328 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b118_22), 45336 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b120_22), 45344 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b128_22), 45352 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b130_22), 45360 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b138_22), 45368 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b139_22), 45369 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b140_22), 45376 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b148_22), 45384 }, /* CMPM */ { (cpuop_func*)CPUFUNC(op_b150_22), 45392 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b158_22), 45400 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b160_22), 45408 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b168_22), 45416 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b170_22), 45424 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b178_22), 45432 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b179_22), 45433 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b180_22), 45440 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b188_22), 45448 }, /* CMPM */ { (cpuop_func*)CPUFUNC(op_b190_22), 45456 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b198_22), 45464 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b1a0_22), 45472 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b1a8_22), 45480 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b1b0_22), 45488 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b1b8_22), 45496 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b1b9_22), 45497 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b1c0_22), 45504 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b1c8_22), 45512 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b1d0_22), 45520 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b1d8_22), 45528 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b1e0_22), 45536 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b1e8_22), 45544 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b1f0_22), 45552 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b1f8_22), 45560 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b1f9_22), 45561 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b1fa_22), 45562 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b1fb_22), 45563 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b1fc_22), 45564 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_c000_22), 49152 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c010_22), 49168 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c018_22), 49176 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c020_22), 49184 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c028_22), 49192 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c030_22), 49200 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c038_22), 49208 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c039_22), 49209 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c03a_22), 49210 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c03b_22), 49211 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c03c_22), 49212 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c040_22), 49216 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c050_22), 49232 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c058_22), 49240 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c060_22), 49248 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c068_22), 49256 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c070_22), 49264 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c078_22), 49272 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c079_22), 49273 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c07a_22), 49274 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c07b_22), 49275 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c07c_22), 49276 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c080_22), 49280 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c090_22), 49296 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c098_22), 49304 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c0a0_22), 49312 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c0a8_22), 49320 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c0b0_22), 49328 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c0b8_22), 49336 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c0b9_22), 49337 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c0ba_22), 49338 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c0bb_22), 49339 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c0bc_22), 49340 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c0c0_22), 49344 }, /* MULU */ { (cpuop_func*)CPUFUNC(op_c0d0_22), 49360 }, /* MULU */ { (cpuop_func*)CPUFUNC(op_c0d8_22), 49368 }, /* MULU */ { (cpuop_func*)CPUFUNC(op_c0e0_22), 49376 }, /* MULU */ { (cpuop_func*)CPUFUNC(op_c0e8_22), 49384 }, /* MULU */ { (cpuop_func*)CPUFUNC(op_c0f0_22), 49392 }, /* MULU */ { (cpuop_func*)CPUFUNC(op_c0f8_22), 49400 }, /* MULU */ { (cpuop_func*)CPUFUNC(op_c0f9_22), 49401 }, /* MULU */ { (cpuop_func*)CPUFUNC(op_c0fa_22), 49402 }, /* MULU */ { (cpuop_func*)CPUFUNC(op_c0fb_22), 49403 }, /* MULU */ { (cpuop_func*)CPUFUNC(op_c0fc_22), 49404 }, /* MULU */ { (cpuop_func*)CPUFUNC(op_c100_22), 49408 }, /* ABCD */ { (cpuop_func*)CPUFUNC(op_c108_22), 49416 }, /* ABCD */ { (cpuop_func*)CPUFUNC(op_c110_22), 49424 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c118_22), 49432 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c120_22), 49440 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c128_22), 49448 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c130_22), 49456 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c138_22), 49464 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c139_22), 49465 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c140_22), 49472 }, /* EXG */ { (cpuop_func*)CPUFUNC(op_c148_22), 49480 }, /* EXG */ { (cpuop_func*)CPUFUNC(op_c150_22), 49488 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c158_22), 49496 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c160_22), 49504 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c168_22), 49512 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c170_22), 49520 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c178_22), 49528 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c179_22), 49529 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c188_22), 49544 }, /* EXG */ { (cpuop_func*)CPUFUNC(op_c190_22), 49552 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c198_22), 49560 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c1a0_22), 49568 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c1a8_22), 49576 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c1b0_22), 49584 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c1b8_22), 49592 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c1b9_22), 49593 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c1c0_22), 49600 }, /* MULS */ { (cpuop_func*)CPUFUNC(op_c1d0_22), 49616 }, /* MULS */ { (cpuop_func*)CPUFUNC(op_c1d8_22), 49624 }, /* MULS */ { (cpuop_func*)CPUFUNC(op_c1e0_22), 49632 }, /* MULS */ { (cpuop_func*)CPUFUNC(op_c1e8_22), 49640 }, /* MULS */ { (cpuop_func*)CPUFUNC(op_c1f0_22), 49648 }, /* MULS */ { (cpuop_func*)CPUFUNC(op_c1f8_22), 49656 }, /* MULS */ { (cpuop_func*)CPUFUNC(op_c1f9_22), 49657 }, /* MULS */ { (cpuop_func*)CPUFUNC(op_c1fa_22), 49658 }, /* MULS */ { (cpuop_func*)CPUFUNC(op_c1fb_22), 49659 }, /* MULS */ { (cpuop_func*)CPUFUNC(op_c1fc_22), 49660 }, /* MULS */ { (cpuop_func*)CPUFUNC(op_d000_22), 53248 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d010_22), 53264 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d018_22), 53272 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d020_22), 53280 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d028_22), 53288 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d030_22), 53296 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d038_22), 53304 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d039_22), 53305 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d03a_22), 53306 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d03b_22), 53307 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d03c_22), 53308 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d040_22), 53312 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d048_22), 53320 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d050_22), 53328 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d058_22), 53336 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d060_22), 53344 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d068_22), 53352 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d070_22), 53360 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d078_22), 53368 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d079_22), 53369 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d07a_22), 53370 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d07b_22), 53371 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d07c_22), 53372 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d080_22), 53376 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d088_22), 53384 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d090_22), 53392 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d098_22), 53400 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d0a0_22), 53408 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d0a8_22), 53416 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d0b0_22), 53424 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d0b8_22), 53432 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d0b9_22), 53433 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d0ba_22), 53434 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d0bb_22), 53435 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d0bc_22), 53436 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d0c0_22), 53440 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d0c8_22), 53448 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d0d0_22), 53456 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d0d8_22), 53464 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d0e0_22), 53472 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d0e8_22), 53480 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d0f0_22), 53488 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d0f8_22), 53496 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d0f9_22), 53497 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d0fa_22), 53498 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d0fb_22), 53499 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d0fc_22), 53500 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d100_22), 53504 }, /* ADDX */ { (cpuop_func*)CPUFUNC(op_d108_22), 53512 }, /* ADDX */ { (cpuop_func*)CPUFUNC(op_d110_22), 53520 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d118_22), 53528 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d120_22), 53536 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d128_22), 53544 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d130_22), 53552 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d138_22), 53560 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d139_22), 53561 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d140_22), 53568 }, /* ADDX */ { (cpuop_func*)CPUFUNC(op_d148_22), 53576 }, /* ADDX */ { (cpuop_func*)CPUFUNC(op_d150_22), 53584 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d158_22), 53592 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d160_22), 53600 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d168_22), 53608 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d170_22), 53616 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d178_22), 53624 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d179_22), 53625 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d180_22), 53632 }, /* ADDX */ { (cpuop_func*)CPUFUNC(op_d188_22), 53640 }, /* ADDX */ { (cpuop_func*)CPUFUNC(op_d190_22), 53648 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d198_22), 53656 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d1a0_22), 53664 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d1a8_22), 53672 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d1b0_22), 53680 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d1b8_22), 53688 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d1b9_22), 53689 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d1c0_22), 53696 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d1c8_22), 53704 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d1d0_22), 53712 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d1d8_22), 53720 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d1e0_22), 53728 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d1e8_22), 53736 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d1f0_22), 53744 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d1f8_22), 53752 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d1f9_22), 53753 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d1fa_22), 53754 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d1fb_22), 53755 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d1fc_22), 53756 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_e000_22), 57344 }, /* ASR */ { (cpuop_func*)CPUFUNC(op_e008_22), 57352 }, /* LSR */ { (cpuop_func*)CPUFUNC(op_e010_22), 57360 }, /* ROXR */ { (cpuop_func*)CPUFUNC(op_e018_22), 57368 }, /* ROR */ { (cpuop_func*)CPUFUNC(op_e020_22), 57376 }, /* ASR */ { (cpuop_func*)CPUFUNC(op_e028_22), 57384 }, /* LSR */ { (cpuop_func*)CPUFUNC(op_e030_22), 57392 }, /* ROXR */ { (cpuop_func*)CPUFUNC(op_e038_22), 57400 }, /* ROR */ { (cpuop_func*)CPUFUNC(op_e040_22), 57408 }, /* ASR */ { (cpuop_func*)CPUFUNC(op_e048_22), 57416 }, /* LSR */ { (cpuop_func*)CPUFUNC(op_e050_22), 57424 }, /* ROXR */ { (cpuop_func*)CPUFUNC(op_e058_22), 57432 }, /* ROR */ { (cpuop_func*)CPUFUNC(op_e060_22), 57440 }, /* ASR */ { (cpuop_func*)CPUFUNC(op_e068_22), 57448 }, /* LSR */ { (cpuop_func*)CPUFUNC(op_e070_22), 57456 }, /* ROXR */ { (cpuop_func*)CPUFUNC(op_e078_22), 57464 }, /* ROR */ { (cpuop_func*)CPUFUNC(op_e080_22), 57472 }, /* ASR */ { (cpuop_func*)CPUFUNC(op_e088_22), 57480 }, /* LSR */ { (cpuop_func*)CPUFUNC(op_e090_22), 57488 }, /* ROXR */ { (cpuop_func*)CPUFUNC(op_e098_22), 57496 }, /* ROR */ { (cpuop_func*)CPUFUNC(op_e0a0_22), 57504 }, /* ASR */ { (cpuop_func*)CPUFUNC(op_e0a8_22), 57512 }, /* LSR */ { (cpuop_func*)CPUFUNC(op_e0b0_22), 57520 }, /* ROXR */ { (cpuop_func*)CPUFUNC(op_e0b8_22), 57528 }, /* ROR */ { (cpuop_func*)CPUFUNC(op_e0d0_22), 57552 }, /* ASRW */ { (cpuop_func*)CPUFUNC(op_e0d8_22), 57560 }, /* ASRW */ { (cpuop_func*)CPUFUNC(op_e0e0_22), 57568 }, /* ASRW */ { (cpuop_func*)CPUFUNC(op_e0e8_22), 57576 }, /* ASRW */ { (cpuop_func*)CPUFUNC(op_e0f0_22), 57584 }, /* ASRW */ { (cpuop_func*)CPUFUNC(op_e0f8_22), 57592 }, /* ASRW */ { (cpuop_func*)CPUFUNC(op_e0f9_22), 57593 }, /* ASRW */ { (cpuop_func*)CPUFUNC(op_e100_22), 57600 }, /* ASL */ { (cpuop_func*)CPUFUNC(op_e108_22), 57608 }, /* LSL */ { (cpuop_func*)CPUFUNC(op_e110_22), 57616 }, /* ROXL */ { (cpuop_func*)CPUFUNC(op_e118_22), 57624 }, /* ROL */ { (cpuop_func*)CPUFUNC(op_e120_22), 57632 }, /* ASL */ { (cpuop_func*)CPUFUNC(op_e128_22), 57640 }, /* LSL */ { (cpuop_func*)CPUFUNC(op_e130_22), 57648 }, /* ROXL */ { (cpuop_func*)CPUFUNC(op_e138_22), 57656 }, /* ROL */ { (cpuop_func*)CPUFUNC(op_e140_22), 57664 }, /* ASL */ { (cpuop_func*)CPUFUNC(op_e148_22), 57672 }, /* LSL */ { (cpuop_func*)CPUFUNC(op_e150_22), 57680 }, /* ROXL */ { (cpuop_func*)CPUFUNC(op_e158_22), 57688 }, /* ROL */ { (cpuop_func*)CPUFUNC(op_e160_22), 57696 }, /* ASL */ { (cpuop_func*)CPUFUNC(op_e168_22), 57704 }, /* LSL */ { (cpuop_func*)CPUFUNC(op_e170_22), 57712 }, /* ROXL */ { (cpuop_func*)CPUFUNC(op_e178_22), 57720 }, /* ROL */ { (cpuop_func*)CPUFUNC(op_e180_22), 57728 }, /* ASL */ { (cpuop_func*)CPUFUNC(op_e188_22), 57736 }, /* LSL */ { (cpuop_func*)CPUFUNC(op_e190_22), 57744 }, /* ROXL */ { (cpuop_func*)CPUFUNC(op_e198_22), 57752 }, /* ROL */ { (cpuop_func*)CPUFUNC(op_e1a0_22), 57760 }, /* ASL */ { (cpuop_func*)CPUFUNC(op_e1a8_22), 57768 }, /* LSL */ { (cpuop_func*)CPUFUNC(op_e1b0_22), 57776 }, /* ROXL */ { (cpuop_func*)CPUFUNC(op_e1b8_22), 57784 }, /* ROL */ { (cpuop_func*)CPUFUNC(op_e1d0_22), 57808 }, /* ASLW */ { (cpuop_func*)CPUFUNC(op_e1d8_22), 57816 }, /* ASLW */ { (cpuop_func*)CPUFUNC(op_e1e0_22), 57824 }, /* ASLW */ { (cpuop_func*)CPUFUNC(op_e1e8_22), 57832 }, /* ASLW */ { (cpuop_func*)CPUFUNC(op_e1f0_22), 57840 }, /* ASLW */ { (cpuop_func*)CPUFUNC(op_e1f8_22), 57848 }, /* ASLW */ { (cpuop_func*)CPUFUNC(op_e1f9_22), 57849 }, /* ASLW */ { (cpuop_func*)CPUFUNC(op_e2d0_22), 58064 }, /* LSRW */ { (cpuop_func*)CPUFUNC(op_e2d8_22), 58072 }, /* LSRW */ { (cpuop_func*)CPUFUNC(op_e2e0_22), 58080 }, /* LSRW */ { (cpuop_func*)CPUFUNC(op_e2e8_22), 58088 }, /* LSRW */ { (cpuop_func*)CPUFUNC(op_e2f0_22), 58096 }, /* LSRW */ { (cpuop_func*)CPUFUNC(op_e2f8_22), 58104 }, /* LSRW */ { (cpuop_func*)CPUFUNC(op_e2f9_22), 58105 }, /* LSRW */ { (cpuop_func*)CPUFUNC(op_e3d0_22), 58320 }, /* LSLW */ { (cpuop_func*)CPUFUNC(op_e3d8_22), 58328 }, /* LSLW */ { (cpuop_func*)CPUFUNC(op_e3e0_22), 58336 }, /* LSLW */ { (cpuop_func*)CPUFUNC(op_e3e8_22), 58344 }, /* LSLW */ { (cpuop_func*)CPUFUNC(op_e3f0_22), 58352 }, /* LSLW */ { (cpuop_func*)CPUFUNC(op_e3f8_22), 58360 }, /* LSLW */ { (cpuop_func*)CPUFUNC(op_e3f9_22), 58361 }, /* LSLW */ { (cpuop_func*)CPUFUNC(op_e4d0_22), 58576 }, /* ROXRW */ { (cpuop_func*)CPUFUNC(op_e4d8_22), 58584 }, /* ROXRW */ { (cpuop_func*)CPUFUNC(op_e4e0_22), 58592 }, /* ROXRW */ { (cpuop_func*)CPUFUNC(op_e4e8_22), 58600 }, /* ROXRW */ { (cpuop_func*)CPUFUNC(op_e4f0_22), 58608 }, /* ROXRW */ { (cpuop_func*)CPUFUNC(op_e4f8_22), 58616 }, /* ROXRW */ { (cpuop_func*)CPUFUNC(op_e4f9_22), 58617 }, /* ROXRW */ { (cpuop_func*)CPUFUNC(op_e5d0_22), 58832 }, /* ROXLW */ { (cpuop_func*)CPUFUNC(op_e5d8_22), 58840 }, /* ROXLW */ { (cpuop_func*)CPUFUNC(op_e5e0_22), 58848 }, /* ROXLW */ { (cpuop_func*)CPUFUNC(op_e5e8_22), 58856 }, /* ROXLW */ { (cpuop_func*)CPUFUNC(op_e5f0_22), 58864 }, /* ROXLW */ { (cpuop_func*)CPUFUNC(op_e5f8_22), 58872 }, /* ROXLW */ { (cpuop_func*)CPUFUNC(op_e5f9_22), 58873 }, /* ROXLW */ { (cpuop_func*)CPUFUNC(op_e6d0_22), 59088 }, /* RORW */ { (cpuop_func*)CPUFUNC(op_e6d8_22), 59096 }, /* RORW */ { (cpuop_func*)CPUFUNC(op_e6e0_22), 59104 }, /* RORW */ { (cpuop_func*)CPUFUNC(op_e6e8_22), 59112 }, /* RORW */ { (cpuop_func*)CPUFUNC(op_e6f0_22), 59120 }, /* RORW */ { (cpuop_func*)CPUFUNC(op_e6f8_22), 59128 }, /* RORW */ { (cpuop_func*)CPUFUNC(op_e6f9_22), 59129 }, /* RORW */ { (cpuop_func*)CPUFUNC(op_e7d0_22), 59344 }, /* ROLW */ { (cpuop_func*)CPUFUNC(op_e7d8_22), 59352 }, /* ROLW */ { (cpuop_func*)CPUFUNC(op_e7e0_22), 59360 }, /* ROLW */ { (cpuop_func*)CPUFUNC(op_e7e8_22), 59368 }, /* ROLW */ { (cpuop_func*)CPUFUNC(op_e7f0_22), 59376 }, /* ROLW */ { (cpuop_func*)CPUFUNC(op_e7f8_22), 59384 }, /* ROLW */ { (cpuop_func*)CPUFUNC(op_e7f9_22), 59385 }, /* ROLW */ #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_e8c0_22), 59584 }, /* BFTST */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_e8d0_22), 59600 }, /* BFTST */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_e8e8_22), 59624 }, /* BFTST */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_e8f0_22), 59632 }, /* BFTST */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_e8f8_22), 59640 }, /* BFTST */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_e8f9_22), 59641 }, /* BFTST */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_e8fa_22), 59642 }, /* BFTST */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_e8fb_22), 59643 }, /* BFTST */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_e9c0_22), 59840 }, /* BFEXTU */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_e9d0_22), 59856 }, /* BFEXTU */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_e9e8_22), 59880 }, /* BFEXTU */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_e9f0_22), 59888 }, /* BFEXTU */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_e9f8_22), 59896 }, /* BFEXTU */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_e9f9_22), 59897 }, /* BFEXTU */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_e9fa_22), 59898 }, /* BFEXTU */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_e9fb_22), 59899 }, /* BFEXTU */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_eac0_22), 60096 }, /* BFCHG */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_ead0_22), 60112 }, /* BFCHG */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_eae8_22), 60136 }, /* BFCHG */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_eaf0_22), 60144 }, /* BFCHG */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_eaf8_22), 60152 }, /* BFCHG */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_eaf9_22), 60153 }, /* BFCHG */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_ebc0_22), 60352 }, /* BFEXTS */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_ebd0_22), 60368 }, /* BFEXTS */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_ebe8_22), 60392 }, /* BFEXTS */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_ebf0_22), 60400 }, /* BFEXTS */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_ebf8_22), 60408 }, /* BFEXTS */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_ebf9_22), 60409 }, /* BFEXTS */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_ebfa_22), 60410 }, /* BFEXTS */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_ebfb_22), 60411 }, /* BFEXTS */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_ecc0_22), 60608 }, /* BFCLR */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_ecd0_22), 60624 }, /* BFCLR */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_ece8_22), 60648 }, /* BFCLR */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_ecf0_22), 60656 }, /* BFCLR */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_ecf8_22), 60664 }, /* BFCLR */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_ecf9_22), 60665 }, /* BFCLR */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_edc0_22), 60864 }, /* BFFFO */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_edd0_22), 60880 }, /* BFFFO */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_ede8_22), 60904 }, /* BFFFO */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_edf0_22), 60912 }, /* BFFFO */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_edf8_22), 60920 }, /* BFFFO */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_edf9_22), 60921 }, /* BFFFO */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_edfa_22), 60922 }, /* BFFFO */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_edfb_22), 60923 }, /* BFFFO */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_eec0_22), 61120 }, /* BFSET */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_eed0_22), 61136 }, /* BFSET */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_eee8_22), 61160 }, /* BFSET */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_eef0_22), 61168 }, /* BFSET */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_eef8_22), 61176 }, /* BFSET */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_eef9_22), 61177 }, /* BFSET */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_efc0_22), 61376 }, /* BFINS */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_efd0_22), 61392 }, /* BFINS */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_efe8_22), 61416 }, /* BFINS */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_eff0_22), 61424 }, /* BFINS */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_eff8_22), 61432 }, /* BFINS */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_eff9_22), 61433 }, /* BFINS */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f000_22), 61440 }, /* MMUOP030 */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f008_22), 61448 }, /* MMUOP030 */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f010_22), 61456 }, /* MMUOP030 */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f018_22), 61464 }, /* MMUOP030 */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f020_22), 61472 }, /* MMUOP030 */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f028_22), 61480 }, /* MMUOP030 */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f030_22), 61488 }, /* MMUOP030 */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f038_22), 61496 }, /* MMUOP030 */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f039_22), 61497 }, /* MMUOP030 */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f200_22), 61952 }, /* FPP */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f208_22), 61960 }, /* FPP */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f210_22), 61968 }, /* FPP */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f218_22), 61976 }, /* FPP */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f220_22), 61984 }, /* FPP */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f228_22), 61992 }, /* FPP */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f230_22), 62000 }, /* FPP */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f238_22), 62008 }, /* FPP */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f239_22), 62009 }, /* FPP */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f23a_22), 62010 }, /* FPP */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f23b_22), 62011 }, /* FPP */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f23c_22), 62012 }, /* FPP */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f240_22), 62016 }, /* FScc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f248_22), 62024 }, /* FDBcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f250_22), 62032 }, /* FScc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f258_22), 62040 }, /* FScc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f260_22), 62048 }, /* FScc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f268_22), 62056 }, /* FScc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f270_22), 62064 }, /* FScc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f278_22), 62072 }, /* FScc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f279_22), 62073 }, /* FScc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f27a_22), 62074 }, /* FTRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f27b_22), 62075 }, /* FTRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f27c_22), 62076 }, /* FTRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f280_22), 62080 }, /* FBcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f2c0_22), 62144 }, /* FBcc */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f310_22), 62224 }, /* FSAVE */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f320_22), 62240 }, /* FSAVE */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f328_22), 62248 }, /* FSAVE */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f330_22), 62256 }, /* FSAVE */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f338_22), 62264 }, /* FSAVE */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f339_22), 62265 }, /* FSAVE */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f350_22), 62288 }, /* FRESTORE */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f358_22), 62296 }, /* FRESTORE */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f368_22), 62312 }, /* FRESTORE */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f370_22), 62320 }, /* FRESTORE */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f378_22), 62328 }, /* FRESTORE */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f379_22), 62329 }, /* FRESTORE */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f37a_22), 62330 }, /* FRESTORE */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f37b_22), 62331 }, /* FRESTORE */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f408_22), 62472 }, /* CINVL */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f410_22), 62480 }, /* CINVP */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f418_22), 62488 }, /* CINVA */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f419_22), 62489 }, /* CINVA */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f41a_22), 62490 }, /* CINVA */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f41b_22), 62491 }, /* CINVA */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f41c_22), 62492 }, /* CINVA */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f41d_22), 62493 }, /* CINVA */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f41e_22), 62494 }, /* CINVA */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f41f_22), 62495 }, /* CINVA */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f428_22), 62504 }, /* CPUSHL */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f430_22), 62512 }, /* CPUSHP */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f438_22), 62520 }, /* CPUSHA */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f439_22), 62521 }, /* CPUSHA */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f43a_22), 62522 }, /* CPUSHA */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f43b_22), 62523 }, /* CPUSHA */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f43c_22), 62524 }, /* CPUSHA */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f43d_22), 62525 }, /* CPUSHA */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f43e_22), 62526 }, /* CPUSHA */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f43f_22), 62527 }, /* CPUSHA */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f500_22), 62720 }, /* PFLUSHN */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f508_22), 62728 }, /* PFLUSH */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f510_22), 62736 }, /* PFLUSHAN */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f518_22), 62744 }, /* PFLUSHA */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f548_22), 62792 }, /* PTESTR */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f568_22), 62824 }, /* PTESTW */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f588_22), 62856 }, /* PLPAR */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f5c8_22), 62920 }, /* PLPAW */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f600_22), 62976 }, /* MOVE16 */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f608_22), 62984 }, /* MOVE16 */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f610_22), 62992 }, /* MOVE16 */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f618_22), 63000 }, /* MOVE16 */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f620_22), 63008 }, /* MOVE16 */ #endif #ifndef CPUEMU_68000_ONLY { (cpuop_func*)CPUFUNC(op_f800_22), 63488 }, /* LPSTOP */ #endif { 0, 0 }}; #endif /* CPUEMU_68000_ONLY */ #endif /* CPUEMU_22 */ #ifndef CPUEMU_68000_ONLY const struct cputbl CPUFUNC(op_smalltbl_23)[] = { { (cpuop_func*)CPUFUNC(op_0000_22), 0 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0010_22), 16 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0018_22), 24 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0020_22), 32 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0028_22), 40 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0030_22), 48 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0038_22), 56 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0039_22), 57 }, /* OR */ { (cpuop_func*)CPUFUNC(op_003c_22), 60 }, /* ORSR */ { (cpuop_func*)CPUFUNC(op_0040_22), 64 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0050_22), 80 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0058_22), 88 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0060_22), 96 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0068_22), 104 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0070_22), 112 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0078_22), 120 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0079_22), 121 }, /* OR */ { (cpuop_func*)CPUFUNC(op_007c_22), 124 }, /* ORSR */ { (cpuop_func*)CPUFUNC(op_0080_22), 128 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0090_22), 144 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0098_22), 152 }, /* OR */ { (cpuop_func*)CPUFUNC(op_00a0_22), 160 }, /* OR */ { (cpuop_func*)CPUFUNC(op_00a8_22), 168 }, /* OR */ { (cpuop_func*)CPUFUNC(op_00b0_22), 176 }, /* OR */ { (cpuop_func*)CPUFUNC(op_00b8_22), 184 }, /* OR */ { (cpuop_func*)CPUFUNC(op_00b9_22), 185 }, /* OR */ { (cpuop_func*)CPUFUNC(op_00d0_22), 208 }, /* CHK2 */ { (cpuop_func*)CPUFUNC(op_00e8_22), 232 }, /* CHK2 */ { (cpuop_func*)CPUFUNC(op_00f0_22), 240 }, /* CHK2 */ { (cpuop_func*)CPUFUNC(op_00f8_22), 248 }, /* CHK2 */ { (cpuop_func*)CPUFUNC(op_00f9_22), 249 }, /* CHK2 */ { (cpuop_func*)CPUFUNC(op_00fa_22), 250 }, /* CHK2 */ { (cpuop_func*)CPUFUNC(op_00fb_22), 251 }, /* CHK2 */ { (cpuop_func*)CPUFUNC(op_0100_22), 256 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0108_22), 264 }, /* MVPMR */ { (cpuop_func*)CPUFUNC(op_0110_22), 272 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0118_22), 280 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0120_22), 288 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0128_22), 296 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0130_22), 304 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0138_22), 312 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0139_22), 313 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_013a_22), 314 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_013b_22), 315 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_013c_22), 316 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0140_22), 320 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0148_22), 328 }, /* MVPMR */ { (cpuop_func*)CPUFUNC(op_0150_22), 336 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0158_22), 344 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0160_22), 352 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0168_22), 360 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0170_22), 368 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0178_22), 376 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0179_22), 377 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_017a_22), 378 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_017b_22), 379 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0180_22), 384 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_0188_22), 392 }, /* MVPRM */ { (cpuop_func*)CPUFUNC(op_0190_22), 400 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_0198_22), 408 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_01a0_22), 416 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_01a8_22), 424 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_01b0_22), 432 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_01b8_22), 440 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_01b9_22), 441 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_01ba_22), 442 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_01bb_22), 443 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_01c0_22), 448 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_01c8_22), 456 }, /* MVPRM */ { (cpuop_func*)CPUFUNC(op_01d0_22), 464 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_01d8_22), 472 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_01e0_22), 480 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_01e8_22), 488 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_01f0_22), 496 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_01f8_22), 504 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_01f9_22), 505 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_01fa_22), 506 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_01fb_22), 507 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_0200_22), 512 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0210_22), 528 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0218_22), 536 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0220_22), 544 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0228_22), 552 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0230_22), 560 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0238_22), 568 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0239_22), 569 }, /* AND */ { (cpuop_func*)CPUFUNC(op_023c_22), 572 }, /* ANDSR */ { (cpuop_func*)CPUFUNC(op_0240_22), 576 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0250_22), 592 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0258_22), 600 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0260_22), 608 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0268_22), 616 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0270_22), 624 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0278_22), 632 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0279_22), 633 }, /* AND */ { (cpuop_func*)CPUFUNC(op_027c_22), 636 }, /* ANDSR */ { (cpuop_func*)CPUFUNC(op_0280_22), 640 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0290_22), 656 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0298_22), 664 }, /* AND */ { (cpuop_func*)CPUFUNC(op_02a0_22), 672 }, /* AND */ { (cpuop_func*)CPUFUNC(op_02a8_22), 680 }, /* AND */ { (cpuop_func*)CPUFUNC(op_02b0_22), 688 }, /* AND */ { (cpuop_func*)CPUFUNC(op_02b8_22), 696 }, /* AND */ { (cpuop_func*)CPUFUNC(op_02b9_22), 697 }, /* AND */ { (cpuop_func*)CPUFUNC(op_02d0_22), 720 }, /* CHK2 */ { (cpuop_func*)CPUFUNC(op_02e8_22), 744 }, /* CHK2 */ { (cpuop_func*)CPUFUNC(op_02f0_22), 752 }, /* CHK2 */ { (cpuop_func*)CPUFUNC(op_02f8_22), 760 }, /* CHK2 */ { (cpuop_func*)CPUFUNC(op_02f9_22), 761 }, /* CHK2 */ { (cpuop_func*)CPUFUNC(op_02fa_22), 762 }, /* CHK2 */ { (cpuop_func*)CPUFUNC(op_02fb_22), 763 }, /* CHK2 */ { (cpuop_func*)CPUFUNC(op_0400_22), 1024 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0410_22), 1040 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0418_22), 1048 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0420_22), 1056 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0428_22), 1064 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0430_22), 1072 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0438_22), 1080 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0439_22), 1081 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0440_22), 1088 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0450_22), 1104 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0458_22), 1112 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0460_22), 1120 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0468_22), 1128 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0470_22), 1136 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0478_22), 1144 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0479_22), 1145 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0480_22), 1152 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0490_22), 1168 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0498_22), 1176 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_04a0_22), 1184 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_04a8_22), 1192 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_04b0_22), 1200 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_04b8_22), 1208 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_04b9_22), 1209 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_04d0_22), 1232 }, /* CHK2 */ { (cpuop_func*)CPUFUNC(op_04e8_22), 1256 }, /* CHK2 */ { (cpuop_func*)CPUFUNC(op_04f0_22), 1264 }, /* CHK2 */ { (cpuop_func*)CPUFUNC(op_04f8_22), 1272 }, /* CHK2 */ { (cpuop_func*)CPUFUNC(op_04f9_22), 1273 }, /* CHK2 */ { (cpuop_func*)CPUFUNC(op_04fa_22), 1274 }, /* CHK2 */ { (cpuop_func*)CPUFUNC(op_04fb_22), 1275 }, /* CHK2 */ { (cpuop_func*)CPUFUNC(op_0600_22), 1536 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0610_22), 1552 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0618_22), 1560 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0620_22), 1568 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0628_22), 1576 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0630_22), 1584 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0638_22), 1592 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0639_22), 1593 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0640_22), 1600 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0650_22), 1616 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0658_22), 1624 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0660_22), 1632 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0668_22), 1640 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0670_22), 1648 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0678_22), 1656 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0679_22), 1657 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0680_22), 1664 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0690_22), 1680 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0698_22), 1688 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_06a0_22), 1696 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_06a8_22), 1704 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_06b0_22), 1712 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_06b8_22), 1720 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_06b9_22), 1721 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_06c0_22), 1728 }, /* RTM */ { (cpuop_func*)CPUFUNC(op_06c8_22), 1736 }, /* RTM */ { (cpuop_func*)CPUFUNC(op_06d0_22), 1744 }, /* CALLM */ { (cpuop_func*)CPUFUNC(op_06e8_22), 1768 }, /* CALLM */ { (cpuop_func*)CPUFUNC(op_06f0_22), 1776 }, /* CALLM */ { (cpuop_func*)CPUFUNC(op_06f8_22), 1784 }, /* CALLM */ { (cpuop_func*)CPUFUNC(op_06f9_22), 1785 }, /* CALLM */ { (cpuop_func*)CPUFUNC(op_06fa_22), 1786 }, /* CALLM */ { (cpuop_func*)CPUFUNC(op_06fb_22), 1787 }, /* CALLM */ { (cpuop_func*)CPUFUNC(op_0800_22), 2048 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0810_22), 2064 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0818_22), 2072 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0820_22), 2080 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0828_22), 2088 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0830_22), 2096 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0838_22), 2104 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0839_22), 2105 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_083a_22), 2106 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_083b_22), 2107 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_083c_22), 2108 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0840_22), 2112 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0850_22), 2128 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0858_22), 2136 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0860_22), 2144 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0868_22), 2152 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0870_22), 2160 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0878_22), 2168 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0879_22), 2169 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_087a_22), 2170 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_087b_22), 2171 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0880_22), 2176 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_0890_22), 2192 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_0898_22), 2200 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_08a0_22), 2208 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_08a8_22), 2216 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_08b0_22), 2224 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_08b8_22), 2232 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_08b9_22), 2233 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_08ba_22), 2234 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_08bb_22), 2235 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_08c0_22), 2240 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_08d0_22), 2256 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_08d8_22), 2264 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_08e0_22), 2272 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_08e8_22), 2280 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_08f0_22), 2288 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_08f8_22), 2296 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_08f9_22), 2297 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_08fa_22), 2298 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_08fb_22), 2299 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_0a00_22), 2560 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a10_22), 2576 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a18_22), 2584 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a20_22), 2592 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a28_22), 2600 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a30_22), 2608 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a38_22), 2616 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a39_22), 2617 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a3c_22), 2620 }, /* EORSR */ { (cpuop_func*)CPUFUNC(op_0a40_22), 2624 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a50_22), 2640 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a58_22), 2648 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a60_22), 2656 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a68_22), 2664 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a70_22), 2672 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a78_22), 2680 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a79_22), 2681 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a7c_22), 2684 }, /* EORSR */ { (cpuop_func*)CPUFUNC(op_0a80_22), 2688 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a90_22), 2704 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a98_22), 2712 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0aa0_22), 2720 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0aa8_22), 2728 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0ab0_22), 2736 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0ab8_22), 2744 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0ab9_22), 2745 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0ad0_22), 2768 }, /* CAS */ { (cpuop_func*)CPUFUNC(op_0ad8_22), 2776 }, /* CAS */ { (cpuop_func*)CPUFUNC(op_0ae0_22), 2784 }, /* CAS */ { (cpuop_func*)CPUFUNC(op_0ae8_22), 2792 }, /* CAS */ { (cpuop_func*)CPUFUNC(op_0af0_22), 2800 }, /* CAS */ { (cpuop_func*)CPUFUNC(op_0af8_22), 2808 }, /* CAS */ { (cpuop_func*)CPUFUNC(op_0af9_22), 2809 }, /* CAS */ { (cpuop_func*)CPUFUNC(op_0c00_22), 3072 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c10_22), 3088 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c18_22), 3096 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c20_22), 3104 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c28_22), 3112 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c30_22), 3120 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c38_22), 3128 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c39_22), 3129 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c3a_22), 3130 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c3b_22), 3131 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c40_22), 3136 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c50_22), 3152 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c58_22), 3160 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c60_22), 3168 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c68_22), 3176 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c70_22), 3184 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c78_22), 3192 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c79_22), 3193 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c7a_22), 3194 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c7b_22), 3195 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c80_22), 3200 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c90_22), 3216 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c98_22), 3224 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0ca0_22), 3232 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0ca8_22), 3240 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0cb0_22), 3248 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0cb8_22), 3256 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0cb9_22), 3257 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0cba_22), 3258 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0cbb_22), 3259 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0cd0_22), 3280 }, /* CAS */ { (cpuop_func*)CPUFUNC(op_0cd8_22), 3288 }, /* CAS */ { (cpuop_func*)CPUFUNC(op_0ce0_22), 3296 }, /* CAS */ { (cpuop_func*)CPUFUNC(op_0ce8_22), 3304 }, /* CAS */ { (cpuop_func*)CPUFUNC(op_0cf0_22), 3312 }, /* CAS */ { (cpuop_func*)CPUFUNC(op_0cf8_22), 3320 }, /* CAS */ { (cpuop_func*)CPUFUNC(op_0cf9_22), 3321 }, /* CAS */ { (cpuop_func*)CPUFUNC(op_0cfc_22), 3324 }, /* CAS2 */ { (cpuop_func*)CPUFUNC(op_0e10_22), 3600 }, /* MOVES */ { (cpuop_func*)CPUFUNC(op_0e18_22), 3608 }, /* MOVES */ { (cpuop_func*)CPUFUNC(op_0e20_22), 3616 }, /* MOVES */ { (cpuop_func*)CPUFUNC(op_0e28_22), 3624 }, /* MOVES */ { (cpuop_func*)CPUFUNC(op_0e30_22), 3632 }, /* MOVES */ { (cpuop_func*)CPUFUNC(op_0e38_22), 3640 }, /* MOVES */ { (cpuop_func*)CPUFUNC(op_0e39_22), 3641 }, /* MOVES */ { (cpuop_func*)CPUFUNC(op_0e50_22), 3664 }, /* MOVES */ { (cpuop_func*)CPUFUNC(op_0e58_22), 3672 }, /* MOVES */ { (cpuop_func*)CPUFUNC(op_0e60_22), 3680 }, /* MOVES */ { (cpuop_func*)CPUFUNC(op_0e68_22), 3688 }, /* MOVES */ { (cpuop_func*)CPUFUNC(op_0e70_22), 3696 }, /* MOVES */ { (cpuop_func*)CPUFUNC(op_0e78_22), 3704 }, /* MOVES */ { (cpuop_func*)CPUFUNC(op_0e79_22), 3705 }, /* MOVES */ { (cpuop_func*)CPUFUNC(op_0e90_22), 3728 }, /* MOVES */ { (cpuop_func*)CPUFUNC(op_0e98_22), 3736 }, /* MOVES */ { (cpuop_func*)CPUFUNC(op_0ea0_22), 3744 }, /* MOVES */ { (cpuop_func*)CPUFUNC(op_0ea8_22), 3752 }, /* MOVES */ { (cpuop_func*)CPUFUNC(op_0eb0_22), 3760 }, /* MOVES */ { (cpuop_func*)CPUFUNC(op_0eb8_22), 3768 }, /* MOVES */ { (cpuop_func*)CPUFUNC(op_0eb9_22), 3769 }, /* MOVES */ { (cpuop_func*)CPUFUNC(op_0ed0_22), 3792 }, /* CAS */ { (cpuop_func*)CPUFUNC(op_0ed8_22), 3800 }, /* CAS */ { (cpuop_func*)CPUFUNC(op_0ee0_22), 3808 }, /* CAS */ { (cpuop_func*)CPUFUNC(op_0ee8_22), 3816 }, /* CAS */ { (cpuop_func*)CPUFUNC(op_0ef0_22), 3824 }, /* CAS */ { (cpuop_func*)CPUFUNC(op_0ef8_22), 3832 }, /* CAS */ { (cpuop_func*)CPUFUNC(op_0ef9_22), 3833 }, /* CAS */ { (cpuop_func*)CPUFUNC(op_0efc_22), 3836 }, /* CAS2 */ { (cpuop_func*)CPUFUNC(op_1000_22), 4096 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1010_22), 4112 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1018_22), 4120 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1020_22), 4128 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1028_22), 4136 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1030_22), 4144 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1038_22), 4152 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1039_22), 4153 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_103a_22), 4154 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_103b_22), 4155 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_103c_22), 4156 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1080_22), 4224 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1090_22), 4240 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1098_22), 4248 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10a0_22), 4256 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10a8_22), 4264 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10b0_22), 4272 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10b8_22), 4280 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10b9_22), 4281 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10ba_22), 4282 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10bb_22), 4283 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10bc_22), 4284 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10c0_22), 4288 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10d0_22), 4304 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10d8_22), 4312 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10e0_22), 4320 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10e8_22), 4328 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10f0_22), 4336 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10f8_22), 4344 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10f9_22), 4345 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10fa_22), 4346 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10fb_22), 4347 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10fc_22), 4348 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1100_22), 4352 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1110_22), 4368 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1118_22), 4376 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1120_22), 4384 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1128_22), 4392 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1130_22), 4400 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1138_22), 4408 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1139_22), 4409 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_113a_22), 4410 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_113b_22), 4411 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_113c_22), 4412 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1140_22), 4416 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1150_22), 4432 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1158_22), 4440 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1160_22), 4448 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1168_22), 4456 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1170_22), 4464 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1178_22), 4472 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1179_22), 4473 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_117a_22), 4474 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_117b_22), 4475 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_117c_22), 4476 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1180_22), 4480 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1190_22), 4496 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1198_22), 4504 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11a0_22), 4512 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11a8_22), 4520 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11b0_22), 4528 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11b8_22), 4536 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11b9_22), 4537 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11ba_22), 4538 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11bb_22), 4539 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11bc_22), 4540 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11c0_22), 4544 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11d0_22), 4560 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11d8_22), 4568 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11e0_22), 4576 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11e8_22), 4584 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11f0_22), 4592 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11f8_22), 4600 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11f9_22), 4601 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11fa_22), 4602 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11fb_22), 4603 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11fc_22), 4604 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_13c0_22), 5056 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_13d0_22), 5072 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_13d8_22), 5080 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_13e0_22), 5088 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_13e8_22), 5096 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_13f0_22), 5104 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_13f8_22), 5112 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_13f9_22), 5113 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_13fa_22), 5114 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_13fb_22), 5115 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_13fc_22), 5116 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2000_22), 8192 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2008_22), 8200 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2010_22), 8208 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2018_22), 8216 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2020_22), 8224 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2028_22), 8232 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2030_22), 8240 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2038_22), 8248 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2039_22), 8249 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_203a_22), 8250 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_203b_22), 8251 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_203c_22), 8252 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2040_22), 8256 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_2048_22), 8264 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_2050_22), 8272 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_2058_22), 8280 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_2060_22), 8288 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_2068_22), 8296 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_2070_22), 8304 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_2078_22), 8312 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_2079_22), 8313 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_207a_22), 8314 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_207b_22), 8315 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_207c_22), 8316 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_2080_22), 8320 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2088_22), 8328 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2090_22), 8336 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2098_22), 8344 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20a0_22), 8352 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20a8_22), 8360 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20b0_22), 8368 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20b8_22), 8376 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20b9_22), 8377 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20ba_22), 8378 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20bb_22), 8379 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20bc_22), 8380 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20c0_22), 8384 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20c8_22), 8392 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20d0_22), 8400 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20d8_22), 8408 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20e0_22), 8416 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20e8_22), 8424 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20f0_22), 8432 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20f8_22), 8440 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20f9_22), 8441 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20fa_22), 8442 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20fb_22), 8443 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20fc_22), 8444 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2100_22), 8448 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2108_22), 8456 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2110_22), 8464 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2118_22), 8472 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2120_22), 8480 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2128_22), 8488 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2130_22), 8496 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2138_22), 8504 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2139_22), 8505 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_213a_22), 8506 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_213b_22), 8507 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_213c_22), 8508 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2140_22), 8512 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2148_22), 8520 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2150_22), 8528 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2158_22), 8536 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2160_22), 8544 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2168_22), 8552 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2170_22), 8560 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2178_22), 8568 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2179_22), 8569 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_217a_22), 8570 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_217b_22), 8571 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_217c_22), 8572 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2180_22), 8576 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2188_22), 8584 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2190_22), 8592 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2198_22), 8600 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21a0_22), 8608 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21a8_22), 8616 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21b0_22), 8624 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21b8_22), 8632 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21b9_22), 8633 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21ba_22), 8634 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21bb_22), 8635 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21bc_22), 8636 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21c0_22), 8640 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21c8_22), 8648 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21d0_22), 8656 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21d8_22), 8664 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21e0_22), 8672 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21e8_22), 8680 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21f0_22), 8688 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21f8_22), 8696 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21f9_22), 8697 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21fa_22), 8698 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21fb_22), 8699 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21fc_22), 8700 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_23c0_22), 9152 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_23c8_22), 9160 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_23d0_22), 9168 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_23d8_22), 9176 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_23e0_22), 9184 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_23e8_22), 9192 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_23f0_22), 9200 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_23f8_22), 9208 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_23f9_22), 9209 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_23fa_22), 9210 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_23fb_22), 9211 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_23fc_22), 9212 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3000_22), 12288 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3008_22), 12296 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3010_22), 12304 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3018_22), 12312 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3020_22), 12320 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3028_22), 12328 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3030_22), 12336 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3038_22), 12344 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3039_22), 12345 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_303a_22), 12346 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_303b_22), 12347 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_303c_22), 12348 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3040_22), 12352 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_3048_22), 12360 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_3050_22), 12368 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_3058_22), 12376 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_3060_22), 12384 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_3068_22), 12392 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_3070_22), 12400 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_3078_22), 12408 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_3079_22), 12409 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_307a_22), 12410 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_307b_22), 12411 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_307c_22), 12412 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_3080_22), 12416 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3088_22), 12424 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3090_22), 12432 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3098_22), 12440 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30a0_22), 12448 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30a8_22), 12456 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30b0_22), 12464 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30b8_22), 12472 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30b9_22), 12473 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30ba_22), 12474 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30bb_22), 12475 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30bc_22), 12476 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30c0_22), 12480 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30c8_22), 12488 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30d0_22), 12496 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30d8_22), 12504 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30e0_22), 12512 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30e8_22), 12520 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30f0_22), 12528 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30f8_22), 12536 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30f9_22), 12537 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30fa_22), 12538 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30fb_22), 12539 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30fc_22), 12540 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3100_22), 12544 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3108_22), 12552 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3110_22), 12560 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3118_22), 12568 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3120_22), 12576 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3128_22), 12584 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3130_22), 12592 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3138_22), 12600 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3139_22), 12601 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_313a_22), 12602 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_313b_22), 12603 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_313c_22), 12604 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3140_22), 12608 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3148_22), 12616 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3150_22), 12624 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3158_22), 12632 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3160_22), 12640 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3168_22), 12648 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3170_22), 12656 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3178_22), 12664 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3179_22), 12665 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_317a_22), 12666 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_317b_22), 12667 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_317c_22), 12668 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3180_22), 12672 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3188_22), 12680 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3190_22), 12688 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3198_22), 12696 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31a0_22), 12704 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31a8_22), 12712 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31b0_22), 12720 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31b8_22), 12728 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31b9_22), 12729 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31ba_22), 12730 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31bb_22), 12731 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31bc_22), 12732 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31c0_22), 12736 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31c8_22), 12744 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31d0_22), 12752 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31d8_22), 12760 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31e0_22), 12768 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31e8_22), 12776 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31f0_22), 12784 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31f8_22), 12792 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31f9_22), 12793 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31fa_22), 12794 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31fb_22), 12795 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31fc_22), 12796 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_33c0_22), 13248 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_33c8_22), 13256 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_33d0_22), 13264 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_33d8_22), 13272 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_33e0_22), 13280 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_33e8_22), 13288 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_33f0_22), 13296 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_33f8_22), 13304 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_33f9_22), 13305 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_33fa_22), 13306 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_33fb_22), 13307 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_33fc_22), 13308 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_4000_22), 16384 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4010_22), 16400 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4018_22), 16408 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4020_22), 16416 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4028_22), 16424 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4030_22), 16432 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4038_22), 16440 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4039_22), 16441 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4040_22), 16448 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4050_22), 16464 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4058_22), 16472 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4060_22), 16480 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4068_22), 16488 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4070_22), 16496 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4078_22), 16504 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4079_22), 16505 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4080_22), 16512 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4090_22), 16528 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4098_22), 16536 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_40a0_22), 16544 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_40a8_22), 16552 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_40b0_22), 16560 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_40b8_22), 16568 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_40b9_22), 16569 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_40c0_22), 16576 }, /* MVSR2 */ { (cpuop_func*)CPUFUNC(op_40d0_22), 16592 }, /* MVSR2 */ { (cpuop_func*)CPUFUNC(op_40d8_22), 16600 }, /* MVSR2 */ { (cpuop_func*)CPUFUNC(op_40e0_22), 16608 }, /* MVSR2 */ { (cpuop_func*)CPUFUNC(op_40e8_22), 16616 }, /* MVSR2 */ { (cpuop_func*)CPUFUNC(op_40f0_22), 16624 }, /* MVSR2 */ { (cpuop_func*)CPUFUNC(op_40f8_22), 16632 }, /* MVSR2 */ { (cpuop_func*)CPUFUNC(op_40f9_22), 16633 }, /* MVSR2 */ { (cpuop_func*)CPUFUNC(op_4100_22), 16640 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_4110_22), 16656 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_4118_22), 16664 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_4120_22), 16672 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_4128_22), 16680 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_4130_22), 16688 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_4138_22), 16696 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_4139_22), 16697 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_413a_22), 16698 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_413b_22), 16699 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_413c_22), 16700 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_4180_22), 16768 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_4190_22), 16784 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_4198_22), 16792 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_41a0_22), 16800 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_41a8_22), 16808 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_41b0_22), 16816 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_41b8_22), 16824 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_41b9_22), 16825 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_41ba_22), 16826 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_41bb_22), 16827 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_41bc_22), 16828 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_41d0_22), 16848 }, /* LEA */ { (cpuop_func*)CPUFUNC(op_41e8_22), 16872 }, /* LEA */ { (cpuop_func*)CPUFUNC(op_41f0_22), 16880 }, /* LEA */ { (cpuop_func*)CPUFUNC(op_41f8_22), 16888 }, /* LEA */ { (cpuop_func*)CPUFUNC(op_41f9_22), 16889 }, /* LEA */ { (cpuop_func*)CPUFUNC(op_41fa_22), 16890 }, /* LEA */ { (cpuop_func*)CPUFUNC(op_41fb_22), 16891 }, /* LEA */ { (cpuop_func*)CPUFUNC(op_4200_22), 16896 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4210_22), 16912 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4218_22), 16920 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4220_22), 16928 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4228_22), 16936 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4230_22), 16944 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4238_22), 16952 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4239_22), 16953 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4240_22), 16960 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4250_22), 16976 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4258_22), 16984 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4260_22), 16992 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4268_22), 17000 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4270_22), 17008 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4278_22), 17016 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4279_22), 17017 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4280_22), 17024 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4290_22), 17040 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4298_22), 17048 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_42a0_22), 17056 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_42a8_22), 17064 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_42b0_22), 17072 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_42b8_22), 17080 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_42b9_22), 17081 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_42c0_22), 17088 }, /* MVSR2 */ { (cpuop_func*)CPUFUNC(op_42d0_22), 17104 }, /* MVSR2 */ { (cpuop_func*)CPUFUNC(op_42d8_22), 17112 }, /* MVSR2 */ { (cpuop_func*)CPUFUNC(op_42e0_22), 17120 }, /* MVSR2 */ { (cpuop_func*)CPUFUNC(op_42e8_22), 17128 }, /* MVSR2 */ { (cpuop_func*)CPUFUNC(op_42f0_22), 17136 }, /* MVSR2 */ { (cpuop_func*)CPUFUNC(op_42f8_22), 17144 }, /* MVSR2 */ { (cpuop_func*)CPUFUNC(op_42f9_22), 17145 }, /* MVSR2 */ { (cpuop_func*)CPUFUNC(op_4400_22), 17408 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4410_22), 17424 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4418_22), 17432 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4420_22), 17440 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4428_22), 17448 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4430_22), 17456 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4438_22), 17464 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4439_22), 17465 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4440_22), 17472 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4450_22), 17488 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4458_22), 17496 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4460_22), 17504 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4468_22), 17512 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4470_22), 17520 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4478_22), 17528 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4479_22), 17529 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4480_22), 17536 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4490_22), 17552 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4498_22), 17560 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_44a0_22), 17568 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_44a8_22), 17576 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_44b0_22), 17584 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_44b8_22), 17592 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_44b9_22), 17593 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_44c0_22), 17600 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_44d0_22), 17616 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_44d8_22), 17624 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_44e0_22), 17632 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_44e8_22), 17640 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_44f0_22), 17648 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_44f8_22), 17656 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_44f9_22), 17657 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_44fa_22), 17658 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_44fb_22), 17659 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_44fc_22), 17660 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_4600_22), 17920 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4610_22), 17936 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4618_22), 17944 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4620_22), 17952 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4628_22), 17960 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4630_22), 17968 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4638_22), 17976 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4639_22), 17977 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4640_22), 17984 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4650_22), 18000 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4658_22), 18008 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4660_22), 18016 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4668_22), 18024 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4670_22), 18032 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4678_22), 18040 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4679_22), 18041 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4680_22), 18048 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4690_22), 18064 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4698_22), 18072 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_46a0_22), 18080 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_46a8_22), 18088 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_46b0_22), 18096 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_46b8_22), 18104 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_46b9_22), 18105 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_46c0_22), 18112 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_46d0_22), 18128 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_46d8_22), 18136 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_46e0_22), 18144 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_46e8_22), 18152 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_46f0_22), 18160 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_46f8_22), 18168 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_46f9_22), 18169 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_46fa_22), 18170 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_46fb_22), 18171 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_46fc_22), 18172 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_4800_22), 18432 }, /* NBCD */ { (cpuop_func*)CPUFUNC(op_4808_22), 18440 }, /* LINK */ { (cpuop_func*)CPUFUNC(op_4810_22), 18448 }, /* NBCD */ { (cpuop_func*)CPUFUNC(op_4818_22), 18456 }, /* NBCD */ { (cpuop_func*)CPUFUNC(op_4820_22), 18464 }, /* NBCD */ { (cpuop_func*)CPUFUNC(op_4828_22), 18472 }, /* NBCD */ { (cpuop_func*)CPUFUNC(op_4830_22), 18480 }, /* NBCD */ { (cpuop_func*)CPUFUNC(op_4838_22), 18488 }, /* NBCD */ { (cpuop_func*)CPUFUNC(op_4839_22), 18489 }, /* NBCD */ { (cpuop_func*)CPUFUNC(op_4840_22), 18496 }, /* SWAP */ { (cpuop_func*)CPUFUNC(op_4848_22), 18504 }, /* BKPT */ { (cpuop_func*)CPUFUNC(op_4850_22), 18512 }, /* PEA */ { (cpuop_func*)CPUFUNC(op_4868_22), 18536 }, /* PEA */ { (cpuop_func*)CPUFUNC(op_4870_22), 18544 }, /* PEA */ { (cpuop_func*)CPUFUNC(op_4878_22), 18552 }, /* PEA */ { (cpuop_func*)CPUFUNC(op_4879_22), 18553 }, /* PEA */ { (cpuop_func*)CPUFUNC(op_487a_22), 18554 }, /* PEA */ { (cpuop_func*)CPUFUNC(op_487b_22), 18555 }, /* PEA */ { (cpuop_func*)CPUFUNC(op_4880_22), 18560 }, /* EXT */ { (cpuop_func*)CPUFUNC(op_4890_22), 18576 }, /* MVMLE */ { (cpuop_func*)CPUFUNC(op_48a0_22), 18592 }, /* MVMLE */ { (cpuop_func*)CPUFUNC(op_48a8_22), 18600 }, /* MVMLE */ { (cpuop_func*)CPUFUNC(op_48b0_22), 18608 }, /* MVMLE */ { (cpuop_func*)CPUFUNC(op_48b8_22), 18616 }, /* MVMLE */ { (cpuop_func*)CPUFUNC(op_48b9_22), 18617 }, /* MVMLE */ { (cpuop_func*)CPUFUNC(op_48c0_22), 18624 }, /* EXT */ { (cpuop_func*)CPUFUNC(op_48d0_22), 18640 }, /* MVMLE */ { (cpuop_func*)CPUFUNC(op_48e0_22), 18656 }, /* MVMLE */ { (cpuop_func*)CPUFUNC(op_48e8_22), 18664 }, /* MVMLE */ { (cpuop_func*)CPUFUNC(op_48f0_22), 18672 }, /* MVMLE */ { (cpuop_func*)CPUFUNC(op_48f8_22), 18680 }, /* MVMLE */ { (cpuop_func*)CPUFUNC(op_48f9_22), 18681 }, /* MVMLE */ { (cpuop_func*)CPUFUNC(op_49c0_22), 18880 }, /* EXT */ { (cpuop_func*)CPUFUNC(op_4a00_22), 18944 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a10_22), 18960 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a18_22), 18968 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a20_22), 18976 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a28_22), 18984 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a30_22), 18992 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a38_22), 19000 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a39_22), 19001 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a3a_22), 19002 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a3b_22), 19003 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a3c_22), 19004 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a40_22), 19008 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a48_22), 19016 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a50_22), 19024 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a58_22), 19032 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a60_22), 19040 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a68_22), 19048 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a70_22), 19056 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a78_22), 19064 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a79_22), 19065 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a7a_22), 19066 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a7b_22), 19067 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a7c_22), 19068 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a80_22), 19072 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a88_22), 19080 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a90_22), 19088 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a98_22), 19096 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4aa0_22), 19104 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4aa8_22), 19112 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4ab0_22), 19120 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4ab8_22), 19128 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4ab9_22), 19129 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4aba_22), 19130 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4abb_22), 19131 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4abc_22), 19132 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4ac0_22), 19136 }, /* TAS */ { (cpuop_func*)CPUFUNC(op_4ad0_22), 19152 }, /* TAS */ { (cpuop_func*)CPUFUNC(op_4ad8_22), 19160 }, /* TAS */ { (cpuop_func*)CPUFUNC(op_4ae0_22), 19168 }, /* TAS */ { (cpuop_func*)CPUFUNC(op_4ae8_22), 19176 }, /* TAS */ { (cpuop_func*)CPUFUNC(op_4af0_22), 19184 }, /* TAS */ { (cpuop_func*)CPUFUNC(op_4af8_22), 19192 }, /* TAS */ { (cpuop_func*)CPUFUNC(op_4af9_22), 19193 }, /* TAS */ { (cpuop_func*)CPUFUNC(op_4c00_22), 19456 }, /* MULL */ { (cpuop_func*)CPUFUNC(op_4c10_22), 19472 }, /* MULL */ { (cpuop_func*)CPUFUNC(op_4c18_22), 19480 }, /* MULL */ { (cpuop_func*)CPUFUNC(op_4c20_22), 19488 }, /* MULL */ { (cpuop_func*)CPUFUNC(op_4c28_22), 19496 }, /* MULL */ { (cpuop_func*)CPUFUNC(op_4c30_22), 19504 }, /* MULL */ { (cpuop_func*)CPUFUNC(op_4c38_22), 19512 }, /* MULL */ { (cpuop_func*)CPUFUNC(op_4c39_22), 19513 }, /* MULL */ { (cpuop_func*)CPUFUNC(op_4c3a_22), 19514 }, /* MULL */ { (cpuop_func*)CPUFUNC(op_4c3b_22), 19515 }, /* MULL */ { (cpuop_func*)CPUFUNC(op_4c3c_22), 19516 }, /* MULL */ { (cpuop_func*)CPUFUNC(op_4c40_22), 19520 }, /* DIVL */ { (cpuop_func*)CPUFUNC(op_4c50_22), 19536 }, /* DIVL */ { (cpuop_func*)CPUFUNC(op_4c58_22), 19544 }, /* DIVL */ { (cpuop_func*)CPUFUNC(op_4c60_22), 19552 }, /* DIVL */ { (cpuop_func*)CPUFUNC(op_4c68_22), 19560 }, /* DIVL */ { (cpuop_func*)CPUFUNC(op_4c70_22), 19568 }, /* DIVL */ { (cpuop_func*)CPUFUNC(op_4c78_22), 19576 }, /* DIVL */ { (cpuop_func*)CPUFUNC(op_4c79_22), 19577 }, /* DIVL */ { (cpuop_func*)CPUFUNC(op_4c7a_22), 19578 }, /* DIVL */ { (cpuop_func*)CPUFUNC(op_4c7b_22), 19579 }, /* DIVL */ { (cpuop_func*)CPUFUNC(op_4c7c_22), 19580 }, /* DIVL */ { (cpuop_func*)CPUFUNC(op_4c90_22), 19600 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4c98_22), 19608 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4ca8_22), 19624 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4cb0_22), 19632 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4cb8_22), 19640 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4cb9_22), 19641 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4cba_22), 19642 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4cbb_22), 19643 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4cd0_22), 19664 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4cd8_22), 19672 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4ce8_22), 19688 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4cf0_22), 19696 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4cf8_22), 19704 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4cf9_22), 19705 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4cfa_22), 19706 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4cfb_22), 19707 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4e40_22), 20032 }, /* TRAP */ { (cpuop_func*)CPUFUNC(op_4e50_22), 20048 }, /* LINK */ { (cpuop_func*)CPUFUNC(op_4e58_22), 20056 }, /* UNLK */ { (cpuop_func*)CPUFUNC(op_4e60_22), 20064 }, /* MVR2USP */ { (cpuop_func*)CPUFUNC(op_4e68_22), 20072 }, /* MVUSP2R */ { (cpuop_func*)CPUFUNC(op_4e70_22), 20080 }, /* RESET */ { (cpuop_func*)CPUFUNC(op_4e71_22), 20081 }, /* NOP */ { (cpuop_func*)CPUFUNC(op_4e72_22), 20082 }, /* STOP */ { (cpuop_func*)CPUFUNC(op_4e73_22), 20083 }, /* RTE */ { (cpuop_func*)CPUFUNC(op_4e74_22), 20084 }, /* RTD */ { (cpuop_func*)CPUFUNC(op_4e75_22), 20085 }, /* RTS */ { (cpuop_func*)CPUFUNC(op_4e76_22), 20086 }, /* TRAPV */ { (cpuop_func*)CPUFUNC(op_4e77_22), 20087 }, /* RTR */ { (cpuop_func*)CPUFUNC(op_4e7a_22), 20090 }, /* MOVEC2 */ { (cpuop_func*)CPUFUNC(op_4e7b_22), 20091 }, /* MOVE2C */ { (cpuop_func*)CPUFUNC(op_4e90_22), 20112 }, /* JSR */ { (cpuop_func*)CPUFUNC(op_4ea8_22), 20136 }, /* JSR */ { (cpuop_func*)CPUFUNC(op_4eb0_22), 20144 }, /* JSR */ { (cpuop_func*)CPUFUNC(op_4eb8_22), 20152 }, /* JSR */ { (cpuop_func*)CPUFUNC(op_4eb9_22), 20153 }, /* JSR */ { (cpuop_func*)CPUFUNC(op_4eba_22), 20154 }, /* JSR */ { (cpuop_func*)CPUFUNC(op_4ebb_22), 20155 }, /* JSR */ { (cpuop_func*)CPUFUNC(op_4ed0_22), 20176 }, /* JMP */ { (cpuop_func*)CPUFUNC(op_4ee8_22), 20200 }, /* JMP */ { (cpuop_func*)CPUFUNC(op_4ef0_22), 20208 }, /* JMP */ { (cpuop_func*)CPUFUNC(op_4ef8_22), 20216 }, /* JMP */ { (cpuop_func*)CPUFUNC(op_4ef9_22), 20217 }, /* JMP */ { (cpuop_func*)CPUFUNC(op_4efa_22), 20218 }, /* JMP */ { (cpuop_func*)CPUFUNC(op_4efb_22), 20219 }, /* JMP */ { (cpuop_func*)CPUFUNC(op_5000_22), 20480 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5010_22), 20496 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5018_22), 20504 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5020_22), 20512 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5028_22), 20520 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5030_22), 20528 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5038_22), 20536 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5039_22), 20537 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5040_22), 20544 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5048_22), 20552 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_5050_22), 20560 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5058_22), 20568 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5060_22), 20576 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5068_22), 20584 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5070_22), 20592 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5078_22), 20600 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5079_22), 20601 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5080_22), 20608 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5088_22), 20616 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_5090_22), 20624 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5098_22), 20632 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_50a0_22), 20640 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_50a8_22), 20648 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_50b0_22), 20656 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_50b8_22), 20664 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_50b9_22), 20665 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_50c0_22), 20672 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_50c8_22), 20680 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_50d0_22), 20688 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_50d8_22), 20696 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_50e0_22), 20704 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_50e8_22), 20712 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_50f0_22), 20720 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_50f8_22), 20728 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_50f9_22), 20729 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_50fa_22), 20730 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_50fb_22), 20731 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_50fc_22), 20732 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_5100_22), 20736 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5110_22), 20752 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5118_22), 20760 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5120_22), 20768 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5128_22), 20776 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5130_22), 20784 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5138_22), 20792 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5139_22), 20793 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5140_22), 20800 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5148_22), 20808 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_5150_22), 20816 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5158_22), 20824 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5160_22), 20832 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5168_22), 20840 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5170_22), 20848 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5178_22), 20856 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5179_22), 20857 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5180_22), 20864 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5188_22), 20872 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_5190_22), 20880 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5198_22), 20888 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_51a0_22), 20896 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_51a8_22), 20904 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_51b0_22), 20912 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_51b8_22), 20920 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_51b9_22), 20921 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_51c0_22), 20928 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_51c8_22), 20936 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_51d0_22), 20944 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_51d8_22), 20952 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_51e0_22), 20960 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_51e8_22), 20968 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_51f0_22), 20976 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_51f8_22), 20984 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_51f9_22), 20985 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_51fa_22), 20986 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_51fb_22), 20987 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_51fc_22), 20988 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_52c0_22), 21184 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_52c8_22), 21192 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_52d0_22), 21200 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_52d8_22), 21208 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_52e0_22), 21216 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_52e8_22), 21224 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_52f0_22), 21232 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_52f8_22), 21240 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_52f9_22), 21241 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_52fa_22), 21242 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_52fb_22), 21243 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_52fc_22), 21244 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_53c0_22), 21440 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_53c8_22), 21448 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_53d0_22), 21456 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_53d8_22), 21464 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_53e0_22), 21472 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_53e8_22), 21480 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_53f0_22), 21488 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_53f8_22), 21496 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_53f9_22), 21497 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_53fa_22), 21498 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_53fb_22), 21499 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_53fc_22), 21500 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_54c0_22), 21696 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_54c8_22), 21704 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_54d0_22), 21712 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_54d8_22), 21720 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_54e0_22), 21728 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_54e8_22), 21736 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_54f0_22), 21744 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_54f8_22), 21752 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_54f9_22), 21753 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_54fa_22), 21754 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_54fb_22), 21755 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_54fc_22), 21756 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_55c0_22), 21952 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_55c8_22), 21960 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_55d0_22), 21968 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_55d8_22), 21976 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_55e0_22), 21984 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_55e8_22), 21992 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_55f0_22), 22000 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_55f8_22), 22008 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_55f9_22), 22009 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_55fa_22), 22010 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_55fb_22), 22011 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_55fc_22), 22012 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_56c0_22), 22208 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_56c8_22), 22216 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_56d0_22), 22224 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_56d8_22), 22232 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_56e0_22), 22240 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_56e8_22), 22248 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_56f0_22), 22256 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_56f8_22), 22264 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_56f9_22), 22265 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_56fa_22), 22266 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_56fb_22), 22267 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_56fc_22), 22268 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_57c0_22), 22464 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_57c8_22), 22472 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_57d0_22), 22480 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_57d8_22), 22488 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_57e0_22), 22496 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_57e8_22), 22504 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_57f0_22), 22512 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_57f8_22), 22520 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_57f9_22), 22521 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_57fa_22), 22522 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_57fb_22), 22523 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_57fc_22), 22524 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_58c0_22), 22720 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_58c8_22), 22728 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_58d0_22), 22736 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_58d8_22), 22744 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_58e0_22), 22752 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_58e8_22), 22760 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_58f0_22), 22768 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_58f8_22), 22776 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_58f9_22), 22777 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_58fa_22), 22778 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_58fb_22), 22779 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_58fc_22), 22780 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_59c0_22), 22976 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_59c8_22), 22984 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_59d0_22), 22992 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_59d8_22), 23000 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_59e0_22), 23008 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_59e8_22), 23016 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_59f0_22), 23024 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_59f8_22), 23032 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_59f9_22), 23033 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_59fa_22), 23034 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_59fb_22), 23035 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_59fc_22), 23036 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_5ac0_22), 23232 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ac8_22), 23240 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_5ad0_22), 23248 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ad8_22), 23256 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ae0_22), 23264 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ae8_22), 23272 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5af0_22), 23280 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5af8_22), 23288 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5af9_22), 23289 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5afa_22), 23290 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_5afb_22), 23291 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_5afc_22), 23292 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_5bc0_22), 23488 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5bc8_22), 23496 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_5bd0_22), 23504 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5bd8_22), 23512 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5be0_22), 23520 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5be8_22), 23528 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5bf0_22), 23536 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5bf8_22), 23544 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5bf9_22), 23545 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5bfa_22), 23546 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_5bfb_22), 23547 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_5bfc_22), 23548 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_5cc0_22), 23744 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5cc8_22), 23752 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_5cd0_22), 23760 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5cd8_22), 23768 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ce0_22), 23776 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ce8_22), 23784 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5cf0_22), 23792 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5cf8_22), 23800 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5cf9_22), 23801 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5cfa_22), 23802 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_5cfb_22), 23803 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_5cfc_22), 23804 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_5dc0_22), 24000 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5dc8_22), 24008 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_5dd0_22), 24016 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5dd8_22), 24024 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5de0_22), 24032 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5de8_22), 24040 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5df0_22), 24048 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5df8_22), 24056 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5df9_22), 24057 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5dfa_22), 24058 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_5dfb_22), 24059 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_5dfc_22), 24060 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_5ec0_22), 24256 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ec8_22), 24264 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_5ed0_22), 24272 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ed8_22), 24280 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ee0_22), 24288 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ee8_22), 24296 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ef0_22), 24304 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ef8_22), 24312 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ef9_22), 24313 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5efa_22), 24314 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_5efb_22), 24315 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_5efc_22), 24316 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_5fc0_22), 24512 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5fc8_22), 24520 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_5fd0_22), 24528 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5fd8_22), 24536 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5fe0_22), 24544 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5fe8_22), 24552 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ff0_22), 24560 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ff8_22), 24568 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ff9_22), 24569 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ffa_22), 24570 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_5ffb_22), 24571 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_5ffc_22), 24572 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_6000_22), 24576 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6001_22), 24577 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_60ff_22), 24831 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6100_22), 24832 }, /* BSR */ { (cpuop_func*)CPUFUNC(op_6101_22), 24833 }, /* BSR */ { (cpuop_func*)CPUFUNC(op_61ff_22), 25087 }, /* BSR */ { (cpuop_func*)CPUFUNC(op_6200_22), 25088 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6201_22), 25089 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_62ff_22), 25343 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6300_22), 25344 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6301_22), 25345 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_63ff_22), 25599 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6400_22), 25600 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6401_22), 25601 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_64ff_22), 25855 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6500_22), 25856 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6501_22), 25857 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_65ff_22), 26111 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6600_22), 26112 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6601_22), 26113 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_66ff_22), 26367 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6700_22), 26368 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6701_22), 26369 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_67ff_22), 26623 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6800_22), 26624 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6801_22), 26625 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_68ff_22), 26879 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6900_22), 26880 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6901_22), 26881 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_69ff_22), 27135 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6a00_22), 27136 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6a01_22), 27137 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6aff_22), 27391 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6b00_22), 27392 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6b01_22), 27393 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6bff_22), 27647 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6c00_22), 27648 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6c01_22), 27649 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6cff_22), 27903 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6d00_22), 27904 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6d01_22), 27905 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6dff_22), 28159 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6e00_22), 28160 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6e01_22), 28161 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6eff_22), 28415 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6f00_22), 28416 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6f01_22), 28417 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6fff_22), 28671 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_7000_22), 28672 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_8000_22), 32768 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8010_22), 32784 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8018_22), 32792 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8020_22), 32800 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8028_22), 32808 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8030_22), 32816 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8038_22), 32824 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8039_22), 32825 }, /* OR */ { (cpuop_func*)CPUFUNC(op_803a_22), 32826 }, /* OR */ { (cpuop_func*)CPUFUNC(op_803b_22), 32827 }, /* OR */ { (cpuop_func*)CPUFUNC(op_803c_22), 32828 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8040_22), 32832 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8050_22), 32848 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8058_22), 32856 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8060_22), 32864 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8068_22), 32872 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8070_22), 32880 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8078_22), 32888 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8079_22), 32889 }, /* OR */ { (cpuop_func*)CPUFUNC(op_807a_22), 32890 }, /* OR */ { (cpuop_func*)CPUFUNC(op_807b_22), 32891 }, /* OR */ { (cpuop_func*)CPUFUNC(op_807c_22), 32892 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8080_22), 32896 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8090_22), 32912 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8098_22), 32920 }, /* OR */ { (cpuop_func*)CPUFUNC(op_80a0_22), 32928 }, /* OR */ { (cpuop_func*)CPUFUNC(op_80a8_22), 32936 }, /* OR */ { (cpuop_func*)CPUFUNC(op_80b0_22), 32944 }, /* OR */ { (cpuop_func*)CPUFUNC(op_80b8_22), 32952 }, /* OR */ { (cpuop_func*)CPUFUNC(op_80b9_22), 32953 }, /* OR */ { (cpuop_func*)CPUFUNC(op_80ba_22), 32954 }, /* OR */ { (cpuop_func*)CPUFUNC(op_80bb_22), 32955 }, /* OR */ { (cpuop_func*)CPUFUNC(op_80bc_22), 32956 }, /* OR */ { (cpuop_func*)CPUFUNC(op_80c0_22), 32960 }, /* DIVU */ { (cpuop_func*)CPUFUNC(op_80d0_22), 32976 }, /* DIVU */ { (cpuop_func*)CPUFUNC(op_80d8_22), 32984 }, /* DIVU */ { (cpuop_func*)CPUFUNC(op_80e0_22), 32992 }, /* DIVU */ { (cpuop_func*)CPUFUNC(op_80e8_22), 33000 }, /* DIVU */ { (cpuop_func*)CPUFUNC(op_80f0_22), 33008 }, /* DIVU */ { (cpuop_func*)CPUFUNC(op_80f8_22), 33016 }, /* DIVU */ { (cpuop_func*)CPUFUNC(op_80f9_22), 33017 }, /* DIVU */ { (cpuop_func*)CPUFUNC(op_80fa_22), 33018 }, /* DIVU */ { (cpuop_func*)CPUFUNC(op_80fb_22), 33019 }, /* DIVU */ { (cpuop_func*)CPUFUNC(op_80fc_22), 33020 }, /* DIVU */ { (cpuop_func*)CPUFUNC(op_8100_22), 33024 }, /* SBCD */ { (cpuop_func*)CPUFUNC(op_8108_22), 33032 }, /* SBCD */ { (cpuop_func*)CPUFUNC(op_8110_22), 33040 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8118_22), 33048 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8120_22), 33056 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8128_22), 33064 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8130_22), 33072 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8138_22), 33080 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8139_22), 33081 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8140_22), 33088 }, /* PACK */ { (cpuop_func*)CPUFUNC(op_8148_22), 33096 }, /* PACK */ { (cpuop_func*)CPUFUNC(op_8150_22), 33104 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8158_22), 33112 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8160_22), 33120 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8168_22), 33128 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8170_22), 33136 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8178_22), 33144 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8179_22), 33145 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8180_22), 33152 }, /* UNPK */ { (cpuop_func*)CPUFUNC(op_8188_22), 33160 }, /* UNPK */ { (cpuop_func*)CPUFUNC(op_8190_22), 33168 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8198_22), 33176 }, /* OR */ { (cpuop_func*)CPUFUNC(op_81a0_22), 33184 }, /* OR */ { (cpuop_func*)CPUFUNC(op_81a8_22), 33192 }, /* OR */ { (cpuop_func*)CPUFUNC(op_81b0_22), 33200 }, /* OR */ { (cpuop_func*)CPUFUNC(op_81b8_22), 33208 }, /* OR */ { (cpuop_func*)CPUFUNC(op_81b9_22), 33209 }, /* OR */ { (cpuop_func*)CPUFUNC(op_81c0_22), 33216 }, /* DIVS */ { (cpuop_func*)CPUFUNC(op_81d0_22), 33232 }, /* DIVS */ { (cpuop_func*)CPUFUNC(op_81d8_22), 33240 }, /* DIVS */ { (cpuop_func*)CPUFUNC(op_81e0_22), 33248 }, /* DIVS */ { (cpuop_func*)CPUFUNC(op_81e8_22), 33256 }, /* DIVS */ { (cpuop_func*)CPUFUNC(op_81f0_22), 33264 }, /* DIVS */ { (cpuop_func*)CPUFUNC(op_81f8_22), 33272 }, /* DIVS */ { (cpuop_func*)CPUFUNC(op_81f9_22), 33273 }, /* DIVS */ { (cpuop_func*)CPUFUNC(op_81fa_22), 33274 }, /* DIVS */ { (cpuop_func*)CPUFUNC(op_81fb_22), 33275 }, /* DIVS */ { (cpuop_func*)CPUFUNC(op_81fc_22), 33276 }, /* DIVS */ { (cpuop_func*)CPUFUNC(op_9000_22), 36864 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9010_22), 36880 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9018_22), 36888 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9020_22), 36896 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9028_22), 36904 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9030_22), 36912 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9038_22), 36920 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9039_22), 36921 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_903a_22), 36922 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_903b_22), 36923 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_903c_22), 36924 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9040_22), 36928 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9048_22), 36936 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9050_22), 36944 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9058_22), 36952 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9060_22), 36960 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9068_22), 36968 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9070_22), 36976 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9078_22), 36984 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9079_22), 36985 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_907a_22), 36986 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_907b_22), 36987 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_907c_22), 36988 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9080_22), 36992 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9088_22), 37000 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9090_22), 37008 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9098_22), 37016 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_90a0_22), 37024 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_90a8_22), 37032 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_90b0_22), 37040 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_90b8_22), 37048 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_90b9_22), 37049 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_90ba_22), 37050 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_90bb_22), 37051 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_90bc_22), 37052 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_90c0_22), 37056 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_90c8_22), 37064 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_90d0_22), 37072 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_90d8_22), 37080 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_90e0_22), 37088 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_90e8_22), 37096 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_90f0_22), 37104 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_90f8_22), 37112 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_90f9_22), 37113 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_90fa_22), 37114 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_90fb_22), 37115 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_90fc_22), 37116 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_9100_22), 37120 }, /* SUBX */ { (cpuop_func*)CPUFUNC(op_9108_22), 37128 }, /* SUBX */ { (cpuop_func*)CPUFUNC(op_9110_22), 37136 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9118_22), 37144 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9120_22), 37152 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9128_22), 37160 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9130_22), 37168 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9138_22), 37176 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9139_22), 37177 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9140_22), 37184 }, /* SUBX */ { (cpuop_func*)CPUFUNC(op_9148_22), 37192 }, /* SUBX */ { (cpuop_func*)CPUFUNC(op_9150_22), 37200 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9158_22), 37208 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9160_22), 37216 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9168_22), 37224 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9170_22), 37232 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9178_22), 37240 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9179_22), 37241 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9180_22), 37248 }, /* SUBX */ { (cpuop_func*)CPUFUNC(op_9188_22), 37256 }, /* SUBX */ { (cpuop_func*)CPUFUNC(op_9190_22), 37264 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9198_22), 37272 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_91a0_22), 37280 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_91a8_22), 37288 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_91b0_22), 37296 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_91b8_22), 37304 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_91b9_22), 37305 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_91c0_22), 37312 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_91c8_22), 37320 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_91d0_22), 37328 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_91d8_22), 37336 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_91e0_22), 37344 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_91e8_22), 37352 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_91f0_22), 37360 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_91f8_22), 37368 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_91f9_22), 37369 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_91fa_22), 37370 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_91fb_22), 37371 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_91fc_22), 37372 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_b000_22), 45056 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b010_22), 45072 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b018_22), 45080 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b020_22), 45088 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b028_22), 45096 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b030_22), 45104 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b038_22), 45112 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b039_22), 45113 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b03a_22), 45114 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b03b_22), 45115 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b03c_22), 45116 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b040_22), 45120 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b048_22), 45128 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b050_22), 45136 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b058_22), 45144 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b060_22), 45152 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b068_22), 45160 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b070_22), 45168 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b078_22), 45176 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b079_22), 45177 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b07a_22), 45178 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b07b_22), 45179 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b07c_22), 45180 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b080_22), 45184 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b088_22), 45192 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b090_22), 45200 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b098_22), 45208 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b0a0_22), 45216 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b0a8_22), 45224 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b0b0_22), 45232 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b0b8_22), 45240 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b0b9_22), 45241 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b0ba_22), 45242 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b0bb_22), 45243 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b0bc_22), 45244 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b0c0_22), 45248 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b0c8_22), 45256 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b0d0_22), 45264 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b0d8_22), 45272 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b0e0_22), 45280 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b0e8_22), 45288 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b0f0_22), 45296 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b0f8_22), 45304 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b0f9_22), 45305 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b0fa_22), 45306 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b0fb_22), 45307 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b0fc_22), 45308 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b100_22), 45312 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b108_22), 45320 }, /* CMPM */ { (cpuop_func*)CPUFUNC(op_b110_22), 45328 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b118_22), 45336 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b120_22), 45344 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b128_22), 45352 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b130_22), 45360 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b138_22), 45368 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b139_22), 45369 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b140_22), 45376 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b148_22), 45384 }, /* CMPM */ { (cpuop_func*)CPUFUNC(op_b150_22), 45392 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b158_22), 45400 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b160_22), 45408 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b168_22), 45416 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b170_22), 45424 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b178_22), 45432 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b179_22), 45433 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b180_22), 45440 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b188_22), 45448 }, /* CMPM */ { (cpuop_func*)CPUFUNC(op_b190_22), 45456 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b198_22), 45464 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b1a0_22), 45472 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b1a8_22), 45480 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b1b0_22), 45488 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b1b8_22), 45496 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b1b9_22), 45497 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b1c0_22), 45504 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b1c8_22), 45512 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b1d0_22), 45520 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b1d8_22), 45528 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b1e0_22), 45536 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b1e8_22), 45544 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b1f0_22), 45552 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b1f8_22), 45560 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b1f9_22), 45561 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b1fa_22), 45562 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b1fb_22), 45563 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b1fc_22), 45564 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_c000_22), 49152 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c010_22), 49168 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c018_22), 49176 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c020_22), 49184 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c028_22), 49192 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c030_22), 49200 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c038_22), 49208 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c039_22), 49209 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c03a_22), 49210 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c03b_22), 49211 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c03c_22), 49212 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c040_22), 49216 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c050_22), 49232 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c058_22), 49240 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c060_22), 49248 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c068_22), 49256 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c070_22), 49264 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c078_22), 49272 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c079_22), 49273 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c07a_22), 49274 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c07b_22), 49275 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c07c_22), 49276 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c080_22), 49280 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c090_22), 49296 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c098_22), 49304 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c0a0_22), 49312 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c0a8_22), 49320 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c0b0_22), 49328 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c0b8_22), 49336 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c0b9_22), 49337 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c0ba_22), 49338 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c0bb_22), 49339 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c0bc_22), 49340 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c0c0_22), 49344 }, /* MULU */ { (cpuop_func*)CPUFUNC(op_c0d0_22), 49360 }, /* MULU */ { (cpuop_func*)CPUFUNC(op_c0d8_22), 49368 }, /* MULU */ { (cpuop_func*)CPUFUNC(op_c0e0_22), 49376 }, /* MULU */ { (cpuop_func*)CPUFUNC(op_c0e8_22), 49384 }, /* MULU */ { (cpuop_func*)CPUFUNC(op_c0f0_22), 49392 }, /* MULU */ { (cpuop_func*)CPUFUNC(op_c0f8_22), 49400 }, /* MULU */ { (cpuop_func*)CPUFUNC(op_c0f9_22), 49401 }, /* MULU */ { (cpuop_func*)CPUFUNC(op_c0fa_22), 49402 }, /* MULU */ { (cpuop_func*)CPUFUNC(op_c0fb_22), 49403 }, /* MULU */ { (cpuop_func*)CPUFUNC(op_c0fc_22), 49404 }, /* MULU */ { (cpuop_func*)CPUFUNC(op_c100_22), 49408 }, /* ABCD */ { (cpuop_func*)CPUFUNC(op_c108_22), 49416 }, /* ABCD */ { (cpuop_func*)CPUFUNC(op_c110_22), 49424 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c118_22), 49432 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c120_22), 49440 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c128_22), 49448 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c130_22), 49456 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c138_22), 49464 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c139_22), 49465 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c140_22), 49472 }, /* EXG */ { (cpuop_func*)CPUFUNC(op_c148_22), 49480 }, /* EXG */ { (cpuop_func*)CPUFUNC(op_c150_22), 49488 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c158_22), 49496 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c160_22), 49504 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c168_22), 49512 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c170_22), 49520 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c178_22), 49528 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c179_22), 49529 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c188_22), 49544 }, /* EXG */ { (cpuop_func*)CPUFUNC(op_c190_22), 49552 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c198_22), 49560 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c1a0_22), 49568 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c1a8_22), 49576 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c1b0_22), 49584 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c1b8_22), 49592 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c1b9_22), 49593 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c1c0_22), 49600 }, /* MULS */ { (cpuop_func*)CPUFUNC(op_c1d0_22), 49616 }, /* MULS */ { (cpuop_func*)CPUFUNC(op_c1d8_22), 49624 }, /* MULS */ { (cpuop_func*)CPUFUNC(op_c1e0_22), 49632 }, /* MULS */ { (cpuop_func*)CPUFUNC(op_c1e8_22), 49640 }, /* MULS */ { (cpuop_func*)CPUFUNC(op_c1f0_22), 49648 }, /* MULS */ { (cpuop_func*)CPUFUNC(op_c1f8_22), 49656 }, /* MULS */ { (cpuop_func*)CPUFUNC(op_c1f9_22), 49657 }, /* MULS */ { (cpuop_func*)CPUFUNC(op_c1fa_22), 49658 }, /* MULS */ { (cpuop_func*)CPUFUNC(op_c1fb_22), 49659 }, /* MULS */ { (cpuop_func*)CPUFUNC(op_c1fc_22), 49660 }, /* MULS */ { (cpuop_func*)CPUFUNC(op_d000_22), 53248 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d010_22), 53264 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d018_22), 53272 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d020_22), 53280 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d028_22), 53288 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d030_22), 53296 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d038_22), 53304 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d039_22), 53305 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d03a_22), 53306 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d03b_22), 53307 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d03c_22), 53308 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d040_22), 53312 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d048_22), 53320 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d050_22), 53328 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d058_22), 53336 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d060_22), 53344 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d068_22), 53352 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d070_22), 53360 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d078_22), 53368 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d079_22), 53369 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d07a_22), 53370 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d07b_22), 53371 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d07c_22), 53372 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d080_22), 53376 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d088_22), 53384 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d090_22), 53392 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d098_22), 53400 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d0a0_22), 53408 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d0a8_22), 53416 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d0b0_22), 53424 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d0b8_22), 53432 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d0b9_22), 53433 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d0ba_22), 53434 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d0bb_22), 53435 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d0bc_22), 53436 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d0c0_22), 53440 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d0c8_22), 53448 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d0d0_22), 53456 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d0d8_22), 53464 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d0e0_22), 53472 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d0e8_22), 53480 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d0f0_22), 53488 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d0f8_22), 53496 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d0f9_22), 53497 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d0fa_22), 53498 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d0fb_22), 53499 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d0fc_22), 53500 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d100_22), 53504 }, /* ADDX */ { (cpuop_func*)CPUFUNC(op_d108_22), 53512 }, /* ADDX */ { (cpuop_func*)CPUFUNC(op_d110_22), 53520 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d118_22), 53528 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d120_22), 53536 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d128_22), 53544 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d130_22), 53552 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d138_22), 53560 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d139_22), 53561 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d140_22), 53568 }, /* ADDX */ { (cpuop_func*)CPUFUNC(op_d148_22), 53576 }, /* ADDX */ { (cpuop_func*)CPUFUNC(op_d150_22), 53584 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d158_22), 53592 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d160_22), 53600 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d168_22), 53608 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d170_22), 53616 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d178_22), 53624 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d179_22), 53625 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d180_22), 53632 }, /* ADDX */ { (cpuop_func*)CPUFUNC(op_d188_22), 53640 }, /* ADDX */ { (cpuop_func*)CPUFUNC(op_d190_22), 53648 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d198_22), 53656 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d1a0_22), 53664 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d1a8_22), 53672 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d1b0_22), 53680 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d1b8_22), 53688 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d1b9_22), 53689 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d1c0_22), 53696 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d1c8_22), 53704 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d1d0_22), 53712 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d1d8_22), 53720 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d1e0_22), 53728 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d1e8_22), 53736 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d1f0_22), 53744 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d1f8_22), 53752 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d1f9_22), 53753 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d1fa_22), 53754 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d1fb_22), 53755 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d1fc_22), 53756 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_e000_22), 57344 }, /* ASR */ { (cpuop_func*)CPUFUNC(op_e008_22), 57352 }, /* LSR */ { (cpuop_func*)CPUFUNC(op_e010_22), 57360 }, /* ROXR */ { (cpuop_func*)CPUFUNC(op_e018_22), 57368 }, /* ROR */ { (cpuop_func*)CPUFUNC(op_e020_22), 57376 }, /* ASR */ { (cpuop_func*)CPUFUNC(op_e028_22), 57384 }, /* LSR */ { (cpuop_func*)CPUFUNC(op_e030_22), 57392 }, /* ROXR */ { (cpuop_func*)CPUFUNC(op_e038_22), 57400 }, /* ROR */ { (cpuop_func*)CPUFUNC(op_e040_22), 57408 }, /* ASR */ { (cpuop_func*)CPUFUNC(op_e048_22), 57416 }, /* LSR */ { (cpuop_func*)CPUFUNC(op_e050_22), 57424 }, /* ROXR */ { (cpuop_func*)CPUFUNC(op_e058_22), 57432 }, /* ROR */ { (cpuop_func*)CPUFUNC(op_e060_22), 57440 }, /* ASR */ { (cpuop_func*)CPUFUNC(op_e068_22), 57448 }, /* LSR */ { (cpuop_func*)CPUFUNC(op_e070_22), 57456 }, /* ROXR */ { (cpuop_func*)CPUFUNC(op_e078_22), 57464 }, /* ROR */ { (cpuop_func*)CPUFUNC(op_e080_22), 57472 }, /* ASR */ { (cpuop_func*)CPUFUNC(op_e088_22), 57480 }, /* LSR */ { (cpuop_func*)CPUFUNC(op_e090_22), 57488 }, /* ROXR */ { (cpuop_func*)CPUFUNC(op_e098_22), 57496 }, /* ROR */ { (cpuop_func*)CPUFUNC(op_e0a0_22), 57504 }, /* ASR */ { (cpuop_func*)CPUFUNC(op_e0a8_22), 57512 }, /* LSR */ { (cpuop_func*)CPUFUNC(op_e0b0_22), 57520 }, /* ROXR */ { (cpuop_func*)CPUFUNC(op_e0b8_22), 57528 }, /* ROR */ { (cpuop_func*)CPUFUNC(op_e0d0_22), 57552 }, /* ASRW */ { (cpuop_func*)CPUFUNC(op_e0d8_22), 57560 }, /* ASRW */ { (cpuop_func*)CPUFUNC(op_e0e0_22), 57568 }, /* ASRW */ { (cpuop_func*)CPUFUNC(op_e0e8_22), 57576 }, /* ASRW */ { (cpuop_func*)CPUFUNC(op_e0f0_22), 57584 }, /* ASRW */ { (cpuop_func*)CPUFUNC(op_e0f8_22), 57592 }, /* ASRW */ { (cpuop_func*)CPUFUNC(op_e0f9_22), 57593 }, /* ASRW */ { (cpuop_func*)CPUFUNC(op_e100_22), 57600 }, /* ASL */ { (cpuop_func*)CPUFUNC(op_e108_22), 57608 }, /* LSL */ { (cpuop_func*)CPUFUNC(op_e110_22), 57616 }, /* ROXL */ { (cpuop_func*)CPUFUNC(op_e118_22), 57624 }, /* ROL */ { (cpuop_func*)CPUFUNC(op_e120_22), 57632 }, /* ASL */ { (cpuop_func*)CPUFUNC(op_e128_22), 57640 }, /* LSL */ { (cpuop_func*)CPUFUNC(op_e130_22), 57648 }, /* ROXL */ { (cpuop_func*)CPUFUNC(op_e138_22), 57656 }, /* ROL */ { (cpuop_func*)CPUFUNC(op_e140_22), 57664 }, /* ASL */ { (cpuop_func*)CPUFUNC(op_e148_22), 57672 }, /* LSL */ { (cpuop_func*)CPUFUNC(op_e150_22), 57680 }, /* ROXL */ { (cpuop_func*)CPUFUNC(op_e158_22), 57688 }, /* ROL */ { (cpuop_func*)CPUFUNC(op_e160_22), 57696 }, /* ASL */ { (cpuop_func*)CPUFUNC(op_e168_22), 57704 }, /* LSL */ { (cpuop_func*)CPUFUNC(op_e170_22), 57712 }, /* ROXL */ { (cpuop_func*)CPUFUNC(op_e178_22), 57720 }, /* ROL */ { (cpuop_func*)CPUFUNC(op_e180_22), 57728 }, /* ASL */ { (cpuop_func*)CPUFUNC(op_e188_22), 57736 }, /* LSL */ { (cpuop_func*)CPUFUNC(op_e190_22), 57744 }, /* ROXL */ { (cpuop_func*)CPUFUNC(op_e198_22), 57752 }, /* ROL */ { (cpuop_func*)CPUFUNC(op_e1a0_22), 57760 }, /* ASL */ { (cpuop_func*)CPUFUNC(op_e1a8_22), 57768 }, /* LSL */ { (cpuop_func*)CPUFUNC(op_e1b0_22), 57776 }, /* ROXL */ { (cpuop_func*)CPUFUNC(op_e1b8_22), 57784 }, /* ROL */ { (cpuop_func*)CPUFUNC(op_e1d0_22), 57808 }, /* ASLW */ { (cpuop_func*)CPUFUNC(op_e1d8_22), 57816 }, /* ASLW */ { (cpuop_func*)CPUFUNC(op_e1e0_22), 57824 }, /* ASLW */ { (cpuop_func*)CPUFUNC(op_e1e8_22), 57832 }, /* ASLW */ { (cpuop_func*)CPUFUNC(op_e1f0_22), 57840 }, /* ASLW */ { (cpuop_func*)CPUFUNC(op_e1f8_22), 57848 }, /* ASLW */ { (cpuop_func*)CPUFUNC(op_e1f9_22), 57849 }, /* ASLW */ { (cpuop_func*)CPUFUNC(op_e2d0_22), 58064 }, /* LSRW */ { (cpuop_func*)CPUFUNC(op_e2d8_22), 58072 }, /* LSRW */ { (cpuop_func*)CPUFUNC(op_e2e0_22), 58080 }, /* LSRW */ { (cpuop_func*)CPUFUNC(op_e2e8_22), 58088 }, /* LSRW */ { (cpuop_func*)CPUFUNC(op_e2f0_22), 58096 }, /* LSRW */ { (cpuop_func*)CPUFUNC(op_e2f8_22), 58104 }, /* LSRW */ { (cpuop_func*)CPUFUNC(op_e2f9_22), 58105 }, /* LSRW */ { (cpuop_func*)CPUFUNC(op_e3d0_22), 58320 }, /* LSLW */ { (cpuop_func*)CPUFUNC(op_e3d8_22), 58328 }, /* LSLW */ { (cpuop_func*)CPUFUNC(op_e3e0_22), 58336 }, /* LSLW */ { (cpuop_func*)CPUFUNC(op_e3e8_22), 58344 }, /* LSLW */ { (cpuop_func*)CPUFUNC(op_e3f0_22), 58352 }, /* LSLW */ { (cpuop_func*)CPUFUNC(op_e3f8_22), 58360 }, /* LSLW */ { (cpuop_func*)CPUFUNC(op_e3f9_22), 58361 }, /* LSLW */ { (cpuop_func*)CPUFUNC(op_e4d0_22), 58576 }, /* ROXRW */ { (cpuop_func*)CPUFUNC(op_e4d8_22), 58584 }, /* ROXRW */ { (cpuop_func*)CPUFUNC(op_e4e0_22), 58592 }, /* ROXRW */ { (cpuop_func*)CPUFUNC(op_e4e8_22), 58600 }, /* ROXRW */ { (cpuop_func*)CPUFUNC(op_e4f0_22), 58608 }, /* ROXRW */ { (cpuop_func*)CPUFUNC(op_e4f8_22), 58616 }, /* ROXRW */ { (cpuop_func*)CPUFUNC(op_e4f9_22), 58617 }, /* ROXRW */ { (cpuop_func*)CPUFUNC(op_e5d0_22), 58832 }, /* ROXLW */ { (cpuop_func*)CPUFUNC(op_e5d8_22), 58840 }, /* ROXLW */ { (cpuop_func*)CPUFUNC(op_e5e0_22), 58848 }, /* ROXLW */ { (cpuop_func*)CPUFUNC(op_e5e8_22), 58856 }, /* ROXLW */ { (cpuop_func*)CPUFUNC(op_e5f0_22), 58864 }, /* ROXLW */ { (cpuop_func*)CPUFUNC(op_e5f8_22), 58872 }, /* ROXLW */ { (cpuop_func*)CPUFUNC(op_e5f9_22), 58873 }, /* ROXLW */ { (cpuop_func*)CPUFUNC(op_e6d0_22), 59088 }, /* RORW */ { (cpuop_func*)CPUFUNC(op_e6d8_22), 59096 }, /* RORW */ { (cpuop_func*)CPUFUNC(op_e6e0_22), 59104 }, /* RORW */ { (cpuop_func*)CPUFUNC(op_e6e8_22), 59112 }, /* RORW */ { (cpuop_func*)CPUFUNC(op_e6f0_22), 59120 }, /* RORW */ { (cpuop_func*)CPUFUNC(op_e6f8_22), 59128 }, /* RORW */ { (cpuop_func*)CPUFUNC(op_e6f9_22), 59129 }, /* RORW */ { (cpuop_func*)CPUFUNC(op_e7d0_22), 59344 }, /* ROLW */ { (cpuop_func*)CPUFUNC(op_e7d8_22), 59352 }, /* ROLW */ { (cpuop_func*)CPUFUNC(op_e7e0_22), 59360 }, /* ROLW */ { (cpuop_func*)CPUFUNC(op_e7e8_22), 59368 }, /* ROLW */ { (cpuop_func*)CPUFUNC(op_e7f0_22), 59376 }, /* ROLW */ { (cpuop_func*)CPUFUNC(op_e7f8_22), 59384 }, /* ROLW */ { (cpuop_func*)CPUFUNC(op_e7f9_22), 59385 }, /* ROLW */ { (cpuop_func*)CPUFUNC(op_e8c0_22), 59584 }, /* BFTST */ { (cpuop_func*)CPUFUNC(op_e8d0_22), 59600 }, /* BFTST */ { (cpuop_func*)CPUFUNC(op_e8e8_22), 59624 }, /* BFTST */ { (cpuop_func*)CPUFUNC(op_e8f0_22), 59632 }, /* BFTST */ { (cpuop_func*)CPUFUNC(op_e8f8_22), 59640 }, /* BFTST */ { (cpuop_func*)CPUFUNC(op_e8f9_22), 59641 }, /* BFTST */ { (cpuop_func*)CPUFUNC(op_e8fa_22), 59642 }, /* BFTST */ { (cpuop_func*)CPUFUNC(op_e8fb_22), 59643 }, /* BFTST */ { (cpuop_func*)CPUFUNC(op_e9c0_22), 59840 }, /* BFEXTU */ { (cpuop_func*)CPUFUNC(op_e9d0_22), 59856 }, /* BFEXTU */ { (cpuop_func*)CPUFUNC(op_e9e8_22), 59880 }, /* BFEXTU */ { (cpuop_func*)CPUFUNC(op_e9f0_22), 59888 }, /* BFEXTU */ { (cpuop_func*)CPUFUNC(op_e9f8_22), 59896 }, /* BFEXTU */ { (cpuop_func*)CPUFUNC(op_e9f9_22), 59897 }, /* BFEXTU */ { (cpuop_func*)CPUFUNC(op_e9fa_22), 59898 }, /* BFEXTU */ { (cpuop_func*)CPUFUNC(op_e9fb_22), 59899 }, /* BFEXTU */ { (cpuop_func*)CPUFUNC(op_eac0_22), 60096 }, /* BFCHG */ { (cpuop_func*)CPUFUNC(op_ead0_22), 60112 }, /* BFCHG */ { (cpuop_func*)CPUFUNC(op_eae8_22), 60136 }, /* BFCHG */ { (cpuop_func*)CPUFUNC(op_eaf0_22), 60144 }, /* BFCHG */ { (cpuop_func*)CPUFUNC(op_eaf8_22), 60152 }, /* BFCHG */ { (cpuop_func*)CPUFUNC(op_eaf9_22), 60153 }, /* BFCHG */ { (cpuop_func*)CPUFUNC(op_ebc0_22), 60352 }, /* BFEXTS */ { (cpuop_func*)CPUFUNC(op_ebd0_22), 60368 }, /* BFEXTS */ { (cpuop_func*)CPUFUNC(op_ebe8_22), 60392 }, /* BFEXTS */ { (cpuop_func*)CPUFUNC(op_ebf0_22), 60400 }, /* BFEXTS */ { (cpuop_func*)CPUFUNC(op_ebf8_22), 60408 }, /* BFEXTS */ { (cpuop_func*)CPUFUNC(op_ebf9_22), 60409 }, /* BFEXTS */ { (cpuop_func*)CPUFUNC(op_ebfa_22), 60410 }, /* BFEXTS */ { (cpuop_func*)CPUFUNC(op_ebfb_22), 60411 }, /* BFEXTS */ { (cpuop_func*)CPUFUNC(op_ecc0_22), 60608 }, /* BFCLR */ { (cpuop_func*)CPUFUNC(op_ecd0_22), 60624 }, /* BFCLR */ { (cpuop_func*)CPUFUNC(op_ece8_22), 60648 }, /* BFCLR */ { (cpuop_func*)CPUFUNC(op_ecf0_22), 60656 }, /* BFCLR */ { (cpuop_func*)CPUFUNC(op_ecf8_22), 60664 }, /* BFCLR */ { (cpuop_func*)CPUFUNC(op_ecf9_22), 60665 }, /* BFCLR */ { (cpuop_func*)CPUFUNC(op_edc0_22), 60864 }, /* BFFFO */ { (cpuop_func*)CPUFUNC(op_edd0_22), 60880 }, /* BFFFO */ { (cpuop_func*)CPUFUNC(op_ede8_22), 60904 }, /* BFFFO */ { (cpuop_func*)CPUFUNC(op_edf0_22), 60912 }, /* BFFFO */ { (cpuop_func*)CPUFUNC(op_edf8_22), 60920 }, /* BFFFO */ { (cpuop_func*)CPUFUNC(op_edf9_22), 60921 }, /* BFFFO */ { (cpuop_func*)CPUFUNC(op_edfa_22), 60922 }, /* BFFFO */ { (cpuop_func*)CPUFUNC(op_edfb_22), 60923 }, /* BFFFO */ { (cpuop_func*)CPUFUNC(op_eec0_22), 61120 }, /* BFSET */ { (cpuop_func*)CPUFUNC(op_eed0_22), 61136 }, /* BFSET */ { (cpuop_func*)CPUFUNC(op_eee8_22), 61160 }, /* BFSET */ { (cpuop_func*)CPUFUNC(op_eef0_22), 61168 }, /* BFSET */ { (cpuop_func*)CPUFUNC(op_eef8_22), 61176 }, /* BFSET */ { (cpuop_func*)CPUFUNC(op_eef9_22), 61177 }, /* BFSET */ { (cpuop_func*)CPUFUNC(op_efc0_22), 61376 }, /* BFINS */ { (cpuop_func*)CPUFUNC(op_efd0_22), 61392 }, /* BFINS */ { (cpuop_func*)CPUFUNC(op_efe8_22), 61416 }, /* BFINS */ { (cpuop_func*)CPUFUNC(op_eff0_22), 61424 }, /* BFINS */ { (cpuop_func*)CPUFUNC(op_eff8_22), 61432 }, /* BFINS */ { (cpuop_func*)CPUFUNC(op_eff9_22), 61433 }, /* BFINS */ { (cpuop_func*)CPUFUNC(op_f000_22), 61440 }, /* MMUOP030 */ { (cpuop_func*)CPUFUNC(op_f008_22), 61448 }, /* MMUOP030 */ { (cpuop_func*)CPUFUNC(op_f010_22), 61456 }, /* MMUOP030 */ { (cpuop_func*)CPUFUNC(op_f018_22), 61464 }, /* MMUOP030 */ { (cpuop_func*)CPUFUNC(op_f020_22), 61472 }, /* MMUOP030 */ { (cpuop_func*)CPUFUNC(op_f028_22), 61480 }, /* MMUOP030 */ { (cpuop_func*)CPUFUNC(op_f030_22), 61488 }, /* MMUOP030 */ { (cpuop_func*)CPUFUNC(op_f038_22), 61496 }, /* MMUOP030 */ { (cpuop_func*)CPUFUNC(op_f039_22), 61497 }, /* MMUOP030 */ { (cpuop_func*)CPUFUNC(op_f200_22), 61952 }, /* FPP */ { (cpuop_func*)CPUFUNC(op_f208_22), 61960 }, /* FPP */ { (cpuop_func*)CPUFUNC(op_f210_22), 61968 }, /* FPP */ { (cpuop_func*)CPUFUNC(op_f218_22), 61976 }, /* FPP */ { (cpuop_func*)CPUFUNC(op_f220_22), 61984 }, /* FPP */ { (cpuop_func*)CPUFUNC(op_f228_22), 61992 }, /* FPP */ { (cpuop_func*)CPUFUNC(op_f230_22), 62000 }, /* FPP */ { (cpuop_func*)CPUFUNC(op_f238_22), 62008 }, /* FPP */ { (cpuop_func*)CPUFUNC(op_f239_22), 62009 }, /* FPP */ { (cpuop_func*)CPUFUNC(op_f23a_22), 62010 }, /* FPP */ { (cpuop_func*)CPUFUNC(op_f23b_22), 62011 }, /* FPP */ { (cpuop_func*)CPUFUNC(op_f23c_22), 62012 }, /* FPP */ { (cpuop_func*)CPUFUNC(op_f240_22), 62016 }, /* FScc */ { (cpuop_func*)CPUFUNC(op_f248_22), 62024 }, /* FDBcc */ { (cpuop_func*)CPUFUNC(op_f250_22), 62032 }, /* FScc */ { (cpuop_func*)CPUFUNC(op_f258_22), 62040 }, /* FScc */ { (cpuop_func*)CPUFUNC(op_f260_22), 62048 }, /* FScc */ { (cpuop_func*)CPUFUNC(op_f268_22), 62056 }, /* FScc */ { (cpuop_func*)CPUFUNC(op_f270_22), 62064 }, /* FScc */ { (cpuop_func*)CPUFUNC(op_f278_22), 62072 }, /* FScc */ { (cpuop_func*)CPUFUNC(op_f279_22), 62073 }, /* FScc */ { (cpuop_func*)CPUFUNC(op_f27a_22), 62074 }, /* FTRAPcc */ { (cpuop_func*)CPUFUNC(op_f27b_22), 62075 }, /* FTRAPcc */ { (cpuop_func*)CPUFUNC(op_f27c_22), 62076 }, /* FTRAPcc */ { (cpuop_func*)CPUFUNC(op_f280_22), 62080 }, /* FBcc */ { (cpuop_func*)CPUFUNC(op_f2c0_22), 62144 }, /* FBcc */ { (cpuop_func*)CPUFUNC(op_f310_22), 62224 }, /* FSAVE */ { (cpuop_func*)CPUFUNC(op_f320_22), 62240 }, /* FSAVE */ { (cpuop_func*)CPUFUNC(op_f328_22), 62248 }, /* FSAVE */ { (cpuop_func*)CPUFUNC(op_f330_22), 62256 }, /* FSAVE */ { (cpuop_func*)CPUFUNC(op_f338_22), 62264 }, /* FSAVE */ { (cpuop_func*)CPUFUNC(op_f339_22), 62265 }, /* FSAVE */ { (cpuop_func*)CPUFUNC(op_f350_22), 62288 }, /* FRESTORE */ { (cpuop_func*)CPUFUNC(op_f358_22), 62296 }, /* FRESTORE */ { (cpuop_func*)CPUFUNC(op_f368_22), 62312 }, /* FRESTORE */ { (cpuop_func*)CPUFUNC(op_f370_22), 62320 }, /* FRESTORE */ { (cpuop_func*)CPUFUNC(op_f378_22), 62328 }, /* FRESTORE */ { (cpuop_func*)CPUFUNC(op_f379_22), 62329 }, /* FRESTORE */ { (cpuop_func*)CPUFUNC(op_f37a_22), 62330 }, /* FRESTORE */ { (cpuop_func*)CPUFUNC(op_f37b_22), 62331 }, /* FRESTORE */ { (cpuop_func*)CPUFUNC(op_f408_22), 62472 }, /* CINVL */ { (cpuop_func*)CPUFUNC(op_f410_22), 62480 }, /* CINVP */ { (cpuop_func*)CPUFUNC(op_f418_22), 62488 }, /* CINVA */ { (cpuop_func*)CPUFUNC(op_f419_22), 62489 }, /* CINVA */ { (cpuop_func*)CPUFUNC(op_f41a_22), 62490 }, /* CINVA */ { (cpuop_func*)CPUFUNC(op_f41b_22), 62491 }, /* CINVA */ { (cpuop_func*)CPUFUNC(op_f41c_22), 62492 }, /* CINVA */ { (cpuop_func*)CPUFUNC(op_f41d_22), 62493 }, /* CINVA */ { (cpuop_func*)CPUFUNC(op_f41e_22), 62494 }, /* CINVA */ { (cpuop_func*)CPUFUNC(op_f41f_22), 62495 }, /* CINVA */ { (cpuop_func*)CPUFUNC(op_f428_22), 62504 }, /* CPUSHL */ { (cpuop_func*)CPUFUNC(op_f430_22), 62512 }, /* CPUSHP */ { (cpuop_func*)CPUFUNC(op_f438_22), 62520 }, /* CPUSHA */ { (cpuop_func*)CPUFUNC(op_f439_22), 62521 }, /* CPUSHA */ { (cpuop_func*)CPUFUNC(op_f43a_22), 62522 }, /* CPUSHA */ { (cpuop_func*)CPUFUNC(op_f43b_22), 62523 }, /* CPUSHA */ { (cpuop_func*)CPUFUNC(op_f43c_22), 62524 }, /* CPUSHA */ { (cpuop_func*)CPUFUNC(op_f43d_22), 62525 }, /* CPUSHA */ { (cpuop_func*)CPUFUNC(op_f43e_22), 62526 }, /* CPUSHA */ { (cpuop_func*)CPUFUNC(op_f43f_22), 62527 }, /* CPUSHA */ { (cpuop_func*)CPUFUNC(op_f500_22), 62720 }, /* PFLUSHN */ { (cpuop_func*)CPUFUNC(op_f508_22), 62728 }, /* PFLUSH */ { (cpuop_func*)CPUFUNC(op_f510_22), 62736 }, /* PFLUSHAN */ { (cpuop_func*)CPUFUNC(op_f518_22), 62744 }, /* PFLUSHA */ { (cpuop_func*)CPUFUNC(op_f548_22), 62792 }, /* PTESTR */ { (cpuop_func*)CPUFUNC(op_f568_22), 62824 }, /* PTESTW */ { (cpuop_func*)CPUFUNC(op_f600_22), 62976 }, /* MOVE16 */ { (cpuop_func*)CPUFUNC(op_f608_22), 62984 }, /* MOVE16 */ { (cpuop_func*)CPUFUNC(op_f610_22), 62992 }, /* MOVE16 */ { (cpuop_func*)CPUFUNC(op_f618_22), 63000 }, /* MOVE16 */ { (cpuop_func*)CPUFUNC(op_f620_22), 63008 }, /* MOVE16 */ { 0, 0 }}; #endif /* CPUEMU_68000_ONLY */ #ifndef CPUEMU_68000_ONLY const struct cputbl CPUFUNC(op_smalltbl_24)[] = { { (cpuop_func*)CPUFUNC(op_0000_22), 0 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0010_22), 16 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0018_22), 24 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0020_22), 32 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0028_22), 40 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0030_22), 48 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0038_22), 56 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0039_22), 57 }, /* OR */ { (cpuop_func*)CPUFUNC(op_003c_22), 60 }, /* ORSR */ { (cpuop_func*)CPUFUNC(op_0040_22), 64 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0050_22), 80 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0058_22), 88 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0060_22), 96 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0068_22), 104 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0070_22), 112 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0078_22), 120 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0079_22), 121 }, /* OR */ { (cpuop_func*)CPUFUNC(op_007c_22), 124 }, /* ORSR */ { (cpuop_func*)CPUFUNC(op_0080_22), 128 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0090_22), 144 }, /* OR */ { (cpuop_func*)CPUFUNC(op_0098_22), 152 }, /* OR */ { (cpuop_func*)CPUFUNC(op_00a0_22), 160 }, /* OR */ { (cpuop_func*)CPUFUNC(op_00a8_22), 168 }, /* OR */ { (cpuop_func*)CPUFUNC(op_00b0_22), 176 }, /* OR */ { (cpuop_func*)CPUFUNC(op_00b8_22), 184 }, /* OR */ { (cpuop_func*)CPUFUNC(op_00b9_22), 185 }, /* OR */ { (cpuop_func*)CPUFUNC(op_00d0_22), 208 }, /* CHK2 */ { (cpuop_func*)CPUFUNC(op_00e8_22), 232 }, /* CHK2 */ { (cpuop_func*)CPUFUNC(op_00f0_22), 240 }, /* CHK2 */ { (cpuop_func*)CPUFUNC(op_00f8_22), 248 }, /* CHK2 */ { (cpuop_func*)CPUFUNC(op_00f9_22), 249 }, /* CHK2 */ { (cpuop_func*)CPUFUNC(op_00fa_22), 250 }, /* CHK2 */ { (cpuop_func*)CPUFUNC(op_00fb_22), 251 }, /* CHK2 */ { (cpuop_func*)CPUFUNC(op_0100_22), 256 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0108_22), 264 }, /* MVPMR */ { (cpuop_func*)CPUFUNC(op_0110_22), 272 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0118_22), 280 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0120_22), 288 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0128_22), 296 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0130_22), 304 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0138_22), 312 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0139_22), 313 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_013a_22), 314 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_013b_22), 315 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_013c_22), 316 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0140_22), 320 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0148_22), 328 }, /* MVPMR */ { (cpuop_func*)CPUFUNC(op_0150_22), 336 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0158_22), 344 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0160_22), 352 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0168_22), 360 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0170_22), 368 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0178_22), 376 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0179_22), 377 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_017a_22), 378 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_017b_22), 379 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0180_22), 384 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_0188_22), 392 }, /* MVPRM */ { (cpuop_func*)CPUFUNC(op_0190_22), 400 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_0198_22), 408 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_01a0_22), 416 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_01a8_22), 424 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_01b0_22), 432 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_01b8_22), 440 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_01b9_22), 441 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_01ba_22), 442 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_01bb_22), 443 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_01c0_22), 448 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_01c8_22), 456 }, /* MVPRM */ { (cpuop_func*)CPUFUNC(op_01d0_22), 464 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_01d8_22), 472 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_01e0_22), 480 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_01e8_22), 488 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_01f0_22), 496 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_01f8_22), 504 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_01f9_22), 505 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_01fa_22), 506 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_01fb_22), 507 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_0200_22), 512 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0210_22), 528 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0218_22), 536 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0220_22), 544 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0228_22), 552 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0230_22), 560 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0238_22), 568 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0239_22), 569 }, /* AND */ { (cpuop_func*)CPUFUNC(op_023c_22), 572 }, /* ANDSR */ { (cpuop_func*)CPUFUNC(op_0240_22), 576 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0250_22), 592 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0258_22), 600 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0260_22), 608 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0268_22), 616 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0270_22), 624 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0278_22), 632 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0279_22), 633 }, /* AND */ { (cpuop_func*)CPUFUNC(op_027c_22), 636 }, /* ANDSR */ { (cpuop_func*)CPUFUNC(op_0280_22), 640 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0290_22), 656 }, /* AND */ { (cpuop_func*)CPUFUNC(op_0298_22), 664 }, /* AND */ { (cpuop_func*)CPUFUNC(op_02a0_22), 672 }, /* AND */ { (cpuop_func*)CPUFUNC(op_02a8_22), 680 }, /* AND */ { (cpuop_func*)CPUFUNC(op_02b0_22), 688 }, /* AND */ { (cpuop_func*)CPUFUNC(op_02b8_22), 696 }, /* AND */ { (cpuop_func*)CPUFUNC(op_02b9_22), 697 }, /* AND */ { (cpuop_func*)CPUFUNC(op_02d0_22), 720 }, /* CHK2 */ { (cpuop_func*)CPUFUNC(op_02e8_22), 744 }, /* CHK2 */ { (cpuop_func*)CPUFUNC(op_02f0_22), 752 }, /* CHK2 */ { (cpuop_func*)CPUFUNC(op_02f8_22), 760 }, /* CHK2 */ { (cpuop_func*)CPUFUNC(op_02f9_22), 761 }, /* CHK2 */ { (cpuop_func*)CPUFUNC(op_02fa_22), 762 }, /* CHK2 */ { (cpuop_func*)CPUFUNC(op_02fb_22), 763 }, /* CHK2 */ { (cpuop_func*)CPUFUNC(op_0400_22), 1024 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0410_22), 1040 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0418_22), 1048 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0420_22), 1056 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0428_22), 1064 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0430_22), 1072 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0438_22), 1080 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0439_22), 1081 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0440_22), 1088 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0450_22), 1104 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0458_22), 1112 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0460_22), 1120 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0468_22), 1128 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0470_22), 1136 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0478_22), 1144 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0479_22), 1145 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0480_22), 1152 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0490_22), 1168 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_0498_22), 1176 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_04a0_22), 1184 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_04a8_22), 1192 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_04b0_22), 1200 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_04b8_22), 1208 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_04b9_22), 1209 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_04d0_22), 1232 }, /* CHK2 */ { (cpuop_func*)CPUFUNC(op_04e8_22), 1256 }, /* CHK2 */ { (cpuop_func*)CPUFUNC(op_04f0_22), 1264 }, /* CHK2 */ { (cpuop_func*)CPUFUNC(op_04f8_22), 1272 }, /* CHK2 */ { (cpuop_func*)CPUFUNC(op_04f9_22), 1273 }, /* CHK2 */ { (cpuop_func*)CPUFUNC(op_04fa_22), 1274 }, /* CHK2 */ { (cpuop_func*)CPUFUNC(op_04fb_22), 1275 }, /* CHK2 */ { (cpuop_func*)CPUFUNC(op_0600_22), 1536 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0610_22), 1552 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0618_22), 1560 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0620_22), 1568 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0628_22), 1576 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0630_22), 1584 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0638_22), 1592 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0639_22), 1593 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0640_22), 1600 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0650_22), 1616 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0658_22), 1624 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0660_22), 1632 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0668_22), 1640 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0670_22), 1648 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0678_22), 1656 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0679_22), 1657 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0680_22), 1664 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0690_22), 1680 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_0698_22), 1688 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_06a0_22), 1696 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_06a8_22), 1704 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_06b0_22), 1712 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_06b8_22), 1720 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_06b9_22), 1721 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_06c0_22), 1728 }, /* RTM */ { (cpuop_func*)CPUFUNC(op_06c8_22), 1736 }, /* RTM */ { (cpuop_func*)CPUFUNC(op_06d0_22), 1744 }, /* CALLM */ { (cpuop_func*)CPUFUNC(op_06e8_22), 1768 }, /* CALLM */ { (cpuop_func*)CPUFUNC(op_06f0_22), 1776 }, /* CALLM */ { (cpuop_func*)CPUFUNC(op_06f8_22), 1784 }, /* CALLM */ { (cpuop_func*)CPUFUNC(op_06f9_22), 1785 }, /* CALLM */ { (cpuop_func*)CPUFUNC(op_06fa_22), 1786 }, /* CALLM */ { (cpuop_func*)CPUFUNC(op_06fb_22), 1787 }, /* CALLM */ { (cpuop_func*)CPUFUNC(op_0800_22), 2048 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0810_22), 2064 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0818_22), 2072 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0820_22), 2080 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0828_22), 2088 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0830_22), 2096 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0838_22), 2104 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0839_22), 2105 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_083a_22), 2106 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_083b_22), 2107 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_083c_22), 2108 }, /* BTST */ { (cpuop_func*)CPUFUNC(op_0840_22), 2112 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0850_22), 2128 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0858_22), 2136 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0860_22), 2144 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0868_22), 2152 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0870_22), 2160 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0878_22), 2168 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0879_22), 2169 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_087a_22), 2170 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_087b_22), 2171 }, /* BCHG */ { (cpuop_func*)CPUFUNC(op_0880_22), 2176 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_0890_22), 2192 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_0898_22), 2200 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_08a0_22), 2208 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_08a8_22), 2216 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_08b0_22), 2224 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_08b8_22), 2232 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_08b9_22), 2233 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_08ba_22), 2234 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_08bb_22), 2235 }, /* BCLR */ { (cpuop_func*)CPUFUNC(op_08c0_22), 2240 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_08d0_22), 2256 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_08d8_22), 2264 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_08e0_22), 2272 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_08e8_22), 2280 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_08f0_22), 2288 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_08f8_22), 2296 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_08f9_22), 2297 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_08fa_22), 2298 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_08fb_22), 2299 }, /* BSET */ { (cpuop_func*)CPUFUNC(op_0a00_22), 2560 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a10_22), 2576 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a18_22), 2584 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a20_22), 2592 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a28_22), 2600 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a30_22), 2608 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a38_22), 2616 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a39_22), 2617 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a3c_22), 2620 }, /* EORSR */ { (cpuop_func*)CPUFUNC(op_0a40_22), 2624 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a50_22), 2640 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a58_22), 2648 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a60_22), 2656 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a68_22), 2664 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a70_22), 2672 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a78_22), 2680 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a79_22), 2681 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a7c_22), 2684 }, /* EORSR */ { (cpuop_func*)CPUFUNC(op_0a80_22), 2688 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a90_22), 2704 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0a98_22), 2712 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0aa0_22), 2720 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0aa8_22), 2728 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0ab0_22), 2736 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0ab8_22), 2744 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0ab9_22), 2745 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_0ad0_22), 2768 }, /* CAS */ { (cpuop_func*)CPUFUNC(op_0ad8_22), 2776 }, /* CAS */ { (cpuop_func*)CPUFUNC(op_0ae0_22), 2784 }, /* CAS */ { (cpuop_func*)CPUFUNC(op_0ae8_22), 2792 }, /* CAS */ { (cpuop_func*)CPUFUNC(op_0af0_22), 2800 }, /* CAS */ { (cpuop_func*)CPUFUNC(op_0af8_22), 2808 }, /* CAS */ { (cpuop_func*)CPUFUNC(op_0af9_22), 2809 }, /* CAS */ { (cpuop_func*)CPUFUNC(op_0c00_22), 3072 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c10_22), 3088 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c18_22), 3096 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c20_22), 3104 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c28_22), 3112 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c30_22), 3120 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c38_22), 3128 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c39_22), 3129 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c3a_22), 3130 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c3b_22), 3131 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c40_22), 3136 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c50_22), 3152 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c58_22), 3160 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c60_22), 3168 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c68_22), 3176 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c70_22), 3184 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c78_22), 3192 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c79_22), 3193 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c7a_22), 3194 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c7b_22), 3195 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c80_22), 3200 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c90_22), 3216 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0c98_22), 3224 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0ca0_22), 3232 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0ca8_22), 3240 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0cb0_22), 3248 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0cb8_22), 3256 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0cb9_22), 3257 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0cba_22), 3258 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0cbb_22), 3259 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_0cd0_22), 3280 }, /* CAS */ { (cpuop_func*)CPUFUNC(op_0cd8_22), 3288 }, /* CAS */ { (cpuop_func*)CPUFUNC(op_0ce0_22), 3296 }, /* CAS */ { (cpuop_func*)CPUFUNC(op_0ce8_22), 3304 }, /* CAS */ { (cpuop_func*)CPUFUNC(op_0cf0_22), 3312 }, /* CAS */ { (cpuop_func*)CPUFUNC(op_0cf8_22), 3320 }, /* CAS */ { (cpuop_func*)CPUFUNC(op_0cf9_22), 3321 }, /* CAS */ { (cpuop_func*)CPUFUNC(op_0cfc_22), 3324 }, /* CAS2 */ { (cpuop_func*)CPUFUNC(op_0e10_22), 3600 }, /* MOVES */ { (cpuop_func*)CPUFUNC(op_0e18_22), 3608 }, /* MOVES */ { (cpuop_func*)CPUFUNC(op_0e20_22), 3616 }, /* MOVES */ { (cpuop_func*)CPUFUNC(op_0e28_22), 3624 }, /* MOVES */ { (cpuop_func*)CPUFUNC(op_0e30_22), 3632 }, /* MOVES */ { (cpuop_func*)CPUFUNC(op_0e38_22), 3640 }, /* MOVES */ { (cpuop_func*)CPUFUNC(op_0e39_22), 3641 }, /* MOVES */ { (cpuop_func*)CPUFUNC(op_0e50_22), 3664 }, /* MOVES */ { (cpuop_func*)CPUFUNC(op_0e58_22), 3672 }, /* MOVES */ { (cpuop_func*)CPUFUNC(op_0e60_22), 3680 }, /* MOVES */ { (cpuop_func*)CPUFUNC(op_0e68_22), 3688 }, /* MOVES */ { (cpuop_func*)CPUFUNC(op_0e70_22), 3696 }, /* MOVES */ { (cpuop_func*)CPUFUNC(op_0e78_22), 3704 }, /* MOVES */ { (cpuop_func*)CPUFUNC(op_0e79_22), 3705 }, /* MOVES */ { (cpuop_func*)CPUFUNC(op_0e90_22), 3728 }, /* MOVES */ { (cpuop_func*)CPUFUNC(op_0e98_22), 3736 }, /* MOVES */ { (cpuop_func*)CPUFUNC(op_0ea0_22), 3744 }, /* MOVES */ { (cpuop_func*)CPUFUNC(op_0ea8_22), 3752 }, /* MOVES */ { (cpuop_func*)CPUFUNC(op_0eb0_22), 3760 }, /* MOVES */ { (cpuop_func*)CPUFUNC(op_0eb8_22), 3768 }, /* MOVES */ { (cpuop_func*)CPUFUNC(op_0eb9_22), 3769 }, /* MOVES */ { (cpuop_func*)CPUFUNC(op_0ed0_22), 3792 }, /* CAS */ { (cpuop_func*)CPUFUNC(op_0ed8_22), 3800 }, /* CAS */ { (cpuop_func*)CPUFUNC(op_0ee0_22), 3808 }, /* CAS */ { (cpuop_func*)CPUFUNC(op_0ee8_22), 3816 }, /* CAS */ { (cpuop_func*)CPUFUNC(op_0ef0_22), 3824 }, /* CAS */ { (cpuop_func*)CPUFUNC(op_0ef8_22), 3832 }, /* CAS */ { (cpuop_func*)CPUFUNC(op_0ef9_22), 3833 }, /* CAS */ { (cpuop_func*)CPUFUNC(op_0efc_22), 3836 }, /* CAS2 */ { (cpuop_func*)CPUFUNC(op_1000_22), 4096 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1010_22), 4112 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1018_22), 4120 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1020_22), 4128 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1028_22), 4136 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1030_22), 4144 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1038_22), 4152 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1039_22), 4153 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_103a_22), 4154 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_103b_22), 4155 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_103c_22), 4156 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1080_22), 4224 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1090_22), 4240 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1098_22), 4248 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10a0_22), 4256 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10a8_22), 4264 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10b0_22), 4272 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10b8_22), 4280 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10b9_22), 4281 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10ba_22), 4282 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10bb_22), 4283 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10bc_22), 4284 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10c0_22), 4288 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10d0_22), 4304 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10d8_22), 4312 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10e0_22), 4320 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10e8_22), 4328 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10f0_22), 4336 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10f8_22), 4344 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10f9_22), 4345 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10fa_22), 4346 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10fb_22), 4347 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_10fc_22), 4348 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1100_22), 4352 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1110_22), 4368 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1118_22), 4376 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1120_22), 4384 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1128_22), 4392 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1130_22), 4400 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1138_22), 4408 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1139_22), 4409 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_113a_22), 4410 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_113b_22), 4411 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_113c_22), 4412 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1140_22), 4416 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1150_22), 4432 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1158_22), 4440 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1160_22), 4448 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1168_22), 4456 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1170_22), 4464 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1178_22), 4472 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1179_22), 4473 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_117a_22), 4474 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_117b_22), 4475 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_117c_22), 4476 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1180_22), 4480 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1190_22), 4496 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_1198_22), 4504 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11a0_22), 4512 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11a8_22), 4520 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11b0_22), 4528 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11b8_22), 4536 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11b9_22), 4537 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11ba_22), 4538 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11bb_22), 4539 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11bc_22), 4540 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11c0_22), 4544 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11d0_22), 4560 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11d8_22), 4568 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11e0_22), 4576 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11e8_22), 4584 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11f0_22), 4592 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11f8_22), 4600 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11f9_22), 4601 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11fa_22), 4602 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11fb_22), 4603 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_11fc_22), 4604 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_13c0_22), 5056 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_13d0_22), 5072 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_13d8_22), 5080 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_13e0_22), 5088 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_13e8_22), 5096 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_13f0_22), 5104 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_13f8_22), 5112 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_13f9_22), 5113 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_13fa_22), 5114 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_13fb_22), 5115 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_13fc_22), 5116 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2000_22), 8192 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2008_22), 8200 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2010_22), 8208 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2018_22), 8216 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2020_22), 8224 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2028_22), 8232 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2030_22), 8240 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2038_22), 8248 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2039_22), 8249 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_203a_22), 8250 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_203b_22), 8251 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_203c_22), 8252 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2040_22), 8256 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_2048_22), 8264 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_2050_22), 8272 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_2058_22), 8280 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_2060_22), 8288 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_2068_22), 8296 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_2070_22), 8304 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_2078_22), 8312 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_2079_22), 8313 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_207a_22), 8314 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_207b_22), 8315 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_207c_22), 8316 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_2080_22), 8320 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2088_22), 8328 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2090_22), 8336 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2098_22), 8344 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20a0_22), 8352 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20a8_22), 8360 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20b0_22), 8368 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20b8_22), 8376 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20b9_22), 8377 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20ba_22), 8378 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20bb_22), 8379 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20bc_22), 8380 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20c0_22), 8384 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20c8_22), 8392 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20d0_22), 8400 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20d8_22), 8408 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20e0_22), 8416 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20e8_22), 8424 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20f0_22), 8432 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20f8_22), 8440 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20f9_22), 8441 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20fa_22), 8442 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20fb_22), 8443 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_20fc_22), 8444 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2100_22), 8448 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2108_22), 8456 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2110_22), 8464 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2118_22), 8472 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2120_22), 8480 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2128_22), 8488 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2130_22), 8496 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2138_22), 8504 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2139_22), 8505 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_213a_22), 8506 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_213b_22), 8507 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_213c_22), 8508 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2140_22), 8512 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2148_22), 8520 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2150_22), 8528 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2158_22), 8536 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2160_22), 8544 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2168_22), 8552 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2170_22), 8560 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2178_22), 8568 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2179_22), 8569 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_217a_22), 8570 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_217b_22), 8571 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_217c_22), 8572 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2180_22), 8576 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2188_22), 8584 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2190_22), 8592 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_2198_22), 8600 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21a0_22), 8608 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21a8_22), 8616 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21b0_22), 8624 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21b8_22), 8632 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21b9_22), 8633 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21ba_22), 8634 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21bb_22), 8635 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21bc_22), 8636 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21c0_22), 8640 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21c8_22), 8648 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21d0_22), 8656 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21d8_22), 8664 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21e0_22), 8672 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21e8_22), 8680 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21f0_22), 8688 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21f8_22), 8696 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21f9_22), 8697 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21fa_22), 8698 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21fb_22), 8699 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_21fc_22), 8700 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_23c0_22), 9152 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_23c8_22), 9160 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_23d0_22), 9168 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_23d8_22), 9176 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_23e0_22), 9184 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_23e8_22), 9192 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_23f0_22), 9200 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_23f8_22), 9208 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_23f9_22), 9209 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_23fa_22), 9210 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_23fb_22), 9211 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_23fc_22), 9212 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3000_22), 12288 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3008_22), 12296 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3010_22), 12304 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3018_22), 12312 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3020_22), 12320 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3028_22), 12328 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3030_22), 12336 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3038_22), 12344 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3039_22), 12345 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_303a_22), 12346 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_303b_22), 12347 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_303c_22), 12348 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3040_22), 12352 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_3048_22), 12360 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_3050_22), 12368 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_3058_22), 12376 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_3060_22), 12384 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_3068_22), 12392 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_3070_22), 12400 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_3078_22), 12408 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_3079_22), 12409 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_307a_22), 12410 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_307b_22), 12411 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_307c_22), 12412 }, /* MOVEA */ { (cpuop_func*)CPUFUNC(op_3080_22), 12416 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3088_22), 12424 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3090_22), 12432 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3098_22), 12440 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30a0_22), 12448 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30a8_22), 12456 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30b0_22), 12464 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30b8_22), 12472 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30b9_22), 12473 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30ba_22), 12474 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30bb_22), 12475 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30bc_22), 12476 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30c0_22), 12480 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30c8_22), 12488 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30d0_22), 12496 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30d8_22), 12504 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30e0_22), 12512 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30e8_22), 12520 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30f0_22), 12528 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30f8_22), 12536 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30f9_22), 12537 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30fa_22), 12538 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30fb_22), 12539 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_30fc_22), 12540 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3100_22), 12544 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3108_22), 12552 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3110_22), 12560 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3118_22), 12568 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3120_22), 12576 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3128_22), 12584 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3130_22), 12592 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3138_22), 12600 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3139_22), 12601 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_313a_22), 12602 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_313b_22), 12603 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_313c_22), 12604 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3140_22), 12608 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3148_22), 12616 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3150_22), 12624 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3158_22), 12632 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3160_22), 12640 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3168_22), 12648 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3170_22), 12656 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3178_22), 12664 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3179_22), 12665 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_317a_22), 12666 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_317b_22), 12667 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_317c_22), 12668 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3180_22), 12672 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3188_22), 12680 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3190_22), 12688 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_3198_22), 12696 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31a0_22), 12704 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31a8_22), 12712 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31b0_22), 12720 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31b8_22), 12728 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31b9_22), 12729 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31ba_22), 12730 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31bb_22), 12731 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31bc_22), 12732 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31c0_22), 12736 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31c8_22), 12744 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31d0_22), 12752 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31d8_22), 12760 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31e0_22), 12768 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31e8_22), 12776 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31f0_22), 12784 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31f8_22), 12792 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31f9_22), 12793 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31fa_22), 12794 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31fb_22), 12795 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_31fc_22), 12796 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_33c0_22), 13248 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_33c8_22), 13256 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_33d0_22), 13264 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_33d8_22), 13272 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_33e0_22), 13280 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_33e8_22), 13288 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_33f0_22), 13296 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_33f8_22), 13304 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_33f9_22), 13305 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_33fa_22), 13306 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_33fb_22), 13307 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_33fc_22), 13308 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_4000_22), 16384 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4010_22), 16400 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4018_22), 16408 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4020_22), 16416 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4028_22), 16424 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4030_22), 16432 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4038_22), 16440 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4039_22), 16441 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4040_22), 16448 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4050_22), 16464 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4058_22), 16472 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4060_22), 16480 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4068_22), 16488 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4070_22), 16496 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4078_22), 16504 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4079_22), 16505 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4080_22), 16512 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4090_22), 16528 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_4098_22), 16536 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_40a0_22), 16544 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_40a8_22), 16552 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_40b0_22), 16560 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_40b8_22), 16568 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_40b9_22), 16569 }, /* NEGX */ { (cpuop_func*)CPUFUNC(op_40c0_22), 16576 }, /* MVSR2 */ { (cpuop_func*)CPUFUNC(op_40d0_22), 16592 }, /* MVSR2 */ { (cpuop_func*)CPUFUNC(op_40d8_22), 16600 }, /* MVSR2 */ { (cpuop_func*)CPUFUNC(op_40e0_22), 16608 }, /* MVSR2 */ { (cpuop_func*)CPUFUNC(op_40e8_22), 16616 }, /* MVSR2 */ { (cpuop_func*)CPUFUNC(op_40f0_22), 16624 }, /* MVSR2 */ { (cpuop_func*)CPUFUNC(op_40f8_22), 16632 }, /* MVSR2 */ { (cpuop_func*)CPUFUNC(op_40f9_22), 16633 }, /* MVSR2 */ { (cpuop_func*)CPUFUNC(op_4100_22), 16640 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_4110_22), 16656 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_4118_22), 16664 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_4120_22), 16672 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_4128_22), 16680 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_4130_22), 16688 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_4138_22), 16696 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_4139_22), 16697 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_413a_22), 16698 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_413b_22), 16699 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_413c_22), 16700 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_4180_22), 16768 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_4190_22), 16784 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_4198_22), 16792 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_41a0_22), 16800 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_41a8_22), 16808 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_41b0_22), 16816 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_41b8_22), 16824 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_41b9_22), 16825 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_41ba_22), 16826 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_41bb_22), 16827 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_41bc_22), 16828 }, /* CHK */ { (cpuop_func*)CPUFUNC(op_41d0_22), 16848 }, /* LEA */ { (cpuop_func*)CPUFUNC(op_41e8_22), 16872 }, /* LEA */ { (cpuop_func*)CPUFUNC(op_41f0_22), 16880 }, /* LEA */ { (cpuop_func*)CPUFUNC(op_41f8_22), 16888 }, /* LEA */ { (cpuop_func*)CPUFUNC(op_41f9_22), 16889 }, /* LEA */ { (cpuop_func*)CPUFUNC(op_41fa_22), 16890 }, /* LEA */ { (cpuop_func*)CPUFUNC(op_41fb_22), 16891 }, /* LEA */ { (cpuop_func*)CPUFUNC(op_4200_22), 16896 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4210_22), 16912 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4218_22), 16920 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4220_22), 16928 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4228_22), 16936 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4230_22), 16944 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4238_22), 16952 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4239_22), 16953 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4240_22), 16960 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4250_22), 16976 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4258_22), 16984 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4260_22), 16992 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4268_22), 17000 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4270_22), 17008 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4278_22), 17016 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4279_22), 17017 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4280_22), 17024 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4290_22), 17040 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_4298_22), 17048 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_42a0_22), 17056 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_42a8_22), 17064 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_42b0_22), 17072 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_42b8_22), 17080 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_42b9_22), 17081 }, /* CLR */ { (cpuop_func*)CPUFUNC(op_42c0_22), 17088 }, /* MVSR2 */ { (cpuop_func*)CPUFUNC(op_42d0_22), 17104 }, /* MVSR2 */ { (cpuop_func*)CPUFUNC(op_42d8_22), 17112 }, /* MVSR2 */ { (cpuop_func*)CPUFUNC(op_42e0_22), 17120 }, /* MVSR2 */ { (cpuop_func*)CPUFUNC(op_42e8_22), 17128 }, /* MVSR2 */ { (cpuop_func*)CPUFUNC(op_42f0_22), 17136 }, /* MVSR2 */ { (cpuop_func*)CPUFUNC(op_42f8_22), 17144 }, /* MVSR2 */ { (cpuop_func*)CPUFUNC(op_42f9_22), 17145 }, /* MVSR2 */ { (cpuop_func*)CPUFUNC(op_4400_22), 17408 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4410_22), 17424 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4418_22), 17432 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4420_22), 17440 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4428_22), 17448 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4430_22), 17456 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4438_22), 17464 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4439_22), 17465 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4440_22), 17472 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4450_22), 17488 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4458_22), 17496 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4460_22), 17504 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4468_22), 17512 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4470_22), 17520 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4478_22), 17528 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4479_22), 17529 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4480_22), 17536 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4490_22), 17552 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_4498_22), 17560 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_44a0_22), 17568 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_44a8_22), 17576 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_44b0_22), 17584 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_44b8_22), 17592 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_44b9_22), 17593 }, /* NEG */ { (cpuop_func*)CPUFUNC(op_44c0_22), 17600 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_44d0_22), 17616 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_44d8_22), 17624 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_44e0_22), 17632 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_44e8_22), 17640 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_44f0_22), 17648 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_44f8_22), 17656 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_44f9_22), 17657 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_44fa_22), 17658 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_44fb_22), 17659 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_44fc_22), 17660 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_4600_22), 17920 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4610_22), 17936 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4618_22), 17944 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4620_22), 17952 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4628_22), 17960 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4630_22), 17968 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4638_22), 17976 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4639_22), 17977 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4640_22), 17984 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4650_22), 18000 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4658_22), 18008 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4660_22), 18016 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4668_22), 18024 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4670_22), 18032 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4678_22), 18040 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4679_22), 18041 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4680_22), 18048 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4690_22), 18064 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_4698_22), 18072 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_46a0_22), 18080 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_46a8_22), 18088 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_46b0_22), 18096 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_46b8_22), 18104 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_46b9_22), 18105 }, /* NOT */ { (cpuop_func*)CPUFUNC(op_46c0_22), 18112 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_46d0_22), 18128 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_46d8_22), 18136 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_46e0_22), 18144 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_46e8_22), 18152 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_46f0_22), 18160 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_46f8_22), 18168 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_46f9_22), 18169 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_46fa_22), 18170 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_46fb_22), 18171 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_46fc_22), 18172 }, /* MV2SR */ { (cpuop_func*)CPUFUNC(op_4800_24), 18432 }, /* NBCD */ { (cpuop_func*)CPUFUNC(op_4808_22), 18440 }, /* LINK */ { (cpuop_func*)CPUFUNC(op_4810_24), 18448 }, /* NBCD */ { (cpuop_func*)CPUFUNC(op_4818_24), 18456 }, /* NBCD */ { (cpuop_func*)CPUFUNC(op_4820_24), 18464 }, /* NBCD */ { (cpuop_func*)CPUFUNC(op_4828_24), 18472 }, /* NBCD */ { (cpuop_func*)CPUFUNC(op_4830_24), 18480 }, /* NBCD */ { (cpuop_func*)CPUFUNC(op_4838_24), 18488 }, /* NBCD */ { (cpuop_func*)CPUFUNC(op_4839_24), 18489 }, /* NBCD */ { (cpuop_func*)CPUFUNC(op_4840_22), 18496 }, /* SWAP */ { (cpuop_func*)CPUFUNC(op_4848_22), 18504 }, /* BKPT */ { (cpuop_func*)CPUFUNC(op_4850_22), 18512 }, /* PEA */ { (cpuop_func*)CPUFUNC(op_4868_22), 18536 }, /* PEA */ { (cpuop_func*)CPUFUNC(op_4870_22), 18544 }, /* PEA */ { (cpuop_func*)CPUFUNC(op_4878_22), 18552 }, /* PEA */ { (cpuop_func*)CPUFUNC(op_4879_22), 18553 }, /* PEA */ { (cpuop_func*)CPUFUNC(op_487a_22), 18554 }, /* PEA */ { (cpuop_func*)CPUFUNC(op_487b_22), 18555 }, /* PEA */ { (cpuop_func*)CPUFUNC(op_4880_22), 18560 }, /* EXT */ { (cpuop_func*)CPUFUNC(op_4890_22), 18576 }, /* MVMLE */ { (cpuop_func*)CPUFUNC(op_48a0_22), 18592 }, /* MVMLE */ { (cpuop_func*)CPUFUNC(op_48a8_22), 18600 }, /* MVMLE */ { (cpuop_func*)CPUFUNC(op_48b0_22), 18608 }, /* MVMLE */ { (cpuop_func*)CPUFUNC(op_48b8_22), 18616 }, /* MVMLE */ { (cpuop_func*)CPUFUNC(op_48b9_22), 18617 }, /* MVMLE */ { (cpuop_func*)CPUFUNC(op_48c0_22), 18624 }, /* EXT */ { (cpuop_func*)CPUFUNC(op_48d0_22), 18640 }, /* MVMLE */ { (cpuop_func*)CPUFUNC(op_48e0_22), 18656 }, /* MVMLE */ { (cpuop_func*)CPUFUNC(op_48e8_22), 18664 }, /* MVMLE */ { (cpuop_func*)CPUFUNC(op_48f0_22), 18672 }, /* MVMLE */ { (cpuop_func*)CPUFUNC(op_48f8_22), 18680 }, /* MVMLE */ { (cpuop_func*)CPUFUNC(op_48f9_22), 18681 }, /* MVMLE */ { (cpuop_func*)CPUFUNC(op_49c0_22), 18880 }, /* EXT */ { (cpuop_func*)CPUFUNC(op_4a00_22), 18944 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a10_22), 18960 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a18_22), 18968 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a20_22), 18976 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a28_22), 18984 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a30_22), 18992 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a38_22), 19000 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a39_22), 19001 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a3a_22), 19002 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a3b_22), 19003 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a3c_22), 19004 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a40_22), 19008 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a48_22), 19016 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a50_22), 19024 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a58_22), 19032 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a60_22), 19040 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a68_22), 19048 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a70_22), 19056 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a78_22), 19064 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a79_22), 19065 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a7a_22), 19066 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a7b_22), 19067 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a7c_22), 19068 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a80_22), 19072 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a88_22), 19080 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a90_22), 19088 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4a98_22), 19096 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4aa0_22), 19104 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4aa8_22), 19112 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4ab0_22), 19120 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4ab8_22), 19128 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4ab9_22), 19129 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4aba_22), 19130 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4abb_22), 19131 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4abc_22), 19132 }, /* TST */ { (cpuop_func*)CPUFUNC(op_4ac0_22), 19136 }, /* TAS */ { (cpuop_func*)CPUFUNC(op_4ad0_22), 19152 }, /* TAS */ { (cpuop_func*)CPUFUNC(op_4ad8_22), 19160 }, /* TAS */ { (cpuop_func*)CPUFUNC(op_4ae0_22), 19168 }, /* TAS */ { (cpuop_func*)CPUFUNC(op_4ae8_22), 19176 }, /* TAS */ { (cpuop_func*)CPUFUNC(op_4af0_22), 19184 }, /* TAS */ { (cpuop_func*)CPUFUNC(op_4af8_22), 19192 }, /* TAS */ { (cpuop_func*)CPUFUNC(op_4af9_22), 19193 }, /* TAS */ { (cpuop_func*)CPUFUNC(op_4c00_22), 19456 }, /* MULL */ { (cpuop_func*)CPUFUNC(op_4c10_22), 19472 }, /* MULL */ { (cpuop_func*)CPUFUNC(op_4c18_22), 19480 }, /* MULL */ { (cpuop_func*)CPUFUNC(op_4c20_22), 19488 }, /* MULL */ { (cpuop_func*)CPUFUNC(op_4c28_22), 19496 }, /* MULL */ { (cpuop_func*)CPUFUNC(op_4c30_22), 19504 }, /* MULL */ { (cpuop_func*)CPUFUNC(op_4c38_22), 19512 }, /* MULL */ { (cpuop_func*)CPUFUNC(op_4c39_22), 19513 }, /* MULL */ { (cpuop_func*)CPUFUNC(op_4c3a_22), 19514 }, /* MULL */ { (cpuop_func*)CPUFUNC(op_4c3b_22), 19515 }, /* MULL */ { (cpuop_func*)CPUFUNC(op_4c3c_22), 19516 }, /* MULL */ { (cpuop_func*)CPUFUNC(op_4c40_22), 19520 }, /* DIVL */ { (cpuop_func*)CPUFUNC(op_4c50_22), 19536 }, /* DIVL */ { (cpuop_func*)CPUFUNC(op_4c58_22), 19544 }, /* DIVL */ { (cpuop_func*)CPUFUNC(op_4c60_22), 19552 }, /* DIVL */ { (cpuop_func*)CPUFUNC(op_4c68_22), 19560 }, /* DIVL */ { (cpuop_func*)CPUFUNC(op_4c70_22), 19568 }, /* DIVL */ { (cpuop_func*)CPUFUNC(op_4c78_22), 19576 }, /* DIVL */ { (cpuop_func*)CPUFUNC(op_4c79_22), 19577 }, /* DIVL */ { (cpuop_func*)CPUFUNC(op_4c7a_22), 19578 }, /* DIVL */ { (cpuop_func*)CPUFUNC(op_4c7b_22), 19579 }, /* DIVL */ { (cpuop_func*)CPUFUNC(op_4c7c_22), 19580 }, /* DIVL */ { (cpuop_func*)CPUFUNC(op_4c90_22), 19600 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4c98_22), 19608 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4ca8_22), 19624 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4cb0_22), 19632 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4cb8_22), 19640 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4cb9_22), 19641 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4cba_22), 19642 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4cbb_22), 19643 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4cd0_22), 19664 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4cd8_22), 19672 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4ce8_22), 19688 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4cf0_22), 19696 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4cf8_22), 19704 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4cf9_22), 19705 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4cfa_22), 19706 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4cfb_22), 19707 }, /* MVMEL */ { (cpuop_func*)CPUFUNC(op_4e40_22), 20032 }, /* TRAP */ { (cpuop_func*)CPUFUNC(op_4e50_22), 20048 }, /* LINK */ { (cpuop_func*)CPUFUNC(op_4e58_22), 20056 }, /* UNLK */ { (cpuop_func*)CPUFUNC(op_4e60_22), 20064 }, /* MVR2USP */ { (cpuop_func*)CPUFUNC(op_4e68_22), 20072 }, /* MVUSP2R */ { (cpuop_func*)CPUFUNC(op_4e70_22), 20080 }, /* RESET */ { (cpuop_func*)CPUFUNC(op_4e71_22), 20081 }, /* NOP */ { (cpuop_func*)CPUFUNC(op_4e72_22), 20082 }, /* STOP */ { (cpuop_func*)CPUFUNC(op_4e73_22), 20083 }, /* RTE */ { (cpuop_func*)CPUFUNC(op_4e74_22), 20084 }, /* RTD */ { (cpuop_func*)CPUFUNC(op_4e75_22), 20085 }, /* RTS */ { (cpuop_func*)CPUFUNC(op_4e76_22), 20086 }, /* TRAPV */ { (cpuop_func*)CPUFUNC(op_4e77_22), 20087 }, /* RTR */ { (cpuop_func*)CPUFUNC(op_4e7a_22), 20090 }, /* MOVEC2 */ { (cpuop_func*)CPUFUNC(op_4e7b_22), 20091 }, /* MOVE2C */ { (cpuop_func*)CPUFUNC(op_4e90_22), 20112 }, /* JSR */ { (cpuop_func*)CPUFUNC(op_4ea8_22), 20136 }, /* JSR */ { (cpuop_func*)CPUFUNC(op_4eb0_22), 20144 }, /* JSR */ { (cpuop_func*)CPUFUNC(op_4eb8_22), 20152 }, /* JSR */ { (cpuop_func*)CPUFUNC(op_4eb9_22), 20153 }, /* JSR */ { (cpuop_func*)CPUFUNC(op_4eba_22), 20154 }, /* JSR */ { (cpuop_func*)CPUFUNC(op_4ebb_22), 20155 }, /* JSR */ { (cpuop_func*)CPUFUNC(op_4ed0_22), 20176 }, /* JMP */ { (cpuop_func*)CPUFUNC(op_4ee8_22), 20200 }, /* JMP */ { (cpuop_func*)CPUFUNC(op_4ef0_22), 20208 }, /* JMP */ { (cpuop_func*)CPUFUNC(op_4ef8_22), 20216 }, /* JMP */ { (cpuop_func*)CPUFUNC(op_4ef9_22), 20217 }, /* JMP */ { (cpuop_func*)CPUFUNC(op_4efa_22), 20218 }, /* JMP */ { (cpuop_func*)CPUFUNC(op_4efb_22), 20219 }, /* JMP */ { (cpuop_func*)CPUFUNC(op_5000_22), 20480 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5010_22), 20496 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5018_22), 20504 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5020_22), 20512 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5028_22), 20520 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5030_22), 20528 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5038_22), 20536 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5039_22), 20537 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5040_22), 20544 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5048_22), 20552 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_5050_22), 20560 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5058_22), 20568 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5060_22), 20576 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5068_22), 20584 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5070_22), 20592 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5078_22), 20600 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5079_22), 20601 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5080_22), 20608 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5088_22), 20616 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_5090_22), 20624 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_5098_22), 20632 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_50a0_22), 20640 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_50a8_22), 20648 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_50b0_22), 20656 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_50b8_22), 20664 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_50b9_22), 20665 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_50c0_22), 20672 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_50c8_22), 20680 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_50d0_22), 20688 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_50d8_22), 20696 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_50e0_22), 20704 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_50e8_22), 20712 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_50f0_22), 20720 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_50f8_22), 20728 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_50f9_22), 20729 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_50fa_22), 20730 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_50fb_22), 20731 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_50fc_22), 20732 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_5100_22), 20736 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5110_22), 20752 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5118_22), 20760 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5120_22), 20768 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5128_22), 20776 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5130_22), 20784 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5138_22), 20792 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5139_22), 20793 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5140_22), 20800 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5148_22), 20808 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_5150_22), 20816 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5158_22), 20824 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5160_22), 20832 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5168_22), 20840 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5170_22), 20848 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5178_22), 20856 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5179_22), 20857 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5180_22), 20864 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5188_22), 20872 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_5190_22), 20880 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_5198_22), 20888 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_51a0_22), 20896 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_51a8_22), 20904 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_51b0_22), 20912 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_51b8_22), 20920 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_51b9_22), 20921 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_51c0_22), 20928 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_51c8_22), 20936 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_51d0_22), 20944 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_51d8_22), 20952 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_51e0_22), 20960 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_51e8_22), 20968 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_51f0_22), 20976 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_51f8_22), 20984 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_51f9_22), 20985 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_51fa_22), 20986 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_51fb_22), 20987 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_51fc_22), 20988 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_52c0_22), 21184 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_52c8_22), 21192 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_52d0_22), 21200 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_52d8_22), 21208 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_52e0_22), 21216 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_52e8_22), 21224 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_52f0_22), 21232 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_52f8_22), 21240 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_52f9_22), 21241 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_52fa_22), 21242 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_52fb_22), 21243 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_52fc_22), 21244 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_53c0_22), 21440 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_53c8_22), 21448 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_53d0_22), 21456 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_53d8_22), 21464 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_53e0_22), 21472 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_53e8_22), 21480 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_53f0_22), 21488 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_53f8_22), 21496 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_53f9_22), 21497 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_53fa_22), 21498 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_53fb_22), 21499 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_53fc_22), 21500 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_54c0_22), 21696 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_54c8_22), 21704 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_54d0_22), 21712 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_54d8_22), 21720 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_54e0_22), 21728 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_54e8_22), 21736 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_54f0_22), 21744 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_54f8_22), 21752 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_54f9_22), 21753 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_54fa_22), 21754 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_54fb_22), 21755 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_54fc_22), 21756 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_55c0_22), 21952 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_55c8_22), 21960 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_55d0_22), 21968 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_55d8_22), 21976 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_55e0_22), 21984 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_55e8_22), 21992 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_55f0_22), 22000 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_55f8_22), 22008 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_55f9_22), 22009 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_55fa_22), 22010 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_55fb_22), 22011 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_55fc_22), 22012 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_56c0_22), 22208 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_56c8_22), 22216 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_56d0_22), 22224 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_56d8_22), 22232 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_56e0_22), 22240 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_56e8_22), 22248 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_56f0_22), 22256 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_56f8_22), 22264 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_56f9_22), 22265 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_56fa_22), 22266 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_56fb_22), 22267 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_56fc_22), 22268 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_57c0_22), 22464 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_57c8_22), 22472 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_57d0_22), 22480 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_57d8_22), 22488 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_57e0_22), 22496 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_57e8_22), 22504 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_57f0_22), 22512 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_57f8_22), 22520 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_57f9_22), 22521 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_57fa_22), 22522 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_57fb_22), 22523 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_57fc_22), 22524 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_58c0_22), 22720 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_58c8_22), 22728 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_58d0_22), 22736 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_58d8_22), 22744 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_58e0_22), 22752 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_58e8_22), 22760 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_58f0_22), 22768 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_58f8_22), 22776 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_58f9_22), 22777 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_58fa_22), 22778 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_58fb_22), 22779 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_58fc_22), 22780 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_59c0_22), 22976 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_59c8_22), 22984 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_59d0_22), 22992 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_59d8_22), 23000 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_59e0_22), 23008 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_59e8_22), 23016 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_59f0_22), 23024 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_59f8_22), 23032 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_59f9_22), 23033 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_59fa_22), 23034 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_59fb_22), 23035 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_59fc_22), 23036 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_5ac0_22), 23232 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ac8_22), 23240 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_5ad0_22), 23248 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ad8_22), 23256 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ae0_22), 23264 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ae8_22), 23272 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5af0_22), 23280 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5af8_22), 23288 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5af9_22), 23289 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5afa_22), 23290 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_5afb_22), 23291 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_5afc_22), 23292 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_5bc0_22), 23488 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5bc8_22), 23496 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_5bd0_22), 23504 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5bd8_22), 23512 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5be0_22), 23520 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5be8_22), 23528 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5bf0_22), 23536 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5bf8_22), 23544 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5bf9_22), 23545 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5bfa_22), 23546 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_5bfb_22), 23547 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_5bfc_22), 23548 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_5cc0_22), 23744 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5cc8_22), 23752 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_5cd0_22), 23760 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5cd8_22), 23768 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ce0_22), 23776 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ce8_22), 23784 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5cf0_22), 23792 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5cf8_22), 23800 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5cf9_22), 23801 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5cfa_22), 23802 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_5cfb_22), 23803 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_5cfc_22), 23804 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_5dc0_22), 24000 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5dc8_22), 24008 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_5dd0_22), 24016 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5dd8_22), 24024 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5de0_22), 24032 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5de8_22), 24040 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5df0_22), 24048 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5df8_22), 24056 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5df9_22), 24057 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5dfa_22), 24058 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_5dfb_22), 24059 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_5dfc_22), 24060 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_5ec0_22), 24256 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ec8_22), 24264 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_5ed0_22), 24272 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ed8_22), 24280 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ee0_22), 24288 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ee8_22), 24296 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ef0_22), 24304 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ef8_22), 24312 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ef9_22), 24313 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5efa_22), 24314 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_5efb_22), 24315 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_5efc_22), 24316 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_5fc0_22), 24512 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5fc8_22), 24520 }, /* DBcc */ { (cpuop_func*)CPUFUNC(op_5fd0_22), 24528 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5fd8_22), 24536 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5fe0_22), 24544 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5fe8_22), 24552 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ff0_22), 24560 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ff8_22), 24568 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ff9_22), 24569 }, /* Scc */ { (cpuop_func*)CPUFUNC(op_5ffa_22), 24570 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_5ffb_22), 24571 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_5ffc_22), 24572 }, /* TRAPcc */ { (cpuop_func*)CPUFUNC(op_6000_22), 24576 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6001_22), 24577 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_60ff_22), 24831 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6100_22), 24832 }, /* BSR */ { (cpuop_func*)CPUFUNC(op_6101_22), 24833 }, /* BSR */ { (cpuop_func*)CPUFUNC(op_61ff_22), 25087 }, /* BSR */ { (cpuop_func*)CPUFUNC(op_6200_22), 25088 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6201_22), 25089 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_62ff_22), 25343 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6300_22), 25344 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6301_22), 25345 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_63ff_22), 25599 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6400_22), 25600 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6401_22), 25601 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_64ff_22), 25855 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6500_22), 25856 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6501_22), 25857 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_65ff_22), 26111 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6600_22), 26112 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6601_22), 26113 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_66ff_22), 26367 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6700_22), 26368 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6701_22), 26369 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_67ff_22), 26623 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6800_22), 26624 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6801_22), 26625 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_68ff_22), 26879 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6900_22), 26880 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6901_22), 26881 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_69ff_22), 27135 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6a00_22), 27136 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6a01_22), 27137 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6aff_22), 27391 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6b00_22), 27392 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6b01_22), 27393 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6bff_22), 27647 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6c00_22), 27648 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6c01_22), 27649 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6cff_22), 27903 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6d00_22), 27904 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6d01_22), 27905 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6dff_22), 28159 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6e00_22), 28160 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6e01_22), 28161 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6eff_22), 28415 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6f00_22), 28416 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6f01_22), 28417 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_6fff_22), 28671 }, /* Bcc */ { (cpuop_func*)CPUFUNC(op_7000_22), 28672 }, /* MOVE */ { (cpuop_func*)CPUFUNC(op_8000_22), 32768 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8010_22), 32784 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8018_22), 32792 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8020_22), 32800 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8028_22), 32808 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8030_22), 32816 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8038_22), 32824 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8039_22), 32825 }, /* OR */ { (cpuop_func*)CPUFUNC(op_803a_22), 32826 }, /* OR */ { (cpuop_func*)CPUFUNC(op_803b_22), 32827 }, /* OR */ { (cpuop_func*)CPUFUNC(op_803c_22), 32828 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8040_22), 32832 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8050_22), 32848 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8058_22), 32856 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8060_22), 32864 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8068_22), 32872 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8070_22), 32880 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8078_22), 32888 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8079_22), 32889 }, /* OR */ { (cpuop_func*)CPUFUNC(op_807a_22), 32890 }, /* OR */ { (cpuop_func*)CPUFUNC(op_807b_22), 32891 }, /* OR */ { (cpuop_func*)CPUFUNC(op_807c_22), 32892 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8080_22), 32896 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8090_22), 32912 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8098_22), 32920 }, /* OR */ { (cpuop_func*)CPUFUNC(op_80a0_22), 32928 }, /* OR */ { (cpuop_func*)CPUFUNC(op_80a8_22), 32936 }, /* OR */ { (cpuop_func*)CPUFUNC(op_80b0_22), 32944 }, /* OR */ { (cpuop_func*)CPUFUNC(op_80b8_22), 32952 }, /* OR */ { (cpuop_func*)CPUFUNC(op_80b9_22), 32953 }, /* OR */ { (cpuop_func*)CPUFUNC(op_80ba_22), 32954 }, /* OR */ { (cpuop_func*)CPUFUNC(op_80bb_22), 32955 }, /* OR */ { (cpuop_func*)CPUFUNC(op_80bc_22), 32956 }, /* OR */ { (cpuop_func*)CPUFUNC(op_80c0_22), 32960 }, /* DIVU */ { (cpuop_func*)CPUFUNC(op_80d0_22), 32976 }, /* DIVU */ { (cpuop_func*)CPUFUNC(op_80d8_22), 32984 }, /* DIVU */ { (cpuop_func*)CPUFUNC(op_80e0_22), 32992 }, /* DIVU */ { (cpuop_func*)CPUFUNC(op_80e8_22), 33000 }, /* DIVU */ { (cpuop_func*)CPUFUNC(op_80f0_22), 33008 }, /* DIVU */ { (cpuop_func*)CPUFUNC(op_80f8_22), 33016 }, /* DIVU */ { (cpuop_func*)CPUFUNC(op_80f9_22), 33017 }, /* DIVU */ { (cpuop_func*)CPUFUNC(op_80fa_22), 33018 }, /* DIVU */ { (cpuop_func*)CPUFUNC(op_80fb_22), 33019 }, /* DIVU */ { (cpuop_func*)CPUFUNC(op_80fc_22), 33020 }, /* DIVU */ { (cpuop_func*)CPUFUNC(op_8100_24), 33024 }, /* SBCD */ { (cpuop_func*)CPUFUNC(op_8108_24), 33032 }, /* SBCD */ { (cpuop_func*)CPUFUNC(op_8110_22), 33040 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8118_22), 33048 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8120_22), 33056 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8128_22), 33064 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8130_22), 33072 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8138_22), 33080 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8139_22), 33081 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8140_22), 33088 }, /* PACK */ { (cpuop_func*)CPUFUNC(op_8148_22), 33096 }, /* PACK */ { (cpuop_func*)CPUFUNC(op_8150_22), 33104 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8158_22), 33112 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8160_22), 33120 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8168_22), 33128 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8170_22), 33136 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8178_22), 33144 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8179_22), 33145 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8180_22), 33152 }, /* UNPK */ { (cpuop_func*)CPUFUNC(op_8188_22), 33160 }, /* UNPK */ { (cpuop_func*)CPUFUNC(op_8190_22), 33168 }, /* OR */ { (cpuop_func*)CPUFUNC(op_8198_22), 33176 }, /* OR */ { (cpuop_func*)CPUFUNC(op_81a0_22), 33184 }, /* OR */ { (cpuop_func*)CPUFUNC(op_81a8_22), 33192 }, /* OR */ { (cpuop_func*)CPUFUNC(op_81b0_22), 33200 }, /* OR */ { (cpuop_func*)CPUFUNC(op_81b8_22), 33208 }, /* OR */ { (cpuop_func*)CPUFUNC(op_81b9_22), 33209 }, /* OR */ { (cpuop_func*)CPUFUNC(op_81c0_22), 33216 }, /* DIVS */ { (cpuop_func*)CPUFUNC(op_81d0_22), 33232 }, /* DIVS */ { (cpuop_func*)CPUFUNC(op_81d8_22), 33240 }, /* DIVS */ { (cpuop_func*)CPUFUNC(op_81e0_22), 33248 }, /* DIVS */ { (cpuop_func*)CPUFUNC(op_81e8_22), 33256 }, /* DIVS */ { (cpuop_func*)CPUFUNC(op_81f0_22), 33264 }, /* DIVS */ { (cpuop_func*)CPUFUNC(op_81f8_22), 33272 }, /* DIVS */ { (cpuop_func*)CPUFUNC(op_81f9_22), 33273 }, /* DIVS */ { (cpuop_func*)CPUFUNC(op_81fa_22), 33274 }, /* DIVS */ { (cpuop_func*)CPUFUNC(op_81fb_22), 33275 }, /* DIVS */ { (cpuop_func*)CPUFUNC(op_81fc_22), 33276 }, /* DIVS */ { (cpuop_func*)CPUFUNC(op_9000_22), 36864 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9010_22), 36880 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9018_22), 36888 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9020_22), 36896 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9028_22), 36904 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9030_22), 36912 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9038_22), 36920 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9039_22), 36921 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_903a_22), 36922 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_903b_22), 36923 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_903c_22), 36924 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9040_22), 36928 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9048_22), 36936 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9050_22), 36944 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9058_22), 36952 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9060_22), 36960 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9068_22), 36968 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9070_22), 36976 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9078_22), 36984 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9079_22), 36985 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_907a_22), 36986 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_907b_22), 36987 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_907c_22), 36988 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9080_22), 36992 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9088_22), 37000 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9090_22), 37008 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9098_22), 37016 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_90a0_22), 37024 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_90a8_22), 37032 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_90b0_22), 37040 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_90b8_22), 37048 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_90b9_22), 37049 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_90ba_22), 37050 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_90bb_22), 37051 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_90bc_22), 37052 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_90c0_22), 37056 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_90c8_22), 37064 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_90d0_22), 37072 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_90d8_22), 37080 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_90e0_22), 37088 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_90e8_22), 37096 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_90f0_22), 37104 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_90f8_22), 37112 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_90f9_22), 37113 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_90fa_22), 37114 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_90fb_22), 37115 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_90fc_22), 37116 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_9100_22), 37120 }, /* SUBX */ { (cpuop_func*)CPUFUNC(op_9108_22), 37128 }, /* SUBX */ { (cpuop_func*)CPUFUNC(op_9110_22), 37136 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9118_22), 37144 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9120_22), 37152 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9128_22), 37160 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9130_22), 37168 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9138_22), 37176 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9139_22), 37177 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9140_22), 37184 }, /* SUBX */ { (cpuop_func*)CPUFUNC(op_9148_22), 37192 }, /* SUBX */ { (cpuop_func*)CPUFUNC(op_9150_22), 37200 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9158_22), 37208 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9160_22), 37216 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9168_22), 37224 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9170_22), 37232 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9178_22), 37240 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9179_22), 37241 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9180_22), 37248 }, /* SUBX */ { (cpuop_func*)CPUFUNC(op_9188_22), 37256 }, /* SUBX */ { (cpuop_func*)CPUFUNC(op_9190_22), 37264 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_9198_22), 37272 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_91a0_22), 37280 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_91a8_22), 37288 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_91b0_22), 37296 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_91b8_22), 37304 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_91b9_22), 37305 }, /* SUB */ { (cpuop_func*)CPUFUNC(op_91c0_22), 37312 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_91c8_22), 37320 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_91d0_22), 37328 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_91d8_22), 37336 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_91e0_22), 37344 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_91e8_22), 37352 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_91f0_22), 37360 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_91f8_22), 37368 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_91f9_22), 37369 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_91fa_22), 37370 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_91fb_22), 37371 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_91fc_22), 37372 }, /* SUBA */ { (cpuop_func*)CPUFUNC(op_b000_22), 45056 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b010_22), 45072 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b018_22), 45080 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b020_22), 45088 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b028_22), 45096 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b030_22), 45104 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b038_22), 45112 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b039_22), 45113 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b03a_22), 45114 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b03b_22), 45115 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b03c_22), 45116 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b040_22), 45120 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b048_22), 45128 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b050_22), 45136 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b058_22), 45144 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b060_22), 45152 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b068_22), 45160 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b070_22), 45168 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b078_22), 45176 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b079_22), 45177 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b07a_22), 45178 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b07b_22), 45179 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b07c_22), 45180 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b080_22), 45184 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b088_22), 45192 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b090_22), 45200 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b098_22), 45208 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b0a0_22), 45216 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b0a8_22), 45224 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b0b0_22), 45232 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b0b8_22), 45240 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b0b9_22), 45241 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b0ba_22), 45242 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b0bb_22), 45243 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b0bc_22), 45244 }, /* CMP */ { (cpuop_func*)CPUFUNC(op_b0c0_22), 45248 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b0c8_22), 45256 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b0d0_22), 45264 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b0d8_22), 45272 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b0e0_22), 45280 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b0e8_22), 45288 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b0f0_22), 45296 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b0f8_22), 45304 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b0f9_22), 45305 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b0fa_22), 45306 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b0fb_22), 45307 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b0fc_22), 45308 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b100_22), 45312 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b108_22), 45320 }, /* CMPM */ { (cpuop_func*)CPUFUNC(op_b110_22), 45328 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b118_22), 45336 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b120_22), 45344 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b128_22), 45352 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b130_22), 45360 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b138_22), 45368 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b139_22), 45369 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b140_22), 45376 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b148_22), 45384 }, /* CMPM */ { (cpuop_func*)CPUFUNC(op_b150_22), 45392 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b158_22), 45400 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b160_22), 45408 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b168_22), 45416 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b170_22), 45424 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b178_22), 45432 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b179_22), 45433 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b180_22), 45440 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b188_22), 45448 }, /* CMPM */ { (cpuop_func*)CPUFUNC(op_b190_22), 45456 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b198_22), 45464 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b1a0_22), 45472 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b1a8_22), 45480 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b1b0_22), 45488 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b1b8_22), 45496 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b1b9_22), 45497 }, /* EOR */ { (cpuop_func*)CPUFUNC(op_b1c0_22), 45504 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b1c8_22), 45512 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b1d0_22), 45520 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b1d8_22), 45528 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b1e0_22), 45536 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b1e8_22), 45544 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b1f0_22), 45552 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b1f8_22), 45560 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b1f9_22), 45561 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b1fa_22), 45562 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b1fb_22), 45563 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_b1fc_22), 45564 }, /* CMPA */ { (cpuop_func*)CPUFUNC(op_c000_22), 49152 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c010_22), 49168 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c018_22), 49176 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c020_22), 49184 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c028_22), 49192 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c030_22), 49200 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c038_22), 49208 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c039_22), 49209 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c03a_22), 49210 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c03b_22), 49211 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c03c_22), 49212 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c040_22), 49216 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c050_22), 49232 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c058_22), 49240 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c060_22), 49248 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c068_22), 49256 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c070_22), 49264 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c078_22), 49272 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c079_22), 49273 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c07a_22), 49274 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c07b_22), 49275 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c07c_22), 49276 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c080_22), 49280 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c090_22), 49296 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c098_22), 49304 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c0a0_22), 49312 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c0a8_22), 49320 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c0b0_22), 49328 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c0b8_22), 49336 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c0b9_22), 49337 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c0ba_22), 49338 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c0bb_22), 49339 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c0bc_22), 49340 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c0c0_22), 49344 }, /* MULU */ { (cpuop_func*)CPUFUNC(op_c0d0_22), 49360 }, /* MULU */ { (cpuop_func*)CPUFUNC(op_c0d8_22), 49368 }, /* MULU */ { (cpuop_func*)CPUFUNC(op_c0e0_22), 49376 }, /* MULU */ { (cpuop_func*)CPUFUNC(op_c0e8_22), 49384 }, /* MULU */ { (cpuop_func*)CPUFUNC(op_c0f0_22), 49392 }, /* MULU */ { (cpuop_func*)CPUFUNC(op_c0f8_22), 49400 }, /* MULU */ { (cpuop_func*)CPUFUNC(op_c0f9_22), 49401 }, /* MULU */ { (cpuop_func*)CPUFUNC(op_c0fa_22), 49402 }, /* MULU */ { (cpuop_func*)CPUFUNC(op_c0fb_22), 49403 }, /* MULU */ { (cpuop_func*)CPUFUNC(op_c0fc_22), 49404 }, /* MULU */ { (cpuop_func*)CPUFUNC(op_c100_24), 49408 }, /* ABCD */ { (cpuop_func*)CPUFUNC(op_c108_24), 49416 }, /* ABCD */ { (cpuop_func*)CPUFUNC(op_c110_22), 49424 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c118_22), 49432 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c120_22), 49440 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c128_22), 49448 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c130_22), 49456 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c138_22), 49464 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c139_22), 49465 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c140_22), 49472 }, /* EXG */ { (cpuop_func*)CPUFUNC(op_c148_22), 49480 }, /* EXG */ { (cpuop_func*)CPUFUNC(op_c150_22), 49488 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c158_22), 49496 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c160_22), 49504 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c168_22), 49512 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c170_22), 49520 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c178_22), 49528 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c179_22), 49529 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c188_22), 49544 }, /* EXG */ { (cpuop_func*)CPUFUNC(op_c190_22), 49552 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c198_22), 49560 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c1a0_22), 49568 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c1a8_22), 49576 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c1b0_22), 49584 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c1b8_22), 49592 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c1b9_22), 49593 }, /* AND */ { (cpuop_func*)CPUFUNC(op_c1c0_22), 49600 }, /* MULS */ { (cpuop_func*)CPUFUNC(op_c1d0_22), 49616 }, /* MULS */ { (cpuop_func*)CPUFUNC(op_c1d8_22), 49624 }, /* MULS */ { (cpuop_func*)CPUFUNC(op_c1e0_22), 49632 }, /* MULS */ { (cpuop_func*)CPUFUNC(op_c1e8_22), 49640 }, /* MULS */ { (cpuop_func*)CPUFUNC(op_c1f0_22), 49648 }, /* MULS */ { (cpuop_func*)CPUFUNC(op_c1f8_22), 49656 }, /* MULS */ { (cpuop_func*)CPUFUNC(op_c1f9_22), 49657 }, /* MULS */ { (cpuop_func*)CPUFUNC(op_c1fa_22), 49658 }, /* MULS */ { (cpuop_func*)CPUFUNC(op_c1fb_22), 49659 }, /* MULS */ { (cpuop_func*)CPUFUNC(op_c1fc_22), 49660 }, /* MULS */ { (cpuop_func*)CPUFUNC(op_d000_22), 53248 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d010_22), 53264 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d018_22), 53272 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d020_22), 53280 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d028_22), 53288 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d030_22), 53296 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d038_22), 53304 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d039_22), 53305 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d03a_22), 53306 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d03b_22), 53307 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d03c_22), 53308 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d040_22), 53312 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d048_22), 53320 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d050_22), 53328 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d058_22), 53336 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d060_22), 53344 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d068_22), 53352 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d070_22), 53360 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d078_22), 53368 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d079_22), 53369 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d07a_22), 53370 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d07b_22), 53371 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d07c_22), 53372 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d080_22), 53376 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d088_22), 53384 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d090_22), 53392 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d098_22), 53400 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d0a0_22), 53408 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d0a8_22), 53416 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d0b0_22), 53424 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d0b8_22), 53432 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d0b9_22), 53433 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d0ba_22), 53434 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d0bb_22), 53435 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d0bc_22), 53436 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d0c0_22), 53440 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d0c8_22), 53448 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d0d0_22), 53456 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d0d8_22), 53464 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d0e0_22), 53472 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d0e8_22), 53480 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d0f0_22), 53488 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d0f8_22), 53496 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d0f9_22), 53497 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d0fa_22), 53498 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d0fb_22), 53499 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d0fc_22), 53500 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d100_22), 53504 }, /* ADDX */ { (cpuop_func*)CPUFUNC(op_d108_22), 53512 }, /* ADDX */ { (cpuop_func*)CPUFUNC(op_d110_22), 53520 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d118_22), 53528 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d120_22), 53536 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d128_22), 53544 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d130_22), 53552 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d138_22), 53560 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d139_22), 53561 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d140_22), 53568 }, /* ADDX */ { (cpuop_func*)CPUFUNC(op_d148_22), 53576 }, /* ADDX */ { (cpuop_func*)CPUFUNC(op_d150_22), 53584 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d158_22), 53592 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d160_22), 53600 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d168_22), 53608 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d170_22), 53616 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d178_22), 53624 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d179_22), 53625 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d180_22), 53632 }, /* ADDX */ { (cpuop_func*)CPUFUNC(op_d188_22), 53640 }, /* ADDX */ { (cpuop_func*)CPUFUNC(op_d190_22), 53648 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d198_22), 53656 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d1a0_22), 53664 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d1a8_22), 53672 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d1b0_22), 53680 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d1b8_22), 53688 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d1b9_22), 53689 }, /* ADD */ { (cpuop_func*)CPUFUNC(op_d1c0_22), 53696 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d1c8_22), 53704 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d1d0_22), 53712 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d1d8_22), 53720 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d1e0_22), 53728 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d1e8_22), 53736 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d1f0_22), 53744 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d1f8_22), 53752 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d1f9_22), 53753 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d1fa_22), 53754 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d1fb_22), 53755 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_d1fc_22), 53756 }, /* ADDA */ { (cpuop_func*)CPUFUNC(op_e000_22), 57344 }, /* ASR */ { (cpuop_func*)CPUFUNC(op_e008_22), 57352 }, /* LSR */ { (cpuop_func*)CPUFUNC(op_e010_22), 57360 }, /* ROXR */ { (cpuop_func*)CPUFUNC(op_e018_22), 57368 }, /* ROR */ { (cpuop_func*)CPUFUNC(op_e020_22), 57376 }, /* ASR */ { (cpuop_func*)CPUFUNC(op_e028_22), 57384 }, /* LSR */ { (cpuop_func*)CPUFUNC(op_e030_22), 57392 }, /* ROXR */ { (cpuop_func*)CPUFUNC(op_e038_22), 57400 }, /* ROR */ { (cpuop_func*)CPUFUNC(op_e040_22), 57408 }, /* ASR */ { (cpuop_func*)CPUFUNC(op_e048_22), 57416 }, /* LSR */ { (cpuop_func*)CPUFUNC(op_e050_22), 57424 }, /* ROXR */ { (cpuop_func*)CPUFUNC(op_e058_22), 57432 }, /* ROR */ { (cpuop_func*)CPUFUNC(op_e060_22), 57440 }, /* ASR */ { (cpuop_func*)CPUFUNC(op_e068_22), 57448 }, /* LSR */ { (cpuop_func*)CPUFUNC(op_e070_22), 57456 }, /* ROXR */ { (cpuop_func*)CPUFUNC(op_e078_22), 57464 }, /* ROR */ { (cpuop_func*)CPUFUNC(op_e080_22), 57472 }, /* ASR */ { (cpuop_func*)CPUFUNC(op_e088_22), 57480 }, /* LSR */ { (cpuop_func*)CPUFUNC(op_e090_22), 57488 }, /* ROXR */ { (cpuop_func*)CPUFUNC(op_e098_22), 57496 }, /* ROR */ { (cpuop_func*)CPUFUNC(op_e0a0_22), 57504 }, /* ASR */ { (cpuop_func*)CPUFUNC(op_e0a8_22), 57512 }, /* LSR */ { (cpuop_func*)CPUFUNC(op_e0b0_22), 57520 }, /* ROXR */ { (cpuop_func*)CPUFUNC(op_e0b8_22), 57528 }, /* ROR */ { (cpuop_func*)CPUFUNC(op_e0d0_22), 57552 }, /* ASRW */ { (cpuop_func*)CPUFUNC(op_e0d8_22), 57560 }, /* ASRW */ { (cpuop_func*)CPUFUNC(op_e0e0_22), 57568 }, /* ASRW */ { (cpuop_func*)CPUFUNC(op_e0e8_22), 57576 }, /* ASRW */ { (cpuop_func*)CPUFUNC(op_e0f0_22), 57584 }, /* ASRW */ { (cpuop_func*)CPUFUNC(op_e0f8_22), 57592 }, /* ASRW */ { (cpuop_func*)CPUFUNC(op_e0f9_22), 57593 }, /* ASRW */ { (cpuop_func*)CPUFUNC(op_e100_22), 57600 }, /* ASL */ { (cpuop_func*)CPUFUNC(op_e108_22), 57608 }, /* LSL */ { (cpuop_func*)CPUFUNC(op_e110_22), 57616 }, /* ROXL */ { (cpuop_func*)CPUFUNC(op_e118_22), 57624 }, /* ROL */ { (cpuop_func*)CPUFUNC(op_e120_22), 57632 }, /* ASL */ { (cpuop_func*)CPUFUNC(op_e128_22), 57640 }, /* LSL */ { (cpuop_func*)CPUFUNC(op_e130_22), 57648 }, /* ROXL */ { (cpuop_func*)CPUFUNC(op_e138_22), 57656 }, /* ROL */ { (cpuop_func*)CPUFUNC(op_e140_22), 57664 }, /* ASL */ { (cpuop_func*)CPUFUNC(op_e148_22), 57672 }, /* LSL */ { (cpuop_func*)CPUFUNC(op_e150_22), 57680 }, /* ROXL */ { (cpuop_func*)CPUFUNC(op_e158_22), 57688 }, /* ROL */ { (cpuop_func*)CPUFUNC(op_e160_22), 57696 }, /* ASL */ { (cpuop_func*)CPUFUNC(op_e168_22), 57704 }, /* LSL */ { (cpuop_func*)CPUFUNC(op_e170_22), 57712 }, /* ROXL */ { (cpuop_func*)CPUFUNC(op_e178_22), 57720 }, /* ROL */ { (cpuop_func*)CPUFUNC(op_e180_22), 57728 }, /* ASL */ { (cpuop_func*)CPUFUNC(op_e188_22), 57736 }, /* LSL */ { (cpuop_func*)CPUFUNC(op_e190_22), 57744 }, /* ROXL */ { (cpuop_func*)CPUFUNC(op_e198_22), 57752 }, /* ROL */ { (cpuop_func*)CPUFUNC(op_e1a0_22), 57760 }, /* ASL */ { (cpuop_func*)CPUFUNC(op_e1a8_22), 57768 }, /* LSL */ { (cpuop_func*)CPUFUNC(op_e1b0_22), 57776 }, /* ROXL */ { (cpuop_func*)CPUFUNC(op_e1b8_22), 57784 }, /* ROL */ { (cpuop_func*)CPUFUNC(op_e1d0_22), 57808 }, /* ASLW */ { (cpuop_func*)CPUFUNC(op_e1d8_22), 57816 }, /* ASLW */ { (cpuop_func*)CPUFUNC(op_e1e0_22), 57824 }, /* ASLW */ { (cpuop_func*)CPUFUNC(op_e1e8_22), 57832 }, /* ASLW */ { (cpuop_func*)CPUFUNC(op_e1f0_22), 57840 }, /* ASLW */ { (cpuop_func*)CPUFUNC(op_e1f8_22), 57848 }, /* ASLW */ { (cpuop_func*)CPUFUNC(op_e1f9_22), 57849 }, /* ASLW */ { (cpuop_func*)CPUFUNC(op_e2d0_22), 58064 }, /* LSRW */ { (cpuop_func*)CPUFUNC(op_e2d8_22), 58072 }, /* LSRW */ { (cpuop_func*)CPUFUNC(op_e2e0_22), 58080 }, /* LSRW */ { (cpuop_func*)CPUFUNC(op_e2e8_22), 58088 }, /* LSRW */ { (cpuop_func*)CPUFUNC(op_e2f0_22), 58096 }, /* LSRW */ { (cpuop_func*)CPUFUNC(op_e2f8_22), 58104 }, /* LSRW */ { (cpuop_func*)CPUFUNC(op_e2f9_22), 58105 }, /* LSRW */ { (cpuop_func*)CPUFUNC(op_e3d0_22), 58320 }, /* LSLW */ { (cpuop_func*)CPUFUNC(op_e3d8_22), 58328 }, /* LSLW */ { (cpuop_func*)CPUFUNC(op_e3e0_22), 58336 }, /* LSLW */ { (cpuop_func*)CPUFUNC(op_e3e8_22), 58344 }, /* LSLW */ { (cpuop_func*)CPUFUNC(op_e3f0_22), 58352 }, /* LSLW */ { (cpuop_func*)CPUFUNC(op_e3f8_22), 58360 }, /* LSLW */ { (cpuop_func*)CPUFUNC(op_e3f9_22), 58361 }, /* LSLW */ { (cpuop_func*)CPUFUNC(op_e4d0_22), 58576 }, /* ROXRW */ { (cpuop_func*)CPUFUNC(op_e4d8_22), 58584 }, /* ROXRW */ { (cpuop_func*)CPUFUNC(op_e4e0_22), 58592 }, /* ROXRW */ { (cpuop_func*)CPUFUNC(op_e4e8_22), 58600 }, /* ROXRW */ { (cpuop_func*)CPUFUNC(op_e4f0_22), 58608 }, /* ROXRW */ { (cpuop_func*)CPUFUNC(op_e4f8_22), 58616 }, /* ROXRW */ { (cpuop_func*)CPUFUNC(op_e4f9_22), 58617 }, /* ROXRW */ { (cpuop_func*)CPUFUNC(op_e5d0_22), 58832 }, /* ROXLW */ { (cpuop_func*)CPUFUNC(op_e5d8_22), 58840 }, /* ROXLW */ { (cpuop_func*)CPUFUNC(op_e5e0_22), 58848 }, /* ROXLW */ { (cpuop_func*)CPUFUNC(op_e5e8_22), 58856 }, /* ROXLW */ { (cpuop_func*)CPUFUNC(op_e5f0_22), 58864 }, /* ROXLW */ { (cpuop_func*)CPUFUNC(op_e5f8_22), 58872 }, /* ROXLW */ { (cpuop_func*)CPUFUNC(op_e5f9_22), 58873 }, /* ROXLW */ { (cpuop_func*)CPUFUNC(op_e6d0_22), 59088 }, /* RORW */ { (cpuop_func*)CPUFUNC(op_e6d8_22), 59096 }, /* RORW */ { (cpuop_func*)CPUFUNC(op_e6e0_22), 59104 }, /* RORW */ { (cpuop_func*)CPUFUNC(op_e6e8_22), 59112 }, /* RORW */ { (cpuop_func*)CPUFUNC(op_e6f0_22), 59120 }, /* RORW */ { (cpuop_func*)CPUFUNC(op_e6f8_22), 59128 }, /* RORW */ { (cpuop_func*)CPUFUNC(op_e6f9_22), 59129 }, /* RORW */ { (cpuop_func*)CPUFUNC(op_e7d0_22), 59344 }, /* ROLW */ { (cpuop_func*)CPUFUNC(op_e7d8_22), 59352 }, /* ROLW */ { (cpuop_func*)CPUFUNC(op_e7e0_22), 59360 }, /* ROLW */ { (cpuop_func*)CPUFUNC(op_e7e8_22), 59368 }, /* ROLW */ { (cpuop_func*)CPUFUNC(op_e7f0_22), 59376 }, /* ROLW */ { (cpuop_func*)CPUFUNC(op_e7f8_22), 59384 }, /* ROLW */ { (cpuop_func*)CPUFUNC(op_e7f9_22), 59385 }, /* ROLW */ { (cpuop_func*)CPUFUNC(op_e8c0_22), 59584 }, /* BFTST */ { (cpuop_func*)CPUFUNC(op_e8d0_22), 59600 }, /* BFTST */ { (cpuop_func*)CPUFUNC(op_e8e8_22), 59624 }, /* BFTST */ { (cpuop_func*)CPUFUNC(op_e8f0_22), 59632 }, /* BFTST */ { (cpuop_func*)CPUFUNC(op_e8f8_22), 59640 }, /* BFTST */ { (cpuop_func*)CPUFUNC(op_e8f9_22), 59641 }, /* BFTST */ { (cpuop_func*)CPUFUNC(op_e8fa_22), 59642 }, /* BFTST */ { (cpuop_func*)CPUFUNC(op_e8fb_22), 59643 }, /* BFTST */ { (cpuop_func*)CPUFUNC(op_e9c0_22), 59840 }, /* BFEXTU */ { (cpuop_func*)CPUFUNC(op_e9d0_22), 59856 }, /* BFEXTU */ { (cpuop_func*)CPUFUNC(op_e9e8_22), 59880 }, /* BFEXTU */ { (cpuop_func*)CPUFUNC(op_e9f0_22), 59888 }, /* BFEXTU */ { (cpuop_func*)CPUFUNC(op_e9f8_22), 59896 }, /* BFEXTU */ { (cpuop_func*)CPUFUNC(op_e9f9_22), 59897 }, /* BFEXTU */ { (cpuop_func*)CPUFUNC(op_e9fa_22), 59898 }, /* BFEXTU */ { (cpuop_func*)CPUFUNC(op_e9fb_22), 59899 }, /* BFEXTU */ { (cpuop_func*)CPUFUNC(op_eac0_22), 60096 }, /* BFCHG */ { (cpuop_func*)CPUFUNC(op_ead0_22), 60112 }, /* BFCHG */ { (cpuop_func*)CPUFUNC(op_eae8_22), 60136 }, /* BFCHG */ { (cpuop_func*)CPUFUNC(op_eaf0_22), 60144 }, /* BFCHG */ { (cpuop_func*)CPUFUNC(op_eaf8_22), 60152 }, /* BFCHG */ { (cpuop_func*)CPUFUNC(op_eaf9_22), 60153 }, /* BFCHG */ { (cpuop_func*)CPUFUNC(op_ebc0_22), 60352 }, /* BFEXTS */ { (cpuop_func*)CPUFUNC(op_ebd0_22), 60368 }, /* BFEXTS */ { (cpuop_func*)CPUFUNC(op_ebe8_22), 60392 }, /* BFEXTS */ { (cpuop_func*)CPUFUNC(op_ebf0_22), 60400 }, /* BFEXTS */ { (cpuop_func*)CPUFUNC(op_ebf8_22), 60408 }, /* BFEXTS */ { (cpuop_func*)CPUFUNC(op_ebf9_22), 60409 }, /* BFEXTS */ { (cpuop_func*)CPUFUNC(op_ebfa_22), 60410 }, /* BFEXTS */ { (cpuop_func*)CPUFUNC(op_ebfb_22), 60411 }, /* BFEXTS */ { (cpuop_func*)CPUFUNC(op_ecc0_22), 60608 }, /* BFCLR */ { (cpuop_func*)CPUFUNC(op_ecd0_22), 60624 }, /* BFCLR */ { (cpuop_func*)CPUFUNC(op_ece8_22), 60648 }, /* BFCLR */ { (cpuop_func*)CPUFUNC(op_ecf0_22), 60656 }, /* BFCLR */ { (cpuop_func*)CPUFUNC(op_ecf8_22), 60664 }, /* BFCLR */ { (cpuop_func*)CPUFUNC(op_ecf9_22), 60665 }, /* BFCLR */ { (cpuop_func*)CPUFUNC(op_edc0_22), 60864 }, /* BFFFO */ { (cpuop_func*)CPUFUNC(op_edd0_22), 60880 }, /* BFFFO */ { (cpuop_func*)CPUFUNC(op_ede8_22), 60904 }, /* BFFFO */ { (cpuop_func*)CPUFUNC(op_edf0_22), 60912 }, /* BFFFO */ { (cpuop_func*)CPUFUNC(op_edf8_22), 60920 }, /* BFFFO */ { (cpuop_func*)CPUFUNC(op_edf9_22), 60921 }, /* BFFFO */ { (cpuop_func*)CPUFUNC(op_edfa_22), 60922 }, /* BFFFO */ { (cpuop_func*)CPUFUNC(op_edfb_22), 60923 }, /* BFFFO */ { (cpuop_func*)CPUFUNC(op_eec0_22), 61120 }, /* BFSET */ { (cpuop_func*)CPUFUNC(op_eed0_22), 61136 }, /* BFSET */ { (cpuop_func*)CPUFUNC(op_eee8_22), 61160 }, /* BFSET */ { (cpuop_func*)CPUFUNC(op_eef0_22), 61168 }, /* BFSET */ { (cpuop_func*)CPUFUNC(op_eef8_22), 61176 }, /* BFSET */ { (cpuop_func*)CPUFUNC(op_eef9_22), 61177 }, /* BFSET */ { (cpuop_func*)CPUFUNC(op_efc0_22), 61376 }, /* BFINS */ { (cpuop_func*)CPUFUNC(op_efd0_22), 61392 }, /* BFINS */ { (cpuop_func*)CPUFUNC(op_efe8_22), 61416 }, /* BFINS */ { (cpuop_func*)CPUFUNC(op_eff0_22), 61424 }, /* BFINS */ { (cpuop_func*)CPUFUNC(op_eff8_22), 61432 }, /* BFINS */ { (cpuop_func*)CPUFUNC(op_eff9_22), 61433 }, /* BFINS */ { (cpuop_func*)CPUFUNC(op_f000_22), 61440 }, /* MMUOP030 */ { (cpuop_func*)CPUFUNC(op_f008_22), 61448 }, /* MMUOP030 */ { (cpuop_func*)CPUFUNC(op_f010_22), 61456 }, /* MMUOP030 */ { (cpuop_func*)CPUFUNC(op_f018_22), 61464 }, /* MMUOP030 */ { (cpuop_func*)CPUFUNC(op_f020_22), 61472 }, /* MMUOP030 */ { (cpuop_func*)CPUFUNC(op_f028_22), 61480 }, /* MMUOP030 */ { (cpuop_func*)CPUFUNC(op_f030_22), 61488 }, /* MMUOP030 */ { (cpuop_func*)CPUFUNC(op_f038_22), 61496 }, /* MMUOP030 */ { (cpuop_func*)CPUFUNC(op_f039_22), 61497 }, /* MMUOP030 */ { (cpuop_func*)CPUFUNC(op_f200_22), 61952 }, /* FPP */ { (cpuop_func*)CPUFUNC(op_f208_22), 61960 }, /* FPP */ { (cpuop_func*)CPUFUNC(op_f210_22), 61968 }, /* FPP */ { (cpuop_func*)CPUFUNC(op_f218_22), 61976 }, /* FPP */ { (cpuop_func*)CPUFUNC(op_f220_22), 61984 }, /* FPP */ { (cpuop_func*)CPUFUNC(op_f228_22), 61992 }, /* FPP */ { (cpuop_func*)CPUFUNC(op_f230_22), 62000 }, /* FPP */ { (cpuop_func*)CPUFUNC(op_f238_22), 62008 }, /* FPP */ { (cpuop_func*)CPUFUNC(op_f239_22), 62009 }, /* FPP */ { (cpuop_func*)CPUFUNC(op_f23a_22), 62010 }, /* FPP */ { (cpuop_func*)CPUFUNC(op_f23b_22), 62011 }, /* FPP */ { (cpuop_func*)CPUFUNC(op_f23c_22), 62012 }, /* FPP */ { (cpuop_func*)CPUFUNC(op_f240_22), 62016 }, /* FScc */ { (cpuop_func*)CPUFUNC(op_f248_22), 62024 }, /* FDBcc */ { (cpuop_func*)CPUFUNC(op_f250_22), 62032 }, /* FScc */ { (cpuop_func*)CPUFUNC(op_f258_22), 62040 }, /* FScc */ { (cpuop_func*)CPUFUNC(op_f260_22), 62048 }, /* FScc */ { (cpuop_func*)CPUFUNC(op_f268_22), 62056 }, /* FScc */ { (cpuop_func*)CPUFUNC(op_f270_22), 62064 }, /* FScc */ { (cpuop_func*)CPUFUNC(op_f278_22), 62072 }, /* FScc */ { (cpuop_func*)CPUFUNC(op_f279_22), 62073 }, /* FScc */ { (cpuop_func*)CPUFUNC(op_f27a_22), 62074 }, /* FTRAPcc */ { (cpuop_func*)CPUFUNC(op_f27b_22), 62075 }, /* FTRAPcc */ { (cpuop_func*)CPUFUNC(op_f27c_22), 62076 }, /* FTRAPcc */ { (cpuop_func*)CPUFUNC(op_f280_22), 62080 }, /* FBcc */ { (cpuop_func*)CPUFUNC(op_f2c0_22), 62144 }, /* FBcc */ { (cpuop_func*)CPUFUNC(op_f310_22), 62224 }, /* FSAVE */ { (cpuop_func*)CPUFUNC(op_f320_22), 62240 }, /* FSAVE */ { (cpuop_func*)CPUFUNC(op_f328_22), 62248 }, /* FSAVE */ { (cpuop_func*)CPUFUNC(op_f330_22), 62256 }, /* FSAVE */ { (cpuop_func*)CPUFUNC(op_f338_22), 62264 }, /* FSAVE */ { (cpuop_func*)CPUFUNC(op_f339_22), 62265 }, /* FSAVE */ { (cpuop_func*)CPUFUNC(op_f350_22), 62288 }, /* FRESTORE */ { (cpuop_func*)CPUFUNC(op_f358_22), 62296 }, /* FRESTORE */ { (cpuop_func*)CPUFUNC(op_f368_22), 62312 }, /* FRESTORE */ { (cpuop_func*)CPUFUNC(op_f370_22), 62320 }, /* FRESTORE */ { (cpuop_func*)CPUFUNC(op_f378_22), 62328 }, /* FRESTORE */ { (cpuop_func*)CPUFUNC(op_f379_22), 62329 }, /* FRESTORE */ { (cpuop_func*)CPUFUNC(op_f37a_22), 62330 }, /* FRESTORE */ { (cpuop_func*)CPUFUNC(op_f37b_22), 62331 }, /* FRESTORE */ { 0, 0 }}; #endif /* CPUEMU_68000_ONLY */ #ifdef CPUEMU_31 #ifndef CPUEMU_68000_ONLY const struct cputbl CPUFUNC(op_smalltbl_31)[] = { { CPUFUNC(op_0000_31), 0 }, /* OR */ { CPUFUNC(op_0010_31), 16 }, /* OR */ { CPUFUNC(op_0018_31), 24 }, /* OR */ { CPUFUNC(op_0020_31), 32 }, /* OR */ { CPUFUNC(op_0028_31), 40 }, /* OR */ { CPUFUNC(op_0030_31), 48 }, /* OR */ { CPUFUNC(op_0038_31), 56 }, /* OR */ { CPUFUNC(op_0039_31), 57 }, /* OR */ { CPUFUNC(op_003c_31), 60 }, /* ORSR */ { CPUFUNC(op_0040_31), 64 }, /* OR */ { CPUFUNC(op_0050_31), 80 }, /* OR */ { CPUFUNC(op_0058_31), 88 }, /* OR */ { CPUFUNC(op_0060_31), 96 }, /* OR */ { CPUFUNC(op_0068_31), 104 }, /* OR */ { CPUFUNC(op_0070_31), 112 }, /* OR */ { CPUFUNC(op_0078_31), 120 }, /* OR */ { CPUFUNC(op_0079_31), 121 }, /* OR */ { CPUFUNC(op_007c_31), 124 }, /* ORSR */ { CPUFUNC(op_0080_31), 128 }, /* OR */ { CPUFUNC(op_0090_31), 144 }, /* OR */ { CPUFUNC(op_0098_31), 152 }, /* OR */ { CPUFUNC(op_00a0_31), 160 }, /* OR */ { CPUFUNC(op_00a8_31), 168 }, /* OR */ { CPUFUNC(op_00b0_31), 176 }, /* OR */ { CPUFUNC(op_00b8_31), 184 }, /* OR */ { CPUFUNC(op_00b9_31), 185 }, /* OR */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_00d0_31), 208 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_00e8_31), 232 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_00f0_31), 240 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_00f8_31), 248 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_00f9_31), 249 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_00fa_31), 250 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_00fb_31), 251 }, /* CHK2 */ #endif { CPUFUNC(op_0100_31), 256 }, /* BTST */ { CPUFUNC(op_0108_31), 264 }, /* MVPMR */ { CPUFUNC(op_0110_31), 272 }, /* BTST */ { CPUFUNC(op_0118_31), 280 }, /* BTST */ { CPUFUNC(op_0120_31), 288 }, /* BTST */ { CPUFUNC(op_0128_31), 296 }, /* BTST */ { CPUFUNC(op_0130_31), 304 }, /* BTST */ { CPUFUNC(op_0138_31), 312 }, /* BTST */ { CPUFUNC(op_0139_31), 313 }, /* BTST */ { CPUFUNC(op_013a_31), 314 }, /* BTST */ { CPUFUNC(op_013b_31), 315 }, /* BTST */ { CPUFUNC(op_013c_31), 316 }, /* BTST */ { CPUFUNC(op_0140_31), 320 }, /* BCHG */ { CPUFUNC(op_0148_31), 328 }, /* MVPMR */ { CPUFUNC(op_0150_31), 336 }, /* BCHG */ { CPUFUNC(op_0158_31), 344 }, /* BCHG */ { CPUFUNC(op_0160_31), 352 }, /* BCHG */ { CPUFUNC(op_0168_31), 360 }, /* BCHG */ { CPUFUNC(op_0170_31), 368 }, /* BCHG */ { CPUFUNC(op_0178_31), 376 }, /* BCHG */ { CPUFUNC(op_0179_31), 377 }, /* BCHG */ { CPUFUNC(op_017a_31), 378 }, /* BCHG */ { CPUFUNC(op_017b_31), 379 }, /* BCHG */ { CPUFUNC(op_0180_31), 384 }, /* BCLR */ { CPUFUNC(op_0188_31), 392 }, /* MVPRM */ { CPUFUNC(op_0190_31), 400 }, /* BCLR */ { CPUFUNC(op_0198_31), 408 }, /* BCLR */ { CPUFUNC(op_01a0_31), 416 }, /* BCLR */ { CPUFUNC(op_01a8_31), 424 }, /* BCLR */ { CPUFUNC(op_01b0_31), 432 }, /* BCLR */ { CPUFUNC(op_01b8_31), 440 }, /* BCLR */ { CPUFUNC(op_01b9_31), 441 }, /* BCLR */ { CPUFUNC(op_01ba_31), 442 }, /* BCLR */ { CPUFUNC(op_01bb_31), 443 }, /* BCLR */ { CPUFUNC(op_01c0_31), 448 }, /* BSET */ { CPUFUNC(op_01c8_31), 456 }, /* MVPRM */ { CPUFUNC(op_01d0_31), 464 }, /* BSET */ { CPUFUNC(op_01d8_31), 472 }, /* BSET */ { CPUFUNC(op_01e0_31), 480 }, /* BSET */ { CPUFUNC(op_01e8_31), 488 }, /* BSET */ { CPUFUNC(op_01f0_31), 496 }, /* BSET */ { CPUFUNC(op_01f8_31), 504 }, /* BSET */ { CPUFUNC(op_01f9_31), 505 }, /* BSET */ { CPUFUNC(op_01fa_31), 506 }, /* BSET */ { CPUFUNC(op_01fb_31), 507 }, /* BSET */ { CPUFUNC(op_0200_31), 512 }, /* AND */ { CPUFUNC(op_0210_31), 528 }, /* AND */ { CPUFUNC(op_0218_31), 536 }, /* AND */ { CPUFUNC(op_0220_31), 544 }, /* AND */ { CPUFUNC(op_0228_31), 552 }, /* AND */ { CPUFUNC(op_0230_31), 560 }, /* AND */ { CPUFUNC(op_0238_31), 568 }, /* AND */ { CPUFUNC(op_0239_31), 569 }, /* AND */ { CPUFUNC(op_023c_31), 572 }, /* ANDSR */ { CPUFUNC(op_0240_31), 576 }, /* AND */ { CPUFUNC(op_0250_31), 592 }, /* AND */ { CPUFUNC(op_0258_31), 600 }, /* AND */ { CPUFUNC(op_0260_31), 608 }, /* AND */ { CPUFUNC(op_0268_31), 616 }, /* AND */ { CPUFUNC(op_0270_31), 624 }, /* AND */ { CPUFUNC(op_0278_31), 632 }, /* AND */ { CPUFUNC(op_0279_31), 633 }, /* AND */ { CPUFUNC(op_027c_31), 636 }, /* ANDSR */ { CPUFUNC(op_0280_31), 640 }, /* AND */ { CPUFUNC(op_0290_31), 656 }, /* AND */ { CPUFUNC(op_0298_31), 664 }, /* AND */ { CPUFUNC(op_02a0_31), 672 }, /* AND */ { CPUFUNC(op_02a8_31), 680 }, /* AND */ { CPUFUNC(op_02b0_31), 688 }, /* AND */ { CPUFUNC(op_02b8_31), 696 }, /* AND */ { CPUFUNC(op_02b9_31), 697 }, /* AND */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_02d0_31), 720 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_02e8_31), 744 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_02f0_31), 752 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_02f8_31), 760 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_02f9_31), 761 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_02fa_31), 762 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_02fb_31), 763 }, /* CHK2 */ #endif { CPUFUNC(op_0400_31), 1024 }, /* SUB */ { CPUFUNC(op_0410_31), 1040 }, /* SUB */ { CPUFUNC(op_0418_31), 1048 }, /* SUB */ { CPUFUNC(op_0420_31), 1056 }, /* SUB */ { CPUFUNC(op_0428_31), 1064 }, /* SUB */ { CPUFUNC(op_0430_31), 1072 }, /* SUB */ { CPUFUNC(op_0438_31), 1080 }, /* SUB */ { CPUFUNC(op_0439_31), 1081 }, /* SUB */ { CPUFUNC(op_0440_31), 1088 }, /* SUB */ { CPUFUNC(op_0450_31), 1104 }, /* SUB */ { CPUFUNC(op_0458_31), 1112 }, /* SUB */ { CPUFUNC(op_0460_31), 1120 }, /* SUB */ { CPUFUNC(op_0468_31), 1128 }, /* SUB */ { CPUFUNC(op_0470_31), 1136 }, /* SUB */ { CPUFUNC(op_0478_31), 1144 }, /* SUB */ { CPUFUNC(op_0479_31), 1145 }, /* SUB */ { CPUFUNC(op_0480_31), 1152 }, /* SUB */ { CPUFUNC(op_0490_31), 1168 }, /* SUB */ { CPUFUNC(op_0498_31), 1176 }, /* SUB */ { CPUFUNC(op_04a0_31), 1184 }, /* SUB */ { CPUFUNC(op_04a8_31), 1192 }, /* SUB */ { CPUFUNC(op_04b0_31), 1200 }, /* SUB */ { CPUFUNC(op_04b8_31), 1208 }, /* SUB */ { CPUFUNC(op_04b9_31), 1209 }, /* SUB */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_04d0_31), 1232 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_04e8_31), 1256 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_04f0_31), 1264 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_04f8_31), 1272 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_04f9_31), 1273 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_04fa_31), 1274 }, /* CHK2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_04fb_31), 1275 }, /* CHK2 */ #endif { CPUFUNC(op_0600_31), 1536 }, /* ADD */ { CPUFUNC(op_0610_31), 1552 }, /* ADD */ { CPUFUNC(op_0618_31), 1560 }, /* ADD */ { CPUFUNC(op_0620_31), 1568 }, /* ADD */ { CPUFUNC(op_0628_31), 1576 }, /* ADD */ { CPUFUNC(op_0630_31), 1584 }, /* ADD */ { CPUFUNC(op_0638_31), 1592 }, /* ADD */ { CPUFUNC(op_0639_31), 1593 }, /* ADD */ { CPUFUNC(op_0640_31), 1600 }, /* ADD */ { CPUFUNC(op_0650_31), 1616 }, /* ADD */ { CPUFUNC(op_0658_31), 1624 }, /* ADD */ { CPUFUNC(op_0660_31), 1632 }, /* ADD */ { CPUFUNC(op_0668_31), 1640 }, /* ADD */ { CPUFUNC(op_0670_31), 1648 }, /* ADD */ { CPUFUNC(op_0678_31), 1656 }, /* ADD */ { CPUFUNC(op_0679_31), 1657 }, /* ADD */ { CPUFUNC(op_0680_31), 1664 }, /* ADD */ { CPUFUNC(op_0690_31), 1680 }, /* ADD */ { CPUFUNC(op_0698_31), 1688 }, /* ADD */ { CPUFUNC(op_06a0_31), 1696 }, /* ADD */ { CPUFUNC(op_06a8_31), 1704 }, /* ADD */ { CPUFUNC(op_06b0_31), 1712 }, /* ADD */ { CPUFUNC(op_06b8_31), 1720 }, /* ADD */ { CPUFUNC(op_06b9_31), 1721 }, /* ADD */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_06c0_31), 1728 }, /* RTM */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_06c8_31), 1736 }, /* RTM */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_06d0_31), 1744 }, /* CALLM */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_06e8_31), 1768 }, /* CALLM */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_06f0_31), 1776 }, /* CALLM */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_06f8_31), 1784 }, /* CALLM */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_06f9_31), 1785 }, /* CALLM */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_06fa_31), 1786 }, /* CALLM */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_06fb_31), 1787 }, /* CALLM */ #endif { CPUFUNC(op_0800_31), 2048 }, /* BTST */ { CPUFUNC(op_0810_31), 2064 }, /* BTST */ { CPUFUNC(op_0818_31), 2072 }, /* BTST */ { CPUFUNC(op_0820_31), 2080 }, /* BTST */ { CPUFUNC(op_0828_31), 2088 }, /* BTST */ { CPUFUNC(op_0830_31), 2096 }, /* BTST */ { CPUFUNC(op_0838_31), 2104 }, /* BTST */ { CPUFUNC(op_0839_31), 2105 }, /* BTST */ { CPUFUNC(op_083a_31), 2106 }, /* BTST */ { CPUFUNC(op_083b_31), 2107 }, /* BTST */ { CPUFUNC(op_083c_31), 2108 }, /* BTST */ { CPUFUNC(op_0840_31), 2112 }, /* BCHG */ { CPUFUNC(op_0850_31), 2128 }, /* BCHG */ { CPUFUNC(op_0858_31), 2136 }, /* BCHG */ { CPUFUNC(op_0860_31), 2144 }, /* BCHG */ { CPUFUNC(op_0868_31), 2152 }, /* BCHG */ { CPUFUNC(op_0870_31), 2160 }, /* BCHG */ { CPUFUNC(op_0878_31), 2168 }, /* BCHG */ { CPUFUNC(op_0879_31), 2169 }, /* BCHG */ { CPUFUNC(op_087a_31), 2170 }, /* BCHG */ { CPUFUNC(op_087b_31), 2171 }, /* BCHG */ { CPUFUNC(op_0880_31), 2176 }, /* BCLR */ { CPUFUNC(op_0890_31), 2192 }, /* BCLR */ { CPUFUNC(op_0898_31), 2200 }, /* BCLR */ { CPUFUNC(op_08a0_31), 2208 }, /* BCLR */ { CPUFUNC(op_08a8_31), 2216 }, /* BCLR */ { CPUFUNC(op_08b0_31), 2224 }, /* BCLR */ { CPUFUNC(op_08b8_31), 2232 }, /* BCLR */ { CPUFUNC(op_08b9_31), 2233 }, /* BCLR */ { CPUFUNC(op_08ba_31), 2234 }, /* BCLR */ { CPUFUNC(op_08bb_31), 2235 }, /* BCLR */ { CPUFUNC(op_08c0_31), 2240 }, /* BSET */ { CPUFUNC(op_08d0_31), 2256 }, /* BSET */ { CPUFUNC(op_08d8_31), 2264 }, /* BSET */ { CPUFUNC(op_08e0_31), 2272 }, /* BSET */ { CPUFUNC(op_08e8_31), 2280 }, /* BSET */ { CPUFUNC(op_08f0_31), 2288 }, /* BSET */ { CPUFUNC(op_08f8_31), 2296 }, /* BSET */ { CPUFUNC(op_08f9_31), 2297 }, /* BSET */ { CPUFUNC(op_08fa_31), 2298 }, /* BSET */ { CPUFUNC(op_08fb_31), 2299 }, /* BSET */ { CPUFUNC(op_0a00_31), 2560 }, /* EOR */ { CPUFUNC(op_0a10_31), 2576 }, /* EOR */ { CPUFUNC(op_0a18_31), 2584 }, /* EOR */ { CPUFUNC(op_0a20_31), 2592 }, /* EOR */ { CPUFUNC(op_0a28_31), 2600 }, /* EOR */ { CPUFUNC(op_0a30_31), 2608 }, /* EOR */ { CPUFUNC(op_0a38_31), 2616 }, /* EOR */ { CPUFUNC(op_0a39_31), 2617 }, /* EOR */ { CPUFUNC(op_0a3c_31), 2620 }, /* EORSR */ { CPUFUNC(op_0a40_31), 2624 }, /* EOR */ { CPUFUNC(op_0a50_31), 2640 }, /* EOR */ { CPUFUNC(op_0a58_31), 2648 }, /* EOR */ { CPUFUNC(op_0a60_31), 2656 }, /* EOR */ { CPUFUNC(op_0a68_31), 2664 }, /* EOR */ { CPUFUNC(op_0a70_31), 2672 }, /* EOR */ { CPUFUNC(op_0a78_31), 2680 }, /* EOR */ { CPUFUNC(op_0a79_31), 2681 }, /* EOR */ { CPUFUNC(op_0a7c_31), 2684 }, /* EORSR */ { CPUFUNC(op_0a80_31), 2688 }, /* EOR */ { CPUFUNC(op_0a90_31), 2704 }, /* EOR */ { CPUFUNC(op_0a98_31), 2712 }, /* EOR */ { CPUFUNC(op_0aa0_31), 2720 }, /* EOR */ { CPUFUNC(op_0aa8_31), 2728 }, /* EOR */ { CPUFUNC(op_0ab0_31), 2736 }, /* EOR */ { CPUFUNC(op_0ab8_31), 2744 }, /* EOR */ { CPUFUNC(op_0ab9_31), 2745 }, /* EOR */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0ad0_31), 2768 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0ad8_31), 2776 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0ae0_31), 2784 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0ae8_31), 2792 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0af0_31), 2800 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0af8_31), 2808 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0af9_31), 2809 }, /* CAS */ #endif { CPUFUNC(op_0c00_31), 3072 }, /* CMP */ { CPUFUNC(op_0c10_31), 3088 }, /* CMP */ { CPUFUNC(op_0c18_31), 3096 }, /* CMP */ { CPUFUNC(op_0c20_31), 3104 }, /* CMP */ { CPUFUNC(op_0c28_31), 3112 }, /* CMP */ { CPUFUNC(op_0c30_31), 3120 }, /* CMP */ { CPUFUNC(op_0c38_31), 3128 }, /* CMP */ { CPUFUNC(op_0c39_31), 3129 }, /* CMP */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0c3a_31), 3130 }, /* CMP */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0c3b_31), 3131 }, /* CMP */ #endif { CPUFUNC(op_0c40_31), 3136 }, /* CMP */ { CPUFUNC(op_0c50_31), 3152 }, /* CMP */ { CPUFUNC(op_0c58_31), 3160 }, /* CMP */ { CPUFUNC(op_0c60_31), 3168 }, /* CMP */ { CPUFUNC(op_0c68_31), 3176 }, /* CMP */ { CPUFUNC(op_0c70_31), 3184 }, /* CMP */ { CPUFUNC(op_0c78_31), 3192 }, /* CMP */ { CPUFUNC(op_0c79_31), 3193 }, /* CMP */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0c7a_31), 3194 }, /* CMP */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0c7b_31), 3195 }, /* CMP */ #endif { CPUFUNC(op_0c80_31), 3200 }, /* CMP */ { CPUFUNC(op_0c90_31), 3216 }, /* CMP */ { CPUFUNC(op_0c98_31), 3224 }, /* CMP */ { CPUFUNC(op_0ca0_31), 3232 }, /* CMP */ { CPUFUNC(op_0ca8_31), 3240 }, /* CMP */ { CPUFUNC(op_0cb0_31), 3248 }, /* CMP */ { CPUFUNC(op_0cb8_31), 3256 }, /* CMP */ { CPUFUNC(op_0cb9_31), 3257 }, /* CMP */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0cba_31), 3258 }, /* CMP */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0cbb_31), 3259 }, /* CMP */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0cd0_31), 3280 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0cd8_31), 3288 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0ce0_31), 3296 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0ce8_31), 3304 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0cf0_31), 3312 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0cf8_31), 3320 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0cf9_31), 3321 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0cfc_31), 3324 }, /* CAS2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0e10_31), 3600 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0e18_31), 3608 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0e20_31), 3616 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0e28_31), 3624 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0e30_31), 3632 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0e38_31), 3640 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0e39_31), 3641 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0e50_31), 3664 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0e58_31), 3672 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0e60_31), 3680 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0e68_31), 3688 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0e70_31), 3696 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0e78_31), 3704 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0e79_31), 3705 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0e90_31), 3728 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0e98_31), 3736 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0ea0_31), 3744 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0ea8_31), 3752 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0eb0_31), 3760 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0eb8_31), 3768 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0eb9_31), 3769 }, /* MOVES */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0ed0_31), 3792 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0ed8_31), 3800 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0ee0_31), 3808 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0ee8_31), 3816 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0ef0_31), 3824 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0ef8_31), 3832 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0ef9_31), 3833 }, /* CAS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_0efc_31), 3836 }, /* CAS2 */ #endif { CPUFUNC(op_1000_31), 4096 }, /* MOVE */ { CPUFUNC(op_1010_31), 4112 }, /* MOVE */ { CPUFUNC(op_1018_31), 4120 }, /* MOVE */ { CPUFUNC(op_1020_31), 4128 }, /* MOVE */ { CPUFUNC(op_1028_31), 4136 }, /* MOVE */ { CPUFUNC(op_1030_31), 4144 }, /* MOVE */ { CPUFUNC(op_1038_31), 4152 }, /* MOVE */ { CPUFUNC(op_1039_31), 4153 }, /* MOVE */ { CPUFUNC(op_103a_31), 4154 }, /* MOVE */ { CPUFUNC(op_103b_31), 4155 }, /* MOVE */ { CPUFUNC(op_103c_31), 4156 }, /* MOVE */ { CPUFUNC(op_1080_31), 4224 }, /* MOVE */ { CPUFUNC(op_1090_31), 4240 }, /* MOVE */ { CPUFUNC(op_1098_31), 4248 }, /* MOVE */ { CPUFUNC(op_10a0_31), 4256 }, /* MOVE */ { CPUFUNC(op_10a8_31), 4264 }, /* MOVE */ { CPUFUNC(op_10b0_31), 4272 }, /* MOVE */ { CPUFUNC(op_10b8_31), 4280 }, /* MOVE */ { CPUFUNC(op_10b9_31), 4281 }, /* MOVE */ { CPUFUNC(op_10ba_31), 4282 }, /* MOVE */ { CPUFUNC(op_10bb_31), 4283 }, /* MOVE */ { CPUFUNC(op_10bc_31), 4284 }, /* MOVE */ { CPUFUNC(op_10c0_31), 4288 }, /* MOVE */ { CPUFUNC(op_10d0_31), 4304 }, /* MOVE */ { CPUFUNC(op_10d8_31), 4312 }, /* MOVE */ { CPUFUNC(op_10e0_31), 4320 }, /* MOVE */ { CPUFUNC(op_10e8_31), 4328 }, /* MOVE */ { CPUFUNC(op_10f0_31), 4336 }, /* MOVE */ { CPUFUNC(op_10f8_31), 4344 }, /* MOVE */ { CPUFUNC(op_10f9_31), 4345 }, /* MOVE */ { CPUFUNC(op_10fa_31), 4346 }, /* MOVE */ { CPUFUNC(op_10fb_31), 4347 }, /* MOVE */ { CPUFUNC(op_10fc_31), 4348 }, /* MOVE */ { CPUFUNC(op_1100_31), 4352 }, /* MOVE */ { CPUFUNC(op_1110_31), 4368 }, /* MOVE */ { CPUFUNC(op_1118_31), 4376 }, /* MOVE */ { CPUFUNC(op_1120_31), 4384 }, /* MOVE */ { CPUFUNC(op_1128_31), 4392 }, /* MOVE */ { CPUFUNC(op_1130_31), 4400 }, /* MOVE */ { CPUFUNC(op_1138_31), 4408 }, /* MOVE */ { CPUFUNC(op_1139_31), 4409 }, /* MOVE */ { CPUFUNC(op_113a_31), 4410 }, /* MOVE */ { CPUFUNC(op_113b_31), 4411 }, /* MOVE */ { CPUFUNC(op_113c_31), 4412 }, /* MOVE */ { CPUFUNC(op_1140_31), 4416 }, /* MOVE */ { CPUFUNC(op_1150_31), 4432 }, /* MOVE */ { CPUFUNC(op_1158_31), 4440 }, /* MOVE */ { CPUFUNC(op_1160_31), 4448 }, /* MOVE */ { CPUFUNC(op_1168_31), 4456 }, /* MOVE */ { CPUFUNC(op_1170_31), 4464 }, /* MOVE */ { CPUFUNC(op_1178_31), 4472 }, /* MOVE */ { CPUFUNC(op_1179_31), 4473 }, /* MOVE */ { CPUFUNC(op_117a_31), 4474 }, /* MOVE */ { CPUFUNC(op_117b_31), 4475 }, /* MOVE */ { CPUFUNC(op_117c_31), 4476 }, /* MOVE */ { CPUFUNC(op_1180_31), 4480 }, /* MOVE */ { CPUFUNC(op_1190_31), 4496 }, /* MOVE */ { CPUFUNC(op_1198_31), 4504 }, /* MOVE */ { CPUFUNC(op_11a0_31), 4512 }, /* MOVE */ { CPUFUNC(op_11a8_31), 4520 }, /* MOVE */ { CPUFUNC(op_11b0_31), 4528 }, /* MOVE */ { CPUFUNC(op_11b8_31), 4536 }, /* MOVE */ { CPUFUNC(op_11b9_31), 4537 }, /* MOVE */ { CPUFUNC(op_11ba_31), 4538 }, /* MOVE */ { CPUFUNC(op_11bb_31), 4539 }, /* MOVE */ { CPUFUNC(op_11bc_31), 4540 }, /* MOVE */ { CPUFUNC(op_11c0_31), 4544 }, /* MOVE */ { CPUFUNC(op_11d0_31), 4560 }, /* MOVE */ { CPUFUNC(op_11d8_31), 4568 }, /* MOVE */ { CPUFUNC(op_11e0_31), 4576 }, /* MOVE */ { CPUFUNC(op_11e8_31), 4584 }, /* MOVE */ { CPUFUNC(op_11f0_31), 4592 }, /* MOVE */ { CPUFUNC(op_11f8_31), 4600 }, /* MOVE */ { CPUFUNC(op_11f9_31), 4601 }, /* MOVE */ { CPUFUNC(op_11fa_31), 4602 }, /* MOVE */ { CPUFUNC(op_11fb_31), 4603 }, /* MOVE */ { CPUFUNC(op_11fc_31), 4604 }, /* MOVE */ { CPUFUNC(op_13c0_31), 5056 }, /* MOVE */ { CPUFUNC(op_13d0_31), 5072 }, /* MOVE */ { CPUFUNC(op_13d8_31), 5080 }, /* MOVE */ { CPUFUNC(op_13e0_31), 5088 }, /* MOVE */ { CPUFUNC(op_13e8_31), 5096 }, /* MOVE */ { CPUFUNC(op_13f0_31), 5104 }, /* MOVE */ { CPUFUNC(op_13f8_31), 5112 }, /* MOVE */ { CPUFUNC(op_13f9_31), 5113 }, /* MOVE */ { CPUFUNC(op_13fa_31), 5114 }, /* MOVE */ { CPUFUNC(op_13fb_31), 5115 }, /* MOVE */ { CPUFUNC(op_13fc_31), 5116 }, /* MOVE */ { CPUFUNC(op_2000_31), 8192 }, /* MOVE */ { CPUFUNC(op_2008_31), 8200 }, /* MOVE */ { CPUFUNC(op_2010_31), 8208 }, /* MOVE */ { CPUFUNC(op_2018_31), 8216 }, /* MOVE */ { CPUFUNC(op_2020_31), 8224 }, /* MOVE */ { CPUFUNC(op_2028_31), 8232 }, /* MOVE */ { CPUFUNC(op_2030_31), 8240 }, /* MOVE */ { CPUFUNC(op_2038_31), 8248 }, /* MOVE */ { CPUFUNC(op_2039_31), 8249 }, /* MOVE */ { CPUFUNC(op_203a_31), 8250 }, /* MOVE */ { CPUFUNC(op_203b_31), 8251 }, /* MOVE */ { CPUFUNC(op_203c_31), 8252 }, /* MOVE */ { CPUFUNC(op_2040_31), 8256 }, /* MOVEA */ { CPUFUNC(op_2048_31), 8264 }, /* MOVEA */ { CPUFUNC(op_2050_31), 8272 }, /* MOVEA */ { CPUFUNC(op_2058_31), 8280 }, /* MOVEA */ { CPUFUNC(op_2060_31), 8288 }, /* MOVEA */ { CPUFUNC(op_2068_31), 8296 }, /* MOVEA */ { CPUFUNC(op_2070_31), 8304 }, /* MOVEA */ { CPUFUNC(op_2078_31), 8312 }, /* MOVEA */ { CPUFUNC(op_2079_31), 8313 }, /* MOVEA */ { CPUFUNC(op_207a_31), 8314 }, /* MOVEA */ { CPUFUNC(op_207b_31), 8315 }, /* MOVEA */ { CPUFUNC(op_207c_31), 8316 }, /* MOVEA */ { CPUFUNC(op_2080_31), 8320 }, /* MOVE */ { CPUFUNC(op_2088_31), 8328 }, /* MOVE */ { CPUFUNC(op_2090_31), 8336 }, /* MOVE */ { CPUFUNC(op_2098_31), 8344 }, /* MOVE */ { CPUFUNC(op_20a0_31), 8352 }, /* MOVE */ { CPUFUNC(op_20a8_31), 8360 }, /* MOVE */ { CPUFUNC(op_20b0_31), 8368 }, /* MOVE */ { CPUFUNC(op_20b8_31), 8376 }, /* MOVE */ { CPUFUNC(op_20b9_31), 8377 }, /* MOVE */ { CPUFUNC(op_20ba_31), 8378 }, /* MOVE */ { CPUFUNC(op_20bb_31), 8379 }, /* MOVE */ { CPUFUNC(op_20bc_31), 8380 }, /* MOVE */ { CPUFUNC(op_20c0_31), 8384 }, /* MOVE */ { CPUFUNC(op_20c8_31), 8392 }, /* MOVE */ { CPUFUNC(op_20d0_31), 8400 }, /* MOVE */ { CPUFUNC(op_20d8_31), 8408 }, /* MOVE */ { CPUFUNC(op_20e0_31), 8416 }, /* MOVE */ { CPUFUNC(op_20e8_31), 8424 }, /* MOVE */ { CPUFUNC(op_20f0_31), 8432 }, /* MOVE */ { CPUFUNC(op_20f8_31), 8440 }, /* MOVE */ { CPUFUNC(op_20f9_31), 8441 }, /* MOVE */ { CPUFUNC(op_20fa_31), 8442 }, /* MOVE */ { CPUFUNC(op_20fb_31), 8443 }, /* MOVE */ { CPUFUNC(op_20fc_31), 8444 }, /* MOVE */ { CPUFUNC(op_2100_31), 8448 }, /* MOVE */ { CPUFUNC(op_2108_31), 8456 }, /* MOVE */ { CPUFUNC(op_2110_31), 8464 }, /* MOVE */ { CPUFUNC(op_2118_31), 8472 }, /* MOVE */ { CPUFUNC(op_2120_31), 8480 }, /* MOVE */ { CPUFUNC(op_2128_31), 8488 }, /* MOVE */ { CPUFUNC(op_2130_31), 8496 }, /* MOVE */ { CPUFUNC(op_2138_31), 8504 }, /* MOVE */ { CPUFUNC(op_2139_31), 8505 }, /* MOVE */ { CPUFUNC(op_213a_31), 8506 }, /* MOVE */ { CPUFUNC(op_213b_31), 8507 }, /* MOVE */ { CPUFUNC(op_213c_31), 8508 }, /* MOVE */ { CPUFUNC(op_2140_31), 8512 }, /* MOVE */ { CPUFUNC(op_2148_31), 8520 }, /* MOVE */ { CPUFUNC(op_2150_31), 8528 }, /* MOVE */ { CPUFUNC(op_2158_31), 8536 }, /* MOVE */ { CPUFUNC(op_2160_31), 8544 }, /* MOVE */ { CPUFUNC(op_2168_31), 8552 }, /* MOVE */ { CPUFUNC(op_2170_31), 8560 }, /* MOVE */ { CPUFUNC(op_2178_31), 8568 }, /* MOVE */ { CPUFUNC(op_2179_31), 8569 }, /* MOVE */ { CPUFUNC(op_217a_31), 8570 }, /* MOVE */ { CPUFUNC(op_217b_31), 8571 }, /* MOVE */ { CPUFUNC(op_217c_31), 8572 }, /* MOVE */ { CPUFUNC(op_2180_31), 8576 }, /* MOVE */ { CPUFUNC(op_2188_31), 8584 }, /* MOVE */ { CPUFUNC(op_2190_31), 8592 }, /* MOVE */ { CPUFUNC(op_2198_31), 8600 }, /* MOVE */ { CPUFUNC(op_21a0_31), 8608 }, /* MOVE */ { CPUFUNC(op_21a8_31), 8616 }, /* MOVE */ { CPUFUNC(op_21b0_31), 8624 }, /* MOVE */ { CPUFUNC(op_21b8_31), 8632 }, /* MOVE */ { CPUFUNC(op_21b9_31), 8633 }, /* MOVE */ { CPUFUNC(op_21ba_31), 8634 }, /* MOVE */ { CPUFUNC(op_21bb_31), 8635 }, /* MOVE */ { CPUFUNC(op_21bc_31), 8636 }, /* MOVE */ { CPUFUNC(op_21c0_31), 8640 }, /* MOVE */ { CPUFUNC(op_21c8_31), 8648 }, /* MOVE */ { CPUFUNC(op_21d0_31), 8656 }, /* MOVE */ { CPUFUNC(op_21d8_31), 8664 }, /* MOVE */ { CPUFUNC(op_21e0_31), 8672 }, /* MOVE */ { CPUFUNC(op_21e8_31), 8680 }, /* MOVE */ { CPUFUNC(op_21f0_31), 8688 }, /* MOVE */ { CPUFUNC(op_21f8_31), 8696 }, /* MOVE */ { CPUFUNC(op_21f9_31), 8697 }, /* MOVE */ { CPUFUNC(op_21fa_31), 8698 }, /* MOVE */ { CPUFUNC(op_21fb_31), 8699 }, /* MOVE */ { CPUFUNC(op_21fc_31), 8700 }, /* MOVE */ { CPUFUNC(op_23c0_31), 9152 }, /* MOVE */ { CPUFUNC(op_23c8_31), 9160 }, /* MOVE */ { CPUFUNC(op_23d0_31), 9168 }, /* MOVE */ { CPUFUNC(op_23d8_31), 9176 }, /* MOVE */ { CPUFUNC(op_23e0_31), 9184 }, /* MOVE */ { CPUFUNC(op_23e8_31), 9192 }, /* MOVE */ { CPUFUNC(op_23f0_31), 9200 }, /* MOVE */ { CPUFUNC(op_23f8_31), 9208 }, /* MOVE */ { CPUFUNC(op_23f9_31), 9209 }, /* MOVE */ { CPUFUNC(op_23fa_31), 9210 }, /* MOVE */ { CPUFUNC(op_23fb_31), 9211 }, /* MOVE */ { CPUFUNC(op_23fc_31), 9212 }, /* MOVE */ { CPUFUNC(op_3000_31), 12288 }, /* MOVE */ { CPUFUNC(op_3008_31), 12296 }, /* MOVE */ { CPUFUNC(op_3010_31), 12304 }, /* MOVE */ { CPUFUNC(op_3018_31), 12312 }, /* MOVE */ { CPUFUNC(op_3020_31), 12320 }, /* MOVE */ { CPUFUNC(op_3028_31), 12328 }, /* MOVE */ { CPUFUNC(op_3030_31), 12336 }, /* MOVE */ { CPUFUNC(op_3038_31), 12344 }, /* MOVE */ { CPUFUNC(op_3039_31), 12345 }, /* MOVE */ { CPUFUNC(op_303a_31), 12346 }, /* MOVE */ { CPUFUNC(op_303b_31), 12347 }, /* MOVE */ { CPUFUNC(op_303c_31), 12348 }, /* MOVE */ { CPUFUNC(op_3040_31), 12352 }, /* MOVEA */ { CPUFUNC(op_3048_31), 12360 }, /* MOVEA */ { CPUFUNC(op_3050_31), 12368 }, /* MOVEA */ { CPUFUNC(op_3058_31), 12376 }, /* MOVEA */ { CPUFUNC(op_3060_31), 12384 }, /* MOVEA */ { CPUFUNC(op_3068_31), 12392 }, /* MOVEA */ { CPUFUNC(op_3070_31), 12400 }, /* MOVEA */ { CPUFUNC(op_3078_31), 12408 }, /* MOVEA */ { CPUFUNC(op_3079_31), 12409 }, /* MOVEA */ { CPUFUNC(op_307a_31), 12410 }, /* MOVEA */ { CPUFUNC(op_307b_31), 12411 }, /* MOVEA */ { CPUFUNC(op_307c_31), 12412 }, /* MOVEA */ { CPUFUNC(op_3080_31), 12416 }, /* MOVE */ { CPUFUNC(op_3088_31), 12424 }, /* MOVE */ { CPUFUNC(op_3090_31), 12432 }, /* MOVE */ { CPUFUNC(op_3098_31), 12440 }, /* MOVE */ { CPUFUNC(op_30a0_31), 12448 }, /* MOVE */ { CPUFUNC(op_30a8_31), 12456 }, /* MOVE */ { CPUFUNC(op_30b0_31), 12464 }, /* MOVE */ { CPUFUNC(op_30b8_31), 12472 }, /* MOVE */ { CPUFUNC(op_30b9_31), 12473 }, /* MOVE */ { CPUFUNC(op_30ba_31), 12474 }, /* MOVE */ { CPUFUNC(op_30bb_31), 12475 }, /* MOVE */ { CPUFUNC(op_30bc_31), 12476 }, /* MOVE */ { CPUFUNC(op_30c0_31), 12480 }, /* MOVE */ { CPUFUNC(op_30c8_31), 12488 }, /* MOVE */ { CPUFUNC(op_30d0_31), 12496 }, /* MOVE */ { CPUFUNC(op_30d8_31), 12504 }, /* MOVE */ { CPUFUNC(op_30e0_31), 12512 }, /* MOVE */ { CPUFUNC(op_30e8_31), 12520 }, /* MOVE */ { CPUFUNC(op_30f0_31), 12528 }, /* MOVE */ { CPUFUNC(op_30f8_31), 12536 }, /* MOVE */ { CPUFUNC(op_30f9_31), 12537 }, /* MOVE */ { CPUFUNC(op_30fa_31), 12538 }, /* MOVE */ { CPUFUNC(op_30fb_31), 12539 }, /* MOVE */ { CPUFUNC(op_30fc_31), 12540 }, /* MOVE */ { CPUFUNC(op_3100_31), 12544 }, /* MOVE */ { CPUFUNC(op_3108_31), 12552 }, /* MOVE */ { CPUFUNC(op_3110_31), 12560 }, /* MOVE */ { CPUFUNC(op_3118_31), 12568 }, /* MOVE */ { CPUFUNC(op_3120_31), 12576 }, /* MOVE */ { CPUFUNC(op_3128_31), 12584 }, /* MOVE */ { CPUFUNC(op_3130_31), 12592 }, /* MOVE */ { CPUFUNC(op_3138_31), 12600 }, /* MOVE */ { CPUFUNC(op_3139_31), 12601 }, /* MOVE */ { CPUFUNC(op_313a_31), 12602 }, /* MOVE */ { CPUFUNC(op_313b_31), 12603 }, /* MOVE */ { CPUFUNC(op_313c_31), 12604 }, /* MOVE */ { CPUFUNC(op_3140_31), 12608 }, /* MOVE */ { CPUFUNC(op_3148_31), 12616 }, /* MOVE */ { CPUFUNC(op_3150_31), 12624 }, /* MOVE */ { CPUFUNC(op_3158_31), 12632 }, /* MOVE */ { CPUFUNC(op_3160_31), 12640 }, /* MOVE */ { CPUFUNC(op_3168_31), 12648 }, /* MOVE */ { CPUFUNC(op_3170_31), 12656 }, /* MOVE */ { CPUFUNC(op_3178_31), 12664 }, /* MOVE */ { CPUFUNC(op_3179_31), 12665 }, /* MOVE */ { CPUFUNC(op_317a_31), 12666 }, /* MOVE */ { CPUFUNC(op_317b_31), 12667 }, /* MOVE */ { CPUFUNC(op_317c_31), 12668 }, /* MOVE */ { CPUFUNC(op_3180_31), 12672 }, /* MOVE */ { CPUFUNC(op_3188_31), 12680 }, /* MOVE */ { CPUFUNC(op_3190_31), 12688 }, /* MOVE */ { CPUFUNC(op_3198_31), 12696 }, /* MOVE */ { CPUFUNC(op_31a0_31), 12704 }, /* MOVE */ { CPUFUNC(op_31a8_31), 12712 }, /* MOVE */ { CPUFUNC(op_31b0_31), 12720 }, /* MOVE */ { CPUFUNC(op_31b8_31), 12728 }, /* MOVE */ { CPUFUNC(op_31b9_31), 12729 }, /* MOVE */ { CPUFUNC(op_31ba_31), 12730 }, /* MOVE */ { CPUFUNC(op_31bb_31), 12731 }, /* MOVE */ { CPUFUNC(op_31bc_31), 12732 }, /* MOVE */ { CPUFUNC(op_31c0_31), 12736 }, /* MOVE */ { CPUFUNC(op_31c8_31), 12744 }, /* MOVE */ { CPUFUNC(op_31d0_31), 12752 }, /* MOVE */ { CPUFUNC(op_31d8_31), 12760 }, /* MOVE */ { CPUFUNC(op_31e0_31), 12768 }, /* MOVE */ { CPUFUNC(op_31e8_31), 12776 }, /* MOVE */ { CPUFUNC(op_31f0_31), 12784 }, /* MOVE */ { CPUFUNC(op_31f8_31), 12792 }, /* MOVE */ { CPUFUNC(op_31f9_31), 12793 }, /* MOVE */ { CPUFUNC(op_31fa_31), 12794 }, /* MOVE */ { CPUFUNC(op_31fb_31), 12795 }, /* MOVE */ { CPUFUNC(op_31fc_31), 12796 }, /* MOVE */ { CPUFUNC(op_33c0_31), 13248 }, /* MOVE */ { CPUFUNC(op_33c8_31), 13256 }, /* MOVE */ { CPUFUNC(op_33d0_31), 13264 }, /* MOVE */ { CPUFUNC(op_33d8_31), 13272 }, /* MOVE */ { CPUFUNC(op_33e0_31), 13280 }, /* MOVE */ { CPUFUNC(op_33e8_31), 13288 }, /* MOVE */ { CPUFUNC(op_33f0_31), 13296 }, /* MOVE */ { CPUFUNC(op_33f8_31), 13304 }, /* MOVE */ { CPUFUNC(op_33f9_31), 13305 }, /* MOVE */ { CPUFUNC(op_33fa_31), 13306 }, /* MOVE */ { CPUFUNC(op_33fb_31), 13307 }, /* MOVE */ { CPUFUNC(op_33fc_31), 13308 }, /* MOVE */ { CPUFUNC(op_4000_31), 16384 }, /* NEGX */ { CPUFUNC(op_4010_31), 16400 }, /* NEGX */ { CPUFUNC(op_4018_31), 16408 }, /* NEGX */ { CPUFUNC(op_4020_31), 16416 }, /* NEGX */ { CPUFUNC(op_4028_31), 16424 }, /* NEGX */ { CPUFUNC(op_4030_31), 16432 }, /* NEGX */ { CPUFUNC(op_4038_31), 16440 }, /* NEGX */ { CPUFUNC(op_4039_31), 16441 }, /* NEGX */ { CPUFUNC(op_4040_31), 16448 }, /* NEGX */ { CPUFUNC(op_4050_31), 16464 }, /* NEGX */ { CPUFUNC(op_4058_31), 16472 }, /* NEGX */ { CPUFUNC(op_4060_31), 16480 }, /* NEGX */ { CPUFUNC(op_4068_31), 16488 }, /* NEGX */ { CPUFUNC(op_4070_31), 16496 }, /* NEGX */ { CPUFUNC(op_4078_31), 16504 }, /* NEGX */ { CPUFUNC(op_4079_31), 16505 }, /* NEGX */ { CPUFUNC(op_4080_31), 16512 }, /* NEGX */ { CPUFUNC(op_4090_31), 16528 }, /* NEGX */ { CPUFUNC(op_4098_31), 16536 }, /* NEGX */ { CPUFUNC(op_40a0_31), 16544 }, /* NEGX */ { CPUFUNC(op_40a8_31), 16552 }, /* NEGX */ { CPUFUNC(op_40b0_31), 16560 }, /* NEGX */ { CPUFUNC(op_40b8_31), 16568 }, /* NEGX */ { CPUFUNC(op_40b9_31), 16569 }, /* NEGX */ { CPUFUNC(op_40c0_31), 16576 }, /* MVSR2 */ { CPUFUNC(op_40d0_31), 16592 }, /* MVSR2 */ { CPUFUNC(op_40d8_31), 16600 }, /* MVSR2 */ { CPUFUNC(op_40e0_31), 16608 }, /* MVSR2 */ { CPUFUNC(op_40e8_31), 16616 }, /* MVSR2 */ { CPUFUNC(op_40f0_31), 16624 }, /* MVSR2 */ { CPUFUNC(op_40f8_31), 16632 }, /* MVSR2 */ { CPUFUNC(op_40f9_31), 16633 }, /* MVSR2 */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4100_31), 16640 }, /* CHK */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4110_31), 16656 }, /* CHK */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4118_31), 16664 }, /* CHK */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4120_31), 16672 }, /* CHK */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4128_31), 16680 }, /* CHK */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4130_31), 16688 }, /* CHK */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4138_31), 16696 }, /* CHK */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4139_31), 16697 }, /* CHK */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_413a_31), 16698 }, /* CHK */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_413b_31), 16699 }, /* CHK */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_413c_31), 16700 }, /* CHK */ #endif { CPUFUNC(op_4180_31), 16768 }, /* CHK */ { CPUFUNC(op_4190_31), 16784 }, /* CHK */ { CPUFUNC(op_4198_31), 16792 }, /* CHK */ { CPUFUNC(op_41a0_31), 16800 }, /* CHK */ { CPUFUNC(op_41a8_31), 16808 }, /* CHK */ { CPUFUNC(op_41b0_31), 16816 }, /* CHK */ { CPUFUNC(op_41b8_31), 16824 }, /* CHK */ { CPUFUNC(op_41b9_31), 16825 }, /* CHK */ { CPUFUNC(op_41ba_31), 16826 }, /* CHK */ { CPUFUNC(op_41bb_31), 16827 }, /* CHK */ { CPUFUNC(op_41bc_31), 16828 }, /* CHK */ { CPUFUNC(op_41d0_31), 16848 }, /* LEA */ { CPUFUNC(op_41e8_31), 16872 }, /* LEA */ { CPUFUNC(op_41f0_31), 16880 }, /* LEA */ { CPUFUNC(op_41f8_31), 16888 }, /* LEA */ { CPUFUNC(op_41f9_31), 16889 }, /* LEA */ { CPUFUNC(op_41fa_31), 16890 }, /* LEA */ { CPUFUNC(op_41fb_31), 16891 }, /* LEA */ { CPUFUNC(op_4200_31), 16896 }, /* CLR */ { CPUFUNC(op_4210_31), 16912 }, /* CLR */ { CPUFUNC(op_4218_31), 16920 }, /* CLR */ { CPUFUNC(op_4220_31), 16928 }, /* CLR */ { CPUFUNC(op_4228_31), 16936 }, /* CLR */ { CPUFUNC(op_4230_31), 16944 }, /* CLR */ { CPUFUNC(op_4238_31), 16952 }, /* CLR */ { CPUFUNC(op_4239_31), 16953 }, /* CLR */ { CPUFUNC(op_4240_31), 16960 }, /* CLR */ { CPUFUNC(op_4250_31), 16976 }, /* CLR */ { CPUFUNC(op_4258_31), 16984 }, /* CLR */ { CPUFUNC(op_4260_31), 16992 }, /* CLR */ { CPUFUNC(op_4268_31), 17000 }, /* CLR */ { CPUFUNC(op_4270_31), 17008 }, /* CLR */ { CPUFUNC(op_4278_31), 17016 }, /* CLR */ { CPUFUNC(op_4279_31), 17017 }, /* CLR */ { CPUFUNC(op_4280_31), 17024 }, /* CLR */ { CPUFUNC(op_4290_31), 17040 }, /* CLR */ { CPUFUNC(op_4298_31), 17048 }, /* CLR */ { CPUFUNC(op_42a0_31), 17056 }, /* CLR */ { CPUFUNC(op_42a8_31), 17064 }, /* CLR */ { CPUFUNC(op_42b0_31), 17072 }, /* CLR */ { CPUFUNC(op_42b8_31), 17080 }, /* CLR */ { CPUFUNC(op_42b9_31), 17081 }, /* CLR */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_42c0_31), 17088 }, /* MVSR2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_42d0_31), 17104 }, /* MVSR2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_42d8_31), 17112 }, /* MVSR2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_42e0_31), 17120 }, /* MVSR2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_42e8_31), 17128 }, /* MVSR2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_42f0_31), 17136 }, /* MVSR2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_42f8_31), 17144 }, /* MVSR2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_42f9_31), 17145 }, /* MVSR2 */ #endif { CPUFUNC(op_4400_31), 17408 }, /* NEG */ { CPUFUNC(op_4410_31), 17424 }, /* NEG */ { CPUFUNC(op_4418_31), 17432 }, /* NEG */ { CPUFUNC(op_4420_31), 17440 }, /* NEG */ { CPUFUNC(op_4428_31), 17448 }, /* NEG */ { CPUFUNC(op_4430_31), 17456 }, /* NEG */ { CPUFUNC(op_4438_31), 17464 }, /* NEG */ { CPUFUNC(op_4439_31), 17465 }, /* NEG */ { CPUFUNC(op_4440_31), 17472 }, /* NEG */ { CPUFUNC(op_4450_31), 17488 }, /* NEG */ { CPUFUNC(op_4458_31), 17496 }, /* NEG */ { CPUFUNC(op_4460_31), 17504 }, /* NEG */ { CPUFUNC(op_4468_31), 17512 }, /* NEG */ { CPUFUNC(op_4470_31), 17520 }, /* NEG */ { CPUFUNC(op_4478_31), 17528 }, /* NEG */ { CPUFUNC(op_4479_31), 17529 }, /* NEG */ { CPUFUNC(op_4480_31), 17536 }, /* NEG */ { CPUFUNC(op_4490_31), 17552 }, /* NEG */ { CPUFUNC(op_4498_31), 17560 }, /* NEG */ { CPUFUNC(op_44a0_31), 17568 }, /* NEG */ { CPUFUNC(op_44a8_31), 17576 }, /* NEG */ { CPUFUNC(op_44b0_31), 17584 }, /* NEG */ { CPUFUNC(op_44b8_31), 17592 }, /* NEG */ { CPUFUNC(op_44b9_31), 17593 }, /* NEG */ { CPUFUNC(op_44c0_31), 17600 }, /* MV2SR */ { CPUFUNC(op_44d0_31), 17616 }, /* MV2SR */ { CPUFUNC(op_44d8_31), 17624 }, /* MV2SR */ { CPUFUNC(op_44e0_31), 17632 }, /* MV2SR */ { CPUFUNC(op_44e8_31), 17640 }, /* MV2SR */ { CPUFUNC(op_44f0_31), 17648 }, /* MV2SR */ { CPUFUNC(op_44f8_31), 17656 }, /* MV2SR */ { CPUFUNC(op_44f9_31), 17657 }, /* MV2SR */ { CPUFUNC(op_44fa_31), 17658 }, /* MV2SR */ { CPUFUNC(op_44fb_31), 17659 }, /* MV2SR */ { CPUFUNC(op_44fc_31), 17660 }, /* MV2SR */ { CPUFUNC(op_4600_31), 17920 }, /* NOT */ { CPUFUNC(op_4610_31), 17936 }, /* NOT */ { CPUFUNC(op_4618_31), 17944 }, /* NOT */ { CPUFUNC(op_4620_31), 17952 }, /* NOT */ { CPUFUNC(op_4628_31), 17960 }, /* NOT */ { CPUFUNC(op_4630_31), 17968 }, /* NOT */ { CPUFUNC(op_4638_31), 17976 }, /* NOT */ { CPUFUNC(op_4639_31), 17977 }, /* NOT */ { CPUFUNC(op_4640_31), 17984 }, /* NOT */ { CPUFUNC(op_4650_31), 18000 }, /* NOT */ { CPUFUNC(op_4658_31), 18008 }, /* NOT */ { CPUFUNC(op_4660_31), 18016 }, /* NOT */ { CPUFUNC(op_4668_31), 18024 }, /* NOT */ { CPUFUNC(op_4670_31), 18032 }, /* NOT */ { CPUFUNC(op_4678_31), 18040 }, /* NOT */ { CPUFUNC(op_4679_31), 18041 }, /* NOT */ { CPUFUNC(op_4680_31), 18048 }, /* NOT */ { CPUFUNC(op_4690_31), 18064 }, /* NOT */ { CPUFUNC(op_4698_31), 18072 }, /* NOT */ { CPUFUNC(op_46a0_31), 18080 }, /* NOT */ { CPUFUNC(op_46a8_31), 18088 }, /* NOT */ { CPUFUNC(op_46b0_31), 18096 }, /* NOT */ { CPUFUNC(op_46b8_31), 18104 }, /* NOT */ { CPUFUNC(op_46b9_31), 18105 }, /* NOT */ { CPUFUNC(op_46c0_31), 18112 }, /* MV2SR */ { CPUFUNC(op_46d0_31), 18128 }, /* MV2SR */ { CPUFUNC(op_46d8_31), 18136 }, /* MV2SR */ { CPUFUNC(op_46e0_31), 18144 }, /* MV2SR */ { CPUFUNC(op_46e8_31), 18152 }, /* MV2SR */ { CPUFUNC(op_46f0_31), 18160 }, /* MV2SR */ { CPUFUNC(op_46f8_31), 18168 }, /* MV2SR */ { CPUFUNC(op_46f9_31), 18169 }, /* MV2SR */ { CPUFUNC(op_46fa_31), 18170 }, /* MV2SR */ { CPUFUNC(op_46fb_31), 18171 }, /* MV2SR */ { CPUFUNC(op_46fc_31), 18172 }, /* MV2SR */ { CPUFUNC(op_4800_31), 18432 }, /* NBCD */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4808_31), 18440 }, /* LINK */ #endif { CPUFUNC(op_4810_31), 18448 }, /* NBCD */ { CPUFUNC(op_4818_31), 18456 }, /* NBCD */ { CPUFUNC(op_4820_31), 18464 }, /* NBCD */ { CPUFUNC(op_4828_31), 18472 }, /* NBCD */ { CPUFUNC(op_4830_31), 18480 }, /* NBCD */ { CPUFUNC(op_4838_31), 18488 }, /* NBCD */ { CPUFUNC(op_4839_31), 18489 }, /* NBCD */ { CPUFUNC(op_4840_31), 18496 }, /* SWAP */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4848_31), 18504 }, /* BKPT */ #endif { CPUFUNC(op_4850_31), 18512 }, /* PEA */ { CPUFUNC(op_4868_31), 18536 }, /* PEA */ { CPUFUNC(op_4870_31), 18544 }, /* PEA */ { CPUFUNC(op_4878_31), 18552 }, /* PEA */ { CPUFUNC(op_4879_31), 18553 }, /* PEA */ { CPUFUNC(op_487a_31), 18554 }, /* PEA */ { CPUFUNC(op_487b_31), 18555 }, /* PEA */ { CPUFUNC(op_4880_31), 18560 }, /* EXT */ { CPUFUNC(op_4890_31), 18576 }, /* MVMLE */ { CPUFUNC(op_48a0_31), 18592 }, /* MVMLE */ { CPUFUNC(op_48a8_31), 18600 }, /* MVMLE */ { CPUFUNC(op_48b0_31), 18608 }, /* MVMLE */ { CPUFUNC(op_48b8_31), 18616 }, /* MVMLE */ { CPUFUNC(op_48b9_31), 18617 }, /* MVMLE */ { CPUFUNC(op_48c0_31), 18624 }, /* EXT */ { CPUFUNC(op_48d0_31), 18640 }, /* MVMLE */ { CPUFUNC(op_48e0_31), 18656 }, /* MVMLE */ { CPUFUNC(op_48e8_31), 18664 }, /* MVMLE */ { CPUFUNC(op_48f0_31), 18672 }, /* MVMLE */ { CPUFUNC(op_48f8_31), 18680 }, /* MVMLE */ { CPUFUNC(op_48f9_31), 18681 }, /* MVMLE */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_49c0_31), 18880 }, /* EXT */ #endif { CPUFUNC(op_4a00_31), 18944 }, /* TST */ { CPUFUNC(op_4a10_31), 18960 }, /* TST */ { CPUFUNC(op_4a18_31), 18968 }, /* TST */ { CPUFUNC(op_4a20_31), 18976 }, /* TST */ { CPUFUNC(op_4a28_31), 18984 }, /* TST */ { CPUFUNC(op_4a30_31), 18992 }, /* TST */ { CPUFUNC(op_4a38_31), 19000 }, /* TST */ { CPUFUNC(op_4a39_31), 19001 }, /* TST */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4a3a_31), 19002 }, /* TST */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4a3b_31), 19003 }, /* TST */ #endif { CPUFUNC(op_4a3c_31), 19004 }, /* TST */ { CPUFUNC(op_4a40_31), 19008 }, /* TST */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4a48_31), 19016 }, /* TST */ #endif { CPUFUNC(op_4a50_31), 19024 }, /* TST */ { CPUFUNC(op_4a58_31), 19032 }, /* TST */ { CPUFUNC(op_4a60_31), 19040 }, /* TST */ { CPUFUNC(op_4a68_31), 19048 }, /* TST */ { CPUFUNC(op_4a70_31), 19056 }, /* TST */ { CPUFUNC(op_4a78_31), 19064 }, /* TST */ { CPUFUNC(op_4a79_31), 19065 }, /* TST */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4a7a_31), 19066 }, /* TST */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4a7b_31), 19067 }, /* TST */ #endif { CPUFUNC(op_4a7c_31), 19068 }, /* TST */ { CPUFUNC(op_4a80_31), 19072 }, /* TST */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4a88_31), 19080 }, /* TST */ #endif { CPUFUNC(op_4a90_31), 19088 }, /* TST */ { CPUFUNC(op_4a98_31), 19096 }, /* TST */ { CPUFUNC(op_4aa0_31), 19104 }, /* TST */ { CPUFUNC(op_4aa8_31), 19112 }, /* TST */ { CPUFUNC(op_4ab0_31), 19120 }, /* TST */ { CPUFUNC(op_4ab8_31), 19128 }, /* TST */ { CPUFUNC(op_4ab9_31), 19129 }, /* TST */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4aba_31), 19130 }, /* TST */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4abb_31), 19131 }, /* TST */ #endif { CPUFUNC(op_4abc_31), 19132 }, /* TST */ { CPUFUNC(op_4ac0_31), 19136 }, /* TAS */ { CPUFUNC(op_4ad0_31), 19152 }, /* TAS */ { CPUFUNC(op_4ad8_31), 19160 }, /* TAS */ { CPUFUNC(op_4ae0_31), 19168 }, /* TAS */ { CPUFUNC(op_4ae8_31), 19176 }, /* TAS */ { CPUFUNC(op_4af0_31), 19184 }, /* TAS */ { CPUFUNC(op_4af8_31), 19192 }, /* TAS */ { CPUFUNC(op_4af9_31), 19193 }, /* TAS */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4c00_31), 19456 }, /* MULL */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4c10_31), 19472 }, /* MULL */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4c18_31), 19480 }, /* MULL */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4c20_31), 19488 }, /* MULL */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4c28_31), 19496 }, /* MULL */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4c30_31), 19504 }, /* MULL */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4c38_31), 19512 }, /* MULL */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4c39_31), 19513 }, /* MULL */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4c3a_31), 19514 }, /* MULL */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4c3b_31), 19515 }, /* MULL */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4c3c_31), 19516 }, /* MULL */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4c40_31), 19520 }, /* DIVL */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4c50_31), 19536 }, /* DIVL */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4c58_31), 19544 }, /* DIVL */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4c60_31), 19552 }, /* DIVL */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4c68_31), 19560 }, /* DIVL */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4c70_31), 19568 }, /* DIVL */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4c78_31), 19576 }, /* DIVL */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4c79_31), 19577 }, /* DIVL */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4c7a_31), 19578 }, /* DIVL */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4c7b_31), 19579 }, /* DIVL */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4c7c_31), 19580 }, /* DIVL */ #endif { CPUFUNC(op_4c90_31), 19600 }, /* MVMEL */ { CPUFUNC(op_4c98_31), 19608 }, /* MVMEL */ { CPUFUNC(op_4ca8_31), 19624 }, /* MVMEL */ { CPUFUNC(op_4cb0_31), 19632 }, /* MVMEL */ { CPUFUNC(op_4cb8_31), 19640 }, /* MVMEL */ { CPUFUNC(op_4cb9_31), 19641 }, /* MVMEL */ { CPUFUNC(op_4cba_31), 19642 }, /* MVMEL */ { CPUFUNC(op_4cbb_31), 19643 }, /* MVMEL */ { CPUFUNC(op_4cd0_31), 19664 }, /* MVMEL */ { CPUFUNC(op_4cd8_31), 19672 }, /* MVMEL */ { CPUFUNC(op_4ce8_31), 19688 }, /* MVMEL */ { CPUFUNC(op_4cf0_31), 19696 }, /* MVMEL */ { CPUFUNC(op_4cf8_31), 19704 }, /* MVMEL */ { CPUFUNC(op_4cf9_31), 19705 }, /* MVMEL */ { CPUFUNC(op_4cfa_31), 19706 }, /* MVMEL */ { CPUFUNC(op_4cfb_31), 19707 }, /* MVMEL */ { CPUFUNC(op_4e40_31), 20032 }, /* TRAP */ { CPUFUNC(op_4e50_31), 20048 }, /* LINK */ { CPUFUNC(op_4e58_31), 20056 }, /* UNLK */ { CPUFUNC(op_4e60_31), 20064 }, /* MVR2USP */ { CPUFUNC(op_4e68_31), 20072 }, /* MVUSP2R */ { CPUFUNC(op_4e70_31), 20080 }, /* RESET */ { CPUFUNC(op_4e71_31), 20081 }, /* NOP */ { CPUFUNC(op_4e72_31), 20082 }, /* STOP */ { CPUFUNC(op_4e73_31), 20083 }, /* RTE */ { CPUFUNC(op_4e74_31), 20084 }, /* RTD */ { CPUFUNC(op_4e75_31), 20085 }, /* RTS */ { CPUFUNC(op_4e76_31), 20086 }, /* TRAPV */ { CPUFUNC(op_4e77_31), 20087 }, /* RTR */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4e7a_31), 20090 }, /* MOVEC2 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_4e7b_31), 20091 }, /* MOVE2C */ #endif { CPUFUNC(op_4e90_31), 20112 }, /* JSR */ { CPUFUNC(op_4ea8_31), 20136 }, /* JSR */ { CPUFUNC(op_4eb0_31), 20144 }, /* JSR */ { CPUFUNC(op_4eb8_31), 20152 }, /* JSR */ { CPUFUNC(op_4eb9_31), 20153 }, /* JSR */ { CPUFUNC(op_4eba_31), 20154 }, /* JSR */ { CPUFUNC(op_4ebb_31), 20155 }, /* JSR */ { CPUFUNC(op_4ed0_31), 20176 }, /* JMP */ { CPUFUNC(op_4ee8_31), 20200 }, /* JMP */ { CPUFUNC(op_4ef0_31), 20208 }, /* JMP */ { CPUFUNC(op_4ef8_31), 20216 }, /* JMP */ { CPUFUNC(op_4ef9_31), 20217 }, /* JMP */ { CPUFUNC(op_4efa_31), 20218 }, /* JMP */ { CPUFUNC(op_4efb_31), 20219 }, /* JMP */ { CPUFUNC(op_5000_31), 20480 }, /* ADD */ { CPUFUNC(op_5010_31), 20496 }, /* ADD */ { CPUFUNC(op_5018_31), 20504 }, /* ADD */ { CPUFUNC(op_5020_31), 20512 }, /* ADD */ { CPUFUNC(op_5028_31), 20520 }, /* ADD */ { CPUFUNC(op_5030_31), 20528 }, /* ADD */ { CPUFUNC(op_5038_31), 20536 }, /* ADD */ { CPUFUNC(op_5039_31), 20537 }, /* ADD */ { CPUFUNC(op_5040_31), 20544 }, /* ADD */ { CPUFUNC(op_5048_31), 20552 }, /* ADDA */ { CPUFUNC(op_5050_31), 20560 }, /* ADD */ { CPUFUNC(op_5058_31), 20568 }, /* ADD */ { CPUFUNC(op_5060_31), 20576 }, /* ADD */ { CPUFUNC(op_5068_31), 20584 }, /* ADD */ { CPUFUNC(op_5070_31), 20592 }, /* ADD */ { CPUFUNC(op_5078_31), 20600 }, /* ADD */ { CPUFUNC(op_5079_31), 20601 }, /* ADD */ { CPUFUNC(op_5080_31), 20608 }, /* ADD */ { CPUFUNC(op_5088_31), 20616 }, /* ADDA */ { CPUFUNC(op_5090_31), 20624 }, /* ADD */ { CPUFUNC(op_5098_31), 20632 }, /* ADD */ { CPUFUNC(op_50a0_31), 20640 }, /* ADD */ { CPUFUNC(op_50a8_31), 20648 }, /* ADD */ { CPUFUNC(op_50b0_31), 20656 }, /* ADD */ { CPUFUNC(op_50b8_31), 20664 }, /* ADD */ { CPUFUNC(op_50b9_31), 20665 }, /* ADD */ { CPUFUNC(op_50c0_31), 20672 }, /* Scc */ { CPUFUNC(op_50c8_31), 20680 }, /* DBcc */ { CPUFUNC(op_50d0_31), 20688 }, /* Scc */ { CPUFUNC(op_50d8_31), 20696 }, /* Scc */ { CPUFUNC(op_50e0_31), 20704 }, /* Scc */ { CPUFUNC(op_50e8_31), 20712 }, /* Scc */ { CPUFUNC(op_50f0_31), 20720 }, /* Scc */ { CPUFUNC(op_50f8_31), 20728 }, /* Scc */ { CPUFUNC(op_50f9_31), 20729 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_50fa_31), 20730 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_50fb_31), 20731 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_50fc_31), 20732 }, /* TRAPcc */ #endif { CPUFUNC(op_5100_31), 20736 }, /* SUB */ { CPUFUNC(op_5110_31), 20752 }, /* SUB */ { CPUFUNC(op_5118_31), 20760 }, /* SUB */ { CPUFUNC(op_5120_31), 20768 }, /* SUB */ { CPUFUNC(op_5128_31), 20776 }, /* SUB */ { CPUFUNC(op_5130_31), 20784 }, /* SUB */ { CPUFUNC(op_5138_31), 20792 }, /* SUB */ { CPUFUNC(op_5139_31), 20793 }, /* SUB */ { CPUFUNC(op_5140_31), 20800 }, /* SUB */ { CPUFUNC(op_5148_31), 20808 }, /* SUBA */ { CPUFUNC(op_5150_31), 20816 }, /* SUB */ { CPUFUNC(op_5158_31), 20824 }, /* SUB */ { CPUFUNC(op_5160_31), 20832 }, /* SUB */ { CPUFUNC(op_5168_31), 20840 }, /* SUB */ { CPUFUNC(op_5170_31), 20848 }, /* SUB */ { CPUFUNC(op_5178_31), 20856 }, /* SUB */ { CPUFUNC(op_5179_31), 20857 }, /* SUB */ { CPUFUNC(op_5180_31), 20864 }, /* SUB */ { CPUFUNC(op_5188_31), 20872 }, /* SUBA */ { CPUFUNC(op_5190_31), 20880 }, /* SUB */ { CPUFUNC(op_5198_31), 20888 }, /* SUB */ { CPUFUNC(op_51a0_31), 20896 }, /* SUB */ { CPUFUNC(op_51a8_31), 20904 }, /* SUB */ { CPUFUNC(op_51b0_31), 20912 }, /* SUB */ { CPUFUNC(op_51b8_31), 20920 }, /* SUB */ { CPUFUNC(op_51b9_31), 20921 }, /* SUB */ { CPUFUNC(op_51c0_31), 20928 }, /* Scc */ { CPUFUNC(op_51c8_31), 20936 }, /* DBcc */ { CPUFUNC(op_51d0_31), 20944 }, /* Scc */ { CPUFUNC(op_51d8_31), 20952 }, /* Scc */ { CPUFUNC(op_51e0_31), 20960 }, /* Scc */ { CPUFUNC(op_51e8_31), 20968 }, /* Scc */ { CPUFUNC(op_51f0_31), 20976 }, /* Scc */ { CPUFUNC(op_51f8_31), 20984 }, /* Scc */ { CPUFUNC(op_51f9_31), 20985 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_51fa_31), 20986 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_51fb_31), 20987 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_51fc_31), 20988 }, /* TRAPcc */ #endif { CPUFUNC(op_52c0_31), 21184 }, /* Scc */ { CPUFUNC(op_52c8_31), 21192 }, /* DBcc */ { CPUFUNC(op_52d0_31), 21200 }, /* Scc */ { CPUFUNC(op_52d8_31), 21208 }, /* Scc */ { CPUFUNC(op_52e0_31), 21216 }, /* Scc */ { CPUFUNC(op_52e8_31), 21224 }, /* Scc */ { CPUFUNC(op_52f0_31), 21232 }, /* Scc */ { CPUFUNC(op_52f8_31), 21240 }, /* Scc */ { CPUFUNC(op_52f9_31), 21241 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_52fa_31), 21242 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_52fb_31), 21243 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_52fc_31), 21244 }, /* TRAPcc */ #endif { CPUFUNC(op_53c0_31), 21440 }, /* Scc */ { CPUFUNC(op_53c8_31), 21448 }, /* DBcc */ { CPUFUNC(op_53d0_31), 21456 }, /* Scc */ { CPUFUNC(op_53d8_31), 21464 }, /* Scc */ { CPUFUNC(op_53e0_31), 21472 }, /* Scc */ { CPUFUNC(op_53e8_31), 21480 }, /* Scc */ { CPUFUNC(op_53f0_31), 21488 }, /* Scc */ { CPUFUNC(op_53f8_31), 21496 }, /* Scc */ { CPUFUNC(op_53f9_31), 21497 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_53fa_31), 21498 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_53fb_31), 21499 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_53fc_31), 21500 }, /* TRAPcc */ #endif { CPUFUNC(op_54c0_31), 21696 }, /* Scc */ { CPUFUNC(op_54c8_31), 21704 }, /* DBcc */ { CPUFUNC(op_54d0_31), 21712 }, /* Scc */ { CPUFUNC(op_54d8_31), 21720 }, /* Scc */ { CPUFUNC(op_54e0_31), 21728 }, /* Scc */ { CPUFUNC(op_54e8_31), 21736 }, /* Scc */ { CPUFUNC(op_54f0_31), 21744 }, /* Scc */ { CPUFUNC(op_54f8_31), 21752 }, /* Scc */ { CPUFUNC(op_54f9_31), 21753 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_54fa_31), 21754 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_54fb_31), 21755 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_54fc_31), 21756 }, /* TRAPcc */ #endif { CPUFUNC(op_55c0_31), 21952 }, /* Scc */ { CPUFUNC(op_55c8_31), 21960 }, /* DBcc */ { CPUFUNC(op_55d0_31), 21968 }, /* Scc */ { CPUFUNC(op_55d8_31), 21976 }, /* Scc */ { CPUFUNC(op_55e0_31), 21984 }, /* Scc */ { CPUFUNC(op_55e8_31), 21992 }, /* Scc */ { CPUFUNC(op_55f0_31), 22000 }, /* Scc */ { CPUFUNC(op_55f8_31), 22008 }, /* Scc */ { CPUFUNC(op_55f9_31), 22009 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_55fa_31), 22010 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_55fb_31), 22011 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_55fc_31), 22012 }, /* TRAPcc */ #endif { CPUFUNC(op_56c0_31), 22208 }, /* Scc */ { CPUFUNC(op_56c8_31), 22216 }, /* DBcc */ { CPUFUNC(op_56d0_31), 22224 }, /* Scc */ { CPUFUNC(op_56d8_31), 22232 }, /* Scc */ { CPUFUNC(op_56e0_31), 22240 }, /* Scc */ { CPUFUNC(op_56e8_31), 22248 }, /* Scc */ { CPUFUNC(op_56f0_31), 22256 }, /* Scc */ { CPUFUNC(op_56f8_31), 22264 }, /* Scc */ { CPUFUNC(op_56f9_31), 22265 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_56fa_31), 22266 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_56fb_31), 22267 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_56fc_31), 22268 }, /* TRAPcc */ #endif { CPUFUNC(op_57c0_31), 22464 }, /* Scc */ { CPUFUNC(op_57c8_31), 22472 }, /* DBcc */ { CPUFUNC(op_57d0_31), 22480 }, /* Scc */ { CPUFUNC(op_57d8_31), 22488 }, /* Scc */ { CPUFUNC(op_57e0_31), 22496 }, /* Scc */ { CPUFUNC(op_57e8_31), 22504 }, /* Scc */ { CPUFUNC(op_57f0_31), 22512 }, /* Scc */ { CPUFUNC(op_57f8_31), 22520 }, /* Scc */ { CPUFUNC(op_57f9_31), 22521 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_57fa_31), 22522 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_57fb_31), 22523 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_57fc_31), 22524 }, /* TRAPcc */ #endif { CPUFUNC(op_58c0_31), 22720 }, /* Scc */ { CPUFUNC(op_58c8_31), 22728 }, /* DBcc */ { CPUFUNC(op_58d0_31), 22736 }, /* Scc */ { CPUFUNC(op_58d8_31), 22744 }, /* Scc */ { CPUFUNC(op_58e0_31), 22752 }, /* Scc */ { CPUFUNC(op_58e8_31), 22760 }, /* Scc */ { CPUFUNC(op_58f0_31), 22768 }, /* Scc */ { CPUFUNC(op_58f8_31), 22776 }, /* Scc */ { CPUFUNC(op_58f9_31), 22777 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_58fa_31), 22778 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_58fb_31), 22779 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_58fc_31), 22780 }, /* TRAPcc */ #endif { CPUFUNC(op_59c0_31), 22976 }, /* Scc */ { CPUFUNC(op_59c8_31), 22984 }, /* DBcc */ { CPUFUNC(op_59d0_31), 22992 }, /* Scc */ { CPUFUNC(op_59d8_31), 23000 }, /* Scc */ { CPUFUNC(op_59e0_31), 23008 }, /* Scc */ { CPUFUNC(op_59e8_31), 23016 }, /* Scc */ { CPUFUNC(op_59f0_31), 23024 }, /* Scc */ { CPUFUNC(op_59f8_31), 23032 }, /* Scc */ { CPUFUNC(op_59f9_31), 23033 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_59fa_31), 23034 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_59fb_31), 23035 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_59fc_31), 23036 }, /* TRAPcc */ #endif { CPUFUNC(op_5ac0_31), 23232 }, /* Scc */ { CPUFUNC(op_5ac8_31), 23240 }, /* DBcc */ { CPUFUNC(op_5ad0_31), 23248 }, /* Scc */ { CPUFUNC(op_5ad8_31), 23256 }, /* Scc */ { CPUFUNC(op_5ae0_31), 23264 }, /* Scc */ { CPUFUNC(op_5ae8_31), 23272 }, /* Scc */ { CPUFUNC(op_5af0_31), 23280 }, /* Scc */ { CPUFUNC(op_5af8_31), 23288 }, /* Scc */ { CPUFUNC(op_5af9_31), 23289 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_5afa_31), 23290 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_5afb_31), 23291 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_5afc_31), 23292 }, /* TRAPcc */ #endif { CPUFUNC(op_5bc0_31), 23488 }, /* Scc */ { CPUFUNC(op_5bc8_31), 23496 }, /* DBcc */ { CPUFUNC(op_5bd0_31), 23504 }, /* Scc */ { CPUFUNC(op_5bd8_31), 23512 }, /* Scc */ { CPUFUNC(op_5be0_31), 23520 }, /* Scc */ { CPUFUNC(op_5be8_31), 23528 }, /* Scc */ { CPUFUNC(op_5bf0_31), 23536 }, /* Scc */ { CPUFUNC(op_5bf8_31), 23544 }, /* Scc */ { CPUFUNC(op_5bf9_31), 23545 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_5bfa_31), 23546 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_5bfb_31), 23547 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_5bfc_31), 23548 }, /* TRAPcc */ #endif { CPUFUNC(op_5cc0_31), 23744 }, /* Scc */ { CPUFUNC(op_5cc8_31), 23752 }, /* DBcc */ { CPUFUNC(op_5cd0_31), 23760 }, /* Scc */ { CPUFUNC(op_5cd8_31), 23768 }, /* Scc */ { CPUFUNC(op_5ce0_31), 23776 }, /* Scc */ { CPUFUNC(op_5ce8_31), 23784 }, /* Scc */ { CPUFUNC(op_5cf0_31), 23792 }, /* Scc */ { CPUFUNC(op_5cf8_31), 23800 }, /* Scc */ { CPUFUNC(op_5cf9_31), 23801 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_5cfa_31), 23802 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_5cfb_31), 23803 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_5cfc_31), 23804 }, /* TRAPcc */ #endif { CPUFUNC(op_5dc0_31), 24000 }, /* Scc */ { CPUFUNC(op_5dc8_31), 24008 }, /* DBcc */ { CPUFUNC(op_5dd0_31), 24016 }, /* Scc */ { CPUFUNC(op_5dd8_31), 24024 }, /* Scc */ { CPUFUNC(op_5de0_31), 24032 }, /* Scc */ { CPUFUNC(op_5de8_31), 24040 }, /* Scc */ { CPUFUNC(op_5df0_31), 24048 }, /* Scc */ { CPUFUNC(op_5df8_31), 24056 }, /* Scc */ { CPUFUNC(op_5df9_31), 24057 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_5dfa_31), 24058 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_5dfb_31), 24059 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_5dfc_31), 24060 }, /* TRAPcc */ #endif { CPUFUNC(op_5ec0_31), 24256 }, /* Scc */ { CPUFUNC(op_5ec8_31), 24264 }, /* DBcc */ { CPUFUNC(op_5ed0_31), 24272 }, /* Scc */ { CPUFUNC(op_5ed8_31), 24280 }, /* Scc */ { CPUFUNC(op_5ee0_31), 24288 }, /* Scc */ { CPUFUNC(op_5ee8_31), 24296 }, /* Scc */ { CPUFUNC(op_5ef0_31), 24304 }, /* Scc */ { CPUFUNC(op_5ef8_31), 24312 }, /* Scc */ { CPUFUNC(op_5ef9_31), 24313 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_5efa_31), 24314 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_5efb_31), 24315 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_5efc_31), 24316 }, /* TRAPcc */ #endif { CPUFUNC(op_5fc0_31), 24512 }, /* Scc */ { CPUFUNC(op_5fc8_31), 24520 }, /* DBcc */ { CPUFUNC(op_5fd0_31), 24528 }, /* Scc */ { CPUFUNC(op_5fd8_31), 24536 }, /* Scc */ { CPUFUNC(op_5fe0_31), 24544 }, /* Scc */ { CPUFUNC(op_5fe8_31), 24552 }, /* Scc */ { CPUFUNC(op_5ff0_31), 24560 }, /* Scc */ { CPUFUNC(op_5ff8_31), 24568 }, /* Scc */ { CPUFUNC(op_5ff9_31), 24569 }, /* Scc */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_5ffa_31), 24570 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_5ffb_31), 24571 }, /* TRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_5ffc_31), 24572 }, /* TRAPcc */ #endif { CPUFUNC(op_6000_31), 24576 }, /* Bcc */ { CPUFUNC(op_6001_31), 24577 }, /* Bcc */ { CPUFUNC(op_60ff_31), 24831 }, /* Bcc */ { CPUFUNC(op_6100_31), 24832 }, /* BSR */ { CPUFUNC(op_6101_31), 24833 }, /* BSR */ { CPUFUNC(op_61ff_31), 25087 }, /* BSR */ { CPUFUNC(op_6200_31), 25088 }, /* Bcc */ { CPUFUNC(op_6201_31), 25089 }, /* Bcc */ { CPUFUNC(op_62ff_31), 25343 }, /* Bcc */ { CPUFUNC(op_6300_31), 25344 }, /* Bcc */ { CPUFUNC(op_6301_31), 25345 }, /* Bcc */ { CPUFUNC(op_63ff_31), 25599 }, /* Bcc */ { CPUFUNC(op_6400_31), 25600 }, /* Bcc */ { CPUFUNC(op_6401_31), 25601 }, /* Bcc */ { CPUFUNC(op_64ff_31), 25855 }, /* Bcc */ { CPUFUNC(op_6500_31), 25856 }, /* Bcc */ { CPUFUNC(op_6501_31), 25857 }, /* Bcc */ { CPUFUNC(op_65ff_31), 26111 }, /* Bcc */ { CPUFUNC(op_6600_31), 26112 }, /* Bcc */ { CPUFUNC(op_6601_31), 26113 }, /* Bcc */ { CPUFUNC(op_66ff_31), 26367 }, /* Bcc */ { CPUFUNC(op_6700_31), 26368 }, /* Bcc */ { CPUFUNC(op_6701_31), 26369 }, /* Bcc */ { CPUFUNC(op_67ff_31), 26623 }, /* Bcc */ { CPUFUNC(op_6800_31), 26624 }, /* Bcc */ { CPUFUNC(op_6801_31), 26625 }, /* Bcc */ { CPUFUNC(op_68ff_31), 26879 }, /* Bcc */ { CPUFUNC(op_6900_31), 26880 }, /* Bcc */ { CPUFUNC(op_6901_31), 26881 }, /* Bcc */ { CPUFUNC(op_69ff_31), 27135 }, /* Bcc */ { CPUFUNC(op_6a00_31), 27136 }, /* Bcc */ { CPUFUNC(op_6a01_31), 27137 }, /* Bcc */ { CPUFUNC(op_6aff_31), 27391 }, /* Bcc */ { CPUFUNC(op_6b00_31), 27392 }, /* Bcc */ { CPUFUNC(op_6b01_31), 27393 }, /* Bcc */ { CPUFUNC(op_6bff_31), 27647 }, /* Bcc */ { CPUFUNC(op_6c00_31), 27648 }, /* Bcc */ { CPUFUNC(op_6c01_31), 27649 }, /* Bcc */ { CPUFUNC(op_6cff_31), 27903 }, /* Bcc */ { CPUFUNC(op_6d00_31), 27904 }, /* Bcc */ { CPUFUNC(op_6d01_31), 27905 }, /* Bcc */ { CPUFUNC(op_6dff_31), 28159 }, /* Bcc */ { CPUFUNC(op_6e00_31), 28160 }, /* Bcc */ { CPUFUNC(op_6e01_31), 28161 }, /* Bcc */ { CPUFUNC(op_6eff_31), 28415 }, /* Bcc */ { CPUFUNC(op_6f00_31), 28416 }, /* Bcc */ { CPUFUNC(op_6f01_31), 28417 }, /* Bcc */ { CPUFUNC(op_6fff_31), 28671 }, /* Bcc */ { CPUFUNC(op_7000_31), 28672 }, /* MOVE */ { CPUFUNC(op_8000_31), 32768 }, /* OR */ { CPUFUNC(op_8010_31), 32784 }, /* OR */ { CPUFUNC(op_8018_31), 32792 }, /* OR */ { CPUFUNC(op_8020_31), 32800 }, /* OR */ { CPUFUNC(op_8028_31), 32808 }, /* OR */ { CPUFUNC(op_8030_31), 32816 }, /* OR */ { CPUFUNC(op_8038_31), 32824 }, /* OR */ { CPUFUNC(op_8039_31), 32825 }, /* OR */ { CPUFUNC(op_803a_31), 32826 }, /* OR */ { CPUFUNC(op_803b_31), 32827 }, /* OR */ { CPUFUNC(op_803c_31), 32828 }, /* OR */ { CPUFUNC(op_8040_31), 32832 }, /* OR */ { CPUFUNC(op_8050_31), 32848 }, /* OR */ { CPUFUNC(op_8058_31), 32856 }, /* OR */ { CPUFUNC(op_8060_31), 32864 }, /* OR */ { CPUFUNC(op_8068_31), 32872 }, /* OR */ { CPUFUNC(op_8070_31), 32880 }, /* OR */ { CPUFUNC(op_8078_31), 32888 }, /* OR */ { CPUFUNC(op_8079_31), 32889 }, /* OR */ { CPUFUNC(op_807a_31), 32890 }, /* OR */ { CPUFUNC(op_807b_31), 32891 }, /* OR */ { CPUFUNC(op_807c_31), 32892 }, /* OR */ { CPUFUNC(op_8080_31), 32896 }, /* OR */ { CPUFUNC(op_8090_31), 32912 }, /* OR */ { CPUFUNC(op_8098_31), 32920 }, /* OR */ { CPUFUNC(op_80a0_31), 32928 }, /* OR */ { CPUFUNC(op_80a8_31), 32936 }, /* OR */ { CPUFUNC(op_80b0_31), 32944 }, /* OR */ { CPUFUNC(op_80b8_31), 32952 }, /* OR */ { CPUFUNC(op_80b9_31), 32953 }, /* OR */ { CPUFUNC(op_80ba_31), 32954 }, /* OR */ { CPUFUNC(op_80bb_31), 32955 }, /* OR */ { CPUFUNC(op_80bc_31), 32956 }, /* OR */ { CPUFUNC(op_80c0_31), 32960 }, /* DIVU */ { CPUFUNC(op_80d0_31), 32976 }, /* DIVU */ { CPUFUNC(op_80d8_31), 32984 }, /* DIVU */ { CPUFUNC(op_80e0_31), 32992 }, /* DIVU */ { CPUFUNC(op_80e8_31), 33000 }, /* DIVU */ { CPUFUNC(op_80f0_31), 33008 }, /* DIVU */ { CPUFUNC(op_80f8_31), 33016 }, /* DIVU */ { CPUFUNC(op_80f9_31), 33017 }, /* DIVU */ { CPUFUNC(op_80fa_31), 33018 }, /* DIVU */ { CPUFUNC(op_80fb_31), 33019 }, /* DIVU */ { CPUFUNC(op_80fc_31), 33020 }, /* DIVU */ { CPUFUNC(op_8100_31), 33024 }, /* SBCD */ { CPUFUNC(op_8108_31), 33032 }, /* SBCD */ { CPUFUNC(op_8110_31), 33040 }, /* OR */ { CPUFUNC(op_8118_31), 33048 }, /* OR */ { CPUFUNC(op_8120_31), 33056 }, /* OR */ { CPUFUNC(op_8128_31), 33064 }, /* OR */ { CPUFUNC(op_8130_31), 33072 }, /* OR */ { CPUFUNC(op_8138_31), 33080 }, /* OR */ { CPUFUNC(op_8139_31), 33081 }, /* OR */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_8140_31), 33088 }, /* PACK */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_8148_31), 33096 }, /* PACK */ #endif { CPUFUNC(op_8150_31), 33104 }, /* OR */ { CPUFUNC(op_8158_31), 33112 }, /* OR */ { CPUFUNC(op_8160_31), 33120 }, /* OR */ { CPUFUNC(op_8168_31), 33128 }, /* OR */ { CPUFUNC(op_8170_31), 33136 }, /* OR */ { CPUFUNC(op_8178_31), 33144 }, /* OR */ { CPUFUNC(op_8179_31), 33145 }, /* OR */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_8180_31), 33152 }, /* UNPK */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_8188_31), 33160 }, /* UNPK */ #endif { CPUFUNC(op_8190_31), 33168 }, /* OR */ { CPUFUNC(op_8198_31), 33176 }, /* OR */ { CPUFUNC(op_81a0_31), 33184 }, /* OR */ { CPUFUNC(op_81a8_31), 33192 }, /* OR */ { CPUFUNC(op_81b0_31), 33200 }, /* OR */ { CPUFUNC(op_81b8_31), 33208 }, /* OR */ { CPUFUNC(op_81b9_31), 33209 }, /* OR */ { CPUFUNC(op_81c0_31), 33216 }, /* DIVS */ { CPUFUNC(op_81d0_31), 33232 }, /* DIVS */ { CPUFUNC(op_81d8_31), 33240 }, /* DIVS */ { CPUFUNC(op_81e0_31), 33248 }, /* DIVS */ { CPUFUNC(op_81e8_31), 33256 }, /* DIVS */ { CPUFUNC(op_81f0_31), 33264 }, /* DIVS */ { CPUFUNC(op_81f8_31), 33272 }, /* DIVS */ { CPUFUNC(op_81f9_31), 33273 }, /* DIVS */ { CPUFUNC(op_81fa_31), 33274 }, /* DIVS */ { CPUFUNC(op_81fb_31), 33275 }, /* DIVS */ { CPUFUNC(op_81fc_31), 33276 }, /* DIVS */ { CPUFUNC(op_9000_31), 36864 }, /* SUB */ { CPUFUNC(op_9010_31), 36880 }, /* SUB */ { CPUFUNC(op_9018_31), 36888 }, /* SUB */ { CPUFUNC(op_9020_31), 36896 }, /* SUB */ { CPUFUNC(op_9028_31), 36904 }, /* SUB */ { CPUFUNC(op_9030_31), 36912 }, /* SUB */ { CPUFUNC(op_9038_31), 36920 }, /* SUB */ { CPUFUNC(op_9039_31), 36921 }, /* SUB */ { CPUFUNC(op_903a_31), 36922 }, /* SUB */ { CPUFUNC(op_903b_31), 36923 }, /* SUB */ { CPUFUNC(op_903c_31), 36924 }, /* SUB */ { CPUFUNC(op_9040_31), 36928 }, /* SUB */ { CPUFUNC(op_9048_31), 36936 }, /* SUB */ { CPUFUNC(op_9050_31), 36944 }, /* SUB */ { CPUFUNC(op_9058_31), 36952 }, /* SUB */ { CPUFUNC(op_9060_31), 36960 }, /* SUB */ { CPUFUNC(op_9068_31), 36968 }, /* SUB */ { CPUFUNC(op_9070_31), 36976 }, /* SUB */ { CPUFUNC(op_9078_31), 36984 }, /* SUB */ { CPUFUNC(op_9079_31), 36985 }, /* SUB */ { CPUFUNC(op_907a_31), 36986 }, /* SUB */ { CPUFUNC(op_907b_31), 36987 }, /* SUB */ { CPUFUNC(op_907c_31), 36988 }, /* SUB */ { CPUFUNC(op_9080_31), 36992 }, /* SUB */ { CPUFUNC(op_9088_31), 37000 }, /* SUB */ { CPUFUNC(op_9090_31), 37008 }, /* SUB */ { CPUFUNC(op_9098_31), 37016 }, /* SUB */ { CPUFUNC(op_90a0_31), 37024 }, /* SUB */ { CPUFUNC(op_90a8_31), 37032 }, /* SUB */ { CPUFUNC(op_90b0_31), 37040 }, /* SUB */ { CPUFUNC(op_90b8_31), 37048 }, /* SUB */ { CPUFUNC(op_90b9_31), 37049 }, /* SUB */ { CPUFUNC(op_90ba_31), 37050 }, /* SUB */ { CPUFUNC(op_90bb_31), 37051 }, /* SUB */ { CPUFUNC(op_90bc_31), 37052 }, /* SUB */ { CPUFUNC(op_90c0_31), 37056 }, /* SUBA */ { CPUFUNC(op_90c8_31), 37064 }, /* SUBA */ { CPUFUNC(op_90d0_31), 37072 }, /* SUBA */ { CPUFUNC(op_90d8_31), 37080 }, /* SUBA */ { CPUFUNC(op_90e0_31), 37088 }, /* SUBA */ { CPUFUNC(op_90e8_31), 37096 }, /* SUBA */ { CPUFUNC(op_90f0_31), 37104 }, /* SUBA */ { CPUFUNC(op_90f8_31), 37112 }, /* SUBA */ { CPUFUNC(op_90f9_31), 37113 }, /* SUBA */ { CPUFUNC(op_90fa_31), 37114 }, /* SUBA */ { CPUFUNC(op_90fb_31), 37115 }, /* SUBA */ { CPUFUNC(op_90fc_31), 37116 }, /* SUBA */ { CPUFUNC(op_9100_31), 37120 }, /* SUBX */ { CPUFUNC(op_9108_31), 37128 }, /* SUBX */ { CPUFUNC(op_9110_31), 37136 }, /* SUB */ { CPUFUNC(op_9118_31), 37144 }, /* SUB */ { CPUFUNC(op_9120_31), 37152 }, /* SUB */ { CPUFUNC(op_9128_31), 37160 }, /* SUB */ { CPUFUNC(op_9130_31), 37168 }, /* SUB */ { CPUFUNC(op_9138_31), 37176 }, /* SUB */ { CPUFUNC(op_9139_31), 37177 }, /* SUB */ { CPUFUNC(op_9140_31), 37184 }, /* SUBX */ { CPUFUNC(op_9148_31), 37192 }, /* SUBX */ { CPUFUNC(op_9150_31), 37200 }, /* SUB */ { CPUFUNC(op_9158_31), 37208 }, /* SUB */ { CPUFUNC(op_9160_31), 37216 }, /* SUB */ { CPUFUNC(op_9168_31), 37224 }, /* SUB */ { CPUFUNC(op_9170_31), 37232 }, /* SUB */ { CPUFUNC(op_9178_31), 37240 }, /* SUB */ { CPUFUNC(op_9179_31), 37241 }, /* SUB */ { CPUFUNC(op_9180_31), 37248 }, /* SUBX */ { CPUFUNC(op_9188_31), 37256 }, /* SUBX */ { CPUFUNC(op_9190_31), 37264 }, /* SUB */ { CPUFUNC(op_9198_31), 37272 }, /* SUB */ { CPUFUNC(op_91a0_31), 37280 }, /* SUB */ { CPUFUNC(op_91a8_31), 37288 }, /* SUB */ { CPUFUNC(op_91b0_31), 37296 }, /* SUB */ { CPUFUNC(op_91b8_31), 37304 }, /* SUB */ { CPUFUNC(op_91b9_31), 37305 }, /* SUB */ { CPUFUNC(op_91c0_31), 37312 }, /* SUBA */ { CPUFUNC(op_91c8_31), 37320 }, /* SUBA */ { CPUFUNC(op_91d0_31), 37328 }, /* SUBA */ { CPUFUNC(op_91d8_31), 37336 }, /* SUBA */ { CPUFUNC(op_91e0_31), 37344 }, /* SUBA */ { CPUFUNC(op_91e8_31), 37352 }, /* SUBA */ { CPUFUNC(op_91f0_31), 37360 }, /* SUBA */ { CPUFUNC(op_91f8_31), 37368 }, /* SUBA */ { CPUFUNC(op_91f9_31), 37369 }, /* SUBA */ { CPUFUNC(op_91fa_31), 37370 }, /* SUBA */ { CPUFUNC(op_91fb_31), 37371 }, /* SUBA */ { CPUFUNC(op_91fc_31), 37372 }, /* SUBA */ { CPUFUNC(op_b000_31), 45056 }, /* CMP */ { CPUFUNC(op_b010_31), 45072 }, /* CMP */ { CPUFUNC(op_b018_31), 45080 }, /* CMP */ { CPUFUNC(op_b020_31), 45088 }, /* CMP */ { CPUFUNC(op_b028_31), 45096 }, /* CMP */ { CPUFUNC(op_b030_31), 45104 }, /* CMP */ { CPUFUNC(op_b038_31), 45112 }, /* CMP */ { CPUFUNC(op_b039_31), 45113 }, /* CMP */ { CPUFUNC(op_b03a_31), 45114 }, /* CMP */ { CPUFUNC(op_b03b_31), 45115 }, /* CMP */ { CPUFUNC(op_b03c_31), 45116 }, /* CMP */ { CPUFUNC(op_b040_31), 45120 }, /* CMP */ { CPUFUNC(op_b048_31), 45128 }, /* CMP */ { CPUFUNC(op_b050_31), 45136 }, /* CMP */ { CPUFUNC(op_b058_31), 45144 }, /* CMP */ { CPUFUNC(op_b060_31), 45152 }, /* CMP */ { CPUFUNC(op_b068_31), 45160 }, /* CMP */ { CPUFUNC(op_b070_31), 45168 }, /* CMP */ { CPUFUNC(op_b078_31), 45176 }, /* CMP */ { CPUFUNC(op_b079_31), 45177 }, /* CMP */ { CPUFUNC(op_b07a_31), 45178 }, /* CMP */ { CPUFUNC(op_b07b_31), 45179 }, /* CMP */ { CPUFUNC(op_b07c_31), 45180 }, /* CMP */ { CPUFUNC(op_b080_31), 45184 }, /* CMP */ { CPUFUNC(op_b088_31), 45192 }, /* CMP */ { CPUFUNC(op_b090_31), 45200 }, /* CMP */ { CPUFUNC(op_b098_31), 45208 }, /* CMP */ { CPUFUNC(op_b0a0_31), 45216 }, /* CMP */ { CPUFUNC(op_b0a8_31), 45224 }, /* CMP */ { CPUFUNC(op_b0b0_31), 45232 }, /* CMP */ { CPUFUNC(op_b0b8_31), 45240 }, /* CMP */ { CPUFUNC(op_b0b9_31), 45241 }, /* CMP */ { CPUFUNC(op_b0ba_31), 45242 }, /* CMP */ { CPUFUNC(op_b0bb_31), 45243 }, /* CMP */ { CPUFUNC(op_b0bc_31), 45244 }, /* CMP */ { CPUFUNC(op_b0c0_31), 45248 }, /* CMPA */ { CPUFUNC(op_b0c8_31), 45256 }, /* CMPA */ { CPUFUNC(op_b0d0_31), 45264 }, /* CMPA */ { CPUFUNC(op_b0d8_31), 45272 }, /* CMPA */ { CPUFUNC(op_b0e0_31), 45280 }, /* CMPA */ { CPUFUNC(op_b0e8_31), 45288 }, /* CMPA */ { CPUFUNC(op_b0f0_31), 45296 }, /* CMPA */ { CPUFUNC(op_b0f8_31), 45304 }, /* CMPA */ { CPUFUNC(op_b0f9_31), 45305 }, /* CMPA */ { CPUFUNC(op_b0fa_31), 45306 }, /* CMPA */ { CPUFUNC(op_b0fb_31), 45307 }, /* CMPA */ { CPUFUNC(op_b0fc_31), 45308 }, /* CMPA */ { CPUFUNC(op_b100_31), 45312 }, /* EOR */ { CPUFUNC(op_b108_31), 45320 }, /* CMPM */ { CPUFUNC(op_b110_31), 45328 }, /* EOR */ { CPUFUNC(op_b118_31), 45336 }, /* EOR */ { CPUFUNC(op_b120_31), 45344 }, /* EOR */ { CPUFUNC(op_b128_31), 45352 }, /* EOR */ { CPUFUNC(op_b130_31), 45360 }, /* EOR */ { CPUFUNC(op_b138_31), 45368 }, /* EOR */ { CPUFUNC(op_b139_31), 45369 }, /* EOR */ { CPUFUNC(op_b140_31), 45376 }, /* EOR */ { CPUFUNC(op_b148_31), 45384 }, /* CMPM */ { CPUFUNC(op_b150_31), 45392 }, /* EOR */ { CPUFUNC(op_b158_31), 45400 }, /* EOR */ { CPUFUNC(op_b160_31), 45408 }, /* EOR */ { CPUFUNC(op_b168_31), 45416 }, /* EOR */ { CPUFUNC(op_b170_31), 45424 }, /* EOR */ { CPUFUNC(op_b178_31), 45432 }, /* EOR */ { CPUFUNC(op_b179_31), 45433 }, /* EOR */ { CPUFUNC(op_b180_31), 45440 }, /* EOR */ { CPUFUNC(op_b188_31), 45448 }, /* CMPM */ { CPUFUNC(op_b190_31), 45456 }, /* EOR */ { CPUFUNC(op_b198_31), 45464 }, /* EOR */ { CPUFUNC(op_b1a0_31), 45472 }, /* EOR */ { CPUFUNC(op_b1a8_31), 45480 }, /* EOR */ { CPUFUNC(op_b1b0_31), 45488 }, /* EOR */ { CPUFUNC(op_b1b8_31), 45496 }, /* EOR */ { CPUFUNC(op_b1b9_31), 45497 }, /* EOR */ { CPUFUNC(op_b1c0_31), 45504 }, /* CMPA */ { CPUFUNC(op_b1c8_31), 45512 }, /* CMPA */ { CPUFUNC(op_b1d0_31), 45520 }, /* CMPA */ { CPUFUNC(op_b1d8_31), 45528 }, /* CMPA */ { CPUFUNC(op_b1e0_31), 45536 }, /* CMPA */ { CPUFUNC(op_b1e8_31), 45544 }, /* CMPA */ { CPUFUNC(op_b1f0_31), 45552 }, /* CMPA */ { CPUFUNC(op_b1f8_31), 45560 }, /* CMPA */ { CPUFUNC(op_b1f9_31), 45561 }, /* CMPA */ { CPUFUNC(op_b1fa_31), 45562 }, /* CMPA */ { CPUFUNC(op_b1fb_31), 45563 }, /* CMPA */ { CPUFUNC(op_b1fc_31), 45564 }, /* CMPA */ { CPUFUNC(op_c000_31), 49152 }, /* AND */ { CPUFUNC(op_c010_31), 49168 }, /* AND */ { CPUFUNC(op_c018_31), 49176 }, /* AND */ { CPUFUNC(op_c020_31), 49184 }, /* AND */ { CPUFUNC(op_c028_31), 49192 }, /* AND */ { CPUFUNC(op_c030_31), 49200 }, /* AND */ { CPUFUNC(op_c038_31), 49208 }, /* AND */ { CPUFUNC(op_c039_31), 49209 }, /* AND */ { CPUFUNC(op_c03a_31), 49210 }, /* AND */ { CPUFUNC(op_c03b_31), 49211 }, /* AND */ { CPUFUNC(op_c03c_31), 49212 }, /* AND */ { CPUFUNC(op_c040_31), 49216 }, /* AND */ { CPUFUNC(op_c050_31), 49232 }, /* AND */ { CPUFUNC(op_c058_31), 49240 }, /* AND */ { CPUFUNC(op_c060_31), 49248 }, /* AND */ { CPUFUNC(op_c068_31), 49256 }, /* AND */ { CPUFUNC(op_c070_31), 49264 }, /* AND */ { CPUFUNC(op_c078_31), 49272 }, /* AND */ { CPUFUNC(op_c079_31), 49273 }, /* AND */ { CPUFUNC(op_c07a_31), 49274 }, /* AND */ { CPUFUNC(op_c07b_31), 49275 }, /* AND */ { CPUFUNC(op_c07c_31), 49276 }, /* AND */ { CPUFUNC(op_c080_31), 49280 }, /* AND */ { CPUFUNC(op_c090_31), 49296 }, /* AND */ { CPUFUNC(op_c098_31), 49304 }, /* AND */ { CPUFUNC(op_c0a0_31), 49312 }, /* AND */ { CPUFUNC(op_c0a8_31), 49320 }, /* AND */ { CPUFUNC(op_c0b0_31), 49328 }, /* AND */ { CPUFUNC(op_c0b8_31), 49336 }, /* AND */ { CPUFUNC(op_c0b9_31), 49337 }, /* AND */ { CPUFUNC(op_c0ba_31), 49338 }, /* AND */ { CPUFUNC(op_c0bb_31), 49339 }, /* AND */ { CPUFUNC(op_c0bc_31), 49340 }, /* AND */ { CPUFUNC(op_c0c0_31), 49344 }, /* MULU */ { CPUFUNC(op_c0d0_31), 49360 }, /* MULU */ { CPUFUNC(op_c0d8_31), 49368 }, /* MULU */ { CPUFUNC(op_c0e0_31), 49376 }, /* MULU */ { CPUFUNC(op_c0e8_31), 49384 }, /* MULU */ { CPUFUNC(op_c0f0_31), 49392 }, /* MULU */ { CPUFUNC(op_c0f8_31), 49400 }, /* MULU */ { CPUFUNC(op_c0f9_31), 49401 }, /* MULU */ { CPUFUNC(op_c0fa_31), 49402 }, /* MULU */ { CPUFUNC(op_c0fb_31), 49403 }, /* MULU */ { CPUFUNC(op_c0fc_31), 49404 }, /* MULU */ { CPUFUNC(op_c100_31), 49408 }, /* ABCD */ { CPUFUNC(op_c108_31), 49416 }, /* ABCD */ { CPUFUNC(op_c110_31), 49424 }, /* AND */ { CPUFUNC(op_c118_31), 49432 }, /* AND */ { CPUFUNC(op_c120_31), 49440 }, /* AND */ { CPUFUNC(op_c128_31), 49448 }, /* AND */ { CPUFUNC(op_c130_31), 49456 }, /* AND */ { CPUFUNC(op_c138_31), 49464 }, /* AND */ { CPUFUNC(op_c139_31), 49465 }, /* AND */ { CPUFUNC(op_c140_31), 49472 }, /* EXG */ { CPUFUNC(op_c148_31), 49480 }, /* EXG */ { CPUFUNC(op_c150_31), 49488 }, /* AND */ { CPUFUNC(op_c158_31), 49496 }, /* AND */ { CPUFUNC(op_c160_31), 49504 }, /* AND */ { CPUFUNC(op_c168_31), 49512 }, /* AND */ { CPUFUNC(op_c170_31), 49520 }, /* AND */ { CPUFUNC(op_c178_31), 49528 }, /* AND */ { CPUFUNC(op_c179_31), 49529 }, /* AND */ { CPUFUNC(op_c188_31), 49544 }, /* EXG */ { CPUFUNC(op_c190_31), 49552 }, /* AND */ { CPUFUNC(op_c198_31), 49560 }, /* AND */ { CPUFUNC(op_c1a0_31), 49568 }, /* AND */ { CPUFUNC(op_c1a8_31), 49576 }, /* AND */ { CPUFUNC(op_c1b0_31), 49584 }, /* AND */ { CPUFUNC(op_c1b8_31), 49592 }, /* AND */ { CPUFUNC(op_c1b9_31), 49593 }, /* AND */ { CPUFUNC(op_c1c0_31), 49600 }, /* MULS */ { CPUFUNC(op_c1d0_31), 49616 }, /* MULS */ { CPUFUNC(op_c1d8_31), 49624 }, /* MULS */ { CPUFUNC(op_c1e0_31), 49632 }, /* MULS */ { CPUFUNC(op_c1e8_31), 49640 }, /* MULS */ { CPUFUNC(op_c1f0_31), 49648 }, /* MULS */ { CPUFUNC(op_c1f8_31), 49656 }, /* MULS */ { CPUFUNC(op_c1f9_31), 49657 }, /* MULS */ { CPUFUNC(op_c1fa_31), 49658 }, /* MULS */ { CPUFUNC(op_c1fb_31), 49659 }, /* MULS */ { CPUFUNC(op_c1fc_31), 49660 }, /* MULS */ { CPUFUNC(op_d000_31), 53248 }, /* ADD */ { CPUFUNC(op_d010_31), 53264 }, /* ADD */ { CPUFUNC(op_d018_31), 53272 }, /* ADD */ { CPUFUNC(op_d020_31), 53280 }, /* ADD */ { CPUFUNC(op_d028_31), 53288 }, /* ADD */ { CPUFUNC(op_d030_31), 53296 }, /* ADD */ { CPUFUNC(op_d038_31), 53304 }, /* ADD */ { CPUFUNC(op_d039_31), 53305 }, /* ADD */ { CPUFUNC(op_d03a_31), 53306 }, /* ADD */ { CPUFUNC(op_d03b_31), 53307 }, /* ADD */ { CPUFUNC(op_d03c_31), 53308 }, /* ADD */ { CPUFUNC(op_d040_31), 53312 }, /* ADD */ { CPUFUNC(op_d048_31), 53320 }, /* ADD */ { CPUFUNC(op_d050_31), 53328 }, /* ADD */ { CPUFUNC(op_d058_31), 53336 }, /* ADD */ { CPUFUNC(op_d060_31), 53344 }, /* ADD */ { CPUFUNC(op_d068_31), 53352 }, /* ADD */ { CPUFUNC(op_d070_31), 53360 }, /* ADD */ { CPUFUNC(op_d078_31), 53368 }, /* ADD */ { CPUFUNC(op_d079_31), 53369 }, /* ADD */ { CPUFUNC(op_d07a_31), 53370 }, /* ADD */ { CPUFUNC(op_d07b_31), 53371 }, /* ADD */ { CPUFUNC(op_d07c_31), 53372 }, /* ADD */ { CPUFUNC(op_d080_31), 53376 }, /* ADD */ { CPUFUNC(op_d088_31), 53384 }, /* ADD */ { CPUFUNC(op_d090_31), 53392 }, /* ADD */ { CPUFUNC(op_d098_31), 53400 }, /* ADD */ { CPUFUNC(op_d0a0_31), 53408 }, /* ADD */ { CPUFUNC(op_d0a8_31), 53416 }, /* ADD */ { CPUFUNC(op_d0b0_31), 53424 }, /* ADD */ { CPUFUNC(op_d0b8_31), 53432 }, /* ADD */ { CPUFUNC(op_d0b9_31), 53433 }, /* ADD */ { CPUFUNC(op_d0ba_31), 53434 }, /* ADD */ { CPUFUNC(op_d0bb_31), 53435 }, /* ADD */ { CPUFUNC(op_d0bc_31), 53436 }, /* ADD */ { CPUFUNC(op_d0c0_31), 53440 }, /* ADDA */ { CPUFUNC(op_d0c8_31), 53448 }, /* ADDA */ { CPUFUNC(op_d0d0_31), 53456 }, /* ADDA */ { CPUFUNC(op_d0d8_31), 53464 }, /* ADDA */ { CPUFUNC(op_d0e0_31), 53472 }, /* ADDA */ { CPUFUNC(op_d0e8_31), 53480 }, /* ADDA */ { CPUFUNC(op_d0f0_31), 53488 }, /* ADDA */ { CPUFUNC(op_d0f8_31), 53496 }, /* ADDA */ { CPUFUNC(op_d0f9_31), 53497 }, /* ADDA */ { CPUFUNC(op_d0fa_31), 53498 }, /* ADDA */ { CPUFUNC(op_d0fb_31), 53499 }, /* ADDA */ { CPUFUNC(op_d0fc_31), 53500 }, /* ADDA */ { CPUFUNC(op_d100_31), 53504 }, /* ADDX */ { CPUFUNC(op_d108_31), 53512 }, /* ADDX */ { CPUFUNC(op_d110_31), 53520 }, /* ADD */ { CPUFUNC(op_d118_31), 53528 }, /* ADD */ { CPUFUNC(op_d120_31), 53536 }, /* ADD */ { CPUFUNC(op_d128_31), 53544 }, /* ADD */ { CPUFUNC(op_d130_31), 53552 }, /* ADD */ { CPUFUNC(op_d138_31), 53560 }, /* ADD */ { CPUFUNC(op_d139_31), 53561 }, /* ADD */ { CPUFUNC(op_d140_31), 53568 }, /* ADDX */ { CPUFUNC(op_d148_31), 53576 }, /* ADDX */ { CPUFUNC(op_d150_31), 53584 }, /* ADD */ { CPUFUNC(op_d158_31), 53592 }, /* ADD */ { CPUFUNC(op_d160_31), 53600 }, /* ADD */ { CPUFUNC(op_d168_31), 53608 }, /* ADD */ { CPUFUNC(op_d170_31), 53616 }, /* ADD */ { CPUFUNC(op_d178_31), 53624 }, /* ADD */ { CPUFUNC(op_d179_31), 53625 }, /* ADD */ { CPUFUNC(op_d180_31), 53632 }, /* ADDX */ { CPUFUNC(op_d188_31), 53640 }, /* ADDX */ { CPUFUNC(op_d190_31), 53648 }, /* ADD */ { CPUFUNC(op_d198_31), 53656 }, /* ADD */ { CPUFUNC(op_d1a0_31), 53664 }, /* ADD */ { CPUFUNC(op_d1a8_31), 53672 }, /* ADD */ { CPUFUNC(op_d1b0_31), 53680 }, /* ADD */ { CPUFUNC(op_d1b8_31), 53688 }, /* ADD */ { CPUFUNC(op_d1b9_31), 53689 }, /* ADD */ { CPUFUNC(op_d1c0_31), 53696 }, /* ADDA */ { CPUFUNC(op_d1c8_31), 53704 }, /* ADDA */ { CPUFUNC(op_d1d0_31), 53712 }, /* ADDA */ { CPUFUNC(op_d1d8_31), 53720 }, /* ADDA */ { CPUFUNC(op_d1e0_31), 53728 }, /* ADDA */ { CPUFUNC(op_d1e8_31), 53736 }, /* ADDA */ { CPUFUNC(op_d1f0_31), 53744 }, /* ADDA */ { CPUFUNC(op_d1f8_31), 53752 }, /* ADDA */ { CPUFUNC(op_d1f9_31), 53753 }, /* ADDA */ { CPUFUNC(op_d1fa_31), 53754 }, /* ADDA */ { CPUFUNC(op_d1fb_31), 53755 }, /* ADDA */ { CPUFUNC(op_d1fc_31), 53756 }, /* ADDA */ { CPUFUNC(op_e000_31), 57344 }, /* ASR */ { CPUFUNC(op_e008_31), 57352 }, /* LSR */ { CPUFUNC(op_e010_31), 57360 }, /* ROXR */ { CPUFUNC(op_e018_31), 57368 }, /* ROR */ { CPUFUNC(op_e020_31), 57376 }, /* ASR */ { CPUFUNC(op_e028_31), 57384 }, /* LSR */ { CPUFUNC(op_e030_31), 57392 }, /* ROXR */ { CPUFUNC(op_e038_31), 57400 }, /* ROR */ { CPUFUNC(op_e040_31), 57408 }, /* ASR */ { CPUFUNC(op_e048_31), 57416 }, /* LSR */ { CPUFUNC(op_e050_31), 57424 }, /* ROXR */ { CPUFUNC(op_e058_31), 57432 }, /* ROR */ { CPUFUNC(op_e060_31), 57440 }, /* ASR */ { CPUFUNC(op_e068_31), 57448 }, /* LSR */ { CPUFUNC(op_e070_31), 57456 }, /* ROXR */ { CPUFUNC(op_e078_31), 57464 }, /* ROR */ { CPUFUNC(op_e080_31), 57472 }, /* ASR */ { CPUFUNC(op_e088_31), 57480 }, /* LSR */ { CPUFUNC(op_e090_31), 57488 }, /* ROXR */ { CPUFUNC(op_e098_31), 57496 }, /* ROR */ { CPUFUNC(op_e0a0_31), 57504 }, /* ASR */ { CPUFUNC(op_e0a8_31), 57512 }, /* LSR */ { CPUFUNC(op_e0b0_31), 57520 }, /* ROXR */ { CPUFUNC(op_e0b8_31), 57528 }, /* ROR */ { CPUFUNC(op_e0d0_31), 57552 }, /* ASRW */ { CPUFUNC(op_e0d8_31), 57560 }, /* ASRW */ { CPUFUNC(op_e0e0_31), 57568 }, /* ASRW */ { CPUFUNC(op_e0e8_31), 57576 }, /* ASRW */ { CPUFUNC(op_e0f0_31), 57584 }, /* ASRW */ { CPUFUNC(op_e0f8_31), 57592 }, /* ASRW */ { CPUFUNC(op_e0f9_31), 57593 }, /* ASRW */ { CPUFUNC(op_e100_31), 57600 }, /* ASL */ { CPUFUNC(op_e108_31), 57608 }, /* LSL */ { CPUFUNC(op_e110_31), 57616 }, /* ROXL */ { CPUFUNC(op_e118_31), 57624 }, /* ROL */ { CPUFUNC(op_e120_31), 57632 }, /* ASL */ { CPUFUNC(op_e128_31), 57640 }, /* LSL */ { CPUFUNC(op_e130_31), 57648 }, /* ROXL */ { CPUFUNC(op_e138_31), 57656 }, /* ROL */ { CPUFUNC(op_e140_31), 57664 }, /* ASL */ { CPUFUNC(op_e148_31), 57672 }, /* LSL */ { CPUFUNC(op_e150_31), 57680 }, /* ROXL */ { CPUFUNC(op_e158_31), 57688 }, /* ROL */ { CPUFUNC(op_e160_31), 57696 }, /* ASL */ { CPUFUNC(op_e168_31), 57704 }, /* LSL */ { CPUFUNC(op_e170_31), 57712 }, /* ROXL */ { CPUFUNC(op_e178_31), 57720 }, /* ROL */ { CPUFUNC(op_e180_31), 57728 }, /* ASL */ { CPUFUNC(op_e188_31), 57736 }, /* LSL */ { CPUFUNC(op_e190_31), 57744 }, /* ROXL */ { CPUFUNC(op_e198_31), 57752 }, /* ROL */ { CPUFUNC(op_e1a0_31), 57760 }, /* ASL */ { CPUFUNC(op_e1a8_31), 57768 }, /* LSL */ { CPUFUNC(op_e1b0_31), 57776 }, /* ROXL */ { CPUFUNC(op_e1b8_31), 57784 }, /* ROL */ { CPUFUNC(op_e1d0_31), 57808 }, /* ASLW */ { CPUFUNC(op_e1d8_31), 57816 }, /* ASLW */ { CPUFUNC(op_e1e0_31), 57824 }, /* ASLW */ { CPUFUNC(op_e1e8_31), 57832 }, /* ASLW */ { CPUFUNC(op_e1f0_31), 57840 }, /* ASLW */ { CPUFUNC(op_e1f8_31), 57848 }, /* ASLW */ { CPUFUNC(op_e1f9_31), 57849 }, /* ASLW */ { CPUFUNC(op_e2d0_31), 58064 }, /* LSRW */ { CPUFUNC(op_e2d8_31), 58072 }, /* LSRW */ { CPUFUNC(op_e2e0_31), 58080 }, /* LSRW */ { CPUFUNC(op_e2e8_31), 58088 }, /* LSRW */ { CPUFUNC(op_e2f0_31), 58096 }, /* LSRW */ { CPUFUNC(op_e2f8_31), 58104 }, /* LSRW */ { CPUFUNC(op_e2f9_31), 58105 }, /* LSRW */ { CPUFUNC(op_e3d0_31), 58320 }, /* LSLW */ { CPUFUNC(op_e3d8_31), 58328 }, /* LSLW */ { CPUFUNC(op_e3e0_31), 58336 }, /* LSLW */ { CPUFUNC(op_e3e8_31), 58344 }, /* LSLW */ { CPUFUNC(op_e3f0_31), 58352 }, /* LSLW */ { CPUFUNC(op_e3f8_31), 58360 }, /* LSLW */ { CPUFUNC(op_e3f9_31), 58361 }, /* LSLW */ { CPUFUNC(op_e4d0_31), 58576 }, /* ROXRW */ { CPUFUNC(op_e4d8_31), 58584 }, /* ROXRW */ { CPUFUNC(op_e4e0_31), 58592 }, /* ROXRW */ { CPUFUNC(op_e4e8_31), 58600 }, /* ROXRW */ { CPUFUNC(op_e4f0_31), 58608 }, /* ROXRW */ { CPUFUNC(op_e4f8_31), 58616 }, /* ROXRW */ { CPUFUNC(op_e4f9_31), 58617 }, /* ROXRW */ { CPUFUNC(op_e5d0_31), 58832 }, /* ROXLW */ { CPUFUNC(op_e5d8_31), 58840 }, /* ROXLW */ { CPUFUNC(op_e5e0_31), 58848 }, /* ROXLW */ { CPUFUNC(op_e5e8_31), 58856 }, /* ROXLW */ { CPUFUNC(op_e5f0_31), 58864 }, /* ROXLW */ { CPUFUNC(op_e5f8_31), 58872 }, /* ROXLW */ { CPUFUNC(op_e5f9_31), 58873 }, /* ROXLW */ { CPUFUNC(op_e6d0_31), 59088 }, /* RORW */ { CPUFUNC(op_e6d8_31), 59096 }, /* RORW */ { CPUFUNC(op_e6e0_31), 59104 }, /* RORW */ { CPUFUNC(op_e6e8_31), 59112 }, /* RORW */ { CPUFUNC(op_e6f0_31), 59120 }, /* RORW */ { CPUFUNC(op_e6f8_31), 59128 }, /* RORW */ { CPUFUNC(op_e6f9_31), 59129 }, /* RORW */ { CPUFUNC(op_e7d0_31), 59344 }, /* ROLW */ { CPUFUNC(op_e7d8_31), 59352 }, /* ROLW */ { CPUFUNC(op_e7e0_31), 59360 }, /* ROLW */ { CPUFUNC(op_e7e8_31), 59368 }, /* ROLW */ { CPUFUNC(op_e7f0_31), 59376 }, /* ROLW */ { CPUFUNC(op_e7f8_31), 59384 }, /* ROLW */ { CPUFUNC(op_e7f9_31), 59385 }, /* ROLW */ #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_e8c0_31), 59584 }, /* BFTST */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_e8d0_31), 59600 }, /* BFTST */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_e8e8_31), 59624 }, /* BFTST */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_e8f0_31), 59632 }, /* BFTST */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_e8f8_31), 59640 }, /* BFTST */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_e8f9_31), 59641 }, /* BFTST */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_e8fa_31), 59642 }, /* BFTST */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_e8fb_31), 59643 }, /* BFTST */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_e9c0_31), 59840 }, /* BFEXTU */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_e9d0_31), 59856 }, /* BFEXTU */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_e9e8_31), 59880 }, /* BFEXTU */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_e9f0_31), 59888 }, /* BFEXTU */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_e9f8_31), 59896 }, /* BFEXTU */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_e9f9_31), 59897 }, /* BFEXTU */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_e9fa_31), 59898 }, /* BFEXTU */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_e9fb_31), 59899 }, /* BFEXTU */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_eac0_31), 60096 }, /* BFCHG */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_ead0_31), 60112 }, /* BFCHG */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_eae8_31), 60136 }, /* BFCHG */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_eaf0_31), 60144 }, /* BFCHG */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_eaf8_31), 60152 }, /* BFCHG */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_eaf9_31), 60153 }, /* BFCHG */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_ebc0_31), 60352 }, /* BFEXTS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_ebd0_31), 60368 }, /* BFEXTS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_ebe8_31), 60392 }, /* BFEXTS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_ebf0_31), 60400 }, /* BFEXTS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_ebf8_31), 60408 }, /* BFEXTS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_ebf9_31), 60409 }, /* BFEXTS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_ebfa_31), 60410 }, /* BFEXTS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_ebfb_31), 60411 }, /* BFEXTS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_ecc0_31), 60608 }, /* BFCLR */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_ecd0_31), 60624 }, /* BFCLR */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_ece8_31), 60648 }, /* BFCLR */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_ecf0_31), 60656 }, /* BFCLR */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_ecf8_31), 60664 }, /* BFCLR */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_ecf9_31), 60665 }, /* BFCLR */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_edc0_31), 60864 }, /* BFFFO */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_edd0_31), 60880 }, /* BFFFO */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_ede8_31), 60904 }, /* BFFFO */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_edf0_31), 60912 }, /* BFFFO */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_edf8_31), 60920 }, /* BFFFO */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_edf9_31), 60921 }, /* BFFFO */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_edfa_31), 60922 }, /* BFFFO */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_edfb_31), 60923 }, /* BFFFO */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_eec0_31), 61120 }, /* BFSET */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_eed0_31), 61136 }, /* BFSET */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_eee8_31), 61160 }, /* BFSET */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_eef0_31), 61168 }, /* BFSET */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_eef8_31), 61176 }, /* BFSET */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_eef9_31), 61177 }, /* BFSET */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_efc0_31), 61376 }, /* BFINS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_efd0_31), 61392 }, /* BFINS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_efe8_31), 61416 }, /* BFINS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_eff0_31), 61424 }, /* BFINS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_eff8_31), 61432 }, /* BFINS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_eff9_31), 61433 }, /* BFINS */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f000_31), 61440 }, /* MMUOP030 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f008_31), 61448 }, /* MMUOP030 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f010_31), 61456 }, /* MMUOP030 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f018_31), 61464 }, /* MMUOP030 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f020_31), 61472 }, /* MMUOP030 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f028_31), 61480 }, /* MMUOP030 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f030_31), 61488 }, /* MMUOP030 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f038_31), 61496 }, /* MMUOP030 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f039_31), 61497 }, /* MMUOP030 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f200_31), 61952 }, /* FPP */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f208_31), 61960 }, /* FPP */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f210_31), 61968 }, /* FPP */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f218_31), 61976 }, /* FPP */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f220_31), 61984 }, /* FPP */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f228_31), 61992 }, /* FPP */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f230_31), 62000 }, /* FPP */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f238_31), 62008 }, /* FPP */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f239_31), 62009 }, /* FPP */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f23a_31), 62010 }, /* FPP */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f23b_31), 62011 }, /* FPP */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f23c_31), 62012 }, /* FPP */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f240_31), 62016 }, /* FScc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f248_31), 62024 }, /* FDBcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f250_31), 62032 }, /* FScc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f258_31), 62040 }, /* FScc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f260_31), 62048 }, /* FScc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f268_31), 62056 }, /* FScc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f270_31), 62064 }, /* FScc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f278_31), 62072 }, /* FScc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f279_31), 62073 }, /* FScc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f27a_31), 62074 }, /* FTRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f27b_31), 62075 }, /* FTRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f27c_31), 62076 }, /* FTRAPcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f280_31), 62080 }, /* FBcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f2c0_31), 62144 }, /* FBcc */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f310_31), 62224 }, /* FSAVE */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f320_31), 62240 }, /* FSAVE */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f328_31), 62248 }, /* FSAVE */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f330_31), 62256 }, /* FSAVE */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f338_31), 62264 }, /* FSAVE */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f339_31), 62265 }, /* FSAVE */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f350_31), 62288 }, /* FRESTORE */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f358_31), 62296 }, /* FRESTORE */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f368_31), 62312 }, /* FRESTORE */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f370_31), 62320 }, /* FRESTORE */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f378_31), 62328 }, /* FRESTORE */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f379_31), 62329 }, /* FRESTORE */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f37a_31), 62330 }, /* FRESTORE */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f37b_31), 62331 }, /* FRESTORE */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f408_31), 62472 }, /* CINVL */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f410_31), 62480 }, /* CINVP */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f418_31), 62488 }, /* CINVA */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f419_31), 62489 }, /* CINVA */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f41a_31), 62490 }, /* CINVA */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f41b_31), 62491 }, /* CINVA */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f41c_31), 62492 }, /* CINVA */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f41d_31), 62493 }, /* CINVA */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f41e_31), 62494 }, /* CINVA */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f41f_31), 62495 }, /* CINVA */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f428_31), 62504 }, /* CPUSHL */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f430_31), 62512 }, /* CPUSHP */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f438_31), 62520 }, /* CPUSHA */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f439_31), 62521 }, /* CPUSHA */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f43a_31), 62522 }, /* CPUSHA */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f43b_31), 62523 }, /* CPUSHA */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f43c_31), 62524 }, /* CPUSHA */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f43d_31), 62525 }, /* CPUSHA */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f43e_31), 62526 }, /* CPUSHA */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f43f_31), 62527 }, /* CPUSHA */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f500_31), 62720 }, /* PFLUSHN */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f508_31), 62728 }, /* PFLUSH */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f510_31), 62736 }, /* PFLUSHAN */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f518_31), 62744 }, /* PFLUSHA */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f548_31), 62792 }, /* PTESTR */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f568_31), 62824 }, /* PTESTW */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f600_31), 62976 }, /* MOVE16 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f608_31), 62984 }, /* MOVE16 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f610_31), 62992 }, /* MOVE16 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f618_31), 63000 }, /* MOVE16 */ #endif #ifndef CPUEMU_68000_ONLY { CPUFUNC(op_f620_31), 63008 }, /* MOVE16 */ #endif { 0, 0 }}; #endif /* CPUEMU_68000_ONLY */ #endif /* CPUEMU_31 */ fs-uae-2.2.3+dfsg/gensrc/linetoscr.cpp0000644000175000017500000105017312162366654020052 0ustar glaubitzglaubitz/* * E-UAE - The portable Amiga emulator. * * This file was generated by genlinetoscr. Don't edit. */ static int NOINLINE linetoscr_16 (int spix, int dpix, int dpix_end) { uae_u16 *buf = (uae_u16 *) xlinebuffer; if (dp_for_drawing->ham_seen) { int rem; if (((long)&buf[dpix]) & 2) { uae_u32 spix_val; uae_u32 dpix_val; dpix_val = xcolors[ham_linebuf[spix]]; spix++; buf[dpix++] = dpix_val; } if (dpix >= dpix_end) return spix; rem = (((long)&buf[dpix_end]) & 2); if (rem) dpix_end--; while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; dpix_val = xcolors[ham_linebuf[spix]]; spix++; out_val = dpix_val; dpix_val = xcolors[ham_linebuf[spix]]; spix++; out_val = (out_val & 0xFFFF) | (dpix_val << 16); *((uae_u32 *)&buf[dpix]) = out_val; dpix += 2; } if (rem) { uae_u32 spix_val; uae_u32 dpix_val; dpix_val = xcolors[ham_linebuf[spix]]; spix++; buf[dpix++] = dpix_val; } } else if (bpldualpf) { int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; int rem; if (((long)&buf[dpix]) & 2) { uae_u32 spix_val; uae_u32 dpix_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[lookup[spix_val]]; spix++; buf[dpix++] = dpix_val; } if (dpix >= dpix_end) return spix; rem = (((long)&buf[dpix_end]) & 2); if (rem) dpix_end--; while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[lookup[spix_val]]; spix++; out_val = dpix_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[lookup[spix_val]]; spix++; out_val = (out_val & 0xFFFF) | (dpix_val << 16); *((uae_u32 *)&buf[dpix]) = out_val; dpix += 2; } if (rem) { uae_u32 spix_val; uae_u32 dpix_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[lookup[spix_val]]; spix++; buf[dpix++] = dpix_val; } } else if (bplehb) { int rem; if (((long)&buf[dpix]) & 2) { uae_u32 spix_val; uae_u32 dpix_val; spix_val = pixdata.apixels[spix]; if (spix_val <= 31) dpix_val = colors_for_drawing.acolors[spix_val]; else dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; spix++; buf[dpix++] = dpix_val; } if (dpix >= dpix_end) return spix; rem = (((long)&buf[dpix_end]) & 2); if (rem) dpix_end--; while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; if (spix_val <= 31) dpix_val = colors_for_drawing.acolors[spix_val]; else dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; spix++; out_val = dpix_val; spix_val = pixdata.apixels[spix]; if (spix_val <= 31) dpix_val = colors_for_drawing.acolors[spix_val]; else dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; spix++; out_val = (out_val & 0xFFFF) | (dpix_val << 16); *((uae_u32 *)&buf[dpix]) = out_val; dpix += 2; } if (rem) { uae_u32 spix_val; uae_u32 dpix_val; spix_val = pixdata.apixels[spix]; if (spix_val <= 31) dpix_val = colors_for_drawing.acolors[spix_val]; else dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; spix++; buf[dpix++] = dpix_val; } } else { int rem; if (((long)&buf[dpix]) & 2) { uae_u32 spix_val; uae_u32 dpix_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[spix_val]; spix++; buf[dpix++] = dpix_val; } if (dpix >= dpix_end) return spix; rem = (((long)&buf[dpix_end]) & 2); if (rem) dpix_end--; while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[spix_val]; spix++; out_val = dpix_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[spix_val]; spix++; out_val = (out_val & 0xFFFF) | (dpix_val << 16); *((uae_u32 *)&buf[dpix]) = out_val; dpix += 2; } if (rem) { uae_u32 spix_val; uae_u32 dpix_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[spix_val]; spix++; buf[dpix++] = dpix_val; } } return spix; } static int NOINLINE linetoscr_16_stretch1 (int spix, int dpix, int dpix_end) { uae_u16 *buf = (uae_u16 *) xlinebuffer; if (dp_for_drawing->ham_seen) { while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; dpix_val = xcolors[ham_linebuf[spix]]; spix++; out_val = dpix_val; *((uae_u32 *)&buf[dpix]) = out_val; dpix += 2; } } else if (bpldualpf) { int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[lookup[spix_val]]; spix++; out_val = dpix_val; *((uae_u32 *)&buf[dpix]) = out_val; dpix += 2; } } else if (bplehb) { while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; if (spix_val <= 31) dpix_val = colors_for_drawing.acolors[spix_val]; else dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; spix++; out_val = dpix_val; *((uae_u32 *)&buf[dpix]) = out_val; dpix += 2; } } else { while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[spix_val]; spix++; out_val = dpix_val; *((uae_u32 *)&buf[dpix]) = out_val; dpix += 2; } } return spix; } static int NOINLINE linetoscr_16_stretch2 (int spix, int dpix, int dpix_end) { uae_u16 *buf = (uae_u16 *) xlinebuffer; if (dp_for_drawing->ham_seen) { while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; dpix_val = xcolors[ham_linebuf[spix]]; spix++; out_val = dpix_val; *((uae_u32 *)&buf[dpix]) = out_val; dpix += 2; *((uae_u32 *)&buf[dpix]) = out_val; dpix += 2; } } else if (bpldualpf) { int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[lookup[spix_val]]; spix++; out_val = dpix_val; *((uae_u32 *)&buf[dpix]) = out_val; dpix += 2; *((uae_u32 *)&buf[dpix]) = out_val; dpix += 2; } } else if (bplehb) { while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; if (spix_val <= 31) dpix_val = colors_for_drawing.acolors[spix_val]; else dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; spix++; out_val = dpix_val; *((uae_u32 *)&buf[dpix]) = out_val; dpix += 2; *((uae_u32 *)&buf[dpix]) = out_val; dpix += 2; } } else { while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[spix_val]; spix++; out_val = dpix_val; *((uae_u32 *)&buf[dpix]) = out_val; dpix += 2; *((uae_u32 *)&buf[dpix]) = out_val; dpix += 2; } } return spix; } static int NOINLINE linetoscr_16_shrink1 (int spix, int dpix, int dpix_end) { uae_u16 *buf = (uae_u16 *) xlinebuffer; if (dp_for_drawing->ham_seen) { int rem; if (((long)&buf[dpix]) & 2) { uae_u32 spix_val; uae_u32 dpix_val; dpix_val = xcolors[ham_linebuf[spix]]; spix += 2; buf[dpix++] = dpix_val; } if (dpix >= dpix_end) return spix; rem = (((long)&buf[dpix_end]) & 2); if (rem) dpix_end--; while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; dpix_val = xcolors[ham_linebuf[spix]]; spix += 2; out_val = dpix_val; dpix_val = xcolors[ham_linebuf[spix]]; spix += 2; out_val = (out_val & 0xFFFF) | (dpix_val << 16); *((uae_u32 *)&buf[dpix]) = out_val; dpix += 2; } if (rem) { uae_u32 spix_val; uae_u32 dpix_val; dpix_val = xcolors[ham_linebuf[spix]]; spix += 2; buf[dpix++] = dpix_val; } } else if (bpldualpf) { int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; int rem; if (((long)&buf[dpix]) & 2) { uae_u32 spix_val; uae_u32 dpix_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[lookup[spix_val]]; spix += 2; buf[dpix++] = dpix_val; } if (dpix >= dpix_end) return spix; rem = (((long)&buf[dpix_end]) & 2); if (rem) dpix_end--; while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[lookup[spix_val]]; spix += 2; out_val = dpix_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[lookup[spix_val]]; spix += 2; out_val = (out_val & 0xFFFF) | (dpix_val << 16); *((uae_u32 *)&buf[dpix]) = out_val; dpix += 2; } if (rem) { uae_u32 spix_val; uae_u32 dpix_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[lookup[spix_val]]; spix += 2; buf[dpix++] = dpix_val; } } else if (bplehb) { int rem; if (((long)&buf[dpix]) & 2) { uae_u32 spix_val; uae_u32 dpix_val; spix_val = pixdata.apixels[spix]; if (spix_val <= 31) dpix_val = colors_for_drawing.acolors[spix_val]; else dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; spix += 2; buf[dpix++] = dpix_val; } if (dpix >= dpix_end) return spix; rem = (((long)&buf[dpix_end]) & 2); if (rem) dpix_end--; while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; if (spix_val <= 31) dpix_val = colors_for_drawing.acolors[spix_val]; else dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; spix += 2; out_val = dpix_val; spix_val = pixdata.apixels[spix]; if (spix_val <= 31) dpix_val = colors_for_drawing.acolors[spix_val]; else dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; spix += 2; out_val = (out_val & 0xFFFF) | (dpix_val << 16); *((uae_u32 *)&buf[dpix]) = out_val; dpix += 2; } if (rem) { uae_u32 spix_val; uae_u32 dpix_val; spix_val = pixdata.apixels[spix]; if (spix_val <= 31) dpix_val = colors_for_drawing.acolors[spix_val]; else dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; spix += 2; buf[dpix++] = dpix_val; } } else { int rem; if (((long)&buf[dpix]) & 2) { uae_u32 spix_val; uae_u32 dpix_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[spix_val]; spix += 2; buf[dpix++] = dpix_val; } if (dpix >= dpix_end) return spix; rem = (((long)&buf[dpix_end]) & 2); if (rem) dpix_end--; while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[spix_val]; spix += 2; out_val = dpix_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[spix_val]; spix += 2; out_val = (out_val & 0xFFFF) | (dpix_val << 16); *((uae_u32 *)&buf[dpix]) = out_val; dpix += 2; } if (rem) { uae_u32 spix_val; uae_u32 dpix_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[spix_val]; spix += 2; buf[dpix++] = dpix_val; } } return spix; } static int NOINLINE linetoscr_16_shrink1f (int spix, int dpix, int dpix_end) { uae_u16 *buf = (uae_u16 *) xlinebuffer; if (dp_for_drawing->ham_seen) { int rem; if (((long)&buf[dpix]) & 2) { uae_u32 spix_val; uae_u32 dpix_val; dpix_val = xcolors[ham_linebuf[spix]]; { uae_u32 tmp_val; spix++; tmp_val = dpix_val; dpix_val = xcolors[ham_linebuf[spix]]; dpix_val = merge_2pixel16 (dpix_val, tmp_val); spix++; } buf[dpix++] = dpix_val; } if (dpix >= dpix_end) return spix; rem = (((long)&buf[dpix_end]) & 2); if (rem) dpix_end--; while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; dpix_val = xcolors[ham_linebuf[spix]]; { uae_u32 tmp_val; spix++; tmp_val = dpix_val; dpix_val = xcolors[ham_linebuf[spix]]; dpix_val = merge_2pixel16 (dpix_val, tmp_val); spix++; } out_val = dpix_val; dpix_val = xcolors[ham_linebuf[spix]]; { uae_u32 tmp_val; spix++; tmp_val = dpix_val; dpix_val = xcolors[ham_linebuf[spix]]; dpix_val = merge_2pixel16 (dpix_val, tmp_val); spix++; } out_val = (out_val & 0xFFFF) | (dpix_val << 16); *((uae_u32 *)&buf[dpix]) = out_val; dpix += 2; } if (rem) { uae_u32 spix_val; uae_u32 dpix_val; dpix_val = xcolors[ham_linebuf[spix]]; { uae_u32 tmp_val; spix++; tmp_val = dpix_val; dpix_val = xcolors[ham_linebuf[spix]]; dpix_val = merge_2pixel16 (dpix_val, tmp_val); spix++; } buf[dpix++] = dpix_val; } } else if (bpldualpf) { int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; int rem; if (((long)&buf[dpix]) & 2) { uae_u32 spix_val; uae_u32 dpix_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[lookup[spix_val]]; { uae_u32 tmp_val; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[lookup[spix_val]]; dpix_val = merge_2pixel16 (dpix_val, tmp_val); spix++; } buf[dpix++] = dpix_val; } if (dpix >= dpix_end) return spix; rem = (((long)&buf[dpix_end]) & 2); if (rem) dpix_end--; while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[lookup[spix_val]]; { uae_u32 tmp_val; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[lookup[spix_val]]; dpix_val = merge_2pixel16 (dpix_val, tmp_val); spix++; } out_val = dpix_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[lookup[spix_val]]; { uae_u32 tmp_val; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[lookup[spix_val]]; dpix_val = merge_2pixel16 (dpix_val, tmp_val); spix++; } out_val = (out_val & 0xFFFF) | (dpix_val << 16); *((uae_u32 *)&buf[dpix]) = out_val; dpix += 2; } if (rem) { uae_u32 spix_val; uae_u32 dpix_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[lookup[spix_val]]; { uae_u32 tmp_val; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[lookup[spix_val]]; dpix_val = merge_2pixel16 (dpix_val, tmp_val); spix++; } buf[dpix++] = dpix_val; } } else if (bplehb) { int rem; if (((long)&buf[dpix]) & 2) { uae_u32 spix_val; uae_u32 dpix_val; spix_val = pixdata.apixels[spix]; if (spix_val <= 31) dpix_val = colors_for_drawing.acolors[spix_val]; else dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; { uae_u32 tmp_val; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix]; if (spix_val <= 31) dpix_val = colors_for_drawing.acolors[spix_val]; else dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; dpix_val = merge_2pixel16 (dpix_val, tmp_val); spix++; } buf[dpix++] = dpix_val; } if (dpix >= dpix_end) return spix; rem = (((long)&buf[dpix_end]) & 2); if (rem) dpix_end--; while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; if (spix_val <= 31) dpix_val = colors_for_drawing.acolors[spix_val]; else dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; { uae_u32 tmp_val; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix]; if (spix_val <= 31) dpix_val = colors_for_drawing.acolors[spix_val]; else dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; dpix_val = merge_2pixel16 (dpix_val, tmp_val); spix++; } out_val = dpix_val; spix_val = pixdata.apixels[spix]; if (spix_val <= 31) dpix_val = colors_for_drawing.acolors[spix_val]; else dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; { uae_u32 tmp_val; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix]; if (spix_val <= 31) dpix_val = colors_for_drawing.acolors[spix_val]; else dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; dpix_val = merge_2pixel16 (dpix_val, tmp_val); spix++; } out_val = (out_val & 0xFFFF) | (dpix_val << 16); *((uae_u32 *)&buf[dpix]) = out_val; dpix += 2; } if (rem) { uae_u32 spix_val; uae_u32 dpix_val; spix_val = pixdata.apixels[spix]; if (spix_val <= 31) dpix_val = colors_for_drawing.acolors[spix_val]; else dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; { uae_u32 tmp_val; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix]; if (spix_val <= 31) dpix_val = colors_for_drawing.acolors[spix_val]; else dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; dpix_val = merge_2pixel16 (dpix_val, tmp_val); spix++; } buf[dpix++] = dpix_val; } } else { int rem; if (((long)&buf[dpix]) & 2) { uae_u32 spix_val; uae_u32 dpix_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[spix_val]; { uae_u32 tmp_val; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[spix_val]; dpix_val = merge_2pixel16 (dpix_val, tmp_val); spix++; } buf[dpix++] = dpix_val; } if (dpix >= dpix_end) return spix; rem = (((long)&buf[dpix_end]) & 2); if (rem) dpix_end--; while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[spix_val]; { uae_u32 tmp_val; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[spix_val]; dpix_val = merge_2pixel16 (dpix_val, tmp_val); spix++; } out_val = dpix_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[spix_val]; { uae_u32 tmp_val; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[spix_val]; dpix_val = merge_2pixel16 (dpix_val, tmp_val); spix++; } out_val = (out_val & 0xFFFF) | (dpix_val << 16); *((uae_u32 *)&buf[dpix]) = out_val; dpix += 2; } if (rem) { uae_u32 spix_val; uae_u32 dpix_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[spix_val]; { uae_u32 tmp_val; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[spix_val]; dpix_val = merge_2pixel16 (dpix_val, tmp_val); spix++; } buf[dpix++] = dpix_val; } } return spix; } static int NOINLINE linetoscr_16_shrink2 (int spix, int dpix, int dpix_end) { uae_u16 *buf = (uae_u16 *) xlinebuffer; if (dp_for_drawing->ham_seen) { int rem; if (((long)&buf[dpix]) & 2) { uae_u32 spix_val; uae_u32 dpix_val; dpix_val = xcolors[ham_linebuf[spix]]; spix += 4; buf[dpix++] = dpix_val; } if (dpix >= dpix_end) return spix; rem = (((long)&buf[dpix_end]) & 2); if (rem) dpix_end--; while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; dpix_val = xcolors[ham_linebuf[spix]]; spix += 4; out_val = dpix_val; dpix_val = xcolors[ham_linebuf[spix]]; spix += 4; out_val = (out_val & 0xFFFF) | (dpix_val << 16); *((uae_u32 *)&buf[dpix]) = out_val; dpix += 2; } if (rem) { uae_u32 spix_val; uae_u32 dpix_val; dpix_val = xcolors[ham_linebuf[spix]]; spix += 4; buf[dpix++] = dpix_val; } } else if (bpldualpf) { int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; int rem; if (((long)&buf[dpix]) & 2) { uae_u32 spix_val; uae_u32 dpix_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[lookup[spix_val]]; spix += 4; buf[dpix++] = dpix_val; } if (dpix >= dpix_end) return spix; rem = (((long)&buf[dpix_end]) & 2); if (rem) dpix_end--; while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[lookup[spix_val]]; spix += 4; out_val = dpix_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[lookup[spix_val]]; spix += 4; out_val = (out_val & 0xFFFF) | (dpix_val << 16); *((uae_u32 *)&buf[dpix]) = out_val; dpix += 2; } if (rem) { uae_u32 spix_val; uae_u32 dpix_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[lookup[spix_val]]; spix += 4; buf[dpix++] = dpix_val; } } else if (bplehb) { int rem; if (((long)&buf[dpix]) & 2) { uae_u32 spix_val; uae_u32 dpix_val; spix_val = pixdata.apixels[spix]; if (spix_val <= 31) dpix_val = colors_for_drawing.acolors[spix_val]; else dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; spix += 4; buf[dpix++] = dpix_val; } if (dpix >= dpix_end) return spix; rem = (((long)&buf[dpix_end]) & 2); if (rem) dpix_end--; while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; if (spix_val <= 31) dpix_val = colors_for_drawing.acolors[spix_val]; else dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; spix += 4; out_val = dpix_val; spix_val = pixdata.apixels[spix]; if (spix_val <= 31) dpix_val = colors_for_drawing.acolors[spix_val]; else dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; spix += 4; out_val = (out_val & 0xFFFF) | (dpix_val << 16); *((uae_u32 *)&buf[dpix]) = out_val; dpix += 2; } if (rem) { uae_u32 spix_val; uae_u32 dpix_val; spix_val = pixdata.apixels[spix]; if (spix_val <= 31) dpix_val = colors_for_drawing.acolors[spix_val]; else dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; spix += 4; buf[dpix++] = dpix_val; } } else { int rem; if (((long)&buf[dpix]) & 2) { uae_u32 spix_val; uae_u32 dpix_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[spix_val]; spix += 4; buf[dpix++] = dpix_val; } if (dpix >= dpix_end) return spix; rem = (((long)&buf[dpix_end]) & 2); if (rem) dpix_end--; while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[spix_val]; spix += 4; out_val = dpix_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[spix_val]; spix += 4; out_val = (out_val & 0xFFFF) | (dpix_val << 16); *((uae_u32 *)&buf[dpix]) = out_val; dpix += 2; } if (rem) { uae_u32 spix_val; uae_u32 dpix_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[spix_val]; spix += 4; buf[dpix++] = dpix_val; } } return spix; } static int NOINLINE linetoscr_16_shrink2f (int spix, int dpix, int dpix_end) { uae_u16 *buf = (uae_u16 *) xlinebuffer; if (dp_for_drawing->ham_seen) { int rem; if (((long)&buf[dpix]) & 2) { uae_u32 spix_val; uae_u32 dpix_val; dpix_val = xcolors[ham_linebuf[spix]]; { uae_u32 tmp_val, tmp_val2, tmp_val3; spix++; tmp_val = dpix_val; dpix_val = xcolors[ham_linebuf[spix]]; spix++; tmp_val2 = dpix_val; dpix_val = xcolors[ham_linebuf[spix]]; spix++; tmp_val3 = dpix_val; dpix_val = xcolors[ham_linebuf[spix]]; tmp_val = merge_2pixel16 (tmp_val, tmp_val2); tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); dpix_val = merge_2pixel16 (tmp_val, tmp_val2); spix++; } buf[dpix++] = dpix_val; } if (dpix >= dpix_end) return spix; rem = (((long)&buf[dpix_end]) & 2); if (rem) dpix_end--; while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; dpix_val = xcolors[ham_linebuf[spix]]; { uae_u32 tmp_val, tmp_val2, tmp_val3; spix++; tmp_val = dpix_val; dpix_val = xcolors[ham_linebuf[spix]]; spix++; tmp_val2 = dpix_val; dpix_val = xcolors[ham_linebuf[spix]]; spix++; tmp_val3 = dpix_val; dpix_val = xcolors[ham_linebuf[spix]]; tmp_val = merge_2pixel16 (tmp_val, tmp_val2); tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); dpix_val = merge_2pixel16 (tmp_val, tmp_val2); spix++; } out_val = dpix_val; dpix_val = xcolors[ham_linebuf[spix]]; { uae_u32 tmp_val, tmp_val2, tmp_val3; spix++; tmp_val = dpix_val; dpix_val = xcolors[ham_linebuf[spix]]; spix++; tmp_val2 = dpix_val; dpix_val = xcolors[ham_linebuf[spix]]; spix++; tmp_val3 = dpix_val; dpix_val = xcolors[ham_linebuf[spix]]; tmp_val = merge_2pixel16 (tmp_val, tmp_val2); tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); dpix_val = merge_2pixel16 (tmp_val, tmp_val2); spix++; } out_val = (out_val & 0xFFFF) | (dpix_val << 16); *((uae_u32 *)&buf[dpix]) = out_val; dpix += 2; } if (rem) { uae_u32 spix_val; uae_u32 dpix_val; dpix_val = xcolors[ham_linebuf[spix]]; { uae_u32 tmp_val, tmp_val2, tmp_val3; spix++; tmp_val = dpix_val; dpix_val = xcolors[ham_linebuf[spix]]; spix++; tmp_val2 = dpix_val; dpix_val = xcolors[ham_linebuf[spix]]; spix++; tmp_val3 = dpix_val; dpix_val = xcolors[ham_linebuf[spix]]; tmp_val = merge_2pixel16 (tmp_val, tmp_val2); tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); dpix_val = merge_2pixel16 (tmp_val, tmp_val2); spix++; } buf[dpix++] = dpix_val; } } else if (bpldualpf) { int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; int rem; if (((long)&buf[dpix]) & 2) { uae_u32 spix_val; uae_u32 dpix_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[lookup[spix_val]]; { uae_u32 tmp_val, tmp_val2, tmp_val3; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[lookup[spix_val]]; spix++; tmp_val2 = dpix_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[lookup[spix_val]]; spix++; tmp_val3 = dpix_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[lookup[spix_val]]; tmp_val = merge_2pixel16 (tmp_val, tmp_val2); tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); dpix_val = merge_2pixel16 (tmp_val, tmp_val2); spix++; } buf[dpix++] = dpix_val; } if (dpix >= dpix_end) return spix; rem = (((long)&buf[dpix_end]) & 2); if (rem) dpix_end--; while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[lookup[spix_val]]; { uae_u32 tmp_val, tmp_val2, tmp_val3; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[lookup[spix_val]]; spix++; tmp_val2 = dpix_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[lookup[spix_val]]; spix++; tmp_val3 = dpix_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[lookup[spix_val]]; tmp_val = merge_2pixel16 (tmp_val, tmp_val2); tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); dpix_val = merge_2pixel16 (tmp_val, tmp_val2); spix++; } out_val = dpix_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[lookup[spix_val]]; { uae_u32 tmp_val, tmp_val2, tmp_val3; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[lookup[spix_val]]; spix++; tmp_val2 = dpix_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[lookup[spix_val]]; spix++; tmp_val3 = dpix_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[lookup[spix_val]]; tmp_val = merge_2pixel16 (tmp_val, tmp_val2); tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); dpix_val = merge_2pixel16 (tmp_val, tmp_val2); spix++; } out_val = (out_val & 0xFFFF) | (dpix_val << 16); *((uae_u32 *)&buf[dpix]) = out_val; dpix += 2; } if (rem) { uae_u32 spix_val; uae_u32 dpix_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[lookup[spix_val]]; { uae_u32 tmp_val, tmp_val2, tmp_val3; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[lookup[spix_val]]; spix++; tmp_val2 = dpix_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[lookup[spix_val]]; spix++; tmp_val3 = dpix_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[lookup[spix_val]]; tmp_val = merge_2pixel16 (tmp_val, tmp_val2); tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); dpix_val = merge_2pixel16 (tmp_val, tmp_val2); spix++; } buf[dpix++] = dpix_val; } } else if (bplehb) { int rem; if (((long)&buf[dpix]) & 2) { uae_u32 spix_val; uae_u32 dpix_val; spix_val = pixdata.apixels[spix]; if (spix_val <= 31) dpix_val = colors_for_drawing.acolors[spix_val]; else dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; { uae_u32 tmp_val, tmp_val2, tmp_val3; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix]; if (spix_val <= 31) dpix_val = colors_for_drawing.acolors[spix_val]; else dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; spix++; tmp_val2 = dpix_val; spix_val = pixdata.apixels[spix]; if (spix_val <= 31) dpix_val = colors_for_drawing.acolors[spix_val]; else dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; spix++; tmp_val3 = dpix_val; spix_val = pixdata.apixels[spix]; if (spix_val <= 31) dpix_val = colors_for_drawing.acolors[spix_val]; else dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; tmp_val = merge_2pixel16 (tmp_val, tmp_val2); tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); dpix_val = merge_2pixel16 (tmp_val, tmp_val2); spix++; } buf[dpix++] = dpix_val; } if (dpix >= dpix_end) return spix; rem = (((long)&buf[dpix_end]) & 2); if (rem) dpix_end--; while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; if (spix_val <= 31) dpix_val = colors_for_drawing.acolors[spix_val]; else dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; { uae_u32 tmp_val, tmp_val2, tmp_val3; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix]; if (spix_val <= 31) dpix_val = colors_for_drawing.acolors[spix_val]; else dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; spix++; tmp_val2 = dpix_val; spix_val = pixdata.apixels[spix]; if (spix_val <= 31) dpix_val = colors_for_drawing.acolors[spix_val]; else dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; spix++; tmp_val3 = dpix_val; spix_val = pixdata.apixels[spix]; if (spix_val <= 31) dpix_val = colors_for_drawing.acolors[spix_val]; else dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; tmp_val = merge_2pixel16 (tmp_val, tmp_val2); tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); dpix_val = merge_2pixel16 (tmp_val, tmp_val2); spix++; } out_val = dpix_val; spix_val = pixdata.apixels[spix]; if (spix_val <= 31) dpix_val = colors_for_drawing.acolors[spix_val]; else dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; { uae_u32 tmp_val, tmp_val2, tmp_val3; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix]; if (spix_val <= 31) dpix_val = colors_for_drawing.acolors[spix_val]; else dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; spix++; tmp_val2 = dpix_val; spix_val = pixdata.apixels[spix]; if (spix_val <= 31) dpix_val = colors_for_drawing.acolors[spix_val]; else dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; spix++; tmp_val3 = dpix_val; spix_val = pixdata.apixels[spix]; if (spix_val <= 31) dpix_val = colors_for_drawing.acolors[spix_val]; else dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; tmp_val = merge_2pixel16 (tmp_val, tmp_val2); tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); dpix_val = merge_2pixel16 (tmp_val, tmp_val2); spix++; } out_val = (out_val & 0xFFFF) | (dpix_val << 16); *((uae_u32 *)&buf[dpix]) = out_val; dpix += 2; } if (rem) { uae_u32 spix_val; uae_u32 dpix_val; spix_val = pixdata.apixels[spix]; if (spix_val <= 31) dpix_val = colors_for_drawing.acolors[spix_val]; else dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; { uae_u32 tmp_val, tmp_val2, tmp_val3; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix]; if (spix_val <= 31) dpix_val = colors_for_drawing.acolors[spix_val]; else dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; spix++; tmp_val2 = dpix_val; spix_val = pixdata.apixels[spix]; if (spix_val <= 31) dpix_val = colors_for_drawing.acolors[spix_val]; else dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; spix++; tmp_val3 = dpix_val; spix_val = pixdata.apixels[spix]; if (spix_val <= 31) dpix_val = colors_for_drawing.acolors[spix_val]; else dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; tmp_val = merge_2pixel16 (tmp_val, tmp_val2); tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); dpix_val = merge_2pixel16 (tmp_val, tmp_val2); spix++; } buf[dpix++] = dpix_val; } } else { int rem; if (((long)&buf[dpix]) & 2) { uae_u32 spix_val; uae_u32 dpix_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[spix_val]; { uae_u32 tmp_val, tmp_val2, tmp_val3; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[spix_val]; spix++; tmp_val2 = dpix_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[spix_val]; spix++; tmp_val3 = dpix_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[spix_val]; tmp_val = merge_2pixel16 (tmp_val, tmp_val2); tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); dpix_val = merge_2pixel16 (tmp_val, tmp_val2); spix++; } buf[dpix++] = dpix_val; } if (dpix >= dpix_end) return spix; rem = (((long)&buf[dpix_end]) & 2); if (rem) dpix_end--; while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[spix_val]; { uae_u32 tmp_val, tmp_val2, tmp_val3; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[spix_val]; spix++; tmp_val2 = dpix_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[spix_val]; spix++; tmp_val3 = dpix_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[spix_val]; tmp_val = merge_2pixel16 (tmp_val, tmp_val2); tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); dpix_val = merge_2pixel16 (tmp_val, tmp_val2); spix++; } out_val = dpix_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[spix_val]; { uae_u32 tmp_val, tmp_val2, tmp_val3; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[spix_val]; spix++; tmp_val2 = dpix_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[spix_val]; spix++; tmp_val3 = dpix_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[spix_val]; tmp_val = merge_2pixel16 (tmp_val, tmp_val2); tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); dpix_val = merge_2pixel16 (tmp_val, tmp_val2); spix++; } out_val = (out_val & 0xFFFF) | (dpix_val << 16); *((uae_u32 *)&buf[dpix]) = out_val; dpix += 2; } if (rem) { uae_u32 spix_val; uae_u32 dpix_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[spix_val]; { uae_u32 tmp_val, tmp_val2, tmp_val3; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[spix_val]; spix++; tmp_val2 = dpix_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[spix_val]; spix++; tmp_val3 = dpix_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[spix_val]; tmp_val = merge_2pixel16 (tmp_val, tmp_val2); tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); dpix_val = merge_2pixel16 (tmp_val, tmp_val2); spix++; } buf[dpix++] = dpix_val; } } return spix; } static int NOINLINE linetoscr_16_spr (int spix, int dpix, int dpix_end) { uae_u16 *buf = (uae_u16 *) xlinebuffer; uae_u8 sprcol; if (dp_for_drawing->ham_seen) { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; dpix_val = xcolors[ham_linebuf[spix]]; sprpix_val = dpix_val; spix++; out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix, 0, sprpix_val, 0); if (sprcol) { uae_u32 spcol = colors_for_drawing.acolors[sprcol]; out_val = spcol; } } buf[dpix++] = out_val; } } else if (bpldualpf) { int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; dpix_val = colors_for_drawing.acolors[lookup[spix_val]]; spix++; out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix, 1, sprpix_val, 0); if (sprcol) { uae_u32 spcol = colors_for_drawing.acolors[sprcol]; out_val = spcol; } } buf[dpix++] = out_val; } } else if (bplehb) { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; if (spix_val <= 31) dpix_val = colors_for_drawing.acolors[spix_val]; else dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; spix++; out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix, 0, sprpix_val, 0); if (sprcol) { uae_u32 spcol = colors_for_drawing.acolors[sprcol]; out_val = spcol; } } buf[dpix++] = out_val; } } else { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; dpix_val = colors_for_drawing.acolors[spix_val]; spix++; out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix, 0, sprpix_val, 0); if (sprcol) { uae_u32 spcol = colors_for_drawing.acolors[sprcol]; out_val = spcol; } } buf[dpix++] = out_val; } } return spix; } static int NOINLINE linetoscr_16_stretch1_spr (int spix, int dpix, int dpix_end) { uae_u16 *buf = (uae_u16 *) xlinebuffer; uae_u8 sprcol; if (dp_for_drawing->ham_seen) { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; dpix_val = xcolors[ham_linebuf[spix]]; sprpix_val = dpix_val; spix++; out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix, 0, sprpix_val, 0); if (sprcol) { uae_u32 spcol = colors_for_drawing.acolors[sprcol]; out_val = spcol; } } buf[dpix++] = out_val; buf[dpix++] = out_val; } } else if (bpldualpf) { int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; dpix_val = colors_for_drawing.acolors[lookup[spix_val]]; spix++; out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix, 1, sprpix_val, 0); if (sprcol) { uae_u32 spcol = colors_for_drawing.acolors[sprcol]; out_val = spcol; } } buf[dpix++] = out_val; buf[dpix++] = out_val; } } else if (bplehb) { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; if (spix_val <= 31) dpix_val = colors_for_drawing.acolors[spix_val]; else dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; spix++; out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix, 0, sprpix_val, 0); if (sprcol) { uae_u32 spcol = colors_for_drawing.acolors[sprcol]; out_val = spcol; } } buf[dpix++] = out_val; buf[dpix++] = out_val; } } else { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; dpix_val = colors_for_drawing.acolors[spix_val]; spix++; out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix, 0, sprpix_val, 0); if (sprcol) { uae_u32 spcol = colors_for_drawing.acolors[sprcol]; out_val = spcol; } } buf[dpix++] = out_val; buf[dpix++] = out_val; } } return spix; } static int NOINLINE linetoscr_16_stretch2_spr (int spix, int dpix, int dpix_end) { uae_u16 *buf = (uae_u16 *) xlinebuffer; uae_u8 sprcol; if (dp_for_drawing->ham_seen) { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; dpix_val = xcolors[ham_linebuf[spix]]; sprpix_val = dpix_val; spix++; out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix, 0, sprpix_val, 0); if (sprcol) { uae_u32 spcol = colors_for_drawing.acolors[sprcol]; out_val = spcol; } } buf[dpix++] = out_val; buf[dpix++] = out_val; buf[dpix++] = out_val; buf[dpix++] = out_val; } } else if (bpldualpf) { int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; dpix_val = colors_for_drawing.acolors[lookup[spix_val]]; spix++; out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix, 1, sprpix_val, 0); if (sprcol) { uae_u32 spcol = colors_for_drawing.acolors[sprcol]; out_val = spcol; } } buf[dpix++] = out_val; buf[dpix++] = out_val; buf[dpix++] = out_val; buf[dpix++] = out_val; } } else if (bplehb) { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; if (spix_val <= 31) dpix_val = colors_for_drawing.acolors[spix_val]; else dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; spix++; out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix, 0, sprpix_val, 0); if (sprcol) { uae_u32 spcol = colors_for_drawing.acolors[sprcol]; out_val = spcol; } } buf[dpix++] = out_val; buf[dpix++] = out_val; buf[dpix++] = out_val; buf[dpix++] = out_val; } } else { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; dpix_val = colors_for_drawing.acolors[spix_val]; spix++; out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix, 0, sprpix_val, 0); if (sprcol) { uae_u32 spcol = colors_for_drawing.acolors[sprcol]; out_val = spcol; } } buf[dpix++] = out_val; buf[dpix++] = out_val; buf[dpix++] = out_val; buf[dpix++] = out_val; } } return spix; } static int NOINLINE linetoscr_16_shrink1_spr (int spix, int dpix, int dpix_end) { uae_u16 *buf = (uae_u16 *) xlinebuffer; uae_u8 sprcol; if (dp_for_drawing->ham_seen) { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; dpix_val = xcolors[ham_linebuf[spix]]; sprpix_val = dpix_val; spix += 2; out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix, 0, sprpix_val, 0); if (sprcol) { uae_u32 spcol = colors_for_drawing.acolors[sprcol]; out_val = spcol; } } buf[dpix++] = out_val; } } else if (bpldualpf) { int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; dpix_val = colors_for_drawing.acolors[lookup[spix_val]]; spix += 2; out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix, 1, sprpix_val, 0); if (sprcol) { uae_u32 spcol = colors_for_drawing.acolors[sprcol]; out_val = spcol; } } buf[dpix++] = out_val; } } else if (bplehb) { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; if (spix_val <= 31) dpix_val = colors_for_drawing.acolors[spix_val]; else dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; spix += 2; out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix, 0, sprpix_val, 0); if (sprcol) { uae_u32 spcol = colors_for_drawing.acolors[sprcol]; out_val = spcol; } } buf[dpix++] = out_val; } } else { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; dpix_val = colors_for_drawing.acolors[spix_val]; spix += 2; out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix, 0, sprpix_val, 0); if (sprcol) { uae_u32 spcol = colors_for_drawing.acolors[sprcol]; out_val = spcol; } } buf[dpix++] = out_val; } } return spix; } static int NOINLINE linetoscr_16_shrink1f_spr (int spix, int dpix, int dpix_end) { uae_u16 *buf = (uae_u16 *) xlinebuffer; uae_u8 sprcol; if (dp_for_drawing->ham_seen) { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; dpix_val = xcolors[ham_linebuf[spix]]; sprpix_val = dpix_val; { uae_u32 tmp_val; spix++; tmp_val = dpix_val; dpix_val = xcolors[ham_linebuf[spix]]; sprpix_val = dpix_val; dpix_val = merge_2pixel16 (dpix_val, tmp_val); spix++; } out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix, 0, sprpix_val, 0); if (sprcol) { uae_u32 spcol = colors_for_drawing.acolors[sprcol]; out_val = spcol; } } buf[dpix++] = out_val; } } else if (bpldualpf) { int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; dpix_val = colors_for_drawing.acolors[lookup[spix_val]]; { uae_u32 tmp_val; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; dpix_val = colors_for_drawing.acolors[lookup[spix_val]]; dpix_val = merge_2pixel16 (dpix_val, tmp_val); spix++; } out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix, 1, sprpix_val, 0); if (sprcol) { uae_u32 spcol = colors_for_drawing.acolors[sprcol]; out_val = spcol; } } buf[dpix++] = out_val; } } else if (bplehb) { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; if (spix_val <= 31) dpix_val = colors_for_drawing.acolors[spix_val]; else dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; { uae_u32 tmp_val; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; if (spix_val <= 31) dpix_val = colors_for_drawing.acolors[spix_val]; else dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; dpix_val = merge_2pixel16 (dpix_val, tmp_val); spix++; } out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix, 0, sprpix_val, 0); if (sprcol) { uae_u32 spcol = colors_for_drawing.acolors[sprcol]; out_val = spcol; } } buf[dpix++] = out_val; } } else { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; dpix_val = colors_for_drawing.acolors[spix_val]; { uae_u32 tmp_val; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; dpix_val = colors_for_drawing.acolors[spix_val]; dpix_val = merge_2pixel16 (dpix_val, tmp_val); spix++; } out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix, 0, sprpix_val, 0); if (sprcol) { uae_u32 spcol = colors_for_drawing.acolors[sprcol]; out_val = spcol; } } buf[dpix++] = out_val; } } return spix; } static int NOINLINE linetoscr_16_shrink2_spr (int spix, int dpix, int dpix_end) { uae_u16 *buf = (uae_u16 *) xlinebuffer; uae_u8 sprcol; if (dp_for_drawing->ham_seen) { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; dpix_val = xcolors[ham_linebuf[spix]]; sprpix_val = dpix_val; spix += 4; out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix, 0, sprpix_val, 0); if (sprcol) { uae_u32 spcol = colors_for_drawing.acolors[sprcol]; out_val = spcol; } } buf[dpix++] = out_val; } } else if (bpldualpf) { int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; dpix_val = colors_for_drawing.acolors[lookup[spix_val]]; spix += 4; out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix, 1, sprpix_val, 0); if (sprcol) { uae_u32 spcol = colors_for_drawing.acolors[sprcol]; out_val = spcol; } } buf[dpix++] = out_val; } } else if (bplehb) { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; if (spix_val <= 31) dpix_val = colors_for_drawing.acolors[spix_val]; else dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; spix += 4; out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix, 0, sprpix_val, 0); if (sprcol) { uae_u32 spcol = colors_for_drawing.acolors[sprcol]; out_val = spcol; } } buf[dpix++] = out_val; } } else { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; dpix_val = colors_for_drawing.acolors[spix_val]; spix += 4; out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix, 0, sprpix_val, 0); if (sprcol) { uae_u32 spcol = colors_for_drawing.acolors[sprcol]; out_val = spcol; } } buf[dpix++] = out_val; } } return spix; } static int NOINLINE linetoscr_16_shrink2f_spr (int spix, int dpix, int dpix_end) { uae_u16 *buf = (uae_u16 *) xlinebuffer; uae_u8 sprcol; if (dp_for_drawing->ham_seen) { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; dpix_val = xcolors[ham_linebuf[spix]]; sprpix_val = dpix_val; { uae_u32 tmp_val, tmp_val2, tmp_val3; spix++; tmp_val = dpix_val; dpix_val = xcolors[ham_linebuf[spix]]; sprpix_val = dpix_val; spix++; tmp_val2 = dpix_val; dpix_val = xcolors[ham_linebuf[spix]]; sprpix_val = dpix_val; spix++; tmp_val3 = dpix_val; dpix_val = xcolors[ham_linebuf[spix]]; sprpix_val = dpix_val; tmp_val = merge_2pixel16 (tmp_val, tmp_val2); tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); dpix_val = merge_2pixel16 (tmp_val, tmp_val2); spix++; } out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix, 0, sprpix_val, 0); if (sprcol) { uae_u32 spcol = colors_for_drawing.acolors[sprcol]; out_val = spcol; } } buf[dpix++] = out_val; } } else if (bpldualpf) { int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; dpix_val = colors_for_drawing.acolors[lookup[spix_val]]; { uae_u32 tmp_val, tmp_val2, tmp_val3; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; dpix_val = colors_for_drawing.acolors[lookup[spix_val]]; spix++; tmp_val2 = dpix_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; dpix_val = colors_for_drawing.acolors[lookup[spix_val]]; spix++; tmp_val3 = dpix_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; dpix_val = colors_for_drawing.acolors[lookup[spix_val]]; tmp_val = merge_2pixel16 (tmp_val, tmp_val2); tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); dpix_val = merge_2pixel16 (tmp_val, tmp_val2); spix++; } out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix, 1, sprpix_val, 0); if (sprcol) { uae_u32 spcol = colors_for_drawing.acolors[sprcol]; out_val = spcol; } } buf[dpix++] = out_val; } } else if (bplehb) { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; if (spix_val <= 31) dpix_val = colors_for_drawing.acolors[spix_val]; else dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; { uae_u32 tmp_val, tmp_val2, tmp_val3; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; if (spix_val <= 31) dpix_val = colors_for_drawing.acolors[spix_val]; else dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; spix++; tmp_val2 = dpix_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; if (spix_val <= 31) dpix_val = colors_for_drawing.acolors[spix_val]; else dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; spix++; tmp_val3 = dpix_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; if (spix_val <= 31) dpix_val = colors_for_drawing.acolors[spix_val]; else dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; tmp_val = merge_2pixel16 (tmp_val, tmp_val2); tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); dpix_val = merge_2pixel16 (tmp_val, tmp_val2); spix++; } out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix, 0, sprpix_val, 0); if (sprcol) { uae_u32 spcol = colors_for_drawing.acolors[sprcol]; out_val = spcol; } } buf[dpix++] = out_val; } } else { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; dpix_val = colors_for_drawing.acolors[spix_val]; { uae_u32 tmp_val, tmp_val2, tmp_val3; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; dpix_val = colors_for_drawing.acolors[spix_val]; spix++; tmp_val2 = dpix_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; dpix_val = colors_for_drawing.acolors[spix_val]; spix++; tmp_val3 = dpix_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; dpix_val = colors_for_drawing.acolors[spix_val]; tmp_val = merge_2pixel16 (tmp_val, tmp_val2); tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); dpix_val = merge_2pixel16 (tmp_val, tmp_val2); spix++; } out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix, 0, sprpix_val, 0); if (sprcol) { uae_u32 spcol = colors_for_drawing.acolors[sprcol]; out_val = spcol; } } buf[dpix++] = out_val; } } return spix; } #ifdef AGA static int NOINLINE linetoscr_16_aga (int spix, int dpix, int dpix_end) { uae_u16 *buf = (uae_u16 *) xlinebuffer; uae_u8 xor_val = bplxor; if (dp_for_drawing->ham_seen) { int rem; if (((long)&buf[dpix]) & 2) { uae_u32 spix_val; uae_u32 dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = CONVERT_RGB (ham_linebuf[spix]); spix++; buf[dpix++] = dpix_val; } if (dpix >= dpix_end) return spix; rem = (((long)&buf[dpix_end]) & 2); if (rem) dpix_end--; while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = CONVERT_RGB (ham_linebuf[spix]); spix++; out_val = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = CONVERT_RGB (ham_linebuf[spix]); spix++; out_val = (out_val & 0xFFFF) | (dpix_val << 16); *((uae_u32 *)&buf[dpix]) = out_val; dpix += 2; } if (rem) { uae_u32 spix_val; uae_u32 dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = CONVERT_RGB (ham_linebuf[spix]); spix++; buf[dpix++] = dpix_val; } } else if (bpldualpf) { int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; int rem; if (((long)&buf[dpix]) & 2) { uae_u32 spix_val; uae_u32 dpix_val; spix_val = pixdata.apixels[spix]; { uae_u8 val = lookup[spix_val]; if (lookup_no[spix_val]) val += dblpfofs[bpldualpf2of]; val ^= xor_val; dpix_val = colors_for_drawing.acolors[val]; } spix++; buf[dpix++] = dpix_val; } if (dpix >= dpix_end) return spix; rem = (((long)&buf[dpix_end]) & 2); if (rem) dpix_end--; while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; { uae_u8 val = lookup[spix_val]; if (lookup_no[spix_val]) val += dblpfofs[bpldualpf2of]; val ^= xor_val; dpix_val = colors_for_drawing.acolors[val]; } spix++; out_val = dpix_val; spix_val = pixdata.apixels[spix]; { uae_u8 val = lookup[spix_val]; if (lookup_no[spix_val]) val += dblpfofs[bpldualpf2of]; val ^= xor_val; dpix_val = colors_for_drawing.acolors[val]; } spix++; out_val = (out_val & 0xFFFF) | (dpix_val << 16); *((uae_u32 *)&buf[dpix]) = out_val; dpix += 2; } if (rem) { uae_u32 spix_val; uae_u32 dpix_val; spix_val = pixdata.apixels[spix]; { uae_u8 val = lookup[spix_val]; if (lookup_no[spix_val]) val += dblpfofs[bpldualpf2of]; val ^= xor_val; dpix_val = colors_for_drawing.acolors[val]; } spix++; buf[dpix++] = dpix_val; } } else if (bplehb) { int rem; if (((long)&buf[dpix]) & 2) { uae_u32 spix_val; uae_u32 dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; if (spix_val >= 32 && spix_val < 64) { unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F; dpix_val = CONVERT_RGB (c); } else dpix_val = colors_for_drawing.acolors[spix_val]; spix++; buf[dpix++] = dpix_val; } if (dpix >= dpix_end) return spix; rem = (((long)&buf[dpix_end]) & 2); if (rem) dpix_end--; while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix] ^ xor_val; if (spix_val >= 32 && spix_val < 64) { unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F; dpix_val = CONVERT_RGB (c); } else dpix_val = colors_for_drawing.acolors[spix_val]; spix++; out_val = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; if (spix_val >= 32 && spix_val < 64) { unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F; dpix_val = CONVERT_RGB (c); } else dpix_val = colors_for_drawing.acolors[spix_val]; spix++; out_val = (out_val & 0xFFFF) | (dpix_val << 16); *((uae_u32 *)&buf[dpix]) = out_val; dpix += 2; } if (rem) { uae_u32 spix_val; uae_u32 dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; if (spix_val >= 32 && spix_val < 64) { unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F; dpix_val = CONVERT_RGB (c); } else dpix_val = colors_for_drawing.acolors[spix_val]; spix++; buf[dpix++] = dpix_val; } } else { int rem; if (((long)&buf[dpix]) & 2) { uae_u32 spix_val; uae_u32 dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = colors_for_drawing.acolors[spix_val]; spix++; buf[dpix++] = dpix_val; } if (dpix >= dpix_end) return spix; rem = (((long)&buf[dpix_end]) & 2); if (rem) dpix_end--; while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = colors_for_drawing.acolors[spix_val]; spix++; out_val = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = colors_for_drawing.acolors[spix_val]; spix++; out_val = (out_val & 0xFFFF) | (dpix_val << 16); *((uae_u32 *)&buf[dpix]) = out_val; dpix += 2; } if (rem) { uae_u32 spix_val; uae_u32 dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = colors_for_drawing.acolors[spix_val]; spix++; buf[dpix++] = dpix_val; } } return spix; } #endif #ifdef AGA static int NOINLINE linetoscr_16_stretch1_aga (int spix, int dpix, int dpix_end) { uae_u16 *buf = (uae_u16 *) xlinebuffer; uae_u8 xor_val = bplxor; if (dp_for_drawing->ham_seen) { while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = CONVERT_RGB (ham_linebuf[spix]); spix++; out_val = dpix_val; *((uae_u32 *)&buf[dpix]) = out_val; dpix += 2; } } else if (bpldualpf) { int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; { uae_u8 val = lookup[spix_val]; if (lookup_no[spix_val]) val += dblpfofs[bpldualpf2of]; val ^= xor_val; dpix_val = colors_for_drawing.acolors[val]; } spix++; out_val = dpix_val; *((uae_u32 *)&buf[dpix]) = out_val; dpix += 2; } } else if (bplehb) { while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix] ^ xor_val; if (spix_val >= 32 && spix_val < 64) { unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F; dpix_val = CONVERT_RGB (c); } else dpix_val = colors_for_drawing.acolors[spix_val]; spix++; out_val = dpix_val; *((uae_u32 *)&buf[dpix]) = out_val; dpix += 2; } } else { while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = colors_for_drawing.acolors[spix_val]; spix++; out_val = dpix_val; *((uae_u32 *)&buf[dpix]) = out_val; dpix += 2; } } return spix; } #endif #ifdef AGA static int NOINLINE linetoscr_16_stretch2_aga (int spix, int dpix, int dpix_end) { uae_u16 *buf = (uae_u16 *) xlinebuffer; uae_u8 xor_val = bplxor; if (dp_for_drawing->ham_seen) { while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = CONVERT_RGB (ham_linebuf[spix]); spix++; out_val = dpix_val; *((uae_u32 *)&buf[dpix]) = out_val; dpix += 2; *((uae_u32 *)&buf[dpix]) = out_val; dpix += 2; } } else if (bpldualpf) { int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; { uae_u8 val = lookup[spix_val]; if (lookup_no[spix_val]) val += dblpfofs[bpldualpf2of]; val ^= xor_val; dpix_val = colors_for_drawing.acolors[val]; } spix++; out_val = dpix_val; *((uae_u32 *)&buf[dpix]) = out_val; dpix += 2; *((uae_u32 *)&buf[dpix]) = out_val; dpix += 2; } } else if (bplehb) { while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix] ^ xor_val; if (spix_val >= 32 && spix_val < 64) { unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F; dpix_val = CONVERT_RGB (c); } else dpix_val = colors_for_drawing.acolors[spix_val]; spix++; out_val = dpix_val; *((uae_u32 *)&buf[dpix]) = out_val; dpix += 2; *((uae_u32 *)&buf[dpix]) = out_val; dpix += 2; } } else { while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = colors_for_drawing.acolors[spix_val]; spix++; out_val = dpix_val; *((uae_u32 *)&buf[dpix]) = out_val; dpix += 2; *((uae_u32 *)&buf[dpix]) = out_val; dpix += 2; } } return spix; } #endif #ifdef AGA static int NOINLINE linetoscr_16_shrink1_aga (int spix, int dpix, int dpix_end) { uae_u16 *buf = (uae_u16 *) xlinebuffer; uae_u8 xor_val = bplxor; if (dp_for_drawing->ham_seen) { int rem; if (((long)&buf[dpix]) & 2) { uae_u32 spix_val; uae_u32 dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = CONVERT_RGB (ham_linebuf[spix]); spix += 2; buf[dpix++] = dpix_val; } if (dpix >= dpix_end) return spix; rem = (((long)&buf[dpix_end]) & 2); if (rem) dpix_end--; while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = CONVERT_RGB (ham_linebuf[spix]); spix += 2; out_val = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = CONVERT_RGB (ham_linebuf[spix]); spix += 2; out_val = (out_val & 0xFFFF) | (dpix_val << 16); *((uae_u32 *)&buf[dpix]) = out_val; dpix += 2; } if (rem) { uae_u32 spix_val; uae_u32 dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = CONVERT_RGB (ham_linebuf[spix]); spix += 2; buf[dpix++] = dpix_val; } } else if (bpldualpf) { int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; int rem; if (((long)&buf[dpix]) & 2) { uae_u32 spix_val; uae_u32 dpix_val; spix_val = pixdata.apixels[spix]; { uae_u8 val = lookup[spix_val]; if (lookup_no[spix_val]) val += dblpfofs[bpldualpf2of]; val ^= xor_val; dpix_val = colors_for_drawing.acolors[val]; } spix += 2; buf[dpix++] = dpix_val; } if (dpix >= dpix_end) return spix; rem = (((long)&buf[dpix_end]) & 2); if (rem) dpix_end--; while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; { uae_u8 val = lookup[spix_val]; if (lookup_no[spix_val]) val += dblpfofs[bpldualpf2of]; val ^= xor_val; dpix_val = colors_for_drawing.acolors[val]; } spix += 2; out_val = dpix_val; spix_val = pixdata.apixels[spix]; { uae_u8 val = lookup[spix_val]; if (lookup_no[spix_val]) val += dblpfofs[bpldualpf2of]; val ^= xor_val; dpix_val = colors_for_drawing.acolors[val]; } spix += 2; out_val = (out_val & 0xFFFF) | (dpix_val << 16); *((uae_u32 *)&buf[dpix]) = out_val; dpix += 2; } if (rem) { uae_u32 spix_val; uae_u32 dpix_val; spix_val = pixdata.apixels[spix]; { uae_u8 val = lookup[spix_val]; if (lookup_no[spix_val]) val += dblpfofs[bpldualpf2of]; val ^= xor_val; dpix_val = colors_for_drawing.acolors[val]; } spix += 2; buf[dpix++] = dpix_val; } } else if (bplehb) { int rem; if (((long)&buf[dpix]) & 2) { uae_u32 spix_val; uae_u32 dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; if (spix_val >= 32 && spix_val < 64) { unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F; dpix_val = CONVERT_RGB (c); } else dpix_val = colors_for_drawing.acolors[spix_val]; spix += 2; buf[dpix++] = dpix_val; } if (dpix >= dpix_end) return spix; rem = (((long)&buf[dpix_end]) & 2); if (rem) dpix_end--; while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix] ^ xor_val; if (spix_val >= 32 && spix_val < 64) { unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F; dpix_val = CONVERT_RGB (c); } else dpix_val = colors_for_drawing.acolors[spix_val]; spix += 2; out_val = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; if (spix_val >= 32 && spix_val < 64) { unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F; dpix_val = CONVERT_RGB (c); } else dpix_val = colors_for_drawing.acolors[spix_val]; spix += 2; out_val = (out_val & 0xFFFF) | (dpix_val << 16); *((uae_u32 *)&buf[dpix]) = out_val; dpix += 2; } if (rem) { uae_u32 spix_val; uae_u32 dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; if (spix_val >= 32 && spix_val < 64) { unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F; dpix_val = CONVERT_RGB (c); } else dpix_val = colors_for_drawing.acolors[spix_val]; spix += 2; buf[dpix++] = dpix_val; } } else { int rem; if (((long)&buf[dpix]) & 2) { uae_u32 spix_val; uae_u32 dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = colors_for_drawing.acolors[spix_val]; spix += 2; buf[dpix++] = dpix_val; } if (dpix >= dpix_end) return spix; rem = (((long)&buf[dpix_end]) & 2); if (rem) dpix_end--; while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = colors_for_drawing.acolors[spix_val]; spix += 2; out_val = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = colors_for_drawing.acolors[spix_val]; spix += 2; out_val = (out_val & 0xFFFF) | (dpix_val << 16); *((uae_u32 *)&buf[dpix]) = out_val; dpix += 2; } if (rem) { uae_u32 spix_val; uae_u32 dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = colors_for_drawing.acolors[spix_val]; spix += 2; buf[dpix++] = dpix_val; } } return spix; } #endif #ifdef AGA static int NOINLINE linetoscr_16_shrink1f_aga (int spix, int dpix, int dpix_end) { uae_u16 *buf = (uae_u16 *) xlinebuffer; uae_u8 xor_val = bplxor; if (dp_for_drawing->ham_seen) { int rem; if (((long)&buf[dpix]) & 2) { uae_u32 spix_val; uae_u32 dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = CONVERT_RGB (ham_linebuf[spix]); { uae_u32 tmp_val; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = CONVERT_RGB (ham_linebuf[spix]); dpix_val = merge_2pixel16 (dpix_val, tmp_val); spix++; } buf[dpix++] = dpix_val; } if (dpix >= dpix_end) return spix; rem = (((long)&buf[dpix_end]) & 2); if (rem) dpix_end--; while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = CONVERT_RGB (ham_linebuf[spix]); { uae_u32 tmp_val; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = CONVERT_RGB (ham_linebuf[spix]); dpix_val = merge_2pixel16 (dpix_val, tmp_val); spix++; } out_val = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = CONVERT_RGB (ham_linebuf[spix]); { uae_u32 tmp_val; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = CONVERT_RGB (ham_linebuf[spix]); dpix_val = merge_2pixel16 (dpix_val, tmp_val); spix++; } out_val = (out_val & 0xFFFF) | (dpix_val << 16); *((uae_u32 *)&buf[dpix]) = out_val; dpix += 2; } if (rem) { uae_u32 spix_val; uae_u32 dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = CONVERT_RGB (ham_linebuf[spix]); { uae_u32 tmp_val; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = CONVERT_RGB (ham_linebuf[spix]); dpix_val = merge_2pixel16 (dpix_val, tmp_val); spix++; } buf[dpix++] = dpix_val; } } else if (bpldualpf) { int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; int rem; if (((long)&buf[dpix]) & 2) { uae_u32 spix_val; uae_u32 dpix_val; spix_val = pixdata.apixels[spix]; { uae_u8 val = lookup[spix_val]; if (lookup_no[spix_val]) val += dblpfofs[bpldualpf2of]; val ^= xor_val; dpix_val = colors_for_drawing.acolors[val]; } { uae_u32 tmp_val; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix]; { uae_u8 val = lookup[spix_val]; if (lookup_no[spix_val]) val += dblpfofs[bpldualpf2of]; val ^= xor_val; dpix_val = colors_for_drawing.acolors[val]; } dpix_val = merge_2pixel16 (dpix_val, tmp_val); spix++; } buf[dpix++] = dpix_val; } if (dpix >= dpix_end) return spix; rem = (((long)&buf[dpix_end]) & 2); if (rem) dpix_end--; while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; { uae_u8 val = lookup[spix_val]; if (lookup_no[spix_val]) val += dblpfofs[bpldualpf2of]; val ^= xor_val; dpix_val = colors_for_drawing.acolors[val]; } { uae_u32 tmp_val; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix]; { uae_u8 val = lookup[spix_val]; if (lookup_no[spix_val]) val += dblpfofs[bpldualpf2of]; val ^= xor_val; dpix_val = colors_for_drawing.acolors[val]; } dpix_val = merge_2pixel16 (dpix_val, tmp_val); spix++; } out_val = dpix_val; spix_val = pixdata.apixels[spix]; { uae_u8 val = lookup[spix_val]; if (lookup_no[spix_val]) val += dblpfofs[bpldualpf2of]; val ^= xor_val; dpix_val = colors_for_drawing.acolors[val]; } { uae_u32 tmp_val; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix]; { uae_u8 val = lookup[spix_val]; if (lookup_no[spix_val]) val += dblpfofs[bpldualpf2of]; val ^= xor_val; dpix_val = colors_for_drawing.acolors[val]; } dpix_val = merge_2pixel16 (dpix_val, tmp_val); spix++; } out_val = (out_val & 0xFFFF) | (dpix_val << 16); *((uae_u32 *)&buf[dpix]) = out_val; dpix += 2; } if (rem) { uae_u32 spix_val; uae_u32 dpix_val; spix_val = pixdata.apixels[spix]; { uae_u8 val = lookup[spix_val]; if (lookup_no[spix_val]) val += dblpfofs[bpldualpf2of]; val ^= xor_val; dpix_val = colors_for_drawing.acolors[val]; } { uae_u32 tmp_val; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix]; { uae_u8 val = lookup[spix_val]; if (lookup_no[spix_val]) val += dblpfofs[bpldualpf2of]; val ^= xor_val; dpix_val = colors_for_drawing.acolors[val]; } dpix_val = merge_2pixel16 (dpix_val, tmp_val); spix++; } buf[dpix++] = dpix_val; } } else if (bplehb) { int rem; if (((long)&buf[dpix]) & 2) { uae_u32 spix_val; uae_u32 dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; if (spix_val >= 32 && spix_val < 64) { unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F; dpix_val = CONVERT_RGB (c); } else dpix_val = colors_for_drawing.acolors[spix_val]; { uae_u32 tmp_val; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; if (spix_val >= 32 && spix_val < 64) { unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F; dpix_val = CONVERT_RGB (c); } else dpix_val = colors_for_drawing.acolors[spix_val]; dpix_val = merge_2pixel16 (dpix_val, tmp_val); spix++; } buf[dpix++] = dpix_val; } if (dpix >= dpix_end) return spix; rem = (((long)&buf[dpix_end]) & 2); if (rem) dpix_end--; while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix] ^ xor_val; if (spix_val >= 32 && spix_val < 64) { unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F; dpix_val = CONVERT_RGB (c); } else dpix_val = colors_for_drawing.acolors[spix_val]; { uae_u32 tmp_val; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; if (spix_val >= 32 && spix_val < 64) { unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F; dpix_val = CONVERT_RGB (c); } else dpix_val = colors_for_drawing.acolors[spix_val]; dpix_val = merge_2pixel16 (dpix_val, tmp_val); spix++; } out_val = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; if (spix_val >= 32 && spix_val < 64) { unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F; dpix_val = CONVERT_RGB (c); } else dpix_val = colors_for_drawing.acolors[spix_val]; { uae_u32 tmp_val; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; if (spix_val >= 32 && spix_val < 64) { unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F; dpix_val = CONVERT_RGB (c); } else dpix_val = colors_for_drawing.acolors[spix_val]; dpix_val = merge_2pixel16 (dpix_val, tmp_val); spix++; } out_val = (out_val & 0xFFFF) | (dpix_val << 16); *((uae_u32 *)&buf[dpix]) = out_val; dpix += 2; } if (rem) { uae_u32 spix_val; uae_u32 dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; if (spix_val >= 32 && spix_val < 64) { unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F; dpix_val = CONVERT_RGB (c); } else dpix_val = colors_for_drawing.acolors[spix_val]; { uae_u32 tmp_val; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; if (spix_val >= 32 && spix_val < 64) { unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F; dpix_val = CONVERT_RGB (c); } else dpix_val = colors_for_drawing.acolors[spix_val]; dpix_val = merge_2pixel16 (dpix_val, tmp_val); spix++; } buf[dpix++] = dpix_val; } } else { int rem; if (((long)&buf[dpix]) & 2) { uae_u32 spix_val; uae_u32 dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = colors_for_drawing.acolors[spix_val]; { uae_u32 tmp_val; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = colors_for_drawing.acolors[spix_val]; dpix_val = merge_2pixel16 (dpix_val, tmp_val); spix++; } buf[dpix++] = dpix_val; } if (dpix >= dpix_end) return spix; rem = (((long)&buf[dpix_end]) & 2); if (rem) dpix_end--; while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = colors_for_drawing.acolors[spix_val]; { uae_u32 tmp_val; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = colors_for_drawing.acolors[spix_val]; dpix_val = merge_2pixel16 (dpix_val, tmp_val); spix++; } out_val = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = colors_for_drawing.acolors[spix_val]; { uae_u32 tmp_val; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = colors_for_drawing.acolors[spix_val]; dpix_val = merge_2pixel16 (dpix_val, tmp_val); spix++; } out_val = (out_val & 0xFFFF) | (dpix_val << 16); *((uae_u32 *)&buf[dpix]) = out_val; dpix += 2; } if (rem) { uae_u32 spix_val; uae_u32 dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = colors_for_drawing.acolors[spix_val]; { uae_u32 tmp_val; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = colors_for_drawing.acolors[spix_val]; dpix_val = merge_2pixel16 (dpix_val, tmp_val); spix++; } buf[dpix++] = dpix_val; } } return spix; } #endif #ifdef AGA static int NOINLINE linetoscr_16_shrink2_aga (int spix, int dpix, int dpix_end) { uae_u16 *buf = (uae_u16 *) xlinebuffer; uae_u8 xor_val = bplxor; if (dp_for_drawing->ham_seen) { int rem; if (((long)&buf[dpix]) & 2) { uae_u32 spix_val; uae_u32 dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = CONVERT_RGB (ham_linebuf[spix]); spix += 4; buf[dpix++] = dpix_val; } if (dpix >= dpix_end) return spix; rem = (((long)&buf[dpix_end]) & 2); if (rem) dpix_end--; while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = CONVERT_RGB (ham_linebuf[spix]); spix += 4; out_val = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = CONVERT_RGB (ham_linebuf[spix]); spix += 4; out_val = (out_val & 0xFFFF) | (dpix_val << 16); *((uae_u32 *)&buf[dpix]) = out_val; dpix += 2; } if (rem) { uae_u32 spix_val; uae_u32 dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = CONVERT_RGB (ham_linebuf[spix]); spix += 4; buf[dpix++] = dpix_val; } } else if (bpldualpf) { int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; int rem; if (((long)&buf[dpix]) & 2) { uae_u32 spix_val; uae_u32 dpix_val; spix_val = pixdata.apixels[spix]; { uae_u8 val = lookup[spix_val]; if (lookup_no[spix_val]) val += dblpfofs[bpldualpf2of]; val ^= xor_val; dpix_val = colors_for_drawing.acolors[val]; } spix += 4; buf[dpix++] = dpix_val; } if (dpix >= dpix_end) return spix; rem = (((long)&buf[dpix_end]) & 2); if (rem) dpix_end--; while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; { uae_u8 val = lookup[spix_val]; if (lookup_no[spix_val]) val += dblpfofs[bpldualpf2of]; val ^= xor_val; dpix_val = colors_for_drawing.acolors[val]; } spix += 4; out_val = dpix_val; spix_val = pixdata.apixels[spix]; { uae_u8 val = lookup[spix_val]; if (lookup_no[spix_val]) val += dblpfofs[bpldualpf2of]; val ^= xor_val; dpix_val = colors_for_drawing.acolors[val]; } spix += 4; out_val = (out_val & 0xFFFF) | (dpix_val << 16); *((uae_u32 *)&buf[dpix]) = out_val; dpix += 2; } if (rem) { uae_u32 spix_val; uae_u32 dpix_val; spix_val = pixdata.apixels[spix]; { uae_u8 val = lookup[spix_val]; if (lookup_no[spix_val]) val += dblpfofs[bpldualpf2of]; val ^= xor_val; dpix_val = colors_for_drawing.acolors[val]; } spix += 4; buf[dpix++] = dpix_val; } } else if (bplehb) { int rem; if (((long)&buf[dpix]) & 2) { uae_u32 spix_val; uae_u32 dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; if (spix_val >= 32 && spix_val < 64) { unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F; dpix_val = CONVERT_RGB (c); } else dpix_val = colors_for_drawing.acolors[spix_val]; spix += 4; buf[dpix++] = dpix_val; } if (dpix >= dpix_end) return spix; rem = (((long)&buf[dpix_end]) & 2); if (rem) dpix_end--; while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix] ^ xor_val; if (spix_val >= 32 && spix_val < 64) { unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F; dpix_val = CONVERT_RGB (c); } else dpix_val = colors_for_drawing.acolors[spix_val]; spix += 4; out_val = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; if (spix_val >= 32 && spix_val < 64) { unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F; dpix_val = CONVERT_RGB (c); } else dpix_val = colors_for_drawing.acolors[spix_val]; spix += 4; out_val = (out_val & 0xFFFF) | (dpix_val << 16); *((uae_u32 *)&buf[dpix]) = out_val; dpix += 2; } if (rem) { uae_u32 spix_val; uae_u32 dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; if (spix_val >= 32 && spix_val < 64) { unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F; dpix_val = CONVERT_RGB (c); } else dpix_val = colors_for_drawing.acolors[spix_val]; spix += 4; buf[dpix++] = dpix_val; } } else { int rem; if (((long)&buf[dpix]) & 2) { uae_u32 spix_val; uae_u32 dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = colors_for_drawing.acolors[spix_val]; spix += 4; buf[dpix++] = dpix_val; } if (dpix >= dpix_end) return spix; rem = (((long)&buf[dpix_end]) & 2); if (rem) dpix_end--; while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = colors_for_drawing.acolors[spix_val]; spix += 4; out_val = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = colors_for_drawing.acolors[spix_val]; spix += 4; out_val = (out_val & 0xFFFF) | (dpix_val << 16); *((uae_u32 *)&buf[dpix]) = out_val; dpix += 2; } if (rem) { uae_u32 spix_val; uae_u32 dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = colors_for_drawing.acolors[spix_val]; spix += 4; buf[dpix++] = dpix_val; } } return spix; } #endif #ifdef AGA static int NOINLINE linetoscr_16_shrink2f_aga (int spix, int dpix, int dpix_end) { uae_u16 *buf = (uae_u16 *) xlinebuffer; uae_u8 xor_val = bplxor; if (dp_for_drawing->ham_seen) { int rem; if (((long)&buf[dpix]) & 2) { uae_u32 spix_val; uae_u32 dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = CONVERT_RGB (ham_linebuf[spix]); { uae_u32 tmp_val, tmp_val2, tmp_val3; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = CONVERT_RGB (ham_linebuf[spix]); spix++; tmp_val2 = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = CONVERT_RGB (ham_linebuf[spix]); spix++; tmp_val3 = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = CONVERT_RGB (ham_linebuf[spix]); tmp_val = merge_2pixel16 (tmp_val, tmp_val2); tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); dpix_val = merge_2pixel16 (tmp_val, tmp_val2); spix++; } buf[dpix++] = dpix_val; } if (dpix >= dpix_end) return spix; rem = (((long)&buf[dpix_end]) & 2); if (rem) dpix_end--; while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = CONVERT_RGB (ham_linebuf[spix]); { uae_u32 tmp_val, tmp_val2, tmp_val3; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = CONVERT_RGB (ham_linebuf[spix]); spix++; tmp_val2 = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = CONVERT_RGB (ham_linebuf[spix]); spix++; tmp_val3 = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = CONVERT_RGB (ham_linebuf[spix]); tmp_val = merge_2pixel16 (tmp_val, tmp_val2); tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); dpix_val = merge_2pixel16 (tmp_val, tmp_val2); spix++; } out_val = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = CONVERT_RGB (ham_linebuf[spix]); { uae_u32 tmp_val, tmp_val2, tmp_val3; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = CONVERT_RGB (ham_linebuf[spix]); spix++; tmp_val2 = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = CONVERT_RGB (ham_linebuf[spix]); spix++; tmp_val3 = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = CONVERT_RGB (ham_linebuf[spix]); tmp_val = merge_2pixel16 (tmp_val, tmp_val2); tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); dpix_val = merge_2pixel16 (tmp_val, tmp_val2); spix++; } out_val = (out_val & 0xFFFF) | (dpix_val << 16); *((uae_u32 *)&buf[dpix]) = out_val; dpix += 2; } if (rem) { uae_u32 spix_val; uae_u32 dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = CONVERT_RGB (ham_linebuf[spix]); { uae_u32 tmp_val, tmp_val2, tmp_val3; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = CONVERT_RGB (ham_linebuf[spix]); spix++; tmp_val2 = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = CONVERT_RGB (ham_linebuf[spix]); spix++; tmp_val3 = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = CONVERT_RGB (ham_linebuf[spix]); tmp_val = merge_2pixel16 (tmp_val, tmp_val2); tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); dpix_val = merge_2pixel16 (tmp_val, tmp_val2); spix++; } buf[dpix++] = dpix_val; } } else if (bpldualpf) { int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; int rem; if (((long)&buf[dpix]) & 2) { uae_u32 spix_val; uae_u32 dpix_val; spix_val = pixdata.apixels[spix]; { uae_u8 val = lookup[spix_val]; if (lookup_no[spix_val]) val += dblpfofs[bpldualpf2of]; val ^= xor_val; dpix_val = colors_for_drawing.acolors[val]; } { uae_u32 tmp_val, tmp_val2, tmp_val3; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix]; { uae_u8 val = lookup[spix_val]; if (lookup_no[spix_val]) val += dblpfofs[bpldualpf2of]; val ^= xor_val; dpix_val = colors_for_drawing.acolors[val]; } spix++; tmp_val2 = dpix_val; spix_val = pixdata.apixels[spix]; { uae_u8 val = lookup[spix_val]; if (lookup_no[spix_val]) val += dblpfofs[bpldualpf2of]; val ^= xor_val; dpix_val = colors_for_drawing.acolors[val]; } spix++; tmp_val3 = dpix_val; spix_val = pixdata.apixels[spix]; { uae_u8 val = lookup[spix_val]; if (lookup_no[spix_val]) val += dblpfofs[bpldualpf2of]; val ^= xor_val; dpix_val = colors_for_drawing.acolors[val]; } tmp_val = merge_2pixel16 (tmp_val, tmp_val2); tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); dpix_val = merge_2pixel16 (tmp_val, tmp_val2); spix++; } buf[dpix++] = dpix_val; } if (dpix >= dpix_end) return spix; rem = (((long)&buf[dpix_end]) & 2); if (rem) dpix_end--; while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; { uae_u8 val = lookup[spix_val]; if (lookup_no[spix_val]) val += dblpfofs[bpldualpf2of]; val ^= xor_val; dpix_val = colors_for_drawing.acolors[val]; } { uae_u32 tmp_val, tmp_val2, tmp_val3; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix]; { uae_u8 val = lookup[spix_val]; if (lookup_no[spix_val]) val += dblpfofs[bpldualpf2of]; val ^= xor_val; dpix_val = colors_for_drawing.acolors[val]; } spix++; tmp_val2 = dpix_val; spix_val = pixdata.apixels[spix]; { uae_u8 val = lookup[spix_val]; if (lookup_no[spix_val]) val += dblpfofs[bpldualpf2of]; val ^= xor_val; dpix_val = colors_for_drawing.acolors[val]; } spix++; tmp_val3 = dpix_val; spix_val = pixdata.apixels[spix]; { uae_u8 val = lookup[spix_val]; if (lookup_no[spix_val]) val += dblpfofs[bpldualpf2of]; val ^= xor_val; dpix_val = colors_for_drawing.acolors[val]; } tmp_val = merge_2pixel16 (tmp_val, tmp_val2); tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); dpix_val = merge_2pixel16 (tmp_val, tmp_val2); spix++; } out_val = dpix_val; spix_val = pixdata.apixels[spix]; { uae_u8 val = lookup[spix_val]; if (lookup_no[spix_val]) val += dblpfofs[bpldualpf2of]; val ^= xor_val; dpix_val = colors_for_drawing.acolors[val]; } { uae_u32 tmp_val, tmp_val2, tmp_val3; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix]; { uae_u8 val = lookup[spix_val]; if (lookup_no[spix_val]) val += dblpfofs[bpldualpf2of]; val ^= xor_val; dpix_val = colors_for_drawing.acolors[val]; } spix++; tmp_val2 = dpix_val; spix_val = pixdata.apixels[spix]; { uae_u8 val = lookup[spix_val]; if (lookup_no[spix_val]) val += dblpfofs[bpldualpf2of]; val ^= xor_val; dpix_val = colors_for_drawing.acolors[val]; } spix++; tmp_val3 = dpix_val; spix_val = pixdata.apixels[spix]; { uae_u8 val = lookup[spix_val]; if (lookup_no[spix_val]) val += dblpfofs[bpldualpf2of]; val ^= xor_val; dpix_val = colors_for_drawing.acolors[val]; } tmp_val = merge_2pixel16 (tmp_val, tmp_val2); tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); dpix_val = merge_2pixel16 (tmp_val, tmp_val2); spix++; } out_val = (out_val & 0xFFFF) | (dpix_val << 16); *((uae_u32 *)&buf[dpix]) = out_val; dpix += 2; } if (rem) { uae_u32 spix_val; uae_u32 dpix_val; spix_val = pixdata.apixels[spix]; { uae_u8 val = lookup[spix_val]; if (lookup_no[spix_val]) val += dblpfofs[bpldualpf2of]; val ^= xor_val; dpix_val = colors_for_drawing.acolors[val]; } { uae_u32 tmp_val, tmp_val2, tmp_val3; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix]; { uae_u8 val = lookup[spix_val]; if (lookup_no[spix_val]) val += dblpfofs[bpldualpf2of]; val ^= xor_val; dpix_val = colors_for_drawing.acolors[val]; } spix++; tmp_val2 = dpix_val; spix_val = pixdata.apixels[spix]; { uae_u8 val = lookup[spix_val]; if (lookup_no[spix_val]) val += dblpfofs[bpldualpf2of]; val ^= xor_val; dpix_val = colors_for_drawing.acolors[val]; } spix++; tmp_val3 = dpix_val; spix_val = pixdata.apixels[spix]; { uae_u8 val = lookup[spix_val]; if (lookup_no[spix_val]) val += dblpfofs[bpldualpf2of]; val ^= xor_val; dpix_val = colors_for_drawing.acolors[val]; } tmp_val = merge_2pixel16 (tmp_val, tmp_val2); tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); dpix_val = merge_2pixel16 (tmp_val, tmp_val2); spix++; } buf[dpix++] = dpix_val; } } else if (bplehb) { int rem; if (((long)&buf[dpix]) & 2) { uae_u32 spix_val; uae_u32 dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; if (spix_val >= 32 && spix_val < 64) { unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F; dpix_val = CONVERT_RGB (c); } else dpix_val = colors_for_drawing.acolors[spix_val]; { uae_u32 tmp_val, tmp_val2, tmp_val3; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; if (spix_val >= 32 && spix_val < 64) { unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F; dpix_val = CONVERT_RGB (c); } else dpix_val = colors_for_drawing.acolors[spix_val]; spix++; tmp_val2 = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; if (spix_val >= 32 && spix_val < 64) { unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F; dpix_val = CONVERT_RGB (c); } else dpix_val = colors_for_drawing.acolors[spix_val]; spix++; tmp_val3 = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; if (spix_val >= 32 && spix_val < 64) { unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F; dpix_val = CONVERT_RGB (c); } else dpix_val = colors_for_drawing.acolors[spix_val]; tmp_val = merge_2pixel16 (tmp_val, tmp_val2); tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); dpix_val = merge_2pixel16 (tmp_val, tmp_val2); spix++; } buf[dpix++] = dpix_val; } if (dpix >= dpix_end) return spix; rem = (((long)&buf[dpix_end]) & 2); if (rem) dpix_end--; while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix] ^ xor_val; if (spix_val >= 32 && spix_val < 64) { unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F; dpix_val = CONVERT_RGB (c); } else dpix_val = colors_for_drawing.acolors[spix_val]; { uae_u32 tmp_val, tmp_val2, tmp_val3; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; if (spix_val >= 32 && spix_val < 64) { unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F; dpix_val = CONVERT_RGB (c); } else dpix_val = colors_for_drawing.acolors[spix_val]; spix++; tmp_val2 = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; if (spix_val >= 32 && spix_val < 64) { unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F; dpix_val = CONVERT_RGB (c); } else dpix_val = colors_for_drawing.acolors[spix_val]; spix++; tmp_val3 = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; if (spix_val >= 32 && spix_val < 64) { unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F; dpix_val = CONVERT_RGB (c); } else dpix_val = colors_for_drawing.acolors[spix_val]; tmp_val = merge_2pixel16 (tmp_val, tmp_val2); tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); dpix_val = merge_2pixel16 (tmp_val, tmp_val2); spix++; } out_val = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; if (spix_val >= 32 && spix_val < 64) { unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F; dpix_val = CONVERT_RGB (c); } else dpix_val = colors_for_drawing.acolors[spix_val]; { uae_u32 tmp_val, tmp_val2, tmp_val3; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; if (spix_val >= 32 && spix_val < 64) { unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F; dpix_val = CONVERT_RGB (c); } else dpix_val = colors_for_drawing.acolors[spix_val]; spix++; tmp_val2 = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; if (spix_val >= 32 && spix_val < 64) { unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F; dpix_val = CONVERT_RGB (c); } else dpix_val = colors_for_drawing.acolors[spix_val]; spix++; tmp_val3 = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; if (spix_val >= 32 && spix_val < 64) { unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F; dpix_val = CONVERT_RGB (c); } else dpix_val = colors_for_drawing.acolors[spix_val]; tmp_val = merge_2pixel16 (tmp_val, tmp_val2); tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); dpix_val = merge_2pixel16 (tmp_val, tmp_val2); spix++; } out_val = (out_val & 0xFFFF) | (dpix_val << 16); *((uae_u32 *)&buf[dpix]) = out_val; dpix += 2; } if (rem) { uae_u32 spix_val; uae_u32 dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; if (spix_val >= 32 && spix_val < 64) { unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F; dpix_val = CONVERT_RGB (c); } else dpix_val = colors_for_drawing.acolors[spix_val]; { uae_u32 tmp_val, tmp_val2, tmp_val3; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; if (spix_val >= 32 && spix_val < 64) { unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F; dpix_val = CONVERT_RGB (c); } else dpix_val = colors_for_drawing.acolors[spix_val]; spix++; tmp_val2 = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; if (spix_val >= 32 && spix_val < 64) { unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F; dpix_val = CONVERT_RGB (c); } else dpix_val = colors_for_drawing.acolors[spix_val]; spix++; tmp_val3 = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; if (spix_val >= 32 && spix_val < 64) { unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F; dpix_val = CONVERT_RGB (c); } else dpix_val = colors_for_drawing.acolors[spix_val]; tmp_val = merge_2pixel16 (tmp_val, tmp_val2); tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); dpix_val = merge_2pixel16 (tmp_val, tmp_val2); spix++; } buf[dpix++] = dpix_val; } } else { int rem; if (((long)&buf[dpix]) & 2) { uae_u32 spix_val; uae_u32 dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = colors_for_drawing.acolors[spix_val]; { uae_u32 tmp_val, tmp_val2, tmp_val3; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = colors_for_drawing.acolors[spix_val]; spix++; tmp_val2 = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = colors_for_drawing.acolors[spix_val]; spix++; tmp_val3 = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = colors_for_drawing.acolors[spix_val]; tmp_val = merge_2pixel16 (tmp_val, tmp_val2); tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); dpix_val = merge_2pixel16 (tmp_val, tmp_val2); spix++; } buf[dpix++] = dpix_val; } if (dpix >= dpix_end) return spix; rem = (((long)&buf[dpix_end]) & 2); if (rem) dpix_end--; while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = colors_for_drawing.acolors[spix_val]; { uae_u32 tmp_val, tmp_val2, tmp_val3; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = colors_for_drawing.acolors[spix_val]; spix++; tmp_val2 = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = colors_for_drawing.acolors[spix_val]; spix++; tmp_val3 = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = colors_for_drawing.acolors[spix_val]; tmp_val = merge_2pixel16 (tmp_val, tmp_val2); tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); dpix_val = merge_2pixel16 (tmp_val, tmp_val2); spix++; } out_val = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = colors_for_drawing.acolors[spix_val]; { uae_u32 tmp_val, tmp_val2, tmp_val3; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = colors_for_drawing.acolors[spix_val]; spix++; tmp_val2 = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = colors_for_drawing.acolors[spix_val]; spix++; tmp_val3 = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = colors_for_drawing.acolors[spix_val]; tmp_val = merge_2pixel16 (tmp_val, tmp_val2); tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); dpix_val = merge_2pixel16 (tmp_val, tmp_val2); spix++; } out_val = (out_val & 0xFFFF) | (dpix_val << 16); *((uae_u32 *)&buf[dpix]) = out_val; dpix += 2; } if (rem) { uae_u32 spix_val; uae_u32 dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = colors_for_drawing.acolors[spix_val]; { uae_u32 tmp_val, tmp_val2, tmp_val3; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = colors_for_drawing.acolors[spix_val]; spix++; tmp_val2 = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = colors_for_drawing.acolors[spix_val]; spix++; tmp_val3 = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = colors_for_drawing.acolors[spix_val]; tmp_val = merge_2pixel16 (tmp_val, tmp_val2); tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); dpix_val = merge_2pixel16 (tmp_val, tmp_val2); spix++; } buf[dpix++] = dpix_val; } } return spix; } #endif #ifdef AGA static int NOINLINE linetoscr_16_aga_spr (int spix, int dpix, int dpix_end) { uae_u16 *buf = (uae_u16 *) xlinebuffer; uae_u8 sprcol; uae_u8 xor_val = bplxor; if (dp_for_drawing->ham_seen) { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; sprpix_val = pixdata.apixels[spix]; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = CONVERT_RGB (ham_linebuf[spix]); sprpix_val = dpix_val; spix++; out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); if (sprcol) out_val = colors_for_drawing.acolors[sprcol]; } buf[dpix++] = out_val; } } else if (bpldualpf) { int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; { uae_u8 val = lookup[spix_val]; if (lookup_no[spix_val]) val += dblpfofs[bpldualpf2of]; val ^= xor_val; dpix_val = colors_for_drawing.acolors[val]; } spix++; out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix + 0, 1, sprpix_val, 1); if (sprcol) out_val = colors_for_drawing.acolors[sprcol]; } buf[dpix++] = out_val; } } else if (bplehb) { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; sprpix_val = pixdata.apixels[spix]; spix_val = pixdata.apixels[spix] ^ xor_val; if (spix_val >= 32 && spix_val < 64) { unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F; dpix_val = CONVERT_RGB (c); } else dpix_val = colors_for_drawing.acolors[spix_val]; spix++; out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); if (sprcol) out_val = colors_for_drawing.acolors[sprcol]; } buf[dpix++] = out_val; } } else { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; sprpix_val = pixdata.apixels[spix]; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = colors_for_drawing.acolors[spix_val]; spix++; out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); if (sprcol) out_val = colors_for_drawing.acolors[sprcol]; } buf[dpix++] = out_val; } } return spix; } #endif #ifdef AGA static int NOINLINE linetoscr_16_stretch1_aga_spr (int spix, int dpix, int dpix_end) { uae_u16 *buf = (uae_u16 *) xlinebuffer; uae_u8 sprcol; uae_u8 xor_val = bplxor; if (dp_for_drawing->ham_seen) { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; sprpix_val = pixdata.apixels[spix]; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = CONVERT_RGB (ham_linebuf[spix]); sprpix_val = dpix_val; spix++; out_val = dpix_val; { uae_u32 out_val1 = out_val; uae_u32 out_val2 = out_val; if (spritepixels[dpix + 0].data) { sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); if (sprcol) out_val1 = colors_for_drawing.acolors[sprcol]; } if (spritepixels[dpix + 1].data) { sprcol = render_sprites (dpix + 1, 0, sprpix_val, 1); if (sprcol) out_val2 = colors_for_drawing.acolors[sprcol]; } buf[dpix++] = out_val1; buf[dpix++] = out_val2; } } } else if (bpldualpf) { int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; { uae_u8 val = lookup[spix_val]; if (lookup_no[spix_val]) val += dblpfofs[bpldualpf2of]; val ^= xor_val; dpix_val = colors_for_drawing.acolors[val]; } spix++; out_val = dpix_val; { uae_u32 out_val1 = out_val; uae_u32 out_val2 = out_val; if (spritepixels[dpix + 0].data) { sprcol = render_sprites (dpix + 0, 1, sprpix_val, 1); if (sprcol) out_val1 = colors_for_drawing.acolors[sprcol]; } if (spritepixels[dpix + 1].data) { sprcol = render_sprites (dpix + 1, 1, sprpix_val, 1); if (sprcol) out_val2 = colors_for_drawing.acolors[sprcol]; } buf[dpix++] = out_val1; buf[dpix++] = out_val2; } } } else if (bplehb) { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; sprpix_val = pixdata.apixels[spix]; spix_val = pixdata.apixels[spix] ^ xor_val; if (spix_val >= 32 && spix_val < 64) { unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F; dpix_val = CONVERT_RGB (c); } else dpix_val = colors_for_drawing.acolors[spix_val]; spix++; out_val = dpix_val; { uae_u32 out_val1 = out_val; uae_u32 out_val2 = out_val; if (spritepixels[dpix + 0].data) { sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); if (sprcol) out_val1 = colors_for_drawing.acolors[sprcol]; } if (spritepixels[dpix + 1].data) { sprcol = render_sprites (dpix + 1, 0, sprpix_val, 1); if (sprcol) out_val2 = colors_for_drawing.acolors[sprcol]; } buf[dpix++] = out_val1; buf[dpix++] = out_val2; } } } else { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; sprpix_val = pixdata.apixels[spix]; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = colors_for_drawing.acolors[spix_val]; spix++; out_val = dpix_val; { uae_u32 out_val1 = out_val; uae_u32 out_val2 = out_val; if (spritepixels[dpix + 0].data) { sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); if (sprcol) out_val1 = colors_for_drawing.acolors[sprcol]; } if (spritepixels[dpix + 1].data) { sprcol = render_sprites (dpix + 1, 0, sprpix_val, 1); if (sprcol) out_val2 = colors_for_drawing.acolors[sprcol]; } buf[dpix++] = out_val1; buf[dpix++] = out_val2; } } } return spix; } #endif #ifdef AGA static int NOINLINE linetoscr_16_stretch2_aga_spr (int spix, int dpix, int dpix_end) { uae_u16 *buf = (uae_u16 *) xlinebuffer; uae_u8 sprcol; uae_u8 xor_val = bplxor; if (dp_for_drawing->ham_seen) { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; sprpix_val = pixdata.apixels[spix]; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = CONVERT_RGB (ham_linebuf[spix]); sprpix_val = dpix_val; spix++; out_val = dpix_val; { uae_u32 out_val1 = out_val; uae_u32 out_val2 = out_val; uae_u32 out_val3 = out_val; uae_u32 out_val4 = out_val; if (spritepixels[dpix + 0].data) { sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); if (sprcol) out_val1 = colors_for_drawing.acolors[sprcol]; } if (spritepixels[dpix + 1].data) { sprcol = render_sprites (dpix + 1, 0, sprpix_val, 1); if (sprcol) out_val2 = colors_for_drawing.acolors[sprcol]; } if (spritepixels[dpix + 2].data) { sprcol = render_sprites (dpix + 2, 0, sprpix_val, 1); if (sprcol) out_val3 = colors_for_drawing.acolors[sprcol]; } if (spritepixels[dpix + 3].data) { sprcol = render_sprites (dpix + 3, 0, sprpix_val, 1); if (sprcol) out_val4 = colors_for_drawing.acolors[sprcol]; } buf[dpix++] = out_val1; buf[dpix++] = out_val2; buf[dpix++] = out_val3; buf[dpix++] = out_val4; } } } else if (bpldualpf) { int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; { uae_u8 val = lookup[spix_val]; if (lookup_no[spix_val]) val += dblpfofs[bpldualpf2of]; val ^= xor_val; dpix_val = colors_for_drawing.acolors[val]; } spix++; out_val = dpix_val; { uae_u32 out_val1 = out_val; uae_u32 out_val2 = out_val; uae_u32 out_val3 = out_val; uae_u32 out_val4 = out_val; if (spritepixels[dpix + 0].data) { sprcol = render_sprites (dpix + 0, 1, sprpix_val, 1); if (sprcol) out_val1 = colors_for_drawing.acolors[sprcol]; } if (spritepixels[dpix + 1].data) { sprcol = render_sprites (dpix + 1, 1, sprpix_val, 1); if (sprcol) out_val2 = colors_for_drawing.acolors[sprcol]; } if (spritepixels[dpix + 2].data) { sprcol = render_sprites (dpix + 2, 1, sprpix_val, 1); if (sprcol) out_val3 = colors_for_drawing.acolors[sprcol]; } if (spritepixels[dpix + 3].data) { sprcol = render_sprites (dpix + 3, 1, sprpix_val, 1); if (sprcol) out_val4 = colors_for_drawing.acolors[sprcol]; } buf[dpix++] = out_val1; buf[dpix++] = out_val2; buf[dpix++] = out_val3; buf[dpix++] = out_val4; } } } else if (bplehb) { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; sprpix_val = pixdata.apixels[spix]; spix_val = pixdata.apixels[spix] ^ xor_val; if (spix_val >= 32 && spix_val < 64) { unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F; dpix_val = CONVERT_RGB (c); } else dpix_val = colors_for_drawing.acolors[spix_val]; spix++; out_val = dpix_val; { uae_u32 out_val1 = out_val; uae_u32 out_val2 = out_val; uae_u32 out_val3 = out_val; uae_u32 out_val4 = out_val; if (spritepixels[dpix + 0].data) { sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); if (sprcol) out_val1 = colors_for_drawing.acolors[sprcol]; } if (spritepixels[dpix + 1].data) { sprcol = render_sprites (dpix + 1, 0, sprpix_val, 1); if (sprcol) out_val2 = colors_for_drawing.acolors[sprcol]; } if (spritepixels[dpix + 2].data) { sprcol = render_sprites (dpix + 2, 0, sprpix_val, 1); if (sprcol) out_val3 = colors_for_drawing.acolors[sprcol]; } if (spritepixels[dpix + 3].data) { sprcol = render_sprites (dpix + 3, 0, sprpix_val, 1); if (sprcol) out_val4 = colors_for_drawing.acolors[sprcol]; } buf[dpix++] = out_val1; buf[dpix++] = out_val2; buf[dpix++] = out_val3; buf[dpix++] = out_val4; } } } else { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; sprpix_val = pixdata.apixels[spix]; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = colors_for_drawing.acolors[spix_val]; spix++; out_val = dpix_val; { uae_u32 out_val1 = out_val; uae_u32 out_val2 = out_val; uae_u32 out_val3 = out_val; uae_u32 out_val4 = out_val; if (spritepixels[dpix + 0].data) { sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); if (sprcol) out_val1 = colors_for_drawing.acolors[sprcol]; } if (spritepixels[dpix + 1].data) { sprcol = render_sprites (dpix + 1, 0, sprpix_val, 1); if (sprcol) out_val2 = colors_for_drawing.acolors[sprcol]; } if (spritepixels[dpix + 2].data) { sprcol = render_sprites (dpix + 2, 0, sprpix_val, 1); if (sprcol) out_val3 = colors_for_drawing.acolors[sprcol]; } if (spritepixels[dpix + 3].data) { sprcol = render_sprites (dpix + 3, 0, sprpix_val, 1); if (sprcol) out_val4 = colors_for_drawing.acolors[sprcol]; } buf[dpix++] = out_val1; buf[dpix++] = out_val2; buf[dpix++] = out_val3; buf[dpix++] = out_val4; } } } return spix; } #endif #ifdef AGA static int NOINLINE linetoscr_16_shrink1_aga_spr (int spix, int dpix, int dpix_end) { uae_u16 *buf = (uae_u16 *) xlinebuffer; uae_u8 sprcol; uae_u8 xor_val = bplxor; if (dp_for_drawing->ham_seen) { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; sprpix_val = pixdata.apixels[spix]; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = CONVERT_RGB (ham_linebuf[spix]); sprpix_val = dpix_val; spix += 2; out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); if (sprcol) out_val = colors_for_drawing.acolors[sprcol]; } buf[dpix++] = out_val; } } else if (bpldualpf) { int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; { uae_u8 val = lookup[spix_val]; if (lookup_no[spix_val]) val += dblpfofs[bpldualpf2of]; val ^= xor_val; dpix_val = colors_for_drawing.acolors[val]; } spix += 2; out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix + 0, 1, sprpix_val, 1); if (sprcol) out_val = colors_for_drawing.acolors[sprcol]; } buf[dpix++] = out_val; } } else if (bplehb) { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; sprpix_val = pixdata.apixels[spix]; spix_val = pixdata.apixels[spix] ^ xor_val; if (spix_val >= 32 && spix_val < 64) { unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F; dpix_val = CONVERT_RGB (c); } else dpix_val = colors_for_drawing.acolors[spix_val]; spix += 2; out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); if (sprcol) out_val = colors_for_drawing.acolors[sprcol]; } buf[dpix++] = out_val; } } else { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; sprpix_val = pixdata.apixels[spix]; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = colors_for_drawing.acolors[spix_val]; spix += 2; out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); if (sprcol) out_val = colors_for_drawing.acolors[sprcol]; } buf[dpix++] = out_val; } } return spix; } #endif #ifdef AGA static int NOINLINE linetoscr_16_shrink1f_aga_spr (int spix, int dpix, int dpix_end) { uae_u16 *buf = (uae_u16 *) xlinebuffer; uae_u8 sprcol; uae_u8 xor_val = bplxor; if (dp_for_drawing->ham_seen) { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; sprpix_val = pixdata.apixels[spix]; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = CONVERT_RGB (ham_linebuf[spix]); sprpix_val = dpix_val; { uae_u32 tmp_val; spix++; tmp_val = dpix_val; sprpix_val = pixdata.apixels[spix]; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = CONVERT_RGB (ham_linebuf[spix]); sprpix_val = dpix_val; dpix_val = merge_2pixel16 (dpix_val, tmp_val); spix++; } out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); if (sprcol) out_val = colors_for_drawing.acolors[sprcol]; } buf[dpix++] = out_val; } } else if (bpldualpf) { int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; { uae_u8 val = lookup[spix_val]; if (lookup_no[spix_val]) val += dblpfofs[bpldualpf2of]; val ^= xor_val; dpix_val = colors_for_drawing.acolors[val]; } { uae_u32 tmp_val; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; { uae_u8 val = lookup[spix_val]; if (lookup_no[spix_val]) val += dblpfofs[bpldualpf2of]; val ^= xor_val; dpix_val = colors_for_drawing.acolors[val]; } dpix_val = merge_2pixel16 (dpix_val, tmp_val); spix++; } out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix + 0, 1, sprpix_val, 1); if (sprcol) out_val = colors_for_drawing.acolors[sprcol]; } buf[dpix++] = out_val; } } else if (bplehb) { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; sprpix_val = pixdata.apixels[spix]; spix_val = pixdata.apixels[spix] ^ xor_val; if (spix_val >= 32 && spix_val < 64) { unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F; dpix_val = CONVERT_RGB (c); } else dpix_val = colors_for_drawing.acolors[spix_val]; { uae_u32 tmp_val; spix++; tmp_val = dpix_val; sprpix_val = pixdata.apixels[spix]; spix_val = pixdata.apixels[spix] ^ xor_val; if (spix_val >= 32 && spix_val < 64) { unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F; dpix_val = CONVERT_RGB (c); } else dpix_val = colors_for_drawing.acolors[spix_val]; dpix_val = merge_2pixel16 (dpix_val, tmp_val); spix++; } out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); if (sprcol) out_val = colors_for_drawing.acolors[sprcol]; } buf[dpix++] = out_val; } } else { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; sprpix_val = pixdata.apixels[spix]; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = colors_for_drawing.acolors[spix_val]; { uae_u32 tmp_val; spix++; tmp_val = dpix_val; sprpix_val = pixdata.apixels[spix]; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = colors_for_drawing.acolors[spix_val]; dpix_val = merge_2pixel16 (dpix_val, tmp_val); spix++; } out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); if (sprcol) out_val = colors_for_drawing.acolors[sprcol]; } buf[dpix++] = out_val; } } return spix; } #endif #ifdef AGA static int NOINLINE linetoscr_16_shrink2_aga_spr (int spix, int dpix, int dpix_end) { uae_u16 *buf = (uae_u16 *) xlinebuffer; uae_u8 sprcol; uae_u8 xor_val = bplxor; if (dp_for_drawing->ham_seen) { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; sprpix_val = pixdata.apixels[spix]; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = CONVERT_RGB (ham_linebuf[spix]); sprpix_val = dpix_val; spix += 4; out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); if (sprcol) out_val = colors_for_drawing.acolors[sprcol]; } buf[dpix++] = out_val; } } else if (bpldualpf) { int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; { uae_u8 val = lookup[spix_val]; if (lookup_no[spix_val]) val += dblpfofs[bpldualpf2of]; val ^= xor_val; dpix_val = colors_for_drawing.acolors[val]; } spix += 4; out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix + 0, 1, sprpix_val, 1); if (sprcol) out_val = colors_for_drawing.acolors[sprcol]; } buf[dpix++] = out_val; } } else if (bplehb) { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; sprpix_val = pixdata.apixels[spix]; spix_val = pixdata.apixels[spix] ^ xor_val; if (spix_val >= 32 && spix_val < 64) { unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F; dpix_val = CONVERT_RGB (c); } else dpix_val = colors_for_drawing.acolors[spix_val]; spix += 4; out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); if (sprcol) out_val = colors_for_drawing.acolors[sprcol]; } buf[dpix++] = out_val; } } else { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; sprpix_val = pixdata.apixels[spix]; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = colors_for_drawing.acolors[spix_val]; spix += 4; out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); if (sprcol) out_val = colors_for_drawing.acolors[sprcol]; } buf[dpix++] = out_val; } } return spix; } #endif #ifdef AGA static int NOINLINE linetoscr_16_shrink2f_aga_spr (int spix, int dpix, int dpix_end) { uae_u16 *buf = (uae_u16 *) xlinebuffer; uae_u8 sprcol; uae_u8 xor_val = bplxor; if (dp_for_drawing->ham_seen) { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; sprpix_val = pixdata.apixels[spix]; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = CONVERT_RGB (ham_linebuf[spix]); sprpix_val = dpix_val; { uae_u32 tmp_val, tmp_val2, tmp_val3; spix++; tmp_val = dpix_val; sprpix_val = pixdata.apixels[spix]; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = CONVERT_RGB (ham_linebuf[spix]); sprpix_val = dpix_val; spix++; tmp_val2 = dpix_val; sprpix_val = pixdata.apixels[spix]; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = CONVERT_RGB (ham_linebuf[spix]); sprpix_val = dpix_val; spix++; tmp_val3 = dpix_val; sprpix_val = pixdata.apixels[spix]; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = CONVERT_RGB (ham_linebuf[spix]); sprpix_val = dpix_val; tmp_val = merge_2pixel16 (tmp_val, tmp_val2); tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); dpix_val = merge_2pixel16 (tmp_val, tmp_val2); spix++; } out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); if (sprcol) out_val = colors_for_drawing.acolors[sprcol]; } buf[dpix++] = out_val; } } else if (bpldualpf) { int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; { uae_u8 val = lookup[spix_val]; if (lookup_no[spix_val]) val += dblpfofs[bpldualpf2of]; val ^= xor_val; dpix_val = colors_for_drawing.acolors[val]; } { uae_u32 tmp_val, tmp_val2, tmp_val3; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; { uae_u8 val = lookup[spix_val]; if (lookup_no[spix_val]) val += dblpfofs[bpldualpf2of]; val ^= xor_val; dpix_val = colors_for_drawing.acolors[val]; } spix++; tmp_val2 = dpix_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; { uae_u8 val = lookup[spix_val]; if (lookup_no[spix_val]) val += dblpfofs[bpldualpf2of]; val ^= xor_val; dpix_val = colors_for_drawing.acolors[val]; } spix++; tmp_val3 = dpix_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; { uae_u8 val = lookup[spix_val]; if (lookup_no[spix_val]) val += dblpfofs[bpldualpf2of]; val ^= xor_val; dpix_val = colors_for_drawing.acolors[val]; } tmp_val = merge_2pixel16 (tmp_val, tmp_val2); tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); dpix_val = merge_2pixel16 (tmp_val, tmp_val2); spix++; } out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix + 0, 1, sprpix_val, 1); if (sprcol) out_val = colors_for_drawing.acolors[sprcol]; } buf[dpix++] = out_val; } } else if (bplehb) { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; sprpix_val = pixdata.apixels[spix]; spix_val = pixdata.apixels[spix] ^ xor_val; if (spix_val >= 32 && spix_val < 64) { unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F; dpix_val = CONVERT_RGB (c); } else dpix_val = colors_for_drawing.acolors[spix_val]; { uae_u32 tmp_val, tmp_val2, tmp_val3; spix++; tmp_val = dpix_val; sprpix_val = pixdata.apixels[spix]; spix_val = pixdata.apixels[spix] ^ xor_val; if (spix_val >= 32 && spix_val < 64) { unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F; dpix_val = CONVERT_RGB (c); } else dpix_val = colors_for_drawing.acolors[spix_val]; spix++; tmp_val2 = dpix_val; sprpix_val = pixdata.apixels[spix]; spix_val = pixdata.apixels[spix] ^ xor_val; if (spix_val >= 32 && spix_val < 64) { unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F; dpix_val = CONVERT_RGB (c); } else dpix_val = colors_for_drawing.acolors[spix_val]; spix++; tmp_val3 = dpix_val; sprpix_val = pixdata.apixels[spix]; spix_val = pixdata.apixels[spix] ^ xor_val; if (spix_val >= 32 && spix_val < 64) { unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F; dpix_val = CONVERT_RGB (c); } else dpix_val = colors_for_drawing.acolors[spix_val]; tmp_val = merge_2pixel16 (tmp_val, tmp_val2); tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); dpix_val = merge_2pixel16 (tmp_val, tmp_val2); spix++; } out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); if (sprcol) out_val = colors_for_drawing.acolors[sprcol]; } buf[dpix++] = out_val; } } else { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; sprpix_val = pixdata.apixels[spix]; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = colors_for_drawing.acolors[spix_val]; { uae_u32 tmp_val, tmp_val2, tmp_val3; spix++; tmp_val = dpix_val; sprpix_val = pixdata.apixels[spix]; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = colors_for_drawing.acolors[spix_val]; spix++; tmp_val2 = dpix_val; sprpix_val = pixdata.apixels[spix]; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = colors_for_drawing.acolors[spix_val]; spix++; tmp_val3 = dpix_val; sprpix_val = pixdata.apixels[spix]; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = colors_for_drawing.acolors[spix_val]; tmp_val = merge_2pixel16 (tmp_val, tmp_val2); tmp_val2 = merge_2pixel16 (tmp_val3, dpix_val); dpix_val = merge_2pixel16 (tmp_val, tmp_val2); spix++; } out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); if (sprcol) out_val = colors_for_drawing.acolors[sprcol]; } buf[dpix++] = out_val; } } return spix; } #endif static int NOINLINE linetoscr_32 (int spix, int dpix, int dpix_end) { uae_u32 *buf = (uae_u32 *) xlinebuffer; if (dp_for_drawing->ham_seen) { while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; dpix_val = xcolors[ham_linebuf[spix]]; spix++; out_val = dpix_val; buf[dpix++] = out_val; } } else if (bpldualpf) { int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[lookup[spix_val]]; spix++; out_val = dpix_val; buf[dpix++] = out_val; } } else if (bplehb) { while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; if (spix_val <= 31) dpix_val = colors_for_drawing.acolors[spix_val]; else dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; spix++; out_val = dpix_val; buf[dpix++] = out_val; } } else { while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[spix_val]; spix++; out_val = dpix_val; buf[dpix++] = out_val; } } return spix; } static int NOINLINE linetoscr_32_stretch1 (int spix, int dpix, int dpix_end) { uae_u32 *buf = (uae_u32 *) xlinebuffer; if (dp_for_drawing->ham_seen) { while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; dpix_val = xcolors[ham_linebuf[spix]]; spix++; out_val = dpix_val; buf[dpix++] = out_val; buf[dpix++] = out_val; } } else if (bpldualpf) { int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[lookup[spix_val]]; spix++; out_val = dpix_val; buf[dpix++] = out_val; buf[dpix++] = out_val; } } else if (bplehb) { while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; if (spix_val <= 31) dpix_val = colors_for_drawing.acolors[spix_val]; else dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; spix++; out_val = dpix_val; buf[dpix++] = out_val; buf[dpix++] = out_val; } } else { while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[spix_val]; spix++; out_val = dpix_val; buf[dpix++] = out_val; buf[dpix++] = out_val; } } return spix; } static int NOINLINE linetoscr_32_stretch2 (int spix, int dpix, int dpix_end) { uae_u32 *buf = (uae_u32 *) xlinebuffer; if (dp_for_drawing->ham_seen) { while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; dpix_val = xcolors[ham_linebuf[spix]]; spix++; out_val = dpix_val; buf[dpix++] = out_val; buf[dpix++] = out_val; buf[dpix++] = out_val; buf[dpix++] = out_val; } } else if (bpldualpf) { int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[lookup[spix_val]]; spix++; out_val = dpix_val; buf[dpix++] = out_val; buf[dpix++] = out_val; buf[dpix++] = out_val; buf[dpix++] = out_val; } } else if (bplehb) { while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; if (spix_val <= 31) dpix_val = colors_for_drawing.acolors[spix_val]; else dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; spix++; out_val = dpix_val; buf[dpix++] = out_val; buf[dpix++] = out_val; buf[dpix++] = out_val; buf[dpix++] = out_val; } } else { while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[spix_val]; spix++; out_val = dpix_val; buf[dpix++] = out_val; buf[dpix++] = out_val; buf[dpix++] = out_val; buf[dpix++] = out_val; } } return spix; } static int NOINLINE linetoscr_32_shrink1 (int spix, int dpix, int dpix_end) { uae_u32 *buf = (uae_u32 *) xlinebuffer; if (dp_for_drawing->ham_seen) { while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; dpix_val = xcolors[ham_linebuf[spix]]; spix += 2; out_val = dpix_val; buf[dpix++] = out_val; } } else if (bpldualpf) { int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[lookup[spix_val]]; spix += 2; out_val = dpix_val; buf[dpix++] = out_val; } } else if (bplehb) { while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; if (spix_val <= 31) dpix_val = colors_for_drawing.acolors[spix_val]; else dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; spix += 2; out_val = dpix_val; buf[dpix++] = out_val; } } else { while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[spix_val]; spix += 2; out_val = dpix_val; buf[dpix++] = out_val; } } return spix; } static int NOINLINE linetoscr_32_shrink1f (int spix, int dpix, int dpix_end) { uae_u32 *buf = (uae_u32 *) xlinebuffer; if (dp_for_drawing->ham_seen) { while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; dpix_val = xcolors[ham_linebuf[spix]]; { uae_u32 tmp_val; spix++; tmp_val = dpix_val; dpix_val = xcolors[ham_linebuf[spix]]; dpix_val = merge_2pixel32 (dpix_val, tmp_val); spix++; } out_val = dpix_val; buf[dpix++] = out_val; } } else if (bpldualpf) { int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[lookup[spix_val]]; { uae_u32 tmp_val; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[lookup[spix_val]]; dpix_val = merge_2pixel32 (dpix_val, tmp_val); spix++; } out_val = dpix_val; buf[dpix++] = out_val; } } else if (bplehb) { while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; if (spix_val <= 31) dpix_val = colors_for_drawing.acolors[spix_val]; else dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; { uae_u32 tmp_val; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix]; if (spix_val <= 31) dpix_val = colors_for_drawing.acolors[spix_val]; else dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; dpix_val = merge_2pixel32 (dpix_val, tmp_val); spix++; } out_val = dpix_val; buf[dpix++] = out_val; } } else { while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[spix_val]; { uae_u32 tmp_val; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[spix_val]; dpix_val = merge_2pixel32 (dpix_val, tmp_val); spix++; } out_val = dpix_val; buf[dpix++] = out_val; } } return spix; } static int NOINLINE linetoscr_32_shrink2 (int spix, int dpix, int dpix_end) { uae_u32 *buf = (uae_u32 *) xlinebuffer; if (dp_for_drawing->ham_seen) { while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; dpix_val = xcolors[ham_linebuf[spix]]; spix += 4; out_val = dpix_val; buf[dpix++] = out_val; } } else if (bpldualpf) { int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[lookup[spix_val]]; spix += 4; out_val = dpix_val; buf[dpix++] = out_val; } } else if (bplehb) { while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; if (spix_val <= 31) dpix_val = colors_for_drawing.acolors[spix_val]; else dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; spix += 4; out_val = dpix_val; buf[dpix++] = out_val; } } else { while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[spix_val]; spix += 4; out_val = dpix_val; buf[dpix++] = out_val; } } return spix; } static int NOINLINE linetoscr_32_shrink2f (int spix, int dpix, int dpix_end) { uae_u32 *buf = (uae_u32 *) xlinebuffer; if (dp_for_drawing->ham_seen) { while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; dpix_val = xcolors[ham_linebuf[spix]]; { uae_u32 tmp_val, tmp_val2, tmp_val3; spix++; tmp_val = dpix_val; dpix_val = xcolors[ham_linebuf[spix]]; spix++; tmp_val2 = dpix_val; dpix_val = xcolors[ham_linebuf[spix]]; spix++; tmp_val3 = dpix_val; dpix_val = xcolors[ham_linebuf[spix]]; tmp_val = merge_2pixel32 (tmp_val, tmp_val2); tmp_val2 = merge_2pixel32 (tmp_val3, dpix_val); dpix_val = merge_2pixel32 (tmp_val, tmp_val2); spix++; } out_val = dpix_val; buf[dpix++] = out_val; } } else if (bpldualpf) { int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[lookup[spix_val]]; { uae_u32 tmp_val, tmp_val2, tmp_val3; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[lookup[spix_val]]; spix++; tmp_val2 = dpix_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[lookup[spix_val]]; spix++; tmp_val3 = dpix_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[lookup[spix_val]]; tmp_val = merge_2pixel32 (tmp_val, tmp_val2); tmp_val2 = merge_2pixel32 (tmp_val3, dpix_val); dpix_val = merge_2pixel32 (tmp_val, tmp_val2); spix++; } out_val = dpix_val; buf[dpix++] = out_val; } } else if (bplehb) { while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; if (spix_val <= 31) dpix_val = colors_for_drawing.acolors[spix_val]; else dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; { uae_u32 tmp_val, tmp_val2, tmp_val3; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix]; if (spix_val <= 31) dpix_val = colors_for_drawing.acolors[spix_val]; else dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; spix++; tmp_val2 = dpix_val; spix_val = pixdata.apixels[spix]; if (spix_val <= 31) dpix_val = colors_for_drawing.acolors[spix_val]; else dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; spix++; tmp_val3 = dpix_val; spix_val = pixdata.apixels[spix]; if (spix_val <= 31) dpix_val = colors_for_drawing.acolors[spix_val]; else dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; tmp_val = merge_2pixel32 (tmp_val, tmp_val2); tmp_val2 = merge_2pixel32 (tmp_val3, dpix_val); dpix_val = merge_2pixel32 (tmp_val, tmp_val2); spix++; } out_val = dpix_val; buf[dpix++] = out_val; } } else { while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[spix_val]; { uae_u32 tmp_val, tmp_val2, tmp_val3; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[spix_val]; spix++; tmp_val2 = dpix_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[spix_val]; spix++; tmp_val3 = dpix_val; spix_val = pixdata.apixels[spix]; dpix_val = colors_for_drawing.acolors[spix_val]; tmp_val = merge_2pixel32 (tmp_val, tmp_val2); tmp_val2 = merge_2pixel32 (tmp_val3, dpix_val); dpix_val = merge_2pixel32 (tmp_val, tmp_val2); spix++; } out_val = dpix_val; buf[dpix++] = out_val; } } return spix; } static int NOINLINE linetoscr_32_spr (int spix, int dpix, int dpix_end) { uae_u32 *buf = (uae_u32 *) xlinebuffer; uae_u8 sprcol; if (dp_for_drawing->ham_seen) { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; dpix_val = xcolors[ham_linebuf[spix]]; sprpix_val = dpix_val; spix++; out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix, 0, sprpix_val, 0); if (sprcol) { uae_u32 spcol = colors_for_drawing.acolors[sprcol]; out_val = spcol; } } buf[dpix++] = out_val; } } else if (bpldualpf) { int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; dpix_val = colors_for_drawing.acolors[lookup[spix_val]]; spix++; out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix, 1, sprpix_val, 0); if (sprcol) { uae_u32 spcol = colors_for_drawing.acolors[sprcol]; out_val = spcol; } } buf[dpix++] = out_val; } } else if (bplehb) { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; if (spix_val <= 31) dpix_val = colors_for_drawing.acolors[spix_val]; else dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; spix++; out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix, 0, sprpix_val, 0); if (sprcol) { uae_u32 spcol = colors_for_drawing.acolors[sprcol]; out_val = spcol; } } buf[dpix++] = out_val; } } else { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; dpix_val = colors_for_drawing.acolors[spix_val]; spix++; out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix, 0, sprpix_val, 0); if (sprcol) { uae_u32 spcol = colors_for_drawing.acolors[sprcol]; out_val = spcol; } } buf[dpix++] = out_val; } } return spix; } static int NOINLINE linetoscr_32_stretch1_spr (int spix, int dpix, int dpix_end) { uae_u32 *buf = (uae_u32 *) xlinebuffer; uae_u8 sprcol; if (dp_for_drawing->ham_seen) { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; dpix_val = xcolors[ham_linebuf[spix]]; sprpix_val = dpix_val; spix++; out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix, 0, sprpix_val, 0); if (sprcol) { uae_u32 spcol = colors_for_drawing.acolors[sprcol]; out_val = spcol; } } buf[dpix++] = out_val; buf[dpix++] = out_val; } } else if (bpldualpf) { int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; dpix_val = colors_for_drawing.acolors[lookup[spix_val]]; spix++; out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix, 1, sprpix_val, 0); if (sprcol) { uae_u32 spcol = colors_for_drawing.acolors[sprcol]; out_val = spcol; } } buf[dpix++] = out_val; buf[dpix++] = out_val; } } else if (bplehb) { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; if (spix_val <= 31) dpix_val = colors_for_drawing.acolors[spix_val]; else dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; spix++; out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix, 0, sprpix_val, 0); if (sprcol) { uae_u32 spcol = colors_for_drawing.acolors[sprcol]; out_val = spcol; } } buf[dpix++] = out_val; buf[dpix++] = out_val; } } else { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; dpix_val = colors_for_drawing.acolors[spix_val]; spix++; out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix, 0, sprpix_val, 0); if (sprcol) { uae_u32 spcol = colors_for_drawing.acolors[sprcol]; out_val = spcol; } } buf[dpix++] = out_val; buf[dpix++] = out_val; } } return spix; } static int NOINLINE linetoscr_32_stretch2_spr (int spix, int dpix, int dpix_end) { uae_u32 *buf = (uae_u32 *) xlinebuffer; uae_u8 sprcol; if (dp_for_drawing->ham_seen) { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; dpix_val = xcolors[ham_linebuf[spix]]; sprpix_val = dpix_val; spix++; out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix, 0, sprpix_val, 0); if (sprcol) { uae_u32 spcol = colors_for_drawing.acolors[sprcol]; out_val = spcol; } } buf[dpix++] = out_val; buf[dpix++] = out_val; buf[dpix++] = out_val; buf[dpix++] = out_val; } } else if (bpldualpf) { int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; dpix_val = colors_for_drawing.acolors[lookup[spix_val]]; spix++; out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix, 1, sprpix_val, 0); if (sprcol) { uae_u32 spcol = colors_for_drawing.acolors[sprcol]; out_val = spcol; } } buf[dpix++] = out_val; buf[dpix++] = out_val; buf[dpix++] = out_val; buf[dpix++] = out_val; } } else if (bplehb) { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; if (spix_val <= 31) dpix_val = colors_for_drawing.acolors[spix_val]; else dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; spix++; out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix, 0, sprpix_val, 0); if (sprcol) { uae_u32 spcol = colors_for_drawing.acolors[sprcol]; out_val = spcol; } } buf[dpix++] = out_val; buf[dpix++] = out_val; buf[dpix++] = out_val; buf[dpix++] = out_val; } } else { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; dpix_val = colors_for_drawing.acolors[spix_val]; spix++; out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix, 0, sprpix_val, 0); if (sprcol) { uae_u32 spcol = colors_for_drawing.acolors[sprcol]; out_val = spcol; } } buf[dpix++] = out_val; buf[dpix++] = out_val; buf[dpix++] = out_val; buf[dpix++] = out_val; } } return spix; } static int NOINLINE linetoscr_32_shrink1_spr (int spix, int dpix, int dpix_end) { uae_u32 *buf = (uae_u32 *) xlinebuffer; uae_u8 sprcol; if (dp_for_drawing->ham_seen) { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; dpix_val = xcolors[ham_linebuf[spix]]; sprpix_val = dpix_val; spix += 2; out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix, 0, sprpix_val, 0); if (sprcol) { uae_u32 spcol = colors_for_drawing.acolors[sprcol]; out_val = spcol; } } buf[dpix++] = out_val; } } else if (bpldualpf) { int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; dpix_val = colors_for_drawing.acolors[lookup[spix_val]]; spix += 2; out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix, 1, sprpix_val, 0); if (sprcol) { uae_u32 spcol = colors_for_drawing.acolors[sprcol]; out_val = spcol; } } buf[dpix++] = out_val; } } else if (bplehb) { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; if (spix_val <= 31) dpix_val = colors_for_drawing.acolors[spix_val]; else dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; spix += 2; out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix, 0, sprpix_val, 0); if (sprcol) { uae_u32 spcol = colors_for_drawing.acolors[sprcol]; out_val = spcol; } } buf[dpix++] = out_val; } } else { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; dpix_val = colors_for_drawing.acolors[spix_val]; spix += 2; out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix, 0, sprpix_val, 0); if (sprcol) { uae_u32 spcol = colors_for_drawing.acolors[sprcol]; out_val = spcol; } } buf[dpix++] = out_val; } } return spix; } static int NOINLINE linetoscr_32_shrink1f_spr (int spix, int dpix, int dpix_end) { uae_u32 *buf = (uae_u32 *) xlinebuffer; uae_u8 sprcol; if (dp_for_drawing->ham_seen) { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; dpix_val = xcolors[ham_linebuf[spix]]; sprpix_val = dpix_val; { uae_u32 tmp_val; spix++; tmp_val = dpix_val; dpix_val = xcolors[ham_linebuf[spix]]; sprpix_val = dpix_val; dpix_val = merge_2pixel32 (dpix_val, tmp_val); spix++; } out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix, 0, sprpix_val, 0); if (sprcol) { uae_u32 spcol = colors_for_drawing.acolors[sprcol]; out_val = spcol; } } buf[dpix++] = out_val; } } else if (bpldualpf) { int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; dpix_val = colors_for_drawing.acolors[lookup[spix_val]]; { uae_u32 tmp_val; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; dpix_val = colors_for_drawing.acolors[lookup[spix_val]]; dpix_val = merge_2pixel32 (dpix_val, tmp_val); spix++; } out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix, 1, sprpix_val, 0); if (sprcol) { uae_u32 spcol = colors_for_drawing.acolors[sprcol]; out_val = spcol; } } buf[dpix++] = out_val; } } else if (bplehb) { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; if (spix_val <= 31) dpix_val = colors_for_drawing.acolors[spix_val]; else dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; { uae_u32 tmp_val; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; if (spix_val <= 31) dpix_val = colors_for_drawing.acolors[spix_val]; else dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; dpix_val = merge_2pixel32 (dpix_val, tmp_val); spix++; } out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix, 0, sprpix_val, 0); if (sprcol) { uae_u32 spcol = colors_for_drawing.acolors[sprcol]; out_val = spcol; } } buf[dpix++] = out_val; } } else { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; dpix_val = colors_for_drawing.acolors[spix_val]; { uae_u32 tmp_val; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; dpix_val = colors_for_drawing.acolors[spix_val]; dpix_val = merge_2pixel32 (dpix_val, tmp_val); spix++; } out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix, 0, sprpix_val, 0); if (sprcol) { uae_u32 spcol = colors_for_drawing.acolors[sprcol]; out_val = spcol; } } buf[dpix++] = out_val; } } return spix; } static int NOINLINE linetoscr_32_shrink2_spr (int spix, int dpix, int dpix_end) { uae_u32 *buf = (uae_u32 *) xlinebuffer; uae_u8 sprcol; if (dp_for_drawing->ham_seen) { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; dpix_val = xcolors[ham_linebuf[spix]]; sprpix_val = dpix_val; spix += 4; out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix, 0, sprpix_val, 0); if (sprcol) { uae_u32 spcol = colors_for_drawing.acolors[sprcol]; out_val = spcol; } } buf[dpix++] = out_val; } } else if (bpldualpf) { int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; dpix_val = colors_for_drawing.acolors[lookup[spix_val]]; spix += 4; out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix, 1, sprpix_val, 0); if (sprcol) { uae_u32 spcol = colors_for_drawing.acolors[sprcol]; out_val = spcol; } } buf[dpix++] = out_val; } } else if (bplehb) { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; if (spix_val <= 31) dpix_val = colors_for_drawing.acolors[spix_val]; else dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; spix += 4; out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix, 0, sprpix_val, 0); if (sprcol) { uae_u32 spcol = colors_for_drawing.acolors[sprcol]; out_val = spcol; } } buf[dpix++] = out_val; } } else { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; dpix_val = colors_for_drawing.acolors[spix_val]; spix += 4; out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix, 0, sprpix_val, 0); if (sprcol) { uae_u32 spcol = colors_for_drawing.acolors[sprcol]; out_val = spcol; } } buf[dpix++] = out_val; } } return spix; } static int NOINLINE linetoscr_32_shrink2f_spr (int spix, int dpix, int dpix_end) { uae_u32 *buf = (uae_u32 *) xlinebuffer; uae_u8 sprcol; if (dp_for_drawing->ham_seen) { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; dpix_val = xcolors[ham_linebuf[spix]]; sprpix_val = dpix_val; { uae_u32 tmp_val, tmp_val2, tmp_val3; spix++; tmp_val = dpix_val; dpix_val = xcolors[ham_linebuf[spix]]; sprpix_val = dpix_val; spix++; tmp_val2 = dpix_val; dpix_val = xcolors[ham_linebuf[spix]]; sprpix_val = dpix_val; spix++; tmp_val3 = dpix_val; dpix_val = xcolors[ham_linebuf[spix]]; sprpix_val = dpix_val; tmp_val = merge_2pixel32 (tmp_val, tmp_val2); tmp_val2 = merge_2pixel32 (tmp_val3, dpix_val); dpix_val = merge_2pixel32 (tmp_val, tmp_val2); spix++; } out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix, 0, sprpix_val, 0); if (sprcol) { uae_u32 spcol = colors_for_drawing.acolors[sprcol]; out_val = spcol; } } buf[dpix++] = out_val; } } else if (bpldualpf) { int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1; while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; dpix_val = colors_for_drawing.acolors[lookup[spix_val]]; { uae_u32 tmp_val, tmp_val2, tmp_val3; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; dpix_val = colors_for_drawing.acolors[lookup[spix_val]]; spix++; tmp_val2 = dpix_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; dpix_val = colors_for_drawing.acolors[lookup[spix_val]]; spix++; tmp_val3 = dpix_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; dpix_val = colors_for_drawing.acolors[lookup[spix_val]]; tmp_val = merge_2pixel32 (tmp_val, tmp_val2); tmp_val2 = merge_2pixel32 (tmp_val3, dpix_val); dpix_val = merge_2pixel32 (tmp_val, tmp_val2); spix++; } out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix, 1, sprpix_val, 0); if (sprcol) { uae_u32 spcol = colors_for_drawing.acolors[sprcol]; out_val = spcol; } } buf[dpix++] = out_val; } } else if (bplehb) { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; if (spix_val <= 31) dpix_val = colors_for_drawing.acolors[spix_val]; else dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; { uae_u32 tmp_val, tmp_val2, tmp_val3; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; if (spix_val <= 31) dpix_val = colors_for_drawing.acolors[spix_val]; else dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; spix++; tmp_val2 = dpix_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; if (spix_val <= 31) dpix_val = colors_for_drawing.acolors[spix_val]; else dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; spix++; tmp_val3 = dpix_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; if (spix_val <= 31) dpix_val = colors_for_drawing.acolors[spix_val]; else dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777]; tmp_val = merge_2pixel32 (tmp_val, tmp_val2); tmp_val2 = merge_2pixel32 (tmp_val3, dpix_val); dpix_val = merge_2pixel32 (tmp_val, tmp_val2); spix++; } out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix, 0, sprpix_val, 0); if (sprcol) { uae_u32 spcol = colors_for_drawing.acolors[sprcol]; out_val = spcol; } } buf[dpix++] = out_val; } } else { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; dpix_val = colors_for_drawing.acolors[spix_val]; { uae_u32 tmp_val, tmp_val2, tmp_val3; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; dpix_val = colors_for_drawing.acolors[spix_val]; spix++; tmp_val2 = dpix_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; dpix_val = colors_for_drawing.acolors[spix_val]; spix++; tmp_val3 = dpix_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; dpix_val = colors_for_drawing.acolors[spix_val]; tmp_val = merge_2pixel32 (tmp_val, tmp_val2); tmp_val2 = merge_2pixel32 (tmp_val3, dpix_val); dpix_val = merge_2pixel32 (tmp_val, tmp_val2); spix++; } out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix, 0, sprpix_val, 0); if (sprcol) { uae_u32 spcol = colors_for_drawing.acolors[sprcol]; out_val = spcol; } } buf[dpix++] = out_val; } } return spix; } #ifdef AGA static int NOINLINE linetoscr_32_aga (int spix, int dpix, int dpix_end) { uae_u32 *buf = (uae_u32 *) xlinebuffer; uae_u8 xor_val = bplxor; if (dp_for_drawing->ham_seen) { while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = CONVERT_RGB (ham_linebuf[spix]); spix++; out_val = dpix_val; buf[dpix++] = out_val; } } else if (bpldualpf) { int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; { uae_u8 val = lookup[spix_val]; if (lookup_no[spix_val]) val += dblpfofs[bpldualpf2of]; val ^= xor_val; dpix_val = colors_for_drawing.acolors[val]; } spix++; out_val = dpix_val; buf[dpix++] = out_val; } } else if (bplehb) { while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix] ^ xor_val; if (spix_val >= 32 && spix_val < 64) { unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F; dpix_val = CONVERT_RGB (c); } else dpix_val = colors_for_drawing.acolors[spix_val]; spix++; out_val = dpix_val; buf[dpix++] = out_val; } } else { while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = colors_for_drawing.acolors[spix_val]; spix++; out_val = dpix_val; buf[dpix++] = out_val; } } return spix; } #endif #ifdef AGA static int NOINLINE linetoscr_32_stretch1_aga (int spix, int dpix, int dpix_end) { uae_u32 *buf = (uae_u32 *) xlinebuffer; uae_u8 xor_val = bplxor; if (dp_for_drawing->ham_seen) { while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = CONVERT_RGB (ham_linebuf[spix]); spix++; out_val = dpix_val; buf[dpix++] = out_val; buf[dpix++] = out_val; } } else if (bpldualpf) { int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; { uae_u8 val = lookup[spix_val]; if (lookup_no[spix_val]) val += dblpfofs[bpldualpf2of]; val ^= xor_val; dpix_val = colors_for_drawing.acolors[val]; } spix++; out_val = dpix_val; buf[dpix++] = out_val; buf[dpix++] = out_val; } } else if (bplehb) { while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix] ^ xor_val; if (spix_val >= 32 && spix_val < 64) { unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F; dpix_val = CONVERT_RGB (c); } else dpix_val = colors_for_drawing.acolors[spix_val]; spix++; out_val = dpix_val; buf[dpix++] = out_val; buf[dpix++] = out_val; } } else { while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = colors_for_drawing.acolors[spix_val]; spix++; out_val = dpix_val; buf[dpix++] = out_val; buf[dpix++] = out_val; } } return spix; } #endif #ifdef AGA static int NOINLINE linetoscr_32_stretch2_aga (int spix, int dpix, int dpix_end) { uae_u32 *buf = (uae_u32 *) xlinebuffer; uae_u8 xor_val = bplxor; if (dp_for_drawing->ham_seen) { while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = CONVERT_RGB (ham_linebuf[spix]); spix++; out_val = dpix_val; buf[dpix++] = out_val; buf[dpix++] = out_val; buf[dpix++] = out_val; buf[dpix++] = out_val; } } else if (bpldualpf) { int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; { uae_u8 val = lookup[spix_val]; if (lookup_no[spix_val]) val += dblpfofs[bpldualpf2of]; val ^= xor_val; dpix_val = colors_for_drawing.acolors[val]; } spix++; out_val = dpix_val; buf[dpix++] = out_val; buf[dpix++] = out_val; buf[dpix++] = out_val; buf[dpix++] = out_val; } } else if (bplehb) { while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix] ^ xor_val; if (spix_val >= 32 && spix_val < 64) { unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F; dpix_val = CONVERT_RGB (c); } else dpix_val = colors_for_drawing.acolors[spix_val]; spix++; out_val = dpix_val; buf[dpix++] = out_val; buf[dpix++] = out_val; buf[dpix++] = out_val; buf[dpix++] = out_val; } } else { while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = colors_for_drawing.acolors[spix_val]; spix++; out_val = dpix_val; buf[dpix++] = out_val; buf[dpix++] = out_val; buf[dpix++] = out_val; buf[dpix++] = out_val; } } return spix; } #endif #ifdef AGA static int NOINLINE linetoscr_32_shrink1_aga (int spix, int dpix, int dpix_end) { uae_u32 *buf = (uae_u32 *) xlinebuffer; uae_u8 xor_val = bplxor; if (dp_for_drawing->ham_seen) { while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = CONVERT_RGB (ham_linebuf[spix]); spix += 2; out_val = dpix_val; buf[dpix++] = out_val; } } else if (bpldualpf) { int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; { uae_u8 val = lookup[spix_val]; if (lookup_no[spix_val]) val += dblpfofs[bpldualpf2of]; val ^= xor_val; dpix_val = colors_for_drawing.acolors[val]; } spix += 2; out_val = dpix_val; buf[dpix++] = out_val; } } else if (bplehb) { while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix] ^ xor_val; if (spix_val >= 32 && spix_val < 64) { unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F; dpix_val = CONVERT_RGB (c); } else dpix_val = colors_for_drawing.acolors[spix_val]; spix += 2; out_val = dpix_val; buf[dpix++] = out_val; } } else { while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = colors_for_drawing.acolors[spix_val]; spix += 2; out_val = dpix_val; buf[dpix++] = out_val; } } return spix; } #endif #ifdef AGA static int NOINLINE linetoscr_32_shrink1f_aga (int spix, int dpix, int dpix_end) { uae_u32 *buf = (uae_u32 *) xlinebuffer; uae_u8 xor_val = bplxor; if (dp_for_drawing->ham_seen) { while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = CONVERT_RGB (ham_linebuf[spix]); { uae_u32 tmp_val; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = CONVERT_RGB (ham_linebuf[spix]); dpix_val = merge_2pixel32 (dpix_val, tmp_val); spix++; } out_val = dpix_val; buf[dpix++] = out_val; } } else if (bpldualpf) { int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; { uae_u8 val = lookup[spix_val]; if (lookup_no[spix_val]) val += dblpfofs[bpldualpf2of]; val ^= xor_val; dpix_val = colors_for_drawing.acolors[val]; } { uae_u32 tmp_val; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix]; { uae_u8 val = lookup[spix_val]; if (lookup_no[spix_val]) val += dblpfofs[bpldualpf2of]; val ^= xor_val; dpix_val = colors_for_drawing.acolors[val]; } dpix_val = merge_2pixel32 (dpix_val, tmp_val); spix++; } out_val = dpix_val; buf[dpix++] = out_val; } } else if (bplehb) { while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix] ^ xor_val; if (spix_val >= 32 && spix_val < 64) { unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F; dpix_val = CONVERT_RGB (c); } else dpix_val = colors_for_drawing.acolors[spix_val]; { uae_u32 tmp_val; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; if (spix_val >= 32 && spix_val < 64) { unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F; dpix_val = CONVERT_RGB (c); } else dpix_val = colors_for_drawing.acolors[spix_val]; dpix_val = merge_2pixel32 (dpix_val, tmp_val); spix++; } out_val = dpix_val; buf[dpix++] = out_val; } } else { while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = colors_for_drawing.acolors[spix_val]; { uae_u32 tmp_val; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = colors_for_drawing.acolors[spix_val]; dpix_val = merge_2pixel32 (dpix_val, tmp_val); spix++; } out_val = dpix_val; buf[dpix++] = out_val; } } return spix; } #endif #ifdef AGA static int NOINLINE linetoscr_32_shrink2_aga (int spix, int dpix, int dpix_end) { uae_u32 *buf = (uae_u32 *) xlinebuffer; uae_u8 xor_val = bplxor; if (dp_for_drawing->ham_seen) { while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = CONVERT_RGB (ham_linebuf[spix]); spix += 4; out_val = dpix_val; buf[dpix++] = out_val; } } else if (bpldualpf) { int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; { uae_u8 val = lookup[spix_val]; if (lookup_no[spix_val]) val += dblpfofs[bpldualpf2of]; val ^= xor_val; dpix_val = colors_for_drawing.acolors[val]; } spix += 4; out_val = dpix_val; buf[dpix++] = out_val; } } else if (bplehb) { while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix] ^ xor_val; if (spix_val >= 32 && spix_val < 64) { unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F; dpix_val = CONVERT_RGB (c); } else dpix_val = colors_for_drawing.acolors[spix_val]; spix += 4; out_val = dpix_val; buf[dpix++] = out_val; } } else { while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = colors_for_drawing.acolors[spix_val]; spix += 4; out_val = dpix_val; buf[dpix++] = out_val; } } return spix; } #endif #ifdef AGA static int NOINLINE linetoscr_32_shrink2f_aga (int spix, int dpix, int dpix_end) { uae_u32 *buf = (uae_u32 *) xlinebuffer; uae_u8 xor_val = bplxor; if (dp_for_drawing->ham_seen) { while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = CONVERT_RGB (ham_linebuf[spix]); { uae_u32 tmp_val, tmp_val2, tmp_val3; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = CONVERT_RGB (ham_linebuf[spix]); spix++; tmp_val2 = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = CONVERT_RGB (ham_linebuf[spix]); spix++; tmp_val3 = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = CONVERT_RGB (ham_linebuf[spix]); tmp_val = merge_2pixel32 (tmp_val, tmp_val2); tmp_val2 = merge_2pixel32 (tmp_val3, dpix_val); dpix_val = merge_2pixel32 (tmp_val, tmp_val2); spix++; } out_val = dpix_val; buf[dpix++] = out_val; } } else if (bpldualpf) { int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; { uae_u8 val = lookup[spix_val]; if (lookup_no[spix_val]) val += dblpfofs[bpldualpf2of]; val ^= xor_val; dpix_val = colors_for_drawing.acolors[val]; } { uae_u32 tmp_val, tmp_val2, tmp_val3; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix]; { uae_u8 val = lookup[spix_val]; if (lookup_no[spix_val]) val += dblpfofs[bpldualpf2of]; val ^= xor_val; dpix_val = colors_for_drawing.acolors[val]; } spix++; tmp_val2 = dpix_val; spix_val = pixdata.apixels[spix]; { uae_u8 val = lookup[spix_val]; if (lookup_no[spix_val]) val += dblpfofs[bpldualpf2of]; val ^= xor_val; dpix_val = colors_for_drawing.acolors[val]; } spix++; tmp_val3 = dpix_val; spix_val = pixdata.apixels[spix]; { uae_u8 val = lookup[spix_val]; if (lookup_no[spix_val]) val += dblpfofs[bpldualpf2of]; val ^= xor_val; dpix_val = colors_for_drawing.acolors[val]; } tmp_val = merge_2pixel32 (tmp_val, tmp_val2); tmp_val2 = merge_2pixel32 (tmp_val3, dpix_val); dpix_val = merge_2pixel32 (tmp_val, tmp_val2); spix++; } out_val = dpix_val; buf[dpix++] = out_val; } } else if (bplehb) { while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix] ^ xor_val; if (spix_val >= 32 && spix_val < 64) { unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F; dpix_val = CONVERT_RGB (c); } else dpix_val = colors_for_drawing.acolors[spix_val]; { uae_u32 tmp_val, tmp_val2, tmp_val3; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; if (spix_val >= 32 && spix_val < 64) { unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F; dpix_val = CONVERT_RGB (c); } else dpix_val = colors_for_drawing.acolors[spix_val]; spix++; tmp_val2 = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; if (spix_val >= 32 && spix_val < 64) { unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F; dpix_val = CONVERT_RGB (c); } else dpix_val = colors_for_drawing.acolors[spix_val]; spix++; tmp_val3 = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; if (spix_val >= 32 && spix_val < 64) { unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F; dpix_val = CONVERT_RGB (c); } else dpix_val = colors_for_drawing.acolors[spix_val]; tmp_val = merge_2pixel32 (tmp_val, tmp_val2); tmp_val2 = merge_2pixel32 (tmp_val3, dpix_val); dpix_val = merge_2pixel32 (tmp_val, tmp_val2); spix++; } out_val = dpix_val; buf[dpix++] = out_val; } } else { while (dpix < dpix_end) { uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = colors_for_drawing.acolors[spix_val]; { uae_u32 tmp_val, tmp_val2, tmp_val3; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = colors_for_drawing.acolors[spix_val]; spix++; tmp_val2 = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = colors_for_drawing.acolors[spix_val]; spix++; tmp_val3 = dpix_val; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = colors_for_drawing.acolors[spix_val]; tmp_val = merge_2pixel32 (tmp_val, tmp_val2); tmp_val2 = merge_2pixel32 (tmp_val3, dpix_val); dpix_val = merge_2pixel32 (tmp_val, tmp_val2); spix++; } out_val = dpix_val; buf[dpix++] = out_val; } } return spix; } #endif #ifdef AGA static int NOINLINE linetoscr_32_aga_spr (int spix, int dpix, int dpix_end) { uae_u32 *buf = (uae_u32 *) xlinebuffer; uae_u8 sprcol; uae_u8 xor_val = bplxor; if (dp_for_drawing->ham_seen) { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; sprpix_val = pixdata.apixels[spix]; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = CONVERT_RGB (ham_linebuf[spix]); sprpix_val = dpix_val; spix++; out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); if (sprcol) out_val = colors_for_drawing.acolors[sprcol]; } buf[dpix++] = out_val; } } else if (bpldualpf) { int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; { uae_u8 val = lookup[spix_val]; if (lookup_no[spix_val]) val += dblpfofs[bpldualpf2of]; val ^= xor_val; dpix_val = colors_for_drawing.acolors[val]; } spix++; out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix + 0, 1, sprpix_val, 1); if (sprcol) out_val = colors_for_drawing.acolors[sprcol]; } buf[dpix++] = out_val; } } else if (bplehb) { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; sprpix_val = pixdata.apixels[spix]; spix_val = pixdata.apixels[spix] ^ xor_val; if (spix_val >= 32 && spix_val < 64) { unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F; dpix_val = CONVERT_RGB (c); } else dpix_val = colors_for_drawing.acolors[spix_val]; spix++; out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); if (sprcol) out_val = colors_for_drawing.acolors[sprcol]; } buf[dpix++] = out_val; } } else { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; sprpix_val = pixdata.apixels[spix]; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = colors_for_drawing.acolors[spix_val]; spix++; out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); if (sprcol) out_val = colors_for_drawing.acolors[sprcol]; } buf[dpix++] = out_val; } } return spix; } #endif #ifdef AGA static int NOINLINE linetoscr_32_stretch1_aga_spr (int spix, int dpix, int dpix_end) { uae_u32 *buf = (uae_u32 *) xlinebuffer; uae_u8 sprcol; uae_u8 xor_val = bplxor; if (dp_for_drawing->ham_seen) { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; sprpix_val = pixdata.apixels[spix]; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = CONVERT_RGB (ham_linebuf[spix]); sprpix_val = dpix_val; spix++; out_val = dpix_val; { uae_u32 out_val1 = out_val; uae_u32 out_val2 = out_val; if (spritepixels[dpix + 0].data) { sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); if (sprcol) out_val1 = colors_for_drawing.acolors[sprcol]; } if (spritepixels[dpix + 1].data) { sprcol = render_sprites (dpix + 1, 0, sprpix_val, 1); if (sprcol) out_val2 = colors_for_drawing.acolors[sprcol]; } buf[dpix++] = out_val1; buf[dpix++] = out_val2; } } } else if (bpldualpf) { int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; { uae_u8 val = lookup[spix_val]; if (lookup_no[spix_val]) val += dblpfofs[bpldualpf2of]; val ^= xor_val; dpix_val = colors_for_drawing.acolors[val]; } spix++; out_val = dpix_val; { uae_u32 out_val1 = out_val; uae_u32 out_val2 = out_val; if (spritepixels[dpix + 0].data) { sprcol = render_sprites (dpix + 0, 1, sprpix_val, 1); if (sprcol) out_val1 = colors_for_drawing.acolors[sprcol]; } if (spritepixels[dpix + 1].data) { sprcol = render_sprites (dpix + 1, 1, sprpix_val, 1); if (sprcol) out_val2 = colors_for_drawing.acolors[sprcol]; } buf[dpix++] = out_val1; buf[dpix++] = out_val2; } } } else if (bplehb) { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; sprpix_val = pixdata.apixels[spix]; spix_val = pixdata.apixels[spix] ^ xor_val; if (spix_val >= 32 && spix_val < 64) { unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F; dpix_val = CONVERT_RGB (c); } else dpix_val = colors_for_drawing.acolors[spix_val]; spix++; out_val = dpix_val; { uae_u32 out_val1 = out_val; uae_u32 out_val2 = out_val; if (spritepixels[dpix + 0].data) { sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); if (sprcol) out_val1 = colors_for_drawing.acolors[sprcol]; } if (spritepixels[dpix + 1].data) { sprcol = render_sprites (dpix + 1, 0, sprpix_val, 1); if (sprcol) out_val2 = colors_for_drawing.acolors[sprcol]; } buf[dpix++] = out_val1; buf[dpix++] = out_val2; } } } else { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; sprpix_val = pixdata.apixels[spix]; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = colors_for_drawing.acolors[spix_val]; spix++; out_val = dpix_val; { uae_u32 out_val1 = out_val; uae_u32 out_val2 = out_val; if (spritepixels[dpix + 0].data) { sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); if (sprcol) out_val1 = colors_for_drawing.acolors[sprcol]; } if (spritepixels[dpix + 1].data) { sprcol = render_sprites (dpix + 1, 0, sprpix_val, 1); if (sprcol) out_val2 = colors_for_drawing.acolors[sprcol]; } buf[dpix++] = out_val1; buf[dpix++] = out_val2; } } } return spix; } #endif #ifdef AGA static int NOINLINE linetoscr_32_stretch2_aga_spr (int spix, int dpix, int dpix_end) { uae_u32 *buf = (uae_u32 *) xlinebuffer; uae_u8 sprcol; uae_u8 xor_val = bplxor; if (dp_for_drawing->ham_seen) { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; sprpix_val = pixdata.apixels[spix]; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = CONVERT_RGB (ham_linebuf[spix]); sprpix_val = dpix_val; spix++; out_val = dpix_val; { uae_u32 out_val1 = out_val; uae_u32 out_val2 = out_val; uae_u32 out_val3 = out_val; uae_u32 out_val4 = out_val; if (spritepixels[dpix + 0].data) { sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); if (sprcol) out_val1 = colors_for_drawing.acolors[sprcol]; } if (spritepixels[dpix + 1].data) { sprcol = render_sprites (dpix + 1, 0, sprpix_val, 1); if (sprcol) out_val2 = colors_for_drawing.acolors[sprcol]; } if (spritepixels[dpix + 2].data) { sprcol = render_sprites (dpix + 2, 0, sprpix_val, 1); if (sprcol) out_val3 = colors_for_drawing.acolors[sprcol]; } if (spritepixels[dpix + 3].data) { sprcol = render_sprites (dpix + 3, 0, sprpix_val, 1); if (sprcol) out_val4 = colors_for_drawing.acolors[sprcol]; } buf[dpix++] = out_val1; buf[dpix++] = out_val2; buf[dpix++] = out_val3; buf[dpix++] = out_val4; } } } else if (bpldualpf) { int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; { uae_u8 val = lookup[spix_val]; if (lookup_no[spix_val]) val += dblpfofs[bpldualpf2of]; val ^= xor_val; dpix_val = colors_for_drawing.acolors[val]; } spix++; out_val = dpix_val; { uae_u32 out_val1 = out_val; uae_u32 out_val2 = out_val; uae_u32 out_val3 = out_val; uae_u32 out_val4 = out_val; if (spritepixels[dpix + 0].data) { sprcol = render_sprites (dpix + 0, 1, sprpix_val, 1); if (sprcol) out_val1 = colors_for_drawing.acolors[sprcol]; } if (spritepixels[dpix + 1].data) { sprcol = render_sprites (dpix + 1, 1, sprpix_val, 1); if (sprcol) out_val2 = colors_for_drawing.acolors[sprcol]; } if (spritepixels[dpix + 2].data) { sprcol = render_sprites (dpix + 2, 1, sprpix_val, 1); if (sprcol) out_val3 = colors_for_drawing.acolors[sprcol]; } if (spritepixels[dpix + 3].data) { sprcol = render_sprites (dpix + 3, 1, sprpix_val, 1); if (sprcol) out_val4 = colors_for_drawing.acolors[sprcol]; } buf[dpix++] = out_val1; buf[dpix++] = out_val2; buf[dpix++] = out_val3; buf[dpix++] = out_val4; } } } else if (bplehb) { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; sprpix_val = pixdata.apixels[spix]; spix_val = pixdata.apixels[spix] ^ xor_val; if (spix_val >= 32 && spix_val < 64) { unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F; dpix_val = CONVERT_RGB (c); } else dpix_val = colors_for_drawing.acolors[spix_val]; spix++; out_val = dpix_val; { uae_u32 out_val1 = out_val; uae_u32 out_val2 = out_val; uae_u32 out_val3 = out_val; uae_u32 out_val4 = out_val; if (spritepixels[dpix + 0].data) { sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); if (sprcol) out_val1 = colors_for_drawing.acolors[sprcol]; } if (spritepixels[dpix + 1].data) { sprcol = render_sprites (dpix + 1, 0, sprpix_val, 1); if (sprcol) out_val2 = colors_for_drawing.acolors[sprcol]; } if (spritepixels[dpix + 2].data) { sprcol = render_sprites (dpix + 2, 0, sprpix_val, 1); if (sprcol) out_val3 = colors_for_drawing.acolors[sprcol]; } if (spritepixels[dpix + 3].data) { sprcol = render_sprites (dpix + 3, 0, sprpix_val, 1); if (sprcol) out_val4 = colors_for_drawing.acolors[sprcol]; } buf[dpix++] = out_val1; buf[dpix++] = out_val2; buf[dpix++] = out_val3; buf[dpix++] = out_val4; } } } else { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; sprpix_val = pixdata.apixels[spix]; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = colors_for_drawing.acolors[spix_val]; spix++; out_val = dpix_val; { uae_u32 out_val1 = out_val; uae_u32 out_val2 = out_val; uae_u32 out_val3 = out_val; uae_u32 out_val4 = out_val; if (spritepixels[dpix + 0].data) { sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); if (sprcol) out_val1 = colors_for_drawing.acolors[sprcol]; } if (spritepixels[dpix + 1].data) { sprcol = render_sprites (dpix + 1, 0, sprpix_val, 1); if (sprcol) out_val2 = colors_for_drawing.acolors[sprcol]; } if (spritepixels[dpix + 2].data) { sprcol = render_sprites (dpix + 2, 0, sprpix_val, 1); if (sprcol) out_val3 = colors_for_drawing.acolors[sprcol]; } if (spritepixels[dpix + 3].data) { sprcol = render_sprites (dpix + 3, 0, sprpix_val, 1); if (sprcol) out_val4 = colors_for_drawing.acolors[sprcol]; } buf[dpix++] = out_val1; buf[dpix++] = out_val2; buf[dpix++] = out_val3; buf[dpix++] = out_val4; } } } return spix; } #endif #ifdef AGA static int NOINLINE linetoscr_32_shrink1_aga_spr (int spix, int dpix, int dpix_end) { uae_u32 *buf = (uae_u32 *) xlinebuffer; uae_u8 sprcol; uae_u8 xor_val = bplxor; if (dp_for_drawing->ham_seen) { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; sprpix_val = pixdata.apixels[spix]; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = CONVERT_RGB (ham_linebuf[spix]); sprpix_val = dpix_val; spix += 2; out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); if (sprcol) out_val = colors_for_drawing.acolors[sprcol]; } buf[dpix++] = out_val; } } else if (bpldualpf) { int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; { uae_u8 val = lookup[spix_val]; if (lookup_no[spix_val]) val += dblpfofs[bpldualpf2of]; val ^= xor_val; dpix_val = colors_for_drawing.acolors[val]; } spix += 2; out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix + 0, 1, sprpix_val, 1); if (sprcol) out_val = colors_for_drawing.acolors[sprcol]; } buf[dpix++] = out_val; } } else if (bplehb) { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; sprpix_val = pixdata.apixels[spix]; spix_val = pixdata.apixels[spix] ^ xor_val; if (spix_val >= 32 && spix_val < 64) { unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F; dpix_val = CONVERT_RGB (c); } else dpix_val = colors_for_drawing.acolors[spix_val]; spix += 2; out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); if (sprcol) out_val = colors_for_drawing.acolors[sprcol]; } buf[dpix++] = out_val; } } else { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; sprpix_val = pixdata.apixels[spix]; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = colors_for_drawing.acolors[spix_val]; spix += 2; out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); if (sprcol) out_val = colors_for_drawing.acolors[sprcol]; } buf[dpix++] = out_val; } } return spix; } #endif #ifdef AGA static int NOINLINE linetoscr_32_shrink1f_aga_spr (int spix, int dpix, int dpix_end) { uae_u32 *buf = (uae_u32 *) xlinebuffer; uae_u8 sprcol; uae_u8 xor_val = bplxor; if (dp_for_drawing->ham_seen) { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; sprpix_val = pixdata.apixels[spix]; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = CONVERT_RGB (ham_linebuf[spix]); sprpix_val = dpix_val; { uae_u32 tmp_val; spix++; tmp_val = dpix_val; sprpix_val = pixdata.apixels[spix]; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = CONVERT_RGB (ham_linebuf[spix]); sprpix_val = dpix_val; dpix_val = merge_2pixel32 (dpix_val, tmp_val); spix++; } out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); if (sprcol) out_val = colors_for_drawing.acolors[sprcol]; } buf[dpix++] = out_val; } } else if (bpldualpf) { int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; { uae_u8 val = lookup[spix_val]; if (lookup_no[spix_val]) val += dblpfofs[bpldualpf2of]; val ^= xor_val; dpix_val = colors_for_drawing.acolors[val]; } { uae_u32 tmp_val; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; { uae_u8 val = lookup[spix_val]; if (lookup_no[spix_val]) val += dblpfofs[bpldualpf2of]; val ^= xor_val; dpix_val = colors_for_drawing.acolors[val]; } dpix_val = merge_2pixel32 (dpix_val, tmp_val); spix++; } out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix + 0, 1, sprpix_val, 1); if (sprcol) out_val = colors_for_drawing.acolors[sprcol]; } buf[dpix++] = out_val; } } else if (bplehb) { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; sprpix_val = pixdata.apixels[spix]; spix_val = pixdata.apixels[spix] ^ xor_val; if (spix_val >= 32 && spix_val < 64) { unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F; dpix_val = CONVERT_RGB (c); } else dpix_val = colors_for_drawing.acolors[spix_val]; { uae_u32 tmp_val; spix++; tmp_val = dpix_val; sprpix_val = pixdata.apixels[spix]; spix_val = pixdata.apixels[spix] ^ xor_val; if (spix_val >= 32 && spix_val < 64) { unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F; dpix_val = CONVERT_RGB (c); } else dpix_val = colors_for_drawing.acolors[spix_val]; dpix_val = merge_2pixel32 (dpix_val, tmp_val); spix++; } out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); if (sprcol) out_val = colors_for_drawing.acolors[sprcol]; } buf[dpix++] = out_val; } } else { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; sprpix_val = pixdata.apixels[spix]; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = colors_for_drawing.acolors[spix_val]; { uae_u32 tmp_val; spix++; tmp_val = dpix_val; sprpix_val = pixdata.apixels[spix]; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = colors_for_drawing.acolors[spix_val]; dpix_val = merge_2pixel32 (dpix_val, tmp_val); spix++; } out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); if (sprcol) out_val = colors_for_drawing.acolors[sprcol]; } buf[dpix++] = out_val; } } return spix; } #endif #ifdef AGA static int NOINLINE linetoscr_32_shrink2_aga_spr (int spix, int dpix, int dpix_end) { uae_u32 *buf = (uae_u32 *) xlinebuffer; uae_u8 sprcol; uae_u8 xor_val = bplxor; if (dp_for_drawing->ham_seen) { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; sprpix_val = pixdata.apixels[spix]; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = CONVERT_RGB (ham_linebuf[spix]); sprpix_val = dpix_val; spix += 4; out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); if (sprcol) out_val = colors_for_drawing.acolors[sprcol]; } buf[dpix++] = out_val; } } else if (bpldualpf) { int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; { uae_u8 val = lookup[spix_val]; if (lookup_no[spix_val]) val += dblpfofs[bpldualpf2of]; val ^= xor_val; dpix_val = colors_for_drawing.acolors[val]; } spix += 4; out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix + 0, 1, sprpix_val, 1); if (sprcol) out_val = colors_for_drawing.acolors[sprcol]; } buf[dpix++] = out_val; } } else if (bplehb) { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; sprpix_val = pixdata.apixels[spix]; spix_val = pixdata.apixels[spix] ^ xor_val; if (spix_val >= 32 && spix_val < 64) { unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F; dpix_val = CONVERT_RGB (c); } else dpix_val = colors_for_drawing.acolors[spix_val]; spix += 4; out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); if (sprcol) out_val = colors_for_drawing.acolors[sprcol]; } buf[dpix++] = out_val; } } else { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; sprpix_val = pixdata.apixels[spix]; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = colors_for_drawing.acolors[spix_val]; spix += 4; out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); if (sprcol) out_val = colors_for_drawing.acolors[sprcol]; } buf[dpix++] = out_val; } } return spix; } #endif #ifdef AGA static int NOINLINE linetoscr_32_shrink2f_aga_spr (int spix, int dpix, int dpix_end) { uae_u32 *buf = (uae_u32 *) xlinebuffer; uae_u8 sprcol; uae_u8 xor_val = bplxor; if (dp_for_drawing->ham_seen) { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; sprpix_val = pixdata.apixels[spix]; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = CONVERT_RGB (ham_linebuf[spix]); sprpix_val = dpix_val; { uae_u32 tmp_val, tmp_val2, tmp_val3; spix++; tmp_val = dpix_val; sprpix_val = pixdata.apixels[spix]; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = CONVERT_RGB (ham_linebuf[spix]); sprpix_val = dpix_val; spix++; tmp_val2 = dpix_val; sprpix_val = pixdata.apixels[spix]; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = CONVERT_RGB (ham_linebuf[spix]); sprpix_val = dpix_val; spix++; tmp_val3 = dpix_val; sprpix_val = pixdata.apixels[spix]; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = CONVERT_RGB (ham_linebuf[spix]); sprpix_val = dpix_val; tmp_val = merge_2pixel32 (tmp_val, tmp_val2); tmp_val2 = merge_2pixel32 (tmp_val3, dpix_val); dpix_val = merge_2pixel32 (tmp_val, tmp_val2); spix++; } out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); if (sprcol) out_val = colors_for_drawing.acolors[sprcol]; } buf[dpix++] = out_val; } } else if (bpldualpf) { int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga; int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1; while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; { uae_u8 val = lookup[spix_val]; if (lookup_no[spix_val]) val += dblpfofs[bpldualpf2of]; val ^= xor_val; dpix_val = colors_for_drawing.acolors[val]; } { uae_u32 tmp_val, tmp_val2, tmp_val3; spix++; tmp_val = dpix_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; { uae_u8 val = lookup[spix_val]; if (lookup_no[spix_val]) val += dblpfofs[bpldualpf2of]; val ^= xor_val; dpix_val = colors_for_drawing.acolors[val]; } spix++; tmp_val2 = dpix_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; { uae_u8 val = lookup[spix_val]; if (lookup_no[spix_val]) val += dblpfofs[bpldualpf2of]; val ^= xor_val; dpix_val = colors_for_drawing.acolors[val]; } spix++; tmp_val3 = dpix_val; spix_val = pixdata.apixels[spix]; sprpix_val = spix_val; { uae_u8 val = lookup[spix_val]; if (lookup_no[spix_val]) val += dblpfofs[bpldualpf2of]; val ^= xor_val; dpix_val = colors_for_drawing.acolors[val]; } tmp_val = merge_2pixel32 (tmp_val, tmp_val2); tmp_val2 = merge_2pixel32 (tmp_val3, dpix_val); dpix_val = merge_2pixel32 (tmp_val, tmp_val2); spix++; } out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix + 0, 1, sprpix_val, 1); if (sprcol) out_val = colors_for_drawing.acolors[sprcol]; } buf[dpix++] = out_val; } } else if (bplehb) { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; sprpix_val = pixdata.apixels[spix]; spix_val = pixdata.apixels[spix] ^ xor_val; if (spix_val >= 32 && spix_val < 64) { unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F; dpix_val = CONVERT_RGB (c); } else dpix_val = colors_for_drawing.acolors[spix_val]; { uae_u32 tmp_val, tmp_val2, tmp_val3; spix++; tmp_val = dpix_val; sprpix_val = pixdata.apixels[spix]; spix_val = pixdata.apixels[spix] ^ xor_val; if (spix_val >= 32 && spix_val < 64) { unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F; dpix_val = CONVERT_RGB (c); } else dpix_val = colors_for_drawing.acolors[spix_val]; spix++; tmp_val2 = dpix_val; sprpix_val = pixdata.apixels[spix]; spix_val = pixdata.apixels[spix] ^ xor_val; if (spix_val >= 32 && spix_val < 64) { unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F; dpix_val = CONVERT_RGB (c); } else dpix_val = colors_for_drawing.acolors[spix_val]; spix++; tmp_val3 = dpix_val; sprpix_val = pixdata.apixels[spix]; spix_val = pixdata.apixels[spix] ^ xor_val; if (spix_val >= 32 && spix_val < 64) { unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F; dpix_val = CONVERT_RGB (c); } else dpix_val = colors_for_drawing.acolors[spix_val]; tmp_val = merge_2pixel32 (tmp_val, tmp_val2); tmp_val2 = merge_2pixel32 (tmp_val3, dpix_val); dpix_val = merge_2pixel32 (tmp_val, tmp_val2); spix++; } out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); if (sprcol) out_val = colors_for_drawing.acolors[sprcol]; } buf[dpix++] = out_val; } } else { while (dpix < dpix_end) { uae_u32 sprpix_val; uae_u32 spix_val; uae_u32 dpix_val; uae_u32 out_val; sprpix_val = pixdata.apixels[spix]; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = colors_for_drawing.acolors[spix_val]; { uae_u32 tmp_val, tmp_val2, tmp_val3; spix++; tmp_val = dpix_val; sprpix_val = pixdata.apixels[spix]; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = colors_for_drawing.acolors[spix_val]; spix++; tmp_val2 = dpix_val; sprpix_val = pixdata.apixels[spix]; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = colors_for_drawing.acolors[spix_val]; spix++; tmp_val3 = dpix_val; sprpix_val = pixdata.apixels[spix]; spix_val = pixdata.apixels[spix] ^ xor_val; dpix_val = colors_for_drawing.acolors[spix_val]; tmp_val = merge_2pixel32 (tmp_val, tmp_val2); tmp_val2 = merge_2pixel32 (tmp_val3, dpix_val); dpix_val = merge_2pixel32 (tmp_val, tmp_val2); spix++; } out_val = dpix_val; if (spritepixels[dpix].data) { sprcol = render_sprites (dpix + 0, 0, sprpix_val, 1); if (sprcol) out_val = colors_for_drawing.acolors[sprcol]; } buf[dpix++] = out_val; } } return spix; } #endif fs-uae-2.2.3+dfsg/gensrc/cpuemu_22.cpp0000644000175000017500000362644512162366654017666 0ustar glaubitzglaubitz#include "sysconfig.h" #include "sysdeps.h" #include "options.h" #include "uae/memory.h" #include "custom.h" #include "events.h" #include "newcpu.h" #include "cpu_prefetch.h" #include "cputbl.h" #include "cpummu.h" #define CPUFUNC(x) x##_ff #define SET_CFLG_ALWAYS(x) SET_CFLG(x) #define SET_NFLG_ALWAYS(x) SET_NFLG(x) #ifdef NOFLAGS #include "noflags.h" #endif #if !defined(PART_1) && !defined(PART_2) && !defined(PART_3) && !defined(PART_4) && !defined(PART_5) && !defined(PART_6) && !defined(PART_7) && !defined(PART_8) #define PART_1 1 #define PART_2 1 #define PART_3 1 #define PART_4 1 #define PART_5 1 #define PART_6 1 #define PART_7 1 #define PART_8 1 #endif #ifdef PART_1 /* OR.B #.B,Dn */ void REGPARAM2 CPUFUNC(op_0000_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* OR.B #.B,(An) */ void REGPARAM2 CPUFUNC(op_0010_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* OR.B #.B,(An)+ */ void REGPARAM2 CPUFUNC(op_0018_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* OR.B #.B,-(An) */ void REGPARAM2 CPUFUNC(op_0020_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* OR.B #.B,(d16,An) */ void REGPARAM2 CPUFUNC(op_0028_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* OR.B #.B,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_0030_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s8 dst = x_get_byte (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* OR.B #.B,(xxx).W */ void REGPARAM2 CPUFUNC(op_0038_22)(uae_u32 opcode) { {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* OR.B #.B,(xxx).L */ void REGPARAM2 CPUFUNC(op_0039_22)(uae_u32 opcode) { {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } /* ORSR.B #.W */ void REGPARAM2 CPUFUNC(op_003c_22)(uae_u32 opcode) { { MakeSR (); { uae_s16 src = get_word_ce020_prefetch (2); src &= 0xFF; regs.sr |= src; MakeFromSR (); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* OR.W #.W,Dn */ void REGPARAM2 CPUFUNC(op_0040_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* OR.W #.W,(An) */ void REGPARAM2 CPUFUNC(op_0050_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* OR.W #.W,(An)+ */ void REGPARAM2 CPUFUNC(op_0058_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) += 2; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* OR.W #.W,-(An) */ void REGPARAM2 CPUFUNC(op_0060_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) = dsta; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* OR.W #.W,(d16,An) */ void REGPARAM2 CPUFUNC(op_0068_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s16 dst = x_get_word (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* OR.W #.W,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_0070_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s16 dst = x_get_word (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* OR.W #.W,(xxx).W */ void REGPARAM2 CPUFUNC(op_0078_22)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s16 dst = x_get_word (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* OR.W #.W,(xxx).L */ void REGPARAM2 CPUFUNC(op_0079_22)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (4); { uae_s16 dst = x_get_word (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } /* ORSR.W #.W */ void REGPARAM2 CPUFUNC(op_007c_22)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel8990; } { MakeSR (); { uae_s16 src = get_word_ce020_prefetch (2); regs.sr |= src; MakeFromSR (); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); endlabel8990: ; return; } /* OR.L #.L,Dn */ void REGPARAM2 CPUFUNC(op_0080_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* OR.L #.L,(An) */ void REGPARAM2 CPUFUNC(op_0090_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* OR.L #.L,(An)+ */ void REGPARAM2 CPUFUNC(op_0098_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) += 4; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* OR.L #.L,-(An) */ void REGPARAM2 CPUFUNC(op_00a0_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) = dsta; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* OR.L #.L,(d16,An) */ void REGPARAM2 CPUFUNC(op_00a8_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (6); { uae_s32 dst = x_get_long (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } /* OR.L #.L,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_00b0_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (6); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s32 dst = x_get_long (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* OR.L #.L,(xxx).W */ void REGPARAM2 CPUFUNC(op_00b8_22)(uae_u32 opcode) { {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (6); { uae_s32 dst = x_get_long (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } /* OR.L #.L,(xxx).L */ void REGPARAM2 CPUFUNC(op_00b9_22)(uae_u32 opcode) { {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (6); { uae_s32 dst = x_get_long (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (10); return; } /* CHK2.B #.W,(An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_00d0_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = (uae_s32)(uae_s8)x_get_byte (dsta); upper = (uae_s32)(uae_s8)x_get_byte (dsta + 1); if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s8)reg; SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel8999; } } }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); endlabel8999: ; return; } #endif /* CHK2.B #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_00e8_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = (uae_s32)(uae_s8)x_get_byte (dsta); upper = (uae_s32)(uae_s8)x_get_byte (dsta + 1); if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s8)reg; SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel9000; } } }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); endlabel9000: ; return; } #endif /* CHK2.B #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_00f0_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = (uae_s32)(uae_s8)x_get_byte (dsta); upper = (uae_s32)(uae_s8)x_get_byte (dsta + 1); if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s8)reg; SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel9001; } } }}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9001: ; return; } #endif /* CHK2.B #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_00f8_22)(uae_u32 opcode) { {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = (uae_s32)(uae_s8)x_get_byte (dsta); upper = (uae_s32)(uae_s8)x_get_byte (dsta + 1); if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s8)reg; SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel9002; } } }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); endlabel9002: ; return; } #endif /* CHK2.B #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_00f9_22)(uae_u32 opcode) { {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (4); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = (uae_s32)(uae_s8)x_get_byte (dsta); upper = (uae_s32)(uae_s8)x_get_byte (dsta + 1); if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s8)reg; SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel9003; } } }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); endlabel9003: ; return; } #endif /* CHK2.B #.W,(d16,PC) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_00fa_22)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_word_ce020_prefetch (4); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = (uae_s32)(uae_s8)x_get_byte (dsta); upper = (uae_s32)(uae_s8)x_get_byte (dsta + 1); if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s8)reg; SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel9004; } } }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); endlabel9004: ; return; } #endif /* CHK2.B #.W,(d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_00fb_22)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr tmppc; uaecptr dsta; m68k_incpc (4); { tmppc = m68k_getpc (); dsta = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = (uae_s32)(uae_s8)x_get_byte (dsta); upper = (uae_s32)(uae_s8)x_get_byte (dsta + 1); if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s8)reg; SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel9005; } } }}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9005: ; return; } #endif /* BTST.L Dn,Dn */ void REGPARAM2 CPUFUNC(op_0100_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= 31; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* MVPMR.W (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_0108_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; { uaecptr memp = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_u16 val = (x_get_byte (memp) << 8) + x_get_byte (memp + 2); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* BTST.B Dn,(An) */ void REGPARAM2 CPUFUNC(op_0110_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* BTST.B Dn,(An)+ */ void REGPARAM2 CPUFUNC(op_0118_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* BTST.B Dn,-(An) */ void REGPARAM2 CPUFUNC(op_0120_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* BTST.B Dn,(d16,An) */ void REGPARAM2 CPUFUNC(op_0128_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* BTST.B Dn,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_0130_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* BTST.B Dn,(xxx).W */ void REGPARAM2 CPUFUNC(op_0138_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* BTST.B Dn,(xxx).L */ void REGPARAM2 CPUFUNC(op_0139_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* BTST.B Dn,(d16,PC) */ void REGPARAM2 CPUFUNC(op_013a_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = 2; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_getpc () + 2; dsta += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* BTST.B Dn,(d8,PC,Xn) */ void REGPARAM2 CPUFUNC(op_013b_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = 3; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr tmppc; uaecptr dsta; m68k_incpc (2); { tmppc = m68k_getpc (); dsta = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* BTST.B Dn,#.B */ void REGPARAM2 CPUFUNC(op_013c_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = (uae_u8)get_word_ce020_prefetch (2); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* BCHG.L Dn,Dn */ void REGPARAM2 CPUFUNC(op_0140_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= 31; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); m68k_dreg (regs, dstreg) = (dst); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* MVPMR.L (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_0148_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; { uaecptr memp = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_u32 val = (x_get_byte (memp) << 24) + (x_get_byte (memp + 2) << 16) + (x_get_byte (memp + 4) << 8) + x_get_byte (memp + 6); m68k_dreg (regs, dstreg) = (val); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* BCHG.B Dn,(An) */ void REGPARAM2 CPUFUNC(op_0150_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* BCHG.B Dn,(An)+ */ void REGPARAM2 CPUFUNC(op_0158_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* BCHG.B Dn,-(An) */ void REGPARAM2 CPUFUNC(op_0160_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* BCHG.B Dn,(d16,An) */ void REGPARAM2 CPUFUNC(op_0168_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* BCHG.B Dn,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_0170_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s8 dst = x_get_byte (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); x_put_byte (dsta, dst); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* BCHG.B Dn,(xxx).W */ void REGPARAM2 CPUFUNC(op_0178_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* BCHG.B Dn,(xxx).L */ void REGPARAM2 CPUFUNC(op_0179_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* BCHG.B Dn,(d16,PC) */ void REGPARAM2 CPUFUNC(op_017a_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = 2; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_getpc () + 2; dsta += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* BCHG.B Dn,(d8,PC,Xn) */ void REGPARAM2 CPUFUNC(op_017b_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = 3; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr tmppc; uaecptr dsta; m68k_incpc (2); { tmppc = m68k_getpc (); dsta = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s8 dst = x_get_byte (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); x_put_byte (dsta, dst); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* BCLR.L Dn,Dn */ void REGPARAM2 CPUFUNC(op_0180_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= 31; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); m68k_dreg (regs, dstreg) = (dst); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* MVPRM.W Dn,(d16,An) */ void REGPARAM2 CPUFUNC(op_0188_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); uaecptr memp = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); x_put_byte (memp, src >> 8); x_put_byte (memp + 2, src); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* BCLR.B Dn,(An) */ void REGPARAM2 CPUFUNC(op_0190_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* BCLR.B Dn,(An)+ */ void REGPARAM2 CPUFUNC(op_0198_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* BCLR.B Dn,-(An) */ void REGPARAM2 CPUFUNC(op_01a0_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* BCLR.B Dn,(d16,An) */ void REGPARAM2 CPUFUNC(op_01a8_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* BCLR.B Dn,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_01b0_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); x_put_byte (dsta, dst); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* BCLR.B Dn,(xxx).W */ void REGPARAM2 CPUFUNC(op_01b8_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* BCLR.B Dn,(xxx).L */ void REGPARAM2 CPUFUNC(op_01b9_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* BCLR.B Dn,(d16,PC) */ void REGPARAM2 CPUFUNC(op_01ba_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = 2; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_getpc () + 2; dsta += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* BCLR.B Dn,(d8,PC,Xn) */ void REGPARAM2 CPUFUNC(op_01bb_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = 3; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr tmppc; uaecptr dsta; m68k_incpc (2); { tmppc = m68k_getpc (); dsta = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); x_put_byte (dsta, dst); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* BSET.L Dn,Dn */ void REGPARAM2 CPUFUNC(op_01c0_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= 31; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); m68k_dreg (regs, dstreg) = (dst); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* MVPRM.L Dn,(d16,An) */ void REGPARAM2 CPUFUNC(op_01c8_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); uaecptr memp = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); x_put_byte (memp, src >> 24); x_put_byte (memp + 2, src >> 16); x_put_byte (memp + 4, src >> 8); x_put_byte (memp + 6, src); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* BSET.B Dn,(An) */ void REGPARAM2 CPUFUNC(op_01d0_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* BSET.B Dn,(An)+ */ void REGPARAM2 CPUFUNC(op_01d8_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* BSET.B Dn,-(An) */ void REGPARAM2 CPUFUNC(op_01e0_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* BSET.B Dn,(d16,An) */ void REGPARAM2 CPUFUNC(op_01e8_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* BSET.B Dn,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_01f0_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); x_put_byte (dsta, dst); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* BSET.B Dn,(xxx).W */ void REGPARAM2 CPUFUNC(op_01f8_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* BSET.B Dn,(xxx).L */ void REGPARAM2 CPUFUNC(op_01f9_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* BSET.B Dn,(d16,PC) */ void REGPARAM2 CPUFUNC(op_01fa_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = 2; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_getpc () + 2; dsta += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* BSET.B Dn,(d8,PC,Xn) */ void REGPARAM2 CPUFUNC(op_01fb_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = 3; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr tmppc; uaecptr dsta; m68k_incpc (2); { tmppc = m68k_getpc (); dsta = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); x_put_byte (dsta, dst); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* AND.B #.B,Dn */ void REGPARAM2 CPUFUNC(op_0200_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* AND.B #.B,(An) */ void REGPARAM2 CPUFUNC(op_0210_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* AND.B #.B,(An)+ */ void REGPARAM2 CPUFUNC(op_0218_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* AND.B #.B,-(An) */ void REGPARAM2 CPUFUNC(op_0220_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* AND.B #.B,(d16,An) */ void REGPARAM2 CPUFUNC(op_0228_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* AND.B #.B,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_0230_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s8 dst = x_get_byte (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* AND.B #.B,(xxx).W */ void REGPARAM2 CPUFUNC(op_0238_22)(uae_u32 opcode) { {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* AND.B #.B,(xxx).L */ void REGPARAM2 CPUFUNC(op_0239_22)(uae_u32 opcode) { {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } /* ANDSR.B #.W */ void REGPARAM2 CPUFUNC(op_023c_22)(uae_u32 opcode) { { MakeSR (); { uae_s16 src = get_word_ce020_prefetch (2); src |= 0xFF00; regs.sr &= src; MakeFromSR (); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* AND.W #.W,Dn */ void REGPARAM2 CPUFUNC(op_0240_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* AND.W #.W,(An) */ void REGPARAM2 CPUFUNC(op_0250_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* AND.W #.W,(An)+ */ void REGPARAM2 CPUFUNC(op_0258_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) += 2; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* AND.W #.W,-(An) */ void REGPARAM2 CPUFUNC(op_0260_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) = dsta; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* AND.W #.W,(d16,An) */ void REGPARAM2 CPUFUNC(op_0268_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s16 dst = x_get_word (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* AND.W #.W,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_0270_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s16 dst = x_get_word (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* AND.W #.W,(xxx).W */ void REGPARAM2 CPUFUNC(op_0278_22)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s16 dst = x_get_word (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* AND.W #.W,(xxx).L */ void REGPARAM2 CPUFUNC(op_0279_22)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (4); { uae_s16 dst = x_get_word (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } /* ANDSR.W #.W */ void REGPARAM2 CPUFUNC(op_027c_22)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel9068; } { MakeSR (); { uae_s16 src = get_word_ce020_prefetch (2); regs.sr &= src; MakeFromSR (); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); endlabel9068: ; return; } /* AND.L #.L,Dn */ void REGPARAM2 CPUFUNC(op_0280_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* AND.L #.L,(An) */ void REGPARAM2 CPUFUNC(op_0290_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* AND.L #.L,(An)+ */ void REGPARAM2 CPUFUNC(op_0298_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) += 4; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* AND.L #.L,-(An) */ void REGPARAM2 CPUFUNC(op_02a0_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) = dsta; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* AND.L #.L,(d16,An) */ void REGPARAM2 CPUFUNC(op_02a8_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (6); { uae_s32 dst = x_get_long (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } /* AND.L #.L,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_02b0_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (6); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s32 dst = x_get_long (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* AND.L #.L,(xxx).W */ void REGPARAM2 CPUFUNC(op_02b8_22)(uae_u32 opcode) { {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (6); { uae_s32 dst = x_get_long (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } /* AND.L #.L,(xxx).L */ void REGPARAM2 CPUFUNC(op_02b9_22)(uae_u32 opcode) { {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (6); { uae_s32 dst = x_get_long (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (10); return; } /* CHK2.W #.W,(An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_02d0_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = (uae_s32)(uae_s16)x_get_word (dsta); upper = (uae_s32)(uae_s16)x_get_word (dsta + 2); if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s16)reg; SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel9077; } } }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); endlabel9077: ; return; } #endif /* CHK2.W #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_02e8_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = (uae_s32)(uae_s16)x_get_word (dsta); upper = (uae_s32)(uae_s16)x_get_word (dsta + 2); if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s16)reg; SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel9078; } } }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); endlabel9078: ; return; } #endif /* CHK2.W #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_02f0_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = (uae_s32)(uae_s16)x_get_word (dsta); upper = (uae_s32)(uae_s16)x_get_word (dsta + 2); if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s16)reg; SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel9079; } } }}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9079: ; return; } #endif /* CHK2.W #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_02f8_22)(uae_u32 opcode) { {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = (uae_s32)(uae_s16)x_get_word (dsta); upper = (uae_s32)(uae_s16)x_get_word (dsta + 2); if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s16)reg; SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel9080; } } }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); endlabel9080: ; return; } #endif /* CHK2.W #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_02f9_22)(uae_u32 opcode) { {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (4); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = (uae_s32)(uae_s16)x_get_word (dsta); upper = (uae_s32)(uae_s16)x_get_word (dsta + 2); if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s16)reg; SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel9081; } } }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); endlabel9081: ; return; } #endif /* CHK2.W #.W,(d16,PC) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_02fa_22)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_word_ce020_prefetch (4); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = (uae_s32)(uae_s16)x_get_word (dsta); upper = (uae_s32)(uae_s16)x_get_word (dsta + 2); if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s16)reg; SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel9082; } } }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); endlabel9082: ; return; } #endif /* CHK2.W #.W,(d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_02fb_22)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr tmppc; uaecptr dsta; m68k_incpc (4); { tmppc = m68k_getpc (); dsta = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = (uae_s32)(uae_s16)x_get_word (dsta); upper = (uae_s32)(uae_s16)x_get_word (dsta + 2); if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s16)reg; SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel9083; } } }}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9083: ; return; } #endif /* SUB.B #.B,Dn */ void REGPARAM2 CPUFUNC(op_0400_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUB.B #.B,(An) */ void REGPARAM2 CPUFUNC(op_0410_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUB.B #.B,(An)+ */ void REGPARAM2 CPUFUNC(op_0418_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUB.B #.B,-(An) */ void REGPARAM2 CPUFUNC(op_0420_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUB.B #.B,(d16,An) */ void REGPARAM2 CPUFUNC(op_0428_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* SUB.B #.B,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_0430_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* SUB.B #.B,(xxx).W */ void REGPARAM2 CPUFUNC(op_0438_22)(uae_u32 opcode) { {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* SUB.B #.B,(xxx).L */ void REGPARAM2 CPUFUNC(op_0439_22)(uae_u32 opcode) { {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } /* SUB.W #.W,Dn */ void REGPARAM2 CPUFUNC(op_0440_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUB.W #.W,(An) */ void REGPARAM2 CPUFUNC(op_0450_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUB.W #.W,(An)+ */ void REGPARAM2 CPUFUNC(op_0458_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) += 2; {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUB.W #.W,-(An) */ void REGPARAM2 CPUFUNC(op_0460_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUB.W #.W,(d16,An) */ void REGPARAM2 CPUFUNC(op_0468_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* SUB.W #.W,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_0470_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* SUB.W #.W,(xxx).W */ void REGPARAM2 CPUFUNC(op_0478_22)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* SUB.W #.W,(xxx).L */ void REGPARAM2 CPUFUNC(op_0479_22)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (4); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } /* SUB.L #.L,Dn */ void REGPARAM2 CPUFUNC(op_0480_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* SUB.L #.L,(An) */ void REGPARAM2 CPUFUNC(op_0490_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* SUB.L #.L,(An)+ */ void REGPARAM2 CPUFUNC(op_0498_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) += 4; {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* SUB.L #.L,-(An) */ void REGPARAM2 CPUFUNC(op_04a0_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* SUB.L #.L,(d16,An) */ void REGPARAM2 CPUFUNC(op_04a8_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (6); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } /* SUB.L #.L,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_04b0_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (6); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* SUB.L #.L,(xxx).W */ void REGPARAM2 CPUFUNC(op_04b8_22)(uae_u32 opcode) { {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (6); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } /* SUB.L #.L,(xxx).L */ void REGPARAM2 CPUFUNC(op_04b9_22)(uae_u32 opcode) { {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (6); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (10); return; } /* CHK2.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_04d0_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = x_get_long (dsta); upper = x_get_long (dsta + 4); SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel9108; } } }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); endlabel9108: ; return; } #endif /* CHK2.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_04e8_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = x_get_long (dsta); upper = x_get_long (dsta + 4); SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel9109; } } }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); endlabel9109: ; return; } #endif /* CHK2.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_04f0_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = x_get_long (dsta); upper = x_get_long (dsta + 4); SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel9110; } } }}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9110: ; return; } #endif /* CHK2.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_04f8_22)(uae_u32 opcode) { {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = x_get_long (dsta); upper = x_get_long (dsta + 4); SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel9111; } } }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); endlabel9111: ; return; } #endif /* CHK2.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_04f9_22)(uae_u32 opcode) { {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (4); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = x_get_long (dsta); upper = x_get_long (dsta + 4); SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel9112; } } }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); endlabel9112: ; return; } #endif /* CHK2.L #.W,(d16,PC) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_04fa_22)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_word_ce020_prefetch (4); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = x_get_long (dsta); upper = x_get_long (dsta + 4); SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel9113; } } }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); endlabel9113: ; return; } #endif /* CHK2.L #.W,(d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_04fb_22)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr tmppc; uaecptr dsta; m68k_incpc (4); { tmppc = m68k_getpc (); dsta = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = x_get_long (dsta); upper = x_get_long (dsta + 4); SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel9114; } } }}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9114: ; return; } #endif /* ADD.B #.B,Dn */ void REGPARAM2 CPUFUNC(op_0600_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADD.B #.B,(An) */ void REGPARAM2 CPUFUNC(op_0610_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADD.B #.B,(An)+ */ void REGPARAM2 CPUFUNC(op_0618_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADD.B #.B,-(An) */ void REGPARAM2 CPUFUNC(op_0620_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADD.B #.B,(d16,An) */ void REGPARAM2 CPUFUNC(op_0628_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* ADD.B #.B,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_0630_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* ADD.B #.B,(xxx).W */ void REGPARAM2 CPUFUNC(op_0638_22)(uae_u32 opcode) { {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* ADD.B #.B,(xxx).L */ void REGPARAM2 CPUFUNC(op_0639_22)(uae_u32 opcode) { {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } /* ADD.W #.W,Dn */ void REGPARAM2 CPUFUNC(op_0640_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADD.W #.W,(An) */ void REGPARAM2 CPUFUNC(op_0650_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADD.W #.W,(An)+ */ void REGPARAM2 CPUFUNC(op_0658_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) += 2; {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADD.W #.W,-(An) */ void REGPARAM2 CPUFUNC(op_0660_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADD.W #.W,(d16,An) */ void REGPARAM2 CPUFUNC(op_0668_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* ADD.W #.W,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_0670_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* ADD.W #.W,(xxx).W */ void REGPARAM2 CPUFUNC(op_0678_22)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* ADD.W #.W,(xxx).L */ void REGPARAM2 CPUFUNC(op_0679_22)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (4); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } /* ADD.L #.L,Dn */ void REGPARAM2 CPUFUNC(op_0680_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* ADD.L #.L,(An) */ void REGPARAM2 CPUFUNC(op_0690_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* ADD.L #.L,(An)+ */ void REGPARAM2 CPUFUNC(op_0698_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) += 4; {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* ADD.L #.L,-(An) */ void REGPARAM2 CPUFUNC(op_06a0_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* ADD.L #.L,(d16,An) */ void REGPARAM2 CPUFUNC(op_06a8_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (6); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } /* ADD.L #.L,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_06b0_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (6); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* ADD.L #.L,(xxx).W */ void REGPARAM2 CPUFUNC(op_06b8_22)(uae_u32 opcode) { {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (6); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } /* ADD.L #.L,(xxx).L */ void REGPARAM2 CPUFUNC(op_06b9_22)(uae_u32 opcode) { {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (6); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (10); return; } /* RTM.L Dn */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_06c0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); { m68k_incpc (2); op_illg (opcode); } regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* RTM.L An */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_06c8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); { m68k_incpc (2); op_illg (opcode); } regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* CALLM.L (An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_06d0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); { m68k_incpc (2); op_illg (opcode); } regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* CALLM.L (d16,An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_06e8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); { m68k_incpc (2); op_illg (opcode); } regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* CALLM.L (d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_06f0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); { m68k_incpc (2); op_illg (opcode); } regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* CALLM.L (xxx).W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_06f8_22)(uae_u32 opcode) { { m68k_incpc (2); op_illg (opcode); } regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* CALLM.L (xxx).L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_06f9_22)(uae_u32 opcode) { { m68k_incpc (2); op_illg (opcode); } regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* CALLM.L (d16,PC) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_06fa_22)(uae_u32 opcode) { { m68k_incpc (2); op_illg (opcode); } regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* CALLM.L (d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_06fb_22)(uae_u32 opcode) { { m68k_incpc (2); op_illg (opcode); } regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* BTST.L #.W,Dn */ void REGPARAM2 CPUFUNC(op_0800_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= 31; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* BTST.B #.W,(An) */ void REGPARAM2 CPUFUNC(op_0810_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* BTST.B #.W,(An)+ */ void REGPARAM2 CPUFUNC(op_0818_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* BTST.B #.W,-(An) */ void REGPARAM2 CPUFUNC(op_0820_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* BTST.B #.W,(d16,An) */ void REGPARAM2 CPUFUNC(op_0828_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* BTST.B #.W,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_0830_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* BTST.B #.W,(xxx).W */ void REGPARAM2 CPUFUNC(op_0838_22)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* BTST.B #.W,(xxx).L */ void REGPARAM2 CPUFUNC(op_0839_22)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } /* BTST.B #.W,(d16,PC) */ void REGPARAM2 CPUFUNC(op_083a_22)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* BTST.B #.W,(d8,PC,Xn) */ void REGPARAM2 CPUFUNC(op_083b_22)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr tmppc; uaecptr dsta; m68k_incpc (4); { tmppc = m68k_getpc (); dsta = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* BTST.B #.W,#.B */ void REGPARAM2 CPUFUNC(op_083c_22)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); { uae_s8 dst = (uae_u8)get_word_ce020_prefetch (4); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* BCHG.L #.W,Dn */ void REGPARAM2 CPUFUNC(op_0840_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= 31; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); m68k_dreg (regs, dstreg) = (dst); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* BCHG.B #.W,(An) */ void REGPARAM2 CPUFUNC(op_0850_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* BCHG.B #.W,(An)+ */ void REGPARAM2 CPUFUNC(op_0858_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* BCHG.B #.W,-(An) */ void REGPARAM2 CPUFUNC(op_0860_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* BCHG.B #.W,(d16,An) */ void REGPARAM2 CPUFUNC(op_0868_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* BCHG.B #.W,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_0870_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s8 dst = x_get_byte (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); x_put_byte (dsta, dst); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* BCHG.B #.W,(xxx).W */ void REGPARAM2 CPUFUNC(op_0878_22)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* BCHG.B #.W,(xxx).L */ void REGPARAM2 CPUFUNC(op_0879_22)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } /* BCHG.B #.W,(d16,PC) */ void REGPARAM2 CPUFUNC(op_087a_22)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* BCHG.B #.W,(d8,PC,Xn) */ void REGPARAM2 CPUFUNC(op_087b_22)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr tmppc; uaecptr dsta; m68k_incpc (4); { tmppc = m68k_getpc (); dsta = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s8 dst = x_get_byte (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); x_put_byte (dsta, dst); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* BCLR.L #.W,Dn */ void REGPARAM2 CPUFUNC(op_0880_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= 31; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); m68k_dreg (regs, dstreg) = (dst); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* BCLR.B #.W,(An) */ void REGPARAM2 CPUFUNC(op_0890_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* BCLR.B #.W,(An)+ */ void REGPARAM2 CPUFUNC(op_0898_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* BCLR.B #.W,-(An) */ void REGPARAM2 CPUFUNC(op_08a0_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* BCLR.B #.W,(d16,An) */ void REGPARAM2 CPUFUNC(op_08a8_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* BCLR.B #.W,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_08b0_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); x_put_byte (dsta, dst); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* BCLR.B #.W,(xxx).W */ void REGPARAM2 CPUFUNC(op_08b8_22)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* BCLR.B #.W,(xxx).L */ void REGPARAM2 CPUFUNC(op_08b9_22)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } /* BCLR.B #.W,(d16,PC) */ void REGPARAM2 CPUFUNC(op_08ba_22)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* BCLR.B #.W,(d8,PC,Xn) */ void REGPARAM2 CPUFUNC(op_08bb_22)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr tmppc; uaecptr dsta; m68k_incpc (4); { tmppc = m68k_getpc (); dsta = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); x_put_byte (dsta, dst); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* BSET.L #.W,Dn */ void REGPARAM2 CPUFUNC(op_08c0_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= 31; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); m68k_dreg (regs, dstreg) = (dst); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* BSET.B #.W,(An) */ void REGPARAM2 CPUFUNC(op_08d0_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* BSET.B #.W,(An)+ */ void REGPARAM2 CPUFUNC(op_08d8_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* BSET.B #.W,-(An) */ void REGPARAM2 CPUFUNC(op_08e0_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* BSET.B #.W,(d16,An) */ void REGPARAM2 CPUFUNC(op_08e8_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* BSET.B #.W,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_08f0_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); x_put_byte (dsta, dst); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* BSET.B #.W,(xxx).W */ void REGPARAM2 CPUFUNC(op_08f8_22)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* BSET.B #.W,(xxx).L */ void REGPARAM2 CPUFUNC(op_08f9_22)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } /* BSET.B #.W,(d16,PC) */ void REGPARAM2 CPUFUNC(op_08fa_22)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); x_put_byte (dsta, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* BSET.B #.W,(d8,PC,Xn) */ void REGPARAM2 CPUFUNC(op_08fb_22)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr tmppc; uaecptr dsta; m68k_incpc (4); { tmppc = m68k_getpc (); dsta = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); x_put_byte (dsta, dst); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* EOR.B #.B,Dn */ void REGPARAM2 CPUFUNC(op_0a00_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uae_s8 dst = m68k_dreg (regs, dstreg); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* EOR.B #.B,(An) */ void REGPARAM2 CPUFUNC(op_0a10_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* EOR.B #.B,(An)+ */ void REGPARAM2 CPUFUNC(op_0a18_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* EOR.B #.B,-(An) */ void REGPARAM2 CPUFUNC(op_0a20_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* EOR.B #.B,(d16,An) */ void REGPARAM2 CPUFUNC(op_0a28_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* EOR.B #.B,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_0a30_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s8 dst = x_get_byte (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* EOR.B #.B,(xxx).W */ void REGPARAM2 CPUFUNC(op_0a38_22)(uae_u32 opcode) { {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* EOR.B #.B,(xxx).L */ void REGPARAM2 CPUFUNC(op_0a39_22)(uae_u32 opcode) { {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } /* EORSR.B #.W */ void REGPARAM2 CPUFUNC(op_0a3c_22)(uae_u32 opcode) { { MakeSR (); { uae_s16 src = get_word_ce020_prefetch (2); src &= 0xFF; regs.sr ^= src; MakeFromSR (); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* EOR.W #.W,Dn */ void REGPARAM2 CPUFUNC(op_0a40_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uae_s16 dst = m68k_dreg (regs, dstreg); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* EOR.W #.W,(An) */ void REGPARAM2 CPUFUNC(op_0a50_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* EOR.W #.W,(An)+ */ void REGPARAM2 CPUFUNC(op_0a58_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) += 2; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* EOR.W #.W,-(An) */ void REGPARAM2 CPUFUNC(op_0a60_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) = dsta; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* EOR.W #.W,(d16,An) */ void REGPARAM2 CPUFUNC(op_0a68_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s16 dst = x_get_word (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* EOR.W #.W,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_0a70_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s16 dst = x_get_word (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* EOR.W #.W,(xxx).W */ void REGPARAM2 CPUFUNC(op_0a78_22)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s16 dst = x_get_word (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* EOR.W #.W,(xxx).L */ void REGPARAM2 CPUFUNC(op_0a79_22)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (4); { uae_s16 dst = x_get_word (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } /* EORSR.W #.W */ void REGPARAM2 CPUFUNC(op_0a7c_22)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel9206; } { MakeSR (); { uae_s16 src = get_word_ce020_prefetch (2); regs.sr ^= src; MakeFromSR (); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); endlabel9206: ; return; } /* EOR.L #.L,Dn */ void REGPARAM2 CPUFUNC(op_0a80_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uae_s32 dst = m68k_dreg (regs, dstreg); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } #endif #ifdef PART_2 /* EOR.L #.L,(An) */ void REGPARAM2 CPUFUNC(op_0a90_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* EOR.L #.L,(An)+ */ void REGPARAM2 CPUFUNC(op_0a98_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) += 4; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* EOR.L #.L,-(An) */ void REGPARAM2 CPUFUNC(op_0aa0_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) = dsta; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* EOR.L #.L,(d16,An) */ void REGPARAM2 CPUFUNC(op_0aa8_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (6); { uae_s32 dst = x_get_long (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } /* EOR.L #.L,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_0ab0_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (6); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s32 dst = x_get_long (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* EOR.L #.L,(xxx).W */ void REGPARAM2 CPUFUNC(op_0ab8_22)(uae_u32 opcode) { {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (6); { uae_s32 dst = x_get_long (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } /* EOR.L #.L,(xxx).L */ void REGPARAM2 CPUFUNC(op_0ab9_22)(uae_u32 opcode) { {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (6); { uae_s32 dst = x_get_long (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (10); return; } /* CAS.B #.W,(An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0ad0_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(m68k_dreg (regs, rc))); { int flgs = ((uae_s8)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(m68k_dreg (regs, rc))) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); m68k_incpc (4); if (GET_ZFLG ()){ x_put_byte (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = (m68k_dreg(regs, rc) & ~0xff) | (dst & 0xff); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* CAS.B #.W,(An)+ */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0ad8_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(m68k_dreg (regs, rc))); { int flgs = ((uae_s8)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(m68k_dreg (regs, rc))) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); m68k_incpc (4); if (GET_ZFLG ()){ x_put_byte (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = (m68k_dreg(regs, rc) & ~0xff) | (dst & 0xff); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* CAS.B #.W,-(An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0ae0_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(m68k_dreg (regs, rc))); { int flgs = ((uae_s8)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(m68k_dreg (regs, rc))) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); m68k_incpc (4); if (GET_ZFLG ()){ x_put_byte (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = (m68k_dreg(regs, rc) & ~0xff) | (dst & 0xff); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* CAS.B #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0ae8_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(m68k_dreg (regs, rc))); { int flgs = ((uae_s8)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(m68k_dreg (regs, rc))) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); m68k_incpc (6); if (GET_ZFLG ()){ x_put_byte (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = (m68k_dreg(regs, rc) & ~0xff) | (dst & 0xff); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* CAS.B #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0af0_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s8 dst = x_get_byte (dsta); { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(m68k_dreg (regs, rc))); { int flgs = ((uae_s8)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(m68k_dreg (regs, rc))) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); if (GET_ZFLG ()){ x_put_byte (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = (m68k_dreg(regs, rc) & ~0xff) | (dst & 0xff); }}}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* CAS.B #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0af8_22)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(m68k_dreg (regs, rc))); { int flgs = ((uae_s8)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(m68k_dreg (regs, rc))) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); m68k_incpc (6); if (GET_ZFLG ()){ x_put_byte (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = (m68k_dreg(regs, rc) & ~0xff) | (dst & 0xff); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* CAS.B #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0af9_22)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(m68k_dreg (regs, rc))); { int flgs = ((uae_s8)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(m68k_dreg (regs, rc))) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); m68k_incpc (8); if (GET_ZFLG ()){ x_put_byte (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = (m68k_dreg(regs, rc) & ~0xff) | (dst & 0xff); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* CMP.B #.B,Dn */ void REGPARAM2 CPUFUNC(op_0c00_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* CMP.B #.B,(An) */ void REGPARAM2 CPUFUNC(op_0c10_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* CMP.B #.B,(An)+ */ void REGPARAM2 CPUFUNC(op_0c18_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* CMP.B #.B,-(An) */ void REGPARAM2 CPUFUNC(op_0c20_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* CMP.B #.B,(d16,An) */ void REGPARAM2 CPUFUNC(op_0c28_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* CMP.B #.B,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_0c30_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* CMP.B #.B,(xxx).W */ void REGPARAM2 CPUFUNC(op_0c38_22)(uae_u32 opcode) { {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* CMP.B #.B,(xxx).L */ void REGPARAM2 CPUFUNC(op_0c39_22)(uae_u32 opcode) { {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } /* CMP.B #.B,(d16,PC) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0c3a_22)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } #endif /* CMP.B #.B,(d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0c3b_22)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr tmppc; uaecptr dsta; m68k_incpc (4); { tmppc = m68k_getpc (); dsta = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* CMP.W #.W,Dn */ void REGPARAM2 CPUFUNC(op_0c40_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* CMP.W #.W,(An) */ void REGPARAM2 CPUFUNC(op_0c50_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* CMP.W #.W,(An)+ */ void REGPARAM2 CPUFUNC(op_0c58_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) += 2; {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* CMP.W #.W,-(An) */ void REGPARAM2 CPUFUNC(op_0c60_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* CMP.W #.W,(d16,An) */ void REGPARAM2 CPUFUNC(op_0c68_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* CMP.W #.W,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_0c70_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* CMP.W #.W,(xxx).W */ void REGPARAM2 CPUFUNC(op_0c78_22)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* CMP.W #.W,(xxx).L */ void REGPARAM2 CPUFUNC(op_0c79_22)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (4); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } /* CMP.W #.W,(d16,PC) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0c7a_22)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } #endif /* CMP.W #.W,(d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0c7b_22)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr tmppc; uaecptr dsta; m68k_incpc (4); { tmppc = m68k_getpc (); dsta = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* CMP.L #.L,Dn */ void REGPARAM2 CPUFUNC(op_0c80_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* CMP.L #.L,(An) */ void REGPARAM2 CPUFUNC(op_0c90_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* CMP.L #.L,(An)+ */ void REGPARAM2 CPUFUNC(op_0c98_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) += 4; {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* CMP.L #.L,-(An) */ void REGPARAM2 CPUFUNC(op_0ca0_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* CMP.L #.L,(d16,An) */ void REGPARAM2 CPUFUNC(op_0ca8_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (6); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } /* CMP.L #.L,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_0cb0_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (6); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* CMP.L #.L,(xxx).W */ void REGPARAM2 CPUFUNC(op_0cb8_22)(uae_u32 opcode) { {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (6); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } /* CMP.L #.L,(xxx).L */ void REGPARAM2 CPUFUNC(op_0cb9_22)(uae_u32 opcode) { {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (6); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (10); return; } /* CMP.L #.L,(d16,PC) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0cba_22)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta = m68k_getpc () + 6; dsta += (uae_s32)(uae_s16)get_word_ce020_prefetch (6); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } #endif /* CMP.L #.L,(d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0cbb_22)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr tmppc; uaecptr dsta; m68k_incpc (6); { tmppc = m68k_getpc (); dsta = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* CAS.W #.W,(An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0cd0_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); if ((dsta & 1) && currprefs.cpu_compatible && get_cpu_model () == 68060) { op_unimpl (); goto endlabel9252; } { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(m68k_dreg (regs, rc))); { int flgs = ((uae_s16)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(m68k_dreg (regs, rc))) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); m68k_incpc (4); if (GET_ZFLG ()){ x_put_word (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = (m68k_dreg(regs, rc) & ~0xffff) | (dst & 0xffff); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9252: ; return; } #endif /* CAS.W #.W,(An)+ */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0cd8_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) += 2; if ((dsta & 1) && currprefs.cpu_compatible && get_cpu_model () == 68060) { op_unimpl (); goto endlabel9253; } { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(m68k_dreg (regs, rc))); { int flgs = ((uae_s16)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(m68k_dreg (regs, rc))) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); m68k_incpc (4); if (GET_ZFLG ()){ x_put_word (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = (m68k_dreg(regs, rc) & ~0xffff) | (dst & 0xffff); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9253: ; return; } #endif /* CAS.W #.W,-(An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0ce0_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) = dsta; if ((dsta & 1) && currprefs.cpu_compatible && get_cpu_model () == 68060) { op_unimpl (); goto endlabel9254; } { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(m68k_dreg (regs, rc))); { int flgs = ((uae_s16)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(m68k_dreg (regs, rc))) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); m68k_incpc (4); if (GET_ZFLG ()){ x_put_word (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = (m68k_dreg(regs, rc) & ~0xffff) | (dst & 0xffff); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9254: ; return; } #endif /* CAS.W #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0ce8_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s16 dst = x_get_word (dsta); if ((dsta & 1) && currprefs.cpu_compatible && get_cpu_model () == 68060) { op_unimpl (); goto endlabel9255; } { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(m68k_dreg (regs, rc))); { int flgs = ((uae_s16)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(m68k_dreg (regs, rc))) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); m68k_incpc (6); if (GET_ZFLG ()){ x_put_word (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = (m68k_dreg(regs, rc) & ~0xffff) | (dst & 0xffff); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9255: ; return; } #endif /* CAS.W #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0cf0_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s16 dst = x_get_word (dsta); if ((dsta & 1) && currprefs.cpu_compatible && get_cpu_model () == 68060) { op_unimpl (); goto endlabel9256; } { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(m68k_dreg (regs, rc))); { int flgs = ((uae_s16)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(m68k_dreg (regs, rc))) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); if (GET_ZFLG ()){ x_put_word (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = (m68k_dreg(regs, rc) & ~0xffff) | (dst & 0xffff); }}}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9256: ; return; } #endif /* CAS.W #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0cf8_22)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s16 dst = x_get_word (dsta); if ((dsta & 1) && currprefs.cpu_compatible && get_cpu_model () == 68060) { op_unimpl (); goto endlabel9257; } { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(m68k_dreg (regs, rc))); { int flgs = ((uae_s16)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(m68k_dreg (regs, rc))) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); m68k_incpc (6); if (GET_ZFLG ()){ x_put_word (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = (m68k_dreg(regs, rc) & ~0xffff) | (dst & 0xffff); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9257: ; return; } #endif /* CAS.W #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0cf9_22)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (4); { uae_s16 dst = x_get_word (dsta); if ((dsta & 1) && currprefs.cpu_compatible && get_cpu_model () == 68060) { op_unimpl (); goto endlabel9258; } { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(m68k_dreg (regs, rc))); { int flgs = ((uae_s16)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(m68k_dreg (regs, rc))) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); m68k_incpc (8); if (GET_ZFLG ()){ x_put_word (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = (m68k_dreg(regs, rc) & ~0xffff) | (dst & 0xffff); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9258: ; return; } #endif /* CAS2.W #.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0cfc_22)(uae_u32 opcode) { {{ uae_s32 extra = get_long_ce020_prefetch (2); uae_u32 rn1 = regs.regs[(extra >> 28) & 15]; uae_u32 rn2 = regs.regs[(extra >> 12) & 15]; uae_u16 dst1 = x_get_word (rn1), dst2 = x_get_word (rn2); {uae_u32 newv = ((uae_s16)(dst1)) - ((uae_s16)(m68k_dreg (regs, (extra >> 16) & 7))); { int flgs = ((uae_s16)(m68k_dreg (regs, (extra >> 16) & 7))) < 0; int flgo = ((uae_s16)(dst1)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(m68k_dreg (regs, (extra >> 16) & 7))) > ((uae_u16)(dst1))); SET_NFLG (flgn != 0); if (GET_ZFLG ()) { {uae_u32 newv = ((uae_s16)(dst2)) - ((uae_s16)(m68k_dreg (regs, extra & 7))); { int flgs = ((uae_s16)(m68k_dreg (regs, extra & 7))) < 0; int flgo = ((uae_s16)(dst2)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(m68k_dreg (regs, extra & 7))) > ((uae_u16)(dst2))); SET_NFLG (flgn != 0); if (GET_ZFLG ()) { x_put_word (rn1, m68k_dreg (regs, (extra >> 22) & 7)); x_put_word (rn2, m68k_dreg (regs, (extra >> 6) & 7)); }} }}}} if (! GET_ZFLG ()) { m68k_dreg (regs, (extra >> 6) & 7) = (m68k_dreg (regs, (extra >> 6) & 7) & ~0xffff) | (dst2 & 0xffff); m68k_dreg (regs, (extra >> 22) & 7) = (m68k_dreg (regs, (extra >> 22) & 7) & ~0xffff) | (dst1 & 0xffff); } }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } #endif /* MOVES.B #.W,(An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0e10_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel9260; } {{ uae_s16 extra = get_word_ce020_prefetch (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = m68k_areg (regs, dstreg); x_put_byte (dsta, src); }}else{{ uaecptr srca = m68k_areg (regs, dstreg); { uae_s8 src = x_get_byte (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = (uae_s32)(uae_s8)src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (m68k_dreg (regs, (extra >> 12) & 7) & ~0xff) | ((src) & 0xff); } }}} m68k_incpc (4); }}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9260: ; return; } #endif /* MOVES.B #.W,(An)+ */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0e18_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel9261; } {{ uae_s16 extra = get_word_ce020_prefetch (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; x_put_byte (dsta, src); }}else{{ uaecptr srca = m68k_areg (regs, dstreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = (uae_s32)(uae_s8)src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (m68k_dreg (regs, (extra >> 12) & 7) & ~0xff) | ((src) & 0xff); } }}} m68k_incpc (4); }}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9261: ; return; } #endif /* MOVES.B #.W,-(An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0e20_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel9262; } {{ uae_s16 extra = get_word_ce020_prefetch (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; x_put_byte (dsta, src); }}else{{ uaecptr srca; srca = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, dstreg) = srca; if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = (uae_s32)(uae_s8)src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (m68k_dreg (regs, (extra >> 12) & 7) & ~0xff) | ((src) & 0xff); } }}} m68k_incpc (4); }}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9262: ; return; } #endif /* MOVES.B #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0e28_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel9263; } {{ uae_s16 extra = get_word_ce020_prefetch (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); x_put_byte (dsta, src); }}else{{ uaecptr srca = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s8 src = x_get_byte (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = (uae_s32)(uae_s8)src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (m68k_dreg (regs, (extra >> 12) & 7) & ~0xff) | ((src) & 0xff); } }}} m68k_incpc (6); }}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9263: ; return; } #endif /* MOVES.B #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0e30_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel9264; } {{ uae_s16 extra = get_word_ce020_prefetch (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); x_put_byte (dsta, src); }}}else{{ uaecptr srca; m68k_incpc (4); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s8 src = x_get_byte (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = (uae_s32)(uae_s8)src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (m68k_dreg (regs, (extra >> 12) & 7) & ~0xff) | ((src) & 0xff); } }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9264: ; return; } #endif /* MOVES.B #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0e38_22)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel9265; } {{ uae_s16 extra = get_word_ce020_prefetch (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); x_put_byte (dsta, src); }}else{{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s8 src = x_get_byte (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = (uae_s32)(uae_s8)src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (m68k_dreg (regs, (extra >> 12) & 7) & ~0xff) | ((src) & 0xff); } }}} m68k_incpc (6); }}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9265: ; return; } #endif /* MOVES.B #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0e39_22)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel9266; } {{ uae_s16 extra = get_word_ce020_prefetch (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = get_long_ce020_prefetch (4); x_put_byte (dsta, src); }}else{{ uaecptr srca = get_long_ce020_prefetch (4); { uae_s8 src = x_get_byte (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = (uae_s32)(uae_s8)src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (m68k_dreg (regs, (extra >> 12) & 7) & ~0xff) | ((src) & 0xff); } }}} m68k_incpc (8); }}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9266: ; return; } #endif /* MOVES.W #.W,(An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0e50_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel9267; } {{ uae_s16 extra = get_word_ce020_prefetch (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = m68k_areg (regs, dstreg); x_put_word (dsta, src); }}else{{ uaecptr srca = m68k_areg (regs, dstreg); { uae_s16 src = x_get_word (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = (uae_s32)(uae_s16)src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (m68k_dreg (regs, (extra >> 12) & 7) & ~0xffff) | ((src) & 0xffff); } }}} m68k_incpc (4); }}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9267: ; return; } #endif /* MOVES.W #.W,(An)+ */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0e58_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel9268; } {{ uae_s16 extra = get_word_ce020_prefetch (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 2; x_put_word (dsta, src); }}else{{ uaecptr srca = m68k_areg (regs, dstreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, dstreg) += 2; if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = (uae_s32)(uae_s16)src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (m68k_dreg (regs, (extra >> 12) & 7) & ~0xffff) | ((src) & 0xffff); } }}} m68k_incpc (4); }}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9268: ; return; } #endif /* MOVES.W #.W,-(An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0e60_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel9269; } {{ uae_s16 extra = get_word_ce020_prefetch (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; m68k_areg (regs, dstreg) = dsta; x_put_word (dsta, src); }}else{{ uaecptr srca; srca = m68k_areg (regs, dstreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, dstreg) = srca; if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = (uae_s32)(uae_s16)src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (m68k_dreg (regs, (extra >> 12) & 7) & ~0xffff) | ((src) & 0xffff); } }}} m68k_incpc (4); }}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9269: ; return; } #endif /* MOVES.W #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0e68_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel9270; } {{ uae_s16 extra = get_word_ce020_prefetch (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); x_put_word (dsta, src); }}else{{ uaecptr srca = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s16 src = x_get_word (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = (uae_s32)(uae_s16)src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (m68k_dreg (regs, (extra >> 12) & 7) & ~0xffff) | ((src) & 0xffff); } }}} m68k_incpc (6); }}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9270: ; return; } #endif /* MOVES.W #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0e70_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel9271; } {{ uae_s16 extra = get_word_ce020_prefetch (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); x_put_word (dsta, src); }}}else{{ uaecptr srca; m68k_incpc (4); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s16 src = x_get_word (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = (uae_s32)(uae_s16)src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (m68k_dreg (regs, (extra >> 12) & 7) & ~0xffff) | ((src) & 0xffff); } }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9271: ; return; } #endif /* MOVES.W #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0e78_22)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel9272; } {{ uae_s16 extra = get_word_ce020_prefetch (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); x_put_word (dsta, src); }}else{{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s16 src = x_get_word (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = (uae_s32)(uae_s16)src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (m68k_dreg (regs, (extra >> 12) & 7) & ~0xffff) | ((src) & 0xffff); } }}} m68k_incpc (6); }}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9272: ; return; } #endif /* MOVES.W #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0e79_22)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel9273; } {{ uae_s16 extra = get_word_ce020_prefetch (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = get_long_ce020_prefetch (4); x_put_word (dsta, src); }}else{{ uaecptr srca = get_long_ce020_prefetch (4); { uae_s16 src = x_get_word (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = (uae_s32)(uae_s16)src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (m68k_dreg (regs, (extra >> 12) & 7) & ~0xffff) | ((src) & 0xffff); } }}} m68k_incpc (8); }}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9273: ; return; } #endif /* MOVES.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0e90_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel9274; } {{ uae_s16 extra = get_word_ce020_prefetch (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = m68k_areg (regs, dstreg); x_put_long (dsta, src); }}else{{ uaecptr srca = m68k_areg (regs, dstreg); { uae_s32 src = x_get_long (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (src); } }}} m68k_incpc (4); }}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9274: ; return; } #endif /* MOVES.L #.W,(An)+ */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0e98_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel9275; } {{ uae_s16 extra = get_word_ce020_prefetch (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 4; x_put_long (dsta, src); }}else{{ uaecptr srca = m68k_areg (regs, dstreg); { uae_s32 src = x_get_long (srca); m68k_areg (regs, dstreg) += 4; if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (src); } }}} m68k_incpc (4); }}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9275: ; return; } #endif /* MOVES.L #.W,-(An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0ea0_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel9276; } {{ uae_s16 extra = get_word_ce020_prefetch (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; m68k_areg (regs, dstreg) = dsta; x_put_long (dsta, src); }}else{{ uaecptr srca; srca = m68k_areg (regs, dstreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, dstreg) = srca; if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (src); } }}} m68k_incpc (4); }}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9276: ; return; } #endif /* MOVES.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0ea8_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel9277; } {{ uae_s16 extra = get_word_ce020_prefetch (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); x_put_long (dsta, src); }}else{{ uaecptr srca = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s32 src = x_get_long (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (src); } }}} m68k_incpc (6); }}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9277: ; return; } #endif /* MOVES.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0eb0_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel9278; } {{ uae_s16 extra = get_word_ce020_prefetch (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); x_put_long (dsta, src); }}}else{{ uaecptr srca; m68k_incpc (4); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s32 src = x_get_long (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (src); } }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9278: ; return; } #endif /* MOVES.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0eb8_22)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel9279; } {{ uae_s16 extra = get_word_ce020_prefetch (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); x_put_long (dsta, src); }}else{{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s32 src = x_get_long (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (src); } }}} m68k_incpc (6); }}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9279: ; return; } #endif /* MOVES.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0eb9_22)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel9280; } {{ uae_s16 extra = get_word_ce020_prefetch (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = get_long_ce020_prefetch (4); x_put_long (dsta, src); }}else{{ uaecptr srca = get_long_ce020_prefetch (4); { uae_s32 src = x_get_long (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (src); } }}} m68k_incpc (8); }}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9280: ; return; } #endif /* CAS.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0ed0_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); if ((dsta & 3) && currprefs.cpu_compatible && get_cpu_model () == 68060) { op_unimpl (); goto endlabel9281; } { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(m68k_dreg (regs, rc))); { int flgs = ((uae_s32)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(m68k_dreg (regs, rc))) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); m68k_incpc (4); if (GET_ZFLG ()){ x_put_long (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = dst; }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9281: ; return; } #endif /* CAS.L #.W,(An)+ */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0ed8_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) += 4; if ((dsta & 3) && currprefs.cpu_compatible && get_cpu_model () == 68060) { op_unimpl (); goto endlabel9282; } { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(m68k_dreg (regs, rc))); { int flgs = ((uae_s32)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(m68k_dreg (regs, rc))) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); m68k_incpc (4); if (GET_ZFLG ()){ x_put_long (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = dst; }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9282: ; return; } #endif /* CAS.L #.W,-(An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0ee0_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) = dsta; if ((dsta & 3) && currprefs.cpu_compatible && get_cpu_model () == 68060) { op_unimpl (); goto endlabel9283; } { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(m68k_dreg (regs, rc))); { int flgs = ((uae_s32)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(m68k_dreg (regs, rc))) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); m68k_incpc (4); if (GET_ZFLG ()){ x_put_long (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = dst; }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9283: ; return; } #endif /* CAS.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0ee8_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s32 dst = x_get_long (dsta); if ((dsta & 3) && currprefs.cpu_compatible && get_cpu_model () == 68060) { op_unimpl (); goto endlabel9284; } { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(m68k_dreg (regs, rc))); { int flgs = ((uae_s32)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(m68k_dreg (regs, rc))) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); m68k_incpc (6); if (GET_ZFLG ()){ x_put_long (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = dst; }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9284: ; return; } #endif /* CAS.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0ef0_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s32 dst = x_get_long (dsta); if ((dsta & 3) && currprefs.cpu_compatible && get_cpu_model () == 68060) { op_unimpl (); goto endlabel9285; } { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(m68k_dreg (regs, rc))); { int flgs = ((uae_s32)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(m68k_dreg (regs, rc))) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); if (GET_ZFLG ()){ x_put_long (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = dst; }}}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9285: ; return; } #endif /* CAS.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0ef8_22)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s32 dst = x_get_long (dsta); if ((dsta & 3) && currprefs.cpu_compatible && get_cpu_model () == 68060) { op_unimpl (); goto endlabel9286; } { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(m68k_dreg (regs, rc))); { int flgs = ((uae_s32)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(m68k_dreg (regs, rc))) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); m68k_incpc (6); if (GET_ZFLG ()){ x_put_long (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = dst; }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9286: ; return; } #endif /* CAS.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0ef9_22)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (4); { uae_s32 dst = x_get_long (dsta); if ((dsta & 3) && currprefs.cpu_compatible && get_cpu_model () == 68060) { op_unimpl (); goto endlabel9287; } { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(m68k_dreg (regs, rc))); { int flgs = ((uae_s32)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(m68k_dreg (regs, rc))) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); m68k_incpc (8); if (GET_ZFLG ()){ x_put_long (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = dst; }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9287: ; return; } #endif /* CAS2.L #.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_0efc_22)(uae_u32 opcode) { {{ uae_s32 extra = get_long_ce020_prefetch (2); uae_u32 rn1 = regs.regs[(extra >> 28) & 15]; uae_u32 rn2 = regs.regs[(extra >> 12) & 15]; uae_u32 dst1 = x_get_long (rn1), dst2 = x_get_long (rn2); {uae_u32 newv = ((uae_s32)(dst1)) - ((uae_s32)(m68k_dreg (regs, (extra >> 16) & 7))); { int flgs = ((uae_s32)(m68k_dreg (regs, (extra >> 16) & 7))) < 0; int flgo = ((uae_s32)(dst1)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(m68k_dreg (regs, (extra >> 16) & 7))) > ((uae_u32)(dst1))); SET_NFLG (flgn != 0); if (GET_ZFLG ()) { {uae_u32 newv = ((uae_s32)(dst2)) - ((uae_s32)(m68k_dreg (regs, extra & 7))); { int flgs = ((uae_s32)(m68k_dreg (regs, extra & 7))) < 0; int flgo = ((uae_s32)(dst2)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(m68k_dreg (regs, extra & 7))) > ((uae_u32)(dst2))); SET_NFLG (flgn != 0); if (GET_ZFLG ()) { x_put_long (rn1, m68k_dreg (regs, (extra >> 22) & 7)); x_put_long (rn2, m68k_dreg (regs, (extra >> 6) & 7)); }} }}}} if (! GET_ZFLG ()) { m68k_dreg (regs, (extra >> 6) & 7) = dst2; m68k_dreg (regs, (extra >> 22) & 7) = dst1; } }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } #endif /* MOVE.B Dn,Dn */ void REGPARAM2 CPUFUNC(op_1000_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); m68k_incpc (2); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (An),Dn */ void REGPARAM2 CPUFUNC(op_1010_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (An)+,Dn */ void REGPARAM2 CPUFUNC(op_1018_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B -(An),Dn */ void REGPARAM2 CPUFUNC(op_1020_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_1028_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (d8,An,Xn),Dn */ void REGPARAM2 CPUFUNC(op_1030_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s8 src = x_get_byte (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (xxx).W,Dn */ void REGPARAM2 CPUFUNC(op_1038_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (xxx).L,Dn */ void REGPARAM2 CPUFUNC(op_1039_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (d16,PC),Dn */ void REGPARAM2 CPUFUNC(op_103a_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (d8,PC,Xn),Dn */ void REGPARAM2 CPUFUNC(op_103b_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s8 src = x_get_byte (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B #.B,Dn */ void REGPARAM2 CPUFUNC(op_103c_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); m68k_incpc (4); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B Dn,(An) */ void REGPARAM2 CPUFUNC(op_1080_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (2); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (An),(An) */ void REGPARAM2 CPUFUNC(op_1090_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (An)+,(An) */ void REGPARAM2 CPUFUNC(op_1098_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B -(An),(An) */ void REGPARAM2 CPUFUNC(op_10a0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (d16,An),(An) */ void REGPARAM2 CPUFUNC(op_10a8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (d8,An,Xn),(An) */ void REGPARAM2 CPUFUNC(op_10b0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (xxx).W,(An) */ void REGPARAM2 CPUFUNC(op_10b8_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (xxx).L,(An) */ void REGPARAM2 CPUFUNC(op_10b9_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (d16,PC),(An) */ void REGPARAM2 CPUFUNC(op_10ba_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (d8,PC,Xn),(An) */ void REGPARAM2 CPUFUNC(op_10bb_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B #.B,(An) */ void REGPARAM2 CPUFUNC(op_10bc_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B Dn,(An)+ */ void REGPARAM2 CPUFUNC(op_10c0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (2); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (An),(An)+ */ void REGPARAM2 CPUFUNC(op_10d0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (An)+,(An)+ */ void REGPARAM2 CPUFUNC(op_10d8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B -(An),(An)+ */ void REGPARAM2 CPUFUNC(op_10e0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (d16,An),(An)+ */ void REGPARAM2 CPUFUNC(op_10e8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (d8,An,Xn),(An)+ */ void REGPARAM2 CPUFUNC(op_10f0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (xxx).W,(An)+ */ void REGPARAM2 CPUFUNC(op_10f8_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (xxx).L,(An)+ */ void REGPARAM2 CPUFUNC(op_10f9_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (d16,PC),(An)+ */ void REGPARAM2 CPUFUNC(op_10fa_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (d8,PC,Xn),(An)+ */ void REGPARAM2 CPUFUNC(op_10fb_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B #.B,(An)+ */ void REGPARAM2 CPUFUNC(op_10fc_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B Dn,-(An) */ void REGPARAM2 CPUFUNC(op_1100_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (2); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (An),-(An) */ void REGPARAM2 CPUFUNC(op_1110_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (An)+,-(An) */ void REGPARAM2 CPUFUNC(op_1118_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B -(An),-(An) */ void REGPARAM2 CPUFUNC(op_1120_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (d16,An),-(An) */ void REGPARAM2 CPUFUNC(op_1128_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (d8,An,Xn),-(An) */ void REGPARAM2 CPUFUNC(op_1130_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s8 src = x_get_byte (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (xxx).W,-(An) */ void REGPARAM2 CPUFUNC(op_1138_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (xxx).L,-(An) */ void REGPARAM2 CPUFUNC(op_1139_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (d16,PC),-(An) */ void REGPARAM2 CPUFUNC(op_113a_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (d8,PC,Xn),-(An) */ void REGPARAM2 CPUFUNC(op_113b_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s8 src = x_get_byte (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B #.B,-(An) */ void REGPARAM2 CPUFUNC(op_113c_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B Dn,(d16,An) */ void REGPARAM2 CPUFUNC(op_1140_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (An),(d16,An) */ void REGPARAM2 CPUFUNC(op_1150_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (An)+,(d16,An) */ void REGPARAM2 CPUFUNC(op_1158_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B -(An),(d16,An) */ void REGPARAM2 CPUFUNC(op_1160_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (d16,An),(d16,An) */ void REGPARAM2 CPUFUNC(op_1168_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (d8,An,Xn),(d16,An) */ void REGPARAM2 CPUFUNC(op_1170_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (0); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (2); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (xxx).W,(d16,An) */ void REGPARAM2 CPUFUNC(op_1178_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (xxx).L,(d16,An) */ void REGPARAM2 CPUFUNC(op_1179_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (8); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (d16,PC),(d16,An) */ void REGPARAM2 CPUFUNC(op_117a_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (d8,PC,Xn),(d16,An) */ void REGPARAM2 CPUFUNC(op_117b_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (0); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (2); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B #.B,(d16,An) */ void REGPARAM2 CPUFUNC(op_117c_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (6); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B Dn,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_1180_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (An),(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_1190_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (An)+,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_1198_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B -(An),(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_11a0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (d16,An),(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_11a8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (d8,An,Xn),(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_11b0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s8 src = x_get_byte (srca); { uaecptr dsta; { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (xxx).W,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_11b8_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (xxx).L,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_11b9_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta; m68k_incpc (6); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (d16,PC),(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_11ba_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (d8,PC,Xn),(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_11bb_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s8 src = x_get_byte (srca); { uaecptr dsta; { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B #.B,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_11bc_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B Dn,(xxx).W */ void REGPARAM2 CPUFUNC(op_11c0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (An),(xxx).W */ void REGPARAM2 CPUFUNC(op_11d0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (An)+,(xxx).W */ void REGPARAM2 CPUFUNC(op_11d8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B -(An),(xxx).W */ void REGPARAM2 CPUFUNC(op_11e0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (d16,An),(xxx).W */ void REGPARAM2 CPUFUNC(op_11e8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (d8,An,Xn),(xxx).W */ void REGPARAM2 CPUFUNC(op_11f0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (0); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (2); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (xxx).W,(xxx).W */ void REGPARAM2 CPUFUNC(op_11f8_22)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (xxx).L,(xxx).W */ void REGPARAM2 CPUFUNC(op_11f9_22)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (8); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (d16,PC),(xxx).W */ void REGPARAM2 CPUFUNC(op_11fa_22)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (d8,PC,Xn),(xxx).W */ void REGPARAM2 CPUFUNC(op_11fb_22)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (0); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (2); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B #.B,(xxx).W */ void REGPARAM2 CPUFUNC(op_11fc_22)(uae_u32 opcode) { {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (6); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B Dn,(xxx).L */ void REGPARAM2 CPUFUNC(op_13c0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (6); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (An),(xxx).L */ void REGPARAM2 CPUFUNC(op_13d0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = get_long_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (An)+,(xxx).L */ void REGPARAM2 CPUFUNC(op_13d8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uaecptr dsta = get_long_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B -(An),(xxx).L */ void REGPARAM2 CPUFUNC(op_13e0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = get_long_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (d16,An),(xxx).L */ void REGPARAM2 CPUFUNC(op_13e8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = get_long_ce020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (8); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (d8,An,Xn),(xxx).L */ void REGPARAM2 CPUFUNC(op_13f0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = get_long_ce020_prefetch (0); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (xxx).W,(xxx).L */ void REGPARAM2 CPUFUNC(op_13f8_22)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = get_long_ce020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (8); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (xxx).L,(xxx).L */ void REGPARAM2 CPUFUNC(op_13f9_22)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = get_long_ce020_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (10); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (d16,PC),(xxx).L */ void REGPARAM2 CPUFUNC(op_13fa_22)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = get_long_ce020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (8); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B (d8,PC,Xn),(xxx).L */ void REGPARAM2 CPUFUNC(op_13fb_22)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = get_long_ce020_prefetch (0); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.B #.B,(xxx).L */ void REGPARAM2 CPUFUNC(op_13fc_22)(uae_u32 opcode) { {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (8); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L Dn,Dn */ void REGPARAM2 CPUFUNC(op_2000_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpc (2); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L An,Dn */ void REGPARAM2 CPUFUNC(op_2008_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpc (2); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (An),Dn */ void REGPARAM2 CPUFUNC(op_2010_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (An)+,Dn */ void REGPARAM2 CPUFUNC(op_2018_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) += 4; { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L -(An),Dn */ void REGPARAM2 CPUFUNC(op_2020_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) = srca; { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_2028_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (d8,An,Xn),Dn */ void REGPARAM2 CPUFUNC(op_2030_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (xxx).W,Dn */ void REGPARAM2 CPUFUNC(op_2038_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (xxx).L,Dn */ void REGPARAM2 CPUFUNC(op_2039_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (d16,PC),Dn */ void REGPARAM2 CPUFUNC(op_203a_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (d8,PC,Xn),Dn */ void REGPARAM2 CPUFUNC(op_203b_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L #.L,Dn */ void REGPARAM2 CPUFUNC(op_203c_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpc (6); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVEA.L Dn,An */ void REGPARAM2 CPUFUNC(op_2040_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { m68k_areg (regs, dstreg) = (src); m68k_incpc (2); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVEA.L An,An */ void REGPARAM2 CPUFUNC(op_2048_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { m68k_areg (regs, dstreg) = (src); m68k_incpc (2); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVEA.L (An),An */ void REGPARAM2 CPUFUNC(op_2050_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); { m68k_areg (regs, dstreg) = (src); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVEA.L (An)+,An */ void REGPARAM2 CPUFUNC(op_2058_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) += 4; { m68k_areg (regs, dstreg) = (src); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVEA.L -(An),An */ void REGPARAM2 CPUFUNC(op_2060_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) = srca; { m68k_areg (regs, dstreg) = (src); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVEA.L (d16,An),An */ void REGPARAM2 CPUFUNC(op_2068_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { m68k_areg (regs, dstreg) = (src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVEA.L (d8,An,Xn),An */ void REGPARAM2 CPUFUNC(op_2070_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { m68k_areg (regs, dstreg) = (src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVEA.L (xxx).W,An */ void REGPARAM2 CPUFUNC(op_2078_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { m68k_areg (regs, dstreg) = (src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVEA.L (xxx).L,An */ void REGPARAM2 CPUFUNC(op_2079_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { m68k_areg (regs, dstreg) = (src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVEA.L (d16,PC),An */ void REGPARAM2 CPUFUNC(op_207a_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { m68k_areg (regs, dstreg) = (src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVEA.L (d8,PC,Xn),An */ void REGPARAM2 CPUFUNC(op_207b_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { m68k_areg (regs, dstreg) = (src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVEA.L #.L,An */ void REGPARAM2 CPUFUNC(op_207c_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { m68k_areg (regs, dstreg) = (src); m68k_incpc (6); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L Dn,(An) */ void REGPARAM2 CPUFUNC(op_2080_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (2); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L An,(An) */ void REGPARAM2 CPUFUNC(op_2088_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (2); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (An),(An) */ void REGPARAM2 CPUFUNC(op_2090_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (An)+,(An) */ void REGPARAM2 CPUFUNC(op_2098_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) += 4; { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L -(An),(An) */ void REGPARAM2 CPUFUNC(op_20a0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (d16,An),(An) */ void REGPARAM2 CPUFUNC(op_20a8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (d8,An,Xn),(An) */ void REGPARAM2 CPUFUNC(op_20b0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (xxx).W,(An) */ void REGPARAM2 CPUFUNC(op_20b8_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (xxx).L,(An) */ void REGPARAM2 CPUFUNC(op_20b9_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (d16,PC),(An) */ void REGPARAM2 CPUFUNC(op_20ba_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (d8,PC,Xn),(An) */ void REGPARAM2 CPUFUNC(op_20bb_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L #.L,(An) */ void REGPARAM2 CPUFUNC(op_20bc_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (6); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L Dn,(An)+ */ void REGPARAM2 CPUFUNC(op_20c0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (2); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L An,(An)+ */ void REGPARAM2 CPUFUNC(op_20c8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (2); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (An),(An)+ */ void REGPARAM2 CPUFUNC(op_20d0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (An)+,(An)+ */ void REGPARAM2 CPUFUNC(op_20d8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) += 4; { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L -(An),(An)+ */ void REGPARAM2 CPUFUNC(op_20e0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (d16,An),(An)+ */ void REGPARAM2 CPUFUNC(op_20e8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (d8,An,Xn),(An)+ */ void REGPARAM2 CPUFUNC(op_20f0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (xxx).W,(An)+ */ void REGPARAM2 CPUFUNC(op_20f8_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (xxx).L,(An)+ */ void REGPARAM2 CPUFUNC(op_20f9_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (d16,PC),(An)+ */ void REGPARAM2 CPUFUNC(op_20fa_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (d8,PC,Xn),(An)+ */ void REGPARAM2 CPUFUNC(op_20fb_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L #.L,(An)+ */ void REGPARAM2 CPUFUNC(op_20fc_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (6); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L Dn,-(An) */ void REGPARAM2 CPUFUNC(op_2100_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (2); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L An,-(An) */ void REGPARAM2 CPUFUNC(op_2108_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (2); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (An),-(An) */ void REGPARAM2 CPUFUNC(op_2110_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (An)+,-(An) */ void REGPARAM2 CPUFUNC(op_2118_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) += 4; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L -(An),-(An) */ void REGPARAM2 CPUFUNC(op_2120_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (d16,An),-(An) */ void REGPARAM2 CPUFUNC(op_2128_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (d8,An,Xn),-(An) */ void REGPARAM2 CPUFUNC(op_2130_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (xxx).W,-(An) */ void REGPARAM2 CPUFUNC(op_2138_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (xxx).L,-(An) */ void REGPARAM2 CPUFUNC(op_2139_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (d16,PC),-(An) */ void REGPARAM2 CPUFUNC(op_213a_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (d8,PC,Xn),-(An) */ void REGPARAM2 CPUFUNC(op_213b_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L #.L,-(An) */ void REGPARAM2 CPUFUNC(op_213c_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (6); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L Dn,(d16,An) */ void REGPARAM2 CPUFUNC(op_2140_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (4); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L An,(d16,An) */ void REGPARAM2 CPUFUNC(op_2148_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (4); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (An),(d16,An) */ void REGPARAM2 CPUFUNC(op_2150_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (An)+,(d16,An) */ void REGPARAM2 CPUFUNC(op_2158_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) += 4; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L -(An),(d16,An) */ void REGPARAM2 CPUFUNC(op_2160_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (d16,An),(d16,An) */ void REGPARAM2 CPUFUNC(op_2168_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } #endif #ifdef PART_3 /* MOVE.L (d8,An,Xn),(d16,An) */ void REGPARAM2 CPUFUNC(op_2170_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (0); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (2); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (xxx).W,(d16,An) */ void REGPARAM2 CPUFUNC(op_2178_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (xxx).L,(d16,An) */ void REGPARAM2 CPUFUNC(op_2179_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (8); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (d16,PC),(d16,An) */ void REGPARAM2 CPUFUNC(op_217a_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (d8,PC,Xn),(d16,An) */ void REGPARAM2 CPUFUNC(op_217b_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (0); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (2); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L #.L,(d16,An) */ void REGPARAM2 CPUFUNC(op_217c_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (8); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L Dn,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_2180_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L An,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_2188_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (An),(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_2190_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (An)+,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_2198_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) += 4; { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L -(An),(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_21a0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (d16,An),(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_21a8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (d8,An,Xn),(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_21b0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { uaecptr dsta; { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (xxx).W,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_21b8_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (xxx).L,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_21b9_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta; m68k_incpc (6); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (d16,PC),(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_21ba_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (d8,PC,Xn),(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_21bb_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { uaecptr dsta; { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L #.L,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_21bc_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (6); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L Dn,(xxx).W */ void REGPARAM2 CPUFUNC(op_21c0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (4); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L An,(xxx).W */ void REGPARAM2 CPUFUNC(op_21c8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_areg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (4); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (An),(xxx).W */ void REGPARAM2 CPUFUNC(op_21d0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (An)+,(xxx).W */ void REGPARAM2 CPUFUNC(op_21d8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) += 4; { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L -(An),(xxx).W */ void REGPARAM2 CPUFUNC(op_21e0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (d16,An),(xxx).W */ void REGPARAM2 CPUFUNC(op_21e8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (d8,An,Xn),(xxx).W */ void REGPARAM2 CPUFUNC(op_21f0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (0); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (2); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (xxx).W,(xxx).W */ void REGPARAM2 CPUFUNC(op_21f8_22)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (xxx).L,(xxx).W */ void REGPARAM2 CPUFUNC(op_21f9_22)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (8); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (d16,PC),(xxx).W */ void REGPARAM2 CPUFUNC(op_21fa_22)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (d8,PC,Xn),(xxx).W */ void REGPARAM2 CPUFUNC(op_21fb_22)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (0); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (2); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L #.L,(xxx).W */ void REGPARAM2 CPUFUNC(op_21fc_22)(uae_u32 opcode) { {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (8); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L Dn,(xxx).L */ void REGPARAM2 CPUFUNC(op_23c0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (6); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L An,(xxx).L */ void REGPARAM2 CPUFUNC(op_23c8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_areg (regs, srcreg); { uaecptr dsta = get_long_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (6); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (An),(xxx).L */ void REGPARAM2 CPUFUNC(op_23d0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); { uaecptr dsta = get_long_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (An)+,(xxx).L */ void REGPARAM2 CPUFUNC(op_23d8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) += 4; { uaecptr dsta = get_long_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L -(An),(xxx).L */ void REGPARAM2 CPUFUNC(op_23e0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = get_long_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (d16,An),(xxx).L */ void REGPARAM2 CPUFUNC(op_23e8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta = get_long_ce020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (8); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (d8,An,Xn),(xxx).L */ void REGPARAM2 CPUFUNC(op_23f0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { uaecptr dsta = get_long_ce020_prefetch (0); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (4); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (xxx).W,(xxx).L */ void REGPARAM2 CPUFUNC(op_23f8_22)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta = get_long_ce020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (8); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (xxx).L,(xxx).L */ void REGPARAM2 CPUFUNC(op_23f9_22)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta = get_long_ce020_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (10); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (d16,PC),(xxx).L */ void REGPARAM2 CPUFUNC(op_23fa_22)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta = get_long_ce020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (8); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L (d8,PC,Xn),(xxx).L */ void REGPARAM2 CPUFUNC(op_23fb_22)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { uaecptr dsta = get_long_ce020_prefetch (0); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (4); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.L #.L,(xxx).L */ void REGPARAM2 CPUFUNC(op_23fc_22)(uae_u32 opcode) { {{ uae_s32 src = get_long_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (10); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W Dn,Dn */ void REGPARAM2 CPUFUNC(op_3000_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpc (2); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W An,Dn */ void REGPARAM2 CPUFUNC(op_3008_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpc (2); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (An),Dn */ void REGPARAM2 CPUFUNC(op_3010_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (An)+,Dn */ void REGPARAM2 CPUFUNC(op_3018_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W -(An),Dn */ void REGPARAM2 CPUFUNC(op_3020_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_3028_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (d8,An,Xn),Dn */ void REGPARAM2 CPUFUNC(op_3030_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (xxx).W,Dn */ void REGPARAM2 CPUFUNC(op_3038_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (xxx).L,Dn */ void REGPARAM2 CPUFUNC(op_3039_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (d16,PC),Dn */ void REGPARAM2 CPUFUNC(op_303a_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (d8,PC,Xn),Dn */ void REGPARAM2 CPUFUNC(op_303b_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W #.W,Dn */ void REGPARAM2 CPUFUNC(op_303c_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpc (4); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVEA.W Dn,An */ void REGPARAM2 CPUFUNC(op_3040_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpc (2); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVEA.W An,An */ void REGPARAM2 CPUFUNC(op_3048_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpc (2); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVEA.W (An),An */ void REGPARAM2 CPUFUNC(op_3050_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVEA.W (An)+,An */ void REGPARAM2 CPUFUNC(op_3058_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVEA.W -(An),An */ void REGPARAM2 CPUFUNC(op_3060_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVEA.W (d16,An),An */ void REGPARAM2 CPUFUNC(op_3068_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVEA.W (d8,An,Xn),An */ void REGPARAM2 CPUFUNC(op_3070_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVEA.W (xxx).W,An */ void REGPARAM2 CPUFUNC(op_3078_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVEA.W (xxx).L,An */ void REGPARAM2 CPUFUNC(op_3079_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVEA.W (d16,PC),An */ void REGPARAM2 CPUFUNC(op_307a_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVEA.W (d8,PC,Xn),An */ void REGPARAM2 CPUFUNC(op_307b_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVEA.W #.W,An */ void REGPARAM2 CPUFUNC(op_307c_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpc (4); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W Dn,(An) */ void REGPARAM2 CPUFUNC(op_3080_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (2); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W An,(An) */ void REGPARAM2 CPUFUNC(op_3088_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (2); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (An),(An) */ void REGPARAM2 CPUFUNC(op_3090_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (An)+,(An) */ void REGPARAM2 CPUFUNC(op_3098_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W -(An),(An) */ void REGPARAM2 CPUFUNC(op_30a0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (d16,An),(An) */ void REGPARAM2 CPUFUNC(op_30a8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (d8,An,Xn),(An) */ void REGPARAM2 CPUFUNC(op_30b0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (xxx).W,(An) */ void REGPARAM2 CPUFUNC(op_30b8_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (xxx).L,(An) */ void REGPARAM2 CPUFUNC(op_30b9_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (d16,PC),(An) */ void REGPARAM2 CPUFUNC(op_30ba_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (d8,PC,Xn),(An) */ void REGPARAM2 CPUFUNC(op_30bb_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W #.W,(An) */ void REGPARAM2 CPUFUNC(op_30bc_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W Dn,(An)+ */ void REGPARAM2 CPUFUNC(op_30c0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (2); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W An,(An)+ */ void REGPARAM2 CPUFUNC(op_30c8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (2); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (An),(An)+ */ void REGPARAM2 CPUFUNC(op_30d0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (An)+,(An)+ */ void REGPARAM2 CPUFUNC(op_30d8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W -(An),(An)+ */ void REGPARAM2 CPUFUNC(op_30e0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (d16,An),(An)+ */ void REGPARAM2 CPUFUNC(op_30e8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (d8,An,Xn),(An)+ */ void REGPARAM2 CPUFUNC(op_30f0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (xxx).W,(An)+ */ void REGPARAM2 CPUFUNC(op_30f8_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (xxx).L,(An)+ */ void REGPARAM2 CPUFUNC(op_30f9_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (d16,PC),(An)+ */ void REGPARAM2 CPUFUNC(op_30fa_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (d8,PC,Xn),(An)+ */ void REGPARAM2 CPUFUNC(op_30fb_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W #.W,(An)+ */ void REGPARAM2 CPUFUNC(op_30fc_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W Dn,-(An) */ void REGPARAM2 CPUFUNC(op_3100_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (2); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W An,-(An) */ void REGPARAM2 CPUFUNC(op_3108_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (2); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (An),-(An) */ void REGPARAM2 CPUFUNC(op_3110_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (An)+,-(An) */ void REGPARAM2 CPUFUNC(op_3118_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W -(An),-(An) */ void REGPARAM2 CPUFUNC(op_3120_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (2); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (d16,An),-(An) */ void REGPARAM2 CPUFUNC(op_3128_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (d8,An,Xn),-(An) */ void REGPARAM2 CPUFUNC(op_3130_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (xxx).W,-(An) */ void REGPARAM2 CPUFUNC(op_3138_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (xxx).L,-(An) */ void REGPARAM2 CPUFUNC(op_3139_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (d16,PC),-(An) */ void REGPARAM2 CPUFUNC(op_313a_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (d8,PC,Xn),-(An) */ void REGPARAM2 CPUFUNC(op_313b_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W #.W,-(An) */ void REGPARAM2 CPUFUNC(op_313c_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W Dn,(d16,An) */ void REGPARAM2 CPUFUNC(op_3140_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W An,(d16,An) */ void REGPARAM2 CPUFUNC(op_3148_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (An),(d16,An) */ void REGPARAM2 CPUFUNC(op_3150_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (An)+,(d16,An) */ void REGPARAM2 CPUFUNC(op_3158_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W -(An),(d16,An) */ void REGPARAM2 CPUFUNC(op_3160_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (d16,An),(d16,An) */ void REGPARAM2 CPUFUNC(op_3168_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (d8,An,Xn),(d16,An) */ void REGPARAM2 CPUFUNC(op_3170_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (0); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (2); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (xxx).W,(d16,An) */ void REGPARAM2 CPUFUNC(op_3178_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (xxx).L,(d16,An) */ void REGPARAM2 CPUFUNC(op_3179_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (8); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (d16,PC),(d16,An) */ void REGPARAM2 CPUFUNC(op_317a_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (d8,PC,Xn),(d16,An) */ void REGPARAM2 CPUFUNC(op_317b_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (0); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (2); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W #.W,(d16,An) */ void REGPARAM2 CPUFUNC(op_317c_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W Dn,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_3180_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W An,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_3188_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (An),(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_3190_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (An)+,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_3198_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W -(An),(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_31a0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (d16,An),(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_31a8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (d8,An,Xn),(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_31b0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uaecptr dsta; { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (xxx).W,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_31b8_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (xxx).L,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_31b9_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta; m68k_incpc (6); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (d16,PC),(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_31ba_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (d8,PC,Xn),(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_31bb_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uaecptr dsta; { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W #.W,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_31bc_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W Dn,(xxx).W */ void REGPARAM2 CPUFUNC(op_31c0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W An,(xxx).W */ void REGPARAM2 CPUFUNC(op_31c8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_areg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (An),(xxx).W */ void REGPARAM2 CPUFUNC(op_31d0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (An)+,(xxx).W */ void REGPARAM2 CPUFUNC(op_31d8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W -(An),(xxx).W */ void REGPARAM2 CPUFUNC(op_31e0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (d16,An),(xxx).W */ void REGPARAM2 CPUFUNC(op_31e8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (d8,An,Xn),(xxx).W */ void REGPARAM2 CPUFUNC(op_31f0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (0); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (2); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (xxx).W,(xxx).W */ void REGPARAM2 CPUFUNC(op_31f8_22)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (xxx).L,(xxx).W */ void REGPARAM2 CPUFUNC(op_31f9_22)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (8); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (d16,PC),(xxx).W */ void REGPARAM2 CPUFUNC(op_31fa_22)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (d8,PC,Xn),(xxx).W */ void REGPARAM2 CPUFUNC(op_31fb_22)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (0); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (2); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W #.W,(xxx).W */ void REGPARAM2 CPUFUNC(op_31fc_22)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W Dn,(xxx).L */ void REGPARAM2 CPUFUNC(op_33c0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W An,(xxx).L */ void REGPARAM2 CPUFUNC(op_33c8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_areg (regs, srcreg); { uaecptr dsta = get_long_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (An),(xxx).L */ void REGPARAM2 CPUFUNC(op_33d0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); { uaecptr dsta = get_long_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (An)+,(xxx).L */ void REGPARAM2 CPUFUNC(op_33d8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uaecptr dsta = get_long_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W -(An),(xxx).L */ void REGPARAM2 CPUFUNC(op_33e0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = get_long_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (d16,An),(xxx).L */ void REGPARAM2 CPUFUNC(op_33e8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta = get_long_ce020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (8); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (d8,An,Xn),(xxx).L */ void REGPARAM2 CPUFUNC(op_33f0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uaecptr dsta = get_long_ce020_prefetch (0); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (xxx).W,(xxx).L */ void REGPARAM2 CPUFUNC(op_33f8_22)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta = get_long_ce020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (8); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (xxx).L,(xxx).L */ void REGPARAM2 CPUFUNC(op_33f9_22)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta = get_long_ce020_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (10); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (d16,PC),(xxx).L */ void REGPARAM2 CPUFUNC(op_33fa_22)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta = get_long_ce020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (8); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W (d8,PC,Xn),(xxx).L */ void REGPARAM2 CPUFUNC(op_33fb_22)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uaecptr dsta = get_long_ce020_prefetch (0); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVE.W #.W,(xxx).L */ void REGPARAM2 CPUFUNC(op_33fc_22)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (8); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* NEGX.B Dn */ void REGPARAM2 CPUFUNC(op_4000_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((newv) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NEGX.B (An) */ void REGPARAM2 CPUFUNC(op_4010_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); x_put_byte (srca, newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NEGX.B (An)+ */ void REGPARAM2 CPUFUNC(op_4018_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); x_put_byte (srca, newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NEGX.B -(An) */ void REGPARAM2 CPUFUNC(op_4020_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); x_put_byte (srca, newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NEGX.B (d16,An) */ void REGPARAM2 CPUFUNC(op_4028_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); x_put_byte (srca, newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* NEGX.B (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_4030_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s8 src = x_get_byte (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); x_put_byte (srca, newv); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* NEGX.B (xxx).W */ void REGPARAM2 CPUFUNC(op_4038_22)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); x_put_byte (srca, newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* NEGX.B (xxx).L */ void REGPARAM2 CPUFUNC(op_4039_22)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); x_put_byte (srca, newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* NEGX.W Dn */ void REGPARAM2 CPUFUNC(op_4040_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | ((newv) & 0xffff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NEGX.W (An) */ void REGPARAM2 CPUFUNC(op_4050_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); x_put_word (srca, newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NEGX.W (An)+ */ void REGPARAM2 CPUFUNC(op_4058_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); x_put_word (srca, newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NEGX.W -(An) */ void REGPARAM2 CPUFUNC(op_4060_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); x_put_word (srca, newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NEGX.W (d16,An) */ void REGPARAM2 CPUFUNC(op_4068_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); x_put_word (srca, newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* NEGX.W (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_4070_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); x_put_word (srca, newv); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* NEGX.W (xxx).W */ void REGPARAM2 CPUFUNC(op_4078_22)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); x_put_word (srca, newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* NEGX.W (xxx).L */ void REGPARAM2 CPUFUNC(op_4079_22)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); x_put_word (srca, newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* NEGX.L Dn */ void REGPARAM2 CPUFUNC(op_4080_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, srcreg) = (newv); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NEGX.L (An) */ void REGPARAM2 CPUFUNC(op_4090_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); x_put_long (srca, newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NEGX.L (An)+ */ void REGPARAM2 CPUFUNC(op_4098_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) += 4; { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); x_put_long (srca, newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NEGX.L -(An) */ void REGPARAM2 CPUFUNC(op_40a0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) = srca; { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); x_put_long (srca, newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NEGX.L (d16,An) */ void REGPARAM2 CPUFUNC(op_40a8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); x_put_long (srca, newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* NEGX.L (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_40b0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); x_put_long (srca, newv); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* NEGX.L (xxx).W */ void REGPARAM2 CPUFUNC(op_40b8_22)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); x_put_long (srca, newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* NEGX.L (xxx).L */ void REGPARAM2 CPUFUNC(op_40b9_22)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); x_put_long (srca, newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* MVSR2.W Dn */ void REGPARAM2 CPUFUNC(op_40c0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel9617; } {{ MakeSR (); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | ((regs.sr) & 0xffff); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); endlabel9617: ; return; } /* MVSR2.W (An) */ void REGPARAM2 CPUFUNC(op_40d0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel9618; } {{ uaecptr srca = m68k_areg (regs, srcreg); MakeSR (); x_put_word (srca, regs.sr); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); endlabel9618: ; return; } /* MVSR2.W (An)+ */ void REGPARAM2 CPUFUNC(op_40d8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel9619; } {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += 2; MakeSR (); x_put_word (srca, regs.sr); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); endlabel9619: ; return; } /* MVSR2.W -(An) */ void REGPARAM2 CPUFUNC(op_40e0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel9620; } {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; m68k_areg (regs, srcreg) = srca; MakeSR (); x_put_word (srca, regs.sr); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); endlabel9620: ; return; } /* MVSR2.W (d16,An) */ void REGPARAM2 CPUFUNC(op_40e8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel9621; } {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); MakeSR (); x_put_word (srca, regs.sr); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); endlabel9621: ; return; } /* MVSR2.W (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_40f0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel9622; } {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); MakeSR (); x_put_word (srca, regs.sr); }}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9622: ; return; } /* MVSR2.W (xxx).W */ void REGPARAM2 CPUFUNC(op_40f8_22)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel9623; } {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); MakeSR (); x_put_word (srca, regs.sr); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); endlabel9623: ; return; } /* MVSR2.W (xxx).L */ void REGPARAM2 CPUFUNC(op_40f9_22)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel9624; } {{ uaecptr srca = get_long_ce020_prefetch (2); MakeSR (); x_put_word (srca, regs.sr); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); endlabel9624: ; return; } /* CHK.L Dn,Dn */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4100_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); m68k_incpc (2); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel9625; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel9625; } }}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9625: ; return; } #endif /* CHK.L (An),Dn */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4110_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); m68k_incpc (2); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel9626; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel9626; } }}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9626: ; return; } #endif /* CHK.L (An)+,Dn */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4118_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) += 4; { uae_s32 dst = m68k_dreg (regs, dstreg); m68k_incpc (2); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel9627; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel9627; } }}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9627: ; return; } #endif /* CHK.L -(An),Dn */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4120_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_dreg (regs, dstreg); m68k_incpc (2); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel9628; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel9628; } }}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9628: ; return; } #endif /* CHK.L (d16,An),Dn */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4128_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); m68k_incpc (4); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel9629; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel9629; } }}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9629: ; return; } #endif /* CHK.L (d8,An,Xn),Dn */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4130_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel9630; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel9630; } }}}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9630: ; return; } #endif /* CHK.L (xxx).W,Dn */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4138_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); m68k_incpc (4); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel9631; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel9631; } }}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9631: ; return; } #endif /* CHK.L (xxx).L,Dn */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4139_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); m68k_incpc (6); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel9632; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel9632; } }}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9632: ; return; } #endif /* CHK.L (d16,PC),Dn */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_413a_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); m68k_incpc (4); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel9633; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel9633; } }}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9633: ; return; } #endif /* CHK.L (d8,PC,Xn),Dn */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_413b_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel9634; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel9634; } }}}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9634: ; return; } #endif /* CHK.L #.L,Dn */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_413c_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uae_s32 dst = m68k_dreg (regs, dstreg); m68k_incpc (6); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel9635; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel9635; } }}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9635: ; return; } #endif /* CHK.W Dn,Dn */ void REGPARAM2 CPUFUNC(op_4180_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); m68k_incpc (2); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel9636; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel9636; } }}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9636: ; return; } /* CHK.W (An),Dn */ void REGPARAM2 CPUFUNC(op_4190_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); m68k_incpc (2); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel9637; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel9637; } }}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9637: ; return; } /* CHK.W (An)+,Dn */ void REGPARAM2 CPUFUNC(op_4198_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s16 dst = m68k_dreg (regs, dstreg); m68k_incpc (2); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel9638; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel9638; } }}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9638: ; return; } /* CHK.W -(An),Dn */ void REGPARAM2 CPUFUNC(op_41a0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s16 dst = m68k_dreg (regs, dstreg); m68k_incpc (2); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel9639; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel9639; } }}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9639: ; return; } /* CHK.W (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_41a8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); m68k_incpc (4); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel9640; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel9640; } }}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9640: ; return; } /* CHK.W (d8,An,Xn),Dn */ void REGPARAM2 CPUFUNC(op_41b0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel9641; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel9641; } }}}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9641: ; return; } /* CHK.W (xxx).W,Dn */ void REGPARAM2 CPUFUNC(op_41b8_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); m68k_incpc (4); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel9642; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel9642; } }}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9642: ; return; } /* CHK.W (xxx).L,Dn */ void REGPARAM2 CPUFUNC(op_41b9_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); m68k_incpc (6); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel9643; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel9643; } }}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9643: ; return; } /* CHK.W (d16,PC),Dn */ void REGPARAM2 CPUFUNC(op_41ba_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); m68k_incpc (4); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel9644; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel9644; } }}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9644: ; return; } /* CHK.W (d8,PC,Xn),Dn */ void REGPARAM2 CPUFUNC(op_41bb_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel9645; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel9645; } }}}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9645: ; return; } /* CHK.W #.W,Dn */ void REGPARAM2 CPUFUNC(op_41bc_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uae_s16 dst = m68k_dreg (regs, dstreg); m68k_incpc (4); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel9646; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel9646; } }}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9646: ; return; } /* LEA.L (An),An */ void REGPARAM2 CPUFUNC(op_41d0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { m68k_areg (regs, dstreg) = (srca); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* LEA.L (d16,An),An */ void REGPARAM2 CPUFUNC(op_41e8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { m68k_areg (regs, dstreg) = (srca); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* LEA.L (d8,An,Xn),An */ void REGPARAM2 CPUFUNC(op_41f0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { m68k_areg (regs, dstreg) = (srca); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* LEA.L (xxx).W,An */ void REGPARAM2 CPUFUNC(op_41f8_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { m68k_areg (regs, dstreg) = (srca); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* LEA.L (xxx).L,An */ void REGPARAM2 CPUFUNC(op_41f9_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { m68k_areg (regs, dstreg) = (srca); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* LEA.L (d16,PC),An */ void REGPARAM2 CPUFUNC(op_41fa_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { m68k_areg (regs, dstreg) = (srca); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* LEA.L (d8,PC,Xn),An */ void REGPARAM2 CPUFUNC(op_41fb_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { m68k_areg (regs, dstreg) = (srca); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* CLR.B Dn */ void REGPARAM2 CPUFUNC(op_4200_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ CLEAR_CZNV (); SET_ZFLG (((uae_s8)(0)) == 0); SET_NFLG (((uae_s8)(0)) < 0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((0) & 0xff); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CLR.B (An) */ void REGPARAM2 CPUFUNC(op_4210_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(0)) == 0); SET_NFLG (((uae_s8)(0)) < 0); x_put_byte (srca, 0); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CLR.B (An)+ */ void REGPARAM2 CPUFUNC(op_4218_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(0)) == 0); SET_NFLG (((uae_s8)(0)) < 0); x_put_byte (srca, 0); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CLR.B -(An) */ void REGPARAM2 CPUFUNC(op_4220_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(0)) == 0); SET_NFLG (((uae_s8)(0)) < 0); x_put_byte (srca, 0); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CLR.B (d16,An) */ void REGPARAM2 CPUFUNC(op_4228_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(0)) == 0); SET_NFLG (((uae_s8)(0)) < 0); x_put_byte (srca, 0); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* CLR.B (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_4230_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(0)) == 0); SET_NFLG (((uae_s8)(0)) < 0); x_put_byte (srca, 0); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* CLR.B (xxx).W */ void REGPARAM2 CPUFUNC(op_4238_22)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(0)) == 0); SET_NFLG (((uae_s8)(0)) < 0); x_put_byte (srca, 0); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* CLR.B (xxx).L */ void REGPARAM2 CPUFUNC(op_4239_22)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(0)) == 0); SET_NFLG (((uae_s8)(0)) < 0); x_put_byte (srca, 0); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* CLR.W Dn */ void REGPARAM2 CPUFUNC(op_4240_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ CLEAR_CZNV (); SET_ZFLG (((uae_s16)(0)) == 0); SET_NFLG (((uae_s16)(0)) < 0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | ((0) & 0xffff); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CLR.W (An) */ void REGPARAM2 CPUFUNC(op_4250_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(0)) == 0); SET_NFLG (((uae_s16)(0)) < 0); x_put_word (srca, 0); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CLR.W (An)+ */ void REGPARAM2 CPUFUNC(op_4258_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(0)) == 0); SET_NFLG (((uae_s16)(0)) < 0); x_put_word (srca, 0); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CLR.W -(An) */ void REGPARAM2 CPUFUNC(op_4260_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; m68k_areg (regs, srcreg) = srca; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(0)) == 0); SET_NFLG (((uae_s16)(0)) < 0); x_put_word (srca, 0); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CLR.W (d16,An) */ void REGPARAM2 CPUFUNC(op_4268_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(0)) == 0); SET_NFLG (((uae_s16)(0)) < 0); x_put_word (srca, 0); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* CLR.W (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_4270_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(0)) == 0); SET_NFLG (((uae_s16)(0)) < 0); x_put_word (srca, 0); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* CLR.W (xxx).W */ void REGPARAM2 CPUFUNC(op_4278_22)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(0)) == 0); SET_NFLG (((uae_s16)(0)) < 0); x_put_word (srca, 0); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* CLR.W (xxx).L */ void REGPARAM2 CPUFUNC(op_4279_22)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(0)) == 0); SET_NFLG (((uae_s16)(0)) < 0); x_put_word (srca, 0); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* CLR.L Dn */ void REGPARAM2 CPUFUNC(op_4280_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ CLEAR_CZNV (); SET_ZFLG (((uae_s32)(0)) == 0); SET_NFLG (((uae_s32)(0)) < 0); m68k_dreg (regs, srcreg) = (0); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CLR.L (An) */ void REGPARAM2 CPUFUNC(op_4290_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(0)) == 0); SET_NFLG (((uae_s32)(0)) < 0); x_put_long (srca, 0); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CLR.L (An)+ */ void REGPARAM2 CPUFUNC(op_4298_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(0)) == 0); SET_NFLG (((uae_s32)(0)) < 0); x_put_long (srca, 0); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CLR.L -(An) */ void REGPARAM2 CPUFUNC(op_42a0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; m68k_areg (regs, srcreg) = srca; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(0)) == 0); SET_NFLG (((uae_s32)(0)) < 0); x_put_long (srca, 0); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CLR.L (d16,An) */ void REGPARAM2 CPUFUNC(op_42a8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(0)) == 0); SET_NFLG (((uae_s32)(0)) < 0); x_put_long (srca, 0); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* CLR.L (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_42b0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(0)) == 0); SET_NFLG (((uae_s32)(0)) < 0); x_put_long (srca, 0); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* CLR.L (xxx).W */ void REGPARAM2 CPUFUNC(op_42b8_22)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(0)) == 0); SET_NFLG (((uae_s32)(0)) < 0); x_put_long (srca, 0); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* CLR.L (xxx).L */ void REGPARAM2 CPUFUNC(op_42b9_22)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(0)) == 0); SET_NFLG (((uae_s32)(0)) < 0); x_put_long (srca, 0); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* MVSR2.B Dn */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_42c0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ MakeSR (); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | ((regs.sr & 0xff) & 0xffff); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } #endif #endif #ifdef PART_4 /* MVSR2.B (An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_42d0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); MakeSR (); x_put_word (srca, regs.sr & 0xff); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } #endif /* MVSR2.B (An)+ */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_42d8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += 2; MakeSR (); x_put_word (srca, regs.sr & 0xff); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } #endif /* MVSR2.B -(An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_42e0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; m68k_areg (regs, srcreg) = srca; MakeSR (); x_put_word (srca, regs.sr & 0xff); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } #endif /* MVSR2.B (d16,An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_42e8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); MakeSR (); x_put_word (srca, regs.sr & 0xff); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } #endif /* MVSR2.B (d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_42f0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); MakeSR (); x_put_word (srca, regs.sr & 0xff); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* MVSR2.B (xxx).W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_42f8_22)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); MakeSR (); x_put_word (srca, regs.sr & 0xff); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } #endif /* MVSR2.B (xxx).L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_42f9_22)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); MakeSR (); x_put_word (srca, regs.sr & 0xff); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } #endif /* NEG.B Dn */ void REGPARAM2 CPUFUNC(op_4400_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); {{uae_u32 dst = ((uae_s8)(0)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(dst)) < 0; SET_ZFLG (((uae_s8)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((dst) & 0xff); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NEG.B (An) */ void REGPARAM2 CPUFUNC(op_4410_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); {{uae_u32 dst = ((uae_s8)(0)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(dst)) < 0; SET_ZFLG (((uae_s8)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (srca, dst); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NEG.B (An)+ */ void REGPARAM2 CPUFUNC(op_4418_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{uae_u32 dst = ((uae_s8)(0)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(dst)) < 0; SET_ZFLG (((uae_s8)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (srca, dst); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NEG.B -(An) */ void REGPARAM2 CPUFUNC(op_4420_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; {{uae_u32 dst = ((uae_s8)(0)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(dst)) < 0; SET_ZFLG (((uae_s8)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (srca, dst); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NEG.B (d16,An) */ void REGPARAM2 CPUFUNC(op_4428_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); {{uae_u32 dst = ((uae_s8)(0)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(dst)) < 0; SET_ZFLG (((uae_s8)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (srca, dst); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* NEG.B (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_4430_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s8 src = x_get_byte (srca); {{uae_u32 dst = ((uae_s8)(0)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(dst)) < 0; SET_ZFLG (((uae_s8)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (srca, dst); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* NEG.B (xxx).W */ void REGPARAM2 CPUFUNC(op_4438_22)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); {{uae_u32 dst = ((uae_s8)(0)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(dst)) < 0; SET_ZFLG (((uae_s8)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (srca, dst); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* NEG.B (xxx).L */ void REGPARAM2 CPUFUNC(op_4439_22)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); {{uae_u32 dst = ((uae_s8)(0)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(dst)) < 0; SET_ZFLG (((uae_s8)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (srca, dst); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* NEG.W Dn */ void REGPARAM2 CPUFUNC(op_4440_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); {{uae_u32 dst = ((uae_s16)(0)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(dst)) < 0; SET_ZFLG (((uae_s16)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | ((dst) & 0xffff); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NEG.W (An) */ void REGPARAM2 CPUFUNC(op_4450_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); {{uae_u32 dst = ((uae_s16)(0)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(dst)) < 0; SET_ZFLG (((uae_s16)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (srca, dst); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NEG.W (An)+ */ void REGPARAM2 CPUFUNC(op_4458_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; {{uae_u32 dst = ((uae_s16)(0)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(dst)) < 0; SET_ZFLG (((uae_s16)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (srca, dst); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NEG.W -(An) */ void REGPARAM2 CPUFUNC(op_4460_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; {{uae_u32 dst = ((uae_s16)(0)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(dst)) < 0; SET_ZFLG (((uae_s16)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (srca, dst); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NEG.W (d16,An) */ void REGPARAM2 CPUFUNC(op_4468_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); {{uae_u32 dst = ((uae_s16)(0)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(dst)) < 0; SET_ZFLG (((uae_s16)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (srca, dst); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* NEG.W (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_4470_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s16 src = x_get_word (srca); {{uae_u32 dst = ((uae_s16)(0)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(dst)) < 0; SET_ZFLG (((uae_s16)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (srca, dst); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* NEG.W (xxx).W */ void REGPARAM2 CPUFUNC(op_4478_22)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); {{uae_u32 dst = ((uae_s16)(0)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(dst)) < 0; SET_ZFLG (((uae_s16)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (srca, dst); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* NEG.W (xxx).L */ void REGPARAM2 CPUFUNC(op_4479_22)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); {{uae_u32 dst = ((uae_s16)(0)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(dst)) < 0; SET_ZFLG (((uae_s16)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (srca, dst); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* NEG.L Dn */ void REGPARAM2 CPUFUNC(op_4480_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); {{uae_u32 dst = ((uae_s32)(0)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(dst)) < 0; SET_ZFLG (((uae_s32)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, srcreg) = (dst); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NEG.L (An) */ void REGPARAM2 CPUFUNC(op_4490_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); {{uae_u32 dst = ((uae_s32)(0)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(dst)) < 0; SET_ZFLG (((uae_s32)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (srca, dst); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NEG.L (An)+ */ void REGPARAM2 CPUFUNC(op_4498_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) += 4; {{uae_u32 dst = ((uae_s32)(0)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(dst)) < 0; SET_ZFLG (((uae_s32)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (srca, dst); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NEG.L -(An) */ void REGPARAM2 CPUFUNC(op_44a0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) = srca; {{uae_u32 dst = ((uae_s32)(0)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(dst)) < 0; SET_ZFLG (((uae_s32)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (srca, dst); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NEG.L (d16,An) */ void REGPARAM2 CPUFUNC(op_44a8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); {{uae_u32 dst = ((uae_s32)(0)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(dst)) < 0; SET_ZFLG (((uae_s32)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (srca, dst); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* NEG.L (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_44b0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s32 src = x_get_long (srca); {{uae_u32 dst = ((uae_s32)(0)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(dst)) < 0; SET_ZFLG (((uae_s32)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (srca, dst); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* NEG.L (xxx).W */ void REGPARAM2 CPUFUNC(op_44b8_22)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); {{uae_u32 dst = ((uae_s32)(0)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(dst)) < 0; SET_ZFLG (((uae_s32)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (srca, dst); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* NEG.L (xxx).L */ void REGPARAM2 CPUFUNC(op_44b9_22)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); {{uae_u32 dst = ((uae_s32)(0)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(dst)) < 0; SET_ZFLG (((uae_s32)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (srca, dst); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* MV2SR.B Dn */ void REGPARAM2 CPUFUNC(op_44c0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* MV2SR.B (An) */ void REGPARAM2 CPUFUNC(op_44d0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* MV2SR.B (An)+ */ void REGPARAM2 CPUFUNC(op_44d8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* MV2SR.B -(An) */ void REGPARAM2 CPUFUNC(op_44e0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* MV2SR.B (d16,An) */ void REGPARAM2 CPUFUNC(op_44e8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* MV2SR.B (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_44f0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s16 src = x_get_word (srca); MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MV2SR.B (xxx).W */ void REGPARAM2 CPUFUNC(op_44f8_22)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* MV2SR.B (xxx).L */ void REGPARAM2 CPUFUNC(op_44f9_22)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* MV2SR.B (d16,PC) */ void REGPARAM2 CPUFUNC(op_44fa_22)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* MV2SR.B (d8,PC,Xn) */ void REGPARAM2 CPUFUNC(op_44fb_22)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s16 src = x_get_word (srca); MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MV2SR.B #.B */ void REGPARAM2 CPUFUNC(op_44fc_22)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* NOT.B Dn */ void REGPARAM2 CPUFUNC(op_4600_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(dst)) == 0); SET_NFLG (((uae_s8)(dst)) < 0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((dst) & 0xff); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NOT.B (An) */ void REGPARAM2 CPUFUNC(op_4610_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(dst)) == 0); SET_NFLG (((uae_s8)(dst)) < 0); x_put_byte (srca, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NOT.B (An)+ */ void REGPARAM2 CPUFUNC(op_4618_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(dst)) == 0); SET_NFLG (((uae_s8)(dst)) < 0); x_put_byte (srca, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NOT.B -(An) */ void REGPARAM2 CPUFUNC(op_4620_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(dst)) == 0); SET_NFLG (((uae_s8)(dst)) < 0); x_put_byte (srca, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NOT.B (d16,An) */ void REGPARAM2 CPUFUNC(op_4628_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(dst)) == 0); SET_NFLG (((uae_s8)(dst)) < 0); x_put_byte (srca, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* NOT.B (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_4630_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s8 src = x_get_byte (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(dst)) == 0); SET_NFLG (((uae_s8)(dst)) < 0); x_put_byte (srca, dst); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* NOT.B (xxx).W */ void REGPARAM2 CPUFUNC(op_4638_22)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(dst)) == 0); SET_NFLG (((uae_s8)(dst)) < 0); x_put_byte (srca, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* NOT.B (xxx).L */ void REGPARAM2 CPUFUNC(op_4639_22)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(dst)) == 0); SET_NFLG (((uae_s8)(dst)) < 0); x_put_byte (srca, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* NOT.W Dn */ void REGPARAM2 CPUFUNC(op_4640_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(dst)) == 0); SET_NFLG (((uae_s16)(dst)) < 0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | ((dst) & 0xffff); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NOT.W (An) */ void REGPARAM2 CPUFUNC(op_4650_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(dst)) == 0); SET_NFLG (((uae_s16)(dst)) < 0); x_put_word (srca, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NOT.W (An)+ */ void REGPARAM2 CPUFUNC(op_4658_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(dst)) == 0); SET_NFLG (((uae_s16)(dst)) < 0); x_put_word (srca, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NOT.W -(An) */ void REGPARAM2 CPUFUNC(op_4660_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(dst)) == 0); SET_NFLG (((uae_s16)(dst)) < 0); x_put_word (srca, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NOT.W (d16,An) */ void REGPARAM2 CPUFUNC(op_4668_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(dst)) == 0); SET_NFLG (((uae_s16)(dst)) < 0); x_put_word (srca, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* NOT.W (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_4670_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(dst)) == 0); SET_NFLG (((uae_s16)(dst)) < 0); x_put_word (srca, dst); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* NOT.W (xxx).W */ void REGPARAM2 CPUFUNC(op_4678_22)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(dst)) == 0); SET_NFLG (((uae_s16)(dst)) < 0); x_put_word (srca, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* NOT.W (xxx).L */ void REGPARAM2 CPUFUNC(op_4679_22)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(dst)) == 0); SET_NFLG (((uae_s16)(dst)) < 0); x_put_word (srca, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* NOT.L Dn */ void REGPARAM2 CPUFUNC(op_4680_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); m68k_dreg (regs, srcreg) = (dst); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NOT.L (An) */ void REGPARAM2 CPUFUNC(op_4690_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); x_put_long (srca, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NOT.L (An)+ */ void REGPARAM2 CPUFUNC(op_4698_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) += 4; { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); x_put_long (srca, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NOT.L -(An) */ void REGPARAM2 CPUFUNC(op_46a0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) = srca; { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); x_put_long (srca, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NOT.L (d16,An) */ void REGPARAM2 CPUFUNC(op_46a8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); x_put_long (srca, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* NOT.L (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_46b0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); x_put_long (srca, dst); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* NOT.L (xxx).W */ void REGPARAM2 CPUFUNC(op_46b8_22)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); x_put_long (srca, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* NOT.L (xxx).L */ void REGPARAM2 CPUFUNC(op_46b9_22)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); x_put_long (srca, dst); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* MV2SR.W Dn */ void REGPARAM2 CPUFUNC(op_46c0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel9745; } {{ uae_s16 src = m68k_dreg (regs, srcreg); regs.sr = src; MakeFromSR (); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); endlabel9745: ; return; } /* MV2SR.W (An) */ void REGPARAM2 CPUFUNC(op_46d0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel9746; } {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); regs.sr = src; MakeFromSR (); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); endlabel9746: ; return; } /* MV2SR.W (An)+ */ void REGPARAM2 CPUFUNC(op_46d8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel9747; } {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; regs.sr = src; MakeFromSR (); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); endlabel9747: ; return; } /* MV2SR.W -(An) */ void REGPARAM2 CPUFUNC(op_46e0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel9748; } {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; regs.sr = src; MakeFromSR (); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); endlabel9748: ; return; } /* MV2SR.W (d16,An) */ void REGPARAM2 CPUFUNC(op_46e8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel9749; } {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); regs.sr = src; MakeFromSR (); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); endlabel9749: ; return; } /* MV2SR.W (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_46f0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel9750; } {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s16 src = x_get_word (srca); regs.sr = src; MakeFromSR (); }}}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9750: ; return; } /* MV2SR.W (xxx).W */ void REGPARAM2 CPUFUNC(op_46f8_22)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel9751; } {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); regs.sr = src; MakeFromSR (); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); endlabel9751: ; return; } /* MV2SR.W (xxx).L */ void REGPARAM2 CPUFUNC(op_46f9_22)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel9752; } {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); regs.sr = src; MakeFromSR (); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); endlabel9752: ; return; } /* MV2SR.W (d16,PC) */ void REGPARAM2 CPUFUNC(op_46fa_22)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel9753; } {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); regs.sr = src; MakeFromSR (); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); endlabel9753: ; return; } /* MV2SR.W (d8,PC,Xn) */ void REGPARAM2 CPUFUNC(op_46fb_22)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel9754; } {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s16 src = x_get_word (srca); regs.sr = src; MakeFromSR (); }}}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9754: ; return; } /* MV2SR.W #.W */ void REGPARAM2 CPUFUNC(op_46fc_22)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel9755; } {{ uae_s16 src = get_word_ce020_prefetch (2); regs.sr = src; MakeFromSR (); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); endlabel9755: ; return; } /* NBCD.B Dn */ void REGPARAM2 CPUFUNC(op_4800_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = - (src & 0xF0); uae_u16 newv; int cflg; if (newv_lo > 9) { newv_lo -= 6; } newv = newv_hi + newv_lo; cflg = (newv & 0x1F0) > 0x90; if (cflg) newv -= 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((newv) & 0xff); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* LINK.L An,#.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4808_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr olda; olda = m68k_areg (regs, 7) - 4; m68k_areg (regs, 7) = olda; { uae_s32 src = m68k_areg (regs, srcreg); { uae_s32 offs = get_long_ce020_prefetch (2); x_put_long (olda, src); m68k_areg (regs, srcreg) = (m68k_areg (regs, 7)); m68k_areg (regs, 7) += offs; }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } #endif /* NBCD.B (An) */ void REGPARAM2 CPUFUNC(op_4810_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { uae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = - (src & 0xF0); uae_u16 newv; int cflg; if (newv_lo > 9) { newv_lo -= 6; } newv = newv_hi + newv_lo; cflg = (newv & 0x1F0) > 0x90; if (cflg) newv -= 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); x_put_byte (srca, newv); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NBCD.B (An)+ */ void REGPARAM2 CPUFUNC(op_4818_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = - (src & 0xF0); uae_u16 newv; int cflg; if (newv_lo > 9) { newv_lo -= 6; } newv = newv_hi + newv_lo; cflg = (newv & 0x1F0) > 0x90; if (cflg) newv -= 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); x_put_byte (srca, newv); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NBCD.B -(An) */ void REGPARAM2 CPUFUNC(op_4820_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = - (src & 0xF0); uae_u16 newv; int cflg; if (newv_lo > 9) { newv_lo -= 6; } newv = newv_hi + newv_lo; cflg = (newv & 0x1F0) > 0x90; if (cflg) newv -= 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); x_put_byte (srca, newv); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NBCD.B (d16,An) */ void REGPARAM2 CPUFUNC(op_4828_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = - (src & 0xF0); uae_u16 newv; int cflg; if (newv_lo > 9) { newv_lo -= 6; } newv = newv_hi + newv_lo; cflg = (newv & 0x1F0) > 0x90; if (cflg) newv -= 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); x_put_byte (srca, newv); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* NBCD.B (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_4830_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s8 src = x_get_byte (srca); { uae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = - (src & 0xF0); uae_u16 newv; int cflg; if (newv_lo > 9) { newv_lo -= 6; } newv = newv_hi + newv_lo; cflg = (newv & 0x1F0) > 0x90; if (cflg) newv -= 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); x_put_byte (srca, newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* NBCD.B (xxx).W */ void REGPARAM2 CPUFUNC(op_4838_22)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = - (src & 0xF0); uae_u16 newv; int cflg; if (newv_lo > 9) { newv_lo -= 6; } newv = newv_hi + newv_lo; cflg = (newv & 0x1F0) > 0x90; if (cflg) newv -= 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); x_put_byte (srca, newv); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* NBCD.B (xxx).L */ void REGPARAM2 CPUFUNC(op_4839_22)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = - (src & 0xF0); uae_u16 newv; int cflg; if (newv_lo > 9) { newv_lo -= 6; } newv = newv_hi + newv_lo; cflg = (newv & 0x1F0) > 0x90; if (cflg) newv -= 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); x_put_byte (srca, newv); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* SWAP.W Dn */ void REGPARAM2 CPUFUNC(op_4840_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_u32 dst = ((src >> 16)&0xFFFF) | ((src&0xFFFF)<<16); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); m68k_dreg (regs, srcreg) = (dst); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* BKPTQ.L # */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4848_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); { m68k_incpc (2); op_illg (opcode); } regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* PEA.L (An) */ void REGPARAM2 CPUFUNC(op_4850_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, 7) - 4; m68k_areg (regs, 7) = dsta; x_put_long (dsta, srca); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* PEA.L (d16,An) */ void REGPARAM2 CPUFUNC(op_4868_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, 7) - 4; m68k_areg (regs, 7) = dsta; x_put_long (dsta, srca); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* PEA.L (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_4870_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uaecptr dsta; dsta = m68k_areg (regs, 7) - 4; m68k_areg (regs, 7) = dsta; x_put_long (dsta, srca); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* PEA.L (xxx).W */ void REGPARAM2 CPUFUNC(op_4878_22)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, 7) - 4; m68k_areg (regs, 7) = dsta; x_put_long (dsta, srca); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* PEA.L (xxx).L */ void REGPARAM2 CPUFUNC(op_4879_22)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, 7) - 4; m68k_areg (regs, 7) = dsta; x_put_long (dsta, srca); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* PEA.L (d16,PC) */ void REGPARAM2 CPUFUNC(op_487a_22)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, 7) - 4; m68k_areg (regs, 7) = dsta; x_put_long (dsta, srca); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* PEA.L (d8,PC,Xn) */ void REGPARAM2 CPUFUNC(op_487b_22)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uaecptr dsta; dsta = m68k_areg (regs, 7) - 4; m68k_areg (regs, 7) = dsta; x_put_long (dsta, srca); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* EXT.W Dn */ void REGPARAM2 CPUFUNC(op_4880_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_u16 dst = (uae_s16)(uae_s8)src; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(dst)) == 0); SET_NFLG (((uae_s16)(dst)) < 0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | ((dst) & 0xffff); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* MVMLE.W #.W,(An) */ void REGPARAM2 CPUFUNC(op_4890_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_ce020_prefetch (2); { uaecptr srca = m68k_areg (regs, dstreg); { uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; while (dmask) { x_put_word (srca, m68k_dreg (regs, movem_index1[dmask])); srca += 2; dmask = movem_next[dmask]; } while (amask) { x_put_word (srca, m68k_areg (regs, movem_index1[amask])); srca += 2; amask = movem_next[amask]; } }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* MVMLE.W #.W,-(An) */ void REGPARAM2 CPUFUNC(op_48a0_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_ce020_prefetch (2); { uaecptr srca; srca = m68k_areg (regs, dstreg) - 0; { uae_u16 amask = mask & 0xff, dmask = (mask >> 8) & 0xff; int type = get_cpu_model () >= 68020; while (amask) { srca -= 2; if (type) m68k_areg (regs, dstreg) = srca; x_put_word (srca, m68k_areg (regs, movem_index2[amask])); amask = movem_next[amask]; } while (dmask) { srca -= 2; x_put_word (srca, m68k_dreg (regs, movem_index2[dmask])); dmask = movem_next[dmask]; } m68k_areg (regs, dstreg) = srca; }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* MVMLE.W #.W,(d16,An) */ void REGPARAM2 CPUFUNC(op_48a8_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_ce020_prefetch (2); { uaecptr srca = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; while (dmask) { x_put_word (srca, m68k_dreg (regs, movem_index1[dmask])); srca += 2; dmask = movem_next[dmask]; } while (amask) { x_put_word (srca, m68k_areg (regs, movem_index1[amask])); srca += 2; amask = movem_next[amask]; } }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* MVMLE.W #.W,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_48b0_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_ce020_prefetch (2); { uaecptr srca; m68k_incpc (4); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; while (dmask) { x_put_word (srca, m68k_dreg (regs, movem_index1[dmask])); srca += 2; dmask = movem_next[dmask]; } while (amask) { x_put_word (srca, m68k_areg (regs, movem_index1[amask])); srca += 2; amask = movem_next[amask]; } }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MVMLE.W #.W,(xxx).W */ void REGPARAM2 CPUFUNC(op_48b8_22)(uae_u32 opcode) { { uae_u16 mask = get_word_ce020_prefetch (2); { uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; while (dmask) { x_put_word (srca, m68k_dreg (regs, movem_index1[dmask])); srca += 2; dmask = movem_next[dmask]; } while (amask) { x_put_word (srca, m68k_areg (regs, movem_index1[amask])); srca += 2; amask = movem_next[amask]; } }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* MVMLE.W #.W,(xxx).L */ void REGPARAM2 CPUFUNC(op_48b9_22)(uae_u32 opcode) { { uae_u16 mask = get_word_ce020_prefetch (2); { uaecptr srca = get_long_ce020_prefetch (4); { uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; while (dmask) { x_put_word (srca, m68k_dreg (regs, movem_index1[dmask])); srca += 2; dmask = movem_next[dmask]; } while (amask) { x_put_word (srca, m68k_areg (regs, movem_index1[amask])); srca += 2; amask = movem_next[amask]; } }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } /* EXT.L Dn */ void REGPARAM2 CPUFUNC(op_48c0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_u32 dst = (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); m68k_dreg (regs, srcreg) = (dst); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* MVMLE.L #.W,(An) */ void REGPARAM2 CPUFUNC(op_48d0_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_ce020_prefetch (2); { uaecptr srca = m68k_areg (regs, dstreg); { uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; while (dmask) { x_put_long (srca, m68k_dreg (regs, movem_index1[dmask])); srca += 4; dmask = movem_next[dmask]; } while (amask) { x_put_long (srca, m68k_areg (regs, movem_index1[amask])); srca += 4; amask = movem_next[amask]; } }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* MVMLE.L #.W,-(An) */ void REGPARAM2 CPUFUNC(op_48e0_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_ce020_prefetch (2); { uaecptr srca; srca = m68k_areg (regs, dstreg) - 0; { uae_u16 amask = mask & 0xff, dmask = (mask >> 8) & 0xff; int type = get_cpu_model () >= 68020; while (amask) { srca -= 4; if (type) m68k_areg (regs, dstreg) = srca; x_put_long (srca, m68k_areg (regs, movem_index2[amask])); amask = movem_next[amask]; } while (dmask) { srca -= 4; x_put_long (srca, m68k_dreg (regs, movem_index2[dmask])); dmask = movem_next[dmask]; } m68k_areg (regs, dstreg) = srca; }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* MVMLE.L #.W,(d16,An) */ void REGPARAM2 CPUFUNC(op_48e8_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_ce020_prefetch (2); { uaecptr srca = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; while (dmask) { x_put_long (srca, m68k_dreg (regs, movem_index1[dmask])); srca += 4; dmask = movem_next[dmask]; } while (amask) { x_put_long (srca, m68k_areg (regs, movem_index1[amask])); srca += 4; amask = movem_next[amask]; } }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* MVMLE.L #.W,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_48f0_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_ce020_prefetch (2); { uaecptr srca; m68k_incpc (4); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; while (dmask) { x_put_long (srca, m68k_dreg (regs, movem_index1[dmask])); srca += 4; dmask = movem_next[dmask]; } while (amask) { x_put_long (srca, m68k_areg (regs, movem_index1[amask])); srca += 4; amask = movem_next[amask]; } }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MVMLE.L #.W,(xxx).W */ void REGPARAM2 CPUFUNC(op_48f8_22)(uae_u32 opcode) { { uae_u16 mask = get_word_ce020_prefetch (2); { uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; while (dmask) { x_put_long (srca, m68k_dreg (regs, movem_index1[dmask])); srca += 4; dmask = movem_next[dmask]; } while (amask) { x_put_long (srca, m68k_areg (regs, movem_index1[amask])); srca += 4; amask = movem_next[amask]; } }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* MVMLE.L #.W,(xxx).L */ void REGPARAM2 CPUFUNC(op_48f9_22)(uae_u32 opcode) { { uae_u16 mask = get_word_ce020_prefetch (2); { uaecptr srca = get_long_ce020_prefetch (4); { uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; while (dmask) { x_put_long (srca, m68k_dreg (regs, movem_index1[dmask])); srca += 4; dmask = movem_next[dmask]; } while (amask) { x_put_long (srca, m68k_areg (regs, movem_index1[amask])); srca += 4; amask = movem_next[amask]; } }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } /* EXT.B Dn */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_49c0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_u32 dst = (uae_s32)(uae_s8)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); m68k_dreg (regs, srcreg) = (dst); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } #endif /* TST.B Dn */ void REGPARAM2 CPUFUNC(op_4a00_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* TST.B (An) */ void REGPARAM2 CPUFUNC(op_4a10_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* TST.B (An)+ */ void REGPARAM2 CPUFUNC(op_4a18_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* TST.B -(An) */ void REGPARAM2 CPUFUNC(op_4a20_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* TST.B (d16,An) */ void REGPARAM2 CPUFUNC(op_4a28_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* TST.B (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_4a30_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s8 src = x_get_byte (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* TST.B (xxx).W */ void REGPARAM2 CPUFUNC(op_4a38_22)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* TST.B (xxx).L */ void REGPARAM2 CPUFUNC(op_4a39_22)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* TST.B (d16,PC) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4a3a_22)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } #endif /* TST.B (d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4a3b_22)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s8 src = x_get_byte (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* TST.B #.B */ void REGPARAM2 CPUFUNC(op_4a3c_22)(uae_u32 opcode) { {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* TST.W Dn */ void REGPARAM2 CPUFUNC(op_4a40_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* TST.W An */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4a48_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_areg (regs, srcreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } #endif /* TST.W (An) */ void REGPARAM2 CPUFUNC(op_4a50_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* TST.W (An)+ */ void REGPARAM2 CPUFUNC(op_4a58_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* TST.W -(An) */ void REGPARAM2 CPUFUNC(op_4a60_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* TST.W (d16,An) */ void REGPARAM2 CPUFUNC(op_4a68_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* TST.W (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_4a70_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s16 src = x_get_word (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* TST.W (xxx).W */ void REGPARAM2 CPUFUNC(op_4a78_22)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* TST.W (xxx).L */ void REGPARAM2 CPUFUNC(op_4a79_22)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* TST.W (d16,PC) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4a7a_22)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } #endif /* TST.W (d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4a7b_22)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s16 src = x_get_word (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* TST.W #.W */ void REGPARAM2 CPUFUNC(op_4a7c_22)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* TST.L Dn */ void REGPARAM2 CPUFUNC(op_4a80_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* TST.L An */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4a88_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_areg (regs, srcreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } #endif /* TST.L (An) */ void REGPARAM2 CPUFUNC(op_4a90_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* TST.L (An)+ */ void REGPARAM2 CPUFUNC(op_4a98_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* TST.L -(An) */ void REGPARAM2 CPUFUNC(op_4aa0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) = srca; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* TST.L (d16,An) */ void REGPARAM2 CPUFUNC(op_4aa8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* TST.L (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_4ab0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s32 src = x_get_long (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* TST.L (xxx).W */ void REGPARAM2 CPUFUNC(op_4ab8_22)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* TST.L (xxx).L */ void REGPARAM2 CPUFUNC(op_4ab9_22)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* TST.L (d16,PC) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4aba_22)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } #endif /* TST.L (d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4abb_22)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s32 src = x_get_long (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* TST.L #.L */ void REGPARAM2 CPUFUNC(op_4abc_22)(uae_u32 opcode) { {{ uae_s32 src = get_long_ce020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* TAS.B Dn */ void REGPARAM2 CPUFUNC(op_4ac0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); src |= 0x80; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((src) & 0xff); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* TAS.B (An) */ void REGPARAM2 CPUFUNC(op_4ad0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); src |= 0x80; x_put_byte (srca, src); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* TAS.B (An)+ */ void REGPARAM2 CPUFUNC(op_4ad8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); src |= 0x80; x_put_byte (srca, src); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* TAS.B -(An) */ void REGPARAM2 CPUFUNC(op_4ae0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); src |= 0x80; x_put_byte (srca, src); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* TAS.B (d16,An) */ void REGPARAM2 CPUFUNC(op_4ae8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); src |= 0x80; x_put_byte (srca, src); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* TAS.B (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_4af0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s8 src = x_get_byte (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); src |= 0x80; x_put_byte (srca, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* TAS.B (xxx).W */ void REGPARAM2 CPUFUNC(op_4af8_22)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); src |= 0x80; x_put_byte (srca, src); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* TAS.B (xxx).L */ void REGPARAM2 CPUFUNC(op_4af9_22)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); src |= 0x80; x_put_byte (srca, src); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* MULL.L #.W,Dn */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4c00_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ce020memcycles += 40 * cpucycleunit; m68k_incpc (4); m68k_mull(opcode, dst, extra); }}}return; } #endif /* MULL.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4c10_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); regs.ce020memcycles += 40 * cpucycleunit; m68k_incpc (4); m68k_mull(opcode, dst, extra); }}}}return; } #endif /* MULL.L #.W,(An)+ */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4c18_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) += 4; regs.ce020memcycles += 40 * cpucycleunit; m68k_incpc (4); m68k_mull(opcode, dst, extra); }}}}return; } #endif /* MULL.L #.W,-(An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4c20_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) = dsta; regs.ce020memcycles += 40 * cpucycleunit; m68k_incpc (4); m68k_mull(opcode, dst, extra); }}}}return; } #endif /* MULL.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4c28_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s32 dst = x_get_long (dsta); regs.ce020memcycles += 40 * cpucycleunit; m68k_incpc (6); m68k_mull(opcode, dst, extra); }}}}return; } #endif /* MULL.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4c30_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s32 dst = x_get_long (dsta); regs.ce020memcycles += 40 * cpucycleunit; m68k_mull(opcode, dst, extra); }}}}}return; } #endif /* MULL.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4c38_22)(uae_u32 opcode) { {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s32 dst = x_get_long (dsta); regs.ce020memcycles += 40 * cpucycleunit; m68k_incpc (6); m68k_mull(opcode, dst, extra); }}}}return; } #endif /* MULL.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4c39_22)(uae_u32 opcode) { {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (4); { uae_s32 dst = x_get_long (dsta); regs.ce020memcycles += 40 * cpucycleunit; m68k_incpc (8); m68k_mull(opcode, dst, extra); }}}}return; } #endif /* MULL.L #.W,(d16,PC) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4c3a_22)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s32 dst = x_get_long (dsta); regs.ce020memcycles += 40 * cpucycleunit; m68k_incpc (6); m68k_mull(opcode, dst, extra); }}}}return; } #endif /* MULL.L #.W,(d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4c3b_22)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr tmppc; uaecptr dsta; m68k_incpc (4); { tmppc = m68k_getpc (); dsta = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s32 dst = x_get_long (dsta); regs.ce020memcycles += 40 * cpucycleunit; m68k_mull(opcode, dst, extra); }}}}}return; } #endif /* MULL.L #.W,#.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4c3c_22)(uae_u32 opcode) { {{ uae_s16 extra = get_word_ce020_prefetch (2); { uae_s32 dst = get_long_ce020_prefetch (4); regs.ce020memcycles += 40 * cpucycleunit; m68k_incpc (8); m68k_mull(opcode, dst, extra); }}}return; } #endif /* DIVL.L #.W,Dn */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4c40_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ce020memcycles += 70 * cpucycleunit; m68k_incpc (4); m68k_divl(opcode, dst, extra); }}}return; } #endif /* DIVL.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4c50_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); regs.ce020memcycles += 70 * cpucycleunit; m68k_incpc (4); m68k_divl(opcode, dst, extra); }}}}return; } #endif /* DIVL.L #.W,(An)+ */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4c58_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) += 4; regs.ce020memcycles += 70 * cpucycleunit; m68k_incpc (4); m68k_divl(opcode, dst, extra); }}}}return; } #endif /* DIVL.L #.W,-(An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4c60_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) = dsta; regs.ce020memcycles += 70 * cpucycleunit; m68k_incpc (4); m68k_divl(opcode, dst, extra); }}}}return; } #endif /* DIVL.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4c68_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s32 dst = x_get_long (dsta); regs.ce020memcycles += 70 * cpucycleunit; m68k_incpc (6); m68k_divl(opcode, dst, extra); }}}}return; } #endif /* DIVL.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4c70_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s32 dst = x_get_long (dsta); regs.ce020memcycles += 70 * cpucycleunit; m68k_divl(opcode, dst, extra); }}}}}return; } #endif /* DIVL.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4c78_22)(uae_u32 opcode) { {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s32 dst = x_get_long (dsta); regs.ce020memcycles += 70 * cpucycleunit; m68k_incpc (6); m68k_divl(opcode, dst, extra); }}}}return; } #endif /* DIVL.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4c79_22)(uae_u32 opcode) { {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (4); { uae_s32 dst = x_get_long (dsta); regs.ce020memcycles += 70 * cpucycleunit; m68k_incpc (8); m68k_divl(opcode, dst, extra); }}}}return; } #endif /* DIVL.L #.W,(d16,PC) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4c7a_22)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_s32 dst = x_get_long (dsta); regs.ce020memcycles += 70 * cpucycleunit; m68k_incpc (6); m68k_divl(opcode, dst, extra); }}}}return; } #endif /* DIVL.L #.W,(d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4c7b_22)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr tmppc; uaecptr dsta; m68k_incpc (4); { tmppc = m68k_getpc (); dsta = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s32 dst = x_get_long (dsta); regs.ce020memcycles += 70 * cpucycleunit; m68k_divl(opcode, dst, extra); }}}}}return; } #endif /* DIVL.L #.W,#.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4c7c_22)(uae_u32 opcode) { {{ uae_s16 extra = get_word_ce020_prefetch (2); { uae_s32 dst = get_long_ce020_prefetch (4); regs.ce020memcycles += 70 * cpucycleunit; m68k_incpc (8); m68k_divl(opcode, dst, extra); }}}return; } #endif /* MVMEL.W #.W,(An) */ void REGPARAM2 CPUFUNC(op_4c90_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_ce020_prefetch (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca = m68k_areg (regs, dstreg); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = (uae_s32)(uae_s16)x_get_word (srca); srca += 2; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = (uae_s32)(uae_s16)x_get_word (srca); srca += 2; amask = movem_next[amask]; } }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* MVMEL.W #.W,(An)+ */ void REGPARAM2 CPUFUNC(op_4c98_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_ce020_prefetch (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca = m68k_areg (regs, dstreg); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = (uae_s32)(uae_s16)x_get_word (srca); srca += 2; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = (uae_s32)(uae_s16)x_get_word (srca); srca += 2; amask = movem_next[amask]; } m68k_areg (regs, dstreg) = srca; }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* MVMEL.W #.W,(d16,An) */ void REGPARAM2 CPUFUNC(op_4ca8_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_ce020_prefetch (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = (uae_s32)(uae_s16)x_get_word (srca); srca += 2; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = (uae_s32)(uae_s16)x_get_word (srca); srca += 2; amask = movem_next[amask]; } }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* MVMEL.W #.W,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_4cb0_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_ce020_prefetch (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca; m68k_incpc (4); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = (uae_s32)(uae_s16)x_get_word (srca); srca += 2; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = (uae_s32)(uae_s16)x_get_word (srca); srca += 2; amask = movem_next[amask]; } }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MVMEL.W #.W,(xxx).W */ void REGPARAM2 CPUFUNC(op_4cb8_22)(uae_u32 opcode) { { uae_u16 mask = get_word_ce020_prefetch (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = (uae_s32)(uae_s16)x_get_word (srca); srca += 2; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = (uae_s32)(uae_s16)x_get_word (srca); srca += 2; amask = movem_next[amask]; } }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* MVMEL.W #.W,(xxx).L */ void REGPARAM2 CPUFUNC(op_4cb9_22)(uae_u32 opcode) { { uae_u16 mask = get_word_ce020_prefetch (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca = get_long_ce020_prefetch (4); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = (uae_s32)(uae_s16)x_get_word (srca); srca += 2; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = (uae_s32)(uae_s16)x_get_word (srca); srca += 2; amask = movem_next[amask]; } }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } /* MVMEL.W #.W,(d16,PC) */ void REGPARAM2 CPUFUNC(op_4cba_22)(uae_u32 opcode) { uae_u32 dstreg = 2; { uae_u16 mask = get_word_ce020_prefetch (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca = m68k_getpc () + 4; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = (uae_s32)(uae_s16)x_get_word (srca); srca += 2; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = (uae_s32)(uae_s16)x_get_word (srca); srca += 2; amask = movem_next[amask]; } }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* MVMEL.W #.W,(d8,PC,Xn) */ void REGPARAM2 CPUFUNC(op_4cbb_22)(uae_u32 opcode) { uae_u32 dstreg = 3; { uae_u16 mask = get_word_ce020_prefetch (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr tmppc; uaecptr srca; m68k_incpc (4); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = (uae_s32)(uae_s16)x_get_word (srca); srca += 2; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = (uae_s32)(uae_s16)x_get_word (srca); srca += 2; amask = movem_next[amask]; } }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MVMEL.L #.W,(An) */ void REGPARAM2 CPUFUNC(op_4cd0_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_ce020_prefetch (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca = m68k_areg (regs, dstreg); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = x_get_long (srca); srca += 4; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = x_get_long (srca); srca += 4; amask = movem_next[amask]; } }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* MVMEL.L #.W,(An)+ */ void REGPARAM2 CPUFUNC(op_4cd8_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_ce020_prefetch (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca = m68k_areg (regs, dstreg); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = x_get_long (srca); srca += 4; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = x_get_long (srca); srca += 4; amask = movem_next[amask]; } m68k_areg (regs, dstreg) = srca; }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* MVMEL.L #.W,(d16,An) */ void REGPARAM2 CPUFUNC(op_4ce8_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_ce020_prefetch (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = x_get_long (srca); srca += 4; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = x_get_long (srca); srca += 4; amask = movem_next[amask]; } }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* MVMEL.L #.W,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_4cf0_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_ce020_prefetch (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca; m68k_incpc (4); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = x_get_long (srca); srca += 4; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = x_get_long (srca); srca += 4; amask = movem_next[amask]; } }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MVMEL.L #.W,(xxx).W */ void REGPARAM2 CPUFUNC(op_4cf8_22)(uae_u32 opcode) { { uae_u16 mask = get_word_ce020_prefetch (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = x_get_long (srca); srca += 4; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = x_get_long (srca); srca += 4; amask = movem_next[amask]; } }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* MVMEL.L #.W,(xxx).L */ void REGPARAM2 CPUFUNC(op_4cf9_22)(uae_u32 opcode) { { uae_u16 mask = get_word_ce020_prefetch (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca = get_long_ce020_prefetch (4); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = x_get_long (srca); srca += 4; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = x_get_long (srca); srca += 4; amask = movem_next[amask]; } }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } /* MVMEL.L #.W,(d16,PC) */ void REGPARAM2 CPUFUNC(op_4cfa_22)(uae_u32 opcode) { uae_u32 dstreg = 2; { uae_u16 mask = get_word_ce020_prefetch (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca = m68k_getpc () + 4; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = x_get_long (srca); srca += 4; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = x_get_long (srca); srca += 4; amask = movem_next[amask]; } }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* MVMEL.L #.W,(d8,PC,Xn) */ void REGPARAM2 CPUFUNC(op_4cfb_22)(uae_u32 opcode) { uae_u32 dstreg = 3; { uae_u16 mask = get_word_ce020_prefetch (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr tmppc; uaecptr srca; m68k_incpc (4); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = x_get_long (srca); srca += 4; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = x_get_long (srca); srca += 4; amask = movem_next[amask]; } }}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* TRAPQ.L # */ void REGPARAM2 CPUFUNC(op_4e40_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 15); {{ uae_u32 src = srcreg; m68k_incpc (2); Exception (src + 32); }} regs.ce020memcycles += 2 * cpucycleunit; return; } /* LINK.W An,#.W */ void REGPARAM2 CPUFUNC(op_4e50_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr olda; olda = m68k_areg (regs, 7) - 4; m68k_areg (regs, 7) = olda; { uae_s32 src = m68k_areg (regs, srcreg); { uae_s16 offs = get_word_ce020_prefetch (2); x_put_long (olda, src); m68k_areg (regs, srcreg) = (m68k_areg (regs, 7)); m68k_areg (regs, 7) += offs; }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* UNLK.L An */ void REGPARAM2 CPUFUNC(op_4e58_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_areg (regs, srcreg); m68k_areg (regs, 7) = src; { uaecptr olda = m68k_areg (regs, 7); { uae_s32 old = x_get_long (olda); m68k_areg (regs, 7) += 4; m68k_areg (regs, srcreg) = (old); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* MVR2USP.L An */ void REGPARAM2 CPUFUNC(op_4e60_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel9873; } {{ uae_s32 src = m68k_areg (regs, srcreg); regs.usp = src; }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); endlabel9873: ; return; } /* MVUSP2R.L An */ void REGPARAM2 CPUFUNC(op_4e68_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel9874; } {{ m68k_areg (regs, srcreg) = (regs.usp); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); endlabel9874: ; return; } /* RESET.L */ void REGPARAM2 CPUFUNC(op_4e70_22)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel9875; } { cpureset (); m68k_incpc (2); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel9875: ; return; } /* NOP.L */ void REGPARAM2 CPUFUNC(op_4e71_22)(uae_u32 opcode) { { do_cycles_ce020 (6); } regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* STOP.L #.W */ void REGPARAM2 CPUFUNC(op_4e72_22)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel9877; } {{ uae_s16 src = get_word_ce020_prefetch (2); regs.sr = src; MakeFromSR (); m68k_setstopped (); m68k_incpc (4); }}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9877: ; return; } /* RTE.L */ void REGPARAM2 CPUFUNC(op_4e73_22)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel9878; } { uae_u16 newsr; uae_u32 newpc; for (;;) { uaecptr a = m68k_areg (regs, 7); uae_s16 sr = x_get_word (a); uae_s32 pc = x_get_long (a + 2); uae_s16 format = x_get_word (a + 2 + 4); int frame = format >> 12; int offset = 8; newsr = sr; newpc = pc; if (frame == 0x0) { m68k_areg (regs, 7) += offset; break; } else if (frame == 0x1) { m68k_areg (regs, 7) += offset; } else if (frame == 0x2) { m68k_areg (regs, 7) += offset + 4; break; } else if (frame == 0x4) { m68k_areg (regs, 7) += offset + 8; break; } else if (frame == 0x8) { m68k_areg (regs, 7) += offset + 50; break; } else if (frame == 0x9) { m68k_areg (regs, 7) += offset + 12; break; } else if (frame == 0xa) { m68k_areg (regs, 7) += offset + 24; break; } else if (frame == 0xb) { m68k_areg (regs, 7) += offset + 84; break; } else { m68k_areg (regs, 7) += offset; Exception (14); goto endlabel9878; } regs.sr = newsr; MakeFromSR (); } regs.sr = newsr; MakeFromSR (); if (newpc & 1) { exception3i (0x4E73, newpc); goto endlabel9878; } m68k_setpc (newpc); ipl_fetch (); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel9878: ; return; } /* RTD.L #.W */ void REGPARAM2 CPUFUNC(op_4e74_22)(uae_u32 opcode) { {{ uaecptr pca = m68k_areg (regs, 7); { uae_s32 pc = x_get_long (pca); m68k_areg (regs, 7) += 4; { uae_s16 offs = get_word_ce020_prefetch (2); m68k_areg (regs, 7) += offs; if (pc & 1) { exception3i (0x4E74, pc); goto endlabel9879; } if (pc & 1) { exception3i (0x4E74, pc); goto endlabel9879; } m68k_setpc (pc); }}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9879: ; return; } /* RTS.L */ void REGPARAM2 CPUFUNC(op_4e75_22)(uae_u32 opcode) { { uaecptr pc = m68k_getpc (); m68k_do_rts_ce030 (); if (m68k_getpc () & 1) { uaecptr faultpc = m68k_getpc (); m68k_setpc (pc); exception3i (0x4E75, faultpc); } } regs.ce020memcycles += 2 * cpucycleunit; return; } /* TRAPV.L */ void REGPARAM2 CPUFUNC(op_4e76_22)(uae_u32 opcode) { { m68k_incpc (2); if (GET_VFLG ()) { Exception (7); goto endlabel9881; } } regs.ce020memcycles += 2 * cpucycleunit; endlabel9881: ; return; } /* RTR.L */ void REGPARAM2 CPUFUNC(op_4e77_22)(uae_u32 opcode) { { uaecptr oldpc = m68k_getpc (); MakeSR (); { uaecptr sra = m68k_areg (regs, 7); { uae_s16 sr = x_get_word (sra); m68k_areg (regs, 7) += 2; { uaecptr pca = m68k_areg (regs, 7); { uae_s32 pc = x_get_long (pca); m68k_areg (regs, 7) += 4; regs.sr &= 0xFF00; sr &= 0xFF; regs.sr |= sr; m68k_setpc (pc); MakeFromSR (); if (m68k_getpc () & 1) { uaecptr faultpc = m68k_getpc (); m68k_setpc (oldpc); exception3i (0x4E77, faultpc); } }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* MOVEC2.L #.W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4e7a_22)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel9883; } {{ uae_s16 src = get_word_ce020_prefetch (2); { int regno = (src >> 12) & 15; uae_u32 *regp = regs.regs + regno; if (! m68k_movec2(src & 0xFFF, regp)) goto endlabel9883; }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); endlabel9883: ; return; } #endif /* MOVE2C.L #.W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_4e7b_22)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel9884; } {{ uae_s16 src = get_word_ce020_prefetch (2); { int regno = (src >> 12) & 15; uae_u32 *regp = regs.regs + regno; if (! m68k_move2c(src & 0xFFF, regp)) goto endlabel9884; }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); endlabel9884: ; return; } #endif /* JSR.L (An) */ void REGPARAM2 CPUFUNC(op_4e90_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uaecptr oldpc = m68k_getpc () + 2; if (srca & 1) { exception3i (opcode, srca); goto endlabel9885; } m68k_setpc (srca); m68k_areg (regs, 7) -= 4; x_put_long (m68k_areg (regs, 7), oldpc); }}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9885: ; return; } /* JSR.L (d16,An) */ void REGPARAM2 CPUFUNC(op_4ea8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uaecptr oldpc = m68k_getpc () + 4; if (srca & 1) { exception3i (opcode, srca); goto endlabel9886; } m68k_setpc (srca); m68k_areg (regs, 7) -= 4; x_put_long (m68k_areg (regs, 7), oldpc); }}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9886: ; return; } /* JSR.L (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_4eb0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uaecptr oldpc = m68k_getpc () + 0; if (srca & 1) { exception3i (opcode, srca); goto endlabel9887; } m68k_setpc (srca); m68k_areg (regs, 7) -= 4; x_put_long (m68k_areg (regs, 7), oldpc); }}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9887: ; return; } /* JSR.L (xxx).W */ void REGPARAM2 CPUFUNC(op_4eb8_22)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uaecptr oldpc = m68k_getpc () + 4; if (srca & 1) { exception3i (opcode, srca); goto endlabel9888; } m68k_setpc (srca); m68k_areg (regs, 7) -= 4; x_put_long (m68k_areg (regs, 7), oldpc); }}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9888: ; return; } /* JSR.L (xxx).L */ void REGPARAM2 CPUFUNC(op_4eb9_22)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); { uaecptr oldpc = m68k_getpc () + 6; if (srca & 1) { exception3i (opcode, srca); goto endlabel9889; } m68k_setpc (srca); m68k_areg (regs, 7) -= 4; x_put_long (m68k_areg (regs, 7), oldpc); }}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9889: ; return; } /* JSR.L (d16,PC) */ void REGPARAM2 CPUFUNC(op_4eba_22)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uaecptr oldpc = m68k_getpc () + 4; if (srca & 1) { exception3i (opcode, srca); goto endlabel9890; } m68k_setpc (srca); m68k_areg (regs, 7) -= 4; x_put_long (m68k_areg (regs, 7), oldpc); }}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9890: ; return; } /* JSR.L (d8,PC,Xn) */ void REGPARAM2 CPUFUNC(op_4ebb_22)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uaecptr oldpc = m68k_getpc () + 0; if (srca & 1) { exception3i (opcode, srca); goto endlabel9891; } m68k_setpc (srca); m68k_areg (regs, 7) -= 4; x_put_long (m68k_areg (regs, 7), oldpc); }}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9891: ; return; } /* JMP.L (An) */ void REGPARAM2 CPUFUNC(op_4ed0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3i (opcode, srca); goto endlabel9892; } m68k_setpc (srca); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel9892: ; return; } /* JMP.L (d16,An) */ void REGPARAM2 CPUFUNC(op_4ee8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); if (srca & 1) { exception3i (opcode, srca); goto endlabel9893; } m68k_setpc (srca); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel9893: ; return; } /* JMP.L (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_4ef0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); if (srca & 1) { exception3i (opcode, srca); goto endlabel9894; } m68k_setpc (srca); }}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9894: ; return; } /* JMP.L (xxx).W */ void REGPARAM2 CPUFUNC(op_4ef8_22)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); if (srca & 1) { exception3i (opcode, srca); goto endlabel9895; } m68k_setpc (srca); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel9895: ; return; } /* JMP.L (xxx).L */ void REGPARAM2 CPUFUNC(op_4ef9_22)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); if (srca & 1) { exception3i (opcode, srca); goto endlabel9896; } m68k_setpc (srca); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel9896: ; return; } /* JMP.L (d16,PC) */ void REGPARAM2 CPUFUNC(op_4efa_22)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); if (srca & 1) { exception3i (opcode, srca); goto endlabel9897; } m68k_setpc (srca); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel9897: ; return; } /* JMP.L (d8,PC,Xn) */ void REGPARAM2 CPUFUNC(op_4efb_22)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); if (srca & 1) { exception3i (opcode, srca); goto endlabel9898; } m68k_setpc (srca); }}} regs.ce020memcycles += 2 * cpucycleunit; endlabel9898: ; return; } /* ADDQ.B #,Dn */ void REGPARAM2 CPUFUNC(op_5000_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADDQ.B #,(An) */ void REGPARAM2 CPUFUNC(op_5010_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADDQ.B #,(An)+ */ void REGPARAM2 CPUFUNC(op_5018_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADDQ.B #,-(An) */ void REGPARAM2 CPUFUNC(op_5020_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADDQ.B #,(d16,An) */ void REGPARAM2 CPUFUNC(op_5028_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADDQ.B #,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_5030_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* ADDQ.B #,(xxx).W */ void REGPARAM2 CPUFUNC(op_5038_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADDQ.B #,(xxx).L */ void REGPARAM2 CPUFUNC(op_5039_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = get_long_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* ADDQ.W #,Dn */ void REGPARAM2 CPUFUNC(op_5040_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADDAQ.W #,An */ void REGPARAM2 CPUFUNC(op_5048_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADDQ.W #,(An) */ void REGPARAM2 CPUFUNC(op_5050_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADDQ.W #,(An)+ */ void REGPARAM2 CPUFUNC(op_5058_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) += 2; {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADDQ.W #,-(An) */ void REGPARAM2 CPUFUNC(op_5060_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADDQ.W #,(d16,An) */ void REGPARAM2 CPUFUNC(op_5068_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADDQ.W #,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_5070_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } #endif #ifdef PART_5 /* ADDQ.W #,(xxx).W */ void REGPARAM2 CPUFUNC(op_5078_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADDQ.W #,(xxx).L */ void REGPARAM2 CPUFUNC(op_5079_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = get_long_ce020_prefetch (2); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* ADDQ.L #,Dn */ void REGPARAM2 CPUFUNC(op_5080_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADDAQ.L #,An */ void REGPARAM2 CPUFUNC(op_5088_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADDQ.L #,(An) */ void REGPARAM2 CPUFUNC(op_5090_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADDQ.L #,(An)+ */ void REGPARAM2 CPUFUNC(op_5098_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) += 4; {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADDQ.L #,-(An) */ void REGPARAM2 CPUFUNC(op_50a0_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADDQ.L #,(d16,An) */ void REGPARAM2 CPUFUNC(op_50a8_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADDQ.L #,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_50b0_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* ADDQ.L #,(xxx).W */ void REGPARAM2 CPUFUNC(op_50b8_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADDQ.L #,(xxx).L */ void REGPARAM2 CPUFUNC(op_50b9_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = get_long_ce020_prefetch (2); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* Scc.B Dn */ void REGPARAM2 CPUFUNC(op_50c0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (0) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* DBcc.W Dn,#.W */ void REGPARAM2 CPUFUNC(op_50c8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_word_ce020_prefetch (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (0)) { m68k_incpc ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { regs.ce020memcycles += 4 * cpucycleunit; if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel9926; } return; } regs.ce020memcycles += 8 * cpucycleunit; } else { regs.ce020memcycles += 4 * cpucycleunit; } m68k_setpc (oldpc + 4); }}}endlabel9926: ; return; } /* Scc.B (An) */ void REGPARAM2 CPUFUNC(op_50d0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (0) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B (An)+ */ void REGPARAM2 CPUFUNC(op_50d8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (0) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B -(An) */ void REGPARAM2 CPUFUNC(op_50e0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (0) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B (d16,An) */ void REGPARAM2 CPUFUNC(op_50e8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); {{ int val = cctrue (0) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* Scc.B (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_50f0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); {{ int val = cctrue (0) ? 0xff : 0; x_put_byte (srca, val); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* Scc.B (xxx).W */ void REGPARAM2 CPUFUNC(op_50f8_22)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); {{ int val = cctrue (0) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* Scc.B (xxx).L */ void REGPARAM2 CPUFUNC(op_50f9_22)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); {{ int val = cctrue (0) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_50fa_22)(uae_u32 opcode) { {{ uae_s16 dummy = get_word_ce020_prefetch (2); if (cctrue (0)) { Exception (7); goto endlabel9934; } }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); endlabel9934: ; return; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_50fb_22)(uae_u32 opcode) { {{ uae_s32 dummy = get_long_ce020_prefetch (2); if (cctrue (0)) { Exception (7); goto endlabel9935; } }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); endlabel9935: ; return; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_50fc_22)(uae_u32 opcode) { { if (cctrue (0)) { Exception (7); goto endlabel9936; } } regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); endlabel9936: ; return; } #endif /* SUBQ.B #,Dn */ void REGPARAM2 CPUFUNC(op_5100_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUBQ.B #,(An) */ void REGPARAM2 CPUFUNC(op_5110_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUBQ.B #,(An)+ */ void REGPARAM2 CPUFUNC(op_5118_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUBQ.B #,-(An) */ void REGPARAM2 CPUFUNC(op_5120_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUBQ.B #,(d16,An) */ void REGPARAM2 CPUFUNC(op_5128_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUBQ.B #,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_5130_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* SUBQ.B #,(xxx).W */ void REGPARAM2 CPUFUNC(op_5138_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUBQ.B #,(xxx).L */ void REGPARAM2 CPUFUNC(op_5139_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = get_long_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* SUBQ.W #,Dn */ void REGPARAM2 CPUFUNC(op_5140_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUBAQ.W #,An */ void REGPARAM2 CPUFUNC(op_5148_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUBQ.W #,(An) */ void REGPARAM2 CPUFUNC(op_5150_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUBQ.W #,(An)+ */ void REGPARAM2 CPUFUNC(op_5158_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) += 2; {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUBQ.W #,-(An) */ void REGPARAM2 CPUFUNC(op_5160_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUBQ.W #,(d16,An) */ void REGPARAM2 CPUFUNC(op_5168_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUBQ.W #,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_5170_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* SUBQ.W #,(xxx).W */ void REGPARAM2 CPUFUNC(op_5178_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUBQ.W #,(xxx).L */ void REGPARAM2 CPUFUNC(op_5179_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = get_long_ce020_prefetch (2); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* SUBQ.L #,Dn */ void REGPARAM2 CPUFUNC(op_5180_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUBAQ.L #,An */ void REGPARAM2 CPUFUNC(op_5188_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUBQ.L #,(An) */ void REGPARAM2 CPUFUNC(op_5190_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUBQ.L #,(An)+ */ void REGPARAM2 CPUFUNC(op_5198_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) += 4; {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUBQ.L #,-(An) */ void REGPARAM2 CPUFUNC(op_51a0_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUBQ.L #,(d16,An) */ void REGPARAM2 CPUFUNC(op_51a8_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUBQ.L #,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_51b0_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* SUBQ.L #,(xxx).W */ void REGPARAM2 CPUFUNC(op_51b8_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUBQ.L #,(xxx).L */ void REGPARAM2 CPUFUNC(op_51b9_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = get_long_ce020_prefetch (2); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* Scc.B Dn */ void REGPARAM2 CPUFUNC(op_51c0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (1) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* DBcc.W Dn,#.W */ void REGPARAM2 CPUFUNC(op_51c8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_word_ce020_prefetch (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (1)) { m68k_incpc ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { regs.ce020memcycles += 4 * cpucycleunit; if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel9964; } return; } regs.ce020memcycles += 8 * cpucycleunit; } else { regs.ce020memcycles += 4 * cpucycleunit; } m68k_setpc (oldpc + 4); }}}endlabel9964: ; return; } /* Scc.B (An) */ void REGPARAM2 CPUFUNC(op_51d0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (1) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B (An)+ */ void REGPARAM2 CPUFUNC(op_51d8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (1) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B -(An) */ void REGPARAM2 CPUFUNC(op_51e0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (1) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B (d16,An) */ void REGPARAM2 CPUFUNC(op_51e8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); {{ int val = cctrue (1) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* Scc.B (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_51f0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); {{ int val = cctrue (1) ? 0xff : 0; x_put_byte (srca, val); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* Scc.B (xxx).W */ void REGPARAM2 CPUFUNC(op_51f8_22)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); {{ int val = cctrue (1) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* Scc.B (xxx).L */ void REGPARAM2 CPUFUNC(op_51f9_22)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); {{ int val = cctrue (1) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_51fa_22)(uae_u32 opcode) { {{ uae_s16 dummy = get_word_ce020_prefetch (2); if (cctrue (1)) { Exception (7); goto endlabel9972; } }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); endlabel9972: ; return; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_51fb_22)(uae_u32 opcode) { {{ uae_s32 dummy = get_long_ce020_prefetch (2); if (cctrue (1)) { Exception (7); goto endlabel9973; } }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); endlabel9973: ; return; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_51fc_22)(uae_u32 opcode) { { if (cctrue (1)) { Exception (7); goto endlabel9974; } } regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); endlabel9974: ; return; } #endif /* Scc.B Dn */ void REGPARAM2 CPUFUNC(op_52c0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (2) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* DBcc.W Dn,#.W */ void REGPARAM2 CPUFUNC(op_52c8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_word_ce020_prefetch (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (2)) { m68k_incpc ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { regs.ce020memcycles += 4 * cpucycleunit; if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel9976; } return; } regs.ce020memcycles += 8 * cpucycleunit; } else { regs.ce020memcycles += 4 * cpucycleunit; } m68k_setpc (oldpc + 4); }}}endlabel9976: ; return; } /* Scc.B (An) */ void REGPARAM2 CPUFUNC(op_52d0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (2) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B (An)+ */ void REGPARAM2 CPUFUNC(op_52d8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (2) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B -(An) */ void REGPARAM2 CPUFUNC(op_52e0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (2) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B (d16,An) */ void REGPARAM2 CPUFUNC(op_52e8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); {{ int val = cctrue (2) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* Scc.B (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_52f0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); {{ int val = cctrue (2) ? 0xff : 0; x_put_byte (srca, val); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* Scc.B (xxx).W */ void REGPARAM2 CPUFUNC(op_52f8_22)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); {{ int val = cctrue (2) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* Scc.B (xxx).L */ void REGPARAM2 CPUFUNC(op_52f9_22)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); {{ int val = cctrue (2) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_52fa_22)(uae_u32 opcode) { {{ uae_s16 dummy = get_word_ce020_prefetch (2); if (cctrue (2)) { Exception (7); goto endlabel9984; } }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); endlabel9984: ; return; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_52fb_22)(uae_u32 opcode) { {{ uae_s32 dummy = get_long_ce020_prefetch (2); if (cctrue (2)) { Exception (7); goto endlabel9985; } }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); endlabel9985: ; return; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_52fc_22)(uae_u32 opcode) { { if (cctrue (2)) { Exception (7); goto endlabel9986; } } regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); endlabel9986: ; return; } #endif /* Scc.B Dn */ void REGPARAM2 CPUFUNC(op_53c0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (3) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* DBcc.W Dn,#.W */ void REGPARAM2 CPUFUNC(op_53c8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_word_ce020_prefetch (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (3)) { m68k_incpc ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { regs.ce020memcycles += 4 * cpucycleunit; if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel9988; } return; } regs.ce020memcycles += 8 * cpucycleunit; } else { regs.ce020memcycles += 4 * cpucycleunit; } m68k_setpc (oldpc + 4); }}}endlabel9988: ; return; } /* Scc.B (An) */ void REGPARAM2 CPUFUNC(op_53d0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (3) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B (An)+ */ void REGPARAM2 CPUFUNC(op_53d8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (3) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B -(An) */ void REGPARAM2 CPUFUNC(op_53e0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (3) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B (d16,An) */ void REGPARAM2 CPUFUNC(op_53e8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); {{ int val = cctrue (3) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* Scc.B (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_53f0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); {{ int val = cctrue (3) ? 0xff : 0; x_put_byte (srca, val); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* Scc.B (xxx).W */ void REGPARAM2 CPUFUNC(op_53f8_22)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); {{ int val = cctrue (3) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* Scc.B (xxx).L */ void REGPARAM2 CPUFUNC(op_53f9_22)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); {{ int val = cctrue (3) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_53fa_22)(uae_u32 opcode) { {{ uae_s16 dummy = get_word_ce020_prefetch (2); if (cctrue (3)) { Exception (7); goto endlabel9996; } }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); endlabel9996: ; return; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_53fb_22)(uae_u32 opcode) { {{ uae_s32 dummy = get_long_ce020_prefetch (2); if (cctrue (3)) { Exception (7); goto endlabel9997; } }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); endlabel9997: ; return; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_53fc_22)(uae_u32 opcode) { { if (cctrue (3)) { Exception (7); goto endlabel9998; } } regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); endlabel9998: ; return; } #endif /* Scc.B Dn */ void REGPARAM2 CPUFUNC(op_54c0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (4) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* DBcc.W Dn,#.W */ void REGPARAM2 CPUFUNC(op_54c8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_word_ce020_prefetch (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (4)) { m68k_incpc ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { regs.ce020memcycles += 4 * cpucycleunit; if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel10000; } return; } regs.ce020memcycles += 8 * cpucycleunit; } else { regs.ce020memcycles += 4 * cpucycleunit; } m68k_setpc (oldpc + 4); }}}endlabel10000: ; return; } /* Scc.B (An) */ void REGPARAM2 CPUFUNC(op_54d0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (4) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B (An)+ */ void REGPARAM2 CPUFUNC(op_54d8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (4) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B -(An) */ void REGPARAM2 CPUFUNC(op_54e0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (4) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B (d16,An) */ void REGPARAM2 CPUFUNC(op_54e8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); {{ int val = cctrue (4) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* Scc.B (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_54f0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); {{ int val = cctrue (4) ? 0xff : 0; x_put_byte (srca, val); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* Scc.B (xxx).W */ void REGPARAM2 CPUFUNC(op_54f8_22)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); {{ int val = cctrue (4) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* Scc.B (xxx).L */ void REGPARAM2 CPUFUNC(op_54f9_22)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); {{ int val = cctrue (4) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_54fa_22)(uae_u32 opcode) { {{ uae_s16 dummy = get_word_ce020_prefetch (2); if (cctrue (4)) { Exception (7); goto endlabel10008; } }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); endlabel10008: ; return; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_54fb_22)(uae_u32 opcode) { {{ uae_s32 dummy = get_long_ce020_prefetch (2); if (cctrue (4)) { Exception (7); goto endlabel10009; } }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); endlabel10009: ; return; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_54fc_22)(uae_u32 opcode) { { if (cctrue (4)) { Exception (7); goto endlabel10010; } } regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); endlabel10010: ; return; } #endif /* Scc.B Dn */ void REGPARAM2 CPUFUNC(op_55c0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (5) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* DBcc.W Dn,#.W */ void REGPARAM2 CPUFUNC(op_55c8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_word_ce020_prefetch (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (5)) { m68k_incpc ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { regs.ce020memcycles += 4 * cpucycleunit; if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel10012; } return; } regs.ce020memcycles += 8 * cpucycleunit; } else { regs.ce020memcycles += 4 * cpucycleunit; } m68k_setpc (oldpc + 4); }}}endlabel10012: ; return; } /* Scc.B (An) */ void REGPARAM2 CPUFUNC(op_55d0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (5) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B (An)+ */ void REGPARAM2 CPUFUNC(op_55d8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (5) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B -(An) */ void REGPARAM2 CPUFUNC(op_55e0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (5) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B (d16,An) */ void REGPARAM2 CPUFUNC(op_55e8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); {{ int val = cctrue (5) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* Scc.B (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_55f0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); {{ int val = cctrue (5) ? 0xff : 0; x_put_byte (srca, val); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* Scc.B (xxx).W */ void REGPARAM2 CPUFUNC(op_55f8_22)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); {{ int val = cctrue (5) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* Scc.B (xxx).L */ void REGPARAM2 CPUFUNC(op_55f9_22)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); {{ int val = cctrue (5) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_55fa_22)(uae_u32 opcode) { {{ uae_s16 dummy = get_word_ce020_prefetch (2); if (cctrue (5)) { Exception (7); goto endlabel10020; } }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); endlabel10020: ; return; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_55fb_22)(uae_u32 opcode) { {{ uae_s32 dummy = get_long_ce020_prefetch (2); if (cctrue (5)) { Exception (7); goto endlabel10021; } }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); endlabel10021: ; return; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_55fc_22)(uae_u32 opcode) { { if (cctrue (5)) { Exception (7); goto endlabel10022; } } regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); endlabel10022: ; return; } #endif /* Scc.B Dn */ void REGPARAM2 CPUFUNC(op_56c0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (6) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* DBcc.W Dn,#.W */ void REGPARAM2 CPUFUNC(op_56c8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_word_ce020_prefetch (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (6)) { m68k_incpc ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { regs.ce020memcycles += 4 * cpucycleunit; if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel10024; } return; } regs.ce020memcycles += 8 * cpucycleunit; } else { regs.ce020memcycles += 4 * cpucycleunit; } m68k_setpc (oldpc + 4); }}}endlabel10024: ; return; } /* Scc.B (An) */ void REGPARAM2 CPUFUNC(op_56d0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (6) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B (An)+ */ void REGPARAM2 CPUFUNC(op_56d8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (6) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B -(An) */ void REGPARAM2 CPUFUNC(op_56e0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (6) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B (d16,An) */ void REGPARAM2 CPUFUNC(op_56e8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); {{ int val = cctrue (6) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* Scc.B (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_56f0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); {{ int val = cctrue (6) ? 0xff : 0; x_put_byte (srca, val); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* Scc.B (xxx).W */ void REGPARAM2 CPUFUNC(op_56f8_22)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); {{ int val = cctrue (6) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* Scc.B (xxx).L */ void REGPARAM2 CPUFUNC(op_56f9_22)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); {{ int val = cctrue (6) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_56fa_22)(uae_u32 opcode) { {{ uae_s16 dummy = get_word_ce020_prefetch (2); if (cctrue (6)) { Exception (7); goto endlabel10032; } }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); endlabel10032: ; return; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_56fb_22)(uae_u32 opcode) { {{ uae_s32 dummy = get_long_ce020_prefetch (2); if (cctrue (6)) { Exception (7); goto endlabel10033; } }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); endlabel10033: ; return; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_56fc_22)(uae_u32 opcode) { { if (cctrue (6)) { Exception (7); goto endlabel10034; } } regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); endlabel10034: ; return; } #endif /* Scc.B Dn */ void REGPARAM2 CPUFUNC(op_57c0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (7) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* DBcc.W Dn,#.W */ void REGPARAM2 CPUFUNC(op_57c8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_word_ce020_prefetch (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (7)) { m68k_incpc ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { regs.ce020memcycles += 4 * cpucycleunit; if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel10036; } return; } regs.ce020memcycles += 8 * cpucycleunit; } else { regs.ce020memcycles += 4 * cpucycleunit; } m68k_setpc (oldpc + 4); }}}endlabel10036: ; return; } /* Scc.B (An) */ void REGPARAM2 CPUFUNC(op_57d0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (7) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B (An)+ */ void REGPARAM2 CPUFUNC(op_57d8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (7) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B -(An) */ void REGPARAM2 CPUFUNC(op_57e0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (7) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B (d16,An) */ void REGPARAM2 CPUFUNC(op_57e8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); {{ int val = cctrue (7) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* Scc.B (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_57f0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); {{ int val = cctrue (7) ? 0xff : 0; x_put_byte (srca, val); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* Scc.B (xxx).W */ void REGPARAM2 CPUFUNC(op_57f8_22)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); {{ int val = cctrue (7) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* Scc.B (xxx).L */ void REGPARAM2 CPUFUNC(op_57f9_22)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); {{ int val = cctrue (7) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_57fa_22)(uae_u32 opcode) { {{ uae_s16 dummy = get_word_ce020_prefetch (2); if (cctrue (7)) { Exception (7); goto endlabel10044; } }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); endlabel10044: ; return; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_57fb_22)(uae_u32 opcode) { {{ uae_s32 dummy = get_long_ce020_prefetch (2); if (cctrue (7)) { Exception (7); goto endlabel10045; } }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); endlabel10045: ; return; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_57fc_22)(uae_u32 opcode) { { if (cctrue (7)) { Exception (7); goto endlabel10046; } } regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); endlabel10046: ; return; } #endif /* Scc.B Dn */ void REGPARAM2 CPUFUNC(op_58c0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (8) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* DBcc.W Dn,#.W */ void REGPARAM2 CPUFUNC(op_58c8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_word_ce020_prefetch (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (8)) { m68k_incpc ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { regs.ce020memcycles += 4 * cpucycleunit; if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel10048; } return; } regs.ce020memcycles += 8 * cpucycleunit; } else { regs.ce020memcycles += 4 * cpucycleunit; } m68k_setpc (oldpc + 4); }}}endlabel10048: ; return; } /* Scc.B (An) */ void REGPARAM2 CPUFUNC(op_58d0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (8) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B (An)+ */ void REGPARAM2 CPUFUNC(op_58d8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (8) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B -(An) */ void REGPARAM2 CPUFUNC(op_58e0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (8) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B (d16,An) */ void REGPARAM2 CPUFUNC(op_58e8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); {{ int val = cctrue (8) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* Scc.B (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_58f0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); {{ int val = cctrue (8) ? 0xff : 0; x_put_byte (srca, val); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* Scc.B (xxx).W */ void REGPARAM2 CPUFUNC(op_58f8_22)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); {{ int val = cctrue (8) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* Scc.B (xxx).L */ void REGPARAM2 CPUFUNC(op_58f9_22)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); {{ int val = cctrue (8) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_58fa_22)(uae_u32 opcode) { {{ uae_s16 dummy = get_word_ce020_prefetch (2); if (cctrue (8)) { Exception (7); goto endlabel10056; } }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); endlabel10056: ; return; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_58fb_22)(uae_u32 opcode) { {{ uae_s32 dummy = get_long_ce020_prefetch (2); if (cctrue (8)) { Exception (7); goto endlabel10057; } }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); endlabel10057: ; return; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_58fc_22)(uae_u32 opcode) { { if (cctrue (8)) { Exception (7); goto endlabel10058; } } regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); endlabel10058: ; return; } #endif /* Scc.B Dn */ void REGPARAM2 CPUFUNC(op_59c0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (9) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* DBcc.W Dn,#.W */ void REGPARAM2 CPUFUNC(op_59c8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_word_ce020_prefetch (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (9)) { m68k_incpc ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { regs.ce020memcycles += 4 * cpucycleunit; if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel10060; } return; } regs.ce020memcycles += 8 * cpucycleunit; } else { regs.ce020memcycles += 4 * cpucycleunit; } m68k_setpc (oldpc + 4); }}}endlabel10060: ; return; } /* Scc.B (An) */ void REGPARAM2 CPUFUNC(op_59d0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (9) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B (An)+ */ void REGPARAM2 CPUFUNC(op_59d8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (9) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B -(An) */ void REGPARAM2 CPUFUNC(op_59e0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (9) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B (d16,An) */ void REGPARAM2 CPUFUNC(op_59e8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); {{ int val = cctrue (9) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* Scc.B (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_59f0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); {{ int val = cctrue (9) ? 0xff : 0; x_put_byte (srca, val); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* Scc.B (xxx).W */ void REGPARAM2 CPUFUNC(op_59f8_22)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); {{ int val = cctrue (9) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* Scc.B (xxx).L */ void REGPARAM2 CPUFUNC(op_59f9_22)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); {{ int val = cctrue (9) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_59fa_22)(uae_u32 opcode) { {{ uae_s16 dummy = get_word_ce020_prefetch (2); if (cctrue (9)) { Exception (7); goto endlabel10068; } }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); endlabel10068: ; return; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_59fb_22)(uae_u32 opcode) { {{ uae_s32 dummy = get_long_ce020_prefetch (2); if (cctrue (9)) { Exception (7); goto endlabel10069; } }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); endlabel10069: ; return; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_59fc_22)(uae_u32 opcode) { { if (cctrue (9)) { Exception (7); goto endlabel10070; } } regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); endlabel10070: ; return; } #endif /* Scc.B Dn */ void REGPARAM2 CPUFUNC(op_5ac0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (10) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* DBcc.W Dn,#.W */ void REGPARAM2 CPUFUNC(op_5ac8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_word_ce020_prefetch (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (10)) { m68k_incpc ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { regs.ce020memcycles += 4 * cpucycleunit; if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel10072; } return; } regs.ce020memcycles += 8 * cpucycleunit; } else { regs.ce020memcycles += 4 * cpucycleunit; } m68k_setpc (oldpc + 4); }}}endlabel10072: ; return; } /* Scc.B (An) */ void REGPARAM2 CPUFUNC(op_5ad0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (10) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B (An)+ */ void REGPARAM2 CPUFUNC(op_5ad8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (10) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B -(An) */ void REGPARAM2 CPUFUNC(op_5ae0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (10) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B (d16,An) */ void REGPARAM2 CPUFUNC(op_5ae8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); {{ int val = cctrue (10) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* Scc.B (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_5af0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); {{ int val = cctrue (10) ? 0xff : 0; x_put_byte (srca, val); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* Scc.B (xxx).W */ void REGPARAM2 CPUFUNC(op_5af8_22)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); {{ int val = cctrue (10) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* Scc.B (xxx).L */ void REGPARAM2 CPUFUNC(op_5af9_22)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); {{ int val = cctrue (10) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_5afa_22)(uae_u32 opcode) { {{ uae_s16 dummy = get_word_ce020_prefetch (2); if (cctrue (10)) { Exception (7); goto endlabel10080; } }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); endlabel10080: ; return; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_5afb_22)(uae_u32 opcode) { {{ uae_s32 dummy = get_long_ce020_prefetch (2); if (cctrue (10)) { Exception (7); goto endlabel10081; } }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); endlabel10081: ; return; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_5afc_22)(uae_u32 opcode) { { if (cctrue (10)) { Exception (7); goto endlabel10082; } } regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); endlabel10082: ; return; } #endif /* Scc.B Dn */ void REGPARAM2 CPUFUNC(op_5bc0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (11) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* DBcc.W Dn,#.W */ void REGPARAM2 CPUFUNC(op_5bc8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_word_ce020_prefetch (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (11)) { m68k_incpc ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { regs.ce020memcycles += 4 * cpucycleunit; if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel10084; } return; } regs.ce020memcycles += 8 * cpucycleunit; } else { regs.ce020memcycles += 4 * cpucycleunit; } m68k_setpc (oldpc + 4); }}}endlabel10084: ; return; } /* Scc.B (An) */ void REGPARAM2 CPUFUNC(op_5bd0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (11) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B (An)+ */ void REGPARAM2 CPUFUNC(op_5bd8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (11) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B -(An) */ void REGPARAM2 CPUFUNC(op_5be0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (11) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B (d16,An) */ void REGPARAM2 CPUFUNC(op_5be8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); {{ int val = cctrue (11) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* Scc.B (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_5bf0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); {{ int val = cctrue (11) ? 0xff : 0; x_put_byte (srca, val); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* Scc.B (xxx).W */ void REGPARAM2 CPUFUNC(op_5bf8_22)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); {{ int val = cctrue (11) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* Scc.B (xxx).L */ void REGPARAM2 CPUFUNC(op_5bf9_22)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); {{ int val = cctrue (11) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_5bfa_22)(uae_u32 opcode) { {{ uae_s16 dummy = get_word_ce020_prefetch (2); if (cctrue (11)) { Exception (7); goto endlabel10092; } }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); endlabel10092: ; return; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_5bfb_22)(uae_u32 opcode) { {{ uae_s32 dummy = get_long_ce020_prefetch (2); if (cctrue (11)) { Exception (7); goto endlabel10093; } }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); endlabel10093: ; return; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_5bfc_22)(uae_u32 opcode) { { if (cctrue (11)) { Exception (7); goto endlabel10094; } } regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); endlabel10094: ; return; } #endif /* Scc.B Dn */ void REGPARAM2 CPUFUNC(op_5cc0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (12) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* DBcc.W Dn,#.W */ void REGPARAM2 CPUFUNC(op_5cc8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_word_ce020_prefetch (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (12)) { m68k_incpc ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { regs.ce020memcycles += 4 * cpucycleunit; if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel10096; } return; } regs.ce020memcycles += 8 * cpucycleunit; } else { regs.ce020memcycles += 4 * cpucycleunit; } m68k_setpc (oldpc + 4); }}}endlabel10096: ; return; } /* Scc.B (An) */ void REGPARAM2 CPUFUNC(op_5cd0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (12) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B (An)+ */ void REGPARAM2 CPUFUNC(op_5cd8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (12) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B -(An) */ void REGPARAM2 CPUFUNC(op_5ce0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (12) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B (d16,An) */ void REGPARAM2 CPUFUNC(op_5ce8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); {{ int val = cctrue (12) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* Scc.B (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_5cf0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); {{ int val = cctrue (12) ? 0xff : 0; x_put_byte (srca, val); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* Scc.B (xxx).W */ void REGPARAM2 CPUFUNC(op_5cf8_22)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); {{ int val = cctrue (12) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* Scc.B (xxx).L */ void REGPARAM2 CPUFUNC(op_5cf9_22)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); {{ int val = cctrue (12) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_5cfa_22)(uae_u32 opcode) { {{ uae_s16 dummy = get_word_ce020_prefetch (2); if (cctrue (12)) { Exception (7); goto endlabel10104; } }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); endlabel10104: ; return; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_5cfb_22)(uae_u32 opcode) { {{ uae_s32 dummy = get_long_ce020_prefetch (2); if (cctrue (12)) { Exception (7); goto endlabel10105; } }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); endlabel10105: ; return; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_5cfc_22)(uae_u32 opcode) { { if (cctrue (12)) { Exception (7); goto endlabel10106; } } regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); endlabel10106: ; return; } #endif /* Scc.B Dn */ void REGPARAM2 CPUFUNC(op_5dc0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (13) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* DBcc.W Dn,#.W */ void REGPARAM2 CPUFUNC(op_5dc8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_word_ce020_prefetch (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (13)) { m68k_incpc ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { regs.ce020memcycles += 4 * cpucycleunit; if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel10108; } return; } regs.ce020memcycles += 8 * cpucycleunit; } else { regs.ce020memcycles += 4 * cpucycleunit; } m68k_setpc (oldpc + 4); }}}endlabel10108: ; return; } /* Scc.B (An) */ void REGPARAM2 CPUFUNC(op_5dd0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (13) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B (An)+ */ void REGPARAM2 CPUFUNC(op_5dd8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (13) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B -(An) */ void REGPARAM2 CPUFUNC(op_5de0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (13) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B (d16,An) */ void REGPARAM2 CPUFUNC(op_5de8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); {{ int val = cctrue (13) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* Scc.B (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_5df0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); {{ int val = cctrue (13) ? 0xff : 0; x_put_byte (srca, val); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* Scc.B (xxx).W */ void REGPARAM2 CPUFUNC(op_5df8_22)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); {{ int val = cctrue (13) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* Scc.B (xxx).L */ void REGPARAM2 CPUFUNC(op_5df9_22)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); {{ int val = cctrue (13) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_5dfa_22)(uae_u32 opcode) { {{ uae_s16 dummy = get_word_ce020_prefetch (2); if (cctrue (13)) { Exception (7); goto endlabel10116; } }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); endlabel10116: ; return; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_5dfb_22)(uae_u32 opcode) { {{ uae_s32 dummy = get_long_ce020_prefetch (2); if (cctrue (13)) { Exception (7); goto endlabel10117; } }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); endlabel10117: ; return; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_5dfc_22)(uae_u32 opcode) { { if (cctrue (13)) { Exception (7); goto endlabel10118; } } regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); endlabel10118: ; return; } #endif /* Scc.B Dn */ void REGPARAM2 CPUFUNC(op_5ec0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (14) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* DBcc.W Dn,#.W */ void REGPARAM2 CPUFUNC(op_5ec8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_word_ce020_prefetch (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (14)) { m68k_incpc ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { regs.ce020memcycles += 4 * cpucycleunit; if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel10120; } return; } regs.ce020memcycles += 8 * cpucycleunit; } else { regs.ce020memcycles += 4 * cpucycleunit; } m68k_setpc (oldpc + 4); }}}endlabel10120: ; return; } /* Scc.B (An) */ void REGPARAM2 CPUFUNC(op_5ed0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (14) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B (An)+ */ void REGPARAM2 CPUFUNC(op_5ed8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (14) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B -(An) */ void REGPARAM2 CPUFUNC(op_5ee0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (14) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B (d16,An) */ void REGPARAM2 CPUFUNC(op_5ee8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); {{ int val = cctrue (14) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* Scc.B (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_5ef0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); {{ int val = cctrue (14) ? 0xff : 0; x_put_byte (srca, val); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* Scc.B (xxx).W */ void REGPARAM2 CPUFUNC(op_5ef8_22)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); {{ int val = cctrue (14) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* Scc.B (xxx).L */ void REGPARAM2 CPUFUNC(op_5ef9_22)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); {{ int val = cctrue (14) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_5efa_22)(uae_u32 opcode) { {{ uae_s16 dummy = get_word_ce020_prefetch (2); if (cctrue (14)) { Exception (7); goto endlabel10128; } }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); endlabel10128: ; return; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_5efb_22)(uae_u32 opcode) { {{ uae_s32 dummy = get_long_ce020_prefetch (2); if (cctrue (14)) { Exception (7); goto endlabel10129; } }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); endlabel10129: ; return; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_5efc_22)(uae_u32 opcode) { { if (cctrue (14)) { Exception (7); goto endlabel10130; } } regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); endlabel10130: ; return; } #endif /* Scc.B Dn */ void REGPARAM2 CPUFUNC(op_5fc0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (15) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* DBcc.W Dn,#.W */ void REGPARAM2 CPUFUNC(op_5fc8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_word_ce020_prefetch (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (15)) { m68k_incpc ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { regs.ce020memcycles += 4 * cpucycleunit; if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel10132; } return; } regs.ce020memcycles += 8 * cpucycleunit; } else { regs.ce020memcycles += 4 * cpucycleunit; } m68k_setpc (oldpc + 4); }}}endlabel10132: ; return; } /* Scc.B (An) */ void REGPARAM2 CPUFUNC(op_5fd0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (15) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B (An)+ */ void REGPARAM2 CPUFUNC(op_5fd8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (15) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B -(An) */ void REGPARAM2 CPUFUNC(op_5fe0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (15) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* Scc.B (d16,An) */ void REGPARAM2 CPUFUNC(op_5fe8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); {{ int val = cctrue (15) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* Scc.B (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_5ff0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); {{ int val = cctrue (15) ? 0xff : 0; x_put_byte (srca, val); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* Scc.B (xxx).W */ void REGPARAM2 CPUFUNC(op_5ff8_22)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); {{ int val = cctrue (15) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* Scc.B (xxx).L */ void REGPARAM2 CPUFUNC(op_5ff9_22)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); {{ int val = cctrue (15) ? 0xff : 0; x_put_byte (srca, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_5ffa_22)(uae_u32 opcode) { {{ uae_s16 dummy = get_word_ce020_prefetch (2); if (cctrue (15)) { Exception (7); goto endlabel10140; } }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); endlabel10140: ; return; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_5ffb_22)(uae_u32 opcode) { {{ uae_s32 dummy = get_long_ce020_prefetch (2); if (cctrue (15)) { Exception (7); goto endlabel10141; } }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); endlabel10141: ; return; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_5ffc_22)(uae_u32 opcode) { { if (cctrue (15)) { Exception (7); goto endlabel10142; } } regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); endlabel10142: ; return; } #endif /* Bcc.W #.W */ void REGPARAM2 CPUFUNC(op_6000_22)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); if (!cctrue (0)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel10143; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (4); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel10143: ; return; } /* BccQ.B # */ void REGPARAM2 CPUFUNC(op_6001_22)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (0)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel10144; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (2); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel10144: ; return; } /* Bcc.L #.L */ void REGPARAM2 CPUFUNC(op_60ff_22)(uae_u32 opcode) { {{ uae_s32 src = get_long_ce020_prefetch (2); if (!cctrue (0)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel10145; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (6); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel10145: ; return; } /* BSR.W #.W */ void REGPARAM2 CPUFUNC(op_6100_22)(uae_u32 opcode) { { uae_s32 s; { uae_s16 src = get_word_ce020_prefetch (2); s = (uae_s32)src + 2; if (src & 1) { exception3 (opcode, m68k_getpc () + s, 0, 1, m68k_getpc () + s); goto endlabel10146; } m68k_do_bsr_ce030 (m68k_getpc () + 4, s); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel10146: ; return; } /* BSRQ.B # */ void REGPARAM2 CPUFUNC(op_6101_22)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); { uae_s32 s; { uae_u32 src = srcreg; s = (uae_s32)src + 2; if (src & 1) { exception3 (opcode, m68k_getpc () + s, 0, 1, m68k_getpc () + s); goto endlabel10147; } m68k_do_bsr_ce030 (m68k_getpc () + 2, s); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel10147: ; return; } /* BSR.L #.L */ void REGPARAM2 CPUFUNC(op_61ff_22)(uae_u32 opcode) { { uae_s32 s; { uae_s32 src = get_long_ce020_prefetch (2); s = (uae_s32)src + 2; if (src & 1) { exception3 (opcode, m68k_getpc () + s, 0, 1, m68k_getpc () + s); goto endlabel10148; } m68k_do_bsr_ce030 (m68k_getpc () + 6, s); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel10148: ; return; } #endif #ifdef PART_6 /* Bcc.W #.W */ void REGPARAM2 CPUFUNC(op_6200_22)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); if (!cctrue (2)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel10149; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (4); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel10149: ; return; } /* BccQ.B # */ void REGPARAM2 CPUFUNC(op_6201_22)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (2)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel10150; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (2); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel10150: ; return; } /* Bcc.L #.L */ void REGPARAM2 CPUFUNC(op_62ff_22)(uae_u32 opcode) { {{ uae_s32 src = get_long_ce020_prefetch (2); if (!cctrue (2)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel10151; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (6); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel10151: ; return; } /* Bcc.W #.W */ void REGPARAM2 CPUFUNC(op_6300_22)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); if (!cctrue (3)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel10152; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (4); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel10152: ; return; } /* BccQ.B # */ void REGPARAM2 CPUFUNC(op_6301_22)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (3)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel10153; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (2); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel10153: ; return; } /* Bcc.L #.L */ void REGPARAM2 CPUFUNC(op_63ff_22)(uae_u32 opcode) { {{ uae_s32 src = get_long_ce020_prefetch (2); if (!cctrue (3)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel10154; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (6); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel10154: ; return; } /* Bcc.W #.W */ void REGPARAM2 CPUFUNC(op_6400_22)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); if (!cctrue (4)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel10155; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (4); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel10155: ; return; } /* BccQ.B # */ void REGPARAM2 CPUFUNC(op_6401_22)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (4)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel10156; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (2); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel10156: ; return; } /* Bcc.L #.L */ void REGPARAM2 CPUFUNC(op_64ff_22)(uae_u32 opcode) { {{ uae_s32 src = get_long_ce020_prefetch (2); if (!cctrue (4)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel10157; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (6); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel10157: ; return; } /* Bcc.W #.W */ void REGPARAM2 CPUFUNC(op_6500_22)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); if (!cctrue (5)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel10158; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (4); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel10158: ; return; } /* BccQ.B # */ void REGPARAM2 CPUFUNC(op_6501_22)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (5)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel10159; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (2); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel10159: ; return; } /* Bcc.L #.L */ void REGPARAM2 CPUFUNC(op_65ff_22)(uae_u32 opcode) { {{ uae_s32 src = get_long_ce020_prefetch (2); if (!cctrue (5)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel10160; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (6); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel10160: ; return; } /* Bcc.W #.W */ void REGPARAM2 CPUFUNC(op_6600_22)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); if (!cctrue (6)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel10161; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (4); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel10161: ; return; } /* BccQ.B # */ void REGPARAM2 CPUFUNC(op_6601_22)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (6)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel10162; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (2); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel10162: ; return; } /* Bcc.L #.L */ void REGPARAM2 CPUFUNC(op_66ff_22)(uae_u32 opcode) { {{ uae_s32 src = get_long_ce020_prefetch (2); if (!cctrue (6)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel10163; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (6); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel10163: ; return; } /* Bcc.W #.W */ void REGPARAM2 CPUFUNC(op_6700_22)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); if (!cctrue (7)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel10164; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (4); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel10164: ; return; } /* BccQ.B # */ void REGPARAM2 CPUFUNC(op_6701_22)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (7)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel10165; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (2); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel10165: ; return; } /* Bcc.L #.L */ void REGPARAM2 CPUFUNC(op_67ff_22)(uae_u32 opcode) { {{ uae_s32 src = get_long_ce020_prefetch (2); if (!cctrue (7)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel10166; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (6); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel10166: ; return; } /* Bcc.W #.W */ void REGPARAM2 CPUFUNC(op_6800_22)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); if (!cctrue (8)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel10167; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (4); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel10167: ; return; } /* BccQ.B # */ void REGPARAM2 CPUFUNC(op_6801_22)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (8)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel10168; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (2); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel10168: ; return; } /* Bcc.L #.L */ void REGPARAM2 CPUFUNC(op_68ff_22)(uae_u32 opcode) { {{ uae_s32 src = get_long_ce020_prefetch (2); if (!cctrue (8)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel10169; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (6); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel10169: ; return; } /* Bcc.W #.W */ void REGPARAM2 CPUFUNC(op_6900_22)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); if (!cctrue (9)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel10170; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (4); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel10170: ; return; } /* BccQ.B # */ void REGPARAM2 CPUFUNC(op_6901_22)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (9)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel10171; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (2); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel10171: ; return; } /* Bcc.L #.L */ void REGPARAM2 CPUFUNC(op_69ff_22)(uae_u32 opcode) { {{ uae_s32 src = get_long_ce020_prefetch (2); if (!cctrue (9)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel10172; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (6); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel10172: ; return; } /* Bcc.W #.W */ void REGPARAM2 CPUFUNC(op_6a00_22)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); if (!cctrue (10)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel10173; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (4); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel10173: ; return; } /* BccQ.B # */ void REGPARAM2 CPUFUNC(op_6a01_22)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (10)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel10174; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (2); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel10174: ; return; } /* Bcc.L #.L */ void REGPARAM2 CPUFUNC(op_6aff_22)(uae_u32 opcode) { {{ uae_s32 src = get_long_ce020_prefetch (2); if (!cctrue (10)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel10175; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (6); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel10175: ; return; } /* Bcc.W #.W */ void REGPARAM2 CPUFUNC(op_6b00_22)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); if (!cctrue (11)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel10176; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (4); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel10176: ; return; } /* BccQ.B # */ void REGPARAM2 CPUFUNC(op_6b01_22)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (11)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel10177; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (2); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel10177: ; return; } /* Bcc.L #.L */ void REGPARAM2 CPUFUNC(op_6bff_22)(uae_u32 opcode) { {{ uae_s32 src = get_long_ce020_prefetch (2); if (!cctrue (11)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel10178; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (6); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel10178: ; return; } /* Bcc.W #.W */ void REGPARAM2 CPUFUNC(op_6c00_22)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); if (!cctrue (12)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel10179; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (4); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel10179: ; return; } /* BccQ.B # */ void REGPARAM2 CPUFUNC(op_6c01_22)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (12)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel10180; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (2); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel10180: ; return; } /* Bcc.L #.L */ void REGPARAM2 CPUFUNC(op_6cff_22)(uae_u32 opcode) { {{ uae_s32 src = get_long_ce020_prefetch (2); if (!cctrue (12)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel10181; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (6); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel10181: ; return; } /* Bcc.W #.W */ void REGPARAM2 CPUFUNC(op_6d00_22)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); if (!cctrue (13)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel10182; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (4); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel10182: ; return; } /* BccQ.B # */ void REGPARAM2 CPUFUNC(op_6d01_22)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (13)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel10183; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (2); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel10183: ; return; } /* Bcc.L #.L */ void REGPARAM2 CPUFUNC(op_6dff_22)(uae_u32 opcode) { {{ uae_s32 src = get_long_ce020_prefetch (2); if (!cctrue (13)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel10184; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (6); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel10184: ; return; } /* Bcc.W #.W */ void REGPARAM2 CPUFUNC(op_6e00_22)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); if (!cctrue (14)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel10185; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (4); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel10185: ; return; } /* BccQ.B # */ void REGPARAM2 CPUFUNC(op_6e01_22)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (14)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel10186; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (2); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel10186: ; return; } /* Bcc.L #.L */ void REGPARAM2 CPUFUNC(op_6eff_22)(uae_u32 opcode) { {{ uae_s32 src = get_long_ce020_prefetch (2); if (!cctrue (14)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel10187; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (6); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel10187: ; return; } /* Bcc.W #.W */ void REGPARAM2 CPUFUNC(op_6f00_22)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce020_prefetch (2); if (!cctrue (15)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel10188; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (4); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel10188: ; return; } /* BccQ.B # */ void REGPARAM2 CPUFUNC(op_6f01_22)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (15)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel10189; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (2); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel10189: ; return; } /* Bcc.L #.L */ void REGPARAM2 CPUFUNC(op_6fff_22)(uae_u32 opcode) { {{ uae_s32 src = get_long_ce020_prefetch (2); if (!cctrue (15)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel10190; } m68k_incpc ((uae_s32)src + 2); return; didnt_jump:; m68k_incpc (6); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel10190: ; return; } /* MOVEQ.L #,Dn */ void REGPARAM2 CPUFUNC(op_7000_22)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_u32 src = srcreg; { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpc (2); }}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* OR.B Dn,Dn */ void REGPARAM2 CPUFUNC(op_8000_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* OR.B (An),Dn */ void REGPARAM2 CPUFUNC(op_8010_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* OR.B (An)+,Dn */ void REGPARAM2 CPUFUNC(op_8018_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* OR.B -(An),Dn */ void REGPARAM2 CPUFUNC(op_8020_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* OR.B (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_8028_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* OR.B (d8,An,Xn),Dn */ void REGPARAM2 CPUFUNC(op_8030_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* OR.B (xxx).W,Dn */ void REGPARAM2 CPUFUNC(op_8038_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* OR.B (xxx).L,Dn */ void REGPARAM2 CPUFUNC(op_8039_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* OR.B (d16,PC),Dn */ void REGPARAM2 CPUFUNC(op_803a_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* OR.B (d8,PC,Xn),Dn */ void REGPARAM2 CPUFUNC(op_803b_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* OR.B #.B,Dn */ void REGPARAM2 CPUFUNC(op_803c_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* OR.W Dn,Dn */ void REGPARAM2 CPUFUNC(op_8040_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* OR.W (An),Dn */ void REGPARAM2 CPUFUNC(op_8050_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* OR.W (An)+,Dn */ void REGPARAM2 CPUFUNC(op_8058_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* OR.W -(An),Dn */ void REGPARAM2 CPUFUNC(op_8060_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* OR.W (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_8068_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* OR.W (d8,An,Xn),Dn */ void REGPARAM2 CPUFUNC(op_8070_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* OR.W (xxx).W,Dn */ void REGPARAM2 CPUFUNC(op_8078_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* OR.W (xxx).L,Dn */ void REGPARAM2 CPUFUNC(op_8079_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* OR.W (d16,PC),Dn */ void REGPARAM2 CPUFUNC(op_807a_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* OR.W (d8,PC,Xn),Dn */ void REGPARAM2 CPUFUNC(op_807b_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* OR.W #.W,Dn */ void REGPARAM2 CPUFUNC(op_807c_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* OR.L Dn,Dn */ void REGPARAM2 CPUFUNC(op_8080_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* OR.L (An),Dn */ void REGPARAM2 CPUFUNC(op_8090_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* OR.L (An)+,Dn */ void REGPARAM2 CPUFUNC(op_8098_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) += 4; { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* OR.L -(An),Dn */ void REGPARAM2 CPUFUNC(op_80a0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* OR.L (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_80a8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* OR.L (d8,An,Xn),Dn */ void REGPARAM2 CPUFUNC(op_80b0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* OR.L (xxx).W,Dn */ void REGPARAM2 CPUFUNC(op_80b8_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* OR.L (xxx).L,Dn */ void REGPARAM2 CPUFUNC(op_80b9_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* OR.L (d16,PC),Dn */ void REGPARAM2 CPUFUNC(op_80ba_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* OR.L (d8,PC,Xn),Dn */ void REGPARAM2 CPUFUNC(op_80bb_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* OR.L #.L,Dn */ void REGPARAM2 CPUFUNC(op_80bc_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* DIVU.W Dn,Dn */ void REGPARAM2 CPUFUNC(op_80c0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); if (dst < 0) SET_NFLG (1); m68k_incpc (2); Exception (5); goto endlabel10225; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; regs.ce020memcycles += 36 * cpucycleunit; if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (2); } }}}endlabel10225: ; return; } /* DIVU.W (An),Dn */ void REGPARAM2 CPUFUNC(op_80d0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); if (dst < 0) SET_NFLG (1); m68k_incpc (2); Exception (5); goto endlabel10226; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; regs.ce020memcycles += 36 * cpucycleunit; if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (2); } }}}}endlabel10226: ; return; } /* DIVU.W (An)+,Dn */ void REGPARAM2 CPUFUNC(op_80d8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); if (dst < 0) SET_NFLG (1); m68k_incpc (2); Exception (5); goto endlabel10227; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; regs.ce020memcycles += 36 * cpucycleunit; if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (2); } }}}}endlabel10227: ; return; } /* DIVU.W -(An),Dn */ void REGPARAM2 CPUFUNC(op_80e0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); if (dst < 0) SET_NFLG (1); m68k_incpc (2); Exception (5); goto endlabel10228; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; regs.ce020memcycles += 36 * cpucycleunit; if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (2); } }}}}endlabel10228: ; return; } /* DIVU.W (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_80e8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); if (dst < 0) SET_NFLG (1); m68k_incpc (4); Exception (5); goto endlabel10229; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; regs.ce020memcycles += 36 * cpucycleunit; if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (4); } }}}}endlabel10229: ; return; } /* DIVU.W (d8,An,Xn),Dn */ void REGPARAM2 CPUFUNC(op_80f0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); if (dst < 0) SET_NFLG (1); m68k_incpc (0); Exception (5); goto endlabel10230; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; regs.ce020memcycles += 36 * cpucycleunit; if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } } }}}}}endlabel10230: ; return; } /* DIVU.W (xxx).W,Dn */ void REGPARAM2 CPUFUNC(op_80f8_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); if (dst < 0) SET_NFLG (1); m68k_incpc (4); Exception (5); goto endlabel10231; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; regs.ce020memcycles += 36 * cpucycleunit; if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (4); } }}}}endlabel10231: ; return; } /* DIVU.W (xxx).L,Dn */ void REGPARAM2 CPUFUNC(op_80f9_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); if (dst < 0) SET_NFLG (1); m68k_incpc (6); Exception (5); goto endlabel10232; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; regs.ce020memcycles += 36 * cpucycleunit; if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (6); } }}}}endlabel10232: ; return; } /* DIVU.W (d16,PC),Dn */ void REGPARAM2 CPUFUNC(op_80fa_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); if (dst < 0) SET_NFLG (1); m68k_incpc (4); Exception (5); goto endlabel10233; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; regs.ce020memcycles += 36 * cpucycleunit; if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (4); } }}}}endlabel10233: ; return; } /* DIVU.W (d8,PC,Xn),Dn */ void REGPARAM2 CPUFUNC(op_80fb_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); if (dst < 0) SET_NFLG (1); m68k_incpc (0); Exception (5); goto endlabel10234; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; regs.ce020memcycles += 36 * cpucycleunit; if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } } }}}}}endlabel10234: ; return; } /* DIVU.W #.W,Dn */ void REGPARAM2 CPUFUNC(op_80fc_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); if (dst < 0) SET_NFLG (1); m68k_incpc (4); Exception (5); goto endlabel10235; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; regs.ce020memcycles += 36 * cpucycleunit; if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (4); } }}}endlabel10235: ; return; } /* SBCD.B Dn,Dn */ void REGPARAM2 CPUFUNC(op_8100_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); { uae_u16 newv_lo = (dst & 0xF) - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = (dst & 0xF0) - (src & 0xF0); uae_u16 newv, tmp_newv; int bcd = 0; newv = tmp_newv = newv_hi + newv_lo; if (newv_lo & 0xF0) { newv -= 6; bcd = 6; }; if ((((dst & 0xFF) - (src & 0xFF) - (GET_XFLG () ? 1 : 0)) & 0x100) > 0xFF) { newv -= 0x60; } SET_CFLG ((((dst & 0xFF) - (src & 0xFF) - bcd - (GET_XFLG () ? 1 : 0)) & 0x300) > 0xFF); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SBCD.B -(An),-(An) */ void REGPARAM2 CPUFUNC(op_8108_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; { uae_u16 newv_lo = (dst & 0xF) - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = (dst & 0xF0) - (src & 0xF0); uae_u16 newv, tmp_newv; int bcd = 0; newv = tmp_newv = newv_hi + newv_lo; if (newv_lo & 0xF0) { newv -= 6; bcd = 6; }; if ((((dst & 0xFF) - (src & 0xFF) - (GET_XFLG () ? 1 : 0)) & 0x100) > 0xFF) { newv -= 0x60; } SET_CFLG ((((dst & 0xFF) - (src & 0xFF) - bcd - (GET_XFLG () ? 1 : 0)) & 0x300) > 0xFF); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); x_put_byte (dsta, newv); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* OR.B Dn,(An) */ void REGPARAM2 CPUFUNC(op_8110_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* OR.B Dn,(An)+ */ void REGPARAM2 CPUFUNC(op_8118_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* OR.B Dn,-(An) */ void REGPARAM2 CPUFUNC(op_8120_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* OR.B Dn,(d16,An) */ void REGPARAM2 CPUFUNC(op_8128_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* OR.B Dn,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_8130_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s8 dst = x_get_byte (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* OR.B Dn,(xxx).W */ void REGPARAM2 CPUFUNC(op_8138_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* OR.B Dn,(xxx).L */ void REGPARAM2 CPUFUNC(op_8139_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* PACK.L Dn,Dn */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_8140_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; { uae_u16 val = m68k_dreg (regs, srcreg) + get_word_ce020_prefetch (2); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & 0xffffff00) | ((val >> 4) & 0xf0) | (val & 0xf); } regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } #endif /* PACK.L -(An),-(An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_8148_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; { uae_u16 val; m68k_areg (regs, srcreg) -= areg_byteinc[srcreg]; val = (uae_u16)x_get_byte (m68k_areg (regs, srcreg)); m68k_areg (regs, srcreg) -= areg_byteinc[srcreg]; val = (val | ((uae_u16)x_get_byte (m68k_areg (regs, srcreg)) << 8)) + get_word_ce020_prefetch (2); m68k_areg (regs, dstreg) -= areg_byteinc[dstreg]; x_put_byte (m68k_areg (regs, dstreg),((val >> 4) & 0xf0) | (val & 0xf)); } regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } #endif /* OR.W Dn,(An) */ void REGPARAM2 CPUFUNC(op_8150_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* OR.W Dn,(An)+ */ void REGPARAM2 CPUFUNC(op_8158_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) += 2; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* OR.W Dn,-(An) */ void REGPARAM2 CPUFUNC(op_8160_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) = dsta; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* OR.W Dn,(d16,An) */ void REGPARAM2 CPUFUNC(op_8168_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 dst = x_get_word (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* OR.W Dn,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_8170_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s16 dst = x_get_word (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* OR.W Dn,(xxx).W */ void REGPARAM2 CPUFUNC(op_8178_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 dst = x_get_word (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* OR.W Dn,(xxx).L */ void REGPARAM2 CPUFUNC(op_8179_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_ce020_prefetch (2); { uae_s16 dst = x_get_word (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* UNPK.L Dn,Dn */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_8180_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; { uae_u16 val = m68k_dreg (regs, srcreg); val = (((val << 4) & 0xf00) | (val & 0xf)) + get_word_ce020_prefetch (2); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & 0xffff0000) | (val & 0xffff); } regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } #endif /* UNPK.L -(An),-(An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_8188_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; { uae_u16 val; m68k_areg (regs, srcreg) -= areg_byteinc[srcreg]; val = (uae_u16)x_get_byte (m68k_areg (regs, srcreg)); val = (((val << 4) & 0xf00) | (val & 0xf)) + get_word_ce020_prefetch (2); m68k_areg (regs, dstreg) -= 2 * areg_byteinc[dstreg]; x_put_byte (m68k_areg (regs, dstreg) + areg_byteinc[dstreg], val); x_put_byte (m68k_areg (regs, dstreg), val >> 8); } regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } #endif /* OR.L Dn,(An) */ void REGPARAM2 CPUFUNC(op_8190_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* OR.L Dn,(An)+ */ void REGPARAM2 CPUFUNC(op_8198_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) += 4; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* OR.L Dn,-(An) */ void REGPARAM2 CPUFUNC(op_81a0_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) = dsta; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* OR.L Dn,(d16,An) */ void REGPARAM2 CPUFUNC(op_81a8_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 dst = x_get_long (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* OR.L Dn,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_81b0_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s32 dst = x_get_long (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* OR.L Dn,(xxx).W */ void REGPARAM2 CPUFUNC(op_81b8_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 dst = x_get_long (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* OR.L Dn,(xxx).L */ void REGPARAM2 CPUFUNC(op_81b9_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_ce020_prefetch (2); { uae_s32 dst = x_get_long (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* DIVS.W Dn,Dn */ void REGPARAM2 CPUFUNC(op_81c0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); SET_ZFLG (1); m68k_incpc (2); Exception (5); goto endlabel10263; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; regs.ce020memcycles += 46 * cpucycleunit; if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (2); } }}}endlabel10263: ; return; } /* DIVS.W (An),Dn */ void REGPARAM2 CPUFUNC(op_81d0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); SET_ZFLG (1); m68k_incpc (2); Exception (5); goto endlabel10264; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; regs.ce020memcycles += 46 * cpucycleunit; if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (2); } }}}}endlabel10264: ; return; } /* DIVS.W (An)+,Dn */ void REGPARAM2 CPUFUNC(op_81d8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); SET_ZFLG (1); m68k_incpc (2); Exception (5); goto endlabel10265; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; regs.ce020memcycles += 46 * cpucycleunit; if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (2); } }}}}endlabel10265: ; return; } /* DIVS.W -(An),Dn */ void REGPARAM2 CPUFUNC(op_81e0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); SET_ZFLG (1); m68k_incpc (2); Exception (5); goto endlabel10266; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; regs.ce020memcycles += 46 * cpucycleunit; if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (2); } }}}}endlabel10266: ; return; } /* DIVS.W (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_81e8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); SET_ZFLG (1); m68k_incpc (4); Exception (5); goto endlabel10267; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; regs.ce020memcycles += 46 * cpucycleunit; if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (4); } }}}}endlabel10267: ; return; } /* DIVS.W (d8,An,Xn),Dn */ void REGPARAM2 CPUFUNC(op_81f0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); SET_ZFLG (1); m68k_incpc (0); Exception (5); goto endlabel10268; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; regs.ce020memcycles += 46 * cpucycleunit; if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } } }}}}}endlabel10268: ; return; } /* DIVS.W (xxx).W,Dn */ void REGPARAM2 CPUFUNC(op_81f8_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); SET_ZFLG (1); m68k_incpc (4); Exception (5); goto endlabel10269; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; regs.ce020memcycles += 46 * cpucycleunit; if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (4); } }}}}endlabel10269: ; return; } /* DIVS.W (xxx).L,Dn */ void REGPARAM2 CPUFUNC(op_81f9_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); SET_ZFLG (1); m68k_incpc (6); Exception (5); goto endlabel10270; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; regs.ce020memcycles += 46 * cpucycleunit; if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (6); } }}}}endlabel10270: ; return; } /* DIVS.W (d16,PC),Dn */ void REGPARAM2 CPUFUNC(op_81fa_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); SET_ZFLG (1); m68k_incpc (4); Exception (5); goto endlabel10271; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; regs.ce020memcycles += 46 * cpucycleunit; if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (4); } }}}}endlabel10271: ; return; } /* DIVS.W (d8,PC,Xn),Dn */ void REGPARAM2 CPUFUNC(op_81fb_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); SET_ZFLG (1); m68k_incpc (0); Exception (5); goto endlabel10272; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; regs.ce020memcycles += 46 * cpucycleunit; if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } } }}}}}endlabel10272: ; return; } /* DIVS.W #.W,Dn */ void REGPARAM2 CPUFUNC(op_81fc_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); SET_ZFLG (1); m68k_incpc (4); Exception (5); goto endlabel10273; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; regs.ce020memcycles += 46 * cpucycleunit; if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (4); } }}}endlabel10273: ; return; } /* SUB.B Dn,Dn */ void REGPARAM2 CPUFUNC(op_9000_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUB.B (An),Dn */ void REGPARAM2 CPUFUNC(op_9010_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUB.B (An)+,Dn */ void REGPARAM2 CPUFUNC(op_9018_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUB.B -(An),Dn */ void REGPARAM2 CPUFUNC(op_9020_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUB.B (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_9028_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUB.B (d8,An,Xn),Dn */ void REGPARAM2 CPUFUNC(op_9030_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* SUB.B (xxx).W,Dn */ void REGPARAM2 CPUFUNC(op_9038_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUB.B (xxx).L,Dn */ void REGPARAM2 CPUFUNC(op_9039_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* SUB.B (d16,PC),Dn */ void REGPARAM2 CPUFUNC(op_903a_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUB.B (d8,PC,Xn),Dn */ void REGPARAM2 CPUFUNC(op_903b_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* SUB.B #.B,Dn */ void REGPARAM2 CPUFUNC(op_903c_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUB.W Dn,Dn */ void REGPARAM2 CPUFUNC(op_9040_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUB.W An,Dn */ void REGPARAM2 CPUFUNC(op_9048_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUB.W (An),Dn */ void REGPARAM2 CPUFUNC(op_9050_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUB.W (An)+,Dn */ void REGPARAM2 CPUFUNC(op_9058_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUB.W -(An),Dn */ void REGPARAM2 CPUFUNC(op_9060_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUB.W (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_9068_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUB.W (d8,An,Xn),Dn */ void REGPARAM2 CPUFUNC(op_9070_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* SUB.W (xxx).W,Dn */ void REGPARAM2 CPUFUNC(op_9078_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUB.W (xxx).L,Dn */ void REGPARAM2 CPUFUNC(op_9079_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* SUB.W (d16,PC),Dn */ void REGPARAM2 CPUFUNC(op_907a_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUB.W (d8,PC,Xn),Dn */ void REGPARAM2 CPUFUNC(op_907b_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* SUB.W #.W,Dn */ void REGPARAM2 CPUFUNC(op_907c_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUB.L Dn,Dn */ void REGPARAM2 CPUFUNC(op_9080_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUB.L An,Dn */ void REGPARAM2 CPUFUNC(op_9088_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUB.L (An),Dn */ void REGPARAM2 CPUFUNC(op_9090_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUB.L (An)+,Dn */ void REGPARAM2 CPUFUNC(op_9098_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) += 4; { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUB.L -(An),Dn */ void REGPARAM2 CPUFUNC(op_90a0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUB.L (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_90a8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUB.L (d8,An,Xn),Dn */ void REGPARAM2 CPUFUNC(op_90b0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* SUB.L (xxx).W,Dn */ void REGPARAM2 CPUFUNC(op_90b8_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUB.L (xxx).L,Dn */ void REGPARAM2 CPUFUNC(op_90b9_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* SUB.L (d16,PC),Dn */ void REGPARAM2 CPUFUNC(op_90ba_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUB.L (d8,PC,Xn),Dn */ void REGPARAM2 CPUFUNC(op_90bb_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* SUB.L #.L,Dn */ void REGPARAM2 CPUFUNC(op_90bc_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* SUBA.W Dn,An */ void REGPARAM2 CPUFUNC(op_90c0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUBA.W An,An */ void REGPARAM2 CPUFUNC(op_90c8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUBA.W (An),An */ void REGPARAM2 CPUFUNC(op_90d0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUBA.W (An)+,An */ void REGPARAM2 CPUFUNC(op_90d8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUBA.W -(An),An */ void REGPARAM2 CPUFUNC(op_90e0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUBA.W (d16,An),An */ void REGPARAM2 CPUFUNC(op_90e8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUBA.W (d8,An,Xn),An */ void REGPARAM2 CPUFUNC(op_90f0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* SUBA.W (xxx).W,An */ void REGPARAM2 CPUFUNC(op_90f8_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUBA.W (xxx).L,An */ void REGPARAM2 CPUFUNC(op_90f9_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* SUBA.W (d16,PC),An */ void REGPARAM2 CPUFUNC(op_90fa_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUBA.W (d8,PC,Xn),An */ void REGPARAM2 CPUFUNC(op_90fb_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* SUBA.W #.W,An */ void REGPARAM2 CPUFUNC(op_90fc_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUBX.B Dn,Dn */ void REGPARAM2 CPUFUNC(op_9100_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = dst - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUBX.B -(An),-(An) */ void REGPARAM2 CPUFUNC(op_9108_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; { uae_u32 newv = dst - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUB.B Dn,(An) */ void REGPARAM2 CPUFUNC(op_9110_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUB.B Dn,(An)+ */ void REGPARAM2 CPUFUNC(op_9118_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUB.B Dn,-(An) */ void REGPARAM2 CPUFUNC(op_9120_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUB.B Dn,(d16,An) */ void REGPARAM2 CPUFUNC(op_9128_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUB.B Dn,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_9130_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* SUB.B Dn,(xxx).W */ void REGPARAM2 CPUFUNC(op_9138_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUB.B Dn,(xxx).L */ void REGPARAM2 CPUFUNC(op_9139_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* SUBX.W Dn,Dn */ void REGPARAM2 CPUFUNC(op_9140_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = dst - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUBX.W -(An),-(An) */ void REGPARAM2 CPUFUNC(op_9148_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) = dsta; { uae_u32 newv = dst - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUB.W Dn,(An) */ void REGPARAM2 CPUFUNC(op_9150_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUB.W Dn,(An)+ */ void REGPARAM2 CPUFUNC(op_9158_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) += 2; {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUB.W Dn,-(An) */ void REGPARAM2 CPUFUNC(op_9160_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUB.W Dn,(d16,An) */ void REGPARAM2 CPUFUNC(op_9168_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUB.W Dn,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_9170_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* SUB.W Dn,(xxx).W */ void REGPARAM2 CPUFUNC(op_9178_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUB.W Dn,(xxx).L */ void REGPARAM2 CPUFUNC(op_9179_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_ce020_prefetch (2); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* SUBX.L Dn,Dn */ void REGPARAM2 CPUFUNC(op_9180_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = dst - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUBX.L -(An),-(An) */ void REGPARAM2 CPUFUNC(op_9188_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) = dsta; { uae_u32 newv = dst - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUB.L Dn,(An) */ void REGPARAM2 CPUFUNC(op_9190_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUB.L Dn,(An)+ */ void REGPARAM2 CPUFUNC(op_9198_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) += 4; {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUB.L Dn,-(An) */ void REGPARAM2 CPUFUNC(op_91a0_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUB.L Dn,(d16,An) */ void REGPARAM2 CPUFUNC(op_91a8_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUB.L Dn,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_91b0_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* SUB.L Dn,(xxx).W */ void REGPARAM2 CPUFUNC(op_91b8_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUB.L Dn,(xxx).L */ void REGPARAM2 CPUFUNC(op_91b9_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_ce020_prefetch (2); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* SUBA.L Dn,An */ void REGPARAM2 CPUFUNC(op_91c0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUBA.L An,An */ void REGPARAM2 CPUFUNC(op_91c8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUBA.L (An),An */ void REGPARAM2 CPUFUNC(op_91d0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUBA.L (An)+,An */ void REGPARAM2 CPUFUNC(op_91d8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) += 4; { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUBA.L -(An),An */ void REGPARAM2 CPUFUNC(op_91e0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SUBA.L (d16,An),An */ void REGPARAM2 CPUFUNC(op_91e8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUBA.L (d8,An,Xn),An */ void REGPARAM2 CPUFUNC(op_91f0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* SUBA.L (xxx).W,An */ void REGPARAM2 CPUFUNC(op_91f8_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUBA.L (xxx).L,An */ void REGPARAM2 CPUFUNC(op_91f9_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* SUBA.L (d16,PC),An */ void REGPARAM2 CPUFUNC(op_91fa_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* SUBA.L (d8,PC,Xn),An */ void REGPARAM2 CPUFUNC(op_91fb_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* SUBA.L #.L,An */ void REGPARAM2 CPUFUNC(op_91fc_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* CMP.B Dn,Dn */ void REGPARAM2 CPUFUNC(op_b000_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CMP.B (An),Dn */ void REGPARAM2 CPUFUNC(op_b010_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CMP.B (An)+,Dn */ void REGPARAM2 CPUFUNC(op_b018_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CMP.B -(An),Dn */ void REGPARAM2 CPUFUNC(op_b020_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CMP.B (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_b028_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* CMP.B (d8,An,Xn),Dn */ void REGPARAM2 CPUFUNC(op_b030_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* CMP.B (xxx).W,Dn */ void REGPARAM2 CPUFUNC(op_b038_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* CMP.B (xxx).L,Dn */ void REGPARAM2 CPUFUNC(op_b039_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* CMP.B (d16,PC),Dn */ void REGPARAM2 CPUFUNC(op_b03a_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* CMP.B (d8,PC,Xn),Dn */ void REGPARAM2 CPUFUNC(op_b03b_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* CMP.B #.B,Dn */ void REGPARAM2 CPUFUNC(op_b03c_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* CMP.W Dn,Dn */ void REGPARAM2 CPUFUNC(op_b040_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CMP.W An,Dn */ void REGPARAM2 CPUFUNC(op_b048_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CMP.W (An),Dn */ void REGPARAM2 CPUFUNC(op_b050_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CMP.W (An)+,Dn */ void REGPARAM2 CPUFUNC(op_b058_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CMP.W -(An),Dn */ void REGPARAM2 CPUFUNC(op_b060_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CMP.W (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_b068_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* CMP.W (d8,An,Xn),Dn */ void REGPARAM2 CPUFUNC(op_b070_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* CMP.W (xxx).W,Dn */ void REGPARAM2 CPUFUNC(op_b078_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* CMP.W (xxx).L,Dn */ void REGPARAM2 CPUFUNC(op_b079_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* CMP.W (d16,PC),Dn */ void REGPARAM2 CPUFUNC(op_b07a_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* CMP.W (d8,PC,Xn),Dn */ void REGPARAM2 CPUFUNC(op_b07b_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* CMP.W #.W,Dn */ void REGPARAM2 CPUFUNC(op_b07c_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* CMP.L Dn,Dn */ void REGPARAM2 CPUFUNC(op_b080_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CMP.L An,Dn */ void REGPARAM2 CPUFUNC(op_b088_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } #endif #ifdef PART_7 /* CMP.L (An),Dn */ void REGPARAM2 CPUFUNC(op_b090_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CMP.L (An)+,Dn */ void REGPARAM2 CPUFUNC(op_b098_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) += 4; { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CMP.L -(An),Dn */ void REGPARAM2 CPUFUNC(op_b0a0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CMP.L (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_b0a8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* CMP.L (d8,An,Xn),Dn */ void REGPARAM2 CPUFUNC(op_b0b0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* CMP.L (xxx).W,Dn */ void REGPARAM2 CPUFUNC(op_b0b8_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* CMP.L (xxx).L,Dn */ void REGPARAM2 CPUFUNC(op_b0b9_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* CMP.L (d16,PC),Dn */ void REGPARAM2 CPUFUNC(op_b0ba_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* CMP.L (d8,PC,Xn),Dn */ void REGPARAM2 CPUFUNC(op_b0bb_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* CMP.L #.L,Dn */ void REGPARAM2 CPUFUNC(op_b0bc_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* CMPA.W Dn,An */ void REGPARAM2 CPUFUNC(op_b0c0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CMPA.W An,An */ void REGPARAM2 CPUFUNC(op_b0c8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CMPA.W (An),An */ void REGPARAM2 CPUFUNC(op_b0d0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CMPA.W (An)+,An */ void REGPARAM2 CPUFUNC(op_b0d8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CMPA.W -(An),An */ void REGPARAM2 CPUFUNC(op_b0e0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CMPA.W (d16,An),An */ void REGPARAM2 CPUFUNC(op_b0e8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* CMPA.W (d8,An,Xn),An */ void REGPARAM2 CPUFUNC(op_b0f0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* CMPA.W (xxx).W,An */ void REGPARAM2 CPUFUNC(op_b0f8_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* CMPA.W (xxx).L,An */ void REGPARAM2 CPUFUNC(op_b0f9_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* CMPA.W (d16,PC),An */ void REGPARAM2 CPUFUNC(op_b0fa_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* CMPA.W (d8,PC,Xn),An */ void REGPARAM2 CPUFUNC(op_b0fb_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* CMPA.W #.W,An */ void REGPARAM2 CPUFUNC(op_b0fc_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* EOR.B Dn,Dn */ void REGPARAM2 CPUFUNC(op_b100_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CMPM.B (An)+,(An)+ */ void REGPARAM2 CPUFUNC(op_b108_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* EOR.B Dn,(An) */ void REGPARAM2 CPUFUNC(op_b110_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* EOR.B Dn,(An)+ */ void REGPARAM2 CPUFUNC(op_b118_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* EOR.B Dn,-(An) */ void REGPARAM2 CPUFUNC(op_b120_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* EOR.B Dn,(d16,An) */ void REGPARAM2 CPUFUNC(op_b128_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* EOR.B Dn,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_b130_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s8 dst = x_get_byte (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* EOR.B Dn,(xxx).W */ void REGPARAM2 CPUFUNC(op_b138_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* EOR.B Dn,(xxx).L */ void REGPARAM2 CPUFUNC(op_b139_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* EOR.W Dn,Dn */ void REGPARAM2 CPUFUNC(op_b140_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CMPM.W (An)+,(An)+ */ void REGPARAM2 CPUFUNC(op_b148_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) += 2; {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* EOR.W Dn,(An) */ void REGPARAM2 CPUFUNC(op_b150_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* EOR.W Dn,(An)+ */ void REGPARAM2 CPUFUNC(op_b158_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) += 2; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* EOR.W Dn,-(An) */ void REGPARAM2 CPUFUNC(op_b160_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) = dsta; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* EOR.W Dn,(d16,An) */ void REGPARAM2 CPUFUNC(op_b168_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 dst = x_get_word (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* EOR.W Dn,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_b170_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s16 dst = x_get_word (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* EOR.W Dn,(xxx).W */ void REGPARAM2 CPUFUNC(op_b178_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 dst = x_get_word (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* EOR.W Dn,(xxx).L */ void REGPARAM2 CPUFUNC(op_b179_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_ce020_prefetch (2); { uae_s16 dst = x_get_word (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* EOR.L Dn,Dn */ void REGPARAM2 CPUFUNC(op_b180_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CMPM.L (An)+,(An)+ */ void REGPARAM2 CPUFUNC(op_b188_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) += 4; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) += 4; {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* EOR.L Dn,(An) */ void REGPARAM2 CPUFUNC(op_b190_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* EOR.L Dn,(An)+ */ void REGPARAM2 CPUFUNC(op_b198_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) += 4; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* EOR.L Dn,-(An) */ void REGPARAM2 CPUFUNC(op_b1a0_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) = dsta; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* EOR.L Dn,(d16,An) */ void REGPARAM2 CPUFUNC(op_b1a8_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 dst = x_get_long (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* EOR.L Dn,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_b1b0_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s32 dst = x_get_long (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* EOR.L Dn,(xxx).W */ void REGPARAM2 CPUFUNC(op_b1b8_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 dst = x_get_long (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* EOR.L Dn,(xxx).L */ void REGPARAM2 CPUFUNC(op_b1b9_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_ce020_prefetch (2); { uae_s32 dst = x_get_long (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* CMPA.L Dn,An */ void REGPARAM2 CPUFUNC(op_b1c0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CMPA.L An,An */ void REGPARAM2 CPUFUNC(op_b1c8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CMPA.L (An),An */ void REGPARAM2 CPUFUNC(op_b1d0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CMPA.L (An)+,An */ void REGPARAM2 CPUFUNC(op_b1d8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) += 4; { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CMPA.L -(An),An */ void REGPARAM2 CPUFUNC(op_b1e0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* CMPA.L (d16,An),An */ void REGPARAM2 CPUFUNC(op_b1e8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* CMPA.L (d8,An,Xn),An */ void REGPARAM2 CPUFUNC(op_b1f0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* CMPA.L (xxx).W,An */ void REGPARAM2 CPUFUNC(op_b1f8_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* CMPA.L (xxx).L,An */ void REGPARAM2 CPUFUNC(op_b1f9_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* CMPA.L (d16,PC),An */ void REGPARAM2 CPUFUNC(op_b1fa_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* CMPA.L (d8,PC,Xn),An */ void REGPARAM2 CPUFUNC(op_b1fb_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* CMPA.L #.L,An */ void REGPARAM2 CPUFUNC(op_b1fc_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* AND.B Dn,Dn */ void REGPARAM2 CPUFUNC(op_c000_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* AND.B (An),Dn */ void REGPARAM2 CPUFUNC(op_c010_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* AND.B (An)+,Dn */ void REGPARAM2 CPUFUNC(op_c018_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* AND.B -(An),Dn */ void REGPARAM2 CPUFUNC(op_c020_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* AND.B (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_c028_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* AND.B (d8,An,Xn),Dn */ void REGPARAM2 CPUFUNC(op_c030_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* AND.B (xxx).W,Dn */ void REGPARAM2 CPUFUNC(op_c038_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* AND.B (xxx).L,Dn */ void REGPARAM2 CPUFUNC(op_c039_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* AND.B (d16,PC),Dn */ void REGPARAM2 CPUFUNC(op_c03a_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* AND.B (d8,PC,Xn),Dn */ void REGPARAM2 CPUFUNC(op_c03b_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* AND.B #.B,Dn */ void REGPARAM2 CPUFUNC(op_c03c_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* AND.W Dn,Dn */ void REGPARAM2 CPUFUNC(op_c040_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* AND.W (An),Dn */ void REGPARAM2 CPUFUNC(op_c050_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* AND.W (An)+,Dn */ void REGPARAM2 CPUFUNC(op_c058_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* AND.W -(An),Dn */ void REGPARAM2 CPUFUNC(op_c060_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* AND.W (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_c068_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* AND.W (d8,An,Xn),Dn */ void REGPARAM2 CPUFUNC(op_c070_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* AND.W (xxx).W,Dn */ void REGPARAM2 CPUFUNC(op_c078_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* AND.W (xxx).L,Dn */ void REGPARAM2 CPUFUNC(op_c079_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* AND.W (d16,PC),Dn */ void REGPARAM2 CPUFUNC(op_c07a_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* AND.W (d8,PC,Xn),Dn */ void REGPARAM2 CPUFUNC(op_c07b_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* AND.W #.W,Dn */ void REGPARAM2 CPUFUNC(op_c07c_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* AND.L Dn,Dn */ void REGPARAM2 CPUFUNC(op_c080_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* AND.L (An),Dn */ void REGPARAM2 CPUFUNC(op_c090_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* AND.L (An)+,Dn */ void REGPARAM2 CPUFUNC(op_c098_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) += 4; { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* AND.L -(An),Dn */ void REGPARAM2 CPUFUNC(op_c0a0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* AND.L (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_c0a8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* AND.L (d8,An,Xn),Dn */ void REGPARAM2 CPUFUNC(op_c0b0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* AND.L (xxx).W,Dn */ void REGPARAM2 CPUFUNC(op_c0b8_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* AND.L (xxx).L,Dn */ void REGPARAM2 CPUFUNC(op_c0b9_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* AND.L (d16,PC),Dn */ void REGPARAM2 CPUFUNC(op_c0ba_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* AND.L (d8,PC,Xn),Dn */ void REGPARAM2 CPUFUNC(op_c0bb_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* AND.L #.L,Dn */ void REGPARAM2 CPUFUNC(op_c0bc_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* MULU.W Dn,Dn */ void REGPARAM2 CPUFUNC(op_c0c0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); regs.ce020memcycles += 20 * cpucycleunit; m68k_dreg (regs, dstreg) = (newv); m68k_incpc (2); }}}}return; } /* MULU.W (An),Dn */ void REGPARAM2 CPUFUNC(op_c0d0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); regs.ce020memcycles += 20 * cpucycleunit; m68k_dreg (regs, dstreg) = (newv); m68k_incpc (2); }}}}}return; } /* MULU.W (An)+,Dn */ void REGPARAM2 CPUFUNC(op_c0d8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); regs.ce020memcycles += 20 * cpucycleunit; m68k_dreg (regs, dstreg) = (newv); m68k_incpc (2); }}}}}return; } /* MULU.W -(An),Dn */ void REGPARAM2 CPUFUNC(op_c0e0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); regs.ce020memcycles += 20 * cpucycleunit; m68k_dreg (regs, dstreg) = (newv); m68k_incpc (2); }}}}}return; } /* MULU.W (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_c0e8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); regs.ce020memcycles += 20 * cpucycleunit; m68k_dreg (regs, dstreg) = (newv); m68k_incpc (4); }}}}}return; } /* MULU.W (d8,An,Xn),Dn */ void REGPARAM2 CPUFUNC(op_c0f0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); regs.ce020memcycles += 20 * cpucycleunit; m68k_dreg (regs, dstreg) = (newv); }}}}}}return; } /* MULU.W (xxx).W,Dn */ void REGPARAM2 CPUFUNC(op_c0f8_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); regs.ce020memcycles += 20 * cpucycleunit; m68k_dreg (regs, dstreg) = (newv); m68k_incpc (4); }}}}}return; } /* MULU.W (xxx).L,Dn */ void REGPARAM2 CPUFUNC(op_c0f9_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); regs.ce020memcycles += 20 * cpucycleunit; m68k_dreg (regs, dstreg) = (newv); m68k_incpc (6); }}}}}return; } /* MULU.W (d16,PC),Dn */ void REGPARAM2 CPUFUNC(op_c0fa_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); regs.ce020memcycles += 20 * cpucycleunit; m68k_dreg (regs, dstreg) = (newv); m68k_incpc (4); }}}}}return; } /* MULU.W (d8,PC,Xn),Dn */ void REGPARAM2 CPUFUNC(op_c0fb_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); regs.ce020memcycles += 20 * cpucycleunit; m68k_dreg (regs, dstreg) = (newv); }}}}}}return; } /* MULU.W #.W,Dn */ void REGPARAM2 CPUFUNC(op_c0fc_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); regs.ce020memcycles += 20 * cpucycleunit; m68k_dreg (regs, dstreg) = (newv); m68k_incpc (4); }}}}return; } /* ABCD.B Dn,Dn */ void REGPARAM2 CPUFUNC(op_c100_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); { uae_u16 newv_lo = (src & 0xF) + (dst & 0xF) + (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = (src & 0xF0) + (dst & 0xF0); uae_u16 newv, tmp_newv; int cflg; newv = tmp_newv = newv_hi + newv_lo; if (newv_lo > 9) { newv += 6; } cflg = (newv & 0x3F0) > 0x90; if (cflg) newv += 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ABCD.B -(An),-(An) */ void REGPARAM2 CPUFUNC(op_c108_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; { uae_u16 newv_lo = (src & 0xF) + (dst & 0xF) + (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = (src & 0xF0) + (dst & 0xF0); uae_u16 newv, tmp_newv; int cflg; newv = tmp_newv = newv_hi + newv_lo; if (newv_lo > 9) { newv += 6; } cflg = (newv & 0x3F0) > 0x90; if (cflg) newv += 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); x_put_byte (dsta, newv); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* AND.B Dn,(An) */ void REGPARAM2 CPUFUNC(op_c110_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* AND.B Dn,(An)+ */ void REGPARAM2 CPUFUNC(op_c118_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* AND.B Dn,-(An) */ void REGPARAM2 CPUFUNC(op_c120_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* AND.B Dn,(d16,An) */ void REGPARAM2 CPUFUNC(op_c128_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* AND.B Dn,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_c130_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s8 dst = x_get_byte (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* AND.B Dn,(xxx).W */ void REGPARAM2 CPUFUNC(op_c138_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* AND.B Dn,(xxx).L */ void REGPARAM2 CPUFUNC(op_c139_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* EXG.L Dn,Dn */ void REGPARAM2 CPUFUNC(op_c140_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); m68k_dreg (regs, srcreg) = (dst); m68k_dreg (regs, dstreg) = (src); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* EXG.L An,An */ void REGPARAM2 CPUFUNC(op_c148_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); m68k_areg (regs, srcreg) = (dst); m68k_areg (regs, dstreg) = (src); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* AND.W Dn,(An) */ void REGPARAM2 CPUFUNC(op_c150_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* AND.W Dn,(An)+ */ void REGPARAM2 CPUFUNC(op_c158_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) += 2; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* AND.W Dn,-(An) */ void REGPARAM2 CPUFUNC(op_c160_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) = dsta; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* AND.W Dn,(d16,An) */ void REGPARAM2 CPUFUNC(op_c168_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 dst = x_get_word (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* AND.W Dn,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_c170_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s16 dst = x_get_word (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* AND.W Dn,(xxx).W */ void REGPARAM2 CPUFUNC(op_c178_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 dst = x_get_word (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* AND.W Dn,(xxx).L */ void REGPARAM2 CPUFUNC(op_c179_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_ce020_prefetch (2); { uae_s16 dst = x_get_word (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* EXG.L Dn,An */ void REGPARAM2 CPUFUNC(op_c188_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); m68k_dreg (regs, srcreg) = (dst); m68k_areg (regs, dstreg) = (src); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* AND.L Dn,(An) */ void REGPARAM2 CPUFUNC(op_c190_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* AND.L Dn,(An)+ */ void REGPARAM2 CPUFUNC(op_c198_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) += 4; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* AND.L Dn,-(An) */ void REGPARAM2 CPUFUNC(op_c1a0_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) = dsta; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* AND.L Dn,(d16,An) */ void REGPARAM2 CPUFUNC(op_c1a8_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 dst = x_get_long (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* AND.L Dn,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_c1b0_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s32 dst = x_get_long (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* AND.L Dn,(xxx).W */ void REGPARAM2 CPUFUNC(op_c1b8_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 dst = x_get_long (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* AND.L Dn,(xxx).L */ void REGPARAM2 CPUFUNC(op_c1b9_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_ce020_prefetch (2); { uae_s32 dst = x_get_long (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* MULS.W Dn,Dn */ void REGPARAM2 CPUFUNC(op_c1c0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); regs.ce020memcycles += 20 * cpucycleunit; m68k_dreg (regs, dstreg) = (newv); }}}} m68k_incpc (2); return; } /* MULS.W (An),Dn */ void REGPARAM2 CPUFUNC(op_c1d0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); regs.ce020memcycles += 20 * cpucycleunit; m68k_dreg (regs, dstreg) = (newv); }}}}} m68k_incpc (2); return; } /* MULS.W (An)+,Dn */ void REGPARAM2 CPUFUNC(op_c1d8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); regs.ce020memcycles += 20 * cpucycleunit; m68k_dreg (regs, dstreg) = (newv); }}}}} m68k_incpc (2); return; } /* MULS.W -(An),Dn */ void REGPARAM2 CPUFUNC(op_c1e0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); regs.ce020memcycles += 20 * cpucycleunit; m68k_dreg (regs, dstreg) = (newv); }}}}} m68k_incpc (2); return; } /* MULS.W (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_c1e8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); regs.ce020memcycles += 20 * cpucycleunit; m68k_dreg (regs, dstreg) = (newv); }}}}} m68k_incpc (4); return; } /* MULS.W (d8,An,Xn),Dn */ void REGPARAM2 CPUFUNC(op_c1f0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); regs.ce020memcycles += 20 * cpucycleunit; m68k_dreg (regs, dstreg) = (newv); }}}}}}return; } /* MULS.W (xxx).W,Dn */ void REGPARAM2 CPUFUNC(op_c1f8_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); regs.ce020memcycles += 20 * cpucycleunit; m68k_dreg (regs, dstreg) = (newv); }}}}} m68k_incpc (4); return; } /* MULS.W (xxx).L,Dn */ void REGPARAM2 CPUFUNC(op_c1f9_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); regs.ce020memcycles += 20 * cpucycleunit; m68k_dreg (regs, dstreg) = (newv); }}}}} m68k_incpc (6); return; } /* MULS.W (d16,PC),Dn */ void REGPARAM2 CPUFUNC(op_c1fa_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); regs.ce020memcycles += 20 * cpucycleunit; m68k_dreg (regs, dstreg) = (newv); }}}}} m68k_incpc (4); return; } /* MULS.W (d8,PC,Xn),Dn */ void REGPARAM2 CPUFUNC(op_c1fb_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); regs.ce020memcycles += 20 * cpucycleunit; m68k_dreg (regs, dstreg) = (newv); }}}}}}return; } /* MULS.W #.W,Dn */ void REGPARAM2 CPUFUNC(op_c1fc_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); regs.ce020memcycles += 20 * cpucycleunit; m68k_dreg (regs, dstreg) = (newv); }}}} m68k_incpc (4); return; } /* ADD.B Dn,Dn */ void REGPARAM2 CPUFUNC(op_d000_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADD.B (An),Dn */ void REGPARAM2 CPUFUNC(op_d010_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADD.B (An)+,Dn */ void REGPARAM2 CPUFUNC(op_d018_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADD.B -(An),Dn */ void REGPARAM2 CPUFUNC(op_d020_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADD.B (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_d028_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADD.B (d8,An,Xn),Dn */ void REGPARAM2 CPUFUNC(op_d030_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* ADD.B (xxx).W,Dn */ void REGPARAM2 CPUFUNC(op_d038_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADD.B (xxx).L,Dn */ void REGPARAM2 CPUFUNC(op_d039_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* ADD.B (d16,PC),Dn */ void REGPARAM2 CPUFUNC(op_d03a_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADD.B (d8,PC,Xn),Dn */ void REGPARAM2 CPUFUNC(op_d03b_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* ADD.B #.B,Dn */ void REGPARAM2 CPUFUNC(op_d03c_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = (uae_u8)get_word_ce020_prefetch (2); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADD.W Dn,Dn */ void REGPARAM2 CPUFUNC(op_d040_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADD.W An,Dn */ void REGPARAM2 CPUFUNC(op_d048_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADD.W (An),Dn */ void REGPARAM2 CPUFUNC(op_d050_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADD.W (An)+,Dn */ void REGPARAM2 CPUFUNC(op_d058_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADD.W -(An),Dn */ void REGPARAM2 CPUFUNC(op_d060_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADD.W (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_d068_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADD.W (d8,An,Xn),Dn */ void REGPARAM2 CPUFUNC(op_d070_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* ADD.W (xxx).W,Dn */ void REGPARAM2 CPUFUNC(op_d078_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADD.W (xxx).L,Dn */ void REGPARAM2 CPUFUNC(op_d079_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* ADD.W (d16,PC),Dn */ void REGPARAM2 CPUFUNC(op_d07a_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADD.W (d8,PC,Xn),Dn */ void REGPARAM2 CPUFUNC(op_d07b_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* ADD.W #.W,Dn */ void REGPARAM2 CPUFUNC(op_d07c_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADD.L Dn,Dn */ void REGPARAM2 CPUFUNC(op_d080_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADD.L An,Dn */ void REGPARAM2 CPUFUNC(op_d088_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADD.L (An),Dn */ void REGPARAM2 CPUFUNC(op_d090_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADD.L (An)+,Dn */ void REGPARAM2 CPUFUNC(op_d098_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) += 4; { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADD.L -(An),Dn */ void REGPARAM2 CPUFUNC(op_d0a0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADD.L (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_d0a8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADD.L (d8,An,Xn),Dn */ void REGPARAM2 CPUFUNC(op_d0b0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* ADD.L (xxx).W,Dn */ void REGPARAM2 CPUFUNC(op_d0b8_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADD.L (xxx).L,Dn */ void REGPARAM2 CPUFUNC(op_d0b9_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* ADD.L (d16,PC),Dn */ void REGPARAM2 CPUFUNC(op_d0ba_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADD.L (d8,PC,Xn),Dn */ void REGPARAM2 CPUFUNC(op_d0bb_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* ADD.L #.L,Dn */ void REGPARAM2 CPUFUNC(op_d0bc_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* ADDA.W Dn,An */ void REGPARAM2 CPUFUNC(op_d0c0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADDA.W An,An */ void REGPARAM2 CPUFUNC(op_d0c8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADDA.W (An),An */ void REGPARAM2 CPUFUNC(op_d0d0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADDA.W (An)+,An */ void REGPARAM2 CPUFUNC(op_d0d8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADDA.W -(An),An */ void REGPARAM2 CPUFUNC(op_d0e0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADDA.W (d16,An),An */ void REGPARAM2 CPUFUNC(op_d0e8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADDA.W (d8,An,Xn),An */ void REGPARAM2 CPUFUNC(op_d0f0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* ADDA.W (xxx).W,An */ void REGPARAM2 CPUFUNC(op_d0f8_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADDA.W (xxx).L,An */ void REGPARAM2 CPUFUNC(op_d0f9_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* ADDA.W (d16,PC),An */ void REGPARAM2 CPUFUNC(op_d0fa_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADDA.W (d8,PC,Xn),An */ void REGPARAM2 CPUFUNC(op_d0fb_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* ADDA.W #.W,An */ void REGPARAM2 CPUFUNC(op_d0fc_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_ce020_prefetch (2); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADDX.B Dn,Dn */ void REGPARAM2 CPUFUNC(op_d100_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = dst + src + (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgo) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADDX.B -(An),-(An) */ void REGPARAM2 CPUFUNC(op_d108_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; { uae_u32 newv = dst + src + (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgo) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADD.B Dn,(An) */ void REGPARAM2 CPUFUNC(op_d110_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADD.B Dn,(An)+ */ void REGPARAM2 CPUFUNC(op_d118_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADD.B Dn,-(An) */ void REGPARAM2 CPUFUNC(op_d120_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADD.B Dn,(d16,An) */ void REGPARAM2 CPUFUNC(op_d128_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADD.B Dn,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_d130_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* ADD.B Dn,(xxx).W */ void REGPARAM2 CPUFUNC(op_d138_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADD.B Dn,(xxx).L */ void REGPARAM2 CPUFUNC(op_d139_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_ce020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* ADDX.W Dn,Dn */ void REGPARAM2 CPUFUNC(op_d140_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = dst + src + (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgo) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADDX.W -(An),-(An) */ void REGPARAM2 CPUFUNC(op_d148_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) = dsta; { uae_u32 newv = dst + src + (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgo) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADD.W Dn,(An) */ void REGPARAM2 CPUFUNC(op_d150_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADD.W Dn,(An)+ */ void REGPARAM2 CPUFUNC(op_d158_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) += 2; {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADD.W Dn,-(An) */ void REGPARAM2 CPUFUNC(op_d160_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADD.W Dn,(d16,An) */ void REGPARAM2 CPUFUNC(op_d168_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADD.W Dn,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_d170_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* ADD.W Dn,(xxx).W */ void REGPARAM2 CPUFUNC(op_d178_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADD.W Dn,(xxx).L */ void REGPARAM2 CPUFUNC(op_d179_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_ce020_prefetch (2); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* ADDX.L Dn,Dn */ void REGPARAM2 CPUFUNC(op_d180_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = dst + src + (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgo) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADDX.L -(An),-(An) */ void REGPARAM2 CPUFUNC(op_d188_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) = dsta; { uae_u32 newv = dst + src + (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgo) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADD.L Dn,(An) */ void REGPARAM2 CPUFUNC(op_d190_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADD.L Dn,(An)+ */ void REGPARAM2 CPUFUNC(op_d198_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) += 4; {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADD.L Dn,-(An) */ void REGPARAM2 CPUFUNC(op_d1a0_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADD.L Dn,(d16,An) */ void REGPARAM2 CPUFUNC(op_d1a8_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADD.L Dn,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_d1b0_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* ADD.L Dn,(xxx).W */ void REGPARAM2 CPUFUNC(op_d1b8_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADD.L Dn,(xxx).L */ void REGPARAM2 CPUFUNC(op_d1b9_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_ce020_prefetch (2); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* ADDA.L Dn,An */ void REGPARAM2 CPUFUNC(op_d1c0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADDA.L An,An */ void REGPARAM2 CPUFUNC(op_d1c8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADDA.L (An),An */ void REGPARAM2 CPUFUNC(op_d1d0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADDA.L (An)+,An */ void REGPARAM2 CPUFUNC(op_d1d8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) += 4; { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADDA.L -(An),An */ void REGPARAM2 CPUFUNC(op_d1e0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ADDA.L (d16,An),An */ void REGPARAM2 CPUFUNC(op_d1e8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADDA.L (d8,An,Xn),An */ void REGPARAM2 CPUFUNC(op_d1f0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* ADDA.L (xxx).W,An */ void REGPARAM2 CPUFUNC(op_d1f8_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADDA.L (xxx).L,An */ void REGPARAM2 CPUFUNC(op_d1f9_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* ADDA.L (d16,PC),An */ void REGPARAM2 CPUFUNC(op_d1fa_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ADDA.L (d8,PC,Xn),An */ void REGPARAM2 CPUFUNC(op_d1fb_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* ADDA.L #.L,An */ void REGPARAM2 CPUFUNC(op_d1fc_22)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_long_ce020_prefetch (2); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* ASRQ.B #,Dn */ void REGPARAM2 CPUFUNC(op_e000_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; uae_u32 sign = (0x80 & val) >> 7; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 8) { val = 0xff & (uae_u32)-sign; SET_CFLG (sign); COPY_CARRY (); } else { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; val |= (0xff << (8 - cnt)) & (uae_u32)-sign; val &= 0xff; } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* LSRQ.B #,Dn */ void REGPARAM2 CPUFUNC(op_e008_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 8) { SET_CFLG ((cnt == 8) & (val >> 7)); COPY_CARRY (); val = 0; } else { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ROXRQ.B #,Dn */ void REGPARAM2 CPUFUNC(op_e010_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { cnt--; { uae_u32 carry; uae_u32 hival = (val << 1) | GET_XFLG (); hival <<= (7 - cnt); val >>= cnt; carry = val & 1; val >>= 1; val |= hival; SET_XFLG (carry); val &= 0xff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* RORQ.B #,Dn */ void REGPARAM2 CPUFUNC(op_e018_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { uae_u32 hival; cnt &= 7; hival = val << (8 - cnt); val >>= cnt; val |= hival; val &= 0xff; SET_CFLG ((val & 0x80) >> 7); } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ASR.B Dn,Dn */ void REGPARAM2 CPUFUNC(op_e020_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 cnt = m68k_dreg (regs, srcreg); { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; uae_u32 sign = (0x80 & val) >> 7; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 8) { val = 0xff & (uae_u32)-sign; SET_CFLG (sign); COPY_CARRY (); } else if (cnt > 0) { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; val |= (0xff << (8 - cnt)) & (uae_u32)-sign; val &= 0xff; } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* LSR.B Dn,Dn */ void REGPARAM2 CPUFUNC(op_e028_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 cnt = m68k_dreg (regs, srcreg); { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 8) { SET_CFLG ((cnt == 8) & (val >> 7)); COPY_CARRY (); val = 0; } else if (cnt > 0) { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ROXR.B Dn,Dn */ void REGPARAM2 CPUFUNC(op_e030_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 cnt = m68k_dreg (regs, srcreg); { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 36) cnt -= 36; if (cnt >= 18) cnt -= 18; if (cnt >= 9) cnt -= 9; if (cnt > 0) { cnt--; { uae_u32 carry; uae_u32 hival = (val << 1) | GET_XFLG (); hival <<= (7 - cnt); val >>= cnt; carry = val & 1; val >>= 1; val |= hival; SET_XFLG (carry); val &= 0xff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } #endif #ifdef PART_8 /* ROR.B Dn,Dn */ void REGPARAM2 CPUFUNC(op_e038_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 cnt = m68k_dreg (regs, srcreg); { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt > 0) { uae_u32 hival; cnt &= 7; hival = val << (8 - cnt); val >>= cnt; val |= hival; val &= 0xff; SET_CFLG ((val & 0x80) >> 7); } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ASRQ.W #,Dn */ void REGPARAM2 CPUFUNC(op_e040_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; uae_u32 sign = (0x8000 & val) >> 15; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 16) { val = 0xffff & (uae_u32)-sign; SET_CFLG (sign); COPY_CARRY (); } else { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; val |= (0xffff << (16 - cnt)) & (uae_u32)-sign; val &= 0xffff; } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* LSRQ.W #,Dn */ void REGPARAM2 CPUFUNC(op_e048_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 16) { SET_CFLG ((cnt == 16) & (val >> 15)); COPY_CARRY (); val = 0; } else { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ROXRQ.W #,Dn */ void REGPARAM2 CPUFUNC(op_e050_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { cnt--; { uae_u32 carry; uae_u32 hival = (val << 1) | GET_XFLG (); hival <<= (15 - cnt); val >>= cnt; carry = val & 1; val >>= 1; val |= hival; SET_XFLG (carry); val &= 0xffff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* RORQ.W #,Dn */ void REGPARAM2 CPUFUNC(op_e058_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { uae_u32 hival; cnt &= 15; hival = val << (16 - cnt); val >>= cnt; val |= hival; val &= 0xffff; SET_CFLG ((val & 0x8000) >> 15); } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ASR.W Dn,Dn */ void REGPARAM2 CPUFUNC(op_e060_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 cnt = m68k_dreg (regs, srcreg); { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; uae_u32 sign = (0x8000 & val) >> 15; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 16) { val = 0xffff & (uae_u32)-sign; SET_CFLG (sign); COPY_CARRY (); } else if (cnt > 0) { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; val |= (0xffff << (16 - cnt)) & (uae_u32)-sign; val &= 0xffff; } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* LSR.W Dn,Dn */ void REGPARAM2 CPUFUNC(op_e068_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 cnt = m68k_dreg (regs, srcreg); { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 16) { SET_CFLG ((cnt == 16) & (val >> 15)); COPY_CARRY (); val = 0; } else if (cnt > 0) { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ROXR.W Dn,Dn */ void REGPARAM2 CPUFUNC(op_e070_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 cnt = m68k_dreg (regs, srcreg); { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 34) cnt -= 34; if (cnt >= 17) cnt -= 17; if (cnt > 0) { cnt--; { uae_u32 carry; uae_u32 hival = (val << 1) | GET_XFLG (); hival <<= (15 - cnt); val >>= cnt; carry = val & 1; val >>= 1; val |= hival; SET_XFLG (carry); val &= 0xffff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ROR.W Dn,Dn */ void REGPARAM2 CPUFUNC(op_e078_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 cnt = m68k_dreg (regs, srcreg); { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt > 0) { uae_u32 hival; cnt &= 15; hival = val << (16 - cnt); val >>= cnt; val |= hival; val &= 0xffff; SET_CFLG ((val & 0x8000) >> 15); } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ASRQ.L #,Dn */ void REGPARAM2 CPUFUNC(op_e080_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; uae_u32 sign = (0x80000000 & val) >> 31; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 32) { val = 0xffffffff & (uae_u32)-sign; SET_CFLG (sign); COPY_CARRY (); } else { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; val |= (0xffffffff << (32 - cnt)) & (uae_u32)-sign; val &= 0xffffffff; } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* LSRQ.L #,Dn */ void REGPARAM2 CPUFUNC(op_e088_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 32) { SET_CFLG ((cnt == 32) & (val >> 31)); COPY_CARRY (); val = 0; } else { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ROXRQ.L #,Dn */ void REGPARAM2 CPUFUNC(op_e090_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { cnt--; { uae_u32 carry; uae_u32 hival = (val << 1) | GET_XFLG (); hival <<= (31 - cnt); val >>= cnt; carry = val & 1; val >>= 1; val |= hival; SET_XFLG (carry); val &= 0xffffffff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* RORQ.L #,Dn */ void REGPARAM2 CPUFUNC(op_e098_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { uae_u32 hival; cnt &= 31; hival = val << (32 - cnt); val >>= cnt; val |= hival; val &= 0xffffffff; SET_CFLG ((val & 0x80000000) >> 31); } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ASR.L Dn,Dn */ void REGPARAM2 CPUFUNC(op_e0a0_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 cnt = m68k_dreg (regs, srcreg); { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; uae_u32 sign = (0x80000000 & val) >> 31; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 32) { val = 0xffffffff & (uae_u32)-sign; SET_CFLG (sign); COPY_CARRY (); } else if (cnt > 0) { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; val |= (0xffffffff << (32 - cnt)) & (uae_u32)-sign; val &= 0xffffffff; } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* LSR.L Dn,Dn */ void REGPARAM2 CPUFUNC(op_e0a8_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 cnt = m68k_dreg (regs, srcreg); { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 32) { SET_CFLG ((cnt == 32) & (val >> 31)); COPY_CARRY (); val = 0; } else if (cnt > 0) { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ROXR.L Dn,Dn */ void REGPARAM2 CPUFUNC(op_e0b0_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 cnt = m68k_dreg (regs, srcreg); { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 33) cnt -= 33; if (cnt > 0) { cnt--; { uae_u32 carry; uae_u32 hival = (val << 1) | GET_XFLG (); hival <<= (31 - cnt); val >>= cnt; carry = val & 1; val >>= 1; val |= hival; SET_XFLG (carry); val &= 0xffffffff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ROR.L Dn,Dn */ void REGPARAM2 CPUFUNC(op_e0b8_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 cnt = m68k_dreg (regs, srcreg); { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt > 0) { uae_u32 hival; cnt &= 31; hival = val << (32 - cnt); val >>= cnt; val |= hival; val &= 0xffffffff; SET_CFLG ((val & 0x80000000) >> 31); } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ASRW.W (An) */ void REGPARAM2 CPUFUNC(op_e0d0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = x_get_word (dataa); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 cflg = val & 1; val = (val >> 1) | sign; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (cflg); COPY_CARRY (); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ASRW.W (An)+ */ void REGPARAM2 CPUFUNC(op_e0d8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = x_get_word (dataa); m68k_areg (regs, srcreg) += 2; { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 cflg = val & 1; val = (val >> 1) | sign; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (cflg); COPY_CARRY (); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ASRW.W -(An) */ void REGPARAM2 CPUFUNC(op_e0e0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; dataa = m68k_areg (regs, srcreg) - 2; { uae_s16 data = x_get_word (dataa); m68k_areg (regs, srcreg) = dataa; { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 cflg = val & 1; val = (val >> 1) | sign; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (cflg); COPY_CARRY (); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ASRW.W (d16,An) */ void REGPARAM2 CPUFUNC(op_e0e8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 data = x_get_word (dataa); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 cflg = val & 1; val = (val >> 1) | sign; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (cflg); COPY_CARRY (); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ASRW.W (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_e0f0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; m68k_incpc (2); { dataa = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s16 data = x_get_word (dataa); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 cflg = val & 1; val = (val >> 1) | sign; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (cflg); COPY_CARRY (); x_put_word (dataa, val); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* ASRW.W (xxx).W */ void REGPARAM2 CPUFUNC(op_e0f8_22)(uae_u32 opcode) { {{ uaecptr dataa = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 data = x_get_word (dataa); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 cflg = val & 1; val = (val >> 1) | sign; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (cflg); COPY_CARRY (); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ASRW.W (xxx).L */ void REGPARAM2 CPUFUNC(op_e0f9_22)(uae_u32 opcode) { {{ uaecptr dataa = get_long_ce020_prefetch (2); { uae_s16 data = x_get_word (dataa); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 cflg = val & 1; val = (val >> 1) | sign; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (cflg); COPY_CARRY (); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* ASLQ.B #,Dn */ void REGPARAM2 CPUFUNC(op_e100_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 8) { SET_VFLG (val != 0); SET_CFLG (cnt == 8 ? val & 1 : 0); COPY_CARRY (); val = 0; } else { uae_u32 mask = (0xff << (7 - cnt)) & 0xff; SET_VFLG ((val & mask) != mask && (val & mask) != 0); val <<= cnt - 1; SET_CFLG ((val & 0x80) >> 7); COPY_CARRY (); val <<= 1; val &= 0xff; } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* LSLQ.B #,Dn */ void REGPARAM2 CPUFUNC(op_e108_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 8) { SET_CFLG (cnt == 8 ? val & 1 : 0); COPY_CARRY (); val = 0; } else { val <<= (cnt - 1); SET_CFLG ((val & 0x80) >> 7); COPY_CARRY (); val <<= 1; val &= 0xff; } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ROXLQ.B #,Dn */ void REGPARAM2 CPUFUNC(op_e110_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { cnt--; { uae_u32 carry; uae_u32 loval = val >> (7 - cnt); carry = loval & 1; val = (((val << 1) | GET_XFLG ()) << cnt) | (loval >> 1); SET_XFLG (carry); val &= 0xff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ROLQ.B #,Dn */ void REGPARAM2 CPUFUNC(op_e118_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { uae_u32 loval; cnt &= 7; loval = val >> (8 - cnt); val <<= cnt; val |= loval; val &= 0xff; SET_CFLG (val & 1); } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ASL.B Dn,Dn */ void REGPARAM2 CPUFUNC(op_e120_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 cnt = m68k_dreg (regs, srcreg); { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 8) { SET_VFLG (val != 0); SET_CFLG (cnt == 8 ? val & 1 : 0); COPY_CARRY (); val = 0; } else if (cnt > 0) { uae_u32 mask = (0xff << (7 - cnt)) & 0xff; SET_VFLG ((val & mask) != mask && (val & mask) != 0); val <<= cnt - 1; SET_CFLG ((val & 0x80) >> 7); COPY_CARRY (); val <<= 1; val &= 0xff; } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* LSL.B Dn,Dn */ void REGPARAM2 CPUFUNC(op_e128_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 cnt = m68k_dreg (regs, srcreg); { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 8) { SET_CFLG (cnt == 8 ? val & 1 : 0); COPY_CARRY (); val = 0; } else if (cnt > 0) { val <<= (cnt - 1); SET_CFLG ((val & 0x80) >> 7); COPY_CARRY (); val <<= 1; val &= 0xff; } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ROXL.B Dn,Dn */ void REGPARAM2 CPUFUNC(op_e130_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 cnt = m68k_dreg (regs, srcreg); { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 36) cnt -= 36; if (cnt >= 18) cnt -= 18; if (cnt >= 9) cnt -= 9; if (cnt > 0) { cnt--; { uae_u32 carry; uae_u32 loval = val >> (7 - cnt); carry = loval & 1; val = (((val << 1) | GET_XFLG ()) << cnt) | (loval >> 1); SET_XFLG (carry); val &= 0xff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ROL.B Dn,Dn */ void REGPARAM2 CPUFUNC(op_e138_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 cnt = m68k_dreg (regs, srcreg); { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt > 0) { uae_u32 loval; cnt &= 7; loval = val >> (8 - cnt); val <<= cnt; val |= loval; val &= 0xff; SET_CFLG (val & 1); } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ASLQ.W #,Dn */ void REGPARAM2 CPUFUNC(op_e140_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 16) { SET_VFLG (val != 0); SET_CFLG (cnt == 16 ? val & 1 : 0); COPY_CARRY (); val = 0; } else { uae_u32 mask = (0xffff << (15 - cnt)) & 0xffff; SET_VFLG ((val & mask) != mask && (val & mask) != 0); val <<= cnt - 1; SET_CFLG ((val & 0x8000) >> 15); COPY_CARRY (); val <<= 1; val &= 0xffff; } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* LSLQ.W #,Dn */ void REGPARAM2 CPUFUNC(op_e148_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 16) { SET_CFLG (cnt == 16 ? val & 1 : 0); COPY_CARRY (); val = 0; } else { val <<= (cnt - 1); SET_CFLG ((val & 0x8000) >> 15); COPY_CARRY (); val <<= 1; val &= 0xffff; } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ROXLQ.W #,Dn */ void REGPARAM2 CPUFUNC(op_e150_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { cnt--; { uae_u32 carry; uae_u32 loval = val >> (15 - cnt); carry = loval & 1; val = (((val << 1) | GET_XFLG ()) << cnt) | (loval >> 1); SET_XFLG (carry); val &= 0xffff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ROLQ.W #,Dn */ void REGPARAM2 CPUFUNC(op_e158_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { uae_u32 loval; cnt &= 15; loval = val >> (16 - cnt); val <<= cnt; val |= loval; val &= 0xffff; SET_CFLG (val & 1); } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ASL.W Dn,Dn */ void REGPARAM2 CPUFUNC(op_e160_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 cnt = m68k_dreg (regs, srcreg); { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 16) { SET_VFLG (val != 0); SET_CFLG (cnt == 16 ? val & 1 : 0); COPY_CARRY (); val = 0; } else if (cnt > 0) { uae_u32 mask = (0xffff << (15 - cnt)) & 0xffff; SET_VFLG ((val & mask) != mask && (val & mask) != 0); val <<= cnt - 1; SET_CFLG ((val & 0x8000) >> 15); COPY_CARRY (); val <<= 1; val &= 0xffff; } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* LSL.W Dn,Dn */ void REGPARAM2 CPUFUNC(op_e168_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 cnt = m68k_dreg (regs, srcreg); { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 16) { SET_CFLG (cnt == 16 ? val & 1 : 0); COPY_CARRY (); val = 0; } else if (cnt > 0) { val <<= (cnt - 1); SET_CFLG ((val & 0x8000) >> 15); COPY_CARRY (); val <<= 1; val &= 0xffff; } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ROXL.W Dn,Dn */ void REGPARAM2 CPUFUNC(op_e170_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 cnt = m68k_dreg (regs, srcreg); { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 34) cnt -= 34; if (cnt >= 17) cnt -= 17; if (cnt > 0) { cnt--; { uae_u32 carry; uae_u32 loval = val >> (15 - cnt); carry = loval & 1; val = (((val << 1) | GET_XFLG ()) << cnt) | (loval >> 1); SET_XFLG (carry); val &= 0xffff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ROL.W Dn,Dn */ void REGPARAM2 CPUFUNC(op_e178_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 cnt = m68k_dreg (regs, srcreg); { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt > 0) { uae_u32 loval; cnt &= 15; loval = val >> (16 - cnt); val <<= cnt; val |= loval; val &= 0xffff; SET_CFLG (val & 1); } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ASLQ.L #,Dn */ void REGPARAM2 CPUFUNC(op_e180_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 32) { SET_VFLG (val != 0); SET_CFLG (cnt == 32 ? val & 1 : 0); COPY_CARRY (); val = 0; } else { uae_u32 mask = (0xffffffff << (31 - cnt)) & 0xffffffff; SET_VFLG ((val & mask) != mask && (val & mask) != 0); val <<= cnt - 1; SET_CFLG ((val & 0x80000000) >> 31); COPY_CARRY (); val <<= 1; val &= 0xffffffff; } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* LSLQ.L #,Dn */ void REGPARAM2 CPUFUNC(op_e188_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 32) { SET_CFLG (cnt == 32 ? val & 1 : 0); COPY_CARRY (); val = 0; } else { val <<= (cnt - 1); SET_CFLG ((val & 0x80000000) >> 31); COPY_CARRY (); val <<= 1; val &= 0xffffffff; } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ROXLQ.L #,Dn */ void REGPARAM2 CPUFUNC(op_e190_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { cnt--; { uae_u32 carry; uae_u32 loval = val >> (31 - cnt); carry = loval & 1; val = (((val << 1) | GET_XFLG ()) << cnt) | (loval >> 1); SET_XFLG (carry); val &= 0xffffffff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ROLQ.L #,Dn */ void REGPARAM2 CPUFUNC(op_e198_22)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { uae_u32 loval; cnt &= 31; loval = val >> (32 - cnt); val <<= cnt; val |= loval; val &= 0xffffffff; SET_CFLG (val & 1); } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ASL.L Dn,Dn */ void REGPARAM2 CPUFUNC(op_e1a0_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 cnt = m68k_dreg (regs, srcreg); { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 32) { SET_VFLG (val != 0); SET_CFLG (cnt == 32 ? val & 1 : 0); COPY_CARRY (); val = 0; } else if (cnt > 0) { uae_u32 mask = (0xffffffff << (31 - cnt)) & 0xffffffff; SET_VFLG ((val & mask) != mask && (val & mask) != 0); val <<= cnt - 1; SET_CFLG ((val & 0x80000000) >> 31); COPY_CARRY (); val <<= 1; val &= 0xffffffff; } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* LSL.L Dn,Dn */ void REGPARAM2 CPUFUNC(op_e1a8_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 cnt = m68k_dreg (regs, srcreg); { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 32) { SET_CFLG (cnt == 32 ? val & 1 : 0); COPY_CARRY (); val = 0; } else if (cnt > 0) { val <<= (cnt - 1); SET_CFLG ((val & 0x80000000) >> 31); COPY_CARRY (); val <<= 1; val &= 0xffffffff; } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ROXL.L Dn,Dn */ void REGPARAM2 CPUFUNC(op_e1b0_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 cnt = m68k_dreg (regs, srcreg); { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 33) cnt -= 33; if (cnt > 0) { cnt--; { uae_u32 carry; uae_u32 loval = val >> (31 - cnt); carry = loval & 1; val = (((val << 1) | GET_XFLG ()) << cnt) | (loval >> 1); SET_XFLG (carry); val &= 0xffffffff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ROL.L Dn,Dn */ void REGPARAM2 CPUFUNC(op_e1b8_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 cnt = m68k_dreg (regs, srcreg); { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt > 0) { uae_u32 loval; cnt &= 31; loval = val >> (32 - cnt); val <<= cnt; val |= loval; val &= 0xffffffff; SET_CFLG (val & 1); } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ASLW.W (An) */ void REGPARAM2 CPUFUNC(op_e1d0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = x_get_word (dataa); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 sign2; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); sign2 = 0x8000 & val; SET_CFLG (sign != 0); COPY_CARRY (); SET_VFLG (GET_VFLG () | (sign2 != sign)); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ASLW.W (An)+ */ void REGPARAM2 CPUFUNC(op_e1d8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = x_get_word (dataa); m68k_areg (regs, srcreg) += 2; { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 sign2; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); sign2 = 0x8000 & val; SET_CFLG (sign != 0); COPY_CARRY (); SET_VFLG (GET_VFLG () | (sign2 != sign)); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ASLW.W -(An) */ void REGPARAM2 CPUFUNC(op_e1e0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; dataa = m68k_areg (regs, srcreg) - 2; { uae_s16 data = x_get_word (dataa); m68k_areg (regs, srcreg) = dataa; { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 sign2; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); sign2 = 0x8000 & val; SET_CFLG (sign != 0); COPY_CARRY (); SET_VFLG (GET_VFLG () | (sign2 != sign)); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ASLW.W (d16,An) */ void REGPARAM2 CPUFUNC(op_e1e8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 data = x_get_word (dataa); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 sign2; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); sign2 = 0x8000 & val; SET_CFLG (sign != 0); COPY_CARRY (); SET_VFLG (GET_VFLG () | (sign2 != sign)); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ASLW.W (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_e1f0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; m68k_incpc (2); { dataa = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s16 data = x_get_word (dataa); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 sign2; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); sign2 = 0x8000 & val; SET_CFLG (sign != 0); COPY_CARRY (); SET_VFLG (GET_VFLG () | (sign2 != sign)); x_put_word (dataa, val); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* ASLW.W (xxx).W */ void REGPARAM2 CPUFUNC(op_e1f8_22)(uae_u32 opcode) { {{ uaecptr dataa = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 data = x_get_word (dataa); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 sign2; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); sign2 = 0x8000 & val; SET_CFLG (sign != 0); COPY_CARRY (); SET_VFLG (GET_VFLG () | (sign2 != sign)); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ASLW.W (xxx).L */ void REGPARAM2 CPUFUNC(op_e1f9_22)(uae_u32 opcode) { {{ uaecptr dataa = get_long_ce020_prefetch (2); { uae_s16 data = x_get_word (dataa); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 sign2; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); sign2 = 0x8000 & val; SET_CFLG (sign != 0); COPY_CARRY (); SET_VFLG (GET_VFLG () | (sign2 != sign)); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* LSRW.W (An) */ void REGPARAM2 CPUFUNC(op_e2d0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = x_get_word (dataa); { uae_u32 val = (uae_u16)data; uae_u32 carry = val & 1; val >>= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* LSRW.W (An)+ */ void REGPARAM2 CPUFUNC(op_e2d8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = x_get_word (dataa); m68k_areg (regs, srcreg) += 2; { uae_u32 val = (uae_u16)data; uae_u32 carry = val & 1; val >>= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* LSRW.W -(An) */ void REGPARAM2 CPUFUNC(op_e2e0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; dataa = m68k_areg (regs, srcreg) - 2; { uae_s16 data = x_get_word (dataa); m68k_areg (regs, srcreg) = dataa; { uae_u32 val = (uae_u16)data; uae_u32 carry = val & 1; val >>= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* LSRW.W (d16,An) */ void REGPARAM2 CPUFUNC(op_e2e8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 data = x_get_word (dataa); { uae_u32 val = (uae_u16)data; uae_u32 carry = val & 1; val >>= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* LSRW.W (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_e2f0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; m68k_incpc (2); { dataa = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s16 data = x_get_word (dataa); { uae_u32 val = (uae_u16)data; uae_u32 carry = val & 1; val >>= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); x_put_word (dataa, val); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* LSRW.W (xxx).W */ void REGPARAM2 CPUFUNC(op_e2f8_22)(uae_u32 opcode) { {{ uaecptr dataa = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 data = x_get_word (dataa); { uae_u32 val = (uae_u16)data; uae_u32 carry = val & 1; val >>= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* LSRW.W (xxx).L */ void REGPARAM2 CPUFUNC(op_e2f9_22)(uae_u32 opcode) { {{ uaecptr dataa = get_long_ce020_prefetch (2); { uae_s16 data = x_get_word (dataa); { uae_u32 val = (uae_u16)data; uae_u32 carry = val & 1; val >>= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* LSLW.W (An) */ void REGPARAM2 CPUFUNC(op_e3d0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* LSLW.W (An)+ */ void REGPARAM2 CPUFUNC(op_e3d8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = x_get_word (dataa); m68k_areg (regs, srcreg) += 2; { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* LSLW.W -(An) */ void REGPARAM2 CPUFUNC(op_e3e0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; dataa = m68k_areg (regs, srcreg) - 2; { uae_s16 data = x_get_word (dataa); m68k_areg (regs, srcreg) = dataa; { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* LSLW.W (d16,An) */ void REGPARAM2 CPUFUNC(op_e3e8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* LSLW.W (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_e3f0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; m68k_incpc (2); { dataa = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); x_put_word (dataa, val); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* LSLW.W (xxx).W */ void REGPARAM2 CPUFUNC(op_e3f8_22)(uae_u32 opcode) { {{ uaecptr dataa = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* LSLW.W (xxx).L */ void REGPARAM2 CPUFUNC(op_e3f9_22)(uae_u32 opcode) { {{ uaecptr dataa = get_long_ce020_prefetch (2); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* ROXRW.W (An) */ void REGPARAM2 CPUFUNC(op_e4d0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (GET_XFLG ()) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ROXRW.W (An)+ */ void REGPARAM2 CPUFUNC(op_e4d8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = x_get_word (dataa); m68k_areg (regs, srcreg) += 2; { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (GET_XFLG ()) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ROXRW.W -(An) */ void REGPARAM2 CPUFUNC(op_e4e0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; dataa = m68k_areg (regs, srcreg) - 2; { uae_s16 data = x_get_word (dataa); m68k_areg (regs, srcreg) = dataa; { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (GET_XFLG ()) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ROXRW.W (d16,An) */ void REGPARAM2 CPUFUNC(op_e4e8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (GET_XFLG ()) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ROXRW.W (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_e4f0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; m68k_incpc (2); { dataa = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (GET_XFLG ()) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); x_put_word (dataa, val); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* ROXRW.W (xxx).W */ void REGPARAM2 CPUFUNC(op_e4f8_22)(uae_u32 opcode) { {{ uaecptr dataa = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (GET_XFLG ()) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ROXRW.W (xxx).L */ void REGPARAM2 CPUFUNC(op_e4f9_22)(uae_u32 opcode) { {{ uaecptr dataa = get_long_ce020_prefetch (2); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (GET_XFLG ()) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* ROXLW.W (An) */ void REGPARAM2 CPUFUNC(op_e5d0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (GET_XFLG ()) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ROXLW.W (An)+ */ void REGPARAM2 CPUFUNC(op_e5d8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = x_get_word (dataa); m68k_areg (regs, srcreg) += 2; { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (GET_XFLG ()) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ROXLW.W -(An) */ void REGPARAM2 CPUFUNC(op_e5e0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; dataa = m68k_areg (regs, srcreg) - 2; { uae_s16 data = x_get_word (dataa); m68k_areg (regs, srcreg) = dataa; { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (GET_XFLG ()) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ROXLW.W (d16,An) */ void REGPARAM2 CPUFUNC(op_e5e8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (GET_XFLG ()) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ROXLW.W (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_e5f0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; m68k_incpc (2); { dataa = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (GET_XFLG ()) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); x_put_word (dataa, val); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* ROXLW.W (xxx).W */ void REGPARAM2 CPUFUNC(op_e5f8_22)(uae_u32 opcode) { {{ uaecptr dataa = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (GET_XFLG ()) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ROXLW.W (xxx).L */ void REGPARAM2 CPUFUNC(op_e5f9_22)(uae_u32 opcode) { {{ uaecptr dataa = get_long_ce020_prefetch (2); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (GET_XFLG ()) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* RORW.W (An) */ void REGPARAM2 CPUFUNC(op_e6d0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (carry) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* RORW.W (An)+ */ void REGPARAM2 CPUFUNC(op_e6d8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = x_get_word (dataa); m68k_areg (regs, srcreg) += 2; { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (carry) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* RORW.W -(An) */ void REGPARAM2 CPUFUNC(op_e6e0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; dataa = m68k_areg (regs, srcreg) - 2; { uae_s16 data = x_get_word (dataa); m68k_areg (regs, srcreg) = dataa; { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (carry) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* RORW.W (d16,An) */ void REGPARAM2 CPUFUNC(op_e6e8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (carry) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* RORW.W (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_e6f0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; m68k_incpc (2); { dataa = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (carry) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); x_put_word (dataa, val); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* RORW.W (xxx).W */ void REGPARAM2 CPUFUNC(op_e6f8_22)(uae_u32 opcode) { {{ uaecptr dataa = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (carry) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* RORW.W (xxx).L */ void REGPARAM2 CPUFUNC(op_e6f9_22)(uae_u32 opcode) { {{ uaecptr dataa = get_long_ce020_prefetch (2); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (carry) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* ROLW.W (An) */ void REGPARAM2 CPUFUNC(op_e7d0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (carry) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ROLW.W (An)+ */ void REGPARAM2 CPUFUNC(op_e7d8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = x_get_word (dataa); m68k_areg (regs, srcreg) += 2; { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (carry) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ROLW.W -(An) */ void REGPARAM2 CPUFUNC(op_e7e0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; dataa = m68k_areg (regs, srcreg) - 2; { uae_s16 data = x_get_word (dataa); m68k_areg (regs, srcreg) = dataa; { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (carry) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ROLW.W (d16,An) */ void REGPARAM2 CPUFUNC(op_e7e8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (carry) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ROLW.W (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_e7f0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; m68k_incpc (2); { dataa = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (carry) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); x_put_word (dataa, val); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* ROLW.W (xxx).W */ void REGPARAM2 CPUFUNC(op_e7f8_22)(uae_u32 opcode) { {{ uaecptr dataa = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (carry) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* ROLW.W (xxx).L */ void REGPARAM2 CPUFUNC(op_e7f9_22)(uae_u32 opcode) { {{ uaecptr dataa = get_long_ce020_prefetch (2); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (carry) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); x_put_word (dataa, val); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } /* BFTST.L #.W,Dn */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_e8c0_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); {{ uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp = m68k_dreg(regs, dstreg); offset &= 0x1f; tmp = (tmp << offset) | (tmp >> (32 - offset)); bdata[0] = tmp & ((1 << (32 - width)) - 1); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } #endif /* BFTST.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_e8d0_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } #endif /* BFTST.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_e8e8_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } #endif /* BFTST.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_e8f0_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* BFTST.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_e8f8_22)(uae_u32 opcode) { {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } #endif /* BFTST.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_e8f9_22)(uae_u32 opcode) { {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } #endif /* BFTST.L #.W,(d16,PC) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_e8fa_22)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } #endif /* BFTST.L #.W,(d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_e8fb_22)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr tmppc; uaecptr dsta; m68k_incpc (4); { tmppc = m68k_getpc (); dsta = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* BFEXTU.L #.W,Dn */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_e9c0_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); {{ uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp = m68k_dreg(regs, dstreg); offset &= 0x1f; tmp = (tmp << offset) | (tmp >> (32 - offset)); bdata[0] = tmp & ((1 << (32 - width)) - 1); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } #endif /* BFEXTU.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_e9d0_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } #endif /* BFEXTU.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_e9e8_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } #endif /* BFEXTU.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_e9f0_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* BFEXTU.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_e9f8_22)(uae_u32 opcode) { {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } #endif /* BFEXTU.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_e9f9_22)(uae_u32 opcode) { {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } #endif /* BFEXTU.L #.W,(d16,PC) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_e9fa_22)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } #endif /* BFEXTU.L #.W,(d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_e9fb_22)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr tmppc; uaecptr dsta; m68k_incpc (4); { tmppc = m68k_getpc (); dsta = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* BFCHG.L #.W,Dn */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_eac0_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); {{ uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp = m68k_dreg(regs, dstreg); offset &= 0x1f; tmp = (tmp << offset) | (tmp >> (32 - offset)); bdata[0] = tmp & ((1 << (32 - width)) - 1); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = tmp ^ (0xffffffffu >> (32 - width)); tmp = bdata[0] | (tmp << (32 - width)); m68k_dreg(regs, dstreg) = (tmp >> offset) | (tmp << (32 - offset)); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } #endif /* BFCHG.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_ead0_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = tmp ^ (0xffffffffu >> (32 - width)); x_put_bitfield(dsta, bdata, tmp, offset, width); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } #endif /* BFCHG.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_eae8_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = tmp ^ (0xffffffffu >> (32 - width)); x_put_bitfield(dsta, bdata, tmp, offset, width); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } #endif /* BFCHG.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_eaf0_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = tmp ^ (0xffffffffu >> (32 - width)); x_put_bitfield(dsta, bdata, tmp, offset, width); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* BFCHG.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_eaf8_22)(uae_u32 opcode) { {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = tmp ^ (0xffffffffu >> (32 - width)); x_put_bitfield(dsta, bdata, tmp, offset, width); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } #endif /* BFCHG.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_eaf9_22)(uae_u32 opcode) { {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = tmp ^ (0xffffffffu >> (32 - width)); x_put_bitfield(dsta, bdata, tmp, offset, width); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } #endif /* BFEXTS.L #.W,Dn */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_ebc0_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); {{ uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp = m68k_dreg(regs, dstreg); offset &= 0x1f; tmp = (tmp << offset) | (tmp >> (32 - offset)); bdata[0] = tmp & ((1 << (32 - width)) - 1); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp = (uae_s32)tmp >> (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } #endif /* BFEXTS.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_ebd0_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp = (uae_s32)tmp >> (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } #endif /* BFEXTS.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_ebe8_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp = (uae_s32)tmp >> (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } #endif /* BFEXTS.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_ebf0_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp = (uae_s32)tmp >> (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* BFEXTS.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_ebf8_22)(uae_u32 opcode) { {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp = (uae_s32)tmp >> (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } #endif /* BFEXTS.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_ebf9_22)(uae_u32 opcode) { {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp = (uae_s32)tmp >> (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } #endif /* BFEXTS.L #.W,(d16,PC) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_ebfa_22)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp = (uae_s32)tmp >> (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } #endif /* BFEXTS.L #.W,(d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_ebfb_22)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr tmppc; uaecptr dsta; m68k_incpc (4); { tmppc = m68k_getpc (); dsta = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp = (uae_s32)tmp >> (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* BFCLR.L #.W,Dn */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_ecc0_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); {{ uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp = m68k_dreg(regs, dstreg); offset &= 0x1f; tmp = (tmp << offset) | (tmp >> (32 - offset)); bdata[0] = tmp & ((1 << (32 - width)) - 1); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = 0; tmp = bdata[0] | (tmp << (32 - width)); m68k_dreg(regs, dstreg) = (tmp >> offset) | (tmp << (32 - offset)); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } #endif /* BFCLR.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_ecd0_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = 0; x_put_bitfield(dsta, bdata, tmp, offset, width); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } #endif /* BFCLR.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_ece8_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = 0; x_put_bitfield(dsta, bdata, tmp, offset, width); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } #endif /* BFCLR.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_ecf0_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = 0; x_put_bitfield(dsta, bdata, tmp, offset, width); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* BFCLR.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_ecf8_22)(uae_u32 opcode) { {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = 0; x_put_bitfield(dsta, bdata, tmp, offset, width); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } #endif /* BFCLR.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_ecf9_22)(uae_u32 opcode) { {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = 0; x_put_bitfield(dsta, bdata, tmp, offset, width); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } #endif /* BFFFO.L #.W,Dn */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_edc0_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); {{ uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp = m68k_dreg(regs, dstreg); offset &= 0x1f; tmp = (tmp << offset) | (tmp >> (32 - offset)); bdata[0] = tmp & ((1 << (32 - width)) - 1); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); { uae_u32 mask = 1 << (width - 1); while (mask) { if (tmp & mask) break; mask >>= 1; offset++; }} m68k_dreg (regs, (extra >> 12) & 7) = offset; }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } #endif /* BFFFO.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_edd0_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); { uae_u32 mask = 1 << (width - 1); while (mask) { if (tmp & mask) break; mask >>= 1; offset++; }} m68k_dreg (regs, (extra >> 12) & 7) = offset; }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } #endif /* BFFFO.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_ede8_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); { uae_u32 mask = 1 << (width - 1); while (mask) { if (tmp & mask) break; mask >>= 1; offset++; }} m68k_dreg (regs, (extra >> 12) & 7) = offset; }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } #endif /* BFFFO.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_edf0_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); { uae_u32 mask = 1 << (width - 1); while (mask) { if (tmp & mask) break; mask >>= 1; offset++; }} m68k_dreg (regs, (extra >> 12) & 7) = offset; }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* BFFFO.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_edf8_22)(uae_u32 opcode) { {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); { uae_u32 mask = 1 << (width - 1); while (mask) { if (tmp & mask) break; mask >>= 1; offset++; }} m68k_dreg (regs, (extra >> 12) & 7) = offset; }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } #endif /* BFFFO.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_edf9_22)(uae_u32 opcode) { {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); { uae_u32 mask = 1 << (width - 1); while (mask) { if (tmp & mask) break; mask >>= 1; offset++; }} m68k_dreg (regs, (extra >> 12) & 7) = offset; }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } #endif /* BFFFO.L #.W,(d16,PC) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_edfa_22)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); { uae_u32 mask = 1 << (width - 1); while (mask) { if (tmp & mask) break; mask >>= 1; offset++; }} m68k_dreg (regs, (extra >> 12) & 7) = offset; }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } #endif /* BFFFO.L #.W,(d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_edfb_22)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr tmppc; uaecptr dsta; m68k_incpc (4); { tmppc = m68k_getpc (); dsta = x_get_disp_ea_ce020 (tmppc, next_iword_020ce ()); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); { uae_u32 mask = 1 << (width - 1); while (mask) { if (tmp & mask) break; mask >>= 1; offset++; }} m68k_dreg (regs, (extra >> 12) & 7) = offset; }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* BFSET.L #.W,Dn */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_eec0_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); {{ uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp = m68k_dreg(regs, dstreg); offset &= 0x1f; tmp = (tmp << offset) | (tmp >> (32 - offset)); bdata[0] = tmp & ((1 << (32 - width)) - 1); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = 0xffffffffu >> (32 - width); tmp = bdata[0] | (tmp << (32 - width)); m68k_dreg(regs, dstreg) = (tmp >> offset) | (tmp << (32 - offset)); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } #endif /* BFSET.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_eed0_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = 0xffffffffu >> (32 - width); x_put_bitfield(dsta, bdata, tmp, offset, width); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } #endif /* BFSET.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_eee8_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = 0xffffffffu >> (32 - width); x_put_bitfield(dsta, bdata, tmp, offset, width); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } #endif /* BFSET.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_eef0_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = 0xffffffffu >> (32 - width); x_put_bitfield(dsta, bdata, tmp, offset, width); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* BFSET.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_eef8_22)(uae_u32 opcode) { {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = 0xffffffffu >> (32 - width); x_put_bitfield(dsta, bdata, tmp, offset, width); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } #endif /* BFSET.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_eef9_22)(uae_u32 opcode) { {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = 0xffffffffu >> (32 - width); x_put_bitfield(dsta, bdata, tmp, offset, width); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } #endif /* BFINS.L #.W,Dn */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_efc0_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); {{ uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp = m68k_dreg(regs, dstreg); offset &= 0x1f; tmp = (tmp << offset) | (tmp >> (32 - offset)); bdata[0] = tmp & ((1 << (32 - width)) - 1); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = m68k_dreg (regs, (extra >> 12) & 7); tmp = tmp & (0xffffffffu >> (32 - width)); SET_NFLG (tmp & (1 << (width - 1)) ? 1 : 0); SET_ZFLG (tmp == 0); tmp = bdata[0] | (tmp << (32 - width)); m68k_dreg(regs, dstreg) = (tmp >> offset) | (tmp << (32 - offset)); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } #endif /* BFINS.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_efd0_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = m68k_dreg (regs, (extra >> 12) & 7); tmp = tmp & (0xffffffffu >> (32 - width)); SET_NFLG (tmp & (1 << (width - 1)) ? 1 : 0); SET_ZFLG (tmp == 0); x_put_bitfield(dsta, bdata, tmp, offset, width); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } #endif /* BFINS.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_efe8_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = m68k_dreg (regs, (extra >> 12) & 7); tmp = tmp & (0xffffffffu >> (32 - width)); SET_NFLG (tmp & (1 << (width - 1)) ? 1 : 0); SET_ZFLG (tmp == 0); x_put_bitfield(dsta, bdata, tmp, offset, width); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } #endif /* BFINS.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_eff0_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = x_get_disp_ea_ce020 (m68k_areg (regs, dstreg), next_iword_020ce ()); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = m68k_dreg (regs, (extra >> 12) & 7); tmp = tmp & (0xffffffffu >> (32 - width)); SET_NFLG (tmp & (1 << (width - 1)) ? 1 : 0); SET_ZFLG (tmp == 0); x_put_bitfield(dsta, bdata, tmp, offset, width); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* BFINS.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_eff8_22)(uae_u32 opcode) { {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = m68k_dreg (regs, (extra >> 12) & 7); tmp = tmp & (0xffffffffu >> (32 - width)); SET_NFLG (tmp & (1 << (width - 1)) ? 1 : 0); SET_ZFLG (tmp == 0); x_put_bitfield(dsta, bdata, tmp, offset, width); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } #endif /* BFINS.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_eff9_22)(uae_u32 opcode) { {{ uae_s16 extra = get_word_ce020_prefetch (2); { uaecptr dsta = get_long_ce020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = m68k_dreg (regs, (extra >> 12) & 7); tmp = tmp & (0xffffffffu >> (32 - width)); SET_NFLG (tmp & (1 << (width - 1)) ? 1 : 0); SET_ZFLG (tmp == 0); x_put_bitfield(dsta, bdata, tmp, offset, width); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (8); return; } #endif /* MMUOP030.L Dn,#.W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f000_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel10773; } { uaecptr pc = m68k_getpc (); uae_u16 extra = x_get_word (pc + 2); m68k_incpc (4); uae_u16 extraa = 0; mmu_op30 (pc, opcode, extra, extraa); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel10773: ; return; } #endif /* MMUOP030.L An,#.W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f008_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel10774; } { uaecptr pc = m68k_getpc (); uae_u16 extra = x_get_word (pc + 2); m68k_incpc (4); uae_u16 extraa = 0; mmu_op30 (pc, opcode, extra, extraa); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel10774: ; return; } #endif /* MMUOP030.L (An),#.W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f010_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel10775; } { uaecptr pc = m68k_getpc (); uae_u16 extra = x_get_word (pc + 2); m68k_incpc (4); { uaecptr extraa = m68k_areg (regs, srcreg); mmu_op30 (pc, opcode, extra, extraa); }}} regs.ce020memcycles += 2 * cpucycleunit; endlabel10775: ; return; } #endif /* MMUOP030.L (An)+,#.W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f018_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel10776; } { uaecptr pc = m68k_getpc (); uae_u16 extra = x_get_word (pc + 2); m68k_incpc (4); { uaecptr extraa = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += 4; mmu_op30 (pc, opcode, extra, extraa); }}} regs.ce020memcycles += 2 * cpucycleunit; endlabel10776: ; return; } #endif /* MMUOP030.L -(An),#.W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f020_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel10777; } { uaecptr pc = m68k_getpc (); uae_u16 extra = x_get_word (pc + 2); m68k_incpc (4); { uaecptr extraa; extraa = m68k_areg (regs, srcreg) - 4; m68k_areg (regs, srcreg) = extraa; mmu_op30 (pc, opcode, extra, extraa); }}} regs.ce020memcycles += 2 * cpucycleunit; endlabel10777: ; return; } #endif /* MMUOP030.L (d16,An),#.W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f028_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel10778; } { uaecptr pc = m68k_getpc (); uae_u16 extra = x_get_word (pc + 2); m68k_incpc (4); { uaecptr extraa = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (0); m68k_incpc (2); mmu_op30 (pc, opcode, extra, extraa); }}} regs.ce020memcycles += 2 * cpucycleunit; endlabel10778: ; return; } #endif /* MMUOP030.L (d8,An,Xn),#.W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f030_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel10779; } { uaecptr pc = m68k_getpc (); uae_u16 extra = x_get_word (pc + 2); m68k_incpc (4); { uaecptr extraa; { extraa = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); mmu_op30 (pc, opcode, extra, extraa); }}}} regs.ce020memcycles += 2 * cpucycleunit; endlabel10779: ; return; } #endif /* MMUOP030.L (xxx).W,#.W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f038_22)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel10780; } { uaecptr pc = m68k_getpc (); uae_u16 extra = x_get_word (pc + 2); m68k_incpc (4); { uaecptr extraa = (uae_s32)(uae_s16)get_word_ce020_prefetch (0); m68k_incpc (2); mmu_op30 (pc, opcode, extra, extraa); }}} regs.ce020memcycles += 2 * cpucycleunit; endlabel10780: ; return; } #endif /* MMUOP030.L (xxx).L,#.W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f039_22)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel10781; } { uaecptr pc = m68k_getpc (); uae_u16 extra = x_get_word (pc + 2); m68k_incpc (4); { uaecptr extraa = get_long_ce020_prefetch (0); m68k_incpc (4); mmu_op30 (pc, opcode, extra, extraa); }}} regs.ce020memcycles += 2 * cpucycleunit; endlabel10781: ; return; } #endif /* FPP.L #.W,Dn */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f200_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { #ifdef FPUEMU { uae_s16 extra = get_word_ce020_prefetch (2); m68k_incpc (4); fpuop_arithmetic(opcode, extra); } #endif } regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* FPP.L #.W,An */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f208_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { #ifdef FPUEMU { uae_s16 extra = get_word_ce020_prefetch (2); m68k_incpc (4); fpuop_arithmetic(opcode, extra); } #endif } regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* FPP.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f210_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { #ifdef FPUEMU { uae_s16 extra = get_word_ce020_prefetch (2); m68k_incpc (4); fpuop_arithmetic(opcode, extra); } #endif } regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* FPP.L #.W,(An)+ */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f218_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { #ifdef FPUEMU { uae_s16 extra = get_word_ce020_prefetch (2); m68k_incpc (4); fpuop_arithmetic(opcode, extra); } #endif } regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* FPP.L #.W,-(An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f220_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { #ifdef FPUEMU { uae_s16 extra = get_word_ce020_prefetch (2); m68k_incpc (4); fpuop_arithmetic(opcode, extra); } #endif } regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* FPP.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f228_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { #ifdef FPUEMU { uae_s16 extra = get_word_ce020_prefetch (2); m68k_incpc (4); fpuop_arithmetic(opcode, extra); } #endif } regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* FPP.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f230_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { #ifdef FPUEMU { uae_s16 extra = get_word_ce020_prefetch (2); m68k_incpc (4); fpuop_arithmetic(opcode, extra); } #endif } regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* FPP.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f238_22)(uae_u32 opcode) { { #ifdef FPUEMU { uae_s16 extra = get_word_ce020_prefetch (2); m68k_incpc (4); fpuop_arithmetic(opcode, extra); } #endif } regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* FPP.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f239_22)(uae_u32 opcode) { { #ifdef FPUEMU { uae_s16 extra = get_word_ce020_prefetch (2); m68k_incpc (4); fpuop_arithmetic(opcode, extra); } #endif } regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* FPP.L #.W,(d16,PC) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f23a_22)(uae_u32 opcode) { uae_u32 dstreg = 2; { #ifdef FPUEMU { uae_s16 extra = get_word_ce020_prefetch (2); m68k_incpc (4); fpuop_arithmetic(opcode, extra); } #endif } regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* FPP.L #.W,(d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f23b_22)(uae_u32 opcode) { uae_u32 dstreg = 3; { #ifdef FPUEMU { uae_s16 extra = get_word_ce020_prefetch (2); m68k_incpc (4); fpuop_arithmetic(opcode, extra); } #endif } regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* FPP.L #.W,#.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f23c_22)(uae_u32 opcode) { { #ifdef FPUEMU { uae_s16 extra = get_word_ce020_prefetch (2); m68k_incpc (4); fpuop_arithmetic(opcode, extra); } #endif } regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* FScc.L #.W,Dn */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f240_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { #ifdef FPUEMU { uae_s16 extra = get_word_ce020_prefetch (2); m68k_incpc (4); fpuop_scc (opcode, extra); } #endif } regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* FDBcc.L #.W,Dn */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f248_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { #ifdef FPUEMU { uae_s16 extra = get_word_ce020_prefetch (2); m68k_incpc (4); fpuop_dbcc (opcode, extra); } #endif } regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* FScc.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f250_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { #ifdef FPUEMU { uae_s16 extra = get_word_ce020_prefetch (2); m68k_incpc (4); fpuop_scc (opcode, extra); } #endif } regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* FScc.L #.W,(An)+ */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f258_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { #ifdef FPUEMU { uae_s16 extra = get_word_ce020_prefetch (2); m68k_incpc (4); fpuop_scc (opcode, extra); } #endif } regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* FScc.L #.W,-(An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f260_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { #ifdef FPUEMU { uae_s16 extra = get_word_ce020_prefetch (2); m68k_incpc (4); fpuop_scc (opcode, extra); } #endif } regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* FScc.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f268_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { #ifdef FPUEMU { uae_s16 extra = get_word_ce020_prefetch (2); m68k_incpc (4); fpuop_scc (opcode, extra); } #endif } regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* FScc.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f270_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { #ifdef FPUEMU { uae_s16 extra = get_word_ce020_prefetch (2); m68k_incpc (4); fpuop_scc (opcode, extra); } #endif } regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* FScc.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f278_22)(uae_u32 opcode) { { #ifdef FPUEMU { uae_s16 extra = get_word_ce020_prefetch (2); m68k_incpc (4); fpuop_scc (opcode, extra); } #endif } regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* FScc.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f279_22)(uae_u32 opcode) { { #ifdef FPUEMU { uae_s16 extra = get_word_ce020_prefetch (2); m68k_incpc (4); fpuop_scc (opcode, extra); } #endif } regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* FTRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f27a_22)(uae_u32 opcode) { { #ifdef FPUEMU uaecptr oldpc = m68k_getpc (); uae_u16 extra = get_word_ce020_prefetch (2); { uae_s16 dummy = get_word_ce020_prefetch (4); m68k_incpc (6); fpuop_trapcc (opcode, oldpc, extra); } #endif } regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* FTRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f27b_22)(uae_u32 opcode) { { #ifdef FPUEMU uaecptr oldpc = m68k_getpc (); uae_u16 extra = get_word_ce020_prefetch (2); { uae_s32 dummy = get_long_ce020_prefetch (4); m68k_incpc (8); fpuop_trapcc (opcode, oldpc, extra); } #endif } regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* FTRAPcc.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f27c_22)(uae_u32 opcode) { { #ifdef FPUEMU uaecptr oldpc = m68k_getpc (); uae_u16 extra = get_word_ce020_prefetch (2); m68k_incpc (4); fpuop_trapcc (opcode, oldpc, extra); #endif } regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* FBccQ.L #,#.W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f280_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 63); { #ifdef FPUEMU m68k_incpc (2); { uaecptr pc = m68k_getpc (); { uae_s16 extra = get_word_ce020_prefetch (0); m68k_incpc (2); fpuop_bcc (opcode, pc,extra); }} #endif } regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* FBccQ.L #,#.L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f2c0_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 63); { #ifdef FPUEMU m68k_incpc (2); { uaecptr pc = m68k_getpc (); { uae_s32 extra = get_long_ce020_prefetch (0); m68k_incpc (4); fpuop_bcc (opcode, pc,extra); }} #endif } regs.ce020memcycles += 2 * cpucycleunit; return; } #endif /* FSAVE.L (An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f310_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel10808; } { #ifdef FPUEMU m68k_incpc (2); fpuop_save (opcode); #endif }} regs.ce020memcycles += 2 * cpucycleunit; endlabel10808: ; return; } #endif /* FSAVE.L -(An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f320_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel10809; } { #ifdef FPUEMU m68k_incpc (2); fpuop_save (opcode); #endif }} regs.ce020memcycles += 2 * cpucycleunit; endlabel10809: ; return; } #endif /* FSAVE.L (d16,An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f328_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel10810; } { #ifdef FPUEMU m68k_incpc (2); fpuop_save (opcode); #endif }} regs.ce020memcycles += 2 * cpucycleunit; endlabel10810: ; return; } #endif /* FSAVE.L (d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f330_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel10811; } { #ifdef FPUEMU m68k_incpc (2); fpuop_save (opcode); #endif }} regs.ce020memcycles += 2 * cpucycleunit; endlabel10811: ; return; } #endif /* FSAVE.L (xxx).W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f338_22)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel10812; } { #ifdef FPUEMU m68k_incpc (2); fpuop_save (opcode); #endif }} regs.ce020memcycles += 2 * cpucycleunit; endlabel10812: ; return; } #endif /* FSAVE.L (xxx).L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f339_22)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel10813; } { #ifdef FPUEMU m68k_incpc (2); fpuop_save (opcode); #endif }} regs.ce020memcycles += 2 * cpucycleunit; endlabel10813: ; return; } #endif /* FRESTORE.L (An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f350_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel10814; } { #ifdef FPUEMU m68k_incpc (2); fpuop_restore (opcode); #endif }} regs.ce020memcycles += 2 * cpucycleunit; endlabel10814: ; return; } #endif /* FRESTORE.L (An)+ */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f358_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel10815; } { #ifdef FPUEMU m68k_incpc (2); fpuop_restore (opcode); #endif }} regs.ce020memcycles += 2 * cpucycleunit; endlabel10815: ; return; } #endif /* FRESTORE.L (d16,An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f368_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel10816; } { #ifdef FPUEMU m68k_incpc (2); fpuop_restore (opcode); #endif }} regs.ce020memcycles += 2 * cpucycleunit; endlabel10816: ; return; } #endif /* FRESTORE.L (d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f370_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel10817; } { #ifdef FPUEMU m68k_incpc (2); fpuop_restore (opcode); #endif }} regs.ce020memcycles += 2 * cpucycleunit; endlabel10817: ; return; } #endif /* FRESTORE.L (xxx).W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f378_22)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel10818; } { #ifdef FPUEMU m68k_incpc (2); fpuop_restore (opcode); #endif }} regs.ce020memcycles += 2 * cpucycleunit; endlabel10818: ; return; } #endif /* FRESTORE.L (xxx).L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f379_22)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel10819; } { #ifdef FPUEMU m68k_incpc (2); fpuop_restore (opcode); #endif }} regs.ce020memcycles += 2 * cpucycleunit; endlabel10819: ; return; } #endif /* FRESTORE.L (d16,PC) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f37a_22)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel10820; } { #ifdef FPUEMU m68k_incpc (2); fpuop_restore (opcode); #endif }} regs.ce020memcycles += 2 * cpucycleunit; endlabel10820: ; return; } #endif /* FRESTORE.L (d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f37b_22)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel10821; } { #ifdef FPUEMU m68k_incpc (2); fpuop_restore (opcode); #endif }} regs.ce020memcycles += 2 * cpucycleunit; endlabel10821: ; return; } #endif /* CINVLQ.L #,An */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f408_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 6) & 3); uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel10822; } { if (opcode & 0x80) flush_icache(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); endlabel10822: ; return; } #endif /* CINVPQ.L #,An */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f410_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 6) & 3); uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel10823; } { if (opcode & 0x80) flush_icache(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); endlabel10823: ; return; } #endif /* CINVAQ.L # */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f418_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 6) & 3); {if (!regs.s) { Exception (8); goto endlabel10824; } { if (opcode & 0x80) flush_icache(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); endlabel10824: ; return; } #endif /* CINVAQ.L # */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f419_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 6) & 3); {if (!regs.s) { Exception (8); goto endlabel10825; } { if (opcode & 0x80) flush_icache(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); endlabel10825: ; return; } #endif /* CINVAQ.L # */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f41a_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 6) & 3); {if (!regs.s) { Exception (8); goto endlabel10826; } { if (opcode & 0x80) flush_icache(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); endlabel10826: ; return; } #endif /* CINVAQ.L # */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f41b_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 6) & 3); {if (!regs.s) { Exception (8); goto endlabel10827; } { if (opcode & 0x80) flush_icache(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); endlabel10827: ; return; } #endif /* CINVAQ.L # */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f41c_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 6) & 3); {if (!regs.s) { Exception (8); goto endlabel10828; } { if (opcode & 0x80) flush_icache(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); endlabel10828: ; return; } #endif /* CINVAQ.L # */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f41d_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 6) & 3); {if (!regs.s) { Exception (8); goto endlabel10829; } { if (opcode & 0x80) flush_icache(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); endlabel10829: ; return; } #endif /* CINVAQ.L # */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f41e_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 6) & 3); {if (!regs.s) { Exception (8); goto endlabel10830; } { if (opcode & 0x80) flush_icache(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); endlabel10830: ; return; } #endif /* CINVAQ.L # */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f41f_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 6) & 3); {if (!regs.s) { Exception (8); goto endlabel10831; } { if (opcode & 0x80) flush_icache(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); endlabel10831: ; return; } #endif /* CPUSHLQ.L #,An */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f428_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 6) & 3); uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel10832; } { if (opcode & 0x80) flush_icache(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); endlabel10832: ; return; } #endif /* CPUSHPQ.L #,An */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f430_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 6) & 3); uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel10833; } { if (opcode & 0x80) flush_icache(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); endlabel10833: ; return; } #endif /* CPUSHAQ.L # */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f438_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 6) & 3); {if (!regs.s) { Exception (8); goto endlabel10834; } { if (opcode & 0x80) flush_icache(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); endlabel10834: ; return; } #endif /* CPUSHAQ.L # */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f439_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 6) & 3); {if (!regs.s) { Exception (8); goto endlabel10835; } { if (opcode & 0x80) flush_icache(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); endlabel10835: ; return; } #endif /* CPUSHAQ.L # */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f43a_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 6) & 3); {if (!regs.s) { Exception (8); goto endlabel10836; } { if (opcode & 0x80) flush_icache(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); endlabel10836: ; return; } #endif /* CPUSHAQ.L # */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f43b_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 6) & 3); {if (!regs.s) { Exception (8); goto endlabel10837; } { if (opcode & 0x80) flush_icache(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); endlabel10837: ; return; } #endif /* CPUSHAQ.L # */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f43c_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 6) & 3); {if (!regs.s) { Exception (8); goto endlabel10838; } { if (opcode & 0x80) flush_icache(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); endlabel10838: ; return; } #endif /* CPUSHAQ.L # */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f43d_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 6) & 3); {if (!regs.s) { Exception (8); goto endlabel10839; } { if (opcode & 0x80) flush_icache(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); endlabel10839: ; return; } #endif /* CPUSHAQ.L # */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f43e_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 6) & 3); {if (!regs.s) { Exception (8); goto endlabel10840; } { if (opcode & 0x80) flush_icache(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); endlabel10840: ; return; } #endif /* CPUSHAQ.L # */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f43f_22)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 6) & 3); {if (!regs.s) { Exception (8); goto endlabel10841; } { if (opcode & 0x80) flush_icache(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); }} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); endlabel10841: ; return; } #endif /* PFLUSHN.L (An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f500_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel10842; } { m68k_incpc (2); mmu_op (opcode, 0); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel10842: ; return; } #endif /* PFLUSH.L (An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f508_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel10843; } { m68k_incpc (2); mmu_op (opcode, 0); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel10843: ; return; } #endif /* PFLUSHAN.L (An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f510_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel10844; } { m68k_incpc (2); mmu_op (opcode, 0); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel10844: ; return; } #endif /* PFLUSHA.L (An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f518_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel10845; } { m68k_incpc (2); mmu_op (opcode, 0); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel10845: ; return; } #endif /* PTESTR.L (An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f548_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel10846; } { m68k_incpc (2); mmu_op (opcode, 0); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel10846: ; return; } #endif /* PTESTW.L (An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f568_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel10847; } { m68k_incpc (2); mmu_op (opcode, 0); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel10847: ; return; } #endif /* PLPAR.L (An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f588_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel10848; } { m68k_incpc (2); mmu_op (opcode, 0); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel10848: ; return; } #endif /* PLPAW.L (An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f5c8_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel10849; } { m68k_incpc (2); mmu_op (opcode, 0); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel10849: ; return; } #endif /* MOVE16.L (An)+,(xxx).L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f600_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); { uae_u32 v1, v2, v3, v4; { uaecptr memsa = m68k_areg (regs, srcreg); { uaecptr memda = get_long_ce020_prefetch (2); memsa &= ~15; memda &= ~15; v1 = x_get_long (memsa); v2 = x_get_long (memsa + 4); v3 = x_get_long (memsa + 8); v4 = x_get_long (memsa + 12); x_put_long (memda , v1); x_put_long (memda + 4, v2); x_put_long (memda + 8, v3); x_put_long (memda + 12, v4); m68k_areg (regs, srcreg) += 16; }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } #endif /* MOVE16.L (xxx).L,(An)+ */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f608_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u32 v1, v2, v3, v4; { uaecptr memsa = get_long_ce020_prefetch (2); { uaecptr memda = m68k_areg (regs, dstreg); memsa &= ~15; memda &= ~15; v1 = x_get_long (memsa); v2 = x_get_long (memsa + 4); v3 = x_get_long (memsa + 8); v4 = x_get_long (memsa + 12); x_put_long (memda , v1); x_put_long (memda + 4, v2); x_put_long (memda + 8, v3); x_put_long (memda + 12, v4); m68k_areg (regs, dstreg) += 16; }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } #endif /* MOVE16.L (An),(xxx).L */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f610_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); { uae_u32 v1, v2, v3, v4; { uaecptr memsa = m68k_areg (regs, srcreg); { uaecptr memda = get_long_ce020_prefetch (2); memsa &= ~15; memda &= ~15; v1 = x_get_long (memsa); v2 = x_get_long (memsa + 4); v3 = x_get_long (memsa + 8); v4 = x_get_long (memsa + 12); x_put_long (memda , v1); x_put_long (memda + 4, v2); x_put_long (memda + 8, v3); x_put_long (memda + 12, v4); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } #endif /* MOVE16.L (xxx).L,(An) */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f618_22)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u32 v1, v2, v3, v4; { uaecptr memsa = get_long_ce020_prefetch (2); { uaecptr memda = m68k_areg (regs, dstreg); memsa &= ~15; memda &= ~15; v1 = x_get_long (memsa); v2 = x_get_long (memsa + 4); v3 = x_get_long (memsa + 8); v4 = x_get_long (memsa + 12); x_put_long (memda , v1); x_put_long (memda + 4, v2); x_put_long (memda + 8, v3); x_put_long (memda + 12, v4); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } #endif /* MOVE16.L (An)+,(An)+ */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f620_22)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = 0; { uae_u32 v1, v2, v3, v4; uaecptr mems = m68k_areg (regs, srcreg) & ~15, memd; dstreg = (get_word_ce020_prefetch (2) >> 12) & 7; memd = m68k_areg (regs, dstreg) & ~15; v1 = x_get_long (mems); v2 = x_get_long (mems + 4); v3 = x_get_long (mems + 8); v4 = x_get_long (mems + 12); x_put_long (memd , v1); x_put_long (memd + 4, v2); x_put_long (memd + 8, v3); x_put_long (memd + 12, v4); if (srcreg != dstreg) m68k_areg (regs, srcreg) += 16; m68k_areg (regs, dstreg) += 16; } regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } #endif /* LPSTOP.L #.W */ #ifndef CPUEMU_68000_ONLY void REGPARAM2 CPUFUNC(op_f800_22)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel10855; } { uae_u16 sw = x_get_iword (2); uae_u16 sr; if (sw != (0x100|0x80|0x40)) { Exception (4); goto endlabel10855; } sr = x_get_iword (4); if (!(sr & 0x8000)) { Exception (8); goto endlabel10855; } regs.sr = sr; MakeFromSR (); m68k_setstopped(); m68k_incpc (6); }} regs.ce020memcycles += 2 * cpucycleunit; endlabel10855: ; return; } #endif #endif #if !defined(PART_1) && !defined(PART_2) && !defined(PART_3) && !defined(PART_4) && !defined(PART_5) && !defined(PART_6) && !defined(PART_7) && !defined(PART_8) #define PART_1 1 #define PART_2 1 #define PART_3 1 #define PART_4 1 #define PART_5 1 #define PART_6 1 #define PART_7 1 #define PART_8 1 #endif #ifdef PART_1 #endif #ifdef PART_2 #endif #ifdef PART_3 #endif #ifdef PART_4 #endif #ifdef PART_5 #endif #ifdef PART_6 #endif #ifdef PART_7 #endif #ifdef PART_8 #endif #if !defined(PART_1) && !defined(PART_2) && !defined(PART_3) && !defined(PART_4) && !defined(PART_5) && !defined(PART_6) && !defined(PART_7) && !defined(PART_8) #define PART_1 1 #define PART_2 1 #define PART_3 1 #define PART_4 1 #define PART_5 1 #define PART_6 1 #define PART_7 1 #define PART_8 1 #endif #ifdef PART_1 #endif #ifdef PART_2 #endif #ifdef PART_3 #endif #ifdef PART_4 /* NBCD.B Dn */ void REGPARAM2 CPUFUNC(op_4800_24)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = - (src & 0xF0); uae_u16 newv; int cflg; if (newv_lo > 9) { newv_lo -= 6; } newv = newv_hi + newv_lo; cflg = (newv & 0x1F0) > 0x90; if (cflg) newv -= 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((newv) & 0xff); }}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NBCD.B (An) */ void REGPARAM2 CPUFUNC(op_4810_24)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { uae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = - (src & 0xF0); uae_u16 newv; int cflg; if (newv_lo > 9) { newv_lo -= 6; } newv = newv_hi + newv_lo; cflg = (newv & 0x1F0) > 0x90; if (cflg) newv -= 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); x_put_byte (srca, newv); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NBCD.B (An)+ */ void REGPARAM2 CPUFUNC(op_4818_24)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = - (src & 0xF0); uae_u16 newv; int cflg; if (newv_lo > 9) { newv_lo -= 6; } newv = newv_hi + newv_lo; cflg = (newv & 0x1F0) > 0x90; if (cflg) newv -= 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); x_put_byte (srca, newv); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NBCD.B -(An) */ void REGPARAM2 CPUFUNC(op_4820_24)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = - (src & 0xF0); uae_u16 newv; int cflg; if (newv_lo > 9) { newv_lo -= 6; } newv = newv_hi + newv_lo; cflg = (newv & 0x1F0) > 0x90; if (cflg) newv -= 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); x_put_byte (srca, newv); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* NBCD.B (d16,An) */ void REGPARAM2 CPUFUNC(op_4828_24)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = - (src & 0xF0); uae_u16 newv; int cflg; if (newv_lo > 9) { newv_lo -= 6; } newv = newv_hi + newv_lo; cflg = (newv & 0x1F0) > 0x90; if (cflg) newv -= 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); x_put_byte (srca, newv); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* NBCD.B (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_4830_24)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = x_get_disp_ea_ce020 (m68k_areg (regs, srcreg), next_iword_020ce ()); { uae_s8 src = x_get_byte (srca); { uae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = - (src & 0xF0); uae_u16 newv; int cflg; if (newv_lo > 9) { newv_lo -= 6; } newv = newv_hi + newv_lo; cflg = (newv & 0x1F0) > 0x90; if (cflg) newv -= 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); x_put_byte (srca, newv); }}}}} regs.ce020memcycles += 2 * cpucycleunit; return; } /* NBCD.B (xxx).W */ void REGPARAM2 CPUFUNC(op_4838_24)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = - (src & 0xF0); uae_u16 newv; int cflg; if (newv_lo > 9) { newv_lo -= 6; } newv = newv_hi + newv_lo; cflg = (newv & 0x1F0) > 0x90; if (cflg) newv -= 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); x_put_byte (srca, newv); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (4); return; } /* NBCD.B (xxx).L */ void REGPARAM2 CPUFUNC(op_4839_24)(uae_u32 opcode) { {{ uaecptr srca = get_long_ce020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = - (src & 0xF0); uae_u16 newv; int cflg; if (newv_lo > 9) { newv_lo -= 6; } newv = newv_hi + newv_lo; cflg = (newv & 0x1F0) > 0x90; if (cflg) newv -= 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); x_put_byte (srca, newv); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (6); return; } #endif #ifdef PART_5 #endif #ifdef PART_6 /* SBCD.B Dn,Dn */ void REGPARAM2 CPUFUNC(op_8100_24)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); { uae_u16 newv_lo = (dst & 0xF) - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = (dst & 0xF0) - (src & 0xF0); uae_u16 newv, tmp_newv; int bcd = 0; newv = tmp_newv = newv_hi + newv_lo; if (newv_lo & 0xF0) { newv -= 6; bcd = 6; }; if ((((dst & 0xFF) - (src & 0xFF) - (GET_XFLG () ? 1 : 0)) & 0x100) > 0xFF) { newv -= 0x60; } SET_CFLG ((((dst & 0xFF) - (src & 0xFF) - bcd - (GET_XFLG () ? 1 : 0)) & 0x300) > 0xFF); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); SET_VFLG ((tmp_newv & 0x80) != 0 && (newv & 0x80) == 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* SBCD.B -(An),-(An) */ void REGPARAM2 CPUFUNC(op_8108_24)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; { uae_u16 newv_lo = (dst & 0xF) - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = (dst & 0xF0) - (src & 0xF0); uae_u16 newv, tmp_newv; int bcd = 0; newv = tmp_newv = newv_hi + newv_lo; if (newv_lo & 0xF0) { newv -= 6; bcd = 6; }; if ((((dst & 0xFF) - (src & 0xFF) - (GET_XFLG () ? 1 : 0)) & 0x100) > 0xFF) { newv -= 0x60; } SET_CFLG ((((dst & 0xFF) - (src & 0xFF) - bcd - (GET_XFLG () ? 1 : 0)) & 0x300) > 0xFF); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); SET_VFLG ((tmp_newv & 0x80) != 0 && (newv & 0x80) == 0); x_put_byte (dsta, newv); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } #endif #ifdef PART_7 /* ABCD.B Dn,Dn */ void REGPARAM2 CPUFUNC(op_c100_24)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); { uae_u16 newv_lo = (src & 0xF) + (dst & 0xF) + (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = (src & 0xF0) + (dst & 0xF0); uae_u16 newv, tmp_newv; int cflg; newv = tmp_newv = newv_hi + newv_lo; if (newv_lo > 9) { newv += 6; } cflg = (newv & 0x3F0) > 0x90; if (cflg) newv += 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); SET_VFLG ((tmp_newv & 0x80) == 0 && (newv & 0x80) != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } /* ABCD.B -(An),-(An) */ void REGPARAM2 CPUFUNC(op_c108_24)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; { uae_u16 newv_lo = (src & 0xF) + (dst & 0xF) + (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = (src & 0xF0) + (dst & 0xF0); uae_u16 newv, tmp_newv; int cflg; newv = tmp_newv = newv_hi + newv_lo; if (newv_lo > 9) { newv += 6; } cflg = (newv & 0x3F0) > 0x90; if (cflg) newv += 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); SET_VFLG ((tmp_newv & 0x80) == 0 && (newv & 0x80) != 0); x_put_byte (dsta, newv); }}}}}} regs.ce020memcycles += 2 * cpucycleunit; m68k_incpc (2); return; } #endif #ifdef PART_8 #endif fs-uae-2.2.3+dfsg/gensrc/cpuemu_12.cpp0000644000175000017500000371552712162366654017665 0ustar glaubitzglaubitz#include "sysconfig.h" #include "sysdeps.h" #include "options.h" #include "uae/memory.h" #include "custom.h" #include "events.h" #include "newcpu.h" #include "cpu_prefetch.h" #include "cputbl.h" #include "cpummu.h" #define CPUFUNC(x) x##_ff #define SET_CFLG_ALWAYS(x) SET_CFLG(x) #define SET_NFLG_ALWAYS(x) SET_NFLG(x) #ifdef NOFLAGS #include "noflags.h" #endif #if !defined(PART_1) && !defined(PART_2) && !defined(PART_3) && !defined(PART_4) && !defined(PART_5) && !defined(PART_6) && !defined(PART_7) && !defined(PART_8) #define PART_1 1 #define PART_2 1 #define PART_3 1 #define PART_4 1 #define PART_5 1 #define PART_6 1 #define PART_7 1 #define PART_8 1 #endif #ifdef PART_1 /* OR.B #.B,Dn */ void REGPARAM2 CPUFUNC(op_0000_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce000_prefetch (4); { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}} m68k_incpc (4); } /* 8 (2/0) */ /* OR.B #.B,(An) */ void REGPARAM2 CPUFUNC(op_0010_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce000_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); x_put_byte (dsta, src); }}}} m68k_incpc (4); } /* 16 (3/1) */ /* OR.B #.B,(An)+ */ void REGPARAM2 CPUFUNC(op_0018_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce000_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); x_put_byte (dsta, src); }}}} m68k_incpc (4); } /* 16 (3/1) */ /* OR.B #.B,-(An) */ void REGPARAM2 CPUFUNC(op_0020_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce000_prefetch (4); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; do_cycles_ce000 (2); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); x_put_byte (dsta, src); }}}} m68k_incpc (4); } /* 18 (3/1) */ /* OR.B #.B,(d16,An) */ void REGPARAM2 CPUFUNC(op_0028_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce000_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (6); { uae_s8 dst = x_get_byte (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); x_put_byte (dsta, src); }}}} m68k_incpc (6); } /* 20 (4/1) */ /* OR.B #.B,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_0030_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce000_prefetch (4); { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (6)); { uae_s8 dst = x_get_byte (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); x_put_byte (dsta, src); }}}} m68k_incpc (6); } /* 22 (4/1) */ /* OR.B #.B,(xxx).W */ void REGPARAM2 CPUFUNC(op_0038_12)(uae_u32 opcode) { {{ uae_s8 src = (uae_u8)get_word_ce000_prefetch (4); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (6); { uae_s8 dst = x_get_byte (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); x_put_byte (dsta, src); }}}} m68k_incpc (6); } /* 20 (4/1) */ /* OR.B #.B,(xxx).L */ void REGPARAM2 CPUFUNC(op_0039_12)(uae_u32 opcode) { {{ uae_s8 src = (uae_u8)get_word_ce000_prefetch (4); { uaecptr dsta; dsta = get_word_ce000_prefetch (6) << 16; dsta |= get_word_ce000_prefetch (8); { uae_s8 dst = x_get_byte (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (10); x_put_byte (dsta, src); }}}} m68k_incpc (8); } /* 24 (5/1) */ /* ORSR.B #.W */ void REGPARAM2 CPUFUNC(op_003c_12)(uae_u32 opcode) { { MakeSR (); { uae_s16 src = get_word_ce000_prefetch (4); x_get_iword (6); src &= 0xFF; do_cycles_ce000 (8); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); regs.sr |= src; MakeFromSR (); }} m68k_incpc (4); } /* 20 (3/0) */ /* OR.W #.W,Dn */ void REGPARAM2 CPUFUNC(op_0040_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}} m68k_incpc (4); } /* 8 (2/0) */ /* OR.W #.W,(An) */ void REGPARAM2 CPUFUNC(op_0050_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel3745; } {{ uae_s16 dst = x_get_word (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); x_put_word (dsta, src); }}}}} m68k_incpc (4); endlabel3745: ; } /* 16 (3/1) */ /* OR.W #.W,(An)+ */ void REGPARAM2 CPUFUNC(op_0058_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel3746; } {{ uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) += 2; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); x_put_word (dsta, src); }}}}} m68k_incpc (4); endlabel3746: ; } /* 16 (3/1) */ /* OR.W #.W,-(An) */ void REGPARAM2 CPUFUNC(op_0060_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; do_cycles_ce000 (2); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel3747; } {{ uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) = dsta; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); x_put_word (dsta, src); }}}}} m68k_incpc (4); endlabel3747: ; } /* 18 (3/1) */ /* OR.W #.W,(d16,An) */ void REGPARAM2 CPUFUNC(op_0068_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (6); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel3748; } {{ uae_s16 dst = x_get_word (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); x_put_word (dsta, src); }}}}} m68k_incpc (6); endlabel3748: ; } /* 20 (4/1) */ /* OR.W #.W,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_0070_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (6)); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel3749; } {{ uae_s16 dst = x_get_word (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); x_put_word (dsta, src); }}}}} m68k_incpc (6); endlabel3749: ; } /* 22 (4/1) */ /* OR.W #.W,(xxx).W */ void REGPARAM2 CPUFUNC(op_0078_12)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (6); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel3750; } {{ uae_s16 dst = x_get_word (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); x_put_word (dsta, src); }}}}} m68k_incpc (6); endlabel3750: ; } /* 20 (4/1) */ /* OR.W #.W,(xxx).L */ void REGPARAM2 CPUFUNC(op_0079_12)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta; dsta = get_word_ce000_prefetch (6) << 16; dsta |= get_word_ce000_prefetch (8); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel3751; } {{ uae_s16 dst = x_get_word (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (10); x_put_word (dsta, src); }}}}} m68k_incpc (8); endlabel3751: ; } /* 24 (5/1) */ /* ORSR.W #.W */ void REGPARAM2 CPUFUNC(op_007c_12)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel3752; } { MakeSR (); { uae_s16 src = get_word_ce000_prefetch (4); x_get_iword (6); do_cycles_ce000 (8); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); regs.sr |= src; MakeFromSR (); }}} m68k_incpc (4); endlabel3752: ; } /* 20 (3/0) */ /* OR.L #.L,Dn */ void REGPARAM2 CPUFUNC(op_0080_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src; src = get_word_ce000_prefetch (4) << 16; src |= get_word_ce000_prefetch (6); { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); do_cycles_ce000 (4); m68k_dreg (regs, dstreg) = (src); }}} m68k_incpc (6); } /* 16 (3/0) */ /* OR.L #.L,(An) */ void REGPARAM2 CPUFUNC(op_0090_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src; src = get_word_ce000_prefetch (4) << 16; src |= get_word_ce000_prefetch (6); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel3754; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); x_put_word (dsta + 2, src); x_put_word (dsta, src >> 16); }}}}} m68k_incpc (6); endlabel3754: ; } /* 28 (5/2) */ /* OR.L #.L,(An)+ */ void REGPARAM2 CPUFUNC(op_0098_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src; src = get_word_ce000_prefetch (4) << 16; src |= get_word_ce000_prefetch (6); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel3755; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); m68k_areg (regs, dstreg) += 4; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); x_put_word (dsta + 2, src); x_put_word (dsta, src >> 16); }}}}} m68k_incpc (6); endlabel3755: ; } /* 28 (5/2) */ /* OR.L #.L,-(An) */ void REGPARAM2 CPUFUNC(op_00a0_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src; src = get_word_ce000_prefetch (4) << 16; src |= get_word_ce000_prefetch (6); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; do_cycles_ce000 (2); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel3756; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); m68k_areg (regs, dstreg) = dsta; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); x_put_word (dsta + 2, src); x_put_word (dsta, src >> 16); }}}}} m68k_incpc (6); endlabel3756: ; } /* 30 (5/2) */ /* OR.L #.L,(d16,An) */ void REGPARAM2 CPUFUNC(op_00a8_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src; src = get_word_ce000_prefetch (4) << 16; src |= get_word_ce000_prefetch (6); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (8); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel3757; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (10); x_put_word (dsta + 2, src); x_put_word (dsta, src >> 16); }}}}} m68k_incpc (8); endlabel3757: ; } /* 32 (6/2) */ /* OR.L #.L,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_00b0_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src; src = get_word_ce000_prefetch (4) << 16; src |= get_word_ce000_prefetch (6); { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (8)); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel3758; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (10); x_put_word (dsta + 2, src); x_put_word (dsta, src >> 16); }}}}} m68k_incpc (8); endlabel3758: ; } /* 34 (6/2) */ /* OR.L #.L,(xxx).W */ void REGPARAM2 CPUFUNC(op_00b8_12)(uae_u32 opcode) { {{ uae_s32 src; src = get_word_ce000_prefetch (4) << 16; src |= get_word_ce000_prefetch (6); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (8); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel3759; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (10); x_put_word (dsta + 2, src); x_put_word (dsta, src >> 16); }}}}} m68k_incpc (8); endlabel3759: ; } /* 32 (6/2) */ /* OR.L #.L,(xxx).L */ void REGPARAM2 CPUFUNC(op_00b9_12)(uae_u32 opcode) { {{ uae_s32 src; src = get_word_ce000_prefetch (4) << 16; src |= get_word_ce000_prefetch (6); { uaecptr dsta; dsta = get_word_ce000_prefetch (8) << 16; dsta |= get_word_ce000_prefetch (10); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel3760; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (12); x_put_word (dsta + 2, src); x_put_word (dsta, src >> 16); }}}}} m68k_incpc (10); endlabel3760: ; } /* 36 (7/2) */ /* BTST.L Dn,Dn */ void REGPARAM2 CPUFUNC(op_0100_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); src &= 31; do_cycles_ce000 (2); SET_ZFLG (1 ^ ((dst >> src) & 1)); }}} m68k_incpc (2); } /* 6 (1/0) */ /* MVPMR.W (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_0108_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; { uaecptr memp = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_u16 val = (x_get_byte (memp) << 8) + x_get_byte (memp + 2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }} m68k_incpc (4); } /* 16 (4/0) */ /* BTST.B Dn,(An) */ void REGPARAM2 CPUFUNC(op_0110_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); regs.ir = regs.irc; regs.irc = 0; ipl_fetch (); { uae_s8 dst = x_get_byte (dsta); get_word_ce000_prefetch (4); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpc (2); } /* 8 (2/0) */ /* BTST.B Dn,(An)+ */ void REGPARAM2 CPUFUNC(op_0118_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); regs.ir = regs.irc; regs.irc = 0; ipl_fetch (); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; get_word_ce000_prefetch (4); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpc (2); } /* 8 (2/0) */ /* BTST.B Dn,-(An) */ void REGPARAM2 CPUFUNC(op_0120_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; do_cycles_ce000 (2); regs.ir = regs.irc; regs.irc = 0; ipl_fetch (); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; get_word_ce000_prefetch (4); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpc (2); } /* 10 (2/0) */ /* BTST.B Dn,(d16,An) */ void REGPARAM2 CPUFUNC(op_0128_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); regs.ir = regs.irc; regs.irc = 0; ipl_fetch (); { uae_s8 dst = x_get_byte (dsta); get_word_ce000_prefetch (6); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpc (4); } /* 12 (3/0) */ /* BTST.B Dn,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_0130_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (4)); regs.ir = regs.irc; regs.irc = 0; ipl_fetch (); { uae_s8 dst = x_get_byte (dsta); get_word_ce000_prefetch (6); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpc (4); } /* 14 (3/0) */ /* BTST.B Dn,(xxx).W */ void REGPARAM2 CPUFUNC(op_0138_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); regs.ir = regs.irc; regs.irc = 0; ipl_fetch (); { uae_s8 dst = x_get_byte (dsta); get_word_ce000_prefetch (6); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpc (4); } /* 12 (3/0) */ /* BTST.B Dn,(xxx).L */ void REGPARAM2 CPUFUNC(op_0139_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = get_word_ce000_prefetch (4) << 16; dsta |= get_word_ce000_prefetch (6); regs.ir = regs.irc; regs.irc = 0; ipl_fetch (); { uae_s8 dst = x_get_byte (dsta); get_word_ce000_prefetch (8); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpc (6); } /* 16 (4/0) */ /* BTST.B Dn,(d16,PC) */ void REGPARAM2 CPUFUNC(op_013a_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = 2; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_getpc () + 2; dsta += (uae_s32)(uae_s16)get_word_ce000_prefetch (4); regs.ir = regs.irc; regs.irc = 0; ipl_fetch (); { uae_s8 dst = x_get_byte (dsta); get_word_ce000_prefetch (6); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpc (4); } /* 12 (3/0) */ /* BTST.B Dn,(d8,PC,Xn) */ void REGPARAM2 CPUFUNC(op_013b_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = 3; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr tmppc; uaecptr dsta; tmppc = m68k_getpc () + 2; do_cycles_ce000 (2); dsta = get_disp_ea_000 (tmppc, get_word_ce000_prefetch (4)); regs.ir = regs.irc; regs.irc = 0; ipl_fetch (); { uae_s8 dst = x_get_byte (dsta); get_word_ce000_prefetch (6); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpc (4); } /* 14 (3/0) */ /* BTST.B Dn,#.B */ void REGPARAM2 CPUFUNC(op_013c_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = (uae_u8)get_word_ce000_prefetch (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}} m68k_incpc (4); } /* 8 (2/0) */ /* BCHG.L Dn,Dn */ void REGPARAM2 CPUFUNC(op_0140_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); src &= 31; do_cycles_ce000 (2); if (src > 15) do_cycles_ce000 (2); dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); m68k_dreg (regs, dstreg) = (dst); }}} m68k_incpc (2); } /* 6+ (1/0) */ /* MVPMR.L (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_0148_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; { uaecptr memp = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_u32 val = (x_get_byte (memp) << 24) + (x_get_byte (memp + 2) << 16) + (x_get_byte (memp + 4) << 8) + x_get_byte (memp + 6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); m68k_dreg (regs, dstreg) = (val); }} m68k_incpc (4); } /* 24 (6/0) */ /* BCHG.B Dn,(An) */ void REGPARAM2 CPUFUNC(op_0150_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); regs.ir = regs.irc; regs.irc = 0; ipl_fetch (); { uae_s8 dst = x_get_byte (dsta); get_word_ce000_prefetch (4); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); x_put_byte (dsta, dst); }}}} m68k_incpc (2); } /* 12 (2/1) */ /* BCHG.B Dn,(An)+ */ void REGPARAM2 CPUFUNC(op_0158_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); regs.ir = regs.irc; regs.irc = 0; ipl_fetch (); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; get_word_ce000_prefetch (4); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); x_put_byte (dsta, dst); }}}} m68k_incpc (2); } /* 12 (2/1) */ /* BCHG.B Dn,-(An) */ void REGPARAM2 CPUFUNC(op_0160_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; do_cycles_ce000 (2); regs.ir = regs.irc; regs.irc = 0; ipl_fetch (); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; get_word_ce000_prefetch (4); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); x_put_byte (dsta, dst); }}}} m68k_incpc (2); } /* 14 (2/1) */ /* BCHG.B Dn,(d16,An) */ void REGPARAM2 CPUFUNC(op_0168_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); regs.ir = regs.irc; regs.irc = 0; ipl_fetch (); { uae_s8 dst = x_get_byte (dsta); get_word_ce000_prefetch (6); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); x_put_byte (dsta, dst); }}}} m68k_incpc (4); } /* 16 (3/1) */ /* BCHG.B Dn,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_0170_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (4)); regs.ir = regs.irc; regs.irc = 0; ipl_fetch (); { uae_s8 dst = x_get_byte (dsta); get_word_ce000_prefetch (6); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); x_put_byte (dsta, dst); }}}} m68k_incpc (4); } /* 18 (3/1) */ /* BCHG.B Dn,(xxx).W */ void REGPARAM2 CPUFUNC(op_0178_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); regs.ir = regs.irc; regs.irc = 0; ipl_fetch (); { uae_s8 dst = x_get_byte (dsta); get_word_ce000_prefetch (6); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); x_put_byte (dsta, dst); }}}} m68k_incpc (4); } /* 16 (3/1) */ /* BCHG.B Dn,(xxx).L */ void REGPARAM2 CPUFUNC(op_0179_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = get_word_ce000_prefetch (4) << 16; dsta |= get_word_ce000_prefetch (6); regs.ir = regs.irc; regs.irc = 0; ipl_fetch (); { uae_s8 dst = x_get_byte (dsta); get_word_ce000_prefetch (8); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); x_put_byte (dsta, dst); }}}} m68k_incpc (6); } /* 20 (4/1) */ /* BCHG.B Dn,(d16,PC) */ void REGPARAM2 CPUFUNC(op_017a_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = 2; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_getpc () + 2; dsta += (uae_s32)(uae_s16)get_word_ce000_prefetch (4); regs.ir = regs.irc; regs.irc = 0; ipl_fetch (); { uae_s8 dst = x_get_byte (dsta); get_word_ce000_prefetch (6); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); x_put_byte (dsta, dst); }}}} m68k_incpc (4); } /* 16 (3/1) */ /* BCHG.B Dn,(d8,PC,Xn) */ void REGPARAM2 CPUFUNC(op_017b_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = 3; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr tmppc; uaecptr dsta; tmppc = m68k_getpc () + 2; do_cycles_ce000 (2); dsta = get_disp_ea_000 (tmppc, get_word_ce000_prefetch (4)); regs.ir = regs.irc; regs.irc = 0; ipl_fetch (); { uae_s8 dst = x_get_byte (dsta); get_word_ce000_prefetch (6); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); x_put_byte (dsta, dst); }}}} m68k_incpc (4); } /* 18 (3/1) */ /* BCLR.L Dn,Dn */ void REGPARAM2 CPUFUNC(op_0180_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); src &= 31; do_cycles_ce000 (2); if (src > 15) do_cycles_ce000 (2); do_cycles_ce000 (2); SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); m68k_dreg (regs, dstreg) = (dst); }}} m68k_incpc (2); } /* 8+ (1/0) */ /* MVPRM.W Dn,(d16,An) */ void REGPARAM2 CPUFUNC(op_0188_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); uaecptr memp = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); x_put_byte (memp, src >> 8); x_put_byte (memp + 2, src); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); }} m68k_incpc (4); } /* 16 (2/2) */ /* BCLR.B Dn,(An) */ void REGPARAM2 CPUFUNC(op_0190_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); regs.ir = regs.irc; regs.irc = 0; ipl_fetch (); { uae_s8 dst = x_get_byte (dsta); get_word_ce000_prefetch (4); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); x_put_byte (dsta, dst); }}}} m68k_incpc (2); } /* 12 (2/1) */ /* BCLR.B Dn,(An)+ */ void REGPARAM2 CPUFUNC(op_0198_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); regs.ir = regs.irc; regs.irc = 0; ipl_fetch (); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; get_word_ce000_prefetch (4); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); x_put_byte (dsta, dst); }}}} m68k_incpc (2); } /* 12 (2/1) */ /* BCLR.B Dn,-(An) */ void REGPARAM2 CPUFUNC(op_01a0_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; do_cycles_ce000 (2); regs.ir = regs.irc; regs.irc = 0; ipl_fetch (); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; get_word_ce000_prefetch (4); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); x_put_byte (dsta, dst); }}}} m68k_incpc (2); } /* 14 (2/1) */ /* BCLR.B Dn,(d16,An) */ void REGPARAM2 CPUFUNC(op_01a8_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); regs.ir = regs.irc; regs.irc = 0; ipl_fetch (); { uae_s8 dst = x_get_byte (dsta); get_word_ce000_prefetch (6); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); x_put_byte (dsta, dst); }}}} m68k_incpc (4); } /* 16 (3/1) */ /* BCLR.B Dn,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_01b0_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (4)); regs.ir = regs.irc; regs.irc = 0; ipl_fetch (); { uae_s8 dst = x_get_byte (dsta); get_word_ce000_prefetch (6); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); x_put_byte (dsta, dst); }}}} m68k_incpc (4); } /* 18 (3/1) */ /* BCLR.B Dn,(xxx).W */ void REGPARAM2 CPUFUNC(op_01b8_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); regs.ir = regs.irc; regs.irc = 0; ipl_fetch (); { uae_s8 dst = x_get_byte (dsta); get_word_ce000_prefetch (6); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); x_put_byte (dsta, dst); }}}} m68k_incpc (4); } /* 16 (3/1) */ /* BCLR.B Dn,(xxx).L */ void REGPARAM2 CPUFUNC(op_01b9_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = get_word_ce000_prefetch (4) << 16; dsta |= get_word_ce000_prefetch (6); regs.ir = regs.irc; regs.irc = 0; ipl_fetch (); { uae_s8 dst = x_get_byte (dsta); get_word_ce000_prefetch (8); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); x_put_byte (dsta, dst); }}}} m68k_incpc (6); } /* 20 (4/1) */ /* BCLR.B Dn,(d16,PC) */ void REGPARAM2 CPUFUNC(op_01ba_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = 2; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_getpc () + 2; dsta += (uae_s32)(uae_s16)get_word_ce000_prefetch (4); regs.ir = regs.irc; regs.irc = 0; ipl_fetch (); { uae_s8 dst = x_get_byte (dsta); get_word_ce000_prefetch (6); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); x_put_byte (dsta, dst); }}}} m68k_incpc (4); } /* 16 (3/1) */ /* BCLR.B Dn,(d8,PC,Xn) */ void REGPARAM2 CPUFUNC(op_01bb_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = 3; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr tmppc; uaecptr dsta; tmppc = m68k_getpc () + 2; do_cycles_ce000 (2); dsta = get_disp_ea_000 (tmppc, get_word_ce000_prefetch (4)); regs.ir = regs.irc; regs.irc = 0; ipl_fetch (); { uae_s8 dst = x_get_byte (dsta); get_word_ce000_prefetch (6); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); x_put_byte (dsta, dst); }}}} m68k_incpc (4); } /* 18 (3/1) */ /* BSET.L Dn,Dn */ void REGPARAM2 CPUFUNC(op_01c0_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); src &= 31; do_cycles_ce000 (2); if (src > 15) do_cycles_ce000 (2); SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); m68k_dreg (regs, dstreg) = (dst); }}} m68k_incpc (2); } /* 6+ (1/0) */ /* MVPRM.L Dn,(d16,An) */ void REGPARAM2 CPUFUNC(op_01c8_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); uaecptr memp = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); x_put_byte (memp, src >> 24); x_put_byte (memp + 2, src >> 16); x_put_byte (memp + 4, src >> 8); x_put_byte (memp + 6, src); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); }} m68k_incpc (4); } /* 24 (2/4) */ /* BSET.B Dn,(An) */ void REGPARAM2 CPUFUNC(op_01d0_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); regs.ir = regs.irc; regs.irc = 0; ipl_fetch (); { uae_s8 dst = x_get_byte (dsta); get_word_ce000_prefetch (4); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); x_put_byte (dsta, dst); }}}} m68k_incpc (2); } /* 12 (2/1) */ /* BSET.B Dn,(An)+ */ void REGPARAM2 CPUFUNC(op_01d8_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); regs.ir = regs.irc; regs.irc = 0; ipl_fetch (); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; get_word_ce000_prefetch (4); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); x_put_byte (dsta, dst); }}}} m68k_incpc (2); } /* 12 (2/1) */ /* BSET.B Dn,-(An) */ void REGPARAM2 CPUFUNC(op_01e0_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; do_cycles_ce000 (2); regs.ir = regs.irc; regs.irc = 0; ipl_fetch (); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; get_word_ce000_prefetch (4); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); x_put_byte (dsta, dst); }}}} m68k_incpc (2); } /* 14 (2/1) */ /* BSET.B Dn,(d16,An) */ void REGPARAM2 CPUFUNC(op_01e8_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); regs.ir = regs.irc; regs.irc = 0; ipl_fetch (); { uae_s8 dst = x_get_byte (dsta); get_word_ce000_prefetch (6); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); x_put_byte (dsta, dst); }}}} m68k_incpc (4); } /* 16 (3/1) */ /* BSET.B Dn,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_01f0_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (4)); regs.ir = regs.irc; regs.irc = 0; ipl_fetch (); { uae_s8 dst = x_get_byte (dsta); get_word_ce000_prefetch (6); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); x_put_byte (dsta, dst); }}}} m68k_incpc (4); } /* 18 (3/1) */ /* BSET.B Dn,(xxx).W */ void REGPARAM2 CPUFUNC(op_01f8_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); regs.ir = regs.irc; regs.irc = 0; ipl_fetch (); { uae_s8 dst = x_get_byte (dsta); get_word_ce000_prefetch (6); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); x_put_byte (dsta, dst); }}}} m68k_incpc (4); } /* 16 (3/1) */ /* BSET.B Dn,(xxx).L */ void REGPARAM2 CPUFUNC(op_01f9_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = get_word_ce000_prefetch (4) << 16; dsta |= get_word_ce000_prefetch (6); regs.ir = regs.irc; regs.irc = 0; ipl_fetch (); { uae_s8 dst = x_get_byte (dsta); get_word_ce000_prefetch (8); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); x_put_byte (dsta, dst); }}}} m68k_incpc (6); } /* 20 (4/1) */ /* BSET.B Dn,(d16,PC) */ void REGPARAM2 CPUFUNC(op_01fa_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = 2; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_getpc () + 2; dsta += (uae_s32)(uae_s16)get_word_ce000_prefetch (4); regs.ir = regs.irc; regs.irc = 0; ipl_fetch (); { uae_s8 dst = x_get_byte (dsta); get_word_ce000_prefetch (6); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); x_put_byte (dsta, dst); }}}} m68k_incpc (4); } /* 16 (3/1) */ /* BSET.B Dn,(d8,PC,Xn) */ void REGPARAM2 CPUFUNC(op_01fb_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = 3; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr tmppc; uaecptr dsta; tmppc = m68k_getpc () + 2; do_cycles_ce000 (2); dsta = get_disp_ea_000 (tmppc, get_word_ce000_prefetch (4)); regs.ir = regs.irc; regs.irc = 0; ipl_fetch (); { uae_s8 dst = x_get_byte (dsta); get_word_ce000_prefetch (6); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); x_put_byte (dsta, dst); }}}} m68k_incpc (4); } /* 18 (3/1) */ /* AND.B #.B,Dn */ void REGPARAM2 CPUFUNC(op_0200_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce000_prefetch (4); { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}} m68k_incpc (4); } /* 8 (2/0) */ /* AND.B #.B,(An) */ void REGPARAM2 CPUFUNC(op_0210_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce000_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); x_put_byte (dsta, src); }}}} m68k_incpc (4); } /* 16 (3/1) */ /* AND.B #.B,(An)+ */ void REGPARAM2 CPUFUNC(op_0218_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce000_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); x_put_byte (dsta, src); }}}} m68k_incpc (4); } /* 16 (3/1) */ /* AND.B #.B,-(An) */ void REGPARAM2 CPUFUNC(op_0220_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce000_prefetch (4); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; do_cycles_ce000 (2); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); x_put_byte (dsta, src); }}}} m68k_incpc (4); } /* 18 (3/1) */ /* AND.B #.B,(d16,An) */ void REGPARAM2 CPUFUNC(op_0228_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce000_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (6); { uae_s8 dst = x_get_byte (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); x_put_byte (dsta, src); }}}} m68k_incpc (6); } /* 20 (4/1) */ /* AND.B #.B,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_0230_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce000_prefetch (4); { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (6)); { uae_s8 dst = x_get_byte (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); x_put_byte (dsta, src); }}}} m68k_incpc (6); } /* 22 (4/1) */ /* AND.B #.B,(xxx).W */ void REGPARAM2 CPUFUNC(op_0238_12)(uae_u32 opcode) { {{ uae_s8 src = (uae_u8)get_word_ce000_prefetch (4); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (6); { uae_s8 dst = x_get_byte (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); x_put_byte (dsta, src); }}}} m68k_incpc (6); } /* 20 (4/1) */ /* AND.B #.B,(xxx).L */ void REGPARAM2 CPUFUNC(op_0239_12)(uae_u32 opcode) { {{ uae_s8 src = (uae_u8)get_word_ce000_prefetch (4); { uaecptr dsta; dsta = get_word_ce000_prefetch (6) << 16; dsta |= get_word_ce000_prefetch (8); { uae_s8 dst = x_get_byte (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (10); x_put_byte (dsta, src); }}}} m68k_incpc (8); } /* 24 (5/1) */ /* ANDSR.B #.W */ void REGPARAM2 CPUFUNC(op_023c_12)(uae_u32 opcode) { { MakeSR (); { uae_s16 src = get_word_ce000_prefetch (4); x_get_iword (6); src |= 0xFF00; do_cycles_ce000 (8); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); regs.sr &= src; MakeFromSR (); }} m68k_incpc (4); } /* 20 (3/0) */ /* AND.W #.W,Dn */ void REGPARAM2 CPUFUNC(op_0240_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}} m68k_incpc (4); } /* 8 (2/0) */ /* AND.W #.W,(An) */ void REGPARAM2 CPUFUNC(op_0250_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel3816; } {{ uae_s16 dst = x_get_word (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); x_put_word (dsta, src); }}}}} m68k_incpc (4); endlabel3816: ; } /* 16 (3/1) */ /* AND.W #.W,(An)+ */ void REGPARAM2 CPUFUNC(op_0258_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel3817; } {{ uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) += 2; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); x_put_word (dsta, src); }}}}} m68k_incpc (4); endlabel3817: ; } /* 16 (3/1) */ /* AND.W #.W,-(An) */ void REGPARAM2 CPUFUNC(op_0260_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; do_cycles_ce000 (2); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel3818; } {{ uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) = dsta; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); x_put_word (dsta, src); }}}}} m68k_incpc (4); endlabel3818: ; } /* 18 (3/1) */ /* AND.W #.W,(d16,An) */ void REGPARAM2 CPUFUNC(op_0268_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (6); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel3819; } {{ uae_s16 dst = x_get_word (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); x_put_word (dsta, src); }}}}} m68k_incpc (6); endlabel3819: ; } /* 20 (4/1) */ /* AND.W #.W,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_0270_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (6)); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel3820; } {{ uae_s16 dst = x_get_word (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); x_put_word (dsta, src); }}}}} m68k_incpc (6); endlabel3820: ; } /* 22 (4/1) */ /* AND.W #.W,(xxx).W */ void REGPARAM2 CPUFUNC(op_0278_12)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (6); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel3821; } {{ uae_s16 dst = x_get_word (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); x_put_word (dsta, src); }}}}} m68k_incpc (6); endlabel3821: ; } /* 20 (4/1) */ /* AND.W #.W,(xxx).L */ void REGPARAM2 CPUFUNC(op_0279_12)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta; dsta = get_word_ce000_prefetch (6) << 16; dsta |= get_word_ce000_prefetch (8); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel3822; } {{ uae_s16 dst = x_get_word (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (10); x_put_word (dsta, src); }}}}} m68k_incpc (8); endlabel3822: ; } /* 24 (5/1) */ /* ANDSR.W #.W */ void REGPARAM2 CPUFUNC(op_027c_12)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel3823; } { MakeSR (); { uae_s16 src = get_word_ce000_prefetch (4); x_get_iword (6); do_cycles_ce000 (8); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); regs.sr &= src; MakeFromSR (); }}} m68k_incpc (4); endlabel3823: ; } /* 20 (3/0) */ /* AND.L #.L,Dn */ void REGPARAM2 CPUFUNC(op_0280_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src; src = get_word_ce000_prefetch (4) << 16; src |= get_word_ce000_prefetch (6); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); do_cycles_ce000 (4); m68k_dreg (regs, dstreg) = (src); }}} m68k_incpc (6); } /* 16 (3/0) */ /* AND.L #.L,(An) */ void REGPARAM2 CPUFUNC(op_0290_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src; src = get_word_ce000_prefetch (4) << 16; src |= get_word_ce000_prefetch (6); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel3825; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); x_put_word (dsta + 2, src); x_put_word (dsta, src >> 16); }}}}} m68k_incpc (6); endlabel3825: ; } /* 28 (5/2) */ /* AND.L #.L,(An)+ */ void REGPARAM2 CPUFUNC(op_0298_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src; src = get_word_ce000_prefetch (4) << 16; src |= get_word_ce000_prefetch (6); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel3826; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); m68k_areg (regs, dstreg) += 4; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); x_put_word (dsta + 2, src); x_put_word (dsta, src >> 16); }}}}} m68k_incpc (6); endlabel3826: ; } /* 28 (5/2) */ /* AND.L #.L,-(An) */ void REGPARAM2 CPUFUNC(op_02a0_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src; src = get_word_ce000_prefetch (4) << 16; src |= get_word_ce000_prefetch (6); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; do_cycles_ce000 (2); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel3827; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); m68k_areg (regs, dstreg) = dsta; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); x_put_word (dsta + 2, src); x_put_word (dsta, src >> 16); }}}}} m68k_incpc (6); endlabel3827: ; } /* 30 (5/2) */ /* AND.L #.L,(d16,An) */ void REGPARAM2 CPUFUNC(op_02a8_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src; src = get_word_ce000_prefetch (4) << 16; src |= get_word_ce000_prefetch (6); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (8); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel3828; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (10); x_put_word (dsta + 2, src); x_put_word (dsta, src >> 16); }}}}} m68k_incpc (8); endlabel3828: ; } /* 32 (6/2) */ /* AND.L #.L,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_02b0_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src; src = get_word_ce000_prefetch (4) << 16; src |= get_word_ce000_prefetch (6); { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (8)); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel3829; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (10); x_put_word (dsta + 2, src); x_put_word (dsta, src >> 16); }}}}} m68k_incpc (8); endlabel3829: ; } /* 34 (6/2) */ /* AND.L #.L,(xxx).W */ void REGPARAM2 CPUFUNC(op_02b8_12)(uae_u32 opcode) { {{ uae_s32 src; src = get_word_ce000_prefetch (4) << 16; src |= get_word_ce000_prefetch (6); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (8); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel3830; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (10); x_put_word (dsta + 2, src); x_put_word (dsta, src >> 16); }}}}} m68k_incpc (8); endlabel3830: ; } /* 32 (6/2) */ /* AND.L #.L,(xxx).L */ void REGPARAM2 CPUFUNC(op_02b9_12)(uae_u32 opcode) { {{ uae_s32 src; src = get_word_ce000_prefetch (4) << 16; src |= get_word_ce000_prefetch (6); { uaecptr dsta; dsta = get_word_ce000_prefetch (8) << 16; dsta |= get_word_ce000_prefetch (10); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel3831; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (12); x_put_word (dsta + 2, src); x_put_word (dsta, src >> 16); }}}}} m68k_incpc (10); endlabel3831: ; } /* 36 (7/2) */ /* SUB.B #.B,Dn */ void REGPARAM2 CPUFUNC(op_0400_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce000_prefetch (4); { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}} m68k_incpc (4); } /* 8 (2/0) */ /* SUB.B #.B,(An) */ void REGPARAM2 CPUFUNC(op_0410_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce000_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (4); } /* 16 (3/1) */ /* SUB.B #.B,(An)+ */ void REGPARAM2 CPUFUNC(op_0418_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce000_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (4); } /* 16 (3/1) */ /* SUB.B #.B,-(An) */ void REGPARAM2 CPUFUNC(op_0420_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce000_prefetch (4); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; do_cycles_ce000 (2); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (4); } /* 18 (3/1) */ /* SUB.B #.B,(d16,An) */ void REGPARAM2 CPUFUNC(op_0428_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce000_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (6); { uae_s8 dst = x_get_byte (dsta); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (6); } /* 20 (4/1) */ /* SUB.B #.B,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_0430_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce000_prefetch (4); { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (6)); { uae_s8 dst = x_get_byte (dsta); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (6); } /* 22 (4/1) */ /* SUB.B #.B,(xxx).W */ void REGPARAM2 CPUFUNC(op_0438_12)(uae_u32 opcode) { {{ uae_s8 src = (uae_u8)get_word_ce000_prefetch (4); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (6); { uae_s8 dst = x_get_byte (dsta); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (6); } /* 20 (4/1) */ /* SUB.B #.B,(xxx).L */ void REGPARAM2 CPUFUNC(op_0439_12)(uae_u32 opcode) { {{ uae_s8 src = (uae_u8)get_word_ce000_prefetch (4); { uaecptr dsta; dsta = get_word_ce000_prefetch (6) << 16; dsta |= get_word_ce000_prefetch (8); { uae_s8 dst = x_get_byte (dsta); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (10); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (8); } /* 24 (5/1) */ /* SUB.W #.W,Dn */ void REGPARAM2 CPUFUNC(op_0440_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}} m68k_incpc (4); } /* 8 (2/0) */ /* SUB.W #.W,(An) */ void REGPARAM2 CPUFUNC(op_0450_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel3841; } {{ uae_s16 dst = x_get_word (dsta); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}}} m68k_incpc (4); endlabel3841: ; } /* 16 (3/1) */ /* SUB.W #.W,(An)+ */ void REGPARAM2 CPUFUNC(op_0458_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel3842; } {{ uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) += 2; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}}} m68k_incpc (4); endlabel3842: ; } /* 16 (3/1) */ /* SUB.W #.W,-(An) */ void REGPARAM2 CPUFUNC(op_0460_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; do_cycles_ce000 (2); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel3843; } {{ uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}}} m68k_incpc (4); endlabel3843: ; } /* 18 (3/1) */ /* SUB.W #.W,(d16,An) */ void REGPARAM2 CPUFUNC(op_0468_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (6); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel3844; } {{ uae_s16 dst = x_get_word (dsta); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}}} m68k_incpc (6); endlabel3844: ; } /* 20 (4/1) */ /* SUB.W #.W,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_0470_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (6)); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel3845; } {{ uae_s16 dst = x_get_word (dsta); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}}} m68k_incpc (6); endlabel3845: ; } /* 22 (4/1) */ /* SUB.W #.W,(xxx).W */ void REGPARAM2 CPUFUNC(op_0478_12)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (6); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel3846; } {{ uae_s16 dst = x_get_word (dsta); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}}} m68k_incpc (6); endlabel3846: ; } /* 20 (4/1) */ /* SUB.W #.W,(xxx).L */ void REGPARAM2 CPUFUNC(op_0479_12)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta; dsta = get_word_ce000_prefetch (6) << 16; dsta |= get_word_ce000_prefetch (8); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel3847; } {{ uae_s16 dst = x_get_word (dsta); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (10); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}}} m68k_incpc (8); endlabel3847: ; } /* 24 (5/1) */ /* SUB.L #.L,Dn */ void REGPARAM2 CPUFUNC(op_0480_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src; src = get_word_ce000_prefetch (4) << 16; src |= get_word_ce000_prefetch (6); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); do_cycles_ce000 (4); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} m68k_incpc (6); } /* 16 (3/0) */ /* SUB.L #.L,(An) */ void REGPARAM2 CPUFUNC(op_0490_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src; src = get_word_ce000_prefetch (4) << 16; src |= get_word_ce000_prefetch (6); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel3849; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta + 2, newv); x_put_word (dsta, newv >> 16); }}}}}}}} m68k_incpc (6); endlabel3849: ; } /* 28 (5/2) */ /* SUB.L #.L,(An)+ */ void REGPARAM2 CPUFUNC(op_0498_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src; src = get_word_ce000_prefetch (4) << 16; src |= get_word_ce000_prefetch (6); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel3850; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); m68k_areg (regs, dstreg) += 4; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta + 2, newv); x_put_word (dsta, newv >> 16); }}}}}}}} m68k_incpc (6); endlabel3850: ; } /* 28 (5/2) */ /* SUB.L #.L,-(An) */ void REGPARAM2 CPUFUNC(op_04a0_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src; src = get_word_ce000_prefetch (4) << 16; src |= get_word_ce000_prefetch (6); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; do_cycles_ce000 (2); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel3851; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta + 2, newv); x_put_word (dsta, newv >> 16); }}}}}}}} m68k_incpc (6); endlabel3851: ; } /* 30 (5/2) */ /* SUB.L #.L,(d16,An) */ void REGPARAM2 CPUFUNC(op_04a8_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src; src = get_word_ce000_prefetch (4) << 16; src |= get_word_ce000_prefetch (6); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (8); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel3852; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (10); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta + 2, newv); x_put_word (dsta, newv >> 16); }}}}}}}} m68k_incpc (8); endlabel3852: ; } /* 32 (6/2) */ /* SUB.L #.L,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_04b0_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src; src = get_word_ce000_prefetch (4) << 16; src |= get_word_ce000_prefetch (6); { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (8)); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel3853; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (10); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta + 2, newv); x_put_word (dsta, newv >> 16); }}}}}}}} m68k_incpc (8); endlabel3853: ; } /* 34 (6/2) */ /* SUB.L #.L,(xxx).W */ void REGPARAM2 CPUFUNC(op_04b8_12)(uae_u32 opcode) { {{ uae_s32 src; src = get_word_ce000_prefetch (4) << 16; src |= get_word_ce000_prefetch (6); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (8); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel3854; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (10); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta + 2, newv); x_put_word (dsta, newv >> 16); }}}}}}}} m68k_incpc (8); endlabel3854: ; } /* 32 (6/2) */ /* SUB.L #.L,(xxx).L */ void REGPARAM2 CPUFUNC(op_04b9_12)(uae_u32 opcode) { {{ uae_s32 src; src = get_word_ce000_prefetch (4) << 16; src |= get_word_ce000_prefetch (6); { uaecptr dsta; dsta = get_word_ce000_prefetch (8) << 16; dsta |= get_word_ce000_prefetch (10); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel3855; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (12); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta + 2, newv); x_put_word (dsta, newv >> 16); }}}}}}}} m68k_incpc (10); endlabel3855: ; } /* 36 (7/2) */ /* ADD.B #.B,Dn */ void REGPARAM2 CPUFUNC(op_0600_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce000_prefetch (4); { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}} m68k_incpc (4); } /* 8 (2/0) */ /* ADD.B #.B,(An) */ void REGPARAM2 CPUFUNC(op_0610_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce000_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (4); } /* 16 (3/1) */ /* ADD.B #.B,(An)+ */ void REGPARAM2 CPUFUNC(op_0618_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce000_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (4); } /* 16 (3/1) */ /* ADD.B #.B,-(An) */ void REGPARAM2 CPUFUNC(op_0620_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce000_prefetch (4); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; do_cycles_ce000 (2); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (4); } /* 18 (3/1) */ /* ADD.B #.B,(d16,An) */ void REGPARAM2 CPUFUNC(op_0628_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce000_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (6); { uae_s8 dst = x_get_byte (dsta); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (6); } /* 20 (4/1) */ /* ADD.B #.B,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_0630_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce000_prefetch (4); { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (6)); { uae_s8 dst = x_get_byte (dsta); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (6); } /* 22 (4/1) */ /* ADD.B #.B,(xxx).W */ void REGPARAM2 CPUFUNC(op_0638_12)(uae_u32 opcode) { {{ uae_s8 src = (uae_u8)get_word_ce000_prefetch (4); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (6); { uae_s8 dst = x_get_byte (dsta); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (6); } /* 20 (4/1) */ /* ADD.B #.B,(xxx).L */ void REGPARAM2 CPUFUNC(op_0639_12)(uae_u32 opcode) { {{ uae_s8 src = (uae_u8)get_word_ce000_prefetch (4); { uaecptr dsta; dsta = get_word_ce000_prefetch (6) << 16; dsta |= get_word_ce000_prefetch (8); { uae_s8 dst = x_get_byte (dsta); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (10); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (8); } /* 24 (5/1) */ /* ADD.W #.W,Dn */ void REGPARAM2 CPUFUNC(op_0640_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}} m68k_incpc (4); } /* 8 (2/0) */ /* ADD.W #.W,(An) */ void REGPARAM2 CPUFUNC(op_0650_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel3865; } {{ uae_s16 dst = x_get_word (dsta); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}}} m68k_incpc (4); endlabel3865: ; } /* 16 (3/1) */ /* ADD.W #.W,(An)+ */ void REGPARAM2 CPUFUNC(op_0658_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel3866; } {{ uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) += 2; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}}} m68k_incpc (4); endlabel3866: ; } /* 16 (3/1) */ /* ADD.W #.W,-(An) */ void REGPARAM2 CPUFUNC(op_0660_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; do_cycles_ce000 (2); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel3867; } {{ uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}}} m68k_incpc (4); endlabel3867: ; } /* 18 (3/1) */ /* ADD.W #.W,(d16,An) */ void REGPARAM2 CPUFUNC(op_0668_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (6); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel3868; } {{ uae_s16 dst = x_get_word (dsta); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}}} m68k_incpc (6); endlabel3868: ; } /* 20 (4/1) */ /* ADD.W #.W,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_0670_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (6)); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel3869; } {{ uae_s16 dst = x_get_word (dsta); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}}} m68k_incpc (6); endlabel3869: ; } /* 22 (4/1) */ /* ADD.W #.W,(xxx).W */ void REGPARAM2 CPUFUNC(op_0678_12)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (6); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel3870; } {{ uae_s16 dst = x_get_word (dsta); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}}} m68k_incpc (6); endlabel3870: ; } /* 20 (4/1) */ /* ADD.W #.W,(xxx).L */ void REGPARAM2 CPUFUNC(op_0679_12)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta; dsta = get_word_ce000_prefetch (6) << 16; dsta |= get_word_ce000_prefetch (8); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel3871; } {{ uae_s16 dst = x_get_word (dsta); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (10); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}}} m68k_incpc (8); endlabel3871: ; } /* 24 (5/1) */ /* ADD.L #.L,Dn */ void REGPARAM2 CPUFUNC(op_0680_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src; src = get_word_ce000_prefetch (4) << 16; src |= get_word_ce000_prefetch (6); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); do_cycles_ce000 (4); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} m68k_incpc (6); } /* 16 (3/0) */ /* ADD.L #.L,(An) */ void REGPARAM2 CPUFUNC(op_0690_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src; src = get_word_ce000_prefetch (4) << 16; src |= get_word_ce000_prefetch (6); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel3873; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta + 2, newv); x_put_word (dsta, newv >> 16); }}}}}}}} m68k_incpc (6); endlabel3873: ; } /* 28 (5/2) */ /* ADD.L #.L,(An)+ */ void REGPARAM2 CPUFUNC(op_0698_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src; src = get_word_ce000_prefetch (4) << 16; src |= get_word_ce000_prefetch (6); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel3874; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); m68k_areg (regs, dstreg) += 4; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta + 2, newv); x_put_word (dsta, newv >> 16); }}}}}}}} m68k_incpc (6); endlabel3874: ; } /* 28 (5/2) */ /* ADD.L #.L,-(An) */ void REGPARAM2 CPUFUNC(op_06a0_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src; src = get_word_ce000_prefetch (4) << 16; src |= get_word_ce000_prefetch (6); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; do_cycles_ce000 (2); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel3875; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta + 2, newv); x_put_word (dsta, newv >> 16); }}}}}}}} m68k_incpc (6); endlabel3875: ; } /* 30 (5/2) */ /* ADD.L #.L,(d16,An) */ void REGPARAM2 CPUFUNC(op_06a8_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src; src = get_word_ce000_prefetch (4) << 16; src |= get_word_ce000_prefetch (6); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (8); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel3876; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (10); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta + 2, newv); x_put_word (dsta, newv >> 16); }}}}}}}} m68k_incpc (8); endlabel3876: ; } /* 32 (6/2) */ /* ADD.L #.L,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_06b0_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src; src = get_word_ce000_prefetch (4) << 16; src |= get_word_ce000_prefetch (6); { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (8)); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel3877; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (10); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta + 2, newv); x_put_word (dsta, newv >> 16); }}}}}}}} m68k_incpc (8); endlabel3877: ; } /* 34 (6/2) */ /* ADD.L #.L,(xxx).W */ void REGPARAM2 CPUFUNC(op_06b8_12)(uae_u32 opcode) { {{ uae_s32 src; src = get_word_ce000_prefetch (4) << 16; src |= get_word_ce000_prefetch (6); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (8); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel3878; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (10); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta + 2, newv); x_put_word (dsta, newv >> 16); }}}}}}}} m68k_incpc (8); endlabel3878: ; } /* 32 (6/2) */ /* ADD.L #.L,(xxx).L */ void REGPARAM2 CPUFUNC(op_06b9_12)(uae_u32 opcode) { {{ uae_s32 src; src = get_word_ce000_prefetch (4) << 16; src |= get_word_ce000_prefetch (6); { uaecptr dsta; dsta = get_word_ce000_prefetch (8) << 16; dsta |= get_word_ce000_prefetch (10); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel3879; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (12); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta + 2, newv); x_put_word (dsta, newv >> 16); }}}}}}}} m68k_incpc (10); endlabel3879: ; } /* 36 (7/2) */ /* BTST.L #.W,Dn */ void REGPARAM2 CPUFUNC(op_0800_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); src &= 31; do_cycles_ce000 (2); SET_ZFLG (1 ^ ((dst >> src) & 1)); }}} m68k_incpc (4); } /* 10 (2/0) */ /* BTST.B #.W,(An) */ void REGPARAM2 CPUFUNC(op_0810_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); regs.ir = regs.irc; regs.irc = 0; ipl_fetch (); { uae_s8 dst = x_get_byte (dsta); get_word_ce000_prefetch (6); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpc (4); } /* 12 (3/0) */ /* BTST.B #.W,(An)+ */ void REGPARAM2 CPUFUNC(op_0818_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); regs.ir = regs.irc; regs.irc = 0; ipl_fetch (); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; get_word_ce000_prefetch (6); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpc (4); } /* 12 (3/0) */ /* BTST.B #.W,-(An) */ void REGPARAM2 CPUFUNC(op_0820_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; do_cycles_ce000 (2); regs.ir = regs.irc; regs.irc = 0; ipl_fetch (); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; get_word_ce000_prefetch (6); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpc (4); } /* 14 (3/0) */ /* BTST.B #.W,(d16,An) */ void REGPARAM2 CPUFUNC(op_0828_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (6); regs.ir = regs.irc; regs.irc = 0; ipl_fetch (); { uae_s8 dst = x_get_byte (dsta); get_word_ce000_prefetch (8); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpc (6); } /* 16 (4/0) */ /* BTST.B #.W,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_0830_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (6)); regs.ir = regs.irc; regs.irc = 0; ipl_fetch (); { uae_s8 dst = x_get_byte (dsta); get_word_ce000_prefetch (8); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpc (6); } /* 18 (4/0) */ /* BTST.B #.W,(xxx).W */ void REGPARAM2 CPUFUNC(op_0838_12)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (6); regs.ir = regs.irc; regs.irc = 0; ipl_fetch (); { uae_s8 dst = x_get_byte (dsta); get_word_ce000_prefetch (8); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpc (6); } /* 16 (4/0) */ /* BTST.B #.W,(xxx).L */ void REGPARAM2 CPUFUNC(op_0839_12)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta; dsta = get_word_ce000_prefetch (6) << 16; dsta |= get_word_ce000_prefetch (8); regs.ir = regs.irc; regs.irc = 0; ipl_fetch (); { uae_s8 dst = x_get_byte (dsta); get_word_ce000_prefetch (10); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpc (8); } /* 20 (5/0) */ /* BTST.B #.W,(d16,PC) */ void REGPARAM2 CPUFUNC(op_083a_12)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_word_ce000_prefetch (6); regs.ir = regs.irc; regs.irc = 0; ipl_fetch (); { uae_s8 dst = x_get_byte (dsta); get_word_ce000_prefetch (8); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpc (6); } /* 16 (4/0) */ /* BTST.B #.W,(d8,PC,Xn) */ void REGPARAM2 CPUFUNC(op_083b_12)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr tmppc; uaecptr dsta; tmppc = m68k_getpc () + 4; do_cycles_ce000 (2); dsta = get_disp_ea_000 (tmppc, get_word_ce000_prefetch (6)); regs.ir = regs.irc; regs.irc = 0; ipl_fetch (); { uae_s8 dst = x_get_byte (dsta); get_word_ce000_prefetch (8); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpc (6); } /* 18 (4/0) */ /* BTST.B #.W,#.B */ void REGPARAM2 CPUFUNC(op_083c_12)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce000_prefetch (4); { uae_s8 dst = (uae_u8)get_word_ce000_prefetch (6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}} m68k_incpc (6); } /* 12 (3/0) */ /* BCHG.L #.W,Dn */ void REGPARAM2 CPUFUNC(op_0840_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); src &= 31; do_cycles_ce000 (2); if (src > 15) do_cycles_ce000 (2); dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); m68k_dreg (regs, dstreg) = (dst); }}} m68k_incpc (4); } /* 10+ (2/0) */ /* BCHG.B #.W,(An) */ void REGPARAM2 CPUFUNC(op_0850_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); regs.ir = regs.irc; regs.irc = 0; ipl_fetch (); { uae_s8 dst = x_get_byte (dsta); get_word_ce000_prefetch (6); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); x_put_byte (dsta, dst); }}}} m68k_incpc (4); } /* 16 (3/1) */ /* BCHG.B #.W,(An)+ */ void REGPARAM2 CPUFUNC(op_0858_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); regs.ir = regs.irc; regs.irc = 0; ipl_fetch (); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; get_word_ce000_prefetch (6); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); x_put_byte (dsta, dst); }}}} m68k_incpc (4); } /* 16 (3/1) */ /* BCHG.B #.W,-(An) */ void REGPARAM2 CPUFUNC(op_0860_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; do_cycles_ce000 (2); regs.ir = regs.irc; regs.irc = 0; ipl_fetch (); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; get_word_ce000_prefetch (6); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); x_put_byte (dsta, dst); }}}} m68k_incpc (4); } /* 18 (3/1) */ /* BCHG.B #.W,(d16,An) */ void REGPARAM2 CPUFUNC(op_0868_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (6); regs.ir = regs.irc; regs.irc = 0; ipl_fetch (); { uae_s8 dst = x_get_byte (dsta); get_word_ce000_prefetch (8); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); x_put_byte (dsta, dst); }}}} m68k_incpc (6); } /* 20 (4/1) */ /* BCHG.B #.W,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_0870_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (6)); regs.ir = regs.irc; regs.irc = 0; ipl_fetch (); { uae_s8 dst = x_get_byte (dsta); get_word_ce000_prefetch (8); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); x_put_byte (dsta, dst); }}}} m68k_incpc (6); } /* 22 (4/1) */ /* BCHG.B #.W,(xxx).W */ void REGPARAM2 CPUFUNC(op_0878_12)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (6); regs.ir = regs.irc; regs.irc = 0; ipl_fetch (); { uae_s8 dst = x_get_byte (dsta); get_word_ce000_prefetch (8); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); x_put_byte (dsta, dst); }}}} m68k_incpc (6); } /* 20 (4/1) */ /* BCHG.B #.W,(xxx).L */ void REGPARAM2 CPUFUNC(op_0879_12)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta; dsta = get_word_ce000_prefetch (6) << 16; dsta |= get_word_ce000_prefetch (8); regs.ir = regs.irc; regs.irc = 0; ipl_fetch (); { uae_s8 dst = x_get_byte (dsta); get_word_ce000_prefetch (10); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); x_put_byte (dsta, dst); }}}} m68k_incpc (8); } /* 24 (5/1) */ /* BCHG.B #.W,(d16,PC) */ void REGPARAM2 CPUFUNC(op_087a_12)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_word_ce000_prefetch (6); regs.ir = regs.irc; regs.irc = 0; ipl_fetch (); { uae_s8 dst = x_get_byte (dsta); get_word_ce000_prefetch (8); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); x_put_byte (dsta, dst); }}}} m68k_incpc (6); } /* 20 (4/1) */ /* BCHG.B #.W,(d8,PC,Xn) */ void REGPARAM2 CPUFUNC(op_087b_12)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr tmppc; uaecptr dsta; tmppc = m68k_getpc () + 4; do_cycles_ce000 (2); dsta = get_disp_ea_000 (tmppc, get_word_ce000_prefetch (6)); regs.ir = regs.irc; regs.irc = 0; ipl_fetch (); { uae_s8 dst = x_get_byte (dsta); get_word_ce000_prefetch (8); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); x_put_byte (dsta, dst); }}}} m68k_incpc (6); } /* 22 (4/1) */ /* BCLR.L #.W,Dn */ void REGPARAM2 CPUFUNC(op_0880_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); src &= 31; do_cycles_ce000 (2); if (src > 15) do_cycles_ce000 (2); do_cycles_ce000 (2); SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); m68k_dreg (regs, dstreg) = (dst); }}} m68k_incpc (4); } /* 12+ (2/0) */ /* BCLR.B #.W,(An) */ void REGPARAM2 CPUFUNC(op_0890_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); regs.ir = regs.irc; regs.irc = 0; ipl_fetch (); { uae_s8 dst = x_get_byte (dsta); get_word_ce000_prefetch (6); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); x_put_byte (dsta, dst); }}}} m68k_incpc (4); } /* 16 (3/1) */ /* BCLR.B #.W,(An)+ */ void REGPARAM2 CPUFUNC(op_0898_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); regs.ir = regs.irc; regs.irc = 0; ipl_fetch (); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; get_word_ce000_prefetch (6); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); x_put_byte (dsta, dst); }}}} m68k_incpc (4); } /* 16 (3/1) */ /* BCLR.B #.W,-(An) */ void REGPARAM2 CPUFUNC(op_08a0_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; do_cycles_ce000 (2); regs.ir = regs.irc; regs.irc = 0; ipl_fetch (); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; get_word_ce000_prefetch (6); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); x_put_byte (dsta, dst); }}}} m68k_incpc (4); } /* 18 (3/1) */ /* BCLR.B #.W,(d16,An) */ void REGPARAM2 CPUFUNC(op_08a8_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (6); regs.ir = regs.irc; regs.irc = 0; ipl_fetch (); { uae_s8 dst = x_get_byte (dsta); get_word_ce000_prefetch (8); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); x_put_byte (dsta, dst); }}}} m68k_incpc (6); } /* 20 (4/1) */ /* BCLR.B #.W,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_08b0_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (6)); regs.ir = regs.irc; regs.irc = 0; ipl_fetch (); { uae_s8 dst = x_get_byte (dsta); get_word_ce000_prefetch (8); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); x_put_byte (dsta, dst); }}}} m68k_incpc (6); } /* 22 (4/1) */ /* BCLR.B #.W,(xxx).W */ void REGPARAM2 CPUFUNC(op_08b8_12)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (6); regs.ir = regs.irc; regs.irc = 0; ipl_fetch (); { uae_s8 dst = x_get_byte (dsta); get_word_ce000_prefetch (8); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); x_put_byte (dsta, dst); }}}} m68k_incpc (6); } /* 20 (4/1) */ /* BCLR.B #.W,(xxx).L */ void REGPARAM2 CPUFUNC(op_08b9_12)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta; dsta = get_word_ce000_prefetch (6) << 16; dsta |= get_word_ce000_prefetch (8); regs.ir = regs.irc; regs.irc = 0; ipl_fetch (); { uae_s8 dst = x_get_byte (dsta); get_word_ce000_prefetch (10); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); x_put_byte (dsta, dst); }}}} m68k_incpc (8); } /* 24 (5/1) */ /* BCLR.B #.W,(d16,PC) */ void REGPARAM2 CPUFUNC(op_08ba_12)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_word_ce000_prefetch (6); regs.ir = regs.irc; regs.irc = 0; ipl_fetch (); { uae_s8 dst = x_get_byte (dsta); get_word_ce000_prefetch (8); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); x_put_byte (dsta, dst); }}}} m68k_incpc (6); } /* 20 (4/1) */ /* BCLR.B #.W,(d8,PC,Xn) */ void REGPARAM2 CPUFUNC(op_08bb_12)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr tmppc; uaecptr dsta; tmppc = m68k_getpc () + 4; do_cycles_ce000 (2); dsta = get_disp_ea_000 (tmppc, get_word_ce000_prefetch (6)); regs.ir = regs.irc; regs.irc = 0; ipl_fetch (); { uae_s8 dst = x_get_byte (dsta); get_word_ce000_prefetch (8); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); x_put_byte (dsta, dst); }}}} m68k_incpc (6); } /* 22 (4/1) */ /* BSET.L #.W,Dn */ void REGPARAM2 CPUFUNC(op_08c0_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); src &= 31; do_cycles_ce000 (2); if (src > 15) do_cycles_ce000 (2); SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); m68k_dreg (regs, dstreg) = (dst); }}} m68k_incpc (4); } /* 10+ (2/0) */ /* BSET.B #.W,(An) */ void REGPARAM2 CPUFUNC(op_08d0_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); regs.ir = regs.irc; regs.irc = 0; ipl_fetch (); { uae_s8 dst = x_get_byte (dsta); get_word_ce000_prefetch (6); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); x_put_byte (dsta, dst); }}}} m68k_incpc (4); } /* 16 (3/1) */ /* BSET.B #.W,(An)+ */ void REGPARAM2 CPUFUNC(op_08d8_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); regs.ir = regs.irc; regs.irc = 0; ipl_fetch (); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; get_word_ce000_prefetch (6); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); x_put_byte (dsta, dst); }}}} m68k_incpc (4); } /* 16 (3/1) */ /* BSET.B #.W,-(An) */ void REGPARAM2 CPUFUNC(op_08e0_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; do_cycles_ce000 (2); regs.ir = regs.irc; regs.irc = 0; ipl_fetch (); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; get_word_ce000_prefetch (6); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); x_put_byte (dsta, dst); }}}} m68k_incpc (4); } /* 18 (3/1) */ /* BSET.B #.W,(d16,An) */ void REGPARAM2 CPUFUNC(op_08e8_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (6); regs.ir = regs.irc; regs.irc = 0; ipl_fetch (); { uae_s8 dst = x_get_byte (dsta); get_word_ce000_prefetch (8); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); x_put_byte (dsta, dst); }}}} m68k_incpc (6); } /* 20 (4/1) */ /* BSET.B #.W,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_08f0_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (6)); regs.ir = regs.irc; regs.irc = 0; ipl_fetch (); { uae_s8 dst = x_get_byte (dsta); get_word_ce000_prefetch (8); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); x_put_byte (dsta, dst); }}}} m68k_incpc (6); } /* 22 (4/1) */ /* BSET.B #.W,(xxx).W */ void REGPARAM2 CPUFUNC(op_08f8_12)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (6); regs.ir = regs.irc; regs.irc = 0; ipl_fetch (); { uae_s8 dst = x_get_byte (dsta); get_word_ce000_prefetch (8); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); x_put_byte (dsta, dst); }}}} m68k_incpc (6); } /* 20 (4/1) */ /* BSET.B #.W,(xxx).L */ void REGPARAM2 CPUFUNC(op_08f9_12)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta; dsta = get_word_ce000_prefetch (6) << 16; dsta |= get_word_ce000_prefetch (8); regs.ir = regs.irc; regs.irc = 0; ipl_fetch (); { uae_s8 dst = x_get_byte (dsta); get_word_ce000_prefetch (10); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); x_put_byte (dsta, dst); }}}} m68k_incpc (8); } /* 24 (5/1) */ /* BSET.B #.W,(d16,PC) */ void REGPARAM2 CPUFUNC(op_08fa_12)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_word_ce000_prefetch (6); regs.ir = regs.irc; regs.irc = 0; ipl_fetch (); { uae_s8 dst = x_get_byte (dsta); get_word_ce000_prefetch (8); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); x_put_byte (dsta, dst); }}}} m68k_incpc (6); } /* 20 (4/1) */ /* BSET.B #.W,(d8,PC,Xn) */ void REGPARAM2 CPUFUNC(op_08fb_12)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr tmppc; uaecptr dsta; tmppc = m68k_getpc () + 4; do_cycles_ce000 (2); dsta = get_disp_ea_000 (tmppc, get_word_ce000_prefetch (6)); regs.ir = regs.irc; regs.irc = 0; ipl_fetch (); { uae_s8 dst = x_get_byte (dsta); get_word_ce000_prefetch (8); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); x_put_byte (dsta, dst); }}}} m68k_incpc (6); } /* 22 (4/1) */ /* EOR.B #.B,Dn */ void REGPARAM2 CPUFUNC(op_0a00_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce000_prefetch (4); { uae_s8 dst = m68k_dreg (regs, dstreg); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}} m68k_incpc (4); } /* 8 (2/0) */ /* EOR.B #.B,(An) */ void REGPARAM2 CPUFUNC(op_0a10_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce000_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); x_put_byte (dsta, src); }}}} m68k_incpc (4); } /* 16 (3/1) */ /* EOR.B #.B,(An)+ */ void REGPARAM2 CPUFUNC(op_0a18_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce000_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); x_put_byte (dsta, src); }}}} m68k_incpc (4); } /* 16 (3/1) */ /* EOR.B #.B,-(An) */ void REGPARAM2 CPUFUNC(op_0a20_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce000_prefetch (4); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; do_cycles_ce000 (2); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); x_put_byte (dsta, src); }}}} m68k_incpc (4); } /* 18 (3/1) */ /* EOR.B #.B,(d16,An) */ void REGPARAM2 CPUFUNC(op_0a28_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce000_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (6); { uae_s8 dst = x_get_byte (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); x_put_byte (dsta, src); }}}} m68k_incpc (6); } /* 20 (4/1) */ /* EOR.B #.B,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_0a30_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce000_prefetch (4); { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (6)); { uae_s8 dst = x_get_byte (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); x_put_byte (dsta, src); }}}} m68k_incpc (6); } /* 22 (4/1) */ /* EOR.B #.B,(xxx).W */ void REGPARAM2 CPUFUNC(op_0a38_12)(uae_u32 opcode) { {{ uae_s8 src = (uae_u8)get_word_ce000_prefetch (4); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (6); { uae_s8 dst = x_get_byte (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); x_put_byte (dsta, src); }}}} m68k_incpc (6); } /* 20 (4/1) */ /* EOR.B #.B,(xxx).L */ void REGPARAM2 CPUFUNC(op_0a39_12)(uae_u32 opcode) { {{ uae_s8 src = (uae_u8)get_word_ce000_prefetch (4); { uaecptr dsta; dsta = get_word_ce000_prefetch (6) << 16; dsta |= get_word_ce000_prefetch (8); { uae_s8 dst = x_get_byte (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (10); x_put_byte (dsta, src); }}}} m68k_incpc (8); } /* 24 (5/1) */ /* EORSR.B #.W */ void REGPARAM2 CPUFUNC(op_0a3c_12)(uae_u32 opcode) { { MakeSR (); { uae_s16 src = get_word_ce000_prefetch (4); x_get_iword (6); src &= 0xFF; do_cycles_ce000 (8); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); regs.sr ^= src; MakeFromSR (); }} m68k_incpc (4); } /* 20 (3/0) */ /* EOR.W #.W,Dn */ void REGPARAM2 CPUFUNC(op_0a40_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uae_s16 dst = m68k_dreg (regs, dstreg); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}} m68k_incpc (4); } /* 8 (2/0) */ /* EOR.W #.W,(An) */ void REGPARAM2 CPUFUNC(op_0a50_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel3931; } {{ uae_s16 dst = x_get_word (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); x_put_word (dsta, src); }}}}} m68k_incpc (4); endlabel3931: ; } /* 16 (3/1) */ /* EOR.W #.W,(An)+ */ void REGPARAM2 CPUFUNC(op_0a58_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel3932; } {{ uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) += 2; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); x_put_word (dsta, src); }}}}} m68k_incpc (4); endlabel3932: ; } /* 16 (3/1) */ /* EOR.W #.W,-(An) */ void REGPARAM2 CPUFUNC(op_0a60_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; do_cycles_ce000 (2); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel3933; } {{ uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) = dsta; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); x_put_word (dsta, src); }}}}} m68k_incpc (4); endlabel3933: ; } /* 18 (3/1) */ /* EOR.W #.W,(d16,An) */ void REGPARAM2 CPUFUNC(op_0a68_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (6); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel3934; } {{ uae_s16 dst = x_get_word (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); x_put_word (dsta, src); }}}}} m68k_incpc (6); endlabel3934: ; } /* 20 (4/1) */ /* EOR.W #.W,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_0a70_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (6)); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel3935; } {{ uae_s16 dst = x_get_word (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); x_put_word (dsta, src); }}}}} m68k_incpc (6); endlabel3935: ; } /* 22 (4/1) */ /* EOR.W #.W,(xxx).W */ void REGPARAM2 CPUFUNC(op_0a78_12)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (6); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel3936; } {{ uae_s16 dst = x_get_word (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); x_put_word (dsta, src); }}}}} m68k_incpc (6); endlabel3936: ; } /* 20 (4/1) */ /* EOR.W #.W,(xxx).L */ void REGPARAM2 CPUFUNC(op_0a79_12)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta; dsta = get_word_ce000_prefetch (6) << 16; dsta |= get_word_ce000_prefetch (8); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel3937; } {{ uae_s16 dst = x_get_word (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (10); x_put_word (dsta, src); }}}}} m68k_incpc (8); endlabel3937: ; } /* 24 (5/1) */ /* EORSR.W #.W */ void REGPARAM2 CPUFUNC(op_0a7c_12)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel3938; } { MakeSR (); { uae_s16 src = get_word_ce000_prefetch (4); x_get_iword (6); do_cycles_ce000 (8); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); regs.sr ^= src; MakeFromSR (); }}} m68k_incpc (4); endlabel3938: ; } /* 20 (3/0) */ /* EOR.L #.L,Dn */ void REGPARAM2 CPUFUNC(op_0a80_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src; src = get_word_ce000_prefetch (4) << 16; src |= get_word_ce000_prefetch (6); { uae_s32 dst = m68k_dreg (regs, dstreg); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); do_cycles_ce000 (4); m68k_dreg (regs, dstreg) = (src); }}} m68k_incpc (6); } /* 16 (3/0) */ #endif #ifdef PART_2 /* EOR.L #.L,(An) */ void REGPARAM2 CPUFUNC(op_0a90_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src; src = get_word_ce000_prefetch (4) << 16; src |= get_word_ce000_prefetch (6); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel3940; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); x_put_word (dsta + 2, src); x_put_word (dsta, src >> 16); }}}}} m68k_incpc (6); endlabel3940: ; } /* 28 (5/2) */ /* EOR.L #.L,(An)+ */ void REGPARAM2 CPUFUNC(op_0a98_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src; src = get_word_ce000_prefetch (4) << 16; src |= get_word_ce000_prefetch (6); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel3941; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); m68k_areg (regs, dstreg) += 4; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); x_put_word (dsta + 2, src); x_put_word (dsta, src >> 16); }}}}} m68k_incpc (6); endlabel3941: ; } /* 28 (5/2) */ /* EOR.L #.L,-(An) */ void REGPARAM2 CPUFUNC(op_0aa0_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src; src = get_word_ce000_prefetch (4) << 16; src |= get_word_ce000_prefetch (6); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; do_cycles_ce000 (2); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel3942; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); m68k_areg (regs, dstreg) = dsta; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); x_put_word (dsta + 2, src); x_put_word (dsta, src >> 16); }}}}} m68k_incpc (6); endlabel3942: ; } /* 30 (5/2) */ /* EOR.L #.L,(d16,An) */ void REGPARAM2 CPUFUNC(op_0aa8_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src; src = get_word_ce000_prefetch (4) << 16; src |= get_word_ce000_prefetch (6); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (8); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel3943; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (10); x_put_word (dsta + 2, src); x_put_word (dsta, src >> 16); }}}}} m68k_incpc (8); endlabel3943: ; } /* 32 (6/2) */ /* EOR.L #.L,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_0ab0_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src; src = get_word_ce000_prefetch (4) << 16; src |= get_word_ce000_prefetch (6); { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (8)); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel3944; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (10); x_put_word (dsta + 2, src); x_put_word (dsta, src >> 16); }}}}} m68k_incpc (8); endlabel3944: ; } /* 34 (6/2) */ /* EOR.L #.L,(xxx).W */ void REGPARAM2 CPUFUNC(op_0ab8_12)(uae_u32 opcode) { {{ uae_s32 src; src = get_word_ce000_prefetch (4) << 16; src |= get_word_ce000_prefetch (6); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (8); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel3945; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (10); x_put_word (dsta + 2, src); x_put_word (dsta, src >> 16); }}}}} m68k_incpc (8); endlabel3945: ; } /* 32 (6/2) */ /* EOR.L #.L,(xxx).L */ void REGPARAM2 CPUFUNC(op_0ab9_12)(uae_u32 opcode) { {{ uae_s32 src; src = get_word_ce000_prefetch (4) << 16; src |= get_word_ce000_prefetch (6); { uaecptr dsta; dsta = get_word_ce000_prefetch (8) << 16; dsta |= get_word_ce000_prefetch (10); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel3946; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (12); x_put_word (dsta + 2, src); x_put_word (dsta, src >> 16); }}}}} m68k_incpc (10); endlabel3946: ; } /* 36 (7/2) */ /* CMP.B #.B,Dn */ void REGPARAM2 CPUFUNC(op_0c00_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce000_prefetch (4); { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpc (4); } /* 8 (2/0) */ /* CMP.B #.B,(An) */ void REGPARAM2 CPUFUNC(op_0c10_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce000_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (4); } /* 12 (3/0) */ /* CMP.B #.B,(An)+ */ void REGPARAM2 CPUFUNC(op_0c18_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce000_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (4); } /* 12 (3/0) */ /* CMP.B #.B,-(An) */ void REGPARAM2 CPUFUNC(op_0c20_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce000_prefetch (4); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; do_cycles_ce000 (2); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (4); } /* 14 (3/0) */ /* CMP.B #.B,(d16,An) */ void REGPARAM2 CPUFUNC(op_0c28_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce000_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (6); { uae_s8 dst = x_get_byte (dsta); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (6); } /* 16 (4/0) */ /* CMP.B #.B,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_0c30_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_ce000_prefetch (4); { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (6)); { uae_s8 dst = x_get_byte (dsta); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (6); } /* 18 (4/0) */ /* CMP.B #.B,(xxx).W */ void REGPARAM2 CPUFUNC(op_0c38_12)(uae_u32 opcode) { {{ uae_s8 src = (uae_u8)get_word_ce000_prefetch (4); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (6); { uae_s8 dst = x_get_byte (dsta); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (6); } /* 16 (4/0) */ /* CMP.B #.B,(xxx).L */ void REGPARAM2 CPUFUNC(op_0c39_12)(uae_u32 opcode) { {{ uae_s8 src = (uae_u8)get_word_ce000_prefetch (4); { uaecptr dsta; dsta = get_word_ce000_prefetch (6) << 16; dsta |= get_word_ce000_prefetch (8); { uae_s8 dst = x_get_byte (dsta); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (10); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (8); } /* 20 (5/0) */ /* CMP.W #.W,Dn */ void REGPARAM2 CPUFUNC(op_0c40_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpc (4); } /* 8 (2/0) */ /* CMP.W #.W,(An) */ void REGPARAM2 CPUFUNC(op_0c50_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel3956; } {{ uae_s16 dst = x_get_word (dsta); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (4); endlabel3956: ; } /* 12 (3/0) */ /* CMP.W #.W,(An)+ */ void REGPARAM2 CPUFUNC(op_0c58_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel3957; } {{ uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) += 2; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (4); endlabel3957: ; } /* 12 (3/0) */ /* CMP.W #.W,-(An) */ void REGPARAM2 CPUFUNC(op_0c60_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; do_cycles_ce000 (2); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel3958; } {{ uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (4); endlabel3958: ; } /* 14 (3/0) */ /* CMP.W #.W,(d16,An) */ void REGPARAM2 CPUFUNC(op_0c68_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (6); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel3959; } {{ uae_s16 dst = x_get_word (dsta); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (6); endlabel3959: ; } /* 16 (4/0) */ /* CMP.W #.W,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_0c70_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (6)); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel3960; } {{ uae_s16 dst = x_get_word (dsta); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (6); endlabel3960: ; } /* 18 (4/0) */ /* CMP.W #.W,(xxx).W */ void REGPARAM2 CPUFUNC(op_0c78_12)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (6); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel3961; } {{ uae_s16 dst = x_get_word (dsta); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (6); endlabel3961: ; } /* 16 (4/0) */ /* CMP.W #.W,(xxx).L */ void REGPARAM2 CPUFUNC(op_0c79_12)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta; dsta = get_word_ce000_prefetch (6) << 16; dsta |= get_word_ce000_prefetch (8); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel3962; } {{ uae_s16 dst = x_get_word (dsta); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (10); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (8); endlabel3962: ; } /* 20 (5/0) */ /* CMP.L #.L,Dn */ void REGPARAM2 CPUFUNC(op_0c80_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src; src = get_word_ce000_prefetch (4) << 16; src |= get_word_ce000_prefetch (6); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); do_cycles_ce000 (2); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpc (6); } /* 14 (3/0) */ /* CMP.L #.L,(An) */ void REGPARAM2 CPUFUNC(op_0c90_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src; src = get_word_ce000_prefetch (4) << 16; src |= get_word_ce000_prefetch (6); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel3964; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (6); endlabel3964: ; } /* 20 (5/0) */ /* CMP.L #.L,(An)+ */ void REGPARAM2 CPUFUNC(op_0c98_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src; src = get_word_ce000_prefetch (4) << 16; src |= get_word_ce000_prefetch (6); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel3965; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); m68k_areg (regs, dstreg) += 4; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (6); endlabel3965: ; } /* 20 (5/0) */ /* CMP.L #.L,-(An) */ void REGPARAM2 CPUFUNC(op_0ca0_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src; src = get_word_ce000_prefetch (4) << 16; src |= get_word_ce000_prefetch (6); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; do_cycles_ce000 (2); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel3966; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (6); endlabel3966: ; } /* 22 (5/0) */ /* CMP.L #.L,(d16,An) */ void REGPARAM2 CPUFUNC(op_0ca8_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src; src = get_word_ce000_prefetch (4) << 16; src |= get_word_ce000_prefetch (6); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (8); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel3967; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (10); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (8); endlabel3967: ; } /* 24 (6/0) */ /* CMP.L #.L,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_0cb0_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src; src = get_word_ce000_prefetch (4) << 16; src |= get_word_ce000_prefetch (6); { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (8)); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel3968; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (10); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (8); endlabel3968: ; } /* 26 (6/0) */ /* CMP.L #.L,(xxx).W */ void REGPARAM2 CPUFUNC(op_0cb8_12)(uae_u32 opcode) { {{ uae_s32 src; src = get_word_ce000_prefetch (4) << 16; src |= get_word_ce000_prefetch (6); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (8); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel3969; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (10); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (8); endlabel3969: ; } /* 24 (6/0) */ /* CMP.L #.L,(xxx).L */ void REGPARAM2 CPUFUNC(op_0cb9_12)(uae_u32 opcode) { {{ uae_s32 src; src = get_word_ce000_prefetch (4) << 16; src |= get_word_ce000_prefetch (6); { uaecptr dsta; dsta = get_word_ce000_prefetch (8) << 16; dsta |= get_word_ce000_prefetch (10); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel3970; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (12); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (10); endlabel3970: ; } /* 28 (7/0) */ /* MOVE.B Dn,Dn */ void REGPARAM2 CPUFUNC(op_1000_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); m68k_incpc (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}} /* 4 (1/0) */ /* MOVE.B (An),Dn */ void REGPARAM2 CPUFUNC(op_1010_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); m68k_incpc (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}} /* 8 (2/0) */ /* MOVE.B (An)+,Dn */ void REGPARAM2 CPUFUNC(op_1018_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); m68k_incpc (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}} /* 8 (2/0) */ /* MOVE.B -(An),Dn */ void REGPARAM2 CPUFUNC(op_1020_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; do_cycles_ce000 (2); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); m68k_incpc (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}} /* 10 (2/0) */ /* MOVE.B (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_1028_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}} /* 12 (3/0) */ /* MOVE.B (d8,An,Xn),Dn */ void REGPARAM2 CPUFUNC(op_1030_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); { uae_s8 src = x_get_byte (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}} /* 14 (3/0) */ /* MOVE.B (xxx).W,Dn */ void REGPARAM2 CPUFUNC(op_1038_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}} /* 12 (3/0) */ /* MOVE.B (xxx).L,Dn */ void REGPARAM2 CPUFUNC(op_1039_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); { uae_s8 src = x_get_byte (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); m68k_incpc (6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}} /* 16 (4/0) */ /* MOVE.B (d16,PC),Dn */ void REGPARAM2 CPUFUNC(op_103a_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}} /* 12 (3/0) */ /* MOVE.B (d8,PC,Xn),Dn */ void REGPARAM2 CPUFUNC(op_103b_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; do_cycles_ce000 (2); srca = get_disp_ea_000 (tmppc, get_word_ce000_prefetch (4)); { uae_s8 src = x_get_byte (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}} /* 14 (3/0) */ /* MOVE.B #.B,Dn */ void REGPARAM2 CPUFUNC(op_103c_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = (uae_u8)get_word_ce000_prefetch (4); { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}} /* 8 (2/0) */ /* MOVE.B Dn,(An) */ void REGPARAM2 CPUFUNC(op_1080_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}} /* 8 (1/1) */ /* MOVE.B (An),(An) */ void REGPARAM2 CPUFUNC(op_1090_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}} /* 12 (2/1) */ /* MOVE.B (An)+,(An) */ void REGPARAM2 CPUFUNC(op_1098_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}} /* 12 (2/1) */ /* MOVE.B -(An),(An) */ void REGPARAM2 CPUFUNC(op_10a0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; do_cycles_ce000 (2); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}} /* 14 (2/1) */ /* MOVE.B (d16,An),(An) */ void REGPARAM2 CPUFUNC(op_10a8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}} /* 16 (3/1) */ /* MOVE.B (d8,An,Xn),(An) */ void REGPARAM2 CPUFUNC(op_10b0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}} /* 18 (3/1) */ /* MOVE.B (xxx).W,(An) */ void REGPARAM2 CPUFUNC(op_10b8_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}} /* 16 (3/1) */ /* MOVE.B (xxx).L,(An) */ void REGPARAM2 CPUFUNC(op_10b9_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}} /* 20 (4/1) */ /* MOVE.B (d16,PC),(An) */ void REGPARAM2 CPUFUNC(op_10ba_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}} /* 16 (3/1) */ /* MOVE.B (d8,PC,Xn),(An) */ void REGPARAM2 CPUFUNC(op_10bb_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; do_cycles_ce000 (2); srca = get_disp_ea_000 (tmppc, get_word_ce000_prefetch (4)); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}} /* 18 (3/1) */ /* MOVE.B #.B,(An) */ void REGPARAM2 CPUFUNC(op_10bc_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = (uae_u8)get_word_ce000_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}} /* 12 (2/1) */ /* MOVE.B Dn,(An)+ */ void REGPARAM2 CPUFUNC(op_10c0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}} /* 8 (1/1) */ /* MOVE.B (An),(An)+ */ void REGPARAM2 CPUFUNC(op_10d0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}} /* 12 (2/1) */ /* MOVE.B (An)+,(An)+ */ void REGPARAM2 CPUFUNC(op_10d8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}} /* 12 (2/1) */ /* MOVE.B -(An),(An)+ */ void REGPARAM2 CPUFUNC(op_10e0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; do_cycles_ce000 (2); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}} /* 14 (2/1) */ /* MOVE.B (d16,An),(An)+ */ void REGPARAM2 CPUFUNC(op_10e8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}} /* 16 (3/1) */ /* MOVE.B (d8,An,Xn),(An)+ */ void REGPARAM2 CPUFUNC(op_10f0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}} /* 18 (3/1) */ /* MOVE.B (xxx).W,(An)+ */ void REGPARAM2 CPUFUNC(op_10f8_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}} /* 16 (3/1) */ /* MOVE.B (xxx).L,(An)+ */ void REGPARAM2 CPUFUNC(op_10f9_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}} /* 20 (4/1) */ /* MOVE.B (d16,PC),(An)+ */ void REGPARAM2 CPUFUNC(op_10fa_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}} /* 16 (3/1) */ /* MOVE.B (d8,PC,Xn),(An)+ */ void REGPARAM2 CPUFUNC(op_10fb_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; do_cycles_ce000 (2); srca = get_disp_ea_000 (tmppc, get_word_ce000_prefetch (4)); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}} /* 18 (3/1) */ /* MOVE.B #.B,(An)+ */ void REGPARAM2 CPUFUNC(op_10fc_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = (uae_u8)get_word_ce000_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}} /* 12 (2/1) */ /* MOVE.B Dn,-(An) */ void REGPARAM2 CPUFUNC(op_1100_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (2); }}}} /* 8 (1/1) */ /* MOVE.B (An),-(An) */ void REGPARAM2 CPUFUNC(op_1110_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (2); }}}}} /* 12 (2/1) */ /* MOVE.B (An)+,-(An) */ void REGPARAM2 CPUFUNC(op_1118_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (2); }}}}} /* 12 (2/1) */ /* MOVE.B -(An),-(An) */ void REGPARAM2 CPUFUNC(op_1120_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; do_cycles_ce000 (2); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (2); }}}}} /* 14 (2/1) */ /* MOVE.B (d16,An),-(An) */ void REGPARAM2 CPUFUNC(op_1128_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); }}}}} /* 16 (3/1) */ /* MOVE.B (d8,An,Xn),-(An) */ void REGPARAM2 CPUFUNC(op_1130_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); { uae_s8 src = x_get_byte (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); }}}}} /* 18 (3/1) */ /* MOVE.B (xxx).W,-(An) */ void REGPARAM2 CPUFUNC(op_1138_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); }}}}} /* 16 (3/1) */ /* MOVE.B (xxx).L,-(An) */ void REGPARAM2 CPUFUNC(op_1139_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); { uae_s8 src = x_get_byte (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (6); }}}}} /* 20 (4/1) */ /* MOVE.B (d16,PC),-(An) */ void REGPARAM2 CPUFUNC(op_113a_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); }}}}} /* 16 (3/1) */ /* MOVE.B (d8,PC,Xn),-(An) */ void REGPARAM2 CPUFUNC(op_113b_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; do_cycles_ce000 (2); srca = get_disp_ea_000 (tmppc, get_word_ce000_prefetch (4)); { uae_s8 src = x_get_byte (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); }}}}} /* 18 (3/1) */ /* MOVE.B #.B,-(An) */ void REGPARAM2 CPUFUNC(op_113c_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = (uae_u8)get_word_ce000_prefetch (4); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); }}}} /* 12 (2/1) */ /* MOVE.B Dn,(d16,An) */ void REGPARAM2 CPUFUNC(op_1140_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}} /* 12 (2/1) */ /* MOVE.B (An),(d16,An) */ void REGPARAM2 CPUFUNC(op_1150_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}} /* 16 (3/1) */ /* MOVE.B (An)+,(d16,An) */ void REGPARAM2 CPUFUNC(op_1158_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}} /* 16 (3/1) */ /* MOVE.B -(An),(d16,An) */ void REGPARAM2 CPUFUNC(op_1160_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; do_cycles_ce000 (2); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}} /* 18 (3/1) */ /* MOVE.B (d16,An),(d16,An) */ void REGPARAM2 CPUFUNC(op_1168_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}} /* 20 (4/1) */ /* MOVE.B (d8,An,Xn),(d16,An) */ void REGPARAM2 CPUFUNC(op_1170_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}} /* 22 (4/1) */ /* MOVE.B (xxx).W,(d16,An) */ void REGPARAM2 CPUFUNC(op_1178_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}} /* 20 (4/1) */ /* MOVE.B (xxx).L,(d16,An) */ void REGPARAM2 CPUFUNC(op_1179_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (8); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (8); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}} /* 24 (5/1) */ /* MOVE.B (d16,PC),(d16,An) */ void REGPARAM2 CPUFUNC(op_117a_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}} /* 20 (4/1) */ /* MOVE.B (d8,PC,Xn),(d16,An) */ void REGPARAM2 CPUFUNC(op_117b_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; do_cycles_ce000 (2); srca = get_disp_ea_000 (tmppc, get_word_ce000_prefetch (4)); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}} /* 22 (4/1) */ /* MOVE.B #.B,(d16,An) */ void REGPARAM2 CPUFUNC(op_117c_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = (uae_u8)get_word_ce000_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}} /* 16 (3/1) */ /* MOVE.B Dn,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_1180_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (4)); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}} /* 14 (2/1) */ /* MOVE.B (An),(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_1190_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (4)); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}} /* 18 (3/1) */ /* MOVE.B (An)+,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_1198_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (4)); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}} /* 18 (3/1) */ /* MOVE.B -(An),(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_11a0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; do_cycles_ce000 (2); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (4)); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}} /* 20 (3/1) */ /* MOVE.B (d16,An),(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_11a8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (6)); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}} /* 22 (4/1) */ /* MOVE.B (d8,An,Xn),(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_11b0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); { uae_s8 src = x_get_byte (srca); { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (6)); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}} /* 24 (4/1) */ /* MOVE.B (xxx).W,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_11b8_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (6)); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}} /* 22 (4/1) */ /* MOVE.B (xxx).L,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_11b9_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); { uae_s8 src = x_get_byte (srca); { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (8)); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (8); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}} /* 26 (5/1) */ /* MOVE.B (d16,PC),(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_11ba_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (6)); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}} /* 22 (4/1) */ /* MOVE.B (d8,PC,Xn),(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_11bb_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; do_cycles_ce000 (2); srca = get_disp_ea_000 (tmppc, get_word_ce000_prefetch (4)); { uae_s8 src = x_get_byte (srca); { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (6)); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}} /* 24 (4/1) */ /* MOVE.B #.B,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_11bc_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = (uae_u8)get_word_ce000_prefetch (4); { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (6)); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}} /* 18 (3/1) */ /* MOVE.B Dn,(xxx).W */ void REGPARAM2 CPUFUNC(op_11c0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}} /* 12 (2/1) */ /* MOVE.B (An),(xxx).W */ void REGPARAM2 CPUFUNC(op_11d0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}} /* 16 (3/1) */ /* MOVE.B (An)+,(xxx).W */ void REGPARAM2 CPUFUNC(op_11d8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}} /* 16 (3/1) */ /* MOVE.B -(An),(xxx).W */ void REGPARAM2 CPUFUNC(op_11e0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; do_cycles_ce000 (2); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}} /* 18 (3/1) */ /* MOVE.B (d16,An),(xxx).W */ void REGPARAM2 CPUFUNC(op_11e8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}} /* 20 (4/1) */ /* MOVE.B (d8,An,Xn),(xxx).W */ void REGPARAM2 CPUFUNC(op_11f0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}} /* 22 (4/1) */ /* MOVE.B (xxx).W,(xxx).W */ void REGPARAM2 CPUFUNC(op_11f8_12)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}} /* 20 (4/1) */ /* MOVE.B (xxx).L,(xxx).W */ void REGPARAM2 CPUFUNC(op_11f9_12)(uae_u32 opcode) { {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (8); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (8); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}} /* 24 (5/1) */ /* MOVE.B (d16,PC),(xxx).W */ void REGPARAM2 CPUFUNC(op_11fa_12)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}} /* 20 (4/1) */ /* MOVE.B (d8,PC,Xn),(xxx).W */ void REGPARAM2 CPUFUNC(op_11fb_12)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; do_cycles_ce000 (2); srca = get_disp_ea_000 (tmppc, get_word_ce000_prefetch (4)); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}} /* 22 (4/1) */ /* MOVE.B #.B,(xxx).W */ void REGPARAM2 CPUFUNC(op_11fc_12)(uae_u32 opcode) { {{ uae_s8 src = (uae_u8)get_word_ce000_prefetch (4); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}} /* 16 (3/1) */ /* MOVE.B Dn,(xxx).L */ void REGPARAM2 CPUFUNC(op_13c0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = get_word_ce000_prefetch (4) << 16; dsta |= get_word_ce000_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}} /* 16 (3/1) */ /* MOVE.B (An),(xxx).L */ void REGPARAM2 CPUFUNC(op_13d0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { uaecptr dsta; dsta = get_word_ce000_prefetch (4) << 16; dsta |= regs.irc; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (6); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}} /* 20 (4/1) */ /* MOVE.B (An)+,(xxx).L */ void REGPARAM2 CPUFUNC(op_13d8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uaecptr dsta; dsta = get_word_ce000_prefetch (4) << 16; dsta |= regs.irc; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (6); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}} /* 20 (4/1) */ /* MOVE.B -(An),(xxx).L */ void REGPARAM2 CPUFUNC(op_13e0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; do_cycles_ce000 (2); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = get_word_ce000_prefetch (4) << 16; dsta |= regs.irc; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (6); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}} /* 22 (4/1) */ /* MOVE.B (d16,An),(xxx).L */ void REGPARAM2 CPUFUNC(op_13e8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); { uaecptr dsta; dsta = get_word_ce000_prefetch (6) << 16; dsta |= regs.irc; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (8); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}} /* 24 (5/1) */ /* MOVE.B (d8,An,Xn),(xxx).L */ void REGPARAM2 CPUFUNC(op_13f0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); { uae_s8 src = x_get_byte (srca); { uaecptr dsta; dsta = get_word_ce000_prefetch (6) << 16; dsta |= regs.irc; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (8); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}} /* 26 (5/1) */ /* MOVE.B (xxx).W,(xxx).L */ void REGPARAM2 CPUFUNC(op_13f8_12)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); { uaecptr dsta; dsta = get_word_ce000_prefetch (6) << 16; dsta |= regs.irc; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (8); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}} /* 24 (5/1) */ /* MOVE.B (xxx).L,(xxx).L */ void REGPARAM2 CPUFUNC(op_13f9_12)(uae_u32 opcode) { {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); { uae_s8 src = x_get_byte (srca); { uaecptr dsta; dsta = get_word_ce000_prefetch (8) << 16; dsta |= regs.irc; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (10); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}} /* 28 (6/1) */ /* MOVE.B (d16,PC),(xxx).L */ void REGPARAM2 CPUFUNC(op_13fa_12)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); { uaecptr dsta; dsta = get_word_ce000_prefetch (6) << 16; dsta |= regs.irc; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (8); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}} /* 24 (5/1) */ /* MOVE.B (d8,PC,Xn),(xxx).L */ void REGPARAM2 CPUFUNC(op_13fb_12)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; do_cycles_ce000 (2); srca = get_disp_ea_000 (tmppc, get_word_ce000_prefetch (4)); { uae_s8 src = x_get_byte (srca); { uaecptr dsta; dsta = get_word_ce000_prefetch (6) << 16; dsta |= regs.irc; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (8); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}} /* 26 (5/1) */ /* MOVE.B #.B,(xxx).L */ void REGPARAM2 CPUFUNC(op_13fc_12)(uae_u32 opcode) { {{ uae_s8 src = (uae_u8)get_word_ce000_prefetch (4); { uaecptr dsta; dsta = get_word_ce000_prefetch (6) << 16; dsta |= get_word_ce000_prefetch (8); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (8); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}} /* 20 (4/1) */ /* MOVE.L Dn,Dn */ void REGPARAM2 CPUFUNC(op_2000_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpc (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}} /* 4 (1/0) */ /* MOVE.L An,Dn */ void REGPARAM2 CPUFUNC(op_2008_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpc (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}} /* 4 (1/0) */ /* MOVE.L (An),Dn */ void REGPARAM2 CPUFUNC(op_2010_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4061; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpc (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}endlabel4061: ; } /* 12 (3/0) */ /* MOVE.L (An)+,Dn */ void REGPARAM2 CPUFUNC(op_2018_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4062; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); m68k_areg (regs, srcreg) += 4; { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpc (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}endlabel4062: ; } /* 12 (3/0) */ /* MOVE.L -(An),Dn */ void REGPARAM2 CPUFUNC(op_2020_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; do_cycles_ce000 (2); if (srca & 1) { exception3 (opcode, srca); goto endlabel4063; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); m68k_areg (regs, srcreg) = srca; { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpc (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}endlabel4063: ; } /* 14 (3/0) */ /* MOVE.L (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_2028_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4064; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}endlabel4064: ; } /* 16 (4/0) */ /* MOVE.L (d8,An,Xn),Dn */ void REGPARAM2 CPUFUNC(op_2030_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4065; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}endlabel4065: ; } /* 18 (4/0) */ /* MOVE.L (xxx).W,Dn */ void REGPARAM2 CPUFUNC(op_2038_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4066; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}endlabel4066: ; } /* 16 (4/0) */ /* MOVE.L (xxx).L,Dn */ void REGPARAM2 CPUFUNC(op_2039_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); if (srca & 1) { m68k_incpc (4); exception3 (opcode, srca); goto endlabel4067; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpc (6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}endlabel4067: ; } /* 20 (5/0) */ /* MOVE.L (d16,PC),Dn */ void REGPARAM2 CPUFUNC(op_203a_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4068; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}endlabel4068: ; } /* 16 (4/0) */ /* MOVE.L (d8,PC,Xn),Dn */ void REGPARAM2 CPUFUNC(op_203b_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; do_cycles_ce000 (2); srca = get_disp_ea_000 (tmppc, get_word_ce000_prefetch (4)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4069; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}endlabel4069: ; } /* 18 (4/0) */ /* MOVE.L #.L,Dn */ void REGPARAM2 CPUFUNC(op_203c_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src; src = get_word_ce000_prefetch (4) << 16; src |= get_word_ce000_prefetch (6); { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpc (6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}} /* 12 (3/0) */ /* MOVEA.L Dn,An */ void REGPARAM2 CPUFUNC(op_2040_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { m68k_areg (regs, dstreg) = (src); m68k_incpc (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}} /* 4 (1/0) */ /* MOVEA.L An,An */ void REGPARAM2 CPUFUNC(op_2048_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { m68k_areg (regs, dstreg) = (src); m68k_incpc (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}} /* 4 (1/0) */ /* MOVEA.L (An),An */ void REGPARAM2 CPUFUNC(op_2050_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4073; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { m68k_areg (regs, dstreg) = (src); m68k_incpc (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}endlabel4073: ; } /* 12 (3/0) */ /* MOVEA.L (An)+,An */ void REGPARAM2 CPUFUNC(op_2058_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4074; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); m68k_areg (regs, srcreg) += 4; { m68k_areg (regs, dstreg) = (src); m68k_incpc (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}endlabel4074: ; } /* 12 (3/0) */ /* MOVEA.L -(An),An */ void REGPARAM2 CPUFUNC(op_2060_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; do_cycles_ce000 (2); if (srca & 1) { exception3 (opcode, srca); goto endlabel4075; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); m68k_areg (regs, srcreg) = srca; { m68k_areg (regs, dstreg) = (src); m68k_incpc (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}endlabel4075: ; } /* 14 (3/0) */ /* MOVEA.L (d16,An),An */ void REGPARAM2 CPUFUNC(op_2068_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4076; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { m68k_areg (regs, dstreg) = (src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}endlabel4076: ; } /* 16 (4/0) */ /* MOVEA.L (d8,An,Xn),An */ void REGPARAM2 CPUFUNC(op_2070_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4077; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { m68k_areg (regs, dstreg) = (src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}endlabel4077: ; } /* 18 (4/0) */ /* MOVEA.L (xxx).W,An */ void REGPARAM2 CPUFUNC(op_2078_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4078; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { m68k_areg (regs, dstreg) = (src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}endlabel4078: ; } /* 16 (4/0) */ /* MOVEA.L (xxx).L,An */ void REGPARAM2 CPUFUNC(op_2079_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); if (srca & 1) { m68k_incpc (4); exception3 (opcode, srca); goto endlabel4079; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { m68k_areg (regs, dstreg) = (src); m68k_incpc (6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}endlabel4079: ; } /* 20 (5/0) */ /* MOVEA.L (d16,PC),An */ void REGPARAM2 CPUFUNC(op_207a_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4080; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { m68k_areg (regs, dstreg) = (src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}endlabel4080: ; } /* 16 (4/0) */ /* MOVEA.L (d8,PC,Xn),An */ void REGPARAM2 CPUFUNC(op_207b_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; do_cycles_ce000 (2); srca = get_disp_ea_000 (tmppc, get_word_ce000_prefetch (4)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4081; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { m68k_areg (regs, dstreg) = (src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}endlabel4081: ; } /* 18 (4/0) */ /* MOVEA.L #.L,An */ void REGPARAM2 CPUFUNC(op_207c_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src; src = get_word_ce000_prefetch (4) << 16; src |= get_word_ce000_prefetch (6); { m68k_areg (regs, dstreg) = (src); m68k_incpc (6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}} /* 12 (3/0) */ /* MOVE.L Dn,(An) */ void REGPARAM2 CPUFUNC(op_2080_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel4083; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}endlabel4083: ; } /* 12 (1/2) */ /* MOVE.L An,(An) */ void REGPARAM2 CPUFUNC(op_2088_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel4084; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}endlabel4084: ; } /* 12 (1/2) */ /* MOVE.L (An),(An) */ void REGPARAM2 CPUFUNC(op_2090_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4085; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel4085; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4085: ; } /* 20 (3/2) */ /* MOVE.L (An)+,(An) */ void REGPARAM2 CPUFUNC(op_2098_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4086; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); m68k_areg (regs, srcreg) += 4; { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel4086; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4086: ; } /* 20 (3/2) */ /* MOVE.L -(An),(An) */ void REGPARAM2 CPUFUNC(op_20a0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; do_cycles_ce000 (2); if (srca & 1) { exception3 (opcode, srca); goto endlabel4087; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel4087; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4087: ; } /* 22 (3/2) */ /* MOVE.L (d16,An),(An) */ void REGPARAM2 CPUFUNC(op_20a8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4088; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel4088; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4088: ; } /* 24 (4/2) */ /* MOVE.L (d8,An,Xn),(An) */ void REGPARAM2 CPUFUNC(op_20b0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4089; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel4089; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4089: ; } /* 26 (4/2) */ /* MOVE.L (xxx).W,(An) */ void REGPARAM2 CPUFUNC(op_20b8_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4090; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel4090; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4090: ; } /* 24 (4/2) */ /* MOVE.L (xxx).L,(An) */ void REGPARAM2 CPUFUNC(op_20b9_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); if (srca & 1) { m68k_incpc (4); exception3 (opcode, srca); goto endlabel4091; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel4091; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4091: ; } /* 28 (5/2) */ /* MOVE.L (d16,PC),(An) */ void REGPARAM2 CPUFUNC(op_20ba_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4092; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel4092; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4092: ; } /* 24 (4/2) */ /* MOVE.L (d8,PC,Xn),(An) */ void REGPARAM2 CPUFUNC(op_20bb_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; do_cycles_ce000 (2); srca = get_disp_ea_000 (tmppc, get_word_ce000_prefetch (4)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4093; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel4093; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4093: ; } /* 26 (4/2) */ /* MOVE.L #.L,(An) */ void REGPARAM2 CPUFUNC(op_20bc_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src; src = get_word_ce000_prefetch (4) << 16; src |= get_word_ce000_prefetch (6); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel4094; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}endlabel4094: ; } /* 20 (3/2) */ /* MOVE.L Dn,(An)+ */ void REGPARAM2 CPUFUNC(op_20c0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel4095; } { m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}endlabel4095: ; } /* 12 (1/2) */ /* MOVE.L An,(An)+ */ void REGPARAM2 CPUFUNC(op_20c8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel4096; } { m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}endlabel4096: ; } /* 12 (1/2) */ /* MOVE.L (An),(An)+ */ void REGPARAM2 CPUFUNC(op_20d0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4097; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel4097; } { m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4097: ; } /* 20 (3/2) */ /* MOVE.L (An)+,(An)+ */ void REGPARAM2 CPUFUNC(op_20d8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4098; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); m68k_areg (regs, srcreg) += 4; { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel4098; } { m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4098: ; } /* 20 (3/2) */ /* MOVE.L -(An),(An)+ */ void REGPARAM2 CPUFUNC(op_20e0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; do_cycles_ce000 (2); if (srca & 1) { exception3 (opcode, srca); goto endlabel4099; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel4099; } { m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4099: ; } /* 22 (3/2) */ /* MOVE.L (d16,An),(An)+ */ void REGPARAM2 CPUFUNC(op_20e8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4100; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel4100; } { m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4100: ; } /* 24 (4/2) */ /* MOVE.L (d8,An,Xn),(An)+ */ void REGPARAM2 CPUFUNC(op_20f0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4101; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel4101; } { m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4101: ; } /* 26 (4/2) */ /* MOVE.L (xxx).W,(An)+ */ void REGPARAM2 CPUFUNC(op_20f8_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4102; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel4102; } { m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4102: ; } /* 24 (4/2) */ /* MOVE.L (xxx).L,(An)+ */ void REGPARAM2 CPUFUNC(op_20f9_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); if (srca & 1) { m68k_incpc (4); exception3 (opcode, srca); goto endlabel4103; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel4103; } { m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4103: ; } /* 28 (5/2) */ /* MOVE.L (d16,PC),(An)+ */ void REGPARAM2 CPUFUNC(op_20fa_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4104; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel4104; } { m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4104: ; } /* 24 (4/2) */ /* MOVE.L (d8,PC,Xn),(An)+ */ void REGPARAM2 CPUFUNC(op_20fb_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; do_cycles_ce000 (2); srca = get_disp_ea_000 (tmppc, get_word_ce000_prefetch (4)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4105; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel4105; } { m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4105: ; } /* 26 (4/2) */ /* MOVE.L #.L,(An)+ */ void REGPARAM2 CPUFUNC(op_20fc_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src; src = get_word_ce000_prefetch (4) << 16; src |= get_word_ce000_prefetch (6); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel4106; } { m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}endlabel4106: ; } /* 20 (3/2) */ /* MOVE.L Dn,-(An) */ void REGPARAM2 CPUFUNC(op_2100_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel4107; } { m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (2); }}}}endlabel4107: ; } /* 12 (1/2) */ /* MOVE.L An,-(An) */ void REGPARAM2 CPUFUNC(op_2108_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel4108; } { m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (2); }}}}endlabel4108: ; } /* 12 (1/2) */ /* MOVE.L (An),-(An) */ void REGPARAM2 CPUFUNC(op_2110_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4109; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel4109; } { m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (2); }}}}}}endlabel4109: ; } /* 20 (3/2) */ /* MOVE.L (An)+,-(An) */ void REGPARAM2 CPUFUNC(op_2118_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4110; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); m68k_areg (regs, srcreg) += 4; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel4110; } { m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (2); }}}}}}endlabel4110: ; } /* 20 (3/2) */ /* MOVE.L -(An),-(An) */ void REGPARAM2 CPUFUNC(op_2120_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; do_cycles_ce000 (2); if (srca & 1) { exception3 (opcode, srca); goto endlabel4111; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel4111; } { m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (2); }}}}}}endlabel4111: ; } /* 22 (3/2) */ /* MOVE.L (d16,An),-(An) */ void REGPARAM2 CPUFUNC(op_2128_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4112; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel4112; } { m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (4); }}}}}}endlabel4112: ; } /* 24 (4/2) */ /* MOVE.L (d8,An,Xn),-(An) */ void REGPARAM2 CPUFUNC(op_2130_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4113; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel4113; } { m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (4); }}}}}}endlabel4113: ; } /* 26 (4/2) */ /* MOVE.L (xxx).W,-(An) */ void REGPARAM2 CPUFUNC(op_2138_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4114; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel4114; } { m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (4); }}}}}}endlabel4114: ; } /* 24 (4/2) */ /* MOVE.L (xxx).L,-(An) */ void REGPARAM2 CPUFUNC(op_2139_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); if (srca & 1) { m68k_incpc (4); exception3 (opcode, srca); goto endlabel4115; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel4115; } { m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (6); }}}}}}endlabel4115: ; } /* 28 (5/2) */ /* MOVE.L (d16,PC),-(An) */ void REGPARAM2 CPUFUNC(op_213a_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4116; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel4116; } { m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (4); }}}}}}endlabel4116: ; } /* 24 (4/2) */ /* MOVE.L (d8,PC,Xn),-(An) */ void REGPARAM2 CPUFUNC(op_213b_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; do_cycles_ce000 (2); srca = get_disp_ea_000 (tmppc, get_word_ce000_prefetch (4)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4117; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel4117; } { m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (4); }}}}}}endlabel4117: ; } /* 26 (4/2) */ /* MOVE.L #.L,-(An) */ void REGPARAM2 CPUFUNC(op_213c_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src; src = get_word_ce000_prefetch (4) << 16; src |= get_word_ce000_prefetch (6); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel4118; } { m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (6); }}}}endlabel4118: ; } /* 20 (3/2) */ /* MOVE.L Dn,(d16,An) */ void REGPARAM2 CPUFUNC(op_2140_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel4119; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}endlabel4119: ; } /* 16 (2/2) */ /* MOVE.L An,(d16,An) */ void REGPARAM2 CPUFUNC(op_2148_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel4120; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}endlabel4120: ; } /* 16 (2/2) */ /* MOVE.L (An),(d16,An) */ void REGPARAM2 CPUFUNC(op_2150_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4121; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel4121; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4121: ; } /* 24 (4/2) */ /* MOVE.L (An)+,(d16,An) */ void REGPARAM2 CPUFUNC(op_2158_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4122; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); m68k_areg (regs, srcreg) += 4; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel4122; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4122: ; } /* 24 (4/2) */ /* MOVE.L -(An),(d16,An) */ void REGPARAM2 CPUFUNC(op_2160_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; do_cycles_ce000 (2); if (srca & 1) { exception3 (opcode, srca); goto endlabel4123; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel4123; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4123: ; } /* 26 (4/2) */ /* MOVE.L (d16,An),(d16,An) */ void REGPARAM2 CPUFUNC(op_2168_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4124; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (6); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel4124; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4124: ; } /* 28 (5/2) */ #endif #ifdef PART_3 /* MOVE.L (d8,An,Xn),(d16,An) */ void REGPARAM2 CPUFUNC(op_2170_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4125; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (6); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel4125; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4125: ; } /* 30 (5/2) */ /* MOVE.L (xxx).W,(d16,An) */ void REGPARAM2 CPUFUNC(op_2178_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4126; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (6); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel4126; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4126: ; } /* 28 (5/2) */ /* MOVE.L (xxx).L,(d16,An) */ void REGPARAM2 CPUFUNC(op_2179_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); if (srca & 1) { m68k_incpc (4); exception3 (opcode, srca); goto endlabel4127; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (8); if (dsta & 1) { m68k_incpc (8); exception3 (opcode, dsta); goto endlabel4127; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (8); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4127: ; } /* 32 (6/2) */ /* MOVE.L (d16,PC),(d16,An) */ void REGPARAM2 CPUFUNC(op_217a_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4128; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (6); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel4128; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4128: ; } /* 28 (5/2) */ /* MOVE.L (d8,PC,Xn),(d16,An) */ void REGPARAM2 CPUFUNC(op_217b_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; do_cycles_ce000 (2); srca = get_disp_ea_000 (tmppc, get_word_ce000_prefetch (4)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4129; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (6); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel4129; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4129: ; } /* 30 (5/2) */ /* MOVE.L #.L,(d16,An) */ void REGPARAM2 CPUFUNC(op_217c_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src; src = get_word_ce000_prefetch (4) << 16; src |= get_word_ce000_prefetch (6); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (8); if (dsta & 1) { m68k_incpc (8); exception3 (opcode, dsta); goto endlabel4130; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (8); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}endlabel4130: ; } /* 24 (4/2) */ /* MOVE.L Dn,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_2180_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (4)); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel4131; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}endlabel4131: ; } /* 18 (2/2) */ /* MOVE.L An,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_2188_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (4)); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel4132; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}endlabel4132: ; } /* 18 (2/2) */ /* MOVE.L (An),(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_2190_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4133; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (4)); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel4133; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4133: ; } /* 26 (4/2) */ /* MOVE.L (An)+,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_2198_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4134; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); m68k_areg (regs, srcreg) += 4; { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (4)); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel4134; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4134: ; } /* 26 (4/2) */ /* MOVE.L -(An),(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_21a0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; do_cycles_ce000 (2); if (srca & 1) { exception3 (opcode, srca); goto endlabel4135; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (4)); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel4135; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4135: ; } /* 28 (4/2) */ /* MOVE.L (d16,An),(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_21a8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4136; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (6)); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel4136; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4136: ; } /* 30 (5/2) */ /* MOVE.L (d8,An,Xn),(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_21b0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4137; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (6)); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel4137; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4137: ; } /* 32 (5/2) */ /* MOVE.L (xxx).W,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_21b8_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4138; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (6)); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel4138; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4138: ; } /* 30 (5/2) */ /* MOVE.L (xxx).L,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_21b9_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); if (srca & 1) { m68k_incpc (4); exception3 (opcode, srca); goto endlabel4139; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (8)); if (dsta & 1) { m68k_incpc (8); exception3 (opcode, dsta); goto endlabel4139; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (8); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4139: ; } /* 34 (6/2) */ /* MOVE.L (d16,PC),(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_21ba_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4140; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (6)); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel4140; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4140: ; } /* 30 (5/2) */ /* MOVE.L (d8,PC,Xn),(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_21bb_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; do_cycles_ce000 (2); srca = get_disp_ea_000 (tmppc, get_word_ce000_prefetch (4)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4141; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (6)); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel4141; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4141: ; } /* 32 (5/2) */ /* MOVE.L #.L,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_21bc_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src; src = get_word_ce000_prefetch (4) << 16; src |= get_word_ce000_prefetch (6); { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (8)); if (dsta & 1) { m68k_incpc (8); exception3 (opcode, dsta); goto endlabel4142; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (8); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}endlabel4142: ; } /* 26 (4/2) */ /* MOVE.L Dn,(xxx).W */ void REGPARAM2 CPUFUNC(op_21c0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel4143; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}endlabel4143: ; } /* 16 (2/2) */ /* MOVE.L An,(xxx).W */ void REGPARAM2 CPUFUNC(op_21c8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_areg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel4144; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}endlabel4144: ; } /* 16 (2/2) */ /* MOVE.L (An),(xxx).W */ void REGPARAM2 CPUFUNC(op_21d0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4145; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel4145; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4145: ; } /* 24 (4/2) */ /* MOVE.L (An)+,(xxx).W */ void REGPARAM2 CPUFUNC(op_21d8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4146; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); m68k_areg (regs, srcreg) += 4; { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel4146; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4146: ; } /* 24 (4/2) */ /* MOVE.L -(An),(xxx).W */ void REGPARAM2 CPUFUNC(op_21e0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; do_cycles_ce000 (2); if (srca & 1) { exception3 (opcode, srca); goto endlabel4147; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel4147; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4147: ; } /* 26 (4/2) */ /* MOVE.L (d16,An),(xxx).W */ void REGPARAM2 CPUFUNC(op_21e8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4148; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (6); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel4148; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4148: ; } /* 28 (5/2) */ /* MOVE.L (d8,An,Xn),(xxx).W */ void REGPARAM2 CPUFUNC(op_21f0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4149; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (6); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel4149; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4149: ; } /* 30 (5/2) */ /* MOVE.L (xxx).W,(xxx).W */ void REGPARAM2 CPUFUNC(op_21f8_12)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4150; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (6); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel4150; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4150: ; } /* 28 (5/2) */ /* MOVE.L (xxx).L,(xxx).W */ void REGPARAM2 CPUFUNC(op_21f9_12)(uae_u32 opcode) { {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); if (srca & 1) { m68k_incpc (4); exception3 (opcode, srca); goto endlabel4151; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (8); if (dsta & 1) { m68k_incpc (8); exception3 (opcode, dsta); goto endlabel4151; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (8); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4151: ; } /* 32 (6/2) */ /* MOVE.L (d16,PC),(xxx).W */ void REGPARAM2 CPUFUNC(op_21fa_12)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4152; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (6); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel4152; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4152: ; } /* 28 (5/2) */ /* MOVE.L (d8,PC,Xn),(xxx).W */ void REGPARAM2 CPUFUNC(op_21fb_12)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; do_cycles_ce000 (2); srca = get_disp_ea_000 (tmppc, get_word_ce000_prefetch (4)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4153; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (6); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel4153; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4153: ; } /* 30 (5/2) */ /* MOVE.L #.L,(xxx).W */ void REGPARAM2 CPUFUNC(op_21fc_12)(uae_u32 opcode) { {{ uae_s32 src; src = get_word_ce000_prefetch (4) << 16; src |= get_word_ce000_prefetch (6); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (8); if (dsta & 1) { m68k_incpc (8); exception3 (opcode, dsta); goto endlabel4154; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (8); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}endlabel4154: ; } /* 24 (4/2) */ /* MOVE.L Dn,(xxx).L */ void REGPARAM2 CPUFUNC(op_23c0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = get_word_ce000_prefetch (4) << 16; dsta |= get_word_ce000_prefetch (6); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel4155; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}endlabel4155: ; } /* 20 (3/2) */ /* MOVE.L An,(xxx).L */ void REGPARAM2 CPUFUNC(op_23c8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_areg (regs, srcreg); { uaecptr dsta; dsta = get_word_ce000_prefetch (4) << 16; dsta |= get_word_ce000_prefetch (6); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel4156; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}endlabel4156: ; } /* 20 (3/2) */ /* MOVE.L (An),(xxx).L */ void REGPARAM2 CPUFUNC(op_23d0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4157; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uaecptr dsta; dsta = get_word_ce000_prefetch (4) << 16; dsta |= regs.irc; if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel4157; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (6); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4157: ; } /* 28 (5/2) */ /* MOVE.L (An)+,(xxx).L */ void REGPARAM2 CPUFUNC(op_23d8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4158; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); m68k_areg (regs, srcreg) += 4; { uaecptr dsta; dsta = get_word_ce000_prefetch (4) << 16; dsta |= regs.irc; if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel4158; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (6); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4158: ; } /* 28 (5/2) */ /* MOVE.L -(An),(xxx).L */ void REGPARAM2 CPUFUNC(op_23e0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; do_cycles_ce000 (2); if (srca & 1) { exception3 (opcode, srca); goto endlabel4159; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = get_word_ce000_prefetch (4) << 16; dsta |= regs.irc; if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel4159; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (6); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4159: ; } /* 30 (5/2) */ /* MOVE.L (d16,An),(xxx).L */ void REGPARAM2 CPUFUNC(op_23e8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4160; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uaecptr dsta; dsta = get_word_ce000_prefetch (6) << 16; dsta |= regs.irc; if (dsta & 1) { m68k_incpc (8); exception3 (opcode, dsta); goto endlabel4160; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (8); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4160: ; } /* 32 (6/2) */ /* MOVE.L (d8,An,Xn),(xxx).L */ void REGPARAM2 CPUFUNC(op_23f0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4161; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uaecptr dsta; dsta = get_word_ce000_prefetch (6) << 16; dsta |= regs.irc; if (dsta & 1) { m68k_incpc (8); exception3 (opcode, dsta); goto endlabel4161; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (8); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4161: ; } /* 34 (6/2) */ /* MOVE.L (xxx).W,(xxx).L */ void REGPARAM2 CPUFUNC(op_23f8_12)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4162; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uaecptr dsta; dsta = get_word_ce000_prefetch (6) << 16; dsta |= regs.irc; if (dsta & 1) { m68k_incpc (8); exception3 (opcode, dsta); goto endlabel4162; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (8); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4162: ; } /* 32 (6/2) */ /* MOVE.L (xxx).L,(xxx).L */ void REGPARAM2 CPUFUNC(op_23f9_12)(uae_u32 opcode) { {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); if (srca & 1) { m68k_incpc (4); exception3 (opcode, srca); goto endlabel4163; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uaecptr dsta; dsta = get_word_ce000_prefetch (8) << 16; dsta |= regs.irc; if (dsta & 1) { m68k_incpc (10); exception3 (opcode, dsta); goto endlabel4163; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (10); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4163: ; } /* 36 (7/2) */ /* MOVE.L (d16,PC),(xxx).L */ void REGPARAM2 CPUFUNC(op_23fa_12)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4164; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uaecptr dsta; dsta = get_word_ce000_prefetch (6) << 16; dsta |= regs.irc; if (dsta & 1) { m68k_incpc (8); exception3 (opcode, dsta); goto endlabel4164; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (8); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4164: ; } /* 32 (6/2) */ /* MOVE.L (d8,PC,Xn),(xxx).L */ void REGPARAM2 CPUFUNC(op_23fb_12)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; do_cycles_ce000 (2); srca = get_disp_ea_000 (tmppc, get_word_ce000_prefetch (4)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4165; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uaecptr dsta; dsta = get_word_ce000_prefetch (6) << 16; dsta |= regs.irc; if (dsta & 1) { m68k_incpc (8); exception3 (opcode, dsta); goto endlabel4165; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (8); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4165: ; } /* 34 (6/2) */ /* MOVE.L #.L,(xxx).L */ void REGPARAM2 CPUFUNC(op_23fc_12)(uae_u32 opcode) { {{ uae_s32 src; src = get_word_ce000_prefetch (4) << 16; src |= get_word_ce000_prefetch (6); { uaecptr dsta; dsta = get_word_ce000_prefetch (8) << 16; dsta |= get_word_ce000_prefetch (10); if (dsta & 1) { m68k_incpc (10); exception3 (opcode, dsta); goto endlabel4166; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_word (dsta, src >> 16); x_put_word (dsta + 2, src); m68k_incpc (10); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}endlabel4166: ; } /* 28 (5/2) */ /* MOVE.W Dn,Dn */ void REGPARAM2 CPUFUNC(op_3000_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpc (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}} /* 4 (1/0) */ /* MOVE.W An,Dn */ void REGPARAM2 CPUFUNC(op_3008_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpc (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}} /* 4 (1/0) */ /* MOVE.W (An),Dn */ void REGPARAM2 CPUFUNC(op_3010_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4169; } {{ uae_s16 src = x_get_word (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpc (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}endlabel4169: ; } /* 8 (2/0) */ /* MOVE.W (An)+,Dn */ void REGPARAM2 CPUFUNC(op_3018_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4170; } {{ uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpc (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}endlabel4170: ; } /* 8 (2/0) */ /* MOVE.W -(An),Dn */ void REGPARAM2 CPUFUNC(op_3020_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; do_cycles_ce000 (2); if (srca & 1) { exception3 (opcode, srca); goto endlabel4171; } {{ uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpc (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}endlabel4171: ; } /* 10 (2/0) */ /* MOVE.W (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_3028_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4172; } {{ uae_s16 src = x_get_word (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}endlabel4172: ; } /* 12 (3/0) */ /* MOVE.W (d8,An,Xn),Dn */ void REGPARAM2 CPUFUNC(op_3030_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4173; } {{ uae_s16 src = x_get_word (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}endlabel4173: ; } /* 14 (3/0) */ /* MOVE.W (xxx).W,Dn */ void REGPARAM2 CPUFUNC(op_3038_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4174; } {{ uae_s16 src = x_get_word (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}endlabel4174: ; } /* 12 (3/0) */ /* MOVE.W (xxx).L,Dn */ void REGPARAM2 CPUFUNC(op_3039_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); if (srca & 1) { m68k_incpc (4); exception3 (opcode, srca); goto endlabel4175; } {{ uae_s16 src = x_get_word (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpc (6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}endlabel4175: ; } /* 16 (4/0) */ /* MOVE.W (d16,PC),Dn */ void REGPARAM2 CPUFUNC(op_303a_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4176; } {{ uae_s16 src = x_get_word (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}endlabel4176: ; } /* 12 (3/0) */ /* MOVE.W (d8,PC,Xn),Dn */ void REGPARAM2 CPUFUNC(op_303b_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; do_cycles_ce000 (2); srca = get_disp_ea_000 (tmppc, get_word_ce000_prefetch (4)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4177; } {{ uae_s16 src = x_get_word (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}endlabel4177: ; } /* 14 (3/0) */ /* MOVE.W #.W,Dn */ void REGPARAM2 CPUFUNC(op_303c_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}} /* 8 (2/0) */ /* MOVEA.W Dn,An */ void REGPARAM2 CPUFUNC(op_3040_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpc (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}} /* 4 (1/0) */ /* MOVEA.W An,An */ void REGPARAM2 CPUFUNC(op_3048_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpc (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}} /* 4 (1/0) */ /* MOVEA.W (An),An */ void REGPARAM2 CPUFUNC(op_3050_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4181; } {{ uae_s16 src = x_get_word (srca); { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpc (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}endlabel4181: ; } /* 8 (2/0) */ /* MOVEA.W (An)+,An */ void REGPARAM2 CPUFUNC(op_3058_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4182; } {{ uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpc (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}endlabel4182: ; } /* 8 (2/0) */ /* MOVEA.W -(An),An */ void REGPARAM2 CPUFUNC(op_3060_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; do_cycles_ce000 (2); if (srca & 1) { exception3 (opcode, srca); goto endlabel4183; } {{ uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpc (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}endlabel4183: ; } /* 10 (2/0) */ /* MOVEA.W (d16,An),An */ void REGPARAM2 CPUFUNC(op_3068_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4184; } {{ uae_s16 src = x_get_word (srca); { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}endlabel4184: ; } /* 12 (3/0) */ /* MOVEA.W (d8,An,Xn),An */ void REGPARAM2 CPUFUNC(op_3070_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4185; } {{ uae_s16 src = x_get_word (srca); { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}endlabel4185: ; } /* 14 (3/0) */ /* MOVEA.W (xxx).W,An */ void REGPARAM2 CPUFUNC(op_3078_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4186; } {{ uae_s16 src = x_get_word (srca); { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}endlabel4186: ; } /* 12 (3/0) */ /* MOVEA.W (xxx).L,An */ void REGPARAM2 CPUFUNC(op_3079_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); if (srca & 1) { m68k_incpc (4); exception3 (opcode, srca); goto endlabel4187; } {{ uae_s16 src = x_get_word (srca); { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpc (6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}endlabel4187: ; } /* 16 (4/0) */ /* MOVEA.W (d16,PC),An */ void REGPARAM2 CPUFUNC(op_307a_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4188; } {{ uae_s16 src = x_get_word (srca); { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}endlabel4188: ; } /* 12 (3/0) */ /* MOVEA.W (d8,PC,Xn),An */ void REGPARAM2 CPUFUNC(op_307b_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; do_cycles_ce000 (2); srca = get_disp_ea_000 (tmppc, get_word_ce000_prefetch (4)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4189; } {{ uae_s16 src = x_get_word (srca); { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}endlabel4189: ; } /* 14 (3/0) */ /* MOVEA.W #.W,An */ void REGPARAM2 CPUFUNC(op_307c_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}} /* 8 (2/0) */ /* MOVE.W Dn,(An) */ void REGPARAM2 CPUFUNC(op_3080_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel4191; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}endlabel4191: ; } /* 8 (1/1) */ /* MOVE.W An,(An) */ void REGPARAM2 CPUFUNC(op_3088_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel4192; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}endlabel4192: ; } /* 8 (1/1) */ /* MOVE.W (An),(An) */ void REGPARAM2 CPUFUNC(op_3090_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4193; } {{ uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel4193; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4193: ; } /* 12 (2/1) */ /* MOVE.W (An)+,(An) */ void REGPARAM2 CPUFUNC(op_3098_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4194; } {{ uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel4194; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4194: ; } /* 12 (2/1) */ /* MOVE.W -(An),(An) */ void REGPARAM2 CPUFUNC(op_30a0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; do_cycles_ce000 (2); if (srca & 1) { exception3 (opcode, srca); goto endlabel4195; } {{ uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel4195; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4195: ; } /* 14 (2/1) */ /* MOVE.W (d16,An),(An) */ void REGPARAM2 CPUFUNC(op_30a8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4196; } {{ uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel4196; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4196: ; } /* 16 (3/1) */ /* MOVE.W (d8,An,Xn),(An) */ void REGPARAM2 CPUFUNC(op_30b0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4197; } {{ uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel4197; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4197: ; } /* 18 (3/1) */ /* MOVE.W (xxx).W,(An) */ void REGPARAM2 CPUFUNC(op_30b8_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4198; } {{ uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel4198; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4198: ; } /* 16 (3/1) */ /* MOVE.W (xxx).L,(An) */ void REGPARAM2 CPUFUNC(op_30b9_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); if (srca & 1) { m68k_incpc (4); exception3 (opcode, srca); goto endlabel4199; } {{ uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel4199; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4199: ; } /* 20 (4/1) */ /* MOVE.W (d16,PC),(An) */ void REGPARAM2 CPUFUNC(op_30ba_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4200; } {{ uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel4200; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4200: ; } /* 16 (3/1) */ /* MOVE.W (d8,PC,Xn),(An) */ void REGPARAM2 CPUFUNC(op_30bb_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; do_cycles_ce000 (2); srca = get_disp_ea_000 (tmppc, get_word_ce000_prefetch (4)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4201; } {{ uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel4201; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4201: ; } /* 18 (3/1) */ /* MOVE.W #.W,(An) */ void REGPARAM2 CPUFUNC(op_30bc_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel4202; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}endlabel4202: ; } /* 12 (2/1) */ /* MOVE.W Dn,(An)+ */ void REGPARAM2 CPUFUNC(op_30c0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel4203; } { m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}endlabel4203: ; } /* 8 (1/1) */ /* MOVE.W An,(An)+ */ void REGPARAM2 CPUFUNC(op_30c8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel4204; } { m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}endlabel4204: ; } /* 8 (1/1) */ /* MOVE.W (An),(An)+ */ void REGPARAM2 CPUFUNC(op_30d0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4205; } {{ uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel4205; } { m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4205: ; } /* 12 (2/1) */ /* MOVE.W (An)+,(An)+ */ void REGPARAM2 CPUFUNC(op_30d8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4206; } {{ uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel4206; } { m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4206: ; } /* 12 (2/1) */ /* MOVE.W -(An),(An)+ */ void REGPARAM2 CPUFUNC(op_30e0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; do_cycles_ce000 (2); if (srca & 1) { exception3 (opcode, srca); goto endlabel4207; } {{ uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel4207; } { m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4207: ; } /* 14 (2/1) */ /* MOVE.W (d16,An),(An)+ */ void REGPARAM2 CPUFUNC(op_30e8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4208; } {{ uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel4208; } { m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4208: ; } /* 16 (3/1) */ /* MOVE.W (d8,An,Xn),(An)+ */ void REGPARAM2 CPUFUNC(op_30f0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4209; } {{ uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel4209; } { m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4209: ; } /* 18 (3/1) */ /* MOVE.W (xxx).W,(An)+ */ void REGPARAM2 CPUFUNC(op_30f8_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4210; } {{ uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel4210; } { m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4210: ; } /* 16 (3/1) */ /* MOVE.W (xxx).L,(An)+ */ void REGPARAM2 CPUFUNC(op_30f9_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); if (srca & 1) { m68k_incpc (4); exception3 (opcode, srca); goto endlabel4211; } {{ uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel4211; } { m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4211: ; } /* 20 (4/1) */ /* MOVE.W (d16,PC),(An)+ */ void REGPARAM2 CPUFUNC(op_30fa_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4212; } {{ uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel4212; } { m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4212: ; } /* 16 (3/1) */ /* MOVE.W (d8,PC,Xn),(An)+ */ void REGPARAM2 CPUFUNC(op_30fb_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; do_cycles_ce000 (2); srca = get_disp_ea_000 (tmppc, get_word_ce000_prefetch (4)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4213; } {{ uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel4213; } { m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4213: ; } /* 18 (3/1) */ /* MOVE.W #.W,(An)+ */ void REGPARAM2 CPUFUNC(op_30fc_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel4214; } { m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}endlabel4214: ; } /* 12 (2/1) */ /* MOVE.W Dn,-(An) */ void REGPARAM2 CPUFUNC(op_3100_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel4215; } { m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (2); }}}}endlabel4215: ; } /* 8 (1/1) */ /* MOVE.W An,-(An) */ void REGPARAM2 CPUFUNC(op_3108_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel4216; } { m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (2); }}}}endlabel4216: ; } /* 8 (1/1) */ /* MOVE.W (An),-(An) */ void REGPARAM2 CPUFUNC(op_3110_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4217; } {{ uae_s16 src = x_get_word (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel4217; } { m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (2); }}}}}}endlabel4217: ; } /* 12 (2/1) */ /* MOVE.W (An)+,-(An) */ void REGPARAM2 CPUFUNC(op_3118_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4218; } {{ uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel4218; } { m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (2); }}}}}}endlabel4218: ; } /* 12 (2/1) */ /* MOVE.W -(An),-(An) */ void REGPARAM2 CPUFUNC(op_3120_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; do_cycles_ce000 (2); if (srca & 1) { exception3 (opcode, srca); goto endlabel4219; } {{ uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel4219; } { m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (2); }}}}}}endlabel4219: ; } /* 14 (2/1) */ /* MOVE.W (d16,An),-(An) */ void REGPARAM2 CPUFUNC(op_3128_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4220; } {{ uae_s16 src = x_get_word (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel4220; } { m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}}}}}endlabel4220: ; } /* 16 (3/1) */ /* MOVE.W (d8,An,Xn),-(An) */ void REGPARAM2 CPUFUNC(op_3130_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4221; } {{ uae_s16 src = x_get_word (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel4221; } { m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}}}}}endlabel4221: ; } /* 18 (3/1) */ /* MOVE.W (xxx).W,-(An) */ void REGPARAM2 CPUFUNC(op_3138_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4222; } {{ uae_s16 src = x_get_word (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel4222; } { m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}}}}}endlabel4222: ; } /* 16 (3/1) */ /* MOVE.W (xxx).L,-(An) */ void REGPARAM2 CPUFUNC(op_3139_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); if (srca & 1) { m68k_incpc (4); exception3 (opcode, srca); goto endlabel4223; } {{ uae_s16 src = x_get_word (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel4223; } { m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); }}}}}}endlabel4223: ; } /* 20 (4/1) */ /* MOVE.W (d16,PC),-(An) */ void REGPARAM2 CPUFUNC(op_313a_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4224; } {{ uae_s16 src = x_get_word (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel4224; } { m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}}}}}endlabel4224: ; } /* 16 (3/1) */ /* MOVE.W (d8,PC,Xn),-(An) */ void REGPARAM2 CPUFUNC(op_313b_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; do_cycles_ce000 (2); srca = get_disp_ea_000 (tmppc, get_word_ce000_prefetch (4)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4225; } {{ uae_s16 src = x_get_word (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel4225; } { m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}}}}}endlabel4225: ; } /* 18 (3/1) */ /* MOVE.W #.W,-(An) */ void REGPARAM2 CPUFUNC(op_313c_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel4226; } { m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}}}endlabel4226: ; } /* 12 (2/1) */ /* MOVE.W Dn,(d16,An) */ void REGPARAM2 CPUFUNC(op_3140_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel4227; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}endlabel4227: ; } /* 12 (2/1) */ /* MOVE.W An,(d16,An) */ void REGPARAM2 CPUFUNC(op_3148_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel4228; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}endlabel4228: ; } /* 12 (2/1) */ /* MOVE.W (An),(d16,An) */ void REGPARAM2 CPUFUNC(op_3150_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4229; } {{ uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel4229; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4229: ; } /* 16 (3/1) */ /* MOVE.W (An)+,(d16,An) */ void REGPARAM2 CPUFUNC(op_3158_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4230; } {{ uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel4230; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4230: ; } /* 16 (3/1) */ /* MOVE.W -(An),(d16,An) */ void REGPARAM2 CPUFUNC(op_3160_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; do_cycles_ce000 (2); if (srca & 1) { exception3 (opcode, srca); goto endlabel4231; } {{ uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel4231; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4231: ; } /* 18 (3/1) */ /* MOVE.W (d16,An),(d16,An) */ void REGPARAM2 CPUFUNC(op_3168_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4232; } {{ uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (6); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel4232; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4232: ; } /* 20 (4/1) */ /* MOVE.W (d8,An,Xn),(d16,An) */ void REGPARAM2 CPUFUNC(op_3170_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4233; } {{ uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (6); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel4233; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4233: ; } /* 22 (4/1) */ /* MOVE.W (xxx).W,(d16,An) */ void REGPARAM2 CPUFUNC(op_3178_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4234; } {{ uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (6); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel4234; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4234: ; } /* 20 (4/1) */ /* MOVE.W (xxx).L,(d16,An) */ void REGPARAM2 CPUFUNC(op_3179_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); if (srca & 1) { m68k_incpc (4); exception3 (opcode, srca); goto endlabel4235; } {{ uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (8); if (dsta & 1) { m68k_incpc (8); exception3 (opcode, dsta); goto endlabel4235; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (8); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4235: ; } /* 24 (5/1) */ /* MOVE.W (d16,PC),(d16,An) */ void REGPARAM2 CPUFUNC(op_317a_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4236; } {{ uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (6); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel4236; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4236: ; } /* 20 (4/1) */ /* MOVE.W (d8,PC,Xn),(d16,An) */ void REGPARAM2 CPUFUNC(op_317b_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; do_cycles_ce000 (2); srca = get_disp_ea_000 (tmppc, get_word_ce000_prefetch (4)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4237; } {{ uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (6); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel4237; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4237: ; } /* 22 (4/1) */ /* MOVE.W #.W,(d16,An) */ void REGPARAM2 CPUFUNC(op_317c_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (6); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel4238; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}endlabel4238: ; } /* 16 (3/1) */ /* MOVE.W Dn,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_3180_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (4)); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel4239; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}endlabel4239: ; } /* 14 (2/1) */ /* MOVE.W An,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_3188_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (4)); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel4240; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}endlabel4240: ; } /* 14 (2/1) */ /* MOVE.W (An),(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_3190_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4241; } {{ uae_s16 src = x_get_word (srca); { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (4)); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel4241; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4241: ; } /* 18 (3/1) */ /* MOVE.W (An)+,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_3198_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4242; } {{ uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (4)); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel4242; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4242: ; } /* 18 (3/1) */ /* MOVE.W -(An),(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_31a0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; do_cycles_ce000 (2); if (srca & 1) { exception3 (opcode, srca); goto endlabel4243; } {{ uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (4)); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel4243; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4243: ; } /* 20 (3/1) */ /* MOVE.W (d16,An),(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_31a8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4244; } {{ uae_s16 src = x_get_word (srca); { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (6)); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel4244; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4244: ; } /* 22 (4/1) */ /* MOVE.W (d8,An,Xn),(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_31b0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4245; } {{ uae_s16 src = x_get_word (srca); { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (6)); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel4245; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4245: ; } /* 24 (4/1) */ /* MOVE.W (xxx).W,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_31b8_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4246; } {{ uae_s16 src = x_get_word (srca); { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (6)); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel4246; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4246: ; } /* 22 (4/1) */ /* MOVE.W (xxx).L,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_31b9_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); if (srca & 1) { m68k_incpc (4); exception3 (opcode, srca); goto endlabel4247; } {{ uae_s16 src = x_get_word (srca); { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (8)); if (dsta & 1) { m68k_incpc (8); exception3 (opcode, dsta); goto endlabel4247; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (8); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4247: ; } /* 26 (5/1) */ /* MOVE.W (d16,PC),(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_31ba_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4248; } {{ uae_s16 src = x_get_word (srca); { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (6)); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel4248; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4248: ; } /* 22 (4/1) */ /* MOVE.W (d8,PC,Xn),(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_31bb_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; do_cycles_ce000 (2); srca = get_disp_ea_000 (tmppc, get_word_ce000_prefetch (4)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4249; } {{ uae_s16 src = x_get_word (srca); { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (6)); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel4249; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4249: ; } /* 24 (4/1) */ /* MOVE.W #.W,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_31bc_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (6)); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel4250; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}endlabel4250: ; } /* 18 (3/1) */ /* MOVE.W Dn,(xxx).W */ void REGPARAM2 CPUFUNC(op_31c0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel4251; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}endlabel4251: ; } /* 12 (2/1) */ /* MOVE.W An,(xxx).W */ void REGPARAM2 CPUFUNC(op_31c8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_areg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel4252; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}endlabel4252: ; } /* 12 (2/1) */ /* MOVE.W (An),(xxx).W */ void REGPARAM2 CPUFUNC(op_31d0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4253; } {{ uae_s16 src = x_get_word (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel4253; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4253: ; } /* 16 (3/1) */ /* MOVE.W (An)+,(xxx).W */ void REGPARAM2 CPUFUNC(op_31d8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4254; } {{ uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel4254; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4254: ; } /* 16 (3/1) */ /* MOVE.W -(An),(xxx).W */ void REGPARAM2 CPUFUNC(op_31e0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; do_cycles_ce000 (2); if (srca & 1) { exception3 (opcode, srca); goto endlabel4255; } {{ uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel4255; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4255: ; } /* 18 (3/1) */ /* MOVE.W (d16,An),(xxx).W */ void REGPARAM2 CPUFUNC(op_31e8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4256; } {{ uae_s16 src = x_get_word (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (6); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel4256; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4256: ; } /* 20 (4/1) */ /* MOVE.W (d8,An,Xn),(xxx).W */ void REGPARAM2 CPUFUNC(op_31f0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4257; } {{ uae_s16 src = x_get_word (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (6); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel4257; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4257: ; } /* 22 (4/1) */ /* MOVE.W (xxx).W,(xxx).W */ void REGPARAM2 CPUFUNC(op_31f8_12)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4258; } {{ uae_s16 src = x_get_word (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (6); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel4258; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4258: ; } /* 20 (4/1) */ /* MOVE.W (xxx).L,(xxx).W */ void REGPARAM2 CPUFUNC(op_31f9_12)(uae_u32 opcode) { {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); if (srca & 1) { m68k_incpc (4); exception3 (opcode, srca); goto endlabel4259; } {{ uae_s16 src = x_get_word (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (8); if (dsta & 1) { m68k_incpc (8); exception3 (opcode, dsta); goto endlabel4259; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (8); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4259: ; } /* 24 (5/1) */ /* MOVE.W (d16,PC),(xxx).W */ void REGPARAM2 CPUFUNC(op_31fa_12)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4260; } {{ uae_s16 src = x_get_word (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (6); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel4260; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4260: ; } /* 20 (4/1) */ /* MOVE.W (d8,PC,Xn),(xxx).W */ void REGPARAM2 CPUFUNC(op_31fb_12)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; do_cycles_ce000 (2); srca = get_disp_ea_000 (tmppc, get_word_ce000_prefetch (4)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4261; } {{ uae_s16 src = x_get_word (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (6); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel4261; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4261: ; } /* 22 (4/1) */ /* MOVE.W #.W,(xxx).W */ void REGPARAM2 CPUFUNC(op_31fc_12)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (6); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel4262; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}endlabel4262: ; } /* 16 (3/1) */ /* MOVE.W Dn,(xxx).L */ void REGPARAM2 CPUFUNC(op_33c0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = get_word_ce000_prefetch (4) << 16; dsta |= get_word_ce000_prefetch (6); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel4263; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}endlabel4263: ; } /* 16 (3/1) */ /* MOVE.W An,(xxx).L */ void REGPARAM2 CPUFUNC(op_33c8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_areg (regs, srcreg); { uaecptr dsta; dsta = get_word_ce000_prefetch (4) << 16; dsta |= get_word_ce000_prefetch (6); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel4264; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}endlabel4264: ; } /* 16 (3/1) */ /* MOVE.W (An),(xxx).L */ void REGPARAM2 CPUFUNC(op_33d0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4265; } {{ uae_s16 src = x_get_word (srca); { uaecptr dsta; dsta = get_word_ce000_prefetch (4) << 16; dsta |= regs.irc; if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel4265; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4265: ; } /* 20 (4/1) */ /* MOVE.W (An)+,(xxx).L */ void REGPARAM2 CPUFUNC(op_33d8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4266; } {{ uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uaecptr dsta; dsta = get_word_ce000_prefetch (4) << 16; dsta |= regs.irc; if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel4266; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4266: ; } /* 20 (4/1) */ /* MOVE.W -(An),(xxx).L */ void REGPARAM2 CPUFUNC(op_33e0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; do_cycles_ce000 (2); if (srca & 1) { exception3 (opcode, srca); goto endlabel4267; } {{ uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = get_word_ce000_prefetch (4) << 16; dsta |= regs.irc; if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel4267; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4267: ; } /* 22 (4/1) */ /* MOVE.W (d16,An),(xxx).L */ void REGPARAM2 CPUFUNC(op_33e8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4268; } {{ uae_s16 src = x_get_word (srca); { uaecptr dsta; dsta = get_word_ce000_prefetch (6) << 16; dsta |= regs.irc; if (dsta & 1) { m68k_incpc (8); exception3 (opcode, dsta); goto endlabel4268; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (8); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4268: ; } /* 24 (5/1) */ /* MOVE.W (d8,An,Xn),(xxx).L */ void REGPARAM2 CPUFUNC(op_33f0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4269; } {{ uae_s16 src = x_get_word (srca); { uaecptr dsta; dsta = get_word_ce000_prefetch (6) << 16; dsta |= regs.irc; if (dsta & 1) { m68k_incpc (8); exception3 (opcode, dsta); goto endlabel4269; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (8); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4269: ; } /* 26 (5/1) */ /* MOVE.W (xxx).W,(xxx).L */ void REGPARAM2 CPUFUNC(op_33f8_12)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4270; } {{ uae_s16 src = x_get_word (srca); { uaecptr dsta; dsta = get_word_ce000_prefetch (6) << 16; dsta |= regs.irc; if (dsta & 1) { m68k_incpc (8); exception3 (opcode, dsta); goto endlabel4270; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (8); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4270: ; } /* 24 (5/1) */ /* MOVE.W (xxx).L,(xxx).L */ void REGPARAM2 CPUFUNC(op_33f9_12)(uae_u32 opcode) { {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); if (srca & 1) { m68k_incpc (4); exception3 (opcode, srca); goto endlabel4271; } {{ uae_s16 src = x_get_word (srca); { uaecptr dsta; dsta = get_word_ce000_prefetch (8) << 16; dsta |= regs.irc; if (dsta & 1) { m68k_incpc (10); exception3 (opcode, dsta); goto endlabel4271; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (10); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4271: ; } /* 28 (6/1) */ /* MOVE.W (d16,PC),(xxx).L */ void REGPARAM2 CPUFUNC(op_33fa_12)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4272; } {{ uae_s16 src = x_get_word (srca); { uaecptr dsta; dsta = get_word_ce000_prefetch (6) << 16; dsta |= regs.irc; if (dsta & 1) { m68k_incpc (8); exception3 (opcode, dsta); goto endlabel4272; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (8); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4272: ; } /* 24 (5/1) */ /* MOVE.W (d8,PC,Xn),(xxx).L */ void REGPARAM2 CPUFUNC(op_33fb_12)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; do_cycles_ce000 (2); srca = get_disp_ea_000 (tmppc, get_word_ce000_prefetch (4)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4273; } {{ uae_s16 src = x_get_word (srca); { uaecptr dsta; dsta = get_word_ce000_prefetch (6) << 16; dsta |= regs.irc; if (dsta & 1) { m68k_incpc (8); exception3 (opcode, dsta); goto endlabel4273; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (8); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}endlabel4273: ; } /* 26 (5/1) */ /* MOVE.W #.W,(xxx).L */ void REGPARAM2 CPUFUNC(op_33fc_12)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce000_prefetch (4); { uaecptr dsta; dsta = get_word_ce000_prefetch (6) << 16; dsta |= get_word_ce000_prefetch (8); if (dsta & 1) { m68k_incpc (8); exception3 (opcode, dsta); goto endlabel4274; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (8); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}endlabel4274: ; } /* 20 (4/1) */ /* NEGX.B Dn */ void REGPARAM2 CPUFUNC(op_4000_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((newv) & 0xff); }}}} m68k_incpc (2); } /* 4 (1/0) */ /* NEGX.B (An) */ void REGPARAM2 CPUFUNC(op_4010_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); x_put_byte (srca, newv); }}}}} m68k_incpc (2); } /* 12 (2/1) */ /* NEGX.B (An)+ */ void REGPARAM2 CPUFUNC(op_4018_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); x_put_byte (srca, newv); }}}}} m68k_incpc (2); } /* 12 (2/1) */ /* NEGX.B -(An) */ void REGPARAM2 CPUFUNC(op_4020_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; do_cycles_ce000 (2); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); x_put_byte (srca, newv); }}}}} m68k_incpc (2); } /* 14 (2/1) */ /* NEGX.B (d16,An) */ void REGPARAM2 CPUFUNC(op_4028_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); x_put_byte (srca, newv); }}}}} m68k_incpc (4); } /* 16 (3/1) */ /* NEGX.B (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_4030_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); { uae_s8 src = x_get_byte (srca); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); x_put_byte (srca, newv); }}}}} m68k_incpc (4); } /* 18 (3/1) */ /* NEGX.B (xxx).W */ void REGPARAM2 CPUFUNC(op_4038_12)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); x_put_byte (srca, newv); }}}}} m68k_incpc (4); } /* 16 (3/1) */ /* NEGX.B (xxx).L */ void REGPARAM2 CPUFUNC(op_4039_12)(uae_u32 opcode) { {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); { uae_s8 src = x_get_byte (srca); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); x_put_byte (srca, newv); }}}}} m68k_incpc (6); } /* 20 (4/1) */ /* NEGX.W Dn */ void REGPARAM2 CPUFUNC(op_4040_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | ((newv) & 0xffff); }}}} m68k_incpc (2); } /* 4 (1/0) */ /* NEGX.W (An) */ void REGPARAM2 CPUFUNC(op_4050_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4284; } {{ uae_s16 src = x_get_word (srca); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); x_put_word (srca, newv); }}}}}} m68k_incpc (2); endlabel4284: ; } /* 12 (2/1) */ /* NEGX.W (An)+ */ void REGPARAM2 CPUFUNC(op_4058_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4285; } {{ uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); x_put_word (srca, newv); }}}}}} m68k_incpc (2); endlabel4285: ; } /* 12 (2/1) */ /* NEGX.W -(An) */ void REGPARAM2 CPUFUNC(op_4060_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; do_cycles_ce000 (2); if (srca & 1) { exception3 (opcode, srca); goto endlabel4286; } {{ uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); x_put_word (srca, newv); }}}}}} m68k_incpc (2); endlabel4286: ; } /* 14 (2/1) */ /* NEGX.W (d16,An) */ void REGPARAM2 CPUFUNC(op_4068_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel4287; } {{ uae_s16 src = x_get_word (srca); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); x_put_word (srca, newv); }}}}}} m68k_incpc (4); endlabel4287: ; } /* 16 (3/1) */ /* NEGX.W (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_4070_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel4288; } {{ uae_s16 src = x_get_word (srca); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); x_put_word (srca, newv); }}}}}} m68k_incpc (4); endlabel4288: ; } /* 18 (3/1) */ /* NEGX.W (xxx).W */ void REGPARAM2 CPUFUNC(op_4078_12)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel4289; } {{ uae_s16 src = x_get_word (srca); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); x_put_word (srca, newv); }}}}}} m68k_incpc (4); endlabel4289: ; } /* 16 (3/1) */ /* NEGX.W (xxx).L */ void REGPARAM2 CPUFUNC(op_4079_12)(uae_u32 opcode) { {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); if (srca & 1) { exception3 (opcode, srca); goto endlabel4290; } {{ uae_s16 src = x_get_word (srca); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); x_put_word (srca, newv); }}}}}} m68k_incpc (6); endlabel4290: ; } /* 20 (4/1) */ /* NEGX.L Dn */ void REGPARAM2 CPUFUNC(op_4080_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); do_cycles_ce000 (2); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, srcreg) = (newv); }}}} m68k_incpc (2); } /* 6 (1/0) */ /* NEGX.L (An) */ void REGPARAM2 CPUFUNC(op_4090_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4292; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); x_put_word (srca + 2, newv); x_put_word (srca, newv >> 16); }}}}}} m68k_incpc (2); endlabel4292: ; } /* 20 (3/2) */ /* NEGX.L (An)+ */ void REGPARAM2 CPUFUNC(op_4098_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4293; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); m68k_areg (regs, srcreg) += 4; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); x_put_word (srca + 2, newv); x_put_word (srca, newv >> 16); }}}}}} m68k_incpc (2); endlabel4293: ; } /* 20 (3/2) */ /* NEGX.L -(An) */ void REGPARAM2 CPUFUNC(op_40a0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; do_cycles_ce000 (2); if (srca & 1) { exception3 (opcode, srca); goto endlabel4294; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); m68k_areg (regs, srcreg) = srca; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); x_put_word (srca + 2, newv); x_put_word (srca, newv >> 16); }}}}}} m68k_incpc (2); endlabel4294: ; } /* 22 (3/2) */ /* NEGX.L (d16,An) */ void REGPARAM2 CPUFUNC(op_40a8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel4295; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); x_put_word (srca + 2, newv); x_put_word (srca, newv >> 16); }}}}}} m68k_incpc (4); endlabel4295: ; } /* 24 (4/2) */ /* NEGX.L (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_40b0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel4296; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); x_put_word (srca + 2, newv); x_put_word (srca, newv >> 16); }}}}}} m68k_incpc (4); endlabel4296: ; } /* 26 (4/2) */ /* NEGX.L (xxx).W */ void REGPARAM2 CPUFUNC(op_40b8_12)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel4297; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); x_put_word (srca + 2, newv); x_put_word (srca, newv >> 16); }}}}}} m68k_incpc (4); endlabel4297: ; } /* 24 (4/2) */ /* NEGX.L (xxx).L */ void REGPARAM2 CPUFUNC(op_40b9_12)(uae_u32 opcode) { {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); if (srca & 1) { exception3 (opcode, srca); goto endlabel4298; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); x_put_word (srca + 2, newv); x_put_word (srca, newv >> 16); }}}}}} m68k_incpc (6); endlabel4298: ; } /* 28 (5/2) */ /* MVSR2.W Dn */ void REGPARAM2 CPUFUNC(op_40c0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); do_cycles_ce000 (2); MakeSR (); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | ((regs.sr) & 0xffff); }} m68k_incpc (2); } /* 6 (1/0) */ /* MVSR2.W (An) */ void REGPARAM2 CPUFUNC(op_40d0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4300; } { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); MakeSR (); x_put_word (srca, regs.sr); }}} m68k_incpc (2); endlabel4300: ; } /* 8 (1/1) */ /* MVSR2.W (An)+ */ void REGPARAM2 CPUFUNC(op_40d8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4301; } { m68k_areg (regs, srcreg) += 2; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); MakeSR (); x_put_word (srca, regs.sr); }}} m68k_incpc (2); endlabel4301: ; } /* 8 (1/1) */ /* MVSR2.W -(An) */ void REGPARAM2 CPUFUNC(op_40e0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; do_cycles_ce000 (2); if (srca & 1) { exception3 (opcode, srca); goto endlabel4302; } { m68k_areg (regs, srcreg) = srca; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); MakeSR (); x_put_word (srca, regs.sr); }}} m68k_incpc (2); endlabel4302: ; } /* 10 (1/1) */ /* MVSR2.W (d16,An) */ void REGPARAM2 CPUFUNC(op_40e8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel4303; } { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); MakeSR (); x_put_word (srca, regs.sr); }}} m68k_incpc (4); endlabel4303: ; } /* 12 (2/1) */ /* MVSR2.W (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_40f0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel4304; } { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); MakeSR (); x_put_word (srca, regs.sr); }}} m68k_incpc (4); endlabel4304: ; } /* 14 (2/1) */ /* MVSR2.W (xxx).W */ void REGPARAM2 CPUFUNC(op_40f8_12)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel4305; } { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); MakeSR (); x_put_word (srca, regs.sr); }}} m68k_incpc (4); endlabel4305: ; } /* 12 (2/1) */ /* MVSR2.W (xxx).L */ void REGPARAM2 CPUFUNC(op_40f9_12)(uae_u32 opcode) { {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); if (srca & 1) { exception3 (opcode, srca); goto endlabel4306; } { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); MakeSR (); x_put_word (srca, regs.sr); }}} m68k_incpc (6); endlabel4306: ; } /* 16 (3/1) */ /* CHK.W Dn,Dn */ void REGPARAM2 CPUFUNC(op_4180_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); m68k_incpc (2); do_cycles_ce000 (4); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel4307; } do_cycles_ce000 (2); if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel4307; } regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}endlabel4307: ; } /* 10 (1/0) */ /* CHK.W (An),Dn */ void REGPARAM2 CPUFUNC(op_4190_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4308; } {{ uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); m68k_incpc (2); do_cycles_ce000 (4); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel4308; } do_cycles_ce000 (2); if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel4308; } regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}endlabel4308: ; } /* 14 (2/0) */ /* CHK.W (An)+,Dn */ void REGPARAM2 CPUFUNC(op_4198_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4309; } {{ uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s16 dst = m68k_dreg (regs, dstreg); m68k_incpc (2); do_cycles_ce000 (4); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel4309; } do_cycles_ce000 (2); if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel4309; } regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}endlabel4309: ; } /* 14 (2/0) */ /* CHK.W -(An),Dn */ void REGPARAM2 CPUFUNC(op_41a0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; do_cycles_ce000 (2); if (srca & 1) { exception3 (opcode, srca); goto endlabel4310; } {{ uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s16 dst = m68k_dreg (regs, dstreg); m68k_incpc (2); do_cycles_ce000 (4); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel4310; } do_cycles_ce000 (2); if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel4310; } regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}endlabel4310: ; } /* 16 (2/0) */ /* CHK.W (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_41a8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel4311; } {{ uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); m68k_incpc (4); do_cycles_ce000 (4); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel4311; } do_cycles_ce000 (2); if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel4311; } regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}endlabel4311: ; } /* 18 (3/0) */ /* CHK.W (d8,An,Xn),Dn */ void REGPARAM2 CPUFUNC(op_41b0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel4312; } {{ uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); m68k_incpc (4); do_cycles_ce000 (4); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel4312; } do_cycles_ce000 (2); if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel4312; } regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}endlabel4312: ; } /* 20 (3/0) */ /* CHK.W (xxx).W,Dn */ void REGPARAM2 CPUFUNC(op_41b8_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel4313; } {{ uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); m68k_incpc (4); do_cycles_ce000 (4); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel4313; } do_cycles_ce000 (2); if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel4313; } regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}endlabel4313: ; } /* 18 (3/0) */ /* CHK.W (xxx).L,Dn */ void REGPARAM2 CPUFUNC(op_41b9_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); if (srca & 1) { exception3 (opcode, srca); goto endlabel4314; } {{ uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); m68k_incpc (6); do_cycles_ce000 (4); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel4314; } do_cycles_ce000 (2); if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel4314; } regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}endlabel4314: ; } /* 22 (4/0) */ /* CHK.W (d16,PC),Dn */ void REGPARAM2 CPUFUNC(op_41ba_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel4315; } {{ uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); m68k_incpc (4); do_cycles_ce000 (4); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel4315; } do_cycles_ce000 (2); if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel4315; } regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}endlabel4315: ; } /* 18 (3/0) */ /* CHK.W (d8,PC,Xn),Dn */ void REGPARAM2 CPUFUNC(op_41bb_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; do_cycles_ce000 (2); srca = get_disp_ea_000 (tmppc, get_word_ce000_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel4316; } {{ uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); m68k_incpc (4); do_cycles_ce000 (4); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel4316; } do_cycles_ce000 (2); if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel4316; } regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}endlabel4316: ; } /* 20 (3/0) */ /* CHK.W #.W,Dn */ void REGPARAM2 CPUFUNC(op_41bc_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uae_s16 dst = m68k_dreg (regs, dstreg); m68k_incpc (4); do_cycles_ce000 (4); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel4317; } do_cycles_ce000 (2); if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel4317; } regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}endlabel4317: ; } /* 14 (2/0) */ /* LEA.L (An),An */ void REGPARAM2 CPUFUNC(op_41d0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); m68k_areg (regs, dstreg) = (srca); }}} m68k_incpc (2); } /* 4 (1/0) */ /* LEA.L (d16,An),An */ void REGPARAM2 CPUFUNC(op_41e8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); m68k_areg (regs, dstreg) = (srca); }}} m68k_incpc (4); } /* 8 (2/0) */ /* LEA.L (d8,An,Xn),An */ void REGPARAM2 CPUFUNC(op_41f0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); { do_cycles_ce000 (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); do_cycles_ce000 (2); m68k_areg (regs, dstreg) = (srca); }}} m68k_incpc (4); } /* 12 (2/0) */ /* LEA.L (xxx).W,An */ void REGPARAM2 CPUFUNC(op_41f8_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); m68k_areg (regs, dstreg) = (srca); }}} m68k_incpc (4); } /* 8 (2/0) */ /* LEA.L (xxx).L,An */ void REGPARAM2 CPUFUNC(op_41f9_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); m68k_areg (regs, dstreg) = (srca); }}} m68k_incpc (6); } /* 12 (3/0) */ /* LEA.L (d16,PC),An */ void REGPARAM2 CPUFUNC(op_41fa_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); m68k_areg (regs, dstreg) = (srca); }}} m68k_incpc (4); } /* 8 (2/0) */ /* LEA.L (d8,PC,Xn),An */ void REGPARAM2 CPUFUNC(op_41fb_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_word_ce000_prefetch (4)); { do_cycles_ce000 (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); do_cycles_ce000 (2); m68k_areg (regs, dstreg) = (srca); }}} m68k_incpc (4); } /* 12 (2/0) */ /* CLR.B Dn */ void REGPARAM2 CPUFUNC(op_4200_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(0)) == 0); SET_NFLG (((uae_s8)(0)) < 0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((0) & 0xff); }} m68k_incpc (2); } /* 4 (1/0) */ /* CLR.B (An) */ void REGPARAM2 CPUFUNC(op_4210_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(0)) == 0); SET_NFLG (((uae_s8)(0)) < 0); x_put_byte (srca, 0); }}} m68k_incpc (2); } /* 12 (2/1) */ /* CLR.B (An)+ */ void REGPARAM2 CPUFUNC(op_4218_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(0)) == 0); SET_NFLG (((uae_s8)(0)) < 0); x_put_byte (srca, 0); }}} m68k_incpc (2); } /* 12 (2/1) */ /* CLR.B -(An) */ void REGPARAM2 CPUFUNC(op_4220_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; do_cycles_ce000 (2); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(0)) == 0); SET_NFLG (((uae_s8)(0)) < 0); x_put_byte (srca, 0); }}} m68k_incpc (2); } /* 14 (2/1) */ /* CLR.B (d16,An) */ void REGPARAM2 CPUFUNC(op_4228_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(0)) == 0); SET_NFLG (((uae_s8)(0)) < 0); x_put_byte (srca, 0); }}} m68k_incpc (4); } /* 16 (3/1) */ /* CLR.B (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_4230_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); { uae_s8 src = x_get_byte (srca); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(0)) == 0); SET_NFLG (((uae_s8)(0)) < 0); x_put_byte (srca, 0); }}} m68k_incpc (4); } /* 18 (3/1) */ /* CLR.B (xxx).W */ void REGPARAM2 CPUFUNC(op_4238_12)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(0)) == 0); SET_NFLG (((uae_s8)(0)) < 0); x_put_byte (srca, 0); }}} m68k_incpc (4); } /* 16 (3/1) */ /* CLR.B (xxx).L */ void REGPARAM2 CPUFUNC(op_4239_12)(uae_u32 opcode) { {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); { uae_s8 src = x_get_byte (srca); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(0)) == 0); SET_NFLG (((uae_s8)(0)) < 0); x_put_byte (srca, 0); }}} m68k_incpc (6); } /* 20 (4/1) */ /* CLR.W Dn */ void REGPARAM2 CPUFUNC(op_4240_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(0)) == 0); SET_NFLG (((uae_s16)(0)) < 0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | ((0) & 0xffff); }} m68k_incpc (2); } /* 4 (1/0) */ /* CLR.W (An) */ void REGPARAM2 CPUFUNC(op_4250_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4334; } {{ uae_s16 src = x_get_word (srca); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(0)) == 0); SET_NFLG (((uae_s16)(0)) < 0); x_put_word (srca, 0); }}}} m68k_incpc (2); endlabel4334: ; } /* 12 (2/1) */ /* CLR.W (An)+ */ void REGPARAM2 CPUFUNC(op_4258_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4335; } {{ uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(0)) == 0); SET_NFLG (((uae_s16)(0)) < 0); x_put_word (srca, 0); }}}} m68k_incpc (2); endlabel4335: ; } /* 12 (2/1) */ /* CLR.W -(An) */ void REGPARAM2 CPUFUNC(op_4260_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; do_cycles_ce000 (2); if (srca & 1) { exception3 (opcode, srca); goto endlabel4336; } {{ uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(0)) == 0); SET_NFLG (((uae_s16)(0)) < 0); x_put_word (srca, 0); }}}} m68k_incpc (2); endlabel4336: ; } /* 14 (2/1) */ /* CLR.W (d16,An) */ void REGPARAM2 CPUFUNC(op_4268_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel4337; } {{ uae_s16 src = x_get_word (srca); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(0)) == 0); SET_NFLG (((uae_s16)(0)) < 0); x_put_word (srca, 0); }}}} m68k_incpc (4); endlabel4337: ; } /* 16 (3/1) */ /* CLR.W (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_4270_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel4338; } {{ uae_s16 src = x_get_word (srca); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(0)) == 0); SET_NFLG (((uae_s16)(0)) < 0); x_put_word (srca, 0); }}}} m68k_incpc (4); endlabel4338: ; } /* 18 (3/1) */ /* CLR.W (xxx).W */ void REGPARAM2 CPUFUNC(op_4278_12)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel4339; } {{ uae_s16 src = x_get_word (srca); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(0)) == 0); SET_NFLG (((uae_s16)(0)) < 0); x_put_word (srca, 0); }}}} m68k_incpc (4); endlabel4339: ; } /* 16 (3/1) */ /* CLR.W (xxx).L */ void REGPARAM2 CPUFUNC(op_4279_12)(uae_u32 opcode) { {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); if (srca & 1) { exception3 (opcode, srca); goto endlabel4340; } {{ uae_s16 src = x_get_word (srca); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(0)) == 0); SET_NFLG (((uae_s16)(0)) < 0); x_put_word (srca, 0); }}}} m68k_incpc (6); endlabel4340: ; } /* 20 (4/1) */ /* CLR.L Dn */ void REGPARAM2 CPUFUNC(op_4280_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); do_cycles_ce000 (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(0)) == 0); SET_NFLG (((uae_s32)(0)) < 0); m68k_dreg (regs, srcreg) = (0); }} m68k_incpc (2); } /* 6 (1/0) */ /* CLR.L (An) */ void REGPARAM2 CPUFUNC(op_4290_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4342; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(0)) == 0); SET_NFLG (((uae_s32)(0)) < 0); x_put_word (srca + 2, 0); x_put_word (srca, 0 >> 16); }}}} m68k_incpc (2); endlabel4342: ; } /* 20 (3/2) */ /* CLR.L (An)+ */ void REGPARAM2 CPUFUNC(op_4298_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4343; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); m68k_areg (regs, srcreg) += 4; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(0)) == 0); SET_NFLG (((uae_s32)(0)) < 0); x_put_word (srca + 2, 0); x_put_word (srca, 0 >> 16); }}}} m68k_incpc (2); endlabel4343: ; } /* 20 (3/2) */ /* CLR.L -(An) */ void REGPARAM2 CPUFUNC(op_42a0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; do_cycles_ce000 (2); if (srca & 1) { exception3 (opcode, srca); goto endlabel4344; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); m68k_areg (regs, srcreg) = srca; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(0)) == 0); SET_NFLG (((uae_s32)(0)) < 0); x_put_word (srca + 2, 0); x_put_word (srca, 0 >> 16); }}}} m68k_incpc (2); endlabel4344: ; } /* 22 (3/2) */ /* CLR.L (d16,An) */ void REGPARAM2 CPUFUNC(op_42a8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel4345; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(0)) == 0); SET_NFLG (((uae_s32)(0)) < 0); x_put_word (srca + 2, 0); x_put_word (srca, 0 >> 16); }}}} m68k_incpc (4); endlabel4345: ; } /* 24 (4/2) */ /* CLR.L (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_42b0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel4346; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(0)) == 0); SET_NFLG (((uae_s32)(0)) < 0); x_put_word (srca + 2, 0); x_put_word (srca, 0 >> 16); }}}} m68k_incpc (4); endlabel4346: ; } /* 26 (4/2) */ /* CLR.L (xxx).W */ void REGPARAM2 CPUFUNC(op_42b8_12)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel4347; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(0)) == 0); SET_NFLG (((uae_s32)(0)) < 0); x_put_word (srca + 2, 0); x_put_word (srca, 0 >> 16); }}}} m68k_incpc (4); endlabel4347: ; } /* 24 (4/2) */ /* CLR.L (xxx).L */ void REGPARAM2 CPUFUNC(op_42b9_12)(uae_u32 opcode) { {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); if (srca & 1) { exception3 (opcode, srca); goto endlabel4348; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(0)) == 0); SET_NFLG (((uae_s32)(0)) < 0); x_put_word (srca + 2, 0); x_put_word (srca, 0 >> 16); }}}} m68k_incpc (6); endlabel4348: ; } /* 28 (5/2) */ #endif #ifdef PART_4 /* NEG.B Dn */ void REGPARAM2 CPUFUNC(op_4400_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 dst = ((uae_s8)(0)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(dst)) < 0; SET_ZFLG (((uae_s8)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((dst) & 0xff); }}}}} m68k_incpc (2); } /* 4 (1/0) */ /* NEG.B (An) */ void REGPARAM2 CPUFUNC(op_4410_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 dst = ((uae_s8)(0)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(dst)) < 0; SET_ZFLG (((uae_s8)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (srca, dst); }}}}}} m68k_incpc (2); } /* 12 (2/1) */ /* NEG.B (An)+ */ void REGPARAM2 CPUFUNC(op_4418_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 dst = ((uae_s8)(0)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(dst)) < 0; SET_ZFLG (((uae_s8)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (srca, dst); }}}}}} m68k_incpc (2); } /* 12 (2/1) */ /* NEG.B -(An) */ void REGPARAM2 CPUFUNC(op_4420_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; do_cycles_ce000 (2); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 dst = ((uae_s8)(0)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(dst)) < 0; SET_ZFLG (((uae_s8)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (srca, dst); }}}}}} m68k_incpc (2); } /* 14 (2/1) */ /* NEG.B (d16,An) */ void REGPARAM2 CPUFUNC(op_4428_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 dst = ((uae_s8)(0)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(dst)) < 0; SET_ZFLG (((uae_s8)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (srca, dst); }}}}}} m68k_incpc (4); } /* 16 (3/1) */ /* NEG.B (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_4430_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); { uae_s8 src = x_get_byte (srca); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 dst = ((uae_s8)(0)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(dst)) < 0; SET_ZFLG (((uae_s8)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (srca, dst); }}}}}} m68k_incpc (4); } /* 18 (3/1) */ /* NEG.B (xxx).W */ void REGPARAM2 CPUFUNC(op_4438_12)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 dst = ((uae_s8)(0)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(dst)) < 0; SET_ZFLG (((uae_s8)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (srca, dst); }}}}}} m68k_incpc (4); } /* 16 (3/1) */ /* NEG.B (xxx).L */ void REGPARAM2 CPUFUNC(op_4439_12)(uae_u32 opcode) { {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); { uae_s8 src = x_get_byte (srca); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); {{uae_u32 dst = ((uae_s8)(0)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(dst)) < 0; SET_ZFLG (((uae_s8)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (srca, dst); }}}}}} m68k_incpc (6); } /* 20 (4/1) */ /* NEG.W Dn */ void REGPARAM2 CPUFUNC(op_4440_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 dst = ((uae_s16)(0)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(dst)) < 0; SET_ZFLG (((uae_s16)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | ((dst) & 0xffff); }}}}} m68k_incpc (2); } /* 4 (1/0) */ /* NEG.W (An) */ void REGPARAM2 CPUFUNC(op_4450_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4358; } {{ uae_s16 src = x_get_word (srca); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 dst = ((uae_s16)(0)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(dst)) < 0; SET_ZFLG (((uae_s16)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (srca, dst); }}}}}}} m68k_incpc (2); endlabel4358: ; } /* 12 (2/1) */ /* NEG.W (An)+ */ void REGPARAM2 CPUFUNC(op_4458_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4359; } {{ uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 dst = ((uae_s16)(0)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(dst)) < 0; SET_ZFLG (((uae_s16)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (srca, dst); }}}}}}} m68k_incpc (2); endlabel4359: ; } /* 12 (2/1) */ /* NEG.W -(An) */ void REGPARAM2 CPUFUNC(op_4460_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; do_cycles_ce000 (2); if (srca & 1) { exception3 (opcode, srca); goto endlabel4360; } {{ uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 dst = ((uae_s16)(0)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(dst)) < 0; SET_ZFLG (((uae_s16)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (srca, dst); }}}}}}} m68k_incpc (2); endlabel4360: ; } /* 14 (2/1) */ /* NEG.W (d16,An) */ void REGPARAM2 CPUFUNC(op_4468_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel4361; } {{ uae_s16 src = x_get_word (srca); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 dst = ((uae_s16)(0)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(dst)) < 0; SET_ZFLG (((uae_s16)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (srca, dst); }}}}}}} m68k_incpc (4); endlabel4361: ; } /* 16 (3/1) */ /* NEG.W (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_4470_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel4362; } {{ uae_s16 src = x_get_word (srca); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 dst = ((uae_s16)(0)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(dst)) < 0; SET_ZFLG (((uae_s16)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (srca, dst); }}}}}}} m68k_incpc (4); endlabel4362: ; } /* 18 (3/1) */ /* NEG.W (xxx).W */ void REGPARAM2 CPUFUNC(op_4478_12)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel4363; } {{ uae_s16 src = x_get_word (srca); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 dst = ((uae_s16)(0)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(dst)) < 0; SET_ZFLG (((uae_s16)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (srca, dst); }}}}}}} m68k_incpc (4); endlabel4363: ; } /* 16 (3/1) */ /* NEG.W (xxx).L */ void REGPARAM2 CPUFUNC(op_4479_12)(uae_u32 opcode) { {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); if (srca & 1) { exception3 (opcode, srca); goto endlabel4364; } {{ uae_s16 src = x_get_word (srca); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); {{uae_u32 dst = ((uae_s16)(0)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(dst)) < 0; SET_ZFLG (((uae_s16)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (srca, dst); }}}}}}} m68k_incpc (6); endlabel4364: ; } /* 20 (4/1) */ /* NEG.L Dn */ void REGPARAM2 CPUFUNC(op_4480_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); do_cycles_ce000 (2); {{uae_u32 dst = ((uae_s32)(0)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(dst)) < 0; SET_ZFLG (((uae_s32)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, srcreg) = (dst); }}}}} m68k_incpc (2); } /* 6 (1/0) */ /* NEG.L (An) */ void REGPARAM2 CPUFUNC(op_4490_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4366; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 dst = ((uae_s32)(0)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(dst)) < 0; SET_ZFLG (((uae_s32)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (srca + 2, dst); x_put_word (srca, dst >> 16); }}}}}}} m68k_incpc (2); endlabel4366: ; } /* 20 (3/2) */ /* NEG.L (An)+ */ void REGPARAM2 CPUFUNC(op_4498_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4367; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); m68k_areg (regs, srcreg) += 4; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 dst = ((uae_s32)(0)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(dst)) < 0; SET_ZFLG (((uae_s32)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (srca + 2, dst); x_put_word (srca, dst >> 16); }}}}}}} m68k_incpc (2); endlabel4367: ; } /* 20 (3/2) */ /* NEG.L -(An) */ void REGPARAM2 CPUFUNC(op_44a0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; do_cycles_ce000 (2); if (srca & 1) { exception3 (opcode, srca); goto endlabel4368; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); m68k_areg (regs, srcreg) = srca; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 dst = ((uae_s32)(0)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(dst)) < 0; SET_ZFLG (((uae_s32)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (srca + 2, dst); x_put_word (srca, dst >> 16); }}}}}}} m68k_incpc (2); endlabel4368: ; } /* 22 (3/2) */ /* NEG.L (d16,An) */ void REGPARAM2 CPUFUNC(op_44a8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel4369; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 dst = ((uae_s32)(0)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(dst)) < 0; SET_ZFLG (((uae_s32)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (srca + 2, dst); x_put_word (srca, dst >> 16); }}}}}}} m68k_incpc (4); endlabel4369: ; } /* 24 (4/2) */ /* NEG.L (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_44b0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel4370; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 dst = ((uae_s32)(0)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(dst)) < 0; SET_ZFLG (((uae_s32)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (srca + 2, dst); x_put_word (srca, dst >> 16); }}}}}}} m68k_incpc (4); endlabel4370: ; } /* 26 (4/2) */ /* NEG.L (xxx).W */ void REGPARAM2 CPUFUNC(op_44b8_12)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel4371; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 dst = ((uae_s32)(0)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(dst)) < 0; SET_ZFLG (((uae_s32)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (srca + 2, dst); x_put_word (srca, dst >> 16); }}}}}}} m68k_incpc (4); endlabel4371: ; } /* 24 (4/2) */ /* NEG.L (xxx).L */ void REGPARAM2 CPUFUNC(op_44b9_12)(uae_u32 opcode) { {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); if (srca & 1) { exception3 (opcode, srca); goto endlabel4372; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); {{uae_u32 dst = ((uae_s32)(0)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(dst)) < 0; SET_ZFLG (((uae_s32)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (srca + 2, dst); x_put_word (srca, dst >> 16); }}}}}}} m68k_incpc (6); endlabel4372: ; } /* 28 (5/2) */ /* MV2SR.B Dn */ void REGPARAM2 CPUFUNC(op_44c0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); x_get_iword (4); do_cycles_ce000 (4); MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); }} m68k_incpc (2); } /* 12 (2/0) */ /* MV2SR.B (An) */ void REGPARAM2 CPUFUNC(op_44d0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4374; } {{ uae_s16 src = x_get_word (srca); x_get_iword (4); do_cycles_ce000 (4); MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); }}}} m68k_incpc (2); endlabel4374: ; } /* 16 (3/0) */ /* MV2SR.B (An)+ */ void REGPARAM2 CPUFUNC(op_44d8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4375; } {{ uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; x_get_iword (4); do_cycles_ce000 (4); MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); }}}} m68k_incpc (2); endlabel4375: ; } /* 16 (3/0) */ /* MV2SR.B -(An) */ void REGPARAM2 CPUFUNC(op_44e0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; do_cycles_ce000 (2); if (srca & 1) { exception3 (opcode, srca); goto endlabel4376; } {{ uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; x_get_iword (4); do_cycles_ce000 (4); MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); }}}} m68k_incpc (2); endlabel4376: ; } /* 18 (3/0) */ /* MV2SR.B (d16,An) */ void REGPARAM2 CPUFUNC(op_44e8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel4377; } {{ uae_s16 src = x_get_word (srca); x_get_iword (6); do_cycles_ce000 (4); MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); }}}} m68k_incpc (4); endlabel4377: ; } /* 20 (4/0) */ /* MV2SR.B (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_44f0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel4378; } {{ uae_s16 src = x_get_word (srca); x_get_iword (6); do_cycles_ce000 (4); MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); }}}} m68k_incpc (4); endlabel4378: ; } /* 22 (4/0) */ /* MV2SR.B (xxx).W */ void REGPARAM2 CPUFUNC(op_44f8_12)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel4379; } {{ uae_s16 src = x_get_word (srca); x_get_iword (6); do_cycles_ce000 (4); MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); }}}} m68k_incpc (4); endlabel4379: ; } /* 20 (4/0) */ /* MV2SR.B (xxx).L */ void REGPARAM2 CPUFUNC(op_44f9_12)(uae_u32 opcode) { {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); if (srca & 1) { exception3 (opcode, srca); goto endlabel4380; } {{ uae_s16 src = x_get_word (srca); x_get_iword (8); do_cycles_ce000 (4); MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); }}}} m68k_incpc (6); endlabel4380: ; } /* 24 (5/0) */ /* MV2SR.B (d16,PC) */ void REGPARAM2 CPUFUNC(op_44fa_12)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel4381; } {{ uae_s16 src = x_get_word (srca); x_get_iword (6); do_cycles_ce000 (4); MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); }}}} m68k_incpc (4); endlabel4381: ; } /* 20 (4/0) */ /* MV2SR.B (d8,PC,Xn) */ void REGPARAM2 CPUFUNC(op_44fb_12)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; do_cycles_ce000 (2); srca = get_disp_ea_000 (tmppc, get_word_ce000_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel4382; } {{ uae_s16 src = x_get_word (srca); x_get_iword (6); do_cycles_ce000 (4); MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); }}}} m68k_incpc (4); endlabel4382: ; } /* 22 (4/0) */ /* MV2SR.B #.B */ void REGPARAM2 CPUFUNC(op_44fc_12)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce000_prefetch (4); x_get_iword (6); do_cycles_ce000 (4); MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); }} m68k_incpc (4); } /* 16 (3/0) */ /* NOT.B Dn */ void REGPARAM2 CPUFUNC(op_4600_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(dst)) == 0); SET_NFLG (((uae_s8)(dst)) < 0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((dst) & 0xff); }}} m68k_incpc (2); } /* 4 (1/0) */ /* NOT.B (An) */ void REGPARAM2 CPUFUNC(op_4610_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(dst)) == 0); SET_NFLG (((uae_s8)(dst)) < 0); x_put_byte (srca, dst); }}}} m68k_incpc (2); } /* 12 (2/1) */ /* NOT.B (An)+ */ void REGPARAM2 CPUFUNC(op_4618_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(dst)) == 0); SET_NFLG (((uae_s8)(dst)) < 0); x_put_byte (srca, dst); }}}} m68k_incpc (2); } /* 12 (2/1) */ /* NOT.B -(An) */ void REGPARAM2 CPUFUNC(op_4620_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; do_cycles_ce000 (2); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(dst)) == 0); SET_NFLG (((uae_s8)(dst)) < 0); x_put_byte (srca, dst); }}}} m68k_incpc (2); } /* 14 (2/1) */ /* NOT.B (d16,An) */ void REGPARAM2 CPUFUNC(op_4628_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(dst)) == 0); SET_NFLG (((uae_s8)(dst)) < 0); x_put_byte (srca, dst); }}}} m68k_incpc (4); } /* 16 (3/1) */ /* NOT.B (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_4630_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); { uae_s8 src = x_get_byte (srca); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(dst)) == 0); SET_NFLG (((uae_s8)(dst)) < 0); x_put_byte (srca, dst); }}}} m68k_incpc (4); } /* 18 (3/1) */ /* NOT.B (xxx).W */ void REGPARAM2 CPUFUNC(op_4638_12)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(dst)) == 0); SET_NFLG (((uae_s8)(dst)) < 0); x_put_byte (srca, dst); }}}} m68k_incpc (4); } /* 16 (3/1) */ /* NOT.B (xxx).L */ void REGPARAM2 CPUFUNC(op_4639_12)(uae_u32 opcode) { {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); { uae_s8 src = x_get_byte (srca); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(dst)) == 0); SET_NFLG (((uae_s8)(dst)) < 0); x_put_byte (srca, dst); }}}} m68k_incpc (6); } /* 20 (4/1) */ /* NOT.W Dn */ void REGPARAM2 CPUFUNC(op_4640_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(dst)) == 0); SET_NFLG (((uae_s16)(dst)) < 0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | ((dst) & 0xffff); }}} m68k_incpc (2); } /* 4 (1/0) */ /* NOT.W (An) */ void REGPARAM2 CPUFUNC(op_4650_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4393; } {{ uae_s16 src = x_get_word (srca); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(dst)) == 0); SET_NFLG (((uae_s16)(dst)) < 0); x_put_word (srca, dst); }}}}} m68k_incpc (2); endlabel4393: ; } /* 12 (2/1) */ /* NOT.W (An)+ */ void REGPARAM2 CPUFUNC(op_4658_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4394; } {{ uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(dst)) == 0); SET_NFLG (((uae_s16)(dst)) < 0); x_put_word (srca, dst); }}}}} m68k_incpc (2); endlabel4394: ; } /* 12 (2/1) */ /* NOT.W -(An) */ void REGPARAM2 CPUFUNC(op_4660_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; do_cycles_ce000 (2); if (srca & 1) { exception3 (opcode, srca); goto endlabel4395; } {{ uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(dst)) == 0); SET_NFLG (((uae_s16)(dst)) < 0); x_put_word (srca, dst); }}}}} m68k_incpc (2); endlabel4395: ; } /* 14 (2/1) */ /* NOT.W (d16,An) */ void REGPARAM2 CPUFUNC(op_4668_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel4396; } {{ uae_s16 src = x_get_word (srca); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(dst)) == 0); SET_NFLG (((uae_s16)(dst)) < 0); x_put_word (srca, dst); }}}}} m68k_incpc (4); endlabel4396: ; } /* 16 (3/1) */ /* NOT.W (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_4670_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel4397; } {{ uae_s16 src = x_get_word (srca); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(dst)) == 0); SET_NFLG (((uae_s16)(dst)) < 0); x_put_word (srca, dst); }}}}} m68k_incpc (4); endlabel4397: ; } /* 18 (3/1) */ /* NOT.W (xxx).W */ void REGPARAM2 CPUFUNC(op_4678_12)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel4398; } {{ uae_s16 src = x_get_word (srca); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(dst)) == 0); SET_NFLG (((uae_s16)(dst)) < 0); x_put_word (srca, dst); }}}}} m68k_incpc (4); endlabel4398: ; } /* 16 (3/1) */ /* NOT.W (xxx).L */ void REGPARAM2 CPUFUNC(op_4679_12)(uae_u32 opcode) { {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); if (srca & 1) { exception3 (opcode, srca); goto endlabel4399; } {{ uae_s16 src = x_get_word (srca); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(dst)) == 0); SET_NFLG (((uae_s16)(dst)) < 0); x_put_word (srca, dst); }}}}} m68k_incpc (6); endlabel4399: ; } /* 20 (4/1) */ /* NOT.L Dn */ void REGPARAM2 CPUFUNC(op_4680_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); do_cycles_ce000 (2); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); m68k_dreg (regs, srcreg) = (dst); }}} m68k_incpc (2); } /* 6 (1/0) */ /* NOT.L (An) */ void REGPARAM2 CPUFUNC(op_4690_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4401; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); x_put_word (srca + 2, dst); x_put_word (srca, dst >> 16); }}}}} m68k_incpc (2); endlabel4401: ; } /* 20 (3/2) */ /* NOT.L (An)+ */ void REGPARAM2 CPUFUNC(op_4698_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4402; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); m68k_areg (regs, srcreg) += 4; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); x_put_word (srca + 2, dst); x_put_word (srca, dst >> 16); }}}}} m68k_incpc (2); endlabel4402: ; } /* 20 (3/2) */ /* NOT.L -(An) */ void REGPARAM2 CPUFUNC(op_46a0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; do_cycles_ce000 (2); if (srca & 1) { exception3 (opcode, srca); goto endlabel4403; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); m68k_areg (regs, srcreg) = srca; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); x_put_word (srca + 2, dst); x_put_word (srca, dst >> 16); }}}}} m68k_incpc (2); endlabel4403: ; } /* 22 (3/2) */ /* NOT.L (d16,An) */ void REGPARAM2 CPUFUNC(op_46a8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel4404; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); x_put_word (srca + 2, dst); x_put_word (srca, dst >> 16); }}}}} m68k_incpc (4); endlabel4404: ; } /* 24 (4/2) */ /* NOT.L (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_46b0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel4405; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); x_put_word (srca + 2, dst); x_put_word (srca, dst >> 16); }}}}} m68k_incpc (4); endlabel4405: ; } /* 26 (4/2) */ /* NOT.L (xxx).W */ void REGPARAM2 CPUFUNC(op_46b8_12)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel4406; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); x_put_word (srca + 2, dst); x_put_word (srca, dst >> 16); }}}}} m68k_incpc (4); endlabel4406: ; } /* 24 (4/2) */ /* NOT.L (xxx).L */ void REGPARAM2 CPUFUNC(op_46b9_12)(uae_u32 opcode) { {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); if (srca & 1) { exception3 (opcode, srca); goto endlabel4407; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); x_put_word (srca + 2, dst); x_put_word (srca, dst >> 16); }}}}} m68k_incpc (6); endlabel4407: ; } /* 28 (5/2) */ /* MV2SR.W Dn */ void REGPARAM2 CPUFUNC(op_46c0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel4408; } {{ uae_s16 src = m68k_dreg (regs, srcreg); x_get_iword (4); do_cycles_ce000 (4); regs.sr = src; MakeFromSR (); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); }}} m68k_incpc (2); endlabel4408: ; } /* 12 (2/0) */ /* MV2SR.W (An) */ void REGPARAM2 CPUFUNC(op_46d0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel4409; } {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4409; } {{ uae_s16 src = x_get_word (srca); x_get_iword (4); do_cycles_ce000 (4); regs.sr = src; MakeFromSR (); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); }}}}} m68k_incpc (2); endlabel4409: ; } /* 16 (3/0) */ /* MV2SR.W (An)+ */ void REGPARAM2 CPUFUNC(op_46d8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel4410; } {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4410; } {{ uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; x_get_iword (4); do_cycles_ce000 (4); regs.sr = src; MakeFromSR (); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); }}}}} m68k_incpc (2); endlabel4410: ; } /* 16 (3/0) */ /* MV2SR.W -(An) */ void REGPARAM2 CPUFUNC(op_46e0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel4411; } {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; do_cycles_ce000 (2); if (srca & 1) { exception3 (opcode, srca); goto endlabel4411; } {{ uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; x_get_iword (4); do_cycles_ce000 (4); regs.sr = src; MakeFromSR (); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); }}}}} m68k_incpc (2); endlabel4411: ; } /* 18 (3/0) */ /* MV2SR.W (d16,An) */ void REGPARAM2 CPUFUNC(op_46e8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel4412; } {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel4412; } {{ uae_s16 src = x_get_word (srca); x_get_iword (6); do_cycles_ce000 (4); regs.sr = src; MakeFromSR (); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); }}}}} m68k_incpc (4); endlabel4412: ; } /* 20 (4/0) */ /* MV2SR.W (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_46f0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel4413; } {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel4413; } {{ uae_s16 src = x_get_word (srca); x_get_iword (6); do_cycles_ce000 (4); regs.sr = src; MakeFromSR (); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); }}}}} m68k_incpc (4); endlabel4413: ; } /* 22 (4/0) */ /* MV2SR.W (xxx).W */ void REGPARAM2 CPUFUNC(op_46f8_12)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel4414; } {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel4414; } {{ uae_s16 src = x_get_word (srca); x_get_iword (6); do_cycles_ce000 (4); regs.sr = src; MakeFromSR (); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); }}}}} m68k_incpc (4); endlabel4414: ; } /* 20 (4/0) */ /* MV2SR.W (xxx).L */ void REGPARAM2 CPUFUNC(op_46f9_12)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel4415; } {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); if (srca & 1) { exception3 (opcode, srca); goto endlabel4415; } {{ uae_s16 src = x_get_word (srca); x_get_iword (8); do_cycles_ce000 (4); regs.sr = src; MakeFromSR (); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); }}}}} m68k_incpc (6); endlabel4415: ; } /* 24 (5/0) */ /* MV2SR.W (d16,PC) */ void REGPARAM2 CPUFUNC(op_46fa_12)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel4416; } {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel4416; } {{ uae_s16 src = x_get_word (srca); x_get_iword (6); do_cycles_ce000 (4); regs.sr = src; MakeFromSR (); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); }}}}} m68k_incpc (4); endlabel4416: ; } /* 20 (4/0) */ /* MV2SR.W (d8,PC,Xn) */ void REGPARAM2 CPUFUNC(op_46fb_12)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel4417; } {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; do_cycles_ce000 (2); srca = get_disp_ea_000 (tmppc, get_word_ce000_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel4417; } {{ uae_s16 src = x_get_word (srca); x_get_iword (6); do_cycles_ce000 (4); regs.sr = src; MakeFromSR (); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); }}}}} m68k_incpc (4); endlabel4417: ; } /* 22 (4/0) */ /* MV2SR.W #.W */ void REGPARAM2 CPUFUNC(op_46fc_12)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel4418; } {{ uae_s16 src = get_word_ce000_prefetch (4); x_get_iword (6); do_cycles_ce000 (4); regs.sr = src; MakeFromSR (); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); }}} m68k_incpc (4); endlabel4418: ; } /* 16 (3/0) */ /* NBCD.B Dn */ void REGPARAM2 CPUFUNC(op_4800_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); do_cycles_ce000 (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = - (src & 0xF0); uae_u16 newv; int cflg; if (newv_lo > 9) { newv_lo -= 6; } newv = newv_hi + newv_lo; cflg = (newv & 0x1F0) > 0x90; if (cflg) newv -= 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((newv) & 0xff); }}} m68k_incpc (2); } /* 6 (1/0) */ /* NBCD.B (An) */ void REGPARAM2 CPUFUNC(op_4810_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = - (src & 0xF0); uae_u16 newv; int cflg; if (newv_lo > 9) { newv_lo -= 6; } newv = newv_hi + newv_lo; cflg = (newv & 0x1F0) > 0x90; if (cflg) newv -= 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); x_put_byte (srca, newv); }}}} m68k_incpc (2); } /* 12 (2/1) */ /* NBCD.B (An)+ */ void REGPARAM2 CPUFUNC(op_4818_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = - (src & 0xF0); uae_u16 newv; int cflg; if (newv_lo > 9) { newv_lo -= 6; } newv = newv_hi + newv_lo; cflg = (newv & 0x1F0) > 0x90; if (cflg) newv -= 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); x_put_byte (srca, newv); }}}} m68k_incpc (2); } /* 12 (2/1) */ /* NBCD.B -(An) */ void REGPARAM2 CPUFUNC(op_4820_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; do_cycles_ce000 (2); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = - (src & 0xF0); uae_u16 newv; int cflg; if (newv_lo > 9) { newv_lo -= 6; } newv = newv_hi + newv_lo; cflg = (newv & 0x1F0) > 0x90; if (cflg) newv -= 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); x_put_byte (srca, newv); }}}} m68k_incpc (2); } /* 14 (2/1) */ /* NBCD.B (d16,An) */ void REGPARAM2 CPUFUNC(op_4828_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { uae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = - (src & 0xF0); uae_u16 newv; int cflg; if (newv_lo > 9) { newv_lo -= 6; } newv = newv_hi + newv_lo; cflg = (newv & 0x1F0) > 0x90; if (cflg) newv -= 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); x_put_byte (srca, newv); }}}} m68k_incpc (4); } /* 16 (3/1) */ /* NBCD.B (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_4830_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); { uae_s8 src = x_get_byte (srca); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { uae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = - (src & 0xF0); uae_u16 newv; int cflg; if (newv_lo > 9) { newv_lo -= 6; } newv = newv_hi + newv_lo; cflg = (newv & 0x1F0) > 0x90; if (cflg) newv -= 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); x_put_byte (srca, newv); }}}} m68k_incpc (4); } /* 18 (3/1) */ /* NBCD.B (xxx).W */ void REGPARAM2 CPUFUNC(op_4838_12)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { uae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = - (src & 0xF0); uae_u16 newv; int cflg; if (newv_lo > 9) { newv_lo -= 6; } newv = newv_hi + newv_lo; cflg = (newv & 0x1F0) > 0x90; if (cflg) newv -= 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); x_put_byte (srca, newv); }}}} m68k_incpc (4); } /* 16 (3/1) */ /* NBCD.B (xxx).L */ void REGPARAM2 CPUFUNC(op_4839_12)(uae_u32 opcode) { {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); { uae_s8 src = x_get_byte (srca); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); { uae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = - (src & 0xF0); uae_u16 newv; int cflg; if (newv_lo > 9) { newv_lo -= 6; } newv = newv_hi + newv_lo; cflg = (newv & 0x1F0) > 0x90; if (cflg) newv -= 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); x_put_byte (srca, newv); }}}} m68k_incpc (6); } /* 20 (4/1) */ /* SWAP.W Dn */ void REGPARAM2 CPUFUNC(op_4840_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 dst = ((src >> 16)&0xFFFF) | ((src&0xFFFF)<<16); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); m68k_dreg (regs, srcreg) = (dst); }}} m68k_incpc (2); } /* 4 (1/0) */ /* PEA.L (An) */ void REGPARAM2 CPUFUNC(op_4850_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, 7) - 4; if (dsta & 1) { exception3 (opcode, dsta); goto endlabel4428; } { m68k_areg (regs, 7) = dsta; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); x_put_word (dsta, srca >> 16); x_put_word (dsta + 2, srca); }}}} m68k_incpc (2); endlabel4428: ; } /* 12 (1/2) */ /* PEA.L (d16,An) */ void REGPARAM2 CPUFUNC(op_4868_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uaecptr dsta; dsta = m68k_areg (regs, 7) - 4; if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel4429; } { m68k_areg (regs, 7) = dsta; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); x_put_word (dsta, srca >> 16); x_put_word (dsta + 2, srca); }}}} m68k_incpc (4); endlabel4429: ; } /* 16 (2/2) */ /* PEA.L (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_4870_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); { uaecptr dsta; dsta = m68k_areg (regs, 7) - 4; if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel4430; } { m68k_areg (regs, 7) = dsta; do_cycles_ce000 (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); do_cycles_ce000 (2); x_put_word (dsta, srca >> 16); x_put_word (dsta + 2, srca); }}}} m68k_incpc (4); endlabel4430: ; } /* 20 (2/2) */ /* PEA.L (xxx).W */ void REGPARAM2 CPUFUNC(op_4878_12)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uaecptr dsta; dsta = m68k_areg (regs, 7) - 4; if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel4431; } { m68k_areg (regs, 7) = dsta; x_put_word (dsta, srca >> 16); x_put_word (dsta + 2, srca); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); }}}} m68k_incpc (4); endlabel4431: ; } /* 16 (2/2) */ /* PEA.L (xxx).L */ void REGPARAM2 CPUFUNC(op_4879_12)(uae_u32 opcode) { {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); { uaecptr dsta; dsta = m68k_areg (regs, 7) - 4; if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel4432; } { m68k_areg (regs, 7) = dsta; x_put_word (dsta, srca >> 16); x_put_word (dsta + 2, srca); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); }}}} m68k_incpc (6); endlabel4432: ; } /* 20 (3/2) */ /* PEA.L (d16,PC) */ void REGPARAM2 CPUFUNC(op_487a_12)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uaecptr dsta; dsta = m68k_areg (regs, 7) - 4; if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel4433; } { m68k_areg (regs, 7) = dsta; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); x_put_word (dsta, srca >> 16); x_put_word (dsta + 2, srca); }}}} m68k_incpc (4); endlabel4433: ; } /* 16 (2/2) */ /* PEA.L (d8,PC,Xn) */ void REGPARAM2 CPUFUNC(op_487b_12)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_word_ce000_prefetch (4)); { uaecptr dsta; dsta = m68k_areg (regs, 7) - 4; if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel4434; } { m68k_areg (regs, 7) = dsta; do_cycles_ce000 (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); do_cycles_ce000 (2); x_put_word (dsta, srca >> 16); x_put_word (dsta + 2, srca); }}}} m68k_incpc (4); endlabel4434: ; } /* 20 (2/2) */ /* EXT.W Dn */ void REGPARAM2 CPUFUNC(op_4880_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u16 dst = (uae_s16)(uae_s8)src; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(dst)) == 0); SET_NFLG (((uae_s16)(dst)) < 0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | ((dst) & 0xffff); }}} m68k_incpc (2); } /* 4 (1/0) */ /* MVMLE.W #.W,(An) */ void REGPARAM2 CPUFUNC(op_4890_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_ce000_prefetch (4); { uaecptr srca = m68k_areg (regs, dstreg); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4436; } {{ uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; while (dmask) { x_put_word (srca, m68k_dreg (regs, movem_index1[dmask])); srca += 2; dmask = movem_next[dmask]; } while (amask) { x_put_word (srca, m68k_areg (regs, movem_index1[amask])); srca += 2; amask = movem_next[amask]; } regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); }}}} m68k_incpc (4); endlabel4436: ; } /* 8+ (2/0) */ /* MVMLE.W #.W,-(An) */ void REGPARAM2 CPUFUNC(op_48a0_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_ce000_prefetch (4); { uaecptr srca; srca = m68k_areg (regs, dstreg) - 0; if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4437; } {{ uae_u16 amask = mask & 0xff, dmask = (mask >> 8) & 0xff; while (amask) { srca -= 2; x_put_word (srca, m68k_areg (regs, movem_index2[amask])); amask = movem_next[amask]; } while (dmask) { srca -= 2; x_put_word (srca, m68k_dreg (regs, movem_index2[dmask])); dmask = movem_next[dmask]; } m68k_areg (regs, dstreg) = srca; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); }}}} m68k_incpc (4); endlabel4437: ; } /* 8+ (2/0) */ /* MVMLE.W #.W,(d16,An) */ void REGPARAM2 CPUFUNC(op_48a8_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_ce000_prefetch (4); { uaecptr srca = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (6); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4438; } {{ uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; while (dmask) { x_put_word (srca, m68k_dreg (regs, movem_index1[dmask])); srca += 2; dmask = movem_next[dmask]; } while (amask) { x_put_word (srca, m68k_areg (regs, movem_index1[amask])); srca += 2; amask = movem_next[amask]; } regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); }}}} m68k_incpc (6); endlabel4438: ; } /* 12+ (3/0) */ /* MVMLE.W #.W,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_48b0_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_ce000_prefetch (4); { uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (6)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4439; } { do_cycles_ce000 (2); { uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; while (dmask) { x_put_word (srca, m68k_dreg (regs, movem_index1[dmask])); srca += 2; dmask = movem_next[dmask]; } while (amask) { x_put_word (srca, m68k_areg (regs, movem_index1[amask])); srca += 2; amask = movem_next[amask]; } regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); }}}} m68k_incpc (6); endlabel4439: ; } /* 14+ (3/0) */ /* MVMLE.W #.W,(xxx).W */ void REGPARAM2 CPUFUNC(op_48b8_12)(uae_u32 opcode) { { uae_u16 mask = get_word_ce000_prefetch (4); { uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (6); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4440; } {{ uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; while (dmask) { x_put_word (srca, m68k_dreg (regs, movem_index1[dmask])); srca += 2; dmask = movem_next[dmask]; } while (amask) { x_put_word (srca, m68k_areg (regs, movem_index1[amask])); srca += 2; amask = movem_next[amask]; } regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); }}}} m68k_incpc (6); endlabel4440: ; } /* 12+ (3/0) */ /* MVMLE.W #.W,(xxx).L */ void REGPARAM2 CPUFUNC(op_48b9_12)(uae_u32 opcode) { { uae_u16 mask = get_word_ce000_prefetch (4); { uaecptr srca; srca = get_word_ce000_prefetch (6) << 16; srca |= get_word_ce000_prefetch (8); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4441; } {{ uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; while (dmask) { x_put_word (srca, m68k_dreg (regs, movem_index1[dmask])); srca += 2; dmask = movem_next[dmask]; } while (amask) { x_put_word (srca, m68k_areg (regs, movem_index1[amask])); srca += 2; amask = movem_next[amask]; } regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (10); }}}} m68k_incpc (8); endlabel4441: ; } /* 16+ (4/0) */ /* EXT.L Dn */ void REGPARAM2 CPUFUNC(op_48c0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 dst = (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); m68k_dreg (regs, srcreg) = (dst); }}} m68k_incpc (2); } /* 4 (1/0) */ /* MVMLE.L #.W,(An) */ void REGPARAM2 CPUFUNC(op_48d0_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_ce000_prefetch (4); { uaecptr srca = m68k_areg (regs, dstreg); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4443; } {{ uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; while (dmask) { x_put_word (srca, m68k_dreg (regs, movem_index1[dmask]) >> 16); x_put_word (srca + 2, m68k_dreg (regs, movem_index1[dmask])); srca += 4; dmask = movem_next[dmask]; } while (amask) { x_put_word (srca, m68k_areg (regs, movem_index1[amask]) >> 16); x_put_word (srca + 2, m68k_areg (regs, movem_index1[amask])); srca += 4; amask = movem_next[amask]; } regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); }}}} m68k_incpc (4); endlabel4443: ; } /* 8+ (2/0) */ /* MVMLE.L #.W,-(An) */ void REGPARAM2 CPUFUNC(op_48e0_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_ce000_prefetch (4); { uaecptr srca; srca = m68k_areg (regs, dstreg) - 0; if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4444; } {{ uae_u16 amask = mask & 0xff, dmask = (mask >> 8) & 0xff; while (amask) { srca -= 4; x_put_word (srca, m68k_areg (regs, movem_index2[amask]) >> 16); x_put_word (srca + 2, m68k_areg (regs, movem_index2[amask])); amask = movem_next[amask]; } while (dmask) { srca -= 4; x_put_word (srca, m68k_dreg (regs, movem_index2[dmask]) >> 16); x_put_word (srca + 2, m68k_dreg (regs, movem_index2[dmask])); dmask = movem_next[dmask]; } m68k_areg (regs, dstreg) = srca; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); }}}} m68k_incpc (4); endlabel4444: ; } /* 8+ (2/0) */ /* MVMLE.L #.W,(d16,An) */ void REGPARAM2 CPUFUNC(op_48e8_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_ce000_prefetch (4); { uaecptr srca = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (6); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4445; } {{ uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; while (dmask) { x_put_word (srca, m68k_dreg (regs, movem_index1[dmask]) >> 16); x_put_word (srca + 2, m68k_dreg (regs, movem_index1[dmask])); srca += 4; dmask = movem_next[dmask]; } while (amask) { x_put_word (srca, m68k_areg (regs, movem_index1[amask]) >> 16); x_put_word (srca + 2, m68k_areg (regs, movem_index1[amask])); srca += 4; amask = movem_next[amask]; } regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); }}}} m68k_incpc (6); endlabel4445: ; } /* 12+ (3/0) */ /* MVMLE.L #.W,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_48f0_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_ce000_prefetch (4); { uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (6)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4446; } { do_cycles_ce000 (2); { uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; while (dmask) { x_put_word (srca, m68k_dreg (regs, movem_index1[dmask]) >> 16); x_put_word (srca + 2, m68k_dreg (regs, movem_index1[dmask])); srca += 4; dmask = movem_next[dmask]; } while (amask) { x_put_word (srca, m68k_areg (regs, movem_index1[amask]) >> 16); x_put_word (srca + 2, m68k_areg (regs, movem_index1[amask])); srca += 4; amask = movem_next[amask]; } regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); }}}} m68k_incpc (6); endlabel4446: ; } /* 14+ (3/0) */ /* MVMLE.L #.W,(xxx).W */ void REGPARAM2 CPUFUNC(op_48f8_12)(uae_u32 opcode) { { uae_u16 mask = get_word_ce000_prefetch (4); { uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (6); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4447; } {{ uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; while (dmask) { x_put_word (srca, m68k_dreg (regs, movem_index1[dmask]) >> 16); x_put_word (srca + 2, m68k_dreg (regs, movem_index1[dmask])); srca += 4; dmask = movem_next[dmask]; } while (amask) { x_put_word (srca, m68k_areg (regs, movem_index1[amask]) >> 16); x_put_word (srca + 2, m68k_areg (regs, movem_index1[amask])); srca += 4; amask = movem_next[amask]; } regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); }}}} m68k_incpc (6); endlabel4447: ; } /* 12+ (3/0) */ /* MVMLE.L #.W,(xxx).L */ void REGPARAM2 CPUFUNC(op_48f9_12)(uae_u32 opcode) { { uae_u16 mask = get_word_ce000_prefetch (4); { uaecptr srca; srca = get_word_ce000_prefetch (6) << 16; srca |= get_word_ce000_prefetch (8); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4448; } {{ uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; while (dmask) { x_put_word (srca, m68k_dreg (regs, movem_index1[dmask]) >> 16); x_put_word (srca + 2, m68k_dreg (regs, movem_index1[dmask])); srca += 4; dmask = movem_next[dmask]; } while (amask) { x_put_word (srca, m68k_areg (regs, movem_index1[amask]) >> 16); x_put_word (srca + 2, m68k_areg (regs, movem_index1[amask])); srca += 4; amask = movem_next[amask]; } regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (10); }}}} m68k_incpc (8); endlabel4448: ; } /* 16+ (4/0) */ /* TST.B Dn */ void REGPARAM2 CPUFUNC(op_4a00_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }} m68k_incpc (2); } /* 4 (1/0) */ /* TST.B (An) */ void REGPARAM2 CPUFUNC(op_4a10_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }}} m68k_incpc (2); } /* 8 (2/0) */ /* TST.B (An)+ */ void REGPARAM2 CPUFUNC(op_4a18_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }}} m68k_incpc (2); } /* 8 (2/0) */ /* TST.B -(An) */ void REGPARAM2 CPUFUNC(op_4a20_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; do_cycles_ce000 (2); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }}} m68k_incpc (2); } /* 10 (2/0) */ /* TST.B (d16,An) */ void REGPARAM2 CPUFUNC(op_4a28_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }}} m68k_incpc (4); } /* 12 (3/0) */ /* TST.B (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_4a30_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); { uae_s8 src = x_get_byte (srca); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }}} m68k_incpc (4); } /* 14 (3/0) */ /* TST.B (xxx).W */ void REGPARAM2 CPUFUNC(op_4a38_12)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }}} m68k_incpc (4); } /* 12 (3/0) */ /* TST.B (xxx).L */ void REGPARAM2 CPUFUNC(op_4a39_12)(uae_u32 opcode) { {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); { uae_s8 src = x_get_byte (srca); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }}} m68k_incpc (6); } /* 16 (4/0) */ /* TST.B #.B */ void REGPARAM2 CPUFUNC(op_4a3c_12)(uae_u32 opcode) { {{ uae_s8 src = (uae_u8)get_word_ce000_prefetch (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }} m68k_incpc (4); } /* 8 (2/0) */ /* TST.W Dn */ void REGPARAM2 CPUFUNC(op_4a40_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }} m68k_incpc (2); } /* 4 (1/0) */ /* TST.W (An) */ void REGPARAM2 CPUFUNC(op_4a50_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4459; } {{ uae_s16 src = x_get_word (srca); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }}}} m68k_incpc (2); endlabel4459: ; } /* 8 (2/0) */ /* TST.W (An)+ */ void REGPARAM2 CPUFUNC(op_4a58_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4460; } {{ uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }}}} m68k_incpc (2); endlabel4460: ; } /* 8 (2/0) */ /* TST.W -(An) */ void REGPARAM2 CPUFUNC(op_4a60_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; do_cycles_ce000 (2); if (srca & 1) { exception3 (opcode, srca); goto endlabel4461; } {{ uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }}}} m68k_incpc (2); endlabel4461: ; } /* 10 (2/0) */ /* TST.W (d16,An) */ void REGPARAM2 CPUFUNC(op_4a68_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel4462; } {{ uae_s16 src = x_get_word (srca); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }}}} m68k_incpc (4); endlabel4462: ; } /* 12 (3/0) */ /* TST.W (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_4a70_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel4463; } {{ uae_s16 src = x_get_word (srca); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }}}} m68k_incpc (4); endlabel4463: ; } /* 14 (3/0) */ /* TST.W (xxx).W */ void REGPARAM2 CPUFUNC(op_4a78_12)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel4464; } {{ uae_s16 src = x_get_word (srca); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }}}} m68k_incpc (4); endlabel4464: ; } /* 12 (3/0) */ /* TST.W (xxx).L */ void REGPARAM2 CPUFUNC(op_4a79_12)(uae_u32 opcode) { {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); if (srca & 1) { exception3 (opcode, srca); goto endlabel4465; } {{ uae_s16 src = x_get_word (srca); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }}}} m68k_incpc (6); endlabel4465: ; } /* 16 (4/0) */ /* TST.W #.W */ void REGPARAM2 CPUFUNC(op_4a7c_12)(uae_u32 opcode) { {{ uae_s16 src = get_word_ce000_prefetch (4); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }} m68k_incpc (4); } /* 8 (2/0) */ /* TST.L Dn */ void REGPARAM2 CPUFUNC(op_4a80_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }} m68k_incpc (2); } /* 4 (1/0) */ /* TST.L (An) */ void REGPARAM2 CPUFUNC(op_4a90_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4468; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }}}} m68k_incpc (2); endlabel4468: ; } /* 12 (3/0) */ /* TST.L (An)+ */ void REGPARAM2 CPUFUNC(op_4a98_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4469; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); m68k_areg (regs, srcreg) += 4; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }}}} m68k_incpc (2); endlabel4469: ; } /* 12 (3/0) */ /* TST.L -(An) */ void REGPARAM2 CPUFUNC(op_4aa0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; do_cycles_ce000 (2); if (srca & 1) { exception3 (opcode, srca); goto endlabel4470; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); m68k_areg (regs, srcreg) = srca; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }}}} m68k_incpc (2); endlabel4470: ; } /* 14 (3/0) */ /* TST.L (d16,An) */ void REGPARAM2 CPUFUNC(op_4aa8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel4471; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }}}} m68k_incpc (4); endlabel4471: ; } /* 16 (4/0) */ /* TST.L (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_4ab0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel4472; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }}}} m68k_incpc (4); endlabel4472: ; } /* 18 (4/0) */ /* TST.L (xxx).W */ void REGPARAM2 CPUFUNC(op_4ab8_12)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel4473; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }}}} m68k_incpc (4); endlabel4473: ; } /* 16 (4/0) */ /* TST.L (xxx).L */ void REGPARAM2 CPUFUNC(op_4ab9_12)(uae_u32 opcode) { {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); if (srca & 1) { exception3 (opcode, srca); goto endlabel4474; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }}}} m68k_incpc (6); endlabel4474: ; } /* 20 (5/0) */ /* TST.L #.L */ void REGPARAM2 CPUFUNC(op_4abc_12)(uae_u32 opcode) { {{ uae_s32 src; src = get_word_ce000_prefetch (4) << 16; src |= get_word_ce000_prefetch (6); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }} m68k_incpc (6); } /* 12 (3/0) */ /* TAS.B Dn */ void REGPARAM2 CPUFUNC(op_4ac0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); src |= 0x80; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((src) & 0xff); }} m68k_incpc (2); } /* 4 (1/0) */ /* TAS.B (An) */ void REGPARAM2 CPUFUNC(op_4ad0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); do_cycles_ce000 (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); src |= 0x80; if (!is_cycle_ce ()) { x_put_byte (srca, src); } else { do_cycles_ce000 (4); } }}} m68k_incpc (2); } /* 14 (2/1) */ /* TAS.B (An)+ */ void REGPARAM2 CPUFUNC(op_4ad8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); do_cycles_ce000 (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); src |= 0x80; if (!is_cycle_ce ()) { x_put_byte (srca, src); } else { do_cycles_ce000 (4); } }}} m68k_incpc (2); } /* 14 (2/1) */ /* TAS.B -(An) */ void REGPARAM2 CPUFUNC(op_4ae0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; do_cycles_ce000 (2); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); do_cycles_ce000 (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); src |= 0x80; if (!is_cycle_ce ()) { x_put_byte (srca, src); } else { do_cycles_ce000 (4); } }}} m68k_incpc (2); } /* 16 (2/1) */ /* TAS.B (d16,An) */ void REGPARAM2 CPUFUNC(op_4ae8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); do_cycles_ce000 (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); src |= 0x80; if (!is_cycle_ce ()) { x_put_byte (srca, src); } else { do_cycles_ce000 (4); } }}} m68k_incpc (4); } /* 18 (3/1) */ /* TAS.B (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_4af0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); { uae_s8 src = x_get_byte (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); do_cycles_ce000 (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); src |= 0x80; if (!is_cycle_ce ()) { x_put_byte (srca, src); } else { do_cycles_ce000 (4); } }}} m68k_incpc (4); } /* 20 (3/1) */ /* TAS.B (xxx).W */ void REGPARAM2 CPUFUNC(op_4af8_12)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); do_cycles_ce000 (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); src |= 0x80; if (!is_cycle_ce ()) { x_put_byte (srca, src); } else { do_cycles_ce000 (4); } }}} m68k_incpc (4); } /* 18 (3/1) */ /* TAS.B (xxx).L */ void REGPARAM2 CPUFUNC(op_4af9_12)(uae_u32 opcode) { {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); { uae_s8 src = x_get_byte (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); do_cycles_ce000 (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); src |= 0x80; if (!is_cycle_ce ()) { x_put_byte (srca, src); } else { do_cycles_ce000 (4); } }}} m68k_incpc (6); } /* 22 (4/1) */ /* MVMEL.W #.W,(An) */ void REGPARAM2 CPUFUNC(op_4c90_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_ce000_prefetch (4); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; uae_u32 v; { uaecptr srca = m68k_areg (regs, dstreg); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4484; } {{ while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = (uae_s32)(uae_s16)x_get_word (srca); srca += 2; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = (uae_s32)(uae_s16)x_get_word (srca); srca += 2; amask = movem_next[amask]; } x_get_word (srca); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); }}}} m68k_incpc (4); endlabel4484: ; } /* 12+ (3/0) */ /* MVMEL.W #.W,(An)+ */ void REGPARAM2 CPUFUNC(op_4c98_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_ce000_prefetch (4); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; uae_u32 v; { uaecptr srca = m68k_areg (regs, dstreg); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4485; } {{ while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = (uae_s32)(uae_s16)x_get_word (srca); srca += 2; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = (uae_s32)(uae_s16)x_get_word (srca); srca += 2; amask = movem_next[amask]; } x_get_word (srca); m68k_areg (regs, dstreg) = srca; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); }}}} m68k_incpc (4); endlabel4485: ; } /* 12+ (3/0) */ /* MVMEL.W #.W,(d16,An) */ void REGPARAM2 CPUFUNC(op_4ca8_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_ce000_prefetch (4); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; uae_u32 v; { uaecptr srca = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (6); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4486; } {{ while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = (uae_s32)(uae_s16)x_get_word (srca); srca += 2; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = (uae_s32)(uae_s16)x_get_word (srca); srca += 2; amask = movem_next[amask]; } x_get_word (srca); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); }}}} m68k_incpc (6); endlabel4486: ; } /* 16+ (4/0) */ /* MVMEL.W #.W,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_4cb0_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_ce000_prefetch (4); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; uae_u32 v; { uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (6)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4487; } { do_cycles_ce000 (2); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = (uae_s32)(uae_s16)x_get_word (srca); srca += 2; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = (uae_s32)(uae_s16)x_get_word (srca); srca += 2; amask = movem_next[amask]; } x_get_word (srca); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); }}}} m68k_incpc (6); endlabel4487: ; } /* 18+ (4/0) */ /* MVMEL.W #.W,(xxx).W */ void REGPARAM2 CPUFUNC(op_4cb8_12)(uae_u32 opcode) { { uae_u16 mask = get_word_ce000_prefetch (4); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; uae_u32 v; { uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (6); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4488; } {{ while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = (uae_s32)(uae_s16)x_get_word (srca); srca += 2; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = (uae_s32)(uae_s16)x_get_word (srca); srca += 2; amask = movem_next[amask]; } x_get_word (srca); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); }}}} m68k_incpc (6); endlabel4488: ; } /* 16+ (4/0) */ /* MVMEL.W #.W,(xxx).L */ void REGPARAM2 CPUFUNC(op_4cb9_12)(uae_u32 opcode) { { uae_u16 mask = get_word_ce000_prefetch (4); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; uae_u32 v; { uaecptr srca; srca = get_word_ce000_prefetch (6) << 16; srca |= get_word_ce000_prefetch (8); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4489; } {{ while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = (uae_s32)(uae_s16)x_get_word (srca); srca += 2; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = (uae_s32)(uae_s16)x_get_word (srca); srca += 2; amask = movem_next[amask]; } x_get_word (srca); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (10); }}}} m68k_incpc (8); endlabel4489: ; } /* 20+ (5/0) */ /* MVMEL.W #.W,(d16,PC) */ void REGPARAM2 CPUFUNC(op_4cba_12)(uae_u32 opcode) { uae_u32 dstreg = 2; { uae_u16 mask = get_word_ce000_prefetch (4); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; uae_u32 v; { uaecptr srca = m68k_getpc () + 4; srca += (uae_s32)(uae_s16)get_word_ce000_prefetch (6); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4490; } {{ while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = (uae_s32)(uae_s16)x_get_word (srca); srca += 2; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = (uae_s32)(uae_s16)x_get_word (srca); srca += 2; amask = movem_next[amask]; } x_get_word (srca); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); }}}} m68k_incpc (6); endlabel4490: ; } /* 16+ (4/0) */ /* MVMEL.W #.W,(d8,PC,Xn) */ void REGPARAM2 CPUFUNC(op_4cbb_12)(uae_u32 opcode) { uae_u32 dstreg = 3; { uae_u16 mask = get_word_ce000_prefetch (4); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; uae_u32 v; { uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 4; srca = get_disp_ea_000 (tmppc, get_word_ce000_prefetch (6)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4491; } { do_cycles_ce000 (2); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = (uae_s32)(uae_s16)x_get_word (srca); srca += 2; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = (uae_s32)(uae_s16)x_get_word (srca); srca += 2; amask = movem_next[amask]; } x_get_word (srca); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); }}}} m68k_incpc (6); endlabel4491: ; } /* 18+ (4/0) */ /* MVMEL.L #.W,(An) */ void REGPARAM2 CPUFUNC(op_4cd0_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_ce000_prefetch (4); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; uae_u32 v; { uaecptr srca = m68k_areg (regs, dstreg); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4492; } {{ while (dmask) { v = x_get_word (srca) << 16; v |= x_get_word (srca + 2); m68k_dreg (regs, movem_index1[dmask]) = v; srca += 4; dmask = movem_next[dmask]; } while (amask) { v = x_get_word (srca) << 16; v |= x_get_word (srca + 2); m68k_areg (regs, movem_index1[amask]) = v; srca += 4; amask = movem_next[amask]; } x_get_word (srca); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); }}}} m68k_incpc (4); endlabel4492: ; } /* 12+ (3/0) */ /* MVMEL.L #.W,(An)+ */ void REGPARAM2 CPUFUNC(op_4cd8_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_ce000_prefetch (4); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; uae_u32 v; { uaecptr srca = m68k_areg (regs, dstreg); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4493; } {{ while (dmask) { v = x_get_word (srca) << 16; v |= x_get_word (srca + 2); m68k_dreg (regs, movem_index1[dmask]) = v; srca += 4; dmask = movem_next[dmask]; } while (amask) { v = x_get_word (srca) << 16; v |= x_get_word (srca + 2); m68k_areg (regs, movem_index1[amask]) = v; srca += 4; amask = movem_next[amask]; } x_get_word (srca); m68k_areg (regs, dstreg) = srca; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); }}}} m68k_incpc (4); endlabel4493: ; } /* 12+ (3/0) */ /* MVMEL.L #.W,(d16,An) */ void REGPARAM2 CPUFUNC(op_4ce8_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_ce000_prefetch (4); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; uae_u32 v; { uaecptr srca = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (6); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4494; } {{ while (dmask) { v = x_get_word (srca) << 16; v |= x_get_word (srca + 2); m68k_dreg (regs, movem_index1[dmask]) = v; srca += 4; dmask = movem_next[dmask]; } while (amask) { v = x_get_word (srca) << 16; v |= x_get_word (srca + 2); m68k_areg (regs, movem_index1[amask]) = v; srca += 4; amask = movem_next[amask]; } x_get_word (srca); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); }}}} m68k_incpc (6); endlabel4494: ; } /* 16+ (4/0) */ /* MVMEL.L #.W,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_4cf0_12)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_ce000_prefetch (4); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; uae_u32 v; { uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (6)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4495; } { do_cycles_ce000 (2); { while (dmask) { v = x_get_word (srca) << 16; v |= x_get_word (srca + 2); m68k_dreg (regs, movem_index1[dmask]) = v; srca += 4; dmask = movem_next[dmask]; } while (amask) { v = x_get_word (srca) << 16; v |= x_get_word (srca + 2); m68k_areg (regs, movem_index1[amask]) = v; srca += 4; amask = movem_next[amask]; } x_get_word (srca); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); }}}} m68k_incpc (6); endlabel4495: ; } /* 18+ (4/0) */ /* MVMEL.L #.W,(xxx).W */ void REGPARAM2 CPUFUNC(op_4cf8_12)(uae_u32 opcode) { { uae_u16 mask = get_word_ce000_prefetch (4); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; uae_u32 v; { uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (6); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4496; } {{ while (dmask) { v = x_get_word (srca) << 16; v |= x_get_word (srca + 2); m68k_dreg (regs, movem_index1[dmask]) = v; srca += 4; dmask = movem_next[dmask]; } while (amask) { v = x_get_word (srca) << 16; v |= x_get_word (srca + 2); m68k_areg (regs, movem_index1[amask]) = v; srca += 4; amask = movem_next[amask]; } x_get_word (srca); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); }}}} m68k_incpc (6); endlabel4496: ; } /* 16+ (4/0) */ /* MVMEL.L #.W,(xxx).L */ void REGPARAM2 CPUFUNC(op_4cf9_12)(uae_u32 opcode) { { uae_u16 mask = get_word_ce000_prefetch (4); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; uae_u32 v; { uaecptr srca; srca = get_word_ce000_prefetch (6) << 16; srca |= get_word_ce000_prefetch (8); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4497; } {{ while (dmask) { v = x_get_word (srca) << 16; v |= x_get_word (srca + 2); m68k_dreg (regs, movem_index1[dmask]) = v; srca += 4; dmask = movem_next[dmask]; } while (amask) { v = x_get_word (srca) << 16; v |= x_get_word (srca + 2); m68k_areg (regs, movem_index1[amask]) = v; srca += 4; amask = movem_next[amask]; } x_get_word (srca); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (10); }}}} m68k_incpc (8); endlabel4497: ; } /* 20+ (5/0) */ /* MVMEL.L #.W,(d16,PC) */ void REGPARAM2 CPUFUNC(op_4cfa_12)(uae_u32 opcode) { uae_u32 dstreg = 2; { uae_u16 mask = get_word_ce000_prefetch (4); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; uae_u32 v; { uaecptr srca = m68k_getpc () + 4; srca += (uae_s32)(uae_s16)get_word_ce000_prefetch (6); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4498; } {{ while (dmask) { v = x_get_word (srca) << 16; v |= x_get_word (srca + 2); m68k_dreg (regs, movem_index1[dmask]) = v; srca += 4; dmask = movem_next[dmask]; } while (amask) { v = x_get_word (srca) << 16; v |= x_get_word (srca + 2); m68k_areg (regs, movem_index1[amask]) = v; srca += 4; amask = movem_next[amask]; } x_get_word (srca); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); }}}} m68k_incpc (6); endlabel4498: ; } /* 16+ (4/0) */ /* MVMEL.L #.W,(d8,PC,Xn) */ void REGPARAM2 CPUFUNC(op_4cfb_12)(uae_u32 opcode) { uae_u32 dstreg = 3; { uae_u16 mask = get_word_ce000_prefetch (4); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; uae_u32 v; { uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 4; srca = get_disp_ea_000 (tmppc, get_word_ce000_prefetch (6)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel4499; } { do_cycles_ce000 (2); { while (dmask) { v = x_get_word (srca) << 16; v |= x_get_word (srca + 2); m68k_dreg (regs, movem_index1[dmask]) = v; srca += 4; dmask = movem_next[dmask]; } while (amask) { v = x_get_word (srca) << 16; v |= x_get_word (srca + 2); m68k_areg (regs, movem_index1[amask]) = v; srca += 4; amask = movem_next[amask]; } x_get_word (srca); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); }}}} m68k_incpc (6); endlabel4499: ; } /* 18+ (4/0) */ /* TRAPQ.L # */ void REGPARAM2 CPUFUNC(op_4e40_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 15); {{ uae_u32 src = srcreg; m68k_incpc (2); Exception (src + 32); }}} /* 4 (0/0) */ /* LINK.W An,#.W */ void REGPARAM2 CPUFUNC(op_4e50_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr olda; olda = m68k_areg (regs, 7) - 4; if (olda & 1) { exception3 (opcode, olda); goto endlabel4501; } { m68k_areg (regs, 7) = olda; { uae_s32 src = m68k_areg (regs, srcreg); { uae_s16 offs = get_word_ce000_prefetch (4); x_put_word (olda, src >> 16); x_put_word (olda + 2, src); m68k_areg (regs, srcreg) = (m68k_areg (regs, 7)); m68k_areg (regs, 7) += offs; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); }}}}} m68k_incpc (4); endlabel4501: ; } /* 16 (2/2) */ /* UNLK.L An */ void REGPARAM2 CPUFUNC(op_4e58_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_areg (regs, srcreg); m68k_areg (regs, 7) = src; { uaecptr olda = m68k_areg (regs, 7); if (olda & 1) { exception3 (opcode, olda); goto endlabel4502; } {{ uae_s32 old = x_get_word (olda) << 16; old |= x_get_word (olda + 2); m68k_areg (regs, 7) += 4; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); m68k_areg (regs, srcreg) = (old); }}}}} m68k_incpc (2); endlabel4502: ; } /* 12 (3/0) */ /* MVR2USP.L An */ void REGPARAM2 CPUFUNC(op_4e60_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel4503; } {{ uae_s32 src = m68k_areg (regs, srcreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); regs.usp = src; }}} m68k_incpc (2); endlabel4503: ; } /* 4 (1/0) */ /* MVUSP2R.L An */ void REGPARAM2 CPUFUNC(op_4e68_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel4504; } {{ regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); m68k_areg (regs, srcreg) = (regs.usp); }}} m68k_incpc (2); endlabel4504: ; } /* 4 (1/0) */ /* RESET.L */ void REGPARAM2 CPUFUNC(op_4e70_12)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel4505; } { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); cpureset (); m68k_incpc (2); do_cycles_ce000 (128); get_word_ce000_prefetch (2); }}endlabel4505: ; } /* 132 (1/0) */ /* NOP.L */ void REGPARAM2 CPUFUNC(op_4e71_12)(uae_u32 opcode) { { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); } m68k_incpc (2); } /* 4 (1/0) */ /* STOP.L #.W */ void REGPARAM2 CPUFUNC(op_4e72_12)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel4507; } { regs.sr = regs.irc; MakeFromSR (); m68k_setstopped (); m68k_incpc (4); }}endlabel4507: ; } /* 4 (0/0) */ /* RTE.L */ void REGPARAM2 CPUFUNC(op_4e73_12)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel4508; } {{ uaecptr sra = m68k_areg (regs, 7); if (sra & 1) { exception3 (opcode, sra); goto endlabel4508; } {{ uae_s16 sr = x_get_word (sra); m68k_areg (regs, 7) += 2; { uaecptr pca = m68k_areg (regs, 7); if (pca & 1) { exception3 (opcode, pca); goto endlabel4508; } {{ uae_s32 pc = x_get_word (pca) << 16; pc |= x_get_word (pca + 2); m68k_areg (regs, 7) += 4; regs.sr = sr; m68k_setpc (pc); MakeFromSR (); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}}}endlabel4508: ; } /* 20 (5/0) */ /* RTD.L #.W */ void REGPARAM2 CPUFUNC(op_4e74_12)(uae_u32 opcode) { {{ uaecptr pca = m68k_areg (regs, 7); if (pca & 1) { exception3 (opcode, pca); goto endlabel4509; } {{ uae_s32 pc = x_get_word (pca) << 16; pc |= x_get_word (pca + 2); m68k_areg (regs, 7) += 4; { uae_s16 offs = get_word_ce000_prefetch (4); m68k_areg (regs, 7) += offs; if (pc & 1) { exception3i (0x4E74, pc); goto endlabel4509; } if (pc & 1) { exception3i (0x4E74, pc); goto endlabel4509; } m68k_setpc (pc); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}endlabel4509: ; } /* 20 (5/0) */ /* RTS.L */ void REGPARAM2 CPUFUNC(op_4e75_12)(uae_u32 opcode) { { uaecptr pc = m68k_getpc (); m68k_do_rts_ce (); if (m68k_getpc () & 1) { uaecptr faultpc = m68k_getpc (); m68k_setpc (pc); exception3i (0x4E75, faultpc); } get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }} /* 16 (4/0) */ /* TRAPV.L */ void REGPARAM2 CPUFUNC(op_4e76_12)(uae_u32 opcode) { { m68k_incpc (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); if (GET_VFLG ()) { Exception (7); goto endlabel4511; } }endlabel4511: ; } /* 4 (1/0) */ /* RTR.L */ void REGPARAM2 CPUFUNC(op_4e77_12)(uae_u32 opcode) { { uaecptr oldpc = m68k_getpc (); MakeSR (); { uaecptr sra = m68k_areg (regs, 7); if (sra & 1) { exception3 (opcode, sra); goto endlabel4512; } {{ uae_s16 sr = x_get_word (sra); m68k_areg (regs, 7) += 2; { uaecptr pca = m68k_areg (regs, 7); if (pca & 1) { exception3 (opcode, pca); goto endlabel4512; } {{ uae_s32 pc = x_get_word (pca) << 16; pc |= x_get_word (pca + 2); m68k_areg (regs, 7) += 4; regs.sr &= 0xFF00; sr &= 0xFF; regs.sr |= sr; m68k_setpc (pc); MakeFromSR (); if (m68k_getpc () & 1) { uaecptr faultpc = m68k_getpc (); m68k_setpc (oldpc); exception3i (0x4E77, faultpc); } get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}}}}}endlabel4512: ; } /* 20 (5/0) */ /* JSR.L (An) */ void REGPARAM2 CPUFUNC(op_4e90_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uaecptr oldpc = m68k_getpc () + 2; if (srca & 1) { exception3i (opcode, srca); goto endlabel4513; } m68k_setpc (srca); get_word_ce000_prefetch (0); m68k_areg (regs, 7) -= 4; x_put_word (m68k_areg (regs, 7), oldpc >> 16); x_put_word (m68k_areg (regs, 7) + 2, oldpc); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}endlabel4513: ; } /* 16 (2/2) */ /* JSR.L (d16,An) */ void REGPARAM2 CPUFUNC(op_4ea8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)regs.irc; { uaecptr oldpc = m68k_getpc () + 4; if (srca & 1) { exception3i (opcode, srca); goto endlabel4514; } do_cycles_ce000 (2); m68k_setpc (srca); get_word_ce000_prefetch (0); m68k_areg (regs, 7) -= 4; x_put_word (m68k_areg (regs, 7), oldpc >> 16); x_put_word (m68k_areg (regs, 7) + 2, oldpc); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}endlabel4514: ; } /* 18 (2/2) */ /* JSR.L (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_4eb0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), regs.irc); { uaecptr oldpc = m68k_getpc () + 4; if (srca & 1) { exception3i (opcode, srca); goto endlabel4515; } m68k_setpc (srca); get_word_ce000_prefetch (0); do_cycles_ce000 (6); m68k_areg (regs, 7) -= 4; x_put_word (m68k_areg (regs, 7), oldpc >> 16); x_put_word (m68k_areg (regs, 7) + 2, oldpc); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}endlabel4515: ; } /* 22 (2/2) */ /* JSR.L (xxx).W */ void REGPARAM2 CPUFUNC(op_4eb8_12)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)regs.irc; { uaecptr oldpc = m68k_getpc () + 4; if (srca & 1) { exception3i (opcode, srca); goto endlabel4516; } do_cycles_ce000 (2); m68k_setpc (srca); get_word_ce000_prefetch (0); m68k_areg (regs, 7) -= 4; x_put_word (m68k_areg (regs, 7), oldpc >> 16); x_put_word (m68k_areg (regs, 7) + 2, oldpc); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}endlabel4516: ; } /* 18 (2/2) */ /* JSR.L (xxx).L */ void REGPARAM2 CPUFUNC(op_4eb9_12)(uae_u32 opcode) { {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= regs.irc; { uaecptr oldpc = m68k_getpc () + 6; if (srca & 1) { exception3i (opcode, srca); goto endlabel4517; } m68k_setpc (srca); get_word_ce000_prefetch (0); m68k_areg (regs, 7) -= 4; x_put_word (m68k_areg (regs, 7), oldpc >> 16); x_put_word (m68k_areg (regs, 7) + 2, oldpc); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}endlabel4517: ; } /* 20 (3/2) */ /* JSR.L (d16,PC) */ void REGPARAM2 CPUFUNC(op_4eba_12)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)regs.irc; { uaecptr oldpc = m68k_getpc () + 4; if (srca & 1) { exception3i (opcode, srca); goto endlabel4518; } do_cycles_ce000 (2); m68k_setpc (srca); get_word_ce000_prefetch (0); m68k_areg (regs, 7) -= 4; x_put_word (m68k_areg (regs, 7), oldpc >> 16); x_put_word (m68k_areg (regs, 7) + 2, oldpc); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}endlabel4518: ; } /* 18 (2/2) */ /* JSR.L (d8,PC,Xn) */ void REGPARAM2 CPUFUNC(op_4ebb_12)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, regs.irc); { uaecptr oldpc = m68k_getpc () + 4; if (srca & 1) { exception3i (opcode, srca); goto endlabel4519; } m68k_setpc (srca); get_word_ce000_prefetch (0); do_cycles_ce000 (6); m68k_areg (regs, 7) -= 4; x_put_word (m68k_areg (regs, 7), oldpc >> 16); x_put_word (m68k_areg (regs, 7) + 2, oldpc); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}endlabel4519: ; } /* 22 (2/2) */ /* JMP.L (An) */ void REGPARAM2 CPUFUNC(op_4ed0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3i (opcode, srca); goto endlabel4520; } m68k_setpc (srca); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}endlabel4520: ; } /* 8 (2/0) */ /* JMP.L (d16,An) */ void REGPARAM2 CPUFUNC(op_4ee8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)regs.irc; if (srca & 1) { exception3i (opcode, srca); goto endlabel4521; } do_cycles_ce000 (2); m68k_setpc (srca); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}endlabel4521: ; } /* 10 (2/0) */ /* JMP.L (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_4ef0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); if (srca & 1) { exception3i (opcode, srca); goto endlabel4522; } do_cycles_ce000 (2); m68k_setpc (srca); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}endlabel4522: ; } /* 14 (3/0) */ /* JMP.L (xxx).W */ void REGPARAM2 CPUFUNC(op_4ef8_12)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)regs.irc; if (srca & 1) { exception3i (opcode, srca); goto endlabel4523; } do_cycles_ce000 (2); m68k_setpc (srca); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}endlabel4523: ; } /* 10 (2/0) */ /* JMP.L (xxx).L */ void REGPARAM2 CPUFUNC(op_4ef9_12)(uae_u32 opcode) { {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= regs.irc; if (srca & 1) { exception3i (opcode, srca); goto endlabel4524; } m68k_setpc (srca); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}endlabel4524: ; } /* 12 (3/0) */ /* JMP.L (d16,PC) */ void REGPARAM2 CPUFUNC(op_4efa_12)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)regs.irc; if (srca & 1) { exception3i (opcode, srca); goto endlabel4525; } do_cycles_ce000 (2); m68k_setpc (srca); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}endlabel4525: ; } /* 10 (2/0) */ /* JMP.L (d8,PC,Xn) */ void REGPARAM2 CPUFUNC(op_4efb_12)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_word_ce000_prefetch (4)); if (srca & 1) { exception3i (opcode, srca); goto endlabel4526; } do_cycles_ce000 (2); m68k_setpc (srca); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}endlabel4526: ; } /* 14 (3/0) */ /* ADDQ.B #,Dn */ void REGPARAM2 CPUFUNC(op_5000_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}} m68k_incpc (2); } /* 4 (1/0) */ /* ADDQ.B #,(An) */ void REGPARAM2 CPUFUNC(op_5010_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (2); } /* 12 (2/1) */ /* ADDQ.B #,(An)+ */ void REGPARAM2 CPUFUNC(op_5018_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (2); } /* 12 (2/1) */ /* ADDQ.B #,-(An) */ void REGPARAM2 CPUFUNC(op_5020_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; do_cycles_ce000 (2); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (2); } /* 14 (2/1) */ /* ADDQ.B #,(d16,An) */ void REGPARAM2 CPUFUNC(op_5028_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 dst = x_get_byte (dsta); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (4); } /* 16 (3/1) */ /* ADDQ.B #,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_5030_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (4)); { uae_s8 dst = x_get_byte (dsta); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (4); } /* 18 (3/1) */ /* ADDQ.B #,(xxx).W */ void REGPARAM2 CPUFUNC(op_5038_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 dst = x_get_byte (dsta); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (4); } /* 16 (3/1) */ /* ADDQ.B #,(xxx).L */ void REGPARAM2 CPUFUNC(op_5039_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta; dsta = get_word_ce000_prefetch (4) << 16; dsta |= get_word_ce000_prefetch (6); { uae_s8 dst = x_get_byte (dsta); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (6); } /* 20 (4/1) */ /* ADDQ.W #,Dn */ void REGPARAM2 CPUFUNC(op_5040_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}} m68k_incpc (2); } /* 4 (1/0) */ /* ADDAQ.W #,An */ void REGPARAM2 CPUFUNC(op_5048_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); do_cycles_ce000 (4); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpc (2); } /* 8 (1/0) */ /* ADDQ.W #,(An) */ void REGPARAM2 CPUFUNC(op_5050_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel4537; } {{ uae_s16 dst = x_get_word (dsta); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}}} m68k_incpc (2); endlabel4537: ; } /* 12 (2/1) */ /* ADDQ.W #,(An)+ */ void REGPARAM2 CPUFUNC(op_5058_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel4538; } {{ uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) += 2; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}}} m68k_incpc (2); endlabel4538: ; } /* 12 (2/1) */ /* ADDQ.W #,-(An) */ void REGPARAM2 CPUFUNC(op_5060_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; do_cycles_ce000 (2); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel4539; } {{ uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}}} m68k_incpc (2); endlabel4539: ; } /* 14 (2/1) */ /* ADDQ.W #,(d16,An) */ void REGPARAM2 CPUFUNC(op_5068_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel4540; } {{ uae_s16 dst = x_get_word (dsta); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}}} m68k_incpc (4); endlabel4540: ; } /* 16 (3/1) */ /* ADDQ.W #,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_5070_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (4)); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel4541; } {{ uae_s16 dst = x_get_word (dsta); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}}} m68k_incpc (4); endlabel4541: ; } /* 18 (3/1) */ #endif #ifdef PART_5 /* ADDQ.W #,(xxx).W */ void REGPARAM2 CPUFUNC(op_5078_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel4542; } {{ uae_s16 dst = x_get_word (dsta); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}}} m68k_incpc (4); endlabel4542: ; } /* 16 (3/1) */ /* ADDQ.W #,(xxx).L */ void REGPARAM2 CPUFUNC(op_5079_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta; dsta = get_word_ce000_prefetch (4) << 16; dsta |= get_word_ce000_prefetch (6); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel4543; } {{ uae_s16 dst = x_get_word (dsta); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}}} m68k_incpc (6); endlabel4543: ; } /* 20 (4/1) */ /* ADDQ.L #,Dn */ void REGPARAM2 CPUFUNC(op_5080_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); do_cycles_ce000 (4); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} m68k_incpc (2); } /* 8 (1/0) */ /* ADDAQ.L #,An */ void REGPARAM2 CPUFUNC(op_5088_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); do_cycles_ce000 (4); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpc (2); } /* 8 (1/0) */ /* ADDQ.L #,(An) */ void REGPARAM2 CPUFUNC(op_5090_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel4546; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta + 2, newv); x_put_word (dsta, newv >> 16); }}}}}}}} m68k_incpc (2); endlabel4546: ; } /* 20 (3/2) */ /* ADDQ.L #,(An)+ */ void REGPARAM2 CPUFUNC(op_5098_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel4547; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); m68k_areg (regs, dstreg) += 4; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta + 2, newv); x_put_word (dsta, newv >> 16); }}}}}}}} m68k_incpc (2); endlabel4547: ; } /* 20 (3/2) */ /* ADDQ.L #,-(An) */ void REGPARAM2 CPUFUNC(op_50a0_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; do_cycles_ce000 (2); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel4548; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta + 2, newv); x_put_word (dsta, newv >> 16); }}}}}}}} m68k_incpc (2); endlabel4548: ; } /* 22 (3/2) */ /* ADDQ.L #,(d16,An) */ void REGPARAM2 CPUFUNC(op_50a8_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel4549; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta + 2, newv); x_put_word (dsta, newv >> 16); }}}}}}}} m68k_incpc (4); endlabel4549: ; } /* 24 (4/2) */ /* ADDQ.L #,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_50b0_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (4)); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel4550; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta + 2, newv); x_put_word (dsta, newv >> 16); }}}}}}}} m68k_incpc (4); endlabel4550: ; } /* 26 (4/2) */ /* ADDQ.L #,(xxx).W */ void REGPARAM2 CPUFUNC(op_50b8_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel4551; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta + 2, newv); x_put_word (dsta, newv >> 16); }}}}}}}} m68k_incpc (4); endlabel4551: ; } /* 24 (4/2) */ /* ADDQ.L #,(xxx).L */ void REGPARAM2 CPUFUNC(op_50b9_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta; dsta = get_word_ce000_prefetch (4) << 16; dsta |= get_word_ce000_prefetch (6); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel4552; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta + 2, newv); x_put_word (dsta, newv >> 16); }}}}}}}} m68k_incpc (6); endlabel4552: ; } /* 28 (5/2) */ /* Scc.B Dn */ void REGPARAM2 CPUFUNC(op_50c0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { int val = cctrue (0) ? 0xff : 0; int cycles = 0; if (val) cycles += 2; if (cycles > 0) do_cycles_ce000 (cycles); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); } /* 4+ (1/0) */ /* DBcc.W Dn,#.W */ void REGPARAM2 CPUFUNC(op_50c8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = regs.irc; uaecptr oldpc = m68k_getpc (); do_cycles_ce000 (2); if (!cctrue (0)) { m68k_incpc ((uae_s32)offs + 2); get_word_ce000_prefetch (0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel4554; } regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); return; } } else { do_cycles_ce000 (2); } m68k_setpc (oldpc + 4); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}endlabel4554: ; } /* 20 (4/0) */ /* Scc.B (An) */ void REGPARAM2 CPUFUNC(op_50d0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { int val = cctrue (0) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (2); } /* 12+ (2/1) */ /* Scc.B (An)+ */ void REGPARAM2 CPUFUNC(op_50d8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { int val = cctrue (0) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (2); } /* 12+ (2/1) */ /* Scc.B -(An) */ void REGPARAM2 CPUFUNC(op_50e0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; do_cycles_ce000 (2); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { int val = cctrue (0) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (2); } /* 14+ (2/1) */ /* Scc.B (d16,An) */ void REGPARAM2 CPUFUNC(op_50e8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { int val = cctrue (0) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (4); } /* 16+ (3/1) */ /* Scc.B (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_50f0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { int val = cctrue (0) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (4); } /* 18+ (3/1) */ /* Scc.B (xxx).W */ void REGPARAM2 CPUFUNC(op_50f8_12)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { int val = cctrue (0) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (4); } /* 16+ (3/1) */ /* Scc.B (xxx).L */ void REGPARAM2 CPUFUNC(op_50f9_12)(uae_u32 opcode) { {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); { int val = cctrue (0) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (6); } /* 20+ (4/1) */ /* SUBQ.B #,Dn */ void REGPARAM2 CPUFUNC(op_5100_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}} m68k_incpc (2); } /* 4 (1/0) */ /* SUBQ.B #,(An) */ void REGPARAM2 CPUFUNC(op_5110_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (2); } /* 12 (2/1) */ /* SUBQ.B #,(An)+ */ void REGPARAM2 CPUFUNC(op_5118_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (2); } /* 12 (2/1) */ /* SUBQ.B #,-(An) */ void REGPARAM2 CPUFUNC(op_5120_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; do_cycles_ce000 (2); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (2); } /* 14 (2/1) */ /* SUBQ.B #,(d16,An) */ void REGPARAM2 CPUFUNC(op_5128_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 dst = x_get_byte (dsta); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (4); } /* 16 (3/1) */ /* SUBQ.B #,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_5130_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (4)); { uae_s8 dst = x_get_byte (dsta); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (4); } /* 18 (3/1) */ /* SUBQ.B #,(xxx).W */ void REGPARAM2 CPUFUNC(op_5138_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 dst = x_get_byte (dsta); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (4); } /* 16 (3/1) */ /* SUBQ.B #,(xxx).L */ void REGPARAM2 CPUFUNC(op_5139_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta; dsta = get_word_ce000_prefetch (4) << 16; dsta |= get_word_ce000_prefetch (6); { uae_s8 dst = x_get_byte (dsta); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (6); } /* 20 (4/1) */ /* SUBQ.W #,Dn */ void REGPARAM2 CPUFUNC(op_5140_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}} m68k_incpc (2); } /* 4 (1/0) */ /* SUBAQ.W #,An */ void REGPARAM2 CPUFUNC(op_5148_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); do_cycles_ce000 (4); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpc (2); } /* 8 (1/0) */ /* SUBQ.W #,(An) */ void REGPARAM2 CPUFUNC(op_5150_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel4572; } {{ uae_s16 dst = x_get_word (dsta); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}}} m68k_incpc (2); endlabel4572: ; } /* 12 (2/1) */ /* SUBQ.W #,(An)+ */ void REGPARAM2 CPUFUNC(op_5158_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel4573; } {{ uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) += 2; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}}} m68k_incpc (2); endlabel4573: ; } /* 12 (2/1) */ /* SUBQ.W #,-(An) */ void REGPARAM2 CPUFUNC(op_5160_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; do_cycles_ce000 (2); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel4574; } {{ uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}}} m68k_incpc (2); endlabel4574: ; } /* 14 (2/1) */ /* SUBQ.W #,(d16,An) */ void REGPARAM2 CPUFUNC(op_5168_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel4575; } {{ uae_s16 dst = x_get_word (dsta); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}}} m68k_incpc (4); endlabel4575: ; } /* 16 (3/1) */ /* SUBQ.W #,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_5170_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (4)); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel4576; } {{ uae_s16 dst = x_get_word (dsta); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}}} m68k_incpc (4); endlabel4576: ; } /* 18 (3/1) */ /* SUBQ.W #,(xxx).W */ void REGPARAM2 CPUFUNC(op_5178_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel4577; } {{ uae_s16 dst = x_get_word (dsta); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}}} m68k_incpc (4); endlabel4577: ; } /* 16 (3/1) */ /* SUBQ.W #,(xxx).L */ void REGPARAM2 CPUFUNC(op_5179_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta; dsta = get_word_ce000_prefetch (4) << 16; dsta |= get_word_ce000_prefetch (6); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel4578; } {{ uae_s16 dst = x_get_word (dsta); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}}} m68k_incpc (6); endlabel4578: ; } /* 20 (4/1) */ /* SUBQ.L #,Dn */ void REGPARAM2 CPUFUNC(op_5180_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); do_cycles_ce000 (4); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} m68k_incpc (2); } /* 8 (1/0) */ /* SUBAQ.L #,An */ void REGPARAM2 CPUFUNC(op_5188_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); do_cycles_ce000 (4); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpc (2); } /* 8 (1/0) */ /* SUBQ.L #,(An) */ void REGPARAM2 CPUFUNC(op_5190_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel4581; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta + 2, newv); x_put_word (dsta, newv >> 16); }}}}}}}} m68k_incpc (2); endlabel4581: ; } /* 20 (3/2) */ /* SUBQ.L #,(An)+ */ void REGPARAM2 CPUFUNC(op_5198_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel4582; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); m68k_areg (regs, dstreg) += 4; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta + 2, newv); x_put_word (dsta, newv >> 16); }}}}}}}} m68k_incpc (2); endlabel4582: ; } /* 20 (3/2) */ /* SUBQ.L #,-(An) */ void REGPARAM2 CPUFUNC(op_51a0_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; do_cycles_ce000 (2); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel4583; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta + 2, newv); x_put_word (dsta, newv >> 16); }}}}}}}} m68k_incpc (2); endlabel4583: ; } /* 22 (3/2) */ /* SUBQ.L #,(d16,An) */ void REGPARAM2 CPUFUNC(op_51a8_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel4584; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta + 2, newv); x_put_word (dsta, newv >> 16); }}}}}}}} m68k_incpc (4); endlabel4584: ; } /* 24 (4/2) */ /* SUBQ.L #,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_51b0_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (4)); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel4585; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta + 2, newv); x_put_word (dsta, newv >> 16); }}}}}}}} m68k_incpc (4); endlabel4585: ; } /* 26 (4/2) */ /* SUBQ.L #,(xxx).W */ void REGPARAM2 CPUFUNC(op_51b8_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel4586; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta + 2, newv); x_put_word (dsta, newv >> 16); }}}}}}}} m68k_incpc (4); endlabel4586: ; } /* 24 (4/2) */ /* SUBQ.L #,(xxx).L */ void REGPARAM2 CPUFUNC(op_51b9_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta; dsta = get_word_ce000_prefetch (4) << 16; dsta |= get_word_ce000_prefetch (6); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel4587; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta + 2, newv); x_put_word (dsta, newv >> 16); }}}}}}}} m68k_incpc (6); endlabel4587: ; } /* 28 (5/2) */ /* Scc.B Dn */ void REGPARAM2 CPUFUNC(op_51c0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { int val = cctrue (1) ? 0xff : 0; int cycles = 0; if (val) cycles += 2; if (cycles > 0) do_cycles_ce000 (cycles); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); } /* 4+ (1/0) */ /* DBcc.W Dn,#.W */ void REGPARAM2 CPUFUNC(op_51c8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = regs.irc; uaecptr oldpc = m68k_getpc (); do_cycles_ce000 (2); if (!cctrue (1)) { m68k_incpc ((uae_s32)offs + 2); get_word_ce000_prefetch (0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel4589; } regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); return; } } else { do_cycles_ce000 (2); } m68k_setpc (oldpc + 4); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}endlabel4589: ; } /* 20 (4/0) */ /* Scc.B (An) */ void REGPARAM2 CPUFUNC(op_51d0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { int val = cctrue (1) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (2); } /* 12+ (2/1) */ /* Scc.B (An)+ */ void REGPARAM2 CPUFUNC(op_51d8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { int val = cctrue (1) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (2); } /* 12+ (2/1) */ /* Scc.B -(An) */ void REGPARAM2 CPUFUNC(op_51e0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; do_cycles_ce000 (2); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { int val = cctrue (1) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (2); } /* 14+ (2/1) */ /* Scc.B (d16,An) */ void REGPARAM2 CPUFUNC(op_51e8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { int val = cctrue (1) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (4); } /* 16+ (3/1) */ /* Scc.B (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_51f0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { int val = cctrue (1) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (4); } /* 18+ (3/1) */ /* Scc.B (xxx).W */ void REGPARAM2 CPUFUNC(op_51f8_12)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { int val = cctrue (1) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (4); } /* 16+ (3/1) */ /* Scc.B (xxx).L */ void REGPARAM2 CPUFUNC(op_51f9_12)(uae_u32 opcode) { {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); { int val = cctrue (1) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (6); } /* 20+ (4/1) */ /* Scc.B Dn */ void REGPARAM2 CPUFUNC(op_52c0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { int val = cctrue (2) ? 0xff : 0; int cycles = 0; if (val) cycles += 2; if (cycles > 0) do_cycles_ce000 (cycles); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); } /* 4+ (1/0) */ /* DBcc.W Dn,#.W */ void REGPARAM2 CPUFUNC(op_52c8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = regs.irc; uaecptr oldpc = m68k_getpc (); do_cycles_ce000 (2); if (!cctrue (2)) { m68k_incpc ((uae_s32)offs + 2); get_word_ce000_prefetch (0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel4598; } regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); return; } } else { do_cycles_ce000 (2); } m68k_setpc (oldpc + 4); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}endlabel4598: ; } /* 20 (4/0) */ /* Scc.B (An) */ void REGPARAM2 CPUFUNC(op_52d0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { int val = cctrue (2) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (2); } /* 12+ (2/1) */ /* Scc.B (An)+ */ void REGPARAM2 CPUFUNC(op_52d8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { int val = cctrue (2) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (2); } /* 12+ (2/1) */ /* Scc.B -(An) */ void REGPARAM2 CPUFUNC(op_52e0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; do_cycles_ce000 (2); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { int val = cctrue (2) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (2); } /* 14+ (2/1) */ /* Scc.B (d16,An) */ void REGPARAM2 CPUFUNC(op_52e8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { int val = cctrue (2) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (4); } /* 16+ (3/1) */ /* Scc.B (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_52f0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { int val = cctrue (2) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (4); } /* 18+ (3/1) */ /* Scc.B (xxx).W */ void REGPARAM2 CPUFUNC(op_52f8_12)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { int val = cctrue (2) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (4); } /* 16+ (3/1) */ /* Scc.B (xxx).L */ void REGPARAM2 CPUFUNC(op_52f9_12)(uae_u32 opcode) { {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); { int val = cctrue (2) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (6); } /* 20+ (4/1) */ /* Scc.B Dn */ void REGPARAM2 CPUFUNC(op_53c0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { int val = cctrue (3) ? 0xff : 0; int cycles = 0; if (val) cycles += 2; if (cycles > 0) do_cycles_ce000 (cycles); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); } /* 4+ (1/0) */ /* DBcc.W Dn,#.W */ void REGPARAM2 CPUFUNC(op_53c8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = regs.irc; uaecptr oldpc = m68k_getpc (); do_cycles_ce000 (2); if (!cctrue (3)) { m68k_incpc ((uae_s32)offs + 2); get_word_ce000_prefetch (0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel4607; } regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); return; } } else { do_cycles_ce000 (2); } m68k_setpc (oldpc + 4); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}endlabel4607: ; } /* 20 (4/0) */ /* Scc.B (An) */ void REGPARAM2 CPUFUNC(op_53d0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { int val = cctrue (3) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (2); } /* 12+ (2/1) */ /* Scc.B (An)+ */ void REGPARAM2 CPUFUNC(op_53d8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { int val = cctrue (3) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (2); } /* 12+ (2/1) */ /* Scc.B -(An) */ void REGPARAM2 CPUFUNC(op_53e0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; do_cycles_ce000 (2); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { int val = cctrue (3) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (2); } /* 14+ (2/1) */ /* Scc.B (d16,An) */ void REGPARAM2 CPUFUNC(op_53e8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { int val = cctrue (3) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (4); } /* 16+ (3/1) */ /* Scc.B (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_53f0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { int val = cctrue (3) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (4); } /* 18+ (3/1) */ /* Scc.B (xxx).W */ void REGPARAM2 CPUFUNC(op_53f8_12)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { int val = cctrue (3) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (4); } /* 16+ (3/1) */ /* Scc.B (xxx).L */ void REGPARAM2 CPUFUNC(op_53f9_12)(uae_u32 opcode) { {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); { int val = cctrue (3) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (6); } /* 20+ (4/1) */ /* Scc.B Dn */ void REGPARAM2 CPUFUNC(op_54c0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { int val = cctrue (4) ? 0xff : 0; int cycles = 0; if (val) cycles += 2; if (cycles > 0) do_cycles_ce000 (cycles); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); } /* 4+ (1/0) */ /* DBcc.W Dn,#.W */ void REGPARAM2 CPUFUNC(op_54c8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = regs.irc; uaecptr oldpc = m68k_getpc (); do_cycles_ce000 (2); if (!cctrue (4)) { m68k_incpc ((uae_s32)offs + 2); get_word_ce000_prefetch (0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel4616; } regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); return; } } else { do_cycles_ce000 (2); } m68k_setpc (oldpc + 4); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}endlabel4616: ; } /* 20 (4/0) */ /* Scc.B (An) */ void REGPARAM2 CPUFUNC(op_54d0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { int val = cctrue (4) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (2); } /* 12+ (2/1) */ /* Scc.B (An)+ */ void REGPARAM2 CPUFUNC(op_54d8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { int val = cctrue (4) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (2); } /* 12+ (2/1) */ /* Scc.B -(An) */ void REGPARAM2 CPUFUNC(op_54e0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; do_cycles_ce000 (2); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { int val = cctrue (4) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (2); } /* 14+ (2/1) */ /* Scc.B (d16,An) */ void REGPARAM2 CPUFUNC(op_54e8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { int val = cctrue (4) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (4); } /* 16+ (3/1) */ /* Scc.B (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_54f0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { int val = cctrue (4) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (4); } /* 18+ (3/1) */ /* Scc.B (xxx).W */ void REGPARAM2 CPUFUNC(op_54f8_12)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { int val = cctrue (4) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (4); } /* 16+ (3/1) */ /* Scc.B (xxx).L */ void REGPARAM2 CPUFUNC(op_54f9_12)(uae_u32 opcode) { {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); { int val = cctrue (4) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (6); } /* 20+ (4/1) */ /* Scc.B Dn */ void REGPARAM2 CPUFUNC(op_55c0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { int val = cctrue (5) ? 0xff : 0; int cycles = 0; if (val) cycles += 2; if (cycles > 0) do_cycles_ce000 (cycles); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); } /* 4+ (1/0) */ /* DBcc.W Dn,#.W */ void REGPARAM2 CPUFUNC(op_55c8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = regs.irc; uaecptr oldpc = m68k_getpc (); do_cycles_ce000 (2); if (!cctrue (5)) { m68k_incpc ((uae_s32)offs + 2); get_word_ce000_prefetch (0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel4625; } regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); return; } } else { do_cycles_ce000 (2); } m68k_setpc (oldpc + 4); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}endlabel4625: ; } /* 20 (4/0) */ /* Scc.B (An) */ void REGPARAM2 CPUFUNC(op_55d0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { int val = cctrue (5) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (2); } /* 12+ (2/1) */ /* Scc.B (An)+ */ void REGPARAM2 CPUFUNC(op_55d8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { int val = cctrue (5) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (2); } /* 12+ (2/1) */ /* Scc.B -(An) */ void REGPARAM2 CPUFUNC(op_55e0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; do_cycles_ce000 (2); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { int val = cctrue (5) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (2); } /* 14+ (2/1) */ /* Scc.B (d16,An) */ void REGPARAM2 CPUFUNC(op_55e8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { int val = cctrue (5) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (4); } /* 16+ (3/1) */ /* Scc.B (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_55f0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { int val = cctrue (5) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (4); } /* 18+ (3/1) */ /* Scc.B (xxx).W */ void REGPARAM2 CPUFUNC(op_55f8_12)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { int val = cctrue (5) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (4); } /* 16+ (3/1) */ /* Scc.B (xxx).L */ void REGPARAM2 CPUFUNC(op_55f9_12)(uae_u32 opcode) { {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); { int val = cctrue (5) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (6); } /* 20+ (4/1) */ /* Scc.B Dn */ void REGPARAM2 CPUFUNC(op_56c0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { int val = cctrue (6) ? 0xff : 0; int cycles = 0; if (val) cycles += 2; if (cycles > 0) do_cycles_ce000 (cycles); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); } /* 4+ (1/0) */ /* DBcc.W Dn,#.W */ void REGPARAM2 CPUFUNC(op_56c8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = regs.irc; uaecptr oldpc = m68k_getpc (); do_cycles_ce000 (2); if (!cctrue (6)) { m68k_incpc ((uae_s32)offs + 2); get_word_ce000_prefetch (0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel4634; } regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); return; } } else { do_cycles_ce000 (2); } m68k_setpc (oldpc + 4); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}endlabel4634: ; } /* 20 (4/0) */ /* Scc.B (An) */ void REGPARAM2 CPUFUNC(op_56d0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { int val = cctrue (6) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (2); } /* 12+ (2/1) */ /* Scc.B (An)+ */ void REGPARAM2 CPUFUNC(op_56d8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { int val = cctrue (6) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (2); } /* 12+ (2/1) */ /* Scc.B -(An) */ void REGPARAM2 CPUFUNC(op_56e0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; do_cycles_ce000 (2); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { int val = cctrue (6) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (2); } /* 14+ (2/1) */ /* Scc.B (d16,An) */ void REGPARAM2 CPUFUNC(op_56e8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { int val = cctrue (6) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (4); } /* 16+ (3/1) */ /* Scc.B (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_56f0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { int val = cctrue (6) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (4); } /* 18+ (3/1) */ /* Scc.B (xxx).W */ void REGPARAM2 CPUFUNC(op_56f8_12)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { int val = cctrue (6) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (4); } /* 16+ (3/1) */ /* Scc.B (xxx).L */ void REGPARAM2 CPUFUNC(op_56f9_12)(uae_u32 opcode) { {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); { int val = cctrue (6) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (6); } /* 20+ (4/1) */ /* Scc.B Dn */ void REGPARAM2 CPUFUNC(op_57c0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { int val = cctrue (7) ? 0xff : 0; int cycles = 0; if (val) cycles += 2; if (cycles > 0) do_cycles_ce000 (cycles); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); } /* 4+ (1/0) */ /* DBcc.W Dn,#.W */ void REGPARAM2 CPUFUNC(op_57c8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = regs.irc; uaecptr oldpc = m68k_getpc (); do_cycles_ce000 (2); if (!cctrue (7)) { m68k_incpc ((uae_s32)offs + 2); get_word_ce000_prefetch (0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel4643; } regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); return; } } else { do_cycles_ce000 (2); } m68k_setpc (oldpc + 4); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}endlabel4643: ; } /* 20 (4/0) */ /* Scc.B (An) */ void REGPARAM2 CPUFUNC(op_57d0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { int val = cctrue (7) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (2); } /* 12+ (2/1) */ /* Scc.B (An)+ */ void REGPARAM2 CPUFUNC(op_57d8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { int val = cctrue (7) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (2); } /* 12+ (2/1) */ /* Scc.B -(An) */ void REGPARAM2 CPUFUNC(op_57e0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; do_cycles_ce000 (2); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { int val = cctrue (7) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (2); } /* 14+ (2/1) */ /* Scc.B (d16,An) */ void REGPARAM2 CPUFUNC(op_57e8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { int val = cctrue (7) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (4); } /* 16+ (3/1) */ /* Scc.B (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_57f0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { int val = cctrue (7) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (4); } /* 18+ (3/1) */ /* Scc.B (xxx).W */ void REGPARAM2 CPUFUNC(op_57f8_12)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { int val = cctrue (7) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (4); } /* 16+ (3/1) */ /* Scc.B (xxx).L */ void REGPARAM2 CPUFUNC(op_57f9_12)(uae_u32 opcode) { {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); { int val = cctrue (7) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (6); } /* 20+ (4/1) */ /* Scc.B Dn */ void REGPARAM2 CPUFUNC(op_58c0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { int val = cctrue (8) ? 0xff : 0; int cycles = 0; if (val) cycles += 2; if (cycles > 0) do_cycles_ce000 (cycles); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); } /* 4+ (1/0) */ /* DBcc.W Dn,#.W */ void REGPARAM2 CPUFUNC(op_58c8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = regs.irc; uaecptr oldpc = m68k_getpc (); do_cycles_ce000 (2); if (!cctrue (8)) { m68k_incpc ((uae_s32)offs + 2); get_word_ce000_prefetch (0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel4652; } regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); return; } } else { do_cycles_ce000 (2); } m68k_setpc (oldpc + 4); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}endlabel4652: ; } /* 20 (4/0) */ /* Scc.B (An) */ void REGPARAM2 CPUFUNC(op_58d0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { int val = cctrue (8) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (2); } /* 12+ (2/1) */ /* Scc.B (An)+ */ void REGPARAM2 CPUFUNC(op_58d8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { int val = cctrue (8) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (2); } /* 12+ (2/1) */ /* Scc.B -(An) */ void REGPARAM2 CPUFUNC(op_58e0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; do_cycles_ce000 (2); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { int val = cctrue (8) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (2); } /* 14+ (2/1) */ /* Scc.B (d16,An) */ void REGPARAM2 CPUFUNC(op_58e8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { int val = cctrue (8) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (4); } /* 16+ (3/1) */ /* Scc.B (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_58f0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { int val = cctrue (8) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (4); } /* 18+ (3/1) */ /* Scc.B (xxx).W */ void REGPARAM2 CPUFUNC(op_58f8_12)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { int val = cctrue (8) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (4); } /* 16+ (3/1) */ /* Scc.B (xxx).L */ void REGPARAM2 CPUFUNC(op_58f9_12)(uae_u32 opcode) { {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); { int val = cctrue (8) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (6); } /* 20+ (4/1) */ /* Scc.B Dn */ void REGPARAM2 CPUFUNC(op_59c0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { int val = cctrue (9) ? 0xff : 0; int cycles = 0; if (val) cycles += 2; if (cycles > 0) do_cycles_ce000 (cycles); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); } /* 4+ (1/0) */ /* DBcc.W Dn,#.W */ void REGPARAM2 CPUFUNC(op_59c8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = regs.irc; uaecptr oldpc = m68k_getpc (); do_cycles_ce000 (2); if (!cctrue (9)) { m68k_incpc ((uae_s32)offs + 2); get_word_ce000_prefetch (0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel4661; } regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); return; } } else { do_cycles_ce000 (2); } m68k_setpc (oldpc + 4); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}endlabel4661: ; } /* 20 (4/0) */ /* Scc.B (An) */ void REGPARAM2 CPUFUNC(op_59d0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { int val = cctrue (9) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (2); } /* 12+ (2/1) */ /* Scc.B (An)+ */ void REGPARAM2 CPUFUNC(op_59d8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { int val = cctrue (9) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (2); } /* 12+ (2/1) */ /* Scc.B -(An) */ void REGPARAM2 CPUFUNC(op_59e0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; do_cycles_ce000 (2); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { int val = cctrue (9) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (2); } /* 14+ (2/1) */ /* Scc.B (d16,An) */ void REGPARAM2 CPUFUNC(op_59e8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { int val = cctrue (9) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (4); } /* 16+ (3/1) */ /* Scc.B (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_59f0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { int val = cctrue (9) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (4); } /* 18+ (3/1) */ /* Scc.B (xxx).W */ void REGPARAM2 CPUFUNC(op_59f8_12)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { int val = cctrue (9) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (4); } /* 16+ (3/1) */ /* Scc.B (xxx).L */ void REGPARAM2 CPUFUNC(op_59f9_12)(uae_u32 opcode) { {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); { int val = cctrue (9) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (6); } /* 20+ (4/1) */ /* Scc.B Dn */ void REGPARAM2 CPUFUNC(op_5ac0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { int val = cctrue (10) ? 0xff : 0; int cycles = 0; if (val) cycles += 2; if (cycles > 0) do_cycles_ce000 (cycles); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); } /* 4+ (1/0) */ /* DBcc.W Dn,#.W */ void REGPARAM2 CPUFUNC(op_5ac8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = regs.irc; uaecptr oldpc = m68k_getpc (); do_cycles_ce000 (2); if (!cctrue (10)) { m68k_incpc ((uae_s32)offs + 2); get_word_ce000_prefetch (0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel4670; } regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); return; } } else { do_cycles_ce000 (2); } m68k_setpc (oldpc + 4); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}endlabel4670: ; } /* 20 (4/0) */ /* Scc.B (An) */ void REGPARAM2 CPUFUNC(op_5ad0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { int val = cctrue (10) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (2); } /* 12+ (2/1) */ /* Scc.B (An)+ */ void REGPARAM2 CPUFUNC(op_5ad8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { int val = cctrue (10) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (2); } /* 12+ (2/1) */ /* Scc.B -(An) */ void REGPARAM2 CPUFUNC(op_5ae0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; do_cycles_ce000 (2); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { int val = cctrue (10) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (2); } /* 14+ (2/1) */ /* Scc.B (d16,An) */ void REGPARAM2 CPUFUNC(op_5ae8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { int val = cctrue (10) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (4); } /* 16+ (3/1) */ /* Scc.B (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_5af0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { int val = cctrue (10) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (4); } /* 18+ (3/1) */ /* Scc.B (xxx).W */ void REGPARAM2 CPUFUNC(op_5af8_12)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { int val = cctrue (10) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (4); } /* 16+ (3/1) */ /* Scc.B (xxx).L */ void REGPARAM2 CPUFUNC(op_5af9_12)(uae_u32 opcode) { {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); { int val = cctrue (10) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (6); } /* 20+ (4/1) */ /* Scc.B Dn */ void REGPARAM2 CPUFUNC(op_5bc0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { int val = cctrue (11) ? 0xff : 0; int cycles = 0; if (val) cycles += 2; if (cycles > 0) do_cycles_ce000 (cycles); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); } /* 4+ (1/0) */ /* DBcc.W Dn,#.W */ void REGPARAM2 CPUFUNC(op_5bc8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = regs.irc; uaecptr oldpc = m68k_getpc (); do_cycles_ce000 (2); if (!cctrue (11)) { m68k_incpc ((uae_s32)offs + 2); get_word_ce000_prefetch (0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel4679; } regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); return; } } else { do_cycles_ce000 (2); } m68k_setpc (oldpc + 4); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}endlabel4679: ; } /* 20 (4/0) */ /* Scc.B (An) */ void REGPARAM2 CPUFUNC(op_5bd0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { int val = cctrue (11) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (2); } /* 12+ (2/1) */ /* Scc.B (An)+ */ void REGPARAM2 CPUFUNC(op_5bd8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { int val = cctrue (11) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (2); } /* 12+ (2/1) */ /* Scc.B -(An) */ void REGPARAM2 CPUFUNC(op_5be0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; do_cycles_ce000 (2); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { int val = cctrue (11) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (2); } /* 14+ (2/1) */ /* Scc.B (d16,An) */ void REGPARAM2 CPUFUNC(op_5be8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { int val = cctrue (11) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (4); } /* 16+ (3/1) */ /* Scc.B (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_5bf0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { int val = cctrue (11) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (4); } /* 18+ (3/1) */ /* Scc.B (xxx).W */ void REGPARAM2 CPUFUNC(op_5bf8_12)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { int val = cctrue (11) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (4); } /* 16+ (3/1) */ /* Scc.B (xxx).L */ void REGPARAM2 CPUFUNC(op_5bf9_12)(uae_u32 opcode) { {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); { int val = cctrue (11) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (6); } /* 20+ (4/1) */ /* Scc.B Dn */ void REGPARAM2 CPUFUNC(op_5cc0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { int val = cctrue (12) ? 0xff : 0; int cycles = 0; if (val) cycles += 2; if (cycles > 0) do_cycles_ce000 (cycles); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); } /* 4+ (1/0) */ /* DBcc.W Dn,#.W */ void REGPARAM2 CPUFUNC(op_5cc8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = regs.irc; uaecptr oldpc = m68k_getpc (); do_cycles_ce000 (2); if (!cctrue (12)) { m68k_incpc ((uae_s32)offs + 2); get_word_ce000_prefetch (0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel4688; } regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); return; } } else { do_cycles_ce000 (2); } m68k_setpc (oldpc + 4); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}endlabel4688: ; } /* 20 (4/0) */ /* Scc.B (An) */ void REGPARAM2 CPUFUNC(op_5cd0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { int val = cctrue (12) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (2); } /* 12+ (2/1) */ /* Scc.B (An)+ */ void REGPARAM2 CPUFUNC(op_5cd8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { int val = cctrue (12) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (2); } /* 12+ (2/1) */ /* Scc.B -(An) */ void REGPARAM2 CPUFUNC(op_5ce0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; do_cycles_ce000 (2); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { int val = cctrue (12) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (2); } /* 14+ (2/1) */ /* Scc.B (d16,An) */ void REGPARAM2 CPUFUNC(op_5ce8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { int val = cctrue (12) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (4); } /* 16+ (3/1) */ /* Scc.B (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_5cf0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { int val = cctrue (12) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (4); } /* 18+ (3/1) */ /* Scc.B (xxx).W */ void REGPARAM2 CPUFUNC(op_5cf8_12)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { int val = cctrue (12) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (4); } /* 16+ (3/1) */ /* Scc.B (xxx).L */ void REGPARAM2 CPUFUNC(op_5cf9_12)(uae_u32 opcode) { {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); { int val = cctrue (12) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (6); } /* 20+ (4/1) */ /* Scc.B Dn */ void REGPARAM2 CPUFUNC(op_5dc0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { int val = cctrue (13) ? 0xff : 0; int cycles = 0; if (val) cycles += 2; if (cycles > 0) do_cycles_ce000 (cycles); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); } /* 4+ (1/0) */ /* DBcc.W Dn,#.W */ void REGPARAM2 CPUFUNC(op_5dc8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = regs.irc; uaecptr oldpc = m68k_getpc (); do_cycles_ce000 (2); if (!cctrue (13)) { m68k_incpc ((uae_s32)offs + 2); get_word_ce000_prefetch (0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel4697; } regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); return; } } else { do_cycles_ce000 (2); } m68k_setpc (oldpc + 4); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}endlabel4697: ; } /* 20 (4/0) */ /* Scc.B (An) */ void REGPARAM2 CPUFUNC(op_5dd0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { int val = cctrue (13) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (2); } /* 12+ (2/1) */ /* Scc.B (An)+ */ void REGPARAM2 CPUFUNC(op_5dd8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { int val = cctrue (13) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (2); } /* 12+ (2/1) */ /* Scc.B -(An) */ void REGPARAM2 CPUFUNC(op_5de0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; do_cycles_ce000 (2); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { int val = cctrue (13) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (2); } /* 14+ (2/1) */ /* Scc.B (d16,An) */ void REGPARAM2 CPUFUNC(op_5de8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { int val = cctrue (13) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (4); } /* 16+ (3/1) */ /* Scc.B (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_5df0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { int val = cctrue (13) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (4); } /* 18+ (3/1) */ /* Scc.B (xxx).W */ void REGPARAM2 CPUFUNC(op_5df8_12)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { int val = cctrue (13) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (4); } /* 16+ (3/1) */ /* Scc.B (xxx).L */ void REGPARAM2 CPUFUNC(op_5df9_12)(uae_u32 opcode) { {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); { int val = cctrue (13) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (6); } /* 20+ (4/1) */ /* Scc.B Dn */ void REGPARAM2 CPUFUNC(op_5ec0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { int val = cctrue (14) ? 0xff : 0; int cycles = 0; if (val) cycles += 2; if (cycles > 0) do_cycles_ce000 (cycles); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); } /* 4+ (1/0) */ /* DBcc.W Dn,#.W */ void REGPARAM2 CPUFUNC(op_5ec8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = regs.irc; uaecptr oldpc = m68k_getpc (); do_cycles_ce000 (2); if (!cctrue (14)) { m68k_incpc ((uae_s32)offs + 2); get_word_ce000_prefetch (0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel4706; } regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); return; } } else { do_cycles_ce000 (2); } m68k_setpc (oldpc + 4); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}endlabel4706: ; } /* 20 (4/0) */ /* Scc.B (An) */ void REGPARAM2 CPUFUNC(op_5ed0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { int val = cctrue (14) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (2); } /* 12+ (2/1) */ /* Scc.B (An)+ */ void REGPARAM2 CPUFUNC(op_5ed8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { int val = cctrue (14) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (2); } /* 12+ (2/1) */ /* Scc.B -(An) */ void REGPARAM2 CPUFUNC(op_5ee0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; do_cycles_ce000 (2); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { int val = cctrue (14) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (2); } /* 14+ (2/1) */ /* Scc.B (d16,An) */ void REGPARAM2 CPUFUNC(op_5ee8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { int val = cctrue (14) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (4); } /* 16+ (3/1) */ /* Scc.B (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_5ef0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { int val = cctrue (14) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (4); } /* 18+ (3/1) */ /* Scc.B (xxx).W */ void REGPARAM2 CPUFUNC(op_5ef8_12)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { int val = cctrue (14) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (4); } /* 16+ (3/1) */ /* Scc.B (xxx).L */ void REGPARAM2 CPUFUNC(op_5ef9_12)(uae_u32 opcode) { {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); { int val = cctrue (14) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (6); } /* 20+ (4/1) */ /* Scc.B Dn */ void REGPARAM2 CPUFUNC(op_5fc0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { int val = cctrue (15) ? 0xff : 0; int cycles = 0; if (val) cycles += 2; if (cycles > 0) do_cycles_ce000 (cycles); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); } /* 4+ (1/0) */ /* DBcc.W Dn,#.W */ void REGPARAM2 CPUFUNC(op_5fc8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = regs.irc; uaecptr oldpc = m68k_getpc (); do_cycles_ce000 (2); if (!cctrue (15)) { m68k_incpc ((uae_s32)offs + 2); get_word_ce000_prefetch (0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel4715; } regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); return; } } else { do_cycles_ce000 (2); } m68k_setpc (oldpc + 4); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}endlabel4715: ; } /* 20 (4/0) */ /* Scc.B (An) */ void REGPARAM2 CPUFUNC(op_5fd0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { int val = cctrue (15) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (2); } /* 12+ (2/1) */ /* Scc.B (An)+ */ void REGPARAM2 CPUFUNC(op_5fd8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { int val = cctrue (15) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (2); } /* 12+ (2/1) */ /* Scc.B -(An) */ void REGPARAM2 CPUFUNC(op_5fe0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; do_cycles_ce000 (2); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { int val = cctrue (15) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (2); } /* 14+ (2/1) */ /* Scc.B (d16,An) */ void REGPARAM2 CPUFUNC(op_5fe8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { int val = cctrue (15) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (4); } /* 16+ (3/1) */ /* Scc.B (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_5ff0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { int val = cctrue (15) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (4); } /* 18+ (3/1) */ /* Scc.B (xxx).W */ void REGPARAM2 CPUFUNC(op_5ff8_12)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { int val = cctrue (15) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (4); } /* 16+ (3/1) */ /* Scc.B (xxx).L */ void REGPARAM2 CPUFUNC(op_5ff9_12)(uae_u32 opcode) { {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); { uae_s8 src = x_get_byte (srca); { regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); { int val = cctrue (15) ? 0xff : 0; int cycles = 0; if (cycles > 0) do_cycles_ce000 (cycles); x_put_byte (srca, val); }}}}} m68k_incpc (6); } /* 20+ (4/1) */ /* Bcc.W #.W */ void REGPARAM2 CPUFUNC(op_6000_12)(uae_u32 opcode) { {{ uae_s16 src = regs.irc; do_cycles_ce000 (2); if (!cctrue (0)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel4723; } m68k_incpc ((uae_s32)src + 2); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); return; didnt_jump:; m68k_incpc (4); do_cycles_ce000 (2); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}endlabel4723: ; } /* 20 (4/0) */ /* BccQ.B # */ void REGPARAM2 CPUFUNC(op_6001_12)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; do_cycles_ce000 (2); if (!cctrue (0)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel4724; } m68k_incpc ((uae_s32)src + 2); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); return; didnt_jump:; m68k_incpc (2); do_cycles_ce000 (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}endlabel4724: ; } /* 16 (3/0) */ /* Bcc.L #.L */ void REGPARAM2 CPUFUNC(op_60ff_12)(uae_u32 opcode) { { do_cycles_ce000 (2); if (cctrue (0)) { exception3i (opcode, m68k_getpc () + 1); goto endlabel4725; } m68k_incpc (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); goto endlabel4725; { uae_s32 src; src = get_word_ce000_prefetch (2) << 16; src |= regs.irc; do_cycles_ce000 (2); if (!cctrue (0)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel4725; } m68k_incpc ((uae_s32)src + 2); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); return; didnt_jump:; m68k_incpc (4); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}endlabel4725: ; } /* 28 (6/0) */ /* BSR.W #.W */ void REGPARAM2 CPUFUNC(op_6100_12)(uae_u32 opcode) { { uae_s32 s; { uae_s16 src = regs.irc; s = (uae_s32)src + 2; if (src & 1) { exception3 (opcode, m68k_getpc () + s, 0, 1, m68k_getpc () + s); goto endlabel4726; } do_cycles_ce000 (2); m68k_do_bsr_ce (m68k_getpc () + 4, s); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}endlabel4726: ; } /* 18 (2/2) */ /* BSRQ.B # */ void REGPARAM2 CPUFUNC(op_6101_12)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); { uae_s32 s; { uae_u32 src = srcreg; s = (uae_s32)src + 2; if (src & 1) { exception3 (opcode, m68k_getpc () + s, 0, 1, m68k_getpc () + s); goto endlabel4727; } do_cycles_ce000 (2); m68k_do_bsr_ce (m68k_getpc () + 2, s); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}endlabel4727: ; } /* 18 (2/2) */ /* BSR.L #.L */ void REGPARAM2 CPUFUNC(op_61ff_12)(uae_u32 opcode) { { uae_s32 s; uae_u32 src = 0xffffffff; s = (uae_s32)src + 2; if (src & 1) { exception3 (opcode, m68k_getpc () + s, 0, 1, m68k_getpc () + s); goto endlabel4728; } do_cycles_ce000 (2); m68k_do_bsr_ce (m68k_getpc () + 2, s); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }endlabel4728: ; } /* 18 (2/2) */ #endif #ifdef PART_6 /* Bcc.W #.W */ void REGPARAM2 CPUFUNC(op_6200_12)(uae_u32 opcode) { {{ uae_s16 src = regs.irc; do_cycles_ce000 (2); if (!cctrue (2)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel4729; } m68k_incpc ((uae_s32)src + 2); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); return; didnt_jump:; m68k_incpc (4); do_cycles_ce000 (2); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}endlabel4729: ; } /* 20 (4/0) */ /* BccQ.B # */ void REGPARAM2 CPUFUNC(op_6201_12)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; do_cycles_ce000 (2); if (!cctrue (2)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel4730; } m68k_incpc ((uae_s32)src + 2); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); return; didnt_jump:; m68k_incpc (2); do_cycles_ce000 (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}endlabel4730: ; } /* 16 (3/0) */ /* Bcc.L #.L */ void REGPARAM2 CPUFUNC(op_62ff_12)(uae_u32 opcode) { { do_cycles_ce000 (2); if (cctrue (2)) { exception3i (opcode, m68k_getpc () + 1); goto endlabel4731; } m68k_incpc (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); goto endlabel4731; { uae_s32 src; src = get_word_ce000_prefetch (2) << 16; src |= regs.irc; do_cycles_ce000 (2); if (!cctrue (2)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel4731; } m68k_incpc ((uae_s32)src + 2); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); return; didnt_jump:; m68k_incpc (4); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}endlabel4731: ; } /* 28 (6/0) */ /* Bcc.W #.W */ void REGPARAM2 CPUFUNC(op_6300_12)(uae_u32 opcode) { {{ uae_s16 src = regs.irc; do_cycles_ce000 (2); if (!cctrue (3)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel4732; } m68k_incpc ((uae_s32)src + 2); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); return; didnt_jump:; m68k_incpc (4); do_cycles_ce000 (2); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}endlabel4732: ; } /* 20 (4/0) */ /* BccQ.B # */ void REGPARAM2 CPUFUNC(op_6301_12)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; do_cycles_ce000 (2); if (!cctrue (3)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel4733; } m68k_incpc ((uae_s32)src + 2); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); return; didnt_jump:; m68k_incpc (2); do_cycles_ce000 (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}endlabel4733: ; } /* 16 (3/0) */ /* Bcc.L #.L */ void REGPARAM2 CPUFUNC(op_63ff_12)(uae_u32 opcode) { { do_cycles_ce000 (2); if (cctrue (3)) { exception3i (opcode, m68k_getpc () + 1); goto endlabel4734; } m68k_incpc (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); goto endlabel4734; { uae_s32 src; src = get_word_ce000_prefetch (2) << 16; src |= regs.irc; do_cycles_ce000 (2); if (!cctrue (3)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel4734; } m68k_incpc ((uae_s32)src + 2); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); return; didnt_jump:; m68k_incpc (4); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}endlabel4734: ; } /* 28 (6/0) */ /* Bcc.W #.W */ void REGPARAM2 CPUFUNC(op_6400_12)(uae_u32 opcode) { {{ uae_s16 src = regs.irc; do_cycles_ce000 (2); if (!cctrue (4)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel4735; } m68k_incpc ((uae_s32)src + 2); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); return; didnt_jump:; m68k_incpc (4); do_cycles_ce000 (2); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}endlabel4735: ; } /* 20 (4/0) */ /* BccQ.B # */ void REGPARAM2 CPUFUNC(op_6401_12)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; do_cycles_ce000 (2); if (!cctrue (4)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel4736; } m68k_incpc ((uae_s32)src + 2); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); return; didnt_jump:; m68k_incpc (2); do_cycles_ce000 (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}endlabel4736: ; } /* 16 (3/0) */ /* Bcc.L #.L */ void REGPARAM2 CPUFUNC(op_64ff_12)(uae_u32 opcode) { { do_cycles_ce000 (2); if (cctrue (4)) { exception3i (opcode, m68k_getpc () + 1); goto endlabel4737; } m68k_incpc (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); goto endlabel4737; { uae_s32 src; src = get_word_ce000_prefetch (2) << 16; src |= regs.irc; do_cycles_ce000 (2); if (!cctrue (4)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel4737; } m68k_incpc ((uae_s32)src + 2); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); return; didnt_jump:; m68k_incpc (4); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}endlabel4737: ; } /* 28 (6/0) */ /* Bcc.W #.W */ void REGPARAM2 CPUFUNC(op_6500_12)(uae_u32 opcode) { {{ uae_s16 src = regs.irc; do_cycles_ce000 (2); if (!cctrue (5)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel4738; } m68k_incpc ((uae_s32)src + 2); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); return; didnt_jump:; m68k_incpc (4); do_cycles_ce000 (2); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}endlabel4738: ; } /* 20 (4/0) */ /* BccQ.B # */ void REGPARAM2 CPUFUNC(op_6501_12)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; do_cycles_ce000 (2); if (!cctrue (5)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel4739; } m68k_incpc ((uae_s32)src + 2); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); return; didnt_jump:; m68k_incpc (2); do_cycles_ce000 (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}endlabel4739: ; } /* 16 (3/0) */ /* Bcc.L #.L */ void REGPARAM2 CPUFUNC(op_65ff_12)(uae_u32 opcode) { { do_cycles_ce000 (2); if (cctrue (5)) { exception3i (opcode, m68k_getpc () + 1); goto endlabel4740; } m68k_incpc (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); goto endlabel4740; { uae_s32 src; src = get_word_ce000_prefetch (2) << 16; src |= regs.irc; do_cycles_ce000 (2); if (!cctrue (5)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel4740; } m68k_incpc ((uae_s32)src + 2); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); return; didnt_jump:; m68k_incpc (4); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}endlabel4740: ; } /* 28 (6/0) */ /* Bcc.W #.W */ void REGPARAM2 CPUFUNC(op_6600_12)(uae_u32 opcode) { {{ uae_s16 src = regs.irc; do_cycles_ce000 (2); if (!cctrue (6)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel4741; } m68k_incpc ((uae_s32)src + 2); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); return; didnt_jump:; m68k_incpc (4); do_cycles_ce000 (2); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}endlabel4741: ; } /* 20 (4/0) */ /* BccQ.B # */ void REGPARAM2 CPUFUNC(op_6601_12)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; do_cycles_ce000 (2); if (!cctrue (6)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel4742; } m68k_incpc ((uae_s32)src + 2); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); return; didnt_jump:; m68k_incpc (2); do_cycles_ce000 (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}endlabel4742: ; } /* 16 (3/0) */ /* Bcc.L #.L */ void REGPARAM2 CPUFUNC(op_66ff_12)(uae_u32 opcode) { { do_cycles_ce000 (2); if (cctrue (6)) { exception3i (opcode, m68k_getpc () + 1); goto endlabel4743; } m68k_incpc (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); goto endlabel4743; { uae_s32 src; src = get_word_ce000_prefetch (2) << 16; src |= regs.irc; do_cycles_ce000 (2); if (!cctrue (6)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel4743; } m68k_incpc ((uae_s32)src + 2); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); return; didnt_jump:; m68k_incpc (4); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}endlabel4743: ; } /* 28 (6/0) */ /* Bcc.W #.W */ void REGPARAM2 CPUFUNC(op_6700_12)(uae_u32 opcode) { {{ uae_s16 src = regs.irc; do_cycles_ce000 (2); if (!cctrue (7)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel4744; } m68k_incpc ((uae_s32)src + 2); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); return; didnt_jump:; m68k_incpc (4); do_cycles_ce000 (2); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}endlabel4744: ; } /* 20 (4/0) */ /* BccQ.B # */ void REGPARAM2 CPUFUNC(op_6701_12)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; do_cycles_ce000 (2); if (!cctrue (7)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel4745; } m68k_incpc ((uae_s32)src + 2); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); return; didnt_jump:; m68k_incpc (2); do_cycles_ce000 (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}endlabel4745: ; } /* 16 (3/0) */ /* Bcc.L #.L */ void REGPARAM2 CPUFUNC(op_67ff_12)(uae_u32 opcode) { { do_cycles_ce000 (2); if (cctrue (7)) { exception3i (opcode, m68k_getpc () + 1); goto endlabel4746; } m68k_incpc (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); goto endlabel4746; { uae_s32 src; src = get_word_ce000_prefetch (2) << 16; src |= regs.irc; do_cycles_ce000 (2); if (!cctrue (7)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel4746; } m68k_incpc ((uae_s32)src + 2); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); return; didnt_jump:; m68k_incpc (4); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}endlabel4746: ; } /* 28 (6/0) */ /* Bcc.W #.W */ void REGPARAM2 CPUFUNC(op_6800_12)(uae_u32 opcode) { {{ uae_s16 src = regs.irc; do_cycles_ce000 (2); if (!cctrue (8)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel4747; } m68k_incpc ((uae_s32)src + 2); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); return; didnt_jump:; m68k_incpc (4); do_cycles_ce000 (2); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}endlabel4747: ; } /* 20 (4/0) */ /* BccQ.B # */ void REGPARAM2 CPUFUNC(op_6801_12)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; do_cycles_ce000 (2); if (!cctrue (8)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel4748; } m68k_incpc ((uae_s32)src + 2); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); return; didnt_jump:; m68k_incpc (2); do_cycles_ce000 (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}endlabel4748: ; } /* 16 (3/0) */ /* Bcc.L #.L */ void REGPARAM2 CPUFUNC(op_68ff_12)(uae_u32 opcode) { { do_cycles_ce000 (2); if (cctrue (8)) { exception3i (opcode, m68k_getpc () + 1); goto endlabel4749; } m68k_incpc (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); goto endlabel4749; { uae_s32 src; src = get_word_ce000_prefetch (2) << 16; src |= regs.irc; do_cycles_ce000 (2); if (!cctrue (8)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel4749; } m68k_incpc ((uae_s32)src + 2); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); return; didnt_jump:; m68k_incpc (4); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}endlabel4749: ; } /* 28 (6/0) */ /* Bcc.W #.W */ void REGPARAM2 CPUFUNC(op_6900_12)(uae_u32 opcode) { {{ uae_s16 src = regs.irc; do_cycles_ce000 (2); if (!cctrue (9)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel4750; } m68k_incpc ((uae_s32)src + 2); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); return; didnt_jump:; m68k_incpc (4); do_cycles_ce000 (2); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}endlabel4750: ; } /* 20 (4/0) */ /* BccQ.B # */ void REGPARAM2 CPUFUNC(op_6901_12)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; do_cycles_ce000 (2); if (!cctrue (9)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel4751; } m68k_incpc ((uae_s32)src + 2); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); return; didnt_jump:; m68k_incpc (2); do_cycles_ce000 (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}endlabel4751: ; } /* 16 (3/0) */ /* Bcc.L #.L */ void REGPARAM2 CPUFUNC(op_69ff_12)(uae_u32 opcode) { { do_cycles_ce000 (2); if (cctrue (9)) { exception3i (opcode, m68k_getpc () + 1); goto endlabel4752; } m68k_incpc (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); goto endlabel4752; { uae_s32 src; src = get_word_ce000_prefetch (2) << 16; src |= regs.irc; do_cycles_ce000 (2); if (!cctrue (9)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel4752; } m68k_incpc ((uae_s32)src + 2); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); return; didnt_jump:; m68k_incpc (4); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}endlabel4752: ; } /* 28 (6/0) */ /* Bcc.W #.W */ void REGPARAM2 CPUFUNC(op_6a00_12)(uae_u32 opcode) { {{ uae_s16 src = regs.irc; do_cycles_ce000 (2); if (!cctrue (10)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel4753; } m68k_incpc ((uae_s32)src + 2); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); return; didnt_jump:; m68k_incpc (4); do_cycles_ce000 (2); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}endlabel4753: ; } /* 20 (4/0) */ /* BccQ.B # */ void REGPARAM2 CPUFUNC(op_6a01_12)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; do_cycles_ce000 (2); if (!cctrue (10)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel4754; } m68k_incpc ((uae_s32)src + 2); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); return; didnt_jump:; m68k_incpc (2); do_cycles_ce000 (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}endlabel4754: ; } /* 16 (3/0) */ /* Bcc.L #.L */ void REGPARAM2 CPUFUNC(op_6aff_12)(uae_u32 opcode) { { do_cycles_ce000 (2); if (cctrue (10)) { exception3i (opcode, m68k_getpc () + 1); goto endlabel4755; } m68k_incpc (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); goto endlabel4755; { uae_s32 src; src = get_word_ce000_prefetch (2) << 16; src |= regs.irc; do_cycles_ce000 (2); if (!cctrue (10)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel4755; } m68k_incpc ((uae_s32)src + 2); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); return; didnt_jump:; m68k_incpc (4); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}endlabel4755: ; } /* 28 (6/0) */ /* Bcc.W #.W */ void REGPARAM2 CPUFUNC(op_6b00_12)(uae_u32 opcode) { {{ uae_s16 src = regs.irc; do_cycles_ce000 (2); if (!cctrue (11)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel4756; } m68k_incpc ((uae_s32)src + 2); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); return; didnt_jump:; m68k_incpc (4); do_cycles_ce000 (2); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}endlabel4756: ; } /* 20 (4/0) */ /* BccQ.B # */ void REGPARAM2 CPUFUNC(op_6b01_12)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; do_cycles_ce000 (2); if (!cctrue (11)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel4757; } m68k_incpc ((uae_s32)src + 2); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); return; didnt_jump:; m68k_incpc (2); do_cycles_ce000 (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}endlabel4757: ; } /* 16 (3/0) */ /* Bcc.L #.L */ void REGPARAM2 CPUFUNC(op_6bff_12)(uae_u32 opcode) { { do_cycles_ce000 (2); if (cctrue (11)) { exception3i (opcode, m68k_getpc () + 1); goto endlabel4758; } m68k_incpc (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); goto endlabel4758; { uae_s32 src; src = get_word_ce000_prefetch (2) << 16; src |= regs.irc; do_cycles_ce000 (2); if (!cctrue (11)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel4758; } m68k_incpc ((uae_s32)src + 2); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); return; didnt_jump:; m68k_incpc (4); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}endlabel4758: ; } /* 28 (6/0) */ /* Bcc.W #.W */ void REGPARAM2 CPUFUNC(op_6c00_12)(uae_u32 opcode) { {{ uae_s16 src = regs.irc; do_cycles_ce000 (2); if (!cctrue (12)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel4759; } m68k_incpc ((uae_s32)src + 2); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); return; didnt_jump:; m68k_incpc (4); do_cycles_ce000 (2); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}endlabel4759: ; } /* 20 (4/0) */ /* BccQ.B # */ void REGPARAM2 CPUFUNC(op_6c01_12)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; do_cycles_ce000 (2); if (!cctrue (12)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel4760; } m68k_incpc ((uae_s32)src + 2); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); return; didnt_jump:; m68k_incpc (2); do_cycles_ce000 (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}endlabel4760: ; } /* 16 (3/0) */ /* Bcc.L #.L */ void REGPARAM2 CPUFUNC(op_6cff_12)(uae_u32 opcode) { { do_cycles_ce000 (2); if (cctrue (12)) { exception3i (opcode, m68k_getpc () + 1); goto endlabel4761; } m68k_incpc (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); goto endlabel4761; { uae_s32 src; src = get_word_ce000_prefetch (2) << 16; src |= regs.irc; do_cycles_ce000 (2); if (!cctrue (12)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel4761; } m68k_incpc ((uae_s32)src + 2); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); return; didnt_jump:; m68k_incpc (4); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}endlabel4761: ; } /* 28 (6/0) */ /* Bcc.W #.W */ void REGPARAM2 CPUFUNC(op_6d00_12)(uae_u32 opcode) { {{ uae_s16 src = regs.irc; do_cycles_ce000 (2); if (!cctrue (13)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel4762; } m68k_incpc ((uae_s32)src + 2); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); return; didnt_jump:; m68k_incpc (4); do_cycles_ce000 (2); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}endlabel4762: ; } /* 20 (4/0) */ /* BccQ.B # */ void REGPARAM2 CPUFUNC(op_6d01_12)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; do_cycles_ce000 (2); if (!cctrue (13)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel4763; } m68k_incpc ((uae_s32)src + 2); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); return; didnt_jump:; m68k_incpc (2); do_cycles_ce000 (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}endlabel4763: ; } /* 16 (3/0) */ /* Bcc.L #.L */ void REGPARAM2 CPUFUNC(op_6dff_12)(uae_u32 opcode) { { do_cycles_ce000 (2); if (cctrue (13)) { exception3i (opcode, m68k_getpc () + 1); goto endlabel4764; } m68k_incpc (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); goto endlabel4764; { uae_s32 src; src = get_word_ce000_prefetch (2) << 16; src |= regs.irc; do_cycles_ce000 (2); if (!cctrue (13)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel4764; } m68k_incpc ((uae_s32)src + 2); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); return; didnt_jump:; m68k_incpc (4); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}endlabel4764: ; } /* 28 (6/0) */ /* Bcc.W #.W */ void REGPARAM2 CPUFUNC(op_6e00_12)(uae_u32 opcode) { {{ uae_s16 src = regs.irc; do_cycles_ce000 (2); if (!cctrue (14)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel4765; } m68k_incpc ((uae_s32)src + 2); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); return; didnt_jump:; m68k_incpc (4); do_cycles_ce000 (2); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}endlabel4765: ; } /* 20 (4/0) */ /* BccQ.B # */ void REGPARAM2 CPUFUNC(op_6e01_12)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; do_cycles_ce000 (2); if (!cctrue (14)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel4766; } m68k_incpc ((uae_s32)src + 2); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); return; didnt_jump:; m68k_incpc (2); do_cycles_ce000 (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}endlabel4766: ; } /* 16 (3/0) */ /* Bcc.L #.L */ void REGPARAM2 CPUFUNC(op_6eff_12)(uae_u32 opcode) { { do_cycles_ce000 (2); if (cctrue (14)) { exception3i (opcode, m68k_getpc () + 1); goto endlabel4767; } m68k_incpc (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); goto endlabel4767; { uae_s32 src; src = get_word_ce000_prefetch (2) << 16; src |= regs.irc; do_cycles_ce000 (2); if (!cctrue (14)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel4767; } m68k_incpc ((uae_s32)src + 2); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); return; didnt_jump:; m68k_incpc (4); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}endlabel4767: ; } /* 28 (6/0) */ /* Bcc.W #.W */ void REGPARAM2 CPUFUNC(op_6f00_12)(uae_u32 opcode) { {{ uae_s16 src = regs.irc; do_cycles_ce000 (2); if (!cctrue (15)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel4768; } m68k_incpc ((uae_s32)src + 2); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); return; didnt_jump:; m68k_incpc (4); do_cycles_ce000 (2); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}endlabel4768: ; } /* 20 (4/0) */ /* BccQ.B # */ void REGPARAM2 CPUFUNC(op_6f01_12)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; do_cycles_ce000 (2); if (!cctrue (15)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel4769; } m68k_incpc ((uae_s32)src + 2); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); return; didnt_jump:; m68k_incpc (2); do_cycles_ce000 (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}endlabel4769: ; } /* 16 (3/0) */ /* Bcc.L #.L */ void REGPARAM2 CPUFUNC(op_6fff_12)(uae_u32 opcode) { { do_cycles_ce000 (2); if (cctrue (15)) { exception3i (opcode, m68k_getpc () + 1); goto endlabel4770; } m68k_incpc (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); goto endlabel4770; { uae_s32 src; src = get_word_ce000_prefetch (2) << 16; src |= regs.irc; do_cycles_ce000 (2); if (!cctrue (15)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel4770; } m68k_incpc ((uae_s32)src + 2); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); return; didnt_jump:; m68k_incpc (4); get_word_ce000_prefetch (0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}endlabel4770: ; } /* 28 (6/0) */ /* MOVEQ.L #,Dn */ void REGPARAM2 CPUFUNC(op_7000_12)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_u32 src = srcreg; { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpc (2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (2); }}}} /* 4 (1/0) */ /* OR.B Dn,Dn */ void REGPARAM2 CPUFUNC(op_8000_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}} m68k_incpc (2); } /* 4 (1/0) */ /* OR.B (An),Dn */ void REGPARAM2 CPUFUNC(op_8010_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpc (2); } /* 8 (2/0) */ /* OR.B (An)+,Dn */ void REGPARAM2 CPUFUNC(op_8018_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpc (2); } /* 8 (2/0) */ /* OR.B -(An),Dn */ void REGPARAM2 CPUFUNC(op_8020_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; do_cycles_ce000 (2); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpc (2); } /* 10 (2/0) */ /* OR.B (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_8028_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpc (4); } /* 12 (3/0) */ /* OR.B (d8,An,Xn),Dn */ void REGPARAM2 CPUFUNC(op_8030_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpc (4); } /* 14 (3/0) */ /* OR.B (xxx).W,Dn */ void REGPARAM2 CPUFUNC(op_8038_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpc (4); } /* 12 (3/0) */ /* OR.B (xxx).L,Dn */ void REGPARAM2 CPUFUNC(op_8039_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpc (6); } /* 16 (4/0) */ /* OR.B (d16,PC),Dn */ void REGPARAM2 CPUFUNC(op_803a_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpc (4); } /* 12 (3/0) */ /* OR.B (d8,PC,Xn),Dn */ void REGPARAM2 CPUFUNC(op_803b_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; do_cycles_ce000 (2); srca = get_disp_ea_000 (tmppc, get_word_ce000_prefetch (4)); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpc (4); } /* 14 (3/0) */ /* OR.B #.B,Dn */ void REGPARAM2 CPUFUNC(op_803c_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = (uae_u8)get_word_ce000_prefetch (4); { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}} m68k_incpc (4); } /* 8 (2/0) */ /* OR.W Dn,Dn */ void REGPARAM2 CPUFUNC(op_8040_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}} m68k_incpc (2); } /* 4 (1/0) */ /* OR.W (An),Dn */ void REGPARAM2 CPUFUNC(op_8050_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4784; } {{ uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}} m68k_incpc (2); endlabel4784: ; } /* 8 (2/0) */ /* OR.W (An)+,Dn */ void REGPARAM2 CPUFUNC(op_8058_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4785; } {{ uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}} m68k_incpc (2); endlabel4785: ; } /* 8 (2/0) */ /* OR.W -(An),Dn */ void REGPARAM2 CPUFUNC(op_8060_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; do_cycles_ce000 (2); if (srca & 1) { exception3 (opcode, srca); goto endlabel4786; } {{ uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}} m68k_incpc (2); endlabel4786: ; } /* 10 (2/0) */ /* OR.W (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_8068_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel4787; } {{ uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}} m68k_incpc (4); endlabel4787: ; } /* 12 (3/0) */ /* OR.W (d8,An,Xn),Dn */ void REGPARAM2 CPUFUNC(op_8070_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel4788; } {{ uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}} m68k_incpc (4); endlabel4788: ; } /* 14 (3/0) */ /* OR.W (xxx).W,Dn */ void REGPARAM2 CPUFUNC(op_8078_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel4789; } {{ uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}} m68k_incpc (4); endlabel4789: ; } /* 12 (3/0) */ /* OR.W (xxx).L,Dn */ void REGPARAM2 CPUFUNC(op_8079_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); if (srca & 1) { exception3 (opcode, srca); goto endlabel4790; } {{ uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}} m68k_incpc (6); endlabel4790: ; } /* 16 (4/0) */ /* OR.W (d16,PC),Dn */ void REGPARAM2 CPUFUNC(op_807a_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel4791; } {{ uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}} m68k_incpc (4); endlabel4791: ; } /* 12 (3/0) */ /* OR.W (d8,PC,Xn),Dn */ void REGPARAM2 CPUFUNC(op_807b_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; do_cycles_ce000 (2); srca = get_disp_ea_000 (tmppc, get_word_ce000_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel4792; } {{ uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}} m68k_incpc (4); endlabel4792: ; } /* 14 (3/0) */ /* OR.W #.W,Dn */ void REGPARAM2 CPUFUNC(op_807c_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}} m68k_incpc (4); } /* 8 (2/0) */ /* OR.L Dn,Dn */ void REGPARAM2 CPUFUNC(op_8080_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); do_cycles_ce000 (4); m68k_dreg (regs, dstreg) = (src); }}} m68k_incpc (2); } /* 8 (1/0) */ /* OR.L (An),Dn */ void REGPARAM2 CPUFUNC(op_8090_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4795; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); do_cycles_ce000 (2); m68k_dreg (regs, dstreg) = (src); }}}}} m68k_incpc (2); endlabel4795: ; } /* 14 (3/0) */ /* OR.L (An)+,Dn */ void REGPARAM2 CPUFUNC(op_8098_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4796; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); m68k_areg (regs, srcreg) += 4; { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); do_cycles_ce000 (2); m68k_dreg (regs, dstreg) = (src); }}}}} m68k_incpc (2); endlabel4796: ; } /* 14 (3/0) */ /* OR.L -(An),Dn */ void REGPARAM2 CPUFUNC(op_80a0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; do_cycles_ce000 (2); if (srca & 1) { exception3 (opcode, srca); goto endlabel4797; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); do_cycles_ce000 (2); m68k_dreg (regs, dstreg) = (src); }}}}} m68k_incpc (2); endlabel4797: ; } /* 16 (3/0) */ /* OR.L (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_80a8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel4798; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); do_cycles_ce000 (2); m68k_dreg (regs, dstreg) = (src); }}}}} m68k_incpc (4); endlabel4798: ; } /* 18 (4/0) */ /* OR.L (d8,An,Xn),Dn */ void REGPARAM2 CPUFUNC(op_80b0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel4799; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); do_cycles_ce000 (2); m68k_dreg (regs, dstreg) = (src); }}}}} m68k_incpc (4); endlabel4799: ; } /* 20 (4/0) */ /* OR.L (xxx).W,Dn */ void REGPARAM2 CPUFUNC(op_80b8_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel4800; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); do_cycles_ce000 (2); m68k_dreg (regs, dstreg) = (src); }}}}} m68k_incpc (4); endlabel4800: ; } /* 18 (4/0) */ /* OR.L (xxx).L,Dn */ void REGPARAM2 CPUFUNC(op_80b9_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); if (srca & 1) { exception3 (opcode, srca); goto endlabel4801; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); do_cycles_ce000 (2); m68k_dreg (regs, dstreg) = (src); }}}}} m68k_incpc (6); endlabel4801: ; } /* 22 (5/0) */ /* OR.L (d16,PC),Dn */ void REGPARAM2 CPUFUNC(op_80ba_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel4802; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); do_cycles_ce000 (2); m68k_dreg (regs, dstreg) = (src); }}}}} m68k_incpc (4); endlabel4802: ; } /* 18 (4/0) */ /* OR.L (d8,PC,Xn),Dn */ void REGPARAM2 CPUFUNC(op_80bb_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; do_cycles_ce000 (2); srca = get_disp_ea_000 (tmppc, get_word_ce000_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel4803; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); do_cycles_ce000 (2); m68k_dreg (regs, dstreg) = (src); }}}}} m68k_incpc (4); endlabel4803: ; } /* 20 (4/0) */ /* OR.L #.L,Dn */ void REGPARAM2 CPUFUNC(op_80bc_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src; src = get_word_ce000_prefetch (4) << 16; src |= get_word_ce000_prefetch (6); { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); do_cycles_ce000 (4); m68k_dreg (regs, dstreg) = (src); }}} m68k_incpc (6); } /* 16 (3/0) */ /* DIVU.W Dn,Dn */ void REGPARAM2 CPUFUNC(op_80c0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { m68k_incpc (2); Exception (5); goto endlabel4805; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { int cycles = (getDivu68kCycles((uae_u32)dst, (uae_u16)src)); if (cycles > 0) do_cycles_ce000 (cycles); if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (2); } }}}}endlabel4805: ; } /* 4+ (1/0) */ /* DIVU.W (An),Dn */ void REGPARAM2 CPUFUNC(op_80d0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4806; } {{ uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { m68k_incpc (2); Exception (5); goto endlabel4806; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { int cycles = (getDivu68kCycles((uae_u32)dst, (uae_u16)src)); if (cycles > 0) do_cycles_ce000 (cycles); if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (2); } }}}}}}endlabel4806: ; } /* 8+ (2/0) */ /* DIVU.W (An)+,Dn */ void REGPARAM2 CPUFUNC(op_80d8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4807; } {{ uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { m68k_incpc (2); Exception (5); goto endlabel4807; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { int cycles = (getDivu68kCycles((uae_u32)dst, (uae_u16)src)); if (cycles > 0) do_cycles_ce000 (cycles); if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (2); } }}}}}}endlabel4807: ; } /* 8+ (2/0) */ /* DIVU.W -(An),Dn */ void REGPARAM2 CPUFUNC(op_80e0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; do_cycles_ce000 (2); if (srca & 1) { exception3 (opcode, srca); goto endlabel4808; } {{ uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { m68k_incpc (2); Exception (5); goto endlabel4808; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { int cycles = (getDivu68kCycles((uae_u32)dst, (uae_u16)src)); if (cycles > 0) do_cycles_ce000 (cycles); if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (2); } }}}}}}endlabel4808: ; } /* 10+ (2/0) */ /* DIVU.W (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_80e8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel4809; } {{ uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { m68k_incpc (4); Exception (5); goto endlabel4809; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { int cycles = (getDivu68kCycles((uae_u32)dst, (uae_u16)src)); if (cycles > 0) do_cycles_ce000 (cycles); if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (4); } }}}}}}endlabel4809: ; } /* 12+ (3/0) */ /* DIVU.W (d8,An,Xn),Dn */ void REGPARAM2 CPUFUNC(op_80f0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel4810; } {{ uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { m68k_incpc (4); Exception (5); goto endlabel4810; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { int cycles = (getDivu68kCycles((uae_u32)dst, (uae_u16)src)); if (cycles > 0) do_cycles_ce000 (cycles); if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (4); } }}}}}}endlabel4810: ; } /* 14+ (3/0) */ /* DIVU.W (xxx).W,Dn */ void REGPARAM2 CPUFUNC(op_80f8_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel4811; } {{ uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { m68k_incpc (4); Exception (5); goto endlabel4811; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { int cycles = (getDivu68kCycles((uae_u32)dst, (uae_u16)src)); if (cycles > 0) do_cycles_ce000 (cycles); if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (4); } }}}}}}endlabel4811: ; } /* 12+ (3/0) */ /* DIVU.W (xxx).L,Dn */ void REGPARAM2 CPUFUNC(op_80f9_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); if (srca & 1) { exception3 (opcode, srca); goto endlabel4812; } {{ uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { m68k_incpc (6); Exception (5); goto endlabel4812; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); { int cycles = (getDivu68kCycles((uae_u32)dst, (uae_u16)src)); if (cycles > 0) do_cycles_ce000 (cycles); if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (6); } }}}}}}endlabel4812: ; } /* 16+ (4/0) */ /* DIVU.W (d16,PC),Dn */ void REGPARAM2 CPUFUNC(op_80fa_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel4813; } {{ uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { m68k_incpc (4); Exception (5); goto endlabel4813; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { int cycles = (getDivu68kCycles((uae_u32)dst, (uae_u16)src)); if (cycles > 0) do_cycles_ce000 (cycles); if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (4); } }}}}}}endlabel4813: ; } /* 12+ (3/0) */ /* DIVU.W (d8,PC,Xn),Dn */ void REGPARAM2 CPUFUNC(op_80fb_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; do_cycles_ce000 (2); srca = get_disp_ea_000 (tmppc, get_word_ce000_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel4814; } {{ uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { m68k_incpc (4); Exception (5); goto endlabel4814; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { int cycles = (getDivu68kCycles((uae_u32)dst, (uae_u16)src)); if (cycles > 0) do_cycles_ce000 (cycles); if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (4); } }}}}}}endlabel4814: ; } /* 14+ (3/0) */ /* DIVU.W #.W,Dn */ void REGPARAM2 CPUFUNC(op_80fc_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { m68k_incpc (4); Exception (5); goto endlabel4815; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { int cycles = (getDivu68kCycles((uae_u32)dst, (uae_u16)src)); if (cycles > 0) do_cycles_ce000 (cycles); if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (4); } }}}}endlabel4815: ; } /* 8+ (2/0) */ /* SBCD.B Dn,Dn */ void REGPARAM2 CPUFUNC(op_8100_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u16 newv_lo = (dst & 0xF) - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = (dst & 0xF0) - (src & 0xF0); uae_u16 newv, tmp_newv; int bcd = 0; newv = tmp_newv = newv_hi + newv_lo; if (newv_lo & 0xF0) { newv -= 6; bcd = 6; }; if ((((dst & 0xFF) - (src & 0xFF) - (GET_XFLG () ? 1 : 0)) & 0x100) > 0xFF) { newv -= 0x60; } SET_CFLG ((((dst & 0xFF) - (src & 0xFF) - bcd - (GET_XFLG () ? 1 : 0)) & 0x300) > 0xFF); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); SET_VFLG ((tmp_newv & 0x80) != 0 && (newv & 0x80) == 0); do_cycles_ce000 (2); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}} m68k_incpc (2); } /* 6 (1/0) */ /* SBCD.B -(An),-(An) */ void REGPARAM2 CPUFUNC(op_8108_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; { do_cycles_ce000 (2); { uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u16 newv_lo = (dst & 0xF) - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = (dst & 0xF0) - (src & 0xF0); uae_u16 newv, tmp_newv; int bcd = 0; newv = tmp_newv = newv_hi + newv_lo; if (newv_lo & 0xF0) { newv -= 6; bcd = 6; }; if ((((dst & 0xFF) - (src & 0xFF) - (GET_XFLG () ? 1 : 0)) & 0x100) > 0xFF) { newv -= 0x60; } SET_CFLG ((((dst & 0xFF) - (src & 0xFF) - bcd - (GET_XFLG () ? 1 : 0)) & 0x300) > 0xFF); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); SET_VFLG ((tmp_newv & 0x80) != 0 && (newv & 0x80) == 0); x_put_byte (dsta, newv); }}}}}} m68k_incpc (2); } /* 18 (3/1) */ /* OR.B Dn,(An) */ void REGPARAM2 CPUFUNC(op_8110_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); x_put_byte (dsta, src); }}}} m68k_incpc (2); } /* 12 (2/1) */ /* OR.B Dn,(An)+ */ void REGPARAM2 CPUFUNC(op_8118_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); x_put_byte (dsta, src); }}}} m68k_incpc (2); } /* 12 (2/1) */ /* OR.B Dn,-(An) */ void REGPARAM2 CPUFUNC(op_8120_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; do_cycles_ce000 (2); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); x_put_byte (dsta, src); }}}} m68k_incpc (2); } /* 14 (2/1) */ /* OR.B Dn,(d16,An) */ void REGPARAM2 CPUFUNC(op_8128_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); x_put_byte (dsta, src); }}}} m68k_incpc (4); } /* 16 (3/1) */ /* OR.B Dn,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_8130_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (4)); { uae_s8 dst = x_get_byte (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); x_put_byte (dsta, src); }}}} m68k_incpc (4); } /* 18 (3/1) */ /* OR.B Dn,(xxx).W */ void REGPARAM2 CPUFUNC(op_8138_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); x_put_byte (dsta, src); }}}} m68k_incpc (4); } /* 16 (3/1) */ /* OR.B Dn,(xxx).L */ void REGPARAM2 CPUFUNC(op_8139_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = get_word_ce000_prefetch (4) << 16; dsta |= get_word_ce000_prefetch (6); { uae_s8 dst = x_get_byte (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); x_put_byte (dsta, src); }}}} m68k_incpc (6); } /* 20 (4/1) */ /* OR.W Dn,(An) */ void REGPARAM2 CPUFUNC(op_8150_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel4825; } {{ uae_s16 dst = x_get_word (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); x_put_word (dsta, src); }}}}} m68k_incpc (2); endlabel4825: ; } /* 12 (2/1) */ /* OR.W Dn,(An)+ */ void REGPARAM2 CPUFUNC(op_8158_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel4826; } {{ uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) += 2; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); x_put_word (dsta, src); }}}}} m68k_incpc (2); endlabel4826: ; } /* 12 (2/1) */ /* OR.W Dn,-(An) */ void REGPARAM2 CPUFUNC(op_8160_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; do_cycles_ce000 (2); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel4827; } {{ uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) = dsta; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); x_put_word (dsta, src); }}}}} m68k_incpc (2); endlabel4827: ; } /* 14 (2/1) */ /* OR.W Dn,(d16,An) */ void REGPARAM2 CPUFUNC(op_8168_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel4828; } {{ uae_s16 dst = x_get_word (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); x_put_word (dsta, src); }}}}} m68k_incpc (4); endlabel4828: ; } /* 16 (3/1) */ /* OR.W Dn,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_8170_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (4)); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel4829; } {{ uae_s16 dst = x_get_word (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); x_put_word (dsta, src); }}}}} m68k_incpc (4); endlabel4829: ; } /* 18 (3/1) */ /* OR.W Dn,(xxx).W */ void REGPARAM2 CPUFUNC(op_8178_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel4830; } {{ uae_s16 dst = x_get_word (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); x_put_word (dsta, src); }}}}} m68k_incpc (4); endlabel4830: ; } /* 16 (3/1) */ /* OR.W Dn,(xxx).L */ void REGPARAM2 CPUFUNC(op_8179_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = get_word_ce000_prefetch (4) << 16; dsta |= get_word_ce000_prefetch (6); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel4831; } {{ uae_s16 dst = x_get_word (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); x_put_word (dsta, src); }}}}} m68k_incpc (6); endlabel4831: ; } /* 20 (4/1) */ /* OR.L Dn,(An) */ void REGPARAM2 CPUFUNC(op_8190_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel4832; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); x_put_word (dsta + 2, src); x_put_word (dsta, src >> 16); }}}}} m68k_incpc (2); endlabel4832: ; } /* 20 (3/2) */ /* OR.L Dn,(An)+ */ void REGPARAM2 CPUFUNC(op_8198_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel4833; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); m68k_areg (regs, dstreg) += 4; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); x_put_word (dsta + 2, src); x_put_word (dsta, src >> 16); }}}}} m68k_incpc (2); endlabel4833: ; } /* 20 (3/2) */ /* OR.L Dn,-(An) */ void REGPARAM2 CPUFUNC(op_81a0_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; do_cycles_ce000 (2); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel4834; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); m68k_areg (regs, dstreg) = dsta; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); x_put_word (dsta + 2, src); x_put_word (dsta, src >> 16); }}}}} m68k_incpc (2); endlabel4834: ; } /* 22 (3/2) */ /* OR.L Dn,(d16,An) */ void REGPARAM2 CPUFUNC(op_81a8_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel4835; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); x_put_word (dsta + 2, src); x_put_word (dsta, src >> 16); }}}}} m68k_incpc (4); endlabel4835: ; } /* 24 (4/2) */ /* OR.L Dn,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_81b0_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (4)); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel4836; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); x_put_word (dsta + 2, src); x_put_word (dsta, src >> 16); }}}}} m68k_incpc (4); endlabel4836: ; } /* 26 (4/2) */ /* OR.L Dn,(xxx).W */ void REGPARAM2 CPUFUNC(op_81b8_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel4837; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); x_put_word (dsta + 2, src); x_put_word (dsta, src >> 16); }}}}} m68k_incpc (4); endlabel4837: ; } /* 24 (4/2) */ /* OR.L Dn,(xxx).L */ void REGPARAM2 CPUFUNC(op_81b9_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = get_word_ce000_prefetch (4) << 16; dsta |= get_word_ce000_prefetch (6); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel4838; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); x_put_word (dsta + 2, src); x_put_word (dsta, src >> 16); }}}}} m68k_incpc (6); endlabel4838: ; } /* 28 (5/2) */ /* DIVS.W Dn,Dn */ void REGPARAM2 CPUFUNC(op_81c0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { m68k_incpc (2); Exception (5); goto endlabel4839; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { int cycles = (getDivs68kCycles((uae_s32)dst, (uae_s16)src)); if (cycles > 0) do_cycles_ce000 (cycles); if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (2); } }}}}endlabel4839: ; } /* 4+ (1/0) */ /* DIVS.W (An),Dn */ void REGPARAM2 CPUFUNC(op_81d0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4840; } {{ uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { m68k_incpc (2); Exception (5); goto endlabel4840; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { int cycles = (getDivs68kCycles((uae_s32)dst, (uae_s16)src)); if (cycles > 0) do_cycles_ce000 (cycles); if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (2); } }}}}}}endlabel4840: ; } /* 8+ (2/0) */ /* DIVS.W (An)+,Dn */ void REGPARAM2 CPUFUNC(op_81d8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4841; } {{ uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { m68k_incpc (2); Exception (5); goto endlabel4841; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { int cycles = (getDivs68kCycles((uae_s32)dst, (uae_s16)src)); if (cycles > 0) do_cycles_ce000 (cycles); if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (2); } }}}}}}endlabel4841: ; } /* 8+ (2/0) */ /* DIVS.W -(An),Dn */ void REGPARAM2 CPUFUNC(op_81e0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; do_cycles_ce000 (2); if (srca & 1) { exception3 (opcode, srca); goto endlabel4842; } {{ uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { m68k_incpc (2); Exception (5); goto endlabel4842; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { int cycles = (getDivs68kCycles((uae_s32)dst, (uae_s16)src)); if (cycles > 0) do_cycles_ce000 (cycles); if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (2); } }}}}}}endlabel4842: ; } /* 10+ (2/0) */ /* DIVS.W (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_81e8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel4843; } {{ uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { m68k_incpc (4); Exception (5); goto endlabel4843; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { int cycles = (getDivs68kCycles((uae_s32)dst, (uae_s16)src)); if (cycles > 0) do_cycles_ce000 (cycles); if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (4); } }}}}}}endlabel4843: ; } /* 12+ (3/0) */ /* DIVS.W (d8,An,Xn),Dn */ void REGPARAM2 CPUFUNC(op_81f0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel4844; } {{ uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { m68k_incpc (4); Exception (5); goto endlabel4844; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { int cycles = (getDivs68kCycles((uae_s32)dst, (uae_s16)src)); if (cycles > 0) do_cycles_ce000 (cycles); if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (4); } }}}}}}endlabel4844: ; } /* 14+ (3/0) */ /* DIVS.W (xxx).W,Dn */ void REGPARAM2 CPUFUNC(op_81f8_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel4845; } {{ uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { m68k_incpc (4); Exception (5); goto endlabel4845; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { int cycles = (getDivs68kCycles((uae_s32)dst, (uae_s16)src)); if (cycles > 0) do_cycles_ce000 (cycles); if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (4); } }}}}}}endlabel4845: ; } /* 12+ (3/0) */ /* DIVS.W (xxx).L,Dn */ void REGPARAM2 CPUFUNC(op_81f9_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); if (srca & 1) { exception3 (opcode, srca); goto endlabel4846; } {{ uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { m68k_incpc (6); Exception (5); goto endlabel4846; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); { int cycles = (getDivs68kCycles((uae_s32)dst, (uae_s16)src)); if (cycles > 0) do_cycles_ce000 (cycles); if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (6); } }}}}}}endlabel4846: ; } /* 16+ (4/0) */ /* DIVS.W (d16,PC),Dn */ void REGPARAM2 CPUFUNC(op_81fa_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel4847; } {{ uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { m68k_incpc (4); Exception (5); goto endlabel4847; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { int cycles = (getDivs68kCycles((uae_s32)dst, (uae_s16)src)); if (cycles > 0) do_cycles_ce000 (cycles); if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (4); } }}}}}}endlabel4847: ; } /* 12+ (3/0) */ /* DIVS.W (d8,PC,Xn),Dn */ void REGPARAM2 CPUFUNC(op_81fb_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; do_cycles_ce000 (2); srca = get_disp_ea_000 (tmppc, get_word_ce000_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel4848; } {{ uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { m68k_incpc (4); Exception (5); goto endlabel4848; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { int cycles = (getDivs68kCycles((uae_s32)dst, (uae_s16)src)); if (cycles > 0) do_cycles_ce000 (cycles); if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (4); } }}}}}}endlabel4848: ; } /* 14+ (3/0) */ /* DIVS.W #.W,Dn */ void REGPARAM2 CPUFUNC(op_81fc_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { m68k_incpc (4); Exception (5); goto endlabel4849; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { int cycles = (getDivs68kCycles((uae_s32)dst, (uae_s16)src)); if (cycles > 0) do_cycles_ce000 (cycles); if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (4); } }}}}endlabel4849: ; } /* 8+ (2/0) */ /* SUB.B Dn,Dn */ void REGPARAM2 CPUFUNC(op_9000_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}} m68k_incpc (2); } /* 4 (1/0) */ /* SUB.B (An),Dn */ void REGPARAM2 CPUFUNC(op_9010_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpc (2); } /* 8 (2/0) */ /* SUB.B (An)+,Dn */ void REGPARAM2 CPUFUNC(op_9018_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpc (2); } /* 8 (2/0) */ /* SUB.B -(An),Dn */ void REGPARAM2 CPUFUNC(op_9020_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; do_cycles_ce000 (2); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpc (2); } /* 10 (2/0) */ /* SUB.B (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_9028_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpc (4); } /* 12 (3/0) */ /* SUB.B (d8,An,Xn),Dn */ void REGPARAM2 CPUFUNC(op_9030_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpc (4); } /* 14 (3/0) */ /* SUB.B (xxx).W,Dn */ void REGPARAM2 CPUFUNC(op_9038_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpc (4); } /* 12 (3/0) */ /* SUB.B (xxx).L,Dn */ void REGPARAM2 CPUFUNC(op_9039_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpc (6); } /* 16 (4/0) */ /* SUB.B (d16,PC),Dn */ void REGPARAM2 CPUFUNC(op_903a_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpc (4); } /* 12 (3/0) */ /* SUB.B (d8,PC,Xn),Dn */ void REGPARAM2 CPUFUNC(op_903b_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; do_cycles_ce000 (2); srca = get_disp_ea_000 (tmppc, get_word_ce000_prefetch (4)); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpc (4); } /* 14 (3/0) */ /* SUB.B #.B,Dn */ void REGPARAM2 CPUFUNC(op_903c_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = (uae_u8)get_word_ce000_prefetch (4); { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}} m68k_incpc (4); } /* 8 (2/0) */ /* SUB.W Dn,Dn */ void REGPARAM2 CPUFUNC(op_9040_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}} m68k_incpc (2); } /* 4 (1/0) */ /* SUB.W An,Dn */ void REGPARAM2 CPUFUNC(op_9048_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}} m68k_incpc (2); } /* 4 (1/0) */ /* SUB.W (An),Dn */ void REGPARAM2 CPUFUNC(op_9050_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4863; } {{ uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}} m68k_incpc (2); endlabel4863: ; } /* 8 (2/0) */ /* SUB.W (An)+,Dn */ void REGPARAM2 CPUFUNC(op_9058_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4864; } {{ uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}} m68k_incpc (2); endlabel4864: ; } /* 8 (2/0) */ /* SUB.W -(An),Dn */ void REGPARAM2 CPUFUNC(op_9060_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; do_cycles_ce000 (2); if (srca & 1) { exception3 (opcode, srca); goto endlabel4865; } {{ uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}} m68k_incpc (2); endlabel4865: ; } /* 10 (2/0) */ /* SUB.W (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_9068_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel4866; } {{ uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}} m68k_incpc (4); endlabel4866: ; } /* 12 (3/0) */ /* SUB.W (d8,An,Xn),Dn */ void REGPARAM2 CPUFUNC(op_9070_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel4867; } {{ uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}} m68k_incpc (4); endlabel4867: ; } /* 14 (3/0) */ /* SUB.W (xxx).W,Dn */ void REGPARAM2 CPUFUNC(op_9078_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel4868; } {{ uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}} m68k_incpc (4); endlabel4868: ; } /* 12 (3/0) */ /* SUB.W (xxx).L,Dn */ void REGPARAM2 CPUFUNC(op_9079_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); if (srca & 1) { exception3 (opcode, srca); goto endlabel4869; } {{ uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}} m68k_incpc (6); endlabel4869: ; } /* 16 (4/0) */ /* SUB.W (d16,PC),Dn */ void REGPARAM2 CPUFUNC(op_907a_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel4870; } {{ uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}} m68k_incpc (4); endlabel4870: ; } /* 12 (3/0) */ /* SUB.W (d8,PC,Xn),Dn */ void REGPARAM2 CPUFUNC(op_907b_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; do_cycles_ce000 (2); srca = get_disp_ea_000 (tmppc, get_word_ce000_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel4871; } {{ uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}} m68k_incpc (4); endlabel4871: ; } /* 14 (3/0) */ /* SUB.W #.W,Dn */ void REGPARAM2 CPUFUNC(op_907c_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}} m68k_incpc (4); } /* 8 (2/0) */ /* SUB.L Dn,Dn */ void REGPARAM2 CPUFUNC(op_9080_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); do_cycles_ce000 (4); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} m68k_incpc (2); } /* 8 (1/0) */ /* SUB.L An,Dn */ void REGPARAM2 CPUFUNC(op_9088_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); do_cycles_ce000 (2); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} m68k_incpc (2); } /* 6 (1/0) */ /* SUB.L (An),Dn */ void REGPARAM2 CPUFUNC(op_9090_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4875; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); do_cycles_ce000 (2); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}}} m68k_incpc (2); endlabel4875: ; } /* 14 (3/0) */ /* SUB.L (An)+,Dn */ void REGPARAM2 CPUFUNC(op_9098_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4876; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); m68k_areg (regs, srcreg) += 4; { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); do_cycles_ce000 (2); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}}} m68k_incpc (2); endlabel4876: ; } /* 14 (3/0) */ /* SUB.L -(An),Dn */ void REGPARAM2 CPUFUNC(op_90a0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; do_cycles_ce000 (2); if (srca & 1) { exception3 (opcode, srca); goto endlabel4877; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); do_cycles_ce000 (2); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}}} m68k_incpc (2); endlabel4877: ; } /* 16 (3/0) */ /* SUB.L (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_90a8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel4878; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); do_cycles_ce000 (2); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}}} m68k_incpc (4); endlabel4878: ; } /* 18 (4/0) */ /* SUB.L (d8,An,Xn),Dn */ void REGPARAM2 CPUFUNC(op_90b0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel4879; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); do_cycles_ce000 (2); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}}} m68k_incpc (4); endlabel4879: ; } /* 20 (4/0) */ /* SUB.L (xxx).W,Dn */ void REGPARAM2 CPUFUNC(op_90b8_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel4880; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); do_cycles_ce000 (2); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}}} m68k_incpc (4); endlabel4880: ; } /* 18 (4/0) */ /* SUB.L (xxx).L,Dn */ void REGPARAM2 CPUFUNC(op_90b9_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); if (srca & 1) { exception3 (opcode, srca); goto endlabel4881; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); do_cycles_ce000 (2); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}}} m68k_incpc (6); endlabel4881: ; } /* 22 (5/0) */ /* SUB.L (d16,PC),Dn */ void REGPARAM2 CPUFUNC(op_90ba_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel4882; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); do_cycles_ce000 (2); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}}} m68k_incpc (4); endlabel4882: ; } /* 18 (4/0) */ /* SUB.L (d8,PC,Xn),Dn */ void REGPARAM2 CPUFUNC(op_90bb_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; do_cycles_ce000 (2); srca = get_disp_ea_000 (tmppc, get_word_ce000_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel4883; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); do_cycles_ce000 (2); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}}} m68k_incpc (4); endlabel4883: ; } /* 20 (4/0) */ /* SUB.L #.L,Dn */ void REGPARAM2 CPUFUNC(op_90bc_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src; src = get_word_ce000_prefetch (4) << 16; src |= get_word_ce000_prefetch (6); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); do_cycles_ce000 (4); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} m68k_incpc (6); } /* 16 (3/0) */ /* SUBA.W Dn,An */ void REGPARAM2 CPUFUNC(op_90c0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); do_cycles_ce000 (4); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpc (2); } /* 8 (1/0) */ /* SUBA.W An,An */ void REGPARAM2 CPUFUNC(op_90c8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); do_cycles_ce000 (4); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpc (2); } /* 8 (1/0) */ /* SUBA.W (An),An */ void REGPARAM2 CPUFUNC(op_90d0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4887; } {{ uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); do_cycles_ce000 (4); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}}} m68k_incpc (2); endlabel4887: ; } /* 12 (2/0) */ /* SUBA.W (An)+,An */ void REGPARAM2 CPUFUNC(op_90d8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4888; } {{ uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); do_cycles_ce000 (4); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}}} m68k_incpc (2); endlabel4888: ; } /* 12 (2/0) */ /* SUBA.W -(An),An */ void REGPARAM2 CPUFUNC(op_90e0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; do_cycles_ce000 (2); if (srca & 1) { exception3 (opcode, srca); goto endlabel4889; } {{ uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); do_cycles_ce000 (4); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}}} m68k_incpc (2); endlabel4889: ; } /* 14 (2/0) */ /* SUBA.W (d16,An),An */ void REGPARAM2 CPUFUNC(op_90e8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel4890; } {{ uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); do_cycles_ce000 (4); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}}} m68k_incpc (4); endlabel4890: ; } /* 16 (3/0) */ /* SUBA.W (d8,An,Xn),An */ void REGPARAM2 CPUFUNC(op_90f0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel4891; } {{ uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); do_cycles_ce000 (4); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}}} m68k_incpc (4); endlabel4891: ; } /* 18 (3/0) */ /* SUBA.W (xxx).W,An */ void REGPARAM2 CPUFUNC(op_90f8_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel4892; } {{ uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); do_cycles_ce000 (4); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}}} m68k_incpc (4); endlabel4892: ; } /* 16 (3/0) */ /* SUBA.W (xxx).L,An */ void REGPARAM2 CPUFUNC(op_90f9_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); if (srca & 1) { exception3 (opcode, srca); goto endlabel4893; } {{ uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); do_cycles_ce000 (4); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}}} m68k_incpc (6); endlabel4893: ; } /* 20 (4/0) */ /* SUBA.W (d16,PC),An */ void REGPARAM2 CPUFUNC(op_90fa_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel4894; } {{ uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); do_cycles_ce000 (4); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}}} m68k_incpc (4); endlabel4894: ; } /* 16 (3/0) */ /* SUBA.W (d8,PC,Xn),An */ void REGPARAM2 CPUFUNC(op_90fb_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; do_cycles_ce000 (2); srca = get_disp_ea_000 (tmppc, get_word_ce000_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel4895; } {{ uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); do_cycles_ce000 (4); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}}} m68k_incpc (4); endlabel4895: ; } /* 18 (3/0) */ /* SUBA.W #.W,An */ void REGPARAM2 CPUFUNC(op_90fc_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); do_cycles_ce000 (4); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpc (4); } /* 12 (2/0) */ /* SUBX.B Dn,Dn */ void REGPARAM2 CPUFUNC(op_9100_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 newv = dst - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}} m68k_incpc (2); } /* 4 (1/0) */ /* SUBX.B -(An),-(An) */ void REGPARAM2 CPUFUNC(op_9108_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; { do_cycles_ce000 (2); { uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 newv = dst - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (2); } /* 18 (3/1) */ /* SUB.B Dn,(An) */ void REGPARAM2 CPUFUNC(op_9110_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (2); } /* 12 (2/1) */ /* SUB.B Dn,(An)+ */ void REGPARAM2 CPUFUNC(op_9118_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (2); } /* 12 (2/1) */ /* SUB.B Dn,-(An) */ void REGPARAM2 CPUFUNC(op_9120_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; do_cycles_ce000 (2); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (2); } /* 14 (2/1) */ /* SUB.B Dn,(d16,An) */ void REGPARAM2 CPUFUNC(op_9128_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 dst = x_get_byte (dsta); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (4); } /* 16 (3/1) */ /* SUB.B Dn,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_9130_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (4)); { uae_s8 dst = x_get_byte (dsta); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (4); } /* 18 (3/1) */ /* SUB.B Dn,(xxx).W */ void REGPARAM2 CPUFUNC(op_9138_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 dst = x_get_byte (dsta); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (4); } /* 16 (3/1) */ /* SUB.B Dn,(xxx).L */ void REGPARAM2 CPUFUNC(op_9139_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = get_word_ce000_prefetch (4) << 16; dsta |= get_word_ce000_prefetch (6); { uae_s8 dst = x_get_byte (dsta); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (6); } /* 20 (4/1) */ /* SUBX.W Dn,Dn */ void REGPARAM2 CPUFUNC(op_9140_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 newv = dst - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}} m68k_incpc (2); } /* 4 (1/0) */ /* SUBX.W -(An),-(An) */ void REGPARAM2 CPUFUNC(op_9148_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; { do_cycles_ce000 (2); { uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; if (srca & 1) { exception3 (opcode, srca); goto endlabel4907; } {{ uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; if (dsta & 1) { exception3 (opcode, dsta); goto endlabel4907; } {{ uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 newv = dst - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); x_put_word (dsta, newv); }}}}}}}}} m68k_incpc (2); endlabel4907: ; } /* 18 (3/1) */ /* SUB.W Dn,(An) */ void REGPARAM2 CPUFUNC(op_9150_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel4908; } {{ uae_s16 dst = x_get_word (dsta); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}}} m68k_incpc (2); endlabel4908: ; } /* 12 (2/1) */ /* SUB.W Dn,(An)+ */ void REGPARAM2 CPUFUNC(op_9158_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel4909; } {{ uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) += 2; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}}} m68k_incpc (2); endlabel4909: ; } /* 12 (2/1) */ /* SUB.W Dn,-(An) */ void REGPARAM2 CPUFUNC(op_9160_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; do_cycles_ce000 (2); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel4910; } {{ uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}}} m68k_incpc (2); endlabel4910: ; } /* 14 (2/1) */ /* SUB.W Dn,(d16,An) */ void REGPARAM2 CPUFUNC(op_9168_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel4911; } {{ uae_s16 dst = x_get_word (dsta); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}}} m68k_incpc (4); endlabel4911: ; } /* 16 (3/1) */ /* SUB.W Dn,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_9170_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (4)); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel4912; } {{ uae_s16 dst = x_get_word (dsta); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}}} m68k_incpc (4); endlabel4912: ; } /* 18 (3/1) */ /* SUB.W Dn,(xxx).W */ void REGPARAM2 CPUFUNC(op_9178_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel4913; } {{ uae_s16 dst = x_get_word (dsta); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}}} m68k_incpc (4); endlabel4913: ; } /* 16 (3/1) */ /* SUB.W Dn,(xxx).L */ void REGPARAM2 CPUFUNC(op_9179_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = get_word_ce000_prefetch (4) << 16; dsta |= get_word_ce000_prefetch (6); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel4914; } {{ uae_s16 dst = x_get_word (dsta); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}}} m68k_incpc (6); endlabel4914: ; } /* 20 (4/1) */ /* SUBX.L Dn,Dn */ void REGPARAM2 CPUFUNC(op_9180_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); do_cycles_ce000 (4); { uae_u32 newv = dst - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); }}}}} m68k_incpc (2); } /* 8 (1/0) */ /* SUBX.L -(An),-(An) */ void REGPARAM2 CPUFUNC(op_9188_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; { do_cycles_ce000 (2); { uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; if (srca & 1) { exception3 (opcode, srca); goto endlabel4916; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; if (dsta & 1) { exception3 (opcode, dsta); goto endlabel4916; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 newv = dst - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); x_put_word (dsta, newv >> 16); x_put_word (dsta + 2, newv); }}}}}}}}} m68k_incpc (2); endlabel4916: ; } /* 30 (5/2) */ /* SUB.L Dn,(An) */ void REGPARAM2 CPUFUNC(op_9190_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel4917; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta + 2, newv); x_put_word (dsta, newv >> 16); }}}}}}}} m68k_incpc (2); endlabel4917: ; } /* 20 (3/2) */ /* SUB.L Dn,(An)+ */ void REGPARAM2 CPUFUNC(op_9198_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel4918; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); m68k_areg (regs, dstreg) += 4; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta + 2, newv); x_put_word (dsta, newv >> 16); }}}}}}}} m68k_incpc (2); endlabel4918: ; } /* 20 (3/2) */ /* SUB.L Dn,-(An) */ void REGPARAM2 CPUFUNC(op_91a0_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; do_cycles_ce000 (2); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel4919; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta + 2, newv); x_put_word (dsta, newv >> 16); }}}}}}}} m68k_incpc (2); endlabel4919: ; } /* 22 (3/2) */ /* SUB.L Dn,(d16,An) */ void REGPARAM2 CPUFUNC(op_91a8_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel4920; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta + 2, newv); x_put_word (dsta, newv >> 16); }}}}}}}} m68k_incpc (4); endlabel4920: ; } /* 24 (4/2) */ /* SUB.L Dn,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_91b0_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (4)); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel4921; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta + 2, newv); x_put_word (dsta, newv >> 16); }}}}}}}} m68k_incpc (4); endlabel4921: ; } /* 26 (4/2) */ /* SUB.L Dn,(xxx).W */ void REGPARAM2 CPUFUNC(op_91b8_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel4922; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta + 2, newv); x_put_word (dsta, newv >> 16); }}}}}}}} m68k_incpc (4); endlabel4922: ; } /* 24 (4/2) */ /* SUB.L Dn,(xxx).L */ void REGPARAM2 CPUFUNC(op_91b9_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = get_word_ce000_prefetch (4) << 16; dsta |= get_word_ce000_prefetch (6); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel4923; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta + 2, newv); x_put_word (dsta, newv >> 16); }}}}}}}} m68k_incpc (6); endlabel4923: ; } /* 28 (5/2) */ /* SUBA.L Dn,An */ void REGPARAM2 CPUFUNC(op_91c0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); do_cycles_ce000 (4); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpc (2); } /* 8 (1/0) */ /* SUBA.L An,An */ void REGPARAM2 CPUFUNC(op_91c8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); do_cycles_ce000 (2); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpc (2); } /* 6 (1/0) */ /* SUBA.L (An),An */ void REGPARAM2 CPUFUNC(op_91d0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4926; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); do_cycles_ce000 (2); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}}} m68k_incpc (2); endlabel4926: ; } /* 14 (3/0) */ /* SUBA.L (An)+,An */ void REGPARAM2 CPUFUNC(op_91d8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4927; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); m68k_areg (regs, srcreg) += 4; { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); do_cycles_ce000 (2); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}}} m68k_incpc (2); endlabel4927: ; } /* 14 (3/0) */ /* SUBA.L -(An),An */ void REGPARAM2 CPUFUNC(op_91e0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; do_cycles_ce000 (2); if (srca & 1) { exception3 (opcode, srca); goto endlabel4928; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); do_cycles_ce000 (2); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}}} m68k_incpc (2); endlabel4928: ; } /* 16 (3/0) */ /* SUBA.L (d16,An),An */ void REGPARAM2 CPUFUNC(op_91e8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel4929; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); do_cycles_ce000 (2); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}}} m68k_incpc (4); endlabel4929: ; } /* 18 (4/0) */ /* SUBA.L (d8,An,Xn),An */ void REGPARAM2 CPUFUNC(op_91f0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel4930; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); do_cycles_ce000 (2); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}}} m68k_incpc (4); endlabel4930: ; } /* 20 (4/0) */ /* SUBA.L (xxx).W,An */ void REGPARAM2 CPUFUNC(op_91f8_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel4931; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); do_cycles_ce000 (2); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}}} m68k_incpc (4); endlabel4931: ; } /* 18 (4/0) */ /* SUBA.L (xxx).L,An */ void REGPARAM2 CPUFUNC(op_91f9_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); if (srca & 1) { exception3 (opcode, srca); goto endlabel4932; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); do_cycles_ce000 (2); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}}} m68k_incpc (6); endlabel4932: ; } /* 22 (5/0) */ /* SUBA.L (d16,PC),An */ void REGPARAM2 CPUFUNC(op_91fa_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel4933; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); do_cycles_ce000 (2); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}}} m68k_incpc (4); endlabel4933: ; } /* 18 (4/0) */ /* SUBA.L (d8,PC,Xn),An */ void REGPARAM2 CPUFUNC(op_91fb_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; do_cycles_ce000 (2); srca = get_disp_ea_000 (tmppc, get_word_ce000_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel4934; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); do_cycles_ce000 (2); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}}} m68k_incpc (4); endlabel4934: ; } /* 20 (4/0) */ /* SUBA.L #.L,An */ void REGPARAM2 CPUFUNC(op_91fc_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src; src = get_word_ce000_prefetch (4) << 16; src |= get_word_ce000_prefetch (6); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); do_cycles_ce000 (4); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpc (6); } /* 16 (3/0) */ /* CMP.B Dn,Dn */ void REGPARAM2 CPUFUNC(op_b000_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpc (2); } /* 4 (1/0) */ /* CMP.B (An),Dn */ void REGPARAM2 CPUFUNC(op_b010_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (2); } /* 8 (2/0) */ /* CMP.B (An)+,Dn */ void REGPARAM2 CPUFUNC(op_b018_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (2); } /* 8 (2/0) */ /* CMP.B -(An),Dn */ void REGPARAM2 CPUFUNC(op_b020_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; do_cycles_ce000 (2); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (2); } /* 10 (2/0) */ /* CMP.B (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_b028_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (4); } /* 12 (3/0) */ /* CMP.B (d8,An,Xn),Dn */ void REGPARAM2 CPUFUNC(op_b030_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (4); } /* 14 (3/0) */ /* CMP.B (xxx).W,Dn */ void REGPARAM2 CPUFUNC(op_b038_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (4); } /* 12 (3/0) */ /* CMP.B (xxx).L,Dn */ void REGPARAM2 CPUFUNC(op_b039_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (6); } /* 16 (4/0) */ /* CMP.B (d16,PC),Dn */ void REGPARAM2 CPUFUNC(op_b03a_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (4); } /* 12 (3/0) */ /* CMP.B (d8,PC,Xn),Dn */ void REGPARAM2 CPUFUNC(op_b03b_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; do_cycles_ce000 (2); srca = get_disp_ea_000 (tmppc, get_word_ce000_prefetch (4)); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (4); } /* 14 (3/0) */ /* CMP.B #.B,Dn */ void REGPARAM2 CPUFUNC(op_b03c_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = (uae_u8)get_word_ce000_prefetch (4); { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpc (4); } /* 8 (2/0) */ /* CMP.W Dn,Dn */ void REGPARAM2 CPUFUNC(op_b040_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpc (2); } /* 4 (1/0) */ /* CMP.W An,Dn */ void REGPARAM2 CPUFUNC(op_b048_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpc (2); } /* 4 (1/0) */ /* CMP.W (An),Dn */ void REGPARAM2 CPUFUNC(op_b050_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4949; } {{ uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (2); endlabel4949: ; } /* 8 (2/0) */ /* CMP.W (An)+,Dn */ void REGPARAM2 CPUFUNC(op_b058_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4950; } {{ uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (2); endlabel4950: ; } /* 8 (2/0) */ /* CMP.W -(An),Dn */ void REGPARAM2 CPUFUNC(op_b060_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; do_cycles_ce000 (2); if (srca & 1) { exception3 (opcode, srca); goto endlabel4951; } {{ uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (2); endlabel4951: ; } /* 10 (2/0) */ /* CMP.W (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_b068_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel4952; } {{ uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (4); endlabel4952: ; } /* 12 (3/0) */ /* CMP.W (d8,An,Xn),Dn */ void REGPARAM2 CPUFUNC(op_b070_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel4953; } {{ uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (4); endlabel4953: ; } /* 14 (3/0) */ /* CMP.W (xxx).W,Dn */ void REGPARAM2 CPUFUNC(op_b078_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel4954; } {{ uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (4); endlabel4954: ; } /* 12 (3/0) */ /* CMP.W (xxx).L,Dn */ void REGPARAM2 CPUFUNC(op_b079_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); if (srca & 1) { exception3 (opcode, srca); goto endlabel4955; } {{ uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (6); endlabel4955: ; } /* 16 (4/0) */ /* CMP.W (d16,PC),Dn */ void REGPARAM2 CPUFUNC(op_b07a_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel4956; } {{ uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (4); endlabel4956: ; } /* 12 (3/0) */ /* CMP.W (d8,PC,Xn),Dn */ void REGPARAM2 CPUFUNC(op_b07b_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; do_cycles_ce000 (2); srca = get_disp_ea_000 (tmppc, get_word_ce000_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel4957; } {{ uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (4); endlabel4957: ; } /* 14 (3/0) */ /* CMP.W #.W,Dn */ void REGPARAM2 CPUFUNC(op_b07c_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpc (4); } /* 8 (2/0) */ /* CMP.L Dn,Dn */ void REGPARAM2 CPUFUNC(op_b080_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); do_cycles_ce000 (2); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpc (2); } /* 6 (1/0) */ /* CMP.L An,Dn */ void REGPARAM2 CPUFUNC(op_b088_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); do_cycles_ce000 (2); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpc (2); } /* 6 (1/0) */ #endif #ifdef PART_7 /* CMP.L (An),Dn */ void REGPARAM2 CPUFUNC(op_b090_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4961; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); do_cycles_ce000 (2); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (2); endlabel4961: ; } /* 14 (3/0) */ /* CMP.L (An)+,Dn */ void REGPARAM2 CPUFUNC(op_b098_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4962; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); m68k_areg (regs, srcreg) += 4; { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); do_cycles_ce000 (2); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (2); endlabel4962: ; } /* 14 (3/0) */ /* CMP.L -(An),Dn */ void REGPARAM2 CPUFUNC(op_b0a0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; do_cycles_ce000 (2); if (srca & 1) { exception3 (opcode, srca); goto endlabel4963; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); do_cycles_ce000 (2); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (2); endlabel4963: ; } /* 16 (3/0) */ /* CMP.L (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_b0a8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel4964; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); do_cycles_ce000 (2); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (4); endlabel4964: ; } /* 18 (4/0) */ /* CMP.L (d8,An,Xn),Dn */ void REGPARAM2 CPUFUNC(op_b0b0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel4965; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); do_cycles_ce000 (2); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (4); endlabel4965: ; } /* 20 (4/0) */ /* CMP.L (xxx).W,Dn */ void REGPARAM2 CPUFUNC(op_b0b8_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel4966; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); do_cycles_ce000 (2); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (4); endlabel4966: ; } /* 18 (4/0) */ /* CMP.L (xxx).L,Dn */ void REGPARAM2 CPUFUNC(op_b0b9_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); if (srca & 1) { exception3 (opcode, srca); goto endlabel4967; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); do_cycles_ce000 (2); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (6); endlabel4967: ; } /* 22 (5/0) */ /* CMP.L (d16,PC),Dn */ void REGPARAM2 CPUFUNC(op_b0ba_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel4968; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); do_cycles_ce000 (2); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (4); endlabel4968: ; } /* 18 (4/0) */ /* CMP.L (d8,PC,Xn),Dn */ void REGPARAM2 CPUFUNC(op_b0bb_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; do_cycles_ce000 (2); srca = get_disp_ea_000 (tmppc, get_word_ce000_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel4969; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); do_cycles_ce000 (2); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (4); endlabel4969: ; } /* 20 (4/0) */ /* CMP.L #.L,Dn */ void REGPARAM2 CPUFUNC(op_b0bc_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src; src = get_word_ce000_prefetch (4) << 16; src |= get_word_ce000_prefetch (6); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); do_cycles_ce000 (2); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpc (6); } /* 14 (3/0) */ /* CMPA.W Dn,An */ void REGPARAM2 CPUFUNC(op_b0c0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); do_cycles_ce000 (2); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpc (2); } /* 6 (1/0) */ /* CMPA.W An,An */ void REGPARAM2 CPUFUNC(op_b0c8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); do_cycles_ce000 (2); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpc (2); } /* 6 (1/0) */ /* CMPA.W (An),An */ void REGPARAM2 CPUFUNC(op_b0d0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4973; } {{ uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); do_cycles_ce000 (2); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (2); endlabel4973: ; } /* 10 (2/0) */ /* CMPA.W (An)+,An */ void REGPARAM2 CPUFUNC(op_b0d8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4974; } {{ uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); do_cycles_ce000 (2); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (2); endlabel4974: ; } /* 10 (2/0) */ /* CMPA.W -(An),An */ void REGPARAM2 CPUFUNC(op_b0e0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; do_cycles_ce000 (2); if (srca & 1) { exception3 (opcode, srca); goto endlabel4975; } {{ uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); do_cycles_ce000 (2); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (2); endlabel4975: ; } /* 12 (2/0) */ /* CMPA.W (d16,An),An */ void REGPARAM2 CPUFUNC(op_b0e8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel4976; } {{ uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); do_cycles_ce000 (2); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (4); endlabel4976: ; } /* 14 (3/0) */ /* CMPA.W (d8,An,Xn),An */ void REGPARAM2 CPUFUNC(op_b0f0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel4977; } {{ uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); do_cycles_ce000 (2); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (4); endlabel4977: ; } /* 16 (3/0) */ /* CMPA.W (xxx).W,An */ void REGPARAM2 CPUFUNC(op_b0f8_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel4978; } {{ uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); do_cycles_ce000 (2); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (4); endlabel4978: ; } /* 14 (3/0) */ /* CMPA.W (xxx).L,An */ void REGPARAM2 CPUFUNC(op_b0f9_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); if (srca & 1) { exception3 (opcode, srca); goto endlabel4979; } {{ uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); do_cycles_ce000 (2); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (6); endlabel4979: ; } /* 18 (4/0) */ /* CMPA.W (d16,PC),An */ void REGPARAM2 CPUFUNC(op_b0fa_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel4980; } {{ uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); do_cycles_ce000 (2); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (4); endlabel4980: ; } /* 14 (3/0) */ /* CMPA.W (d8,PC,Xn),An */ void REGPARAM2 CPUFUNC(op_b0fb_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; do_cycles_ce000 (2); srca = get_disp_ea_000 (tmppc, get_word_ce000_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel4981; } {{ uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); do_cycles_ce000 (2); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (4); endlabel4981: ; } /* 16 (3/0) */ /* CMPA.W #.W,An */ void REGPARAM2 CPUFUNC(op_b0fc_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); do_cycles_ce000 (2); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpc (4); } /* 10 (2/0) */ /* EOR.B Dn,Dn */ void REGPARAM2 CPUFUNC(op_b100_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}} m68k_incpc (2); } /* 4 (1/0) */ /* CMPM.B (An)+,(An)+ */ void REGPARAM2 CPUFUNC(op_b108_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (2); } /* 12 (3/0) */ /* EOR.B Dn,(An) */ void REGPARAM2 CPUFUNC(op_b110_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); x_put_byte (dsta, src); }}}} m68k_incpc (2); } /* 12 (2/1) */ /* EOR.B Dn,(An)+ */ void REGPARAM2 CPUFUNC(op_b118_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); x_put_byte (dsta, src); }}}} m68k_incpc (2); } /* 12 (2/1) */ /* EOR.B Dn,-(An) */ void REGPARAM2 CPUFUNC(op_b120_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; do_cycles_ce000 (2); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); x_put_byte (dsta, src); }}}} m68k_incpc (2); } /* 14 (2/1) */ /* EOR.B Dn,(d16,An) */ void REGPARAM2 CPUFUNC(op_b128_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); x_put_byte (dsta, src); }}}} m68k_incpc (4); } /* 16 (3/1) */ /* EOR.B Dn,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_b130_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (4)); { uae_s8 dst = x_get_byte (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); x_put_byte (dsta, src); }}}} m68k_incpc (4); } /* 18 (3/1) */ /* EOR.B Dn,(xxx).W */ void REGPARAM2 CPUFUNC(op_b138_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); x_put_byte (dsta, src); }}}} m68k_incpc (4); } /* 16 (3/1) */ /* EOR.B Dn,(xxx).L */ void REGPARAM2 CPUFUNC(op_b139_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = get_word_ce000_prefetch (4) << 16; dsta |= get_word_ce000_prefetch (6); { uae_s8 dst = x_get_byte (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); x_put_byte (dsta, src); }}}} m68k_incpc (6); } /* 20 (4/1) */ /* EOR.W Dn,Dn */ void REGPARAM2 CPUFUNC(op_b140_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}} m68k_incpc (2); } /* 4 (1/0) */ /* CMPM.W (An)+,(An)+ */ void REGPARAM2 CPUFUNC(op_b148_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel4993; } {{ uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel4993; } {{ uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) += 2; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}}}}} m68k_incpc (2); endlabel4993: ; } /* 12 (3/0) */ /* EOR.W Dn,(An) */ void REGPARAM2 CPUFUNC(op_b150_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel4994; } {{ uae_s16 dst = x_get_word (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); x_put_word (dsta, src); }}}}} m68k_incpc (2); endlabel4994: ; } /* 12 (2/1) */ /* EOR.W Dn,(An)+ */ void REGPARAM2 CPUFUNC(op_b158_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel4995; } {{ uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) += 2; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); x_put_word (dsta, src); }}}}} m68k_incpc (2); endlabel4995: ; } /* 12 (2/1) */ /* EOR.W Dn,-(An) */ void REGPARAM2 CPUFUNC(op_b160_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; do_cycles_ce000 (2); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel4996; } {{ uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) = dsta; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); x_put_word (dsta, src); }}}}} m68k_incpc (2); endlabel4996: ; } /* 14 (2/1) */ /* EOR.W Dn,(d16,An) */ void REGPARAM2 CPUFUNC(op_b168_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel4997; } {{ uae_s16 dst = x_get_word (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); x_put_word (dsta, src); }}}}} m68k_incpc (4); endlabel4997: ; } /* 16 (3/1) */ /* EOR.W Dn,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_b170_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (4)); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel4998; } {{ uae_s16 dst = x_get_word (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); x_put_word (dsta, src); }}}}} m68k_incpc (4); endlabel4998: ; } /* 18 (3/1) */ /* EOR.W Dn,(xxx).W */ void REGPARAM2 CPUFUNC(op_b178_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel4999; } {{ uae_s16 dst = x_get_word (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); x_put_word (dsta, src); }}}}} m68k_incpc (4); endlabel4999: ; } /* 16 (3/1) */ /* EOR.W Dn,(xxx).L */ void REGPARAM2 CPUFUNC(op_b179_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = get_word_ce000_prefetch (4) << 16; dsta |= get_word_ce000_prefetch (6); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel5000; } {{ uae_s16 dst = x_get_word (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); x_put_word (dsta, src); }}}}} m68k_incpc (6); endlabel5000: ; } /* 20 (4/1) */ /* EOR.L Dn,Dn */ void REGPARAM2 CPUFUNC(op_b180_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); do_cycles_ce000 (4); m68k_dreg (regs, dstreg) = (src); }}} m68k_incpc (2); } /* 8 (1/0) */ /* CMPM.L (An)+,(An)+ */ void REGPARAM2 CPUFUNC(op_b188_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel5002; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); m68k_areg (regs, srcreg) += 4; { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel5002; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); m68k_areg (regs, dstreg) += 4; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}}}} m68k_incpc (2); endlabel5002: ; } /* 20 (5/0) */ /* EOR.L Dn,(An) */ void REGPARAM2 CPUFUNC(op_b190_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel5003; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); x_put_word (dsta + 2, src); x_put_word (dsta, src >> 16); }}}}} m68k_incpc (2); endlabel5003: ; } /* 20 (3/2) */ /* EOR.L Dn,(An)+ */ void REGPARAM2 CPUFUNC(op_b198_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel5004; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); m68k_areg (regs, dstreg) += 4; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); x_put_word (dsta + 2, src); x_put_word (dsta, src >> 16); }}}}} m68k_incpc (2); endlabel5004: ; } /* 20 (3/2) */ /* EOR.L Dn,-(An) */ void REGPARAM2 CPUFUNC(op_b1a0_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; do_cycles_ce000 (2); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel5005; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); m68k_areg (regs, dstreg) = dsta; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); x_put_word (dsta + 2, src); x_put_word (dsta, src >> 16); }}}}} m68k_incpc (2); endlabel5005: ; } /* 22 (3/2) */ /* EOR.L Dn,(d16,An) */ void REGPARAM2 CPUFUNC(op_b1a8_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel5006; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); x_put_word (dsta + 2, src); x_put_word (dsta, src >> 16); }}}}} m68k_incpc (4); endlabel5006: ; } /* 24 (4/2) */ /* EOR.L Dn,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_b1b0_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (4)); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel5007; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); x_put_word (dsta + 2, src); x_put_word (dsta, src >> 16); }}}}} m68k_incpc (4); endlabel5007: ; } /* 26 (4/2) */ /* EOR.L Dn,(xxx).W */ void REGPARAM2 CPUFUNC(op_b1b8_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel5008; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); x_put_word (dsta + 2, src); x_put_word (dsta, src >> 16); }}}}} m68k_incpc (4); endlabel5008: ; } /* 24 (4/2) */ /* EOR.L Dn,(xxx).L */ void REGPARAM2 CPUFUNC(op_b1b9_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = get_word_ce000_prefetch (4) << 16; dsta |= get_word_ce000_prefetch (6); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel5009; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); x_put_word (dsta + 2, src); x_put_word (dsta, src >> 16); }}}}} m68k_incpc (6); endlabel5009: ; } /* 28 (5/2) */ /* CMPA.L Dn,An */ void REGPARAM2 CPUFUNC(op_b1c0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); do_cycles_ce000 (2); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpc (2); } /* 6 (1/0) */ /* CMPA.L An,An */ void REGPARAM2 CPUFUNC(op_b1c8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); do_cycles_ce000 (2); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpc (2); } /* 6 (1/0) */ /* CMPA.L (An),An */ void REGPARAM2 CPUFUNC(op_b1d0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel5012; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); do_cycles_ce000 (2); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (2); endlabel5012: ; } /* 14 (3/0) */ /* CMPA.L (An)+,An */ void REGPARAM2 CPUFUNC(op_b1d8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel5013; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); m68k_areg (regs, srcreg) += 4; { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); do_cycles_ce000 (2); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (2); endlabel5013: ; } /* 14 (3/0) */ /* CMPA.L -(An),An */ void REGPARAM2 CPUFUNC(op_b1e0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; do_cycles_ce000 (2); if (srca & 1) { exception3 (opcode, srca); goto endlabel5014; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); do_cycles_ce000 (2); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (2); endlabel5014: ; } /* 16 (3/0) */ /* CMPA.L (d16,An),An */ void REGPARAM2 CPUFUNC(op_b1e8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel5015; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); do_cycles_ce000 (2); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (4); endlabel5015: ; } /* 18 (4/0) */ /* CMPA.L (d8,An,Xn),An */ void REGPARAM2 CPUFUNC(op_b1f0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel5016; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); do_cycles_ce000 (2); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (4); endlabel5016: ; } /* 20 (4/0) */ /* CMPA.L (xxx).W,An */ void REGPARAM2 CPUFUNC(op_b1f8_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel5017; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); do_cycles_ce000 (2); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (4); endlabel5017: ; } /* 18 (4/0) */ /* CMPA.L (xxx).L,An */ void REGPARAM2 CPUFUNC(op_b1f9_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); if (srca & 1) { exception3 (opcode, srca); goto endlabel5018; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); do_cycles_ce000 (2); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (6); endlabel5018: ; } /* 22 (5/0) */ /* CMPA.L (d16,PC),An */ void REGPARAM2 CPUFUNC(op_b1fa_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel5019; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); do_cycles_ce000 (2); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (4); endlabel5019: ; } /* 18 (4/0) */ /* CMPA.L (d8,PC,Xn),An */ void REGPARAM2 CPUFUNC(op_b1fb_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; do_cycles_ce000 (2); srca = get_disp_ea_000 (tmppc, get_word_ce000_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel5020; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); do_cycles_ce000 (2); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (4); endlabel5020: ; } /* 20 (4/0) */ /* CMPA.L #.L,An */ void REGPARAM2 CPUFUNC(op_b1fc_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src; src = get_word_ce000_prefetch (4) << 16; src |= get_word_ce000_prefetch (6); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); do_cycles_ce000 (2); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpc (6); } /* 14 (3/0) */ /* AND.B Dn,Dn */ void REGPARAM2 CPUFUNC(op_c000_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}} m68k_incpc (2); } /* 4 (1/0) */ /* AND.B (An),Dn */ void REGPARAM2 CPUFUNC(op_c010_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpc (2); } /* 8 (2/0) */ /* AND.B (An)+,Dn */ void REGPARAM2 CPUFUNC(op_c018_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpc (2); } /* 8 (2/0) */ /* AND.B -(An),Dn */ void REGPARAM2 CPUFUNC(op_c020_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; do_cycles_ce000 (2); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpc (2); } /* 10 (2/0) */ /* AND.B (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_c028_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpc (4); } /* 12 (3/0) */ /* AND.B (d8,An,Xn),Dn */ void REGPARAM2 CPUFUNC(op_c030_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpc (4); } /* 14 (3/0) */ /* AND.B (xxx).W,Dn */ void REGPARAM2 CPUFUNC(op_c038_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpc (4); } /* 12 (3/0) */ /* AND.B (xxx).L,Dn */ void REGPARAM2 CPUFUNC(op_c039_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpc (6); } /* 16 (4/0) */ /* AND.B (d16,PC),Dn */ void REGPARAM2 CPUFUNC(op_c03a_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpc (4); } /* 12 (3/0) */ /* AND.B (d8,PC,Xn),Dn */ void REGPARAM2 CPUFUNC(op_c03b_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; do_cycles_ce000 (2); srca = get_disp_ea_000 (tmppc, get_word_ce000_prefetch (4)); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpc (4); } /* 14 (3/0) */ /* AND.B #.B,Dn */ void REGPARAM2 CPUFUNC(op_c03c_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = (uae_u8)get_word_ce000_prefetch (4); { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}} m68k_incpc (4); } /* 8 (2/0) */ /* AND.W Dn,Dn */ void REGPARAM2 CPUFUNC(op_c040_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}} m68k_incpc (2); } /* 4 (1/0) */ /* AND.W (An),Dn */ void REGPARAM2 CPUFUNC(op_c050_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel5034; } {{ uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}} m68k_incpc (2); endlabel5034: ; } /* 8 (2/0) */ /* AND.W (An)+,Dn */ void REGPARAM2 CPUFUNC(op_c058_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel5035; } {{ uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}} m68k_incpc (2); endlabel5035: ; } /* 8 (2/0) */ /* AND.W -(An),Dn */ void REGPARAM2 CPUFUNC(op_c060_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; do_cycles_ce000 (2); if (srca & 1) { exception3 (opcode, srca); goto endlabel5036; } {{ uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}} m68k_incpc (2); endlabel5036: ; } /* 10 (2/0) */ /* AND.W (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_c068_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel5037; } {{ uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}} m68k_incpc (4); endlabel5037: ; } /* 12 (3/0) */ /* AND.W (d8,An,Xn),Dn */ void REGPARAM2 CPUFUNC(op_c070_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel5038; } {{ uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}} m68k_incpc (4); endlabel5038: ; } /* 14 (3/0) */ /* AND.W (xxx).W,Dn */ void REGPARAM2 CPUFUNC(op_c078_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel5039; } {{ uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}} m68k_incpc (4); endlabel5039: ; } /* 12 (3/0) */ /* AND.W (xxx).L,Dn */ void REGPARAM2 CPUFUNC(op_c079_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); if (srca & 1) { exception3 (opcode, srca); goto endlabel5040; } {{ uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}} m68k_incpc (6); endlabel5040: ; } /* 16 (4/0) */ /* AND.W (d16,PC),Dn */ void REGPARAM2 CPUFUNC(op_c07a_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel5041; } {{ uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}} m68k_incpc (4); endlabel5041: ; } /* 12 (3/0) */ /* AND.W (d8,PC,Xn),Dn */ void REGPARAM2 CPUFUNC(op_c07b_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; do_cycles_ce000 (2); srca = get_disp_ea_000 (tmppc, get_word_ce000_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel5042; } {{ uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}} m68k_incpc (4); endlabel5042: ; } /* 14 (3/0) */ /* AND.W #.W,Dn */ void REGPARAM2 CPUFUNC(op_c07c_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}} m68k_incpc (4); } /* 8 (2/0) */ /* AND.L Dn,Dn */ void REGPARAM2 CPUFUNC(op_c080_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); do_cycles_ce000 (4); m68k_dreg (regs, dstreg) = (src); }}} m68k_incpc (2); } /* 8 (1/0) */ /* AND.L (An),Dn */ void REGPARAM2 CPUFUNC(op_c090_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel5045; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); do_cycles_ce000 (2); m68k_dreg (regs, dstreg) = (src); }}}}} m68k_incpc (2); endlabel5045: ; } /* 14 (3/0) */ /* AND.L (An)+,Dn */ void REGPARAM2 CPUFUNC(op_c098_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel5046; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); m68k_areg (regs, srcreg) += 4; { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); do_cycles_ce000 (2); m68k_dreg (regs, dstreg) = (src); }}}}} m68k_incpc (2); endlabel5046: ; } /* 14 (3/0) */ /* AND.L -(An),Dn */ void REGPARAM2 CPUFUNC(op_c0a0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; do_cycles_ce000 (2); if (srca & 1) { exception3 (opcode, srca); goto endlabel5047; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); do_cycles_ce000 (2); m68k_dreg (regs, dstreg) = (src); }}}}} m68k_incpc (2); endlabel5047: ; } /* 16 (3/0) */ /* AND.L (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_c0a8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel5048; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); do_cycles_ce000 (2); m68k_dreg (regs, dstreg) = (src); }}}}} m68k_incpc (4); endlabel5048: ; } /* 18 (4/0) */ /* AND.L (d8,An,Xn),Dn */ void REGPARAM2 CPUFUNC(op_c0b0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel5049; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); do_cycles_ce000 (2); m68k_dreg (regs, dstreg) = (src); }}}}} m68k_incpc (4); endlabel5049: ; } /* 20 (4/0) */ /* AND.L (xxx).W,Dn */ void REGPARAM2 CPUFUNC(op_c0b8_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel5050; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); do_cycles_ce000 (2); m68k_dreg (regs, dstreg) = (src); }}}}} m68k_incpc (4); endlabel5050: ; } /* 18 (4/0) */ /* AND.L (xxx).L,Dn */ void REGPARAM2 CPUFUNC(op_c0b9_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); if (srca & 1) { exception3 (opcode, srca); goto endlabel5051; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); do_cycles_ce000 (2); m68k_dreg (regs, dstreg) = (src); }}}}} m68k_incpc (6); endlabel5051: ; } /* 22 (5/0) */ /* AND.L (d16,PC),Dn */ void REGPARAM2 CPUFUNC(op_c0ba_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel5052; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); do_cycles_ce000 (2); m68k_dreg (regs, dstreg) = (src); }}}}} m68k_incpc (4); endlabel5052: ; } /* 18 (4/0) */ /* AND.L (d8,PC,Xn),Dn */ void REGPARAM2 CPUFUNC(op_c0bb_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; do_cycles_ce000 (2); srca = get_disp_ea_000 (tmppc, get_word_ce000_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel5053; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); do_cycles_ce000 (2); m68k_dreg (regs, dstreg) = (src); }}}}} m68k_incpc (4); endlabel5053: ; } /* 20 (4/0) */ /* AND.L #.L,Dn */ void REGPARAM2 CPUFUNC(op_c0bc_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src; src = get_word_ce000_prefetch (4) << 16; src |= get_word_ce000_prefetch (6); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); do_cycles_ce000 (4); m68k_dreg (regs, dstreg) = (src); }}} m68k_incpc (6); } /* 16 (3/0) */ /* MULU.W Dn,Dn */ void REGPARAM2 CPUFUNC(op_c0c0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; int cycles = 38 - 4, bits; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); for(bits = 0; bits < 16 && src; bits++, src >>= 1) if (src & 1) cycles += 2; if (cycles > 0) do_cycles_ce000 (cycles); m68k_dreg (regs, dstreg) = (newv); m68k_incpc (2); }}}}} /* 38+ (1/0) */ /* MULU.W (An),Dn */ void REGPARAM2 CPUFUNC(op_c0d0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel5056; } {{ uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; int cycles = 38 - 4, bits; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); for(bits = 0; bits < 16 && src; bits++, src >>= 1) if (src & 1) cycles += 2; if (cycles > 0) do_cycles_ce000 (cycles); m68k_dreg (regs, dstreg) = (newv); m68k_incpc (2); }}}}}}endlabel5056: ; } /* 42+ (2/0) */ /* MULU.W (An)+,Dn */ void REGPARAM2 CPUFUNC(op_c0d8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel5057; } {{ uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; int cycles = 38 - 4, bits; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); for(bits = 0; bits < 16 && src; bits++, src >>= 1) if (src & 1) cycles += 2; if (cycles > 0) do_cycles_ce000 (cycles); m68k_dreg (regs, dstreg) = (newv); m68k_incpc (2); }}}}}}endlabel5057: ; } /* 42+ (2/0) */ /* MULU.W -(An),Dn */ void REGPARAM2 CPUFUNC(op_c0e0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; do_cycles_ce000 (2); if (srca & 1) { exception3 (opcode, srca); goto endlabel5058; } {{ uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; int cycles = 38 - 4, bits; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); for(bits = 0; bits < 16 && src; bits++, src >>= 1) if (src & 1) cycles += 2; if (cycles > 0) do_cycles_ce000 (cycles); m68k_dreg (regs, dstreg) = (newv); m68k_incpc (2); }}}}}}endlabel5058: ; } /* 44+ (2/0) */ /* MULU.W (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_c0e8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel5059; } {{ uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; int cycles = 38 - 4, bits; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); for(bits = 0; bits < 16 && src; bits++, src >>= 1) if (src & 1) cycles += 2; if (cycles > 0) do_cycles_ce000 (cycles); m68k_dreg (regs, dstreg) = (newv); m68k_incpc (4); }}}}}}endlabel5059: ; } /* 46+ (3/0) */ /* MULU.W (d8,An,Xn),Dn */ void REGPARAM2 CPUFUNC(op_c0f0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel5060; } {{ uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; int cycles = 38 - 4, bits; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); for(bits = 0; bits < 16 && src; bits++, src >>= 1) if (src & 1) cycles += 2; if (cycles > 0) do_cycles_ce000 (cycles); m68k_dreg (regs, dstreg) = (newv); m68k_incpc (4); }}}}}}endlabel5060: ; } /* 48+ (3/0) */ /* MULU.W (xxx).W,Dn */ void REGPARAM2 CPUFUNC(op_c0f8_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel5061; } {{ uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; int cycles = 38 - 4, bits; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); for(bits = 0; bits < 16 && src; bits++, src >>= 1) if (src & 1) cycles += 2; if (cycles > 0) do_cycles_ce000 (cycles); m68k_dreg (regs, dstreg) = (newv); m68k_incpc (4); }}}}}}endlabel5061: ; } /* 46+ (3/0) */ /* MULU.W (xxx).L,Dn */ void REGPARAM2 CPUFUNC(op_c0f9_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); if (srca & 1) { exception3 (opcode, srca); goto endlabel5062; } {{ uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; int cycles = 38 - 4, bits; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); for(bits = 0; bits < 16 && src; bits++, src >>= 1) if (src & 1) cycles += 2; if (cycles > 0) do_cycles_ce000 (cycles); m68k_dreg (regs, dstreg) = (newv); m68k_incpc (6); }}}}}}endlabel5062: ; } /* 50+ (4/0) */ /* MULU.W (d16,PC),Dn */ void REGPARAM2 CPUFUNC(op_c0fa_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel5063; } {{ uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; int cycles = 38 - 4, bits; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); for(bits = 0; bits < 16 && src; bits++, src >>= 1) if (src & 1) cycles += 2; if (cycles > 0) do_cycles_ce000 (cycles); m68k_dreg (regs, dstreg) = (newv); m68k_incpc (4); }}}}}}endlabel5063: ; } /* 46+ (3/0) */ /* MULU.W (d8,PC,Xn),Dn */ void REGPARAM2 CPUFUNC(op_c0fb_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; do_cycles_ce000 (2); srca = get_disp_ea_000 (tmppc, get_word_ce000_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel5064; } {{ uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; int cycles = 38 - 4, bits; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); for(bits = 0; bits < 16 && src; bits++, src >>= 1) if (src & 1) cycles += 2; if (cycles > 0) do_cycles_ce000 (cycles); m68k_dreg (regs, dstreg) = (newv); m68k_incpc (4); }}}}}}endlabel5064: ; } /* 48+ (3/0) */ /* MULU.W #.W,Dn */ void REGPARAM2 CPUFUNC(op_c0fc_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; int cycles = 38 - 4, bits; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); for(bits = 0; bits < 16 && src; bits++, src >>= 1) if (src & 1) cycles += 2; if (cycles > 0) do_cycles_ce000 (cycles); m68k_dreg (regs, dstreg) = (newv); m68k_incpc (4); }}}}} /* 42+ (2/0) */ /* ABCD.B Dn,Dn */ void REGPARAM2 CPUFUNC(op_c100_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u16 newv_lo = (src & 0xF) + (dst & 0xF) + (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = (src & 0xF0) + (dst & 0xF0); uae_u16 newv, tmp_newv; int cflg; newv = tmp_newv = newv_hi + newv_lo; if (newv_lo > 9) { newv += 6; } cflg = (newv & 0x3F0) > 0x90; if (cflg) newv += 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); SET_VFLG ((tmp_newv & 0x80) == 0 && (newv & 0x80) != 0); do_cycles_ce000 (2); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}} m68k_incpc (2); } /* 6 (1/0) */ /* ABCD.B -(An),-(An) */ void REGPARAM2 CPUFUNC(op_c108_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; { do_cycles_ce000 (2); { uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u16 newv_lo = (src & 0xF) + (dst & 0xF) + (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = (src & 0xF0) + (dst & 0xF0); uae_u16 newv, tmp_newv; int cflg; newv = tmp_newv = newv_hi + newv_lo; if (newv_lo > 9) { newv += 6; } cflg = (newv & 0x3F0) > 0x90; if (cflg) newv += 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); SET_VFLG ((tmp_newv & 0x80) == 0 && (newv & 0x80) != 0); x_put_byte (dsta, newv); }}}}}} m68k_incpc (2); } /* 18 (3/1) */ /* AND.B Dn,(An) */ void REGPARAM2 CPUFUNC(op_c110_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); x_put_byte (dsta, src); }}}} m68k_incpc (2); } /* 12 (2/1) */ /* AND.B Dn,(An)+ */ void REGPARAM2 CPUFUNC(op_c118_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); x_put_byte (dsta, src); }}}} m68k_incpc (2); } /* 12 (2/1) */ /* AND.B Dn,-(An) */ void REGPARAM2 CPUFUNC(op_c120_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; do_cycles_ce000 (2); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); x_put_byte (dsta, src); }}}} m68k_incpc (2); } /* 14 (2/1) */ /* AND.B Dn,(d16,An) */ void REGPARAM2 CPUFUNC(op_c128_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); x_put_byte (dsta, src); }}}} m68k_incpc (4); } /* 16 (3/1) */ /* AND.B Dn,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_c130_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (4)); { uae_s8 dst = x_get_byte (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); x_put_byte (dsta, src); }}}} m68k_incpc (4); } /* 18 (3/1) */ /* AND.B Dn,(xxx).W */ void REGPARAM2 CPUFUNC(op_c138_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); x_put_byte (dsta, src); }}}} m68k_incpc (4); } /* 16 (3/1) */ /* AND.B Dn,(xxx).L */ void REGPARAM2 CPUFUNC(op_c139_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = get_word_ce000_prefetch (4) << 16; dsta |= get_word_ce000_prefetch (6); { uae_s8 dst = x_get_byte (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); x_put_byte (dsta, src); }}}} m68k_incpc (6); } /* 20 (4/1) */ /* EXG.L Dn,Dn */ void REGPARAM2 CPUFUNC(op_c140_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); do_cycles_ce000 (2); m68k_dreg (regs, srcreg) = (dst); m68k_dreg (regs, dstreg) = (src); }}} m68k_incpc (2); } /* 6 (1/0) */ /* EXG.L An,An */ void REGPARAM2 CPUFUNC(op_c148_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); do_cycles_ce000 (2); m68k_areg (regs, srcreg) = (dst); m68k_areg (regs, dstreg) = (src); }}} m68k_incpc (2); } /* 6 (1/0) */ /* AND.W Dn,(An) */ void REGPARAM2 CPUFUNC(op_c150_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel5077; } {{ uae_s16 dst = x_get_word (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); x_put_word (dsta, src); }}}}} m68k_incpc (2); endlabel5077: ; } /* 12 (2/1) */ /* AND.W Dn,(An)+ */ void REGPARAM2 CPUFUNC(op_c158_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel5078; } {{ uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) += 2; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); x_put_word (dsta, src); }}}}} m68k_incpc (2); endlabel5078: ; } /* 12 (2/1) */ /* AND.W Dn,-(An) */ void REGPARAM2 CPUFUNC(op_c160_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; do_cycles_ce000 (2); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel5079; } {{ uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) = dsta; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); x_put_word (dsta, src); }}}}} m68k_incpc (2); endlabel5079: ; } /* 14 (2/1) */ /* AND.W Dn,(d16,An) */ void REGPARAM2 CPUFUNC(op_c168_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel5080; } {{ uae_s16 dst = x_get_word (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); x_put_word (dsta, src); }}}}} m68k_incpc (4); endlabel5080: ; } /* 16 (3/1) */ /* AND.W Dn,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_c170_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (4)); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel5081; } {{ uae_s16 dst = x_get_word (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); x_put_word (dsta, src); }}}}} m68k_incpc (4); endlabel5081: ; } /* 18 (3/1) */ /* AND.W Dn,(xxx).W */ void REGPARAM2 CPUFUNC(op_c178_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel5082; } {{ uae_s16 dst = x_get_word (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); x_put_word (dsta, src); }}}}} m68k_incpc (4); endlabel5082: ; } /* 16 (3/1) */ /* AND.W Dn,(xxx).L */ void REGPARAM2 CPUFUNC(op_c179_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = get_word_ce000_prefetch (4) << 16; dsta |= get_word_ce000_prefetch (6); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel5083; } {{ uae_s16 dst = x_get_word (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); x_put_word (dsta, src); }}}}} m68k_incpc (6); endlabel5083: ; } /* 20 (4/1) */ /* EXG.L Dn,An */ void REGPARAM2 CPUFUNC(op_c188_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); do_cycles_ce000 (2); m68k_dreg (regs, srcreg) = (dst); m68k_areg (regs, dstreg) = (src); }}} m68k_incpc (2); } /* 6 (1/0) */ /* AND.L Dn,(An) */ void REGPARAM2 CPUFUNC(op_c190_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel5085; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); x_put_word (dsta + 2, src); x_put_word (dsta, src >> 16); }}}}} m68k_incpc (2); endlabel5085: ; } /* 20 (3/2) */ /* AND.L Dn,(An)+ */ void REGPARAM2 CPUFUNC(op_c198_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel5086; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); m68k_areg (regs, dstreg) += 4; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); x_put_word (dsta + 2, src); x_put_word (dsta, src >> 16); }}}}} m68k_incpc (2); endlabel5086: ; } /* 20 (3/2) */ /* AND.L Dn,-(An) */ void REGPARAM2 CPUFUNC(op_c1a0_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; do_cycles_ce000 (2); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel5087; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); m68k_areg (regs, dstreg) = dsta; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); x_put_word (dsta + 2, src); x_put_word (dsta, src >> 16); }}}}} m68k_incpc (2); endlabel5087: ; } /* 22 (3/2) */ /* AND.L Dn,(d16,An) */ void REGPARAM2 CPUFUNC(op_c1a8_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel5088; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); x_put_word (dsta + 2, src); x_put_word (dsta, src >> 16); }}}}} m68k_incpc (4); endlabel5088: ; } /* 24 (4/2) */ /* AND.L Dn,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_c1b0_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (4)); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel5089; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); x_put_word (dsta + 2, src); x_put_word (dsta, src >> 16); }}}}} m68k_incpc (4); endlabel5089: ; } /* 26 (4/2) */ /* AND.L Dn,(xxx).W */ void REGPARAM2 CPUFUNC(op_c1b8_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel5090; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); x_put_word (dsta + 2, src); x_put_word (dsta, src >> 16); }}}}} m68k_incpc (4); endlabel5090: ; } /* 24 (4/2) */ /* AND.L Dn,(xxx).L */ void REGPARAM2 CPUFUNC(op_c1b9_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = get_word_ce000_prefetch (4) << 16; dsta |= get_word_ce000_prefetch (6); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel5091; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); x_put_word (dsta + 2, src); x_put_word (dsta, src >> 16); }}}}} m68k_incpc (6); endlabel5091: ; } /* 28 (5/2) */ /* MULS.W Dn,Dn */ void REGPARAM2 CPUFUNC(op_c1c0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; int cycles = 38 - 4, bits; uae_u32 usrc; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); usrc = ((uae_u32)src) << 1; for(bits = 0; bits < 16 && usrc; bits++, usrc >>= 1) if ((usrc & 3) == 1 || (usrc & 3) == 2) cycles += 2; if (cycles > 0) do_cycles_ce000 (cycles); m68k_dreg (regs, dstreg) = (newv); }}}} m68k_incpc (2); } /* 38+ (1/0) */ /* MULS.W (An),Dn */ void REGPARAM2 CPUFUNC(op_c1d0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel5093; } {{ uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; int cycles = 38 - 4, bits; uae_u32 usrc; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); usrc = ((uae_u32)src) << 1; for(bits = 0; bits < 16 && usrc; bits++, usrc >>= 1) if ((usrc & 3) == 1 || (usrc & 3) == 2) cycles += 2; if (cycles > 0) do_cycles_ce000 (cycles); m68k_dreg (regs, dstreg) = (newv); }}}}}} m68k_incpc (2); endlabel5093: ; } /* 42+ (2/0) */ /* MULS.W (An)+,Dn */ void REGPARAM2 CPUFUNC(op_c1d8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel5094; } {{ uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; int cycles = 38 - 4, bits; uae_u32 usrc; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); usrc = ((uae_u32)src) << 1; for(bits = 0; bits < 16 && usrc; bits++, usrc >>= 1) if ((usrc & 3) == 1 || (usrc & 3) == 2) cycles += 2; if (cycles > 0) do_cycles_ce000 (cycles); m68k_dreg (regs, dstreg) = (newv); }}}}}} m68k_incpc (2); endlabel5094: ; } /* 42+ (2/0) */ /* MULS.W -(An),Dn */ void REGPARAM2 CPUFUNC(op_c1e0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; do_cycles_ce000 (2); if (srca & 1) { exception3 (opcode, srca); goto endlabel5095; } {{ uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; int cycles = 38 - 4, bits; uae_u32 usrc; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); usrc = ((uae_u32)src) << 1; for(bits = 0; bits < 16 && usrc; bits++, usrc >>= 1) if ((usrc & 3) == 1 || (usrc & 3) == 2) cycles += 2; if (cycles > 0) do_cycles_ce000 (cycles); m68k_dreg (regs, dstreg) = (newv); }}}}}} m68k_incpc (2); endlabel5095: ; } /* 44+ (2/0) */ /* MULS.W (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_c1e8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel5096; } {{ uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; int cycles = 38 - 4, bits; uae_u32 usrc; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); usrc = ((uae_u32)src) << 1; for(bits = 0; bits < 16 && usrc; bits++, usrc >>= 1) if ((usrc & 3) == 1 || (usrc & 3) == 2) cycles += 2; if (cycles > 0) do_cycles_ce000 (cycles); m68k_dreg (regs, dstreg) = (newv); }}}}}} m68k_incpc (4); endlabel5096: ; } /* 46+ (3/0) */ /* MULS.W (d8,An,Xn),Dn */ void REGPARAM2 CPUFUNC(op_c1f0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel5097; } {{ uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; int cycles = 38 - 4, bits; uae_u32 usrc; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); usrc = ((uae_u32)src) << 1; for(bits = 0; bits < 16 && usrc; bits++, usrc >>= 1) if ((usrc & 3) == 1 || (usrc & 3) == 2) cycles += 2; if (cycles > 0) do_cycles_ce000 (cycles); m68k_dreg (regs, dstreg) = (newv); }}}}}} m68k_incpc (4); endlabel5097: ; } /* 48+ (3/0) */ /* MULS.W (xxx).W,Dn */ void REGPARAM2 CPUFUNC(op_c1f8_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel5098; } {{ uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; int cycles = 38 - 4, bits; uae_u32 usrc; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); usrc = ((uae_u32)src) << 1; for(bits = 0; bits < 16 && usrc; bits++, usrc >>= 1) if ((usrc & 3) == 1 || (usrc & 3) == 2) cycles += 2; if (cycles > 0) do_cycles_ce000 (cycles); m68k_dreg (regs, dstreg) = (newv); }}}}}} m68k_incpc (4); endlabel5098: ; } /* 46+ (3/0) */ /* MULS.W (xxx).L,Dn */ void REGPARAM2 CPUFUNC(op_c1f9_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); if (srca & 1) { exception3 (opcode, srca); goto endlabel5099; } {{ uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; int cycles = 38 - 4, bits; uae_u32 usrc; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); usrc = ((uae_u32)src) << 1; for(bits = 0; bits < 16 && usrc; bits++, usrc >>= 1) if ((usrc & 3) == 1 || (usrc & 3) == 2) cycles += 2; if (cycles > 0) do_cycles_ce000 (cycles); m68k_dreg (regs, dstreg) = (newv); }}}}}} m68k_incpc (6); endlabel5099: ; } /* 50+ (4/0) */ /* MULS.W (d16,PC),Dn */ void REGPARAM2 CPUFUNC(op_c1fa_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel5100; } {{ uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; int cycles = 38 - 4, bits; uae_u32 usrc; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); usrc = ((uae_u32)src) << 1; for(bits = 0; bits < 16 && usrc; bits++, usrc >>= 1) if ((usrc & 3) == 1 || (usrc & 3) == 2) cycles += 2; if (cycles > 0) do_cycles_ce000 (cycles); m68k_dreg (regs, dstreg) = (newv); }}}}}} m68k_incpc (4); endlabel5100: ; } /* 46+ (3/0) */ /* MULS.W (d8,PC,Xn),Dn */ void REGPARAM2 CPUFUNC(op_c1fb_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; do_cycles_ce000 (2); srca = get_disp_ea_000 (tmppc, get_word_ce000_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel5101; } {{ uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; int cycles = 38 - 4, bits; uae_u32 usrc; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); usrc = ((uae_u32)src) << 1; for(bits = 0; bits < 16 && usrc; bits++, usrc >>= 1) if ((usrc & 3) == 1 || (usrc & 3) == 2) cycles += 2; if (cycles > 0) do_cycles_ce000 (cycles); m68k_dreg (regs, dstreg) = (newv); }}}}}} m68k_incpc (4); endlabel5101: ; } /* 48+ (3/0) */ /* MULS.W #.W,Dn */ void REGPARAM2 CPUFUNC(op_c1fc_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; int cycles = 38 - 4, bits; uae_u32 usrc; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); usrc = ((uae_u32)src) << 1; for(bits = 0; bits < 16 && usrc; bits++, usrc >>= 1) if ((usrc & 3) == 1 || (usrc & 3) == 2) cycles += 2; if (cycles > 0) do_cycles_ce000 (cycles); m68k_dreg (regs, dstreg) = (newv); }}}} m68k_incpc (4); } /* 42+ (2/0) */ /* ADD.B Dn,Dn */ void REGPARAM2 CPUFUNC(op_d000_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}} m68k_incpc (2); } /* 4 (1/0) */ /* ADD.B (An),Dn */ void REGPARAM2 CPUFUNC(op_d010_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpc (2); } /* 8 (2/0) */ /* ADD.B (An)+,Dn */ void REGPARAM2 CPUFUNC(op_d018_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpc (2); } /* 8 (2/0) */ /* ADD.B -(An),Dn */ void REGPARAM2 CPUFUNC(op_d020_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; do_cycles_ce000 (2); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpc (2); } /* 10 (2/0) */ /* ADD.B (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_d028_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpc (4); } /* 12 (3/0) */ /* ADD.B (d8,An,Xn),Dn */ void REGPARAM2 CPUFUNC(op_d030_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpc (4); } /* 14 (3/0) */ /* ADD.B (xxx).W,Dn */ void REGPARAM2 CPUFUNC(op_d038_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpc (4); } /* 12 (3/0) */ /* ADD.B (xxx).L,Dn */ void REGPARAM2 CPUFUNC(op_d039_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpc (6); } /* 16 (4/0) */ /* ADD.B (d16,PC),Dn */ void REGPARAM2 CPUFUNC(op_d03a_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpc (4); } /* 12 (3/0) */ /* ADD.B (d8,PC,Xn),Dn */ void REGPARAM2 CPUFUNC(op_d03b_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; do_cycles_ce000 (2); srca = get_disp_ea_000 (tmppc, get_word_ce000_prefetch (4)); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpc (4); } /* 14 (3/0) */ /* ADD.B #.B,Dn */ void REGPARAM2 CPUFUNC(op_d03c_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = (uae_u8)get_word_ce000_prefetch (4); { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}} m68k_incpc (4); } /* 8 (2/0) */ /* ADD.W Dn,Dn */ void REGPARAM2 CPUFUNC(op_d040_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}} m68k_incpc (2); } /* 4 (1/0) */ /* ADD.W An,Dn */ void REGPARAM2 CPUFUNC(op_d048_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}} m68k_incpc (2); } /* 4 (1/0) */ /* ADD.W (An),Dn */ void REGPARAM2 CPUFUNC(op_d050_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel5116; } {{ uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}} m68k_incpc (2); endlabel5116: ; } /* 8 (2/0) */ /* ADD.W (An)+,Dn */ void REGPARAM2 CPUFUNC(op_d058_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel5117; } {{ uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}} m68k_incpc (2); endlabel5117: ; } /* 8 (2/0) */ /* ADD.W -(An),Dn */ void REGPARAM2 CPUFUNC(op_d060_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; do_cycles_ce000 (2); if (srca & 1) { exception3 (opcode, srca); goto endlabel5118; } {{ uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}} m68k_incpc (2); endlabel5118: ; } /* 10 (2/0) */ /* ADD.W (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_d068_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel5119; } {{ uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}} m68k_incpc (4); endlabel5119: ; } /* 12 (3/0) */ /* ADD.W (d8,An,Xn),Dn */ void REGPARAM2 CPUFUNC(op_d070_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel5120; } {{ uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}} m68k_incpc (4); endlabel5120: ; } /* 14 (3/0) */ /* ADD.W (xxx).W,Dn */ void REGPARAM2 CPUFUNC(op_d078_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel5121; } {{ uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}} m68k_incpc (4); endlabel5121: ; } /* 12 (3/0) */ /* ADD.W (xxx).L,Dn */ void REGPARAM2 CPUFUNC(op_d079_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); if (srca & 1) { exception3 (opcode, srca); goto endlabel5122; } {{ uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}} m68k_incpc (6); endlabel5122: ; } /* 16 (4/0) */ /* ADD.W (d16,PC),Dn */ void REGPARAM2 CPUFUNC(op_d07a_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel5123; } {{ uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}} m68k_incpc (4); endlabel5123: ; } /* 12 (3/0) */ /* ADD.W (d8,PC,Xn),Dn */ void REGPARAM2 CPUFUNC(op_d07b_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; do_cycles_ce000 (2); srca = get_disp_ea_000 (tmppc, get_word_ce000_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel5124; } {{ uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}} m68k_incpc (4); endlabel5124: ; } /* 14 (3/0) */ /* ADD.W #.W,Dn */ void REGPARAM2 CPUFUNC(op_d07c_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}} m68k_incpc (4); } /* 8 (2/0) */ /* ADD.L Dn,Dn */ void REGPARAM2 CPUFUNC(op_d080_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); do_cycles_ce000 (4); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} m68k_incpc (2); } /* 8 (1/0) */ /* ADD.L An,Dn */ void REGPARAM2 CPUFUNC(op_d088_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); do_cycles_ce000 (2); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} m68k_incpc (2); } /* 6 (1/0) */ /* ADD.L (An),Dn */ void REGPARAM2 CPUFUNC(op_d090_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel5128; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); do_cycles_ce000 (2); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}}} m68k_incpc (2); endlabel5128: ; } /* 14 (3/0) */ /* ADD.L (An)+,Dn */ void REGPARAM2 CPUFUNC(op_d098_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel5129; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); m68k_areg (regs, srcreg) += 4; { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); do_cycles_ce000 (2); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}}} m68k_incpc (2); endlabel5129: ; } /* 14 (3/0) */ /* ADD.L -(An),Dn */ void REGPARAM2 CPUFUNC(op_d0a0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; do_cycles_ce000 (2); if (srca & 1) { exception3 (opcode, srca); goto endlabel5130; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); do_cycles_ce000 (2); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}}} m68k_incpc (2); endlabel5130: ; } /* 16 (3/0) */ /* ADD.L (d16,An),Dn */ void REGPARAM2 CPUFUNC(op_d0a8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel5131; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); do_cycles_ce000 (2); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}}} m68k_incpc (4); endlabel5131: ; } /* 18 (4/0) */ /* ADD.L (d8,An,Xn),Dn */ void REGPARAM2 CPUFUNC(op_d0b0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel5132; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); do_cycles_ce000 (2); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}}} m68k_incpc (4); endlabel5132: ; } /* 20 (4/0) */ /* ADD.L (xxx).W,Dn */ void REGPARAM2 CPUFUNC(op_d0b8_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel5133; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); do_cycles_ce000 (2); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}}} m68k_incpc (4); endlabel5133: ; } /* 18 (4/0) */ /* ADD.L (xxx).L,Dn */ void REGPARAM2 CPUFUNC(op_d0b9_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); if (srca & 1) { exception3 (opcode, srca); goto endlabel5134; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); do_cycles_ce000 (2); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}}} m68k_incpc (6); endlabel5134: ; } /* 22 (5/0) */ /* ADD.L (d16,PC),Dn */ void REGPARAM2 CPUFUNC(op_d0ba_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel5135; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); do_cycles_ce000 (2); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}}} m68k_incpc (4); endlabel5135: ; } /* 18 (4/0) */ /* ADD.L (d8,PC,Xn),Dn */ void REGPARAM2 CPUFUNC(op_d0bb_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; do_cycles_ce000 (2); srca = get_disp_ea_000 (tmppc, get_word_ce000_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel5136; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); do_cycles_ce000 (2); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}}} m68k_incpc (4); endlabel5136: ; } /* 20 (4/0) */ /* ADD.L #.L,Dn */ void REGPARAM2 CPUFUNC(op_d0bc_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src; src = get_word_ce000_prefetch (4) << 16; src |= get_word_ce000_prefetch (6); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); do_cycles_ce000 (4); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} m68k_incpc (6); } /* 16 (3/0) */ /* ADDA.W Dn,An */ void REGPARAM2 CPUFUNC(op_d0c0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); do_cycles_ce000 (4); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpc (2); } /* 8 (1/0) */ /* ADDA.W An,An */ void REGPARAM2 CPUFUNC(op_d0c8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); do_cycles_ce000 (4); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpc (2); } /* 8 (1/0) */ /* ADDA.W (An),An */ void REGPARAM2 CPUFUNC(op_d0d0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel5140; } {{ uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); do_cycles_ce000 (4); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}}} m68k_incpc (2); endlabel5140: ; } /* 12 (2/0) */ /* ADDA.W (An)+,An */ void REGPARAM2 CPUFUNC(op_d0d8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel5141; } {{ uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); do_cycles_ce000 (4); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}}} m68k_incpc (2); endlabel5141: ; } /* 12 (2/0) */ /* ADDA.W -(An),An */ void REGPARAM2 CPUFUNC(op_d0e0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; do_cycles_ce000 (2); if (srca & 1) { exception3 (opcode, srca); goto endlabel5142; } {{ uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); do_cycles_ce000 (4); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}}} m68k_incpc (2); endlabel5142: ; } /* 14 (2/0) */ /* ADDA.W (d16,An),An */ void REGPARAM2 CPUFUNC(op_d0e8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel5143; } {{ uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); do_cycles_ce000 (4); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}}} m68k_incpc (4); endlabel5143: ; } /* 16 (3/0) */ /* ADDA.W (d8,An,Xn),An */ void REGPARAM2 CPUFUNC(op_d0f0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel5144; } {{ uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); do_cycles_ce000 (4); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}}} m68k_incpc (4); endlabel5144: ; } /* 18 (3/0) */ /* ADDA.W (xxx).W,An */ void REGPARAM2 CPUFUNC(op_d0f8_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel5145; } {{ uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); do_cycles_ce000 (4); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}}} m68k_incpc (4); endlabel5145: ; } /* 16 (3/0) */ /* ADDA.W (xxx).L,An */ void REGPARAM2 CPUFUNC(op_d0f9_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); if (srca & 1) { exception3 (opcode, srca); goto endlabel5146; } {{ uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); do_cycles_ce000 (4); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}}} m68k_incpc (6); endlabel5146: ; } /* 20 (4/0) */ /* ADDA.W (d16,PC),An */ void REGPARAM2 CPUFUNC(op_d0fa_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel5147; } {{ uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); do_cycles_ce000 (4); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}}} m68k_incpc (4); endlabel5147: ; } /* 16 (3/0) */ /* ADDA.W (d8,PC,Xn),An */ void REGPARAM2 CPUFUNC(op_d0fb_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; do_cycles_ce000 (2); srca = get_disp_ea_000 (tmppc, get_word_ce000_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel5148; } {{ uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); do_cycles_ce000 (4); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}}} m68k_incpc (4); endlabel5148: ; } /* 18 (3/0) */ /* ADDA.W #.W,An */ void REGPARAM2 CPUFUNC(op_d0fc_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_ce000_prefetch (4); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); do_cycles_ce000 (4); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpc (4); } /* 12 (2/0) */ /* ADDX.B Dn,Dn */ void REGPARAM2 CPUFUNC(op_d100_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 newv = dst + src + (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgo) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}} m68k_incpc (2); } /* 4 (1/0) */ /* ADDX.B -(An),-(An) */ void REGPARAM2 CPUFUNC(op_d108_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; { do_cycles_ce000 (2); { uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 newv = dst + src + (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgo) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (2); } /* 18 (3/1) */ /* ADD.B Dn,(An) */ void REGPARAM2 CPUFUNC(op_d110_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (2); } /* 12 (2/1) */ /* ADD.B Dn,(An)+ */ void REGPARAM2 CPUFUNC(op_d118_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (2); } /* 12 (2/1) */ /* ADD.B Dn,-(An) */ void REGPARAM2 CPUFUNC(op_d120_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; do_cycles_ce000 (2); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (2); } /* 14 (2/1) */ /* ADD.B Dn,(d16,An) */ void REGPARAM2 CPUFUNC(op_d128_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 dst = x_get_byte (dsta); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (4); } /* 16 (3/1) */ /* ADD.B Dn,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_d130_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (4)); { uae_s8 dst = x_get_byte (dsta); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (4); } /* 18 (3/1) */ /* ADD.B Dn,(xxx).W */ void REGPARAM2 CPUFUNC(op_d138_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); { uae_s8 dst = x_get_byte (dsta); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (4); } /* 16 (3/1) */ /* ADD.B Dn,(xxx).L */ void REGPARAM2 CPUFUNC(op_d139_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = get_word_ce000_prefetch (4) << 16; dsta |= get_word_ce000_prefetch (6); { uae_s8 dst = x_get_byte (dsta); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (6); } /* 20 (4/1) */ /* ADDX.W Dn,Dn */ void REGPARAM2 CPUFUNC(op_d140_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 newv = dst + src + (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgo) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}} m68k_incpc (2); } /* 4 (1/0) */ /* ADDX.W -(An),-(An) */ void REGPARAM2 CPUFUNC(op_d148_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; { do_cycles_ce000 (2); { uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; if (srca & 1) { exception3 (opcode, srca); goto endlabel5160; } {{ uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; if (dsta & 1) { exception3 (opcode, dsta); goto endlabel5160; } {{ uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 newv = dst + src + (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgo) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); x_put_word (dsta, newv); }}}}}}}}} m68k_incpc (2); endlabel5160: ; } /* 18 (3/1) */ /* ADD.W Dn,(An) */ void REGPARAM2 CPUFUNC(op_d150_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel5161; } {{ uae_s16 dst = x_get_word (dsta); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}}} m68k_incpc (2); endlabel5161: ; } /* 12 (2/1) */ /* ADD.W Dn,(An)+ */ void REGPARAM2 CPUFUNC(op_d158_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel5162; } {{ uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) += 2; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}}} m68k_incpc (2); endlabel5162: ; } /* 12 (2/1) */ /* ADD.W Dn,-(An) */ void REGPARAM2 CPUFUNC(op_d160_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; do_cycles_ce000 (2); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel5163; } {{ uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}}} m68k_incpc (2); endlabel5163: ; } /* 14 (2/1) */ /* ADD.W Dn,(d16,An) */ void REGPARAM2 CPUFUNC(op_d168_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel5164; } {{ uae_s16 dst = x_get_word (dsta); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}}} m68k_incpc (4); endlabel5164: ; } /* 16 (3/1) */ /* ADD.W Dn,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_d170_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (4)); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel5165; } {{ uae_s16 dst = x_get_word (dsta); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}}} m68k_incpc (4); endlabel5165: ; } /* 18 (3/1) */ /* ADD.W Dn,(xxx).W */ void REGPARAM2 CPUFUNC(op_d178_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel5166; } {{ uae_s16 dst = x_get_word (dsta); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}}} m68k_incpc (4); endlabel5166: ; } /* 16 (3/1) */ /* ADD.W Dn,(xxx).L */ void REGPARAM2 CPUFUNC(op_d179_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = get_word_ce000_prefetch (4) << 16; dsta |= get_word_ce000_prefetch (6); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel5167; } {{ uae_s16 dst = x_get_word (dsta); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}}} m68k_incpc (6); endlabel5167: ; } /* 20 (4/1) */ /* ADDX.L Dn,Dn */ void REGPARAM2 CPUFUNC(op_d180_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); do_cycles_ce000 (4); { uae_u32 newv = dst + src + (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgo) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); }}}}} m68k_incpc (2); } /* 8 (1/0) */ /* ADDX.L -(An),-(An) */ void REGPARAM2 CPUFUNC(op_d188_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; { do_cycles_ce000 (2); { uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; if (srca & 1) { exception3 (opcode, srca); goto endlabel5169; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; if (dsta & 1) { exception3 (opcode, dsta); goto endlabel5169; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 newv = dst + src + (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgo) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); x_put_word (dsta, newv >> 16); x_put_word (dsta + 2, newv); }}}}}}}}} m68k_incpc (2); endlabel5169: ; } /* 30 (5/2) */ /* ADD.L Dn,(An) */ void REGPARAM2 CPUFUNC(op_d190_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel5170; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta + 2, newv); x_put_word (dsta, newv >> 16); }}}}}}}} m68k_incpc (2); endlabel5170: ; } /* 20 (3/2) */ /* ADD.L Dn,(An)+ */ void REGPARAM2 CPUFUNC(op_d198_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel5171; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); m68k_areg (regs, dstreg) += 4; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta + 2, newv); x_put_word (dsta, newv >> 16); }}}}}}}} m68k_incpc (2); endlabel5171: ; } /* 20 (3/2) */ /* ADD.L Dn,-(An) */ void REGPARAM2 CPUFUNC(op_d1a0_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; do_cycles_ce000 (2); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel5172; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta + 2, newv); x_put_word (dsta, newv >> 16); }}}}}}}} m68k_incpc (2); endlabel5172: ; } /* 22 (3/2) */ /* ADD.L Dn,(d16,An) */ void REGPARAM2 CPUFUNC(op_d1a8_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel5173; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta + 2, newv); x_put_word (dsta, newv >> 16); }}}}}}}} m68k_incpc (4); endlabel5173: ; } /* 24 (4/2) */ /* ADD.L Dn,(d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_d1b0_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; do_cycles_ce000 (2); dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_ce000_prefetch (4)); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel5174; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta + 2, newv); x_put_word (dsta, newv >> 16); }}}}}}}} m68k_incpc (4); endlabel5174: ; } /* 26 (4/2) */ /* ADD.L Dn,(xxx).W */ void REGPARAM2 CPUFUNC(op_d1b8_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel5175; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta + 2, newv); x_put_word (dsta, newv >> 16); }}}}}}}} m68k_incpc (4); endlabel5175: ; } /* 24 (4/2) */ /* ADD.L Dn,(xxx).L */ void REGPARAM2 CPUFUNC(op_d1b9_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = get_word_ce000_prefetch (4) << 16; dsta |= get_word_ce000_prefetch (6); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel5176; } {{ uae_s32 dst = x_get_word (dsta) << 16; dst |= x_get_word (dsta + 2); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta + 2, newv); x_put_word (dsta, newv >> 16); }}}}}}}} m68k_incpc (6); endlabel5176: ; } /* 28 (5/2) */ /* ADDA.L Dn,An */ void REGPARAM2 CPUFUNC(op_d1c0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); do_cycles_ce000 (4); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpc (2); } /* 8 (1/0) */ /* ADDA.L An,An */ void REGPARAM2 CPUFUNC(op_d1c8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); do_cycles_ce000 (2); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpc (2); } /* 6 (1/0) */ /* ADDA.L (An),An */ void REGPARAM2 CPUFUNC(op_d1d0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel5179; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); do_cycles_ce000 (2); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}}} m68k_incpc (2); endlabel5179: ; } /* 14 (3/0) */ /* ADDA.L (An)+,An */ void REGPARAM2 CPUFUNC(op_d1d8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel5180; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); m68k_areg (regs, srcreg) += 4; { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); do_cycles_ce000 (2); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}}} m68k_incpc (2); endlabel5180: ; } /* 14 (3/0) */ /* ADDA.L -(An),An */ void REGPARAM2 CPUFUNC(op_d1e0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; do_cycles_ce000 (2); if (srca & 1) { exception3 (opcode, srca); goto endlabel5181; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); do_cycles_ce000 (2); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}}} m68k_incpc (2); endlabel5181: ; } /* 16 (3/0) */ /* ADDA.L (d16,An),An */ void REGPARAM2 CPUFUNC(op_d1e8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel5182; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); do_cycles_ce000 (2); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}}} m68k_incpc (4); endlabel5182: ; } /* 18 (4/0) */ /* ADDA.L (d8,An,Xn),An */ void REGPARAM2 CPUFUNC(op_d1f0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; do_cycles_ce000 (2); srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel5183; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); do_cycles_ce000 (2); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}}} m68k_incpc (4); endlabel5183: ; } /* 20 (4/0) */ /* ADDA.L (xxx).W,An */ void REGPARAM2 CPUFUNC(op_d1f8_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel5184; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); do_cycles_ce000 (2); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}}} m68k_incpc (4); endlabel5184: ; } /* 18 (4/0) */ /* ADDA.L (xxx).L,An */ void REGPARAM2 CPUFUNC(op_d1f9_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_word_ce000_prefetch (4) << 16; srca |= get_word_ce000_prefetch (6); if (srca & 1) { exception3 (opcode, srca); goto endlabel5185; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); do_cycles_ce000 (2); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}}} m68k_incpc (6); endlabel5185: ; } /* 22 (5/0) */ /* ADDA.L (d16,PC),An */ void REGPARAM2 CPUFUNC(op_d1fa_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel5186; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); do_cycles_ce000 (2); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}}} m68k_incpc (4); endlabel5186: ; } /* 18 (4/0) */ /* ADDA.L (d8,PC,Xn),An */ void REGPARAM2 CPUFUNC(op_d1fb_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; do_cycles_ce000 (2); srca = get_disp_ea_000 (tmppc, get_word_ce000_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel5187; } {{ uae_s32 src = x_get_word (srca) << 16; src |= x_get_word (srca + 2); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); do_cycles_ce000 (2); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}}} m68k_incpc (4); endlabel5187: ; } /* 20 (4/0) */ /* ADDA.L #.L,An */ void REGPARAM2 CPUFUNC(op_d1fc_12)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src; src = get_word_ce000_prefetch (4) << 16; src |= get_word_ce000_prefetch (6); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); do_cycles_ce000 (4); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpc (6); } /* 16 (3/0) */ /* ASRQ.B #,Dn */ void REGPARAM2 CPUFUNC(op_e000_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s8 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 val = (uae_u8)data; uae_u32 sign = (0x80 & val) >> 7; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 8) { val = 0xff & (uae_u32)-sign; SET_CFLG (sign); COPY_CARRY (); } else { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; val |= (0xff << (8 - cnt)) & (uae_u32)-sign; val &= 0xff; } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); { int cycles = 2; cycles += 2 * ccnt; if (cycles > 0) do_cycles_ce000 (cycles); } m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); } /* 6+ (1/0) */ /* LSRQ.B #,Dn */ void REGPARAM2 CPUFUNC(op_e008_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s8 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 8) { SET_CFLG ((cnt == 8) & (val >> 7)); COPY_CARRY (); val = 0; } else { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); { int cycles = 2; cycles += 2 * ccnt; if (cycles > 0) do_cycles_ce000 (cycles); } m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); } /* 6+ (1/0) */ /* ROXRQ.B #,Dn */ void REGPARAM2 CPUFUNC(op_e010_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s8 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { cnt--; { uae_u32 carry; uae_u32 hival = (val << 1) | GET_XFLG (); hival <<= (7 - cnt); val >>= cnt; carry = val & 1; val >>= 1; val |= hival; SET_XFLG (carry); val &= 0xff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); { int cycles = 2; cycles += 2 * ccnt; if (cycles > 0) do_cycles_ce000 (cycles); } m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); } /* 6+ (1/0) */ /* RORQ.B #,Dn */ void REGPARAM2 CPUFUNC(op_e018_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s8 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { uae_u32 hival; cnt &= 7; hival = val << (8 - cnt); val >>= cnt; val |= hival; val &= 0xff; SET_CFLG ((val & 0x80) >> 7); } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); { int cycles = 2; cycles += 2 * ccnt; if (cycles > 0) do_cycles_ce000 (cycles); } m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); } /* 6+ (1/0) */ /* ASR.B Dn,Dn */ void REGPARAM2 CPUFUNC(op_e020_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 cnt = m68k_dreg (regs, srcreg); { uae_s8 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 val = (uae_u8)data; uae_u32 sign = (0x80 & val) >> 7; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 8) { val = 0xff & (uae_u32)-sign; SET_CFLG (sign); COPY_CARRY (); } else if (cnt > 0) { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; val |= (0xff << (8 - cnt)) & (uae_u32)-sign; val &= 0xff; } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); { int cycles = 2; cycles += 2 * ccnt; if (cycles > 0) do_cycles_ce000 (cycles); } m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); } /* 6+ (1/0) */ /* LSR.B Dn,Dn */ void REGPARAM2 CPUFUNC(op_e028_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 cnt = m68k_dreg (regs, srcreg); { uae_s8 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 8) { SET_CFLG ((cnt == 8) & (val >> 7)); COPY_CARRY (); val = 0; } else if (cnt > 0) { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); { int cycles = 2; cycles += 2 * ccnt; if (cycles > 0) do_cycles_ce000 (cycles); } m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); } /* 6+ (1/0) */ /* ROXR.B Dn,Dn */ void REGPARAM2 CPUFUNC(op_e030_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 cnt = m68k_dreg (regs, srcreg); { uae_s8 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 36) cnt -= 36; if (cnt >= 18) cnt -= 18; if (cnt >= 9) cnt -= 9; if (cnt > 0) { cnt--; { uae_u32 carry; uae_u32 hival = (val << 1) | GET_XFLG (); hival <<= (7 - cnt); val >>= cnt; carry = val & 1; val >>= 1; val |= hival; SET_XFLG (carry); val &= 0xff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); { int cycles = 2; cycles += 2 * ccnt; if (cycles > 0) do_cycles_ce000 (cycles); } m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); } /* 6+ (1/0) */ #endif #ifdef PART_8 /* ROR.B Dn,Dn */ void REGPARAM2 CPUFUNC(op_e038_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 cnt = m68k_dreg (regs, srcreg); { uae_s8 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt > 0) { uae_u32 hival; cnt &= 7; hival = val << (8 - cnt); val >>= cnt; val |= hival; val &= 0xff; SET_CFLG ((val & 0x80) >> 7); } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); { int cycles = 2; cycles += 2 * ccnt; if (cycles > 0) do_cycles_ce000 (cycles); } m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); } /* 6+ (1/0) */ /* ASRQ.W #,Dn */ void REGPARAM2 CPUFUNC(op_e040_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s16 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 val = (uae_u16)data; uae_u32 sign = (0x8000 & val) >> 15; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 16) { val = 0xffff & (uae_u32)-sign; SET_CFLG (sign); COPY_CARRY (); } else { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; val |= (0xffff << (16 - cnt)) & (uae_u32)-sign; val &= 0xffff; } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); { int cycles = 2; cycles += 2 * ccnt; if (cycles > 0) do_cycles_ce000 (cycles); } m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpc (2); } /* 6+ (1/0) */ /* LSRQ.W #,Dn */ void REGPARAM2 CPUFUNC(op_e048_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s16 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 16) { SET_CFLG ((cnt == 16) & (val >> 15)); COPY_CARRY (); val = 0; } else { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); { int cycles = 2; cycles += 2 * ccnt; if (cycles > 0) do_cycles_ce000 (cycles); } m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpc (2); } /* 6+ (1/0) */ /* ROXRQ.W #,Dn */ void REGPARAM2 CPUFUNC(op_e050_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s16 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { cnt--; { uae_u32 carry; uae_u32 hival = (val << 1) | GET_XFLG (); hival <<= (15 - cnt); val >>= cnt; carry = val & 1; val >>= 1; val |= hival; SET_XFLG (carry); val &= 0xffff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); { int cycles = 2; cycles += 2 * ccnt; if (cycles > 0) do_cycles_ce000 (cycles); } m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpc (2); } /* 6+ (1/0) */ /* RORQ.W #,Dn */ void REGPARAM2 CPUFUNC(op_e058_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s16 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { uae_u32 hival; cnt &= 15; hival = val << (16 - cnt); val >>= cnt; val |= hival; val &= 0xffff; SET_CFLG ((val & 0x8000) >> 15); } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); { int cycles = 2; cycles += 2 * ccnt; if (cycles > 0) do_cycles_ce000 (cycles); } m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpc (2); } /* 6+ (1/0) */ /* ASR.W Dn,Dn */ void REGPARAM2 CPUFUNC(op_e060_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 cnt = m68k_dreg (regs, srcreg); { uae_s16 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 val = (uae_u16)data; uae_u32 sign = (0x8000 & val) >> 15; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 16) { val = 0xffff & (uae_u32)-sign; SET_CFLG (sign); COPY_CARRY (); } else if (cnt > 0) { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; val |= (0xffff << (16 - cnt)) & (uae_u32)-sign; val &= 0xffff; } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); { int cycles = 2; cycles += 2 * ccnt; if (cycles > 0) do_cycles_ce000 (cycles); } m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpc (2); } /* 6+ (1/0) */ /* LSR.W Dn,Dn */ void REGPARAM2 CPUFUNC(op_e068_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 cnt = m68k_dreg (regs, srcreg); { uae_s16 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 16) { SET_CFLG ((cnt == 16) & (val >> 15)); COPY_CARRY (); val = 0; } else if (cnt > 0) { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); { int cycles = 2; cycles += 2 * ccnt; if (cycles > 0) do_cycles_ce000 (cycles); } m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpc (2); } /* 6+ (1/0) */ /* ROXR.W Dn,Dn */ void REGPARAM2 CPUFUNC(op_e070_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 cnt = m68k_dreg (regs, srcreg); { uae_s16 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 34) cnt -= 34; if (cnt >= 17) cnt -= 17; if (cnt > 0) { cnt--; { uae_u32 carry; uae_u32 hival = (val << 1) | GET_XFLG (); hival <<= (15 - cnt); val >>= cnt; carry = val & 1; val >>= 1; val |= hival; SET_XFLG (carry); val &= 0xffff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); { int cycles = 2; cycles += 2 * ccnt; if (cycles > 0) do_cycles_ce000 (cycles); } m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpc (2); } /* 6+ (1/0) */ /* ROR.W Dn,Dn */ void REGPARAM2 CPUFUNC(op_e078_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 cnt = m68k_dreg (regs, srcreg); { uae_s16 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt > 0) { uae_u32 hival; cnt &= 15; hival = val << (16 - cnt); val >>= cnt; val |= hival; val &= 0xffff; SET_CFLG ((val & 0x8000) >> 15); } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); { int cycles = 2; cycles += 2 * ccnt; if (cycles > 0) do_cycles_ce000 (cycles); } m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpc (2); } /* 6+ (1/0) */ /* ASRQ.L #,Dn */ void REGPARAM2 CPUFUNC(op_e080_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s32 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 val = data; uae_u32 sign = (0x80000000 & val) >> 31; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 32) { val = 0xffffffff & (uae_u32)-sign; SET_CFLG (sign); COPY_CARRY (); } else { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; val |= (0xffffffff << (32 - cnt)) & (uae_u32)-sign; val &= 0xffffffff; } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); { int cycles = 4; cycles += 2 * ccnt; if (cycles > 0) do_cycles_ce000 (cycles); } m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpc (2); } /* 8+ (1/0) */ /* LSRQ.L #,Dn */ void REGPARAM2 CPUFUNC(op_e088_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s32 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 32) { SET_CFLG ((cnt == 32) & (val >> 31)); COPY_CARRY (); val = 0; } else { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); { int cycles = 4; cycles += 2 * ccnt; if (cycles > 0) do_cycles_ce000 (cycles); } m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpc (2); } /* 8+ (1/0) */ /* ROXRQ.L #,Dn */ void REGPARAM2 CPUFUNC(op_e090_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s32 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { cnt--; { uae_u32 carry; uae_u32 hival = (val << 1) | GET_XFLG (); hival <<= (31 - cnt); val >>= cnt; carry = val & 1; val >>= 1; val |= hival; SET_XFLG (carry); val &= 0xffffffff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); { int cycles = 4; cycles += 2 * ccnt; if (cycles > 0) do_cycles_ce000 (cycles); } m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpc (2); } /* 8+ (1/0) */ /* RORQ.L #,Dn */ void REGPARAM2 CPUFUNC(op_e098_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s32 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { uae_u32 hival; cnt &= 31; hival = val << (32 - cnt); val >>= cnt; val |= hival; val &= 0xffffffff; SET_CFLG ((val & 0x80000000) >> 31); } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); { int cycles = 4; cycles += 2 * ccnt; if (cycles > 0) do_cycles_ce000 (cycles); } m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpc (2); } /* 8+ (1/0) */ /* ASR.L Dn,Dn */ void REGPARAM2 CPUFUNC(op_e0a0_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 cnt = m68k_dreg (regs, srcreg); { uae_s32 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 val = data; uae_u32 sign = (0x80000000 & val) >> 31; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 32) { val = 0xffffffff & (uae_u32)-sign; SET_CFLG (sign); COPY_CARRY (); } else if (cnt > 0) { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; val |= (0xffffffff << (32 - cnt)) & (uae_u32)-sign; val &= 0xffffffff; } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); { int cycles = 4; cycles += 2 * ccnt; if (cycles > 0) do_cycles_ce000 (cycles); } m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpc (2); } /* 8+ (1/0) */ /* LSR.L Dn,Dn */ void REGPARAM2 CPUFUNC(op_e0a8_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 cnt = m68k_dreg (regs, srcreg); { uae_s32 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 32) { SET_CFLG ((cnt == 32) & (val >> 31)); COPY_CARRY (); val = 0; } else if (cnt > 0) { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); { int cycles = 4; cycles += 2 * ccnt; if (cycles > 0) do_cycles_ce000 (cycles); } m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpc (2); } /* 8+ (1/0) */ /* ROXR.L Dn,Dn */ void REGPARAM2 CPUFUNC(op_e0b0_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 cnt = m68k_dreg (regs, srcreg); { uae_s32 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 33) cnt -= 33; if (cnt > 0) { cnt--; { uae_u32 carry; uae_u32 hival = (val << 1) | GET_XFLG (); hival <<= (31 - cnt); val >>= cnt; carry = val & 1; val >>= 1; val |= hival; SET_XFLG (carry); val &= 0xffffffff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); { int cycles = 4; cycles += 2 * ccnt; if (cycles > 0) do_cycles_ce000 (cycles); } m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpc (2); } /* 8+ (1/0) */ /* ROR.L Dn,Dn */ void REGPARAM2 CPUFUNC(op_e0b8_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 cnt = m68k_dreg (regs, srcreg); { uae_s32 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt > 0) { uae_u32 hival; cnt &= 31; hival = val << (32 - cnt); val >>= cnt; val |= hival; val &= 0xffffffff; SET_CFLG ((val & 0x80000000) >> 31); } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); { int cycles = 4; cycles += 2 * ccnt; if (cycles > 0) do_cycles_ce000 (cycles); } m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpc (2); } /* 8+ (1/0) */ /* ASRW.W (An) */ void REGPARAM2 CPUFUNC(op_e0d0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel5213; } {{ uae_s16 data = x_get_word (dataa); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 cflg = val & 1; val = (val >> 1) | sign; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (cflg); COPY_CARRY (); x_put_word (dataa, val); }}}}} m68k_incpc (2); endlabel5213: ; } /* 12 (2/1) */ /* ASRW.W (An)+ */ void REGPARAM2 CPUFUNC(op_e0d8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel5214; } {{ uae_s16 data = x_get_word (dataa); m68k_areg (regs, srcreg) += 2; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 cflg = val & 1; val = (val >> 1) | sign; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (cflg); COPY_CARRY (); x_put_word (dataa, val); }}}}} m68k_incpc (2); endlabel5214: ; } /* 12 (2/1) */ /* ASRW.W -(An) */ void REGPARAM2 CPUFUNC(op_e0e0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; dataa = m68k_areg (regs, srcreg) - 2; do_cycles_ce000 (2); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel5215; } {{ uae_s16 data = x_get_word (dataa); m68k_areg (regs, srcreg) = dataa; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 cflg = val & 1; val = (val >> 1) | sign; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (cflg); COPY_CARRY (); x_put_word (dataa, val); }}}}} m68k_incpc (2); endlabel5215: ; } /* 14 (2/1) */ /* ASRW.W (d16,An) */ void REGPARAM2 CPUFUNC(op_e0e8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel5216; } {{ uae_s16 data = x_get_word (dataa); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 cflg = val & 1; val = (val >> 1) | sign; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (cflg); COPY_CARRY (); x_put_word (dataa, val); }}}}} m68k_incpc (4); endlabel5216: ; } /* 16 (3/1) */ /* ASRW.W (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_e0f0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; do_cycles_ce000 (2); dataa = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel5217; } {{ uae_s16 data = x_get_word (dataa); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 cflg = val & 1; val = (val >> 1) | sign; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (cflg); COPY_CARRY (); x_put_word (dataa, val); }}}}} m68k_incpc (4); endlabel5217: ; } /* 18 (3/1) */ /* ASRW.W (xxx).W */ void REGPARAM2 CPUFUNC(op_e0f8_12)(uae_u32 opcode) { {{ uaecptr dataa = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel5218; } {{ uae_s16 data = x_get_word (dataa); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 cflg = val & 1; val = (val >> 1) | sign; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (cflg); COPY_CARRY (); x_put_word (dataa, val); }}}}} m68k_incpc (4); endlabel5218: ; } /* 16 (3/1) */ /* ASRW.W (xxx).L */ void REGPARAM2 CPUFUNC(op_e0f9_12)(uae_u32 opcode) { {{ uaecptr dataa; dataa = get_word_ce000_prefetch (4) << 16; dataa |= get_word_ce000_prefetch (6); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel5219; } {{ uae_s16 data = x_get_word (dataa); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 cflg = val & 1; val = (val >> 1) | sign; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (cflg); COPY_CARRY (); x_put_word (dataa, val); }}}}} m68k_incpc (6); endlabel5219: ; } /* 20 (4/1) */ /* ASLQ.B #,Dn */ void REGPARAM2 CPUFUNC(op_e100_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s8 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 8) { SET_VFLG (val != 0); SET_CFLG (cnt == 8 ? val & 1 : 0); COPY_CARRY (); val = 0; } else { uae_u32 mask = (0xff << (7 - cnt)) & 0xff; SET_VFLG ((val & mask) != mask && (val & mask) != 0); val <<= cnt - 1; SET_CFLG ((val & 0x80) >> 7); COPY_CARRY (); val <<= 1; val &= 0xff; } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); { int cycles = 2; cycles += 2 * ccnt; if (cycles > 0) do_cycles_ce000 (cycles); } m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); } /* 6+ (1/0) */ /* LSLQ.B #,Dn */ void REGPARAM2 CPUFUNC(op_e108_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s8 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 8) { SET_CFLG (cnt == 8 ? val & 1 : 0); COPY_CARRY (); val = 0; } else { val <<= (cnt - 1); SET_CFLG ((val & 0x80) >> 7); COPY_CARRY (); val <<= 1; val &= 0xff; } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); { int cycles = 2; cycles += 2 * ccnt; if (cycles > 0) do_cycles_ce000 (cycles); } m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); } /* 6+ (1/0) */ /* ROXLQ.B #,Dn */ void REGPARAM2 CPUFUNC(op_e110_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s8 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { cnt--; { uae_u32 carry; uae_u32 loval = val >> (7 - cnt); carry = loval & 1; val = (((val << 1) | GET_XFLG ()) << cnt) | (loval >> 1); SET_XFLG (carry); val &= 0xff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); { int cycles = 2; cycles += 2 * ccnt; if (cycles > 0) do_cycles_ce000 (cycles); } m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); } /* 6+ (1/0) */ /* ROLQ.B #,Dn */ void REGPARAM2 CPUFUNC(op_e118_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s8 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { uae_u32 loval; cnt &= 7; loval = val >> (8 - cnt); val <<= cnt; val |= loval; val &= 0xff; SET_CFLG (val & 1); } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); { int cycles = 2; cycles += 2 * ccnt; if (cycles > 0) do_cycles_ce000 (cycles); } m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); } /* 6+ (1/0) */ /* ASL.B Dn,Dn */ void REGPARAM2 CPUFUNC(op_e120_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 cnt = m68k_dreg (regs, srcreg); { uae_s8 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 8) { SET_VFLG (val != 0); SET_CFLG (cnt == 8 ? val & 1 : 0); COPY_CARRY (); val = 0; } else if (cnt > 0) { uae_u32 mask = (0xff << (7 - cnt)) & 0xff; SET_VFLG ((val & mask) != mask && (val & mask) != 0); val <<= cnt - 1; SET_CFLG ((val & 0x80) >> 7); COPY_CARRY (); val <<= 1; val &= 0xff; } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); { int cycles = 2; cycles += 2 * ccnt; if (cycles > 0) do_cycles_ce000 (cycles); } m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); } /* 6+ (1/0) */ /* LSL.B Dn,Dn */ void REGPARAM2 CPUFUNC(op_e128_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 cnt = m68k_dreg (regs, srcreg); { uae_s8 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 8) { SET_CFLG (cnt == 8 ? val & 1 : 0); COPY_CARRY (); val = 0; } else if (cnt > 0) { val <<= (cnt - 1); SET_CFLG ((val & 0x80) >> 7); COPY_CARRY (); val <<= 1; val &= 0xff; } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); { int cycles = 2; cycles += 2 * ccnt; if (cycles > 0) do_cycles_ce000 (cycles); } m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); } /* 6+ (1/0) */ /* ROXL.B Dn,Dn */ void REGPARAM2 CPUFUNC(op_e130_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 cnt = m68k_dreg (regs, srcreg); { uae_s8 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 36) cnt -= 36; if (cnt >= 18) cnt -= 18; if (cnt >= 9) cnt -= 9; if (cnt > 0) { cnt--; { uae_u32 carry; uae_u32 loval = val >> (7 - cnt); carry = loval & 1; val = (((val << 1) | GET_XFLG ()) << cnt) | (loval >> 1); SET_XFLG (carry); val &= 0xff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); { int cycles = 2; cycles += 2 * ccnt; if (cycles > 0) do_cycles_ce000 (cycles); } m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); } /* 6+ (1/0) */ /* ROL.B Dn,Dn */ void REGPARAM2 CPUFUNC(op_e138_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 cnt = m68k_dreg (regs, srcreg); { uae_s8 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt > 0) { uae_u32 loval; cnt &= 7; loval = val >> (8 - cnt); val <<= cnt; val |= loval; val &= 0xff; SET_CFLG (val & 1); } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); { int cycles = 2; cycles += 2 * ccnt; if (cycles > 0) do_cycles_ce000 (cycles); } m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); } /* 6+ (1/0) */ /* ASLQ.W #,Dn */ void REGPARAM2 CPUFUNC(op_e140_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s16 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 16) { SET_VFLG (val != 0); SET_CFLG (cnt == 16 ? val & 1 : 0); COPY_CARRY (); val = 0; } else { uae_u32 mask = (0xffff << (15 - cnt)) & 0xffff; SET_VFLG ((val & mask) != mask && (val & mask) != 0); val <<= cnt - 1; SET_CFLG ((val & 0x8000) >> 15); COPY_CARRY (); val <<= 1; val &= 0xffff; } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); { int cycles = 2; cycles += 2 * ccnt; if (cycles > 0) do_cycles_ce000 (cycles); } m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpc (2); } /* 6+ (1/0) */ /* LSLQ.W #,Dn */ void REGPARAM2 CPUFUNC(op_e148_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s16 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 16) { SET_CFLG (cnt == 16 ? val & 1 : 0); COPY_CARRY (); val = 0; } else { val <<= (cnt - 1); SET_CFLG ((val & 0x8000) >> 15); COPY_CARRY (); val <<= 1; val &= 0xffff; } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); { int cycles = 2; cycles += 2 * ccnt; if (cycles > 0) do_cycles_ce000 (cycles); } m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpc (2); } /* 6+ (1/0) */ /* ROXLQ.W #,Dn */ void REGPARAM2 CPUFUNC(op_e150_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s16 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { cnt--; { uae_u32 carry; uae_u32 loval = val >> (15 - cnt); carry = loval & 1; val = (((val << 1) | GET_XFLG ()) << cnt) | (loval >> 1); SET_XFLG (carry); val &= 0xffff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); { int cycles = 2; cycles += 2 * ccnt; if (cycles > 0) do_cycles_ce000 (cycles); } m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpc (2); } /* 6+ (1/0) */ /* ROLQ.W #,Dn */ void REGPARAM2 CPUFUNC(op_e158_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s16 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { uae_u32 loval; cnt &= 15; loval = val >> (16 - cnt); val <<= cnt; val |= loval; val &= 0xffff; SET_CFLG (val & 1); } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); { int cycles = 2; cycles += 2 * ccnt; if (cycles > 0) do_cycles_ce000 (cycles); } m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpc (2); } /* 6+ (1/0) */ /* ASL.W Dn,Dn */ void REGPARAM2 CPUFUNC(op_e160_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 cnt = m68k_dreg (regs, srcreg); { uae_s16 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 16) { SET_VFLG (val != 0); SET_CFLG (cnt == 16 ? val & 1 : 0); COPY_CARRY (); val = 0; } else if (cnt > 0) { uae_u32 mask = (0xffff << (15 - cnt)) & 0xffff; SET_VFLG ((val & mask) != mask && (val & mask) != 0); val <<= cnt - 1; SET_CFLG ((val & 0x8000) >> 15); COPY_CARRY (); val <<= 1; val &= 0xffff; } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); { int cycles = 2; cycles += 2 * ccnt; if (cycles > 0) do_cycles_ce000 (cycles); } m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpc (2); } /* 6+ (1/0) */ /* LSL.W Dn,Dn */ void REGPARAM2 CPUFUNC(op_e168_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 cnt = m68k_dreg (regs, srcreg); { uae_s16 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 16) { SET_CFLG (cnt == 16 ? val & 1 : 0); COPY_CARRY (); val = 0; } else if (cnt > 0) { val <<= (cnt - 1); SET_CFLG ((val & 0x8000) >> 15); COPY_CARRY (); val <<= 1; val &= 0xffff; } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); { int cycles = 2; cycles += 2 * ccnt; if (cycles > 0) do_cycles_ce000 (cycles); } m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpc (2); } /* 6+ (1/0) */ /* ROXL.W Dn,Dn */ void REGPARAM2 CPUFUNC(op_e170_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 cnt = m68k_dreg (regs, srcreg); { uae_s16 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 34) cnt -= 34; if (cnt >= 17) cnt -= 17; if (cnt > 0) { cnt--; { uae_u32 carry; uae_u32 loval = val >> (15 - cnt); carry = loval & 1; val = (((val << 1) | GET_XFLG ()) << cnt) | (loval >> 1); SET_XFLG (carry); val &= 0xffff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); { int cycles = 2; cycles += 2 * ccnt; if (cycles > 0) do_cycles_ce000 (cycles); } m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpc (2); } /* 6+ (1/0) */ /* ROL.W Dn,Dn */ void REGPARAM2 CPUFUNC(op_e178_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 cnt = m68k_dreg (regs, srcreg); { uae_s16 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt > 0) { uae_u32 loval; cnt &= 15; loval = val >> (16 - cnt); val <<= cnt; val |= loval; val &= 0xffff; SET_CFLG (val & 1); } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); { int cycles = 2; cycles += 2 * ccnt; if (cycles > 0) do_cycles_ce000 (cycles); } m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpc (2); } /* 6+ (1/0) */ /* ASLQ.L #,Dn */ void REGPARAM2 CPUFUNC(op_e180_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s32 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 32) { SET_VFLG (val != 0); SET_CFLG (cnt == 32 ? val & 1 : 0); COPY_CARRY (); val = 0; } else { uae_u32 mask = (0xffffffff << (31 - cnt)) & 0xffffffff; SET_VFLG ((val & mask) != mask && (val & mask) != 0); val <<= cnt - 1; SET_CFLG ((val & 0x80000000) >> 31); COPY_CARRY (); val <<= 1; val &= 0xffffffff; } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); { int cycles = 4; cycles += 2 * ccnt; if (cycles > 0) do_cycles_ce000 (cycles); } m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpc (2); } /* 8+ (1/0) */ /* LSLQ.L #,Dn */ void REGPARAM2 CPUFUNC(op_e188_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s32 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 32) { SET_CFLG (cnt == 32 ? val & 1 : 0); COPY_CARRY (); val = 0; } else { val <<= (cnt - 1); SET_CFLG ((val & 0x80000000) >> 31); COPY_CARRY (); val <<= 1; val &= 0xffffffff; } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); { int cycles = 4; cycles += 2 * ccnt; if (cycles > 0) do_cycles_ce000 (cycles); } m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpc (2); } /* 8+ (1/0) */ /* ROXLQ.L #,Dn */ void REGPARAM2 CPUFUNC(op_e190_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s32 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { cnt--; { uae_u32 carry; uae_u32 loval = val >> (31 - cnt); carry = loval & 1; val = (((val << 1) | GET_XFLG ()) << cnt) | (loval >> 1); SET_XFLG (carry); val &= 0xffffffff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); { int cycles = 4; cycles += 2 * ccnt; if (cycles > 0) do_cycles_ce000 (cycles); } m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpc (2); } /* 8+ (1/0) */ /* ROLQ.L #,Dn */ void REGPARAM2 CPUFUNC(op_e198_12)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s32 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { uae_u32 loval; cnt &= 31; loval = val >> (32 - cnt); val <<= cnt; val |= loval; val &= 0xffffffff; SET_CFLG (val & 1); } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); { int cycles = 4; cycles += 2 * ccnt; if (cycles > 0) do_cycles_ce000 (cycles); } m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpc (2); } /* 8+ (1/0) */ /* ASL.L Dn,Dn */ void REGPARAM2 CPUFUNC(op_e1a0_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 cnt = m68k_dreg (regs, srcreg); { uae_s32 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 32) { SET_VFLG (val != 0); SET_CFLG (cnt == 32 ? val & 1 : 0); COPY_CARRY (); val = 0; } else if (cnt > 0) { uae_u32 mask = (0xffffffff << (31 - cnt)) & 0xffffffff; SET_VFLG ((val & mask) != mask && (val & mask) != 0); val <<= cnt - 1; SET_CFLG ((val & 0x80000000) >> 31); COPY_CARRY (); val <<= 1; val &= 0xffffffff; } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); { int cycles = 4; cycles += 2 * ccnt; if (cycles > 0) do_cycles_ce000 (cycles); } m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpc (2); } /* 8+ (1/0) */ /* LSL.L Dn,Dn */ void REGPARAM2 CPUFUNC(op_e1a8_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 cnt = m68k_dreg (regs, srcreg); { uae_s32 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 32) { SET_CFLG (cnt == 32 ? val & 1 : 0); COPY_CARRY (); val = 0; } else if (cnt > 0) { val <<= (cnt - 1); SET_CFLG ((val & 0x80000000) >> 31); COPY_CARRY (); val <<= 1; val &= 0xffffffff; } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); { int cycles = 4; cycles += 2 * ccnt; if (cycles > 0) do_cycles_ce000 (cycles); } m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpc (2); } /* 8+ (1/0) */ /* ROXL.L Dn,Dn */ void REGPARAM2 CPUFUNC(op_e1b0_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 cnt = m68k_dreg (regs, srcreg); { uae_s32 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 33) cnt -= 33; if (cnt > 0) { cnt--; { uae_u32 carry; uae_u32 loval = val >> (31 - cnt); carry = loval & 1; val = (((val << 1) | GET_XFLG ()) << cnt) | (loval >> 1); SET_XFLG (carry); val &= 0xffffffff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); { int cycles = 4; cycles += 2 * ccnt; if (cycles > 0) do_cycles_ce000 (cycles); } m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpc (2); } /* 8+ (1/0) */ /* ROL.L Dn,Dn */ void REGPARAM2 CPUFUNC(op_e1b8_12)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 cnt = m68k_dreg (regs, srcreg); { uae_s32 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt > 0) { uae_u32 loval; cnt &= 31; loval = val >> (32 - cnt); val <<= cnt; val |= loval; val &= 0xffffffff; SET_CFLG (val & 1); } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); { int cycles = 4; cycles += 2 * ccnt; if (cycles > 0) do_cycles_ce000 (cycles); } m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpc (2); } /* 8+ (1/0) */ /* ASLW.W (An) */ void REGPARAM2 CPUFUNC(op_e1d0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel5244; } {{ uae_s16 data = x_get_word (dataa); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 sign2; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); sign2 = 0x8000 & val; SET_CFLG (sign != 0); COPY_CARRY (); SET_VFLG (GET_VFLG () | (sign2 != sign)); x_put_word (dataa, val); }}}}} m68k_incpc (2); endlabel5244: ; } /* 12 (2/1) */ /* ASLW.W (An)+ */ void REGPARAM2 CPUFUNC(op_e1d8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel5245; } {{ uae_s16 data = x_get_word (dataa); m68k_areg (regs, srcreg) += 2; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 sign2; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); sign2 = 0x8000 & val; SET_CFLG (sign != 0); COPY_CARRY (); SET_VFLG (GET_VFLG () | (sign2 != sign)); x_put_word (dataa, val); }}}}} m68k_incpc (2); endlabel5245: ; } /* 12 (2/1) */ /* ASLW.W -(An) */ void REGPARAM2 CPUFUNC(op_e1e0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; dataa = m68k_areg (regs, srcreg) - 2; do_cycles_ce000 (2); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel5246; } {{ uae_s16 data = x_get_word (dataa); m68k_areg (regs, srcreg) = dataa; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 sign2; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); sign2 = 0x8000 & val; SET_CFLG (sign != 0); COPY_CARRY (); SET_VFLG (GET_VFLG () | (sign2 != sign)); x_put_word (dataa, val); }}}}} m68k_incpc (2); endlabel5246: ; } /* 14 (2/1) */ /* ASLW.W (d16,An) */ void REGPARAM2 CPUFUNC(op_e1e8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel5247; } {{ uae_s16 data = x_get_word (dataa); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 sign2; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); sign2 = 0x8000 & val; SET_CFLG (sign != 0); COPY_CARRY (); SET_VFLG (GET_VFLG () | (sign2 != sign)); x_put_word (dataa, val); }}}}} m68k_incpc (4); endlabel5247: ; } /* 16 (3/1) */ /* ASLW.W (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_e1f0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; do_cycles_ce000 (2); dataa = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel5248; } {{ uae_s16 data = x_get_word (dataa); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 sign2; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); sign2 = 0x8000 & val; SET_CFLG (sign != 0); COPY_CARRY (); SET_VFLG (GET_VFLG () | (sign2 != sign)); x_put_word (dataa, val); }}}}} m68k_incpc (4); endlabel5248: ; } /* 18 (3/1) */ /* ASLW.W (xxx).W */ void REGPARAM2 CPUFUNC(op_e1f8_12)(uae_u32 opcode) { {{ uaecptr dataa = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel5249; } {{ uae_s16 data = x_get_word (dataa); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 sign2; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); sign2 = 0x8000 & val; SET_CFLG (sign != 0); COPY_CARRY (); SET_VFLG (GET_VFLG () | (sign2 != sign)); x_put_word (dataa, val); }}}}} m68k_incpc (4); endlabel5249: ; } /* 16 (3/1) */ /* ASLW.W (xxx).L */ void REGPARAM2 CPUFUNC(op_e1f9_12)(uae_u32 opcode) { {{ uaecptr dataa; dataa = get_word_ce000_prefetch (4) << 16; dataa |= get_word_ce000_prefetch (6); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel5250; } {{ uae_s16 data = x_get_word (dataa); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 sign2; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); sign2 = 0x8000 & val; SET_CFLG (sign != 0); COPY_CARRY (); SET_VFLG (GET_VFLG () | (sign2 != sign)); x_put_word (dataa, val); }}}}} m68k_incpc (6); endlabel5250: ; } /* 20 (4/1) */ /* LSRW.W (An) */ void REGPARAM2 CPUFUNC(op_e2d0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel5251; } {{ uae_s16 data = x_get_word (dataa); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 val = (uae_u16)data; uae_u32 carry = val & 1; val >>= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); x_put_word (dataa, val); }}}}} m68k_incpc (2); endlabel5251: ; } /* 12 (2/1) */ /* LSRW.W (An)+ */ void REGPARAM2 CPUFUNC(op_e2d8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel5252; } {{ uae_s16 data = x_get_word (dataa); m68k_areg (regs, srcreg) += 2; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 val = (uae_u16)data; uae_u32 carry = val & 1; val >>= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); x_put_word (dataa, val); }}}}} m68k_incpc (2); endlabel5252: ; } /* 12 (2/1) */ /* LSRW.W -(An) */ void REGPARAM2 CPUFUNC(op_e2e0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; dataa = m68k_areg (regs, srcreg) - 2; do_cycles_ce000 (2); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel5253; } {{ uae_s16 data = x_get_word (dataa); m68k_areg (regs, srcreg) = dataa; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u32 val = (uae_u16)data; uae_u32 carry = val & 1; val >>= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); x_put_word (dataa, val); }}}}} m68k_incpc (2); endlabel5253: ; } /* 14 (2/1) */ /* LSRW.W (d16,An) */ void REGPARAM2 CPUFUNC(op_e2e8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel5254; } {{ uae_s16 data = x_get_word (dataa); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { uae_u32 val = (uae_u16)data; uae_u32 carry = val & 1; val >>= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); x_put_word (dataa, val); }}}}} m68k_incpc (4); endlabel5254: ; } /* 16 (3/1) */ /* LSRW.W (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_e2f0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; do_cycles_ce000 (2); dataa = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel5255; } {{ uae_s16 data = x_get_word (dataa); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { uae_u32 val = (uae_u16)data; uae_u32 carry = val & 1; val >>= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); x_put_word (dataa, val); }}}}} m68k_incpc (4); endlabel5255: ; } /* 18 (3/1) */ /* LSRW.W (xxx).W */ void REGPARAM2 CPUFUNC(op_e2f8_12)(uae_u32 opcode) { {{ uaecptr dataa = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel5256; } {{ uae_s16 data = x_get_word (dataa); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { uae_u32 val = (uae_u16)data; uae_u32 carry = val & 1; val >>= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); x_put_word (dataa, val); }}}}} m68k_incpc (4); endlabel5256: ; } /* 16 (3/1) */ /* LSRW.W (xxx).L */ void REGPARAM2 CPUFUNC(op_e2f9_12)(uae_u32 opcode) { {{ uaecptr dataa; dataa = get_word_ce000_prefetch (4) << 16; dataa |= get_word_ce000_prefetch (6); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel5257; } {{ uae_s16 data = x_get_word (dataa); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); { uae_u32 val = (uae_u16)data; uae_u32 carry = val & 1; val >>= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); x_put_word (dataa, val); }}}}} m68k_incpc (6); endlabel5257: ; } /* 20 (4/1) */ /* LSLW.W (An) */ void REGPARAM2 CPUFUNC(op_e3d0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel5258; } {{ uae_s16 data = x_get_word (dataa); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); x_put_word (dataa, val); }}}}} m68k_incpc (2); endlabel5258: ; } /* 12 (2/1) */ /* LSLW.W (An)+ */ void REGPARAM2 CPUFUNC(op_e3d8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel5259; } {{ uae_s16 data = x_get_word (dataa); m68k_areg (regs, srcreg) += 2; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); x_put_word (dataa, val); }}}}} m68k_incpc (2); endlabel5259: ; } /* 12 (2/1) */ /* LSLW.W -(An) */ void REGPARAM2 CPUFUNC(op_e3e0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; dataa = m68k_areg (regs, srcreg) - 2; do_cycles_ce000 (2); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel5260; } {{ uae_s16 data = x_get_word (dataa); m68k_areg (regs, srcreg) = dataa; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); x_put_word (dataa, val); }}}}} m68k_incpc (2); endlabel5260: ; } /* 14 (2/1) */ /* LSLW.W (d16,An) */ void REGPARAM2 CPUFUNC(op_e3e8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel5261; } {{ uae_s16 data = x_get_word (dataa); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); x_put_word (dataa, val); }}}}} m68k_incpc (4); endlabel5261: ; } /* 16 (3/1) */ /* LSLW.W (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_e3f0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; do_cycles_ce000 (2); dataa = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel5262; } {{ uae_s16 data = x_get_word (dataa); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); x_put_word (dataa, val); }}}}} m68k_incpc (4); endlabel5262: ; } /* 18 (3/1) */ /* LSLW.W (xxx).W */ void REGPARAM2 CPUFUNC(op_e3f8_12)(uae_u32 opcode) { {{ uaecptr dataa = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel5263; } {{ uae_s16 data = x_get_word (dataa); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); x_put_word (dataa, val); }}}}} m68k_incpc (4); endlabel5263: ; } /* 16 (3/1) */ /* LSLW.W (xxx).L */ void REGPARAM2 CPUFUNC(op_e3f9_12)(uae_u32 opcode) { {{ uaecptr dataa; dataa = get_word_ce000_prefetch (4) << 16; dataa |= get_word_ce000_prefetch (6); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel5264; } {{ uae_s16 data = x_get_word (dataa); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); x_put_word (dataa, val); }}}}} m68k_incpc (6); endlabel5264: ; } /* 20 (4/1) */ /* ROXRW.W (An) */ void REGPARAM2 CPUFUNC(op_e4d0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel5265; } {{ uae_s16 data = x_get_word (dataa); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (GET_XFLG ()) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); x_put_word (dataa, val); }}}}} m68k_incpc (2); endlabel5265: ; } /* 12 (2/1) */ /* ROXRW.W (An)+ */ void REGPARAM2 CPUFUNC(op_e4d8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel5266; } {{ uae_s16 data = x_get_word (dataa); m68k_areg (regs, srcreg) += 2; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (GET_XFLG ()) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); x_put_word (dataa, val); }}}}} m68k_incpc (2); endlabel5266: ; } /* 12 (2/1) */ /* ROXRW.W -(An) */ void REGPARAM2 CPUFUNC(op_e4e0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; dataa = m68k_areg (regs, srcreg) - 2; do_cycles_ce000 (2); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel5267; } {{ uae_s16 data = x_get_word (dataa); m68k_areg (regs, srcreg) = dataa; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (GET_XFLG ()) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); x_put_word (dataa, val); }}}}} m68k_incpc (2); endlabel5267: ; } /* 14 (2/1) */ /* ROXRW.W (d16,An) */ void REGPARAM2 CPUFUNC(op_e4e8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel5268; } {{ uae_s16 data = x_get_word (dataa); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (GET_XFLG ()) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); x_put_word (dataa, val); }}}}} m68k_incpc (4); endlabel5268: ; } /* 16 (3/1) */ /* ROXRW.W (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_e4f0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; do_cycles_ce000 (2); dataa = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel5269; } {{ uae_s16 data = x_get_word (dataa); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (GET_XFLG ()) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); x_put_word (dataa, val); }}}}} m68k_incpc (4); endlabel5269: ; } /* 18 (3/1) */ /* ROXRW.W (xxx).W */ void REGPARAM2 CPUFUNC(op_e4f8_12)(uae_u32 opcode) { {{ uaecptr dataa = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel5270; } {{ uae_s16 data = x_get_word (dataa); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (GET_XFLG ()) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); x_put_word (dataa, val); }}}}} m68k_incpc (4); endlabel5270: ; } /* 16 (3/1) */ /* ROXRW.W (xxx).L */ void REGPARAM2 CPUFUNC(op_e4f9_12)(uae_u32 opcode) { {{ uaecptr dataa; dataa = get_word_ce000_prefetch (4) << 16; dataa |= get_word_ce000_prefetch (6); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel5271; } {{ uae_s16 data = x_get_word (dataa); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (GET_XFLG ()) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); x_put_word (dataa, val); }}}}} m68k_incpc (6); endlabel5271: ; } /* 20 (4/1) */ /* ROXLW.W (An) */ void REGPARAM2 CPUFUNC(op_e5d0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel5272; } {{ uae_s16 data = x_get_word (dataa); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (GET_XFLG ()) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); x_put_word (dataa, val); }}}}} m68k_incpc (2); endlabel5272: ; } /* 12 (2/1) */ /* ROXLW.W (An)+ */ void REGPARAM2 CPUFUNC(op_e5d8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel5273; } {{ uae_s16 data = x_get_word (dataa); m68k_areg (regs, srcreg) += 2; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (GET_XFLG ()) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); x_put_word (dataa, val); }}}}} m68k_incpc (2); endlabel5273: ; } /* 12 (2/1) */ /* ROXLW.W -(An) */ void REGPARAM2 CPUFUNC(op_e5e0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; dataa = m68k_areg (regs, srcreg) - 2; do_cycles_ce000 (2); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel5274; } {{ uae_s16 data = x_get_word (dataa); m68k_areg (regs, srcreg) = dataa; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (GET_XFLG ()) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); x_put_word (dataa, val); }}}}} m68k_incpc (2); endlabel5274: ; } /* 14 (2/1) */ /* ROXLW.W (d16,An) */ void REGPARAM2 CPUFUNC(op_e5e8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel5275; } {{ uae_s16 data = x_get_word (dataa); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (GET_XFLG ()) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); x_put_word (dataa, val); }}}}} m68k_incpc (4); endlabel5275: ; } /* 16 (3/1) */ /* ROXLW.W (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_e5f0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; do_cycles_ce000 (2); dataa = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel5276; } {{ uae_s16 data = x_get_word (dataa); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (GET_XFLG ()) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); x_put_word (dataa, val); }}}}} m68k_incpc (4); endlabel5276: ; } /* 18 (3/1) */ /* ROXLW.W (xxx).W */ void REGPARAM2 CPUFUNC(op_e5f8_12)(uae_u32 opcode) { {{ uaecptr dataa = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel5277; } {{ uae_s16 data = x_get_word (dataa); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (GET_XFLG ()) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); x_put_word (dataa, val); }}}}} m68k_incpc (4); endlabel5277: ; } /* 16 (3/1) */ /* ROXLW.W (xxx).L */ void REGPARAM2 CPUFUNC(op_e5f9_12)(uae_u32 opcode) { {{ uaecptr dataa; dataa = get_word_ce000_prefetch (4) << 16; dataa |= get_word_ce000_prefetch (6); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel5278; } {{ uae_s16 data = x_get_word (dataa); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (GET_XFLG ()) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); x_put_word (dataa, val); }}}}} m68k_incpc (6); endlabel5278: ; } /* 20 (4/1) */ /* RORW.W (An) */ void REGPARAM2 CPUFUNC(op_e6d0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel5279; } {{ uae_s16 data = x_get_word (dataa); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (carry) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); x_put_word (dataa, val); }}}}} m68k_incpc (2); endlabel5279: ; } /* 12 (2/1) */ /* RORW.W (An)+ */ void REGPARAM2 CPUFUNC(op_e6d8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel5280; } {{ uae_s16 data = x_get_word (dataa); m68k_areg (regs, srcreg) += 2; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (carry) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); x_put_word (dataa, val); }}}}} m68k_incpc (2); endlabel5280: ; } /* 12 (2/1) */ /* RORW.W -(An) */ void REGPARAM2 CPUFUNC(op_e6e0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; dataa = m68k_areg (regs, srcreg) - 2; do_cycles_ce000 (2); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel5281; } {{ uae_s16 data = x_get_word (dataa); m68k_areg (regs, srcreg) = dataa; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (carry) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); x_put_word (dataa, val); }}}}} m68k_incpc (2); endlabel5281: ; } /* 14 (2/1) */ /* RORW.W (d16,An) */ void REGPARAM2 CPUFUNC(op_e6e8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel5282; } {{ uae_s16 data = x_get_word (dataa); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (carry) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); x_put_word (dataa, val); }}}}} m68k_incpc (4); endlabel5282: ; } /* 16 (3/1) */ /* RORW.W (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_e6f0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; do_cycles_ce000 (2); dataa = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel5283; } {{ uae_s16 data = x_get_word (dataa); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (carry) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); x_put_word (dataa, val); }}}}} m68k_incpc (4); endlabel5283: ; } /* 18 (3/1) */ /* RORW.W (xxx).W */ void REGPARAM2 CPUFUNC(op_e6f8_12)(uae_u32 opcode) { {{ uaecptr dataa = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel5284; } {{ uae_s16 data = x_get_word (dataa); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (carry) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); x_put_word (dataa, val); }}}}} m68k_incpc (4); endlabel5284: ; } /* 16 (3/1) */ /* RORW.W (xxx).L */ void REGPARAM2 CPUFUNC(op_e6f9_12)(uae_u32 opcode) { {{ uaecptr dataa; dataa = get_word_ce000_prefetch (4) << 16; dataa |= get_word_ce000_prefetch (6); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel5285; } {{ uae_s16 data = x_get_word (dataa); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (carry) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); x_put_word (dataa, val); }}}}} m68k_incpc (6); endlabel5285: ; } /* 20 (4/1) */ /* ROLW.W (An) */ void REGPARAM2 CPUFUNC(op_e7d0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel5286; } {{ uae_s16 data = x_get_word (dataa); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (carry) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); x_put_word (dataa, val); }}}}} m68k_incpc (2); endlabel5286: ; } /* 12 (2/1) */ /* ROLW.W (An)+ */ void REGPARAM2 CPUFUNC(op_e7d8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel5287; } {{ uae_s16 data = x_get_word (dataa); m68k_areg (regs, srcreg) += 2; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (carry) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); x_put_word (dataa, val); }}}}} m68k_incpc (2); endlabel5287: ; } /* 12 (2/1) */ /* ROLW.W -(An) */ void REGPARAM2 CPUFUNC(op_e7e0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; dataa = m68k_areg (regs, srcreg) - 2; do_cycles_ce000 (2); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel5288; } {{ uae_s16 data = x_get_word (dataa); m68k_areg (regs, srcreg) = dataa; regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (4); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (carry) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); x_put_word (dataa, val); }}}}} m68k_incpc (2); endlabel5288: ; } /* 14 (2/1) */ /* ROLW.W (d16,An) */ void REGPARAM2 CPUFUNC(op_e7e8_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel5289; } {{ uae_s16 data = x_get_word (dataa); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (carry) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); x_put_word (dataa, val); }}}}} m68k_incpc (4); endlabel5289: ; } /* 16 (3/1) */ /* ROLW.W (d8,An,Xn) */ void REGPARAM2 CPUFUNC(op_e7f0_12)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; do_cycles_ce000 (2); dataa = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_ce000_prefetch (4)); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel5290; } {{ uae_s16 data = x_get_word (dataa); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (carry) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); x_put_word (dataa, val); }}}}} m68k_incpc (4); endlabel5290: ; } /* 18 (3/1) */ /* ROLW.W (xxx).W */ void REGPARAM2 CPUFUNC(op_e7f8_12)(uae_u32 opcode) { {{ uaecptr dataa = (uae_s32)(uae_s16)get_word_ce000_prefetch (4); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel5291; } {{ uae_s16 data = x_get_word (dataa); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (6); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (carry) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); x_put_word (dataa, val); }}}}} m68k_incpc (4); endlabel5291: ; } /* 16 (3/1) */ /* ROLW.W (xxx).L */ void REGPARAM2 CPUFUNC(op_e7f9_12)(uae_u32 opcode) { {{ uaecptr dataa; dataa = get_word_ce000_prefetch (4) << 16; dataa |= get_word_ce000_prefetch (6); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel5292; } {{ uae_s16 data = x_get_word (dataa); regs.ir = regs.irc; ipl_fetch (); get_word_ce000_prefetch (8); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (carry) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); x_put_word (dataa, val); }}}}} m68k_incpc (6); endlabel5292: ; } /* 20 (4/1) */ #endif fs-uae-2.2.3+dfsg/gensrc/cpuemu_0.cpp0000644000175000017500000405220312162366654017564 0ustar glaubitzglaubitz#include "sysconfig.h" #include "sysdeps.h" #include "options.h" #include "uae/memory.h" #include "custom.h" #include "events.h" #include "newcpu.h" #include "cpu_prefetch.h" #include "cputbl.h" #include "cpummu.h" #define CPUFUNC(x) x##_ff #define SET_CFLG_ALWAYS(x) SET_CFLG(x) #define SET_NFLG_ALWAYS(x) SET_NFLG(x) #ifdef NOFLAGS #include "noflags.h" #endif #if !defined(PART_1) && !defined(PART_2) && !defined(PART_3) && !defined(PART_4) && !defined(PART_5) && !defined(PART_6) && !defined(PART_7) && !defined(PART_8) #define PART_1 1 #define PART_2 1 #define PART_3 1 #define PART_4 1 #define PART_5 1 #define PART_6 1 #define PART_7 1 #define PART_8 1 #endif #ifdef PART_1 /* OR.B #.B,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0000_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte (2); { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* OR.B #.B,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0010_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); }}}} m68k_incpc (4); return 20 * CYCLE_UNIT / 2; } /* OR.B #.B,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0018_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); }}}} m68k_incpc (4); return 20 * CYCLE_UNIT / 2; } /* OR.B #.B,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0020_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) = dsta; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); }}}} m68k_incpc (4); return 22 * CYCLE_UNIT / 2; } /* OR.B #.B,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0028_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (4); { uae_s8 dst = get_byte (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); }}}} m68k_incpc (6); return 24 * CYCLE_UNIT / 2; } /* OR.B #.B,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0030_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte (2); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); { uae_s8 dst = get_byte (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); }}}}}return 24 * CYCLE_UNIT / 2; } /* OR.B #.B,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_0038_0)(uae_u32 opcode) { {{ uae_s8 src = get_ibyte (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (4); { uae_s8 dst = get_byte (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); }}}} m68k_incpc (6); return 24 * CYCLE_UNIT / 2; } /* OR.B #.B,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_0039_0)(uae_u32 opcode) { {{ uae_s8 src = get_ibyte (2); { uaecptr dsta = get_ilong (4); { uae_s8 dst = get_byte (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); }}}} m68k_incpc (8); return 28 * CYCLE_UNIT / 2; } /* ORSR.B #.W */ uae_u32 REGPARAM2 CPUFUNC(op_003c_0)(uae_u32 opcode) { { MakeSR (); { uae_s16 src = get_iword (2); src &= 0xFF; regs.sr |= src; MakeFromSR (); }} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* OR.W #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0040_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* OR.W #.W,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0050_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = get_word (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* OR.W #.W,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0058_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) += 2; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* OR.W #.W,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0060_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) = dsta; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); }}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* OR.W #.W,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0068_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (4); { uae_s16 dst = get_word (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* OR.W #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0070_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); { uae_s16 dst = get_word (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); }}}}}return 20 * CYCLE_UNIT / 2; } /* OR.W #.W,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_0078_0)(uae_u32 opcode) { {{ uae_s16 src = get_iword (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (4); { uae_s16 dst = get_word (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* OR.W #.W,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_0079_0)(uae_u32 opcode) { {{ uae_s16 src = get_iword (2); { uaecptr dsta = get_ilong (4); { uae_s16 dst = get_word (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); }}}} m68k_incpc (8); return 24 * CYCLE_UNIT / 2; } /* ORSR.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_007c_0)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel18; } { MakeSR (); { uae_s16 src = get_iword (2); regs.sr |= src; MakeFromSR (); }}} m68k_incpc (4); endlabel18: ; return 8 * CYCLE_UNIT / 2; } /* OR.L #.L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0080_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong (2); { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } /* OR.L #.L,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0090_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = get_long (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); }}}} m68k_incpc (6); return 28 * CYCLE_UNIT / 2; } /* OR.L #.L,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0098_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) += 4; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); }}}} m68k_incpc (6); return 28 * CYCLE_UNIT / 2; } /* OR.L #.L,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_00a0_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) = dsta; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); }}}} m68k_incpc (6); return 30 * CYCLE_UNIT / 2; } /* OR.L #.L,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_00a8_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (6); { uae_s32 dst = get_long (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); }}}} m68k_incpc (8); return 32 * CYCLE_UNIT / 2; } /* OR.L #.L,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_00b0_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong (2); { uaecptr dsta; m68k_incpc (6); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); { uae_s32 dst = get_long (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); }}}}}return 32 * CYCLE_UNIT / 2; } /* OR.L #.L,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_00b8_0)(uae_u32 opcode) { {{ uae_s32 src = get_ilong (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (6); { uae_s32 dst = get_long (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); }}}} m68k_incpc (8); return 32 * CYCLE_UNIT / 2; } /* OR.L #.L,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_00b9_0)(uae_u32 opcode) { {{ uae_s32 src = get_ilong (2); { uaecptr dsta = get_ilong (6); { uae_s32 dst = get_long (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); }}}} m68k_incpc (10); return 36 * CYCLE_UNIT / 2; } /* CHK2.B #.W,(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_00d0_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword (2); { uaecptr dsta = m68k_areg (regs, dstreg); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = (uae_s32)(uae_s8)get_byte (dsta); upper = (uae_s32)(uae_s8)get_byte (dsta + 1); if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s8)reg; SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel27; } } }}} m68k_incpc (4); endlabel27: ; return 8 * CYCLE_UNIT / 2; } #endif /* CHK2.B #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_00e8_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (4); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = (uae_s32)(uae_s8)get_byte (dsta); upper = (uae_s32)(uae_s8)get_byte (dsta + 1); if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s8)reg; SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel28; } } }}} m68k_incpc (6); endlabel28: ; return 12 * CYCLE_UNIT / 2; } #endif /* CHK2.B #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_00f0_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword (2); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = (uae_s32)(uae_s8)get_byte (dsta); upper = (uae_s32)(uae_s8)get_byte (dsta + 1); if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s8)reg; SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel29; } } }}}}endlabel29: ; return 12 * CYCLE_UNIT / 2; } #endif /* CHK2.B #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_00f8_0)(uae_u32 opcode) { {{ uae_s16 extra = get_iword (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (4); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = (uae_s32)(uae_s8)get_byte (dsta); upper = (uae_s32)(uae_s8)get_byte (dsta + 1); if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s8)reg; SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel30; } } }}} m68k_incpc (6); endlabel30: ; return 12 * CYCLE_UNIT / 2; } #endif /* CHK2.B #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_00f9_0)(uae_u32 opcode) { {{ uae_s16 extra = get_iword (2); { uaecptr dsta = get_ilong (4); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = (uae_s32)(uae_s8)get_byte (dsta); upper = (uae_s32)(uae_s8)get_byte (dsta + 1); if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s8)reg; SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel31; } } }}} m68k_incpc (8); endlabel31: ; return 16 * CYCLE_UNIT / 2; } #endif /* CHK2.B #.W,(d16,PC) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_00fa_0)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 extra = get_iword (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_iword (4); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = (uae_s32)(uae_s8)get_byte (dsta); upper = (uae_s32)(uae_s8)get_byte (dsta + 1); if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s8)reg; SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel32; } } }}} m68k_incpc (6); endlabel32: ; return 12 * CYCLE_UNIT / 2; } #endif /* CHK2.B #.W,(d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_00fb_0)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 extra = get_iword (2); { uaecptr tmppc; uaecptr dsta; m68k_incpc (4); { tmppc = m68k_getpc (); dsta = get_disp_ea_020 (tmppc, next_iword ()); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = (uae_s32)(uae_s8)get_byte (dsta); upper = (uae_s32)(uae_s8)get_byte (dsta + 1); if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s8)reg; SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel33; } } }}}}endlabel33: ; return 12 * CYCLE_UNIT / 2; } #endif /* BTST.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0100_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= 31; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* MVPMR.W (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0108_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; { uaecptr memp = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_u16 val = (get_byte (memp) << 8) + get_byte (memp + 2); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* BTST.B Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0110_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* BTST.B Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0118_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* BTST.B Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0120_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) = dsta; src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* BTST.B Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0128_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s8 dst = get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* BTST.B Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0130_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); { uae_s8 dst = get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}}}return 12 * CYCLE_UNIT / 2; } /* BTST.B Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_0138_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (2); { uae_s8 dst = get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* BTST.B Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_0139_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_ilong (2); { uae_s8 dst = get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* BTST.B Dn,(d16,PC) */ uae_u32 REGPARAM2 CPUFUNC(op_013a_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = 2; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_getpc () + 2; dsta += (uae_s32)(uae_s16)get_iword (2); { uae_s8 dst = get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* BTST.B Dn,(d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_013b_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = 3; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr tmppc; uaecptr dsta; m68k_incpc (2); { tmppc = m68k_getpc (); dsta = get_disp_ea_020 (tmppc, next_iword ()); { uae_s8 dst = get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}}}return 12 * CYCLE_UNIT / 2; } /* BTST.B Dn,#.B */ uae_u32 REGPARAM2 CPUFUNC(op_013c_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = get_ibyte (2); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* BCHG.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0140_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= 31; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); m68k_dreg (regs, dstreg) = (dst); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* MVPMR.L (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0148_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; { uaecptr memp = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_u32 val = (get_byte (memp) << 24) + (get_byte (memp + 2) << 16) + (get_byte (memp + 4) << 8) + get_byte (memp + 6); m68k_dreg (regs, dstreg) = (val); }} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* BCHG.B Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0150_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); put_byte (dsta, dst); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* BCHG.B Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0158_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); put_byte (dsta, dst); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* BCHG.B Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0160_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) = dsta; src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); put_byte (dsta, dst); }}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* BCHG.B Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0168_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s8 dst = get_byte (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); put_byte (dsta, dst); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* BCHG.B Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0170_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); { uae_s8 dst = get_byte (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); put_byte (dsta, dst); }}}}}return 16 * CYCLE_UNIT / 2; } /* BCHG.B Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_0178_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (2); { uae_s8 dst = get_byte (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); put_byte (dsta, dst); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* BCHG.B Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_0179_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_ilong (2); { uae_s8 dst = get_byte (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); put_byte (dsta, dst); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* BCHG.B Dn,(d16,PC) */ uae_u32 REGPARAM2 CPUFUNC(op_017a_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = 2; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_getpc () + 2; dsta += (uae_s32)(uae_s16)get_iword (2); { uae_s8 dst = get_byte (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); put_byte (dsta, dst); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* BCHG.B Dn,(d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_017b_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = 3; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr tmppc; uaecptr dsta; m68k_incpc (2); { tmppc = m68k_getpc (); dsta = get_disp_ea_020 (tmppc, next_iword ()); { uae_s8 dst = get_byte (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); put_byte (dsta, dst); }}}}}return 16 * CYCLE_UNIT / 2; } /* BCLR.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0180_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= 31; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); m68k_dreg (regs, dstreg) = (dst); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* MVPRM.W Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0188_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); uaecptr memp = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (2); put_byte (memp, src >> 8); put_byte (memp + 2, src); }} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* BCLR.B Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0190_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); put_byte (dsta, dst); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* BCLR.B Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0198_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); put_byte (dsta, dst); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* BCLR.B Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_01a0_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) = dsta; src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); put_byte (dsta, dst); }}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* BCLR.B Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_01a8_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s8 dst = get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); put_byte (dsta, dst); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* BCLR.B Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_01b0_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); { uae_s8 dst = get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); put_byte (dsta, dst); }}}}}return 16 * CYCLE_UNIT / 2; } /* BCLR.B Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_01b8_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (2); { uae_s8 dst = get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); put_byte (dsta, dst); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* BCLR.B Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_01b9_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_ilong (2); { uae_s8 dst = get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); put_byte (dsta, dst); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* BCLR.B Dn,(d16,PC) */ uae_u32 REGPARAM2 CPUFUNC(op_01ba_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = 2; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_getpc () + 2; dsta += (uae_s32)(uae_s16)get_iword (2); { uae_s8 dst = get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); put_byte (dsta, dst); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* BCLR.B Dn,(d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_01bb_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = 3; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr tmppc; uaecptr dsta; m68k_incpc (2); { tmppc = m68k_getpc (); dsta = get_disp_ea_020 (tmppc, next_iword ()); { uae_s8 dst = get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); put_byte (dsta, dst); }}}}}return 16 * CYCLE_UNIT / 2; } /* BSET.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_01c0_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= 31; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); m68k_dreg (regs, dstreg) = (dst); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* MVPRM.L Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_01c8_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); uaecptr memp = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (2); put_byte (memp, src >> 24); put_byte (memp + 2, src >> 16); put_byte (memp + 4, src >> 8); put_byte (memp + 6, src); }} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* BSET.B Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_01d0_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); put_byte (dsta, dst); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* BSET.B Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_01d8_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); put_byte (dsta, dst); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* BSET.B Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_01e0_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) = dsta; src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); put_byte (dsta, dst); }}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* BSET.B Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_01e8_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s8 dst = get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); put_byte (dsta, dst); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* BSET.B Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_01f0_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); { uae_s8 dst = get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); put_byte (dsta, dst); }}}}}return 16 * CYCLE_UNIT / 2; } /* BSET.B Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_01f8_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (2); { uae_s8 dst = get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); put_byte (dsta, dst); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* BSET.B Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_01f9_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_ilong (2); { uae_s8 dst = get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); put_byte (dsta, dst); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* BSET.B Dn,(d16,PC) */ uae_u32 REGPARAM2 CPUFUNC(op_01fa_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = 2; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_getpc () + 2; dsta += (uae_s32)(uae_s16)get_iword (2); { uae_s8 dst = get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); put_byte (dsta, dst); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* BSET.B Dn,(d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_01fb_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = 3; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr tmppc; uaecptr dsta; m68k_incpc (2); { tmppc = m68k_getpc (); dsta = get_disp_ea_020 (tmppc, next_iword ()); { uae_s8 dst = get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); put_byte (dsta, dst); }}}}}return 16 * CYCLE_UNIT / 2; } /* AND.B #.B,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0200_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte (2); { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* AND.B #.B,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0210_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); }}}} m68k_incpc (4); return 20 * CYCLE_UNIT / 2; } /* AND.B #.B,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0218_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); }}}} m68k_incpc (4); return 20 * CYCLE_UNIT / 2; } /* AND.B #.B,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0220_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) = dsta; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); }}}} m68k_incpc (4); return 22 * CYCLE_UNIT / 2; } /* AND.B #.B,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0228_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (4); { uae_s8 dst = get_byte (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); }}}} m68k_incpc (6); return 24 * CYCLE_UNIT / 2; } /* AND.B #.B,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0230_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte (2); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); { uae_s8 dst = get_byte (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); }}}}}return 24 * CYCLE_UNIT / 2; } /* AND.B #.B,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_0238_0)(uae_u32 opcode) { {{ uae_s8 src = get_ibyte (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (4); { uae_s8 dst = get_byte (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); }}}} m68k_incpc (6); return 24 * CYCLE_UNIT / 2; } /* AND.B #.B,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_0239_0)(uae_u32 opcode) { {{ uae_s8 src = get_ibyte (2); { uaecptr dsta = get_ilong (4); { uae_s8 dst = get_byte (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); }}}} m68k_incpc (8); return 28 * CYCLE_UNIT / 2; } /* ANDSR.B #.W */ uae_u32 REGPARAM2 CPUFUNC(op_023c_0)(uae_u32 opcode) { { MakeSR (); { uae_s16 src = get_iword (2); src |= 0xFF00; regs.sr &= src; MakeFromSR (); }} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* AND.W #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0240_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* AND.W #.W,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0250_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = get_word (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* AND.W #.W,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0258_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) += 2; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* AND.W #.W,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0260_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) = dsta; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); }}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* AND.W #.W,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0268_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (4); { uae_s16 dst = get_word (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* AND.W #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0270_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); { uae_s16 dst = get_word (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); }}}}}return 20 * CYCLE_UNIT / 2; } /* AND.W #.W,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_0278_0)(uae_u32 opcode) { {{ uae_s16 src = get_iword (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (4); { uae_s16 dst = get_word (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* AND.W #.W,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_0279_0)(uae_u32 opcode) { {{ uae_s16 src = get_iword (2); { uaecptr dsta = get_ilong (4); { uae_s16 dst = get_word (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); }}}} m68k_incpc (8); return 24 * CYCLE_UNIT / 2; } /* ANDSR.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_027c_0)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel96; } { MakeSR (); { uae_s16 src = get_iword (2); regs.sr &= src; MakeFromSR (); }}} m68k_incpc (4); endlabel96: ; return 8 * CYCLE_UNIT / 2; } /* AND.L #.L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0280_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong (2); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } /* AND.L #.L,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0290_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = get_long (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); }}}} m68k_incpc (6); return 28 * CYCLE_UNIT / 2; } /* AND.L #.L,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0298_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) += 4; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); }}}} m68k_incpc (6); return 28 * CYCLE_UNIT / 2; } /* AND.L #.L,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_02a0_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) = dsta; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); }}}} m68k_incpc (6); return 30 * CYCLE_UNIT / 2; } /* AND.L #.L,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_02a8_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (6); { uae_s32 dst = get_long (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); }}}} m68k_incpc (8); return 32 * CYCLE_UNIT / 2; } /* AND.L #.L,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_02b0_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong (2); { uaecptr dsta; m68k_incpc (6); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); { uae_s32 dst = get_long (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); }}}}}return 32 * CYCLE_UNIT / 2; } /* AND.L #.L,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_02b8_0)(uae_u32 opcode) { {{ uae_s32 src = get_ilong (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (6); { uae_s32 dst = get_long (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); }}}} m68k_incpc (8); return 32 * CYCLE_UNIT / 2; } /* AND.L #.L,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_02b9_0)(uae_u32 opcode) { {{ uae_s32 src = get_ilong (2); { uaecptr dsta = get_ilong (6); { uae_s32 dst = get_long (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); }}}} m68k_incpc (10); return 36 * CYCLE_UNIT / 2; } /* CHK2.W #.W,(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_02d0_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword (2); { uaecptr dsta = m68k_areg (regs, dstreg); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = (uae_s32)(uae_s16)get_word (dsta); upper = (uae_s32)(uae_s16)get_word (dsta + 2); if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s16)reg; SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel105; } } }}} m68k_incpc (4); endlabel105: ; return 8 * CYCLE_UNIT / 2; } #endif /* CHK2.W #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_02e8_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (4); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = (uae_s32)(uae_s16)get_word (dsta); upper = (uae_s32)(uae_s16)get_word (dsta + 2); if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s16)reg; SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel106; } } }}} m68k_incpc (6); endlabel106: ; return 12 * CYCLE_UNIT / 2; } #endif /* CHK2.W #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_02f0_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword (2); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = (uae_s32)(uae_s16)get_word (dsta); upper = (uae_s32)(uae_s16)get_word (dsta + 2); if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s16)reg; SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel107; } } }}}}endlabel107: ; return 12 * CYCLE_UNIT / 2; } #endif /* CHK2.W #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_02f8_0)(uae_u32 opcode) { {{ uae_s16 extra = get_iword (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (4); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = (uae_s32)(uae_s16)get_word (dsta); upper = (uae_s32)(uae_s16)get_word (dsta + 2); if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s16)reg; SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel108; } } }}} m68k_incpc (6); endlabel108: ; return 12 * CYCLE_UNIT / 2; } #endif /* CHK2.W #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_02f9_0)(uae_u32 opcode) { {{ uae_s16 extra = get_iword (2); { uaecptr dsta = get_ilong (4); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = (uae_s32)(uae_s16)get_word (dsta); upper = (uae_s32)(uae_s16)get_word (dsta + 2); if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s16)reg; SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel109; } } }}} m68k_incpc (8); endlabel109: ; return 16 * CYCLE_UNIT / 2; } #endif /* CHK2.W #.W,(d16,PC) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_02fa_0)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 extra = get_iword (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_iword (4); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = (uae_s32)(uae_s16)get_word (dsta); upper = (uae_s32)(uae_s16)get_word (dsta + 2); if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s16)reg; SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel110; } } }}} m68k_incpc (6); endlabel110: ; return 12 * CYCLE_UNIT / 2; } #endif /* CHK2.W #.W,(d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_02fb_0)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 extra = get_iword (2); { uaecptr tmppc; uaecptr dsta; m68k_incpc (4); { tmppc = m68k_getpc (); dsta = get_disp_ea_020 (tmppc, next_iword ()); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = (uae_s32)(uae_s16)get_word (dsta); upper = (uae_s32)(uae_s16)get_word (dsta + 2); if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s16)reg; SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel111; } } }}}}endlabel111: ; return 12 * CYCLE_UNIT / 2; } #endif /* SUB.B #.B,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0400_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte (2); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* SUB.B #.B,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0410_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (4); return 20 * CYCLE_UNIT / 2; } /* SUB.B #.B,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0418_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (4); return 20 * CYCLE_UNIT / 2; } /* SUB.B #.B,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0420_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (4); return 22 * CYCLE_UNIT / 2; } /* SUB.B #.B,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0428_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (4); { uae_s8 dst = get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (6); return 24 * CYCLE_UNIT / 2; } /* SUB.B #.B,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0430_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte (2); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); { uae_s8 dst = get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}}}return 24 * CYCLE_UNIT / 2; } /* SUB.B #.B,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_0438_0)(uae_u32 opcode) { {{ uae_s8 src = get_ibyte (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (4); { uae_s8 dst = get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (6); return 24 * CYCLE_UNIT / 2; } /* SUB.B #.B,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_0439_0)(uae_u32 opcode) { {{ uae_s8 src = get_ibyte (2); { uaecptr dsta = get_ilong (4); { uae_s8 dst = get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (8); return 28 * CYCLE_UNIT / 2; } /* SUB.W #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0440_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* SUB.W #.W,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0450_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* SUB.W #.W,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0458_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) += 2; {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* SUB.W #.W,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0460_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* SUB.W #.W,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0468_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (4); { uae_s16 dst = get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* SUB.W #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0470_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); { uae_s16 dst = get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}}}return 20 * CYCLE_UNIT / 2; } /* SUB.W #.W,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_0478_0)(uae_u32 opcode) { {{ uae_s16 src = get_iword (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (4); { uae_s16 dst = get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* SUB.W #.W,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_0479_0)(uae_u32 opcode) { {{ uae_s16 src = get_iword (2); { uaecptr dsta = get_ilong (4); { uae_s16 dst = get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}} m68k_incpc (8); return 24 * CYCLE_UNIT / 2; } /* SUB.L #.L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0480_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong (2); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } /* SUB.L #.L,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0490_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}} m68k_incpc (6); return 28 * CYCLE_UNIT / 2; } /* SUB.L #.L,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0498_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) += 4; {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}} m68k_incpc (6); return 28 * CYCLE_UNIT / 2; } /* SUB.L #.L,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_04a0_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}} m68k_incpc (6); return 30 * CYCLE_UNIT / 2; } /* SUB.L #.L,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_04a8_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (6); { uae_s32 dst = get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}} m68k_incpc (8); return 32 * CYCLE_UNIT / 2; } /* SUB.L #.L,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_04b0_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong (2); { uaecptr dsta; m68k_incpc (6); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); { uae_s32 dst = get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}}}return 32 * CYCLE_UNIT / 2; } /* SUB.L #.L,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_04b8_0)(uae_u32 opcode) { {{ uae_s32 src = get_ilong (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (6); { uae_s32 dst = get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}} m68k_incpc (8); return 32 * CYCLE_UNIT / 2; } /* SUB.L #.L,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_04b9_0)(uae_u32 opcode) { {{ uae_s32 src = get_ilong (2); { uaecptr dsta = get_ilong (6); { uae_s32 dst = get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}} m68k_incpc (10); return 36 * CYCLE_UNIT / 2; } /* CHK2.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_04d0_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword (2); { uaecptr dsta = m68k_areg (regs, dstreg); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = get_long (dsta); upper = get_long (dsta + 4); SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel136; } } }}} m68k_incpc (4); endlabel136: ; return 8 * CYCLE_UNIT / 2; } #endif /* CHK2.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_04e8_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (4); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = get_long (dsta); upper = get_long (dsta + 4); SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel137; } } }}} m68k_incpc (6); endlabel137: ; return 12 * CYCLE_UNIT / 2; } #endif /* CHK2.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_04f0_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword (2); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = get_long (dsta); upper = get_long (dsta + 4); SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel138; } } }}}}endlabel138: ; return 12 * CYCLE_UNIT / 2; } #endif /* CHK2.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_04f8_0)(uae_u32 opcode) { {{ uae_s16 extra = get_iword (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (4); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = get_long (dsta); upper = get_long (dsta + 4); SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel139; } } }}} m68k_incpc (6); endlabel139: ; return 12 * CYCLE_UNIT / 2; } #endif /* CHK2.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_04f9_0)(uae_u32 opcode) { {{ uae_s16 extra = get_iword (2); { uaecptr dsta = get_ilong (4); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = get_long (dsta); upper = get_long (dsta + 4); SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel140; } } }}} m68k_incpc (8); endlabel140: ; return 16 * CYCLE_UNIT / 2; } #endif /* CHK2.L #.W,(d16,PC) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_04fa_0)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 extra = get_iword (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_iword (4); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = get_long (dsta); upper = get_long (dsta + 4); SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel141; } } }}} m68k_incpc (6); endlabel141: ; return 12 * CYCLE_UNIT / 2; } #endif /* CHK2.L #.W,(d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_04fb_0)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 extra = get_iword (2); { uaecptr tmppc; uaecptr dsta; m68k_incpc (4); { tmppc = m68k_getpc (); dsta = get_disp_ea_020 (tmppc, next_iword ()); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = get_long (dsta); upper = get_long (dsta + 4); SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel142; } } }}}}endlabel142: ; return 12 * CYCLE_UNIT / 2; } #endif /* ADD.B #.B,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0600_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte (2); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* ADD.B #.B,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0610_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (4); return 20 * CYCLE_UNIT / 2; } /* ADD.B #.B,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0618_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (4); return 20 * CYCLE_UNIT / 2; } /* ADD.B #.B,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0620_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (4); return 22 * CYCLE_UNIT / 2; } /* ADD.B #.B,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0628_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (4); { uae_s8 dst = get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (6); return 24 * CYCLE_UNIT / 2; } /* ADD.B #.B,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0630_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte (2); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); { uae_s8 dst = get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}}}return 24 * CYCLE_UNIT / 2; } /* ADD.B #.B,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_0638_0)(uae_u32 opcode) { {{ uae_s8 src = get_ibyte (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (4); { uae_s8 dst = get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (6); return 24 * CYCLE_UNIT / 2; } /* ADD.B #.B,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_0639_0)(uae_u32 opcode) { {{ uae_s8 src = get_ibyte (2); { uaecptr dsta = get_ilong (4); { uae_s8 dst = get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (8); return 28 * CYCLE_UNIT / 2; } /* ADD.W #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0640_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* ADD.W #.W,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0650_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* ADD.W #.W,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0658_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) += 2; {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* ADD.W #.W,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0660_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* ADD.W #.W,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0668_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (4); { uae_s16 dst = get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* ADD.W #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0670_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); { uae_s16 dst = get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}}}return 20 * CYCLE_UNIT / 2; } /* ADD.W #.W,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_0678_0)(uae_u32 opcode) { {{ uae_s16 src = get_iword (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (4); { uae_s16 dst = get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* ADD.W #.W,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_0679_0)(uae_u32 opcode) { {{ uae_s16 src = get_iword (2); { uaecptr dsta = get_ilong (4); { uae_s16 dst = get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}} m68k_incpc (8); return 24 * CYCLE_UNIT / 2; } /* ADD.L #.L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0680_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong (2); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } /* ADD.L #.L,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0690_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}} m68k_incpc (6); return 28 * CYCLE_UNIT / 2; } /* ADD.L #.L,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0698_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) += 4; {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}} m68k_incpc (6); return 28 * CYCLE_UNIT / 2; } /* ADD.L #.L,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_06a0_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}} m68k_incpc (6); return 30 * CYCLE_UNIT / 2; } /* ADD.L #.L,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_06a8_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (6); { uae_s32 dst = get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}} m68k_incpc (8); return 32 * CYCLE_UNIT / 2; } /* ADD.L #.L,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_06b0_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong (2); { uaecptr dsta; m68k_incpc (6); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); { uae_s32 dst = get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}}}return 32 * CYCLE_UNIT / 2; } /* ADD.L #.L,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_06b8_0)(uae_u32 opcode) { {{ uae_s32 src = get_ilong (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (6); { uae_s32 dst = get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}} m68k_incpc (8); return 32 * CYCLE_UNIT / 2; } /* ADD.L #.L,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_06b9_0)(uae_u32 opcode) { {{ uae_s32 src = get_ilong (2); { uaecptr dsta = get_ilong (6); { uae_s32 dst = get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}} m68k_incpc (10); return 36 * CYCLE_UNIT / 2; } /* RTM.L Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_06c0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); { m68k_incpc (2); op_illg (opcode); }return 4 * CYCLE_UNIT / 2; } #endif /* RTM.L An */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_06c8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); { m68k_incpc (2); op_illg (opcode); }return 4 * CYCLE_UNIT / 2; } #endif /* CALLM.L (An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_06d0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); { m68k_incpc (2); op_illg (opcode); }return 4 * CYCLE_UNIT / 2; } #endif /* CALLM.L (d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_06e8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); { m68k_incpc (2); op_illg (opcode); }return 4 * CYCLE_UNIT / 2; } #endif /* CALLM.L (d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_06f0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); { m68k_incpc (2); op_illg (opcode); }return 4 * CYCLE_UNIT / 2; } #endif /* CALLM.L (xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_06f8_0)(uae_u32 opcode) { { m68k_incpc (2); op_illg (opcode); }return 4 * CYCLE_UNIT / 2; } #endif /* CALLM.L (xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_06f9_0)(uae_u32 opcode) { { m68k_incpc (2); op_illg (opcode); }return 4 * CYCLE_UNIT / 2; } #endif /* CALLM.L (d16,PC) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_06fa_0)(uae_u32 opcode) { { m68k_incpc (2); op_illg (opcode); }return 4 * CYCLE_UNIT / 2; } #endif /* CALLM.L (d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_06fb_0)(uae_u32 opcode) { { m68k_incpc (2); op_illg (opcode); }return 4 * CYCLE_UNIT / 2; } #endif /* BTST.L #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0800_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= 31; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* BTST.B #.W,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0810_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* BTST.B #.W,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0818_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* BTST.B #.W,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0820_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) = dsta; src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpc (4); return 14 * CYCLE_UNIT / 2; } /* BTST.B #.W,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0828_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (4); { uae_s8 dst = get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* BTST.B #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0830_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); { uae_s8 dst = get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}}}return 16 * CYCLE_UNIT / 2; } /* BTST.B #.W,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_0838_0)(uae_u32 opcode) { {{ uae_s16 src = get_iword (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (4); { uae_s8 dst = get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* BTST.B #.W,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_0839_0)(uae_u32 opcode) { {{ uae_s16 src = get_iword (2); { uaecptr dsta = get_ilong (4); { uae_s8 dst = get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpc (8); return 20 * CYCLE_UNIT / 2; } /* BTST.B #.W,(d16,PC) */ uae_u32 REGPARAM2 CPUFUNC(op_083a_0)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 src = get_iword (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_iword (4); { uae_s8 dst = get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* BTST.B #.W,(d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_083b_0)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 src = get_iword (2); { uaecptr tmppc; uaecptr dsta; m68k_incpc (4); { tmppc = m68k_getpc (); dsta = get_disp_ea_020 (tmppc, next_iword ()); { uae_s8 dst = get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}}}return 16 * CYCLE_UNIT / 2; } /* BTST.B #.W,#.B */ uae_u32 REGPARAM2 CPUFUNC(op_083c_0)(uae_u32 opcode) { {{ uae_s16 src = get_iword (2); { uae_s8 dst = get_ibyte (4); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* BCHG.L #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0840_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= 31; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); m68k_dreg (regs, dstreg) = (dst); }}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* BCHG.B #.W,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0850_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); put_byte (dsta, dst); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* BCHG.B #.W,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0858_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); put_byte (dsta, dst); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* BCHG.B #.W,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0860_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) = dsta; src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); put_byte (dsta, dst); }}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* BCHG.B #.W,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0868_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (4); { uae_s8 dst = get_byte (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); put_byte (dsta, dst); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* BCHG.B #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0870_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); { uae_s8 dst = get_byte (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); put_byte (dsta, dst); }}}}}return 20 * CYCLE_UNIT / 2; } /* BCHG.B #.W,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_0878_0)(uae_u32 opcode) { {{ uae_s16 src = get_iword (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (4); { uae_s8 dst = get_byte (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); put_byte (dsta, dst); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* BCHG.B #.W,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_0879_0)(uae_u32 opcode) { {{ uae_s16 src = get_iword (2); { uaecptr dsta = get_ilong (4); { uae_s8 dst = get_byte (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); put_byte (dsta, dst); }}}} m68k_incpc (8); return 24 * CYCLE_UNIT / 2; } /* BCHG.B #.W,(d16,PC) */ uae_u32 REGPARAM2 CPUFUNC(op_087a_0)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 src = get_iword (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_iword (4); { uae_s8 dst = get_byte (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); put_byte (dsta, dst); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* BCHG.B #.W,(d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_087b_0)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 src = get_iword (2); { uaecptr tmppc; uaecptr dsta; m68k_incpc (4); { tmppc = m68k_getpc (); dsta = get_disp_ea_020 (tmppc, next_iword ()); { uae_s8 dst = get_byte (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); put_byte (dsta, dst); }}}}}return 20 * CYCLE_UNIT / 2; } /* BCLR.L #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0880_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= 31; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); m68k_dreg (regs, dstreg) = (dst); }}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* BCLR.B #.W,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0890_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); put_byte (dsta, dst); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* BCLR.B #.W,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0898_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); put_byte (dsta, dst); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* BCLR.B #.W,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_08a0_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) = dsta; src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); put_byte (dsta, dst); }}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* BCLR.B #.W,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_08a8_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (4); { uae_s8 dst = get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); put_byte (dsta, dst); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* BCLR.B #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_08b0_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); { uae_s8 dst = get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); put_byte (dsta, dst); }}}}}return 20 * CYCLE_UNIT / 2; } /* BCLR.B #.W,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_08b8_0)(uae_u32 opcode) { {{ uae_s16 src = get_iword (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (4); { uae_s8 dst = get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); put_byte (dsta, dst); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* BCLR.B #.W,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_08b9_0)(uae_u32 opcode) { {{ uae_s16 src = get_iword (2); { uaecptr dsta = get_ilong (4); { uae_s8 dst = get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); put_byte (dsta, dst); }}}} m68k_incpc (8); return 24 * CYCLE_UNIT / 2; } /* BCLR.B #.W,(d16,PC) */ uae_u32 REGPARAM2 CPUFUNC(op_08ba_0)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 src = get_iword (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_iword (4); { uae_s8 dst = get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); put_byte (dsta, dst); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* BCLR.B #.W,(d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_08bb_0)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 src = get_iword (2); { uaecptr tmppc; uaecptr dsta; m68k_incpc (4); { tmppc = m68k_getpc (); dsta = get_disp_ea_020 (tmppc, next_iword ()); { uae_s8 dst = get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); put_byte (dsta, dst); }}}}}return 20 * CYCLE_UNIT / 2; } /* BSET.L #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_08c0_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= 31; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); m68k_dreg (regs, dstreg) = (dst); }}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* BSET.B #.W,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_08d0_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); put_byte (dsta, dst); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* BSET.B #.W,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_08d8_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); put_byte (dsta, dst); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* BSET.B #.W,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_08e0_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) = dsta; src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); put_byte (dsta, dst); }}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* BSET.B #.W,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_08e8_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (4); { uae_s8 dst = get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); put_byte (dsta, dst); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* BSET.B #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_08f0_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); { uae_s8 dst = get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); put_byte (dsta, dst); }}}}}return 20 * CYCLE_UNIT / 2; } /* BSET.B #.W,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_08f8_0)(uae_u32 opcode) { {{ uae_s16 src = get_iword (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (4); { uae_s8 dst = get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); put_byte (dsta, dst); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* BSET.B #.W,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_08f9_0)(uae_u32 opcode) { {{ uae_s16 src = get_iword (2); { uaecptr dsta = get_ilong (4); { uae_s8 dst = get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); put_byte (dsta, dst); }}}} m68k_incpc (8); return 24 * CYCLE_UNIT / 2; } /* BSET.B #.W,(d16,PC) */ uae_u32 REGPARAM2 CPUFUNC(op_08fa_0)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 src = get_iword (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_iword (4); { uae_s8 dst = get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); put_byte (dsta, dst); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* BSET.B #.W,(d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_08fb_0)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 src = get_iword (2); { uaecptr tmppc; uaecptr dsta; m68k_incpc (4); { tmppc = m68k_getpc (); dsta = get_disp_ea_020 (tmppc, next_iword ()); { uae_s8 dst = get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); put_byte (dsta, dst); }}}}}return 20 * CYCLE_UNIT / 2; } /* EOR.B #.B,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0a00_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte (2); { uae_s8 dst = m68k_dreg (regs, dstreg); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* EOR.B #.B,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0a10_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); }}}} m68k_incpc (4); return 20 * CYCLE_UNIT / 2; } /* EOR.B #.B,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0a18_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); }}}} m68k_incpc (4); return 20 * CYCLE_UNIT / 2; } /* EOR.B #.B,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0a20_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) = dsta; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); }}}} m68k_incpc (4); return 22 * CYCLE_UNIT / 2; } /* EOR.B #.B,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0a28_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (4); { uae_s8 dst = get_byte (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); }}}} m68k_incpc (6); return 24 * CYCLE_UNIT / 2; } /* EOR.B #.B,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0a30_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte (2); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); { uae_s8 dst = get_byte (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); }}}}}return 24 * CYCLE_UNIT / 2; } /* EOR.B #.B,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_0a38_0)(uae_u32 opcode) { {{ uae_s8 src = get_ibyte (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (4); { uae_s8 dst = get_byte (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); }}}} m68k_incpc (6); return 24 * CYCLE_UNIT / 2; } /* EOR.B #.B,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_0a39_0)(uae_u32 opcode) { {{ uae_s8 src = get_ibyte (2); { uaecptr dsta = get_ilong (4); { uae_s8 dst = get_byte (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); }}}} m68k_incpc (8); return 28 * CYCLE_UNIT / 2; } /* EORSR.B #.W */ uae_u32 REGPARAM2 CPUFUNC(op_0a3c_0)(uae_u32 opcode) { { MakeSR (); { uae_s16 src = get_iword (2); src &= 0xFF; regs.sr ^= src; MakeFromSR (); }} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* EOR.W #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0a40_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uae_s16 dst = m68k_dreg (regs, dstreg); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* EOR.W #.W,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0a50_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = get_word (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* EOR.W #.W,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0a58_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) += 2; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* EOR.W #.W,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0a60_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) = dsta; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); }}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* EOR.W #.W,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0a68_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (4); { uae_s16 dst = get_word (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* EOR.W #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0a70_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); { uae_s16 dst = get_word (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); }}}}}return 20 * CYCLE_UNIT / 2; } /* EOR.W #.W,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_0a78_0)(uae_u32 opcode) { {{ uae_s16 src = get_iword (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (4); { uae_s16 dst = get_word (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* EOR.W #.W,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_0a79_0)(uae_u32 opcode) { {{ uae_s16 src = get_iword (2); { uaecptr dsta = get_ilong (4); { uae_s16 dst = get_word (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); }}}} m68k_incpc (8); return 24 * CYCLE_UNIT / 2; } /* EORSR.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_0a7c_0)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel234; } { MakeSR (); { uae_s16 src = get_iword (2); regs.sr ^= src; MakeFromSR (); }}} m68k_incpc (4); endlabel234: ; return 8 * CYCLE_UNIT / 2; } /* EOR.L #.L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0a80_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong (2); { uae_s32 dst = m68k_dreg (regs, dstreg); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } #endif #ifdef PART_2 /* EOR.L #.L,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0a90_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = get_long (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); }}}} m68k_incpc (6); return 28 * CYCLE_UNIT / 2; } /* EOR.L #.L,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0a98_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) += 4; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); }}}} m68k_incpc (6); return 28 * CYCLE_UNIT / 2; } /* EOR.L #.L,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0aa0_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) = dsta; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); }}}} m68k_incpc (6); return 30 * CYCLE_UNIT / 2; } /* EOR.L #.L,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0aa8_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (6); { uae_s32 dst = get_long (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); }}}} m68k_incpc (8); return 32 * CYCLE_UNIT / 2; } /* EOR.L #.L,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0ab0_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong (2); { uaecptr dsta; m68k_incpc (6); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); { uae_s32 dst = get_long (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); }}}}}return 32 * CYCLE_UNIT / 2; } /* EOR.L #.L,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_0ab8_0)(uae_u32 opcode) { {{ uae_s32 src = get_ilong (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (6); { uae_s32 dst = get_long (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); }}}} m68k_incpc (8); return 32 * CYCLE_UNIT / 2; } /* EOR.L #.L,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_0ab9_0)(uae_u32 opcode) { {{ uae_s32 src = get_ilong (2); { uaecptr dsta = get_ilong (6); { uae_s32 dst = get_long (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); }}}} m68k_incpc (10); return 36 * CYCLE_UNIT / 2; } /* CAS.B #.W,(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0ad0_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte (dsta); { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(m68k_dreg (regs, rc))); { int flgs = ((uae_s8)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(m68k_dreg (regs, rc))) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); m68k_incpc (4); if (GET_ZFLG ()){ put_byte (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = (m68k_dreg(regs, rc) & ~0xff) | (dst & 0xff); }}}}}}}}return 16 * CYCLE_UNIT / 2; } #endif /* CAS.B #.W,(An)+ */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0ad8_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(m68k_dreg (regs, rc))); { int flgs = ((uae_s8)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(m68k_dreg (regs, rc))) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); m68k_incpc (4); if (GET_ZFLG ()){ put_byte (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = (m68k_dreg(regs, rc) & ~0xff) | (dst & 0xff); }}}}}}}}return 16 * CYCLE_UNIT / 2; } #endif /* CAS.B #.W,-(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0ae0_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) = dsta; { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(m68k_dreg (regs, rc))); { int flgs = ((uae_s8)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(m68k_dreg (regs, rc))) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); m68k_incpc (4); if (GET_ZFLG ()){ put_byte (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = (m68k_dreg(regs, rc) & ~0xff) | (dst & 0xff); }}}}}}}}return 18 * CYCLE_UNIT / 2; } #endif /* CAS.B #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0ae8_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (4); { uae_s8 dst = get_byte (dsta); { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(m68k_dreg (regs, rc))); { int flgs = ((uae_s8)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(m68k_dreg (regs, rc))) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); m68k_incpc (6); if (GET_ZFLG ()){ put_byte (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = (m68k_dreg(regs, rc) & ~0xff) | (dst & 0xff); }}}}}}}}return 20 * CYCLE_UNIT / 2; } #endif /* CAS.B #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0af0_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); { uae_s8 dst = get_byte (dsta); { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(m68k_dreg (regs, rc))); { int flgs = ((uae_s8)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(m68k_dreg (regs, rc))) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); if (GET_ZFLG ()){ put_byte (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = (m68k_dreg(regs, rc) & ~0xff) | (dst & 0xff); }}}}}}}}}return 20 * CYCLE_UNIT / 2; } #endif /* CAS.B #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0af8_0)(uae_u32 opcode) { {{ uae_s16 src = get_iword (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (4); { uae_s8 dst = get_byte (dsta); { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(m68k_dreg (regs, rc))); { int flgs = ((uae_s8)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(m68k_dreg (regs, rc))) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); m68k_incpc (6); if (GET_ZFLG ()){ put_byte (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = (m68k_dreg(regs, rc) & ~0xff) | (dst & 0xff); }}}}}}}}return 20 * CYCLE_UNIT / 2; } #endif /* CAS.B #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0af9_0)(uae_u32 opcode) { {{ uae_s16 src = get_iword (2); { uaecptr dsta = get_ilong (4); { uae_s8 dst = get_byte (dsta); { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(m68k_dreg (regs, rc))); { int flgs = ((uae_s8)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(m68k_dreg (regs, rc))) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); m68k_incpc (8); if (GET_ZFLG ()){ put_byte (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = (m68k_dreg(regs, rc) & ~0xff) | (dst & 0xff); }}}}}}}}return 24 * CYCLE_UNIT / 2; } #endif /* CMP.B #.B,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0c00_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte (2); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* CMP.B #.B,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0c10_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* CMP.B #.B,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0c18_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* CMP.B #.B,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0c20_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* CMP.B #.B,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0c28_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (4); { uae_s8 dst = get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* CMP.B #.B,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0c30_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte (2); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); { uae_s8 dst = get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}}}return 20 * CYCLE_UNIT / 2; } /* CMP.B #.B,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_0c38_0)(uae_u32 opcode) { {{ uae_s8 src = get_ibyte (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (4); { uae_s8 dst = get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* CMP.B #.B,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_0c39_0)(uae_u32 opcode) { {{ uae_s8 src = get_ibyte (2); { uaecptr dsta = get_ilong (4); { uae_s8 dst = get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (8); return 24 * CYCLE_UNIT / 2; } /* CMP.B #.B,(d16,PC) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0c3a_0)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s8 src = get_ibyte (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_iword (4); { uae_s8 dst = get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } #endif /* CMP.B #.B,(d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0c3b_0)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s8 src = get_ibyte (2); { uaecptr tmppc; uaecptr dsta; m68k_incpc (4); { tmppc = m68k_getpc (); dsta = get_disp_ea_020 (tmppc, next_iword ()); { uae_s8 dst = get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}}}return 20 * CYCLE_UNIT / 2; } #endif /* CMP.W #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0c40_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* CMP.W #.W,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0c50_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* CMP.W #.W,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0c58_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) += 2; {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* CMP.W #.W,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0c60_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (4); return 14 * CYCLE_UNIT / 2; } /* CMP.W #.W,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0c68_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (4); { uae_s16 dst = get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* CMP.W #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0c70_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); { uae_s16 dst = get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}}}return 16 * CYCLE_UNIT / 2; } /* CMP.W #.W,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_0c78_0)(uae_u32 opcode) { {{ uae_s16 src = get_iword (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (4); { uae_s16 dst = get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* CMP.W #.W,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_0c79_0)(uae_u32 opcode) { {{ uae_s16 src = get_iword (2); { uaecptr dsta = get_ilong (4); { uae_s16 dst = get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (8); return 20 * CYCLE_UNIT / 2; } /* CMP.W #.W,(d16,PC) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0c7a_0)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 src = get_iword (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_iword (4); { uae_s16 dst = get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } #endif /* CMP.W #.W,(d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0c7b_0)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 src = get_iword (2); { uaecptr tmppc; uaecptr dsta; m68k_incpc (4); { tmppc = m68k_getpc (); dsta = get_disp_ea_020 (tmppc, next_iword ()); { uae_s16 dst = get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}}}return 16 * CYCLE_UNIT / 2; } #endif /* CMP.L #.L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0c80_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong (2); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } /* CMP.L #.L,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0c90_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* CMP.L #.L,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0c98_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) += 4; {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* CMP.L #.L,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0ca0_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (6); return 22 * CYCLE_UNIT / 2; } /* CMP.L #.L,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0ca8_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (6); { uae_s32 dst = get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (8); return 24 * CYCLE_UNIT / 2; } /* CMP.L #.L,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0cb0_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong (2); { uaecptr dsta; m68k_incpc (6); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); { uae_s32 dst = get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}}return 24 * CYCLE_UNIT / 2; } /* CMP.L #.L,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_0cb8_0)(uae_u32 opcode) { {{ uae_s32 src = get_ilong (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (6); { uae_s32 dst = get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (8); return 24 * CYCLE_UNIT / 2; } /* CMP.L #.L,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_0cb9_0)(uae_u32 opcode) { {{ uae_s32 src = get_ilong (2); { uaecptr dsta = get_ilong (6); { uae_s32 dst = get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (10); return 28 * CYCLE_UNIT / 2; } /* CMP.L #.L,(d16,PC) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0cba_0)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s32 src = get_ilong (2); { uaecptr dsta = m68k_getpc () + 6; dsta += (uae_s32)(uae_s16)get_iword (6); { uae_s32 dst = get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (8); return 24 * CYCLE_UNIT / 2; } #endif /* CMP.L #.L,(d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0cbb_0)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s32 src = get_ilong (2); { uaecptr tmppc; uaecptr dsta; m68k_incpc (6); { tmppc = m68k_getpc (); dsta = get_disp_ea_020 (tmppc, next_iword ()); { uae_s32 dst = get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}}return 24 * CYCLE_UNIT / 2; } #endif /* CAS.W #.W,(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0cd0_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = get_word (dsta); if ((dsta & 1) && currprefs.cpu_compatible && get_cpu_model () == 68060) { op_unimpl (); goto endlabel280; } { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(m68k_dreg (regs, rc))); { int flgs = ((uae_s16)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(m68k_dreg (regs, rc))) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); m68k_incpc (4); if (GET_ZFLG ()){ put_word (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = (m68k_dreg(regs, rc) & ~0xffff) | (dst & 0xffff); }}}}}}}}endlabel280: ; return 16 * CYCLE_UNIT / 2; } #endif /* CAS.W #.W,(An)+ */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0cd8_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) += 2; if ((dsta & 1) && currprefs.cpu_compatible && get_cpu_model () == 68060) { op_unimpl (); goto endlabel281; } { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(m68k_dreg (regs, rc))); { int flgs = ((uae_s16)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(m68k_dreg (regs, rc))) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); m68k_incpc (4); if (GET_ZFLG ()){ put_word (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = (m68k_dreg(regs, rc) & ~0xffff) | (dst & 0xffff); }}}}}}}}endlabel281: ; return 16 * CYCLE_UNIT / 2; } #endif /* CAS.W #.W,-(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0ce0_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) = dsta; if ((dsta & 1) && currprefs.cpu_compatible && get_cpu_model () == 68060) { op_unimpl (); goto endlabel282; } { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(m68k_dreg (regs, rc))); { int flgs = ((uae_s16)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(m68k_dreg (regs, rc))) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); m68k_incpc (4); if (GET_ZFLG ()){ put_word (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = (m68k_dreg(regs, rc) & ~0xffff) | (dst & 0xffff); }}}}}}}}endlabel282: ; return 18 * CYCLE_UNIT / 2; } #endif /* CAS.W #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0ce8_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (4); { uae_s16 dst = get_word (dsta); if ((dsta & 1) && currprefs.cpu_compatible && get_cpu_model () == 68060) { op_unimpl (); goto endlabel283; } { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(m68k_dreg (regs, rc))); { int flgs = ((uae_s16)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(m68k_dreg (regs, rc))) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); m68k_incpc (6); if (GET_ZFLG ()){ put_word (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = (m68k_dreg(regs, rc) & ~0xffff) | (dst & 0xffff); }}}}}}}}endlabel283: ; return 20 * CYCLE_UNIT / 2; } #endif /* CAS.W #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0cf0_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); { uae_s16 dst = get_word (dsta); if ((dsta & 1) && currprefs.cpu_compatible && get_cpu_model () == 68060) { op_unimpl (); goto endlabel284; } { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(m68k_dreg (regs, rc))); { int flgs = ((uae_s16)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(m68k_dreg (regs, rc))) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); if (GET_ZFLG ()){ put_word (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = (m68k_dreg(regs, rc) & ~0xffff) | (dst & 0xffff); }}}}}}}}}endlabel284: ; return 20 * CYCLE_UNIT / 2; } #endif /* CAS.W #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0cf8_0)(uae_u32 opcode) { {{ uae_s16 src = get_iword (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (4); { uae_s16 dst = get_word (dsta); if ((dsta & 1) && currprefs.cpu_compatible && get_cpu_model () == 68060) { op_unimpl (); goto endlabel285; } { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(m68k_dreg (regs, rc))); { int flgs = ((uae_s16)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(m68k_dreg (regs, rc))) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); m68k_incpc (6); if (GET_ZFLG ()){ put_word (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = (m68k_dreg(regs, rc) & ~0xffff) | (dst & 0xffff); }}}}}}}}endlabel285: ; return 20 * CYCLE_UNIT / 2; } #endif /* CAS.W #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0cf9_0)(uae_u32 opcode) { {{ uae_s16 src = get_iword (2); { uaecptr dsta = get_ilong (4); { uae_s16 dst = get_word (dsta); if ((dsta & 1) && currprefs.cpu_compatible && get_cpu_model () == 68060) { op_unimpl (); goto endlabel286; } { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(m68k_dreg (regs, rc))); { int flgs = ((uae_s16)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(m68k_dreg (regs, rc))) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); m68k_incpc (8); if (GET_ZFLG ()){ put_word (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = (m68k_dreg(regs, rc) & ~0xffff) | (dst & 0xffff); }}}}}}}}endlabel286: ; return 24 * CYCLE_UNIT / 2; } #endif /* CAS2.W #.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0cfc_0)(uae_u32 opcode) { {{ uae_s32 extra = get_ilong (2); uae_u32 rn1 = regs.regs[(extra >> 28) & 15]; uae_u32 rn2 = regs.regs[(extra >> 12) & 15]; uae_u16 dst1 = get_word (rn1), dst2 = get_word (rn2); {uae_u32 newv = ((uae_s16)(dst1)) - ((uae_s16)(m68k_dreg (regs, (extra >> 16) & 7))); { int flgs = ((uae_s16)(m68k_dreg (regs, (extra >> 16) & 7))) < 0; int flgo = ((uae_s16)(dst1)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(m68k_dreg (regs, (extra >> 16) & 7))) > ((uae_u16)(dst1))); SET_NFLG (flgn != 0); if (GET_ZFLG ()) { {uae_u32 newv = ((uae_s16)(dst2)) - ((uae_s16)(m68k_dreg (regs, extra & 7))); { int flgs = ((uae_s16)(m68k_dreg (regs, extra & 7))) < 0; int flgo = ((uae_s16)(dst2)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(m68k_dreg (regs, extra & 7))) > ((uae_u16)(dst2))); SET_NFLG (flgn != 0); if (GET_ZFLG ()) { put_word (rn1, m68k_dreg (regs, (extra >> 22) & 7)); put_word (rn2, m68k_dreg (regs, (extra >> 6) & 7)); }} }}}} if (! GET_ZFLG ()) { m68k_dreg (regs, (extra >> 6) & 7) = (m68k_dreg (regs, (extra >> 6) & 7) & ~0xffff) | (dst2 & 0xffff); m68k_dreg (regs, (extra >> 22) & 7) = (m68k_dreg (regs, (extra >> 22) & 7) & ~0xffff) | (dst1 & 0xffff); } }} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } #endif /* MOVES.B #.W,(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0e10_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel288; } {{ uae_s16 extra = get_iword (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = m68k_areg (regs, dstreg); put_byte (dsta, src); }}else{{ uaecptr srca = m68k_areg (regs, dstreg); { uae_s8 src = get_byte (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = (uae_s32)(uae_s8)src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (m68k_dreg (regs, (extra >> 12) & 7) & ~0xff) | ((src) & 0xff); } }}} m68k_incpc (4); }}}endlabel288: ; return 16 * CYCLE_UNIT / 2; } #endif /* MOVES.B #.W,(An)+ */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0e18_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel289; } {{ uae_s16 extra = get_iword (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; put_byte (dsta, src); }}else{{ uaecptr srca = m68k_areg (regs, dstreg); { uae_s8 src = get_byte (srca); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = (uae_s32)(uae_s8)src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (m68k_dreg (regs, (extra >> 12) & 7) & ~0xff) | ((src) & 0xff); } }}} m68k_incpc (4); }}}endlabel289: ; return 16 * CYCLE_UNIT / 2; } #endif /* MOVES.B #.W,-(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0e20_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel290; } {{ uae_s16 extra = get_iword (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; put_byte (dsta, src); }}else{{ uaecptr srca; srca = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 src = get_byte (srca); m68k_areg (regs, dstreg) = srca; if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = (uae_s32)(uae_s8)src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (m68k_dreg (regs, (extra >> 12) & 7) & ~0xff) | ((src) & 0xff); } }}} m68k_incpc (4); }}}endlabel290: ; return 20 * CYCLE_UNIT / 2; } #endif /* MOVES.B #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0e28_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel291; } {{ uae_s16 extra = get_iword (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (4); put_byte (dsta, src); }}else{{ uaecptr srca = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (4); { uae_s8 src = get_byte (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = (uae_s32)(uae_s8)src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (m68k_dreg (regs, (extra >> 12) & 7) & ~0xff) | ((src) & 0xff); } }}} m68k_incpc (6); }}}endlabel291: ; return 24 * CYCLE_UNIT / 2; } #endif /* MOVES.B #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0e30_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel292; } {{ uae_s16 extra = get_iword (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); put_byte (dsta, src); }}}else{{ uaecptr srca; m68k_incpc (4); { srca = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); { uae_s8 src = get_byte (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = (uae_s32)(uae_s8)src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (m68k_dreg (regs, (extra >> 12) & 7) & ~0xff) | ((src) & 0xff); } }}}}}}}endlabel292: ; return 24 * CYCLE_UNIT / 2; } #endif /* MOVES.B #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0e38_0)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel293; } {{ uae_s16 extra = get_iword (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = (uae_s32)(uae_s16)get_iword (4); put_byte (dsta, src); }}else{{ uaecptr srca = (uae_s32)(uae_s16)get_iword (4); { uae_s8 src = get_byte (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = (uae_s32)(uae_s8)src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (m68k_dreg (regs, (extra >> 12) & 7) & ~0xff) | ((src) & 0xff); } }}} m68k_incpc (6); }}}endlabel293: ; return 24 * CYCLE_UNIT / 2; } #endif /* MOVES.B #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0e39_0)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel294; } {{ uae_s16 extra = get_iword (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = get_ilong (4); put_byte (dsta, src); }}else{{ uaecptr srca = get_ilong (4); { uae_s8 src = get_byte (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = (uae_s32)(uae_s8)src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (m68k_dreg (regs, (extra >> 12) & 7) & ~0xff) | ((src) & 0xff); } }}} m68k_incpc (8); }}}endlabel294: ; return 32 * CYCLE_UNIT / 2; } #endif /* MOVES.W #.W,(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0e50_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel295; } {{ uae_s16 extra = get_iword (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = m68k_areg (regs, dstreg); put_word (dsta, src); }}else{{ uaecptr srca = m68k_areg (regs, dstreg); { uae_s16 src = get_word (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = (uae_s32)(uae_s16)src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (m68k_dreg (regs, (extra >> 12) & 7) & ~0xffff) | ((src) & 0xffff); } }}} m68k_incpc (4); }}}endlabel295: ; return 16 * CYCLE_UNIT / 2; } #endif /* MOVES.W #.W,(An)+ */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0e58_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel296; } {{ uae_s16 extra = get_iword (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 2; put_word (dsta, src); }}else{{ uaecptr srca = m68k_areg (regs, dstreg); { uae_s16 src = get_word (srca); m68k_areg (regs, dstreg) += 2; if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = (uae_s32)(uae_s16)src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (m68k_dreg (regs, (extra >> 12) & 7) & ~0xffff) | ((src) & 0xffff); } }}} m68k_incpc (4); }}}endlabel296: ; return 16 * CYCLE_UNIT / 2; } #endif /* MOVES.W #.W,-(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0e60_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel297; } {{ uae_s16 extra = get_iword (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; m68k_areg (regs, dstreg) = dsta; put_word (dsta, src); }}else{{ uaecptr srca; srca = m68k_areg (regs, dstreg) - 2; { uae_s16 src = get_word (srca); m68k_areg (regs, dstreg) = srca; if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = (uae_s32)(uae_s16)src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (m68k_dreg (regs, (extra >> 12) & 7) & ~0xffff) | ((src) & 0xffff); } }}} m68k_incpc (4); }}}endlabel297: ; return 20 * CYCLE_UNIT / 2; } #endif /* MOVES.W #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0e68_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel298; } {{ uae_s16 extra = get_iword (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (4); put_word (dsta, src); }}else{{ uaecptr srca = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (4); { uae_s16 src = get_word (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = (uae_s32)(uae_s16)src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (m68k_dreg (regs, (extra >> 12) & 7) & ~0xffff) | ((src) & 0xffff); } }}} m68k_incpc (6); }}}endlabel298: ; return 24 * CYCLE_UNIT / 2; } #endif /* MOVES.W #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0e70_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel299; } {{ uae_s16 extra = get_iword (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); put_word (dsta, src); }}}else{{ uaecptr srca; m68k_incpc (4); { srca = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); { uae_s16 src = get_word (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = (uae_s32)(uae_s16)src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (m68k_dreg (regs, (extra >> 12) & 7) & ~0xffff) | ((src) & 0xffff); } }}}}}}}endlabel299: ; return 24 * CYCLE_UNIT / 2; } #endif /* MOVES.W #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0e78_0)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel300; } {{ uae_s16 extra = get_iword (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = (uae_s32)(uae_s16)get_iword (4); put_word (dsta, src); }}else{{ uaecptr srca = (uae_s32)(uae_s16)get_iword (4); { uae_s16 src = get_word (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = (uae_s32)(uae_s16)src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (m68k_dreg (regs, (extra >> 12) & 7) & ~0xffff) | ((src) & 0xffff); } }}} m68k_incpc (6); }}}endlabel300: ; return 24 * CYCLE_UNIT / 2; } #endif /* MOVES.W #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0e79_0)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel301; } {{ uae_s16 extra = get_iword (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = get_ilong (4); put_word (dsta, src); }}else{{ uaecptr srca = get_ilong (4); { uae_s16 src = get_word (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = (uae_s32)(uae_s16)src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (m68k_dreg (regs, (extra >> 12) & 7) & ~0xffff) | ((src) & 0xffff); } }}} m68k_incpc (8); }}}endlabel301: ; return 32 * CYCLE_UNIT / 2; } #endif /* MOVES.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0e90_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel302; } {{ uae_s16 extra = get_iword (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = m68k_areg (regs, dstreg); put_long (dsta, src); }}else{{ uaecptr srca = m68k_areg (regs, dstreg); { uae_s32 src = get_long (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (src); } }}} m68k_incpc (4); }}}endlabel302: ; return 24 * CYCLE_UNIT / 2; } #endif /* MOVES.L #.W,(An)+ */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0e98_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel303; } {{ uae_s16 extra = get_iword (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 4; put_long (dsta, src); }}else{{ uaecptr srca = m68k_areg (regs, dstreg); { uae_s32 src = get_long (srca); m68k_areg (regs, dstreg) += 4; if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (src); } }}} m68k_incpc (4); }}}endlabel303: ; return 24 * CYCLE_UNIT / 2; } #endif /* MOVES.L #.W,-(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0ea0_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel304; } {{ uae_s16 extra = get_iword (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; m68k_areg (regs, dstreg) = dsta; put_long (dsta, src); }}else{{ uaecptr srca; srca = m68k_areg (regs, dstreg) - 4; { uae_s32 src = get_long (srca); m68k_areg (regs, dstreg) = srca; if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (src); } }}} m68k_incpc (4); }}}endlabel304: ; return 28 * CYCLE_UNIT / 2; } #endif /* MOVES.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0ea8_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel305; } {{ uae_s16 extra = get_iword (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (4); put_long (dsta, src); }}else{{ uaecptr srca = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (4); { uae_s32 src = get_long (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (src); } }}} m68k_incpc (6); }}}endlabel305: ; return 32 * CYCLE_UNIT / 2; } #endif /* MOVES.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0eb0_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel306; } {{ uae_s16 extra = get_iword (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); put_long (dsta, src); }}}else{{ uaecptr srca; m68k_incpc (4); { srca = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); { uae_s32 src = get_long (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (src); } }}}}}}}endlabel306: ; return 32 * CYCLE_UNIT / 2; } #endif /* MOVES.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0eb8_0)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel307; } {{ uae_s16 extra = get_iword (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = (uae_s32)(uae_s16)get_iword (4); put_long (dsta, src); }}else{{ uaecptr srca = (uae_s32)(uae_s16)get_iword (4); { uae_s32 src = get_long (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (src); } }}} m68k_incpc (6); }}}endlabel307: ; return 32 * CYCLE_UNIT / 2; } #endif /* MOVES.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0eb9_0)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel308; } {{ uae_s16 extra = get_iword (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = get_ilong (4); put_long (dsta, src); }}else{{ uaecptr srca = get_ilong (4); { uae_s32 src = get_long (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (src); } }}} m68k_incpc (8); }}}endlabel308: ; return 40 * CYCLE_UNIT / 2; } #endif /* CAS.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0ed0_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = get_long (dsta); if ((dsta & 3) && currprefs.cpu_compatible && get_cpu_model () == 68060) { op_unimpl (); goto endlabel309; } { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(m68k_dreg (regs, rc))); { int flgs = ((uae_s32)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(m68k_dreg (regs, rc))) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); m68k_incpc (4); if (GET_ZFLG ()){ put_long (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = dst; }}}}}}}}endlabel309: ; return 24 * CYCLE_UNIT / 2; } #endif /* CAS.L #.W,(An)+ */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0ed8_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) += 4; if ((dsta & 3) && currprefs.cpu_compatible && get_cpu_model () == 68060) { op_unimpl (); goto endlabel310; } { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(m68k_dreg (regs, rc))); { int flgs = ((uae_s32)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(m68k_dreg (regs, rc))) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); m68k_incpc (4); if (GET_ZFLG ()){ put_long (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = dst; }}}}}}}}endlabel310: ; return 24 * CYCLE_UNIT / 2; } #endif /* CAS.L #.W,-(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0ee0_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) = dsta; if ((dsta & 3) && currprefs.cpu_compatible && get_cpu_model () == 68060) { op_unimpl (); goto endlabel311; } { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(m68k_dreg (regs, rc))); { int flgs = ((uae_s32)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(m68k_dreg (regs, rc))) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); m68k_incpc (4); if (GET_ZFLG ()){ put_long (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = dst; }}}}}}}}endlabel311: ; return 26 * CYCLE_UNIT / 2; } #endif /* CAS.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0ee8_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (4); { uae_s32 dst = get_long (dsta); if ((dsta & 3) && currprefs.cpu_compatible && get_cpu_model () == 68060) { op_unimpl (); goto endlabel312; } { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(m68k_dreg (regs, rc))); { int flgs = ((uae_s32)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(m68k_dreg (regs, rc))) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); m68k_incpc (6); if (GET_ZFLG ()){ put_long (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = dst; }}}}}}}}endlabel312: ; return 28 * CYCLE_UNIT / 2; } #endif /* CAS.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0ef0_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); { uae_s32 dst = get_long (dsta); if ((dsta & 3) && currprefs.cpu_compatible && get_cpu_model () == 68060) { op_unimpl (); goto endlabel313; } { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(m68k_dreg (regs, rc))); { int flgs = ((uae_s32)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(m68k_dreg (regs, rc))) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); if (GET_ZFLG ()){ put_long (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = dst; }}}}}}}}}endlabel313: ; return 28 * CYCLE_UNIT / 2; } #endif /* CAS.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0ef8_0)(uae_u32 opcode) { {{ uae_s16 src = get_iword (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (4); { uae_s32 dst = get_long (dsta); if ((dsta & 3) && currprefs.cpu_compatible && get_cpu_model () == 68060) { op_unimpl (); goto endlabel314; } { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(m68k_dreg (regs, rc))); { int flgs = ((uae_s32)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(m68k_dreg (regs, rc))) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); m68k_incpc (6); if (GET_ZFLG ()){ put_long (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = dst; }}}}}}}}endlabel314: ; return 28 * CYCLE_UNIT / 2; } #endif /* CAS.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0ef9_0)(uae_u32 opcode) { {{ uae_s16 src = get_iword (2); { uaecptr dsta = get_ilong (4); { uae_s32 dst = get_long (dsta); if ((dsta & 3) && currprefs.cpu_compatible && get_cpu_model () == 68060) { op_unimpl (); goto endlabel315; } { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(m68k_dreg (regs, rc))); { int flgs = ((uae_s32)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(m68k_dreg (regs, rc))) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); m68k_incpc (8); if (GET_ZFLG ()){ put_long (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = dst; }}}}}}}}endlabel315: ; return 32 * CYCLE_UNIT / 2; } #endif /* CAS2.L #.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0efc_0)(uae_u32 opcode) { {{ uae_s32 extra = get_ilong (2); uae_u32 rn1 = regs.regs[(extra >> 28) & 15]; uae_u32 rn2 = regs.regs[(extra >> 12) & 15]; uae_u32 dst1 = get_long (rn1), dst2 = get_long (rn2); {uae_u32 newv = ((uae_s32)(dst1)) - ((uae_s32)(m68k_dreg (regs, (extra >> 16) & 7))); { int flgs = ((uae_s32)(m68k_dreg (regs, (extra >> 16) & 7))) < 0; int flgo = ((uae_s32)(dst1)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(m68k_dreg (regs, (extra >> 16) & 7))) > ((uae_u32)(dst1))); SET_NFLG (flgn != 0); if (GET_ZFLG ()) { {uae_u32 newv = ((uae_s32)(dst2)) - ((uae_s32)(m68k_dreg (regs, extra & 7))); { int flgs = ((uae_s32)(m68k_dreg (regs, extra & 7))) < 0; int flgo = ((uae_s32)(dst2)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(m68k_dreg (regs, extra & 7))) > ((uae_u32)(dst2))); SET_NFLG (flgn != 0); if (GET_ZFLG ()) { put_long (rn1, m68k_dreg (regs, (extra >> 22) & 7)); put_long (rn2, m68k_dreg (regs, (extra >> 6) & 7)); }} }}}} if (! GET_ZFLG ()) { m68k_dreg (regs, (extra >> 6) & 7) = dst2; m68k_dreg (regs, (extra >> 22) & 7) = dst1; } }} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } #endif /* MOVE.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_1000_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); m68k_incpc (2); }}}return 4 * CYCLE_UNIT / 2; } /* MOVE.B (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_1010_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); m68k_incpc (2); }}}}return 8 * CYCLE_UNIT / 2; } /* MOVE.B (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_1018_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); m68k_incpc (2); }}}}return 8 * CYCLE_UNIT / 2; } /* MOVE.B -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_1020_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) = srca; { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); m68k_incpc (2); }}}}return 10 * CYCLE_UNIT / 2; } /* MOVE.B (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_1028_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s8 src = get_byte (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); m68k_incpc (4); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.B (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_1030_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s8 src = get_byte (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.B (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_1038_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s8 src = get_byte (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); m68k_incpc (4); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.B (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_1039_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong (2); { uae_s8 src = get_byte (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); m68k_incpc (6); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_103a_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword (2); { uae_s8 src = get_byte (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); m68k_incpc (4); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.B (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_103b_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword ()); { uae_s8 src = get_byte (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.B #.B,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_103c_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = get_ibyte (2); { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); m68k_incpc (4); }}}return 12 * CYCLE_UNIT / 2; } /* MOVE.B Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_1080_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (2); }}}return 8 * CYCLE_UNIT / 2; } /* MOVE.B (An),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_1090_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (2); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.B (An)+,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_1098_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (2); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.B -(An),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_10a0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (2); }}}}return 14 * CYCLE_UNIT / 2; } /* MOVE.B (d16,An),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_10a8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s8 src = get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (4); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B (d8,An,Xn),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_10b0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s8 src = get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); }}}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B (xxx).W,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_10b8_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s8 src = get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (4); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B (xxx).L,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_10b9_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong (2); { uae_s8 src = get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (6); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.B (d16,PC),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_10ba_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword (2); { uae_s8 src = get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (4); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B (d8,PC,Xn),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_10bb_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword ()); { uae_s8 src = get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); }}}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B #.B,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_10bc_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = get_ibyte (2); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (4); }}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_10c0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (2); }}}return 8 * CYCLE_UNIT / 2; } /* MOVE.B (An),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_10d0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (2); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.B (An)+,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_10d8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (2); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.B -(An),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_10e0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (2); }}}}return 14 * CYCLE_UNIT / 2; } /* MOVE.B (d16,An),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_10e8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s8 src = get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (4); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B (d8,An,Xn),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_10f0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s8 src = get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); }}}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B (xxx).W,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_10f8_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s8 src = get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (4); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B (xxx).L,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_10f9_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong (2); { uae_s8 src = get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (6); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.B (d16,PC),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_10fa_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword (2); { uae_s8 src = get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (4); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B (d8,PC,Xn),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_10fb_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword ()); { uae_s8 src = get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); }}}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B #.B,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_10fc_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = get_ibyte (2); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (4); }}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_1100_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (2); }}}return 8 * CYCLE_UNIT / 2; } /* MOVE.B (An),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_1110_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (2); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.B (An)+,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_1118_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (2); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.B -(An),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_1120_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (2); }}}}return 14 * CYCLE_UNIT / 2; } /* MOVE.B (d16,An),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_1128_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s8 src = get_byte (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (4); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B (d8,An,Xn),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_1130_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s8 src = get_byte (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); }}}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B (xxx).W,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_1138_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s8 src = get_byte (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (4); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B (xxx).L,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_1139_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong (2); { uae_s8 src = get_byte (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (6); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.B (d16,PC),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_113a_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword (2); { uae_s8 src = get_byte (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (4); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B (d8,PC,Xn),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_113b_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword ()); { uae_s8 src = get_byte (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); }}}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B #.B,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_113c_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = get_ibyte (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (4); }}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_1140_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (4); }}}return 12 * CYCLE_UNIT / 2; } /* MOVE.B (An),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_1150_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (4); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B (An)+,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_1158_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (4); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B -(An),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_1160_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (4); }}}}return 18 * CYCLE_UNIT / 2; } /* MOVE.B (d16,An),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_1168_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s8 src = get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (6); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.B (d8,An,Xn),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_1170_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s8 src = get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (0); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (2); }}}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.B (xxx).W,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_1178_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s8 src = get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (6); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.B (xxx).L,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_1179_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong (2); { uae_s8 src = get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (6); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (8); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.B (d16,PC),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_117a_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword (2); { uae_s8 src = get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (6); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.B (d8,PC,Xn),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_117b_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword ()); { uae_s8 src = get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (0); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (2); }}}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.B #.B,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_117c_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = get_ibyte (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (6); }}}return 20 * CYCLE_UNIT / 2; } /* MOVE.B Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_1180_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.B (An),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_1190_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); }}}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B (An)+,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_1198_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); }}}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B -(An),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_11a0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); }}}}}return 18 * CYCLE_UNIT / 2; } /* MOVE.B (d16,An),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_11a8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s8 src = get_byte (srca); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); }}}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.B (d8,An,Xn),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_11b0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s8 src = get_byte (srca); { uaecptr dsta; { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); }}}}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.B (xxx).W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_11b8_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s8 src = get_byte (srca); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); }}}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.B (xxx).L,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_11b9_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong (2); { uae_s8 src = get_byte (srca); { uaecptr dsta; m68k_incpc (6); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); }}}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.B (d16,PC),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_11ba_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword (2); { uae_s8 src = get_byte (srca); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); }}}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.B (d8,PC,Xn),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_11bb_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword ()); { uae_s8 src = get_byte (srca); { uaecptr dsta; { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); }}}}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.B #.B,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_11bc_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = get_ibyte (2); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.B Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_11c0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (4); }}}return 12 * CYCLE_UNIT / 2; } /* MOVE.B (An),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_11d0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (4); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B (An)+,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_11d8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uaecptr dsta = (uae_s32)(uae_s16)get_iword (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (4); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B -(An),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_11e0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = (uae_s32)(uae_s16)get_iword (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (4); }}}}return 18 * CYCLE_UNIT / 2; } /* MOVE.B (d16,An),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_11e8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s8 src = get_byte (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (6); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.B (d8,An,Xn),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_11f0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s8 src = get_byte (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (0); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (2); }}}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.B (xxx).W,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_11f8_0)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s8 src = get_byte (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (6); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.B (xxx).L,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_11f9_0)(uae_u32 opcode) { {{ uaecptr srca = get_ilong (2); { uae_s8 src = get_byte (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (6); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (8); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.B (d16,PC),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_11fa_0)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword (2); { uae_s8 src = get_byte (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (6); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.B (d8,PC,Xn),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_11fb_0)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword ()); { uae_s8 src = get_byte (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (0); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (2); }}}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.B #.B,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_11fc_0)(uae_u32 opcode) { {{ uae_s8 src = get_ibyte (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (6); }}}return 20 * CYCLE_UNIT / 2; } /* MOVE.B Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_13c0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_ilong (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (6); }}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B (An),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_13d0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); { uaecptr dsta = get_ilong (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (6); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.B (An)+,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_13d8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uaecptr dsta = get_ilong (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (6); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.B -(An),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_13e0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = get_ilong (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (6); }}}}return 22 * CYCLE_UNIT / 2; } /* MOVE.B (d16,An),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_13e8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s8 src = get_byte (srca); { uaecptr dsta = get_ilong (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (8); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.B (d8,An,Xn),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_13f0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s8 src = get_byte (srca); { uaecptr dsta = get_ilong (0); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (4); }}}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.B (xxx).W,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_13f8_0)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s8 src = get_byte (srca); { uaecptr dsta = get_ilong (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (8); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.B (xxx).L,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_13f9_0)(uae_u32 opcode) { {{ uaecptr srca = get_ilong (2); { uae_s8 src = get_byte (srca); { uaecptr dsta = get_ilong (6); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (10); }}}}return 28 * CYCLE_UNIT / 2; } /* MOVE.B (d16,PC),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_13fa_0)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword (2); { uae_s8 src = get_byte (srca); { uaecptr dsta = get_ilong (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (8); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.B (d8,PC,Xn),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_13fb_0)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword ()); { uae_s8 src = get_byte (srca); { uaecptr dsta = get_ilong (0); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (4); }}}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.B #.B,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_13fc_0)(uae_u32 opcode) { {{ uae_s8 src = get_ibyte (2); { uaecptr dsta = get_ilong (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (8); }}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_2000_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpc (2); }}}return 4 * CYCLE_UNIT / 2; } /* MOVE.L An,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_2008_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpc (2); }}}return 4 * CYCLE_UNIT / 2; } /* MOVE.L (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_2010_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpc (2); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.L (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_2018_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) += 4; { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpc (2); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.L -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_2020_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) = srca; { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpc (2); }}}}return 14 * CYCLE_UNIT / 2; } /* MOVE.L (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_2028_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s32 src = get_long (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpc (4); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.L (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_2030_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s32 src = get_long (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.L (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_2038_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s32 src = get_long (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpc (4); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.L (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_2039_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong (2); { uae_s32 src = get_long (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpc (6); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.L (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_203a_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword (2); { uae_s32 src = get_long (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpc (4); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.L (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_203b_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword ()); { uae_s32 src = get_long (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.L #.L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_203c_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_ilong (2); { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpc (6); }}}return 12 * CYCLE_UNIT / 2; } /* MOVEA.L Dn,An */ uae_u32 REGPARAM2 CPUFUNC(op_2040_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { m68k_areg (regs, dstreg) = (src); m68k_incpc (2); }}}return 4 * CYCLE_UNIT / 2; } /* MOVEA.L An,An */ uae_u32 REGPARAM2 CPUFUNC(op_2048_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { m68k_areg (regs, dstreg) = (src); m68k_incpc (2); }}}return 4 * CYCLE_UNIT / 2; } /* MOVEA.L (An),An */ uae_u32 REGPARAM2 CPUFUNC(op_2050_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long (srca); { m68k_areg (regs, dstreg) = (src); m68k_incpc (2); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVEA.L (An)+,An */ uae_u32 REGPARAM2 CPUFUNC(op_2058_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) += 4; { m68k_areg (regs, dstreg) = (src); m68k_incpc (2); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVEA.L -(An),An */ uae_u32 REGPARAM2 CPUFUNC(op_2060_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) = srca; { m68k_areg (regs, dstreg) = (src); m68k_incpc (2); }}}}return 14 * CYCLE_UNIT / 2; } /* MOVEA.L (d16,An),An */ uae_u32 REGPARAM2 CPUFUNC(op_2068_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s32 src = get_long (srca); { m68k_areg (regs, dstreg) = (src); m68k_incpc (4); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVEA.L (d8,An,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_2070_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s32 src = get_long (srca); { m68k_areg (regs, dstreg) = (src); }}}}}return 16 * CYCLE_UNIT / 2; } /* MOVEA.L (xxx).W,An */ uae_u32 REGPARAM2 CPUFUNC(op_2078_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s32 src = get_long (srca); { m68k_areg (regs, dstreg) = (src); m68k_incpc (4); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVEA.L (xxx).L,An */ uae_u32 REGPARAM2 CPUFUNC(op_2079_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong (2); { uae_s32 src = get_long (srca); { m68k_areg (regs, dstreg) = (src); m68k_incpc (6); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVEA.L (d16,PC),An */ uae_u32 REGPARAM2 CPUFUNC(op_207a_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword (2); { uae_s32 src = get_long (srca); { m68k_areg (regs, dstreg) = (src); m68k_incpc (4); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVEA.L (d8,PC,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_207b_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword ()); { uae_s32 src = get_long (srca); { m68k_areg (regs, dstreg) = (src); }}}}}return 16 * CYCLE_UNIT / 2; } /* MOVEA.L #.L,An */ uae_u32 REGPARAM2 CPUFUNC(op_207c_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_ilong (2); { m68k_areg (regs, dstreg) = (src); m68k_incpc (6); }}}return 12 * CYCLE_UNIT / 2; } /* MOVE.L Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_2080_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (2); }}}return 12 * CYCLE_UNIT / 2; } /* MOVE.L An,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_2088_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (2); }}}return 12 * CYCLE_UNIT / 2; } /* MOVE.L (An),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_2090_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (2); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.L (An)+,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_2098_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) += 4; { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (2); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.L -(An),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_20a0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (2); }}}}return 22 * CYCLE_UNIT / 2; } /* MOVE.L (d16,An),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_20a8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s32 src = get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (4); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L (d8,An,Xn),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_20b0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s32 src = get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); }}}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L (xxx).W,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_20b8_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s32 src = get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (4); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L (xxx).L,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_20b9_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong (2); { uae_s32 src = get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (6); }}}}return 28 * CYCLE_UNIT / 2; } /* MOVE.L (d16,PC),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_20ba_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword (2); { uae_s32 src = get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (4); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L (d8,PC,Xn),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_20bb_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword ()); { uae_s32 src = get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); }}}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L #.L,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_20bc_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_ilong (2); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (6); }}}return 20 * CYCLE_UNIT / 2; } /* MOVE.L Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_20c0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (2); }}}return 12 * CYCLE_UNIT / 2; } /* MOVE.L An,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_20c8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (2); }}}return 12 * CYCLE_UNIT / 2; } /* MOVE.L (An),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_20d0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (2); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.L (An)+,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_20d8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) += 4; { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (2); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.L -(An),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_20e0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (2); }}}}return 22 * CYCLE_UNIT / 2; } /* MOVE.L (d16,An),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_20e8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s32 src = get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (4); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L (d8,An,Xn),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_20f0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s32 src = get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); }}}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L (xxx).W,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_20f8_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s32 src = get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (4); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L (xxx).L,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_20f9_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong (2); { uae_s32 src = get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (6); }}}}return 28 * CYCLE_UNIT / 2; } /* MOVE.L (d16,PC),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_20fa_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword (2); { uae_s32 src = get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (4); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L (d8,PC,Xn),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_20fb_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword ()); { uae_s32 src = get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); }}}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L #.L,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_20fc_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_ilong (2); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (6); }}}return 20 * CYCLE_UNIT / 2; } /* MOVE.L Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_2100_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (2); }}}return 12 * CYCLE_UNIT / 2; } /* MOVE.L An,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_2108_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (2); }}}return 12 * CYCLE_UNIT / 2; } /* MOVE.L (An),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_2110_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (2); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.L (An)+,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_2118_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) += 4; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (2); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.L -(An),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_2120_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (2); }}}}return 22 * CYCLE_UNIT / 2; } /* MOVE.L (d16,An),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_2128_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s32 src = get_long (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (4); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L (d8,An,Xn),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_2130_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s32 src = get_long (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); }}}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L (xxx).W,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_2138_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s32 src = get_long (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (4); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L (xxx).L,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_2139_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong (2); { uae_s32 src = get_long (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (6); }}}}return 28 * CYCLE_UNIT / 2; } /* MOVE.L (d16,PC),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_213a_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword (2); { uae_s32 src = get_long (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (4); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L (d8,PC,Xn),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_213b_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword ()); { uae_s32 src = get_long (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); }}}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L #.L,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_213c_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_ilong (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (6); }}}return 20 * CYCLE_UNIT / 2; } /* MOVE.L Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_2140_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (4); }}}return 16 * CYCLE_UNIT / 2; } /* MOVE.L An,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_2148_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (4); }}}return 16 * CYCLE_UNIT / 2; } /* MOVE.L (An),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_2150_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (4); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L (An)+,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_2158_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) += 4; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (4); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L -(An),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_2160_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (4); }}}}return 26 * CYCLE_UNIT / 2; } /* MOVE.L (d16,An),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_2168_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s32 src = get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (6); }}}}return 28 * CYCLE_UNIT / 2; } #endif #ifdef PART_3 /* MOVE.L (d8,An,Xn),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_2170_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s32 src = get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (0); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (2); }}}}}return 28 * CYCLE_UNIT / 2; } /* MOVE.L (xxx).W,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_2178_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s32 src = get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (6); }}}}return 28 * CYCLE_UNIT / 2; } /* MOVE.L (xxx).L,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_2179_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong (2); { uae_s32 src = get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (6); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (8); }}}}return 32 * CYCLE_UNIT / 2; } /* MOVE.L (d16,PC),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_217a_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword (2); { uae_s32 src = get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (6); }}}}return 28 * CYCLE_UNIT / 2; } /* MOVE.L (d8,PC,Xn),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_217b_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword ()); { uae_s32 src = get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (0); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (2); }}}}}return 28 * CYCLE_UNIT / 2; } /* MOVE.L #.L,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_217c_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_ilong (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (6); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (8); }}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_2180_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.L An,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_2188_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.L (An),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_2190_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long (srca); { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); }}}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L (An)+,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_2198_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) += 4; { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); }}}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L -(An),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_21a0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); }}}}}return 26 * CYCLE_UNIT / 2; } /* MOVE.L (d16,An),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_21a8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s32 src = get_long (srca); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); }}}}}return 28 * CYCLE_UNIT / 2; } /* MOVE.L (d8,An,Xn),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_21b0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s32 src = get_long (srca); { uaecptr dsta; { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); }}}}}}return 28 * CYCLE_UNIT / 2; } /* MOVE.L (xxx).W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_21b8_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s32 src = get_long (srca); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); }}}}}return 28 * CYCLE_UNIT / 2; } /* MOVE.L (xxx).L,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_21b9_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong (2); { uae_s32 src = get_long (srca); { uaecptr dsta; m68k_incpc (6); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); }}}}}return 32 * CYCLE_UNIT / 2; } /* MOVE.L (d16,PC),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_21ba_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword (2); { uae_s32 src = get_long (srca); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); }}}}}return 28 * CYCLE_UNIT / 2; } /* MOVE.L (d8,PC,Xn),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_21bb_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword ()); { uae_s32 src = get_long (srca); { uaecptr dsta; { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); }}}}}}return 28 * CYCLE_UNIT / 2; } /* MOVE.L #.L,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_21bc_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_ilong (2); { uaecptr dsta; m68k_incpc (6); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_21c0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (4); }}}return 16 * CYCLE_UNIT / 2; } /* MOVE.L An,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_21c8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_areg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (4); }}}return 16 * CYCLE_UNIT / 2; } /* MOVE.L (An),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_21d0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (4); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L (An)+,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_21d8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) += 4; { uaecptr dsta = (uae_s32)(uae_s16)get_iword (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (4); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L -(An),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_21e0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = (uae_s32)(uae_s16)get_iword (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (4); }}}}return 26 * CYCLE_UNIT / 2; } /* MOVE.L (d16,An),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_21e8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s32 src = get_long (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (6); }}}}return 28 * CYCLE_UNIT / 2; } /* MOVE.L (d8,An,Xn),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_21f0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s32 src = get_long (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (0); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (2); }}}}}return 28 * CYCLE_UNIT / 2; } /* MOVE.L (xxx).W,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_21f8_0)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s32 src = get_long (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (6); }}}}return 28 * CYCLE_UNIT / 2; } /* MOVE.L (xxx).L,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_21f9_0)(uae_u32 opcode) { {{ uaecptr srca = get_ilong (2); { uae_s32 src = get_long (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (6); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (8); }}}}return 32 * CYCLE_UNIT / 2; } /* MOVE.L (d16,PC),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_21fa_0)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword (2); { uae_s32 src = get_long (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (6); }}}}return 28 * CYCLE_UNIT / 2; } /* MOVE.L (d8,PC,Xn),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_21fb_0)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword ()); { uae_s32 src = get_long (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (0); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (2); }}}}}return 28 * CYCLE_UNIT / 2; } /* MOVE.L #.L,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_21fc_0)(uae_u32 opcode) { {{ uae_s32 src = get_ilong (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (6); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (8); }}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_23c0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_ilong (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (6); }}}return 20 * CYCLE_UNIT / 2; } /* MOVE.L An,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_23c8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_areg (regs, srcreg); { uaecptr dsta = get_ilong (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (6); }}}return 20 * CYCLE_UNIT / 2; } /* MOVE.L (An),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_23d0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long (srca); { uaecptr dsta = get_ilong (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (6); }}}}return 28 * CYCLE_UNIT / 2; } /* MOVE.L (An)+,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_23d8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) += 4; { uaecptr dsta = get_ilong (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (6); }}}}return 28 * CYCLE_UNIT / 2; } /* MOVE.L -(An),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_23e0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = get_ilong (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (6); }}}}return 30 * CYCLE_UNIT / 2; } /* MOVE.L (d16,An),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_23e8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s32 src = get_long (srca); { uaecptr dsta = get_ilong (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (8); }}}}return 32 * CYCLE_UNIT / 2; } /* MOVE.L (d8,An,Xn),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_23f0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s32 src = get_long (srca); { uaecptr dsta = get_ilong (0); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (4); }}}}}return 32 * CYCLE_UNIT / 2; } /* MOVE.L (xxx).W,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_23f8_0)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s32 src = get_long (srca); { uaecptr dsta = get_ilong (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (8); }}}}return 32 * CYCLE_UNIT / 2; } /* MOVE.L (xxx).L,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_23f9_0)(uae_u32 opcode) { {{ uaecptr srca = get_ilong (2); { uae_s32 src = get_long (srca); { uaecptr dsta = get_ilong (6); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (10); }}}}return 36 * CYCLE_UNIT / 2; } /* MOVE.L (d16,PC),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_23fa_0)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword (2); { uae_s32 src = get_long (srca); { uaecptr dsta = get_ilong (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (8); }}}}return 32 * CYCLE_UNIT / 2; } /* MOVE.L (d8,PC,Xn),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_23fb_0)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword ()); { uae_s32 src = get_long (srca); { uaecptr dsta = get_ilong (0); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (4); }}}}}return 32 * CYCLE_UNIT / 2; } /* MOVE.L #.L,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_23fc_0)(uae_u32 opcode) { {{ uae_s32 src = get_ilong (2); { uaecptr dsta = get_ilong (6); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (10); }}}return 28 * CYCLE_UNIT / 2; } /* MOVE.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_3000_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpc (2); }}}return 4 * CYCLE_UNIT / 2; } /* MOVE.W An,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_3008_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpc (2); }}}return 4 * CYCLE_UNIT / 2; } /* MOVE.W (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_3010_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpc (2); }}}}return 8 * CYCLE_UNIT / 2; } /* MOVE.W (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_3018_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) += 2; { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpc (2); }}}}return 8 * CYCLE_UNIT / 2; } /* MOVE.W -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_3020_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpc (2); }}}}return 10 * CYCLE_UNIT / 2; } /* MOVE.W (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_3028_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpc (4); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.W (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_3030_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s16 src = get_word (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.W (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_3038_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpc (4); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.W (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_3039_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong (2); { uae_s16 src = get_word (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpc (6); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_303a_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpc (4); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.W (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_303b_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword ()); { uae_s16 src = get_word (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.W #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_303c_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_iword (2); { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpc (4); }}}return 8 * CYCLE_UNIT / 2; } /* MOVEA.W Dn,An */ uae_u32 REGPARAM2 CPUFUNC(op_3040_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpc (2); }}}return 4 * CYCLE_UNIT / 2; } /* MOVEA.W An,An */ uae_u32 REGPARAM2 CPUFUNC(op_3048_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpc (2); }}}return 4 * CYCLE_UNIT / 2; } /* MOVEA.W (An),An */ uae_u32 REGPARAM2 CPUFUNC(op_3050_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word (srca); { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpc (2); }}}}return 8 * CYCLE_UNIT / 2; } /* MOVEA.W (An)+,An */ uae_u32 REGPARAM2 CPUFUNC(op_3058_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) += 2; { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpc (2); }}}}return 8 * CYCLE_UNIT / 2; } /* MOVEA.W -(An),An */ uae_u32 REGPARAM2 CPUFUNC(op_3060_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpc (2); }}}}return 10 * CYCLE_UNIT / 2; } /* MOVEA.W (d16,An),An */ uae_u32 REGPARAM2 CPUFUNC(op_3068_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpc (4); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVEA.W (d8,An,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_3070_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s16 src = get_word (srca); { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); }}}}}return 12 * CYCLE_UNIT / 2; } /* MOVEA.W (xxx).W,An */ uae_u32 REGPARAM2 CPUFUNC(op_3078_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpc (4); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVEA.W (xxx).L,An */ uae_u32 REGPARAM2 CPUFUNC(op_3079_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong (2); { uae_s16 src = get_word (srca); { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpc (6); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVEA.W (d16,PC),An */ uae_u32 REGPARAM2 CPUFUNC(op_307a_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpc (4); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVEA.W (d8,PC,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_307b_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword ()); { uae_s16 src = get_word (srca); { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); }}}}}return 12 * CYCLE_UNIT / 2; } /* MOVEA.W #.W,An */ uae_u32 REGPARAM2 CPUFUNC(op_307c_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_iword (2); { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpc (4); }}}return 8 * CYCLE_UNIT / 2; } /* MOVE.W Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_3080_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (2); }}}return 8 * CYCLE_UNIT / 2; } /* MOVE.W An,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_3088_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (2); }}}return 8 * CYCLE_UNIT / 2; } /* MOVE.W (An),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_3090_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (2); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.W (An)+,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_3098_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) += 2; { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (2); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.W -(An),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_30a0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (2); }}}}return 14 * CYCLE_UNIT / 2; } /* MOVE.W (d16,An),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_30a8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (4); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W (d8,An,Xn),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_30b0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s16 src = get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); }}}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W (xxx).W,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_30b8_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (4); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W (xxx).L,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_30b9_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong (2); { uae_s16 src = get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (6); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.W (d16,PC),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_30ba_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (4); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W (d8,PC,Xn),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_30bb_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword ()); { uae_s16 src = get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); }}}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W #.W,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_30bc_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (4); }}}return 12 * CYCLE_UNIT / 2; } /* MOVE.W Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_30c0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (2); }}}return 8 * CYCLE_UNIT / 2; } /* MOVE.W An,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_30c8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (2); }}}return 8 * CYCLE_UNIT / 2; } /* MOVE.W (An),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_30d0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (2); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.W (An)+,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_30d8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) += 2; { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (2); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.W -(An),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_30e0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (2); }}}}return 14 * CYCLE_UNIT / 2; } /* MOVE.W (d16,An),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_30e8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (4); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W (d8,An,Xn),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_30f0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s16 src = get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); }}}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W (xxx).W,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_30f8_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (4); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W (xxx).L,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_30f9_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong (2); { uae_s16 src = get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (6); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.W (d16,PC),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_30fa_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (4); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W (d8,PC,Xn),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_30fb_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword ()); { uae_s16 src = get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); }}}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W #.W,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_30fc_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (4); }}}return 12 * CYCLE_UNIT / 2; } /* MOVE.W Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_3100_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (2); }}}return 8 * CYCLE_UNIT / 2; } /* MOVE.W An,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_3108_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (2); }}}return 8 * CYCLE_UNIT / 2; } /* MOVE.W (An),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_3110_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (2); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.W (An)+,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_3118_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) += 2; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (2); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.W -(An),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_3120_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (2); }}}}return 14 * CYCLE_UNIT / 2; } /* MOVE.W (d16,An),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_3128_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (4); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W (d8,An,Xn),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_3130_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s16 src = get_word (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); }}}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W (xxx).W,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_3138_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (4); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W (xxx).L,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_3139_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong (2); { uae_s16 src = get_word (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (6); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.W (d16,PC),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_313a_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (4); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W (d8,PC,Xn),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_313b_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword ()); { uae_s16 src = get_word (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); }}}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W #.W,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_313c_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (4); }}}return 12 * CYCLE_UNIT / 2; } /* MOVE.W Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_3140_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (4); }}}return 12 * CYCLE_UNIT / 2; } /* MOVE.W An,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_3148_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (4); }}}return 12 * CYCLE_UNIT / 2; } /* MOVE.W (An),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_3150_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (4); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W (An)+,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_3158_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) += 2; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (4); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W -(An),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_3160_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (4); }}}}return 18 * CYCLE_UNIT / 2; } /* MOVE.W (d16,An),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_3168_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (6); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.W (d8,An,Xn),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_3170_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s16 src = get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (0); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (2); }}}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.W (xxx).W,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_3178_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (6); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.W (xxx).L,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_3179_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong (2); { uae_s16 src = get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (6); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (8); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.W (d16,PC),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_317a_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (6); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.W (d8,PC,Xn),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_317b_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword ()); { uae_s16 src = get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (0); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (2); }}}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.W #.W,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_317c_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (6); }}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_3180_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.W An,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_3188_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.W (An),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_3190_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word (srca); { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); }}}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W (An)+,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_3198_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) += 2; { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); }}}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W -(An),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_31a0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); }}}}}return 18 * CYCLE_UNIT / 2; } /* MOVE.W (d16,An),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_31a8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); }}}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.W (d8,An,Xn),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_31b0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s16 src = get_word (srca); { uaecptr dsta; { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); }}}}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.W (xxx).W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_31b8_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); }}}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.W (xxx).L,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_31b9_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong (2); { uae_s16 src = get_word (srca); { uaecptr dsta; m68k_incpc (6); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); }}}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.W (d16,PC),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_31ba_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); }}}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.W (d8,PC,Xn),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_31bb_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword ()); { uae_s16 src = get_word (srca); { uaecptr dsta; { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); }}}}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.W #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_31bc_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_31c0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (4); }}}return 12 * CYCLE_UNIT / 2; } /* MOVE.W An,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_31c8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_areg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (4); }}}return 12 * CYCLE_UNIT / 2; } /* MOVE.W (An),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_31d0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (4); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W (An)+,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_31d8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) += 2; { uaecptr dsta = (uae_s32)(uae_s16)get_iword (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (4); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W -(An),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_31e0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = (uae_s32)(uae_s16)get_iword (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (4); }}}}return 18 * CYCLE_UNIT / 2; } /* MOVE.W (d16,An),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_31e8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (6); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.W (d8,An,Xn),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_31f0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s16 src = get_word (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (0); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (2); }}}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.W (xxx).W,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_31f8_0)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (6); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.W (xxx).L,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_31f9_0)(uae_u32 opcode) { {{ uaecptr srca = get_ilong (2); { uae_s16 src = get_word (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (6); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (8); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.W (d16,PC),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_31fa_0)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (6); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.W (d8,PC,Xn),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_31fb_0)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword ()); { uae_s16 src = get_word (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (0); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (2); }}}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.W #.W,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_31fc_0)(uae_u32 opcode) { {{ uae_s16 src = get_iword (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (6); }}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_33c0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_ilong (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (6); }}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W An,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_33c8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_areg (regs, srcreg); { uaecptr dsta = get_ilong (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (6); }}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W (An),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_33d0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word (srca); { uaecptr dsta = get_ilong (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (6); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.W (An)+,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_33d8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) += 2; { uaecptr dsta = get_ilong (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (6); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.W -(An),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_33e0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = get_ilong (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (6); }}}}return 22 * CYCLE_UNIT / 2; } /* MOVE.W (d16,An),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_33e8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); { uaecptr dsta = get_ilong (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (8); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.W (d8,An,Xn),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_33f0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s16 src = get_word (srca); { uaecptr dsta = get_ilong (0); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (4); }}}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.W (xxx).W,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_33f8_0)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); { uaecptr dsta = get_ilong (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (8); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.W (xxx).L,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_33f9_0)(uae_u32 opcode) { {{ uaecptr srca = get_ilong (2); { uae_s16 src = get_word (srca); { uaecptr dsta = get_ilong (6); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (10); }}}}return 28 * CYCLE_UNIT / 2; } /* MOVE.W (d16,PC),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_33fa_0)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); { uaecptr dsta = get_ilong (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (8); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.W (d8,PC,Xn),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_33fb_0)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword ()); { uae_s16 src = get_word (srca); { uaecptr dsta = get_ilong (0); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (4); }}}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.W #.W,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_33fc_0)(uae_u32 opcode) { {{ uae_s16 src = get_iword (2); { uaecptr dsta = get_ilong (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (8); }}}return 20 * CYCLE_UNIT / 2; } /* NEGX.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4000_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((newv) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* NEGX.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4010_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); put_byte (srca, newv); }}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* NEGX.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4018_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); put_byte (srca, newv); }}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* NEGX.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_4020_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) = srca; { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); put_byte (srca, newv); }}}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* NEGX.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4028_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s8 src = get_byte (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); put_byte (srca, newv); }}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* NEGX.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4030_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s8 src = get_byte (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); put_byte (srca, newv); }}}}}}return 16 * CYCLE_UNIT / 2; } /* NEGX.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4038_0)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s8 src = get_byte (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); put_byte (srca, newv); }}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* NEGX.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4039_0)(uae_u32 opcode) { {{ uaecptr srca = get_ilong (2); { uae_s8 src = get_byte (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); put_byte (srca, newv); }}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* NEGX.W Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4040_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | ((newv) & 0xffff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* NEGX.W (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4050_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); put_word (srca, newv); }}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* NEGX.W (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4058_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); put_word (srca, newv); }}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* NEGX.W -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_4060_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); put_word (srca, newv); }}}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* NEGX.W (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4068_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); put_word (srca, newv); }}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* NEGX.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4070_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s16 src = get_word (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); put_word (srca, newv); }}}}}}return 16 * CYCLE_UNIT / 2; } /* NEGX.W (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4078_0)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); put_word (srca, newv); }}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* NEGX.W (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4079_0)(uae_u32 opcode) { {{ uaecptr srca = get_ilong (2); { uae_s16 src = get_word (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); put_word (srca, newv); }}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* NEGX.L Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4080_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, srcreg) = (newv); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* NEGX.L (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4090_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); put_long (srca, newv); }}}}} m68k_incpc (2); return 20 * CYCLE_UNIT / 2; } /* NEGX.L (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4098_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) += 4; { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); put_long (srca, newv); }}}}} m68k_incpc (2); return 20 * CYCLE_UNIT / 2; } /* NEGX.L -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_40a0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) = srca; { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); put_long (srca, newv); }}}}} m68k_incpc (2); return 22 * CYCLE_UNIT / 2; } /* NEGX.L (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_40a8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s32 src = get_long (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); put_long (srca, newv); }}}}} m68k_incpc (4); return 24 * CYCLE_UNIT / 2; } /* NEGX.L (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_40b0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s32 src = get_long (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); put_long (srca, newv); }}}}}}return 24 * CYCLE_UNIT / 2; } /* NEGX.L (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_40b8_0)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s32 src = get_long (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); put_long (srca, newv); }}}}} m68k_incpc (4); return 24 * CYCLE_UNIT / 2; } /* NEGX.L (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_40b9_0)(uae_u32 opcode) { {{ uaecptr srca = get_ilong (2); { uae_s32 src = get_long (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); put_long (srca, newv); }}}}} m68k_incpc (6); return 28 * CYCLE_UNIT / 2; } /* MVSR2.W Dn */ uae_u32 REGPARAM2 CPUFUNC(op_40c0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel645; } {{ MakeSR (); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | ((regs.sr) & 0xffff); }}} m68k_incpc (2); endlabel645: ; return 4 * CYCLE_UNIT / 2; } /* MVSR2.W (An) */ uae_u32 REGPARAM2 CPUFUNC(op_40d0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel646; } {{ uaecptr srca = m68k_areg (regs, srcreg); MakeSR (); put_word (srca, regs.sr); }}} m68k_incpc (2); endlabel646: ; return 8 * CYCLE_UNIT / 2; } /* MVSR2.W (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_40d8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel647; } {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += 2; MakeSR (); put_word (srca, regs.sr); }}} m68k_incpc (2); endlabel647: ; return 8 * CYCLE_UNIT / 2; } /* MVSR2.W -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_40e0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel648; } {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; m68k_areg (regs, srcreg) = srca; MakeSR (); put_word (srca, regs.sr); }}} m68k_incpc (2); endlabel648: ; return 10 * CYCLE_UNIT / 2; } /* MVSR2.W (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_40e8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel649; } {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); MakeSR (); put_word (srca, regs.sr); }}} m68k_incpc (4); endlabel649: ; return 12 * CYCLE_UNIT / 2; } /* MVSR2.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_40f0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel650; } {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); MakeSR (); put_word (srca, regs.sr); }}}}endlabel650: ; return 12 * CYCLE_UNIT / 2; } /* MVSR2.W (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_40f8_0)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel651; } {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); MakeSR (); put_word (srca, regs.sr); }}} m68k_incpc (4); endlabel651: ; return 12 * CYCLE_UNIT / 2; } /* MVSR2.W (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_40f9_0)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel652; } {{ uaecptr srca = get_ilong (2); MakeSR (); put_word (srca, regs.sr); }}} m68k_incpc (6); endlabel652: ; return 16 * CYCLE_UNIT / 2; } /* CHK.L Dn,Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4100_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); m68k_incpc (2); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel653; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel653; } }}}endlabel653: ; return 4 * CYCLE_UNIT / 2; } #endif /* CHK.L (An),Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4110_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); m68k_incpc (2); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel654; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel654; } }}}}endlabel654: ; return 12 * CYCLE_UNIT / 2; } #endif /* CHK.L (An)+,Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4118_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) += 4; { uae_s32 dst = m68k_dreg (regs, dstreg); m68k_incpc (2); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel655; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel655; } }}}}endlabel655: ; return 12 * CYCLE_UNIT / 2; } #endif /* CHK.L -(An),Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4120_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_dreg (regs, dstreg); m68k_incpc (2); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel656; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel656; } }}}}endlabel656: ; return 14 * CYCLE_UNIT / 2; } #endif /* CHK.L (d16,An),Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4128_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); m68k_incpc (4); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel657; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel657; } }}}}endlabel657: ; return 16 * CYCLE_UNIT / 2; } #endif /* CHK.L (d8,An,Xn),Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4130_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel658; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel658; } }}}}}endlabel658: ; return 16 * CYCLE_UNIT / 2; } #endif /* CHK.L (xxx).W,Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4138_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); m68k_incpc (4); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel659; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel659; } }}}}endlabel659: ; return 16 * CYCLE_UNIT / 2; } #endif /* CHK.L (xxx).L,Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4139_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong (2); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); m68k_incpc (6); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel660; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel660; } }}}}endlabel660: ; return 20 * CYCLE_UNIT / 2; } #endif /* CHK.L (d16,PC),Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_413a_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword (2); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); m68k_incpc (4); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel661; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel661; } }}}}endlabel661: ; return 16 * CYCLE_UNIT / 2; } #endif /* CHK.L (d8,PC,Xn),Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_413b_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword ()); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel662; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel662; } }}}}}endlabel662: ; return 16 * CYCLE_UNIT / 2; } #endif /* CHK.L #.L,Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_413c_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_ilong (2); { uae_s32 dst = m68k_dreg (regs, dstreg); m68k_incpc (6); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel663; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel663; } }}}endlabel663: ; return 12 * CYCLE_UNIT / 2; } #endif /* CHK.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4180_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); m68k_incpc (2); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel664; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel664; } }}}endlabel664: ; return 4 * CYCLE_UNIT / 2; } /* CHK.W (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4190_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); m68k_incpc (2); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel665; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel665; } }}}}endlabel665: ; return 8 * CYCLE_UNIT / 2; } /* CHK.W (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4198_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s16 dst = m68k_dreg (regs, dstreg); m68k_incpc (2); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel666; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel666; } }}}}endlabel666: ; return 8 * CYCLE_UNIT / 2; } /* CHK.W -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_41a0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s16 dst = m68k_dreg (regs, dstreg); m68k_incpc (2); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel667; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel667; } }}}}endlabel667: ; return 10 * CYCLE_UNIT / 2; } /* CHK.W (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_41a8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); m68k_incpc (4); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel668; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel668; } }}}}endlabel668: ; return 12 * CYCLE_UNIT / 2; } /* CHK.W (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_41b0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel669; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel669; } }}}}}endlabel669: ; return 12 * CYCLE_UNIT / 2; } /* CHK.W (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_41b8_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); m68k_incpc (4); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel670; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel670; } }}}}endlabel670: ; return 12 * CYCLE_UNIT / 2; } /* CHK.W (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_41b9_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong (2); { uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); m68k_incpc (6); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel671; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel671; } }}}}endlabel671: ; return 16 * CYCLE_UNIT / 2; } /* CHK.W (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_41ba_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); m68k_incpc (4); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel672; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel672; } }}}}endlabel672: ; return 12 * CYCLE_UNIT / 2; } /* CHK.W (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_41bb_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword ()); { uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel673; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel673; } }}}}}endlabel673: ; return 12 * CYCLE_UNIT / 2; } /* CHK.W #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_41bc_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_iword (2); { uae_s16 dst = m68k_dreg (regs, dstreg); m68k_incpc (4); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel674; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel674; } }}}endlabel674: ; return 8 * CYCLE_UNIT / 2; } /* LEA.L (An),An */ uae_u32 REGPARAM2 CPUFUNC(op_41d0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { m68k_areg (regs, dstreg) = (srca); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* LEA.L (d16,An),An */ uae_u32 REGPARAM2 CPUFUNC(op_41e8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { m68k_areg (regs, dstreg) = (srca); }}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* LEA.L (d8,An,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_41f0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { m68k_areg (regs, dstreg) = (srca); }}}}return 8 * CYCLE_UNIT / 2; } /* LEA.L (xxx).W,An */ uae_u32 REGPARAM2 CPUFUNC(op_41f8_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { m68k_areg (regs, dstreg) = (srca); }}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* LEA.L (xxx).L,An */ uae_u32 REGPARAM2 CPUFUNC(op_41f9_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong (2); { m68k_areg (regs, dstreg) = (srca); }}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } /* LEA.L (d16,PC),An */ uae_u32 REGPARAM2 CPUFUNC(op_41fa_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword (2); { m68k_areg (regs, dstreg) = (srca); }}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* LEA.L (d8,PC,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_41fb_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword ()); { m68k_areg (regs, dstreg) = (srca); }}}}return 8 * CYCLE_UNIT / 2; } /* CLR.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4200_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ CLEAR_CZNV (); SET_ZFLG (((uae_s8)(0)) == 0); SET_NFLG (((uae_s8)(0)) < 0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((0) & 0xff); }} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* CLR.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4210_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(0)) == 0); SET_NFLG (((uae_s8)(0)) < 0); put_byte (srca, 0); }} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* CLR.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4218_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(0)) == 0); SET_NFLG (((uae_s8)(0)) < 0); put_byte (srca, 0); }} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* CLR.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_4220_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(0)) == 0); SET_NFLG (((uae_s8)(0)) < 0); put_byte (srca, 0); }} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* CLR.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4228_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(0)) == 0); SET_NFLG (((uae_s8)(0)) < 0); put_byte (srca, 0); }} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* CLR.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4230_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(0)) == 0); SET_NFLG (((uae_s8)(0)) < 0); put_byte (srca, 0); }}}return 12 * CYCLE_UNIT / 2; } /* CLR.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4238_0)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(0)) == 0); SET_NFLG (((uae_s8)(0)) < 0); put_byte (srca, 0); }} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* CLR.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4239_0)(uae_u32 opcode) { {{ uaecptr srca = get_ilong (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(0)) == 0); SET_NFLG (((uae_s8)(0)) < 0); put_byte (srca, 0); }} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* CLR.W Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4240_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ CLEAR_CZNV (); SET_ZFLG (((uae_s16)(0)) == 0); SET_NFLG (((uae_s16)(0)) < 0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | ((0) & 0xffff); }} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* CLR.W (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4250_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(0)) == 0); SET_NFLG (((uae_s16)(0)) < 0); put_word (srca, 0); }} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* CLR.W (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4258_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(0)) == 0); SET_NFLG (((uae_s16)(0)) < 0); put_word (srca, 0); }} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* CLR.W -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_4260_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; m68k_areg (regs, srcreg) = srca; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(0)) == 0); SET_NFLG (((uae_s16)(0)) < 0); put_word (srca, 0); }} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* CLR.W (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4268_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(0)) == 0); SET_NFLG (((uae_s16)(0)) < 0); put_word (srca, 0); }} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* CLR.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4270_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(0)) == 0); SET_NFLG (((uae_s16)(0)) < 0); put_word (srca, 0); }}}return 12 * CYCLE_UNIT / 2; } /* CLR.W (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4278_0)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(0)) == 0); SET_NFLG (((uae_s16)(0)) < 0); put_word (srca, 0); }} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* CLR.W (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4279_0)(uae_u32 opcode) { {{ uaecptr srca = get_ilong (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(0)) == 0); SET_NFLG (((uae_s16)(0)) < 0); put_word (srca, 0); }} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* CLR.L Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4280_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ CLEAR_CZNV (); SET_ZFLG (((uae_s32)(0)) == 0); SET_NFLG (((uae_s32)(0)) < 0); m68k_dreg (regs, srcreg) = (0); }} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* CLR.L (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4290_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(0)) == 0); SET_NFLG (((uae_s32)(0)) < 0); put_long (srca, 0); }} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* CLR.L (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4298_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(0)) == 0); SET_NFLG (((uae_s32)(0)) < 0); put_long (srca, 0); }} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* CLR.L -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_42a0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; m68k_areg (regs, srcreg) = srca; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(0)) == 0); SET_NFLG (((uae_s32)(0)) < 0); put_long (srca, 0); }} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* CLR.L (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_42a8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(0)) == 0); SET_NFLG (((uae_s32)(0)) < 0); put_long (srca, 0); }} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* CLR.L (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_42b0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(0)) == 0); SET_NFLG (((uae_s32)(0)) < 0); put_long (srca, 0); }}}return 16 * CYCLE_UNIT / 2; } /* CLR.L (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_42b8_0)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(0)) == 0); SET_NFLG (((uae_s32)(0)) < 0); put_long (srca, 0); }} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* CLR.L (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_42b9_0)(uae_u32 opcode) { {{ uaecptr srca = get_ilong (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(0)) == 0); SET_NFLG (((uae_s32)(0)) < 0); put_long (srca, 0); }} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* MVSR2.B Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_42c0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ MakeSR (); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | ((regs.sr & 0xff) & 0xffff); }} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } #endif #endif #ifdef PART_4 /* MVSR2.B (An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_42d0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); MakeSR (); put_word (srca, regs.sr & 0xff); }} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } #endif /* MVSR2.B (An)+ */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_42d8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += 2; MakeSR (); put_word (srca, regs.sr & 0xff); }} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } #endif /* MVSR2.B -(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_42e0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; m68k_areg (regs, srcreg) = srca; MakeSR (); put_word (srca, regs.sr & 0xff); }} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } #endif /* MVSR2.B (d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_42e8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); MakeSR (); put_word (srca, regs.sr & 0xff); }} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } #endif /* MVSR2.B (d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_42f0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); MakeSR (); put_word (srca, regs.sr & 0xff); }}}return 12 * CYCLE_UNIT / 2; } #endif /* MVSR2.B (xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_42f8_0)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); MakeSR (); put_word (srca, regs.sr & 0xff); }} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } #endif /* MVSR2.B (xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_42f9_0)(uae_u32 opcode) { {{ uaecptr srca = get_ilong (2); MakeSR (); put_word (srca, regs.sr & 0xff); }} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } #endif /* NEG.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4400_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); {{uae_u32 dst = ((uae_s8)(0)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(dst)) < 0; SET_ZFLG (((uae_s8)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((dst) & 0xff); }}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* NEG.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4410_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); {{uae_u32 dst = ((uae_s8)(0)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(dst)) < 0; SET_ZFLG (((uae_s8)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (srca, dst); }}}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* NEG.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4418_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{uae_u32 dst = ((uae_s8)(0)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(dst)) < 0; SET_ZFLG (((uae_s8)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (srca, dst); }}}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* NEG.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_4420_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) = srca; {{uae_u32 dst = ((uae_s8)(0)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(dst)) < 0; SET_ZFLG (((uae_s8)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (srca, dst); }}}}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* NEG.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4428_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s8 src = get_byte (srca); {{uae_u32 dst = ((uae_s8)(0)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(dst)) < 0; SET_ZFLG (((uae_s8)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (srca, dst); }}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* NEG.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4430_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s8 src = get_byte (srca); {{uae_u32 dst = ((uae_s8)(0)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(dst)) < 0; SET_ZFLG (((uae_s8)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (srca, dst); }}}}}}}return 16 * CYCLE_UNIT / 2; } /* NEG.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4438_0)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s8 src = get_byte (srca); {{uae_u32 dst = ((uae_s8)(0)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(dst)) < 0; SET_ZFLG (((uae_s8)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (srca, dst); }}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* NEG.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4439_0)(uae_u32 opcode) { {{ uaecptr srca = get_ilong (2); { uae_s8 src = get_byte (srca); {{uae_u32 dst = ((uae_s8)(0)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(dst)) < 0; SET_ZFLG (((uae_s8)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (srca, dst); }}}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* NEG.W Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4440_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); {{uae_u32 dst = ((uae_s16)(0)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(dst)) < 0; SET_ZFLG (((uae_s16)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | ((dst) & 0xffff); }}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* NEG.W (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4450_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word (srca); {{uae_u32 dst = ((uae_s16)(0)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(dst)) < 0; SET_ZFLG (((uae_s16)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (srca, dst); }}}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* NEG.W (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4458_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) += 2; {{uae_u32 dst = ((uae_s16)(0)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(dst)) < 0; SET_ZFLG (((uae_s16)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (srca, dst); }}}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* NEG.W -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_4460_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; {{uae_u32 dst = ((uae_s16)(0)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(dst)) < 0; SET_ZFLG (((uae_s16)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (srca, dst); }}}}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* NEG.W (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4468_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); {{uae_u32 dst = ((uae_s16)(0)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(dst)) < 0; SET_ZFLG (((uae_s16)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (srca, dst); }}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* NEG.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4470_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s16 src = get_word (srca); {{uae_u32 dst = ((uae_s16)(0)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(dst)) < 0; SET_ZFLG (((uae_s16)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (srca, dst); }}}}}}}return 16 * CYCLE_UNIT / 2; } /* NEG.W (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4478_0)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); {{uae_u32 dst = ((uae_s16)(0)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(dst)) < 0; SET_ZFLG (((uae_s16)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (srca, dst); }}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* NEG.W (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4479_0)(uae_u32 opcode) { {{ uaecptr srca = get_ilong (2); { uae_s16 src = get_word (srca); {{uae_u32 dst = ((uae_s16)(0)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(dst)) < 0; SET_ZFLG (((uae_s16)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (srca, dst); }}}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* NEG.L Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4480_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); {{uae_u32 dst = ((uae_s32)(0)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(dst)) < 0; SET_ZFLG (((uae_s32)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, srcreg) = (dst); }}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* NEG.L (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4490_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long (srca); {{uae_u32 dst = ((uae_s32)(0)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(dst)) < 0; SET_ZFLG (((uae_s32)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (srca, dst); }}}}}} m68k_incpc (2); return 20 * CYCLE_UNIT / 2; } /* NEG.L (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4498_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) += 4; {{uae_u32 dst = ((uae_s32)(0)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(dst)) < 0; SET_ZFLG (((uae_s32)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (srca, dst); }}}}}} m68k_incpc (2); return 20 * CYCLE_UNIT / 2; } /* NEG.L -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_44a0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) = srca; {{uae_u32 dst = ((uae_s32)(0)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(dst)) < 0; SET_ZFLG (((uae_s32)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (srca, dst); }}}}}} m68k_incpc (2); return 22 * CYCLE_UNIT / 2; } /* NEG.L (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_44a8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s32 src = get_long (srca); {{uae_u32 dst = ((uae_s32)(0)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(dst)) < 0; SET_ZFLG (((uae_s32)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (srca, dst); }}}}}} m68k_incpc (4); return 24 * CYCLE_UNIT / 2; } /* NEG.L (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_44b0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s32 src = get_long (srca); {{uae_u32 dst = ((uae_s32)(0)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(dst)) < 0; SET_ZFLG (((uae_s32)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (srca, dst); }}}}}}}return 24 * CYCLE_UNIT / 2; } /* NEG.L (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_44b8_0)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s32 src = get_long (srca); {{uae_u32 dst = ((uae_s32)(0)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(dst)) < 0; SET_ZFLG (((uae_s32)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (srca, dst); }}}}}} m68k_incpc (4); return 24 * CYCLE_UNIT / 2; } /* NEG.L (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_44b9_0)(uae_u32 opcode) { {{ uaecptr srca = get_ilong (2); { uae_s32 src = get_long (srca); {{uae_u32 dst = ((uae_s32)(0)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(dst)) < 0; SET_ZFLG (((uae_s32)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (srca, dst); }}}}}} m68k_incpc (6); return 28 * CYCLE_UNIT / 2; } /* MV2SR.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_44c0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); }} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* MV2SR.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_44d0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word (srca); MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); }}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* MV2SR.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_44d8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) += 2; MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); }}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* MV2SR.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_44e0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); }}} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* MV2SR.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_44e8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); }}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* MV2SR.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_44f0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s16 src = get_word (srca); MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); }}}}return 12 * CYCLE_UNIT / 2; } /* MV2SR.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_44f8_0)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); }}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* MV2SR.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_44f9_0)(uae_u32 opcode) { {{ uaecptr srca = get_ilong (2); { uae_s16 src = get_word (srca); MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); }}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* MV2SR.B (d16,PC) */ uae_u32 REGPARAM2 CPUFUNC(op_44fa_0)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); }}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* MV2SR.B (d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_44fb_0)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword ()); { uae_s16 src = get_word (srca); MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); }}}}return 12 * CYCLE_UNIT / 2; } /* MV2SR.B #.B */ uae_u32 REGPARAM2 CPUFUNC(op_44fc_0)(uae_u32 opcode) { {{ uae_s16 src = get_iword (2); MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); }} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* NOT.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4600_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(dst)) == 0); SET_NFLG (((uae_s8)(dst)) < 0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((dst) & 0xff); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* NOT.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4610_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(dst)) == 0); SET_NFLG (((uae_s8)(dst)) < 0); put_byte (srca, dst); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* NOT.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4618_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(dst)) == 0); SET_NFLG (((uae_s8)(dst)) < 0); put_byte (srca, dst); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* NOT.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_4620_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) = srca; { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(dst)) == 0); SET_NFLG (((uae_s8)(dst)) < 0); put_byte (srca, dst); }}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* NOT.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4628_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s8 src = get_byte (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(dst)) == 0); SET_NFLG (((uae_s8)(dst)) < 0); put_byte (srca, dst); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* NOT.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4630_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s8 src = get_byte (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(dst)) == 0); SET_NFLG (((uae_s8)(dst)) < 0); put_byte (srca, dst); }}}}}return 16 * CYCLE_UNIT / 2; } /* NOT.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4638_0)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s8 src = get_byte (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(dst)) == 0); SET_NFLG (((uae_s8)(dst)) < 0); put_byte (srca, dst); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* NOT.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4639_0)(uae_u32 opcode) { {{ uaecptr srca = get_ilong (2); { uae_s8 src = get_byte (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(dst)) == 0); SET_NFLG (((uae_s8)(dst)) < 0); put_byte (srca, dst); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* NOT.W Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4640_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(dst)) == 0); SET_NFLG (((uae_s16)(dst)) < 0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | ((dst) & 0xffff); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* NOT.W (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4650_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(dst)) == 0); SET_NFLG (((uae_s16)(dst)) < 0); put_word (srca, dst); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* NOT.W (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4658_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(dst)) == 0); SET_NFLG (((uae_s16)(dst)) < 0); put_word (srca, dst); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* NOT.W -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_4660_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(dst)) == 0); SET_NFLG (((uae_s16)(dst)) < 0); put_word (srca, dst); }}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* NOT.W (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4668_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(dst)) == 0); SET_NFLG (((uae_s16)(dst)) < 0); put_word (srca, dst); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* NOT.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4670_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s16 src = get_word (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(dst)) == 0); SET_NFLG (((uae_s16)(dst)) < 0); put_word (srca, dst); }}}}}return 16 * CYCLE_UNIT / 2; } /* NOT.W (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4678_0)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(dst)) == 0); SET_NFLG (((uae_s16)(dst)) < 0); put_word (srca, dst); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* NOT.W (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4679_0)(uae_u32 opcode) { {{ uaecptr srca = get_ilong (2); { uae_s16 src = get_word (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(dst)) == 0); SET_NFLG (((uae_s16)(dst)) < 0); put_word (srca, dst); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* NOT.L Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4680_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); m68k_dreg (regs, srcreg) = (dst); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* NOT.L (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4690_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); put_long (srca, dst); }}}} m68k_incpc (2); return 20 * CYCLE_UNIT / 2; } /* NOT.L (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4698_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) += 4; { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); put_long (srca, dst); }}}} m68k_incpc (2); return 20 * CYCLE_UNIT / 2; } /* NOT.L -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_46a0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) = srca; { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); put_long (srca, dst); }}}} m68k_incpc (2); return 22 * CYCLE_UNIT / 2; } /* NOT.L (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_46a8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s32 src = get_long (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); put_long (srca, dst); }}}} m68k_incpc (4); return 24 * CYCLE_UNIT / 2; } /* NOT.L (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_46b0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s32 src = get_long (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); put_long (srca, dst); }}}}}return 24 * CYCLE_UNIT / 2; } /* NOT.L (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_46b8_0)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s32 src = get_long (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); put_long (srca, dst); }}}} m68k_incpc (4); return 24 * CYCLE_UNIT / 2; } /* NOT.L (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_46b9_0)(uae_u32 opcode) { {{ uaecptr srca = get_ilong (2); { uae_s32 src = get_long (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); put_long (srca, dst); }}}} m68k_incpc (6); return 28 * CYCLE_UNIT / 2; } /* MV2SR.W Dn */ uae_u32 REGPARAM2 CPUFUNC(op_46c0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel773; } {{ uae_s16 src = m68k_dreg (regs, srcreg); regs.sr = src; MakeFromSR (); }}} m68k_incpc (2); endlabel773: ; return 4 * CYCLE_UNIT / 2; } /* MV2SR.W (An) */ uae_u32 REGPARAM2 CPUFUNC(op_46d0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel774; } {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word (srca); regs.sr = src; MakeFromSR (); }}}} m68k_incpc (2); endlabel774: ; return 8 * CYCLE_UNIT / 2; } /* MV2SR.W (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_46d8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel775; } {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) += 2; regs.sr = src; MakeFromSR (); }}}} m68k_incpc (2); endlabel775: ; return 8 * CYCLE_UNIT / 2; } /* MV2SR.W -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_46e0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel776; } {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; regs.sr = src; MakeFromSR (); }}}} m68k_incpc (2); endlabel776: ; return 10 * CYCLE_UNIT / 2; } /* MV2SR.W (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_46e8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel777; } {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); regs.sr = src; MakeFromSR (); }}}} m68k_incpc (4); endlabel777: ; return 12 * CYCLE_UNIT / 2; } /* MV2SR.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_46f0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel778; } {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s16 src = get_word (srca); regs.sr = src; MakeFromSR (); }}}}}endlabel778: ; return 12 * CYCLE_UNIT / 2; } /* MV2SR.W (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_46f8_0)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel779; } {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); regs.sr = src; MakeFromSR (); }}}} m68k_incpc (4); endlabel779: ; return 12 * CYCLE_UNIT / 2; } /* MV2SR.W (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_46f9_0)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel780; } {{ uaecptr srca = get_ilong (2); { uae_s16 src = get_word (srca); regs.sr = src; MakeFromSR (); }}}} m68k_incpc (6); endlabel780: ; return 16 * CYCLE_UNIT / 2; } /* MV2SR.W (d16,PC) */ uae_u32 REGPARAM2 CPUFUNC(op_46fa_0)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel781; } {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); regs.sr = src; MakeFromSR (); }}}} m68k_incpc (4); endlabel781: ; return 12 * CYCLE_UNIT / 2; } /* MV2SR.W (d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_46fb_0)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel782; } {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword ()); { uae_s16 src = get_word (srca); regs.sr = src; MakeFromSR (); }}}}}endlabel782: ; return 12 * CYCLE_UNIT / 2; } /* MV2SR.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_46fc_0)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel783; } {{ uae_s16 src = get_iword (2); regs.sr = src; MakeFromSR (); }}} m68k_incpc (4); endlabel783: ; return 8 * CYCLE_UNIT / 2; } /* NBCD.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4800_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = - (src & 0xF0); uae_u16 newv; int cflg; if (newv_lo > 9) { newv_lo -= 6; } newv = newv_hi + newv_lo; cflg = (newv & 0x1F0) > 0x90; if (cflg) newv -= 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((newv) & 0xff); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* LINK.L An,#.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4808_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr olda; olda = m68k_areg (regs, 7) - 4; m68k_areg (regs, 7) = olda; { uae_s32 src = m68k_areg (regs, srcreg); { uae_s32 offs = get_ilong (2); put_long (olda, src); m68k_areg (regs, srcreg) = (m68k_areg (regs, 7)); m68k_areg (regs, 7) += offs; }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } #endif /* NBCD.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4810_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); { uae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = - (src & 0xF0); uae_u16 newv; int cflg; if (newv_lo > 9) { newv_lo -= 6; } newv = newv_hi + newv_lo; cflg = (newv & 0x1F0) > 0x90; if (cflg) newv -= 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); put_byte (srca, newv); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* NBCD.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4818_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = - (src & 0xF0); uae_u16 newv; int cflg; if (newv_lo > 9) { newv_lo -= 6; } newv = newv_hi + newv_lo; cflg = (newv & 0x1F0) > 0x90; if (cflg) newv -= 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); put_byte (srca, newv); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* NBCD.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_4820_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) = srca; { uae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = - (src & 0xF0); uae_u16 newv; int cflg; if (newv_lo > 9) { newv_lo -= 6; } newv = newv_hi + newv_lo; cflg = (newv & 0x1F0) > 0x90; if (cflg) newv -= 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); put_byte (srca, newv); }}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* NBCD.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4828_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s8 src = get_byte (srca); { uae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = - (src & 0xF0); uae_u16 newv; int cflg; if (newv_lo > 9) { newv_lo -= 6; } newv = newv_hi + newv_lo; cflg = (newv & 0x1F0) > 0x90; if (cflg) newv -= 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); put_byte (srca, newv); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* NBCD.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4830_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s8 src = get_byte (srca); { uae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = - (src & 0xF0); uae_u16 newv; int cflg; if (newv_lo > 9) { newv_lo -= 6; } newv = newv_hi + newv_lo; cflg = (newv & 0x1F0) > 0x90; if (cflg) newv -= 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); put_byte (srca, newv); }}}}}return 16 * CYCLE_UNIT / 2; } /* NBCD.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4838_0)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s8 src = get_byte (srca); { uae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = - (src & 0xF0); uae_u16 newv; int cflg; if (newv_lo > 9) { newv_lo -= 6; } newv = newv_hi + newv_lo; cflg = (newv & 0x1F0) > 0x90; if (cflg) newv -= 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); put_byte (srca, newv); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* NBCD.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4839_0)(uae_u32 opcode) { {{ uaecptr srca = get_ilong (2); { uae_s8 src = get_byte (srca); { uae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = - (src & 0xF0); uae_u16 newv; int cflg; if (newv_lo > 9) { newv_lo -= 6; } newv = newv_hi + newv_lo; cflg = (newv & 0x1F0) > 0x90; if (cflg) newv -= 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); put_byte (srca, newv); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* SWAP.W Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4840_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_u32 dst = ((src >> 16)&0xFFFF) | ((src&0xFFFF)<<16); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); m68k_dreg (regs, srcreg) = (dst); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* BKPTQ.L # */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4848_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); { m68k_incpc (2); op_illg (opcode); }return 4 * CYCLE_UNIT / 2; } #endif /* PEA.L (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4850_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, 7) - 4; m68k_areg (regs, 7) = dsta; put_long (dsta, srca); }}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* PEA.L (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4868_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uaecptr dsta; dsta = m68k_areg (regs, 7) - 4; m68k_areg (regs, 7) = dsta; put_long (dsta, srca); }}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* PEA.L (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4870_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uaecptr dsta; dsta = m68k_areg (regs, 7) - 4; m68k_areg (regs, 7) = dsta; put_long (dsta, srca); }}}}return 16 * CYCLE_UNIT / 2; } /* PEA.L (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4878_0)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uaecptr dsta; dsta = m68k_areg (regs, 7) - 4; m68k_areg (regs, 7) = dsta; put_long (dsta, srca); }}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* PEA.L (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4879_0)(uae_u32 opcode) { {{ uaecptr srca = get_ilong (2); { uaecptr dsta; dsta = m68k_areg (regs, 7) - 4; m68k_areg (regs, 7) = dsta; put_long (dsta, srca); }}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* PEA.L (d16,PC) */ uae_u32 REGPARAM2 CPUFUNC(op_487a_0)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword (2); { uaecptr dsta; dsta = m68k_areg (regs, 7) - 4; m68k_areg (regs, 7) = dsta; put_long (dsta, srca); }}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* PEA.L (d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_487b_0)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword ()); { uaecptr dsta; dsta = m68k_areg (regs, 7) - 4; m68k_areg (regs, 7) = dsta; put_long (dsta, srca); }}}}return 16 * CYCLE_UNIT / 2; } /* EXT.W Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4880_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_u16 dst = (uae_s16)(uae_s8)src; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(dst)) == 0); SET_NFLG (((uae_s16)(dst)) < 0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | ((dst) & 0xffff); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* MVMLE.W #.W,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_4890_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_iword (2); { uaecptr srca = m68k_areg (regs, dstreg); { uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; while (dmask) { put_word (srca, m68k_dreg (regs, movem_index1[dmask])); srca += 2; dmask = movem_next[dmask]; } while (amask) { put_word (srca, m68k_areg (regs, movem_index1[amask])); srca += 2; amask = movem_next[amask]; } }}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* MVMLE.W #.W,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_48a0_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_iword (2); { uaecptr srca; srca = m68k_areg (regs, dstreg) - 0; { uae_u16 amask = mask & 0xff, dmask = (mask >> 8) & 0xff; int type = get_cpu_model () >= 68020; while (amask) { srca -= 2; if (type) m68k_areg (regs, dstreg) = srca; put_word (srca, m68k_areg (regs, movem_index2[amask])); amask = movem_next[amask]; } while (dmask) { srca -= 2; put_word (srca, m68k_dreg (regs, movem_index2[dmask])); dmask = movem_next[dmask]; } m68k_areg (regs, dstreg) = srca; }}} m68k_incpc (4); return 10 * CYCLE_UNIT / 2; } /* MVMLE.W #.W,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_48a8_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_iword (2); { uaecptr srca = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (4); { uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; while (dmask) { put_word (srca, m68k_dreg (regs, movem_index1[dmask])); srca += 2; dmask = movem_next[dmask]; } while (amask) { put_word (srca, m68k_areg (regs, movem_index1[amask])); srca += 2; amask = movem_next[amask]; } }}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } /* MVMLE.W #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_48b0_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_iword (2); { uaecptr srca; m68k_incpc (4); { srca = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); { uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; while (dmask) { put_word (srca, m68k_dreg (regs, movem_index1[dmask])); srca += 2; dmask = movem_next[dmask]; } while (amask) { put_word (srca, m68k_areg (regs, movem_index1[amask])); srca += 2; amask = movem_next[amask]; } }}}}return 12 * CYCLE_UNIT / 2; } /* MVMLE.W #.W,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_48b8_0)(uae_u32 opcode) { { uae_u16 mask = get_iword (2); { uaecptr srca = (uae_s32)(uae_s16)get_iword (4); { uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; while (dmask) { put_word (srca, m68k_dreg (regs, movem_index1[dmask])); srca += 2; dmask = movem_next[dmask]; } while (amask) { put_word (srca, m68k_areg (regs, movem_index1[amask])); srca += 2; amask = movem_next[amask]; } }}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } /* MVMLE.W #.W,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_48b9_0)(uae_u32 opcode) { { uae_u16 mask = get_iword (2); { uaecptr srca = get_ilong (4); { uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; while (dmask) { put_word (srca, m68k_dreg (regs, movem_index1[dmask])); srca += 2; dmask = movem_next[dmask]; } while (amask) { put_word (srca, m68k_areg (regs, movem_index1[amask])); srca += 2; amask = movem_next[amask]; } }}} m68k_incpc (8); return 16 * CYCLE_UNIT / 2; } /* EXT.L Dn */ uae_u32 REGPARAM2 CPUFUNC(op_48c0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_u32 dst = (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); m68k_dreg (regs, srcreg) = (dst); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* MVMLE.L #.W,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_48d0_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_iword (2); { uaecptr srca = m68k_areg (regs, dstreg); { uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; while (dmask) { put_long (srca, m68k_dreg (regs, movem_index1[dmask])); srca += 4; dmask = movem_next[dmask]; } while (amask) { put_long (srca, m68k_areg (regs, movem_index1[amask])); srca += 4; amask = movem_next[amask]; } }}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* MVMLE.L #.W,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_48e0_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_iword (2); { uaecptr srca; srca = m68k_areg (regs, dstreg) - 0; { uae_u16 amask = mask & 0xff, dmask = (mask >> 8) & 0xff; int type = get_cpu_model () >= 68020; while (amask) { srca -= 4; if (type) m68k_areg (regs, dstreg) = srca; put_long (srca, m68k_areg (regs, movem_index2[amask])); amask = movem_next[amask]; } while (dmask) { srca -= 4; put_long (srca, m68k_dreg (regs, movem_index2[dmask])); dmask = movem_next[dmask]; } m68k_areg (regs, dstreg) = srca; }}} m68k_incpc (4); return 10 * CYCLE_UNIT / 2; } /* MVMLE.L #.W,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_48e8_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_iword (2); { uaecptr srca = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (4); { uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; while (dmask) { put_long (srca, m68k_dreg (regs, movem_index1[dmask])); srca += 4; dmask = movem_next[dmask]; } while (amask) { put_long (srca, m68k_areg (regs, movem_index1[amask])); srca += 4; amask = movem_next[amask]; } }}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } /* MVMLE.L #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_48f0_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_iword (2); { uaecptr srca; m68k_incpc (4); { srca = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); { uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; while (dmask) { put_long (srca, m68k_dreg (regs, movem_index1[dmask])); srca += 4; dmask = movem_next[dmask]; } while (amask) { put_long (srca, m68k_areg (regs, movem_index1[amask])); srca += 4; amask = movem_next[amask]; } }}}}return 12 * CYCLE_UNIT / 2; } /* MVMLE.L #.W,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_48f8_0)(uae_u32 opcode) { { uae_u16 mask = get_iword (2); { uaecptr srca = (uae_s32)(uae_s16)get_iword (4); { uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; while (dmask) { put_long (srca, m68k_dreg (regs, movem_index1[dmask])); srca += 4; dmask = movem_next[dmask]; } while (amask) { put_long (srca, m68k_areg (regs, movem_index1[amask])); srca += 4; amask = movem_next[amask]; } }}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } /* MVMLE.L #.W,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_48f9_0)(uae_u32 opcode) { { uae_u16 mask = get_iword (2); { uaecptr srca = get_ilong (4); { uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; while (dmask) { put_long (srca, m68k_dreg (regs, movem_index1[dmask])); srca += 4; dmask = movem_next[dmask]; } while (amask) { put_long (srca, m68k_areg (regs, movem_index1[amask])); srca += 4; amask = movem_next[amask]; } }}} m68k_incpc (8); return 16 * CYCLE_UNIT / 2; } /* EXT.B Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_49c0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_u32 dst = (uae_s32)(uae_s8)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); m68k_dreg (regs, srcreg) = (dst); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } #endif /* TST.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4a00_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* TST.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4a10_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* TST.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4a18_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* TST.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_4a20_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) = srca; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }}} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* TST.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4a28_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s8 src = get_byte (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* TST.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4a30_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s8 src = get_byte (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }}}}return 12 * CYCLE_UNIT / 2; } /* TST.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4a38_0)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s8 src = get_byte (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* TST.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4a39_0)(uae_u32 opcode) { {{ uaecptr srca = get_ilong (2); { uae_s8 src = get_byte (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* TST.B (d16,PC) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4a3a_0)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword (2); { uae_s8 src = get_byte (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } #endif /* TST.B (d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4a3b_0)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword ()); { uae_s8 src = get_byte (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }}}}return 12 * CYCLE_UNIT / 2; } #endif /* TST.B #.B */ uae_u32 REGPARAM2 CPUFUNC(op_4a3c_0)(uae_u32 opcode) { {{ uae_s8 src = get_ibyte (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* TST.W Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4a40_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* TST.W An */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4a48_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_areg (regs, srcreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } #endif /* TST.W (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4a50_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* TST.W (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4a58_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* TST.W -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_4a60_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }}} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* TST.W (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4a68_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* TST.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4a70_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s16 src = get_word (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }}}}return 12 * CYCLE_UNIT / 2; } /* TST.W (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4a78_0)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* TST.W (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4a79_0)(uae_u32 opcode) { {{ uaecptr srca = get_ilong (2); { uae_s16 src = get_word (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* TST.W (d16,PC) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4a7a_0)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } #endif /* TST.W (d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4a7b_0)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword ()); { uae_s16 src = get_word (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }}}}return 12 * CYCLE_UNIT / 2; } #endif /* TST.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_4a7c_0)(uae_u32 opcode) { {{ uae_s16 src = get_iword (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* TST.L Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4a80_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* TST.L An */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4a88_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_areg (regs, srcreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } #endif /* TST.L (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4a90_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* TST.L (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4a98_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* TST.L -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_4aa0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) = srca; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* TST.L (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4aa8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s32 src = get_long (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* TST.L (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4ab0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s32 src = get_long (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }}}}return 16 * CYCLE_UNIT / 2; } /* TST.L (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4ab8_0)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s32 src = get_long (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* TST.L (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4ab9_0)(uae_u32 opcode) { {{ uaecptr srca = get_ilong (2); { uae_s32 src = get_long (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* TST.L (d16,PC) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4aba_0)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword (2); { uae_s32 src = get_long (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } #endif /* TST.L (d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4abb_0)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword ()); { uae_s32 src = get_long (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }}}}return 16 * CYCLE_UNIT / 2; } #endif /* TST.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_4abc_0)(uae_u32 opcode) { {{ uae_s32 src = get_ilong (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } /* TAS.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4ac0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); src |= 0x80; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((src) & 0xff); }} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* TAS.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4ad0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); src |= 0x80; put_byte (srca, src); }}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* TAS.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4ad8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); src |= 0x80; put_byte (srca, src); }}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* TAS.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_4ae0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) = srca; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); src |= 0x80; put_byte (srca, src); }}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* TAS.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4ae8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s8 src = get_byte (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); src |= 0x80; put_byte (srca, src); }}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* TAS.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4af0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s8 src = get_byte (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); src |= 0x80; put_byte (srca, src); }}}}return 16 * CYCLE_UNIT / 2; } /* TAS.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4af8_0)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s8 src = get_byte (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); src |= 0x80; put_byte (srca, src); }}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* TAS.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4af9_0)(uae_u32 opcode) { {{ uaecptr srca = get_ilong (2); { uae_s8 src = get_byte (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); src |= 0x80; put_byte (srca, src); }}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* MULL.L #.W,Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4c00_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword (2); { uae_s32 dst = m68k_dreg (regs, dstreg); m68k_incpc (4); m68k_mull(opcode, dst, extra); }}}return 8 * CYCLE_UNIT / 2; } #endif /* MULL.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4c10_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = get_long (dsta); m68k_incpc (4); m68k_mull(opcode, dst, extra); }}}}return 16 * CYCLE_UNIT / 2; } #endif /* MULL.L #.W,(An)+ */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4c18_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) += 4; m68k_incpc (4); m68k_mull(opcode, dst, extra); }}}}return 16 * CYCLE_UNIT / 2; } #endif /* MULL.L #.W,-(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4c20_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) = dsta; m68k_incpc (4); m68k_mull(opcode, dst, extra); }}}}return 18 * CYCLE_UNIT / 2; } #endif /* MULL.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4c28_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (4); { uae_s32 dst = get_long (dsta); m68k_incpc (6); m68k_mull(opcode, dst, extra); }}}}return 20 * CYCLE_UNIT / 2; } #endif /* MULL.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4c30_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword (2); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); { uae_s32 dst = get_long (dsta); m68k_mull(opcode, dst, extra); }}}}}return 20 * CYCLE_UNIT / 2; } #endif /* MULL.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4c38_0)(uae_u32 opcode) { {{ uae_s16 extra = get_iword (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (4); { uae_s32 dst = get_long (dsta); m68k_incpc (6); m68k_mull(opcode, dst, extra); }}}}return 20 * CYCLE_UNIT / 2; } #endif /* MULL.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4c39_0)(uae_u32 opcode) { {{ uae_s16 extra = get_iword (2); { uaecptr dsta = get_ilong (4); { uae_s32 dst = get_long (dsta); m68k_incpc (8); m68k_mull(opcode, dst, extra); }}}}return 24 * CYCLE_UNIT / 2; } #endif /* MULL.L #.W,(d16,PC) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4c3a_0)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 extra = get_iword (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_iword (4); { uae_s32 dst = get_long (dsta); m68k_incpc (6); m68k_mull(opcode, dst, extra); }}}}return 20 * CYCLE_UNIT / 2; } #endif /* MULL.L #.W,(d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4c3b_0)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 extra = get_iword (2); { uaecptr tmppc; uaecptr dsta; m68k_incpc (4); { tmppc = m68k_getpc (); dsta = get_disp_ea_020 (tmppc, next_iword ()); { uae_s32 dst = get_long (dsta); m68k_mull(opcode, dst, extra); }}}}}return 20 * CYCLE_UNIT / 2; } #endif /* MULL.L #.W,#.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4c3c_0)(uae_u32 opcode) { {{ uae_s16 extra = get_iword (2); { uae_s32 dst = get_ilong (4); m68k_incpc (8); m68k_mull(opcode, dst, extra); }}}return 16 * CYCLE_UNIT / 2; } #endif /* DIVL.L #.W,Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4c40_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword (2); { uae_s32 dst = m68k_dreg (regs, dstreg); m68k_incpc (4); m68k_divl(opcode, dst, extra); }}}return 8 * CYCLE_UNIT / 2; } #endif /* DIVL.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4c50_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = get_long (dsta); m68k_incpc (4); m68k_divl(opcode, dst, extra); }}}}return 16 * CYCLE_UNIT / 2; } #endif /* DIVL.L #.W,(An)+ */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4c58_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) += 4; m68k_incpc (4); m68k_divl(opcode, dst, extra); }}}}return 16 * CYCLE_UNIT / 2; } #endif /* DIVL.L #.W,-(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4c60_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) = dsta; m68k_incpc (4); m68k_divl(opcode, dst, extra); }}}}return 18 * CYCLE_UNIT / 2; } #endif /* DIVL.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4c68_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (4); { uae_s32 dst = get_long (dsta); m68k_incpc (6); m68k_divl(opcode, dst, extra); }}}}return 20 * CYCLE_UNIT / 2; } #endif /* DIVL.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4c70_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword (2); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); { uae_s32 dst = get_long (dsta); m68k_divl(opcode, dst, extra); }}}}}return 20 * CYCLE_UNIT / 2; } #endif /* DIVL.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4c78_0)(uae_u32 opcode) { {{ uae_s16 extra = get_iword (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (4); { uae_s32 dst = get_long (dsta); m68k_incpc (6); m68k_divl(opcode, dst, extra); }}}}return 20 * CYCLE_UNIT / 2; } #endif /* DIVL.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4c79_0)(uae_u32 opcode) { {{ uae_s16 extra = get_iword (2); { uaecptr dsta = get_ilong (4); { uae_s32 dst = get_long (dsta); m68k_incpc (8); m68k_divl(opcode, dst, extra); }}}}return 24 * CYCLE_UNIT / 2; } #endif /* DIVL.L #.W,(d16,PC) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4c7a_0)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 extra = get_iword (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_iword (4); { uae_s32 dst = get_long (dsta); m68k_incpc (6); m68k_divl(opcode, dst, extra); }}}}return 20 * CYCLE_UNIT / 2; } #endif /* DIVL.L #.W,(d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4c7b_0)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 extra = get_iword (2); { uaecptr tmppc; uaecptr dsta; m68k_incpc (4); { tmppc = m68k_getpc (); dsta = get_disp_ea_020 (tmppc, next_iword ()); { uae_s32 dst = get_long (dsta); m68k_divl(opcode, dst, extra); }}}}}return 20 * CYCLE_UNIT / 2; } #endif /* DIVL.L #.W,#.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4c7c_0)(uae_u32 opcode) { {{ uae_s16 extra = get_iword (2); { uae_s32 dst = get_ilong (4); m68k_incpc (8); m68k_divl(opcode, dst, extra); }}}return 16 * CYCLE_UNIT / 2; } #endif /* MVMEL.W #.W,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_4c90_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_iword (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca = m68k_areg (regs, dstreg); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = (uae_s32)(uae_s16)get_word (srca); srca += 2; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = (uae_s32)(uae_s16)get_word (srca); srca += 2; amask = movem_next[amask]; } }}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* MVMEL.W #.W,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4c98_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_iword (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca = m68k_areg (regs, dstreg); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = (uae_s32)(uae_s16)get_word (srca); srca += 2; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = (uae_s32)(uae_s16)get_word (srca); srca += 2; amask = movem_next[amask]; } m68k_areg (regs, dstreg) = srca; }}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* MVMEL.W #.W,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4ca8_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_iword (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (4); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = (uae_s32)(uae_s16)get_word (srca); srca += 2; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = (uae_s32)(uae_s16)get_word (srca); srca += 2; amask = movem_next[amask]; } }}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } /* MVMEL.W #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4cb0_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_iword (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca; m68k_incpc (4); { srca = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = (uae_s32)(uae_s16)get_word (srca); srca += 2; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = (uae_s32)(uae_s16)get_word (srca); srca += 2; amask = movem_next[amask]; } }}}}return 12 * CYCLE_UNIT / 2; } /* MVMEL.W #.W,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4cb8_0)(uae_u32 opcode) { { uae_u16 mask = get_iword (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca = (uae_s32)(uae_s16)get_iword (4); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = (uae_s32)(uae_s16)get_word (srca); srca += 2; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = (uae_s32)(uae_s16)get_word (srca); srca += 2; amask = movem_next[amask]; } }}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } /* MVMEL.W #.W,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4cb9_0)(uae_u32 opcode) { { uae_u16 mask = get_iword (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca = get_ilong (4); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = (uae_s32)(uae_s16)get_word (srca); srca += 2; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = (uae_s32)(uae_s16)get_word (srca); srca += 2; amask = movem_next[amask]; } }}} m68k_incpc (8); return 16 * CYCLE_UNIT / 2; } /* MVMEL.W #.W,(d16,PC) */ uae_u32 REGPARAM2 CPUFUNC(op_4cba_0)(uae_u32 opcode) { uae_u32 dstreg = 2; { uae_u16 mask = get_iword (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca = m68k_getpc () + 4; srca += (uae_s32)(uae_s16)get_iword (4); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = (uae_s32)(uae_s16)get_word (srca); srca += 2; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = (uae_s32)(uae_s16)get_word (srca); srca += 2; amask = movem_next[amask]; } }}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } /* MVMEL.W #.W,(d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4cbb_0)(uae_u32 opcode) { uae_u32 dstreg = 3; { uae_u16 mask = get_iword (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr tmppc; uaecptr srca; m68k_incpc (4); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword ()); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = (uae_s32)(uae_s16)get_word (srca); srca += 2; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = (uae_s32)(uae_s16)get_word (srca); srca += 2; amask = movem_next[amask]; } }}}}return 12 * CYCLE_UNIT / 2; } /* MVMEL.L #.W,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_4cd0_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_iword (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca = m68k_areg (regs, dstreg); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = get_long (srca); srca += 4; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = get_long (srca); srca += 4; amask = movem_next[amask]; } }}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* MVMEL.L #.W,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4cd8_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_iword (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca = m68k_areg (regs, dstreg); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = get_long (srca); srca += 4; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = get_long (srca); srca += 4; amask = movem_next[amask]; } m68k_areg (regs, dstreg) = srca; }}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* MVMEL.L #.W,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4ce8_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_iword (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (4); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = get_long (srca); srca += 4; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = get_long (srca); srca += 4; amask = movem_next[amask]; } }}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } /* MVMEL.L #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4cf0_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_iword (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca; m68k_incpc (4); { srca = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = get_long (srca); srca += 4; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = get_long (srca); srca += 4; amask = movem_next[amask]; } }}}}return 12 * CYCLE_UNIT / 2; } /* MVMEL.L #.W,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4cf8_0)(uae_u32 opcode) { { uae_u16 mask = get_iword (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca = (uae_s32)(uae_s16)get_iword (4); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = get_long (srca); srca += 4; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = get_long (srca); srca += 4; amask = movem_next[amask]; } }}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } /* MVMEL.L #.W,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4cf9_0)(uae_u32 opcode) { { uae_u16 mask = get_iword (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca = get_ilong (4); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = get_long (srca); srca += 4; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = get_long (srca); srca += 4; amask = movem_next[amask]; } }}} m68k_incpc (8); return 16 * CYCLE_UNIT / 2; } /* MVMEL.L #.W,(d16,PC) */ uae_u32 REGPARAM2 CPUFUNC(op_4cfa_0)(uae_u32 opcode) { uae_u32 dstreg = 2; { uae_u16 mask = get_iword (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca = m68k_getpc () + 4; srca += (uae_s32)(uae_s16)get_iword (4); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = get_long (srca); srca += 4; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = get_long (srca); srca += 4; amask = movem_next[amask]; } }}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } /* MVMEL.L #.W,(d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4cfb_0)(uae_u32 opcode) { uae_u32 dstreg = 3; { uae_u16 mask = get_iword (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr tmppc; uaecptr srca; m68k_incpc (4); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword ()); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = get_long (srca); srca += 4; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = get_long (srca); srca += 4; amask = movem_next[amask]; } }}}}return 12 * CYCLE_UNIT / 2; } /* TRAPQ.L # */ uae_u32 REGPARAM2 CPUFUNC(op_4e40_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 15); {{ uae_u32 src = srcreg; m68k_incpc (2); Exception (src + 32); }}return 4 * CYCLE_UNIT / 2; } /* LINK.W An,#.W */ uae_u32 REGPARAM2 CPUFUNC(op_4e50_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr olda; olda = m68k_areg (regs, 7) - 4; m68k_areg (regs, 7) = olda; { uae_s32 src = m68k_areg (regs, srcreg); { uae_s16 offs = get_iword (2); put_long (olda, src); m68k_areg (regs, srcreg) = (m68k_areg (regs, 7)); m68k_areg (regs, 7) += offs; }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* UNLK.L An */ uae_u32 REGPARAM2 CPUFUNC(op_4e58_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_areg (regs, srcreg); m68k_areg (regs, 7) = src; { uaecptr olda = m68k_areg (regs, 7); { uae_s32 old = get_long (olda); m68k_areg (regs, 7) += 4; m68k_areg (regs, srcreg) = (old); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* MVR2USP.L An */ uae_u32 REGPARAM2 CPUFUNC(op_4e60_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel901; } {{ uae_s32 src = m68k_areg (regs, srcreg); regs.usp = src; }}} m68k_incpc (2); endlabel901: ; return 4 * CYCLE_UNIT / 2; } /* MVUSP2R.L An */ uae_u32 REGPARAM2 CPUFUNC(op_4e68_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel902; } {{ m68k_areg (regs, srcreg) = (regs.usp); }}} m68k_incpc (2); endlabel902: ; return 4 * CYCLE_UNIT / 2; } /* RESET.L */ uae_u32 REGPARAM2 CPUFUNC(op_4e70_0)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel903; } { cpureset (); m68k_incpc (2); }}endlabel903: ; return 4 * CYCLE_UNIT / 2; } /* NOP.L */ uae_u32 REGPARAM2 CPUFUNC(op_4e71_0)(uae_u32 opcode) { {} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* STOP.L #.W */ uae_u32 REGPARAM2 CPUFUNC(op_4e72_0)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel905; } {{ uae_s16 src = get_iword (2); regs.sr = src; MakeFromSR (); m68k_setstopped (); m68k_incpc (4); }}}endlabel905: ; return 8 * CYCLE_UNIT / 2; } /* RTE.L */ uae_u32 REGPARAM2 CPUFUNC(op_4e73_0)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel906; } { uae_u16 newsr; uae_u32 newpc; for (;;) { uaecptr a = m68k_areg (regs, 7); uae_s16 sr = get_word (a); uae_s32 pc = get_long (a + 2); uae_s16 format = get_word (a + 2 + 4); int frame = format >> 12; int offset = 8; newsr = sr; newpc = pc; if (frame == 0x0) { m68k_areg (regs, 7) += offset; break; } else if (frame == 0x1) { m68k_areg (regs, 7) += offset; } else if (frame == 0x2) { m68k_areg (regs, 7) += offset + 4; break; } else if (frame == 0x4) { m68k_areg (regs, 7) += offset + 8; break; } else if (frame == 0x8) { m68k_areg (regs, 7) += offset + 50; break; } else if (frame == 0x9) { m68k_areg (regs, 7) += offset + 12; break; } else if (frame == 0xa) { m68k_areg (regs, 7) += offset + 24; break; } else if (frame == 0xb) { m68k_areg (regs, 7) += offset + 84; break; } else { m68k_areg (regs, 7) += offset; Exception (14); goto endlabel906; } regs.sr = newsr; MakeFromSR (); } regs.sr = newsr; MakeFromSR (); if (newpc & 1) { exception3i (0x4E73, newpc); goto endlabel906; } m68k_setpc (newpc); ipl_fetch (); }}endlabel906: ; return 4 * CYCLE_UNIT / 2; } /* RTD.L #.W */ uae_u32 REGPARAM2 CPUFUNC(op_4e74_0)(uae_u32 opcode) { {{ uaecptr pca = m68k_areg (regs, 7); { uae_s32 pc = get_long (pca); m68k_areg (regs, 7) += 4; { uae_s16 offs = get_iword (2); m68k_areg (regs, 7) += offs; if (pc & 1) { exception3i (0x4E74, pc); goto endlabel907; } if (pc & 1) { exception3i (0x4E74, pc); goto endlabel907; } m68k_setpc (pc); }}}}endlabel907: ; return 16 * CYCLE_UNIT / 2; } /* RTS.L */ uae_u32 REGPARAM2 CPUFUNC(op_4e75_0)(uae_u32 opcode) { { uaecptr pc = m68k_getpc (); m68k_do_rts (); if (m68k_getpc () & 1) { uaecptr faultpc = m68k_getpc (); m68k_setpc (pc); exception3i (0x4E75, faultpc); } }return 4 * CYCLE_UNIT / 2; } /* TRAPV.L */ uae_u32 REGPARAM2 CPUFUNC(op_4e76_0)(uae_u32 opcode) { { m68k_incpc (2); if (GET_VFLG ()) { Exception (7); goto endlabel909; } }endlabel909: ; return 4 * CYCLE_UNIT / 2; } /* RTR.L */ uae_u32 REGPARAM2 CPUFUNC(op_4e77_0)(uae_u32 opcode) { { uaecptr oldpc = m68k_getpc (); MakeSR (); { uaecptr sra = m68k_areg (regs, 7); { uae_s16 sr = get_word (sra); m68k_areg (regs, 7) += 2; { uaecptr pca = m68k_areg (regs, 7); { uae_s32 pc = get_long (pca); m68k_areg (regs, 7) += 4; regs.sr &= 0xFF00; sr &= 0xFF; regs.sr |= sr; m68k_setpc (pc); MakeFromSR (); if (m68k_getpc () & 1) { uaecptr faultpc = m68k_getpc (); m68k_setpc (oldpc); exception3i (0x4E77, faultpc); } }}}}}return 16 * CYCLE_UNIT / 2; } /* MOVEC2.L #.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4e7a_0)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel911; } {{ uae_s16 src = get_iword (2); { int regno = (src >> 12) & 15; uae_u32 *regp = regs.regs + regno; if (! m68k_movec2(src & 0xFFF, regp)) goto endlabel911; }}}} m68k_incpc (4); endlabel911: ; return 8 * CYCLE_UNIT / 2; } #endif /* MOVE2C.L #.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4e7b_0)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel912; } {{ uae_s16 src = get_iword (2); { int regno = (src >> 12) & 15; uae_u32 *regp = regs.regs + regno; if (! m68k_move2c(src & 0xFFF, regp)) goto endlabel912; }}}} m68k_incpc (4); endlabel912: ; return 8 * CYCLE_UNIT / 2; } #endif /* JSR.L (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4e90_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uaecptr oldpc = m68k_getpc () + 2; if (srca & 1) { exception3i (opcode, srca); goto endlabel913; } m68k_setpc (srca); m68k_areg (regs, 7) -= 4; put_long (m68k_areg (regs, 7), oldpc); }}}endlabel913: ; return 4 * CYCLE_UNIT / 2; } /* JSR.L (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4ea8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uaecptr oldpc = m68k_getpc () + 4; if (srca & 1) { exception3i (opcode, srca); goto endlabel914; } m68k_setpc (srca); m68k_areg (regs, 7) -= 4; put_long (m68k_areg (regs, 7), oldpc); }}}endlabel914: ; return 8 * CYCLE_UNIT / 2; } /* JSR.L (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4eb0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uaecptr oldpc = m68k_getpc () + 0; if (srca & 1) { exception3i (opcode, srca); goto endlabel915; } m68k_setpc (srca); m68k_areg (regs, 7) -= 4; put_long (m68k_areg (regs, 7), oldpc); }}}}endlabel915: ; return 8 * CYCLE_UNIT / 2; } /* JSR.L (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4eb8_0)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uaecptr oldpc = m68k_getpc () + 4; if (srca & 1) { exception3i (opcode, srca); goto endlabel916; } m68k_setpc (srca); m68k_areg (regs, 7) -= 4; put_long (m68k_areg (regs, 7), oldpc); }}}endlabel916: ; return 8 * CYCLE_UNIT / 2; } /* JSR.L (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4eb9_0)(uae_u32 opcode) { {{ uaecptr srca = get_ilong (2); { uaecptr oldpc = m68k_getpc () + 6; if (srca & 1) { exception3i (opcode, srca); goto endlabel917; } m68k_setpc (srca); m68k_areg (regs, 7) -= 4; put_long (m68k_areg (regs, 7), oldpc); }}}endlabel917: ; return 12 * CYCLE_UNIT / 2; } /* JSR.L (d16,PC) */ uae_u32 REGPARAM2 CPUFUNC(op_4eba_0)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword (2); { uaecptr oldpc = m68k_getpc () + 4; if (srca & 1) { exception3i (opcode, srca); goto endlabel918; } m68k_setpc (srca); m68k_areg (regs, 7) -= 4; put_long (m68k_areg (regs, 7), oldpc); }}}endlabel918: ; return 8 * CYCLE_UNIT / 2; } /* JSR.L (d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4ebb_0)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword ()); { uaecptr oldpc = m68k_getpc () + 0; if (srca & 1) { exception3i (opcode, srca); goto endlabel919; } m68k_setpc (srca); m68k_areg (regs, 7) -= 4; put_long (m68k_areg (regs, 7), oldpc); }}}}endlabel919: ; return 8 * CYCLE_UNIT / 2; } /* JMP.L (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4ed0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3i (opcode, srca); goto endlabel920; } m68k_setpc (srca); }}endlabel920: ; return 4 * CYCLE_UNIT / 2; } /* JMP.L (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4ee8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); if (srca & 1) { exception3i (opcode, srca); goto endlabel921; } m68k_setpc (srca); }}endlabel921: ; return 8 * CYCLE_UNIT / 2; } /* JMP.L (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4ef0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); if (srca & 1) { exception3i (opcode, srca); goto endlabel922; } m68k_setpc (srca); }}}endlabel922: ; return 8 * CYCLE_UNIT / 2; } /* JMP.L (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4ef8_0)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); if (srca & 1) { exception3i (opcode, srca); goto endlabel923; } m68k_setpc (srca); }}endlabel923: ; return 8 * CYCLE_UNIT / 2; } /* JMP.L (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4ef9_0)(uae_u32 opcode) { {{ uaecptr srca = get_ilong (2); if (srca & 1) { exception3i (opcode, srca); goto endlabel924; } m68k_setpc (srca); }}endlabel924: ; return 12 * CYCLE_UNIT / 2; } /* JMP.L (d16,PC) */ uae_u32 REGPARAM2 CPUFUNC(op_4efa_0)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword (2); if (srca & 1) { exception3i (opcode, srca); goto endlabel925; } m68k_setpc (srca); }}endlabel925: ; return 8 * CYCLE_UNIT / 2; } /* JMP.L (d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4efb_0)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword ()); if (srca & 1) { exception3i (opcode, srca); goto endlabel926; } m68k_setpc (srca); }}}endlabel926: ; return 8 * CYCLE_UNIT / 2; } /* ADDQ.B #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_5000_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ADDQ.B #,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_5010_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* ADDQ.B #,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_5018_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* ADDQ.B #,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_5020_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* ADDQ.B #,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_5028_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s8 dst = get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* ADDQ.B #,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_5030_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); { uae_s8 dst = get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}}}return 16 * CYCLE_UNIT / 2; } /* ADDQ.B #,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_5038_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = (uae_s32)(uae_s16)get_iword (2); { uae_s8 dst = get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* ADDQ.B #,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_5039_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = get_ilong (2); { uae_s8 dst = get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* ADDQ.W #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_5040_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ADDAQ.W #,An */ uae_u32 REGPARAM2 CPUFUNC(op_5048_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ADDQ.W #,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_5050_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* ADDQ.W #,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_5058_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) += 2; {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* ADDQ.W #,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_5060_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* ADDQ.W #,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_5068_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s16 dst = get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* ADDQ.W #,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_5070_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); { uae_s16 dst = get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}}}return 16 * CYCLE_UNIT / 2; } #endif #ifdef PART_5 /* ADDQ.W #,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_5078_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = (uae_s32)(uae_s16)get_iword (2); { uae_s16 dst = get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* ADDQ.W #,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_5079_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = get_ilong (2); { uae_s16 dst = get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* ADDQ.L #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_5080_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ADDAQ.L #,An */ uae_u32 REGPARAM2 CPUFUNC(op_5088_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ADDQ.L #,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_5090_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}} m68k_incpc (2); return 20 * CYCLE_UNIT / 2; } /* ADDQ.L #,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_5098_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) += 4; {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}} m68k_incpc (2); return 20 * CYCLE_UNIT / 2; } /* ADDQ.L #,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_50a0_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}} m68k_incpc (2); return 22 * CYCLE_UNIT / 2; } /* ADDQ.L #,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_50a8_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s32 dst = get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}} m68k_incpc (4); return 24 * CYCLE_UNIT / 2; } /* ADDQ.L #,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_50b0_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); { uae_s32 dst = get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}}}return 24 * CYCLE_UNIT / 2; } /* ADDQ.L #,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_50b8_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = (uae_s32)(uae_s16)get_iword (2); { uae_s32 dst = get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}} m68k_incpc (4); return 24 * CYCLE_UNIT / 2; } /* ADDQ.L #,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_50b9_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = get_ilong (2); { uae_s32 dst = get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}} m68k_incpc (6); return 28 * CYCLE_UNIT / 2; } /* Scc.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_50c0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (0) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* DBcc.W Dn,#.W */ uae_u32 REGPARAM2 CPUFUNC(op_50c8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_iword (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (0)) { m68k_incpc ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel954; } return 12 * CYCLE_UNIT / 2; } } else { } m68k_setpc (oldpc + 4); }}}endlabel954: ; return 12 * CYCLE_UNIT / 2; } /* Scc.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_50d0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (0) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* Scc.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_50d8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (0) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* Scc.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_50e0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (0) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* Scc.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_50e8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); {{ int val = cctrue (0) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_50f0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); {{ int val = cctrue (0) ? 0xff : 0; put_byte (srca, val); }}}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_50f8_0)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); {{ int val = cctrue (0) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_50f9_0)(uae_u32 opcode) { {{ uaecptr srca = get_ilong (2); {{ int val = cctrue (0) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_50fa_0)(uae_u32 opcode) { {{ uae_s16 dummy = get_iword (2); if (cctrue (0)) { Exception (7); goto endlabel962; } }} m68k_incpc (4); endlabel962: ; return 8 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_50fb_0)(uae_u32 opcode) { {{ uae_s32 dummy = get_ilong (2); if (cctrue (0)) { Exception (7); goto endlabel963; } }} m68k_incpc (6); endlabel963: ; return 12 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_50fc_0)(uae_u32 opcode) { { if (cctrue (0)) { Exception (7); goto endlabel964; } } m68k_incpc (2); endlabel964: ; return 4 * CYCLE_UNIT / 2; } #endif /* SUBQ.B #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_5100_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* SUBQ.B #,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_5110_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* SUBQ.B #,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_5118_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* SUBQ.B #,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_5120_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* SUBQ.B #,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_5128_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s8 dst = get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* SUBQ.B #,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_5130_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); { uae_s8 dst = get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}}}return 16 * CYCLE_UNIT / 2; } /* SUBQ.B #,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_5138_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = (uae_s32)(uae_s16)get_iword (2); { uae_s8 dst = get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* SUBQ.B #,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_5139_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = get_ilong (2); { uae_s8 dst = get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* SUBQ.W #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_5140_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* SUBAQ.W #,An */ uae_u32 REGPARAM2 CPUFUNC(op_5148_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* SUBQ.W #,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_5150_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* SUBQ.W #,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_5158_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) += 2; {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* SUBQ.W #,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_5160_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* SUBQ.W #,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_5168_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s16 dst = get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* SUBQ.W #,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_5170_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); { uae_s16 dst = get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}}}return 16 * CYCLE_UNIT / 2; } /* SUBQ.W #,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_5178_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = (uae_s32)(uae_s16)get_iword (2); { uae_s16 dst = get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* SUBQ.W #,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_5179_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = get_ilong (2); { uae_s16 dst = get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* SUBQ.L #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_5180_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* SUBAQ.L #,An */ uae_u32 REGPARAM2 CPUFUNC(op_5188_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* SUBQ.L #,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_5190_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}} m68k_incpc (2); return 20 * CYCLE_UNIT / 2; } /* SUBQ.L #,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_5198_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) += 4; {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}} m68k_incpc (2); return 20 * CYCLE_UNIT / 2; } /* SUBQ.L #,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_51a0_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}} m68k_incpc (2); return 22 * CYCLE_UNIT / 2; } /* SUBQ.L #,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_51a8_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s32 dst = get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}} m68k_incpc (4); return 24 * CYCLE_UNIT / 2; } /* SUBQ.L #,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_51b0_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); { uae_s32 dst = get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}}}return 24 * CYCLE_UNIT / 2; } /* SUBQ.L #,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_51b8_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = (uae_s32)(uae_s16)get_iword (2); { uae_s32 dst = get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}} m68k_incpc (4); return 24 * CYCLE_UNIT / 2; } /* SUBQ.L #,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_51b9_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = get_ilong (2); { uae_s32 dst = get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}} m68k_incpc (6); return 28 * CYCLE_UNIT / 2; } /* Scc.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_51c0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (1) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* DBcc.W Dn,#.W */ uae_u32 REGPARAM2 CPUFUNC(op_51c8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_iword (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (1)) { m68k_incpc ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel992; } return 12 * CYCLE_UNIT / 2; } } else { } m68k_setpc (oldpc + 4); }}}endlabel992: ; return 12 * CYCLE_UNIT / 2; } /* Scc.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_51d0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (1) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* Scc.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_51d8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (1) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* Scc.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_51e0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (1) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* Scc.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_51e8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); {{ int val = cctrue (1) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_51f0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); {{ int val = cctrue (1) ? 0xff : 0; put_byte (srca, val); }}}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_51f8_0)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); {{ int val = cctrue (1) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_51f9_0)(uae_u32 opcode) { {{ uaecptr srca = get_ilong (2); {{ int val = cctrue (1) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_51fa_0)(uae_u32 opcode) { {{ uae_s16 dummy = get_iword (2); if (cctrue (1)) { Exception (7); goto endlabel1000; } }} m68k_incpc (4); endlabel1000: ; return 8 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_51fb_0)(uae_u32 opcode) { {{ uae_s32 dummy = get_ilong (2); if (cctrue (1)) { Exception (7); goto endlabel1001; } }} m68k_incpc (6); endlabel1001: ; return 12 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_51fc_0)(uae_u32 opcode) { { if (cctrue (1)) { Exception (7); goto endlabel1002; } } m68k_incpc (2); endlabel1002: ; return 4 * CYCLE_UNIT / 2; } #endif /* Scc.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_52c0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (2) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* DBcc.W Dn,#.W */ uae_u32 REGPARAM2 CPUFUNC(op_52c8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_iword (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (2)) { m68k_incpc ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel1004; } return 12 * CYCLE_UNIT / 2; } } else { } m68k_setpc (oldpc + 4); }}}endlabel1004: ; return 12 * CYCLE_UNIT / 2; } /* Scc.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_52d0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (2) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* Scc.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_52d8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (2) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* Scc.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_52e0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (2) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* Scc.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_52e8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); {{ int val = cctrue (2) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_52f0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); {{ int val = cctrue (2) ? 0xff : 0; put_byte (srca, val); }}}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_52f8_0)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); {{ int val = cctrue (2) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_52f9_0)(uae_u32 opcode) { {{ uaecptr srca = get_ilong (2); {{ int val = cctrue (2) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_52fa_0)(uae_u32 opcode) { {{ uae_s16 dummy = get_iword (2); if (cctrue (2)) { Exception (7); goto endlabel1012; } }} m68k_incpc (4); endlabel1012: ; return 8 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_52fb_0)(uae_u32 opcode) { {{ uae_s32 dummy = get_ilong (2); if (cctrue (2)) { Exception (7); goto endlabel1013; } }} m68k_incpc (6); endlabel1013: ; return 12 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_52fc_0)(uae_u32 opcode) { { if (cctrue (2)) { Exception (7); goto endlabel1014; } } m68k_incpc (2); endlabel1014: ; return 4 * CYCLE_UNIT / 2; } #endif /* Scc.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_53c0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (3) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* DBcc.W Dn,#.W */ uae_u32 REGPARAM2 CPUFUNC(op_53c8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_iword (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (3)) { m68k_incpc ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel1016; } return 12 * CYCLE_UNIT / 2; } } else { } m68k_setpc (oldpc + 4); }}}endlabel1016: ; return 12 * CYCLE_UNIT / 2; } /* Scc.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_53d0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (3) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* Scc.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_53d8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (3) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* Scc.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_53e0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (3) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* Scc.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_53e8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); {{ int val = cctrue (3) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_53f0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); {{ int val = cctrue (3) ? 0xff : 0; put_byte (srca, val); }}}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_53f8_0)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); {{ int val = cctrue (3) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_53f9_0)(uae_u32 opcode) { {{ uaecptr srca = get_ilong (2); {{ int val = cctrue (3) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_53fa_0)(uae_u32 opcode) { {{ uae_s16 dummy = get_iword (2); if (cctrue (3)) { Exception (7); goto endlabel1024; } }} m68k_incpc (4); endlabel1024: ; return 8 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_53fb_0)(uae_u32 opcode) { {{ uae_s32 dummy = get_ilong (2); if (cctrue (3)) { Exception (7); goto endlabel1025; } }} m68k_incpc (6); endlabel1025: ; return 12 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_53fc_0)(uae_u32 opcode) { { if (cctrue (3)) { Exception (7); goto endlabel1026; } } m68k_incpc (2); endlabel1026: ; return 4 * CYCLE_UNIT / 2; } #endif /* Scc.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_54c0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (4) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* DBcc.W Dn,#.W */ uae_u32 REGPARAM2 CPUFUNC(op_54c8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_iword (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (4)) { m68k_incpc ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel1028; } return 12 * CYCLE_UNIT / 2; } } else { } m68k_setpc (oldpc + 4); }}}endlabel1028: ; return 12 * CYCLE_UNIT / 2; } /* Scc.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_54d0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (4) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* Scc.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_54d8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (4) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* Scc.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_54e0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (4) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* Scc.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_54e8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); {{ int val = cctrue (4) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_54f0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); {{ int val = cctrue (4) ? 0xff : 0; put_byte (srca, val); }}}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_54f8_0)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); {{ int val = cctrue (4) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_54f9_0)(uae_u32 opcode) { {{ uaecptr srca = get_ilong (2); {{ int val = cctrue (4) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_54fa_0)(uae_u32 opcode) { {{ uae_s16 dummy = get_iword (2); if (cctrue (4)) { Exception (7); goto endlabel1036; } }} m68k_incpc (4); endlabel1036: ; return 8 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_54fb_0)(uae_u32 opcode) { {{ uae_s32 dummy = get_ilong (2); if (cctrue (4)) { Exception (7); goto endlabel1037; } }} m68k_incpc (6); endlabel1037: ; return 12 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_54fc_0)(uae_u32 opcode) { { if (cctrue (4)) { Exception (7); goto endlabel1038; } } m68k_incpc (2); endlabel1038: ; return 4 * CYCLE_UNIT / 2; } #endif /* Scc.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_55c0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (5) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* DBcc.W Dn,#.W */ uae_u32 REGPARAM2 CPUFUNC(op_55c8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_iword (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (5)) { m68k_incpc ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel1040; } return 12 * CYCLE_UNIT / 2; } } else { } m68k_setpc (oldpc + 4); }}}endlabel1040: ; return 12 * CYCLE_UNIT / 2; } /* Scc.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_55d0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (5) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* Scc.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_55d8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (5) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* Scc.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_55e0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (5) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* Scc.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_55e8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); {{ int val = cctrue (5) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_55f0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); {{ int val = cctrue (5) ? 0xff : 0; put_byte (srca, val); }}}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_55f8_0)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); {{ int val = cctrue (5) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_55f9_0)(uae_u32 opcode) { {{ uaecptr srca = get_ilong (2); {{ int val = cctrue (5) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_55fa_0)(uae_u32 opcode) { {{ uae_s16 dummy = get_iword (2); if (cctrue (5)) { Exception (7); goto endlabel1048; } }} m68k_incpc (4); endlabel1048: ; return 8 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_55fb_0)(uae_u32 opcode) { {{ uae_s32 dummy = get_ilong (2); if (cctrue (5)) { Exception (7); goto endlabel1049; } }} m68k_incpc (6); endlabel1049: ; return 12 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_55fc_0)(uae_u32 opcode) { { if (cctrue (5)) { Exception (7); goto endlabel1050; } } m68k_incpc (2); endlabel1050: ; return 4 * CYCLE_UNIT / 2; } #endif /* Scc.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_56c0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (6) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* DBcc.W Dn,#.W */ uae_u32 REGPARAM2 CPUFUNC(op_56c8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_iword (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (6)) { m68k_incpc ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel1052; } return 12 * CYCLE_UNIT / 2; } } else { } m68k_setpc (oldpc + 4); }}}endlabel1052: ; return 12 * CYCLE_UNIT / 2; } /* Scc.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_56d0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (6) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* Scc.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_56d8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (6) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* Scc.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_56e0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (6) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* Scc.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_56e8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); {{ int val = cctrue (6) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_56f0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); {{ int val = cctrue (6) ? 0xff : 0; put_byte (srca, val); }}}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_56f8_0)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); {{ int val = cctrue (6) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_56f9_0)(uae_u32 opcode) { {{ uaecptr srca = get_ilong (2); {{ int val = cctrue (6) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_56fa_0)(uae_u32 opcode) { {{ uae_s16 dummy = get_iword (2); if (cctrue (6)) { Exception (7); goto endlabel1060; } }} m68k_incpc (4); endlabel1060: ; return 8 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_56fb_0)(uae_u32 opcode) { {{ uae_s32 dummy = get_ilong (2); if (cctrue (6)) { Exception (7); goto endlabel1061; } }} m68k_incpc (6); endlabel1061: ; return 12 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_56fc_0)(uae_u32 opcode) { { if (cctrue (6)) { Exception (7); goto endlabel1062; } } m68k_incpc (2); endlabel1062: ; return 4 * CYCLE_UNIT / 2; } #endif /* Scc.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_57c0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (7) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* DBcc.W Dn,#.W */ uae_u32 REGPARAM2 CPUFUNC(op_57c8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_iword (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (7)) { m68k_incpc ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel1064; } return 12 * CYCLE_UNIT / 2; } } else { } m68k_setpc (oldpc + 4); }}}endlabel1064: ; return 12 * CYCLE_UNIT / 2; } /* Scc.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_57d0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (7) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* Scc.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_57d8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (7) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* Scc.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_57e0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (7) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* Scc.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_57e8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); {{ int val = cctrue (7) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_57f0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); {{ int val = cctrue (7) ? 0xff : 0; put_byte (srca, val); }}}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_57f8_0)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); {{ int val = cctrue (7) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_57f9_0)(uae_u32 opcode) { {{ uaecptr srca = get_ilong (2); {{ int val = cctrue (7) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_57fa_0)(uae_u32 opcode) { {{ uae_s16 dummy = get_iword (2); if (cctrue (7)) { Exception (7); goto endlabel1072; } }} m68k_incpc (4); endlabel1072: ; return 8 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_57fb_0)(uae_u32 opcode) { {{ uae_s32 dummy = get_ilong (2); if (cctrue (7)) { Exception (7); goto endlabel1073; } }} m68k_incpc (6); endlabel1073: ; return 12 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_57fc_0)(uae_u32 opcode) { { if (cctrue (7)) { Exception (7); goto endlabel1074; } } m68k_incpc (2); endlabel1074: ; return 4 * CYCLE_UNIT / 2; } #endif /* Scc.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_58c0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (8) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* DBcc.W Dn,#.W */ uae_u32 REGPARAM2 CPUFUNC(op_58c8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_iword (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (8)) { m68k_incpc ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel1076; } return 12 * CYCLE_UNIT / 2; } } else { } m68k_setpc (oldpc + 4); }}}endlabel1076: ; return 12 * CYCLE_UNIT / 2; } /* Scc.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_58d0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (8) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* Scc.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_58d8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (8) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* Scc.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_58e0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (8) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* Scc.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_58e8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); {{ int val = cctrue (8) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_58f0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); {{ int val = cctrue (8) ? 0xff : 0; put_byte (srca, val); }}}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_58f8_0)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); {{ int val = cctrue (8) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_58f9_0)(uae_u32 opcode) { {{ uaecptr srca = get_ilong (2); {{ int val = cctrue (8) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_58fa_0)(uae_u32 opcode) { {{ uae_s16 dummy = get_iword (2); if (cctrue (8)) { Exception (7); goto endlabel1084; } }} m68k_incpc (4); endlabel1084: ; return 8 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_58fb_0)(uae_u32 opcode) { {{ uae_s32 dummy = get_ilong (2); if (cctrue (8)) { Exception (7); goto endlabel1085; } }} m68k_incpc (6); endlabel1085: ; return 12 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_58fc_0)(uae_u32 opcode) { { if (cctrue (8)) { Exception (7); goto endlabel1086; } } m68k_incpc (2); endlabel1086: ; return 4 * CYCLE_UNIT / 2; } #endif /* Scc.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_59c0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (9) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* DBcc.W Dn,#.W */ uae_u32 REGPARAM2 CPUFUNC(op_59c8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_iword (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (9)) { m68k_incpc ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel1088; } return 12 * CYCLE_UNIT / 2; } } else { } m68k_setpc (oldpc + 4); }}}endlabel1088: ; return 12 * CYCLE_UNIT / 2; } /* Scc.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_59d0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (9) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* Scc.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_59d8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (9) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* Scc.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_59e0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (9) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* Scc.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_59e8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); {{ int val = cctrue (9) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_59f0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); {{ int val = cctrue (9) ? 0xff : 0; put_byte (srca, val); }}}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_59f8_0)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); {{ int val = cctrue (9) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_59f9_0)(uae_u32 opcode) { {{ uaecptr srca = get_ilong (2); {{ int val = cctrue (9) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_59fa_0)(uae_u32 opcode) { {{ uae_s16 dummy = get_iword (2); if (cctrue (9)) { Exception (7); goto endlabel1096; } }} m68k_incpc (4); endlabel1096: ; return 8 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_59fb_0)(uae_u32 opcode) { {{ uae_s32 dummy = get_ilong (2); if (cctrue (9)) { Exception (7); goto endlabel1097; } }} m68k_incpc (6); endlabel1097: ; return 12 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_59fc_0)(uae_u32 opcode) { { if (cctrue (9)) { Exception (7); goto endlabel1098; } } m68k_incpc (2); endlabel1098: ; return 4 * CYCLE_UNIT / 2; } #endif /* Scc.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_5ac0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (10) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* DBcc.W Dn,#.W */ uae_u32 REGPARAM2 CPUFUNC(op_5ac8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_iword (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (10)) { m68k_incpc ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel1100; } return 12 * CYCLE_UNIT / 2; } } else { } m68k_setpc (oldpc + 4); }}}endlabel1100: ; return 12 * CYCLE_UNIT / 2; } /* Scc.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_5ad0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (10) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* Scc.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_5ad8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (10) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* Scc.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_5ae0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (10) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* Scc.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_5ae8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); {{ int val = cctrue (10) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_5af0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); {{ int val = cctrue (10) ? 0xff : 0; put_byte (srca, val); }}}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_5af8_0)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); {{ int val = cctrue (10) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_5af9_0)(uae_u32 opcode) { {{ uaecptr srca = get_ilong (2); {{ int val = cctrue (10) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_5afa_0)(uae_u32 opcode) { {{ uae_s16 dummy = get_iword (2); if (cctrue (10)) { Exception (7); goto endlabel1108; } }} m68k_incpc (4); endlabel1108: ; return 8 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_5afb_0)(uae_u32 opcode) { {{ uae_s32 dummy = get_ilong (2); if (cctrue (10)) { Exception (7); goto endlabel1109; } }} m68k_incpc (6); endlabel1109: ; return 12 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_5afc_0)(uae_u32 opcode) { { if (cctrue (10)) { Exception (7); goto endlabel1110; } } m68k_incpc (2); endlabel1110: ; return 4 * CYCLE_UNIT / 2; } #endif /* Scc.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_5bc0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (11) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* DBcc.W Dn,#.W */ uae_u32 REGPARAM2 CPUFUNC(op_5bc8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_iword (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (11)) { m68k_incpc ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel1112; } return 12 * CYCLE_UNIT / 2; } } else { } m68k_setpc (oldpc + 4); }}}endlabel1112: ; return 12 * CYCLE_UNIT / 2; } /* Scc.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_5bd0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (11) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* Scc.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_5bd8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (11) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* Scc.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_5be0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (11) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* Scc.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_5be8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); {{ int val = cctrue (11) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_5bf0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); {{ int val = cctrue (11) ? 0xff : 0; put_byte (srca, val); }}}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_5bf8_0)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); {{ int val = cctrue (11) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_5bf9_0)(uae_u32 opcode) { {{ uaecptr srca = get_ilong (2); {{ int val = cctrue (11) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_5bfa_0)(uae_u32 opcode) { {{ uae_s16 dummy = get_iword (2); if (cctrue (11)) { Exception (7); goto endlabel1120; } }} m68k_incpc (4); endlabel1120: ; return 8 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_5bfb_0)(uae_u32 opcode) { {{ uae_s32 dummy = get_ilong (2); if (cctrue (11)) { Exception (7); goto endlabel1121; } }} m68k_incpc (6); endlabel1121: ; return 12 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_5bfc_0)(uae_u32 opcode) { { if (cctrue (11)) { Exception (7); goto endlabel1122; } } m68k_incpc (2); endlabel1122: ; return 4 * CYCLE_UNIT / 2; } #endif /* Scc.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_5cc0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (12) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* DBcc.W Dn,#.W */ uae_u32 REGPARAM2 CPUFUNC(op_5cc8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_iword (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (12)) { m68k_incpc ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel1124; } return 12 * CYCLE_UNIT / 2; } } else { } m68k_setpc (oldpc + 4); }}}endlabel1124: ; return 12 * CYCLE_UNIT / 2; } /* Scc.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_5cd0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (12) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* Scc.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_5cd8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (12) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* Scc.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_5ce0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (12) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* Scc.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_5ce8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); {{ int val = cctrue (12) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_5cf0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); {{ int val = cctrue (12) ? 0xff : 0; put_byte (srca, val); }}}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_5cf8_0)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); {{ int val = cctrue (12) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_5cf9_0)(uae_u32 opcode) { {{ uaecptr srca = get_ilong (2); {{ int val = cctrue (12) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_5cfa_0)(uae_u32 opcode) { {{ uae_s16 dummy = get_iword (2); if (cctrue (12)) { Exception (7); goto endlabel1132; } }} m68k_incpc (4); endlabel1132: ; return 8 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_5cfb_0)(uae_u32 opcode) { {{ uae_s32 dummy = get_ilong (2); if (cctrue (12)) { Exception (7); goto endlabel1133; } }} m68k_incpc (6); endlabel1133: ; return 12 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_5cfc_0)(uae_u32 opcode) { { if (cctrue (12)) { Exception (7); goto endlabel1134; } } m68k_incpc (2); endlabel1134: ; return 4 * CYCLE_UNIT / 2; } #endif /* Scc.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_5dc0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (13) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* DBcc.W Dn,#.W */ uae_u32 REGPARAM2 CPUFUNC(op_5dc8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_iword (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (13)) { m68k_incpc ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel1136; } return 12 * CYCLE_UNIT / 2; } } else { } m68k_setpc (oldpc + 4); }}}endlabel1136: ; return 12 * CYCLE_UNIT / 2; } /* Scc.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_5dd0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (13) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* Scc.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_5dd8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (13) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* Scc.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_5de0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (13) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* Scc.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_5de8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); {{ int val = cctrue (13) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_5df0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); {{ int val = cctrue (13) ? 0xff : 0; put_byte (srca, val); }}}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_5df8_0)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); {{ int val = cctrue (13) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_5df9_0)(uae_u32 opcode) { {{ uaecptr srca = get_ilong (2); {{ int val = cctrue (13) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_5dfa_0)(uae_u32 opcode) { {{ uae_s16 dummy = get_iword (2); if (cctrue (13)) { Exception (7); goto endlabel1144; } }} m68k_incpc (4); endlabel1144: ; return 8 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_5dfb_0)(uae_u32 opcode) { {{ uae_s32 dummy = get_ilong (2); if (cctrue (13)) { Exception (7); goto endlabel1145; } }} m68k_incpc (6); endlabel1145: ; return 12 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_5dfc_0)(uae_u32 opcode) { { if (cctrue (13)) { Exception (7); goto endlabel1146; } } m68k_incpc (2); endlabel1146: ; return 4 * CYCLE_UNIT / 2; } #endif /* Scc.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_5ec0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (14) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* DBcc.W Dn,#.W */ uae_u32 REGPARAM2 CPUFUNC(op_5ec8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_iword (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (14)) { m68k_incpc ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel1148; } return 12 * CYCLE_UNIT / 2; } } else { } m68k_setpc (oldpc + 4); }}}endlabel1148: ; return 12 * CYCLE_UNIT / 2; } /* Scc.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_5ed0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (14) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* Scc.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_5ed8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (14) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* Scc.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_5ee0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (14) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* Scc.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_5ee8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); {{ int val = cctrue (14) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_5ef0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); {{ int val = cctrue (14) ? 0xff : 0; put_byte (srca, val); }}}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_5ef8_0)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); {{ int val = cctrue (14) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_5ef9_0)(uae_u32 opcode) { {{ uaecptr srca = get_ilong (2); {{ int val = cctrue (14) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_5efa_0)(uae_u32 opcode) { {{ uae_s16 dummy = get_iword (2); if (cctrue (14)) { Exception (7); goto endlabel1156; } }} m68k_incpc (4); endlabel1156: ; return 8 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_5efb_0)(uae_u32 opcode) { {{ uae_s32 dummy = get_ilong (2); if (cctrue (14)) { Exception (7); goto endlabel1157; } }} m68k_incpc (6); endlabel1157: ; return 12 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_5efc_0)(uae_u32 opcode) { { if (cctrue (14)) { Exception (7); goto endlabel1158; } } m68k_incpc (2); endlabel1158: ; return 4 * CYCLE_UNIT / 2; } #endif /* Scc.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_5fc0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (15) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* DBcc.W Dn,#.W */ uae_u32 REGPARAM2 CPUFUNC(op_5fc8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_iword (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (15)) { m68k_incpc ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel1160; } return 12 * CYCLE_UNIT / 2; } } else { } m68k_setpc (oldpc + 4); }}}endlabel1160: ; return 12 * CYCLE_UNIT / 2; } /* Scc.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_5fd0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (15) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* Scc.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_5fd8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (15) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* Scc.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_5fe0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (15) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* Scc.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_5fe8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); {{ int val = cctrue (15) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_5ff0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); {{ int val = cctrue (15) ? 0xff : 0; put_byte (srca, val); }}}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_5ff8_0)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); {{ int val = cctrue (15) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_5ff9_0)(uae_u32 opcode) { {{ uaecptr srca = get_ilong (2); {{ int val = cctrue (15) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_5ffa_0)(uae_u32 opcode) { {{ uae_s16 dummy = get_iword (2); if (cctrue (15)) { Exception (7); goto endlabel1168; } }} m68k_incpc (4); endlabel1168: ; return 8 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_5ffb_0)(uae_u32 opcode) { {{ uae_s32 dummy = get_ilong (2); if (cctrue (15)) { Exception (7); goto endlabel1169; } }} m68k_incpc (6); endlabel1169: ; return 12 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_5ffc_0)(uae_u32 opcode) { { if (cctrue (15)) { Exception (7); goto endlabel1170; } } m68k_incpc (2); endlabel1170: ; return 4 * CYCLE_UNIT / 2; } #endif /* Bcc.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_6000_0)(uae_u32 opcode) { {{ uae_s16 src = get_iword (2); if (!cctrue (0)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel1171; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); }}endlabel1171: ; return 12 * CYCLE_UNIT / 2; } /* BccQ.B # */ uae_u32 REGPARAM2 CPUFUNC(op_6001_0)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (0)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel1172; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (2); }}endlabel1172: ; return 8 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_60ff_0)(uae_u32 opcode) { {{ uae_s32 src = get_ilong (2); if (!cctrue (0)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel1173; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (6); }}endlabel1173: ; return 12 * CYCLE_UNIT / 2; } /* BSR.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_6100_0)(uae_u32 opcode) { { uae_s32 s; { uae_s16 src = get_iword (2); s = (uae_s32)src + 2; if (src & 1) { exception3 (opcode, m68k_getpc () + s, 0, 1, m68k_getpc () + s); goto endlabel1174; } m68k_do_bsr (m68k_getpc () + 4, s); }}endlabel1174: ; return 8 * CYCLE_UNIT / 2; } /* BSRQ.B # */ uae_u32 REGPARAM2 CPUFUNC(op_6101_0)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); { uae_s32 s; { uae_u32 src = srcreg; s = (uae_s32)src + 2; if (src & 1) { exception3 (opcode, m68k_getpc () + s, 0, 1, m68k_getpc () + s); goto endlabel1175; } m68k_do_bsr (m68k_getpc () + 2, s); }}endlabel1175: ; return 4 * CYCLE_UNIT / 2; } /* BSR.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_61ff_0)(uae_u32 opcode) { { uae_s32 s; { uae_s32 src = get_ilong (2); s = (uae_s32)src + 2; if (src & 1) { exception3 (opcode, m68k_getpc () + s, 0, 1, m68k_getpc () + s); goto endlabel1176; } m68k_do_bsr (m68k_getpc () + 6, s); }}endlabel1176: ; return 12 * CYCLE_UNIT / 2; } #endif #ifdef PART_6 /* Bcc.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_6200_0)(uae_u32 opcode) { {{ uae_s16 src = get_iword (2); if (!cctrue (2)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel1177; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); }}endlabel1177: ; return 12 * CYCLE_UNIT / 2; } /* BccQ.B # */ uae_u32 REGPARAM2 CPUFUNC(op_6201_0)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (2)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel1178; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (2); }}endlabel1178: ; return 8 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_62ff_0)(uae_u32 opcode) { {{ uae_s32 src = get_ilong (2); if (!cctrue (2)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel1179; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (6); }}endlabel1179: ; return 12 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_6300_0)(uae_u32 opcode) { {{ uae_s16 src = get_iword (2); if (!cctrue (3)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel1180; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); }}endlabel1180: ; return 12 * CYCLE_UNIT / 2; } /* BccQ.B # */ uae_u32 REGPARAM2 CPUFUNC(op_6301_0)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (3)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel1181; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (2); }}endlabel1181: ; return 8 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_63ff_0)(uae_u32 opcode) { {{ uae_s32 src = get_ilong (2); if (!cctrue (3)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel1182; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (6); }}endlabel1182: ; return 12 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_6400_0)(uae_u32 opcode) { {{ uae_s16 src = get_iword (2); if (!cctrue (4)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel1183; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); }}endlabel1183: ; return 12 * CYCLE_UNIT / 2; } /* BccQ.B # */ uae_u32 REGPARAM2 CPUFUNC(op_6401_0)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (4)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel1184; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (2); }}endlabel1184: ; return 8 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_64ff_0)(uae_u32 opcode) { {{ uae_s32 src = get_ilong (2); if (!cctrue (4)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel1185; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (6); }}endlabel1185: ; return 12 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_6500_0)(uae_u32 opcode) { {{ uae_s16 src = get_iword (2); if (!cctrue (5)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel1186; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); }}endlabel1186: ; return 12 * CYCLE_UNIT / 2; } /* BccQ.B # */ uae_u32 REGPARAM2 CPUFUNC(op_6501_0)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (5)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel1187; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (2); }}endlabel1187: ; return 8 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_65ff_0)(uae_u32 opcode) { {{ uae_s32 src = get_ilong (2); if (!cctrue (5)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel1188; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (6); }}endlabel1188: ; return 12 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_6600_0)(uae_u32 opcode) { {{ uae_s16 src = get_iword (2); if (!cctrue (6)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel1189; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); }}endlabel1189: ; return 12 * CYCLE_UNIT / 2; } /* BccQ.B # */ uae_u32 REGPARAM2 CPUFUNC(op_6601_0)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (6)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel1190; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (2); }}endlabel1190: ; return 8 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_66ff_0)(uae_u32 opcode) { {{ uae_s32 src = get_ilong (2); if (!cctrue (6)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel1191; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (6); }}endlabel1191: ; return 12 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_6700_0)(uae_u32 opcode) { {{ uae_s16 src = get_iword (2); if (!cctrue (7)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel1192; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); }}endlabel1192: ; return 12 * CYCLE_UNIT / 2; } /* BccQ.B # */ uae_u32 REGPARAM2 CPUFUNC(op_6701_0)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (7)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel1193; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (2); }}endlabel1193: ; return 8 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_67ff_0)(uae_u32 opcode) { {{ uae_s32 src = get_ilong (2); if (!cctrue (7)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel1194; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (6); }}endlabel1194: ; return 12 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_6800_0)(uae_u32 opcode) { {{ uae_s16 src = get_iword (2); if (!cctrue (8)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel1195; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); }}endlabel1195: ; return 12 * CYCLE_UNIT / 2; } /* BccQ.B # */ uae_u32 REGPARAM2 CPUFUNC(op_6801_0)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (8)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel1196; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (2); }}endlabel1196: ; return 8 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_68ff_0)(uae_u32 opcode) { {{ uae_s32 src = get_ilong (2); if (!cctrue (8)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel1197; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (6); }}endlabel1197: ; return 12 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_6900_0)(uae_u32 opcode) { {{ uae_s16 src = get_iword (2); if (!cctrue (9)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel1198; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); }}endlabel1198: ; return 12 * CYCLE_UNIT / 2; } /* BccQ.B # */ uae_u32 REGPARAM2 CPUFUNC(op_6901_0)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (9)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel1199; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (2); }}endlabel1199: ; return 8 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_69ff_0)(uae_u32 opcode) { {{ uae_s32 src = get_ilong (2); if (!cctrue (9)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel1200; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (6); }}endlabel1200: ; return 12 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_6a00_0)(uae_u32 opcode) { {{ uae_s16 src = get_iword (2); if (!cctrue (10)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel1201; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); }}endlabel1201: ; return 12 * CYCLE_UNIT / 2; } /* BccQ.B # */ uae_u32 REGPARAM2 CPUFUNC(op_6a01_0)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (10)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel1202; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (2); }}endlabel1202: ; return 8 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_6aff_0)(uae_u32 opcode) { {{ uae_s32 src = get_ilong (2); if (!cctrue (10)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel1203; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (6); }}endlabel1203: ; return 12 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_6b00_0)(uae_u32 opcode) { {{ uae_s16 src = get_iword (2); if (!cctrue (11)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel1204; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); }}endlabel1204: ; return 12 * CYCLE_UNIT / 2; } /* BccQ.B # */ uae_u32 REGPARAM2 CPUFUNC(op_6b01_0)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (11)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel1205; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (2); }}endlabel1205: ; return 8 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_6bff_0)(uae_u32 opcode) { {{ uae_s32 src = get_ilong (2); if (!cctrue (11)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel1206; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (6); }}endlabel1206: ; return 12 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_6c00_0)(uae_u32 opcode) { {{ uae_s16 src = get_iword (2); if (!cctrue (12)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel1207; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); }}endlabel1207: ; return 12 * CYCLE_UNIT / 2; } /* BccQ.B # */ uae_u32 REGPARAM2 CPUFUNC(op_6c01_0)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (12)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel1208; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (2); }}endlabel1208: ; return 8 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_6cff_0)(uae_u32 opcode) { {{ uae_s32 src = get_ilong (2); if (!cctrue (12)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel1209; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (6); }}endlabel1209: ; return 12 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_6d00_0)(uae_u32 opcode) { {{ uae_s16 src = get_iword (2); if (!cctrue (13)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel1210; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); }}endlabel1210: ; return 12 * CYCLE_UNIT / 2; } /* BccQ.B # */ uae_u32 REGPARAM2 CPUFUNC(op_6d01_0)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (13)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel1211; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (2); }}endlabel1211: ; return 8 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_6dff_0)(uae_u32 opcode) { {{ uae_s32 src = get_ilong (2); if (!cctrue (13)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel1212; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (6); }}endlabel1212: ; return 12 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_6e00_0)(uae_u32 opcode) { {{ uae_s16 src = get_iword (2); if (!cctrue (14)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel1213; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); }}endlabel1213: ; return 12 * CYCLE_UNIT / 2; } /* BccQ.B # */ uae_u32 REGPARAM2 CPUFUNC(op_6e01_0)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (14)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel1214; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (2); }}endlabel1214: ; return 8 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_6eff_0)(uae_u32 opcode) { {{ uae_s32 src = get_ilong (2); if (!cctrue (14)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel1215; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (6); }}endlabel1215: ; return 12 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_6f00_0)(uae_u32 opcode) { {{ uae_s16 src = get_iword (2); if (!cctrue (15)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel1216; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); }}endlabel1216: ; return 12 * CYCLE_UNIT / 2; } /* BccQ.B # */ uae_u32 REGPARAM2 CPUFUNC(op_6f01_0)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (15)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel1217; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (2); }}endlabel1217: ; return 8 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_6fff_0)(uae_u32 opcode) { {{ uae_s32 src = get_ilong (2); if (!cctrue (15)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel1218; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (6); }}endlabel1218: ; return 12 * CYCLE_UNIT / 2; } /* MOVEQ.L #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_7000_0)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_u32 src = srcreg; { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpc (2); }}}return 4 * CYCLE_UNIT / 2; } /* OR.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8000_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* OR.B (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8010_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* OR.B (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8018_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* OR.B -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8020_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) = srca; { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* OR.B (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8028_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* OR.B (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8030_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}}}return 12 * CYCLE_UNIT / 2; } /* OR.B (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8038_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* OR.B (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8039_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong (2); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* OR.B (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_803a_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword (2); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* OR.B (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_803b_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword ()); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}}}return 12 * CYCLE_UNIT / 2; } /* OR.B #.B,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_803c_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = get_ibyte (2); { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* OR.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8040_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* OR.W (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8050_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* OR.W (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8058_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* OR.W -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8060_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* OR.W (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8068_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* OR.W (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8070_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}}return 12 * CYCLE_UNIT / 2; } /* OR.W (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8078_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* OR.W (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8079_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong (2); { uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* OR.W (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_807a_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* OR.W (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_807b_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword ()); { uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}}return 12 * CYCLE_UNIT / 2; } /* OR.W #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_807c_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_iword (2); { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* OR.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8080_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* OR.L (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8090_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* OR.L (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8098_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) += 4; { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* OR.L -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80a0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* OR.L (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80a8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* OR.L (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80b0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}}}return 16 * CYCLE_UNIT / 2; } /* OR.L (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80b8_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* OR.L (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80b9_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong (2); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* OR.L (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80ba_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword (2); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* OR.L (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80bb_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword ()); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}}}return 16 * CYCLE_UNIT / 2; } /* OR.L #.L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80bc_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_ilong (2); { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } /* DIVU.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80c0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); if (dst < 0) SET_NFLG (1); m68k_incpc (2); Exception (5); goto endlabel1253; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (2); } }}}endlabel1253: ; return 110 * CYCLE_UNIT / 2; } /* DIVU.W (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80d0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); if (dst < 0) SET_NFLG (1); m68k_incpc (2); Exception (5); goto endlabel1254; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (2); } }}}}endlabel1254: ; return 114 * CYCLE_UNIT / 2; } /* DIVU.W (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80d8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); if (dst < 0) SET_NFLG (1); m68k_incpc (2); Exception (5); goto endlabel1255; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (2); } }}}}endlabel1255: ; return 114 * CYCLE_UNIT / 2; } /* DIVU.W -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80e0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); if (dst < 0) SET_NFLG (1); m68k_incpc (2); Exception (5); goto endlabel1256; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (2); } }}}}endlabel1256: ; return 116 * CYCLE_UNIT / 2; } /* DIVU.W (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80e8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); if (dst < 0) SET_NFLG (1); m68k_incpc (4); Exception (5); goto endlabel1257; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (4); } }}}}endlabel1257: ; return 118 * CYCLE_UNIT / 2; } /* DIVU.W (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80f0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s16 src = get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); if (dst < 0) SET_NFLG (1); m68k_incpc (0); Exception (5); goto endlabel1258; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } } }}}}}endlabel1258: ; return 118 * CYCLE_UNIT / 2; } /* DIVU.W (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80f8_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); if (dst < 0) SET_NFLG (1); m68k_incpc (4); Exception (5); goto endlabel1259; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (4); } }}}}endlabel1259: ; return 118 * CYCLE_UNIT / 2; } /* DIVU.W (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80f9_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong (2); { uae_s16 src = get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); if (dst < 0) SET_NFLG (1); m68k_incpc (6); Exception (5); goto endlabel1260; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (6); } }}}}endlabel1260: ; return 122 * CYCLE_UNIT / 2; } /* DIVU.W (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80fa_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); if (dst < 0) SET_NFLG (1); m68k_incpc (4); Exception (5); goto endlabel1261; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (4); } }}}}endlabel1261: ; return 118 * CYCLE_UNIT / 2; } /* DIVU.W (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80fb_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword ()); { uae_s16 src = get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); if (dst < 0) SET_NFLG (1); m68k_incpc (0); Exception (5); goto endlabel1262; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } } }}}}}endlabel1262: ; return 118 * CYCLE_UNIT / 2; } /* DIVU.W #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80fc_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_iword (2); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); if (dst < 0) SET_NFLG (1); m68k_incpc (4); Exception (5); goto endlabel1263; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (4); } }}}endlabel1263: ; return 114 * CYCLE_UNIT / 2; } /* SBCD.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8100_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); { uae_u16 newv_lo = (dst & 0xF) - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = (dst & 0xF0) - (src & 0xF0); uae_u16 newv, tmp_newv; int bcd = 0; newv = tmp_newv = newv_hi + newv_lo; if (newv_lo & 0xF0) { newv -= 6; bcd = 6; }; if ((((dst & 0xFF) - (src & 0xFF) - (GET_XFLG () ? 1 : 0)) & 0x100) > 0xFF) { newv -= 0x60; } SET_CFLG ((((dst & 0xFF) - (src & 0xFF) - bcd - (GET_XFLG () ? 1 : 0)) & 0x300) > 0xFF); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* SBCD.B -(An),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_8108_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) = dsta; { uae_u16 newv_lo = (dst & 0xF) - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = (dst & 0xF0) - (src & 0xF0); uae_u16 newv, tmp_newv; int bcd = 0; newv = tmp_newv = newv_hi + newv_lo; if (newv_lo & 0xF0) { newv -= 6; bcd = 6; }; if ((((dst & 0xFF) - (src & 0xFF) - (GET_XFLG () ? 1 : 0)) & 0x100) > 0xFF) { newv -= 0x60; } SET_CFLG ((((dst & 0xFF) - (src & 0xFF) - bcd - (GET_XFLG () ? 1 : 0)) & 0x300) > 0xFF); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); put_byte (dsta, newv); }}}}}} m68k_incpc (2); return 16 * CYCLE_UNIT / 2; } /* OR.B Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_8110_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* OR.B Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_8118_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* OR.B Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_8120_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) = dsta; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); }}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* OR.B Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_8128_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s8 dst = get_byte (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* OR.B Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_8130_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); { uae_s8 dst = get_byte (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); }}}}}return 16 * CYCLE_UNIT / 2; } /* OR.B Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_8138_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (2); { uae_s8 dst = get_byte (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* OR.B Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_8139_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_ilong (2); { uae_s8 dst = get_byte (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* PACK.L Dn,Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_8140_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; { uae_u16 val = m68k_dreg (regs, srcreg) + get_iword (2); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & 0xffffff00) | ((val >> 4) & 0xf0) | (val & 0xf); } m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } #endif /* PACK.L -(An),-(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_8148_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; { uae_u16 val; m68k_areg (regs, srcreg) -= areg_byteinc[srcreg]; val = (uae_u16)get_byte (m68k_areg (regs, srcreg)); m68k_areg (regs, srcreg) -= areg_byteinc[srcreg]; val = (val | ((uae_u16)get_byte (m68k_areg (regs, srcreg)) << 8)) + get_iword (2); m68k_areg (regs, dstreg) -= areg_byteinc[dstreg]; put_byte (m68k_areg (regs, dstreg),((val >> 4) & 0xf0) | (val & 0xf)); } m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } #endif /* OR.W Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_8150_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = get_word (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* OR.W Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_8158_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) += 2; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* OR.W Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_8160_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) = dsta; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); }}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* OR.W Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_8168_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s16 dst = get_word (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* OR.W Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_8170_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); { uae_s16 dst = get_word (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); }}}}}return 16 * CYCLE_UNIT / 2; } /* OR.W Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_8178_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (2); { uae_s16 dst = get_word (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* OR.W Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_8179_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_ilong (2); { uae_s16 dst = get_word (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* UNPK.L Dn,Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_8180_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; { uae_u16 val = m68k_dreg (regs, srcreg); val = (((val << 4) & 0xf00) | (val & 0xf)) + get_iword (2); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & 0xffff0000) | (val & 0xffff); } m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } #endif /* UNPK.L -(An),-(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_8188_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; { uae_u16 val; m68k_areg (regs, srcreg) -= areg_byteinc[srcreg]; val = (uae_u16)get_byte (m68k_areg (regs, srcreg)); val = (((val << 4) & 0xf00) | (val & 0xf)) + get_iword (2); m68k_areg (regs, dstreg) -= 2 * areg_byteinc[dstreg]; put_byte (m68k_areg (regs, dstreg) + areg_byteinc[dstreg], val); put_byte (m68k_areg (regs, dstreg), val >> 8); } m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } #endif /* OR.L Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_8190_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = get_long (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); }}}} m68k_incpc (2); return 20 * CYCLE_UNIT / 2; } /* OR.L Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_8198_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) += 4; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); }}}} m68k_incpc (2); return 20 * CYCLE_UNIT / 2; } /* OR.L Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_81a0_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) = dsta; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); }}}} m68k_incpc (2); return 22 * CYCLE_UNIT / 2; } /* OR.L Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_81a8_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s32 dst = get_long (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); }}}} m68k_incpc (4); return 24 * CYCLE_UNIT / 2; } /* OR.L Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_81b0_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); { uae_s32 dst = get_long (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); }}}}}return 24 * CYCLE_UNIT / 2; } /* OR.L Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_81b8_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (2); { uae_s32 dst = get_long (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); }}}} m68k_incpc (4); return 24 * CYCLE_UNIT / 2; } /* OR.L Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_81b9_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_ilong (2); { uae_s32 dst = get_long (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); }}}} m68k_incpc (6); return 28 * CYCLE_UNIT / 2; } /* DIVS.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_81c0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); SET_ZFLG (1); m68k_incpc (2); Exception (5); goto endlabel1291; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (2); } }}}endlabel1291: ; return 142 * CYCLE_UNIT / 2; } /* DIVS.W (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_81d0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); SET_ZFLG (1); m68k_incpc (2); Exception (5); goto endlabel1292; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (2); } }}}}endlabel1292: ; return 146 * CYCLE_UNIT / 2; } /* DIVS.W (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_81d8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); SET_ZFLG (1); m68k_incpc (2); Exception (5); goto endlabel1293; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (2); } }}}}endlabel1293: ; return 146 * CYCLE_UNIT / 2; } /* DIVS.W -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_81e0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); SET_ZFLG (1); m68k_incpc (2); Exception (5); goto endlabel1294; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (2); } }}}}endlabel1294: ; return 148 * CYCLE_UNIT / 2; } /* DIVS.W (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_81e8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); SET_ZFLG (1); m68k_incpc (4); Exception (5); goto endlabel1295; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (4); } }}}}endlabel1295: ; return 150 * CYCLE_UNIT / 2; } /* DIVS.W (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_81f0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s16 src = get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); SET_ZFLG (1); m68k_incpc (0); Exception (5); goto endlabel1296; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } } }}}}}endlabel1296: ; return 150 * CYCLE_UNIT / 2; } /* DIVS.W (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_81f8_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); SET_ZFLG (1); m68k_incpc (4); Exception (5); goto endlabel1297; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (4); } }}}}endlabel1297: ; return 150 * CYCLE_UNIT / 2; } /* DIVS.W (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_81f9_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong (2); { uae_s16 src = get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); SET_ZFLG (1); m68k_incpc (6); Exception (5); goto endlabel1298; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (6); } }}}}endlabel1298: ; return 154 * CYCLE_UNIT / 2; } /* DIVS.W (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_81fa_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); SET_ZFLG (1); m68k_incpc (4); Exception (5); goto endlabel1299; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (4); } }}}}endlabel1299: ; return 150 * CYCLE_UNIT / 2; } /* DIVS.W (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_81fb_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword ()); { uae_s16 src = get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); SET_ZFLG (1); m68k_incpc (0); Exception (5); goto endlabel1300; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } } }}}}}endlabel1300: ; return 150 * CYCLE_UNIT / 2; } /* DIVS.W #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_81fc_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_iword (2); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); SET_ZFLG (1); m68k_incpc (4); Exception (5); goto endlabel1301; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (4); } }}}endlabel1301: ; return 146 * CYCLE_UNIT / 2; } /* SUB.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9000_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* SUB.B (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9010_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* SUB.B (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9018_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* SUB.B -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9020_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) = srca; { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* SUB.B (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9028_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* SUB.B (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9030_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}}}return 12 * CYCLE_UNIT / 2; } /* SUB.B (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9038_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* SUB.B (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9039_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong (2); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* SUB.B (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_903a_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword (2); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* SUB.B (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_903b_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword ()); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}}}return 12 * CYCLE_UNIT / 2; } /* SUB.B #.B,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_903c_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = get_ibyte (2); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* SUB.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9040_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* SUB.W An,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9048_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* SUB.W (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9050_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* SUB.W (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9058_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* SUB.W -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9060_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* SUB.W (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9068_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* SUB.W (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9070_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}}return 12 * CYCLE_UNIT / 2; } /* SUB.W (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9078_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* SUB.W (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9079_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong (2); { uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* SUB.W (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_907a_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* SUB.W (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_907b_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword ()); { uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}}return 12 * CYCLE_UNIT / 2; } /* SUB.W #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_907c_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_iword (2); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* SUB.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9080_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* SUB.L An,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9088_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* SUB.L (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9090_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* SUB.L (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9098_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) += 4; { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* SUB.L -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_90a0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* SUB.L (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_90a8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* SUB.L (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_90b0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}}}return 16 * CYCLE_UNIT / 2; } /* SUB.L (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_90b8_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* SUB.L (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_90b9_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong (2); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* SUB.L (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_90ba_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword (2); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* SUB.L (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_90bb_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword ()); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}}}return 16 * CYCLE_UNIT / 2; } /* SUB.L #.L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_90bc_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_ilong (2); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } /* SUBA.W Dn,An */ uae_u32 REGPARAM2 CPUFUNC(op_90c0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* SUBA.W An,An */ uae_u32 REGPARAM2 CPUFUNC(op_90c8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* SUBA.W (An),An */ uae_u32 REGPARAM2 CPUFUNC(op_90d0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* SUBA.W (An)+,An */ uae_u32 REGPARAM2 CPUFUNC(op_90d8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* SUBA.W -(An),An */ uae_u32 REGPARAM2 CPUFUNC(op_90e0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* SUBA.W (d16,An),An */ uae_u32 REGPARAM2 CPUFUNC(op_90e8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* SUBA.W (d8,An,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_90f0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s16 src = get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}}}return 12 * CYCLE_UNIT / 2; } /* SUBA.W (xxx).W,An */ uae_u32 REGPARAM2 CPUFUNC(op_90f8_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* SUBA.W (xxx).L,An */ uae_u32 REGPARAM2 CPUFUNC(op_90f9_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong (2); { uae_s16 src = get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* SUBA.W (d16,PC),An */ uae_u32 REGPARAM2 CPUFUNC(op_90fa_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* SUBA.W (d8,PC,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_90fb_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword ()); { uae_s16 src = get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}}}return 12 * CYCLE_UNIT / 2; } /* SUBA.W #.W,An */ uae_u32 REGPARAM2 CPUFUNC(op_90fc_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_iword (2); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* SUBX.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9100_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = dst - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* SUBX.B -(An),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_9108_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) = dsta; { uae_u32 newv = dst - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (2); return 16 * CYCLE_UNIT / 2; } /* SUB.B Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_9110_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* SUB.B Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_9118_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* SUB.B Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_9120_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* SUB.B Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_9128_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s8 dst = get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* SUB.B Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_9130_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); { uae_s8 dst = get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}}}return 16 * CYCLE_UNIT / 2; } /* SUB.B Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_9138_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (2); { uae_s8 dst = get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* SUB.B Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_9139_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_ilong (2); { uae_s8 dst = get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* SUBX.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9140_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = dst - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* SUBX.W -(An),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_9148_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) = dsta; { uae_u32 newv = dst - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); put_word (dsta, newv); }}}}}}} m68k_incpc (2); return 16 * CYCLE_UNIT / 2; } /* SUB.W Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_9150_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* SUB.W Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_9158_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) += 2; {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* SUB.W Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_9160_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* SUB.W Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_9168_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s16 dst = get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* SUB.W Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_9170_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); { uae_s16 dst = get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}}}return 16 * CYCLE_UNIT / 2; } /* SUB.W Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_9178_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (2); { uae_s16 dst = get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* SUB.W Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_9179_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_ilong (2); { uae_s16 dst = get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* SUBX.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9180_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = dst - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); }}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* SUBX.L -(An),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_9188_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) = dsta; { uae_u32 newv = dst - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); put_long (dsta, newv); }}}}}}} m68k_incpc (2); return 28 * CYCLE_UNIT / 2; } /* SUB.L Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_9190_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}} m68k_incpc (2); return 20 * CYCLE_UNIT / 2; } /* SUB.L Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_9198_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) += 4; {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}} m68k_incpc (2); return 20 * CYCLE_UNIT / 2; } /* SUB.L Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_91a0_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}} m68k_incpc (2); return 22 * CYCLE_UNIT / 2; } /* SUB.L Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_91a8_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s32 dst = get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}} m68k_incpc (4); return 24 * CYCLE_UNIT / 2; } /* SUB.L Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_91b0_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); { uae_s32 dst = get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}}}return 24 * CYCLE_UNIT / 2; } /* SUB.L Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_91b8_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (2); { uae_s32 dst = get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}} m68k_incpc (4); return 24 * CYCLE_UNIT / 2; } /* SUB.L Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_91b9_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_ilong (2); { uae_s32 dst = get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}} m68k_incpc (6); return 28 * CYCLE_UNIT / 2; } /* SUBA.L Dn,An */ uae_u32 REGPARAM2 CPUFUNC(op_91c0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* SUBA.L An,An */ uae_u32 REGPARAM2 CPUFUNC(op_91c8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* SUBA.L (An),An */ uae_u32 REGPARAM2 CPUFUNC(op_91d0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* SUBA.L (An)+,An */ uae_u32 REGPARAM2 CPUFUNC(op_91d8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) += 4; { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* SUBA.L -(An),An */ uae_u32 REGPARAM2 CPUFUNC(op_91e0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* SUBA.L (d16,An),An */ uae_u32 REGPARAM2 CPUFUNC(op_91e8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* SUBA.L (d8,An,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_91f0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}}}return 16 * CYCLE_UNIT / 2; } /* SUBA.L (xxx).W,An */ uae_u32 REGPARAM2 CPUFUNC(op_91f8_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* SUBA.L (xxx).L,An */ uae_u32 REGPARAM2 CPUFUNC(op_91f9_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong (2); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* SUBA.L (d16,PC),An */ uae_u32 REGPARAM2 CPUFUNC(op_91fa_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword (2); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* SUBA.L (d8,PC,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_91fb_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword ()); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}}}return 16 * CYCLE_UNIT / 2; } /* SUBA.L #.L,An */ uae_u32 REGPARAM2 CPUFUNC(op_91fc_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_ilong (2); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } /* CMP.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b000_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* CMP.B (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b010_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* CMP.B (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b018_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* CMP.B -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b020_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) = srca; { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* CMP.B (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b028_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* CMP.B (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b030_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}}}return 12 * CYCLE_UNIT / 2; } /* CMP.B (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b038_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* CMP.B (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b039_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong (2); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* CMP.B (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b03a_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword (2); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* CMP.B (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b03b_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword ()); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}}}return 12 * CYCLE_UNIT / 2; } /* CMP.B #.B,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b03c_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = get_ibyte (2); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* CMP.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b040_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* CMP.W An,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b048_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* CMP.W (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b050_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* CMP.W (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b058_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* CMP.W -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b060_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* CMP.W (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b068_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* CMP.W (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b070_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}}}return 12 * CYCLE_UNIT / 2; } /* CMP.W (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b078_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* CMP.W (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b079_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong (2); { uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* CMP.W (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b07a_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* CMP.W (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b07b_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword ()); { uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}}}return 12 * CYCLE_UNIT / 2; } /* CMP.W #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b07c_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_iword (2); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* CMP.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b080_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* CMP.L An,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b088_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } #endif #ifdef PART_7 /* CMP.L (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b090_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* CMP.L (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b098_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) += 4; { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* CMP.L -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b0a0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* CMP.L (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b0a8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* CMP.L (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b0b0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}}return 16 * CYCLE_UNIT / 2; } /* CMP.L (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b0b8_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* CMP.L (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b0b9_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong (2); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* CMP.L (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b0ba_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword (2); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* CMP.L (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b0bb_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword ()); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}}return 16 * CYCLE_UNIT / 2; } /* CMP.L #.L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b0bc_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_ilong (2); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } /* CMPA.W Dn,An */ uae_u32 REGPARAM2 CPUFUNC(op_b0c0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* CMPA.W An,An */ uae_u32 REGPARAM2 CPUFUNC(op_b0c8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* CMPA.W (An),An */ uae_u32 REGPARAM2 CPUFUNC(op_b0d0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* CMPA.W (An)+,An */ uae_u32 REGPARAM2 CPUFUNC(op_b0d8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* CMPA.W -(An),An */ uae_u32 REGPARAM2 CPUFUNC(op_b0e0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* CMPA.W (d16,An),An */ uae_u32 REGPARAM2 CPUFUNC(op_b0e8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* CMPA.W (d8,An,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_b0f0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s16 src = get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}}return 12 * CYCLE_UNIT / 2; } /* CMPA.W (xxx).W,An */ uae_u32 REGPARAM2 CPUFUNC(op_b0f8_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* CMPA.W (xxx).L,An */ uae_u32 REGPARAM2 CPUFUNC(op_b0f9_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong (2); { uae_s16 src = get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* CMPA.W (d16,PC),An */ uae_u32 REGPARAM2 CPUFUNC(op_b0fa_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* CMPA.W (d8,PC,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_b0fb_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword ()); { uae_s16 src = get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}}return 12 * CYCLE_UNIT / 2; } /* CMPA.W #.W,An */ uae_u32 REGPARAM2 CPUFUNC(op_b0fc_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_iword (2); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* EOR.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b100_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* CMPM.B (An)+,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_b108_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* EOR.B Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_b110_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* EOR.B Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_b118_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* EOR.B Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_b120_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) = dsta; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); }}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* EOR.B Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_b128_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s8 dst = get_byte (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* EOR.B Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_b130_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); { uae_s8 dst = get_byte (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); }}}}}return 16 * CYCLE_UNIT / 2; } /* EOR.B Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_b138_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (2); { uae_s8 dst = get_byte (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* EOR.B Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_b139_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_ilong (2); { uae_s8 dst = get_byte (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* EOR.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b140_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* CMPM.W (An)+,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_b148_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) += 2; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) += 2; {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* EOR.W Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_b150_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = get_word (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* EOR.W Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_b158_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) += 2; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* EOR.W Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_b160_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) = dsta; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); }}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* EOR.W Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_b168_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s16 dst = get_word (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* EOR.W Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_b170_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); { uae_s16 dst = get_word (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); }}}}}return 16 * CYCLE_UNIT / 2; } /* EOR.W Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_b178_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (2); { uae_s16 dst = get_word (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* EOR.W Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_b179_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_ilong (2); { uae_s16 dst = get_word (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* EOR.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b180_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* CMPM.L (An)+,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_b188_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) += 4; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) += 4; {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (2); return 20 * CYCLE_UNIT / 2; } /* EOR.L Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_b190_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = get_long (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); }}}} m68k_incpc (2); return 20 * CYCLE_UNIT / 2; } /* EOR.L Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_b198_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) += 4; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); }}}} m68k_incpc (2); return 20 * CYCLE_UNIT / 2; } /* EOR.L Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_b1a0_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) = dsta; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); }}}} m68k_incpc (2); return 22 * CYCLE_UNIT / 2; } /* EOR.L Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_b1a8_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s32 dst = get_long (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); }}}} m68k_incpc (4); return 24 * CYCLE_UNIT / 2; } /* EOR.L Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_b1b0_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); { uae_s32 dst = get_long (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); }}}}}return 24 * CYCLE_UNIT / 2; } /* EOR.L Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_b1b8_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (2); { uae_s32 dst = get_long (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); }}}} m68k_incpc (4); return 24 * CYCLE_UNIT / 2; } /* EOR.L Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_b1b9_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_ilong (2); { uae_s32 dst = get_long (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); }}}} m68k_incpc (6); return 28 * CYCLE_UNIT / 2; } /* CMPA.L Dn,An */ uae_u32 REGPARAM2 CPUFUNC(op_b1c0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* CMPA.L An,An */ uae_u32 REGPARAM2 CPUFUNC(op_b1c8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* CMPA.L (An),An */ uae_u32 REGPARAM2 CPUFUNC(op_b1d0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* CMPA.L (An)+,An */ uae_u32 REGPARAM2 CPUFUNC(op_b1d8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) += 4; { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* CMPA.L -(An),An */ uae_u32 REGPARAM2 CPUFUNC(op_b1e0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* CMPA.L (d16,An),An */ uae_u32 REGPARAM2 CPUFUNC(op_b1e8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* CMPA.L (d8,An,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_b1f0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}}return 16 * CYCLE_UNIT / 2; } /* CMPA.L (xxx).W,An */ uae_u32 REGPARAM2 CPUFUNC(op_b1f8_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* CMPA.L (xxx).L,An */ uae_u32 REGPARAM2 CPUFUNC(op_b1f9_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong (2); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* CMPA.L (d16,PC),An */ uae_u32 REGPARAM2 CPUFUNC(op_b1fa_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword (2); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* CMPA.L (d8,PC,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_b1fb_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword ()); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}}return 16 * CYCLE_UNIT / 2; } /* CMPA.L #.L,An */ uae_u32 REGPARAM2 CPUFUNC(op_b1fc_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_ilong (2); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } /* AND.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c000_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* AND.B (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c010_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* AND.B (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c018_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* AND.B -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c020_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) = srca; { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* AND.B (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c028_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* AND.B (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c030_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}}}return 12 * CYCLE_UNIT / 2; } /* AND.B (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c038_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* AND.B (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c039_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong (2); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* AND.B (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c03a_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword (2); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* AND.B (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c03b_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword ()); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}}}return 12 * CYCLE_UNIT / 2; } /* AND.B #.B,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c03c_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = get_ibyte (2); { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* AND.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c040_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* AND.W (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c050_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* AND.W (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c058_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* AND.W -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c060_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* AND.W (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c068_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* AND.W (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c070_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}}return 12 * CYCLE_UNIT / 2; } /* AND.W (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c078_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* AND.W (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c079_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong (2); { uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* AND.W (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c07a_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* AND.W (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c07b_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword ()); { uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}}return 12 * CYCLE_UNIT / 2; } /* AND.W #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c07c_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_iword (2); { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* AND.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c080_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* AND.L (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c090_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* AND.L (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c098_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) += 4; { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* AND.L -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0a0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* AND.L (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0a8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* AND.L (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0b0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}}}return 16 * CYCLE_UNIT / 2; } /* AND.L (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0b8_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* AND.L (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0b9_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong (2); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* AND.L (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0ba_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword (2); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* AND.L (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0bb_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword ()); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}}}return 16 * CYCLE_UNIT / 2; } /* AND.L #.L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0bc_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_ilong (2); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } /* MULU.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0c0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); m68k_incpc (2); }}}}return 58 * CYCLE_UNIT / 2; } /* MULU.W (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0d0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); m68k_incpc (2); }}}}}return 62 * CYCLE_UNIT / 2; } /* MULU.W (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0d8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); m68k_incpc (2); }}}}}return 62 * CYCLE_UNIT / 2; } /* MULU.W -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0e0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); m68k_incpc (2); }}}}}return 64 * CYCLE_UNIT / 2; } /* MULU.W (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0e8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); m68k_incpc (4); }}}}}return 66 * CYCLE_UNIT / 2; } /* MULU.W (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0f0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}return 66 * CYCLE_UNIT / 2; } /* MULU.W (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0f8_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); m68k_incpc (4); }}}}}return 66 * CYCLE_UNIT / 2; } /* MULU.W (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0f9_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong (2); { uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); m68k_incpc (6); }}}}}return 70 * CYCLE_UNIT / 2; } /* MULU.W (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0fa_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); m68k_incpc (4); }}}}}return 66 * CYCLE_UNIT / 2; } /* MULU.W (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0fb_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword ()); { uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}return 66 * CYCLE_UNIT / 2; } /* MULU.W #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0fc_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_iword (2); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); m68k_incpc (4); }}}}return 62 * CYCLE_UNIT / 2; } /* ABCD.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c100_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); { uae_u16 newv_lo = (src & 0xF) + (dst & 0xF) + (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = (src & 0xF0) + (dst & 0xF0); uae_u16 newv, tmp_newv; int cflg; newv = tmp_newv = newv_hi + newv_lo; if (newv_lo > 9) { newv += 6; } cflg = (newv & 0x3F0) > 0x90; if (cflg) newv += 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ABCD.B -(An),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_c108_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) = dsta; { uae_u16 newv_lo = (src & 0xF) + (dst & 0xF) + (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = (src & 0xF0) + (dst & 0xF0); uae_u16 newv, tmp_newv; int cflg; newv = tmp_newv = newv_hi + newv_lo; if (newv_lo > 9) { newv += 6; } cflg = (newv & 0x3F0) > 0x90; if (cflg) newv += 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); put_byte (dsta, newv); }}}}}} m68k_incpc (2); return 16 * CYCLE_UNIT / 2; } /* AND.B Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_c110_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* AND.B Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_c118_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* AND.B Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_c120_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) = dsta; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); }}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* AND.B Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_c128_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s8 dst = get_byte (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* AND.B Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_c130_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); { uae_s8 dst = get_byte (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); }}}}}return 16 * CYCLE_UNIT / 2; } /* AND.B Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_c138_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (2); { uae_s8 dst = get_byte (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* AND.B Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_c139_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_ilong (2); { uae_s8 dst = get_byte (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* EXG.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c140_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); m68k_dreg (regs, srcreg) = (dst); m68k_dreg (regs, dstreg) = (src); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* EXG.L An,An */ uae_u32 REGPARAM2 CPUFUNC(op_c148_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); m68k_areg (regs, srcreg) = (dst); m68k_areg (regs, dstreg) = (src); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* AND.W Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_c150_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = get_word (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* AND.W Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_c158_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) += 2; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* AND.W Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_c160_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) = dsta; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); }}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* AND.W Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_c168_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s16 dst = get_word (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* AND.W Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_c170_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); { uae_s16 dst = get_word (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); }}}}}return 16 * CYCLE_UNIT / 2; } /* AND.W Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_c178_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (2); { uae_s16 dst = get_word (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* AND.W Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_c179_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_ilong (2); { uae_s16 dst = get_word (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* EXG.L Dn,An */ uae_u32 REGPARAM2 CPUFUNC(op_c188_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); m68k_dreg (regs, srcreg) = (dst); m68k_areg (regs, dstreg) = (src); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* AND.L Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_c190_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = get_long (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); }}}} m68k_incpc (2); return 20 * CYCLE_UNIT / 2; } /* AND.L Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_c198_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) += 4; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); }}}} m68k_incpc (2); return 20 * CYCLE_UNIT / 2; } /* AND.L Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_c1a0_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) = dsta; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); }}}} m68k_incpc (2); return 22 * CYCLE_UNIT / 2; } /* AND.L Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_c1a8_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s32 dst = get_long (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); }}}} m68k_incpc (4); return 24 * CYCLE_UNIT / 2; } /* AND.L Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_c1b0_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); { uae_s32 dst = get_long (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); }}}}}return 24 * CYCLE_UNIT / 2; } /* AND.L Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_c1b8_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (2); { uae_s32 dst = get_long (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); }}}} m68k_incpc (4); return 24 * CYCLE_UNIT / 2; } /* AND.L Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_c1b9_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_ilong (2); { uae_s32 dst = get_long (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); }}}} m68k_incpc (6); return 28 * CYCLE_UNIT / 2; } /* MULS.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c1c0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); }}}} m68k_incpc (2); return 58 * CYCLE_UNIT / 2; } /* MULS.W (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c1d0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); }}}}} m68k_incpc (2); return 62 * CYCLE_UNIT / 2; } /* MULS.W (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c1d8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); }}}}} m68k_incpc (2); return 62 * CYCLE_UNIT / 2; } /* MULS.W -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c1e0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); }}}}} m68k_incpc (2); return 64 * CYCLE_UNIT / 2; } /* MULS.W (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c1e8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); }}}}} m68k_incpc (4); return 66 * CYCLE_UNIT / 2; } /* MULS.W (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c1f0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}return 66 * CYCLE_UNIT / 2; } /* MULS.W (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c1f8_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); }}}}} m68k_incpc (4); return 66 * CYCLE_UNIT / 2; } /* MULS.W (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c1f9_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong (2); { uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); }}}}} m68k_incpc (6); return 70 * CYCLE_UNIT / 2; } /* MULS.W (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c1fa_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); }}}}} m68k_incpc (4); return 66 * CYCLE_UNIT / 2; } /* MULS.W (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c1fb_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword ()); { uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}return 66 * CYCLE_UNIT / 2; } /* MULS.W #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c1fc_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_iword (2); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); }}}} m68k_incpc (4); return 62 * CYCLE_UNIT / 2; } /* ADD.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d000_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ADD.B (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d010_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* ADD.B (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d018_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* ADD.B -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d020_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) = srca; { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* ADD.B (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d028_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* ADD.B (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d030_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}}}return 12 * CYCLE_UNIT / 2; } /* ADD.B (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d038_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* ADD.B (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d039_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong (2); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* ADD.B (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d03a_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword (2); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* ADD.B (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d03b_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword ()); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}}}return 12 * CYCLE_UNIT / 2; } /* ADD.B #.B,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d03c_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = get_ibyte (2); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* ADD.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d040_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ADD.W An,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d048_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ADD.W (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d050_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* ADD.W (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d058_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* ADD.W -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d060_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* ADD.W (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d068_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* ADD.W (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d070_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}}return 12 * CYCLE_UNIT / 2; } /* ADD.W (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d078_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* ADD.W (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d079_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong (2); { uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* ADD.W (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d07a_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* ADD.W (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d07b_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword ()); { uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}}return 12 * CYCLE_UNIT / 2; } /* ADD.W #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d07c_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_iword (2); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* ADD.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d080_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ADD.L An,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d088_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ADD.L (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d090_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* ADD.L (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d098_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) += 4; { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* ADD.L -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d0a0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* ADD.L (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d0a8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* ADD.L (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d0b0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}}}return 16 * CYCLE_UNIT / 2; } /* ADD.L (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d0b8_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* ADD.L (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d0b9_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong (2); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* ADD.L (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d0ba_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword (2); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* ADD.L (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d0bb_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword ()); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}}}return 16 * CYCLE_UNIT / 2; } /* ADD.L #.L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d0bc_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_ilong (2); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } /* ADDA.W Dn,An */ uae_u32 REGPARAM2 CPUFUNC(op_d0c0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ADDA.W An,An */ uae_u32 REGPARAM2 CPUFUNC(op_d0c8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ADDA.W (An),An */ uae_u32 REGPARAM2 CPUFUNC(op_d0d0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* ADDA.W (An)+,An */ uae_u32 REGPARAM2 CPUFUNC(op_d0d8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* ADDA.W -(An),An */ uae_u32 REGPARAM2 CPUFUNC(op_d0e0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* ADDA.W (d16,An),An */ uae_u32 REGPARAM2 CPUFUNC(op_d0e8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* ADDA.W (d8,An,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_d0f0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s16 src = get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}}}return 12 * CYCLE_UNIT / 2; } /* ADDA.W (xxx).W,An */ uae_u32 REGPARAM2 CPUFUNC(op_d0f8_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* ADDA.W (xxx).L,An */ uae_u32 REGPARAM2 CPUFUNC(op_d0f9_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong (2); { uae_s16 src = get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* ADDA.W (d16,PC),An */ uae_u32 REGPARAM2 CPUFUNC(op_d0fa_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* ADDA.W (d8,PC,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_d0fb_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword ()); { uae_s16 src = get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}}}return 12 * CYCLE_UNIT / 2; } /* ADDA.W #.W,An */ uae_u32 REGPARAM2 CPUFUNC(op_d0fc_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_iword (2); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* ADDX.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d100_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = dst + src + (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgo) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ADDX.B -(An),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_d108_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) = dsta; { uae_u32 newv = dst + src + (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgo) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (2); return 16 * CYCLE_UNIT / 2; } /* ADD.B Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_d110_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* ADD.B Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_d118_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* ADD.B Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_d120_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* ADD.B Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_d128_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s8 dst = get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* ADD.B Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_d130_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); { uae_s8 dst = get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}}}return 16 * CYCLE_UNIT / 2; } /* ADD.B Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_d138_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (2); { uae_s8 dst = get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* ADD.B Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_d139_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_ilong (2); { uae_s8 dst = get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* ADDX.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d140_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = dst + src + (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgo) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ADDX.W -(An),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_d148_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) = dsta; { uae_u32 newv = dst + src + (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgo) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); put_word (dsta, newv); }}}}}}} m68k_incpc (2); return 16 * CYCLE_UNIT / 2; } /* ADD.W Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_d150_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* ADD.W Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_d158_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) += 2; {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* ADD.W Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_d160_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* ADD.W Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_d168_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s16 dst = get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* ADD.W Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_d170_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); { uae_s16 dst = get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}}}return 16 * CYCLE_UNIT / 2; } /* ADD.W Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_d178_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (2); { uae_s16 dst = get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* ADD.W Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_d179_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_ilong (2); { uae_s16 dst = get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* ADDX.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d180_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = dst + src + (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgo) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); }}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ADDX.L -(An),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_d188_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) = dsta; { uae_u32 newv = dst + src + (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgo) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); put_long (dsta, newv); }}}}}}} m68k_incpc (2); return 28 * CYCLE_UNIT / 2; } /* ADD.L Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_d190_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}} m68k_incpc (2); return 20 * CYCLE_UNIT / 2; } /* ADD.L Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_d198_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) += 4; {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}} m68k_incpc (2); return 20 * CYCLE_UNIT / 2; } /* ADD.L Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_d1a0_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}} m68k_incpc (2); return 22 * CYCLE_UNIT / 2; } /* ADD.L Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_d1a8_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s32 dst = get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}} m68k_incpc (4); return 24 * CYCLE_UNIT / 2; } /* ADD.L Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_d1b0_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); { uae_s32 dst = get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}}}return 24 * CYCLE_UNIT / 2; } /* ADD.L Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_d1b8_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (2); { uae_s32 dst = get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}} m68k_incpc (4); return 24 * CYCLE_UNIT / 2; } /* ADD.L Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_d1b9_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_ilong (2); { uae_s32 dst = get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}} m68k_incpc (6); return 28 * CYCLE_UNIT / 2; } /* ADDA.L Dn,An */ uae_u32 REGPARAM2 CPUFUNC(op_d1c0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ADDA.L An,An */ uae_u32 REGPARAM2 CPUFUNC(op_d1c8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ADDA.L (An),An */ uae_u32 REGPARAM2 CPUFUNC(op_d1d0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* ADDA.L (An)+,An */ uae_u32 REGPARAM2 CPUFUNC(op_d1d8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) += 4; { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* ADDA.L -(An),An */ uae_u32 REGPARAM2 CPUFUNC(op_d1e0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* ADDA.L (d16,An),An */ uae_u32 REGPARAM2 CPUFUNC(op_d1e8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* ADDA.L (d8,An,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_d1f0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}}}return 16 * CYCLE_UNIT / 2; } /* ADDA.L (xxx).W,An */ uae_u32 REGPARAM2 CPUFUNC(op_d1f8_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* ADDA.L (xxx).L,An */ uae_u32 REGPARAM2 CPUFUNC(op_d1f9_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong (2); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* ADDA.L (d16,PC),An */ uae_u32 REGPARAM2 CPUFUNC(op_d1fa_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword (2); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* ADDA.L (d8,PC,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_d1fb_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword ()); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}}}return 16 * CYCLE_UNIT / 2; } /* ADDA.L #.L,An */ uae_u32 REGPARAM2 CPUFUNC(op_d1fc_0)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_ilong (2); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } /* ASRQ.B #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e000_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; uae_u32 sign = (0x80 & val) >> 7; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 8) { val = 0xff & (uae_u32)-sign; SET_CFLG (sign); COPY_CARRY (); } else { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; val |= (0xff << (8 - cnt)) & (uae_u32)-sign; val &= 0xff; } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* LSRQ.B #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e008_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 8) { SET_CFLG ((cnt == 8) & (val >> 7)); COPY_CARRY (); val = 0; } else { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ROXRQ.B #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e010_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { cnt--; { uae_u32 carry; uae_u32 hival = (val << 1) | GET_XFLG (); hival <<= (7 - cnt); val >>= cnt; carry = val & 1; val >>= 1; val |= hival; SET_XFLG (carry); val &= 0xff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* RORQ.B #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e018_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { uae_u32 hival; cnt &= 7; hival = val << (8 - cnt); val >>= cnt; val |= hival; val &= 0xff; SET_CFLG ((val & 0x80) >> 7); } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ASR.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e020_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 cnt = m68k_dreg (regs, srcreg); { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; uae_u32 sign = (0x80 & val) >> 7; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 8) { val = 0xff & (uae_u32)-sign; SET_CFLG (sign); COPY_CARRY (); } else if (cnt > 0) { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; val |= (0xff << (8 - cnt)) & (uae_u32)-sign; val &= 0xff; } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* LSR.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e028_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 cnt = m68k_dreg (regs, srcreg); { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 8) { SET_CFLG ((cnt == 8) & (val >> 7)); COPY_CARRY (); val = 0; } else if (cnt > 0) { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ROXR.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e030_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 cnt = m68k_dreg (regs, srcreg); { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 36) cnt -= 36; if (cnt >= 18) cnt -= 18; if (cnt >= 9) cnt -= 9; if (cnt > 0) { cnt--; { uae_u32 carry; uae_u32 hival = (val << 1) | GET_XFLG (); hival <<= (7 - cnt); val >>= cnt; carry = val & 1; val >>= 1; val |= hival; SET_XFLG (carry); val &= 0xff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } #endif #ifdef PART_8 /* ROR.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e038_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 cnt = m68k_dreg (regs, srcreg); { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt > 0) { uae_u32 hival; cnt &= 7; hival = val << (8 - cnt); val >>= cnt; val |= hival; val &= 0xff; SET_CFLG ((val & 0x80) >> 7); } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ASRQ.W #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e040_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; uae_u32 sign = (0x8000 & val) >> 15; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 16) { val = 0xffff & (uae_u32)-sign; SET_CFLG (sign); COPY_CARRY (); } else { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; val |= (0xffff << (16 - cnt)) & (uae_u32)-sign; val &= 0xffff; } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* LSRQ.W #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e048_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 16) { SET_CFLG ((cnt == 16) & (val >> 15)); COPY_CARRY (); val = 0; } else { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ROXRQ.W #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e050_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { cnt--; { uae_u32 carry; uae_u32 hival = (val << 1) | GET_XFLG (); hival <<= (15 - cnt); val >>= cnt; carry = val & 1; val >>= 1; val |= hival; SET_XFLG (carry); val &= 0xffff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* RORQ.W #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e058_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { uae_u32 hival; cnt &= 15; hival = val << (16 - cnt); val >>= cnt; val |= hival; val &= 0xffff; SET_CFLG ((val & 0x8000) >> 15); } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ASR.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e060_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 cnt = m68k_dreg (regs, srcreg); { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; uae_u32 sign = (0x8000 & val) >> 15; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 16) { val = 0xffff & (uae_u32)-sign; SET_CFLG (sign); COPY_CARRY (); } else if (cnt > 0) { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; val |= (0xffff << (16 - cnt)) & (uae_u32)-sign; val &= 0xffff; } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* LSR.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e068_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 cnt = m68k_dreg (regs, srcreg); { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 16) { SET_CFLG ((cnt == 16) & (val >> 15)); COPY_CARRY (); val = 0; } else if (cnt > 0) { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ROXR.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e070_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 cnt = m68k_dreg (regs, srcreg); { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 34) cnt -= 34; if (cnt >= 17) cnt -= 17; if (cnt > 0) { cnt--; { uae_u32 carry; uae_u32 hival = (val << 1) | GET_XFLG (); hival <<= (15 - cnt); val >>= cnt; carry = val & 1; val >>= 1; val |= hival; SET_XFLG (carry); val &= 0xffff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ROR.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e078_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 cnt = m68k_dreg (regs, srcreg); { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt > 0) { uae_u32 hival; cnt &= 15; hival = val << (16 - cnt); val >>= cnt; val |= hival; val &= 0xffff; SET_CFLG ((val & 0x8000) >> 15); } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ASRQ.L #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e080_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; uae_u32 sign = (0x80000000 & val) >> 31; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 32) { val = 0xffffffff & (uae_u32)-sign; SET_CFLG (sign); COPY_CARRY (); } else { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; val |= (0xffffffff << (32 - cnt)) & (uae_u32)-sign; val &= 0xffffffff; } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* LSRQ.L #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e088_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 32) { SET_CFLG ((cnt == 32) & (val >> 31)); COPY_CARRY (); val = 0; } else { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ROXRQ.L #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e090_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { cnt--; { uae_u32 carry; uae_u32 hival = (val << 1) | GET_XFLG (); hival <<= (31 - cnt); val >>= cnt; carry = val & 1; val >>= 1; val |= hival; SET_XFLG (carry); val &= 0xffffffff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* RORQ.L #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e098_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { uae_u32 hival; cnt &= 31; hival = val << (32 - cnt); val >>= cnt; val |= hival; val &= 0xffffffff; SET_CFLG ((val & 0x80000000) >> 31); } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ASR.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e0a0_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 cnt = m68k_dreg (regs, srcreg); { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; uae_u32 sign = (0x80000000 & val) >> 31; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 32) { val = 0xffffffff & (uae_u32)-sign; SET_CFLG (sign); COPY_CARRY (); } else if (cnt > 0) { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; val |= (0xffffffff << (32 - cnt)) & (uae_u32)-sign; val &= 0xffffffff; } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* LSR.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e0a8_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 cnt = m68k_dreg (regs, srcreg); { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 32) { SET_CFLG ((cnt == 32) & (val >> 31)); COPY_CARRY (); val = 0; } else if (cnt > 0) { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ROXR.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e0b0_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 cnt = m68k_dreg (regs, srcreg); { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 33) cnt -= 33; if (cnt > 0) { cnt--; { uae_u32 carry; uae_u32 hival = (val << 1) | GET_XFLG (); hival <<= (31 - cnt); val >>= cnt; carry = val & 1; val >>= 1; val |= hival; SET_XFLG (carry); val &= 0xffffffff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ROR.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e0b8_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 cnt = m68k_dreg (regs, srcreg); { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt > 0) { uae_u32 hival; cnt &= 31; hival = val << (32 - cnt); val >>= cnt; val |= hival; val &= 0xffffffff; SET_CFLG ((val & 0x80000000) >> 31); } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ASRW.W (An) */ uae_u32 REGPARAM2 CPUFUNC(op_e0d0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = get_word (dataa); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 cflg = val & 1; val = (val >> 1) | sign; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (cflg); COPY_CARRY (); put_word (dataa, val); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* ASRW.W (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_e0d8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = get_word (dataa); m68k_areg (regs, srcreg) += 2; { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 cflg = val & 1; val = (val >> 1) | sign; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (cflg); COPY_CARRY (); put_word (dataa, val); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* ASRW.W -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_e0e0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; dataa = m68k_areg (regs, srcreg) - 2; { uae_s16 data = get_word (dataa); m68k_areg (regs, srcreg) = dataa; { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 cflg = val & 1; val = (val >> 1) | sign; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (cflg); COPY_CARRY (); put_word (dataa, val); }}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* ASRW.W (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_e0e8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s16 data = get_word (dataa); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 cflg = val & 1; val = (val >> 1) | sign; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (cflg); COPY_CARRY (); put_word (dataa, val); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* ASRW.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_e0f0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; m68k_incpc (2); { dataa = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s16 data = get_word (dataa); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 cflg = val & 1; val = (val >> 1) | sign; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (cflg); COPY_CARRY (); put_word (dataa, val); }}}}}return 16 * CYCLE_UNIT / 2; } /* ASRW.W (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_e0f8_0)(uae_u32 opcode) { {{ uaecptr dataa = (uae_s32)(uae_s16)get_iword (2); { uae_s16 data = get_word (dataa); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 cflg = val & 1; val = (val >> 1) | sign; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (cflg); COPY_CARRY (); put_word (dataa, val); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* ASRW.W (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_e0f9_0)(uae_u32 opcode) { {{ uaecptr dataa = get_ilong (2); { uae_s16 data = get_word (dataa); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 cflg = val & 1; val = (val >> 1) | sign; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (cflg); COPY_CARRY (); put_word (dataa, val); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* ASLQ.B #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e100_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 8) { SET_VFLG (val != 0); SET_CFLG (cnt == 8 ? val & 1 : 0); COPY_CARRY (); val = 0; } else { uae_u32 mask = (0xff << (7 - cnt)) & 0xff; SET_VFLG ((val & mask) != mask && (val & mask) != 0); val <<= cnt - 1; SET_CFLG ((val & 0x80) >> 7); COPY_CARRY (); val <<= 1; val &= 0xff; } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* LSLQ.B #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e108_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 8) { SET_CFLG (cnt == 8 ? val & 1 : 0); COPY_CARRY (); val = 0; } else { val <<= (cnt - 1); SET_CFLG ((val & 0x80) >> 7); COPY_CARRY (); val <<= 1; val &= 0xff; } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ROXLQ.B #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e110_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { cnt--; { uae_u32 carry; uae_u32 loval = val >> (7 - cnt); carry = loval & 1; val = (((val << 1) | GET_XFLG ()) << cnt) | (loval >> 1); SET_XFLG (carry); val &= 0xff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ROLQ.B #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e118_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { uae_u32 loval; cnt &= 7; loval = val >> (8 - cnt); val <<= cnt; val |= loval; val &= 0xff; SET_CFLG (val & 1); } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ASL.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e120_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 cnt = m68k_dreg (regs, srcreg); { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 8) { SET_VFLG (val != 0); SET_CFLG (cnt == 8 ? val & 1 : 0); COPY_CARRY (); val = 0; } else if (cnt > 0) { uae_u32 mask = (0xff << (7 - cnt)) & 0xff; SET_VFLG ((val & mask) != mask && (val & mask) != 0); val <<= cnt - 1; SET_CFLG ((val & 0x80) >> 7); COPY_CARRY (); val <<= 1; val &= 0xff; } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* LSL.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e128_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 cnt = m68k_dreg (regs, srcreg); { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 8) { SET_CFLG (cnt == 8 ? val & 1 : 0); COPY_CARRY (); val = 0; } else if (cnt > 0) { val <<= (cnt - 1); SET_CFLG ((val & 0x80) >> 7); COPY_CARRY (); val <<= 1; val &= 0xff; } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ROXL.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e130_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 cnt = m68k_dreg (regs, srcreg); { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 36) cnt -= 36; if (cnt >= 18) cnt -= 18; if (cnt >= 9) cnt -= 9; if (cnt > 0) { cnt--; { uae_u32 carry; uae_u32 loval = val >> (7 - cnt); carry = loval & 1; val = (((val << 1) | GET_XFLG ()) << cnt) | (loval >> 1); SET_XFLG (carry); val &= 0xff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ROL.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e138_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 cnt = m68k_dreg (regs, srcreg); { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt > 0) { uae_u32 loval; cnt &= 7; loval = val >> (8 - cnt); val <<= cnt; val |= loval; val &= 0xff; SET_CFLG (val & 1); } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ASLQ.W #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e140_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 16) { SET_VFLG (val != 0); SET_CFLG (cnt == 16 ? val & 1 : 0); COPY_CARRY (); val = 0; } else { uae_u32 mask = (0xffff << (15 - cnt)) & 0xffff; SET_VFLG ((val & mask) != mask && (val & mask) != 0); val <<= cnt - 1; SET_CFLG ((val & 0x8000) >> 15); COPY_CARRY (); val <<= 1; val &= 0xffff; } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* LSLQ.W #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e148_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 16) { SET_CFLG (cnt == 16 ? val & 1 : 0); COPY_CARRY (); val = 0; } else { val <<= (cnt - 1); SET_CFLG ((val & 0x8000) >> 15); COPY_CARRY (); val <<= 1; val &= 0xffff; } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ROXLQ.W #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e150_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { cnt--; { uae_u32 carry; uae_u32 loval = val >> (15 - cnt); carry = loval & 1; val = (((val << 1) | GET_XFLG ()) << cnt) | (loval >> 1); SET_XFLG (carry); val &= 0xffff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ROLQ.W #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e158_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { uae_u32 loval; cnt &= 15; loval = val >> (16 - cnt); val <<= cnt; val |= loval; val &= 0xffff; SET_CFLG (val & 1); } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ASL.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e160_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 cnt = m68k_dreg (regs, srcreg); { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 16) { SET_VFLG (val != 0); SET_CFLG (cnt == 16 ? val & 1 : 0); COPY_CARRY (); val = 0; } else if (cnt > 0) { uae_u32 mask = (0xffff << (15 - cnt)) & 0xffff; SET_VFLG ((val & mask) != mask && (val & mask) != 0); val <<= cnt - 1; SET_CFLG ((val & 0x8000) >> 15); COPY_CARRY (); val <<= 1; val &= 0xffff; } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* LSL.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e168_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 cnt = m68k_dreg (regs, srcreg); { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 16) { SET_CFLG (cnt == 16 ? val & 1 : 0); COPY_CARRY (); val = 0; } else if (cnt > 0) { val <<= (cnt - 1); SET_CFLG ((val & 0x8000) >> 15); COPY_CARRY (); val <<= 1; val &= 0xffff; } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ROXL.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e170_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 cnt = m68k_dreg (regs, srcreg); { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 34) cnt -= 34; if (cnt >= 17) cnt -= 17; if (cnt > 0) { cnt--; { uae_u32 carry; uae_u32 loval = val >> (15 - cnt); carry = loval & 1; val = (((val << 1) | GET_XFLG ()) << cnt) | (loval >> 1); SET_XFLG (carry); val &= 0xffff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ROL.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e178_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 cnt = m68k_dreg (regs, srcreg); { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt > 0) { uae_u32 loval; cnt &= 15; loval = val >> (16 - cnt); val <<= cnt; val |= loval; val &= 0xffff; SET_CFLG (val & 1); } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ASLQ.L #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e180_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 32) { SET_VFLG (val != 0); SET_CFLG (cnt == 32 ? val & 1 : 0); COPY_CARRY (); val = 0; } else { uae_u32 mask = (0xffffffff << (31 - cnt)) & 0xffffffff; SET_VFLG ((val & mask) != mask && (val & mask) != 0); val <<= cnt - 1; SET_CFLG ((val & 0x80000000) >> 31); COPY_CARRY (); val <<= 1; val &= 0xffffffff; } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* LSLQ.L #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e188_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 32) { SET_CFLG (cnt == 32 ? val & 1 : 0); COPY_CARRY (); val = 0; } else { val <<= (cnt - 1); SET_CFLG ((val & 0x80000000) >> 31); COPY_CARRY (); val <<= 1; val &= 0xffffffff; } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ROXLQ.L #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e190_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { cnt--; { uae_u32 carry; uae_u32 loval = val >> (31 - cnt); carry = loval & 1; val = (((val << 1) | GET_XFLG ()) << cnt) | (loval >> 1); SET_XFLG (carry); val &= 0xffffffff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ROLQ.L #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e198_0)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { uae_u32 loval; cnt &= 31; loval = val >> (32 - cnt); val <<= cnt; val |= loval; val &= 0xffffffff; SET_CFLG (val & 1); } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ASL.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e1a0_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 cnt = m68k_dreg (regs, srcreg); { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 32) { SET_VFLG (val != 0); SET_CFLG (cnt == 32 ? val & 1 : 0); COPY_CARRY (); val = 0; } else if (cnt > 0) { uae_u32 mask = (0xffffffff << (31 - cnt)) & 0xffffffff; SET_VFLG ((val & mask) != mask && (val & mask) != 0); val <<= cnt - 1; SET_CFLG ((val & 0x80000000) >> 31); COPY_CARRY (); val <<= 1; val &= 0xffffffff; } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* LSL.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e1a8_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 cnt = m68k_dreg (regs, srcreg); { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 32) { SET_CFLG (cnt == 32 ? val & 1 : 0); COPY_CARRY (); val = 0; } else if (cnt > 0) { val <<= (cnt - 1); SET_CFLG ((val & 0x80000000) >> 31); COPY_CARRY (); val <<= 1; val &= 0xffffffff; } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ROXL.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e1b0_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 cnt = m68k_dreg (regs, srcreg); { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 33) cnt -= 33; if (cnt > 0) { cnt--; { uae_u32 carry; uae_u32 loval = val >> (31 - cnt); carry = loval & 1; val = (((val << 1) | GET_XFLG ()) << cnt) | (loval >> 1); SET_XFLG (carry); val &= 0xffffffff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ROL.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e1b8_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 cnt = m68k_dreg (regs, srcreg); { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt > 0) { uae_u32 loval; cnt &= 31; loval = val >> (32 - cnt); val <<= cnt; val |= loval; val &= 0xffffffff; SET_CFLG (val & 1); } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ASLW.W (An) */ uae_u32 REGPARAM2 CPUFUNC(op_e1d0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = get_word (dataa); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 sign2; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); sign2 = 0x8000 & val; SET_CFLG (sign != 0); COPY_CARRY (); SET_VFLG (GET_VFLG () | (sign2 != sign)); put_word (dataa, val); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* ASLW.W (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_e1d8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = get_word (dataa); m68k_areg (regs, srcreg) += 2; { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 sign2; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); sign2 = 0x8000 & val; SET_CFLG (sign != 0); COPY_CARRY (); SET_VFLG (GET_VFLG () | (sign2 != sign)); put_word (dataa, val); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* ASLW.W -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_e1e0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; dataa = m68k_areg (regs, srcreg) - 2; { uae_s16 data = get_word (dataa); m68k_areg (regs, srcreg) = dataa; { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 sign2; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); sign2 = 0x8000 & val; SET_CFLG (sign != 0); COPY_CARRY (); SET_VFLG (GET_VFLG () | (sign2 != sign)); put_word (dataa, val); }}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* ASLW.W (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_e1e8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s16 data = get_word (dataa); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 sign2; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); sign2 = 0x8000 & val; SET_CFLG (sign != 0); COPY_CARRY (); SET_VFLG (GET_VFLG () | (sign2 != sign)); put_word (dataa, val); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* ASLW.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_e1f0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; m68k_incpc (2); { dataa = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s16 data = get_word (dataa); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 sign2; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); sign2 = 0x8000 & val; SET_CFLG (sign != 0); COPY_CARRY (); SET_VFLG (GET_VFLG () | (sign2 != sign)); put_word (dataa, val); }}}}}return 16 * CYCLE_UNIT / 2; } /* ASLW.W (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_e1f8_0)(uae_u32 opcode) { {{ uaecptr dataa = (uae_s32)(uae_s16)get_iword (2); { uae_s16 data = get_word (dataa); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 sign2; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); sign2 = 0x8000 & val; SET_CFLG (sign != 0); COPY_CARRY (); SET_VFLG (GET_VFLG () | (sign2 != sign)); put_word (dataa, val); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* ASLW.W (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_e1f9_0)(uae_u32 opcode) { {{ uaecptr dataa = get_ilong (2); { uae_s16 data = get_word (dataa); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 sign2; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); sign2 = 0x8000 & val; SET_CFLG (sign != 0); COPY_CARRY (); SET_VFLG (GET_VFLG () | (sign2 != sign)); put_word (dataa, val); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* LSRW.W (An) */ uae_u32 REGPARAM2 CPUFUNC(op_e2d0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = get_word (dataa); { uae_u32 val = (uae_u16)data; uae_u32 carry = val & 1; val >>= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); put_word (dataa, val); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* LSRW.W (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_e2d8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = get_word (dataa); m68k_areg (regs, srcreg) += 2; { uae_u32 val = (uae_u16)data; uae_u32 carry = val & 1; val >>= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); put_word (dataa, val); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* LSRW.W -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_e2e0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; dataa = m68k_areg (regs, srcreg) - 2; { uae_s16 data = get_word (dataa); m68k_areg (regs, srcreg) = dataa; { uae_u32 val = (uae_u16)data; uae_u32 carry = val & 1; val >>= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); put_word (dataa, val); }}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* LSRW.W (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_e2e8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s16 data = get_word (dataa); { uae_u32 val = (uae_u16)data; uae_u32 carry = val & 1; val >>= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); put_word (dataa, val); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* LSRW.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_e2f0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; m68k_incpc (2); { dataa = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s16 data = get_word (dataa); { uae_u32 val = (uae_u16)data; uae_u32 carry = val & 1; val >>= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); put_word (dataa, val); }}}}}return 16 * CYCLE_UNIT / 2; } /* LSRW.W (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_e2f8_0)(uae_u32 opcode) { {{ uaecptr dataa = (uae_s32)(uae_s16)get_iword (2); { uae_s16 data = get_word (dataa); { uae_u32 val = (uae_u16)data; uae_u32 carry = val & 1; val >>= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); put_word (dataa, val); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* LSRW.W (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_e2f9_0)(uae_u32 opcode) { {{ uaecptr dataa = get_ilong (2); { uae_s16 data = get_word (dataa); { uae_u32 val = (uae_u16)data; uae_u32 carry = val & 1; val >>= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); put_word (dataa, val); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* LSLW.W (An) */ uae_u32 REGPARAM2 CPUFUNC(op_e3d0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); put_word (dataa, val); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* LSLW.W (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_e3d8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = get_word (dataa); m68k_areg (regs, srcreg) += 2; { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); put_word (dataa, val); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* LSLW.W -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_e3e0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; dataa = m68k_areg (regs, srcreg) - 2; { uae_s16 data = get_word (dataa); m68k_areg (regs, srcreg) = dataa; { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); put_word (dataa, val); }}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* LSLW.W (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_e3e8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s16 data = get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); put_word (dataa, val); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* LSLW.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_e3f0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; m68k_incpc (2); { dataa = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s16 data = get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); put_word (dataa, val); }}}}}return 16 * CYCLE_UNIT / 2; } /* LSLW.W (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_e3f8_0)(uae_u32 opcode) { {{ uaecptr dataa = (uae_s32)(uae_s16)get_iword (2); { uae_s16 data = get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); put_word (dataa, val); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* LSLW.W (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_e3f9_0)(uae_u32 opcode) { {{ uaecptr dataa = get_ilong (2); { uae_s16 data = get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); put_word (dataa, val); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* ROXRW.W (An) */ uae_u32 REGPARAM2 CPUFUNC(op_e4d0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (GET_XFLG ()) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); put_word (dataa, val); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* ROXRW.W (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_e4d8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = get_word (dataa); m68k_areg (regs, srcreg) += 2; { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (GET_XFLG ()) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); put_word (dataa, val); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* ROXRW.W -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_e4e0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; dataa = m68k_areg (regs, srcreg) - 2; { uae_s16 data = get_word (dataa); m68k_areg (regs, srcreg) = dataa; { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (GET_XFLG ()) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); put_word (dataa, val); }}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* ROXRW.W (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_e4e8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s16 data = get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (GET_XFLG ()) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); put_word (dataa, val); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* ROXRW.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_e4f0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; m68k_incpc (2); { dataa = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s16 data = get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (GET_XFLG ()) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); put_word (dataa, val); }}}}}return 16 * CYCLE_UNIT / 2; } /* ROXRW.W (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_e4f8_0)(uae_u32 opcode) { {{ uaecptr dataa = (uae_s32)(uae_s16)get_iword (2); { uae_s16 data = get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (GET_XFLG ()) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); put_word (dataa, val); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* ROXRW.W (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_e4f9_0)(uae_u32 opcode) { {{ uaecptr dataa = get_ilong (2); { uae_s16 data = get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (GET_XFLG ()) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); put_word (dataa, val); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* ROXLW.W (An) */ uae_u32 REGPARAM2 CPUFUNC(op_e5d0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (GET_XFLG ()) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); put_word (dataa, val); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* ROXLW.W (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_e5d8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = get_word (dataa); m68k_areg (regs, srcreg) += 2; { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (GET_XFLG ()) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); put_word (dataa, val); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* ROXLW.W -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_e5e0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; dataa = m68k_areg (regs, srcreg) - 2; { uae_s16 data = get_word (dataa); m68k_areg (regs, srcreg) = dataa; { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (GET_XFLG ()) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); put_word (dataa, val); }}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* ROXLW.W (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_e5e8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s16 data = get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (GET_XFLG ()) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); put_word (dataa, val); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* ROXLW.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_e5f0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; m68k_incpc (2); { dataa = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s16 data = get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (GET_XFLG ()) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); put_word (dataa, val); }}}}}return 16 * CYCLE_UNIT / 2; } /* ROXLW.W (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_e5f8_0)(uae_u32 opcode) { {{ uaecptr dataa = (uae_s32)(uae_s16)get_iword (2); { uae_s16 data = get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (GET_XFLG ()) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); put_word (dataa, val); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* ROXLW.W (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_e5f9_0)(uae_u32 opcode) { {{ uaecptr dataa = get_ilong (2); { uae_s16 data = get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (GET_XFLG ()) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); put_word (dataa, val); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* RORW.W (An) */ uae_u32 REGPARAM2 CPUFUNC(op_e6d0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (carry) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); put_word (dataa, val); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* RORW.W (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_e6d8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = get_word (dataa); m68k_areg (regs, srcreg) += 2; { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (carry) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); put_word (dataa, val); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* RORW.W -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_e6e0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; dataa = m68k_areg (regs, srcreg) - 2; { uae_s16 data = get_word (dataa); m68k_areg (regs, srcreg) = dataa; { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (carry) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); put_word (dataa, val); }}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* RORW.W (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_e6e8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s16 data = get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (carry) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); put_word (dataa, val); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* RORW.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_e6f0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; m68k_incpc (2); { dataa = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s16 data = get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (carry) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); put_word (dataa, val); }}}}}return 16 * CYCLE_UNIT / 2; } /* RORW.W (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_e6f8_0)(uae_u32 opcode) { {{ uaecptr dataa = (uae_s32)(uae_s16)get_iword (2); { uae_s16 data = get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (carry) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); put_word (dataa, val); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* RORW.W (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_e6f9_0)(uae_u32 opcode) { {{ uaecptr dataa = get_ilong (2); { uae_s16 data = get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (carry) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); put_word (dataa, val); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* ROLW.W (An) */ uae_u32 REGPARAM2 CPUFUNC(op_e7d0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (carry) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); put_word (dataa, val); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* ROLW.W (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_e7d8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = get_word (dataa); m68k_areg (regs, srcreg) += 2; { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (carry) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); put_word (dataa, val); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* ROLW.W -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_e7e0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; dataa = m68k_areg (regs, srcreg) - 2; { uae_s16 data = get_word (dataa); m68k_areg (regs, srcreg) = dataa; { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (carry) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); put_word (dataa, val); }}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* ROLW.W (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_e7e8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s16 data = get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (carry) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); put_word (dataa, val); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* ROLW.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_e7f0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; m68k_incpc (2); { dataa = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s16 data = get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (carry) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); put_word (dataa, val); }}}}}return 16 * CYCLE_UNIT / 2; } /* ROLW.W (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_e7f8_0)(uae_u32 opcode) { {{ uaecptr dataa = (uae_s32)(uae_s16)get_iword (2); { uae_s16 data = get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (carry) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); put_word (dataa, val); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* ROLW.W (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_e7f9_0)(uae_u32 opcode) { {{ uaecptr dataa = get_ilong (2); { uae_s16 data = get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (carry) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); put_word (dataa, val); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* BFTST.L #.W,Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_e8c0_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword (2); {{ uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp = m68k_dreg(regs, dstreg); offset &= 0x1f; tmp = (tmp << offset) | (tmp >> (32 - offset)); bdata[0] = tmp & ((1 << (32 - width)) - 1); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); }}}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } #endif /* BFTST.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_e8d0_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); }}}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } #endif /* BFTST.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_e8e8_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); }}}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } #endif /* BFTST.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_e8f0_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword (2); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); }}}}}return 12 * CYCLE_UNIT / 2; } #endif /* BFTST.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_e8f8_0)(uae_u32 opcode) { {{ uae_s16 extra = get_iword (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); }}}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } #endif /* BFTST.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_e8f9_0)(uae_u32 opcode) { {{ uae_s16 extra = get_iword (2); { uaecptr dsta = get_ilong (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); }}}} m68k_incpc (8); return 16 * CYCLE_UNIT / 2; } #endif /* BFTST.L #.W,(d16,PC) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_e8fa_0)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 extra = get_iword (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_iword (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); }}}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } #endif /* BFTST.L #.W,(d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_e8fb_0)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 extra = get_iword (2); { uaecptr tmppc; uaecptr dsta; m68k_incpc (4); { tmppc = m68k_getpc (); dsta = get_disp_ea_020 (tmppc, next_iword ()); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); }}}}}return 12 * CYCLE_UNIT / 2; } #endif /* BFEXTU.L #.W,Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_e9c0_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword (2); {{ uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp = m68k_dreg(regs, dstreg); offset &= 0x1f; tmp = (tmp << offset) | (tmp >> (32 - offset)); bdata[0] = tmp & ((1 << (32 - width)) - 1); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } #endif /* BFEXTU.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_e9d0_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } #endif /* BFEXTU.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_e9e8_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } #endif /* BFEXTU.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_e9f0_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword (2); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}}}return 12 * CYCLE_UNIT / 2; } #endif /* BFEXTU.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_e9f8_0)(uae_u32 opcode) { {{ uae_s16 extra = get_iword (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } #endif /* BFEXTU.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_e9f9_0)(uae_u32 opcode) { {{ uae_s16 extra = get_iword (2); { uaecptr dsta = get_ilong (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}} m68k_incpc (8); return 16 * CYCLE_UNIT / 2; } #endif /* BFEXTU.L #.W,(d16,PC) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_e9fa_0)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 extra = get_iword (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_iword (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } #endif /* BFEXTU.L #.W,(d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_e9fb_0)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 extra = get_iword (2); { uaecptr tmppc; uaecptr dsta; m68k_incpc (4); { tmppc = m68k_getpc (); dsta = get_disp_ea_020 (tmppc, next_iword ()); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}}}return 12 * CYCLE_UNIT / 2; } #endif /* BFCHG.L #.W,Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_eac0_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword (2); {{ uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp = m68k_dreg(regs, dstreg); offset &= 0x1f; tmp = (tmp << offset) | (tmp >> (32 - offset)); bdata[0] = tmp & ((1 << (32 - width)) - 1); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = tmp ^ (0xffffffffu >> (32 - width)); tmp = bdata[0] | (tmp << (32 - width)); m68k_dreg(regs, dstreg) = (tmp >> offset) | (tmp << (32 - offset)); }}}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } #endif /* BFCHG.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_ead0_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = tmp ^ (0xffffffffu >> (32 - width)); put_bitfield(dsta, bdata, tmp, offset, width); }}}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } #endif /* BFCHG.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_eae8_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = tmp ^ (0xffffffffu >> (32 - width)); put_bitfield(dsta, bdata, tmp, offset, width); }}}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } #endif /* BFCHG.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_eaf0_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword (2); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = tmp ^ (0xffffffffu >> (32 - width)); put_bitfield(dsta, bdata, tmp, offset, width); }}}}}return 12 * CYCLE_UNIT / 2; } #endif /* BFCHG.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_eaf8_0)(uae_u32 opcode) { {{ uae_s16 extra = get_iword (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = tmp ^ (0xffffffffu >> (32 - width)); put_bitfield(dsta, bdata, tmp, offset, width); }}}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } #endif /* BFCHG.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_eaf9_0)(uae_u32 opcode) { {{ uae_s16 extra = get_iword (2); { uaecptr dsta = get_ilong (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = tmp ^ (0xffffffffu >> (32 - width)); put_bitfield(dsta, bdata, tmp, offset, width); }}}} m68k_incpc (8); return 16 * CYCLE_UNIT / 2; } #endif /* BFEXTS.L #.W,Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_ebc0_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword (2); {{ uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp = m68k_dreg(regs, dstreg); offset &= 0x1f; tmp = (tmp << offset) | (tmp >> (32 - offset)); bdata[0] = tmp & ((1 << (32 - width)) - 1); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp = (uae_s32)tmp >> (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } #endif /* BFEXTS.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_ebd0_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp = (uae_s32)tmp >> (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } #endif /* BFEXTS.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_ebe8_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp = (uae_s32)tmp >> (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } #endif /* BFEXTS.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_ebf0_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword (2); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp = (uae_s32)tmp >> (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}}}return 12 * CYCLE_UNIT / 2; } #endif /* BFEXTS.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_ebf8_0)(uae_u32 opcode) { {{ uae_s16 extra = get_iword (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp = (uae_s32)tmp >> (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } #endif /* BFEXTS.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_ebf9_0)(uae_u32 opcode) { {{ uae_s16 extra = get_iword (2); { uaecptr dsta = get_ilong (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp = (uae_s32)tmp >> (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}} m68k_incpc (8); return 16 * CYCLE_UNIT / 2; } #endif /* BFEXTS.L #.W,(d16,PC) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_ebfa_0)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 extra = get_iword (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_iword (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp = (uae_s32)tmp >> (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } #endif /* BFEXTS.L #.W,(d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_ebfb_0)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 extra = get_iword (2); { uaecptr tmppc; uaecptr dsta; m68k_incpc (4); { tmppc = m68k_getpc (); dsta = get_disp_ea_020 (tmppc, next_iword ()); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp = (uae_s32)tmp >> (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}}}return 12 * CYCLE_UNIT / 2; } #endif /* BFCLR.L #.W,Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_ecc0_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword (2); {{ uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp = m68k_dreg(regs, dstreg); offset &= 0x1f; tmp = (tmp << offset) | (tmp >> (32 - offset)); bdata[0] = tmp & ((1 << (32 - width)) - 1); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = 0; tmp = bdata[0] | (tmp << (32 - width)); m68k_dreg(regs, dstreg) = (tmp >> offset) | (tmp << (32 - offset)); }}}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } #endif /* BFCLR.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_ecd0_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = 0; put_bitfield(dsta, bdata, tmp, offset, width); }}}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } #endif /* BFCLR.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_ece8_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = 0; put_bitfield(dsta, bdata, tmp, offset, width); }}}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } #endif /* BFCLR.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_ecf0_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword (2); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = 0; put_bitfield(dsta, bdata, tmp, offset, width); }}}}}return 12 * CYCLE_UNIT / 2; } #endif /* BFCLR.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_ecf8_0)(uae_u32 opcode) { {{ uae_s16 extra = get_iword (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = 0; put_bitfield(dsta, bdata, tmp, offset, width); }}}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } #endif /* BFCLR.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_ecf9_0)(uae_u32 opcode) { {{ uae_s16 extra = get_iword (2); { uaecptr dsta = get_ilong (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = 0; put_bitfield(dsta, bdata, tmp, offset, width); }}}} m68k_incpc (8); return 16 * CYCLE_UNIT / 2; } #endif /* BFFFO.L #.W,Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_edc0_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword (2); {{ uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp = m68k_dreg(regs, dstreg); offset &= 0x1f; tmp = (tmp << offset) | (tmp >> (32 - offset)); bdata[0] = tmp & ((1 << (32 - width)) - 1); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); { uae_u32 mask = 1 << (width - 1); while (mask) { if (tmp & mask) break; mask >>= 1; offset++; }} m68k_dreg (regs, (extra >> 12) & 7) = offset; }}}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } #endif /* BFFFO.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_edd0_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); { uae_u32 mask = 1 << (width - 1); while (mask) { if (tmp & mask) break; mask >>= 1; offset++; }} m68k_dreg (regs, (extra >> 12) & 7) = offset; }}}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } #endif /* BFFFO.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_ede8_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); { uae_u32 mask = 1 << (width - 1); while (mask) { if (tmp & mask) break; mask >>= 1; offset++; }} m68k_dreg (regs, (extra >> 12) & 7) = offset; }}}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } #endif /* BFFFO.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_edf0_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword (2); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); { uae_u32 mask = 1 << (width - 1); while (mask) { if (tmp & mask) break; mask >>= 1; offset++; }} m68k_dreg (regs, (extra >> 12) & 7) = offset; }}}}}return 12 * CYCLE_UNIT / 2; } #endif /* BFFFO.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_edf8_0)(uae_u32 opcode) { {{ uae_s16 extra = get_iword (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); { uae_u32 mask = 1 << (width - 1); while (mask) { if (tmp & mask) break; mask >>= 1; offset++; }} m68k_dreg (regs, (extra >> 12) & 7) = offset; }}}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } #endif /* BFFFO.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_edf9_0)(uae_u32 opcode) { {{ uae_s16 extra = get_iword (2); { uaecptr dsta = get_ilong (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); { uae_u32 mask = 1 << (width - 1); while (mask) { if (tmp & mask) break; mask >>= 1; offset++; }} m68k_dreg (regs, (extra >> 12) & 7) = offset; }}}} m68k_incpc (8); return 16 * CYCLE_UNIT / 2; } #endif /* BFFFO.L #.W,(d16,PC) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_edfa_0)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 extra = get_iword (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_iword (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); { uae_u32 mask = 1 << (width - 1); while (mask) { if (tmp & mask) break; mask >>= 1; offset++; }} m68k_dreg (regs, (extra >> 12) & 7) = offset; }}}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } #endif /* BFFFO.L #.W,(d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_edfb_0)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 extra = get_iword (2); { uaecptr tmppc; uaecptr dsta; m68k_incpc (4); { tmppc = m68k_getpc (); dsta = get_disp_ea_020 (tmppc, next_iword ()); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); { uae_u32 mask = 1 << (width - 1); while (mask) { if (tmp & mask) break; mask >>= 1; offset++; }} m68k_dreg (regs, (extra >> 12) & 7) = offset; }}}}}return 12 * CYCLE_UNIT / 2; } #endif /* BFSET.L #.W,Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_eec0_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword (2); {{ uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp = m68k_dreg(regs, dstreg); offset &= 0x1f; tmp = (tmp << offset) | (tmp >> (32 - offset)); bdata[0] = tmp & ((1 << (32 - width)) - 1); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = 0xffffffffu >> (32 - width); tmp = bdata[0] | (tmp << (32 - width)); m68k_dreg(regs, dstreg) = (tmp >> offset) | (tmp << (32 - offset)); }}}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } #endif /* BFSET.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_eed0_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = 0xffffffffu >> (32 - width); put_bitfield(dsta, bdata, tmp, offset, width); }}}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } #endif /* BFSET.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_eee8_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = 0xffffffffu >> (32 - width); put_bitfield(dsta, bdata, tmp, offset, width); }}}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } #endif /* BFSET.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_eef0_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword (2); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = 0xffffffffu >> (32 - width); put_bitfield(dsta, bdata, tmp, offset, width); }}}}}return 12 * CYCLE_UNIT / 2; } #endif /* BFSET.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_eef8_0)(uae_u32 opcode) { {{ uae_s16 extra = get_iword (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = 0xffffffffu >> (32 - width); put_bitfield(dsta, bdata, tmp, offset, width); }}}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } #endif /* BFSET.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_eef9_0)(uae_u32 opcode) { {{ uae_s16 extra = get_iword (2); { uaecptr dsta = get_ilong (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = 0xffffffffu >> (32 - width); put_bitfield(dsta, bdata, tmp, offset, width); }}}} m68k_incpc (8); return 16 * CYCLE_UNIT / 2; } #endif /* BFINS.L #.W,Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_efc0_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword (2); {{ uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp = m68k_dreg(regs, dstreg); offset &= 0x1f; tmp = (tmp << offset) | (tmp >> (32 - offset)); bdata[0] = tmp & ((1 << (32 - width)) - 1); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = m68k_dreg (regs, (extra >> 12) & 7); tmp = tmp & (0xffffffffu >> (32 - width)); SET_NFLG (tmp & (1 << (width - 1)) ? 1 : 0); SET_ZFLG (tmp == 0); tmp = bdata[0] | (tmp << (32 - width)); m68k_dreg(regs, dstreg) = (tmp >> offset) | (tmp << (32 - offset)); }}}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } #endif /* BFINS.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_efd0_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = m68k_dreg (regs, (extra >> 12) & 7); tmp = tmp & (0xffffffffu >> (32 - width)); SET_NFLG (tmp & (1 << (width - 1)) ? 1 : 0); SET_ZFLG (tmp == 0); put_bitfield(dsta, bdata, tmp, offset, width); }}}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } #endif /* BFINS.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_efe8_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = m68k_dreg (regs, (extra >> 12) & 7); tmp = tmp & (0xffffffffu >> (32 - width)); SET_NFLG (tmp & (1 << (width - 1)) ? 1 : 0); SET_ZFLG (tmp == 0); put_bitfield(dsta, bdata, tmp, offset, width); }}}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } #endif /* BFINS.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_eff0_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword (2); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword ()); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = m68k_dreg (regs, (extra >> 12) & 7); tmp = tmp & (0xffffffffu >> (32 - width)); SET_NFLG (tmp & (1 << (width - 1)) ? 1 : 0); SET_ZFLG (tmp == 0); put_bitfield(dsta, bdata, tmp, offset, width); }}}}}return 12 * CYCLE_UNIT / 2; } #endif /* BFINS.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_eff8_0)(uae_u32 opcode) { {{ uae_s16 extra = get_iword (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = m68k_dreg (regs, (extra >> 12) & 7); tmp = tmp & (0xffffffffu >> (32 - width)); SET_NFLG (tmp & (1 << (width - 1)) ? 1 : 0); SET_ZFLG (tmp == 0); put_bitfield(dsta, bdata, tmp, offset, width); }}}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } #endif /* BFINS.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_eff9_0)(uae_u32 opcode) { {{ uae_s16 extra = get_iword (2); { uaecptr dsta = get_ilong (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = m68k_dreg (regs, (extra >> 12) & 7); tmp = tmp & (0xffffffffu >> (32 - width)); SET_NFLG (tmp & (1 << (width - 1)) ? 1 : 0); SET_ZFLG (tmp == 0); put_bitfield(dsta, bdata, tmp, offset, width); }}}} m68k_incpc (8); return 16 * CYCLE_UNIT / 2; } #endif /* MMUOP030.L Dn,#.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f000_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel1801; } { uaecptr pc = m68k_getpc (); uae_u16 extra = x_get_word (pc + 2); m68k_incpc (4); uae_u16 extraa = 0; mmu_op30 (pc, opcode, extra, extraa); }}endlabel1801: ; return 4 * CYCLE_UNIT / 2; } #endif /* MMUOP030.L An,#.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f008_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel1802; } { uaecptr pc = m68k_getpc (); uae_u16 extra = x_get_word (pc + 2); m68k_incpc (4); uae_u16 extraa = 0; mmu_op30 (pc, opcode, extra, extraa); }}endlabel1802: ; return 4 * CYCLE_UNIT / 2; } #endif /* MMUOP030.L (An),#.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f010_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel1803; } { uaecptr pc = m68k_getpc (); uae_u16 extra = x_get_word (pc + 2); m68k_incpc (4); { uaecptr extraa = m68k_areg (regs, srcreg); mmu_op30 (pc, opcode, extra, extraa); }}}endlabel1803: ; return 4 * CYCLE_UNIT / 2; } #endif /* MMUOP030.L (An)+,#.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f018_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel1804; } { uaecptr pc = m68k_getpc (); uae_u16 extra = x_get_word (pc + 2); m68k_incpc (4); { uaecptr extraa = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += 4; mmu_op30 (pc, opcode, extra, extraa); }}}endlabel1804: ; return 4 * CYCLE_UNIT / 2; } #endif /* MMUOP030.L -(An),#.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f020_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel1805; } { uaecptr pc = m68k_getpc (); uae_u16 extra = x_get_word (pc + 2); m68k_incpc (4); { uaecptr extraa; extraa = m68k_areg (regs, srcreg) - 4; m68k_areg (regs, srcreg) = extraa; mmu_op30 (pc, opcode, extra, extraa); }}}endlabel1805: ; return 6 * CYCLE_UNIT / 2; } #endif /* MMUOP030.L (d16,An),#.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f028_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel1806; } { uaecptr pc = m68k_getpc (); uae_u16 extra = x_get_word (pc + 2); m68k_incpc (4); { uaecptr extraa = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (0); m68k_incpc (2); mmu_op30 (pc, opcode, extra, extraa); }}}endlabel1806: ; return 8 * CYCLE_UNIT / 2; } #endif /* MMUOP030.L (d8,An,Xn),#.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f030_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel1807; } { uaecptr pc = m68k_getpc (); uae_u16 extra = x_get_word (pc + 2); m68k_incpc (4); { uaecptr extraa; { extraa = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); mmu_op30 (pc, opcode, extra, extraa); }}}}endlabel1807: ; return 8 * CYCLE_UNIT / 2; } #endif /* MMUOP030.L (xxx).W,#.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f038_0)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel1808; } { uaecptr pc = m68k_getpc (); uae_u16 extra = x_get_word (pc + 2); m68k_incpc (4); { uaecptr extraa = (uae_s32)(uae_s16)get_iword (0); m68k_incpc (2); mmu_op30 (pc, opcode, extra, extraa); }}}endlabel1808: ; return 8 * CYCLE_UNIT / 2; } #endif /* MMUOP030.L (xxx).L,#.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f039_0)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel1809; } { uaecptr pc = m68k_getpc (); uae_u16 extra = x_get_word (pc + 2); m68k_incpc (4); { uaecptr extraa = get_ilong (0); m68k_incpc (4); mmu_op30 (pc, opcode, extra, extraa); }}}endlabel1809: ; return 12 * CYCLE_UNIT / 2; } #endif /* FPP.L #.W,Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f200_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { #ifdef FPUEMU { uae_s16 extra = get_iword (2); m68k_incpc (4); fpuop_arithmetic(opcode, extra); } #endif }return 8 * CYCLE_UNIT / 2; } #endif /* FPP.L #.W,An */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f208_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { #ifdef FPUEMU { uae_s16 extra = get_iword (2); m68k_incpc (4); fpuop_arithmetic(opcode, extra); } #endif }return 8 * CYCLE_UNIT / 2; } #endif /* FPP.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f210_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { #ifdef FPUEMU { uae_s16 extra = get_iword (2); m68k_incpc (4); fpuop_arithmetic(opcode, extra); } #endif }return 8 * CYCLE_UNIT / 2; } #endif /* FPP.L #.W,(An)+ */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f218_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { #ifdef FPUEMU { uae_s16 extra = get_iword (2); m68k_incpc (4); fpuop_arithmetic(opcode, extra); } #endif }return 8 * CYCLE_UNIT / 2; } #endif /* FPP.L #.W,-(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f220_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { #ifdef FPUEMU { uae_s16 extra = get_iword (2); m68k_incpc (4); fpuop_arithmetic(opcode, extra); } #endif }return 8 * CYCLE_UNIT / 2; } #endif /* FPP.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f228_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { #ifdef FPUEMU { uae_s16 extra = get_iword (2); m68k_incpc (4); fpuop_arithmetic(opcode, extra); } #endif }return 8 * CYCLE_UNIT / 2; } #endif /* FPP.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f230_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { #ifdef FPUEMU { uae_s16 extra = get_iword (2); m68k_incpc (4); fpuop_arithmetic(opcode, extra); } #endif }return 8 * CYCLE_UNIT / 2; } #endif /* FPP.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f238_0)(uae_u32 opcode) { { #ifdef FPUEMU { uae_s16 extra = get_iword (2); m68k_incpc (4); fpuop_arithmetic(opcode, extra); } #endif }return 8 * CYCLE_UNIT / 2; } #endif /* FPP.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f239_0)(uae_u32 opcode) { { #ifdef FPUEMU { uae_s16 extra = get_iword (2); m68k_incpc (4); fpuop_arithmetic(opcode, extra); } #endif }return 8 * CYCLE_UNIT / 2; } #endif /* FPP.L #.W,(d16,PC) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f23a_0)(uae_u32 opcode) { uae_u32 dstreg = 2; { #ifdef FPUEMU { uae_s16 extra = get_iword (2); m68k_incpc (4); fpuop_arithmetic(opcode, extra); } #endif }return 8 * CYCLE_UNIT / 2; } #endif /* FPP.L #.W,(d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f23b_0)(uae_u32 opcode) { uae_u32 dstreg = 3; { #ifdef FPUEMU { uae_s16 extra = get_iword (2); m68k_incpc (4); fpuop_arithmetic(opcode, extra); } #endif }return 8 * CYCLE_UNIT / 2; } #endif /* FPP.L #.W,#.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f23c_0)(uae_u32 opcode) { { #ifdef FPUEMU { uae_s16 extra = get_iword (2); m68k_incpc (4); fpuop_arithmetic(opcode, extra); } #endif }return 8 * CYCLE_UNIT / 2; } #endif /* FScc.L #.W,Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f240_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { #ifdef FPUEMU { uae_s16 extra = get_iword (2); m68k_incpc (4); fpuop_scc (opcode, extra); } #endif }return 8 * CYCLE_UNIT / 2; } #endif /* FDBcc.L #.W,Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f248_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { #ifdef FPUEMU { uae_s16 extra = get_iword (2); m68k_incpc (4); fpuop_dbcc (opcode, extra); } #endif }return 8 * CYCLE_UNIT / 2; } #endif /* FScc.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f250_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { #ifdef FPUEMU { uae_s16 extra = get_iword (2); m68k_incpc (4); fpuop_scc (opcode, extra); } #endif }return 8 * CYCLE_UNIT / 2; } #endif /* FScc.L #.W,(An)+ */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f258_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { #ifdef FPUEMU { uae_s16 extra = get_iword (2); m68k_incpc (4); fpuop_scc (opcode, extra); } #endif }return 8 * CYCLE_UNIT / 2; } #endif /* FScc.L #.W,-(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f260_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { #ifdef FPUEMU { uae_s16 extra = get_iword (2); m68k_incpc (4); fpuop_scc (opcode, extra); } #endif }return 8 * CYCLE_UNIT / 2; } #endif /* FScc.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f268_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { #ifdef FPUEMU { uae_s16 extra = get_iword (2); m68k_incpc (4); fpuop_scc (opcode, extra); } #endif }return 8 * CYCLE_UNIT / 2; } #endif /* FScc.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f270_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { #ifdef FPUEMU { uae_s16 extra = get_iword (2); m68k_incpc (4); fpuop_scc (opcode, extra); } #endif }return 8 * CYCLE_UNIT / 2; } #endif /* FScc.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f278_0)(uae_u32 opcode) { { #ifdef FPUEMU { uae_s16 extra = get_iword (2); m68k_incpc (4); fpuop_scc (opcode, extra); } #endif }return 8 * CYCLE_UNIT / 2; } #endif /* FScc.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f279_0)(uae_u32 opcode) { { #ifdef FPUEMU { uae_s16 extra = get_iword (2); m68k_incpc (4); fpuop_scc (opcode, extra); } #endif }return 8 * CYCLE_UNIT / 2; } #endif /* FTRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f27a_0)(uae_u32 opcode) { { #ifdef FPUEMU uaecptr oldpc = m68k_getpc (); uae_u16 extra = get_iword (2); { uae_s16 dummy = get_iword (4); m68k_incpc (6); fpuop_trapcc (opcode, oldpc, extra); } #endif }return 12 * CYCLE_UNIT / 2; } #endif /* FTRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f27b_0)(uae_u32 opcode) { { #ifdef FPUEMU uaecptr oldpc = m68k_getpc (); uae_u16 extra = get_iword (2); { uae_s32 dummy = get_ilong (4); m68k_incpc (8); fpuop_trapcc (opcode, oldpc, extra); } #endif }return 16 * CYCLE_UNIT / 2; } #endif /* FTRAPcc.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f27c_0)(uae_u32 opcode) { { #ifdef FPUEMU uaecptr oldpc = m68k_getpc (); uae_u16 extra = get_iword (2); m68k_incpc (4); fpuop_trapcc (opcode, oldpc, extra); #endif }return 8 * CYCLE_UNIT / 2; } #endif /* FBccQ.L #,#.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f280_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 63); { #ifdef FPUEMU m68k_incpc (2); { uaecptr pc = m68k_getpc (); { uae_s16 extra = get_iword (0); m68k_incpc (2); fpuop_bcc (opcode, pc,extra); }} #endif }return 8 * CYCLE_UNIT / 2; } #endif /* FBccQ.L #,#.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f2c0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 63); { #ifdef FPUEMU m68k_incpc (2); { uaecptr pc = m68k_getpc (); { uae_s32 extra = get_ilong (0); m68k_incpc (4); fpuop_bcc (opcode, pc,extra); }} #endif }return 12 * CYCLE_UNIT / 2; } #endif /* FSAVE.L (An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f310_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel1836; } { #ifdef FPUEMU m68k_incpc (2); fpuop_save (opcode); #endif }}endlabel1836: ; return 4 * CYCLE_UNIT / 2; } #endif /* FSAVE.L -(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f320_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel1837; } { #ifdef FPUEMU m68k_incpc (2); fpuop_save (opcode); #endif }}endlabel1837: ; return 4 * CYCLE_UNIT / 2; } #endif /* FSAVE.L (d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f328_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel1838; } { #ifdef FPUEMU m68k_incpc (2); fpuop_save (opcode); #endif }}endlabel1838: ; return 4 * CYCLE_UNIT / 2; } #endif /* FSAVE.L (d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f330_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel1839; } { #ifdef FPUEMU m68k_incpc (2); fpuop_save (opcode); #endif }}endlabel1839: ; return 4 * CYCLE_UNIT / 2; } #endif /* FSAVE.L (xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f338_0)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel1840; } { #ifdef FPUEMU m68k_incpc (2); fpuop_save (opcode); #endif }}endlabel1840: ; return 4 * CYCLE_UNIT / 2; } #endif /* FSAVE.L (xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f339_0)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel1841; } { #ifdef FPUEMU m68k_incpc (2); fpuop_save (opcode); #endif }}endlabel1841: ; return 4 * CYCLE_UNIT / 2; } #endif /* FRESTORE.L (An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f350_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel1842; } { #ifdef FPUEMU m68k_incpc (2); fpuop_restore (opcode); #endif }}endlabel1842: ; return 4 * CYCLE_UNIT / 2; } #endif /* FRESTORE.L (An)+ */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f358_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel1843; } { #ifdef FPUEMU m68k_incpc (2); fpuop_restore (opcode); #endif }}endlabel1843: ; return 4 * CYCLE_UNIT / 2; } #endif /* FRESTORE.L (d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f368_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel1844; } { #ifdef FPUEMU m68k_incpc (2); fpuop_restore (opcode); #endif }}endlabel1844: ; return 4 * CYCLE_UNIT / 2; } #endif /* FRESTORE.L (d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f370_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel1845; } { #ifdef FPUEMU m68k_incpc (2); fpuop_restore (opcode); #endif }}endlabel1845: ; return 4 * CYCLE_UNIT / 2; } #endif /* FRESTORE.L (xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f378_0)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel1846; } { #ifdef FPUEMU m68k_incpc (2); fpuop_restore (opcode); #endif }}endlabel1846: ; return 4 * CYCLE_UNIT / 2; } #endif /* FRESTORE.L (xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f379_0)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel1847; } { #ifdef FPUEMU m68k_incpc (2); fpuop_restore (opcode); #endif }}endlabel1847: ; return 4 * CYCLE_UNIT / 2; } #endif /* FRESTORE.L (d16,PC) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f37a_0)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel1848; } { #ifdef FPUEMU m68k_incpc (2); fpuop_restore (opcode); #endif }}endlabel1848: ; return 4 * CYCLE_UNIT / 2; } #endif /* FRESTORE.L (d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f37b_0)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel1849; } { #ifdef FPUEMU m68k_incpc (2); fpuop_restore (opcode); #endif }}endlabel1849: ; return 4 * CYCLE_UNIT / 2; } #endif /* CINVLQ.L #,An */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f408_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 6) & 3); uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel1850; } { if (opcode & 0x80) flush_icache(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); }} m68k_incpc (2); endlabel1850: ; return 4 * CYCLE_UNIT / 2; } #endif /* CINVPQ.L #,An */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f410_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 6) & 3); uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel1851; } { if (opcode & 0x80) flush_icache(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); }} m68k_incpc (2); endlabel1851: ; return 4 * CYCLE_UNIT / 2; } #endif /* CINVAQ.L # */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f418_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 6) & 3); {if (!regs.s) { Exception (8); goto endlabel1852; } { if (opcode & 0x80) flush_icache(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); }} m68k_incpc (2); endlabel1852: ; return 4 * CYCLE_UNIT / 2; } #endif /* CINVAQ.L # */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f419_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 6) & 3); {if (!regs.s) { Exception (8); goto endlabel1853; } { if (opcode & 0x80) flush_icache(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); }} m68k_incpc (2); endlabel1853: ; return 4 * CYCLE_UNIT / 2; } #endif /* CINVAQ.L # */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f41a_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 6) & 3); {if (!regs.s) { Exception (8); goto endlabel1854; } { if (opcode & 0x80) flush_icache(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); }} m68k_incpc (2); endlabel1854: ; return 4 * CYCLE_UNIT / 2; } #endif /* CINVAQ.L # */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f41b_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 6) & 3); {if (!regs.s) { Exception (8); goto endlabel1855; } { if (opcode & 0x80) flush_icache(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); }} m68k_incpc (2); endlabel1855: ; return 4 * CYCLE_UNIT / 2; } #endif /* CINVAQ.L # */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f41c_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 6) & 3); {if (!regs.s) { Exception (8); goto endlabel1856; } { if (opcode & 0x80) flush_icache(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); }} m68k_incpc (2); endlabel1856: ; return 4 * CYCLE_UNIT / 2; } #endif /* CINVAQ.L # */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f41d_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 6) & 3); {if (!regs.s) { Exception (8); goto endlabel1857; } { if (opcode & 0x80) flush_icache(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); }} m68k_incpc (2); endlabel1857: ; return 4 * CYCLE_UNIT / 2; } #endif /* CINVAQ.L # */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f41e_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 6) & 3); {if (!regs.s) { Exception (8); goto endlabel1858; } { if (opcode & 0x80) flush_icache(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); }} m68k_incpc (2); endlabel1858: ; return 4 * CYCLE_UNIT / 2; } #endif /* CINVAQ.L # */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f41f_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 6) & 3); {if (!regs.s) { Exception (8); goto endlabel1859; } { if (opcode & 0x80) flush_icache(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); }} m68k_incpc (2); endlabel1859: ; return 4 * CYCLE_UNIT / 2; } #endif /* CPUSHLQ.L #,An */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f428_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 6) & 3); uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel1860; } { if (opcode & 0x80) flush_icache(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); }} m68k_incpc (2); endlabel1860: ; return 4 * CYCLE_UNIT / 2; } #endif /* CPUSHPQ.L #,An */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f430_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 6) & 3); uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel1861; } { if (opcode & 0x80) flush_icache(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); }} m68k_incpc (2); endlabel1861: ; return 4 * CYCLE_UNIT / 2; } #endif /* CPUSHAQ.L # */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f438_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 6) & 3); {if (!regs.s) { Exception (8); goto endlabel1862; } { if (opcode & 0x80) flush_icache(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); }} m68k_incpc (2); endlabel1862: ; return 4 * CYCLE_UNIT / 2; } #endif /* CPUSHAQ.L # */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f439_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 6) & 3); {if (!regs.s) { Exception (8); goto endlabel1863; } { if (opcode & 0x80) flush_icache(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); }} m68k_incpc (2); endlabel1863: ; return 4 * CYCLE_UNIT / 2; } #endif /* CPUSHAQ.L # */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f43a_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 6) & 3); {if (!regs.s) { Exception (8); goto endlabel1864; } { if (opcode & 0x80) flush_icache(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); }} m68k_incpc (2); endlabel1864: ; return 4 * CYCLE_UNIT / 2; } #endif /* CPUSHAQ.L # */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f43b_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 6) & 3); {if (!regs.s) { Exception (8); goto endlabel1865; } { if (opcode & 0x80) flush_icache(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); }} m68k_incpc (2); endlabel1865: ; return 4 * CYCLE_UNIT / 2; } #endif /* CPUSHAQ.L # */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f43c_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 6) & 3); {if (!regs.s) { Exception (8); goto endlabel1866; } { if (opcode & 0x80) flush_icache(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); }} m68k_incpc (2); endlabel1866: ; return 4 * CYCLE_UNIT / 2; } #endif /* CPUSHAQ.L # */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f43d_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 6) & 3); {if (!regs.s) { Exception (8); goto endlabel1867; } { if (opcode & 0x80) flush_icache(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); }} m68k_incpc (2); endlabel1867: ; return 4 * CYCLE_UNIT / 2; } #endif /* CPUSHAQ.L # */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f43e_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 6) & 3); {if (!regs.s) { Exception (8); goto endlabel1868; } { if (opcode & 0x80) flush_icache(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); }} m68k_incpc (2); endlabel1868: ; return 4 * CYCLE_UNIT / 2; } #endif /* CPUSHAQ.L # */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f43f_0)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 6) & 3); {if (!regs.s) { Exception (8); goto endlabel1869; } { if (opcode & 0x80) flush_icache(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); }} m68k_incpc (2); endlabel1869: ; return 4 * CYCLE_UNIT / 2; } #endif /* PFLUSHN.L (An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f500_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel1870; } { m68k_incpc (2); mmu_op (opcode, 0); }}endlabel1870: ; return 4 * CYCLE_UNIT / 2; } #endif /* PFLUSH.L (An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f508_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel1871; } { m68k_incpc (2); mmu_op (opcode, 0); }}endlabel1871: ; return 4 * CYCLE_UNIT / 2; } #endif /* PFLUSHAN.L (An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f510_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel1872; } { m68k_incpc (2); mmu_op (opcode, 0); }}endlabel1872: ; return 4 * CYCLE_UNIT / 2; } #endif /* PFLUSHA.L (An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f518_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel1873; } { m68k_incpc (2); mmu_op (opcode, 0); }}endlabel1873: ; return 4 * CYCLE_UNIT / 2; } #endif /* PTESTR.L (An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f548_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel1874; } { m68k_incpc (2); mmu_op (opcode, 0); }}endlabel1874: ; return 4 * CYCLE_UNIT / 2; } #endif /* PTESTW.L (An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f568_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel1875; } { m68k_incpc (2); mmu_op (opcode, 0); }}endlabel1875: ; return 4 * CYCLE_UNIT / 2; } #endif /* PLPAR.L (An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f588_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel1876; } { m68k_incpc (2); mmu_op (opcode, 0); }}endlabel1876: ; return 4 * CYCLE_UNIT / 2; } #endif /* PLPAW.L (An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f5c8_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel1877; } { m68k_incpc (2); mmu_op (opcode, 0); }}endlabel1877: ; return 4 * CYCLE_UNIT / 2; } #endif /* MOVE16.L (An)+,(xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f600_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); { uae_u32 v1, v2, v3, v4; { uaecptr memsa = m68k_areg (regs, srcreg); { uaecptr memda = get_ilong (2); memsa &= ~15; memda &= ~15; v1 = get_long (memsa); v2 = get_long (memsa + 4); v3 = get_long (memsa + 8); v4 = get_long (memsa + 12); put_long (memda , v1); put_long (memda + 4, v2); put_long (memda + 8, v3); put_long (memda + 12, v4); m68k_areg (regs, srcreg) += 16; }}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } #endif /* MOVE16.L (xxx).L,(An)+ */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f608_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u32 v1, v2, v3, v4; { uaecptr memsa = get_ilong (2); { uaecptr memda = m68k_areg (regs, dstreg); memsa &= ~15; memda &= ~15; v1 = get_long (memsa); v2 = get_long (memsa + 4); v3 = get_long (memsa + 8); v4 = get_long (memsa + 12); put_long (memda , v1); put_long (memda + 4, v2); put_long (memda + 8, v3); put_long (memda + 12, v4); m68k_areg (regs, dstreg) += 16; }}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } #endif /* MOVE16.L (An),(xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f610_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); { uae_u32 v1, v2, v3, v4; { uaecptr memsa = m68k_areg (regs, srcreg); { uaecptr memda = get_ilong (2); memsa &= ~15; memda &= ~15; v1 = get_long (memsa); v2 = get_long (memsa + 4); v3 = get_long (memsa + 8); v4 = get_long (memsa + 12); put_long (memda , v1); put_long (memda + 4, v2); put_long (memda + 8, v3); put_long (memda + 12, v4); }}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } #endif /* MOVE16.L (xxx).L,(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f618_0)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u32 v1, v2, v3, v4; { uaecptr memsa = get_ilong (2); { uaecptr memda = m68k_areg (regs, dstreg); memsa &= ~15; memda &= ~15; v1 = get_long (memsa); v2 = get_long (memsa + 4); v3 = get_long (memsa + 8); v4 = get_long (memsa + 12); put_long (memda , v1); put_long (memda + 4, v2); put_long (memda + 8, v3); put_long (memda + 12, v4); }}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } #endif /* MOVE16.L (An)+,(An)+ */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f620_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = 0; { uae_u32 v1, v2, v3, v4; uaecptr mems = m68k_areg (regs, srcreg) & ~15, memd; dstreg = (get_iword (2) >> 12) & 7; memd = m68k_areg (regs, dstreg) & ~15; v1 = get_long (mems); v2 = get_long (mems + 4); v3 = get_long (mems + 8); v4 = get_long (mems + 12); put_long (memd , v1); put_long (memd + 4, v2); put_long (memd + 8, v3); put_long (memd + 12, v4); if (srcreg != dstreg) m68k_areg (regs, srcreg) += 16; m68k_areg (regs, dstreg) += 16; } m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } #endif /* LPSTOP.L #.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f800_0)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel1883; } { uae_u16 sw = x_get_iword (2); uae_u16 sr; if (sw != (0x100|0x80|0x40)) { Exception (4); goto endlabel1883; } sr = x_get_iword (4); if (!(sr & 0x8000)) { Exception (8); goto endlabel1883; } regs.sr = sr; MakeFromSR (); m68k_setstopped(); m68k_incpc (6); }}endlabel1883: ; return 4 * CYCLE_UNIT / 2; } #endif #endif #if !defined(PART_1) && !defined(PART_2) && !defined(PART_3) && !defined(PART_4) && !defined(PART_5) && !defined(PART_6) && !defined(PART_7) && !defined(PART_8) #define PART_1 1 #define PART_2 1 #define PART_3 1 #define PART_4 1 #define PART_5 1 #define PART_6 1 #define PART_7 1 #define PART_8 1 #endif #ifdef PART_1 #endif #ifdef PART_2 #endif #ifdef PART_3 #endif #ifdef PART_4 #endif #ifdef PART_5 #endif #ifdef PART_6 #endif #ifdef PART_7 #endif #ifdef PART_8 #endif #if !defined(PART_1) && !defined(PART_2) && !defined(PART_3) && !defined(PART_4) && !defined(PART_5) && !defined(PART_6) && !defined(PART_7) && !defined(PART_8) #define PART_1 1 #define PART_2 1 #define PART_3 1 #define PART_4 1 #define PART_5 1 #define PART_6 1 #define PART_7 1 #define PART_8 1 #endif #ifdef PART_1 #endif #ifdef PART_2 #endif #ifdef PART_3 #endif #ifdef PART_4 /* NBCD.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4800_2)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = - (src & 0xF0); uae_u16 newv; int cflg; if (newv_lo > 9) { newv_lo -= 6; } newv = newv_hi + newv_lo; cflg = (newv & 0x1F0) > 0x90; if (cflg) newv -= 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((newv) & 0xff); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* NBCD.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4810_2)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); { uae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = - (src & 0xF0); uae_u16 newv; int cflg; if (newv_lo > 9) { newv_lo -= 6; } newv = newv_hi + newv_lo; cflg = (newv & 0x1F0) > 0x90; if (cflg) newv -= 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); put_byte (srca, newv); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* NBCD.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4818_2)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = - (src & 0xF0); uae_u16 newv; int cflg; if (newv_lo > 9) { newv_lo -= 6; } newv = newv_hi + newv_lo; cflg = (newv & 0x1F0) > 0x90; if (cflg) newv -= 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); put_byte (srca, newv); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* NBCD.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_4820_2)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) = srca; { uae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = - (src & 0xF0); uae_u16 newv; int cflg; if (newv_lo > 9) { newv_lo -= 6; } newv = newv_hi + newv_lo; cflg = (newv & 0x1F0) > 0x90; if (cflg) newv -= 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); put_byte (srca, newv); }}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* NBCD.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4828_2)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s8 src = get_byte (srca); { uae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = - (src & 0xF0); uae_u16 newv; int cflg; if (newv_lo > 9) { newv_lo -= 6; } newv = newv_hi + newv_lo; cflg = (newv & 0x1F0) > 0x90; if (cflg) newv -= 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); put_byte (srca, newv); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* NBCD.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4830_2)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword ()); { uae_s8 src = get_byte (srca); { uae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = - (src & 0xF0); uae_u16 newv; int cflg; if (newv_lo > 9) { newv_lo -= 6; } newv = newv_hi + newv_lo; cflg = (newv & 0x1F0) > 0x90; if (cflg) newv -= 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); put_byte (srca, newv); }}}}}return 16 * CYCLE_UNIT / 2; } /* NBCD.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4838_2)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s8 src = get_byte (srca); { uae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = - (src & 0xF0); uae_u16 newv; int cflg; if (newv_lo > 9) { newv_lo -= 6; } newv = newv_hi + newv_lo; cflg = (newv & 0x1F0) > 0x90; if (cflg) newv -= 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); put_byte (srca, newv); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* NBCD.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4839_2)(uae_u32 opcode) { {{ uaecptr srca = get_ilong (2); { uae_s8 src = get_byte (srca); { uae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = - (src & 0xF0); uae_u16 newv; int cflg; if (newv_lo > 9) { newv_lo -= 6; } newv = newv_hi + newv_lo; cflg = (newv & 0x1F0) > 0x90; if (cflg) newv -= 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); put_byte (srca, newv); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } #endif #ifdef PART_5 #endif #ifdef PART_6 /* SBCD.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8100_2)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); { uae_u16 newv_lo = (dst & 0xF) - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = (dst & 0xF0) - (src & 0xF0); uae_u16 newv, tmp_newv; int bcd = 0; newv = tmp_newv = newv_hi + newv_lo; if (newv_lo & 0xF0) { newv -= 6; bcd = 6; }; if ((((dst & 0xFF) - (src & 0xFF) - (GET_XFLG () ? 1 : 0)) & 0x100) > 0xFF) { newv -= 0x60; } SET_CFLG ((((dst & 0xFF) - (src & 0xFF) - bcd - (GET_XFLG () ? 1 : 0)) & 0x300) > 0xFF); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); SET_VFLG ((tmp_newv & 0x80) != 0 && (newv & 0x80) == 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* SBCD.B -(An),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_8108_2)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) = dsta; { uae_u16 newv_lo = (dst & 0xF) - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = (dst & 0xF0) - (src & 0xF0); uae_u16 newv, tmp_newv; int bcd = 0; newv = tmp_newv = newv_hi + newv_lo; if (newv_lo & 0xF0) { newv -= 6; bcd = 6; }; if ((((dst & 0xFF) - (src & 0xFF) - (GET_XFLG () ? 1 : 0)) & 0x100) > 0xFF) { newv -= 0x60; } SET_CFLG ((((dst & 0xFF) - (src & 0xFF) - bcd - (GET_XFLG () ? 1 : 0)) & 0x300) > 0xFF); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); SET_VFLG ((tmp_newv & 0x80) != 0 && (newv & 0x80) == 0); put_byte (dsta, newv); }}}}}} m68k_incpc (2); return 16 * CYCLE_UNIT / 2; } #endif #ifdef PART_7 /* ABCD.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c100_2)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); { uae_u16 newv_lo = (src & 0xF) + (dst & 0xF) + (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = (src & 0xF0) + (dst & 0xF0); uae_u16 newv, tmp_newv; int cflg; newv = tmp_newv = newv_hi + newv_lo; if (newv_lo > 9) { newv += 6; } cflg = (newv & 0x3F0) > 0x90; if (cflg) newv += 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); SET_VFLG ((tmp_newv & 0x80) == 0 && (newv & 0x80) != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ABCD.B -(An),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_c108_2)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) = dsta; { uae_u16 newv_lo = (src & 0xF) + (dst & 0xF) + (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = (src & 0xF0) + (dst & 0xF0); uae_u16 newv, tmp_newv; int cflg; newv = tmp_newv = newv_hi + newv_lo; if (newv_lo > 9) { newv += 6; } cflg = (newv & 0x3F0) > 0x90; if (cflg) newv += 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); SET_VFLG ((tmp_newv & 0x80) == 0 && (newv & 0x80) != 0); put_byte (dsta, newv); }}}}}} m68k_incpc (2); return 16 * CYCLE_UNIT / 2; } #endif #ifdef PART_8 #endif #if !defined(PART_1) && !defined(PART_2) && !defined(PART_3) && !defined(PART_4) && !defined(PART_5) && !defined(PART_6) && !defined(PART_7) && !defined(PART_8) #define PART_1 1 #define PART_2 1 #define PART_3 1 #define PART_4 1 #define PART_5 1 #define PART_6 1 #define PART_7 1 #define PART_8 1 #endif #ifdef PART_1 #endif #ifdef PART_2 #endif #ifdef PART_3 #endif #ifdef PART_4 #endif #ifdef PART_5 #endif #ifdef PART_6 #endif #ifdef PART_7 #endif #ifdef PART_8 #endif #if !defined(PART_1) && !defined(PART_2) && !defined(PART_3) && !defined(PART_4) && !defined(PART_5) && !defined(PART_6) && !defined(PART_7) && !defined(PART_8) #define PART_1 1 #define PART_2 1 #define PART_3 1 #define PART_4 1 #define PART_5 1 #define PART_6 1 #define PART_7 1 #define PART_8 1 #endif #ifdef PART_1 /* OR.B #.B,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0030_4)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte (2); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (4)); { uae_s8 dst = get_byte (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); }}}} m68k_incpc (6); return 26 * CYCLE_UNIT / 2; } /* OR.W #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0070_4)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (4)); { uae_s16 dst = get_word (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); }}}} m68k_incpc (6); return 22 * CYCLE_UNIT / 2; } /* OR.L #.L,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_00b0_4)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong (2); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (6)); { uae_s32 dst = get_long (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); }}}} m68k_incpc (8); return 34 * CYCLE_UNIT / 2; } /* BTST.B Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0130_4)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (2)); { uae_s8 dst = get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpc (4); return 14 * CYCLE_UNIT / 2; } /* BTST.B Dn,(d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_013b_4)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = 3; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr tmppc; uaecptr dsta; tmppc = m68k_getpc () + 2; dsta = get_disp_ea_000 (tmppc, get_iword (2)); { uae_s8 dst = get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpc (4); return 14 * CYCLE_UNIT / 2; } /* BCHG.B Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0170_4)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (2)); { uae_s8 dst = get_byte (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); put_byte (dsta, dst); }}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* BCHG.B Dn,(d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_017b_4)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = 3; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr tmppc; uaecptr dsta; tmppc = m68k_getpc () + 2; dsta = get_disp_ea_000 (tmppc, get_iword (2)); { uae_s8 dst = get_byte (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); put_byte (dsta, dst); }}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* BCLR.B Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_01b0_4)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (2)); { uae_s8 dst = get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); put_byte (dsta, dst); }}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* BCLR.B Dn,(d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_01bb_4)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = 3; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr tmppc; uaecptr dsta; tmppc = m68k_getpc () + 2; dsta = get_disp_ea_000 (tmppc, get_iword (2)); { uae_s8 dst = get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); put_byte (dsta, dst); }}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* BSET.B Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_01f0_4)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (2)); { uae_s8 dst = get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); put_byte (dsta, dst); }}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* BSET.B Dn,(d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_01fb_4)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = 3; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr tmppc; uaecptr dsta; tmppc = m68k_getpc () + 2; dsta = get_disp_ea_000 (tmppc, get_iword (2)); { uae_s8 dst = get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); put_byte (dsta, dst); }}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* AND.B #.B,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0230_4)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte (2); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (4)); { uae_s8 dst = get_byte (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); }}}} m68k_incpc (6); return 26 * CYCLE_UNIT / 2; } /* AND.W #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0270_4)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (4)); { uae_s16 dst = get_word (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); }}}} m68k_incpc (6); return 22 * CYCLE_UNIT / 2; } /* AND.L #.L,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_02b0_4)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong (2); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (6)); { uae_s32 dst = get_long (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); }}}} m68k_incpc (8); return 34 * CYCLE_UNIT / 2; } /* SUB.B #.B,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0430_4)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte (2); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (4)); { uae_s8 dst = get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (6); return 26 * CYCLE_UNIT / 2; } /* SUB.W #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0470_4)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (4)); { uae_s16 dst = get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}} m68k_incpc (6); return 22 * CYCLE_UNIT / 2; } /* SUB.L #.L,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_04b0_4)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong (2); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (6)); { uae_s32 dst = get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}} m68k_incpc (8); return 34 * CYCLE_UNIT / 2; } /* ADD.B #.B,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0630_4)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte (2); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (4)); { uae_s8 dst = get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (6); return 26 * CYCLE_UNIT / 2; } /* ADD.W #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0670_4)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (4)); { uae_s16 dst = get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}} m68k_incpc (6); return 22 * CYCLE_UNIT / 2; } /* ADD.L #.L,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_06b0_4)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong (2); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (6)); { uae_s32 dst = get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}} m68k_incpc (8); return 34 * CYCLE_UNIT / 2; } /* BTST.B #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0830_4)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (4)); { uae_s8 dst = get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpc (6); return 18 * CYCLE_UNIT / 2; } /* BTST.B #.W,(d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_083b_4)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 src = get_iword (2); { uaecptr tmppc; uaecptr dsta; tmppc = m68k_getpc () + 4; dsta = get_disp_ea_000 (tmppc, get_iword (4)); { uae_s8 dst = get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpc (6); return 18 * CYCLE_UNIT / 2; } /* BCHG.B #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0870_4)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (4)); { uae_s8 dst = get_byte (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); put_byte (dsta, dst); }}}} m68k_incpc (6); return 22 * CYCLE_UNIT / 2; } /* BCHG.B #.W,(d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_087b_4)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 src = get_iword (2); { uaecptr tmppc; uaecptr dsta; tmppc = m68k_getpc () + 4; dsta = get_disp_ea_000 (tmppc, get_iword (4)); { uae_s8 dst = get_byte (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); put_byte (dsta, dst); }}}} m68k_incpc (6); return 22 * CYCLE_UNIT / 2; } /* BCLR.B #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_08b0_4)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (4)); { uae_s8 dst = get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); put_byte (dsta, dst); }}}} m68k_incpc (6); return 22 * CYCLE_UNIT / 2; } /* BCLR.B #.W,(d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_08bb_4)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 src = get_iword (2); { uaecptr tmppc; uaecptr dsta; tmppc = m68k_getpc () + 4; dsta = get_disp_ea_000 (tmppc, get_iword (4)); { uae_s8 dst = get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); put_byte (dsta, dst); }}}} m68k_incpc (6); return 22 * CYCLE_UNIT / 2; } /* BSET.B #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_08f0_4)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (4)); { uae_s8 dst = get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); put_byte (dsta, dst); }}}} m68k_incpc (6); return 22 * CYCLE_UNIT / 2; } /* BSET.B #.W,(d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_08fb_4)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 src = get_iword (2); { uaecptr tmppc; uaecptr dsta; tmppc = m68k_getpc () + 4; dsta = get_disp_ea_000 (tmppc, get_iword (4)); { uae_s8 dst = get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); put_byte (dsta, dst); }}}} m68k_incpc (6); return 22 * CYCLE_UNIT / 2; } /* EOR.B #.B,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0a30_4)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte (2); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (4)); { uae_s8 dst = get_byte (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); }}}} m68k_incpc (6); return 26 * CYCLE_UNIT / 2; } /* EOR.W #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0a70_4)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (4)); { uae_s16 dst = get_word (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); }}}} m68k_incpc (6); return 22 * CYCLE_UNIT / 2; } #endif #ifdef PART_2 /* EOR.L #.L,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0ab0_4)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong (2); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (6)); { uae_s32 dst = get_long (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); }}}} m68k_incpc (8); return 34 * CYCLE_UNIT / 2; } /* CMP.B #.B,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0c30_4)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte (2); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (4)); { uae_s8 dst = get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (6); return 22 * CYCLE_UNIT / 2; } /* CMP.W #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0c70_4)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (4)); { uae_s16 dst = get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (6); return 18 * CYCLE_UNIT / 2; } /* CMP.L #.L,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0cb0_4)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong (2); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (6)); { uae_s32 dst = get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (8); return 26 * CYCLE_UNIT / 2; } /* MOVE.B (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_1030_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s8 src = get_byte (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); m68k_incpc (4); }}}}return 14 * CYCLE_UNIT / 2; } /* MOVE.B (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_103b_4)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_iword (2)); { uae_s8 src = get_byte (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); m68k_incpc (4); }}}}return 14 * CYCLE_UNIT / 2; } /* MOVE.B (d8,An,Xn),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_10b0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s8 src = get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (4); }}}}return 18 * CYCLE_UNIT / 2; } /* MOVE.B (d8,PC,Xn),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_10bb_4)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_iword (2)); { uae_s8 src = get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (4); }}}}return 18 * CYCLE_UNIT / 2; } /* MOVE.B (d8,An,Xn),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_10f0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s8 src = get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (4); }}}}return 18 * CYCLE_UNIT / 2; } /* MOVE.B (d8,PC,Xn),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_10fb_4)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_iword (2)); { uae_s8 src = get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (4); }}}}return 18 * CYCLE_UNIT / 2; } /* MOVE.B (d8,An,Xn),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_1130_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s8 src = get_byte (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (4); }}}}return 18 * CYCLE_UNIT / 2; } /* MOVE.B (d8,PC,Xn),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_113b_4)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_iword (2)); { uae_s8 src = get_byte (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (4); }}}}return 18 * CYCLE_UNIT / 2; } /* MOVE.B (d8,An,Xn),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_1170_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s8 src = get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (6); }}}}return 22 * CYCLE_UNIT / 2; } /* MOVE.B (d8,PC,Xn),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_117b_4)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_iword (2)); { uae_s8 src = get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (6); }}}}return 22 * CYCLE_UNIT / 2; } /* MOVE.B Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_1180_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (2)); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (4); }}}return 14 * CYCLE_UNIT / 2; } /* MOVE.B (An),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_1190_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (2)); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (4); }}}}return 18 * CYCLE_UNIT / 2; } /* MOVE.B (An)+,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_1198_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (2)); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (4); }}}}return 18 * CYCLE_UNIT / 2; } /* MOVE.B -(An),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_11a0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (2)); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (4); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.B (d16,An),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_11a8_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s8 src = get_byte (srca); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (4)); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (6); }}}}return 22 * CYCLE_UNIT / 2; } /* MOVE.B (d8,An,Xn),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_11b0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s8 src = get_byte (srca); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (4)); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (6); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.B (xxx).W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_11b8_4)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s8 src = get_byte (srca); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (4)); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (6); }}}}return 22 * CYCLE_UNIT / 2; } /* MOVE.B (xxx).L,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_11b9_4)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong (2); { uae_s8 src = get_byte (srca); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (6)); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (8); }}}}return 26 * CYCLE_UNIT / 2; } /* MOVE.B (d16,PC),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_11ba_4)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword (2); { uae_s8 src = get_byte (srca); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (4)); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (6); }}}}return 22 * CYCLE_UNIT / 2; } /* MOVE.B (d8,PC,Xn),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_11bb_4)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_iword (2)); { uae_s8 src = get_byte (srca); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (4)); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (6); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.B #.B,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_11bc_4)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = get_ibyte (2); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (4)); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (6); }}}return 22 * CYCLE_UNIT / 2; } /* MOVE.B (d8,An,Xn),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_11f0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s8 src = get_byte (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (6); }}}}return 22 * CYCLE_UNIT / 2; } /* MOVE.B (d8,PC,Xn),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_11fb_4)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_iword (2)); { uae_s8 src = get_byte (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (6); }}}}return 22 * CYCLE_UNIT / 2; } /* MOVE.B (d8,An,Xn),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_13f0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s8 src = get_byte (srca); { uaecptr dsta = get_ilong (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (8); }}}}return 26 * CYCLE_UNIT / 2; } /* MOVE.B (d8,PC,Xn),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_13fb_4)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_iword (2)); { uae_s8 src = get_byte (srca); { uaecptr dsta = get_ilong (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (8); }}}}return 26 * CYCLE_UNIT / 2; } /* MOVE.L (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_2030_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s32 src = get_long (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpc (4); }}}}return 18 * CYCLE_UNIT / 2; } /* MOVE.L (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_203b_4)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_iword (2)); { uae_s32 src = get_long (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpc (4); }}}}return 18 * CYCLE_UNIT / 2; } /* MOVEA.L (d8,An,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_2070_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s32 src = get_long (srca); { m68k_areg (regs, dstreg) = (src); m68k_incpc (4); }}}}return 18 * CYCLE_UNIT / 2; } /* MOVEA.L (d8,PC,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_207b_4)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_iword (2)); { uae_s32 src = get_long (srca); { m68k_areg (regs, dstreg) = (src); m68k_incpc (4); }}}}return 18 * CYCLE_UNIT / 2; } /* MOVE.L (d8,An,Xn),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_20b0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s32 src = get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (4); }}}}return 26 * CYCLE_UNIT / 2; } /* MOVE.L (d8,PC,Xn),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_20bb_4)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_iword (2)); { uae_s32 src = get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (4); }}}}return 26 * CYCLE_UNIT / 2; } /* MOVE.L (d8,An,Xn),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_20f0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s32 src = get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (4); }}}}return 26 * CYCLE_UNIT / 2; } /* MOVE.L (d8,PC,Xn),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_20fb_4)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_iword (2)); { uae_s32 src = get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (4); }}}}return 26 * CYCLE_UNIT / 2; } /* MOVE.L (d8,An,Xn),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_2130_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s32 src = get_long (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (4); }}}}return 26 * CYCLE_UNIT / 2; } /* MOVE.L (d8,PC,Xn),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_213b_4)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_iword (2)); { uae_s32 src = get_long (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (4); }}}}return 26 * CYCLE_UNIT / 2; } #endif #ifdef PART_3 /* MOVE.L (d8,An,Xn),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_2170_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s32 src = get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (6); }}}}return 30 * CYCLE_UNIT / 2; } /* MOVE.L (d8,PC,Xn),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_217b_4)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_iword (2)); { uae_s32 src = get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (6); }}}}return 30 * CYCLE_UNIT / 2; } /* MOVE.L Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_2180_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (2)); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (4); }}}return 18 * CYCLE_UNIT / 2; } /* MOVE.L An,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_2188_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (2)); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (4); }}}return 18 * CYCLE_UNIT / 2; } /* MOVE.L (An),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_2190_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long (srca); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (2)); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (4); }}}}return 26 * CYCLE_UNIT / 2; } /* MOVE.L (An)+,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_2198_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) += 4; { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (2)); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (4); }}}}return 26 * CYCLE_UNIT / 2; } /* MOVE.L -(An),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_21a0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (2)); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (4); }}}}return 28 * CYCLE_UNIT / 2; } /* MOVE.L (d16,An),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_21a8_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s32 src = get_long (srca); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (4)); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (6); }}}}return 30 * CYCLE_UNIT / 2; } /* MOVE.L (d8,An,Xn),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_21b0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s32 src = get_long (srca); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (4)); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (6); }}}}return 32 * CYCLE_UNIT / 2; } /* MOVE.L (xxx).W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_21b8_4)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s32 src = get_long (srca); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (4)); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (6); }}}}return 30 * CYCLE_UNIT / 2; } /* MOVE.L (xxx).L,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_21b9_4)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong (2); { uae_s32 src = get_long (srca); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (6)); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (8); }}}}return 34 * CYCLE_UNIT / 2; } /* MOVE.L (d16,PC),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_21ba_4)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword (2); { uae_s32 src = get_long (srca); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (4)); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (6); }}}}return 30 * CYCLE_UNIT / 2; } /* MOVE.L (d8,PC,Xn),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_21bb_4)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_iword (2)); { uae_s32 src = get_long (srca); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (4)); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (6); }}}}return 32 * CYCLE_UNIT / 2; } /* MOVE.L #.L,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_21bc_4)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_ilong (2); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (6)); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (8); }}}return 26 * CYCLE_UNIT / 2; } /* MOVE.L (d8,An,Xn),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_21f0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s32 src = get_long (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (6); }}}}return 30 * CYCLE_UNIT / 2; } /* MOVE.L (d8,PC,Xn),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_21fb_4)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_iword (2)); { uae_s32 src = get_long (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (6); }}}}return 30 * CYCLE_UNIT / 2; } /* MOVE.L (d8,An,Xn),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_23f0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s32 src = get_long (srca); { uaecptr dsta = get_ilong (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (8); }}}}return 34 * CYCLE_UNIT / 2; } /* MOVE.L (d8,PC,Xn),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_23fb_4)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_iword (2)); { uae_s32 src = get_long (srca); { uaecptr dsta = get_ilong (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (8); }}}}return 34 * CYCLE_UNIT / 2; } /* MOVE.W (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_3030_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s16 src = get_word (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpc (4); }}}}return 14 * CYCLE_UNIT / 2; } /* MOVE.W (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_303b_4)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_iword (2)); { uae_s16 src = get_word (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpc (4); }}}}return 14 * CYCLE_UNIT / 2; } /* MOVEA.W (d8,An,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_3070_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s16 src = get_word (srca); { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpc (4); }}}}return 14 * CYCLE_UNIT / 2; } /* MOVEA.W (d8,PC,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_307b_4)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_iword (2)); { uae_s16 src = get_word (srca); { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpc (4); }}}}return 14 * CYCLE_UNIT / 2; } /* MOVE.W (d8,An,Xn),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_30b0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s16 src = get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (4); }}}}return 18 * CYCLE_UNIT / 2; } /* MOVE.W (d8,PC,Xn),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_30bb_4)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_iword (2)); { uae_s16 src = get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (4); }}}}return 18 * CYCLE_UNIT / 2; } /* MOVE.W (d8,An,Xn),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_30f0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s16 src = get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (4); }}}}return 18 * CYCLE_UNIT / 2; } /* MOVE.W (d8,PC,Xn),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_30fb_4)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_iword (2)); { uae_s16 src = get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (4); }}}}return 18 * CYCLE_UNIT / 2; } /* MOVE.W (d8,An,Xn),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_3130_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s16 src = get_word (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (4); }}}}return 18 * CYCLE_UNIT / 2; } /* MOVE.W (d8,PC,Xn),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_313b_4)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_iword (2)); { uae_s16 src = get_word (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (4); }}}}return 18 * CYCLE_UNIT / 2; } /* MOVE.W (d8,An,Xn),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_3170_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s16 src = get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (6); }}}}return 22 * CYCLE_UNIT / 2; } /* MOVE.W (d8,PC,Xn),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_317b_4)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_iword (2)); { uae_s16 src = get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (6); }}}}return 22 * CYCLE_UNIT / 2; } /* MOVE.W Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_3180_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (2)); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (4); }}}return 14 * CYCLE_UNIT / 2; } /* MOVE.W An,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_3188_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (2)); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (4); }}}return 14 * CYCLE_UNIT / 2; } /* MOVE.W (An),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_3190_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word (srca); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (2)); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (4); }}}}return 18 * CYCLE_UNIT / 2; } /* MOVE.W (An)+,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_3198_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) += 2; { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (2)); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (4); }}}}return 18 * CYCLE_UNIT / 2; } /* MOVE.W -(An),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_31a0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (2)); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (4); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.W (d16,An),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_31a8_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (4)); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (6); }}}}return 22 * CYCLE_UNIT / 2; } /* MOVE.W (d8,An,Xn),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_31b0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s16 src = get_word (srca); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (4)); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (6); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.W (xxx).W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_31b8_4)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (4)); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (6); }}}}return 22 * CYCLE_UNIT / 2; } /* MOVE.W (xxx).L,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_31b9_4)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong (2); { uae_s16 src = get_word (srca); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (6)); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (8); }}}}return 26 * CYCLE_UNIT / 2; } /* MOVE.W (d16,PC),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_31ba_4)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword (2); { uae_s16 src = get_word (srca); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (4)); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (6); }}}}return 22 * CYCLE_UNIT / 2; } /* MOVE.W (d8,PC,Xn),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_31bb_4)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_iword (2)); { uae_s16 src = get_word (srca); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (4)); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (6); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.W #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_31bc_4)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_iword (2); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (4)); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (6); }}}return 18 * CYCLE_UNIT / 2; } /* MOVE.W (d8,An,Xn),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_31f0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s16 src = get_word (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (6); }}}}return 22 * CYCLE_UNIT / 2; } /* MOVE.W (d8,PC,Xn),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_31fb_4)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_iword (2)); { uae_s16 src = get_word (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_iword (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (6); }}}}return 22 * CYCLE_UNIT / 2; } /* MOVE.W (d8,An,Xn),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_33f0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s16 src = get_word (srca); { uaecptr dsta = get_ilong (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (8); }}}}return 26 * CYCLE_UNIT / 2; } /* MOVE.W (d8,PC,Xn),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_33fb_4)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_iword (2)); { uae_s16 src = get_word (srca); { uaecptr dsta = get_ilong (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (8); }}}}return 26 * CYCLE_UNIT / 2; } /* NEGX.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4030_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s8 src = get_byte (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); put_byte (srca, newv); }}}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* NEGX.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4070_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s16 src = get_word (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); put_word (srca, newv); }}}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* NEGX.L (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_40b0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s32 src = get_long (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); put_long (srca, newv); }}}}} m68k_incpc (4); return 26 * CYCLE_UNIT / 2; } /* MVSR2.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_40f0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel2014; } {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); MakeSR (); put_word (srca, regs.sr); }}} m68k_incpc (4); endlabel2014: ; return 14 * CYCLE_UNIT / 2; } /* CHK.W (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_41b0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); m68k_incpc (4); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel2015; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel2015; } }}}}endlabel2015: ; return 14 * CYCLE_UNIT / 2; } /* CHK.W (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_41bb_4)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_iword (2)); { uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); m68k_incpc (4); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel2016; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel2016; } }}}}endlabel2016: ; return 14 * CYCLE_UNIT / 2; } /* LEA.L (d8,An,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_41f0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { m68k_areg (regs, dstreg) = (srca); }}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* LEA.L (d8,PC,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_41fb_4)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_iword (2)); { m68k_areg (regs, dstreg) = (srca); }}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* CLR.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4230_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(0)) == 0); SET_NFLG (((uae_s8)(0)) < 0); put_byte (srca, 0); }} m68k_incpc (4); return 14 * CYCLE_UNIT / 2; } /* CLR.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4270_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(0)) == 0); SET_NFLG (((uae_s16)(0)) < 0); put_word (srca, 0); }} m68k_incpc (4); return 14 * CYCLE_UNIT / 2; } /* CLR.L (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_42b0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(0)) == 0); SET_NFLG (((uae_s32)(0)) < 0); put_long (srca, 0); }} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } #endif #ifdef PART_4 /* MVSR2.B (d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_42f0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); MakeSR (); put_word (srca, regs.sr & 0xff); }} m68k_incpc (4); return 14 * CYCLE_UNIT / 2; } #endif /* NEG.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4430_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s8 src = get_byte (srca); {{uae_u32 dst = ((uae_s8)(0)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(dst)) < 0; SET_ZFLG (((uae_s8)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (srca, dst); }}}}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* NEG.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4470_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s16 src = get_word (srca); {{uae_u32 dst = ((uae_s16)(0)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(dst)) < 0; SET_ZFLG (((uae_s16)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (srca, dst); }}}}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* NEG.L (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_44b0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s32 src = get_long (srca); {{uae_u32 dst = ((uae_s32)(0)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(dst)) < 0; SET_ZFLG (((uae_s32)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (srca, dst); }}}}}} m68k_incpc (4); return 26 * CYCLE_UNIT / 2; } /* MV2SR.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_44f0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s16 src = get_word (srca); MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); }}} m68k_incpc (4); return 14 * CYCLE_UNIT / 2; } /* MV2SR.B (d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_44fb_4)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_iword (2)); { uae_s16 src = get_word (srca); MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); }}} m68k_incpc (4); return 14 * CYCLE_UNIT / 2; } /* NOT.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4630_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s8 src = get_byte (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(dst)) == 0); SET_NFLG (((uae_s8)(dst)) < 0); put_byte (srca, dst); }}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* NOT.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4670_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s16 src = get_word (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(dst)) == 0); SET_NFLG (((uae_s16)(dst)) < 0); put_word (srca, dst); }}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* NOT.L (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_46b0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s32 src = get_long (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); put_long (srca, dst); }}}} m68k_incpc (4); return 26 * CYCLE_UNIT / 2; } /* MV2SR.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_46f0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel2031; } {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s16 src = get_word (srca); regs.sr = src; MakeFromSR (); }}}} m68k_incpc (4); endlabel2031: ; return 14 * CYCLE_UNIT / 2; } /* MV2SR.W (d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_46fb_4)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel2032; } {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_iword (2)); { uae_s16 src = get_word (srca); regs.sr = src; MakeFromSR (); }}}} m68k_incpc (4); endlabel2032: ; return 14 * CYCLE_UNIT / 2; } /* NBCD.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4830_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s8 src = get_byte (srca); { uae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = - (src & 0xF0); uae_u16 newv; int cflg; if (newv_lo > 9) { newv_lo -= 6; } newv = newv_hi + newv_lo; cflg = (newv & 0x1F0) > 0x90; if (cflg) newv -= 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); put_byte (srca, newv); }}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* PEA.L (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4870_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uaecptr dsta; dsta = m68k_areg (regs, 7) - 4; m68k_areg (regs, 7) = dsta; put_long (dsta, srca); }}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* PEA.L (d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_487b_4)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_iword (2)); { uaecptr dsta; dsta = m68k_areg (regs, 7) - 4; m68k_areg (regs, 7) = dsta; put_long (dsta, srca); }}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* MVMLE.W #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_48b0_4)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_iword (2); { uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (4)); { uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; while (dmask) { put_word (srca, m68k_dreg (regs, movem_index1[dmask])); srca += 2; dmask = movem_next[dmask]; } while (amask) { put_word (srca, m68k_areg (regs, movem_index1[amask])); srca += 2; amask = movem_next[amask]; } }}} m68k_incpc (6); return 14 * CYCLE_UNIT / 2; } /* MVMLE.L #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_48f0_4)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_iword (2); { uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (4)); { uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; while (dmask) { put_long (srca, m68k_dreg (regs, movem_index1[dmask])); srca += 4; dmask = movem_next[dmask]; } while (amask) { put_long (srca, m68k_areg (regs, movem_index1[amask])); srca += 4; amask = movem_next[amask]; } }}} m68k_incpc (6); return 14 * CYCLE_UNIT / 2; } /* TST.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4a30_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s8 src = get_byte (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }}} m68k_incpc (4); return 14 * CYCLE_UNIT / 2; } /* TST.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4a70_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s16 src = get_word (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }}} m68k_incpc (4); return 14 * CYCLE_UNIT / 2; } /* TST.L (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4ab0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s32 src = get_long (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* TAS.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4ac0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); src |= 0x80; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((src) & 0xff); }} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* TAS.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4ad0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); src |= 0x80; put_byte (srca, src); }}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* TAS.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4ad8_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); src |= 0x80; put_byte (srca, src); }}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* TAS.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_4ae0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) = srca; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); src |= 0x80; put_byte (srca, src); }}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* TAS.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4ae8_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); { uae_s8 src = get_byte (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); src |= 0x80; put_byte (srca, src); }}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* TAS.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4af0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s8 src = get_byte (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); src |= 0x80; put_byte (srca, src); }}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* TAS.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4af8_4)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); { uae_s8 src = get_byte (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); src |= 0x80; put_byte (srca, src); }}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* TAS.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4af9_4)(uae_u32 opcode) { {{ uaecptr srca = get_ilong (2); { uae_s8 src = get_byte (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); src |= 0x80; put_byte (srca, src); }}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* MVMEL.W #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4cb0_4)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_iword (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (4)); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = (uae_s32)(uae_s16)get_word (srca); srca += 2; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = (uae_s32)(uae_s16)get_word (srca); srca += 2; amask = movem_next[amask]; } }}} m68k_incpc (6); return 14 * CYCLE_UNIT / 2; } /* MVMEL.W #.W,(d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4cbb_4)(uae_u32 opcode) { uae_u32 dstreg = 3; { uae_u16 mask = get_iword (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 4; srca = get_disp_ea_000 (tmppc, get_iword (4)); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = (uae_s32)(uae_s16)get_word (srca); srca += 2; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = (uae_s32)(uae_s16)get_word (srca); srca += 2; amask = movem_next[amask]; } }}} m68k_incpc (6); return 14 * CYCLE_UNIT / 2; } /* MVMEL.L #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4cf0_4)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_iword (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (4)); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = get_long (srca); srca += 4; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = get_long (srca); srca += 4; amask = movem_next[amask]; } }}} m68k_incpc (6); return 14 * CYCLE_UNIT / 2; } /* MVMEL.L #.W,(d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4cfb_4)(uae_u32 opcode) { uae_u32 dstreg = 3; { uae_u16 mask = get_iword (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 4; srca = get_disp_ea_000 (tmppc, get_iword (4)); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = get_long (srca); srca += 4; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = get_long (srca); srca += 4; amask = movem_next[amask]; } }}} m68k_incpc (6); return 14 * CYCLE_UNIT / 2; } /* JSR.L (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4eb0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uaecptr oldpc = m68k_getpc () + 4; if (srca & 1) { exception3i (opcode, srca); goto endlabel2053; } m68k_setpc (srca); m68k_areg (regs, 7) -= 4; put_long (m68k_areg (regs, 7), oldpc); }}}endlabel2053: ; return 8 * CYCLE_UNIT / 2; } /* JSR.L (d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4ebb_4)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_iword (2)); { uaecptr oldpc = m68k_getpc () + 4; if (srca & 1) { exception3i (opcode, srca); goto endlabel2054; } m68k_setpc (srca); m68k_areg (regs, 7) -= 4; put_long (m68k_areg (regs, 7), oldpc); }}}endlabel2054: ; return 8 * CYCLE_UNIT / 2; } /* JMP.L (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4ef0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); if (srca & 1) { exception3i (opcode, srca); goto endlabel2055; } m68k_setpc (srca); }}endlabel2055: ; return 8 * CYCLE_UNIT / 2; } /* JMP.L (d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4efb_4)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_iword (2)); if (srca & 1) { exception3i (opcode, srca); goto endlabel2056; } m68k_setpc (srca); }}endlabel2056: ; return 8 * CYCLE_UNIT / 2; } /* ADDQ.B #,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_5030_4)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (2)); { uae_s8 dst = get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* ADDQ.W #,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_5070_4)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (2)); { uae_s16 dst = get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } #endif #ifdef PART_5 /* ADDQ.L #,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_50b0_4)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (2)); { uae_s32 dst = get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}} m68k_incpc (4); return 26 * CYCLE_UNIT / 2; } /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_50f0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); {{ int val = cctrue (0) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (4); return 14 * CYCLE_UNIT / 2; } /* SUBQ.B #,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_5130_4)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (2)); { uae_s8 dst = get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* SUBQ.W #,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_5170_4)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (2)); { uae_s16 dst = get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* SUBQ.L #,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_51b0_4)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (2)); { uae_s32 dst = get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}} m68k_incpc (4); return 26 * CYCLE_UNIT / 2; } /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_51f0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); {{ int val = cctrue (1) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (4); return 14 * CYCLE_UNIT / 2; } /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_52f0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); {{ int val = cctrue (2) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (4); return 14 * CYCLE_UNIT / 2; } /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_53f0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); {{ int val = cctrue (3) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (4); return 14 * CYCLE_UNIT / 2; } /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_54f0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); {{ int val = cctrue (4) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (4); return 14 * CYCLE_UNIT / 2; } /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_55f0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); {{ int val = cctrue (5) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (4); return 14 * CYCLE_UNIT / 2; } /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_56f0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); {{ int val = cctrue (6) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (4); return 14 * CYCLE_UNIT / 2; } /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_57f0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); {{ int val = cctrue (7) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (4); return 14 * CYCLE_UNIT / 2; } /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_58f0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); {{ int val = cctrue (8) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (4); return 14 * CYCLE_UNIT / 2; } /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_59f0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); {{ int val = cctrue (9) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (4); return 14 * CYCLE_UNIT / 2; } /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_5af0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); {{ int val = cctrue (10) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (4); return 14 * CYCLE_UNIT / 2; } /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_5bf0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); {{ int val = cctrue (11) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (4); return 14 * CYCLE_UNIT / 2; } /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_5cf0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); {{ int val = cctrue (12) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (4); return 14 * CYCLE_UNIT / 2; } /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_5df0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); {{ int val = cctrue (13) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (4); return 14 * CYCLE_UNIT / 2; } /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_5ef0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); {{ int val = cctrue (14) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (4); return 14 * CYCLE_UNIT / 2; } /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_5ff0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); {{ int val = cctrue (15) ? 0xff : 0; put_byte (srca, val); }}}} m68k_incpc (4); return 14 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_60ff_4)(uae_u32 opcode) { { if (cctrue (0)) { exception3i (opcode, m68k_getpc () + 1); goto endlabel2079; } m68k_incpc (2); goto endlabel2079; { uae_s32 src = get_ilong (0); if (!cctrue (0)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel2079; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); }}endlabel2079: ; return 12 * CYCLE_UNIT / 2; } /* BSR.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_61ff_4)(uae_u32 opcode) { { uae_s32 s; uae_u32 src = 0xffffffff; s = (uae_s32)src + 2; if (src & 1) { exception3 (opcode, m68k_getpc () + s, 0, 1, m68k_getpc () + s); goto endlabel2080; } m68k_do_bsr (m68k_getpc () + 2, s); }endlabel2080: ; return 4 * CYCLE_UNIT / 2; } #endif #ifdef PART_6 /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_62ff_4)(uae_u32 opcode) { { if (cctrue (2)) { exception3i (opcode, m68k_getpc () + 1); goto endlabel2081; } m68k_incpc (2); goto endlabel2081; { uae_s32 src = get_ilong (0); if (!cctrue (2)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel2081; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); }}endlabel2081: ; return 12 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_63ff_4)(uae_u32 opcode) { { if (cctrue (3)) { exception3i (opcode, m68k_getpc () + 1); goto endlabel2082; } m68k_incpc (2); goto endlabel2082; { uae_s32 src = get_ilong (0); if (!cctrue (3)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel2082; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); }}endlabel2082: ; return 12 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_64ff_4)(uae_u32 opcode) { { if (cctrue (4)) { exception3i (opcode, m68k_getpc () + 1); goto endlabel2083; } m68k_incpc (2); goto endlabel2083; { uae_s32 src = get_ilong (0); if (!cctrue (4)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel2083; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); }}endlabel2083: ; return 12 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_65ff_4)(uae_u32 opcode) { { if (cctrue (5)) { exception3i (opcode, m68k_getpc () + 1); goto endlabel2084; } m68k_incpc (2); goto endlabel2084; { uae_s32 src = get_ilong (0); if (!cctrue (5)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel2084; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); }}endlabel2084: ; return 12 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_66ff_4)(uae_u32 opcode) { { if (cctrue (6)) { exception3i (opcode, m68k_getpc () + 1); goto endlabel2085; } m68k_incpc (2); goto endlabel2085; { uae_s32 src = get_ilong (0); if (!cctrue (6)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel2085; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); }}endlabel2085: ; return 12 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_67ff_4)(uae_u32 opcode) { { if (cctrue (7)) { exception3i (opcode, m68k_getpc () + 1); goto endlabel2086; } m68k_incpc (2); goto endlabel2086; { uae_s32 src = get_ilong (0); if (!cctrue (7)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel2086; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); }}endlabel2086: ; return 12 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_68ff_4)(uae_u32 opcode) { { if (cctrue (8)) { exception3i (opcode, m68k_getpc () + 1); goto endlabel2087; } m68k_incpc (2); goto endlabel2087; { uae_s32 src = get_ilong (0); if (!cctrue (8)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel2087; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); }}endlabel2087: ; return 12 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_69ff_4)(uae_u32 opcode) { { if (cctrue (9)) { exception3i (opcode, m68k_getpc () + 1); goto endlabel2088; } m68k_incpc (2); goto endlabel2088; { uae_s32 src = get_ilong (0); if (!cctrue (9)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel2088; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); }}endlabel2088: ; return 12 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_6aff_4)(uae_u32 opcode) { { if (cctrue (10)) { exception3i (opcode, m68k_getpc () + 1); goto endlabel2089; } m68k_incpc (2); goto endlabel2089; { uae_s32 src = get_ilong (0); if (!cctrue (10)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel2089; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); }}endlabel2089: ; return 12 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_6bff_4)(uae_u32 opcode) { { if (cctrue (11)) { exception3i (opcode, m68k_getpc () + 1); goto endlabel2090; } m68k_incpc (2); goto endlabel2090; { uae_s32 src = get_ilong (0); if (!cctrue (11)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel2090; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); }}endlabel2090: ; return 12 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_6cff_4)(uae_u32 opcode) { { if (cctrue (12)) { exception3i (opcode, m68k_getpc () + 1); goto endlabel2091; } m68k_incpc (2); goto endlabel2091; { uae_s32 src = get_ilong (0); if (!cctrue (12)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel2091; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); }}endlabel2091: ; return 12 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_6dff_4)(uae_u32 opcode) { { if (cctrue (13)) { exception3i (opcode, m68k_getpc () + 1); goto endlabel2092; } m68k_incpc (2); goto endlabel2092; { uae_s32 src = get_ilong (0); if (!cctrue (13)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel2092; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); }}endlabel2092: ; return 12 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_6eff_4)(uae_u32 opcode) { { if (cctrue (14)) { exception3i (opcode, m68k_getpc () + 1); goto endlabel2093; } m68k_incpc (2); goto endlabel2093; { uae_s32 src = get_ilong (0); if (!cctrue (14)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel2093; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); }}endlabel2093: ; return 12 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_6fff_4)(uae_u32 opcode) { { if (cctrue (15)) { exception3i (opcode, m68k_getpc () + 1); goto endlabel2094; } m68k_incpc (2); goto endlabel2094; { uae_s32 src = get_ilong (0); if (!cctrue (15)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel2094; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); }}endlabel2094: ; return 12 * CYCLE_UNIT / 2; } /* OR.B (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8030_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpc (4); return 14 * CYCLE_UNIT / 2; } /* OR.B (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_803b_4)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_iword (2)); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpc (4); return 14 * CYCLE_UNIT / 2; } /* OR.W (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8070_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} m68k_incpc (4); return 14 * CYCLE_UNIT / 2; } /* OR.W (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_807b_4)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_iword (2)); { uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} m68k_incpc (4); return 14 * CYCLE_UNIT / 2; } /* OR.L (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80b0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* OR.L (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80bb_4)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_iword (2)); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* DIVU.W (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80f0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s16 src = get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); if (dst < 0) SET_NFLG (1); m68k_incpc (4); Exception (5); goto endlabel2101; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (4); } }}}}endlabel2101: ; return 120 * CYCLE_UNIT / 2; } /* DIVU.W (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80fb_4)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_iword (2)); { uae_s16 src = get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); if (dst < 0) SET_NFLG (1); m68k_incpc (4); Exception (5); goto endlabel2102; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (4); } }}}}endlabel2102: ; return 120 * CYCLE_UNIT / 2; } /* OR.B Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_8130_4)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (2)); { uae_s8 dst = get_byte (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); }}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* OR.W Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_8170_4)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (2)); { uae_s16 dst = get_word (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); }}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* OR.L Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_81b0_4)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (2)); { uae_s32 dst = get_long (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); }}}} m68k_incpc (4); return 26 * CYCLE_UNIT / 2; } /* DIVS.W (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_81f0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s16 src = get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); SET_ZFLG (1); m68k_incpc (4); Exception (5); goto endlabel2106; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (4); } }}}}endlabel2106: ; return 152 * CYCLE_UNIT / 2; } /* DIVS.W (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_81fb_4)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_iword (2)); { uae_s16 src = get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); SET_ZFLG (1); m68k_incpc (4); Exception (5); goto endlabel2107; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (4); } }}}}endlabel2107: ; return 152 * CYCLE_UNIT / 2; } /* SUB.B (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9030_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpc (4); return 14 * CYCLE_UNIT / 2; } /* SUB.B (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_903b_4)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_iword (2)); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpc (4); return 14 * CYCLE_UNIT / 2; } /* SUB.W (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9070_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} m68k_incpc (4); return 14 * CYCLE_UNIT / 2; } /* SUB.W (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_907b_4)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_iword (2)); { uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} m68k_incpc (4); return 14 * CYCLE_UNIT / 2; } /* SUB.L (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_90b0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* SUB.L (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_90bb_4)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_iword (2)); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* SUBA.W (d8,An,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_90f0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s16 src = get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpc (4); return 14 * CYCLE_UNIT / 2; } /* SUBA.W (d8,PC,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_90fb_4)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_iword (2)); { uae_s16 src = get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpc (4); return 14 * CYCLE_UNIT / 2; } /* SUB.B Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_9130_4)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (2)); { uae_s8 dst = get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* SUB.W Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_9170_4)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (2)); { uae_s16 dst = get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* SUB.L Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_91b0_4)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (2)); { uae_s32 dst = get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}} m68k_incpc (4); return 26 * CYCLE_UNIT / 2; } /* SUBA.L (d8,An,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_91f0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* SUBA.L (d8,PC,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_91fb_4)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_iword (2)); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* CMP.B (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b030_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (4); return 14 * CYCLE_UNIT / 2; } /* CMP.B (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b03b_4)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_iword (2)); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (4); return 14 * CYCLE_UNIT / 2; } /* CMP.W (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b070_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (4); return 14 * CYCLE_UNIT / 2; } /* CMP.W (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b07b_4)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_iword (2)); { uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (4); return 14 * CYCLE_UNIT / 2; } #endif #ifdef PART_7 /* CMP.L (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b0b0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* CMP.L (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b0bb_4)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_iword (2)); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* CMPA.W (d8,An,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_b0f0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s16 src = get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (4); return 14 * CYCLE_UNIT / 2; } /* CMPA.W (d8,PC,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_b0fb_4)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_iword (2)); { uae_s16 src = get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (4); return 14 * CYCLE_UNIT / 2; } /* EOR.B Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_b130_4)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (2)); { uae_s8 dst = get_byte (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); }}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* EOR.W Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_b170_4)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (2)); { uae_s16 dst = get_word (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); }}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* EOR.L Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_b1b0_4)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (2)); { uae_s32 dst = get_long (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); }}}} m68k_incpc (4); return 26 * CYCLE_UNIT / 2; } /* CMPA.L (d8,An,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_b1f0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* CMPA.L (d8,PC,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_b1fb_4)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_iword (2)); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* AND.B (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c030_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpc (4); return 14 * CYCLE_UNIT / 2; } /* AND.B (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c03b_4)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_iword (2)); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpc (4); return 14 * CYCLE_UNIT / 2; } /* AND.W (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c070_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} m68k_incpc (4); return 14 * CYCLE_UNIT / 2; } /* AND.W (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c07b_4)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_iword (2)); { uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} m68k_incpc (4); return 14 * CYCLE_UNIT / 2; } /* AND.L (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0b0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* AND.L (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0bb_4)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_iword (2)); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* MULU.W (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0f0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); m68k_incpc (4); }}}}}return 68 * CYCLE_UNIT / 2; } /* MULU.W (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0fb_4)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_iword (2)); { uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); m68k_incpc (4); }}}}}return 68 * CYCLE_UNIT / 2; } /* AND.B Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_c130_4)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (2)); { uae_s8 dst = get_byte (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); }}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* AND.W Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_c170_4)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (2)); { uae_s16 dst = get_word (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); }}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* AND.L Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_c1b0_4)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (2)); { uae_s32 dst = get_long (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); }}}} m68k_incpc (4); return 26 * CYCLE_UNIT / 2; } /* MULS.W (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c1f0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); }}}}} m68k_incpc (4); return 68 * CYCLE_UNIT / 2; } /* MULS.W (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c1fb_4)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_iword (2)); { uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); }}}}} m68k_incpc (4); return 68 * CYCLE_UNIT / 2; } /* ADD.B (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d030_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpc (4); return 14 * CYCLE_UNIT / 2; } /* ADD.B (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d03b_4)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_iword (2)); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpc (4); return 14 * CYCLE_UNIT / 2; } /* ADD.W (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d070_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} m68k_incpc (4); return 14 * CYCLE_UNIT / 2; } /* ADD.W (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d07b_4)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_iword (2)); { uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} m68k_incpc (4); return 14 * CYCLE_UNIT / 2; } /* ADD.L (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d0b0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* ADD.L (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d0bb_4)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_iword (2)); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* ADDA.W (d8,An,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_d0f0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s16 src = get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpc (4); return 14 * CYCLE_UNIT / 2; } /* ADDA.W (d8,PC,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_d0fb_4)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_iword (2)); { uae_s16 src = get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpc (4); return 14 * CYCLE_UNIT / 2; } /* ADD.B Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_d130_4)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (2)); { uae_s8 dst = get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* ADD.W Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_d170_4)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (2)); { uae_s16 dst = get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* ADD.L Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_d1b0_4)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_iword (2)); { uae_s32 dst = get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}} m68k_incpc (4); return 26 * CYCLE_UNIT / 2; } /* ADDA.L (d8,An,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_d1f0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* ADDA.L (d8,PC,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_d1fb_4)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_iword (2)); { uae_s32 src = get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } #endif #ifdef PART_8 /* ASRW.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_e0f0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; dataa = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s16 data = get_word (dataa); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 cflg = val & 1; val = (val >> 1) | sign; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (cflg); COPY_CARRY (); put_word (dataa, val); }}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* ASLW.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_e1f0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; dataa = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s16 data = get_word (dataa); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 sign2; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); sign2 = 0x8000 & val; SET_CFLG (sign != 0); COPY_CARRY (); SET_VFLG (GET_VFLG () | (sign2 != sign)); put_word (dataa, val); }}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* LSRW.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_e2f0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; dataa = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s16 data = get_word (dataa); { uae_u32 val = (uae_u16)data; uae_u32 carry = val & 1; val >>= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); put_word (dataa, val); }}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* LSLW.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_e3f0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; dataa = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s16 data = get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); put_word (dataa, val); }}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* ROXRW.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_e4f0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; dataa = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s16 data = get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (GET_XFLG ()) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); put_word (dataa, val); }}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* ROXLW.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_e5f0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; dataa = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s16 data = get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (GET_XFLG ()) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); put_word (dataa, val); }}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* RORW.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_e6f0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; dataa = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s16 data = get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (carry) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); put_word (dataa, val); }}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* ROLW.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_e7f0_4)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; dataa = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); { uae_s16 data = get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (carry) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); put_word (dataa, val); }}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } #endif #if !defined(PART_1) && !defined(PART_2) && !defined(PART_3) && !defined(PART_4) && !defined(PART_5) && !defined(PART_6) && !defined(PART_7) && !defined(PART_8) #define PART_1 1 #define PART_2 1 #define PART_3 1 #define PART_4 1 #define PART_5 1 #define PART_6 1 #define PART_7 1 #define PART_8 1 #endif #ifdef PART_1 #endif #ifdef PART_2 #endif #ifdef PART_3 /* MVSR2.W Dn */ uae_u32 REGPARAM2 CPUFUNC(op_40c0_5)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ MakeSR (); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | ((regs.sr) & 0xffff); }} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* MVSR2.W (An) */ uae_u32 REGPARAM2 CPUFUNC(op_40d0_5)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); MakeSR (); put_word (srca, regs.sr); }} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* MVSR2.W (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_40d8_5)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += 2; MakeSR (); put_word (srca, regs.sr); }} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* MVSR2.W -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_40e0_5)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; m68k_areg (regs, srcreg) = srca; MakeSR (); put_word (srca, regs.sr); }} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* MVSR2.W (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_40e8_5)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword (2); MakeSR (); put_word (srca, regs.sr); }} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* MVSR2.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_40f0_5)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_iword (2)); MakeSR (); put_word (srca, regs.sr); }} m68k_incpc (4); return 14 * CYCLE_UNIT / 2; } /* MVSR2.W (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_40f8_5)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword (2); MakeSR (); put_word (srca, regs.sr); }} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* MVSR2.W (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_40f9_5)(uae_u32 opcode) { {{ uaecptr srca = get_ilong (2); MakeSR (); put_word (srca, regs.sr); }} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } #endif #ifdef PART_4 /* RTE.L */ uae_u32 REGPARAM2 CPUFUNC(op_4e73_5)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel2176; } {{ uaecptr sra = m68k_areg (regs, 7); { uae_s16 sr = get_word (sra); m68k_areg (regs, 7) += 2; { uaecptr pca = m68k_areg (regs, 7); { uae_s32 pc = get_long (pca); m68k_areg (regs, 7) += 4; regs.sr = sr; m68k_setpc (pc); MakeFromSR (); }}}}}}endlabel2176: ; return 16 * CYCLE_UNIT / 2; } #endif #ifdef PART_5 #endif #ifdef PART_6 #endif #ifdef PART_7 #endif #ifdef PART_8 #endif fs-uae-2.2.3+dfsg/gensrc/cputbl.h0000644000175000017500000324054412162366654017013 0ustar glaubitzglaubitzextern cpuop_func op_0000_0_nf; extern cpuop_func op_0000_0_ff; extern cpuop_func op_0010_0_nf; extern cpuop_func op_0010_0_ff; extern cpuop_func op_0018_0_nf; extern cpuop_func op_0018_0_ff; extern cpuop_func op_0020_0_nf; extern cpuop_func op_0020_0_ff; extern cpuop_func op_0028_0_nf; extern cpuop_func op_0028_0_ff; extern cpuop_func op_0030_0_nf; extern cpuop_func op_0030_0_ff; extern cpuop_func op_0038_0_nf; extern cpuop_func op_0038_0_ff; extern cpuop_func op_0039_0_nf; extern cpuop_func op_0039_0_ff; extern cpuop_func op_003c_0_nf; extern cpuop_func op_003c_0_ff; extern cpuop_func op_0040_0_nf; extern cpuop_func op_0040_0_ff; extern cpuop_func op_0050_0_nf; extern cpuop_func op_0050_0_ff; extern cpuop_func op_0058_0_nf; extern cpuop_func op_0058_0_ff; extern cpuop_func op_0060_0_nf; extern cpuop_func op_0060_0_ff; extern cpuop_func op_0068_0_nf; extern cpuop_func op_0068_0_ff; extern cpuop_func op_0070_0_nf; extern cpuop_func op_0070_0_ff; extern cpuop_func op_0078_0_nf; extern cpuop_func op_0078_0_ff; extern cpuop_func op_0079_0_nf; extern cpuop_func op_0079_0_ff; extern cpuop_func op_007c_0_nf; extern cpuop_func op_007c_0_ff; extern cpuop_func op_0080_0_nf; extern cpuop_func op_0080_0_ff; extern cpuop_func op_0090_0_nf; extern cpuop_func op_0090_0_ff; extern cpuop_func op_0098_0_nf; extern cpuop_func op_0098_0_ff; extern cpuop_func op_00a0_0_nf; extern cpuop_func op_00a0_0_ff; extern cpuop_func op_00a8_0_nf; extern cpuop_func op_00a8_0_ff; extern cpuop_func op_00b0_0_nf; extern cpuop_func op_00b0_0_ff; extern cpuop_func op_00b8_0_nf; extern cpuop_func op_00b8_0_ff; extern cpuop_func op_00b9_0_nf; extern cpuop_func op_00b9_0_ff; extern cpuop_func op_00d0_0_nf; extern cpuop_func op_00d0_0_ff; extern cpuop_func op_00e8_0_nf; extern cpuop_func op_00e8_0_ff; extern cpuop_func op_00f0_0_nf; extern cpuop_func op_00f0_0_ff; extern cpuop_func op_00f8_0_nf; extern cpuop_func op_00f8_0_ff; extern cpuop_func op_00f9_0_nf; extern cpuop_func op_00f9_0_ff; extern cpuop_func op_00fa_0_nf; extern cpuop_func op_00fa_0_ff; extern cpuop_func op_00fb_0_nf; extern cpuop_func op_00fb_0_ff; extern cpuop_func op_0100_0_nf; extern cpuop_func op_0100_0_ff; extern cpuop_func op_0108_0_nf; extern cpuop_func op_0108_0_ff; extern cpuop_func op_0110_0_nf; extern cpuop_func op_0110_0_ff; extern cpuop_func op_0118_0_nf; extern cpuop_func op_0118_0_ff; extern cpuop_func op_0120_0_nf; extern cpuop_func op_0120_0_ff; extern cpuop_func op_0128_0_nf; extern cpuop_func op_0128_0_ff; extern cpuop_func op_0130_0_nf; extern cpuop_func op_0130_0_ff; extern cpuop_func op_0138_0_nf; extern cpuop_func op_0138_0_ff; extern cpuop_func op_0139_0_nf; extern cpuop_func op_0139_0_ff; extern cpuop_func op_013a_0_nf; extern cpuop_func op_013a_0_ff; extern cpuop_func op_013b_0_nf; extern cpuop_func op_013b_0_ff; extern cpuop_func op_013c_0_nf; extern cpuop_func op_013c_0_ff; extern cpuop_func op_0140_0_nf; extern cpuop_func op_0140_0_ff; extern cpuop_func op_0148_0_nf; extern cpuop_func op_0148_0_ff; extern cpuop_func op_0150_0_nf; extern cpuop_func op_0150_0_ff; extern cpuop_func op_0158_0_nf; extern cpuop_func op_0158_0_ff; extern cpuop_func op_0160_0_nf; extern cpuop_func op_0160_0_ff; extern cpuop_func op_0168_0_nf; extern cpuop_func op_0168_0_ff; extern cpuop_func op_0170_0_nf; extern cpuop_func op_0170_0_ff; extern cpuop_func op_0178_0_nf; extern cpuop_func op_0178_0_ff; extern cpuop_func op_0179_0_nf; extern cpuop_func op_0179_0_ff; extern cpuop_func op_017a_0_nf; extern cpuop_func op_017a_0_ff; extern cpuop_func op_017b_0_nf; extern cpuop_func op_017b_0_ff; extern cpuop_func op_0180_0_nf; extern cpuop_func op_0180_0_ff; extern cpuop_func op_0188_0_nf; extern cpuop_func op_0188_0_ff; extern cpuop_func op_0190_0_nf; extern cpuop_func op_0190_0_ff; extern cpuop_func op_0198_0_nf; extern cpuop_func op_0198_0_ff; extern cpuop_func op_01a0_0_nf; extern cpuop_func op_01a0_0_ff; extern cpuop_func op_01a8_0_nf; extern cpuop_func op_01a8_0_ff; extern cpuop_func op_01b0_0_nf; extern cpuop_func op_01b0_0_ff; extern cpuop_func op_01b8_0_nf; extern cpuop_func op_01b8_0_ff; extern cpuop_func op_01b9_0_nf; extern cpuop_func op_01b9_0_ff; extern cpuop_func op_01ba_0_nf; extern cpuop_func op_01ba_0_ff; extern cpuop_func op_01bb_0_nf; extern cpuop_func op_01bb_0_ff; extern cpuop_func op_01c0_0_nf; extern cpuop_func op_01c0_0_ff; extern cpuop_func op_01c8_0_nf; extern cpuop_func op_01c8_0_ff; extern cpuop_func op_01d0_0_nf; extern cpuop_func op_01d0_0_ff; extern cpuop_func op_01d8_0_nf; extern cpuop_func op_01d8_0_ff; extern cpuop_func op_01e0_0_nf; extern cpuop_func op_01e0_0_ff; extern cpuop_func op_01e8_0_nf; extern cpuop_func op_01e8_0_ff; extern cpuop_func op_01f0_0_nf; extern cpuop_func op_01f0_0_ff; extern cpuop_func op_01f8_0_nf; extern cpuop_func op_01f8_0_ff; extern cpuop_func op_01f9_0_nf; extern cpuop_func op_01f9_0_ff; extern cpuop_func op_01fa_0_nf; extern cpuop_func op_01fa_0_ff; extern cpuop_func op_01fb_0_nf; extern cpuop_func op_01fb_0_ff; extern cpuop_func op_0200_0_nf; extern cpuop_func op_0200_0_ff; extern cpuop_func op_0210_0_nf; extern cpuop_func op_0210_0_ff; extern cpuop_func op_0218_0_nf; extern cpuop_func op_0218_0_ff; extern cpuop_func op_0220_0_nf; extern cpuop_func op_0220_0_ff; extern cpuop_func op_0228_0_nf; extern cpuop_func op_0228_0_ff; extern cpuop_func op_0230_0_nf; extern cpuop_func op_0230_0_ff; extern cpuop_func op_0238_0_nf; extern cpuop_func op_0238_0_ff; extern cpuop_func op_0239_0_nf; extern cpuop_func op_0239_0_ff; extern cpuop_func op_023c_0_nf; extern cpuop_func op_023c_0_ff; extern cpuop_func op_0240_0_nf; extern cpuop_func op_0240_0_ff; extern cpuop_func op_0250_0_nf; extern cpuop_func op_0250_0_ff; extern cpuop_func op_0258_0_nf; extern cpuop_func op_0258_0_ff; extern cpuop_func op_0260_0_nf; extern cpuop_func op_0260_0_ff; extern cpuop_func op_0268_0_nf; extern cpuop_func op_0268_0_ff; extern cpuop_func op_0270_0_nf; extern cpuop_func op_0270_0_ff; extern cpuop_func op_0278_0_nf; extern cpuop_func op_0278_0_ff; extern cpuop_func op_0279_0_nf; extern cpuop_func op_0279_0_ff; extern cpuop_func op_027c_0_nf; extern cpuop_func op_027c_0_ff; extern cpuop_func op_0280_0_nf; extern cpuop_func op_0280_0_ff; extern cpuop_func op_0290_0_nf; extern cpuop_func op_0290_0_ff; extern cpuop_func op_0298_0_nf; extern cpuop_func op_0298_0_ff; extern cpuop_func op_02a0_0_nf; extern cpuop_func op_02a0_0_ff; extern cpuop_func op_02a8_0_nf; extern cpuop_func op_02a8_0_ff; extern cpuop_func op_02b0_0_nf; extern cpuop_func op_02b0_0_ff; extern cpuop_func op_02b8_0_nf; extern cpuop_func op_02b8_0_ff; extern cpuop_func op_02b9_0_nf; extern cpuop_func op_02b9_0_ff; extern cpuop_func op_02d0_0_nf; extern cpuop_func op_02d0_0_ff; extern cpuop_func op_02e8_0_nf; extern cpuop_func op_02e8_0_ff; extern cpuop_func op_02f0_0_nf; extern cpuop_func op_02f0_0_ff; extern cpuop_func op_02f8_0_nf; extern cpuop_func op_02f8_0_ff; extern cpuop_func op_02f9_0_nf; extern cpuop_func op_02f9_0_ff; extern cpuop_func op_02fa_0_nf; extern cpuop_func op_02fa_0_ff; extern cpuop_func op_02fb_0_nf; extern cpuop_func op_02fb_0_ff; extern cpuop_func op_0400_0_nf; extern cpuop_func op_0400_0_ff; extern cpuop_func op_0410_0_nf; extern cpuop_func op_0410_0_ff; extern cpuop_func op_0418_0_nf; extern cpuop_func op_0418_0_ff; extern cpuop_func op_0420_0_nf; extern cpuop_func op_0420_0_ff; extern cpuop_func op_0428_0_nf; extern cpuop_func op_0428_0_ff; extern cpuop_func op_0430_0_nf; extern cpuop_func op_0430_0_ff; extern cpuop_func op_0438_0_nf; extern cpuop_func op_0438_0_ff; extern cpuop_func op_0439_0_nf; extern cpuop_func op_0439_0_ff; extern cpuop_func op_0440_0_nf; extern cpuop_func op_0440_0_ff; extern cpuop_func op_0450_0_nf; extern cpuop_func op_0450_0_ff; extern cpuop_func op_0458_0_nf; extern cpuop_func op_0458_0_ff; extern cpuop_func op_0460_0_nf; extern cpuop_func op_0460_0_ff; extern cpuop_func op_0468_0_nf; extern cpuop_func op_0468_0_ff; extern cpuop_func op_0470_0_nf; extern cpuop_func op_0470_0_ff; extern cpuop_func op_0478_0_nf; extern cpuop_func op_0478_0_ff; extern cpuop_func op_0479_0_nf; extern cpuop_func op_0479_0_ff; extern cpuop_func op_0480_0_nf; extern cpuop_func op_0480_0_ff; extern cpuop_func op_0490_0_nf; extern cpuop_func op_0490_0_ff; extern cpuop_func op_0498_0_nf; extern cpuop_func op_0498_0_ff; extern cpuop_func op_04a0_0_nf; extern cpuop_func op_04a0_0_ff; extern cpuop_func op_04a8_0_nf; extern cpuop_func op_04a8_0_ff; extern cpuop_func op_04b0_0_nf; extern cpuop_func op_04b0_0_ff; extern cpuop_func op_04b8_0_nf; extern cpuop_func op_04b8_0_ff; extern cpuop_func op_04b9_0_nf; extern cpuop_func op_04b9_0_ff; extern cpuop_func op_04d0_0_nf; extern cpuop_func op_04d0_0_ff; extern cpuop_func op_04e8_0_nf; extern cpuop_func op_04e8_0_ff; extern cpuop_func op_04f0_0_nf; extern cpuop_func op_04f0_0_ff; extern cpuop_func op_04f8_0_nf; extern cpuop_func op_04f8_0_ff; extern cpuop_func op_04f9_0_nf; extern cpuop_func op_04f9_0_ff; extern cpuop_func op_04fa_0_nf; extern cpuop_func op_04fa_0_ff; extern cpuop_func op_04fb_0_nf; extern cpuop_func op_04fb_0_ff; extern cpuop_func op_0600_0_nf; extern cpuop_func op_0600_0_ff; extern cpuop_func op_0610_0_nf; extern cpuop_func op_0610_0_ff; extern cpuop_func op_0618_0_nf; extern cpuop_func op_0618_0_ff; extern cpuop_func op_0620_0_nf; extern cpuop_func op_0620_0_ff; extern cpuop_func op_0628_0_nf; extern cpuop_func op_0628_0_ff; extern cpuop_func op_0630_0_nf; extern cpuop_func op_0630_0_ff; extern cpuop_func op_0638_0_nf; extern cpuop_func op_0638_0_ff; extern cpuop_func op_0639_0_nf; extern cpuop_func op_0639_0_ff; extern cpuop_func op_0640_0_nf; extern cpuop_func op_0640_0_ff; extern cpuop_func op_0650_0_nf; extern cpuop_func op_0650_0_ff; extern cpuop_func op_0658_0_nf; extern cpuop_func op_0658_0_ff; extern cpuop_func op_0660_0_nf; extern cpuop_func op_0660_0_ff; extern cpuop_func op_0668_0_nf; extern cpuop_func op_0668_0_ff; extern cpuop_func op_0670_0_nf; extern cpuop_func op_0670_0_ff; extern cpuop_func op_0678_0_nf; extern cpuop_func op_0678_0_ff; extern cpuop_func op_0679_0_nf; extern cpuop_func op_0679_0_ff; extern cpuop_func op_0680_0_nf; extern cpuop_func op_0680_0_ff; extern cpuop_func op_0690_0_nf; extern cpuop_func op_0690_0_ff; extern cpuop_func op_0698_0_nf; extern cpuop_func op_0698_0_ff; extern cpuop_func op_06a0_0_nf; extern cpuop_func op_06a0_0_ff; extern cpuop_func op_06a8_0_nf; extern cpuop_func op_06a8_0_ff; extern cpuop_func op_06b0_0_nf; extern cpuop_func op_06b0_0_ff; extern cpuop_func op_06b8_0_nf; extern cpuop_func op_06b8_0_ff; extern cpuop_func op_06b9_0_nf; extern cpuop_func op_06b9_0_ff; extern cpuop_func op_06c0_0_nf; extern cpuop_func op_06c0_0_ff; extern cpuop_func op_06c8_0_nf; extern cpuop_func op_06c8_0_ff; extern cpuop_func op_06d0_0_nf; extern cpuop_func op_06d0_0_ff; extern cpuop_func op_06e8_0_nf; extern cpuop_func op_06e8_0_ff; extern cpuop_func op_06f0_0_nf; extern cpuop_func op_06f0_0_ff; extern cpuop_func op_06f8_0_nf; extern cpuop_func op_06f8_0_ff; extern cpuop_func op_06f9_0_nf; extern cpuop_func op_06f9_0_ff; extern cpuop_func op_06fa_0_nf; extern cpuop_func op_06fa_0_ff; extern cpuop_func op_06fb_0_nf; extern cpuop_func op_06fb_0_ff; extern cpuop_func op_0800_0_nf; extern cpuop_func op_0800_0_ff; extern cpuop_func op_0810_0_nf; extern cpuop_func op_0810_0_ff; extern cpuop_func op_0818_0_nf; extern cpuop_func op_0818_0_ff; extern cpuop_func op_0820_0_nf; extern cpuop_func op_0820_0_ff; extern cpuop_func op_0828_0_nf; extern cpuop_func op_0828_0_ff; extern cpuop_func op_0830_0_nf; extern cpuop_func op_0830_0_ff; extern cpuop_func op_0838_0_nf; extern cpuop_func op_0838_0_ff; extern cpuop_func op_0839_0_nf; extern cpuop_func op_0839_0_ff; extern cpuop_func op_083a_0_nf; extern cpuop_func op_083a_0_ff; extern cpuop_func op_083b_0_nf; extern cpuop_func op_083b_0_ff; extern cpuop_func op_083c_0_nf; extern cpuop_func op_083c_0_ff; extern cpuop_func op_0840_0_nf; extern cpuop_func op_0840_0_ff; extern cpuop_func op_0850_0_nf; extern cpuop_func op_0850_0_ff; extern cpuop_func op_0858_0_nf; extern cpuop_func op_0858_0_ff; extern cpuop_func op_0860_0_nf; extern cpuop_func op_0860_0_ff; extern cpuop_func op_0868_0_nf; extern cpuop_func op_0868_0_ff; extern cpuop_func op_0870_0_nf; extern cpuop_func op_0870_0_ff; extern cpuop_func op_0878_0_nf; extern cpuop_func op_0878_0_ff; extern cpuop_func op_0879_0_nf; extern cpuop_func op_0879_0_ff; extern cpuop_func op_087a_0_nf; extern cpuop_func op_087a_0_ff; extern cpuop_func op_087b_0_nf; extern cpuop_func op_087b_0_ff; extern cpuop_func op_0880_0_nf; extern cpuop_func op_0880_0_ff; extern cpuop_func op_0890_0_nf; extern cpuop_func op_0890_0_ff; extern cpuop_func op_0898_0_nf; extern cpuop_func op_0898_0_ff; extern cpuop_func op_08a0_0_nf; extern cpuop_func op_08a0_0_ff; extern cpuop_func op_08a8_0_nf; extern cpuop_func op_08a8_0_ff; extern cpuop_func op_08b0_0_nf; extern cpuop_func op_08b0_0_ff; extern cpuop_func op_08b8_0_nf; extern cpuop_func op_08b8_0_ff; extern cpuop_func op_08b9_0_nf; extern cpuop_func op_08b9_0_ff; extern cpuop_func op_08ba_0_nf; extern cpuop_func op_08ba_0_ff; extern cpuop_func op_08bb_0_nf; extern cpuop_func op_08bb_0_ff; extern cpuop_func op_08c0_0_nf; extern cpuop_func op_08c0_0_ff; extern cpuop_func op_08d0_0_nf; extern cpuop_func op_08d0_0_ff; extern cpuop_func op_08d8_0_nf; extern cpuop_func op_08d8_0_ff; extern cpuop_func op_08e0_0_nf; extern cpuop_func op_08e0_0_ff; extern cpuop_func op_08e8_0_nf; extern cpuop_func op_08e8_0_ff; extern cpuop_func op_08f0_0_nf; extern cpuop_func op_08f0_0_ff; extern cpuop_func op_08f8_0_nf; extern cpuop_func op_08f8_0_ff; extern cpuop_func op_08f9_0_nf; extern cpuop_func op_08f9_0_ff; extern cpuop_func op_08fa_0_nf; extern cpuop_func op_08fa_0_ff; extern cpuop_func op_08fb_0_nf; extern cpuop_func op_08fb_0_ff; extern cpuop_func op_0a00_0_nf; extern cpuop_func op_0a00_0_ff; extern cpuop_func op_0a10_0_nf; extern cpuop_func op_0a10_0_ff; extern cpuop_func op_0a18_0_nf; extern cpuop_func op_0a18_0_ff; extern cpuop_func op_0a20_0_nf; extern cpuop_func op_0a20_0_ff; extern cpuop_func op_0a28_0_nf; extern cpuop_func op_0a28_0_ff; extern cpuop_func op_0a30_0_nf; extern cpuop_func op_0a30_0_ff; extern cpuop_func op_0a38_0_nf; extern cpuop_func op_0a38_0_ff; extern cpuop_func op_0a39_0_nf; extern cpuop_func op_0a39_0_ff; extern cpuop_func op_0a3c_0_nf; extern cpuop_func op_0a3c_0_ff; extern cpuop_func op_0a40_0_nf; extern cpuop_func op_0a40_0_ff; extern cpuop_func op_0a50_0_nf; extern cpuop_func op_0a50_0_ff; extern cpuop_func op_0a58_0_nf; extern cpuop_func op_0a58_0_ff; extern cpuop_func op_0a60_0_nf; extern cpuop_func op_0a60_0_ff; extern cpuop_func op_0a68_0_nf; extern cpuop_func op_0a68_0_ff; extern cpuop_func op_0a70_0_nf; extern cpuop_func op_0a70_0_ff; extern cpuop_func op_0a78_0_nf; extern cpuop_func op_0a78_0_ff; extern cpuop_func op_0a79_0_nf; extern cpuop_func op_0a79_0_ff; extern cpuop_func op_0a7c_0_nf; extern cpuop_func op_0a7c_0_ff; extern cpuop_func op_0a80_0_nf; extern cpuop_func op_0a80_0_ff; extern cpuop_func op_0a90_0_nf; extern cpuop_func op_0a90_0_ff; extern cpuop_func op_0a98_0_nf; extern cpuop_func op_0a98_0_ff; extern cpuop_func op_0aa0_0_nf; extern cpuop_func op_0aa0_0_ff; extern cpuop_func op_0aa8_0_nf; extern cpuop_func op_0aa8_0_ff; extern cpuop_func op_0ab0_0_nf; extern cpuop_func op_0ab0_0_ff; extern cpuop_func op_0ab8_0_nf; extern cpuop_func op_0ab8_0_ff; extern cpuop_func op_0ab9_0_nf; extern cpuop_func op_0ab9_0_ff; extern cpuop_func op_0ad0_0_nf; extern cpuop_func op_0ad0_0_ff; extern cpuop_func op_0ad8_0_nf; extern cpuop_func op_0ad8_0_ff; extern cpuop_func op_0ae0_0_nf; extern cpuop_func op_0ae0_0_ff; extern cpuop_func op_0ae8_0_nf; extern cpuop_func op_0ae8_0_ff; extern cpuop_func op_0af0_0_nf; extern cpuop_func op_0af0_0_ff; extern cpuop_func op_0af8_0_nf; extern cpuop_func op_0af8_0_ff; extern cpuop_func op_0af9_0_nf; extern cpuop_func op_0af9_0_ff; extern cpuop_func op_0c00_0_nf; extern cpuop_func op_0c00_0_ff; extern cpuop_func op_0c10_0_nf; extern cpuop_func op_0c10_0_ff; extern cpuop_func op_0c18_0_nf; extern cpuop_func op_0c18_0_ff; extern cpuop_func op_0c20_0_nf; extern cpuop_func op_0c20_0_ff; extern cpuop_func op_0c28_0_nf; extern cpuop_func op_0c28_0_ff; extern cpuop_func op_0c30_0_nf; extern cpuop_func op_0c30_0_ff; extern cpuop_func op_0c38_0_nf; extern cpuop_func op_0c38_0_ff; extern cpuop_func op_0c39_0_nf; extern cpuop_func op_0c39_0_ff; extern cpuop_func op_0c3a_0_nf; extern cpuop_func op_0c3a_0_ff; extern cpuop_func op_0c3b_0_nf; extern cpuop_func op_0c3b_0_ff; extern cpuop_func op_0c40_0_nf; extern cpuop_func op_0c40_0_ff; extern cpuop_func op_0c50_0_nf; extern cpuop_func op_0c50_0_ff; extern cpuop_func op_0c58_0_nf; extern cpuop_func op_0c58_0_ff; extern cpuop_func op_0c60_0_nf; extern cpuop_func op_0c60_0_ff; extern cpuop_func op_0c68_0_nf; extern cpuop_func op_0c68_0_ff; extern cpuop_func op_0c70_0_nf; extern cpuop_func op_0c70_0_ff; extern cpuop_func op_0c78_0_nf; extern cpuop_func op_0c78_0_ff; extern cpuop_func op_0c79_0_nf; extern cpuop_func op_0c79_0_ff; extern cpuop_func op_0c7a_0_nf; extern cpuop_func op_0c7a_0_ff; extern cpuop_func op_0c7b_0_nf; extern cpuop_func op_0c7b_0_ff; extern cpuop_func op_0c80_0_nf; extern cpuop_func op_0c80_0_ff; extern cpuop_func op_0c90_0_nf; extern cpuop_func op_0c90_0_ff; extern cpuop_func op_0c98_0_nf; extern cpuop_func op_0c98_0_ff; extern cpuop_func op_0ca0_0_nf; extern cpuop_func op_0ca0_0_ff; extern cpuop_func op_0ca8_0_nf; extern cpuop_func op_0ca8_0_ff; extern cpuop_func op_0cb0_0_nf; extern cpuop_func op_0cb0_0_ff; extern cpuop_func op_0cb8_0_nf; extern cpuop_func op_0cb8_0_ff; extern cpuop_func op_0cb9_0_nf; extern cpuop_func op_0cb9_0_ff; extern cpuop_func op_0cba_0_nf; extern cpuop_func op_0cba_0_ff; extern cpuop_func op_0cbb_0_nf; extern cpuop_func op_0cbb_0_ff; extern cpuop_func op_0cd0_0_nf; extern cpuop_func op_0cd0_0_ff; extern cpuop_func op_0cd8_0_nf; extern cpuop_func op_0cd8_0_ff; extern cpuop_func op_0ce0_0_nf; extern cpuop_func op_0ce0_0_ff; extern cpuop_func op_0ce8_0_nf; extern cpuop_func op_0ce8_0_ff; extern cpuop_func op_0cf0_0_nf; extern cpuop_func op_0cf0_0_ff; extern cpuop_func op_0cf8_0_nf; extern cpuop_func op_0cf8_0_ff; extern cpuop_func op_0cf9_0_nf; extern cpuop_func op_0cf9_0_ff; extern cpuop_func op_0cfc_0_nf; extern cpuop_func op_0cfc_0_ff; extern cpuop_func op_0e10_0_nf; extern cpuop_func op_0e10_0_ff; extern cpuop_func op_0e18_0_nf; extern cpuop_func op_0e18_0_ff; extern cpuop_func op_0e20_0_nf; extern cpuop_func op_0e20_0_ff; extern cpuop_func op_0e28_0_nf; extern cpuop_func op_0e28_0_ff; extern cpuop_func op_0e30_0_nf; extern cpuop_func op_0e30_0_ff; extern cpuop_func op_0e38_0_nf; extern cpuop_func op_0e38_0_ff; extern cpuop_func op_0e39_0_nf; extern cpuop_func op_0e39_0_ff; extern cpuop_func op_0e50_0_nf; extern cpuop_func op_0e50_0_ff; extern cpuop_func op_0e58_0_nf; extern cpuop_func op_0e58_0_ff; extern cpuop_func op_0e60_0_nf; extern cpuop_func op_0e60_0_ff; extern cpuop_func op_0e68_0_nf; extern cpuop_func op_0e68_0_ff; extern cpuop_func op_0e70_0_nf; extern cpuop_func op_0e70_0_ff; extern cpuop_func op_0e78_0_nf; extern cpuop_func op_0e78_0_ff; extern cpuop_func op_0e79_0_nf; extern cpuop_func op_0e79_0_ff; extern cpuop_func op_0e90_0_nf; extern cpuop_func op_0e90_0_ff; extern cpuop_func op_0e98_0_nf; extern cpuop_func op_0e98_0_ff; extern cpuop_func op_0ea0_0_nf; extern cpuop_func op_0ea0_0_ff; extern cpuop_func op_0ea8_0_nf; extern cpuop_func op_0ea8_0_ff; extern cpuop_func op_0eb0_0_nf; extern cpuop_func op_0eb0_0_ff; extern cpuop_func op_0eb8_0_nf; extern cpuop_func op_0eb8_0_ff; extern cpuop_func op_0eb9_0_nf; extern cpuop_func op_0eb9_0_ff; extern cpuop_func op_0ed0_0_nf; extern cpuop_func op_0ed0_0_ff; extern cpuop_func op_0ed8_0_nf; extern cpuop_func op_0ed8_0_ff; extern cpuop_func op_0ee0_0_nf; extern cpuop_func op_0ee0_0_ff; extern cpuop_func op_0ee8_0_nf; extern cpuop_func op_0ee8_0_ff; extern cpuop_func op_0ef0_0_nf; extern cpuop_func op_0ef0_0_ff; extern cpuop_func op_0ef8_0_nf; extern cpuop_func op_0ef8_0_ff; extern cpuop_func op_0ef9_0_nf; extern cpuop_func op_0ef9_0_ff; extern cpuop_func op_0efc_0_nf; extern cpuop_func op_0efc_0_ff; extern cpuop_func op_1000_0_nf; extern cpuop_func op_1000_0_ff; extern cpuop_func op_1010_0_nf; extern cpuop_func op_1010_0_ff; extern cpuop_func op_1018_0_nf; extern cpuop_func op_1018_0_ff; extern cpuop_func op_1020_0_nf; extern cpuop_func op_1020_0_ff; extern cpuop_func op_1028_0_nf; extern cpuop_func op_1028_0_ff; extern cpuop_func op_1030_0_nf; extern cpuop_func op_1030_0_ff; extern cpuop_func op_1038_0_nf; extern cpuop_func op_1038_0_ff; extern cpuop_func op_1039_0_nf; extern cpuop_func op_1039_0_ff; extern cpuop_func op_103a_0_nf; extern cpuop_func op_103a_0_ff; extern cpuop_func op_103b_0_nf; extern cpuop_func op_103b_0_ff; extern cpuop_func op_103c_0_nf; extern cpuop_func op_103c_0_ff; extern cpuop_func op_1080_0_nf; extern cpuop_func op_1080_0_ff; extern cpuop_func op_1090_0_nf; extern cpuop_func op_1090_0_ff; extern cpuop_func op_1098_0_nf; extern cpuop_func op_1098_0_ff; extern cpuop_func op_10a0_0_nf; extern cpuop_func op_10a0_0_ff; extern cpuop_func op_10a8_0_nf; extern cpuop_func op_10a8_0_ff; extern cpuop_func op_10b0_0_nf; extern cpuop_func op_10b0_0_ff; extern cpuop_func op_10b8_0_nf; extern cpuop_func op_10b8_0_ff; extern cpuop_func op_10b9_0_nf; extern cpuop_func op_10b9_0_ff; extern cpuop_func op_10ba_0_nf; extern cpuop_func op_10ba_0_ff; extern cpuop_func op_10bb_0_nf; extern cpuop_func op_10bb_0_ff; extern cpuop_func op_10bc_0_nf; extern cpuop_func op_10bc_0_ff; extern cpuop_func op_10c0_0_nf; extern cpuop_func op_10c0_0_ff; extern cpuop_func op_10d0_0_nf; extern cpuop_func op_10d0_0_ff; extern cpuop_func op_10d8_0_nf; extern cpuop_func op_10d8_0_ff; extern cpuop_func op_10e0_0_nf; extern cpuop_func op_10e0_0_ff; extern cpuop_func op_10e8_0_nf; extern cpuop_func op_10e8_0_ff; extern cpuop_func op_10f0_0_nf; extern cpuop_func op_10f0_0_ff; extern cpuop_func op_10f8_0_nf; extern cpuop_func op_10f8_0_ff; extern cpuop_func op_10f9_0_nf; extern cpuop_func op_10f9_0_ff; extern cpuop_func op_10fa_0_nf; extern cpuop_func op_10fa_0_ff; extern cpuop_func op_10fb_0_nf; extern cpuop_func op_10fb_0_ff; extern cpuop_func op_10fc_0_nf; extern cpuop_func op_10fc_0_ff; extern cpuop_func op_1100_0_nf; extern cpuop_func op_1100_0_ff; extern cpuop_func op_1110_0_nf; extern cpuop_func op_1110_0_ff; extern cpuop_func op_1118_0_nf; extern cpuop_func op_1118_0_ff; extern cpuop_func op_1120_0_nf; extern cpuop_func op_1120_0_ff; extern cpuop_func op_1128_0_nf; extern cpuop_func op_1128_0_ff; extern cpuop_func op_1130_0_nf; extern cpuop_func op_1130_0_ff; extern cpuop_func op_1138_0_nf; extern cpuop_func op_1138_0_ff; extern cpuop_func op_1139_0_nf; extern cpuop_func op_1139_0_ff; extern cpuop_func op_113a_0_nf; extern cpuop_func op_113a_0_ff; extern cpuop_func op_113b_0_nf; extern cpuop_func op_113b_0_ff; extern cpuop_func op_113c_0_nf; extern cpuop_func op_113c_0_ff; extern cpuop_func op_1140_0_nf; extern cpuop_func op_1140_0_ff; extern cpuop_func op_1150_0_nf; extern cpuop_func op_1150_0_ff; extern cpuop_func op_1158_0_nf; extern cpuop_func op_1158_0_ff; extern cpuop_func op_1160_0_nf; extern cpuop_func op_1160_0_ff; extern cpuop_func op_1168_0_nf; extern cpuop_func op_1168_0_ff; extern cpuop_func op_1170_0_nf; extern cpuop_func op_1170_0_ff; extern cpuop_func op_1178_0_nf; extern cpuop_func op_1178_0_ff; extern cpuop_func op_1179_0_nf; extern cpuop_func op_1179_0_ff; extern cpuop_func op_117a_0_nf; extern cpuop_func op_117a_0_ff; extern cpuop_func op_117b_0_nf; extern cpuop_func op_117b_0_ff; extern cpuop_func op_117c_0_nf; extern cpuop_func op_117c_0_ff; extern cpuop_func op_1180_0_nf; extern cpuop_func op_1180_0_ff; extern cpuop_func op_1190_0_nf; extern cpuop_func op_1190_0_ff; extern cpuop_func op_1198_0_nf; extern cpuop_func op_1198_0_ff; extern cpuop_func op_11a0_0_nf; extern cpuop_func op_11a0_0_ff; extern cpuop_func op_11a8_0_nf; extern cpuop_func op_11a8_0_ff; extern cpuop_func op_11b0_0_nf; extern cpuop_func op_11b0_0_ff; extern cpuop_func op_11b8_0_nf; extern cpuop_func op_11b8_0_ff; extern cpuop_func op_11b9_0_nf; extern cpuop_func op_11b9_0_ff; extern cpuop_func op_11ba_0_nf; extern cpuop_func op_11ba_0_ff; extern cpuop_func op_11bb_0_nf; extern cpuop_func op_11bb_0_ff; extern cpuop_func op_11bc_0_nf; extern cpuop_func op_11bc_0_ff; extern cpuop_func op_11c0_0_nf; extern cpuop_func op_11c0_0_ff; extern cpuop_func op_11d0_0_nf; extern cpuop_func op_11d0_0_ff; extern cpuop_func op_11d8_0_nf; extern cpuop_func op_11d8_0_ff; extern cpuop_func op_11e0_0_nf; extern cpuop_func op_11e0_0_ff; extern cpuop_func op_11e8_0_nf; extern cpuop_func op_11e8_0_ff; extern cpuop_func op_11f0_0_nf; extern cpuop_func op_11f0_0_ff; extern cpuop_func op_11f8_0_nf; extern cpuop_func op_11f8_0_ff; extern cpuop_func op_11f9_0_nf; extern cpuop_func op_11f9_0_ff; extern cpuop_func op_11fa_0_nf; extern cpuop_func op_11fa_0_ff; extern cpuop_func op_11fb_0_nf; extern cpuop_func op_11fb_0_ff; extern cpuop_func op_11fc_0_nf; extern cpuop_func op_11fc_0_ff; extern cpuop_func op_13c0_0_nf; extern cpuop_func op_13c0_0_ff; extern cpuop_func op_13d0_0_nf; extern cpuop_func op_13d0_0_ff; extern cpuop_func op_13d8_0_nf; extern cpuop_func op_13d8_0_ff; extern cpuop_func op_13e0_0_nf; extern cpuop_func op_13e0_0_ff; extern cpuop_func op_13e8_0_nf; extern cpuop_func op_13e8_0_ff; extern cpuop_func op_13f0_0_nf; extern cpuop_func op_13f0_0_ff; extern cpuop_func op_13f8_0_nf; extern cpuop_func op_13f8_0_ff; extern cpuop_func op_13f9_0_nf; extern cpuop_func op_13f9_0_ff; extern cpuop_func op_13fa_0_nf; extern cpuop_func op_13fa_0_ff; extern cpuop_func op_13fb_0_nf; extern cpuop_func op_13fb_0_ff; extern cpuop_func op_13fc_0_nf; extern cpuop_func op_13fc_0_ff; extern cpuop_func op_2000_0_nf; extern cpuop_func op_2000_0_ff; extern cpuop_func op_2008_0_nf; extern cpuop_func op_2008_0_ff; extern cpuop_func op_2010_0_nf; extern cpuop_func op_2010_0_ff; extern cpuop_func op_2018_0_nf; extern cpuop_func op_2018_0_ff; extern cpuop_func op_2020_0_nf; extern cpuop_func op_2020_0_ff; extern cpuop_func op_2028_0_nf; extern cpuop_func op_2028_0_ff; extern cpuop_func op_2030_0_nf; extern cpuop_func op_2030_0_ff; extern cpuop_func op_2038_0_nf; extern cpuop_func op_2038_0_ff; extern cpuop_func op_2039_0_nf; extern cpuop_func op_2039_0_ff; extern cpuop_func op_203a_0_nf; extern cpuop_func op_203a_0_ff; extern cpuop_func op_203b_0_nf; extern cpuop_func op_203b_0_ff; extern cpuop_func op_203c_0_nf; extern cpuop_func op_203c_0_ff; extern cpuop_func op_2040_0_nf; extern cpuop_func op_2040_0_ff; extern cpuop_func op_2048_0_nf; extern cpuop_func op_2048_0_ff; extern cpuop_func op_2050_0_nf; extern cpuop_func op_2050_0_ff; extern cpuop_func op_2058_0_nf; extern cpuop_func op_2058_0_ff; extern cpuop_func op_2060_0_nf; extern cpuop_func op_2060_0_ff; extern cpuop_func op_2068_0_nf; extern cpuop_func op_2068_0_ff; extern cpuop_func op_2070_0_nf; extern cpuop_func op_2070_0_ff; extern cpuop_func op_2078_0_nf; extern cpuop_func op_2078_0_ff; extern cpuop_func op_2079_0_nf; extern cpuop_func op_2079_0_ff; extern cpuop_func op_207a_0_nf; extern cpuop_func op_207a_0_ff; extern cpuop_func op_207b_0_nf; extern cpuop_func op_207b_0_ff; extern cpuop_func op_207c_0_nf; extern cpuop_func op_207c_0_ff; extern cpuop_func op_2080_0_nf; extern cpuop_func op_2080_0_ff; extern cpuop_func op_2088_0_nf; extern cpuop_func op_2088_0_ff; extern cpuop_func op_2090_0_nf; extern cpuop_func op_2090_0_ff; extern cpuop_func op_2098_0_nf; extern cpuop_func op_2098_0_ff; extern cpuop_func op_20a0_0_nf; extern cpuop_func op_20a0_0_ff; extern cpuop_func op_20a8_0_nf; extern cpuop_func op_20a8_0_ff; extern cpuop_func op_20b0_0_nf; extern cpuop_func op_20b0_0_ff; extern cpuop_func op_20b8_0_nf; extern cpuop_func op_20b8_0_ff; extern cpuop_func op_20b9_0_nf; extern cpuop_func op_20b9_0_ff; extern cpuop_func op_20ba_0_nf; extern cpuop_func op_20ba_0_ff; extern cpuop_func op_20bb_0_nf; extern cpuop_func op_20bb_0_ff; extern cpuop_func op_20bc_0_nf; extern cpuop_func op_20bc_0_ff; extern cpuop_func op_20c0_0_nf; extern cpuop_func op_20c0_0_ff; extern cpuop_func op_20c8_0_nf; extern cpuop_func op_20c8_0_ff; extern cpuop_func op_20d0_0_nf; extern cpuop_func op_20d0_0_ff; extern cpuop_func op_20d8_0_nf; extern cpuop_func op_20d8_0_ff; extern cpuop_func op_20e0_0_nf; extern cpuop_func op_20e0_0_ff; extern cpuop_func op_20e8_0_nf; extern cpuop_func op_20e8_0_ff; extern cpuop_func op_20f0_0_nf; extern cpuop_func op_20f0_0_ff; extern cpuop_func op_20f8_0_nf; extern cpuop_func op_20f8_0_ff; extern cpuop_func op_20f9_0_nf; extern cpuop_func op_20f9_0_ff; extern cpuop_func op_20fa_0_nf; extern cpuop_func op_20fa_0_ff; extern cpuop_func op_20fb_0_nf; extern cpuop_func op_20fb_0_ff; extern cpuop_func op_20fc_0_nf; extern cpuop_func op_20fc_0_ff; extern cpuop_func op_2100_0_nf; extern cpuop_func op_2100_0_ff; extern cpuop_func op_2108_0_nf; extern cpuop_func op_2108_0_ff; extern cpuop_func op_2110_0_nf; extern cpuop_func op_2110_0_ff; extern cpuop_func op_2118_0_nf; extern cpuop_func op_2118_0_ff; extern cpuop_func op_2120_0_nf; extern cpuop_func op_2120_0_ff; extern cpuop_func op_2128_0_nf; extern cpuop_func op_2128_0_ff; extern cpuop_func op_2130_0_nf; extern cpuop_func op_2130_0_ff; extern cpuop_func op_2138_0_nf; extern cpuop_func op_2138_0_ff; extern cpuop_func op_2139_0_nf; extern cpuop_func op_2139_0_ff; extern cpuop_func op_213a_0_nf; extern cpuop_func op_213a_0_ff; extern cpuop_func op_213b_0_nf; extern cpuop_func op_213b_0_ff; extern cpuop_func op_213c_0_nf; extern cpuop_func op_213c_0_ff; extern cpuop_func op_2140_0_nf; extern cpuop_func op_2140_0_ff; extern cpuop_func op_2148_0_nf; extern cpuop_func op_2148_0_ff; extern cpuop_func op_2150_0_nf; extern cpuop_func op_2150_0_ff; extern cpuop_func op_2158_0_nf; extern cpuop_func op_2158_0_ff; extern cpuop_func op_2160_0_nf; extern cpuop_func op_2160_0_ff; extern cpuop_func op_2168_0_nf; extern cpuop_func op_2168_0_ff; extern cpuop_func op_2170_0_nf; extern cpuop_func op_2170_0_ff; extern cpuop_func op_2178_0_nf; extern cpuop_func op_2178_0_ff; extern cpuop_func op_2179_0_nf; extern cpuop_func op_2179_0_ff; extern cpuop_func op_217a_0_nf; extern cpuop_func op_217a_0_ff; extern cpuop_func op_217b_0_nf; extern cpuop_func op_217b_0_ff; extern cpuop_func op_217c_0_nf; extern cpuop_func op_217c_0_ff; extern cpuop_func op_2180_0_nf; extern cpuop_func op_2180_0_ff; extern cpuop_func op_2188_0_nf; extern cpuop_func op_2188_0_ff; extern cpuop_func op_2190_0_nf; extern cpuop_func op_2190_0_ff; extern cpuop_func op_2198_0_nf; extern cpuop_func op_2198_0_ff; extern cpuop_func op_21a0_0_nf; extern cpuop_func op_21a0_0_ff; extern cpuop_func op_21a8_0_nf; extern cpuop_func op_21a8_0_ff; extern cpuop_func op_21b0_0_nf; extern cpuop_func op_21b0_0_ff; extern cpuop_func op_21b8_0_nf; extern cpuop_func op_21b8_0_ff; extern cpuop_func op_21b9_0_nf; extern cpuop_func op_21b9_0_ff; extern cpuop_func op_21ba_0_nf; extern cpuop_func op_21ba_0_ff; extern cpuop_func op_21bb_0_nf; extern cpuop_func op_21bb_0_ff; extern cpuop_func op_21bc_0_nf; extern cpuop_func op_21bc_0_ff; extern cpuop_func op_21c0_0_nf; extern cpuop_func op_21c0_0_ff; extern cpuop_func op_21c8_0_nf; extern cpuop_func op_21c8_0_ff; extern cpuop_func op_21d0_0_nf; extern cpuop_func op_21d0_0_ff; extern cpuop_func op_21d8_0_nf; extern cpuop_func op_21d8_0_ff; extern cpuop_func op_21e0_0_nf; extern cpuop_func op_21e0_0_ff; extern cpuop_func op_21e8_0_nf; extern cpuop_func op_21e8_0_ff; extern cpuop_func op_21f0_0_nf; extern cpuop_func op_21f0_0_ff; extern cpuop_func op_21f8_0_nf; extern cpuop_func op_21f8_0_ff; extern cpuop_func op_21f9_0_nf; extern cpuop_func op_21f9_0_ff; extern cpuop_func op_21fa_0_nf; extern cpuop_func op_21fa_0_ff; extern cpuop_func op_21fb_0_nf; extern cpuop_func op_21fb_0_ff; extern cpuop_func op_21fc_0_nf; extern cpuop_func op_21fc_0_ff; extern cpuop_func op_23c0_0_nf; extern cpuop_func op_23c0_0_ff; extern cpuop_func op_23c8_0_nf; extern cpuop_func op_23c8_0_ff; extern cpuop_func op_23d0_0_nf; extern cpuop_func op_23d0_0_ff; extern cpuop_func op_23d8_0_nf; extern cpuop_func op_23d8_0_ff; extern cpuop_func op_23e0_0_nf; extern cpuop_func op_23e0_0_ff; extern cpuop_func op_23e8_0_nf; extern cpuop_func op_23e8_0_ff; extern cpuop_func op_23f0_0_nf; extern cpuop_func op_23f0_0_ff; extern cpuop_func op_23f8_0_nf; extern cpuop_func op_23f8_0_ff; extern cpuop_func op_23f9_0_nf; extern cpuop_func op_23f9_0_ff; extern cpuop_func op_23fa_0_nf; extern cpuop_func op_23fa_0_ff; extern cpuop_func op_23fb_0_nf; extern cpuop_func op_23fb_0_ff; extern cpuop_func op_23fc_0_nf; extern cpuop_func op_23fc_0_ff; extern cpuop_func op_3000_0_nf; extern cpuop_func op_3000_0_ff; extern cpuop_func op_3008_0_nf; extern cpuop_func op_3008_0_ff; extern cpuop_func op_3010_0_nf; extern cpuop_func op_3010_0_ff; extern cpuop_func op_3018_0_nf; extern cpuop_func op_3018_0_ff; extern cpuop_func op_3020_0_nf; extern cpuop_func op_3020_0_ff; extern cpuop_func op_3028_0_nf; extern cpuop_func op_3028_0_ff; extern cpuop_func op_3030_0_nf; extern cpuop_func op_3030_0_ff; extern cpuop_func op_3038_0_nf; extern cpuop_func op_3038_0_ff; extern cpuop_func op_3039_0_nf; extern cpuop_func op_3039_0_ff; extern cpuop_func op_303a_0_nf; extern cpuop_func op_303a_0_ff; extern cpuop_func op_303b_0_nf; extern cpuop_func op_303b_0_ff; extern cpuop_func op_303c_0_nf; extern cpuop_func op_303c_0_ff; extern cpuop_func op_3040_0_nf; extern cpuop_func op_3040_0_ff; extern cpuop_func op_3048_0_nf; extern cpuop_func op_3048_0_ff; extern cpuop_func op_3050_0_nf; extern cpuop_func op_3050_0_ff; extern cpuop_func op_3058_0_nf; extern cpuop_func op_3058_0_ff; extern cpuop_func op_3060_0_nf; extern cpuop_func op_3060_0_ff; extern cpuop_func op_3068_0_nf; extern cpuop_func op_3068_0_ff; extern cpuop_func op_3070_0_nf; extern cpuop_func op_3070_0_ff; extern cpuop_func op_3078_0_nf; extern cpuop_func op_3078_0_ff; extern cpuop_func op_3079_0_nf; extern cpuop_func op_3079_0_ff; extern cpuop_func op_307a_0_nf; extern cpuop_func op_307a_0_ff; extern cpuop_func op_307b_0_nf; extern cpuop_func op_307b_0_ff; extern cpuop_func op_307c_0_nf; extern cpuop_func op_307c_0_ff; extern cpuop_func op_3080_0_nf; extern cpuop_func op_3080_0_ff; extern cpuop_func op_3088_0_nf; extern cpuop_func op_3088_0_ff; extern cpuop_func op_3090_0_nf; extern cpuop_func op_3090_0_ff; extern cpuop_func op_3098_0_nf; extern cpuop_func op_3098_0_ff; extern cpuop_func op_30a0_0_nf; extern cpuop_func op_30a0_0_ff; extern cpuop_func op_30a8_0_nf; extern cpuop_func op_30a8_0_ff; extern cpuop_func op_30b0_0_nf; extern cpuop_func op_30b0_0_ff; extern cpuop_func op_30b8_0_nf; extern cpuop_func op_30b8_0_ff; extern cpuop_func op_30b9_0_nf; extern cpuop_func op_30b9_0_ff; extern cpuop_func op_30ba_0_nf; extern cpuop_func op_30ba_0_ff; extern cpuop_func op_30bb_0_nf; extern cpuop_func op_30bb_0_ff; extern cpuop_func op_30bc_0_nf; extern cpuop_func op_30bc_0_ff; extern cpuop_func op_30c0_0_nf; extern cpuop_func op_30c0_0_ff; extern cpuop_func op_30c8_0_nf; extern cpuop_func op_30c8_0_ff; extern cpuop_func op_30d0_0_nf; extern cpuop_func op_30d0_0_ff; extern cpuop_func op_30d8_0_nf; extern cpuop_func op_30d8_0_ff; extern cpuop_func op_30e0_0_nf; extern cpuop_func op_30e0_0_ff; extern cpuop_func op_30e8_0_nf; extern cpuop_func op_30e8_0_ff; extern cpuop_func op_30f0_0_nf; extern cpuop_func op_30f0_0_ff; extern cpuop_func op_30f8_0_nf; extern cpuop_func op_30f8_0_ff; extern cpuop_func op_30f9_0_nf; extern cpuop_func op_30f9_0_ff; extern cpuop_func op_30fa_0_nf; extern cpuop_func op_30fa_0_ff; extern cpuop_func op_30fb_0_nf; extern cpuop_func op_30fb_0_ff; extern cpuop_func op_30fc_0_nf; extern cpuop_func op_30fc_0_ff; extern cpuop_func op_3100_0_nf; extern cpuop_func op_3100_0_ff; extern cpuop_func op_3108_0_nf; extern cpuop_func op_3108_0_ff; extern cpuop_func op_3110_0_nf; extern cpuop_func op_3110_0_ff; extern cpuop_func op_3118_0_nf; extern cpuop_func op_3118_0_ff; extern cpuop_func op_3120_0_nf; extern cpuop_func op_3120_0_ff; extern cpuop_func op_3128_0_nf; extern cpuop_func op_3128_0_ff; extern cpuop_func op_3130_0_nf; extern cpuop_func op_3130_0_ff; extern cpuop_func op_3138_0_nf; extern cpuop_func op_3138_0_ff; extern cpuop_func op_3139_0_nf; extern cpuop_func op_3139_0_ff; extern cpuop_func op_313a_0_nf; extern cpuop_func op_313a_0_ff; extern cpuop_func op_313b_0_nf; extern cpuop_func op_313b_0_ff; extern cpuop_func op_313c_0_nf; extern cpuop_func op_313c_0_ff; extern cpuop_func op_3140_0_nf; extern cpuop_func op_3140_0_ff; extern cpuop_func op_3148_0_nf; extern cpuop_func op_3148_0_ff; extern cpuop_func op_3150_0_nf; extern cpuop_func op_3150_0_ff; extern cpuop_func op_3158_0_nf; extern cpuop_func op_3158_0_ff; extern cpuop_func op_3160_0_nf; extern cpuop_func op_3160_0_ff; extern cpuop_func op_3168_0_nf; extern cpuop_func op_3168_0_ff; extern cpuop_func op_3170_0_nf; extern cpuop_func op_3170_0_ff; extern cpuop_func op_3178_0_nf; extern cpuop_func op_3178_0_ff; extern cpuop_func op_3179_0_nf; extern cpuop_func op_3179_0_ff; extern cpuop_func op_317a_0_nf; extern cpuop_func op_317a_0_ff; extern cpuop_func op_317b_0_nf; extern cpuop_func op_317b_0_ff; extern cpuop_func op_317c_0_nf; extern cpuop_func op_317c_0_ff; extern cpuop_func op_3180_0_nf; extern cpuop_func op_3180_0_ff; extern cpuop_func op_3188_0_nf; extern cpuop_func op_3188_0_ff; extern cpuop_func op_3190_0_nf; extern cpuop_func op_3190_0_ff; extern cpuop_func op_3198_0_nf; extern cpuop_func op_3198_0_ff; extern cpuop_func op_31a0_0_nf; extern cpuop_func op_31a0_0_ff; extern cpuop_func op_31a8_0_nf; extern cpuop_func op_31a8_0_ff; extern cpuop_func op_31b0_0_nf; extern cpuop_func op_31b0_0_ff; extern cpuop_func op_31b8_0_nf; extern cpuop_func op_31b8_0_ff; extern cpuop_func op_31b9_0_nf; extern cpuop_func op_31b9_0_ff; extern cpuop_func op_31ba_0_nf; extern cpuop_func op_31ba_0_ff; extern cpuop_func op_31bb_0_nf; extern cpuop_func op_31bb_0_ff; extern cpuop_func op_31bc_0_nf; extern cpuop_func op_31bc_0_ff; extern cpuop_func op_31c0_0_nf; extern cpuop_func op_31c0_0_ff; extern cpuop_func op_31c8_0_nf; extern cpuop_func op_31c8_0_ff; extern cpuop_func op_31d0_0_nf; extern cpuop_func op_31d0_0_ff; extern cpuop_func op_31d8_0_nf; extern cpuop_func op_31d8_0_ff; extern cpuop_func op_31e0_0_nf; extern cpuop_func op_31e0_0_ff; extern cpuop_func op_31e8_0_nf; extern cpuop_func op_31e8_0_ff; extern cpuop_func op_31f0_0_nf; extern cpuop_func op_31f0_0_ff; extern cpuop_func op_31f8_0_nf; extern cpuop_func op_31f8_0_ff; extern cpuop_func op_31f9_0_nf; extern cpuop_func op_31f9_0_ff; extern cpuop_func op_31fa_0_nf; extern cpuop_func op_31fa_0_ff; extern cpuop_func op_31fb_0_nf; extern cpuop_func op_31fb_0_ff; extern cpuop_func op_31fc_0_nf; extern cpuop_func op_31fc_0_ff; extern cpuop_func op_33c0_0_nf; extern cpuop_func op_33c0_0_ff; extern cpuop_func op_33c8_0_nf; extern cpuop_func op_33c8_0_ff; extern cpuop_func op_33d0_0_nf; extern cpuop_func op_33d0_0_ff; extern cpuop_func op_33d8_0_nf; extern cpuop_func op_33d8_0_ff; extern cpuop_func op_33e0_0_nf; extern cpuop_func op_33e0_0_ff; extern cpuop_func op_33e8_0_nf; extern cpuop_func op_33e8_0_ff; extern cpuop_func op_33f0_0_nf; extern cpuop_func op_33f0_0_ff; extern cpuop_func op_33f8_0_nf; extern cpuop_func op_33f8_0_ff; extern cpuop_func op_33f9_0_nf; extern cpuop_func op_33f9_0_ff; extern cpuop_func op_33fa_0_nf; extern cpuop_func op_33fa_0_ff; extern cpuop_func op_33fb_0_nf; extern cpuop_func op_33fb_0_ff; extern cpuop_func op_33fc_0_nf; extern cpuop_func op_33fc_0_ff; extern cpuop_func op_4000_0_nf; extern cpuop_func op_4000_0_ff; extern cpuop_func op_4010_0_nf; extern cpuop_func op_4010_0_ff; extern cpuop_func op_4018_0_nf; extern cpuop_func op_4018_0_ff; extern cpuop_func op_4020_0_nf; extern cpuop_func op_4020_0_ff; extern cpuop_func op_4028_0_nf; extern cpuop_func op_4028_0_ff; extern cpuop_func op_4030_0_nf; extern cpuop_func op_4030_0_ff; extern cpuop_func op_4038_0_nf; extern cpuop_func op_4038_0_ff; extern cpuop_func op_4039_0_nf; extern cpuop_func op_4039_0_ff; extern cpuop_func op_4040_0_nf; extern cpuop_func op_4040_0_ff; extern cpuop_func op_4050_0_nf; extern cpuop_func op_4050_0_ff; extern cpuop_func op_4058_0_nf; extern cpuop_func op_4058_0_ff; extern cpuop_func op_4060_0_nf; extern cpuop_func op_4060_0_ff; extern cpuop_func op_4068_0_nf; extern cpuop_func op_4068_0_ff; extern cpuop_func op_4070_0_nf; extern cpuop_func op_4070_0_ff; extern cpuop_func op_4078_0_nf; extern cpuop_func op_4078_0_ff; extern cpuop_func op_4079_0_nf; extern cpuop_func op_4079_0_ff; extern cpuop_func op_4080_0_nf; extern cpuop_func op_4080_0_ff; extern cpuop_func op_4090_0_nf; extern cpuop_func op_4090_0_ff; extern cpuop_func op_4098_0_nf; extern cpuop_func op_4098_0_ff; extern cpuop_func op_40a0_0_nf; extern cpuop_func op_40a0_0_ff; extern cpuop_func op_40a8_0_nf; extern cpuop_func op_40a8_0_ff; extern cpuop_func op_40b0_0_nf; extern cpuop_func op_40b0_0_ff; extern cpuop_func op_40b8_0_nf; extern cpuop_func op_40b8_0_ff; extern cpuop_func op_40b9_0_nf; extern cpuop_func op_40b9_0_ff; extern cpuop_func op_40c0_0_nf; extern cpuop_func op_40c0_0_ff; extern cpuop_func op_40d0_0_nf; extern cpuop_func op_40d0_0_ff; extern cpuop_func op_40d8_0_nf; extern cpuop_func op_40d8_0_ff; extern cpuop_func op_40e0_0_nf; extern cpuop_func op_40e0_0_ff; extern cpuop_func op_40e8_0_nf; extern cpuop_func op_40e8_0_ff; extern cpuop_func op_40f0_0_nf; extern cpuop_func op_40f0_0_ff; extern cpuop_func op_40f8_0_nf; extern cpuop_func op_40f8_0_ff; extern cpuop_func op_40f9_0_nf; extern cpuop_func op_40f9_0_ff; extern cpuop_func op_4100_0_nf; extern cpuop_func op_4100_0_ff; extern cpuop_func op_4110_0_nf; extern cpuop_func op_4110_0_ff; extern cpuop_func op_4118_0_nf; extern cpuop_func op_4118_0_ff; extern cpuop_func op_4120_0_nf; extern cpuop_func op_4120_0_ff; extern cpuop_func op_4128_0_nf; extern cpuop_func op_4128_0_ff; extern cpuop_func op_4130_0_nf; extern cpuop_func op_4130_0_ff; extern cpuop_func op_4138_0_nf; extern cpuop_func op_4138_0_ff; extern cpuop_func op_4139_0_nf; extern cpuop_func op_4139_0_ff; extern cpuop_func op_413a_0_nf; extern cpuop_func op_413a_0_ff; extern cpuop_func op_413b_0_nf; extern cpuop_func op_413b_0_ff; extern cpuop_func op_413c_0_nf; extern cpuop_func op_413c_0_ff; extern cpuop_func op_4180_0_nf; extern cpuop_func op_4180_0_ff; extern cpuop_func op_4190_0_nf; extern cpuop_func op_4190_0_ff; extern cpuop_func op_4198_0_nf; extern cpuop_func op_4198_0_ff; extern cpuop_func op_41a0_0_nf; extern cpuop_func op_41a0_0_ff; extern cpuop_func op_41a8_0_nf; extern cpuop_func op_41a8_0_ff; extern cpuop_func op_41b0_0_nf; extern cpuop_func op_41b0_0_ff; extern cpuop_func op_41b8_0_nf; extern cpuop_func op_41b8_0_ff; extern cpuop_func op_41b9_0_nf; extern cpuop_func op_41b9_0_ff; extern cpuop_func op_41ba_0_nf; extern cpuop_func op_41ba_0_ff; extern cpuop_func op_41bb_0_nf; extern cpuop_func op_41bb_0_ff; extern cpuop_func op_41bc_0_nf; extern cpuop_func op_41bc_0_ff; extern cpuop_func op_41d0_0_nf; extern cpuop_func op_41d0_0_ff; extern cpuop_func op_41e8_0_nf; extern cpuop_func op_41e8_0_ff; extern cpuop_func op_41f0_0_nf; extern cpuop_func op_41f0_0_ff; extern cpuop_func op_41f8_0_nf; extern cpuop_func op_41f8_0_ff; extern cpuop_func op_41f9_0_nf; extern cpuop_func op_41f9_0_ff; extern cpuop_func op_41fa_0_nf; extern cpuop_func op_41fa_0_ff; extern cpuop_func op_41fb_0_nf; extern cpuop_func op_41fb_0_ff; extern cpuop_func op_4200_0_nf; extern cpuop_func op_4200_0_ff; extern cpuop_func op_4210_0_nf; extern cpuop_func op_4210_0_ff; extern cpuop_func op_4218_0_nf; extern cpuop_func op_4218_0_ff; extern cpuop_func op_4220_0_nf; extern cpuop_func op_4220_0_ff; extern cpuop_func op_4228_0_nf; extern cpuop_func op_4228_0_ff; extern cpuop_func op_4230_0_nf; extern cpuop_func op_4230_0_ff; extern cpuop_func op_4238_0_nf; extern cpuop_func op_4238_0_ff; extern cpuop_func op_4239_0_nf; extern cpuop_func op_4239_0_ff; extern cpuop_func op_4240_0_nf; extern cpuop_func op_4240_0_ff; extern cpuop_func op_4250_0_nf; extern cpuop_func op_4250_0_ff; extern cpuop_func op_4258_0_nf; extern cpuop_func op_4258_0_ff; extern cpuop_func op_4260_0_nf; extern cpuop_func op_4260_0_ff; extern cpuop_func op_4268_0_nf; extern cpuop_func op_4268_0_ff; extern cpuop_func op_4270_0_nf; extern cpuop_func op_4270_0_ff; extern cpuop_func op_4278_0_nf; extern cpuop_func op_4278_0_ff; extern cpuop_func op_4279_0_nf; extern cpuop_func op_4279_0_ff; extern cpuop_func op_4280_0_nf; extern cpuop_func op_4280_0_ff; extern cpuop_func op_4290_0_nf; extern cpuop_func op_4290_0_ff; extern cpuop_func op_4298_0_nf; extern cpuop_func op_4298_0_ff; extern cpuop_func op_42a0_0_nf; extern cpuop_func op_42a0_0_ff; extern cpuop_func op_42a8_0_nf; extern cpuop_func op_42a8_0_ff; extern cpuop_func op_42b0_0_nf; extern cpuop_func op_42b0_0_ff; extern cpuop_func op_42b8_0_nf; extern cpuop_func op_42b8_0_ff; extern cpuop_func op_42b9_0_nf; extern cpuop_func op_42b9_0_ff; extern cpuop_func op_42c0_0_nf; extern cpuop_func op_42c0_0_ff; extern cpuop_func op_42d0_0_nf; extern cpuop_func op_42d0_0_ff; extern cpuop_func op_42d8_0_nf; extern cpuop_func op_42d8_0_ff; extern cpuop_func op_42e0_0_nf; extern cpuop_func op_42e0_0_ff; extern cpuop_func op_42e8_0_nf; extern cpuop_func op_42e8_0_ff; extern cpuop_func op_42f0_0_nf; extern cpuop_func op_42f0_0_ff; extern cpuop_func op_42f8_0_nf; extern cpuop_func op_42f8_0_ff; extern cpuop_func op_42f9_0_nf; extern cpuop_func op_42f9_0_ff; extern cpuop_func op_4400_0_nf; extern cpuop_func op_4400_0_ff; extern cpuop_func op_4410_0_nf; extern cpuop_func op_4410_0_ff; extern cpuop_func op_4418_0_nf; extern cpuop_func op_4418_0_ff; extern cpuop_func op_4420_0_nf; extern cpuop_func op_4420_0_ff; extern cpuop_func op_4428_0_nf; extern cpuop_func op_4428_0_ff; extern cpuop_func op_4430_0_nf; extern cpuop_func op_4430_0_ff; extern cpuop_func op_4438_0_nf; extern cpuop_func op_4438_0_ff; extern cpuop_func op_4439_0_nf; extern cpuop_func op_4439_0_ff; extern cpuop_func op_4440_0_nf; extern cpuop_func op_4440_0_ff; extern cpuop_func op_4450_0_nf; extern cpuop_func op_4450_0_ff; extern cpuop_func op_4458_0_nf; extern cpuop_func op_4458_0_ff; extern cpuop_func op_4460_0_nf; extern cpuop_func op_4460_0_ff; extern cpuop_func op_4468_0_nf; extern cpuop_func op_4468_0_ff; extern cpuop_func op_4470_0_nf; extern cpuop_func op_4470_0_ff; extern cpuop_func op_4478_0_nf; extern cpuop_func op_4478_0_ff; extern cpuop_func op_4479_0_nf; extern cpuop_func op_4479_0_ff; extern cpuop_func op_4480_0_nf; extern cpuop_func op_4480_0_ff; extern cpuop_func op_4490_0_nf; extern cpuop_func op_4490_0_ff; extern cpuop_func op_4498_0_nf; extern cpuop_func op_4498_0_ff; extern cpuop_func op_44a0_0_nf; extern cpuop_func op_44a0_0_ff; extern cpuop_func op_44a8_0_nf; extern cpuop_func op_44a8_0_ff; extern cpuop_func op_44b0_0_nf; extern cpuop_func op_44b0_0_ff; extern cpuop_func op_44b8_0_nf; extern cpuop_func op_44b8_0_ff; extern cpuop_func op_44b9_0_nf; extern cpuop_func op_44b9_0_ff; extern cpuop_func op_44c0_0_nf; extern cpuop_func op_44c0_0_ff; extern cpuop_func op_44d0_0_nf; extern cpuop_func op_44d0_0_ff; extern cpuop_func op_44d8_0_nf; extern cpuop_func op_44d8_0_ff; extern cpuop_func op_44e0_0_nf; extern cpuop_func op_44e0_0_ff; extern cpuop_func op_44e8_0_nf; extern cpuop_func op_44e8_0_ff; extern cpuop_func op_44f0_0_nf; extern cpuop_func op_44f0_0_ff; extern cpuop_func op_44f8_0_nf; extern cpuop_func op_44f8_0_ff; extern cpuop_func op_44f9_0_nf; extern cpuop_func op_44f9_0_ff; extern cpuop_func op_44fa_0_nf; extern cpuop_func op_44fa_0_ff; extern cpuop_func op_44fb_0_nf; extern cpuop_func op_44fb_0_ff; extern cpuop_func op_44fc_0_nf; extern cpuop_func op_44fc_0_ff; extern cpuop_func op_4600_0_nf; extern cpuop_func op_4600_0_ff; extern cpuop_func op_4610_0_nf; extern cpuop_func op_4610_0_ff; extern cpuop_func op_4618_0_nf; extern cpuop_func op_4618_0_ff; extern cpuop_func op_4620_0_nf; extern cpuop_func op_4620_0_ff; extern cpuop_func op_4628_0_nf; extern cpuop_func op_4628_0_ff; extern cpuop_func op_4630_0_nf; extern cpuop_func op_4630_0_ff; extern cpuop_func op_4638_0_nf; extern cpuop_func op_4638_0_ff; extern cpuop_func op_4639_0_nf; extern cpuop_func op_4639_0_ff; extern cpuop_func op_4640_0_nf; extern cpuop_func op_4640_0_ff; extern cpuop_func op_4650_0_nf; extern cpuop_func op_4650_0_ff; extern cpuop_func op_4658_0_nf; extern cpuop_func op_4658_0_ff; extern cpuop_func op_4660_0_nf; extern cpuop_func op_4660_0_ff; extern cpuop_func op_4668_0_nf; extern cpuop_func op_4668_0_ff; extern cpuop_func op_4670_0_nf; extern cpuop_func op_4670_0_ff; extern cpuop_func op_4678_0_nf; extern cpuop_func op_4678_0_ff; extern cpuop_func op_4679_0_nf; extern cpuop_func op_4679_0_ff; extern cpuop_func op_4680_0_nf; extern cpuop_func op_4680_0_ff; extern cpuop_func op_4690_0_nf; extern cpuop_func op_4690_0_ff; extern cpuop_func op_4698_0_nf; extern cpuop_func op_4698_0_ff; extern cpuop_func op_46a0_0_nf; extern cpuop_func op_46a0_0_ff; extern cpuop_func op_46a8_0_nf; extern cpuop_func op_46a8_0_ff; extern cpuop_func op_46b0_0_nf; extern cpuop_func op_46b0_0_ff; extern cpuop_func op_46b8_0_nf; extern cpuop_func op_46b8_0_ff; extern cpuop_func op_46b9_0_nf; extern cpuop_func op_46b9_0_ff; extern cpuop_func op_46c0_0_nf; extern cpuop_func op_46c0_0_ff; extern cpuop_func op_46d0_0_nf; extern cpuop_func op_46d0_0_ff; extern cpuop_func op_46d8_0_nf; extern cpuop_func op_46d8_0_ff; extern cpuop_func op_46e0_0_nf; extern cpuop_func op_46e0_0_ff; extern cpuop_func op_46e8_0_nf; extern cpuop_func op_46e8_0_ff; extern cpuop_func op_46f0_0_nf; extern cpuop_func op_46f0_0_ff; extern cpuop_func op_46f8_0_nf; extern cpuop_func op_46f8_0_ff; extern cpuop_func op_46f9_0_nf; extern cpuop_func op_46f9_0_ff; extern cpuop_func op_46fa_0_nf; extern cpuop_func op_46fa_0_ff; extern cpuop_func op_46fb_0_nf; extern cpuop_func op_46fb_0_ff; extern cpuop_func op_46fc_0_nf; extern cpuop_func op_46fc_0_ff; extern cpuop_func op_4800_0_nf; extern cpuop_func op_4800_0_ff; extern cpuop_func op_4808_0_nf; extern cpuop_func op_4808_0_ff; extern cpuop_func op_4810_0_nf; extern cpuop_func op_4810_0_ff; extern cpuop_func op_4818_0_nf; extern cpuop_func op_4818_0_ff; extern cpuop_func op_4820_0_nf; extern cpuop_func op_4820_0_ff; extern cpuop_func op_4828_0_nf; extern cpuop_func op_4828_0_ff; extern cpuop_func op_4830_0_nf; extern cpuop_func op_4830_0_ff; extern cpuop_func op_4838_0_nf; extern cpuop_func op_4838_0_ff; extern cpuop_func op_4839_0_nf; extern cpuop_func op_4839_0_ff; extern cpuop_func op_4840_0_nf; extern cpuop_func op_4840_0_ff; extern cpuop_func op_4848_0_nf; extern cpuop_func op_4848_0_ff; extern cpuop_func op_4850_0_nf; extern cpuop_func op_4850_0_ff; extern cpuop_func op_4868_0_nf; extern cpuop_func op_4868_0_ff; extern cpuop_func op_4870_0_nf; extern cpuop_func op_4870_0_ff; extern cpuop_func op_4878_0_nf; extern cpuop_func op_4878_0_ff; extern cpuop_func op_4879_0_nf; extern cpuop_func op_4879_0_ff; extern cpuop_func op_487a_0_nf; extern cpuop_func op_487a_0_ff; extern cpuop_func op_487b_0_nf; extern cpuop_func op_487b_0_ff; extern cpuop_func op_4880_0_nf; extern cpuop_func op_4880_0_ff; extern cpuop_func op_4890_0_nf; extern cpuop_func op_4890_0_ff; extern cpuop_func op_48a0_0_nf; extern cpuop_func op_48a0_0_ff; extern cpuop_func op_48a8_0_nf; extern cpuop_func op_48a8_0_ff; extern cpuop_func op_48b0_0_nf; extern cpuop_func op_48b0_0_ff; extern cpuop_func op_48b8_0_nf; extern cpuop_func op_48b8_0_ff; extern cpuop_func op_48b9_0_nf; extern cpuop_func op_48b9_0_ff; extern cpuop_func op_48c0_0_nf; extern cpuop_func op_48c0_0_ff; extern cpuop_func op_48d0_0_nf; extern cpuop_func op_48d0_0_ff; extern cpuop_func op_48e0_0_nf; extern cpuop_func op_48e0_0_ff; extern cpuop_func op_48e8_0_nf; extern cpuop_func op_48e8_0_ff; extern cpuop_func op_48f0_0_nf; extern cpuop_func op_48f0_0_ff; extern cpuop_func op_48f8_0_nf; extern cpuop_func op_48f8_0_ff; extern cpuop_func op_48f9_0_nf; extern cpuop_func op_48f9_0_ff; extern cpuop_func op_49c0_0_nf; extern cpuop_func op_49c0_0_ff; extern cpuop_func op_4a00_0_nf; extern cpuop_func op_4a00_0_ff; extern cpuop_func op_4a10_0_nf; extern cpuop_func op_4a10_0_ff; extern cpuop_func op_4a18_0_nf; extern cpuop_func op_4a18_0_ff; extern cpuop_func op_4a20_0_nf; extern cpuop_func op_4a20_0_ff; extern cpuop_func op_4a28_0_nf; extern cpuop_func op_4a28_0_ff; extern cpuop_func op_4a30_0_nf; extern cpuop_func op_4a30_0_ff; extern cpuop_func op_4a38_0_nf; extern cpuop_func op_4a38_0_ff; extern cpuop_func op_4a39_0_nf; extern cpuop_func op_4a39_0_ff; extern cpuop_func op_4a3a_0_nf; extern cpuop_func op_4a3a_0_ff; extern cpuop_func op_4a3b_0_nf; extern cpuop_func op_4a3b_0_ff; extern cpuop_func op_4a3c_0_nf; extern cpuop_func op_4a3c_0_ff; extern cpuop_func op_4a40_0_nf; extern cpuop_func op_4a40_0_ff; extern cpuop_func op_4a48_0_nf; extern cpuop_func op_4a48_0_ff; extern cpuop_func op_4a50_0_nf; extern cpuop_func op_4a50_0_ff; extern cpuop_func op_4a58_0_nf; extern cpuop_func op_4a58_0_ff; extern cpuop_func op_4a60_0_nf; extern cpuop_func op_4a60_0_ff; extern cpuop_func op_4a68_0_nf; extern cpuop_func op_4a68_0_ff; extern cpuop_func op_4a70_0_nf; extern cpuop_func op_4a70_0_ff; extern cpuop_func op_4a78_0_nf; extern cpuop_func op_4a78_0_ff; extern cpuop_func op_4a79_0_nf; extern cpuop_func op_4a79_0_ff; extern cpuop_func op_4a7a_0_nf; extern cpuop_func op_4a7a_0_ff; extern cpuop_func op_4a7b_0_nf; extern cpuop_func op_4a7b_0_ff; extern cpuop_func op_4a7c_0_nf; extern cpuop_func op_4a7c_0_ff; extern cpuop_func op_4a80_0_nf; extern cpuop_func op_4a80_0_ff; extern cpuop_func op_4a88_0_nf; extern cpuop_func op_4a88_0_ff; extern cpuop_func op_4a90_0_nf; extern cpuop_func op_4a90_0_ff; extern cpuop_func op_4a98_0_nf; extern cpuop_func op_4a98_0_ff; extern cpuop_func op_4aa0_0_nf; extern cpuop_func op_4aa0_0_ff; extern cpuop_func op_4aa8_0_nf; extern cpuop_func op_4aa8_0_ff; extern cpuop_func op_4ab0_0_nf; extern cpuop_func op_4ab0_0_ff; extern cpuop_func op_4ab8_0_nf; extern cpuop_func op_4ab8_0_ff; extern cpuop_func op_4ab9_0_nf; extern cpuop_func op_4ab9_0_ff; extern cpuop_func op_4aba_0_nf; extern cpuop_func op_4aba_0_ff; extern cpuop_func op_4abb_0_nf; extern cpuop_func op_4abb_0_ff; extern cpuop_func op_4abc_0_nf; extern cpuop_func op_4abc_0_ff; extern cpuop_func op_4ac0_0_nf; extern cpuop_func op_4ac0_0_ff; extern cpuop_func op_4ad0_0_nf; extern cpuop_func op_4ad0_0_ff; extern cpuop_func op_4ad8_0_nf; extern cpuop_func op_4ad8_0_ff; extern cpuop_func op_4ae0_0_nf; extern cpuop_func op_4ae0_0_ff; extern cpuop_func op_4ae8_0_nf; extern cpuop_func op_4ae8_0_ff; extern cpuop_func op_4af0_0_nf; extern cpuop_func op_4af0_0_ff; extern cpuop_func op_4af8_0_nf; extern cpuop_func op_4af8_0_ff; extern cpuop_func op_4af9_0_nf; extern cpuop_func op_4af9_0_ff; extern cpuop_func op_4c00_0_nf; extern cpuop_func op_4c00_0_ff; extern cpuop_func op_4c10_0_nf; extern cpuop_func op_4c10_0_ff; extern cpuop_func op_4c18_0_nf; extern cpuop_func op_4c18_0_ff; extern cpuop_func op_4c20_0_nf; extern cpuop_func op_4c20_0_ff; extern cpuop_func op_4c28_0_nf; extern cpuop_func op_4c28_0_ff; extern cpuop_func op_4c30_0_nf; extern cpuop_func op_4c30_0_ff; extern cpuop_func op_4c38_0_nf; extern cpuop_func op_4c38_0_ff; extern cpuop_func op_4c39_0_nf; extern cpuop_func op_4c39_0_ff; extern cpuop_func op_4c3a_0_nf; extern cpuop_func op_4c3a_0_ff; extern cpuop_func op_4c3b_0_nf; extern cpuop_func op_4c3b_0_ff; extern cpuop_func op_4c3c_0_nf; extern cpuop_func op_4c3c_0_ff; extern cpuop_func op_4c40_0_nf; extern cpuop_func op_4c40_0_ff; extern cpuop_func op_4c50_0_nf; extern cpuop_func op_4c50_0_ff; extern cpuop_func op_4c58_0_nf; extern cpuop_func op_4c58_0_ff; extern cpuop_func op_4c60_0_nf; extern cpuop_func op_4c60_0_ff; extern cpuop_func op_4c68_0_nf; extern cpuop_func op_4c68_0_ff; extern cpuop_func op_4c70_0_nf; extern cpuop_func op_4c70_0_ff; extern cpuop_func op_4c78_0_nf; extern cpuop_func op_4c78_0_ff; extern cpuop_func op_4c79_0_nf; extern cpuop_func op_4c79_0_ff; extern cpuop_func op_4c7a_0_nf; extern cpuop_func op_4c7a_0_ff; extern cpuop_func op_4c7b_0_nf; extern cpuop_func op_4c7b_0_ff; extern cpuop_func op_4c7c_0_nf; extern cpuop_func op_4c7c_0_ff; extern cpuop_func op_4c90_0_nf; extern cpuop_func op_4c90_0_ff; extern cpuop_func op_4c98_0_nf; extern cpuop_func op_4c98_0_ff; extern cpuop_func op_4ca8_0_nf; extern cpuop_func op_4ca8_0_ff; extern cpuop_func op_4cb0_0_nf; extern cpuop_func op_4cb0_0_ff; extern cpuop_func op_4cb8_0_nf; extern cpuop_func op_4cb8_0_ff; extern cpuop_func op_4cb9_0_nf; extern cpuop_func op_4cb9_0_ff; extern cpuop_func op_4cba_0_nf; extern cpuop_func op_4cba_0_ff; extern cpuop_func op_4cbb_0_nf; extern cpuop_func op_4cbb_0_ff; extern cpuop_func op_4cd0_0_nf; extern cpuop_func op_4cd0_0_ff; extern cpuop_func op_4cd8_0_nf; extern cpuop_func op_4cd8_0_ff; extern cpuop_func op_4ce8_0_nf; extern cpuop_func op_4ce8_0_ff; extern cpuop_func op_4cf0_0_nf; extern cpuop_func op_4cf0_0_ff; extern cpuop_func op_4cf8_0_nf; extern cpuop_func op_4cf8_0_ff; extern cpuop_func op_4cf9_0_nf; extern cpuop_func op_4cf9_0_ff; extern cpuop_func op_4cfa_0_nf; extern cpuop_func op_4cfa_0_ff; extern cpuop_func op_4cfb_0_nf; extern cpuop_func op_4cfb_0_ff; extern cpuop_func op_4e40_0_nf; extern cpuop_func op_4e40_0_ff; extern cpuop_func op_4e50_0_nf; extern cpuop_func op_4e50_0_ff; extern cpuop_func op_4e58_0_nf; extern cpuop_func op_4e58_0_ff; extern cpuop_func op_4e60_0_nf; extern cpuop_func op_4e60_0_ff; extern cpuop_func op_4e68_0_nf; extern cpuop_func op_4e68_0_ff; extern cpuop_func op_4e70_0_nf; extern cpuop_func op_4e70_0_ff; extern cpuop_func op_4e71_0_nf; extern cpuop_func op_4e71_0_ff; extern cpuop_func op_4e72_0_nf; extern cpuop_func op_4e72_0_ff; extern cpuop_func op_4e73_0_nf; extern cpuop_func op_4e73_0_ff; extern cpuop_func op_4e74_0_nf; extern cpuop_func op_4e74_0_ff; extern cpuop_func op_4e75_0_nf; extern cpuop_func op_4e75_0_ff; extern cpuop_func op_4e76_0_nf; extern cpuop_func op_4e76_0_ff; extern cpuop_func op_4e77_0_nf; extern cpuop_func op_4e77_0_ff; extern cpuop_func op_4e7a_0_nf; extern cpuop_func op_4e7a_0_ff; extern cpuop_func op_4e7b_0_nf; extern cpuop_func op_4e7b_0_ff; extern cpuop_func op_4e90_0_nf; extern cpuop_func op_4e90_0_ff; extern cpuop_func op_4ea8_0_nf; extern cpuop_func op_4ea8_0_ff; extern cpuop_func op_4eb0_0_nf; extern cpuop_func op_4eb0_0_ff; extern cpuop_func op_4eb8_0_nf; extern cpuop_func op_4eb8_0_ff; extern cpuop_func op_4eb9_0_nf; extern cpuop_func op_4eb9_0_ff; extern cpuop_func op_4eba_0_nf; extern cpuop_func op_4eba_0_ff; extern cpuop_func op_4ebb_0_nf; extern cpuop_func op_4ebb_0_ff; extern cpuop_func op_4ed0_0_nf; extern cpuop_func op_4ed0_0_ff; extern cpuop_func op_4ee8_0_nf; extern cpuop_func op_4ee8_0_ff; extern cpuop_func op_4ef0_0_nf; extern cpuop_func op_4ef0_0_ff; extern cpuop_func op_4ef8_0_nf; extern cpuop_func op_4ef8_0_ff; extern cpuop_func op_4ef9_0_nf; extern cpuop_func op_4ef9_0_ff; extern cpuop_func op_4efa_0_nf; extern cpuop_func op_4efa_0_ff; extern cpuop_func op_4efb_0_nf; extern cpuop_func op_4efb_0_ff; extern cpuop_func op_5000_0_nf; extern cpuop_func op_5000_0_ff; extern cpuop_func op_5010_0_nf; extern cpuop_func op_5010_0_ff; extern cpuop_func op_5018_0_nf; extern cpuop_func op_5018_0_ff; extern cpuop_func op_5020_0_nf; extern cpuop_func op_5020_0_ff; extern cpuop_func op_5028_0_nf; extern cpuop_func op_5028_0_ff; extern cpuop_func op_5030_0_nf; extern cpuop_func op_5030_0_ff; extern cpuop_func op_5038_0_nf; extern cpuop_func op_5038_0_ff; extern cpuop_func op_5039_0_nf; extern cpuop_func op_5039_0_ff; extern cpuop_func op_5040_0_nf; extern cpuop_func op_5040_0_ff; extern cpuop_func op_5048_0_nf; extern cpuop_func op_5048_0_ff; extern cpuop_func op_5050_0_nf; extern cpuop_func op_5050_0_ff; extern cpuop_func op_5058_0_nf; extern cpuop_func op_5058_0_ff; extern cpuop_func op_5060_0_nf; extern cpuop_func op_5060_0_ff; extern cpuop_func op_5068_0_nf; extern cpuop_func op_5068_0_ff; extern cpuop_func op_5070_0_nf; extern cpuop_func op_5070_0_ff; extern cpuop_func op_5078_0_nf; extern cpuop_func op_5078_0_ff; extern cpuop_func op_5079_0_nf; extern cpuop_func op_5079_0_ff; extern cpuop_func op_5080_0_nf; extern cpuop_func op_5080_0_ff; extern cpuop_func op_5088_0_nf; extern cpuop_func op_5088_0_ff; extern cpuop_func op_5090_0_nf; extern cpuop_func op_5090_0_ff; extern cpuop_func op_5098_0_nf; extern cpuop_func op_5098_0_ff; extern cpuop_func op_50a0_0_nf; extern cpuop_func op_50a0_0_ff; extern cpuop_func op_50a8_0_nf; extern cpuop_func op_50a8_0_ff; extern cpuop_func op_50b0_0_nf; extern cpuop_func op_50b0_0_ff; extern cpuop_func op_50b8_0_nf; extern cpuop_func op_50b8_0_ff; extern cpuop_func op_50b9_0_nf; extern cpuop_func op_50b9_0_ff; extern cpuop_func op_50c0_0_nf; extern cpuop_func op_50c0_0_ff; extern cpuop_func op_50c8_0_nf; extern cpuop_func op_50c8_0_ff; extern cpuop_func op_50d0_0_nf; extern cpuop_func op_50d0_0_ff; extern cpuop_func op_50d8_0_nf; extern cpuop_func op_50d8_0_ff; extern cpuop_func op_50e0_0_nf; extern cpuop_func op_50e0_0_ff; extern cpuop_func op_50e8_0_nf; extern cpuop_func op_50e8_0_ff; extern cpuop_func op_50f0_0_nf; extern cpuop_func op_50f0_0_ff; extern cpuop_func op_50f8_0_nf; extern cpuop_func op_50f8_0_ff; extern cpuop_func op_50f9_0_nf; extern cpuop_func op_50f9_0_ff; extern cpuop_func op_50fa_0_nf; extern cpuop_func op_50fa_0_ff; extern cpuop_func op_50fb_0_nf; extern cpuop_func op_50fb_0_ff; extern cpuop_func op_50fc_0_nf; extern cpuop_func op_50fc_0_ff; extern cpuop_func op_5100_0_nf; extern cpuop_func op_5100_0_ff; extern cpuop_func op_5110_0_nf; extern cpuop_func op_5110_0_ff; extern cpuop_func op_5118_0_nf; extern cpuop_func op_5118_0_ff; extern cpuop_func op_5120_0_nf; extern cpuop_func op_5120_0_ff; extern cpuop_func op_5128_0_nf; extern cpuop_func op_5128_0_ff; extern cpuop_func op_5130_0_nf; extern cpuop_func op_5130_0_ff; extern cpuop_func op_5138_0_nf; extern cpuop_func op_5138_0_ff; extern cpuop_func op_5139_0_nf; extern cpuop_func op_5139_0_ff; extern cpuop_func op_5140_0_nf; extern cpuop_func op_5140_0_ff; extern cpuop_func op_5148_0_nf; extern cpuop_func op_5148_0_ff; extern cpuop_func op_5150_0_nf; extern cpuop_func op_5150_0_ff; extern cpuop_func op_5158_0_nf; extern cpuop_func op_5158_0_ff; extern cpuop_func op_5160_0_nf; extern cpuop_func op_5160_0_ff; extern cpuop_func op_5168_0_nf; extern cpuop_func op_5168_0_ff; extern cpuop_func op_5170_0_nf; extern cpuop_func op_5170_0_ff; extern cpuop_func op_5178_0_nf; extern cpuop_func op_5178_0_ff; extern cpuop_func op_5179_0_nf; extern cpuop_func op_5179_0_ff; extern cpuop_func op_5180_0_nf; extern cpuop_func op_5180_0_ff; extern cpuop_func op_5188_0_nf; extern cpuop_func op_5188_0_ff; extern cpuop_func op_5190_0_nf; extern cpuop_func op_5190_0_ff; extern cpuop_func op_5198_0_nf; extern cpuop_func op_5198_0_ff; extern cpuop_func op_51a0_0_nf; extern cpuop_func op_51a0_0_ff; extern cpuop_func op_51a8_0_nf; extern cpuop_func op_51a8_0_ff; extern cpuop_func op_51b0_0_nf; extern cpuop_func op_51b0_0_ff; extern cpuop_func op_51b8_0_nf; extern cpuop_func op_51b8_0_ff; extern cpuop_func op_51b9_0_nf; extern cpuop_func op_51b9_0_ff; extern cpuop_func op_51c0_0_nf; extern cpuop_func op_51c0_0_ff; extern cpuop_func op_51c8_0_nf; extern cpuop_func op_51c8_0_ff; extern cpuop_func op_51d0_0_nf; extern cpuop_func op_51d0_0_ff; extern cpuop_func op_51d8_0_nf; extern cpuop_func op_51d8_0_ff; extern cpuop_func op_51e0_0_nf; extern cpuop_func op_51e0_0_ff; extern cpuop_func op_51e8_0_nf; extern cpuop_func op_51e8_0_ff; extern cpuop_func op_51f0_0_nf; extern cpuop_func op_51f0_0_ff; extern cpuop_func op_51f8_0_nf; extern cpuop_func op_51f8_0_ff; extern cpuop_func op_51f9_0_nf; extern cpuop_func op_51f9_0_ff; extern cpuop_func op_51fa_0_nf; extern cpuop_func op_51fa_0_ff; extern cpuop_func op_51fb_0_nf; extern cpuop_func op_51fb_0_ff; extern cpuop_func op_51fc_0_nf; extern cpuop_func op_51fc_0_ff; extern cpuop_func op_52c0_0_nf; extern cpuop_func op_52c0_0_ff; extern cpuop_func op_52c8_0_nf; extern cpuop_func op_52c8_0_ff; extern cpuop_func op_52d0_0_nf; extern cpuop_func op_52d0_0_ff; extern cpuop_func op_52d8_0_nf; extern cpuop_func op_52d8_0_ff; extern cpuop_func op_52e0_0_nf; extern cpuop_func op_52e0_0_ff; extern cpuop_func op_52e8_0_nf; extern cpuop_func op_52e8_0_ff; extern cpuop_func op_52f0_0_nf; extern cpuop_func op_52f0_0_ff; extern cpuop_func op_52f8_0_nf; extern cpuop_func op_52f8_0_ff; extern cpuop_func op_52f9_0_nf; extern cpuop_func op_52f9_0_ff; extern cpuop_func op_52fa_0_nf; extern cpuop_func op_52fa_0_ff; extern cpuop_func op_52fb_0_nf; extern cpuop_func op_52fb_0_ff; extern cpuop_func op_52fc_0_nf; extern cpuop_func op_52fc_0_ff; extern cpuop_func op_53c0_0_nf; extern cpuop_func op_53c0_0_ff; extern cpuop_func op_53c8_0_nf; extern cpuop_func op_53c8_0_ff; extern cpuop_func op_53d0_0_nf; extern cpuop_func op_53d0_0_ff; extern cpuop_func op_53d8_0_nf; extern cpuop_func op_53d8_0_ff; extern cpuop_func op_53e0_0_nf; extern cpuop_func op_53e0_0_ff; extern cpuop_func op_53e8_0_nf; extern cpuop_func op_53e8_0_ff; extern cpuop_func op_53f0_0_nf; extern cpuop_func op_53f0_0_ff; extern cpuop_func op_53f8_0_nf; extern cpuop_func op_53f8_0_ff; extern cpuop_func op_53f9_0_nf; extern cpuop_func op_53f9_0_ff; extern cpuop_func op_53fa_0_nf; extern cpuop_func op_53fa_0_ff; extern cpuop_func op_53fb_0_nf; extern cpuop_func op_53fb_0_ff; extern cpuop_func op_53fc_0_nf; extern cpuop_func op_53fc_0_ff; extern cpuop_func op_54c0_0_nf; extern cpuop_func op_54c0_0_ff; extern cpuop_func op_54c8_0_nf; extern cpuop_func op_54c8_0_ff; extern cpuop_func op_54d0_0_nf; extern cpuop_func op_54d0_0_ff; extern cpuop_func op_54d8_0_nf; extern cpuop_func op_54d8_0_ff; extern cpuop_func op_54e0_0_nf; extern cpuop_func op_54e0_0_ff; extern cpuop_func op_54e8_0_nf; extern cpuop_func op_54e8_0_ff; extern cpuop_func op_54f0_0_nf; extern cpuop_func op_54f0_0_ff; extern cpuop_func op_54f8_0_nf; extern cpuop_func op_54f8_0_ff; extern cpuop_func op_54f9_0_nf; extern cpuop_func op_54f9_0_ff; extern cpuop_func op_54fa_0_nf; extern cpuop_func op_54fa_0_ff; extern cpuop_func op_54fb_0_nf; extern cpuop_func op_54fb_0_ff; extern cpuop_func op_54fc_0_nf; extern cpuop_func op_54fc_0_ff; extern cpuop_func op_55c0_0_nf; extern cpuop_func op_55c0_0_ff; extern cpuop_func op_55c8_0_nf; extern cpuop_func op_55c8_0_ff; extern cpuop_func op_55d0_0_nf; extern cpuop_func op_55d0_0_ff; extern cpuop_func op_55d8_0_nf; extern cpuop_func op_55d8_0_ff; extern cpuop_func op_55e0_0_nf; extern cpuop_func op_55e0_0_ff; extern cpuop_func op_55e8_0_nf; extern cpuop_func op_55e8_0_ff; extern cpuop_func op_55f0_0_nf; extern cpuop_func op_55f0_0_ff; extern cpuop_func op_55f8_0_nf; extern cpuop_func op_55f8_0_ff; extern cpuop_func op_55f9_0_nf; extern cpuop_func op_55f9_0_ff; extern cpuop_func op_55fa_0_nf; extern cpuop_func op_55fa_0_ff; extern cpuop_func op_55fb_0_nf; extern cpuop_func op_55fb_0_ff; extern cpuop_func op_55fc_0_nf; extern cpuop_func op_55fc_0_ff; extern cpuop_func op_56c0_0_nf; extern cpuop_func op_56c0_0_ff; extern cpuop_func op_56c8_0_nf; extern cpuop_func op_56c8_0_ff; extern cpuop_func op_56d0_0_nf; extern cpuop_func op_56d0_0_ff; extern cpuop_func op_56d8_0_nf; extern cpuop_func op_56d8_0_ff; extern cpuop_func op_56e0_0_nf; extern cpuop_func op_56e0_0_ff; extern cpuop_func op_56e8_0_nf; extern cpuop_func op_56e8_0_ff; extern cpuop_func op_56f0_0_nf; extern cpuop_func op_56f0_0_ff; extern cpuop_func op_56f8_0_nf; extern cpuop_func op_56f8_0_ff; extern cpuop_func op_56f9_0_nf; extern cpuop_func op_56f9_0_ff; extern cpuop_func op_56fa_0_nf; extern cpuop_func op_56fa_0_ff; extern cpuop_func op_56fb_0_nf; extern cpuop_func op_56fb_0_ff; extern cpuop_func op_56fc_0_nf; extern cpuop_func op_56fc_0_ff; extern cpuop_func op_57c0_0_nf; extern cpuop_func op_57c0_0_ff; extern cpuop_func op_57c8_0_nf; extern cpuop_func op_57c8_0_ff; extern cpuop_func op_57d0_0_nf; extern cpuop_func op_57d0_0_ff; extern cpuop_func op_57d8_0_nf; extern cpuop_func op_57d8_0_ff; extern cpuop_func op_57e0_0_nf; extern cpuop_func op_57e0_0_ff; extern cpuop_func op_57e8_0_nf; extern cpuop_func op_57e8_0_ff; extern cpuop_func op_57f0_0_nf; extern cpuop_func op_57f0_0_ff; extern cpuop_func op_57f8_0_nf; extern cpuop_func op_57f8_0_ff; extern cpuop_func op_57f9_0_nf; extern cpuop_func op_57f9_0_ff; extern cpuop_func op_57fa_0_nf; extern cpuop_func op_57fa_0_ff; extern cpuop_func op_57fb_0_nf; extern cpuop_func op_57fb_0_ff; extern cpuop_func op_57fc_0_nf; extern cpuop_func op_57fc_0_ff; extern cpuop_func op_58c0_0_nf; extern cpuop_func op_58c0_0_ff; extern cpuop_func op_58c8_0_nf; extern cpuop_func op_58c8_0_ff; extern cpuop_func op_58d0_0_nf; extern cpuop_func op_58d0_0_ff; extern cpuop_func op_58d8_0_nf; extern cpuop_func op_58d8_0_ff; extern cpuop_func op_58e0_0_nf; extern cpuop_func op_58e0_0_ff; extern cpuop_func op_58e8_0_nf; extern cpuop_func op_58e8_0_ff; extern cpuop_func op_58f0_0_nf; extern cpuop_func op_58f0_0_ff; extern cpuop_func op_58f8_0_nf; extern cpuop_func op_58f8_0_ff; extern cpuop_func op_58f9_0_nf; extern cpuop_func op_58f9_0_ff; extern cpuop_func op_58fa_0_nf; extern cpuop_func op_58fa_0_ff; extern cpuop_func op_58fb_0_nf; extern cpuop_func op_58fb_0_ff; extern cpuop_func op_58fc_0_nf; extern cpuop_func op_58fc_0_ff; extern cpuop_func op_59c0_0_nf; extern cpuop_func op_59c0_0_ff; extern cpuop_func op_59c8_0_nf; extern cpuop_func op_59c8_0_ff; extern cpuop_func op_59d0_0_nf; extern cpuop_func op_59d0_0_ff; extern cpuop_func op_59d8_0_nf; extern cpuop_func op_59d8_0_ff; extern cpuop_func op_59e0_0_nf; extern cpuop_func op_59e0_0_ff; extern cpuop_func op_59e8_0_nf; extern cpuop_func op_59e8_0_ff; extern cpuop_func op_59f0_0_nf; extern cpuop_func op_59f0_0_ff; extern cpuop_func op_59f8_0_nf; extern cpuop_func op_59f8_0_ff; extern cpuop_func op_59f9_0_nf; extern cpuop_func op_59f9_0_ff; extern cpuop_func op_59fa_0_nf; extern cpuop_func op_59fa_0_ff; extern cpuop_func op_59fb_0_nf; extern cpuop_func op_59fb_0_ff; extern cpuop_func op_59fc_0_nf; extern cpuop_func op_59fc_0_ff; extern cpuop_func op_5ac0_0_nf; extern cpuop_func op_5ac0_0_ff; extern cpuop_func op_5ac8_0_nf; extern cpuop_func op_5ac8_0_ff; extern cpuop_func op_5ad0_0_nf; extern cpuop_func op_5ad0_0_ff; extern cpuop_func op_5ad8_0_nf; extern cpuop_func op_5ad8_0_ff; extern cpuop_func op_5ae0_0_nf; extern cpuop_func op_5ae0_0_ff; extern cpuop_func op_5ae8_0_nf; extern cpuop_func op_5ae8_0_ff; extern cpuop_func op_5af0_0_nf; extern cpuop_func op_5af0_0_ff; extern cpuop_func op_5af8_0_nf; extern cpuop_func op_5af8_0_ff; extern cpuop_func op_5af9_0_nf; extern cpuop_func op_5af9_0_ff; extern cpuop_func op_5afa_0_nf; extern cpuop_func op_5afa_0_ff; extern cpuop_func op_5afb_0_nf; extern cpuop_func op_5afb_0_ff; extern cpuop_func op_5afc_0_nf; extern cpuop_func op_5afc_0_ff; extern cpuop_func op_5bc0_0_nf; extern cpuop_func op_5bc0_0_ff; extern cpuop_func op_5bc8_0_nf; extern cpuop_func op_5bc8_0_ff; extern cpuop_func op_5bd0_0_nf; extern cpuop_func op_5bd0_0_ff; extern cpuop_func op_5bd8_0_nf; extern cpuop_func op_5bd8_0_ff; extern cpuop_func op_5be0_0_nf; extern cpuop_func op_5be0_0_ff; extern cpuop_func op_5be8_0_nf; extern cpuop_func op_5be8_0_ff; extern cpuop_func op_5bf0_0_nf; extern cpuop_func op_5bf0_0_ff; extern cpuop_func op_5bf8_0_nf; extern cpuop_func op_5bf8_0_ff; extern cpuop_func op_5bf9_0_nf; extern cpuop_func op_5bf9_0_ff; extern cpuop_func op_5bfa_0_nf; extern cpuop_func op_5bfa_0_ff; extern cpuop_func op_5bfb_0_nf; extern cpuop_func op_5bfb_0_ff; extern cpuop_func op_5bfc_0_nf; extern cpuop_func op_5bfc_0_ff; extern cpuop_func op_5cc0_0_nf; extern cpuop_func op_5cc0_0_ff; extern cpuop_func op_5cc8_0_nf; extern cpuop_func op_5cc8_0_ff; extern cpuop_func op_5cd0_0_nf; extern cpuop_func op_5cd0_0_ff; extern cpuop_func op_5cd8_0_nf; extern cpuop_func op_5cd8_0_ff; extern cpuop_func op_5ce0_0_nf; extern cpuop_func op_5ce0_0_ff; extern cpuop_func op_5ce8_0_nf; extern cpuop_func op_5ce8_0_ff; extern cpuop_func op_5cf0_0_nf; extern cpuop_func op_5cf0_0_ff; extern cpuop_func op_5cf8_0_nf; extern cpuop_func op_5cf8_0_ff; extern cpuop_func op_5cf9_0_nf; extern cpuop_func op_5cf9_0_ff; extern cpuop_func op_5cfa_0_nf; extern cpuop_func op_5cfa_0_ff; extern cpuop_func op_5cfb_0_nf; extern cpuop_func op_5cfb_0_ff; extern cpuop_func op_5cfc_0_nf; extern cpuop_func op_5cfc_0_ff; extern cpuop_func op_5dc0_0_nf; extern cpuop_func op_5dc0_0_ff; extern cpuop_func op_5dc8_0_nf; extern cpuop_func op_5dc8_0_ff; extern cpuop_func op_5dd0_0_nf; extern cpuop_func op_5dd0_0_ff; extern cpuop_func op_5dd8_0_nf; extern cpuop_func op_5dd8_0_ff; extern cpuop_func op_5de0_0_nf; extern cpuop_func op_5de0_0_ff; extern cpuop_func op_5de8_0_nf; extern cpuop_func op_5de8_0_ff; extern cpuop_func op_5df0_0_nf; extern cpuop_func op_5df0_0_ff; extern cpuop_func op_5df8_0_nf; extern cpuop_func op_5df8_0_ff; extern cpuop_func op_5df9_0_nf; extern cpuop_func op_5df9_0_ff; extern cpuop_func op_5dfa_0_nf; extern cpuop_func op_5dfa_0_ff; extern cpuop_func op_5dfb_0_nf; extern cpuop_func op_5dfb_0_ff; extern cpuop_func op_5dfc_0_nf; extern cpuop_func op_5dfc_0_ff; extern cpuop_func op_5ec0_0_nf; extern cpuop_func op_5ec0_0_ff; extern cpuop_func op_5ec8_0_nf; extern cpuop_func op_5ec8_0_ff; extern cpuop_func op_5ed0_0_nf; extern cpuop_func op_5ed0_0_ff; extern cpuop_func op_5ed8_0_nf; extern cpuop_func op_5ed8_0_ff; extern cpuop_func op_5ee0_0_nf; extern cpuop_func op_5ee0_0_ff; extern cpuop_func op_5ee8_0_nf; extern cpuop_func op_5ee8_0_ff; extern cpuop_func op_5ef0_0_nf; extern cpuop_func op_5ef0_0_ff; extern cpuop_func op_5ef8_0_nf; extern cpuop_func op_5ef8_0_ff; extern cpuop_func op_5ef9_0_nf; extern cpuop_func op_5ef9_0_ff; extern cpuop_func op_5efa_0_nf; extern cpuop_func op_5efa_0_ff; extern cpuop_func op_5efb_0_nf; extern cpuop_func op_5efb_0_ff; extern cpuop_func op_5efc_0_nf; extern cpuop_func op_5efc_0_ff; extern cpuop_func op_5fc0_0_nf; extern cpuop_func op_5fc0_0_ff; extern cpuop_func op_5fc8_0_nf; extern cpuop_func op_5fc8_0_ff; extern cpuop_func op_5fd0_0_nf; extern cpuop_func op_5fd0_0_ff; extern cpuop_func op_5fd8_0_nf; extern cpuop_func op_5fd8_0_ff; extern cpuop_func op_5fe0_0_nf; extern cpuop_func op_5fe0_0_ff; extern cpuop_func op_5fe8_0_nf; extern cpuop_func op_5fe8_0_ff; extern cpuop_func op_5ff0_0_nf; extern cpuop_func op_5ff0_0_ff; extern cpuop_func op_5ff8_0_nf; extern cpuop_func op_5ff8_0_ff; extern cpuop_func op_5ff9_0_nf; extern cpuop_func op_5ff9_0_ff; extern cpuop_func op_5ffa_0_nf; extern cpuop_func op_5ffa_0_ff; extern cpuop_func op_5ffb_0_nf; extern cpuop_func op_5ffb_0_ff; extern cpuop_func op_5ffc_0_nf; extern cpuop_func op_5ffc_0_ff; extern cpuop_func op_6000_0_nf; extern cpuop_func op_6000_0_ff; extern cpuop_func op_6001_0_nf; extern cpuop_func op_6001_0_ff; extern cpuop_func op_60ff_0_nf; extern cpuop_func op_60ff_0_ff; extern cpuop_func op_6100_0_nf; extern cpuop_func op_6100_0_ff; extern cpuop_func op_6101_0_nf; extern cpuop_func op_6101_0_ff; extern cpuop_func op_61ff_0_nf; extern cpuop_func op_61ff_0_ff; extern cpuop_func op_6200_0_nf; extern cpuop_func op_6200_0_ff; extern cpuop_func op_6201_0_nf; extern cpuop_func op_6201_0_ff; extern cpuop_func op_62ff_0_nf; extern cpuop_func op_62ff_0_ff; extern cpuop_func op_6300_0_nf; extern cpuop_func op_6300_0_ff; extern cpuop_func op_6301_0_nf; extern cpuop_func op_6301_0_ff; extern cpuop_func op_63ff_0_nf; extern cpuop_func op_63ff_0_ff; extern cpuop_func op_6400_0_nf; extern cpuop_func op_6400_0_ff; extern cpuop_func op_6401_0_nf; extern cpuop_func op_6401_0_ff; extern cpuop_func op_64ff_0_nf; extern cpuop_func op_64ff_0_ff; extern cpuop_func op_6500_0_nf; extern cpuop_func op_6500_0_ff; extern cpuop_func op_6501_0_nf; extern cpuop_func op_6501_0_ff; extern cpuop_func op_65ff_0_nf; extern cpuop_func op_65ff_0_ff; extern cpuop_func op_6600_0_nf; extern cpuop_func op_6600_0_ff; extern cpuop_func op_6601_0_nf; extern cpuop_func op_6601_0_ff; extern cpuop_func op_66ff_0_nf; extern cpuop_func op_66ff_0_ff; extern cpuop_func op_6700_0_nf; extern cpuop_func op_6700_0_ff; extern cpuop_func op_6701_0_nf; extern cpuop_func op_6701_0_ff; extern cpuop_func op_67ff_0_nf; extern cpuop_func op_67ff_0_ff; extern cpuop_func op_6800_0_nf; extern cpuop_func op_6800_0_ff; extern cpuop_func op_6801_0_nf; extern cpuop_func op_6801_0_ff; extern cpuop_func op_68ff_0_nf; extern cpuop_func op_68ff_0_ff; extern cpuop_func op_6900_0_nf; extern cpuop_func op_6900_0_ff; extern cpuop_func op_6901_0_nf; extern cpuop_func op_6901_0_ff; extern cpuop_func op_69ff_0_nf; extern cpuop_func op_69ff_0_ff; extern cpuop_func op_6a00_0_nf; extern cpuop_func op_6a00_0_ff; extern cpuop_func op_6a01_0_nf; extern cpuop_func op_6a01_0_ff; extern cpuop_func op_6aff_0_nf; extern cpuop_func op_6aff_0_ff; extern cpuop_func op_6b00_0_nf; extern cpuop_func op_6b00_0_ff; extern cpuop_func op_6b01_0_nf; extern cpuop_func op_6b01_0_ff; extern cpuop_func op_6bff_0_nf; extern cpuop_func op_6bff_0_ff; extern cpuop_func op_6c00_0_nf; extern cpuop_func op_6c00_0_ff; extern cpuop_func op_6c01_0_nf; extern cpuop_func op_6c01_0_ff; extern cpuop_func op_6cff_0_nf; extern cpuop_func op_6cff_0_ff; extern cpuop_func op_6d00_0_nf; extern cpuop_func op_6d00_0_ff; extern cpuop_func op_6d01_0_nf; extern cpuop_func op_6d01_0_ff; extern cpuop_func op_6dff_0_nf; extern cpuop_func op_6dff_0_ff; extern cpuop_func op_6e00_0_nf; extern cpuop_func op_6e00_0_ff; extern cpuop_func op_6e01_0_nf; extern cpuop_func op_6e01_0_ff; extern cpuop_func op_6eff_0_nf; extern cpuop_func op_6eff_0_ff; extern cpuop_func op_6f00_0_nf; extern cpuop_func op_6f00_0_ff; extern cpuop_func op_6f01_0_nf; extern cpuop_func op_6f01_0_ff; extern cpuop_func op_6fff_0_nf; extern cpuop_func op_6fff_0_ff; extern cpuop_func op_7000_0_nf; extern cpuop_func op_7000_0_ff; extern cpuop_func op_8000_0_nf; extern cpuop_func op_8000_0_ff; extern cpuop_func op_8010_0_nf; extern cpuop_func op_8010_0_ff; extern cpuop_func op_8018_0_nf; extern cpuop_func op_8018_0_ff; extern cpuop_func op_8020_0_nf; extern cpuop_func op_8020_0_ff; extern cpuop_func op_8028_0_nf; extern cpuop_func op_8028_0_ff; extern cpuop_func op_8030_0_nf; extern cpuop_func op_8030_0_ff; extern cpuop_func op_8038_0_nf; extern cpuop_func op_8038_0_ff; extern cpuop_func op_8039_0_nf; extern cpuop_func op_8039_0_ff; extern cpuop_func op_803a_0_nf; extern cpuop_func op_803a_0_ff; extern cpuop_func op_803b_0_nf; extern cpuop_func op_803b_0_ff; extern cpuop_func op_803c_0_nf; extern cpuop_func op_803c_0_ff; extern cpuop_func op_8040_0_nf; extern cpuop_func op_8040_0_ff; extern cpuop_func op_8050_0_nf; extern cpuop_func op_8050_0_ff; extern cpuop_func op_8058_0_nf; extern cpuop_func op_8058_0_ff; extern cpuop_func op_8060_0_nf; extern cpuop_func op_8060_0_ff; extern cpuop_func op_8068_0_nf; extern cpuop_func op_8068_0_ff; extern cpuop_func op_8070_0_nf; extern cpuop_func op_8070_0_ff; extern cpuop_func op_8078_0_nf; extern cpuop_func op_8078_0_ff; extern cpuop_func op_8079_0_nf; extern cpuop_func op_8079_0_ff; extern cpuop_func op_807a_0_nf; extern cpuop_func op_807a_0_ff; extern cpuop_func op_807b_0_nf; extern cpuop_func op_807b_0_ff; extern cpuop_func op_807c_0_nf; extern cpuop_func op_807c_0_ff; extern cpuop_func op_8080_0_nf; extern cpuop_func op_8080_0_ff; extern cpuop_func op_8090_0_nf; extern cpuop_func op_8090_0_ff; extern cpuop_func op_8098_0_nf; extern cpuop_func op_8098_0_ff; extern cpuop_func op_80a0_0_nf; extern cpuop_func op_80a0_0_ff; extern cpuop_func op_80a8_0_nf; extern cpuop_func op_80a8_0_ff; extern cpuop_func op_80b0_0_nf; extern cpuop_func op_80b0_0_ff; extern cpuop_func op_80b8_0_nf; extern cpuop_func op_80b8_0_ff; extern cpuop_func op_80b9_0_nf; extern cpuop_func op_80b9_0_ff; extern cpuop_func op_80ba_0_nf; extern cpuop_func op_80ba_0_ff; extern cpuop_func op_80bb_0_nf; extern cpuop_func op_80bb_0_ff; extern cpuop_func op_80bc_0_nf; extern cpuop_func op_80bc_0_ff; extern cpuop_func op_80c0_0_nf; extern cpuop_func op_80c0_0_ff; extern cpuop_func op_80d0_0_nf; extern cpuop_func op_80d0_0_ff; extern cpuop_func op_80d8_0_nf; extern cpuop_func op_80d8_0_ff; extern cpuop_func op_80e0_0_nf; extern cpuop_func op_80e0_0_ff; extern cpuop_func op_80e8_0_nf; extern cpuop_func op_80e8_0_ff; extern cpuop_func op_80f0_0_nf; extern cpuop_func op_80f0_0_ff; extern cpuop_func op_80f8_0_nf; extern cpuop_func op_80f8_0_ff; extern cpuop_func op_80f9_0_nf; extern cpuop_func op_80f9_0_ff; extern cpuop_func op_80fa_0_nf; extern cpuop_func op_80fa_0_ff; extern cpuop_func op_80fb_0_nf; extern cpuop_func op_80fb_0_ff; extern cpuop_func op_80fc_0_nf; extern cpuop_func op_80fc_0_ff; extern cpuop_func op_8100_0_nf; extern cpuop_func op_8100_0_ff; extern cpuop_func op_8108_0_nf; extern cpuop_func op_8108_0_ff; extern cpuop_func op_8110_0_nf; extern cpuop_func op_8110_0_ff; extern cpuop_func op_8118_0_nf; extern cpuop_func op_8118_0_ff; extern cpuop_func op_8120_0_nf; extern cpuop_func op_8120_0_ff; extern cpuop_func op_8128_0_nf; extern cpuop_func op_8128_0_ff; extern cpuop_func op_8130_0_nf; extern cpuop_func op_8130_0_ff; extern cpuop_func op_8138_0_nf; extern cpuop_func op_8138_0_ff; extern cpuop_func op_8139_0_nf; extern cpuop_func op_8139_0_ff; extern cpuop_func op_8140_0_nf; extern cpuop_func op_8140_0_ff; extern cpuop_func op_8148_0_nf; extern cpuop_func op_8148_0_ff; extern cpuop_func op_8150_0_nf; extern cpuop_func op_8150_0_ff; extern cpuop_func op_8158_0_nf; extern cpuop_func op_8158_0_ff; extern cpuop_func op_8160_0_nf; extern cpuop_func op_8160_0_ff; extern cpuop_func op_8168_0_nf; extern cpuop_func op_8168_0_ff; extern cpuop_func op_8170_0_nf; extern cpuop_func op_8170_0_ff; extern cpuop_func op_8178_0_nf; extern cpuop_func op_8178_0_ff; extern cpuop_func op_8179_0_nf; extern cpuop_func op_8179_0_ff; extern cpuop_func op_8180_0_nf; extern cpuop_func op_8180_0_ff; extern cpuop_func op_8188_0_nf; extern cpuop_func op_8188_0_ff; extern cpuop_func op_8190_0_nf; extern cpuop_func op_8190_0_ff; extern cpuop_func op_8198_0_nf; extern cpuop_func op_8198_0_ff; extern cpuop_func op_81a0_0_nf; extern cpuop_func op_81a0_0_ff; extern cpuop_func op_81a8_0_nf; extern cpuop_func op_81a8_0_ff; extern cpuop_func op_81b0_0_nf; extern cpuop_func op_81b0_0_ff; extern cpuop_func op_81b8_0_nf; extern cpuop_func op_81b8_0_ff; extern cpuop_func op_81b9_0_nf; extern cpuop_func op_81b9_0_ff; extern cpuop_func op_81c0_0_nf; extern cpuop_func op_81c0_0_ff; extern cpuop_func op_81d0_0_nf; extern cpuop_func op_81d0_0_ff; extern cpuop_func op_81d8_0_nf; extern cpuop_func op_81d8_0_ff; extern cpuop_func op_81e0_0_nf; extern cpuop_func op_81e0_0_ff; extern cpuop_func op_81e8_0_nf; extern cpuop_func op_81e8_0_ff; extern cpuop_func op_81f0_0_nf; extern cpuop_func op_81f0_0_ff; extern cpuop_func op_81f8_0_nf; extern cpuop_func op_81f8_0_ff; extern cpuop_func op_81f9_0_nf; extern cpuop_func op_81f9_0_ff; extern cpuop_func op_81fa_0_nf; extern cpuop_func op_81fa_0_ff; extern cpuop_func op_81fb_0_nf; extern cpuop_func op_81fb_0_ff; extern cpuop_func op_81fc_0_nf; extern cpuop_func op_81fc_0_ff; extern cpuop_func op_9000_0_nf; extern cpuop_func op_9000_0_ff; extern cpuop_func op_9010_0_nf; extern cpuop_func op_9010_0_ff; extern cpuop_func op_9018_0_nf; extern cpuop_func op_9018_0_ff; extern cpuop_func op_9020_0_nf; extern cpuop_func op_9020_0_ff; extern cpuop_func op_9028_0_nf; extern cpuop_func op_9028_0_ff; extern cpuop_func op_9030_0_nf; extern cpuop_func op_9030_0_ff; extern cpuop_func op_9038_0_nf; extern cpuop_func op_9038_0_ff; extern cpuop_func op_9039_0_nf; extern cpuop_func op_9039_0_ff; extern cpuop_func op_903a_0_nf; extern cpuop_func op_903a_0_ff; extern cpuop_func op_903b_0_nf; extern cpuop_func op_903b_0_ff; extern cpuop_func op_903c_0_nf; extern cpuop_func op_903c_0_ff; extern cpuop_func op_9040_0_nf; extern cpuop_func op_9040_0_ff; extern cpuop_func op_9048_0_nf; extern cpuop_func op_9048_0_ff; extern cpuop_func op_9050_0_nf; extern cpuop_func op_9050_0_ff; extern cpuop_func op_9058_0_nf; extern cpuop_func op_9058_0_ff; extern cpuop_func op_9060_0_nf; extern cpuop_func op_9060_0_ff; extern cpuop_func op_9068_0_nf; extern cpuop_func op_9068_0_ff; extern cpuop_func op_9070_0_nf; extern cpuop_func op_9070_0_ff; extern cpuop_func op_9078_0_nf; extern cpuop_func op_9078_0_ff; extern cpuop_func op_9079_0_nf; extern cpuop_func op_9079_0_ff; extern cpuop_func op_907a_0_nf; extern cpuop_func op_907a_0_ff; extern cpuop_func op_907b_0_nf; extern cpuop_func op_907b_0_ff; extern cpuop_func op_907c_0_nf; extern cpuop_func op_907c_0_ff; extern cpuop_func op_9080_0_nf; extern cpuop_func op_9080_0_ff; extern cpuop_func op_9088_0_nf; extern cpuop_func op_9088_0_ff; extern cpuop_func op_9090_0_nf; extern cpuop_func op_9090_0_ff; extern cpuop_func op_9098_0_nf; extern cpuop_func op_9098_0_ff; extern cpuop_func op_90a0_0_nf; extern cpuop_func op_90a0_0_ff; extern cpuop_func op_90a8_0_nf; extern cpuop_func op_90a8_0_ff; extern cpuop_func op_90b0_0_nf; extern cpuop_func op_90b0_0_ff; extern cpuop_func op_90b8_0_nf; extern cpuop_func op_90b8_0_ff; extern cpuop_func op_90b9_0_nf; extern cpuop_func op_90b9_0_ff; extern cpuop_func op_90ba_0_nf; extern cpuop_func op_90ba_0_ff; extern cpuop_func op_90bb_0_nf; extern cpuop_func op_90bb_0_ff; extern cpuop_func op_90bc_0_nf; extern cpuop_func op_90bc_0_ff; extern cpuop_func op_90c0_0_nf; extern cpuop_func op_90c0_0_ff; extern cpuop_func op_90c8_0_nf; extern cpuop_func op_90c8_0_ff; extern cpuop_func op_90d0_0_nf; extern cpuop_func op_90d0_0_ff; extern cpuop_func op_90d8_0_nf; extern cpuop_func op_90d8_0_ff; extern cpuop_func op_90e0_0_nf; extern cpuop_func op_90e0_0_ff; extern cpuop_func op_90e8_0_nf; extern cpuop_func op_90e8_0_ff; extern cpuop_func op_90f0_0_nf; extern cpuop_func op_90f0_0_ff; extern cpuop_func op_90f8_0_nf; extern cpuop_func op_90f8_0_ff; extern cpuop_func op_90f9_0_nf; extern cpuop_func op_90f9_0_ff; extern cpuop_func op_90fa_0_nf; extern cpuop_func op_90fa_0_ff; extern cpuop_func op_90fb_0_nf; extern cpuop_func op_90fb_0_ff; extern cpuop_func op_90fc_0_nf; extern cpuop_func op_90fc_0_ff; extern cpuop_func op_9100_0_nf; extern cpuop_func op_9100_0_ff; extern cpuop_func op_9108_0_nf; extern cpuop_func op_9108_0_ff; extern cpuop_func op_9110_0_nf; extern cpuop_func op_9110_0_ff; extern cpuop_func op_9118_0_nf; extern cpuop_func op_9118_0_ff; extern cpuop_func op_9120_0_nf; extern cpuop_func op_9120_0_ff; extern cpuop_func op_9128_0_nf; extern cpuop_func op_9128_0_ff; extern cpuop_func op_9130_0_nf; extern cpuop_func op_9130_0_ff; extern cpuop_func op_9138_0_nf; extern cpuop_func op_9138_0_ff; extern cpuop_func op_9139_0_nf; extern cpuop_func op_9139_0_ff; extern cpuop_func op_9140_0_nf; extern cpuop_func op_9140_0_ff; extern cpuop_func op_9148_0_nf; extern cpuop_func op_9148_0_ff; extern cpuop_func op_9150_0_nf; extern cpuop_func op_9150_0_ff; extern cpuop_func op_9158_0_nf; extern cpuop_func op_9158_0_ff; extern cpuop_func op_9160_0_nf; extern cpuop_func op_9160_0_ff; extern cpuop_func op_9168_0_nf; extern cpuop_func op_9168_0_ff; extern cpuop_func op_9170_0_nf; extern cpuop_func op_9170_0_ff; extern cpuop_func op_9178_0_nf; extern cpuop_func op_9178_0_ff; extern cpuop_func op_9179_0_nf; extern cpuop_func op_9179_0_ff; extern cpuop_func op_9180_0_nf; extern cpuop_func op_9180_0_ff; extern cpuop_func op_9188_0_nf; extern cpuop_func op_9188_0_ff; extern cpuop_func op_9190_0_nf; extern cpuop_func op_9190_0_ff; extern cpuop_func op_9198_0_nf; extern cpuop_func op_9198_0_ff; extern cpuop_func op_91a0_0_nf; extern cpuop_func op_91a0_0_ff; extern cpuop_func op_91a8_0_nf; extern cpuop_func op_91a8_0_ff; extern cpuop_func op_91b0_0_nf; extern cpuop_func op_91b0_0_ff; extern cpuop_func op_91b8_0_nf; extern cpuop_func op_91b8_0_ff; extern cpuop_func op_91b9_0_nf; extern cpuop_func op_91b9_0_ff; extern cpuop_func op_91c0_0_nf; extern cpuop_func op_91c0_0_ff; extern cpuop_func op_91c8_0_nf; extern cpuop_func op_91c8_0_ff; extern cpuop_func op_91d0_0_nf; extern cpuop_func op_91d0_0_ff; extern cpuop_func op_91d8_0_nf; extern cpuop_func op_91d8_0_ff; extern cpuop_func op_91e0_0_nf; extern cpuop_func op_91e0_0_ff; extern cpuop_func op_91e8_0_nf; extern cpuop_func op_91e8_0_ff; extern cpuop_func op_91f0_0_nf; extern cpuop_func op_91f0_0_ff; extern cpuop_func op_91f8_0_nf; extern cpuop_func op_91f8_0_ff; extern cpuop_func op_91f9_0_nf; extern cpuop_func op_91f9_0_ff; extern cpuop_func op_91fa_0_nf; extern cpuop_func op_91fa_0_ff; extern cpuop_func op_91fb_0_nf; extern cpuop_func op_91fb_0_ff; extern cpuop_func op_91fc_0_nf; extern cpuop_func op_91fc_0_ff; extern cpuop_func op_b000_0_nf; extern cpuop_func op_b000_0_ff; extern cpuop_func op_b010_0_nf; extern cpuop_func op_b010_0_ff; extern cpuop_func op_b018_0_nf; extern cpuop_func op_b018_0_ff; extern cpuop_func op_b020_0_nf; extern cpuop_func op_b020_0_ff; extern cpuop_func op_b028_0_nf; extern cpuop_func op_b028_0_ff; extern cpuop_func op_b030_0_nf; extern cpuop_func op_b030_0_ff; extern cpuop_func op_b038_0_nf; extern cpuop_func op_b038_0_ff; extern cpuop_func op_b039_0_nf; extern cpuop_func op_b039_0_ff; extern cpuop_func op_b03a_0_nf; extern cpuop_func op_b03a_0_ff; extern cpuop_func op_b03b_0_nf; extern cpuop_func op_b03b_0_ff; extern cpuop_func op_b03c_0_nf; extern cpuop_func op_b03c_0_ff; extern cpuop_func op_b040_0_nf; extern cpuop_func op_b040_0_ff; extern cpuop_func op_b048_0_nf; extern cpuop_func op_b048_0_ff; extern cpuop_func op_b050_0_nf; extern cpuop_func op_b050_0_ff; extern cpuop_func op_b058_0_nf; extern cpuop_func op_b058_0_ff; extern cpuop_func op_b060_0_nf; extern cpuop_func op_b060_0_ff; extern cpuop_func op_b068_0_nf; extern cpuop_func op_b068_0_ff; extern cpuop_func op_b070_0_nf; extern cpuop_func op_b070_0_ff; extern cpuop_func op_b078_0_nf; extern cpuop_func op_b078_0_ff; extern cpuop_func op_b079_0_nf; extern cpuop_func op_b079_0_ff; extern cpuop_func op_b07a_0_nf; extern cpuop_func op_b07a_0_ff; extern cpuop_func op_b07b_0_nf; extern cpuop_func op_b07b_0_ff; extern cpuop_func op_b07c_0_nf; extern cpuop_func op_b07c_0_ff; extern cpuop_func op_b080_0_nf; extern cpuop_func op_b080_0_ff; extern cpuop_func op_b088_0_nf; extern cpuop_func op_b088_0_ff; extern cpuop_func op_b090_0_nf; extern cpuop_func op_b090_0_ff; extern cpuop_func op_b098_0_nf; extern cpuop_func op_b098_0_ff; extern cpuop_func op_b0a0_0_nf; extern cpuop_func op_b0a0_0_ff; extern cpuop_func op_b0a8_0_nf; extern cpuop_func op_b0a8_0_ff; extern cpuop_func op_b0b0_0_nf; extern cpuop_func op_b0b0_0_ff; extern cpuop_func op_b0b8_0_nf; extern cpuop_func op_b0b8_0_ff; extern cpuop_func op_b0b9_0_nf; extern cpuop_func op_b0b9_0_ff; extern cpuop_func op_b0ba_0_nf; extern cpuop_func op_b0ba_0_ff; extern cpuop_func op_b0bb_0_nf; extern cpuop_func op_b0bb_0_ff; extern cpuop_func op_b0bc_0_nf; extern cpuop_func op_b0bc_0_ff; extern cpuop_func op_b0c0_0_nf; extern cpuop_func op_b0c0_0_ff; extern cpuop_func op_b0c8_0_nf; extern cpuop_func op_b0c8_0_ff; extern cpuop_func op_b0d0_0_nf; extern cpuop_func op_b0d0_0_ff; extern cpuop_func op_b0d8_0_nf; extern cpuop_func op_b0d8_0_ff; extern cpuop_func op_b0e0_0_nf; extern cpuop_func op_b0e0_0_ff; extern cpuop_func op_b0e8_0_nf; extern cpuop_func op_b0e8_0_ff; extern cpuop_func op_b0f0_0_nf; extern cpuop_func op_b0f0_0_ff; extern cpuop_func op_b0f8_0_nf; extern cpuop_func op_b0f8_0_ff; extern cpuop_func op_b0f9_0_nf; extern cpuop_func op_b0f9_0_ff; extern cpuop_func op_b0fa_0_nf; extern cpuop_func op_b0fa_0_ff; extern cpuop_func op_b0fb_0_nf; extern cpuop_func op_b0fb_0_ff; extern cpuop_func op_b0fc_0_nf; extern cpuop_func op_b0fc_0_ff; extern cpuop_func op_b100_0_nf; extern cpuop_func op_b100_0_ff; extern cpuop_func op_b108_0_nf; extern cpuop_func op_b108_0_ff; extern cpuop_func op_b110_0_nf; extern cpuop_func op_b110_0_ff; extern cpuop_func op_b118_0_nf; extern cpuop_func op_b118_0_ff; extern cpuop_func op_b120_0_nf; extern cpuop_func op_b120_0_ff; extern cpuop_func op_b128_0_nf; extern cpuop_func op_b128_0_ff; extern cpuop_func op_b130_0_nf; extern cpuop_func op_b130_0_ff; extern cpuop_func op_b138_0_nf; extern cpuop_func op_b138_0_ff; extern cpuop_func op_b139_0_nf; extern cpuop_func op_b139_0_ff; extern cpuop_func op_b140_0_nf; extern cpuop_func op_b140_0_ff; extern cpuop_func op_b148_0_nf; extern cpuop_func op_b148_0_ff; extern cpuop_func op_b150_0_nf; extern cpuop_func op_b150_0_ff; extern cpuop_func op_b158_0_nf; extern cpuop_func op_b158_0_ff; extern cpuop_func op_b160_0_nf; extern cpuop_func op_b160_0_ff; extern cpuop_func op_b168_0_nf; extern cpuop_func op_b168_0_ff; extern cpuop_func op_b170_0_nf; extern cpuop_func op_b170_0_ff; extern cpuop_func op_b178_0_nf; extern cpuop_func op_b178_0_ff; extern cpuop_func op_b179_0_nf; extern cpuop_func op_b179_0_ff; extern cpuop_func op_b180_0_nf; extern cpuop_func op_b180_0_ff; extern cpuop_func op_b188_0_nf; extern cpuop_func op_b188_0_ff; extern cpuop_func op_b190_0_nf; extern cpuop_func op_b190_0_ff; extern cpuop_func op_b198_0_nf; extern cpuop_func op_b198_0_ff; extern cpuop_func op_b1a0_0_nf; extern cpuop_func op_b1a0_0_ff; extern cpuop_func op_b1a8_0_nf; extern cpuop_func op_b1a8_0_ff; extern cpuop_func op_b1b0_0_nf; extern cpuop_func op_b1b0_0_ff; extern cpuop_func op_b1b8_0_nf; extern cpuop_func op_b1b8_0_ff; extern cpuop_func op_b1b9_0_nf; extern cpuop_func op_b1b9_0_ff; extern cpuop_func op_b1c0_0_nf; extern cpuop_func op_b1c0_0_ff; extern cpuop_func op_b1c8_0_nf; extern cpuop_func op_b1c8_0_ff; extern cpuop_func op_b1d0_0_nf; extern cpuop_func op_b1d0_0_ff; extern cpuop_func op_b1d8_0_nf; extern cpuop_func op_b1d8_0_ff; extern cpuop_func op_b1e0_0_nf; extern cpuop_func op_b1e0_0_ff; extern cpuop_func op_b1e8_0_nf; extern cpuop_func op_b1e8_0_ff; extern cpuop_func op_b1f0_0_nf; extern cpuop_func op_b1f0_0_ff; extern cpuop_func op_b1f8_0_nf; extern cpuop_func op_b1f8_0_ff; extern cpuop_func op_b1f9_0_nf; extern cpuop_func op_b1f9_0_ff; extern cpuop_func op_b1fa_0_nf; extern cpuop_func op_b1fa_0_ff; extern cpuop_func op_b1fb_0_nf; extern cpuop_func op_b1fb_0_ff; extern cpuop_func op_b1fc_0_nf; extern cpuop_func op_b1fc_0_ff; extern cpuop_func op_c000_0_nf; extern cpuop_func op_c000_0_ff; extern cpuop_func op_c010_0_nf; extern cpuop_func op_c010_0_ff; extern cpuop_func op_c018_0_nf; extern cpuop_func op_c018_0_ff; extern cpuop_func op_c020_0_nf; extern cpuop_func op_c020_0_ff; extern cpuop_func op_c028_0_nf; extern cpuop_func op_c028_0_ff; extern cpuop_func op_c030_0_nf; extern cpuop_func op_c030_0_ff; extern cpuop_func op_c038_0_nf; extern cpuop_func op_c038_0_ff; extern cpuop_func op_c039_0_nf; extern cpuop_func op_c039_0_ff; extern cpuop_func op_c03a_0_nf; extern cpuop_func op_c03a_0_ff; extern cpuop_func op_c03b_0_nf; extern cpuop_func op_c03b_0_ff; extern cpuop_func op_c03c_0_nf; extern cpuop_func op_c03c_0_ff; extern cpuop_func op_c040_0_nf; extern cpuop_func op_c040_0_ff; extern cpuop_func op_c050_0_nf; extern cpuop_func op_c050_0_ff; extern cpuop_func op_c058_0_nf; extern cpuop_func op_c058_0_ff; extern cpuop_func op_c060_0_nf; extern cpuop_func op_c060_0_ff; extern cpuop_func op_c068_0_nf; extern cpuop_func op_c068_0_ff; extern cpuop_func op_c070_0_nf; extern cpuop_func op_c070_0_ff; extern cpuop_func op_c078_0_nf; extern cpuop_func op_c078_0_ff; extern cpuop_func op_c079_0_nf; extern cpuop_func op_c079_0_ff; extern cpuop_func op_c07a_0_nf; extern cpuop_func op_c07a_0_ff; extern cpuop_func op_c07b_0_nf; extern cpuop_func op_c07b_0_ff; extern cpuop_func op_c07c_0_nf; extern cpuop_func op_c07c_0_ff; extern cpuop_func op_c080_0_nf; extern cpuop_func op_c080_0_ff; extern cpuop_func op_c090_0_nf; extern cpuop_func op_c090_0_ff; extern cpuop_func op_c098_0_nf; extern cpuop_func op_c098_0_ff; extern cpuop_func op_c0a0_0_nf; extern cpuop_func op_c0a0_0_ff; extern cpuop_func op_c0a8_0_nf; extern cpuop_func op_c0a8_0_ff; extern cpuop_func op_c0b0_0_nf; extern cpuop_func op_c0b0_0_ff; extern cpuop_func op_c0b8_0_nf; extern cpuop_func op_c0b8_0_ff; extern cpuop_func op_c0b9_0_nf; extern cpuop_func op_c0b9_0_ff; extern cpuop_func op_c0ba_0_nf; extern cpuop_func op_c0ba_0_ff; extern cpuop_func op_c0bb_0_nf; extern cpuop_func op_c0bb_0_ff; extern cpuop_func op_c0bc_0_nf; extern cpuop_func op_c0bc_0_ff; extern cpuop_func op_c0c0_0_nf; extern cpuop_func op_c0c0_0_ff; extern cpuop_func op_c0d0_0_nf; extern cpuop_func op_c0d0_0_ff; extern cpuop_func op_c0d8_0_nf; extern cpuop_func op_c0d8_0_ff; extern cpuop_func op_c0e0_0_nf; extern cpuop_func op_c0e0_0_ff; extern cpuop_func op_c0e8_0_nf; extern cpuop_func op_c0e8_0_ff; extern cpuop_func op_c0f0_0_nf; extern cpuop_func op_c0f0_0_ff; extern cpuop_func op_c0f8_0_nf; extern cpuop_func op_c0f8_0_ff; extern cpuop_func op_c0f9_0_nf; extern cpuop_func op_c0f9_0_ff; extern cpuop_func op_c0fa_0_nf; extern cpuop_func op_c0fa_0_ff; extern cpuop_func op_c0fb_0_nf; extern cpuop_func op_c0fb_0_ff; extern cpuop_func op_c0fc_0_nf; extern cpuop_func op_c0fc_0_ff; extern cpuop_func op_c100_0_nf; extern cpuop_func op_c100_0_ff; extern cpuop_func op_c108_0_nf; extern cpuop_func op_c108_0_ff; extern cpuop_func op_c110_0_nf; extern cpuop_func op_c110_0_ff; extern cpuop_func op_c118_0_nf; extern cpuop_func op_c118_0_ff; extern cpuop_func op_c120_0_nf; extern cpuop_func op_c120_0_ff; extern cpuop_func op_c128_0_nf; extern cpuop_func op_c128_0_ff; extern cpuop_func op_c130_0_nf; extern cpuop_func op_c130_0_ff; extern cpuop_func op_c138_0_nf; extern cpuop_func op_c138_0_ff; extern cpuop_func op_c139_0_nf; extern cpuop_func op_c139_0_ff; extern cpuop_func op_c140_0_nf; extern cpuop_func op_c140_0_ff; extern cpuop_func op_c148_0_nf; extern cpuop_func op_c148_0_ff; extern cpuop_func op_c150_0_nf; extern cpuop_func op_c150_0_ff; extern cpuop_func op_c158_0_nf; extern cpuop_func op_c158_0_ff; extern cpuop_func op_c160_0_nf; extern cpuop_func op_c160_0_ff; extern cpuop_func op_c168_0_nf; extern cpuop_func op_c168_0_ff; extern cpuop_func op_c170_0_nf; extern cpuop_func op_c170_0_ff; extern cpuop_func op_c178_0_nf; extern cpuop_func op_c178_0_ff; extern cpuop_func op_c179_0_nf; extern cpuop_func op_c179_0_ff; extern cpuop_func op_c188_0_nf; extern cpuop_func op_c188_0_ff; extern cpuop_func op_c190_0_nf; extern cpuop_func op_c190_0_ff; extern cpuop_func op_c198_0_nf; extern cpuop_func op_c198_0_ff; extern cpuop_func op_c1a0_0_nf; extern cpuop_func op_c1a0_0_ff; extern cpuop_func op_c1a8_0_nf; extern cpuop_func op_c1a8_0_ff; extern cpuop_func op_c1b0_0_nf; extern cpuop_func op_c1b0_0_ff; extern cpuop_func op_c1b8_0_nf; extern cpuop_func op_c1b8_0_ff; extern cpuop_func op_c1b9_0_nf; extern cpuop_func op_c1b9_0_ff; extern cpuop_func op_c1c0_0_nf; extern cpuop_func op_c1c0_0_ff; extern cpuop_func op_c1d0_0_nf; extern cpuop_func op_c1d0_0_ff; extern cpuop_func op_c1d8_0_nf; extern cpuop_func op_c1d8_0_ff; extern cpuop_func op_c1e0_0_nf; extern cpuop_func op_c1e0_0_ff; extern cpuop_func op_c1e8_0_nf; extern cpuop_func op_c1e8_0_ff; extern cpuop_func op_c1f0_0_nf; extern cpuop_func op_c1f0_0_ff; extern cpuop_func op_c1f8_0_nf; extern cpuop_func op_c1f8_0_ff; extern cpuop_func op_c1f9_0_nf; extern cpuop_func op_c1f9_0_ff; extern cpuop_func op_c1fa_0_nf; extern cpuop_func op_c1fa_0_ff; extern cpuop_func op_c1fb_0_nf; extern cpuop_func op_c1fb_0_ff; extern cpuop_func op_c1fc_0_nf; extern cpuop_func op_c1fc_0_ff; extern cpuop_func op_d000_0_nf; extern cpuop_func op_d000_0_ff; extern cpuop_func op_d010_0_nf; extern cpuop_func op_d010_0_ff; extern cpuop_func op_d018_0_nf; extern cpuop_func op_d018_0_ff; extern cpuop_func op_d020_0_nf; extern cpuop_func op_d020_0_ff; extern cpuop_func op_d028_0_nf; extern cpuop_func op_d028_0_ff; extern cpuop_func op_d030_0_nf; extern cpuop_func op_d030_0_ff; extern cpuop_func op_d038_0_nf; extern cpuop_func op_d038_0_ff; extern cpuop_func op_d039_0_nf; extern cpuop_func op_d039_0_ff; extern cpuop_func op_d03a_0_nf; extern cpuop_func op_d03a_0_ff; extern cpuop_func op_d03b_0_nf; extern cpuop_func op_d03b_0_ff; extern cpuop_func op_d03c_0_nf; extern cpuop_func op_d03c_0_ff; extern cpuop_func op_d040_0_nf; extern cpuop_func op_d040_0_ff; extern cpuop_func op_d048_0_nf; extern cpuop_func op_d048_0_ff; extern cpuop_func op_d050_0_nf; extern cpuop_func op_d050_0_ff; extern cpuop_func op_d058_0_nf; extern cpuop_func op_d058_0_ff; extern cpuop_func op_d060_0_nf; extern cpuop_func op_d060_0_ff; extern cpuop_func op_d068_0_nf; extern cpuop_func op_d068_0_ff; extern cpuop_func op_d070_0_nf; extern cpuop_func op_d070_0_ff; extern cpuop_func op_d078_0_nf; extern cpuop_func op_d078_0_ff; extern cpuop_func op_d079_0_nf; extern cpuop_func op_d079_0_ff; extern cpuop_func op_d07a_0_nf; extern cpuop_func op_d07a_0_ff; extern cpuop_func op_d07b_0_nf; extern cpuop_func op_d07b_0_ff; extern cpuop_func op_d07c_0_nf; extern cpuop_func op_d07c_0_ff; extern cpuop_func op_d080_0_nf; extern cpuop_func op_d080_0_ff; extern cpuop_func op_d088_0_nf; extern cpuop_func op_d088_0_ff; extern cpuop_func op_d090_0_nf; extern cpuop_func op_d090_0_ff; extern cpuop_func op_d098_0_nf; extern cpuop_func op_d098_0_ff; extern cpuop_func op_d0a0_0_nf; extern cpuop_func op_d0a0_0_ff; extern cpuop_func op_d0a8_0_nf; extern cpuop_func op_d0a8_0_ff; extern cpuop_func op_d0b0_0_nf; extern cpuop_func op_d0b0_0_ff; extern cpuop_func op_d0b8_0_nf; extern cpuop_func op_d0b8_0_ff; extern cpuop_func op_d0b9_0_nf; extern cpuop_func op_d0b9_0_ff; extern cpuop_func op_d0ba_0_nf; extern cpuop_func op_d0ba_0_ff; extern cpuop_func op_d0bb_0_nf; extern cpuop_func op_d0bb_0_ff; extern cpuop_func op_d0bc_0_nf; extern cpuop_func op_d0bc_0_ff; extern cpuop_func op_d0c0_0_nf; extern cpuop_func op_d0c0_0_ff; extern cpuop_func op_d0c8_0_nf; extern cpuop_func op_d0c8_0_ff; extern cpuop_func op_d0d0_0_nf; extern cpuop_func op_d0d0_0_ff; extern cpuop_func op_d0d8_0_nf; extern cpuop_func op_d0d8_0_ff; extern cpuop_func op_d0e0_0_nf; extern cpuop_func op_d0e0_0_ff; extern cpuop_func op_d0e8_0_nf; extern cpuop_func op_d0e8_0_ff; extern cpuop_func op_d0f0_0_nf; extern cpuop_func op_d0f0_0_ff; extern cpuop_func op_d0f8_0_nf; extern cpuop_func op_d0f8_0_ff; extern cpuop_func op_d0f9_0_nf; extern cpuop_func op_d0f9_0_ff; extern cpuop_func op_d0fa_0_nf; extern cpuop_func op_d0fa_0_ff; extern cpuop_func op_d0fb_0_nf; extern cpuop_func op_d0fb_0_ff; extern cpuop_func op_d0fc_0_nf; extern cpuop_func op_d0fc_0_ff; extern cpuop_func op_d100_0_nf; extern cpuop_func op_d100_0_ff; extern cpuop_func op_d108_0_nf; extern cpuop_func op_d108_0_ff; extern cpuop_func op_d110_0_nf; extern cpuop_func op_d110_0_ff; extern cpuop_func op_d118_0_nf; extern cpuop_func op_d118_0_ff; extern cpuop_func op_d120_0_nf; extern cpuop_func op_d120_0_ff; extern cpuop_func op_d128_0_nf; extern cpuop_func op_d128_0_ff; extern cpuop_func op_d130_0_nf; extern cpuop_func op_d130_0_ff; extern cpuop_func op_d138_0_nf; extern cpuop_func op_d138_0_ff; extern cpuop_func op_d139_0_nf; extern cpuop_func op_d139_0_ff; extern cpuop_func op_d140_0_nf; extern cpuop_func op_d140_0_ff; extern cpuop_func op_d148_0_nf; extern cpuop_func op_d148_0_ff; extern cpuop_func op_d150_0_nf; extern cpuop_func op_d150_0_ff; extern cpuop_func op_d158_0_nf; extern cpuop_func op_d158_0_ff; extern cpuop_func op_d160_0_nf; extern cpuop_func op_d160_0_ff; extern cpuop_func op_d168_0_nf; extern cpuop_func op_d168_0_ff; extern cpuop_func op_d170_0_nf; extern cpuop_func op_d170_0_ff; extern cpuop_func op_d178_0_nf; extern cpuop_func op_d178_0_ff; extern cpuop_func op_d179_0_nf; extern cpuop_func op_d179_0_ff; extern cpuop_func op_d180_0_nf; extern cpuop_func op_d180_0_ff; extern cpuop_func op_d188_0_nf; extern cpuop_func op_d188_0_ff; extern cpuop_func op_d190_0_nf; extern cpuop_func op_d190_0_ff; extern cpuop_func op_d198_0_nf; extern cpuop_func op_d198_0_ff; extern cpuop_func op_d1a0_0_nf; extern cpuop_func op_d1a0_0_ff; extern cpuop_func op_d1a8_0_nf; extern cpuop_func op_d1a8_0_ff; extern cpuop_func op_d1b0_0_nf; extern cpuop_func op_d1b0_0_ff; extern cpuop_func op_d1b8_0_nf; extern cpuop_func op_d1b8_0_ff; extern cpuop_func op_d1b9_0_nf; extern cpuop_func op_d1b9_0_ff; extern cpuop_func op_d1c0_0_nf; extern cpuop_func op_d1c0_0_ff; extern cpuop_func op_d1c8_0_nf; extern cpuop_func op_d1c8_0_ff; extern cpuop_func op_d1d0_0_nf; extern cpuop_func op_d1d0_0_ff; extern cpuop_func op_d1d8_0_nf; extern cpuop_func op_d1d8_0_ff; extern cpuop_func op_d1e0_0_nf; extern cpuop_func op_d1e0_0_ff; extern cpuop_func op_d1e8_0_nf; extern cpuop_func op_d1e8_0_ff; extern cpuop_func op_d1f0_0_nf; extern cpuop_func op_d1f0_0_ff; extern cpuop_func op_d1f8_0_nf; extern cpuop_func op_d1f8_0_ff; extern cpuop_func op_d1f9_0_nf; extern cpuop_func op_d1f9_0_ff; extern cpuop_func op_d1fa_0_nf; extern cpuop_func op_d1fa_0_ff; extern cpuop_func op_d1fb_0_nf; extern cpuop_func op_d1fb_0_ff; extern cpuop_func op_d1fc_0_nf; extern cpuop_func op_d1fc_0_ff; extern cpuop_func op_e000_0_nf; extern cpuop_func op_e000_0_ff; extern cpuop_func op_e008_0_nf; extern cpuop_func op_e008_0_ff; extern cpuop_func op_e010_0_nf; extern cpuop_func op_e010_0_ff; extern cpuop_func op_e018_0_nf; extern cpuop_func op_e018_0_ff; extern cpuop_func op_e020_0_nf; extern cpuop_func op_e020_0_ff; extern cpuop_func op_e028_0_nf; extern cpuop_func op_e028_0_ff; extern cpuop_func op_e030_0_nf; extern cpuop_func op_e030_0_ff; extern cpuop_func op_e038_0_nf; extern cpuop_func op_e038_0_ff; extern cpuop_func op_e040_0_nf; extern cpuop_func op_e040_0_ff; extern cpuop_func op_e048_0_nf; extern cpuop_func op_e048_0_ff; extern cpuop_func op_e050_0_nf; extern cpuop_func op_e050_0_ff; extern cpuop_func op_e058_0_nf; extern cpuop_func op_e058_0_ff; extern cpuop_func op_e060_0_nf; extern cpuop_func op_e060_0_ff; extern cpuop_func op_e068_0_nf; extern cpuop_func op_e068_0_ff; extern cpuop_func op_e070_0_nf; extern cpuop_func op_e070_0_ff; extern cpuop_func op_e078_0_nf; extern cpuop_func op_e078_0_ff; extern cpuop_func op_e080_0_nf; extern cpuop_func op_e080_0_ff; extern cpuop_func op_e088_0_nf; extern cpuop_func op_e088_0_ff; extern cpuop_func op_e090_0_nf; extern cpuop_func op_e090_0_ff; extern cpuop_func op_e098_0_nf; extern cpuop_func op_e098_0_ff; extern cpuop_func op_e0a0_0_nf; extern cpuop_func op_e0a0_0_ff; extern cpuop_func op_e0a8_0_nf; extern cpuop_func op_e0a8_0_ff; extern cpuop_func op_e0b0_0_nf; extern cpuop_func op_e0b0_0_ff; extern cpuop_func op_e0b8_0_nf; extern cpuop_func op_e0b8_0_ff; extern cpuop_func op_e0d0_0_nf; extern cpuop_func op_e0d0_0_ff; extern cpuop_func op_e0d8_0_nf; extern cpuop_func op_e0d8_0_ff; extern cpuop_func op_e0e0_0_nf; extern cpuop_func op_e0e0_0_ff; extern cpuop_func op_e0e8_0_nf; extern cpuop_func op_e0e8_0_ff; extern cpuop_func op_e0f0_0_nf; extern cpuop_func op_e0f0_0_ff; extern cpuop_func op_e0f8_0_nf; extern cpuop_func op_e0f8_0_ff; extern cpuop_func op_e0f9_0_nf; extern cpuop_func op_e0f9_0_ff; extern cpuop_func op_e100_0_nf; extern cpuop_func op_e100_0_ff; extern cpuop_func op_e108_0_nf; extern cpuop_func op_e108_0_ff; extern cpuop_func op_e110_0_nf; extern cpuop_func op_e110_0_ff; extern cpuop_func op_e118_0_nf; extern cpuop_func op_e118_0_ff; extern cpuop_func op_e120_0_nf; extern cpuop_func op_e120_0_ff; extern cpuop_func op_e128_0_nf; extern cpuop_func op_e128_0_ff; extern cpuop_func op_e130_0_nf; extern cpuop_func op_e130_0_ff; extern cpuop_func op_e138_0_nf; extern cpuop_func op_e138_0_ff; extern cpuop_func op_e140_0_nf; extern cpuop_func op_e140_0_ff; extern cpuop_func op_e148_0_nf; extern cpuop_func op_e148_0_ff; extern cpuop_func op_e150_0_nf; extern cpuop_func op_e150_0_ff; extern cpuop_func op_e158_0_nf; extern cpuop_func op_e158_0_ff; extern cpuop_func op_e160_0_nf; extern cpuop_func op_e160_0_ff; extern cpuop_func op_e168_0_nf; extern cpuop_func op_e168_0_ff; extern cpuop_func op_e170_0_nf; extern cpuop_func op_e170_0_ff; extern cpuop_func op_e178_0_nf; extern cpuop_func op_e178_0_ff; extern cpuop_func op_e180_0_nf; extern cpuop_func op_e180_0_ff; extern cpuop_func op_e188_0_nf; extern cpuop_func op_e188_0_ff; extern cpuop_func op_e190_0_nf; extern cpuop_func op_e190_0_ff; extern cpuop_func op_e198_0_nf; extern cpuop_func op_e198_0_ff; extern cpuop_func op_e1a0_0_nf; extern cpuop_func op_e1a0_0_ff; extern cpuop_func op_e1a8_0_nf; extern cpuop_func op_e1a8_0_ff; extern cpuop_func op_e1b0_0_nf; extern cpuop_func op_e1b0_0_ff; extern cpuop_func op_e1b8_0_nf; extern cpuop_func op_e1b8_0_ff; extern cpuop_func op_e1d0_0_nf; extern cpuop_func op_e1d0_0_ff; extern cpuop_func op_e1d8_0_nf; extern cpuop_func op_e1d8_0_ff; extern cpuop_func op_e1e0_0_nf; extern cpuop_func op_e1e0_0_ff; extern cpuop_func op_e1e8_0_nf; extern cpuop_func op_e1e8_0_ff; extern cpuop_func op_e1f0_0_nf; extern cpuop_func op_e1f0_0_ff; extern cpuop_func op_e1f8_0_nf; extern cpuop_func op_e1f8_0_ff; extern cpuop_func op_e1f9_0_nf; extern cpuop_func op_e1f9_0_ff; extern cpuop_func op_e2d0_0_nf; extern cpuop_func op_e2d0_0_ff; extern cpuop_func op_e2d8_0_nf; extern cpuop_func op_e2d8_0_ff; extern cpuop_func op_e2e0_0_nf; extern cpuop_func op_e2e0_0_ff; extern cpuop_func op_e2e8_0_nf; extern cpuop_func op_e2e8_0_ff; extern cpuop_func op_e2f0_0_nf; extern cpuop_func op_e2f0_0_ff; extern cpuop_func op_e2f8_0_nf; extern cpuop_func op_e2f8_0_ff; extern cpuop_func op_e2f9_0_nf; extern cpuop_func op_e2f9_0_ff; extern cpuop_func op_e3d0_0_nf; extern cpuop_func op_e3d0_0_ff; extern cpuop_func op_e3d8_0_nf; extern cpuop_func op_e3d8_0_ff; extern cpuop_func op_e3e0_0_nf; extern cpuop_func op_e3e0_0_ff; extern cpuop_func op_e3e8_0_nf; extern cpuop_func op_e3e8_0_ff; extern cpuop_func op_e3f0_0_nf; extern cpuop_func op_e3f0_0_ff; extern cpuop_func op_e3f8_0_nf; extern cpuop_func op_e3f8_0_ff; extern cpuop_func op_e3f9_0_nf; extern cpuop_func op_e3f9_0_ff; extern cpuop_func op_e4d0_0_nf; extern cpuop_func op_e4d0_0_ff; extern cpuop_func op_e4d8_0_nf; extern cpuop_func op_e4d8_0_ff; extern cpuop_func op_e4e0_0_nf; extern cpuop_func op_e4e0_0_ff; extern cpuop_func op_e4e8_0_nf; extern cpuop_func op_e4e8_0_ff; extern cpuop_func op_e4f0_0_nf; extern cpuop_func op_e4f0_0_ff; extern cpuop_func op_e4f8_0_nf; extern cpuop_func op_e4f8_0_ff; extern cpuop_func op_e4f9_0_nf; extern cpuop_func op_e4f9_0_ff; extern cpuop_func op_e5d0_0_nf; extern cpuop_func op_e5d0_0_ff; extern cpuop_func op_e5d8_0_nf; extern cpuop_func op_e5d8_0_ff; extern cpuop_func op_e5e0_0_nf; extern cpuop_func op_e5e0_0_ff; extern cpuop_func op_e5e8_0_nf; extern cpuop_func op_e5e8_0_ff; extern cpuop_func op_e5f0_0_nf; extern cpuop_func op_e5f0_0_ff; extern cpuop_func op_e5f8_0_nf; extern cpuop_func op_e5f8_0_ff; extern cpuop_func op_e5f9_0_nf; extern cpuop_func op_e5f9_0_ff; extern cpuop_func op_e6d0_0_nf; extern cpuop_func op_e6d0_0_ff; extern cpuop_func op_e6d8_0_nf; extern cpuop_func op_e6d8_0_ff; extern cpuop_func op_e6e0_0_nf; extern cpuop_func op_e6e0_0_ff; extern cpuop_func op_e6e8_0_nf; extern cpuop_func op_e6e8_0_ff; extern cpuop_func op_e6f0_0_nf; extern cpuop_func op_e6f0_0_ff; extern cpuop_func op_e6f8_0_nf; extern cpuop_func op_e6f8_0_ff; extern cpuop_func op_e6f9_0_nf; extern cpuop_func op_e6f9_0_ff; extern cpuop_func op_e7d0_0_nf; extern cpuop_func op_e7d0_0_ff; extern cpuop_func op_e7d8_0_nf; extern cpuop_func op_e7d8_0_ff; extern cpuop_func op_e7e0_0_nf; extern cpuop_func op_e7e0_0_ff; extern cpuop_func op_e7e8_0_nf; extern cpuop_func op_e7e8_0_ff; extern cpuop_func op_e7f0_0_nf; extern cpuop_func op_e7f0_0_ff; extern cpuop_func op_e7f8_0_nf; extern cpuop_func op_e7f8_0_ff; extern cpuop_func op_e7f9_0_nf; extern cpuop_func op_e7f9_0_ff; extern cpuop_func op_e8c0_0_nf; extern cpuop_func op_e8c0_0_ff; extern cpuop_func op_e8d0_0_nf; extern cpuop_func op_e8d0_0_ff; extern cpuop_func op_e8e8_0_nf; extern cpuop_func op_e8e8_0_ff; extern cpuop_func op_e8f0_0_nf; extern cpuop_func op_e8f0_0_ff; extern cpuop_func op_e8f8_0_nf; extern cpuop_func op_e8f8_0_ff; extern cpuop_func op_e8f9_0_nf; extern cpuop_func op_e8f9_0_ff; extern cpuop_func op_e8fa_0_nf; extern cpuop_func op_e8fa_0_ff; extern cpuop_func op_e8fb_0_nf; extern cpuop_func op_e8fb_0_ff; extern cpuop_func op_e9c0_0_nf; extern cpuop_func op_e9c0_0_ff; extern cpuop_func op_e9d0_0_nf; extern cpuop_func op_e9d0_0_ff; extern cpuop_func op_e9e8_0_nf; extern cpuop_func op_e9e8_0_ff; extern cpuop_func op_e9f0_0_nf; extern cpuop_func op_e9f0_0_ff; extern cpuop_func op_e9f8_0_nf; extern cpuop_func op_e9f8_0_ff; extern cpuop_func op_e9f9_0_nf; extern cpuop_func op_e9f9_0_ff; extern cpuop_func op_e9fa_0_nf; extern cpuop_func op_e9fa_0_ff; extern cpuop_func op_e9fb_0_nf; extern cpuop_func op_e9fb_0_ff; extern cpuop_func op_eac0_0_nf; extern cpuop_func op_eac0_0_ff; extern cpuop_func op_ead0_0_nf; extern cpuop_func op_ead0_0_ff; extern cpuop_func op_eae8_0_nf; extern cpuop_func op_eae8_0_ff; extern cpuop_func op_eaf0_0_nf; extern cpuop_func op_eaf0_0_ff; extern cpuop_func op_eaf8_0_nf; extern cpuop_func op_eaf8_0_ff; extern cpuop_func op_eaf9_0_nf; extern cpuop_func op_eaf9_0_ff; extern cpuop_func op_ebc0_0_nf; extern cpuop_func op_ebc0_0_ff; extern cpuop_func op_ebd0_0_nf; extern cpuop_func op_ebd0_0_ff; extern cpuop_func op_ebe8_0_nf; extern cpuop_func op_ebe8_0_ff; extern cpuop_func op_ebf0_0_nf; extern cpuop_func op_ebf0_0_ff; extern cpuop_func op_ebf8_0_nf; extern cpuop_func op_ebf8_0_ff; extern cpuop_func op_ebf9_0_nf; extern cpuop_func op_ebf9_0_ff; extern cpuop_func op_ebfa_0_nf; extern cpuop_func op_ebfa_0_ff; extern cpuop_func op_ebfb_0_nf; extern cpuop_func op_ebfb_0_ff; extern cpuop_func op_ecc0_0_nf; extern cpuop_func op_ecc0_0_ff; extern cpuop_func op_ecd0_0_nf; extern cpuop_func op_ecd0_0_ff; extern cpuop_func op_ece8_0_nf; extern cpuop_func op_ece8_0_ff; extern cpuop_func op_ecf0_0_nf; extern cpuop_func op_ecf0_0_ff; extern cpuop_func op_ecf8_0_nf; extern cpuop_func op_ecf8_0_ff; extern cpuop_func op_ecf9_0_nf; extern cpuop_func op_ecf9_0_ff; extern cpuop_func op_edc0_0_nf; extern cpuop_func op_edc0_0_ff; extern cpuop_func op_edd0_0_nf; extern cpuop_func op_edd0_0_ff; extern cpuop_func op_ede8_0_nf; extern cpuop_func op_ede8_0_ff; extern cpuop_func op_edf0_0_nf; extern cpuop_func op_edf0_0_ff; extern cpuop_func op_edf8_0_nf; extern cpuop_func op_edf8_0_ff; extern cpuop_func op_edf9_0_nf; extern cpuop_func op_edf9_0_ff; extern cpuop_func op_edfa_0_nf; extern cpuop_func op_edfa_0_ff; extern cpuop_func op_edfb_0_nf; extern cpuop_func op_edfb_0_ff; extern cpuop_func op_eec0_0_nf; extern cpuop_func op_eec0_0_ff; extern cpuop_func op_eed0_0_nf; extern cpuop_func op_eed0_0_ff; extern cpuop_func op_eee8_0_nf; extern cpuop_func op_eee8_0_ff; extern cpuop_func op_eef0_0_nf; extern cpuop_func op_eef0_0_ff; extern cpuop_func op_eef8_0_nf; extern cpuop_func op_eef8_0_ff; extern cpuop_func op_eef9_0_nf; extern cpuop_func op_eef9_0_ff; extern cpuop_func op_efc0_0_nf; extern cpuop_func op_efc0_0_ff; extern cpuop_func op_efd0_0_nf; extern cpuop_func op_efd0_0_ff; extern cpuop_func op_efe8_0_nf; extern cpuop_func op_efe8_0_ff; extern cpuop_func op_eff0_0_nf; extern cpuop_func op_eff0_0_ff; extern cpuop_func op_eff8_0_nf; extern cpuop_func op_eff8_0_ff; extern cpuop_func op_eff9_0_nf; extern cpuop_func op_eff9_0_ff; extern cpuop_func op_f000_0_nf; extern cpuop_func op_f000_0_ff; extern cpuop_func op_f008_0_nf; extern cpuop_func op_f008_0_ff; extern cpuop_func op_f010_0_nf; extern cpuop_func op_f010_0_ff; extern cpuop_func op_f018_0_nf; extern cpuop_func op_f018_0_ff; extern cpuop_func op_f020_0_nf; extern cpuop_func op_f020_0_ff; extern cpuop_func op_f028_0_nf; extern cpuop_func op_f028_0_ff; extern cpuop_func op_f030_0_nf; extern cpuop_func op_f030_0_ff; extern cpuop_func op_f038_0_nf; extern cpuop_func op_f038_0_ff; extern cpuop_func op_f039_0_nf; extern cpuop_func op_f039_0_ff; extern cpuop_func op_f200_0_nf; extern cpuop_func op_f200_0_ff; extern cpuop_func op_f208_0_nf; extern cpuop_func op_f208_0_ff; extern cpuop_func op_f210_0_nf; extern cpuop_func op_f210_0_ff; extern cpuop_func op_f218_0_nf; extern cpuop_func op_f218_0_ff; extern cpuop_func op_f220_0_nf; extern cpuop_func op_f220_0_ff; extern cpuop_func op_f228_0_nf; extern cpuop_func op_f228_0_ff; extern cpuop_func op_f230_0_nf; extern cpuop_func op_f230_0_ff; extern cpuop_func op_f238_0_nf; extern cpuop_func op_f238_0_ff; extern cpuop_func op_f239_0_nf; extern cpuop_func op_f239_0_ff; extern cpuop_func op_f23a_0_nf; extern cpuop_func op_f23a_0_ff; extern cpuop_func op_f23b_0_nf; extern cpuop_func op_f23b_0_ff; extern cpuop_func op_f23c_0_nf; extern cpuop_func op_f23c_0_ff; extern cpuop_func op_f240_0_nf; extern cpuop_func op_f240_0_ff; extern cpuop_func op_f248_0_nf; extern cpuop_func op_f248_0_ff; extern cpuop_func op_f250_0_nf; extern cpuop_func op_f250_0_ff; extern cpuop_func op_f258_0_nf; extern cpuop_func op_f258_0_ff; extern cpuop_func op_f260_0_nf; extern cpuop_func op_f260_0_ff; extern cpuop_func op_f268_0_nf; extern cpuop_func op_f268_0_ff; extern cpuop_func op_f270_0_nf; extern cpuop_func op_f270_0_ff; extern cpuop_func op_f278_0_nf; extern cpuop_func op_f278_0_ff; extern cpuop_func op_f279_0_nf; extern cpuop_func op_f279_0_ff; extern cpuop_func op_f27a_0_nf; extern cpuop_func op_f27a_0_ff; extern cpuop_func op_f27b_0_nf; extern cpuop_func op_f27b_0_ff; extern cpuop_func op_f27c_0_nf; extern cpuop_func op_f27c_0_ff; extern cpuop_func op_f280_0_nf; extern cpuop_func op_f280_0_ff; extern cpuop_func op_f2c0_0_nf; extern cpuop_func op_f2c0_0_ff; extern cpuop_func op_f310_0_nf; extern cpuop_func op_f310_0_ff; extern cpuop_func op_f320_0_nf; extern cpuop_func op_f320_0_ff; extern cpuop_func op_f328_0_nf; extern cpuop_func op_f328_0_ff; extern cpuop_func op_f330_0_nf; extern cpuop_func op_f330_0_ff; extern cpuop_func op_f338_0_nf; extern cpuop_func op_f338_0_ff; extern cpuop_func op_f339_0_nf; extern cpuop_func op_f339_0_ff; extern cpuop_func op_f350_0_nf; extern cpuop_func op_f350_0_ff; extern cpuop_func op_f358_0_nf; extern cpuop_func op_f358_0_ff; extern cpuop_func op_f368_0_nf; extern cpuop_func op_f368_0_ff; extern cpuop_func op_f370_0_nf; extern cpuop_func op_f370_0_ff; extern cpuop_func op_f378_0_nf; extern cpuop_func op_f378_0_ff; extern cpuop_func op_f379_0_nf; extern cpuop_func op_f379_0_ff; extern cpuop_func op_f37a_0_nf; extern cpuop_func op_f37a_0_ff; extern cpuop_func op_f37b_0_nf; extern cpuop_func op_f37b_0_ff; extern cpuop_func op_f408_0_nf; extern cpuop_func op_f408_0_ff; extern cpuop_func op_f410_0_nf; extern cpuop_func op_f410_0_ff; extern cpuop_func op_f418_0_nf; extern cpuop_func op_f418_0_ff; extern cpuop_func op_f419_0_nf; extern cpuop_func op_f419_0_ff; extern cpuop_func op_f41a_0_nf; extern cpuop_func op_f41a_0_ff; extern cpuop_func op_f41b_0_nf; extern cpuop_func op_f41b_0_ff; extern cpuop_func op_f41c_0_nf; extern cpuop_func op_f41c_0_ff; extern cpuop_func op_f41d_0_nf; extern cpuop_func op_f41d_0_ff; extern cpuop_func op_f41e_0_nf; extern cpuop_func op_f41e_0_ff; extern cpuop_func op_f41f_0_nf; extern cpuop_func op_f41f_0_ff; extern cpuop_func op_f428_0_nf; extern cpuop_func op_f428_0_ff; extern cpuop_func op_f430_0_nf; extern cpuop_func op_f430_0_ff; extern cpuop_func op_f438_0_nf; extern cpuop_func op_f438_0_ff; extern cpuop_func op_f439_0_nf; extern cpuop_func op_f439_0_ff; extern cpuop_func op_f43a_0_nf; extern cpuop_func op_f43a_0_ff; extern cpuop_func op_f43b_0_nf; extern cpuop_func op_f43b_0_ff; extern cpuop_func op_f43c_0_nf; extern cpuop_func op_f43c_0_ff; extern cpuop_func op_f43d_0_nf; extern cpuop_func op_f43d_0_ff; extern cpuop_func op_f43e_0_nf; extern cpuop_func op_f43e_0_ff; extern cpuop_func op_f43f_0_nf; extern cpuop_func op_f43f_0_ff; extern cpuop_func op_f500_0_nf; extern cpuop_func op_f500_0_ff; extern cpuop_func op_f508_0_nf; extern cpuop_func op_f508_0_ff; extern cpuop_func op_f510_0_nf; extern cpuop_func op_f510_0_ff; extern cpuop_func op_f518_0_nf; extern cpuop_func op_f518_0_ff; extern cpuop_func op_f548_0_nf; extern cpuop_func op_f548_0_ff; extern cpuop_func op_f568_0_nf; extern cpuop_func op_f568_0_ff; extern cpuop_func op_f588_0_nf; extern cpuop_func op_f588_0_ff; extern cpuop_func op_f5c8_0_nf; extern cpuop_func op_f5c8_0_ff; extern cpuop_func op_f600_0_nf; extern cpuop_func op_f600_0_ff; extern cpuop_func op_f608_0_nf; extern cpuop_func op_f608_0_ff; extern cpuop_func op_f610_0_nf; extern cpuop_func op_f610_0_ff; extern cpuop_func op_f618_0_nf; extern cpuop_func op_f618_0_ff; extern cpuop_func op_f620_0_nf; extern cpuop_func op_f620_0_ff; extern cpuop_func op_f800_0_nf; extern cpuop_func op_f800_0_ff; extern cpuop_func op_4800_2_nf; extern cpuop_func op_4800_2_ff; extern cpuop_func op_4810_2_nf; extern cpuop_func op_4810_2_ff; extern cpuop_func op_4818_2_nf; extern cpuop_func op_4818_2_ff; extern cpuop_func op_4820_2_nf; extern cpuop_func op_4820_2_ff; extern cpuop_func op_4828_2_nf; extern cpuop_func op_4828_2_ff; extern cpuop_func op_4830_2_nf; extern cpuop_func op_4830_2_ff; extern cpuop_func op_4838_2_nf; extern cpuop_func op_4838_2_ff; extern cpuop_func op_4839_2_nf; extern cpuop_func op_4839_2_ff; extern cpuop_func op_8100_2_nf; extern cpuop_func op_8100_2_ff; extern cpuop_func op_8108_2_nf; extern cpuop_func op_8108_2_ff; extern cpuop_func op_c100_2_nf; extern cpuop_func op_c100_2_ff; extern cpuop_func op_c108_2_nf; extern cpuop_func op_c108_2_ff; extern cpuop_func op_0030_4_nf; extern cpuop_func op_0030_4_ff; extern cpuop_func op_0070_4_nf; extern cpuop_func op_0070_4_ff; extern cpuop_func op_00b0_4_nf; extern cpuop_func op_00b0_4_ff; extern cpuop_func op_0130_4_nf; extern cpuop_func op_0130_4_ff; extern cpuop_func op_013b_4_nf; extern cpuop_func op_013b_4_ff; extern cpuop_func op_0170_4_nf; extern cpuop_func op_0170_4_ff; extern cpuop_func op_017b_4_nf; extern cpuop_func op_017b_4_ff; extern cpuop_func op_01b0_4_nf; extern cpuop_func op_01b0_4_ff; extern cpuop_func op_01bb_4_nf; extern cpuop_func op_01bb_4_ff; extern cpuop_func op_01f0_4_nf; extern cpuop_func op_01f0_4_ff; extern cpuop_func op_01fb_4_nf; extern cpuop_func op_01fb_4_ff; extern cpuop_func op_0230_4_nf; extern cpuop_func op_0230_4_ff; extern cpuop_func op_0270_4_nf; extern cpuop_func op_0270_4_ff; extern cpuop_func op_02b0_4_nf; extern cpuop_func op_02b0_4_ff; extern cpuop_func op_0430_4_nf; extern cpuop_func op_0430_4_ff; extern cpuop_func op_0470_4_nf; extern cpuop_func op_0470_4_ff; extern cpuop_func op_04b0_4_nf; extern cpuop_func op_04b0_4_ff; extern cpuop_func op_0630_4_nf; extern cpuop_func op_0630_4_ff; extern cpuop_func op_0670_4_nf; extern cpuop_func op_0670_4_ff; extern cpuop_func op_06b0_4_nf; extern cpuop_func op_06b0_4_ff; extern cpuop_func op_0830_4_nf; extern cpuop_func op_0830_4_ff; extern cpuop_func op_083b_4_nf; extern cpuop_func op_083b_4_ff; extern cpuop_func op_0870_4_nf; extern cpuop_func op_0870_4_ff; extern cpuop_func op_087b_4_nf; extern cpuop_func op_087b_4_ff; extern cpuop_func op_08b0_4_nf; extern cpuop_func op_08b0_4_ff; extern cpuop_func op_08bb_4_nf; extern cpuop_func op_08bb_4_ff; extern cpuop_func op_08f0_4_nf; extern cpuop_func op_08f0_4_ff; extern cpuop_func op_08fb_4_nf; extern cpuop_func op_08fb_4_ff; extern cpuop_func op_0a30_4_nf; extern cpuop_func op_0a30_4_ff; extern cpuop_func op_0a70_4_nf; extern cpuop_func op_0a70_4_ff; extern cpuop_func op_0ab0_4_nf; extern cpuop_func op_0ab0_4_ff; extern cpuop_func op_0c30_4_nf; extern cpuop_func op_0c30_4_ff; extern cpuop_func op_0c70_4_nf; extern cpuop_func op_0c70_4_ff; extern cpuop_func op_0cb0_4_nf; extern cpuop_func op_0cb0_4_ff; extern cpuop_func op_1030_4_nf; extern cpuop_func op_1030_4_ff; extern cpuop_func op_103b_4_nf; extern cpuop_func op_103b_4_ff; extern cpuop_func op_10b0_4_nf; extern cpuop_func op_10b0_4_ff; extern cpuop_func op_10bb_4_nf; extern cpuop_func op_10bb_4_ff; extern cpuop_func op_10f0_4_nf; extern cpuop_func op_10f0_4_ff; extern cpuop_func op_10fb_4_nf; extern cpuop_func op_10fb_4_ff; extern cpuop_func op_1130_4_nf; extern cpuop_func op_1130_4_ff; extern cpuop_func op_113b_4_nf; extern cpuop_func op_113b_4_ff; extern cpuop_func op_1170_4_nf; extern cpuop_func op_1170_4_ff; extern cpuop_func op_117b_4_nf; extern cpuop_func op_117b_4_ff; extern cpuop_func op_1180_4_nf; extern cpuop_func op_1180_4_ff; extern cpuop_func op_1190_4_nf; extern cpuop_func op_1190_4_ff; extern cpuop_func op_1198_4_nf; extern cpuop_func op_1198_4_ff; extern cpuop_func op_11a0_4_nf; extern cpuop_func op_11a0_4_ff; extern cpuop_func op_11a8_4_nf; extern cpuop_func op_11a8_4_ff; extern cpuop_func op_11b0_4_nf; extern cpuop_func op_11b0_4_ff; extern cpuop_func op_11b8_4_nf; extern cpuop_func op_11b8_4_ff; extern cpuop_func op_11b9_4_nf; extern cpuop_func op_11b9_4_ff; extern cpuop_func op_11ba_4_nf; extern cpuop_func op_11ba_4_ff; extern cpuop_func op_11bb_4_nf; extern cpuop_func op_11bb_4_ff; extern cpuop_func op_11bc_4_nf; extern cpuop_func op_11bc_4_ff; extern cpuop_func op_11f0_4_nf; extern cpuop_func op_11f0_4_ff; extern cpuop_func op_11fb_4_nf; extern cpuop_func op_11fb_4_ff; extern cpuop_func op_13f0_4_nf; extern cpuop_func op_13f0_4_ff; extern cpuop_func op_13fb_4_nf; extern cpuop_func op_13fb_4_ff; extern cpuop_func op_2030_4_nf; extern cpuop_func op_2030_4_ff; extern cpuop_func op_203b_4_nf; extern cpuop_func op_203b_4_ff; extern cpuop_func op_2070_4_nf; extern cpuop_func op_2070_4_ff; extern cpuop_func op_207b_4_nf; extern cpuop_func op_207b_4_ff; extern cpuop_func op_20b0_4_nf; extern cpuop_func op_20b0_4_ff; extern cpuop_func op_20bb_4_nf; extern cpuop_func op_20bb_4_ff; extern cpuop_func op_20f0_4_nf; extern cpuop_func op_20f0_4_ff; extern cpuop_func op_20fb_4_nf; extern cpuop_func op_20fb_4_ff; extern cpuop_func op_2130_4_nf; extern cpuop_func op_2130_4_ff; extern cpuop_func op_213b_4_nf; extern cpuop_func op_213b_4_ff; extern cpuop_func op_2170_4_nf; extern cpuop_func op_2170_4_ff; extern cpuop_func op_217b_4_nf; extern cpuop_func op_217b_4_ff; extern cpuop_func op_2180_4_nf; extern cpuop_func op_2180_4_ff; extern cpuop_func op_2188_4_nf; extern cpuop_func op_2188_4_ff; extern cpuop_func op_2190_4_nf; extern cpuop_func op_2190_4_ff; extern cpuop_func op_2198_4_nf; extern cpuop_func op_2198_4_ff; extern cpuop_func op_21a0_4_nf; extern cpuop_func op_21a0_4_ff; extern cpuop_func op_21a8_4_nf; extern cpuop_func op_21a8_4_ff; extern cpuop_func op_21b0_4_nf; extern cpuop_func op_21b0_4_ff; extern cpuop_func op_21b8_4_nf; extern cpuop_func op_21b8_4_ff; extern cpuop_func op_21b9_4_nf; extern cpuop_func op_21b9_4_ff; extern cpuop_func op_21ba_4_nf; extern cpuop_func op_21ba_4_ff; extern cpuop_func op_21bb_4_nf; extern cpuop_func op_21bb_4_ff; extern cpuop_func op_21bc_4_nf; extern cpuop_func op_21bc_4_ff; extern cpuop_func op_21f0_4_nf; extern cpuop_func op_21f0_4_ff; extern cpuop_func op_21fb_4_nf; extern cpuop_func op_21fb_4_ff; extern cpuop_func op_23f0_4_nf; extern cpuop_func op_23f0_4_ff; extern cpuop_func op_23fb_4_nf; extern cpuop_func op_23fb_4_ff; extern cpuop_func op_3030_4_nf; extern cpuop_func op_3030_4_ff; extern cpuop_func op_303b_4_nf; extern cpuop_func op_303b_4_ff; extern cpuop_func op_3070_4_nf; extern cpuop_func op_3070_4_ff; extern cpuop_func op_307b_4_nf; extern cpuop_func op_307b_4_ff; extern cpuop_func op_30b0_4_nf; extern cpuop_func op_30b0_4_ff; extern cpuop_func op_30bb_4_nf; extern cpuop_func op_30bb_4_ff; extern cpuop_func op_30f0_4_nf; extern cpuop_func op_30f0_4_ff; extern cpuop_func op_30fb_4_nf; extern cpuop_func op_30fb_4_ff; extern cpuop_func op_3130_4_nf; extern cpuop_func op_3130_4_ff; extern cpuop_func op_313b_4_nf; extern cpuop_func op_313b_4_ff; extern cpuop_func op_3170_4_nf; extern cpuop_func op_3170_4_ff; extern cpuop_func op_317b_4_nf; extern cpuop_func op_317b_4_ff; extern cpuop_func op_3180_4_nf; extern cpuop_func op_3180_4_ff; extern cpuop_func op_3188_4_nf; extern cpuop_func op_3188_4_ff; extern cpuop_func op_3190_4_nf; extern cpuop_func op_3190_4_ff; extern cpuop_func op_3198_4_nf; extern cpuop_func op_3198_4_ff; extern cpuop_func op_31a0_4_nf; extern cpuop_func op_31a0_4_ff; extern cpuop_func op_31a8_4_nf; extern cpuop_func op_31a8_4_ff; extern cpuop_func op_31b0_4_nf; extern cpuop_func op_31b0_4_ff; extern cpuop_func op_31b8_4_nf; extern cpuop_func op_31b8_4_ff; extern cpuop_func op_31b9_4_nf; extern cpuop_func op_31b9_4_ff; extern cpuop_func op_31ba_4_nf; extern cpuop_func op_31ba_4_ff; extern cpuop_func op_31bb_4_nf; extern cpuop_func op_31bb_4_ff; extern cpuop_func op_31bc_4_nf; extern cpuop_func op_31bc_4_ff; extern cpuop_func op_31f0_4_nf; extern cpuop_func op_31f0_4_ff; extern cpuop_func op_31fb_4_nf; extern cpuop_func op_31fb_4_ff; extern cpuop_func op_33f0_4_nf; extern cpuop_func op_33f0_4_ff; extern cpuop_func op_33fb_4_nf; extern cpuop_func op_33fb_4_ff; extern cpuop_func op_4030_4_nf; extern cpuop_func op_4030_4_ff; extern cpuop_func op_4070_4_nf; extern cpuop_func op_4070_4_ff; extern cpuop_func op_40b0_4_nf; extern cpuop_func op_40b0_4_ff; extern cpuop_func op_40f0_4_nf; extern cpuop_func op_40f0_4_ff; extern cpuop_func op_41b0_4_nf; extern cpuop_func op_41b0_4_ff; extern cpuop_func op_41bb_4_nf; extern cpuop_func op_41bb_4_ff; extern cpuop_func op_41f0_4_nf; extern cpuop_func op_41f0_4_ff; extern cpuop_func op_41fb_4_nf; extern cpuop_func op_41fb_4_ff; extern cpuop_func op_4230_4_nf; extern cpuop_func op_4230_4_ff; extern cpuop_func op_4270_4_nf; extern cpuop_func op_4270_4_ff; extern cpuop_func op_42b0_4_nf; extern cpuop_func op_42b0_4_ff; extern cpuop_func op_42f0_4_nf; extern cpuop_func op_42f0_4_ff; extern cpuop_func op_4430_4_nf; extern cpuop_func op_4430_4_ff; extern cpuop_func op_4470_4_nf; extern cpuop_func op_4470_4_ff; extern cpuop_func op_44b0_4_nf; extern cpuop_func op_44b0_4_ff; extern cpuop_func op_44f0_4_nf; extern cpuop_func op_44f0_4_ff; extern cpuop_func op_44fb_4_nf; extern cpuop_func op_44fb_4_ff; extern cpuop_func op_4630_4_nf; extern cpuop_func op_4630_4_ff; extern cpuop_func op_4670_4_nf; extern cpuop_func op_4670_4_ff; extern cpuop_func op_46b0_4_nf; extern cpuop_func op_46b0_4_ff; extern cpuop_func op_46f0_4_nf; extern cpuop_func op_46f0_4_ff; extern cpuop_func op_46fb_4_nf; extern cpuop_func op_46fb_4_ff; extern cpuop_func op_4830_4_nf; extern cpuop_func op_4830_4_ff; extern cpuop_func op_4870_4_nf; extern cpuop_func op_4870_4_ff; extern cpuop_func op_487b_4_nf; extern cpuop_func op_487b_4_ff; extern cpuop_func op_48b0_4_nf; extern cpuop_func op_48b0_4_ff; extern cpuop_func op_48f0_4_nf; extern cpuop_func op_48f0_4_ff; extern cpuop_func op_4a30_4_nf; extern cpuop_func op_4a30_4_ff; extern cpuop_func op_4a70_4_nf; extern cpuop_func op_4a70_4_ff; extern cpuop_func op_4ab0_4_nf; extern cpuop_func op_4ab0_4_ff; extern cpuop_func op_4ac0_4_nf; extern cpuop_func op_4ac0_4_ff; extern cpuop_func op_4ad0_4_nf; extern cpuop_func op_4ad0_4_ff; extern cpuop_func op_4ad8_4_nf; extern cpuop_func op_4ad8_4_ff; extern cpuop_func op_4ae0_4_nf; extern cpuop_func op_4ae0_4_ff; extern cpuop_func op_4ae8_4_nf; extern cpuop_func op_4ae8_4_ff; extern cpuop_func op_4af0_4_nf; extern cpuop_func op_4af0_4_ff; extern cpuop_func op_4af8_4_nf; extern cpuop_func op_4af8_4_ff; extern cpuop_func op_4af9_4_nf; extern cpuop_func op_4af9_4_ff; extern cpuop_func op_4cb0_4_nf; extern cpuop_func op_4cb0_4_ff; extern cpuop_func op_4cbb_4_nf; extern cpuop_func op_4cbb_4_ff; extern cpuop_func op_4cf0_4_nf; extern cpuop_func op_4cf0_4_ff; extern cpuop_func op_4cfb_4_nf; extern cpuop_func op_4cfb_4_ff; extern cpuop_func op_4eb0_4_nf; extern cpuop_func op_4eb0_4_ff; extern cpuop_func op_4ebb_4_nf; extern cpuop_func op_4ebb_4_ff; extern cpuop_func op_4ef0_4_nf; extern cpuop_func op_4ef0_4_ff; extern cpuop_func op_4efb_4_nf; extern cpuop_func op_4efb_4_ff; extern cpuop_func op_5030_4_nf; extern cpuop_func op_5030_4_ff; extern cpuop_func op_5070_4_nf; extern cpuop_func op_5070_4_ff; extern cpuop_func op_50b0_4_nf; extern cpuop_func op_50b0_4_ff; extern cpuop_func op_50f0_4_nf; extern cpuop_func op_50f0_4_ff; extern cpuop_func op_5130_4_nf; extern cpuop_func op_5130_4_ff; extern cpuop_func op_5170_4_nf; extern cpuop_func op_5170_4_ff; extern cpuop_func op_51b0_4_nf; extern cpuop_func op_51b0_4_ff; extern cpuop_func op_51f0_4_nf; extern cpuop_func op_51f0_4_ff; extern cpuop_func op_52f0_4_nf; extern cpuop_func op_52f0_4_ff; extern cpuop_func op_53f0_4_nf; extern cpuop_func op_53f0_4_ff; extern cpuop_func op_54f0_4_nf; extern cpuop_func op_54f0_4_ff; extern cpuop_func op_55f0_4_nf; extern cpuop_func op_55f0_4_ff; extern cpuop_func op_56f0_4_nf; extern cpuop_func op_56f0_4_ff; extern cpuop_func op_57f0_4_nf; extern cpuop_func op_57f0_4_ff; extern cpuop_func op_58f0_4_nf; extern cpuop_func op_58f0_4_ff; extern cpuop_func op_59f0_4_nf; extern cpuop_func op_59f0_4_ff; extern cpuop_func op_5af0_4_nf; extern cpuop_func op_5af0_4_ff; extern cpuop_func op_5bf0_4_nf; extern cpuop_func op_5bf0_4_ff; extern cpuop_func op_5cf0_4_nf; extern cpuop_func op_5cf0_4_ff; extern cpuop_func op_5df0_4_nf; extern cpuop_func op_5df0_4_ff; extern cpuop_func op_5ef0_4_nf; extern cpuop_func op_5ef0_4_ff; extern cpuop_func op_5ff0_4_nf; extern cpuop_func op_5ff0_4_ff; extern cpuop_func op_60ff_4_nf; extern cpuop_func op_60ff_4_ff; extern cpuop_func op_61ff_4_nf; extern cpuop_func op_61ff_4_ff; extern cpuop_func op_62ff_4_nf; extern cpuop_func op_62ff_4_ff; extern cpuop_func op_63ff_4_nf; extern cpuop_func op_63ff_4_ff; extern cpuop_func op_64ff_4_nf; extern cpuop_func op_64ff_4_ff; extern cpuop_func op_65ff_4_nf; extern cpuop_func op_65ff_4_ff; extern cpuop_func op_66ff_4_nf; extern cpuop_func op_66ff_4_ff; extern cpuop_func op_67ff_4_nf; extern cpuop_func op_67ff_4_ff; extern cpuop_func op_68ff_4_nf; extern cpuop_func op_68ff_4_ff; extern cpuop_func op_69ff_4_nf; extern cpuop_func op_69ff_4_ff; extern cpuop_func op_6aff_4_nf; extern cpuop_func op_6aff_4_ff; extern cpuop_func op_6bff_4_nf; extern cpuop_func op_6bff_4_ff; extern cpuop_func op_6cff_4_nf; extern cpuop_func op_6cff_4_ff; extern cpuop_func op_6dff_4_nf; extern cpuop_func op_6dff_4_ff; extern cpuop_func op_6eff_4_nf; extern cpuop_func op_6eff_4_ff; extern cpuop_func op_6fff_4_nf; extern cpuop_func op_6fff_4_ff; extern cpuop_func op_8030_4_nf; extern cpuop_func op_8030_4_ff; extern cpuop_func op_803b_4_nf; extern cpuop_func op_803b_4_ff; extern cpuop_func op_8070_4_nf; extern cpuop_func op_8070_4_ff; extern cpuop_func op_807b_4_nf; extern cpuop_func op_807b_4_ff; extern cpuop_func op_80b0_4_nf; extern cpuop_func op_80b0_4_ff; extern cpuop_func op_80bb_4_nf; extern cpuop_func op_80bb_4_ff; extern cpuop_func op_80f0_4_nf; extern cpuop_func op_80f0_4_ff; extern cpuop_func op_80fb_4_nf; extern cpuop_func op_80fb_4_ff; extern cpuop_func op_8130_4_nf; extern cpuop_func op_8130_4_ff; extern cpuop_func op_8170_4_nf; extern cpuop_func op_8170_4_ff; extern cpuop_func op_81b0_4_nf; extern cpuop_func op_81b0_4_ff; extern cpuop_func op_81f0_4_nf; extern cpuop_func op_81f0_4_ff; extern cpuop_func op_81fb_4_nf; extern cpuop_func op_81fb_4_ff; extern cpuop_func op_9030_4_nf; extern cpuop_func op_9030_4_ff; extern cpuop_func op_903b_4_nf; extern cpuop_func op_903b_4_ff; extern cpuop_func op_9070_4_nf; extern cpuop_func op_9070_4_ff; extern cpuop_func op_907b_4_nf; extern cpuop_func op_907b_4_ff; extern cpuop_func op_90b0_4_nf; extern cpuop_func op_90b0_4_ff; extern cpuop_func op_90bb_4_nf; extern cpuop_func op_90bb_4_ff; extern cpuop_func op_90f0_4_nf; extern cpuop_func op_90f0_4_ff; extern cpuop_func op_90fb_4_nf; extern cpuop_func op_90fb_4_ff; extern cpuop_func op_9130_4_nf; extern cpuop_func op_9130_4_ff; extern cpuop_func op_9170_4_nf; extern cpuop_func op_9170_4_ff; extern cpuop_func op_91b0_4_nf; extern cpuop_func op_91b0_4_ff; extern cpuop_func op_91f0_4_nf; extern cpuop_func op_91f0_4_ff; extern cpuop_func op_91fb_4_nf; extern cpuop_func op_91fb_4_ff; extern cpuop_func op_b030_4_nf; extern cpuop_func op_b030_4_ff; extern cpuop_func op_b03b_4_nf; extern cpuop_func op_b03b_4_ff; extern cpuop_func op_b070_4_nf; extern cpuop_func op_b070_4_ff; extern cpuop_func op_b07b_4_nf; extern cpuop_func op_b07b_4_ff; extern cpuop_func op_b0b0_4_nf; extern cpuop_func op_b0b0_4_ff; extern cpuop_func op_b0bb_4_nf; extern cpuop_func op_b0bb_4_ff; extern cpuop_func op_b0f0_4_nf; extern cpuop_func op_b0f0_4_ff; extern cpuop_func op_b0fb_4_nf; extern cpuop_func op_b0fb_4_ff; extern cpuop_func op_b130_4_nf; extern cpuop_func op_b130_4_ff; extern cpuop_func op_b170_4_nf; extern cpuop_func op_b170_4_ff; extern cpuop_func op_b1b0_4_nf; extern cpuop_func op_b1b0_4_ff; extern cpuop_func op_b1f0_4_nf; extern cpuop_func op_b1f0_4_ff; extern cpuop_func op_b1fb_4_nf; extern cpuop_func op_b1fb_4_ff; extern cpuop_func op_c030_4_nf; extern cpuop_func op_c030_4_ff; extern cpuop_func op_c03b_4_nf; extern cpuop_func op_c03b_4_ff; extern cpuop_func op_c070_4_nf; extern cpuop_func op_c070_4_ff; extern cpuop_func op_c07b_4_nf; extern cpuop_func op_c07b_4_ff; extern cpuop_func op_c0b0_4_nf; extern cpuop_func op_c0b0_4_ff; extern cpuop_func op_c0bb_4_nf; extern cpuop_func op_c0bb_4_ff; extern cpuop_func op_c0f0_4_nf; extern cpuop_func op_c0f0_4_ff; extern cpuop_func op_c0fb_4_nf; extern cpuop_func op_c0fb_4_ff; extern cpuop_func op_c130_4_nf; extern cpuop_func op_c130_4_ff; extern cpuop_func op_c170_4_nf; extern cpuop_func op_c170_4_ff; extern cpuop_func op_c1b0_4_nf; extern cpuop_func op_c1b0_4_ff; extern cpuop_func op_c1f0_4_nf; extern cpuop_func op_c1f0_4_ff; extern cpuop_func op_c1fb_4_nf; extern cpuop_func op_c1fb_4_ff; extern cpuop_func op_d030_4_nf; extern cpuop_func op_d030_4_ff; extern cpuop_func op_d03b_4_nf; extern cpuop_func op_d03b_4_ff; extern cpuop_func op_d070_4_nf; extern cpuop_func op_d070_4_ff; extern cpuop_func op_d07b_4_nf; extern cpuop_func op_d07b_4_ff; extern cpuop_func op_d0b0_4_nf; extern cpuop_func op_d0b0_4_ff; extern cpuop_func op_d0bb_4_nf; extern cpuop_func op_d0bb_4_ff; extern cpuop_func op_d0f0_4_nf; extern cpuop_func op_d0f0_4_ff; extern cpuop_func op_d0fb_4_nf; extern cpuop_func op_d0fb_4_ff; extern cpuop_func op_d130_4_nf; extern cpuop_func op_d130_4_ff; extern cpuop_func op_d170_4_nf; extern cpuop_func op_d170_4_ff; extern cpuop_func op_d1b0_4_nf; extern cpuop_func op_d1b0_4_ff; extern cpuop_func op_d1f0_4_nf; extern cpuop_func op_d1f0_4_ff; extern cpuop_func op_d1fb_4_nf; extern cpuop_func op_d1fb_4_ff; extern cpuop_func op_e0f0_4_nf; extern cpuop_func op_e0f0_4_ff; extern cpuop_func op_e1f0_4_nf; extern cpuop_func op_e1f0_4_ff; extern cpuop_func op_e2f0_4_nf; extern cpuop_func op_e2f0_4_ff; extern cpuop_func op_e3f0_4_nf; extern cpuop_func op_e3f0_4_ff; extern cpuop_func op_e4f0_4_nf; extern cpuop_func op_e4f0_4_ff; extern cpuop_func op_e5f0_4_nf; extern cpuop_func op_e5f0_4_ff; extern cpuop_func op_e6f0_4_nf; extern cpuop_func op_e6f0_4_ff; extern cpuop_func op_e7f0_4_nf; extern cpuop_func op_e7f0_4_ff; extern cpuop_func op_40c0_5_nf; extern cpuop_func op_40c0_5_ff; extern cpuop_func op_40d0_5_nf; extern cpuop_func op_40d0_5_ff; extern cpuop_func op_40d8_5_nf; extern cpuop_func op_40d8_5_ff; extern cpuop_func op_40e0_5_nf; extern cpuop_func op_40e0_5_ff; extern cpuop_func op_40e8_5_nf; extern cpuop_func op_40e8_5_ff; extern cpuop_func op_40f0_5_nf; extern cpuop_func op_40f0_5_ff; extern cpuop_func op_40f8_5_nf; extern cpuop_func op_40f8_5_ff; extern cpuop_func op_40f9_5_nf; extern cpuop_func op_40f9_5_ff; extern cpuop_func op_4e73_5_nf; extern cpuop_func op_4e73_5_ff; extern cpuop_func op_0000_11_nf; extern cpuop_func op_0000_11_ff; extern cpuop_func op_0010_11_nf; extern cpuop_func op_0010_11_ff; extern cpuop_func op_0018_11_nf; extern cpuop_func op_0018_11_ff; extern cpuop_func op_0020_11_nf; extern cpuop_func op_0020_11_ff; extern cpuop_func op_0028_11_nf; extern cpuop_func op_0028_11_ff; extern cpuop_func op_0030_11_nf; extern cpuop_func op_0030_11_ff; extern cpuop_func op_0038_11_nf; extern cpuop_func op_0038_11_ff; extern cpuop_func op_0039_11_nf; extern cpuop_func op_0039_11_ff; extern cpuop_func op_003c_11_nf; extern cpuop_func op_003c_11_ff; extern cpuop_func op_0040_11_nf; extern cpuop_func op_0040_11_ff; extern cpuop_func op_0050_11_nf; extern cpuop_func op_0050_11_ff; extern cpuop_func op_0058_11_nf; extern cpuop_func op_0058_11_ff; extern cpuop_func op_0060_11_nf; extern cpuop_func op_0060_11_ff; extern cpuop_func op_0068_11_nf; extern cpuop_func op_0068_11_ff; extern cpuop_func op_0070_11_nf; extern cpuop_func op_0070_11_ff; extern cpuop_func op_0078_11_nf; extern cpuop_func op_0078_11_ff; extern cpuop_func op_0079_11_nf; extern cpuop_func op_0079_11_ff; extern cpuop_func op_007c_11_nf; extern cpuop_func op_007c_11_ff; extern cpuop_func op_0080_11_nf; extern cpuop_func op_0080_11_ff; extern cpuop_func op_0090_11_nf; extern cpuop_func op_0090_11_ff; extern cpuop_func op_0098_11_nf; extern cpuop_func op_0098_11_ff; extern cpuop_func op_00a0_11_nf; extern cpuop_func op_00a0_11_ff; extern cpuop_func op_00a8_11_nf; extern cpuop_func op_00a8_11_ff; extern cpuop_func op_00b0_11_nf; extern cpuop_func op_00b0_11_ff; extern cpuop_func op_00b8_11_nf; extern cpuop_func op_00b8_11_ff; extern cpuop_func op_00b9_11_nf; extern cpuop_func op_00b9_11_ff; extern cpuop_func op_0100_11_nf; extern cpuop_func op_0100_11_ff; extern cpuop_func op_0108_11_nf; extern cpuop_func op_0108_11_ff; extern cpuop_func op_0110_11_nf; extern cpuop_func op_0110_11_ff; extern cpuop_func op_0118_11_nf; extern cpuop_func op_0118_11_ff; extern cpuop_func op_0120_11_nf; extern cpuop_func op_0120_11_ff; extern cpuop_func op_0128_11_nf; extern cpuop_func op_0128_11_ff; extern cpuop_func op_0130_11_nf; extern cpuop_func op_0130_11_ff; extern cpuop_func op_0138_11_nf; extern cpuop_func op_0138_11_ff; extern cpuop_func op_0139_11_nf; extern cpuop_func op_0139_11_ff; extern cpuop_func op_013a_11_nf; extern cpuop_func op_013a_11_ff; extern cpuop_func op_013b_11_nf; extern cpuop_func op_013b_11_ff; extern cpuop_func op_013c_11_nf; extern cpuop_func op_013c_11_ff; extern cpuop_func op_0140_11_nf; extern cpuop_func op_0140_11_ff; extern cpuop_func op_0148_11_nf; extern cpuop_func op_0148_11_ff; extern cpuop_func op_0150_11_nf; extern cpuop_func op_0150_11_ff; extern cpuop_func op_0158_11_nf; extern cpuop_func op_0158_11_ff; extern cpuop_func op_0160_11_nf; extern cpuop_func op_0160_11_ff; extern cpuop_func op_0168_11_nf; extern cpuop_func op_0168_11_ff; extern cpuop_func op_0170_11_nf; extern cpuop_func op_0170_11_ff; extern cpuop_func op_0178_11_nf; extern cpuop_func op_0178_11_ff; extern cpuop_func op_0179_11_nf; extern cpuop_func op_0179_11_ff; extern cpuop_func op_017a_11_nf; extern cpuop_func op_017a_11_ff; extern cpuop_func op_017b_11_nf; extern cpuop_func op_017b_11_ff; extern cpuop_func op_0180_11_nf; extern cpuop_func op_0180_11_ff; extern cpuop_func op_0188_11_nf; extern cpuop_func op_0188_11_ff; extern cpuop_func op_0190_11_nf; extern cpuop_func op_0190_11_ff; extern cpuop_func op_0198_11_nf; extern cpuop_func op_0198_11_ff; extern cpuop_func op_01a0_11_nf; extern cpuop_func op_01a0_11_ff; extern cpuop_func op_01a8_11_nf; extern cpuop_func op_01a8_11_ff; extern cpuop_func op_01b0_11_nf; extern cpuop_func op_01b0_11_ff; extern cpuop_func op_01b8_11_nf; extern cpuop_func op_01b8_11_ff; extern cpuop_func op_01b9_11_nf; extern cpuop_func op_01b9_11_ff; extern cpuop_func op_01ba_11_nf; extern cpuop_func op_01ba_11_ff; extern cpuop_func op_01bb_11_nf; extern cpuop_func op_01bb_11_ff; extern cpuop_func op_01c0_11_nf; extern cpuop_func op_01c0_11_ff; extern cpuop_func op_01c8_11_nf; extern cpuop_func op_01c8_11_ff; extern cpuop_func op_01d0_11_nf; extern cpuop_func op_01d0_11_ff; extern cpuop_func op_01d8_11_nf; extern cpuop_func op_01d8_11_ff; extern cpuop_func op_01e0_11_nf; extern cpuop_func op_01e0_11_ff; extern cpuop_func op_01e8_11_nf; extern cpuop_func op_01e8_11_ff; extern cpuop_func op_01f0_11_nf; extern cpuop_func op_01f0_11_ff; extern cpuop_func op_01f8_11_nf; extern cpuop_func op_01f8_11_ff; extern cpuop_func op_01f9_11_nf; extern cpuop_func op_01f9_11_ff; extern cpuop_func op_01fa_11_nf; extern cpuop_func op_01fa_11_ff; extern cpuop_func op_01fb_11_nf; extern cpuop_func op_01fb_11_ff; extern cpuop_func op_0200_11_nf; extern cpuop_func op_0200_11_ff; extern cpuop_func op_0210_11_nf; extern cpuop_func op_0210_11_ff; extern cpuop_func op_0218_11_nf; extern cpuop_func op_0218_11_ff; extern cpuop_func op_0220_11_nf; extern cpuop_func op_0220_11_ff; extern cpuop_func op_0228_11_nf; extern cpuop_func op_0228_11_ff; extern cpuop_func op_0230_11_nf; extern cpuop_func op_0230_11_ff; extern cpuop_func op_0238_11_nf; extern cpuop_func op_0238_11_ff; extern cpuop_func op_0239_11_nf; extern cpuop_func op_0239_11_ff; extern cpuop_func op_023c_11_nf; extern cpuop_func op_023c_11_ff; extern cpuop_func op_0240_11_nf; extern cpuop_func op_0240_11_ff; extern cpuop_func op_0250_11_nf; extern cpuop_func op_0250_11_ff; extern cpuop_func op_0258_11_nf; extern cpuop_func op_0258_11_ff; extern cpuop_func op_0260_11_nf; extern cpuop_func op_0260_11_ff; extern cpuop_func op_0268_11_nf; extern cpuop_func op_0268_11_ff; extern cpuop_func op_0270_11_nf; extern cpuop_func op_0270_11_ff; extern cpuop_func op_0278_11_nf; extern cpuop_func op_0278_11_ff; extern cpuop_func op_0279_11_nf; extern cpuop_func op_0279_11_ff; extern cpuop_func op_027c_11_nf; extern cpuop_func op_027c_11_ff; extern cpuop_func op_0280_11_nf; extern cpuop_func op_0280_11_ff; extern cpuop_func op_0290_11_nf; extern cpuop_func op_0290_11_ff; extern cpuop_func op_0298_11_nf; extern cpuop_func op_0298_11_ff; extern cpuop_func op_02a0_11_nf; extern cpuop_func op_02a0_11_ff; extern cpuop_func op_02a8_11_nf; extern cpuop_func op_02a8_11_ff; extern cpuop_func op_02b0_11_nf; extern cpuop_func op_02b0_11_ff; extern cpuop_func op_02b8_11_nf; extern cpuop_func op_02b8_11_ff; extern cpuop_func op_02b9_11_nf; extern cpuop_func op_02b9_11_ff; extern cpuop_func op_0400_11_nf; extern cpuop_func op_0400_11_ff; extern cpuop_func op_0410_11_nf; extern cpuop_func op_0410_11_ff; extern cpuop_func op_0418_11_nf; extern cpuop_func op_0418_11_ff; extern cpuop_func op_0420_11_nf; extern cpuop_func op_0420_11_ff; extern cpuop_func op_0428_11_nf; extern cpuop_func op_0428_11_ff; extern cpuop_func op_0430_11_nf; extern cpuop_func op_0430_11_ff; extern cpuop_func op_0438_11_nf; extern cpuop_func op_0438_11_ff; extern cpuop_func op_0439_11_nf; extern cpuop_func op_0439_11_ff; extern cpuop_func op_0440_11_nf; extern cpuop_func op_0440_11_ff; extern cpuop_func op_0450_11_nf; extern cpuop_func op_0450_11_ff; extern cpuop_func op_0458_11_nf; extern cpuop_func op_0458_11_ff; extern cpuop_func op_0460_11_nf; extern cpuop_func op_0460_11_ff; extern cpuop_func op_0468_11_nf; extern cpuop_func op_0468_11_ff; extern cpuop_func op_0470_11_nf; extern cpuop_func op_0470_11_ff; extern cpuop_func op_0478_11_nf; extern cpuop_func op_0478_11_ff; extern cpuop_func op_0479_11_nf; extern cpuop_func op_0479_11_ff; extern cpuop_func op_0480_11_nf; extern cpuop_func op_0480_11_ff; extern cpuop_func op_0490_11_nf; extern cpuop_func op_0490_11_ff; extern cpuop_func op_0498_11_nf; extern cpuop_func op_0498_11_ff; extern cpuop_func op_04a0_11_nf; extern cpuop_func op_04a0_11_ff; extern cpuop_func op_04a8_11_nf; extern cpuop_func op_04a8_11_ff; extern cpuop_func op_04b0_11_nf; extern cpuop_func op_04b0_11_ff; extern cpuop_func op_04b8_11_nf; extern cpuop_func op_04b8_11_ff; extern cpuop_func op_04b9_11_nf; extern cpuop_func op_04b9_11_ff; extern cpuop_func op_0600_11_nf; extern cpuop_func op_0600_11_ff; extern cpuop_func op_0610_11_nf; extern cpuop_func op_0610_11_ff; extern cpuop_func op_0618_11_nf; extern cpuop_func op_0618_11_ff; extern cpuop_func op_0620_11_nf; extern cpuop_func op_0620_11_ff; extern cpuop_func op_0628_11_nf; extern cpuop_func op_0628_11_ff; extern cpuop_func op_0630_11_nf; extern cpuop_func op_0630_11_ff; extern cpuop_func op_0638_11_nf; extern cpuop_func op_0638_11_ff; extern cpuop_func op_0639_11_nf; extern cpuop_func op_0639_11_ff; extern cpuop_func op_0640_11_nf; extern cpuop_func op_0640_11_ff; extern cpuop_func op_0650_11_nf; extern cpuop_func op_0650_11_ff; extern cpuop_func op_0658_11_nf; extern cpuop_func op_0658_11_ff; extern cpuop_func op_0660_11_nf; extern cpuop_func op_0660_11_ff; extern cpuop_func op_0668_11_nf; extern cpuop_func op_0668_11_ff; extern cpuop_func op_0670_11_nf; extern cpuop_func op_0670_11_ff; extern cpuop_func op_0678_11_nf; extern cpuop_func op_0678_11_ff; extern cpuop_func op_0679_11_nf; extern cpuop_func op_0679_11_ff; extern cpuop_func op_0680_11_nf; extern cpuop_func op_0680_11_ff; extern cpuop_func op_0690_11_nf; extern cpuop_func op_0690_11_ff; extern cpuop_func op_0698_11_nf; extern cpuop_func op_0698_11_ff; extern cpuop_func op_06a0_11_nf; extern cpuop_func op_06a0_11_ff; extern cpuop_func op_06a8_11_nf; extern cpuop_func op_06a8_11_ff; extern cpuop_func op_06b0_11_nf; extern cpuop_func op_06b0_11_ff; extern cpuop_func op_06b8_11_nf; extern cpuop_func op_06b8_11_ff; extern cpuop_func op_06b9_11_nf; extern cpuop_func op_06b9_11_ff; extern cpuop_func op_0800_11_nf; extern cpuop_func op_0800_11_ff; extern cpuop_func op_0810_11_nf; extern cpuop_func op_0810_11_ff; extern cpuop_func op_0818_11_nf; extern cpuop_func op_0818_11_ff; extern cpuop_func op_0820_11_nf; extern cpuop_func op_0820_11_ff; extern cpuop_func op_0828_11_nf; extern cpuop_func op_0828_11_ff; extern cpuop_func op_0830_11_nf; extern cpuop_func op_0830_11_ff; extern cpuop_func op_0838_11_nf; extern cpuop_func op_0838_11_ff; extern cpuop_func op_0839_11_nf; extern cpuop_func op_0839_11_ff; extern cpuop_func op_083a_11_nf; extern cpuop_func op_083a_11_ff; extern cpuop_func op_083b_11_nf; extern cpuop_func op_083b_11_ff; extern cpuop_func op_083c_11_nf; extern cpuop_func op_083c_11_ff; extern cpuop_func op_0840_11_nf; extern cpuop_func op_0840_11_ff; extern cpuop_func op_0850_11_nf; extern cpuop_func op_0850_11_ff; extern cpuop_func op_0858_11_nf; extern cpuop_func op_0858_11_ff; extern cpuop_func op_0860_11_nf; extern cpuop_func op_0860_11_ff; extern cpuop_func op_0868_11_nf; extern cpuop_func op_0868_11_ff; extern cpuop_func op_0870_11_nf; extern cpuop_func op_0870_11_ff; extern cpuop_func op_0878_11_nf; extern cpuop_func op_0878_11_ff; extern cpuop_func op_0879_11_nf; extern cpuop_func op_0879_11_ff; extern cpuop_func op_087a_11_nf; extern cpuop_func op_087a_11_ff; extern cpuop_func op_087b_11_nf; extern cpuop_func op_087b_11_ff; extern cpuop_func op_0880_11_nf; extern cpuop_func op_0880_11_ff; extern cpuop_func op_0890_11_nf; extern cpuop_func op_0890_11_ff; extern cpuop_func op_0898_11_nf; extern cpuop_func op_0898_11_ff; extern cpuop_func op_08a0_11_nf; extern cpuop_func op_08a0_11_ff; extern cpuop_func op_08a8_11_nf; extern cpuop_func op_08a8_11_ff; extern cpuop_func op_08b0_11_nf; extern cpuop_func op_08b0_11_ff; extern cpuop_func op_08b8_11_nf; extern cpuop_func op_08b8_11_ff; extern cpuop_func op_08b9_11_nf; extern cpuop_func op_08b9_11_ff; extern cpuop_func op_08ba_11_nf; extern cpuop_func op_08ba_11_ff; extern cpuop_func op_08bb_11_nf; extern cpuop_func op_08bb_11_ff; extern cpuop_func op_08c0_11_nf; extern cpuop_func op_08c0_11_ff; extern cpuop_func op_08d0_11_nf; extern cpuop_func op_08d0_11_ff; extern cpuop_func op_08d8_11_nf; extern cpuop_func op_08d8_11_ff; extern cpuop_func op_08e0_11_nf; extern cpuop_func op_08e0_11_ff; extern cpuop_func op_08e8_11_nf; extern cpuop_func op_08e8_11_ff; extern cpuop_func op_08f0_11_nf; extern cpuop_func op_08f0_11_ff; extern cpuop_func op_08f8_11_nf; extern cpuop_func op_08f8_11_ff; extern cpuop_func op_08f9_11_nf; extern cpuop_func op_08f9_11_ff; extern cpuop_func op_08fa_11_nf; extern cpuop_func op_08fa_11_ff; extern cpuop_func op_08fb_11_nf; extern cpuop_func op_08fb_11_ff; extern cpuop_func op_0a00_11_nf; extern cpuop_func op_0a00_11_ff; extern cpuop_func op_0a10_11_nf; extern cpuop_func op_0a10_11_ff; extern cpuop_func op_0a18_11_nf; extern cpuop_func op_0a18_11_ff; extern cpuop_func op_0a20_11_nf; extern cpuop_func op_0a20_11_ff; extern cpuop_func op_0a28_11_nf; extern cpuop_func op_0a28_11_ff; extern cpuop_func op_0a30_11_nf; extern cpuop_func op_0a30_11_ff; extern cpuop_func op_0a38_11_nf; extern cpuop_func op_0a38_11_ff; extern cpuop_func op_0a39_11_nf; extern cpuop_func op_0a39_11_ff; extern cpuop_func op_0a3c_11_nf; extern cpuop_func op_0a3c_11_ff; extern cpuop_func op_0a40_11_nf; extern cpuop_func op_0a40_11_ff; extern cpuop_func op_0a50_11_nf; extern cpuop_func op_0a50_11_ff; extern cpuop_func op_0a58_11_nf; extern cpuop_func op_0a58_11_ff; extern cpuop_func op_0a60_11_nf; extern cpuop_func op_0a60_11_ff; extern cpuop_func op_0a68_11_nf; extern cpuop_func op_0a68_11_ff; extern cpuop_func op_0a70_11_nf; extern cpuop_func op_0a70_11_ff; extern cpuop_func op_0a78_11_nf; extern cpuop_func op_0a78_11_ff; extern cpuop_func op_0a79_11_nf; extern cpuop_func op_0a79_11_ff; extern cpuop_func op_0a7c_11_nf; extern cpuop_func op_0a7c_11_ff; extern cpuop_func op_0a80_11_nf; extern cpuop_func op_0a80_11_ff; extern cpuop_func op_0a90_11_nf; extern cpuop_func op_0a90_11_ff; extern cpuop_func op_0a98_11_nf; extern cpuop_func op_0a98_11_ff; extern cpuop_func op_0aa0_11_nf; extern cpuop_func op_0aa0_11_ff; extern cpuop_func op_0aa8_11_nf; extern cpuop_func op_0aa8_11_ff; extern cpuop_func op_0ab0_11_nf; extern cpuop_func op_0ab0_11_ff; extern cpuop_func op_0ab8_11_nf; extern cpuop_func op_0ab8_11_ff; extern cpuop_func op_0ab9_11_nf; extern cpuop_func op_0ab9_11_ff; extern cpuop_func op_0c00_11_nf; extern cpuop_func op_0c00_11_ff; extern cpuop_func op_0c10_11_nf; extern cpuop_func op_0c10_11_ff; extern cpuop_func op_0c18_11_nf; extern cpuop_func op_0c18_11_ff; extern cpuop_func op_0c20_11_nf; extern cpuop_func op_0c20_11_ff; extern cpuop_func op_0c28_11_nf; extern cpuop_func op_0c28_11_ff; extern cpuop_func op_0c30_11_nf; extern cpuop_func op_0c30_11_ff; extern cpuop_func op_0c38_11_nf; extern cpuop_func op_0c38_11_ff; extern cpuop_func op_0c39_11_nf; extern cpuop_func op_0c39_11_ff; extern cpuop_func op_0c40_11_nf; extern cpuop_func op_0c40_11_ff; extern cpuop_func op_0c50_11_nf; extern cpuop_func op_0c50_11_ff; extern cpuop_func op_0c58_11_nf; extern cpuop_func op_0c58_11_ff; extern cpuop_func op_0c60_11_nf; extern cpuop_func op_0c60_11_ff; extern cpuop_func op_0c68_11_nf; extern cpuop_func op_0c68_11_ff; extern cpuop_func op_0c70_11_nf; extern cpuop_func op_0c70_11_ff; extern cpuop_func op_0c78_11_nf; extern cpuop_func op_0c78_11_ff; extern cpuop_func op_0c79_11_nf; extern cpuop_func op_0c79_11_ff; extern cpuop_func op_0c80_11_nf; extern cpuop_func op_0c80_11_ff; extern cpuop_func op_0c90_11_nf; extern cpuop_func op_0c90_11_ff; extern cpuop_func op_0c98_11_nf; extern cpuop_func op_0c98_11_ff; extern cpuop_func op_0ca0_11_nf; extern cpuop_func op_0ca0_11_ff; extern cpuop_func op_0ca8_11_nf; extern cpuop_func op_0ca8_11_ff; extern cpuop_func op_0cb0_11_nf; extern cpuop_func op_0cb0_11_ff; extern cpuop_func op_0cb8_11_nf; extern cpuop_func op_0cb8_11_ff; extern cpuop_func op_0cb9_11_nf; extern cpuop_func op_0cb9_11_ff; extern cpuop_func op_1000_11_nf; extern cpuop_func op_1000_11_ff; extern cpuop_func op_1010_11_nf; extern cpuop_func op_1010_11_ff; extern cpuop_func op_1018_11_nf; extern cpuop_func op_1018_11_ff; extern cpuop_func op_1020_11_nf; extern cpuop_func op_1020_11_ff; extern cpuop_func op_1028_11_nf; extern cpuop_func op_1028_11_ff; extern cpuop_func op_1030_11_nf; extern cpuop_func op_1030_11_ff; extern cpuop_func op_1038_11_nf; extern cpuop_func op_1038_11_ff; extern cpuop_func op_1039_11_nf; extern cpuop_func op_1039_11_ff; extern cpuop_func op_103a_11_nf; extern cpuop_func op_103a_11_ff; extern cpuop_func op_103b_11_nf; extern cpuop_func op_103b_11_ff; extern cpuop_func op_103c_11_nf; extern cpuop_func op_103c_11_ff; extern cpuop_func op_1080_11_nf; extern cpuop_func op_1080_11_ff; extern cpuop_func op_1090_11_nf; extern cpuop_func op_1090_11_ff; extern cpuop_func op_1098_11_nf; extern cpuop_func op_1098_11_ff; extern cpuop_func op_10a0_11_nf; extern cpuop_func op_10a0_11_ff; extern cpuop_func op_10a8_11_nf; extern cpuop_func op_10a8_11_ff; extern cpuop_func op_10b0_11_nf; extern cpuop_func op_10b0_11_ff; extern cpuop_func op_10b8_11_nf; extern cpuop_func op_10b8_11_ff; extern cpuop_func op_10b9_11_nf; extern cpuop_func op_10b9_11_ff; extern cpuop_func op_10ba_11_nf; extern cpuop_func op_10ba_11_ff; extern cpuop_func op_10bb_11_nf; extern cpuop_func op_10bb_11_ff; extern cpuop_func op_10bc_11_nf; extern cpuop_func op_10bc_11_ff; extern cpuop_func op_10c0_11_nf; extern cpuop_func op_10c0_11_ff; extern cpuop_func op_10d0_11_nf; extern cpuop_func op_10d0_11_ff; extern cpuop_func op_10d8_11_nf; extern cpuop_func op_10d8_11_ff; extern cpuop_func op_10e0_11_nf; extern cpuop_func op_10e0_11_ff; extern cpuop_func op_10e8_11_nf; extern cpuop_func op_10e8_11_ff; extern cpuop_func op_10f0_11_nf; extern cpuop_func op_10f0_11_ff; extern cpuop_func op_10f8_11_nf; extern cpuop_func op_10f8_11_ff; extern cpuop_func op_10f9_11_nf; extern cpuop_func op_10f9_11_ff; extern cpuop_func op_10fa_11_nf; extern cpuop_func op_10fa_11_ff; extern cpuop_func op_10fb_11_nf; extern cpuop_func op_10fb_11_ff; extern cpuop_func op_10fc_11_nf; extern cpuop_func op_10fc_11_ff; extern cpuop_func op_1100_11_nf; extern cpuop_func op_1100_11_ff; extern cpuop_func op_1110_11_nf; extern cpuop_func op_1110_11_ff; extern cpuop_func op_1118_11_nf; extern cpuop_func op_1118_11_ff; extern cpuop_func op_1120_11_nf; extern cpuop_func op_1120_11_ff; extern cpuop_func op_1128_11_nf; extern cpuop_func op_1128_11_ff; extern cpuop_func op_1130_11_nf; extern cpuop_func op_1130_11_ff; extern cpuop_func op_1138_11_nf; extern cpuop_func op_1138_11_ff; extern cpuop_func op_1139_11_nf; extern cpuop_func op_1139_11_ff; extern cpuop_func op_113a_11_nf; extern cpuop_func op_113a_11_ff; extern cpuop_func op_113b_11_nf; extern cpuop_func op_113b_11_ff; extern cpuop_func op_113c_11_nf; extern cpuop_func op_113c_11_ff; extern cpuop_func op_1140_11_nf; extern cpuop_func op_1140_11_ff; extern cpuop_func op_1150_11_nf; extern cpuop_func op_1150_11_ff; extern cpuop_func op_1158_11_nf; extern cpuop_func op_1158_11_ff; extern cpuop_func op_1160_11_nf; extern cpuop_func op_1160_11_ff; extern cpuop_func op_1168_11_nf; extern cpuop_func op_1168_11_ff; extern cpuop_func op_1170_11_nf; extern cpuop_func op_1170_11_ff; extern cpuop_func op_1178_11_nf; extern cpuop_func op_1178_11_ff; extern cpuop_func op_1179_11_nf; extern cpuop_func op_1179_11_ff; extern cpuop_func op_117a_11_nf; extern cpuop_func op_117a_11_ff; extern cpuop_func op_117b_11_nf; extern cpuop_func op_117b_11_ff; extern cpuop_func op_117c_11_nf; extern cpuop_func op_117c_11_ff; extern cpuop_func op_1180_11_nf; extern cpuop_func op_1180_11_ff; extern cpuop_func op_1190_11_nf; extern cpuop_func op_1190_11_ff; extern cpuop_func op_1198_11_nf; extern cpuop_func op_1198_11_ff; extern cpuop_func op_11a0_11_nf; extern cpuop_func op_11a0_11_ff; extern cpuop_func op_11a8_11_nf; extern cpuop_func op_11a8_11_ff; extern cpuop_func op_11b0_11_nf; extern cpuop_func op_11b0_11_ff; extern cpuop_func op_11b8_11_nf; extern cpuop_func op_11b8_11_ff; extern cpuop_func op_11b9_11_nf; extern cpuop_func op_11b9_11_ff; extern cpuop_func op_11ba_11_nf; extern cpuop_func op_11ba_11_ff; extern cpuop_func op_11bb_11_nf; extern cpuop_func op_11bb_11_ff; extern cpuop_func op_11bc_11_nf; extern cpuop_func op_11bc_11_ff; extern cpuop_func op_11c0_11_nf; extern cpuop_func op_11c0_11_ff; extern cpuop_func op_11d0_11_nf; extern cpuop_func op_11d0_11_ff; extern cpuop_func op_11d8_11_nf; extern cpuop_func op_11d8_11_ff; extern cpuop_func op_11e0_11_nf; extern cpuop_func op_11e0_11_ff; extern cpuop_func op_11e8_11_nf; extern cpuop_func op_11e8_11_ff; extern cpuop_func op_11f0_11_nf; extern cpuop_func op_11f0_11_ff; extern cpuop_func op_11f8_11_nf; extern cpuop_func op_11f8_11_ff; extern cpuop_func op_11f9_11_nf; extern cpuop_func op_11f9_11_ff; extern cpuop_func op_11fa_11_nf; extern cpuop_func op_11fa_11_ff; extern cpuop_func op_11fb_11_nf; extern cpuop_func op_11fb_11_ff; extern cpuop_func op_11fc_11_nf; extern cpuop_func op_11fc_11_ff; extern cpuop_func op_13c0_11_nf; extern cpuop_func op_13c0_11_ff; extern cpuop_func op_13d0_11_nf; extern cpuop_func op_13d0_11_ff; extern cpuop_func op_13d8_11_nf; extern cpuop_func op_13d8_11_ff; extern cpuop_func op_13e0_11_nf; extern cpuop_func op_13e0_11_ff; extern cpuop_func op_13e8_11_nf; extern cpuop_func op_13e8_11_ff; extern cpuop_func op_13f0_11_nf; extern cpuop_func op_13f0_11_ff; extern cpuop_func op_13f8_11_nf; extern cpuop_func op_13f8_11_ff; extern cpuop_func op_13f9_11_nf; extern cpuop_func op_13f9_11_ff; extern cpuop_func op_13fa_11_nf; extern cpuop_func op_13fa_11_ff; extern cpuop_func op_13fb_11_nf; extern cpuop_func op_13fb_11_ff; extern cpuop_func op_13fc_11_nf; extern cpuop_func op_13fc_11_ff; extern cpuop_func op_2000_11_nf; extern cpuop_func op_2000_11_ff; extern cpuop_func op_2008_11_nf; extern cpuop_func op_2008_11_ff; extern cpuop_func op_2010_11_nf; extern cpuop_func op_2010_11_ff; extern cpuop_func op_2018_11_nf; extern cpuop_func op_2018_11_ff; extern cpuop_func op_2020_11_nf; extern cpuop_func op_2020_11_ff; extern cpuop_func op_2028_11_nf; extern cpuop_func op_2028_11_ff; extern cpuop_func op_2030_11_nf; extern cpuop_func op_2030_11_ff; extern cpuop_func op_2038_11_nf; extern cpuop_func op_2038_11_ff; extern cpuop_func op_2039_11_nf; extern cpuop_func op_2039_11_ff; extern cpuop_func op_203a_11_nf; extern cpuop_func op_203a_11_ff; extern cpuop_func op_203b_11_nf; extern cpuop_func op_203b_11_ff; extern cpuop_func op_203c_11_nf; extern cpuop_func op_203c_11_ff; extern cpuop_func op_2040_11_nf; extern cpuop_func op_2040_11_ff; extern cpuop_func op_2048_11_nf; extern cpuop_func op_2048_11_ff; extern cpuop_func op_2050_11_nf; extern cpuop_func op_2050_11_ff; extern cpuop_func op_2058_11_nf; extern cpuop_func op_2058_11_ff; extern cpuop_func op_2060_11_nf; extern cpuop_func op_2060_11_ff; extern cpuop_func op_2068_11_nf; extern cpuop_func op_2068_11_ff; extern cpuop_func op_2070_11_nf; extern cpuop_func op_2070_11_ff; extern cpuop_func op_2078_11_nf; extern cpuop_func op_2078_11_ff; extern cpuop_func op_2079_11_nf; extern cpuop_func op_2079_11_ff; extern cpuop_func op_207a_11_nf; extern cpuop_func op_207a_11_ff; extern cpuop_func op_207b_11_nf; extern cpuop_func op_207b_11_ff; extern cpuop_func op_207c_11_nf; extern cpuop_func op_207c_11_ff; extern cpuop_func op_2080_11_nf; extern cpuop_func op_2080_11_ff; extern cpuop_func op_2088_11_nf; extern cpuop_func op_2088_11_ff; extern cpuop_func op_2090_11_nf; extern cpuop_func op_2090_11_ff; extern cpuop_func op_2098_11_nf; extern cpuop_func op_2098_11_ff; extern cpuop_func op_20a0_11_nf; extern cpuop_func op_20a0_11_ff; extern cpuop_func op_20a8_11_nf; extern cpuop_func op_20a8_11_ff; extern cpuop_func op_20b0_11_nf; extern cpuop_func op_20b0_11_ff; extern cpuop_func op_20b8_11_nf; extern cpuop_func op_20b8_11_ff; extern cpuop_func op_20b9_11_nf; extern cpuop_func op_20b9_11_ff; extern cpuop_func op_20ba_11_nf; extern cpuop_func op_20ba_11_ff; extern cpuop_func op_20bb_11_nf; extern cpuop_func op_20bb_11_ff; extern cpuop_func op_20bc_11_nf; extern cpuop_func op_20bc_11_ff; extern cpuop_func op_20c0_11_nf; extern cpuop_func op_20c0_11_ff; extern cpuop_func op_20c8_11_nf; extern cpuop_func op_20c8_11_ff; extern cpuop_func op_20d0_11_nf; extern cpuop_func op_20d0_11_ff; extern cpuop_func op_20d8_11_nf; extern cpuop_func op_20d8_11_ff; extern cpuop_func op_20e0_11_nf; extern cpuop_func op_20e0_11_ff; extern cpuop_func op_20e8_11_nf; extern cpuop_func op_20e8_11_ff; extern cpuop_func op_20f0_11_nf; extern cpuop_func op_20f0_11_ff; extern cpuop_func op_20f8_11_nf; extern cpuop_func op_20f8_11_ff; extern cpuop_func op_20f9_11_nf; extern cpuop_func op_20f9_11_ff; extern cpuop_func op_20fa_11_nf; extern cpuop_func op_20fa_11_ff; extern cpuop_func op_20fb_11_nf; extern cpuop_func op_20fb_11_ff; extern cpuop_func op_20fc_11_nf; extern cpuop_func op_20fc_11_ff; extern cpuop_func op_2100_11_nf; extern cpuop_func op_2100_11_ff; extern cpuop_func op_2108_11_nf; extern cpuop_func op_2108_11_ff; extern cpuop_func op_2110_11_nf; extern cpuop_func op_2110_11_ff; extern cpuop_func op_2118_11_nf; extern cpuop_func op_2118_11_ff; extern cpuop_func op_2120_11_nf; extern cpuop_func op_2120_11_ff; extern cpuop_func op_2128_11_nf; extern cpuop_func op_2128_11_ff; extern cpuop_func op_2130_11_nf; extern cpuop_func op_2130_11_ff; extern cpuop_func op_2138_11_nf; extern cpuop_func op_2138_11_ff; extern cpuop_func op_2139_11_nf; extern cpuop_func op_2139_11_ff; extern cpuop_func op_213a_11_nf; extern cpuop_func op_213a_11_ff; extern cpuop_func op_213b_11_nf; extern cpuop_func op_213b_11_ff; extern cpuop_func op_213c_11_nf; extern cpuop_func op_213c_11_ff; extern cpuop_func op_2140_11_nf; extern cpuop_func op_2140_11_ff; extern cpuop_func op_2148_11_nf; extern cpuop_func op_2148_11_ff; extern cpuop_func op_2150_11_nf; extern cpuop_func op_2150_11_ff; extern cpuop_func op_2158_11_nf; extern cpuop_func op_2158_11_ff; extern cpuop_func op_2160_11_nf; extern cpuop_func op_2160_11_ff; extern cpuop_func op_2168_11_nf; extern cpuop_func op_2168_11_ff; extern cpuop_func op_2170_11_nf; extern cpuop_func op_2170_11_ff; extern cpuop_func op_2178_11_nf; extern cpuop_func op_2178_11_ff; extern cpuop_func op_2179_11_nf; extern cpuop_func op_2179_11_ff; extern cpuop_func op_217a_11_nf; extern cpuop_func op_217a_11_ff; extern cpuop_func op_217b_11_nf; extern cpuop_func op_217b_11_ff; extern cpuop_func op_217c_11_nf; extern cpuop_func op_217c_11_ff; extern cpuop_func op_2180_11_nf; extern cpuop_func op_2180_11_ff; extern cpuop_func op_2188_11_nf; extern cpuop_func op_2188_11_ff; extern cpuop_func op_2190_11_nf; extern cpuop_func op_2190_11_ff; extern cpuop_func op_2198_11_nf; extern cpuop_func op_2198_11_ff; extern cpuop_func op_21a0_11_nf; extern cpuop_func op_21a0_11_ff; extern cpuop_func op_21a8_11_nf; extern cpuop_func op_21a8_11_ff; extern cpuop_func op_21b0_11_nf; extern cpuop_func op_21b0_11_ff; extern cpuop_func op_21b8_11_nf; extern cpuop_func op_21b8_11_ff; extern cpuop_func op_21b9_11_nf; extern cpuop_func op_21b9_11_ff; extern cpuop_func op_21ba_11_nf; extern cpuop_func op_21ba_11_ff; extern cpuop_func op_21bb_11_nf; extern cpuop_func op_21bb_11_ff; extern cpuop_func op_21bc_11_nf; extern cpuop_func op_21bc_11_ff; extern cpuop_func op_21c0_11_nf; extern cpuop_func op_21c0_11_ff; extern cpuop_func op_21c8_11_nf; extern cpuop_func op_21c8_11_ff; extern cpuop_func op_21d0_11_nf; extern cpuop_func op_21d0_11_ff; extern cpuop_func op_21d8_11_nf; extern cpuop_func op_21d8_11_ff; extern cpuop_func op_21e0_11_nf; extern cpuop_func op_21e0_11_ff; extern cpuop_func op_21e8_11_nf; extern cpuop_func op_21e8_11_ff; extern cpuop_func op_21f0_11_nf; extern cpuop_func op_21f0_11_ff; extern cpuop_func op_21f8_11_nf; extern cpuop_func op_21f8_11_ff; extern cpuop_func op_21f9_11_nf; extern cpuop_func op_21f9_11_ff; extern cpuop_func op_21fa_11_nf; extern cpuop_func op_21fa_11_ff; extern cpuop_func op_21fb_11_nf; extern cpuop_func op_21fb_11_ff; extern cpuop_func op_21fc_11_nf; extern cpuop_func op_21fc_11_ff; extern cpuop_func op_23c0_11_nf; extern cpuop_func op_23c0_11_ff; extern cpuop_func op_23c8_11_nf; extern cpuop_func op_23c8_11_ff; extern cpuop_func op_23d0_11_nf; extern cpuop_func op_23d0_11_ff; extern cpuop_func op_23d8_11_nf; extern cpuop_func op_23d8_11_ff; extern cpuop_func op_23e0_11_nf; extern cpuop_func op_23e0_11_ff; extern cpuop_func op_23e8_11_nf; extern cpuop_func op_23e8_11_ff; extern cpuop_func op_23f0_11_nf; extern cpuop_func op_23f0_11_ff; extern cpuop_func op_23f8_11_nf; extern cpuop_func op_23f8_11_ff; extern cpuop_func op_23f9_11_nf; extern cpuop_func op_23f9_11_ff; extern cpuop_func op_23fa_11_nf; extern cpuop_func op_23fa_11_ff; extern cpuop_func op_23fb_11_nf; extern cpuop_func op_23fb_11_ff; extern cpuop_func op_23fc_11_nf; extern cpuop_func op_23fc_11_ff; extern cpuop_func op_3000_11_nf; extern cpuop_func op_3000_11_ff; extern cpuop_func op_3008_11_nf; extern cpuop_func op_3008_11_ff; extern cpuop_func op_3010_11_nf; extern cpuop_func op_3010_11_ff; extern cpuop_func op_3018_11_nf; extern cpuop_func op_3018_11_ff; extern cpuop_func op_3020_11_nf; extern cpuop_func op_3020_11_ff; extern cpuop_func op_3028_11_nf; extern cpuop_func op_3028_11_ff; extern cpuop_func op_3030_11_nf; extern cpuop_func op_3030_11_ff; extern cpuop_func op_3038_11_nf; extern cpuop_func op_3038_11_ff; extern cpuop_func op_3039_11_nf; extern cpuop_func op_3039_11_ff; extern cpuop_func op_303a_11_nf; extern cpuop_func op_303a_11_ff; extern cpuop_func op_303b_11_nf; extern cpuop_func op_303b_11_ff; extern cpuop_func op_303c_11_nf; extern cpuop_func op_303c_11_ff; extern cpuop_func op_3040_11_nf; extern cpuop_func op_3040_11_ff; extern cpuop_func op_3048_11_nf; extern cpuop_func op_3048_11_ff; extern cpuop_func op_3050_11_nf; extern cpuop_func op_3050_11_ff; extern cpuop_func op_3058_11_nf; extern cpuop_func op_3058_11_ff; extern cpuop_func op_3060_11_nf; extern cpuop_func op_3060_11_ff; extern cpuop_func op_3068_11_nf; extern cpuop_func op_3068_11_ff; extern cpuop_func op_3070_11_nf; extern cpuop_func op_3070_11_ff; extern cpuop_func op_3078_11_nf; extern cpuop_func op_3078_11_ff; extern cpuop_func op_3079_11_nf; extern cpuop_func op_3079_11_ff; extern cpuop_func op_307a_11_nf; extern cpuop_func op_307a_11_ff; extern cpuop_func op_307b_11_nf; extern cpuop_func op_307b_11_ff; extern cpuop_func op_307c_11_nf; extern cpuop_func op_307c_11_ff; extern cpuop_func op_3080_11_nf; extern cpuop_func op_3080_11_ff; extern cpuop_func op_3088_11_nf; extern cpuop_func op_3088_11_ff; extern cpuop_func op_3090_11_nf; extern cpuop_func op_3090_11_ff; extern cpuop_func op_3098_11_nf; extern cpuop_func op_3098_11_ff; extern cpuop_func op_30a0_11_nf; extern cpuop_func op_30a0_11_ff; extern cpuop_func op_30a8_11_nf; extern cpuop_func op_30a8_11_ff; extern cpuop_func op_30b0_11_nf; extern cpuop_func op_30b0_11_ff; extern cpuop_func op_30b8_11_nf; extern cpuop_func op_30b8_11_ff; extern cpuop_func op_30b9_11_nf; extern cpuop_func op_30b9_11_ff; extern cpuop_func op_30ba_11_nf; extern cpuop_func op_30ba_11_ff; extern cpuop_func op_30bb_11_nf; extern cpuop_func op_30bb_11_ff; extern cpuop_func op_30bc_11_nf; extern cpuop_func op_30bc_11_ff; extern cpuop_func op_30c0_11_nf; extern cpuop_func op_30c0_11_ff; extern cpuop_func op_30c8_11_nf; extern cpuop_func op_30c8_11_ff; extern cpuop_func op_30d0_11_nf; extern cpuop_func op_30d0_11_ff; extern cpuop_func op_30d8_11_nf; extern cpuop_func op_30d8_11_ff; extern cpuop_func op_30e0_11_nf; extern cpuop_func op_30e0_11_ff; extern cpuop_func op_30e8_11_nf; extern cpuop_func op_30e8_11_ff; extern cpuop_func op_30f0_11_nf; extern cpuop_func op_30f0_11_ff; extern cpuop_func op_30f8_11_nf; extern cpuop_func op_30f8_11_ff; extern cpuop_func op_30f9_11_nf; extern cpuop_func op_30f9_11_ff; extern cpuop_func op_30fa_11_nf; extern cpuop_func op_30fa_11_ff; extern cpuop_func op_30fb_11_nf; extern cpuop_func op_30fb_11_ff; extern cpuop_func op_30fc_11_nf; extern cpuop_func op_30fc_11_ff; extern cpuop_func op_3100_11_nf; extern cpuop_func op_3100_11_ff; extern cpuop_func op_3108_11_nf; extern cpuop_func op_3108_11_ff; extern cpuop_func op_3110_11_nf; extern cpuop_func op_3110_11_ff; extern cpuop_func op_3118_11_nf; extern cpuop_func op_3118_11_ff; extern cpuop_func op_3120_11_nf; extern cpuop_func op_3120_11_ff; extern cpuop_func op_3128_11_nf; extern cpuop_func op_3128_11_ff; extern cpuop_func op_3130_11_nf; extern cpuop_func op_3130_11_ff; extern cpuop_func op_3138_11_nf; extern cpuop_func op_3138_11_ff; extern cpuop_func op_3139_11_nf; extern cpuop_func op_3139_11_ff; extern cpuop_func op_313a_11_nf; extern cpuop_func op_313a_11_ff; extern cpuop_func op_313b_11_nf; extern cpuop_func op_313b_11_ff; extern cpuop_func op_313c_11_nf; extern cpuop_func op_313c_11_ff; extern cpuop_func op_3140_11_nf; extern cpuop_func op_3140_11_ff; extern cpuop_func op_3148_11_nf; extern cpuop_func op_3148_11_ff; extern cpuop_func op_3150_11_nf; extern cpuop_func op_3150_11_ff; extern cpuop_func op_3158_11_nf; extern cpuop_func op_3158_11_ff; extern cpuop_func op_3160_11_nf; extern cpuop_func op_3160_11_ff; extern cpuop_func op_3168_11_nf; extern cpuop_func op_3168_11_ff; extern cpuop_func op_3170_11_nf; extern cpuop_func op_3170_11_ff; extern cpuop_func op_3178_11_nf; extern cpuop_func op_3178_11_ff; extern cpuop_func op_3179_11_nf; extern cpuop_func op_3179_11_ff; extern cpuop_func op_317a_11_nf; extern cpuop_func op_317a_11_ff; extern cpuop_func op_317b_11_nf; extern cpuop_func op_317b_11_ff; extern cpuop_func op_317c_11_nf; extern cpuop_func op_317c_11_ff; extern cpuop_func op_3180_11_nf; extern cpuop_func op_3180_11_ff; extern cpuop_func op_3188_11_nf; extern cpuop_func op_3188_11_ff; extern cpuop_func op_3190_11_nf; extern cpuop_func op_3190_11_ff; extern cpuop_func op_3198_11_nf; extern cpuop_func op_3198_11_ff; extern cpuop_func op_31a0_11_nf; extern cpuop_func op_31a0_11_ff; extern cpuop_func op_31a8_11_nf; extern cpuop_func op_31a8_11_ff; extern cpuop_func op_31b0_11_nf; extern cpuop_func op_31b0_11_ff; extern cpuop_func op_31b8_11_nf; extern cpuop_func op_31b8_11_ff; extern cpuop_func op_31b9_11_nf; extern cpuop_func op_31b9_11_ff; extern cpuop_func op_31ba_11_nf; extern cpuop_func op_31ba_11_ff; extern cpuop_func op_31bb_11_nf; extern cpuop_func op_31bb_11_ff; extern cpuop_func op_31bc_11_nf; extern cpuop_func op_31bc_11_ff; extern cpuop_func op_31c0_11_nf; extern cpuop_func op_31c0_11_ff; extern cpuop_func op_31c8_11_nf; extern cpuop_func op_31c8_11_ff; extern cpuop_func op_31d0_11_nf; extern cpuop_func op_31d0_11_ff; extern cpuop_func op_31d8_11_nf; extern cpuop_func op_31d8_11_ff; extern cpuop_func op_31e0_11_nf; extern cpuop_func op_31e0_11_ff; extern cpuop_func op_31e8_11_nf; extern cpuop_func op_31e8_11_ff; extern cpuop_func op_31f0_11_nf; extern cpuop_func op_31f0_11_ff; extern cpuop_func op_31f8_11_nf; extern cpuop_func op_31f8_11_ff; extern cpuop_func op_31f9_11_nf; extern cpuop_func op_31f9_11_ff; extern cpuop_func op_31fa_11_nf; extern cpuop_func op_31fa_11_ff; extern cpuop_func op_31fb_11_nf; extern cpuop_func op_31fb_11_ff; extern cpuop_func op_31fc_11_nf; extern cpuop_func op_31fc_11_ff; extern cpuop_func op_33c0_11_nf; extern cpuop_func op_33c0_11_ff; extern cpuop_func op_33c8_11_nf; extern cpuop_func op_33c8_11_ff; extern cpuop_func op_33d0_11_nf; extern cpuop_func op_33d0_11_ff; extern cpuop_func op_33d8_11_nf; extern cpuop_func op_33d8_11_ff; extern cpuop_func op_33e0_11_nf; extern cpuop_func op_33e0_11_ff; extern cpuop_func op_33e8_11_nf; extern cpuop_func op_33e8_11_ff; extern cpuop_func op_33f0_11_nf; extern cpuop_func op_33f0_11_ff; extern cpuop_func op_33f8_11_nf; extern cpuop_func op_33f8_11_ff; extern cpuop_func op_33f9_11_nf; extern cpuop_func op_33f9_11_ff; extern cpuop_func op_33fa_11_nf; extern cpuop_func op_33fa_11_ff; extern cpuop_func op_33fb_11_nf; extern cpuop_func op_33fb_11_ff; extern cpuop_func op_33fc_11_nf; extern cpuop_func op_33fc_11_ff; extern cpuop_func op_4000_11_nf; extern cpuop_func op_4000_11_ff; extern cpuop_func op_4010_11_nf; extern cpuop_func op_4010_11_ff; extern cpuop_func op_4018_11_nf; extern cpuop_func op_4018_11_ff; extern cpuop_func op_4020_11_nf; extern cpuop_func op_4020_11_ff; extern cpuop_func op_4028_11_nf; extern cpuop_func op_4028_11_ff; extern cpuop_func op_4030_11_nf; extern cpuop_func op_4030_11_ff; extern cpuop_func op_4038_11_nf; extern cpuop_func op_4038_11_ff; extern cpuop_func op_4039_11_nf; extern cpuop_func op_4039_11_ff; extern cpuop_func op_4040_11_nf; extern cpuop_func op_4040_11_ff; extern cpuop_func op_4050_11_nf; extern cpuop_func op_4050_11_ff; extern cpuop_func op_4058_11_nf; extern cpuop_func op_4058_11_ff; extern cpuop_func op_4060_11_nf; extern cpuop_func op_4060_11_ff; extern cpuop_func op_4068_11_nf; extern cpuop_func op_4068_11_ff; extern cpuop_func op_4070_11_nf; extern cpuop_func op_4070_11_ff; extern cpuop_func op_4078_11_nf; extern cpuop_func op_4078_11_ff; extern cpuop_func op_4079_11_nf; extern cpuop_func op_4079_11_ff; extern cpuop_func op_4080_11_nf; extern cpuop_func op_4080_11_ff; extern cpuop_func op_4090_11_nf; extern cpuop_func op_4090_11_ff; extern cpuop_func op_4098_11_nf; extern cpuop_func op_4098_11_ff; extern cpuop_func op_40a0_11_nf; extern cpuop_func op_40a0_11_ff; extern cpuop_func op_40a8_11_nf; extern cpuop_func op_40a8_11_ff; extern cpuop_func op_40b0_11_nf; extern cpuop_func op_40b0_11_ff; extern cpuop_func op_40b8_11_nf; extern cpuop_func op_40b8_11_ff; extern cpuop_func op_40b9_11_nf; extern cpuop_func op_40b9_11_ff; extern cpuop_func op_40c0_11_nf; extern cpuop_func op_40c0_11_ff; extern cpuop_func op_40d0_11_nf; extern cpuop_func op_40d0_11_ff; extern cpuop_func op_40d8_11_nf; extern cpuop_func op_40d8_11_ff; extern cpuop_func op_40e0_11_nf; extern cpuop_func op_40e0_11_ff; extern cpuop_func op_40e8_11_nf; extern cpuop_func op_40e8_11_ff; extern cpuop_func op_40f0_11_nf; extern cpuop_func op_40f0_11_ff; extern cpuop_func op_40f8_11_nf; extern cpuop_func op_40f8_11_ff; extern cpuop_func op_40f9_11_nf; extern cpuop_func op_40f9_11_ff; extern cpuop_func op_4180_11_nf; extern cpuop_func op_4180_11_ff; extern cpuop_func op_4190_11_nf; extern cpuop_func op_4190_11_ff; extern cpuop_func op_4198_11_nf; extern cpuop_func op_4198_11_ff; extern cpuop_func op_41a0_11_nf; extern cpuop_func op_41a0_11_ff; extern cpuop_func op_41a8_11_nf; extern cpuop_func op_41a8_11_ff; extern cpuop_func op_41b0_11_nf; extern cpuop_func op_41b0_11_ff; extern cpuop_func op_41b8_11_nf; extern cpuop_func op_41b8_11_ff; extern cpuop_func op_41b9_11_nf; extern cpuop_func op_41b9_11_ff; extern cpuop_func op_41ba_11_nf; extern cpuop_func op_41ba_11_ff; extern cpuop_func op_41bb_11_nf; extern cpuop_func op_41bb_11_ff; extern cpuop_func op_41bc_11_nf; extern cpuop_func op_41bc_11_ff; extern cpuop_func op_41d0_11_nf; extern cpuop_func op_41d0_11_ff; extern cpuop_func op_41e8_11_nf; extern cpuop_func op_41e8_11_ff; extern cpuop_func op_41f0_11_nf; extern cpuop_func op_41f0_11_ff; extern cpuop_func op_41f8_11_nf; extern cpuop_func op_41f8_11_ff; extern cpuop_func op_41f9_11_nf; extern cpuop_func op_41f9_11_ff; extern cpuop_func op_41fa_11_nf; extern cpuop_func op_41fa_11_ff; extern cpuop_func op_41fb_11_nf; extern cpuop_func op_41fb_11_ff; extern cpuop_func op_4200_11_nf; extern cpuop_func op_4200_11_ff; extern cpuop_func op_4210_11_nf; extern cpuop_func op_4210_11_ff; extern cpuop_func op_4218_11_nf; extern cpuop_func op_4218_11_ff; extern cpuop_func op_4220_11_nf; extern cpuop_func op_4220_11_ff; extern cpuop_func op_4228_11_nf; extern cpuop_func op_4228_11_ff; extern cpuop_func op_4230_11_nf; extern cpuop_func op_4230_11_ff; extern cpuop_func op_4238_11_nf; extern cpuop_func op_4238_11_ff; extern cpuop_func op_4239_11_nf; extern cpuop_func op_4239_11_ff; extern cpuop_func op_4240_11_nf; extern cpuop_func op_4240_11_ff; extern cpuop_func op_4250_11_nf; extern cpuop_func op_4250_11_ff; extern cpuop_func op_4258_11_nf; extern cpuop_func op_4258_11_ff; extern cpuop_func op_4260_11_nf; extern cpuop_func op_4260_11_ff; extern cpuop_func op_4268_11_nf; extern cpuop_func op_4268_11_ff; extern cpuop_func op_4270_11_nf; extern cpuop_func op_4270_11_ff; extern cpuop_func op_4278_11_nf; extern cpuop_func op_4278_11_ff; extern cpuop_func op_4279_11_nf; extern cpuop_func op_4279_11_ff; extern cpuop_func op_4280_11_nf; extern cpuop_func op_4280_11_ff; extern cpuop_func op_4290_11_nf; extern cpuop_func op_4290_11_ff; extern cpuop_func op_4298_11_nf; extern cpuop_func op_4298_11_ff; extern cpuop_func op_42a0_11_nf; extern cpuop_func op_42a0_11_ff; extern cpuop_func op_42a8_11_nf; extern cpuop_func op_42a8_11_ff; extern cpuop_func op_42b0_11_nf; extern cpuop_func op_42b0_11_ff; extern cpuop_func op_42b8_11_nf; extern cpuop_func op_42b8_11_ff; extern cpuop_func op_42b9_11_nf; extern cpuop_func op_42b9_11_ff; extern cpuop_func op_4400_11_nf; extern cpuop_func op_4400_11_ff; extern cpuop_func op_4410_11_nf; extern cpuop_func op_4410_11_ff; extern cpuop_func op_4418_11_nf; extern cpuop_func op_4418_11_ff; extern cpuop_func op_4420_11_nf; extern cpuop_func op_4420_11_ff; extern cpuop_func op_4428_11_nf; extern cpuop_func op_4428_11_ff; extern cpuop_func op_4430_11_nf; extern cpuop_func op_4430_11_ff; extern cpuop_func op_4438_11_nf; extern cpuop_func op_4438_11_ff; extern cpuop_func op_4439_11_nf; extern cpuop_func op_4439_11_ff; extern cpuop_func op_4440_11_nf; extern cpuop_func op_4440_11_ff; extern cpuop_func op_4450_11_nf; extern cpuop_func op_4450_11_ff; extern cpuop_func op_4458_11_nf; extern cpuop_func op_4458_11_ff; extern cpuop_func op_4460_11_nf; extern cpuop_func op_4460_11_ff; extern cpuop_func op_4468_11_nf; extern cpuop_func op_4468_11_ff; extern cpuop_func op_4470_11_nf; extern cpuop_func op_4470_11_ff; extern cpuop_func op_4478_11_nf; extern cpuop_func op_4478_11_ff; extern cpuop_func op_4479_11_nf; extern cpuop_func op_4479_11_ff; extern cpuop_func op_4480_11_nf; extern cpuop_func op_4480_11_ff; extern cpuop_func op_4490_11_nf; extern cpuop_func op_4490_11_ff; extern cpuop_func op_4498_11_nf; extern cpuop_func op_4498_11_ff; extern cpuop_func op_44a0_11_nf; extern cpuop_func op_44a0_11_ff; extern cpuop_func op_44a8_11_nf; extern cpuop_func op_44a8_11_ff; extern cpuop_func op_44b0_11_nf; extern cpuop_func op_44b0_11_ff; extern cpuop_func op_44b8_11_nf; extern cpuop_func op_44b8_11_ff; extern cpuop_func op_44b9_11_nf; extern cpuop_func op_44b9_11_ff; extern cpuop_func op_44c0_11_nf; extern cpuop_func op_44c0_11_ff; extern cpuop_func op_44d0_11_nf; extern cpuop_func op_44d0_11_ff; extern cpuop_func op_44d8_11_nf; extern cpuop_func op_44d8_11_ff; extern cpuop_func op_44e0_11_nf; extern cpuop_func op_44e0_11_ff; extern cpuop_func op_44e8_11_nf; extern cpuop_func op_44e8_11_ff; extern cpuop_func op_44f0_11_nf; extern cpuop_func op_44f0_11_ff; extern cpuop_func op_44f8_11_nf; extern cpuop_func op_44f8_11_ff; extern cpuop_func op_44f9_11_nf; extern cpuop_func op_44f9_11_ff; extern cpuop_func op_44fa_11_nf; extern cpuop_func op_44fa_11_ff; extern cpuop_func op_44fb_11_nf; extern cpuop_func op_44fb_11_ff; extern cpuop_func op_44fc_11_nf; extern cpuop_func op_44fc_11_ff; extern cpuop_func op_4600_11_nf; extern cpuop_func op_4600_11_ff; extern cpuop_func op_4610_11_nf; extern cpuop_func op_4610_11_ff; extern cpuop_func op_4618_11_nf; extern cpuop_func op_4618_11_ff; extern cpuop_func op_4620_11_nf; extern cpuop_func op_4620_11_ff; extern cpuop_func op_4628_11_nf; extern cpuop_func op_4628_11_ff; extern cpuop_func op_4630_11_nf; extern cpuop_func op_4630_11_ff; extern cpuop_func op_4638_11_nf; extern cpuop_func op_4638_11_ff; extern cpuop_func op_4639_11_nf; extern cpuop_func op_4639_11_ff; extern cpuop_func op_4640_11_nf; extern cpuop_func op_4640_11_ff; extern cpuop_func op_4650_11_nf; extern cpuop_func op_4650_11_ff; extern cpuop_func op_4658_11_nf; extern cpuop_func op_4658_11_ff; extern cpuop_func op_4660_11_nf; extern cpuop_func op_4660_11_ff; extern cpuop_func op_4668_11_nf; extern cpuop_func op_4668_11_ff; extern cpuop_func op_4670_11_nf; extern cpuop_func op_4670_11_ff; extern cpuop_func op_4678_11_nf; extern cpuop_func op_4678_11_ff; extern cpuop_func op_4679_11_nf; extern cpuop_func op_4679_11_ff; extern cpuop_func op_4680_11_nf; extern cpuop_func op_4680_11_ff; extern cpuop_func op_4690_11_nf; extern cpuop_func op_4690_11_ff; extern cpuop_func op_4698_11_nf; extern cpuop_func op_4698_11_ff; extern cpuop_func op_46a0_11_nf; extern cpuop_func op_46a0_11_ff; extern cpuop_func op_46a8_11_nf; extern cpuop_func op_46a8_11_ff; extern cpuop_func op_46b0_11_nf; extern cpuop_func op_46b0_11_ff; extern cpuop_func op_46b8_11_nf; extern cpuop_func op_46b8_11_ff; extern cpuop_func op_46b9_11_nf; extern cpuop_func op_46b9_11_ff; extern cpuop_func op_46c0_11_nf; extern cpuop_func op_46c0_11_ff; extern cpuop_func op_46d0_11_nf; extern cpuop_func op_46d0_11_ff; extern cpuop_func op_46d8_11_nf; extern cpuop_func op_46d8_11_ff; extern cpuop_func op_46e0_11_nf; extern cpuop_func op_46e0_11_ff; extern cpuop_func op_46e8_11_nf; extern cpuop_func op_46e8_11_ff; extern cpuop_func op_46f0_11_nf; extern cpuop_func op_46f0_11_ff; extern cpuop_func op_46f8_11_nf; extern cpuop_func op_46f8_11_ff; extern cpuop_func op_46f9_11_nf; extern cpuop_func op_46f9_11_ff; extern cpuop_func op_46fa_11_nf; extern cpuop_func op_46fa_11_ff; extern cpuop_func op_46fb_11_nf; extern cpuop_func op_46fb_11_ff; extern cpuop_func op_46fc_11_nf; extern cpuop_func op_46fc_11_ff; extern cpuop_func op_4800_11_nf; extern cpuop_func op_4800_11_ff; extern cpuop_func op_4810_11_nf; extern cpuop_func op_4810_11_ff; extern cpuop_func op_4818_11_nf; extern cpuop_func op_4818_11_ff; extern cpuop_func op_4820_11_nf; extern cpuop_func op_4820_11_ff; extern cpuop_func op_4828_11_nf; extern cpuop_func op_4828_11_ff; extern cpuop_func op_4830_11_nf; extern cpuop_func op_4830_11_ff; extern cpuop_func op_4838_11_nf; extern cpuop_func op_4838_11_ff; extern cpuop_func op_4839_11_nf; extern cpuop_func op_4839_11_ff; extern cpuop_func op_4840_11_nf; extern cpuop_func op_4840_11_ff; extern cpuop_func op_4850_11_nf; extern cpuop_func op_4850_11_ff; extern cpuop_func op_4868_11_nf; extern cpuop_func op_4868_11_ff; extern cpuop_func op_4870_11_nf; extern cpuop_func op_4870_11_ff; extern cpuop_func op_4878_11_nf; extern cpuop_func op_4878_11_ff; extern cpuop_func op_4879_11_nf; extern cpuop_func op_4879_11_ff; extern cpuop_func op_487a_11_nf; extern cpuop_func op_487a_11_ff; extern cpuop_func op_487b_11_nf; extern cpuop_func op_487b_11_ff; extern cpuop_func op_4880_11_nf; extern cpuop_func op_4880_11_ff; extern cpuop_func op_4890_11_nf; extern cpuop_func op_4890_11_ff; extern cpuop_func op_48a0_11_nf; extern cpuop_func op_48a0_11_ff; extern cpuop_func op_48a8_11_nf; extern cpuop_func op_48a8_11_ff; extern cpuop_func op_48b0_11_nf; extern cpuop_func op_48b0_11_ff; extern cpuop_func op_48b8_11_nf; extern cpuop_func op_48b8_11_ff; extern cpuop_func op_48b9_11_nf; extern cpuop_func op_48b9_11_ff; extern cpuop_func op_48c0_11_nf; extern cpuop_func op_48c0_11_ff; extern cpuop_func op_48d0_11_nf; extern cpuop_func op_48d0_11_ff; extern cpuop_func op_48e0_11_nf; extern cpuop_func op_48e0_11_ff; extern cpuop_func op_48e8_11_nf; extern cpuop_func op_48e8_11_ff; extern cpuop_func op_48f0_11_nf; extern cpuop_func op_48f0_11_ff; extern cpuop_func op_48f8_11_nf; extern cpuop_func op_48f8_11_ff; extern cpuop_func op_48f9_11_nf; extern cpuop_func op_48f9_11_ff; extern cpuop_func op_4a00_11_nf; extern cpuop_func op_4a00_11_ff; extern cpuop_func op_4a10_11_nf; extern cpuop_func op_4a10_11_ff; extern cpuop_func op_4a18_11_nf; extern cpuop_func op_4a18_11_ff; extern cpuop_func op_4a20_11_nf; extern cpuop_func op_4a20_11_ff; extern cpuop_func op_4a28_11_nf; extern cpuop_func op_4a28_11_ff; extern cpuop_func op_4a30_11_nf; extern cpuop_func op_4a30_11_ff; extern cpuop_func op_4a38_11_nf; extern cpuop_func op_4a38_11_ff; extern cpuop_func op_4a39_11_nf; extern cpuop_func op_4a39_11_ff; extern cpuop_func op_4a3c_11_nf; extern cpuop_func op_4a3c_11_ff; extern cpuop_func op_4a40_11_nf; extern cpuop_func op_4a40_11_ff; extern cpuop_func op_4a50_11_nf; extern cpuop_func op_4a50_11_ff; extern cpuop_func op_4a58_11_nf; extern cpuop_func op_4a58_11_ff; extern cpuop_func op_4a60_11_nf; extern cpuop_func op_4a60_11_ff; extern cpuop_func op_4a68_11_nf; extern cpuop_func op_4a68_11_ff; extern cpuop_func op_4a70_11_nf; extern cpuop_func op_4a70_11_ff; extern cpuop_func op_4a78_11_nf; extern cpuop_func op_4a78_11_ff; extern cpuop_func op_4a79_11_nf; extern cpuop_func op_4a79_11_ff; extern cpuop_func op_4a7c_11_nf; extern cpuop_func op_4a7c_11_ff; extern cpuop_func op_4a80_11_nf; extern cpuop_func op_4a80_11_ff; extern cpuop_func op_4a90_11_nf; extern cpuop_func op_4a90_11_ff; extern cpuop_func op_4a98_11_nf; extern cpuop_func op_4a98_11_ff; extern cpuop_func op_4aa0_11_nf; extern cpuop_func op_4aa0_11_ff; extern cpuop_func op_4aa8_11_nf; extern cpuop_func op_4aa8_11_ff; extern cpuop_func op_4ab0_11_nf; extern cpuop_func op_4ab0_11_ff; extern cpuop_func op_4ab8_11_nf; extern cpuop_func op_4ab8_11_ff; extern cpuop_func op_4ab9_11_nf; extern cpuop_func op_4ab9_11_ff; extern cpuop_func op_4abc_11_nf; extern cpuop_func op_4abc_11_ff; extern cpuop_func op_4ac0_11_nf; extern cpuop_func op_4ac0_11_ff; extern cpuop_func op_4ad0_11_nf; extern cpuop_func op_4ad0_11_ff; extern cpuop_func op_4ad8_11_nf; extern cpuop_func op_4ad8_11_ff; extern cpuop_func op_4ae0_11_nf; extern cpuop_func op_4ae0_11_ff; extern cpuop_func op_4ae8_11_nf; extern cpuop_func op_4ae8_11_ff; extern cpuop_func op_4af0_11_nf; extern cpuop_func op_4af0_11_ff; extern cpuop_func op_4af8_11_nf; extern cpuop_func op_4af8_11_ff; extern cpuop_func op_4af9_11_nf; extern cpuop_func op_4af9_11_ff; extern cpuop_func op_4c90_11_nf; extern cpuop_func op_4c90_11_ff; extern cpuop_func op_4c98_11_nf; extern cpuop_func op_4c98_11_ff; extern cpuop_func op_4ca8_11_nf; extern cpuop_func op_4ca8_11_ff; extern cpuop_func op_4cb0_11_nf; extern cpuop_func op_4cb0_11_ff; extern cpuop_func op_4cb8_11_nf; extern cpuop_func op_4cb8_11_ff; extern cpuop_func op_4cb9_11_nf; extern cpuop_func op_4cb9_11_ff; extern cpuop_func op_4cba_11_nf; extern cpuop_func op_4cba_11_ff; extern cpuop_func op_4cbb_11_nf; extern cpuop_func op_4cbb_11_ff; extern cpuop_func op_4cd0_11_nf; extern cpuop_func op_4cd0_11_ff; extern cpuop_func op_4cd8_11_nf; extern cpuop_func op_4cd8_11_ff; extern cpuop_func op_4ce8_11_nf; extern cpuop_func op_4ce8_11_ff; extern cpuop_func op_4cf0_11_nf; extern cpuop_func op_4cf0_11_ff; extern cpuop_func op_4cf8_11_nf; extern cpuop_func op_4cf8_11_ff; extern cpuop_func op_4cf9_11_nf; extern cpuop_func op_4cf9_11_ff; extern cpuop_func op_4cfa_11_nf; extern cpuop_func op_4cfa_11_ff; extern cpuop_func op_4cfb_11_nf; extern cpuop_func op_4cfb_11_ff; extern cpuop_func op_4e40_11_nf; extern cpuop_func op_4e40_11_ff; extern cpuop_func op_4e50_11_nf; extern cpuop_func op_4e50_11_ff; extern cpuop_func op_4e58_11_nf; extern cpuop_func op_4e58_11_ff; extern cpuop_func op_4e60_11_nf; extern cpuop_func op_4e60_11_ff; extern cpuop_func op_4e68_11_nf; extern cpuop_func op_4e68_11_ff; extern cpuop_func op_4e70_11_nf; extern cpuop_func op_4e70_11_ff; extern cpuop_func op_4e71_11_nf; extern cpuop_func op_4e71_11_ff; extern cpuop_func op_4e72_11_nf; extern cpuop_func op_4e72_11_ff; extern cpuop_func op_4e73_11_nf; extern cpuop_func op_4e73_11_ff; extern cpuop_func op_4e74_11_nf; extern cpuop_func op_4e74_11_ff; extern cpuop_func op_4e75_11_nf; extern cpuop_func op_4e75_11_ff; extern cpuop_func op_4e76_11_nf; extern cpuop_func op_4e76_11_ff; extern cpuop_func op_4e77_11_nf; extern cpuop_func op_4e77_11_ff; extern cpuop_func op_4e90_11_nf; extern cpuop_func op_4e90_11_ff; extern cpuop_func op_4ea8_11_nf; extern cpuop_func op_4ea8_11_ff; extern cpuop_func op_4eb0_11_nf; extern cpuop_func op_4eb0_11_ff; extern cpuop_func op_4eb8_11_nf; extern cpuop_func op_4eb8_11_ff; extern cpuop_func op_4eb9_11_nf; extern cpuop_func op_4eb9_11_ff; extern cpuop_func op_4eba_11_nf; extern cpuop_func op_4eba_11_ff; extern cpuop_func op_4ebb_11_nf; extern cpuop_func op_4ebb_11_ff; extern cpuop_func op_4ed0_11_nf; extern cpuop_func op_4ed0_11_ff; extern cpuop_func op_4ee8_11_nf; extern cpuop_func op_4ee8_11_ff; extern cpuop_func op_4ef0_11_nf; extern cpuop_func op_4ef0_11_ff; extern cpuop_func op_4ef8_11_nf; extern cpuop_func op_4ef8_11_ff; extern cpuop_func op_4ef9_11_nf; extern cpuop_func op_4ef9_11_ff; extern cpuop_func op_4efa_11_nf; extern cpuop_func op_4efa_11_ff; extern cpuop_func op_4efb_11_nf; extern cpuop_func op_4efb_11_ff; extern cpuop_func op_5000_11_nf; extern cpuop_func op_5000_11_ff; extern cpuop_func op_5010_11_nf; extern cpuop_func op_5010_11_ff; extern cpuop_func op_5018_11_nf; extern cpuop_func op_5018_11_ff; extern cpuop_func op_5020_11_nf; extern cpuop_func op_5020_11_ff; extern cpuop_func op_5028_11_nf; extern cpuop_func op_5028_11_ff; extern cpuop_func op_5030_11_nf; extern cpuop_func op_5030_11_ff; extern cpuop_func op_5038_11_nf; extern cpuop_func op_5038_11_ff; extern cpuop_func op_5039_11_nf; extern cpuop_func op_5039_11_ff; extern cpuop_func op_5040_11_nf; extern cpuop_func op_5040_11_ff; extern cpuop_func op_5048_11_nf; extern cpuop_func op_5048_11_ff; extern cpuop_func op_5050_11_nf; extern cpuop_func op_5050_11_ff; extern cpuop_func op_5058_11_nf; extern cpuop_func op_5058_11_ff; extern cpuop_func op_5060_11_nf; extern cpuop_func op_5060_11_ff; extern cpuop_func op_5068_11_nf; extern cpuop_func op_5068_11_ff; extern cpuop_func op_5070_11_nf; extern cpuop_func op_5070_11_ff; extern cpuop_func op_5078_11_nf; extern cpuop_func op_5078_11_ff; extern cpuop_func op_5079_11_nf; extern cpuop_func op_5079_11_ff; extern cpuop_func op_5080_11_nf; extern cpuop_func op_5080_11_ff; extern cpuop_func op_5088_11_nf; extern cpuop_func op_5088_11_ff; extern cpuop_func op_5090_11_nf; extern cpuop_func op_5090_11_ff; extern cpuop_func op_5098_11_nf; extern cpuop_func op_5098_11_ff; extern cpuop_func op_50a0_11_nf; extern cpuop_func op_50a0_11_ff; extern cpuop_func op_50a8_11_nf; extern cpuop_func op_50a8_11_ff; extern cpuop_func op_50b0_11_nf; extern cpuop_func op_50b0_11_ff; extern cpuop_func op_50b8_11_nf; extern cpuop_func op_50b8_11_ff; extern cpuop_func op_50b9_11_nf; extern cpuop_func op_50b9_11_ff; extern cpuop_func op_50c0_11_nf; extern cpuop_func op_50c0_11_ff; extern cpuop_func op_50c8_11_nf; extern cpuop_func op_50c8_11_ff; extern cpuop_func op_50d0_11_nf; extern cpuop_func op_50d0_11_ff; extern cpuop_func op_50d8_11_nf; extern cpuop_func op_50d8_11_ff; extern cpuop_func op_50e0_11_nf; extern cpuop_func op_50e0_11_ff; extern cpuop_func op_50e8_11_nf; extern cpuop_func op_50e8_11_ff; extern cpuop_func op_50f0_11_nf; extern cpuop_func op_50f0_11_ff; extern cpuop_func op_50f8_11_nf; extern cpuop_func op_50f8_11_ff; extern cpuop_func op_50f9_11_nf; extern cpuop_func op_50f9_11_ff; extern cpuop_func op_5100_11_nf; extern cpuop_func op_5100_11_ff; extern cpuop_func op_5110_11_nf; extern cpuop_func op_5110_11_ff; extern cpuop_func op_5118_11_nf; extern cpuop_func op_5118_11_ff; extern cpuop_func op_5120_11_nf; extern cpuop_func op_5120_11_ff; extern cpuop_func op_5128_11_nf; extern cpuop_func op_5128_11_ff; extern cpuop_func op_5130_11_nf; extern cpuop_func op_5130_11_ff; extern cpuop_func op_5138_11_nf; extern cpuop_func op_5138_11_ff; extern cpuop_func op_5139_11_nf; extern cpuop_func op_5139_11_ff; extern cpuop_func op_5140_11_nf; extern cpuop_func op_5140_11_ff; extern cpuop_func op_5148_11_nf; extern cpuop_func op_5148_11_ff; extern cpuop_func op_5150_11_nf; extern cpuop_func op_5150_11_ff; extern cpuop_func op_5158_11_nf; extern cpuop_func op_5158_11_ff; extern cpuop_func op_5160_11_nf; extern cpuop_func op_5160_11_ff; extern cpuop_func op_5168_11_nf; extern cpuop_func op_5168_11_ff; extern cpuop_func op_5170_11_nf; extern cpuop_func op_5170_11_ff; extern cpuop_func op_5178_11_nf; extern cpuop_func op_5178_11_ff; extern cpuop_func op_5179_11_nf; extern cpuop_func op_5179_11_ff; extern cpuop_func op_5180_11_nf; extern cpuop_func op_5180_11_ff; extern cpuop_func op_5188_11_nf; extern cpuop_func op_5188_11_ff; extern cpuop_func op_5190_11_nf; extern cpuop_func op_5190_11_ff; extern cpuop_func op_5198_11_nf; extern cpuop_func op_5198_11_ff; extern cpuop_func op_51a0_11_nf; extern cpuop_func op_51a0_11_ff; extern cpuop_func op_51a8_11_nf; extern cpuop_func op_51a8_11_ff; extern cpuop_func op_51b0_11_nf; extern cpuop_func op_51b0_11_ff; extern cpuop_func op_51b8_11_nf; extern cpuop_func op_51b8_11_ff; extern cpuop_func op_51b9_11_nf; extern cpuop_func op_51b9_11_ff; extern cpuop_func op_51c0_11_nf; extern cpuop_func op_51c0_11_ff; extern cpuop_func op_51c8_11_nf; extern cpuop_func op_51c8_11_ff; extern cpuop_func op_51d0_11_nf; extern cpuop_func op_51d0_11_ff; extern cpuop_func op_51d8_11_nf; extern cpuop_func op_51d8_11_ff; extern cpuop_func op_51e0_11_nf; extern cpuop_func op_51e0_11_ff; extern cpuop_func op_51e8_11_nf; extern cpuop_func op_51e8_11_ff; extern cpuop_func op_51f0_11_nf; extern cpuop_func op_51f0_11_ff; extern cpuop_func op_51f8_11_nf; extern cpuop_func op_51f8_11_ff; extern cpuop_func op_51f9_11_nf; extern cpuop_func op_51f9_11_ff; extern cpuop_func op_52c0_11_nf; extern cpuop_func op_52c0_11_ff; extern cpuop_func op_52c8_11_nf; extern cpuop_func op_52c8_11_ff; extern cpuop_func op_52d0_11_nf; extern cpuop_func op_52d0_11_ff; extern cpuop_func op_52d8_11_nf; extern cpuop_func op_52d8_11_ff; extern cpuop_func op_52e0_11_nf; extern cpuop_func op_52e0_11_ff; extern cpuop_func op_52e8_11_nf; extern cpuop_func op_52e8_11_ff; extern cpuop_func op_52f0_11_nf; extern cpuop_func op_52f0_11_ff; extern cpuop_func op_52f8_11_nf; extern cpuop_func op_52f8_11_ff; extern cpuop_func op_52f9_11_nf; extern cpuop_func op_52f9_11_ff; extern cpuop_func op_53c0_11_nf; extern cpuop_func op_53c0_11_ff; extern cpuop_func op_53c8_11_nf; extern cpuop_func op_53c8_11_ff; extern cpuop_func op_53d0_11_nf; extern cpuop_func op_53d0_11_ff; extern cpuop_func op_53d8_11_nf; extern cpuop_func op_53d8_11_ff; extern cpuop_func op_53e0_11_nf; extern cpuop_func op_53e0_11_ff; extern cpuop_func op_53e8_11_nf; extern cpuop_func op_53e8_11_ff; extern cpuop_func op_53f0_11_nf; extern cpuop_func op_53f0_11_ff; extern cpuop_func op_53f8_11_nf; extern cpuop_func op_53f8_11_ff; extern cpuop_func op_53f9_11_nf; extern cpuop_func op_53f9_11_ff; extern cpuop_func op_54c0_11_nf; extern cpuop_func op_54c0_11_ff; extern cpuop_func op_54c8_11_nf; extern cpuop_func op_54c8_11_ff; extern cpuop_func op_54d0_11_nf; extern cpuop_func op_54d0_11_ff; extern cpuop_func op_54d8_11_nf; extern cpuop_func op_54d8_11_ff; extern cpuop_func op_54e0_11_nf; extern cpuop_func op_54e0_11_ff; extern cpuop_func op_54e8_11_nf; extern cpuop_func op_54e8_11_ff; extern cpuop_func op_54f0_11_nf; extern cpuop_func op_54f0_11_ff; extern cpuop_func op_54f8_11_nf; extern cpuop_func op_54f8_11_ff; extern cpuop_func op_54f9_11_nf; extern cpuop_func op_54f9_11_ff; extern cpuop_func op_55c0_11_nf; extern cpuop_func op_55c0_11_ff; extern cpuop_func op_55c8_11_nf; extern cpuop_func op_55c8_11_ff; extern cpuop_func op_55d0_11_nf; extern cpuop_func op_55d0_11_ff; extern cpuop_func op_55d8_11_nf; extern cpuop_func op_55d8_11_ff; extern cpuop_func op_55e0_11_nf; extern cpuop_func op_55e0_11_ff; extern cpuop_func op_55e8_11_nf; extern cpuop_func op_55e8_11_ff; extern cpuop_func op_55f0_11_nf; extern cpuop_func op_55f0_11_ff; extern cpuop_func op_55f8_11_nf; extern cpuop_func op_55f8_11_ff; extern cpuop_func op_55f9_11_nf; extern cpuop_func op_55f9_11_ff; extern cpuop_func op_56c0_11_nf; extern cpuop_func op_56c0_11_ff; extern cpuop_func op_56c8_11_nf; extern cpuop_func op_56c8_11_ff; extern cpuop_func op_56d0_11_nf; extern cpuop_func op_56d0_11_ff; extern cpuop_func op_56d8_11_nf; extern cpuop_func op_56d8_11_ff; extern cpuop_func op_56e0_11_nf; extern cpuop_func op_56e0_11_ff; extern cpuop_func op_56e8_11_nf; extern cpuop_func op_56e8_11_ff; extern cpuop_func op_56f0_11_nf; extern cpuop_func op_56f0_11_ff; extern cpuop_func op_56f8_11_nf; extern cpuop_func op_56f8_11_ff; extern cpuop_func op_56f9_11_nf; extern cpuop_func op_56f9_11_ff; extern cpuop_func op_57c0_11_nf; extern cpuop_func op_57c0_11_ff; extern cpuop_func op_57c8_11_nf; extern cpuop_func op_57c8_11_ff; extern cpuop_func op_57d0_11_nf; extern cpuop_func op_57d0_11_ff; extern cpuop_func op_57d8_11_nf; extern cpuop_func op_57d8_11_ff; extern cpuop_func op_57e0_11_nf; extern cpuop_func op_57e0_11_ff; extern cpuop_func op_57e8_11_nf; extern cpuop_func op_57e8_11_ff; extern cpuop_func op_57f0_11_nf; extern cpuop_func op_57f0_11_ff; extern cpuop_func op_57f8_11_nf; extern cpuop_func op_57f8_11_ff; extern cpuop_func op_57f9_11_nf; extern cpuop_func op_57f9_11_ff; extern cpuop_func op_58c0_11_nf; extern cpuop_func op_58c0_11_ff; extern cpuop_func op_58c8_11_nf; extern cpuop_func op_58c8_11_ff; extern cpuop_func op_58d0_11_nf; extern cpuop_func op_58d0_11_ff; extern cpuop_func op_58d8_11_nf; extern cpuop_func op_58d8_11_ff; extern cpuop_func op_58e0_11_nf; extern cpuop_func op_58e0_11_ff; extern cpuop_func op_58e8_11_nf; extern cpuop_func op_58e8_11_ff; extern cpuop_func op_58f0_11_nf; extern cpuop_func op_58f0_11_ff; extern cpuop_func op_58f8_11_nf; extern cpuop_func op_58f8_11_ff; extern cpuop_func op_58f9_11_nf; extern cpuop_func op_58f9_11_ff; extern cpuop_func op_59c0_11_nf; extern cpuop_func op_59c0_11_ff; extern cpuop_func op_59c8_11_nf; extern cpuop_func op_59c8_11_ff; extern cpuop_func op_59d0_11_nf; extern cpuop_func op_59d0_11_ff; extern cpuop_func op_59d8_11_nf; extern cpuop_func op_59d8_11_ff; extern cpuop_func op_59e0_11_nf; extern cpuop_func op_59e0_11_ff; extern cpuop_func op_59e8_11_nf; extern cpuop_func op_59e8_11_ff; extern cpuop_func op_59f0_11_nf; extern cpuop_func op_59f0_11_ff; extern cpuop_func op_59f8_11_nf; extern cpuop_func op_59f8_11_ff; extern cpuop_func op_59f9_11_nf; extern cpuop_func op_59f9_11_ff; extern cpuop_func op_5ac0_11_nf; extern cpuop_func op_5ac0_11_ff; extern cpuop_func op_5ac8_11_nf; extern cpuop_func op_5ac8_11_ff; extern cpuop_func op_5ad0_11_nf; extern cpuop_func op_5ad0_11_ff; extern cpuop_func op_5ad8_11_nf; extern cpuop_func op_5ad8_11_ff; extern cpuop_func op_5ae0_11_nf; extern cpuop_func op_5ae0_11_ff; extern cpuop_func op_5ae8_11_nf; extern cpuop_func op_5ae8_11_ff; extern cpuop_func op_5af0_11_nf; extern cpuop_func op_5af0_11_ff; extern cpuop_func op_5af8_11_nf; extern cpuop_func op_5af8_11_ff; extern cpuop_func op_5af9_11_nf; extern cpuop_func op_5af9_11_ff; extern cpuop_func op_5bc0_11_nf; extern cpuop_func op_5bc0_11_ff; extern cpuop_func op_5bc8_11_nf; extern cpuop_func op_5bc8_11_ff; extern cpuop_func op_5bd0_11_nf; extern cpuop_func op_5bd0_11_ff; extern cpuop_func op_5bd8_11_nf; extern cpuop_func op_5bd8_11_ff; extern cpuop_func op_5be0_11_nf; extern cpuop_func op_5be0_11_ff; extern cpuop_func op_5be8_11_nf; extern cpuop_func op_5be8_11_ff; extern cpuop_func op_5bf0_11_nf; extern cpuop_func op_5bf0_11_ff; extern cpuop_func op_5bf8_11_nf; extern cpuop_func op_5bf8_11_ff; extern cpuop_func op_5bf9_11_nf; extern cpuop_func op_5bf9_11_ff; extern cpuop_func op_5cc0_11_nf; extern cpuop_func op_5cc0_11_ff; extern cpuop_func op_5cc8_11_nf; extern cpuop_func op_5cc8_11_ff; extern cpuop_func op_5cd0_11_nf; extern cpuop_func op_5cd0_11_ff; extern cpuop_func op_5cd8_11_nf; extern cpuop_func op_5cd8_11_ff; extern cpuop_func op_5ce0_11_nf; extern cpuop_func op_5ce0_11_ff; extern cpuop_func op_5ce8_11_nf; extern cpuop_func op_5ce8_11_ff; extern cpuop_func op_5cf0_11_nf; extern cpuop_func op_5cf0_11_ff; extern cpuop_func op_5cf8_11_nf; extern cpuop_func op_5cf8_11_ff; extern cpuop_func op_5cf9_11_nf; extern cpuop_func op_5cf9_11_ff; extern cpuop_func op_5dc0_11_nf; extern cpuop_func op_5dc0_11_ff; extern cpuop_func op_5dc8_11_nf; extern cpuop_func op_5dc8_11_ff; extern cpuop_func op_5dd0_11_nf; extern cpuop_func op_5dd0_11_ff; extern cpuop_func op_5dd8_11_nf; extern cpuop_func op_5dd8_11_ff; extern cpuop_func op_5de0_11_nf; extern cpuop_func op_5de0_11_ff; extern cpuop_func op_5de8_11_nf; extern cpuop_func op_5de8_11_ff; extern cpuop_func op_5df0_11_nf; extern cpuop_func op_5df0_11_ff; extern cpuop_func op_5df8_11_nf; extern cpuop_func op_5df8_11_ff; extern cpuop_func op_5df9_11_nf; extern cpuop_func op_5df9_11_ff; extern cpuop_func op_5ec0_11_nf; extern cpuop_func op_5ec0_11_ff; extern cpuop_func op_5ec8_11_nf; extern cpuop_func op_5ec8_11_ff; extern cpuop_func op_5ed0_11_nf; extern cpuop_func op_5ed0_11_ff; extern cpuop_func op_5ed8_11_nf; extern cpuop_func op_5ed8_11_ff; extern cpuop_func op_5ee0_11_nf; extern cpuop_func op_5ee0_11_ff; extern cpuop_func op_5ee8_11_nf; extern cpuop_func op_5ee8_11_ff; extern cpuop_func op_5ef0_11_nf; extern cpuop_func op_5ef0_11_ff; extern cpuop_func op_5ef8_11_nf; extern cpuop_func op_5ef8_11_ff; extern cpuop_func op_5ef9_11_nf; extern cpuop_func op_5ef9_11_ff; extern cpuop_func op_5fc0_11_nf; extern cpuop_func op_5fc0_11_ff; extern cpuop_func op_5fc8_11_nf; extern cpuop_func op_5fc8_11_ff; extern cpuop_func op_5fd0_11_nf; extern cpuop_func op_5fd0_11_ff; extern cpuop_func op_5fd8_11_nf; extern cpuop_func op_5fd8_11_ff; extern cpuop_func op_5fe0_11_nf; extern cpuop_func op_5fe0_11_ff; extern cpuop_func op_5fe8_11_nf; extern cpuop_func op_5fe8_11_ff; extern cpuop_func op_5ff0_11_nf; extern cpuop_func op_5ff0_11_ff; extern cpuop_func op_5ff8_11_nf; extern cpuop_func op_5ff8_11_ff; extern cpuop_func op_5ff9_11_nf; extern cpuop_func op_5ff9_11_ff; extern cpuop_func op_6000_11_nf; extern cpuop_func op_6000_11_ff; extern cpuop_func op_6001_11_nf; extern cpuop_func op_6001_11_ff; extern cpuop_func op_60ff_11_nf; extern cpuop_func op_60ff_11_ff; extern cpuop_func op_6100_11_nf; extern cpuop_func op_6100_11_ff; extern cpuop_func op_6101_11_nf; extern cpuop_func op_6101_11_ff; extern cpuop_func op_61ff_11_nf; extern cpuop_func op_61ff_11_ff; extern cpuop_func op_6200_11_nf; extern cpuop_func op_6200_11_ff; extern cpuop_func op_6201_11_nf; extern cpuop_func op_6201_11_ff; extern cpuop_func op_62ff_11_nf; extern cpuop_func op_62ff_11_ff; extern cpuop_func op_6300_11_nf; extern cpuop_func op_6300_11_ff; extern cpuop_func op_6301_11_nf; extern cpuop_func op_6301_11_ff; extern cpuop_func op_63ff_11_nf; extern cpuop_func op_63ff_11_ff; extern cpuop_func op_6400_11_nf; extern cpuop_func op_6400_11_ff; extern cpuop_func op_6401_11_nf; extern cpuop_func op_6401_11_ff; extern cpuop_func op_64ff_11_nf; extern cpuop_func op_64ff_11_ff; extern cpuop_func op_6500_11_nf; extern cpuop_func op_6500_11_ff; extern cpuop_func op_6501_11_nf; extern cpuop_func op_6501_11_ff; extern cpuop_func op_65ff_11_nf; extern cpuop_func op_65ff_11_ff; extern cpuop_func op_6600_11_nf; extern cpuop_func op_6600_11_ff; extern cpuop_func op_6601_11_nf; extern cpuop_func op_6601_11_ff; extern cpuop_func op_66ff_11_nf; extern cpuop_func op_66ff_11_ff; extern cpuop_func op_6700_11_nf; extern cpuop_func op_6700_11_ff; extern cpuop_func op_6701_11_nf; extern cpuop_func op_6701_11_ff; extern cpuop_func op_67ff_11_nf; extern cpuop_func op_67ff_11_ff; extern cpuop_func op_6800_11_nf; extern cpuop_func op_6800_11_ff; extern cpuop_func op_6801_11_nf; extern cpuop_func op_6801_11_ff; extern cpuop_func op_68ff_11_nf; extern cpuop_func op_68ff_11_ff; extern cpuop_func op_6900_11_nf; extern cpuop_func op_6900_11_ff; extern cpuop_func op_6901_11_nf; extern cpuop_func op_6901_11_ff; extern cpuop_func op_69ff_11_nf; extern cpuop_func op_69ff_11_ff; extern cpuop_func op_6a00_11_nf; extern cpuop_func op_6a00_11_ff; extern cpuop_func op_6a01_11_nf; extern cpuop_func op_6a01_11_ff; extern cpuop_func op_6aff_11_nf; extern cpuop_func op_6aff_11_ff; extern cpuop_func op_6b00_11_nf; extern cpuop_func op_6b00_11_ff; extern cpuop_func op_6b01_11_nf; extern cpuop_func op_6b01_11_ff; extern cpuop_func op_6bff_11_nf; extern cpuop_func op_6bff_11_ff; extern cpuop_func op_6c00_11_nf; extern cpuop_func op_6c00_11_ff; extern cpuop_func op_6c01_11_nf; extern cpuop_func op_6c01_11_ff; extern cpuop_func op_6cff_11_nf; extern cpuop_func op_6cff_11_ff; extern cpuop_func op_6d00_11_nf; extern cpuop_func op_6d00_11_ff; extern cpuop_func op_6d01_11_nf; extern cpuop_func op_6d01_11_ff; extern cpuop_func op_6dff_11_nf; extern cpuop_func op_6dff_11_ff; extern cpuop_func op_6e00_11_nf; extern cpuop_func op_6e00_11_ff; extern cpuop_func op_6e01_11_nf; extern cpuop_func op_6e01_11_ff; extern cpuop_func op_6eff_11_nf; extern cpuop_func op_6eff_11_ff; extern cpuop_func op_6f00_11_nf; extern cpuop_func op_6f00_11_ff; extern cpuop_func op_6f01_11_nf; extern cpuop_func op_6f01_11_ff; extern cpuop_func op_6fff_11_nf; extern cpuop_func op_6fff_11_ff; extern cpuop_func op_7000_11_nf; extern cpuop_func op_7000_11_ff; extern cpuop_func op_8000_11_nf; extern cpuop_func op_8000_11_ff; extern cpuop_func op_8010_11_nf; extern cpuop_func op_8010_11_ff; extern cpuop_func op_8018_11_nf; extern cpuop_func op_8018_11_ff; extern cpuop_func op_8020_11_nf; extern cpuop_func op_8020_11_ff; extern cpuop_func op_8028_11_nf; extern cpuop_func op_8028_11_ff; extern cpuop_func op_8030_11_nf; extern cpuop_func op_8030_11_ff; extern cpuop_func op_8038_11_nf; extern cpuop_func op_8038_11_ff; extern cpuop_func op_8039_11_nf; extern cpuop_func op_8039_11_ff; extern cpuop_func op_803a_11_nf; extern cpuop_func op_803a_11_ff; extern cpuop_func op_803b_11_nf; extern cpuop_func op_803b_11_ff; extern cpuop_func op_803c_11_nf; extern cpuop_func op_803c_11_ff; extern cpuop_func op_8040_11_nf; extern cpuop_func op_8040_11_ff; extern cpuop_func op_8050_11_nf; extern cpuop_func op_8050_11_ff; extern cpuop_func op_8058_11_nf; extern cpuop_func op_8058_11_ff; extern cpuop_func op_8060_11_nf; extern cpuop_func op_8060_11_ff; extern cpuop_func op_8068_11_nf; extern cpuop_func op_8068_11_ff; extern cpuop_func op_8070_11_nf; extern cpuop_func op_8070_11_ff; extern cpuop_func op_8078_11_nf; extern cpuop_func op_8078_11_ff; extern cpuop_func op_8079_11_nf; extern cpuop_func op_8079_11_ff; extern cpuop_func op_807a_11_nf; extern cpuop_func op_807a_11_ff; extern cpuop_func op_807b_11_nf; extern cpuop_func op_807b_11_ff; extern cpuop_func op_807c_11_nf; extern cpuop_func op_807c_11_ff; extern cpuop_func op_8080_11_nf; extern cpuop_func op_8080_11_ff; extern cpuop_func op_8090_11_nf; extern cpuop_func op_8090_11_ff; extern cpuop_func op_8098_11_nf; extern cpuop_func op_8098_11_ff; extern cpuop_func op_80a0_11_nf; extern cpuop_func op_80a0_11_ff; extern cpuop_func op_80a8_11_nf; extern cpuop_func op_80a8_11_ff; extern cpuop_func op_80b0_11_nf; extern cpuop_func op_80b0_11_ff; extern cpuop_func op_80b8_11_nf; extern cpuop_func op_80b8_11_ff; extern cpuop_func op_80b9_11_nf; extern cpuop_func op_80b9_11_ff; extern cpuop_func op_80ba_11_nf; extern cpuop_func op_80ba_11_ff; extern cpuop_func op_80bb_11_nf; extern cpuop_func op_80bb_11_ff; extern cpuop_func op_80bc_11_nf; extern cpuop_func op_80bc_11_ff; extern cpuop_func op_80c0_11_nf; extern cpuop_func op_80c0_11_ff; extern cpuop_func op_80d0_11_nf; extern cpuop_func op_80d0_11_ff; extern cpuop_func op_80d8_11_nf; extern cpuop_func op_80d8_11_ff; extern cpuop_func op_80e0_11_nf; extern cpuop_func op_80e0_11_ff; extern cpuop_func op_80e8_11_nf; extern cpuop_func op_80e8_11_ff; extern cpuop_func op_80f0_11_nf; extern cpuop_func op_80f0_11_ff; extern cpuop_func op_80f8_11_nf; extern cpuop_func op_80f8_11_ff; extern cpuop_func op_80f9_11_nf; extern cpuop_func op_80f9_11_ff; extern cpuop_func op_80fa_11_nf; extern cpuop_func op_80fa_11_ff; extern cpuop_func op_80fb_11_nf; extern cpuop_func op_80fb_11_ff; extern cpuop_func op_80fc_11_nf; extern cpuop_func op_80fc_11_ff; extern cpuop_func op_8100_11_nf; extern cpuop_func op_8100_11_ff; extern cpuop_func op_8108_11_nf; extern cpuop_func op_8108_11_ff; extern cpuop_func op_8110_11_nf; extern cpuop_func op_8110_11_ff; extern cpuop_func op_8118_11_nf; extern cpuop_func op_8118_11_ff; extern cpuop_func op_8120_11_nf; extern cpuop_func op_8120_11_ff; extern cpuop_func op_8128_11_nf; extern cpuop_func op_8128_11_ff; extern cpuop_func op_8130_11_nf; extern cpuop_func op_8130_11_ff; extern cpuop_func op_8138_11_nf; extern cpuop_func op_8138_11_ff; extern cpuop_func op_8139_11_nf; extern cpuop_func op_8139_11_ff; extern cpuop_func op_8150_11_nf; extern cpuop_func op_8150_11_ff; extern cpuop_func op_8158_11_nf; extern cpuop_func op_8158_11_ff; extern cpuop_func op_8160_11_nf; extern cpuop_func op_8160_11_ff; extern cpuop_func op_8168_11_nf; extern cpuop_func op_8168_11_ff; extern cpuop_func op_8170_11_nf; extern cpuop_func op_8170_11_ff; extern cpuop_func op_8178_11_nf; extern cpuop_func op_8178_11_ff; extern cpuop_func op_8179_11_nf; extern cpuop_func op_8179_11_ff; extern cpuop_func op_8190_11_nf; extern cpuop_func op_8190_11_ff; extern cpuop_func op_8198_11_nf; extern cpuop_func op_8198_11_ff; extern cpuop_func op_81a0_11_nf; extern cpuop_func op_81a0_11_ff; extern cpuop_func op_81a8_11_nf; extern cpuop_func op_81a8_11_ff; extern cpuop_func op_81b0_11_nf; extern cpuop_func op_81b0_11_ff; extern cpuop_func op_81b8_11_nf; extern cpuop_func op_81b8_11_ff; extern cpuop_func op_81b9_11_nf; extern cpuop_func op_81b9_11_ff; extern cpuop_func op_81c0_11_nf; extern cpuop_func op_81c0_11_ff; extern cpuop_func op_81d0_11_nf; extern cpuop_func op_81d0_11_ff; extern cpuop_func op_81d8_11_nf; extern cpuop_func op_81d8_11_ff; extern cpuop_func op_81e0_11_nf; extern cpuop_func op_81e0_11_ff; extern cpuop_func op_81e8_11_nf; extern cpuop_func op_81e8_11_ff; extern cpuop_func op_81f0_11_nf; extern cpuop_func op_81f0_11_ff; extern cpuop_func op_81f8_11_nf; extern cpuop_func op_81f8_11_ff; extern cpuop_func op_81f9_11_nf; extern cpuop_func op_81f9_11_ff; extern cpuop_func op_81fa_11_nf; extern cpuop_func op_81fa_11_ff; extern cpuop_func op_81fb_11_nf; extern cpuop_func op_81fb_11_ff; extern cpuop_func op_81fc_11_nf; extern cpuop_func op_81fc_11_ff; extern cpuop_func op_9000_11_nf; extern cpuop_func op_9000_11_ff; extern cpuop_func op_9010_11_nf; extern cpuop_func op_9010_11_ff; extern cpuop_func op_9018_11_nf; extern cpuop_func op_9018_11_ff; extern cpuop_func op_9020_11_nf; extern cpuop_func op_9020_11_ff; extern cpuop_func op_9028_11_nf; extern cpuop_func op_9028_11_ff; extern cpuop_func op_9030_11_nf; extern cpuop_func op_9030_11_ff; extern cpuop_func op_9038_11_nf; extern cpuop_func op_9038_11_ff; extern cpuop_func op_9039_11_nf; extern cpuop_func op_9039_11_ff; extern cpuop_func op_903a_11_nf; extern cpuop_func op_903a_11_ff; extern cpuop_func op_903b_11_nf; extern cpuop_func op_903b_11_ff; extern cpuop_func op_903c_11_nf; extern cpuop_func op_903c_11_ff; extern cpuop_func op_9040_11_nf; extern cpuop_func op_9040_11_ff; extern cpuop_func op_9048_11_nf; extern cpuop_func op_9048_11_ff; extern cpuop_func op_9050_11_nf; extern cpuop_func op_9050_11_ff; extern cpuop_func op_9058_11_nf; extern cpuop_func op_9058_11_ff; extern cpuop_func op_9060_11_nf; extern cpuop_func op_9060_11_ff; extern cpuop_func op_9068_11_nf; extern cpuop_func op_9068_11_ff; extern cpuop_func op_9070_11_nf; extern cpuop_func op_9070_11_ff; extern cpuop_func op_9078_11_nf; extern cpuop_func op_9078_11_ff; extern cpuop_func op_9079_11_nf; extern cpuop_func op_9079_11_ff; extern cpuop_func op_907a_11_nf; extern cpuop_func op_907a_11_ff; extern cpuop_func op_907b_11_nf; extern cpuop_func op_907b_11_ff; extern cpuop_func op_907c_11_nf; extern cpuop_func op_907c_11_ff; extern cpuop_func op_9080_11_nf; extern cpuop_func op_9080_11_ff; extern cpuop_func op_9088_11_nf; extern cpuop_func op_9088_11_ff; extern cpuop_func op_9090_11_nf; extern cpuop_func op_9090_11_ff; extern cpuop_func op_9098_11_nf; extern cpuop_func op_9098_11_ff; extern cpuop_func op_90a0_11_nf; extern cpuop_func op_90a0_11_ff; extern cpuop_func op_90a8_11_nf; extern cpuop_func op_90a8_11_ff; extern cpuop_func op_90b0_11_nf; extern cpuop_func op_90b0_11_ff; extern cpuop_func op_90b8_11_nf; extern cpuop_func op_90b8_11_ff; extern cpuop_func op_90b9_11_nf; extern cpuop_func op_90b9_11_ff; extern cpuop_func op_90ba_11_nf; extern cpuop_func op_90ba_11_ff; extern cpuop_func op_90bb_11_nf; extern cpuop_func op_90bb_11_ff; extern cpuop_func op_90bc_11_nf; extern cpuop_func op_90bc_11_ff; extern cpuop_func op_90c0_11_nf; extern cpuop_func op_90c0_11_ff; extern cpuop_func op_90c8_11_nf; extern cpuop_func op_90c8_11_ff; extern cpuop_func op_90d0_11_nf; extern cpuop_func op_90d0_11_ff; extern cpuop_func op_90d8_11_nf; extern cpuop_func op_90d8_11_ff; extern cpuop_func op_90e0_11_nf; extern cpuop_func op_90e0_11_ff; extern cpuop_func op_90e8_11_nf; extern cpuop_func op_90e8_11_ff; extern cpuop_func op_90f0_11_nf; extern cpuop_func op_90f0_11_ff; extern cpuop_func op_90f8_11_nf; extern cpuop_func op_90f8_11_ff; extern cpuop_func op_90f9_11_nf; extern cpuop_func op_90f9_11_ff; extern cpuop_func op_90fa_11_nf; extern cpuop_func op_90fa_11_ff; extern cpuop_func op_90fb_11_nf; extern cpuop_func op_90fb_11_ff; extern cpuop_func op_90fc_11_nf; extern cpuop_func op_90fc_11_ff; extern cpuop_func op_9100_11_nf; extern cpuop_func op_9100_11_ff; extern cpuop_func op_9108_11_nf; extern cpuop_func op_9108_11_ff; extern cpuop_func op_9110_11_nf; extern cpuop_func op_9110_11_ff; extern cpuop_func op_9118_11_nf; extern cpuop_func op_9118_11_ff; extern cpuop_func op_9120_11_nf; extern cpuop_func op_9120_11_ff; extern cpuop_func op_9128_11_nf; extern cpuop_func op_9128_11_ff; extern cpuop_func op_9130_11_nf; extern cpuop_func op_9130_11_ff; extern cpuop_func op_9138_11_nf; extern cpuop_func op_9138_11_ff; extern cpuop_func op_9139_11_nf; extern cpuop_func op_9139_11_ff; extern cpuop_func op_9140_11_nf; extern cpuop_func op_9140_11_ff; extern cpuop_func op_9148_11_nf; extern cpuop_func op_9148_11_ff; extern cpuop_func op_9150_11_nf; extern cpuop_func op_9150_11_ff; extern cpuop_func op_9158_11_nf; extern cpuop_func op_9158_11_ff; extern cpuop_func op_9160_11_nf; extern cpuop_func op_9160_11_ff; extern cpuop_func op_9168_11_nf; extern cpuop_func op_9168_11_ff; extern cpuop_func op_9170_11_nf; extern cpuop_func op_9170_11_ff; extern cpuop_func op_9178_11_nf; extern cpuop_func op_9178_11_ff; extern cpuop_func op_9179_11_nf; extern cpuop_func op_9179_11_ff; extern cpuop_func op_9180_11_nf; extern cpuop_func op_9180_11_ff; extern cpuop_func op_9188_11_nf; extern cpuop_func op_9188_11_ff; extern cpuop_func op_9190_11_nf; extern cpuop_func op_9190_11_ff; extern cpuop_func op_9198_11_nf; extern cpuop_func op_9198_11_ff; extern cpuop_func op_91a0_11_nf; extern cpuop_func op_91a0_11_ff; extern cpuop_func op_91a8_11_nf; extern cpuop_func op_91a8_11_ff; extern cpuop_func op_91b0_11_nf; extern cpuop_func op_91b0_11_ff; extern cpuop_func op_91b8_11_nf; extern cpuop_func op_91b8_11_ff; extern cpuop_func op_91b9_11_nf; extern cpuop_func op_91b9_11_ff; extern cpuop_func op_91c0_11_nf; extern cpuop_func op_91c0_11_ff; extern cpuop_func op_91c8_11_nf; extern cpuop_func op_91c8_11_ff; extern cpuop_func op_91d0_11_nf; extern cpuop_func op_91d0_11_ff; extern cpuop_func op_91d8_11_nf; extern cpuop_func op_91d8_11_ff; extern cpuop_func op_91e0_11_nf; extern cpuop_func op_91e0_11_ff; extern cpuop_func op_91e8_11_nf; extern cpuop_func op_91e8_11_ff; extern cpuop_func op_91f0_11_nf; extern cpuop_func op_91f0_11_ff; extern cpuop_func op_91f8_11_nf; extern cpuop_func op_91f8_11_ff; extern cpuop_func op_91f9_11_nf; extern cpuop_func op_91f9_11_ff; extern cpuop_func op_91fa_11_nf; extern cpuop_func op_91fa_11_ff; extern cpuop_func op_91fb_11_nf; extern cpuop_func op_91fb_11_ff; extern cpuop_func op_91fc_11_nf; extern cpuop_func op_91fc_11_ff; extern cpuop_func op_b000_11_nf; extern cpuop_func op_b000_11_ff; extern cpuop_func op_b010_11_nf; extern cpuop_func op_b010_11_ff; extern cpuop_func op_b018_11_nf; extern cpuop_func op_b018_11_ff; extern cpuop_func op_b020_11_nf; extern cpuop_func op_b020_11_ff; extern cpuop_func op_b028_11_nf; extern cpuop_func op_b028_11_ff; extern cpuop_func op_b030_11_nf; extern cpuop_func op_b030_11_ff; extern cpuop_func op_b038_11_nf; extern cpuop_func op_b038_11_ff; extern cpuop_func op_b039_11_nf; extern cpuop_func op_b039_11_ff; extern cpuop_func op_b03a_11_nf; extern cpuop_func op_b03a_11_ff; extern cpuop_func op_b03b_11_nf; extern cpuop_func op_b03b_11_ff; extern cpuop_func op_b03c_11_nf; extern cpuop_func op_b03c_11_ff; extern cpuop_func op_b040_11_nf; extern cpuop_func op_b040_11_ff; extern cpuop_func op_b048_11_nf; extern cpuop_func op_b048_11_ff; extern cpuop_func op_b050_11_nf; extern cpuop_func op_b050_11_ff; extern cpuop_func op_b058_11_nf; extern cpuop_func op_b058_11_ff; extern cpuop_func op_b060_11_nf; extern cpuop_func op_b060_11_ff; extern cpuop_func op_b068_11_nf; extern cpuop_func op_b068_11_ff; extern cpuop_func op_b070_11_nf; extern cpuop_func op_b070_11_ff; extern cpuop_func op_b078_11_nf; extern cpuop_func op_b078_11_ff; extern cpuop_func op_b079_11_nf; extern cpuop_func op_b079_11_ff; extern cpuop_func op_b07a_11_nf; extern cpuop_func op_b07a_11_ff; extern cpuop_func op_b07b_11_nf; extern cpuop_func op_b07b_11_ff; extern cpuop_func op_b07c_11_nf; extern cpuop_func op_b07c_11_ff; extern cpuop_func op_b080_11_nf; extern cpuop_func op_b080_11_ff; extern cpuop_func op_b088_11_nf; extern cpuop_func op_b088_11_ff; extern cpuop_func op_b090_11_nf; extern cpuop_func op_b090_11_ff; extern cpuop_func op_b098_11_nf; extern cpuop_func op_b098_11_ff; extern cpuop_func op_b0a0_11_nf; extern cpuop_func op_b0a0_11_ff; extern cpuop_func op_b0a8_11_nf; extern cpuop_func op_b0a8_11_ff; extern cpuop_func op_b0b0_11_nf; extern cpuop_func op_b0b0_11_ff; extern cpuop_func op_b0b8_11_nf; extern cpuop_func op_b0b8_11_ff; extern cpuop_func op_b0b9_11_nf; extern cpuop_func op_b0b9_11_ff; extern cpuop_func op_b0ba_11_nf; extern cpuop_func op_b0ba_11_ff; extern cpuop_func op_b0bb_11_nf; extern cpuop_func op_b0bb_11_ff; extern cpuop_func op_b0bc_11_nf; extern cpuop_func op_b0bc_11_ff; extern cpuop_func op_b0c0_11_nf; extern cpuop_func op_b0c0_11_ff; extern cpuop_func op_b0c8_11_nf; extern cpuop_func op_b0c8_11_ff; extern cpuop_func op_b0d0_11_nf; extern cpuop_func op_b0d0_11_ff; extern cpuop_func op_b0d8_11_nf; extern cpuop_func op_b0d8_11_ff; extern cpuop_func op_b0e0_11_nf; extern cpuop_func op_b0e0_11_ff; extern cpuop_func op_b0e8_11_nf; extern cpuop_func op_b0e8_11_ff; extern cpuop_func op_b0f0_11_nf; extern cpuop_func op_b0f0_11_ff; extern cpuop_func op_b0f8_11_nf; extern cpuop_func op_b0f8_11_ff; extern cpuop_func op_b0f9_11_nf; extern cpuop_func op_b0f9_11_ff; extern cpuop_func op_b0fa_11_nf; extern cpuop_func op_b0fa_11_ff; extern cpuop_func op_b0fb_11_nf; extern cpuop_func op_b0fb_11_ff; extern cpuop_func op_b0fc_11_nf; extern cpuop_func op_b0fc_11_ff; extern cpuop_func op_b100_11_nf; extern cpuop_func op_b100_11_ff; extern cpuop_func op_b108_11_nf; extern cpuop_func op_b108_11_ff; extern cpuop_func op_b110_11_nf; extern cpuop_func op_b110_11_ff; extern cpuop_func op_b118_11_nf; extern cpuop_func op_b118_11_ff; extern cpuop_func op_b120_11_nf; extern cpuop_func op_b120_11_ff; extern cpuop_func op_b128_11_nf; extern cpuop_func op_b128_11_ff; extern cpuop_func op_b130_11_nf; extern cpuop_func op_b130_11_ff; extern cpuop_func op_b138_11_nf; extern cpuop_func op_b138_11_ff; extern cpuop_func op_b139_11_nf; extern cpuop_func op_b139_11_ff; extern cpuop_func op_b140_11_nf; extern cpuop_func op_b140_11_ff; extern cpuop_func op_b148_11_nf; extern cpuop_func op_b148_11_ff; extern cpuop_func op_b150_11_nf; extern cpuop_func op_b150_11_ff; extern cpuop_func op_b158_11_nf; extern cpuop_func op_b158_11_ff; extern cpuop_func op_b160_11_nf; extern cpuop_func op_b160_11_ff; extern cpuop_func op_b168_11_nf; extern cpuop_func op_b168_11_ff; extern cpuop_func op_b170_11_nf; extern cpuop_func op_b170_11_ff; extern cpuop_func op_b178_11_nf; extern cpuop_func op_b178_11_ff; extern cpuop_func op_b179_11_nf; extern cpuop_func op_b179_11_ff; extern cpuop_func op_b180_11_nf; extern cpuop_func op_b180_11_ff; extern cpuop_func op_b188_11_nf; extern cpuop_func op_b188_11_ff; extern cpuop_func op_b190_11_nf; extern cpuop_func op_b190_11_ff; extern cpuop_func op_b198_11_nf; extern cpuop_func op_b198_11_ff; extern cpuop_func op_b1a0_11_nf; extern cpuop_func op_b1a0_11_ff; extern cpuop_func op_b1a8_11_nf; extern cpuop_func op_b1a8_11_ff; extern cpuop_func op_b1b0_11_nf; extern cpuop_func op_b1b0_11_ff; extern cpuop_func op_b1b8_11_nf; extern cpuop_func op_b1b8_11_ff; extern cpuop_func op_b1b9_11_nf; extern cpuop_func op_b1b9_11_ff; extern cpuop_func op_b1c0_11_nf; extern cpuop_func op_b1c0_11_ff; extern cpuop_func op_b1c8_11_nf; extern cpuop_func op_b1c8_11_ff; extern cpuop_func op_b1d0_11_nf; extern cpuop_func op_b1d0_11_ff; extern cpuop_func op_b1d8_11_nf; extern cpuop_func op_b1d8_11_ff; extern cpuop_func op_b1e0_11_nf; extern cpuop_func op_b1e0_11_ff; extern cpuop_func op_b1e8_11_nf; extern cpuop_func op_b1e8_11_ff; extern cpuop_func op_b1f0_11_nf; extern cpuop_func op_b1f0_11_ff; extern cpuop_func op_b1f8_11_nf; extern cpuop_func op_b1f8_11_ff; extern cpuop_func op_b1f9_11_nf; extern cpuop_func op_b1f9_11_ff; extern cpuop_func op_b1fa_11_nf; extern cpuop_func op_b1fa_11_ff; extern cpuop_func op_b1fb_11_nf; extern cpuop_func op_b1fb_11_ff; extern cpuop_func op_b1fc_11_nf; extern cpuop_func op_b1fc_11_ff; extern cpuop_func op_c000_11_nf; extern cpuop_func op_c000_11_ff; extern cpuop_func op_c010_11_nf; extern cpuop_func op_c010_11_ff; extern cpuop_func op_c018_11_nf; extern cpuop_func op_c018_11_ff; extern cpuop_func op_c020_11_nf; extern cpuop_func op_c020_11_ff; extern cpuop_func op_c028_11_nf; extern cpuop_func op_c028_11_ff; extern cpuop_func op_c030_11_nf; extern cpuop_func op_c030_11_ff; extern cpuop_func op_c038_11_nf; extern cpuop_func op_c038_11_ff; extern cpuop_func op_c039_11_nf; extern cpuop_func op_c039_11_ff; extern cpuop_func op_c03a_11_nf; extern cpuop_func op_c03a_11_ff; extern cpuop_func op_c03b_11_nf; extern cpuop_func op_c03b_11_ff; extern cpuop_func op_c03c_11_nf; extern cpuop_func op_c03c_11_ff; extern cpuop_func op_c040_11_nf; extern cpuop_func op_c040_11_ff; extern cpuop_func op_c050_11_nf; extern cpuop_func op_c050_11_ff; extern cpuop_func op_c058_11_nf; extern cpuop_func op_c058_11_ff; extern cpuop_func op_c060_11_nf; extern cpuop_func op_c060_11_ff; extern cpuop_func op_c068_11_nf; extern cpuop_func op_c068_11_ff; extern cpuop_func op_c070_11_nf; extern cpuop_func op_c070_11_ff; extern cpuop_func op_c078_11_nf; extern cpuop_func op_c078_11_ff; extern cpuop_func op_c079_11_nf; extern cpuop_func op_c079_11_ff; extern cpuop_func op_c07a_11_nf; extern cpuop_func op_c07a_11_ff; extern cpuop_func op_c07b_11_nf; extern cpuop_func op_c07b_11_ff; extern cpuop_func op_c07c_11_nf; extern cpuop_func op_c07c_11_ff; extern cpuop_func op_c080_11_nf; extern cpuop_func op_c080_11_ff; extern cpuop_func op_c090_11_nf; extern cpuop_func op_c090_11_ff; extern cpuop_func op_c098_11_nf; extern cpuop_func op_c098_11_ff; extern cpuop_func op_c0a0_11_nf; extern cpuop_func op_c0a0_11_ff; extern cpuop_func op_c0a8_11_nf; extern cpuop_func op_c0a8_11_ff; extern cpuop_func op_c0b0_11_nf; extern cpuop_func op_c0b0_11_ff; extern cpuop_func op_c0b8_11_nf; extern cpuop_func op_c0b8_11_ff; extern cpuop_func op_c0b9_11_nf; extern cpuop_func op_c0b9_11_ff; extern cpuop_func op_c0ba_11_nf; extern cpuop_func op_c0ba_11_ff; extern cpuop_func op_c0bb_11_nf; extern cpuop_func op_c0bb_11_ff; extern cpuop_func op_c0bc_11_nf; extern cpuop_func op_c0bc_11_ff; extern cpuop_func op_c0c0_11_nf; extern cpuop_func op_c0c0_11_ff; extern cpuop_func op_c0d0_11_nf; extern cpuop_func op_c0d0_11_ff; extern cpuop_func op_c0d8_11_nf; extern cpuop_func op_c0d8_11_ff; extern cpuop_func op_c0e0_11_nf; extern cpuop_func op_c0e0_11_ff; extern cpuop_func op_c0e8_11_nf; extern cpuop_func op_c0e8_11_ff; extern cpuop_func op_c0f0_11_nf; extern cpuop_func op_c0f0_11_ff; extern cpuop_func op_c0f8_11_nf; extern cpuop_func op_c0f8_11_ff; extern cpuop_func op_c0f9_11_nf; extern cpuop_func op_c0f9_11_ff; extern cpuop_func op_c0fa_11_nf; extern cpuop_func op_c0fa_11_ff; extern cpuop_func op_c0fb_11_nf; extern cpuop_func op_c0fb_11_ff; extern cpuop_func op_c0fc_11_nf; extern cpuop_func op_c0fc_11_ff; extern cpuop_func op_c100_11_nf; extern cpuop_func op_c100_11_ff; extern cpuop_func op_c108_11_nf; extern cpuop_func op_c108_11_ff; extern cpuop_func op_c110_11_nf; extern cpuop_func op_c110_11_ff; extern cpuop_func op_c118_11_nf; extern cpuop_func op_c118_11_ff; extern cpuop_func op_c120_11_nf; extern cpuop_func op_c120_11_ff; extern cpuop_func op_c128_11_nf; extern cpuop_func op_c128_11_ff; extern cpuop_func op_c130_11_nf; extern cpuop_func op_c130_11_ff; extern cpuop_func op_c138_11_nf; extern cpuop_func op_c138_11_ff; extern cpuop_func op_c139_11_nf; extern cpuop_func op_c139_11_ff; extern cpuop_func op_c140_11_nf; extern cpuop_func op_c140_11_ff; extern cpuop_func op_c148_11_nf; extern cpuop_func op_c148_11_ff; extern cpuop_func op_c150_11_nf; extern cpuop_func op_c150_11_ff; extern cpuop_func op_c158_11_nf; extern cpuop_func op_c158_11_ff; extern cpuop_func op_c160_11_nf; extern cpuop_func op_c160_11_ff; extern cpuop_func op_c168_11_nf; extern cpuop_func op_c168_11_ff; extern cpuop_func op_c170_11_nf; extern cpuop_func op_c170_11_ff; extern cpuop_func op_c178_11_nf; extern cpuop_func op_c178_11_ff; extern cpuop_func op_c179_11_nf; extern cpuop_func op_c179_11_ff; extern cpuop_func op_c188_11_nf; extern cpuop_func op_c188_11_ff; extern cpuop_func op_c190_11_nf; extern cpuop_func op_c190_11_ff; extern cpuop_func op_c198_11_nf; extern cpuop_func op_c198_11_ff; extern cpuop_func op_c1a0_11_nf; extern cpuop_func op_c1a0_11_ff; extern cpuop_func op_c1a8_11_nf; extern cpuop_func op_c1a8_11_ff; extern cpuop_func op_c1b0_11_nf; extern cpuop_func op_c1b0_11_ff; extern cpuop_func op_c1b8_11_nf; extern cpuop_func op_c1b8_11_ff; extern cpuop_func op_c1b9_11_nf; extern cpuop_func op_c1b9_11_ff; extern cpuop_func op_c1c0_11_nf; extern cpuop_func op_c1c0_11_ff; extern cpuop_func op_c1d0_11_nf; extern cpuop_func op_c1d0_11_ff; extern cpuop_func op_c1d8_11_nf; extern cpuop_func op_c1d8_11_ff; extern cpuop_func op_c1e0_11_nf; extern cpuop_func op_c1e0_11_ff; extern cpuop_func op_c1e8_11_nf; extern cpuop_func op_c1e8_11_ff; extern cpuop_func op_c1f0_11_nf; extern cpuop_func op_c1f0_11_ff; extern cpuop_func op_c1f8_11_nf; extern cpuop_func op_c1f8_11_ff; extern cpuop_func op_c1f9_11_nf; extern cpuop_func op_c1f9_11_ff; extern cpuop_func op_c1fa_11_nf; extern cpuop_func op_c1fa_11_ff; extern cpuop_func op_c1fb_11_nf; extern cpuop_func op_c1fb_11_ff; extern cpuop_func op_c1fc_11_nf; extern cpuop_func op_c1fc_11_ff; extern cpuop_func op_d000_11_nf; extern cpuop_func op_d000_11_ff; extern cpuop_func op_d010_11_nf; extern cpuop_func op_d010_11_ff; extern cpuop_func op_d018_11_nf; extern cpuop_func op_d018_11_ff; extern cpuop_func op_d020_11_nf; extern cpuop_func op_d020_11_ff; extern cpuop_func op_d028_11_nf; extern cpuop_func op_d028_11_ff; extern cpuop_func op_d030_11_nf; extern cpuop_func op_d030_11_ff; extern cpuop_func op_d038_11_nf; extern cpuop_func op_d038_11_ff; extern cpuop_func op_d039_11_nf; extern cpuop_func op_d039_11_ff; extern cpuop_func op_d03a_11_nf; extern cpuop_func op_d03a_11_ff; extern cpuop_func op_d03b_11_nf; extern cpuop_func op_d03b_11_ff; extern cpuop_func op_d03c_11_nf; extern cpuop_func op_d03c_11_ff; extern cpuop_func op_d040_11_nf; extern cpuop_func op_d040_11_ff; extern cpuop_func op_d048_11_nf; extern cpuop_func op_d048_11_ff; extern cpuop_func op_d050_11_nf; extern cpuop_func op_d050_11_ff; extern cpuop_func op_d058_11_nf; extern cpuop_func op_d058_11_ff; extern cpuop_func op_d060_11_nf; extern cpuop_func op_d060_11_ff; extern cpuop_func op_d068_11_nf; extern cpuop_func op_d068_11_ff; extern cpuop_func op_d070_11_nf; extern cpuop_func op_d070_11_ff; extern cpuop_func op_d078_11_nf; extern cpuop_func op_d078_11_ff; extern cpuop_func op_d079_11_nf; extern cpuop_func op_d079_11_ff; extern cpuop_func op_d07a_11_nf; extern cpuop_func op_d07a_11_ff; extern cpuop_func op_d07b_11_nf; extern cpuop_func op_d07b_11_ff; extern cpuop_func op_d07c_11_nf; extern cpuop_func op_d07c_11_ff; extern cpuop_func op_d080_11_nf; extern cpuop_func op_d080_11_ff; extern cpuop_func op_d088_11_nf; extern cpuop_func op_d088_11_ff; extern cpuop_func op_d090_11_nf; extern cpuop_func op_d090_11_ff; extern cpuop_func op_d098_11_nf; extern cpuop_func op_d098_11_ff; extern cpuop_func op_d0a0_11_nf; extern cpuop_func op_d0a0_11_ff; extern cpuop_func op_d0a8_11_nf; extern cpuop_func op_d0a8_11_ff; extern cpuop_func op_d0b0_11_nf; extern cpuop_func op_d0b0_11_ff; extern cpuop_func op_d0b8_11_nf; extern cpuop_func op_d0b8_11_ff; extern cpuop_func op_d0b9_11_nf; extern cpuop_func op_d0b9_11_ff; extern cpuop_func op_d0ba_11_nf; extern cpuop_func op_d0ba_11_ff; extern cpuop_func op_d0bb_11_nf; extern cpuop_func op_d0bb_11_ff; extern cpuop_func op_d0bc_11_nf; extern cpuop_func op_d0bc_11_ff; extern cpuop_func op_d0c0_11_nf; extern cpuop_func op_d0c0_11_ff; extern cpuop_func op_d0c8_11_nf; extern cpuop_func op_d0c8_11_ff; extern cpuop_func op_d0d0_11_nf; extern cpuop_func op_d0d0_11_ff; extern cpuop_func op_d0d8_11_nf; extern cpuop_func op_d0d8_11_ff; extern cpuop_func op_d0e0_11_nf; extern cpuop_func op_d0e0_11_ff; extern cpuop_func op_d0e8_11_nf; extern cpuop_func op_d0e8_11_ff; extern cpuop_func op_d0f0_11_nf; extern cpuop_func op_d0f0_11_ff; extern cpuop_func op_d0f8_11_nf; extern cpuop_func op_d0f8_11_ff; extern cpuop_func op_d0f9_11_nf; extern cpuop_func op_d0f9_11_ff; extern cpuop_func op_d0fa_11_nf; extern cpuop_func op_d0fa_11_ff; extern cpuop_func op_d0fb_11_nf; extern cpuop_func op_d0fb_11_ff; extern cpuop_func op_d0fc_11_nf; extern cpuop_func op_d0fc_11_ff; extern cpuop_func op_d100_11_nf; extern cpuop_func op_d100_11_ff; extern cpuop_func op_d108_11_nf; extern cpuop_func op_d108_11_ff; extern cpuop_func op_d110_11_nf; extern cpuop_func op_d110_11_ff; extern cpuop_func op_d118_11_nf; extern cpuop_func op_d118_11_ff; extern cpuop_func op_d120_11_nf; extern cpuop_func op_d120_11_ff; extern cpuop_func op_d128_11_nf; extern cpuop_func op_d128_11_ff; extern cpuop_func op_d130_11_nf; extern cpuop_func op_d130_11_ff; extern cpuop_func op_d138_11_nf; extern cpuop_func op_d138_11_ff; extern cpuop_func op_d139_11_nf; extern cpuop_func op_d139_11_ff; extern cpuop_func op_d140_11_nf; extern cpuop_func op_d140_11_ff; extern cpuop_func op_d148_11_nf; extern cpuop_func op_d148_11_ff; extern cpuop_func op_d150_11_nf; extern cpuop_func op_d150_11_ff; extern cpuop_func op_d158_11_nf; extern cpuop_func op_d158_11_ff; extern cpuop_func op_d160_11_nf; extern cpuop_func op_d160_11_ff; extern cpuop_func op_d168_11_nf; extern cpuop_func op_d168_11_ff; extern cpuop_func op_d170_11_nf; extern cpuop_func op_d170_11_ff; extern cpuop_func op_d178_11_nf; extern cpuop_func op_d178_11_ff; extern cpuop_func op_d179_11_nf; extern cpuop_func op_d179_11_ff; extern cpuop_func op_d180_11_nf; extern cpuop_func op_d180_11_ff; extern cpuop_func op_d188_11_nf; extern cpuop_func op_d188_11_ff; extern cpuop_func op_d190_11_nf; extern cpuop_func op_d190_11_ff; extern cpuop_func op_d198_11_nf; extern cpuop_func op_d198_11_ff; extern cpuop_func op_d1a0_11_nf; extern cpuop_func op_d1a0_11_ff; extern cpuop_func op_d1a8_11_nf; extern cpuop_func op_d1a8_11_ff; extern cpuop_func op_d1b0_11_nf; extern cpuop_func op_d1b0_11_ff; extern cpuop_func op_d1b8_11_nf; extern cpuop_func op_d1b8_11_ff; extern cpuop_func op_d1b9_11_nf; extern cpuop_func op_d1b9_11_ff; extern cpuop_func op_d1c0_11_nf; extern cpuop_func op_d1c0_11_ff; extern cpuop_func op_d1c8_11_nf; extern cpuop_func op_d1c8_11_ff; extern cpuop_func op_d1d0_11_nf; extern cpuop_func op_d1d0_11_ff; extern cpuop_func op_d1d8_11_nf; extern cpuop_func op_d1d8_11_ff; extern cpuop_func op_d1e0_11_nf; extern cpuop_func op_d1e0_11_ff; extern cpuop_func op_d1e8_11_nf; extern cpuop_func op_d1e8_11_ff; extern cpuop_func op_d1f0_11_nf; extern cpuop_func op_d1f0_11_ff; extern cpuop_func op_d1f8_11_nf; extern cpuop_func op_d1f8_11_ff; extern cpuop_func op_d1f9_11_nf; extern cpuop_func op_d1f9_11_ff; extern cpuop_func op_d1fa_11_nf; extern cpuop_func op_d1fa_11_ff; extern cpuop_func op_d1fb_11_nf; extern cpuop_func op_d1fb_11_ff; extern cpuop_func op_d1fc_11_nf; extern cpuop_func op_d1fc_11_ff; extern cpuop_func op_e000_11_nf; extern cpuop_func op_e000_11_ff; extern cpuop_func op_e008_11_nf; extern cpuop_func op_e008_11_ff; extern cpuop_func op_e010_11_nf; extern cpuop_func op_e010_11_ff; extern cpuop_func op_e018_11_nf; extern cpuop_func op_e018_11_ff; extern cpuop_func op_e020_11_nf; extern cpuop_func op_e020_11_ff; extern cpuop_func op_e028_11_nf; extern cpuop_func op_e028_11_ff; extern cpuop_func op_e030_11_nf; extern cpuop_func op_e030_11_ff; extern cpuop_func op_e038_11_nf; extern cpuop_func op_e038_11_ff; extern cpuop_func op_e040_11_nf; extern cpuop_func op_e040_11_ff; extern cpuop_func op_e048_11_nf; extern cpuop_func op_e048_11_ff; extern cpuop_func op_e050_11_nf; extern cpuop_func op_e050_11_ff; extern cpuop_func op_e058_11_nf; extern cpuop_func op_e058_11_ff; extern cpuop_func op_e060_11_nf; extern cpuop_func op_e060_11_ff; extern cpuop_func op_e068_11_nf; extern cpuop_func op_e068_11_ff; extern cpuop_func op_e070_11_nf; extern cpuop_func op_e070_11_ff; extern cpuop_func op_e078_11_nf; extern cpuop_func op_e078_11_ff; extern cpuop_func op_e080_11_nf; extern cpuop_func op_e080_11_ff; extern cpuop_func op_e088_11_nf; extern cpuop_func op_e088_11_ff; extern cpuop_func op_e090_11_nf; extern cpuop_func op_e090_11_ff; extern cpuop_func op_e098_11_nf; extern cpuop_func op_e098_11_ff; extern cpuop_func op_e0a0_11_nf; extern cpuop_func op_e0a0_11_ff; extern cpuop_func op_e0a8_11_nf; extern cpuop_func op_e0a8_11_ff; extern cpuop_func op_e0b0_11_nf; extern cpuop_func op_e0b0_11_ff; extern cpuop_func op_e0b8_11_nf; extern cpuop_func op_e0b8_11_ff; extern cpuop_func op_e0d0_11_nf; extern cpuop_func op_e0d0_11_ff; extern cpuop_func op_e0d8_11_nf; extern cpuop_func op_e0d8_11_ff; extern cpuop_func op_e0e0_11_nf; extern cpuop_func op_e0e0_11_ff; extern cpuop_func op_e0e8_11_nf; extern cpuop_func op_e0e8_11_ff; extern cpuop_func op_e0f0_11_nf; extern cpuop_func op_e0f0_11_ff; extern cpuop_func op_e0f8_11_nf; extern cpuop_func op_e0f8_11_ff; extern cpuop_func op_e0f9_11_nf; extern cpuop_func op_e0f9_11_ff; extern cpuop_func op_e100_11_nf; extern cpuop_func op_e100_11_ff; extern cpuop_func op_e108_11_nf; extern cpuop_func op_e108_11_ff; extern cpuop_func op_e110_11_nf; extern cpuop_func op_e110_11_ff; extern cpuop_func op_e118_11_nf; extern cpuop_func op_e118_11_ff; extern cpuop_func op_e120_11_nf; extern cpuop_func op_e120_11_ff; extern cpuop_func op_e128_11_nf; extern cpuop_func op_e128_11_ff; extern cpuop_func op_e130_11_nf; extern cpuop_func op_e130_11_ff; extern cpuop_func op_e138_11_nf; extern cpuop_func op_e138_11_ff; extern cpuop_func op_e140_11_nf; extern cpuop_func op_e140_11_ff; extern cpuop_func op_e148_11_nf; extern cpuop_func op_e148_11_ff; extern cpuop_func op_e150_11_nf; extern cpuop_func op_e150_11_ff; extern cpuop_func op_e158_11_nf; extern cpuop_func op_e158_11_ff; extern cpuop_func op_e160_11_nf; extern cpuop_func op_e160_11_ff; extern cpuop_func op_e168_11_nf; extern cpuop_func op_e168_11_ff; extern cpuop_func op_e170_11_nf; extern cpuop_func op_e170_11_ff; extern cpuop_func op_e178_11_nf; extern cpuop_func op_e178_11_ff; extern cpuop_func op_e180_11_nf; extern cpuop_func op_e180_11_ff; extern cpuop_func op_e188_11_nf; extern cpuop_func op_e188_11_ff; extern cpuop_func op_e190_11_nf; extern cpuop_func op_e190_11_ff; extern cpuop_func op_e198_11_nf; extern cpuop_func op_e198_11_ff; extern cpuop_func op_e1a0_11_nf; extern cpuop_func op_e1a0_11_ff; extern cpuop_func op_e1a8_11_nf; extern cpuop_func op_e1a8_11_ff; extern cpuop_func op_e1b0_11_nf; extern cpuop_func op_e1b0_11_ff; extern cpuop_func op_e1b8_11_nf; extern cpuop_func op_e1b8_11_ff; extern cpuop_func op_e1d0_11_nf; extern cpuop_func op_e1d0_11_ff; extern cpuop_func op_e1d8_11_nf; extern cpuop_func op_e1d8_11_ff; extern cpuop_func op_e1e0_11_nf; extern cpuop_func op_e1e0_11_ff; extern cpuop_func op_e1e8_11_nf; extern cpuop_func op_e1e8_11_ff; extern cpuop_func op_e1f0_11_nf; extern cpuop_func op_e1f0_11_ff; extern cpuop_func op_e1f8_11_nf; extern cpuop_func op_e1f8_11_ff; extern cpuop_func op_e1f9_11_nf; extern cpuop_func op_e1f9_11_ff; extern cpuop_func op_e2d0_11_nf; extern cpuop_func op_e2d0_11_ff; extern cpuop_func op_e2d8_11_nf; extern cpuop_func op_e2d8_11_ff; extern cpuop_func op_e2e0_11_nf; extern cpuop_func op_e2e0_11_ff; extern cpuop_func op_e2e8_11_nf; extern cpuop_func op_e2e8_11_ff; extern cpuop_func op_e2f0_11_nf; extern cpuop_func op_e2f0_11_ff; extern cpuop_func op_e2f8_11_nf; extern cpuop_func op_e2f8_11_ff; extern cpuop_func op_e2f9_11_nf; extern cpuop_func op_e2f9_11_ff; extern cpuop_func op_e3d0_11_nf; extern cpuop_func op_e3d0_11_ff; extern cpuop_func op_e3d8_11_nf; extern cpuop_func op_e3d8_11_ff; extern cpuop_func op_e3e0_11_nf; extern cpuop_func op_e3e0_11_ff; extern cpuop_func op_e3e8_11_nf; extern cpuop_func op_e3e8_11_ff; extern cpuop_func op_e3f0_11_nf; extern cpuop_func op_e3f0_11_ff; extern cpuop_func op_e3f8_11_nf; extern cpuop_func op_e3f8_11_ff; extern cpuop_func op_e3f9_11_nf; extern cpuop_func op_e3f9_11_ff; extern cpuop_func op_e4d0_11_nf; extern cpuop_func op_e4d0_11_ff; extern cpuop_func op_e4d8_11_nf; extern cpuop_func op_e4d8_11_ff; extern cpuop_func op_e4e0_11_nf; extern cpuop_func op_e4e0_11_ff; extern cpuop_func op_e4e8_11_nf; extern cpuop_func op_e4e8_11_ff; extern cpuop_func op_e4f0_11_nf; extern cpuop_func op_e4f0_11_ff; extern cpuop_func op_e4f8_11_nf; extern cpuop_func op_e4f8_11_ff; extern cpuop_func op_e4f9_11_nf; extern cpuop_func op_e4f9_11_ff; extern cpuop_func op_e5d0_11_nf; extern cpuop_func op_e5d0_11_ff; extern cpuop_func op_e5d8_11_nf; extern cpuop_func op_e5d8_11_ff; extern cpuop_func op_e5e0_11_nf; extern cpuop_func op_e5e0_11_ff; extern cpuop_func op_e5e8_11_nf; extern cpuop_func op_e5e8_11_ff; extern cpuop_func op_e5f0_11_nf; extern cpuop_func op_e5f0_11_ff; extern cpuop_func op_e5f8_11_nf; extern cpuop_func op_e5f8_11_ff; extern cpuop_func op_e5f9_11_nf; extern cpuop_func op_e5f9_11_ff; extern cpuop_func op_e6d0_11_nf; extern cpuop_func op_e6d0_11_ff; extern cpuop_func op_e6d8_11_nf; extern cpuop_func op_e6d8_11_ff; extern cpuop_func op_e6e0_11_nf; extern cpuop_func op_e6e0_11_ff; extern cpuop_func op_e6e8_11_nf; extern cpuop_func op_e6e8_11_ff; extern cpuop_func op_e6f0_11_nf; extern cpuop_func op_e6f0_11_ff; extern cpuop_func op_e6f8_11_nf; extern cpuop_func op_e6f8_11_ff; extern cpuop_func op_e6f9_11_nf; extern cpuop_func op_e6f9_11_ff; extern cpuop_func op_e7d0_11_nf; extern cpuop_func op_e7d0_11_ff; extern cpuop_func op_e7d8_11_nf; extern cpuop_func op_e7d8_11_ff; extern cpuop_func op_e7e0_11_nf; extern cpuop_func op_e7e0_11_ff; extern cpuop_func op_e7e8_11_nf; extern cpuop_func op_e7e8_11_ff; extern cpuop_func op_e7f0_11_nf; extern cpuop_func op_e7f0_11_ff; extern cpuop_func op_e7f8_11_nf; extern cpuop_func op_e7f8_11_ff; extern cpuop_func op_e7f9_11_nf; extern cpuop_func op_e7f9_11_ff; extern cpuop_func_ce op_0000_12_nf; extern cpuop_func_ce op_0000_12_ff; extern cpuop_func_ce op_0010_12_nf; extern cpuop_func_ce op_0010_12_ff; extern cpuop_func_ce op_0018_12_nf; extern cpuop_func_ce op_0018_12_ff; extern cpuop_func_ce op_0020_12_nf; extern cpuop_func_ce op_0020_12_ff; extern cpuop_func_ce op_0028_12_nf; extern cpuop_func_ce op_0028_12_ff; extern cpuop_func_ce op_0030_12_nf; extern cpuop_func_ce op_0030_12_ff; extern cpuop_func_ce op_0038_12_nf; extern cpuop_func_ce op_0038_12_ff; extern cpuop_func_ce op_0039_12_nf; extern cpuop_func_ce op_0039_12_ff; extern cpuop_func_ce op_003c_12_nf; extern cpuop_func_ce op_003c_12_ff; extern cpuop_func_ce op_0040_12_nf; extern cpuop_func_ce op_0040_12_ff; extern cpuop_func_ce op_0050_12_nf; extern cpuop_func_ce op_0050_12_ff; extern cpuop_func_ce op_0058_12_nf; extern cpuop_func_ce op_0058_12_ff; extern cpuop_func_ce op_0060_12_nf; extern cpuop_func_ce op_0060_12_ff; extern cpuop_func_ce op_0068_12_nf; extern cpuop_func_ce op_0068_12_ff; extern cpuop_func_ce op_0070_12_nf; extern cpuop_func_ce op_0070_12_ff; extern cpuop_func_ce op_0078_12_nf; extern cpuop_func_ce op_0078_12_ff; extern cpuop_func_ce op_0079_12_nf; extern cpuop_func_ce op_0079_12_ff; extern cpuop_func_ce op_007c_12_nf; extern cpuop_func_ce op_007c_12_ff; extern cpuop_func_ce op_0080_12_nf; extern cpuop_func_ce op_0080_12_ff; extern cpuop_func_ce op_0090_12_nf; extern cpuop_func_ce op_0090_12_ff; extern cpuop_func_ce op_0098_12_nf; extern cpuop_func_ce op_0098_12_ff; extern cpuop_func_ce op_00a0_12_nf; extern cpuop_func_ce op_00a0_12_ff; extern cpuop_func_ce op_00a8_12_nf; extern cpuop_func_ce op_00a8_12_ff; extern cpuop_func_ce op_00b0_12_nf; extern cpuop_func_ce op_00b0_12_ff; extern cpuop_func_ce op_00b8_12_nf; extern cpuop_func_ce op_00b8_12_ff; extern cpuop_func_ce op_00b9_12_nf; extern cpuop_func_ce op_00b9_12_ff; extern cpuop_func_ce op_0100_12_nf; extern cpuop_func_ce op_0100_12_ff; extern cpuop_func_ce op_0108_12_nf; extern cpuop_func_ce op_0108_12_ff; extern cpuop_func_ce op_0110_12_nf; extern cpuop_func_ce op_0110_12_ff; extern cpuop_func_ce op_0118_12_nf; extern cpuop_func_ce op_0118_12_ff; extern cpuop_func_ce op_0120_12_nf; extern cpuop_func_ce op_0120_12_ff; extern cpuop_func_ce op_0128_12_nf; extern cpuop_func_ce op_0128_12_ff; extern cpuop_func_ce op_0130_12_nf; extern cpuop_func_ce op_0130_12_ff; extern cpuop_func_ce op_0138_12_nf; extern cpuop_func_ce op_0138_12_ff; extern cpuop_func_ce op_0139_12_nf; extern cpuop_func_ce op_0139_12_ff; extern cpuop_func_ce op_013a_12_nf; extern cpuop_func_ce op_013a_12_ff; extern cpuop_func_ce op_013b_12_nf; extern cpuop_func_ce op_013b_12_ff; extern cpuop_func_ce op_013c_12_nf; extern cpuop_func_ce op_013c_12_ff; extern cpuop_func_ce op_0140_12_nf; extern cpuop_func_ce op_0140_12_ff; extern cpuop_func_ce op_0148_12_nf; extern cpuop_func_ce op_0148_12_ff; extern cpuop_func_ce op_0150_12_nf; extern cpuop_func_ce op_0150_12_ff; extern cpuop_func_ce op_0158_12_nf; extern cpuop_func_ce op_0158_12_ff; extern cpuop_func_ce op_0160_12_nf; extern cpuop_func_ce op_0160_12_ff; extern cpuop_func_ce op_0168_12_nf; extern cpuop_func_ce op_0168_12_ff; extern cpuop_func_ce op_0170_12_nf; extern cpuop_func_ce op_0170_12_ff; extern cpuop_func_ce op_0178_12_nf; extern cpuop_func_ce op_0178_12_ff; extern cpuop_func_ce op_0179_12_nf; extern cpuop_func_ce op_0179_12_ff; extern cpuop_func_ce op_017a_12_nf; extern cpuop_func_ce op_017a_12_ff; extern cpuop_func_ce op_017b_12_nf; extern cpuop_func_ce op_017b_12_ff; extern cpuop_func_ce op_0180_12_nf; extern cpuop_func_ce op_0180_12_ff; extern cpuop_func_ce op_0188_12_nf; extern cpuop_func_ce op_0188_12_ff; extern cpuop_func_ce op_0190_12_nf; extern cpuop_func_ce op_0190_12_ff; extern cpuop_func_ce op_0198_12_nf; extern cpuop_func_ce op_0198_12_ff; extern cpuop_func_ce op_01a0_12_nf; extern cpuop_func_ce op_01a0_12_ff; extern cpuop_func_ce op_01a8_12_nf; extern cpuop_func_ce op_01a8_12_ff; extern cpuop_func_ce op_01b0_12_nf; extern cpuop_func_ce op_01b0_12_ff; extern cpuop_func_ce op_01b8_12_nf; extern cpuop_func_ce op_01b8_12_ff; extern cpuop_func_ce op_01b9_12_nf; extern cpuop_func_ce op_01b9_12_ff; extern cpuop_func_ce op_01ba_12_nf; extern cpuop_func_ce op_01ba_12_ff; extern cpuop_func_ce op_01bb_12_nf; extern cpuop_func_ce op_01bb_12_ff; extern cpuop_func_ce op_01c0_12_nf; extern cpuop_func_ce op_01c0_12_ff; extern cpuop_func_ce op_01c8_12_nf; extern cpuop_func_ce op_01c8_12_ff; extern cpuop_func_ce op_01d0_12_nf; extern cpuop_func_ce op_01d0_12_ff; extern cpuop_func_ce op_01d8_12_nf; extern cpuop_func_ce op_01d8_12_ff; extern cpuop_func_ce op_01e0_12_nf; extern cpuop_func_ce op_01e0_12_ff; extern cpuop_func_ce op_01e8_12_nf; extern cpuop_func_ce op_01e8_12_ff; extern cpuop_func_ce op_01f0_12_nf; extern cpuop_func_ce op_01f0_12_ff; extern cpuop_func_ce op_01f8_12_nf; extern cpuop_func_ce op_01f8_12_ff; extern cpuop_func_ce op_01f9_12_nf; extern cpuop_func_ce op_01f9_12_ff; extern cpuop_func_ce op_01fa_12_nf; extern cpuop_func_ce op_01fa_12_ff; extern cpuop_func_ce op_01fb_12_nf; extern cpuop_func_ce op_01fb_12_ff; extern cpuop_func_ce op_0200_12_nf; extern cpuop_func_ce op_0200_12_ff; extern cpuop_func_ce op_0210_12_nf; extern cpuop_func_ce op_0210_12_ff; extern cpuop_func_ce op_0218_12_nf; extern cpuop_func_ce op_0218_12_ff; extern cpuop_func_ce op_0220_12_nf; extern cpuop_func_ce op_0220_12_ff; extern cpuop_func_ce op_0228_12_nf; extern cpuop_func_ce op_0228_12_ff; extern cpuop_func_ce op_0230_12_nf; extern cpuop_func_ce op_0230_12_ff; extern cpuop_func_ce op_0238_12_nf; extern cpuop_func_ce op_0238_12_ff; extern cpuop_func_ce op_0239_12_nf; extern cpuop_func_ce op_0239_12_ff; extern cpuop_func_ce op_023c_12_nf; extern cpuop_func_ce op_023c_12_ff; extern cpuop_func_ce op_0240_12_nf; extern cpuop_func_ce op_0240_12_ff; extern cpuop_func_ce op_0250_12_nf; extern cpuop_func_ce op_0250_12_ff; extern cpuop_func_ce op_0258_12_nf; extern cpuop_func_ce op_0258_12_ff; extern cpuop_func_ce op_0260_12_nf; extern cpuop_func_ce op_0260_12_ff; extern cpuop_func_ce op_0268_12_nf; extern cpuop_func_ce op_0268_12_ff; extern cpuop_func_ce op_0270_12_nf; extern cpuop_func_ce op_0270_12_ff; extern cpuop_func_ce op_0278_12_nf; extern cpuop_func_ce op_0278_12_ff; extern cpuop_func_ce op_0279_12_nf; extern cpuop_func_ce op_0279_12_ff; extern cpuop_func_ce op_027c_12_nf; extern cpuop_func_ce op_027c_12_ff; extern cpuop_func_ce op_0280_12_nf; extern cpuop_func_ce op_0280_12_ff; extern cpuop_func_ce op_0290_12_nf; extern cpuop_func_ce op_0290_12_ff; extern cpuop_func_ce op_0298_12_nf; extern cpuop_func_ce op_0298_12_ff; extern cpuop_func_ce op_02a0_12_nf; extern cpuop_func_ce op_02a0_12_ff; extern cpuop_func_ce op_02a8_12_nf; extern cpuop_func_ce op_02a8_12_ff; extern cpuop_func_ce op_02b0_12_nf; extern cpuop_func_ce op_02b0_12_ff; extern cpuop_func_ce op_02b8_12_nf; extern cpuop_func_ce op_02b8_12_ff; extern cpuop_func_ce op_02b9_12_nf; extern cpuop_func_ce op_02b9_12_ff; extern cpuop_func_ce op_0400_12_nf; extern cpuop_func_ce op_0400_12_ff; extern cpuop_func_ce op_0410_12_nf; extern cpuop_func_ce op_0410_12_ff; extern cpuop_func_ce op_0418_12_nf; extern cpuop_func_ce op_0418_12_ff; extern cpuop_func_ce op_0420_12_nf; extern cpuop_func_ce op_0420_12_ff; extern cpuop_func_ce op_0428_12_nf; extern cpuop_func_ce op_0428_12_ff; extern cpuop_func_ce op_0430_12_nf; extern cpuop_func_ce op_0430_12_ff; extern cpuop_func_ce op_0438_12_nf; extern cpuop_func_ce op_0438_12_ff; extern cpuop_func_ce op_0439_12_nf; extern cpuop_func_ce op_0439_12_ff; extern cpuop_func_ce op_0440_12_nf; extern cpuop_func_ce op_0440_12_ff; extern cpuop_func_ce op_0450_12_nf; extern cpuop_func_ce op_0450_12_ff; extern cpuop_func_ce op_0458_12_nf; extern cpuop_func_ce op_0458_12_ff; extern cpuop_func_ce op_0460_12_nf; extern cpuop_func_ce op_0460_12_ff; extern cpuop_func_ce op_0468_12_nf; extern cpuop_func_ce op_0468_12_ff; extern cpuop_func_ce op_0470_12_nf; extern cpuop_func_ce op_0470_12_ff; extern cpuop_func_ce op_0478_12_nf; extern cpuop_func_ce op_0478_12_ff; extern cpuop_func_ce op_0479_12_nf; extern cpuop_func_ce op_0479_12_ff; extern cpuop_func_ce op_0480_12_nf; extern cpuop_func_ce op_0480_12_ff; extern cpuop_func_ce op_0490_12_nf; extern cpuop_func_ce op_0490_12_ff; extern cpuop_func_ce op_0498_12_nf; extern cpuop_func_ce op_0498_12_ff; extern cpuop_func_ce op_04a0_12_nf; extern cpuop_func_ce op_04a0_12_ff; extern cpuop_func_ce op_04a8_12_nf; extern cpuop_func_ce op_04a8_12_ff; extern cpuop_func_ce op_04b0_12_nf; extern cpuop_func_ce op_04b0_12_ff; extern cpuop_func_ce op_04b8_12_nf; extern cpuop_func_ce op_04b8_12_ff; extern cpuop_func_ce op_04b9_12_nf; extern cpuop_func_ce op_04b9_12_ff; extern cpuop_func_ce op_0600_12_nf; extern cpuop_func_ce op_0600_12_ff; extern cpuop_func_ce op_0610_12_nf; extern cpuop_func_ce op_0610_12_ff; extern cpuop_func_ce op_0618_12_nf; extern cpuop_func_ce op_0618_12_ff; extern cpuop_func_ce op_0620_12_nf; extern cpuop_func_ce op_0620_12_ff; extern cpuop_func_ce op_0628_12_nf; extern cpuop_func_ce op_0628_12_ff; extern cpuop_func_ce op_0630_12_nf; extern cpuop_func_ce op_0630_12_ff; extern cpuop_func_ce op_0638_12_nf; extern cpuop_func_ce op_0638_12_ff; extern cpuop_func_ce op_0639_12_nf; extern cpuop_func_ce op_0639_12_ff; extern cpuop_func_ce op_0640_12_nf; extern cpuop_func_ce op_0640_12_ff; extern cpuop_func_ce op_0650_12_nf; extern cpuop_func_ce op_0650_12_ff; extern cpuop_func_ce op_0658_12_nf; extern cpuop_func_ce op_0658_12_ff; extern cpuop_func_ce op_0660_12_nf; extern cpuop_func_ce op_0660_12_ff; extern cpuop_func_ce op_0668_12_nf; extern cpuop_func_ce op_0668_12_ff; extern cpuop_func_ce op_0670_12_nf; extern cpuop_func_ce op_0670_12_ff; extern cpuop_func_ce op_0678_12_nf; extern cpuop_func_ce op_0678_12_ff; extern cpuop_func_ce op_0679_12_nf; extern cpuop_func_ce op_0679_12_ff; extern cpuop_func_ce op_0680_12_nf; extern cpuop_func_ce op_0680_12_ff; extern cpuop_func_ce op_0690_12_nf; extern cpuop_func_ce op_0690_12_ff; extern cpuop_func_ce op_0698_12_nf; extern cpuop_func_ce op_0698_12_ff; extern cpuop_func_ce op_06a0_12_nf; extern cpuop_func_ce op_06a0_12_ff; extern cpuop_func_ce op_06a8_12_nf; extern cpuop_func_ce op_06a8_12_ff; extern cpuop_func_ce op_06b0_12_nf; extern cpuop_func_ce op_06b0_12_ff; extern cpuop_func_ce op_06b8_12_nf; extern cpuop_func_ce op_06b8_12_ff; extern cpuop_func_ce op_06b9_12_nf; extern cpuop_func_ce op_06b9_12_ff; extern cpuop_func_ce op_0800_12_nf; extern cpuop_func_ce op_0800_12_ff; extern cpuop_func_ce op_0810_12_nf; extern cpuop_func_ce op_0810_12_ff; extern cpuop_func_ce op_0818_12_nf; extern cpuop_func_ce op_0818_12_ff; extern cpuop_func_ce op_0820_12_nf; extern cpuop_func_ce op_0820_12_ff; extern cpuop_func_ce op_0828_12_nf; extern cpuop_func_ce op_0828_12_ff; extern cpuop_func_ce op_0830_12_nf; extern cpuop_func_ce op_0830_12_ff; extern cpuop_func_ce op_0838_12_nf; extern cpuop_func_ce op_0838_12_ff; extern cpuop_func_ce op_0839_12_nf; extern cpuop_func_ce op_0839_12_ff; extern cpuop_func_ce op_083a_12_nf; extern cpuop_func_ce op_083a_12_ff; extern cpuop_func_ce op_083b_12_nf; extern cpuop_func_ce op_083b_12_ff; extern cpuop_func_ce op_083c_12_nf; extern cpuop_func_ce op_083c_12_ff; extern cpuop_func_ce op_0840_12_nf; extern cpuop_func_ce op_0840_12_ff; extern cpuop_func_ce op_0850_12_nf; extern cpuop_func_ce op_0850_12_ff; extern cpuop_func_ce op_0858_12_nf; extern cpuop_func_ce op_0858_12_ff; extern cpuop_func_ce op_0860_12_nf; extern cpuop_func_ce op_0860_12_ff; extern cpuop_func_ce op_0868_12_nf; extern cpuop_func_ce op_0868_12_ff; extern cpuop_func_ce op_0870_12_nf; extern cpuop_func_ce op_0870_12_ff; extern cpuop_func_ce op_0878_12_nf; extern cpuop_func_ce op_0878_12_ff; extern cpuop_func_ce op_0879_12_nf; extern cpuop_func_ce op_0879_12_ff; extern cpuop_func_ce op_087a_12_nf; extern cpuop_func_ce op_087a_12_ff; extern cpuop_func_ce op_087b_12_nf; extern cpuop_func_ce op_087b_12_ff; extern cpuop_func_ce op_0880_12_nf; extern cpuop_func_ce op_0880_12_ff; extern cpuop_func_ce op_0890_12_nf; extern cpuop_func_ce op_0890_12_ff; extern cpuop_func_ce op_0898_12_nf; extern cpuop_func_ce op_0898_12_ff; extern cpuop_func_ce op_08a0_12_nf; extern cpuop_func_ce op_08a0_12_ff; extern cpuop_func_ce op_08a8_12_nf; extern cpuop_func_ce op_08a8_12_ff; extern cpuop_func_ce op_08b0_12_nf; extern cpuop_func_ce op_08b0_12_ff; extern cpuop_func_ce op_08b8_12_nf; extern cpuop_func_ce op_08b8_12_ff; extern cpuop_func_ce op_08b9_12_nf; extern cpuop_func_ce op_08b9_12_ff; extern cpuop_func_ce op_08ba_12_nf; extern cpuop_func_ce op_08ba_12_ff; extern cpuop_func_ce op_08bb_12_nf; extern cpuop_func_ce op_08bb_12_ff; extern cpuop_func_ce op_08c0_12_nf; extern cpuop_func_ce op_08c0_12_ff; extern cpuop_func_ce op_08d0_12_nf; extern cpuop_func_ce op_08d0_12_ff; extern cpuop_func_ce op_08d8_12_nf; extern cpuop_func_ce op_08d8_12_ff; extern cpuop_func_ce op_08e0_12_nf; extern cpuop_func_ce op_08e0_12_ff; extern cpuop_func_ce op_08e8_12_nf; extern cpuop_func_ce op_08e8_12_ff; extern cpuop_func_ce op_08f0_12_nf; extern cpuop_func_ce op_08f0_12_ff; extern cpuop_func_ce op_08f8_12_nf; extern cpuop_func_ce op_08f8_12_ff; extern cpuop_func_ce op_08f9_12_nf; extern cpuop_func_ce op_08f9_12_ff; extern cpuop_func_ce op_08fa_12_nf; extern cpuop_func_ce op_08fa_12_ff; extern cpuop_func_ce op_08fb_12_nf; extern cpuop_func_ce op_08fb_12_ff; extern cpuop_func_ce op_0a00_12_nf; extern cpuop_func_ce op_0a00_12_ff; extern cpuop_func_ce op_0a10_12_nf; extern cpuop_func_ce op_0a10_12_ff; extern cpuop_func_ce op_0a18_12_nf; extern cpuop_func_ce op_0a18_12_ff; extern cpuop_func_ce op_0a20_12_nf; extern cpuop_func_ce op_0a20_12_ff; extern cpuop_func_ce op_0a28_12_nf; extern cpuop_func_ce op_0a28_12_ff; extern cpuop_func_ce op_0a30_12_nf; extern cpuop_func_ce op_0a30_12_ff; extern cpuop_func_ce op_0a38_12_nf; extern cpuop_func_ce op_0a38_12_ff; extern cpuop_func_ce op_0a39_12_nf; extern cpuop_func_ce op_0a39_12_ff; extern cpuop_func_ce op_0a3c_12_nf; extern cpuop_func_ce op_0a3c_12_ff; extern cpuop_func_ce op_0a40_12_nf; extern cpuop_func_ce op_0a40_12_ff; extern cpuop_func_ce op_0a50_12_nf; extern cpuop_func_ce op_0a50_12_ff; extern cpuop_func_ce op_0a58_12_nf; extern cpuop_func_ce op_0a58_12_ff; extern cpuop_func_ce op_0a60_12_nf; extern cpuop_func_ce op_0a60_12_ff; extern cpuop_func_ce op_0a68_12_nf; extern cpuop_func_ce op_0a68_12_ff; extern cpuop_func_ce op_0a70_12_nf; extern cpuop_func_ce op_0a70_12_ff; extern cpuop_func_ce op_0a78_12_nf; extern cpuop_func_ce op_0a78_12_ff; extern cpuop_func_ce op_0a79_12_nf; extern cpuop_func_ce op_0a79_12_ff; extern cpuop_func_ce op_0a7c_12_nf; extern cpuop_func_ce op_0a7c_12_ff; extern cpuop_func_ce op_0a80_12_nf; extern cpuop_func_ce op_0a80_12_ff; extern cpuop_func_ce op_0a90_12_nf; extern cpuop_func_ce op_0a90_12_ff; extern cpuop_func_ce op_0a98_12_nf; extern cpuop_func_ce op_0a98_12_ff; extern cpuop_func_ce op_0aa0_12_nf; extern cpuop_func_ce op_0aa0_12_ff; extern cpuop_func_ce op_0aa8_12_nf; extern cpuop_func_ce op_0aa8_12_ff; extern cpuop_func_ce op_0ab0_12_nf; extern cpuop_func_ce op_0ab0_12_ff; extern cpuop_func_ce op_0ab8_12_nf; extern cpuop_func_ce op_0ab8_12_ff; extern cpuop_func_ce op_0ab9_12_nf; extern cpuop_func_ce op_0ab9_12_ff; extern cpuop_func_ce op_0c00_12_nf; extern cpuop_func_ce op_0c00_12_ff; extern cpuop_func_ce op_0c10_12_nf; extern cpuop_func_ce op_0c10_12_ff; extern cpuop_func_ce op_0c18_12_nf; extern cpuop_func_ce op_0c18_12_ff; extern cpuop_func_ce op_0c20_12_nf; extern cpuop_func_ce op_0c20_12_ff; extern cpuop_func_ce op_0c28_12_nf; extern cpuop_func_ce op_0c28_12_ff; extern cpuop_func_ce op_0c30_12_nf; extern cpuop_func_ce op_0c30_12_ff; extern cpuop_func_ce op_0c38_12_nf; extern cpuop_func_ce op_0c38_12_ff; extern cpuop_func_ce op_0c39_12_nf; extern cpuop_func_ce op_0c39_12_ff; extern cpuop_func_ce op_0c40_12_nf; extern cpuop_func_ce op_0c40_12_ff; extern cpuop_func_ce op_0c50_12_nf; extern cpuop_func_ce op_0c50_12_ff; extern cpuop_func_ce op_0c58_12_nf; extern cpuop_func_ce op_0c58_12_ff; extern cpuop_func_ce op_0c60_12_nf; extern cpuop_func_ce op_0c60_12_ff; extern cpuop_func_ce op_0c68_12_nf; extern cpuop_func_ce op_0c68_12_ff; extern cpuop_func_ce op_0c70_12_nf; extern cpuop_func_ce op_0c70_12_ff; extern cpuop_func_ce op_0c78_12_nf; extern cpuop_func_ce op_0c78_12_ff; extern cpuop_func_ce op_0c79_12_nf; extern cpuop_func_ce op_0c79_12_ff; extern cpuop_func_ce op_0c80_12_nf; extern cpuop_func_ce op_0c80_12_ff; extern cpuop_func_ce op_0c90_12_nf; extern cpuop_func_ce op_0c90_12_ff; extern cpuop_func_ce op_0c98_12_nf; extern cpuop_func_ce op_0c98_12_ff; extern cpuop_func_ce op_0ca0_12_nf; extern cpuop_func_ce op_0ca0_12_ff; extern cpuop_func_ce op_0ca8_12_nf; extern cpuop_func_ce op_0ca8_12_ff; extern cpuop_func_ce op_0cb0_12_nf; extern cpuop_func_ce op_0cb0_12_ff; extern cpuop_func_ce op_0cb8_12_nf; extern cpuop_func_ce op_0cb8_12_ff; extern cpuop_func_ce op_0cb9_12_nf; extern cpuop_func_ce op_0cb9_12_ff; extern cpuop_func_ce op_1000_12_nf; extern cpuop_func_ce op_1000_12_ff; extern cpuop_func_ce op_1010_12_nf; extern cpuop_func_ce op_1010_12_ff; extern cpuop_func_ce op_1018_12_nf; extern cpuop_func_ce op_1018_12_ff; extern cpuop_func_ce op_1020_12_nf; extern cpuop_func_ce op_1020_12_ff; extern cpuop_func_ce op_1028_12_nf; extern cpuop_func_ce op_1028_12_ff; extern cpuop_func_ce op_1030_12_nf; extern cpuop_func_ce op_1030_12_ff; extern cpuop_func_ce op_1038_12_nf; extern cpuop_func_ce op_1038_12_ff; extern cpuop_func_ce op_1039_12_nf; extern cpuop_func_ce op_1039_12_ff; extern cpuop_func_ce op_103a_12_nf; extern cpuop_func_ce op_103a_12_ff; extern cpuop_func_ce op_103b_12_nf; extern cpuop_func_ce op_103b_12_ff; extern cpuop_func_ce op_103c_12_nf; extern cpuop_func_ce op_103c_12_ff; extern cpuop_func_ce op_1080_12_nf; extern cpuop_func_ce op_1080_12_ff; extern cpuop_func_ce op_1090_12_nf; extern cpuop_func_ce op_1090_12_ff; extern cpuop_func_ce op_1098_12_nf; extern cpuop_func_ce op_1098_12_ff; extern cpuop_func_ce op_10a0_12_nf; extern cpuop_func_ce op_10a0_12_ff; extern cpuop_func_ce op_10a8_12_nf; extern cpuop_func_ce op_10a8_12_ff; extern cpuop_func_ce op_10b0_12_nf; extern cpuop_func_ce op_10b0_12_ff; extern cpuop_func_ce op_10b8_12_nf; extern cpuop_func_ce op_10b8_12_ff; extern cpuop_func_ce op_10b9_12_nf; extern cpuop_func_ce op_10b9_12_ff; extern cpuop_func_ce op_10ba_12_nf; extern cpuop_func_ce op_10ba_12_ff; extern cpuop_func_ce op_10bb_12_nf; extern cpuop_func_ce op_10bb_12_ff; extern cpuop_func_ce op_10bc_12_nf; extern cpuop_func_ce op_10bc_12_ff; extern cpuop_func_ce op_10c0_12_nf; extern cpuop_func_ce op_10c0_12_ff; extern cpuop_func_ce op_10d0_12_nf; extern cpuop_func_ce op_10d0_12_ff; extern cpuop_func_ce op_10d8_12_nf; extern cpuop_func_ce op_10d8_12_ff; extern cpuop_func_ce op_10e0_12_nf; extern cpuop_func_ce op_10e0_12_ff; extern cpuop_func_ce op_10e8_12_nf; extern cpuop_func_ce op_10e8_12_ff; extern cpuop_func_ce op_10f0_12_nf; extern cpuop_func_ce op_10f0_12_ff; extern cpuop_func_ce op_10f8_12_nf; extern cpuop_func_ce op_10f8_12_ff; extern cpuop_func_ce op_10f9_12_nf; extern cpuop_func_ce op_10f9_12_ff; extern cpuop_func_ce op_10fa_12_nf; extern cpuop_func_ce op_10fa_12_ff; extern cpuop_func_ce op_10fb_12_nf; extern cpuop_func_ce op_10fb_12_ff; extern cpuop_func_ce op_10fc_12_nf; extern cpuop_func_ce op_10fc_12_ff; extern cpuop_func_ce op_1100_12_nf; extern cpuop_func_ce op_1100_12_ff; extern cpuop_func_ce op_1110_12_nf; extern cpuop_func_ce op_1110_12_ff; extern cpuop_func_ce op_1118_12_nf; extern cpuop_func_ce op_1118_12_ff; extern cpuop_func_ce op_1120_12_nf; extern cpuop_func_ce op_1120_12_ff; extern cpuop_func_ce op_1128_12_nf; extern cpuop_func_ce op_1128_12_ff; extern cpuop_func_ce op_1130_12_nf; extern cpuop_func_ce op_1130_12_ff; extern cpuop_func_ce op_1138_12_nf; extern cpuop_func_ce op_1138_12_ff; extern cpuop_func_ce op_1139_12_nf; extern cpuop_func_ce op_1139_12_ff; extern cpuop_func_ce op_113a_12_nf; extern cpuop_func_ce op_113a_12_ff; extern cpuop_func_ce op_113b_12_nf; extern cpuop_func_ce op_113b_12_ff; extern cpuop_func_ce op_113c_12_nf; extern cpuop_func_ce op_113c_12_ff; extern cpuop_func_ce op_1140_12_nf; extern cpuop_func_ce op_1140_12_ff; extern cpuop_func_ce op_1150_12_nf; extern cpuop_func_ce op_1150_12_ff; extern cpuop_func_ce op_1158_12_nf; extern cpuop_func_ce op_1158_12_ff; extern cpuop_func_ce op_1160_12_nf; extern cpuop_func_ce op_1160_12_ff; extern cpuop_func_ce op_1168_12_nf; extern cpuop_func_ce op_1168_12_ff; extern cpuop_func_ce op_1170_12_nf; extern cpuop_func_ce op_1170_12_ff; extern cpuop_func_ce op_1178_12_nf; extern cpuop_func_ce op_1178_12_ff; extern cpuop_func_ce op_1179_12_nf; extern cpuop_func_ce op_1179_12_ff; extern cpuop_func_ce op_117a_12_nf; extern cpuop_func_ce op_117a_12_ff; extern cpuop_func_ce op_117b_12_nf; extern cpuop_func_ce op_117b_12_ff; extern cpuop_func_ce op_117c_12_nf; extern cpuop_func_ce op_117c_12_ff; extern cpuop_func_ce op_1180_12_nf; extern cpuop_func_ce op_1180_12_ff; extern cpuop_func_ce op_1190_12_nf; extern cpuop_func_ce op_1190_12_ff; extern cpuop_func_ce op_1198_12_nf; extern cpuop_func_ce op_1198_12_ff; extern cpuop_func_ce op_11a0_12_nf; extern cpuop_func_ce op_11a0_12_ff; extern cpuop_func_ce op_11a8_12_nf; extern cpuop_func_ce op_11a8_12_ff; extern cpuop_func_ce op_11b0_12_nf; extern cpuop_func_ce op_11b0_12_ff; extern cpuop_func_ce op_11b8_12_nf; extern cpuop_func_ce op_11b8_12_ff; extern cpuop_func_ce op_11b9_12_nf; extern cpuop_func_ce op_11b9_12_ff; extern cpuop_func_ce op_11ba_12_nf; extern cpuop_func_ce op_11ba_12_ff; extern cpuop_func_ce op_11bb_12_nf; extern cpuop_func_ce op_11bb_12_ff; extern cpuop_func_ce op_11bc_12_nf; extern cpuop_func_ce op_11bc_12_ff; extern cpuop_func_ce op_11c0_12_nf; extern cpuop_func_ce op_11c0_12_ff; extern cpuop_func_ce op_11d0_12_nf; extern cpuop_func_ce op_11d0_12_ff; extern cpuop_func_ce op_11d8_12_nf; extern cpuop_func_ce op_11d8_12_ff; extern cpuop_func_ce op_11e0_12_nf; extern cpuop_func_ce op_11e0_12_ff; extern cpuop_func_ce op_11e8_12_nf; extern cpuop_func_ce op_11e8_12_ff; extern cpuop_func_ce op_11f0_12_nf; extern cpuop_func_ce op_11f0_12_ff; extern cpuop_func_ce op_11f8_12_nf; extern cpuop_func_ce op_11f8_12_ff; extern cpuop_func_ce op_11f9_12_nf; extern cpuop_func_ce op_11f9_12_ff; extern cpuop_func_ce op_11fa_12_nf; extern cpuop_func_ce op_11fa_12_ff; extern cpuop_func_ce op_11fb_12_nf; extern cpuop_func_ce op_11fb_12_ff; extern cpuop_func_ce op_11fc_12_nf; extern cpuop_func_ce op_11fc_12_ff; extern cpuop_func_ce op_13c0_12_nf; extern cpuop_func_ce op_13c0_12_ff; extern cpuop_func_ce op_13d0_12_nf; extern cpuop_func_ce op_13d0_12_ff; extern cpuop_func_ce op_13d8_12_nf; extern cpuop_func_ce op_13d8_12_ff; extern cpuop_func_ce op_13e0_12_nf; extern cpuop_func_ce op_13e0_12_ff; extern cpuop_func_ce op_13e8_12_nf; extern cpuop_func_ce op_13e8_12_ff; extern cpuop_func_ce op_13f0_12_nf; extern cpuop_func_ce op_13f0_12_ff; extern cpuop_func_ce op_13f8_12_nf; extern cpuop_func_ce op_13f8_12_ff; extern cpuop_func_ce op_13f9_12_nf; extern cpuop_func_ce op_13f9_12_ff; extern cpuop_func_ce op_13fa_12_nf; extern cpuop_func_ce op_13fa_12_ff; extern cpuop_func_ce op_13fb_12_nf; extern cpuop_func_ce op_13fb_12_ff; extern cpuop_func_ce op_13fc_12_nf; extern cpuop_func_ce op_13fc_12_ff; extern cpuop_func_ce op_2000_12_nf; extern cpuop_func_ce op_2000_12_ff; extern cpuop_func_ce op_2008_12_nf; extern cpuop_func_ce op_2008_12_ff; extern cpuop_func_ce op_2010_12_nf; extern cpuop_func_ce op_2010_12_ff; extern cpuop_func_ce op_2018_12_nf; extern cpuop_func_ce op_2018_12_ff; extern cpuop_func_ce op_2020_12_nf; extern cpuop_func_ce op_2020_12_ff; extern cpuop_func_ce op_2028_12_nf; extern cpuop_func_ce op_2028_12_ff; extern cpuop_func_ce op_2030_12_nf; extern cpuop_func_ce op_2030_12_ff; extern cpuop_func_ce op_2038_12_nf; extern cpuop_func_ce op_2038_12_ff; extern cpuop_func_ce op_2039_12_nf; extern cpuop_func_ce op_2039_12_ff; extern cpuop_func_ce op_203a_12_nf; extern cpuop_func_ce op_203a_12_ff; extern cpuop_func_ce op_203b_12_nf; extern cpuop_func_ce op_203b_12_ff; extern cpuop_func_ce op_203c_12_nf; extern cpuop_func_ce op_203c_12_ff; extern cpuop_func_ce op_2040_12_nf; extern cpuop_func_ce op_2040_12_ff; extern cpuop_func_ce op_2048_12_nf; extern cpuop_func_ce op_2048_12_ff; extern cpuop_func_ce op_2050_12_nf; extern cpuop_func_ce op_2050_12_ff; extern cpuop_func_ce op_2058_12_nf; extern cpuop_func_ce op_2058_12_ff; extern cpuop_func_ce op_2060_12_nf; extern cpuop_func_ce op_2060_12_ff; extern cpuop_func_ce op_2068_12_nf; extern cpuop_func_ce op_2068_12_ff; extern cpuop_func_ce op_2070_12_nf; extern cpuop_func_ce op_2070_12_ff; extern cpuop_func_ce op_2078_12_nf; extern cpuop_func_ce op_2078_12_ff; extern cpuop_func_ce op_2079_12_nf; extern cpuop_func_ce op_2079_12_ff; extern cpuop_func_ce op_207a_12_nf; extern cpuop_func_ce op_207a_12_ff; extern cpuop_func_ce op_207b_12_nf; extern cpuop_func_ce op_207b_12_ff; extern cpuop_func_ce op_207c_12_nf; extern cpuop_func_ce op_207c_12_ff; extern cpuop_func_ce op_2080_12_nf; extern cpuop_func_ce op_2080_12_ff; extern cpuop_func_ce op_2088_12_nf; extern cpuop_func_ce op_2088_12_ff; extern cpuop_func_ce op_2090_12_nf; extern cpuop_func_ce op_2090_12_ff; extern cpuop_func_ce op_2098_12_nf; extern cpuop_func_ce op_2098_12_ff; extern cpuop_func_ce op_20a0_12_nf; extern cpuop_func_ce op_20a0_12_ff; extern cpuop_func_ce op_20a8_12_nf; extern cpuop_func_ce op_20a8_12_ff; extern cpuop_func_ce op_20b0_12_nf; extern cpuop_func_ce op_20b0_12_ff; extern cpuop_func_ce op_20b8_12_nf; extern cpuop_func_ce op_20b8_12_ff; extern cpuop_func_ce op_20b9_12_nf; extern cpuop_func_ce op_20b9_12_ff; extern cpuop_func_ce op_20ba_12_nf; extern cpuop_func_ce op_20ba_12_ff; extern cpuop_func_ce op_20bb_12_nf; extern cpuop_func_ce op_20bb_12_ff; extern cpuop_func_ce op_20bc_12_nf; extern cpuop_func_ce op_20bc_12_ff; extern cpuop_func_ce op_20c0_12_nf; extern cpuop_func_ce op_20c0_12_ff; extern cpuop_func_ce op_20c8_12_nf; extern cpuop_func_ce op_20c8_12_ff; extern cpuop_func_ce op_20d0_12_nf; extern cpuop_func_ce op_20d0_12_ff; extern cpuop_func_ce op_20d8_12_nf; extern cpuop_func_ce op_20d8_12_ff; extern cpuop_func_ce op_20e0_12_nf; extern cpuop_func_ce op_20e0_12_ff; extern cpuop_func_ce op_20e8_12_nf; extern cpuop_func_ce op_20e8_12_ff; extern cpuop_func_ce op_20f0_12_nf; extern cpuop_func_ce op_20f0_12_ff; extern cpuop_func_ce op_20f8_12_nf; extern cpuop_func_ce op_20f8_12_ff; extern cpuop_func_ce op_20f9_12_nf; extern cpuop_func_ce op_20f9_12_ff; extern cpuop_func_ce op_20fa_12_nf; extern cpuop_func_ce op_20fa_12_ff; extern cpuop_func_ce op_20fb_12_nf; extern cpuop_func_ce op_20fb_12_ff; extern cpuop_func_ce op_20fc_12_nf; extern cpuop_func_ce op_20fc_12_ff; extern cpuop_func_ce op_2100_12_nf; extern cpuop_func_ce op_2100_12_ff; extern cpuop_func_ce op_2108_12_nf; extern cpuop_func_ce op_2108_12_ff; extern cpuop_func_ce op_2110_12_nf; extern cpuop_func_ce op_2110_12_ff; extern cpuop_func_ce op_2118_12_nf; extern cpuop_func_ce op_2118_12_ff; extern cpuop_func_ce op_2120_12_nf; extern cpuop_func_ce op_2120_12_ff; extern cpuop_func_ce op_2128_12_nf; extern cpuop_func_ce op_2128_12_ff; extern cpuop_func_ce op_2130_12_nf; extern cpuop_func_ce op_2130_12_ff; extern cpuop_func_ce op_2138_12_nf; extern cpuop_func_ce op_2138_12_ff; extern cpuop_func_ce op_2139_12_nf; extern cpuop_func_ce op_2139_12_ff; extern cpuop_func_ce op_213a_12_nf; extern cpuop_func_ce op_213a_12_ff; extern cpuop_func_ce op_213b_12_nf; extern cpuop_func_ce op_213b_12_ff; extern cpuop_func_ce op_213c_12_nf; extern cpuop_func_ce op_213c_12_ff; extern cpuop_func_ce op_2140_12_nf; extern cpuop_func_ce op_2140_12_ff; extern cpuop_func_ce op_2148_12_nf; extern cpuop_func_ce op_2148_12_ff; extern cpuop_func_ce op_2150_12_nf; extern cpuop_func_ce op_2150_12_ff; extern cpuop_func_ce op_2158_12_nf; extern cpuop_func_ce op_2158_12_ff; extern cpuop_func_ce op_2160_12_nf; extern cpuop_func_ce op_2160_12_ff; extern cpuop_func_ce op_2168_12_nf; extern cpuop_func_ce op_2168_12_ff; extern cpuop_func_ce op_2170_12_nf; extern cpuop_func_ce op_2170_12_ff; extern cpuop_func_ce op_2178_12_nf; extern cpuop_func_ce op_2178_12_ff; extern cpuop_func_ce op_2179_12_nf; extern cpuop_func_ce op_2179_12_ff; extern cpuop_func_ce op_217a_12_nf; extern cpuop_func_ce op_217a_12_ff; extern cpuop_func_ce op_217b_12_nf; extern cpuop_func_ce op_217b_12_ff; extern cpuop_func_ce op_217c_12_nf; extern cpuop_func_ce op_217c_12_ff; extern cpuop_func_ce op_2180_12_nf; extern cpuop_func_ce op_2180_12_ff; extern cpuop_func_ce op_2188_12_nf; extern cpuop_func_ce op_2188_12_ff; extern cpuop_func_ce op_2190_12_nf; extern cpuop_func_ce op_2190_12_ff; extern cpuop_func_ce op_2198_12_nf; extern cpuop_func_ce op_2198_12_ff; extern cpuop_func_ce op_21a0_12_nf; extern cpuop_func_ce op_21a0_12_ff; extern cpuop_func_ce op_21a8_12_nf; extern cpuop_func_ce op_21a8_12_ff; extern cpuop_func_ce op_21b0_12_nf; extern cpuop_func_ce op_21b0_12_ff; extern cpuop_func_ce op_21b8_12_nf; extern cpuop_func_ce op_21b8_12_ff; extern cpuop_func_ce op_21b9_12_nf; extern cpuop_func_ce op_21b9_12_ff; extern cpuop_func_ce op_21ba_12_nf; extern cpuop_func_ce op_21ba_12_ff; extern cpuop_func_ce op_21bb_12_nf; extern cpuop_func_ce op_21bb_12_ff; extern cpuop_func_ce op_21bc_12_nf; extern cpuop_func_ce op_21bc_12_ff; extern cpuop_func_ce op_21c0_12_nf; extern cpuop_func_ce op_21c0_12_ff; extern cpuop_func_ce op_21c8_12_nf; extern cpuop_func_ce op_21c8_12_ff; extern cpuop_func_ce op_21d0_12_nf; extern cpuop_func_ce op_21d0_12_ff; extern cpuop_func_ce op_21d8_12_nf; extern cpuop_func_ce op_21d8_12_ff; extern cpuop_func_ce op_21e0_12_nf; extern cpuop_func_ce op_21e0_12_ff; extern cpuop_func_ce op_21e8_12_nf; extern cpuop_func_ce op_21e8_12_ff; extern cpuop_func_ce op_21f0_12_nf; extern cpuop_func_ce op_21f0_12_ff; extern cpuop_func_ce op_21f8_12_nf; extern cpuop_func_ce op_21f8_12_ff; extern cpuop_func_ce op_21f9_12_nf; extern cpuop_func_ce op_21f9_12_ff; extern cpuop_func_ce op_21fa_12_nf; extern cpuop_func_ce op_21fa_12_ff; extern cpuop_func_ce op_21fb_12_nf; extern cpuop_func_ce op_21fb_12_ff; extern cpuop_func_ce op_21fc_12_nf; extern cpuop_func_ce op_21fc_12_ff; extern cpuop_func_ce op_23c0_12_nf; extern cpuop_func_ce op_23c0_12_ff; extern cpuop_func_ce op_23c8_12_nf; extern cpuop_func_ce op_23c8_12_ff; extern cpuop_func_ce op_23d0_12_nf; extern cpuop_func_ce op_23d0_12_ff; extern cpuop_func_ce op_23d8_12_nf; extern cpuop_func_ce op_23d8_12_ff; extern cpuop_func_ce op_23e0_12_nf; extern cpuop_func_ce op_23e0_12_ff; extern cpuop_func_ce op_23e8_12_nf; extern cpuop_func_ce op_23e8_12_ff; extern cpuop_func_ce op_23f0_12_nf; extern cpuop_func_ce op_23f0_12_ff; extern cpuop_func_ce op_23f8_12_nf; extern cpuop_func_ce op_23f8_12_ff; extern cpuop_func_ce op_23f9_12_nf; extern cpuop_func_ce op_23f9_12_ff; extern cpuop_func_ce op_23fa_12_nf; extern cpuop_func_ce op_23fa_12_ff; extern cpuop_func_ce op_23fb_12_nf; extern cpuop_func_ce op_23fb_12_ff; extern cpuop_func_ce op_23fc_12_nf; extern cpuop_func_ce op_23fc_12_ff; extern cpuop_func_ce op_3000_12_nf; extern cpuop_func_ce op_3000_12_ff; extern cpuop_func_ce op_3008_12_nf; extern cpuop_func_ce op_3008_12_ff; extern cpuop_func_ce op_3010_12_nf; extern cpuop_func_ce op_3010_12_ff; extern cpuop_func_ce op_3018_12_nf; extern cpuop_func_ce op_3018_12_ff; extern cpuop_func_ce op_3020_12_nf; extern cpuop_func_ce op_3020_12_ff; extern cpuop_func_ce op_3028_12_nf; extern cpuop_func_ce op_3028_12_ff; extern cpuop_func_ce op_3030_12_nf; extern cpuop_func_ce op_3030_12_ff; extern cpuop_func_ce op_3038_12_nf; extern cpuop_func_ce op_3038_12_ff; extern cpuop_func_ce op_3039_12_nf; extern cpuop_func_ce op_3039_12_ff; extern cpuop_func_ce op_303a_12_nf; extern cpuop_func_ce op_303a_12_ff; extern cpuop_func_ce op_303b_12_nf; extern cpuop_func_ce op_303b_12_ff; extern cpuop_func_ce op_303c_12_nf; extern cpuop_func_ce op_303c_12_ff; extern cpuop_func_ce op_3040_12_nf; extern cpuop_func_ce op_3040_12_ff; extern cpuop_func_ce op_3048_12_nf; extern cpuop_func_ce op_3048_12_ff; extern cpuop_func_ce op_3050_12_nf; extern cpuop_func_ce op_3050_12_ff; extern cpuop_func_ce op_3058_12_nf; extern cpuop_func_ce op_3058_12_ff; extern cpuop_func_ce op_3060_12_nf; extern cpuop_func_ce op_3060_12_ff; extern cpuop_func_ce op_3068_12_nf; extern cpuop_func_ce op_3068_12_ff; extern cpuop_func_ce op_3070_12_nf; extern cpuop_func_ce op_3070_12_ff; extern cpuop_func_ce op_3078_12_nf; extern cpuop_func_ce op_3078_12_ff; extern cpuop_func_ce op_3079_12_nf; extern cpuop_func_ce op_3079_12_ff; extern cpuop_func_ce op_307a_12_nf; extern cpuop_func_ce op_307a_12_ff; extern cpuop_func_ce op_307b_12_nf; extern cpuop_func_ce op_307b_12_ff; extern cpuop_func_ce op_307c_12_nf; extern cpuop_func_ce op_307c_12_ff; extern cpuop_func_ce op_3080_12_nf; extern cpuop_func_ce op_3080_12_ff; extern cpuop_func_ce op_3088_12_nf; extern cpuop_func_ce op_3088_12_ff; extern cpuop_func_ce op_3090_12_nf; extern cpuop_func_ce op_3090_12_ff; extern cpuop_func_ce op_3098_12_nf; extern cpuop_func_ce op_3098_12_ff; extern cpuop_func_ce op_30a0_12_nf; extern cpuop_func_ce op_30a0_12_ff; extern cpuop_func_ce op_30a8_12_nf; extern cpuop_func_ce op_30a8_12_ff; extern cpuop_func_ce op_30b0_12_nf; extern cpuop_func_ce op_30b0_12_ff; extern cpuop_func_ce op_30b8_12_nf; extern cpuop_func_ce op_30b8_12_ff; extern cpuop_func_ce op_30b9_12_nf; extern cpuop_func_ce op_30b9_12_ff; extern cpuop_func_ce op_30ba_12_nf; extern cpuop_func_ce op_30ba_12_ff; extern cpuop_func_ce op_30bb_12_nf; extern cpuop_func_ce op_30bb_12_ff; extern cpuop_func_ce op_30bc_12_nf; extern cpuop_func_ce op_30bc_12_ff; extern cpuop_func_ce op_30c0_12_nf; extern cpuop_func_ce op_30c0_12_ff; extern cpuop_func_ce op_30c8_12_nf; extern cpuop_func_ce op_30c8_12_ff; extern cpuop_func_ce op_30d0_12_nf; extern cpuop_func_ce op_30d0_12_ff; extern cpuop_func_ce op_30d8_12_nf; extern cpuop_func_ce op_30d8_12_ff; extern cpuop_func_ce op_30e0_12_nf; extern cpuop_func_ce op_30e0_12_ff; extern cpuop_func_ce op_30e8_12_nf; extern cpuop_func_ce op_30e8_12_ff; extern cpuop_func_ce op_30f0_12_nf; extern cpuop_func_ce op_30f0_12_ff; extern cpuop_func_ce op_30f8_12_nf; extern cpuop_func_ce op_30f8_12_ff; extern cpuop_func_ce op_30f9_12_nf; extern cpuop_func_ce op_30f9_12_ff; extern cpuop_func_ce op_30fa_12_nf; extern cpuop_func_ce op_30fa_12_ff; extern cpuop_func_ce op_30fb_12_nf; extern cpuop_func_ce op_30fb_12_ff; extern cpuop_func_ce op_30fc_12_nf; extern cpuop_func_ce op_30fc_12_ff; extern cpuop_func_ce op_3100_12_nf; extern cpuop_func_ce op_3100_12_ff; extern cpuop_func_ce op_3108_12_nf; extern cpuop_func_ce op_3108_12_ff; extern cpuop_func_ce op_3110_12_nf; extern cpuop_func_ce op_3110_12_ff; extern cpuop_func_ce op_3118_12_nf; extern cpuop_func_ce op_3118_12_ff; extern cpuop_func_ce op_3120_12_nf; extern cpuop_func_ce op_3120_12_ff; extern cpuop_func_ce op_3128_12_nf; extern cpuop_func_ce op_3128_12_ff; extern cpuop_func_ce op_3130_12_nf; extern cpuop_func_ce op_3130_12_ff; extern cpuop_func_ce op_3138_12_nf; extern cpuop_func_ce op_3138_12_ff; extern cpuop_func_ce op_3139_12_nf; extern cpuop_func_ce op_3139_12_ff; extern cpuop_func_ce op_313a_12_nf; extern cpuop_func_ce op_313a_12_ff; extern cpuop_func_ce op_313b_12_nf; extern cpuop_func_ce op_313b_12_ff; extern cpuop_func_ce op_313c_12_nf; extern cpuop_func_ce op_313c_12_ff; extern cpuop_func_ce op_3140_12_nf; extern cpuop_func_ce op_3140_12_ff; extern cpuop_func_ce op_3148_12_nf; extern cpuop_func_ce op_3148_12_ff; extern cpuop_func_ce op_3150_12_nf; extern cpuop_func_ce op_3150_12_ff; extern cpuop_func_ce op_3158_12_nf; extern cpuop_func_ce op_3158_12_ff; extern cpuop_func_ce op_3160_12_nf; extern cpuop_func_ce op_3160_12_ff; extern cpuop_func_ce op_3168_12_nf; extern cpuop_func_ce op_3168_12_ff; extern cpuop_func_ce op_3170_12_nf; extern cpuop_func_ce op_3170_12_ff; extern cpuop_func_ce op_3178_12_nf; extern cpuop_func_ce op_3178_12_ff; extern cpuop_func_ce op_3179_12_nf; extern cpuop_func_ce op_3179_12_ff; extern cpuop_func_ce op_317a_12_nf; extern cpuop_func_ce op_317a_12_ff; extern cpuop_func_ce op_317b_12_nf; extern cpuop_func_ce op_317b_12_ff; extern cpuop_func_ce op_317c_12_nf; extern cpuop_func_ce op_317c_12_ff; extern cpuop_func_ce op_3180_12_nf; extern cpuop_func_ce op_3180_12_ff; extern cpuop_func_ce op_3188_12_nf; extern cpuop_func_ce op_3188_12_ff; extern cpuop_func_ce op_3190_12_nf; extern cpuop_func_ce op_3190_12_ff; extern cpuop_func_ce op_3198_12_nf; extern cpuop_func_ce op_3198_12_ff; extern cpuop_func_ce op_31a0_12_nf; extern cpuop_func_ce op_31a0_12_ff; extern cpuop_func_ce op_31a8_12_nf; extern cpuop_func_ce op_31a8_12_ff; extern cpuop_func_ce op_31b0_12_nf; extern cpuop_func_ce op_31b0_12_ff; extern cpuop_func_ce op_31b8_12_nf; extern cpuop_func_ce op_31b8_12_ff; extern cpuop_func_ce op_31b9_12_nf; extern cpuop_func_ce op_31b9_12_ff; extern cpuop_func_ce op_31ba_12_nf; extern cpuop_func_ce op_31ba_12_ff; extern cpuop_func_ce op_31bb_12_nf; extern cpuop_func_ce op_31bb_12_ff; extern cpuop_func_ce op_31bc_12_nf; extern cpuop_func_ce op_31bc_12_ff; extern cpuop_func_ce op_31c0_12_nf; extern cpuop_func_ce op_31c0_12_ff; extern cpuop_func_ce op_31c8_12_nf; extern cpuop_func_ce op_31c8_12_ff; extern cpuop_func_ce op_31d0_12_nf; extern cpuop_func_ce op_31d0_12_ff; extern cpuop_func_ce op_31d8_12_nf; extern cpuop_func_ce op_31d8_12_ff; extern cpuop_func_ce op_31e0_12_nf; extern cpuop_func_ce op_31e0_12_ff; extern cpuop_func_ce op_31e8_12_nf; extern cpuop_func_ce op_31e8_12_ff; extern cpuop_func_ce op_31f0_12_nf; extern cpuop_func_ce op_31f0_12_ff; extern cpuop_func_ce op_31f8_12_nf; extern cpuop_func_ce op_31f8_12_ff; extern cpuop_func_ce op_31f9_12_nf; extern cpuop_func_ce op_31f9_12_ff; extern cpuop_func_ce op_31fa_12_nf; extern cpuop_func_ce op_31fa_12_ff; extern cpuop_func_ce op_31fb_12_nf; extern cpuop_func_ce op_31fb_12_ff; extern cpuop_func_ce op_31fc_12_nf; extern cpuop_func_ce op_31fc_12_ff; extern cpuop_func_ce op_33c0_12_nf; extern cpuop_func_ce op_33c0_12_ff; extern cpuop_func_ce op_33c8_12_nf; extern cpuop_func_ce op_33c8_12_ff; extern cpuop_func_ce op_33d0_12_nf; extern cpuop_func_ce op_33d0_12_ff; extern cpuop_func_ce op_33d8_12_nf; extern cpuop_func_ce op_33d8_12_ff; extern cpuop_func_ce op_33e0_12_nf; extern cpuop_func_ce op_33e0_12_ff; extern cpuop_func_ce op_33e8_12_nf; extern cpuop_func_ce op_33e8_12_ff; extern cpuop_func_ce op_33f0_12_nf; extern cpuop_func_ce op_33f0_12_ff; extern cpuop_func_ce op_33f8_12_nf; extern cpuop_func_ce op_33f8_12_ff; extern cpuop_func_ce op_33f9_12_nf; extern cpuop_func_ce op_33f9_12_ff; extern cpuop_func_ce op_33fa_12_nf; extern cpuop_func_ce op_33fa_12_ff; extern cpuop_func_ce op_33fb_12_nf; extern cpuop_func_ce op_33fb_12_ff; extern cpuop_func_ce op_33fc_12_nf; extern cpuop_func_ce op_33fc_12_ff; extern cpuop_func_ce op_4000_12_nf; extern cpuop_func_ce op_4000_12_ff; extern cpuop_func_ce op_4010_12_nf; extern cpuop_func_ce op_4010_12_ff; extern cpuop_func_ce op_4018_12_nf; extern cpuop_func_ce op_4018_12_ff; extern cpuop_func_ce op_4020_12_nf; extern cpuop_func_ce op_4020_12_ff; extern cpuop_func_ce op_4028_12_nf; extern cpuop_func_ce op_4028_12_ff; extern cpuop_func_ce op_4030_12_nf; extern cpuop_func_ce op_4030_12_ff; extern cpuop_func_ce op_4038_12_nf; extern cpuop_func_ce op_4038_12_ff; extern cpuop_func_ce op_4039_12_nf; extern cpuop_func_ce op_4039_12_ff; extern cpuop_func_ce op_4040_12_nf; extern cpuop_func_ce op_4040_12_ff; extern cpuop_func_ce op_4050_12_nf; extern cpuop_func_ce op_4050_12_ff; extern cpuop_func_ce op_4058_12_nf; extern cpuop_func_ce op_4058_12_ff; extern cpuop_func_ce op_4060_12_nf; extern cpuop_func_ce op_4060_12_ff; extern cpuop_func_ce op_4068_12_nf; extern cpuop_func_ce op_4068_12_ff; extern cpuop_func_ce op_4070_12_nf; extern cpuop_func_ce op_4070_12_ff; extern cpuop_func_ce op_4078_12_nf; extern cpuop_func_ce op_4078_12_ff; extern cpuop_func_ce op_4079_12_nf; extern cpuop_func_ce op_4079_12_ff; extern cpuop_func_ce op_4080_12_nf; extern cpuop_func_ce op_4080_12_ff; extern cpuop_func_ce op_4090_12_nf; extern cpuop_func_ce op_4090_12_ff; extern cpuop_func_ce op_4098_12_nf; extern cpuop_func_ce op_4098_12_ff; extern cpuop_func_ce op_40a0_12_nf; extern cpuop_func_ce op_40a0_12_ff; extern cpuop_func_ce op_40a8_12_nf; extern cpuop_func_ce op_40a8_12_ff; extern cpuop_func_ce op_40b0_12_nf; extern cpuop_func_ce op_40b0_12_ff; extern cpuop_func_ce op_40b8_12_nf; extern cpuop_func_ce op_40b8_12_ff; extern cpuop_func_ce op_40b9_12_nf; extern cpuop_func_ce op_40b9_12_ff; extern cpuop_func_ce op_40c0_12_nf; extern cpuop_func_ce op_40c0_12_ff; extern cpuop_func_ce op_40d0_12_nf; extern cpuop_func_ce op_40d0_12_ff; extern cpuop_func_ce op_40d8_12_nf; extern cpuop_func_ce op_40d8_12_ff; extern cpuop_func_ce op_40e0_12_nf; extern cpuop_func_ce op_40e0_12_ff; extern cpuop_func_ce op_40e8_12_nf; extern cpuop_func_ce op_40e8_12_ff; extern cpuop_func_ce op_40f0_12_nf; extern cpuop_func_ce op_40f0_12_ff; extern cpuop_func_ce op_40f8_12_nf; extern cpuop_func_ce op_40f8_12_ff; extern cpuop_func_ce op_40f9_12_nf; extern cpuop_func_ce op_40f9_12_ff; extern cpuop_func_ce op_4180_12_nf; extern cpuop_func_ce op_4180_12_ff; extern cpuop_func_ce op_4190_12_nf; extern cpuop_func_ce op_4190_12_ff; extern cpuop_func_ce op_4198_12_nf; extern cpuop_func_ce op_4198_12_ff; extern cpuop_func_ce op_41a0_12_nf; extern cpuop_func_ce op_41a0_12_ff; extern cpuop_func_ce op_41a8_12_nf; extern cpuop_func_ce op_41a8_12_ff; extern cpuop_func_ce op_41b0_12_nf; extern cpuop_func_ce op_41b0_12_ff; extern cpuop_func_ce op_41b8_12_nf; extern cpuop_func_ce op_41b8_12_ff; extern cpuop_func_ce op_41b9_12_nf; extern cpuop_func_ce op_41b9_12_ff; extern cpuop_func_ce op_41ba_12_nf; extern cpuop_func_ce op_41ba_12_ff; extern cpuop_func_ce op_41bb_12_nf; extern cpuop_func_ce op_41bb_12_ff; extern cpuop_func_ce op_41bc_12_nf; extern cpuop_func_ce op_41bc_12_ff; extern cpuop_func_ce op_41d0_12_nf; extern cpuop_func_ce op_41d0_12_ff; extern cpuop_func_ce op_41e8_12_nf; extern cpuop_func_ce op_41e8_12_ff; extern cpuop_func_ce op_41f0_12_nf; extern cpuop_func_ce op_41f0_12_ff; extern cpuop_func_ce op_41f8_12_nf; extern cpuop_func_ce op_41f8_12_ff; extern cpuop_func_ce op_41f9_12_nf; extern cpuop_func_ce op_41f9_12_ff; extern cpuop_func_ce op_41fa_12_nf; extern cpuop_func_ce op_41fa_12_ff; extern cpuop_func_ce op_41fb_12_nf; extern cpuop_func_ce op_41fb_12_ff; extern cpuop_func_ce op_4200_12_nf; extern cpuop_func_ce op_4200_12_ff; extern cpuop_func_ce op_4210_12_nf; extern cpuop_func_ce op_4210_12_ff; extern cpuop_func_ce op_4218_12_nf; extern cpuop_func_ce op_4218_12_ff; extern cpuop_func_ce op_4220_12_nf; extern cpuop_func_ce op_4220_12_ff; extern cpuop_func_ce op_4228_12_nf; extern cpuop_func_ce op_4228_12_ff; extern cpuop_func_ce op_4230_12_nf; extern cpuop_func_ce op_4230_12_ff; extern cpuop_func_ce op_4238_12_nf; extern cpuop_func_ce op_4238_12_ff; extern cpuop_func_ce op_4239_12_nf; extern cpuop_func_ce op_4239_12_ff; extern cpuop_func_ce op_4240_12_nf; extern cpuop_func_ce op_4240_12_ff; extern cpuop_func_ce op_4250_12_nf; extern cpuop_func_ce op_4250_12_ff; extern cpuop_func_ce op_4258_12_nf; extern cpuop_func_ce op_4258_12_ff; extern cpuop_func_ce op_4260_12_nf; extern cpuop_func_ce op_4260_12_ff; extern cpuop_func_ce op_4268_12_nf; extern cpuop_func_ce op_4268_12_ff; extern cpuop_func_ce op_4270_12_nf; extern cpuop_func_ce op_4270_12_ff; extern cpuop_func_ce op_4278_12_nf; extern cpuop_func_ce op_4278_12_ff; extern cpuop_func_ce op_4279_12_nf; extern cpuop_func_ce op_4279_12_ff; extern cpuop_func_ce op_4280_12_nf; extern cpuop_func_ce op_4280_12_ff; extern cpuop_func_ce op_4290_12_nf; extern cpuop_func_ce op_4290_12_ff; extern cpuop_func_ce op_4298_12_nf; extern cpuop_func_ce op_4298_12_ff; extern cpuop_func_ce op_42a0_12_nf; extern cpuop_func_ce op_42a0_12_ff; extern cpuop_func_ce op_42a8_12_nf; extern cpuop_func_ce op_42a8_12_ff; extern cpuop_func_ce op_42b0_12_nf; extern cpuop_func_ce op_42b0_12_ff; extern cpuop_func_ce op_42b8_12_nf; extern cpuop_func_ce op_42b8_12_ff; extern cpuop_func_ce op_42b9_12_nf; extern cpuop_func_ce op_42b9_12_ff; extern cpuop_func_ce op_4400_12_nf; extern cpuop_func_ce op_4400_12_ff; extern cpuop_func_ce op_4410_12_nf; extern cpuop_func_ce op_4410_12_ff; extern cpuop_func_ce op_4418_12_nf; extern cpuop_func_ce op_4418_12_ff; extern cpuop_func_ce op_4420_12_nf; extern cpuop_func_ce op_4420_12_ff; extern cpuop_func_ce op_4428_12_nf; extern cpuop_func_ce op_4428_12_ff; extern cpuop_func_ce op_4430_12_nf; extern cpuop_func_ce op_4430_12_ff; extern cpuop_func_ce op_4438_12_nf; extern cpuop_func_ce op_4438_12_ff; extern cpuop_func_ce op_4439_12_nf; extern cpuop_func_ce op_4439_12_ff; extern cpuop_func_ce op_4440_12_nf; extern cpuop_func_ce op_4440_12_ff; extern cpuop_func_ce op_4450_12_nf; extern cpuop_func_ce op_4450_12_ff; extern cpuop_func_ce op_4458_12_nf; extern cpuop_func_ce op_4458_12_ff; extern cpuop_func_ce op_4460_12_nf; extern cpuop_func_ce op_4460_12_ff; extern cpuop_func_ce op_4468_12_nf; extern cpuop_func_ce op_4468_12_ff; extern cpuop_func_ce op_4470_12_nf; extern cpuop_func_ce op_4470_12_ff; extern cpuop_func_ce op_4478_12_nf; extern cpuop_func_ce op_4478_12_ff; extern cpuop_func_ce op_4479_12_nf; extern cpuop_func_ce op_4479_12_ff; extern cpuop_func_ce op_4480_12_nf; extern cpuop_func_ce op_4480_12_ff; extern cpuop_func_ce op_4490_12_nf; extern cpuop_func_ce op_4490_12_ff; extern cpuop_func_ce op_4498_12_nf; extern cpuop_func_ce op_4498_12_ff; extern cpuop_func_ce op_44a0_12_nf; extern cpuop_func_ce op_44a0_12_ff; extern cpuop_func_ce op_44a8_12_nf; extern cpuop_func_ce op_44a8_12_ff; extern cpuop_func_ce op_44b0_12_nf; extern cpuop_func_ce op_44b0_12_ff; extern cpuop_func_ce op_44b8_12_nf; extern cpuop_func_ce op_44b8_12_ff; extern cpuop_func_ce op_44b9_12_nf; extern cpuop_func_ce op_44b9_12_ff; extern cpuop_func_ce op_44c0_12_nf; extern cpuop_func_ce op_44c0_12_ff; extern cpuop_func_ce op_44d0_12_nf; extern cpuop_func_ce op_44d0_12_ff; extern cpuop_func_ce op_44d8_12_nf; extern cpuop_func_ce op_44d8_12_ff; extern cpuop_func_ce op_44e0_12_nf; extern cpuop_func_ce op_44e0_12_ff; extern cpuop_func_ce op_44e8_12_nf; extern cpuop_func_ce op_44e8_12_ff; extern cpuop_func_ce op_44f0_12_nf; extern cpuop_func_ce op_44f0_12_ff; extern cpuop_func_ce op_44f8_12_nf; extern cpuop_func_ce op_44f8_12_ff; extern cpuop_func_ce op_44f9_12_nf; extern cpuop_func_ce op_44f9_12_ff; extern cpuop_func_ce op_44fa_12_nf; extern cpuop_func_ce op_44fa_12_ff; extern cpuop_func_ce op_44fb_12_nf; extern cpuop_func_ce op_44fb_12_ff; extern cpuop_func_ce op_44fc_12_nf; extern cpuop_func_ce op_44fc_12_ff; extern cpuop_func_ce op_4600_12_nf; extern cpuop_func_ce op_4600_12_ff; extern cpuop_func_ce op_4610_12_nf; extern cpuop_func_ce op_4610_12_ff; extern cpuop_func_ce op_4618_12_nf; extern cpuop_func_ce op_4618_12_ff; extern cpuop_func_ce op_4620_12_nf; extern cpuop_func_ce op_4620_12_ff; extern cpuop_func_ce op_4628_12_nf; extern cpuop_func_ce op_4628_12_ff; extern cpuop_func_ce op_4630_12_nf; extern cpuop_func_ce op_4630_12_ff; extern cpuop_func_ce op_4638_12_nf; extern cpuop_func_ce op_4638_12_ff; extern cpuop_func_ce op_4639_12_nf; extern cpuop_func_ce op_4639_12_ff; extern cpuop_func_ce op_4640_12_nf; extern cpuop_func_ce op_4640_12_ff; extern cpuop_func_ce op_4650_12_nf; extern cpuop_func_ce op_4650_12_ff; extern cpuop_func_ce op_4658_12_nf; extern cpuop_func_ce op_4658_12_ff; extern cpuop_func_ce op_4660_12_nf; extern cpuop_func_ce op_4660_12_ff; extern cpuop_func_ce op_4668_12_nf; extern cpuop_func_ce op_4668_12_ff; extern cpuop_func_ce op_4670_12_nf; extern cpuop_func_ce op_4670_12_ff; extern cpuop_func_ce op_4678_12_nf; extern cpuop_func_ce op_4678_12_ff; extern cpuop_func_ce op_4679_12_nf; extern cpuop_func_ce op_4679_12_ff; extern cpuop_func_ce op_4680_12_nf; extern cpuop_func_ce op_4680_12_ff; extern cpuop_func_ce op_4690_12_nf; extern cpuop_func_ce op_4690_12_ff; extern cpuop_func_ce op_4698_12_nf; extern cpuop_func_ce op_4698_12_ff; extern cpuop_func_ce op_46a0_12_nf; extern cpuop_func_ce op_46a0_12_ff; extern cpuop_func_ce op_46a8_12_nf; extern cpuop_func_ce op_46a8_12_ff; extern cpuop_func_ce op_46b0_12_nf; extern cpuop_func_ce op_46b0_12_ff; extern cpuop_func_ce op_46b8_12_nf; extern cpuop_func_ce op_46b8_12_ff; extern cpuop_func_ce op_46b9_12_nf; extern cpuop_func_ce op_46b9_12_ff; extern cpuop_func_ce op_46c0_12_nf; extern cpuop_func_ce op_46c0_12_ff; extern cpuop_func_ce op_46d0_12_nf; extern cpuop_func_ce op_46d0_12_ff; extern cpuop_func_ce op_46d8_12_nf; extern cpuop_func_ce op_46d8_12_ff; extern cpuop_func_ce op_46e0_12_nf; extern cpuop_func_ce op_46e0_12_ff; extern cpuop_func_ce op_46e8_12_nf; extern cpuop_func_ce op_46e8_12_ff; extern cpuop_func_ce op_46f0_12_nf; extern cpuop_func_ce op_46f0_12_ff; extern cpuop_func_ce op_46f8_12_nf; extern cpuop_func_ce op_46f8_12_ff; extern cpuop_func_ce op_46f9_12_nf; extern cpuop_func_ce op_46f9_12_ff; extern cpuop_func_ce op_46fa_12_nf; extern cpuop_func_ce op_46fa_12_ff; extern cpuop_func_ce op_46fb_12_nf; extern cpuop_func_ce op_46fb_12_ff; extern cpuop_func_ce op_46fc_12_nf; extern cpuop_func_ce op_46fc_12_ff; extern cpuop_func_ce op_4800_12_nf; extern cpuop_func_ce op_4800_12_ff; extern cpuop_func_ce op_4810_12_nf; extern cpuop_func_ce op_4810_12_ff; extern cpuop_func_ce op_4818_12_nf; extern cpuop_func_ce op_4818_12_ff; extern cpuop_func_ce op_4820_12_nf; extern cpuop_func_ce op_4820_12_ff; extern cpuop_func_ce op_4828_12_nf; extern cpuop_func_ce op_4828_12_ff; extern cpuop_func_ce op_4830_12_nf; extern cpuop_func_ce op_4830_12_ff; extern cpuop_func_ce op_4838_12_nf; extern cpuop_func_ce op_4838_12_ff; extern cpuop_func_ce op_4839_12_nf; extern cpuop_func_ce op_4839_12_ff; extern cpuop_func_ce op_4840_12_nf; extern cpuop_func_ce op_4840_12_ff; extern cpuop_func_ce op_4850_12_nf; extern cpuop_func_ce op_4850_12_ff; extern cpuop_func_ce op_4868_12_nf; extern cpuop_func_ce op_4868_12_ff; extern cpuop_func_ce op_4870_12_nf; extern cpuop_func_ce op_4870_12_ff; extern cpuop_func_ce op_4878_12_nf; extern cpuop_func_ce op_4878_12_ff; extern cpuop_func_ce op_4879_12_nf; extern cpuop_func_ce op_4879_12_ff; extern cpuop_func_ce op_487a_12_nf; extern cpuop_func_ce op_487a_12_ff; extern cpuop_func_ce op_487b_12_nf; extern cpuop_func_ce op_487b_12_ff; extern cpuop_func_ce op_4880_12_nf; extern cpuop_func_ce op_4880_12_ff; extern cpuop_func_ce op_4890_12_nf; extern cpuop_func_ce op_4890_12_ff; extern cpuop_func_ce op_48a0_12_nf; extern cpuop_func_ce op_48a0_12_ff; extern cpuop_func_ce op_48a8_12_nf; extern cpuop_func_ce op_48a8_12_ff; extern cpuop_func_ce op_48b0_12_nf; extern cpuop_func_ce op_48b0_12_ff; extern cpuop_func_ce op_48b8_12_nf; extern cpuop_func_ce op_48b8_12_ff; extern cpuop_func_ce op_48b9_12_nf; extern cpuop_func_ce op_48b9_12_ff; extern cpuop_func_ce op_48c0_12_nf; extern cpuop_func_ce op_48c0_12_ff; extern cpuop_func_ce op_48d0_12_nf; extern cpuop_func_ce op_48d0_12_ff; extern cpuop_func_ce op_48e0_12_nf; extern cpuop_func_ce op_48e0_12_ff; extern cpuop_func_ce op_48e8_12_nf; extern cpuop_func_ce op_48e8_12_ff; extern cpuop_func_ce op_48f0_12_nf; extern cpuop_func_ce op_48f0_12_ff; extern cpuop_func_ce op_48f8_12_nf; extern cpuop_func_ce op_48f8_12_ff; extern cpuop_func_ce op_48f9_12_nf; extern cpuop_func_ce op_48f9_12_ff; extern cpuop_func_ce op_4a00_12_nf; extern cpuop_func_ce op_4a00_12_ff; extern cpuop_func_ce op_4a10_12_nf; extern cpuop_func_ce op_4a10_12_ff; extern cpuop_func_ce op_4a18_12_nf; extern cpuop_func_ce op_4a18_12_ff; extern cpuop_func_ce op_4a20_12_nf; extern cpuop_func_ce op_4a20_12_ff; extern cpuop_func_ce op_4a28_12_nf; extern cpuop_func_ce op_4a28_12_ff; extern cpuop_func_ce op_4a30_12_nf; extern cpuop_func_ce op_4a30_12_ff; extern cpuop_func_ce op_4a38_12_nf; extern cpuop_func_ce op_4a38_12_ff; extern cpuop_func_ce op_4a39_12_nf; extern cpuop_func_ce op_4a39_12_ff; extern cpuop_func_ce op_4a3c_12_nf; extern cpuop_func_ce op_4a3c_12_ff; extern cpuop_func_ce op_4a40_12_nf; extern cpuop_func_ce op_4a40_12_ff; extern cpuop_func_ce op_4a50_12_nf; extern cpuop_func_ce op_4a50_12_ff; extern cpuop_func_ce op_4a58_12_nf; extern cpuop_func_ce op_4a58_12_ff; extern cpuop_func_ce op_4a60_12_nf; extern cpuop_func_ce op_4a60_12_ff; extern cpuop_func_ce op_4a68_12_nf; extern cpuop_func_ce op_4a68_12_ff; extern cpuop_func_ce op_4a70_12_nf; extern cpuop_func_ce op_4a70_12_ff; extern cpuop_func_ce op_4a78_12_nf; extern cpuop_func_ce op_4a78_12_ff; extern cpuop_func_ce op_4a79_12_nf; extern cpuop_func_ce op_4a79_12_ff; extern cpuop_func_ce op_4a7c_12_nf; extern cpuop_func_ce op_4a7c_12_ff; extern cpuop_func_ce op_4a80_12_nf; extern cpuop_func_ce op_4a80_12_ff; extern cpuop_func_ce op_4a90_12_nf; extern cpuop_func_ce op_4a90_12_ff; extern cpuop_func_ce op_4a98_12_nf; extern cpuop_func_ce op_4a98_12_ff; extern cpuop_func_ce op_4aa0_12_nf; extern cpuop_func_ce op_4aa0_12_ff; extern cpuop_func_ce op_4aa8_12_nf; extern cpuop_func_ce op_4aa8_12_ff; extern cpuop_func_ce op_4ab0_12_nf; extern cpuop_func_ce op_4ab0_12_ff; extern cpuop_func_ce op_4ab8_12_nf; extern cpuop_func_ce op_4ab8_12_ff; extern cpuop_func_ce op_4ab9_12_nf; extern cpuop_func_ce op_4ab9_12_ff; extern cpuop_func_ce op_4abc_12_nf; extern cpuop_func_ce op_4abc_12_ff; extern cpuop_func_ce op_4ac0_12_nf; extern cpuop_func_ce op_4ac0_12_ff; extern cpuop_func_ce op_4ad0_12_nf; extern cpuop_func_ce op_4ad0_12_ff; extern cpuop_func_ce op_4ad8_12_nf; extern cpuop_func_ce op_4ad8_12_ff; extern cpuop_func_ce op_4ae0_12_nf; extern cpuop_func_ce op_4ae0_12_ff; extern cpuop_func_ce op_4ae8_12_nf; extern cpuop_func_ce op_4ae8_12_ff; extern cpuop_func_ce op_4af0_12_nf; extern cpuop_func_ce op_4af0_12_ff; extern cpuop_func_ce op_4af8_12_nf; extern cpuop_func_ce op_4af8_12_ff; extern cpuop_func_ce op_4af9_12_nf; extern cpuop_func_ce op_4af9_12_ff; extern cpuop_func_ce op_4c90_12_nf; extern cpuop_func_ce op_4c90_12_ff; extern cpuop_func_ce op_4c98_12_nf; extern cpuop_func_ce op_4c98_12_ff; extern cpuop_func_ce op_4ca8_12_nf; extern cpuop_func_ce op_4ca8_12_ff; extern cpuop_func_ce op_4cb0_12_nf; extern cpuop_func_ce op_4cb0_12_ff; extern cpuop_func_ce op_4cb8_12_nf; extern cpuop_func_ce op_4cb8_12_ff; extern cpuop_func_ce op_4cb9_12_nf; extern cpuop_func_ce op_4cb9_12_ff; extern cpuop_func_ce op_4cba_12_nf; extern cpuop_func_ce op_4cba_12_ff; extern cpuop_func_ce op_4cbb_12_nf; extern cpuop_func_ce op_4cbb_12_ff; extern cpuop_func_ce op_4cd0_12_nf; extern cpuop_func_ce op_4cd0_12_ff; extern cpuop_func_ce op_4cd8_12_nf; extern cpuop_func_ce op_4cd8_12_ff; extern cpuop_func_ce op_4ce8_12_nf; extern cpuop_func_ce op_4ce8_12_ff; extern cpuop_func_ce op_4cf0_12_nf; extern cpuop_func_ce op_4cf0_12_ff; extern cpuop_func_ce op_4cf8_12_nf; extern cpuop_func_ce op_4cf8_12_ff; extern cpuop_func_ce op_4cf9_12_nf; extern cpuop_func_ce op_4cf9_12_ff; extern cpuop_func_ce op_4cfa_12_nf; extern cpuop_func_ce op_4cfa_12_ff; extern cpuop_func_ce op_4cfb_12_nf; extern cpuop_func_ce op_4cfb_12_ff; extern cpuop_func_ce op_4e40_12_nf; extern cpuop_func_ce op_4e40_12_ff; extern cpuop_func_ce op_4e50_12_nf; extern cpuop_func_ce op_4e50_12_ff; extern cpuop_func_ce op_4e58_12_nf; extern cpuop_func_ce op_4e58_12_ff; extern cpuop_func_ce op_4e60_12_nf; extern cpuop_func_ce op_4e60_12_ff; extern cpuop_func_ce op_4e68_12_nf; extern cpuop_func_ce op_4e68_12_ff; extern cpuop_func_ce op_4e70_12_nf; extern cpuop_func_ce op_4e70_12_ff; extern cpuop_func_ce op_4e71_12_nf; extern cpuop_func_ce op_4e71_12_ff; extern cpuop_func_ce op_4e72_12_nf; extern cpuop_func_ce op_4e72_12_ff; extern cpuop_func_ce op_4e73_12_nf; extern cpuop_func_ce op_4e73_12_ff; extern cpuop_func_ce op_4e74_12_nf; extern cpuop_func_ce op_4e74_12_ff; extern cpuop_func_ce op_4e75_12_nf; extern cpuop_func_ce op_4e75_12_ff; extern cpuop_func_ce op_4e76_12_nf; extern cpuop_func_ce op_4e76_12_ff; extern cpuop_func_ce op_4e77_12_nf; extern cpuop_func_ce op_4e77_12_ff; extern cpuop_func_ce op_4e90_12_nf; extern cpuop_func_ce op_4e90_12_ff; extern cpuop_func_ce op_4ea8_12_nf; extern cpuop_func_ce op_4ea8_12_ff; extern cpuop_func_ce op_4eb0_12_nf; extern cpuop_func_ce op_4eb0_12_ff; extern cpuop_func_ce op_4eb8_12_nf; extern cpuop_func_ce op_4eb8_12_ff; extern cpuop_func_ce op_4eb9_12_nf; extern cpuop_func_ce op_4eb9_12_ff; extern cpuop_func_ce op_4eba_12_nf; extern cpuop_func_ce op_4eba_12_ff; extern cpuop_func_ce op_4ebb_12_nf; extern cpuop_func_ce op_4ebb_12_ff; extern cpuop_func_ce op_4ed0_12_nf; extern cpuop_func_ce op_4ed0_12_ff; extern cpuop_func_ce op_4ee8_12_nf; extern cpuop_func_ce op_4ee8_12_ff; extern cpuop_func_ce op_4ef0_12_nf; extern cpuop_func_ce op_4ef0_12_ff; extern cpuop_func_ce op_4ef8_12_nf; extern cpuop_func_ce op_4ef8_12_ff; extern cpuop_func_ce op_4ef9_12_nf; extern cpuop_func_ce op_4ef9_12_ff; extern cpuop_func_ce op_4efa_12_nf; extern cpuop_func_ce op_4efa_12_ff; extern cpuop_func_ce op_4efb_12_nf; extern cpuop_func_ce op_4efb_12_ff; extern cpuop_func_ce op_5000_12_nf; extern cpuop_func_ce op_5000_12_ff; extern cpuop_func_ce op_5010_12_nf; extern cpuop_func_ce op_5010_12_ff; extern cpuop_func_ce op_5018_12_nf; extern cpuop_func_ce op_5018_12_ff; extern cpuop_func_ce op_5020_12_nf; extern cpuop_func_ce op_5020_12_ff; extern cpuop_func_ce op_5028_12_nf; extern cpuop_func_ce op_5028_12_ff; extern cpuop_func_ce op_5030_12_nf; extern cpuop_func_ce op_5030_12_ff; extern cpuop_func_ce op_5038_12_nf; extern cpuop_func_ce op_5038_12_ff; extern cpuop_func_ce op_5039_12_nf; extern cpuop_func_ce op_5039_12_ff; extern cpuop_func_ce op_5040_12_nf; extern cpuop_func_ce op_5040_12_ff; extern cpuop_func_ce op_5048_12_nf; extern cpuop_func_ce op_5048_12_ff; extern cpuop_func_ce op_5050_12_nf; extern cpuop_func_ce op_5050_12_ff; extern cpuop_func_ce op_5058_12_nf; extern cpuop_func_ce op_5058_12_ff; extern cpuop_func_ce op_5060_12_nf; extern cpuop_func_ce op_5060_12_ff; extern cpuop_func_ce op_5068_12_nf; extern cpuop_func_ce op_5068_12_ff; extern cpuop_func_ce op_5070_12_nf; extern cpuop_func_ce op_5070_12_ff; extern cpuop_func_ce op_5078_12_nf; extern cpuop_func_ce op_5078_12_ff; extern cpuop_func_ce op_5079_12_nf; extern cpuop_func_ce op_5079_12_ff; extern cpuop_func_ce op_5080_12_nf; extern cpuop_func_ce op_5080_12_ff; extern cpuop_func_ce op_5088_12_nf; extern cpuop_func_ce op_5088_12_ff; extern cpuop_func_ce op_5090_12_nf; extern cpuop_func_ce op_5090_12_ff; extern cpuop_func_ce op_5098_12_nf; extern cpuop_func_ce op_5098_12_ff; extern cpuop_func_ce op_50a0_12_nf; extern cpuop_func_ce op_50a0_12_ff; extern cpuop_func_ce op_50a8_12_nf; extern cpuop_func_ce op_50a8_12_ff; extern cpuop_func_ce op_50b0_12_nf; extern cpuop_func_ce op_50b0_12_ff; extern cpuop_func_ce op_50b8_12_nf; extern cpuop_func_ce op_50b8_12_ff; extern cpuop_func_ce op_50b9_12_nf; extern cpuop_func_ce op_50b9_12_ff; extern cpuop_func_ce op_50c0_12_nf; extern cpuop_func_ce op_50c0_12_ff; extern cpuop_func_ce op_50c8_12_nf; extern cpuop_func_ce op_50c8_12_ff; extern cpuop_func_ce op_50d0_12_nf; extern cpuop_func_ce op_50d0_12_ff; extern cpuop_func_ce op_50d8_12_nf; extern cpuop_func_ce op_50d8_12_ff; extern cpuop_func_ce op_50e0_12_nf; extern cpuop_func_ce op_50e0_12_ff; extern cpuop_func_ce op_50e8_12_nf; extern cpuop_func_ce op_50e8_12_ff; extern cpuop_func_ce op_50f0_12_nf; extern cpuop_func_ce op_50f0_12_ff; extern cpuop_func_ce op_50f8_12_nf; extern cpuop_func_ce op_50f8_12_ff; extern cpuop_func_ce op_50f9_12_nf; extern cpuop_func_ce op_50f9_12_ff; extern cpuop_func_ce op_5100_12_nf; extern cpuop_func_ce op_5100_12_ff; extern cpuop_func_ce op_5110_12_nf; extern cpuop_func_ce op_5110_12_ff; extern cpuop_func_ce op_5118_12_nf; extern cpuop_func_ce op_5118_12_ff; extern cpuop_func_ce op_5120_12_nf; extern cpuop_func_ce op_5120_12_ff; extern cpuop_func_ce op_5128_12_nf; extern cpuop_func_ce op_5128_12_ff; extern cpuop_func_ce op_5130_12_nf; extern cpuop_func_ce op_5130_12_ff; extern cpuop_func_ce op_5138_12_nf; extern cpuop_func_ce op_5138_12_ff; extern cpuop_func_ce op_5139_12_nf; extern cpuop_func_ce op_5139_12_ff; extern cpuop_func_ce op_5140_12_nf; extern cpuop_func_ce op_5140_12_ff; extern cpuop_func_ce op_5148_12_nf; extern cpuop_func_ce op_5148_12_ff; extern cpuop_func_ce op_5150_12_nf; extern cpuop_func_ce op_5150_12_ff; extern cpuop_func_ce op_5158_12_nf; extern cpuop_func_ce op_5158_12_ff; extern cpuop_func_ce op_5160_12_nf; extern cpuop_func_ce op_5160_12_ff; extern cpuop_func_ce op_5168_12_nf; extern cpuop_func_ce op_5168_12_ff; extern cpuop_func_ce op_5170_12_nf; extern cpuop_func_ce op_5170_12_ff; extern cpuop_func_ce op_5178_12_nf; extern cpuop_func_ce op_5178_12_ff; extern cpuop_func_ce op_5179_12_nf; extern cpuop_func_ce op_5179_12_ff; extern cpuop_func_ce op_5180_12_nf; extern cpuop_func_ce op_5180_12_ff; extern cpuop_func_ce op_5188_12_nf; extern cpuop_func_ce op_5188_12_ff; extern cpuop_func_ce op_5190_12_nf; extern cpuop_func_ce op_5190_12_ff; extern cpuop_func_ce op_5198_12_nf; extern cpuop_func_ce op_5198_12_ff; extern cpuop_func_ce op_51a0_12_nf; extern cpuop_func_ce op_51a0_12_ff; extern cpuop_func_ce op_51a8_12_nf; extern cpuop_func_ce op_51a8_12_ff; extern cpuop_func_ce op_51b0_12_nf; extern cpuop_func_ce op_51b0_12_ff; extern cpuop_func_ce op_51b8_12_nf; extern cpuop_func_ce op_51b8_12_ff; extern cpuop_func_ce op_51b9_12_nf; extern cpuop_func_ce op_51b9_12_ff; extern cpuop_func_ce op_51c0_12_nf; extern cpuop_func_ce op_51c0_12_ff; extern cpuop_func_ce op_51c8_12_nf; extern cpuop_func_ce op_51c8_12_ff; extern cpuop_func_ce op_51d0_12_nf; extern cpuop_func_ce op_51d0_12_ff; extern cpuop_func_ce op_51d8_12_nf; extern cpuop_func_ce op_51d8_12_ff; extern cpuop_func_ce op_51e0_12_nf; extern cpuop_func_ce op_51e0_12_ff; extern cpuop_func_ce op_51e8_12_nf; extern cpuop_func_ce op_51e8_12_ff; extern cpuop_func_ce op_51f0_12_nf; extern cpuop_func_ce op_51f0_12_ff; extern cpuop_func_ce op_51f8_12_nf; extern cpuop_func_ce op_51f8_12_ff; extern cpuop_func_ce op_51f9_12_nf; extern cpuop_func_ce op_51f9_12_ff; extern cpuop_func_ce op_52c0_12_nf; extern cpuop_func_ce op_52c0_12_ff; extern cpuop_func_ce op_52c8_12_nf; extern cpuop_func_ce op_52c8_12_ff; extern cpuop_func_ce op_52d0_12_nf; extern cpuop_func_ce op_52d0_12_ff; extern cpuop_func_ce op_52d8_12_nf; extern cpuop_func_ce op_52d8_12_ff; extern cpuop_func_ce op_52e0_12_nf; extern cpuop_func_ce op_52e0_12_ff; extern cpuop_func_ce op_52e8_12_nf; extern cpuop_func_ce op_52e8_12_ff; extern cpuop_func_ce op_52f0_12_nf; extern cpuop_func_ce op_52f0_12_ff; extern cpuop_func_ce op_52f8_12_nf; extern cpuop_func_ce op_52f8_12_ff; extern cpuop_func_ce op_52f9_12_nf; extern cpuop_func_ce op_52f9_12_ff; extern cpuop_func_ce op_53c0_12_nf; extern cpuop_func_ce op_53c0_12_ff; extern cpuop_func_ce op_53c8_12_nf; extern cpuop_func_ce op_53c8_12_ff; extern cpuop_func_ce op_53d0_12_nf; extern cpuop_func_ce op_53d0_12_ff; extern cpuop_func_ce op_53d8_12_nf; extern cpuop_func_ce op_53d8_12_ff; extern cpuop_func_ce op_53e0_12_nf; extern cpuop_func_ce op_53e0_12_ff; extern cpuop_func_ce op_53e8_12_nf; extern cpuop_func_ce op_53e8_12_ff; extern cpuop_func_ce op_53f0_12_nf; extern cpuop_func_ce op_53f0_12_ff; extern cpuop_func_ce op_53f8_12_nf; extern cpuop_func_ce op_53f8_12_ff; extern cpuop_func_ce op_53f9_12_nf; extern cpuop_func_ce op_53f9_12_ff; extern cpuop_func_ce op_54c0_12_nf; extern cpuop_func_ce op_54c0_12_ff; extern cpuop_func_ce op_54c8_12_nf; extern cpuop_func_ce op_54c8_12_ff; extern cpuop_func_ce op_54d0_12_nf; extern cpuop_func_ce op_54d0_12_ff; extern cpuop_func_ce op_54d8_12_nf; extern cpuop_func_ce op_54d8_12_ff; extern cpuop_func_ce op_54e0_12_nf; extern cpuop_func_ce op_54e0_12_ff; extern cpuop_func_ce op_54e8_12_nf; extern cpuop_func_ce op_54e8_12_ff; extern cpuop_func_ce op_54f0_12_nf; extern cpuop_func_ce op_54f0_12_ff; extern cpuop_func_ce op_54f8_12_nf; extern cpuop_func_ce op_54f8_12_ff; extern cpuop_func_ce op_54f9_12_nf; extern cpuop_func_ce op_54f9_12_ff; extern cpuop_func_ce op_55c0_12_nf; extern cpuop_func_ce op_55c0_12_ff; extern cpuop_func_ce op_55c8_12_nf; extern cpuop_func_ce op_55c8_12_ff; extern cpuop_func_ce op_55d0_12_nf; extern cpuop_func_ce op_55d0_12_ff; extern cpuop_func_ce op_55d8_12_nf; extern cpuop_func_ce op_55d8_12_ff; extern cpuop_func_ce op_55e0_12_nf; extern cpuop_func_ce op_55e0_12_ff; extern cpuop_func_ce op_55e8_12_nf; extern cpuop_func_ce op_55e8_12_ff; extern cpuop_func_ce op_55f0_12_nf; extern cpuop_func_ce op_55f0_12_ff; extern cpuop_func_ce op_55f8_12_nf; extern cpuop_func_ce op_55f8_12_ff; extern cpuop_func_ce op_55f9_12_nf; extern cpuop_func_ce op_55f9_12_ff; extern cpuop_func_ce op_56c0_12_nf; extern cpuop_func_ce op_56c0_12_ff; extern cpuop_func_ce op_56c8_12_nf; extern cpuop_func_ce op_56c8_12_ff; extern cpuop_func_ce op_56d0_12_nf; extern cpuop_func_ce op_56d0_12_ff; extern cpuop_func_ce op_56d8_12_nf; extern cpuop_func_ce op_56d8_12_ff; extern cpuop_func_ce op_56e0_12_nf; extern cpuop_func_ce op_56e0_12_ff; extern cpuop_func_ce op_56e8_12_nf; extern cpuop_func_ce op_56e8_12_ff; extern cpuop_func_ce op_56f0_12_nf; extern cpuop_func_ce op_56f0_12_ff; extern cpuop_func_ce op_56f8_12_nf; extern cpuop_func_ce op_56f8_12_ff; extern cpuop_func_ce op_56f9_12_nf; extern cpuop_func_ce op_56f9_12_ff; extern cpuop_func_ce op_57c0_12_nf; extern cpuop_func_ce op_57c0_12_ff; extern cpuop_func_ce op_57c8_12_nf; extern cpuop_func_ce op_57c8_12_ff; extern cpuop_func_ce op_57d0_12_nf; extern cpuop_func_ce op_57d0_12_ff; extern cpuop_func_ce op_57d8_12_nf; extern cpuop_func_ce op_57d8_12_ff; extern cpuop_func_ce op_57e0_12_nf; extern cpuop_func_ce op_57e0_12_ff; extern cpuop_func_ce op_57e8_12_nf; extern cpuop_func_ce op_57e8_12_ff; extern cpuop_func_ce op_57f0_12_nf; extern cpuop_func_ce op_57f0_12_ff; extern cpuop_func_ce op_57f8_12_nf; extern cpuop_func_ce op_57f8_12_ff; extern cpuop_func_ce op_57f9_12_nf; extern cpuop_func_ce op_57f9_12_ff; extern cpuop_func_ce op_58c0_12_nf; extern cpuop_func_ce op_58c0_12_ff; extern cpuop_func_ce op_58c8_12_nf; extern cpuop_func_ce op_58c8_12_ff; extern cpuop_func_ce op_58d0_12_nf; extern cpuop_func_ce op_58d0_12_ff; extern cpuop_func_ce op_58d8_12_nf; extern cpuop_func_ce op_58d8_12_ff; extern cpuop_func_ce op_58e0_12_nf; extern cpuop_func_ce op_58e0_12_ff; extern cpuop_func_ce op_58e8_12_nf; extern cpuop_func_ce op_58e8_12_ff; extern cpuop_func_ce op_58f0_12_nf; extern cpuop_func_ce op_58f0_12_ff; extern cpuop_func_ce op_58f8_12_nf; extern cpuop_func_ce op_58f8_12_ff; extern cpuop_func_ce op_58f9_12_nf; extern cpuop_func_ce op_58f9_12_ff; extern cpuop_func_ce op_59c0_12_nf; extern cpuop_func_ce op_59c0_12_ff; extern cpuop_func_ce op_59c8_12_nf; extern cpuop_func_ce op_59c8_12_ff; extern cpuop_func_ce op_59d0_12_nf; extern cpuop_func_ce op_59d0_12_ff; extern cpuop_func_ce op_59d8_12_nf; extern cpuop_func_ce op_59d8_12_ff; extern cpuop_func_ce op_59e0_12_nf; extern cpuop_func_ce op_59e0_12_ff; extern cpuop_func_ce op_59e8_12_nf; extern cpuop_func_ce op_59e8_12_ff; extern cpuop_func_ce op_59f0_12_nf; extern cpuop_func_ce op_59f0_12_ff; extern cpuop_func_ce op_59f8_12_nf; extern cpuop_func_ce op_59f8_12_ff; extern cpuop_func_ce op_59f9_12_nf; extern cpuop_func_ce op_59f9_12_ff; extern cpuop_func_ce op_5ac0_12_nf; extern cpuop_func_ce op_5ac0_12_ff; extern cpuop_func_ce op_5ac8_12_nf; extern cpuop_func_ce op_5ac8_12_ff; extern cpuop_func_ce op_5ad0_12_nf; extern cpuop_func_ce op_5ad0_12_ff; extern cpuop_func_ce op_5ad8_12_nf; extern cpuop_func_ce op_5ad8_12_ff; extern cpuop_func_ce op_5ae0_12_nf; extern cpuop_func_ce op_5ae0_12_ff; extern cpuop_func_ce op_5ae8_12_nf; extern cpuop_func_ce op_5ae8_12_ff; extern cpuop_func_ce op_5af0_12_nf; extern cpuop_func_ce op_5af0_12_ff; extern cpuop_func_ce op_5af8_12_nf; extern cpuop_func_ce op_5af8_12_ff; extern cpuop_func_ce op_5af9_12_nf; extern cpuop_func_ce op_5af9_12_ff; extern cpuop_func_ce op_5bc0_12_nf; extern cpuop_func_ce op_5bc0_12_ff; extern cpuop_func_ce op_5bc8_12_nf; extern cpuop_func_ce op_5bc8_12_ff; extern cpuop_func_ce op_5bd0_12_nf; extern cpuop_func_ce op_5bd0_12_ff; extern cpuop_func_ce op_5bd8_12_nf; extern cpuop_func_ce op_5bd8_12_ff; extern cpuop_func_ce op_5be0_12_nf; extern cpuop_func_ce op_5be0_12_ff; extern cpuop_func_ce op_5be8_12_nf; extern cpuop_func_ce op_5be8_12_ff; extern cpuop_func_ce op_5bf0_12_nf; extern cpuop_func_ce op_5bf0_12_ff; extern cpuop_func_ce op_5bf8_12_nf; extern cpuop_func_ce op_5bf8_12_ff; extern cpuop_func_ce op_5bf9_12_nf; extern cpuop_func_ce op_5bf9_12_ff; extern cpuop_func_ce op_5cc0_12_nf; extern cpuop_func_ce op_5cc0_12_ff; extern cpuop_func_ce op_5cc8_12_nf; extern cpuop_func_ce op_5cc8_12_ff; extern cpuop_func_ce op_5cd0_12_nf; extern cpuop_func_ce op_5cd0_12_ff; extern cpuop_func_ce op_5cd8_12_nf; extern cpuop_func_ce op_5cd8_12_ff; extern cpuop_func_ce op_5ce0_12_nf; extern cpuop_func_ce op_5ce0_12_ff; extern cpuop_func_ce op_5ce8_12_nf; extern cpuop_func_ce op_5ce8_12_ff; extern cpuop_func_ce op_5cf0_12_nf; extern cpuop_func_ce op_5cf0_12_ff; extern cpuop_func_ce op_5cf8_12_nf; extern cpuop_func_ce op_5cf8_12_ff; extern cpuop_func_ce op_5cf9_12_nf; extern cpuop_func_ce op_5cf9_12_ff; extern cpuop_func_ce op_5dc0_12_nf; extern cpuop_func_ce op_5dc0_12_ff; extern cpuop_func_ce op_5dc8_12_nf; extern cpuop_func_ce op_5dc8_12_ff; extern cpuop_func_ce op_5dd0_12_nf; extern cpuop_func_ce op_5dd0_12_ff; extern cpuop_func_ce op_5dd8_12_nf; extern cpuop_func_ce op_5dd8_12_ff; extern cpuop_func_ce op_5de0_12_nf; extern cpuop_func_ce op_5de0_12_ff; extern cpuop_func_ce op_5de8_12_nf; extern cpuop_func_ce op_5de8_12_ff; extern cpuop_func_ce op_5df0_12_nf; extern cpuop_func_ce op_5df0_12_ff; extern cpuop_func_ce op_5df8_12_nf; extern cpuop_func_ce op_5df8_12_ff; extern cpuop_func_ce op_5df9_12_nf; extern cpuop_func_ce op_5df9_12_ff; extern cpuop_func_ce op_5ec0_12_nf; extern cpuop_func_ce op_5ec0_12_ff; extern cpuop_func_ce op_5ec8_12_nf; extern cpuop_func_ce op_5ec8_12_ff; extern cpuop_func_ce op_5ed0_12_nf; extern cpuop_func_ce op_5ed0_12_ff; extern cpuop_func_ce op_5ed8_12_nf; extern cpuop_func_ce op_5ed8_12_ff; extern cpuop_func_ce op_5ee0_12_nf; extern cpuop_func_ce op_5ee0_12_ff; extern cpuop_func_ce op_5ee8_12_nf; extern cpuop_func_ce op_5ee8_12_ff; extern cpuop_func_ce op_5ef0_12_nf; extern cpuop_func_ce op_5ef0_12_ff; extern cpuop_func_ce op_5ef8_12_nf; extern cpuop_func_ce op_5ef8_12_ff; extern cpuop_func_ce op_5ef9_12_nf; extern cpuop_func_ce op_5ef9_12_ff; extern cpuop_func_ce op_5fc0_12_nf; extern cpuop_func_ce op_5fc0_12_ff; extern cpuop_func_ce op_5fc8_12_nf; extern cpuop_func_ce op_5fc8_12_ff; extern cpuop_func_ce op_5fd0_12_nf; extern cpuop_func_ce op_5fd0_12_ff; extern cpuop_func_ce op_5fd8_12_nf; extern cpuop_func_ce op_5fd8_12_ff; extern cpuop_func_ce op_5fe0_12_nf; extern cpuop_func_ce op_5fe0_12_ff; extern cpuop_func_ce op_5fe8_12_nf; extern cpuop_func_ce op_5fe8_12_ff; extern cpuop_func_ce op_5ff0_12_nf; extern cpuop_func_ce op_5ff0_12_ff; extern cpuop_func_ce op_5ff8_12_nf; extern cpuop_func_ce op_5ff8_12_ff; extern cpuop_func_ce op_5ff9_12_nf; extern cpuop_func_ce op_5ff9_12_ff; extern cpuop_func_ce op_6000_12_nf; extern cpuop_func_ce op_6000_12_ff; extern cpuop_func_ce op_6001_12_nf; extern cpuop_func_ce op_6001_12_ff; extern cpuop_func_ce op_60ff_12_nf; extern cpuop_func_ce op_60ff_12_ff; extern cpuop_func_ce op_6100_12_nf; extern cpuop_func_ce op_6100_12_ff; extern cpuop_func_ce op_6101_12_nf; extern cpuop_func_ce op_6101_12_ff; extern cpuop_func_ce op_61ff_12_nf; extern cpuop_func_ce op_61ff_12_ff; extern cpuop_func_ce op_6200_12_nf; extern cpuop_func_ce op_6200_12_ff; extern cpuop_func_ce op_6201_12_nf; extern cpuop_func_ce op_6201_12_ff; extern cpuop_func_ce op_62ff_12_nf; extern cpuop_func_ce op_62ff_12_ff; extern cpuop_func_ce op_6300_12_nf; extern cpuop_func_ce op_6300_12_ff; extern cpuop_func_ce op_6301_12_nf; extern cpuop_func_ce op_6301_12_ff; extern cpuop_func_ce op_63ff_12_nf; extern cpuop_func_ce op_63ff_12_ff; extern cpuop_func_ce op_6400_12_nf; extern cpuop_func_ce op_6400_12_ff; extern cpuop_func_ce op_6401_12_nf; extern cpuop_func_ce op_6401_12_ff; extern cpuop_func_ce op_64ff_12_nf; extern cpuop_func_ce op_64ff_12_ff; extern cpuop_func_ce op_6500_12_nf; extern cpuop_func_ce op_6500_12_ff; extern cpuop_func_ce op_6501_12_nf; extern cpuop_func_ce op_6501_12_ff; extern cpuop_func_ce op_65ff_12_nf; extern cpuop_func_ce op_65ff_12_ff; extern cpuop_func_ce op_6600_12_nf; extern cpuop_func_ce op_6600_12_ff; extern cpuop_func_ce op_6601_12_nf; extern cpuop_func_ce op_6601_12_ff; extern cpuop_func_ce op_66ff_12_nf; extern cpuop_func_ce op_66ff_12_ff; extern cpuop_func_ce op_6700_12_nf; extern cpuop_func_ce op_6700_12_ff; extern cpuop_func_ce op_6701_12_nf; extern cpuop_func_ce op_6701_12_ff; extern cpuop_func_ce op_67ff_12_nf; extern cpuop_func_ce op_67ff_12_ff; extern cpuop_func_ce op_6800_12_nf; extern cpuop_func_ce op_6800_12_ff; extern cpuop_func_ce op_6801_12_nf; extern cpuop_func_ce op_6801_12_ff; extern cpuop_func_ce op_68ff_12_nf; extern cpuop_func_ce op_68ff_12_ff; extern cpuop_func_ce op_6900_12_nf; extern cpuop_func_ce op_6900_12_ff; extern cpuop_func_ce op_6901_12_nf; extern cpuop_func_ce op_6901_12_ff; extern cpuop_func_ce op_69ff_12_nf; extern cpuop_func_ce op_69ff_12_ff; extern cpuop_func_ce op_6a00_12_nf; extern cpuop_func_ce op_6a00_12_ff; extern cpuop_func_ce op_6a01_12_nf; extern cpuop_func_ce op_6a01_12_ff; extern cpuop_func_ce op_6aff_12_nf; extern cpuop_func_ce op_6aff_12_ff; extern cpuop_func_ce op_6b00_12_nf; extern cpuop_func_ce op_6b00_12_ff; extern cpuop_func_ce op_6b01_12_nf; extern cpuop_func_ce op_6b01_12_ff; extern cpuop_func_ce op_6bff_12_nf; extern cpuop_func_ce op_6bff_12_ff; extern cpuop_func_ce op_6c00_12_nf; extern cpuop_func_ce op_6c00_12_ff; extern cpuop_func_ce op_6c01_12_nf; extern cpuop_func_ce op_6c01_12_ff; extern cpuop_func_ce op_6cff_12_nf; extern cpuop_func_ce op_6cff_12_ff; extern cpuop_func_ce op_6d00_12_nf; extern cpuop_func_ce op_6d00_12_ff; extern cpuop_func_ce op_6d01_12_nf; extern cpuop_func_ce op_6d01_12_ff; extern cpuop_func_ce op_6dff_12_nf; extern cpuop_func_ce op_6dff_12_ff; extern cpuop_func_ce op_6e00_12_nf; extern cpuop_func_ce op_6e00_12_ff; extern cpuop_func_ce op_6e01_12_nf; extern cpuop_func_ce op_6e01_12_ff; extern cpuop_func_ce op_6eff_12_nf; extern cpuop_func_ce op_6eff_12_ff; extern cpuop_func_ce op_6f00_12_nf; extern cpuop_func_ce op_6f00_12_ff; extern cpuop_func_ce op_6f01_12_nf; extern cpuop_func_ce op_6f01_12_ff; extern cpuop_func_ce op_6fff_12_nf; extern cpuop_func_ce op_6fff_12_ff; extern cpuop_func_ce op_7000_12_nf; extern cpuop_func_ce op_7000_12_ff; extern cpuop_func_ce op_8000_12_nf; extern cpuop_func_ce op_8000_12_ff; extern cpuop_func_ce op_8010_12_nf; extern cpuop_func_ce op_8010_12_ff; extern cpuop_func_ce op_8018_12_nf; extern cpuop_func_ce op_8018_12_ff; extern cpuop_func_ce op_8020_12_nf; extern cpuop_func_ce op_8020_12_ff; extern cpuop_func_ce op_8028_12_nf; extern cpuop_func_ce op_8028_12_ff; extern cpuop_func_ce op_8030_12_nf; extern cpuop_func_ce op_8030_12_ff; extern cpuop_func_ce op_8038_12_nf; extern cpuop_func_ce op_8038_12_ff; extern cpuop_func_ce op_8039_12_nf; extern cpuop_func_ce op_8039_12_ff; extern cpuop_func_ce op_803a_12_nf; extern cpuop_func_ce op_803a_12_ff; extern cpuop_func_ce op_803b_12_nf; extern cpuop_func_ce op_803b_12_ff; extern cpuop_func_ce op_803c_12_nf; extern cpuop_func_ce op_803c_12_ff; extern cpuop_func_ce op_8040_12_nf; extern cpuop_func_ce op_8040_12_ff; extern cpuop_func_ce op_8050_12_nf; extern cpuop_func_ce op_8050_12_ff; extern cpuop_func_ce op_8058_12_nf; extern cpuop_func_ce op_8058_12_ff; extern cpuop_func_ce op_8060_12_nf; extern cpuop_func_ce op_8060_12_ff; extern cpuop_func_ce op_8068_12_nf; extern cpuop_func_ce op_8068_12_ff; extern cpuop_func_ce op_8070_12_nf; extern cpuop_func_ce op_8070_12_ff; extern cpuop_func_ce op_8078_12_nf; extern cpuop_func_ce op_8078_12_ff; extern cpuop_func_ce op_8079_12_nf; extern cpuop_func_ce op_8079_12_ff; extern cpuop_func_ce op_807a_12_nf; extern cpuop_func_ce op_807a_12_ff; extern cpuop_func_ce op_807b_12_nf; extern cpuop_func_ce op_807b_12_ff; extern cpuop_func_ce op_807c_12_nf; extern cpuop_func_ce op_807c_12_ff; extern cpuop_func_ce op_8080_12_nf; extern cpuop_func_ce op_8080_12_ff; extern cpuop_func_ce op_8090_12_nf; extern cpuop_func_ce op_8090_12_ff; extern cpuop_func_ce op_8098_12_nf; extern cpuop_func_ce op_8098_12_ff; extern cpuop_func_ce op_80a0_12_nf; extern cpuop_func_ce op_80a0_12_ff; extern cpuop_func_ce op_80a8_12_nf; extern cpuop_func_ce op_80a8_12_ff; extern cpuop_func_ce op_80b0_12_nf; extern cpuop_func_ce op_80b0_12_ff; extern cpuop_func_ce op_80b8_12_nf; extern cpuop_func_ce op_80b8_12_ff; extern cpuop_func_ce op_80b9_12_nf; extern cpuop_func_ce op_80b9_12_ff; extern cpuop_func_ce op_80ba_12_nf; extern cpuop_func_ce op_80ba_12_ff; extern cpuop_func_ce op_80bb_12_nf; extern cpuop_func_ce op_80bb_12_ff; extern cpuop_func_ce op_80bc_12_nf; extern cpuop_func_ce op_80bc_12_ff; extern cpuop_func_ce op_80c0_12_nf; extern cpuop_func_ce op_80c0_12_ff; extern cpuop_func_ce op_80d0_12_nf; extern cpuop_func_ce op_80d0_12_ff; extern cpuop_func_ce op_80d8_12_nf; extern cpuop_func_ce op_80d8_12_ff; extern cpuop_func_ce op_80e0_12_nf; extern cpuop_func_ce op_80e0_12_ff; extern cpuop_func_ce op_80e8_12_nf; extern cpuop_func_ce op_80e8_12_ff; extern cpuop_func_ce op_80f0_12_nf; extern cpuop_func_ce op_80f0_12_ff; extern cpuop_func_ce op_80f8_12_nf; extern cpuop_func_ce op_80f8_12_ff; extern cpuop_func_ce op_80f9_12_nf; extern cpuop_func_ce op_80f9_12_ff; extern cpuop_func_ce op_80fa_12_nf; extern cpuop_func_ce op_80fa_12_ff; extern cpuop_func_ce op_80fb_12_nf; extern cpuop_func_ce op_80fb_12_ff; extern cpuop_func_ce op_80fc_12_nf; extern cpuop_func_ce op_80fc_12_ff; extern cpuop_func_ce op_8100_12_nf; extern cpuop_func_ce op_8100_12_ff; extern cpuop_func_ce op_8108_12_nf; extern cpuop_func_ce op_8108_12_ff; extern cpuop_func_ce op_8110_12_nf; extern cpuop_func_ce op_8110_12_ff; extern cpuop_func_ce op_8118_12_nf; extern cpuop_func_ce op_8118_12_ff; extern cpuop_func_ce op_8120_12_nf; extern cpuop_func_ce op_8120_12_ff; extern cpuop_func_ce op_8128_12_nf; extern cpuop_func_ce op_8128_12_ff; extern cpuop_func_ce op_8130_12_nf; extern cpuop_func_ce op_8130_12_ff; extern cpuop_func_ce op_8138_12_nf; extern cpuop_func_ce op_8138_12_ff; extern cpuop_func_ce op_8139_12_nf; extern cpuop_func_ce op_8139_12_ff; extern cpuop_func_ce op_8150_12_nf; extern cpuop_func_ce op_8150_12_ff; extern cpuop_func_ce op_8158_12_nf; extern cpuop_func_ce op_8158_12_ff; extern cpuop_func_ce op_8160_12_nf; extern cpuop_func_ce op_8160_12_ff; extern cpuop_func_ce op_8168_12_nf; extern cpuop_func_ce op_8168_12_ff; extern cpuop_func_ce op_8170_12_nf; extern cpuop_func_ce op_8170_12_ff; extern cpuop_func_ce op_8178_12_nf; extern cpuop_func_ce op_8178_12_ff; extern cpuop_func_ce op_8179_12_nf; extern cpuop_func_ce op_8179_12_ff; extern cpuop_func_ce op_8190_12_nf; extern cpuop_func_ce op_8190_12_ff; extern cpuop_func_ce op_8198_12_nf; extern cpuop_func_ce op_8198_12_ff; extern cpuop_func_ce op_81a0_12_nf; extern cpuop_func_ce op_81a0_12_ff; extern cpuop_func_ce op_81a8_12_nf; extern cpuop_func_ce op_81a8_12_ff; extern cpuop_func_ce op_81b0_12_nf; extern cpuop_func_ce op_81b0_12_ff; extern cpuop_func_ce op_81b8_12_nf; extern cpuop_func_ce op_81b8_12_ff; extern cpuop_func_ce op_81b9_12_nf; extern cpuop_func_ce op_81b9_12_ff; extern cpuop_func_ce op_81c0_12_nf; extern cpuop_func_ce op_81c0_12_ff; extern cpuop_func_ce op_81d0_12_nf; extern cpuop_func_ce op_81d0_12_ff; extern cpuop_func_ce op_81d8_12_nf; extern cpuop_func_ce op_81d8_12_ff; extern cpuop_func_ce op_81e0_12_nf; extern cpuop_func_ce op_81e0_12_ff; extern cpuop_func_ce op_81e8_12_nf; extern cpuop_func_ce op_81e8_12_ff; extern cpuop_func_ce op_81f0_12_nf; extern cpuop_func_ce op_81f0_12_ff; extern cpuop_func_ce op_81f8_12_nf; extern cpuop_func_ce op_81f8_12_ff; extern cpuop_func_ce op_81f9_12_nf; extern cpuop_func_ce op_81f9_12_ff; extern cpuop_func_ce op_81fa_12_nf; extern cpuop_func_ce op_81fa_12_ff; extern cpuop_func_ce op_81fb_12_nf; extern cpuop_func_ce op_81fb_12_ff; extern cpuop_func_ce op_81fc_12_nf; extern cpuop_func_ce op_81fc_12_ff; extern cpuop_func_ce op_9000_12_nf; extern cpuop_func_ce op_9000_12_ff; extern cpuop_func_ce op_9010_12_nf; extern cpuop_func_ce op_9010_12_ff; extern cpuop_func_ce op_9018_12_nf; extern cpuop_func_ce op_9018_12_ff; extern cpuop_func_ce op_9020_12_nf; extern cpuop_func_ce op_9020_12_ff; extern cpuop_func_ce op_9028_12_nf; extern cpuop_func_ce op_9028_12_ff; extern cpuop_func_ce op_9030_12_nf; extern cpuop_func_ce op_9030_12_ff; extern cpuop_func_ce op_9038_12_nf; extern cpuop_func_ce op_9038_12_ff; extern cpuop_func_ce op_9039_12_nf; extern cpuop_func_ce op_9039_12_ff; extern cpuop_func_ce op_903a_12_nf; extern cpuop_func_ce op_903a_12_ff; extern cpuop_func_ce op_903b_12_nf; extern cpuop_func_ce op_903b_12_ff; extern cpuop_func_ce op_903c_12_nf; extern cpuop_func_ce op_903c_12_ff; extern cpuop_func_ce op_9040_12_nf; extern cpuop_func_ce op_9040_12_ff; extern cpuop_func_ce op_9048_12_nf; extern cpuop_func_ce op_9048_12_ff; extern cpuop_func_ce op_9050_12_nf; extern cpuop_func_ce op_9050_12_ff; extern cpuop_func_ce op_9058_12_nf; extern cpuop_func_ce op_9058_12_ff; extern cpuop_func_ce op_9060_12_nf; extern cpuop_func_ce op_9060_12_ff; extern cpuop_func_ce op_9068_12_nf; extern cpuop_func_ce op_9068_12_ff; extern cpuop_func_ce op_9070_12_nf; extern cpuop_func_ce op_9070_12_ff; extern cpuop_func_ce op_9078_12_nf; extern cpuop_func_ce op_9078_12_ff; extern cpuop_func_ce op_9079_12_nf; extern cpuop_func_ce op_9079_12_ff; extern cpuop_func_ce op_907a_12_nf; extern cpuop_func_ce op_907a_12_ff; extern cpuop_func_ce op_907b_12_nf; extern cpuop_func_ce op_907b_12_ff; extern cpuop_func_ce op_907c_12_nf; extern cpuop_func_ce op_907c_12_ff; extern cpuop_func_ce op_9080_12_nf; extern cpuop_func_ce op_9080_12_ff; extern cpuop_func_ce op_9088_12_nf; extern cpuop_func_ce op_9088_12_ff; extern cpuop_func_ce op_9090_12_nf; extern cpuop_func_ce op_9090_12_ff; extern cpuop_func_ce op_9098_12_nf; extern cpuop_func_ce op_9098_12_ff; extern cpuop_func_ce op_90a0_12_nf; extern cpuop_func_ce op_90a0_12_ff; extern cpuop_func_ce op_90a8_12_nf; extern cpuop_func_ce op_90a8_12_ff; extern cpuop_func_ce op_90b0_12_nf; extern cpuop_func_ce op_90b0_12_ff; extern cpuop_func_ce op_90b8_12_nf; extern cpuop_func_ce op_90b8_12_ff; extern cpuop_func_ce op_90b9_12_nf; extern cpuop_func_ce op_90b9_12_ff; extern cpuop_func_ce op_90ba_12_nf; extern cpuop_func_ce op_90ba_12_ff; extern cpuop_func_ce op_90bb_12_nf; extern cpuop_func_ce op_90bb_12_ff; extern cpuop_func_ce op_90bc_12_nf; extern cpuop_func_ce op_90bc_12_ff; extern cpuop_func_ce op_90c0_12_nf; extern cpuop_func_ce op_90c0_12_ff; extern cpuop_func_ce op_90c8_12_nf; extern cpuop_func_ce op_90c8_12_ff; extern cpuop_func_ce op_90d0_12_nf; extern cpuop_func_ce op_90d0_12_ff; extern cpuop_func_ce op_90d8_12_nf; extern cpuop_func_ce op_90d8_12_ff; extern cpuop_func_ce op_90e0_12_nf; extern cpuop_func_ce op_90e0_12_ff; extern cpuop_func_ce op_90e8_12_nf; extern cpuop_func_ce op_90e8_12_ff; extern cpuop_func_ce op_90f0_12_nf; extern cpuop_func_ce op_90f0_12_ff; extern cpuop_func_ce op_90f8_12_nf; extern cpuop_func_ce op_90f8_12_ff; extern cpuop_func_ce op_90f9_12_nf; extern cpuop_func_ce op_90f9_12_ff; extern cpuop_func_ce op_90fa_12_nf; extern cpuop_func_ce op_90fa_12_ff; extern cpuop_func_ce op_90fb_12_nf; extern cpuop_func_ce op_90fb_12_ff; extern cpuop_func_ce op_90fc_12_nf; extern cpuop_func_ce op_90fc_12_ff; extern cpuop_func_ce op_9100_12_nf; extern cpuop_func_ce op_9100_12_ff; extern cpuop_func_ce op_9108_12_nf; extern cpuop_func_ce op_9108_12_ff; extern cpuop_func_ce op_9110_12_nf; extern cpuop_func_ce op_9110_12_ff; extern cpuop_func_ce op_9118_12_nf; extern cpuop_func_ce op_9118_12_ff; extern cpuop_func_ce op_9120_12_nf; extern cpuop_func_ce op_9120_12_ff; extern cpuop_func_ce op_9128_12_nf; extern cpuop_func_ce op_9128_12_ff; extern cpuop_func_ce op_9130_12_nf; extern cpuop_func_ce op_9130_12_ff; extern cpuop_func_ce op_9138_12_nf; extern cpuop_func_ce op_9138_12_ff; extern cpuop_func_ce op_9139_12_nf; extern cpuop_func_ce op_9139_12_ff; extern cpuop_func_ce op_9140_12_nf; extern cpuop_func_ce op_9140_12_ff; extern cpuop_func_ce op_9148_12_nf; extern cpuop_func_ce op_9148_12_ff; extern cpuop_func_ce op_9150_12_nf; extern cpuop_func_ce op_9150_12_ff; extern cpuop_func_ce op_9158_12_nf; extern cpuop_func_ce op_9158_12_ff; extern cpuop_func_ce op_9160_12_nf; extern cpuop_func_ce op_9160_12_ff; extern cpuop_func_ce op_9168_12_nf; extern cpuop_func_ce op_9168_12_ff; extern cpuop_func_ce op_9170_12_nf; extern cpuop_func_ce op_9170_12_ff; extern cpuop_func_ce op_9178_12_nf; extern cpuop_func_ce op_9178_12_ff; extern cpuop_func_ce op_9179_12_nf; extern cpuop_func_ce op_9179_12_ff; extern cpuop_func_ce op_9180_12_nf; extern cpuop_func_ce op_9180_12_ff; extern cpuop_func_ce op_9188_12_nf; extern cpuop_func_ce op_9188_12_ff; extern cpuop_func_ce op_9190_12_nf; extern cpuop_func_ce op_9190_12_ff; extern cpuop_func_ce op_9198_12_nf; extern cpuop_func_ce op_9198_12_ff; extern cpuop_func_ce op_91a0_12_nf; extern cpuop_func_ce op_91a0_12_ff; extern cpuop_func_ce op_91a8_12_nf; extern cpuop_func_ce op_91a8_12_ff; extern cpuop_func_ce op_91b0_12_nf; extern cpuop_func_ce op_91b0_12_ff; extern cpuop_func_ce op_91b8_12_nf; extern cpuop_func_ce op_91b8_12_ff; extern cpuop_func_ce op_91b9_12_nf; extern cpuop_func_ce op_91b9_12_ff; extern cpuop_func_ce op_91c0_12_nf; extern cpuop_func_ce op_91c0_12_ff; extern cpuop_func_ce op_91c8_12_nf; extern cpuop_func_ce op_91c8_12_ff; extern cpuop_func_ce op_91d0_12_nf; extern cpuop_func_ce op_91d0_12_ff; extern cpuop_func_ce op_91d8_12_nf; extern cpuop_func_ce op_91d8_12_ff; extern cpuop_func_ce op_91e0_12_nf; extern cpuop_func_ce op_91e0_12_ff; extern cpuop_func_ce op_91e8_12_nf; extern cpuop_func_ce op_91e8_12_ff; extern cpuop_func_ce op_91f0_12_nf; extern cpuop_func_ce op_91f0_12_ff; extern cpuop_func_ce op_91f8_12_nf; extern cpuop_func_ce op_91f8_12_ff; extern cpuop_func_ce op_91f9_12_nf; extern cpuop_func_ce op_91f9_12_ff; extern cpuop_func_ce op_91fa_12_nf; extern cpuop_func_ce op_91fa_12_ff; extern cpuop_func_ce op_91fb_12_nf; extern cpuop_func_ce op_91fb_12_ff; extern cpuop_func_ce op_91fc_12_nf; extern cpuop_func_ce op_91fc_12_ff; extern cpuop_func_ce op_b000_12_nf; extern cpuop_func_ce op_b000_12_ff; extern cpuop_func_ce op_b010_12_nf; extern cpuop_func_ce op_b010_12_ff; extern cpuop_func_ce op_b018_12_nf; extern cpuop_func_ce op_b018_12_ff; extern cpuop_func_ce op_b020_12_nf; extern cpuop_func_ce op_b020_12_ff; extern cpuop_func_ce op_b028_12_nf; extern cpuop_func_ce op_b028_12_ff; extern cpuop_func_ce op_b030_12_nf; extern cpuop_func_ce op_b030_12_ff; extern cpuop_func_ce op_b038_12_nf; extern cpuop_func_ce op_b038_12_ff; extern cpuop_func_ce op_b039_12_nf; extern cpuop_func_ce op_b039_12_ff; extern cpuop_func_ce op_b03a_12_nf; extern cpuop_func_ce op_b03a_12_ff; extern cpuop_func_ce op_b03b_12_nf; extern cpuop_func_ce op_b03b_12_ff; extern cpuop_func_ce op_b03c_12_nf; extern cpuop_func_ce op_b03c_12_ff; extern cpuop_func_ce op_b040_12_nf; extern cpuop_func_ce op_b040_12_ff; extern cpuop_func_ce op_b048_12_nf; extern cpuop_func_ce op_b048_12_ff; extern cpuop_func_ce op_b050_12_nf; extern cpuop_func_ce op_b050_12_ff; extern cpuop_func_ce op_b058_12_nf; extern cpuop_func_ce op_b058_12_ff; extern cpuop_func_ce op_b060_12_nf; extern cpuop_func_ce op_b060_12_ff; extern cpuop_func_ce op_b068_12_nf; extern cpuop_func_ce op_b068_12_ff; extern cpuop_func_ce op_b070_12_nf; extern cpuop_func_ce op_b070_12_ff; extern cpuop_func_ce op_b078_12_nf; extern cpuop_func_ce op_b078_12_ff; extern cpuop_func_ce op_b079_12_nf; extern cpuop_func_ce op_b079_12_ff; extern cpuop_func_ce op_b07a_12_nf; extern cpuop_func_ce op_b07a_12_ff; extern cpuop_func_ce op_b07b_12_nf; extern cpuop_func_ce op_b07b_12_ff; extern cpuop_func_ce op_b07c_12_nf; extern cpuop_func_ce op_b07c_12_ff; extern cpuop_func_ce op_b080_12_nf; extern cpuop_func_ce op_b080_12_ff; extern cpuop_func_ce op_b088_12_nf; extern cpuop_func_ce op_b088_12_ff; extern cpuop_func_ce op_b090_12_nf; extern cpuop_func_ce op_b090_12_ff; extern cpuop_func_ce op_b098_12_nf; extern cpuop_func_ce op_b098_12_ff; extern cpuop_func_ce op_b0a0_12_nf; extern cpuop_func_ce op_b0a0_12_ff; extern cpuop_func_ce op_b0a8_12_nf; extern cpuop_func_ce op_b0a8_12_ff; extern cpuop_func_ce op_b0b0_12_nf; extern cpuop_func_ce op_b0b0_12_ff; extern cpuop_func_ce op_b0b8_12_nf; extern cpuop_func_ce op_b0b8_12_ff; extern cpuop_func_ce op_b0b9_12_nf; extern cpuop_func_ce op_b0b9_12_ff; extern cpuop_func_ce op_b0ba_12_nf; extern cpuop_func_ce op_b0ba_12_ff; extern cpuop_func_ce op_b0bb_12_nf; extern cpuop_func_ce op_b0bb_12_ff; extern cpuop_func_ce op_b0bc_12_nf; extern cpuop_func_ce op_b0bc_12_ff; extern cpuop_func_ce op_b0c0_12_nf; extern cpuop_func_ce op_b0c0_12_ff; extern cpuop_func_ce op_b0c8_12_nf; extern cpuop_func_ce op_b0c8_12_ff; extern cpuop_func_ce op_b0d0_12_nf; extern cpuop_func_ce op_b0d0_12_ff; extern cpuop_func_ce op_b0d8_12_nf; extern cpuop_func_ce op_b0d8_12_ff; extern cpuop_func_ce op_b0e0_12_nf; extern cpuop_func_ce op_b0e0_12_ff; extern cpuop_func_ce op_b0e8_12_nf; extern cpuop_func_ce op_b0e8_12_ff; extern cpuop_func_ce op_b0f0_12_nf; extern cpuop_func_ce op_b0f0_12_ff; extern cpuop_func_ce op_b0f8_12_nf; extern cpuop_func_ce op_b0f8_12_ff; extern cpuop_func_ce op_b0f9_12_nf; extern cpuop_func_ce op_b0f9_12_ff; extern cpuop_func_ce op_b0fa_12_nf; extern cpuop_func_ce op_b0fa_12_ff; extern cpuop_func_ce op_b0fb_12_nf; extern cpuop_func_ce op_b0fb_12_ff; extern cpuop_func_ce op_b0fc_12_nf; extern cpuop_func_ce op_b0fc_12_ff; extern cpuop_func_ce op_b100_12_nf; extern cpuop_func_ce op_b100_12_ff; extern cpuop_func_ce op_b108_12_nf; extern cpuop_func_ce op_b108_12_ff; extern cpuop_func_ce op_b110_12_nf; extern cpuop_func_ce op_b110_12_ff; extern cpuop_func_ce op_b118_12_nf; extern cpuop_func_ce op_b118_12_ff; extern cpuop_func_ce op_b120_12_nf; extern cpuop_func_ce op_b120_12_ff; extern cpuop_func_ce op_b128_12_nf; extern cpuop_func_ce op_b128_12_ff; extern cpuop_func_ce op_b130_12_nf; extern cpuop_func_ce op_b130_12_ff; extern cpuop_func_ce op_b138_12_nf; extern cpuop_func_ce op_b138_12_ff; extern cpuop_func_ce op_b139_12_nf; extern cpuop_func_ce op_b139_12_ff; extern cpuop_func_ce op_b140_12_nf; extern cpuop_func_ce op_b140_12_ff; extern cpuop_func_ce op_b148_12_nf; extern cpuop_func_ce op_b148_12_ff; extern cpuop_func_ce op_b150_12_nf; extern cpuop_func_ce op_b150_12_ff; extern cpuop_func_ce op_b158_12_nf; extern cpuop_func_ce op_b158_12_ff; extern cpuop_func_ce op_b160_12_nf; extern cpuop_func_ce op_b160_12_ff; extern cpuop_func_ce op_b168_12_nf; extern cpuop_func_ce op_b168_12_ff; extern cpuop_func_ce op_b170_12_nf; extern cpuop_func_ce op_b170_12_ff; extern cpuop_func_ce op_b178_12_nf; extern cpuop_func_ce op_b178_12_ff; extern cpuop_func_ce op_b179_12_nf; extern cpuop_func_ce op_b179_12_ff; extern cpuop_func_ce op_b180_12_nf; extern cpuop_func_ce op_b180_12_ff; extern cpuop_func_ce op_b188_12_nf; extern cpuop_func_ce op_b188_12_ff; extern cpuop_func_ce op_b190_12_nf; extern cpuop_func_ce op_b190_12_ff; extern cpuop_func_ce op_b198_12_nf; extern cpuop_func_ce op_b198_12_ff; extern cpuop_func_ce op_b1a0_12_nf; extern cpuop_func_ce op_b1a0_12_ff; extern cpuop_func_ce op_b1a8_12_nf; extern cpuop_func_ce op_b1a8_12_ff; extern cpuop_func_ce op_b1b0_12_nf; extern cpuop_func_ce op_b1b0_12_ff; extern cpuop_func_ce op_b1b8_12_nf; extern cpuop_func_ce op_b1b8_12_ff; extern cpuop_func_ce op_b1b9_12_nf; extern cpuop_func_ce op_b1b9_12_ff; extern cpuop_func_ce op_b1c0_12_nf; extern cpuop_func_ce op_b1c0_12_ff; extern cpuop_func_ce op_b1c8_12_nf; extern cpuop_func_ce op_b1c8_12_ff; extern cpuop_func_ce op_b1d0_12_nf; extern cpuop_func_ce op_b1d0_12_ff; extern cpuop_func_ce op_b1d8_12_nf; extern cpuop_func_ce op_b1d8_12_ff; extern cpuop_func_ce op_b1e0_12_nf; extern cpuop_func_ce op_b1e0_12_ff; extern cpuop_func_ce op_b1e8_12_nf; extern cpuop_func_ce op_b1e8_12_ff; extern cpuop_func_ce op_b1f0_12_nf; extern cpuop_func_ce op_b1f0_12_ff; extern cpuop_func_ce op_b1f8_12_nf; extern cpuop_func_ce op_b1f8_12_ff; extern cpuop_func_ce op_b1f9_12_nf; extern cpuop_func_ce op_b1f9_12_ff; extern cpuop_func_ce op_b1fa_12_nf; extern cpuop_func_ce op_b1fa_12_ff; extern cpuop_func_ce op_b1fb_12_nf; extern cpuop_func_ce op_b1fb_12_ff; extern cpuop_func_ce op_b1fc_12_nf; extern cpuop_func_ce op_b1fc_12_ff; extern cpuop_func_ce op_c000_12_nf; extern cpuop_func_ce op_c000_12_ff; extern cpuop_func_ce op_c010_12_nf; extern cpuop_func_ce op_c010_12_ff; extern cpuop_func_ce op_c018_12_nf; extern cpuop_func_ce op_c018_12_ff; extern cpuop_func_ce op_c020_12_nf; extern cpuop_func_ce op_c020_12_ff; extern cpuop_func_ce op_c028_12_nf; extern cpuop_func_ce op_c028_12_ff; extern cpuop_func_ce op_c030_12_nf; extern cpuop_func_ce op_c030_12_ff; extern cpuop_func_ce op_c038_12_nf; extern cpuop_func_ce op_c038_12_ff; extern cpuop_func_ce op_c039_12_nf; extern cpuop_func_ce op_c039_12_ff; extern cpuop_func_ce op_c03a_12_nf; extern cpuop_func_ce op_c03a_12_ff; extern cpuop_func_ce op_c03b_12_nf; extern cpuop_func_ce op_c03b_12_ff; extern cpuop_func_ce op_c03c_12_nf; extern cpuop_func_ce op_c03c_12_ff; extern cpuop_func_ce op_c040_12_nf; extern cpuop_func_ce op_c040_12_ff; extern cpuop_func_ce op_c050_12_nf; extern cpuop_func_ce op_c050_12_ff; extern cpuop_func_ce op_c058_12_nf; extern cpuop_func_ce op_c058_12_ff; extern cpuop_func_ce op_c060_12_nf; extern cpuop_func_ce op_c060_12_ff; extern cpuop_func_ce op_c068_12_nf; extern cpuop_func_ce op_c068_12_ff; extern cpuop_func_ce op_c070_12_nf; extern cpuop_func_ce op_c070_12_ff; extern cpuop_func_ce op_c078_12_nf; extern cpuop_func_ce op_c078_12_ff; extern cpuop_func_ce op_c079_12_nf; extern cpuop_func_ce op_c079_12_ff; extern cpuop_func_ce op_c07a_12_nf; extern cpuop_func_ce op_c07a_12_ff; extern cpuop_func_ce op_c07b_12_nf; extern cpuop_func_ce op_c07b_12_ff; extern cpuop_func_ce op_c07c_12_nf; extern cpuop_func_ce op_c07c_12_ff; extern cpuop_func_ce op_c080_12_nf; extern cpuop_func_ce op_c080_12_ff; extern cpuop_func_ce op_c090_12_nf; extern cpuop_func_ce op_c090_12_ff; extern cpuop_func_ce op_c098_12_nf; extern cpuop_func_ce op_c098_12_ff; extern cpuop_func_ce op_c0a0_12_nf; extern cpuop_func_ce op_c0a0_12_ff; extern cpuop_func_ce op_c0a8_12_nf; extern cpuop_func_ce op_c0a8_12_ff; extern cpuop_func_ce op_c0b0_12_nf; extern cpuop_func_ce op_c0b0_12_ff; extern cpuop_func_ce op_c0b8_12_nf; extern cpuop_func_ce op_c0b8_12_ff; extern cpuop_func_ce op_c0b9_12_nf; extern cpuop_func_ce op_c0b9_12_ff; extern cpuop_func_ce op_c0ba_12_nf; extern cpuop_func_ce op_c0ba_12_ff; extern cpuop_func_ce op_c0bb_12_nf; extern cpuop_func_ce op_c0bb_12_ff; extern cpuop_func_ce op_c0bc_12_nf; extern cpuop_func_ce op_c0bc_12_ff; extern cpuop_func_ce op_c0c0_12_nf; extern cpuop_func_ce op_c0c0_12_ff; extern cpuop_func_ce op_c0d0_12_nf; extern cpuop_func_ce op_c0d0_12_ff; extern cpuop_func_ce op_c0d8_12_nf; extern cpuop_func_ce op_c0d8_12_ff; extern cpuop_func_ce op_c0e0_12_nf; extern cpuop_func_ce op_c0e0_12_ff; extern cpuop_func_ce op_c0e8_12_nf; extern cpuop_func_ce op_c0e8_12_ff; extern cpuop_func_ce op_c0f0_12_nf; extern cpuop_func_ce op_c0f0_12_ff; extern cpuop_func_ce op_c0f8_12_nf; extern cpuop_func_ce op_c0f8_12_ff; extern cpuop_func_ce op_c0f9_12_nf; extern cpuop_func_ce op_c0f9_12_ff; extern cpuop_func_ce op_c0fa_12_nf; extern cpuop_func_ce op_c0fa_12_ff; extern cpuop_func_ce op_c0fb_12_nf; extern cpuop_func_ce op_c0fb_12_ff; extern cpuop_func_ce op_c0fc_12_nf; extern cpuop_func_ce op_c0fc_12_ff; extern cpuop_func_ce op_c100_12_nf; extern cpuop_func_ce op_c100_12_ff; extern cpuop_func_ce op_c108_12_nf; extern cpuop_func_ce op_c108_12_ff; extern cpuop_func_ce op_c110_12_nf; extern cpuop_func_ce op_c110_12_ff; extern cpuop_func_ce op_c118_12_nf; extern cpuop_func_ce op_c118_12_ff; extern cpuop_func_ce op_c120_12_nf; extern cpuop_func_ce op_c120_12_ff; extern cpuop_func_ce op_c128_12_nf; extern cpuop_func_ce op_c128_12_ff; extern cpuop_func_ce op_c130_12_nf; extern cpuop_func_ce op_c130_12_ff; extern cpuop_func_ce op_c138_12_nf; extern cpuop_func_ce op_c138_12_ff; extern cpuop_func_ce op_c139_12_nf; extern cpuop_func_ce op_c139_12_ff; extern cpuop_func_ce op_c140_12_nf; extern cpuop_func_ce op_c140_12_ff; extern cpuop_func_ce op_c148_12_nf; extern cpuop_func_ce op_c148_12_ff; extern cpuop_func_ce op_c150_12_nf; extern cpuop_func_ce op_c150_12_ff; extern cpuop_func_ce op_c158_12_nf; extern cpuop_func_ce op_c158_12_ff; extern cpuop_func_ce op_c160_12_nf; extern cpuop_func_ce op_c160_12_ff; extern cpuop_func_ce op_c168_12_nf; extern cpuop_func_ce op_c168_12_ff; extern cpuop_func_ce op_c170_12_nf; extern cpuop_func_ce op_c170_12_ff; extern cpuop_func_ce op_c178_12_nf; extern cpuop_func_ce op_c178_12_ff; extern cpuop_func_ce op_c179_12_nf; extern cpuop_func_ce op_c179_12_ff; extern cpuop_func_ce op_c188_12_nf; extern cpuop_func_ce op_c188_12_ff; extern cpuop_func_ce op_c190_12_nf; extern cpuop_func_ce op_c190_12_ff; extern cpuop_func_ce op_c198_12_nf; extern cpuop_func_ce op_c198_12_ff; extern cpuop_func_ce op_c1a0_12_nf; extern cpuop_func_ce op_c1a0_12_ff; extern cpuop_func_ce op_c1a8_12_nf; extern cpuop_func_ce op_c1a8_12_ff; extern cpuop_func_ce op_c1b0_12_nf; extern cpuop_func_ce op_c1b0_12_ff; extern cpuop_func_ce op_c1b8_12_nf; extern cpuop_func_ce op_c1b8_12_ff; extern cpuop_func_ce op_c1b9_12_nf; extern cpuop_func_ce op_c1b9_12_ff; extern cpuop_func_ce op_c1c0_12_nf; extern cpuop_func_ce op_c1c0_12_ff; extern cpuop_func_ce op_c1d0_12_nf; extern cpuop_func_ce op_c1d0_12_ff; extern cpuop_func_ce op_c1d8_12_nf; extern cpuop_func_ce op_c1d8_12_ff; extern cpuop_func_ce op_c1e0_12_nf; extern cpuop_func_ce op_c1e0_12_ff; extern cpuop_func_ce op_c1e8_12_nf; extern cpuop_func_ce op_c1e8_12_ff; extern cpuop_func_ce op_c1f0_12_nf; extern cpuop_func_ce op_c1f0_12_ff; extern cpuop_func_ce op_c1f8_12_nf; extern cpuop_func_ce op_c1f8_12_ff; extern cpuop_func_ce op_c1f9_12_nf; extern cpuop_func_ce op_c1f9_12_ff; extern cpuop_func_ce op_c1fa_12_nf; extern cpuop_func_ce op_c1fa_12_ff; extern cpuop_func_ce op_c1fb_12_nf; extern cpuop_func_ce op_c1fb_12_ff; extern cpuop_func_ce op_c1fc_12_nf; extern cpuop_func_ce op_c1fc_12_ff; extern cpuop_func_ce op_d000_12_nf; extern cpuop_func_ce op_d000_12_ff; extern cpuop_func_ce op_d010_12_nf; extern cpuop_func_ce op_d010_12_ff; extern cpuop_func_ce op_d018_12_nf; extern cpuop_func_ce op_d018_12_ff; extern cpuop_func_ce op_d020_12_nf; extern cpuop_func_ce op_d020_12_ff; extern cpuop_func_ce op_d028_12_nf; extern cpuop_func_ce op_d028_12_ff; extern cpuop_func_ce op_d030_12_nf; extern cpuop_func_ce op_d030_12_ff; extern cpuop_func_ce op_d038_12_nf; extern cpuop_func_ce op_d038_12_ff; extern cpuop_func_ce op_d039_12_nf; extern cpuop_func_ce op_d039_12_ff; extern cpuop_func_ce op_d03a_12_nf; extern cpuop_func_ce op_d03a_12_ff; extern cpuop_func_ce op_d03b_12_nf; extern cpuop_func_ce op_d03b_12_ff; extern cpuop_func_ce op_d03c_12_nf; extern cpuop_func_ce op_d03c_12_ff; extern cpuop_func_ce op_d040_12_nf; extern cpuop_func_ce op_d040_12_ff; extern cpuop_func_ce op_d048_12_nf; extern cpuop_func_ce op_d048_12_ff; extern cpuop_func_ce op_d050_12_nf; extern cpuop_func_ce op_d050_12_ff; extern cpuop_func_ce op_d058_12_nf; extern cpuop_func_ce op_d058_12_ff; extern cpuop_func_ce op_d060_12_nf; extern cpuop_func_ce op_d060_12_ff; extern cpuop_func_ce op_d068_12_nf; extern cpuop_func_ce op_d068_12_ff; extern cpuop_func_ce op_d070_12_nf; extern cpuop_func_ce op_d070_12_ff; extern cpuop_func_ce op_d078_12_nf; extern cpuop_func_ce op_d078_12_ff; extern cpuop_func_ce op_d079_12_nf; extern cpuop_func_ce op_d079_12_ff; extern cpuop_func_ce op_d07a_12_nf; extern cpuop_func_ce op_d07a_12_ff; extern cpuop_func_ce op_d07b_12_nf; extern cpuop_func_ce op_d07b_12_ff; extern cpuop_func_ce op_d07c_12_nf; extern cpuop_func_ce op_d07c_12_ff; extern cpuop_func_ce op_d080_12_nf; extern cpuop_func_ce op_d080_12_ff; extern cpuop_func_ce op_d088_12_nf; extern cpuop_func_ce op_d088_12_ff; extern cpuop_func_ce op_d090_12_nf; extern cpuop_func_ce op_d090_12_ff; extern cpuop_func_ce op_d098_12_nf; extern cpuop_func_ce op_d098_12_ff; extern cpuop_func_ce op_d0a0_12_nf; extern cpuop_func_ce op_d0a0_12_ff; extern cpuop_func_ce op_d0a8_12_nf; extern cpuop_func_ce op_d0a8_12_ff; extern cpuop_func_ce op_d0b0_12_nf; extern cpuop_func_ce op_d0b0_12_ff; extern cpuop_func_ce op_d0b8_12_nf; extern cpuop_func_ce op_d0b8_12_ff; extern cpuop_func_ce op_d0b9_12_nf; extern cpuop_func_ce op_d0b9_12_ff; extern cpuop_func_ce op_d0ba_12_nf; extern cpuop_func_ce op_d0ba_12_ff; extern cpuop_func_ce op_d0bb_12_nf; extern cpuop_func_ce op_d0bb_12_ff; extern cpuop_func_ce op_d0bc_12_nf; extern cpuop_func_ce op_d0bc_12_ff; extern cpuop_func_ce op_d0c0_12_nf; extern cpuop_func_ce op_d0c0_12_ff; extern cpuop_func_ce op_d0c8_12_nf; extern cpuop_func_ce op_d0c8_12_ff; extern cpuop_func_ce op_d0d0_12_nf; extern cpuop_func_ce op_d0d0_12_ff; extern cpuop_func_ce op_d0d8_12_nf; extern cpuop_func_ce op_d0d8_12_ff; extern cpuop_func_ce op_d0e0_12_nf; extern cpuop_func_ce op_d0e0_12_ff; extern cpuop_func_ce op_d0e8_12_nf; extern cpuop_func_ce op_d0e8_12_ff; extern cpuop_func_ce op_d0f0_12_nf; extern cpuop_func_ce op_d0f0_12_ff; extern cpuop_func_ce op_d0f8_12_nf; extern cpuop_func_ce op_d0f8_12_ff; extern cpuop_func_ce op_d0f9_12_nf; extern cpuop_func_ce op_d0f9_12_ff; extern cpuop_func_ce op_d0fa_12_nf; extern cpuop_func_ce op_d0fa_12_ff; extern cpuop_func_ce op_d0fb_12_nf; extern cpuop_func_ce op_d0fb_12_ff; extern cpuop_func_ce op_d0fc_12_nf; extern cpuop_func_ce op_d0fc_12_ff; extern cpuop_func_ce op_d100_12_nf; extern cpuop_func_ce op_d100_12_ff; extern cpuop_func_ce op_d108_12_nf; extern cpuop_func_ce op_d108_12_ff; extern cpuop_func_ce op_d110_12_nf; extern cpuop_func_ce op_d110_12_ff; extern cpuop_func_ce op_d118_12_nf; extern cpuop_func_ce op_d118_12_ff; extern cpuop_func_ce op_d120_12_nf; extern cpuop_func_ce op_d120_12_ff; extern cpuop_func_ce op_d128_12_nf; extern cpuop_func_ce op_d128_12_ff; extern cpuop_func_ce op_d130_12_nf; extern cpuop_func_ce op_d130_12_ff; extern cpuop_func_ce op_d138_12_nf; extern cpuop_func_ce op_d138_12_ff; extern cpuop_func_ce op_d139_12_nf; extern cpuop_func_ce op_d139_12_ff; extern cpuop_func_ce op_d140_12_nf; extern cpuop_func_ce op_d140_12_ff; extern cpuop_func_ce op_d148_12_nf; extern cpuop_func_ce op_d148_12_ff; extern cpuop_func_ce op_d150_12_nf; extern cpuop_func_ce op_d150_12_ff; extern cpuop_func_ce op_d158_12_nf; extern cpuop_func_ce op_d158_12_ff; extern cpuop_func_ce op_d160_12_nf; extern cpuop_func_ce op_d160_12_ff; extern cpuop_func_ce op_d168_12_nf; extern cpuop_func_ce op_d168_12_ff; extern cpuop_func_ce op_d170_12_nf; extern cpuop_func_ce op_d170_12_ff; extern cpuop_func_ce op_d178_12_nf; extern cpuop_func_ce op_d178_12_ff; extern cpuop_func_ce op_d179_12_nf; extern cpuop_func_ce op_d179_12_ff; extern cpuop_func_ce op_d180_12_nf; extern cpuop_func_ce op_d180_12_ff; extern cpuop_func_ce op_d188_12_nf; extern cpuop_func_ce op_d188_12_ff; extern cpuop_func_ce op_d190_12_nf; extern cpuop_func_ce op_d190_12_ff; extern cpuop_func_ce op_d198_12_nf; extern cpuop_func_ce op_d198_12_ff; extern cpuop_func_ce op_d1a0_12_nf; extern cpuop_func_ce op_d1a0_12_ff; extern cpuop_func_ce op_d1a8_12_nf; extern cpuop_func_ce op_d1a8_12_ff; extern cpuop_func_ce op_d1b0_12_nf; extern cpuop_func_ce op_d1b0_12_ff; extern cpuop_func_ce op_d1b8_12_nf; extern cpuop_func_ce op_d1b8_12_ff; extern cpuop_func_ce op_d1b9_12_nf; extern cpuop_func_ce op_d1b9_12_ff; extern cpuop_func_ce op_d1c0_12_nf; extern cpuop_func_ce op_d1c0_12_ff; extern cpuop_func_ce op_d1c8_12_nf; extern cpuop_func_ce op_d1c8_12_ff; extern cpuop_func_ce op_d1d0_12_nf; extern cpuop_func_ce op_d1d0_12_ff; extern cpuop_func_ce op_d1d8_12_nf; extern cpuop_func_ce op_d1d8_12_ff; extern cpuop_func_ce op_d1e0_12_nf; extern cpuop_func_ce op_d1e0_12_ff; extern cpuop_func_ce op_d1e8_12_nf; extern cpuop_func_ce op_d1e8_12_ff; extern cpuop_func_ce op_d1f0_12_nf; extern cpuop_func_ce op_d1f0_12_ff; extern cpuop_func_ce op_d1f8_12_nf; extern cpuop_func_ce op_d1f8_12_ff; extern cpuop_func_ce op_d1f9_12_nf; extern cpuop_func_ce op_d1f9_12_ff; extern cpuop_func_ce op_d1fa_12_nf; extern cpuop_func_ce op_d1fa_12_ff; extern cpuop_func_ce op_d1fb_12_nf; extern cpuop_func_ce op_d1fb_12_ff; extern cpuop_func_ce op_d1fc_12_nf; extern cpuop_func_ce op_d1fc_12_ff; extern cpuop_func_ce op_e000_12_nf; extern cpuop_func_ce op_e000_12_ff; extern cpuop_func_ce op_e008_12_nf; extern cpuop_func_ce op_e008_12_ff; extern cpuop_func_ce op_e010_12_nf; extern cpuop_func_ce op_e010_12_ff; extern cpuop_func_ce op_e018_12_nf; extern cpuop_func_ce op_e018_12_ff; extern cpuop_func_ce op_e020_12_nf; extern cpuop_func_ce op_e020_12_ff; extern cpuop_func_ce op_e028_12_nf; extern cpuop_func_ce op_e028_12_ff; extern cpuop_func_ce op_e030_12_nf; extern cpuop_func_ce op_e030_12_ff; extern cpuop_func_ce op_e038_12_nf; extern cpuop_func_ce op_e038_12_ff; extern cpuop_func_ce op_e040_12_nf; extern cpuop_func_ce op_e040_12_ff; extern cpuop_func_ce op_e048_12_nf; extern cpuop_func_ce op_e048_12_ff; extern cpuop_func_ce op_e050_12_nf; extern cpuop_func_ce op_e050_12_ff; extern cpuop_func_ce op_e058_12_nf; extern cpuop_func_ce op_e058_12_ff; extern cpuop_func_ce op_e060_12_nf; extern cpuop_func_ce op_e060_12_ff; extern cpuop_func_ce op_e068_12_nf; extern cpuop_func_ce op_e068_12_ff; extern cpuop_func_ce op_e070_12_nf; extern cpuop_func_ce op_e070_12_ff; extern cpuop_func_ce op_e078_12_nf; extern cpuop_func_ce op_e078_12_ff; extern cpuop_func_ce op_e080_12_nf; extern cpuop_func_ce op_e080_12_ff; extern cpuop_func_ce op_e088_12_nf; extern cpuop_func_ce op_e088_12_ff; extern cpuop_func_ce op_e090_12_nf; extern cpuop_func_ce op_e090_12_ff; extern cpuop_func_ce op_e098_12_nf; extern cpuop_func_ce op_e098_12_ff; extern cpuop_func_ce op_e0a0_12_nf; extern cpuop_func_ce op_e0a0_12_ff; extern cpuop_func_ce op_e0a8_12_nf; extern cpuop_func_ce op_e0a8_12_ff; extern cpuop_func_ce op_e0b0_12_nf; extern cpuop_func_ce op_e0b0_12_ff; extern cpuop_func_ce op_e0b8_12_nf; extern cpuop_func_ce op_e0b8_12_ff; extern cpuop_func_ce op_e0d0_12_nf; extern cpuop_func_ce op_e0d0_12_ff; extern cpuop_func_ce op_e0d8_12_nf; extern cpuop_func_ce op_e0d8_12_ff; extern cpuop_func_ce op_e0e0_12_nf; extern cpuop_func_ce op_e0e0_12_ff; extern cpuop_func_ce op_e0e8_12_nf; extern cpuop_func_ce op_e0e8_12_ff; extern cpuop_func_ce op_e0f0_12_nf; extern cpuop_func_ce op_e0f0_12_ff; extern cpuop_func_ce op_e0f8_12_nf; extern cpuop_func_ce op_e0f8_12_ff; extern cpuop_func_ce op_e0f9_12_nf; extern cpuop_func_ce op_e0f9_12_ff; extern cpuop_func_ce op_e100_12_nf; extern cpuop_func_ce op_e100_12_ff; extern cpuop_func_ce op_e108_12_nf; extern cpuop_func_ce op_e108_12_ff; extern cpuop_func_ce op_e110_12_nf; extern cpuop_func_ce op_e110_12_ff; extern cpuop_func_ce op_e118_12_nf; extern cpuop_func_ce op_e118_12_ff; extern cpuop_func_ce op_e120_12_nf; extern cpuop_func_ce op_e120_12_ff; extern cpuop_func_ce op_e128_12_nf; extern cpuop_func_ce op_e128_12_ff; extern cpuop_func_ce op_e130_12_nf; extern cpuop_func_ce op_e130_12_ff; extern cpuop_func_ce op_e138_12_nf; extern cpuop_func_ce op_e138_12_ff; extern cpuop_func_ce op_e140_12_nf; extern cpuop_func_ce op_e140_12_ff; extern cpuop_func_ce op_e148_12_nf; extern cpuop_func_ce op_e148_12_ff; extern cpuop_func_ce op_e150_12_nf; extern cpuop_func_ce op_e150_12_ff; extern cpuop_func_ce op_e158_12_nf; extern cpuop_func_ce op_e158_12_ff; extern cpuop_func_ce op_e160_12_nf; extern cpuop_func_ce op_e160_12_ff; extern cpuop_func_ce op_e168_12_nf; extern cpuop_func_ce op_e168_12_ff; extern cpuop_func_ce op_e170_12_nf; extern cpuop_func_ce op_e170_12_ff; extern cpuop_func_ce op_e178_12_nf; extern cpuop_func_ce op_e178_12_ff; extern cpuop_func_ce op_e180_12_nf; extern cpuop_func_ce op_e180_12_ff; extern cpuop_func_ce op_e188_12_nf; extern cpuop_func_ce op_e188_12_ff; extern cpuop_func_ce op_e190_12_nf; extern cpuop_func_ce op_e190_12_ff; extern cpuop_func_ce op_e198_12_nf; extern cpuop_func_ce op_e198_12_ff; extern cpuop_func_ce op_e1a0_12_nf; extern cpuop_func_ce op_e1a0_12_ff; extern cpuop_func_ce op_e1a8_12_nf; extern cpuop_func_ce op_e1a8_12_ff; extern cpuop_func_ce op_e1b0_12_nf; extern cpuop_func_ce op_e1b0_12_ff; extern cpuop_func_ce op_e1b8_12_nf; extern cpuop_func_ce op_e1b8_12_ff; extern cpuop_func_ce op_e1d0_12_nf; extern cpuop_func_ce op_e1d0_12_ff; extern cpuop_func_ce op_e1d8_12_nf; extern cpuop_func_ce op_e1d8_12_ff; extern cpuop_func_ce op_e1e0_12_nf; extern cpuop_func_ce op_e1e0_12_ff; extern cpuop_func_ce op_e1e8_12_nf; extern cpuop_func_ce op_e1e8_12_ff; extern cpuop_func_ce op_e1f0_12_nf; extern cpuop_func_ce op_e1f0_12_ff; extern cpuop_func_ce op_e1f8_12_nf; extern cpuop_func_ce op_e1f8_12_ff; extern cpuop_func_ce op_e1f9_12_nf; extern cpuop_func_ce op_e1f9_12_ff; extern cpuop_func_ce op_e2d0_12_nf; extern cpuop_func_ce op_e2d0_12_ff; extern cpuop_func_ce op_e2d8_12_nf; extern cpuop_func_ce op_e2d8_12_ff; extern cpuop_func_ce op_e2e0_12_nf; extern cpuop_func_ce op_e2e0_12_ff; extern cpuop_func_ce op_e2e8_12_nf; extern cpuop_func_ce op_e2e8_12_ff; extern cpuop_func_ce op_e2f0_12_nf; extern cpuop_func_ce op_e2f0_12_ff; extern cpuop_func_ce op_e2f8_12_nf; extern cpuop_func_ce op_e2f8_12_ff; extern cpuop_func_ce op_e2f9_12_nf; extern cpuop_func_ce op_e2f9_12_ff; extern cpuop_func_ce op_e3d0_12_nf; extern cpuop_func_ce op_e3d0_12_ff; extern cpuop_func_ce op_e3d8_12_nf; extern cpuop_func_ce op_e3d8_12_ff; extern cpuop_func_ce op_e3e0_12_nf; extern cpuop_func_ce op_e3e0_12_ff; extern cpuop_func_ce op_e3e8_12_nf; extern cpuop_func_ce op_e3e8_12_ff; extern cpuop_func_ce op_e3f0_12_nf; extern cpuop_func_ce op_e3f0_12_ff; extern cpuop_func_ce op_e3f8_12_nf; extern cpuop_func_ce op_e3f8_12_ff; extern cpuop_func_ce op_e3f9_12_nf; extern cpuop_func_ce op_e3f9_12_ff; extern cpuop_func_ce op_e4d0_12_nf; extern cpuop_func_ce op_e4d0_12_ff; extern cpuop_func_ce op_e4d8_12_nf; extern cpuop_func_ce op_e4d8_12_ff; extern cpuop_func_ce op_e4e0_12_nf; extern cpuop_func_ce op_e4e0_12_ff; extern cpuop_func_ce op_e4e8_12_nf; extern cpuop_func_ce op_e4e8_12_ff; extern cpuop_func_ce op_e4f0_12_nf; extern cpuop_func_ce op_e4f0_12_ff; extern cpuop_func_ce op_e4f8_12_nf; extern cpuop_func_ce op_e4f8_12_ff; extern cpuop_func_ce op_e4f9_12_nf; extern cpuop_func_ce op_e4f9_12_ff; extern cpuop_func_ce op_e5d0_12_nf; extern cpuop_func_ce op_e5d0_12_ff; extern cpuop_func_ce op_e5d8_12_nf; extern cpuop_func_ce op_e5d8_12_ff; extern cpuop_func_ce op_e5e0_12_nf; extern cpuop_func_ce op_e5e0_12_ff; extern cpuop_func_ce op_e5e8_12_nf; extern cpuop_func_ce op_e5e8_12_ff; extern cpuop_func_ce op_e5f0_12_nf; extern cpuop_func_ce op_e5f0_12_ff; extern cpuop_func_ce op_e5f8_12_nf; extern cpuop_func_ce op_e5f8_12_ff; extern cpuop_func_ce op_e5f9_12_nf; extern cpuop_func_ce op_e5f9_12_ff; extern cpuop_func_ce op_e6d0_12_nf; extern cpuop_func_ce op_e6d0_12_ff; extern cpuop_func_ce op_e6d8_12_nf; extern cpuop_func_ce op_e6d8_12_ff; extern cpuop_func_ce op_e6e0_12_nf; extern cpuop_func_ce op_e6e0_12_ff; extern cpuop_func_ce op_e6e8_12_nf; extern cpuop_func_ce op_e6e8_12_ff; extern cpuop_func_ce op_e6f0_12_nf; extern cpuop_func_ce op_e6f0_12_ff; extern cpuop_func_ce op_e6f8_12_nf; extern cpuop_func_ce op_e6f8_12_ff; extern cpuop_func_ce op_e6f9_12_nf; extern cpuop_func_ce op_e6f9_12_ff; extern cpuop_func_ce op_e7d0_12_nf; extern cpuop_func_ce op_e7d0_12_ff; extern cpuop_func_ce op_e7d8_12_nf; extern cpuop_func_ce op_e7d8_12_ff; extern cpuop_func_ce op_e7e0_12_nf; extern cpuop_func_ce op_e7e0_12_ff; extern cpuop_func_ce op_e7e8_12_nf; extern cpuop_func_ce op_e7e8_12_ff; extern cpuop_func_ce op_e7f0_12_nf; extern cpuop_func_ce op_e7f0_12_ff; extern cpuop_func_ce op_e7f8_12_nf; extern cpuop_func_ce op_e7f8_12_ff; extern cpuop_func_ce op_e7f9_12_nf; extern cpuop_func_ce op_e7f9_12_ff; extern cpuop_func op_0000_20_nf; extern cpuop_func op_0000_20_ff; extern cpuop_func op_0010_20_nf; extern cpuop_func op_0010_20_ff; extern cpuop_func op_0018_20_nf; extern cpuop_func op_0018_20_ff; extern cpuop_func op_0020_20_nf; extern cpuop_func op_0020_20_ff; extern cpuop_func op_0028_20_nf; extern cpuop_func op_0028_20_ff; extern cpuop_func op_0030_20_nf; extern cpuop_func op_0030_20_ff; extern cpuop_func op_0038_20_nf; extern cpuop_func op_0038_20_ff; extern cpuop_func op_0039_20_nf; extern cpuop_func op_0039_20_ff; extern cpuop_func op_003c_20_nf; extern cpuop_func op_003c_20_ff; extern cpuop_func op_0040_20_nf; extern cpuop_func op_0040_20_ff; extern cpuop_func op_0050_20_nf; extern cpuop_func op_0050_20_ff; extern cpuop_func op_0058_20_nf; extern cpuop_func op_0058_20_ff; extern cpuop_func op_0060_20_nf; extern cpuop_func op_0060_20_ff; extern cpuop_func op_0068_20_nf; extern cpuop_func op_0068_20_ff; extern cpuop_func op_0070_20_nf; extern cpuop_func op_0070_20_ff; extern cpuop_func op_0078_20_nf; extern cpuop_func op_0078_20_ff; extern cpuop_func op_0079_20_nf; extern cpuop_func op_0079_20_ff; extern cpuop_func op_007c_20_nf; extern cpuop_func op_007c_20_ff; extern cpuop_func op_0080_20_nf; extern cpuop_func op_0080_20_ff; extern cpuop_func op_0090_20_nf; extern cpuop_func op_0090_20_ff; extern cpuop_func op_0098_20_nf; extern cpuop_func op_0098_20_ff; extern cpuop_func op_00a0_20_nf; extern cpuop_func op_00a0_20_ff; extern cpuop_func op_00a8_20_nf; extern cpuop_func op_00a8_20_ff; extern cpuop_func op_00b0_20_nf; extern cpuop_func op_00b0_20_ff; extern cpuop_func op_00b8_20_nf; extern cpuop_func op_00b8_20_ff; extern cpuop_func op_00b9_20_nf; extern cpuop_func op_00b9_20_ff; extern cpuop_func op_00d0_20_nf; extern cpuop_func op_00d0_20_ff; extern cpuop_func op_00e8_20_nf; extern cpuop_func op_00e8_20_ff; extern cpuop_func op_00f0_20_nf; extern cpuop_func op_00f0_20_ff; extern cpuop_func op_00f8_20_nf; extern cpuop_func op_00f8_20_ff; extern cpuop_func op_00f9_20_nf; extern cpuop_func op_00f9_20_ff; extern cpuop_func op_00fa_20_nf; extern cpuop_func op_00fa_20_ff; extern cpuop_func op_00fb_20_nf; extern cpuop_func op_00fb_20_ff; extern cpuop_func op_0100_20_nf; extern cpuop_func op_0100_20_ff; extern cpuop_func op_0108_20_nf; extern cpuop_func op_0108_20_ff; extern cpuop_func op_0110_20_nf; extern cpuop_func op_0110_20_ff; extern cpuop_func op_0118_20_nf; extern cpuop_func op_0118_20_ff; extern cpuop_func op_0120_20_nf; extern cpuop_func op_0120_20_ff; extern cpuop_func op_0128_20_nf; extern cpuop_func op_0128_20_ff; extern cpuop_func op_0130_20_nf; extern cpuop_func op_0130_20_ff; extern cpuop_func op_0138_20_nf; extern cpuop_func op_0138_20_ff; extern cpuop_func op_0139_20_nf; extern cpuop_func op_0139_20_ff; extern cpuop_func op_013a_20_nf; extern cpuop_func op_013a_20_ff; extern cpuop_func op_013b_20_nf; extern cpuop_func op_013b_20_ff; extern cpuop_func op_013c_20_nf; extern cpuop_func op_013c_20_ff; extern cpuop_func op_0140_20_nf; extern cpuop_func op_0140_20_ff; extern cpuop_func op_0148_20_nf; extern cpuop_func op_0148_20_ff; extern cpuop_func op_0150_20_nf; extern cpuop_func op_0150_20_ff; extern cpuop_func op_0158_20_nf; extern cpuop_func op_0158_20_ff; extern cpuop_func op_0160_20_nf; extern cpuop_func op_0160_20_ff; extern cpuop_func op_0168_20_nf; extern cpuop_func op_0168_20_ff; extern cpuop_func op_0170_20_nf; extern cpuop_func op_0170_20_ff; extern cpuop_func op_0178_20_nf; extern cpuop_func op_0178_20_ff; extern cpuop_func op_0179_20_nf; extern cpuop_func op_0179_20_ff; extern cpuop_func op_017a_20_nf; extern cpuop_func op_017a_20_ff; extern cpuop_func op_017b_20_nf; extern cpuop_func op_017b_20_ff; extern cpuop_func op_0180_20_nf; extern cpuop_func op_0180_20_ff; extern cpuop_func op_0188_20_nf; extern cpuop_func op_0188_20_ff; extern cpuop_func op_0190_20_nf; extern cpuop_func op_0190_20_ff; extern cpuop_func op_0198_20_nf; extern cpuop_func op_0198_20_ff; extern cpuop_func op_01a0_20_nf; extern cpuop_func op_01a0_20_ff; extern cpuop_func op_01a8_20_nf; extern cpuop_func op_01a8_20_ff; extern cpuop_func op_01b0_20_nf; extern cpuop_func op_01b0_20_ff; extern cpuop_func op_01b8_20_nf; extern cpuop_func op_01b8_20_ff; extern cpuop_func op_01b9_20_nf; extern cpuop_func op_01b9_20_ff; extern cpuop_func op_01ba_20_nf; extern cpuop_func op_01ba_20_ff; extern cpuop_func op_01bb_20_nf; extern cpuop_func op_01bb_20_ff; extern cpuop_func op_01c0_20_nf; extern cpuop_func op_01c0_20_ff; extern cpuop_func op_01c8_20_nf; extern cpuop_func op_01c8_20_ff; extern cpuop_func op_01d0_20_nf; extern cpuop_func op_01d0_20_ff; extern cpuop_func op_01d8_20_nf; extern cpuop_func op_01d8_20_ff; extern cpuop_func op_01e0_20_nf; extern cpuop_func op_01e0_20_ff; extern cpuop_func op_01e8_20_nf; extern cpuop_func op_01e8_20_ff; extern cpuop_func op_01f0_20_nf; extern cpuop_func op_01f0_20_ff; extern cpuop_func op_01f8_20_nf; extern cpuop_func op_01f8_20_ff; extern cpuop_func op_01f9_20_nf; extern cpuop_func op_01f9_20_ff; extern cpuop_func op_01fa_20_nf; extern cpuop_func op_01fa_20_ff; extern cpuop_func op_01fb_20_nf; extern cpuop_func op_01fb_20_ff; extern cpuop_func op_0200_20_nf; extern cpuop_func op_0200_20_ff; extern cpuop_func op_0210_20_nf; extern cpuop_func op_0210_20_ff; extern cpuop_func op_0218_20_nf; extern cpuop_func op_0218_20_ff; extern cpuop_func op_0220_20_nf; extern cpuop_func op_0220_20_ff; extern cpuop_func op_0228_20_nf; extern cpuop_func op_0228_20_ff; extern cpuop_func op_0230_20_nf; extern cpuop_func op_0230_20_ff; extern cpuop_func op_0238_20_nf; extern cpuop_func op_0238_20_ff; extern cpuop_func op_0239_20_nf; extern cpuop_func op_0239_20_ff; extern cpuop_func op_023c_20_nf; extern cpuop_func op_023c_20_ff; extern cpuop_func op_0240_20_nf; extern cpuop_func op_0240_20_ff; extern cpuop_func op_0250_20_nf; extern cpuop_func op_0250_20_ff; extern cpuop_func op_0258_20_nf; extern cpuop_func op_0258_20_ff; extern cpuop_func op_0260_20_nf; extern cpuop_func op_0260_20_ff; extern cpuop_func op_0268_20_nf; extern cpuop_func op_0268_20_ff; extern cpuop_func op_0270_20_nf; extern cpuop_func op_0270_20_ff; extern cpuop_func op_0278_20_nf; extern cpuop_func op_0278_20_ff; extern cpuop_func op_0279_20_nf; extern cpuop_func op_0279_20_ff; extern cpuop_func op_027c_20_nf; extern cpuop_func op_027c_20_ff; extern cpuop_func op_0280_20_nf; extern cpuop_func op_0280_20_ff; extern cpuop_func op_0290_20_nf; extern cpuop_func op_0290_20_ff; extern cpuop_func op_0298_20_nf; extern cpuop_func op_0298_20_ff; extern cpuop_func op_02a0_20_nf; extern cpuop_func op_02a0_20_ff; extern cpuop_func op_02a8_20_nf; extern cpuop_func op_02a8_20_ff; extern cpuop_func op_02b0_20_nf; extern cpuop_func op_02b0_20_ff; extern cpuop_func op_02b8_20_nf; extern cpuop_func op_02b8_20_ff; extern cpuop_func op_02b9_20_nf; extern cpuop_func op_02b9_20_ff; extern cpuop_func op_02d0_20_nf; extern cpuop_func op_02d0_20_ff; extern cpuop_func op_02e8_20_nf; extern cpuop_func op_02e8_20_ff; extern cpuop_func op_02f0_20_nf; extern cpuop_func op_02f0_20_ff; extern cpuop_func op_02f8_20_nf; extern cpuop_func op_02f8_20_ff; extern cpuop_func op_02f9_20_nf; extern cpuop_func op_02f9_20_ff; extern cpuop_func op_02fa_20_nf; extern cpuop_func op_02fa_20_ff; extern cpuop_func op_02fb_20_nf; extern cpuop_func op_02fb_20_ff; extern cpuop_func op_0400_20_nf; extern cpuop_func op_0400_20_ff; extern cpuop_func op_0410_20_nf; extern cpuop_func op_0410_20_ff; extern cpuop_func op_0418_20_nf; extern cpuop_func op_0418_20_ff; extern cpuop_func op_0420_20_nf; extern cpuop_func op_0420_20_ff; extern cpuop_func op_0428_20_nf; extern cpuop_func op_0428_20_ff; extern cpuop_func op_0430_20_nf; extern cpuop_func op_0430_20_ff; extern cpuop_func op_0438_20_nf; extern cpuop_func op_0438_20_ff; extern cpuop_func op_0439_20_nf; extern cpuop_func op_0439_20_ff; extern cpuop_func op_0440_20_nf; extern cpuop_func op_0440_20_ff; extern cpuop_func op_0450_20_nf; extern cpuop_func op_0450_20_ff; extern cpuop_func op_0458_20_nf; extern cpuop_func op_0458_20_ff; extern cpuop_func op_0460_20_nf; extern cpuop_func op_0460_20_ff; extern cpuop_func op_0468_20_nf; extern cpuop_func op_0468_20_ff; extern cpuop_func op_0470_20_nf; extern cpuop_func op_0470_20_ff; extern cpuop_func op_0478_20_nf; extern cpuop_func op_0478_20_ff; extern cpuop_func op_0479_20_nf; extern cpuop_func op_0479_20_ff; extern cpuop_func op_0480_20_nf; extern cpuop_func op_0480_20_ff; extern cpuop_func op_0490_20_nf; extern cpuop_func op_0490_20_ff; extern cpuop_func op_0498_20_nf; extern cpuop_func op_0498_20_ff; extern cpuop_func op_04a0_20_nf; extern cpuop_func op_04a0_20_ff; extern cpuop_func op_04a8_20_nf; extern cpuop_func op_04a8_20_ff; extern cpuop_func op_04b0_20_nf; extern cpuop_func op_04b0_20_ff; extern cpuop_func op_04b8_20_nf; extern cpuop_func op_04b8_20_ff; extern cpuop_func op_04b9_20_nf; extern cpuop_func op_04b9_20_ff; extern cpuop_func op_04d0_20_nf; extern cpuop_func op_04d0_20_ff; extern cpuop_func op_04e8_20_nf; extern cpuop_func op_04e8_20_ff; extern cpuop_func op_04f0_20_nf; extern cpuop_func op_04f0_20_ff; extern cpuop_func op_04f8_20_nf; extern cpuop_func op_04f8_20_ff; extern cpuop_func op_04f9_20_nf; extern cpuop_func op_04f9_20_ff; extern cpuop_func op_04fa_20_nf; extern cpuop_func op_04fa_20_ff; extern cpuop_func op_04fb_20_nf; extern cpuop_func op_04fb_20_ff; extern cpuop_func op_0600_20_nf; extern cpuop_func op_0600_20_ff; extern cpuop_func op_0610_20_nf; extern cpuop_func op_0610_20_ff; extern cpuop_func op_0618_20_nf; extern cpuop_func op_0618_20_ff; extern cpuop_func op_0620_20_nf; extern cpuop_func op_0620_20_ff; extern cpuop_func op_0628_20_nf; extern cpuop_func op_0628_20_ff; extern cpuop_func op_0630_20_nf; extern cpuop_func op_0630_20_ff; extern cpuop_func op_0638_20_nf; extern cpuop_func op_0638_20_ff; extern cpuop_func op_0639_20_nf; extern cpuop_func op_0639_20_ff; extern cpuop_func op_0640_20_nf; extern cpuop_func op_0640_20_ff; extern cpuop_func op_0650_20_nf; extern cpuop_func op_0650_20_ff; extern cpuop_func op_0658_20_nf; extern cpuop_func op_0658_20_ff; extern cpuop_func op_0660_20_nf; extern cpuop_func op_0660_20_ff; extern cpuop_func op_0668_20_nf; extern cpuop_func op_0668_20_ff; extern cpuop_func op_0670_20_nf; extern cpuop_func op_0670_20_ff; extern cpuop_func op_0678_20_nf; extern cpuop_func op_0678_20_ff; extern cpuop_func op_0679_20_nf; extern cpuop_func op_0679_20_ff; extern cpuop_func op_0680_20_nf; extern cpuop_func op_0680_20_ff; extern cpuop_func op_0690_20_nf; extern cpuop_func op_0690_20_ff; extern cpuop_func op_0698_20_nf; extern cpuop_func op_0698_20_ff; extern cpuop_func op_06a0_20_nf; extern cpuop_func op_06a0_20_ff; extern cpuop_func op_06a8_20_nf; extern cpuop_func op_06a8_20_ff; extern cpuop_func op_06b0_20_nf; extern cpuop_func op_06b0_20_ff; extern cpuop_func op_06b8_20_nf; extern cpuop_func op_06b8_20_ff; extern cpuop_func op_06b9_20_nf; extern cpuop_func op_06b9_20_ff; extern cpuop_func op_06c0_20_nf; extern cpuop_func op_06c0_20_ff; extern cpuop_func op_06c8_20_nf; extern cpuop_func op_06c8_20_ff; extern cpuop_func op_06d0_20_nf; extern cpuop_func op_06d0_20_ff; extern cpuop_func op_06e8_20_nf; extern cpuop_func op_06e8_20_ff; extern cpuop_func op_06f0_20_nf; extern cpuop_func op_06f0_20_ff; extern cpuop_func op_06f8_20_nf; extern cpuop_func op_06f8_20_ff; extern cpuop_func op_06f9_20_nf; extern cpuop_func op_06f9_20_ff; extern cpuop_func op_06fa_20_nf; extern cpuop_func op_06fa_20_ff; extern cpuop_func op_06fb_20_nf; extern cpuop_func op_06fb_20_ff; extern cpuop_func op_0800_20_nf; extern cpuop_func op_0800_20_ff; extern cpuop_func op_0810_20_nf; extern cpuop_func op_0810_20_ff; extern cpuop_func op_0818_20_nf; extern cpuop_func op_0818_20_ff; extern cpuop_func op_0820_20_nf; extern cpuop_func op_0820_20_ff; extern cpuop_func op_0828_20_nf; extern cpuop_func op_0828_20_ff; extern cpuop_func op_0830_20_nf; extern cpuop_func op_0830_20_ff; extern cpuop_func op_0838_20_nf; extern cpuop_func op_0838_20_ff; extern cpuop_func op_0839_20_nf; extern cpuop_func op_0839_20_ff; extern cpuop_func op_083a_20_nf; extern cpuop_func op_083a_20_ff; extern cpuop_func op_083b_20_nf; extern cpuop_func op_083b_20_ff; extern cpuop_func op_083c_20_nf; extern cpuop_func op_083c_20_ff; extern cpuop_func op_0840_20_nf; extern cpuop_func op_0840_20_ff; extern cpuop_func op_0850_20_nf; extern cpuop_func op_0850_20_ff; extern cpuop_func op_0858_20_nf; extern cpuop_func op_0858_20_ff; extern cpuop_func op_0860_20_nf; extern cpuop_func op_0860_20_ff; extern cpuop_func op_0868_20_nf; extern cpuop_func op_0868_20_ff; extern cpuop_func op_0870_20_nf; extern cpuop_func op_0870_20_ff; extern cpuop_func op_0878_20_nf; extern cpuop_func op_0878_20_ff; extern cpuop_func op_0879_20_nf; extern cpuop_func op_0879_20_ff; extern cpuop_func op_087a_20_nf; extern cpuop_func op_087a_20_ff; extern cpuop_func op_087b_20_nf; extern cpuop_func op_087b_20_ff; extern cpuop_func op_0880_20_nf; extern cpuop_func op_0880_20_ff; extern cpuop_func op_0890_20_nf; extern cpuop_func op_0890_20_ff; extern cpuop_func op_0898_20_nf; extern cpuop_func op_0898_20_ff; extern cpuop_func op_08a0_20_nf; extern cpuop_func op_08a0_20_ff; extern cpuop_func op_08a8_20_nf; extern cpuop_func op_08a8_20_ff; extern cpuop_func op_08b0_20_nf; extern cpuop_func op_08b0_20_ff; extern cpuop_func op_08b8_20_nf; extern cpuop_func op_08b8_20_ff; extern cpuop_func op_08b9_20_nf; extern cpuop_func op_08b9_20_ff; extern cpuop_func op_08ba_20_nf; extern cpuop_func op_08ba_20_ff; extern cpuop_func op_08bb_20_nf; extern cpuop_func op_08bb_20_ff; extern cpuop_func op_08c0_20_nf; extern cpuop_func op_08c0_20_ff; extern cpuop_func op_08d0_20_nf; extern cpuop_func op_08d0_20_ff; extern cpuop_func op_08d8_20_nf; extern cpuop_func op_08d8_20_ff; extern cpuop_func op_08e0_20_nf; extern cpuop_func op_08e0_20_ff; extern cpuop_func op_08e8_20_nf; extern cpuop_func op_08e8_20_ff; extern cpuop_func op_08f0_20_nf; extern cpuop_func op_08f0_20_ff; extern cpuop_func op_08f8_20_nf; extern cpuop_func op_08f8_20_ff; extern cpuop_func op_08f9_20_nf; extern cpuop_func op_08f9_20_ff; extern cpuop_func op_08fa_20_nf; extern cpuop_func op_08fa_20_ff; extern cpuop_func op_08fb_20_nf; extern cpuop_func op_08fb_20_ff; extern cpuop_func op_0a00_20_nf; extern cpuop_func op_0a00_20_ff; extern cpuop_func op_0a10_20_nf; extern cpuop_func op_0a10_20_ff; extern cpuop_func op_0a18_20_nf; extern cpuop_func op_0a18_20_ff; extern cpuop_func op_0a20_20_nf; extern cpuop_func op_0a20_20_ff; extern cpuop_func op_0a28_20_nf; extern cpuop_func op_0a28_20_ff; extern cpuop_func op_0a30_20_nf; extern cpuop_func op_0a30_20_ff; extern cpuop_func op_0a38_20_nf; extern cpuop_func op_0a38_20_ff; extern cpuop_func op_0a39_20_nf; extern cpuop_func op_0a39_20_ff; extern cpuop_func op_0a3c_20_nf; extern cpuop_func op_0a3c_20_ff; extern cpuop_func op_0a40_20_nf; extern cpuop_func op_0a40_20_ff; extern cpuop_func op_0a50_20_nf; extern cpuop_func op_0a50_20_ff; extern cpuop_func op_0a58_20_nf; extern cpuop_func op_0a58_20_ff; extern cpuop_func op_0a60_20_nf; extern cpuop_func op_0a60_20_ff; extern cpuop_func op_0a68_20_nf; extern cpuop_func op_0a68_20_ff; extern cpuop_func op_0a70_20_nf; extern cpuop_func op_0a70_20_ff; extern cpuop_func op_0a78_20_nf; extern cpuop_func op_0a78_20_ff; extern cpuop_func op_0a79_20_nf; extern cpuop_func op_0a79_20_ff; extern cpuop_func op_0a7c_20_nf; extern cpuop_func op_0a7c_20_ff; extern cpuop_func op_0a80_20_nf; extern cpuop_func op_0a80_20_ff; extern cpuop_func op_0a90_20_nf; extern cpuop_func op_0a90_20_ff; extern cpuop_func op_0a98_20_nf; extern cpuop_func op_0a98_20_ff; extern cpuop_func op_0aa0_20_nf; extern cpuop_func op_0aa0_20_ff; extern cpuop_func op_0aa8_20_nf; extern cpuop_func op_0aa8_20_ff; extern cpuop_func op_0ab0_20_nf; extern cpuop_func op_0ab0_20_ff; extern cpuop_func op_0ab8_20_nf; extern cpuop_func op_0ab8_20_ff; extern cpuop_func op_0ab9_20_nf; extern cpuop_func op_0ab9_20_ff; extern cpuop_func op_0ad0_20_nf; extern cpuop_func op_0ad0_20_ff; extern cpuop_func op_0ad8_20_nf; extern cpuop_func op_0ad8_20_ff; extern cpuop_func op_0ae0_20_nf; extern cpuop_func op_0ae0_20_ff; extern cpuop_func op_0ae8_20_nf; extern cpuop_func op_0ae8_20_ff; extern cpuop_func op_0af0_20_nf; extern cpuop_func op_0af0_20_ff; extern cpuop_func op_0af8_20_nf; extern cpuop_func op_0af8_20_ff; extern cpuop_func op_0af9_20_nf; extern cpuop_func op_0af9_20_ff; extern cpuop_func op_0c00_20_nf; extern cpuop_func op_0c00_20_ff; extern cpuop_func op_0c10_20_nf; extern cpuop_func op_0c10_20_ff; extern cpuop_func op_0c18_20_nf; extern cpuop_func op_0c18_20_ff; extern cpuop_func op_0c20_20_nf; extern cpuop_func op_0c20_20_ff; extern cpuop_func op_0c28_20_nf; extern cpuop_func op_0c28_20_ff; extern cpuop_func op_0c30_20_nf; extern cpuop_func op_0c30_20_ff; extern cpuop_func op_0c38_20_nf; extern cpuop_func op_0c38_20_ff; extern cpuop_func op_0c39_20_nf; extern cpuop_func op_0c39_20_ff; extern cpuop_func op_0c3a_20_nf; extern cpuop_func op_0c3a_20_ff; extern cpuop_func op_0c3b_20_nf; extern cpuop_func op_0c3b_20_ff; extern cpuop_func op_0c40_20_nf; extern cpuop_func op_0c40_20_ff; extern cpuop_func op_0c50_20_nf; extern cpuop_func op_0c50_20_ff; extern cpuop_func op_0c58_20_nf; extern cpuop_func op_0c58_20_ff; extern cpuop_func op_0c60_20_nf; extern cpuop_func op_0c60_20_ff; extern cpuop_func op_0c68_20_nf; extern cpuop_func op_0c68_20_ff; extern cpuop_func op_0c70_20_nf; extern cpuop_func op_0c70_20_ff; extern cpuop_func op_0c78_20_nf; extern cpuop_func op_0c78_20_ff; extern cpuop_func op_0c79_20_nf; extern cpuop_func op_0c79_20_ff; extern cpuop_func op_0c7a_20_nf; extern cpuop_func op_0c7a_20_ff; extern cpuop_func op_0c7b_20_nf; extern cpuop_func op_0c7b_20_ff; extern cpuop_func op_0c80_20_nf; extern cpuop_func op_0c80_20_ff; extern cpuop_func op_0c90_20_nf; extern cpuop_func op_0c90_20_ff; extern cpuop_func op_0c98_20_nf; extern cpuop_func op_0c98_20_ff; extern cpuop_func op_0ca0_20_nf; extern cpuop_func op_0ca0_20_ff; extern cpuop_func op_0ca8_20_nf; extern cpuop_func op_0ca8_20_ff; extern cpuop_func op_0cb0_20_nf; extern cpuop_func op_0cb0_20_ff; extern cpuop_func op_0cb8_20_nf; extern cpuop_func op_0cb8_20_ff; extern cpuop_func op_0cb9_20_nf; extern cpuop_func op_0cb9_20_ff; extern cpuop_func op_0cba_20_nf; extern cpuop_func op_0cba_20_ff; extern cpuop_func op_0cbb_20_nf; extern cpuop_func op_0cbb_20_ff; extern cpuop_func op_0cd0_20_nf; extern cpuop_func op_0cd0_20_ff; extern cpuop_func op_0cd8_20_nf; extern cpuop_func op_0cd8_20_ff; extern cpuop_func op_0ce0_20_nf; extern cpuop_func op_0ce0_20_ff; extern cpuop_func op_0ce8_20_nf; extern cpuop_func op_0ce8_20_ff; extern cpuop_func op_0cf0_20_nf; extern cpuop_func op_0cf0_20_ff; extern cpuop_func op_0cf8_20_nf; extern cpuop_func op_0cf8_20_ff; extern cpuop_func op_0cf9_20_nf; extern cpuop_func op_0cf9_20_ff; extern cpuop_func op_0cfc_20_nf; extern cpuop_func op_0cfc_20_ff; extern cpuop_func op_0e10_20_nf; extern cpuop_func op_0e10_20_ff; extern cpuop_func op_0e18_20_nf; extern cpuop_func op_0e18_20_ff; extern cpuop_func op_0e20_20_nf; extern cpuop_func op_0e20_20_ff; extern cpuop_func op_0e28_20_nf; extern cpuop_func op_0e28_20_ff; extern cpuop_func op_0e30_20_nf; extern cpuop_func op_0e30_20_ff; extern cpuop_func op_0e38_20_nf; extern cpuop_func op_0e38_20_ff; extern cpuop_func op_0e39_20_nf; extern cpuop_func op_0e39_20_ff; extern cpuop_func op_0e50_20_nf; extern cpuop_func op_0e50_20_ff; extern cpuop_func op_0e58_20_nf; extern cpuop_func op_0e58_20_ff; extern cpuop_func op_0e60_20_nf; extern cpuop_func op_0e60_20_ff; extern cpuop_func op_0e68_20_nf; extern cpuop_func op_0e68_20_ff; extern cpuop_func op_0e70_20_nf; extern cpuop_func op_0e70_20_ff; extern cpuop_func op_0e78_20_nf; extern cpuop_func op_0e78_20_ff; extern cpuop_func op_0e79_20_nf; extern cpuop_func op_0e79_20_ff; extern cpuop_func op_0e90_20_nf; extern cpuop_func op_0e90_20_ff; extern cpuop_func op_0e98_20_nf; extern cpuop_func op_0e98_20_ff; extern cpuop_func op_0ea0_20_nf; extern cpuop_func op_0ea0_20_ff; extern cpuop_func op_0ea8_20_nf; extern cpuop_func op_0ea8_20_ff; extern cpuop_func op_0eb0_20_nf; extern cpuop_func op_0eb0_20_ff; extern cpuop_func op_0eb8_20_nf; extern cpuop_func op_0eb8_20_ff; extern cpuop_func op_0eb9_20_nf; extern cpuop_func op_0eb9_20_ff; extern cpuop_func op_0ed0_20_nf; extern cpuop_func op_0ed0_20_ff; extern cpuop_func op_0ed8_20_nf; extern cpuop_func op_0ed8_20_ff; extern cpuop_func op_0ee0_20_nf; extern cpuop_func op_0ee0_20_ff; extern cpuop_func op_0ee8_20_nf; extern cpuop_func op_0ee8_20_ff; extern cpuop_func op_0ef0_20_nf; extern cpuop_func op_0ef0_20_ff; extern cpuop_func op_0ef8_20_nf; extern cpuop_func op_0ef8_20_ff; extern cpuop_func op_0ef9_20_nf; extern cpuop_func op_0ef9_20_ff; extern cpuop_func op_0efc_20_nf; extern cpuop_func op_0efc_20_ff; extern cpuop_func op_1000_20_nf; extern cpuop_func op_1000_20_ff; extern cpuop_func op_1010_20_nf; extern cpuop_func op_1010_20_ff; extern cpuop_func op_1018_20_nf; extern cpuop_func op_1018_20_ff; extern cpuop_func op_1020_20_nf; extern cpuop_func op_1020_20_ff; extern cpuop_func op_1028_20_nf; extern cpuop_func op_1028_20_ff; extern cpuop_func op_1030_20_nf; extern cpuop_func op_1030_20_ff; extern cpuop_func op_1038_20_nf; extern cpuop_func op_1038_20_ff; extern cpuop_func op_1039_20_nf; extern cpuop_func op_1039_20_ff; extern cpuop_func op_103a_20_nf; extern cpuop_func op_103a_20_ff; extern cpuop_func op_103b_20_nf; extern cpuop_func op_103b_20_ff; extern cpuop_func op_103c_20_nf; extern cpuop_func op_103c_20_ff; extern cpuop_func op_1080_20_nf; extern cpuop_func op_1080_20_ff; extern cpuop_func op_1090_20_nf; extern cpuop_func op_1090_20_ff; extern cpuop_func op_1098_20_nf; extern cpuop_func op_1098_20_ff; extern cpuop_func op_10a0_20_nf; extern cpuop_func op_10a0_20_ff; extern cpuop_func op_10a8_20_nf; extern cpuop_func op_10a8_20_ff; extern cpuop_func op_10b0_20_nf; extern cpuop_func op_10b0_20_ff; extern cpuop_func op_10b8_20_nf; extern cpuop_func op_10b8_20_ff; extern cpuop_func op_10b9_20_nf; extern cpuop_func op_10b9_20_ff; extern cpuop_func op_10ba_20_nf; extern cpuop_func op_10ba_20_ff; extern cpuop_func op_10bb_20_nf; extern cpuop_func op_10bb_20_ff; extern cpuop_func op_10bc_20_nf; extern cpuop_func op_10bc_20_ff; extern cpuop_func op_10c0_20_nf; extern cpuop_func op_10c0_20_ff; extern cpuop_func op_10d0_20_nf; extern cpuop_func op_10d0_20_ff; extern cpuop_func op_10d8_20_nf; extern cpuop_func op_10d8_20_ff; extern cpuop_func op_10e0_20_nf; extern cpuop_func op_10e0_20_ff; extern cpuop_func op_10e8_20_nf; extern cpuop_func op_10e8_20_ff; extern cpuop_func op_10f0_20_nf; extern cpuop_func op_10f0_20_ff; extern cpuop_func op_10f8_20_nf; extern cpuop_func op_10f8_20_ff; extern cpuop_func op_10f9_20_nf; extern cpuop_func op_10f9_20_ff; extern cpuop_func op_10fa_20_nf; extern cpuop_func op_10fa_20_ff; extern cpuop_func op_10fb_20_nf; extern cpuop_func op_10fb_20_ff; extern cpuop_func op_10fc_20_nf; extern cpuop_func op_10fc_20_ff; extern cpuop_func op_1100_20_nf; extern cpuop_func op_1100_20_ff; extern cpuop_func op_1110_20_nf; extern cpuop_func op_1110_20_ff; extern cpuop_func op_1118_20_nf; extern cpuop_func op_1118_20_ff; extern cpuop_func op_1120_20_nf; extern cpuop_func op_1120_20_ff; extern cpuop_func op_1128_20_nf; extern cpuop_func op_1128_20_ff; extern cpuop_func op_1130_20_nf; extern cpuop_func op_1130_20_ff; extern cpuop_func op_1138_20_nf; extern cpuop_func op_1138_20_ff; extern cpuop_func op_1139_20_nf; extern cpuop_func op_1139_20_ff; extern cpuop_func op_113a_20_nf; extern cpuop_func op_113a_20_ff; extern cpuop_func op_113b_20_nf; extern cpuop_func op_113b_20_ff; extern cpuop_func op_113c_20_nf; extern cpuop_func op_113c_20_ff; extern cpuop_func op_1140_20_nf; extern cpuop_func op_1140_20_ff; extern cpuop_func op_1150_20_nf; extern cpuop_func op_1150_20_ff; extern cpuop_func op_1158_20_nf; extern cpuop_func op_1158_20_ff; extern cpuop_func op_1160_20_nf; extern cpuop_func op_1160_20_ff; extern cpuop_func op_1168_20_nf; extern cpuop_func op_1168_20_ff; extern cpuop_func op_1170_20_nf; extern cpuop_func op_1170_20_ff; extern cpuop_func op_1178_20_nf; extern cpuop_func op_1178_20_ff; extern cpuop_func op_1179_20_nf; extern cpuop_func op_1179_20_ff; extern cpuop_func op_117a_20_nf; extern cpuop_func op_117a_20_ff; extern cpuop_func op_117b_20_nf; extern cpuop_func op_117b_20_ff; extern cpuop_func op_117c_20_nf; extern cpuop_func op_117c_20_ff; extern cpuop_func op_1180_20_nf; extern cpuop_func op_1180_20_ff; extern cpuop_func op_1190_20_nf; extern cpuop_func op_1190_20_ff; extern cpuop_func op_1198_20_nf; extern cpuop_func op_1198_20_ff; extern cpuop_func op_11a0_20_nf; extern cpuop_func op_11a0_20_ff; extern cpuop_func op_11a8_20_nf; extern cpuop_func op_11a8_20_ff; extern cpuop_func op_11b0_20_nf; extern cpuop_func op_11b0_20_ff; extern cpuop_func op_11b8_20_nf; extern cpuop_func op_11b8_20_ff; extern cpuop_func op_11b9_20_nf; extern cpuop_func op_11b9_20_ff; extern cpuop_func op_11ba_20_nf; extern cpuop_func op_11ba_20_ff; extern cpuop_func op_11bb_20_nf; extern cpuop_func op_11bb_20_ff; extern cpuop_func op_11bc_20_nf; extern cpuop_func op_11bc_20_ff; extern cpuop_func op_11c0_20_nf; extern cpuop_func op_11c0_20_ff; extern cpuop_func op_11d0_20_nf; extern cpuop_func op_11d0_20_ff; extern cpuop_func op_11d8_20_nf; extern cpuop_func op_11d8_20_ff; extern cpuop_func op_11e0_20_nf; extern cpuop_func op_11e0_20_ff; extern cpuop_func op_11e8_20_nf; extern cpuop_func op_11e8_20_ff; extern cpuop_func op_11f0_20_nf; extern cpuop_func op_11f0_20_ff; extern cpuop_func op_11f8_20_nf; extern cpuop_func op_11f8_20_ff; extern cpuop_func op_11f9_20_nf; extern cpuop_func op_11f9_20_ff; extern cpuop_func op_11fa_20_nf; extern cpuop_func op_11fa_20_ff; extern cpuop_func op_11fb_20_nf; extern cpuop_func op_11fb_20_ff; extern cpuop_func op_11fc_20_nf; extern cpuop_func op_11fc_20_ff; extern cpuop_func op_13c0_20_nf; extern cpuop_func op_13c0_20_ff; extern cpuop_func op_13d0_20_nf; extern cpuop_func op_13d0_20_ff; extern cpuop_func op_13d8_20_nf; extern cpuop_func op_13d8_20_ff; extern cpuop_func op_13e0_20_nf; extern cpuop_func op_13e0_20_ff; extern cpuop_func op_13e8_20_nf; extern cpuop_func op_13e8_20_ff; extern cpuop_func op_13f0_20_nf; extern cpuop_func op_13f0_20_ff; extern cpuop_func op_13f8_20_nf; extern cpuop_func op_13f8_20_ff; extern cpuop_func op_13f9_20_nf; extern cpuop_func op_13f9_20_ff; extern cpuop_func op_13fa_20_nf; extern cpuop_func op_13fa_20_ff; extern cpuop_func op_13fb_20_nf; extern cpuop_func op_13fb_20_ff; extern cpuop_func op_13fc_20_nf; extern cpuop_func op_13fc_20_ff; extern cpuop_func op_2000_20_nf; extern cpuop_func op_2000_20_ff; extern cpuop_func op_2008_20_nf; extern cpuop_func op_2008_20_ff; extern cpuop_func op_2010_20_nf; extern cpuop_func op_2010_20_ff; extern cpuop_func op_2018_20_nf; extern cpuop_func op_2018_20_ff; extern cpuop_func op_2020_20_nf; extern cpuop_func op_2020_20_ff; extern cpuop_func op_2028_20_nf; extern cpuop_func op_2028_20_ff; extern cpuop_func op_2030_20_nf; extern cpuop_func op_2030_20_ff; extern cpuop_func op_2038_20_nf; extern cpuop_func op_2038_20_ff; extern cpuop_func op_2039_20_nf; extern cpuop_func op_2039_20_ff; extern cpuop_func op_203a_20_nf; extern cpuop_func op_203a_20_ff; extern cpuop_func op_203b_20_nf; extern cpuop_func op_203b_20_ff; extern cpuop_func op_203c_20_nf; extern cpuop_func op_203c_20_ff; extern cpuop_func op_2040_20_nf; extern cpuop_func op_2040_20_ff; extern cpuop_func op_2048_20_nf; extern cpuop_func op_2048_20_ff; extern cpuop_func op_2050_20_nf; extern cpuop_func op_2050_20_ff; extern cpuop_func op_2058_20_nf; extern cpuop_func op_2058_20_ff; extern cpuop_func op_2060_20_nf; extern cpuop_func op_2060_20_ff; extern cpuop_func op_2068_20_nf; extern cpuop_func op_2068_20_ff; extern cpuop_func op_2070_20_nf; extern cpuop_func op_2070_20_ff; extern cpuop_func op_2078_20_nf; extern cpuop_func op_2078_20_ff; extern cpuop_func op_2079_20_nf; extern cpuop_func op_2079_20_ff; extern cpuop_func op_207a_20_nf; extern cpuop_func op_207a_20_ff; extern cpuop_func op_207b_20_nf; extern cpuop_func op_207b_20_ff; extern cpuop_func op_207c_20_nf; extern cpuop_func op_207c_20_ff; extern cpuop_func op_2080_20_nf; extern cpuop_func op_2080_20_ff; extern cpuop_func op_2088_20_nf; extern cpuop_func op_2088_20_ff; extern cpuop_func op_2090_20_nf; extern cpuop_func op_2090_20_ff; extern cpuop_func op_2098_20_nf; extern cpuop_func op_2098_20_ff; extern cpuop_func op_20a0_20_nf; extern cpuop_func op_20a0_20_ff; extern cpuop_func op_20a8_20_nf; extern cpuop_func op_20a8_20_ff; extern cpuop_func op_20b0_20_nf; extern cpuop_func op_20b0_20_ff; extern cpuop_func op_20b8_20_nf; extern cpuop_func op_20b8_20_ff; extern cpuop_func op_20b9_20_nf; extern cpuop_func op_20b9_20_ff; extern cpuop_func op_20ba_20_nf; extern cpuop_func op_20ba_20_ff; extern cpuop_func op_20bb_20_nf; extern cpuop_func op_20bb_20_ff; extern cpuop_func op_20bc_20_nf; extern cpuop_func op_20bc_20_ff; extern cpuop_func op_20c0_20_nf; extern cpuop_func op_20c0_20_ff; extern cpuop_func op_20c8_20_nf; extern cpuop_func op_20c8_20_ff; extern cpuop_func op_20d0_20_nf; extern cpuop_func op_20d0_20_ff; extern cpuop_func op_20d8_20_nf; extern cpuop_func op_20d8_20_ff; extern cpuop_func op_20e0_20_nf; extern cpuop_func op_20e0_20_ff; extern cpuop_func op_20e8_20_nf; extern cpuop_func op_20e8_20_ff; extern cpuop_func op_20f0_20_nf; extern cpuop_func op_20f0_20_ff; extern cpuop_func op_20f8_20_nf; extern cpuop_func op_20f8_20_ff; extern cpuop_func op_20f9_20_nf; extern cpuop_func op_20f9_20_ff; extern cpuop_func op_20fa_20_nf; extern cpuop_func op_20fa_20_ff; extern cpuop_func op_20fb_20_nf; extern cpuop_func op_20fb_20_ff; extern cpuop_func op_20fc_20_nf; extern cpuop_func op_20fc_20_ff; extern cpuop_func op_2100_20_nf; extern cpuop_func op_2100_20_ff; extern cpuop_func op_2108_20_nf; extern cpuop_func op_2108_20_ff; extern cpuop_func op_2110_20_nf; extern cpuop_func op_2110_20_ff; extern cpuop_func op_2118_20_nf; extern cpuop_func op_2118_20_ff; extern cpuop_func op_2120_20_nf; extern cpuop_func op_2120_20_ff; extern cpuop_func op_2128_20_nf; extern cpuop_func op_2128_20_ff; extern cpuop_func op_2130_20_nf; extern cpuop_func op_2130_20_ff; extern cpuop_func op_2138_20_nf; extern cpuop_func op_2138_20_ff; extern cpuop_func op_2139_20_nf; extern cpuop_func op_2139_20_ff; extern cpuop_func op_213a_20_nf; extern cpuop_func op_213a_20_ff; extern cpuop_func op_213b_20_nf; extern cpuop_func op_213b_20_ff; extern cpuop_func op_213c_20_nf; extern cpuop_func op_213c_20_ff; extern cpuop_func op_2140_20_nf; extern cpuop_func op_2140_20_ff; extern cpuop_func op_2148_20_nf; extern cpuop_func op_2148_20_ff; extern cpuop_func op_2150_20_nf; extern cpuop_func op_2150_20_ff; extern cpuop_func op_2158_20_nf; extern cpuop_func op_2158_20_ff; extern cpuop_func op_2160_20_nf; extern cpuop_func op_2160_20_ff; extern cpuop_func op_2168_20_nf; extern cpuop_func op_2168_20_ff; extern cpuop_func op_2170_20_nf; extern cpuop_func op_2170_20_ff; extern cpuop_func op_2178_20_nf; extern cpuop_func op_2178_20_ff; extern cpuop_func op_2179_20_nf; extern cpuop_func op_2179_20_ff; extern cpuop_func op_217a_20_nf; extern cpuop_func op_217a_20_ff; extern cpuop_func op_217b_20_nf; extern cpuop_func op_217b_20_ff; extern cpuop_func op_217c_20_nf; extern cpuop_func op_217c_20_ff; extern cpuop_func op_2180_20_nf; extern cpuop_func op_2180_20_ff; extern cpuop_func op_2188_20_nf; extern cpuop_func op_2188_20_ff; extern cpuop_func op_2190_20_nf; extern cpuop_func op_2190_20_ff; extern cpuop_func op_2198_20_nf; extern cpuop_func op_2198_20_ff; extern cpuop_func op_21a0_20_nf; extern cpuop_func op_21a0_20_ff; extern cpuop_func op_21a8_20_nf; extern cpuop_func op_21a8_20_ff; extern cpuop_func op_21b0_20_nf; extern cpuop_func op_21b0_20_ff; extern cpuop_func op_21b8_20_nf; extern cpuop_func op_21b8_20_ff; extern cpuop_func op_21b9_20_nf; extern cpuop_func op_21b9_20_ff; extern cpuop_func op_21ba_20_nf; extern cpuop_func op_21ba_20_ff; extern cpuop_func op_21bb_20_nf; extern cpuop_func op_21bb_20_ff; extern cpuop_func op_21bc_20_nf; extern cpuop_func op_21bc_20_ff; extern cpuop_func op_21c0_20_nf; extern cpuop_func op_21c0_20_ff; extern cpuop_func op_21c8_20_nf; extern cpuop_func op_21c8_20_ff; extern cpuop_func op_21d0_20_nf; extern cpuop_func op_21d0_20_ff; extern cpuop_func op_21d8_20_nf; extern cpuop_func op_21d8_20_ff; extern cpuop_func op_21e0_20_nf; extern cpuop_func op_21e0_20_ff; extern cpuop_func op_21e8_20_nf; extern cpuop_func op_21e8_20_ff; extern cpuop_func op_21f0_20_nf; extern cpuop_func op_21f0_20_ff; extern cpuop_func op_21f8_20_nf; extern cpuop_func op_21f8_20_ff; extern cpuop_func op_21f9_20_nf; extern cpuop_func op_21f9_20_ff; extern cpuop_func op_21fa_20_nf; extern cpuop_func op_21fa_20_ff; extern cpuop_func op_21fb_20_nf; extern cpuop_func op_21fb_20_ff; extern cpuop_func op_21fc_20_nf; extern cpuop_func op_21fc_20_ff; extern cpuop_func op_23c0_20_nf; extern cpuop_func op_23c0_20_ff; extern cpuop_func op_23c8_20_nf; extern cpuop_func op_23c8_20_ff; extern cpuop_func op_23d0_20_nf; extern cpuop_func op_23d0_20_ff; extern cpuop_func op_23d8_20_nf; extern cpuop_func op_23d8_20_ff; extern cpuop_func op_23e0_20_nf; extern cpuop_func op_23e0_20_ff; extern cpuop_func op_23e8_20_nf; extern cpuop_func op_23e8_20_ff; extern cpuop_func op_23f0_20_nf; extern cpuop_func op_23f0_20_ff; extern cpuop_func op_23f8_20_nf; extern cpuop_func op_23f8_20_ff; extern cpuop_func op_23f9_20_nf; extern cpuop_func op_23f9_20_ff; extern cpuop_func op_23fa_20_nf; extern cpuop_func op_23fa_20_ff; extern cpuop_func op_23fb_20_nf; extern cpuop_func op_23fb_20_ff; extern cpuop_func op_23fc_20_nf; extern cpuop_func op_23fc_20_ff; extern cpuop_func op_3000_20_nf; extern cpuop_func op_3000_20_ff; extern cpuop_func op_3008_20_nf; extern cpuop_func op_3008_20_ff; extern cpuop_func op_3010_20_nf; extern cpuop_func op_3010_20_ff; extern cpuop_func op_3018_20_nf; extern cpuop_func op_3018_20_ff; extern cpuop_func op_3020_20_nf; extern cpuop_func op_3020_20_ff; extern cpuop_func op_3028_20_nf; extern cpuop_func op_3028_20_ff; extern cpuop_func op_3030_20_nf; extern cpuop_func op_3030_20_ff; extern cpuop_func op_3038_20_nf; extern cpuop_func op_3038_20_ff; extern cpuop_func op_3039_20_nf; extern cpuop_func op_3039_20_ff; extern cpuop_func op_303a_20_nf; extern cpuop_func op_303a_20_ff; extern cpuop_func op_303b_20_nf; extern cpuop_func op_303b_20_ff; extern cpuop_func op_303c_20_nf; extern cpuop_func op_303c_20_ff; extern cpuop_func op_3040_20_nf; extern cpuop_func op_3040_20_ff; extern cpuop_func op_3048_20_nf; extern cpuop_func op_3048_20_ff; extern cpuop_func op_3050_20_nf; extern cpuop_func op_3050_20_ff; extern cpuop_func op_3058_20_nf; extern cpuop_func op_3058_20_ff; extern cpuop_func op_3060_20_nf; extern cpuop_func op_3060_20_ff; extern cpuop_func op_3068_20_nf; extern cpuop_func op_3068_20_ff; extern cpuop_func op_3070_20_nf; extern cpuop_func op_3070_20_ff; extern cpuop_func op_3078_20_nf; extern cpuop_func op_3078_20_ff; extern cpuop_func op_3079_20_nf; extern cpuop_func op_3079_20_ff; extern cpuop_func op_307a_20_nf; extern cpuop_func op_307a_20_ff; extern cpuop_func op_307b_20_nf; extern cpuop_func op_307b_20_ff; extern cpuop_func op_307c_20_nf; extern cpuop_func op_307c_20_ff; extern cpuop_func op_3080_20_nf; extern cpuop_func op_3080_20_ff; extern cpuop_func op_3088_20_nf; extern cpuop_func op_3088_20_ff; extern cpuop_func op_3090_20_nf; extern cpuop_func op_3090_20_ff; extern cpuop_func op_3098_20_nf; extern cpuop_func op_3098_20_ff; extern cpuop_func op_30a0_20_nf; extern cpuop_func op_30a0_20_ff; extern cpuop_func op_30a8_20_nf; extern cpuop_func op_30a8_20_ff; extern cpuop_func op_30b0_20_nf; extern cpuop_func op_30b0_20_ff; extern cpuop_func op_30b8_20_nf; extern cpuop_func op_30b8_20_ff; extern cpuop_func op_30b9_20_nf; extern cpuop_func op_30b9_20_ff; extern cpuop_func op_30ba_20_nf; extern cpuop_func op_30ba_20_ff; extern cpuop_func op_30bb_20_nf; extern cpuop_func op_30bb_20_ff; extern cpuop_func op_30bc_20_nf; extern cpuop_func op_30bc_20_ff; extern cpuop_func op_30c0_20_nf; extern cpuop_func op_30c0_20_ff; extern cpuop_func op_30c8_20_nf; extern cpuop_func op_30c8_20_ff; extern cpuop_func op_30d0_20_nf; extern cpuop_func op_30d0_20_ff; extern cpuop_func op_30d8_20_nf; extern cpuop_func op_30d8_20_ff; extern cpuop_func op_30e0_20_nf; extern cpuop_func op_30e0_20_ff; extern cpuop_func op_30e8_20_nf; extern cpuop_func op_30e8_20_ff; extern cpuop_func op_30f0_20_nf; extern cpuop_func op_30f0_20_ff; extern cpuop_func op_30f8_20_nf; extern cpuop_func op_30f8_20_ff; extern cpuop_func op_30f9_20_nf; extern cpuop_func op_30f9_20_ff; extern cpuop_func op_30fa_20_nf; extern cpuop_func op_30fa_20_ff; extern cpuop_func op_30fb_20_nf; extern cpuop_func op_30fb_20_ff; extern cpuop_func op_30fc_20_nf; extern cpuop_func op_30fc_20_ff; extern cpuop_func op_3100_20_nf; extern cpuop_func op_3100_20_ff; extern cpuop_func op_3108_20_nf; extern cpuop_func op_3108_20_ff; extern cpuop_func op_3110_20_nf; extern cpuop_func op_3110_20_ff; extern cpuop_func op_3118_20_nf; extern cpuop_func op_3118_20_ff; extern cpuop_func op_3120_20_nf; extern cpuop_func op_3120_20_ff; extern cpuop_func op_3128_20_nf; extern cpuop_func op_3128_20_ff; extern cpuop_func op_3130_20_nf; extern cpuop_func op_3130_20_ff; extern cpuop_func op_3138_20_nf; extern cpuop_func op_3138_20_ff; extern cpuop_func op_3139_20_nf; extern cpuop_func op_3139_20_ff; extern cpuop_func op_313a_20_nf; extern cpuop_func op_313a_20_ff; extern cpuop_func op_313b_20_nf; extern cpuop_func op_313b_20_ff; extern cpuop_func op_313c_20_nf; extern cpuop_func op_313c_20_ff; extern cpuop_func op_3140_20_nf; extern cpuop_func op_3140_20_ff; extern cpuop_func op_3148_20_nf; extern cpuop_func op_3148_20_ff; extern cpuop_func op_3150_20_nf; extern cpuop_func op_3150_20_ff; extern cpuop_func op_3158_20_nf; extern cpuop_func op_3158_20_ff; extern cpuop_func op_3160_20_nf; extern cpuop_func op_3160_20_ff; extern cpuop_func op_3168_20_nf; extern cpuop_func op_3168_20_ff; extern cpuop_func op_3170_20_nf; extern cpuop_func op_3170_20_ff; extern cpuop_func op_3178_20_nf; extern cpuop_func op_3178_20_ff; extern cpuop_func op_3179_20_nf; extern cpuop_func op_3179_20_ff; extern cpuop_func op_317a_20_nf; extern cpuop_func op_317a_20_ff; extern cpuop_func op_317b_20_nf; extern cpuop_func op_317b_20_ff; extern cpuop_func op_317c_20_nf; extern cpuop_func op_317c_20_ff; extern cpuop_func op_3180_20_nf; extern cpuop_func op_3180_20_ff; extern cpuop_func op_3188_20_nf; extern cpuop_func op_3188_20_ff; extern cpuop_func op_3190_20_nf; extern cpuop_func op_3190_20_ff; extern cpuop_func op_3198_20_nf; extern cpuop_func op_3198_20_ff; extern cpuop_func op_31a0_20_nf; extern cpuop_func op_31a0_20_ff; extern cpuop_func op_31a8_20_nf; extern cpuop_func op_31a8_20_ff; extern cpuop_func op_31b0_20_nf; extern cpuop_func op_31b0_20_ff; extern cpuop_func op_31b8_20_nf; extern cpuop_func op_31b8_20_ff; extern cpuop_func op_31b9_20_nf; extern cpuop_func op_31b9_20_ff; extern cpuop_func op_31ba_20_nf; extern cpuop_func op_31ba_20_ff; extern cpuop_func op_31bb_20_nf; extern cpuop_func op_31bb_20_ff; extern cpuop_func op_31bc_20_nf; extern cpuop_func op_31bc_20_ff; extern cpuop_func op_31c0_20_nf; extern cpuop_func op_31c0_20_ff; extern cpuop_func op_31c8_20_nf; extern cpuop_func op_31c8_20_ff; extern cpuop_func op_31d0_20_nf; extern cpuop_func op_31d0_20_ff; extern cpuop_func op_31d8_20_nf; extern cpuop_func op_31d8_20_ff; extern cpuop_func op_31e0_20_nf; extern cpuop_func op_31e0_20_ff; extern cpuop_func op_31e8_20_nf; extern cpuop_func op_31e8_20_ff; extern cpuop_func op_31f0_20_nf; extern cpuop_func op_31f0_20_ff; extern cpuop_func op_31f8_20_nf; extern cpuop_func op_31f8_20_ff; extern cpuop_func op_31f9_20_nf; extern cpuop_func op_31f9_20_ff; extern cpuop_func op_31fa_20_nf; extern cpuop_func op_31fa_20_ff; extern cpuop_func op_31fb_20_nf; extern cpuop_func op_31fb_20_ff; extern cpuop_func op_31fc_20_nf; extern cpuop_func op_31fc_20_ff; extern cpuop_func op_33c0_20_nf; extern cpuop_func op_33c0_20_ff; extern cpuop_func op_33c8_20_nf; extern cpuop_func op_33c8_20_ff; extern cpuop_func op_33d0_20_nf; extern cpuop_func op_33d0_20_ff; extern cpuop_func op_33d8_20_nf; extern cpuop_func op_33d8_20_ff; extern cpuop_func op_33e0_20_nf; extern cpuop_func op_33e0_20_ff; extern cpuop_func op_33e8_20_nf; extern cpuop_func op_33e8_20_ff; extern cpuop_func op_33f0_20_nf; extern cpuop_func op_33f0_20_ff; extern cpuop_func op_33f8_20_nf; extern cpuop_func op_33f8_20_ff; extern cpuop_func op_33f9_20_nf; extern cpuop_func op_33f9_20_ff; extern cpuop_func op_33fa_20_nf; extern cpuop_func op_33fa_20_ff; extern cpuop_func op_33fb_20_nf; extern cpuop_func op_33fb_20_ff; extern cpuop_func op_33fc_20_nf; extern cpuop_func op_33fc_20_ff; extern cpuop_func op_4000_20_nf; extern cpuop_func op_4000_20_ff; extern cpuop_func op_4010_20_nf; extern cpuop_func op_4010_20_ff; extern cpuop_func op_4018_20_nf; extern cpuop_func op_4018_20_ff; extern cpuop_func op_4020_20_nf; extern cpuop_func op_4020_20_ff; extern cpuop_func op_4028_20_nf; extern cpuop_func op_4028_20_ff; extern cpuop_func op_4030_20_nf; extern cpuop_func op_4030_20_ff; extern cpuop_func op_4038_20_nf; extern cpuop_func op_4038_20_ff; extern cpuop_func op_4039_20_nf; extern cpuop_func op_4039_20_ff; extern cpuop_func op_4040_20_nf; extern cpuop_func op_4040_20_ff; extern cpuop_func op_4050_20_nf; extern cpuop_func op_4050_20_ff; extern cpuop_func op_4058_20_nf; extern cpuop_func op_4058_20_ff; extern cpuop_func op_4060_20_nf; extern cpuop_func op_4060_20_ff; extern cpuop_func op_4068_20_nf; extern cpuop_func op_4068_20_ff; extern cpuop_func op_4070_20_nf; extern cpuop_func op_4070_20_ff; extern cpuop_func op_4078_20_nf; extern cpuop_func op_4078_20_ff; extern cpuop_func op_4079_20_nf; extern cpuop_func op_4079_20_ff; extern cpuop_func op_4080_20_nf; extern cpuop_func op_4080_20_ff; extern cpuop_func op_4090_20_nf; extern cpuop_func op_4090_20_ff; extern cpuop_func op_4098_20_nf; extern cpuop_func op_4098_20_ff; extern cpuop_func op_40a0_20_nf; extern cpuop_func op_40a0_20_ff; extern cpuop_func op_40a8_20_nf; extern cpuop_func op_40a8_20_ff; extern cpuop_func op_40b0_20_nf; extern cpuop_func op_40b0_20_ff; extern cpuop_func op_40b8_20_nf; extern cpuop_func op_40b8_20_ff; extern cpuop_func op_40b9_20_nf; extern cpuop_func op_40b9_20_ff; extern cpuop_func op_40c0_20_nf; extern cpuop_func op_40c0_20_ff; extern cpuop_func op_40d0_20_nf; extern cpuop_func op_40d0_20_ff; extern cpuop_func op_40d8_20_nf; extern cpuop_func op_40d8_20_ff; extern cpuop_func op_40e0_20_nf; extern cpuop_func op_40e0_20_ff; extern cpuop_func op_40e8_20_nf; extern cpuop_func op_40e8_20_ff; extern cpuop_func op_40f0_20_nf; extern cpuop_func op_40f0_20_ff; extern cpuop_func op_40f8_20_nf; extern cpuop_func op_40f8_20_ff; extern cpuop_func op_40f9_20_nf; extern cpuop_func op_40f9_20_ff; extern cpuop_func op_4100_20_nf; extern cpuop_func op_4100_20_ff; extern cpuop_func op_4110_20_nf; extern cpuop_func op_4110_20_ff; extern cpuop_func op_4118_20_nf; extern cpuop_func op_4118_20_ff; extern cpuop_func op_4120_20_nf; extern cpuop_func op_4120_20_ff; extern cpuop_func op_4128_20_nf; extern cpuop_func op_4128_20_ff; extern cpuop_func op_4130_20_nf; extern cpuop_func op_4130_20_ff; extern cpuop_func op_4138_20_nf; extern cpuop_func op_4138_20_ff; extern cpuop_func op_4139_20_nf; extern cpuop_func op_4139_20_ff; extern cpuop_func op_413a_20_nf; extern cpuop_func op_413a_20_ff; extern cpuop_func op_413b_20_nf; extern cpuop_func op_413b_20_ff; extern cpuop_func op_413c_20_nf; extern cpuop_func op_413c_20_ff; extern cpuop_func op_4180_20_nf; extern cpuop_func op_4180_20_ff; extern cpuop_func op_4190_20_nf; extern cpuop_func op_4190_20_ff; extern cpuop_func op_4198_20_nf; extern cpuop_func op_4198_20_ff; extern cpuop_func op_41a0_20_nf; extern cpuop_func op_41a0_20_ff; extern cpuop_func op_41a8_20_nf; extern cpuop_func op_41a8_20_ff; extern cpuop_func op_41b0_20_nf; extern cpuop_func op_41b0_20_ff; extern cpuop_func op_41b8_20_nf; extern cpuop_func op_41b8_20_ff; extern cpuop_func op_41b9_20_nf; extern cpuop_func op_41b9_20_ff; extern cpuop_func op_41ba_20_nf; extern cpuop_func op_41ba_20_ff; extern cpuop_func op_41bb_20_nf; extern cpuop_func op_41bb_20_ff; extern cpuop_func op_41bc_20_nf; extern cpuop_func op_41bc_20_ff; extern cpuop_func op_41d0_20_nf; extern cpuop_func op_41d0_20_ff; extern cpuop_func op_41e8_20_nf; extern cpuop_func op_41e8_20_ff; extern cpuop_func op_41f0_20_nf; extern cpuop_func op_41f0_20_ff; extern cpuop_func op_41f8_20_nf; extern cpuop_func op_41f8_20_ff; extern cpuop_func op_41f9_20_nf; extern cpuop_func op_41f9_20_ff; extern cpuop_func op_41fa_20_nf; extern cpuop_func op_41fa_20_ff; extern cpuop_func op_41fb_20_nf; extern cpuop_func op_41fb_20_ff; extern cpuop_func op_4200_20_nf; extern cpuop_func op_4200_20_ff; extern cpuop_func op_4210_20_nf; extern cpuop_func op_4210_20_ff; extern cpuop_func op_4218_20_nf; extern cpuop_func op_4218_20_ff; extern cpuop_func op_4220_20_nf; extern cpuop_func op_4220_20_ff; extern cpuop_func op_4228_20_nf; extern cpuop_func op_4228_20_ff; extern cpuop_func op_4230_20_nf; extern cpuop_func op_4230_20_ff; extern cpuop_func op_4238_20_nf; extern cpuop_func op_4238_20_ff; extern cpuop_func op_4239_20_nf; extern cpuop_func op_4239_20_ff; extern cpuop_func op_4240_20_nf; extern cpuop_func op_4240_20_ff; extern cpuop_func op_4250_20_nf; extern cpuop_func op_4250_20_ff; extern cpuop_func op_4258_20_nf; extern cpuop_func op_4258_20_ff; extern cpuop_func op_4260_20_nf; extern cpuop_func op_4260_20_ff; extern cpuop_func op_4268_20_nf; extern cpuop_func op_4268_20_ff; extern cpuop_func op_4270_20_nf; extern cpuop_func op_4270_20_ff; extern cpuop_func op_4278_20_nf; extern cpuop_func op_4278_20_ff; extern cpuop_func op_4279_20_nf; extern cpuop_func op_4279_20_ff; extern cpuop_func op_4280_20_nf; extern cpuop_func op_4280_20_ff; extern cpuop_func op_4290_20_nf; extern cpuop_func op_4290_20_ff; extern cpuop_func op_4298_20_nf; extern cpuop_func op_4298_20_ff; extern cpuop_func op_42a0_20_nf; extern cpuop_func op_42a0_20_ff; extern cpuop_func op_42a8_20_nf; extern cpuop_func op_42a8_20_ff; extern cpuop_func op_42b0_20_nf; extern cpuop_func op_42b0_20_ff; extern cpuop_func op_42b8_20_nf; extern cpuop_func op_42b8_20_ff; extern cpuop_func op_42b9_20_nf; extern cpuop_func op_42b9_20_ff; extern cpuop_func op_42c0_20_nf; extern cpuop_func op_42c0_20_ff; extern cpuop_func op_42d0_20_nf; extern cpuop_func op_42d0_20_ff; extern cpuop_func op_42d8_20_nf; extern cpuop_func op_42d8_20_ff; extern cpuop_func op_42e0_20_nf; extern cpuop_func op_42e0_20_ff; extern cpuop_func op_42e8_20_nf; extern cpuop_func op_42e8_20_ff; extern cpuop_func op_42f0_20_nf; extern cpuop_func op_42f0_20_ff; extern cpuop_func op_42f8_20_nf; extern cpuop_func op_42f8_20_ff; extern cpuop_func op_42f9_20_nf; extern cpuop_func op_42f9_20_ff; extern cpuop_func op_4400_20_nf; extern cpuop_func op_4400_20_ff; extern cpuop_func op_4410_20_nf; extern cpuop_func op_4410_20_ff; extern cpuop_func op_4418_20_nf; extern cpuop_func op_4418_20_ff; extern cpuop_func op_4420_20_nf; extern cpuop_func op_4420_20_ff; extern cpuop_func op_4428_20_nf; extern cpuop_func op_4428_20_ff; extern cpuop_func op_4430_20_nf; extern cpuop_func op_4430_20_ff; extern cpuop_func op_4438_20_nf; extern cpuop_func op_4438_20_ff; extern cpuop_func op_4439_20_nf; extern cpuop_func op_4439_20_ff; extern cpuop_func op_4440_20_nf; extern cpuop_func op_4440_20_ff; extern cpuop_func op_4450_20_nf; extern cpuop_func op_4450_20_ff; extern cpuop_func op_4458_20_nf; extern cpuop_func op_4458_20_ff; extern cpuop_func op_4460_20_nf; extern cpuop_func op_4460_20_ff; extern cpuop_func op_4468_20_nf; extern cpuop_func op_4468_20_ff; extern cpuop_func op_4470_20_nf; extern cpuop_func op_4470_20_ff; extern cpuop_func op_4478_20_nf; extern cpuop_func op_4478_20_ff; extern cpuop_func op_4479_20_nf; extern cpuop_func op_4479_20_ff; extern cpuop_func op_4480_20_nf; extern cpuop_func op_4480_20_ff; extern cpuop_func op_4490_20_nf; extern cpuop_func op_4490_20_ff; extern cpuop_func op_4498_20_nf; extern cpuop_func op_4498_20_ff; extern cpuop_func op_44a0_20_nf; extern cpuop_func op_44a0_20_ff; extern cpuop_func op_44a8_20_nf; extern cpuop_func op_44a8_20_ff; extern cpuop_func op_44b0_20_nf; extern cpuop_func op_44b0_20_ff; extern cpuop_func op_44b8_20_nf; extern cpuop_func op_44b8_20_ff; extern cpuop_func op_44b9_20_nf; extern cpuop_func op_44b9_20_ff; extern cpuop_func op_44c0_20_nf; extern cpuop_func op_44c0_20_ff; extern cpuop_func op_44d0_20_nf; extern cpuop_func op_44d0_20_ff; extern cpuop_func op_44d8_20_nf; extern cpuop_func op_44d8_20_ff; extern cpuop_func op_44e0_20_nf; extern cpuop_func op_44e0_20_ff; extern cpuop_func op_44e8_20_nf; extern cpuop_func op_44e8_20_ff; extern cpuop_func op_44f0_20_nf; extern cpuop_func op_44f0_20_ff; extern cpuop_func op_44f8_20_nf; extern cpuop_func op_44f8_20_ff; extern cpuop_func op_44f9_20_nf; extern cpuop_func op_44f9_20_ff; extern cpuop_func op_44fa_20_nf; extern cpuop_func op_44fa_20_ff; extern cpuop_func op_44fb_20_nf; extern cpuop_func op_44fb_20_ff; extern cpuop_func op_44fc_20_nf; extern cpuop_func op_44fc_20_ff; extern cpuop_func op_4600_20_nf; extern cpuop_func op_4600_20_ff; extern cpuop_func op_4610_20_nf; extern cpuop_func op_4610_20_ff; extern cpuop_func op_4618_20_nf; extern cpuop_func op_4618_20_ff; extern cpuop_func op_4620_20_nf; extern cpuop_func op_4620_20_ff; extern cpuop_func op_4628_20_nf; extern cpuop_func op_4628_20_ff; extern cpuop_func op_4630_20_nf; extern cpuop_func op_4630_20_ff; extern cpuop_func op_4638_20_nf; extern cpuop_func op_4638_20_ff; extern cpuop_func op_4639_20_nf; extern cpuop_func op_4639_20_ff; extern cpuop_func op_4640_20_nf; extern cpuop_func op_4640_20_ff; extern cpuop_func op_4650_20_nf; extern cpuop_func op_4650_20_ff; extern cpuop_func op_4658_20_nf; extern cpuop_func op_4658_20_ff; extern cpuop_func op_4660_20_nf; extern cpuop_func op_4660_20_ff; extern cpuop_func op_4668_20_nf; extern cpuop_func op_4668_20_ff; extern cpuop_func op_4670_20_nf; extern cpuop_func op_4670_20_ff; extern cpuop_func op_4678_20_nf; extern cpuop_func op_4678_20_ff; extern cpuop_func op_4679_20_nf; extern cpuop_func op_4679_20_ff; extern cpuop_func op_4680_20_nf; extern cpuop_func op_4680_20_ff; extern cpuop_func op_4690_20_nf; extern cpuop_func op_4690_20_ff; extern cpuop_func op_4698_20_nf; extern cpuop_func op_4698_20_ff; extern cpuop_func op_46a0_20_nf; extern cpuop_func op_46a0_20_ff; extern cpuop_func op_46a8_20_nf; extern cpuop_func op_46a8_20_ff; extern cpuop_func op_46b0_20_nf; extern cpuop_func op_46b0_20_ff; extern cpuop_func op_46b8_20_nf; extern cpuop_func op_46b8_20_ff; extern cpuop_func op_46b9_20_nf; extern cpuop_func op_46b9_20_ff; extern cpuop_func op_46c0_20_nf; extern cpuop_func op_46c0_20_ff; extern cpuop_func op_46d0_20_nf; extern cpuop_func op_46d0_20_ff; extern cpuop_func op_46d8_20_nf; extern cpuop_func op_46d8_20_ff; extern cpuop_func op_46e0_20_nf; extern cpuop_func op_46e0_20_ff; extern cpuop_func op_46e8_20_nf; extern cpuop_func op_46e8_20_ff; extern cpuop_func op_46f0_20_nf; extern cpuop_func op_46f0_20_ff; extern cpuop_func op_46f8_20_nf; extern cpuop_func op_46f8_20_ff; extern cpuop_func op_46f9_20_nf; extern cpuop_func op_46f9_20_ff; extern cpuop_func op_46fa_20_nf; extern cpuop_func op_46fa_20_ff; extern cpuop_func op_46fb_20_nf; extern cpuop_func op_46fb_20_ff; extern cpuop_func op_46fc_20_nf; extern cpuop_func op_46fc_20_ff; extern cpuop_func op_4800_20_nf; extern cpuop_func op_4800_20_ff; extern cpuop_func op_4808_20_nf; extern cpuop_func op_4808_20_ff; extern cpuop_func op_4810_20_nf; extern cpuop_func op_4810_20_ff; extern cpuop_func op_4818_20_nf; extern cpuop_func op_4818_20_ff; extern cpuop_func op_4820_20_nf; extern cpuop_func op_4820_20_ff; extern cpuop_func op_4828_20_nf; extern cpuop_func op_4828_20_ff; extern cpuop_func op_4830_20_nf; extern cpuop_func op_4830_20_ff; extern cpuop_func op_4838_20_nf; extern cpuop_func op_4838_20_ff; extern cpuop_func op_4839_20_nf; extern cpuop_func op_4839_20_ff; extern cpuop_func op_4840_20_nf; extern cpuop_func op_4840_20_ff; extern cpuop_func op_4848_20_nf; extern cpuop_func op_4848_20_ff; extern cpuop_func op_4850_20_nf; extern cpuop_func op_4850_20_ff; extern cpuop_func op_4868_20_nf; extern cpuop_func op_4868_20_ff; extern cpuop_func op_4870_20_nf; extern cpuop_func op_4870_20_ff; extern cpuop_func op_4878_20_nf; extern cpuop_func op_4878_20_ff; extern cpuop_func op_4879_20_nf; extern cpuop_func op_4879_20_ff; extern cpuop_func op_487a_20_nf; extern cpuop_func op_487a_20_ff; extern cpuop_func op_487b_20_nf; extern cpuop_func op_487b_20_ff; extern cpuop_func op_4880_20_nf; extern cpuop_func op_4880_20_ff; extern cpuop_func op_4890_20_nf; extern cpuop_func op_4890_20_ff; extern cpuop_func op_48a0_20_nf; extern cpuop_func op_48a0_20_ff; extern cpuop_func op_48a8_20_nf; extern cpuop_func op_48a8_20_ff; extern cpuop_func op_48b0_20_nf; extern cpuop_func op_48b0_20_ff; extern cpuop_func op_48b8_20_nf; extern cpuop_func op_48b8_20_ff; extern cpuop_func op_48b9_20_nf; extern cpuop_func op_48b9_20_ff; extern cpuop_func op_48c0_20_nf; extern cpuop_func op_48c0_20_ff; extern cpuop_func op_48d0_20_nf; extern cpuop_func op_48d0_20_ff; extern cpuop_func op_48e0_20_nf; extern cpuop_func op_48e0_20_ff; extern cpuop_func op_48e8_20_nf; extern cpuop_func op_48e8_20_ff; extern cpuop_func op_48f0_20_nf; extern cpuop_func op_48f0_20_ff; extern cpuop_func op_48f8_20_nf; extern cpuop_func op_48f8_20_ff; extern cpuop_func op_48f9_20_nf; extern cpuop_func op_48f9_20_ff; extern cpuop_func op_49c0_20_nf; extern cpuop_func op_49c0_20_ff; extern cpuop_func op_4a00_20_nf; extern cpuop_func op_4a00_20_ff; extern cpuop_func op_4a10_20_nf; extern cpuop_func op_4a10_20_ff; extern cpuop_func op_4a18_20_nf; extern cpuop_func op_4a18_20_ff; extern cpuop_func op_4a20_20_nf; extern cpuop_func op_4a20_20_ff; extern cpuop_func op_4a28_20_nf; extern cpuop_func op_4a28_20_ff; extern cpuop_func op_4a30_20_nf; extern cpuop_func op_4a30_20_ff; extern cpuop_func op_4a38_20_nf; extern cpuop_func op_4a38_20_ff; extern cpuop_func op_4a39_20_nf; extern cpuop_func op_4a39_20_ff; extern cpuop_func op_4a3a_20_nf; extern cpuop_func op_4a3a_20_ff; extern cpuop_func op_4a3b_20_nf; extern cpuop_func op_4a3b_20_ff; extern cpuop_func op_4a3c_20_nf; extern cpuop_func op_4a3c_20_ff; extern cpuop_func op_4a40_20_nf; extern cpuop_func op_4a40_20_ff; extern cpuop_func op_4a48_20_nf; extern cpuop_func op_4a48_20_ff; extern cpuop_func op_4a50_20_nf; extern cpuop_func op_4a50_20_ff; extern cpuop_func op_4a58_20_nf; extern cpuop_func op_4a58_20_ff; extern cpuop_func op_4a60_20_nf; extern cpuop_func op_4a60_20_ff; extern cpuop_func op_4a68_20_nf; extern cpuop_func op_4a68_20_ff; extern cpuop_func op_4a70_20_nf; extern cpuop_func op_4a70_20_ff; extern cpuop_func op_4a78_20_nf; extern cpuop_func op_4a78_20_ff; extern cpuop_func op_4a79_20_nf; extern cpuop_func op_4a79_20_ff; extern cpuop_func op_4a7a_20_nf; extern cpuop_func op_4a7a_20_ff; extern cpuop_func op_4a7b_20_nf; extern cpuop_func op_4a7b_20_ff; extern cpuop_func op_4a7c_20_nf; extern cpuop_func op_4a7c_20_ff; extern cpuop_func op_4a80_20_nf; extern cpuop_func op_4a80_20_ff; extern cpuop_func op_4a88_20_nf; extern cpuop_func op_4a88_20_ff; extern cpuop_func op_4a90_20_nf; extern cpuop_func op_4a90_20_ff; extern cpuop_func op_4a98_20_nf; extern cpuop_func op_4a98_20_ff; extern cpuop_func op_4aa0_20_nf; extern cpuop_func op_4aa0_20_ff; extern cpuop_func op_4aa8_20_nf; extern cpuop_func op_4aa8_20_ff; extern cpuop_func op_4ab0_20_nf; extern cpuop_func op_4ab0_20_ff; extern cpuop_func op_4ab8_20_nf; extern cpuop_func op_4ab8_20_ff; extern cpuop_func op_4ab9_20_nf; extern cpuop_func op_4ab9_20_ff; extern cpuop_func op_4aba_20_nf; extern cpuop_func op_4aba_20_ff; extern cpuop_func op_4abb_20_nf; extern cpuop_func op_4abb_20_ff; extern cpuop_func op_4abc_20_nf; extern cpuop_func op_4abc_20_ff; extern cpuop_func op_4ac0_20_nf; extern cpuop_func op_4ac0_20_ff; extern cpuop_func op_4ad0_20_nf; extern cpuop_func op_4ad0_20_ff; extern cpuop_func op_4ad8_20_nf; extern cpuop_func op_4ad8_20_ff; extern cpuop_func op_4ae0_20_nf; extern cpuop_func op_4ae0_20_ff; extern cpuop_func op_4ae8_20_nf; extern cpuop_func op_4ae8_20_ff; extern cpuop_func op_4af0_20_nf; extern cpuop_func op_4af0_20_ff; extern cpuop_func op_4af8_20_nf; extern cpuop_func op_4af8_20_ff; extern cpuop_func op_4af9_20_nf; extern cpuop_func op_4af9_20_ff; extern cpuop_func op_4c00_20_nf; extern cpuop_func op_4c00_20_ff; extern cpuop_func op_4c10_20_nf; extern cpuop_func op_4c10_20_ff; extern cpuop_func op_4c18_20_nf; extern cpuop_func op_4c18_20_ff; extern cpuop_func op_4c20_20_nf; extern cpuop_func op_4c20_20_ff; extern cpuop_func op_4c28_20_nf; extern cpuop_func op_4c28_20_ff; extern cpuop_func op_4c30_20_nf; extern cpuop_func op_4c30_20_ff; extern cpuop_func op_4c38_20_nf; extern cpuop_func op_4c38_20_ff; extern cpuop_func op_4c39_20_nf; extern cpuop_func op_4c39_20_ff; extern cpuop_func op_4c3a_20_nf; extern cpuop_func op_4c3a_20_ff; extern cpuop_func op_4c3b_20_nf; extern cpuop_func op_4c3b_20_ff; extern cpuop_func op_4c3c_20_nf; extern cpuop_func op_4c3c_20_ff; extern cpuop_func op_4c40_20_nf; extern cpuop_func op_4c40_20_ff; extern cpuop_func op_4c50_20_nf; extern cpuop_func op_4c50_20_ff; extern cpuop_func op_4c58_20_nf; extern cpuop_func op_4c58_20_ff; extern cpuop_func op_4c60_20_nf; extern cpuop_func op_4c60_20_ff; extern cpuop_func op_4c68_20_nf; extern cpuop_func op_4c68_20_ff; extern cpuop_func op_4c70_20_nf; extern cpuop_func op_4c70_20_ff; extern cpuop_func op_4c78_20_nf; extern cpuop_func op_4c78_20_ff; extern cpuop_func op_4c79_20_nf; extern cpuop_func op_4c79_20_ff; extern cpuop_func op_4c7a_20_nf; extern cpuop_func op_4c7a_20_ff; extern cpuop_func op_4c7b_20_nf; extern cpuop_func op_4c7b_20_ff; extern cpuop_func op_4c7c_20_nf; extern cpuop_func op_4c7c_20_ff; extern cpuop_func op_4c90_20_nf; extern cpuop_func op_4c90_20_ff; extern cpuop_func op_4c98_20_nf; extern cpuop_func op_4c98_20_ff; extern cpuop_func op_4ca8_20_nf; extern cpuop_func op_4ca8_20_ff; extern cpuop_func op_4cb0_20_nf; extern cpuop_func op_4cb0_20_ff; extern cpuop_func op_4cb8_20_nf; extern cpuop_func op_4cb8_20_ff; extern cpuop_func op_4cb9_20_nf; extern cpuop_func op_4cb9_20_ff; extern cpuop_func op_4cba_20_nf; extern cpuop_func op_4cba_20_ff; extern cpuop_func op_4cbb_20_nf; extern cpuop_func op_4cbb_20_ff; extern cpuop_func op_4cd0_20_nf; extern cpuop_func op_4cd0_20_ff; extern cpuop_func op_4cd8_20_nf; extern cpuop_func op_4cd8_20_ff; extern cpuop_func op_4ce8_20_nf; extern cpuop_func op_4ce8_20_ff; extern cpuop_func op_4cf0_20_nf; extern cpuop_func op_4cf0_20_ff; extern cpuop_func op_4cf8_20_nf; extern cpuop_func op_4cf8_20_ff; extern cpuop_func op_4cf9_20_nf; extern cpuop_func op_4cf9_20_ff; extern cpuop_func op_4cfa_20_nf; extern cpuop_func op_4cfa_20_ff; extern cpuop_func op_4cfb_20_nf; extern cpuop_func op_4cfb_20_ff; extern cpuop_func op_4e40_20_nf; extern cpuop_func op_4e40_20_ff; extern cpuop_func op_4e50_20_nf; extern cpuop_func op_4e50_20_ff; extern cpuop_func op_4e58_20_nf; extern cpuop_func op_4e58_20_ff; extern cpuop_func op_4e60_20_nf; extern cpuop_func op_4e60_20_ff; extern cpuop_func op_4e68_20_nf; extern cpuop_func op_4e68_20_ff; extern cpuop_func op_4e70_20_nf; extern cpuop_func op_4e70_20_ff; extern cpuop_func op_4e71_20_nf; extern cpuop_func op_4e71_20_ff; extern cpuop_func op_4e72_20_nf; extern cpuop_func op_4e72_20_ff; extern cpuop_func op_4e73_20_nf; extern cpuop_func op_4e73_20_ff; extern cpuop_func op_4e74_20_nf; extern cpuop_func op_4e74_20_ff; extern cpuop_func op_4e75_20_nf; extern cpuop_func op_4e75_20_ff; extern cpuop_func op_4e76_20_nf; extern cpuop_func op_4e76_20_ff; extern cpuop_func op_4e77_20_nf; extern cpuop_func op_4e77_20_ff; extern cpuop_func op_4e7a_20_nf; extern cpuop_func op_4e7a_20_ff; extern cpuop_func op_4e7b_20_nf; extern cpuop_func op_4e7b_20_ff; extern cpuop_func op_4e90_20_nf; extern cpuop_func op_4e90_20_ff; extern cpuop_func op_4ea8_20_nf; extern cpuop_func op_4ea8_20_ff; extern cpuop_func op_4eb0_20_nf; extern cpuop_func op_4eb0_20_ff; extern cpuop_func op_4eb8_20_nf; extern cpuop_func op_4eb8_20_ff; extern cpuop_func op_4eb9_20_nf; extern cpuop_func op_4eb9_20_ff; extern cpuop_func op_4eba_20_nf; extern cpuop_func op_4eba_20_ff; extern cpuop_func op_4ebb_20_nf; extern cpuop_func op_4ebb_20_ff; extern cpuop_func op_4ed0_20_nf; extern cpuop_func op_4ed0_20_ff; extern cpuop_func op_4ee8_20_nf; extern cpuop_func op_4ee8_20_ff; extern cpuop_func op_4ef0_20_nf; extern cpuop_func op_4ef0_20_ff; extern cpuop_func op_4ef8_20_nf; extern cpuop_func op_4ef8_20_ff; extern cpuop_func op_4ef9_20_nf; extern cpuop_func op_4ef9_20_ff; extern cpuop_func op_4efa_20_nf; extern cpuop_func op_4efa_20_ff; extern cpuop_func op_4efb_20_nf; extern cpuop_func op_4efb_20_ff; extern cpuop_func op_5000_20_nf; extern cpuop_func op_5000_20_ff; extern cpuop_func op_5010_20_nf; extern cpuop_func op_5010_20_ff; extern cpuop_func op_5018_20_nf; extern cpuop_func op_5018_20_ff; extern cpuop_func op_5020_20_nf; extern cpuop_func op_5020_20_ff; extern cpuop_func op_5028_20_nf; extern cpuop_func op_5028_20_ff; extern cpuop_func op_5030_20_nf; extern cpuop_func op_5030_20_ff; extern cpuop_func op_5038_20_nf; extern cpuop_func op_5038_20_ff; extern cpuop_func op_5039_20_nf; extern cpuop_func op_5039_20_ff; extern cpuop_func op_5040_20_nf; extern cpuop_func op_5040_20_ff; extern cpuop_func op_5048_20_nf; extern cpuop_func op_5048_20_ff; extern cpuop_func op_5050_20_nf; extern cpuop_func op_5050_20_ff; extern cpuop_func op_5058_20_nf; extern cpuop_func op_5058_20_ff; extern cpuop_func op_5060_20_nf; extern cpuop_func op_5060_20_ff; extern cpuop_func op_5068_20_nf; extern cpuop_func op_5068_20_ff; extern cpuop_func op_5070_20_nf; extern cpuop_func op_5070_20_ff; extern cpuop_func op_5078_20_nf; extern cpuop_func op_5078_20_ff; extern cpuop_func op_5079_20_nf; extern cpuop_func op_5079_20_ff; extern cpuop_func op_5080_20_nf; extern cpuop_func op_5080_20_ff; extern cpuop_func op_5088_20_nf; extern cpuop_func op_5088_20_ff; extern cpuop_func op_5090_20_nf; extern cpuop_func op_5090_20_ff; extern cpuop_func op_5098_20_nf; extern cpuop_func op_5098_20_ff; extern cpuop_func op_50a0_20_nf; extern cpuop_func op_50a0_20_ff; extern cpuop_func op_50a8_20_nf; extern cpuop_func op_50a8_20_ff; extern cpuop_func op_50b0_20_nf; extern cpuop_func op_50b0_20_ff; extern cpuop_func op_50b8_20_nf; extern cpuop_func op_50b8_20_ff; extern cpuop_func op_50b9_20_nf; extern cpuop_func op_50b9_20_ff; extern cpuop_func op_50c0_20_nf; extern cpuop_func op_50c0_20_ff; extern cpuop_func op_50c8_20_nf; extern cpuop_func op_50c8_20_ff; extern cpuop_func op_50d0_20_nf; extern cpuop_func op_50d0_20_ff; extern cpuop_func op_50d8_20_nf; extern cpuop_func op_50d8_20_ff; extern cpuop_func op_50e0_20_nf; extern cpuop_func op_50e0_20_ff; extern cpuop_func op_50e8_20_nf; extern cpuop_func op_50e8_20_ff; extern cpuop_func op_50f0_20_nf; extern cpuop_func op_50f0_20_ff; extern cpuop_func op_50f8_20_nf; extern cpuop_func op_50f8_20_ff; extern cpuop_func op_50f9_20_nf; extern cpuop_func op_50f9_20_ff; extern cpuop_func op_50fa_20_nf; extern cpuop_func op_50fa_20_ff; extern cpuop_func op_50fb_20_nf; extern cpuop_func op_50fb_20_ff; extern cpuop_func op_50fc_20_nf; extern cpuop_func op_50fc_20_ff; extern cpuop_func op_5100_20_nf; extern cpuop_func op_5100_20_ff; extern cpuop_func op_5110_20_nf; extern cpuop_func op_5110_20_ff; extern cpuop_func op_5118_20_nf; extern cpuop_func op_5118_20_ff; extern cpuop_func op_5120_20_nf; extern cpuop_func op_5120_20_ff; extern cpuop_func op_5128_20_nf; extern cpuop_func op_5128_20_ff; extern cpuop_func op_5130_20_nf; extern cpuop_func op_5130_20_ff; extern cpuop_func op_5138_20_nf; extern cpuop_func op_5138_20_ff; extern cpuop_func op_5139_20_nf; extern cpuop_func op_5139_20_ff; extern cpuop_func op_5140_20_nf; extern cpuop_func op_5140_20_ff; extern cpuop_func op_5148_20_nf; extern cpuop_func op_5148_20_ff; extern cpuop_func op_5150_20_nf; extern cpuop_func op_5150_20_ff; extern cpuop_func op_5158_20_nf; extern cpuop_func op_5158_20_ff; extern cpuop_func op_5160_20_nf; extern cpuop_func op_5160_20_ff; extern cpuop_func op_5168_20_nf; extern cpuop_func op_5168_20_ff; extern cpuop_func op_5170_20_nf; extern cpuop_func op_5170_20_ff; extern cpuop_func op_5178_20_nf; extern cpuop_func op_5178_20_ff; extern cpuop_func op_5179_20_nf; extern cpuop_func op_5179_20_ff; extern cpuop_func op_5180_20_nf; extern cpuop_func op_5180_20_ff; extern cpuop_func op_5188_20_nf; extern cpuop_func op_5188_20_ff; extern cpuop_func op_5190_20_nf; extern cpuop_func op_5190_20_ff; extern cpuop_func op_5198_20_nf; extern cpuop_func op_5198_20_ff; extern cpuop_func op_51a0_20_nf; extern cpuop_func op_51a0_20_ff; extern cpuop_func op_51a8_20_nf; extern cpuop_func op_51a8_20_ff; extern cpuop_func op_51b0_20_nf; extern cpuop_func op_51b0_20_ff; extern cpuop_func op_51b8_20_nf; extern cpuop_func op_51b8_20_ff; extern cpuop_func op_51b9_20_nf; extern cpuop_func op_51b9_20_ff; extern cpuop_func op_51c0_20_nf; extern cpuop_func op_51c0_20_ff; extern cpuop_func op_51c8_20_nf; extern cpuop_func op_51c8_20_ff; extern cpuop_func op_51d0_20_nf; extern cpuop_func op_51d0_20_ff; extern cpuop_func op_51d8_20_nf; extern cpuop_func op_51d8_20_ff; extern cpuop_func op_51e0_20_nf; extern cpuop_func op_51e0_20_ff; extern cpuop_func op_51e8_20_nf; extern cpuop_func op_51e8_20_ff; extern cpuop_func op_51f0_20_nf; extern cpuop_func op_51f0_20_ff; extern cpuop_func op_51f8_20_nf; extern cpuop_func op_51f8_20_ff; extern cpuop_func op_51f9_20_nf; extern cpuop_func op_51f9_20_ff; extern cpuop_func op_51fa_20_nf; extern cpuop_func op_51fa_20_ff; extern cpuop_func op_51fb_20_nf; extern cpuop_func op_51fb_20_ff; extern cpuop_func op_51fc_20_nf; extern cpuop_func op_51fc_20_ff; extern cpuop_func op_52c0_20_nf; extern cpuop_func op_52c0_20_ff; extern cpuop_func op_52c8_20_nf; extern cpuop_func op_52c8_20_ff; extern cpuop_func op_52d0_20_nf; extern cpuop_func op_52d0_20_ff; extern cpuop_func op_52d8_20_nf; extern cpuop_func op_52d8_20_ff; extern cpuop_func op_52e0_20_nf; extern cpuop_func op_52e0_20_ff; extern cpuop_func op_52e8_20_nf; extern cpuop_func op_52e8_20_ff; extern cpuop_func op_52f0_20_nf; extern cpuop_func op_52f0_20_ff; extern cpuop_func op_52f8_20_nf; extern cpuop_func op_52f8_20_ff; extern cpuop_func op_52f9_20_nf; extern cpuop_func op_52f9_20_ff; extern cpuop_func op_52fa_20_nf; extern cpuop_func op_52fa_20_ff; extern cpuop_func op_52fb_20_nf; extern cpuop_func op_52fb_20_ff; extern cpuop_func op_52fc_20_nf; extern cpuop_func op_52fc_20_ff; extern cpuop_func op_53c0_20_nf; extern cpuop_func op_53c0_20_ff; extern cpuop_func op_53c8_20_nf; extern cpuop_func op_53c8_20_ff; extern cpuop_func op_53d0_20_nf; extern cpuop_func op_53d0_20_ff; extern cpuop_func op_53d8_20_nf; extern cpuop_func op_53d8_20_ff; extern cpuop_func op_53e0_20_nf; extern cpuop_func op_53e0_20_ff; extern cpuop_func op_53e8_20_nf; extern cpuop_func op_53e8_20_ff; extern cpuop_func op_53f0_20_nf; extern cpuop_func op_53f0_20_ff; extern cpuop_func op_53f8_20_nf; extern cpuop_func op_53f8_20_ff; extern cpuop_func op_53f9_20_nf; extern cpuop_func op_53f9_20_ff; extern cpuop_func op_53fa_20_nf; extern cpuop_func op_53fa_20_ff; extern cpuop_func op_53fb_20_nf; extern cpuop_func op_53fb_20_ff; extern cpuop_func op_53fc_20_nf; extern cpuop_func op_53fc_20_ff; extern cpuop_func op_54c0_20_nf; extern cpuop_func op_54c0_20_ff; extern cpuop_func op_54c8_20_nf; extern cpuop_func op_54c8_20_ff; extern cpuop_func op_54d0_20_nf; extern cpuop_func op_54d0_20_ff; extern cpuop_func op_54d8_20_nf; extern cpuop_func op_54d8_20_ff; extern cpuop_func op_54e0_20_nf; extern cpuop_func op_54e0_20_ff; extern cpuop_func op_54e8_20_nf; extern cpuop_func op_54e8_20_ff; extern cpuop_func op_54f0_20_nf; extern cpuop_func op_54f0_20_ff; extern cpuop_func op_54f8_20_nf; extern cpuop_func op_54f8_20_ff; extern cpuop_func op_54f9_20_nf; extern cpuop_func op_54f9_20_ff; extern cpuop_func op_54fa_20_nf; extern cpuop_func op_54fa_20_ff; extern cpuop_func op_54fb_20_nf; extern cpuop_func op_54fb_20_ff; extern cpuop_func op_54fc_20_nf; extern cpuop_func op_54fc_20_ff; extern cpuop_func op_55c0_20_nf; extern cpuop_func op_55c0_20_ff; extern cpuop_func op_55c8_20_nf; extern cpuop_func op_55c8_20_ff; extern cpuop_func op_55d0_20_nf; extern cpuop_func op_55d0_20_ff; extern cpuop_func op_55d8_20_nf; extern cpuop_func op_55d8_20_ff; extern cpuop_func op_55e0_20_nf; extern cpuop_func op_55e0_20_ff; extern cpuop_func op_55e8_20_nf; extern cpuop_func op_55e8_20_ff; extern cpuop_func op_55f0_20_nf; extern cpuop_func op_55f0_20_ff; extern cpuop_func op_55f8_20_nf; extern cpuop_func op_55f8_20_ff; extern cpuop_func op_55f9_20_nf; extern cpuop_func op_55f9_20_ff; extern cpuop_func op_55fa_20_nf; extern cpuop_func op_55fa_20_ff; extern cpuop_func op_55fb_20_nf; extern cpuop_func op_55fb_20_ff; extern cpuop_func op_55fc_20_nf; extern cpuop_func op_55fc_20_ff; extern cpuop_func op_56c0_20_nf; extern cpuop_func op_56c0_20_ff; extern cpuop_func op_56c8_20_nf; extern cpuop_func op_56c8_20_ff; extern cpuop_func op_56d0_20_nf; extern cpuop_func op_56d0_20_ff; extern cpuop_func op_56d8_20_nf; extern cpuop_func op_56d8_20_ff; extern cpuop_func op_56e0_20_nf; extern cpuop_func op_56e0_20_ff; extern cpuop_func op_56e8_20_nf; extern cpuop_func op_56e8_20_ff; extern cpuop_func op_56f0_20_nf; extern cpuop_func op_56f0_20_ff; extern cpuop_func op_56f8_20_nf; extern cpuop_func op_56f8_20_ff; extern cpuop_func op_56f9_20_nf; extern cpuop_func op_56f9_20_ff; extern cpuop_func op_56fa_20_nf; extern cpuop_func op_56fa_20_ff; extern cpuop_func op_56fb_20_nf; extern cpuop_func op_56fb_20_ff; extern cpuop_func op_56fc_20_nf; extern cpuop_func op_56fc_20_ff; extern cpuop_func op_57c0_20_nf; extern cpuop_func op_57c0_20_ff; extern cpuop_func op_57c8_20_nf; extern cpuop_func op_57c8_20_ff; extern cpuop_func op_57d0_20_nf; extern cpuop_func op_57d0_20_ff; extern cpuop_func op_57d8_20_nf; extern cpuop_func op_57d8_20_ff; extern cpuop_func op_57e0_20_nf; extern cpuop_func op_57e0_20_ff; extern cpuop_func op_57e8_20_nf; extern cpuop_func op_57e8_20_ff; extern cpuop_func op_57f0_20_nf; extern cpuop_func op_57f0_20_ff; extern cpuop_func op_57f8_20_nf; extern cpuop_func op_57f8_20_ff; extern cpuop_func op_57f9_20_nf; extern cpuop_func op_57f9_20_ff; extern cpuop_func op_57fa_20_nf; extern cpuop_func op_57fa_20_ff; extern cpuop_func op_57fb_20_nf; extern cpuop_func op_57fb_20_ff; extern cpuop_func op_57fc_20_nf; extern cpuop_func op_57fc_20_ff; extern cpuop_func op_58c0_20_nf; extern cpuop_func op_58c0_20_ff; extern cpuop_func op_58c8_20_nf; extern cpuop_func op_58c8_20_ff; extern cpuop_func op_58d0_20_nf; extern cpuop_func op_58d0_20_ff; extern cpuop_func op_58d8_20_nf; extern cpuop_func op_58d8_20_ff; extern cpuop_func op_58e0_20_nf; extern cpuop_func op_58e0_20_ff; extern cpuop_func op_58e8_20_nf; extern cpuop_func op_58e8_20_ff; extern cpuop_func op_58f0_20_nf; extern cpuop_func op_58f0_20_ff; extern cpuop_func op_58f8_20_nf; extern cpuop_func op_58f8_20_ff; extern cpuop_func op_58f9_20_nf; extern cpuop_func op_58f9_20_ff; extern cpuop_func op_58fa_20_nf; extern cpuop_func op_58fa_20_ff; extern cpuop_func op_58fb_20_nf; extern cpuop_func op_58fb_20_ff; extern cpuop_func op_58fc_20_nf; extern cpuop_func op_58fc_20_ff; extern cpuop_func op_59c0_20_nf; extern cpuop_func op_59c0_20_ff; extern cpuop_func op_59c8_20_nf; extern cpuop_func op_59c8_20_ff; extern cpuop_func op_59d0_20_nf; extern cpuop_func op_59d0_20_ff; extern cpuop_func op_59d8_20_nf; extern cpuop_func op_59d8_20_ff; extern cpuop_func op_59e0_20_nf; extern cpuop_func op_59e0_20_ff; extern cpuop_func op_59e8_20_nf; extern cpuop_func op_59e8_20_ff; extern cpuop_func op_59f0_20_nf; extern cpuop_func op_59f0_20_ff; extern cpuop_func op_59f8_20_nf; extern cpuop_func op_59f8_20_ff; extern cpuop_func op_59f9_20_nf; extern cpuop_func op_59f9_20_ff; extern cpuop_func op_59fa_20_nf; extern cpuop_func op_59fa_20_ff; extern cpuop_func op_59fb_20_nf; extern cpuop_func op_59fb_20_ff; extern cpuop_func op_59fc_20_nf; extern cpuop_func op_59fc_20_ff; extern cpuop_func op_5ac0_20_nf; extern cpuop_func op_5ac0_20_ff; extern cpuop_func op_5ac8_20_nf; extern cpuop_func op_5ac8_20_ff; extern cpuop_func op_5ad0_20_nf; extern cpuop_func op_5ad0_20_ff; extern cpuop_func op_5ad8_20_nf; extern cpuop_func op_5ad8_20_ff; extern cpuop_func op_5ae0_20_nf; extern cpuop_func op_5ae0_20_ff; extern cpuop_func op_5ae8_20_nf; extern cpuop_func op_5ae8_20_ff; extern cpuop_func op_5af0_20_nf; extern cpuop_func op_5af0_20_ff; extern cpuop_func op_5af8_20_nf; extern cpuop_func op_5af8_20_ff; extern cpuop_func op_5af9_20_nf; extern cpuop_func op_5af9_20_ff; extern cpuop_func op_5afa_20_nf; extern cpuop_func op_5afa_20_ff; extern cpuop_func op_5afb_20_nf; extern cpuop_func op_5afb_20_ff; extern cpuop_func op_5afc_20_nf; extern cpuop_func op_5afc_20_ff; extern cpuop_func op_5bc0_20_nf; extern cpuop_func op_5bc0_20_ff; extern cpuop_func op_5bc8_20_nf; extern cpuop_func op_5bc8_20_ff; extern cpuop_func op_5bd0_20_nf; extern cpuop_func op_5bd0_20_ff; extern cpuop_func op_5bd8_20_nf; extern cpuop_func op_5bd8_20_ff; extern cpuop_func op_5be0_20_nf; extern cpuop_func op_5be0_20_ff; extern cpuop_func op_5be8_20_nf; extern cpuop_func op_5be8_20_ff; extern cpuop_func op_5bf0_20_nf; extern cpuop_func op_5bf0_20_ff; extern cpuop_func op_5bf8_20_nf; extern cpuop_func op_5bf8_20_ff; extern cpuop_func op_5bf9_20_nf; extern cpuop_func op_5bf9_20_ff; extern cpuop_func op_5bfa_20_nf; extern cpuop_func op_5bfa_20_ff; extern cpuop_func op_5bfb_20_nf; extern cpuop_func op_5bfb_20_ff; extern cpuop_func op_5bfc_20_nf; extern cpuop_func op_5bfc_20_ff; extern cpuop_func op_5cc0_20_nf; extern cpuop_func op_5cc0_20_ff; extern cpuop_func op_5cc8_20_nf; extern cpuop_func op_5cc8_20_ff; extern cpuop_func op_5cd0_20_nf; extern cpuop_func op_5cd0_20_ff; extern cpuop_func op_5cd8_20_nf; extern cpuop_func op_5cd8_20_ff; extern cpuop_func op_5ce0_20_nf; extern cpuop_func op_5ce0_20_ff; extern cpuop_func op_5ce8_20_nf; extern cpuop_func op_5ce8_20_ff; extern cpuop_func op_5cf0_20_nf; extern cpuop_func op_5cf0_20_ff; extern cpuop_func op_5cf8_20_nf; extern cpuop_func op_5cf8_20_ff; extern cpuop_func op_5cf9_20_nf; extern cpuop_func op_5cf9_20_ff; extern cpuop_func op_5cfa_20_nf; extern cpuop_func op_5cfa_20_ff; extern cpuop_func op_5cfb_20_nf; extern cpuop_func op_5cfb_20_ff; extern cpuop_func op_5cfc_20_nf; extern cpuop_func op_5cfc_20_ff; extern cpuop_func op_5dc0_20_nf; extern cpuop_func op_5dc0_20_ff; extern cpuop_func op_5dc8_20_nf; extern cpuop_func op_5dc8_20_ff; extern cpuop_func op_5dd0_20_nf; extern cpuop_func op_5dd0_20_ff; extern cpuop_func op_5dd8_20_nf; extern cpuop_func op_5dd8_20_ff; extern cpuop_func op_5de0_20_nf; extern cpuop_func op_5de0_20_ff; extern cpuop_func op_5de8_20_nf; extern cpuop_func op_5de8_20_ff; extern cpuop_func op_5df0_20_nf; extern cpuop_func op_5df0_20_ff; extern cpuop_func op_5df8_20_nf; extern cpuop_func op_5df8_20_ff; extern cpuop_func op_5df9_20_nf; extern cpuop_func op_5df9_20_ff; extern cpuop_func op_5dfa_20_nf; extern cpuop_func op_5dfa_20_ff; extern cpuop_func op_5dfb_20_nf; extern cpuop_func op_5dfb_20_ff; extern cpuop_func op_5dfc_20_nf; extern cpuop_func op_5dfc_20_ff; extern cpuop_func op_5ec0_20_nf; extern cpuop_func op_5ec0_20_ff; extern cpuop_func op_5ec8_20_nf; extern cpuop_func op_5ec8_20_ff; extern cpuop_func op_5ed0_20_nf; extern cpuop_func op_5ed0_20_ff; extern cpuop_func op_5ed8_20_nf; extern cpuop_func op_5ed8_20_ff; extern cpuop_func op_5ee0_20_nf; extern cpuop_func op_5ee0_20_ff; extern cpuop_func op_5ee8_20_nf; extern cpuop_func op_5ee8_20_ff; extern cpuop_func op_5ef0_20_nf; extern cpuop_func op_5ef0_20_ff; extern cpuop_func op_5ef8_20_nf; extern cpuop_func op_5ef8_20_ff; extern cpuop_func op_5ef9_20_nf; extern cpuop_func op_5ef9_20_ff; extern cpuop_func op_5efa_20_nf; extern cpuop_func op_5efa_20_ff; extern cpuop_func op_5efb_20_nf; extern cpuop_func op_5efb_20_ff; extern cpuop_func op_5efc_20_nf; extern cpuop_func op_5efc_20_ff; extern cpuop_func op_5fc0_20_nf; extern cpuop_func op_5fc0_20_ff; extern cpuop_func op_5fc8_20_nf; extern cpuop_func op_5fc8_20_ff; extern cpuop_func op_5fd0_20_nf; extern cpuop_func op_5fd0_20_ff; extern cpuop_func op_5fd8_20_nf; extern cpuop_func op_5fd8_20_ff; extern cpuop_func op_5fe0_20_nf; extern cpuop_func op_5fe0_20_ff; extern cpuop_func op_5fe8_20_nf; extern cpuop_func op_5fe8_20_ff; extern cpuop_func op_5ff0_20_nf; extern cpuop_func op_5ff0_20_ff; extern cpuop_func op_5ff8_20_nf; extern cpuop_func op_5ff8_20_ff; extern cpuop_func op_5ff9_20_nf; extern cpuop_func op_5ff9_20_ff; extern cpuop_func op_5ffa_20_nf; extern cpuop_func op_5ffa_20_ff; extern cpuop_func op_5ffb_20_nf; extern cpuop_func op_5ffb_20_ff; extern cpuop_func op_5ffc_20_nf; extern cpuop_func op_5ffc_20_ff; extern cpuop_func op_6000_20_nf; extern cpuop_func op_6000_20_ff; extern cpuop_func op_6001_20_nf; extern cpuop_func op_6001_20_ff; extern cpuop_func op_60ff_20_nf; extern cpuop_func op_60ff_20_ff; extern cpuop_func op_6100_20_nf; extern cpuop_func op_6100_20_ff; extern cpuop_func op_6101_20_nf; extern cpuop_func op_6101_20_ff; extern cpuop_func op_61ff_20_nf; extern cpuop_func op_61ff_20_ff; extern cpuop_func op_6200_20_nf; extern cpuop_func op_6200_20_ff; extern cpuop_func op_6201_20_nf; extern cpuop_func op_6201_20_ff; extern cpuop_func op_62ff_20_nf; extern cpuop_func op_62ff_20_ff; extern cpuop_func op_6300_20_nf; extern cpuop_func op_6300_20_ff; extern cpuop_func op_6301_20_nf; extern cpuop_func op_6301_20_ff; extern cpuop_func op_63ff_20_nf; extern cpuop_func op_63ff_20_ff; extern cpuop_func op_6400_20_nf; extern cpuop_func op_6400_20_ff; extern cpuop_func op_6401_20_nf; extern cpuop_func op_6401_20_ff; extern cpuop_func op_64ff_20_nf; extern cpuop_func op_64ff_20_ff; extern cpuop_func op_6500_20_nf; extern cpuop_func op_6500_20_ff; extern cpuop_func op_6501_20_nf; extern cpuop_func op_6501_20_ff; extern cpuop_func op_65ff_20_nf; extern cpuop_func op_65ff_20_ff; extern cpuop_func op_6600_20_nf; extern cpuop_func op_6600_20_ff; extern cpuop_func op_6601_20_nf; extern cpuop_func op_6601_20_ff; extern cpuop_func op_66ff_20_nf; extern cpuop_func op_66ff_20_ff; extern cpuop_func op_6700_20_nf; extern cpuop_func op_6700_20_ff; extern cpuop_func op_6701_20_nf; extern cpuop_func op_6701_20_ff; extern cpuop_func op_67ff_20_nf; extern cpuop_func op_67ff_20_ff; extern cpuop_func op_6800_20_nf; extern cpuop_func op_6800_20_ff; extern cpuop_func op_6801_20_nf; extern cpuop_func op_6801_20_ff; extern cpuop_func op_68ff_20_nf; extern cpuop_func op_68ff_20_ff; extern cpuop_func op_6900_20_nf; extern cpuop_func op_6900_20_ff; extern cpuop_func op_6901_20_nf; extern cpuop_func op_6901_20_ff; extern cpuop_func op_69ff_20_nf; extern cpuop_func op_69ff_20_ff; extern cpuop_func op_6a00_20_nf; extern cpuop_func op_6a00_20_ff; extern cpuop_func op_6a01_20_nf; extern cpuop_func op_6a01_20_ff; extern cpuop_func op_6aff_20_nf; extern cpuop_func op_6aff_20_ff; extern cpuop_func op_6b00_20_nf; extern cpuop_func op_6b00_20_ff; extern cpuop_func op_6b01_20_nf; extern cpuop_func op_6b01_20_ff; extern cpuop_func op_6bff_20_nf; extern cpuop_func op_6bff_20_ff; extern cpuop_func op_6c00_20_nf; extern cpuop_func op_6c00_20_ff; extern cpuop_func op_6c01_20_nf; extern cpuop_func op_6c01_20_ff; extern cpuop_func op_6cff_20_nf; extern cpuop_func op_6cff_20_ff; extern cpuop_func op_6d00_20_nf; extern cpuop_func op_6d00_20_ff; extern cpuop_func op_6d01_20_nf; extern cpuop_func op_6d01_20_ff; extern cpuop_func op_6dff_20_nf; extern cpuop_func op_6dff_20_ff; extern cpuop_func op_6e00_20_nf; extern cpuop_func op_6e00_20_ff; extern cpuop_func op_6e01_20_nf; extern cpuop_func op_6e01_20_ff; extern cpuop_func op_6eff_20_nf; extern cpuop_func op_6eff_20_ff; extern cpuop_func op_6f00_20_nf; extern cpuop_func op_6f00_20_ff; extern cpuop_func op_6f01_20_nf; extern cpuop_func op_6f01_20_ff; extern cpuop_func op_6fff_20_nf; extern cpuop_func op_6fff_20_ff; extern cpuop_func op_7000_20_nf; extern cpuop_func op_7000_20_ff; extern cpuop_func op_8000_20_nf; extern cpuop_func op_8000_20_ff; extern cpuop_func op_8010_20_nf; extern cpuop_func op_8010_20_ff; extern cpuop_func op_8018_20_nf; extern cpuop_func op_8018_20_ff; extern cpuop_func op_8020_20_nf; extern cpuop_func op_8020_20_ff; extern cpuop_func op_8028_20_nf; extern cpuop_func op_8028_20_ff; extern cpuop_func op_8030_20_nf; extern cpuop_func op_8030_20_ff; extern cpuop_func op_8038_20_nf; extern cpuop_func op_8038_20_ff; extern cpuop_func op_8039_20_nf; extern cpuop_func op_8039_20_ff; extern cpuop_func op_803a_20_nf; extern cpuop_func op_803a_20_ff; extern cpuop_func op_803b_20_nf; extern cpuop_func op_803b_20_ff; extern cpuop_func op_803c_20_nf; extern cpuop_func op_803c_20_ff; extern cpuop_func op_8040_20_nf; extern cpuop_func op_8040_20_ff; extern cpuop_func op_8050_20_nf; extern cpuop_func op_8050_20_ff; extern cpuop_func op_8058_20_nf; extern cpuop_func op_8058_20_ff; extern cpuop_func op_8060_20_nf; extern cpuop_func op_8060_20_ff; extern cpuop_func op_8068_20_nf; extern cpuop_func op_8068_20_ff; extern cpuop_func op_8070_20_nf; extern cpuop_func op_8070_20_ff; extern cpuop_func op_8078_20_nf; extern cpuop_func op_8078_20_ff; extern cpuop_func op_8079_20_nf; extern cpuop_func op_8079_20_ff; extern cpuop_func op_807a_20_nf; extern cpuop_func op_807a_20_ff; extern cpuop_func op_807b_20_nf; extern cpuop_func op_807b_20_ff; extern cpuop_func op_807c_20_nf; extern cpuop_func op_807c_20_ff; extern cpuop_func op_8080_20_nf; extern cpuop_func op_8080_20_ff; extern cpuop_func op_8090_20_nf; extern cpuop_func op_8090_20_ff; extern cpuop_func op_8098_20_nf; extern cpuop_func op_8098_20_ff; extern cpuop_func op_80a0_20_nf; extern cpuop_func op_80a0_20_ff; extern cpuop_func op_80a8_20_nf; extern cpuop_func op_80a8_20_ff; extern cpuop_func op_80b0_20_nf; extern cpuop_func op_80b0_20_ff; extern cpuop_func op_80b8_20_nf; extern cpuop_func op_80b8_20_ff; extern cpuop_func op_80b9_20_nf; extern cpuop_func op_80b9_20_ff; extern cpuop_func op_80ba_20_nf; extern cpuop_func op_80ba_20_ff; extern cpuop_func op_80bb_20_nf; extern cpuop_func op_80bb_20_ff; extern cpuop_func op_80bc_20_nf; extern cpuop_func op_80bc_20_ff; extern cpuop_func op_80c0_20_nf; extern cpuop_func op_80c0_20_ff; extern cpuop_func op_80d0_20_nf; extern cpuop_func op_80d0_20_ff; extern cpuop_func op_80d8_20_nf; extern cpuop_func op_80d8_20_ff; extern cpuop_func op_80e0_20_nf; extern cpuop_func op_80e0_20_ff; extern cpuop_func op_80e8_20_nf; extern cpuop_func op_80e8_20_ff; extern cpuop_func op_80f0_20_nf; extern cpuop_func op_80f0_20_ff; extern cpuop_func op_80f8_20_nf; extern cpuop_func op_80f8_20_ff; extern cpuop_func op_80f9_20_nf; extern cpuop_func op_80f9_20_ff; extern cpuop_func op_80fa_20_nf; extern cpuop_func op_80fa_20_ff; extern cpuop_func op_80fb_20_nf; extern cpuop_func op_80fb_20_ff; extern cpuop_func op_80fc_20_nf; extern cpuop_func op_80fc_20_ff; extern cpuop_func op_8100_20_nf; extern cpuop_func op_8100_20_ff; extern cpuop_func op_8108_20_nf; extern cpuop_func op_8108_20_ff; extern cpuop_func op_8110_20_nf; extern cpuop_func op_8110_20_ff; extern cpuop_func op_8118_20_nf; extern cpuop_func op_8118_20_ff; extern cpuop_func op_8120_20_nf; extern cpuop_func op_8120_20_ff; extern cpuop_func op_8128_20_nf; extern cpuop_func op_8128_20_ff; extern cpuop_func op_8130_20_nf; extern cpuop_func op_8130_20_ff; extern cpuop_func op_8138_20_nf; extern cpuop_func op_8138_20_ff; extern cpuop_func op_8139_20_nf; extern cpuop_func op_8139_20_ff; extern cpuop_func op_8140_20_nf; extern cpuop_func op_8140_20_ff; extern cpuop_func op_8148_20_nf; extern cpuop_func op_8148_20_ff; extern cpuop_func op_8150_20_nf; extern cpuop_func op_8150_20_ff; extern cpuop_func op_8158_20_nf; extern cpuop_func op_8158_20_ff; extern cpuop_func op_8160_20_nf; extern cpuop_func op_8160_20_ff; extern cpuop_func op_8168_20_nf; extern cpuop_func op_8168_20_ff; extern cpuop_func op_8170_20_nf; extern cpuop_func op_8170_20_ff; extern cpuop_func op_8178_20_nf; extern cpuop_func op_8178_20_ff; extern cpuop_func op_8179_20_nf; extern cpuop_func op_8179_20_ff; extern cpuop_func op_8180_20_nf; extern cpuop_func op_8180_20_ff; extern cpuop_func op_8188_20_nf; extern cpuop_func op_8188_20_ff; extern cpuop_func op_8190_20_nf; extern cpuop_func op_8190_20_ff; extern cpuop_func op_8198_20_nf; extern cpuop_func op_8198_20_ff; extern cpuop_func op_81a0_20_nf; extern cpuop_func op_81a0_20_ff; extern cpuop_func op_81a8_20_nf; extern cpuop_func op_81a8_20_ff; extern cpuop_func op_81b0_20_nf; extern cpuop_func op_81b0_20_ff; extern cpuop_func op_81b8_20_nf; extern cpuop_func op_81b8_20_ff; extern cpuop_func op_81b9_20_nf; extern cpuop_func op_81b9_20_ff; extern cpuop_func op_81c0_20_nf; extern cpuop_func op_81c0_20_ff; extern cpuop_func op_81d0_20_nf; extern cpuop_func op_81d0_20_ff; extern cpuop_func op_81d8_20_nf; extern cpuop_func op_81d8_20_ff; extern cpuop_func op_81e0_20_nf; extern cpuop_func op_81e0_20_ff; extern cpuop_func op_81e8_20_nf; extern cpuop_func op_81e8_20_ff; extern cpuop_func op_81f0_20_nf; extern cpuop_func op_81f0_20_ff; extern cpuop_func op_81f8_20_nf; extern cpuop_func op_81f8_20_ff; extern cpuop_func op_81f9_20_nf; extern cpuop_func op_81f9_20_ff; extern cpuop_func op_81fa_20_nf; extern cpuop_func op_81fa_20_ff; extern cpuop_func op_81fb_20_nf; extern cpuop_func op_81fb_20_ff; extern cpuop_func op_81fc_20_nf; extern cpuop_func op_81fc_20_ff; extern cpuop_func op_9000_20_nf; extern cpuop_func op_9000_20_ff; extern cpuop_func op_9010_20_nf; extern cpuop_func op_9010_20_ff; extern cpuop_func op_9018_20_nf; extern cpuop_func op_9018_20_ff; extern cpuop_func op_9020_20_nf; extern cpuop_func op_9020_20_ff; extern cpuop_func op_9028_20_nf; extern cpuop_func op_9028_20_ff; extern cpuop_func op_9030_20_nf; extern cpuop_func op_9030_20_ff; extern cpuop_func op_9038_20_nf; extern cpuop_func op_9038_20_ff; extern cpuop_func op_9039_20_nf; extern cpuop_func op_9039_20_ff; extern cpuop_func op_903a_20_nf; extern cpuop_func op_903a_20_ff; extern cpuop_func op_903b_20_nf; extern cpuop_func op_903b_20_ff; extern cpuop_func op_903c_20_nf; extern cpuop_func op_903c_20_ff; extern cpuop_func op_9040_20_nf; extern cpuop_func op_9040_20_ff; extern cpuop_func op_9048_20_nf; extern cpuop_func op_9048_20_ff; extern cpuop_func op_9050_20_nf; extern cpuop_func op_9050_20_ff; extern cpuop_func op_9058_20_nf; extern cpuop_func op_9058_20_ff; extern cpuop_func op_9060_20_nf; extern cpuop_func op_9060_20_ff; extern cpuop_func op_9068_20_nf; extern cpuop_func op_9068_20_ff; extern cpuop_func op_9070_20_nf; extern cpuop_func op_9070_20_ff; extern cpuop_func op_9078_20_nf; extern cpuop_func op_9078_20_ff; extern cpuop_func op_9079_20_nf; extern cpuop_func op_9079_20_ff; extern cpuop_func op_907a_20_nf; extern cpuop_func op_907a_20_ff; extern cpuop_func op_907b_20_nf; extern cpuop_func op_907b_20_ff; extern cpuop_func op_907c_20_nf; extern cpuop_func op_907c_20_ff; extern cpuop_func op_9080_20_nf; extern cpuop_func op_9080_20_ff; extern cpuop_func op_9088_20_nf; extern cpuop_func op_9088_20_ff; extern cpuop_func op_9090_20_nf; extern cpuop_func op_9090_20_ff; extern cpuop_func op_9098_20_nf; extern cpuop_func op_9098_20_ff; extern cpuop_func op_90a0_20_nf; extern cpuop_func op_90a0_20_ff; extern cpuop_func op_90a8_20_nf; extern cpuop_func op_90a8_20_ff; extern cpuop_func op_90b0_20_nf; extern cpuop_func op_90b0_20_ff; extern cpuop_func op_90b8_20_nf; extern cpuop_func op_90b8_20_ff; extern cpuop_func op_90b9_20_nf; extern cpuop_func op_90b9_20_ff; extern cpuop_func op_90ba_20_nf; extern cpuop_func op_90ba_20_ff; extern cpuop_func op_90bb_20_nf; extern cpuop_func op_90bb_20_ff; extern cpuop_func op_90bc_20_nf; extern cpuop_func op_90bc_20_ff; extern cpuop_func op_90c0_20_nf; extern cpuop_func op_90c0_20_ff; extern cpuop_func op_90c8_20_nf; extern cpuop_func op_90c8_20_ff; extern cpuop_func op_90d0_20_nf; extern cpuop_func op_90d0_20_ff; extern cpuop_func op_90d8_20_nf; extern cpuop_func op_90d8_20_ff; extern cpuop_func op_90e0_20_nf; extern cpuop_func op_90e0_20_ff; extern cpuop_func op_90e8_20_nf; extern cpuop_func op_90e8_20_ff; extern cpuop_func op_90f0_20_nf; extern cpuop_func op_90f0_20_ff; extern cpuop_func op_90f8_20_nf; extern cpuop_func op_90f8_20_ff; extern cpuop_func op_90f9_20_nf; extern cpuop_func op_90f9_20_ff; extern cpuop_func op_90fa_20_nf; extern cpuop_func op_90fa_20_ff; extern cpuop_func op_90fb_20_nf; extern cpuop_func op_90fb_20_ff; extern cpuop_func op_90fc_20_nf; extern cpuop_func op_90fc_20_ff; extern cpuop_func op_9100_20_nf; extern cpuop_func op_9100_20_ff; extern cpuop_func op_9108_20_nf; extern cpuop_func op_9108_20_ff; extern cpuop_func op_9110_20_nf; extern cpuop_func op_9110_20_ff; extern cpuop_func op_9118_20_nf; extern cpuop_func op_9118_20_ff; extern cpuop_func op_9120_20_nf; extern cpuop_func op_9120_20_ff; extern cpuop_func op_9128_20_nf; extern cpuop_func op_9128_20_ff; extern cpuop_func op_9130_20_nf; extern cpuop_func op_9130_20_ff; extern cpuop_func op_9138_20_nf; extern cpuop_func op_9138_20_ff; extern cpuop_func op_9139_20_nf; extern cpuop_func op_9139_20_ff; extern cpuop_func op_9140_20_nf; extern cpuop_func op_9140_20_ff; extern cpuop_func op_9148_20_nf; extern cpuop_func op_9148_20_ff; extern cpuop_func op_9150_20_nf; extern cpuop_func op_9150_20_ff; extern cpuop_func op_9158_20_nf; extern cpuop_func op_9158_20_ff; extern cpuop_func op_9160_20_nf; extern cpuop_func op_9160_20_ff; extern cpuop_func op_9168_20_nf; extern cpuop_func op_9168_20_ff; extern cpuop_func op_9170_20_nf; extern cpuop_func op_9170_20_ff; extern cpuop_func op_9178_20_nf; extern cpuop_func op_9178_20_ff; extern cpuop_func op_9179_20_nf; extern cpuop_func op_9179_20_ff; extern cpuop_func op_9180_20_nf; extern cpuop_func op_9180_20_ff; extern cpuop_func op_9188_20_nf; extern cpuop_func op_9188_20_ff; extern cpuop_func op_9190_20_nf; extern cpuop_func op_9190_20_ff; extern cpuop_func op_9198_20_nf; extern cpuop_func op_9198_20_ff; extern cpuop_func op_91a0_20_nf; extern cpuop_func op_91a0_20_ff; extern cpuop_func op_91a8_20_nf; extern cpuop_func op_91a8_20_ff; extern cpuop_func op_91b0_20_nf; extern cpuop_func op_91b0_20_ff; extern cpuop_func op_91b8_20_nf; extern cpuop_func op_91b8_20_ff; extern cpuop_func op_91b9_20_nf; extern cpuop_func op_91b9_20_ff; extern cpuop_func op_91c0_20_nf; extern cpuop_func op_91c0_20_ff; extern cpuop_func op_91c8_20_nf; extern cpuop_func op_91c8_20_ff; extern cpuop_func op_91d0_20_nf; extern cpuop_func op_91d0_20_ff; extern cpuop_func op_91d8_20_nf; extern cpuop_func op_91d8_20_ff; extern cpuop_func op_91e0_20_nf; extern cpuop_func op_91e0_20_ff; extern cpuop_func op_91e8_20_nf; extern cpuop_func op_91e8_20_ff; extern cpuop_func op_91f0_20_nf; extern cpuop_func op_91f0_20_ff; extern cpuop_func op_91f8_20_nf; extern cpuop_func op_91f8_20_ff; extern cpuop_func op_91f9_20_nf; extern cpuop_func op_91f9_20_ff; extern cpuop_func op_91fa_20_nf; extern cpuop_func op_91fa_20_ff; extern cpuop_func op_91fb_20_nf; extern cpuop_func op_91fb_20_ff; extern cpuop_func op_91fc_20_nf; extern cpuop_func op_91fc_20_ff; extern cpuop_func op_b000_20_nf; extern cpuop_func op_b000_20_ff; extern cpuop_func op_b010_20_nf; extern cpuop_func op_b010_20_ff; extern cpuop_func op_b018_20_nf; extern cpuop_func op_b018_20_ff; extern cpuop_func op_b020_20_nf; extern cpuop_func op_b020_20_ff; extern cpuop_func op_b028_20_nf; extern cpuop_func op_b028_20_ff; extern cpuop_func op_b030_20_nf; extern cpuop_func op_b030_20_ff; extern cpuop_func op_b038_20_nf; extern cpuop_func op_b038_20_ff; extern cpuop_func op_b039_20_nf; extern cpuop_func op_b039_20_ff; extern cpuop_func op_b03a_20_nf; extern cpuop_func op_b03a_20_ff; extern cpuop_func op_b03b_20_nf; extern cpuop_func op_b03b_20_ff; extern cpuop_func op_b03c_20_nf; extern cpuop_func op_b03c_20_ff; extern cpuop_func op_b040_20_nf; extern cpuop_func op_b040_20_ff; extern cpuop_func op_b048_20_nf; extern cpuop_func op_b048_20_ff; extern cpuop_func op_b050_20_nf; extern cpuop_func op_b050_20_ff; extern cpuop_func op_b058_20_nf; extern cpuop_func op_b058_20_ff; extern cpuop_func op_b060_20_nf; extern cpuop_func op_b060_20_ff; extern cpuop_func op_b068_20_nf; extern cpuop_func op_b068_20_ff; extern cpuop_func op_b070_20_nf; extern cpuop_func op_b070_20_ff; extern cpuop_func op_b078_20_nf; extern cpuop_func op_b078_20_ff; extern cpuop_func op_b079_20_nf; extern cpuop_func op_b079_20_ff; extern cpuop_func op_b07a_20_nf; extern cpuop_func op_b07a_20_ff; extern cpuop_func op_b07b_20_nf; extern cpuop_func op_b07b_20_ff; extern cpuop_func op_b07c_20_nf; extern cpuop_func op_b07c_20_ff; extern cpuop_func op_b080_20_nf; extern cpuop_func op_b080_20_ff; extern cpuop_func op_b088_20_nf; extern cpuop_func op_b088_20_ff; extern cpuop_func op_b090_20_nf; extern cpuop_func op_b090_20_ff; extern cpuop_func op_b098_20_nf; extern cpuop_func op_b098_20_ff; extern cpuop_func op_b0a0_20_nf; extern cpuop_func op_b0a0_20_ff; extern cpuop_func op_b0a8_20_nf; extern cpuop_func op_b0a8_20_ff; extern cpuop_func op_b0b0_20_nf; extern cpuop_func op_b0b0_20_ff; extern cpuop_func op_b0b8_20_nf; extern cpuop_func op_b0b8_20_ff; extern cpuop_func op_b0b9_20_nf; extern cpuop_func op_b0b9_20_ff; extern cpuop_func op_b0ba_20_nf; extern cpuop_func op_b0ba_20_ff; extern cpuop_func op_b0bb_20_nf; extern cpuop_func op_b0bb_20_ff; extern cpuop_func op_b0bc_20_nf; extern cpuop_func op_b0bc_20_ff; extern cpuop_func op_b0c0_20_nf; extern cpuop_func op_b0c0_20_ff; extern cpuop_func op_b0c8_20_nf; extern cpuop_func op_b0c8_20_ff; extern cpuop_func op_b0d0_20_nf; extern cpuop_func op_b0d0_20_ff; extern cpuop_func op_b0d8_20_nf; extern cpuop_func op_b0d8_20_ff; extern cpuop_func op_b0e0_20_nf; extern cpuop_func op_b0e0_20_ff; extern cpuop_func op_b0e8_20_nf; extern cpuop_func op_b0e8_20_ff; extern cpuop_func op_b0f0_20_nf; extern cpuop_func op_b0f0_20_ff; extern cpuop_func op_b0f8_20_nf; extern cpuop_func op_b0f8_20_ff; extern cpuop_func op_b0f9_20_nf; extern cpuop_func op_b0f9_20_ff; extern cpuop_func op_b0fa_20_nf; extern cpuop_func op_b0fa_20_ff; extern cpuop_func op_b0fb_20_nf; extern cpuop_func op_b0fb_20_ff; extern cpuop_func op_b0fc_20_nf; extern cpuop_func op_b0fc_20_ff; extern cpuop_func op_b100_20_nf; extern cpuop_func op_b100_20_ff; extern cpuop_func op_b108_20_nf; extern cpuop_func op_b108_20_ff; extern cpuop_func op_b110_20_nf; extern cpuop_func op_b110_20_ff; extern cpuop_func op_b118_20_nf; extern cpuop_func op_b118_20_ff; extern cpuop_func op_b120_20_nf; extern cpuop_func op_b120_20_ff; extern cpuop_func op_b128_20_nf; extern cpuop_func op_b128_20_ff; extern cpuop_func op_b130_20_nf; extern cpuop_func op_b130_20_ff; extern cpuop_func op_b138_20_nf; extern cpuop_func op_b138_20_ff; extern cpuop_func op_b139_20_nf; extern cpuop_func op_b139_20_ff; extern cpuop_func op_b140_20_nf; extern cpuop_func op_b140_20_ff; extern cpuop_func op_b148_20_nf; extern cpuop_func op_b148_20_ff; extern cpuop_func op_b150_20_nf; extern cpuop_func op_b150_20_ff; extern cpuop_func op_b158_20_nf; extern cpuop_func op_b158_20_ff; extern cpuop_func op_b160_20_nf; extern cpuop_func op_b160_20_ff; extern cpuop_func op_b168_20_nf; extern cpuop_func op_b168_20_ff; extern cpuop_func op_b170_20_nf; extern cpuop_func op_b170_20_ff; extern cpuop_func op_b178_20_nf; extern cpuop_func op_b178_20_ff; extern cpuop_func op_b179_20_nf; extern cpuop_func op_b179_20_ff; extern cpuop_func op_b180_20_nf; extern cpuop_func op_b180_20_ff; extern cpuop_func op_b188_20_nf; extern cpuop_func op_b188_20_ff; extern cpuop_func op_b190_20_nf; extern cpuop_func op_b190_20_ff; extern cpuop_func op_b198_20_nf; extern cpuop_func op_b198_20_ff; extern cpuop_func op_b1a0_20_nf; extern cpuop_func op_b1a0_20_ff; extern cpuop_func op_b1a8_20_nf; extern cpuop_func op_b1a8_20_ff; extern cpuop_func op_b1b0_20_nf; extern cpuop_func op_b1b0_20_ff; extern cpuop_func op_b1b8_20_nf; extern cpuop_func op_b1b8_20_ff; extern cpuop_func op_b1b9_20_nf; extern cpuop_func op_b1b9_20_ff; extern cpuop_func op_b1c0_20_nf; extern cpuop_func op_b1c0_20_ff; extern cpuop_func op_b1c8_20_nf; extern cpuop_func op_b1c8_20_ff; extern cpuop_func op_b1d0_20_nf; extern cpuop_func op_b1d0_20_ff; extern cpuop_func op_b1d8_20_nf; extern cpuop_func op_b1d8_20_ff; extern cpuop_func op_b1e0_20_nf; extern cpuop_func op_b1e0_20_ff; extern cpuop_func op_b1e8_20_nf; extern cpuop_func op_b1e8_20_ff; extern cpuop_func op_b1f0_20_nf; extern cpuop_func op_b1f0_20_ff; extern cpuop_func op_b1f8_20_nf; extern cpuop_func op_b1f8_20_ff; extern cpuop_func op_b1f9_20_nf; extern cpuop_func op_b1f9_20_ff; extern cpuop_func op_b1fa_20_nf; extern cpuop_func op_b1fa_20_ff; extern cpuop_func op_b1fb_20_nf; extern cpuop_func op_b1fb_20_ff; extern cpuop_func op_b1fc_20_nf; extern cpuop_func op_b1fc_20_ff; extern cpuop_func op_c000_20_nf; extern cpuop_func op_c000_20_ff; extern cpuop_func op_c010_20_nf; extern cpuop_func op_c010_20_ff; extern cpuop_func op_c018_20_nf; extern cpuop_func op_c018_20_ff; extern cpuop_func op_c020_20_nf; extern cpuop_func op_c020_20_ff; extern cpuop_func op_c028_20_nf; extern cpuop_func op_c028_20_ff; extern cpuop_func op_c030_20_nf; extern cpuop_func op_c030_20_ff; extern cpuop_func op_c038_20_nf; extern cpuop_func op_c038_20_ff; extern cpuop_func op_c039_20_nf; extern cpuop_func op_c039_20_ff; extern cpuop_func op_c03a_20_nf; extern cpuop_func op_c03a_20_ff; extern cpuop_func op_c03b_20_nf; extern cpuop_func op_c03b_20_ff; extern cpuop_func op_c03c_20_nf; extern cpuop_func op_c03c_20_ff; extern cpuop_func op_c040_20_nf; extern cpuop_func op_c040_20_ff; extern cpuop_func op_c050_20_nf; extern cpuop_func op_c050_20_ff; extern cpuop_func op_c058_20_nf; extern cpuop_func op_c058_20_ff; extern cpuop_func op_c060_20_nf; extern cpuop_func op_c060_20_ff; extern cpuop_func op_c068_20_nf; extern cpuop_func op_c068_20_ff; extern cpuop_func op_c070_20_nf; extern cpuop_func op_c070_20_ff; extern cpuop_func op_c078_20_nf; extern cpuop_func op_c078_20_ff; extern cpuop_func op_c079_20_nf; extern cpuop_func op_c079_20_ff; extern cpuop_func op_c07a_20_nf; extern cpuop_func op_c07a_20_ff; extern cpuop_func op_c07b_20_nf; extern cpuop_func op_c07b_20_ff; extern cpuop_func op_c07c_20_nf; extern cpuop_func op_c07c_20_ff; extern cpuop_func op_c080_20_nf; extern cpuop_func op_c080_20_ff; extern cpuop_func op_c090_20_nf; extern cpuop_func op_c090_20_ff; extern cpuop_func op_c098_20_nf; extern cpuop_func op_c098_20_ff; extern cpuop_func op_c0a0_20_nf; extern cpuop_func op_c0a0_20_ff; extern cpuop_func op_c0a8_20_nf; extern cpuop_func op_c0a8_20_ff; extern cpuop_func op_c0b0_20_nf; extern cpuop_func op_c0b0_20_ff; extern cpuop_func op_c0b8_20_nf; extern cpuop_func op_c0b8_20_ff; extern cpuop_func op_c0b9_20_nf; extern cpuop_func op_c0b9_20_ff; extern cpuop_func op_c0ba_20_nf; extern cpuop_func op_c0ba_20_ff; extern cpuop_func op_c0bb_20_nf; extern cpuop_func op_c0bb_20_ff; extern cpuop_func op_c0bc_20_nf; extern cpuop_func op_c0bc_20_ff; extern cpuop_func op_c0c0_20_nf; extern cpuop_func op_c0c0_20_ff; extern cpuop_func op_c0d0_20_nf; extern cpuop_func op_c0d0_20_ff; extern cpuop_func op_c0d8_20_nf; extern cpuop_func op_c0d8_20_ff; extern cpuop_func op_c0e0_20_nf; extern cpuop_func op_c0e0_20_ff; extern cpuop_func op_c0e8_20_nf; extern cpuop_func op_c0e8_20_ff; extern cpuop_func op_c0f0_20_nf; extern cpuop_func op_c0f0_20_ff; extern cpuop_func op_c0f8_20_nf; extern cpuop_func op_c0f8_20_ff; extern cpuop_func op_c0f9_20_nf; extern cpuop_func op_c0f9_20_ff; extern cpuop_func op_c0fa_20_nf; extern cpuop_func op_c0fa_20_ff; extern cpuop_func op_c0fb_20_nf; extern cpuop_func op_c0fb_20_ff; extern cpuop_func op_c0fc_20_nf; extern cpuop_func op_c0fc_20_ff; extern cpuop_func op_c100_20_nf; extern cpuop_func op_c100_20_ff; extern cpuop_func op_c108_20_nf; extern cpuop_func op_c108_20_ff; extern cpuop_func op_c110_20_nf; extern cpuop_func op_c110_20_ff; extern cpuop_func op_c118_20_nf; extern cpuop_func op_c118_20_ff; extern cpuop_func op_c120_20_nf; extern cpuop_func op_c120_20_ff; extern cpuop_func op_c128_20_nf; extern cpuop_func op_c128_20_ff; extern cpuop_func op_c130_20_nf; extern cpuop_func op_c130_20_ff; extern cpuop_func op_c138_20_nf; extern cpuop_func op_c138_20_ff; extern cpuop_func op_c139_20_nf; extern cpuop_func op_c139_20_ff; extern cpuop_func op_c140_20_nf; extern cpuop_func op_c140_20_ff; extern cpuop_func op_c148_20_nf; extern cpuop_func op_c148_20_ff; extern cpuop_func op_c150_20_nf; extern cpuop_func op_c150_20_ff; extern cpuop_func op_c158_20_nf; extern cpuop_func op_c158_20_ff; extern cpuop_func op_c160_20_nf; extern cpuop_func op_c160_20_ff; extern cpuop_func op_c168_20_nf; extern cpuop_func op_c168_20_ff; extern cpuop_func op_c170_20_nf; extern cpuop_func op_c170_20_ff; extern cpuop_func op_c178_20_nf; extern cpuop_func op_c178_20_ff; extern cpuop_func op_c179_20_nf; extern cpuop_func op_c179_20_ff; extern cpuop_func op_c188_20_nf; extern cpuop_func op_c188_20_ff; extern cpuop_func op_c190_20_nf; extern cpuop_func op_c190_20_ff; extern cpuop_func op_c198_20_nf; extern cpuop_func op_c198_20_ff; extern cpuop_func op_c1a0_20_nf; extern cpuop_func op_c1a0_20_ff; extern cpuop_func op_c1a8_20_nf; extern cpuop_func op_c1a8_20_ff; extern cpuop_func op_c1b0_20_nf; extern cpuop_func op_c1b0_20_ff; extern cpuop_func op_c1b8_20_nf; extern cpuop_func op_c1b8_20_ff; extern cpuop_func op_c1b9_20_nf; extern cpuop_func op_c1b9_20_ff; extern cpuop_func op_c1c0_20_nf; extern cpuop_func op_c1c0_20_ff; extern cpuop_func op_c1d0_20_nf; extern cpuop_func op_c1d0_20_ff; extern cpuop_func op_c1d8_20_nf; extern cpuop_func op_c1d8_20_ff; extern cpuop_func op_c1e0_20_nf; extern cpuop_func op_c1e0_20_ff; extern cpuop_func op_c1e8_20_nf; extern cpuop_func op_c1e8_20_ff; extern cpuop_func op_c1f0_20_nf; extern cpuop_func op_c1f0_20_ff; extern cpuop_func op_c1f8_20_nf; extern cpuop_func op_c1f8_20_ff; extern cpuop_func op_c1f9_20_nf; extern cpuop_func op_c1f9_20_ff; extern cpuop_func op_c1fa_20_nf; extern cpuop_func op_c1fa_20_ff; extern cpuop_func op_c1fb_20_nf; extern cpuop_func op_c1fb_20_ff; extern cpuop_func op_c1fc_20_nf; extern cpuop_func op_c1fc_20_ff; extern cpuop_func op_d000_20_nf; extern cpuop_func op_d000_20_ff; extern cpuop_func op_d010_20_nf; extern cpuop_func op_d010_20_ff; extern cpuop_func op_d018_20_nf; extern cpuop_func op_d018_20_ff; extern cpuop_func op_d020_20_nf; extern cpuop_func op_d020_20_ff; extern cpuop_func op_d028_20_nf; extern cpuop_func op_d028_20_ff; extern cpuop_func op_d030_20_nf; extern cpuop_func op_d030_20_ff; extern cpuop_func op_d038_20_nf; extern cpuop_func op_d038_20_ff; extern cpuop_func op_d039_20_nf; extern cpuop_func op_d039_20_ff; extern cpuop_func op_d03a_20_nf; extern cpuop_func op_d03a_20_ff; extern cpuop_func op_d03b_20_nf; extern cpuop_func op_d03b_20_ff; extern cpuop_func op_d03c_20_nf; extern cpuop_func op_d03c_20_ff; extern cpuop_func op_d040_20_nf; extern cpuop_func op_d040_20_ff; extern cpuop_func op_d048_20_nf; extern cpuop_func op_d048_20_ff; extern cpuop_func op_d050_20_nf; extern cpuop_func op_d050_20_ff; extern cpuop_func op_d058_20_nf; extern cpuop_func op_d058_20_ff; extern cpuop_func op_d060_20_nf; extern cpuop_func op_d060_20_ff; extern cpuop_func op_d068_20_nf; extern cpuop_func op_d068_20_ff; extern cpuop_func op_d070_20_nf; extern cpuop_func op_d070_20_ff; extern cpuop_func op_d078_20_nf; extern cpuop_func op_d078_20_ff; extern cpuop_func op_d079_20_nf; extern cpuop_func op_d079_20_ff; extern cpuop_func op_d07a_20_nf; extern cpuop_func op_d07a_20_ff; extern cpuop_func op_d07b_20_nf; extern cpuop_func op_d07b_20_ff; extern cpuop_func op_d07c_20_nf; extern cpuop_func op_d07c_20_ff; extern cpuop_func op_d080_20_nf; extern cpuop_func op_d080_20_ff; extern cpuop_func op_d088_20_nf; extern cpuop_func op_d088_20_ff; extern cpuop_func op_d090_20_nf; extern cpuop_func op_d090_20_ff; extern cpuop_func op_d098_20_nf; extern cpuop_func op_d098_20_ff; extern cpuop_func op_d0a0_20_nf; extern cpuop_func op_d0a0_20_ff; extern cpuop_func op_d0a8_20_nf; extern cpuop_func op_d0a8_20_ff; extern cpuop_func op_d0b0_20_nf; extern cpuop_func op_d0b0_20_ff; extern cpuop_func op_d0b8_20_nf; extern cpuop_func op_d0b8_20_ff; extern cpuop_func op_d0b9_20_nf; extern cpuop_func op_d0b9_20_ff; extern cpuop_func op_d0ba_20_nf; extern cpuop_func op_d0ba_20_ff; extern cpuop_func op_d0bb_20_nf; extern cpuop_func op_d0bb_20_ff; extern cpuop_func op_d0bc_20_nf; extern cpuop_func op_d0bc_20_ff; extern cpuop_func op_d0c0_20_nf; extern cpuop_func op_d0c0_20_ff; extern cpuop_func op_d0c8_20_nf; extern cpuop_func op_d0c8_20_ff; extern cpuop_func op_d0d0_20_nf; extern cpuop_func op_d0d0_20_ff; extern cpuop_func op_d0d8_20_nf; extern cpuop_func op_d0d8_20_ff; extern cpuop_func op_d0e0_20_nf; extern cpuop_func op_d0e0_20_ff; extern cpuop_func op_d0e8_20_nf; extern cpuop_func op_d0e8_20_ff; extern cpuop_func op_d0f0_20_nf; extern cpuop_func op_d0f0_20_ff; extern cpuop_func op_d0f8_20_nf; extern cpuop_func op_d0f8_20_ff; extern cpuop_func op_d0f9_20_nf; extern cpuop_func op_d0f9_20_ff; extern cpuop_func op_d0fa_20_nf; extern cpuop_func op_d0fa_20_ff; extern cpuop_func op_d0fb_20_nf; extern cpuop_func op_d0fb_20_ff; extern cpuop_func op_d0fc_20_nf; extern cpuop_func op_d0fc_20_ff; extern cpuop_func op_d100_20_nf; extern cpuop_func op_d100_20_ff; extern cpuop_func op_d108_20_nf; extern cpuop_func op_d108_20_ff; extern cpuop_func op_d110_20_nf; extern cpuop_func op_d110_20_ff; extern cpuop_func op_d118_20_nf; extern cpuop_func op_d118_20_ff; extern cpuop_func op_d120_20_nf; extern cpuop_func op_d120_20_ff; extern cpuop_func op_d128_20_nf; extern cpuop_func op_d128_20_ff; extern cpuop_func op_d130_20_nf; extern cpuop_func op_d130_20_ff; extern cpuop_func op_d138_20_nf; extern cpuop_func op_d138_20_ff; extern cpuop_func op_d139_20_nf; extern cpuop_func op_d139_20_ff; extern cpuop_func op_d140_20_nf; extern cpuop_func op_d140_20_ff; extern cpuop_func op_d148_20_nf; extern cpuop_func op_d148_20_ff; extern cpuop_func op_d150_20_nf; extern cpuop_func op_d150_20_ff; extern cpuop_func op_d158_20_nf; extern cpuop_func op_d158_20_ff; extern cpuop_func op_d160_20_nf; extern cpuop_func op_d160_20_ff; extern cpuop_func op_d168_20_nf; extern cpuop_func op_d168_20_ff; extern cpuop_func op_d170_20_nf; extern cpuop_func op_d170_20_ff; extern cpuop_func op_d178_20_nf; extern cpuop_func op_d178_20_ff; extern cpuop_func op_d179_20_nf; extern cpuop_func op_d179_20_ff; extern cpuop_func op_d180_20_nf; extern cpuop_func op_d180_20_ff; extern cpuop_func op_d188_20_nf; extern cpuop_func op_d188_20_ff; extern cpuop_func op_d190_20_nf; extern cpuop_func op_d190_20_ff; extern cpuop_func op_d198_20_nf; extern cpuop_func op_d198_20_ff; extern cpuop_func op_d1a0_20_nf; extern cpuop_func op_d1a0_20_ff; extern cpuop_func op_d1a8_20_nf; extern cpuop_func op_d1a8_20_ff; extern cpuop_func op_d1b0_20_nf; extern cpuop_func op_d1b0_20_ff; extern cpuop_func op_d1b8_20_nf; extern cpuop_func op_d1b8_20_ff; extern cpuop_func op_d1b9_20_nf; extern cpuop_func op_d1b9_20_ff; extern cpuop_func op_d1c0_20_nf; extern cpuop_func op_d1c0_20_ff; extern cpuop_func op_d1c8_20_nf; extern cpuop_func op_d1c8_20_ff; extern cpuop_func op_d1d0_20_nf; extern cpuop_func op_d1d0_20_ff; extern cpuop_func op_d1d8_20_nf; extern cpuop_func op_d1d8_20_ff; extern cpuop_func op_d1e0_20_nf; extern cpuop_func op_d1e0_20_ff; extern cpuop_func op_d1e8_20_nf; extern cpuop_func op_d1e8_20_ff; extern cpuop_func op_d1f0_20_nf; extern cpuop_func op_d1f0_20_ff; extern cpuop_func op_d1f8_20_nf; extern cpuop_func op_d1f8_20_ff; extern cpuop_func op_d1f9_20_nf; extern cpuop_func op_d1f9_20_ff; extern cpuop_func op_d1fa_20_nf; extern cpuop_func op_d1fa_20_ff; extern cpuop_func op_d1fb_20_nf; extern cpuop_func op_d1fb_20_ff; extern cpuop_func op_d1fc_20_nf; extern cpuop_func op_d1fc_20_ff; extern cpuop_func op_e000_20_nf; extern cpuop_func op_e000_20_ff; extern cpuop_func op_e008_20_nf; extern cpuop_func op_e008_20_ff; extern cpuop_func op_e010_20_nf; extern cpuop_func op_e010_20_ff; extern cpuop_func op_e018_20_nf; extern cpuop_func op_e018_20_ff; extern cpuop_func op_e020_20_nf; extern cpuop_func op_e020_20_ff; extern cpuop_func op_e028_20_nf; extern cpuop_func op_e028_20_ff; extern cpuop_func op_e030_20_nf; extern cpuop_func op_e030_20_ff; extern cpuop_func op_e038_20_nf; extern cpuop_func op_e038_20_ff; extern cpuop_func op_e040_20_nf; extern cpuop_func op_e040_20_ff; extern cpuop_func op_e048_20_nf; extern cpuop_func op_e048_20_ff; extern cpuop_func op_e050_20_nf; extern cpuop_func op_e050_20_ff; extern cpuop_func op_e058_20_nf; extern cpuop_func op_e058_20_ff; extern cpuop_func op_e060_20_nf; extern cpuop_func op_e060_20_ff; extern cpuop_func op_e068_20_nf; extern cpuop_func op_e068_20_ff; extern cpuop_func op_e070_20_nf; extern cpuop_func op_e070_20_ff; extern cpuop_func op_e078_20_nf; extern cpuop_func op_e078_20_ff; extern cpuop_func op_e080_20_nf; extern cpuop_func op_e080_20_ff; extern cpuop_func op_e088_20_nf; extern cpuop_func op_e088_20_ff; extern cpuop_func op_e090_20_nf; extern cpuop_func op_e090_20_ff; extern cpuop_func op_e098_20_nf; extern cpuop_func op_e098_20_ff; extern cpuop_func op_e0a0_20_nf; extern cpuop_func op_e0a0_20_ff; extern cpuop_func op_e0a8_20_nf; extern cpuop_func op_e0a8_20_ff; extern cpuop_func op_e0b0_20_nf; extern cpuop_func op_e0b0_20_ff; extern cpuop_func op_e0b8_20_nf; extern cpuop_func op_e0b8_20_ff; extern cpuop_func op_e0d0_20_nf; extern cpuop_func op_e0d0_20_ff; extern cpuop_func op_e0d8_20_nf; extern cpuop_func op_e0d8_20_ff; extern cpuop_func op_e0e0_20_nf; extern cpuop_func op_e0e0_20_ff; extern cpuop_func op_e0e8_20_nf; extern cpuop_func op_e0e8_20_ff; extern cpuop_func op_e0f0_20_nf; extern cpuop_func op_e0f0_20_ff; extern cpuop_func op_e0f8_20_nf; extern cpuop_func op_e0f8_20_ff; extern cpuop_func op_e0f9_20_nf; extern cpuop_func op_e0f9_20_ff; extern cpuop_func op_e100_20_nf; extern cpuop_func op_e100_20_ff; extern cpuop_func op_e108_20_nf; extern cpuop_func op_e108_20_ff; extern cpuop_func op_e110_20_nf; extern cpuop_func op_e110_20_ff; extern cpuop_func op_e118_20_nf; extern cpuop_func op_e118_20_ff; extern cpuop_func op_e120_20_nf; extern cpuop_func op_e120_20_ff; extern cpuop_func op_e128_20_nf; extern cpuop_func op_e128_20_ff; extern cpuop_func op_e130_20_nf; extern cpuop_func op_e130_20_ff; extern cpuop_func op_e138_20_nf; extern cpuop_func op_e138_20_ff; extern cpuop_func op_e140_20_nf; extern cpuop_func op_e140_20_ff; extern cpuop_func op_e148_20_nf; extern cpuop_func op_e148_20_ff; extern cpuop_func op_e150_20_nf; extern cpuop_func op_e150_20_ff; extern cpuop_func op_e158_20_nf; extern cpuop_func op_e158_20_ff; extern cpuop_func op_e160_20_nf; extern cpuop_func op_e160_20_ff; extern cpuop_func op_e168_20_nf; extern cpuop_func op_e168_20_ff; extern cpuop_func op_e170_20_nf; extern cpuop_func op_e170_20_ff; extern cpuop_func op_e178_20_nf; extern cpuop_func op_e178_20_ff; extern cpuop_func op_e180_20_nf; extern cpuop_func op_e180_20_ff; extern cpuop_func op_e188_20_nf; extern cpuop_func op_e188_20_ff; extern cpuop_func op_e190_20_nf; extern cpuop_func op_e190_20_ff; extern cpuop_func op_e198_20_nf; extern cpuop_func op_e198_20_ff; extern cpuop_func op_e1a0_20_nf; extern cpuop_func op_e1a0_20_ff; extern cpuop_func op_e1a8_20_nf; extern cpuop_func op_e1a8_20_ff; extern cpuop_func op_e1b0_20_nf; extern cpuop_func op_e1b0_20_ff; extern cpuop_func op_e1b8_20_nf; extern cpuop_func op_e1b8_20_ff; extern cpuop_func op_e1d0_20_nf; extern cpuop_func op_e1d0_20_ff; extern cpuop_func op_e1d8_20_nf; extern cpuop_func op_e1d8_20_ff; extern cpuop_func op_e1e0_20_nf; extern cpuop_func op_e1e0_20_ff; extern cpuop_func op_e1e8_20_nf; extern cpuop_func op_e1e8_20_ff; extern cpuop_func op_e1f0_20_nf; extern cpuop_func op_e1f0_20_ff; extern cpuop_func op_e1f8_20_nf; extern cpuop_func op_e1f8_20_ff; extern cpuop_func op_e1f9_20_nf; extern cpuop_func op_e1f9_20_ff; extern cpuop_func op_e2d0_20_nf; extern cpuop_func op_e2d0_20_ff; extern cpuop_func op_e2d8_20_nf; extern cpuop_func op_e2d8_20_ff; extern cpuop_func op_e2e0_20_nf; extern cpuop_func op_e2e0_20_ff; extern cpuop_func op_e2e8_20_nf; extern cpuop_func op_e2e8_20_ff; extern cpuop_func op_e2f0_20_nf; extern cpuop_func op_e2f0_20_ff; extern cpuop_func op_e2f8_20_nf; extern cpuop_func op_e2f8_20_ff; extern cpuop_func op_e2f9_20_nf; extern cpuop_func op_e2f9_20_ff; extern cpuop_func op_e3d0_20_nf; extern cpuop_func op_e3d0_20_ff; extern cpuop_func op_e3d8_20_nf; extern cpuop_func op_e3d8_20_ff; extern cpuop_func op_e3e0_20_nf; extern cpuop_func op_e3e0_20_ff; extern cpuop_func op_e3e8_20_nf; extern cpuop_func op_e3e8_20_ff; extern cpuop_func op_e3f0_20_nf; extern cpuop_func op_e3f0_20_ff; extern cpuop_func op_e3f8_20_nf; extern cpuop_func op_e3f8_20_ff; extern cpuop_func op_e3f9_20_nf; extern cpuop_func op_e3f9_20_ff; extern cpuop_func op_e4d0_20_nf; extern cpuop_func op_e4d0_20_ff; extern cpuop_func op_e4d8_20_nf; extern cpuop_func op_e4d8_20_ff; extern cpuop_func op_e4e0_20_nf; extern cpuop_func op_e4e0_20_ff; extern cpuop_func op_e4e8_20_nf; extern cpuop_func op_e4e8_20_ff; extern cpuop_func op_e4f0_20_nf; extern cpuop_func op_e4f0_20_ff; extern cpuop_func op_e4f8_20_nf; extern cpuop_func op_e4f8_20_ff; extern cpuop_func op_e4f9_20_nf; extern cpuop_func op_e4f9_20_ff; extern cpuop_func op_e5d0_20_nf; extern cpuop_func op_e5d0_20_ff; extern cpuop_func op_e5d8_20_nf; extern cpuop_func op_e5d8_20_ff; extern cpuop_func op_e5e0_20_nf; extern cpuop_func op_e5e0_20_ff; extern cpuop_func op_e5e8_20_nf; extern cpuop_func op_e5e8_20_ff; extern cpuop_func op_e5f0_20_nf; extern cpuop_func op_e5f0_20_ff; extern cpuop_func op_e5f8_20_nf; extern cpuop_func op_e5f8_20_ff; extern cpuop_func op_e5f9_20_nf; extern cpuop_func op_e5f9_20_ff; extern cpuop_func op_e6d0_20_nf; extern cpuop_func op_e6d0_20_ff; extern cpuop_func op_e6d8_20_nf; extern cpuop_func op_e6d8_20_ff; extern cpuop_func op_e6e0_20_nf; extern cpuop_func op_e6e0_20_ff; extern cpuop_func op_e6e8_20_nf; extern cpuop_func op_e6e8_20_ff; extern cpuop_func op_e6f0_20_nf; extern cpuop_func op_e6f0_20_ff; extern cpuop_func op_e6f8_20_nf; extern cpuop_func op_e6f8_20_ff; extern cpuop_func op_e6f9_20_nf; extern cpuop_func op_e6f9_20_ff; extern cpuop_func op_e7d0_20_nf; extern cpuop_func op_e7d0_20_ff; extern cpuop_func op_e7d8_20_nf; extern cpuop_func op_e7d8_20_ff; extern cpuop_func op_e7e0_20_nf; extern cpuop_func op_e7e0_20_ff; extern cpuop_func op_e7e8_20_nf; extern cpuop_func op_e7e8_20_ff; extern cpuop_func op_e7f0_20_nf; extern cpuop_func op_e7f0_20_ff; extern cpuop_func op_e7f8_20_nf; extern cpuop_func op_e7f8_20_ff; extern cpuop_func op_e7f9_20_nf; extern cpuop_func op_e7f9_20_ff; extern cpuop_func op_e8c0_20_nf; extern cpuop_func op_e8c0_20_ff; extern cpuop_func op_e8d0_20_nf; extern cpuop_func op_e8d0_20_ff; extern cpuop_func op_e8e8_20_nf; extern cpuop_func op_e8e8_20_ff; extern cpuop_func op_e8f0_20_nf; extern cpuop_func op_e8f0_20_ff; extern cpuop_func op_e8f8_20_nf; extern cpuop_func op_e8f8_20_ff; extern cpuop_func op_e8f9_20_nf; extern cpuop_func op_e8f9_20_ff; extern cpuop_func op_e8fa_20_nf; extern cpuop_func op_e8fa_20_ff; extern cpuop_func op_e8fb_20_nf; extern cpuop_func op_e8fb_20_ff; extern cpuop_func op_e9c0_20_nf; extern cpuop_func op_e9c0_20_ff; extern cpuop_func op_e9d0_20_nf; extern cpuop_func op_e9d0_20_ff; extern cpuop_func op_e9e8_20_nf; extern cpuop_func op_e9e8_20_ff; extern cpuop_func op_e9f0_20_nf; extern cpuop_func op_e9f0_20_ff; extern cpuop_func op_e9f8_20_nf; extern cpuop_func op_e9f8_20_ff; extern cpuop_func op_e9f9_20_nf; extern cpuop_func op_e9f9_20_ff; extern cpuop_func op_e9fa_20_nf; extern cpuop_func op_e9fa_20_ff; extern cpuop_func op_e9fb_20_nf; extern cpuop_func op_e9fb_20_ff; extern cpuop_func op_eac0_20_nf; extern cpuop_func op_eac0_20_ff; extern cpuop_func op_ead0_20_nf; extern cpuop_func op_ead0_20_ff; extern cpuop_func op_eae8_20_nf; extern cpuop_func op_eae8_20_ff; extern cpuop_func op_eaf0_20_nf; extern cpuop_func op_eaf0_20_ff; extern cpuop_func op_eaf8_20_nf; extern cpuop_func op_eaf8_20_ff; extern cpuop_func op_eaf9_20_nf; extern cpuop_func op_eaf9_20_ff; extern cpuop_func op_ebc0_20_nf; extern cpuop_func op_ebc0_20_ff; extern cpuop_func op_ebd0_20_nf; extern cpuop_func op_ebd0_20_ff; extern cpuop_func op_ebe8_20_nf; extern cpuop_func op_ebe8_20_ff; extern cpuop_func op_ebf0_20_nf; extern cpuop_func op_ebf0_20_ff; extern cpuop_func op_ebf8_20_nf; extern cpuop_func op_ebf8_20_ff; extern cpuop_func op_ebf9_20_nf; extern cpuop_func op_ebf9_20_ff; extern cpuop_func op_ebfa_20_nf; extern cpuop_func op_ebfa_20_ff; extern cpuop_func op_ebfb_20_nf; extern cpuop_func op_ebfb_20_ff; extern cpuop_func op_ecc0_20_nf; extern cpuop_func op_ecc0_20_ff; extern cpuop_func op_ecd0_20_nf; extern cpuop_func op_ecd0_20_ff; extern cpuop_func op_ece8_20_nf; extern cpuop_func op_ece8_20_ff; extern cpuop_func op_ecf0_20_nf; extern cpuop_func op_ecf0_20_ff; extern cpuop_func op_ecf8_20_nf; extern cpuop_func op_ecf8_20_ff; extern cpuop_func op_ecf9_20_nf; extern cpuop_func op_ecf9_20_ff; extern cpuop_func op_edc0_20_nf; extern cpuop_func op_edc0_20_ff; extern cpuop_func op_edd0_20_nf; extern cpuop_func op_edd0_20_ff; extern cpuop_func op_ede8_20_nf; extern cpuop_func op_ede8_20_ff; extern cpuop_func op_edf0_20_nf; extern cpuop_func op_edf0_20_ff; extern cpuop_func op_edf8_20_nf; extern cpuop_func op_edf8_20_ff; extern cpuop_func op_edf9_20_nf; extern cpuop_func op_edf9_20_ff; extern cpuop_func op_edfa_20_nf; extern cpuop_func op_edfa_20_ff; extern cpuop_func op_edfb_20_nf; extern cpuop_func op_edfb_20_ff; extern cpuop_func op_eec0_20_nf; extern cpuop_func op_eec0_20_ff; extern cpuop_func op_eed0_20_nf; extern cpuop_func op_eed0_20_ff; extern cpuop_func op_eee8_20_nf; extern cpuop_func op_eee8_20_ff; extern cpuop_func op_eef0_20_nf; extern cpuop_func op_eef0_20_ff; extern cpuop_func op_eef8_20_nf; extern cpuop_func op_eef8_20_ff; extern cpuop_func op_eef9_20_nf; extern cpuop_func op_eef9_20_ff; extern cpuop_func op_efc0_20_nf; extern cpuop_func op_efc0_20_ff; extern cpuop_func op_efd0_20_nf; extern cpuop_func op_efd0_20_ff; extern cpuop_func op_efe8_20_nf; extern cpuop_func op_efe8_20_ff; extern cpuop_func op_eff0_20_nf; extern cpuop_func op_eff0_20_ff; extern cpuop_func op_eff8_20_nf; extern cpuop_func op_eff8_20_ff; extern cpuop_func op_eff9_20_nf; extern cpuop_func op_eff9_20_ff; extern cpuop_func op_f200_20_nf; extern cpuop_func op_f200_20_ff; extern cpuop_func op_f208_20_nf; extern cpuop_func op_f208_20_ff; extern cpuop_func op_f210_20_nf; extern cpuop_func op_f210_20_ff; extern cpuop_func op_f218_20_nf; extern cpuop_func op_f218_20_ff; extern cpuop_func op_f220_20_nf; extern cpuop_func op_f220_20_ff; extern cpuop_func op_f228_20_nf; extern cpuop_func op_f228_20_ff; extern cpuop_func op_f230_20_nf; extern cpuop_func op_f230_20_ff; extern cpuop_func op_f238_20_nf; extern cpuop_func op_f238_20_ff; extern cpuop_func op_f239_20_nf; extern cpuop_func op_f239_20_ff; extern cpuop_func op_f23a_20_nf; extern cpuop_func op_f23a_20_ff; extern cpuop_func op_f23b_20_nf; extern cpuop_func op_f23b_20_ff; extern cpuop_func op_f23c_20_nf; extern cpuop_func op_f23c_20_ff; extern cpuop_func op_f240_20_nf; extern cpuop_func op_f240_20_ff; extern cpuop_func op_f248_20_nf; extern cpuop_func op_f248_20_ff; extern cpuop_func op_f250_20_nf; extern cpuop_func op_f250_20_ff; extern cpuop_func op_f258_20_nf; extern cpuop_func op_f258_20_ff; extern cpuop_func op_f260_20_nf; extern cpuop_func op_f260_20_ff; extern cpuop_func op_f268_20_nf; extern cpuop_func op_f268_20_ff; extern cpuop_func op_f270_20_nf; extern cpuop_func op_f270_20_ff; extern cpuop_func op_f278_20_nf; extern cpuop_func op_f278_20_ff; extern cpuop_func op_f279_20_nf; extern cpuop_func op_f279_20_ff; extern cpuop_func op_f27a_20_nf; extern cpuop_func op_f27a_20_ff; extern cpuop_func op_f27b_20_nf; extern cpuop_func op_f27b_20_ff; extern cpuop_func op_f27c_20_nf; extern cpuop_func op_f27c_20_ff; extern cpuop_func op_f280_20_nf; extern cpuop_func op_f280_20_ff; extern cpuop_func op_f2c0_20_nf; extern cpuop_func op_f2c0_20_ff; extern cpuop_func op_f310_20_nf; extern cpuop_func op_f310_20_ff; extern cpuop_func op_f320_20_nf; extern cpuop_func op_f320_20_ff; extern cpuop_func op_f328_20_nf; extern cpuop_func op_f328_20_ff; extern cpuop_func op_f330_20_nf; extern cpuop_func op_f330_20_ff; extern cpuop_func op_f338_20_nf; extern cpuop_func op_f338_20_ff; extern cpuop_func op_f339_20_nf; extern cpuop_func op_f339_20_ff; extern cpuop_func op_f350_20_nf; extern cpuop_func op_f350_20_ff; extern cpuop_func op_f358_20_nf; extern cpuop_func op_f358_20_ff; extern cpuop_func op_f368_20_nf; extern cpuop_func op_f368_20_ff; extern cpuop_func op_f370_20_nf; extern cpuop_func op_f370_20_ff; extern cpuop_func op_f378_20_nf; extern cpuop_func op_f378_20_ff; extern cpuop_func op_f379_20_nf; extern cpuop_func op_f379_20_ff; extern cpuop_func op_f37a_20_nf; extern cpuop_func op_f37a_20_ff; extern cpuop_func op_f37b_20_nf; extern cpuop_func op_f37b_20_ff; extern cpuop_func_ce op_0000_21_nf; extern cpuop_func_ce op_0000_21_ff; extern cpuop_func_ce op_0010_21_nf; extern cpuop_func_ce op_0010_21_ff; extern cpuop_func_ce op_0018_21_nf; extern cpuop_func_ce op_0018_21_ff; extern cpuop_func_ce op_0020_21_nf; extern cpuop_func_ce op_0020_21_ff; extern cpuop_func_ce op_0028_21_nf; extern cpuop_func_ce op_0028_21_ff; extern cpuop_func_ce op_0030_21_nf; extern cpuop_func_ce op_0030_21_ff; extern cpuop_func_ce op_0038_21_nf; extern cpuop_func_ce op_0038_21_ff; extern cpuop_func_ce op_0039_21_nf; extern cpuop_func_ce op_0039_21_ff; extern cpuop_func_ce op_003c_21_nf; extern cpuop_func_ce op_003c_21_ff; extern cpuop_func_ce op_0040_21_nf; extern cpuop_func_ce op_0040_21_ff; extern cpuop_func_ce op_0050_21_nf; extern cpuop_func_ce op_0050_21_ff; extern cpuop_func_ce op_0058_21_nf; extern cpuop_func_ce op_0058_21_ff; extern cpuop_func_ce op_0060_21_nf; extern cpuop_func_ce op_0060_21_ff; extern cpuop_func_ce op_0068_21_nf; extern cpuop_func_ce op_0068_21_ff; extern cpuop_func_ce op_0070_21_nf; extern cpuop_func_ce op_0070_21_ff; extern cpuop_func_ce op_0078_21_nf; extern cpuop_func_ce op_0078_21_ff; extern cpuop_func_ce op_0079_21_nf; extern cpuop_func_ce op_0079_21_ff; extern cpuop_func_ce op_007c_21_nf; extern cpuop_func_ce op_007c_21_ff; extern cpuop_func_ce op_0080_21_nf; extern cpuop_func_ce op_0080_21_ff; extern cpuop_func_ce op_0090_21_nf; extern cpuop_func_ce op_0090_21_ff; extern cpuop_func_ce op_0098_21_nf; extern cpuop_func_ce op_0098_21_ff; extern cpuop_func_ce op_00a0_21_nf; extern cpuop_func_ce op_00a0_21_ff; extern cpuop_func_ce op_00a8_21_nf; extern cpuop_func_ce op_00a8_21_ff; extern cpuop_func_ce op_00b0_21_nf; extern cpuop_func_ce op_00b0_21_ff; extern cpuop_func_ce op_00b8_21_nf; extern cpuop_func_ce op_00b8_21_ff; extern cpuop_func_ce op_00b9_21_nf; extern cpuop_func_ce op_00b9_21_ff; extern cpuop_func_ce op_00d0_21_nf; extern cpuop_func_ce op_00d0_21_ff; extern cpuop_func_ce op_00e8_21_nf; extern cpuop_func_ce op_00e8_21_ff; extern cpuop_func_ce op_00f0_21_nf; extern cpuop_func_ce op_00f0_21_ff; extern cpuop_func_ce op_00f8_21_nf; extern cpuop_func_ce op_00f8_21_ff; extern cpuop_func_ce op_00f9_21_nf; extern cpuop_func_ce op_00f9_21_ff; extern cpuop_func_ce op_00fa_21_nf; extern cpuop_func_ce op_00fa_21_ff; extern cpuop_func_ce op_00fb_21_nf; extern cpuop_func_ce op_00fb_21_ff; extern cpuop_func_ce op_0100_21_nf; extern cpuop_func_ce op_0100_21_ff; extern cpuop_func_ce op_0108_21_nf; extern cpuop_func_ce op_0108_21_ff; extern cpuop_func_ce op_0110_21_nf; extern cpuop_func_ce op_0110_21_ff; extern cpuop_func_ce op_0118_21_nf; extern cpuop_func_ce op_0118_21_ff; extern cpuop_func_ce op_0120_21_nf; extern cpuop_func_ce op_0120_21_ff; extern cpuop_func_ce op_0128_21_nf; extern cpuop_func_ce op_0128_21_ff; extern cpuop_func_ce op_0130_21_nf; extern cpuop_func_ce op_0130_21_ff; extern cpuop_func_ce op_0138_21_nf; extern cpuop_func_ce op_0138_21_ff; extern cpuop_func_ce op_0139_21_nf; extern cpuop_func_ce op_0139_21_ff; extern cpuop_func_ce op_013a_21_nf; extern cpuop_func_ce op_013a_21_ff; extern cpuop_func_ce op_013b_21_nf; extern cpuop_func_ce op_013b_21_ff; extern cpuop_func_ce op_013c_21_nf; extern cpuop_func_ce op_013c_21_ff; extern cpuop_func_ce op_0140_21_nf; extern cpuop_func_ce op_0140_21_ff; extern cpuop_func_ce op_0148_21_nf; extern cpuop_func_ce op_0148_21_ff; extern cpuop_func_ce op_0150_21_nf; extern cpuop_func_ce op_0150_21_ff; extern cpuop_func_ce op_0158_21_nf; extern cpuop_func_ce op_0158_21_ff; extern cpuop_func_ce op_0160_21_nf; extern cpuop_func_ce op_0160_21_ff; extern cpuop_func_ce op_0168_21_nf; extern cpuop_func_ce op_0168_21_ff; extern cpuop_func_ce op_0170_21_nf; extern cpuop_func_ce op_0170_21_ff; extern cpuop_func_ce op_0178_21_nf; extern cpuop_func_ce op_0178_21_ff; extern cpuop_func_ce op_0179_21_nf; extern cpuop_func_ce op_0179_21_ff; extern cpuop_func_ce op_017a_21_nf; extern cpuop_func_ce op_017a_21_ff; extern cpuop_func_ce op_017b_21_nf; extern cpuop_func_ce op_017b_21_ff; extern cpuop_func_ce op_0180_21_nf; extern cpuop_func_ce op_0180_21_ff; extern cpuop_func_ce op_0188_21_nf; extern cpuop_func_ce op_0188_21_ff; extern cpuop_func_ce op_0190_21_nf; extern cpuop_func_ce op_0190_21_ff; extern cpuop_func_ce op_0198_21_nf; extern cpuop_func_ce op_0198_21_ff; extern cpuop_func_ce op_01a0_21_nf; extern cpuop_func_ce op_01a0_21_ff; extern cpuop_func_ce op_01a8_21_nf; extern cpuop_func_ce op_01a8_21_ff; extern cpuop_func_ce op_01b0_21_nf; extern cpuop_func_ce op_01b0_21_ff; extern cpuop_func_ce op_01b8_21_nf; extern cpuop_func_ce op_01b8_21_ff; extern cpuop_func_ce op_01b9_21_nf; extern cpuop_func_ce op_01b9_21_ff; extern cpuop_func_ce op_01ba_21_nf; extern cpuop_func_ce op_01ba_21_ff; extern cpuop_func_ce op_01bb_21_nf; extern cpuop_func_ce op_01bb_21_ff; extern cpuop_func_ce op_01c0_21_nf; extern cpuop_func_ce op_01c0_21_ff; extern cpuop_func_ce op_01c8_21_nf; extern cpuop_func_ce op_01c8_21_ff; extern cpuop_func_ce op_01d0_21_nf; extern cpuop_func_ce op_01d0_21_ff; extern cpuop_func_ce op_01d8_21_nf; extern cpuop_func_ce op_01d8_21_ff; extern cpuop_func_ce op_01e0_21_nf; extern cpuop_func_ce op_01e0_21_ff; extern cpuop_func_ce op_01e8_21_nf; extern cpuop_func_ce op_01e8_21_ff; extern cpuop_func_ce op_01f0_21_nf; extern cpuop_func_ce op_01f0_21_ff; extern cpuop_func_ce op_01f8_21_nf; extern cpuop_func_ce op_01f8_21_ff; extern cpuop_func_ce op_01f9_21_nf; extern cpuop_func_ce op_01f9_21_ff; extern cpuop_func_ce op_01fa_21_nf; extern cpuop_func_ce op_01fa_21_ff; extern cpuop_func_ce op_01fb_21_nf; extern cpuop_func_ce op_01fb_21_ff; extern cpuop_func_ce op_0200_21_nf; extern cpuop_func_ce op_0200_21_ff; extern cpuop_func_ce op_0210_21_nf; extern cpuop_func_ce op_0210_21_ff; extern cpuop_func_ce op_0218_21_nf; extern cpuop_func_ce op_0218_21_ff; extern cpuop_func_ce op_0220_21_nf; extern cpuop_func_ce op_0220_21_ff; extern cpuop_func_ce op_0228_21_nf; extern cpuop_func_ce op_0228_21_ff; extern cpuop_func_ce op_0230_21_nf; extern cpuop_func_ce op_0230_21_ff; extern cpuop_func_ce op_0238_21_nf; extern cpuop_func_ce op_0238_21_ff; extern cpuop_func_ce op_0239_21_nf; extern cpuop_func_ce op_0239_21_ff; extern cpuop_func_ce op_023c_21_nf; extern cpuop_func_ce op_023c_21_ff; extern cpuop_func_ce op_0240_21_nf; extern cpuop_func_ce op_0240_21_ff; extern cpuop_func_ce op_0250_21_nf; extern cpuop_func_ce op_0250_21_ff; extern cpuop_func_ce op_0258_21_nf; extern cpuop_func_ce op_0258_21_ff; extern cpuop_func_ce op_0260_21_nf; extern cpuop_func_ce op_0260_21_ff; extern cpuop_func_ce op_0268_21_nf; extern cpuop_func_ce op_0268_21_ff; extern cpuop_func_ce op_0270_21_nf; extern cpuop_func_ce op_0270_21_ff; extern cpuop_func_ce op_0278_21_nf; extern cpuop_func_ce op_0278_21_ff; extern cpuop_func_ce op_0279_21_nf; extern cpuop_func_ce op_0279_21_ff; extern cpuop_func_ce op_027c_21_nf; extern cpuop_func_ce op_027c_21_ff; extern cpuop_func_ce op_0280_21_nf; extern cpuop_func_ce op_0280_21_ff; extern cpuop_func_ce op_0290_21_nf; extern cpuop_func_ce op_0290_21_ff; extern cpuop_func_ce op_0298_21_nf; extern cpuop_func_ce op_0298_21_ff; extern cpuop_func_ce op_02a0_21_nf; extern cpuop_func_ce op_02a0_21_ff; extern cpuop_func_ce op_02a8_21_nf; extern cpuop_func_ce op_02a8_21_ff; extern cpuop_func_ce op_02b0_21_nf; extern cpuop_func_ce op_02b0_21_ff; extern cpuop_func_ce op_02b8_21_nf; extern cpuop_func_ce op_02b8_21_ff; extern cpuop_func_ce op_02b9_21_nf; extern cpuop_func_ce op_02b9_21_ff; extern cpuop_func_ce op_02d0_21_nf; extern cpuop_func_ce op_02d0_21_ff; extern cpuop_func_ce op_02e8_21_nf; extern cpuop_func_ce op_02e8_21_ff; extern cpuop_func_ce op_02f0_21_nf; extern cpuop_func_ce op_02f0_21_ff; extern cpuop_func_ce op_02f8_21_nf; extern cpuop_func_ce op_02f8_21_ff; extern cpuop_func_ce op_02f9_21_nf; extern cpuop_func_ce op_02f9_21_ff; extern cpuop_func_ce op_02fa_21_nf; extern cpuop_func_ce op_02fa_21_ff; extern cpuop_func_ce op_02fb_21_nf; extern cpuop_func_ce op_02fb_21_ff; extern cpuop_func_ce op_0400_21_nf; extern cpuop_func_ce op_0400_21_ff; extern cpuop_func_ce op_0410_21_nf; extern cpuop_func_ce op_0410_21_ff; extern cpuop_func_ce op_0418_21_nf; extern cpuop_func_ce op_0418_21_ff; extern cpuop_func_ce op_0420_21_nf; extern cpuop_func_ce op_0420_21_ff; extern cpuop_func_ce op_0428_21_nf; extern cpuop_func_ce op_0428_21_ff; extern cpuop_func_ce op_0430_21_nf; extern cpuop_func_ce op_0430_21_ff; extern cpuop_func_ce op_0438_21_nf; extern cpuop_func_ce op_0438_21_ff; extern cpuop_func_ce op_0439_21_nf; extern cpuop_func_ce op_0439_21_ff; extern cpuop_func_ce op_0440_21_nf; extern cpuop_func_ce op_0440_21_ff; extern cpuop_func_ce op_0450_21_nf; extern cpuop_func_ce op_0450_21_ff; extern cpuop_func_ce op_0458_21_nf; extern cpuop_func_ce op_0458_21_ff; extern cpuop_func_ce op_0460_21_nf; extern cpuop_func_ce op_0460_21_ff; extern cpuop_func_ce op_0468_21_nf; extern cpuop_func_ce op_0468_21_ff; extern cpuop_func_ce op_0470_21_nf; extern cpuop_func_ce op_0470_21_ff; extern cpuop_func_ce op_0478_21_nf; extern cpuop_func_ce op_0478_21_ff; extern cpuop_func_ce op_0479_21_nf; extern cpuop_func_ce op_0479_21_ff; extern cpuop_func_ce op_0480_21_nf; extern cpuop_func_ce op_0480_21_ff; extern cpuop_func_ce op_0490_21_nf; extern cpuop_func_ce op_0490_21_ff; extern cpuop_func_ce op_0498_21_nf; extern cpuop_func_ce op_0498_21_ff; extern cpuop_func_ce op_04a0_21_nf; extern cpuop_func_ce op_04a0_21_ff; extern cpuop_func_ce op_04a8_21_nf; extern cpuop_func_ce op_04a8_21_ff; extern cpuop_func_ce op_04b0_21_nf; extern cpuop_func_ce op_04b0_21_ff; extern cpuop_func_ce op_04b8_21_nf; extern cpuop_func_ce op_04b8_21_ff; extern cpuop_func_ce op_04b9_21_nf; extern cpuop_func_ce op_04b9_21_ff; extern cpuop_func_ce op_04d0_21_nf; extern cpuop_func_ce op_04d0_21_ff; extern cpuop_func_ce op_04e8_21_nf; extern cpuop_func_ce op_04e8_21_ff; extern cpuop_func_ce op_04f0_21_nf; extern cpuop_func_ce op_04f0_21_ff; extern cpuop_func_ce op_04f8_21_nf; extern cpuop_func_ce op_04f8_21_ff; extern cpuop_func_ce op_04f9_21_nf; extern cpuop_func_ce op_04f9_21_ff; extern cpuop_func_ce op_04fa_21_nf; extern cpuop_func_ce op_04fa_21_ff; extern cpuop_func_ce op_04fb_21_nf; extern cpuop_func_ce op_04fb_21_ff; extern cpuop_func_ce op_0600_21_nf; extern cpuop_func_ce op_0600_21_ff; extern cpuop_func_ce op_0610_21_nf; extern cpuop_func_ce op_0610_21_ff; extern cpuop_func_ce op_0618_21_nf; extern cpuop_func_ce op_0618_21_ff; extern cpuop_func_ce op_0620_21_nf; extern cpuop_func_ce op_0620_21_ff; extern cpuop_func_ce op_0628_21_nf; extern cpuop_func_ce op_0628_21_ff; extern cpuop_func_ce op_0630_21_nf; extern cpuop_func_ce op_0630_21_ff; extern cpuop_func_ce op_0638_21_nf; extern cpuop_func_ce op_0638_21_ff; extern cpuop_func_ce op_0639_21_nf; extern cpuop_func_ce op_0639_21_ff; extern cpuop_func_ce op_0640_21_nf; extern cpuop_func_ce op_0640_21_ff; extern cpuop_func_ce op_0650_21_nf; extern cpuop_func_ce op_0650_21_ff; extern cpuop_func_ce op_0658_21_nf; extern cpuop_func_ce op_0658_21_ff; extern cpuop_func_ce op_0660_21_nf; extern cpuop_func_ce op_0660_21_ff; extern cpuop_func_ce op_0668_21_nf; extern cpuop_func_ce op_0668_21_ff; extern cpuop_func_ce op_0670_21_nf; extern cpuop_func_ce op_0670_21_ff; extern cpuop_func_ce op_0678_21_nf; extern cpuop_func_ce op_0678_21_ff; extern cpuop_func_ce op_0679_21_nf; extern cpuop_func_ce op_0679_21_ff; extern cpuop_func_ce op_0680_21_nf; extern cpuop_func_ce op_0680_21_ff; extern cpuop_func_ce op_0690_21_nf; extern cpuop_func_ce op_0690_21_ff; extern cpuop_func_ce op_0698_21_nf; extern cpuop_func_ce op_0698_21_ff; extern cpuop_func_ce op_06a0_21_nf; extern cpuop_func_ce op_06a0_21_ff; extern cpuop_func_ce op_06a8_21_nf; extern cpuop_func_ce op_06a8_21_ff; extern cpuop_func_ce op_06b0_21_nf; extern cpuop_func_ce op_06b0_21_ff; extern cpuop_func_ce op_06b8_21_nf; extern cpuop_func_ce op_06b8_21_ff; extern cpuop_func_ce op_06b9_21_nf; extern cpuop_func_ce op_06b9_21_ff; extern cpuop_func_ce op_06c0_21_nf; extern cpuop_func_ce op_06c0_21_ff; extern cpuop_func_ce op_06c8_21_nf; extern cpuop_func_ce op_06c8_21_ff; extern cpuop_func_ce op_06d0_21_nf; extern cpuop_func_ce op_06d0_21_ff; extern cpuop_func_ce op_06e8_21_nf; extern cpuop_func_ce op_06e8_21_ff; extern cpuop_func_ce op_06f0_21_nf; extern cpuop_func_ce op_06f0_21_ff; extern cpuop_func_ce op_06f8_21_nf; extern cpuop_func_ce op_06f8_21_ff; extern cpuop_func_ce op_06f9_21_nf; extern cpuop_func_ce op_06f9_21_ff; extern cpuop_func_ce op_06fa_21_nf; extern cpuop_func_ce op_06fa_21_ff; extern cpuop_func_ce op_06fb_21_nf; extern cpuop_func_ce op_06fb_21_ff; extern cpuop_func_ce op_0800_21_nf; extern cpuop_func_ce op_0800_21_ff; extern cpuop_func_ce op_0810_21_nf; extern cpuop_func_ce op_0810_21_ff; extern cpuop_func_ce op_0818_21_nf; extern cpuop_func_ce op_0818_21_ff; extern cpuop_func_ce op_0820_21_nf; extern cpuop_func_ce op_0820_21_ff; extern cpuop_func_ce op_0828_21_nf; extern cpuop_func_ce op_0828_21_ff; extern cpuop_func_ce op_0830_21_nf; extern cpuop_func_ce op_0830_21_ff; extern cpuop_func_ce op_0838_21_nf; extern cpuop_func_ce op_0838_21_ff; extern cpuop_func_ce op_0839_21_nf; extern cpuop_func_ce op_0839_21_ff; extern cpuop_func_ce op_083a_21_nf; extern cpuop_func_ce op_083a_21_ff; extern cpuop_func_ce op_083b_21_nf; extern cpuop_func_ce op_083b_21_ff; extern cpuop_func_ce op_083c_21_nf; extern cpuop_func_ce op_083c_21_ff; extern cpuop_func_ce op_0840_21_nf; extern cpuop_func_ce op_0840_21_ff; extern cpuop_func_ce op_0850_21_nf; extern cpuop_func_ce op_0850_21_ff; extern cpuop_func_ce op_0858_21_nf; extern cpuop_func_ce op_0858_21_ff; extern cpuop_func_ce op_0860_21_nf; extern cpuop_func_ce op_0860_21_ff; extern cpuop_func_ce op_0868_21_nf; extern cpuop_func_ce op_0868_21_ff; extern cpuop_func_ce op_0870_21_nf; extern cpuop_func_ce op_0870_21_ff; extern cpuop_func_ce op_0878_21_nf; extern cpuop_func_ce op_0878_21_ff; extern cpuop_func_ce op_0879_21_nf; extern cpuop_func_ce op_0879_21_ff; extern cpuop_func_ce op_087a_21_nf; extern cpuop_func_ce op_087a_21_ff; extern cpuop_func_ce op_087b_21_nf; extern cpuop_func_ce op_087b_21_ff; extern cpuop_func_ce op_0880_21_nf; extern cpuop_func_ce op_0880_21_ff; extern cpuop_func_ce op_0890_21_nf; extern cpuop_func_ce op_0890_21_ff; extern cpuop_func_ce op_0898_21_nf; extern cpuop_func_ce op_0898_21_ff; extern cpuop_func_ce op_08a0_21_nf; extern cpuop_func_ce op_08a0_21_ff; extern cpuop_func_ce op_08a8_21_nf; extern cpuop_func_ce op_08a8_21_ff; extern cpuop_func_ce op_08b0_21_nf; extern cpuop_func_ce op_08b0_21_ff; extern cpuop_func_ce op_08b8_21_nf; extern cpuop_func_ce op_08b8_21_ff; extern cpuop_func_ce op_08b9_21_nf; extern cpuop_func_ce op_08b9_21_ff; extern cpuop_func_ce op_08ba_21_nf; extern cpuop_func_ce op_08ba_21_ff; extern cpuop_func_ce op_08bb_21_nf; extern cpuop_func_ce op_08bb_21_ff; extern cpuop_func_ce op_08c0_21_nf; extern cpuop_func_ce op_08c0_21_ff; extern cpuop_func_ce op_08d0_21_nf; extern cpuop_func_ce op_08d0_21_ff; extern cpuop_func_ce op_08d8_21_nf; extern cpuop_func_ce op_08d8_21_ff; extern cpuop_func_ce op_08e0_21_nf; extern cpuop_func_ce op_08e0_21_ff; extern cpuop_func_ce op_08e8_21_nf; extern cpuop_func_ce op_08e8_21_ff; extern cpuop_func_ce op_08f0_21_nf; extern cpuop_func_ce op_08f0_21_ff; extern cpuop_func_ce op_08f8_21_nf; extern cpuop_func_ce op_08f8_21_ff; extern cpuop_func_ce op_08f9_21_nf; extern cpuop_func_ce op_08f9_21_ff; extern cpuop_func_ce op_08fa_21_nf; extern cpuop_func_ce op_08fa_21_ff; extern cpuop_func_ce op_08fb_21_nf; extern cpuop_func_ce op_08fb_21_ff; extern cpuop_func_ce op_0a00_21_nf; extern cpuop_func_ce op_0a00_21_ff; extern cpuop_func_ce op_0a10_21_nf; extern cpuop_func_ce op_0a10_21_ff; extern cpuop_func_ce op_0a18_21_nf; extern cpuop_func_ce op_0a18_21_ff; extern cpuop_func_ce op_0a20_21_nf; extern cpuop_func_ce op_0a20_21_ff; extern cpuop_func_ce op_0a28_21_nf; extern cpuop_func_ce op_0a28_21_ff; extern cpuop_func_ce op_0a30_21_nf; extern cpuop_func_ce op_0a30_21_ff; extern cpuop_func_ce op_0a38_21_nf; extern cpuop_func_ce op_0a38_21_ff; extern cpuop_func_ce op_0a39_21_nf; extern cpuop_func_ce op_0a39_21_ff; extern cpuop_func_ce op_0a3c_21_nf; extern cpuop_func_ce op_0a3c_21_ff; extern cpuop_func_ce op_0a40_21_nf; extern cpuop_func_ce op_0a40_21_ff; extern cpuop_func_ce op_0a50_21_nf; extern cpuop_func_ce op_0a50_21_ff; extern cpuop_func_ce op_0a58_21_nf; extern cpuop_func_ce op_0a58_21_ff; extern cpuop_func_ce op_0a60_21_nf; extern cpuop_func_ce op_0a60_21_ff; extern cpuop_func_ce op_0a68_21_nf; extern cpuop_func_ce op_0a68_21_ff; extern cpuop_func_ce op_0a70_21_nf; extern cpuop_func_ce op_0a70_21_ff; extern cpuop_func_ce op_0a78_21_nf; extern cpuop_func_ce op_0a78_21_ff; extern cpuop_func_ce op_0a79_21_nf; extern cpuop_func_ce op_0a79_21_ff; extern cpuop_func_ce op_0a7c_21_nf; extern cpuop_func_ce op_0a7c_21_ff; extern cpuop_func_ce op_0a80_21_nf; extern cpuop_func_ce op_0a80_21_ff; extern cpuop_func_ce op_0a90_21_nf; extern cpuop_func_ce op_0a90_21_ff; extern cpuop_func_ce op_0a98_21_nf; extern cpuop_func_ce op_0a98_21_ff; extern cpuop_func_ce op_0aa0_21_nf; extern cpuop_func_ce op_0aa0_21_ff; extern cpuop_func_ce op_0aa8_21_nf; extern cpuop_func_ce op_0aa8_21_ff; extern cpuop_func_ce op_0ab0_21_nf; extern cpuop_func_ce op_0ab0_21_ff; extern cpuop_func_ce op_0ab8_21_nf; extern cpuop_func_ce op_0ab8_21_ff; extern cpuop_func_ce op_0ab9_21_nf; extern cpuop_func_ce op_0ab9_21_ff; extern cpuop_func_ce op_0ad0_21_nf; extern cpuop_func_ce op_0ad0_21_ff; extern cpuop_func_ce op_0ad8_21_nf; extern cpuop_func_ce op_0ad8_21_ff; extern cpuop_func_ce op_0ae0_21_nf; extern cpuop_func_ce op_0ae0_21_ff; extern cpuop_func_ce op_0ae8_21_nf; extern cpuop_func_ce op_0ae8_21_ff; extern cpuop_func_ce op_0af0_21_nf; extern cpuop_func_ce op_0af0_21_ff; extern cpuop_func_ce op_0af8_21_nf; extern cpuop_func_ce op_0af8_21_ff; extern cpuop_func_ce op_0af9_21_nf; extern cpuop_func_ce op_0af9_21_ff; extern cpuop_func_ce op_0c00_21_nf; extern cpuop_func_ce op_0c00_21_ff; extern cpuop_func_ce op_0c10_21_nf; extern cpuop_func_ce op_0c10_21_ff; extern cpuop_func_ce op_0c18_21_nf; extern cpuop_func_ce op_0c18_21_ff; extern cpuop_func_ce op_0c20_21_nf; extern cpuop_func_ce op_0c20_21_ff; extern cpuop_func_ce op_0c28_21_nf; extern cpuop_func_ce op_0c28_21_ff; extern cpuop_func_ce op_0c30_21_nf; extern cpuop_func_ce op_0c30_21_ff; extern cpuop_func_ce op_0c38_21_nf; extern cpuop_func_ce op_0c38_21_ff; extern cpuop_func_ce op_0c39_21_nf; extern cpuop_func_ce op_0c39_21_ff; extern cpuop_func_ce op_0c3a_21_nf; extern cpuop_func_ce op_0c3a_21_ff; extern cpuop_func_ce op_0c3b_21_nf; extern cpuop_func_ce op_0c3b_21_ff; extern cpuop_func_ce op_0c40_21_nf; extern cpuop_func_ce op_0c40_21_ff; extern cpuop_func_ce op_0c50_21_nf; extern cpuop_func_ce op_0c50_21_ff; extern cpuop_func_ce op_0c58_21_nf; extern cpuop_func_ce op_0c58_21_ff; extern cpuop_func_ce op_0c60_21_nf; extern cpuop_func_ce op_0c60_21_ff; extern cpuop_func_ce op_0c68_21_nf; extern cpuop_func_ce op_0c68_21_ff; extern cpuop_func_ce op_0c70_21_nf; extern cpuop_func_ce op_0c70_21_ff; extern cpuop_func_ce op_0c78_21_nf; extern cpuop_func_ce op_0c78_21_ff; extern cpuop_func_ce op_0c79_21_nf; extern cpuop_func_ce op_0c79_21_ff; extern cpuop_func_ce op_0c7a_21_nf; extern cpuop_func_ce op_0c7a_21_ff; extern cpuop_func_ce op_0c7b_21_nf; extern cpuop_func_ce op_0c7b_21_ff; extern cpuop_func_ce op_0c80_21_nf; extern cpuop_func_ce op_0c80_21_ff; extern cpuop_func_ce op_0c90_21_nf; extern cpuop_func_ce op_0c90_21_ff; extern cpuop_func_ce op_0c98_21_nf; extern cpuop_func_ce op_0c98_21_ff; extern cpuop_func_ce op_0ca0_21_nf; extern cpuop_func_ce op_0ca0_21_ff; extern cpuop_func_ce op_0ca8_21_nf; extern cpuop_func_ce op_0ca8_21_ff; extern cpuop_func_ce op_0cb0_21_nf; extern cpuop_func_ce op_0cb0_21_ff; extern cpuop_func_ce op_0cb8_21_nf; extern cpuop_func_ce op_0cb8_21_ff; extern cpuop_func_ce op_0cb9_21_nf; extern cpuop_func_ce op_0cb9_21_ff; extern cpuop_func_ce op_0cba_21_nf; extern cpuop_func_ce op_0cba_21_ff; extern cpuop_func_ce op_0cbb_21_nf; extern cpuop_func_ce op_0cbb_21_ff; extern cpuop_func_ce op_0cd0_21_nf; extern cpuop_func_ce op_0cd0_21_ff; extern cpuop_func_ce op_0cd8_21_nf; extern cpuop_func_ce op_0cd8_21_ff; extern cpuop_func_ce op_0ce0_21_nf; extern cpuop_func_ce op_0ce0_21_ff; extern cpuop_func_ce op_0ce8_21_nf; extern cpuop_func_ce op_0ce8_21_ff; extern cpuop_func_ce op_0cf0_21_nf; extern cpuop_func_ce op_0cf0_21_ff; extern cpuop_func_ce op_0cf8_21_nf; extern cpuop_func_ce op_0cf8_21_ff; extern cpuop_func_ce op_0cf9_21_nf; extern cpuop_func_ce op_0cf9_21_ff; extern cpuop_func_ce op_0cfc_21_nf; extern cpuop_func_ce op_0cfc_21_ff; extern cpuop_func_ce op_0e10_21_nf; extern cpuop_func_ce op_0e10_21_ff; extern cpuop_func_ce op_0e18_21_nf; extern cpuop_func_ce op_0e18_21_ff; extern cpuop_func_ce op_0e20_21_nf; extern cpuop_func_ce op_0e20_21_ff; extern cpuop_func_ce op_0e28_21_nf; extern cpuop_func_ce op_0e28_21_ff; extern cpuop_func_ce op_0e30_21_nf; extern cpuop_func_ce op_0e30_21_ff; extern cpuop_func_ce op_0e38_21_nf; extern cpuop_func_ce op_0e38_21_ff; extern cpuop_func_ce op_0e39_21_nf; extern cpuop_func_ce op_0e39_21_ff; extern cpuop_func_ce op_0e50_21_nf; extern cpuop_func_ce op_0e50_21_ff; extern cpuop_func_ce op_0e58_21_nf; extern cpuop_func_ce op_0e58_21_ff; extern cpuop_func_ce op_0e60_21_nf; extern cpuop_func_ce op_0e60_21_ff; extern cpuop_func_ce op_0e68_21_nf; extern cpuop_func_ce op_0e68_21_ff; extern cpuop_func_ce op_0e70_21_nf; extern cpuop_func_ce op_0e70_21_ff; extern cpuop_func_ce op_0e78_21_nf; extern cpuop_func_ce op_0e78_21_ff; extern cpuop_func_ce op_0e79_21_nf; extern cpuop_func_ce op_0e79_21_ff; extern cpuop_func_ce op_0e90_21_nf; extern cpuop_func_ce op_0e90_21_ff; extern cpuop_func_ce op_0e98_21_nf; extern cpuop_func_ce op_0e98_21_ff; extern cpuop_func_ce op_0ea0_21_nf; extern cpuop_func_ce op_0ea0_21_ff; extern cpuop_func_ce op_0ea8_21_nf; extern cpuop_func_ce op_0ea8_21_ff; extern cpuop_func_ce op_0eb0_21_nf; extern cpuop_func_ce op_0eb0_21_ff; extern cpuop_func_ce op_0eb8_21_nf; extern cpuop_func_ce op_0eb8_21_ff; extern cpuop_func_ce op_0eb9_21_nf; extern cpuop_func_ce op_0eb9_21_ff; extern cpuop_func_ce op_0ed0_21_nf; extern cpuop_func_ce op_0ed0_21_ff; extern cpuop_func_ce op_0ed8_21_nf; extern cpuop_func_ce op_0ed8_21_ff; extern cpuop_func_ce op_0ee0_21_nf; extern cpuop_func_ce op_0ee0_21_ff; extern cpuop_func_ce op_0ee8_21_nf; extern cpuop_func_ce op_0ee8_21_ff; extern cpuop_func_ce op_0ef0_21_nf; extern cpuop_func_ce op_0ef0_21_ff; extern cpuop_func_ce op_0ef8_21_nf; extern cpuop_func_ce op_0ef8_21_ff; extern cpuop_func_ce op_0ef9_21_nf; extern cpuop_func_ce op_0ef9_21_ff; extern cpuop_func_ce op_0efc_21_nf; extern cpuop_func_ce op_0efc_21_ff; extern cpuop_func_ce op_1000_21_nf; extern cpuop_func_ce op_1000_21_ff; extern cpuop_func_ce op_1010_21_nf; extern cpuop_func_ce op_1010_21_ff; extern cpuop_func_ce op_1018_21_nf; extern cpuop_func_ce op_1018_21_ff; extern cpuop_func_ce op_1020_21_nf; extern cpuop_func_ce op_1020_21_ff; extern cpuop_func_ce op_1028_21_nf; extern cpuop_func_ce op_1028_21_ff; extern cpuop_func_ce op_1030_21_nf; extern cpuop_func_ce op_1030_21_ff; extern cpuop_func_ce op_1038_21_nf; extern cpuop_func_ce op_1038_21_ff; extern cpuop_func_ce op_1039_21_nf; extern cpuop_func_ce op_1039_21_ff; extern cpuop_func_ce op_103a_21_nf; extern cpuop_func_ce op_103a_21_ff; extern cpuop_func_ce op_103b_21_nf; extern cpuop_func_ce op_103b_21_ff; extern cpuop_func_ce op_103c_21_nf; extern cpuop_func_ce op_103c_21_ff; extern cpuop_func_ce op_1080_21_nf; extern cpuop_func_ce op_1080_21_ff; extern cpuop_func_ce op_1090_21_nf; extern cpuop_func_ce op_1090_21_ff; extern cpuop_func_ce op_1098_21_nf; extern cpuop_func_ce op_1098_21_ff; extern cpuop_func_ce op_10a0_21_nf; extern cpuop_func_ce op_10a0_21_ff; extern cpuop_func_ce op_10a8_21_nf; extern cpuop_func_ce op_10a8_21_ff; extern cpuop_func_ce op_10b0_21_nf; extern cpuop_func_ce op_10b0_21_ff; extern cpuop_func_ce op_10b8_21_nf; extern cpuop_func_ce op_10b8_21_ff; extern cpuop_func_ce op_10b9_21_nf; extern cpuop_func_ce op_10b9_21_ff; extern cpuop_func_ce op_10ba_21_nf; extern cpuop_func_ce op_10ba_21_ff; extern cpuop_func_ce op_10bb_21_nf; extern cpuop_func_ce op_10bb_21_ff; extern cpuop_func_ce op_10bc_21_nf; extern cpuop_func_ce op_10bc_21_ff; extern cpuop_func_ce op_10c0_21_nf; extern cpuop_func_ce op_10c0_21_ff; extern cpuop_func_ce op_10d0_21_nf; extern cpuop_func_ce op_10d0_21_ff; extern cpuop_func_ce op_10d8_21_nf; extern cpuop_func_ce op_10d8_21_ff; extern cpuop_func_ce op_10e0_21_nf; extern cpuop_func_ce op_10e0_21_ff; extern cpuop_func_ce op_10e8_21_nf; extern cpuop_func_ce op_10e8_21_ff; extern cpuop_func_ce op_10f0_21_nf; extern cpuop_func_ce op_10f0_21_ff; extern cpuop_func_ce op_10f8_21_nf; extern cpuop_func_ce op_10f8_21_ff; extern cpuop_func_ce op_10f9_21_nf; extern cpuop_func_ce op_10f9_21_ff; extern cpuop_func_ce op_10fa_21_nf; extern cpuop_func_ce op_10fa_21_ff; extern cpuop_func_ce op_10fb_21_nf; extern cpuop_func_ce op_10fb_21_ff; extern cpuop_func_ce op_10fc_21_nf; extern cpuop_func_ce op_10fc_21_ff; extern cpuop_func_ce op_1100_21_nf; extern cpuop_func_ce op_1100_21_ff; extern cpuop_func_ce op_1110_21_nf; extern cpuop_func_ce op_1110_21_ff; extern cpuop_func_ce op_1118_21_nf; extern cpuop_func_ce op_1118_21_ff; extern cpuop_func_ce op_1120_21_nf; extern cpuop_func_ce op_1120_21_ff; extern cpuop_func_ce op_1128_21_nf; extern cpuop_func_ce op_1128_21_ff; extern cpuop_func_ce op_1130_21_nf; extern cpuop_func_ce op_1130_21_ff; extern cpuop_func_ce op_1138_21_nf; extern cpuop_func_ce op_1138_21_ff; extern cpuop_func_ce op_1139_21_nf; extern cpuop_func_ce op_1139_21_ff; extern cpuop_func_ce op_113a_21_nf; extern cpuop_func_ce op_113a_21_ff; extern cpuop_func_ce op_113b_21_nf; extern cpuop_func_ce op_113b_21_ff; extern cpuop_func_ce op_113c_21_nf; extern cpuop_func_ce op_113c_21_ff; extern cpuop_func_ce op_1140_21_nf; extern cpuop_func_ce op_1140_21_ff; extern cpuop_func_ce op_1150_21_nf; extern cpuop_func_ce op_1150_21_ff; extern cpuop_func_ce op_1158_21_nf; extern cpuop_func_ce op_1158_21_ff; extern cpuop_func_ce op_1160_21_nf; extern cpuop_func_ce op_1160_21_ff; extern cpuop_func_ce op_1168_21_nf; extern cpuop_func_ce op_1168_21_ff; extern cpuop_func_ce op_1170_21_nf; extern cpuop_func_ce op_1170_21_ff; extern cpuop_func_ce op_1178_21_nf; extern cpuop_func_ce op_1178_21_ff; extern cpuop_func_ce op_1179_21_nf; extern cpuop_func_ce op_1179_21_ff; extern cpuop_func_ce op_117a_21_nf; extern cpuop_func_ce op_117a_21_ff; extern cpuop_func_ce op_117b_21_nf; extern cpuop_func_ce op_117b_21_ff; extern cpuop_func_ce op_117c_21_nf; extern cpuop_func_ce op_117c_21_ff; extern cpuop_func_ce op_1180_21_nf; extern cpuop_func_ce op_1180_21_ff; extern cpuop_func_ce op_1190_21_nf; extern cpuop_func_ce op_1190_21_ff; extern cpuop_func_ce op_1198_21_nf; extern cpuop_func_ce op_1198_21_ff; extern cpuop_func_ce op_11a0_21_nf; extern cpuop_func_ce op_11a0_21_ff; extern cpuop_func_ce op_11a8_21_nf; extern cpuop_func_ce op_11a8_21_ff; extern cpuop_func_ce op_11b0_21_nf; extern cpuop_func_ce op_11b0_21_ff; extern cpuop_func_ce op_11b8_21_nf; extern cpuop_func_ce op_11b8_21_ff; extern cpuop_func_ce op_11b9_21_nf; extern cpuop_func_ce op_11b9_21_ff; extern cpuop_func_ce op_11ba_21_nf; extern cpuop_func_ce op_11ba_21_ff; extern cpuop_func_ce op_11bb_21_nf; extern cpuop_func_ce op_11bb_21_ff; extern cpuop_func_ce op_11bc_21_nf; extern cpuop_func_ce op_11bc_21_ff; extern cpuop_func_ce op_11c0_21_nf; extern cpuop_func_ce op_11c0_21_ff; extern cpuop_func_ce op_11d0_21_nf; extern cpuop_func_ce op_11d0_21_ff; extern cpuop_func_ce op_11d8_21_nf; extern cpuop_func_ce op_11d8_21_ff; extern cpuop_func_ce op_11e0_21_nf; extern cpuop_func_ce op_11e0_21_ff; extern cpuop_func_ce op_11e8_21_nf; extern cpuop_func_ce op_11e8_21_ff; extern cpuop_func_ce op_11f0_21_nf; extern cpuop_func_ce op_11f0_21_ff; extern cpuop_func_ce op_11f8_21_nf; extern cpuop_func_ce op_11f8_21_ff; extern cpuop_func_ce op_11f9_21_nf; extern cpuop_func_ce op_11f9_21_ff; extern cpuop_func_ce op_11fa_21_nf; extern cpuop_func_ce op_11fa_21_ff; extern cpuop_func_ce op_11fb_21_nf; extern cpuop_func_ce op_11fb_21_ff; extern cpuop_func_ce op_11fc_21_nf; extern cpuop_func_ce op_11fc_21_ff; extern cpuop_func_ce op_13c0_21_nf; extern cpuop_func_ce op_13c0_21_ff; extern cpuop_func_ce op_13d0_21_nf; extern cpuop_func_ce op_13d0_21_ff; extern cpuop_func_ce op_13d8_21_nf; extern cpuop_func_ce op_13d8_21_ff; extern cpuop_func_ce op_13e0_21_nf; extern cpuop_func_ce op_13e0_21_ff; extern cpuop_func_ce op_13e8_21_nf; extern cpuop_func_ce op_13e8_21_ff; extern cpuop_func_ce op_13f0_21_nf; extern cpuop_func_ce op_13f0_21_ff; extern cpuop_func_ce op_13f8_21_nf; extern cpuop_func_ce op_13f8_21_ff; extern cpuop_func_ce op_13f9_21_nf; extern cpuop_func_ce op_13f9_21_ff; extern cpuop_func_ce op_13fa_21_nf; extern cpuop_func_ce op_13fa_21_ff; extern cpuop_func_ce op_13fb_21_nf; extern cpuop_func_ce op_13fb_21_ff; extern cpuop_func_ce op_13fc_21_nf; extern cpuop_func_ce op_13fc_21_ff; extern cpuop_func_ce op_2000_21_nf; extern cpuop_func_ce op_2000_21_ff; extern cpuop_func_ce op_2008_21_nf; extern cpuop_func_ce op_2008_21_ff; extern cpuop_func_ce op_2010_21_nf; extern cpuop_func_ce op_2010_21_ff; extern cpuop_func_ce op_2018_21_nf; extern cpuop_func_ce op_2018_21_ff; extern cpuop_func_ce op_2020_21_nf; extern cpuop_func_ce op_2020_21_ff; extern cpuop_func_ce op_2028_21_nf; extern cpuop_func_ce op_2028_21_ff; extern cpuop_func_ce op_2030_21_nf; extern cpuop_func_ce op_2030_21_ff; extern cpuop_func_ce op_2038_21_nf; extern cpuop_func_ce op_2038_21_ff; extern cpuop_func_ce op_2039_21_nf; extern cpuop_func_ce op_2039_21_ff; extern cpuop_func_ce op_203a_21_nf; extern cpuop_func_ce op_203a_21_ff; extern cpuop_func_ce op_203b_21_nf; extern cpuop_func_ce op_203b_21_ff; extern cpuop_func_ce op_203c_21_nf; extern cpuop_func_ce op_203c_21_ff; extern cpuop_func_ce op_2040_21_nf; extern cpuop_func_ce op_2040_21_ff; extern cpuop_func_ce op_2048_21_nf; extern cpuop_func_ce op_2048_21_ff; extern cpuop_func_ce op_2050_21_nf; extern cpuop_func_ce op_2050_21_ff; extern cpuop_func_ce op_2058_21_nf; extern cpuop_func_ce op_2058_21_ff; extern cpuop_func_ce op_2060_21_nf; extern cpuop_func_ce op_2060_21_ff; extern cpuop_func_ce op_2068_21_nf; extern cpuop_func_ce op_2068_21_ff; extern cpuop_func_ce op_2070_21_nf; extern cpuop_func_ce op_2070_21_ff; extern cpuop_func_ce op_2078_21_nf; extern cpuop_func_ce op_2078_21_ff; extern cpuop_func_ce op_2079_21_nf; extern cpuop_func_ce op_2079_21_ff; extern cpuop_func_ce op_207a_21_nf; extern cpuop_func_ce op_207a_21_ff; extern cpuop_func_ce op_207b_21_nf; extern cpuop_func_ce op_207b_21_ff; extern cpuop_func_ce op_207c_21_nf; extern cpuop_func_ce op_207c_21_ff; extern cpuop_func_ce op_2080_21_nf; extern cpuop_func_ce op_2080_21_ff; extern cpuop_func_ce op_2088_21_nf; extern cpuop_func_ce op_2088_21_ff; extern cpuop_func_ce op_2090_21_nf; extern cpuop_func_ce op_2090_21_ff; extern cpuop_func_ce op_2098_21_nf; extern cpuop_func_ce op_2098_21_ff; extern cpuop_func_ce op_20a0_21_nf; extern cpuop_func_ce op_20a0_21_ff; extern cpuop_func_ce op_20a8_21_nf; extern cpuop_func_ce op_20a8_21_ff; extern cpuop_func_ce op_20b0_21_nf; extern cpuop_func_ce op_20b0_21_ff; extern cpuop_func_ce op_20b8_21_nf; extern cpuop_func_ce op_20b8_21_ff; extern cpuop_func_ce op_20b9_21_nf; extern cpuop_func_ce op_20b9_21_ff; extern cpuop_func_ce op_20ba_21_nf; extern cpuop_func_ce op_20ba_21_ff; extern cpuop_func_ce op_20bb_21_nf; extern cpuop_func_ce op_20bb_21_ff; extern cpuop_func_ce op_20bc_21_nf; extern cpuop_func_ce op_20bc_21_ff; extern cpuop_func_ce op_20c0_21_nf; extern cpuop_func_ce op_20c0_21_ff; extern cpuop_func_ce op_20c8_21_nf; extern cpuop_func_ce op_20c8_21_ff; extern cpuop_func_ce op_20d0_21_nf; extern cpuop_func_ce op_20d0_21_ff; extern cpuop_func_ce op_20d8_21_nf; extern cpuop_func_ce op_20d8_21_ff; extern cpuop_func_ce op_20e0_21_nf; extern cpuop_func_ce op_20e0_21_ff; extern cpuop_func_ce op_20e8_21_nf; extern cpuop_func_ce op_20e8_21_ff; extern cpuop_func_ce op_20f0_21_nf; extern cpuop_func_ce op_20f0_21_ff; extern cpuop_func_ce op_20f8_21_nf; extern cpuop_func_ce op_20f8_21_ff; extern cpuop_func_ce op_20f9_21_nf; extern cpuop_func_ce op_20f9_21_ff; extern cpuop_func_ce op_20fa_21_nf; extern cpuop_func_ce op_20fa_21_ff; extern cpuop_func_ce op_20fb_21_nf; extern cpuop_func_ce op_20fb_21_ff; extern cpuop_func_ce op_20fc_21_nf; extern cpuop_func_ce op_20fc_21_ff; extern cpuop_func_ce op_2100_21_nf; extern cpuop_func_ce op_2100_21_ff; extern cpuop_func_ce op_2108_21_nf; extern cpuop_func_ce op_2108_21_ff; extern cpuop_func_ce op_2110_21_nf; extern cpuop_func_ce op_2110_21_ff; extern cpuop_func_ce op_2118_21_nf; extern cpuop_func_ce op_2118_21_ff; extern cpuop_func_ce op_2120_21_nf; extern cpuop_func_ce op_2120_21_ff; extern cpuop_func_ce op_2128_21_nf; extern cpuop_func_ce op_2128_21_ff; extern cpuop_func_ce op_2130_21_nf; extern cpuop_func_ce op_2130_21_ff; extern cpuop_func_ce op_2138_21_nf; extern cpuop_func_ce op_2138_21_ff; extern cpuop_func_ce op_2139_21_nf; extern cpuop_func_ce op_2139_21_ff; extern cpuop_func_ce op_213a_21_nf; extern cpuop_func_ce op_213a_21_ff; extern cpuop_func_ce op_213b_21_nf; extern cpuop_func_ce op_213b_21_ff; extern cpuop_func_ce op_213c_21_nf; extern cpuop_func_ce op_213c_21_ff; extern cpuop_func_ce op_2140_21_nf; extern cpuop_func_ce op_2140_21_ff; extern cpuop_func_ce op_2148_21_nf; extern cpuop_func_ce op_2148_21_ff; extern cpuop_func_ce op_2150_21_nf; extern cpuop_func_ce op_2150_21_ff; extern cpuop_func_ce op_2158_21_nf; extern cpuop_func_ce op_2158_21_ff; extern cpuop_func_ce op_2160_21_nf; extern cpuop_func_ce op_2160_21_ff; extern cpuop_func_ce op_2168_21_nf; extern cpuop_func_ce op_2168_21_ff; extern cpuop_func_ce op_2170_21_nf; extern cpuop_func_ce op_2170_21_ff; extern cpuop_func_ce op_2178_21_nf; extern cpuop_func_ce op_2178_21_ff; extern cpuop_func_ce op_2179_21_nf; extern cpuop_func_ce op_2179_21_ff; extern cpuop_func_ce op_217a_21_nf; extern cpuop_func_ce op_217a_21_ff; extern cpuop_func_ce op_217b_21_nf; extern cpuop_func_ce op_217b_21_ff; extern cpuop_func_ce op_217c_21_nf; extern cpuop_func_ce op_217c_21_ff; extern cpuop_func_ce op_2180_21_nf; extern cpuop_func_ce op_2180_21_ff; extern cpuop_func_ce op_2188_21_nf; extern cpuop_func_ce op_2188_21_ff; extern cpuop_func_ce op_2190_21_nf; extern cpuop_func_ce op_2190_21_ff; extern cpuop_func_ce op_2198_21_nf; extern cpuop_func_ce op_2198_21_ff; extern cpuop_func_ce op_21a0_21_nf; extern cpuop_func_ce op_21a0_21_ff; extern cpuop_func_ce op_21a8_21_nf; extern cpuop_func_ce op_21a8_21_ff; extern cpuop_func_ce op_21b0_21_nf; extern cpuop_func_ce op_21b0_21_ff; extern cpuop_func_ce op_21b8_21_nf; extern cpuop_func_ce op_21b8_21_ff; extern cpuop_func_ce op_21b9_21_nf; extern cpuop_func_ce op_21b9_21_ff; extern cpuop_func_ce op_21ba_21_nf; extern cpuop_func_ce op_21ba_21_ff; extern cpuop_func_ce op_21bb_21_nf; extern cpuop_func_ce op_21bb_21_ff; extern cpuop_func_ce op_21bc_21_nf; extern cpuop_func_ce op_21bc_21_ff; extern cpuop_func_ce op_21c0_21_nf; extern cpuop_func_ce op_21c0_21_ff; extern cpuop_func_ce op_21c8_21_nf; extern cpuop_func_ce op_21c8_21_ff; extern cpuop_func_ce op_21d0_21_nf; extern cpuop_func_ce op_21d0_21_ff; extern cpuop_func_ce op_21d8_21_nf; extern cpuop_func_ce op_21d8_21_ff; extern cpuop_func_ce op_21e0_21_nf; extern cpuop_func_ce op_21e0_21_ff; extern cpuop_func_ce op_21e8_21_nf; extern cpuop_func_ce op_21e8_21_ff; extern cpuop_func_ce op_21f0_21_nf; extern cpuop_func_ce op_21f0_21_ff; extern cpuop_func_ce op_21f8_21_nf; extern cpuop_func_ce op_21f8_21_ff; extern cpuop_func_ce op_21f9_21_nf; extern cpuop_func_ce op_21f9_21_ff; extern cpuop_func_ce op_21fa_21_nf; extern cpuop_func_ce op_21fa_21_ff; extern cpuop_func_ce op_21fb_21_nf; extern cpuop_func_ce op_21fb_21_ff; extern cpuop_func_ce op_21fc_21_nf; extern cpuop_func_ce op_21fc_21_ff; extern cpuop_func_ce op_23c0_21_nf; extern cpuop_func_ce op_23c0_21_ff; extern cpuop_func_ce op_23c8_21_nf; extern cpuop_func_ce op_23c8_21_ff; extern cpuop_func_ce op_23d0_21_nf; extern cpuop_func_ce op_23d0_21_ff; extern cpuop_func_ce op_23d8_21_nf; extern cpuop_func_ce op_23d8_21_ff; extern cpuop_func_ce op_23e0_21_nf; extern cpuop_func_ce op_23e0_21_ff; extern cpuop_func_ce op_23e8_21_nf; extern cpuop_func_ce op_23e8_21_ff; extern cpuop_func_ce op_23f0_21_nf; extern cpuop_func_ce op_23f0_21_ff; extern cpuop_func_ce op_23f8_21_nf; extern cpuop_func_ce op_23f8_21_ff; extern cpuop_func_ce op_23f9_21_nf; extern cpuop_func_ce op_23f9_21_ff; extern cpuop_func_ce op_23fa_21_nf; extern cpuop_func_ce op_23fa_21_ff; extern cpuop_func_ce op_23fb_21_nf; extern cpuop_func_ce op_23fb_21_ff; extern cpuop_func_ce op_23fc_21_nf; extern cpuop_func_ce op_23fc_21_ff; extern cpuop_func_ce op_3000_21_nf; extern cpuop_func_ce op_3000_21_ff; extern cpuop_func_ce op_3008_21_nf; extern cpuop_func_ce op_3008_21_ff; extern cpuop_func_ce op_3010_21_nf; extern cpuop_func_ce op_3010_21_ff; extern cpuop_func_ce op_3018_21_nf; extern cpuop_func_ce op_3018_21_ff; extern cpuop_func_ce op_3020_21_nf; extern cpuop_func_ce op_3020_21_ff; extern cpuop_func_ce op_3028_21_nf; extern cpuop_func_ce op_3028_21_ff; extern cpuop_func_ce op_3030_21_nf; extern cpuop_func_ce op_3030_21_ff; extern cpuop_func_ce op_3038_21_nf; extern cpuop_func_ce op_3038_21_ff; extern cpuop_func_ce op_3039_21_nf; extern cpuop_func_ce op_3039_21_ff; extern cpuop_func_ce op_303a_21_nf; extern cpuop_func_ce op_303a_21_ff; extern cpuop_func_ce op_303b_21_nf; extern cpuop_func_ce op_303b_21_ff; extern cpuop_func_ce op_303c_21_nf; extern cpuop_func_ce op_303c_21_ff; extern cpuop_func_ce op_3040_21_nf; extern cpuop_func_ce op_3040_21_ff; extern cpuop_func_ce op_3048_21_nf; extern cpuop_func_ce op_3048_21_ff; extern cpuop_func_ce op_3050_21_nf; extern cpuop_func_ce op_3050_21_ff; extern cpuop_func_ce op_3058_21_nf; extern cpuop_func_ce op_3058_21_ff; extern cpuop_func_ce op_3060_21_nf; extern cpuop_func_ce op_3060_21_ff; extern cpuop_func_ce op_3068_21_nf; extern cpuop_func_ce op_3068_21_ff; extern cpuop_func_ce op_3070_21_nf; extern cpuop_func_ce op_3070_21_ff; extern cpuop_func_ce op_3078_21_nf; extern cpuop_func_ce op_3078_21_ff; extern cpuop_func_ce op_3079_21_nf; extern cpuop_func_ce op_3079_21_ff; extern cpuop_func_ce op_307a_21_nf; extern cpuop_func_ce op_307a_21_ff; extern cpuop_func_ce op_307b_21_nf; extern cpuop_func_ce op_307b_21_ff; extern cpuop_func_ce op_307c_21_nf; extern cpuop_func_ce op_307c_21_ff; extern cpuop_func_ce op_3080_21_nf; extern cpuop_func_ce op_3080_21_ff; extern cpuop_func_ce op_3088_21_nf; extern cpuop_func_ce op_3088_21_ff; extern cpuop_func_ce op_3090_21_nf; extern cpuop_func_ce op_3090_21_ff; extern cpuop_func_ce op_3098_21_nf; extern cpuop_func_ce op_3098_21_ff; extern cpuop_func_ce op_30a0_21_nf; extern cpuop_func_ce op_30a0_21_ff; extern cpuop_func_ce op_30a8_21_nf; extern cpuop_func_ce op_30a8_21_ff; extern cpuop_func_ce op_30b0_21_nf; extern cpuop_func_ce op_30b0_21_ff; extern cpuop_func_ce op_30b8_21_nf; extern cpuop_func_ce op_30b8_21_ff; extern cpuop_func_ce op_30b9_21_nf; extern cpuop_func_ce op_30b9_21_ff; extern cpuop_func_ce op_30ba_21_nf; extern cpuop_func_ce op_30ba_21_ff; extern cpuop_func_ce op_30bb_21_nf; extern cpuop_func_ce op_30bb_21_ff; extern cpuop_func_ce op_30bc_21_nf; extern cpuop_func_ce op_30bc_21_ff; extern cpuop_func_ce op_30c0_21_nf; extern cpuop_func_ce op_30c0_21_ff; extern cpuop_func_ce op_30c8_21_nf; extern cpuop_func_ce op_30c8_21_ff; extern cpuop_func_ce op_30d0_21_nf; extern cpuop_func_ce op_30d0_21_ff; extern cpuop_func_ce op_30d8_21_nf; extern cpuop_func_ce op_30d8_21_ff; extern cpuop_func_ce op_30e0_21_nf; extern cpuop_func_ce op_30e0_21_ff; extern cpuop_func_ce op_30e8_21_nf; extern cpuop_func_ce op_30e8_21_ff; extern cpuop_func_ce op_30f0_21_nf; extern cpuop_func_ce op_30f0_21_ff; extern cpuop_func_ce op_30f8_21_nf; extern cpuop_func_ce op_30f8_21_ff; extern cpuop_func_ce op_30f9_21_nf; extern cpuop_func_ce op_30f9_21_ff; extern cpuop_func_ce op_30fa_21_nf; extern cpuop_func_ce op_30fa_21_ff; extern cpuop_func_ce op_30fb_21_nf; extern cpuop_func_ce op_30fb_21_ff; extern cpuop_func_ce op_30fc_21_nf; extern cpuop_func_ce op_30fc_21_ff; extern cpuop_func_ce op_3100_21_nf; extern cpuop_func_ce op_3100_21_ff; extern cpuop_func_ce op_3108_21_nf; extern cpuop_func_ce op_3108_21_ff; extern cpuop_func_ce op_3110_21_nf; extern cpuop_func_ce op_3110_21_ff; extern cpuop_func_ce op_3118_21_nf; extern cpuop_func_ce op_3118_21_ff; extern cpuop_func_ce op_3120_21_nf; extern cpuop_func_ce op_3120_21_ff; extern cpuop_func_ce op_3128_21_nf; extern cpuop_func_ce op_3128_21_ff; extern cpuop_func_ce op_3130_21_nf; extern cpuop_func_ce op_3130_21_ff; extern cpuop_func_ce op_3138_21_nf; extern cpuop_func_ce op_3138_21_ff; extern cpuop_func_ce op_3139_21_nf; extern cpuop_func_ce op_3139_21_ff; extern cpuop_func_ce op_313a_21_nf; extern cpuop_func_ce op_313a_21_ff; extern cpuop_func_ce op_313b_21_nf; extern cpuop_func_ce op_313b_21_ff; extern cpuop_func_ce op_313c_21_nf; extern cpuop_func_ce op_313c_21_ff; extern cpuop_func_ce op_3140_21_nf; extern cpuop_func_ce op_3140_21_ff; extern cpuop_func_ce op_3148_21_nf; extern cpuop_func_ce op_3148_21_ff; extern cpuop_func_ce op_3150_21_nf; extern cpuop_func_ce op_3150_21_ff; extern cpuop_func_ce op_3158_21_nf; extern cpuop_func_ce op_3158_21_ff; extern cpuop_func_ce op_3160_21_nf; extern cpuop_func_ce op_3160_21_ff; extern cpuop_func_ce op_3168_21_nf; extern cpuop_func_ce op_3168_21_ff; extern cpuop_func_ce op_3170_21_nf; extern cpuop_func_ce op_3170_21_ff; extern cpuop_func_ce op_3178_21_nf; extern cpuop_func_ce op_3178_21_ff; extern cpuop_func_ce op_3179_21_nf; extern cpuop_func_ce op_3179_21_ff; extern cpuop_func_ce op_317a_21_nf; extern cpuop_func_ce op_317a_21_ff; extern cpuop_func_ce op_317b_21_nf; extern cpuop_func_ce op_317b_21_ff; extern cpuop_func_ce op_317c_21_nf; extern cpuop_func_ce op_317c_21_ff; extern cpuop_func_ce op_3180_21_nf; extern cpuop_func_ce op_3180_21_ff; extern cpuop_func_ce op_3188_21_nf; extern cpuop_func_ce op_3188_21_ff; extern cpuop_func_ce op_3190_21_nf; extern cpuop_func_ce op_3190_21_ff; extern cpuop_func_ce op_3198_21_nf; extern cpuop_func_ce op_3198_21_ff; extern cpuop_func_ce op_31a0_21_nf; extern cpuop_func_ce op_31a0_21_ff; extern cpuop_func_ce op_31a8_21_nf; extern cpuop_func_ce op_31a8_21_ff; extern cpuop_func_ce op_31b0_21_nf; extern cpuop_func_ce op_31b0_21_ff; extern cpuop_func_ce op_31b8_21_nf; extern cpuop_func_ce op_31b8_21_ff; extern cpuop_func_ce op_31b9_21_nf; extern cpuop_func_ce op_31b9_21_ff; extern cpuop_func_ce op_31ba_21_nf; extern cpuop_func_ce op_31ba_21_ff; extern cpuop_func_ce op_31bb_21_nf; extern cpuop_func_ce op_31bb_21_ff; extern cpuop_func_ce op_31bc_21_nf; extern cpuop_func_ce op_31bc_21_ff; extern cpuop_func_ce op_31c0_21_nf; extern cpuop_func_ce op_31c0_21_ff; extern cpuop_func_ce op_31c8_21_nf; extern cpuop_func_ce op_31c8_21_ff; extern cpuop_func_ce op_31d0_21_nf; extern cpuop_func_ce op_31d0_21_ff; extern cpuop_func_ce op_31d8_21_nf; extern cpuop_func_ce op_31d8_21_ff; extern cpuop_func_ce op_31e0_21_nf; extern cpuop_func_ce op_31e0_21_ff; extern cpuop_func_ce op_31e8_21_nf; extern cpuop_func_ce op_31e8_21_ff; extern cpuop_func_ce op_31f0_21_nf; extern cpuop_func_ce op_31f0_21_ff; extern cpuop_func_ce op_31f8_21_nf; extern cpuop_func_ce op_31f8_21_ff; extern cpuop_func_ce op_31f9_21_nf; extern cpuop_func_ce op_31f9_21_ff; extern cpuop_func_ce op_31fa_21_nf; extern cpuop_func_ce op_31fa_21_ff; extern cpuop_func_ce op_31fb_21_nf; extern cpuop_func_ce op_31fb_21_ff; extern cpuop_func_ce op_31fc_21_nf; extern cpuop_func_ce op_31fc_21_ff; extern cpuop_func_ce op_33c0_21_nf; extern cpuop_func_ce op_33c0_21_ff; extern cpuop_func_ce op_33c8_21_nf; extern cpuop_func_ce op_33c8_21_ff; extern cpuop_func_ce op_33d0_21_nf; extern cpuop_func_ce op_33d0_21_ff; extern cpuop_func_ce op_33d8_21_nf; extern cpuop_func_ce op_33d8_21_ff; extern cpuop_func_ce op_33e0_21_nf; extern cpuop_func_ce op_33e0_21_ff; extern cpuop_func_ce op_33e8_21_nf; extern cpuop_func_ce op_33e8_21_ff; extern cpuop_func_ce op_33f0_21_nf; extern cpuop_func_ce op_33f0_21_ff; extern cpuop_func_ce op_33f8_21_nf; extern cpuop_func_ce op_33f8_21_ff; extern cpuop_func_ce op_33f9_21_nf; extern cpuop_func_ce op_33f9_21_ff; extern cpuop_func_ce op_33fa_21_nf; extern cpuop_func_ce op_33fa_21_ff; extern cpuop_func_ce op_33fb_21_nf; extern cpuop_func_ce op_33fb_21_ff; extern cpuop_func_ce op_33fc_21_nf; extern cpuop_func_ce op_33fc_21_ff; extern cpuop_func_ce op_4000_21_nf; extern cpuop_func_ce op_4000_21_ff; extern cpuop_func_ce op_4010_21_nf; extern cpuop_func_ce op_4010_21_ff; extern cpuop_func_ce op_4018_21_nf; extern cpuop_func_ce op_4018_21_ff; extern cpuop_func_ce op_4020_21_nf; extern cpuop_func_ce op_4020_21_ff; extern cpuop_func_ce op_4028_21_nf; extern cpuop_func_ce op_4028_21_ff; extern cpuop_func_ce op_4030_21_nf; extern cpuop_func_ce op_4030_21_ff; extern cpuop_func_ce op_4038_21_nf; extern cpuop_func_ce op_4038_21_ff; extern cpuop_func_ce op_4039_21_nf; extern cpuop_func_ce op_4039_21_ff; extern cpuop_func_ce op_4040_21_nf; extern cpuop_func_ce op_4040_21_ff; extern cpuop_func_ce op_4050_21_nf; extern cpuop_func_ce op_4050_21_ff; extern cpuop_func_ce op_4058_21_nf; extern cpuop_func_ce op_4058_21_ff; extern cpuop_func_ce op_4060_21_nf; extern cpuop_func_ce op_4060_21_ff; extern cpuop_func_ce op_4068_21_nf; extern cpuop_func_ce op_4068_21_ff; extern cpuop_func_ce op_4070_21_nf; extern cpuop_func_ce op_4070_21_ff; extern cpuop_func_ce op_4078_21_nf; extern cpuop_func_ce op_4078_21_ff; extern cpuop_func_ce op_4079_21_nf; extern cpuop_func_ce op_4079_21_ff; extern cpuop_func_ce op_4080_21_nf; extern cpuop_func_ce op_4080_21_ff; extern cpuop_func_ce op_4090_21_nf; extern cpuop_func_ce op_4090_21_ff; extern cpuop_func_ce op_4098_21_nf; extern cpuop_func_ce op_4098_21_ff; extern cpuop_func_ce op_40a0_21_nf; extern cpuop_func_ce op_40a0_21_ff; extern cpuop_func_ce op_40a8_21_nf; extern cpuop_func_ce op_40a8_21_ff; extern cpuop_func_ce op_40b0_21_nf; extern cpuop_func_ce op_40b0_21_ff; extern cpuop_func_ce op_40b8_21_nf; extern cpuop_func_ce op_40b8_21_ff; extern cpuop_func_ce op_40b9_21_nf; extern cpuop_func_ce op_40b9_21_ff; extern cpuop_func_ce op_40c0_21_nf; extern cpuop_func_ce op_40c0_21_ff; extern cpuop_func_ce op_40d0_21_nf; extern cpuop_func_ce op_40d0_21_ff; extern cpuop_func_ce op_40d8_21_nf; extern cpuop_func_ce op_40d8_21_ff; extern cpuop_func_ce op_40e0_21_nf; extern cpuop_func_ce op_40e0_21_ff; extern cpuop_func_ce op_40e8_21_nf; extern cpuop_func_ce op_40e8_21_ff; extern cpuop_func_ce op_40f0_21_nf; extern cpuop_func_ce op_40f0_21_ff; extern cpuop_func_ce op_40f8_21_nf; extern cpuop_func_ce op_40f8_21_ff; extern cpuop_func_ce op_40f9_21_nf; extern cpuop_func_ce op_40f9_21_ff; extern cpuop_func_ce op_4100_21_nf; extern cpuop_func_ce op_4100_21_ff; extern cpuop_func_ce op_4110_21_nf; extern cpuop_func_ce op_4110_21_ff; extern cpuop_func_ce op_4118_21_nf; extern cpuop_func_ce op_4118_21_ff; extern cpuop_func_ce op_4120_21_nf; extern cpuop_func_ce op_4120_21_ff; extern cpuop_func_ce op_4128_21_nf; extern cpuop_func_ce op_4128_21_ff; extern cpuop_func_ce op_4130_21_nf; extern cpuop_func_ce op_4130_21_ff; extern cpuop_func_ce op_4138_21_nf; extern cpuop_func_ce op_4138_21_ff; extern cpuop_func_ce op_4139_21_nf; extern cpuop_func_ce op_4139_21_ff; extern cpuop_func_ce op_413a_21_nf; extern cpuop_func_ce op_413a_21_ff; extern cpuop_func_ce op_413b_21_nf; extern cpuop_func_ce op_413b_21_ff; extern cpuop_func_ce op_413c_21_nf; extern cpuop_func_ce op_413c_21_ff; extern cpuop_func_ce op_4180_21_nf; extern cpuop_func_ce op_4180_21_ff; extern cpuop_func_ce op_4190_21_nf; extern cpuop_func_ce op_4190_21_ff; extern cpuop_func_ce op_4198_21_nf; extern cpuop_func_ce op_4198_21_ff; extern cpuop_func_ce op_41a0_21_nf; extern cpuop_func_ce op_41a0_21_ff; extern cpuop_func_ce op_41a8_21_nf; extern cpuop_func_ce op_41a8_21_ff; extern cpuop_func_ce op_41b0_21_nf; extern cpuop_func_ce op_41b0_21_ff; extern cpuop_func_ce op_41b8_21_nf; extern cpuop_func_ce op_41b8_21_ff; extern cpuop_func_ce op_41b9_21_nf; extern cpuop_func_ce op_41b9_21_ff; extern cpuop_func_ce op_41ba_21_nf; extern cpuop_func_ce op_41ba_21_ff; extern cpuop_func_ce op_41bb_21_nf; extern cpuop_func_ce op_41bb_21_ff; extern cpuop_func_ce op_41bc_21_nf; extern cpuop_func_ce op_41bc_21_ff; extern cpuop_func_ce op_41d0_21_nf; extern cpuop_func_ce op_41d0_21_ff; extern cpuop_func_ce op_41e8_21_nf; extern cpuop_func_ce op_41e8_21_ff; extern cpuop_func_ce op_41f0_21_nf; extern cpuop_func_ce op_41f0_21_ff; extern cpuop_func_ce op_41f8_21_nf; extern cpuop_func_ce op_41f8_21_ff; extern cpuop_func_ce op_41f9_21_nf; extern cpuop_func_ce op_41f9_21_ff; extern cpuop_func_ce op_41fa_21_nf; extern cpuop_func_ce op_41fa_21_ff; extern cpuop_func_ce op_41fb_21_nf; extern cpuop_func_ce op_41fb_21_ff; extern cpuop_func_ce op_4200_21_nf; extern cpuop_func_ce op_4200_21_ff; extern cpuop_func_ce op_4210_21_nf; extern cpuop_func_ce op_4210_21_ff; extern cpuop_func_ce op_4218_21_nf; extern cpuop_func_ce op_4218_21_ff; extern cpuop_func_ce op_4220_21_nf; extern cpuop_func_ce op_4220_21_ff; extern cpuop_func_ce op_4228_21_nf; extern cpuop_func_ce op_4228_21_ff; extern cpuop_func_ce op_4230_21_nf; extern cpuop_func_ce op_4230_21_ff; extern cpuop_func_ce op_4238_21_nf; extern cpuop_func_ce op_4238_21_ff; extern cpuop_func_ce op_4239_21_nf; extern cpuop_func_ce op_4239_21_ff; extern cpuop_func_ce op_4240_21_nf; extern cpuop_func_ce op_4240_21_ff; extern cpuop_func_ce op_4250_21_nf; extern cpuop_func_ce op_4250_21_ff; extern cpuop_func_ce op_4258_21_nf; extern cpuop_func_ce op_4258_21_ff; extern cpuop_func_ce op_4260_21_nf; extern cpuop_func_ce op_4260_21_ff; extern cpuop_func_ce op_4268_21_nf; extern cpuop_func_ce op_4268_21_ff; extern cpuop_func_ce op_4270_21_nf; extern cpuop_func_ce op_4270_21_ff; extern cpuop_func_ce op_4278_21_nf; extern cpuop_func_ce op_4278_21_ff; extern cpuop_func_ce op_4279_21_nf; extern cpuop_func_ce op_4279_21_ff; extern cpuop_func_ce op_4280_21_nf; extern cpuop_func_ce op_4280_21_ff; extern cpuop_func_ce op_4290_21_nf; extern cpuop_func_ce op_4290_21_ff; extern cpuop_func_ce op_4298_21_nf; extern cpuop_func_ce op_4298_21_ff; extern cpuop_func_ce op_42a0_21_nf; extern cpuop_func_ce op_42a0_21_ff; extern cpuop_func_ce op_42a8_21_nf; extern cpuop_func_ce op_42a8_21_ff; extern cpuop_func_ce op_42b0_21_nf; extern cpuop_func_ce op_42b0_21_ff; extern cpuop_func_ce op_42b8_21_nf; extern cpuop_func_ce op_42b8_21_ff; extern cpuop_func_ce op_42b9_21_nf; extern cpuop_func_ce op_42b9_21_ff; extern cpuop_func_ce op_42c0_21_nf; extern cpuop_func_ce op_42c0_21_ff; extern cpuop_func_ce op_42d0_21_nf; extern cpuop_func_ce op_42d0_21_ff; extern cpuop_func_ce op_42d8_21_nf; extern cpuop_func_ce op_42d8_21_ff; extern cpuop_func_ce op_42e0_21_nf; extern cpuop_func_ce op_42e0_21_ff; extern cpuop_func_ce op_42e8_21_nf; extern cpuop_func_ce op_42e8_21_ff; extern cpuop_func_ce op_42f0_21_nf; extern cpuop_func_ce op_42f0_21_ff; extern cpuop_func_ce op_42f8_21_nf; extern cpuop_func_ce op_42f8_21_ff; extern cpuop_func_ce op_42f9_21_nf; extern cpuop_func_ce op_42f9_21_ff; extern cpuop_func_ce op_4400_21_nf; extern cpuop_func_ce op_4400_21_ff; extern cpuop_func_ce op_4410_21_nf; extern cpuop_func_ce op_4410_21_ff; extern cpuop_func_ce op_4418_21_nf; extern cpuop_func_ce op_4418_21_ff; extern cpuop_func_ce op_4420_21_nf; extern cpuop_func_ce op_4420_21_ff; extern cpuop_func_ce op_4428_21_nf; extern cpuop_func_ce op_4428_21_ff; extern cpuop_func_ce op_4430_21_nf; extern cpuop_func_ce op_4430_21_ff; extern cpuop_func_ce op_4438_21_nf; extern cpuop_func_ce op_4438_21_ff; extern cpuop_func_ce op_4439_21_nf; extern cpuop_func_ce op_4439_21_ff; extern cpuop_func_ce op_4440_21_nf; extern cpuop_func_ce op_4440_21_ff; extern cpuop_func_ce op_4450_21_nf; extern cpuop_func_ce op_4450_21_ff; extern cpuop_func_ce op_4458_21_nf; extern cpuop_func_ce op_4458_21_ff; extern cpuop_func_ce op_4460_21_nf; extern cpuop_func_ce op_4460_21_ff; extern cpuop_func_ce op_4468_21_nf; extern cpuop_func_ce op_4468_21_ff; extern cpuop_func_ce op_4470_21_nf; extern cpuop_func_ce op_4470_21_ff; extern cpuop_func_ce op_4478_21_nf; extern cpuop_func_ce op_4478_21_ff; extern cpuop_func_ce op_4479_21_nf; extern cpuop_func_ce op_4479_21_ff; extern cpuop_func_ce op_4480_21_nf; extern cpuop_func_ce op_4480_21_ff; extern cpuop_func_ce op_4490_21_nf; extern cpuop_func_ce op_4490_21_ff; extern cpuop_func_ce op_4498_21_nf; extern cpuop_func_ce op_4498_21_ff; extern cpuop_func_ce op_44a0_21_nf; extern cpuop_func_ce op_44a0_21_ff; extern cpuop_func_ce op_44a8_21_nf; extern cpuop_func_ce op_44a8_21_ff; extern cpuop_func_ce op_44b0_21_nf; extern cpuop_func_ce op_44b0_21_ff; extern cpuop_func_ce op_44b8_21_nf; extern cpuop_func_ce op_44b8_21_ff; extern cpuop_func_ce op_44b9_21_nf; extern cpuop_func_ce op_44b9_21_ff; extern cpuop_func_ce op_44c0_21_nf; extern cpuop_func_ce op_44c0_21_ff; extern cpuop_func_ce op_44d0_21_nf; extern cpuop_func_ce op_44d0_21_ff; extern cpuop_func_ce op_44d8_21_nf; extern cpuop_func_ce op_44d8_21_ff; extern cpuop_func_ce op_44e0_21_nf; extern cpuop_func_ce op_44e0_21_ff; extern cpuop_func_ce op_44e8_21_nf; extern cpuop_func_ce op_44e8_21_ff; extern cpuop_func_ce op_44f0_21_nf; extern cpuop_func_ce op_44f0_21_ff; extern cpuop_func_ce op_44f8_21_nf; extern cpuop_func_ce op_44f8_21_ff; extern cpuop_func_ce op_44f9_21_nf; extern cpuop_func_ce op_44f9_21_ff; extern cpuop_func_ce op_44fa_21_nf; extern cpuop_func_ce op_44fa_21_ff; extern cpuop_func_ce op_44fb_21_nf; extern cpuop_func_ce op_44fb_21_ff; extern cpuop_func_ce op_44fc_21_nf; extern cpuop_func_ce op_44fc_21_ff; extern cpuop_func_ce op_4600_21_nf; extern cpuop_func_ce op_4600_21_ff; extern cpuop_func_ce op_4610_21_nf; extern cpuop_func_ce op_4610_21_ff; extern cpuop_func_ce op_4618_21_nf; extern cpuop_func_ce op_4618_21_ff; extern cpuop_func_ce op_4620_21_nf; extern cpuop_func_ce op_4620_21_ff; extern cpuop_func_ce op_4628_21_nf; extern cpuop_func_ce op_4628_21_ff; extern cpuop_func_ce op_4630_21_nf; extern cpuop_func_ce op_4630_21_ff; extern cpuop_func_ce op_4638_21_nf; extern cpuop_func_ce op_4638_21_ff; extern cpuop_func_ce op_4639_21_nf; extern cpuop_func_ce op_4639_21_ff; extern cpuop_func_ce op_4640_21_nf; extern cpuop_func_ce op_4640_21_ff; extern cpuop_func_ce op_4650_21_nf; extern cpuop_func_ce op_4650_21_ff; extern cpuop_func_ce op_4658_21_nf; extern cpuop_func_ce op_4658_21_ff; extern cpuop_func_ce op_4660_21_nf; extern cpuop_func_ce op_4660_21_ff; extern cpuop_func_ce op_4668_21_nf; extern cpuop_func_ce op_4668_21_ff; extern cpuop_func_ce op_4670_21_nf; extern cpuop_func_ce op_4670_21_ff; extern cpuop_func_ce op_4678_21_nf; extern cpuop_func_ce op_4678_21_ff; extern cpuop_func_ce op_4679_21_nf; extern cpuop_func_ce op_4679_21_ff; extern cpuop_func_ce op_4680_21_nf; extern cpuop_func_ce op_4680_21_ff; extern cpuop_func_ce op_4690_21_nf; extern cpuop_func_ce op_4690_21_ff; extern cpuop_func_ce op_4698_21_nf; extern cpuop_func_ce op_4698_21_ff; extern cpuop_func_ce op_46a0_21_nf; extern cpuop_func_ce op_46a0_21_ff; extern cpuop_func_ce op_46a8_21_nf; extern cpuop_func_ce op_46a8_21_ff; extern cpuop_func_ce op_46b0_21_nf; extern cpuop_func_ce op_46b0_21_ff; extern cpuop_func_ce op_46b8_21_nf; extern cpuop_func_ce op_46b8_21_ff; extern cpuop_func_ce op_46b9_21_nf; extern cpuop_func_ce op_46b9_21_ff; extern cpuop_func_ce op_46c0_21_nf; extern cpuop_func_ce op_46c0_21_ff; extern cpuop_func_ce op_46d0_21_nf; extern cpuop_func_ce op_46d0_21_ff; extern cpuop_func_ce op_46d8_21_nf; extern cpuop_func_ce op_46d8_21_ff; extern cpuop_func_ce op_46e0_21_nf; extern cpuop_func_ce op_46e0_21_ff; extern cpuop_func_ce op_46e8_21_nf; extern cpuop_func_ce op_46e8_21_ff; extern cpuop_func_ce op_46f0_21_nf; extern cpuop_func_ce op_46f0_21_ff; extern cpuop_func_ce op_46f8_21_nf; extern cpuop_func_ce op_46f8_21_ff; extern cpuop_func_ce op_46f9_21_nf; extern cpuop_func_ce op_46f9_21_ff; extern cpuop_func_ce op_46fa_21_nf; extern cpuop_func_ce op_46fa_21_ff; extern cpuop_func_ce op_46fb_21_nf; extern cpuop_func_ce op_46fb_21_ff; extern cpuop_func_ce op_46fc_21_nf; extern cpuop_func_ce op_46fc_21_ff; extern cpuop_func_ce op_4800_21_nf; extern cpuop_func_ce op_4800_21_ff; extern cpuop_func_ce op_4808_21_nf; extern cpuop_func_ce op_4808_21_ff; extern cpuop_func_ce op_4810_21_nf; extern cpuop_func_ce op_4810_21_ff; extern cpuop_func_ce op_4818_21_nf; extern cpuop_func_ce op_4818_21_ff; extern cpuop_func_ce op_4820_21_nf; extern cpuop_func_ce op_4820_21_ff; extern cpuop_func_ce op_4828_21_nf; extern cpuop_func_ce op_4828_21_ff; extern cpuop_func_ce op_4830_21_nf; extern cpuop_func_ce op_4830_21_ff; extern cpuop_func_ce op_4838_21_nf; extern cpuop_func_ce op_4838_21_ff; extern cpuop_func_ce op_4839_21_nf; extern cpuop_func_ce op_4839_21_ff; extern cpuop_func_ce op_4840_21_nf; extern cpuop_func_ce op_4840_21_ff; extern cpuop_func_ce op_4848_21_nf; extern cpuop_func_ce op_4848_21_ff; extern cpuop_func_ce op_4850_21_nf; extern cpuop_func_ce op_4850_21_ff; extern cpuop_func_ce op_4868_21_nf; extern cpuop_func_ce op_4868_21_ff; extern cpuop_func_ce op_4870_21_nf; extern cpuop_func_ce op_4870_21_ff; extern cpuop_func_ce op_4878_21_nf; extern cpuop_func_ce op_4878_21_ff; extern cpuop_func_ce op_4879_21_nf; extern cpuop_func_ce op_4879_21_ff; extern cpuop_func_ce op_487a_21_nf; extern cpuop_func_ce op_487a_21_ff; extern cpuop_func_ce op_487b_21_nf; extern cpuop_func_ce op_487b_21_ff; extern cpuop_func_ce op_4880_21_nf; extern cpuop_func_ce op_4880_21_ff; extern cpuop_func_ce op_4890_21_nf; extern cpuop_func_ce op_4890_21_ff; extern cpuop_func_ce op_48a0_21_nf; extern cpuop_func_ce op_48a0_21_ff; extern cpuop_func_ce op_48a8_21_nf; extern cpuop_func_ce op_48a8_21_ff; extern cpuop_func_ce op_48b0_21_nf; extern cpuop_func_ce op_48b0_21_ff; extern cpuop_func_ce op_48b8_21_nf; extern cpuop_func_ce op_48b8_21_ff; extern cpuop_func_ce op_48b9_21_nf; extern cpuop_func_ce op_48b9_21_ff; extern cpuop_func_ce op_48c0_21_nf; extern cpuop_func_ce op_48c0_21_ff; extern cpuop_func_ce op_48d0_21_nf; extern cpuop_func_ce op_48d0_21_ff; extern cpuop_func_ce op_48e0_21_nf; extern cpuop_func_ce op_48e0_21_ff; extern cpuop_func_ce op_48e8_21_nf; extern cpuop_func_ce op_48e8_21_ff; extern cpuop_func_ce op_48f0_21_nf; extern cpuop_func_ce op_48f0_21_ff; extern cpuop_func_ce op_48f8_21_nf; extern cpuop_func_ce op_48f8_21_ff; extern cpuop_func_ce op_48f9_21_nf; extern cpuop_func_ce op_48f9_21_ff; extern cpuop_func_ce op_49c0_21_nf; extern cpuop_func_ce op_49c0_21_ff; extern cpuop_func_ce op_4a00_21_nf; extern cpuop_func_ce op_4a00_21_ff; extern cpuop_func_ce op_4a10_21_nf; extern cpuop_func_ce op_4a10_21_ff; extern cpuop_func_ce op_4a18_21_nf; extern cpuop_func_ce op_4a18_21_ff; extern cpuop_func_ce op_4a20_21_nf; extern cpuop_func_ce op_4a20_21_ff; extern cpuop_func_ce op_4a28_21_nf; extern cpuop_func_ce op_4a28_21_ff; extern cpuop_func_ce op_4a30_21_nf; extern cpuop_func_ce op_4a30_21_ff; extern cpuop_func_ce op_4a38_21_nf; extern cpuop_func_ce op_4a38_21_ff; extern cpuop_func_ce op_4a39_21_nf; extern cpuop_func_ce op_4a39_21_ff; extern cpuop_func_ce op_4a3a_21_nf; extern cpuop_func_ce op_4a3a_21_ff; extern cpuop_func_ce op_4a3b_21_nf; extern cpuop_func_ce op_4a3b_21_ff; extern cpuop_func_ce op_4a3c_21_nf; extern cpuop_func_ce op_4a3c_21_ff; extern cpuop_func_ce op_4a40_21_nf; extern cpuop_func_ce op_4a40_21_ff; extern cpuop_func_ce op_4a48_21_nf; extern cpuop_func_ce op_4a48_21_ff; extern cpuop_func_ce op_4a50_21_nf; extern cpuop_func_ce op_4a50_21_ff; extern cpuop_func_ce op_4a58_21_nf; extern cpuop_func_ce op_4a58_21_ff; extern cpuop_func_ce op_4a60_21_nf; extern cpuop_func_ce op_4a60_21_ff; extern cpuop_func_ce op_4a68_21_nf; extern cpuop_func_ce op_4a68_21_ff; extern cpuop_func_ce op_4a70_21_nf; extern cpuop_func_ce op_4a70_21_ff; extern cpuop_func_ce op_4a78_21_nf; extern cpuop_func_ce op_4a78_21_ff; extern cpuop_func_ce op_4a79_21_nf; extern cpuop_func_ce op_4a79_21_ff; extern cpuop_func_ce op_4a7a_21_nf; extern cpuop_func_ce op_4a7a_21_ff; extern cpuop_func_ce op_4a7b_21_nf; extern cpuop_func_ce op_4a7b_21_ff; extern cpuop_func_ce op_4a7c_21_nf; extern cpuop_func_ce op_4a7c_21_ff; extern cpuop_func_ce op_4a80_21_nf; extern cpuop_func_ce op_4a80_21_ff; extern cpuop_func_ce op_4a88_21_nf; extern cpuop_func_ce op_4a88_21_ff; extern cpuop_func_ce op_4a90_21_nf; extern cpuop_func_ce op_4a90_21_ff; extern cpuop_func_ce op_4a98_21_nf; extern cpuop_func_ce op_4a98_21_ff; extern cpuop_func_ce op_4aa0_21_nf; extern cpuop_func_ce op_4aa0_21_ff; extern cpuop_func_ce op_4aa8_21_nf; extern cpuop_func_ce op_4aa8_21_ff; extern cpuop_func_ce op_4ab0_21_nf; extern cpuop_func_ce op_4ab0_21_ff; extern cpuop_func_ce op_4ab8_21_nf; extern cpuop_func_ce op_4ab8_21_ff; extern cpuop_func_ce op_4ab9_21_nf; extern cpuop_func_ce op_4ab9_21_ff; extern cpuop_func_ce op_4aba_21_nf; extern cpuop_func_ce op_4aba_21_ff; extern cpuop_func_ce op_4abb_21_nf; extern cpuop_func_ce op_4abb_21_ff; extern cpuop_func_ce op_4abc_21_nf; extern cpuop_func_ce op_4abc_21_ff; extern cpuop_func_ce op_4ac0_21_nf; extern cpuop_func_ce op_4ac0_21_ff; extern cpuop_func_ce op_4ad0_21_nf; extern cpuop_func_ce op_4ad0_21_ff; extern cpuop_func_ce op_4ad8_21_nf; extern cpuop_func_ce op_4ad8_21_ff; extern cpuop_func_ce op_4ae0_21_nf; extern cpuop_func_ce op_4ae0_21_ff; extern cpuop_func_ce op_4ae8_21_nf; extern cpuop_func_ce op_4ae8_21_ff; extern cpuop_func_ce op_4af0_21_nf; extern cpuop_func_ce op_4af0_21_ff; extern cpuop_func_ce op_4af8_21_nf; extern cpuop_func_ce op_4af8_21_ff; extern cpuop_func_ce op_4af9_21_nf; extern cpuop_func_ce op_4af9_21_ff; extern cpuop_func_ce op_4c00_21_nf; extern cpuop_func_ce op_4c00_21_ff; extern cpuop_func_ce op_4c10_21_nf; extern cpuop_func_ce op_4c10_21_ff; extern cpuop_func_ce op_4c18_21_nf; extern cpuop_func_ce op_4c18_21_ff; extern cpuop_func_ce op_4c20_21_nf; extern cpuop_func_ce op_4c20_21_ff; extern cpuop_func_ce op_4c28_21_nf; extern cpuop_func_ce op_4c28_21_ff; extern cpuop_func_ce op_4c30_21_nf; extern cpuop_func_ce op_4c30_21_ff; extern cpuop_func_ce op_4c38_21_nf; extern cpuop_func_ce op_4c38_21_ff; extern cpuop_func_ce op_4c39_21_nf; extern cpuop_func_ce op_4c39_21_ff; extern cpuop_func_ce op_4c3a_21_nf; extern cpuop_func_ce op_4c3a_21_ff; extern cpuop_func_ce op_4c3b_21_nf; extern cpuop_func_ce op_4c3b_21_ff; extern cpuop_func_ce op_4c3c_21_nf; extern cpuop_func_ce op_4c3c_21_ff; extern cpuop_func_ce op_4c40_21_nf; extern cpuop_func_ce op_4c40_21_ff; extern cpuop_func_ce op_4c50_21_nf; extern cpuop_func_ce op_4c50_21_ff; extern cpuop_func_ce op_4c58_21_nf; extern cpuop_func_ce op_4c58_21_ff; extern cpuop_func_ce op_4c60_21_nf; extern cpuop_func_ce op_4c60_21_ff; extern cpuop_func_ce op_4c68_21_nf; extern cpuop_func_ce op_4c68_21_ff; extern cpuop_func_ce op_4c70_21_nf; extern cpuop_func_ce op_4c70_21_ff; extern cpuop_func_ce op_4c78_21_nf; extern cpuop_func_ce op_4c78_21_ff; extern cpuop_func_ce op_4c79_21_nf; extern cpuop_func_ce op_4c79_21_ff; extern cpuop_func_ce op_4c7a_21_nf; extern cpuop_func_ce op_4c7a_21_ff; extern cpuop_func_ce op_4c7b_21_nf; extern cpuop_func_ce op_4c7b_21_ff; extern cpuop_func_ce op_4c7c_21_nf; extern cpuop_func_ce op_4c7c_21_ff; extern cpuop_func_ce op_4c90_21_nf; extern cpuop_func_ce op_4c90_21_ff; extern cpuop_func_ce op_4c98_21_nf; extern cpuop_func_ce op_4c98_21_ff; extern cpuop_func_ce op_4ca8_21_nf; extern cpuop_func_ce op_4ca8_21_ff; extern cpuop_func_ce op_4cb0_21_nf; extern cpuop_func_ce op_4cb0_21_ff; extern cpuop_func_ce op_4cb8_21_nf; extern cpuop_func_ce op_4cb8_21_ff; extern cpuop_func_ce op_4cb9_21_nf; extern cpuop_func_ce op_4cb9_21_ff; extern cpuop_func_ce op_4cba_21_nf; extern cpuop_func_ce op_4cba_21_ff; extern cpuop_func_ce op_4cbb_21_nf; extern cpuop_func_ce op_4cbb_21_ff; extern cpuop_func_ce op_4cd0_21_nf; extern cpuop_func_ce op_4cd0_21_ff; extern cpuop_func_ce op_4cd8_21_nf; extern cpuop_func_ce op_4cd8_21_ff; extern cpuop_func_ce op_4ce8_21_nf; extern cpuop_func_ce op_4ce8_21_ff; extern cpuop_func_ce op_4cf0_21_nf; extern cpuop_func_ce op_4cf0_21_ff; extern cpuop_func_ce op_4cf8_21_nf; extern cpuop_func_ce op_4cf8_21_ff; extern cpuop_func_ce op_4cf9_21_nf; extern cpuop_func_ce op_4cf9_21_ff; extern cpuop_func_ce op_4cfa_21_nf; extern cpuop_func_ce op_4cfa_21_ff; extern cpuop_func_ce op_4cfb_21_nf; extern cpuop_func_ce op_4cfb_21_ff; extern cpuop_func_ce op_4e40_21_nf; extern cpuop_func_ce op_4e40_21_ff; extern cpuop_func_ce op_4e50_21_nf; extern cpuop_func_ce op_4e50_21_ff; extern cpuop_func_ce op_4e58_21_nf; extern cpuop_func_ce op_4e58_21_ff; extern cpuop_func_ce op_4e60_21_nf; extern cpuop_func_ce op_4e60_21_ff; extern cpuop_func_ce op_4e68_21_nf; extern cpuop_func_ce op_4e68_21_ff; extern cpuop_func_ce op_4e70_21_nf; extern cpuop_func_ce op_4e70_21_ff; extern cpuop_func_ce op_4e71_21_nf; extern cpuop_func_ce op_4e71_21_ff; extern cpuop_func_ce op_4e72_21_nf; extern cpuop_func_ce op_4e72_21_ff; extern cpuop_func_ce op_4e73_21_nf; extern cpuop_func_ce op_4e73_21_ff; extern cpuop_func_ce op_4e74_21_nf; extern cpuop_func_ce op_4e74_21_ff; extern cpuop_func_ce op_4e75_21_nf; extern cpuop_func_ce op_4e75_21_ff; extern cpuop_func_ce op_4e76_21_nf; extern cpuop_func_ce op_4e76_21_ff; extern cpuop_func_ce op_4e77_21_nf; extern cpuop_func_ce op_4e77_21_ff; extern cpuop_func_ce op_4e7a_21_nf; extern cpuop_func_ce op_4e7a_21_ff; extern cpuop_func_ce op_4e7b_21_nf; extern cpuop_func_ce op_4e7b_21_ff; extern cpuop_func_ce op_4e90_21_nf; extern cpuop_func_ce op_4e90_21_ff; extern cpuop_func_ce op_4ea8_21_nf; extern cpuop_func_ce op_4ea8_21_ff; extern cpuop_func_ce op_4eb0_21_nf; extern cpuop_func_ce op_4eb0_21_ff; extern cpuop_func_ce op_4eb8_21_nf; extern cpuop_func_ce op_4eb8_21_ff; extern cpuop_func_ce op_4eb9_21_nf; extern cpuop_func_ce op_4eb9_21_ff; extern cpuop_func_ce op_4eba_21_nf; extern cpuop_func_ce op_4eba_21_ff; extern cpuop_func_ce op_4ebb_21_nf; extern cpuop_func_ce op_4ebb_21_ff; extern cpuop_func_ce op_4ed0_21_nf; extern cpuop_func_ce op_4ed0_21_ff; extern cpuop_func_ce op_4ee8_21_nf; extern cpuop_func_ce op_4ee8_21_ff; extern cpuop_func_ce op_4ef0_21_nf; extern cpuop_func_ce op_4ef0_21_ff; extern cpuop_func_ce op_4ef8_21_nf; extern cpuop_func_ce op_4ef8_21_ff; extern cpuop_func_ce op_4ef9_21_nf; extern cpuop_func_ce op_4ef9_21_ff; extern cpuop_func_ce op_4efa_21_nf; extern cpuop_func_ce op_4efa_21_ff; extern cpuop_func_ce op_4efb_21_nf; extern cpuop_func_ce op_4efb_21_ff; extern cpuop_func_ce op_5000_21_nf; extern cpuop_func_ce op_5000_21_ff; extern cpuop_func_ce op_5010_21_nf; extern cpuop_func_ce op_5010_21_ff; extern cpuop_func_ce op_5018_21_nf; extern cpuop_func_ce op_5018_21_ff; extern cpuop_func_ce op_5020_21_nf; extern cpuop_func_ce op_5020_21_ff; extern cpuop_func_ce op_5028_21_nf; extern cpuop_func_ce op_5028_21_ff; extern cpuop_func_ce op_5030_21_nf; extern cpuop_func_ce op_5030_21_ff; extern cpuop_func_ce op_5038_21_nf; extern cpuop_func_ce op_5038_21_ff; extern cpuop_func_ce op_5039_21_nf; extern cpuop_func_ce op_5039_21_ff; extern cpuop_func_ce op_5040_21_nf; extern cpuop_func_ce op_5040_21_ff; extern cpuop_func_ce op_5048_21_nf; extern cpuop_func_ce op_5048_21_ff; extern cpuop_func_ce op_5050_21_nf; extern cpuop_func_ce op_5050_21_ff; extern cpuop_func_ce op_5058_21_nf; extern cpuop_func_ce op_5058_21_ff; extern cpuop_func_ce op_5060_21_nf; extern cpuop_func_ce op_5060_21_ff; extern cpuop_func_ce op_5068_21_nf; extern cpuop_func_ce op_5068_21_ff; extern cpuop_func_ce op_5070_21_nf; extern cpuop_func_ce op_5070_21_ff; extern cpuop_func_ce op_5078_21_nf; extern cpuop_func_ce op_5078_21_ff; extern cpuop_func_ce op_5079_21_nf; extern cpuop_func_ce op_5079_21_ff; extern cpuop_func_ce op_5080_21_nf; extern cpuop_func_ce op_5080_21_ff; extern cpuop_func_ce op_5088_21_nf; extern cpuop_func_ce op_5088_21_ff; extern cpuop_func_ce op_5090_21_nf; extern cpuop_func_ce op_5090_21_ff; extern cpuop_func_ce op_5098_21_nf; extern cpuop_func_ce op_5098_21_ff; extern cpuop_func_ce op_50a0_21_nf; extern cpuop_func_ce op_50a0_21_ff; extern cpuop_func_ce op_50a8_21_nf; extern cpuop_func_ce op_50a8_21_ff; extern cpuop_func_ce op_50b0_21_nf; extern cpuop_func_ce op_50b0_21_ff; extern cpuop_func_ce op_50b8_21_nf; extern cpuop_func_ce op_50b8_21_ff; extern cpuop_func_ce op_50b9_21_nf; extern cpuop_func_ce op_50b9_21_ff; extern cpuop_func_ce op_50c0_21_nf; extern cpuop_func_ce op_50c0_21_ff; extern cpuop_func_ce op_50c8_21_nf; extern cpuop_func_ce op_50c8_21_ff; extern cpuop_func_ce op_50d0_21_nf; extern cpuop_func_ce op_50d0_21_ff; extern cpuop_func_ce op_50d8_21_nf; extern cpuop_func_ce op_50d8_21_ff; extern cpuop_func_ce op_50e0_21_nf; extern cpuop_func_ce op_50e0_21_ff; extern cpuop_func_ce op_50e8_21_nf; extern cpuop_func_ce op_50e8_21_ff; extern cpuop_func_ce op_50f0_21_nf; extern cpuop_func_ce op_50f0_21_ff; extern cpuop_func_ce op_50f8_21_nf; extern cpuop_func_ce op_50f8_21_ff; extern cpuop_func_ce op_50f9_21_nf; extern cpuop_func_ce op_50f9_21_ff; extern cpuop_func_ce op_50fa_21_nf; extern cpuop_func_ce op_50fa_21_ff; extern cpuop_func_ce op_50fb_21_nf; extern cpuop_func_ce op_50fb_21_ff; extern cpuop_func_ce op_50fc_21_nf; extern cpuop_func_ce op_50fc_21_ff; extern cpuop_func_ce op_5100_21_nf; extern cpuop_func_ce op_5100_21_ff; extern cpuop_func_ce op_5110_21_nf; extern cpuop_func_ce op_5110_21_ff; extern cpuop_func_ce op_5118_21_nf; extern cpuop_func_ce op_5118_21_ff; extern cpuop_func_ce op_5120_21_nf; extern cpuop_func_ce op_5120_21_ff; extern cpuop_func_ce op_5128_21_nf; extern cpuop_func_ce op_5128_21_ff; extern cpuop_func_ce op_5130_21_nf; extern cpuop_func_ce op_5130_21_ff; extern cpuop_func_ce op_5138_21_nf; extern cpuop_func_ce op_5138_21_ff; extern cpuop_func_ce op_5139_21_nf; extern cpuop_func_ce op_5139_21_ff; extern cpuop_func_ce op_5140_21_nf; extern cpuop_func_ce op_5140_21_ff; extern cpuop_func_ce op_5148_21_nf; extern cpuop_func_ce op_5148_21_ff; extern cpuop_func_ce op_5150_21_nf; extern cpuop_func_ce op_5150_21_ff; extern cpuop_func_ce op_5158_21_nf; extern cpuop_func_ce op_5158_21_ff; extern cpuop_func_ce op_5160_21_nf; extern cpuop_func_ce op_5160_21_ff; extern cpuop_func_ce op_5168_21_nf; extern cpuop_func_ce op_5168_21_ff; extern cpuop_func_ce op_5170_21_nf; extern cpuop_func_ce op_5170_21_ff; extern cpuop_func_ce op_5178_21_nf; extern cpuop_func_ce op_5178_21_ff; extern cpuop_func_ce op_5179_21_nf; extern cpuop_func_ce op_5179_21_ff; extern cpuop_func_ce op_5180_21_nf; extern cpuop_func_ce op_5180_21_ff; extern cpuop_func_ce op_5188_21_nf; extern cpuop_func_ce op_5188_21_ff; extern cpuop_func_ce op_5190_21_nf; extern cpuop_func_ce op_5190_21_ff; extern cpuop_func_ce op_5198_21_nf; extern cpuop_func_ce op_5198_21_ff; extern cpuop_func_ce op_51a0_21_nf; extern cpuop_func_ce op_51a0_21_ff; extern cpuop_func_ce op_51a8_21_nf; extern cpuop_func_ce op_51a8_21_ff; extern cpuop_func_ce op_51b0_21_nf; extern cpuop_func_ce op_51b0_21_ff; extern cpuop_func_ce op_51b8_21_nf; extern cpuop_func_ce op_51b8_21_ff; extern cpuop_func_ce op_51b9_21_nf; extern cpuop_func_ce op_51b9_21_ff; extern cpuop_func_ce op_51c0_21_nf; extern cpuop_func_ce op_51c0_21_ff; extern cpuop_func_ce op_51c8_21_nf; extern cpuop_func_ce op_51c8_21_ff; extern cpuop_func_ce op_51d0_21_nf; extern cpuop_func_ce op_51d0_21_ff; extern cpuop_func_ce op_51d8_21_nf; extern cpuop_func_ce op_51d8_21_ff; extern cpuop_func_ce op_51e0_21_nf; extern cpuop_func_ce op_51e0_21_ff; extern cpuop_func_ce op_51e8_21_nf; extern cpuop_func_ce op_51e8_21_ff; extern cpuop_func_ce op_51f0_21_nf; extern cpuop_func_ce op_51f0_21_ff; extern cpuop_func_ce op_51f8_21_nf; extern cpuop_func_ce op_51f8_21_ff; extern cpuop_func_ce op_51f9_21_nf; extern cpuop_func_ce op_51f9_21_ff; extern cpuop_func_ce op_51fa_21_nf; extern cpuop_func_ce op_51fa_21_ff; extern cpuop_func_ce op_51fb_21_nf; extern cpuop_func_ce op_51fb_21_ff; extern cpuop_func_ce op_51fc_21_nf; extern cpuop_func_ce op_51fc_21_ff; extern cpuop_func_ce op_52c0_21_nf; extern cpuop_func_ce op_52c0_21_ff; extern cpuop_func_ce op_52c8_21_nf; extern cpuop_func_ce op_52c8_21_ff; extern cpuop_func_ce op_52d0_21_nf; extern cpuop_func_ce op_52d0_21_ff; extern cpuop_func_ce op_52d8_21_nf; extern cpuop_func_ce op_52d8_21_ff; extern cpuop_func_ce op_52e0_21_nf; extern cpuop_func_ce op_52e0_21_ff; extern cpuop_func_ce op_52e8_21_nf; extern cpuop_func_ce op_52e8_21_ff; extern cpuop_func_ce op_52f0_21_nf; extern cpuop_func_ce op_52f0_21_ff; extern cpuop_func_ce op_52f8_21_nf; extern cpuop_func_ce op_52f8_21_ff; extern cpuop_func_ce op_52f9_21_nf; extern cpuop_func_ce op_52f9_21_ff; extern cpuop_func_ce op_52fa_21_nf; extern cpuop_func_ce op_52fa_21_ff; extern cpuop_func_ce op_52fb_21_nf; extern cpuop_func_ce op_52fb_21_ff; extern cpuop_func_ce op_52fc_21_nf; extern cpuop_func_ce op_52fc_21_ff; extern cpuop_func_ce op_53c0_21_nf; extern cpuop_func_ce op_53c0_21_ff; extern cpuop_func_ce op_53c8_21_nf; extern cpuop_func_ce op_53c8_21_ff; extern cpuop_func_ce op_53d0_21_nf; extern cpuop_func_ce op_53d0_21_ff; extern cpuop_func_ce op_53d8_21_nf; extern cpuop_func_ce op_53d8_21_ff; extern cpuop_func_ce op_53e0_21_nf; extern cpuop_func_ce op_53e0_21_ff; extern cpuop_func_ce op_53e8_21_nf; extern cpuop_func_ce op_53e8_21_ff; extern cpuop_func_ce op_53f0_21_nf; extern cpuop_func_ce op_53f0_21_ff; extern cpuop_func_ce op_53f8_21_nf; extern cpuop_func_ce op_53f8_21_ff; extern cpuop_func_ce op_53f9_21_nf; extern cpuop_func_ce op_53f9_21_ff; extern cpuop_func_ce op_53fa_21_nf; extern cpuop_func_ce op_53fa_21_ff; extern cpuop_func_ce op_53fb_21_nf; extern cpuop_func_ce op_53fb_21_ff; extern cpuop_func_ce op_53fc_21_nf; extern cpuop_func_ce op_53fc_21_ff; extern cpuop_func_ce op_54c0_21_nf; extern cpuop_func_ce op_54c0_21_ff; extern cpuop_func_ce op_54c8_21_nf; extern cpuop_func_ce op_54c8_21_ff; extern cpuop_func_ce op_54d0_21_nf; extern cpuop_func_ce op_54d0_21_ff; extern cpuop_func_ce op_54d8_21_nf; extern cpuop_func_ce op_54d8_21_ff; extern cpuop_func_ce op_54e0_21_nf; extern cpuop_func_ce op_54e0_21_ff; extern cpuop_func_ce op_54e8_21_nf; extern cpuop_func_ce op_54e8_21_ff; extern cpuop_func_ce op_54f0_21_nf; extern cpuop_func_ce op_54f0_21_ff; extern cpuop_func_ce op_54f8_21_nf; extern cpuop_func_ce op_54f8_21_ff; extern cpuop_func_ce op_54f9_21_nf; extern cpuop_func_ce op_54f9_21_ff; extern cpuop_func_ce op_54fa_21_nf; extern cpuop_func_ce op_54fa_21_ff; extern cpuop_func_ce op_54fb_21_nf; extern cpuop_func_ce op_54fb_21_ff; extern cpuop_func_ce op_54fc_21_nf; extern cpuop_func_ce op_54fc_21_ff; extern cpuop_func_ce op_55c0_21_nf; extern cpuop_func_ce op_55c0_21_ff; extern cpuop_func_ce op_55c8_21_nf; extern cpuop_func_ce op_55c8_21_ff; extern cpuop_func_ce op_55d0_21_nf; extern cpuop_func_ce op_55d0_21_ff; extern cpuop_func_ce op_55d8_21_nf; extern cpuop_func_ce op_55d8_21_ff; extern cpuop_func_ce op_55e0_21_nf; extern cpuop_func_ce op_55e0_21_ff; extern cpuop_func_ce op_55e8_21_nf; extern cpuop_func_ce op_55e8_21_ff; extern cpuop_func_ce op_55f0_21_nf; extern cpuop_func_ce op_55f0_21_ff; extern cpuop_func_ce op_55f8_21_nf; extern cpuop_func_ce op_55f8_21_ff; extern cpuop_func_ce op_55f9_21_nf; extern cpuop_func_ce op_55f9_21_ff; extern cpuop_func_ce op_55fa_21_nf; extern cpuop_func_ce op_55fa_21_ff; extern cpuop_func_ce op_55fb_21_nf; extern cpuop_func_ce op_55fb_21_ff; extern cpuop_func_ce op_55fc_21_nf; extern cpuop_func_ce op_55fc_21_ff; extern cpuop_func_ce op_56c0_21_nf; extern cpuop_func_ce op_56c0_21_ff; extern cpuop_func_ce op_56c8_21_nf; extern cpuop_func_ce op_56c8_21_ff; extern cpuop_func_ce op_56d0_21_nf; extern cpuop_func_ce op_56d0_21_ff; extern cpuop_func_ce op_56d8_21_nf; extern cpuop_func_ce op_56d8_21_ff; extern cpuop_func_ce op_56e0_21_nf; extern cpuop_func_ce op_56e0_21_ff; extern cpuop_func_ce op_56e8_21_nf; extern cpuop_func_ce op_56e8_21_ff; extern cpuop_func_ce op_56f0_21_nf; extern cpuop_func_ce op_56f0_21_ff; extern cpuop_func_ce op_56f8_21_nf; extern cpuop_func_ce op_56f8_21_ff; extern cpuop_func_ce op_56f9_21_nf; extern cpuop_func_ce op_56f9_21_ff; extern cpuop_func_ce op_56fa_21_nf; extern cpuop_func_ce op_56fa_21_ff; extern cpuop_func_ce op_56fb_21_nf; extern cpuop_func_ce op_56fb_21_ff; extern cpuop_func_ce op_56fc_21_nf; extern cpuop_func_ce op_56fc_21_ff; extern cpuop_func_ce op_57c0_21_nf; extern cpuop_func_ce op_57c0_21_ff; extern cpuop_func_ce op_57c8_21_nf; extern cpuop_func_ce op_57c8_21_ff; extern cpuop_func_ce op_57d0_21_nf; extern cpuop_func_ce op_57d0_21_ff; extern cpuop_func_ce op_57d8_21_nf; extern cpuop_func_ce op_57d8_21_ff; extern cpuop_func_ce op_57e0_21_nf; extern cpuop_func_ce op_57e0_21_ff; extern cpuop_func_ce op_57e8_21_nf; extern cpuop_func_ce op_57e8_21_ff; extern cpuop_func_ce op_57f0_21_nf; extern cpuop_func_ce op_57f0_21_ff; extern cpuop_func_ce op_57f8_21_nf; extern cpuop_func_ce op_57f8_21_ff; extern cpuop_func_ce op_57f9_21_nf; extern cpuop_func_ce op_57f9_21_ff; extern cpuop_func_ce op_57fa_21_nf; extern cpuop_func_ce op_57fa_21_ff; extern cpuop_func_ce op_57fb_21_nf; extern cpuop_func_ce op_57fb_21_ff; extern cpuop_func_ce op_57fc_21_nf; extern cpuop_func_ce op_57fc_21_ff; extern cpuop_func_ce op_58c0_21_nf; extern cpuop_func_ce op_58c0_21_ff; extern cpuop_func_ce op_58c8_21_nf; extern cpuop_func_ce op_58c8_21_ff; extern cpuop_func_ce op_58d0_21_nf; extern cpuop_func_ce op_58d0_21_ff; extern cpuop_func_ce op_58d8_21_nf; extern cpuop_func_ce op_58d8_21_ff; extern cpuop_func_ce op_58e0_21_nf; extern cpuop_func_ce op_58e0_21_ff; extern cpuop_func_ce op_58e8_21_nf; extern cpuop_func_ce op_58e8_21_ff; extern cpuop_func_ce op_58f0_21_nf; extern cpuop_func_ce op_58f0_21_ff; extern cpuop_func_ce op_58f8_21_nf; extern cpuop_func_ce op_58f8_21_ff; extern cpuop_func_ce op_58f9_21_nf; extern cpuop_func_ce op_58f9_21_ff; extern cpuop_func_ce op_58fa_21_nf; extern cpuop_func_ce op_58fa_21_ff; extern cpuop_func_ce op_58fb_21_nf; extern cpuop_func_ce op_58fb_21_ff; extern cpuop_func_ce op_58fc_21_nf; extern cpuop_func_ce op_58fc_21_ff; extern cpuop_func_ce op_59c0_21_nf; extern cpuop_func_ce op_59c0_21_ff; extern cpuop_func_ce op_59c8_21_nf; extern cpuop_func_ce op_59c8_21_ff; extern cpuop_func_ce op_59d0_21_nf; extern cpuop_func_ce op_59d0_21_ff; extern cpuop_func_ce op_59d8_21_nf; extern cpuop_func_ce op_59d8_21_ff; extern cpuop_func_ce op_59e0_21_nf; extern cpuop_func_ce op_59e0_21_ff; extern cpuop_func_ce op_59e8_21_nf; extern cpuop_func_ce op_59e8_21_ff; extern cpuop_func_ce op_59f0_21_nf; extern cpuop_func_ce op_59f0_21_ff; extern cpuop_func_ce op_59f8_21_nf; extern cpuop_func_ce op_59f8_21_ff; extern cpuop_func_ce op_59f9_21_nf; extern cpuop_func_ce op_59f9_21_ff; extern cpuop_func_ce op_59fa_21_nf; extern cpuop_func_ce op_59fa_21_ff; extern cpuop_func_ce op_59fb_21_nf; extern cpuop_func_ce op_59fb_21_ff; extern cpuop_func_ce op_59fc_21_nf; extern cpuop_func_ce op_59fc_21_ff; extern cpuop_func_ce op_5ac0_21_nf; extern cpuop_func_ce op_5ac0_21_ff; extern cpuop_func_ce op_5ac8_21_nf; extern cpuop_func_ce op_5ac8_21_ff; extern cpuop_func_ce op_5ad0_21_nf; extern cpuop_func_ce op_5ad0_21_ff; extern cpuop_func_ce op_5ad8_21_nf; extern cpuop_func_ce op_5ad8_21_ff; extern cpuop_func_ce op_5ae0_21_nf; extern cpuop_func_ce op_5ae0_21_ff; extern cpuop_func_ce op_5ae8_21_nf; extern cpuop_func_ce op_5ae8_21_ff; extern cpuop_func_ce op_5af0_21_nf; extern cpuop_func_ce op_5af0_21_ff; extern cpuop_func_ce op_5af8_21_nf; extern cpuop_func_ce op_5af8_21_ff; extern cpuop_func_ce op_5af9_21_nf; extern cpuop_func_ce op_5af9_21_ff; extern cpuop_func_ce op_5afa_21_nf; extern cpuop_func_ce op_5afa_21_ff; extern cpuop_func_ce op_5afb_21_nf; extern cpuop_func_ce op_5afb_21_ff; extern cpuop_func_ce op_5afc_21_nf; extern cpuop_func_ce op_5afc_21_ff; extern cpuop_func_ce op_5bc0_21_nf; extern cpuop_func_ce op_5bc0_21_ff; extern cpuop_func_ce op_5bc8_21_nf; extern cpuop_func_ce op_5bc8_21_ff; extern cpuop_func_ce op_5bd0_21_nf; extern cpuop_func_ce op_5bd0_21_ff; extern cpuop_func_ce op_5bd8_21_nf; extern cpuop_func_ce op_5bd8_21_ff; extern cpuop_func_ce op_5be0_21_nf; extern cpuop_func_ce op_5be0_21_ff; extern cpuop_func_ce op_5be8_21_nf; extern cpuop_func_ce op_5be8_21_ff; extern cpuop_func_ce op_5bf0_21_nf; extern cpuop_func_ce op_5bf0_21_ff; extern cpuop_func_ce op_5bf8_21_nf; extern cpuop_func_ce op_5bf8_21_ff; extern cpuop_func_ce op_5bf9_21_nf; extern cpuop_func_ce op_5bf9_21_ff; extern cpuop_func_ce op_5bfa_21_nf; extern cpuop_func_ce op_5bfa_21_ff; extern cpuop_func_ce op_5bfb_21_nf; extern cpuop_func_ce op_5bfb_21_ff; extern cpuop_func_ce op_5bfc_21_nf; extern cpuop_func_ce op_5bfc_21_ff; extern cpuop_func_ce op_5cc0_21_nf; extern cpuop_func_ce op_5cc0_21_ff; extern cpuop_func_ce op_5cc8_21_nf; extern cpuop_func_ce op_5cc8_21_ff; extern cpuop_func_ce op_5cd0_21_nf; extern cpuop_func_ce op_5cd0_21_ff; extern cpuop_func_ce op_5cd8_21_nf; extern cpuop_func_ce op_5cd8_21_ff; extern cpuop_func_ce op_5ce0_21_nf; extern cpuop_func_ce op_5ce0_21_ff; extern cpuop_func_ce op_5ce8_21_nf; extern cpuop_func_ce op_5ce8_21_ff; extern cpuop_func_ce op_5cf0_21_nf; extern cpuop_func_ce op_5cf0_21_ff; extern cpuop_func_ce op_5cf8_21_nf; extern cpuop_func_ce op_5cf8_21_ff; extern cpuop_func_ce op_5cf9_21_nf; extern cpuop_func_ce op_5cf9_21_ff; extern cpuop_func_ce op_5cfa_21_nf; extern cpuop_func_ce op_5cfa_21_ff; extern cpuop_func_ce op_5cfb_21_nf; extern cpuop_func_ce op_5cfb_21_ff; extern cpuop_func_ce op_5cfc_21_nf; extern cpuop_func_ce op_5cfc_21_ff; extern cpuop_func_ce op_5dc0_21_nf; extern cpuop_func_ce op_5dc0_21_ff; extern cpuop_func_ce op_5dc8_21_nf; extern cpuop_func_ce op_5dc8_21_ff; extern cpuop_func_ce op_5dd0_21_nf; extern cpuop_func_ce op_5dd0_21_ff; extern cpuop_func_ce op_5dd8_21_nf; extern cpuop_func_ce op_5dd8_21_ff; extern cpuop_func_ce op_5de0_21_nf; extern cpuop_func_ce op_5de0_21_ff; extern cpuop_func_ce op_5de8_21_nf; extern cpuop_func_ce op_5de8_21_ff; extern cpuop_func_ce op_5df0_21_nf; extern cpuop_func_ce op_5df0_21_ff; extern cpuop_func_ce op_5df8_21_nf; extern cpuop_func_ce op_5df8_21_ff; extern cpuop_func_ce op_5df9_21_nf; extern cpuop_func_ce op_5df9_21_ff; extern cpuop_func_ce op_5dfa_21_nf; extern cpuop_func_ce op_5dfa_21_ff; extern cpuop_func_ce op_5dfb_21_nf; extern cpuop_func_ce op_5dfb_21_ff; extern cpuop_func_ce op_5dfc_21_nf; extern cpuop_func_ce op_5dfc_21_ff; extern cpuop_func_ce op_5ec0_21_nf; extern cpuop_func_ce op_5ec0_21_ff; extern cpuop_func_ce op_5ec8_21_nf; extern cpuop_func_ce op_5ec8_21_ff; extern cpuop_func_ce op_5ed0_21_nf; extern cpuop_func_ce op_5ed0_21_ff; extern cpuop_func_ce op_5ed8_21_nf; extern cpuop_func_ce op_5ed8_21_ff; extern cpuop_func_ce op_5ee0_21_nf; extern cpuop_func_ce op_5ee0_21_ff; extern cpuop_func_ce op_5ee8_21_nf; extern cpuop_func_ce op_5ee8_21_ff; extern cpuop_func_ce op_5ef0_21_nf; extern cpuop_func_ce op_5ef0_21_ff; extern cpuop_func_ce op_5ef8_21_nf; extern cpuop_func_ce op_5ef8_21_ff; extern cpuop_func_ce op_5ef9_21_nf; extern cpuop_func_ce op_5ef9_21_ff; extern cpuop_func_ce op_5efa_21_nf; extern cpuop_func_ce op_5efa_21_ff; extern cpuop_func_ce op_5efb_21_nf; extern cpuop_func_ce op_5efb_21_ff; extern cpuop_func_ce op_5efc_21_nf; extern cpuop_func_ce op_5efc_21_ff; extern cpuop_func_ce op_5fc0_21_nf; extern cpuop_func_ce op_5fc0_21_ff; extern cpuop_func_ce op_5fc8_21_nf; extern cpuop_func_ce op_5fc8_21_ff; extern cpuop_func_ce op_5fd0_21_nf; extern cpuop_func_ce op_5fd0_21_ff; extern cpuop_func_ce op_5fd8_21_nf; extern cpuop_func_ce op_5fd8_21_ff; extern cpuop_func_ce op_5fe0_21_nf; extern cpuop_func_ce op_5fe0_21_ff; extern cpuop_func_ce op_5fe8_21_nf; extern cpuop_func_ce op_5fe8_21_ff; extern cpuop_func_ce op_5ff0_21_nf; extern cpuop_func_ce op_5ff0_21_ff; extern cpuop_func_ce op_5ff8_21_nf; extern cpuop_func_ce op_5ff8_21_ff; extern cpuop_func_ce op_5ff9_21_nf; extern cpuop_func_ce op_5ff9_21_ff; extern cpuop_func_ce op_5ffa_21_nf; extern cpuop_func_ce op_5ffa_21_ff; extern cpuop_func_ce op_5ffb_21_nf; extern cpuop_func_ce op_5ffb_21_ff; extern cpuop_func_ce op_5ffc_21_nf; extern cpuop_func_ce op_5ffc_21_ff; extern cpuop_func_ce op_6000_21_nf; extern cpuop_func_ce op_6000_21_ff; extern cpuop_func_ce op_6001_21_nf; extern cpuop_func_ce op_6001_21_ff; extern cpuop_func_ce op_60ff_21_nf; extern cpuop_func_ce op_60ff_21_ff; extern cpuop_func_ce op_6100_21_nf; extern cpuop_func_ce op_6100_21_ff; extern cpuop_func_ce op_6101_21_nf; extern cpuop_func_ce op_6101_21_ff; extern cpuop_func_ce op_61ff_21_nf; extern cpuop_func_ce op_61ff_21_ff; extern cpuop_func_ce op_6200_21_nf; extern cpuop_func_ce op_6200_21_ff; extern cpuop_func_ce op_6201_21_nf; extern cpuop_func_ce op_6201_21_ff; extern cpuop_func_ce op_62ff_21_nf; extern cpuop_func_ce op_62ff_21_ff; extern cpuop_func_ce op_6300_21_nf; extern cpuop_func_ce op_6300_21_ff; extern cpuop_func_ce op_6301_21_nf; extern cpuop_func_ce op_6301_21_ff; extern cpuop_func_ce op_63ff_21_nf; extern cpuop_func_ce op_63ff_21_ff; extern cpuop_func_ce op_6400_21_nf; extern cpuop_func_ce op_6400_21_ff; extern cpuop_func_ce op_6401_21_nf; extern cpuop_func_ce op_6401_21_ff; extern cpuop_func_ce op_64ff_21_nf; extern cpuop_func_ce op_64ff_21_ff; extern cpuop_func_ce op_6500_21_nf; extern cpuop_func_ce op_6500_21_ff; extern cpuop_func_ce op_6501_21_nf; extern cpuop_func_ce op_6501_21_ff; extern cpuop_func_ce op_65ff_21_nf; extern cpuop_func_ce op_65ff_21_ff; extern cpuop_func_ce op_6600_21_nf; extern cpuop_func_ce op_6600_21_ff; extern cpuop_func_ce op_6601_21_nf; extern cpuop_func_ce op_6601_21_ff; extern cpuop_func_ce op_66ff_21_nf; extern cpuop_func_ce op_66ff_21_ff; extern cpuop_func_ce op_6700_21_nf; extern cpuop_func_ce op_6700_21_ff; extern cpuop_func_ce op_6701_21_nf; extern cpuop_func_ce op_6701_21_ff; extern cpuop_func_ce op_67ff_21_nf; extern cpuop_func_ce op_67ff_21_ff; extern cpuop_func_ce op_6800_21_nf; extern cpuop_func_ce op_6800_21_ff; extern cpuop_func_ce op_6801_21_nf; extern cpuop_func_ce op_6801_21_ff; extern cpuop_func_ce op_68ff_21_nf; extern cpuop_func_ce op_68ff_21_ff; extern cpuop_func_ce op_6900_21_nf; extern cpuop_func_ce op_6900_21_ff; extern cpuop_func_ce op_6901_21_nf; extern cpuop_func_ce op_6901_21_ff; extern cpuop_func_ce op_69ff_21_nf; extern cpuop_func_ce op_69ff_21_ff; extern cpuop_func_ce op_6a00_21_nf; extern cpuop_func_ce op_6a00_21_ff; extern cpuop_func_ce op_6a01_21_nf; extern cpuop_func_ce op_6a01_21_ff; extern cpuop_func_ce op_6aff_21_nf; extern cpuop_func_ce op_6aff_21_ff; extern cpuop_func_ce op_6b00_21_nf; extern cpuop_func_ce op_6b00_21_ff; extern cpuop_func_ce op_6b01_21_nf; extern cpuop_func_ce op_6b01_21_ff; extern cpuop_func_ce op_6bff_21_nf; extern cpuop_func_ce op_6bff_21_ff; extern cpuop_func_ce op_6c00_21_nf; extern cpuop_func_ce op_6c00_21_ff; extern cpuop_func_ce op_6c01_21_nf; extern cpuop_func_ce op_6c01_21_ff; extern cpuop_func_ce op_6cff_21_nf; extern cpuop_func_ce op_6cff_21_ff; extern cpuop_func_ce op_6d00_21_nf; extern cpuop_func_ce op_6d00_21_ff; extern cpuop_func_ce op_6d01_21_nf; extern cpuop_func_ce op_6d01_21_ff; extern cpuop_func_ce op_6dff_21_nf; extern cpuop_func_ce op_6dff_21_ff; extern cpuop_func_ce op_6e00_21_nf; extern cpuop_func_ce op_6e00_21_ff; extern cpuop_func_ce op_6e01_21_nf; extern cpuop_func_ce op_6e01_21_ff; extern cpuop_func_ce op_6eff_21_nf; extern cpuop_func_ce op_6eff_21_ff; extern cpuop_func_ce op_6f00_21_nf; extern cpuop_func_ce op_6f00_21_ff; extern cpuop_func_ce op_6f01_21_nf; extern cpuop_func_ce op_6f01_21_ff; extern cpuop_func_ce op_6fff_21_nf; extern cpuop_func_ce op_6fff_21_ff; extern cpuop_func_ce op_7000_21_nf; extern cpuop_func_ce op_7000_21_ff; extern cpuop_func_ce op_8000_21_nf; extern cpuop_func_ce op_8000_21_ff; extern cpuop_func_ce op_8010_21_nf; extern cpuop_func_ce op_8010_21_ff; extern cpuop_func_ce op_8018_21_nf; extern cpuop_func_ce op_8018_21_ff; extern cpuop_func_ce op_8020_21_nf; extern cpuop_func_ce op_8020_21_ff; extern cpuop_func_ce op_8028_21_nf; extern cpuop_func_ce op_8028_21_ff; extern cpuop_func_ce op_8030_21_nf; extern cpuop_func_ce op_8030_21_ff; extern cpuop_func_ce op_8038_21_nf; extern cpuop_func_ce op_8038_21_ff; extern cpuop_func_ce op_8039_21_nf; extern cpuop_func_ce op_8039_21_ff; extern cpuop_func_ce op_803a_21_nf; extern cpuop_func_ce op_803a_21_ff; extern cpuop_func_ce op_803b_21_nf; extern cpuop_func_ce op_803b_21_ff; extern cpuop_func_ce op_803c_21_nf; extern cpuop_func_ce op_803c_21_ff; extern cpuop_func_ce op_8040_21_nf; extern cpuop_func_ce op_8040_21_ff; extern cpuop_func_ce op_8050_21_nf; extern cpuop_func_ce op_8050_21_ff; extern cpuop_func_ce op_8058_21_nf; extern cpuop_func_ce op_8058_21_ff; extern cpuop_func_ce op_8060_21_nf; extern cpuop_func_ce op_8060_21_ff; extern cpuop_func_ce op_8068_21_nf; extern cpuop_func_ce op_8068_21_ff; extern cpuop_func_ce op_8070_21_nf; extern cpuop_func_ce op_8070_21_ff; extern cpuop_func_ce op_8078_21_nf; extern cpuop_func_ce op_8078_21_ff; extern cpuop_func_ce op_8079_21_nf; extern cpuop_func_ce op_8079_21_ff; extern cpuop_func_ce op_807a_21_nf; extern cpuop_func_ce op_807a_21_ff; extern cpuop_func_ce op_807b_21_nf; extern cpuop_func_ce op_807b_21_ff; extern cpuop_func_ce op_807c_21_nf; extern cpuop_func_ce op_807c_21_ff; extern cpuop_func_ce op_8080_21_nf; extern cpuop_func_ce op_8080_21_ff; extern cpuop_func_ce op_8090_21_nf; extern cpuop_func_ce op_8090_21_ff; extern cpuop_func_ce op_8098_21_nf; extern cpuop_func_ce op_8098_21_ff; extern cpuop_func_ce op_80a0_21_nf; extern cpuop_func_ce op_80a0_21_ff; extern cpuop_func_ce op_80a8_21_nf; extern cpuop_func_ce op_80a8_21_ff; extern cpuop_func_ce op_80b0_21_nf; extern cpuop_func_ce op_80b0_21_ff; extern cpuop_func_ce op_80b8_21_nf; extern cpuop_func_ce op_80b8_21_ff; extern cpuop_func_ce op_80b9_21_nf; extern cpuop_func_ce op_80b9_21_ff; extern cpuop_func_ce op_80ba_21_nf; extern cpuop_func_ce op_80ba_21_ff; extern cpuop_func_ce op_80bb_21_nf; extern cpuop_func_ce op_80bb_21_ff; extern cpuop_func_ce op_80bc_21_nf; extern cpuop_func_ce op_80bc_21_ff; extern cpuop_func_ce op_80c0_21_nf; extern cpuop_func_ce op_80c0_21_ff; extern cpuop_func_ce op_80d0_21_nf; extern cpuop_func_ce op_80d0_21_ff; extern cpuop_func_ce op_80d8_21_nf; extern cpuop_func_ce op_80d8_21_ff; extern cpuop_func_ce op_80e0_21_nf; extern cpuop_func_ce op_80e0_21_ff; extern cpuop_func_ce op_80e8_21_nf; extern cpuop_func_ce op_80e8_21_ff; extern cpuop_func_ce op_80f0_21_nf; extern cpuop_func_ce op_80f0_21_ff; extern cpuop_func_ce op_80f8_21_nf; extern cpuop_func_ce op_80f8_21_ff; extern cpuop_func_ce op_80f9_21_nf; extern cpuop_func_ce op_80f9_21_ff; extern cpuop_func_ce op_80fa_21_nf; extern cpuop_func_ce op_80fa_21_ff; extern cpuop_func_ce op_80fb_21_nf; extern cpuop_func_ce op_80fb_21_ff; extern cpuop_func_ce op_80fc_21_nf; extern cpuop_func_ce op_80fc_21_ff; extern cpuop_func_ce op_8100_21_nf; extern cpuop_func_ce op_8100_21_ff; extern cpuop_func_ce op_8108_21_nf; extern cpuop_func_ce op_8108_21_ff; extern cpuop_func_ce op_8110_21_nf; extern cpuop_func_ce op_8110_21_ff; extern cpuop_func_ce op_8118_21_nf; extern cpuop_func_ce op_8118_21_ff; extern cpuop_func_ce op_8120_21_nf; extern cpuop_func_ce op_8120_21_ff; extern cpuop_func_ce op_8128_21_nf; extern cpuop_func_ce op_8128_21_ff; extern cpuop_func_ce op_8130_21_nf; extern cpuop_func_ce op_8130_21_ff; extern cpuop_func_ce op_8138_21_nf; extern cpuop_func_ce op_8138_21_ff; extern cpuop_func_ce op_8139_21_nf; extern cpuop_func_ce op_8139_21_ff; extern cpuop_func_ce op_8140_21_nf; extern cpuop_func_ce op_8140_21_ff; extern cpuop_func_ce op_8148_21_nf; extern cpuop_func_ce op_8148_21_ff; extern cpuop_func_ce op_8150_21_nf; extern cpuop_func_ce op_8150_21_ff; extern cpuop_func_ce op_8158_21_nf; extern cpuop_func_ce op_8158_21_ff; extern cpuop_func_ce op_8160_21_nf; extern cpuop_func_ce op_8160_21_ff; extern cpuop_func_ce op_8168_21_nf; extern cpuop_func_ce op_8168_21_ff; extern cpuop_func_ce op_8170_21_nf; extern cpuop_func_ce op_8170_21_ff; extern cpuop_func_ce op_8178_21_nf; extern cpuop_func_ce op_8178_21_ff; extern cpuop_func_ce op_8179_21_nf; extern cpuop_func_ce op_8179_21_ff; extern cpuop_func_ce op_8180_21_nf; extern cpuop_func_ce op_8180_21_ff; extern cpuop_func_ce op_8188_21_nf; extern cpuop_func_ce op_8188_21_ff; extern cpuop_func_ce op_8190_21_nf; extern cpuop_func_ce op_8190_21_ff; extern cpuop_func_ce op_8198_21_nf; extern cpuop_func_ce op_8198_21_ff; extern cpuop_func_ce op_81a0_21_nf; extern cpuop_func_ce op_81a0_21_ff; extern cpuop_func_ce op_81a8_21_nf; extern cpuop_func_ce op_81a8_21_ff; extern cpuop_func_ce op_81b0_21_nf; extern cpuop_func_ce op_81b0_21_ff; extern cpuop_func_ce op_81b8_21_nf; extern cpuop_func_ce op_81b8_21_ff; extern cpuop_func_ce op_81b9_21_nf; extern cpuop_func_ce op_81b9_21_ff; extern cpuop_func_ce op_81c0_21_nf; extern cpuop_func_ce op_81c0_21_ff; extern cpuop_func_ce op_81d0_21_nf; extern cpuop_func_ce op_81d0_21_ff; extern cpuop_func_ce op_81d8_21_nf; extern cpuop_func_ce op_81d8_21_ff; extern cpuop_func_ce op_81e0_21_nf; extern cpuop_func_ce op_81e0_21_ff; extern cpuop_func_ce op_81e8_21_nf; extern cpuop_func_ce op_81e8_21_ff; extern cpuop_func_ce op_81f0_21_nf; extern cpuop_func_ce op_81f0_21_ff; extern cpuop_func_ce op_81f8_21_nf; extern cpuop_func_ce op_81f8_21_ff; extern cpuop_func_ce op_81f9_21_nf; extern cpuop_func_ce op_81f9_21_ff; extern cpuop_func_ce op_81fa_21_nf; extern cpuop_func_ce op_81fa_21_ff; extern cpuop_func_ce op_81fb_21_nf; extern cpuop_func_ce op_81fb_21_ff; extern cpuop_func_ce op_81fc_21_nf; extern cpuop_func_ce op_81fc_21_ff; extern cpuop_func_ce op_9000_21_nf; extern cpuop_func_ce op_9000_21_ff; extern cpuop_func_ce op_9010_21_nf; extern cpuop_func_ce op_9010_21_ff; extern cpuop_func_ce op_9018_21_nf; extern cpuop_func_ce op_9018_21_ff; extern cpuop_func_ce op_9020_21_nf; extern cpuop_func_ce op_9020_21_ff; extern cpuop_func_ce op_9028_21_nf; extern cpuop_func_ce op_9028_21_ff; extern cpuop_func_ce op_9030_21_nf; extern cpuop_func_ce op_9030_21_ff; extern cpuop_func_ce op_9038_21_nf; extern cpuop_func_ce op_9038_21_ff; extern cpuop_func_ce op_9039_21_nf; extern cpuop_func_ce op_9039_21_ff; extern cpuop_func_ce op_903a_21_nf; extern cpuop_func_ce op_903a_21_ff; extern cpuop_func_ce op_903b_21_nf; extern cpuop_func_ce op_903b_21_ff; extern cpuop_func_ce op_903c_21_nf; extern cpuop_func_ce op_903c_21_ff; extern cpuop_func_ce op_9040_21_nf; extern cpuop_func_ce op_9040_21_ff; extern cpuop_func_ce op_9048_21_nf; extern cpuop_func_ce op_9048_21_ff; extern cpuop_func_ce op_9050_21_nf; extern cpuop_func_ce op_9050_21_ff; extern cpuop_func_ce op_9058_21_nf; extern cpuop_func_ce op_9058_21_ff; extern cpuop_func_ce op_9060_21_nf; extern cpuop_func_ce op_9060_21_ff; extern cpuop_func_ce op_9068_21_nf; extern cpuop_func_ce op_9068_21_ff; extern cpuop_func_ce op_9070_21_nf; extern cpuop_func_ce op_9070_21_ff; extern cpuop_func_ce op_9078_21_nf; extern cpuop_func_ce op_9078_21_ff; extern cpuop_func_ce op_9079_21_nf; extern cpuop_func_ce op_9079_21_ff; extern cpuop_func_ce op_907a_21_nf; extern cpuop_func_ce op_907a_21_ff; extern cpuop_func_ce op_907b_21_nf; extern cpuop_func_ce op_907b_21_ff; extern cpuop_func_ce op_907c_21_nf; extern cpuop_func_ce op_907c_21_ff; extern cpuop_func_ce op_9080_21_nf; extern cpuop_func_ce op_9080_21_ff; extern cpuop_func_ce op_9088_21_nf; extern cpuop_func_ce op_9088_21_ff; extern cpuop_func_ce op_9090_21_nf; extern cpuop_func_ce op_9090_21_ff; extern cpuop_func_ce op_9098_21_nf; extern cpuop_func_ce op_9098_21_ff; extern cpuop_func_ce op_90a0_21_nf; extern cpuop_func_ce op_90a0_21_ff; extern cpuop_func_ce op_90a8_21_nf; extern cpuop_func_ce op_90a8_21_ff; extern cpuop_func_ce op_90b0_21_nf; extern cpuop_func_ce op_90b0_21_ff; extern cpuop_func_ce op_90b8_21_nf; extern cpuop_func_ce op_90b8_21_ff; extern cpuop_func_ce op_90b9_21_nf; extern cpuop_func_ce op_90b9_21_ff; extern cpuop_func_ce op_90ba_21_nf; extern cpuop_func_ce op_90ba_21_ff; extern cpuop_func_ce op_90bb_21_nf; extern cpuop_func_ce op_90bb_21_ff; extern cpuop_func_ce op_90bc_21_nf; extern cpuop_func_ce op_90bc_21_ff; extern cpuop_func_ce op_90c0_21_nf; extern cpuop_func_ce op_90c0_21_ff; extern cpuop_func_ce op_90c8_21_nf; extern cpuop_func_ce op_90c8_21_ff; extern cpuop_func_ce op_90d0_21_nf; extern cpuop_func_ce op_90d0_21_ff; extern cpuop_func_ce op_90d8_21_nf; extern cpuop_func_ce op_90d8_21_ff; extern cpuop_func_ce op_90e0_21_nf; extern cpuop_func_ce op_90e0_21_ff; extern cpuop_func_ce op_90e8_21_nf; extern cpuop_func_ce op_90e8_21_ff; extern cpuop_func_ce op_90f0_21_nf; extern cpuop_func_ce op_90f0_21_ff; extern cpuop_func_ce op_90f8_21_nf; extern cpuop_func_ce op_90f8_21_ff; extern cpuop_func_ce op_90f9_21_nf; extern cpuop_func_ce op_90f9_21_ff; extern cpuop_func_ce op_90fa_21_nf; extern cpuop_func_ce op_90fa_21_ff; extern cpuop_func_ce op_90fb_21_nf; extern cpuop_func_ce op_90fb_21_ff; extern cpuop_func_ce op_90fc_21_nf; extern cpuop_func_ce op_90fc_21_ff; extern cpuop_func_ce op_9100_21_nf; extern cpuop_func_ce op_9100_21_ff; extern cpuop_func_ce op_9108_21_nf; extern cpuop_func_ce op_9108_21_ff; extern cpuop_func_ce op_9110_21_nf; extern cpuop_func_ce op_9110_21_ff; extern cpuop_func_ce op_9118_21_nf; extern cpuop_func_ce op_9118_21_ff; extern cpuop_func_ce op_9120_21_nf; extern cpuop_func_ce op_9120_21_ff; extern cpuop_func_ce op_9128_21_nf; extern cpuop_func_ce op_9128_21_ff; extern cpuop_func_ce op_9130_21_nf; extern cpuop_func_ce op_9130_21_ff; extern cpuop_func_ce op_9138_21_nf; extern cpuop_func_ce op_9138_21_ff; extern cpuop_func_ce op_9139_21_nf; extern cpuop_func_ce op_9139_21_ff; extern cpuop_func_ce op_9140_21_nf; extern cpuop_func_ce op_9140_21_ff; extern cpuop_func_ce op_9148_21_nf; extern cpuop_func_ce op_9148_21_ff; extern cpuop_func_ce op_9150_21_nf; extern cpuop_func_ce op_9150_21_ff; extern cpuop_func_ce op_9158_21_nf; extern cpuop_func_ce op_9158_21_ff; extern cpuop_func_ce op_9160_21_nf; extern cpuop_func_ce op_9160_21_ff; extern cpuop_func_ce op_9168_21_nf; extern cpuop_func_ce op_9168_21_ff; extern cpuop_func_ce op_9170_21_nf; extern cpuop_func_ce op_9170_21_ff; extern cpuop_func_ce op_9178_21_nf; extern cpuop_func_ce op_9178_21_ff; extern cpuop_func_ce op_9179_21_nf; extern cpuop_func_ce op_9179_21_ff; extern cpuop_func_ce op_9180_21_nf; extern cpuop_func_ce op_9180_21_ff; extern cpuop_func_ce op_9188_21_nf; extern cpuop_func_ce op_9188_21_ff; extern cpuop_func_ce op_9190_21_nf; extern cpuop_func_ce op_9190_21_ff; extern cpuop_func_ce op_9198_21_nf; extern cpuop_func_ce op_9198_21_ff; extern cpuop_func_ce op_91a0_21_nf; extern cpuop_func_ce op_91a0_21_ff; extern cpuop_func_ce op_91a8_21_nf; extern cpuop_func_ce op_91a8_21_ff; extern cpuop_func_ce op_91b0_21_nf; extern cpuop_func_ce op_91b0_21_ff; extern cpuop_func_ce op_91b8_21_nf; extern cpuop_func_ce op_91b8_21_ff; extern cpuop_func_ce op_91b9_21_nf; extern cpuop_func_ce op_91b9_21_ff; extern cpuop_func_ce op_91c0_21_nf; extern cpuop_func_ce op_91c0_21_ff; extern cpuop_func_ce op_91c8_21_nf; extern cpuop_func_ce op_91c8_21_ff; extern cpuop_func_ce op_91d0_21_nf; extern cpuop_func_ce op_91d0_21_ff; extern cpuop_func_ce op_91d8_21_nf; extern cpuop_func_ce op_91d8_21_ff; extern cpuop_func_ce op_91e0_21_nf; extern cpuop_func_ce op_91e0_21_ff; extern cpuop_func_ce op_91e8_21_nf; extern cpuop_func_ce op_91e8_21_ff; extern cpuop_func_ce op_91f0_21_nf; extern cpuop_func_ce op_91f0_21_ff; extern cpuop_func_ce op_91f8_21_nf; extern cpuop_func_ce op_91f8_21_ff; extern cpuop_func_ce op_91f9_21_nf; extern cpuop_func_ce op_91f9_21_ff; extern cpuop_func_ce op_91fa_21_nf; extern cpuop_func_ce op_91fa_21_ff; extern cpuop_func_ce op_91fb_21_nf; extern cpuop_func_ce op_91fb_21_ff; extern cpuop_func_ce op_91fc_21_nf; extern cpuop_func_ce op_91fc_21_ff; extern cpuop_func_ce op_b000_21_nf; extern cpuop_func_ce op_b000_21_ff; extern cpuop_func_ce op_b010_21_nf; extern cpuop_func_ce op_b010_21_ff; extern cpuop_func_ce op_b018_21_nf; extern cpuop_func_ce op_b018_21_ff; extern cpuop_func_ce op_b020_21_nf; extern cpuop_func_ce op_b020_21_ff; extern cpuop_func_ce op_b028_21_nf; extern cpuop_func_ce op_b028_21_ff; extern cpuop_func_ce op_b030_21_nf; extern cpuop_func_ce op_b030_21_ff; extern cpuop_func_ce op_b038_21_nf; extern cpuop_func_ce op_b038_21_ff; extern cpuop_func_ce op_b039_21_nf; extern cpuop_func_ce op_b039_21_ff; extern cpuop_func_ce op_b03a_21_nf; extern cpuop_func_ce op_b03a_21_ff; extern cpuop_func_ce op_b03b_21_nf; extern cpuop_func_ce op_b03b_21_ff; extern cpuop_func_ce op_b03c_21_nf; extern cpuop_func_ce op_b03c_21_ff; extern cpuop_func_ce op_b040_21_nf; extern cpuop_func_ce op_b040_21_ff; extern cpuop_func_ce op_b048_21_nf; extern cpuop_func_ce op_b048_21_ff; extern cpuop_func_ce op_b050_21_nf; extern cpuop_func_ce op_b050_21_ff; extern cpuop_func_ce op_b058_21_nf; extern cpuop_func_ce op_b058_21_ff; extern cpuop_func_ce op_b060_21_nf; extern cpuop_func_ce op_b060_21_ff; extern cpuop_func_ce op_b068_21_nf; extern cpuop_func_ce op_b068_21_ff; extern cpuop_func_ce op_b070_21_nf; extern cpuop_func_ce op_b070_21_ff; extern cpuop_func_ce op_b078_21_nf; extern cpuop_func_ce op_b078_21_ff; extern cpuop_func_ce op_b079_21_nf; extern cpuop_func_ce op_b079_21_ff; extern cpuop_func_ce op_b07a_21_nf; extern cpuop_func_ce op_b07a_21_ff; extern cpuop_func_ce op_b07b_21_nf; extern cpuop_func_ce op_b07b_21_ff; extern cpuop_func_ce op_b07c_21_nf; extern cpuop_func_ce op_b07c_21_ff; extern cpuop_func_ce op_b080_21_nf; extern cpuop_func_ce op_b080_21_ff; extern cpuop_func_ce op_b088_21_nf; extern cpuop_func_ce op_b088_21_ff; extern cpuop_func_ce op_b090_21_nf; extern cpuop_func_ce op_b090_21_ff; extern cpuop_func_ce op_b098_21_nf; extern cpuop_func_ce op_b098_21_ff; extern cpuop_func_ce op_b0a0_21_nf; extern cpuop_func_ce op_b0a0_21_ff; extern cpuop_func_ce op_b0a8_21_nf; extern cpuop_func_ce op_b0a8_21_ff; extern cpuop_func_ce op_b0b0_21_nf; extern cpuop_func_ce op_b0b0_21_ff; extern cpuop_func_ce op_b0b8_21_nf; extern cpuop_func_ce op_b0b8_21_ff; extern cpuop_func_ce op_b0b9_21_nf; extern cpuop_func_ce op_b0b9_21_ff; extern cpuop_func_ce op_b0ba_21_nf; extern cpuop_func_ce op_b0ba_21_ff; extern cpuop_func_ce op_b0bb_21_nf; extern cpuop_func_ce op_b0bb_21_ff; extern cpuop_func_ce op_b0bc_21_nf; extern cpuop_func_ce op_b0bc_21_ff; extern cpuop_func_ce op_b0c0_21_nf; extern cpuop_func_ce op_b0c0_21_ff; extern cpuop_func_ce op_b0c8_21_nf; extern cpuop_func_ce op_b0c8_21_ff; extern cpuop_func_ce op_b0d0_21_nf; extern cpuop_func_ce op_b0d0_21_ff; extern cpuop_func_ce op_b0d8_21_nf; extern cpuop_func_ce op_b0d8_21_ff; extern cpuop_func_ce op_b0e0_21_nf; extern cpuop_func_ce op_b0e0_21_ff; extern cpuop_func_ce op_b0e8_21_nf; extern cpuop_func_ce op_b0e8_21_ff; extern cpuop_func_ce op_b0f0_21_nf; extern cpuop_func_ce op_b0f0_21_ff; extern cpuop_func_ce op_b0f8_21_nf; extern cpuop_func_ce op_b0f8_21_ff; extern cpuop_func_ce op_b0f9_21_nf; extern cpuop_func_ce op_b0f9_21_ff; extern cpuop_func_ce op_b0fa_21_nf; extern cpuop_func_ce op_b0fa_21_ff; extern cpuop_func_ce op_b0fb_21_nf; extern cpuop_func_ce op_b0fb_21_ff; extern cpuop_func_ce op_b0fc_21_nf; extern cpuop_func_ce op_b0fc_21_ff; extern cpuop_func_ce op_b100_21_nf; extern cpuop_func_ce op_b100_21_ff; extern cpuop_func_ce op_b108_21_nf; extern cpuop_func_ce op_b108_21_ff; extern cpuop_func_ce op_b110_21_nf; extern cpuop_func_ce op_b110_21_ff; extern cpuop_func_ce op_b118_21_nf; extern cpuop_func_ce op_b118_21_ff; extern cpuop_func_ce op_b120_21_nf; extern cpuop_func_ce op_b120_21_ff; extern cpuop_func_ce op_b128_21_nf; extern cpuop_func_ce op_b128_21_ff; extern cpuop_func_ce op_b130_21_nf; extern cpuop_func_ce op_b130_21_ff; extern cpuop_func_ce op_b138_21_nf; extern cpuop_func_ce op_b138_21_ff; extern cpuop_func_ce op_b139_21_nf; extern cpuop_func_ce op_b139_21_ff; extern cpuop_func_ce op_b140_21_nf; extern cpuop_func_ce op_b140_21_ff; extern cpuop_func_ce op_b148_21_nf; extern cpuop_func_ce op_b148_21_ff; extern cpuop_func_ce op_b150_21_nf; extern cpuop_func_ce op_b150_21_ff; extern cpuop_func_ce op_b158_21_nf; extern cpuop_func_ce op_b158_21_ff; extern cpuop_func_ce op_b160_21_nf; extern cpuop_func_ce op_b160_21_ff; extern cpuop_func_ce op_b168_21_nf; extern cpuop_func_ce op_b168_21_ff; extern cpuop_func_ce op_b170_21_nf; extern cpuop_func_ce op_b170_21_ff; extern cpuop_func_ce op_b178_21_nf; extern cpuop_func_ce op_b178_21_ff; extern cpuop_func_ce op_b179_21_nf; extern cpuop_func_ce op_b179_21_ff; extern cpuop_func_ce op_b180_21_nf; extern cpuop_func_ce op_b180_21_ff; extern cpuop_func_ce op_b188_21_nf; extern cpuop_func_ce op_b188_21_ff; extern cpuop_func_ce op_b190_21_nf; extern cpuop_func_ce op_b190_21_ff; extern cpuop_func_ce op_b198_21_nf; extern cpuop_func_ce op_b198_21_ff; extern cpuop_func_ce op_b1a0_21_nf; extern cpuop_func_ce op_b1a0_21_ff; extern cpuop_func_ce op_b1a8_21_nf; extern cpuop_func_ce op_b1a8_21_ff; extern cpuop_func_ce op_b1b0_21_nf; extern cpuop_func_ce op_b1b0_21_ff; extern cpuop_func_ce op_b1b8_21_nf; extern cpuop_func_ce op_b1b8_21_ff; extern cpuop_func_ce op_b1b9_21_nf; extern cpuop_func_ce op_b1b9_21_ff; extern cpuop_func_ce op_b1c0_21_nf; extern cpuop_func_ce op_b1c0_21_ff; extern cpuop_func_ce op_b1c8_21_nf; extern cpuop_func_ce op_b1c8_21_ff; extern cpuop_func_ce op_b1d0_21_nf; extern cpuop_func_ce op_b1d0_21_ff; extern cpuop_func_ce op_b1d8_21_nf; extern cpuop_func_ce op_b1d8_21_ff; extern cpuop_func_ce op_b1e0_21_nf; extern cpuop_func_ce op_b1e0_21_ff; extern cpuop_func_ce op_b1e8_21_nf; extern cpuop_func_ce op_b1e8_21_ff; extern cpuop_func_ce op_b1f0_21_nf; extern cpuop_func_ce op_b1f0_21_ff; extern cpuop_func_ce op_b1f8_21_nf; extern cpuop_func_ce op_b1f8_21_ff; extern cpuop_func_ce op_b1f9_21_nf; extern cpuop_func_ce op_b1f9_21_ff; extern cpuop_func_ce op_b1fa_21_nf; extern cpuop_func_ce op_b1fa_21_ff; extern cpuop_func_ce op_b1fb_21_nf; extern cpuop_func_ce op_b1fb_21_ff; extern cpuop_func_ce op_b1fc_21_nf; extern cpuop_func_ce op_b1fc_21_ff; extern cpuop_func_ce op_c000_21_nf; extern cpuop_func_ce op_c000_21_ff; extern cpuop_func_ce op_c010_21_nf; extern cpuop_func_ce op_c010_21_ff; extern cpuop_func_ce op_c018_21_nf; extern cpuop_func_ce op_c018_21_ff; extern cpuop_func_ce op_c020_21_nf; extern cpuop_func_ce op_c020_21_ff; extern cpuop_func_ce op_c028_21_nf; extern cpuop_func_ce op_c028_21_ff; extern cpuop_func_ce op_c030_21_nf; extern cpuop_func_ce op_c030_21_ff; extern cpuop_func_ce op_c038_21_nf; extern cpuop_func_ce op_c038_21_ff; extern cpuop_func_ce op_c039_21_nf; extern cpuop_func_ce op_c039_21_ff; extern cpuop_func_ce op_c03a_21_nf; extern cpuop_func_ce op_c03a_21_ff; extern cpuop_func_ce op_c03b_21_nf; extern cpuop_func_ce op_c03b_21_ff; extern cpuop_func_ce op_c03c_21_nf; extern cpuop_func_ce op_c03c_21_ff; extern cpuop_func_ce op_c040_21_nf; extern cpuop_func_ce op_c040_21_ff; extern cpuop_func_ce op_c050_21_nf; extern cpuop_func_ce op_c050_21_ff; extern cpuop_func_ce op_c058_21_nf; extern cpuop_func_ce op_c058_21_ff; extern cpuop_func_ce op_c060_21_nf; extern cpuop_func_ce op_c060_21_ff; extern cpuop_func_ce op_c068_21_nf; extern cpuop_func_ce op_c068_21_ff; extern cpuop_func_ce op_c070_21_nf; extern cpuop_func_ce op_c070_21_ff; extern cpuop_func_ce op_c078_21_nf; extern cpuop_func_ce op_c078_21_ff; extern cpuop_func_ce op_c079_21_nf; extern cpuop_func_ce op_c079_21_ff; extern cpuop_func_ce op_c07a_21_nf; extern cpuop_func_ce op_c07a_21_ff; extern cpuop_func_ce op_c07b_21_nf; extern cpuop_func_ce op_c07b_21_ff; extern cpuop_func_ce op_c07c_21_nf; extern cpuop_func_ce op_c07c_21_ff; extern cpuop_func_ce op_c080_21_nf; extern cpuop_func_ce op_c080_21_ff; extern cpuop_func_ce op_c090_21_nf; extern cpuop_func_ce op_c090_21_ff; extern cpuop_func_ce op_c098_21_nf; extern cpuop_func_ce op_c098_21_ff; extern cpuop_func_ce op_c0a0_21_nf; extern cpuop_func_ce op_c0a0_21_ff; extern cpuop_func_ce op_c0a8_21_nf; extern cpuop_func_ce op_c0a8_21_ff; extern cpuop_func_ce op_c0b0_21_nf; extern cpuop_func_ce op_c0b0_21_ff; extern cpuop_func_ce op_c0b8_21_nf; extern cpuop_func_ce op_c0b8_21_ff; extern cpuop_func_ce op_c0b9_21_nf; extern cpuop_func_ce op_c0b9_21_ff; extern cpuop_func_ce op_c0ba_21_nf; extern cpuop_func_ce op_c0ba_21_ff; extern cpuop_func_ce op_c0bb_21_nf; extern cpuop_func_ce op_c0bb_21_ff; extern cpuop_func_ce op_c0bc_21_nf; extern cpuop_func_ce op_c0bc_21_ff; extern cpuop_func_ce op_c0c0_21_nf; extern cpuop_func_ce op_c0c0_21_ff; extern cpuop_func_ce op_c0d0_21_nf; extern cpuop_func_ce op_c0d0_21_ff; extern cpuop_func_ce op_c0d8_21_nf; extern cpuop_func_ce op_c0d8_21_ff; extern cpuop_func_ce op_c0e0_21_nf; extern cpuop_func_ce op_c0e0_21_ff; extern cpuop_func_ce op_c0e8_21_nf; extern cpuop_func_ce op_c0e8_21_ff; extern cpuop_func_ce op_c0f0_21_nf; extern cpuop_func_ce op_c0f0_21_ff; extern cpuop_func_ce op_c0f8_21_nf; extern cpuop_func_ce op_c0f8_21_ff; extern cpuop_func_ce op_c0f9_21_nf; extern cpuop_func_ce op_c0f9_21_ff; extern cpuop_func_ce op_c0fa_21_nf; extern cpuop_func_ce op_c0fa_21_ff; extern cpuop_func_ce op_c0fb_21_nf; extern cpuop_func_ce op_c0fb_21_ff; extern cpuop_func_ce op_c0fc_21_nf; extern cpuop_func_ce op_c0fc_21_ff; extern cpuop_func_ce op_c100_21_nf; extern cpuop_func_ce op_c100_21_ff; extern cpuop_func_ce op_c108_21_nf; extern cpuop_func_ce op_c108_21_ff; extern cpuop_func_ce op_c110_21_nf; extern cpuop_func_ce op_c110_21_ff; extern cpuop_func_ce op_c118_21_nf; extern cpuop_func_ce op_c118_21_ff; extern cpuop_func_ce op_c120_21_nf; extern cpuop_func_ce op_c120_21_ff; extern cpuop_func_ce op_c128_21_nf; extern cpuop_func_ce op_c128_21_ff; extern cpuop_func_ce op_c130_21_nf; extern cpuop_func_ce op_c130_21_ff; extern cpuop_func_ce op_c138_21_nf; extern cpuop_func_ce op_c138_21_ff; extern cpuop_func_ce op_c139_21_nf; extern cpuop_func_ce op_c139_21_ff; extern cpuop_func_ce op_c140_21_nf; extern cpuop_func_ce op_c140_21_ff; extern cpuop_func_ce op_c148_21_nf; extern cpuop_func_ce op_c148_21_ff; extern cpuop_func_ce op_c150_21_nf; extern cpuop_func_ce op_c150_21_ff; extern cpuop_func_ce op_c158_21_nf; extern cpuop_func_ce op_c158_21_ff; extern cpuop_func_ce op_c160_21_nf; extern cpuop_func_ce op_c160_21_ff; extern cpuop_func_ce op_c168_21_nf; extern cpuop_func_ce op_c168_21_ff; extern cpuop_func_ce op_c170_21_nf; extern cpuop_func_ce op_c170_21_ff; extern cpuop_func_ce op_c178_21_nf; extern cpuop_func_ce op_c178_21_ff; extern cpuop_func_ce op_c179_21_nf; extern cpuop_func_ce op_c179_21_ff; extern cpuop_func_ce op_c188_21_nf; extern cpuop_func_ce op_c188_21_ff; extern cpuop_func_ce op_c190_21_nf; extern cpuop_func_ce op_c190_21_ff; extern cpuop_func_ce op_c198_21_nf; extern cpuop_func_ce op_c198_21_ff; extern cpuop_func_ce op_c1a0_21_nf; extern cpuop_func_ce op_c1a0_21_ff; extern cpuop_func_ce op_c1a8_21_nf; extern cpuop_func_ce op_c1a8_21_ff; extern cpuop_func_ce op_c1b0_21_nf; extern cpuop_func_ce op_c1b0_21_ff; extern cpuop_func_ce op_c1b8_21_nf; extern cpuop_func_ce op_c1b8_21_ff; extern cpuop_func_ce op_c1b9_21_nf; extern cpuop_func_ce op_c1b9_21_ff; extern cpuop_func_ce op_c1c0_21_nf; extern cpuop_func_ce op_c1c0_21_ff; extern cpuop_func_ce op_c1d0_21_nf; extern cpuop_func_ce op_c1d0_21_ff; extern cpuop_func_ce op_c1d8_21_nf; extern cpuop_func_ce op_c1d8_21_ff; extern cpuop_func_ce op_c1e0_21_nf; extern cpuop_func_ce op_c1e0_21_ff; extern cpuop_func_ce op_c1e8_21_nf; extern cpuop_func_ce op_c1e8_21_ff; extern cpuop_func_ce op_c1f0_21_nf; extern cpuop_func_ce op_c1f0_21_ff; extern cpuop_func_ce op_c1f8_21_nf; extern cpuop_func_ce op_c1f8_21_ff; extern cpuop_func_ce op_c1f9_21_nf; extern cpuop_func_ce op_c1f9_21_ff; extern cpuop_func_ce op_c1fa_21_nf; extern cpuop_func_ce op_c1fa_21_ff; extern cpuop_func_ce op_c1fb_21_nf; extern cpuop_func_ce op_c1fb_21_ff; extern cpuop_func_ce op_c1fc_21_nf; extern cpuop_func_ce op_c1fc_21_ff; extern cpuop_func_ce op_d000_21_nf; extern cpuop_func_ce op_d000_21_ff; extern cpuop_func_ce op_d010_21_nf; extern cpuop_func_ce op_d010_21_ff; extern cpuop_func_ce op_d018_21_nf; extern cpuop_func_ce op_d018_21_ff; extern cpuop_func_ce op_d020_21_nf; extern cpuop_func_ce op_d020_21_ff; extern cpuop_func_ce op_d028_21_nf; extern cpuop_func_ce op_d028_21_ff; extern cpuop_func_ce op_d030_21_nf; extern cpuop_func_ce op_d030_21_ff; extern cpuop_func_ce op_d038_21_nf; extern cpuop_func_ce op_d038_21_ff; extern cpuop_func_ce op_d039_21_nf; extern cpuop_func_ce op_d039_21_ff; extern cpuop_func_ce op_d03a_21_nf; extern cpuop_func_ce op_d03a_21_ff; extern cpuop_func_ce op_d03b_21_nf; extern cpuop_func_ce op_d03b_21_ff; extern cpuop_func_ce op_d03c_21_nf; extern cpuop_func_ce op_d03c_21_ff; extern cpuop_func_ce op_d040_21_nf; extern cpuop_func_ce op_d040_21_ff; extern cpuop_func_ce op_d048_21_nf; extern cpuop_func_ce op_d048_21_ff; extern cpuop_func_ce op_d050_21_nf; extern cpuop_func_ce op_d050_21_ff; extern cpuop_func_ce op_d058_21_nf; extern cpuop_func_ce op_d058_21_ff; extern cpuop_func_ce op_d060_21_nf; extern cpuop_func_ce op_d060_21_ff; extern cpuop_func_ce op_d068_21_nf; extern cpuop_func_ce op_d068_21_ff; extern cpuop_func_ce op_d070_21_nf; extern cpuop_func_ce op_d070_21_ff; extern cpuop_func_ce op_d078_21_nf; extern cpuop_func_ce op_d078_21_ff; extern cpuop_func_ce op_d079_21_nf; extern cpuop_func_ce op_d079_21_ff; extern cpuop_func_ce op_d07a_21_nf; extern cpuop_func_ce op_d07a_21_ff; extern cpuop_func_ce op_d07b_21_nf; extern cpuop_func_ce op_d07b_21_ff; extern cpuop_func_ce op_d07c_21_nf; extern cpuop_func_ce op_d07c_21_ff; extern cpuop_func_ce op_d080_21_nf; extern cpuop_func_ce op_d080_21_ff; extern cpuop_func_ce op_d088_21_nf; extern cpuop_func_ce op_d088_21_ff; extern cpuop_func_ce op_d090_21_nf; extern cpuop_func_ce op_d090_21_ff; extern cpuop_func_ce op_d098_21_nf; extern cpuop_func_ce op_d098_21_ff; extern cpuop_func_ce op_d0a0_21_nf; extern cpuop_func_ce op_d0a0_21_ff; extern cpuop_func_ce op_d0a8_21_nf; extern cpuop_func_ce op_d0a8_21_ff; extern cpuop_func_ce op_d0b0_21_nf; extern cpuop_func_ce op_d0b0_21_ff; extern cpuop_func_ce op_d0b8_21_nf; extern cpuop_func_ce op_d0b8_21_ff; extern cpuop_func_ce op_d0b9_21_nf; extern cpuop_func_ce op_d0b9_21_ff; extern cpuop_func_ce op_d0ba_21_nf; extern cpuop_func_ce op_d0ba_21_ff; extern cpuop_func_ce op_d0bb_21_nf; extern cpuop_func_ce op_d0bb_21_ff; extern cpuop_func_ce op_d0bc_21_nf; extern cpuop_func_ce op_d0bc_21_ff; extern cpuop_func_ce op_d0c0_21_nf; extern cpuop_func_ce op_d0c0_21_ff; extern cpuop_func_ce op_d0c8_21_nf; extern cpuop_func_ce op_d0c8_21_ff; extern cpuop_func_ce op_d0d0_21_nf; extern cpuop_func_ce op_d0d0_21_ff; extern cpuop_func_ce op_d0d8_21_nf; extern cpuop_func_ce op_d0d8_21_ff; extern cpuop_func_ce op_d0e0_21_nf; extern cpuop_func_ce op_d0e0_21_ff; extern cpuop_func_ce op_d0e8_21_nf; extern cpuop_func_ce op_d0e8_21_ff; extern cpuop_func_ce op_d0f0_21_nf; extern cpuop_func_ce op_d0f0_21_ff; extern cpuop_func_ce op_d0f8_21_nf; extern cpuop_func_ce op_d0f8_21_ff; extern cpuop_func_ce op_d0f9_21_nf; extern cpuop_func_ce op_d0f9_21_ff; extern cpuop_func_ce op_d0fa_21_nf; extern cpuop_func_ce op_d0fa_21_ff; extern cpuop_func_ce op_d0fb_21_nf; extern cpuop_func_ce op_d0fb_21_ff; extern cpuop_func_ce op_d0fc_21_nf; extern cpuop_func_ce op_d0fc_21_ff; extern cpuop_func_ce op_d100_21_nf; extern cpuop_func_ce op_d100_21_ff; extern cpuop_func_ce op_d108_21_nf; extern cpuop_func_ce op_d108_21_ff; extern cpuop_func_ce op_d110_21_nf; extern cpuop_func_ce op_d110_21_ff; extern cpuop_func_ce op_d118_21_nf; extern cpuop_func_ce op_d118_21_ff; extern cpuop_func_ce op_d120_21_nf; extern cpuop_func_ce op_d120_21_ff; extern cpuop_func_ce op_d128_21_nf; extern cpuop_func_ce op_d128_21_ff; extern cpuop_func_ce op_d130_21_nf; extern cpuop_func_ce op_d130_21_ff; extern cpuop_func_ce op_d138_21_nf; extern cpuop_func_ce op_d138_21_ff; extern cpuop_func_ce op_d139_21_nf; extern cpuop_func_ce op_d139_21_ff; extern cpuop_func_ce op_d140_21_nf; extern cpuop_func_ce op_d140_21_ff; extern cpuop_func_ce op_d148_21_nf; extern cpuop_func_ce op_d148_21_ff; extern cpuop_func_ce op_d150_21_nf; extern cpuop_func_ce op_d150_21_ff; extern cpuop_func_ce op_d158_21_nf; extern cpuop_func_ce op_d158_21_ff; extern cpuop_func_ce op_d160_21_nf; extern cpuop_func_ce op_d160_21_ff; extern cpuop_func_ce op_d168_21_nf; extern cpuop_func_ce op_d168_21_ff; extern cpuop_func_ce op_d170_21_nf; extern cpuop_func_ce op_d170_21_ff; extern cpuop_func_ce op_d178_21_nf; extern cpuop_func_ce op_d178_21_ff; extern cpuop_func_ce op_d179_21_nf; extern cpuop_func_ce op_d179_21_ff; extern cpuop_func_ce op_d180_21_nf; extern cpuop_func_ce op_d180_21_ff; extern cpuop_func_ce op_d188_21_nf; extern cpuop_func_ce op_d188_21_ff; extern cpuop_func_ce op_d190_21_nf; extern cpuop_func_ce op_d190_21_ff; extern cpuop_func_ce op_d198_21_nf; extern cpuop_func_ce op_d198_21_ff; extern cpuop_func_ce op_d1a0_21_nf; extern cpuop_func_ce op_d1a0_21_ff; extern cpuop_func_ce op_d1a8_21_nf; extern cpuop_func_ce op_d1a8_21_ff; extern cpuop_func_ce op_d1b0_21_nf; extern cpuop_func_ce op_d1b0_21_ff; extern cpuop_func_ce op_d1b8_21_nf; extern cpuop_func_ce op_d1b8_21_ff; extern cpuop_func_ce op_d1b9_21_nf; extern cpuop_func_ce op_d1b9_21_ff; extern cpuop_func_ce op_d1c0_21_nf; extern cpuop_func_ce op_d1c0_21_ff; extern cpuop_func_ce op_d1c8_21_nf; extern cpuop_func_ce op_d1c8_21_ff; extern cpuop_func_ce op_d1d0_21_nf; extern cpuop_func_ce op_d1d0_21_ff; extern cpuop_func_ce op_d1d8_21_nf; extern cpuop_func_ce op_d1d8_21_ff; extern cpuop_func_ce op_d1e0_21_nf; extern cpuop_func_ce op_d1e0_21_ff; extern cpuop_func_ce op_d1e8_21_nf; extern cpuop_func_ce op_d1e8_21_ff; extern cpuop_func_ce op_d1f0_21_nf; extern cpuop_func_ce op_d1f0_21_ff; extern cpuop_func_ce op_d1f8_21_nf; extern cpuop_func_ce op_d1f8_21_ff; extern cpuop_func_ce op_d1f9_21_nf; extern cpuop_func_ce op_d1f9_21_ff; extern cpuop_func_ce op_d1fa_21_nf; extern cpuop_func_ce op_d1fa_21_ff; extern cpuop_func_ce op_d1fb_21_nf; extern cpuop_func_ce op_d1fb_21_ff; extern cpuop_func_ce op_d1fc_21_nf; extern cpuop_func_ce op_d1fc_21_ff; extern cpuop_func_ce op_e000_21_nf; extern cpuop_func_ce op_e000_21_ff; extern cpuop_func_ce op_e008_21_nf; extern cpuop_func_ce op_e008_21_ff; extern cpuop_func_ce op_e010_21_nf; extern cpuop_func_ce op_e010_21_ff; extern cpuop_func_ce op_e018_21_nf; extern cpuop_func_ce op_e018_21_ff; extern cpuop_func_ce op_e020_21_nf; extern cpuop_func_ce op_e020_21_ff; extern cpuop_func_ce op_e028_21_nf; extern cpuop_func_ce op_e028_21_ff; extern cpuop_func_ce op_e030_21_nf; extern cpuop_func_ce op_e030_21_ff; extern cpuop_func_ce op_e038_21_nf; extern cpuop_func_ce op_e038_21_ff; extern cpuop_func_ce op_e040_21_nf; extern cpuop_func_ce op_e040_21_ff; extern cpuop_func_ce op_e048_21_nf; extern cpuop_func_ce op_e048_21_ff; extern cpuop_func_ce op_e050_21_nf; extern cpuop_func_ce op_e050_21_ff; extern cpuop_func_ce op_e058_21_nf; extern cpuop_func_ce op_e058_21_ff; extern cpuop_func_ce op_e060_21_nf; extern cpuop_func_ce op_e060_21_ff; extern cpuop_func_ce op_e068_21_nf; extern cpuop_func_ce op_e068_21_ff; extern cpuop_func_ce op_e070_21_nf; extern cpuop_func_ce op_e070_21_ff; extern cpuop_func_ce op_e078_21_nf; extern cpuop_func_ce op_e078_21_ff; extern cpuop_func_ce op_e080_21_nf; extern cpuop_func_ce op_e080_21_ff; extern cpuop_func_ce op_e088_21_nf; extern cpuop_func_ce op_e088_21_ff; extern cpuop_func_ce op_e090_21_nf; extern cpuop_func_ce op_e090_21_ff; extern cpuop_func_ce op_e098_21_nf; extern cpuop_func_ce op_e098_21_ff; extern cpuop_func_ce op_e0a0_21_nf; extern cpuop_func_ce op_e0a0_21_ff; extern cpuop_func_ce op_e0a8_21_nf; extern cpuop_func_ce op_e0a8_21_ff; extern cpuop_func_ce op_e0b0_21_nf; extern cpuop_func_ce op_e0b0_21_ff; extern cpuop_func_ce op_e0b8_21_nf; extern cpuop_func_ce op_e0b8_21_ff; extern cpuop_func_ce op_e0d0_21_nf; extern cpuop_func_ce op_e0d0_21_ff; extern cpuop_func_ce op_e0d8_21_nf; extern cpuop_func_ce op_e0d8_21_ff; extern cpuop_func_ce op_e0e0_21_nf; extern cpuop_func_ce op_e0e0_21_ff; extern cpuop_func_ce op_e0e8_21_nf; extern cpuop_func_ce op_e0e8_21_ff; extern cpuop_func_ce op_e0f0_21_nf; extern cpuop_func_ce op_e0f0_21_ff; extern cpuop_func_ce op_e0f8_21_nf; extern cpuop_func_ce op_e0f8_21_ff; extern cpuop_func_ce op_e0f9_21_nf; extern cpuop_func_ce op_e0f9_21_ff; extern cpuop_func_ce op_e100_21_nf; extern cpuop_func_ce op_e100_21_ff; extern cpuop_func_ce op_e108_21_nf; extern cpuop_func_ce op_e108_21_ff; extern cpuop_func_ce op_e110_21_nf; extern cpuop_func_ce op_e110_21_ff; extern cpuop_func_ce op_e118_21_nf; extern cpuop_func_ce op_e118_21_ff; extern cpuop_func_ce op_e120_21_nf; extern cpuop_func_ce op_e120_21_ff; extern cpuop_func_ce op_e128_21_nf; extern cpuop_func_ce op_e128_21_ff; extern cpuop_func_ce op_e130_21_nf; extern cpuop_func_ce op_e130_21_ff; extern cpuop_func_ce op_e138_21_nf; extern cpuop_func_ce op_e138_21_ff; extern cpuop_func_ce op_e140_21_nf; extern cpuop_func_ce op_e140_21_ff; extern cpuop_func_ce op_e148_21_nf; extern cpuop_func_ce op_e148_21_ff; extern cpuop_func_ce op_e150_21_nf; extern cpuop_func_ce op_e150_21_ff; extern cpuop_func_ce op_e158_21_nf; extern cpuop_func_ce op_e158_21_ff; extern cpuop_func_ce op_e160_21_nf; extern cpuop_func_ce op_e160_21_ff; extern cpuop_func_ce op_e168_21_nf; extern cpuop_func_ce op_e168_21_ff; extern cpuop_func_ce op_e170_21_nf; extern cpuop_func_ce op_e170_21_ff; extern cpuop_func_ce op_e178_21_nf; extern cpuop_func_ce op_e178_21_ff; extern cpuop_func_ce op_e180_21_nf; extern cpuop_func_ce op_e180_21_ff; extern cpuop_func_ce op_e188_21_nf; extern cpuop_func_ce op_e188_21_ff; extern cpuop_func_ce op_e190_21_nf; extern cpuop_func_ce op_e190_21_ff; extern cpuop_func_ce op_e198_21_nf; extern cpuop_func_ce op_e198_21_ff; extern cpuop_func_ce op_e1a0_21_nf; extern cpuop_func_ce op_e1a0_21_ff; extern cpuop_func_ce op_e1a8_21_nf; extern cpuop_func_ce op_e1a8_21_ff; extern cpuop_func_ce op_e1b0_21_nf; extern cpuop_func_ce op_e1b0_21_ff; extern cpuop_func_ce op_e1b8_21_nf; extern cpuop_func_ce op_e1b8_21_ff; extern cpuop_func_ce op_e1d0_21_nf; extern cpuop_func_ce op_e1d0_21_ff; extern cpuop_func_ce op_e1d8_21_nf; extern cpuop_func_ce op_e1d8_21_ff; extern cpuop_func_ce op_e1e0_21_nf; extern cpuop_func_ce op_e1e0_21_ff; extern cpuop_func_ce op_e1e8_21_nf; extern cpuop_func_ce op_e1e8_21_ff; extern cpuop_func_ce op_e1f0_21_nf; extern cpuop_func_ce op_e1f0_21_ff; extern cpuop_func_ce op_e1f8_21_nf; extern cpuop_func_ce op_e1f8_21_ff; extern cpuop_func_ce op_e1f9_21_nf; extern cpuop_func_ce op_e1f9_21_ff; extern cpuop_func_ce op_e2d0_21_nf; extern cpuop_func_ce op_e2d0_21_ff; extern cpuop_func_ce op_e2d8_21_nf; extern cpuop_func_ce op_e2d8_21_ff; extern cpuop_func_ce op_e2e0_21_nf; extern cpuop_func_ce op_e2e0_21_ff; extern cpuop_func_ce op_e2e8_21_nf; extern cpuop_func_ce op_e2e8_21_ff; extern cpuop_func_ce op_e2f0_21_nf; extern cpuop_func_ce op_e2f0_21_ff; extern cpuop_func_ce op_e2f8_21_nf; extern cpuop_func_ce op_e2f8_21_ff; extern cpuop_func_ce op_e2f9_21_nf; extern cpuop_func_ce op_e2f9_21_ff; extern cpuop_func_ce op_e3d0_21_nf; extern cpuop_func_ce op_e3d0_21_ff; extern cpuop_func_ce op_e3d8_21_nf; extern cpuop_func_ce op_e3d8_21_ff; extern cpuop_func_ce op_e3e0_21_nf; extern cpuop_func_ce op_e3e0_21_ff; extern cpuop_func_ce op_e3e8_21_nf; extern cpuop_func_ce op_e3e8_21_ff; extern cpuop_func_ce op_e3f0_21_nf; extern cpuop_func_ce op_e3f0_21_ff; extern cpuop_func_ce op_e3f8_21_nf; extern cpuop_func_ce op_e3f8_21_ff; extern cpuop_func_ce op_e3f9_21_nf; extern cpuop_func_ce op_e3f9_21_ff; extern cpuop_func_ce op_e4d0_21_nf; extern cpuop_func_ce op_e4d0_21_ff; extern cpuop_func_ce op_e4d8_21_nf; extern cpuop_func_ce op_e4d8_21_ff; extern cpuop_func_ce op_e4e0_21_nf; extern cpuop_func_ce op_e4e0_21_ff; extern cpuop_func_ce op_e4e8_21_nf; extern cpuop_func_ce op_e4e8_21_ff; extern cpuop_func_ce op_e4f0_21_nf; extern cpuop_func_ce op_e4f0_21_ff; extern cpuop_func_ce op_e4f8_21_nf; extern cpuop_func_ce op_e4f8_21_ff; extern cpuop_func_ce op_e4f9_21_nf; extern cpuop_func_ce op_e4f9_21_ff; extern cpuop_func_ce op_e5d0_21_nf; extern cpuop_func_ce op_e5d0_21_ff; extern cpuop_func_ce op_e5d8_21_nf; extern cpuop_func_ce op_e5d8_21_ff; extern cpuop_func_ce op_e5e0_21_nf; extern cpuop_func_ce op_e5e0_21_ff; extern cpuop_func_ce op_e5e8_21_nf; extern cpuop_func_ce op_e5e8_21_ff; extern cpuop_func_ce op_e5f0_21_nf; extern cpuop_func_ce op_e5f0_21_ff; extern cpuop_func_ce op_e5f8_21_nf; extern cpuop_func_ce op_e5f8_21_ff; extern cpuop_func_ce op_e5f9_21_nf; extern cpuop_func_ce op_e5f9_21_ff; extern cpuop_func_ce op_e6d0_21_nf; extern cpuop_func_ce op_e6d0_21_ff; extern cpuop_func_ce op_e6d8_21_nf; extern cpuop_func_ce op_e6d8_21_ff; extern cpuop_func_ce op_e6e0_21_nf; extern cpuop_func_ce op_e6e0_21_ff; extern cpuop_func_ce op_e6e8_21_nf; extern cpuop_func_ce op_e6e8_21_ff; extern cpuop_func_ce op_e6f0_21_nf; extern cpuop_func_ce op_e6f0_21_ff; extern cpuop_func_ce op_e6f8_21_nf; extern cpuop_func_ce op_e6f8_21_ff; extern cpuop_func_ce op_e6f9_21_nf; extern cpuop_func_ce op_e6f9_21_ff; extern cpuop_func_ce op_e7d0_21_nf; extern cpuop_func_ce op_e7d0_21_ff; extern cpuop_func_ce op_e7d8_21_nf; extern cpuop_func_ce op_e7d8_21_ff; extern cpuop_func_ce op_e7e0_21_nf; extern cpuop_func_ce op_e7e0_21_ff; extern cpuop_func_ce op_e7e8_21_nf; extern cpuop_func_ce op_e7e8_21_ff; extern cpuop_func_ce op_e7f0_21_nf; extern cpuop_func_ce op_e7f0_21_ff; extern cpuop_func_ce op_e7f8_21_nf; extern cpuop_func_ce op_e7f8_21_ff; extern cpuop_func_ce op_e7f9_21_nf; extern cpuop_func_ce op_e7f9_21_ff; extern cpuop_func_ce op_e8c0_21_nf; extern cpuop_func_ce op_e8c0_21_ff; extern cpuop_func_ce op_e8d0_21_nf; extern cpuop_func_ce op_e8d0_21_ff; extern cpuop_func_ce op_e8e8_21_nf; extern cpuop_func_ce op_e8e8_21_ff; extern cpuop_func_ce op_e8f0_21_nf; extern cpuop_func_ce op_e8f0_21_ff; extern cpuop_func_ce op_e8f8_21_nf; extern cpuop_func_ce op_e8f8_21_ff; extern cpuop_func_ce op_e8f9_21_nf; extern cpuop_func_ce op_e8f9_21_ff; extern cpuop_func_ce op_e8fa_21_nf; extern cpuop_func_ce op_e8fa_21_ff; extern cpuop_func_ce op_e8fb_21_nf; extern cpuop_func_ce op_e8fb_21_ff; extern cpuop_func_ce op_e9c0_21_nf; extern cpuop_func_ce op_e9c0_21_ff; extern cpuop_func_ce op_e9d0_21_nf; extern cpuop_func_ce op_e9d0_21_ff; extern cpuop_func_ce op_e9e8_21_nf; extern cpuop_func_ce op_e9e8_21_ff; extern cpuop_func_ce op_e9f0_21_nf; extern cpuop_func_ce op_e9f0_21_ff; extern cpuop_func_ce op_e9f8_21_nf; extern cpuop_func_ce op_e9f8_21_ff; extern cpuop_func_ce op_e9f9_21_nf; extern cpuop_func_ce op_e9f9_21_ff; extern cpuop_func_ce op_e9fa_21_nf; extern cpuop_func_ce op_e9fa_21_ff; extern cpuop_func_ce op_e9fb_21_nf; extern cpuop_func_ce op_e9fb_21_ff; extern cpuop_func_ce op_eac0_21_nf; extern cpuop_func_ce op_eac0_21_ff; extern cpuop_func_ce op_ead0_21_nf; extern cpuop_func_ce op_ead0_21_ff; extern cpuop_func_ce op_eae8_21_nf; extern cpuop_func_ce op_eae8_21_ff; extern cpuop_func_ce op_eaf0_21_nf; extern cpuop_func_ce op_eaf0_21_ff; extern cpuop_func_ce op_eaf8_21_nf; extern cpuop_func_ce op_eaf8_21_ff; extern cpuop_func_ce op_eaf9_21_nf; extern cpuop_func_ce op_eaf9_21_ff; extern cpuop_func_ce op_ebc0_21_nf; extern cpuop_func_ce op_ebc0_21_ff; extern cpuop_func_ce op_ebd0_21_nf; extern cpuop_func_ce op_ebd0_21_ff; extern cpuop_func_ce op_ebe8_21_nf; extern cpuop_func_ce op_ebe8_21_ff; extern cpuop_func_ce op_ebf0_21_nf; extern cpuop_func_ce op_ebf0_21_ff; extern cpuop_func_ce op_ebf8_21_nf; extern cpuop_func_ce op_ebf8_21_ff; extern cpuop_func_ce op_ebf9_21_nf; extern cpuop_func_ce op_ebf9_21_ff; extern cpuop_func_ce op_ebfa_21_nf; extern cpuop_func_ce op_ebfa_21_ff; extern cpuop_func_ce op_ebfb_21_nf; extern cpuop_func_ce op_ebfb_21_ff; extern cpuop_func_ce op_ecc0_21_nf; extern cpuop_func_ce op_ecc0_21_ff; extern cpuop_func_ce op_ecd0_21_nf; extern cpuop_func_ce op_ecd0_21_ff; extern cpuop_func_ce op_ece8_21_nf; extern cpuop_func_ce op_ece8_21_ff; extern cpuop_func_ce op_ecf0_21_nf; extern cpuop_func_ce op_ecf0_21_ff; extern cpuop_func_ce op_ecf8_21_nf; extern cpuop_func_ce op_ecf8_21_ff; extern cpuop_func_ce op_ecf9_21_nf; extern cpuop_func_ce op_ecf9_21_ff; extern cpuop_func_ce op_edc0_21_nf; extern cpuop_func_ce op_edc0_21_ff; extern cpuop_func_ce op_edd0_21_nf; extern cpuop_func_ce op_edd0_21_ff; extern cpuop_func_ce op_ede8_21_nf; extern cpuop_func_ce op_ede8_21_ff; extern cpuop_func_ce op_edf0_21_nf; extern cpuop_func_ce op_edf0_21_ff; extern cpuop_func_ce op_edf8_21_nf; extern cpuop_func_ce op_edf8_21_ff; extern cpuop_func_ce op_edf9_21_nf; extern cpuop_func_ce op_edf9_21_ff; extern cpuop_func_ce op_edfa_21_nf; extern cpuop_func_ce op_edfa_21_ff; extern cpuop_func_ce op_edfb_21_nf; extern cpuop_func_ce op_edfb_21_ff; extern cpuop_func_ce op_eec0_21_nf; extern cpuop_func_ce op_eec0_21_ff; extern cpuop_func_ce op_eed0_21_nf; extern cpuop_func_ce op_eed0_21_ff; extern cpuop_func_ce op_eee8_21_nf; extern cpuop_func_ce op_eee8_21_ff; extern cpuop_func_ce op_eef0_21_nf; extern cpuop_func_ce op_eef0_21_ff; extern cpuop_func_ce op_eef8_21_nf; extern cpuop_func_ce op_eef8_21_ff; extern cpuop_func_ce op_eef9_21_nf; extern cpuop_func_ce op_eef9_21_ff; extern cpuop_func_ce op_efc0_21_nf; extern cpuop_func_ce op_efc0_21_ff; extern cpuop_func_ce op_efd0_21_nf; extern cpuop_func_ce op_efd0_21_ff; extern cpuop_func_ce op_efe8_21_nf; extern cpuop_func_ce op_efe8_21_ff; extern cpuop_func_ce op_eff0_21_nf; extern cpuop_func_ce op_eff0_21_ff; extern cpuop_func_ce op_eff8_21_nf; extern cpuop_func_ce op_eff8_21_ff; extern cpuop_func_ce op_eff9_21_nf; extern cpuop_func_ce op_eff9_21_ff; extern cpuop_func_ce op_f200_21_nf; extern cpuop_func_ce op_f200_21_ff; extern cpuop_func_ce op_f208_21_nf; extern cpuop_func_ce op_f208_21_ff; extern cpuop_func_ce op_f210_21_nf; extern cpuop_func_ce op_f210_21_ff; extern cpuop_func_ce op_f218_21_nf; extern cpuop_func_ce op_f218_21_ff; extern cpuop_func_ce op_f220_21_nf; extern cpuop_func_ce op_f220_21_ff; extern cpuop_func_ce op_f228_21_nf; extern cpuop_func_ce op_f228_21_ff; extern cpuop_func_ce op_f230_21_nf; extern cpuop_func_ce op_f230_21_ff; extern cpuop_func_ce op_f238_21_nf; extern cpuop_func_ce op_f238_21_ff; extern cpuop_func_ce op_f239_21_nf; extern cpuop_func_ce op_f239_21_ff; extern cpuop_func_ce op_f23a_21_nf; extern cpuop_func_ce op_f23a_21_ff; extern cpuop_func_ce op_f23b_21_nf; extern cpuop_func_ce op_f23b_21_ff; extern cpuop_func_ce op_f23c_21_nf; extern cpuop_func_ce op_f23c_21_ff; extern cpuop_func_ce op_f240_21_nf; extern cpuop_func_ce op_f240_21_ff; extern cpuop_func_ce op_f248_21_nf; extern cpuop_func_ce op_f248_21_ff; extern cpuop_func_ce op_f250_21_nf; extern cpuop_func_ce op_f250_21_ff; extern cpuop_func_ce op_f258_21_nf; extern cpuop_func_ce op_f258_21_ff; extern cpuop_func_ce op_f260_21_nf; extern cpuop_func_ce op_f260_21_ff; extern cpuop_func_ce op_f268_21_nf; extern cpuop_func_ce op_f268_21_ff; extern cpuop_func_ce op_f270_21_nf; extern cpuop_func_ce op_f270_21_ff; extern cpuop_func_ce op_f278_21_nf; extern cpuop_func_ce op_f278_21_ff; extern cpuop_func_ce op_f279_21_nf; extern cpuop_func_ce op_f279_21_ff; extern cpuop_func_ce op_f27a_21_nf; extern cpuop_func_ce op_f27a_21_ff; extern cpuop_func_ce op_f27b_21_nf; extern cpuop_func_ce op_f27b_21_ff; extern cpuop_func_ce op_f27c_21_nf; extern cpuop_func_ce op_f27c_21_ff; extern cpuop_func_ce op_f280_21_nf; extern cpuop_func_ce op_f280_21_ff; extern cpuop_func_ce op_f2c0_21_nf; extern cpuop_func_ce op_f2c0_21_ff; extern cpuop_func_ce op_f310_21_nf; extern cpuop_func_ce op_f310_21_ff; extern cpuop_func_ce op_f320_21_nf; extern cpuop_func_ce op_f320_21_ff; extern cpuop_func_ce op_f328_21_nf; extern cpuop_func_ce op_f328_21_ff; extern cpuop_func_ce op_f330_21_nf; extern cpuop_func_ce op_f330_21_ff; extern cpuop_func_ce op_f338_21_nf; extern cpuop_func_ce op_f338_21_ff; extern cpuop_func_ce op_f339_21_nf; extern cpuop_func_ce op_f339_21_ff; extern cpuop_func_ce op_f350_21_nf; extern cpuop_func_ce op_f350_21_ff; extern cpuop_func_ce op_f358_21_nf; extern cpuop_func_ce op_f358_21_ff; extern cpuop_func_ce op_f368_21_nf; extern cpuop_func_ce op_f368_21_ff; extern cpuop_func_ce op_f370_21_nf; extern cpuop_func_ce op_f370_21_ff; extern cpuop_func_ce op_f378_21_nf; extern cpuop_func_ce op_f378_21_ff; extern cpuop_func_ce op_f379_21_nf; extern cpuop_func_ce op_f379_21_ff; extern cpuop_func_ce op_f37a_21_nf; extern cpuop_func_ce op_f37a_21_ff; extern cpuop_func_ce op_f37b_21_nf; extern cpuop_func_ce op_f37b_21_ff; extern cpuop_func_ce op_0000_22_nf; extern cpuop_func_ce op_0000_22_ff; extern cpuop_func_ce op_0010_22_nf; extern cpuop_func_ce op_0010_22_ff; extern cpuop_func_ce op_0018_22_nf; extern cpuop_func_ce op_0018_22_ff; extern cpuop_func_ce op_0020_22_nf; extern cpuop_func_ce op_0020_22_ff; extern cpuop_func_ce op_0028_22_nf; extern cpuop_func_ce op_0028_22_ff; extern cpuop_func_ce op_0030_22_nf; extern cpuop_func_ce op_0030_22_ff; extern cpuop_func_ce op_0038_22_nf; extern cpuop_func_ce op_0038_22_ff; extern cpuop_func_ce op_0039_22_nf; extern cpuop_func_ce op_0039_22_ff; extern cpuop_func_ce op_003c_22_nf; extern cpuop_func_ce op_003c_22_ff; extern cpuop_func_ce op_0040_22_nf; extern cpuop_func_ce op_0040_22_ff; extern cpuop_func_ce op_0050_22_nf; extern cpuop_func_ce op_0050_22_ff; extern cpuop_func_ce op_0058_22_nf; extern cpuop_func_ce op_0058_22_ff; extern cpuop_func_ce op_0060_22_nf; extern cpuop_func_ce op_0060_22_ff; extern cpuop_func_ce op_0068_22_nf; extern cpuop_func_ce op_0068_22_ff; extern cpuop_func_ce op_0070_22_nf; extern cpuop_func_ce op_0070_22_ff; extern cpuop_func_ce op_0078_22_nf; extern cpuop_func_ce op_0078_22_ff; extern cpuop_func_ce op_0079_22_nf; extern cpuop_func_ce op_0079_22_ff; extern cpuop_func_ce op_007c_22_nf; extern cpuop_func_ce op_007c_22_ff; extern cpuop_func_ce op_0080_22_nf; extern cpuop_func_ce op_0080_22_ff; extern cpuop_func_ce op_0090_22_nf; extern cpuop_func_ce op_0090_22_ff; extern cpuop_func_ce op_0098_22_nf; extern cpuop_func_ce op_0098_22_ff; extern cpuop_func_ce op_00a0_22_nf; extern cpuop_func_ce op_00a0_22_ff; extern cpuop_func_ce op_00a8_22_nf; extern cpuop_func_ce op_00a8_22_ff; extern cpuop_func_ce op_00b0_22_nf; extern cpuop_func_ce op_00b0_22_ff; extern cpuop_func_ce op_00b8_22_nf; extern cpuop_func_ce op_00b8_22_ff; extern cpuop_func_ce op_00b9_22_nf; extern cpuop_func_ce op_00b9_22_ff; extern cpuop_func_ce op_00d0_22_nf; extern cpuop_func_ce op_00d0_22_ff; extern cpuop_func_ce op_00e8_22_nf; extern cpuop_func_ce op_00e8_22_ff; extern cpuop_func_ce op_00f0_22_nf; extern cpuop_func_ce op_00f0_22_ff; extern cpuop_func_ce op_00f8_22_nf; extern cpuop_func_ce op_00f8_22_ff; extern cpuop_func_ce op_00f9_22_nf; extern cpuop_func_ce op_00f9_22_ff; extern cpuop_func_ce op_00fa_22_nf; extern cpuop_func_ce op_00fa_22_ff; extern cpuop_func_ce op_00fb_22_nf; extern cpuop_func_ce op_00fb_22_ff; extern cpuop_func_ce op_0100_22_nf; extern cpuop_func_ce op_0100_22_ff; extern cpuop_func_ce op_0108_22_nf; extern cpuop_func_ce op_0108_22_ff; extern cpuop_func_ce op_0110_22_nf; extern cpuop_func_ce op_0110_22_ff; extern cpuop_func_ce op_0118_22_nf; extern cpuop_func_ce op_0118_22_ff; extern cpuop_func_ce op_0120_22_nf; extern cpuop_func_ce op_0120_22_ff; extern cpuop_func_ce op_0128_22_nf; extern cpuop_func_ce op_0128_22_ff; extern cpuop_func_ce op_0130_22_nf; extern cpuop_func_ce op_0130_22_ff; extern cpuop_func_ce op_0138_22_nf; extern cpuop_func_ce op_0138_22_ff; extern cpuop_func_ce op_0139_22_nf; extern cpuop_func_ce op_0139_22_ff; extern cpuop_func_ce op_013a_22_nf; extern cpuop_func_ce op_013a_22_ff; extern cpuop_func_ce op_013b_22_nf; extern cpuop_func_ce op_013b_22_ff; extern cpuop_func_ce op_013c_22_nf; extern cpuop_func_ce op_013c_22_ff; extern cpuop_func_ce op_0140_22_nf; extern cpuop_func_ce op_0140_22_ff; extern cpuop_func_ce op_0148_22_nf; extern cpuop_func_ce op_0148_22_ff; extern cpuop_func_ce op_0150_22_nf; extern cpuop_func_ce op_0150_22_ff; extern cpuop_func_ce op_0158_22_nf; extern cpuop_func_ce op_0158_22_ff; extern cpuop_func_ce op_0160_22_nf; extern cpuop_func_ce op_0160_22_ff; extern cpuop_func_ce op_0168_22_nf; extern cpuop_func_ce op_0168_22_ff; extern cpuop_func_ce op_0170_22_nf; extern cpuop_func_ce op_0170_22_ff; extern cpuop_func_ce op_0178_22_nf; extern cpuop_func_ce op_0178_22_ff; extern cpuop_func_ce op_0179_22_nf; extern cpuop_func_ce op_0179_22_ff; extern cpuop_func_ce op_017a_22_nf; extern cpuop_func_ce op_017a_22_ff; extern cpuop_func_ce op_017b_22_nf; extern cpuop_func_ce op_017b_22_ff; extern cpuop_func_ce op_0180_22_nf; extern cpuop_func_ce op_0180_22_ff; extern cpuop_func_ce op_0188_22_nf; extern cpuop_func_ce op_0188_22_ff; extern cpuop_func_ce op_0190_22_nf; extern cpuop_func_ce op_0190_22_ff; extern cpuop_func_ce op_0198_22_nf; extern cpuop_func_ce op_0198_22_ff; extern cpuop_func_ce op_01a0_22_nf; extern cpuop_func_ce op_01a0_22_ff; extern cpuop_func_ce op_01a8_22_nf; extern cpuop_func_ce op_01a8_22_ff; extern cpuop_func_ce op_01b0_22_nf; extern cpuop_func_ce op_01b0_22_ff; extern cpuop_func_ce op_01b8_22_nf; extern cpuop_func_ce op_01b8_22_ff; extern cpuop_func_ce op_01b9_22_nf; extern cpuop_func_ce op_01b9_22_ff; extern cpuop_func_ce op_01ba_22_nf; extern cpuop_func_ce op_01ba_22_ff; extern cpuop_func_ce op_01bb_22_nf; extern cpuop_func_ce op_01bb_22_ff; extern cpuop_func_ce op_01c0_22_nf; extern cpuop_func_ce op_01c0_22_ff; extern cpuop_func_ce op_01c8_22_nf; extern cpuop_func_ce op_01c8_22_ff; extern cpuop_func_ce op_01d0_22_nf; extern cpuop_func_ce op_01d0_22_ff; extern cpuop_func_ce op_01d8_22_nf; extern cpuop_func_ce op_01d8_22_ff; extern cpuop_func_ce op_01e0_22_nf; extern cpuop_func_ce op_01e0_22_ff; extern cpuop_func_ce op_01e8_22_nf; extern cpuop_func_ce op_01e8_22_ff; extern cpuop_func_ce op_01f0_22_nf; extern cpuop_func_ce op_01f0_22_ff; extern cpuop_func_ce op_01f8_22_nf; extern cpuop_func_ce op_01f8_22_ff; extern cpuop_func_ce op_01f9_22_nf; extern cpuop_func_ce op_01f9_22_ff; extern cpuop_func_ce op_01fa_22_nf; extern cpuop_func_ce op_01fa_22_ff; extern cpuop_func_ce op_01fb_22_nf; extern cpuop_func_ce op_01fb_22_ff; extern cpuop_func_ce op_0200_22_nf; extern cpuop_func_ce op_0200_22_ff; extern cpuop_func_ce op_0210_22_nf; extern cpuop_func_ce op_0210_22_ff; extern cpuop_func_ce op_0218_22_nf; extern cpuop_func_ce op_0218_22_ff; extern cpuop_func_ce op_0220_22_nf; extern cpuop_func_ce op_0220_22_ff; extern cpuop_func_ce op_0228_22_nf; extern cpuop_func_ce op_0228_22_ff; extern cpuop_func_ce op_0230_22_nf; extern cpuop_func_ce op_0230_22_ff; extern cpuop_func_ce op_0238_22_nf; extern cpuop_func_ce op_0238_22_ff; extern cpuop_func_ce op_0239_22_nf; extern cpuop_func_ce op_0239_22_ff; extern cpuop_func_ce op_023c_22_nf; extern cpuop_func_ce op_023c_22_ff; extern cpuop_func_ce op_0240_22_nf; extern cpuop_func_ce op_0240_22_ff; extern cpuop_func_ce op_0250_22_nf; extern cpuop_func_ce op_0250_22_ff; extern cpuop_func_ce op_0258_22_nf; extern cpuop_func_ce op_0258_22_ff; extern cpuop_func_ce op_0260_22_nf; extern cpuop_func_ce op_0260_22_ff; extern cpuop_func_ce op_0268_22_nf; extern cpuop_func_ce op_0268_22_ff; extern cpuop_func_ce op_0270_22_nf; extern cpuop_func_ce op_0270_22_ff; extern cpuop_func_ce op_0278_22_nf; extern cpuop_func_ce op_0278_22_ff; extern cpuop_func_ce op_0279_22_nf; extern cpuop_func_ce op_0279_22_ff; extern cpuop_func_ce op_027c_22_nf; extern cpuop_func_ce op_027c_22_ff; extern cpuop_func_ce op_0280_22_nf; extern cpuop_func_ce op_0280_22_ff; extern cpuop_func_ce op_0290_22_nf; extern cpuop_func_ce op_0290_22_ff; extern cpuop_func_ce op_0298_22_nf; extern cpuop_func_ce op_0298_22_ff; extern cpuop_func_ce op_02a0_22_nf; extern cpuop_func_ce op_02a0_22_ff; extern cpuop_func_ce op_02a8_22_nf; extern cpuop_func_ce op_02a8_22_ff; extern cpuop_func_ce op_02b0_22_nf; extern cpuop_func_ce op_02b0_22_ff; extern cpuop_func_ce op_02b8_22_nf; extern cpuop_func_ce op_02b8_22_ff; extern cpuop_func_ce op_02b9_22_nf; extern cpuop_func_ce op_02b9_22_ff; extern cpuop_func_ce op_02d0_22_nf; extern cpuop_func_ce op_02d0_22_ff; extern cpuop_func_ce op_02e8_22_nf; extern cpuop_func_ce op_02e8_22_ff; extern cpuop_func_ce op_02f0_22_nf; extern cpuop_func_ce op_02f0_22_ff; extern cpuop_func_ce op_02f8_22_nf; extern cpuop_func_ce op_02f8_22_ff; extern cpuop_func_ce op_02f9_22_nf; extern cpuop_func_ce op_02f9_22_ff; extern cpuop_func_ce op_02fa_22_nf; extern cpuop_func_ce op_02fa_22_ff; extern cpuop_func_ce op_02fb_22_nf; extern cpuop_func_ce op_02fb_22_ff; extern cpuop_func_ce op_0400_22_nf; extern cpuop_func_ce op_0400_22_ff; extern cpuop_func_ce op_0410_22_nf; extern cpuop_func_ce op_0410_22_ff; extern cpuop_func_ce op_0418_22_nf; extern cpuop_func_ce op_0418_22_ff; extern cpuop_func_ce op_0420_22_nf; extern cpuop_func_ce op_0420_22_ff; extern cpuop_func_ce op_0428_22_nf; extern cpuop_func_ce op_0428_22_ff; extern cpuop_func_ce op_0430_22_nf; extern cpuop_func_ce op_0430_22_ff; extern cpuop_func_ce op_0438_22_nf; extern cpuop_func_ce op_0438_22_ff; extern cpuop_func_ce op_0439_22_nf; extern cpuop_func_ce op_0439_22_ff; extern cpuop_func_ce op_0440_22_nf; extern cpuop_func_ce op_0440_22_ff; extern cpuop_func_ce op_0450_22_nf; extern cpuop_func_ce op_0450_22_ff; extern cpuop_func_ce op_0458_22_nf; extern cpuop_func_ce op_0458_22_ff; extern cpuop_func_ce op_0460_22_nf; extern cpuop_func_ce op_0460_22_ff; extern cpuop_func_ce op_0468_22_nf; extern cpuop_func_ce op_0468_22_ff; extern cpuop_func_ce op_0470_22_nf; extern cpuop_func_ce op_0470_22_ff; extern cpuop_func_ce op_0478_22_nf; extern cpuop_func_ce op_0478_22_ff; extern cpuop_func_ce op_0479_22_nf; extern cpuop_func_ce op_0479_22_ff; extern cpuop_func_ce op_0480_22_nf; extern cpuop_func_ce op_0480_22_ff; extern cpuop_func_ce op_0490_22_nf; extern cpuop_func_ce op_0490_22_ff; extern cpuop_func_ce op_0498_22_nf; extern cpuop_func_ce op_0498_22_ff; extern cpuop_func_ce op_04a0_22_nf; extern cpuop_func_ce op_04a0_22_ff; extern cpuop_func_ce op_04a8_22_nf; extern cpuop_func_ce op_04a8_22_ff; extern cpuop_func_ce op_04b0_22_nf; extern cpuop_func_ce op_04b0_22_ff; extern cpuop_func_ce op_04b8_22_nf; extern cpuop_func_ce op_04b8_22_ff; extern cpuop_func_ce op_04b9_22_nf; extern cpuop_func_ce op_04b9_22_ff; extern cpuop_func_ce op_04d0_22_nf; extern cpuop_func_ce op_04d0_22_ff; extern cpuop_func_ce op_04e8_22_nf; extern cpuop_func_ce op_04e8_22_ff; extern cpuop_func_ce op_04f0_22_nf; extern cpuop_func_ce op_04f0_22_ff; extern cpuop_func_ce op_04f8_22_nf; extern cpuop_func_ce op_04f8_22_ff; extern cpuop_func_ce op_04f9_22_nf; extern cpuop_func_ce op_04f9_22_ff; extern cpuop_func_ce op_04fa_22_nf; extern cpuop_func_ce op_04fa_22_ff; extern cpuop_func_ce op_04fb_22_nf; extern cpuop_func_ce op_04fb_22_ff; extern cpuop_func_ce op_0600_22_nf; extern cpuop_func_ce op_0600_22_ff; extern cpuop_func_ce op_0610_22_nf; extern cpuop_func_ce op_0610_22_ff; extern cpuop_func_ce op_0618_22_nf; extern cpuop_func_ce op_0618_22_ff; extern cpuop_func_ce op_0620_22_nf; extern cpuop_func_ce op_0620_22_ff; extern cpuop_func_ce op_0628_22_nf; extern cpuop_func_ce op_0628_22_ff; extern cpuop_func_ce op_0630_22_nf; extern cpuop_func_ce op_0630_22_ff; extern cpuop_func_ce op_0638_22_nf; extern cpuop_func_ce op_0638_22_ff; extern cpuop_func_ce op_0639_22_nf; extern cpuop_func_ce op_0639_22_ff; extern cpuop_func_ce op_0640_22_nf; extern cpuop_func_ce op_0640_22_ff; extern cpuop_func_ce op_0650_22_nf; extern cpuop_func_ce op_0650_22_ff; extern cpuop_func_ce op_0658_22_nf; extern cpuop_func_ce op_0658_22_ff; extern cpuop_func_ce op_0660_22_nf; extern cpuop_func_ce op_0660_22_ff; extern cpuop_func_ce op_0668_22_nf; extern cpuop_func_ce op_0668_22_ff; extern cpuop_func_ce op_0670_22_nf; extern cpuop_func_ce op_0670_22_ff; extern cpuop_func_ce op_0678_22_nf; extern cpuop_func_ce op_0678_22_ff; extern cpuop_func_ce op_0679_22_nf; extern cpuop_func_ce op_0679_22_ff; extern cpuop_func_ce op_0680_22_nf; extern cpuop_func_ce op_0680_22_ff; extern cpuop_func_ce op_0690_22_nf; extern cpuop_func_ce op_0690_22_ff; extern cpuop_func_ce op_0698_22_nf; extern cpuop_func_ce op_0698_22_ff; extern cpuop_func_ce op_06a0_22_nf; extern cpuop_func_ce op_06a0_22_ff; extern cpuop_func_ce op_06a8_22_nf; extern cpuop_func_ce op_06a8_22_ff; extern cpuop_func_ce op_06b0_22_nf; extern cpuop_func_ce op_06b0_22_ff; extern cpuop_func_ce op_06b8_22_nf; extern cpuop_func_ce op_06b8_22_ff; extern cpuop_func_ce op_06b9_22_nf; extern cpuop_func_ce op_06b9_22_ff; extern cpuop_func_ce op_06c0_22_nf; extern cpuop_func_ce op_06c0_22_ff; extern cpuop_func_ce op_06c8_22_nf; extern cpuop_func_ce op_06c8_22_ff; extern cpuop_func_ce op_06d0_22_nf; extern cpuop_func_ce op_06d0_22_ff; extern cpuop_func_ce op_06e8_22_nf; extern cpuop_func_ce op_06e8_22_ff; extern cpuop_func_ce op_06f0_22_nf; extern cpuop_func_ce op_06f0_22_ff; extern cpuop_func_ce op_06f8_22_nf; extern cpuop_func_ce op_06f8_22_ff; extern cpuop_func_ce op_06f9_22_nf; extern cpuop_func_ce op_06f9_22_ff; extern cpuop_func_ce op_06fa_22_nf; extern cpuop_func_ce op_06fa_22_ff; extern cpuop_func_ce op_06fb_22_nf; extern cpuop_func_ce op_06fb_22_ff; extern cpuop_func_ce op_0800_22_nf; extern cpuop_func_ce op_0800_22_ff; extern cpuop_func_ce op_0810_22_nf; extern cpuop_func_ce op_0810_22_ff; extern cpuop_func_ce op_0818_22_nf; extern cpuop_func_ce op_0818_22_ff; extern cpuop_func_ce op_0820_22_nf; extern cpuop_func_ce op_0820_22_ff; extern cpuop_func_ce op_0828_22_nf; extern cpuop_func_ce op_0828_22_ff; extern cpuop_func_ce op_0830_22_nf; extern cpuop_func_ce op_0830_22_ff; extern cpuop_func_ce op_0838_22_nf; extern cpuop_func_ce op_0838_22_ff; extern cpuop_func_ce op_0839_22_nf; extern cpuop_func_ce op_0839_22_ff; extern cpuop_func_ce op_083a_22_nf; extern cpuop_func_ce op_083a_22_ff; extern cpuop_func_ce op_083b_22_nf; extern cpuop_func_ce op_083b_22_ff; extern cpuop_func_ce op_083c_22_nf; extern cpuop_func_ce op_083c_22_ff; extern cpuop_func_ce op_0840_22_nf; extern cpuop_func_ce op_0840_22_ff; extern cpuop_func_ce op_0850_22_nf; extern cpuop_func_ce op_0850_22_ff; extern cpuop_func_ce op_0858_22_nf; extern cpuop_func_ce op_0858_22_ff; extern cpuop_func_ce op_0860_22_nf; extern cpuop_func_ce op_0860_22_ff; extern cpuop_func_ce op_0868_22_nf; extern cpuop_func_ce op_0868_22_ff; extern cpuop_func_ce op_0870_22_nf; extern cpuop_func_ce op_0870_22_ff; extern cpuop_func_ce op_0878_22_nf; extern cpuop_func_ce op_0878_22_ff; extern cpuop_func_ce op_0879_22_nf; extern cpuop_func_ce op_0879_22_ff; extern cpuop_func_ce op_087a_22_nf; extern cpuop_func_ce op_087a_22_ff; extern cpuop_func_ce op_087b_22_nf; extern cpuop_func_ce op_087b_22_ff; extern cpuop_func_ce op_0880_22_nf; extern cpuop_func_ce op_0880_22_ff; extern cpuop_func_ce op_0890_22_nf; extern cpuop_func_ce op_0890_22_ff; extern cpuop_func_ce op_0898_22_nf; extern cpuop_func_ce op_0898_22_ff; extern cpuop_func_ce op_08a0_22_nf; extern cpuop_func_ce op_08a0_22_ff; extern cpuop_func_ce op_08a8_22_nf; extern cpuop_func_ce op_08a8_22_ff; extern cpuop_func_ce op_08b0_22_nf; extern cpuop_func_ce op_08b0_22_ff; extern cpuop_func_ce op_08b8_22_nf; extern cpuop_func_ce op_08b8_22_ff; extern cpuop_func_ce op_08b9_22_nf; extern cpuop_func_ce op_08b9_22_ff; extern cpuop_func_ce op_08ba_22_nf; extern cpuop_func_ce op_08ba_22_ff; extern cpuop_func_ce op_08bb_22_nf; extern cpuop_func_ce op_08bb_22_ff; extern cpuop_func_ce op_08c0_22_nf; extern cpuop_func_ce op_08c0_22_ff; extern cpuop_func_ce op_08d0_22_nf; extern cpuop_func_ce op_08d0_22_ff; extern cpuop_func_ce op_08d8_22_nf; extern cpuop_func_ce op_08d8_22_ff; extern cpuop_func_ce op_08e0_22_nf; extern cpuop_func_ce op_08e0_22_ff; extern cpuop_func_ce op_08e8_22_nf; extern cpuop_func_ce op_08e8_22_ff; extern cpuop_func_ce op_08f0_22_nf; extern cpuop_func_ce op_08f0_22_ff; extern cpuop_func_ce op_08f8_22_nf; extern cpuop_func_ce op_08f8_22_ff; extern cpuop_func_ce op_08f9_22_nf; extern cpuop_func_ce op_08f9_22_ff; extern cpuop_func_ce op_08fa_22_nf; extern cpuop_func_ce op_08fa_22_ff; extern cpuop_func_ce op_08fb_22_nf; extern cpuop_func_ce op_08fb_22_ff; extern cpuop_func_ce op_0a00_22_nf; extern cpuop_func_ce op_0a00_22_ff; extern cpuop_func_ce op_0a10_22_nf; extern cpuop_func_ce op_0a10_22_ff; extern cpuop_func_ce op_0a18_22_nf; extern cpuop_func_ce op_0a18_22_ff; extern cpuop_func_ce op_0a20_22_nf; extern cpuop_func_ce op_0a20_22_ff; extern cpuop_func_ce op_0a28_22_nf; extern cpuop_func_ce op_0a28_22_ff; extern cpuop_func_ce op_0a30_22_nf; extern cpuop_func_ce op_0a30_22_ff; extern cpuop_func_ce op_0a38_22_nf; extern cpuop_func_ce op_0a38_22_ff; extern cpuop_func_ce op_0a39_22_nf; extern cpuop_func_ce op_0a39_22_ff; extern cpuop_func_ce op_0a3c_22_nf; extern cpuop_func_ce op_0a3c_22_ff; extern cpuop_func_ce op_0a40_22_nf; extern cpuop_func_ce op_0a40_22_ff; extern cpuop_func_ce op_0a50_22_nf; extern cpuop_func_ce op_0a50_22_ff; extern cpuop_func_ce op_0a58_22_nf; extern cpuop_func_ce op_0a58_22_ff; extern cpuop_func_ce op_0a60_22_nf; extern cpuop_func_ce op_0a60_22_ff; extern cpuop_func_ce op_0a68_22_nf; extern cpuop_func_ce op_0a68_22_ff; extern cpuop_func_ce op_0a70_22_nf; extern cpuop_func_ce op_0a70_22_ff; extern cpuop_func_ce op_0a78_22_nf; extern cpuop_func_ce op_0a78_22_ff; extern cpuop_func_ce op_0a79_22_nf; extern cpuop_func_ce op_0a79_22_ff; extern cpuop_func_ce op_0a7c_22_nf; extern cpuop_func_ce op_0a7c_22_ff; extern cpuop_func_ce op_0a80_22_nf; extern cpuop_func_ce op_0a80_22_ff; extern cpuop_func_ce op_0a90_22_nf; extern cpuop_func_ce op_0a90_22_ff; extern cpuop_func_ce op_0a98_22_nf; extern cpuop_func_ce op_0a98_22_ff; extern cpuop_func_ce op_0aa0_22_nf; extern cpuop_func_ce op_0aa0_22_ff; extern cpuop_func_ce op_0aa8_22_nf; extern cpuop_func_ce op_0aa8_22_ff; extern cpuop_func_ce op_0ab0_22_nf; extern cpuop_func_ce op_0ab0_22_ff; extern cpuop_func_ce op_0ab8_22_nf; extern cpuop_func_ce op_0ab8_22_ff; extern cpuop_func_ce op_0ab9_22_nf; extern cpuop_func_ce op_0ab9_22_ff; extern cpuop_func_ce op_0ad0_22_nf; extern cpuop_func_ce op_0ad0_22_ff; extern cpuop_func_ce op_0ad8_22_nf; extern cpuop_func_ce op_0ad8_22_ff; extern cpuop_func_ce op_0ae0_22_nf; extern cpuop_func_ce op_0ae0_22_ff; extern cpuop_func_ce op_0ae8_22_nf; extern cpuop_func_ce op_0ae8_22_ff; extern cpuop_func_ce op_0af0_22_nf; extern cpuop_func_ce op_0af0_22_ff; extern cpuop_func_ce op_0af8_22_nf; extern cpuop_func_ce op_0af8_22_ff; extern cpuop_func_ce op_0af9_22_nf; extern cpuop_func_ce op_0af9_22_ff; extern cpuop_func_ce op_0c00_22_nf; extern cpuop_func_ce op_0c00_22_ff; extern cpuop_func_ce op_0c10_22_nf; extern cpuop_func_ce op_0c10_22_ff; extern cpuop_func_ce op_0c18_22_nf; extern cpuop_func_ce op_0c18_22_ff; extern cpuop_func_ce op_0c20_22_nf; extern cpuop_func_ce op_0c20_22_ff; extern cpuop_func_ce op_0c28_22_nf; extern cpuop_func_ce op_0c28_22_ff; extern cpuop_func_ce op_0c30_22_nf; extern cpuop_func_ce op_0c30_22_ff; extern cpuop_func_ce op_0c38_22_nf; extern cpuop_func_ce op_0c38_22_ff; extern cpuop_func_ce op_0c39_22_nf; extern cpuop_func_ce op_0c39_22_ff; extern cpuop_func_ce op_0c3a_22_nf; extern cpuop_func_ce op_0c3a_22_ff; extern cpuop_func_ce op_0c3b_22_nf; extern cpuop_func_ce op_0c3b_22_ff; extern cpuop_func_ce op_0c40_22_nf; extern cpuop_func_ce op_0c40_22_ff; extern cpuop_func_ce op_0c50_22_nf; extern cpuop_func_ce op_0c50_22_ff; extern cpuop_func_ce op_0c58_22_nf; extern cpuop_func_ce op_0c58_22_ff; extern cpuop_func_ce op_0c60_22_nf; extern cpuop_func_ce op_0c60_22_ff; extern cpuop_func_ce op_0c68_22_nf; extern cpuop_func_ce op_0c68_22_ff; extern cpuop_func_ce op_0c70_22_nf; extern cpuop_func_ce op_0c70_22_ff; extern cpuop_func_ce op_0c78_22_nf; extern cpuop_func_ce op_0c78_22_ff; extern cpuop_func_ce op_0c79_22_nf; extern cpuop_func_ce op_0c79_22_ff; extern cpuop_func_ce op_0c7a_22_nf; extern cpuop_func_ce op_0c7a_22_ff; extern cpuop_func_ce op_0c7b_22_nf; extern cpuop_func_ce op_0c7b_22_ff; extern cpuop_func_ce op_0c80_22_nf; extern cpuop_func_ce op_0c80_22_ff; extern cpuop_func_ce op_0c90_22_nf; extern cpuop_func_ce op_0c90_22_ff; extern cpuop_func_ce op_0c98_22_nf; extern cpuop_func_ce op_0c98_22_ff; extern cpuop_func_ce op_0ca0_22_nf; extern cpuop_func_ce op_0ca0_22_ff; extern cpuop_func_ce op_0ca8_22_nf; extern cpuop_func_ce op_0ca8_22_ff; extern cpuop_func_ce op_0cb0_22_nf; extern cpuop_func_ce op_0cb0_22_ff; extern cpuop_func_ce op_0cb8_22_nf; extern cpuop_func_ce op_0cb8_22_ff; extern cpuop_func_ce op_0cb9_22_nf; extern cpuop_func_ce op_0cb9_22_ff; extern cpuop_func_ce op_0cba_22_nf; extern cpuop_func_ce op_0cba_22_ff; extern cpuop_func_ce op_0cbb_22_nf; extern cpuop_func_ce op_0cbb_22_ff; extern cpuop_func_ce op_0cd0_22_nf; extern cpuop_func_ce op_0cd0_22_ff; extern cpuop_func_ce op_0cd8_22_nf; extern cpuop_func_ce op_0cd8_22_ff; extern cpuop_func_ce op_0ce0_22_nf; extern cpuop_func_ce op_0ce0_22_ff; extern cpuop_func_ce op_0ce8_22_nf; extern cpuop_func_ce op_0ce8_22_ff; extern cpuop_func_ce op_0cf0_22_nf; extern cpuop_func_ce op_0cf0_22_ff; extern cpuop_func_ce op_0cf8_22_nf; extern cpuop_func_ce op_0cf8_22_ff; extern cpuop_func_ce op_0cf9_22_nf; extern cpuop_func_ce op_0cf9_22_ff; extern cpuop_func_ce op_0cfc_22_nf; extern cpuop_func_ce op_0cfc_22_ff; extern cpuop_func_ce op_0e10_22_nf; extern cpuop_func_ce op_0e10_22_ff; extern cpuop_func_ce op_0e18_22_nf; extern cpuop_func_ce op_0e18_22_ff; extern cpuop_func_ce op_0e20_22_nf; extern cpuop_func_ce op_0e20_22_ff; extern cpuop_func_ce op_0e28_22_nf; extern cpuop_func_ce op_0e28_22_ff; extern cpuop_func_ce op_0e30_22_nf; extern cpuop_func_ce op_0e30_22_ff; extern cpuop_func_ce op_0e38_22_nf; extern cpuop_func_ce op_0e38_22_ff; extern cpuop_func_ce op_0e39_22_nf; extern cpuop_func_ce op_0e39_22_ff; extern cpuop_func_ce op_0e50_22_nf; extern cpuop_func_ce op_0e50_22_ff; extern cpuop_func_ce op_0e58_22_nf; extern cpuop_func_ce op_0e58_22_ff; extern cpuop_func_ce op_0e60_22_nf; extern cpuop_func_ce op_0e60_22_ff; extern cpuop_func_ce op_0e68_22_nf; extern cpuop_func_ce op_0e68_22_ff; extern cpuop_func_ce op_0e70_22_nf; extern cpuop_func_ce op_0e70_22_ff; extern cpuop_func_ce op_0e78_22_nf; extern cpuop_func_ce op_0e78_22_ff; extern cpuop_func_ce op_0e79_22_nf; extern cpuop_func_ce op_0e79_22_ff; extern cpuop_func_ce op_0e90_22_nf; extern cpuop_func_ce op_0e90_22_ff; extern cpuop_func_ce op_0e98_22_nf; extern cpuop_func_ce op_0e98_22_ff; extern cpuop_func_ce op_0ea0_22_nf; extern cpuop_func_ce op_0ea0_22_ff; extern cpuop_func_ce op_0ea8_22_nf; extern cpuop_func_ce op_0ea8_22_ff; extern cpuop_func_ce op_0eb0_22_nf; extern cpuop_func_ce op_0eb0_22_ff; extern cpuop_func_ce op_0eb8_22_nf; extern cpuop_func_ce op_0eb8_22_ff; extern cpuop_func_ce op_0eb9_22_nf; extern cpuop_func_ce op_0eb9_22_ff; extern cpuop_func_ce op_0ed0_22_nf; extern cpuop_func_ce op_0ed0_22_ff; extern cpuop_func_ce op_0ed8_22_nf; extern cpuop_func_ce op_0ed8_22_ff; extern cpuop_func_ce op_0ee0_22_nf; extern cpuop_func_ce op_0ee0_22_ff; extern cpuop_func_ce op_0ee8_22_nf; extern cpuop_func_ce op_0ee8_22_ff; extern cpuop_func_ce op_0ef0_22_nf; extern cpuop_func_ce op_0ef0_22_ff; extern cpuop_func_ce op_0ef8_22_nf; extern cpuop_func_ce op_0ef8_22_ff; extern cpuop_func_ce op_0ef9_22_nf; extern cpuop_func_ce op_0ef9_22_ff; extern cpuop_func_ce op_0efc_22_nf; extern cpuop_func_ce op_0efc_22_ff; extern cpuop_func_ce op_1000_22_nf; extern cpuop_func_ce op_1000_22_ff; extern cpuop_func_ce op_1010_22_nf; extern cpuop_func_ce op_1010_22_ff; extern cpuop_func_ce op_1018_22_nf; extern cpuop_func_ce op_1018_22_ff; extern cpuop_func_ce op_1020_22_nf; extern cpuop_func_ce op_1020_22_ff; extern cpuop_func_ce op_1028_22_nf; extern cpuop_func_ce op_1028_22_ff; extern cpuop_func_ce op_1030_22_nf; extern cpuop_func_ce op_1030_22_ff; extern cpuop_func_ce op_1038_22_nf; extern cpuop_func_ce op_1038_22_ff; extern cpuop_func_ce op_1039_22_nf; extern cpuop_func_ce op_1039_22_ff; extern cpuop_func_ce op_103a_22_nf; extern cpuop_func_ce op_103a_22_ff; extern cpuop_func_ce op_103b_22_nf; extern cpuop_func_ce op_103b_22_ff; extern cpuop_func_ce op_103c_22_nf; extern cpuop_func_ce op_103c_22_ff; extern cpuop_func_ce op_1080_22_nf; extern cpuop_func_ce op_1080_22_ff; extern cpuop_func_ce op_1090_22_nf; extern cpuop_func_ce op_1090_22_ff; extern cpuop_func_ce op_1098_22_nf; extern cpuop_func_ce op_1098_22_ff; extern cpuop_func_ce op_10a0_22_nf; extern cpuop_func_ce op_10a0_22_ff; extern cpuop_func_ce op_10a8_22_nf; extern cpuop_func_ce op_10a8_22_ff; extern cpuop_func_ce op_10b0_22_nf; extern cpuop_func_ce op_10b0_22_ff; extern cpuop_func_ce op_10b8_22_nf; extern cpuop_func_ce op_10b8_22_ff; extern cpuop_func_ce op_10b9_22_nf; extern cpuop_func_ce op_10b9_22_ff; extern cpuop_func_ce op_10ba_22_nf; extern cpuop_func_ce op_10ba_22_ff; extern cpuop_func_ce op_10bb_22_nf; extern cpuop_func_ce op_10bb_22_ff; extern cpuop_func_ce op_10bc_22_nf; extern cpuop_func_ce op_10bc_22_ff; extern cpuop_func_ce op_10c0_22_nf; extern cpuop_func_ce op_10c0_22_ff; extern cpuop_func_ce op_10d0_22_nf; extern cpuop_func_ce op_10d0_22_ff; extern cpuop_func_ce op_10d8_22_nf; extern cpuop_func_ce op_10d8_22_ff; extern cpuop_func_ce op_10e0_22_nf; extern cpuop_func_ce op_10e0_22_ff; extern cpuop_func_ce op_10e8_22_nf; extern cpuop_func_ce op_10e8_22_ff; extern cpuop_func_ce op_10f0_22_nf; extern cpuop_func_ce op_10f0_22_ff; extern cpuop_func_ce op_10f8_22_nf; extern cpuop_func_ce op_10f8_22_ff; extern cpuop_func_ce op_10f9_22_nf; extern cpuop_func_ce op_10f9_22_ff; extern cpuop_func_ce op_10fa_22_nf; extern cpuop_func_ce op_10fa_22_ff; extern cpuop_func_ce op_10fb_22_nf; extern cpuop_func_ce op_10fb_22_ff; extern cpuop_func_ce op_10fc_22_nf; extern cpuop_func_ce op_10fc_22_ff; extern cpuop_func_ce op_1100_22_nf; extern cpuop_func_ce op_1100_22_ff; extern cpuop_func_ce op_1110_22_nf; extern cpuop_func_ce op_1110_22_ff; extern cpuop_func_ce op_1118_22_nf; extern cpuop_func_ce op_1118_22_ff; extern cpuop_func_ce op_1120_22_nf; extern cpuop_func_ce op_1120_22_ff; extern cpuop_func_ce op_1128_22_nf; extern cpuop_func_ce op_1128_22_ff; extern cpuop_func_ce op_1130_22_nf; extern cpuop_func_ce op_1130_22_ff; extern cpuop_func_ce op_1138_22_nf; extern cpuop_func_ce op_1138_22_ff; extern cpuop_func_ce op_1139_22_nf; extern cpuop_func_ce op_1139_22_ff; extern cpuop_func_ce op_113a_22_nf; extern cpuop_func_ce op_113a_22_ff; extern cpuop_func_ce op_113b_22_nf; extern cpuop_func_ce op_113b_22_ff; extern cpuop_func_ce op_113c_22_nf; extern cpuop_func_ce op_113c_22_ff; extern cpuop_func_ce op_1140_22_nf; extern cpuop_func_ce op_1140_22_ff; extern cpuop_func_ce op_1150_22_nf; extern cpuop_func_ce op_1150_22_ff; extern cpuop_func_ce op_1158_22_nf; extern cpuop_func_ce op_1158_22_ff; extern cpuop_func_ce op_1160_22_nf; extern cpuop_func_ce op_1160_22_ff; extern cpuop_func_ce op_1168_22_nf; extern cpuop_func_ce op_1168_22_ff; extern cpuop_func_ce op_1170_22_nf; extern cpuop_func_ce op_1170_22_ff; extern cpuop_func_ce op_1178_22_nf; extern cpuop_func_ce op_1178_22_ff; extern cpuop_func_ce op_1179_22_nf; extern cpuop_func_ce op_1179_22_ff; extern cpuop_func_ce op_117a_22_nf; extern cpuop_func_ce op_117a_22_ff; extern cpuop_func_ce op_117b_22_nf; extern cpuop_func_ce op_117b_22_ff; extern cpuop_func_ce op_117c_22_nf; extern cpuop_func_ce op_117c_22_ff; extern cpuop_func_ce op_1180_22_nf; extern cpuop_func_ce op_1180_22_ff; extern cpuop_func_ce op_1190_22_nf; extern cpuop_func_ce op_1190_22_ff; extern cpuop_func_ce op_1198_22_nf; extern cpuop_func_ce op_1198_22_ff; extern cpuop_func_ce op_11a0_22_nf; extern cpuop_func_ce op_11a0_22_ff; extern cpuop_func_ce op_11a8_22_nf; extern cpuop_func_ce op_11a8_22_ff; extern cpuop_func_ce op_11b0_22_nf; extern cpuop_func_ce op_11b0_22_ff; extern cpuop_func_ce op_11b8_22_nf; extern cpuop_func_ce op_11b8_22_ff; extern cpuop_func_ce op_11b9_22_nf; extern cpuop_func_ce op_11b9_22_ff; extern cpuop_func_ce op_11ba_22_nf; extern cpuop_func_ce op_11ba_22_ff; extern cpuop_func_ce op_11bb_22_nf; extern cpuop_func_ce op_11bb_22_ff; extern cpuop_func_ce op_11bc_22_nf; extern cpuop_func_ce op_11bc_22_ff; extern cpuop_func_ce op_11c0_22_nf; extern cpuop_func_ce op_11c0_22_ff; extern cpuop_func_ce op_11d0_22_nf; extern cpuop_func_ce op_11d0_22_ff; extern cpuop_func_ce op_11d8_22_nf; extern cpuop_func_ce op_11d8_22_ff; extern cpuop_func_ce op_11e0_22_nf; extern cpuop_func_ce op_11e0_22_ff; extern cpuop_func_ce op_11e8_22_nf; extern cpuop_func_ce op_11e8_22_ff; extern cpuop_func_ce op_11f0_22_nf; extern cpuop_func_ce op_11f0_22_ff; extern cpuop_func_ce op_11f8_22_nf; extern cpuop_func_ce op_11f8_22_ff; extern cpuop_func_ce op_11f9_22_nf; extern cpuop_func_ce op_11f9_22_ff; extern cpuop_func_ce op_11fa_22_nf; extern cpuop_func_ce op_11fa_22_ff; extern cpuop_func_ce op_11fb_22_nf; extern cpuop_func_ce op_11fb_22_ff; extern cpuop_func_ce op_11fc_22_nf; extern cpuop_func_ce op_11fc_22_ff; extern cpuop_func_ce op_13c0_22_nf; extern cpuop_func_ce op_13c0_22_ff; extern cpuop_func_ce op_13d0_22_nf; extern cpuop_func_ce op_13d0_22_ff; extern cpuop_func_ce op_13d8_22_nf; extern cpuop_func_ce op_13d8_22_ff; extern cpuop_func_ce op_13e0_22_nf; extern cpuop_func_ce op_13e0_22_ff; extern cpuop_func_ce op_13e8_22_nf; extern cpuop_func_ce op_13e8_22_ff; extern cpuop_func_ce op_13f0_22_nf; extern cpuop_func_ce op_13f0_22_ff; extern cpuop_func_ce op_13f8_22_nf; extern cpuop_func_ce op_13f8_22_ff; extern cpuop_func_ce op_13f9_22_nf; extern cpuop_func_ce op_13f9_22_ff; extern cpuop_func_ce op_13fa_22_nf; extern cpuop_func_ce op_13fa_22_ff; extern cpuop_func_ce op_13fb_22_nf; extern cpuop_func_ce op_13fb_22_ff; extern cpuop_func_ce op_13fc_22_nf; extern cpuop_func_ce op_13fc_22_ff; extern cpuop_func_ce op_2000_22_nf; extern cpuop_func_ce op_2000_22_ff; extern cpuop_func_ce op_2008_22_nf; extern cpuop_func_ce op_2008_22_ff; extern cpuop_func_ce op_2010_22_nf; extern cpuop_func_ce op_2010_22_ff; extern cpuop_func_ce op_2018_22_nf; extern cpuop_func_ce op_2018_22_ff; extern cpuop_func_ce op_2020_22_nf; extern cpuop_func_ce op_2020_22_ff; extern cpuop_func_ce op_2028_22_nf; extern cpuop_func_ce op_2028_22_ff; extern cpuop_func_ce op_2030_22_nf; extern cpuop_func_ce op_2030_22_ff; extern cpuop_func_ce op_2038_22_nf; extern cpuop_func_ce op_2038_22_ff; extern cpuop_func_ce op_2039_22_nf; extern cpuop_func_ce op_2039_22_ff; extern cpuop_func_ce op_203a_22_nf; extern cpuop_func_ce op_203a_22_ff; extern cpuop_func_ce op_203b_22_nf; extern cpuop_func_ce op_203b_22_ff; extern cpuop_func_ce op_203c_22_nf; extern cpuop_func_ce op_203c_22_ff; extern cpuop_func_ce op_2040_22_nf; extern cpuop_func_ce op_2040_22_ff; extern cpuop_func_ce op_2048_22_nf; extern cpuop_func_ce op_2048_22_ff; extern cpuop_func_ce op_2050_22_nf; extern cpuop_func_ce op_2050_22_ff; extern cpuop_func_ce op_2058_22_nf; extern cpuop_func_ce op_2058_22_ff; extern cpuop_func_ce op_2060_22_nf; extern cpuop_func_ce op_2060_22_ff; extern cpuop_func_ce op_2068_22_nf; extern cpuop_func_ce op_2068_22_ff; extern cpuop_func_ce op_2070_22_nf; extern cpuop_func_ce op_2070_22_ff; extern cpuop_func_ce op_2078_22_nf; extern cpuop_func_ce op_2078_22_ff; extern cpuop_func_ce op_2079_22_nf; extern cpuop_func_ce op_2079_22_ff; extern cpuop_func_ce op_207a_22_nf; extern cpuop_func_ce op_207a_22_ff; extern cpuop_func_ce op_207b_22_nf; extern cpuop_func_ce op_207b_22_ff; extern cpuop_func_ce op_207c_22_nf; extern cpuop_func_ce op_207c_22_ff; extern cpuop_func_ce op_2080_22_nf; extern cpuop_func_ce op_2080_22_ff; extern cpuop_func_ce op_2088_22_nf; extern cpuop_func_ce op_2088_22_ff; extern cpuop_func_ce op_2090_22_nf; extern cpuop_func_ce op_2090_22_ff; extern cpuop_func_ce op_2098_22_nf; extern cpuop_func_ce op_2098_22_ff; extern cpuop_func_ce op_20a0_22_nf; extern cpuop_func_ce op_20a0_22_ff; extern cpuop_func_ce op_20a8_22_nf; extern cpuop_func_ce op_20a8_22_ff; extern cpuop_func_ce op_20b0_22_nf; extern cpuop_func_ce op_20b0_22_ff; extern cpuop_func_ce op_20b8_22_nf; extern cpuop_func_ce op_20b8_22_ff; extern cpuop_func_ce op_20b9_22_nf; extern cpuop_func_ce op_20b9_22_ff; extern cpuop_func_ce op_20ba_22_nf; extern cpuop_func_ce op_20ba_22_ff; extern cpuop_func_ce op_20bb_22_nf; extern cpuop_func_ce op_20bb_22_ff; extern cpuop_func_ce op_20bc_22_nf; extern cpuop_func_ce op_20bc_22_ff; extern cpuop_func_ce op_20c0_22_nf; extern cpuop_func_ce op_20c0_22_ff; extern cpuop_func_ce op_20c8_22_nf; extern cpuop_func_ce op_20c8_22_ff; extern cpuop_func_ce op_20d0_22_nf; extern cpuop_func_ce op_20d0_22_ff; extern cpuop_func_ce op_20d8_22_nf; extern cpuop_func_ce op_20d8_22_ff; extern cpuop_func_ce op_20e0_22_nf; extern cpuop_func_ce op_20e0_22_ff; extern cpuop_func_ce op_20e8_22_nf; extern cpuop_func_ce op_20e8_22_ff; extern cpuop_func_ce op_20f0_22_nf; extern cpuop_func_ce op_20f0_22_ff; extern cpuop_func_ce op_20f8_22_nf; extern cpuop_func_ce op_20f8_22_ff; extern cpuop_func_ce op_20f9_22_nf; extern cpuop_func_ce op_20f9_22_ff; extern cpuop_func_ce op_20fa_22_nf; extern cpuop_func_ce op_20fa_22_ff; extern cpuop_func_ce op_20fb_22_nf; extern cpuop_func_ce op_20fb_22_ff; extern cpuop_func_ce op_20fc_22_nf; extern cpuop_func_ce op_20fc_22_ff; extern cpuop_func_ce op_2100_22_nf; extern cpuop_func_ce op_2100_22_ff; extern cpuop_func_ce op_2108_22_nf; extern cpuop_func_ce op_2108_22_ff; extern cpuop_func_ce op_2110_22_nf; extern cpuop_func_ce op_2110_22_ff; extern cpuop_func_ce op_2118_22_nf; extern cpuop_func_ce op_2118_22_ff; extern cpuop_func_ce op_2120_22_nf; extern cpuop_func_ce op_2120_22_ff; extern cpuop_func_ce op_2128_22_nf; extern cpuop_func_ce op_2128_22_ff; extern cpuop_func_ce op_2130_22_nf; extern cpuop_func_ce op_2130_22_ff; extern cpuop_func_ce op_2138_22_nf; extern cpuop_func_ce op_2138_22_ff; extern cpuop_func_ce op_2139_22_nf; extern cpuop_func_ce op_2139_22_ff; extern cpuop_func_ce op_213a_22_nf; extern cpuop_func_ce op_213a_22_ff; extern cpuop_func_ce op_213b_22_nf; extern cpuop_func_ce op_213b_22_ff; extern cpuop_func_ce op_213c_22_nf; extern cpuop_func_ce op_213c_22_ff; extern cpuop_func_ce op_2140_22_nf; extern cpuop_func_ce op_2140_22_ff; extern cpuop_func_ce op_2148_22_nf; extern cpuop_func_ce op_2148_22_ff; extern cpuop_func_ce op_2150_22_nf; extern cpuop_func_ce op_2150_22_ff; extern cpuop_func_ce op_2158_22_nf; extern cpuop_func_ce op_2158_22_ff; extern cpuop_func_ce op_2160_22_nf; extern cpuop_func_ce op_2160_22_ff; extern cpuop_func_ce op_2168_22_nf; extern cpuop_func_ce op_2168_22_ff; extern cpuop_func_ce op_2170_22_nf; extern cpuop_func_ce op_2170_22_ff; extern cpuop_func_ce op_2178_22_nf; extern cpuop_func_ce op_2178_22_ff; extern cpuop_func_ce op_2179_22_nf; extern cpuop_func_ce op_2179_22_ff; extern cpuop_func_ce op_217a_22_nf; extern cpuop_func_ce op_217a_22_ff; extern cpuop_func_ce op_217b_22_nf; extern cpuop_func_ce op_217b_22_ff; extern cpuop_func_ce op_217c_22_nf; extern cpuop_func_ce op_217c_22_ff; extern cpuop_func_ce op_2180_22_nf; extern cpuop_func_ce op_2180_22_ff; extern cpuop_func_ce op_2188_22_nf; extern cpuop_func_ce op_2188_22_ff; extern cpuop_func_ce op_2190_22_nf; extern cpuop_func_ce op_2190_22_ff; extern cpuop_func_ce op_2198_22_nf; extern cpuop_func_ce op_2198_22_ff; extern cpuop_func_ce op_21a0_22_nf; extern cpuop_func_ce op_21a0_22_ff; extern cpuop_func_ce op_21a8_22_nf; extern cpuop_func_ce op_21a8_22_ff; extern cpuop_func_ce op_21b0_22_nf; extern cpuop_func_ce op_21b0_22_ff; extern cpuop_func_ce op_21b8_22_nf; extern cpuop_func_ce op_21b8_22_ff; extern cpuop_func_ce op_21b9_22_nf; extern cpuop_func_ce op_21b9_22_ff; extern cpuop_func_ce op_21ba_22_nf; extern cpuop_func_ce op_21ba_22_ff; extern cpuop_func_ce op_21bb_22_nf; extern cpuop_func_ce op_21bb_22_ff; extern cpuop_func_ce op_21bc_22_nf; extern cpuop_func_ce op_21bc_22_ff; extern cpuop_func_ce op_21c0_22_nf; extern cpuop_func_ce op_21c0_22_ff; extern cpuop_func_ce op_21c8_22_nf; extern cpuop_func_ce op_21c8_22_ff; extern cpuop_func_ce op_21d0_22_nf; extern cpuop_func_ce op_21d0_22_ff; extern cpuop_func_ce op_21d8_22_nf; extern cpuop_func_ce op_21d8_22_ff; extern cpuop_func_ce op_21e0_22_nf; extern cpuop_func_ce op_21e0_22_ff; extern cpuop_func_ce op_21e8_22_nf; extern cpuop_func_ce op_21e8_22_ff; extern cpuop_func_ce op_21f0_22_nf; extern cpuop_func_ce op_21f0_22_ff; extern cpuop_func_ce op_21f8_22_nf; extern cpuop_func_ce op_21f8_22_ff; extern cpuop_func_ce op_21f9_22_nf; extern cpuop_func_ce op_21f9_22_ff; extern cpuop_func_ce op_21fa_22_nf; extern cpuop_func_ce op_21fa_22_ff; extern cpuop_func_ce op_21fb_22_nf; extern cpuop_func_ce op_21fb_22_ff; extern cpuop_func_ce op_21fc_22_nf; extern cpuop_func_ce op_21fc_22_ff; extern cpuop_func_ce op_23c0_22_nf; extern cpuop_func_ce op_23c0_22_ff; extern cpuop_func_ce op_23c8_22_nf; extern cpuop_func_ce op_23c8_22_ff; extern cpuop_func_ce op_23d0_22_nf; extern cpuop_func_ce op_23d0_22_ff; extern cpuop_func_ce op_23d8_22_nf; extern cpuop_func_ce op_23d8_22_ff; extern cpuop_func_ce op_23e0_22_nf; extern cpuop_func_ce op_23e0_22_ff; extern cpuop_func_ce op_23e8_22_nf; extern cpuop_func_ce op_23e8_22_ff; extern cpuop_func_ce op_23f0_22_nf; extern cpuop_func_ce op_23f0_22_ff; extern cpuop_func_ce op_23f8_22_nf; extern cpuop_func_ce op_23f8_22_ff; extern cpuop_func_ce op_23f9_22_nf; extern cpuop_func_ce op_23f9_22_ff; extern cpuop_func_ce op_23fa_22_nf; extern cpuop_func_ce op_23fa_22_ff; extern cpuop_func_ce op_23fb_22_nf; extern cpuop_func_ce op_23fb_22_ff; extern cpuop_func_ce op_23fc_22_nf; extern cpuop_func_ce op_23fc_22_ff; extern cpuop_func_ce op_3000_22_nf; extern cpuop_func_ce op_3000_22_ff; extern cpuop_func_ce op_3008_22_nf; extern cpuop_func_ce op_3008_22_ff; extern cpuop_func_ce op_3010_22_nf; extern cpuop_func_ce op_3010_22_ff; extern cpuop_func_ce op_3018_22_nf; extern cpuop_func_ce op_3018_22_ff; extern cpuop_func_ce op_3020_22_nf; extern cpuop_func_ce op_3020_22_ff; extern cpuop_func_ce op_3028_22_nf; extern cpuop_func_ce op_3028_22_ff; extern cpuop_func_ce op_3030_22_nf; extern cpuop_func_ce op_3030_22_ff; extern cpuop_func_ce op_3038_22_nf; extern cpuop_func_ce op_3038_22_ff; extern cpuop_func_ce op_3039_22_nf; extern cpuop_func_ce op_3039_22_ff; extern cpuop_func_ce op_303a_22_nf; extern cpuop_func_ce op_303a_22_ff; extern cpuop_func_ce op_303b_22_nf; extern cpuop_func_ce op_303b_22_ff; extern cpuop_func_ce op_303c_22_nf; extern cpuop_func_ce op_303c_22_ff; extern cpuop_func_ce op_3040_22_nf; extern cpuop_func_ce op_3040_22_ff; extern cpuop_func_ce op_3048_22_nf; extern cpuop_func_ce op_3048_22_ff; extern cpuop_func_ce op_3050_22_nf; extern cpuop_func_ce op_3050_22_ff; extern cpuop_func_ce op_3058_22_nf; extern cpuop_func_ce op_3058_22_ff; extern cpuop_func_ce op_3060_22_nf; extern cpuop_func_ce op_3060_22_ff; extern cpuop_func_ce op_3068_22_nf; extern cpuop_func_ce op_3068_22_ff; extern cpuop_func_ce op_3070_22_nf; extern cpuop_func_ce op_3070_22_ff; extern cpuop_func_ce op_3078_22_nf; extern cpuop_func_ce op_3078_22_ff; extern cpuop_func_ce op_3079_22_nf; extern cpuop_func_ce op_3079_22_ff; extern cpuop_func_ce op_307a_22_nf; extern cpuop_func_ce op_307a_22_ff; extern cpuop_func_ce op_307b_22_nf; extern cpuop_func_ce op_307b_22_ff; extern cpuop_func_ce op_307c_22_nf; extern cpuop_func_ce op_307c_22_ff; extern cpuop_func_ce op_3080_22_nf; extern cpuop_func_ce op_3080_22_ff; extern cpuop_func_ce op_3088_22_nf; extern cpuop_func_ce op_3088_22_ff; extern cpuop_func_ce op_3090_22_nf; extern cpuop_func_ce op_3090_22_ff; extern cpuop_func_ce op_3098_22_nf; extern cpuop_func_ce op_3098_22_ff; extern cpuop_func_ce op_30a0_22_nf; extern cpuop_func_ce op_30a0_22_ff; extern cpuop_func_ce op_30a8_22_nf; extern cpuop_func_ce op_30a8_22_ff; extern cpuop_func_ce op_30b0_22_nf; extern cpuop_func_ce op_30b0_22_ff; extern cpuop_func_ce op_30b8_22_nf; extern cpuop_func_ce op_30b8_22_ff; extern cpuop_func_ce op_30b9_22_nf; extern cpuop_func_ce op_30b9_22_ff; extern cpuop_func_ce op_30ba_22_nf; extern cpuop_func_ce op_30ba_22_ff; extern cpuop_func_ce op_30bb_22_nf; extern cpuop_func_ce op_30bb_22_ff; extern cpuop_func_ce op_30bc_22_nf; extern cpuop_func_ce op_30bc_22_ff; extern cpuop_func_ce op_30c0_22_nf; extern cpuop_func_ce op_30c0_22_ff; extern cpuop_func_ce op_30c8_22_nf; extern cpuop_func_ce op_30c8_22_ff; extern cpuop_func_ce op_30d0_22_nf; extern cpuop_func_ce op_30d0_22_ff; extern cpuop_func_ce op_30d8_22_nf; extern cpuop_func_ce op_30d8_22_ff; extern cpuop_func_ce op_30e0_22_nf; extern cpuop_func_ce op_30e0_22_ff; extern cpuop_func_ce op_30e8_22_nf; extern cpuop_func_ce op_30e8_22_ff; extern cpuop_func_ce op_30f0_22_nf; extern cpuop_func_ce op_30f0_22_ff; extern cpuop_func_ce op_30f8_22_nf; extern cpuop_func_ce op_30f8_22_ff; extern cpuop_func_ce op_30f9_22_nf; extern cpuop_func_ce op_30f9_22_ff; extern cpuop_func_ce op_30fa_22_nf; extern cpuop_func_ce op_30fa_22_ff; extern cpuop_func_ce op_30fb_22_nf; extern cpuop_func_ce op_30fb_22_ff; extern cpuop_func_ce op_30fc_22_nf; extern cpuop_func_ce op_30fc_22_ff; extern cpuop_func_ce op_3100_22_nf; extern cpuop_func_ce op_3100_22_ff; extern cpuop_func_ce op_3108_22_nf; extern cpuop_func_ce op_3108_22_ff; extern cpuop_func_ce op_3110_22_nf; extern cpuop_func_ce op_3110_22_ff; extern cpuop_func_ce op_3118_22_nf; extern cpuop_func_ce op_3118_22_ff; extern cpuop_func_ce op_3120_22_nf; extern cpuop_func_ce op_3120_22_ff; extern cpuop_func_ce op_3128_22_nf; extern cpuop_func_ce op_3128_22_ff; extern cpuop_func_ce op_3130_22_nf; extern cpuop_func_ce op_3130_22_ff; extern cpuop_func_ce op_3138_22_nf; extern cpuop_func_ce op_3138_22_ff; extern cpuop_func_ce op_3139_22_nf; extern cpuop_func_ce op_3139_22_ff; extern cpuop_func_ce op_313a_22_nf; extern cpuop_func_ce op_313a_22_ff; extern cpuop_func_ce op_313b_22_nf; extern cpuop_func_ce op_313b_22_ff; extern cpuop_func_ce op_313c_22_nf; extern cpuop_func_ce op_313c_22_ff; extern cpuop_func_ce op_3140_22_nf; extern cpuop_func_ce op_3140_22_ff; extern cpuop_func_ce op_3148_22_nf; extern cpuop_func_ce op_3148_22_ff; extern cpuop_func_ce op_3150_22_nf; extern cpuop_func_ce op_3150_22_ff; extern cpuop_func_ce op_3158_22_nf; extern cpuop_func_ce op_3158_22_ff; extern cpuop_func_ce op_3160_22_nf; extern cpuop_func_ce op_3160_22_ff; extern cpuop_func_ce op_3168_22_nf; extern cpuop_func_ce op_3168_22_ff; extern cpuop_func_ce op_3170_22_nf; extern cpuop_func_ce op_3170_22_ff; extern cpuop_func_ce op_3178_22_nf; extern cpuop_func_ce op_3178_22_ff; extern cpuop_func_ce op_3179_22_nf; extern cpuop_func_ce op_3179_22_ff; extern cpuop_func_ce op_317a_22_nf; extern cpuop_func_ce op_317a_22_ff; extern cpuop_func_ce op_317b_22_nf; extern cpuop_func_ce op_317b_22_ff; extern cpuop_func_ce op_317c_22_nf; extern cpuop_func_ce op_317c_22_ff; extern cpuop_func_ce op_3180_22_nf; extern cpuop_func_ce op_3180_22_ff; extern cpuop_func_ce op_3188_22_nf; extern cpuop_func_ce op_3188_22_ff; extern cpuop_func_ce op_3190_22_nf; extern cpuop_func_ce op_3190_22_ff; extern cpuop_func_ce op_3198_22_nf; extern cpuop_func_ce op_3198_22_ff; extern cpuop_func_ce op_31a0_22_nf; extern cpuop_func_ce op_31a0_22_ff; extern cpuop_func_ce op_31a8_22_nf; extern cpuop_func_ce op_31a8_22_ff; extern cpuop_func_ce op_31b0_22_nf; extern cpuop_func_ce op_31b0_22_ff; extern cpuop_func_ce op_31b8_22_nf; extern cpuop_func_ce op_31b8_22_ff; extern cpuop_func_ce op_31b9_22_nf; extern cpuop_func_ce op_31b9_22_ff; extern cpuop_func_ce op_31ba_22_nf; extern cpuop_func_ce op_31ba_22_ff; extern cpuop_func_ce op_31bb_22_nf; extern cpuop_func_ce op_31bb_22_ff; extern cpuop_func_ce op_31bc_22_nf; extern cpuop_func_ce op_31bc_22_ff; extern cpuop_func_ce op_31c0_22_nf; extern cpuop_func_ce op_31c0_22_ff; extern cpuop_func_ce op_31c8_22_nf; extern cpuop_func_ce op_31c8_22_ff; extern cpuop_func_ce op_31d0_22_nf; extern cpuop_func_ce op_31d0_22_ff; extern cpuop_func_ce op_31d8_22_nf; extern cpuop_func_ce op_31d8_22_ff; extern cpuop_func_ce op_31e0_22_nf; extern cpuop_func_ce op_31e0_22_ff; extern cpuop_func_ce op_31e8_22_nf; extern cpuop_func_ce op_31e8_22_ff; extern cpuop_func_ce op_31f0_22_nf; extern cpuop_func_ce op_31f0_22_ff; extern cpuop_func_ce op_31f8_22_nf; extern cpuop_func_ce op_31f8_22_ff; extern cpuop_func_ce op_31f9_22_nf; extern cpuop_func_ce op_31f9_22_ff; extern cpuop_func_ce op_31fa_22_nf; extern cpuop_func_ce op_31fa_22_ff; extern cpuop_func_ce op_31fb_22_nf; extern cpuop_func_ce op_31fb_22_ff; extern cpuop_func_ce op_31fc_22_nf; extern cpuop_func_ce op_31fc_22_ff; extern cpuop_func_ce op_33c0_22_nf; extern cpuop_func_ce op_33c0_22_ff; extern cpuop_func_ce op_33c8_22_nf; extern cpuop_func_ce op_33c8_22_ff; extern cpuop_func_ce op_33d0_22_nf; extern cpuop_func_ce op_33d0_22_ff; extern cpuop_func_ce op_33d8_22_nf; extern cpuop_func_ce op_33d8_22_ff; extern cpuop_func_ce op_33e0_22_nf; extern cpuop_func_ce op_33e0_22_ff; extern cpuop_func_ce op_33e8_22_nf; extern cpuop_func_ce op_33e8_22_ff; extern cpuop_func_ce op_33f0_22_nf; extern cpuop_func_ce op_33f0_22_ff; extern cpuop_func_ce op_33f8_22_nf; extern cpuop_func_ce op_33f8_22_ff; extern cpuop_func_ce op_33f9_22_nf; extern cpuop_func_ce op_33f9_22_ff; extern cpuop_func_ce op_33fa_22_nf; extern cpuop_func_ce op_33fa_22_ff; extern cpuop_func_ce op_33fb_22_nf; extern cpuop_func_ce op_33fb_22_ff; extern cpuop_func_ce op_33fc_22_nf; extern cpuop_func_ce op_33fc_22_ff; extern cpuop_func_ce op_4000_22_nf; extern cpuop_func_ce op_4000_22_ff; extern cpuop_func_ce op_4010_22_nf; extern cpuop_func_ce op_4010_22_ff; extern cpuop_func_ce op_4018_22_nf; extern cpuop_func_ce op_4018_22_ff; extern cpuop_func_ce op_4020_22_nf; extern cpuop_func_ce op_4020_22_ff; extern cpuop_func_ce op_4028_22_nf; extern cpuop_func_ce op_4028_22_ff; extern cpuop_func_ce op_4030_22_nf; extern cpuop_func_ce op_4030_22_ff; extern cpuop_func_ce op_4038_22_nf; extern cpuop_func_ce op_4038_22_ff; extern cpuop_func_ce op_4039_22_nf; extern cpuop_func_ce op_4039_22_ff; extern cpuop_func_ce op_4040_22_nf; extern cpuop_func_ce op_4040_22_ff; extern cpuop_func_ce op_4050_22_nf; extern cpuop_func_ce op_4050_22_ff; extern cpuop_func_ce op_4058_22_nf; extern cpuop_func_ce op_4058_22_ff; extern cpuop_func_ce op_4060_22_nf; extern cpuop_func_ce op_4060_22_ff; extern cpuop_func_ce op_4068_22_nf; extern cpuop_func_ce op_4068_22_ff; extern cpuop_func_ce op_4070_22_nf; extern cpuop_func_ce op_4070_22_ff; extern cpuop_func_ce op_4078_22_nf; extern cpuop_func_ce op_4078_22_ff; extern cpuop_func_ce op_4079_22_nf; extern cpuop_func_ce op_4079_22_ff; extern cpuop_func_ce op_4080_22_nf; extern cpuop_func_ce op_4080_22_ff; extern cpuop_func_ce op_4090_22_nf; extern cpuop_func_ce op_4090_22_ff; extern cpuop_func_ce op_4098_22_nf; extern cpuop_func_ce op_4098_22_ff; extern cpuop_func_ce op_40a0_22_nf; extern cpuop_func_ce op_40a0_22_ff; extern cpuop_func_ce op_40a8_22_nf; extern cpuop_func_ce op_40a8_22_ff; extern cpuop_func_ce op_40b0_22_nf; extern cpuop_func_ce op_40b0_22_ff; extern cpuop_func_ce op_40b8_22_nf; extern cpuop_func_ce op_40b8_22_ff; extern cpuop_func_ce op_40b9_22_nf; extern cpuop_func_ce op_40b9_22_ff; extern cpuop_func_ce op_40c0_22_nf; extern cpuop_func_ce op_40c0_22_ff; extern cpuop_func_ce op_40d0_22_nf; extern cpuop_func_ce op_40d0_22_ff; extern cpuop_func_ce op_40d8_22_nf; extern cpuop_func_ce op_40d8_22_ff; extern cpuop_func_ce op_40e0_22_nf; extern cpuop_func_ce op_40e0_22_ff; extern cpuop_func_ce op_40e8_22_nf; extern cpuop_func_ce op_40e8_22_ff; extern cpuop_func_ce op_40f0_22_nf; extern cpuop_func_ce op_40f0_22_ff; extern cpuop_func_ce op_40f8_22_nf; extern cpuop_func_ce op_40f8_22_ff; extern cpuop_func_ce op_40f9_22_nf; extern cpuop_func_ce op_40f9_22_ff; extern cpuop_func_ce op_4100_22_nf; extern cpuop_func_ce op_4100_22_ff; extern cpuop_func_ce op_4110_22_nf; extern cpuop_func_ce op_4110_22_ff; extern cpuop_func_ce op_4118_22_nf; extern cpuop_func_ce op_4118_22_ff; extern cpuop_func_ce op_4120_22_nf; extern cpuop_func_ce op_4120_22_ff; extern cpuop_func_ce op_4128_22_nf; extern cpuop_func_ce op_4128_22_ff; extern cpuop_func_ce op_4130_22_nf; extern cpuop_func_ce op_4130_22_ff; extern cpuop_func_ce op_4138_22_nf; extern cpuop_func_ce op_4138_22_ff; extern cpuop_func_ce op_4139_22_nf; extern cpuop_func_ce op_4139_22_ff; extern cpuop_func_ce op_413a_22_nf; extern cpuop_func_ce op_413a_22_ff; extern cpuop_func_ce op_413b_22_nf; extern cpuop_func_ce op_413b_22_ff; extern cpuop_func_ce op_413c_22_nf; extern cpuop_func_ce op_413c_22_ff; extern cpuop_func_ce op_4180_22_nf; extern cpuop_func_ce op_4180_22_ff; extern cpuop_func_ce op_4190_22_nf; extern cpuop_func_ce op_4190_22_ff; extern cpuop_func_ce op_4198_22_nf; extern cpuop_func_ce op_4198_22_ff; extern cpuop_func_ce op_41a0_22_nf; extern cpuop_func_ce op_41a0_22_ff; extern cpuop_func_ce op_41a8_22_nf; extern cpuop_func_ce op_41a8_22_ff; extern cpuop_func_ce op_41b0_22_nf; extern cpuop_func_ce op_41b0_22_ff; extern cpuop_func_ce op_41b8_22_nf; extern cpuop_func_ce op_41b8_22_ff; extern cpuop_func_ce op_41b9_22_nf; extern cpuop_func_ce op_41b9_22_ff; extern cpuop_func_ce op_41ba_22_nf; extern cpuop_func_ce op_41ba_22_ff; extern cpuop_func_ce op_41bb_22_nf; extern cpuop_func_ce op_41bb_22_ff; extern cpuop_func_ce op_41bc_22_nf; extern cpuop_func_ce op_41bc_22_ff; extern cpuop_func_ce op_41d0_22_nf; extern cpuop_func_ce op_41d0_22_ff; extern cpuop_func_ce op_41e8_22_nf; extern cpuop_func_ce op_41e8_22_ff; extern cpuop_func_ce op_41f0_22_nf; extern cpuop_func_ce op_41f0_22_ff; extern cpuop_func_ce op_41f8_22_nf; extern cpuop_func_ce op_41f8_22_ff; extern cpuop_func_ce op_41f9_22_nf; extern cpuop_func_ce op_41f9_22_ff; extern cpuop_func_ce op_41fa_22_nf; extern cpuop_func_ce op_41fa_22_ff; extern cpuop_func_ce op_41fb_22_nf; extern cpuop_func_ce op_41fb_22_ff; extern cpuop_func_ce op_4200_22_nf; extern cpuop_func_ce op_4200_22_ff; extern cpuop_func_ce op_4210_22_nf; extern cpuop_func_ce op_4210_22_ff; extern cpuop_func_ce op_4218_22_nf; extern cpuop_func_ce op_4218_22_ff; extern cpuop_func_ce op_4220_22_nf; extern cpuop_func_ce op_4220_22_ff; extern cpuop_func_ce op_4228_22_nf; extern cpuop_func_ce op_4228_22_ff; extern cpuop_func_ce op_4230_22_nf; extern cpuop_func_ce op_4230_22_ff; extern cpuop_func_ce op_4238_22_nf; extern cpuop_func_ce op_4238_22_ff; extern cpuop_func_ce op_4239_22_nf; extern cpuop_func_ce op_4239_22_ff; extern cpuop_func_ce op_4240_22_nf; extern cpuop_func_ce op_4240_22_ff; extern cpuop_func_ce op_4250_22_nf; extern cpuop_func_ce op_4250_22_ff; extern cpuop_func_ce op_4258_22_nf; extern cpuop_func_ce op_4258_22_ff; extern cpuop_func_ce op_4260_22_nf; extern cpuop_func_ce op_4260_22_ff; extern cpuop_func_ce op_4268_22_nf; extern cpuop_func_ce op_4268_22_ff; extern cpuop_func_ce op_4270_22_nf; extern cpuop_func_ce op_4270_22_ff; extern cpuop_func_ce op_4278_22_nf; extern cpuop_func_ce op_4278_22_ff; extern cpuop_func_ce op_4279_22_nf; extern cpuop_func_ce op_4279_22_ff; extern cpuop_func_ce op_4280_22_nf; extern cpuop_func_ce op_4280_22_ff; extern cpuop_func_ce op_4290_22_nf; extern cpuop_func_ce op_4290_22_ff; extern cpuop_func_ce op_4298_22_nf; extern cpuop_func_ce op_4298_22_ff; extern cpuop_func_ce op_42a0_22_nf; extern cpuop_func_ce op_42a0_22_ff; extern cpuop_func_ce op_42a8_22_nf; extern cpuop_func_ce op_42a8_22_ff; extern cpuop_func_ce op_42b0_22_nf; extern cpuop_func_ce op_42b0_22_ff; extern cpuop_func_ce op_42b8_22_nf; extern cpuop_func_ce op_42b8_22_ff; extern cpuop_func_ce op_42b9_22_nf; extern cpuop_func_ce op_42b9_22_ff; extern cpuop_func_ce op_42c0_22_nf; extern cpuop_func_ce op_42c0_22_ff; extern cpuop_func_ce op_42d0_22_nf; extern cpuop_func_ce op_42d0_22_ff; extern cpuop_func_ce op_42d8_22_nf; extern cpuop_func_ce op_42d8_22_ff; extern cpuop_func_ce op_42e0_22_nf; extern cpuop_func_ce op_42e0_22_ff; extern cpuop_func_ce op_42e8_22_nf; extern cpuop_func_ce op_42e8_22_ff; extern cpuop_func_ce op_42f0_22_nf; extern cpuop_func_ce op_42f0_22_ff; extern cpuop_func_ce op_42f8_22_nf; extern cpuop_func_ce op_42f8_22_ff; extern cpuop_func_ce op_42f9_22_nf; extern cpuop_func_ce op_42f9_22_ff; extern cpuop_func_ce op_4400_22_nf; extern cpuop_func_ce op_4400_22_ff; extern cpuop_func_ce op_4410_22_nf; extern cpuop_func_ce op_4410_22_ff; extern cpuop_func_ce op_4418_22_nf; extern cpuop_func_ce op_4418_22_ff; extern cpuop_func_ce op_4420_22_nf; extern cpuop_func_ce op_4420_22_ff; extern cpuop_func_ce op_4428_22_nf; extern cpuop_func_ce op_4428_22_ff; extern cpuop_func_ce op_4430_22_nf; extern cpuop_func_ce op_4430_22_ff; extern cpuop_func_ce op_4438_22_nf; extern cpuop_func_ce op_4438_22_ff; extern cpuop_func_ce op_4439_22_nf; extern cpuop_func_ce op_4439_22_ff; extern cpuop_func_ce op_4440_22_nf; extern cpuop_func_ce op_4440_22_ff; extern cpuop_func_ce op_4450_22_nf; extern cpuop_func_ce op_4450_22_ff; extern cpuop_func_ce op_4458_22_nf; extern cpuop_func_ce op_4458_22_ff; extern cpuop_func_ce op_4460_22_nf; extern cpuop_func_ce op_4460_22_ff; extern cpuop_func_ce op_4468_22_nf; extern cpuop_func_ce op_4468_22_ff; extern cpuop_func_ce op_4470_22_nf; extern cpuop_func_ce op_4470_22_ff; extern cpuop_func_ce op_4478_22_nf; extern cpuop_func_ce op_4478_22_ff; extern cpuop_func_ce op_4479_22_nf; extern cpuop_func_ce op_4479_22_ff; extern cpuop_func_ce op_4480_22_nf; extern cpuop_func_ce op_4480_22_ff; extern cpuop_func_ce op_4490_22_nf; extern cpuop_func_ce op_4490_22_ff; extern cpuop_func_ce op_4498_22_nf; extern cpuop_func_ce op_4498_22_ff; extern cpuop_func_ce op_44a0_22_nf; extern cpuop_func_ce op_44a0_22_ff; extern cpuop_func_ce op_44a8_22_nf; extern cpuop_func_ce op_44a8_22_ff; extern cpuop_func_ce op_44b0_22_nf; extern cpuop_func_ce op_44b0_22_ff; extern cpuop_func_ce op_44b8_22_nf; extern cpuop_func_ce op_44b8_22_ff; extern cpuop_func_ce op_44b9_22_nf; extern cpuop_func_ce op_44b9_22_ff; extern cpuop_func_ce op_44c0_22_nf; extern cpuop_func_ce op_44c0_22_ff; extern cpuop_func_ce op_44d0_22_nf; extern cpuop_func_ce op_44d0_22_ff; extern cpuop_func_ce op_44d8_22_nf; extern cpuop_func_ce op_44d8_22_ff; extern cpuop_func_ce op_44e0_22_nf; extern cpuop_func_ce op_44e0_22_ff; extern cpuop_func_ce op_44e8_22_nf; extern cpuop_func_ce op_44e8_22_ff; extern cpuop_func_ce op_44f0_22_nf; extern cpuop_func_ce op_44f0_22_ff; extern cpuop_func_ce op_44f8_22_nf; extern cpuop_func_ce op_44f8_22_ff; extern cpuop_func_ce op_44f9_22_nf; extern cpuop_func_ce op_44f9_22_ff; extern cpuop_func_ce op_44fa_22_nf; extern cpuop_func_ce op_44fa_22_ff; extern cpuop_func_ce op_44fb_22_nf; extern cpuop_func_ce op_44fb_22_ff; extern cpuop_func_ce op_44fc_22_nf; extern cpuop_func_ce op_44fc_22_ff; extern cpuop_func_ce op_4600_22_nf; extern cpuop_func_ce op_4600_22_ff; extern cpuop_func_ce op_4610_22_nf; extern cpuop_func_ce op_4610_22_ff; extern cpuop_func_ce op_4618_22_nf; extern cpuop_func_ce op_4618_22_ff; extern cpuop_func_ce op_4620_22_nf; extern cpuop_func_ce op_4620_22_ff; extern cpuop_func_ce op_4628_22_nf; extern cpuop_func_ce op_4628_22_ff; extern cpuop_func_ce op_4630_22_nf; extern cpuop_func_ce op_4630_22_ff; extern cpuop_func_ce op_4638_22_nf; extern cpuop_func_ce op_4638_22_ff; extern cpuop_func_ce op_4639_22_nf; extern cpuop_func_ce op_4639_22_ff; extern cpuop_func_ce op_4640_22_nf; extern cpuop_func_ce op_4640_22_ff; extern cpuop_func_ce op_4650_22_nf; extern cpuop_func_ce op_4650_22_ff; extern cpuop_func_ce op_4658_22_nf; extern cpuop_func_ce op_4658_22_ff; extern cpuop_func_ce op_4660_22_nf; extern cpuop_func_ce op_4660_22_ff; extern cpuop_func_ce op_4668_22_nf; extern cpuop_func_ce op_4668_22_ff; extern cpuop_func_ce op_4670_22_nf; extern cpuop_func_ce op_4670_22_ff; extern cpuop_func_ce op_4678_22_nf; extern cpuop_func_ce op_4678_22_ff; extern cpuop_func_ce op_4679_22_nf; extern cpuop_func_ce op_4679_22_ff; extern cpuop_func_ce op_4680_22_nf; extern cpuop_func_ce op_4680_22_ff; extern cpuop_func_ce op_4690_22_nf; extern cpuop_func_ce op_4690_22_ff; extern cpuop_func_ce op_4698_22_nf; extern cpuop_func_ce op_4698_22_ff; extern cpuop_func_ce op_46a0_22_nf; extern cpuop_func_ce op_46a0_22_ff; extern cpuop_func_ce op_46a8_22_nf; extern cpuop_func_ce op_46a8_22_ff; extern cpuop_func_ce op_46b0_22_nf; extern cpuop_func_ce op_46b0_22_ff; extern cpuop_func_ce op_46b8_22_nf; extern cpuop_func_ce op_46b8_22_ff; extern cpuop_func_ce op_46b9_22_nf; extern cpuop_func_ce op_46b9_22_ff; extern cpuop_func_ce op_46c0_22_nf; extern cpuop_func_ce op_46c0_22_ff; extern cpuop_func_ce op_46d0_22_nf; extern cpuop_func_ce op_46d0_22_ff; extern cpuop_func_ce op_46d8_22_nf; extern cpuop_func_ce op_46d8_22_ff; extern cpuop_func_ce op_46e0_22_nf; extern cpuop_func_ce op_46e0_22_ff; extern cpuop_func_ce op_46e8_22_nf; extern cpuop_func_ce op_46e8_22_ff; extern cpuop_func_ce op_46f0_22_nf; extern cpuop_func_ce op_46f0_22_ff; extern cpuop_func_ce op_46f8_22_nf; extern cpuop_func_ce op_46f8_22_ff; extern cpuop_func_ce op_46f9_22_nf; extern cpuop_func_ce op_46f9_22_ff; extern cpuop_func_ce op_46fa_22_nf; extern cpuop_func_ce op_46fa_22_ff; extern cpuop_func_ce op_46fb_22_nf; extern cpuop_func_ce op_46fb_22_ff; extern cpuop_func_ce op_46fc_22_nf; extern cpuop_func_ce op_46fc_22_ff; extern cpuop_func_ce op_4800_22_nf; extern cpuop_func_ce op_4800_22_ff; extern cpuop_func_ce op_4808_22_nf; extern cpuop_func_ce op_4808_22_ff; extern cpuop_func_ce op_4810_22_nf; extern cpuop_func_ce op_4810_22_ff; extern cpuop_func_ce op_4818_22_nf; extern cpuop_func_ce op_4818_22_ff; extern cpuop_func_ce op_4820_22_nf; extern cpuop_func_ce op_4820_22_ff; extern cpuop_func_ce op_4828_22_nf; extern cpuop_func_ce op_4828_22_ff; extern cpuop_func_ce op_4830_22_nf; extern cpuop_func_ce op_4830_22_ff; extern cpuop_func_ce op_4838_22_nf; extern cpuop_func_ce op_4838_22_ff; extern cpuop_func_ce op_4839_22_nf; extern cpuop_func_ce op_4839_22_ff; extern cpuop_func_ce op_4840_22_nf; extern cpuop_func_ce op_4840_22_ff; extern cpuop_func_ce op_4848_22_nf; extern cpuop_func_ce op_4848_22_ff; extern cpuop_func_ce op_4850_22_nf; extern cpuop_func_ce op_4850_22_ff; extern cpuop_func_ce op_4868_22_nf; extern cpuop_func_ce op_4868_22_ff; extern cpuop_func_ce op_4870_22_nf; extern cpuop_func_ce op_4870_22_ff; extern cpuop_func_ce op_4878_22_nf; extern cpuop_func_ce op_4878_22_ff; extern cpuop_func_ce op_4879_22_nf; extern cpuop_func_ce op_4879_22_ff; extern cpuop_func_ce op_487a_22_nf; extern cpuop_func_ce op_487a_22_ff; extern cpuop_func_ce op_487b_22_nf; extern cpuop_func_ce op_487b_22_ff; extern cpuop_func_ce op_4880_22_nf; extern cpuop_func_ce op_4880_22_ff; extern cpuop_func_ce op_4890_22_nf; extern cpuop_func_ce op_4890_22_ff; extern cpuop_func_ce op_48a0_22_nf; extern cpuop_func_ce op_48a0_22_ff; extern cpuop_func_ce op_48a8_22_nf; extern cpuop_func_ce op_48a8_22_ff; extern cpuop_func_ce op_48b0_22_nf; extern cpuop_func_ce op_48b0_22_ff; extern cpuop_func_ce op_48b8_22_nf; extern cpuop_func_ce op_48b8_22_ff; extern cpuop_func_ce op_48b9_22_nf; extern cpuop_func_ce op_48b9_22_ff; extern cpuop_func_ce op_48c0_22_nf; extern cpuop_func_ce op_48c0_22_ff; extern cpuop_func_ce op_48d0_22_nf; extern cpuop_func_ce op_48d0_22_ff; extern cpuop_func_ce op_48e0_22_nf; extern cpuop_func_ce op_48e0_22_ff; extern cpuop_func_ce op_48e8_22_nf; extern cpuop_func_ce op_48e8_22_ff; extern cpuop_func_ce op_48f0_22_nf; extern cpuop_func_ce op_48f0_22_ff; extern cpuop_func_ce op_48f8_22_nf; extern cpuop_func_ce op_48f8_22_ff; extern cpuop_func_ce op_48f9_22_nf; extern cpuop_func_ce op_48f9_22_ff; extern cpuop_func_ce op_49c0_22_nf; extern cpuop_func_ce op_49c0_22_ff; extern cpuop_func_ce op_4a00_22_nf; extern cpuop_func_ce op_4a00_22_ff; extern cpuop_func_ce op_4a10_22_nf; extern cpuop_func_ce op_4a10_22_ff; extern cpuop_func_ce op_4a18_22_nf; extern cpuop_func_ce op_4a18_22_ff; extern cpuop_func_ce op_4a20_22_nf; extern cpuop_func_ce op_4a20_22_ff; extern cpuop_func_ce op_4a28_22_nf; extern cpuop_func_ce op_4a28_22_ff; extern cpuop_func_ce op_4a30_22_nf; extern cpuop_func_ce op_4a30_22_ff; extern cpuop_func_ce op_4a38_22_nf; extern cpuop_func_ce op_4a38_22_ff; extern cpuop_func_ce op_4a39_22_nf; extern cpuop_func_ce op_4a39_22_ff; extern cpuop_func_ce op_4a3a_22_nf; extern cpuop_func_ce op_4a3a_22_ff; extern cpuop_func_ce op_4a3b_22_nf; extern cpuop_func_ce op_4a3b_22_ff; extern cpuop_func_ce op_4a3c_22_nf; extern cpuop_func_ce op_4a3c_22_ff; extern cpuop_func_ce op_4a40_22_nf; extern cpuop_func_ce op_4a40_22_ff; extern cpuop_func_ce op_4a48_22_nf; extern cpuop_func_ce op_4a48_22_ff; extern cpuop_func_ce op_4a50_22_nf; extern cpuop_func_ce op_4a50_22_ff; extern cpuop_func_ce op_4a58_22_nf; extern cpuop_func_ce op_4a58_22_ff; extern cpuop_func_ce op_4a60_22_nf; extern cpuop_func_ce op_4a60_22_ff; extern cpuop_func_ce op_4a68_22_nf; extern cpuop_func_ce op_4a68_22_ff; extern cpuop_func_ce op_4a70_22_nf; extern cpuop_func_ce op_4a70_22_ff; extern cpuop_func_ce op_4a78_22_nf; extern cpuop_func_ce op_4a78_22_ff; extern cpuop_func_ce op_4a79_22_nf; extern cpuop_func_ce op_4a79_22_ff; extern cpuop_func_ce op_4a7a_22_nf; extern cpuop_func_ce op_4a7a_22_ff; extern cpuop_func_ce op_4a7b_22_nf; extern cpuop_func_ce op_4a7b_22_ff; extern cpuop_func_ce op_4a7c_22_nf; extern cpuop_func_ce op_4a7c_22_ff; extern cpuop_func_ce op_4a80_22_nf; extern cpuop_func_ce op_4a80_22_ff; extern cpuop_func_ce op_4a88_22_nf; extern cpuop_func_ce op_4a88_22_ff; extern cpuop_func_ce op_4a90_22_nf; extern cpuop_func_ce op_4a90_22_ff; extern cpuop_func_ce op_4a98_22_nf; extern cpuop_func_ce op_4a98_22_ff; extern cpuop_func_ce op_4aa0_22_nf; extern cpuop_func_ce op_4aa0_22_ff; extern cpuop_func_ce op_4aa8_22_nf; extern cpuop_func_ce op_4aa8_22_ff; extern cpuop_func_ce op_4ab0_22_nf; extern cpuop_func_ce op_4ab0_22_ff; extern cpuop_func_ce op_4ab8_22_nf; extern cpuop_func_ce op_4ab8_22_ff; extern cpuop_func_ce op_4ab9_22_nf; extern cpuop_func_ce op_4ab9_22_ff; extern cpuop_func_ce op_4aba_22_nf; extern cpuop_func_ce op_4aba_22_ff; extern cpuop_func_ce op_4abb_22_nf; extern cpuop_func_ce op_4abb_22_ff; extern cpuop_func_ce op_4abc_22_nf; extern cpuop_func_ce op_4abc_22_ff; extern cpuop_func_ce op_4ac0_22_nf; extern cpuop_func_ce op_4ac0_22_ff; extern cpuop_func_ce op_4ad0_22_nf; extern cpuop_func_ce op_4ad0_22_ff; extern cpuop_func_ce op_4ad8_22_nf; extern cpuop_func_ce op_4ad8_22_ff; extern cpuop_func_ce op_4ae0_22_nf; extern cpuop_func_ce op_4ae0_22_ff; extern cpuop_func_ce op_4ae8_22_nf; extern cpuop_func_ce op_4ae8_22_ff; extern cpuop_func_ce op_4af0_22_nf; extern cpuop_func_ce op_4af0_22_ff; extern cpuop_func_ce op_4af8_22_nf; extern cpuop_func_ce op_4af8_22_ff; extern cpuop_func_ce op_4af9_22_nf; extern cpuop_func_ce op_4af9_22_ff; extern cpuop_func_ce op_4c00_22_nf; extern cpuop_func_ce op_4c00_22_ff; extern cpuop_func_ce op_4c10_22_nf; extern cpuop_func_ce op_4c10_22_ff; extern cpuop_func_ce op_4c18_22_nf; extern cpuop_func_ce op_4c18_22_ff; extern cpuop_func_ce op_4c20_22_nf; extern cpuop_func_ce op_4c20_22_ff; extern cpuop_func_ce op_4c28_22_nf; extern cpuop_func_ce op_4c28_22_ff; extern cpuop_func_ce op_4c30_22_nf; extern cpuop_func_ce op_4c30_22_ff; extern cpuop_func_ce op_4c38_22_nf; extern cpuop_func_ce op_4c38_22_ff; extern cpuop_func_ce op_4c39_22_nf; extern cpuop_func_ce op_4c39_22_ff; extern cpuop_func_ce op_4c3a_22_nf; extern cpuop_func_ce op_4c3a_22_ff; extern cpuop_func_ce op_4c3b_22_nf; extern cpuop_func_ce op_4c3b_22_ff; extern cpuop_func_ce op_4c3c_22_nf; extern cpuop_func_ce op_4c3c_22_ff; extern cpuop_func_ce op_4c40_22_nf; extern cpuop_func_ce op_4c40_22_ff; extern cpuop_func_ce op_4c50_22_nf; extern cpuop_func_ce op_4c50_22_ff; extern cpuop_func_ce op_4c58_22_nf; extern cpuop_func_ce op_4c58_22_ff; extern cpuop_func_ce op_4c60_22_nf; extern cpuop_func_ce op_4c60_22_ff; extern cpuop_func_ce op_4c68_22_nf; extern cpuop_func_ce op_4c68_22_ff; extern cpuop_func_ce op_4c70_22_nf; extern cpuop_func_ce op_4c70_22_ff; extern cpuop_func_ce op_4c78_22_nf; extern cpuop_func_ce op_4c78_22_ff; extern cpuop_func_ce op_4c79_22_nf; extern cpuop_func_ce op_4c79_22_ff; extern cpuop_func_ce op_4c7a_22_nf; extern cpuop_func_ce op_4c7a_22_ff; extern cpuop_func_ce op_4c7b_22_nf; extern cpuop_func_ce op_4c7b_22_ff; extern cpuop_func_ce op_4c7c_22_nf; extern cpuop_func_ce op_4c7c_22_ff; extern cpuop_func_ce op_4c90_22_nf; extern cpuop_func_ce op_4c90_22_ff; extern cpuop_func_ce op_4c98_22_nf; extern cpuop_func_ce op_4c98_22_ff; extern cpuop_func_ce op_4ca8_22_nf; extern cpuop_func_ce op_4ca8_22_ff; extern cpuop_func_ce op_4cb0_22_nf; extern cpuop_func_ce op_4cb0_22_ff; extern cpuop_func_ce op_4cb8_22_nf; extern cpuop_func_ce op_4cb8_22_ff; extern cpuop_func_ce op_4cb9_22_nf; extern cpuop_func_ce op_4cb9_22_ff; extern cpuop_func_ce op_4cba_22_nf; extern cpuop_func_ce op_4cba_22_ff; extern cpuop_func_ce op_4cbb_22_nf; extern cpuop_func_ce op_4cbb_22_ff; extern cpuop_func_ce op_4cd0_22_nf; extern cpuop_func_ce op_4cd0_22_ff; extern cpuop_func_ce op_4cd8_22_nf; extern cpuop_func_ce op_4cd8_22_ff; extern cpuop_func_ce op_4ce8_22_nf; extern cpuop_func_ce op_4ce8_22_ff; extern cpuop_func_ce op_4cf0_22_nf; extern cpuop_func_ce op_4cf0_22_ff; extern cpuop_func_ce op_4cf8_22_nf; extern cpuop_func_ce op_4cf8_22_ff; extern cpuop_func_ce op_4cf9_22_nf; extern cpuop_func_ce op_4cf9_22_ff; extern cpuop_func_ce op_4cfa_22_nf; extern cpuop_func_ce op_4cfa_22_ff; extern cpuop_func_ce op_4cfb_22_nf; extern cpuop_func_ce op_4cfb_22_ff; extern cpuop_func_ce op_4e40_22_nf; extern cpuop_func_ce op_4e40_22_ff; extern cpuop_func_ce op_4e50_22_nf; extern cpuop_func_ce op_4e50_22_ff; extern cpuop_func_ce op_4e58_22_nf; extern cpuop_func_ce op_4e58_22_ff; extern cpuop_func_ce op_4e60_22_nf; extern cpuop_func_ce op_4e60_22_ff; extern cpuop_func_ce op_4e68_22_nf; extern cpuop_func_ce op_4e68_22_ff; extern cpuop_func_ce op_4e70_22_nf; extern cpuop_func_ce op_4e70_22_ff; extern cpuop_func_ce op_4e71_22_nf; extern cpuop_func_ce op_4e71_22_ff; extern cpuop_func_ce op_4e72_22_nf; extern cpuop_func_ce op_4e72_22_ff; extern cpuop_func_ce op_4e73_22_nf; extern cpuop_func_ce op_4e73_22_ff; extern cpuop_func_ce op_4e74_22_nf; extern cpuop_func_ce op_4e74_22_ff; extern cpuop_func_ce op_4e75_22_nf; extern cpuop_func_ce op_4e75_22_ff; extern cpuop_func_ce op_4e76_22_nf; extern cpuop_func_ce op_4e76_22_ff; extern cpuop_func_ce op_4e77_22_nf; extern cpuop_func_ce op_4e77_22_ff; extern cpuop_func_ce op_4e7a_22_nf; extern cpuop_func_ce op_4e7a_22_ff; extern cpuop_func_ce op_4e7b_22_nf; extern cpuop_func_ce op_4e7b_22_ff; extern cpuop_func_ce op_4e90_22_nf; extern cpuop_func_ce op_4e90_22_ff; extern cpuop_func_ce op_4ea8_22_nf; extern cpuop_func_ce op_4ea8_22_ff; extern cpuop_func_ce op_4eb0_22_nf; extern cpuop_func_ce op_4eb0_22_ff; extern cpuop_func_ce op_4eb8_22_nf; extern cpuop_func_ce op_4eb8_22_ff; extern cpuop_func_ce op_4eb9_22_nf; extern cpuop_func_ce op_4eb9_22_ff; extern cpuop_func_ce op_4eba_22_nf; extern cpuop_func_ce op_4eba_22_ff; extern cpuop_func_ce op_4ebb_22_nf; extern cpuop_func_ce op_4ebb_22_ff; extern cpuop_func_ce op_4ed0_22_nf; extern cpuop_func_ce op_4ed0_22_ff; extern cpuop_func_ce op_4ee8_22_nf; extern cpuop_func_ce op_4ee8_22_ff; extern cpuop_func_ce op_4ef0_22_nf; extern cpuop_func_ce op_4ef0_22_ff; extern cpuop_func_ce op_4ef8_22_nf; extern cpuop_func_ce op_4ef8_22_ff; extern cpuop_func_ce op_4ef9_22_nf; extern cpuop_func_ce op_4ef9_22_ff; extern cpuop_func_ce op_4efa_22_nf; extern cpuop_func_ce op_4efa_22_ff; extern cpuop_func_ce op_4efb_22_nf; extern cpuop_func_ce op_4efb_22_ff; extern cpuop_func_ce op_5000_22_nf; extern cpuop_func_ce op_5000_22_ff; extern cpuop_func_ce op_5010_22_nf; extern cpuop_func_ce op_5010_22_ff; extern cpuop_func_ce op_5018_22_nf; extern cpuop_func_ce op_5018_22_ff; extern cpuop_func_ce op_5020_22_nf; extern cpuop_func_ce op_5020_22_ff; extern cpuop_func_ce op_5028_22_nf; extern cpuop_func_ce op_5028_22_ff; extern cpuop_func_ce op_5030_22_nf; extern cpuop_func_ce op_5030_22_ff; extern cpuop_func_ce op_5038_22_nf; extern cpuop_func_ce op_5038_22_ff; extern cpuop_func_ce op_5039_22_nf; extern cpuop_func_ce op_5039_22_ff; extern cpuop_func_ce op_5040_22_nf; extern cpuop_func_ce op_5040_22_ff; extern cpuop_func_ce op_5048_22_nf; extern cpuop_func_ce op_5048_22_ff; extern cpuop_func_ce op_5050_22_nf; extern cpuop_func_ce op_5050_22_ff; extern cpuop_func_ce op_5058_22_nf; extern cpuop_func_ce op_5058_22_ff; extern cpuop_func_ce op_5060_22_nf; extern cpuop_func_ce op_5060_22_ff; extern cpuop_func_ce op_5068_22_nf; extern cpuop_func_ce op_5068_22_ff; extern cpuop_func_ce op_5070_22_nf; extern cpuop_func_ce op_5070_22_ff; extern cpuop_func_ce op_5078_22_nf; extern cpuop_func_ce op_5078_22_ff; extern cpuop_func_ce op_5079_22_nf; extern cpuop_func_ce op_5079_22_ff; extern cpuop_func_ce op_5080_22_nf; extern cpuop_func_ce op_5080_22_ff; extern cpuop_func_ce op_5088_22_nf; extern cpuop_func_ce op_5088_22_ff; extern cpuop_func_ce op_5090_22_nf; extern cpuop_func_ce op_5090_22_ff; extern cpuop_func_ce op_5098_22_nf; extern cpuop_func_ce op_5098_22_ff; extern cpuop_func_ce op_50a0_22_nf; extern cpuop_func_ce op_50a0_22_ff; extern cpuop_func_ce op_50a8_22_nf; extern cpuop_func_ce op_50a8_22_ff; extern cpuop_func_ce op_50b0_22_nf; extern cpuop_func_ce op_50b0_22_ff; extern cpuop_func_ce op_50b8_22_nf; extern cpuop_func_ce op_50b8_22_ff; extern cpuop_func_ce op_50b9_22_nf; extern cpuop_func_ce op_50b9_22_ff; extern cpuop_func_ce op_50c0_22_nf; extern cpuop_func_ce op_50c0_22_ff; extern cpuop_func_ce op_50c8_22_nf; extern cpuop_func_ce op_50c8_22_ff; extern cpuop_func_ce op_50d0_22_nf; extern cpuop_func_ce op_50d0_22_ff; extern cpuop_func_ce op_50d8_22_nf; extern cpuop_func_ce op_50d8_22_ff; extern cpuop_func_ce op_50e0_22_nf; extern cpuop_func_ce op_50e0_22_ff; extern cpuop_func_ce op_50e8_22_nf; extern cpuop_func_ce op_50e8_22_ff; extern cpuop_func_ce op_50f0_22_nf; extern cpuop_func_ce op_50f0_22_ff; extern cpuop_func_ce op_50f8_22_nf; extern cpuop_func_ce op_50f8_22_ff; extern cpuop_func_ce op_50f9_22_nf; extern cpuop_func_ce op_50f9_22_ff; extern cpuop_func_ce op_50fa_22_nf; extern cpuop_func_ce op_50fa_22_ff; extern cpuop_func_ce op_50fb_22_nf; extern cpuop_func_ce op_50fb_22_ff; extern cpuop_func_ce op_50fc_22_nf; extern cpuop_func_ce op_50fc_22_ff; extern cpuop_func_ce op_5100_22_nf; extern cpuop_func_ce op_5100_22_ff; extern cpuop_func_ce op_5110_22_nf; extern cpuop_func_ce op_5110_22_ff; extern cpuop_func_ce op_5118_22_nf; extern cpuop_func_ce op_5118_22_ff; extern cpuop_func_ce op_5120_22_nf; extern cpuop_func_ce op_5120_22_ff; extern cpuop_func_ce op_5128_22_nf; extern cpuop_func_ce op_5128_22_ff; extern cpuop_func_ce op_5130_22_nf; extern cpuop_func_ce op_5130_22_ff; extern cpuop_func_ce op_5138_22_nf; extern cpuop_func_ce op_5138_22_ff; extern cpuop_func_ce op_5139_22_nf; extern cpuop_func_ce op_5139_22_ff; extern cpuop_func_ce op_5140_22_nf; extern cpuop_func_ce op_5140_22_ff; extern cpuop_func_ce op_5148_22_nf; extern cpuop_func_ce op_5148_22_ff; extern cpuop_func_ce op_5150_22_nf; extern cpuop_func_ce op_5150_22_ff; extern cpuop_func_ce op_5158_22_nf; extern cpuop_func_ce op_5158_22_ff; extern cpuop_func_ce op_5160_22_nf; extern cpuop_func_ce op_5160_22_ff; extern cpuop_func_ce op_5168_22_nf; extern cpuop_func_ce op_5168_22_ff; extern cpuop_func_ce op_5170_22_nf; extern cpuop_func_ce op_5170_22_ff; extern cpuop_func_ce op_5178_22_nf; extern cpuop_func_ce op_5178_22_ff; extern cpuop_func_ce op_5179_22_nf; extern cpuop_func_ce op_5179_22_ff; extern cpuop_func_ce op_5180_22_nf; extern cpuop_func_ce op_5180_22_ff; extern cpuop_func_ce op_5188_22_nf; extern cpuop_func_ce op_5188_22_ff; extern cpuop_func_ce op_5190_22_nf; extern cpuop_func_ce op_5190_22_ff; extern cpuop_func_ce op_5198_22_nf; extern cpuop_func_ce op_5198_22_ff; extern cpuop_func_ce op_51a0_22_nf; extern cpuop_func_ce op_51a0_22_ff; extern cpuop_func_ce op_51a8_22_nf; extern cpuop_func_ce op_51a8_22_ff; extern cpuop_func_ce op_51b0_22_nf; extern cpuop_func_ce op_51b0_22_ff; extern cpuop_func_ce op_51b8_22_nf; extern cpuop_func_ce op_51b8_22_ff; extern cpuop_func_ce op_51b9_22_nf; extern cpuop_func_ce op_51b9_22_ff; extern cpuop_func_ce op_51c0_22_nf; extern cpuop_func_ce op_51c0_22_ff; extern cpuop_func_ce op_51c8_22_nf; extern cpuop_func_ce op_51c8_22_ff; extern cpuop_func_ce op_51d0_22_nf; extern cpuop_func_ce op_51d0_22_ff; extern cpuop_func_ce op_51d8_22_nf; extern cpuop_func_ce op_51d8_22_ff; extern cpuop_func_ce op_51e0_22_nf; extern cpuop_func_ce op_51e0_22_ff; extern cpuop_func_ce op_51e8_22_nf; extern cpuop_func_ce op_51e8_22_ff; extern cpuop_func_ce op_51f0_22_nf; extern cpuop_func_ce op_51f0_22_ff; extern cpuop_func_ce op_51f8_22_nf; extern cpuop_func_ce op_51f8_22_ff; extern cpuop_func_ce op_51f9_22_nf; extern cpuop_func_ce op_51f9_22_ff; extern cpuop_func_ce op_51fa_22_nf; extern cpuop_func_ce op_51fa_22_ff; extern cpuop_func_ce op_51fb_22_nf; extern cpuop_func_ce op_51fb_22_ff; extern cpuop_func_ce op_51fc_22_nf; extern cpuop_func_ce op_51fc_22_ff; extern cpuop_func_ce op_52c0_22_nf; extern cpuop_func_ce op_52c0_22_ff; extern cpuop_func_ce op_52c8_22_nf; extern cpuop_func_ce op_52c8_22_ff; extern cpuop_func_ce op_52d0_22_nf; extern cpuop_func_ce op_52d0_22_ff; extern cpuop_func_ce op_52d8_22_nf; extern cpuop_func_ce op_52d8_22_ff; extern cpuop_func_ce op_52e0_22_nf; extern cpuop_func_ce op_52e0_22_ff; extern cpuop_func_ce op_52e8_22_nf; extern cpuop_func_ce op_52e8_22_ff; extern cpuop_func_ce op_52f0_22_nf; extern cpuop_func_ce op_52f0_22_ff; extern cpuop_func_ce op_52f8_22_nf; extern cpuop_func_ce op_52f8_22_ff; extern cpuop_func_ce op_52f9_22_nf; extern cpuop_func_ce op_52f9_22_ff; extern cpuop_func_ce op_52fa_22_nf; extern cpuop_func_ce op_52fa_22_ff; extern cpuop_func_ce op_52fb_22_nf; extern cpuop_func_ce op_52fb_22_ff; extern cpuop_func_ce op_52fc_22_nf; extern cpuop_func_ce op_52fc_22_ff; extern cpuop_func_ce op_53c0_22_nf; extern cpuop_func_ce op_53c0_22_ff; extern cpuop_func_ce op_53c8_22_nf; extern cpuop_func_ce op_53c8_22_ff; extern cpuop_func_ce op_53d0_22_nf; extern cpuop_func_ce op_53d0_22_ff; extern cpuop_func_ce op_53d8_22_nf; extern cpuop_func_ce op_53d8_22_ff; extern cpuop_func_ce op_53e0_22_nf; extern cpuop_func_ce op_53e0_22_ff; extern cpuop_func_ce op_53e8_22_nf; extern cpuop_func_ce op_53e8_22_ff; extern cpuop_func_ce op_53f0_22_nf; extern cpuop_func_ce op_53f0_22_ff; extern cpuop_func_ce op_53f8_22_nf; extern cpuop_func_ce op_53f8_22_ff; extern cpuop_func_ce op_53f9_22_nf; extern cpuop_func_ce op_53f9_22_ff; extern cpuop_func_ce op_53fa_22_nf; extern cpuop_func_ce op_53fa_22_ff; extern cpuop_func_ce op_53fb_22_nf; extern cpuop_func_ce op_53fb_22_ff; extern cpuop_func_ce op_53fc_22_nf; extern cpuop_func_ce op_53fc_22_ff; extern cpuop_func_ce op_54c0_22_nf; extern cpuop_func_ce op_54c0_22_ff; extern cpuop_func_ce op_54c8_22_nf; extern cpuop_func_ce op_54c8_22_ff; extern cpuop_func_ce op_54d0_22_nf; extern cpuop_func_ce op_54d0_22_ff; extern cpuop_func_ce op_54d8_22_nf; extern cpuop_func_ce op_54d8_22_ff; extern cpuop_func_ce op_54e0_22_nf; extern cpuop_func_ce op_54e0_22_ff; extern cpuop_func_ce op_54e8_22_nf; extern cpuop_func_ce op_54e8_22_ff; extern cpuop_func_ce op_54f0_22_nf; extern cpuop_func_ce op_54f0_22_ff; extern cpuop_func_ce op_54f8_22_nf; extern cpuop_func_ce op_54f8_22_ff; extern cpuop_func_ce op_54f9_22_nf; extern cpuop_func_ce op_54f9_22_ff; extern cpuop_func_ce op_54fa_22_nf; extern cpuop_func_ce op_54fa_22_ff; extern cpuop_func_ce op_54fb_22_nf; extern cpuop_func_ce op_54fb_22_ff; extern cpuop_func_ce op_54fc_22_nf; extern cpuop_func_ce op_54fc_22_ff; extern cpuop_func_ce op_55c0_22_nf; extern cpuop_func_ce op_55c0_22_ff; extern cpuop_func_ce op_55c8_22_nf; extern cpuop_func_ce op_55c8_22_ff; extern cpuop_func_ce op_55d0_22_nf; extern cpuop_func_ce op_55d0_22_ff; extern cpuop_func_ce op_55d8_22_nf; extern cpuop_func_ce op_55d8_22_ff; extern cpuop_func_ce op_55e0_22_nf; extern cpuop_func_ce op_55e0_22_ff; extern cpuop_func_ce op_55e8_22_nf; extern cpuop_func_ce op_55e8_22_ff; extern cpuop_func_ce op_55f0_22_nf; extern cpuop_func_ce op_55f0_22_ff; extern cpuop_func_ce op_55f8_22_nf; extern cpuop_func_ce op_55f8_22_ff; extern cpuop_func_ce op_55f9_22_nf; extern cpuop_func_ce op_55f9_22_ff; extern cpuop_func_ce op_55fa_22_nf; extern cpuop_func_ce op_55fa_22_ff; extern cpuop_func_ce op_55fb_22_nf; extern cpuop_func_ce op_55fb_22_ff; extern cpuop_func_ce op_55fc_22_nf; extern cpuop_func_ce op_55fc_22_ff; extern cpuop_func_ce op_56c0_22_nf; extern cpuop_func_ce op_56c0_22_ff; extern cpuop_func_ce op_56c8_22_nf; extern cpuop_func_ce op_56c8_22_ff; extern cpuop_func_ce op_56d0_22_nf; extern cpuop_func_ce op_56d0_22_ff; extern cpuop_func_ce op_56d8_22_nf; extern cpuop_func_ce op_56d8_22_ff; extern cpuop_func_ce op_56e0_22_nf; extern cpuop_func_ce op_56e0_22_ff; extern cpuop_func_ce op_56e8_22_nf; extern cpuop_func_ce op_56e8_22_ff; extern cpuop_func_ce op_56f0_22_nf; extern cpuop_func_ce op_56f0_22_ff; extern cpuop_func_ce op_56f8_22_nf; extern cpuop_func_ce op_56f8_22_ff; extern cpuop_func_ce op_56f9_22_nf; extern cpuop_func_ce op_56f9_22_ff; extern cpuop_func_ce op_56fa_22_nf; extern cpuop_func_ce op_56fa_22_ff; extern cpuop_func_ce op_56fb_22_nf; extern cpuop_func_ce op_56fb_22_ff; extern cpuop_func_ce op_56fc_22_nf; extern cpuop_func_ce op_56fc_22_ff; extern cpuop_func_ce op_57c0_22_nf; extern cpuop_func_ce op_57c0_22_ff; extern cpuop_func_ce op_57c8_22_nf; extern cpuop_func_ce op_57c8_22_ff; extern cpuop_func_ce op_57d0_22_nf; extern cpuop_func_ce op_57d0_22_ff; extern cpuop_func_ce op_57d8_22_nf; extern cpuop_func_ce op_57d8_22_ff; extern cpuop_func_ce op_57e0_22_nf; extern cpuop_func_ce op_57e0_22_ff; extern cpuop_func_ce op_57e8_22_nf; extern cpuop_func_ce op_57e8_22_ff; extern cpuop_func_ce op_57f0_22_nf; extern cpuop_func_ce op_57f0_22_ff; extern cpuop_func_ce op_57f8_22_nf; extern cpuop_func_ce op_57f8_22_ff; extern cpuop_func_ce op_57f9_22_nf; extern cpuop_func_ce op_57f9_22_ff; extern cpuop_func_ce op_57fa_22_nf; extern cpuop_func_ce op_57fa_22_ff; extern cpuop_func_ce op_57fb_22_nf; extern cpuop_func_ce op_57fb_22_ff; extern cpuop_func_ce op_57fc_22_nf; extern cpuop_func_ce op_57fc_22_ff; extern cpuop_func_ce op_58c0_22_nf; extern cpuop_func_ce op_58c0_22_ff; extern cpuop_func_ce op_58c8_22_nf; extern cpuop_func_ce op_58c8_22_ff; extern cpuop_func_ce op_58d0_22_nf; extern cpuop_func_ce op_58d0_22_ff; extern cpuop_func_ce op_58d8_22_nf; extern cpuop_func_ce op_58d8_22_ff; extern cpuop_func_ce op_58e0_22_nf; extern cpuop_func_ce op_58e0_22_ff; extern cpuop_func_ce op_58e8_22_nf; extern cpuop_func_ce op_58e8_22_ff; extern cpuop_func_ce op_58f0_22_nf; extern cpuop_func_ce op_58f0_22_ff; extern cpuop_func_ce op_58f8_22_nf; extern cpuop_func_ce op_58f8_22_ff; extern cpuop_func_ce op_58f9_22_nf; extern cpuop_func_ce op_58f9_22_ff; extern cpuop_func_ce op_58fa_22_nf; extern cpuop_func_ce op_58fa_22_ff; extern cpuop_func_ce op_58fb_22_nf; extern cpuop_func_ce op_58fb_22_ff; extern cpuop_func_ce op_58fc_22_nf; extern cpuop_func_ce op_58fc_22_ff; extern cpuop_func_ce op_59c0_22_nf; extern cpuop_func_ce op_59c0_22_ff; extern cpuop_func_ce op_59c8_22_nf; extern cpuop_func_ce op_59c8_22_ff; extern cpuop_func_ce op_59d0_22_nf; extern cpuop_func_ce op_59d0_22_ff; extern cpuop_func_ce op_59d8_22_nf; extern cpuop_func_ce op_59d8_22_ff; extern cpuop_func_ce op_59e0_22_nf; extern cpuop_func_ce op_59e0_22_ff; extern cpuop_func_ce op_59e8_22_nf; extern cpuop_func_ce op_59e8_22_ff; extern cpuop_func_ce op_59f0_22_nf; extern cpuop_func_ce op_59f0_22_ff; extern cpuop_func_ce op_59f8_22_nf; extern cpuop_func_ce op_59f8_22_ff; extern cpuop_func_ce op_59f9_22_nf; extern cpuop_func_ce op_59f9_22_ff; extern cpuop_func_ce op_59fa_22_nf; extern cpuop_func_ce op_59fa_22_ff; extern cpuop_func_ce op_59fb_22_nf; extern cpuop_func_ce op_59fb_22_ff; extern cpuop_func_ce op_59fc_22_nf; extern cpuop_func_ce op_59fc_22_ff; extern cpuop_func_ce op_5ac0_22_nf; extern cpuop_func_ce op_5ac0_22_ff; extern cpuop_func_ce op_5ac8_22_nf; extern cpuop_func_ce op_5ac8_22_ff; extern cpuop_func_ce op_5ad0_22_nf; extern cpuop_func_ce op_5ad0_22_ff; extern cpuop_func_ce op_5ad8_22_nf; extern cpuop_func_ce op_5ad8_22_ff; extern cpuop_func_ce op_5ae0_22_nf; extern cpuop_func_ce op_5ae0_22_ff; extern cpuop_func_ce op_5ae8_22_nf; extern cpuop_func_ce op_5ae8_22_ff; extern cpuop_func_ce op_5af0_22_nf; extern cpuop_func_ce op_5af0_22_ff; extern cpuop_func_ce op_5af8_22_nf; extern cpuop_func_ce op_5af8_22_ff; extern cpuop_func_ce op_5af9_22_nf; extern cpuop_func_ce op_5af9_22_ff; extern cpuop_func_ce op_5afa_22_nf; extern cpuop_func_ce op_5afa_22_ff; extern cpuop_func_ce op_5afb_22_nf; extern cpuop_func_ce op_5afb_22_ff; extern cpuop_func_ce op_5afc_22_nf; extern cpuop_func_ce op_5afc_22_ff; extern cpuop_func_ce op_5bc0_22_nf; extern cpuop_func_ce op_5bc0_22_ff; extern cpuop_func_ce op_5bc8_22_nf; extern cpuop_func_ce op_5bc8_22_ff; extern cpuop_func_ce op_5bd0_22_nf; extern cpuop_func_ce op_5bd0_22_ff; extern cpuop_func_ce op_5bd8_22_nf; extern cpuop_func_ce op_5bd8_22_ff; extern cpuop_func_ce op_5be0_22_nf; extern cpuop_func_ce op_5be0_22_ff; extern cpuop_func_ce op_5be8_22_nf; extern cpuop_func_ce op_5be8_22_ff; extern cpuop_func_ce op_5bf0_22_nf; extern cpuop_func_ce op_5bf0_22_ff; extern cpuop_func_ce op_5bf8_22_nf; extern cpuop_func_ce op_5bf8_22_ff; extern cpuop_func_ce op_5bf9_22_nf; extern cpuop_func_ce op_5bf9_22_ff; extern cpuop_func_ce op_5bfa_22_nf; extern cpuop_func_ce op_5bfa_22_ff; extern cpuop_func_ce op_5bfb_22_nf; extern cpuop_func_ce op_5bfb_22_ff; extern cpuop_func_ce op_5bfc_22_nf; extern cpuop_func_ce op_5bfc_22_ff; extern cpuop_func_ce op_5cc0_22_nf; extern cpuop_func_ce op_5cc0_22_ff; extern cpuop_func_ce op_5cc8_22_nf; extern cpuop_func_ce op_5cc8_22_ff; extern cpuop_func_ce op_5cd0_22_nf; extern cpuop_func_ce op_5cd0_22_ff; extern cpuop_func_ce op_5cd8_22_nf; extern cpuop_func_ce op_5cd8_22_ff; extern cpuop_func_ce op_5ce0_22_nf; extern cpuop_func_ce op_5ce0_22_ff; extern cpuop_func_ce op_5ce8_22_nf; extern cpuop_func_ce op_5ce8_22_ff; extern cpuop_func_ce op_5cf0_22_nf; extern cpuop_func_ce op_5cf0_22_ff; extern cpuop_func_ce op_5cf8_22_nf; extern cpuop_func_ce op_5cf8_22_ff; extern cpuop_func_ce op_5cf9_22_nf; extern cpuop_func_ce op_5cf9_22_ff; extern cpuop_func_ce op_5cfa_22_nf; extern cpuop_func_ce op_5cfa_22_ff; extern cpuop_func_ce op_5cfb_22_nf; extern cpuop_func_ce op_5cfb_22_ff; extern cpuop_func_ce op_5cfc_22_nf; extern cpuop_func_ce op_5cfc_22_ff; extern cpuop_func_ce op_5dc0_22_nf; extern cpuop_func_ce op_5dc0_22_ff; extern cpuop_func_ce op_5dc8_22_nf; extern cpuop_func_ce op_5dc8_22_ff; extern cpuop_func_ce op_5dd0_22_nf; extern cpuop_func_ce op_5dd0_22_ff; extern cpuop_func_ce op_5dd8_22_nf; extern cpuop_func_ce op_5dd8_22_ff; extern cpuop_func_ce op_5de0_22_nf; extern cpuop_func_ce op_5de0_22_ff; extern cpuop_func_ce op_5de8_22_nf; extern cpuop_func_ce op_5de8_22_ff; extern cpuop_func_ce op_5df0_22_nf; extern cpuop_func_ce op_5df0_22_ff; extern cpuop_func_ce op_5df8_22_nf; extern cpuop_func_ce op_5df8_22_ff; extern cpuop_func_ce op_5df9_22_nf; extern cpuop_func_ce op_5df9_22_ff; extern cpuop_func_ce op_5dfa_22_nf; extern cpuop_func_ce op_5dfa_22_ff; extern cpuop_func_ce op_5dfb_22_nf; extern cpuop_func_ce op_5dfb_22_ff; extern cpuop_func_ce op_5dfc_22_nf; extern cpuop_func_ce op_5dfc_22_ff; extern cpuop_func_ce op_5ec0_22_nf; extern cpuop_func_ce op_5ec0_22_ff; extern cpuop_func_ce op_5ec8_22_nf; extern cpuop_func_ce op_5ec8_22_ff; extern cpuop_func_ce op_5ed0_22_nf; extern cpuop_func_ce op_5ed0_22_ff; extern cpuop_func_ce op_5ed8_22_nf; extern cpuop_func_ce op_5ed8_22_ff; extern cpuop_func_ce op_5ee0_22_nf; extern cpuop_func_ce op_5ee0_22_ff; extern cpuop_func_ce op_5ee8_22_nf; extern cpuop_func_ce op_5ee8_22_ff; extern cpuop_func_ce op_5ef0_22_nf; extern cpuop_func_ce op_5ef0_22_ff; extern cpuop_func_ce op_5ef8_22_nf; extern cpuop_func_ce op_5ef8_22_ff; extern cpuop_func_ce op_5ef9_22_nf; extern cpuop_func_ce op_5ef9_22_ff; extern cpuop_func_ce op_5efa_22_nf; extern cpuop_func_ce op_5efa_22_ff; extern cpuop_func_ce op_5efb_22_nf; extern cpuop_func_ce op_5efb_22_ff; extern cpuop_func_ce op_5efc_22_nf; extern cpuop_func_ce op_5efc_22_ff; extern cpuop_func_ce op_5fc0_22_nf; extern cpuop_func_ce op_5fc0_22_ff; extern cpuop_func_ce op_5fc8_22_nf; extern cpuop_func_ce op_5fc8_22_ff; extern cpuop_func_ce op_5fd0_22_nf; extern cpuop_func_ce op_5fd0_22_ff; extern cpuop_func_ce op_5fd8_22_nf; extern cpuop_func_ce op_5fd8_22_ff; extern cpuop_func_ce op_5fe0_22_nf; extern cpuop_func_ce op_5fe0_22_ff; extern cpuop_func_ce op_5fe8_22_nf; extern cpuop_func_ce op_5fe8_22_ff; extern cpuop_func_ce op_5ff0_22_nf; extern cpuop_func_ce op_5ff0_22_ff; extern cpuop_func_ce op_5ff8_22_nf; extern cpuop_func_ce op_5ff8_22_ff; extern cpuop_func_ce op_5ff9_22_nf; extern cpuop_func_ce op_5ff9_22_ff; extern cpuop_func_ce op_5ffa_22_nf; extern cpuop_func_ce op_5ffa_22_ff; extern cpuop_func_ce op_5ffb_22_nf; extern cpuop_func_ce op_5ffb_22_ff; extern cpuop_func_ce op_5ffc_22_nf; extern cpuop_func_ce op_5ffc_22_ff; extern cpuop_func_ce op_6000_22_nf; extern cpuop_func_ce op_6000_22_ff; extern cpuop_func_ce op_6001_22_nf; extern cpuop_func_ce op_6001_22_ff; extern cpuop_func_ce op_60ff_22_nf; extern cpuop_func_ce op_60ff_22_ff; extern cpuop_func_ce op_6100_22_nf; extern cpuop_func_ce op_6100_22_ff; extern cpuop_func_ce op_6101_22_nf; extern cpuop_func_ce op_6101_22_ff; extern cpuop_func_ce op_61ff_22_nf; extern cpuop_func_ce op_61ff_22_ff; extern cpuop_func_ce op_6200_22_nf; extern cpuop_func_ce op_6200_22_ff; extern cpuop_func_ce op_6201_22_nf; extern cpuop_func_ce op_6201_22_ff; extern cpuop_func_ce op_62ff_22_nf; extern cpuop_func_ce op_62ff_22_ff; extern cpuop_func_ce op_6300_22_nf; extern cpuop_func_ce op_6300_22_ff; extern cpuop_func_ce op_6301_22_nf; extern cpuop_func_ce op_6301_22_ff; extern cpuop_func_ce op_63ff_22_nf; extern cpuop_func_ce op_63ff_22_ff; extern cpuop_func_ce op_6400_22_nf; extern cpuop_func_ce op_6400_22_ff; extern cpuop_func_ce op_6401_22_nf; extern cpuop_func_ce op_6401_22_ff; extern cpuop_func_ce op_64ff_22_nf; extern cpuop_func_ce op_64ff_22_ff; extern cpuop_func_ce op_6500_22_nf; extern cpuop_func_ce op_6500_22_ff; extern cpuop_func_ce op_6501_22_nf; extern cpuop_func_ce op_6501_22_ff; extern cpuop_func_ce op_65ff_22_nf; extern cpuop_func_ce op_65ff_22_ff; extern cpuop_func_ce op_6600_22_nf; extern cpuop_func_ce op_6600_22_ff; extern cpuop_func_ce op_6601_22_nf; extern cpuop_func_ce op_6601_22_ff; extern cpuop_func_ce op_66ff_22_nf; extern cpuop_func_ce op_66ff_22_ff; extern cpuop_func_ce op_6700_22_nf; extern cpuop_func_ce op_6700_22_ff; extern cpuop_func_ce op_6701_22_nf; extern cpuop_func_ce op_6701_22_ff; extern cpuop_func_ce op_67ff_22_nf; extern cpuop_func_ce op_67ff_22_ff; extern cpuop_func_ce op_6800_22_nf; extern cpuop_func_ce op_6800_22_ff; extern cpuop_func_ce op_6801_22_nf; extern cpuop_func_ce op_6801_22_ff; extern cpuop_func_ce op_68ff_22_nf; extern cpuop_func_ce op_68ff_22_ff; extern cpuop_func_ce op_6900_22_nf; extern cpuop_func_ce op_6900_22_ff; extern cpuop_func_ce op_6901_22_nf; extern cpuop_func_ce op_6901_22_ff; extern cpuop_func_ce op_69ff_22_nf; extern cpuop_func_ce op_69ff_22_ff; extern cpuop_func_ce op_6a00_22_nf; extern cpuop_func_ce op_6a00_22_ff; extern cpuop_func_ce op_6a01_22_nf; extern cpuop_func_ce op_6a01_22_ff; extern cpuop_func_ce op_6aff_22_nf; extern cpuop_func_ce op_6aff_22_ff; extern cpuop_func_ce op_6b00_22_nf; extern cpuop_func_ce op_6b00_22_ff; extern cpuop_func_ce op_6b01_22_nf; extern cpuop_func_ce op_6b01_22_ff; extern cpuop_func_ce op_6bff_22_nf; extern cpuop_func_ce op_6bff_22_ff; extern cpuop_func_ce op_6c00_22_nf; extern cpuop_func_ce op_6c00_22_ff; extern cpuop_func_ce op_6c01_22_nf; extern cpuop_func_ce op_6c01_22_ff; extern cpuop_func_ce op_6cff_22_nf; extern cpuop_func_ce op_6cff_22_ff; extern cpuop_func_ce op_6d00_22_nf; extern cpuop_func_ce op_6d00_22_ff; extern cpuop_func_ce op_6d01_22_nf; extern cpuop_func_ce op_6d01_22_ff; extern cpuop_func_ce op_6dff_22_nf; extern cpuop_func_ce op_6dff_22_ff; extern cpuop_func_ce op_6e00_22_nf; extern cpuop_func_ce op_6e00_22_ff; extern cpuop_func_ce op_6e01_22_nf; extern cpuop_func_ce op_6e01_22_ff; extern cpuop_func_ce op_6eff_22_nf; extern cpuop_func_ce op_6eff_22_ff; extern cpuop_func_ce op_6f00_22_nf; extern cpuop_func_ce op_6f00_22_ff; extern cpuop_func_ce op_6f01_22_nf; extern cpuop_func_ce op_6f01_22_ff; extern cpuop_func_ce op_6fff_22_nf; extern cpuop_func_ce op_6fff_22_ff; extern cpuop_func_ce op_7000_22_nf; extern cpuop_func_ce op_7000_22_ff; extern cpuop_func_ce op_8000_22_nf; extern cpuop_func_ce op_8000_22_ff; extern cpuop_func_ce op_8010_22_nf; extern cpuop_func_ce op_8010_22_ff; extern cpuop_func_ce op_8018_22_nf; extern cpuop_func_ce op_8018_22_ff; extern cpuop_func_ce op_8020_22_nf; extern cpuop_func_ce op_8020_22_ff; extern cpuop_func_ce op_8028_22_nf; extern cpuop_func_ce op_8028_22_ff; extern cpuop_func_ce op_8030_22_nf; extern cpuop_func_ce op_8030_22_ff; extern cpuop_func_ce op_8038_22_nf; extern cpuop_func_ce op_8038_22_ff; extern cpuop_func_ce op_8039_22_nf; extern cpuop_func_ce op_8039_22_ff; extern cpuop_func_ce op_803a_22_nf; extern cpuop_func_ce op_803a_22_ff; extern cpuop_func_ce op_803b_22_nf; extern cpuop_func_ce op_803b_22_ff; extern cpuop_func_ce op_803c_22_nf; extern cpuop_func_ce op_803c_22_ff; extern cpuop_func_ce op_8040_22_nf; extern cpuop_func_ce op_8040_22_ff; extern cpuop_func_ce op_8050_22_nf; extern cpuop_func_ce op_8050_22_ff; extern cpuop_func_ce op_8058_22_nf; extern cpuop_func_ce op_8058_22_ff; extern cpuop_func_ce op_8060_22_nf; extern cpuop_func_ce op_8060_22_ff; extern cpuop_func_ce op_8068_22_nf; extern cpuop_func_ce op_8068_22_ff; extern cpuop_func_ce op_8070_22_nf; extern cpuop_func_ce op_8070_22_ff; extern cpuop_func_ce op_8078_22_nf; extern cpuop_func_ce op_8078_22_ff; extern cpuop_func_ce op_8079_22_nf; extern cpuop_func_ce op_8079_22_ff; extern cpuop_func_ce op_807a_22_nf; extern cpuop_func_ce op_807a_22_ff; extern cpuop_func_ce op_807b_22_nf; extern cpuop_func_ce op_807b_22_ff; extern cpuop_func_ce op_807c_22_nf; extern cpuop_func_ce op_807c_22_ff; extern cpuop_func_ce op_8080_22_nf; extern cpuop_func_ce op_8080_22_ff; extern cpuop_func_ce op_8090_22_nf; extern cpuop_func_ce op_8090_22_ff; extern cpuop_func_ce op_8098_22_nf; extern cpuop_func_ce op_8098_22_ff; extern cpuop_func_ce op_80a0_22_nf; extern cpuop_func_ce op_80a0_22_ff; extern cpuop_func_ce op_80a8_22_nf; extern cpuop_func_ce op_80a8_22_ff; extern cpuop_func_ce op_80b0_22_nf; extern cpuop_func_ce op_80b0_22_ff; extern cpuop_func_ce op_80b8_22_nf; extern cpuop_func_ce op_80b8_22_ff; extern cpuop_func_ce op_80b9_22_nf; extern cpuop_func_ce op_80b9_22_ff; extern cpuop_func_ce op_80ba_22_nf; extern cpuop_func_ce op_80ba_22_ff; extern cpuop_func_ce op_80bb_22_nf; extern cpuop_func_ce op_80bb_22_ff; extern cpuop_func_ce op_80bc_22_nf; extern cpuop_func_ce op_80bc_22_ff; extern cpuop_func_ce op_80c0_22_nf; extern cpuop_func_ce op_80c0_22_ff; extern cpuop_func_ce op_80d0_22_nf; extern cpuop_func_ce op_80d0_22_ff; extern cpuop_func_ce op_80d8_22_nf; extern cpuop_func_ce op_80d8_22_ff; extern cpuop_func_ce op_80e0_22_nf; extern cpuop_func_ce op_80e0_22_ff; extern cpuop_func_ce op_80e8_22_nf; extern cpuop_func_ce op_80e8_22_ff; extern cpuop_func_ce op_80f0_22_nf; extern cpuop_func_ce op_80f0_22_ff; extern cpuop_func_ce op_80f8_22_nf; extern cpuop_func_ce op_80f8_22_ff; extern cpuop_func_ce op_80f9_22_nf; extern cpuop_func_ce op_80f9_22_ff; extern cpuop_func_ce op_80fa_22_nf; extern cpuop_func_ce op_80fa_22_ff; extern cpuop_func_ce op_80fb_22_nf; extern cpuop_func_ce op_80fb_22_ff; extern cpuop_func_ce op_80fc_22_nf; extern cpuop_func_ce op_80fc_22_ff; extern cpuop_func_ce op_8100_22_nf; extern cpuop_func_ce op_8100_22_ff; extern cpuop_func_ce op_8108_22_nf; extern cpuop_func_ce op_8108_22_ff; extern cpuop_func_ce op_8110_22_nf; extern cpuop_func_ce op_8110_22_ff; extern cpuop_func_ce op_8118_22_nf; extern cpuop_func_ce op_8118_22_ff; extern cpuop_func_ce op_8120_22_nf; extern cpuop_func_ce op_8120_22_ff; extern cpuop_func_ce op_8128_22_nf; extern cpuop_func_ce op_8128_22_ff; extern cpuop_func_ce op_8130_22_nf; extern cpuop_func_ce op_8130_22_ff; extern cpuop_func_ce op_8138_22_nf; extern cpuop_func_ce op_8138_22_ff; extern cpuop_func_ce op_8139_22_nf; extern cpuop_func_ce op_8139_22_ff; extern cpuop_func_ce op_8140_22_nf; extern cpuop_func_ce op_8140_22_ff; extern cpuop_func_ce op_8148_22_nf; extern cpuop_func_ce op_8148_22_ff; extern cpuop_func_ce op_8150_22_nf; extern cpuop_func_ce op_8150_22_ff; extern cpuop_func_ce op_8158_22_nf; extern cpuop_func_ce op_8158_22_ff; extern cpuop_func_ce op_8160_22_nf; extern cpuop_func_ce op_8160_22_ff; extern cpuop_func_ce op_8168_22_nf; extern cpuop_func_ce op_8168_22_ff; extern cpuop_func_ce op_8170_22_nf; extern cpuop_func_ce op_8170_22_ff; extern cpuop_func_ce op_8178_22_nf; extern cpuop_func_ce op_8178_22_ff; extern cpuop_func_ce op_8179_22_nf; extern cpuop_func_ce op_8179_22_ff; extern cpuop_func_ce op_8180_22_nf; extern cpuop_func_ce op_8180_22_ff; extern cpuop_func_ce op_8188_22_nf; extern cpuop_func_ce op_8188_22_ff; extern cpuop_func_ce op_8190_22_nf; extern cpuop_func_ce op_8190_22_ff; extern cpuop_func_ce op_8198_22_nf; extern cpuop_func_ce op_8198_22_ff; extern cpuop_func_ce op_81a0_22_nf; extern cpuop_func_ce op_81a0_22_ff; extern cpuop_func_ce op_81a8_22_nf; extern cpuop_func_ce op_81a8_22_ff; extern cpuop_func_ce op_81b0_22_nf; extern cpuop_func_ce op_81b0_22_ff; extern cpuop_func_ce op_81b8_22_nf; extern cpuop_func_ce op_81b8_22_ff; extern cpuop_func_ce op_81b9_22_nf; extern cpuop_func_ce op_81b9_22_ff; extern cpuop_func_ce op_81c0_22_nf; extern cpuop_func_ce op_81c0_22_ff; extern cpuop_func_ce op_81d0_22_nf; extern cpuop_func_ce op_81d0_22_ff; extern cpuop_func_ce op_81d8_22_nf; extern cpuop_func_ce op_81d8_22_ff; extern cpuop_func_ce op_81e0_22_nf; extern cpuop_func_ce op_81e0_22_ff; extern cpuop_func_ce op_81e8_22_nf; extern cpuop_func_ce op_81e8_22_ff; extern cpuop_func_ce op_81f0_22_nf; extern cpuop_func_ce op_81f0_22_ff; extern cpuop_func_ce op_81f8_22_nf; extern cpuop_func_ce op_81f8_22_ff; extern cpuop_func_ce op_81f9_22_nf; extern cpuop_func_ce op_81f9_22_ff; extern cpuop_func_ce op_81fa_22_nf; extern cpuop_func_ce op_81fa_22_ff; extern cpuop_func_ce op_81fb_22_nf; extern cpuop_func_ce op_81fb_22_ff; extern cpuop_func_ce op_81fc_22_nf; extern cpuop_func_ce op_81fc_22_ff; extern cpuop_func_ce op_9000_22_nf; extern cpuop_func_ce op_9000_22_ff; extern cpuop_func_ce op_9010_22_nf; extern cpuop_func_ce op_9010_22_ff; extern cpuop_func_ce op_9018_22_nf; extern cpuop_func_ce op_9018_22_ff; extern cpuop_func_ce op_9020_22_nf; extern cpuop_func_ce op_9020_22_ff; extern cpuop_func_ce op_9028_22_nf; extern cpuop_func_ce op_9028_22_ff; extern cpuop_func_ce op_9030_22_nf; extern cpuop_func_ce op_9030_22_ff; extern cpuop_func_ce op_9038_22_nf; extern cpuop_func_ce op_9038_22_ff; extern cpuop_func_ce op_9039_22_nf; extern cpuop_func_ce op_9039_22_ff; extern cpuop_func_ce op_903a_22_nf; extern cpuop_func_ce op_903a_22_ff; extern cpuop_func_ce op_903b_22_nf; extern cpuop_func_ce op_903b_22_ff; extern cpuop_func_ce op_903c_22_nf; extern cpuop_func_ce op_903c_22_ff; extern cpuop_func_ce op_9040_22_nf; extern cpuop_func_ce op_9040_22_ff; extern cpuop_func_ce op_9048_22_nf; extern cpuop_func_ce op_9048_22_ff; extern cpuop_func_ce op_9050_22_nf; extern cpuop_func_ce op_9050_22_ff; extern cpuop_func_ce op_9058_22_nf; extern cpuop_func_ce op_9058_22_ff; extern cpuop_func_ce op_9060_22_nf; extern cpuop_func_ce op_9060_22_ff; extern cpuop_func_ce op_9068_22_nf; extern cpuop_func_ce op_9068_22_ff; extern cpuop_func_ce op_9070_22_nf; extern cpuop_func_ce op_9070_22_ff; extern cpuop_func_ce op_9078_22_nf; extern cpuop_func_ce op_9078_22_ff; extern cpuop_func_ce op_9079_22_nf; extern cpuop_func_ce op_9079_22_ff; extern cpuop_func_ce op_907a_22_nf; extern cpuop_func_ce op_907a_22_ff; extern cpuop_func_ce op_907b_22_nf; extern cpuop_func_ce op_907b_22_ff; extern cpuop_func_ce op_907c_22_nf; extern cpuop_func_ce op_907c_22_ff; extern cpuop_func_ce op_9080_22_nf; extern cpuop_func_ce op_9080_22_ff; extern cpuop_func_ce op_9088_22_nf; extern cpuop_func_ce op_9088_22_ff; extern cpuop_func_ce op_9090_22_nf; extern cpuop_func_ce op_9090_22_ff; extern cpuop_func_ce op_9098_22_nf; extern cpuop_func_ce op_9098_22_ff; extern cpuop_func_ce op_90a0_22_nf; extern cpuop_func_ce op_90a0_22_ff; extern cpuop_func_ce op_90a8_22_nf; extern cpuop_func_ce op_90a8_22_ff; extern cpuop_func_ce op_90b0_22_nf; extern cpuop_func_ce op_90b0_22_ff; extern cpuop_func_ce op_90b8_22_nf; extern cpuop_func_ce op_90b8_22_ff; extern cpuop_func_ce op_90b9_22_nf; extern cpuop_func_ce op_90b9_22_ff; extern cpuop_func_ce op_90ba_22_nf; extern cpuop_func_ce op_90ba_22_ff; extern cpuop_func_ce op_90bb_22_nf; extern cpuop_func_ce op_90bb_22_ff; extern cpuop_func_ce op_90bc_22_nf; extern cpuop_func_ce op_90bc_22_ff; extern cpuop_func_ce op_90c0_22_nf; extern cpuop_func_ce op_90c0_22_ff; extern cpuop_func_ce op_90c8_22_nf; extern cpuop_func_ce op_90c8_22_ff; extern cpuop_func_ce op_90d0_22_nf; extern cpuop_func_ce op_90d0_22_ff; extern cpuop_func_ce op_90d8_22_nf; extern cpuop_func_ce op_90d8_22_ff; extern cpuop_func_ce op_90e0_22_nf; extern cpuop_func_ce op_90e0_22_ff; extern cpuop_func_ce op_90e8_22_nf; extern cpuop_func_ce op_90e8_22_ff; extern cpuop_func_ce op_90f0_22_nf; extern cpuop_func_ce op_90f0_22_ff; extern cpuop_func_ce op_90f8_22_nf; extern cpuop_func_ce op_90f8_22_ff; extern cpuop_func_ce op_90f9_22_nf; extern cpuop_func_ce op_90f9_22_ff; extern cpuop_func_ce op_90fa_22_nf; extern cpuop_func_ce op_90fa_22_ff; extern cpuop_func_ce op_90fb_22_nf; extern cpuop_func_ce op_90fb_22_ff; extern cpuop_func_ce op_90fc_22_nf; extern cpuop_func_ce op_90fc_22_ff; extern cpuop_func_ce op_9100_22_nf; extern cpuop_func_ce op_9100_22_ff; extern cpuop_func_ce op_9108_22_nf; extern cpuop_func_ce op_9108_22_ff; extern cpuop_func_ce op_9110_22_nf; extern cpuop_func_ce op_9110_22_ff; extern cpuop_func_ce op_9118_22_nf; extern cpuop_func_ce op_9118_22_ff; extern cpuop_func_ce op_9120_22_nf; extern cpuop_func_ce op_9120_22_ff; extern cpuop_func_ce op_9128_22_nf; extern cpuop_func_ce op_9128_22_ff; extern cpuop_func_ce op_9130_22_nf; extern cpuop_func_ce op_9130_22_ff; extern cpuop_func_ce op_9138_22_nf; extern cpuop_func_ce op_9138_22_ff; extern cpuop_func_ce op_9139_22_nf; extern cpuop_func_ce op_9139_22_ff; extern cpuop_func_ce op_9140_22_nf; extern cpuop_func_ce op_9140_22_ff; extern cpuop_func_ce op_9148_22_nf; extern cpuop_func_ce op_9148_22_ff; extern cpuop_func_ce op_9150_22_nf; extern cpuop_func_ce op_9150_22_ff; extern cpuop_func_ce op_9158_22_nf; extern cpuop_func_ce op_9158_22_ff; extern cpuop_func_ce op_9160_22_nf; extern cpuop_func_ce op_9160_22_ff; extern cpuop_func_ce op_9168_22_nf; extern cpuop_func_ce op_9168_22_ff; extern cpuop_func_ce op_9170_22_nf; extern cpuop_func_ce op_9170_22_ff; extern cpuop_func_ce op_9178_22_nf; extern cpuop_func_ce op_9178_22_ff; extern cpuop_func_ce op_9179_22_nf; extern cpuop_func_ce op_9179_22_ff; extern cpuop_func_ce op_9180_22_nf; extern cpuop_func_ce op_9180_22_ff; extern cpuop_func_ce op_9188_22_nf; extern cpuop_func_ce op_9188_22_ff; extern cpuop_func_ce op_9190_22_nf; extern cpuop_func_ce op_9190_22_ff; extern cpuop_func_ce op_9198_22_nf; extern cpuop_func_ce op_9198_22_ff; extern cpuop_func_ce op_91a0_22_nf; extern cpuop_func_ce op_91a0_22_ff; extern cpuop_func_ce op_91a8_22_nf; extern cpuop_func_ce op_91a8_22_ff; extern cpuop_func_ce op_91b0_22_nf; extern cpuop_func_ce op_91b0_22_ff; extern cpuop_func_ce op_91b8_22_nf; extern cpuop_func_ce op_91b8_22_ff; extern cpuop_func_ce op_91b9_22_nf; extern cpuop_func_ce op_91b9_22_ff; extern cpuop_func_ce op_91c0_22_nf; extern cpuop_func_ce op_91c0_22_ff; extern cpuop_func_ce op_91c8_22_nf; extern cpuop_func_ce op_91c8_22_ff; extern cpuop_func_ce op_91d0_22_nf; extern cpuop_func_ce op_91d0_22_ff; extern cpuop_func_ce op_91d8_22_nf; extern cpuop_func_ce op_91d8_22_ff; extern cpuop_func_ce op_91e0_22_nf; extern cpuop_func_ce op_91e0_22_ff; extern cpuop_func_ce op_91e8_22_nf; extern cpuop_func_ce op_91e8_22_ff; extern cpuop_func_ce op_91f0_22_nf; extern cpuop_func_ce op_91f0_22_ff; extern cpuop_func_ce op_91f8_22_nf; extern cpuop_func_ce op_91f8_22_ff; extern cpuop_func_ce op_91f9_22_nf; extern cpuop_func_ce op_91f9_22_ff; extern cpuop_func_ce op_91fa_22_nf; extern cpuop_func_ce op_91fa_22_ff; extern cpuop_func_ce op_91fb_22_nf; extern cpuop_func_ce op_91fb_22_ff; extern cpuop_func_ce op_91fc_22_nf; extern cpuop_func_ce op_91fc_22_ff; extern cpuop_func_ce op_b000_22_nf; extern cpuop_func_ce op_b000_22_ff; extern cpuop_func_ce op_b010_22_nf; extern cpuop_func_ce op_b010_22_ff; extern cpuop_func_ce op_b018_22_nf; extern cpuop_func_ce op_b018_22_ff; extern cpuop_func_ce op_b020_22_nf; extern cpuop_func_ce op_b020_22_ff; extern cpuop_func_ce op_b028_22_nf; extern cpuop_func_ce op_b028_22_ff; extern cpuop_func_ce op_b030_22_nf; extern cpuop_func_ce op_b030_22_ff; extern cpuop_func_ce op_b038_22_nf; extern cpuop_func_ce op_b038_22_ff; extern cpuop_func_ce op_b039_22_nf; extern cpuop_func_ce op_b039_22_ff; extern cpuop_func_ce op_b03a_22_nf; extern cpuop_func_ce op_b03a_22_ff; extern cpuop_func_ce op_b03b_22_nf; extern cpuop_func_ce op_b03b_22_ff; extern cpuop_func_ce op_b03c_22_nf; extern cpuop_func_ce op_b03c_22_ff; extern cpuop_func_ce op_b040_22_nf; extern cpuop_func_ce op_b040_22_ff; extern cpuop_func_ce op_b048_22_nf; extern cpuop_func_ce op_b048_22_ff; extern cpuop_func_ce op_b050_22_nf; extern cpuop_func_ce op_b050_22_ff; extern cpuop_func_ce op_b058_22_nf; extern cpuop_func_ce op_b058_22_ff; extern cpuop_func_ce op_b060_22_nf; extern cpuop_func_ce op_b060_22_ff; extern cpuop_func_ce op_b068_22_nf; extern cpuop_func_ce op_b068_22_ff; extern cpuop_func_ce op_b070_22_nf; extern cpuop_func_ce op_b070_22_ff; extern cpuop_func_ce op_b078_22_nf; extern cpuop_func_ce op_b078_22_ff; extern cpuop_func_ce op_b079_22_nf; extern cpuop_func_ce op_b079_22_ff; extern cpuop_func_ce op_b07a_22_nf; extern cpuop_func_ce op_b07a_22_ff; extern cpuop_func_ce op_b07b_22_nf; extern cpuop_func_ce op_b07b_22_ff; extern cpuop_func_ce op_b07c_22_nf; extern cpuop_func_ce op_b07c_22_ff; extern cpuop_func_ce op_b080_22_nf; extern cpuop_func_ce op_b080_22_ff; extern cpuop_func_ce op_b088_22_nf; extern cpuop_func_ce op_b088_22_ff; extern cpuop_func_ce op_b090_22_nf; extern cpuop_func_ce op_b090_22_ff; extern cpuop_func_ce op_b098_22_nf; extern cpuop_func_ce op_b098_22_ff; extern cpuop_func_ce op_b0a0_22_nf; extern cpuop_func_ce op_b0a0_22_ff; extern cpuop_func_ce op_b0a8_22_nf; extern cpuop_func_ce op_b0a8_22_ff; extern cpuop_func_ce op_b0b0_22_nf; extern cpuop_func_ce op_b0b0_22_ff; extern cpuop_func_ce op_b0b8_22_nf; extern cpuop_func_ce op_b0b8_22_ff; extern cpuop_func_ce op_b0b9_22_nf; extern cpuop_func_ce op_b0b9_22_ff; extern cpuop_func_ce op_b0ba_22_nf; extern cpuop_func_ce op_b0ba_22_ff; extern cpuop_func_ce op_b0bb_22_nf; extern cpuop_func_ce op_b0bb_22_ff; extern cpuop_func_ce op_b0bc_22_nf; extern cpuop_func_ce op_b0bc_22_ff; extern cpuop_func_ce op_b0c0_22_nf; extern cpuop_func_ce op_b0c0_22_ff; extern cpuop_func_ce op_b0c8_22_nf; extern cpuop_func_ce op_b0c8_22_ff; extern cpuop_func_ce op_b0d0_22_nf; extern cpuop_func_ce op_b0d0_22_ff; extern cpuop_func_ce op_b0d8_22_nf; extern cpuop_func_ce op_b0d8_22_ff; extern cpuop_func_ce op_b0e0_22_nf; extern cpuop_func_ce op_b0e0_22_ff; extern cpuop_func_ce op_b0e8_22_nf; extern cpuop_func_ce op_b0e8_22_ff; extern cpuop_func_ce op_b0f0_22_nf; extern cpuop_func_ce op_b0f0_22_ff; extern cpuop_func_ce op_b0f8_22_nf; extern cpuop_func_ce op_b0f8_22_ff; extern cpuop_func_ce op_b0f9_22_nf; extern cpuop_func_ce op_b0f9_22_ff; extern cpuop_func_ce op_b0fa_22_nf; extern cpuop_func_ce op_b0fa_22_ff; extern cpuop_func_ce op_b0fb_22_nf; extern cpuop_func_ce op_b0fb_22_ff; extern cpuop_func_ce op_b0fc_22_nf; extern cpuop_func_ce op_b0fc_22_ff; extern cpuop_func_ce op_b100_22_nf; extern cpuop_func_ce op_b100_22_ff; extern cpuop_func_ce op_b108_22_nf; extern cpuop_func_ce op_b108_22_ff; extern cpuop_func_ce op_b110_22_nf; extern cpuop_func_ce op_b110_22_ff; extern cpuop_func_ce op_b118_22_nf; extern cpuop_func_ce op_b118_22_ff; extern cpuop_func_ce op_b120_22_nf; extern cpuop_func_ce op_b120_22_ff; extern cpuop_func_ce op_b128_22_nf; extern cpuop_func_ce op_b128_22_ff; extern cpuop_func_ce op_b130_22_nf; extern cpuop_func_ce op_b130_22_ff; extern cpuop_func_ce op_b138_22_nf; extern cpuop_func_ce op_b138_22_ff; extern cpuop_func_ce op_b139_22_nf; extern cpuop_func_ce op_b139_22_ff; extern cpuop_func_ce op_b140_22_nf; extern cpuop_func_ce op_b140_22_ff; extern cpuop_func_ce op_b148_22_nf; extern cpuop_func_ce op_b148_22_ff; extern cpuop_func_ce op_b150_22_nf; extern cpuop_func_ce op_b150_22_ff; extern cpuop_func_ce op_b158_22_nf; extern cpuop_func_ce op_b158_22_ff; extern cpuop_func_ce op_b160_22_nf; extern cpuop_func_ce op_b160_22_ff; extern cpuop_func_ce op_b168_22_nf; extern cpuop_func_ce op_b168_22_ff; extern cpuop_func_ce op_b170_22_nf; extern cpuop_func_ce op_b170_22_ff; extern cpuop_func_ce op_b178_22_nf; extern cpuop_func_ce op_b178_22_ff; extern cpuop_func_ce op_b179_22_nf; extern cpuop_func_ce op_b179_22_ff; extern cpuop_func_ce op_b180_22_nf; extern cpuop_func_ce op_b180_22_ff; extern cpuop_func_ce op_b188_22_nf; extern cpuop_func_ce op_b188_22_ff; extern cpuop_func_ce op_b190_22_nf; extern cpuop_func_ce op_b190_22_ff; extern cpuop_func_ce op_b198_22_nf; extern cpuop_func_ce op_b198_22_ff; extern cpuop_func_ce op_b1a0_22_nf; extern cpuop_func_ce op_b1a0_22_ff; extern cpuop_func_ce op_b1a8_22_nf; extern cpuop_func_ce op_b1a8_22_ff; extern cpuop_func_ce op_b1b0_22_nf; extern cpuop_func_ce op_b1b0_22_ff; extern cpuop_func_ce op_b1b8_22_nf; extern cpuop_func_ce op_b1b8_22_ff; extern cpuop_func_ce op_b1b9_22_nf; extern cpuop_func_ce op_b1b9_22_ff; extern cpuop_func_ce op_b1c0_22_nf; extern cpuop_func_ce op_b1c0_22_ff; extern cpuop_func_ce op_b1c8_22_nf; extern cpuop_func_ce op_b1c8_22_ff; extern cpuop_func_ce op_b1d0_22_nf; extern cpuop_func_ce op_b1d0_22_ff; extern cpuop_func_ce op_b1d8_22_nf; extern cpuop_func_ce op_b1d8_22_ff; extern cpuop_func_ce op_b1e0_22_nf; extern cpuop_func_ce op_b1e0_22_ff; extern cpuop_func_ce op_b1e8_22_nf; extern cpuop_func_ce op_b1e8_22_ff; extern cpuop_func_ce op_b1f0_22_nf; extern cpuop_func_ce op_b1f0_22_ff; extern cpuop_func_ce op_b1f8_22_nf; extern cpuop_func_ce op_b1f8_22_ff; extern cpuop_func_ce op_b1f9_22_nf; extern cpuop_func_ce op_b1f9_22_ff; extern cpuop_func_ce op_b1fa_22_nf; extern cpuop_func_ce op_b1fa_22_ff; extern cpuop_func_ce op_b1fb_22_nf; extern cpuop_func_ce op_b1fb_22_ff; extern cpuop_func_ce op_b1fc_22_nf; extern cpuop_func_ce op_b1fc_22_ff; extern cpuop_func_ce op_c000_22_nf; extern cpuop_func_ce op_c000_22_ff; extern cpuop_func_ce op_c010_22_nf; extern cpuop_func_ce op_c010_22_ff; extern cpuop_func_ce op_c018_22_nf; extern cpuop_func_ce op_c018_22_ff; extern cpuop_func_ce op_c020_22_nf; extern cpuop_func_ce op_c020_22_ff; extern cpuop_func_ce op_c028_22_nf; extern cpuop_func_ce op_c028_22_ff; extern cpuop_func_ce op_c030_22_nf; extern cpuop_func_ce op_c030_22_ff; extern cpuop_func_ce op_c038_22_nf; extern cpuop_func_ce op_c038_22_ff; extern cpuop_func_ce op_c039_22_nf; extern cpuop_func_ce op_c039_22_ff; extern cpuop_func_ce op_c03a_22_nf; extern cpuop_func_ce op_c03a_22_ff; extern cpuop_func_ce op_c03b_22_nf; extern cpuop_func_ce op_c03b_22_ff; extern cpuop_func_ce op_c03c_22_nf; extern cpuop_func_ce op_c03c_22_ff; extern cpuop_func_ce op_c040_22_nf; extern cpuop_func_ce op_c040_22_ff; extern cpuop_func_ce op_c050_22_nf; extern cpuop_func_ce op_c050_22_ff; extern cpuop_func_ce op_c058_22_nf; extern cpuop_func_ce op_c058_22_ff; extern cpuop_func_ce op_c060_22_nf; extern cpuop_func_ce op_c060_22_ff; extern cpuop_func_ce op_c068_22_nf; extern cpuop_func_ce op_c068_22_ff; extern cpuop_func_ce op_c070_22_nf; extern cpuop_func_ce op_c070_22_ff; extern cpuop_func_ce op_c078_22_nf; extern cpuop_func_ce op_c078_22_ff; extern cpuop_func_ce op_c079_22_nf; extern cpuop_func_ce op_c079_22_ff; extern cpuop_func_ce op_c07a_22_nf; extern cpuop_func_ce op_c07a_22_ff; extern cpuop_func_ce op_c07b_22_nf; extern cpuop_func_ce op_c07b_22_ff; extern cpuop_func_ce op_c07c_22_nf; extern cpuop_func_ce op_c07c_22_ff; extern cpuop_func_ce op_c080_22_nf; extern cpuop_func_ce op_c080_22_ff; extern cpuop_func_ce op_c090_22_nf; extern cpuop_func_ce op_c090_22_ff; extern cpuop_func_ce op_c098_22_nf; extern cpuop_func_ce op_c098_22_ff; extern cpuop_func_ce op_c0a0_22_nf; extern cpuop_func_ce op_c0a0_22_ff; extern cpuop_func_ce op_c0a8_22_nf; extern cpuop_func_ce op_c0a8_22_ff; extern cpuop_func_ce op_c0b0_22_nf; extern cpuop_func_ce op_c0b0_22_ff; extern cpuop_func_ce op_c0b8_22_nf; extern cpuop_func_ce op_c0b8_22_ff; extern cpuop_func_ce op_c0b9_22_nf; extern cpuop_func_ce op_c0b9_22_ff; extern cpuop_func_ce op_c0ba_22_nf; extern cpuop_func_ce op_c0ba_22_ff; extern cpuop_func_ce op_c0bb_22_nf; extern cpuop_func_ce op_c0bb_22_ff; extern cpuop_func_ce op_c0bc_22_nf; extern cpuop_func_ce op_c0bc_22_ff; extern cpuop_func_ce op_c0c0_22_nf; extern cpuop_func_ce op_c0c0_22_ff; extern cpuop_func_ce op_c0d0_22_nf; extern cpuop_func_ce op_c0d0_22_ff; extern cpuop_func_ce op_c0d8_22_nf; extern cpuop_func_ce op_c0d8_22_ff; extern cpuop_func_ce op_c0e0_22_nf; extern cpuop_func_ce op_c0e0_22_ff; extern cpuop_func_ce op_c0e8_22_nf; extern cpuop_func_ce op_c0e8_22_ff; extern cpuop_func_ce op_c0f0_22_nf; extern cpuop_func_ce op_c0f0_22_ff; extern cpuop_func_ce op_c0f8_22_nf; extern cpuop_func_ce op_c0f8_22_ff; extern cpuop_func_ce op_c0f9_22_nf; extern cpuop_func_ce op_c0f9_22_ff; extern cpuop_func_ce op_c0fa_22_nf; extern cpuop_func_ce op_c0fa_22_ff; extern cpuop_func_ce op_c0fb_22_nf; extern cpuop_func_ce op_c0fb_22_ff; extern cpuop_func_ce op_c0fc_22_nf; extern cpuop_func_ce op_c0fc_22_ff; extern cpuop_func_ce op_c100_22_nf; extern cpuop_func_ce op_c100_22_ff; extern cpuop_func_ce op_c108_22_nf; extern cpuop_func_ce op_c108_22_ff; extern cpuop_func_ce op_c110_22_nf; extern cpuop_func_ce op_c110_22_ff; extern cpuop_func_ce op_c118_22_nf; extern cpuop_func_ce op_c118_22_ff; extern cpuop_func_ce op_c120_22_nf; extern cpuop_func_ce op_c120_22_ff; extern cpuop_func_ce op_c128_22_nf; extern cpuop_func_ce op_c128_22_ff; extern cpuop_func_ce op_c130_22_nf; extern cpuop_func_ce op_c130_22_ff; extern cpuop_func_ce op_c138_22_nf; extern cpuop_func_ce op_c138_22_ff; extern cpuop_func_ce op_c139_22_nf; extern cpuop_func_ce op_c139_22_ff; extern cpuop_func_ce op_c140_22_nf; extern cpuop_func_ce op_c140_22_ff; extern cpuop_func_ce op_c148_22_nf; extern cpuop_func_ce op_c148_22_ff; extern cpuop_func_ce op_c150_22_nf; extern cpuop_func_ce op_c150_22_ff; extern cpuop_func_ce op_c158_22_nf; extern cpuop_func_ce op_c158_22_ff; extern cpuop_func_ce op_c160_22_nf; extern cpuop_func_ce op_c160_22_ff; extern cpuop_func_ce op_c168_22_nf; extern cpuop_func_ce op_c168_22_ff; extern cpuop_func_ce op_c170_22_nf; extern cpuop_func_ce op_c170_22_ff; extern cpuop_func_ce op_c178_22_nf; extern cpuop_func_ce op_c178_22_ff; extern cpuop_func_ce op_c179_22_nf; extern cpuop_func_ce op_c179_22_ff; extern cpuop_func_ce op_c188_22_nf; extern cpuop_func_ce op_c188_22_ff; extern cpuop_func_ce op_c190_22_nf; extern cpuop_func_ce op_c190_22_ff; extern cpuop_func_ce op_c198_22_nf; extern cpuop_func_ce op_c198_22_ff; extern cpuop_func_ce op_c1a0_22_nf; extern cpuop_func_ce op_c1a0_22_ff; extern cpuop_func_ce op_c1a8_22_nf; extern cpuop_func_ce op_c1a8_22_ff; extern cpuop_func_ce op_c1b0_22_nf; extern cpuop_func_ce op_c1b0_22_ff; extern cpuop_func_ce op_c1b8_22_nf; extern cpuop_func_ce op_c1b8_22_ff; extern cpuop_func_ce op_c1b9_22_nf; extern cpuop_func_ce op_c1b9_22_ff; extern cpuop_func_ce op_c1c0_22_nf; extern cpuop_func_ce op_c1c0_22_ff; extern cpuop_func_ce op_c1d0_22_nf; extern cpuop_func_ce op_c1d0_22_ff; extern cpuop_func_ce op_c1d8_22_nf; extern cpuop_func_ce op_c1d8_22_ff; extern cpuop_func_ce op_c1e0_22_nf; extern cpuop_func_ce op_c1e0_22_ff; extern cpuop_func_ce op_c1e8_22_nf; extern cpuop_func_ce op_c1e8_22_ff; extern cpuop_func_ce op_c1f0_22_nf; extern cpuop_func_ce op_c1f0_22_ff; extern cpuop_func_ce op_c1f8_22_nf; extern cpuop_func_ce op_c1f8_22_ff; extern cpuop_func_ce op_c1f9_22_nf; extern cpuop_func_ce op_c1f9_22_ff; extern cpuop_func_ce op_c1fa_22_nf; extern cpuop_func_ce op_c1fa_22_ff; extern cpuop_func_ce op_c1fb_22_nf; extern cpuop_func_ce op_c1fb_22_ff; extern cpuop_func_ce op_c1fc_22_nf; extern cpuop_func_ce op_c1fc_22_ff; extern cpuop_func_ce op_d000_22_nf; extern cpuop_func_ce op_d000_22_ff; extern cpuop_func_ce op_d010_22_nf; extern cpuop_func_ce op_d010_22_ff; extern cpuop_func_ce op_d018_22_nf; extern cpuop_func_ce op_d018_22_ff; extern cpuop_func_ce op_d020_22_nf; extern cpuop_func_ce op_d020_22_ff; extern cpuop_func_ce op_d028_22_nf; extern cpuop_func_ce op_d028_22_ff; extern cpuop_func_ce op_d030_22_nf; extern cpuop_func_ce op_d030_22_ff; extern cpuop_func_ce op_d038_22_nf; extern cpuop_func_ce op_d038_22_ff; extern cpuop_func_ce op_d039_22_nf; extern cpuop_func_ce op_d039_22_ff; extern cpuop_func_ce op_d03a_22_nf; extern cpuop_func_ce op_d03a_22_ff; extern cpuop_func_ce op_d03b_22_nf; extern cpuop_func_ce op_d03b_22_ff; extern cpuop_func_ce op_d03c_22_nf; extern cpuop_func_ce op_d03c_22_ff; extern cpuop_func_ce op_d040_22_nf; extern cpuop_func_ce op_d040_22_ff; extern cpuop_func_ce op_d048_22_nf; extern cpuop_func_ce op_d048_22_ff; extern cpuop_func_ce op_d050_22_nf; extern cpuop_func_ce op_d050_22_ff; extern cpuop_func_ce op_d058_22_nf; extern cpuop_func_ce op_d058_22_ff; extern cpuop_func_ce op_d060_22_nf; extern cpuop_func_ce op_d060_22_ff; extern cpuop_func_ce op_d068_22_nf; extern cpuop_func_ce op_d068_22_ff; extern cpuop_func_ce op_d070_22_nf; extern cpuop_func_ce op_d070_22_ff; extern cpuop_func_ce op_d078_22_nf; extern cpuop_func_ce op_d078_22_ff; extern cpuop_func_ce op_d079_22_nf; extern cpuop_func_ce op_d079_22_ff; extern cpuop_func_ce op_d07a_22_nf; extern cpuop_func_ce op_d07a_22_ff; extern cpuop_func_ce op_d07b_22_nf; extern cpuop_func_ce op_d07b_22_ff; extern cpuop_func_ce op_d07c_22_nf; extern cpuop_func_ce op_d07c_22_ff; extern cpuop_func_ce op_d080_22_nf; extern cpuop_func_ce op_d080_22_ff; extern cpuop_func_ce op_d088_22_nf; extern cpuop_func_ce op_d088_22_ff; extern cpuop_func_ce op_d090_22_nf; extern cpuop_func_ce op_d090_22_ff; extern cpuop_func_ce op_d098_22_nf; extern cpuop_func_ce op_d098_22_ff; extern cpuop_func_ce op_d0a0_22_nf; extern cpuop_func_ce op_d0a0_22_ff; extern cpuop_func_ce op_d0a8_22_nf; extern cpuop_func_ce op_d0a8_22_ff; extern cpuop_func_ce op_d0b0_22_nf; extern cpuop_func_ce op_d0b0_22_ff; extern cpuop_func_ce op_d0b8_22_nf; extern cpuop_func_ce op_d0b8_22_ff; extern cpuop_func_ce op_d0b9_22_nf; extern cpuop_func_ce op_d0b9_22_ff; extern cpuop_func_ce op_d0ba_22_nf; extern cpuop_func_ce op_d0ba_22_ff; extern cpuop_func_ce op_d0bb_22_nf; extern cpuop_func_ce op_d0bb_22_ff; extern cpuop_func_ce op_d0bc_22_nf; extern cpuop_func_ce op_d0bc_22_ff; extern cpuop_func_ce op_d0c0_22_nf; extern cpuop_func_ce op_d0c0_22_ff; extern cpuop_func_ce op_d0c8_22_nf; extern cpuop_func_ce op_d0c8_22_ff; extern cpuop_func_ce op_d0d0_22_nf; extern cpuop_func_ce op_d0d0_22_ff; extern cpuop_func_ce op_d0d8_22_nf; extern cpuop_func_ce op_d0d8_22_ff; extern cpuop_func_ce op_d0e0_22_nf; extern cpuop_func_ce op_d0e0_22_ff; extern cpuop_func_ce op_d0e8_22_nf; extern cpuop_func_ce op_d0e8_22_ff; extern cpuop_func_ce op_d0f0_22_nf; extern cpuop_func_ce op_d0f0_22_ff; extern cpuop_func_ce op_d0f8_22_nf; extern cpuop_func_ce op_d0f8_22_ff; extern cpuop_func_ce op_d0f9_22_nf; extern cpuop_func_ce op_d0f9_22_ff; extern cpuop_func_ce op_d0fa_22_nf; extern cpuop_func_ce op_d0fa_22_ff; extern cpuop_func_ce op_d0fb_22_nf; extern cpuop_func_ce op_d0fb_22_ff; extern cpuop_func_ce op_d0fc_22_nf; extern cpuop_func_ce op_d0fc_22_ff; extern cpuop_func_ce op_d100_22_nf; extern cpuop_func_ce op_d100_22_ff; extern cpuop_func_ce op_d108_22_nf; extern cpuop_func_ce op_d108_22_ff; extern cpuop_func_ce op_d110_22_nf; extern cpuop_func_ce op_d110_22_ff; extern cpuop_func_ce op_d118_22_nf; extern cpuop_func_ce op_d118_22_ff; extern cpuop_func_ce op_d120_22_nf; extern cpuop_func_ce op_d120_22_ff; extern cpuop_func_ce op_d128_22_nf; extern cpuop_func_ce op_d128_22_ff; extern cpuop_func_ce op_d130_22_nf; extern cpuop_func_ce op_d130_22_ff; extern cpuop_func_ce op_d138_22_nf; extern cpuop_func_ce op_d138_22_ff; extern cpuop_func_ce op_d139_22_nf; extern cpuop_func_ce op_d139_22_ff; extern cpuop_func_ce op_d140_22_nf; extern cpuop_func_ce op_d140_22_ff; extern cpuop_func_ce op_d148_22_nf; extern cpuop_func_ce op_d148_22_ff; extern cpuop_func_ce op_d150_22_nf; extern cpuop_func_ce op_d150_22_ff; extern cpuop_func_ce op_d158_22_nf; extern cpuop_func_ce op_d158_22_ff; extern cpuop_func_ce op_d160_22_nf; extern cpuop_func_ce op_d160_22_ff; extern cpuop_func_ce op_d168_22_nf; extern cpuop_func_ce op_d168_22_ff; extern cpuop_func_ce op_d170_22_nf; extern cpuop_func_ce op_d170_22_ff; extern cpuop_func_ce op_d178_22_nf; extern cpuop_func_ce op_d178_22_ff; extern cpuop_func_ce op_d179_22_nf; extern cpuop_func_ce op_d179_22_ff; extern cpuop_func_ce op_d180_22_nf; extern cpuop_func_ce op_d180_22_ff; extern cpuop_func_ce op_d188_22_nf; extern cpuop_func_ce op_d188_22_ff; extern cpuop_func_ce op_d190_22_nf; extern cpuop_func_ce op_d190_22_ff; extern cpuop_func_ce op_d198_22_nf; extern cpuop_func_ce op_d198_22_ff; extern cpuop_func_ce op_d1a0_22_nf; extern cpuop_func_ce op_d1a0_22_ff; extern cpuop_func_ce op_d1a8_22_nf; extern cpuop_func_ce op_d1a8_22_ff; extern cpuop_func_ce op_d1b0_22_nf; extern cpuop_func_ce op_d1b0_22_ff; extern cpuop_func_ce op_d1b8_22_nf; extern cpuop_func_ce op_d1b8_22_ff; extern cpuop_func_ce op_d1b9_22_nf; extern cpuop_func_ce op_d1b9_22_ff; extern cpuop_func_ce op_d1c0_22_nf; extern cpuop_func_ce op_d1c0_22_ff; extern cpuop_func_ce op_d1c8_22_nf; extern cpuop_func_ce op_d1c8_22_ff; extern cpuop_func_ce op_d1d0_22_nf; extern cpuop_func_ce op_d1d0_22_ff; extern cpuop_func_ce op_d1d8_22_nf; extern cpuop_func_ce op_d1d8_22_ff; extern cpuop_func_ce op_d1e0_22_nf; extern cpuop_func_ce op_d1e0_22_ff; extern cpuop_func_ce op_d1e8_22_nf; extern cpuop_func_ce op_d1e8_22_ff; extern cpuop_func_ce op_d1f0_22_nf; extern cpuop_func_ce op_d1f0_22_ff; extern cpuop_func_ce op_d1f8_22_nf; extern cpuop_func_ce op_d1f8_22_ff; extern cpuop_func_ce op_d1f9_22_nf; extern cpuop_func_ce op_d1f9_22_ff; extern cpuop_func_ce op_d1fa_22_nf; extern cpuop_func_ce op_d1fa_22_ff; extern cpuop_func_ce op_d1fb_22_nf; extern cpuop_func_ce op_d1fb_22_ff; extern cpuop_func_ce op_d1fc_22_nf; extern cpuop_func_ce op_d1fc_22_ff; extern cpuop_func_ce op_e000_22_nf; extern cpuop_func_ce op_e000_22_ff; extern cpuop_func_ce op_e008_22_nf; extern cpuop_func_ce op_e008_22_ff; extern cpuop_func_ce op_e010_22_nf; extern cpuop_func_ce op_e010_22_ff; extern cpuop_func_ce op_e018_22_nf; extern cpuop_func_ce op_e018_22_ff; extern cpuop_func_ce op_e020_22_nf; extern cpuop_func_ce op_e020_22_ff; extern cpuop_func_ce op_e028_22_nf; extern cpuop_func_ce op_e028_22_ff; extern cpuop_func_ce op_e030_22_nf; extern cpuop_func_ce op_e030_22_ff; extern cpuop_func_ce op_e038_22_nf; extern cpuop_func_ce op_e038_22_ff; extern cpuop_func_ce op_e040_22_nf; extern cpuop_func_ce op_e040_22_ff; extern cpuop_func_ce op_e048_22_nf; extern cpuop_func_ce op_e048_22_ff; extern cpuop_func_ce op_e050_22_nf; extern cpuop_func_ce op_e050_22_ff; extern cpuop_func_ce op_e058_22_nf; extern cpuop_func_ce op_e058_22_ff; extern cpuop_func_ce op_e060_22_nf; extern cpuop_func_ce op_e060_22_ff; extern cpuop_func_ce op_e068_22_nf; extern cpuop_func_ce op_e068_22_ff; extern cpuop_func_ce op_e070_22_nf; extern cpuop_func_ce op_e070_22_ff; extern cpuop_func_ce op_e078_22_nf; extern cpuop_func_ce op_e078_22_ff; extern cpuop_func_ce op_e080_22_nf; extern cpuop_func_ce op_e080_22_ff; extern cpuop_func_ce op_e088_22_nf; extern cpuop_func_ce op_e088_22_ff; extern cpuop_func_ce op_e090_22_nf; extern cpuop_func_ce op_e090_22_ff; extern cpuop_func_ce op_e098_22_nf; extern cpuop_func_ce op_e098_22_ff; extern cpuop_func_ce op_e0a0_22_nf; extern cpuop_func_ce op_e0a0_22_ff; extern cpuop_func_ce op_e0a8_22_nf; extern cpuop_func_ce op_e0a8_22_ff; extern cpuop_func_ce op_e0b0_22_nf; extern cpuop_func_ce op_e0b0_22_ff; extern cpuop_func_ce op_e0b8_22_nf; extern cpuop_func_ce op_e0b8_22_ff; extern cpuop_func_ce op_e0d0_22_nf; extern cpuop_func_ce op_e0d0_22_ff; extern cpuop_func_ce op_e0d8_22_nf; extern cpuop_func_ce op_e0d8_22_ff; extern cpuop_func_ce op_e0e0_22_nf; extern cpuop_func_ce op_e0e0_22_ff; extern cpuop_func_ce op_e0e8_22_nf; extern cpuop_func_ce op_e0e8_22_ff; extern cpuop_func_ce op_e0f0_22_nf; extern cpuop_func_ce op_e0f0_22_ff; extern cpuop_func_ce op_e0f8_22_nf; extern cpuop_func_ce op_e0f8_22_ff; extern cpuop_func_ce op_e0f9_22_nf; extern cpuop_func_ce op_e0f9_22_ff; extern cpuop_func_ce op_e100_22_nf; extern cpuop_func_ce op_e100_22_ff; extern cpuop_func_ce op_e108_22_nf; extern cpuop_func_ce op_e108_22_ff; extern cpuop_func_ce op_e110_22_nf; extern cpuop_func_ce op_e110_22_ff; extern cpuop_func_ce op_e118_22_nf; extern cpuop_func_ce op_e118_22_ff; extern cpuop_func_ce op_e120_22_nf; extern cpuop_func_ce op_e120_22_ff; extern cpuop_func_ce op_e128_22_nf; extern cpuop_func_ce op_e128_22_ff; extern cpuop_func_ce op_e130_22_nf; extern cpuop_func_ce op_e130_22_ff; extern cpuop_func_ce op_e138_22_nf; extern cpuop_func_ce op_e138_22_ff; extern cpuop_func_ce op_e140_22_nf; extern cpuop_func_ce op_e140_22_ff; extern cpuop_func_ce op_e148_22_nf; extern cpuop_func_ce op_e148_22_ff; extern cpuop_func_ce op_e150_22_nf; extern cpuop_func_ce op_e150_22_ff; extern cpuop_func_ce op_e158_22_nf; extern cpuop_func_ce op_e158_22_ff; extern cpuop_func_ce op_e160_22_nf; extern cpuop_func_ce op_e160_22_ff; extern cpuop_func_ce op_e168_22_nf; extern cpuop_func_ce op_e168_22_ff; extern cpuop_func_ce op_e170_22_nf; extern cpuop_func_ce op_e170_22_ff; extern cpuop_func_ce op_e178_22_nf; extern cpuop_func_ce op_e178_22_ff; extern cpuop_func_ce op_e180_22_nf; extern cpuop_func_ce op_e180_22_ff; extern cpuop_func_ce op_e188_22_nf; extern cpuop_func_ce op_e188_22_ff; extern cpuop_func_ce op_e190_22_nf; extern cpuop_func_ce op_e190_22_ff; extern cpuop_func_ce op_e198_22_nf; extern cpuop_func_ce op_e198_22_ff; extern cpuop_func_ce op_e1a0_22_nf; extern cpuop_func_ce op_e1a0_22_ff; extern cpuop_func_ce op_e1a8_22_nf; extern cpuop_func_ce op_e1a8_22_ff; extern cpuop_func_ce op_e1b0_22_nf; extern cpuop_func_ce op_e1b0_22_ff; extern cpuop_func_ce op_e1b8_22_nf; extern cpuop_func_ce op_e1b8_22_ff; extern cpuop_func_ce op_e1d0_22_nf; extern cpuop_func_ce op_e1d0_22_ff; extern cpuop_func_ce op_e1d8_22_nf; extern cpuop_func_ce op_e1d8_22_ff; extern cpuop_func_ce op_e1e0_22_nf; extern cpuop_func_ce op_e1e0_22_ff; extern cpuop_func_ce op_e1e8_22_nf; extern cpuop_func_ce op_e1e8_22_ff; extern cpuop_func_ce op_e1f0_22_nf; extern cpuop_func_ce op_e1f0_22_ff; extern cpuop_func_ce op_e1f8_22_nf; extern cpuop_func_ce op_e1f8_22_ff; extern cpuop_func_ce op_e1f9_22_nf; extern cpuop_func_ce op_e1f9_22_ff; extern cpuop_func_ce op_e2d0_22_nf; extern cpuop_func_ce op_e2d0_22_ff; extern cpuop_func_ce op_e2d8_22_nf; extern cpuop_func_ce op_e2d8_22_ff; extern cpuop_func_ce op_e2e0_22_nf; extern cpuop_func_ce op_e2e0_22_ff; extern cpuop_func_ce op_e2e8_22_nf; extern cpuop_func_ce op_e2e8_22_ff; extern cpuop_func_ce op_e2f0_22_nf; extern cpuop_func_ce op_e2f0_22_ff; extern cpuop_func_ce op_e2f8_22_nf; extern cpuop_func_ce op_e2f8_22_ff; extern cpuop_func_ce op_e2f9_22_nf; extern cpuop_func_ce op_e2f9_22_ff; extern cpuop_func_ce op_e3d0_22_nf; extern cpuop_func_ce op_e3d0_22_ff; extern cpuop_func_ce op_e3d8_22_nf; extern cpuop_func_ce op_e3d8_22_ff; extern cpuop_func_ce op_e3e0_22_nf; extern cpuop_func_ce op_e3e0_22_ff; extern cpuop_func_ce op_e3e8_22_nf; extern cpuop_func_ce op_e3e8_22_ff; extern cpuop_func_ce op_e3f0_22_nf; extern cpuop_func_ce op_e3f0_22_ff; extern cpuop_func_ce op_e3f8_22_nf; extern cpuop_func_ce op_e3f8_22_ff; extern cpuop_func_ce op_e3f9_22_nf; extern cpuop_func_ce op_e3f9_22_ff; extern cpuop_func_ce op_e4d0_22_nf; extern cpuop_func_ce op_e4d0_22_ff; extern cpuop_func_ce op_e4d8_22_nf; extern cpuop_func_ce op_e4d8_22_ff; extern cpuop_func_ce op_e4e0_22_nf; extern cpuop_func_ce op_e4e0_22_ff; extern cpuop_func_ce op_e4e8_22_nf; extern cpuop_func_ce op_e4e8_22_ff; extern cpuop_func_ce op_e4f0_22_nf; extern cpuop_func_ce op_e4f0_22_ff; extern cpuop_func_ce op_e4f8_22_nf; extern cpuop_func_ce op_e4f8_22_ff; extern cpuop_func_ce op_e4f9_22_nf; extern cpuop_func_ce op_e4f9_22_ff; extern cpuop_func_ce op_e5d0_22_nf; extern cpuop_func_ce op_e5d0_22_ff; extern cpuop_func_ce op_e5d8_22_nf; extern cpuop_func_ce op_e5d8_22_ff; extern cpuop_func_ce op_e5e0_22_nf; extern cpuop_func_ce op_e5e0_22_ff; extern cpuop_func_ce op_e5e8_22_nf; extern cpuop_func_ce op_e5e8_22_ff; extern cpuop_func_ce op_e5f0_22_nf; extern cpuop_func_ce op_e5f0_22_ff; extern cpuop_func_ce op_e5f8_22_nf; extern cpuop_func_ce op_e5f8_22_ff; extern cpuop_func_ce op_e5f9_22_nf; extern cpuop_func_ce op_e5f9_22_ff; extern cpuop_func_ce op_e6d0_22_nf; extern cpuop_func_ce op_e6d0_22_ff; extern cpuop_func_ce op_e6d8_22_nf; extern cpuop_func_ce op_e6d8_22_ff; extern cpuop_func_ce op_e6e0_22_nf; extern cpuop_func_ce op_e6e0_22_ff; extern cpuop_func_ce op_e6e8_22_nf; extern cpuop_func_ce op_e6e8_22_ff; extern cpuop_func_ce op_e6f0_22_nf; extern cpuop_func_ce op_e6f0_22_ff; extern cpuop_func_ce op_e6f8_22_nf; extern cpuop_func_ce op_e6f8_22_ff; extern cpuop_func_ce op_e6f9_22_nf; extern cpuop_func_ce op_e6f9_22_ff; extern cpuop_func_ce op_e7d0_22_nf; extern cpuop_func_ce op_e7d0_22_ff; extern cpuop_func_ce op_e7d8_22_nf; extern cpuop_func_ce op_e7d8_22_ff; extern cpuop_func_ce op_e7e0_22_nf; extern cpuop_func_ce op_e7e0_22_ff; extern cpuop_func_ce op_e7e8_22_nf; extern cpuop_func_ce op_e7e8_22_ff; extern cpuop_func_ce op_e7f0_22_nf; extern cpuop_func_ce op_e7f0_22_ff; extern cpuop_func_ce op_e7f8_22_nf; extern cpuop_func_ce op_e7f8_22_ff; extern cpuop_func_ce op_e7f9_22_nf; extern cpuop_func_ce op_e7f9_22_ff; extern cpuop_func_ce op_e8c0_22_nf; extern cpuop_func_ce op_e8c0_22_ff; extern cpuop_func_ce op_e8d0_22_nf; extern cpuop_func_ce op_e8d0_22_ff; extern cpuop_func_ce op_e8e8_22_nf; extern cpuop_func_ce op_e8e8_22_ff; extern cpuop_func_ce op_e8f0_22_nf; extern cpuop_func_ce op_e8f0_22_ff; extern cpuop_func_ce op_e8f8_22_nf; extern cpuop_func_ce op_e8f8_22_ff; extern cpuop_func_ce op_e8f9_22_nf; extern cpuop_func_ce op_e8f9_22_ff; extern cpuop_func_ce op_e8fa_22_nf; extern cpuop_func_ce op_e8fa_22_ff; extern cpuop_func_ce op_e8fb_22_nf; extern cpuop_func_ce op_e8fb_22_ff; extern cpuop_func_ce op_e9c0_22_nf; extern cpuop_func_ce op_e9c0_22_ff; extern cpuop_func_ce op_e9d0_22_nf; extern cpuop_func_ce op_e9d0_22_ff; extern cpuop_func_ce op_e9e8_22_nf; extern cpuop_func_ce op_e9e8_22_ff; extern cpuop_func_ce op_e9f0_22_nf; extern cpuop_func_ce op_e9f0_22_ff; extern cpuop_func_ce op_e9f8_22_nf; extern cpuop_func_ce op_e9f8_22_ff; extern cpuop_func_ce op_e9f9_22_nf; extern cpuop_func_ce op_e9f9_22_ff; extern cpuop_func_ce op_e9fa_22_nf; extern cpuop_func_ce op_e9fa_22_ff; extern cpuop_func_ce op_e9fb_22_nf; extern cpuop_func_ce op_e9fb_22_ff; extern cpuop_func_ce op_eac0_22_nf; extern cpuop_func_ce op_eac0_22_ff; extern cpuop_func_ce op_ead0_22_nf; extern cpuop_func_ce op_ead0_22_ff; extern cpuop_func_ce op_eae8_22_nf; extern cpuop_func_ce op_eae8_22_ff; extern cpuop_func_ce op_eaf0_22_nf; extern cpuop_func_ce op_eaf0_22_ff; extern cpuop_func_ce op_eaf8_22_nf; extern cpuop_func_ce op_eaf8_22_ff; extern cpuop_func_ce op_eaf9_22_nf; extern cpuop_func_ce op_eaf9_22_ff; extern cpuop_func_ce op_ebc0_22_nf; extern cpuop_func_ce op_ebc0_22_ff; extern cpuop_func_ce op_ebd0_22_nf; extern cpuop_func_ce op_ebd0_22_ff; extern cpuop_func_ce op_ebe8_22_nf; extern cpuop_func_ce op_ebe8_22_ff; extern cpuop_func_ce op_ebf0_22_nf; extern cpuop_func_ce op_ebf0_22_ff; extern cpuop_func_ce op_ebf8_22_nf; extern cpuop_func_ce op_ebf8_22_ff; extern cpuop_func_ce op_ebf9_22_nf; extern cpuop_func_ce op_ebf9_22_ff; extern cpuop_func_ce op_ebfa_22_nf; extern cpuop_func_ce op_ebfa_22_ff; extern cpuop_func_ce op_ebfb_22_nf; extern cpuop_func_ce op_ebfb_22_ff; extern cpuop_func_ce op_ecc0_22_nf; extern cpuop_func_ce op_ecc0_22_ff; extern cpuop_func_ce op_ecd0_22_nf; extern cpuop_func_ce op_ecd0_22_ff; extern cpuop_func_ce op_ece8_22_nf; extern cpuop_func_ce op_ece8_22_ff; extern cpuop_func_ce op_ecf0_22_nf; extern cpuop_func_ce op_ecf0_22_ff; extern cpuop_func_ce op_ecf8_22_nf; extern cpuop_func_ce op_ecf8_22_ff; extern cpuop_func_ce op_ecf9_22_nf; extern cpuop_func_ce op_ecf9_22_ff; extern cpuop_func_ce op_edc0_22_nf; extern cpuop_func_ce op_edc0_22_ff; extern cpuop_func_ce op_edd0_22_nf; extern cpuop_func_ce op_edd0_22_ff; extern cpuop_func_ce op_ede8_22_nf; extern cpuop_func_ce op_ede8_22_ff; extern cpuop_func_ce op_edf0_22_nf; extern cpuop_func_ce op_edf0_22_ff; extern cpuop_func_ce op_edf8_22_nf; extern cpuop_func_ce op_edf8_22_ff; extern cpuop_func_ce op_edf9_22_nf; extern cpuop_func_ce op_edf9_22_ff; extern cpuop_func_ce op_edfa_22_nf; extern cpuop_func_ce op_edfa_22_ff; extern cpuop_func_ce op_edfb_22_nf; extern cpuop_func_ce op_edfb_22_ff; extern cpuop_func_ce op_eec0_22_nf; extern cpuop_func_ce op_eec0_22_ff; extern cpuop_func_ce op_eed0_22_nf; extern cpuop_func_ce op_eed0_22_ff; extern cpuop_func_ce op_eee8_22_nf; extern cpuop_func_ce op_eee8_22_ff; extern cpuop_func_ce op_eef0_22_nf; extern cpuop_func_ce op_eef0_22_ff; extern cpuop_func_ce op_eef8_22_nf; extern cpuop_func_ce op_eef8_22_ff; extern cpuop_func_ce op_eef9_22_nf; extern cpuop_func_ce op_eef9_22_ff; extern cpuop_func_ce op_efc0_22_nf; extern cpuop_func_ce op_efc0_22_ff; extern cpuop_func_ce op_efd0_22_nf; extern cpuop_func_ce op_efd0_22_ff; extern cpuop_func_ce op_efe8_22_nf; extern cpuop_func_ce op_efe8_22_ff; extern cpuop_func_ce op_eff0_22_nf; extern cpuop_func_ce op_eff0_22_ff; extern cpuop_func_ce op_eff8_22_nf; extern cpuop_func_ce op_eff8_22_ff; extern cpuop_func_ce op_eff9_22_nf; extern cpuop_func_ce op_eff9_22_ff; extern cpuop_func_ce op_f000_22_nf; extern cpuop_func_ce op_f000_22_ff; extern cpuop_func_ce op_f008_22_nf; extern cpuop_func_ce op_f008_22_ff; extern cpuop_func_ce op_f010_22_nf; extern cpuop_func_ce op_f010_22_ff; extern cpuop_func_ce op_f018_22_nf; extern cpuop_func_ce op_f018_22_ff; extern cpuop_func_ce op_f020_22_nf; extern cpuop_func_ce op_f020_22_ff; extern cpuop_func_ce op_f028_22_nf; extern cpuop_func_ce op_f028_22_ff; extern cpuop_func_ce op_f030_22_nf; extern cpuop_func_ce op_f030_22_ff; extern cpuop_func_ce op_f038_22_nf; extern cpuop_func_ce op_f038_22_ff; extern cpuop_func_ce op_f039_22_nf; extern cpuop_func_ce op_f039_22_ff; extern cpuop_func_ce op_f200_22_nf; extern cpuop_func_ce op_f200_22_ff; extern cpuop_func_ce op_f208_22_nf; extern cpuop_func_ce op_f208_22_ff; extern cpuop_func_ce op_f210_22_nf; extern cpuop_func_ce op_f210_22_ff; extern cpuop_func_ce op_f218_22_nf; extern cpuop_func_ce op_f218_22_ff; extern cpuop_func_ce op_f220_22_nf; extern cpuop_func_ce op_f220_22_ff; extern cpuop_func_ce op_f228_22_nf; extern cpuop_func_ce op_f228_22_ff; extern cpuop_func_ce op_f230_22_nf; extern cpuop_func_ce op_f230_22_ff; extern cpuop_func_ce op_f238_22_nf; extern cpuop_func_ce op_f238_22_ff; extern cpuop_func_ce op_f239_22_nf; extern cpuop_func_ce op_f239_22_ff; extern cpuop_func_ce op_f23a_22_nf; extern cpuop_func_ce op_f23a_22_ff; extern cpuop_func_ce op_f23b_22_nf; extern cpuop_func_ce op_f23b_22_ff; extern cpuop_func_ce op_f23c_22_nf; extern cpuop_func_ce op_f23c_22_ff; extern cpuop_func_ce op_f240_22_nf; extern cpuop_func_ce op_f240_22_ff; extern cpuop_func_ce op_f248_22_nf; extern cpuop_func_ce op_f248_22_ff; extern cpuop_func_ce op_f250_22_nf; extern cpuop_func_ce op_f250_22_ff; extern cpuop_func_ce op_f258_22_nf; extern cpuop_func_ce op_f258_22_ff; extern cpuop_func_ce op_f260_22_nf; extern cpuop_func_ce op_f260_22_ff; extern cpuop_func_ce op_f268_22_nf; extern cpuop_func_ce op_f268_22_ff; extern cpuop_func_ce op_f270_22_nf; extern cpuop_func_ce op_f270_22_ff; extern cpuop_func_ce op_f278_22_nf; extern cpuop_func_ce op_f278_22_ff; extern cpuop_func_ce op_f279_22_nf; extern cpuop_func_ce op_f279_22_ff; extern cpuop_func_ce op_f27a_22_nf; extern cpuop_func_ce op_f27a_22_ff; extern cpuop_func_ce op_f27b_22_nf; extern cpuop_func_ce op_f27b_22_ff; extern cpuop_func_ce op_f27c_22_nf; extern cpuop_func_ce op_f27c_22_ff; extern cpuop_func_ce op_f280_22_nf; extern cpuop_func_ce op_f280_22_ff; extern cpuop_func_ce op_f2c0_22_nf; extern cpuop_func_ce op_f2c0_22_ff; extern cpuop_func_ce op_f310_22_nf; extern cpuop_func_ce op_f310_22_ff; extern cpuop_func_ce op_f320_22_nf; extern cpuop_func_ce op_f320_22_ff; extern cpuop_func_ce op_f328_22_nf; extern cpuop_func_ce op_f328_22_ff; extern cpuop_func_ce op_f330_22_nf; extern cpuop_func_ce op_f330_22_ff; extern cpuop_func_ce op_f338_22_nf; extern cpuop_func_ce op_f338_22_ff; extern cpuop_func_ce op_f339_22_nf; extern cpuop_func_ce op_f339_22_ff; extern cpuop_func_ce op_f350_22_nf; extern cpuop_func_ce op_f350_22_ff; extern cpuop_func_ce op_f358_22_nf; extern cpuop_func_ce op_f358_22_ff; extern cpuop_func_ce op_f368_22_nf; extern cpuop_func_ce op_f368_22_ff; extern cpuop_func_ce op_f370_22_nf; extern cpuop_func_ce op_f370_22_ff; extern cpuop_func_ce op_f378_22_nf; extern cpuop_func_ce op_f378_22_ff; extern cpuop_func_ce op_f379_22_nf; extern cpuop_func_ce op_f379_22_ff; extern cpuop_func_ce op_f37a_22_nf; extern cpuop_func_ce op_f37a_22_ff; extern cpuop_func_ce op_f37b_22_nf; extern cpuop_func_ce op_f37b_22_ff; extern cpuop_func_ce op_f408_22_nf; extern cpuop_func_ce op_f408_22_ff; extern cpuop_func_ce op_f410_22_nf; extern cpuop_func_ce op_f410_22_ff; extern cpuop_func_ce op_f418_22_nf; extern cpuop_func_ce op_f418_22_ff; extern cpuop_func_ce op_f419_22_nf; extern cpuop_func_ce op_f419_22_ff; extern cpuop_func_ce op_f41a_22_nf; extern cpuop_func_ce op_f41a_22_ff; extern cpuop_func_ce op_f41b_22_nf; extern cpuop_func_ce op_f41b_22_ff; extern cpuop_func_ce op_f41c_22_nf; extern cpuop_func_ce op_f41c_22_ff; extern cpuop_func_ce op_f41d_22_nf; extern cpuop_func_ce op_f41d_22_ff; extern cpuop_func_ce op_f41e_22_nf; extern cpuop_func_ce op_f41e_22_ff; extern cpuop_func_ce op_f41f_22_nf; extern cpuop_func_ce op_f41f_22_ff; extern cpuop_func_ce op_f428_22_nf; extern cpuop_func_ce op_f428_22_ff; extern cpuop_func_ce op_f430_22_nf; extern cpuop_func_ce op_f430_22_ff; extern cpuop_func_ce op_f438_22_nf; extern cpuop_func_ce op_f438_22_ff; extern cpuop_func_ce op_f439_22_nf; extern cpuop_func_ce op_f439_22_ff; extern cpuop_func_ce op_f43a_22_nf; extern cpuop_func_ce op_f43a_22_ff; extern cpuop_func_ce op_f43b_22_nf; extern cpuop_func_ce op_f43b_22_ff; extern cpuop_func_ce op_f43c_22_nf; extern cpuop_func_ce op_f43c_22_ff; extern cpuop_func_ce op_f43d_22_nf; extern cpuop_func_ce op_f43d_22_ff; extern cpuop_func_ce op_f43e_22_nf; extern cpuop_func_ce op_f43e_22_ff; extern cpuop_func_ce op_f43f_22_nf; extern cpuop_func_ce op_f43f_22_ff; extern cpuop_func_ce op_f500_22_nf; extern cpuop_func_ce op_f500_22_ff; extern cpuop_func_ce op_f508_22_nf; extern cpuop_func_ce op_f508_22_ff; extern cpuop_func_ce op_f510_22_nf; extern cpuop_func_ce op_f510_22_ff; extern cpuop_func_ce op_f518_22_nf; extern cpuop_func_ce op_f518_22_ff; extern cpuop_func_ce op_f548_22_nf; extern cpuop_func_ce op_f548_22_ff; extern cpuop_func_ce op_f568_22_nf; extern cpuop_func_ce op_f568_22_ff; extern cpuop_func_ce op_f588_22_nf; extern cpuop_func_ce op_f588_22_ff; extern cpuop_func_ce op_f5c8_22_nf; extern cpuop_func_ce op_f5c8_22_ff; extern cpuop_func_ce op_f600_22_nf; extern cpuop_func_ce op_f600_22_ff; extern cpuop_func_ce op_f608_22_nf; extern cpuop_func_ce op_f608_22_ff; extern cpuop_func_ce op_f610_22_nf; extern cpuop_func_ce op_f610_22_ff; extern cpuop_func_ce op_f618_22_nf; extern cpuop_func_ce op_f618_22_ff; extern cpuop_func_ce op_f620_22_nf; extern cpuop_func_ce op_f620_22_ff; extern cpuop_func_ce op_f800_22_nf; extern cpuop_func_ce op_f800_22_ff; extern cpuop_func_ce op_4800_24_nf; extern cpuop_func_ce op_4800_24_ff; extern cpuop_func_ce op_4810_24_nf; extern cpuop_func_ce op_4810_24_ff; extern cpuop_func_ce op_4818_24_nf; extern cpuop_func_ce op_4818_24_ff; extern cpuop_func_ce op_4820_24_nf; extern cpuop_func_ce op_4820_24_ff; extern cpuop_func_ce op_4828_24_nf; extern cpuop_func_ce op_4828_24_ff; extern cpuop_func_ce op_4830_24_nf; extern cpuop_func_ce op_4830_24_ff; extern cpuop_func_ce op_4838_24_nf; extern cpuop_func_ce op_4838_24_ff; extern cpuop_func_ce op_4839_24_nf; extern cpuop_func_ce op_4839_24_ff; extern cpuop_func_ce op_8100_24_nf; extern cpuop_func_ce op_8100_24_ff; extern cpuop_func_ce op_8108_24_nf; extern cpuop_func_ce op_8108_24_ff; extern cpuop_func_ce op_c100_24_nf; extern cpuop_func_ce op_c100_24_ff; extern cpuop_func_ce op_c108_24_nf; extern cpuop_func_ce op_c108_24_ff; extern cpuop_func op_0000_31_nf; extern cpuop_func op_0000_31_ff; extern cpuop_func op_0010_31_nf; extern cpuop_func op_0010_31_ff; extern cpuop_func op_0018_31_nf; extern cpuop_func op_0018_31_ff; extern cpuop_func op_0020_31_nf; extern cpuop_func op_0020_31_ff; extern cpuop_func op_0028_31_nf; extern cpuop_func op_0028_31_ff; extern cpuop_func op_0030_31_nf; extern cpuop_func op_0030_31_ff; extern cpuop_func op_0038_31_nf; extern cpuop_func op_0038_31_ff; extern cpuop_func op_0039_31_nf; extern cpuop_func op_0039_31_ff; extern cpuop_func op_003c_31_nf; extern cpuop_func op_003c_31_ff; extern cpuop_func op_0040_31_nf; extern cpuop_func op_0040_31_ff; extern cpuop_func op_0050_31_nf; extern cpuop_func op_0050_31_ff; extern cpuop_func op_0058_31_nf; extern cpuop_func op_0058_31_ff; extern cpuop_func op_0060_31_nf; extern cpuop_func op_0060_31_ff; extern cpuop_func op_0068_31_nf; extern cpuop_func op_0068_31_ff; extern cpuop_func op_0070_31_nf; extern cpuop_func op_0070_31_ff; extern cpuop_func op_0078_31_nf; extern cpuop_func op_0078_31_ff; extern cpuop_func op_0079_31_nf; extern cpuop_func op_0079_31_ff; extern cpuop_func op_007c_31_nf; extern cpuop_func op_007c_31_ff; extern cpuop_func op_0080_31_nf; extern cpuop_func op_0080_31_ff; extern cpuop_func op_0090_31_nf; extern cpuop_func op_0090_31_ff; extern cpuop_func op_0098_31_nf; extern cpuop_func op_0098_31_ff; extern cpuop_func op_00a0_31_nf; extern cpuop_func op_00a0_31_ff; extern cpuop_func op_00a8_31_nf; extern cpuop_func op_00a8_31_ff; extern cpuop_func op_00b0_31_nf; extern cpuop_func op_00b0_31_ff; extern cpuop_func op_00b8_31_nf; extern cpuop_func op_00b8_31_ff; extern cpuop_func op_00b9_31_nf; extern cpuop_func op_00b9_31_ff; extern cpuop_func op_00d0_31_nf; extern cpuop_func op_00d0_31_ff; extern cpuop_func op_00e8_31_nf; extern cpuop_func op_00e8_31_ff; extern cpuop_func op_00f0_31_nf; extern cpuop_func op_00f0_31_ff; extern cpuop_func op_00f8_31_nf; extern cpuop_func op_00f8_31_ff; extern cpuop_func op_00f9_31_nf; extern cpuop_func op_00f9_31_ff; extern cpuop_func op_00fa_31_nf; extern cpuop_func op_00fa_31_ff; extern cpuop_func op_00fb_31_nf; extern cpuop_func op_00fb_31_ff; extern cpuop_func op_0100_31_nf; extern cpuop_func op_0100_31_ff; extern cpuop_func op_0108_31_nf; extern cpuop_func op_0108_31_ff; extern cpuop_func op_0110_31_nf; extern cpuop_func op_0110_31_ff; extern cpuop_func op_0118_31_nf; extern cpuop_func op_0118_31_ff; extern cpuop_func op_0120_31_nf; extern cpuop_func op_0120_31_ff; extern cpuop_func op_0128_31_nf; extern cpuop_func op_0128_31_ff; extern cpuop_func op_0130_31_nf; extern cpuop_func op_0130_31_ff; extern cpuop_func op_0138_31_nf; extern cpuop_func op_0138_31_ff; extern cpuop_func op_0139_31_nf; extern cpuop_func op_0139_31_ff; extern cpuop_func op_013a_31_nf; extern cpuop_func op_013a_31_ff; extern cpuop_func op_013b_31_nf; extern cpuop_func op_013b_31_ff; extern cpuop_func op_013c_31_nf; extern cpuop_func op_013c_31_ff; extern cpuop_func op_0140_31_nf; extern cpuop_func op_0140_31_ff; extern cpuop_func op_0148_31_nf; extern cpuop_func op_0148_31_ff; extern cpuop_func op_0150_31_nf; extern cpuop_func op_0150_31_ff; extern cpuop_func op_0158_31_nf; extern cpuop_func op_0158_31_ff; extern cpuop_func op_0160_31_nf; extern cpuop_func op_0160_31_ff; extern cpuop_func op_0168_31_nf; extern cpuop_func op_0168_31_ff; extern cpuop_func op_0170_31_nf; extern cpuop_func op_0170_31_ff; extern cpuop_func op_0178_31_nf; extern cpuop_func op_0178_31_ff; extern cpuop_func op_0179_31_nf; extern cpuop_func op_0179_31_ff; extern cpuop_func op_017a_31_nf; extern cpuop_func op_017a_31_ff; extern cpuop_func op_017b_31_nf; extern cpuop_func op_017b_31_ff; extern cpuop_func op_0180_31_nf; extern cpuop_func op_0180_31_ff; extern cpuop_func op_0188_31_nf; extern cpuop_func op_0188_31_ff; extern cpuop_func op_0190_31_nf; extern cpuop_func op_0190_31_ff; extern cpuop_func op_0198_31_nf; extern cpuop_func op_0198_31_ff; extern cpuop_func op_01a0_31_nf; extern cpuop_func op_01a0_31_ff; extern cpuop_func op_01a8_31_nf; extern cpuop_func op_01a8_31_ff; extern cpuop_func op_01b0_31_nf; extern cpuop_func op_01b0_31_ff; extern cpuop_func op_01b8_31_nf; extern cpuop_func op_01b8_31_ff; extern cpuop_func op_01b9_31_nf; extern cpuop_func op_01b9_31_ff; extern cpuop_func op_01ba_31_nf; extern cpuop_func op_01ba_31_ff; extern cpuop_func op_01bb_31_nf; extern cpuop_func op_01bb_31_ff; extern cpuop_func op_01c0_31_nf; extern cpuop_func op_01c0_31_ff; extern cpuop_func op_01c8_31_nf; extern cpuop_func op_01c8_31_ff; extern cpuop_func op_01d0_31_nf; extern cpuop_func op_01d0_31_ff; extern cpuop_func op_01d8_31_nf; extern cpuop_func op_01d8_31_ff; extern cpuop_func op_01e0_31_nf; extern cpuop_func op_01e0_31_ff; extern cpuop_func op_01e8_31_nf; extern cpuop_func op_01e8_31_ff; extern cpuop_func op_01f0_31_nf; extern cpuop_func op_01f0_31_ff; extern cpuop_func op_01f8_31_nf; extern cpuop_func op_01f8_31_ff; extern cpuop_func op_01f9_31_nf; extern cpuop_func op_01f9_31_ff; extern cpuop_func op_01fa_31_nf; extern cpuop_func op_01fa_31_ff; extern cpuop_func op_01fb_31_nf; extern cpuop_func op_01fb_31_ff; extern cpuop_func op_0200_31_nf; extern cpuop_func op_0200_31_ff; extern cpuop_func op_0210_31_nf; extern cpuop_func op_0210_31_ff; extern cpuop_func op_0218_31_nf; extern cpuop_func op_0218_31_ff; extern cpuop_func op_0220_31_nf; extern cpuop_func op_0220_31_ff; extern cpuop_func op_0228_31_nf; extern cpuop_func op_0228_31_ff; extern cpuop_func op_0230_31_nf; extern cpuop_func op_0230_31_ff; extern cpuop_func op_0238_31_nf; extern cpuop_func op_0238_31_ff; extern cpuop_func op_0239_31_nf; extern cpuop_func op_0239_31_ff; extern cpuop_func op_023c_31_nf; extern cpuop_func op_023c_31_ff; extern cpuop_func op_0240_31_nf; extern cpuop_func op_0240_31_ff; extern cpuop_func op_0250_31_nf; extern cpuop_func op_0250_31_ff; extern cpuop_func op_0258_31_nf; extern cpuop_func op_0258_31_ff; extern cpuop_func op_0260_31_nf; extern cpuop_func op_0260_31_ff; extern cpuop_func op_0268_31_nf; extern cpuop_func op_0268_31_ff; extern cpuop_func op_0270_31_nf; extern cpuop_func op_0270_31_ff; extern cpuop_func op_0278_31_nf; extern cpuop_func op_0278_31_ff; extern cpuop_func op_0279_31_nf; extern cpuop_func op_0279_31_ff; extern cpuop_func op_027c_31_nf; extern cpuop_func op_027c_31_ff; extern cpuop_func op_0280_31_nf; extern cpuop_func op_0280_31_ff; extern cpuop_func op_0290_31_nf; extern cpuop_func op_0290_31_ff; extern cpuop_func op_0298_31_nf; extern cpuop_func op_0298_31_ff; extern cpuop_func op_02a0_31_nf; extern cpuop_func op_02a0_31_ff; extern cpuop_func op_02a8_31_nf; extern cpuop_func op_02a8_31_ff; extern cpuop_func op_02b0_31_nf; extern cpuop_func op_02b0_31_ff; extern cpuop_func op_02b8_31_nf; extern cpuop_func op_02b8_31_ff; extern cpuop_func op_02b9_31_nf; extern cpuop_func op_02b9_31_ff; extern cpuop_func op_02d0_31_nf; extern cpuop_func op_02d0_31_ff; extern cpuop_func op_02e8_31_nf; extern cpuop_func op_02e8_31_ff; extern cpuop_func op_02f0_31_nf; extern cpuop_func op_02f0_31_ff; extern cpuop_func op_02f8_31_nf; extern cpuop_func op_02f8_31_ff; extern cpuop_func op_02f9_31_nf; extern cpuop_func op_02f9_31_ff; extern cpuop_func op_02fa_31_nf; extern cpuop_func op_02fa_31_ff; extern cpuop_func op_02fb_31_nf; extern cpuop_func op_02fb_31_ff; extern cpuop_func op_0400_31_nf; extern cpuop_func op_0400_31_ff; extern cpuop_func op_0410_31_nf; extern cpuop_func op_0410_31_ff; extern cpuop_func op_0418_31_nf; extern cpuop_func op_0418_31_ff; extern cpuop_func op_0420_31_nf; extern cpuop_func op_0420_31_ff; extern cpuop_func op_0428_31_nf; extern cpuop_func op_0428_31_ff; extern cpuop_func op_0430_31_nf; extern cpuop_func op_0430_31_ff; extern cpuop_func op_0438_31_nf; extern cpuop_func op_0438_31_ff; extern cpuop_func op_0439_31_nf; extern cpuop_func op_0439_31_ff; extern cpuop_func op_0440_31_nf; extern cpuop_func op_0440_31_ff; extern cpuop_func op_0450_31_nf; extern cpuop_func op_0450_31_ff; extern cpuop_func op_0458_31_nf; extern cpuop_func op_0458_31_ff; extern cpuop_func op_0460_31_nf; extern cpuop_func op_0460_31_ff; extern cpuop_func op_0468_31_nf; extern cpuop_func op_0468_31_ff; extern cpuop_func op_0470_31_nf; extern cpuop_func op_0470_31_ff; extern cpuop_func op_0478_31_nf; extern cpuop_func op_0478_31_ff; extern cpuop_func op_0479_31_nf; extern cpuop_func op_0479_31_ff; extern cpuop_func op_0480_31_nf; extern cpuop_func op_0480_31_ff; extern cpuop_func op_0490_31_nf; extern cpuop_func op_0490_31_ff; extern cpuop_func op_0498_31_nf; extern cpuop_func op_0498_31_ff; extern cpuop_func op_04a0_31_nf; extern cpuop_func op_04a0_31_ff; extern cpuop_func op_04a8_31_nf; extern cpuop_func op_04a8_31_ff; extern cpuop_func op_04b0_31_nf; extern cpuop_func op_04b0_31_ff; extern cpuop_func op_04b8_31_nf; extern cpuop_func op_04b8_31_ff; extern cpuop_func op_04b9_31_nf; extern cpuop_func op_04b9_31_ff; extern cpuop_func op_04d0_31_nf; extern cpuop_func op_04d0_31_ff; extern cpuop_func op_04e8_31_nf; extern cpuop_func op_04e8_31_ff; extern cpuop_func op_04f0_31_nf; extern cpuop_func op_04f0_31_ff; extern cpuop_func op_04f8_31_nf; extern cpuop_func op_04f8_31_ff; extern cpuop_func op_04f9_31_nf; extern cpuop_func op_04f9_31_ff; extern cpuop_func op_04fa_31_nf; extern cpuop_func op_04fa_31_ff; extern cpuop_func op_04fb_31_nf; extern cpuop_func op_04fb_31_ff; extern cpuop_func op_0600_31_nf; extern cpuop_func op_0600_31_ff; extern cpuop_func op_0610_31_nf; extern cpuop_func op_0610_31_ff; extern cpuop_func op_0618_31_nf; extern cpuop_func op_0618_31_ff; extern cpuop_func op_0620_31_nf; extern cpuop_func op_0620_31_ff; extern cpuop_func op_0628_31_nf; extern cpuop_func op_0628_31_ff; extern cpuop_func op_0630_31_nf; extern cpuop_func op_0630_31_ff; extern cpuop_func op_0638_31_nf; extern cpuop_func op_0638_31_ff; extern cpuop_func op_0639_31_nf; extern cpuop_func op_0639_31_ff; extern cpuop_func op_0640_31_nf; extern cpuop_func op_0640_31_ff; extern cpuop_func op_0650_31_nf; extern cpuop_func op_0650_31_ff; extern cpuop_func op_0658_31_nf; extern cpuop_func op_0658_31_ff; extern cpuop_func op_0660_31_nf; extern cpuop_func op_0660_31_ff; extern cpuop_func op_0668_31_nf; extern cpuop_func op_0668_31_ff; extern cpuop_func op_0670_31_nf; extern cpuop_func op_0670_31_ff; extern cpuop_func op_0678_31_nf; extern cpuop_func op_0678_31_ff; extern cpuop_func op_0679_31_nf; extern cpuop_func op_0679_31_ff; extern cpuop_func op_0680_31_nf; extern cpuop_func op_0680_31_ff; extern cpuop_func op_0690_31_nf; extern cpuop_func op_0690_31_ff; extern cpuop_func op_0698_31_nf; extern cpuop_func op_0698_31_ff; extern cpuop_func op_06a0_31_nf; extern cpuop_func op_06a0_31_ff; extern cpuop_func op_06a8_31_nf; extern cpuop_func op_06a8_31_ff; extern cpuop_func op_06b0_31_nf; extern cpuop_func op_06b0_31_ff; extern cpuop_func op_06b8_31_nf; extern cpuop_func op_06b8_31_ff; extern cpuop_func op_06b9_31_nf; extern cpuop_func op_06b9_31_ff; extern cpuop_func op_06c0_31_nf; extern cpuop_func op_06c0_31_ff; extern cpuop_func op_06c8_31_nf; extern cpuop_func op_06c8_31_ff; extern cpuop_func op_06d0_31_nf; extern cpuop_func op_06d0_31_ff; extern cpuop_func op_06e8_31_nf; extern cpuop_func op_06e8_31_ff; extern cpuop_func op_06f0_31_nf; extern cpuop_func op_06f0_31_ff; extern cpuop_func op_06f8_31_nf; extern cpuop_func op_06f8_31_ff; extern cpuop_func op_06f9_31_nf; extern cpuop_func op_06f9_31_ff; extern cpuop_func op_06fa_31_nf; extern cpuop_func op_06fa_31_ff; extern cpuop_func op_06fb_31_nf; extern cpuop_func op_06fb_31_ff; extern cpuop_func op_0800_31_nf; extern cpuop_func op_0800_31_ff; extern cpuop_func op_0810_31_nf; extern cpuop_func op_0810_31_ff; extern cpuop_func op_0818_31_nf; extern cpuop_func op_0818_31_ff; extern cpuop_func op_0820_31_nf; extern cpuop_func op_0820_31_ff; extern cpuop_func op_0828_31_nf; extern cpuop_func op_0828_31_ff; extern cpuop_func op_0830_31_nf; extern cpuop_func op_0830_31_ff; extern cpuop_func op_0838_31_nf; extern cpuop_func op_0838_31_ff; extern cpuop_func op_0839_31_nf; extern cpuop_func op_0839_31_ff; extern cpuop_func op_083a_31_nf; extern cpuop_func op_083a_31_ff; extern cpuop_func op_083b_31_nf; extern cpuop_func op_083b_31_ff; extern cpuop_func op_083c_31_nf; extern cpuop_func op_083c_31_ff; extern cpuop_func op_0840_31_nf; extern cpuop_func op_0840_31_ff; extern cpuop_func op_0850_31_nf; extern cpuop_func op_0850_31_ff; extern cpuop_func op_0858_31_nf; extern cpuop_func op_0858_31_ff; extern cpuop_func op_0860_31_nf; extern cpuop_func op_0860_31_ff; extern cpuop_func op_0868_31_nf; extern cpuop_func op_0868_31_ff; extern cpuop_func op_0870_31_nf; extern cpuop_func op_0870_31_ff; extern cpuop_func op_0878_31_nf; extern cpuop_func op_0878_31_ff; extern cpuop_func op_0879_31_nf; extern cpuop_func op_0879_31_ff; extern cpuop_func op_087a_31_nf; extern cpuop_func op_087a_31_ff; extern cpuop_func op_087b_31_nf; extern cpuop_func op_087b_31_ff; extern cpuop_func op_0880_31_nf; extern cpuop_func op_0880_31_ff; extern cpuop_func op_0890_31_nf; extern cpuop_func op_0890_31_ff; extern cpuop_func op_0898_31_nf; extern cpuop_func op_0898_31_ff; extern cpuop_func op_08a0_31_nf; extern cpuop_func op_08a0_31_ff; extern cpuop_func op_08a8_31_nf; extern cpuop_func op_08a8_31_ff; extern cpuop_func op_08b0_31_nf; extern cpuop_func op_08b0_31_ff; extern cpuop_func op_08b8_31_nf; extern cpuop_func op_08b8_31_ff; extern cpuop_func op_08b9_31_nf; extern cpuop_func op_08b9_31_ff; extern cpuop_func op_08ba_31_nf; extern cpuop_func op_08ba_31_ff; extern cpuop_func op_08bb_31_nf; extern cpuop_func op_08bb_31_ff; extern cpuop_func op_08c0_31_nf; extern cpuop_func op_08c0_31_ff; extern cpuop_func op_08d0_31_nf; extern cpuop_func op_08d0_31_ff; extern cpuop_func op_08d8_31_nf; extern cpuop_func op_08d8_31_ff; extern cpuop_func op_08e0_31_nf; extern cpuop_func op_08e0_31_ff; extern cpuop_func op_08e8_31_nf; extern cpuop_func op_08e8_31_ff; extern cpuop_func op_08f0_31_nf; extern cpuop_func op_08f0_31_ff; extern cpuop_func op_08f8_31_nf; extern cpuop_func op_08f8_31_ff; extern cpuop_func op_08f9_31_nf; extern cpuop_func op_08f9_31_ff; extern cpuop_func op_08fa_31_nf; extern cpuop_func op_08fa_31_ff; extern cpuop_func op_08fb_31_nf; extern cpuop_func op_08fb_31_ff; extern cpuop_func op_0a00_31_nf; extern cpuop_func op_0a00_31_ff; extern cpuop_func op_0a10_31_nf; extern cpuop_func op_0a10_31_ff; extern cpuop_func op_0a18_31_nf; extern cpuop_func op_0a18_31_ff; extern cpuop_func op_0a20_31_nf; extern cpuop_func op_0a20_31_ff; extern cpuop_func op_0a28_31_nf; extern cpuop_func op_0a28_31_ff; extern cpuop_func op_0a30_31_nf; extern cpuop_func op_0a30_31_ff; extern cpuop_func op_0a38_31_nf; extern cpuop_func op_0a38_31_ff; extern cpuop_func op_0a39_31_nf; extern cpuop_func op_0a39_31_ff; extern cpuop_func op_0a3c_31_nf; extern cpuop_func op_0a3c_31_ff; extern cpuop_func op_0a40_31_nf; extern cpuop_func op_0a40_31_ff; extern cpuop_func op_0a50_31_nf; extern cpuop_func op_0a50_31_ff; extern cpuop_func op_0a58_31_nf; extern cpuop_func op_0a58_31_ff; extern cpuop_func op_0a60_31_nf; extern cpuop_func op_0a60_31_ff; extern cpuop_func op_0a68_31_nf; extern cpuop_func op_0a68_31_ff; extern cpuop_func op_0a70_31_nf; extern cpuop_func op_0a70_31_ff; extern cpuop_func op_0a78_31_nf; extern cpuop_func op_0a78_31_ff; extern cpuop_func op_0a79_31_nf; extern cpuop_func op_0a79_31_ff; extern cpuop_func op_0a7c_31_nf; extern cpuop_func op_0a7c_31_ff; extern cpuop_func op_0a80_31_nf; extern cpuop_func op_0a80_31_ff; extern cpuop_func op_0a90_31_nf; extern cpuop_func op_0a90_31_ff; extern cpuop_func op_0a98_31_nf; extern cpuop_func op_0a98_31_ff; extern cpuop_func op_0aa0_31_nf; extern cpuop_func op_0aa0_31_ff; extern cpuop_func op_0aa8_31_nf; extern cpuop_func op_0aa8_31_ff; extern cpuop_func op_0ab0_31_nf; extern cpuop_func op_0ab0_31_ff; extern cpuop_func op_0ab8_31_nf; extern cpuop_func op_0ab8_31_ff; extern cpuop_func op_0ab9_31_nf; extern cpuop_func op_0ab9_31_ff; extern cpuop_func op_0ad0_31_nf; extern cpuop_func op_0ad0_31_ff; extern cpuop_func op_0ad8_31_nf; extern cpuop_func op_0ad8_31_ff; extern cpuop_func op_0ae0_31_nf; extern cpuop_func op_0ae0_31_ff; extern cpuop_func op_0ae8_31_nf; extern cpuop_func op_0ae8_31_ff; extern cpuop_func op_0af0_31_nf; extern cpuop_func op_0af0_31_ff; extern cpuop_func op_0af8_31_nf; extern cpuop_func op_0af8_31_ff; extern cpuop_func op_0af9_31_nf; extern cpuop_func op_0af9_31_ff; extern cpuop_func op_0c00_31_nf; extern cpuop_func op_0c00_31_ff; extern cpuop_func op_0c10_31_nf; extern cpuop_func op_0c10_31_ff; extern cpuop_func op_0c18_31_nf; extern cpuop_func op_0c18_31_ff; extern cpuop_func op_0c20_31_nf; extern cpuop_func op_0c20_31_ff; extern cpuop_func op_0c28_31_nf; extern cpuop_func op_0c28_31_ff; extern cpuop_func op_0c30_31_nf; extern cpuop_func op_0c30_31_ff; extern cpuop_func op_0c38_31_nf; extern cpuop_func op_0c38_31_ff; extern cpuop_func op_0c39_31_nf; extern cpuop_func op_0c39_31_ff; extern cpuop_func op_0c3a_31_nf; extern cpuop_func op_0c3a_31_ff; extern cpuop_func op_0c3b_31_nf; extern cpuop_func op_0c3b_31_ff; extern cpuop_func op_0c40_31_nf; extern cpuop_func op_0c40_31_ff; extern cpuop_func op_0c50_31_nf; extern cpuop_func op_0c50_31_ff; extern cpuop_func op_0c58_31_nf; extern cpuop_func op_0c58_31_ff; extern cpuop_func op_0c60_31_nf; extern cpuop_func op_0c60_31_ff; extern cpuop_func op_0c68_31_nf; extern cpuop_func op_0c68_31_ff; extern cpuop_func op_0c70_31_nf; extern cpuop_func op_0c70_31_ff; extern cpuop_func op_0c78_31_nf; extern cpuop_func op_0c78_31_ff; extern cpuop_func op_0c79_31_nf; extern cpuop_func op_0c79_31_ff; extern cpuop_func op_0c7a_31_nf; extern cpuop_func op_0c7a_31_ff; extern cpuop_func op_0c7b_31_nf; extern cpuop_func op_0c7b_31_ff; extern cpuop_func op_0c80_31_nf; extern cpuop_func op_0c80_31_ff; extern cpuop_func op_0c90_31_nf; extern cpuop_func op_0c90_31_ff; extern cpuop_func op_0c98_31_nf; extern cpuop_func op_0c98_31_ff; extern cpuop_func op_0ca0_31_nf; extern cpuop_func op_0ca0_31_ff; extern cpuop_func op_0ca8_31_nf; extern cpuop_func op_0ca8_31_ff; extern cpuop_func op_0cb0_31_nf; extern cpuop_func op_0cb0_31_ff; extern cpuop_func op_0cb8_31_nf; extern cpuop_func op_0cb8_31_ff; extern cpuop_func op_0cb9_31_nf; extern cpuop_func op_0cb9_31_ff; extern cpuop_func op_0cba_31_nf; extern cpuop_func op_0cba_31_ff; extern cpuop_func op_0cbb_31_nf; extern cpuop_func op_0cbb_31_ff; extern cpuop_func op_0cd0_31_nf; extern cpuop_func op_0cd0_31_ff; extern cpuop_func op_0cd8_31_nf; extern cpuop_func op_0cd8_31_ff; extern cpuop_func op_0ce0_31_nf; extern cpuop_func op_0ce0_31_ff; extern cpuop_func op_0ce8_31_nf; extern cpuop_func op_0ce8_31_ff; extern cpuop_func op_0cf0_31_nf; extern cpuop_func op_0cf0_31_ff; extern cpuop_func op_0cf8_31_nf; extern cpuop_func op_0cf8_31_ff; extern cpuop_func op_0cf9_31_nf; extern cpuop_func op_0cf9_31_ff; extern cpuop_func op_0cfc_31_nf; extern cpuop_func op_0cfc_31_ff; extern cpuop_func op_0e10_31_nf; extern cpuop_func op_0e10_31_ff; extern cpuop_func op_0e18_31_nf; extern cpuop_func op_0e18_31_ff; extern cpuop_func op_0e20_31_nf; extern cpuop_func op_0e20_31_ff; extern cpuop_func op_0e28_31_nf; extern cpuop_func op_0e28_31_ff; extern cpuop_func op_0e30_31_nf; extern cpuop_func op_0e30_31_ff; extern cpuop_func op_0e38_31_nf; extern cpuop_func op_0e38_31_ff; extern cpuop_func op_0e39_31_nf; extern cpuop_func op_0e39_31_ff; extern cpuop_func op_0e50_31_nf; extern cpuop_func op_0e50_31_ff; extern cpuop_func op_0e58_31_nf; extern cpuop_func op_0e58_31_ff; extern cpuop_func op_0e60_31_nf; extern cpuop_func op_0e60_31_ff; extern cpuop_func op_0e68_31_nf; extern cpuop_func op_0e68_31_ff; extern cpuop_func op_0e70_31_nf; extern cpuop_func op_0e70_31_ff; extern cpuop_func op_0e78_31_nf; extern cpuop_func op_0e78_31_ff; extern cpuop_func op_0e79_31_nf; extern cpuop_func op_0e79_31_ff; extern cpuop_func op_0e90_31_nf; extern cpuop_func op_0e90_31_ff; extern cpuop_func op_0e98_31_nf; extern cpuop_func op_0e98_31_ff; extern cpuop_func op_0ea0_31_nf; extern cpuop_func op_0ea0_31_ff; extern cpuop_func op_0ea8_31_nf; extern cpuop_func op_0ea8_31_ff; extern cpuop_func op_0eb0_31_nf; extern cpuop_func op_0eb0_31_ff; extern cpuop_func op_0eb8_31_nf; extern cpuop_func op_0eb8_31_ff; extern cpuop_func op_0eb9_31_nf; extern cpuop_func op_0eb9_31_ff; extern cpuop_func op_0ed0_31_nf; extern cpuop_func op_0ed0_31_ff; extern cpuop_func op_0ed8_31_nf; extern cpuop_func op_0ed8_31_ff; extern cpuop_func op_0ee0_31_nf; extern cpuop_func op_0ee0_31_ff; extern cpuop_func op_0ee8_31_nf; extern cpuop_func op_0ee8_31_ff; extern cpuop_func op_0ef0_31_nf; extern cpuop_func op_0ef0_31_ff; extern cpuop_func op_0ef8_31_nf; extern cpuop_func op_0ef8_31_ff; extern cpuop_func op_0ef9_31_nf; extern cpuop_func op_0ef9_31_ff; extern cpuop_func op_0efc_31_nf; extern cpuop_func op_0efc_31_ff; extern cpuop_func op_1000_31_nf; extern cpuop_func op_1000_31_ff; extern cpuop_func op_1010_31_nf; extern cpuop_func op_1010_31_ff; extern cpuop_func op_1018_31_nf; extern cpuop_func op_1018_31_ff; extern cpuop_func op_1020_31_nf; extern cpuop_func op_1020_31_ff; extern cpuop_func op_1028_31_nf; extern cpuop_func op_1028_31_ff; extern cpuop_func op_1030_31_nf; extern cpuop_func op_1030_31_ff; extern cpuop_func op_1038_31_nf; extern cpuop_func op_1038_31_ff; extern cpuop_func op_1039_31_nf; extern cpuop_func op_1039_31_ff; extern cpuop_func op_103a_31_nf; extern cpuop_func op_103a_31_ff; extern cpuop_func op_103b_31_nf; extern cpuop_func op_103b_31_ff; extern cpuop_func op_103c_31_nf; extern cpuop_func op_103c_31_ff; extern cpuop_func op_1080_31_nf; extern cpuop_func op_1080_31_ff; extern cpuop_func op_1090_31_nf; extern cpuop_func op_1090_31_ff; extern cpuop_func op_1098_31_nf; extern cpuop_func op_1098_31_ff; extern cpuop_func op_10a0_31_nf; extern cpuop_func op_10a0_31_ff; extern cpuop_func op_10a8_31_nf; extern cpuop_func op_10a8_31_ff; extern cpuop_func op_10b0_31_nf; extern cpuop_func op_10b0_31_ff; extern cpuop_func op_10b8_31_nf; extern cpuop_func op_10b8_31_ff; extern cpuop_func op_10b9_31_nf; extern cpuop_func op_10b9_31_ff; extern cpuop_func op_10ba_31_nf; extern cpuop_func op_10ba_31_ff; extern cpuop_func op_10bb_31_nf; extern cpuop_func op_10bb_31_ff; extern cpuop_func op_10bc_31_nf; extern cpuop_func op_10bc_31_ff; extern cpuop_func op_10c0_31_nf; extern cpuop_func op_10c0_31_ff; extern cpuop_func op_10d0_31_nf; extern cpuop_func op_10d0_31_ff; extern cpuop_func op_10d8_31_nf; extern cpuop_func op_10d8_31_ff; extern cpuop_func op_10e0_31_nf; extern cpuop_func op_10e0_31_ff; extern cpuop_func op_10e8_31_nf; extern cpuop_func op_10e8_31_ff; extern cpuop_func op_10f0_31_nf; extern cpuop_func op_10f0_31_ff; extern cpuop_func op_10f8_31_nf; extern cpuop_func op_10f8_31_ff; extern cpuop_func op_10f9_31_nf; extern cpuop_func op_10f9_31_ff; extern cpuop_func op_10fa_31_nf; extern cpuop_func op_10fa_31_ff; extern cpuop_func op_10fb_31_nf; extern cpuop_func op_10fb_31_ff; extern cpuop_func op_10fc_31_nf; extern cpuop_func op_10fc_31_ff; extern cpuop_func op_1100_31_nf; extern cpuop_func op_1100_31_ff; extern cpuop_func op_1110_31_nf; extern cpuop_func op_1110_31_ff; extern cpuop_func op_1118_31_nf; extern cpuop_func op_1118_31_ff; extern cpuop_func op_1120_31_nf; extern cpuop_func op_1120_31_ff; extern cpuop_func op_1128_31_nf; extern cpuop_func op_1128_31_ff; extern cpuop_func op_1130_31_nf; extern cpuop_func op_1130_31_ff; extern cpuop_func op_1138_31_nf; extern cpuop_func op_1138_31_ff; extern cpuop_func op_1139_31_nf; extern cpuop_func op_1139_31_ff; extern cpuop_func op_113a_31_nf; extern cpuop_func op_113a_31_ff; extern cpuop_func op_113b_31_nf; extern cpuop_func op_113b_31_ff; extern cpuop_func op_113c_31_nf; extern cpuop_func op_113c_31_ff; extern cpuop_func op_1140_31_nf; extern cpuop_func op_1140_31_ff; extern cpuop_func op_1150_31_nf; extern cpuop_func op_1150_31_ff; extern cpuop_func op_1158_31_nf; extern cpuop_func op_1158_31_ff; extern cpuop_func op_1160_31_nf; extern cpuop_func op_1160_31_ff; extern cpuop_func op_1168_31_nf; extern cpuop_func op_1168_31_ff; extern cpuop_func op_1170_31_nf; extern cpuop_func op_1170_31_ff; extern cpuop_func op_1178_31_nf; extern cpuop_func op_1178_31_ff; extern cpuop_func op_1179_31_nf; extern cpuop_func op_1179_31_ff; extern cpuop_func op_117a_31_nf; extern cpuop_func op_117a_31_ff; extern cpuop_func op_117b_31_nf; extern cpuop_func op_117b_31_ff; extern cpuop_func op_117c_31_nf; extern cpuop_func op_117c_31_ff; extern cpuop_func op_1180_31_nf; extern cpuop_func op_1180_31_ff; extern cpuop_func op_1190_31_nf; extern cpuop_func op_1190_31_ff; extern cpuop_func op_1198_31_nf; extern cpuop_func op_1198_31_ff; extern cpuop_func op_11a0_31_nf; extern cpuop_func op_11a0_31_ff; extern cpuop_func op_11a8_31_nf; extern cpuop_func op_11a8_31_ff; extern cpuop_func op_11b0_31_nf; extern cpuop_func op_11b0_31_ff; extern cpuop_func op_11b8_31_nf; extern cpuop_func op_11b8_31_ff; extern cpuop_func op_11b9_31_nf; extern cpuop_func op_11b9_31_ff; extern cpuop_func op_11ba_31_nf; extern cpuop_func op_11ba_31_ff; extern cpuop_func op_11bb_31_nf; extern cpuop_func op_11bb_31_ff; extern cpuop_func op_11bc_31_nf; extern cpuop_func op_11bc_31_ff; extern cpuop_func op_11c0_31_nf; extern cpuop_func op_11c0_31_ff; extern cpuop_func op_11d0_31_nf; extern cpuop_func op_11d0_31_ff; extern cpuop_func op_11d8_31_nf; extern cpuop_func op_11d8_31_ff; extern cpuop_func op_11e0_31_nf; extern cpuop_func op_11e0_31_ff; extern cpuop_func op_11e8_31_nf; extern cpuop_func op_11e8_31_ff; extern cpuop_func op_11f0_31_nf; extern cpuop_func op_11f0_31_ff; extern cpuop_func op_11f8_31_nf; extern cpuop_func op_11f8_31_ff; extern cpuop_func op_11f9_31_nf; extern cpuop_func op_11f9_31_ff; extern cpuop_func op_11fa_31_nf; extern cpuop_func op_11fa_31_ff; extern cpuop_func op_11fb_31_nf; extern cpuop_func op_11fb_31_ff; extern cpuop_func op_11fc_31_nf; extern cpuop_func op_11fc_31_ff; extern cpuop_func op_13c0_31_nf; extern cpuop_func op_13c0_31_ff; extern cpuop_func op_13d0_31_nf; extern cpuop_func op_13d0_31_ff; extern cpuop_func op_13d8_31_nf; extern cpuop_func op_13d8_31_ff; extern cpuop_func op_13e0_31_nf; extern cpuop_func op_13e0_31_ff; extern cpuop_func op_13e8_31_nf; extern cpuop_func op_13e8_31_ff; extern cpuop_func op_13f0_31_nf; extern cpuop_func op_13f0_31_ff; extern cpuop_func op_13f8_31_nf; extern cpuop_func op_13f8_31_ff; extern cpuop_func op_13f9_31_nf; extern cpuop_func op_13f9_31_ff; extern cpuop_func op_13fa_31_nf; extern cpuop_func op_13fa_31_ff; extern cpuop_func op_13fb_31_nf; extern cpuop_func op_13fb_31_ff; extern cpuop_func op_13fc_31_nf; extern cpuop_func op_13fc_31_ff; extern cpuop_func op_2000_31_nf; extern cpuop_func op_2000_31_ff; extern cpuop_func op_2008_31_nf; extern cpuop_func op_2008_31_ff; extern cpuop_func op_2010_31_nf; extern cpuop_func op_2010_31_ff; extern cpuop_func op_2018_31_nf; extern cpuop_func op_2018_31_ff; extern cpuop_func op_2020_31_nf; extern cpuop_func op_2020_31_ff; extern cpuop_func op_2028_31_nf; extern cpuop_func op_2028_31_ff; extern cpuop_func op_2030_31_nf; extern cpuop_func op_2030_31_ff; extern cpuop_func op_2038_31_nf; extern cpuop_func op_2038_31_ff; extern cpuop_func op_2039_31_nf; extern cpuop_func op_2039_31_ff; extern cpuop_func op_203a_31_nf; extern cpuop_func op_203a_31_ff; extern cpuop_func op_203b_31_nf; extern cpuop_func op_203b_31_ff; extern cpuop_func op_203c_31_nf; extern cpuop_func op_203c_31_ff; extern cpuop_func op_2040_31_nf; extern cpuop_func op_2040_31_ff; extern cpuop_func op_2048_31_nf; extern cpuop_func op_2048_31_ff; extern cpuop_func op_2050_31_nf; extern cpuop_func op_2050_31_ff; extern cpuop_func op_2058_31_nf; extern cpuop_func op_2058_31_ff; extern cpuop_func op_2060_31_nf; extern cpuop_func op_2060_31_ff; extern cpuop_func op_2068_31_nf; extern cpuop_func op_2068_31_ff; extern cpuop_func op_2070_31_nf; extern cpuop_func op_2070_31_ff; extern cpuop_func op_2078_31_nf; extern cpuop_func op_2078_31_ff; extern cpuop_func op_2079_31_nf; extern cpuop_func op_2079_31_ff; extern cpuop_func op_207a_31_nf; extern cpuop_func op_207a_31_ff; extern cpuop_func op_207b_31_nf; extern cpuop_func op_207b_31_ff; extern cpuop_func op_207c_31_nf; extern cpuop_func op_207c_31_ff; extern cpuop_func op_2080_31_nf; extern cpuop_func op_2080_31_ff; extern cpuop_func op_2088_31_nf; extern cpuop_func op_2088_31_ff; extern cpuop_func op_2090_31_nf; extern cpuop_func op_2090_31_ff; extern cpuop_func op_2098_31_nf; extern cpuop_func op_2098_31_ff; extern cpuop_func op_20a0_31_nf; extern cpuop_func op_20a0_31_ff; extern cpuop_func op_20a8_31_nf; extern cpuop_func op_20a8_31_ff; extern cpuop_func op_20b0_31_nf; extern cpuop_func op_20b0_31_ff; extern cpuop_func op_20b8_31_nf; extern cpuop_func op_20b8_31_ff; extern cpuop_func op_20b9_31_nf; extern cpuop_func op_20b9_31_ff; extern cpuop_func op_20ba_31_nf; extern cpuop_func op_20ba_31_ff; extern cpuop_func op_20bb_31_nf; extern cpuop_func op_20bb_31_ff; extern cpuop_func op_20bc_31_nf; extern cpuop_func op_20bc_31_ff; extern cpuop_func op_20c0_31_nf; extern cpuop_func op_20c0_31_ff; extern cpuop_func op_20c8_31_nf; extern cpuop_func op_20c8_31_ff; extern cpuop_func op_20d0_31_nf; extern cpuop_func op_20d0_31_ff; extern cpuop_func op_20d8_31_nf; extern cpuop_func op_20d8_31_ff; extern cpuop_func op_20e0_31_nf; extern cpuop_func op_20e0_31_ff; extern cpuop_func op_20e8_31_nf; extern cpuop_func op_20e8_31_ff; extern cpuop_func op_20f0_31_nf; extern cpuop_func op_20f0_31_ff; extern cpuop_func op_20f8_31_nf; extern cpuop_func op_20f8_31_ff; extern cpuop_func op_20f9_31_nf; extern cpuop_func op_20f9_31_ff; extern cpuop_func op_20fa_31_nf; extern cpuop_func op_20fa_31_ff; extern cpuop_func op_20fb_31_nf; extern cpuop_func op_20fb_31_ff; extern cpuop_func op_20fc_31_nf; extern cpuop_func op_20fc_31_ff; extern cpuop_func op_2100_31_nf; extern cpuop_func op_2100_31_ff; extern cpuop_func op_2108_31_nf; extern cpuop_func op_2108_31_ff; extern cpuop_func op_2110_31_nf; extern cpuop_func op_2110_31_ff; extern cpuop_func op_2118_31_nf; extern cpuop_func op_2118_31_ff; extern cpuop_func op_2120_31_nf; extern cpuop_func op_2120_31_ff; extern cpuop_func op_2128_31_nf; extern cpuop_func op_2128_31_ff; extern cpuop_func op_2130_31_nf; extern cpuop_func op_2130_31_ff; extern cpuop_func op_2138_31_nf; extern cpuop_func op_2138_31_ff; extern cpuop_func op_2139_31_nf; extern cpuop_func op_2139_31_ff; extern cpuop_func op_213a_31_nf; extern cpuop_func op_213a_31_ff; extern cpuop_func op_213b_31_nf; extern cpuop_func op_213b_31_ff; extern cpuop_func op_213c_31_nf; extern cpuop_func op_213c_31_ff; extern cpuop_func op_2140_31_nf; extern cpuop_func op_2140_31_ff; extern cpuop_func op_2148_31_nf; extern cpuop_func op_2148_31_ff; extern cpuop_func op_2150_31_nf; extern cpuop_func op_2150_31_ff; extern cpuop_func op_2158_31_nf; extern cpuop_func op_2158_31_ff; extern cpuop_func op_2160_31_nf; extern cpuop_func op_2160_31_ff; extern cpuop_func op_2168_31_nf; extern cpuop_func op_2168_31_ff; extern cpuop_func op_2170_31_nf; extern cpuop_func op_2170_31_ff; extern cpuop_func op_2178_31_nf; extern cpuop_func op_2178_31_ff; extern cpuop_func op_2179_31_nf; extern cpuop_func op_2179_31_ff; extern cpuop_func op_217a_31_nf; extern cpuop_func op_217a_31_ff; extern cpuop_func op_217b_31_nf; extern cpuop_func op_217b_31_ff; extern cpuop_func op_217c_31_nf; extern cpuop_func op_217c_31_ff; extern cpuop_func op_2180_31_nf; extern cpuop_func op_2180_31_ff; extern cpuop_func op_2188_31_nf; extern cpuop_func op_2188_31_ff; extern cpuop_func op_2190_31_nf; extern cpuop_func op_2190_31_ff; extern cpuop_func op_2198_31_nf; extern cpuop_func op_2198_31_ff; extern cpuop_func op_21a0_31_nf; extern cpuop_func op_21a0_31_ff; extern cpuop_func op_21a8_31_nf; extern cpuop_func op_21a8_31_ff; extern cpuop_func op_21b0_31_nf; extern cpuop_func op_21b0_31_ff; extern cpuop_func op_21b8_31_nf; extern cpuop_func op_21b8_31_ff; extern cpuop_func op_21b9_31_nf; extern cpuop_func op_21b9_31_ff; extern cpuop_func op_21ba_31_nf; extern cpuop_func op_21ba_31_ff; extern cpuop_func op_21bb_31_nf; extern cpuop_func op_21bb_31_ff; extern cpuop_func op_21bc_31_nf; extern cpuop_func op_21bc_31_ff; extern cpuop_func op_21c0_31_nf; extern cpuop_func op_21c0_31_ff; extern cpuop_func op_21c8_31_nf; extern cpuop_func op_21c8_31_ff; extern cpuop_func op_21d0_31_nf; extern cpuop_func op_21d0_31_ff; extern cpuop_func op_21d8_31_nf; extern cpuop_func op_21d8_31_ff; extern cpuop_func op_21e0_31_nf; extern cpuop_func op_21e0_31_ff; extern cpuop_func op_21e8_31_nf; extern cpuop_func op_21e8_31_ff; extern cpuop_func op_21f0_31_nf; extern cpuop_func op_21f0_31_ff; extern cpuop_func op_21f8_31_nf; extern cpuop_func op_21f8_31_ff; extern cpuop_func op_21f9_31_nf; extern cpuop_func op_21f9_31_ff; extern cpuop_func op_21fa_31_nf; extern cpuop_func op_21fa_31_ff; extern cpuop_func op_21fb_31_nf; extern cpuop_func op_21fb_31_ff; extern cpuop_func op_21fc_31_nf; extern cpuop_func op_21fc_31_ff; extern cpuop_func op_23c0_31_nf; extern cpuop_func op_23c0_31_ff; extern cpuop_func op_23c8_31_nf; extern cpuop_func op_23c8_31_ff; extern cpuop_func op_23d0_31_nf; extern cpuop_func op_23d0_31_ff; extern cpuop_func op_23d8_31_nf; extern cpuop_func op_23d8_31_ff; extern cpuop_func op_23e0_31_nf; extern cpuop_func op_23e0_31_ff; extern cpuop_func op_23e8_31_nf; extern cpuop_func op_23e8_31_ff; extern cpuop_func op_23f0_31_nf; extern cpuop_func op_23f0_31_ff; extern cpuop_func op_23f8_31_nf; extern cpuop_func op_23f8_31_ff; extern cpuop_func op_23f9_31_nf; extern cpuop_func op_23f9_31_ff; extern cpuop_func op_23fa_31_nf; extern cpuop_func op_23fa_31_ff; extern cpuop_func op_23fb_31_nf; extern cpuop_func op_23fb_31_ff; extern cpuop_func op_23fc_31_nf; extern cpuop_func op_23fc_31_ff; extern cpuop_func op_3000_31_nf; extern cpuop_func op_3000_31_ff; extern cpuop_func op_3008_31_nf; extern cpuop_func op_3008_31_ff; extern cpuop_func op_3010_31_nf; extern cpuop_func op_3010_31_ff; extern cpuop_func op_3018_31_nf; extern cpuop_func op_3018_31_ff; extern cpuop_func op_3020_31_nf; extern cpuop_func op_3020_31_ff; extern cpuop_func op_3028_31_nf; extern cpuop_func op_3028_31_ff; extern cpuop_func op_3030_31_nf; extern cpuop_func op_3030_31_ff; extern cpuop_func op_3038_31_nf; extern cpuop_func op_3038_31_ff; extern cpuop_func op_3039_31_nf; extern cpuop_func op_3039_31_ff; extern cpuop_func op_303a_31_nf; extern cpuop_func op_303a_31_ff; extern cpuop_func op_303b_31_nf; extern cpuop_func op_303b_31_ff; extern cpuop_func op_303c_31_nf; extern cpuop_func op_303c_31_ff; extern cpuop_func op_3040_31_nf; extern cpuop_func op_3040_31_ff; extern cpuop_func op_3048_31_nf; extern cpuop_func op_3048_31_ff; extern cpuop_func op_3050_31_nf; extern cpuop_func op_3050_31_ff; extern cpuop_func op_3058_31_nf; extern cpuop_func op_3058_31_ff; extern cpuop_func op_3060_31_nf; extern cpuop_func op_3060_31_ff; extern cpuop_func op_3068_31_nf; extern cpuop_func op_3068_31_ff; extern cpuop_func op_3070_31_nf; extern cpuop_func op_3070_31_ff; extern cpuop_func op_3078_31_nf; extern cpuop_func op_3078_31_ff; extern cpuop_func op_3079_31_nf; extern cpuop_func op_3079_31_ff; extern cpuop_func op_307a_31_nf; extern cpuop_func op_307a_31_ff; extern cpuop_func op_307b_31_nf; extern cpuop_func op_307b_31_ff; extern cpuop_func op_307c_31_nf; extern cpuop_func op_307c_31_ff; extern cpuop_func op_3080_31_nf; extern cpuop_func op_3080_31_ff; extern cpuop_func op_3088_31_nf; extern cpuop_func op_3088_31_ff; extern cpuop_func op_3090_31_nf; extern cpuop_func op_3090_31_ff; extern cpuop_func op_3098_31_nf; extern cpuop_func op_3098_31_ff; extern cpuop_func op_30a0_31_nf; extern cpuop_func op_30a0_31_ff; extern cpuop_func op_30a8_31_nf; extern cpuop_func op_30a8_31_ff; extern cpuop_func op_30b0_31_nf; extern cpuop_func op_30b0_31_ff; extern cpuop_func op_30b8_31_nf; extern cpuop_func op_30b8_31_ff; extern cpuop_func op_30b9_31_nf; extern cpuop_func op_30b9_31_ff; extern cpuop_func op_30ba_31_nf; extern cpuop_func op_30ba_31_ff; extern cpuop_func op_30bb_31_nf; extern cpuop_func op_30bb_31_ff; extern cpuop_func op_30bc_31_nf; extern cpuop_func op_30bc_31_ff; extern cpuop_func op_30c0_31_nf; extern cpuop_func op_30c0_31_ff; extern cpuop_func op_30c8_31_nf; extern cpuop_func op_30c8_31_ff; extern cpuop_func op_30d0_31_nf; extern cpuop_func op_30d0_31_ff; extern cpuop_func op_30d8_31_nf; extern cpuop_func op_30d8_31_ff; extern cpuop_func op_30e0_31_nf; extern cpuop_func op_30e0_31_ff; extern cpuop_func op_30e8_31_nf; extern cpuop_func op_30e8_31_ff; extern cpuop_func op_30f0_31_nf; extern cpuop_func op_30f0_31_ff; extern cpuop_func op_30f8_31_nf; extern cpuop_func op_30f8_31_ff; extern cpuop_func op_30f9_31_nf; extern cpuop_func op_30f9_31_ff; extern cpuop_func op_30fa_31_nf; extern cpuop_func op_30fa_31_ff; extern cpuop_func op_30fb_31_nf; extern cpuop_func op_30fb_31_ff; extern cpuop_func op_30fc_31_nf; extern cpuop_func op_30fc_31_ff; extern cpuop_func op_3100_31_nf; extern cpuop_func op_3100_31_ff; extern cpuop_func op_3108_31_nf; extern cpuop_func op_3108_31_ff; extern cpuop_func op_3110_31_nf; extern cpuop_func op_3110_31_ff; extern cpuop_func op_3118_31_nf; extern cpuop_func op_3118_31_ff; extern cpuop_func op_3120_31_nf; extern cpuop_func op_3120_31_ff; extern cpuop_func op_3128_31_nf; extern cpuop_func op_3128_31_ff; extern cpuop_func op_3130_31_nf; extern cpuop_func op_3130_31_ff; extern cpuop_func op_3138_31_nf; extern cpuop_func op_3138_31_ff; extern cpuop_func op_3139_31_nf; extern cpuop_func op_3139_31_ff; extern cpuop_func op_313a_31_nf; extern cpuop_func op_313a_31_ff; extern cpuop_func op_313b_31_nf; extern cpuop_func op_313b_31_ff; extern cpuop_func op_313c_31_nf; extern cpuop_func op_313c_31_ff; extern cpuop_func op_3140_31_nf; extern cpuop_func op_3140_31_ff; extern cpuop_func op_3148_31_nf; extern cpuop_func op_3148_31_ff; extern cpuop_func op_3150_31_nf; extern cpuop_func op_3150_31_ff; extern cpuop_func op_3158_31_nf; extern cpuop_func op_3158_31_ff; extern cpuop_func op_3160_31_nf; extern cpuop_func op_3160_31_ff; extern cpuop_func op_3168_31_nf; extern cpuop_func op_3168_31_ff; extern cpuop_func op_3170_31_nf; extern cpuop_func op_3170_31_ff; extern cpuop_func op_3178_31_nf; extern cpuop_func op_3178_31_ff; extern cpuop_func op_3179_31_nf; extern cpuop_func op_3179_31_ff; extern cpuop_func op_317a_31_nf; extern cpuop_func op_317a_31_ff; extern cpuop_func op_317b_31_nf; extern cpuop_func op_317b_31_ff; extern cpuop_func op_317c_31_nf; extern cpuop_func op_317c_31_ff; extern cpuop_func op_3180_31_nf; extern cpuop_func op_3180_31_ff; extern cpuop_func op_3188_31_nf; extern cpuop_func op_3188_31_ff; extern cpuop_func op_3190_31_nf; extern cpuop_func op_3190_31_ff; extern cpuop_func op_3198_31_nf; extern cpuop_func op_3198_31_ff; extern cpuop_func op_31a0_31_nf; extern cpuop_func op_31a0_31_ff; extern cpuop_func op_31a8_31_nf; extern cpuop_func op_31a8_31_ff; extern cpuop_func op_31b0_31_nf; extern cpuop_func op_31b0_31_ff; extern cpuop_func op_31b8_31_nf; extern cpuop_func op_31b8_31_ff; extern cpuop_func op_31b9_31_nf; extern cpuop_func op_31b9_31_ff; extern cpuop_func op_31ba_31_nf; extern cpuop_func op_31ba_31_ff; extern cpuop_func op_31bb_31_nf; extern cpuop_func op_31bb_31_ff; extern cpuop_func op_31bc_31_nf; extern cpuop_func op_31bc_31_ff; extern cpuop_func op_31c0_31_nf; extern cpuop_func op_31c0_31_ff; extern cpuop_func op_31c8_31_nf; extern cpuop_func op_31c8_31_ff; extern cpuop_func op_31d0_31_nf; extern cpuop_func op_31d0_31_ff; extern cpuop_func op_31d8_31_nf; extern cpuop_func op_31d8_31_ff; extern cpuop_func op_31e0_31_nf; extern cpuop_func op_31e0_31_ff; extern cpuop_func op_31e8_31_nf; extern cpuop_func op_31e8_31_ff; extern cpuop_func op_31f0_31_nf; extern cpuop_func op_31f0_31_ff; extern cpuop_func op_31f8_31_nf; extern cpuop_func op_31f8_31_ff; extern cpuop_func op_31f9_31_nf; extern cpuop_func op_31f9_31_ff; extern cpuop_func op_31fa_31_nf; extern cpuop_func op_31fa_31_ff; extern cpuop_func op_31fb_31_nf; extern cpuop_func op_31fb_31_ff; extern cpuop_func op_31fc_31_nf; extern cpuop_func op_31fc_31_ff; extern cpuop_func op_33c0_31_nf; extern cpuop_func op_33c0_31_ff; extern cpuop_func op_33c8_31_nf; extern cpuop_func op_33c8_31_ff; extern cpuop_func op_33d0_31_nf; extern cpuop_func op_33d0_31_ff; extern cpuop_func op_33d8_31_nf; extern cpuop_func op_33d8_31_ff; extern cpuop_func op_33e0_31_nf; extern cpuop_func op_33e0_31_ff; extern cpuop_func op_33e8_31_nf; extern cpuop_func op_33e8_31_ff; extern cpuop_func op_33f0_31_nf; extern cpuop_func op_33f0_31_ff; extern cpuop_func op_33f8_31_nf; extern cpuop_func op_33f8_31_ff; extern cpuop_func op_33f9_31_nf; extern cpuop_func op_33f9_31_ff; extern cpuop_func op_33fa_31_nf; extern cpuop_func op_33fa_31_ff; extern cpuop_func op_33fb_31_nf; extern cpuop_func op_33fb_31_ff; extern cpuop_func op_33fc_31_nf; extern cpuop_func op_33fc_31_ff; extern cpuop_func op_4000_31_nf; extern cpuop_func op_4000_31_ff; extern cpuop_func op_4010_31_nf; extern cpuop_func op_4010_31_ff; extern cpuop_func op_4018_31_nf; extern cpuop_func op_4018_31_ff; extern cpuop_func op_4020_31_nf; extern cpuop_func op_4020_31_ff; extern cpuop_func op_4028_31_nf; extern cpuop_func op_4028_31_ff; extern cpuop_func op_4030_31_nf; extern cpuop_func op_4030_31_ff; extern cpuop_func op_4038_31_nf; extern cpuop_func op_4038_31_ff; extern cpuop_func op_4039_31_nf; extern cpuop_func op_4039_31_ff; extern cpuop_func op_4040_31_nf; extern cpuop_func op_4040_31_ff; extern cpuop_func op_4050_31_nf; extern cpuop_func op_4050_31_ff; extern cpuop_func op_4058_31_nf; extern cpuop_func op_4058_31_ff; extern cpuop_func op_4060_31_nf; extern cpuop_func op_4060_31_ff; extern cpuop_func op_4068_31_nf; extern cpuop_func op_4068_31_ff; extern cpuop_func op_4070_31_nf; extern cpuop_func op_4070_31_ff; extern cpuop_func op_4078_31_nf; extern cpuop_func op_4078_31_ff; extern cpuop_func op_4079_31_nf; extern cpuop_func op_4079_31_ff; extern cpuop_func op_4080_31_nf; extern cpuop_func op_4080_31_ff; extern cpuop_func op_4090_31_nf; extern cpuop_func op_4090_31_ff; extern cpuop_func op_4098_31_nf; extern cpuop_func op_4098_31_ff; extern cpuop_func op_40a0_31_nf; extern cpuop_func op_40a0_31_ff; extern cpuop_func op_40a8_31_nf; extern cpuop_func op_40a8_31_ff; extern cpuop_func op_40b0_31_nf; extern cpuop_func op_40b0_31_ff; extern cpuop_func op_40b8_31_nf; extern cpuop_func op_40b8_31_ff; extern cpuop_func op_40b9_31_nf; extern cpuop_func op_40b9_31_ff; extern cpuop_func op_40c0_31_nf; extern cpuop_func op_40c0_31_ff; extern cpuop_func op_40d0_31_nf; extern cpuop_func op_40d0_31_ff; extern cpuop_func op_40d8_31_nf; extern cpuop_func op_40d8_31_ff; extern cpuop_func op_40e0_31_nf; extern cpuop_func op_40e0_31_ff; extern cpuop_func op_40e8_31_nf; extern cpuop_func op_40e8_31_ff; extern cpuop_func op_40f0_31_nf; extern cpuop_func op_40f0_31_ff; extern cpuop_func op_40f8_31_nf; extern cpuop_func op_40f8_31_ff; extern cpuop_func op_40f9_31_nf; extern cpuop_func op_40f9_31_ff; extern cpuop_func op_4100_31_nf; extern cpuop_func op_4100_31_ff; extern cpuop_func op_4110_31_nf; extern cpuop_func op_4110_31_ff; extern cpuop_func op_4118_31_nf; extern cpuop_func op_4118_31_ff; extern cpuop_func op_4120_31_nf; extern cpuop_func op_4120_31_ff; extern cpuop_func op_4128_31_nf; extern cpuop_func op_4128_31_ff; extern cpuop_func op_4130_31_nf; extern cpuop_func op_4130_31_ff; extern cpuop_func op_4138_31_nf; extern cpuop_func op_4138_31_ff; extern cpuop_func op_4139_31_nf; extern cpuop_func op_4139_31_ff; extern cpuop_func op_413a_31_nf; extern cpuop_func op_413a_31_ff; extern cpuop_func op_413b_31_nf; extern cpuop_func op_413b_31_ff; extern cpuop_func op_413c_31_nf; extern cpuop_func op_413c_31_ff; extern cpuop_func op_4180_31_nf; extern cpuop_func op_4180_31_ff; extern cpuop_func op_4190_31_nf; extern cpuop_func op_4190_31_ff; extern cpuop_func op_4198_31_nf; extern cpuop_func op_4198_31_ff; extern cpuop_func op_41a0_31_nf; extern cpuop_func op_41a0_31_ff; extern cpuop_func op_41a8_31_nf; extern cpuop_func op_41a8_31_ff; extern cpuop_func op_41b0_31_nf; extern cpuop_func op_41b0_31_ff; extern cpuop_func op_41b8_31_nf; extern cpuop_func op_41b8_31_ff; extern cpuop_func op_41b9_31_nf; extern cpuop_func op_41b9_31_ff; extern cpuop_func op_41ba_31_nf; extern cpuop_func op_41ba_31_ff; extern cpuop_func op_41bb_31_nf; extern cpuop_func op_41bb_31_ff; extern cpuop_func op_41bc_31_nf; extern cpuop_func op_41bc_31_ff; extern cpuop_func op_41d0_31_nf; extern cpuop_func op_41d0_31_ff; extern cpuop_func op_41e8_31_nf; extern cpuop_func op_41e8_31_ff; extern cpuop_func op_41f0_31_nf; extern cpuop_func op_41f0_31_ff; extern cpuop_func op_41f8_31_nf; extern cpuop_func op_41f8_31_ff; extern cpuop_func op_41f9_31_nf; extern cpuop_func op_41f9_31_ff; extern cpuop_func op_41fa_31_nf; extern cpuop_func op_41fa_31_ff; extern cpuop_func op_41fb_31_nf; extern cpuop_func op_41fb_31_ff; extern cpuop_func op_4200_31_nf; extern cpuop_func op_4200_31_ff; extern cpuop_func op_4210_31_nf; extern cpuop_func op_4210_31_ff; extern cpuop_func op_4218_31_nf; extern cpuop_func op_4218_31_ff; extern cpuop_func op_4220_31_nf; extern cpuop_func op_4220_31_ff; extern cpuop_func op_4228_31_nf; extern cpuop_func op_4228_31_ff; extern cpuop_func op_4230_31_nf; extern cpuop_func op_4230_31_ff; extern cpuop_func op_4238_31_nf; extern cpuop_func op_4238_31_ff; extern cpuop_func op_4239_31_nf; extern cpuop_func op_4239_31_ff; extern cpuop_func op_4240_31_nf; extern cpuop_func op_4240_31_ff; extern cpuop_func op_4250_31_nf; extern cpuop_func op_4250_31_ff; extern cpuop_func op_4258_31_nf; extern cpuop_func op_4258_31_ff; extern cpuop_func op_4260_31_nf; extern cpuop_func op_4260_31_ff; extern cpuop_func op_4268_31_nf; extern cpuop_func op_4268_31_ff; extern cpuop_func op_4270_31_nf; extern cpuop_func op_4270_31_ff; extern cpuop_func op_4278_31_nf; extern cpuop_func op_4278_31_ff; extern cpuop_func op_4279_31_nf; extern cpuop_func op_4279_31_ff; extern cpuop_func op_4280_31_nf; extern cpuop_func op_4280_31_ff; extern cpuop_func op_4290_31_nf; extern cpuop_func op_4290_31_ff; extern cpuop_func op_4298_31_nf; extern cpuop_func op_4298_31_ff; extern cpuop_func op_42a0_31_nf; extern cpuop_func op_42a0_31_ff; extern cpuop_func op_42a8_31_nf; extern cpuop_func op_42a8_31_ff; extern cpuop_func op_42b0_31_nf; extern cpuop_func op_42b0_31_ff; extern cpuop_func op_42b8_31_nf; extern cpuop_func op_42b8_31_ff; extern cpuop_func op_42b9_31_nf; extern cpuop_func op_42b9_31_ff; extern cpuop_func op_42c0_31_nf; extern cpuop_func op_42c0_31_ff; extern cpuop_func op_42d0_31_nf; extern cpuop_func op_42d0_31_ff; extern cpuop_func op_42d8_31_nf; extern cpuop_func op_42d8_31_ff; extern cpuop_func op_42e0_31_nf; extern cpuop_func op_42e0_31_ff; extern cpuop_func op_42e8_31_nf; extern cpuop_func op_42e8_31_ff; extern cpuop_func op_42f0_31_nf; extern cpuop_func op_42f0_31_ff; extern cpuop_func op_42f8_31_nf; extern cpuop_func op_42f8_31_ff; extern cpuop_func op_42f9_31_nf; extern cpuop_func op_42f9_31_ff; extern cpuop_func op_4400_31_nf; extern cpuop_func op_4400_31_ff; extern cpuop_func op_4410_31_nf; extern cpuop_func op_4410_31_ff; extern cpuop_func op_4418_31_nf; extern cpuop_func op_4418_31_ff; extern cpuop_func op_4420_31_nf; extern cpuop_func op_4420_31_ff; extern cpuop_func op_4428_31_nf; extern cpuop_func op_4428_31_ff; extern cpuop_func op_4430_31_nf; extern cpuop_func op_4430_31_ff; extern cpuop_func op_4438_31_nf; extern cpuop_func op_4438_31_ff; extern cpuop_func op_4439_31_nf; extern cpuop_func op_4439_31_ff; extern cpuop_func op_4440_31_nf; extern cpuop_func op_4440_31_ff; extern cpuop_func op_4450_31_nf; extern cpuop_func op_4450_31_ff; extern cpuop_func op_4458_31_nf; extern cpuop_func op_4458_31_ff; extern cpuop_func op_4460_31_nf; extern cpuop_func op_4460_31_ff; extern cpuop_func op_4468_31_nf; extern cpuop_func op_4468_31_ff; extern cpuop_func op_4470_31_nf; extern cpuop_func op_4470_31_ff; extern cpuop_func op_4478_31_nf; extern cpuop_func op_4478_31_ff; extern cpuop_func op_4479_31_nf; extern cpuop_func op_4479_31_ff; extern cpuop_func op_4480_31_nf; extern cpuop_func op_4480_31_ff; extern cpuop_func op_4490_31_nf; extern cpuop_func op_4490_31_ff; extern cpuop_func op_4498_31_nf; extern cpuop_func op_4498_31_ff; extern cpuop_func op_44a0_31_nf; extern cpuop_func op_44a0_31_ff; extern cpuop_func op_44a8_31_nf; extern cpuop_func op_44a8_31_ff; extern cpuop_func op_44b0_31_nf; extern cpuop_func op_44b0_31_ff; extern cpuop_func op_44b8_31_nf; extern cpuop_func op_44b8_31_ff; extern cpuop_func op_44b9_31_nf; extern cpuop_func op_44b9_31_ff; extern cpuop_func op_44c0_31_nf; extern cpuop_func op_44c0_31_ff; extern cpuop_func op_44d0_31_nf; extern cpuop_func op_44d0_31_ff; extern cpuop_func op_44d8_31_nf; extern cpuop_func op_44d8_31_ff; extern cpuop_func op_44e0_31_nf; extern cpuop_func op_44e0_31_ff; extern cpuop_func op_44e8_31_nf; extern cpuop_func op_44e8_31_ff; extern cpuop_func op_44f0_31_nf; extern cpuop_func op_44f0_31_ff; extern cpuop_func op_44f8_31_nf; extern cpuop_func op_44f8_31_ff; extern cpuop_func op_44f9_31_nf; extern cpuop_func op_44f9_31_ff; extern cpuop_func op_44fa_31_nf; extern cpuop_func op_44fa_31_ff; extern cpuop_func op_44fb_31_nf; extern cpuop_func op_44fb_31_ff; extern cpuop_func op_44fc_31_nf; extern cpuop_func op_44fc_31_ff; extern cpuop_func op_4600_31_nf; extern cpuop_func op_4600_31_ff; extern cpuop_func op_4610_31_nf; extern cpuop_func op_4610_31_ff; extern cpuop_func op_4618_31_nf; extern cpuop_func op_4618_31_ff; extern cpuop_func op_4620_31_nf; extern cpuop_func op_4620_31_ff; extern cpuop_func op_4628_31_nf; extern cpuop_func op_4628_31_ff; extern cpuop_func op_4630_31_nf; extern cpuop_func op_4630_31_ff; extern cpuop_func op_4638_31_nf; extern cpuop_func op_4638_31_ff; extern cpuop_func op_4639_31_nf; extern cpuop_func op_4639_31_ff; extern cpuop_func op_4640_31_nf; extern cpuop_func op_4640_31_ff; extern cpuop_func op_4650_31_nf; extern cpuop_func op_4650_31_ff; extern cpuop_func op_4658_31_nf; extern cpuop_func op_4658_31_ff; extern cpuop_func op_4660_31_nf; extern cpuop_func op_4660_31_ff; extern cpuop_func op_4668_31_nf; extern cpuop_func op_4668_31_ff; extern cpuop_func op_4670_31_nf; extern cpuop_func op_4670_31_ff; extern cpuop_func op_4678_31_nf; extern cpuop_func op_4678_31_ff; extern cpuop_func op_4679_31_nf; extern cpuop_func op_4679_31_ff; extern cpuop_func op_4680_31_nf; extern cpuop_func op_4680_31_ff; extern cpuop_func op_4690_31_nf; extern cpuop_func op_4690_31_ff; extern cpuop_func op_4698_31_nf; extern cpuop_func op_4698_31_ff; extern cpuop_func op_46a0_31_nf; extern cpuop_func op_46a0_31_ff; extern cpuop_func op_46a8_31_nf; extern cpuop_func op_46a8_31_ff; extern cpuop_func op_46b0_31_nf; extern cpuop_func op_46b0_31_ff; extern cpuop_func op_46b8_31_nf; extern cpuop_func op_46b8_31_ff; extern cpuop_func op_46b9_31_nf; extern cpuop_func op_46b9_31_ff; extern cpuop_func op_46c0_31_nf; extern cpuop_func op_46c0_31_ff; extern cpuop_func op_46d0_31_nf; extern cpuop_func op_46d0_31_ff; extern cpuop_func op_46d8_31_nf; extern cpuop_func op_46d8_31_ff; extern cpuop_func op_46e0_31_nf; extern cpuop_func op_46e0_31_ff; extern cpuop_func op_46e8_31_nf; extern cpuop_func op_46e8_31_ff; extern cpuop_func op_46f0_31_nf; extern cpuop_func op_46f0_31_ff; extern cpuop_func op_46f8_31_nf; extern cpuop_func op_46f8_31_ff; extern cpuop_func op_46f9_31_nf; extern cpuop_func op_46f9_31_ff; extern cpuop_func op_46fa_31_nf; extern cpuop_func op_46fa_31_ff; extern cpuop_func op_46fb_31_nf; extern cpuop_func op_46fb_31_ff; extern cpuop_func op_46fc_31_nf; extern cpuop_func op_46fc_31_ff; extern cpuop_func op_4800_31_nf; extern cpuop_func op_4800_31_ff; extern cpuop_func op_4808_31_nf; extern cpuop_func op_4808_31_ff; extern cpuop_func op_4810_31_nf; extern cpuop_func op_4810_31_ff; extern cpuop_func op_4818_31_nf; extern cpuop_func op_4818_31_ff; extern cpuop_func op_4820_31_nf; extern cpuop_func op_4820_31_ff; extern cpuop_func op_4828_31_nf; extern cpuop_func op_4828_31_ff; extern cpuop_func op_4830_31_nf; extern cpuop_func op_4830_31_ff; extern cpuop_func op_4838_31_nf; extern cpuop_func op_4838_31_ff; extern cpuop_func op_4839_31_nf; extern cpuop_func op_4839_31_ff; extern cpuop_func op_4840_31_nf; extern cpuop_func op_4840_31_ff; extern cpuop_func op_4848_31_nf; extern cpuop_func op_4848_31_ff; extern cpuop_func op_4850_31_nf; extern cpuop_func op_4850_31_ff; extern cpuop_func op_4868_31_nf; extern cpuop_func op_4868_31_ff; extern cpuop_func op_4870_31_nf; extern cpuop_func op_4870_31_ff; extern cpuop_func op_4878_31_nf; extern cpuop_func op_4878_31_ff; extern cpuop_func op_4879_31_nf; extern cpuop_func op_4879_31_ff; extern cpuop_func op_487a_31_nf; extern cpuop_func op_487a_31_ff; extern cpuop_func op_487b_31_nf; extern cpuop_func op_487b_31_ff; extern cpuop_func op_4880_31_nf; extern cpuop_func op_4880_31_ff; extern cpuop_func op_4890_31_nf; extern cpuop_func op_4890_31_ff; extern cpuop_func op_48a0_31_nf; extern cpuop_func op_48a0_31_ff; extern cpuop_func op_48a8_31_nf; extern cpuop_func op_48a8_31_ff; extern cpuop_func op_48b0_31_nf; extern cpuop_func op_48b0_31_ff; extern cpuop_func op_48b8_31_nf; extern cpuop_func op_48b8_31_ff; extern cpuop_func op_48b9_31_nf; extern cpuop_func op_48b9_31_ff; extern cpuop_func op_48c0_31_nf; extern cpuop_func op_48c0_31_ff; extern cpuop_func op_48d0_31_nf; extern cpuop_func op_48d0_31_ff; extern cpuop_func op_48e0_31_nf; extern cpuop_func op_48e0_31_ff; extern cpuop_func op_48e8_31_nf; extern cpuop_func op_48e8_31_ff; extern cpuop_func op_48f0_31_nf; extern cpuop_func op_48f0_31_ff; extern cpuop_func op_48f8_31_nf; extern cpuop_func op_48f8_31_ff; extern cpuop_func op_48f9_31_nf; extern cpuop_func op_48f9_31_ff; extern cpuop_func op_49c0_31_nf; extern cpuop_func op_49c0_31_ff; extern cpuop_func op_4a00_31_nf; extern cpuop_func op_4a00_31_ff; extern cpuop_func op_4a10_31_nf; extern cpuop_func op_4a10_31_ff; extern cpuop_func op_4a18_31_nf; extern cpuop_func op_4a18_31_ff; extern cpuop_func op_4a20_31_nf; extern cpuop_func op_4a20_31_ff; extern cpuop_func op_4a28_31_nf; extern cpuop_func op_4a28_31_ff; extern cpuop_func op_4a30_31_nf; extern cpuop_func op_4a30_31_ff; extern cpuop_func op_4a38_31_nf; extern cpuop_func op_4a38_31_ff; extern cpuop_func op_4a39_31_nf; extern cpuop_func op_4a39_31_ff; extern cpuop_func op_4a3a_31_nf; extern cpuop_func op_4a3a_31_ff; extern cpuop_func op_4a3b_31_nf; extern cpuop_func op_4a3b_31_ff; extern cpuop_func op_4a3c_31_nf; extern cpuop_func op_4a3c_31_ff; extern cpuop_func op_4a40_31_nf; extern cpuop_func op_4a40_31_ff; extern cpuop_func op_4a48_31_nf; extern cpuop_func op_4a48_31_ff; extern cpuop_func op_4a50_31_nf; extern cpuop_func op_4a50_31_ff; extern cpuop_func op_4a58_31_nf; extern cpuop_func op_4a58_31_ff; extern cpuop_func op_4a60_31_nf; extern cpuop_func op_4a60_31_ff; extern cpuop_func op_4a68_31_nf; extern cpuop_func op_4a68_31_ff; extern cpuop_func op_4a70_31_nf; extern cpuop_func op_4a70_31_ff; extern cpuop_func op_4a78_31_nf; extern cpuop_func op_4a78_31_ff; extern cpuop_func op_4a79_31_nf; extern cpuop_func op_4a79_31_ff; extern cpuop_func op_4a7a_31_nf; extern cpuop_func op_4a7a_31_ff; extern cpuop_func op_4a7b_31_nf; extern cpuop_func op_4a7b_31_ff; extern cpuop_func op_4a7c_31_nf; extern cpuop_func op_4a7c_31_ff; extern cpuop_func op_4a80_31_nf; extern cpuop_func op_4a80_31_ff; extern cpuop_func op_4a88_31_nf; extern cpuop_func op_4a88_31_ff; extern cpuop_func op_4a90_31_nf; extern cpuop_func op_4a90_31_ff; extern cpuop_func op_4a98_31_nf; extern cpuop_func op_4a98_31_ff; extern cpuop_func op_4aa0_31_nf; extern cpuop_func op_4aa0_31_ff; extern cpuop_func op_4aa8_31_nf; extern cpuop_func op_4aa8_31_ff; extern cpuop_func op_4ab0_31_nf; extern cpuop_func op_4ab0_31_ff; extern cpuop_func op_4ab8_31_nf; extern cpuop_func op_4ab8_31_ff; extern cpuop_func op_4ab9_31_nf; extern cpuop_func op_4ab9_31_ff; extern cpuop_func op_4aba_31_nf; extern cpuop_func op_4aba_31_ff; extern cpuop_func op_4abb_31_nf; extern cpuop_func op_4abb_31_ff; extern cpuop_func op_4abc_31_nf; extern cpuop_func op_4abc_31_ff; extern cpuop_func op_4ac0_31_nf; extern cpuop_func op_4ac0_31_ff; extern cpuop_func op_4ad0_31_nf; extern cpuop_func op_4ad0_31_ff; extern cpuop_func op_4ad8_31_nf; extern cpuop_func op_4ad8_31_ff; extern cpuop_func op_4ae0_31_nf; extern cpuop_func op_4ae0_31_ff; extern cpuop_func op_4ae8_31_nf; extern cpuop_func op_4ae8_31_ff; extern cpuop_func op_4af0_31_nf; extern cpuop_func op_4af0_31_ff; extern cpuop_func op_4af8_31_nf; extern cpuop_func op_4af8_31_ff; extern cpuop_func op_4af9_31_nf; extern cpuop_func op_4af9_31_ff; extern cpuop_func op_4c00_31_nf; extern cpuop_func op_4c00_31_ff; extern cpuop_func op_4c10_31_nf; extern cpuop_func op_4c10_31_ff; extern cpuop_func op_4c18_31_nf; extern cpuop_func op_4c18_31_ff; extern cpuop_func op_4c20_31_nf; extern cpuop_func op_4c20_31_ff; extern cpuop_func op_4c28_31_nf; extern cpuop_func op_4c28_31_ff; extern cpuop_func op_4c30_31_nf; extern cpuop_func op_4c30_31_ff; extern cpuop_func op_4c38_31_nf; extern cpuop_func op_4c38_31_ff; extern cpuop_func op_4c39_31_nf; extern cpuop_func op_4c39_31_ff; extern cpuop_func op_4c3a_31_nf; extern cpuop_func op_4c3a_31_ff; extern cpuop_func op_4c3b_31_nf; extern cpuop_func op_4c3b_31_ff; extern cpuop_func op_4c3c_31_nf; extern cpuop_func op_4c3c_31_ff; extern cpuop_func op_4c40_31_nf; extern cpuop_func op_4c40_31_ff; extern cpuop_func op_4c50_31_nf; extern cpuop_func op_4c50_31_ff; extern cpuop_func op_4c58_31_nf; extern cpuop_func op_4c58_31_ff; extern cpuop_func op_4c60_31_nf; extern cpuop_func op_4c60_31_ff; extern cpuop_func op_4c68_31_nf; extern cpuop_func op_4c68_31_ff; extern cpuop_func op_4c70_31_nf; extern cpuop_func op_4c70_31_ff; extern cpuop_func op_4c78_31_nf; extern cpuop_func op_4c78_31_ff; extern cpuop_func op_4c79_31_nf; extern cpuop_func op_4c79_31_ff; extern cpuop_func op_4c7a_31_nf; extern cpuop_func op_4c7a_31_ff; extern cpuop_func op_4c7b_31_nf; extern cpuop_func op_4c7b_31_ff; extern cpuop_func op_4c7c_31_nf; extern cpuop_func op_4c7c_31_ff; extern cpuop_func op_4c90_31_nf; extern cpuop_func op_4c90_31_ff; extern cpuop_func op_4c98_31_nf; extern cpuop_func op_4c98_31_ff; extern cpuop_func op_4ca8_31_nf; extern cpuop_func op_4ca8_31_ff; extern cpuop_func op_4cb0_31_nf; extern cpuop_func op_4cb0_31_ff; extern cpuop_func op_4cb8_31_nf; extern cpuop_func op_4cb8_31_ff; extern cpuop_func op_4cb9_31_nf; extern cpuop_func op_4cb9_31_ff; extern cpuop_func op_4cba_31_nf; extern cpuop_func op_4cba_31_ff; extern cpuop_func op_4cbb_31_nf; extern cpuop_func op_4cbb_31_ff; extern cpuop_func op_4cd0_31_nf; extern cpuop_func op_4cd0_31_ff; extern cpuop_func op_4cd8_31_nf; extern cpuop_func op_4cd8_31_ff; extern cpuop_func op_4ce8_31_nf; extern cpuop_func op_4ce8_31_ff; extern cpuop_func op_4cf0_31_nf; extern cpuop_func op_4cf0_31_ff; extern cpuop_func op_4cf8_31_nf; extern cpuop_func op_4cf8_31_ff; extern cpuop_func op_4cf9_31_nf; extern cpuop_func op_4cf9_31_ff; extern cpuop_func op_4cfa_31_nf; extern cpuop_func op_4cfa_31_ff; extern cpuop_func op_4cfb_31_nf; extern cpuop_func op_4cfb_31_ff; extern cpuop_func op_4e40_31_nf; extern cpuop_func op_4e40_31_ff; extern cpuop_func op_4e50_31_nf; extern cpuop_func op_4e50_31_ff; extern cpuop_func op_4e58_31_nf; extern cpuop_func op_4e58_31_ff; extern cpuop_func op_4e60_31_nf; extern cpuop_func op_4e60_31_ff; extern cpuop_func op_4e68_31_nf; extern cpuop_func op_4e68_31_ff; extern cpuop_func op_4e70_31_nf; extern cpuop_func op_4e70_31_ff; extern cpuop_func op_4e71_31_nf; extern cpuop_func op_4e71_31_ff; extern cpuop_func op_4e72_31_nf; extern cpuop_func op_4e72_31_ff; extern cpuop_func op_4e73_31_nf; extern cpuop_func op_4e73_31_ff; extern cpuop_func op_4e74_31_nf; extern cpuop_func op_4e74_31_ff; extern cpuop_func op_4e75_31_nf; extern cpuop_func op_4e75_31_ff; extern cpuop_func op_4e76_31_nf; extern cpuop_func op_4e76_31_ff; extern cpuop_func op_4e77_31_nf; extern cpuop_func op_4e77_31_ff; extern cpuop_func op_4e7a_31_nf; extern cpuop_func op_4e7a_31_ff; extern cpuop_func op_4e7b_31_nf; extern cpuop_func op_4e7b_31_ff; extern cpuop_func op_4e90_31_nf; extern cpuop_func op_4e90_31_ff; extern cpuop_func op_4ea8_31_nf; extern cpuop_func op_4ea8_31_ff; extern cpuop_func op_4eb0_31_nf; extern cpuop_func op_4eb0_31_ff; extern cpuop_func op_4eb8_31_nf; extern cpuop_func op_4eb8_31_ff; extern cpuop_func op_4eb9_31_nf; extern cpuop_func op_4eb9_31_ff; extern cpuop_func op_4eba_31_nf; extern cpuop_func op_4eba_31_ff; extern cpuop_func op_4ebb_31_nf; extern cpuop_func op_4ebb_31_ff; extern cpuop_func op_4ed0_31_nf; extern cpuop_func op_4ed0_31_ff; extern cpuop_func op_4ee8_31_nf; extern cpuop_func op_4ee8_31_ff; extern cpuop_func op_4ef0_31_nf; extern cpuop_func op_4ef0_31_ff; extern cpuop_func op_4ef8_31_nf; extern cpuop_func op_4ef8_31_ff; extern cpuop_func op_4ef9_31_nf; extern cpuop_func op_4ef9_31_ff; extern cpuop_func op_4efa_31_nf; extern cpuop_func op_4efa_31_ff; extern cpuop_func op_4efb_31_nf; extern cpuop_func op_4efb_31_ff; extern cpuop_func op_5000_31_nf; extern cpuop_func op_5000_31_ff; extern cpuop_func op_5010_31_nf; extern cpuop_func op_5010_31_ff; extern cpuop_func op_5018_31_nf; extern cpuop_func op_5018_31_ff; extern cpuop_func op_5020_31_nf; extern cpuop_func op_5020_31_ff; extern cpuop_func op_5028_31_nf; extern cpuop_func op_5028_31_ff; extern cpuop_func op_5030_31_nf; extern cpuop_func op_5030_31_ff; extern cpuop_func op_5038_31_nf; extern cpuop_func op_5038_31_ff; extern cpuop_func op_5039_31_nf; extern cpuop_func op_5039_31_ff; extern cpuop_func op_5040_31_nf; extern cpuop_func op_5040_31_ff; extern cpuop_func op_5048_31_nf; extern cpuop_func op_5048_31_ff; extern cpuop_func op_5050_31_nf; extern cpuop_func op_5050_31_ff; extern cpuop_func op_5058_31_nf; extern cpuop_func op_5058_31_ff; extern cpuop_func op_5060_31_nf; extern cpuop_func op_5060_31_ff; extern cpuop_func op_5068_31_nf; extern cpuop_func op_5068_31_ff; extern cpuop_func op_5070_31_nf; extern cpuop_func op_5070_31_ff; extern cpuop_func op_5078_31_nf; extern cpuop_func op_5078_31_ff; extern cpuop_func op_5079_31_nf; extern cpuop_func op_5079_31_ff; extern cpuop_func op_5080_31_nf; extern cpuop_func op_5080_31_ff; extern cpuop_func op_5088_31_nf; extern cpuop_func op_5088_31_ff; extern cpuop_func op_5090_31_nf; extern cpuop_func op_5090_31_ff; extern cpuop_func op_5098_31_nf; extern cpuop_func op_5098_31_ff; extern cpuop_func op_50a0_31_nf; extern cpuop_func op_50a0_31_ff; extern cpuop_func op_50a8_31_nf; extern cpuop_func op_50a8_31_ff; extern cpuop_func op_50b0_31_nf; extern cpuop_func op_50b0_31_ff; extern cpuop_func op_50b8_31_nf; extern cpuop_func op_50b8_31_ff; extern cpuop_func op_50b9_31_nf; extern cpuop_func op_50b9_31_ff; extern cpuop_func op_50c0_31_nf; extern cpuop_func op_50c0_31_ff; extern cpuop_func op_50c8_31_nf; extern cpuop_func op_50c8_31_ff; extern cpuop_func op_50d0_31_nf; extern cpuop_func op_50d0_31_ff; extern cpuop_func op_50d8_31_nf; extern cpuop_func op_50d8_31_ff; extern cpuop_func op_50e0_31_nf; extern cpuop_func op_50e0_31_ff; extern cpuop_func op_50e8_31_nf; extern cpuop_func op_50e8_31_ff; extern cpuop_func op_50f0_31_nf; extern cpuop_func op_50f0_31_ff; extern cpuop_func op_50f8_31_nf; extern cpuop_func op_50f8_31_ff; extern cpuop_func op_50f9_31_nf; extern cpuop_func op_50f9_31_ff; extern cpuop_func op_50fa_31_nf; extern cpuop_func op_50fa_31_ff; extern cpuop_func op_50fb_31_nf; extern cpuop_func op_50fb_31_ff; extern cpuop_func op_50fc_31_nf; extern cpuop_func op_50fc_31_ff; extern cpuop_func op_5100_31_nf; extern cpuop_func op_5100_31_ff; extern cpuop_func op_5110_31_nf; extern cpuop_func op_5110_31_ff; extern cpuop_func op_5118_31_nf; extern cpuop_func op_5118_31_ff; extern cpuop_func op_5120_31_nf; extern cpuop_func op_5120_31_ff; extern cpuop_func op_5128_31_nf; extern cpuop_func op_5128_31_ff; extern cpuop_func op_5130_31_nf; extern cpuop_func op_5130_31_ff; extern cpuop_func op_5138_31_nf; extern cpuop_func op_5138_31_ff; extern cpuop_func op_5139_31_nf; extern cpuop_func op_5139_31_ff; extern cpuop_func op_5140_31_nf; extern cpuop_func op_5140_31_ff; extern cpuop_func op_5148_31_nf; extern cpuop_func op_5148_31_ff; extern cpuop_func op_5150_31_nf; extern cpuop_func op_5150_31_ff; extern cpuop_func op_5158_31_nf; extern cpuop_func op_5158_31_ff; extern cpuop_func op_5160_31_nf; extern cpuop_func op_5160_31_ff; extern cpuop_func op_5168_31_nf; extern cpuop_func op_5168_31_ff; extern cpuop_func op_5170_31_nf; extern cpuop_func op_5170_31_ff; extern cpuop_func op_5178_31_nf; extern cpuop_func op_5178_31_ff; extern cpuop_func op_5179_31_nf; extern cpuop_func op_5179_31_ff; extern cpuop_func op_5180_31_nf; extern cpuop_func op_5180_31_ff; extern cpuop_func op_5188_31_nf; extern cpuop_func op_5188_31_ff; extern cpuop_func op_5190_31_nf; extern cpuop_func op_5190_31_ff; extern cpuop_func op_5198_31_nf; extern cpuop_func op_5198_31_ff; extern cpuop_func op_51a0_31_nf; extern cpuop_func op_51a0_31_ff; extern cpuop_func op_51a8_31_nf; extern cpuop_func op_51a8_31_ff; extern cpuop_func op_51b0_31_nf; extern cpuop_func op_51b0_31_ff; extern cpuop_func op_51b8_31_nf; extern cpuop_func op_51b8_31_ff; extern cpuop_func op_51b9_31_nf; extern cpuop_func op_51b9_31_ff; extern cpuop_func op_51c0_31_nf; extern cpuop_func op_51c0_31_ff; extern cpuop_func op_51c8_31_nf; extern cpuop_func op_51c8_31_ff; extern cpuop_func op_51d0_31_nf; extern cpuop_func op_51d0_31_ff; extern cpuop_func op_51d8_31_nf; extern cpuop_func op_51d8_31_ff; extern cpuop_func op_51e0_31_nf; extern cpuop_func op_51e0_31_ff; extern cpuop_func op_51e8_31_nf; extern cpuop_func op_51e8_31_ff; extern cpuop_func op_51f0_31_nf; extern cpuop_func op_51f0_31_ff; extern cpuop_func op_51f8_31_nf; extern cpuop_func op_51f8_31_ff; extern cpuop_func op_51f9_31_nf; extern cpuop_func op_51f9_31_ff; extern cpuop_func op_51fa_31_nf; extern cpuop_func op_51fa_31_ff; extern cpuop_func op_51fb_31_nf; extern cpuop_func op_51fb_31_ff; extern cpuop_func op_51fc_31_nf; extern cpuop_func op_51fc_31_ff; extern cpuop_func op_52c0_31_nf; extern cpuop_func op_52c0_31_ff; extern cpuop_func op_52c8_31_nf; extern cpuop_func op_52c8_31_ff; extern cpuop_func op_52d0_31_nf; extern cpuop_func op_52d0_31_ff; extern cpuop_func op_52d8_31_nf; extern cpuop_func op_52d8_31_ff; extern cpuop_func op_52e0_31_nf; extern cpuop_func op_52e0_31_ff; extern cpuop_func op_52e8_31_nf; extern cpuop_func op_52e8_31_ff; extern cpuop_func op_52f0_31_nf; extern cpuop_func op_52f0_31_ff; extern cpuop_func op_52f8_31_nf; extern cpuop_func op_52f8_31_ff; extern cpuop_func op_52f9_31_nf; extern cpuop_func op_52f9_31_ff; extern cpuop_func op_52fa_31_nf; extern cpuop_func op_52fa_31_ff; extern cpuop_func op_52fb_31_nf; extern cpuop_func op_52fb_31_ff; extern cpuop_func op_52fc_31_nf; extern cpuop_func op_52fc_31_ff; extern cpuop_func op_53c0_31_nf; extern cpuop_func op_53c0_31_ff; extern cpuop_func op_53c8_31_nf; extern cpuop_func op_53c8_31_ff; extern cpuop_func op_53d0_31_nf; extern cpuop_func op_53d0_31_ff; extern cpuop_func op_53d8_31_nf; extern cpuop_func op_53d8_31_ff; extern cpuop_func op_53e0_31_nf; extern cpuop_func op_53e0_31_ff; extern cpuop_func op_53e8_31_nf; extern cpuop_func op_53e8_31_ff; extern cpuop_func op_53f0_31_nf; extern cpuop_func op_53f0_31_ff; extern cpuop_func op_53f8_31_nf; extern cpuop_func op_53f8_31_ff; extern cpuop_func op_53f9_31_nf; extern cpuop_func op_53f9_31_ff; extern cpuop_func op_53fa_31_nf; extern cpuop_func op_53fa_31_ff; extern cpuop_func op_53fb_31_nf; extern cpuop_func op_53fb_31_ff; extern cpuop_func op_53fc_31_nf; extern cpuop_func op_53fc_31_ff; extern cpuop_func op_54c0_31_nf; extern cpuop_func op_54c0_31_ff; extern cpuop_func op_54c8_31_nf; extern cpuop_func op_54c8_31_ff; extern cpuop_func op_54d0_31_nf; extern cpuop_func op_54d0_31_ff; extern cpuop_func op_54d8_31_nf; extern cpuop_func op_54d8_31_ff; extern cpuop_func op_54e0_31_nf; extern cpuop_func op_54e0_31_ff; extern cpuop_func op_54e8_31_nf; extern cpuop_func op_54e8_31_ff; extern cpuop_func op_54f0_31_nf; extern cpuop_func op_54f0_31_ff; extern cpuop_func op_54f8_31_nf; extern cpuop_func op_54f8_31_ff; extern cpuop_func op_54f9_31_nf; extern cpuop_func op_54f9_31_ff; extern cpuop_func op_54fa_31_nf; extern cpuop_func op_54fa_31_ff; extern cpuop_func op_54fb_31_nf; extern cpuop_func op_54fb_31_ff; extern cpuop_func op_54fc_31_nf; extern cpuop_func op_54fc_31_ff; extern cpuop_func op_55c0_31_nf; extern cpuop_func op_55c0_31_ff; extern cpuop_func op_55c8_31_nf; extern cpuop_func op_55c8_31_ff; extern cpuop_func op_55d0_31_nf; extern cpuop_func op_55d0_31_ff; extern cpuop_func op_55d8_31_nf; extern cpuop_func op_55d8_31_ff; extern cpuop_func op_55e0_31_nf; extern cpuop_func op_55e0_31_ff; extern cpuop_func op_55e8_31_nf; extern cpuop_func op_55e8_31_ff; extern cpuop_func op_55f0_31_nf; extern cpuop_func op_55f0_31_ff; extern cpuop_func op_55f8_31_nf; extern cpuop_func op_55f8_31_ff; extern cpuop_func op_55f9_31_nf; extern cpuop_func op_55f9_31_ff; extern cpuop_func op_55fa_31_nf; extern cpuop_func op_55fa_31_ff; extern cpuop_func op_55fb_31_nf; extern cpuop_func op_55fb_31_ff; extern cpuop_func op_55fc_31_nf; extern cpuop_func op_55fc_31_ff; extern cpuop_func op_56c0_31_nf; extern cpuop_func op_56c0_31_ff; extern cpuop_func op_56c8_31_nf; extern cpuop_func op_56c8_31_ff; extern cpuop_func op_56d0_31_nf; extern cpuop_func op_56d0_31_ff; extern cpuop_func op_56d8_31_nf; extern cpuop_func op_56d8_31_ff; extern cpuop_func op_56e0_31_nf; extern cpuop_func op_56e0_31_ff; extern cpuop_func op_56e8_31_nf; extern cpuop_func op_56e8_31_ff; extern cpuop_func op_56f0_31_nf; extern cpuop_func op_56f0_31_ff; extern cpuop_func op_56f8_31_nf; extern cpuop_func op_56f8_31_ff; extern cpuop_func op_56f9_31_nf; extern cpuop_func op_56f9_31_ff; extern cpuop_func op_56fa_31_nf; extern cpuop_func op_56fa_31_ff; extern cpuop_func op_56fb_31_nf; extern cpuop_func op_56fb_31_ff; extern cpuop_func op_56fc_31_nf; extern cpuop_func op_56fc_31_ff; extern cpuop_func op_57c0_31_nf; extern cpuop_func op_57c0_31_ff; extern cpuop_func op_57c8_31_nf; extern cpuop_func op_57c8_31_ff; extern cpuop_func op_57d0_31_nf; extern cpuop_func op_57d0_31_ff; extern cpuop_func op_57d8_31_nf; extern cpuop_func op_57d8_31_ff; extern cpuop_func op_57e0_31_nf; extern cpuop_func op_57e0_31_ff; extern cpuop_func op_57e8_31_nf; extern cpuop_func op_57e8_31_ff; extern cpuop_func op_57f0_31_nf; extern cpuop_func op_57f0_31_ff; extern cpuop_func op_57f8_31_nf; extern cpuop_func op_57f8_31_ff; extern cpuop_func op_57f9_31_nf; extern cpuop_func op_57f9_31_ff; extern cpuop_func op_57fa_31_nf; extern cpuop_func op_57fa_31_ff; extern cpuop_func op_57fb_31_nf; extern cpuop_func op_57fb_31_ff; extern cpuop_func op_57fc_31_nf; extern cpuop_func op_57fc_31_ff; extern cpuop_func op_58c0_31_nf; extern cpuop_func op_58c0_31_ff; extern cpuop_func op_58c8_31_nf; extern cpuop_func op_58c8_31_ff; extern cpuop_func op_58d0_31_nf; extern cpuop_func op_58d0_31_ff; extern cpuop_func op_58d8_31_nf; extern cpuop_func op_58d8_31_ff; extern cpuop_func op_58e0_31_nf; extern cpuop_func op_58e0_31_ff; extern cpuop_func op_58e8_31_nf; extern cpuop_func op_58e8_31_ff; extern cpuop_func op_58f0_31_nf; extern cpuop_func op_58f0_31_ff; extern cpuop_func op_58f8_31_nf; extern cpuop_func op_58f8_31_ff; extern cpuop_func op_58f9_31_nf; extern cpuop_func op_58f9_31_ff; extern cpuop_func op_58fa_31_nf; extern cpuop_func op_58fa_31_ff; extern cpuop_func op_58fb_31_nf; extern cpuop_func op_58fb_31_ff; extern cpuop_func op_58fc_31_nf; extern cpuop_func op_58fc_31_ff; extern cpuop_func op_59c0_31_nf; extern cpuop_func op_59c0_31_ff; extern cpuop_func op_59c8_31_nf; extern cpuop_func op_59c8_31_ff; extern cpuop_func op_59d0_31_nf; extern cpuop_func op_59d0_31_ff; extern cpuop_func op_59d8_31_nf; extern cpuop_func op_59d8_31_ff; extern cpuop_func op_59e0_31_nf; extern cpuop_func op_59e0_31_ff; extern cpuop_func op_59e8_31_nf; extern cpuop_func op_59e8_31_ff; extern cpuop_func op_59f0_31_nf; extern cpuop_func op_59f0_31_ff; extern cpuop_func op_59f8_31_nf; extern cpuop_func op_59f8_31_ff; extern cpuop_func op_59f9_31_nf; extern cpuop_func op_59f9_31_ff; extern cpuop_func op_59fa_31_nf; extern cpuop_func op_59fa_31_ff; extern cpuop_func op_59fb_31_nf; extern cpuop_func op_59fb_31_ff; extern cpuop_func op_59fc_31_nf; extern cpuop_func op_59fc_31_ff; extern cpuop_func op_5ac0_31_nf; extern cpuop_func op_5ac0_31_ff; extern cpuop_func op_5ac8_31_nf; extern cpuop_func op_5ac8_31_ff; extern cpuop_func op_5ad0_31_nf; extern cpuop_func op_5ad0_31_ff; extern cpuop_func op_5ad8_31_nf; extern cpuop_func op_5ad8_31_ff; extern cpuop_func op_5ae0_31_nf; extern cpuop_func op_5ae0_31_ff; extern cpuop_func op_5ae8_31_nf; extern cpuop_func op_5ae8_31_ff; extern cpuop_func op_5af0_31_nf; extern cpuop_func op_5af0_31_ff; extern cpuop_func op_5af8_31_nf; extern cpuop_func op_5af8_31_ff; extern cpuop_func op_5af9_31_nf; extern cpuop_func op_5af9_31_ff; extern cpuop_func op_5afa_31_nf; extern cpuop_func op_5afa_31_ff; extern cpuop_func op_5afb_31_nf; extern cpuop_func op_5afb_31_ff; extern cpuop_func op_5afc_31_nf; extern cpuop_func op_5afc_31_ff; extern cpuop_func op_5bc0_31_nf; extern cpuop_func op_5bc0_31_ff; extern cpuop_func op_5bc8_31_nf; extern cpuop_func op_5bc8_31_ff; extern cpuop_func op_5bd0_31_nf; extern cpuop_func op_5bd0_31_ff; extern cpuop_func op_5bd8_31_nf; extern cpuop_func op_5bd8_31_ff; extern cpuop_func op_5be0_31_nf; extern cpuop_func op_5be0_31_ff; extern cpuop_func op_5be8_31_nf; extern cpuop_func op_5be8_31_ff; extern cpuop_func op_5bf0_31_nf; extern cpuop_func op_5bf0_31_ff; extern cpuop_func op_5bf8_31_nf; extern cpuop_func op_5bf8_31_ff; extern cpuop_func op_5bf9_31_nf; extern cpuop_func op_5bf9_31_ff; extern cpuop_func op_5bfa_31_nf; extern cpuop_func op_5bfa_31_ff; extern cpuop_func op_5bfb_31_nf; extern cpuop_func op_5bfb_31_ff; extern cpuop_func op_5bfc_31_nf; extern cpuop_func op_5bfc_31_ff; extern cpuop_func op_5cc0_31_nf; extern cpuop_func op_5cc0_31_ff; extern cpuop_func op_5cc8_31_nf; extern cpuop_func op_5cc8_31_ff; extern cpuop_func op_5cd0_31_nf; extern cpuop_func op_5cd0_31_ff; extern cpuop_func op_5cd8_31_nf; extern cpuop_func op_5cd8_31_ff; extern cpuop_func op_5ce0_31_nf; extern cpuop_func op_5ce0_31_ff; extern cpuop_func op_5ce8_31_nf; extern cpuop_func op_5ce8_31_ff; extern cpuop_func op_5cf0_31_nf; extern cpuop_func op_5cf0_31_ff; extern cpuop_func op_5cf8_31_nf; extern cpuop_func op_5cf8_31_ff; extern cpuop_func op_5cf9_31_nf; extern cpuop_func op_5cf9_31_ff; extern cpuop_func op_5cfa_31_nf; extern cpuop_func op_5cfa_31_ff; extern cpuop_func op_5cfb_31_nf; extern cpuop_func op_5cfb_31_ff; extern cpuop_func op_5cfc_31_nf; extern cpuop_func op_5cfc_31_ff; extern cpuop_func op_5dc0_31_nf; extern cpuop_func op_5dc0_31_ff; extern cpuop_func op_5dc8_31_nf; extern cpuop_func op_5dc8_31_ff; extern cpuop_func op_5dd0_31_nf; extern cpuop_func op_5dd0_31_ff; extern cpuop_func op_5dd8_31_nf; extern cpuop_func op_5dd8_31_ff; extern cpuop_func op_5de0_31_nf; extern cpuop_func op_5de0_31_ff; extern cpuop_func op_5de8_31_nf; extern cpuop_func op_5de8_31_ff; extern cpuop_func op_5df0_31_nf; extern cpuop_func op_5df0_31_ff; extern cpuop_func op_5df8_31_nf; extern cpuop_func op_5df8_31_ff; extern cpuop_func op_5df9_31_nf; extern cpuop_func op_5df9_31_ff; extern cpuop_func op_5dfa_31_nf; extern cpuop_func op_5dfa_31_ff; extern cpuop_func op_5dfb_31_nf; extern cpuop_func op_5dfb_31_ff; extern cpuop_func op_5dfc_31_nf; extern cpuop_func op_5dfc_31_ff; extern cpuop_func op_5ec0_31_nf; extern cpuop_func op_5ec0_31_ff; extern cpuop_func op_5ec8_31_nf; extern cpuop_func op_5ec8_31_ff; extern cpuop_func op_5ed0_31_nf; extern cpuop_func op_5ed0_31_ff; extern cpuop_func op_5ed8_31_nf; extern cpuop_func op_5ed8_31_ff; extern cpuop_func op_5ee0_31_nf; extern cpuop_func op_5ee0_31_ff; extern cpuop_func op_5ee8_31_nf; extern cpuop_func op_5ee8_31_ff; extern cpuop_func op_5ef0_31_nf; extern cpuop_func op_5ef0_31_ff; extern cpuop_func op_5ef8_31_nf; extern cpuop_func op_5ef8_31_ff; extern cpuop_func op_5ef9_31_nf; extern cpuop_func op_5ef9_31_ff; extern cpuop_func op_5efa_31_nf; extern cpuop_func op_5efa_31_ff; extern cpuop_func op_5efb_31_nf; extern cpuop_func op_5efb_31_ff; extern cpuop_func op_5efc_31_nf; extern cpuop_func op_5efc_31_ff; extern cpuop_func op_5fc0_31_nf; extern cpuop_func op_5fc0_31_ff; extern cpuop_func op_5fc8_31_nf; extern cpuop_func op_5fc8_31_ff; extern cpuop_func op_5fd0_31_nf; extern cpuop_func op_5fd0_31_ff; extern cpuop_func op_5fd8_31_nf; extern cpuop_func op_5fd8_31_ff; extern cpuop_func op_5fe0_31_nf; extern cpuop_func op_5fe0_31_ff; extern cpuop_func op_5fe8_31_nf; extern cpuop_func op_5fe8_31_ff; extern cpuop_func op_5ff0_31_nf; extern cpuop_func op_5ff0_31_ff; extern cpuop_func op_5ff8_31_nf; extern cpuop_func op_5ff8_31_ff; extern cpuop_func op_5ff9_31_nf; extern cpuop_func op_5ff9_31_ff; extern cpuop_func op_5ffa_31_nf; extern cpuop_func op_5ffa_31_ff; extern cpuop_func op_5ffb_31_nf; extern cpuop_func op_5ffb_31_ff; extern cpuop_func op_5ffc_31_nf; extern cpuop_func op_5ffc_31_ff; extern cpuop_func op_6000_31_nf; extern cpuop_func op_6000_31_ff; extern cpuop_func op_6001_31_nf; extern cpuop_func op_6001_31_ff; extern cpuop_func op_60ff_31_nf; extern cpuop_func op_60ff_31_ff; extern cpuop_func op_6100_31_nf; extern cpuop_func op_6100_31_ff; extern cpuop_func op_6101_31_nf; extern cpuop_func op_6101_31_ff; extern cpuop_func op_61ff_31_nf; extern cpuop_func op_61ff_31_ff; extern cpuop_func op_6200_31_nf; extern cpuop_func op_6200_31_ff; extern cpuop_func op_6201_31_nf; extern cpuop_func op_6201_31_ff; extern cpuop_func op_62ff_31_nf; extern cpuop_func op_62ff_31_ff; extern cpuop_func op_6300_31_nf; extern cpuop_func op_6300_31_ff; extern cpuop_func op_6301_31_nf; extern cpuop_func op_6301_31_ff; extern cpuop_func op_63ff_31_nf; extern cpuop_func op_63ff_31_ff; extern cpuop_func op_6400_31_nf; extern cpuop_func op_6400_31_ff; extern cpuop_func op_6401_31_nf; extern cpuop_func op_6401_31_ff; extern cpuop_func op_64ff_31_nf; extern cpuop_func op_64ff_31_ff; extern cpuop_func op_6500_31_nf; extern cpuop_func op_6500_31_ff; extern cpuop_func op_6501_31_nf; extern cpuop_func op_6501_31_ff; extern cpuop_func op_65ff_31_nf; extern cpuop_func op_65ff_31_ff; extern cpuop_func op_6600_31_nf; extern cpuop_func op_6600_31_ff; extern cpuop_func op_6601_31_nf; extern cpuop_func op_6601_31_ff; extern cpuop_func op_66ff_31_nf; extern cpuop_func op_66ff_31_ff; extern cpuop_func op_6700_31_nf; extern cpuop_func op_6700_31_ff; extern cpuop_func op_6701_31_nf; extern cpuop_func op_6701_31_ff; extern cpuop_func op_67ff_31_nf; extern cpuop_func op_67ff_31_ff; extern cpuop_func op_6800_31_nf; extern cpuop_func op_6800_31_ff; extern cpuop_func op_6801_31_nf; extern cpuop_func op_6801_31_ff; extern cpuop_func op_68ff_31_nf; extern cpuop_func op_68ff_31_ff; extern cpuop_func op_6900_31_nf; extern cpuop_func op_6900_31_ff; extern cpuop_func op_6901_31_nf; extern cpuop_func op_6901_31_ff; extern cpuop_func op_69ff_31_nf; extern cpuop_func op_69ff_31_ff; extern cpuop_func op_6a00_31_nf; extern cpuop_func op_6a00_31_ff; extern cpuop_func op_6a01_31_nf; extern cpuop_func op_6a01_31_ff; extern cpuop_func op_6aff_31_nf; extern cpuop_func op_6aff_31_ff; extern cpuop_func op_6b00_31_nf; extern cpuop_func op_6b00_31_ff; extern cpuop_func op_6b01_31_nf; extern cpuop_func op_6b01_31_ff; extern cpuop_func op_6bff_31_nf; extern cpuop_func op_6bff_31_ff; extern cpuop_func op_6c00_31_nf; extern cpuop_func op_6c00_31_ff; extern cpuop_func op_6c01_31_nf; extern cpuop_func op_6c01_31_ff; extern cpuop_func op_6cff_31_nf; extern cpuop_func op_6cff_31_ff; extern cpuop_func op_6d00_31_nf; extern cpuop_func op_6d00_31_ff; extern cpuop_func op_6d01_31_nf; extern cpuop_func op_6d01_31_ff; extern cpuop_func op_6dff_31_nf; extern cpuop_func op_6dff_31_ff; extern cpuop_func op_6e00_31_nf; extern cpuop_func op_6e00_31_ff; extern cpuop_func op_6e01_31_nf; extern cpuop_func op_6e01_31_ff; extern cpuop_func op_6eff_31_nf; extern cpuop_func op_6eff_31_ff; extern cpuop_func op_6f00_31_nf; extern cpuop_func op_6f00_31_ff; extern cpuop_func op_6f01_31_nf; extern cpuop_func op_6f01_31_ff; extern cpuop_func op_6fff_31_nf; extern cpuop_func op_6fff_31_ff; extern cpuop_func op_7000_31_nf; extern cpuop_func op_7000_31_ff; extern cpuop_func op_8000_31_nf; extern cpuop_func op_8000_31_ff; extern cpuop_func op_8010_31_nf; extern cpuop_func op_8010_31_ff; extern cpuop_func op_8018_31_nf; extern cpuop_func op_8018_31_ff; extern cpuop_func op_8020_31_nf; extern cpuop_func op_8020_31_ff; extern cpuop_func op_8028_31_nf; extern cpuop_func op_8028_31_ff; extern cpuop_func op_8030_31_nf; extern cpuop_func op_8030_31_ff; extern cpuop_func op_8038_31_nf; extern cpuop_func op_8038_31_ff; extern cpuop_func op_8039_31_nf; extern cpuop_func op_8039_31_ff; extern cpuop_func op_803a_31_nf; extern cpuop_func op_803a_31_ff; extern cpuop_func op_803b_31_nf; extern cpuop_func op_803b_31_ff; extern cpuop_func op_803c_31_nf; extern cpuop_func op_803c_31_ff; extern cpuop_func op_8040_31_nf; extern cpuop_func op_8040_31_ff; extern cpuop_func op_8050_31_nf; extern cpuop_func op_8050_31_ff; extern cpuop_func op_8058_31_nf; extern cpuop_func op_8058_31_ff; extern cpuop_func op_8060_31_nf; extern cpuop_func op_8060_31_ff; extern cpuop_func op_8068_31_nf; extern cpuop_func op_8068_31_ff; extern cpuop_func op_8070_31_nf; extern cpuop_func op_8070_31_ff; extern cpuop_func op_8078_31_nf; extern cpuop_func op_8078_31_ff; extern cpuop_func op_8079_31_nf; extern cpuop_func op_8079_31_ff; extern cpuop_func op_807a_31_nf; extern cpuop_func op_807a_31_ff; extern cpuop_func op_807b_31_nf; extern cpuop_func op_807b_31_ff; extern cpuop_func op_807c_31_nf; extern cpuop_func op_807c_31_ff; extern cpuop_func op_8080_31_nf; extern cpuop_func op_8080_31_ff; extern cpuop_func op_8090_31_nf; extern cpuop_func op_8090_31_ff; extern cpuop_func op_8098_31_nf; extern cpuop_func op_8098_31_ff; extern cpuop_func op_80a0_31_nf; extern cpuop_func op_80a0_31_ff; extern cpuop_func op_80a8_31_nf; extern cpuop_func op_80a8_31_ff; extern cpuop_func op_80b0_31_nf; extern cpuop_func op_80b0_31_ff; extern cpuop_func op_80b8_31_nf; extern cpuop_func op_80b8_31_ff; extern cpuop_func op_80b9_31_nf; extern cpuop_func op_80b9_31_ff; extern cpuop_func op_80ba_31_nf; extern cpuop_func op_80ba_31_ff; extern cpuop_func op_80bb_31_nf; extern cpuop_func op_80bb_31_ff; extern cpuop_func op_80bc_31_nf; extern cpuop_func op_80bc_31_ff; extern cpuop_func op_80c0_31_nf; extern cpuop_func op_80c0_31_ff; extern cpuop_func op_80d0_31_nf; extern cpuop_func op_80d0_31_ff; extern cpuop_func op_80d8_31_nf; extern cpuop_func op_80d8_31_ff; extern cpuop_func op_80e0_31_nf; extern cpuop_func op_80e0_31_ff; extern cpuop_func op_80e8_31_nf; extern cpuop_func op_80e8_31_ff; extern cpuop_func op_80f0_31_nf; extern cpuop_func op_80f0_31_ff; extern cpuop_func op_80f8_31_nf; extern cpuop_func op_80f8_31_ff; extern cpuop_func op_80f9_31_nf; extern cpuop_func op_80f9_31_ff; extern cpuop_func op_80fa_31_nf; extern cpuop_func op_80fa_31_ff; extern cpuop_func op_80fb_31_nf; extern cpuop_func op_80fb_31_ff; extern cpuop_func op_80fc_31_nf; extern cpuop_func op_80fc_31_ff; extern cpuop_func op_8100_31_nf; extern cpuop_func op_8100_31_ff; extern cpuop_func op_8108_31_nf; extern cpuop_func op_8108_31_ff; extern cpuop_func op_8110_31_nf; extern cpuop_func op_8110_31_ff; extern cpuop_func op_8118_31_nf; extern cpuop_func op_8118_31_ff; extern cpuop_func op_8120_31_nf; extern cpuop_func op_8120_31_ff; extern cpuop_func op_8128_31_nf; extern cpuop_func op_8128_31_ff; extern cpuop_func op_8130_31_nf; extern cpuop_func op_8130_31_ff; extern cpuop_func op_8138_31_nf; extern cpuop_func op_8138_31_ff; extern cpuop_func op_8139_31_nf; extern cpuop_func op_8139_31_ff; extern cpuop_func op_8140_31_nf; extern cpuop_func op_8140_31_ff; extern cpuop_func op_8148_31_nf; extern cpuop_func op_8148_31_ff; extern cpuop_func op_8150_31_nf; extern cpuop_func op_8150_31_ff; extern cpuop_func op_8158_31_nf; extern cpuop_func op_8158_31_ff; extern cpuop_func op_8160_31_nf; extern cpuop_func op_8160_31_ff; extern cpuop_func op_8168_31_nf; extern cpuop_func op_8168_31_ff; extern cpuop_func op_8170_31_nf; extern cpuop_func op_8170_31_ff; extern cpuop_func op_8178_31_nf; extern cpuop_func op_8178_31_ff; extern cpuop_func op_8179_31_nf; extern cpuop_func op_8179_31_ff; extern cpuop_func op_8180_31_nf; extern cpuop_func op_8180_31_ff; extern cpuop_func op_8188_31_nf; extern cpuop_func op_8188_31_ff; extern cpuop_func op_8190_31_nf; extern cpuop_func op_8190_31_ff; extern cpuop_func op_8198_31_nf; extern cpuop_func op_8198_31_ff; extern cpuop_func op_81a0_31_nf; extern cpuop_func op_81a0_31_ff; extern cpuop_func op_81a8_31_nf; extern cpuop_func op_81a8_31_ff; extern cpuop_func op_81b0_31_nf; extern cpuop_func op_81b0_31_ff; extern cpuop_func op_81b8_31_nf; extern cpuop_func op_81b8_31_ff; extern cpuop_func op_81b9_31_nf; extern cpuop_func op_81b9_31_ff; extern cpuop_func op_81c0_31_nf; extern cpuop_func op_81c0_31_ff; extern cpuop_func op_81d0_31_nf; extern cpuop_func op_81d0_31_ff; extern cpuop_func op_81d8_31_nf; extern cpuop_func op_81d8_31_ff; extern cpuop_func op_81e0_31_nf; extern cpuop_func op_81e0_31_ff; extern cpuop_func op_81e8_31_nf; extern cpuop_func op_81e8_31_ff; extern cpuop_func op_81f0_31_nf; extern cpuop_func op_81f0_31_ff; extern cpuop_func op_81f8_31_nf; extern cpuop_func op_81f8_31_ff; extern cpuop_func op_81f9_31_nf; extern cpuop_func op_81f9_31_ff; extern cpuop_func op_81fa_31_nf; extern cpuop_func op_81fa_31_ff; extern cpuop_func op_81fb_31_nf; extern cpuop_func op_81fb_31_ff; extern cpuop_func op_81fc_31_nf; extern cpuop_func op_81fc_31_ff; extern cpuop_func op_9000_31_nf; extern cpuop_func op_9000_31_ff; extern cpuop_func op_9010_31_nf; extern cpuop_func op_9010_31_ff; extern cpuop_func op_9018_31_nf; extern cpuop_func op_9018_31_ff; extern cpuop_func op_9020_31_nf; extern cpuop_func op_9020_31_ff; extern cpuop_func op_9028_31_nf; extern cpuop_func op_9028_31_ff; extern cpuop_func op_9030_31_nf; extern cpuop_func op_9030_31_ff; extern cpuop_func op_9038_31_nf; extern cpuop_func op_9038_31_ff; extern cpuop_func op_9039_31_nf; extern cpuop_func op_9039_31_ff; extern cpuop_func op_903a_31_nf; extern cpuop_func op_903a_31_ff; extern cpuop_func op_903b_31_nf; extern cpuop_func op_903b_31_ff; extern cpuop_func op_903c_31_nf; extern cpuop_func op_903c_31_ff; extern cpuop_func op_9040_31_nf; extern cpuop_func op_9040_31_ff; extern cpuop_func op_9048_31_nf; extern cpuop_func op_9048_31_ff; extern cpuop_func op_9050_31_nf; extern cpuop_func op_9050_31_ff; extern cpuop_func op_9058_31_nf; extern cpuop_func op_9058_31_ff; extern cpuop_func op_9060_31_nf; extern cpuop_func op_9060_31_ff; extern cpuop_func op_9068_31_nf; extern cpuop_func op_9068_31_ff; extern cpuop_func op_9070_31_nf; extern cpuop_func op_9070_31_ff; extern cpuop_func op_9078_31_nf; extern cpuop_func op_9078_31_ff; extern cpuop_func op_9079_31_nf; extern cpuop_func op_9079_31_ff; extern cpuop_func op_907a_31_nf; extern cpuop_func op_907a_31_ff; extern cpuop_func op_907b_31_nf; extern cpuop_func op_907b_31_ff; extern cpuop_func op_907c_31_nf; extern cpuop_func op_907c_31_ff; extern cpuop_func op_9080_31_nf; extern cpuop_func op_9080_31_ff; extern cpuop_func op_9088_31_nf; extern cpuop_func op_9088_31_ff; extern cpuop_func op_9090_31_nf; extern cpuop_func op_9090_31_ff; extern cpuop_func op_9098_31_nf; extern cpuop_func op_9098_31_ff; extern cpuop_func op_90a0_31_nf; extern cpuop_func op_90a0_31_ff; extern cpuop_func op_90a8_31_nf; extern cpuop_func op_90a8_31_ff; extern cpuop_func op_90b0_31_nf; extern cpuop_func op_90b0_31_ff; extern cpuop_func op_90b8_31_nf; extern cpuop_func op_90b8_31_ff; extern cpuop_func op_90b9_31_nf; extern cpuop_func op_90b9_31_ff; extern cpuop_func op_90ba_31_nf; extern cpuop_func op_90ba_31_ff; extern cpuop_func op_90bb_31_nf; extern cpuop_func op_90bb_31_ff; extern cpuop_func op_90bc_31_nf; extern cpuop_func op_90bc_31_ff; extern cpuop_func op_90c0_31_nf; extern cpuop_func op_90c0_31_ff; extern cpuop_func op_90c8_31_nf; extern cpuop_func op_90c8_31_ff; extern cpuop_func op_90d0_31_nf; extern cpuop_func op_90d0_31_ff; extern cpuop_func op_90d8_31_nf; extern cpuop_func op_90d8_31_ff; extern cpuop_func op_90e0_31_nf; extern cpuop_func op_90e0_31_ff; extern cpuop_func op_90e8_31_nf; extern cpuop_func op_90e8_31_ff; extern cpuop_func op_90f0_31_nf; extern cpuop_func op_90f0_31_ff; extern cpuop_func op_90f8_31_nf; extern cpuop_func op_90f8_31_ff; extern cpuop_func op_90f9_31_nf; extern cpuop_func op_90f9_31_ff; extern cpuop_func op_90fa_31_nf; extern cpuop_func op_90fa_31_ff; extern cpuop_func op_90fb_31_nf; extern cpuop_func op_90fb_31_ff; extern cpuop_func op_90fc_31_nf; extern cpuop_func op_90fc_31_ff; extern cpuop_func op_9100_31_nf; extern cpuop_func op_9100_31_ff; extern cpuop_func op_9108_31_nf; extern cpuop_func op_9108_31_ff; extern cpuop_func op_9110_31_nf; extern cpuop_func op_9110_31_ff; extern cpuop_func op_9118_31_nf; extern cpuop_func op_9118_31_ff; extern cpuop_func op_9120_31_nf; extern cpuop_func op_9120_31_ff; extern cpuop_func op_9128_31_nf; extern cpuop_func op_9128_31_ff; extern cpuop_func op_9130_31_nf; extern cpuop_func op_9130_31_ff; extern cpuop_func op_9138_31_nf; extern cpuop_func op_9138_31_ff; extern cpuop_func op_9139_31_nf; extern cpuop_func op_9139_31_ff; extern cpuop_func op_9140_31_nf; extern cpuop_func op_9140_31_ff; extern cpuop_func op_9148_31_nf; extern cpuop_func op_9148_31_ff; extern cpuop_func op_9150_31_nf; extern cpuop_func op_9150_31_ff; extern cpuop_func op_9158_31_nf; extern cpuop_func op_9158_31_ff; extern cpuop_func op_9160_31_nf; extern cpuop_func op_9160_31_ff; extern cpuop_func op_9168_31_nf; extern cpuop_func op_9168_31_ff; extern cpuop_func op_9170_31_nf; extern cpuop_func op_9170_31_ff; extern cpuop_func op_9178_31_nf; extern cpuop_func op_9178_31_ff; extern cpuop_func op_9179_31_nf; extern cpuop_func op_9179_31_ff; extern cpuop_func op_9180_31_nf; extern cpuop_func op_9180_31_ff; extern cpuop_func op_9188_31_nf; extern cpuop_func op_9188_31_ff; extern cpuop_func op_9190_31_nf; extern cpuop_func op_9190_31_ff; extern cpuop_func op_9198_31_nf; extern cpuop_func op_9198_31_ff; extern cpuop_func op_91a0_31_nf; extern cpuop_func op_91a0_31_ff; extern cpuop_func op_91a8_31_nf; extern cpuop_func op_91a8_31_ff; extern cpuop_func op_91b0_31_nf; extern cpuop_func op_91b0_31_ff; extern cpuop_func op_91b8_31_nf; extern cpuop_func op_91b8_31_ff; extern cpuop_func op_91b9_31_nf; extern cpuop_func op_91b9_31_ff; extern cpuop_func op_91c0_31_nf; extern cpuop_func op_91c0_31_ff; extern cpuop_func op_91c8_31_nf; extern cpuop_func op_91c8_31_ff; extern cpuop_func op_91d0_31_nf; extern cpuop_func op_91d0_31_ff; extern cpuop_func op_91d8_31_nf; extern cpuop_func op_91d8_31_ff; extern cpuop_func op_91e0_31_nf; extern cpuop_func op_91e0_31_ff; extern cpuop_func op_91e8_31_nf; extern cpuop_func op_91e8_31_ff; extern cpuop_func op_91f0_31_nf; extern cpuop_func op_91f0_31_ff; extern cpuop_func op_91f8_31_nf; extern cpuop_func op_91f8_31_ff; extern cpuop_func op_91f9_31_nf; extern cpuop_func op_91f9_31_ff; extern cpuop_func op_91fa_31_nf; extern cpuop_func op_91fa_31_ff; extern cpuop_func op_91fb_31_nf; extern cpuop_func op_91fb_31_ff; extern cpuop_func op_91fc_31_nf; extern cpuop_func op_91fc_31_ff; extern cpuop_func op_b000_31_nf; extern cpuop_func op_b000_31_ff; extern cpuop_func op_b010_31_nf; extern cpuop_func op_b010_31_ff; extern cpuop_func op_b018_31_nf; extern cpuop_func op_b018_31_ff; extern cpuop_func op_b020_31_nf; extern cpuop_func op_b020_31_ff; extern cpuop_func op_b028_31_nf; extern cpuop_func op_b028_31_ff; extern cpuop_func op_b030_31_nf; extern cpuop_func op_b030_31_ff; extern cpuop_func op_b038_31_nf; extern cpuop_func op_b038_31_ff; extern cpuop_func op_b039_31_nf; extern cpuop_func op_b039_31_ff; extern cpuop_func op_b03a_31_nf; extern cpuop_func op_b03a_31_ff; extern cpuop_func op_b03b_31_nf; extern cpuop_func op_b03b_31_ff; extern cpuop_func op_b03c_31_nf; extern cpuop_func op_b03c_31_ff; extern cpuop_func op_b040_31_nf; extern cpuop_func op_b040_31_ff; extern cpuop_func op_b048_31_nf; extern cpuop_func op_b048_31_ff; extern cpuop_func op_b050_31_nf; extern cpuop_func op_b050_31_ff; extern cpuop_func op_b058_31_nf; extern cpuop_func op_b058_31_ff; extern cpuop_func op_b060_31_nf; extern cpuop_func op_b060_31_ff; extern cpuop_func op_b068_31_nf; extern cpuop_func op_b068_31_ff; extern cpuop_func op_b070_31_nf; extern cpuop_func op_b070_31_ff; extern cpuop_func op_b078_31_nf; extern cpuop_func op_b078_31_ff; extern cpuop_func op_b079_31_nf; extern cpuop_func op_b079_31_ff; extern cpuop_func op_b07a_31_nf; extern cpuop_func op_b07a_31_ff; extern cpuop_func op_b07b_31_nf; extern cpuop_func op_b07b_31_ff; extern cpuop_func op_b07c_31_nf; extern cpuop_func op_b07c_31_ff; extern cpuop_func op_b080_31_nf; extern cpuop_func op_b080_31_ff; extern cpuop_func op_b088_31_nf; extern cpuop_func op_b088_31_ff; extern cpuop_func op_b090_31_nf; extern cpuop_func op_b090_31_ff; extern cpuop_func op_b098_31_nf; extern cpuop_func op_b098_31_ff; extern cpuop_func op_b0a0_31_nf; extern cpuop_func op_b0a0_31_ff; extern cpuop_func op_b0a8_31_nf; extern cpuop_func op_b0a8_31_ff; extern cpuop_func op_b0b0_31_nf; extern cpuop_func op_b0b0_31_ff; extern cpuop_func op_b0b8_31_nf; extern cpuop_func op_b0b8_31_ff; extern cpuop_func op_b0b9_31_nf; extern cpuop_func op_b0b9_31_ff; extern cpuop_func op_b0ba_31_nf; extern cpuop_func op_b0ba_31_ff; extern cpuop_func op_b0bb_31_nf; extern cpuop_func op_b0bb_31_ff; extern cpuop_func op_b0bc_31_nf; extern cpuop_func op_b0bc_31_ff; extern cpuop_func op_b0c0_31_nf; extern cpuop_func op_b0c0_31_ff; extern cpuop_func op_b0c8_31_nf; extern cpuop_func op_b0c8_31_ff; extern cpuop_func op_b0d0_31_nf; extern cpuop_func op_b0d0_31_ff; extern cpuop_func op_b0d8_31_nf; extern cpuop_func op_b0d8_31_ff; extern cpuop_func op_b0e0_31_nf; extern cpuop_func op_b0e0_31_ff; extern cpuop_func op_b0e8_31_nf; extern cpuop_func op_b0e8_31_ff; extern cpuop_func op_b0f0_31_nf; extern cpuop_func op_b0f0_31_ff; extern cpuop_func op_b0f8_31_nf; extern cpuop_func op_b0f8_31_ff; extern cpuop_func op_b0f9_31_nf; extern cpuop_func op_b0f9_31_ff; extern cpuop_func op_b0fa_31_nf; extern cpuop_func op_b0fa_31_ff; extern cpuop_func op_b0fb_31_nf; extern cpuop_func op_b0fb_31_ff; extern cpuop_func op_b0fc_31_nf; extern cpuop_func op_b0fc_31_ff; extern cpuop_func op_b100_31_nf; extern cpuop_func op_b100_31_ff; extern cpuop_func op_b108_31_nf; extern cpuop_func op_b108_31_ff; extern cpuop_func op_b110_31_nf; extern cpuop_func op_b110_31_ff; extern cpuop_func op_b118_31_nf; extern cpuop_func op_b118_31_ff; extern cpuop_func op_b120_31_nf; extern cpuop_func op_b120_31_ff; extern cpuop_func op_b128_31_nf; extern cpuop_func op_b128_31_ff; extern cpuop_func op_b130_31_nf; extern cpuop_func op_b130_31_ff; extern cpuop_func op_b138_31_nf; extern cpuop_func op_b138_31_ff; extern cpuop_func op_b139_31_nf; extern cpuop_func op_b139_31_ff; extern cpuop_func op_b140_31_nf; extern cpuop_func op_b140_31_ff; extern cpuop_func op_b148_31_nf; extern cpuop_func op_b148_31_ff; extern cpuop_func op_b150_31_nf; extern cpuop_func op_b150_31_ff; extern cpuop_func op_b158_31_nf; extern cpuop_func op_b158_31_ff; extern cpuop_func op_b160_31_nf; extern cpuop_func op_b160_31_ff; extern cpuop_func op_b168_31_nf; extern cpuop_func op_b168_31_ff; extern cpuop_func op_b170_31_nf; extern cpuop_func op_b170_31_ff; extern cpuop_func op_b178_31_nf; extern cpuop_func op_b178_31_ff; extern cpuop_func op_b179_31_nf; extern cpuop_func op_b179_31_ff; extern cpuop_func op_b180_31_nf; extern cpuop_func op_b180_31_ff; extern cpuop_func op_b188_31_nf; extern cpuop_func op_b188_31_ff; extern cpuop_func op_b190_31_nf; extern cpuop_func op_b190_31_ff; extern cpuop_func op_b198_31_nf; extern cpuop_func op_b198_31_ff; extern cpuop_func op_b1a0_31_nf; extern cpuop_func op_b1a0_31_ff; extern cpuop_func op_b1a8_31_nf; extern cpuop_func op_b1a8_31_ff; extern cpuop_func op_b1b0_31_nf; extern cpuop_func op_b1b0_31_ff; extern cpuop_func op_b1b8_31_nf; extern cpuop_func op_b1b8_31_ff; extern cpuop_func op_b1b9_31_nf; extern cpuop_func op_b1b9_31_ff; extern cpuop_func op_b1c0_31_nf; extern cpuop_func op_b1c0_31_ff; extern cpuop_func op_b1c8_31_nf; extern cpuop_func op_b1c8_31_ff; extern cpuop_func op_b1d0_31_nf; extern cpuop_func op_b1d0_31_ff; extern cpuop_func op_b1d8_31_nf; extern cpuop_func op_b1d8_31_ff; extern cpuop_func op_b1e0_31_nf; extern cpuop_func op_b1e0_31_ff; extern cpuop_func op_b1e8_31_nf; extern cpuop_func op_b1e8_31_ff; extern cpuop_func op_b1f0_31_nf; extern cpuop_func op_b1f0_31_ff; extern cpuop_func op_b1f8_31_nf; extern cpuop_func op_b1f8_31_ff; extern cpuop_func op_b1f9_31_nf; extern cpuop_func op_b1f9_31_ff; extern cpuop_func op_b1fa_31_nf; extern cpuop_func op_b1fa_31_ff; extern cpuop_func op_b1fb_31_nf; extern cpuop_func op_b1fb_31_ff; extern cpuop_func op_b1fc_31_nf; extern cpuop_func op_b1fc_31_ff; extern cpuop_func op_c000_31_nf; extern cpuop_func op_c000_31_ff; extern cpuop_func op_c010_31_nf; extern cpuop_func op_c010_31_ff; extern cpuop_func op_c018_31_nf; extern cpuop_func op_c018_31_ff; extern cpuop_func op_c020_31_nf; extern cpuop_func op_c020_31_ff; extern cpuop_func op_c028_31_nf; extern cpuop_func op_c028_31_ff; extern cpuop_func op_c030_31_nf; extern cpuop_func op_c030_31_ff; extern cpuop_func op_c038_31_nf; extern cpuop_func op_c038_31_ff; extern cpuop_func op_c039_31_nf; extern cpuop_func op_c039_31_ff; extern cpuop_func op_c03a_31_nf; extern cpuop_func op_c03a_31_ff; extern cpuop_func op_c03b_31_nf; extern cpuop_func op_c03b_31_ff; extern cpuop_func op_c03c_31_nf; extern cpuop_func op_c03c_31_ff; extern cpuop_func op_c040_31_nf; extern cpuop_func op_c040_31_ff; extern cpuop_func op_c050_31_nf; extern cpuop_func op_c050_31_ff; extern cpuop_func op_c058_31_nf; extern cpuop_func op_c058_31_ff; extern cpuop_func op_c060_31_nf; extern cpuop_func op_c060_31_ff; extern cpuop_func op_c068_31_nf; extern cpuop_func op_c068_31_ff; extern cpuop_func op_c070_31_nf; extern cpuop_func op_c070_31_ff; extern cpuop_func op_c078_31_nf; extern cpuop_func op_c078_31_ff; extern cpuop_func op_c079_31_nf; extern cpuop_func op_c079_31_ff; extern cpuop_func op_c07a_31_nf; extern cpuop_func op_c07a_31_ff; extern cpuop_func op_c07b_31_nf; extern cpuop_func op_c07b_31_ff; extern cpuop_func op_c07c_31_nf; extern cpuop_func op_c07c_31_ff; extern cpuop_func op_c080_31_nf; extern cpuop_func op_c080_31_ff; extern cpuop_func op_c090_31_nf; extern cpuop_func op_c090_31_ff; extern cpuop_func op_c098_31_nf; extern cpuop_func op_c098_31_ff; extern cpuop_func op_c0a0_31_nf; extern cpuop_func op_c0a0_31_ff; extern cpuop_func op_c0a8_31_nf; extern cpuop_func op_c0a8_31_ff; extern cpuop_func op_c0b0_31_nf; extern cpuop_func op_c0b0_31_ff; extern cpuop_func op_c0b8_31_nf; extern cpuop_func op_c0b8_31_ff; extern cpuop_func op_c0b9_31_nf; extern cpuop_func op_c0b9_31_ff; extern cpuop_func op_c0ba_31_nf; extern cpuop_func op_c0ba_31_ff; extern cpuop_func op_c0bb_31_nf; extern cpuop_func op_c0bb_31_ff; extern cpuop_func op_c0bc_31_nf; extern cpuop_func op_c0bc_31_ff; extern cpuop_func op_c0c0_31_nf; extern cpuop_func op_c0c0_31_ff; extern cpuop_func op_c0d0_31_nf; extern cpuop_func op_c0d0_31_ff; extern cpuop_func op_c0d8_31_nf; extern cpuop_func op_c0d8_31_ff; extern cpuop_func op_c0e0_31_nf; extern cpuop_func op_c0e0_31_ff; extern cpuop_func op_c0e8_31_nf; extern cpuop_func op_c0e8_31_ff; extern cpuop_func op_c0f0_31_nf; extern cpuop_func op_c0f0_31_ff; extern cpuop_func op_c0f8_31_nf; extern cpuop_func op_c0f8_31_ff; extern cpuop_func op_c0f9_31_nf; extern cpuop_func op_c0f9_31_ff; extern cpuop_func op_c0fa_31_nf; extern cpuop_func op_c0fa_31_ff; extern cpuop_func op_c0fb_31_nf; extern cpuop_func op_c0fb_31_ff; extern cpuop_func op_c0fc_31_nf; extern cpuop_func op_c0fc_31_ff; extern cpuop_func op_c100_31_nf; extern cpuop_func op_c100_31_ff; extern cpuop_func op_c108_31_nf; extern cpuop_func op_c108_31_ff; extern cpuop_func op_c110_31_nf; extern cpuop_func op_c110_31_ff; extern cpuop_func op_c118_31_nf; extern cpuop_func op_c118_31_ff; extern cpuop_func op_c120_31_nf; extern cpuop_func op_c120_31_ff; extern cpuop_func op_c128_31_nf; extern cpuop_func op_c128_31_ff; extern cpuop_func op_c130_31_nf; extern cpuop_func op_c130_31_ff; extern cpuop_func op_c138_31_nf; extern cpuop_func op_c138_31_ff; extern cpuop_func op_c139_31_nf; extern cpuop_func op_c139_31_ff; extern cpuop_func op_c140_31_nf; extern cpuop_func op_c140_31_ff; extern cpuop_func op_c148_31_nf; extern cpuop_func op_c148_31_ff; extern cpuop_func op_c150_31_nf; extern cpuop_func op_c150_31_ff; extern cpuop_func op_c158_31_nf; extern cpuop_func op_c158_31_ff; extern cpuop_func op_c160_31_nf; extern cpuop_func op_c160_31_ff; extern cpuop_func op_c168_31_nf; extern cpuop_func op_c168_31_ff; extern cpuop_func op_c170_31_nf; extern cpuop_func op_c170_31_ff; extern cpuop_func op_c178_31_nf; extern cpuop_func op_c178_31_ff; extern cpuop_func op_c179_31_nf; extern cpuop_func op_c179_31_ff; extern cpuop_func op_c188_31_nf; extern cpuop_func op_c188_31_ff; extern cpuop_func op_c190_31_nf; extern cpuop_func op_c190_31_ff; extern cpuop_func op_c198_31_nf; extern cpuop_func op_c198_31_ff; extern cpuop_func op_c1a0_31_nf; extern cpuop_func op_c1a0_31_ff; extern cpuop_func op_c1a8_31_nf; extern cpuop_func op_c1a8_31_ff; extern cpuop_func op_c1b0_31_nf; extern cpuop_func op_c1b0_31_ff; extern cpuop_func op_c1b8_31_nf; extern cpuop_func op_c1b8_31_ff; extern cpuop_func op_c1b9_31_nf; extern cpuop_func op_c1b9_31_ff; extern cpuop_func op_c1c0_31_nf; extern cpuop_func op_c1c0_31_ff; extern cpuop_func op_c1d0_31_nf; extern cpuop_func op_c1d0_31_ff; extern cpuop_func op_c1d8_31_nf; extern cpuop_func op_c1d8_31_ff; extern cpuop_func op_c1e0_31_nf; extern cpuop_func op_c1e0_31_ff; extern cpuop_func op_c1e8_31_nf; extern cpuop_func op_c1e8_31_ff; extern cpuop_func op_c1f0_31_nf; extern cpuop_func op_c1f0_31_ff; extern cpuop_func op_c1f8_31_nf; extern cpuop_func op_c1f8_31_ff; extern cpuop_func op_c1f9_31_nf; extern cpuop_func op_c1f9_31_ff; extern cpuop_func op_c1fa_31_nf; extern cpuop_func op_c1fa_31_ff; extern cpuop_func op_c1fb_31_nf; extern cpuop_func op_c1fb_31_ff; extern cpuop_func op_c1fc_31_nf; extern cpuop_func op_c1fc_31_ff; extern cpuop_func op_d000_31_nf; extern cpuop_func op_d000_31_ff; extern cpuop_func op_d010_31_nf; extern cpuop_func op_d010_31_ff; extern cpuop_func op_d018_31_nf; extern cpuop_func op_d018_31_ff; extern cpuop_func op_d020_31_nf; extern cpuop_func op_d020_31_ff; extern cpuop_func op_d028_31_nf; extern cpuop_func op_d028_31_ff; extern cpuop_func op_d030_31_nf; extern cpuop_func op_d030_31_ff; extern cpuop_func op_d038_31_nf; extern cpuop_func op_d038_31_ff; extern cpuop_func op_d039_31_nf; extern cpuop_func op_d039_31_ff; extern cpuop_func op_d03a_31_nf; extern cpuop_func op_d03a_31_ff; extern cpuop_func op_d03b_31_nf; extern cpuop_func op_d03b_31_ff; extern cpuop_func op_d03c_31_nf; extern cpuop_func op_d03c_31_ff; extern cpuop_func op_d040_31_nf; extern cpuop_func op_d040_31_ff; extern cpuop_func op_d048_31_nf; extern cpuop_func op_d048_31_ff; extern cpuop_func op_d050_31_nf; extern cpuop_func op_d050_31_ff; extern cpuop_func op_d058_31_nf; extern cpuop_func op_d058_31_ff; extern cpuop_func op_d060_31_nf; extern cpuop_func op_d060_31_ff; extern cpuop_func op_d068_31_nf; extern cpuop_func op_d068_31_ff; extern cpuop_func op_d070_31_nf; extern cpuop_func op_d070_31_ff; extern cpuop_func op_d078_31_nf; extern cpuop_func op_d078_31_ff; extern cpuop_func op_d079_31_nf; extern cpuop_func op_d079_31_ff; extern cpuop_func op_d07a_31_nf; extern cpuop_func op_d07a_31_ff; extern cpuop_func op_d07b_31_nf; extern cpuop_func op_d07b_31_ff; extern cpuop_func op_d07c_31_nf; extern cpuop_func op_d07c_31_ff; extern cpuop_func op_d080_31_nf; extern cpuop_func op_d080_31_ff; extern cpuop_func op_d088_31_nf; extern cpuop_func op_d088_31_ff; extern cpuop_func op_d090_31_nf; extern cpuop_func op_d090_31_ff; extern cpuop_func op_d098_31_nf; extern cpuop_func op_d098_31_ff; extern cpuop_func op_d0a0_31_nf; extern cpuop_func op_d0a0_31_ff; extern cpuop_func op_d0a8_31_nf; extern cpuop_func op_d0a8_31_ff; extern cpuop_func op_d0b0_31_nf; extern cpuop_func op_d0b0_31_ff; extern cpuop_func op_d0b8_31_nf; extern cpuop_func op_d0b8_31_ff; extern cpuop_func op_d0b9_31_nf; extern cpuop_func op_d0b9_31_ff; extern cpuop_func op_d0ba_31_nf; extern cpuop_func op_d0ba_31_ff; extern cpuop_func op_d0bb_31_nf; extern cpuop_func op_d0bb_31_ff; extern cpuop_func op_d0bc_31_nf; extern cpuop_func op_d0bc_31_ff; extern cpuop_func op_d0c0_31_nf; extern cpuop_func op_d0c0_31_ff; extern cpuop_func op_d0c8_31_nf; extern cpuop_func op_d0c8_31_ff; extern cpuop_func op_d0d0_31_nf; extern cpuop_func op_d0d0_31_ff; extern cpuop_func op_d0d8_31_nf; extern cpuop_func op_d0d8_31_ff; extern cpuop_func op_d0e0_31_nf; extern cpuop_func op_d0e0_31_ff; extern cpuop_func op_d0e8_31_nf; extern cpuop_func op_d0e8_31_ff; extern cpuop_func op_d0f0_31_nf; extern cpuop_func op_d0f0_31_ff; extern cpuop_func op_d0f8_31_nf; extern cpuop_func op_d0f8_31_ff; extern cpuop_func op_d0f9_31_nf; extern cpuop_func op_d0f9_31_ff; extern cpuop_func op_d0fa_31_nf; extern cpuop_func op_d0fa_31_ff; extern cpuop_func op_d0fb_31_nf; extern cpuop_func op_d0fb_31_ff; extern cpuop_func op_d0fc_31_nf; extern cpuop_func op_d0fc_31_ff; extern cpuop_func op_d100_31_nf; extern cpuop_func op_d100_31_ff; extern cpuop_func op_d108_31_nf; extern cpuop_func op_d108_31_ff; extern cpuop_func op_d110_31_nf; extern cpuop_func op_d110_31_ff; extern cpuop_func op_d118_31_nf; extern cpuop_func op_d118_31_ff; extern cpuop_func op_d120_31_nf; extern cpuop_func op_d120_31_ff; extern cpuop_func op_d128_31_nf; extern cpuop_func op_d128_31_ff; extern cpuop_func op_d130_31_nf; extern cpuop_func op_d130_31_ff; extern cpuop_func op_d138_31_nf; extern cpuop_func op_d138_31_ff; extern cpuop_func op_d139_31_nf; extern cpuop_func op_d139_31_ff; extern cpuop_func op_d140_31_nf; extern cpuop_func op_d140_31_ff; extern cpuop_func op_d148_31_nf; extern cpuop_func op_d148_31_ff; extern cpuop_func op_d150_31_nf; extern cpuop_func op_d150_31_ff; extern cpuop_func op_d158_31_nf; extern cpuop_func op_d158_31_ff; extern cpuop_func op_d160_31_nf; extern cpuop_func op_d160_31_ff; extern cpuop_func op_d168_31_nf; extern cpuop_func op_d168_31_ff; extern cpuop_func op_d170_31_nf; extern cpuop_func op_d170_31_ff; extern cpuop_func op_d178_31_nf; extern cpuop_func op_d178_31_ff; extern cpuop_func op_d179_31_nf; extern cpuop_func op_d179_31_ff; extern cpuop_func op_d180_31_nf; extern cpuop_func op_d180_31_ff; extern cpuop_func op_d188_31_nf; extern cpuop_func op_d188_31_ff; extern cpuop_func op_d190_31_nf; extern cpuop_func op_d190_31_ff; extern cpuop_func op_d198_31_nf; extern cpuop_func op_d198_31_ff; extern cpuop_func op_d1a0_31_nf; extern cpuop_func op_d1a0_31_ff; extern cpuop_func op_d1a8_31_nf; extern cpuop_func op_d1a8_31_ff; extern cpuop_func op_d1b0_31_nf; extern cpuop_func op_d1b0_31_ff; extern cpuop_func op_d1b8_31_nf; extern cpuop_func op_d1b8_31_ff; extern cpuop_func op_d1b9_31_nf; extern cpuop_func op_d1b9_31_ff; extern cpuop_func op_d1c0_31_nf; extern cpuop_func op_d1c0_31_ff; extern cpuop_func op_d1c8_31_nf; extern cpuop_func op_d1c8_31_ff; extern cpuop_func op_d1d0_31_nf; extern cpuop_func op_d1d0_31_ff; extern cpuop_func op_d1d8_31_nf; extern cpuop_func op_d1d8_31_ff; extern cpuop_func op_d1e0_31_nf; extern cpuop_func op_d1e0_31_ff; extern cpuop_func op_d1e8_31_nf; extern cpuop_func op_d1e8_31_ff; extern cpuop_func op_d1f0_31_nf; extern cpuop_func op_d1f0_31_ff; extern cpuop_func op_d1f8_31_nf; extern cpuop_func op_d1f8_31_ff; extern cpuop_func op_d1f9_31_nf; extern cpuop_func op_d1f9_31_ff; extern cpuop_func op_d1fa_31_nf; extern cpuop_func op_d1fa_31_ff; extern cpuop_func op_d1fb_31_nf; extern cpuop_func op_d1fb_31_ff; extern cpuop_func op_d1fc_31_nf; extern cpuop_func op_d1fc_31_ff; extern cpuop_func op_e000_31_nf; extern cpuop_func op_e000_31_ff; extern cpuop_func op_e008_31_nf; extern cpuop_func op_e008_31_ff; extern cpuop_func op_e010_31_nf; extern cpuop_func op_e010_31_ff; extern cpuop_func op_e018_31_nf; extern cpuop_func op_e018_31_ff; extern cpuop_func op_e020_31_nf; extern cpuop_func op_e020_31_ff; extern cpuop_func op_e028_31_nf; extern cpuop_func op_e028_31_ff; extern cpuop_func op_e030_31_nf; extern cpuop_func op_e030_31_ff; extern cpuop_func op_e038_31_nf; extern cpuop_func op_e038_31_ff; extern cpuop_func op_e040_31_nf; extern cpuop_func op_e040_31_ff; extern cpuop_func op_e048_31_nf; extern cpuop_func op_e048_31_ff; extern cpuop_func op_e050_31_nf; extern cpuop_func op_e050_31_ff; extern cpuop_func op_e058_31_nf; extern cpuop_func op_e058_31_ff; extern cpuop_func op_e060_31_nf; extern cpuop_func op_e060_31_ff; extern cpuop_func op_e068_31_nf; extern cpuop_func op_e068_31_ff; extern cpuop_func op_e070_31_nf; extern cpuop_func op_e070_31_ff; extern cpuop_func op_e078_31_nf; extern cpuop_func op_e078_31_ff; extern cpuop_func op_e080_31_nf; extern cpuop_func op_e080_31_ff; extern cpuop_func op_e088_31_nf; extern cpuop_func op_e088_31_ff; extern cpuop_func op_e090_31_nf; extern cpuop_func op_e090_31_ff; extern cpuop_func op_e098_31_nf; extern cpuop_func op_e098_31_ff; extern cpuop_func op_e0a0_31_nf; extern cpuop_func op_e0a0_31_ff; extern cpuop_func op_e0a8_31_nf; extern cpuop_func op_e0a8_31_ff; extern cpuop_func op_e0b0_31_nf; extern cpuop_func op_e0b0_31_ff; extern cpuop_func op_e0b8_31_nf; extern cpuop_func op_e0b8_31_ff; extern cpuop_func op_e0d0_31_nf; extern cpuop_func op_e0d0_31_ff; extern cpuop_func op_e0d8_31_nf; extern cpuop_func op_e0d8_31_ff; extern cpuop_func op_e0e0_31_nf; extern cpuop_func op_e0e0_31_ff; extern cpuop_func op_e0e8_31_nf; extern cpuop_func op_e0e8_31_ff; extern cpuop_func op_e0f0_31_nf; extern cpuop_func op_e0f0_31_ff; extern cpuop_func op_e0f8_31_nf; extern cpuop_func op_e0f8_31_ff; extern cpuop_func op_e0f9_31_nf; extern cpuop_func op_e0f9_31_ff; extern cpuop_func op_e100_31_nf; extern cpuop_func op_e100_31_ff; extern cpuop_func op_e108_31_nf; extern cpuop_func op_e108_31_ff; extern cpuop_func op_e110_31_nf; extern cpuop_func op_e110_31_ff; extern cpuop_func op_e118_31_nf; extern cpuop_func op_e118_31_ff; extern cpuop_func op_e120_31_nf; extern cpuop_func op_e120_31_ff; extern cpuop_func op_e128_31_nf; extern cpuop_func op_e128_31_ff; extern cpuop_func op_e130_31_nf; extern cpuop_func op_e130_31_ff; extern cpuop_func op_e138_31_nf; extern cpuop_func op_e138_31_ff; extern cpuop_func op_e140_31_nf; extern cpuop_func op_e140_31_ff; extern cpuop_func op_e148_31_nf; extern cpuop_func op_e148_31_ff; extern cpuop_func op_e150_31_nf; extern cpuop_func op_e150_31_ff; extern cpuop_func op_e158_31_nf; extern cpuop_func op_e158_31_ff; extern cpuop_func op_e160_31_nf; extern cpuop_func op_e160_31_ff; extern cpuop_func op_e168_31_nf; extern cpuop_func op_e168_31_ff; extern cpuop_func op_e170_31_nf; extern cpuop_func op_e170_31_ff; extern cpuop_func op_e178_31_nf; extern cpuop_func op_e178_31_ff; extern cpuop_func op_e180_31_nf; extern cpuop_func op_e180_31_ff; extern cpuop_func op_e188_31_nf; extern cpuop_func op_e188_31_ff; extern cpuop_func op_e190_31_nf; extern cpuop_func op_e190_31_ff; extern cpuop_func op_e198_31_nf; extern cpuop_func op_e198_31_ff; extern cpuop_func op_e1a0_31_nf; extern cpuop_func op_e1a0_31_ff; extern cpuop_func op_e1a8_31_nf; extern cpuop_func op_e1a8_31_ff; extern cpuop_func op_e1b0_31_nf; extern cpuop_func op_e1b0_31_ff; extern cpuop_func op_e1b8_31_nf; extern cpuop_func op_e1b8_31_ff; extern cpuop_func op_e1d0_31_nf; extern cpuop_func op_e1d0_31_ff; extern cpuop_func op_e1d8_31_nf; extern cpuop_func op_e1d8_31_ff; extern cpuop_func op_e1e0_31_nf; extern cpuop_func op_e1e0_31_ff; extern cpuop_func op_e1e8_31_nf; extern cpuop_func op_e1e8_31_ff; extern cpuop_func op_e1f0_31_nf; extern cpuop_func op_e1f0_31_ff; extern cpuop_func op_e1f8_31_nf; extern cpuop_func op_e1f8_31_ff; extern cpuop_func op_e1f9_31_nf; extern cpuop_func op_e1f9_31_ff; extern cpuop_func op_e2d0_31_nf; extern cpuop_func op_e2d0_31_ff; extern cpuop_func op_e2d8_31_nf; extern cpuop_func op_e2d8_31_ff; extern cpuop_func op_e2e0_31_nf; extern cpuop_func op_e2e0_31_ff; extern cpuop_func op_e2e8_31_nf; extern cpuop_func op_e2e8_31_ff; extern cpuop_func op_e2f0_31_nf; extern cpuop_func op_e2f0_31_ff; extern cpuop_func op_e2f8_31_nf; extern cpuop_func op_e2f8_31_ff; extern cpuop_func op_e2f9_31_nf; extern cpuop_func op_e2f9_31_ff; extern cpuop_func op_e3d0_31_nf; extern cpuop_func op_e3d0_31_ff; extern cpuop_func op_e3d8_31_nf; extern cpuop_func op_e3d8_31_ff; extern cpuop_func op_e3e0_31_nf; extern cpuop_func op_e3e0_31_ff; extern cpuop_func op_e3e8_31_nf; extern cpuop_func op_e3e8_31_ff; extern cpuop_func op_e3f0_31_nf; extern cpuop_func op_e3f0_31_ff; extern cpuop_func op_e3f8_31_nf; extern cpuop_func op_e3f8_31_ff; extern cpuop_func op_e3f9_31_nf; extern cpuop_func op_e3f9_31_ff; extern cpuop_func op_e4d0_31_nf; extern cpuop_func op_e4d0_31_ff; extern cpuop_func op_e4d8_31_nf; extern cpuop_func op_e4d8_31_ff; extern cpuop_func op_e4e0_31_nf; extern cpuop_func op_e4e0_31_ff; extern cpuop_func op_e4e8_31_nf; extern cpuop_func op_e4e8_31_ff; extern cpuop_func op_e4f0_31_nf; extern cpuop_func op_e4f0_31_ff; extern cpuop_func op_e4f8_31_nf; extern cpuop_func op_e4f8_31_ff; extern cpuop_func op_e4f9_31_nf; extern cpuop_func op_e4f9_31_ff; extern cpuop_func op_e5d0_31_nf; extern cpuop_func op_e5d0_31_ff; extern cpuop_func op_e5d8_31_nf; extern cpuop_func op_e5d8_31_ff; extern cpuop_func op_e5e0_31_nf; extern cpuop_func op_e5e0_31_ff; extern cpuop_func op_e5e8_31_nf; extern cpuop_func op_e5e8_31_ff; extern cpuop_func op_e5f0_31_nf; extern cpuop_func op_e5f0_31_ff; extern cpuop_func op_e5f8_31_nf; extern cpuop_func op_e5f8_31_ff; extern cpuop_func op_e5f9_31_nf; extern cpuop_func op_e5f9_31_ff; extern cpuop_func op_e6d0_31_nf; extern cpuop_func op_e6d0_31_ff; extern cpuop_func op_e6d8_31_nf; extern cpuop_func op_e6d8_31_ff; extern cpuop_func op_e6e0_31_nf; extern cpuop_func op_e6e0_31_ff; extern cpuop_func op_e6e8_31_nf; extern cpuop_func op_e6e8_31_ff; extern cpuop_func op_e6f0_31_nf; extern cpuop_func op_e6f0_31_ff; extern cpuop_func op_e6f8_31_nf; extern cpuop_func op_e6f8_31_ff; extern cpuop_func op_e6f9_31_nf; extern cpuop_func op_e6f9_31_ff; extern cpuop_func op_e7d0_31_nf; extern cpuop_func op_e7d0_31_ff; extern cpuop_func op_e7d8_31_nf; extern cpuop_func op_e7d8_31_ff; extern cpuop_func op_e7e0_31_nf; extern cpuop_func op_e7e0_31_ff; extern cpuop_func op_e7e8_31_nf; extern cpuop_func op_e7e8_31_ff; extern cpuop_func op_e7f0_31_nf; extern cpuop_func op_e7f0_31_ff; extern cpuop_func op_e7f8_31_nf; extern cpuop_func op_e7f8_31_ff; extern cpuop_func op_e7f9_31_nf; extern cpuop_func op_e7f9_31_ff; extern cpuop_func op_e8c0_31_nf; extern cpuop_func op_e8c0_31_ff; extern cpuop_func op_e8d0_31_nf; extern cpuop_func op_e8d0_31_ff; extern cpuop_func op_e8e8_31_nf; extern cpuop_func op_e8e8_31_ff; extern cpuop_func op_e8f0_31_nf; extern cpuop_func op_e8f0_31_ff; extern cpuop_func op_e8f8_31_nf; extern cpuop_func op_e8f8_31_ff; extern cpuop_func op_e8f9_31_nf; extern cpuop_func op_e8f9_31_ff; extern cpuop_func op_e8fa_31_nf; extern cpuop_func op_e8fa_31_ff; extern cpuop_func op_e8fb_31_nf; extern cpuop_func op_e8fb_31_ff; extern cpuop_func op_e9c0_31_nf; extern cpuop_func op_e9c0_31_ff; extern cpuop_func op_e9d0_31_nf; extern cpuop_func op_e9d0_31_ff; extern cpuop_func op_e9e8_31_nf; extern cpuop_func op_e9e8_31_ff; extern cpuop_func op_e9f0_31_nf; extern cpuop_func op_e9f0_31_ff; extern cpuop_func op_e9f8_31_nf; extern cpuop_func op_e9f8_31_ff; extern cpuop_func op_e9f9_31_nf; extern cpuop_func op_e9f9_31_ff; extern cpuop_func op_e9fa_31_nf; extern cpuop_func op_e9fa_31_ff; extern cpuop_func op_e9fb_31_nf; extern cpuop_func op_e9fb_31_ff; extern cpuop_func op_eac0_31_nf; extern cpuop_func op_eac0_31_ff; extern cpuop_func op_ead0_31_nf; extern cpuop_func op_ead0_31_ff; extern cpuop_func op_eae8_31_nf; extern cpuop_func op_eae8_31_ff; extern cpuop_func op_eaf0_31_nf; extern cpuop_func op_eaf0_31_ff; extern cpuop_func op_eaf8_31_nf; extern cpuop_func op_eaf8_31_ff; extern cpuop_func op_eaf9_31_nf; extern cpuop_func op_eaf9_31_ff; extern cpuop_func op_ebc0_31_nf; extern cpuop_func op_ebc0_31_ff; extern cpuop_func op_ebd0_31_nf; extern cpuop_func op_ebd0_31_ff; extern cpuop_func op_ebe8_31_nf; extern cpuop_func op_ebe8_31_ff; extern cpuop_func op_ebf0_31_nf; extern cpuop_func op_ebf0_31_ff; extern cpuop_func op_ebf8_31_nf; extern cpuop_func op_ebf8_31_ff; extern cpuop_func op_ebf9_31_nf; extern cpuop_func op_ebf9_31_ff; extern cpuop_func op_ebfa_31_nf; extern cpuop_func op_ebfa_31_ff; extern cpuop_func op_ebfb_31_nf; extern cpuop_func op_ebfb_31_ff; extern cpuop_func op_ecc0_31_nf; extern cpuop_func op_ecc0_31_ff; extern cpuop_func op_ecd0_31_nf; extern cpuop_func op_ecd0_31_ff; extern cpuop_func op_ece8_31_nf; extern cpuop_func op_ece8_31_ff; extern cpuop_func op_ecf0_31_nf; extern cpuop_func op_ecf0_31_ff; extern cpuop_func op_ecf8_31_nf; extern cpuop_func op_ecf8_31_ff; extern cpuop_func op_ecf9_31_nf; extern cpuop_func op_ecf9_31_ff; extern cpuop_func op_edc0_31_nf; extern cpuop_func op_edc0_31_ff; extern cpuop_func op_edd0_31_nf; extern cpuop_func op_edd0_31_ff; extern cpuop_func op_ede8_31_nf; extern cpuop_func op_ede8_31_ff; extern cpuop_func op_edf0_31_nf; extern cpuop_func op_edf0_31_ff; extern cpuop_func op_edf8_31_nf; extern cpuop_func op_edf8_31_ff; extern cpuop_func op_edf9_31_nf; extern cpuop_func op_edf9_31_ff; extern cpuop_func op_edfa_31_nf; extern cpuop_func op_edfa_31_ff; extern cpuop_func op_edfb_31_nf; extern cpuop_func op_edfb_31_ff; extern cpuop_func op_eec0_31_nf; extern cpuop_func op_eec0_31_ff; extern cpuop_func op_eed0_31_nf; extern cpuop_func op_eed0_31_ff; extern cpuop_func op_eee8_31_nf; extern cpuop_func op_eee8_31_ff; extern cpuop_func op_eef0_31_nf; extern cpuop_func op_eef0_31_ff; extern cpuop_func op_eef8_31_nf; extern cpuop_func op_eef8_31_ff; extern cpuop_func op_eef9_31_nf; extern cpuop_func op_eef9_31_ff; extern cpuop_func op_efc0_31_nf; extern cpuop_func op_efc0_31_ff; extern cpuop_func op_efd0_31_nf; extern cpuop_func op_efd0_31_ff; extern cpuop_func op_efe8_31_nf; extern cpuop_func op_efe8_31_ff; extern cpuop_func op_eff0_31_nf; extern cpuop_func op_eff0_31_ff; extern cpuop_func op_eff8_31_nf; extern cpuop_func op_eff8_31_ff; extern cpuop_func op_eff9_31_nf; extern cpuop_func op_eff9_31_ff; extern cpuop_func op_f000_31_nf; extern cpuop_func op_f000_31_ff; extern cpuop_func op_f008_31_nf; extern cpuop_func op_f008_31_ff; extern cpuop_func op_f010_31_nf; extern cpuop_func op_f010_31_ff; extern cpuop_func op_f018_31_nf; extern cpuop_func op_f018_31_ff; extern cpuop_func op_f020_31_nf; extern cpuop_func op_f020_31_ff; extern cpuop_func op_f028_31_nf; extern cpuop_func op_f028_31_ff; extern cpuop_func op_f030_31_nf; extern cpuop_func op_f030_31_ff; extern cpuop_func op_f038_31_nf; extern cpuop_func op_f038_31_ff; extern cpuop_func op_f039_31_nf; extern cpuop_func op_f039_31_ff; extern cpuop_func op_f200_31_nf; extern cpuop_func op_f200_31_ff; extern cpuop_func op_f208_31_nf; extern cpuop_func op_f208_31_ff; extern cpuop_func op_f210_31_nf; extern cpuop_func op_f210_31_ff; extern cpuop_func op_f218_31_nf; extern cpuop_func op_f218_31_ff; extern cpuop_func op_f220_31_nf; extern cpuop_func op_f220_31_ff; extern cpuop_func op_f228_31_nf; extern cpuop_func op_f228_31_ff; extern cpuop_func op_f230_31_nf; extern cpuop_func op_f230_31_ff; extern cpuop_func op_f238_31_nf; extern cpuop_func op_f238_31_ff; extern cpuop_func op_f239_31_nf; extern cpuop_func op_f239_31_ff; extern cpuop_func op_f23a_31_nf; extern cpuop_func op_f23a_31_ff; extern cpuop_func op_f23b_31_nf; extern cpuop_func op_f23b_31_ff; extern cpuop_func op_f23c_31_nf; extern cpuop_func op_f23c_31_ff; extern cpuop_func op_f240_31_nf; extern cpuop_func op_f240_31_ff; extern cpuop_func op_f248_31_nf; extern cpuop_func op_f248_31_ff; extern cpuop_func op_f250_31_nf; extern cpuop_func op_f250_31_ff; extern cpuop_func op_f258_31_nf; extern cpuop_func op_f258_31_ff; extern cpuop_func op_f260_31_nf; extern cpuop_func op_f260_31_ff; extern cpuop_func op_f268_31_nf; extern cpuop_func op_f268_31_ff; extern cpuop_func op_f270_31_nf; extern cpuop_func op_f270_31_ff; extern cpuop_func op_f278_31_nf; extern cpuop_func op_f278_31_ff; extern cpuop_func op_f279_31_nf; extern cpuop_func op_f279_31_ff; extern cpuop_func op_f27a_31_nf; extern cpuop_func op_f27a_31_ff; extern cpuop_func op_f27b_31_nf; extern cpuop_func op_f27b_31_ff; extern cpuop_func op_f27c_31_nf; extern cpuop_func op_f27c_31_ff; extern cpuop_func op_f280_31_nf; extern cpuop_func op_f280_31_ff; extern cpuop_func op_f2c0_31_nf; extern cpuop_func op_f2c0_31_ff; extern cpuop_func op_f310_31_nf; extern cpuop_func op_f310_31_ff; extern cpuop_func op_f320_31_nf; extern cpuop_func op_f320_31_ff; extern cpuop_func op_f328_31_nf; extern cpuop_func op_f328_31_ff; extern cpuop_func op_f330_31_nf; extern cpuop_func op_f330_31_ff; extern cpuop_func op_f338_31_nf; extern cpuop_func op_f338_31_ff; extern cpuop_func op_f339_31_nf; extern cpuop_func op_f339_31_ff; extern cpuop_func op_f350_31_nf; extern cpuop_func op_f350_31_ff; extern cpuop_func op_f358_31_nf; extern cpuop_func op_f358_31_ff; extern cpuop_func op_f368_31_nf; extern cpuop_func op_f368_31_ff; extern cpuop_func op_f370_31_nf; extern cpuop_func op_f370_31_ff; extern cpuop_func op_f378_31_nf; extern cpuop_func op_f378_31_ff; extern cpuop_func op_f379_31_nf; extern cpuop_func op_f379_31_ff; extern cpuop_func op_f37a_31_nf; extern cpuop_func op_f37a_31_ff; extern cpuop_func op_f37b_31_nf; extern cpuop_func op_f37b_31_ff; extern cpuop_func op_f408_31_nf; extern cpuop_func op_f408_31_ff; extern cpuop_func op_f410_31_nf; extern cpuop_func op_f410_31_ff; extern cpuop_func op_f418_31_nf; extern cpuop_func op_f418_31_ff; extern cpuop_func op_f419_31_nf; extern cpuop_func op_f419_31_ff; extern cpuop_func op_f41a_31_nf; extern cpuop_func op_f41a_31_ff; extern cpuop_func op_f41b_31_nf; extern cpuop_func op_f41b_31_ff; extern cpuop_func op_f41c_31_nf; extern cpuop_func op_f41c_31_ff; extern cpuop_func op_f41d_31_nf; extern cpuop_func op_f41d_31_ff; extern cpuop_func op_f41e_31_nf; extern cpuop_func op_f41e_31_ff; extern cpuop_func op_f41f_31_nf; extern cpuop_func op_f41f_31_ff; extern cpuop_func op_f428_31_nf; extern cpuop_func op_f428_31_ff; extern cpuop_func op_f430_31_nf; extern cpuop_func op_f430_31_ff; extern cpuop_func op_f438_31_nf; extern cpuop_func op_f438_31_ff; extern cpuop_func op_f439_31_nf; extern cpuop_func op_f439_31_ff; extern cpuop_func op_f43a_31_nf; extern cpuop_func op_f43a_31_ff; extern cpuop_func op_f43b_31_nf; extern cpuop_func op_f43b_31_ff; extern cpuop_func op_f43c_31_nf; extern cpuop_func op_f43c_31_ff; extern cpuop_func op_f43d_31_nf; extern cpuop_func op_f43d_31_ff; extern cpuop_func op_f43e_31_nf; extern cpuop_func op_f43e_31_ff; extern cpuop_func op_f43f_31_nf; extern cpuop_func op_f43f_31_ff; extern cpuop_func op_f500_31_nf; extern cpuop_func op_f500_31_ff; extern cpuop_func op_f508_31_nf; extern cpuop_func op_f508_31_ff; extern cpuop_func op_f510_31_nf; extern cpuop_func op_f510_31_ff; extern cpuop_func op_f518_31_nf; extern cpuop_func op_f518_31_ff; extern cpuop_func op_f548_31_nf; extern cpuop_func op_f548_31_ff; extern cpuop_func op_f568_31_nf; extern cpuop_func op_f568_31_ff; extern cpuop_func op_f600_31_nf; extern cpuop_func op_f600_31_ff; extern cpuop_func op_f608_31_nf; extern cpuop_func op_f608_31_ff; extern cpuop_func op_f610_31_nf; extern cpuop_func op_f610_31_ff; extern cpuop_func op_f618_31_nf; extern cpuop_func op_f618_31_ff; extern cpuop_func op_f620_31_nf; extern cpuop_func op_f620_31_ff; fs-uae-2.2.3+dfsg/gensrc/blittable.cpp0000644000175000017500000000466712162366654020020 0ustar glaubitzglaubitz#include "sysconfig.h" #include "sysdeps.h" #include "options.h" #include "custom.h" #include "uae/memory.h" #include "blitter.h" #include "blitfunc.h" blitter_func * const blitfunc_dofast[256] = { blitdofast_0, 0, 0, 0, 0, 0, 0, 0, 0, 0, blitdofast_a, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, blitdofast_2a, 0, 0, 0, 0, 0, blitdofast_30, 0, 0, 0, 0, 0, 0, 0, 0, 0, blitdofast_3a, 0, blitdofast_3c, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, blitdofast_4a, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, blitdofast_6a, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, blitdofast_8a, 0, blitdofast_8c, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, blitdofast_9a, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, blitdofast_a8, 0, blitdofast_aa, 0, 0, 0, 0, 0, 0, blitdofast_b1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, blitdofast_ca, 0, blitdofast_cc, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, blitdofast_d8, 0, 0, 0, 0, 0, 0, 0, 0, 0, blitdofast_e2, 0, 0, 0, 0, 0, 0, 0, blitdofast_ea, 0, 0, 0, 0, 0, blitdofast_f0, 0, 0, 0, 0, 0, 0, 0, 0, 0, blitdofast_fa, 0, blitdofast_fc, 0, 0, 0 }; blitter_func * const blitfunc_dofast_desc[256] = { blitdofast_desc_0, 0, 0, 0, 0, 0, 0, 0, 0, 0, blitdofast_desc_a, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, blitdofast_desc_2a, 0, 0, 0, 0, 0, blitdofast_desc_30, 0, 0, 0, 0, 0, 0, 0, 0, 0, blitdofast_desc_3a, 0, blitdofast_desc_3c, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, blitdofast_desc_4a, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, blitdofast_desc_6a, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, blitdofast_desc_8a, 0, blitdofast_desc_8c, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, blitdofast_desc_9a, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, blitdofast_desc_a8, 0, blitdofast_desc_aa, 0, 0, 0, 0, 0, 0, blitdofast_desc_b1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, blitdofast_desc_ca, 0, blitdofast_desc_cc, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, blitdofast_desc_d8, 0, 0, 0, 0, 0, 0, 0, 0, 0, blitdofast_desc_e2, 0, 0, 0, 0, 0, 0, 0, blitdofast_desc_ea, 0, 0, 0, 0, 0, blitdofast_desc_f0, 0, 0, 0, 0, 0, 0, 0, 0, 0, blitdofast_desc_fa, 0, blitdofast_desc_fc, 0, 0, 0 }; fs-uae-2.2.3+dfsg/gensrc/cpuemu_31.cpp0000644000175000017500000357124712162366654017665 0ustar glaubitzglaubitz#include "sysconfig.h" #include "sysdeps.h" #include "options.h" #include "uae/memory.h" #include "custom.h" #include "events.h" #include "newcpu.h" #include "cpu_prefetch.h" #include "cputbl.h" #include "cpummu.h" #define CPUFUNC(x) x##_ff #define SET_CFLG_ALWAYS(x) SET_CFLG(x) #define SET_NFLG_ALWAYS(x) SET_NFLG(x) #ifdef NOFLAGS #include "noflags.h" #endif #if !defined(PART_1) && !defined(PART_2) && !defined(PART_3) && !defined(PART_4) && !defined(PART_5) && !defined(PART_6) && !defined(PART_7) && !defined(PART_8) #define PART_1 1 #define PART_2 1 #define PART_3 1 #define PART_4 1 #define PART_5 1 #define PART_6 1 #define PART_7 1 #define PART_8 1 #endif #ifdef PART_1 /* OR.B #.B,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0000_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte_mmu (2); { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}} m68k_incpci (4); return 12 * CYCLE_UNIT / 2; } /* OR.B #.B,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0010_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte_mmu (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 20 * CYCLE_UNIT / 2; } /* OR.B #.B,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0018_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte_mmu (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 20 * CYCLE_UNIT / 2; } /* OR.B #.B,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0020_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte_mmu (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = get_byte_mmu (dsta); m68k_areg (regs, dstreg) = dsta; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 22 * CYCLE_UNIT / 2; } /* OR.B #.B,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0028_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (4); { uae_s8 dst = get_byte_mmu (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 24 * CYCLE_UNIT / 2; } /* OR.B #.B,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0030_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte_mmu (2); { uaecptr dsta; m68k_incpci (4); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); { uae_s8 dst = get_byte_mmu (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}}return 24 * CYCLE_UNIT / 2; } /* OR.B #.B,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_0038_31)(uae_u32 opcode) { {{ uae_s8 src = get_ibyte_mmu (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (4); { uae_s8 dst = get_byte_mmu (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 24 * CYCLE_UNIT / 2; } /* OR.B #.B,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_0039_31)(uae_u32 opcode) { {{ uae_s8 src = get_ibyte_mmu (2); { uaecptr dsta = get_ilong_mmu (4); { uae_s8 dst = get_byte_mmu (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (8); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 28 * CYCLE_UNIT / 2; } /* ORSR.B #.W */ uae_u32 REGPARAM2 CPUFUNC(op_003c_31)(uae_u32 opcode) { { MakeSR (); { uae_s16 src = get_iword_mmu (2); src &= 0xFF; regs.sr |= src; MakeFromSR (); }} m68k_incpci (4); return 8 * CYCLE_UNIT / 2; } /* OR.W #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0040_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}} m68k_incpci (4); return 8 * CYCLE_UNIT / 2; } /* OR.W #.W,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0050_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = get_word_mmu (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 16 * CYCLE_UNIT / 2; } /* OR.W #.W,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0058_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = get_word_mmu (dsta); m68k_areg (regs, dstreg) += 2; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 16 * CYCLE_UNIT / 2; } /* OR.W #.W,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0060_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = get_word_mmu (dsta); m68k_areg (regs, dstreg) = dsta; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 18 * CYCLE_UNIT / 2; } /* OR.W #.W,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0068_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (4); { uae_s16 dst = get_word_mmu (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 20 * CYCLE_UNIT / 2; } /* OR.W #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0070_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta; m68k_incpci (4); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); { uae_s16 dst = get_word_mmu (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}}return 20 * CYCLE_UNIT / 2; } /* OR.W #.W,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_0078_31)(uae_u32 opcode) { {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (4); { uae_s16 dst = get_word_mmu (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 20 * CYCLE_UNIT / 2; } /* OR.W #.W,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_0079_31)(uae_u32 opcode) { {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = get_ilong_mmu (4); { uae_s16 dst = get_word_mmu (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (8); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 24 * CYCLE_UNIT / 2; } /* ORSR.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_007c_31)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel10885; } { MakeSR (); { uae_s16 src = get_iword_mmu (2); regs.sr |= src; MakeFromSR (); }}} m68k_incpci (4); endlabel10885: ; return 8 * CYCLE_UNIT / 2; } /* OR.L #.L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0080_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong_mmu (2); { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}} m68k_incpci (6); return 12 * CYCLE_UNIT / 2; } /* OR.L #.L,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0090_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = get_long_mmu (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 28 * CYCLE_UNIT / 2; } /* OR.L #.L,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0098_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = get_long_mmu (dsta); m68k_areg (regs, dstreg) += 4; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 28 * CYCLE_UNIT / 2; } /* OR.L #.L,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_00a0_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong_mmu (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = get_long_mmu (dsta); m68k_areg (regs, dstreg) = dsta; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 30 * CYCLE_UNIT / 2; } /* OR.L #.L,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_00a8_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (6); { uae_s32 dst = get_long_mmu (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (8); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 32 * CYCLE_UNIT / 2; } /* OR.L #.L,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_00b0_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong_mmu (2); { uaecptr dsta; m68k_incpci (6); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); { uae_s32 dst = get_long_mmu (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}}return 32 * CYCLE_UNIT / 2; } /* OR.L #.L,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_00b8_31)(uae_u32 opcode) { {{ uae_s32 src = get_ilong_mmu (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (6); { uae_s32 dst = get_long_mmu (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (8); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 32 * CYCLE_UNIT / 2; } /* OR.L #.L,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_00b9_31)(uae_u32 opcode) { {{ uae_s32 src = get_ilong_mmu (2); { uaecptr dsta = get_ilong_mmu (6); { uae_s32 dst = get_long_mmu (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (10); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 36 * CYCLE_UNIT / 2; } /* CHK2.B #.W,(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_00d0_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = (uae_s32)(uae_s8)get_byte_mmu (dsta); upper = (uae_s32)(uae_s8)get_byte_mmu (dsta + 1); if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s8)reg; SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel10894; } } }}} m68k_incpci (4); endlabel10894: ; return 8 * CYCLE_UNIT / 2; } #endif /* CHK2.B #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_00e8_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (4); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = (uae_s32)(uae_s8)get_byte_mmu (dsta); upper = (uae_s32)(uae_s8)get_byte_mmu (dsta + 1); if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s8)reg; SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel10895; } } }}} m68k_incpci (6); endlabel10895: ; return 12 * CYCLE_UNIT / 2; } #endif /* CHK2.B #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_00f0_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta; m68k_incpci (4); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = (uae_s32)(uae_s8)get_byte_mmu (dsta); upper = (uae_s32)(uae_s8)get_byte_mmu (dsta + 1); if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s8)reg; SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel10896; } } }}}}endlabel10896: ; return 12 * CYCLE_UNIT / 2; } #endif /* CHK2.B #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_00f8_31)(uae_u32 opcode) { {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (4); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = (uae_s32)(uae_s8)get_byte_mmu (dsta); upper = (uae_s32)(uae_s8)get_byte_mmu (dsta + 1); if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s8)reg; SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel10897; } } }}} m68k_incpci (6); endlabel10897: ; return 12 * CYCLE_UNIT / 2; } #endif /* CHK2.B #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_00f9_31)(uae_u32 opcode) { {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta = get_ilong_mmu (4); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = (uae_s32)(uae_s8)get_byte_mmu (dsta); upper = (uae_s32)(uae_s8)get_byte_mmu (dsta + 1); if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s8)reg; SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel10898; } } }}} m68k_incpci (8); endlabel10898: ; return 16 * CYCLE_UNIT / 2; } #endif /* CHK2.B #.W,(d16,PC) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_00fa_31)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_iword_mmu (4); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = (uae_s32)(uae_s8)get_byte_mmu (dsta); upper = (uae_s32)(uae_s8)get_byte_mmu (dsta + 1); if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s8)reg; SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel10899; } } }}} m68k_incpci (6); endlabel10899: ; return 12 * CYCLE_UNIT / 2; } #endif /* CHK2.B #.W,(d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_00fb_31)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 extra = get_iword_mmu (2); { uaecptr tmppc; uaecptr dsta; m68k_incpci (4); { tmppc = m68k_getpc (); dsta = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = (uae_s32)(uae_s8)get_byte_mmu (dsta); upper = (uae_s32)(uae_s8)get_byte_mmu (dsta + 1); if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s8)reg; SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel10900; } } }}}}endlabel10900: ; return 12 * CYCLE_UNIT / 2; } #endif /* BTST.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0100_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= 31; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* MVPMR.W (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0108_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; { uaecptr memp = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_u16 val = (get_byte_mmu (memp) << 8) + get_byte_mmu (memp + 2); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }} m68k_incpci (4); return 8 * CYCLE_UNIT / 2; } /* BTST.B Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0110_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte_mmu (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpci (2); return 8 * CYCLE_UNIT / 2; } /* BTST.B Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0118_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte_mmu (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpci (2); return 8 * CYCLE_UNIT / 2; } /* BTST.B Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0120_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = get_byte_mmu (dsta); m68k_areg (regs, dstreg) = dsta; src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpci (2); return 10 * CYCLE_UNIT / 2; } /* BTST.B Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0128_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 dst = get_byte_mmu (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpci (4); return 12 * CYCLE_UNIT / 2; } /* BTST.B Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0130_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpci (2); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); { uae_s8 dst = get_byte_mmu (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}}}return 12 * CYCLE_UNIT / 2; } /* BTST.B Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_0138_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 dst = get_byte_mmu (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpci (4); return 12 * CYCLE_UNIT / 2; } /* BTST.B Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_0139_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_ilong_mmu (2); { uae_s8 dst = get_byte_mmu (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpci (6); return 16 * CYCLE_UNIT / 2; } /* BTST.B Dn,(d16,PC) */ uae_u32 REGPARAM2 CPUFUNC(op_013a_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = 2; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_getpc () + 2; dsta += (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 dst = get_byte_mmu (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpci (4); return 12 * CYCLE_UNIT / 2; } /* BTST.B Dn,(d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_013b_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = 3; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr tmppc; uaecptr dsta; m68k_incpci (2); { tmppc = m68k_getpc (); dsta = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_s8 dst = get_byte_mmu (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}}}return 12 * CYCLE_UNIT / 2; } /* BTST.B Dn,#.B */ uae_u32 REGPARAM2 CPUFUNC(op_013c_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = get_ibyte_mmu (2); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}} m68k_incpci (4); return 12 * CYCLE_UNIT / 2; } /* BCHG.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0140_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= 31; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); m68k_dreg (regs, dstreg) = (dst); }}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* MVPMR.L (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0148_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; { uaecptr memp = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_u32 val = (get_byte_mmu (memp) << 24) + (get_byte_mmu (memp + 2) << 16) + (get_byte_mmu (memp + 4) << 8) + get_byte_mmu (memp + 6); m68k_dreg (regs, dstreg) = (val); }} m68k_incpci (4); return 8 * CYCLE_UNIT / 2; } /* BCHG.B Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0150_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte_mmu (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, dst); }}}}return 12 * CYCLE_UNIT / 2; } /* BCHG.B Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0158_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte_mmu (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, dst); }}}}return 12 * CYCLE_UNIT / 2; } /* BCHG.B Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0160_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = get_byte_mmu (dsta); m68k_areg (regs, dstreg) = dsta; src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, dst); }}}}return 14 * CYCLE_UNIT / 2; } /* BCHG.B Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0168_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 dst = get_byte_mmu (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, dst); }}}}return 16 * CYCLE_UNIT / 2; } /* BCHG.B Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0170_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpci (2); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); { uae_s8 dst = get_byte_mmu (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, dst); }}}}}return 16 * CYCLE_UNIT / 2; } /* BCHG.B Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_0178_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 dst = get_byte_mmu (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, dst); }}}}return 16 * CYCLE_UNIT / 2; } /* BCHG.B Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_0179_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_ilong_mmu (2); { uae_s8 dst = get_byte_mmu (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, dst); }}}}return 20 * CYCLE_UNIT / 2; } /* BCHG.B Dn,(d16,PC) */ uae_u32 REGPARAM2 CPUFUNC(op_017a_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = 2; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_getpc () + 2; dsta += (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 dst = get_byte_mmu (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, dst); }}}}return 16 * CYCLE_UNIT / 2; } /* BCHG.B Dn,(d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_017b_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = 3; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr tmppc; uaecptr dsta; m68k_incpci (2); { tmppc = m68k_getpc (); dsta = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_s8 dst = get_byte_mmu (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, dst); }}}}}return 16 * CYCLE_UNIT / 2; } /* BCLR.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0180_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= 31; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); m68k_dreg (regs, dstreg) = (dst); }}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* MVPRM.W Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0188_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); uaecptr memp = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (2); put_byte_mmu (memp, src >> 8); put_byte_mmu (memp + 2, src); }} m68k_incpci (4); return 8 * CYCLE_UNIT / 2; } /* BCLR.B Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0190_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte_mmu (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, dst); }}}}return 12 * CYCLE_UNIT / 2; } /* BCLR.B Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0198_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte_mmu (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, dst); }}}}return 12 * CYCLE_UNIT / 2; } /* BCLR.B Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_01a0_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = get_byte_mmu (dsta); m68k_areg (regs, dstreg) = dsta; src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, dst); }}}}return 14 * CYCLE_UNIT / 2; } /* BCLR.B Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_01a8_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 dst = get_byte_mmu (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, dst); }}}}return 16 * CYCLE_UNIT / 2; } /* BCLR.B Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_01b0_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpci (2); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); { uae_s8 dst = get_byte_mmu (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, dst); }}}}}return 16 * CYCLE_UNIT / 2; } /* BCLR.B Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_01b8_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 dst = get_byte_mmu (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, dst); }}}}return 16 * CYCLE_UNIT / 2; } /* BCLR.B Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_01b9_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_ilong_mmu (2); { uae_s8 dst = get_byte_mmu (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, dst); }}}}return 20 * CYCLE_UNIT / 2; } /* BCLR.B Dn,(d16,PC) */ uae_u32 REGPARAM2 CPUFUNC(op_01ba_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = 2; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_getpc () + 2; dsta += (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 dst = get_byte_mmu (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, dst); }}}}return 16 * CYCLE_UNIT / 2; } /* BCLR.B Dn,(d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_01bb_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = 3; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr tmppc; uaecptr dsta; m68k_incpci (2); { tmppc = m68k_getpc (); dsta = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_s8 dst = get_byte_mmu (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, dst); }}}}}return 16 * CYCLE_UNIT / 2; } /* BSET.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_01c0_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= 31; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); m68k_dreg (regs, dstreg) = (dst); }}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* MVPRM.L Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_01c8_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); uaecptr memp = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (2); put_byte_mmu (memp, src >> 24); put_byte_mmu (memp + 2, src >> 16); put_byte_mmu (memp + 4, src >> 8); put_byte_mmu (memp + 6, src); }} m68k_incpci (4); return 8 * CYCLE_UNIT / 2; } /* BSET.B Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_01d0_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte_mmu (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, dst); }}}}return 12 * CYCLE_UNIT / 2; } /* BSET.B Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_01d8_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte_mmu (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, dst); }}}}return 12 * CYCLE_UNIT / 2; } /* BSET.B Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_01e0_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = get_byte_mmu (dsta); m68k_areg (regs, dstreg) = dsta; src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, dst); }}}}return 14 * CYCLE_UNIT / 2; } /* BSET.B Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_01e8_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 dst = get_byte_mmu (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, dst); }}}}return 16 * CYCLE_UNIT / 2; } /* BSET.B Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_01f0_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpci (2); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); { uae_s8 dst = get_byte_mmu (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, dst); }}}}}return 16 * CYCLE_UNIT / 2; } /* BSET.B Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_01f8_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 dst = get_byte_mmu (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, dst); }}}}return 16 * CYCLE_UNIT / 2; } /* BSET.B Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_01f9_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_ilong_mmu (2); { uae_s8 dst = get_byte_mmu (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, dst); }}}}return 20 * CYCLE_UNIT / 2; } /* BSET.B Dn,(d16,PC) */ uae_u32 REGPARAM2 CPUFUNC(op_01fa_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = 2; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_getpc () + 2; dsta += (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 dst = get_byte_mmu (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, dst); }}}}return 16 * CYCLE_UNIT / 2; } /* BSET.B Dn,(d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_01fb_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = 3; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr tmppc; uaecptr dsta; m68k_incpci (2); { tmppc = m68k_getpc (); dsta = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_s8 dst = get_byte_mmu (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, dst); }}}}}return 16 * CYCLE_UNIT / 2; } /* AND.B #.B,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0200_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte_mmu (2); { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}} m68k_incpci (4); return 12 * CYCLE_UNIT / 2; } /* AND.B #.B,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0210_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte_mmu (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 20 * CYCLE_UNIT / 2; } /* AND.B #.B,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0218_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte_mmu (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 20 * CYCLE_UNIT / 2; } /* AND.B #.B,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0220_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte_mmu (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = get_byte_mmu (dsta); m68k_areg (regs, dstreg) = dsta; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 22 * CYCLE_UNIT / 2; } /* AND.B #.B,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0228_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (4); { uae_s8 dst = get_byte_mmu (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 24 * CYCLE_UNIT / 2; } /* AND.B #.B,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0230_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte_mmu (2); { uaecptr dsta; m68k_incpci (4); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); { uae_s8 dst = get_byte_mmu (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}}return 24 * CYCLE_UNIT / 2; } /* AND.B #.B,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_0238_31)(uae_u32 opcode) { {{ uae_s8 src = get_ibyte_mmu (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (4); { uae_s8 dst = get_byte_mmu (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 24 * CYCLE_UNIT / 2; } /* AND.B #.B,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_0239_31)(uae_u32 opcode) { {{ uae_s8 src = get_ibyte_mmu (2); { uaecptr dsta = get_ilong_mmu (4); { uae_s8 dst = get_byte_mmu (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (8); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 28 * CYCLE_UNIT / 2; } /* ANDSR.B #.W */ uae_u32 REGPARAM2 CPUFUNC(op_023c_31)(uae_u32 opcode) { { MakeSR (); { uae_s16 src = get_iword_mmu (2); src |= 0xFF00; regs.sr &= src; MakeFromSR (); }} m68k_incpci (4); return 8 * CYCLE_UNIT / 2; } /* AND.W #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0240_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}} m68k_incpci (4); return 8 * CYCLE_UNIT / 2; } /* AND.W #.W,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0250_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = get_word_mmu (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 16 * CYCLE_UNIT / 2; } /* AND.W #.W,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0258_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = get_word_mmu (dsta); m68k_areg (regs, dstreg) += 2; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 16 * CYCLE_UNIT / 2; } /* AND.W #.W,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0260_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = get_word_mmu (dsta); m68k_areg (regs, dstreg) = dsta; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 18 * CYCLE_UNIT / 2; } /* AND.W #.W,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0268_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (4); { uae_s16 dst = get_word_mmu (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 20 * CYCLE_UNIT / 2; } /* AND.W #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0270_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta; m68k_incpci (4); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); { uae_s16 dst = get_word_mmu (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}}return 20 * CYCLE_UNIT / 2; } /* AND.W #.W,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_0278_31)(uae_u32 opcode) { {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (4); { uae_s16 dst = get_word_mmu (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 20 * CYCLE_UNIT / 2; } /* AND.W #.W,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_0279_31)(uae_u32 opcode) { {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = get_ilong_mmu (4); { uae_s16 dst = get_word_mmu (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (8); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 24 * CYCLE_UNIT / 2; } /* ANDSR.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_027c_31)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel10963; } { MakeSR (); { uae_s16 src = get_iword_mmu (2); regs.sr &= src; MakeFromSR (); }}} m68k_incpci (4); endlabel10963: ; return 8 * CYCLE_UNIT / 2; } /* AND.L #.L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0280_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong_mmu (2); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}} m68k_incpci (6); return 12 * CYCLE_UNIT / 2; } /* AND.L #.L,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0290_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = get_long_mmu (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 28 * CYCLE_UNIT / 2; } /* AND.L #.L,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0298_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = get_long_mmu (dsta); m68k_areg (regs, dstreg) += 4; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 28 * CYCLE_UNIT / 2; } /* AND.L #.L,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_02a0_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong_mmu (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = get_long_mmu (dsta); m68k_areg (regs, dstreg) = dsta; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 30 * CYCLE_UNIT / 2; } /* AND.L #.L,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_02a8_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (6); { uae_s32 dst = get_long_mmu (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (8); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 32 * CYCLE_UNIT / 2; } /* AND.L #.L,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_02b0_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong_mmu (2); { uaecptr dsta; m68k_incpci (6); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); { uae_s32 dst = get_long_mmu (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}}return 32 * CYCLE_UNIT / 2; } /* AND.L #.L,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_02b8_31)(uae_u32 opcode) { {{ uae_s32 src = get_ilong_mmu (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (6); { uae_s32 dst = get_long_mmu (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (8); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 32 * CYCLE_UNIT / 2; } /* AND.L #.L,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_02b9_31)(uae_u32 opcode) { {{ uae_s32 src = get_ilong_mmu (2); { uaecptr dsta = get_ilong_mmu (6); { uae_s32 dst = get_long_mmu (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (10); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 36 * CYCLE_UNIT / 2; } /* CHK2.W #.W,(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_02d0_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = (uae_s32)(uae_s16)get_word_mmu (dsta); upper = (uae_s32)(uae_s16)get_word_mmu (dsta + 2); if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s16)reg; SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel10972; } } }}} m68k_incpci (4); endlabel10972: ; return 8 * CYCLE_UNIT / 2; } #endif /* CHK2.W #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_02e8_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (4); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = (uae_s32)(uae_s16)get_word_mmu (dsta); upper = (uae_s32)(uae_s16)get_word_mmu (dsta + 2); if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s16)reg; SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel10973; } } }}} m68k_incpci (6); endlabel10973: ; return 12 * CYCLE_UNIT / 2; } #endif /* CHK2.W #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_02f0_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta; m68k_incpci (4); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = (uae_s32)(uae_s16)get_word_mmu (dsta); upper = (uae_s32)(uae_s16)get_word_mmu (dsta + 2); if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s16)reg; SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel10974; } } }}}}endlabel10974: ; return 12 * CYCLE_UNIT / 2; } #endif /* CHK2.W #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_02f8_31)(uae_u32 opcode) { {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (4); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = (uae_s32)(uae_s16)get_word_mmu (dsta); upper = (uae_s32)(uae_s16)get_word_mmu (dsta + 2); if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s16)reg; SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel10975; } } }}} m68k_incpci (6); endlabel10975: ; return 12 * CYCLE_UNIT / 2; } #endif /* CHK2.W #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_02f9_31)(uae_u32 opcode) { {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta = get_ilong_mmu (4); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = (uae_s32)(uae_s16)get_word_mmu (dsta); upper = (uae_s32)(uae_s16)get_word_mmu (dsta + 2); if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s16)reg; SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel10976; } } }}} m68k_incpci (8); endlabel10976: ; return 16 * CYCLE_UNIT / 2; } #endif /* CHK2.W #.W,(d16,PC) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_02fa_31)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_iword_mmu (4); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = (uae_s32)(uae_s16)get_word_mmu (dsta); upper = (uae_s32)(uae_s16)get_word_mmu (dsta + 2); if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s16)reg; SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel10977; } } }}} m68k_incpci (6); endlabel10977: ; return 12 * CYCLE_UNIT / 2; } #endif /* CHK2.W #.W,(d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_02fb_31)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 extra = get_iword_mmu (2); { uaecptr tmppc; uaecptr dsta; m68k_incpci (4); { tmppc = m68k_getpc (); dsta = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = (uae_s32)(uae_s16)get_word_mmu (dsta); upper = (uae_s32)(uae_s16)get_word_mmu (dsta + 2); if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s16)reg; SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel10978; } } }}}}endlabel10978: ; return 12 * CYCLE_UNIT / 2; } #endif /* SUB.B #.B,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0400_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte_mmu (2); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}} m68k_incpci (4); return 12 * CYCLE_UNIT / 2; } /* SUB.B #.B,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0410_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte_mmu (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, newv); }}}}}}}return 20 * CYCLE_UNIT / 2; } /* SUB.B #.B,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0418_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte_mmu (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, newv); }}}}}}}return 20 * CYCLE_UNIT / 2; } /* SUB.B #.B,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0420_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte_mmu (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = get_byte_mmu (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, newv); }}}}}}}return 22 * CYCLE_UNIT / 2; } /* SUB.B #.B,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0428_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (4); { uae_s8 dst = get_byte_mmu (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, newv); }}}}}}}return 24 * CYCLE_UNIT / 2; } /* SUB.B #.B,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0430_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte_mmu (2); { uaecptr dsta; m68k_incpci (4); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); { uae_s8 dst = get_byte_mmu (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, newv); }}}}}}}}return 24 * CYCLE_UNIT / 2; } /* SUB.B #.B,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_0438_31)(uae_u32 opcode) { {{ uae_s8 src = get_ibyte_mmu (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (4); { uae_s8 dst = get_byte_mmu (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, newv); }}}}}}}return 24 * CYCLE_UNIT / 2; } /* SUB.B #.B,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_0439_31)(uae_u32 opcode) { {{ uae_s8 src = get_ibyte_mmu (2); { uaecptr dsta = get_ilong_mmu (4); { uae_s8 dst = get_byte_mmu (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (8); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, newv); }}}}}}}return 28 * CYCLE_UNIT / 2; } /* SUB.W #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0440_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}} m68k_incpci (4); return 8 * CYCLE_UNIT / 2; } /* SUB.W #.W,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0450_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = get_word_mmu (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, newv); }}}}}}}return 16 * CYCLE_UNIT / 2; } /* SUB.W #.W,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0458_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = get_word_mmu (dsta); m68k_areg (regs, dstreg) += 2; {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, newv); }}}}}}}return 16 * CYCLE_UNIT / 2; } /* SUB.W #.W,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0460_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = get_word_mmu (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, newv); }}}}}}}return 18 * CYCLE_UNIT / 2; } /* SUB.W #.W,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0468_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (4); { uae_s16 dst = get_word_mmu (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, newv); }}}}}}}return 20 * CYCLE_UNIT / 2; } /* SUB.W #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0470_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta; m68k_incpci (4); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); { uae_s16 dst = get_word_mmu (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, newv); }}}}}}}}return 20 * CYCLE_UNIT / 2; } /* SUB.W #.W,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_0478_31)(uae_u32 opcode) { {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (4); { uae_s16 dst = get_word_mmu (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, newv); }}}}}}}return 20 * CYCLE_UNIT / 2; } /* SUB.W #.W,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_0479_31)(uae_u32 opcode) { {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = get_ilong_mmu (4); { uae_s16 dst = get_word_mmu (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (8); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, newv); }}}}}}}return 24 * CYCLE_UNIT / 2; } /* SUB.L #.L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0480_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong_mmu (2); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} m68k_incpci (6); return 12 * CYCLE_UNIT / 2; } /* SUB.L #.L,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0490_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = get_long_mmu (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, newv); }}}}}}}return 28 * CYCLE_UNIT / 2; } /* SUB.L #.L,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0498_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = get_long_mmu (dsta); m68k_areg (regs, dstreg) += 4; {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, newv); }}}}}}}return 28 * CYCLE_UNIT / 2; } /* SUB.L #.L,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_04a0_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong_mmu (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = get_long_mmu (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, newv); }}}}}}}return 30 * CYCLE_UNIT / 2; } /* SUB.L #.L,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_04a8_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (6); { uae_s32 dst = get_long_mmu (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (8); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, newv); }}}}}}}return 32 * CYCLE_UNIT / 2; } /* SUB.L #.L,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_04b0_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong_mmu (2); { uaecptr dsta; m68k_incpci (6); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); { uae_s32 dst = get_long_mmu (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, newv); }}}}}}}}return 32 * CYCLE_UNIT / 2; } /* SUB.L #.L,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_04b8_31)(uae_u32 opcode) { {{ uae_s32 src = get_ilong_mmu (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (6); { uae_s32 dst = get_long_mmu (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (8); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, newv); }}}}}}}return 32 * CYCLE_UNIT / 2; } /* SUB.L #.L,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_04b9_31)(uae_u32 opcode) { {{ uae_s32 src = get_ilong_mmu (2); { uaecptr dsta = get_ilong_mmu (6); { uae_s32 dst = get_long_mmu (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (10); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, newv); }}}}}}}return 36 * CYCLE_UNIT / 2; } /* CHK2.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_04d0_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = get_long_mmu (dsta); upper = get_long_mmu (dsta + 4); SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel11003; } } }}} m68k_incpci (4); endlabel11003: ; return 8 * CYCLE_UNIT / 2; } #endif /* CHK2.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_04e8_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (4); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = get_long_mmu (dsta); upper = get_long_mmu (dsta + 4); SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel11004; } } }}} m68k_incpci (6); endlabel11004: ; return 12 * CYCLE_UNIT / 2; } #endif /* CHK2.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_04f0_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta; m68k_incpci (4); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = get_long_mmu (dsta); upper = get_long_mmu (dsta + 4); SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel11005; } } }}}}endlabel11005: ; return 12 * CYCLE_UNIT / 2; } #endif /* CHK2.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_04f8_31)(uae_u32 opcode) { {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (4); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = get_long_mmu (dsta); upper = get_long_mmu (dsta + 4); SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel11006; } } }}} m68k_incpci (6); endlabel11006: ; return 12 * CYCLE_UNIT / 2; } #endif /* CHK2.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_04f9_31)(uae_u32 opcode) { {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta = get_ilong_mmu (4); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = get_long_mmu (dsta); upper = get_long_mmu (dsta + 4); SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel11007; } } }}} m68k_incpci (8); endlabel11007: ; return 16 * CYCLE_UNIT / 2; } #endif /* CHK2.L #.W,(d16,PC) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_04fa_31)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_iword_mmu (4); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = get_long_mmu (dsta); upper = get_long_mmu (dsta + 4); SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel11008; } } }}} m68k_incpci (6); endlabel11008: ; return 12 * CYCLE_UNIT / 2; } #endif /* CHK2.L #.W,(d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_04fb_31)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 extra = get_iword_mmu (2); { uaecptr tmppc; uaecptr dsta; m68k_incpci (4); { tmppc = m68k_getpc (); dsta = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = get_long_mmu (dsta); upper = get_long_mmu (dsta + 4); SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel11009; } } }}}}endlabel11009: ; return 12 * CYCLE_UNIT / 2; } #endif /* ADD.B #.B,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0600_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte_mmu (2); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}} m68k_incpci (4); return 12 * CYCLE_UNIT / 2; } /* ADD.B #.B,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0610_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte_mmu (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, newv); }}}}}}}return 20 * CYCLE_UNIT / 2; } /* ADD.B #.B,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0618_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte_mmu (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, newv); }}}}}}}return 20 * CYCLE_UNIT / 2; } /* ADD.B #.B,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0620_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte_mmu (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = get_byte_mmu (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, newv); }}}}}}}return 22 * CYCLE_UNIT / 2; } /* ADD.B #.B,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0628_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (4); { uae_s8 dst = get_byte_mmu (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, newv); }}}}}}}return 24 * CYCLE_UNIT / 2; } /* ADD.B #.B,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0630_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte_mmu (2); { uaecptr dsta; m68k_incpci (4); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); { uae_s8 dst = get_byte_mmu (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, newv); }}}}}}}}return 24 * CYCLE_UNIT / 2; } /* ADD.B #.B,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_0638_31)(uae_u32 opcode) { {{ uae_s8 src = get_ibyte_mmu (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (4); { uae_s8 dst = get_byte_mmu (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, newv); }}}}}}}return 24 * CYCLE_UNIT / 2; } /* ADD.B #.B,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_0639_31)(uae_u32 opcode) { {{ uae_s8 src = get_ibyte_mmu (2); { uaecptr dsta = get_ilong_mmu (4); { uae_s8 dst = get_byte_mmu (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (8); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, newv); }}}}}}}return 28 * CYCLE_UNIT / 2; } /* ADD.W #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0640_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}} m68k_incpci (4); return 8 * CYCLE_UNIT / 2; } /* ADD.W #.W,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0650_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = get_word_mmu (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, newv); }}}}}}}return 16 * CYCLE_UNIT / 2; } /* ADD.W #.W,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0658_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = get_word_mmu (dsta); m68k_areg (regs, dstreg) += 2; {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, newv); }}}}}}}return 16 * CYCLE_UNIT / 2; } /* ADD.W #.W,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0660_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = get_word_mmu (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, newv); }}}}}}}return 18 * CYCLE_UNIT / 2; } /* ADD.W #.W,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0668_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (4); { uae_s16 dst = get_word_mmu (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, newv); }}}}}}}return 20 * CYCLE_UNIT / 2; } /* ADD.W #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0670_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta; m68k_incpci (4); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); { uae_s16 dst = get_word_mmu (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, newv); }}}}}}}}return 20 * CYCLE_UNIT / 2; } /* ADD.W #.W,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_0678_31)(uae_u32 opcode) { {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (4); { uae_s16 dst = get_word_mmu (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, newv); }}}}}}}return 20 * CYCLE_UNIT / 2; } /* ADD.W #.W,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_0679_31)(uae_u32 opcode) { {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = get_ilong_mmu (4); { uae_s16 dst = get_word_mmu (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (8); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, newv); }}}}}}}return 24 * CYCLE_UNIT / 2; } /* ADD.L #.L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0680_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong_mmu (2); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} m68k_incpci (6); return 12 * CYCLE_UNIT / 2; } /* ADD.L #.L,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0690_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = get_long_mmu (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, newv); }}}}}}}return 28 * CYCLE_UNIT / 2; } /* ADD.L #.L,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0698_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = get_long_mmu (dsta); m68k_areg (regs, dstreg) += 4; {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, newv); }}}}}}}return 28 * CYCLE_UNIT / 2; } /* ADD.L #.L,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_06a0_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong_mmu (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = get_long_mmu (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, newv); }}}}}}}return 30 * CYCLE_UNIT / 2; } /* ADD.L #.L,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_06a8_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (6); { uae_s32 dst = get_long_mmu (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (8); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, newv); }}}}}}}return 32 * CYCLE_UNIT / 2; } /* ADD.L #.L,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_06b0_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong_mmu (2); { uaecptr dsta; m68k_incpci (6); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); { uae_s32 dst = get_long_mmu (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, newv); }}}}}}}}return 32 * CYCLE_UNIT / 2; } /* ADD.L #.L,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_06b8_31)(uae_u32 opcode) { {{ uae_s32 src = get_ilong_mmu (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (6); { uae_s32 dst = get_long_mmu (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (8); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, newv); }}}}}}}return 32 * CYCLE_UNIT / 2; } /* ADD.L #.L,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_06b9_31)(uae_u32 opcode) { {{ uae_s32 src = get_ilong_mmu (2); { uaecptr dsta = get_ilong_mmu (6); { uae_s32 dst = get_long_mmu (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (10); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, newv); }}}}}}}return 36 * CYCLE_UNIT / 2; } /* RTM.L Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_06c0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); { m68k_incpci (2); op_illg (opcode); }return 4 * CYCLE_UNIT / 2; } #endif /* RTM.L An */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_06c8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); { m68k_incpci (2); op_illg (opcode); }return 4 * CYCLE_UNIT / 2; } #endif /* CALLM.L (An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_06d0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); { m68k_incpci (2); op_illg (opcode); }return 4 * CYCLE_UNIT / 2; } #endif /* CALLM.L (d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_06e8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); { m68k_incpci (2); op_illg (opcode); }return 4 * CYCLE_UNIT / 2; } #endif /* CALLM.L (d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_06f0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); { m68k_incpci (2); op_illg (opcode); }return 4 * CYCLE_UNIT / 2; } #endif /* CALLM.L (xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_06f8_31)(uae_u32 opcode) { { m68k_incpci (2); op_illg (opcode); }return 4 * CYCLE_UNIT / 2; } #endif /* CALLM.L (xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_06f9_31)(uae_u32 opcode) { { m68k_incpci (2); op_illg (opcode); }return 4 * CYCLE_UNIT / 2; } #endif /* CALLM.L (d16,PC) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_06fa_31)(uae_u32 opcode) { { m68k_incpci (2); op_illg (opcode); }return 4 * CYCLE_UNIT / 2; } #endif /* CALLM.L (d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_06fb_31)(uae_u32 opcode) { { m68k_incpci (2); op_illg (opcode); }return 4 * CYCLE_UNIT / 2; } #endif /* BTST.L #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0800_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= 31; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}} m68k_incpci (4); return 8 * CYCLE_UNIT / 2; } /* BTST.B #.W,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0810_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte_mmu (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpci (4); return 12 * CYCLE_UNIT / 2; } /* BTST.B #.W,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0818_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte_mmu (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpci (4); return 12 * CYCLE_UNIT / 2; } /* BTST.B #.W,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0820_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = get_byte_mmu (dsta); m68k_areg (regs, dstreg) = dsta; src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpci (4); return 14 * CYCLE_UNIT / 2; } /* BTST.B #.W,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0828_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (4); { uae_s8 dst = get_byte_mmu (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpci (6); return 16 * CYCLE_UNIT / 2; } /* BTST.B #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0830_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta; m68k_incpci (4); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); { uae_s8 dst = get_byte_mmu (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}}}return 16 * CYCLE_UNIT / 2; } /* BTST.B #.W,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_0838_31)(uae_u32 opcode) { {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (4); { uae_s8 dst = get_byte_mmu (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpci (6); return 16 * CYCLE_UNIT / 2; } /* BTST.B #.W,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_0839_31)(uae_u32 opcode) { {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = get_ilong_mmu (4); { uae_s8 dst = get_byte_mmu (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpci (8); return 20 * CYCLE_UNIT / 2; } /* BTST.B #.W,(d16,PC) */ uae_u32 REGPARAM2 CPUFUNC(op_083a_31)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_iword_mmu (4); { uae_s8 dst = get_byte_mmu (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpci (6); return 16 * CYCLE_UNIT / 2; } /* BTST.B #.W,(d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_083b_31)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 src = get_iword_mmu (2); { uaecptr tmppc; uaecptr dsta; m68k_incpci (4); { tmppc = m68k_getpc (); dsta = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_s8 dst = get_byte_mmu (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}}}return 16 * CYCLE_UNIT / 2; } /* BTST.B #.W,#.B */ uae_u32 REGPARAM2 CPUFUNC(op_083c_31)(uae_u32 opcode) { {{ uae_s16 src = get_iword_mmu (2); { uae_s8 dst = get_ibyte_mmu (4); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}} m68k_incpci (6); return 16 * CYCLE_UNIT / 2; } /* BCHG.L #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0840_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= 31; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); m68k_dreg (regs, dstreg) = (dst); }}} m68k_incpci (4); return 8 * CYCLE_UNIT / 2; } /* BCHG.B #.W,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0850_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte_mmu (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, dst); }}}}return 16 * CYCLE_UNIT / 2; } /* BCHG.B #.W,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0858_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte_mmu (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, dst); }}}}return 16 * CYCLE_UNIT / 2; } /* BCHG.B #.W,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0860_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = get_byte_mmu (dsta); m68k_areg (regs, dstreg) = dsta; src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, dst); }}}}return 18 * CYCLE_UNIT / 2; } /* BCHG.B #.W,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0868_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (4); { uae_s8 dst = get_byte_mmu (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, dst); }}}}return 20 * CYCLE_UNIT / 2; } /* BCHG.B #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0870_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta; m68k_incpci (4); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); { uae_s8 dst = get_byte_mmu (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, dst); }}}}}return 20 * CYCLE_UNIT / 2; } /* BCHG.B #.W,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_0878_31)(uae_u32 opcode) { {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (4); { uae_s8 dst = get_byte_mmu (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, dst); }}}}return 20 * CYCLE_UNIT / 2; } /* BCHG.B #.W,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_0879_31)(uae_u32 opcode) { {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = get_ilong_mmu (4); { uae_s8 dst = get_byte_mmu (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); m68k_incpci (8); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, dst); }}}}return 24 * CYCLE_UNIT / 2; } /* BCHG.B #.W,(d16,PC) */ uae_u32 REGPARAM2 CPUFUNC(op_087a_31)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_iword_mmu (4); { uae_s8 dst = get_byte_mmu (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, dst); }}}}return 20 * CYCLE_UNIT / 2; } /* BCHG.B #.W,(d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_087b_31)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 src = get_iword_mmu (2); { uaecptr tmppc; uaecptr dsta; m68k_incpci (4); { tmppc = m68k_getpc (); dsta = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_s8 dst = get_byte_mmu (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, dst); }}}}}return 20 * CYCLE_UNIT / 2; } /* BCLR.L #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0880_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= 31; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); m68k_dreg (regs, dstreg) = (dst); }}} m68k_incpci (4); return 8 * CYCLE_UNIT / 2; } /* BCLR.B #.W,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0890_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte_mmu (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, dst); }}}}return 16 * CYCLE_UNIT / 2; } /* BCLR.B #.W,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0898_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte_mmu (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, dst); }}}}return 16 * CYCLE_UNIT / 2; } /* BCLR.B #.W,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_08a0_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = get_byte_mmu (dsta); m68k_areg (regs, dstreg) = dsta; src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, dst); }}}}return 18 * CYCLE_UNIT / 2; } /* BCLR.B #.W,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_08a8_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (4); { uae_s8 dst = get_byte_mmu (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, dst); }}}}return 20 * CYCLE_UNIT / 2; } /* BCLR.B #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_08b0_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta; m68k_incpci (4); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); { uae_s8 dst = get_byte_mmu (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, dst); }}}}}return 20 * CYCLE_UNIT / 2; } /* BCLR.B #.W,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_08b8_31)(uae_u32 opcode) { {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (4); { uae_s8 dst = get_byte_mmu (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, dst); }}}}return 20 * CYCLE_UNIT / 2; } /* BCLR.B #.W,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_08b9_31)(uae_u32 opcode) { {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = get_ilong_mmu (4); { uae_s8 dst = get_byte_mmu (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); m68k_incpci (8); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, dst); }}}}return 24 * CYCLE_UNIT / 2; } /* BCLR.B #.W,(d16,PC) */ uae_u32 REGPARAM2 CPUFUNC(op_08ba_31)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_iword_mmu (4); { uae_s8 dst = get_byte_mmu (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, dst); }}}}return 20 * CYCLE_UNIT / 2; } /* BCLR.B #.W,(d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_08bb_31)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 src = get_iword_mmu (2); { uaecptr tmppc; uaecptr dsta; m68k_incpci (4); { tmppc = m68k_getpc (); dsta = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_s8 dst = get_byte_mmu (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, dst); }}}}}return 20 * CYCLE_UNIT / 2; } /* BSET.L #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_08c0_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= 31; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); m68k_dreg (regs, dstreg) = (dst); }}} m68k_incpci (4); return 8 * CYCLE_UNIT / 2; } /* BSET.B #.W,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_08d0_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte_mmu (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, dst); }}}}return 16 * CYCLE_UNIT / 2; } /* BSET.B #.W,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_08d8_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte_mmu (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, dst); }}}}return 16 * CYCLE_UNIT / 2; } /* BSET.B #.W,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_08e0_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = get_byte_mmu (dsta); m68k_areg (regs, dstreg) = dsta; src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, dst); }}}}return 18 * CYCLE_UNIT / 2; } /* BSET.B #.W,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_08e8_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (4); { uae_s8 dst = get_byte_mmu (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, dst); }}}}return 20 * CYCLE_UNIT / 2; } /* BSET.B #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_08f0_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta; m68k_incpci (4); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); { uae_s8 dst = get_byte_mmu (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, dst); }}}}}return 20 * CYCLE_UNIT / 2; } /* BSET.B #.W,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_08f8_31)(uae_u32 opcode) { {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (4); { uae_s8 dst = get_byte_mmu (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, dst); }}}}return 20 * CYCLE_UNIT / 2; } /* BSET.B #.W,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_08f9_31)(uae_u32 opcode) { {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = get_ilong_mmu (4); { uae_s8 dst = get_byte_mmu (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); m68k_incpci (8); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, dst); }}}}return 24 * CYCLE_UNIT / 2; } /* BSET.B #.W,(d16,PC) */ uae_u32 REGPARAM2 CPUFUNC(op_08fa_31)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_iword_mmu (4); { uae_s8 dst = get_byte_mmu (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, dst); }}}}return 20 * CYCLE_UNIT / 2; } /* BSET.B #.W,(d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_08fb_31)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 src = get_iword_mmu (2); { uaecptr tmppc; uaecptr dsta; m68k_incpci (4); { tmppc = m68k_getpc (); dsta = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_s8 dst = get_byte_mmu (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, dst); }}}}}return 20 * CYCLE_UNIT / 2; } /* EOR.B #.B,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0a00_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte_mmu (2); { uae_s8 dst = m68k_dreg (regs, dstreg); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}} m68k_incpci (4); return 12 * CYCLE_UNIT / 2; } /* EOR.B #.B,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0a10_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte_mmu (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 20 * CYCLE_UNIT / 2; } /* EOR.B #.B,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0a18_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte_mmu (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 20 * CYCLE_UNIT / 2; } /* EOR.B #.B,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0a20_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte_mmu (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = get_byte_mmu (dsta); m68k_areg (regs, dstreg) = dsta; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 22 * CYCLE_UNIT / 2; } /* EOR.B #.B,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0a28_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (4); { uae_s8 dst = get_byte_mmu (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 24 * CYCLE_UNIT / 2; } /* EOR.B #.B,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0a30_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte_mmu (2); { uaecptr dsta; m68k_incpci (4); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); { uae_s8 dst = get_byte_mmu (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}}return 24 * CYCLE_UNIT / 2; } /* EOR.B #.B,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_0a38_31)(uae_u32 opcode) { {{ uae_s8 src = get_ibyte_mmu (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (4); { uae_s8 dst = get_byte_mmu (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 24 * CYCLE_UNIT / 2; } /* EOR.B #.B,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_0a39_31)(uae_u32 opcode) { {{ uae_s8 src = get_ibyte_mmu (2); { uaecptr dsta = get_ilong_mmu (4); { uae_s8 dst = get_byte_mmu (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (8); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 28 * CYCLE_UNIT / 2; } /* EORSR.B #.W */ uae_u32 REGPARAM2 CPUFUNC(op_0a3c_31)(uae_u32 opcode) { { MakeSR (); { uae_s16 src = get_iword_mmu (2); src &= 0xFF; regs.sr ^= src; MakeFromSR (); }} m68k_incpci (4); return 8 * CYCLE_UNIT / 2; } /* EOR.W #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0a40_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uae_s16 dst = m68k_dreg (regs, dstreg); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}} m68k_incpci (4); return 8 * CYCLE_UNIT / 2; } /* EOR.W #.W,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0a50_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = get_word_mmu (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 16 * CYCLE_UNIT / 2; } /* EOR.W #.W,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0a58_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = get_word_mmu (dsta); m68k_areg (regs, dstreg) += 2; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 16 * CYCLE_UNIT / 2; } /* EOR.W #.W,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0a60_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = get_word_mmu (dsta); m68k_areg (regs, dstreg) = dsta; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 18 * CYCLE_UNIT / 2; } /* EOR.W #.W,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0a68_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (4); { uae_s16 dst = get_word_mmu (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 20 * CYCLE_UNIT / 2; } /* EOR.W #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0a70_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta; m68k_incpci (4); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); { uae_s16 dst = get_word_mmu (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}}return 20 * CYCLE_UNIT / 2; } /* EOR.W #.W,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_0a78_31)(uae_u32 opcode) { {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (4); { uae_s16 dst = get_word_mmu (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 20 * CYCLE_UNIT / 2; } /* EOR.W #.W,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_0a79_31)(uae_u32 opcode) { {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = get_ilong_mmu (4); { uae_s16 dst = get_word_mmu (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (8); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 24 * CYCLE_UNIT / 2; } /* EORSR.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_0a7c_31)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel11101; } { MakeSR (); { uae_s16 src = get_iword_mmu (2); regs.sr ^= src; MakeFromSR (); }}} m68k_incpci (4); endlabel11101: ; return 8 * CYCLE_UNIT / 2; } /* EOR.L #.L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0a80_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong_mmu (2); { uae_s32 dst = m68k_dreg (regs, dstreg); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}} m68k_incpci (6); return 12 * CYCLE_UNIT / 2; } #endif #ifdef PART_2 /* EOR.L #.L,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0a90_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = get_long_mmu (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 28 * CYCLE_UNIT / 2; } /* EOR.L #.L,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0a98_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = get_long_mmu (dsta); m68k_areg (regs, dstreg) += 4; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 28 * CYCLE_UNIT / 2; } /* EOR.L #.L,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0aa0_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong_mmu (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = get_long_mmu (dsta); m68k_areg (regs, dstreg) = dsta; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 30 * CYCLE_UNIT / 2; } /* EOR.L #.L,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0aa8_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (6); { uae_s32 dst = get_long_mmu (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (8); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 32 * CYCLE_UNIT / 2; } /* EOR.L #.L,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0ab0_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong_mmu (2); { uaecptr dsta; m68k_incpci (6); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); { uae_s32 dst = get_long_mmu (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}}return 32 * CYCLE_UNIT / 2; } /* EOR.L #.L,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_0ab8_31)(uae_u32 opcode) { {{ uae_s32 src = get_ilong_mmu (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (6); { uae_s32 dst = get_long_mmu (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (8); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 32 * CYCLE_UNIT / 2; } /* EOR.L #.L,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_0ab9_31)(uae_u32 opcode) { {{ uae_s32 src = get_ilong_mmu (2); { uaecptr dsta = get_ilong_mmu (6); { uae_s32 dst = get_long_mmu (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (10); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 36 * CYCLE_UNIT / 2; } /* CAS.B #.W,(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0ad0_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte_mmu (dsta); { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(m68k_dreg (regs, rc))); { int flgs = ((uae_s8)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(m68k_dreg (regs, rc))) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); m68k_incpci (4); if (GET_ZFLG ()){ regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = (m68k_dreg(regs, rc) & ~0xff) | (dst & 0xff); }}}}}}}}return 16 * CYCLE_UNIT / 2; } #endif /* CAS.B #.W,(An)+ */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0ad8_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte_mmu (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(m68k_dreg (regs, rc))); { int flgs = ((uae_s8)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(m68k_dreg (regs, rc))) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); m68k_incpci (4); if (GET_ZFLG ()){ regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = (m68k_dreg(regs, rc) & ~0xff) | (dst & 0xff); }}}}}}}}return 16 * CYCLE_UNIT / 2; } #endif /* CAS.B #.W,-(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0ae0_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = get_byte_mmu (dsta); m68k_areg (regs, dstreg) = dsta; { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(m68k_dreg (regs, rc))); { int flgs = ((uae_s8)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(m68k_dreg (regs, rc))) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); m68k_incpci (4); if (GET_ZFLG ()){ regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = (m68k_dreg(regs, rc) & ~0xff) | (dst & 0xff); }}}}}}}}return 18 * CYCLE_UNIT / 2; } #endif /* CAS.B #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0ae8_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (4); { uae_s8 dst = get_byte_mmu (dsta); { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(m68k_dreg (regs, rc))); { int flgs = ((uae_s8)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(m68k_dreg (regs, rc))) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); m68k_incpci (6); if (GET_ZFLG ()){ regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = (m68k_dreg(regs, rc) & ~0xff) | (dst & 0xff); }}}}}}}}return 20 * CYCLE_UNIT / 2; } #endif /* CAS.B #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0af0_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta; m68k_incpci (4); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); { uae_s8 dst = get_byte_mmu (dsta); { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(m68k_dreg (regs, rc))); { int flgs = ((uae_s8)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(m68k_dreg (regs, rc))) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); if (GET_ZFLG ()){ regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = (m68k_dreg(regs, rc) & ~0xff) | (dst & 0xff); }}}}}}}}}return 20 * CYCLE_UNIT / 2; } #endif /* CAS.B #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0af8_31)(uae_u32 opcode) { {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (4); { uae_s8 dst = get_byte_mmu (dsta); { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(m68k_dreg (regs, rc))); { int flgs = ((uae_s8)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(m68k_dreg (regs, rc))) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); m68k_incpci (6); if (GET_ZFLG ()){ regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = (m68k_dreg(regs, rc) & ~0xff) | (dst & 0xff); }}}}}}}}return 20 * CYCLE_UNIT / 2; } #endif /* CAS.B #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0af9_31)(uae_u32 opcode) { {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = get_ilong_mmu (4); { uae_s8 dst = get_byte_mmu (dsta); { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(m68k_dreg (regs, rc))); { int flgs = ((uae_s8)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(m68k_dreg (regs, rc))) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); m68k_incpci (8); if (GET_ZFLG ()){ regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = (m68k_dreg(regs, rc) & ~0xff) | (dst & 0xff); }}}}}}}}return 24 * CYCLE_UNIT / 2; } #endif /* CMP.B #.B,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0c00_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte_mmu (2); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpci (4); return 12 * CYCLE_UNIT / 2; } /* CMP.B #.B,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0c10_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte_mmu (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpci (4); return 16 * CYCLE_UNIT / 2; } /* CMP.B #.B,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0c18_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte_mmu (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpci (4); return 16 * CYCLE_UNIT / 2; } /* CMP.B #.B,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0c20_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte_mmu (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = get_byte_mmu (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpci (4); return 18 * CYCLE_UNIT / 2; } /* CMP.B #.B,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0c28_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (4); { uae_s8 dst = get_byte_mmu (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpci (6); return 20 * CYCLE_UNIT / 2; } /* CMP.B #.B,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0c30_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = get_ibyte_mmu (2); { uaecptr dsta; m68k_incpci (4); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); { uae_s8 dst = get_byte_mmu (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}}}return 20 * CYCLE_UNIT / 2; } /* CMP.B #.B,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_0c38_31)(uae_u32 opcode) { {{ uae_s8 src = get_ibyte_mmu (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (4); { uae_s8 dst = get_byte_mmu (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpci (6); return 20 * CYCLE_UNIT / 2; } /* CMP.B #.B,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_0c39_31)(uae_u32 opcode) { {{ uae_s8 src = get_ibyte_mmu (2); { uaecptr dsta = get_ilong_mmu (4); { uae_s8 dst = get_byte_mmu (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpci (8); return 24 * CYCLE_UNIT / 2; } /* CMP.B #.B,(d16,PC) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0c3a_31)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s8 src = get_ibyte_mmu (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_iword_mmu (4); { uae_s8 dst = get_byte_mmu (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpci (6); return 20 * CYCLE_UNIT / 2; } #endif /* CMP.B #.B,(d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0c3b_31)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s8 src = get_ibyte_mmu (2); { uaecptr tmppc; uaecptr dsta; m68k_incpci (4); { tmppc = m68k_getpc (); dsta = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_s8 dst = get_byte_mmu (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}}}return 20 * CYCLE_UNIT / 2; } #endif /* CMP.W #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0c40_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpci (4); return 8 * CYCLE_UNIT / 2; } /* CMP.W #.W,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0c50_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = get_word_mmu (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpci (4); return 12 * CYCLE_UNIT / 2; } /* CMP.W #.W,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0c58_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = get_word_mmu (dsta); m68k_areg (regs, dstreg) += 2; {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpci (4); return 12 * CYCLE_UNIT / 2; } /* CMP.W #.W,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0c60_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = get_word_mmu (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpci (4); return 14 * CYCLE_UNIT / 2; } /* CMP.W #.W,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0c68_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (4); { uae_s16 dst = get_word_mmu (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpci (6); return 16 * CYCLE_UNIT / 2; } /* CMP.W #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0c70_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta; m68k_incpci (4); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); { uae_s16 dst = get_word_mmu (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}}}return 16 * CYCLE_UNIT / 2; } /* CMP.W #.W,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_0c78_31)(uae_u32 opcode) { {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (4); { uae_s16 dst = get_word_mmu (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpci (6); return 16 * CYCLE_UNIT / 2; } /* CMP.W #.W,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_0c79_31)(uae_u32 opcode) { {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = get_ilong_mmu (4); { uae_s16 dst = get_word_mmu (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpci (8); return 20 * CYCLE_UNIT / 2; } /* CMP.W #.W,(d16,PC) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0c7a_31)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_iword_mmu (4); { uae_s16 dst = get_word_mmu (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpci (6); return 16 * CYCLE_UNIT / 2; } #endif /* CMP.W #.W,(d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0c7b_31)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 src = get_iword_mmu (2); { uaecptr tmppc; uaecptr dsta; m68k_incpci (4); { tmppc = m68k_getpc (); dsta = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_s16 dst = get_word_mmu (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}}}return 16 * CYCLE_UNIT / 2; } #endif /* CMP.L #.L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0c80_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong_mmu (2); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpci (6); return 12 * CYCLE_UNIT / 2; } /* CMP.L #.L,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0c90_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = get_long_mmu (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpci (6); return 20 * CYCLE_UNIT / 2; } /* CMP.L #.L,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0c98_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = get_long_mmu (dsta); m68k_areg (regs, dstreg) += 4; {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpci (6); return 20 * CYCLE_UNIT / 2; } /* CMP.L #.L,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0ca0_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong_mmu (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = get_long_mmu (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpci (6); return 22 * CYCLE_UNIT / 2; } /* CMP.L #.L,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0ca8_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (6); { uae_s32 dst = get_long_mmu (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpci (8); return 24 * CYCLE_UNIT / 2; } /* CMP.L #.L,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0cb0_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_ilong_mmu (2); { uaecptr dsta; m68k_incpci (6); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); { uae_s32 dst = get_long_mmu (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}}return 24 * CYCLE_UNIT / 2; } /* CMP.L #.L,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_0cb8_31)(uae_u32 opcode) { {{ uae_s32 src = get_ilong_mmu (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (6); { uae_s32 dst = get_long_mmu (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpci (8); return 24 * CYCLE_UNIT / 2; } /* CMP.L #.L,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_0cb9_31)(uae_u32 opcode) { {{ uae_s32 src = get_ilong_mmu (2); { uaecptr dsta = get_ilong_mmu (6); { uae_s32 dst = get_long_mmu (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpci (10); return 28 * CYCLE_UNIT / 2; } /* CMP.L #.L,(d16,PC) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0cba_31)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s32 src = get_ilong_mmu (2); { uaecptr dsta = m68k_getpc () + 6; dsta += (uae_s32)(uae_s16)get_iword_mmu (6); { uae_s32 dst = get_long_mmu (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpci (8); return 24 * CYCLE_UNIT / 2; } #endif /* CMP.L #.L,(d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0cbb_31)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s32 src = get_ilong_mmu (2); { uaecptr tmppc; uaecptr dsta; m68k_incpci (6); { tmppc = m68k_getpc (); dsta = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_s32 dst = get_long_mmu (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}}return 24 * CYCLE_UNIT / 2; } #endif /* CAS.W #.W,(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0cd0_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = get_word_mmu (dsta); { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(m68k_dreg (regs, rc))); { int flgs = ((uae_s16)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(m68k_dreg (regs, rc))) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); m68k_incpci (4); if (GET_ZFLG ()){ regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = (m68k_dreg(regs, rc) & ~0xffff) | (dst & 0xffff); }}}}}}}}return 16 * CYCLE_UNIT / 2; } #endif /* CAS.W #.W,(An)+ */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0cd8_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = get_word_mmu (dsta); m68k_areg (regs, dstreg) += 2; { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(m68k_dreg (regs, rc))); { int flgs = ((uae_s16)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(m68k_dreg (regs, rc))) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); m68k_incpci (4); if (GET_ZFLG ()){ regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = (m68k_dreg(regs, rc) & ~0xffff) | (dst & 0xffff); }}}}}}}}return 16 * CYCLE_UNIT / 2; } #endif /* CAS.W #.W,-(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0ce0_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = get_word_mmu (dsta); m68k_areg (regs, dstreg) = dsta; { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(m68k_dreg (regs, rc))); { int flgs = ((uae_s16)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(m68k_dreg (regs, rc))) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); m68k_incpci (4); if (GET_ZFLG ()){ regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = (m68k_dreg(regs, rc) & ~0xffff) | (dst & 0xffff); }}}}}}}}return 18 * CYCLE_UNIT / 2; } #endif /* CAS.W #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0ce8_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (4); { uae_s16 dst = get_word_mmu (dsta); { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(m68k_dreg (regs, rc))); { int flgs = ((uae_s16)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(m68k_dreg (regs, rc))) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); m68k_incpci (6); if (GET_ZFLG ()){ regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = (m68k_dreg(regs, rc) & ~0xffff) | (dst & 0xffff); }}}}}}}}return 20 * CYCLE_UNIT / 2; } #endif /* CAS.W #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0cf0_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta; m68k_incpci (4); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); { uae_s16 dst = get_word_mmu (dsta); { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(m68k_dreg (regs, rc))); { int flgs = ((uae_s16)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(m68k_dreg (regs, rc))) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); if (GET_ZFLG ()){ regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = (m68k_dreg(regs, rc) & ~0xffff) | (dst & 0xffff); }}}}}}}}}return 20 * CYCLE_UNIT / 2; } #endif /* CAS.W #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0cf8_31)(uae_u32 opcode) { {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (4); { uae_s16 dst = get_word_mmu (dsta); { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(m68k_dreg (regs, rc))); { int flgs = ((uae_s16)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(m68k_dreg (regs, rc))) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); m68k_incpci (6); if (GET_ZFLG ()){ regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = (m68k_dreg(regs, rc) & ~0xffff) | (dst & 0xffff); }}}}}}}}return 20 * CYCLE_UNIT / 2; } #endif /* CAS.W #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0cf9_31)(uae_u32 opcode) { {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = get_ilong_mmu (4); { uae_s16 dst = get_word_mmu (dsta); { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(m68k_dreg (regs, rc))); { int flgs = ((uae_s16)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(m68k_dreg (regs, rc))) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); m68k_incpci (8); if (GET_ZFLG ()){ regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = (m68k_dreg(regs, rc) & ~0xffff) | (dst & 0xffff); }}}}}}}}return 24 * CYCLE_UNIT / 2; } #endif /* CAS2.W #.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0cfc_31)(uae_u32 opcode) { {{ uae_s32 extra = get_ilong_mmu (2); uae_u32 rn1 = regs.regs[(extra >> 28) & 15]; uae_u32 rn2 = regs.regs[(extra >> 12) & 15]; uae_u16 dst1 = get_word_mmu (rn1), dst2 = get_word_mmu (rn2); {uae_u32 newv = ((uae_s16)(dst1)) - ((uae_s16)(m68k_dreg (regs, (extra >> 16) & 7))); { int flgs = ((uae_s16)(m68k_dreg (regs, (extra >> 16) & 7))) < 0; int flgo = ((uae_s16)(dst1)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(m68k_dreg (regs, (extra >> 16) & 7))) > ((uae_u16)(dst1))); SET_NFLG (flgn != 0); if (GET_ZFLG ()) { {uae_u32 newv = ((uae_s16)(dst2)) - ((uae_s16)(m68k_dreg (regs, extra & 7))); { int flgs = ((uae_s16)(m68k_dreg (regs, extra & 7))) < 0; int flgo = ((uae_s16)(dst2)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(m68k_dreg (regs, extra & 7))) > ((uae_u16)(dst2))); SET_NFLG (flgn != 0); if (GET_ZFLG ()) { put_word_mmu (rn1, m68k_dreg (regs, (extra >> 22) & 7)); put_word_mmu (rn2, m68k_dreg (regs, (extra >> 6) & 7)); }} }}}} if (! GET_ZFLG ()) { m68k_dreg (regs, (extra >> 6) & 7) = (m68k_dreg (regs, (extra >> 6) & 7) & ~0xffff) | (dst2 & 0xffff); m68k_dreg (regs, (extra >> 22) & 7) = (m68k_dreg (regs, (extra >> 22) & 7) & ~0xffff) | (dst1 & 0xffff); } }} m68k_incpci (6); return 12 * CYCLE_UNIT / 2; } #endif /* MOVES.B #.W,(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0e10_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel11155; } {{ uae_s16 extra = get_iword_mmu (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = m68k_areg (regs, dstreg); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); dfc_put_byte (dsta, src); }}else{{ uaecptr srca = m68k_areg (regs, dstreg); { uae_s8 src = sfc_get_byte (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = (uae_s32)(uae_s8)src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (m68k_dreg (regs, (extra >> 12) & 7) & ~0xff) | ((src) & 0xff); } }}} m68k_incpci (4); }}}endlabel11155: ; return 16 * CYCLE_UNIT / 2; } #endif /* MOVES.B #.W,(An)+ */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0e18_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel11156; } {{ uae_s16 extra = get_iword_mmu (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; m68k_incpci (4); regs.instruction_pc = m68k_getpci (); dfc_put_byte (dsta, src); }}else{{ uaecptr srca = m68k_areg (regs, dstreg); { uae_s8 src = sfc_get_byte (srca); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = (uae_s32)(uae_s8)src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (m68k_dreg (regs, (extra >> 12) & 7) & ~0xff) | ((src) & 0xff); } }}} m68k_incpci (4); }}}endlabel11156: ; return 16 * CYCLE_UNIT / 2; } #endif /* MOVES.B #.W,-(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0e20_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel11157; } {{ uae_s16 extra = get_iword_mmu (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; m68k_incpci (4); regs.instruction_pc = m68k_getpci (); dfc_put_byte (dsta, src); }}else{{ uaecptr srca; srca = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 src = sfc_get_byte (srca); m68k_areg (regs, dstreg) = srca; if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = (uae_s32)(uae_s8)src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (m68k_dreg (regs, (extra >> 12) & 7) & ~0xff) | ((src) & 0xff); } }}} m68k_incpci (4); }}}endlabel11157: ; return 20 * CYCLE_UNIT / 2; } #endif /* MOVES.B #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0e28_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel11158; } {{ uae_s16 extra = get_iword_mmu (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (4); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); dfc_put_byte (dsta, src); }}else{{ uaecptr srca = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (4); { uae_s8 src = sfc_get_byte (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = (uae_s32)(uae_s8)src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (m68k_dreg (regs, (extra >> 12) & 7) & ~0xff) | ((src) & 0xff); } }}} m68k_incpci (6); }}}endlabel11158: ; return 24 * CYCLE_UNIT / 2; } #endif /* MOVES.B #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0e30_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel11159; } {{ uae_s16 extra = get_iword_mmu (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta; m68k_incpci (4); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); regs.instruction_pc = m68k_getpci (); dfc_put_byte (dsta, src); }}}else{{ uaecptr srca; m68k_incpci (4); { srca = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); { uae_s8 src = sfc_get_byte (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = (uae_s32)(uae_s8)src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (m68k_dreg (regs, (extra >> 12) & 7) & ~0xff) | ((src) & 0xff); } }}}}}}}endlabel11159: ; return 24 * CYCLE_UNIT / 2; } #endif /* MOVES.B #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0e38_31)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel11160; } {{ uae_s16 extra = get_iword_mmu (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (4); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); dfc_put_byte (dsta, src); }}else{{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (4); { uae_s8 src = sfc_get_byte (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = (uae_s32)(uae_s8)src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (m68k_dreg (regs, (extra >> 12) & 7) & ~0xff) | ((src) & 0xff); } }}} m68k_incpci (6); }}}endlabel11160: ; return 24 * CYCLE_UNIT / 2; } #endif /* MOVES.B #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0e39_31)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel11161; } {{ uae_s16 extra = get_iword_mmu (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = get_ilong_mmu (4); m68k_incpci (8); regs.instruction_pc = m68k_getpci (); dfc_put_byte (dsta, src); }}else{{ uaecptr srca = get_ilong_mmu (4); { uae_s8 src = sfc_get_byte (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = (uae_s32)(uae_s8)src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (m68k_dreg (regs, (extra >> 12) & 7) & ~0xff) | ((src) & 0xff); } }}} m68k_incpci (8); }}}endlabel11161: ; return 32 * CYCLE_UNIT / 2; } #endif /* MOVES.W #.W,(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0e50_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel11162; } {{ uae_s16 extra = get_iword_mmu (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = m68k_areg (regs, dstreg); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); dfc_put_word (dsta, src); }}else{{ uaecptr srca = m68k_areg (regs, dstreg); { uae_s16 src = sfc_get_word (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = (uae_s32)(uae_s16)src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (m68k_dreg (regs, (extra >> 12) & 7) & ~0xffff) | ((src) & 0xffff); } }}} m68k_incpci (4); }}}endlabel11162: ; return 16 * CYCLE_UNIT / 2; } #endif /* MOVES.W #.W,(An)+ */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0e58_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel11163; } {{ uae_s16 extra = get_iword_mmu (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 2; m68k_incpci (4); regs.instruction_pc = m68k_getpci (); dfc_put_word (dsta, src); }}else{{ uaecptr srca = m68k_areg (regs, dstreg); { uae_s16 src = sfc_get_word (srca); m68k_areg (regs, dstreg) += 2; if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = (uae_s32)(uae_s16)src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (m68k_dreg (regs, (extra >> 12) & 7) & ~0xffff) | ((src) & 0xffff); } }}} m68k_incpci (4); }}}endlabel11163: ; return 16 * CYCLE_UNIT / 2; } #endif /* MOVES.W #.W,-(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0e60_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel11164; } {{ uae_s16 extra = get_iword_mmu (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; m68k_areg (regs, dstreg) = dsta; m68k_incpci (4); regs.instruction_pc = m68k_getpci (); dfc_put_word (dsta, src); }}else{{ uaecptr srca; srca = m68k_areg (regs, dstreg) - 2; { uae_s16 src = sfc_get_word (srca); m68k_areg (regs, dstreg) = srca; if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = (uae_s32)(uae_s16)src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (m68k_dreg (regs, (extra >> 12) & 7) & ~0xffff) | ((src) & 0xffff); } }}} m68k_incpci (4); }}}endlabel11164: ; return 20 * CYCLE_UNIT / 2; } #endif /* MOVES.W #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0e68_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel11165; } {{ uae_s16 extra = get_iword_mmu (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (4); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); dfc_put_word (dsta, src); }}else{{ uaecptr srca = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (4); { uae_s16 src = sfc_get_word (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = (uae_s32)(uae_s16)src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (m68k_dreg (regs, (extra >> 12) & 7) & ~0xffff) | ((src) & 0xffff); } }}} m68k_incpci (6); }}}endlabel11165: ; return 24 * CYCLE_UNIT / 2; } #endif /* MOVES.W #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0e70_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel11166; } {{ uae_s16 extra = get_iword_mmu (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta; m68k_incpci (4); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); regs.instruction_pc = m68k_getpci (); dfc_put_word (dsta, src); }}}else{{ uaecptr srca; m68k_incpci (4); { srca = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); { uae_s16 src = sfc_get_word (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = (uae_s32)(uae_s16)src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (m68k_dreg (regs, (extra >> 12) & 7) & ~0xffff) | ((src) & 0xffff); } }}}}}}}endlabel11166: ; return 24 * CYCLE_UNIT / 2; } #endif /* MOVES.W #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0e78_31)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel11167; } {{ uae_s16 extra = get_iword_mmu (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (4); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); dfc_put_word (dsta, src); }}else{{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (4); { uae_s16 src = sfc_get_word (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = (uae_s32)(uae_s16)src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (m68k_dreg (regs, (extra >> 12) & 7) & ~0xffff) | ((src) & 0xffff); } }}} m68k_incpci (6); }}}endlabel11167: ; return 24 * CYCLE_UNIT / 2; } #endif /* MOVES.W #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0e79_31)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel11168; } {{ uae_s16 extra = get_iword_mmu (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = get_ilong_mmu (4); m68k_incpci (8); regs.instruction_pc = m68k_getpci (); dfc_put_word (dsta, src); }}else{{ uaecptr srca = get_ilong_mmu (4); { uae_s16 src = sfc_get_word (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = (uae_s32)(uae_s16)src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (m68k_dreg (regs, (extra >> 12) & 7) & ~0xffff) | ((src) & 0xffff); } }}} m68k_incpci (8); }}}endlabel11168: ; return 32 * CYCLE_UNIT / 2; } #endif /* MOVES.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0e90_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel11169; } {{ uae_s16 extra = get_iword_mmu (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = m68k_areg (regs, dstreg); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); dfc_put_long (dsta, src); }}else{{ uaecptr srca = m68k_areg (regs, dstreg); { uae_s32 src = sfc_get_long (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (src); } }}} m68k_incpci (4); }}}endlabel11169: ; return 24 * CYCLE_UNIT / 2; } #endif /* MOVES.L #.W,(An)+ */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0e98_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel11170; } {{ uae_s16 extra = get_iword_mmu (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 4; m68k_incpci (4); regs.instruction_pc = m68k_getpci (); dfc_put_long (dsta, src); }}else{{ uaecptr srca = m68k_areg (regs, dstreg); { uae_s32 src = sfc_get_long (srca); m68k_areg (regs, dstreg) += 4; if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (src); } }}} m68k_incpci (4); }}}endlabel11170: ; return 24 * CYCLE_UNIT / 2; } #endif /* MOVES.L #.W,-(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0ea0_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel11171; } {{ uae_s16 extra = get_iword_mmu (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; m68k_areg (regs, dstreg) = dsta; m68k_incpci (4); regs.instruction_pc = m68k_getpci (); dfc_put_long (dsta, src); }}else{{ uaecptr srca; srca = m68k_areg (regs, dstreg) - 4; { uae_s32 src = sfc_get_long (srca); m68k_areg (regs, dstreg) = srca; if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (src); } }}} m68k_incpci (4); }}}endlabel11171: ; return 28 * CYCLE_UNIT / 2; } #endif /* MOVES.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0ea8_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel11172; } {{ uae_s16 extra = get_iword_mmu (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (4); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); dfc_put_long (dsta, src); }}else{{ uaecptr srca = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (4); { uae_s32 src = sfc_get_long (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (src); } }}} m68k_incpci (6); }}}endlabel11172: ; return 32 * CYCLE_UNIT / 2; } #endif /* MOVES.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0eb0_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel11173; } {{ uae_s16 extra = get_iword_mmu (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta; m68k_incpci (4); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); regs.instruction_pc = m68k_getpci (); dfc_put_long (dsta, src); }}}else{{ uaecptr srca; m68k_incpci (4); { srca = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); { uae_s32 src = sfc_get_long (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (src); } }}}}}}}endlabel11173: ; return 32 * CYCLE_UNIT / 2; } #endif /* MOVES.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0eb8_31)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel11174; } {{ uae_s16 extra = get_iword_mmu (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (4); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); dfc_put_long (dsta, src); }}else{{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (4); { uae_s32 src = sfc_get_long (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (src); } }}} m68k_incpci (6); }}}endlabel11174: ; return 32 * CYCLE_UNIT / 2; } #endif /* MOVES.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0eb9_31)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel11175; } {{ uae_s16 extra = get_iword_mmu (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = get_ilong_mmu (4); m68k_incpci (8); regs.instruction_pc = m68k_getpci (); dfc_put_long (dsta, src); }}else{{ uaecptr srca = get_ilong_mmu (4); { uae_s32 src = sfc_get_long (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (src); } }}} m68k_incpci (8); }}}endlabel11175: ; return 40 * CYCLE_UNIT / 2; } #endif /* CAS.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0ed0_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = get_long_mmu (dsta); { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(m68k_dreg (regs, rc))); { int flgs = ((uae_s32)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(m68k_dreg (regs, rc))) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); m68k_incpci (4); if (GET_ZFLG ()){ regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = dst; }}}}}}}}return 24 * CYCLE_UNIT / 2; } #endif /* CAS.L #.W,(An)+ */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0ed8_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = get_long_mmu (dsta); m68k_areg (regs, dstreg) += 4; { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(m68k_dreg (regs, rc))); { int flgs = ((uae_s32)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(m68k_dreg (regs, rc))) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); m68k_incpci (4); if (GET_ZFLG ()){ regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = dst; }}}}}}}}return 24 * CYCLE_UNIT / 2; } #endif /* CAS.L #.W,-(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0ee0_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = get_long_mmu (dsta); m68k_areg (regs, dstreg) = dsta; { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(m68k_dreg (regs, rc))); { int flgs = ((uae_s32)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(m68k_dreg (regs, rc))) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); m68k_incpci (4); if (GET_ZFLG ()){ regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = dst; }}}}}}}}return 26 * CYCLE_UNIT / 2; } #endif /* CAS.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0ee8_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (4); { uae_s32 dst = get_long_mmu (dsta); { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(m68k_dreg (regs, rc))); { int flgs = ((uae_s32)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(m68k_dreg (regs, rc))) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); m68k_incpci (6); if (GET_ZFLG ()){ regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = dst; }}}}}}}}return 28 * CYCLE_UNIT / 2; } #endif /* CAS.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0ef0_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta; m68k_incpci (4); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); { uae_s32 dst = get_long_mmu (dsta); { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(m68k_dreg (regs, rc))); { int flgs = ((uae_s32)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(m68k_dreg (regs, rc))) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); if (GET_ZFLG ()){ regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = dst; }}}}}}}}}return 28 * CYCLE_UNIT / 2; } #endif /* CAS.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0ef8_31)(uae_u32 opcode) { {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (4); { uae_s32 dst = get_long_mmu (dsta); { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(m68k_dreg (regs, rc))); { int flgs = ((uae_s32)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(m68k_dreg (regs, rc))) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); m68k_incpci (6); if (GET_ZFLG ()){ regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = dst; }}}}}}}}return 28 * CYCLE_UNIT / 2; } #endif /* CAS.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0ef9_31)(uae_u32 opcode) { {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = get_ilong_mmu (4); { uae_s32 dst = get_long_mmu (dsta); { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(m68k_dreg (regs, rc))); { int flgs = ((uae_s32)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(m68k_dreg (regs, rc))) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); m68k_incpci (8); if (GET_ZFLG ()){ regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = dst; }}}}}}}}return 32 * CYCLE_UNIT / 2; } #endif /* CAS2.L #.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0efc_31)(uae_u32 opcode) { {{ uae_s32 extra = get_ilong_mmu (2); uae_u32 rn1 = regs.regs[(extra >> 28) & 15]; uae_u32 rn2 = regs.regs[(extra >> 12) & 15]; uae_u32 dst1 = get_long_mmu (rn1), dst2 = get_long_mmu (rn2); {uae_u32 newv = ((uae_s32)(dst1)) - ((uae_s32)(m68k_dreg (regs, (extra >> 16) & 7))); { int flgs = ((uae_s32)(m68k_dreg (regs, (extra >> 16) & 7))) < 0; int flgo = ((uae_s32)(dst1)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(m68k_dreg (regs, (extra >> 16) & 7))) > ((uae_u32)(dst1))); SET_NFLG (flgn != 0); if (GET_ZFLG ()) { {uae_u32 newv = ((uae_s32)(dst2)) - ((uae_s32)(m68k_dreg (regs, extra & 7))); { int flgs = ((uae_s32)(m68k_dreg (regs, extra & 7))) < 0; int flgo = ((uae_s32)(dst2)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(m68k_dreg (regs, extra & 7))) > ((uae_u32)(dst2))); SET_NFLG (flgn != 0); if (GET_ZFLG ()) { put_long_mmu (rn1, m68k_dreg (regs, (extra >> 22) & 7)); put_long_mmu (rn2, m68k_dreg (regs, (extra >> 6) & 7)); }} }}}} if (! GET_ZFLG ()) { m68k_dreg (regs, (extra >> 6) & 7) = dst2; m68k_dreg (regs, (extra >> 22) & 7) = dst1; } }} m68k_incpci (6); return 12 * CYCLE_UNIT / 2; } #endif /* MOVE.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_1000_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); m68k_incpci (2); }}}return 4 * CYCLE_UNIT / 2; } /* MOVE.B (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_1010_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte_mmu (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); m68k_incpci (2); }}}}return 8 * CYCLE_UNIT / 2; } /* MOVE.B (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_1018_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte_mmu (srca); mmufixup[0].reg = srcreg; mmufixup[0].value = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { mmufixup[0].reg = -1; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); m68k_incpci (2); }}}}return 8 * CYCLE_UNIT / 2; } /* MOVE.B -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_1020_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte_mmu (srca); mmufixup[0].reg = srcreg; mmufixup[0].value = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) = srca; { mmufixup[0].reg = -1; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); m68k_incpci (2); }}}}return 10 * CYCLE_UNIT / 2; } /* MOVE.B (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_1028_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 src = get_byte_mmu (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); m68k_incpci (4); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.B (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_1030_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s8 src = get_byte_mmu (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.B (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_1038_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 src = get_byte_mmu (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); m68k_incpci (4); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.B (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_1039_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong_mmu (2); { uae_s8 src = get_byte_mmu (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); m68k_incpci (6); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_103a_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 src = get_byte_mmu (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); m68k_incpci (4); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.B (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_103b_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpci (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_s8 src = get_byte_mmu (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.B #.B,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_103c_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = get_ibyte_mmu (2); { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); m68k_incpci (4); }}}return 12 * CYCLE_UNIT / 2; } /* MOVE.B Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_1080_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}return 8 * CYCLE_UNIT / 2; } /* MOVE.B (An),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_1090_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte_mmu (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.B (An)+,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_1098_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte_mmu (srca); mmufixup[0].reg = srcreg; mmufixup[0].value = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uaecptr dsta = m68k_areg (regs, dstreg); mmufixup[0].reg = -1; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.B -(An),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_10a0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte_mmu (srca); mmufixup[0].reg = srcreg; mmufixup[0].value = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = m68k_areg (regs, dstreg); mmufixup[0].reg = -1; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 14 * CYCLE_UNIT / 2; } /* MOVE.B (d16,An),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_10a8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 src = get_byte_mmu (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B (d8,An,Xn),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_10b0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s8 src = get_byte_mmu (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B (xxx).W,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_10b8_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 src = get_byte_mmu (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B (xxx).L,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_10b9_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong_mmu (2); { uae_s8 src = get_byte_mmu (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.B (d16,PC),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_10ba_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 src = get_byte_mmu (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B (d8,PC,Xn),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_10bb_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpci (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_s8 src = get_byte_mmu (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B #.B,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_10bc_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = get_ibyte_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_10c0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}return 8 * CYCLE_UNIT / 2; } /* MOVE.B (An),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_10d0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte_mmu (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.B (An)+,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_10d8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte_mmu (srca); mmufixup[0].reg = srcreg; mmufixup[0].value = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; mmufixup[0].reg = -1; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.B -(An),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_10e0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte_mmu (srca); mmufixup[0].reg = srcreg; mmufixup[0].value = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; mmufixup[0].reg = -1; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 14 * CYCLE_UNIT / 2; } /* MOVE.B (d16,An),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_10e8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 src = get_byte_mmu (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B (d8,An,Xn),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_10f0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s8 src = get_byte_mmu (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B (xxx).W,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_10f8_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 src = get_byte_mmu (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B (xxx).L,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_10f9_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong_mmu (2); { uae_s8 src = get_byte_mmu (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.B (d16,PC),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_10fa_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 src = get_byte_mmu (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B (d8,PC,Xn),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_10fb_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpci (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_s8 src = get_byte_mmu (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B #.B,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_10fc_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = get_ibyte_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_1100_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}return 8 * CYCLE_UNIT / 2; } /* MOVE.B (An),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_1110_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte_mmu (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.B (An)+,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_1118_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte_mmu (srca); mmufixup[0].reg = srcreg; mmufixup[0].value = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; mmufixup[0].reg = -1; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.B -(An),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_1120_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte_mmu (srca); mmufixup[0].reg = srcreg; mmufixup[0].value = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; mmufixup[0].reg = -1; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 14 * CYCLE_UNIT / 2; } /* MOVE.B (d16,An),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_1128_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 src = get_byte_mmu (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B (d8,An,Xn),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_1130_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s8 src = get_byte_mmu (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B (xxx).W,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_1138_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 src = get_byte_mmu (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B (xxx).L,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_1139_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong_mmu (2); { uae_s8 src = get_byte_mmu (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.B (d16,PC),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_113a_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 src = get_byte_mmu (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B (d8,PC,Xn),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_113b_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpci (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_s8 src = get_byte_mmu (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B #.B,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_113c_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = get_ibyte_mmu (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_1140_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}return 12 * CYCLE_UNIT / 2; } /* MOVE.B (An),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_1150_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte_mmu (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B (An)+,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_1158_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte_mmu (srca); mmufixup[0].reg = srcreg; mmufixup[0].value = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (2); mmufixup[0].reg = -1; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B -(An),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_1160_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte_mmu (srca); mmufixup[0].reg = srcreg; mmufixup[0].value = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (2); mmufixup[0].reg = -1; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 18 * CYCLE_UNIT / 2; } /* MOVE.B (d16,An),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_1168_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 src = get_byte_mmu (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.B (d8,An,Xn),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_1170_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s8 src = get_byte_mmu (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (0); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.B (xxx).W,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_1178_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 src = get_byte_mmu (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.B (xxx).L,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_1179_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong_mmu (2); { uae_s8 src = get_byte_mmu (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (6); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (8); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.B (d16,PC),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_117a_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 src = get_byte_mmu (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.B (d8,PC,Xn),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_117b_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpci (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_s8 src = get_byte_mmu (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (0); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.B #.B,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_117c_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = get_ibyte_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}return 20 * CYCLE_UNIT / 2; } /* MOVE.B Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_1180_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpci (2); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.B (An),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_1190_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte_mmu (srca); { uaecptr dsta; m68k_incpci (2); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B (An)+,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_1198_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte_mmu (srca); mmufixup[0].reg = srcreg; mmufixup[0].value = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uaecptr dsta; m68k_incpci (2); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); mmufixup[0].reg = -1; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B -(An),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_11a0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte_mmu (srca); mmufixup[0].reg = srcreg; mmufixup[0].value = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; m68k_incpci (2); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); mmufixup[0].reg = -1; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}}return 18 * CYCLE_UNIT / 2; } /* MOVE.B (d16,An),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_11a8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 src = get_byte_mmu (srca); { uaecptr dsta; m68k_incpci (4); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.B (d8,An,Xn),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_11b0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s8 src = get_byte_mmu (srca); { uaecptr dsta; { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.B (xxx).W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_11b8_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 src = get_byte_mmu (srca); { uaecptr dsta; m68k_incpci (4); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.B (xxx).L,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_11b9_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong_mmu (2); { uae_s8 src = get_byte_mmu (srca); { uaecptr dsta; m68k_incpci (6); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.B (d16,PC),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_11ba_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 src = get_byte_mmu (srca); { uaecptr dsta; m68k_incpci (4); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.B (d8,PC,Xn),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_11bb_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpci (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_s8 src = get_byte_mmu (srca); { uaecptr dsta; { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.B #.B,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_11bc_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = get_ibyte_mmu (2); { uaecptr dsta; m68k_incpci (4); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.B Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_11c0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}return 12 * CYCLE_UNIT / 2; } /* MOVE.B (An),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_11d0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte_mmu (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B (An)+,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_11d8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte_mmu (srca); mmufixup[0].reg = srcreg; mmufixup[0].value = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (2); mmufixup[0].reg = -1; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B -(An),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_11e0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte_mmu (srca); mmufixup[0].reg = srcreg; mmufixup[0].value = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (2); mmufixup[0].reg = -1; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 18 * CYCLE_UNIT / 2; } /* MOVE.B (d16,An),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_11e8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 src = get_byte_mmu (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.B (d8,An,Xn),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_11f0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s8 src = get_byte_mmu (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (0); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.B (xxx).W,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_11f8_31)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 src = get_byte_mmu (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.B (xxx).L,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_11f9_31)(uae_u32 opcode) { {{ uaecptr srca = get_ilong_mmu (2); { uae_s8 src = get_byte_mmu (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (6); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (8); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.B (d16,PC),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_11fa_31)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 src = get_byte_mmu (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.B (d8,PC,Xn),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_11fb_31)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; m68k_incpci (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_s8 src = get_byte_mmu (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (0); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.B #.B,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_11fc_31)(uae_u32 opcode) { {{ uae_s8 src = get_ibyte_mmu (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}return 20 * CYCLE_UNIT / 2; } /* MOVE.B Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_13c0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_ilong_mmu (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B (An),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_13d0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte_mmu (srca); { uaecptr dsta = get_ilong_mmu (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.B (An)+,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_13d8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte_mmu (srca); mmufixup[0].reg = srcreg; mmufixup[0].value = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uaecptr dsta = get_ilong_mmu (2); mmufixup[0].reg = -1; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.B -(An),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_13e0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte_mmu (srca); mmufixup[0].reg = srcreg; mmufixup[0].value = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = get_ilong_mmu (2); mmufixup[0].reg = -1; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 22 * CYCLE_UNIT / 2; } /* MOVE.B (d16,An),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_13e8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 src = get_byte_mmu (srca); { uaecptr dsta = get_ilong_mmu (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (8); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.B (d8,An,Xn),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_13f0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s8 src = get_byte_mmu (srca); { uaecptr dsta = get_ilong_mmu (0); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.B (xxx).W,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_13f8_31)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 src = get_byte_mmu (srca); { uaecptr dsta = get_ilong_mmu (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (8); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.B (xxx).L,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_13f9_31)(uae_u32 opcode) { {{ uaecptr srca = get_ilong_mmu (2); { uae_s8 src = get_byte_mmu (srca); { uaecptr dsta = get_ilong_mmu (6); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (10); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 28 * CYCLE_UNIT / 2; } /* MOVE.B (d16,PC),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_13fa_31)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 src = get_byte_mmu (srca); { uaecptr dsta = get_ilong_mmu (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (8); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.B (d8,PC,Xn),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_13fb_31)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; m68k_incpci (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_s8 src = get_byte_mmu (srca); { uaecptr dsta = get_ilong_mmu (0); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.B #.B,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_13fc_31)(uae_u32 opcode) { {{ uae_s8 src = get_ibyte_mmu (2); { uaecptr dsta = get_ilong_mmu (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (8); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_2000_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpci (2); }}}return 4 * CYCLE_UNIT / 2; } /* MOVE.L An,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_2008_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpci (2); }}}return 4 * CYCLE_UNIT / 2; } /* MOVE.L (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_2010_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long_mmu (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpci (2); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.L (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_2018_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long_mmu (srca); mmufixup[0].reg = srcreg; mmufixup[0].value = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += 4; { mmufixup[0].reg = -1; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpci (2); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.L -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_2020_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = get_long_mmu (srca); mmufixup[0].reg = srcreg; mmufixup[0].value = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) = srca; { mmufixup[0].reg = -1; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpci (2); }}}}return 14 * CYCLE_UNIT / 2; } /* MOVE.L (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_2028_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 src = get_long_mmu (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpci (4); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.L (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_2030_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s32 src = get_long_mmu (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.L (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_2038_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 src = get_long_mmu (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpci (4); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.L (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_2039_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong_mmu (2); { uae_s32 src = get_long_mmu (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpci (6); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.L (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_203a_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 src = get_long_mmu (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpci (4); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.L (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_203b_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpci (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_s32 src = get_long_mmu (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.L #.L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_203c_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_ilong_mmu (2); { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpci (6); }}}return 12 * CYCLE_UNIT / 2; } /* MOVEA.L Dn,An */ uae_u32 REGPARAM2 CPUFUNC(op_2040_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { m68k_areg (regs, dstreg) = (src); m68k_incpci (2); }}}return 4 * CYCLE_UNIT / 2; } /* MOVEA.L An,An */ uae_u32 REGPARAM2 CPUFUNC(op_2048_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { m68k_areg (regs, dstreg) = (src); m68k_incpci (2); }}}return 4 * CYCLE_UNIT / 2; } /* MOVEA.L (An),An */ uae_u32 REGPARAM2 CPUFUNC(op_2050_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long_mmu (srca); { m68k_areg (regs, dstreg) = (src); m68k_incpci (2); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVEA.L (An)+,An */ uae_u32 REGPARAM2 CPUFUNC(op_2058_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long_mmu (srca); mmufixup[0].reg = srcreg; mmufixup[0].value = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += 4; { mmufixup[0].reg = -1; m68k_areg (regs, dstreg) = (src); m68k_incpci (2); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVEA.L -(An),An */ uae_u32 REGPARAM2 CPUFUNC(op_2060_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = get_long_mmu (srca); mmufixup[0].reg = srcreg; mmufixup[0].value = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) = srca; { mmufixup[0].reg = -1; m68k_areg (regs, dstreg) = (src); m68k_incpci (2); }}}}return 14 * CYCLE_UNIT / 2; } /* MOVEA.L (d16,An),An */ uae_u32 REGPARAM2 CPUFUNC(op_2068_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 src = get_long_mmu (srca); { m68k_areg (regs, dstreg) = (src); m68k_incpci (4); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVEA.L (d8,An,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_2070_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s32 src = get_long_mmu (srca); { m68k_areg (regs, dstreg) = (src); }}}}}return 16 * CYCLE_UNIT / 2; } /* MOVEA.L (xxx).W,An */ uae_u32 REGPARAM2 CPUFUNC(op_2078_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 src = get_long_mmu (srca); { m68k_areg (regs, dstreg) = (src); m68k_incpci (4); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVEA.L (xxx).L,An */ uae_u32 REGPARAM2 CPUFUNC(op_2079_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong_mmu (2); { uae_s32 src = get_long_mmu (srca); { m68k_areg (regs, dstreg) = (src); m68k_incpci (6); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVEA.L (d16,PC),An */ uae_u32 REGPARAM2 CPUFUNC(op_207a_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 src = get_long_mmu (srca); { m68k_areg (regs, dstreg) = (src); m68k_incpci (4); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVEA.L (d8,PC,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_207b_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpci (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_s32 src = get_long_mmu (srca); { m68k_areg (regs, dstreg) = (src); }}}}}return 16 * CYCLE_UNIT / 2; } /* MOVEA.L #.L,An */ uae_u32 REGPARAM2 CPUFUNC(op_207c_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_ilong_mmu (2); { m68k_areg (regs, dstreg) = (src); m68k_incpci (6); }}}return 12 * CYCLE_UNIT / 2; } /* MOVE.L Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_2080_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}return 12 * CYCLE_UNIT / 2; } /* MOVE.L An,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_2088_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}return 12 * CYCLE_UNIT / 2; } /* MOVE.L (An),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_2090_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long_mmu (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.L (An)+,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_2098_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long_mmu (srca); mmufixup[0].reg = srcreg; mmufixup[0].value = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += 4; { uaecptr dsta = m68k_areg (regs, dstreg); mmufixup[0].reg = -1; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.L -(An),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_20a0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = get_long_mmu (srca); mmufixup[0].reg = srcreg; mmufixup[0].value = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = m68k_areg (regs, dstreg); mmufixup[0].reg = -1; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 22 * CYCLE_UNIT / 2; } /* MOVE.L (d16,An),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_20a8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 src = get_long_mmu (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L (d8,An,Xn),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_20b0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s32 src = get_long_mmu (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L (xxx).W,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_20b8_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 src = get_long_mmu (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L (xxx).L,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_20b9_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong_mmu (2); { uae_s32 src = get_long_mmu (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 28 * CYCLE_UNIT / 2; } /* MOVE.L (d16,PC),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_20ba_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 src = get_long_mmu (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L (d8,PC,Xn),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_20bb_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpci (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_s32 src = get_long_mmu (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L #.L,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_20bc_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_ilong_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}return 20 * CYCLE_UNIT / 2; } /* MOVE.L Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_20c0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}return 12 * CYCLE_UNIT / 2; } /* MOVE.L An,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_20c8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}return 12 * CYCLE_UNIT / 2; } /* MOVE.L (An),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_20d0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long_mmu (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.L (An)+,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_20d8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long_mmu (srca); mmufixup[0].reg = srcreg; mmufixup[0].value = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += 4; { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 4; mmufixup[0].reg = -1; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.L -(An),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_20e0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = get_long_mmu (srca); mmufixup[0].reg = srcreg; mmufixup[0].value = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 4; mmufixup[0].reg = -1; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 22 * CYCLE_UNIT / 2; } /* MOVE.L (d16,An),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_20e8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 src = get_long_mmu (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L (d8,An,Xn),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_20f0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s32 src = get_long_mmu (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L (xxx).W,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_20f8_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 src = get_long_mmu (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L (xxx).L,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_20f9_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong_mmu (2); { uae_s32 src = get_long_mmu (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 28 * CYCLE_UNIT / 2; } /* MOVE.L (d16,PC),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_20fa_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 src = get_long_mmu (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L (d8,PC,Xn),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_20fb_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpci (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_s32 src = get_long_mmu (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L #.L,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_20fc_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_ilong_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}return 20 * CYCLE_UNIT / 2; } /* MOVE.L Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_2100_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}return 12 * CYCLE_UNIT / 2; } /* MOVE.L An,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_2108_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}return 12 * CYCLE_UNIT / 2; } /* MOVE.L (An),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_2110_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long_mmu (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.L (An)+,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_2118_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long_mmu (srca); mmufixup[0].reg = srcreg; mmufixup[0].value = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += 4; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; m68k_areg (regs, dstreg) = dsta; mmufixup[0].reg = -1; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.L -(An),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_2120_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = get_long_mmu (srca); mmufixup[0].reg = srcreg; mmufixup[0].value = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; m68k_areg (regs, dstreg) = dsta; mmufixup[0].reg = -1; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 22 * CYCLE_UNIT / 2; } /* MOVE.L (d16,An),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_2128_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 src = get_long_mmu (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L (d8,An,Xn),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_2130_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s32 src = get_long_mmu (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L (xxx).W,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_2138_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 src = get_long_mmu (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L (xxx).L,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_2139_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong_mmu (2); { uae_s32 src = get_long_mmu (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 28 * CYCLE_UNIT / 2; } /* MOVE.L (d16,PC),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_213a_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 src = get_long_mmu (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L (d8,PC,Xn),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_213b_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpci (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_s32 src = get_long_mmu (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L #.L,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_213c_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_ilong_mmu (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}return 20 * CYCLE_UNIT / 2; } /* MOVE.L Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_2140_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}return 16 * CYCLE_UNIT / 2; } /* MOVE.L An,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_2148_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}return 16 * CYCLE_UNIT / 2; } /* MOVE.L (An),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_2150_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long_mmu (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L (An)+,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_2158_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long_mmu (srca); mmufixup[0].reg = srcreg; mmufixup[0].value = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += 4; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (2); mmufixup[0].reg = -1; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L -(An),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_2160_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = get_long_mmu (srca); mmufixup[0].reg = srcreg; mmufixup[0].value = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (2); mmufixup[0].reg = -1; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 26 * CYCLE_UNIT / 2; } /* MOVE.L (d16,An),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_2168_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 src = get_long_mmu (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 28 * CYCLE_UNIT / 2; } #endif #ifdef PART_3 /* MOVE.L (d8,An,Xn),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_2170_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s32 src = get_long_mmu (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (0); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}}return 28 * CYCLE_UNIT / 2; } /* MOVE.L (xxx).W,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_2178_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 src = get_long_mmu (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 28 * CYCLE_UNIT / 2; } /* MOVE.L (xxx).L,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_2179_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong_mmu (2); { uae_s32 src = get_long_mmu (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (6); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (8); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 32 * CYCLE_UNIT / 2; } /* MOVE.L (d16,PC),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_217a_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 src = get_long_mmu (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 28 * CYCLE_UNIT / 2; } /* MOVE.L (d8,PC,Xn),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_217b_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpci (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_s32 src = get_long_mmu (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (0); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}}return 28 * CYCLE_UNIT / 2; } /* MOVE.L #.L,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_217c_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_ilong_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (6); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (8); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_2180_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpci (2); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.L An,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_2188_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uaecptr dsta; m68k_incpci (2); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.L (An),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_2190_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long_mmu (srca); { uaecptr dsta; m68k_incpci (2); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L (An)+,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_2198_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long_mmu (srca); mmufixup[0].reg = srcreg; mmufixup[0].value = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += 4; { uaecptr dsta; m68k_incpci (2); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); mmufixup[0].reg = -1; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L -(An),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_21a0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = get_long_mmu (srca); mmufixup[0].reg = srcreg; mmufixup[0].value = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; m68k_incpci (2); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); mmufixup[0].reg = -1; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}}return 26 * CYCLE_UNIT / 2; } /* MOVE.L (d16,An),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_21a8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 src = get_long_mmu (srca); { uaecptr dsta; m68k_incpci (4); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}}return 28 * CYCLE_UNIT / 2; } /* MOVE.L (d8,An,Xn),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_21b0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s32 src = get_long_mmu (srca); { uaecptr dsta; { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}}}return 28 * CYCLE_UNIT / 2; } /* MOVE.L (xxx).W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_21b8_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 src = get_long_mmu (srca); { uaecptr dsta; m68k_incpci (4); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}}return 28 * CYCLE_UNIT / 2; } /* MOVE.L (xxx).L,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_21b9_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong_mmu (2); { uae_s32 src = get_long_mmu (srca); { uaecptr dsta; m68k_incpci (6); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}}return 32 * CYCLE_UNIT / 2; } /* MOVE.L (d16,PC),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_21ba_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 src = get_long_mmu (srca); { uaecptr dsta; m68k_incpci (4); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}}return 28 * CYCLE_UNIT / 2; } /* MOVE.L (d8,PC,Xn),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_21bb_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpci (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_s32 src = get_long_mmu (srca); { uaecptr dsta; { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}}}return 28 * CYCLE_UNIT / 2; } /* MOVE.L #.L,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_21bc_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_ilong_mmu (2); { uaecptr dsta; m68k_incpci (6); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_21c0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}return 16 * CYCLE_UNIT / 2; } /* MOVE.L An,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_21c8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_areg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}return 16 * CYCLE_UNIT / 2; } /* MOVE.L (An),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_21d0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long_mmu (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L (An)+,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_21d8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long_mmu (srca); mmufixup[0].reg = srcreg; mmufixup[0].value = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += 4; { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (2); mmufixup[0].reg = -1; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L -(An),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_21e0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = get_long_mmu (srca); mmufixup[0].reg = srcreg; mmufixup[0].value = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (2); mmufixup[0].reg = -1; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 26 * CYCLE_UNIT / 2; } /* MOVE.L (d16,An),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_21e8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 src = get_long_mmu (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 28 * CYCLE_UNIT / 2; } /* MOVE.L (d8,An,Xn),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_21f0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s32 src = get_long_mmu (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (0); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}}return 28 * CYCLE_UNIT / 2; } /* MOVE.L (xxx).W,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_21f8_31)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 src = get_long_mmu (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 28 * CYCLE_UNIT / 2; } /* MOVE.L (xxx).L,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_21f9_31)(uae_u32 opcode) { {{ uaecptr srca = get_ilong_mmu (2); { uae_s32 src = get_long_mmu (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (6); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (8); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 32 * CYCLE_UNIT / 2; } /* MOVE.L (d16,PC),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_21fa_31)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 src = get_long_mmu (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 28 * CYCLE_UNIT / 2; } /* MOVE.L (d8,PC,Xn),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_21fb_31)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; m68k_incpci (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_s32 src = get_long_mmu (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (0); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}}return 28 * CYCLE_UNIT / 2; } /* MOVE.L #.L,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_21fc_31)(uae_u32 opcode) { {{ uae_s32 src = get_ilong_mmu (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (6); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (8); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_23c0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_ilong_mmu (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}return 20 * CYCLE_UNIT / 2; } /* MOVE.L An,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_23c8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_areg (regs, srcreg); { uaecptr dsta = get_ilong_mmu (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}return 20 * CYCLE_UNIT / 2; } /* MOVE.L (An),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_23d0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long_mmu (srca); { uaecptr dsta = get_ilong_mmu (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 28 * CYCLE_UNIT / 2; } /* MOVE.L (An)+,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_23d8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long_mmu (srca); mmufixup[0].reg = srcreg; mmufixup[0].value = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += 4; { uaecptr dsta = get_ilong_mmu (2); mmufixup[0].reg = -1; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 28 * CYCLE_UNIT / 2; } /* MOVE.L -(An),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_23e0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = get_long_mmu (srca); mmufixup[0].reg = srcreg; mmufixup[0].value = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = get_ilong_mmu (2); mmufixup[0].reg = -1; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 30 * CYCLE_UNIT / 2; } /* MOVE.L (d16,An),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_23e8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 src = get_long_mmu (srca); { uaecptr dsta = get_ilong_mmu (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (8); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 32 * CYCLE_UNIT / 2; } /* MOVE.L (d8,An,Xn),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_23f0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s32 src = get_long_mmu (srca); { uaecptr dsta = get_ilong_mmu (0); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}}return 32 * CYCLE_UNIT / 2; } /* MOVE.L (xxx).W,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_23f8_31)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 src = get_long_mmu (srca); { uaecptr dsta = get_ilong_mmu (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (8); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 32 * CYCLE_UNIT / 2; } /* MOVE.L (xxx).L,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_23f9_31)(uae_u32 opcode) { {{ uaecptr srca = get_ilong_mmu (2); { uae_s32 src = get_long_mmu (srca); { uaecptr dsta = get_ilong_mmu (6); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (10); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 36 * CYCLE_UNIT / 2; } /* MOVE.L (d16,PC),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_23fa_31)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 src = get_long_mmu (srca); { uaecptr dsta = get_ilong_mmu (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (8); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 32 * CYCLE_UNIT / 2; } /* MOVE.L (d8,PC,Xn),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_23fb_31)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; m68k_incpci (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_s32 src = get_long_mmu (srca); { uaecptr dsta = get_ilong_mmu (0); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}}return 32 * CYCLE_UNIT / 2; } /* MOVE.L #.L,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_23fc_31)(uae_u32 opcode) { {{ uae_s32 src = get_ilong_mmu (2); { uaecptr dsta = get_ilong_mmu (6); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (10); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}return 28 * CYCLE_UNIT / 2; } /* MOVE.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_3000_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpci (2); }}}return 4 * CYCLE_UNIT / 2; } /* MOVE.W An,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_3008_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpci (2); }}}return 4 * CYCLE_UNIT / 2; } /* MOVE.W (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_3010_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word_mmu (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpci (2); }}}}return 8 * CYCLE_UNIT / 2; } /* MOVE.W (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_3018_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word_mmu (srca); mmufixup[0].reg = srcreg; mmufixup[0].value = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += 2; { mmufixup[0].reg = -1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpci (2); }}}}return 8 * CYCLE_UNIT / 2; } /* MOVE.W -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_3020_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = get_word_mmu (srca); mmufixup[0].reg = srcreg; mmufixup[0].value = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) = srca; { mmufixup[0].reg = -1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpci (2); }}}}return 10 * CYCLE_UNIT / 2; } /* MOVE.W (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_3028_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpci (4); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.W (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_3030_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s16 src = get_word_mmu (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.W (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_3038_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpci (4); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.W (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_3039_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong_mmu (2); { uae_s16 src = get_word_mmu (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpci (6); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_303a_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpci (4); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.W (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_303b_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpci (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_s16 src = get_word_mmu (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.W #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_303c_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_iword_mmu (2); { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpci (4); }}}return 8 * CYCLE_UNIT / 2; } /* MOVEA.W Dn,An */ uae_u32 REGPARAM2 CPUFUNC(op_3040_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpci (2); }}}return 4 * CYCLE_UNIT / 2; } /* MOVEA.W An,An */ uae_u32 REGPARAM2 CPUFUNC(op_3048_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpci (2); }}}return 4 * CYCLE_UNIT / 2; } /* MOVEA.W (An),An */ uae_u32 REGPARAM2 CPUFUNC(op_3050_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word_mmu (srca); { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpci (2); }}}}return 8 * CYCLE_UNIT / 2; } /* MOVEA.W (An)+,An */ uae_u32 REGPARAM2 CPUFUNC(op_3058_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word_mmu (srca); mmufixup[0].reg = srcreg; mmufixup[0].value = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += 2; { mmufixup[0].reg = -1; src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpci (2); }}}}return 8 * CYCLE_UNIT / 2; } /* MOVEA.W -(An),An */ uae_u32 REGPARAM2 CPUFUNC(op_3060_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = get_word_mmu (srca); mmufixup[0].reg = srcreg; mmufixup[0].value = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) = srca; { mmufixup[0].reg = -1; src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpci (2); }}}}return 10 * CYCLE_UNIT / 2; } /* MOVEA.W (d16,An),An */ uae_u32 REGPARAM2 CPUFUNC(op_3068_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpci (4); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVEA.W (d8,An,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_3070_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s16 src = get_word_mmu (srca); { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); }}}}}return 12 * CYCLE_UNIT / 2; } /* MOVEA.W (xxx).W,An */ uae_u32 REGPARAM2 CPUFUNC(op_3078_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpci (4); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVEA.W (xxx).L,An */ uae_u32 REGPARAM2 CPUFUNC(op_3079_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong_mmu (2); { uae_s16 src = get_word_mmu (srca); { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpci (6); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVEA.W (d16,PC),An */ uae_u32 REGPARAM2 CPUFUNC(op_307a_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpci (4); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVEA.W (d8,PC,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_307b_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpci (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_s16 src = get_word_mmu (srca); { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); }}}}}return 12 * CYCLE_UNIT / 2; } /* MOVEA.W #.W,An */ uae_u32 REGPARAM2 CPUFUNC(op_307c_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_iword_mmu (2); { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpci (4); }}}return 8 * CYCLE_UNIT / 2; } /* MOVE.W Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_3080_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}return 8 * CYCLE_UNIT / 2; } /* MOVE.W An,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_3088_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}return 8 * CYCLE_UNIT / 2; } /* MOVE.W (An),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_3090_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word_mmu (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.W (An)+,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_3098_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word_mmu (srca); mmufixup[0].reg = srcreg; mmufixup[0].value = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += 2; { uaecptr dsta = m68k_areg (regs, dstreg); mmufixup[0].reg = -1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.W -(An),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_30a0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = get_word_mmu (srca); mmufixup[0].reg = srcreg; mmufixup[0].value = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = m68k_areg (regs, dstreg); mmufixup[0].reg = -1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 14 * CYCLE_UNIT / 2; } /* MOVE.W (d16,An),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_30a8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W (d8,An,Xn),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_30b0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s16 src = get_word_mmu (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W (xxx).W,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_30b8_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W (xxx).L,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_30b9_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong_mmu (2); { uae_s16 src = get_word_mmu (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.W (d16,PC),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_30ba_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W (d8,PC,Xn),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_30bb_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpci (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_s16 src = get_word_mmu (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W #.W,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_30bc_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}return 12 * CYCLE_UNIT / 2; } /* MOVE.W Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_30c0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}return 8 * CYCLE_UNIT / 2; } /* MOVE.W An,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_30c8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}return 8 * CYCLE_UNIT / 2; } /* MOVE.W (An),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_30d0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word_mmu (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.W (An)+,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_30d8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word_mmu (srca); mmufixup[0].reg = srcreg; mmufixup[0].value = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += 2; { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 2; mmufixup[0].reg = -1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.W -(An),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_30e0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = get_word_mmu (srca); mmufixup[0].reg = srcreg; mmufixup[0].value = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 2; mmufixup[0].reg = -1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 14 * CYCLE_UNIT / 2; } /* MOVE.W (d16,An),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_30e8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W (d8,An,Xn),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_30f0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s16 src = get_word_mmu (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W (xxx).W,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_30f8_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W (xxx).L,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_30f9_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong_mmu (2); { uae_s16 src = get_word_mmu (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.W (d16,PC),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_30fa_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W (d8,PC,Xn),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_30fb_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpci (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_s16 src = get_word_mmu (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W #.W,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_30fc_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}return 12 * CYCLE_UNIT / 2; } /* MOVE.W Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_3100_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}return 8 * CYCLE_UNIT / 2; } /* MOVE.W An,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_3108_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}return 8 * CYCLE_UNIT / 2; } /* MOVE.W (An),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_3110_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word_mmu (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.W (An)+,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_3118_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word_mmu (srca); mmufixup[0].reg = srcreg; mmufixup[0].value = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += 2; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; m68k_areg (regs, dstreg) = dsta; mmufixup[0].reg = -1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.W -(An),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_3120_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = get_word_mmu (srca); mmufixup[0].reg = srcreg; mmufixup[0].value = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; m68k_areg (regs, dstreg) = dsta; mmufixup[0].reg = -1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 14 * CYCLE_UNIT / 2; } /* MOVE.W (d16,An),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_3128_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W (d8,An,Xn),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_3130_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s16 src = get_word_mmu (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W (xxx).W,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_3138_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W (xxx).L,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_3139_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong_mmu (2); { uae_s16 src = get_word_mmu (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.W (d16,PC),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_313a_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W (d8,PC,Xn),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_313b_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpci (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_s16 src = get_word_mmu (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W #.W,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_313c_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}return 12 * CYCLE_UNIT / 2; } /* MOVE.W Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_3140_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}return 12 * CYCLE_UNIT / 2; } /* MOVE.W An,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_3148_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}return 12 * CYCLE_UNIT / 2; } /* MOVE.W (An),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_3150_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word_mmu (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W (An)+,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_3158_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word_mmu (srca); mmufixup[0].reg = srcreg; mmufixup[0].value = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += 2; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (2); mmufixup[0].reg = -1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W -(An),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_3160_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = get_word_mmu (srca); mmufixup[0].reg = srcreg; mmufixup[0].value = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (2); mmufixup[0].reg = -1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 18 * CYCLE_UNIT / 2; } /* MOVE.W (d16,An),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_3168_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.W (d8,An,Xn),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_3170_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s16 src = get_word_mmu (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (0); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.W (xxx).W,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_3178_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.W (xxx).L,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_3179_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong_mmu (2); { uae_s16 src = get_word_mmu (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (6); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (8); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.W (d16,PC),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_317a_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.W (d8,PC,Xn),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_317b_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpci (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_s16 src = get_word_mmu (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (0); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.W #.W,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_317c_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_3180_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpci (2); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.W An,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_3188_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uaecptr dsta; m68k_incpci (2); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.W (An),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_3190_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word_mmu (srca); { uaecptr dsta; m68k_incpci (2); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W (An)+,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_3198_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word_mmu (srca); mmufixup[0].reg = srcreg; mmufixup[0].value = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += 2; { uaecptr dsta; m68k_incpci (2); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); mmufixup[0].reg = -1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W -(An),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_31a0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = get_word_mmu (srca); mmufixup[0].reg = srcreg; mmufixup[0].value = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; m68k_incpci (2); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); mmufixup[0].reg = -1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}}return 18 * CYCLE_UNIT / 2; } /* MOVE.W (d16,An),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_31a8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); { uaecptr dsta; m68k_incpci (4); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.W (d8,An,Xn),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_31b0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s16 src = get_word_mmu (srca); { uaecptr dsta; { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.W (xxx).W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_31b8_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); { uaecptr dsta; m68k_incpci (4); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.W (xxx).L,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_31b9_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong_mmu (2); { uae_s16 src = get_word_mmu (srca); { uaecptr dsta; m68k_incpci (6); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.W (d16,PC),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_31ba_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); { uaecptr dsta; m68k_incpci (4); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.W (d8,PC,Xn),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_31bb_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpci (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_s16 src = get_word_mmu (srca); { uaecptr dsta; { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.W #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_31bc_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta; m68k_incpci (4); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_31c0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}return 12 * CYCLE_UNIT / 2; } /* MOVE.W An,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_31c8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_areg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}return 12 * CYCLE_UNIT / 2; } /* MOVE.W (An),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_31d0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word_mmu (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W (An)+,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_31d8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word_mmu (srca); mmufixup[0].reg = srcreg; mmufixup[0].value = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += 2; { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (2); mmufixup[0].reg = -1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W -(An),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_31e0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = get_word_mmu (srca); mmufixup[0].reg = srcreg; mmufixup[0].value = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (2); mmufixup[0].reg = -1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 18 * CYCLE_UNIT / 2; } /* MOVE.W (d16,An),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_31e8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.W (d8,An,Xn),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_31f0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s16 src = get_word_mmu (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (0); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.W (xxx).W,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_31f8_31)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.W (xxx).L,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_31f9_31)(uae_u32 opcode) { {{ uaecptr srca = get_ilong_mmu (2); { uae_s16 src = get_word_mmu (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (6); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (8); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.W (d16,PC),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_31fa_31)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.W (d8,PC,Xn),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_31fb_31)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; m68k_incpci (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_s16 src = get_word_mmu (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (0); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.W #.W,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_31fc_31)(uae_u32 opcode) { {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_33c0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_ilong_mmu (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W An,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_33c8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_areg (regs, srcreg); { uaecptr dsta = get_ilong_mmu (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W (An),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_33d0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word_mmu (srca); { uaecptr dsta = get_ilong_mmu (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.W (An)+,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_33d8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word_mmu (srca); mmufixup[0].reg = srcreg; mmufixup[0].value = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += 2; { uaecptr dsta = get_ilong_mmu (2); mmufixup[0].reg = -1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.W -(An),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_33e0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = get_word_mmu (srca); mmufixup[0].reg = srcreg; mmufixup[0].value = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = get_ilong_mmu (2); mmufixup[0].reg = -1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 22 * CYCLE_UNIT / 2; } /* MOVE.W (d16,An),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_33e8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); { uaecptr dsta = get_ilong_mmu (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (8); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.W (d8,An,Xn),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_33f0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s16 src = get_word_mmu (srca); { uaecptr dsta = get_ilong_mmu (0); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.W (xxx).W,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_33f8_31)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); { uaecptr dsta = get_ilong_mmu (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (8); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.W (xxx).L,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_33f9_31)(uae_u32 opcode) { {{ uaecptr srca = get_ilong_mmu (2); { uae_s16 src = get_word_mmu (srca); { uaecptr dsta = get_ilong_mmu (6); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (10); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 28 * CYCLE_UNIT / 2; } /* MOVE.W (d16,PC),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_33fa_31)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); { uaecptr dsta = get_ilong_mmu (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (8); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.W (d8,PC,Xn),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_33fb_31)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; m68k_incpci (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_s16 src = get_word_mmu (srca); { uaecptr dsta = get_ilong_mmu (0); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.W #.W,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_33fc_31)(uae_u32 opcode) { {{ uae_s16 src = get_iword_mmu (2); { uaecptr dsta = get_ilong_mmu (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (8); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}return 20 * CYCLE_UNIT / 2; } /* NEGX.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4000_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((newv) & 0xff); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* NEGX.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4010_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte_mmu (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, newv); }}}}}return 12 * CYCLE_UNIT / 2; } /* NEGX.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4018_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte_mmu (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, newv); }}}}}return 12 * CYCLE_UNIT / 2; } /* NEGX.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_4020_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte_mmu (srca); m68k_areg (regs, srcreg) = srca; { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, newv); }}}}}return 14 * CYCLE_UNIT / 2; } /* NEGX.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4028_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 src = get_byte_mmu (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, newv); }}}}}return 16 * CYCLE_UNIT / 2; } /* NEGX.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4030_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s8 src = get_byte_mmu (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, newv); }}}}}}return 16 * CYCLE_UNIT / 2; } /* NEGX.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4038_31)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 src = get_byte_mmu (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, newv); }}}}}return 16 * CYCLE_UNIT / 2; } /* NEGX.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4039_31)(uae_u32 opcode) { {{ uaecptr srca = get_ilong_mmu (2); { uae_s8 src = get_byte_mmu (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, newv); }}}}}return 20 * CYCLE_UNIT / 2; } /* NEGX.W Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4040_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | ((newv) & 0xffff); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* NEGX.W (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4050_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word_mmu (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (srca, newv); }}}}}return 12 * CYCLE_UNIT / 2; } /* NEGX.W (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4058_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word_mmu (srca); m68k_areg (regs, srcreg) += 2; { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (srca, newv); }}}}}return 12 * CYCLE_UNIT / 2; } /* NEGX.W -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_4060_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = get_word_mmu (srca); m68k_areg (regs, srcreg) = srca; { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (srca, newv); }}}}}return 14 * CYCLE_UNIT / 2; } /* NEGX.W (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4068_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (srca, newv); }}}}}return 16 * CYCLE_UNIT / 2; } /* NEGX.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4070_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s16 src = get_word_mmu (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); regs.instruction_pc = m68k_getpci (); put_word_mmu (srca, newv); }}}}}}return 16 * CYCLE_UNIT / 2; } /* NEGX.W (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4078_31)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (srca, newv); }}}}}return 16 * CYCLE_UNIT / 2; } /* NEGX.W (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4079_31)(uae_u32 opcode) { {{ uaecptr srca = get_ilong_mmu (2); { uae_s16 src = get_word_mmu (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_word_mmu (srca, newv); }}}}}return 20 * CYCLE_UNIT / 2; } /* NEGX.L Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4080_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, srcreg) = (newv); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* NEGX.L (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4090_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long_mmu (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_long_mmu (srca, newv); }}}}}return 20 * CYCLE_UNIT / 2; } /* NEGX.L (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4098_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long_mmu (srca); m68k_areg (regs, srcreg) += 4; { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_long_mmu (srca, newv); }}}}}return 20 * CYCLE_UNIT / 2; } /* NEGX.L -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_40a0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = get_long_mmu (srca); m68k_areg (regs, srcreg) = srca; { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_long_mmu (srca, newv); }}}}}return 22 * CYCLE_UNIT / 2; } /* NEGX.L (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_40a8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 src = get_long_mmu (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_long_mmu (srca, newv); }}}}}return 24 * CYCLE_UNIT / 2; } /* NEGX.L (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_40b0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s32 src = get_long_mmu (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); regs.instruction_pc = m68k_getpci (); put_long_mmu (srca, newv); }}}}}}return 24 * CYCLE_UNIT / 2; } /* NEGX.L (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_40b8_31)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 src = get_long_mmu (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_long_mmu (srca, newv); }}}}}return 24 * CYCLE_UNIT / 2; } /* NEGX.L (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_40b9_31)(uae_u32 opcode) { {{ uaecptr srca = get_ilong_mmu (2); { uae_s32 src = get_long_mmu (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_long_mmu (srca, newv); }}}}}return 28 * CYCLE_UNIT / 2; } /* MVSR2.W Dn */ uae_u32 REGPARAM2 CPUFUNC(op_40c0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel11512; } {{ MakeSR (); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | ((regs.sr) & 0xffff); }}} m68k_incpci (2); endlabel11512: ; return 4 * CYCLE_UNIT / 2; } /* MVSR2.W (An) */ uae_u32 REGPARAM2 CPUFUNC(op_40d0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel11513; } {{ uaecptr srca = m68k_areg (regs, srcreg); MakeSR (); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (srca, regs.sr); }}}endlabel11513: ; return 8 * CYCLE_UNIT / 2; } /* MVSR2.W (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_40d8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel11514; } {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += 2; MakeSR (); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (srca, regs.sr); }}}endlabel11514: ; return 8 * CYCLE_UNIT / 2; } /* MVSR2.W -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_40e0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel11515; } {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; m68k_areg (regs, srcreg) = srca; MakeSR (); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (srca, regs.sr); }}}endlabel11515: ; return 10 * CYCLE_UNIT / 2; } /* MVSR2.W (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_40e8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel11516; } {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); MakeSR (); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (srca, regs.sr); }}}endlabel11516: ; return 12 * CYCLE_UNIT / 2; } /* MVSR2.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_40f0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel11517; } {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); MakeSR (); regs.instruction_pc = m68k_getpci (); put_word_mmu (srca, regs.sr); }}}}endlabel11517: ; return 12 * CYCLE_UNIT / 2; } /* MVSR2.W (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_40f8_31)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel11518; } {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); MakeSR (); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (srca, regs.sr); }}}endlabel11518: ; return 12 * CYCLE_UNIT / 2; } /* MVSR2.W (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_40f9_31)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel11519; } {{ uaecptr srca = get_ilong_mmu (2); MakeSR (); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_word_mmu (srca, regs.sr); }}}endlabel11519: ; return 16 * CYCLE_UNIT / 2; } /* CHK.L Dn,Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4100_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); m68k_incpci (2); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel11520; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel11520; } }}}endlabel11520: ; return 4 * CYCLE_UNIT / 2; } #endif /* CHK.L (An),Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4110_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long_mmu (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); m68k_incpci (2); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel11521; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel11521; } }}}}endlabel11521: ; return 12 * CYCLE_UNIT / 2; } #endif /* CHK.L (An)+,Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4118_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long_mmu (srca); m68k_areg (regs, srcreg) += 4; { uae_s32 dst = m68k_dreg (regs, dstreg); m68k_incpci (2); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel11522; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel11522; } }}}}endlabel11522: ; return 12 * CYCLE_UNIT / 2; } #endif /* CHK.L -(An),Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4120_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = get_long_mmu (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_dreg (regs, dstreg); m68k_incpci (2); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel11523; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel11523; } }}}}endlabel11523: ; return 14 * CYCLE_UNIT / 2; } #endif /* CHK.L (d16,An),Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4128_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 src = get_long_mmu (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); m68k_incpci (4); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel11524; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel11524; } }}}}endlabel11524: ; return 16 * CYCLE_UNIT / 2; } #endif /* CHK.L (d8,An,Xn),Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4130_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s32 src = get_long_mmu (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel11525; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel11525; } }}}}}endlabel11525: ; return 16 * CYCLE_UNIT / 2; } #endif /* CHK.L (xxx).W,Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4138_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 src = get_long_mmu (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); m68k_incpci (4); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel11526; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel11526; } }}}}endlabel11526: ; return 16 * CYCLE_UNIT / 2; } #endif /* CHK.L (xxx).L,Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4139_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong_mmu (2); { uae_s32 src = get_long_mmu (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); m68k_incpci (6); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel11527; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel11527; } }}}}endlabel11527: ; return 20 * CYCLE_UNIT / 2; } #endif /* CHK.L (d16,PC),Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_413a_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 src = get_long_mmu (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); m68k_incpci (4); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel11528; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel11528; } }}}}endlabel11528: ; return 16 * CYCLE_UNIT / 2; } #endif /* CHK.L (d8,PC,Xn),Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_413b_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpci (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_s32 src = get_long_mmu (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel11529; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel11529; } }}}}}endlabel11529: ; return 16 * CYCLE_UNIT / 2; } #endif /* CHK.L #.L,Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_413c_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_ilong_mmu (2); { uae_s32 dst = m68k_dreg (regs, dstreg); m68k_incpci (6); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel11530; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel11530; } }}}endlabel11530: ; return 12 * CYCLE_UNIT / 2; } #endif /* CHK.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4180_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); m68k_incpci (2); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel11531; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel11531; } }}}endlabel11531: ; return 4 * CYCLE_UNIT / 2; } /* CHK.W (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4190_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word_mmu (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); m68k_incpci (2); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel11532; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel11532; } }}}}endlabel11532: ; return 8 * CYCLE_UNIT / 2; } /* CHK.W (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4198_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word_mmu (srca); m68k_areg (regs, srcreg) += 2; { uae_s16 dst = m68k_dreg (regs, dstreg); m68k_incpci (2); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel11533; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel11533; } }}}}endlabel11533: ; return 8 * CYCLE_UNIT / 2; } /* CHK.W -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_41a0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = get_word_mmu (srca); m68k_areg (regs, srcreg) = srca; { uae_s16 dst = m68k_dreg (regs, dstreg); m68k_incpci (2); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel11534; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel11534; } }}}}endlabel11534: ; return 10 * CYCLE_UNIT / 2; } /* CHK.W (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_41a8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); m68k_incpci (4); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel11535; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel11535; } }}}}endlabel11535: ; return 12 * CYCLE_UNIT / 2; } /* CHK.W (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_41b0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s16 src = get_word_mmu (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel11536; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel11536; } }}}}}endlabel11536: ; return 12 * CYCLE_UNIT / 2; } /* CHK.W (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_41b8_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); m68k_incpci (4); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel11537; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel11537; } }}}}endlabel11537: ; return 12 * CYCLE_UNIT / 2; } /* CHK.W (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_41b9_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong_mmu (2); { uae_s16 src = get_word_mmu (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); m68k_incpci (6); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel11538; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel11538; } }}}}endlabel11538: ; return 16 * CYCLE_UNIT / 2; } /* CHK.W (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_41ba_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); m68k_incpci (4); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel11539; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel11539; } }}}}endlabel11539: ; return 12 * CYCLE_UNIT / 2; } /* CHK.W (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_41bb_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpci (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_s16 src = get_word_mmu (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel11540; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel11540; } }}}}}endlabel11540: ; return 12 * CYCLE_UNIT / 2; } /* CHK.W #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_41bc_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_iword_mmu (2); { uae_s16 dst = m68k_dreg (regs, dstreg); m68k_incpci (4); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel11541; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel11541; } }}}endlabel11541: ; return 8 * CYCLE_UNIT / 2; } /* LEA.L (An),An */ uae_u32 REGPARAM2 CPUFUNC(op_41d0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { m68k_areg (regs, dstreg) = (srca); }}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* LEA.L (d16,An),An */ uae_u32 REGPARAM2 CPUFUNC(op_41e8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { m68k_areg (regs, dstreg) = (srca); }}} m68k_incpci (4); return 8 * CYCLE_UNIT / 2; } /* LEA.L (d8,An,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_41f0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { m68k_areg (regs, dstreg) = (srca); }}}}return 8 * CYCLE_UNIT / 2; } /* LEA.L (xxx).W,An */ uae_u32 REGPARAM2 CPUFUNC(op_41f8_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); { m68k_areg (regs, dstreg) = (srca); }}} m68k_incpci (4); return 8 * CYCLE_UNIT / 2; } /* LEA.L (xxx).L,An */ uae_u32 REGPARAM2 CPUFUNC(op_41f9_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong_mmu (2); { m68k_areg (regs, dstreg) = (srca); }}} m68k_incpci (6); return 12 * CYCLE_UNIT / 2; } /* LEA.L (d16,PC),An */ uae_u32 REGPARAM2 CPUFUNC(op_41fa_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword_mmu (2); { m68k_areg (regs, dstreg) = (srca); }}} m68k_incpci (4); return 8 * CYCLE_UNIT / 2; } /* LEA.L (d8,PC,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_41fb_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpci (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { m68k_areg (regs, dstreg) = (srca); }}}}return 8 * CYCLE_UNIT / 2; } /* CLR.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4200_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ CLEAR_CZNV (); SET_ZFLG (((uae_s8)(0)) == 0); SET_NFLG (((uae_s8)(0)) < 0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((0) & 0xff); }} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* CLR.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4210_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(0)) == 0); SET_NFLG (((uae_s8)(0)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, 0); }}return 8 * CYCLE_UNIT / 2; } /* CLR.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4218_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(0)) == 0); SET_NFLG (((uae_s8)(0)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, 0); }}return 8 * CYCLE_UNIT / 2; } /* CLR.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_4220_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(0)) == 0); SET_NFLG (((uae_s8)(0)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, 0); }}return 10 * CYCLE_UNIT / 2; } /* CLR.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4228_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(0)) == 0); SET_NFLG (((uae_s8)(0)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, 0); }}return 12 * CYCLE_UNIT / 2; } /* CLR.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4230_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(0)) == 0); SET_NFLG (((uae_s8)(0)) < 0); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, 0); }}}return 12 * CYCLE_UNIT / 2; } /* CLR.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4238_31)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(0)) == 0); SET_NFLG (((uae_s8)(0)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, 0); }}return 12 * CYCLE_UNIT / 2; } /* CLR.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4239_31)(uae_u32 opcode) { {{ uaecptr srca = get_ilong_mmu (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(0)) == 0); SET_NFLG (((uae_s8)(0)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, 0); }}return 16 * CYCLE_UNIT / 2; } /* CLR.W Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4240_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ CLEAR_CZNV (); SET_ZFLG (((uae_s16)(0)) == 0); SET_NFLG (((uae_s16)(0)) < 0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | ((0) & 0xffff); }} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* CLR.W (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4250_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(0)) == 0); SET_NFLG (((uae_s16)(0)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (srca, 0); }}return 8 * CYCLE_UNIT / 2; } /* CLR.W (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4258_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(0)) == 0); SET_NFLG (((uae_s16)(0)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (srca, 0); }}return 8 * CYCLE_UNIT / 2; } /* CLR.W -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_4260_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; m68k_areg (regs, srcreg) = srca; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(0)) == 0); SET_NFLG (((uae_s16)(0)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (srca, 0); }}return 10 * CYCLE_UNIT / 2; } /* CLR.W (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4268_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(0)) == 0); SET_NFLG (((uae_s16)(0)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (srca, 0); }}return 12 * CYCLE_UNIT / 2; } /* CLR.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4270_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(0)) == 0); SET_NFLG (((uae_s16)(0)) < 0); regs.instruction_pc = m68k_getpci (); put_word_mmu (srca, 0); }}}return 12 * CYCLE_UNIT / 2; } /* CLR.W (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4278_31)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(0)) == 0); SET_NFLG (((uae_s16)(0)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (srca, 0); }}return 12 * CYCLE_UNIT / 2; } /* CLR.W (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4279_31)(uae_u32 opcode) { {{ uaecptr srca = get_ilong_mmu (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(0)) == 0); SET_NFLG (((uae_s16)(0)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_word_mmu (srca, 0); }}return 16 * CYCLE_UNIT / 2; } /* CLR.L Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4280_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ CLEAR_CZNV (); SET_ZFLG (((uae_s32)(0)) == 0); SET_NFLG (((uae_s32)(0)) < 0); m68k_dreg (regs, srcreg) = (0); }} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* CLR.L (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4290_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(0)) == 0); SET_NFLG (((uae_s32)(0)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_long_mmu (srca, 0); }}return 12 * CYCLE_UNIT / 2; } /* CLR.L (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4298_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(0)) == 0); SET_NFLG (((uae_s32)(0)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_long_mmu (srca, 0); }}return 12 * CYCLE_UNIT / 2; } /* CLR.L -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_42a0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; m68k_areg (regs, srcreg) = srca; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(0)) == 0); SET_NFLG (((uae_s32)(0)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_long_mmu (srca, 0); }}return 14 * CYCLE_UNIT / 2; } /* CLR.L (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_42a8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(0)) == 0); SET_NFLG (((uae_s32)(0)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_long_mmu (srca, 0); }}return 16 * CYCLE_UNIT / 2; } /* CLR.L (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_42b0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(0)) == 0); SET_NFLG (((uae_s32)(0)) < 0); regs.instruction_pc = m68k_getpci (); put_long_mmu (srca, 0); }}}return 16 * CYCLE_UNIT / 2; } /* CLR.L (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_42b8_31)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(0)) == 0); SET_NFLG (((uae_s32)(0)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_long_mmu (srca, 0); }}return 16 * CYCLE_UNIT / 2; } /* CLR.L (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_42b9_31)(uae_u32 opcode) { {{ uaecptr srca = get_ilong_mmu (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(0)) == 0); SET_NFLG (((uae_s32)(0)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_long_mmu (srca, 0); }}return 20 * CYCLE_UNIT / 2; } /* MVSR2.B Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_42c0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ MakeSR (); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | ((regs.sr & 0xff) & 0xffff); }} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } #endif #endif #ifdef PART_4 /* MVSR2.B (An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_42d0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); MakeSR (); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (srca, regs.sr & 0xff); }}return 8 * CYCLE_UNIT / 2; } #endif /* MVSR2.B (An)+ */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_42d8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += 2; MakeSR (); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (srca, regs.sr & 0xff); }}return 8 * CYCLE_UNIT / 2; } #endif /* MVSR2.B -(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_42e0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; m68k_areg (regs, srcreg) = srca; MakeSR (); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (srca, regs.sr & 0xff); }}return 10 * CYCLE_UNIT / 2; } #endif /* MVSR2.B (d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_42e8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); MakeSR (); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (srca, regs.sr & 0xff); }}return 12 * CYCLE_UNIT / 2; } #endif /* MVSR2.B (d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_42f0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); MakeSR (); regs.instruction_pc = m68k_getpci (); put_word_mmu (srca, regs.sr & 0xff); }}}return 12 * CYCLE_UNIT / 2; } #endif /* MVSR2.B (xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_42f8_31)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); MakeSR (); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (srca, regs.sr & 0xff); }}return 12 * CYCLE_UNIT / 2; } #endif /* MVSR2.B (xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_42f9_31)(uae_u32 opcode) { {{ uaecptr srca = get_ilong_mmu (2); MakeSR (); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_word_mmu (srca, regs.sr & 0xff); }}return 16 * CYCLE_UNIT / 2; } #endif /* NEG.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4400_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); {{uae_u32 dst = ((uae_s8)(0)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(dst)) < 0; SET_ZFLG (((uae_s8)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((dst) & 0xff); }}}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* NEG.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4410_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte_mmu (srca); {{uae_u32 dst = ((uae_s8)(0)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(dst)) < 0; SET_ZFLG (((uae_s8)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, dst); }}}}}}return 12 * CYCLE_UNIT / 2; } /* NEG.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4418_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte_mmu (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{uae_u32 dst = ((uae_s8)(0)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(dst)) < 0; SET_ZFLG (((uae_s8)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, dst); }}}}}}return 12 * CYCLE_UNIT / 2; } /* NEG.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_4420_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte_mmu (srca); m68k_areg (regs, srcreg) = srca; {{uae_u32 dst = ((uae_s8)(0)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(dst)) < 0; SET_ZFLG (((uae_s8)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, dst); }}}}}}return 14 * CYCLE_UNIT / 2; } /* NEG.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4428_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 src = get_byte_mmu (srca); {{uae_u32 dst = ((uae_s8)(0)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(dst)) < 0; SET_ZFLG (((uae_s8)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, dst); }}}}}}return 16 * CYCLE_UNIT / 2; } /* NEG.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4430_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s8 src = get_byte_mmu (srca); {{uae_u32 dst = ((uae_s8)(0)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(dst)) < 0; SET_ZFLG (((uae_s8)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, dst); }}}}}}}return 16 * CYCLE_UNIT / 2; } /* NEG.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4438_31)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 src = get_byte_mmu (srca); {{uae_u32 dst = ((uae_s8)(0)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(dst)) < 0; SET_ZFLG (((uae_s8)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, dst); }}}}}}return 16 * CYCLE_UNIT / 2; } /* NEG.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4439_31)(uae_u32 opcode) { {{ uaecptr srca = get_ilong_mmu (2); { uae_s8 src = get_byte_mmu (srca); {{uae_u32 dst = ((uae_s8)(0)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(dst)) < 0; SET_ZFLG (((uae_s8)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, dst); }}}}}}return 20 * CYCLE_UNIT / 2; } /* NEG.W Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4440_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); {{uae_u32 dst = ((uae_s16)(0)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(dst)) < 0; SET_ZFLG (((uae_s16)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | ((dst) & 0xffff); }}}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* NEG.W (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4450_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word_mmu (srca); {{uae_u32 dst = ((uae_s16)(0)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(dst)) < 0; SET_ZFLG (((uae_s16)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (srca, dst); }}}}}}return 12 * CYCLE_UNIT / 2; } /* NEG.W (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4458_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word_mmu (srca); m68k_areg (regs, srcreg) += 2; {{uae_u32 dst = ((uae_s16)(0)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(dst)) < 0; SET_ZFLG (((uae_s16)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (srca, dst); }}}}}}return 12 * CYCLE_UNIT / 2; } /* NEG.W -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_4460_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = get_word_mmu (srca); m68k_areg (regs, srcreg) = srca; {{uae_u32 dst = ((uae_s16)(0)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(dst)) < 0; SET_ZFLG (((uae_s16)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (srca, dst); }}}}}}return 14 * CYCLE_UNIT / 2; } /* NEG.W (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4468_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); {{uae_u32 dst = ((uae_s16)(0)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(dst)) < 0; SET_ZFLG (((uae_s16)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (srca, dst); }}}}}}return 16 * CYCLE_UNIT / 2; } /* NEG.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4470_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s16 src = get_word_mmu (srca); {{uae_u32 dst = ((uae_s16)(0)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(dst)) < 0; SET_ZFLG (((uae_s16)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); regs.instruction_pc = m68k_getpci (); put_word_mmu (srca, dst); }}}}}}}return 16 * CYCLE_UNIT / 2; } /* NEG.W (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4478_31)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); {{uae_u32 dst = ((uae_s16)(0)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(dst)) < 0; SET_ZFLG (((uae_s16)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (srca, dst); }}}}}}return 16 * CYCLE_UNIT / 2; } /* NEG.W (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4479_31)(uae_u32 opcode) { {{ uaecptr srca = get_ilong_mmu (2); { uae_s16 src = get_word_mmu (srca); {{uae_u32 dst = ((uae_s16)(0)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(dst)) < 0; SET_ZFLG (((uae_s16)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_word_mmu (srca, dst); }}}}}}return 20 * CYCLE_UNIT / 2; } /* NEG.L Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4480_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); {{uae_u32 dst = ((uae_s32)(0)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(dst)) < 0; SET_ZFLG (((uae_s32)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, srcreg) = (dst); }}}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* NEG.L (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4490_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long_mmu (srca); {{uae_u32 dst = ((uae_s32)(0)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(dst)) < 0; SET_ZFLG (((uae_s32)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_long_mmu (srca, dst); }}}}}}return 20 * CYCLE_UNIT / 2; } /* NEG.L (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4498_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long_mmu (srca); m68k_areg (regs, srcreg) += 4; {{uae_u32 dst = ((uae_s32)(0)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(dst)) < 0; SET_ZFLG (((uae_s32)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_long_mmu (srca, dst); }}}}}}return 20 * CYCLE_UNIT / 2; } /* NEG.L -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_44a0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = get_long_mmu (srca); m68k_areg (regs, srcreg) = srca; {{uae_u32 dst = ((uae_s32)(0)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(dst)) < 0; SET_ZFLG (((uae_s32)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_long_mmu (srca, dst); }}}}}}return 22 * CYCLE_UNIT / 2; } /* NEG.L (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_44a8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 src = get_long_mmu (srca); {{uae_u32 dst = ((uae_s32)(0)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(dst)) < 0; SET_ZFLG (((uae_s32)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_long_mmu (srca, dst); }}}}}}return 24 * CYCLE_UNIT / 2; } /* NEG.L (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_44b0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s32 src = get_long_mmu (srca); {{uae_u32 dst = ((uae_s32)(0)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(dst)) < 0; SET_ZFLG (((uae_s32)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); regs.instruction_pc = m68k_getpci (); put_long_mmu (srca, dst); }}}}}}}return 24 * CYCLE_UNIT / 2; } /* NEG.L (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_44b8_31)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 src = get_long_mmu (srca); {{uae_u32 dst = ((uae_s32)(0)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(dst)) < 0; SET_ZFLG (((uae_s32)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_long_mmu (srca, dst); }}}}}}return 24 * CYCLE_UNIT / 2; } /* NEG.L (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_44b9_31)(uae_u32 opcode) { {{ uaecptr srca = get_ilong_mmu (2); { uae_s32 src = get_long_mmu (srca); {{uae_u32 dst = ((uae_s32)(0)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(dst)) < 0; SET_ZFLG (((uae_s32)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_long_mmu (srca, dst); }}}}}}return 28 * CYCLE_UNIT / 2; } /* MV2SR.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_44c0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); }} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* MV2SR.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_44d0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word_mmu (srca); MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); }}} m68k_incpci (2); return 8 * CYCLE_UNIT / 2; } /* MV2SR.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_44d8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word_mmu (srca); m68k_areg (regs, srcreg) += 2; MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); }}} m68k_incpci (2); return 8 * CYCLE_UNIT / 2; } /* MV2SR.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_44e0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = get_word_mmu (srca); m68k_areg (regs, srcreg) = srca; MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); }}} m68k_incpci (2); return 10 * CYCLE_UNIT / 2; } /* MV2SR.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_44e8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); }}} m68k_incpci (4); return 12 * CYCLE_UNIT / 2; } /* MV2SR.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_44f0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s16 src = get_word_mmu (srca); MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); }}}}return 12 * CYCLE_UNIT / 2; } /* MV2SR.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_44f8_31)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); }}} m68k_incpci (4); return 12 * CYCLE_UNIT / 2; } /* MV2SR.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_44f9_31)(uae_u32 opcode) { {{ uaecptr srca = get_ilong_mmu (2); { uae_s16 src = get_word_mmu (srca); MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); }}} m68k_incpci (6); return 16 * CYCLE_UNIT / 2; } /* MV2SR.B (d16,PC) */ uae_u32 REGPARAM2 CPUFUNC(op_44fa_31)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); }}} m68k_incpci (4); return 12 * CYCLE_UNIT / 2; } /* MV2SR.B (d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_44fb_31)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; m68k_incpci (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_s16 src = get_word_mmu (srca); MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); }}}}return 12 * CYCLE_UNIT / 2; } /* MV2SR.B #.B */ uae_u32 REGPARAM2 CPUFUNC(op_44fc_31)(uae_u32 opcode) { {{ uae_s16 src = get_iword_mmu (2); MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); }} m68k_incpci (4); return 8 * CYCLE_UNIT / 2; } /* NOT.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4600_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(dst)) == 0); SET_NFLG (((uae_s8)(dst)) < 0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((dst) & 0xff); }}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* NOT.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4610_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte_mmu (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(dst)) == 0); SET_NFLG (((uae_s8)(dst)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, dst); }}}}return 12 * CYCLE_UNIT / 2; } /* NOT.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4618_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte_mmu (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(dst)) == 0); SET_NFLG (((uae_s8)(dst)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, dst); }}}}return 12 * CYCLE_UNIT / 2; } /* NOT.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_4620_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte_mmu (srca); m68k_areg (regs, srcreg) = srca; { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(dst)) == 0); SET_NFLG (((uae_s8)(dst)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, dst); }}}}return 14 * CYCLE_UNIT / 2; } /* NOT.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4628_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 src = get_byte_mmu (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(dst)) == 0); SET_NFLG (((uae_s8)(dst)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, dst); }}}}return 16 * CYCLE_UNIT / 2; } /* NOT.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4630_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s8 src = get_byte_mmu (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(dst)) == 0); SET_NFLG (((uae_s8)(dst)) < 0); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, dst); }}}}}return 16 * CYCLE_UNIT / 2; } /* NOT.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4638_31)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 src = get_byte_mmu (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(dst)) == 0); SET_NFLG (((uae_s8)(dst)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, dst); }}}}return 16 * CYCLE_UNIT / 2; } /* NOT.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4639_31)(uae_u32 opcode) { {{ uaecptr srca = get_ilong_mmu (2); { uae_s8 src = get_byte_mmu (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(dst)) == 0); SET_NFLG (((uae_s8)(dst)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, dst); }}}}return 20 * CYCLE_UNIT / 2; } /* NOT.W Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4640_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(dst)) == 0); SET_NFLG (((uae_s16)(dst)) < 0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | ((dst) & 0xffff); }}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* NOT.W (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4650_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word_mmu (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(dst)) == 0); SET_NFLG (((uae_s16)(dst)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (srca, dst); }}}}return 12 * CYCLE_UNIT / 2; } /* NOT.W (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4658_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word_mmu (srca); m68k_areg (regs, srcreg) += 2; { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(dst)) == 0); SET_NFLG (((uae_s16)(dst)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (srca, dst); }}}}return 12 * CYCLE_UNIT / 2; } /* NOT.W -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_4660_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = get_word_mmu (srca); m68k_areg (regs, srcreg) = srca; { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(dst)) == 0); SET_NFLG (((uae_s16)(dst)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (srca, dst); }}}}return 14 * CYCLE_UNIT / 2; } /* NOT.W (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4668_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(dst)) == 0); SET_NFLG (((uae_s16)(dst)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (srca, dst); }}}}return 16 * CYCLE_UNIT / 2; } /* NOT.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4670_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s16 src = get_word_mmu (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(dst)) == 0); SET_NFLG (((uae_s16)(dst)) < 0); regs.instruction_pc = m68k_getpci (); put_word_mmu (srca, dst); }}}}}return 16 * CYCLE_UNIT / 2; } /* NOT.W (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4678_31)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(dst)) == 0); SET_NFLG (((uae_s16)(dst)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (srca, dst); }}}}return 16 * CYCLE_UNIT / 2; } /* NOT.W (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4679_31)(uae_u32 opcode) { {{ uaecptr srca = get_ilong_mmu (2); { uae_s16 src = get_word_mmu (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(dst)) == 0); SET_NFLG (((uae_s16)(dst)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_word_mmu (srca, dst); }}}}return 20 * CYCLE_UNIT / 2; } /* NOT.L Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4680_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); m68k_dreg (regs, srcreg) = (dst); }}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* NOT.L (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4690_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long_mmu (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_long_mmu (srca, dst); }}}}return 20 * CYCLE_UNIT / 2; } /* NOT.L (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4698_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long_mmu (srca); m68k_areg (regs, srcreg) += 4; { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_long_mmu (srca, dst); }}}}return 20 * CYCLE_UNIT / 2; } /* NOT.L -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_46a0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = get_long_mmu (srca); m68k_areg (regs, srcreg) = srca; { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_long_mmu (srca, dst); }}}}return 22 * CYCLE_UNIT / 2; } /* NOT.L (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_46a8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 src = get_long_mmu (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_long_mmu (srca, dst); }}}}return 24 * CYCLE_UNIT / 2; } /* NOT.L (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_46b0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s32 src = get_long_mmu (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); regs.instruction_pc = m68k_getpci (); put_long_mmu (srca, dst); }}}}}return 24 * CYCLE_UNIT / 2; } /* NOT.L (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_46b8_31)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 src = get_long_mmu (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_long_mmu (srca, dst); }}}}return 24 * CYCLE_UNIT / 2; } /* NOT.L (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_46b9_31)(uae_u32 opcode) { {{ uaecptr srca = get_ilong_mmu (2); { uae_s32 src = get_long_mmu (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_long_mmu (srca, dst); }}}}return 28 * CYCLE_UNIT / 2; } /* MV2SR.W Dn */ uae_u32 REGPARAM2 CPUFUNC(op_46c0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel11640; } {{ uae_s16 src = m68k_dreg (regs, srcreg); regs.sr = src; MakeFromSR (); }}} m68k_incpci (2); endlabel11640: ; return 4 * CYCLE_UNIT / 2; } /* MV2SR.W (An) */ uae_u32 REGPARAM2 CPUFUNC(op_46d0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel11641; } {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word_mmu (srca); regs.sr = src; MakeFromSR (); }}}} m68k_incpci (2); endlabel11641: ; return 8 * CYCLE_UNIT / 2; } /* MV2SR.W (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_46d8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel11642; } {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word_mmu (srca); m68k_areg (regs, srcreg) += 2; regs.sr = src; MakeFromSR (); }}}} m68k_incpci (2); endlabel11642: ; return 8 * CYCLE_UNIT / 2; } /* MV2SR.W -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_46e0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel11643; } {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = get_word_mmu (srca); m68k_areg (regs, srcreg) = srca; regs.sr = src; MakeFromSR (); }}}} m68k_incpci (2); endlabel11643: ; return 10 * CYCLE_UNIT / 2; } /* MV2SR.W (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_46e8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel11644; } {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); regs.sr = src; MakeFromSR (); }}}} m68k_incpci (4); endlabel11644: ; return 12 * CYCLE_UNIT / 2; } /* MV2SR.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_46f0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel11645; } {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s16 src = get_word_mmu (srca); regs.sr = src; MakeFromSR (); }}}}}endlabel11645: ; return 12 * CYCLE_UNIT / 2; } /* MV2SR.W (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_46f8_31)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel11646; } {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); regs.sr = src; MakeFromSR (); }}}} m68k_incpci (4); endlabel11646: ; return 12 * CYCLE_UNIT / 2; } /* MV2SR.W (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_46f9_31)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel11647; } {{ uaecptr srca = get_ilong_mmu (2); { uae_s16 src = get_word_mmu (srca); regs.sr = src; MakeFromSR (); }}}} m68k_incpci (6); endlabel11647: ; return 16 * CYCLE_UNIT / 2; } /* MV2SR.W (d16,PC) */ uae_u32 REGPARAM2 CPUFUNC(op_46fa_31)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel11648; } {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); regs.sr = src; MakeFromSR (); }}}} m68k_incpci (4); endlabel11648: ; return 12 * CYCLE_UNIT / 2; } /* MV2SR.W (d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_46fb_31)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel11649; } {{ uaecptr tmppc; uaecptr srca; m68k_incpci (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_s16 src = get_word_mmu (srca); regs.sr = src; MakeFromSR (); }}}}}endlabel11649: ; return 12 * CYCLE_UNIT / 2; } /* MV2SR.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_46fc_31)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel11650; } {{ uae_s16 src = get_iword_mmu (2); regs.sr = src; MakeFromSR (); }}} m68k_incpci (4); endlabel11650: ; return 8 * CYCLE_UNIT / 2; } /* NBCD.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4800_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = - (src & 0xF0); uae_u16 newv; int cflg; if (newv_lo > 9) { newv_lo -= 6; } newv = newv_hi + newv_lo; cflg = (newv & 0x1F0) > 0x90; if (cflg) newv -= 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((newv) & 0xff); }}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* LINK.L An,#.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4808_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 offs = get_ilong_mmu (2); { uaecptr olda; olda = m68k_areg (regs, 7) - 4; m68k_areg (regs, 7) = olda; { uae_s32 src = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) = (m68k_areg(regs, 7)); m68k_areg(regs, 7) += offs; m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_long_mmu (olda, src); }}}}return 22 * CYCLE_UNIT / 2; } #endif /* NBCD.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4810_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte_mmu (srca); { uae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = - (src & 0xF0); uae_u16 newv; int cflg; if (newv_lo > 9) { newv_lo -= 6; } newv = newv_hi + newv_lo; cflg = (newv & 0x1F0) > 0x90; if (cflg) newv -= 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, newv); }}}}return 12 * CYCLE_UNIT / 2; } /* NBCD.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4818_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte_mmu (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = - (src & 0xF0); uae_u16 newv; int cflg; if (newv_lo > 9) { newv_lo -= 6; } newv = newv_hi + newv_lo; cflg = (newv & 0x1F0) > 0x90; if (cflg) newv -= 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, newv); }}}}return 12 * CYCLE_UNIT / 2; } /* NBCD.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_4820_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte_mmu (srca); m68k_areg (regs, srcreg) = srca; { uae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = - (src & 0xF0); uae_u16 newv; int cflg; if (newv_lo > 9) { newv_lo -= 6; } newv = newv_hi + newv_lo; cflg = (newv & 0x1F0) > 0x90; if (cflg) newv -= 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, newv); }}}}return 14 * CYCLE_UNIT / 2; } /* NBCD.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4828_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 src = get_byte_mmu (srca); { uae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = - (src & 0xF0); uae_u16 newv; int cflg; if (newv_lo > 9) { newv_lo -= 6; } newv = newv_hi + newv_lo; cflg = (newv & 0x1F0) > 0x90; if (cflg) newv -= 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, newv); }}}}return 16 * CYCLE_UNIT / 2; } /* NBCD.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4830_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s8 src = get_byte_mmu (srca); { uae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = - (src & 0xF0); uae_u16 newv; int cflg; if (newv_lo > 9) { newv_lo -= 6; } newv = newv_hi + newv_lo; cflg = (newv & 0x1F0) > 0x90; if (cflg) newv -= 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, newv); }}}}}return 16 * CYCLE_UNIT / 2; } /* NBCD.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4838_31)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 src = get_byte_mmu (srca); { uae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = - (src & 0xF0); uae_u16 newv; int cflg; if (newv_lo > 9) { newv_lo -= 6; } newv = newv_hi + newv_lo; cflg = (newv & 0x1F0) > 0x90; if (cflg) newv -= 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, newv); }}}}return 16 * CYCLE_UNIT / 2; } /* NBCD.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4839_31)(uae_u32 opcode) { {{ uaecptr srca = get_ilong_mmu (2); { uae_s8 src = get_byte_mmu (srca); { uae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = - (src & 0xF0); uae_u16 newv; int cflg; if (newv_lo > 9) { newv_lo -= 6; } newv = newv_hi + newv_lo; cflg = (newv & 0x1F0) > 0x90; if (cflg) newv -= 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, newv); }}}}return 20 * CYCLE_UNIT / 2; } /* SWAP.W Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4840_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_u32 dst = ((src >> 16)&0xFFFF) | ((src&0xFFFF)<<16); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); m68k_dreg (regs, srcreg) = (dst); }}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* BKPTQ.L # */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4848_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); { m68k_incpci (2); op_illg (opcode); }return 4 * CYCLE_UNIT / 2; } #endif /* PEA.L (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4850_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, 7) - 4; m68k_areg (regs, 7) = dsta; m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, srca); }}}return 12 * CYCLE_UNIT / 2; } /* PEA.L (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4868_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uaecptr dsta; dsta = m68k_areg (regs, 7) - 4; m68k_areg (regs, 7) = dsta; m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, srca); }}}return 16 * CYCLE_UNIT / 2; } /* PEA.L (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4870_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uaecptr dsta; dsta = m68k_areg (regs, 7) - 4; m68k_areg (regs, 7) = dsta; regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, srca); }}}}return 16 * CYCLE_UNIT / 2; } /* PEA.L (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4878_31)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); { uaecptr dsta; dsta = m68k_areg (regs, 7) - 4; m68k_areg (regs, 7) = dsta; m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, srca); }}}return 16 * CYCLE_UNIT / 2; } /* PEA.L (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4879_31)(uae_u32 opcode) { {{ uaecptr srca = get_ilong_mmu (2); { uaecptr dsta; dsta = m68k_areg (regs, 7) - 4; m68k_areg (regs, 7) = dsta; m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, srca); }}}return 20 * CYCLE_UNIT / 2; } /* PEA.L (d16,PC) */ uae_u32 REGPARAM2 CPUFUNC(op_487a_31)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword_mmu (2); { uaecptr dsta; dsta = m68k_areg (regs, 7) - 4; m68k_areg (regs, 7) = dsta; m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, srca); }}}return 16 * CYCLE_UNIT / 2; } /* PEA.L (d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_487b_31)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; m68k_incpci (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uaecptr dsta; dsta = m68k_areg (regs, 7) - 4; m68k_areg (regs, 7) = dsta; regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, srca); }}}}return 16 * CYCLE_UNIT / 2; } /* EXT.W Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4880_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_u16 dst = (uae_s16)(uae_s8)src; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(dst)) == 0); SET_NFLG (((uae_s16)(dst)) < 0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | ((dst) & 0xffff); }}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* MVMLE.W #.W,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_4890_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_iword_mmu (2); { uaecptr srca = m68k_areg (regs, dstreg); { uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; while (dmask) { put_word_mmu (srca, m68k_dreg (regs, movem_index1[dmask])); srca += 2; dmask = movem_next[dmask]; } while (amask) { put_word_mmu (srca, m68k_areg (regs, movem_index1[amask])); srca += 2; amask = movem_next[amask]; } }}} m68k_incpci (4); return 8 * CYCLE_UNIT / 2; } /* MVMLE.W #.W,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_48a0_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_iword_mmu (2); { uaecptr srca; srca = m68k_areg (regs, dstreg) - 0; { uae_u16 amask = mask & 0xff, dmask = (mask >> 8) & 0xff; while (amask) { srca -= 2; put_word_mmu (srca, m68k_areg (regs, movem_index2[amask])); amask = movem_next[amask]; } while (dmask) { srca -= 2; put_word_mmu (srca, m68k_dreg (regs, movem_index2[dmask])); dmask = movem_next[dmask]; } m68k_areg (regs, dstreg) = srca; }}} m68k_incpci (4); return 10 * CYCLE_UNIT / 2; } /* MVMLE.W #.W,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_48a8_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_iword_mmu (2); { uaecptr srca = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (4); { uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; while (dmask) { put_word_mmu (srca, m68k_dreg (regs, movem_index1[dmask])); srca += 2; dmask = movem_next[dmask]; } while (amask) { put_word_mmu (srca, m68k_areg (regs, movem_index1[amask])); srca += 2; amask = movem_next[amask]; } }}} m68k_incpci (6); return 12 * CYCLE_UNIT / 2; } /* MVMLE.W #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_48b0_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_iword_mmu (2); { uaecptr srca; m68k_incpci (4); { srca = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); { uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; while (dmask) { put_word_mmu (srca, m68k_dreg (regs, movem_index1[dmask])); srca += 2; dmask = movem_next[dmask]; } while (amask) { put_word_mmu (srca, m68k_areg (regs, movem_index1[amask])); srca += 2; amask = movem_next[amask]; } }}}}return 12 * CYCLE_UNIT / 2; } /* MVMLE.W #.W,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_48b8_31)(uae_u32 opcode) { { uae_u16 mask = get_iword_mmu (2); { uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (4); { uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; while (dmask) { put_word_mmu (srca, m68k_dreg (regs, movem_index1[dmask])); srca += 2; dmask = movem_next[dmask]; } while (amask) { put_word_mmu (srca, m68k_areg (regs, movem_index1[amask])); srca += 2; amask = movem_next[amask]; } }}} m68k_incpci (6); return 12 * CYCLE_UNIT / 2; } /* MVMLE.W #.W,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_48b9_31)(uae_u32 opcode) { { uae_u16 mask = get_iword_mmu (2); { uaecptr srca = get_ilong_mmu (4); { uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; while (dmask) { put_word_mmu (srca, m68k_dreg (regs, movem_index1[dmask])); srca += 2; dmask = movem_next[dmask]; } while (amask) { put_word_mmu (srca, m68k_areg (regs, movem_index1[amask])); srca += 2; amask = movem_next[amask]; } }}} m68k_incpci (8); return 16 * CYCLE_UNIT / 2; } /* EXT.L Dn */ uae_u32 REGPARAM2 CPUFUNC(op_48c0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_u32 dst = (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); m68k_dreg (regs, srcreg) = (dst); }}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* MVMLE.L #.W,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_48d0_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_iword_mmu (2); { uaecptr srca = m68k_areg (regs, dstreg); { uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; while (dmask) { put_long_mmu (srca, m68k_dreg (regs, movem_index1[dmask])); srca += 4; dmask = movem_next[dmask]; } while (amask) { put_long_mmu (srca, m68k_areg (regs, movem_index1[amask])); srca += 4; amask = movem_next[amask]; } }}} m68k_incpci (4); return 8 * CYCLE_UNIT / 2; } /* MVMLE.L #.W,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_48e0_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_iword_mmu (2); { uaecptr srca; srca = m68k_areg (regs, dstreg) - 0; { uae_u16 amask = mask & 0xff, dmask = (mask >> 8) & 0xff; while (amask) { srca -= 4; put_long_mmu (srca, m68k_areg (regs, movem_index2[amask])); amask = movem_next[amask]; } while (dmask) { srca -= 4; put_long_mmu (srca, m68k_dreg (regs, movem_index2[dmask])); dmask = movem_next[dmask]; } m68k_areg (regs, dstreg) = srca; }}} m68k_incpci (4); return 10 * CYCLE_UNIT / 2; } /* MVMLE.L #.W,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_48e8_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_iword_mmu (2); { uaecptr srca = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (4); { uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; while (dmask) { put_long_mmu (srca, m68k_dreg (regs, movem_index1[dmask])); srca += 4; dmask = movem_next[dmask]; } while (amask) { put_long_mmu (srca, m68k_areg (regs, movem_index1[amask])); srca += 4; amask = movem_next[amask]; } }}} m68k_incpci (6); return 12 * CYCLE_UNIT / 2; } /* MVMLE.L #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_48f0_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_iword_mmu (2); { uaecptr srca; m68k_incpci (4); { srca = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); { uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; while (dmask) { put_long_mmu (srca, m68k_dreg (regs, movem_index1[dmask])); srca += 4; dmask = movem_next[dmask]; } while (amask) { put_long_mmu (srca, m68k_areg (regs, movem_index1[amask])); srca += 4; amask = movem_next[amask]; } }}}}return 12 * CYCLE_UNIT / 2; } /* MVMLE.L #.W,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_48f8_31)(uae_u32 opcode) { { uae_u16 mask = get_iword_mmu (2); { uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (4); { uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; while (dmask) { put_long_mmu (srca, m68k_dreg (regs, movem_index1[dmask])); srca += 4; dmask = movem_next[dmask]; } while (amask) { put_long_mmu (srca, m68k_areg (regs, movem_index1[amask])); srca += 4; amask = movem_next[amask]; } }}} m68k_incpci (6); return 12 * CYCLE_UNIT / 2; } /* MVMLE.L #.W,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_48f9_31)(uae_u32 opcode) { { uae_u16 mask = get_iword_mmu (2); { uaecptr srca = get_ilong_mmu (4); { uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; while (dmask) { put_long_mmu (srca, m68k_dreg (regs, movem_index1[dmask])); srca += 4; dmask = movem_next[dmask]; } while (amask) { put_long_mmu (srca, m68k_areg (regs, movem_index1[amask])); srca += 4; amask = movem_next[amask]; } }}} m68k_incpci (8); return 16 * CYCLE_UNIT / 2; } /* EXT.B Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_49c0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_u32 dst = (uae_s32)(uae_s8)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); m68k_dreg (regs, srcreg) = (dst); }}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } #endif /* TST.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4a00_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* TST.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4a10_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte_mmu (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }}} m68k_incpci (2); return 8 * CYCLE_UNIT / 2; } /* TST.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4a18_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte_mmu (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }}} m68k_incpci (2); return 8 * CYCLE_UNIT / 2; } /* TST.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_4a20_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte_mmu (srca); m68k_areg (regs, srcreg) = srca; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }}} m68k_incpci (2); return 10 * CYCLE_UNIT / 2; } /* TST.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4a28_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 src = get_byte_mmu (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }}} m68k_incpci (4); return 12 * CYCLE_UNIT / 2; } /* TST.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4a30_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s8 src = get_byte_mmu (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }}}}return 12 * CYCLE_UNIT / 2; } /* TST.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4a38_31)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 src = get_byte_mmu (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }}} m68k_incpci (4); return 12 * CYCLE_UNIT / 2; } /* TST.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4a39_31)(uae_u32 opcode) { {{ uaecptr srca = get_ilong_mmu (2); { uae_s8 src = get_byte_mmu (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }}} m68k_incpci (6); return 16 * CYCLE_UNIT / 2; } /* TST.B (d16,PC) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4a3a_31)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 src = get_byte_mmu (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }}} m68k_incpci (4); return 12 * CYCLE_UNIT / 2; } #endif /* TST.B (d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4a3b_31)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; m68k_incpci (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_s8 src = get_byte_mmu (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }}}}return 12 * CYCLE_UNIT / 2; } #endif /* TST.B #.B */ uae_u32 REGPARAM2 CPUFUNC(op_4a3c_31)(uae_u32 opcode) { {{ uae_s8 src = get_ibyte_mmu (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }} m68k_incpci (4); return 12 * CYCLE_UNIT / 2; } /* TST.W Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4a40_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* TST.W An */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4a48_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_areg (regs, srcreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } #endif /* TST.W (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4a50_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word_mmu (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }}} m68k_incpci (2); return 8 * CYCLE_UNIT / 2; } /* TST.W (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4a58_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word_mmu (srca); m68k_areg (regs, srcreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }}} m68k_incpci (2); return 8 * CYCLE_UNIT / 2; } /* TST.W -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_4a60_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = get_word_mmu (srca); m68k_areg (regs, srcreg) = srca; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }}} m68k_incpci (2); return 10 * CYCLE_UNIT / 2; } /* TST.W (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4a68_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }}} m68k_incpci (4); return 12 * CYCLE_UNIT / 2; } /* TST.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4a70_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s16 src = get_word_mmu (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }}}}return 12 * CYCLE_UNIT / 2; } /* TST.W (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4a78_31)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }}} m68k_incpci (4); return 12 * CYCLE_UNIT / 2; } /* TST.W (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4a79_31)(uae_u32 opcode) { {{ uaecptr srca = get_ilong_mmu (2); { uae_s16 src = get_word_mmu (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }}} m68k_incpci (6); return 16 * CYCLE_UNIT / 2; } /* TST.W (d16,PC) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4a7a_31)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }}} m68k_incpci (4); return 12 * CYCLE_UNIT / 2; } #endif /* TST.W (d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4a7b_31)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; m68k_incpci (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_s16 src = get_word_mmu (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }}}}return 12 * CYCLE_UNIT / 2; } #endif /* TST.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_4a7c_31)(uae_u32 opcode) { {{ uae_s16 src = get_iword_mmu (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }} m68k_incpci (4); return 8 * CYCLE_UNIT / 2; } /* TST.L Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4a80_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* TST.L An */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4a88_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_areg (regs, srcreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } #endif /* TST.L (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4a90_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long_mmu (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }}} m68k_incpci (2); return 12 * CYCLE_UNIT / 2; } /* TST.L (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4a98_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long_mmu (srca); m68k_areg (regs, srcreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }}} m68k_incpci (2); return 12 * CYCLE_UNIT / 2; } /* TST.L -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_4aa0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = get_long_mmu (srca); m68k_areg (regs, srcreg) = srca; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }}} m68k_incpci (2); return 14 * CYCLE_UNIT / 2; } /* TST.L (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4aa8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 src = get_long_mmu (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }}} m68k_incpci (4); return 16 * CYCLE_UNIT / 2; } /* TST.L (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4ab0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s32 src = get_long_mmu (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }}}}return 16 * CYCLE_UNIT / 2; } /* TST.L (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4ab8_31)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 src = get_long_mmu (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }}} m68k_incpci (4); return 16 * CYCLE_UNIT / 2; } /* TST.L (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4ab9_31)(uae_u32 opcode) { {{ uaecptr srca = get_ilong_mmu (2); { uae_s32 src = get_long_mmu (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }}} m68k_incpci (6); return 20 * CYCLE_UNIT / 2; } /* TST.L (d16,PC) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4aba_31)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 src = get_long_mmu (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }}} m68k_incpci (4); return 16 * CYCLE_UNIT / 2; } #endif /* TST.L (d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4abb_31)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; m68k_incpci (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_s32 src = get_long_mmu (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }}}}return 16 * CYCLE_UNIT / 2; } #endif /* TST.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_4abc_31)(uae_u32 opcode) { {{ uae_s32 src = get_ilong_mmu (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }} m68k_incpci (6); return 12 * CYCLE_UNIT / 2; } /* TAS.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4ac0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); src |= 0x80; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((src) & 0xff); }} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* TAS.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4ad0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte_mmu (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); src |= 0x80; m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, src); }}}return 12 * CYCLE_UNIT / 2; } /* TAS.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4ad8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte_mmu (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); src |= 0x80; m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, src); }}}return 12 * CYCLE_UNIT / 2; } /* TAS.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_4ae0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte_mmu (srca); m68k_areg (regs, srcreg) = srca; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); src |= 0x80; m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, src); }}}return 14 * CYCLE_UNIT / 2; } /* TAS.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4ae8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 src = get_byte_mmu (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); src |= 0x80; m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, src); }}}return 16 * CYCLE_UNIT / 2; } /* TAS.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4af0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s8 src = get_byte_mmu (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); src |= 0x80; regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, src); }}}}return 16 * CYCLE_UNIT / 2; } /* TAS.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4af8_31)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 src = get_byte_mmu (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); src |= 0x80; m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, src); }}}return 16 * CYCLE_UNIT / 2; } /* TAS.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4af9_31)(uae_u32 opcode) { {{ uaecptr srca = get_ilong_mmu (2); { uae_s8 src = get_byte_mmu (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); src |= 0x80; m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, src); }}}return 20 * CYCLE_UNIT / 2; } /* MULL.L #.W,Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4c00_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword_mmu (2); { uae_s32 dst = m68k_dreg (regs, dstreg); m68k_incpci (4); m68k_mull(opcode, dst, extra); }}}return 8 * CYCLE_UNIT / 2; } #endif /* MULL.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4c10_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = get_long_mmu (dsta); m68k_incpci (4); m68k_mull(opcode, dst, extra); }}}}return 16 * CYCLE_UNIT / 2; } #endif /* MULL.L #.W,(An)+ */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4c18_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = get_long_mmu (dsta); m68k_areg (regs, dstreg) += 4; m68k_incpci (4); m68k_mull(opcode, dst, extra); }}}}return 16 * CYCLE_UNIT / 2; } #endif /* MULL.L #.W,-(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4c20_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = get_long_mmu (dsta); m68k_areg (regs, dstreg) = dsta; m68k_incpci (4); m68k_mull(opcode, dst, extra); }}}}return 18 * CYCLE_UNIT / 2; } #endif /* MULL.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4c28_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (4); { uae_s32 dst = get_long_mmu (dsta); m68k_incpci (6); m68k_mull(opcode, dst, extra); }}}}return 20 * CYCLE_UNIT / 2; } #endif /* MULL.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4c30_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta; m68k_incpci (4); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); { uae_s32 dst = get_long_mmu (dsta); m68k_mull(opcode, dst, extra); }}}}}return 20 * CYCLE_UNIT / 2; } #endif /* MULL.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4c38_31)(uae_u32 opcode) { {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (4); { uae_s32 dst = get_long_mmu (dsta); m68k_incpci (6); m68k_mull(opcode, dst, extra); }}}}return 20 * CYCLE_UNIT / 2; } #endif /* MULL.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4c39_31)(uae_u32 opcode) { {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta = get_ilong_mmu (4); { uae_s32 dst = get_long_mmu (dsta); m68k_incpci (8); m68k_mull(opcode, dst, extra); }}}}return 24 * CYCLE_UNIT / 2; } #endif /* MULL.L #.W,(d16,PC) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4c3a_31)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_iword_mmu (4); { uae_s32 dst = get_long_mmu (dsta); m68k_incpci (6); m68k_mull(opcode, dst, extra); }}}}return 20 * CYCLE_UNIT / 2; } #endif /* MULL.L #.W,(d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4c3b_31)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 extra = get_iword_mmu (2); { uaecptr tmppc; uaecptr dsta; m68k_incpci (4); { tmppc = m68k_getpc (); dsta = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_s32 dst = get_long_mmu (dsta); m68k_mull(opcode, dst, extra); }}}}}return 20 * CYCLE_UNIT / 2; } #endif /* MULL.L #.W,#.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4c3c_31)(uae_u32 opcode) { {{ uae_s16 extra = get_iword_mmu (2); { uae_s32 dst = get_ilong_mmu (4); m68k_incpci (8); m68k_mull(opcode, dst, extra); }}}return 16 * CYCLE_UNIT / 2; } #endif /* DIVL.L #.W,Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4c40_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword_mmu (2); { uae_s32 dst = m68k_dreg (regs, dstreg); m68k_incpci (4); m68k_divl(opcode, dst, extra); }}}return 8 * CYCLE_UNIT / 2; } #endif /* DIVL.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4c50_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = get_long_mmu (dsta); m68k_incpci (4); m68k_divl(opcode, dst, extra); }}}}return 16 * CYCLE_UNIT / 2; } #endif /* DIVL.L #.W,(An)+ */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4c58_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = get_long_mmu (dsta); m68k_areg (regs, dstreg) += 4; m68k_incpci (4); m68k_divl(opcode, dst, extra); }}}}return 16 * CYCLE_UNIT / 2; } #endif /* DIVL.L #.W,-(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4c60_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = get_long_mmu (dsta); m68k_areg (regs, dstreg) = dsta; m68k_incpci (4); m68k_divl(opcode, dst, extra); }}}}return 18 * CYCLE_UNIT / 2; } #endif /* DIVL.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4c68_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (4); { uae_s32 dst = get_long_mmu (dsta); m68k_incpci (6); m68k_divl(opcode, dst, extra); }}}}return 20 * CYCLE_UNIT / 2; } #endif /* DIVL.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4c70_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta; m68k_incpci (4); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); { uae_s32 dst = get_long_mmu (dsta); m68k_divl(opcode, dst, extra); }}}}}return 20 * CYCLE_UNIT / 2; } #endif /* DIVL.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4c78_31)(uae_u32 opcode) { {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (4); { uae_s32 dst = get_long_mmu (dsta); m68k_incpci (6); m68k_divl(opcode, dst, extra); }}}}return 20 * CYCLE_UNIT / 2; } #endif /* DIVL.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4c79_31)(uae_u32 opcode) { {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta = get_ilong_mmu (4); { uae_s32 dst = get_long_mmu (dsta); m68k_incpci (8); m68k_divl(opcode, dst, extra); }}}}return 24 * CYCLE_UNIT / 2; } #endif /* DIVL.L #.W,(d16,PC) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4c7a_31)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_iword_mmu (4); { uae_s32 dst = get_long_mmu (dsta); m68k_incpci (6); m68k_divl(opcode, dst, extra); }}}}return 20 * CYCLE_UNIT / 2; } #endif /* DIVL.L #.W,(d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4c7b_31)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 extra = get_iword_mmu (2); { uaecptr tmppc; uaecptr dsta; m68k_incpci (4); { tmppc = m68k_getpc (); dsta = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_s32 dst = get_long_mmu (dsta); m68k_divl(opcode, dst, extra); }}}}}return 20 * CYCLE_UNIT / 2; } #endif /* DIVL.L #.W,#.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4c7c_31)(uae_u32 opcode) { {{ uae_s16 extra = get_iword_mmu (2); { uae_s32 dst = get_ilong_mmu (4); m68k_incpci (8); m68k_divl(opcode, dst, extra); }}}return 16 * CYCLE_UNIT / 2; } #endif /* MVMEL.W #.W,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_4c90_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_iword_mmu (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca = m68k_areg (regs, dstreg); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = (uae_s32)(uae_s16)get_word_mmu (srca); srca += 2; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = (uae_s32)(uae_s16)get_word_mmu (srca); srca += 2; amask = movem_next[amask]; } }}} m68k_incpci (4); return 8 * CYCLE_UNIT / 2; } /* MVMEL.W #.W,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4c98_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_iword_mmu (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca = m68k_areg (regs, dstreg); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = (uae_s32)(uae_s16)get_word_mmu (srca); srca += 2; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = (uae_s32)(uae_s16)get_word_mmu (srca); srca += 2; amask = movem_next[amask]; } m68k_areg (regs, dstreg) = srca; }}} m68k_incpci (4); return 8 * CYCLE_UNIT / 2; } /* MVMEL.W #.W,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4ca8_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_iword_mmu (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (4); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = (uae_s32)(uae_s16)get_word_mmu (srca); srca += 2; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = (uae_s32)(uae_s16)get_word_mmu (srca); srca += 2; amask = movem_next[amask]; } }}} m68k_incpci (6); return 12 * CYCLE_UNIT / 2; } /* MVMEL.W #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4cb0_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_iword_mmu (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca; m68k_incpci (4); { srca = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = (uae_s32)(uae_s16)get_word_mmu (srca); srca += 2; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = (uae_s32)(uae_s16)get_word_mmu (srca); srca += 2; amask = movem_next[amask]; } }}}}return 12 * CYCLE_UNIT / 2; } /* MVMEL.W #.W,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4cb8_31)(uae_u32 opcode) { { uae_u16 mask = get_iword_mmu (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (4); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = (uae_s32)(uae_s16)get_word_mmu (srca); srca += 2; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = (uae_s32)(uae_s16)get_word_mmu (srca); srca += 2; amask = movem_next[amask]; } }}} m68k_incpci (6); return 12 * CYCLE_UNIT / 2; } /* MVMEL.W #.W,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4cb9_31)(uae_u32 opcode) { { uae_u16 mask = get_iword_mmu (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca = get_ilong_mmu (4); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = (uae_s32)(uae_s16)get_word_mmu (srca); srca += 2; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = (uae_s32)(uae_s16)get_word_mmu (srca); srca += 2; amask = movem_next[amask]; } }}} m68k_incpci (8); return 16 * CYCLE_UNIT / 2; } /* MVMEL.W #.W,(d16,PC) */ uae_u32 REGPARAM2 CPUFUNC(op_4cba_31)(uae_u32 opcode) { uae_u32 dstreg = 2; { uae_u16 mask = get_iword_mmu (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca = m68k_getpc () + 4; srca += (uae_s32)(uae_s16)get_iword_mmu (4); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = (uae_s32)(uae_s16)get_word_mmu (srca); srca += 2; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = (uae_s32)(uae_s16)get_word_mmu (srca); srca += 2; amask = movem_next[amask]; } }}} m68k_incpci (6); return 12 * CYCLE_UNIT / 2; } /* MVMEL.W #.W,(d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4cbb_31)(uae_u32 opcode) { uae_u32 dstreg = 3; { uae_u16 mask = get_iword_mmu (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr tmppc; uaecptr srca; m68k_incpci (4); { tmppc = m68k_getpc (); srca = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = (uae_s32)(uae_s16)get_word_mmu (srca); srca += 2; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = (uae_s32)(uae_s16)get_word_mmu (srca); srca += 2; amask = movem_next[amask]; } }}}}return 12 * CYCLE_UNIT / 2; } /* MVMEL.L #.W,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_4cd0_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_iword_mmu (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca = m68k_areg (regs, dstreg); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = get_long_mmu (srca); srca += 4; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = get_long_mmu (srca); srca += 4; amask = movem_next[amask]; } }}} m68k_incpci (4); return 8 * CYCLE_UNIT / 2; } /* MVMEL.L #.W,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4cd8_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_iword_mmu (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca = m68k_areg (regs, dstreg); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = get_long_mmu (srca); srca += 4; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = get_long_mmu (srca); srca += 4; amask = movem_next[amask]; } m68k_areg (regs, dstreg) = srca; }}} m68k_incpci (4); return 8 * CYCLE_UNIT / 2; } /* MVMEL.L #.W,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4ce8_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_iword_mmu (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (4); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = get_long_mmu (srca); srca += 4; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = get_long_mmu (srca); srca += 4; amask = movem_next[amask]; } }}} m68k_incpci (6); return 12 * CYCLE_UNIT / 2; } /* MVMEL.L #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4cf0_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_iword_mmu (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca; m68k_incpci (4); { srca = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = get_long_mmu (srca); srca += 4; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = get_long_mmu (srca); srca += 4; amask = movem_next[amask]; } }}}}return 12 * CYCLE_UNIT / 2; } /* MVMEL.L #.W,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4cf8_31)(uae_u32 opcode) { { uae_u16 mask = get_iword_mmu (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (4); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = get_long_mmu (srca); srca += 4; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = get_long_mmu (srca); srca += 4; amask = movem_next[amask]; } }}} m68k_incpci (6); return 12 * CYCLE_UNIT / 2; } /* MVMEL.L #.W,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4cf9_31)(uae_u32 opcode) { { uae_u16 mask = get_iword_mmu (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca = get_ilong_mmu (4); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = get_long_mmu (srca); srca += 4; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = get_long_mmu (srca); srca += 4; amask = movem_next[amask]; } }}} m68k_incpci (8); return 16 * CYCLE_UNIT / 2; } /* MVMEL.L #.W,(d16,PC) */ uae_u32 REGPARAM2 CPUFUNC(op_4cfa_31)(uae_u32 opcode) { uae_u32 dstreg = 2; { uae_u16 mask = get_iword_mmu (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca = m68k_getpc () + 4; srca += (uae_s32)(uae_s16)get_iword_mmu (4); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = get_long_mmu (srca); srca += 4; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = get_long_mmu (srca); srca += 4; amask = movem_next[amask]; } }}} m68k_incpci (6); return 12 * CYCLE_UNIT / 2; } /* MVMEL.L #.W,(d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4cfb_31)(uae_u32 opcode) { uae_u32 dstreg = 3; { uae_u16 mask = get_iword_mmu (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr tmppc; uaecptr srca; m68k_incpci (4); { tmppc = m68k_getpc (); srca = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = get_long_mmu (srca); srca += 4; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = get_long_mmu (srca); srca += 4; amask = movem_next[amask]; } }}}}return 12 * CYCLE_UNIT / 2; } /* TRAPQ.L # */ uae_u32 REGPARAM2 CPUFUNC(op_4e40_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 15); {{ uae_u32 src = srcreg; m68k_incpci (2); regs.instruction_pc = m68k_getpci (); Exception (src + 32); }}return 4 * CYCLE_UNIT / 2; } /* LINK.W An,#.W */ uae_u32 REGPARAM2 CPUFUNC(op_4e50_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 offs = get_iword_mmu (2); { uaecptr olda; olda = m68k_areg (regs, 7) - 4; m68k_areg (regs, 7) = olda; { uae_s32 src = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) = (m68k_areg(regs, 7)); m68k_areg(regs, 7) += offs; m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_long_mmu (olda, src); }}}}return 18 * CYCLE_UNIT / 2; } /* UNLK.L An */ uae_u32 REGPARAM2 CPUFUNC(op_4e58_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_areg (regs, srcreg); uae_s32 old = get_long_mmu (src); m68k_areg (regs, 7) = src + 4; m68k_areg (regs, srcreg) = old; }} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* MVR2USP.L An */ uae_u32 REGPARAM2 CPUFUNC(op_4e60_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel11768; } {{ uae_s32 src = m68k_areg (regs, srcreg); regs.usp = src; }}} m68k_incpci (2); endlabel11768: ; return 4 * CYCLE_UNIT / 2; } /* MVUSP2R.L An */ uae_u32 REGPARAM2 CPUFUNC(op_4e68_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel11769; } {{ m68k_areg (regs, srcreg) = (regs.usp); }}} m68k_incpci (2); endlabel11769: ; return 4 * CYCLE_UNIT / 2; } /* RESET.L */ uae_u32 REGPARAM2 CPUFUNC(op_4e70_31)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel11770; } { cpureset (); m68k_incpci (2); }}endlabel11770: ; return 4 * CYCLE_UNIT / 2; } /* NOP.L */ uae_u32 REGPARAM2 CPUFUNC(op_4e71_31)(uae_u32 opcode) { {} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* STOP.L #.W */ uae_u32 REGPARAM2 CPUFUNC(op_4e72_31)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel11772; } {{ uae_s16 src = get_iword_mmu (2); regs.sr = src; MakeFromSR (); m68k_setstopped (); m68k_incpci (4); }}}endlabel11772: ; return 8 * CYCLE_UNIT / 2; } /* RTE.L */ uae_u32 REGPARAM2 CPUFUNC(op_4e73_31)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel11773; } { uae_u16 newsr; uae_u32 newpc; for (;;) { uaecptr a = m68k_areg (regs, 7); uae_s16 sr = get_word_mmu (a); uae_s32 pc = get_long_mmu (a + 2); uae_s16 format = get_word_mmu (a + 2 + 4); int frame = format >> 12; int offset = 8; newsr = sr; newpc = pc; if (frame == 0x0) { m68k_areg (regs, 7) += offset; break; } else if (frame == 0x1) { m68k_areg (regs, 7) += offset; } else if (frame == 0x2) { m68k_areg (regs, 7) += offset + 4; break; } else if (frame == 0x4) { m68k_areg (regs, 7) += offset + 8; break; } else if (frame == 0x7) { m68k_do_rte_mmu (a); m68k_areg (regs, 7) += offset + 52; break; } else if (frame == 0x8) { m68k_areg (regs, 7) += offset + 50; break; } else if (frame == 0x9) { m68k_areg (regs, 7) += offset + 12; break; } else if (frame == 0xa) { m68k_areg (regs, 7) += offset + 24; break; } else if (frame == 0xb) { m68k_areg (regs, 7) += offset + 84; break; } else { m68k_areg (regs, 7) += offset; Exception (14); goto endlabel11773; } regs.sr = newsr; MakeFromSR (); } regs.sr = newsr; MakeFromSR (); if (newpc & 1) { exception3i (0x4E73, newpc); goto endlabel11773; } m68k_setpc (newpc); ipl_fetch (); }}endlabel11773: ; return 4 * CYCLE_UNIT / 2; } /* RTD.L #.W */ uae_u32 REGPARAM2 CPUFUNC(op_4e74_31)(uae_u32 opcode) { {{ uae_s16 offs = get_iword_mmu (2); { uaecptr pca = m68k_areg (regs, 7); { uae_s32 pc = get_long_mmu (pca); m68k_areg (regs, 7) += 4; m68k_areg(regs, 7) += offs; if (pc & 1) { exception3i (0x4E74, pc); goto endlabel11774; } m68k_setpc_mmu (pc); }}}}endlabel11774: ; return 16 * CYCLE_UNIT / 2; } /* RTS.L */ uae_u32 REGPARAM2 CPUFUNC(op_4e75_31)(uae_u32 opcode) { { uaecptr pc = m68k_getpc (); m68k_do_rts_mmu (); if (m68k_getpc () & 1) { uaecptr faultpc = m68k_getpc (); m68k_setpc (pc); exception3i (0x4E75, faultpc); } }return 4 * CYCLE_UNIT / 2; } /* TRAPV.L */ uae_u32 REGPARAM2 CPUFUNC(op_4e76_31)(uae_u32 opcode) { { m68k_incpci (2); if (GET_VFLG ()) { Exception (7); goto endlabel11776; } }endlabel11776: ; return 4 * CYCLE_UNIT / 2; } /* RTR.L */ uae_u32 REGPARAM2 CPUFUNC(op_4e77_31)(uae_u32 opcode) { { uaecptr oldpc = m68k_getpc (); MakeSR (); { uaecptr sra = m68k_areg (regs, 7); { uae_s16 sr = get_word_mmu (sra); mmufixup[0].reg = 7; mmufixup[0].value = m68k_areg (regs, 7); m68k_areg (regs, 7) += 2; { uaecptr pca = m68k_areg (regs, 7); { uae_s32 pc = get_long_mmu (pca); m68k_areg (regs, 7) += 4; mmufixup[0].reg = -1; regs.sr &= 0xFF00; sr &= 0xFF; regs.sr |= sr; m68k_setpc_mmu (pc); MakeFromSR (); if (m68k_getpc () & 1) { uaecptr faultpc = m68k_getpc (); m68k_setpc (oldpc); exception3i (0x4E77, faultpc); } }}}}}return 16 * CYCLE_UNIT / 2; } /* MOVEC2.L #.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4e7a_31)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel11778; } {{ uae_s16 src = get_iword_mmu (2); { int regno = (src >> 12) & 15; uae_u32 *regp = regs.regs + regno; if (! m68k_movec2(src & 0xFFF, regp)) goto endlabel11778; }}}} m68k_incpci (4); endlabel11778: ; return 8 * CYCLE_UNIT / 2; } #endif /* MOVE2C.L #.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4e7b_31)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel11779; } {{ uae_s16 src = get_iword_mmu (2); { int regno = (src >> 12) & 15; uae_u32 *regp = regs.regs + regno; if (! m68k_move2c(src & 0xFFF, regp)) goto endlabel11779; }}}} m68k_incpci (4); endlabel11779: ; return 8 * CYCLE_UNIT / 2; } #endif /* JSR.L (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4e90_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uaecptr oldpc = m68k_getpc () + 2; if (srca & 1) { exception3i (opcode, srca); goto endlabel11780; } put_long_mmu (m68k_areg (regs, 7) - 4, oldpc); m68k_areg (regs, 7) -= 4; m68k_setpc_mmu (srca); }}}endlabel11780: ; return 4 * CYCLE_UNIT / 2; } /* JSR.L (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4ea8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uaecptr oldpc = m68k_getpc () + 4; if (srca & 1) { exception3i (opcode, srca); goto endlabel11781; } put_long_mmu (m68k_areg (regs, 7) - 4, oldpc); m68k_areg (regs, 7) -= 4; m68k_setpc_mmu (srca); }}}endlabel11781: ; return 8 * CYCLE_UNIT / 2; } /* JSR.L (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4eb0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uaecptr oldpc = m68k_getpc () + 0; if (srca & 1) { exception3i (opcode, srca); goto endlabel11782; } put_long_mmu (m68k_areg (regs, 7) - 4, oldpc); m68k_areg (regs, 7) -= 4; m68k_setpc_mmu (srca); }}}}endlabel11782: ; return 8 * CYCLE_UNIT / 2; } /* JSR.L (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4eb8_31)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); { uaecptr oldpc = m68k_getpc () + 4; if (srca & 1) { exception3i (opcode, srca); goto endlabel11783; } put_long_mmu (m68k_areg (regs, 7) - 4, oldpc); m68k_areg (regs, 7) -= 4; m68k_setpc_mmu (srca); }}}endlabel11783: ; return 8 * CYCLE_UNIT / 2; } /* JSR.L (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4eb9_31)(uae_u32 opcode) { {{ uaecptr srca = get_ilong_mmu (2); { uaecptr oldpc = m68k_getpc () + 6; if (srca & 1) { exception3i (opcode, srca); goto endlabel11784; } put_long_mmu (m68k_areg (regs, 7) - 4, oldpc); m68k_areg (regs, 7) -= 4; m68k_setpc_mmu (srca); }}}endlabel11784: ; return 12 * CYCLE_UNIT / 2; } /* JSR.L (d16,PC) */ uae_u32 REGPARAM2 CPUFUNC(op_4eba_31)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword_mmu (2); { uaecptr oldpc = m68k_getpc () + 4; if (srca & 1) { exception3i (opcode, srca); goto endlabel11785; } put_long_mmu (m68k_areg (regs, 7) - 4, oldpc); m68k_areg (regs, 7) -= 4; m68k_setpc_mmu (srca); }}}endlabel11785: ; return 8 * CYCLE_UNIT / 2; } /* JSR.L (d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4ebb_31)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; m68k_incpci (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uaecptr oldpc = m68k_getpc () + 0; if (srca & 1) { exception3i (opcode, srca); goto endlabel11786; } put_long_mmu (m68k_areg (regs, 7) - 4, oldpc); m68k_areg (regs, 7) -= 4; m68k_setpc_mmu (srca); }}}}endlabel11786: ; return 8 * CYCLE_UNIT / 2; } /* JMP.L (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4ed0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3i (opcode, srca); goto endlabel11787; } m68k_setpc_mmu (srca); }}endlabel11787: ; return 4 * CYCLE_UNIT / 2; } /* JMP.L (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4ee8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); if (srca & 1) { exception3i (opcode, srca); goto endlabel11788; } m68k_setpc_mmu (srca); }}endlabel11788: ; return 8 * CYCLE_UNIT / 2; } /* JMP.L (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4ef0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); if (srca & 1) { exception3i (opcode, srca); goto endlabel11789; } m68k_setpc_mmu (srca); }}}endlabel11789: ; return 8 * CYCLE_UNIT / 2; } /* JMP.L (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4ef8_31)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); if (srca & 1) { exception3i (opcode, srca); goto endlabel11790; } m68k_setpc_mmu (srca); }}endlabel11790: ; return 8 * CYCLE_UNIT / 2; } /* JMP.L (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4ef9_31)(uae_u32 opcode) { {{ uaecptr srca = get_ilong_mmu (2); if (srca & 1) { exception3i (opcode, srca); goto endlabel11791; } m68k_setpc_mmu (srca); }}endlabel11791: ; return 12 * CYCLE_UNIT / 2; } /* JMP.L (d16,PC) */ uae_u32 REGPARAM2 CPUFUNC(op_4efa_31)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword_mmu (2); if (srca & 1) { exception3i (opcode, srca); goto endlabel11792; } m68k_setpc_mmu (srca); }}endlabel11792: ; return 8 * CYCLE_UNIT / 2; } /* JMP.L (d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4efb_31)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; m68k_incpci (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); if (srca & 1) { exception3i (opcode, srca); goto endlabel11793; } m68k_setpc_mmu (srca); }}}endlabel11793: ; return 8 * CYCLE_UNIT / 2; } /* ADDQ.B #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_5000_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* ADDQ.B #,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_5010_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte_mmu (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, newv); }}}}}}}return 12 * CYCLE_UNIT / 2; } /* ADDQ.B #,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_5018_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte_mmu (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, newv); }}}}}}}return 12 * CYCLE_UNIT / 2; } /* ADDQ.B #,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_5020_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = get_byte_mmu (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, newv); }}}}}}}return 14 * CYCLE_UNIT / 2; } /* ADDQ.B #,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_5028_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 dst = get_byte_mmu (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, newv); }}}}}}}return 16 * CYCLE_UNIT / 2; } /* ADDQ.B #,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_5030_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; m68k_incpci (2); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); { uae_s8 dst = get_byte_mmu (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, newv); }}}}}}}}return 16 * CYCLE_UNIT / 2; } /* ADDQ.B #,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_5038_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 dst = get_byte_mmu (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, newv); }}}}}}}return 16 * CYCLE_UNIT / 2; } /* ADDQ.B #,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_5039_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = get_ilong_mmu (2); { uae_s8 dst = get_byte_mmu (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, newv); }}}}}}}return 20 * CYCLE_UNIT / 2; } /* ADDQ.W #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_5040_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* ADDAQ.W #,An */ uae_u32 REGPARAM2 CPUFUNC(op_5048_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* ADDQ.W #,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_5050_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = get_word_mmu (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, newv); }}}}}}}return 12 * CYCLE_UNIT / 2; } /* ADDQ.W #,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_5058_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = get_word_mmu (dsta); m68k_areg (regs, dstreg) += 2; {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, newv); }}}}}}}return 12 * CYCLE_UNIT / 2; } /* ADDQ.W #,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_5060_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = get_word_mmu (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, newv); }}}}}}}return 14 * CYCLE_UNIT / 2; } /* ADDQ.W #,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_5068_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 dst = get_word_mmu (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, newv); }}}}}}}return 16 * CYCLE_UNIT / 2; } /* ADDQ.W #,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_5070_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; m68k_incpci (2); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); { uae_s16 dst = get_word_mmu (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, newv); }}}}}}}}return 16 * CYCLE_UNIT / 2; } #endif #ifdef PART_5 /* ADDQ.W #,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_5078_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 dst = get_word_mmu (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, newv); }}}}}}}return 16 * CYCLE_UNIT / 2; } /* ADDQ.W #,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_5079_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = get_ilong_mmu (2); { uae_s16 dst = get_word_mmu (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, newv); }}}}}}}return 20 * CYCLE_UNIT / 2; } /* ADDQ.L #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_5080_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* ADDAQ.L #,An */ uae_u32 REGPARAM2 CPUFUNC(op_5088_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* ADDQ.L #,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_5090_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = get_long_mmu (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, newv); }}}}}}}return 20 * CYCLE_UNIT / 2; } /* ADDQ.L #,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_5098_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = get_long_mmu (dsta); m68k_areg (regs, dstreg) += 4; {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, newv); }}}}}}}return 20 * CYCLE_UNIT / 2; } /* ADDQ.L #,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_50a0_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = get_long_mmu (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, newv); }}}}}}}return 22 * CYCLE_UNIT / 2; } /* ADDQ.L #,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_50a8_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 dst = get_long_mmu (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, newv); }}}}}}}return 24 * CYCLE_UNIT / 2; } /* ADDQ.L #,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_50b0_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; m68k_incpci (2); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); { uae_s32 dst = get_long_mmu (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, newv); }}}}}}}}return 24 * CYCLE_UNIT / 2; } /* ADDQ.L #,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_50b8_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 dst = get_long_mmu (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, newv); }}}}}}}return 24 * CYCLE_UNIT / 2; } /* ADDQ.L #,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_50b9_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = get_ilong_mmu (2); { uae_s32 dst = get_long_mmu (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, newv); }}}}}}}return 28 * CYCLE_UNIT / 2; } /* Scc.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_50c0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (0) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* DBcc.W Dn,#.W */ uae_u32 REGPARAM2 CPUFUNC(op_50c8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_iword_mmu (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (0)) { m68k_incpci ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel11821; } return 12 * CYCLE_UNIT / 2; } } else { } m68k_setpc_mmu (oldpc + 4); }}}endlabel11821: ; return 12 * CYCLE_UNIT / 2; } /* Scc.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_50d0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (0) ? 0xff : 0; m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 8 * CYCLE_UNIT / 2; } /* Scc.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_50d8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (0) ? 0xff : 0; m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 8 * CYCLE_UNIT / 2; } /* Scc.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_50e0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (0) ? 0xff : 0; m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 10 * CYCLE_UNIT / 2; } /* Scc.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_50e8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); {{ int val = cctrue (0) ? 0xff : 0; m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_50f0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); {{ int val = cctrue (0) ? 0xff : 0; regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_50f8_31)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); {{ int val = cctrue (0) ? 0xff : 0; m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_50f9_31)(uae_u32 opcode) { {{ uaecptr srca = get_ilong_mmu (2); {{ int val = cctrue (0) ? 0xff : 0; m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 16 * CYCLE_UNIT / 2; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_50fa_31)(uae_u32 opcode) { {{ uae_s16 dummy = get_iword_mmu (2); if (cctrue (0)) { Exception (7); goto endlabel11829; } }} m68k_incpci (4); endlabel11829: ; return 8 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_50fb_31)(uae_u32 opcode) { {{ uae_s32 dummy = get_ilong_mmu (2); if (cctrue (0)) { Exception (7); goto endlabel11830; } }} m68k_incpci (6); endlabel11830: ; return 12 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_50fc_31)(uae_u32 opcode) { { if (cctrue (0)) { Exception (7); goto endlabel11831; } } m68k_incpci (2); endlabel11831: ; return 4 * CYCLE_UNIT / 2; } #endif /* SUBQ.B #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_5100_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* SUBQ.B #,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_5110_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte_mmu (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, newv); }}}}}}}return 12 * CYCLE_UNIT / 2; } /* SUBQ.B #,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_5118_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte_mmu (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, newv); }}}}}}}return 12 * CYCLE_UNIT / 2; } /* SUBQ.B #,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_5120_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = get_byte_mmu (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, newv); }}}}}}}return 14 * CYCLE_UNIT / 2; } /* SUBQ.B #,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_5128_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 dst = get_byte_mmu (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, newv); }}}}}}}return 16 * CYCLE_UNIT / 2; } /* SUBQ.B #,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_5130_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; m68k_incpci (2); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); { uae_s8 dst = get_byte_mmu (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, newv); }}}}}}}}return 16 * CYCLE_UNIT / 2; } /* SUBQ.B #,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_5138_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 dst = get_byte_mmu (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, newv); }}}}}}}return 16 * CYCLE_UNIT / 2; } /* SUBQ.B #,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_5139_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = get_ilong_mmu (2); { uae_s8 dst = get_byte_mmu (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, newv); }}}}}}}return 20 * CYCLE_UNIT / 2; } /* SUBQ.W #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_5140_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* SUBAQ.W #,An */ uae_u32 REGPARAM2 CPUFUNC(op_5148_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* SUBQ.W #,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_5150_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = get_word_mmu (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, newv); }}}}}}}return 12 * CYCLE_UNIT / 2; } /* SUBQ.W #,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_5158_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = get_word_mmu (dsta); m68k_areg (regs, dstreg) += 2; {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, newv); }}}}}}}return 12 * CYCLE_UNIT / 2; } /* SUBQ.W #,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_5160_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = get_word_mmu (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, newv); }}}}}}}return 14 * CYCLE_UNIT / 2; } /* SUBQ.W #,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_5168_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 dst = get_word_mmu (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, newv); }}}}}}}return 16 * CYCLE_UNIT / 2; } /* SUBQ.W #,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_5170_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; m68k_incpci (2); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); { uae_s16 dst = get_word_mmu (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, newv); }}}}}}}}return 16 * CYCLE_UNIT / 2; } /* SUBQ.W #,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_5178_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 dst = get_word_mmu (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, newv); }}}}}}}return 16 * CYCLE_UNIT / 2; } /* SUBQ.W #,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_5179_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = get_ilong_mmu (2); { uae_s16 dst = get_word_mmu (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, newv); }}}}}}}return 20 * CYCLE_UNIT / 2; } /* SUBQ.L #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_5180_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* SUBAQ.L #,An */ uae_u32 REGPARAM2 CPUFUNC(op_5188_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* SUBQ.L #,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_5190_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = get_long_mmu (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, newv); }}}}}}}return 20 * CYCLE_UNIT / 2; } /* SUBQ.L #,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_5198_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = get_long_mmu (dsta); m68k_areg (regs, dstreg) += 4; {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, newv); }}}}}}}return 20 * CYCLE_UNIT / 2; } /* SUBQ.L #,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_51a0_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = get_long_mmu (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, newv); }}}}}}}return 22 * CYCLE_UNIT / 2; } /* SUBQ.L #,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_51a8_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 dst = get_long_mmu (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, newv); }}}}}}}return 24 * CYCLE_UNIT / 2; } /* SUBQ.L #,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_51b0_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; m68k_incpci (2); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); { uae_s32 dst = get_long_mmu (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, newv); }}}}}}}}return 24 * CYCLE_UNIT / 2; } /* SUBQ.L #,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_51b8_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 dst = get_long_mmu (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, newv); }}}}}}}return 24 * CYCLE_UNIT / 2; } /* SUBQ.L #,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_51b9_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = get_ilong_mmu (2); { uae_s32 dst = get_long_mmu (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, newv); }}}}}}}return 28 * CYCLE_UNIT / 2; } /* Scc.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_51c0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (1) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* DBcc.W Dn,#.W */ uae_u32 REGPARAM2 CPUFUNC(op_51c8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_iword_mmu (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (1)) { m68k_incpci ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel11859; } return 12 * CYCLE_UNIT / 2; } } else { } m68k_setpc_mmu (oldpc + 4); }}}endlabel11859: ; return 12 * CYCLE_UNIT / 2; } /* Scc.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_51d0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (1) ? 0xff : 0; m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 8 * CYCLE_UNIT / 2; } /* Scc.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_51d8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (1) ? 0xff : 0; m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 8 * CYCLE_UNIT / 2; } /* Scc.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_51e0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (1) ? 0xff : 0; m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 10 * CYCLE_UNIT / 2; } /* Scc.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_51e8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); {{ int val = cctrue (1) ? 0xff : 0; m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_51f0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); {{ int val = cctrue (1) ? 0xff : 0; regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_51f8_31)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); {{ int val = cctrue (1) ? 0xff : 0; m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_51f9_31)(uae_u32 opcode) { {{ uaecptr srca = get_ilong_mmu (2); {{ int val = cctrue (1) ? 0xff : 0; m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 16 * CYCLE_UNIT / 2; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_51fa_31)(uae_u32 opcode) { {{ uae_s16 dummy = get_iword_mmu (2); if (cctrue (1)) { Exception (7); goto endlabel11867; } }} m68k_incpci (4); endlabel11867: ; return 8 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_51fb_31)(uae_u32 opcode) { {{ uae_s32 dummy = get_ilong_mmu (2); if (cctrue (1)) { Exception (7); goto endlabel11868; } }} m68k_incpci (6); endlabel11868: ; return 12 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_51fc_31)(uae_u32 opcode) { { if (cctrue (1)) { Exception (7); goto endlabel11869; } } m68k_incpci (2); endlabel11869: ; return 4 * CYCLE_UNIT / 2; } #endif /* Scc.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_52c0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (2) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* DBcc.W Dn,#.W */ uae_u32 REGPARAM2 CPUFUNC(op_52c8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_iword_mmu (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (2)) { m68k_incpci ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel11871; } return 12 * CYCLE_UNIT / 2; } } else { } m68k_setpc_mmu (oldpc + 4); }}}endlabel11871: ; return 12 * CYCLE_UNIT / 2; } /* Scc.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_52d0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (2) ? 0xff : 0; m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 8 * CYCLE_UNIT / 2; } /* Scc.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_52d8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (2) ? 0xff : 0; m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 8 * CYCLE_UNIT / 2; } /* Scc.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_52e0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (2) ? 0xff : 0; m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 10 * CYCLE_UNIT / 2; } /* Scc.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_52e8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); {{ int val = cctrue (2) ? 0xff : 0; m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_52f0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); {{ int val = cctrue (2) ? 0xff : 0; regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_52f8_31)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); {{ int val = cctrue (2) ? 0xff : 0; m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_52f9_31)(uae_u32 opcode) { {{ uaecptr srca = get_ilong_mmu (2); {{ int val = cctrue (2) ? 0xff : 0; m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 16 * CYCLE_UNIT / 2; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_52fa_31)(uae_u32 opcode) { {{ uae_s16 dummy = get_iword_mmu (2); if (cctrue (2)) { Exception (7); goto endlabel11879; } }} m68k_incpci (4); endlabel11879: ; return 8 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_52fb_31)(uae_u32 opcode) { {{ uae_s32 dummy = get_ilong_mmu (2); if (cctrue (2)) { Exception (7); goto endlabel11880; } }} m68k_incpci (6); endlabel11880: ; return 12 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_52fc_31)(uae_u32 opcode) { { if (cctrue (2)) { Exception (7); goto endlabel11881; } } m68k_incpci (2); endlabel11881: ; return 4 * CYCLE_UNIT / 2; } #endif /* Scc.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_53c0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (3) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* DBcc.W Dn,#.W */ uae_u32 REGPARAM2 CPUFUNC(op_53c8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_iword_mmu (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (3)) { m68k_incpci ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel11883; } return 12 * CYCLE_UNIT / 2; } } else { } m68k_setpc_mmu (oldpc + 4); }}}endlabel11883: ; return 12 * CYCLE_UNIT / 2; } /* Scc.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_53d0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (3) ? 0xff : 0; m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 8 * CYCLE_UNIT / 2; } /* Scc.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_53d8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (3) ? 0xff : 0; m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 8 * CYCLE_UNIT / 2; } /* Scc.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_53e0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (3) ? 0xff : 0; m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 10 * CYCLE_UNIT / 2; } /* Scc.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_53e8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); {{ int val = cctrue (3) ? 0xff : 0; m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_53f0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); {{ int val = cctrue (3) ? 0xff : 0; regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_53f8_31)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); {{ int val = cctrue (3) ? 0xff : 0; m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_53f9_31)(uae_u32 opcode) { {{ uaecptr srca = get_ilong_mmu (2); {{ int val = cctrue (3) ? 0xff : 0; m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 16 * CYCLE_UNIT / 2; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_53fa_31)(uae_u32 opcode) { {{ uae_s16 dummy = get_iword_mmu (2); if (cctrue (3)) { Exception (7); goto endlabel11891; } }} m68k_incpci (4); endlabel11891: ; return 8 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_53fb_31)(uae_u32 opcode) { {{ uae_s32 dummy = get_ilong_mmu (2); if (cctrue (3)) { Exception (7); goto endlabel11892; } }} m68k_incpci (6); endlabel11892: ; return 12 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_53fc_31)(uae_u32 opcode) { { if (cctrue (3)) { Exception (7); goto endlabel11893; } } m68k_incpci (2); endlabel11893: ; return 4 * CYCLE_UNIT / 2; } #endif /* Scc.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_54c0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (4) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* DBcc.W Dn,#.W */ uae_u32 REGPARAM2 CPUFUNC(op_54c8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_iword_mmu (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (4)) { m68k_incpci ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel11895; } return 12 * CYCLE_UNIT / 2; } } else { } m68k_setpc_mmu (oldpc + 4); }}}endlabel11895: ; return 12 * CYCLE_UNIT / 2; } /* Scc.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_54d0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (4) ? 0xff : 0; m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 8 * CYCLE_UNIT / 2; } /* Scc.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_54d8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (4) ? 0xff : 0; m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 8 * CYCLE_UNIT / 2; } /* Scc.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_54e0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (4) ? 0xff : 0; m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 10 * CYCLE_UNIT / 2; } /* Scc.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_54e8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); {{ int val = cctrue (4) ? 0xff : 0; m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_54f0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); {{ int val = cctrue (4) ? 0xff : 0; regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_54f8_31)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); {{ int val = cctrue (4) ? 0xff : 0; m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_54f9_31)(uae_u32 opcode) { {{ uaecptr srca = get_ilong_mmu (2); {{ int val = cctrue (4) ? 0xff : 0; m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 16 * CYCLE_UNIT / 2; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_54fa_31)(uae_u32 opcode) { {{ uae_s16 dummy = get_iword_mmu (2); if (cctrue (4)) { Exception (7); goto endlabel11903; } }} m68k_incpci (4); endlabel11903: ; return 8 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_54fb_31)(uae_u32 opcode) { {{ uae_s32 dummy = get_ilong_mmu (2); if (cctrue (4)) { Exception (7); goto endlabel11904; } }} m68k_incpci (6); endlabel11904: ; return 12 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_54fc_31)(uae_u32 opcode) { { if (cctrue (4)) { Exception (7); goto endlabel11905; } } m68k_incpci (2); endlabel11905: ; return 4 * CYCLE_UNIT / 2; } #endif /* Scc.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_55c0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (5) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* DBcc.W Dn,#.W */ uae_u32 REGPARAM2 CPUFUNC(op_55c8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_iword_mmu (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (5)) { m68k_incpci ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel11907; } return 12 * CYCLE_UNIT / 2; } } else { } m68k_setpc_mmu (oldpc + 4); }}}endlabel11907: ; return 12 * CYCLE_UNIT / 2; } /* Scc.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_55d0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (5) ? 0xff : 0; m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 8 * CYCLE_UNIT / 2; } /* Scc.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_55d8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (5) ? 0xff : 0; m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 8 * CYCLE_UNIT / 2; } /* Scc.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_55e0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (5) ? 0xff : 0; m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 10 * CYCLE_UNIT / 2; } /* Scc.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_55e8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); {{ int val = cctrue (5) ? 0xff : 0; m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_55f0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); {{ int val = cctrue (5) ? 0xff : 0; regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_55f8_31)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); {{ int val = cctrue (5) ? 0xff : 0; m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_55f9_31)(uae_u32 opcode) { {{ uaecptr srca = get_ilong_mmu (2); {{ int val = cctrue (5) ? 0xff : 0; m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 16 * CYCLE_UNIT / 2; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_55fa_31)(uae_u32 opcode) { {{ uae_s16 dummy = get_iword_mmu (2); if (cctrue (5)) { Exception (7); goto endlabel11915; } }} m68k_incpci (4); endlabel11915: ; return 8 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_55fb_31)(uae_u32 opcode) { {{ uae_s32 dummy = get_ilong_mmu (2); if (cctrue (5)) { Exception (7); goto endlabel11916; } }} m68k_incpci (6); endlabel11916: ; return 12 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_55fc_31)(uae_u32 opcode) { { if (cctrue (5)) { Exception (7); goto endlabel11917; } } m68k_incpci (2); endlabel11917: ; return 4 * CYCLE_UNIT / 2; } #endif /* Scc.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_56c0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (6) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* DBcc.W Dn,#.W */ uae_u32 REGPARAM2 CPUFUNC(op_56c8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_iword_mmu (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (6)) { m68k_incpci ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel11919; } return 12 * CYCLE_UNIT / 2; } } else { } m68k_setpc_mmu (oldpc + 4); }}}endlabel11919: ; return 12 * CYCLE_UNIT / 2; } /* Scc.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_56d0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (6) ? 0xff : 0; m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 8 * CYCLE_UNIT / 2; } /* Scc.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_56d8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (6) ? 0xff : 0; m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 8 * CYCLE_UNIT / 2; } /* Scc.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_56e0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (6) ? 0xff : 0; m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 10 * CYCLE_UNIT / 2; } /* Scc.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_56e8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); {{ int val = cctrue (6) ? 0xff : 0; m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_56f0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); {{ int val = cctrue (6) ? 0xff : 0; regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_56f8_31)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); {{ int val = cctrue (6) ? 0xff : 0; m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_56f9_31)(uae_u32 opcode) { {{ uaecptr srca = get_ilong_mmu (2); {{ int val = cctrue (6) ? 0xff : 0; m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 16 * CYCLE_UNIT / 2; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_56fa_31)(uae_u32 opcode) { {{ uae_s16 dummy = get_iword_mmu (2); if (cctrue (6)) { Exception (7); goto endlabel11927; } }} m68k_incpci (4); endlabel11927: ; return 8 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_56fb_31)(uae_u32 opcode) { {{ uae_s32 dummy = get_ilong_mmu (2); if (cctrue (6)) { Exception (7); goto endlabel11928; } }} m68k_incpci (6); endlabel11928: ; return 12 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_56fc_31)(uae_u32 opcode) { { if (cctrue (6)) { Exception (7); goto endlabel11929; } } m68k_incpci (2); endlabel11929: ; return 4 * CYCLE_UNIT / 2; } #endif /* Scc.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_57c0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (7) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* DBcc.W Dn,#.W */ uae_u32 REGPARAM2 CPUFUNC(op_57c8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_iword_mmu (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (7)) { m68k_incpci ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel11931; } return 12 * CYCLE_UNIT / 2; } } else { } m68k_setpc_mmu (oldpc + 4); }}}endlabel11931: ; return 12 * CYCLE_UNIT / 2; } /* Scc.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_57d0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (7) ? 0xff : 0; m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 8 * CYCLE_UNIT / 2; } /* Scc.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_57d8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (7) ? 0xff : 0; m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 8 * CYCLE_UNIT / 2; } /* Scc.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_57e0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (7) ? 0xff : 0; m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 10 * CYCLE_UNIT / 2; } /* Scc.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_57e8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); {{ int val = cctrue (7) ? 0xff : 0; m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_57f0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); {{ int val = cctrue (7) ? 0xff : 0; regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_57f8_31)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); {{ int val = cctrue (7) ? 0xff : 0; m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_57f9_31)(uae_u32 opcode) { {{ uaecptr srca = get_ilong_mmu (2); {{ int val = cctrue (7) ? 0xff : 0; m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 16 * CYCLE_UNIT / 2; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_57fa_31)(uae_u32 opcode) { {{ uae_s16 dummy = get_iword_mmu (2); if (cctrue (7)) { Exception (7); goto endlabel11939; } }} m68k_incpci (4); endlabel11939: ; return 8 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_57fb_31)(uae_u32 opcode) { {{ uae_s32 dummy = get_ilong_mmu (2); if (cctrue (7)) { Exception (7); goto endlabel11940; } }} m68k_incpci (6); endlabel11940: ; return 12 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_57fc_31)(uae_u32 opcode) { { if (cctrue (7)) { Exception (7); goto endlabel11941; } } m68k_incpci (2); endlabel11941: ; return 4 * CYCLE_UNIT / 2; } #endif /* Scc.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_58c0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (8) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* DBcc.W Dn,#.W */ uae_u32 REGPARAM2 CPUFUNC(op_58c8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_iword_mmu (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (8)) { m68k_incpci ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel11943; } return 12 * CYCLE_UNIT / 2; } } else { } m68k_setpc_mmu (oldpc + 4); }}}endlabel11943: ; return 12 * CYCLE_UNIT / 2; } /* Scc.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_58d0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (8) ? 0xff : 0; m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 8 * CYCLE_UNIT / 2; } /* Scc.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_58d8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (8) ? 0xff : 0; m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 8 * CYCLE_UNIT / 2; } /* Scc.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_58e0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (8) ? 0xff : 0; m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 10 * CYCLE_UNIT / 2; } /* Scc.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_58e8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); {{ int val = cctrue (8) ? 0xff : 0; m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_58f0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); {{ int val = cctrue (8) ? 0xff : 0; regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_58f8_31)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); {{ int val = cctrue (8) ? 0xff : 0; m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_58f9_31)(uae_u32 opcode) { {{ uaecptr srca = get_ilong_mmu (2); {{ int val = cctrue (8) ? 0xff : 0; m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 16 * CYCLE_UNIT / 2; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_58fa_31)(uae_u32 opcode) { {{ uae_s16 dummy = get_iword_mmu (2); if (cctrue (8)) { Exception (7); goto endlabel11951; } }} m68k_incpci (4); endlabel11951: ; return 8 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_58fb_31)(uae_u32 opcode) { {{ uae_s32 dummy = get_ilong_mmu (2); if (cctrue (8)) { Exception (7); goto endlabel11952; } }} m68k_incpci (6); endlabel11952: ; return 12 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_58fc_31)(uae_u32 opcode) { { if (cctrue (8)) { Exception (7); goto endlabel11953; } } m68k_incpci (2); endlabel11953: ; return 4 * CYCLE_UNIT / 2; } #endif /* Scc.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_59c0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (9) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* DBcc.W Dn,#.W */ uae_u32 REGPARAM2 CPUFUNC(op_59c8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_iword_mmu (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (9)) { m68k_incpci ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel11955; } return 12 * CYCLE_UNIT / 2; } } else { } m68k_setpc_mmu (oldpc + 4); }}}endlabel11955: ; return 12 * CYCLE_UNIT / 2; } /* Scc.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_59d0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (9) ? 0xff : 0; m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 8 * CYCLE_UNIT / 2; } /* Scc.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_59d8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (9) ? 0xff : 0; m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 8 * CYCLE_UNIT / 2; } /* Scc.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_59e0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (9) ? 0xff : 0; m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 10 * CYCLE_UNIT / 2; } /* Scc.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_59e8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); {{ int val = cctrue (9) ? 0xff : 0; m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_59f0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); {{ int val = cctrue (9) ? 0xff : 0; regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_59f8_31)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); {{ int val = cctrue (9) ? 0xff : 0; m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_59f9_31)(uae_u32 opcode) { {{ uaecptr srca = get_ilong_mmu (2); {{ int val = cctrue (9) ? 0xff : 0; m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 16 * CYCLE_UNIT / 2; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_59fa_31)(uae_u32 opcode) { {{ uae_s16 dummy = get_iword_mmu (2); if (cctrue (9)) { Exception (7); goto endlabel11963; } }} m68k_incpci (4); endlabel11963: ; return 8 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_59fb_31)(uae_u32 opcode) { {{ uae_s32 dummy = get_ilong_mmu (2); if (cctrue (9)) { Exception (7); goto endlabel11964; } }} m68k_incpci (6); endlabel11964: ; return 12 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_59fc_31)(uae_u32 opcode) { { if (cctrue (9)) { Exception (7); goto endlabel11965; } } m68k_incpci (2); endlabel11965: ; return 4 * CYCLE_UNIT / 2; } #endif /* Scc.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_5ac0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (10) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* DBcc.W Dn,#.W */ uae_u32 REGPARAM2 CPUFUNC(op_5ac8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_iword_mmu (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (10)) { m68k_incpci ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel11967; } return 12 * CYCLE_UNIT / 2; } } else { } m68k_setpc_mmu (oldpc + 4); }}}endlabel11967: ; return 12 * CYCLE_UNIT / 2; } /* Scc.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_5ad0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (10) ? 0xff : 0; m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 8 * CYCLE_UNIT / 2; } /* Scc.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_5ad8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (10) ? 0xff : 0; m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 8 * CYCLE_UNIT / 2; } /* Scc.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_5ae0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (10) ? 0xff : 0; m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 10 * CYCLE_UNIT / 2; } /* Scc.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_5ae8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); {{ int val = cctrue (10) ? 0xff : 0; m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_5af0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); {{ int val = cctrue (10) ? 0xff : 0; regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_5af8_31)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); {{ int val = cctrue (10) ? 0xff : 0; m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_5af9_31)(uae_u32 opcode) { {{ uaecptr srca = get_ilong_mmu (2); {{ int val = cctrue (10) ? 0xff : 0; m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 16 * CYCLE_UNIT / 2; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_5afa_31)(uae_u32 opcode) { {{ uae_s16 dummy = get_iword_mmu (2); if (cctrue (10)) { Exception (7); goto endlabel11975; } }} m68k_incpci (4); endlabel11975: ; return 8 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_5afb_31)(uae_u32 opcode) { {{ uae_s32 dummy = get_ilong_mmu (2); if (cctrue (10)) { Exception (7); goto endlabel11976; } }} m68k_incpci (6); endlabel11976: ; return 12 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_5afc_31)(uae_u32 opcode) { { if (cctrue (10)) { Exception (7); goto endlabel11977; } } m68k_incpci (2); endlabel11977: ; return 4 * CYCLE_UNIT / 2; } #endif /* Scc.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_5bc0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (11) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* DBcc.W Dn,#.W */ uae_u32 REGPARAM2 CPUFUNC(op_5bc8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_iword_mmu (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (11)) { m68k_incpci ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel11979; } return 12 * CYCLE_UNIT / 2; } } else { } m68k_setpc_mmu (oldpc + 4); }}}endlabel11979: ; return 12 * CYCLE_UNIT / 2; } /* Scc.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_5bd0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (11) ? 0xff : 0; m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 8 * CYCLE_UNIT / 2; } /* Scc.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_5bd8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (11) ? 0xff : 0; m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 8 * CYCLE_UNIT / 2; } /* Scc.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_5be0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (11) ? 0xff : 0; m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 10 * CYCLE_UNIT / 2; } /* Scc.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_5be8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); {{ int val = cctrue (11) ? 0xff : 0; m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_5bf0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); {{ int val = cctrue (11) ? 0xff : 0; regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_5bf8_31)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); {{ int val = cctrue (11) ? 0xff : 0; m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_5bf9_31)(uae_u32 opcode) { {{ uaecptr srca = get_ilong_mmu (2); {{ int val = cctrue (11) ? 0xff : 0; m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 16 * CYCLE_UNIT / 2; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_5bfa_31)(uae_u32 opcode) { {{ uae_s16 dummy = get_iword_mmu (2); if (cctrue (11)) { Exception (7); goto endlabel11987; } }} m68k_incpci (4); endlabel11987: ; return 8 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_5bfb_31)(uae_u32 opcode) { {{ uae_s32 dummy = get_ilong_mmu (2); if (cctrue (11)) { Exception (7); goto endlabel11988; } }} m68k_incpci (6); endlabel11988: ; return 12 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_5bfc_31)(uae_u32 opcode) { { if (cctrue (11)) { Exception (7); goto endlabel11989; } } m68k_incpci (2); endlabel11989: ; return 4 * CYCLE_UNIT / 2; } #endif /* Scc.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_5cc0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (12) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* DBcc.W Dn,#.W */ uae_u32 REGPARAM2 CPUFUNC(op_5cc8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_iword_mmu (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (12)) { m68k_incpci ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel11991; } return 12 * CYCLE_UNIT / 2; } } else { } m68k_setpc_mmu (oldpc + 4); }}}endlabel11991: ; return 12 * CYCLE_UNIT / 2; } /* Scc.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_5cd0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (12) ? 0xff : 0; m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 8 * CYCLE_UNIT / 2; } /* Scc.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_5cd8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (12) ? 0xff : 0; m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 8 * CYCLE_UNIT / 2; } /* Scc.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_5ce0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (12) ? 0xff : 0; m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 10 * CYCLE_UNIT / 2; } /* Scc.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_5ce8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); {{ int val = cctrue (12) ? 0xff : 0; m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_5cf0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); {{ int val = cctrue (12) ? 0xff : 0; regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_5cf8_31)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); {{ int val = cctrue (12) ? 0xff : 0; m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_5cf9_31)(uae_u32 opcode) { {{ uaecptr srca = get_ilong_mmu (2); {{ int val = cctrue (12) ? 0xff : 0; m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 16 * CYCLE_UNIT / 2; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_5cfa_31)(uae_u32 opcode) { {{ uae_s16 dummy = get_iword_mmu (2); if (cctrue (12)) { Exception (7); goto endlabel11999; } }} m68k_incpci (4); endlabel11999: ; return 8 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_5cfb_31)(uae_u32 opcode) { {{ uae_s32 dummy = get_ilong_mmu (2); if (cctrue (12)) { Exception (7); goto endlabel12000; } }} m68k_incpci (6); endlabel12000: ; return 12 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_5cfc_31)(uae_u32 opcode) { { if (cctrue (12)) { Exception (7); goto endlabel12001; } } m68k_incpci (2); endlabel12001: ; return 4 * CYCLE_UNIT / 2; } #endif /* Scc.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_5dc0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (13) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* DBcc.W Dn,#.W */ uae_u32 REGPARAM2 CPUFUNC(op_5dc8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_iword_mmu (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (13)) { m68k_incpci ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel12003; } return 12 * CYCLE_UNIT / 2; } } else { } m68k_setpc_mmu (oldpc + 4); }}}endlabel12003: ; return 12 * CYCLE_UNIT / 2; } /* Scc.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_5dd0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (13) ? 0xff : 0; m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 8 * CYCLE_UNIT / 2; } /* Scc.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_5dd8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (13) ? 0xff : 0; m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 8 * CYCLE_UNIT / 2; } /* Scc.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_5de0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (13) ? 0xff : 0; m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 10 * CYCLE_UNIT / 2; } /* Scc.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_5de8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); {{ int val = cctrue (13) ? 0xff : 0; m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_5df0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); {{ int val = cctrue (13) ? 0xff : 0; regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_5df8_31)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); {{ int val = cctrue (13) ? 0xff : 0; m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_5df9_31)(uae_u32 opcode) { {{ uaecptr srca = get_ilong_mmu (2); {{ int val = cctrue (13) ? 0xff : 0; m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 16 * CYCLE_UNIT / 2; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_5dfa_31)(uae_u32 opcode) { {{ uae_s16 dummy = get_iword_mmu (2); if (cctrue (13)) { Exception (7); goto endlabel12011; } }} m68k_incpci (4); endlabel12011: ; return 8 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_5dfb_31)(uae_u32 opcode) { {{ uae_s32 dummy = get_ilong_mmu (2); if (cctrue (13)) { Exception (7); goto endlabel12012; } }} m68k_incpci (6); endlabel12012: ; return 12 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_5dfc_31)(uae_u32 opcode) { { if (cctrue (13)) { Exception (7); goto endlabel12013; } } m68k_incpci (2); endlabel12013: ; return 4 * CYCLE_UNIT / 2; } #endif /* Scc.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_5ec0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (14) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* DBcc.W Dn,#.W */ uae_u32 REGPARAM2 CPUFUNC(op_5ec8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_iword_mmu (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (14)) { m68k_incpci ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel12015; } return 12 * CYCLE_UNIT / 2; } } else { } m68k_setpc_mmu (oldpc + 4); }}}endlabel12015: ; return 12 * CYCLE_UNIT / 2; } /* Scc.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_5ed0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (14) ? 0xff : 0; m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 8 * CYCLE_UNIT / 2; } /* Scc.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_5ed8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (14) ? 0xff : 0; m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 8 * CYCLE_UNIT / 2; } /* Scc.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_5ee0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (14) ? 0xff : 0; m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 10 * CYCLE_UNIT / 2; } /* Scc.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_5ee8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); {{ int val = cctrue (14) ? 0xff : 0; m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_5ef0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); {{ int val = cctrue (14) ? 0xff : 0; regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_5ef8_31)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); {{ int val = cctrue (14) ? 0xff : 0; m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_5ef9_31)(uae_u32 opcode) { {{ uaecptr srca = get_ilong_mmu (2); {{ int val = cctrue (14) ? 0xff : 0; m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 16 * CYCLE_UNIT / 2; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_5efa_31)(uae_u32 opcode) { {{ uae_s16 dummy = get_iword_mmu (2); if (cctrue (14)) { Exception (7); goto endlabel12023; } }} m68k_incpci (4); endlabel12023: ; return 8 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_5efb_31)(uae_u32 opcode) { {{ uae_s32 dummy = get_ilong_mmu (2); if (cctrue (14)) { Exception (7); goto endlabel12024; } }} m68k_incpci (6); endlabel12024: ; return 12 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_5efc_31)(uae_u32 opcode) { { if (cctrue (14)) { Exception (7); goto endlabel12025; } } m68k_incpci (2); endlabel12025: ; return 4 * CYCLE_UNIT / 2; } #endif /* Scc.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_5fc0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (15) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* DBcc.W Dn,#.W */ uae_u32 REGPARAM2 CPUFUNC(op_5fc8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_iword_mmu (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (15)) { m68k_incpci ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel12027; } return 12 * CYCLE_UNIT / 2; } } else { } m68k_setpc_mmu (oldpc + 4); }}}endlabel12027: ; return 12 * CYCLE_UNIT / 2; } /* Scc.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_5fd0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (15) ? 0xff : 0; m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 8 * CYCLE_UNIT / 2; } /* Scc.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_5fd8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (15) ? 0xff : 0; m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 8 * CYCLE_UNIT / 2; } /* Scc.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_5fe0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (15) ? 0xff : 0; m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 10 * CYCLE_UNIT / 2; } /* Scc.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_5fe8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); {{ int val = cctrue (15) ? 0xff : 0; m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_5ff0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); {{ int val = cctrue (15) ? 0xff : 0; regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_5ff8_31)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); {{ int val = cctrue (15) ? 0xff : 0; m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_5ff9_31)(uae_u32 opcode) { {{ uaecptr srca = get_ilong_mmu (2); {{ int val = cctrue (15) ? 0xff : 0; m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_byte_mmu (srca, val); }}}}return 16 * CYCLE_UNIT / 2; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_5ffa_31)(uae_u32 opcode) { {{ uae_s16 dummy = get_iword_mmu (2); if (cctrue (15)) { Exception (7); goto endlabel12035; } }} m68k_incpci (4); endlabel12035: ; return 8 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_5ffb_31)(uae_u32 opcode) { {{ uae_s32 dummy = get_ilong_mmu (2); if (cctrue (15)) { Exception (7); goto endlabel12036; } }} m68k_incpci (6); endlabel12036: ; return 12 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_5ffc_31)(uae_u32 opcode) { { if (cctrue (15)) { Exception (7); goto endlabel12037; } } m68k_incpci (2); endlabel12037: ; return 4 * CYCLE_UNIT / 2; } #endif /* Bcc.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_6000_31)(uae_u32 opcode) { {{ uae_s16 src = get_iword_mmu (2); if (!cctrue (0)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel12038; } m68k_incpci ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpci (4); }}endlabel12038: ; return 12 * CYCLE_UNIT / 2; } /* BccQ.B # */ uae_u32 REGPARAM2 CPUFUNC(op_6001_31)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (0)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel12039; } m68k_incpci ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpci (2); }}endlabel12039: ; return 8 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_60ff_31)(uae_u32 opcode) { {{ uae_s32 src = get_ilong_mmu (2); if (!cctrue (0)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel12040; } m68k_incpci ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpci (6); }}endlabel12040: ; return 12 * CYCLE_UNIT / 2; } /* BSR.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_6100_31)(uae_u32 opcode) { { uae_s32 s; { uae_s16 src = get_iword_mmu (2); s = (uae_s32)src + 2; if (src & 1) { exception3 (opcode, m68k_getpc () + s, 0, 1, m68k_getpc () + s); goto endlabel12041; } m68k_do_bsr_mmu (m68k_getpc () + 4, s); }}endlabel12041: ; return 8 * CYCLE_UNIT / 2; } /* BSRQ.B # */ uae_u32 REGPARAM2 CPUFUNC(op_6101_31)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); { uae_s32 s; { uae_u32 src = srcreg; s = (uae_s32)src + 2; if (src & 1) { exception3 (opcode, m68k_getpc () + s, 0, 1, m68k_getpc () + s); goto endlabel12042; } m68k_do_bsr_mmu (m68k_getpc () + 2, s); }}endlabel12042: ; return 4 * CYCLE_UNIT / 2; } /* BSR.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_61ff_31)(uae_u32 opcode) { { uae_s32 s; { uae_s32 src = get_ilong_mmu (2); s = (uae_s32)src + 2; if (src & 1) { exception3 (opcode, m68k_getpc () + s, 0, 1, m68k_getpc () + s); goto endlabel12043; } m68k_do_bsr_mmu (m68k_getpc () + 6, s); }}endlabel12043: ; return 12 * CYCLE_UNIT / 2; } #endif #ifdef PART_6 /* Bcc.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_6200_31)(uae_u32 opcode) { {{ uae_s16 src = get_iword_mmu (2); if (!cctrue (2)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel12044; } m68k_incpci ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpci (4); }}endlabel12044: ; return 12 * CYCLE_UNIT / 2; } /* BccQ.B # */ uae_u32 REGPARAM2 CPUFUNC(op_6201_31)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (2)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel12045; } m68k_incpci ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpci (2); }}endlabel12045: ; return 8 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_62ff_31)(uae_u32 opcode) { {{ uae_s32 src = get_ilong_mmu (2); if (!cctrue (2)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel12046; } m68k_incpci ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpci (6); }}endlabel12046: ; return 12 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_6300_31)(uae_u32 opcode) { {{ uae_s16 src = get_iword_mmu (2); if (!cctrue (3)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel12047; } m68k_incpci ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpci (4); }}endlabel12047: ; return 12 * CYCLE_UNIT / 2; } /* BccQ.B # */ uae_u32 REGPARAM2 CPUFUNC(op_6301_31)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (3)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel12048; } m68k_incpci ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpci (2); }}endlabel12048: ; return 8 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_63ff_31)(uae_u32 opcode) { {{ uae_s32 src = get_ilong_mmu (2); if (!cctrue (3)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel12049; } m68k_incpci ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpci (6); }}endlabel12049: ; return 12 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_6400_31)(uae_u32 opcode) { {{ uae_s16 src = get_iword_mmu (2); if (!cctrue (4)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel12050; } m68k_incpci ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpci (4); }}endlabel12050: ; return 12 * CYCLE_UNIT / 2; } /* BccQ.B # */ uae_u32 REGPARAM2 CPUFUNC(op_6401_31)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (4)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel12051; } m68k_incpci ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpci (2); }}endlabel12051: ; return 8 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_64ff_31)(uae_u32 opcode) { {{ uae_s32 src = get_ilong_mmu (2); if (!cctrue (4)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel12052; } m68k_incpci ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpci (6); }}endlabel12052: ; return 12 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_6500_31)(uae_u32 opcode) { {{ uae_s16 src = get_iword_mmu (2); if (!cctrue (5)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel12053; } m68k_incpci ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpci (4); }}endlabel12053: ; return 12 * CYCLE_UNIT / 2; } /* BccQ.B # */ uae_u32 REGPARAM2 CPUFUNC(op_6501_31)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (5)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel12054; } m68k_incpci ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpci (2); }}endlabel12054: ; return 8 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_65ff_31)(uae_u32 opcode) { {{ uae_s32 src = get_ilong_mmu (2); if (!cctrue (5)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel12055; } m68k_incpci ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpci (6); }}endlabel12055: ; return 12 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_6600_31)(uae_u32 opcode) { {{ uae_s16 src = get_iword_mmu (2); if (!cctrue (6)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel12056; } m68k_incpci ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpci (4); }}endlabel12056: ; return 12 * CYCLE_UNIT / 2; } /* BccQ.B # */ uae_u32 REGPARAM2 CPUFUNC(op_6601_31)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (6)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel12057; } m68k_incpci ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpci (2); }}endlabel12057: ; return 8 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_66ff_31)(uae_u32 opcode) { {{ uae_s32 src = get_ilong_mmu (2); if (!cctrue (6)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel12058; } m68k_incpci ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpci (6); }}endlabel12058: ; return 12 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_6700_31)(uae_u32 opcode) { {{ uae_s16 src = get_iword_mmu (2); if (!cctrue (7)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel12059; } m68k_incpci ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpci (4); }}endlabel12059: ; return 12 * CYCLE_UNIT / 2; } /* BccQ.B # */ uae_u32 REGPARAM2 CPUFUNC(op_6701_31)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (7)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel12060; } m68k_incpci ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpci (2); }}endlabel12060: ; return 8 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_67ff_31)(uae_u32 opcode) { {{ uae_s32 src = get_ilong_mmu (2); if (!cctrue (7)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel12061; } m68k_incpci ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpci (6); }}endlabel12061: ; return 12 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_6800_31)(uae_u32 opcode) { {{ uae_s16 src = get_iword_mmu (2); if (!cctrue (8)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel12062; } m68k_incpci ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpci (4); }}endlabel12062: ; return 12 * CYCLE_UNIT / 2; } /* BccQ.B # */ uae_u32 REGPARAM2 CPUFUNC(op_6801_31)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (8)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel12063; } m68k_incpci ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpci (2); }}endlabel12063: ; return 8 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_68ff_31)(uae_u32 opcode) { {{ uae_s32 src = get_ilong_mmu (2); if (!cctrue (8)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel12064; } m68k_incpci ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpci (6); }}endlabel12064: ; return 12 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_6900_31)(uae_u32 opcode) { {{ uae_s16 src = get_iword_mmu (2); if (!cctrue (9)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel12065; } m68k_incpci ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpci (4); }}endlabel12065: ; return 12 * CYCLE_UNIT / 2; } /* BccQ.B # */ uae_u32 REGPARAM2 CPUFUNC(op_6901_31)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (9)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel12066; } m68k_incpci ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpci (2); }}endlabel12066: ; return 8 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_69ff_31)(uae_u32 opcode) { {{ uae_s32 src = get_ilong_mmu (2); if (!cctrue (9)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel12067; } m68k_incpci ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpci (6); }}endlabel12067: ; return 12 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_6a00_31)(uae_u32 opcode) { {{ uae_s16 src = get_iword_mmu (2); if (!cctrue (10)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel12068; } m68k_incpci ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpci (4); }}endlabel12068: ; return 12 * CYCLE_UNIT / 2; } /* BccQ.B # */ uae_u32 REGPARAM2 CPUFUNC(op_6a01_31)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (10)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel12069; } m68k_incpci ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpci (2); }}endlabel12069: ; return 8 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_6aff_31)(uae_u32 opcode) { {{ uae_s32 src = get_ilong_mmu (2); if (!cctrue (10)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel12070; } m68k_incpci ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpci (6); }}endlabel12070: ; return 12 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_6b00_31)(uae_u32 opcode) { {{ uae_s16 src = get_iword_mmu (2); if (!cctrue (11)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel12071; } m68k_incpci ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpci (4); }}endlabel12071: ; return 12 * CYCLE_UNIT / 2; } /* BccQ.B # */ uae_u32 REGPARAM2 CPUFUNC(op_6b01_31)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (11)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel12072; } m68k_incpci ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpci (2); }}endlabel12072: ; return 8 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_6bff_31)(uae_u32 opcode) { {{ uae_s32 src = get_ilong_mmu (2); if (!cctrue (11)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel12073; } m68k_incpci ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpci (6); }}endlabel12073: ; return 12 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_6c00_31)(uae_u32 opcode) { {{ uae_s16 src = get_iword_mmu (2); if (!cctrue (12)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel12074; } m68k_incpci ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpci (4); }}endlabel12074: ; return 12 * CYCLE_UNIT / 2; } /* BccQ.B # */ uae_u32 REGPARAM2 CPUFUNC(op_6c01_31)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (12)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel12075; } m68k_incpci ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpci (2); }}endlabel12075: ; return 8 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_6cff_31)(uae_u32 opcode) { {{ uae_s32 src = get_ilong_mmu (2); if (!cctrue (12)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel12076; } m68k_incpci ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpci (6); }}endlabel12076: ; return 12 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_6d00_31)(uae_u32 opcode) { {{ uae_s16 src = get_iword_mmu (2); if (!cctrue (13)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel12077; } m68k_incpci ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpci (4); }}endlabel12077: ; return 12 * CYCLE_UNIT / 2; } /* BccQ.B # */ uae_u32 REGPARAM2 CPUFUNC(op_6d01_31)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (13)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel12078; } m68k_incpci ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpci (2); }}endlabel12078: ; return 8 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_6dff_31)(uae_u32 opcode) { {{ uae_s32 src = get_ilong_mmu (2); if (!cctrue (13)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel12079; } m68k_incpci ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpci (6); }}endlabel12079: ; return 12 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_6e00_31)(uae_u32 opcode) { {{ uae_s16 src = get_iword_mmu (2); if (!cctrue (14)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel12080; } m68k_incpci ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpci (4); }}endlabel12080: ; return 12 * CYCLE_UNIT / 2; } /* BccQ.B # */ uae_u32 REGPARAM2 CPUFUNC(op_6e01_31)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (14)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel12081; } m68k_incpci ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpci (2); }}endlabel12081: ; return 8 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_6eff_31)(uae_u32 opcode) { {{ uae_s32 src = get_ilong_mmu (2); if (!cctrue (14)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel12082; } m68k_incpci ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpci (6); }}endlabel12082: ; return 12 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_6f00_31)(uae_u32 opcode) { {{ uae_s16 src = get_iword_mmu (2); if (!cctrue (15)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel12083; } m68k_incpci ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpci (4); }}endlabel12083: ; return 12 * CYCLE_UNIT / 2; } /* BccQ.B # */ uae_u32 REGPARAM2 CPUFUNC(op_6f01_31)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (15)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel12084; } m68k_incpci ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpci (2); }}endlabel12084: ; return 8 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_6fff_31)(uae_u32 opcode) { {{ uae_s32 src = get_ilong_mmu (2); if (!cctrue (15)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel12085; } m68k_incpci ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpci (6); }}endlabel12085: ; return 12 * CYCLE_UNIT / 2; } /* MOVEQ.L #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_7000_31)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_u32 src = srcreg; { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpci (2); }}}return 4 * CYCLE_UNIT / 2; } /* OR.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8000_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* OR.B (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8010_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte_mmu (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpci (2); return 8 * CYCLE_UNIT / 2; } /* OR.B (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8018_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte_mmu (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpci (2); return 8 * CYCLE_UNIT / 2; } /* OR.B -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8020_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte_mmu (srca); m68k_areg (regs, srcreg) = srca; { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpci (2); return 10 * CYCLE_UNIT / 2; } /* OR.B (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8028_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 src = get_byte_mmu (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpci (4); return 12 * CYCLE_UNIT / 2; } /* OR.B (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8030_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s8 src = get_byte_mmu (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}}}return 12 * CYCLE_UNIT / 2; } /* OR.B (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8038_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 src = get_byte_mmu (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpci (4); return 12 * CYCLE_UNIT / 2; } /* OR.B (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8039_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong_mmu (2); { uae_s8 src = get_byte_mmu (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpci (6); return 16 * CYCLE_UNIT / 2; } /* OR.B (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_803a_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 src = get_byte_mmu (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpci (4); return 12 * CYCLE_UNIT / 2; } /* OR.B (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_803b_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpci (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_s8 src = get_byte_mmu (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}}}return 12 * CYCLE_UNIT / 2; } /* OR.B #.B,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_803c_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = get_ibyte_mmu (2); { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}} m68k_incpci (4); return 12 * CYCLE_UNIT / 2; } /* OR.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8040_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* OR.W (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8050_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word_mmu (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} m68k_incpci (2); return 8 * CYCLE_UNIT / 2; } /* OR.W (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8058_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word_mmu (srca); m68k_areg (regs, srcreg) += 2; { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} m68k_incpci (2); return 8 * CYCLE_UNIT / 2; } /* OR.W -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8060_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = get_word_mmu (srca); m68k_areg (regs, srcreg) = srca; { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} m68k_incpci (2); return 10 * CYCLE_UNIT / 2; } /* OR.W (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8068_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} m68k_incpci (4); return 12 * CYCLE_UNIT / 2; } /* OR.W (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8070_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s16 src = get_word_mmu (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}}return 12 * CYCLE_UNIT / 2; } /* OR.W (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8078_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} m68k_incpci (4); return 12 * CYCLE_UNIT / 2; } /* OR.W (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8079_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong_mmu (2); { uae_s16 src = get_word_mmu (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} m68k_incpci (6); return 16 * CYCLE_UNIT / 2; } /* OR.W (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_807a_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} m68k_incpci (4); return 12 * CYCLE_UNIT / 2; } /* OR.W (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_807b_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpci (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_s16 src = get_word_mmu (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}}return 12 * CYCLE_UNIT / 2; } /* OR.W #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_807c_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_iword_mmu (2); { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}} m68k_incpci (4); return 8 * CYCLE_UNIT / 2; } /* OR.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8080_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* OR.L (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8090_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long_mmu (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} m68k_incpci (2); return 12 * CYCLE_UNIT / 2; } /* OR.L (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8098_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long_mmu (srca); m68k_areg (regs, srcreg) += 4; { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} m68k_incpci (2); return 12 * CYCLE_UNIT / 2; } /* OR.L -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80a0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = get_long_mmu (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} m68k_incpci (2); return 14 * CYCLE_UNIT / 2; } /* OR.L (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80a8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 src = get_long_mmu (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} m68k_incpci (4); return 16 * CYCLE_UNIT / 2; } /* OR.L (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80b0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s32 src = get_long_mmu (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}}}return 16 * CYCLE_UNIT / 2; } /* OR.L (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80b8_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 src = get_long_mmu (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} m68k_incpci (4); return 16 * CYCLE_UNIT / 2; } /* OR.L (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80b9_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong_mmu (2); { uae_s32 src = get_long_mmu (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} m68k_incpci (6); return 20 * CYCLE_UNIT / 2; } /* OR.L (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80ba_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 src = get_long_mmu (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} m68k_incpci (4); return 16 * CYCLE_UNIT / 2; } /* OR.L (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80bb_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpci (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_s32 src = get_long_mmu (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}}}return 16 * CYCLE_UNIT / 2; } /* OR.L #.L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80bc_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_ilong_mmu (2); { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}} m68k_incpci (6); return 12 * CYCLE_UNIT / 2; } /* DIVU.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80c0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); if (dst < 0) SET_NFLG (1); m68k_incpci (2); Exception (5); goto endlabel12120; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpci (2); } }}}endlabel12120: ; return 110 * CYCLE_UNIT / 2; } /* DIVU.W (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80d0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word_mmu (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); if (dst < 0) SET_NFLG (1); m68k_incpci (2); Exception (5); goto endlabel12121; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpci (2); } }}}}endlabel12121: ; return 114 * CYCLE_UNIT / 2; } /* DIVU.W (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80d8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word_mmu (srca); m68k_areg (regs, srcreg) += 2; { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); if (dst < 0) SET_NFLG (1); m68k_incpci (2); Exception (5); goto endlabel12122; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpci (2); } }}}}endlabel12122: ; return 114 * CYCLE_UNIT / 2; } /* DIVU.W -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80e0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = get_word_mmu (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); if (dst < 0) SET_NFLG (1); m68k_incpci (2); Exception (5); goto endlabel12123; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpci (2); } }}}}endlabel12123: ; return 116 * CYCLE_UNIT / 2; } /* DIVU.W (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80e8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); if (dst < 0) SET_NFLG (1); m68k_incpci (4); Exception (5); goto endlabel12124; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpci (4); } }}}}endlabel12124: ; return 118 * CYCLE_UNIT / 2; } /* DIVU.W (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80f0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s16 src = get_word_mmu (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); if (dst < 0) SET_NFLG (1); m68k_incpci (0); Exception (5); goto endlabel12125; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } } }}}}}endlabel12125: ; return 118 * CYCLE_UNIT / 2; } /* DIVU.W (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80f8_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); if (dst < 0) SET_NFLG (1); m68k_incpci (4); Exception (5); goto endlabel12126; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpci (4); } }}}}endlabel12126: ; return 118 * CYCLE_UNIT / 2; } /* DIVU.W (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80f9_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong_mmu (2); { uae_s16 src = get_word_mmu (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); if (dst < 0) SET_NFLG (1); m68k_incpci (6); Exception (5); goto endlabel12127; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpci (6); } }}}}endlabel12127: ; return 122 * CYCLE_UNIT / 2; } /* DIVU.W (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80fa_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); if (dst < 0) SET_NFLG (1); m68k_incpci (4); Exception (5); goto endlabel12128; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpci (4); } }}}}endlabel12128: ; return 118 * CYCLE_UNIT / 2; } /* DIVU.W (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80fb_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpci (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_s16 src = get_word_mmu (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); if (dst < 0) SET_NFLG (1); m68k_incpci (0); Exception (5); goto endlabel12129; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } } }}}}}endlabel12129: ; return 118 * CYCLE_UNIT / 2; } /* DIVU.W #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80fc_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_iword_mmu (2); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); if (dst < 0) SET_NFLG (1); m68k_incpci (4); Exception (5); goto endlabel12130; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpci (4); } }}}endlabel12130: ; return 114 * CYCLE_UNIT / 2; } /* SBCD.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8100_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); { uae_u16 newv_lo = (dst & 0xF) - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = (dst & 0xF0) - (src & 0xF0); uae_u16 newv, tmp_newv; int bcd = 0; newv = tmp_newv = newv_hi + newv_lo; if (newv_lo & 0xF0) { newv -= 6; bcd = 6; }; if ((((dst & 0xFF) - (src & 0xFF) - (GET_XFLG () ? 1 : 0)) & 0x100) > 0xFF) { newv -= 0x60; } SET_CFLG ((((dst & 0xFF) - (src & 0xFF) - bcd - (GET_XFLG () ? 1 : 0)) & 0x300) > 0xFF); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* SBCD.B -(An),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_8108_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte_mmu (srca); mmufixup[0].reg = srcreg; mmufixup[0].value = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = get_byte_mmu (dsta); m68k_areg (regs, dstreg) = dsta; mmufixup[0].reg = -1; { uae_u16 newv_lo = (dst & 0xF) - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = (dst & 0xF0) - (src & 0xF0); uae_u16 newv, tmp_newv; int bcd = 0; newv = tmp_newv = newv_hi + newv_lo; if (newv_lo & 0xF0) { newv -= 6; bcd = 6; }; if ((((dst & 0xFF) - (src & 0xFF) - (GET_XFLG () ? 1 : 0)) & 0x100) > 0xFF) { newv -= 0x60; } SET_CFLG ((((dst & 0xFF) - (src & 0xFF) - bcd - (GET_XFLG () ? 1 : 0)) & 0x300) > 0xFF); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, newv); }}}}}}return 16 * CYCLE_UNIT / 2; } /* OR.B Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_8110_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte_mmu (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 12 * CYCLE_UNIT / 2; } /* OR.B Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_8118_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte_mmu (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 12 * CYCLE_UNIT / 2; } /* OR.B Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_8120_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = get_byte_mmu (dsta); m68k_areg (regs, dstreg) = dsta; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 14 * CYCLE_UNIT / 2; } /* OR.B Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_8128_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 dst = get_byte_mmu (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 16 * CYCLE_UNIT / 2; } /* OR.B Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_8130_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpci (2); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); { uae_s8 dst = get_byte_mmu (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}}return 16 * CYCLE_UNIT / 2; } /* OR.B Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_8138_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 dst = get_byte_mmu (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 16 * CYCLE_UNIT / 2; } /* OR.B Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_8139_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_ilong_mmu (2); { uae_s8 dst = get_byte_mmu (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 20 * CYCLE_UNIT / 2; } /* PACK.L Dn,Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_8140_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; { uae_u16 val = m68k_dreg (regs, srcreg) + get_iword_mmu (2); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & 0xffffff00) | ((val >> 4) & 0xf0) | (val & 0xf); } m68k_incpci (4); return 8 * CYCLE_UNIT / 2; } #endif /* PACK.L -(An),-(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_8148_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; { uae_u16 val; m68k_areg (regs, srcreg) -= areg_byteinc[srcreg]; val = (uae_u16)get_byte_mmu (m68k_areg (regs, srcreg)); m68k_areg (regs, srcreg) -= areg_byteinc[srcreg]; val = (val | ((uae_u16)get_byte_mmu (m68k_areg (regs, srcreg)) << 8)) + get_iword_mmu (2); m68k_areg (regs, dstreg) -= areg_byteinc[dstreg]; m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (m68k_areg (regs, dstreg),((val >> 4) & 0xf0) | (val & 0xf)); }return 8 * CYCLE_UNIT / 2; } #endif /* OR.W Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_8150_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = get_word_mmu (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 12 * CYCLE_UNIT / 2; } /* OR.W Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_8158_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = get_word_mmu (dsta); m68k_areg (regs, dstreg) += 2; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 12 * CYCLE_UNIT / 2; } /* OR.W Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_8160_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = get_word_mmu (dsta); m68k_areg (regs, dstreg) = dsta; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 14 * CYCLE_UNIT / 2; } /* OR.W Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_8168_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 dst = get_word_mmu (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 16 * CYCLE_UNIT / 2; } /* OR.W Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_8170_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpci (2); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); { uae_s16 dst = get_word_mmu (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}}return 16 * CYCLE_UNIT / 2; } /* OR.W Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_8178_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 dst = get_word_mmu (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 16 * CYCLE_UNIT / 2; } /* OR.W Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_8179_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_ilong_mmu (2); { uae_s16 dst = get_word_mmu (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 20 * CYCLE_UNIT / 2; } /* UNPK.L Dn,Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_8180_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; { uae_u16 val = m68k_dreg (regs, srcreg); val = (((val << 4) & 0xf00) | (val & 0xf)) + get_iword_mmu (2); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & 0xffff0000) | (val & 0xffff); } m68k_incpci (4); return 8 * CYCLE_UNIT / 2; } #endif /* UNPK.L -(An),-(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_8188_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; { uae_u16 val; m68k_areg (regs, srcreg) -= areg_byteinc[srcreg]; val = (uae_u16)get_byte_mmu (m68k_areg (regs, srcreg)); val = (((val << 4) & 0xf00) | (val & 0xf)) + get_iword_mmu (2); m68k_areg (regs, dstreg) -= 2 * areg_byteinc[dstreg]; put_byte_mmu (m68k_areg (regs, dstreg) + areg_byteinc[dstreg], val); put_byte_mmu (m68k_areg (regs, dstreg), val >> 8); } m68k_incpci (4); return 8 * CYCLE_UNIT / 2; } #endif /* OR.L Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_8190_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = get_long_mmu (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 20 * CYCLE_UNIT / 2; } /* OR.L Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_8198_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = get_long_mmu (dsta); m68k_areg (regs, dstreg) += 4; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 20 * CYCLE_UNIT / 2; } /* OR.L Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_81a0_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = get_long_mmu (dsta); m68k_areg (regs, dstreg) = dsta; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 22 * CYCLE_UNIT / 2; } /* OR.L Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_81a8_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 dst = get_long_mmu (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 24 * CYCLE_UNIT / 2; } /* OR.L Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_81b0_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpci (2); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); { uae_s32 dst = get_long_mmu (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}}return 24 * CYCLE_UNIT / 2; } /* OR.L Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_81b8_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 dst = get_long_mmu (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 24 * CYCLE_UNIT / 2; } /* OR.L Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_81b9_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_ilong_mmu (2); { uae_s32 dst = get_long_mmu (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 28 * CYCLE_UNIT / 2; } /* DIVS.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_81c0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); SET_ZFLG (1); m68k_incpci (2); Exception (5); goto endlabel12158; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpci (2); } }}}endlabel12158: ; return 142 * CYCLE_UNIT / 2; } /* DIVS.W (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_81d0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word_mmu (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); SET_ZFLG (1); m68k_incpci (2); Exception (5); goto endlabel12159; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpci (2); } }}}}endlabel12159: ; return 146 * CYCLE_UNIT / 2; } /* DIVS.W (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_81d8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word_mmu (srca); m68k_areg (regs, srcreg) += 2; { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); SET_ZFLG (1); m68k_incpci (2); Exception (5); goto endlabel12160; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpci (2); } }}}}endlabel12160: ; return 146 * CYCLE_UNIT / 2; } /* DIVS.W -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_81e0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = get_word_mmu (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); SET_ZFLG (1); m68k_incpci (2); Exception (5); goto endlabel12161; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpci (2); } }}}}endlabel12161: ; return 148 * CYCLE_UNIT / 2; } /* DIVS.W (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_81e8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); SET_ZFLG (1); m68k_incpci (4); Exception (5); goto endlabel12162; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpci (4); } }}}}endlabel12162: ; return 150 * CYCLE_UNIT / 2; } /* DIVS.W (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_81f0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s16 src = get_word_mmu (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); SET_ZFLG (1); m68k_incpci (0); Exception (5); goto endlabel12163; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } } }}}}}endlabel12163: ; return 150 * CYCLE_UNIT / 2; } /* DIVS.W (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_81f8_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); SET_ZFLG (1); m68k_incpci (4); Exception (5); goto endlabel12164; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpci (4); } }}}}endlabel12164: ; return 150 * CYCLE_UNIT / 2; } /* DIVS.W (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_81f9_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong_mmu (2); { uae_s16 src = get_word_mmu (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); SET_ZFLG (1); m68k_incpci (6); Exception (5); goto endlabel12165; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpci (6); } }}}}endlabel12165: ; return 154 * CYCLE_UNIT / 2; } /* DIVS.W (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_81fa_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); SET_ZFLG (1); m68k_incpci (4); Exception (5); goto endlabel12166; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpci (4); } }}}}endlabel12166: ; return 150 * CYCLE_UNIT / 2; } /* DIVS.W (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_81fb_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpci (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_s16 src = get_word_mmu (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); SET_ZFLG (1); m68k_incpci (0); Exception (5); goto endlabel12167; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } } }}}}}endlabel12167: ; return 150 * CYCLE_UNIT / 2; } /* DIVS.W #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_81fc_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_iword_mmu (2); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); SET_ZFLG (1); m68k_incpci (4); Exception (5); goto endlabel12168; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpci (4); } }}}endlabel12168: ; return 146 * CYCLE_UNIT / 2; } /* SUB.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9000_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* SUB.B (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9010_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte_mmu (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpci (2); return 8 * CYCLE_UNIT / 2; } /* SUB.B (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9018_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte_mmu (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpci (2); return 8 * CYCLE_UNIT / 2; } /* SUB.B -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9020_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte_mmu (srca); m68k_areg (regs, srcreg) = srca; { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpci (2); return 10 * CYCLE_UNIT / 2; } /* SUB.B (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9028_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 src = get_byte_mmu (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpci (4); return 12 * CYCLE_UNIT / 2; } /* SUB.B (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9030_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s8 src = get_byte_mmu (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}}}return 12 * CYCLE_UNIT / 2; } /* SUB.B (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9038_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 src = get_byte_mmu (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpci (4); return 12 * CYCLE_UNIT / 2; } /* SUB.B (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9039_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong_mmu (2); { uae_s8 src = get_byte_mmu (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpci (6); return 16 * CYCLE_UNIT / 2; } /* SUB.B (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_903a_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 src = get_byte_mmu (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpci (4); return 12 * CYCLE_UNIT / 2; } /* SUB.B (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_903b_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpci (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_s8 src = get_byte_mmu (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}}}return 12 * CYCLE_UNIT / 2; } /* SUB.B #.B,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_903c_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = get_ibyte_mmu (2); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}} m68k_incpci (4); return 12 * CYCLE_UNIT / 2; } /* SUB.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9040_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* SUB.W An,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9048_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* SUB.W (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9050_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word_mmu (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} m68k_incpci (2); return 8 * CYCLE_UNIT / 2; } /* SUB.W (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9058_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word_mmu (srca); m68k_areg (regs, srcreg) += 2; { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} m68k_incpci (2); return 8 * CYCLE_UNIT / 2; } /* SUB.W -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9060_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = get_word_mmu (srca); m68k_areg (regs, srcreg) = srca; { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} m68k_incpci (2); return 10 * CYCLE_UNIT / 2; } /* SUB.W (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9068_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} m68k_incpci (4); return 12 * CYCLE_UNIT / 2; } /* SUB.W (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9070_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s16 src = get_word_mmu (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}}return 12 * CYCLE_UNIT / 2; } /* SUB.W (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9078_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} m68k_incpci (4); return 12 * CYCLE_UNIT / 2; } /* SUB.W (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9079_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong_mmu (2); { uae_s16 src = get_word_mmu (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} m68k_incpci (6); return 16 * CYCLE_UNIT / 2; } /* SUB.W (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_907a_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} m68k_incpci (4); return 12 * CYCLE_UNIT / 2; } /* SUB.W (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_907b_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpci (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_s16 src = get_word_mmu (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}}return 12 * CYCLE_UNIT / 2; } /* SUB.W #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_907c_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_iword_mmu (2); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}} m68k_incpci (4); return 8 * CYCLE_UNIT / 2; } /* SUB.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9080_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* SUB.L An,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9088_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* SUB.L (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9090_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long_mmu (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} m68k_incpci (2); return 12 * CYCLE_UNIT / 2; } /* SUB.L (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9098_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long_mmu (srca); m68k_areg (regs, srcreg) += 4; { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} m68k_incpci (2); return 12 * CYCLE_UNIT / 2; } /* SUB.L -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_90a0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = get_long_mmu (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} m68k_incpci (2); return 14 * CYCLE_UNIT / 2; } /* SUB.L (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_90a8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 src = get_long_mmu (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} m68k_incpci (4); return 16 * CYCLE_UNIT / 2; } /* SUB.L (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_90b0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s32 src = get_long_mmu (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}}}return 16 * CYCLE_UNIT / 2; } /* SUB.L (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_90b8_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 src = get_long_mmu (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} m68k_incpci (4); return 16 * CYCLE_UNIT / 2; } /* SUB.L (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_90b9_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong_mmu (2); { uae_s32 src = get_long_mmu (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} m68k_incpci (6); return 20 * CYCLE_UNIT / 2; } /* SUB.L (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_90ba_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 src = get_long_mmu (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} m68k_incpci (4); return 16 * CYCLE_UNIT / 2; } /* SUB.L (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_90bb_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpci (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_s32 src = get_long_mmu (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}}}return 16 * CYCLE_UNIT / 2; } /* SUB.L #.L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_90bc_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_ilong_mmu (2); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} m68k_incpci (6); return 12 * CYCLE_UNIT / 2; } /* SUBA.W Dn,An */ uae_u32 REGPARAM2 CPUFUNC(op_90c0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* SUBA.W An,An */ uae_u32 REGPARAM2 CPUFUNC(op_90c8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* SUBA.W (An),An */ uae_u32 REGPARAM2 CPUFUNC(op_90d0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word_mmu (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpci (2); return 8 * CYCLE_UNIT / 2; } /* SUBA.W (An)+,An */ uae_u32 REGPARAM2 CPUFUNC(op_90d8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word_mmu (srca); m68k_areg (regs, srcreg) += 2; { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpci (2); return 8 * CYCLE_UNIT / 2; } /* SUBA.W -(An),An */ uae_u32 REGPARAM2 CPUFUNC(op_90e0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = get_word_mmu (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpci (2); return 10 * CYCLE_UNIT / 2; } /* SUBA.W (d16,An),An */ uae_u32 REGPARAM2 CPUFUNC(op_90e8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpci (4); return 12 * CYCLE_UNIT / 2; } /* SUBA.W (d8,An,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_90f0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s16 src = get_word_mmu (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}}}return 12 * CYCLE_UNIT / 2; } /* SUBA.W (xxx).W,An */ uae_u32 REGPARAM2 CPUFUNC(op_90f8_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpci (4); return 12 * CYCLE_UNIT / 2; } /* SUBA.W (xxx).L,An */ uae_u32 REGPARAM2 CPUFUNC(op_90f9_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong_mmu (2); { uae_s16 src = get_word_mmu (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpci (6); return 16 * CYCLE_UNIT / 2; } /* SUBA.W (d16,PC),An */ uae_u32 REGPARAM2 CPUFUNC(op_90fa_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpci (4); return 12 * CYCLE_UNIT / 2; } /* SUBA.W (d8,PC,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_90fb_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpci (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_s16 src = get_word_mmu (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}}}return 12 * CYCLE_UNIT / 2; } /* SUBA.W #.W,An */ uae_u32 REGPARAM2 CPUFUNC(op_90fc_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_iword_mmu (2); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpci (4); return 8 * CYCLE_UNIT / 2; } /* SUBX.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9100_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = dst - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* SUBX.B -(An),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_9108_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte_mmu (srca); mmufixup[0].reg = srcreg; mmufixup[0].value = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = get_byte_mmu (dsta); m68k_areg (regs, dstreg) = dsta; mmufixup[0].reg = -1; { uae_u32 newv = dst - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, newv); }}}}}}}return 16 * CYCLE_UNIT / 2; } /* SUB.B Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_9110_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte_mmu (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, newv); }}}}}}}return 12 * CYCLE_UNIT / 2; } /* SUB.B Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_9118_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte_mmu (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, newv); }}}}}}}return 12 * CYCLE_UNIT / 2; } /* SUB.B Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_9120_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = get_byte_mmu (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, newv); }}}}}}}return 14 * CYCLE_UNIT / 2; } /* SUB.B Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_9128_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 dst = get_byte_mmu (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, newv); }}}}}}}return 16 * CYCLE_UNIT / 2; } /* SUB.B Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_9130_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpci (2); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); { uae_s8 dst = get_byte_mmu (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, newv); }}}}}}}}return 16 * CYCLE_UNIT / 2; } /* SUB.B Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_9138_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 dst = get_byte_mmu (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, newv); }}}}}}}return 16 * CYCLE_UNIT / 2; } /* SUB.B Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_9139_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_ilong_mmu (2); { uae_s8 dst = get_byte_mmu (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, newv); }}}}}}}return 20 * CYCLE_UNIT / 2; } /* SUBX.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9140_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = dst - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* SUBX.W -(An),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_9148_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = get_word_mmu (srca); mmufixup[0].reg = srcreg; mmufixup[0].value = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = get_word_mmu (dsta); m68k_areg (regs, dstreg) = dsta; mmufixup[0].reg = -1; { uae_u32 newv = dst - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, newv); }}}}}}}return 16 * CYCLE_UNIT / 2; } /* SUB.W Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_9150_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = get_word_mmu (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, newv); }}}}}}}return 12 * CYCLE_UNIT / 2; } /* SUB.W Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_9158_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = get_word_mmu (dsta); m68k_areg (regs, dstreg) += 2; {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, newv); }}}}}}}return 12 * CYCLE_UNIT / 2; } /* SUB.W Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_9160_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = get_word_mmu (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, newv); }}}}}}}return 14 * CYCLE_UNIT / 2; } /* SUB.W Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_9168_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 dst = get_word_mmu (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, newv); }}}}}}}return 16 * CYCLE_UNIT / 2; } /* SUB.W Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_9170_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpci (2); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); { uae_s16 dst = get_word_mmu (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, newv); }}}}}}}}return 16 * CYCLE_UNIT / 2; } /* SUB.W Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_9178_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 dst = get_word_mmu (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, newv); }}}}}}}return 16 * CYCLE_UNIT / 2; } /* SUB.W Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_9179_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_ilong_mmu (2); { uae_s16 dst = get_word_mmu (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, newv); }}}}}}}return 20 * CYCLE_UNIT / 2; } /* SUBX.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9180_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = dst - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); }}}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* SUBX.L -(An),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_9188_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = get_long_mmu (srca); mmufixup[0].reg = srcreg; mmufixup[0].value = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = get_long_mmu (dsta); m68k_areg (regs, dstreg) = dsta; mmufixup[0].reg = -1; { uae_u32 newv = dst - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, newv); }}}}}}}return 28 * CYCLE_UNIT / 2; } /* SUB.L Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_9190_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = get_long_mmu (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, newv); }}}}}}}return 20 * CYCLE_UNIT / 2; } /* SUB.L Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_9198_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = get_long_mmu (dsta); m68k_areg (regs, dstreg) += 4; {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, newv); }}}}}}}return 20 * CYCLE_UNIT / 2; } /* SUB.L Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_91a0_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = get_long_mmu (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, newv); }}}}}}}return 22 * CYCLE_UNIT / 2; } /* SUB.L Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_91a8_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 dst = get_long_mmu (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, newv); }}}}}}}return 24 * CYCLE_UNIT / 2; } /* SUB.L Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_91b0_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpci (2); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); { uae_s32 dst = get_long_mmu (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, newv); }}}}}}}}return 24 * CYCLE_UNIT / 2; } /* SUB.L Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_91b8_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 dst = get_long_mmu (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, newv); }}}}}}}return 24 * CYCLE_UNIT / 2; } /* SUB.L Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_91b9_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_ilong_mmu (2); { uae_s32 dst = get_long_mmu (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, newv); }}}}}}}return 28 * CYCLE_UNIT / 2; } /* SUBA.L Dn,An */ uae_u32 REGPARAM2 CPUFUNC(op_91c0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* SUBA.L An,An */ uae_u32 REGPARAM2 CPUFUNC(op_91c8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* SUBA.L (An),An */ uae_u32 REGPARAM2 CPUFUNC(op_91d0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long_mmu (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpci (2); return 12 * CYCLE_UNIT / 2; } /* SUBA.L (An)+,An */ uae_u32 REGPARAM2 CPUFUNC(op_91d8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long_mmu (srca); m68k_areg (regs, srcreg) += 4; { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpci (2); return 12 * CYCLE_UNIT / 2; } /* SUBA.L -(An),An */ uae_u32 REGPARAM2 CPUFUNC(op_91e0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = get_long_mmu (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpci (2); return 14 * CYCLE_UNIT / 2; } /* SUBA.L (d16,An),An */ uae_u32 REGPARAM2 CPUFUNC(op_91e8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 src = get_long_mmu (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpci (4); return 16 * CYCLE_UNIT / 2; } /* SUBA.L (d8,An,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_91f0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s32 src = get_long_mmu (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}}}return 16 * CYCLE_UNIT / 2; } /* SUBA.L (xxx).W,An */ uae_u32 REGPARAM2 CPUFUNC(op_91f8_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 src = get_long_mmu (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpci (4); return 16 * CYCLE_UNIT / 2; } /* SUBA.L (xxx).L,An */ uae_u32 REGPARAM2 CPUFUNC(op_91f9_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong_mmu (2); { uae_s32 src = get_long_mmu (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpci (6); return 20 * CYCLE_UNIT / 2; } /* SUBA.L (d16,PC),An */ uae_u32 REGPARAM2 CPUFUNC(op_91fa_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 src = get_long_mmu (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpci (4); return 16 * CYCLE_UNIT / 2; } /* SUBA.L (d8,PC,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_91fb_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpci (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_s32 src = get_long_mmu (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}}}return 16 * CYCLE_UNIT / 2; } /* SUBA.L #.L,An */ uae_u32 REGPARAM2 CPUFUNC(op_91fc_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_ilong_mmu (2); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpci (6); return 12 * CYCLE_UNIT / 2; } /* CMP.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b000_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* CMP.B (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b010_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte_mmu (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpci (2); return 8 * CYCLE_UNIT / 2; } /* CMP.B (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b018_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte_mmu (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpci (2); return 8 * CYCLE_UNIT / 2; } /* CMP.B -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b020_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte_mmu (srca); m68k_areg (regs, srcreg) = srca; { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpci (2); return 10 * CYCLE_UNIT / 2; } /* CMP.B (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b028_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 src = get_byte_mmu (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpci (4); return 12 * CYCLE_UNIT / 2; } /* CMP.B (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b030_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s8 src = get_byte_mmu (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}}}return 12 * CYCLE_UNIT / 2; } /* CMP.B (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b038_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 src = get_byte_mmu (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpci (4); return 12 * CYCLE_UNIT / 2; } /* CMP.B (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b039_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong_mmu (2); { uae_s8 src = get_byte_mmu (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpci (6); return 16 * CYCLE_UNIT / 2; } /* CMP.B (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b03a_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 src = get_byte_mmu (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpci (4); return 12 * CYCLE_UNIT / 2; } /* CMP.B (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b03b_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpci (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_s8 src = get_byte_mmu (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}}}return 12 * CYCLE_UNIT / 2; } /* CMP.B #.B,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b03c_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = get_ibyte_mmu (2); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpci (4); return 12 * CYCLE_UNIT / 2; } /* CMP.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b040_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* CMP.W An,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b048_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* CMP.W (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b050_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word_mmu (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpci (2); return 8 * CYCLE_UNIT / 2; } /* CMP.W (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b058_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word_mmu (srca); m68k_areg (regs, srcreg) += 2; { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpci (2); return 8 * CYCLE_UNIT / 2; } /* CMP.W -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b060_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = get_word_mmu (srca); m68k_areg (regs, srcreg) = srca; { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpci (2); return 10 * CYCLE_UNIT / 2; } /* CMP.W (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b068_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpci (4); return 12 * CYCLE_UNIT / 2; } /* CMP.W (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b070_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s16 src = get_word_mmu (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}}}return 12 * CYCLE_UNIT / 2; } /* CMP.W (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b078_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpci (4); return 12 * CYCLE_UNIT / 2; } /* CMP.W (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b079_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong_mmu (2); { uae_s16 src = get_word_mmu (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpci (6); return 16 * CYCLE_UNIT / 2; } /* CMP.W (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b07a_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpci (4); return 12 * CYCLE_UNIT / 2; } /* CMP.W (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b07b_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpci (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_s16 src = get_word_mmu (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}}}return 12 * CYCLE_UNIT / 2; } /* CMP.W #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b07c_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_iword_mmu (2); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpci (4); return 8 * CYCLE_UNIT / 2; } /* CMP.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b080_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* CMP.L An,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b088_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } #endif #ifdef PART_7 /* CMP.L (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b090_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long_mmu (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpci (2); return 12 * CYCLE_UNIT / 2; } /* CMP.L (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b098_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long_mmu (srca); m68k_areg (regs, srcreg) += 4; { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpci (2); return 12 * CYCLE_UNIT / 2; } /* CMP.L -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b0a0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = get_long_mmu (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpci (2); return 14 * CYCLE_UNIT / 2; } /* CMP.L (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b0a8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 src = get_long_mmu (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpci (4); return 16 * CYCLE_UNIT / 2; } /* CMP.L (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b0b0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s32 src = get_long_mmu (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}}return 16 * CYCLE_UNIT / 2; } /* CMP.L (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b0b8_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 src = get_long_mmu (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpci (4); return 16 * CYCLE_UNIT / 2; } /* CMP.L (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b0b9_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong_mmu (2); { uae_s32 src = get_long_mmu (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpci (6); return 20 * CYCLE_UNIT / 2; } /* CMP.L (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b0ba_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 src = get_long_mmu (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpci (4); return 16 * CYCLE_UNIT / 2; } /* CMP.L (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b0bb_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpci (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_s32 src = get_long_mmu (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}}return 16 * CYCLE_UNIT / 2; } /* CMP.L #.L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b0bc_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_ilong_mmu (2); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpci (6); return 12 * CYCLE_UNIT / 2; } /* CMPA.W Dn,An */ uae_u32 REGPARAM2 CPUFUNC(op_b0c0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* CMPA.W An,An */ uae_u32 REGPARAM2 CPUFUNC(op_b0c8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* CMPA.W (An),An */ uae_u32 REGPARAM2 CPUFUNC(op_b0d0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word_mmu (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpci (2); return 8 * CYCLE_UNIT / 2; } /* CMPA.W (An)+,An */ uae_u32 REGPARAM2 CPUFUNC(op_b0d8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word_mmu (srca); m68k_areg (regs, srcreg) += 2; { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpci (2); return 8 * CYCLE_UNIT / 2; } /* CMPA.W -(An),An */ uae_u32 REGPARAM2 CPUFUNC(op_b0e0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = get_word_mmu (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpci (2); return 10 * CYCLE_UNIT / 2; } /* CMPA.W (d16,An),An */ uae_u32 REGPARAM2 CPUFUNC(op_b0e8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpci (4); return 12 * CYCLE_UNIT / 2; } /* CMPA.W (d8,An,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_b0f0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s16 src = get_word_mmu (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}}return 12 * CYCLE_UNIT / 2; } /* CMPA.W (xxx).W,An */ uae_u32 REGPARAM2 CPUFUNC(op_b0f8_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpci (4); return 12 * CYCLE_UNIT / 2; } /* CMPA.W (xxx).L,An */ uae_u32 REGPARAM2 CPUFUNC(op_b0f9_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong_mmu (2); { uae_s16 src = get_word_mmu (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpci (6); return 16 * CYCLE_UNIT / 2; } /* CMPA.W (d16,PC),An */ uae_u32 REGPARAM2 CPUFUNC(op_b0fa_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpci (4); return 12 * CYCLE_UNIT / 2; } /* CMPA.W (d8,PC,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_b0fb_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpci (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_s16 src = get_word_mmu (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}}return 12 * CYCLE_UNIT / 2; } /* CMPA.W #.W,An */ uae_u32 REGPARAM2 CPUFUNC(op_b0fc_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_iword_mmu (2); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpci (4); return 8 * CYCLE_UNIT / 2; } /* EOR.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b100_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* CMPM.B (An)+,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_b108_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte_mmu (srca); mmufixup[0].reg = srcreg; mmufixup[0].value = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte_mmu (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; mmufixup[0].reg = -1; {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpci (2); return 12 * CYCLE_UNIT / 2; } /* EOR.B Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_b110_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte_mmu (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 12 * CYCLE_UNIT / 2; } /* EOR.B Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_b118_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte_mmu (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 12 * CYCLE_UNIT / 2; } /* EOR.B Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_b120_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = get_byte_mmu (dsta); m68k_areg (regs, dstreg) = dsta; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 14 * CYCLE_UNIT / 2; } /* EOR.B Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_b128_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 dst = get_byte_mmu (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 16 * CYCLE_UNIT / 2; } /* EOR.B Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_b130_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpci (2); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); { uae_s8 dst = get_byte_mmu (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}}return 16 * CYCLE_UNIT / 2; } /* EOR.B Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_b138_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 dst = get_byte_mmu (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 16 * CYCLE_UNIT / 2; } /* EOR.B Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_b139_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_ilong_mmu (2); { uae_s8 dst = get_byte_mmu (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 20 * CYCLE_UNIT / 2; } /* EOR.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b140_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* CMPM.W (An)+,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_b148_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word_mmu (srca); mmufixup[0].reg = srcreg; mmufixup[0].value = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += 2; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = get_word_mmu (dsta); m68k_areg (regs, dstreg) += 2; mmufixup[0].reg = -1; {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpci (2); return 12 * CYCLE_UNIT / 2; } /* EOR.W Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_b150_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = get_word_mmu (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 12 * CYCLE_UNIT / 2; } /* EOR.W Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_b158_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = get_word_mmu (dsta); m68k_areg (regs, dstreg) += 2; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 12 * CYCLE_UNIT / 2; } /* EOR.W Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_b160_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = get_word_mmu (dsta); m68k_areg (regs, dstreg) = dsta; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 14 * CYCLE_UNIT / 2; } /* EOR.W Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_b168_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 dst = get_word_mmu (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 16 * CYCLE_UNIT / 2; } /* EOR.W Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_b170_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpci (2); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); { uae_s16 dst = get_word_mmu (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}}return 16 * CYCLE_UNIT / 2; } /* EOR.W Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_b178_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 dst = get_word_mmu (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 16 * CYCLE_UNIT / 2; } /* EOR.W Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_b179_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_ilong_mmu (2); { uae_s16 dst = get_word_mmu (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 20 * CYCLE_UNIT / 2; } /* EOR.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b180_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* CMPM.L (An)+,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_b188_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long_mmu (srca); mmufixup[0].reg = srcreg; mmufixup[0].value = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += 4; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = get_long_mmu (dsta); m68k_areg (regs, dstreg) += 4; mmufixup[0].reg = -1; {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpci (2); return 20 * CYCLE_UNIT / 2; } /* EOR.L Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_b190_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = get_long_mmu (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 20 * CYCLE_UNIT / 2; } /* EOR.L Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_b198_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = get_long_mmu (dsta); m68k_areg (regs, dstreg) += 4; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 20 * CYCLE_UNIT / 2; } /* EOR.L Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_b1a0_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = get_long_mmu (dsta); m68k_areg (regs, dstreg) = dsta; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 22 * CYCLE_UNIT / 2; } /* EOR.L Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_b1a8_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 dst = get_long_mmu (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 24 * CYCLE_UNIT / 2; } /* EOR.L Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_b1b0_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpci (2); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); { uae_s32 dst = get_long_mmu (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}}return 24 * CYCLE_UNIT / 2; } /* EOR.L Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_b1b8_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 dst = get_long_mmu (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 24 * CYCLE_UNIT / 2; } /* EOR.L Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_b1b9_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_ilong_mmu (2); { uae_s32 dst = get_long_mmu (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 28 * CYCLE_UNIT / 2; } /* CMPA.L Dn,An */ uae_u32 REGPARAM2 CPUFUNC(op_b1c0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* CMPA.L An,An */ uae_u32 REGPARAM2 CPUFUNC(op_b1c8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* CMPA.L (An),An */ uae_u32 REGPARAM2 CPUFUNC(op_b1d0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long_mmu (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpci (2); return 12 * CYCLE_UNIT / 2; } /* CMPA.L (An)+,An */ uae_u32 REGPARAM2 CPUFUNC(op_b1d8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long_mmu (srca); m68k_areg (regs, srcreg) += 4; { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpci (2); return 12 * CYCLE_UNIT / 2; } /* CMPA.L -(An),An */ uae_u32 REGPARAM2 CPUFUNC(op_b1e0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = get_long_mmu (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpci (2); return 14 * CYCLE_UNIT / 2; } /* CMPA.L (d16,An),An */ uae_u32 REGPARAM2 CPUFUNC(op_b1e8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 src = get_long_mmu (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpci (4); return 16 * CYCLE_UNIT / 2; } /* CMPA.L (d8,An,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_b1f0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s32 src = get_long_mmu (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}}return 16 * CYCLE_UNIT / 2; } /* CMPA.L (xxx).W,An */ uae_u32 REGPARAM2 CPUFUNC(op_b1f8_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 src = get_long_mmu (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpci (4); return 16 * CYCLE_UNIT / 2; } /* CMPA.L (xxx).L,An */ uae_u32 REGPARAM2 CPUFUNC(op_b1f9_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong_mmu (2); { uae_s32 src = get_long_mmu (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpci (6); return 20 * CYCLE_UNIT / 2; } /* CMPA.L (d16,PC),An */ uae_u32 REGPARAM2 CPUFUNC(op_b1fa_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 src = get_long_mmu (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpci (4); return 16 * CYCLE_UNIT / 2; } /* CMPA.L (d8,PC,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_b1fb_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpci (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_s32 src = get_long_mmu (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}}return 16 * CYCLE_UNIT / 2; } /* CMPA.L #.L,An */ uae_u32 REGPARAM2 CPUFUNC(op_b1fc_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_ilong_mmu (2); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpci (6); return 12 * CYCLE_UNIT / 2; } /* AND.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c000_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* AND.B (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c010_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte_mmu (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpci (2); return 8 * CYCLE_UNIT / 2; } /* AND.B (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c018_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte_mmu (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpci (2); return 8 * CYCLE_UNIT / 2; } /* AND.B -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c020_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte_mmu (srca); m68k_areg (regs, srcreg) = srca; { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpci (2); return 10 * CYCLE_UNIT / 2; } /* AND.B (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c028_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 src = get_byte_mmu (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpci (4); return 12 * CYCLE_UNIT / 2; } /* AND.B (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c030_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s8 src = get_byte_mmu (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}}}return 12 * CYCLE_UNIT / 2; } /* AND.B (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c038_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 src = get_byte_mmu (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpci (4); return 12 * CYCLE_UNIT / 2; } /* AND.B (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c039_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong_mmu (2); { uae_s8 src = get_byte_mmu (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpci (6); return 16 * CYCLE_UNIT / 2; } /* AND.B (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c03a_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 src = get_byte_mmu (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpci (4); return 12 * CYCLE_UNIT / 2; } /* AND.B (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c03b_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpci (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_s8 src = get_byte_mmu (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}}}return 12 * CYCLE_UNIT / 2; } /* AND.B #.B,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c03c_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = get_ibyte_mmu (2); { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}} m68k_incpci (4); return 12 * CYCLE_UNIT / 2; } /* AND.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c040_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* AND.W (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c050_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word_mmu (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} m68k_incpci (2); return 8 * CYCLE_UNIT / 2; } /* AND.W (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c058_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word_mmu (srca); m68k_areg (regs, srcreg) += 2; { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} m68k_incpci (2); return 8 * CYCLE_UNIT / 2; } /* AND.W -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c060_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = get_word_mmu (srca); m68k_areg (regs, srcreg) = srca; { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} m68k_incpci (2); return 10 * CYCLE_UNIT / 2; } /* AND.W (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c068_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} m68k_incpci (4); return 12 * CYCLE_UNIT / 2; } /* AND.W (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c070_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s16 src = get_word_mmu (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}}return 12 * CYCLE_UNIT / 2; } /* AND.W (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c078_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} m68k_incpci (4); return 12 * CYCLE_UNIT / 2; } /* AND.W (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c079_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong_mmu (2); { uae_s16 src = get_word_mmu (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} m68k_incpci (6); return 16 * CYCLE_UNIT / 2; } /* AND.W (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c07a_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} m68k_incpci (4); return 12 * CYCLE_UNIT / 2; } /* AND.W (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c07b_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpci (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_s16 src = get_word_mmu (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}}return 12 * CYCLE_UNIT / 2; } /* AND.W #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c07c_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_iword_mmu (2); { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}} m68k_incpci (4); return 8 * CYCLE_UNIT / 2; } /* AND.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c080_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* AND.L (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c090_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long_mmu (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} m68k_incpci (2); return 12 * CYCLE_UNIT / 2; } /* AND.L (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c098_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long_mmu (srca); m68k_areg (regs, srcreg) += 4; { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} m68k_incpci (2); return 12 * CYCLE_UNIT / 2; } /* AND.L -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0a0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = get_long_mmu (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} m68k_incpci (2); return 14 * CYCLE_UNIT / 2; } /* AND.L (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0a8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 src = get_long_mmu (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} m68k_incpci (4); return 16 * CYCLE_UNIT / 2; } /* AND.L (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0b0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s32 src = get_long_mmu (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}}}return 16 * CYCLE_UNIT / 2; } /* AND.L (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0b8_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 src = get_long_mmu (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} m68k_incpci (4); return 16 * CYCLE_UNIT / 2; } /* AND.L (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0b9_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong_mmu (2); { uae_s32 src = get_long_mmu (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} m68k_incpci (6); return 20 * CYCLE_UNIT / 2; } /* AND.L (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0ba_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 src = get_long_mmu (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} m68k_incpci (4); return 16 * CYCLE_UNIT / 2; } /* AND.L (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0bb_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpci (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_s32 src = get_long_mmu (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}}}return 16 * CYCLE_UNIT / 2; } /* AND.L #.L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0bc_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_ilong_mmu (2); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}} m68k_incpci (6); return 12 * CYCLE_UNIT / 2; } /* MULU.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0c0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); m68k_incpci (2); }}}}return 58 * CYCLE_UNIT / 2; } /* MULU.W (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0d0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word_mmu (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); m68k_incpci (2); }}}}}return 62 * CYCLE_UNIT / 2; } /* MULU.W (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0d8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word_mmu (srca); m68k_areg (regs, srcreg) += 2; { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); m68k_incpci (2); }}}}}return 62 * CYCLE_UNIT / 2; } /* MULU.W -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0e0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = get_word_mmu (srca); m68k_areg (regs, srcreg) = srca; { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); m68k_incpci (2); }}}}}return 64 * CYCLE_UNIT / 2; } /* MULU.W (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0e8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); m68k_incpci (4); }}}}}return 66 * CYCLE_UNIT / 2; } /* MULU.W (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0f0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s16 src = get_word_mmu (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}return 66 * CYCLE_UNIT / 2; } /* MULU.W (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0f8_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); m68k_incpci (4); }}}}}return 66 * CYCLE_UNIT / 2; } /* MULU.W (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0f9_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong_mmu (2); { uae_s16 src = get_word_mmu (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); m68k_incpci (6); }}}}}return 70 * CYCLE_UNIT / 2; } /* MULU.W (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0fa_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); m68k_incpci (4); }}}}}return 66 * CYCLE_UNIT / 2; } /* MULU.W (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0fb_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpci (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_s16 src = get_word_mmu (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}return 66 * CYCLE_UNIT / 2; } /* MULU.W #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0fc_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_iword_mmu (2); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); m68k_incpci (4); }}}}return 62 * CYCLE_UNIT / 2; } /* ABCD.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c100_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); { uae_u16 newv_lo = (src & 0xF) + (dst & 0xF) + (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = (src & 0xF0) + (dst & 0xF0); uae_u16 newv, tmp_newv; int cflg; newv = tmp_newv = newv_hi + newv_lo; if (newv_lo > 9) { newv += 6; } cflg = (newv & 0x3F0) > 0x90; if (cflg) newv += 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* ABCD.B -(An),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_c108_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte_mmu (srca); mmufixup[0].reg = srcreg; mmufixup[0].value = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = get_byte_mmu (dsta); m68k_areg (regs, dstreg) = dsta; mmufixup[0].reg = -1; { uae_u16 newv_lo = (src & 0xF) + (dst & 0xF) + (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = (src & 0xF0) + (dst & 0xF0); uae_u16 newv, tmp_newv; int cflg; newv = tmp_newv = newv_hi + newv_lo; if (newv_lo > 9) { newv += 6; } cflg = (newv & 0x3F0) > 0x90; if (cflg) newv += 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, newv); }}}}}}return 16 * CYCLE_UNIT / 2; } /* AND.B Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_c110_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte_mmu (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 12 * CYCLE_UNIT / 2; } /* AND.B Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_c118_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte_mmu (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 12 * CYCLE_UNIT / 2; } /* AND.B Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_c120_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = get_byte_mmu (dsta); m68k_areg (regs, dstreg) = dsta; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 14 * CYCLE_UNIT / 2; } /* AND.B Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_c128_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 dst = get_byte_mmu (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 16 * CYCLE_UNIT / 2; } /* AND.B Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_c130_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpci (2); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); { uae_s8 dst = get_byte_mmu (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}}return 16 * CYCLE_UNIT / 2; } /* AND.B Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_c138_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 dst = get_byte_mmu (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 16 * CYCLE_UNIT / 2; } /* AND.B Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_c139_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_ilong_mmu (2); { uae_s8 dst = get_byte_mmu (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, src); }}}}return 20 * CYCLE_UNIT / 2; } /* EXG.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c140_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); m68k_dreg (regs, srcreg) = (dst); m68k_dreg (regs, dstreg) = (src); }}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* EXG.L An,An */ uae_u32 REGPARAM2 CPUFUNC(op_c148_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); m68k_areg (regs, srcreg) = (dst); m68k_areg (regs, dstreg) = (src); }}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* AND.W Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_c150_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = get_word_mmu (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 12 * CYCLE_UNIT / 2; } /* AND.W Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_c158_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = get_word_mmu (dsta); m68k_areg (regs, dstreg) += 2; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 12 * CYCLE_UNIT / 2; } /* AND.W Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_c160_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = get_word_mmu (dsta); m68k_areg (regs, dstreg) = dsta; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 14 * CYCLE_UNIT / 2; } /* AND.W Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_c168_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 dst = get_word_mmu (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 16 * CYCLE_UNIT / 2; } /* AND.W Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_c170_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpci (2); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); { uae_s16 dst = get_word_mmu (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}}return 16 * CYCLE_UNIT / 2; } /* AND.W Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_c178_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 dst = get_word_mmu (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 16 * CYCLE_UNIT / 2; } /* AND.W Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_c179_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_ilong_mmu (2); { uae_s16 dst = get_word_mmu (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, src); }}}}return 20 * CYCLE_UNIT / 2; } /* EXG.L Dn,An */ uae_u32 REGPARAM2 CPUFUNC(op_c188_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); m68k_dreg (regs, srcreg) = (dst); m68k_areg (regs, dstreg) = (src); }}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* AND.L Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_c190_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = get_long_mmu (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 20 * CYCLE_UNIT / 2; } /* AND.L Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_c198_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = get_long_mmu (dsta); m68k_areg (regs, dstreg) += 4; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 20 * CYCLE_UNIT / 2; } /* AND.L Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_c1a0_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = get_long_mmu (dsta); m68k_areg (regs, dstreg) = dsta; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 22 * CYCLE_UNIT / 2; } /* AND.L Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_c1a8_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 dst = get_long_mmu (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 24 * CYCLE_UNIT / 2; } /* AND.L Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_c1b0_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpci (2); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); { uae_s32 dst = get_long_mmu (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}}return 24 * CYCLE_UNIT / 2; } /* AND.L Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_c1b8_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 dst = get_long_mmu (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 24 * CYCLE_UNIT / 2; } /* AND.L Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_c1b9_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_ilong_mmu (2); { uae_s32 dst = get_long_mmu (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, src); }}}}return 28 * CYCLE_UNIT / 2; } /* MULS.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c1c0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); }}}} m68k_incpci (2); return 58 * CYCLE_UNIT / 2; } /* MULS.W (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c1d0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word_mmu (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); }}}}} m68k_incpci (2); return 62 * CYCLE_UNIT / 2; } /* MULS.W (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c1d8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word_mmu (srca); m68k_areg (regs, srcreg) += 2; { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); }}}}} m68k_incpci (2); return 62 * CYCLE_UNIT / 2; } /* MULS.W -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c1e0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = get_word_mmu (srca); m68k_areg (regs, srcreg) = srca; { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); }}}}} m68k_incpci (2); return 64 * CYCLE_UNIT / 2; } /* MULS.W (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c1e8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); }}}}} m68k_incpci (4); return 66 * CYCLE_UNIT / 2; } /* MULS.W (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c1f0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s16 src = get_word_mmu (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}return 66 * CYCLE_UNIT / 2; } /* MULS.W (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c1f8_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); }}}}} m68k_incpci (4); return 66 * CYCLE_UNIT / 2; } /* MULS.W (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c1f9_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong_mmu (2); { uae_s16 src = get_word_mmu (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); }}}}} m68k_incpci (6); return 70 * CYCLE_UNIT / 2; } /* MULS.W (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c1fa_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); }}}}} m68k_incpci (4); return 66 * CYCLE_UNIT / 2; } /* MULS.W (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c1fb_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpci (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_s16 src = get_word_mmu (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}return 66 * CYCLE_UNIT / 2; } /* MULS.W #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c1fc_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_iword_mmu (2); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); }}}} m68k_incpci (4); return 62 * CYCLE_UNIT / 2; } /* ADD.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d000_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* ADD.B (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d010_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte_mmu (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpci (2); return 8 * CYCLE_UNIT / 2; } /* ADD.B (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d018_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte_mmu (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpci (2); return 8 * CYCLE_UNIT / 2; } /* ADD.B -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d020_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte_mmu (srca); m68k_areg (regs, srcreg) = srca; { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpci (2); return 10 * CYCLE_UNIT / 2; } /* ADD.B (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d028_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 src = get_byte_mmu (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpci (4); return 12 * CYCLE_UNIT / 2; } /* ADD.B (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d030_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s8 src = get_byte_mmu (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}}}return 12 * CYCLE_UNIT / 2; } /* ADD.B (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d038_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 src = get_byte_mmu (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpci (4); return 12 * CYCLE_UNIT / 2; } /* ADD.B (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d039_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong_mmu (2); { uae_s8 src = get_byte_mmu (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpci (6); return 16 * CYCLE_UNIT / 2; } /* ADD.B (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d03a_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 src = get_byte_mmu (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpci (4); return 12 * CYCLE_UNIT / 2; } /* ADD.B (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d03b_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpci (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_s8 src = get_byte_mmu (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}}}return 12 * CYCLE_UNIT / 2; } /* ADD.B #.B,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d03c_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = get_ibyte_mmu (2); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}} m68k_incpci (4); return 12 * CYCLE_UNIT / 2; } /* ADD.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d040_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* ADD.W An,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d048_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* ADD.W (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d050_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word_mmu (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} m68k_incpci (2); return 8 * CYCLE_UNIT / 2; } /* ADD.W (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d058_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word_mmu (srca); m68k_areg (regs, srcreg) += 2; { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} m68k_incpci (2); return 8 * CYCLE_UNIT / 2; } /* ADD.W -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d060_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = get_word_mmu (srca); m68k_areg (regs, srcreg) = srca; { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} m68k_incpci (2); return 10 * CYCLE_UNIT / 2; } /* ADD.W (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d068_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} m68k_incpci (4); return 12 * CYCLE_UNIT / 2; } /* ADD.W (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d070_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s16 src = get_word_mmu (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}}return 12 * CYCLE_UNIT / 2; } /* ADD.W (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d078_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} m68k_incpci (4); return 12 * CYCLE_UNIT / 2; } /* ADD.W (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d079_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong_mmu (2); { uae_s16 src = get_word_mmu (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} m68k_incpci (6); return 16 * CYCLE_UNIT / 2; } /* ADD.W (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d07a_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} m68k_incpci (4); return 12 * CYCLE_UNIT / 2; } /* ADD.W (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d07b_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpci (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_s16 src = get_word_mmu (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}}return 12 * CYCLE_UNIT / 2; } /* ADD.W #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d07c_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_iword_mmu (2); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}} m68k_incpci (4); return 8 * CYCLE_UNIT / 2; } /* ADD.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d080_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* ADD.L An,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d088_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* ADD.L (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d090_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long_mmu (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} m68k_incpci (2); return 12 * CYCLE_UNIT / 2; } /* ADD.L (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d098_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long_mmu (srca); m68k_areg (regs, srcreg) += 4; { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} m68k_incpci (2); return 12 * CYCLE_UNIT / 2; } /* ADD.L -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d0a0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = get_long_mmu (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} m68k_incpci (2); return 14 * CYCLE_UNIT / 2; } /* ADD.L (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d0a8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 src = get_long_mmu (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} m68k_incpci (4); return 16 * CYCLE_UNIT / 2; } /* ADD.L (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d0b0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s32 src = get_long_mmu (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}}}return 16 * CYCLE_UNIT / 2; } /* ADD.L (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d0b8_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 src = get_long_mmu (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} m68k_incpci (4); return 16 * CYCLE_UNIT / 2; } /* ADD.L (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d0b9_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong_mmu (2); { uae_s32 src = get_long_mmu (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} m68k_incpci (6); return 20 * CYCLE_UNIT / 2; } /* ADD.L (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d0ba_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 src = get_long_mmu (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} m68k_incpci (4); return 16 * CYCLE_UNIT / 2; } /* ADD.L (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d0bb_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpci (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_s32 src = get_long_mmu (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}}}return 16 * CYCLE_UNIT / 2; } /* ADD.L #.L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d0bc_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_ilong_mmu (2); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} m68k_incpci (6); return 12 * CYCLE_UNIT / 2; } /* ADDA.W Dn,An */ uae_u32 REGPARAM2 CPUFUNC(op_d0c0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* ADDA.W An,An */ uae_u32 REGPARAM2 CPUFUNC(op_d0c8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* ADDA.W (An),An */ uae_u32 REGPARAM2 CPUFUNC(op_d0d0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word_mmu (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpci (2); return 8 * CYCLE_UNIT / 2; } /* ADDA.W (An)+,An */ uae_u32 REGPARAM2 CPUFUNC(op_d0d8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word_mmu (srca); m68k_areg (regs, srcreg) += 2; { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpci (2); return 8 * CYCLE_UNIT / 2; } /* ADDA.W -(An),An */ uae_u32 REGPARAM2 CPUFUNC(op_d0e0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = get_word_mmu (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpci (2); return 10 * CYCLE_UNIT / 2; } /* ADDA.W (d16,An),An */ uae_u32 REGPARAM2 CPUFUNC(op_d0e8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpci (4); return 12 * CYCLE_UNIT / 2; } /* ADDA.W (d8,An,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_d0f0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s16 src = get_word_mmu (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}}}return 12 * CYCLE_UNIT / 2; } /* ADDA.W (xxx).W,An */ uae_u32 REGPARAM2 CPUFUNC(op_d0f8_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpci (4); return 12 * CYCLE_UNIT / 2; } /* ADDA.W (xxx).L,An */ uae_u32 REGPARAM2 CPUFUNC(op_d0f9_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong_mmu (2); { uae_s16 src = get_word_mmu (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpci (6); return 16 * CYCLE_UNIT / 2; } /* ADDA.W (d16,PC),An */ uae_u32 REGPARAM2 CPUFUNC(op_d0fa_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 src = get_word_mmu (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpci (4); return 12 * CYCLE_UNIT / 2; } /* ADDA.W (d8,PC,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_d0fb_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpci (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_s16 src = get_word_mmu (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}}}return 12 * CYCLE_UNIT / 2; } /* ADDA.W #.W,An */ uae_u32 REGPARAM2 CPUFUNC(op_d0fc_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_iword_mmu (2); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpci (4); return 8 * CYCLE_UNIT / 2; } /* ADDX.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d100_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = dst + src + (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgo) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* ADDX.B -(An),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_d108_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte_mmu (srca); mmufixup[0].reg = srcreg; mmufixup[0].value = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = get_byte_mmu (dsta); m68k_areg (regs, dstreg) = dsta; mmufixup[0].reg = -1; { uae_u32 newv = dst + src + (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgo) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, newv); }}}}}}}return 16 * CYCLE_UNIT / 2; } /* ADD.B Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_d110_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte_mmu (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, newv); }}}}}}}return 12 * CYCLE_UNIT / 2; } /* ADD.B Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_d118_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte_mmu (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, newv); }}}}}}}return 12 * CYCLE_UNIT / 2; } /* ADD.B Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_d120_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = get_byte_mmu (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, newv); }}}}}}}return 14 * CYCLE_UNIT / 2; } /* ADD.B Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_d128_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 dst = get_byte_mmu (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, newv); }}}}}}}return 16 * CYCLE_UNIT / 2; } /* ADD.B Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_d130_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpci (2); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); { uae_s8 dst = get_byte_mmu (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, newv); }}}}}}}}return 16 * CYCLE_UNIT / 2; } /* ADD.B Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_d138_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s8 dst = get_byte_mmu (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, newv); }}}}}}}return 16 * CYCLE_UNIT / 2; } /* ADD.B Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_d139_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_ilong_mmu (2); { uae_s8 dst = get_byte_mmu (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_byte_mmu (dsta, newv); }}}}}}}return 20 * CYCLE_UNIT / 2; } /* ADDX.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d140_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = dst + src + (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgo) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* ADDX.W -(An),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_d148_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = get_word_mmu (srca); mmufixup[0].reg = srcreg; mmufixup[0].value = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = get_word_mmu (dsta); m68k_areg (regs, dstreg) = dsta; mmufixup[0].reg = -1; { uae_u32 newv = dst + src + (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgo) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, newv); }}}}}}}return 16 * CYCLE_UNIT / 2; } /* ADD.W Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_d150_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = get_word_mmu (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, newv); }}}}}}}return 12 * CYCLE_UNIT / 2; } /* ADD.W Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_d158_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = get_word_mmu (dsta); m68k_areg (regs, dstreg) += 2; {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, newv); }}}}}}}return 12 * CYCLE_UNIT / 2; } /* ADD.W Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_d160_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = get_word_mmu (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, newv); }}}}}}}return 14 * CYCLE_UNIT / 2; } /* ADD.W Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_d168_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 dst = get_word_mmu (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, newv); }}}}}}}return 16 * CYCLE_UNIT / 2; } /* ADD.W Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_d170_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpci (2); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); { uae_s16 dst = get_word_mmu (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, newv); }}}}}}}}return 16 * CYCLE_UNIT / 2; } /* ADD.W Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_d178_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 dst = get_word_mmu (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, newv); }}}}}}}return 16 * CYCLE_UNIT / 2; } /* ADD.W Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_d179_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_ilong_mmu (2); { uae_s16 dst = get_word_mmu (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_word_mmu (dsta, newv); }}}}}}}return 20 * CYCLE_UNIT / 2; } /* ADDX.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d180_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = dst + src + (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgo) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); }}}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* ADDX.L -(An),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_d188_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = get_long_mmu (srca); mmufixup[0].reg = srcreg; mmufixup[0].value = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = get_long_mmu (dsta); m68k_areg (regs, dstreg) = dsta; mmufixup[0].reg = -1; { uae_u32 newv = dst + src + (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgo) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, newv); }}}}}}}return 28 * CYCLE_UNIT / 2; } /* ADD.L Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_d190_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = get_long_mmu (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, newv); }}}}}}}return 20 * CYCLE_UNIT / 2; } /* ADD.L Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_d198_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = get_long_mmu (dsta); m68k_areg (regs, dstreg) += 4; {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, newv); }}}}}}}return 20 * CYCLE_UNIT / 2; } /* ADD.L Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_d1a0_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = get_long_mmu (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, newv); }}}}}}}return 22 * CYCLE_UNIT / 2; } /* ADD.L Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_d1a8_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 dst = get_long_mmu (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, newv); }}}}}}}return 24 * CYCLE_UNIT / 2; } /* ADD.L Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_d1b0_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpci (2); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); { uae_s32 dst = get_long_mmu (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, newv); }}}}}}}}return 24 * CYCLE_UNIT / 2; } /* ADD.L Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_d1b8_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 dst = get_long_mmu (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, newv); }}}}}}}return 24 * CYCLE_UNIT / 2; } /* ADD.L Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_d1b9_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_ilong_mmu (2); { uae_s32 dst = get_long_mmu (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_long_mmu (dsta, newv); }}}}}}}return 28 * CYCLE_UNIT / 2; } /* ADDA.L Dn,An */ uae_u32 REGPARAM2 CPUFUNC(op_d1c0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* ADDA.L An,An */ uae_u32 REGPARAM2 CPUFUNC(op_d1c8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* ADDA.L (An),An */ uae_u32 REGPARAM2 CPUFUNC(op_d1d0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long_mmu (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpci (2); return 12 * CYCLE_UNIT / 2; } /* ADDA.L (An)+,An */ uae_u32 REGPARAM2 CPUFUNC(op_d1d8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = get_long_mmu (srca); m68k_areg (regs, srcreg) += 4; { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpci (2); return 12 * CYCLE_UNIT / 2; } /* ADDA.L -(An),An */ uae_u32 REGPARAM2 CPUFUNC(op_d1e0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = get_long_mmu (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpci (2); return 14 * CYCLE_UNIT / 2; } /* ADDA.L (d16,An),An */ uae_u32 REGPARAM2 CPUFUNC(op_d1e8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 src = get_long_mmu (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpci (4); return 16 * CYCLE_UNIT / 2; } /* ADDA.L (d8,An,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_d1f0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpci (2); { srca = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s32 src = get_long_mmu (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}}}return 16 * CYCLE_UNIT / 2; } /* ADDA.L (xxx).W,An */ uae_u32 REGPARAM2 CPUFUNC(op_d1f8_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 src = get_long_mmu (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpci (4); return 16 * CYCLE_UNIT / 2; } /* ADDA.L (xxx).L,An */ uae_u32 REGPARAM2 CPUFUNC(op_d1f9_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_ilong_mmu (2); { uae_s32 src = get_long_mmu (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpci (6); return 20 * CYCLE_UNIT / 2; } /* ADDA.L (d16,PC),An */ uae_u32 REGPARAM2 CPUFUNC(op_d1fa_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s32 src = get_long_mmu (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpci (4); return 16 * CYCLE_UNIT / 2; } /* ADDA.L (d8,PC,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_d1fb_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpci (2); { tmppc = m68k_getpc (); srca = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_s32 src = get_long_mmu (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}}}return 16 * CYCLE_UNIT / 2; } /* ADDA.L #.L,An */ uae_u32 REGPARAM2 CPUFUNC(op_d1fc_31)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_ilong_mmu (2); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpci (6); return 12 * CYCLE_UNIT / 2; } /* ASRQ.B #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e000_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; uae_u32 sign = (0x80 & val) >> 7; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 8) { val = 0xff & (uae_u32)-sign; SET_CFLG (sign); COPY_CARRY (); } else { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; val |= (0xff << (8 - cnt)) & (uae_u32)-sign; val &= 0xff; } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* LSRQ.B #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e008_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 8) { SET_CFLG ((cnt == 8) & (val >> 7)); COPY_CARRY (); val = 0; } else { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* ROXRQ.B #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e010_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { cnt--; { uae_u32 carry; uae_u32 hival = (val << 1) | GET_XFLG (); hival <<= (7 - cnt); val >>= cnt; carry = val & 1; val >>= 1; val |= hival; SET_XFLG (carry); val &= 0xff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* RORQ.B #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e018_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { uae_u32 hival; cnt &= 7; hival = val << (8 - cnt); val >>= cnt; val |= hival; val &= 0xff; SET_CFLG ((val & 0x80) >> 7); } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* ASR.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e020_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 cnt = m68k_dreg (regs, srcreg); { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; uae_u32 sign = (0x80 & val) >> 7; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 8) { val = 0xff & (uae_u32)-sign; SET_CFLG (sign); COPY_CARRY (); } else if (cnt > 0) { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; val |= (0xff << (8 - cnt)) & (uae_u32)-sign; val &= 0xff; } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* LSR.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e028_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 cnt = m68k_dreg (regs, srcreg); { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 8) { SET_CFLG ((cnt == 8) & (val >> 7)); COPY_CARRY (); val = 0; } else if (cnt > 0) { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* ROXR.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e030_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 cnt = m68k_dreg (regs, srcreg); { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 36) cnt -= 36; if (cnt >= 18) cnt -= 18; if (cnt >= 9) cnt -= 9; if (cnt > 0) { cnt--; { uae_u32 carry; uae_u32 hival = (val << 1) | GET_XFLG (); hival <<= (7 - cnt); val >>= cnt; carry = val & 1; val >>= 1; val |= hival; SET_XFLG (carry); val &= 0xff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } #endif #ifdef PART_8 /* ROR.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e038_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 cnt = m68k_dreg (regs, srcreg); { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt > 0) { uae_u32 hival; cnt &= 7; hival = val << (8 - cnt); val >>= cnt; val |= hival; val &= 0xff; SET_CFLG ((val & 0x80) >> 7); } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* ASRQ.W #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e040_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; uae_u32 sign = (0x8000 & val) >> 15; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 16) { val = 0xffff & (uae_u32)-sign; SET_CFLG (sign); COPY_CARRY (); } else { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; val |= (0xffff << (16 - cnt)) & (uae_u32)-sign; val &= 0xffff; } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* LSRQ.W #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e048_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 16) { SET_CFLG ((cnt == 16) & (val >> 15)); COPY_CARRY (); val = 0; } else { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* ROXRQ.W #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e050_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { cnt--; { uae_u32 carry; uae_u32 hival = (val << 1) | GET_XFLG (); hival <<= (15 - cnt); val >>= cnt; carry = val & 1; val >>= 1; val |= hival; SET_XFLG (carry); val &= 0xffff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* RORQ.W #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e058_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { uae_u32 hival; cnt &= 15; hival = val << (16 - cnt); val >>= cnt; val |= hival; val &= 0xffff; SET_CFLG ((val & 0x8000) >> 15); } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* ASR.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e060_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 cnt = m68k_dreg (regs, srcreg); { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; uae_u32 sign = (0x8000 & val) >> 15; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 16) { val = 0xffff & (uae_u32)-sign; SET_CFLG (sign); COPY_CARRY (); } else if (cnt > 0) { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; val |= (0xffff << (16 - cnt)) & (uae_u32)-sign; val &= 0xffff; } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* LSR.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e068_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 cnt = m68k_dreg (regs, srcreg); { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 16) { SET_CFLG ((cnt == 16) & (val >> 15)); COPY_CARRY (); val = 0; } else if (cnt > 0) { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* ROXR.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e070_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 cnt = m68k_dreg (regs, srcreg); { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 34) cnt -= 34; if (cnt >= 17) cnt -= 17; if (cnt > 0) { cnt--; { uae_u32 carry; uae_u32 hival = (val << 1) | GET_XFLG (); hival <<= (15 - cnt); val >>= cnt; carry = val & 1; val >>= 1; val |= hival; SET_XFLG (carry); val &= 0xffff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* ROR.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e078_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 cnt = m68k_dreg (regs, srcreg); { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt > 0) { uae_u32 hival; cnt &= 15; hival = val << (16 - cnt); val >>= cnt; val |= hival; val &= 0xffff; SET_CFLG ((val & 0x8000) >> 15); } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* ASRQ.L #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e080_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; uae_u32 sign = (0x80000000 & val) >> 31; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 32) { val = 0xffffffff & (uae_u32)-sign; SET_CFLG (sign); COPY_CARRY (); } else { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; val |= (0xffffffff << (32 - cnt)) & (uae_u32)-sign; val &= 0xffffffff; } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* LSRQ.L #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e088_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 32) { SET_CFLG ((cnt == 32) & (val >> 31)); COPY_CARRY (); val = 0; } else { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* ROXRQ.L #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e090_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { cnt--; { uae_u32 carry; uae_u32 hival = (val << 1) | GET_XFLG (); hival <<= (31 - cnt); val >>= cnt; carry = val & 1; val >>= 1; val |= hival; SET_XFLG (carry); val &= 0xffffffff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* RORQ.L #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e098_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { uae_u32 hival; cnt &= 31; hival = val << (32 - cnt); val >>= cnt; val |= hival; val &= 0xffffffff; SET_CFLG ((val & 0x80000000) >> 31); } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* ASR.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e0a0_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 cnt = m68k_dreg (regs, srcreg); { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; uae_u32 sign = (0x80000000 & val) >> 31; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 32) { val = 0xffffffff & (uae_u32)-sign; SET_CFLG (sign); COPY_CARRY (); } else if (cnt > 0) { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; val |= (0xffffffff << (32 - cnt)) & (uae_u32)-sign; val &= 0xffffffff; } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* LSR.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e0a8_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 cnt = m68k_dreg (regs, srcreg); { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 32) { SET_CFLG ((cnt == 32) & (val >> 31)); COPY_CARRY (); val = 0; } else if (cnt > 0) { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* ROXR.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e0b0_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 cnt = m68k_dreg (regs, srcreg); { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 33) cnt -= 33; if (cnt > 0) { cnt--; { uae_u32 carry; uae_u32 hival = (val << 1) | GET_XFLG (); hival <<= (31 - cnt); val >>= cnt; carry = val & 1; val >>= 1; val |= hival; SET_XFLG (carry); val &= 0xffffffff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* ROR.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e0b8_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 cnt = m68k_dreg (regs, srcreg); { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt > 0) { uae_u32 hival; cnt &= 31; hival = val << (32 - cnt); val >>= cnt; val |= hival; val &= 0xffffffff; SET_CFLG ((val & 0x80000000) >> 31); } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* ASRW.W (An) */ uae_u32 REGPARAM2 CPUFUNC(op_e0d0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = get_word_mmu (dataa); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 cflg = val & 1; val = (val >> 1) | sign; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (cflg); COPY_CARRY (); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (dataa, val); }}}}return 12 * CYCLE_UNIT / 2; } /* ASRW.W (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_e0d8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = get_word_mmu (dataa); m68k_areg (regs, srcreg) += 2; { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 cflg = val & 1; val = (val >> 1) | sign; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (cflg); COPY_CARRY (); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (dataa, val); }}}}return 12 * CYCLE_UNIT / 2; } /* ASRW.W -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_e0e0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; dataa = m68k_areg (regs, srcreg) - 2; { uae_s16 data = get_word_mmu (dataa); m68k_areg (regs, srcreg) = dataa; { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 cflg = val & 1; val = (val >> 1) | sign; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (cflg); COPY_CARRY (); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (dataa, val); }}}}return 14 * CYCLE_UNIT / 2; } /* ASRW.W (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_e0e8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 data = get_word_mmu (dataa); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 cflg = val & 1; val = (val >> 1) | sign; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (cflg); COPY_CARRY (); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (dataa, val); }}}}return 16 * CYCLE_UNIT / 2; } /* ASRW.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_e0f0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; m68k_incpci (2); { dataa = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s16 data = get_word_mmu (dataa); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 cflg = val & 1; val = (val >> 1) | sign; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (cflg); COPY_CARRY (); regs.instruction_pc = m68k_getpci (); put_word_mmu (dataa, val); }}}}}return 16 * CYCLE_UNIT / 2; } /* ASRW.W (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_e0f8_31)(uae_u32 opcode) { {{ uaecptr dataa = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 data = get_word_mmu (dataa); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 cflg = val & 1; val = (val >> 1) | sign; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (cflg); COPY_CARRY (); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (dataa, val); }}}}return 16 * CYCLE_UNIT / 2; } /* ASRW.W (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_e0f9_31)(uae_u32 opcode) { {{ uaecptr dataa = get_ilong_mmu (2); { uae_s16 data = get_word_mmu (dataa); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 cflg = val & 1; val = (val >> 1) | sign; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (cflg); COPY_CARRY (); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_word_mmu (dataa, val); }}}}return 20 * CYCLE_UNIT / 2; } /* ASLQ.B #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e100_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 8) { SET_VFLG (val != 0); SET_CFLG (cnt == 8 ? val & 1 : 0); COPY_CARRY (); val = 0; } else { uae_u32 mask = (0xff << (7 - cnt)) & 0xff; SET_VFLG ((val & mask) != mask && (val & mask) != 0); val <<= cnt - 1; SET_CFLG ((val & 0x80) >> 7); COPY_CARRY (); val <<= 1; val &= 0xff; } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* LSLQ.B #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e108_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 8) { SET_CFLG (cnt == 8 ? val & 1 : 0); COPY_CARRY (); val = 0; } else { val <<= (cnt - 1); SET_CFLG ((val & 0x80) >> 7); COPY_CARRY (); val <<= 1; val &= 0xff; } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* ROXLQ.B #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e110_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { cnt--; { uae_u32 carry; uae_u32 loval = val >> (7 - cnt); carry = loval & 1; val = (((val << 1) | GET_XFLG ()) << cnt) | (loval >> 1); SET_XFLG (carry); val &= 0xff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* ROLQ.B #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e118_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { uae_u32 loval; cnt &= 7; loval = val >> (8 - cnt); val <<= cnt; val |= loval; val &= 0xff; SET_CFLG (val & 1); } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* ASL.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e120_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 cnt = m68k_dreg (regs, srcreg); { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 8) { SET_VFLG (val != 0); SET_CFLG (cnt == 8 ? val & 1 : 0); COPY_CARRY (); val = 0; } else if (cnt > 0) { uae_u32 mask = (0xff << (7 - cnt)) & 0xff; SET_VFLG ((val & mask) != mask && (val & mask) != 0); val <<= cnt - 1; SET_CFLG ((val & 0x80) >> 7); COPY_CARRY (); val <<= 1; val &= 0xff; } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* LSL.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e128_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 cnt = m68k_dreg (regs, srcreg); { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 8) { SET_CFLG (cnt == 8 ? val & 1 : 0); COPY_CARRY (); val = 0; } else if (cnt > 0) { val <<= (cnt - 1); SET_CFLG ((val & 0x80) >> 7); COPY_CARRY (); val <<= 1; val &= 0xff; } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* ROXL.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e130_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 cnt = m68k_dreg (regs, srcreg); { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 36) cnt -= 36; if (cnt >= 18) cnt -= 18; if (cnt >= 9) cnt -= 9; if (cnt > 0) { cnt--; { uae_u32 carry; uae_u32 loval = val >> (7 - cnt); carry = loval & 1; val = (((val << 1) | GET_XFLG ()) << cnt) | (loval >> 1); SET_XFLG (carry); val &= 0xff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* ROL.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e138_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 cnt = m68k_dreg (regs, srcreg); { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt > 0) { uae_u32 loval; cnt &= 7; loval = val >> (8 - cnt); val <<= cnt; val |= loval; val &= 0xff; SET_CFLG (val & 1); } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* ASLQ.W #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e140_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 16) { SET_VFLG (val != 0); SET_CFLG (cnt == 16 ? val & 1 : 0); COPY_CARRY (); val = 0; } else { uae_u32 mask = (0xffff << (15 - cnt)) & 0xffff; SET_VFLG ((val & mask) != mask && (val & mask) != 0); val <<= cnt - 1; SET_CFLG ((val & 0x8000) >> 15); COPY_CARRY (); val <<= 1; val &= 0xffff; } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* LSLQ.W #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e148_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 16) { SET_CFLG (cnt == 16 ? val & 1 : 0); COPY_CARRY (); val = 0; } else { val <<= (cnt - 1); SET_CFLG ((val & 0x8000) >> 15); COPY_CARRY (); val <<= 1; val &= 0xffff; } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* ROXLQ.W #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e150_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { cnt--; { uae_u32 carry; uae_u32 loval = val >> (15 - cnt); carry = loval & 1; val = (((val << 1) | GET_XFLG ()) << cnt) | (loval >> 1); SET_XFLG (carry); val &= 0xffff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* ROLQ.W #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e158_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { uae_u32 loval; cnt &= 15; loval = val >> (16 - cnt); val <<= cnt; val |= loval; val &= 0xffff; SET_CFLG (val & 1); } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* ASL.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e160_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 cnt = m68k_dreg (regs, srcreg); { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 16) { SET_VFLG (val != 0); SET_CFLG (cnt == 16 ? val & 1 : 0); COPY_CARRY (); val = 0; } else if (cnt > 0) { uae_u32 mask = (0xffff << (15 - cnt)) & 0xffff; SET_VFLG ((val & mask) != mask && (val & mask) != 0); val <<= cnt - 1; SET_CFLG ((val & 0x8000) >> 15); COPY_CARRY (); val <<= 1; val &= 0xffff; } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* LSL.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e168_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 cnt = m68k_dreg (regs, srcreg); { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 16) { SET_CFLG (cnt == 16 ? val & 1 : 0); COPY_CARRY (); val = 0; } else if (cnt > 0) { val <<= (cnt - 1); SET_CFLG ((val & 0x8000) >> 15); COPY_CARRY (); val <<= 1; val &= 0xffff; } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* ROXL.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e170_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 cnt = m68k_dreg (regs, srcreg); { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 34) cnt -= 34; if (cnt >= 17) cnt -= 17; if (cnt > 0) { cnt--; { uae_u32 carry; uae_u32 loval = val >> (15 - cnt); carry = loval & 1; val = (((val << 1) | GET_XFLG ()) << cnt) | (loval >> 1); SET_XFLG (carry); val &= 0xffff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* ROL.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e178_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 cnt = m68k_dreg (regs, srcreg); { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt > 0) { uae_u32 loval; cnt &= 15; loval = val >> (16 - cnt); val <<= cnt; val |= loval; val &= 0xffff; SET_CFLG (val & 1); } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* ASLQ.L #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e180_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 32) { SET_VFLG (val != 0); SET_CFLG (cnt == 32 ? val & 1 : 0); COPY_CARRY (); val = 0; } else { uae_u32 mask = (0xffffffff << (31 - cnt)) & 0xffffffff; SET_VFLG ((val & mask) != mask && (val & mask) != 0); val <<= cnt - 1; SET_CFLG ((val & 0x80000000) >> 31); COPY_CARRY (); val <<= 1; val &= 0xffffffff; } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* LSLQ.L #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e188_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 32) { SET_CFLG (cnt == 32 ? val & 1 : 0); COPY_CARRY (); val = 0; } else { val <<= (cnt - 1); SET_CFLG ((val & 0x80000000) >> 31); COPY_CARRY (); val <<= 1; val &= 0xffffffff; } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* ROXLQ.L #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e190_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { cnt--; { uae_u32 carry; uae_u32 loval = val >> (31 - cnt); carry = loval & 1; val = (((val << 1) | GET_XFLG ()) << cnt) | (loval >> 1); SET_XFLG (carry); val &= 0xffffffff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* ROLQ.L #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e198_31)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { uae_u32 loval; cnt &= 31; loval = val >> (32 - cnt); val <<= cnt; val |= loval; val &= 0xffffffff; SET_CFLG (val & 1); } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* ASL.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e1a0_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 cnt = m68k_dreg (regs, srcreg); { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 32) { SET_VFLG (val != 0); SET_CFLG (cnt == 32 ? val & 1 : 0); COPY_CARRY (); val = 0; } else if (cnt > 0) { uae_u32 mask = (0xffffffff << (31 - cnt)) & 0xffffffff; SET_VFLG ((val & mask) != mask && (val & mask) != 0); val <<= cnt - 1; SET_CFLG ((val & 0x80000000) >> 31); COPY_CARRY (); val <<= 1; val &= 0xffffffff; } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* LSL.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e1a8_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 cnt = m68k_dreg (regs, srcreg); { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 32) { SET_CFLG (cnt == 32 ? val & 1 : 0); COPY_CARRY (); val = 0; } else if (cnt > 0) { val <<= (cnt - 1); SET_CFLG ((val & 0x80000000) >> 31); COPY_CARRY (); val <<= 1; val &= 0xffffffff; } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* ROXL.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e1b0_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 cnt = m68k_dreg (regs, srcreg); { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 33) cnt -= 33; if (cnt > 0) { cnt--; { uae_u32 carry; uae_u32 loval = val >> (31 - cnt); carry = loval & 1; val = (((val << 1) | GET_XFLG ()) << cnt) | (loval >> 1); SET_XFLG (carry); val &= 0xffffffff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* ROL.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e1b8_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 cnt = m68k_dreg (regs, srcreg); { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt > 0) { uae_u32 loval; cnt &= 31; loval = val >> (32 - cnt); val <<= cnt; val |= loval; val &= 0xffffffff; SET_CFLG (val & 1); } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpci (2); return 4 * CYCLE_UNIT / 2; } /* ASLW.W (An) */ uae_u32 REGPARAM2 CPUFUNC(op_e1d0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = get_word_mmu (dataa); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 sign2; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); sign2 = 0x8000 & val; SET_CFLG (sign != 0); COPY_CARRY (); SET_VFLG (GET_VFLG () | (sign2 != sign)); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (dataa, val); }}}}return 12 * CYCLE_UNIT / 2; } /* ASLW.W (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_e1d8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = get_word_mmu (dataa); m68k_areg (regs, srcreg) += 2; { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 sign2; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); sign2 = 0x8000 & val; SET_CFLG (sign != 0); COPY_CARRY (); SET_VFLG (GET_VFLG () | (sign2 != sign)); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (dataa, val); }}}}return 12 * CYCLE_UNIT / 2; } /* ASLW.W -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_e1e0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; dataa = m68k_areg (regs, srcreg) - 2; { uae_s16 data = get_word_mmu (dataa); m68k_areg (regs, srcreg) = dataa; { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 sign2; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); sign2 = 0x8000 & val; SET_CFLG (sign != 0); COPY_CARRY (); SET_VFLG (GET_VFLG () | (sign2 != sign)); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (dataa, val); }}}}return 14 * CYCLE_UNIT / 2; } /* ASLW.W (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_e1e8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 data = get_word_mmu (dataa); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 sign2; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); sign2 = 0x8000 & val; SET_CFLG (sign != 0); COPY_CARRY (); SET_VFLG (GET_VFLG () | (sign2 != sign)); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (dataa, val); }}}}return 16 * CYCLE_UNIT / 2; } /* ASLW.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_e1f0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; m68k_incpci (2); { dataa = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s16 data = get_word_mmu (dataa); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 sign2; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); sign2 = 0x8000 & val; SET_CFLG (sign != 0); COPY_CARRY (); SET_VFLG (GET_VFLG () | (sign2 != sign)); regs.instruction_pc = m68k_getpci (); put_word_mmu (dataa, val); }}}}}return 16 * CYCLE_UNIT / 2; } /* ASLW.W (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_e1f8_31)(uae_u32 opcode) { {{ uaecptr dataa = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 data = get_word_mmu (dataa); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 sign2; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); sign2 = 0x8000 & val; SET_CFLG (sign != 0); COPY_CARRY (); SET_VFLG (GET_VFLG () | (sign2 != sign)); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (dataa, val); }}}}return 16 * CYCLE_UNIT / 2; } /* ASLW.W (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_e1f9_31)(uae_u32 opcode) { {{ uaecptr dataa = get_ilong_mmu (2); { uae_s16 data = get_word_mmu (dataa); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 sign2; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); sign2 = 0x8000 & val; SET_CFLG (sign != 0); COPY_CARRY (); SET_VFLG (GET_VFLG () | (sign2 != sign)); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_word_mmu (dataa, val); }}}}return 20 * CYCLE_UNIT / 2; } /* LSRW.W (An) */ uae_u32 REGPARAM2 CPUFUNC(op_e2d0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = get_word_mmu (dataa); { uae_u32 val = (uae_u16)data; uae_u32 carry = val & 1; val >>= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (dataa, val); }}}}return 12 * CYCLE_UNIT / 2; } /* LSRW.W (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_e2d8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = get_word_mmu (dataa); m68k_areg (regs, srcreg) += 2; { uae_u32 val = (uae_u16)data; uae_u32 carry = val & 1; val >>= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (dataa, val); }}}}return 12 * CYCLE_UNIT / 2; } /* LSRW.W -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_e2e0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; dataa = m68k_areg (regs, srcreg) - 2; { uae_s16 data = get_word_mmu (dataa); m68k_areg (regs, srcreg) = dataa; { uae_u32 val = (uae_u16)data; uae_u32 carry = val & 1; val >>= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (dataa, val); }}}}return 14 * CYCLE_UNIT / 2; } /* LSRW.W (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_e2e8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 data = get_word_mmu (dataa); { uae_u32 val = (uae_u16)data; uae_u32 carry = val & 1; val >>= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (dataa, val); }}}}return 16 * CYCLE_UNIT / 2; } /* LSRW.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_e2f0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; m68k_incpci (2); { dataa = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s16 data = get_word_mmu (dataa); { uae_u32 val = (uae_u16)data; uae_u32 carry = val & 1; val >>= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); regs.instruction_pc = m68k_getpci (); put_word_mmu (dataa, val); }}}}}return 16 * CYCLE_UNIT / 2; } /* LSRW.W (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_e2f8_31)(uae_u32 opcode) { {{ uaecptr dataa = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 data = get_word_mmu (dataa); { uae_u32 val = (uae_u16)data; uae_u32 carry = val & 1; val >>= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (dataa, val); }}}}return 16 * CYCLE_UNIT / 2; } /* LSRW.W (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_e2f9_31)(uae_u32 opcode) { {{ uaecptr dataa = get_ilong_mmu (2); { uae_s16 data = get_word_mmu (dataa); { uae_u32 val = (uae_u16)data; uae_u32 carry = val & 1; val >>= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_word_mmu (dataa, val); }}}}return 20 * CYCLE_UNIT / 2; } /* LSLW.W (An) */ uae_u32 REGPARAM2 CPUFUNC(op_e3d0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = get_word_mmu (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (dataa, val); }}}}return 12 * CYCLE_UNIT / 2; } /* LSLW.W (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_e3d8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = get_word_mmu (dataa); m68k_areg (regs, srcreg) += 2; { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (dataa, val); }}}}return 12 * CYCLE_UNIT / 2; } /* LSLW.W -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_e3e0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; dataa = m68k_areg (regs, srcreg) - 2; { uae_s16 data = get_word_mmu (dataa); m68k_areg (regs, srcreg) = dataa; { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (dataa, val); }}}}return 14 * CYCLE_UNIT / 2; } /* LSLW.W (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_e3e8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 data = get_word_mmu (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (dataa, val); }}}}return 16 * CYCLE_UNIT / 2; } /* LSLW.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_e3f0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; m68k_incpci (2); { dataa = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s16 data = get_word_mmu (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); regs.instruction_pc = m68k_getpci (); put_word_mmu (dataa, val); }}}}}return 16 * CYCLE_UNIT / 2; } /* LSLW.W (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_e3f8_31)(uae_u32 opcode) { {{ uaecptr dataa = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 data = get_word_mmu (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (dataa, val); }}}}return 16 * CYCLE_UNIT / 2; } /* LSLW.W (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_e3f9_31)(uae_u32 opcode) { {{ uaecptr dataa = get_ilong_mmu (2); { uae_s16 data = get_word_mmu (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_word_mmu (dataa, val); }}}}return 20 * CYCLE_UNIT / 2; } /* ROXRW.W (An) */ uae_u32 REGPARAM2 CPUFUNC(op_e4d0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = get_word_mmu (dataa); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (GET_XFLG ()) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (dataa, val); }}}}return 12 * CYCLE_UNIT / 2; } /* ROXRW.W (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_e4d8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = get_word_mmu (dataa); m68k_areg (regs, srcreg) += 2; { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (GET_XFLG ()) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (dataa, val); }}}}return 12 * CYCLE_UNIT / 2; } /* ROXRW.W -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_e4e0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; dataa = m68k_areg (regs, srcreg) - 2; { uae_s16 data = get_word_mmu (dataa); m68k_areg (regs, srcreg) = dataa; { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (GET_XFLG ()) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (dataa, val); }}}}return 14 * CYCLE_UNIT / 2; } /* ROXRW.W (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_e4e8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 data = get_word_mmu (dataa); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (GET_XFLG ()) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (dataa, val); }}}}return 16 * CYCLE_UNIT / 2; } /* ROXRW.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_e4f0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; m68k_incpci (2); { dataa = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s16 data = get_word_mmu (dataa); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (GET_XFLG ()) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); regs.instruction_pc = m68k_getpci (); put_word_mmu (dataa, val); }}}}}return 16 * CYCLE_UNIT / 2; } /* ROXRW.W (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_e4f8_31)(uae_u32 opcode) { {{ uaecptr dataa = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 data = get_word_mmu (dataa); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (GET_XFLG ()) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (dataa, val); }}}}return 16 * CYCLE_UNIT / 2; } /* ROXRW.W (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_e4f9_31)(uae_u32 opcode) { {{ uaecptr dataa = get_ilong_mmu (2); { uae_s16 data = get_word_mmu (dataa); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (GET_XFLG ()) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_word_mmu (dataa, val); }}}}return 20 * CYCLE_UNIT / 2; } /* ROXLW.W (An) */ uae_u32 REGPARAM2 CPUFUNC(op_e5d0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = get_word_mmu (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (GET_XFLG ()) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (dataa, val); }}}}return 12 * CYCLE_UNIT / 2; } /* ROXLW.W (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_e5d8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = get_word_mmu (dataa); m68k_areg (regs, srcreg) += 2; { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (GET_XFLG ()) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (dataa, val); }}}}return 12 * CYCLE_UNIT / 2; } /* ROXLW.W -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_e5e0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; dataa = m68k_areg (regs, srcreg) - 2; { uae_s16 data = get_word_mmu (dataa); m68k_areg (regs, srcreg) = dataa; { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (GET_XFLG ()) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (dataa, val); }}}}return 14 * CYCLE_UNIT / 2; } /* ROXLW.W (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_e5e8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 data = get_word_mmu (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (GET_XFLG ()) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (dataa, val); }}}}return 16 * CYCLE_UNIT / 2; } /* ROXLW.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_e5f0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; m68k_incpci (2); { dataa = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s16 data = get_word_mmu (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (GET_XFLG ()) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); regs.instruction_pc = m68k_getpci (); put_word_mmu (dataa, val); }}}}}return 16 * CYCLE_UNIT / 2; } /* ROXLW.W (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_e5f8_31)(uae_u32 opcode) { {{ uaecptr dataa = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 data = get_word_mmu (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (GET_XFLG ()) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (dataa, val); }}}}return 16 * CYCLE_UNIT / 2; } /* ROXLW.W (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_e5f9_31)(uae_u32 opcode) { {{ uaecptr dataa = get_ilong_mmu (2); { uae_s16 data = get_word_mmu (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (GET_XFLG ()) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_word_mmu (dataa, val); }}}}return 20 * CYCLE_UNIT / 2; } /* RORW.W (An) */ uae_u32 REGPARAM2 CPUFUNC(op_e6d0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = get_word_mmu (dataa); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (carry) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (dataa, val); }}}}return 12 * CYCLE_UNIT / 2; } /* RORW.W (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_e6d8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = get_word_mmu (dataa); m68k_areg (regs, srcreg) += 2; { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (carry) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (dataa, val); }}}}return 12 * CYCLE_UNIT / 2; } /* RORW.W -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_e6e0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; dataa = m68k_areg (regs, srcreg) - 2; { uae_s16 data = get_word_mmu (dataa); m68k_areg (regs, srcreg) = dataa; { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (carry) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (dataa, val); }}}}return 14 * CYCLE_UNIT / 2; } /* RORW.W (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_e6e8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 data = get_word_mmu (dataa); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (carry) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (dataa, val); }}}}return 16 * CYCLE_UNIT / 2; } /* RORW.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_e6f0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; m68k_incpci (2); { dataa = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s16 data = get_word_mmu (dataa); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (carry) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); regs.instruction_pc = m68k_getpci (); put_word_mmu (dataa, val); }}}}}return 16 * CYCLE_UNIT / 2; } /* RORW.W (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_e6f8_31)(uae_u32 opcode) { {{ uaecptr dataa = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 data = get_word_mmu (dataa); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (carry) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (dataa, val); }}}}return 16 * CYCLE_UNIT / 2; } /* RORW.W (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_e6f9_31)(uae_u32 opcode) { {{ uaecptr dataa = get_ilong_mmu (2); { uae_s16 data = get_word_mmu (dataa); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (carry) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_word_mmu (dataa, val); }}}}return 20 * CYCLE_UNIT / 2; } /* ROLW.W (An) */ uae_u32 REGPARAM2 CPUFUNC(op_e7d0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = get_word_mmu (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (carry) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (dataa, val); }}}}return 12 * CYCLE_UNIT / 2; } /* ROLW.W (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_e7d8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = get_word_mmu (dataa); m68k_areg (regs, srcreg) += 2; { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (carry) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (dataa, val); }}}}return 12 * CYCLE_UNIT / 2; } /* ROLW.W -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_e7e0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; dataa = m68k_areg (regs, srcreg) - 2; { uae_s16 data = get_word_mmu (dataa); m68k_areg (regs, srcreg) = dataa; { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (carry) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); m68k_incpci (2); regs.instruction_pc = m68k_getpci (); put_word_mmu (dataa, val); }}}}return 14 * CYCLE_UNIT / 2; } /* ROLW.W (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_e7e8_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 data = get_word_mmu (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (carry) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (dataa, val); }}}}return 16 * CYCLE_UNIT / 2; } /* ROLW.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_e7f0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; m68k_incpci (2); { dataa = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); { uae_s16 data = get_word_mmu (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (carry) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); regs.instruction_pc = m68k_getpci (); put_word_mmu (dataa, val); }}}}}return 16 * CYCLE_UNIT / 2; } /* ROLW.W (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_e7f8_31)(uae_u32 opcode) { {{ uaecptr dataa = (uae_s32)(uae_s16)get_iword_mmu (2); { uae_s16 data = get_word_mmu (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (carry) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); m68k_incpci (4); regs.instruction_pc = m68k_getpci (); put_word_mmu (dataa, val); }}}}return 16 * CYCLE_UNIT / 2; } /* ROLW.W (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_e7f9_31)(uae_u32 opcode) { {{ uaecptr dataa = get_ilong_mmu (2); { uae_s16 data = get_word_mmu (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (carry) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); m68k_incpci (6); regs.instruction_pc = m68k_getpci (); put_word_mmu (dataa, val); }}}}return 20 * CYCLE_UNIT / 2; } /* BFTST.L #.W,Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_e8c0_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword_mmu (2); {{ uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp = m68k_dreg(regs, dstreg); offset &= 0x1f; tmp = (tmp << offset) | (tmp >> (32 - offset)); bdata[0] = tmp & ((1 << (32 - width)) - 1); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); }}}} m68k_incpci (4); return 8 * CYCLE_UNIT / 2; } #endif /* BFTST.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_e8d0_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); }}}} m68k_incpci (4); return 8 * CYCLE_UNIT / 2; } #endif /* BFTST.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_e8e8_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); }}}} m68k_incpci (6); return 12 * CYCLE_UNIT / 2; } #endif /* BFTST.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_e8f0_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta; m68k_incpci (4); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); }}}}}return 12 * CYCLE_UNIT / 2; } #endif /* BFTST.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_e8f8_31)(uae_u32 opcode) { {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); }}}} m68k_incpci (6); return 12 * CYCLE_UNIT / 2; } #endif /* BFTST.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_e8f9_31)(uae_u32 opcode) { {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta = get_ilong_mmu (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); }}}} m68k_incpci (8); return 16 * CYCLE_UNIT / 2; } #endif /* BFTST.L #.W,(d16,PC) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_e8fa_31)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_iword_mmu (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); }}}} m68k_incpci (6); return 12 * CYCLE_UNIT / 2; } #endif /* BFTST.L #.W,(d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_e8fb_31)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 extra = get_iword_mmu (2); { uaecptr tmppc; uaecptr dsta; m68k_incpci (4); { tmppc = m68k_getpc (); dsta = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); }}}}}return 12 * CYCLE_UNIT / 2; } #endif /* BFEXTU.L #.W,Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_e9c0_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword_mmu (2); {{ uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp = m68k_dreg(regs, dstreg); offset &= 0x1f; tmp = (tmp << offset) | (tmp >> (32 - offset)); bdata[0] = tmp & ((1 << (32 - width)) - 1); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}} m68k_incpci (4); return 8 * CYCLE_UNIT / 2; } #endif /* BFEXTU.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_e9d0_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}} m68k_incpci (4); return 8 * CYCLE_UNIT / 2; } #endif /* BFEXTU.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_e9e8_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}} m68k_incpci (6); return 12 * CYCLE_UNIT / 2; } #endif /* BFEXTU.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_e9f0_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta; m68k_incpci (4); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}}}return 12 * CYCLE_UNIT / 2; } #endif /* BFEXTU.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_e9f8_31)(uae_u32 opcode) { {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}} m68k_incpci (6); return 12 * CYCLE_UNIT / 2; } #endif /* BFEXTU.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_e9f9_31)(uae_u32 opcode) { {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta = get_ilong_mmu (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}} m68k_incpci (8); return 16 * CYCLE_UNIT / 2; } #endif /* BFEXTU.L #.W,(d16,PC) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_e9fa_31)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_iword_mmu (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}} m68k_incpci (6); return 12 * CYCLE_UNIT / 2; } #endif /* BFEXTU.L #.W,(d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_e9fb_31)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 extra = get_iword_mmu (2); { uaecptr tmppc; uaecptr dsta; m68k_incpci (4); { tmppc = m68k_getpc (); dsta = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}}}return 12 * CYCLE_UNIT / 2; } #endif /* BFCHG.L #.W,Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_eac0_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword_mmu (2); {{ uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp = m68k_dreg(regs, dstreg); offset &= 0x1f; tmp = (tmp << offset) | (tmp >> (32 - offset)); bdata[0] = tmp & ((1 << (32 - width)) - 1); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = tmp ^ (0xffffffffu >> (32 - width)); tmp = bdata[0] | (tmp << (32 - width)); m68k_dreg(regs, dstreg) = (tmp >> offset) | (tmp << (32 - offset)); }}}} m68k_incpci (4); return 8 * CYCLE_UNIT / 2; } #endif /* BFCHG.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_ead0_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = tmp ^ (0xffffffffu >> (32 - width)); x_put_bitfield(dsta, bdata, tmp, offset, width); }}}} m68k_incpci (4); return 8 * CYCLE_UNIT / 2; } #endif /* BFCHG.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_eae8_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = tmp ^ (0xffffffffu >> (32 - width)); x_put_bitfield(dsta, bdata, tmp, offset, width); }}}} m68k_incpci (6); return 12 * CYCLE_UNIT / 2; } #endif /* BFCHG.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_eaf0_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta; m68k_incpci (4); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = tmp ^ (0xffffffffu >> (32 - width)); x_put_bitfield(dsta, bdata, tmp, offset, width); }}}}}return 12 * CYCLE_UNIT / 2; } #endif /* BFCHG.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_eaf8_31)(uae_u32 opcode) { {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = tmp ^ (0xffffffffu >> (32 - width)); x_put_bitfield(dsta, bdata, tmp, offset, width); }}}} m68k_incpci (6); return 12 * CYCLE_UNIT / 2; } #endif /* BFCHG.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_eaf9_31)(uae_u32 opcode) { {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta = get_ilong_mmu (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = tmp ^ (0xffffffffu >> (32 - width)); x_put_bitfield(dsta, bdata, tmp, offset, width); }}}} m68k_incpci (8); return 16 * CYCLE_UNIT / 2; } #endif /* BFEXTS.L #.W,Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_ebc0_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword_mmu (2); {{ uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp = m68k_dreg(regs, dstreg); offset &= 0x1f; tmp = (tmp << offset) | (tmp >> (32 - offset)); bdata[0] = tmp & ((1 << (32 - width)) - 1); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp = (uae_s32)tmp >> (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}} m68k_incpci (4); return 8 * CYCLE_UNIT / 2; } #endif /* BFEXTS.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_ebd0_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp = (uae_s32)tmp >> (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}} m68k_incpci (4); return 8 * CYCLE_UNIT / 2; } #endif /* BFEXTS.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_ebe8_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp = (uae_s32)tmp >> (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}} m68k_incpci (6); return 12 * CYCLE_UNIT / 2; } #endif /* BFEXTS.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_ebf0_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta; m68k_incpci (4); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp = (uae_s32)tmp >> (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}}}return 12 * CYCLE_UNIT / 2; } #endif /* BFEXTS.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_ebf8_31)(uae_u32 opcode) { {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp = (uae_s32)tmp >> (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}} m68k_incpci (6); return 12 * CYCLE_UNIT / 2; } #endif /* BFEXTS.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_ebf9_31)(uae_u32 opcode) { {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta = get_ilong_mmu (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp = (uae_s32)tmp >> (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}} m68k_incpci (8); return 16 * CYCLE_UNIT / 2; } #endif /* BFEXTS.L #.W,(d16,PC) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_ebfa_31)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_iword_mmu (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp = (uae_s32)tmp >> (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}} m68k_incpci (6); return 12 * CYCLE_UNIT / 2; } #endif /* BFEXTS.L #.W,(d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_ebfb_31)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 extra = get_iword_mmu (2); { uaecptr tmppc; uaecptr dsta; m68k_incpci (4); { tmppc = m68k_getpc (); dsta = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp = (uae_s32)tmp >> (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}}}return 12 * CYCLE_UNIT / 2; } #endif /* BFCLR.L #.W,Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_ecc0_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword_mmu (2); {{ uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp = m68k_dreg(regs, dstreg); offset &= 0x1f; tmp = (tmp << offset) | (tmp >> (32 - offset)); bdata[0] = tmp & ((1 << (32 - width)) - 1); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = 0; tmp = bdata[0] | (tmp << (32 - width)); m68k_dreg(regs, dstreg) = (tmp >> offset) | (tmp << (32 - offset)); }}}} m68k_incpci (4); return 8 * CYCLE_UNIT / 2; } #endif /* BFCLR.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_ecd0_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = 0; x_put_bitfield(dsta, bdata, tmp, offset, width); }}}} m68k_incpci (4); return 8 * CYCLE_UNIT / 2; } #endif /* BFCLR.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_ece8_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = 0; x_put_bitfield(dsta, bdata, tmp, offset, width); }}}} m68k_incpci (6); return 12 * CYCLE_UNIT / 2; } #endif /* BFCLR.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_ecf0_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta; m68k_incpci (4); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = 0; x_put_bitfield(dsta, bdata, tmp, offset, width); }}}}}return 12 * CYCLE_UNIT / 2; } #endif /* BFCLR.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_ecf8_31)(uae_u32 opcode) { {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = 0; x_put_bitfield(dsta, bdata, tmp, offset, width); }}}} m68k_incpci (6); return 12 * CYCLE_UNIT / 2; } #endif /* BFCLR.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_ecf9_31)(uae_u32 opcode) { {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta = get_ilong_mmu (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = 0; x_put_bitfield(dsta, bdata, tmp, offset, width); }}}} m68k_incpci (8); return 16 * CYCLE_UNIT / 2; } #endif /* BFFFO.L #.W,Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_edc0_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword_mmu (2); {{ uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp = m68k_dreg(regs, dstreg); offset &= 0x1f; tmp = (tmp << offset) | (tmp >> (32 - offset)); bdata[0] = tmp & ((1 << (32 - width)) - 1); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); { uae_u32 mask = 1 << (width - 1); while (mask) { if (tmp & mask) break; mask >>= 1; offset++; }} m68k_dreg (regs, (extra >> 12) & 7) = offset; }}}} m68k_incpci (4); return 8 * CYCLE_UNIT / 2; } #endif /* BFFFO.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_edd0_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); { uae_u32 mask = 1 << (width - 1); while (mask) { if (tmp & mask) break; mask >>= 1; offset++; }} m68k_dreg (regs, (extra >> 12) & 7) = offset; }}}} m68k_incpci (4); return 8 * CYCLE_UNIT / 2; } #endif /* BFFFO.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_ede8_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); { uae_u32 mask = 1 << (width - 1); while (mask) { if (tmp & mask) break; mask >>= 1; offset++; }} m68k_dreg (regs, (extra >> 12) & 7) = offset; }}}} m68k_incpci (6); return 12 * CYCLE_UNIT / 2; } #endif /* BFFFO.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_edf0_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta; m68k_incpci (4); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); { uae_u32 mask = 1 << (width - 1); while (mask) { if (tmp & mask) break; mask >>= 1; offset++; }} m68k_dreg (regs, (extra >> 12) & 7) = offset; }}}}}return 12 * CYCLE_UNIT / 2; } #endif /* BFFFO.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_edf8_31)(uae_u32 opcode) { {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); { uae_u32 mask = 1 << (width - 1); while (mask) { if (tmp & mask) break; mask >>= 1; offset++; }} m68k_dreg (regs, (extra >> 12) & 7) = offset; }}}} m68k_incpci (6); return 12 * CYCLE_UNIT / 2; } #endif /* BFFFO.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_edf9_31)(uae_u32 opcode) { {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta = get_ilong_mmu (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); { uae_u32 mask = 1 << (width - 1); while (mask) { if (tmp & mask) break; mask >>= 1; offset++; }} m68k_dreg (regs, (extra >> 12) & 7) = offset; }}}} m68k_incpci (8); return 16 * CYCLE_UNIT / 2; } #endif /* BFFFO.L #.W,(d16,PC) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_edfa_31)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_iword_mmu (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); { uae_u32 mask = 1 << (width - 1); while (mask) { if (tmp & mask) break; mask >>= 1; offset++; }} m68k_dreg (regs, (extra >> 12) & 7) = offset; }}}} m68k_incpci (6); return 12 * CYCLE_UNIT / 2; } #endif /* BFFFO.L #.W,(d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_edfb_31)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 extra = get_iword_mmu (2); { uaecptr tmppc; uaecptr dsta; m68k_incpci (4); { tmppc = m68k_getpc (); dsta = x_get_disp_ea_020 (tmppc, next_iword_mmu ()); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); { uae_u32 mask = 1 << (width - 1); while (mask) { if (tmp & mask) break; mask >>= 1; offset++; }} m68k_dreg (regs, (extra >> 12) & 7) = offset; }}}}}return 12 * CYCLE_UNIT / 2; } #endif /* BFSET.L #.W,Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_eec0_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword_mmu (2); {{ uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp = m68k_dreg(regs, dstreg); offset &= 0x1f; tmp = (tmp << offset) | (tmp >> (32 - offset)); bdata[0] = tmp & ((1 << (32 - width)) - 1); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = 0xffffffffu >> (32 - width); tmp = bdata[0] | (tmp << (32 - width)); m68k_dreg(regs, dstreg) = (tmp >> offset) | (tmp << (32 - offset)); }}}} m68k_incpci (4); return 8 * CYCLE_UNIT / 2; } #endif /* BFSET.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_eed0_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = 0xffffffffu >> (32 - width); x_put_bitfield(dsta, bdata, tmp, offset, width); }}}} m68k_incpci (4); return 8 * CYCLE_UNIT / 2; } #endif /* BFSET.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_eee8_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = 0xffffffffu >> (32 - width); x_put_bitfield(dsta, bdata, tmp, offset, width); }}}} m68k_incpci (6); return 12 * CYCLE_UNIT / 2; } #endif /* BFSET.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_eef0_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta; m68k_incpci (4); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = 0xffffffffu >> (32 - width); x_put_bitfield(dsta, bdata, tmp, offset, width); }}}}}return 12 * CYCLE_UNIT / 2; } #endif /* BFSET.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_eef8_31)(uae_u32 opcode) { {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = 0xffffffffu >> (32 - width); x_put_bitfield(dsta, bdata, tmp, offset, width); }}}} m68k_incpci (6); return 12 * CYCLE_UNIT / 2; } #endif /* BFSET.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_eef9_31)(uae_u32 opcode) { {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta = get_ilong_mmu (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = 0xffffffffu >> (32 - width); x_put_bitfield(dsta, bdata, tmp, offset, width); }}}} m68k_incpci (8); return 16 * CYCLE_UNIT / 2; } #endif /* BFINS.L #.W,Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_efc0_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword_mmu (2); {{ uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp = m68k_dreg(regs, dstreg); offset &= 0x1f; tmp = (tmp << offset) | (tmp >> (32 - offset)); bdata[0] = tmp & ((1 << (32 - width)) - 1); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = m68k_dreg (regs, (extra >> 12) & 7); tmp = tmp & (0xffffffffu >> (32 - width)); SET_NFLG (tmp & (1 << (width - 1)) ? 1 : 0); SET_ZFLG (tmp == 0); tmp = bdata[0] | (tmp << (32 - width)); m68k_dreg(regs, dstreg) = (tmp >> offset) | (tmp << (32 - offset)); }}}} m68k_incpci (4); return 8 * CYCLE_UNIT / 2; } #endif /* BFINS.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_efd0_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = m68k_dreg (regs, (extra >> 12) & 7); tmp = tmp & (0xffffffffu >> (32 - width)); SET_NFLG (tmp & (1 << (width - 1)) ? 1 : 0); SET_ZFLG (tmp == 0); x_put_bitfield(dsta, bdata, tmp, offset, width); }}}} m68k_incpci (4); return 8 * CYCLE_UNIT / 2; } #endif /* BFINS.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_efe8_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = m68k_dreg (regs, (extra >> 12) & 7); tmp = tmp & (0xffffffffu >> (32 - width)); SET_NFLG (tmp & (1 << (width - 1)) ? 1 : 0); SET_ZFLG (tmp == 0); x_put_bitfield(dsta, bdata, tmp, offset, width); }}}} m68k_incpci (6); return 12 * CYCLE_UNIT / 2; } #endif /* BFINS.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_eff0_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta; m68k_incpci (4); { dsta = x_get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_mmu ()); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = m68k_dreg (regs, (extra >> 12) & 7); tmp = tmp & (0xffffffffu >> (32 - width)); SET_NFLG (tmp & (1 << (width - 1)) ? 1 : 0); SET_ZFLG (tmp == 0); x_put_bitfield(dsta, bdata, tmp, offset, width); }}}}}return 12 * CYCLE_UNIT / 2; } #endif /* BFINS.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_eff8_31)(uae_u32 opcode) { {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta = (uae_s32)(uae_s16)get_iword_mmu (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = m68k_dreg (regs, (extra >> 12) & 7); tmp = tmp & (0xffffffffu >> (32 - width)); SET_NFLG (tmp & (1 << (width - 1)) ? 1 : 0); SET_ZFLG (tmp == 0); x_put_bitfield(dsta, bdata, tmp, offset, width); }}}} m68k_incpci (6); return 12 * CYCLE_UNIT / 2; } #endif /* BFINS.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_eff9_31)(uae_u32 opcode) { {{ uae_s16 extra = get_iword_mmu (2); { uaecptr dsta = get_ilong_mmu (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = x_get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = m68k_dreg (regs, (extra >> 12) & 7); tmp = tmp & (0xffffffffu >> (32 - width)); SET_NFLG (tmp & (1 << (width - 1)) ? 1 : 0); SET_ZFLG (tmp == 0); x_put_bitfield(dsta, bdata, tmp, offset, width); }}}} m68k_incpci (8); return 16 * CYCLE_UNIT / 2; } #endif /* MMUOP030.L Dn,#.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f000_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel12668; } { uaecptr pc = m68k_getpc (); uae_u16 extra = x_get_word (pc + 2); m68k_incpci (4); uae_u16 extraa = 0; mmu_op30 (pc, opcode, extra, extraa); }}endlabel12668: ; return 4 * CYCLE_UNIT / 2; } #endif /* MMUOP030.L An,#.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f008_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel12669; } { uaecptr pc = m68k_getpc (); uae_u16 extra = x_get_word (pc + 2); m68k_incpci (4); uae_u16 extraa = 0; mmu_op30 (pc, opcode, extra, extraa); }}endlabel12669: ; return 4 * CYCLE_UNIT / 2; } #endif /* MMUOP030.L (An),#.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f010_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel12670; } { uaecptr pc = m68k_getpc (); uae_u16 extra = x_get_word (pc + 2); m68k_incpci (4); { uaecptr extraa = m68k_areg (regs, srcreg); mmu_op30 (pc, opcode, extra, extraa); }}}endlabel12670: ; return 4 * CYCLE_UNIT / 2; } #endif /* MMUOP030.L (An)+,#.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f018_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel12671; } { uaecptr pc = m68k_getpc (); uae_u16 extra = x_get_word (pc + 2); m68k_incpci (4); { uaecptr extraa = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += 4; mmu_op30 (pc, opcode, extra, extraa); }}}endlabel12671: ; return 4 * CYCLE_UNIT / 2; } #endif /* MMUOP030.L -(An),#.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f020_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel12672; } { uaecptr pc = m68k_getpc (); uae_u16 extra = x_get_word (pc + 2); m68k_incpci (4); { uaecptr extraa; extraa = m68k_areg (regs, srcreg) - 4; m68k_areg (regs, srcreg) = extraa; mmu_op30 (pc, opcode, extra, extraa); }}}endlabel12672: ; return 6 * CYCLE_UNIT / 2; } #endif /* MMUOP030.L (d16,An),#.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f028_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel12673; } { uaecptr pc = m68k_getpc (); uae_u16 extra = x_get_word (pc + 2); m68k_incpci (4); { uaecptr extraa = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_iword_mmu (0); m68k_incpci (2); mmu_op30 (pc, opcode, extra, extraa); }}}endlabel12673: ; return 8 * CYCLE_UNIT / 2; } #endif /* MMUOP030.L (d8,An,Xn),#.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f030_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel12674; } { uaecptr pc = m68k_getpc (); uae_u16 extra = x_get_word (pc + 2); m68k_incpci (4); { uaecptr extraa; { extraa = x_get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_mmu ()); mmu_op30 (pc, opcode, extra, extraa); }}}}endlabel12674: ; return 8 * CYCLE_UNIT / 2; } #endif /* MMUOP030.L (xxx).W,#.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f038_31)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel12675; } { uaecptr pc = m68k_getpc (); uae_u16 extra = x_get_word (pc + 2); m68k_incpci (4); { uaecptr extraa = (uae_s32)(uae_s16)get_iword_mmu (0); m68k_incpci (2); mmu_op30 (pc, opcode, extra, extraa); }}}endlabel12675: ; return 8 * CYCLE_UNIT / 2; } #endif /* MMUOP030.L (xxx).L,#.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f039_31)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel12676; } { uaecptr pc = m68k_getpc (); uae_u16 extra = x_get_word (pc + 2); m68k_incpci (4); { uaecptr extraa = get_ilong_mmu (0); m68k_incpci (4); mmu_op30 (pc, opcode, extra, extraa); }}}endlabel12676: ; return 12 * CYCLE_UNIT / 2; } #endif /* FPP.L #.W,Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f200_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { #ifdef FPUEMU { uae_s16 extra = get_iword_mmu (2); m68k_incpci (4); fpuop_arithmetic(opcode, extra); } #endif }return 8 * CYCLE_UNIT / 2; } #endif /* FPP.L #.W,An */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f208_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { #ifdef FPUEMU { uae_s16 extra = get_iword_mmu (2); m68k_incpci (4); fpuop_arithmetic(opcode, extra); } #endif }return 8 * CYCLE_UNIT / 2; } #endif /* FPP.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f210_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { #ifdef FPUEMU { uae_s16 extra = get_iword_mmu (2); m68k_incpci (4); fpuop_arithmetic(opcode, extra); } #endif }return 8 * CYCLE_UNIT / 2; } #endif /* FPP.L #.W,(An)+ */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f218_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { #ifdef FPUEMU { uae_s16 extra = get_iword_mmu (2); m68k_incpci (4); fpuop_arithmetic(opcode, extra); } #endif }return 8 * CYCLE_UNIT / 2; } #endif /* FPP.L #.W,-(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f220_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { #ifdef FPUEMU { uae_s16 extra = get_iword_mmu (2); m68k_incpci (4); fpuop_arithmetic(opcode, extra); } #endif }return 8 * CYCLE_UNIT / 2; } #endif /* FPP.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f228_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { #ifdef FPUEMU { uae_s16 extra = get_iword_mmu (2); m68k_incpci (4); fpuop_arithmetic(opcode, extra); } #endif }return 8 * CYCLE_UNIT / 2; } #endif /* FPP.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f230_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { #ifdef FPUEMU { uae_s16 extra = get_iword_mmu (2); m68k_incpci (4); fpuop_arithmetic(opcode, extra); } #endif }return 8 * CYCLE_UNIT / 2; } #endif /* FPP.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f238_31)(uae_u32 opcode) { { #ifdef FPUEMU { uae_s16 extra = get_iword_mmu (2); m68k_incpci (4); fpuop_arithmetic(opcode, extra); } #endif }return 8 * CYCLE_UNIT / 2; } #endif /* FPP.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f239_31)(uae_u32 opcode) { { #ifdef FPUEMU { uae_s16 extra = get_iword_mmu (2); m68k_incpci (4); fpuop_arithmetic(opcode, extra); } #endif }return 8 * CYCLE_UNIT / 2; } #endif /* FPP.L #.W,(d16,PC) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f23a_31)(uae_u32 opcode) { uae_u32 dstreg = 2; { #ifdef FPUEMU { uae_s16 extra = get_iword_mmu (2); m68k_incpci (4); fpuop_arithmetic(opcode, extra); } #endif }return 8 * CYCLE_UNIT / 2; } #endif /* FPP.L #.W,(d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f23b_31)(uae_u32 opcode) { uae_u32 dstreg = 3; { #ifdef FPUEMU { uae_s16 extra = get_iword_mmu (2); m68k_incpci (4); fpuop_arithmetic(opcode, extra); } #endif }return 8 * CYCLE_UNIT / 2; } #endif /* FPP.L #.W,#.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f23c_31)(uae_u32 opcode) { { #ifdef FPUEMU { uae_s16 extra = get_iword_mmu (2); m68k_incpci (4); fpuop_arithmetic(opcode, extra); } #endif }return 8 * CYCLE_UNIT / 2; } #endif /* FScc.L #.W,Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f240_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { #ifdef FPUEMU { uae_s16 extra = get_iword_mmu (2); m68k_incpci (4); fpuop_scc (opcode, extra); } #endif }return 8 * CYCLE_UNIT / 2; } #endif /* FDBcc.L #.W,Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f248_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { #ifdef FPUEMU { uae_s16 extra = get_iword_mmu (2); m68k_incpci (4); fpuop_dbcc (opcode, extra); } #endif }return 8 * CYCLE_UNIT / 2; } #endif /* FScc.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f250_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { #ifdef FPUEMU { uae_s16 extra = get_iword_mmu (2); m68k_incpci (4); fpuop_scc (opcode, extra); } #endif }return 8 * CYCLE_UNIT / 2; } #endif /* FScc.L #.W,(An)+ */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f258_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { #ifdef FPUEMU { uae_s16 extra = get_iword_mmu (2); m68k_incpci (4); fpuop_scc (opcode, extra); } #endif }return 8 * CYCLE_UNIT / 2; } #endif /* FScc.L #.W,-(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f260_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { #ifdef FPUEMU { uae_s16 extra = get_iword_mmu (2); m68k_incpci (4); fpuop_scc (opcode, extra); } #endif }return 8 * CYCLE_UNIT / 2; } #endif /* FScc.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f268_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { #ifdef FPUEMU { uae_s16 extra = get_iword_mmu (2); m68k_incpci (4); fpuop_scc (opcode, extra); } #endif }return 8 * CYCLE_UNIT / 2; } #endif /* FScc.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f270_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { #ifdef FPUEMU { uae_s16 extra = get_iword_mmu (2); m68k_incpci (4); fpuop_scc (opcode, extra); } #endif }return 8 * CYCLE_UNIT / 2; } #endif /* FScc.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f278_31)(uae_u32 opcode) { { #ifdef FPUEMU { uae_s16 extra = get_iword_mmu (2); m68k_incpci (4); fpuop_scc (opcode, extra); } #endif }return 8 * CYCLE_UNIT / 2; } #endif /* FScc.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f279_31)(uae_u32 opcode) { { #ifdef FPUEMU { uae_s16 extra = get_iword_mmu (2); m68k_incpci (4); fpuop_scc (opcode, extra); } #endif }return 8 * CYCLE_UNIT / 2; } #endif /* FTRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f27a_31)(uae_u32 opcode) { { #ifdef FPUEMU uaecptr oldpc = m68k_getpc (); uae_u16 extra = get_iword_mmu (2); { uae_s16 dummy = get_iword_mmu (4); m68k_incpci (6); fpuop_trapcc (opcode, oldpc, extra); } #endif }return 12 * CYCLE_UNIT / 2; } #endif /* FTRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f27b_31)(uae_u32 opcode) { { #ifdef FPUEMU uaecptr oldpc = m68k_getpc (); uae_u16 extra = get_iword_mmu (2); { uae_s32 dummy = get_ilong_mmu (4); m68k_incpci (8); fpuop_trapcc (opcode, oldpc, extra); } #endif }return 16 * CYCLE_UNIT / 2; } #endif /* FTRAPcc.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f27c_31)(uae_u32 opcode) { { #ifdef FPUEMU uaecptr oldpc = m68k_getpc (); uae_u16 extra = get_iword_mmu (2); m68k_incpci (4); fpuop_trapcc (opcode, oldpc, extra); #endif }return 8 * CYCLE_UNIT / 2; } #endif /* FBccQ.L #,#.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f280_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 63); { #ifdef FPUEMU m68k_incpci (2); { uaecptr pc = m68k_getpc (); { uae_s16 extra = get_iword_mmu (0); m68k_incpci (2); fpuop_bcc (opcode, pc,extra); }} #endif }return 8 * CYCLE_UNIT / 2; } #endif /* FBccQ.L #,#.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f2c0_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 63); { #ifdef FPUEMU m68k_incpci (2); { uaecptr pc = m68k_getpc (); { uae_s32 extra = get_ilong_mmu (0); m68k_incpci (4); fpuop_bcc (opcode, pc,extra); }} #endif }return 12 * CYCLE_UNIT / 2; } #endif /* FSAVE.L (An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f310_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel12703; } { #ifdef FPUEMU m68k_incpci (2); fpuop_save (opcode); #endif }}endlabel12703: ; return 4 * CYCLE_UNIT / 2; } #endif /* FSAVE.L -(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f320_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel12704; } { #ifdef FPUEMU m68k_incpci (2); fpuop_save (opcode); #endif }}endlabel12704: ; return 4 * CYCLE_UNIT / 2; } #endif /* FSAVE.L (d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f328_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel12705; } { #ifdef FPUEMU m68k_incpci (2); fpuop_save (opcode); #endif }}endlabel12705: ; return 4 * CYCLE_UNIT / 2; } #endif /* FSAVE.L (d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f330_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel12706; } { #ifdef FPUEMU m68k_incpci (2); fpuop_save (opcode); #endif }}endlabel12706: ; return 4 * CYCLE_UNIT / 2; } #endif /* FSAVE.L (xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f338_31)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel12707; } { #ifdef FPUEMU m68k_incpci (2); fpuop_save (opcode); #endif }}endlabel12707: ; return 4 * CYCLE_UNIT / 2; } #endif /* FSAVE.L (xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f339_31)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel12708; } { #ifdef FPUEMU m68k_incpci (2); fpuop_save (opcode); #endif }}endlabel12708: ; return 4 * CYCLE_UNIT / 2; } #endif /* FRESTORE.L (An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f350_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel12709; } { #ifdef FPUEMU m68k_incpci (2); fpuop_restore (opcode); #endif }}endlabel12709: ; return 4 * CYCLE_UNIT / 2; } #endif /* FRESTORE.L (An)+ */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f358_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel12710; } { #ifdef FPUEMU m68k_incpci (2); fpuop_restore (opcode); #endif }}endlabel12710: ; return 4 * CYCLE_UNIT / 2; } #endif /* FRESTORE.L (d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f368_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel12711; } { #ifdef FPUEMU m68k_incpci (2); fpuop_restore (opcode); #endif }}endlabel12711: ; return 4 * CYCLE_UNIT / 2; } #endif /* FRESTORE.L (d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f370_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel12712; } { #ifdef FPUEMU m68k_incpci (2); fpuop_restore (opcode); #endif }}endlabel12712: ; return 4 * CYCLE_UNIT / 2; } #endif /* FRESTORE.L (xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f378_31)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel12713; } { #ifdef FPUEMU m68k_incpci (2); fpuop_restore (opcode); #endif }}endlabel12713: ; return 4 * CYCLE_UNIT / 2; } #endif /* FRESTORE.L (xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f379_31)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel12714; } { #ifdef FPUEMU m68k_incpci (2); fpuop_restore (opcode); #endif }}endlabel12714: ; return 4 * CYCLE_UNIT / 2; } #endif /* FRESTORE.L (d16,PC) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f37a_31)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel12715; } { #ifdef FPUEMU m68k_incpci (2); fpuop_restore (opcode); #endif }}endlabel12715: ; return 4 * CYCLE_UNIT / 2; } #endif /* FRESTORE.L (d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f37b_31)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel12716; } { #ifdef FPUEMU m68k_incpci (2); fpuop_restore (opcode); #endif }}endlabel12716: ; return 4 * CYCLE_UNIT / 2; } #endif /* CINVLQ.L #,An */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f408_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 6) & 3); uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel12717; } { flush_mmu(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); if (opcode & 0x80) flush_icache(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); }} m68k_incpci (2); endlabel12717: ; return 4 * CYCLE_UNIT / 2; } #endif /* CINVPQ.L #,An */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f410_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 6) & 3); uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel12718; } { flush_mmu(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); if (opcode & 0x80) flush_icache(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); }} m68k_incpci (2); endlabel12718: ; return 4 * CYCLE_UNIT / 2; } #endif /* CINVAQ.L # */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f418_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 6) & 3); {if (!regs.s) { Exception (8); goto endlabel12719; } { flush_mmu(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); if (opcode & 0x80) flush_icache(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); }} m68k_incpci (2); endlabel12719: ; return 4 * CYCLE_UNIT / 2; } #endif /* CINVAQ.L # */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f419_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 6) & 3); {if (!regs.s) { Exception (8); goto endlabel12720; } { flush_mmu(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); if (opcode & 0x80) flush_icache(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); }} m68k_incpci (2); endlabel12720: ; return 4 * CYCLE_UNIT / 2; } #endif /* CINVAQ.L # */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f41a_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 6) & 3); {if (!regs.s) { Exception (8); goto endlabel12721; } { flush_mmu(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); if (opcode & 0x80) flush_icache(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); }} m68k_incpci (2); endlabel12721: ; return 4 * CYCLE_UNIT / 2; } #endif /* CINVAQ.L # */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f41b_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 6) & 3); {if (!regs.s) { Exception (8); goto endlabel12722; } { flush_mmu(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); if (opcode & 0x80) flush_icache(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); }} m68k_incpci (2); endlabel12722: ; return 4 * CYCLE_UNIT / 2; } #endif /* CINVAQ.L # */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f41c_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 6) & 3); {if (!regs.s) { Exception (8); goto endlabel12723; } { flush_mmu(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); if (opcode & 0x80) flush_icache(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); }} m68k_incpci (2); endlabel12723: ; return 4 * CYCLE_UNIT / 2; } #endif /* CINVAQ.L # */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f41d_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 6) & 3); {if (!regs.s) { Exception (8); goto endlabel12724; } { flush_mmu(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); if (opcode & 0x80) flush_icache(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); }} m68k_incpci (2); endlabel12724: ; return 4 * CYCLE_UNIT / 2; } #endif /* CINVAQ.L # */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f41e_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 6) & 3); {if (!regs.s) { Exception (8); goto endlabel12725; } { flush_mmu(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); if (opcode & 0x80) flush_icache(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); }} m68k_incpci (2); endlabel12725: ; return 4 * CYCLE_UNIT / 2; } #endif /* CINVAQ.L # */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f41f_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 6) & 3); {if (!regs.s) { Exception (8); goto endlabel12726; } { flush_mmu(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); if (opcode & 0x80) flush_icache(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); }} m68k_incpci (2); endlabel12726: ; return 4 * CYCLE_UNIT / 2; } #endif /* CPUSHLQ.L #,An */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f428_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 6) & 3); uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel12727; } { flush_mmu(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); if (opcode & 0x80) flush_icache(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); }} m68k_incpci (2); endlabel12727: ; return 4 * CYCLE_UNIT / 2; } #endif /* CPUSHPQ.L #,An */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f430_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 6) & 3); uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel12728; } { flush_mmu(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); if (opcode & 0x80) flush_icache(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); }} m68k_incpci (2); endlabel12728: ; return 4 * CYCLE_UNIT / 2; } #endif /* CPUSHAQ.L # */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f438_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 6) & 3); {if (!regs.s) { Exception (8); goto endlabel12729; } { flush_mmu(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); if (opcode & 0x80) flush_icache(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); }} m68k_incpci (2); endlabel12729: ; return 4 * CYCLE_UNIT / 2; } #endif /* CPUSHAQ.L # */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f439_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 6) & 3); {if (!regs.s) { Exception (8); goto endlabel12730; } { flush_mmu(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); if (opcode & 0x80) flush_icache(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); }} m68k_incpci (2); endlabel12730: ; return 4 * CYCLE_UNIT / 2; } #endif /* CPUSHAQ.L # */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f43a_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 6) & 3); {if (!regs.s) { Exception (8); goto endlabel12731; } { flush_mmu(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); if (opcode & 0x80) flush_icache(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); }} m68k_incpci (2); endlabel12731: ; return 4 * CYCLE_UNIT / 2; } #endif /* CPUSHAQ.L # */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f43b_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 6) & 3); {if (!regs.s) { Exception (8); goto endlabel12732; } { flush_mmu(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); if (opcode & 0x80) flush_icache(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); }} m68k_incpci (2); endlabel12732: ; return 4 * CYCLE_UNIT / 2; } #endif /* CPUSHAQ.L # */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f43c_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 6) & 3); {if (!regs.s) { Exception (8); goto endlabel12733; } { flush_mmu(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); if (opcode & 0x80) flush_icache(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); }} m68k_incpci (2); endlabel12733: ; return 4 * CYCLE_UNIT / 2; } #endif /* CPUSHAQ.L # */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f43d_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 6) & 3); {if (!regs.s) { Exception (8); goto endlabel12734; } { flush_mmu(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); if (opcode & 0x80) flush_icache(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); }} m68k_incpci (2); endlabel12734: ; return 4 * CYCLE_UNIT / 2; } #endif /* CPUSHAQ.L # */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f43e_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 6) & 3); {if (!regs.s) { Exception (8); goto endlabel12735; } { flush_mmu(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); if (opcode & 0x80) flush_icache(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); }} m68k_incpci (2); endlabel12735: ; return 4 * CYCLE_UNIT / 2; } #endif /* CPUSHAQ.L # */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f43f_31)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 6) & 3); {if (!regs.s) { Exception (8); goto endlabel12736; } { flush_mmu(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); if (opcode & 0x80) flush_icache(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3); }} m68k_incpci (2); endlabel12736: ; return 4 * CYCLE_UNIT / 2; } #endif /* PFLUSHN.L (An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f500_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel12737; } { m68k_incpci (2); mmu_op (opcode, 0); }}endlabel12737: ; return 4 * CYCLE_UNIT / 2; } #endif /* PFLUSH.L (An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f508_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel12738; } { m68k_incpci (2); mmu_op (opcode, 0); }}endlabel12738: ; return 4 * CYCLE_UNIT / 2; } #endif /* PFLUSHAN.L (An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f510_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel12739; } { m68k_incpci (2); mmu_op (opcode, 0); }}endlabel12739: ; return 4 * CYCLE_UNIT / 2; } #endif /* PFLUSHA.L (An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f518_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel12740; } { m68k_incpci (2); mmu_op (opcode, 0); }}endlabel12740: ; return 4 * CYCLE_UNIT / 2; } #endif /* PTESTR.L (An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f548_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel12741; } { m68k_incpci (2); mmu_op (opcode, 0); }}endlabel12741: ; return 4 * CYCLE_UNIT / 2; } #endif /* PTESTW.L (An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f568_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel12742; } { m68k_incpci (2); mmu_op (opcode, 0); }}endlabel12742: ; return 4 * CYCLE_UNIT / 2; } #endif /* MOVE16.L (An)+,(xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f600_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); { uae_u32 v1, v2, v3, v4; { uaecptr memsa = m68k_areg (regs, srcreg); { uaecptr memda = get_ilong_mmu (2); memsa &= ~15; memda &= ~15; v1 = get_long_mmu (memsa); v2 = get_long_mmu (memsa + 4); v3 = get_long_mmu (memsa + 8); v4 = get_long_mmu (memsa + 12); put_long_mmu (memda , v1); put_long_mmu (memda + 4, v2); put_long_mmu (memda + 8, v3); put_long_mmu (memda + 12, v4); m68k_areg (regs, srcreg) += 16; }}} m68k_incpci (6); return 12 * CYCLE_UNIT / 2; } #endif /* MOVE16.L (xxx).L,(An)+ */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f608_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u32 v1, v2, v3, v4; { uaecptr memsa = get_ilong_mmu (2); { uaecptr memda = m68k_areg (regs, dstreg); memsa &= ~15; memda &= ~15; v1 = get_long_mmu (memsa); v2 = get_long_mmu (memsa + 4); v3 = get_long_mmu (memsa + 8); v4 = get_long_mmu (memsa + 12); put_long_mmu (memda , v1); put_long_mmu (memda + 4, v2); put_long_mmu (memda + 8, v3); put_long_mmu (memda + 12, v4); m68k_areg (regs, dstreg) += 16; }}} m68k_incpci (6); return 12 * CYCLE_UNIT / 2; } #endif /* MOVE16.L (An),(xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f610_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); { uae_u32 v1, v2, v3, v4; { uaecptr memsa = m68k_areg (regs, srcreg); { uaecptr memda = get_ilong_mmu (2); memsa &= ~15; memda &= ~15; v1 = get_long_mmu (memsa); v2 = get_long_mmu (memsa + 4); v3 = get_long_mmu (memsa + 8); v4 = get_long_mmu (memsa + 12); put_long_mmu (memda , v1); put_long_mmu (memda + 4, v2); put_long_mmu (memda + 8, v3); put_long_mmu (memda + 12, v4); }}} m68k_incpci (6); return 12 * CYCLE_UNIT / 2; } #endif /* MOVE16.L (xxx).L,(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f618_31)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u32 v1, v2, v3, v4; { uaecptr memsa = get_ilong_mmu (2); { uaecptr memda = m68k_areg (regs, dstreg); memsa &= ~15; memda &= ~15; v1 = get_long_mmu (memsa); v2 = get_long_mmu (memsa + 4); v3 = get_long_mmu (memsa + 8); v4 = get_long_mmu (memsa + 12); put_long_mmu (memda , v1); put_long_mmu (memda + 4, v2); put_long_mmu (memda + 8, v3); put_long_mmu (memda + 12, v4); }}} m68k_incpci (6); return 12 * CYCLE_UNIT / 2; } #endif /* MOVE16.L (An)+,(An)+ */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f620_31)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = 0; { uae_u32 v1, v2, v3, v4; uaecptr mems = m68k_areg (regs, srcreg) & ~15, memd; dstreg = (get_iword_mmu (2) >> 12) & 7; memd = m68k_areg (regs, dstreg) & ~15; v1 = get_long_mmu (mems); v2 = get_long_mmu (mems + 4); v3 = get_long_mmu (mems + 8); v4 = get_long_mmu (mems + 12); put_long_mmu (memd , v1); put_long_mmu (memd + 4, v2); put_long_mmu (memd + 8, v3); put_long_mmu (memd + 12, v4); if (srcreg != dstreg) m68k_areg (regs, srcreg) += 16; m68k_areg (regs, dstreg) += 16; } m68k_incpci (4); return 8 * CYCLE_UNIT / 2; } #endif #endif fs-uae-2.2.3+dfsg/gensrc/cpudefs.cpp0000644000175000017500000007000612162366654017475 0ustar glaubitzglaubitz#include "sysconfig.h" #include "sysdeps.h" #include "readcpu.h" struct instr_def defs68k[] = { /* ORSR.B */ {0x003C, 0,{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFFF,0,0,0,{{0,0},{0,0},{0,0},{0,0},{0,0}},16,_T("ORSR.B #1")}, /* ORSR.W */ {0x007C, 0,{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFFF,0,0,2,{{3,5},{3,5},{3,5},{3,5},{3,5}},16,_T("ORSR.W #1")}, /* CHK2.z */ {0x00C0, 8,{17,17,11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0},0xF9C0,2,5,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},17,_T("CHK2.z #1,s[!Dreg,Areg,Aipi,Apdi,Immd]")}, /* OR.z */ {0x0000, 8,{17,17,13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0, 0},0xFF00,0,0,0,{{1,1},{1,0},{1,0},{1,2},{1,2}},19,_T("OR.z #z,d[!Areg]")}, /* ANDSR.B */ {0x023C, 0,{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFFF,0,0,0,{{0,0},{0,0},{0,0},{0,0},{0,0}},16,_T("ANDSR.B #1")}, /* ANDSR.W */ {0x027C, 0,{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFFF,0,0,2,{{3,5},{3,5},{3,5},{3,5},{3,5}},16,_T("ANDSR.W #1")}, /* AND.z */ {0x0200, 8,{17,17,13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0, 0},0xFF00,0,0,0,{{1,1},{1,0},{1,0},{1,2},{1,2}},19,_T("AND.z #z,d[!Areg]")}, /* SUB.z */ {0x0400, 8,{17,17,13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0, 0},0xFF00,0,0,0,{{1,0},{1,0},{1,0},{1,0},{1,0}},19,_T("SUB.z #z,d[!Areg]")}, /* ADD.z */ {0x0600, 8,{17,17,13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0, 0},0xFF00,0,0,0,{{1,0},{1,0},{1,0},{1,0},{1,0}},19,_T("ADD.z #z,d[!Areg]")}, /* CALLM */ {0x06C0, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,2,3,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},16,_T("CALLM s[!Dreg,Areg,Aipi,Apdi,Immd]")}, /* RTM */ {0x06C0, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,2,3,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},16,_T("RTM s[Dreg,Areg]")}, /* BTST */ {0x0800, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,0,0,0,{{1,1},{1,1},{1,0},{1,1},{1,1}},17,_T("BTST #1,s[!Areg]")}, /* BCHG */ {0x0840, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,0,0,0,{{1,1},{1,1},{1,0},{1,1},{1,1}},19,_T("BCHG #1,s[!Areg,Immd]")}, /* BCLR */ {0x0880, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,0,0,0,{{1,1},{1,1},{1,0},{1,1},{1,1}},19,_T("BCLR #1,s[!Areg,Immd]")}, /* BSET */ {0x08C0, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,0,0,0,{{1,1},{1,1},{1,0},{1,1},{1,1}},19,_T("BSET #1,s[!Areg,Immd]")}, /* EORSR.B */ {0x0A3C, 0,{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFFF,0,0,0,{{0,0},{0,0},{0,0},{0,0},{0,0}},16,_T("EORSR.B #1")}, /* EORSR.W */ {0x0A7C, 0,{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFFF,0,0,2,{{3,5},{3,5},{3,5},{3,5},{3,5}},16,_T("EORSR.W #1")}, /* EOR.z */ {0x0A00, 8,{17,17,13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0, 0},0xFF00,0,0,0,{{1,1},{1,0},{1,0},{1,2},{1,2}},19,_T("EOR.z #z,d[!Areg]")}, /* CMP.z */ {0x0C00, 8,{17,17,11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0},0xFF00,0,0,0,{{1,1},{1,0},{1,0},{1,0},{1,0}},17,_T("CMP.z #z,s[!Areg,Immd,PC8r,PC16]")}, /* CMP.z */ {0x0C00, 8,{17,17,11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0},0xFF00,2,0,0,{{1,1},{1,0},{1,0},{1,0},{1,0}},17,_T("CMP.z #z,s[PC8r,PC16]")}, /* CAS.B */ {0x0AC0, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,2,0,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},19,_T("CAS.B #1,s[!Dreg,Areg,Immd,PC8r,PC16]")}, /* CAS.W */ {0x0CC0, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,2,0,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},19,_T("CAS.W #1,s[!Dreg,Areg,Immd,PC8r,PC16]")}, /* CAS2.W */ {0x0CFC, 0,{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFFF,2,5,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},16,_T("CAS2.W #2")}, /* MOVES.z */ {0x0E00, 8,{17,17,11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0},0xFF00,2,0,2,{{3,5},{3,5},{3,5},{3,5},{3,5}},19,_T("MOVES.z #1,s[!Dreg,Areg,Immd,PC8r,PC16]")}, /* CAS.L */ {0x0EC0, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,2,0,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},19,_T("CAS.L #1,s[!Dreg,Areg,Immd,PC8r,PC16]")}, /* CAS2.L */ {0x0EFC, 0,{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFFF,2,5,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},16,_T("CAS2.L #2")}, /* MVPMR.W */ {0x0100, 9,{15,15,15,13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0},0xF1C0,0,0,0,{{1,1},{1,1},{1,1},{1,1},{1,1}},18,_T("MVPMR.W d[Areg-Ad16],Dr")}, /* MVPMR.L */ {0x0140, 9,{15,15,15,13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0},0xF1C0,0,0,0,{{1,1},{1,1},{1,1},{1,1},{1,1}},18,_T("MVPMR.L d[Areg-Ad16],Dr")}, /* MVPRM.W */ {0x0180, 9,{15,15,15,13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0},0xF1C0,0,0,0,{{1,1},{1,1},{1,1},{1,1},{1,1}},18,_T("MVPRM.W Dr,d[Areg-Ad16]")}, /* MVPRM.L */ {0x01C0, 9,{15,15,15,13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0},0xF1C0,0,0,0,{{1,1},{1,1},{1,1},{1,1},{1,1}},18,_T("MVPRM.L Dr,d[Areg-Ad16]")}, /* BTST */ {0x0100, 9,{15,15,15,11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0},0xF1C0,0,0,0,{{1,1},{1,1},{1,0},{1,1},{1,1}},17,_T("BTST Dr,s[!Areg]")}, /* BCHG */ {0x0140, 9,{15,15,15,11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0},0xF1C0,0,0,0,{{1,1},{1,1},{1,0},{1,1},{1,1}},19,_T("BCHG Dr,s[!Areg,Immd]")}, /* BCLR */ {0x0180, 9,{15,15,15,11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0},0xF1C0,0,0,0,{{1,1},{1,1},{1,0},{1,1},{1,1}},19,_T("BCLR Dr,s[!Areg,Immd]")}, /* BSET */ {0x01C0, 9,{15,15,15,11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0},0xF1C0,0,0,0,{{1,1},{1,1},{1,0},{1,1},{1,1}},19,_T("BSET Dr,s[!Areg,Immd]")}, /* MOVE.B */ {0x1000,12,{14,14,14,13,13,13,11,11,11,12,12,12, 0, 0, 0, 0},0xF000,0,0,0,{{1,1},{1,0},{1,0},{1,2},{1,2}},18,_T("MOVE.B s,d[!Areg]")}, /* MOVEA.L */ {0x2000,12,{14,14,14,13,13,13,11,11,11,12,12,12, 0, 0, 0, 0},0xF000,0,0,0,{{1,1},{1,1},{1,1},{1,1},{1,1}},18,_T("MOVEA.L s,d[Areg]")}, /* MOVE.L */ {0x2000,12,{14,14,14,13,13,13,11,11,11,12,12,12, 0, 0, 0, 0},0xF000,0,0,0,{{1,1},{1,0},{1,0},{1,2},{1,2}},18,_T("MOVE.L s,d[!Areg]")}, /* MOVEA.W */ {0x3000,12,{14,14,14,13,13,13,11,11,11,12,12,12, 0, 0, 0, 0},0xF000,0,0,0,{{1,1},{1,1},{1,1},{1,1},{1,1}},18,_T("MOVEA.W s,d[Areg]")}, /* MOVE.W */ {0x3000,12,{14,14,14,13,13,13,11,11,11,12,12,12, 0, 0, 0, 0},0xF000,0,0,0,{{1,1},{1,0},{1,0},{1,2},{1,2}},18,_T("MOVE.W s,d[!Areg]")}, /* NEGX.z */ {0x4000, 8,{17,17,13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0, 0},0xFF00,0,0,0,{{0,0},{1,4},{0,0},{1,4},{1,0}},48,_T("NEGX.z d[!Areg]")}, /* MVSR2.W */ {0x40C0, 6,{13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,0,0,1,{{3,5},{3,5},{3,5},{3,5},{3,5}},16,_T("MVSR2.W d[!Areg]")}, /* CLR.z */ {0x4200, 8,{17,17,13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0, 0},0xFF00,0,0,0,{{1,1},{1,2},{1,3},{1,2},{1,2}},32,_T("CLR.z d[!Areg]")}, /* MVSR2.B */ {0x42C0, 6,{13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,1,0,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},16,_T("MVSR2.B d[!Areg]")}, /* NEG.z */ {0x4400, 8,{17,17,13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0, 0},0xFF00,0,0,0,{{1,0},{1,0},{1,0},{1,0},{1,0}},48,_T("NEG.z d[!Areg]")}, /* MV2SR.B */ {0x44C0, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,0,0,0,{{1,0},{1,0},{1,0},{1,0},{1,0}},16,_T("MV2SR.B s[!Areg]")}, /* NOT.z */ {0x4600, 8,{17,17,13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0, 0},0xFF00,0,0,0,{{1,1},{1,0},{1,0},{1,2},{1,2}},48,_T("NOT.z d[!Areg]")}, /* MV2SR.W */ {0x46C0, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,0,0,2,{{3,5},{3,5},{3,5},{3,5},{3,5}},16,_T("MV2SR.W s[!Areg]")}, /* LINK.L */ {0x4808, 3,{15,15,15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFF8,2,0,0,{{1,1},{1,1},{1,1},{1,1},{1,1}},49,_T("LINK.L Ar,#2")}, /* NBCD.B */ {0x4800, 6,{13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,0,0,0,{{0,0},{1,5},{0,0},{1,5},{1,0}},48,_T("NBCD.B d[!Areg]")}, /* BKPT */ {0x4848, 3,{ 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFF8,2,0,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},16,_T("BKPT #k")}, /* SWAP.W */ {0x4840, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,0,0,0,{{1,1},{1,0},{1,0},{1,2},{1,2}},48,_T("SWAP.W s[Dreg]")}, /* PEA.L */ {0x4840, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,0,0,0,{{1,1},{1,1},{1,1},{1,1},{1,1}}, 0,_T("PEA.L s[!Dreg,Areg,Aipi,Apdi,Immd]")}, /* EXT.W */ {0x4880, 6,{13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,0,0,0,{{1,1},{1,0},{1,0},{1,2},{1,2}},48,_T("EXT.W d[Dreg]")}, /* MVMLE.W */ {0x4880, 6,{13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,0,0,0,{{1,1},{1,1},{1,1},{1,1},{1,1}}, 2,_T("MVMLE.W #1,d[!Dreg,Areg,Aipi]")}, /* EXT.L */ {0x48C0, 6,{13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,0,0,0,{{1,1},{1,0},{1,0},{1,2},{1,2}},48,_T("EXT.L d[Dreg]")}, /* MVMLE.L */ {0x48C0, 6,{13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,0,0,0,{{1,1},{1,1},{1,1},{1,1},{1,1}}, 2,_T("MVMLE.L #1,d[!Dreg,Areg,Aipi]")}, /* EXT.B */ {0x49C0, 6,{13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,2,0,0,{{1,1},{1,0},{1,0},{1,2},{1,2}},48,_T("EXT.B d[Dreg]")}, /* TST.z */ {0x4A00, 8,{17,17,11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0},0xFF00,0,0,0,{{1,1},{1,0},{1,0},{1,2},{1,2}},16,_T("TST.z s[!Areg,PC16,PC8r]")}, /* TST.z */ {0x4A00, 8,{17,17,11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0},0xFF00,2,0,0,{{1,1},{1,0},{1,0},{1,2},{1,2}},16,_T("TST.z s[Areg,PC16,PC8r]")}, /* TAS.B */ {0x4AC0, 6,{13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,0,0,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},48,_T("TAS.B d[!Areg]")}, /* ILLEGAL */ {0x4AFC, 0,{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFFF,0,0,0,{{3,5},{3,5},{3,5},{3,5},{3,5}}, 0,_T("ILLEGAL")}, /* MULL.L */ {0x4C00, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,2,0,0,{{1,1},{1,0},{1,0},{1,0},{1,0}},19,_T("MULL.L #1,s[!Areg]")}, /* DIVL.L */ {0x4C40, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,2,0,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},19,_T("DIVL.L #1,s[!Areg]")}, /* MVMEL.W */ {0x4C80, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,0,0,0,{{1,1},{1,1},{1,1},{1,1},{1,1}}, 1,_T("MVMEL.W #1,s[!Dreg,Areg,Apdi,Immd]")}, /* MVMEL.L */ {0x4CC0, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,0,0,0,{{1,1},{1,1},{1,1},{1,1},{1,1}}, 1,_T("MVMEL.L #1,s[!Dreg,Areg,Apdi,Immd]")}, /* TRAP */ {0x4E40, 4,{ 8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFF0,0,0,0,{{0,1},{0,1},{0,1},{0,1},{0,1}},16,_T("TRAP #J")}, /* LINK.W */ {0x4E50, 3,{15,15,15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFF8,0,0,0,{{1,1},{1,1},{1,1},{1,1},{1,1}},49,_T("LINK.W Ar,#1")}, /* UNLK.L */ {0x4E58, 3,{15,15,15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFF8,0,0,0,{{1,1},{1,1},{1,1},{1,1},{1,1}},48,_T("UNLK.L Ar")}, /* MVR2USP.L */ {0x4E60, 3,{15,15,15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFF8,0,0,2,{{1,1},{1,1},{1,1},{1,1},{1,1}},16,_T("MVR2USP.L Ar")}, /* MVUSP2R.L */ {0x4E68, 3,{15,15,15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFF8,0,0,2,{{1,1},{1,1},{1,1},{1,1},{1,1}},32,_T("MVUSP2R.L Ar")}, /* RESET */ {0x4E70, 0,{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFFF,0,0,2,{{1,1},{1,1},{1,1},{1,1},{1,1}}, 0,_T("RESET")}, /* NOP */ {0x4E71, 0,{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFFF,0,0,0,{{1,1},{1,1},{1,1},{1,1},{1,1}}, 0,_T("NOP")}, /* STOP */ {0x4E72, 0,{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFFF,0,0,2,{{1,0},{1,0},{1,0},{1,0},{1,0}},16,_T("STOP #1")}, /* RTE */ {0x4E73, 0,{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFFF,0,0,2,{{1,0},{1,0},{1,0},{1,0},{1,0}}, 0,_T("RTE")}, /* RTD */ {0x4E74, 0,{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFFF,0,0,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},16,_T("RTD #1")}, /* RTS */ {0x4E75, 0,{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFFF,0,0,0,{{1,1},{1,1},{1,1},{1,1},{1,1}}, 0,_T("RTS")}, /* TRAPV */ {0x4E76, 0,{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFFF,0,0,0,{{0,1},{0,1},{0,1},{0,1},{0,1}}, 0,_T("TRAPV")}, /* RTR */ {0x4E77, 0,{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFFF,0,0,0,{{1,0},{1,0},{1,0},{1,0},{1,0}}, 0,_T("RTR")}, /* MOVEC2 */ {0x4E7A, 0,{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFFF,1,0,2,{{3,5},{3,5},{3,5},{3,5},{3,5}},16,_T("MOVEC2 #1")}, /* MOVE2C */ {0x4E7B, 0,{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFFF,1,0,2,{{3,5},{3,5},{3,5},{3,5},{3,5}},16,_T("MOVE2C #1")}, /* JSR.L */ {0x4E80, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,0,0,0,{{4,6},{4,6},{4,6},{4,6},{4,6}},128,_T("JSR.L s[!Dreg,Areg,Aipi,Apdi,Immd]")}, /* CHK.L */ {0x4100, 9,{15,15,15,11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0},0xF1C0,2,0,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},17,_T("CHK.L s[!Areg],Dr")}, /* CHK.W */ {0x4180, 9,{15,15,15,11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0},0xF1C0,0,0,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},17,_T("CHK.W s[!Areg],Dr")}, /* JMP.L */ {0x4EC0, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,0,0,0,{{4,6},{4,6},{4,6},{4,6},{4,6}},128,_T("JMP.L s[!Dreg,Areg,Aipi,Apdi,Immd]")}, /* LEA.L */ {0x41C0, 9,{15,15,15,11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0},0xF1C0,0,0,0,{{1,1},{1,1},{1,1},{1,1},{1,1}}, 2,_T("LEA.L s[!Dreg,Areg,Aipi,Apdi,Immd],Ar")}, /* ADDA.W */ {0x5040, 9,{ 7, 7, 7,13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0},0xF1C0,0,0,0,{{1,1},{1,1},{1,1},{1,1},{1,1}},19,_T("ADDA.W #j,d[Areg]")}, /* ADDA.L */ {0x5080, 9,{ 7, 7, 7,13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0},0xF1C0,0,0,0,{{1,1},{1,1},{1,1},{1,1},{1,1}},19,_T("ADDA.L #j,d[Areg]")}, /* ADD.z */ {0x5000,11,{ 7, 7, 7,17,17,13,13,13,14,14,14, 0, 0, 0, 0, 0},0xF100,0,0,0,{{1,0},{1,0},{1,0},{1,0},{1,0}},19,_T("ADD.z #j,d[!Areg]")}, /* SUBA.W */ {0x5140, 9,{ 7, 7, 7,13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0},0xF1C0,0,0,0,{{1,1},{1,1},{1,1},{1,1},{1,1}},19,_T("SUBA.W #j,d[Areg]")}, /* SUBA.L */ {0x5180, 9,{ 7, 7, 7,13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0},0xF1C0,0,0,0,{{1,1},{1,1},{1,1},{1,1},{1,1}},19,_T("SUBA.L #j,d[Areg]")}, /* SUB.z */ {0x5100,11,{ 7, 7, 7,17,17,13,13,13,14,14,14, 0, 0, 0, 0, 0},0xF100,0,0,0,{{1,0},{1,0},{1,0},{1,0},{1,0}},19,_T("SUB.z #j,d[!Areg]")}, /* DBcc.W */ {0x50C8, 7,{ 2, 2, 2, 2,15,15,15, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xF0F8,0,0,0,{{1,1},{2,1},{2,1},{2,1},{2,1}},49,_T("DBcc.W Dr,#1")}, /* Scc.B */ {0x50C0,10,{ 2, 2, 2, 2,13,13,13,14,14,14, 0, 0, 0, 0, 0, 0},0xF0C0,0,0,0,{{1,1},{2,1},{2,1},{2,1},{2,1}},32,_T("Scc.B d[!Areg]")}, /* TRAPcc */ {0x50FA, 4,{ 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xF0FF,2,0,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},16,_T("TRAPcc #1")}, /* TRAPcc */ {0x50FB, 4,{ 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xF0FF,2,0,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},16,_T("TRAPcc #2")}, /* TRAPcc */ {0x50FC, 4,{ 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xF0FF,2,0,0,{{3,5},{3,5},{3,5},{3,5},{3,5}}, 0,_T("TRAPcc")}, /* BSR.W */ {0x6100, 0,{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFFF,0,0,0,{{4,6},{4,6},{4,6},{4,6},{4,6}},64,_T("BSR.W #1")}, /* BSR.B */ {0x6100, 8,{ 6, 6, 6, 6, 6, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0},0xFF00,0,0,0,{{4,6},{4,6},{4,6},{4,6},{4,6}},64,_T("BSR.B #i")}, /* BSR.L */ {0x61FF, 0,{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFFF,0,0,0,{{4,6},{4,6},{4,6},{4,6},{4,6}},64,_T("BSR.L #2")}, /* Bcc.W */ {0x6000, 4,{ 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xF0FF,0,0,0,{{1,1},{2,1},{2,1},{2,1},{2,1}},64,_T("Bcc.W #1")}, /* Bcc.B */ {0x6000,12,{ 3, 3, 3, 3, 6, 6, 6, 6, 6, 6, 6, 6, 0, 0, 0, 0},0xF000,0,0,0,{{1,1},{2,1},{2,1},{2,1},{2,1}},64,_T("Bcc.B #i")}, /* Bcc.L */ {0x60FF, 4,{ 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xF0FF,0,0,0,{{1,1},{2,1},{2,1},{2,1},{2,1}},64,_T("Bcc.L #2")}, /* MOVE.L */ {0x7000,11,{15,15,15, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0},0xF100,0,0,0,{{1,1},{1,0},{1,0},{1,2},{1,2}},18,_T("MOVE.L #i,Dr")}, /* OR.z */ {0x8000,11,{15,15,15,17,17,11,11,11,12,12,12, 0, 0, 0, 0, 0},0xF100,0,0,0,{{1,1},{1,0},{1,0},{1,2},{1,2}},19,_T("OR.z s[!Areg],Dr")}, /* DIVU.W */ {0x80C0, 9,{15,15,15,11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0},0xF1C0,0,0,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},19,_T("DIVU.W s[!Areg],Dr")}, /* SBCD.B */ {0x8100, 9,{15,15,15,13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0},0xF1C0,0,0,0,{{0,0},{1,4},{0,0},{1,4},{1,0}},19,_T("SBCD.B d[Dreg],Dr")}, /* SBCD.B */ {0x8100, 9,{15,15,15,13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0},0xF1C0,0,0,0,{{0,0},{1,4},{0,0},{1,4},{1,0}},19,_T("SBCD.B d[Areg-Apdi],Arp")}, /* OR.z */ {0x8100,11,{15,15,15,17,17,13,13,13,14,14,14, 0, 0, 0, 0, 0},0xF100,0,0,0,{{1,1},{1,0},{1,0},{1,2},{1,2}},19,_T("OR.z Dr,d[!Areg,Dreg]")}, /* PACK */ {0x8140, 9,{15,15,15,13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0},0xF1C0,2,0,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},18,_T("PACK d[Dreg],Dr")}, /* PACK */ {0x8140, 9,{15,15,15,13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0},0xF1C0,2,0,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},18,_T("PACK d[Areg-Apdi],Arp")}, /* UNPK */ {0x8180, 9,{15,15,15,13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0},0xF1C0,2,0,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},18,_T("UNPK d[Dreg],Dr")}, /* UNPK */ {0x8180, 9,{15,15,15,13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0},0xF1C0,2,0,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},18,_T("UNPK d[Areg-Apdi],Arp")}, /* DIVS.W */ {0x81C0, 9,{15,15,15,11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0},0xF1C0,0,0,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},19,_T("DIVS.W s[!Areg],Dr")}, /* SUB.z */ {0x9000,11,{15,15,15,17,17,11,11,11,12,12,12, 0, 0, 0, 0, 0},0xF100,0,0,0,{{1,0},{1,0},{1,0},{1,0},{1,0}},19,_T("SUB.z s,Dr")}, /* SUBA.W */ {0x90C0, 9,{15,15,15,11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0},0xF1C0,0,0,0,{{1,1},{1,1},{1,1},{1,1},{1,1}},19,_T("SUBA.W s,Ar")}, /* SUBX.z */ {0x9100,11,{15,15,15,17,17,13,13,13,14,14,14, 0, 0, 0, 0, 0},0xF100,0,0,0,{{0,0},{1,0},{0,0},{1,0},{1,0}},19,_T("SUBX.z d[Dreg],Dr")}, /* SUBX.z */ {0x9100,11,{15,15,15,17,17,13,13,13,14,14,14, 0, 0, 0, 0, 0},0xF100,0,0,0,{{0,0},{1,0},{0,0},{1,0},{1,0}},19,_T("SUBX.z d[Areg-Apdi],Arp")}, /* SUB.z */ {0x9100,11,{15,15,15,17,17,13,13,13,14,14,14, 0, 0, 0, 0, 0},0xF100,0,0,0,{{1,0},{1,0},{1,0},{1,0},{1,0}},19,_T("SUB.z Dr,d[!Areg,Dreg]")}, /* SUBA.L */ {0x91C0, 9,{15,15,15,11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0},0xF1C0,0,0,0,{{1,1},{1,1},{1,1},{1,1},{1,1}},19,_T("SUBA.L s,Ar")}, /* CMP.z */ {0xB000,11,{15,15,15,17,17,11,11,11,12,12,12, 0, 0, 0, 0, 0},0xF100,0,0,0,{{1,1},{1,0},{1,0},{1,0},{1,0}},17,_T("CMP.z s,Dr")}, /* CMPA.W */ {0xB0C0, 9,{15,15,15,11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0},0xF1C0,0,0,0,{{1,1},{1,0},{1,0},{1,0},{1,0}},17,_T("CMPA.W s,Ar")}, /* CMPA.L */ {0xB1C0, 9,{15,15,15,11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0},0xF1C0,0,0,0,{{1,1},{1,0},{1,0},{1,0},{1,0}},17,_T("CMPA.L s,Ar")}, /* CMPM.z */ {0xB100,11,{15,15,15,17,17,13,13,13,14,14,14, 0, 0, 0, 0, 0},0xF100,0,0,0,{{1,1},{1,0},{1,0},{1,0},{1,0}},17,_T("CMPM.z d[Areg-Aipi],ArP")}, /* EOR.z */ {0xB100,11,{15,15,15,17,17,13,13,13,14,14,14, 0, 0, 0, 0, 0},0xF100,0,0,0,{{1,1},{1,0},{1,0},{1,2},{1,2}},19,_T("EOR.z Dr,d[!Areg]")}, /* AND.z */ {0xC000,11,{15,15,15,17,17,11,11,11,12,12,12, 0, 0, 0, 0, 0},0xF100,0,0,0,{{1,1},{1,0},{1,0},{1,2},{1,2}},19,_T("AND.z s[!Areg],Dr")}, /* MULU.W */ {0xC0C0, 9,{15,15,15,11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0},0xF1C0,0,0,0,{{1,1},{1,0},{1,0},{1,2},{1,2}},19,_T("MULU.W s[!Areg],Dr")}, /* ABCD.B */ {0xC100, 9,{15,15,15,13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0},0xF1C0,0,0,0,{{0,0},{1,4},{0,0},{1,4},{1,0}},19,_T("ABCD.B d[Dreg],Dr")}, /* ABCD.B */ {0xC100, 9,{15,15,15,13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0},0xF1C0,0,0,0,{{0,0},{1,4},{0,0},{1,4},{1,0}},19,_T("ABCD.B d[Areg-Apdi],Arp")}, /* AND.z */ {0xC100,11,{15,15,15,17,17,13,13,13,14,14,14, 0, 0, 0, 0, 0},0xF100,0,0,0,{{1,1},{1,0},{1,0},{1,2},{1,2}},19,_T("AND.z Dr,d[!Areg,Dreg]")}, /* EXG.L */ {0xC140, 9,{15,15,15,13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0},0xF1C0,0,0,0,{{1,1},{1,1},{1,1},{1,1},{1,1}},51,_T("EXG.L Dr,d[Dreg]")}, /* EXG.L */ {0xC140, 9,{15,15,15,13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0},0xF1C0,0,0,0,{{1,1},{1,1},{1,1},{1,1},{1,1}},51,_T("EXG.L Ar,d[Areg]")}, /* EXG.L */ {0xC180, 9,{15,15,15,13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0},0xF1C0,0,0,0,{{1,1},{1,1},{1,1},{1,1},{1,1}},51,_T("EXG.L Dr,d[Areg]")}, /* MULS.W */ {0xC1C0, 9,{15,15,15,11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0},0xF1C0,0,0,0,{{1,1},{1,0},{1,0},{1,2},{1,2}},19,_T("MULS.W s[!Areg],Dr")}, /* ADD.z */ {0xD000,11,{15,15,15,17,17,11,11,11,12,12,12, 0, 0, 0, 0, 0},0xF100,0,0,0,{{1,0},{1,0},{1,0},{1,0},{1,0}},19,_T("ADD.z s,Dr")}, /* ADDA.W */ {0xD0C0, 9,{15,15,15,11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0},0xF1C0,0,0,0,{{1,1},{1,1},{1,1},{1,1},{1,1}},19,_T("ADDA.W s,Ar")}, /* ADDX.z */ {0xD100,11,{15,15,15,17,17,13,13,13,14,14,14, 0, 0, 0, 0, 0},0xF100,0,0,0,{{0,0},{1,0},{0,0},{1,0},{1,0}},19,_T("ADDX.z d[Dreg],Dr")}, /* ADDX.z */ {0xD100,11,{15,15,15,17,17,13,13,13,14,14,14, 0, 0, 0, 0, 0},0xF100,0,0,0,{{0,0},{1,0},{0,0},{1,0},{1,0}},19,_T("ADDX.z d[Areg-Apdi],Arp")}, /* ADD.z */ {0xD100,11,{15,15,15,17,17,13,13,13,14,14,14, 0, 0, 0, 0, 0},0xF100,0,0,0,{{1,0},{1,0},{1,0},{1,0},{1,0}},19,_T("ADD.z Dr,d[!Areg,Dreg]")}, /* ADDA.L */ {0xD1C0, 9,{15,15,15,11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0},0xF1C0,0,0,0,{{1,1},{1,1},{1,1},{1,1},{1,1}},19,_T("ADDA.L s,Ar")}, /* ASf.z */ {0xE000, 9,{ 7, 7, 7, 4,17,17,16,16,16, 0, 0, 0, 0, 0, 0, 0},0xF038,0,0,0,{{1,0},{1,0},{1,0},{1,0},{1,0}},19,_T("ASf.z #j,DR")}, /* LSf.z */ {0xE008, 9,{ 7, 7, 7, 4,17,17,16,16,16, 0, 0, 0, 0, 0, 0, 0},0xF038,0,0,0,{{1,0},{1,0},{1,0},{1,2},{1,0}},19,_T("LSf.z #j,DR")}, /* ROXf.z */ {0xE010, 9,{ 7, 7, 7, 4,17,17,16,16,16, 0, 0, 0, 0, 0, 0, 0},0xF038,0,0,0,{{0,0},{1,0},{1,0},{1,2},{1,0}},19,_T("ROXf.z #j,DR")}, /* ROf.z */ {0xE018, 9,{ 7, 7, 7, 4,17,17,16,16,16, 0, 0, 0, 0, 0, 0, 0},0xF038,0,0,0,{{1,1},{1,0},{1,0},{1,2},{1,0}},19,_T("ROf.z #j,DR")}, /* ASf.z */ {0xE020, 9,{15,15,15, 4,17,17,16,16,16, 0, 0, 0, 0, 0, 0, 0},0xF038,0,0,0,{{0,0},{1,0},{1,0},{1,0},{1,0}},19,_T("ASf.z Dr,DR")}, /* LSf.z */ {0xE028, 9,{15,15,15, 4,17,17,16,16,16, 0, 0, 0, 0, 0, 0, 0},0xF038,0,0,0,{{0,0},{1,0},{1,0},{1,2},{1,0}},19,_T("LSf.z Dr,DR")}, /* ROXf.z */ {0xE030, 9,{15,15,15, 4,17,17,16,16,16, 0, 0, 0, 0, 0, 0, 0},0xF038,0,0,0,{{0,0},{1,0},{1,0},{1,2},{1,0}},19,_T("ROXf.z Dr,DR")}, /* ROf.z */ {0xE038, 9,{15,15,15, 4,17,17,16,16,16, 0, 0, 0, 0, 0, 0, 0},0xF038,0,0,0,{{1,1},{1,0},{1,0},{1,2},{1,0}},19,_T("ROf.z Dr,DR")}, /* ASfW.W */ {0xE0C0, 7,{ 4,13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFEC0,0,0,0,{{1,0},{1,0},{1,0},{1,0},{1,0}},19,_T("ASfW.W d[!Dreg,Areg]")}, /* LSfW.W */ {0xE2C0, 7,{ 4,13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFEC0,0,0,0,{{1,0},{1,0},{1,0},{1,2},{1,0}},19,_T("LSfW.W d[!Dreg,Areg]")}, /* ROXfW.W */ {0xE4C0, 7,{ 4,13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFEC0,0,0,0,{{0,0},{1,0},{1,0},{1,2},{1,0}},19,_T("ROXfW.W d[!Dreg,Areg]")}, /* ROfW.W */ {0xE6C0, 7,{ 4,13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFEC0,0,0,0,{{1,1},{1,0},{1,0},{1,2},{1,0}},19,_T("ROfW.W d[!Dreg,Areg]")}, /* BFTST */ {0xE8C0, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,2,0,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},17,_T("BFTST #1,s[!Areg,Apdi,Aipi,Immd]")}, /* BFEXTU */ {0xE9C0, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,2,0,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},17,_T("BFEXTU #1,s[!Areg,Apdi,Aipi,Immd]")}, /* BFCHG */ {0xEAC0, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,2,0,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},19,_T("BFCHG #1,s[!Areg,Apdi,Aipi,Immd,PC8r,PC16]")}, /* BFEXTS */ {0xEBC0, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,2,0,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},17,_T("BFEXTS #1,s[!Areg,Apdi,Aipi,Immd]")}, /* BFCLR */ {0xECC0, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,2,0,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},19,_T("BFCLR #1,s[!Areg,Apdi,Aipi,Immd,PC8r,PC16]")}, /* BFFFO */ {0xEDC0, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,2,0,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},17,_T("BFFFO #1,s[!Areg,Apdi,Aipi,Immd]")}, /* BFSET */ {0xEEC0, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,2,0,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},19,_T("BFSET #1,s[!Areg,Apdi,Aipi,Immd,PC8r,PC16]")}, /* BFINS */ {0xEFC0, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,2,0,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},19,_T("BFINS #1,s[!Areg,Apdi,Aipi,Immd,PC8r,PC16]")}, /* FPP */ {0xF200, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,2,0,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},17,_T("FPP #1,s")}, /* FDBcc */ {0xF240, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,2,0,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},17,_T("FDBcc #1,s[Areg-Dreg]")}, /* FScc */ {0xF240, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,2,0,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},17,_T("FScc #1,s[!Areg,Immd,PC8r,PC16]")}, /* FTRAPcc */ {0xF27A, 0,{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFFF,2,0,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},16,_T("FTRAPcc #1")}, /* FTRAPcc */ {0xF27B, 0,{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFFF,2,0,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},16,_T("FTRAPcc #2")}, /* FTRAPcc */ {0xF27C, 0,{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFFF,2,0,0,{{3,5},{3,5},{3,5},{3,5},{3,5}}, 0,_T("FTRAPcc")}, /* FBcc */ {0xF280, 6,{10,10,10,10,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,2,0,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},17,_T("FBcc #K,#1")}, /* FBcc */ {0xF2C0, 6,{10,10,10,10,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,2,0,0,{{3,5},{3,5},{3,5},{3,5},{3,5}},17,_T("FBcc #K,#2")}, /* FSAVE */ {0xF300, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,2,0,2,{{3,5},{3,5},{3,5},{3,5},{3,5}},32,_T("FSAVE s[!Dreg,Areg,Aipi,Immd,PC8r,PC16]")}, /* FRESTORE */ {0xF340, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,2,0,2,{{3,5},{3,5},{3,5},{3,5},{3,5}},16,_T("FRESTORE s[!Dreg,Areg,Apdi,Immd]")}, /* MMUOP030 */ {0xF000, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,3,4,2,{{3,5},{3,5},{3,5},{3,5},{3,5}},17,_T("MMUOP030 s[Dreg,Areg,Apdi,Aipi,Aind,Ad16,Ad8r,absl,absw],#1")}, /* CINVL */ {0xF408, 5,{18,18,15,15,15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFF38,4,0,2,{{1,1},{1,1},{1,1},{1,1},{1,1}}, 2,_T("CINVL #p,Ar")}, /* CINVP */ {0xF410, 5,{18,18,15,15,15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFF38,4,0,2,{{1,1},{1,1},{1,1},{1,1},{1,1}}, 2,_T("CINVP #p,Ar")}, /* CINVA */ {0xF418, 5,{18,18,15,15,15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFF38,4,0,2,{{1,1},{1,1},{1,1},{1,1},{1,1}}, 0,_T("CINVA #p")}, /* CPUSHL */ {0xF428, 5,{18,18,15,15,15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFF38,4,0,2,{{1,1},{1,1},{1,1},{1,1},{1,1}}, 2,_T("CPUSHL #p,Ar")}, /* CPUSHP */ {0xF430, 5,{18,18,15,15,15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFF38,4,0,2,{{1,1},{1,1},{1,1},{1,1},{1,1}}, 2,_T("CPUSHP #p,Ar")}, /* CPUSHA */ {0xF438, 5,{18,18,15,15,15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFF38,4,0,2,{{1,1},{1,1},{1,1},{1,1},{1,1}}, 0,_T("CPUSHA #p")}, /* PFLUSHN */ {0xF500, 3,{15,15,15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFF8,4,0,2,{{1,1},{1,1},{1,1},{1,1},{1,1}}, 0,_T("PFLUSHN Ara")}, /* PFLUSH */ {0xF508, 3,{15,15,15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFF8,4,0,2,{{1,1},{1,1},{1,1},{1,1},{1,1}}, 0,_T("PFLUSH Ara")}, /* PFLUSHAN */ {0xF510, 3,{15,15,15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFF8,4,0,2,{{1,1},{1,1},{1,1},{1,1},{1,1}}, 0,_T("PFLUSHAN Ara")}, /* PFLUSHA */ {0xF518, 3,{15,15,15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFF8,4,0,2,{{1,1},{1,1},{1,1},{1,1},{1,1}}, 0,_T("PFLUSHA Ara")}, /* PTESTR */ {0xF548, 3,{15,15,15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFF8,4,5,2,{{1,1},{1,1},{1,1},{1,1},{1,1}}, 0,_T("PTESTR Ara")}, /* PTESTW */ {0xF568, 3,{15,15,15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFF8,4,5,2,{{1,1},{1,1},{1,1},{1,1},{1,1}}, 0,_T("PTESTW Ara")}, /* MOVE16 */ {0xF620, 3,{15,15,15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFF8,4,0,0,{{1,1},{1,1},{1,1},{1,1},{1,1}},18,_T("MOVE16 ArP,AxP")}, /* MOVE16 */ {0xF600, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,4,0,0,{{1,1},{1,1},{1,1},{1,1},{1,1}},18,_T("MOVE16 s[Dreg-Aipi],L")}, /* MOVE16 */ {0xF600, 6,{13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,4,0,0,{{1,1},{1,1},{1,1},{1,1},{1,1}},18,_T("MOVE16 L,d[Areg-Aipi]")}, /* MOVE16 */ {0xF600, 6,{11,11,11,12,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,4,0,0,{{1,1},{1,1},{1,1},{1,1},{1,1}},18,_T("MOVE16 s[Aind],L")}, /* MOVE16 */ {0xF600, 6,{13,13,13,14,14,14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFC0,4,0,0,{{1,1},{1,1},{1,1},{1,1},{1,1}},18,_T("MOVE16 L,d[Aipi-Aind]")}, /* LPSTOP */ {0xF800, 0,{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFFF,5,0,2,{{3,5},{3,5},{3,5},{3,5},{3,5}},16,_T("LPSTOP #1")}, /* PLPAR */ {0xF588, 3,{15,15,15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFF8,5,0,2,{{1,1},{1,1},{1,1},{1,1},{1,1}}, 0,_T("PLPAR Ara")}, /* PLPAW */ {0xF5C8, 3,{15,15,15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},0xFFF8,5,0,2,{{1,1},{1,1},{1,1},{1,1},{1,1}}, 0,_T("PLPAW Ara")}}; int n_defs68k = 190; fs-uae-2.2.3+dfsg/gensrc/blitfunc.h0000644000175000017500000000315612162366654017321 0ustar glaubitzglaubitzextern blitter_func blitdofast_0; extern blitter_func blitdofast_desc_0; extern blitter_func blitdofast_a; extern blitter_func blitdofast_desc_a; extern blitter_func blitdofast_2a; extern blitter_func blitdofast_desc_2a; extern blitter_func blitdofast_30; extern blitter_func blitdofast_desc_30; extern blitter_func blitdofast_3a; extern blitter_func blitdofast_desc_3a; extern blitter_func blitdofast_3c; extern blitter_func blitdofast_desc_3c; extern blitter_func blitdofast_4a; extern blitter_func blitdofast_desc_4a; extern blitter_func blitdofast_6a; extern blitter_func blitdofast_desc_6a; extern blitter_func blitdofast_8a; extern blitter_func blitdofast_desc_8a; extern blitter_func blitdofast_8c; extern blitter_func blitdofast_desc_8c; extern blitter_func blitdofast_9a; extern blitter_func blitdofast_desc_9a; extern blitter_func blitdofast_a8; extern blitter_func blitdofast_desc_a8; extern blitter_func blitdofast_aa; extern blitter_func blitdofast_desc_aa; extern blitter_func blitdofast_b1; extern blitter_func blitdofast_desc_b1; extern blitter_func blitdofast_ca; extern blitter_func blitdofast_desc_ca; extern blitter_func blitdofast_cc; extern blitter_func blitdofast_desc_cc; extern blitter_func blitdofast_d8; extern blitter_func blitdofast_desc_d8; extern blitter_func blitdofast_e2; extern blitter_func blitdofast_desc_e2; extern blitter_func blitdofast_ea; extern blitter_func blitdofast_desc_ea; extern blitter_func blitdofast_f0; extern blitter_func blitdofast_desc_f0; extern blitter_func blitdofast_fa; extern blitter_func blitdofast_desc_fa; extern blitter_func blitdofast_fc; extern blitter_func blitdofast_desc_fc; fs-uae-2.2.3+dfsg/gensrc/cpuemu_20.cpp0000644000175000017500000341420112162366654017645 0ustar glaubitzglaubitz#include "sysconfig.h" #include "sysdeps.h" #include "options.h" #include "uae/memory.h" #include "custom.h" #include "events.h" #include "newcpu.h" #include "cpu_prefetch.h" #include "cputbl.h" #include "cpummu.h" #define CPUFUNC(x) x##_ff #define SET_CFLG_ALWAYS(x) SET_CFLG(x) #define SET_NFLG_ALWAYS(x) SET_NFLG(x) #ifdef NOFLAGS #include "noflags.h" #endif #if !defined(PART_1) && !defined(PART_2) && !defined(PART_3) && !defined(PART_4) && !defined(PART_5) && !defined(PART_6) && !defined(PART_7) && !defined(PART_8) #define PART_1 1 #define PART_2 1 #define PART_3 1 #define PART_4 1 #define PART_5 1 #define PART_6 1 #define PART_7 1 #define PART_8 1 #endif #ifdef PART_1 /* OR.B #.B,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0000_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = x_get_ibyte (2); { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* OR.B #.B,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0010_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = x_get_ibyte (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} m68k_incpc (4); return 20 * CYCLE_UNIT / 2; } /* OR.B #.B,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0018_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = x_get_ibyte (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} m68k_incpc (4); return 20 * CYCLE_UNIT / 2; } /* OR.B #.B,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0020_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = x_get_ibyte (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} m68k_incpc (4); return 22 * CYCLE_UNIT / 2; } /* OR.B #.B,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0028_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = x_get_ibyte (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} m68k_incpc (6); return 24 * CYCLE_UNIT / 2; } /* OR.B #.B,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0030_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = x_get_ibyte (2); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); { uae_s8 dst = x_get_byte (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}}}return 24 * CYCLE_UNIT / 2; } /* OR.B #.B,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_0038_20)(uae_u32 opcode) { {{ uae_s8 src = x_get_ibyte (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} m68k_incpc (6); return 24 * CYCLE_UNIT / 2; } /* OR.B #.B,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_0039_20)(uae_u32 opcode) { {{ uae_s8 src = x_get_ibyte (2); { uaecptr dsta = get_long_020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} m68k_incpc (8); return 28 * CYCLE_UNIT / 2; } /* ORSR.B #.W */ uae_u32 REGPARAM2 CPUFUNC(op_003c_20)(uae_u32 opcode) { { MakeSR (); { uae_s16 src = get_word_020_prefetch (2); src &= 0xFF; regs.sr |= src; MakeFromSR (); }} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* OR.W #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0040_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* OR.W #.W,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0050_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* OR.W #.W,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0058_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) += 2; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* OR.W #.W,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0060_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) = dsta; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* OR.W #.W,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0068_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_s16 dst = x_get_word (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* OR.W #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0070_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); { uae_s16 dst = x_get_word (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}}}return 20 * CYCLE_UNIT / 2; } /* OR.W #.W,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_0078_20)(uae_u32 opcode) { {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_s16 dst = x_get_word (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* OR.W #.W,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_0079_20)(uae_u32 opcode) { {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = get_long_020_prefetch (4); { uae_s16 dst = x_get_word (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} m68k_incpc (8); return 24 * CYCLE_UNIT / 2; } /* ORSR.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_007c_20)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel5310; } { MakeSR (); { uae_s16 src = get_word_020_prefetch (2); regs.sr |= src; MakeFromSR (); }}} m68k_incpc (4); endlabel5310: ; return 8 * CYCLE_UNIT / 2; } /* OR.L #.L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0080_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_020_prefetch (2); { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } /* OR.L #.L,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0090_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} m68k_incpc (6); return 28 * CYCLE_UNIT / 2; } /* OR.L #.L,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0098_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) += 4; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} m68k_incpc (6); return 28 * CYCLE_UNIT / 2; } /* OR.L #.L,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_00a0_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) = dsta; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} m68k_incpc (6); return 30 * CYCLE_UNIT / 2; } /* OR.L #.L,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_00a8_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (6); { uae_s32 dst = x_get_long (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} m68k_incpc (8); return 32 * CYCLE_UNIT / 2; } /* OR.L #.L,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_00b0_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_020_prefetch (2); { uaecptr dsta; m68k_incpc (6); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); { uae_s32 dst = x_get_long (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}}}return 32 * CYCLE_UNIT / 2; } /* OR.L #.L,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_00b8_20)(uae_u32 opcode) { {{ uae_s32 src = get_long_020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (6); { uae_s32 dst = x_get_long (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} m68k_incpc (8); return 32 * CYCLE_UNIT / 2; } /* OR.L #.L,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_00b9_20)(uae_u32 opcode) { {{ uae_s32 src = get_long_020_prefetch (2); { uaecptr dsta = get_long_020_prefetch (6); { uae_s32 dst = x_get_long (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} m68k_incpc (10); return 36 * CYCLE_UNIT / 2; } /* CHK2.B #.W,(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_00d0_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = (uae_s32)(uae_s8)x_get_byte (dsta); upper = (uae_s32)(uae_s8)x_get_byte (dsta + 1); if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s8)reg; SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel5319; } } }}} m68k_incpc (4); endlabel5319: ; return 8 * CYCLE_UNIT / 2; } #endif /* CHK2.B #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_00e8_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (4); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = (uae_s32)(uae_s8)x_get_byte (dsta); upper = (uae_s32)(uae_s8)x_get_byte (dsta + 1); if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s8)reg; SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel5320; } } }}} m68k_incpc (6); endlabel5320: ; return 12 * CYCLE_UNIT / 2; } #endif /* CHK2.B #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_00f0_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = (uae_s32)(uae_s8)x_get_byte (dsta); upper = (uae_s32)(uae_s8)x_get_byte (dsta + 1); if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s8)reg; SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel5321; } } }}}}endlabel5321: ; return 12 * CYCLE_UNIT / 2; } #endif /* CHK2.B #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_00f8_20)(uae_u32 opcode) { {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (4); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = (uae_s32)(uae_s8)x_get_byte (dsta); upper = (uae_s32)(uae_s8)x_get_byte (dsta + 1); if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s8)reg; SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel5322; } } }}} m68k_incpc (6); endlabel5322: ; return 12 * CYCLE_UNIT / 2; } #endif /* CHK2.B #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_00f9_20)(uae_u32 opcode) { {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta = get_long_020_prefetch (4); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = (uae_s32)(uae_s8)x_get_byte (dsta); upper = (uae_s32)(uae_s8)x_get_byte (dsta + 1); if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s8)reg; SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel5323; } } }}} m68k_incpc (8); endlabel5323: ; return 16 * CYCLE_UNIT / 2; } #endif /* CHK2.B #.W,(d16,PC) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_00fa_20)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_word_020_prefetch (4); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = (uae_s32)(uae_s8)x_get_byte (dsta); upper = (uae_s32)(uae_s8)x_get_byte (dsta + 1); if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s8)reg; SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel5324; } } }}} m68k_incpc (6); endlabel5324: ; return 12 * CYCLE_UNIT / 2; } #endif /* CHK2.B #.W,(d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_00fb_20)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr tmppc; uaecptr dsta; m68k_incpc (4); { tmppc = m68k_getpc (); dsta = get_disp_ea_020 (tmppc, next_iword_020 ()); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = (uae_s32)(uae_s8)x_get_byte (dsta); upper = (uae_s32)(uae_s8)x_get_byte (dsta + 1); if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s8)reg; SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel5325; } } }}}}endlabel5325: ; return 12 * CYCLE_UNIT / 2; } #endif /* BTST.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0100_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= 31; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* MVPMR.W (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0108_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; { uaecptr memp = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_u16 val = (x_get_byte (memp) << 8) + x_get_byte (memp + 2); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* BTST.B Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0110_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* BTST.B Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0118_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* BTST.B Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0120_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* BTST.B Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0128_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* BTST.B Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0130_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}}}return 12 * CYCLE_UNIT / 2; } /* BTST.B Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_0138_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* BTST.B Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_0139_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* BTST.B Dn,(d16,PC) */ uae_u32 REGPARAM2 CPUFUNC(op_013a_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = 2; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_getpc () + 2; dsta += (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* BTST.B Dn,(d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_013b_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = 3; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr tmppc; uaecptr dsta; m68k_incpc (2); { tmppc = m68k_getpc (); dsta = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}}}return 12 * CYCLE_UNIT / 2; } /* BTST.B Dn,#.B */ uae_u32 REGPARAM2 CPUFUNC(op_013c_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = x_get_ibyte (2); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* BCHG.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0140_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= 31; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); m68k_dreg (regs, dstreg) = (dst); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* MVPMR.L (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0148_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; { uaecptr memp = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_u32 val = (x_get_byte (memp) << 24) + (x_get_byte (memp + 2) << 16) + (x_get_byte (memp + 4) << 8) + x_get_byte (memp + 6); m68k_dreg (regs, dstreg) = (val); }} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* BCHG.B Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0150_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); x_put_byte (dsta, dst); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* BCHG.B Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0158_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); x_put_byte (dsta, dst); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* BCHG.B Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0160_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); x_put_byte (dsta, dst); }}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* BCHG.B Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0168_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); x_put_byte (dsta, dst); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* BCHG.B Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0170_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); { uae_s8 dst = x_get_byte (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); x_put_byte (dsta, dst); }}}}}return 16 * CYCLE_UNIT / 2; } /* BCHG.B Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_0178_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); x_put_byte (dsta, dst); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* BCHG.B Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_0179_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); x_put_byte (dsta, dst); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* BCHG.B Dn,(d16,PC) */ uae_u32 REGPARAM2 CPUFUNC(op_017a_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = 2; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_getpc () + 2; dsta += (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); x_put_byte (dsta, dst); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* BCHG.B Dn,(d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_017b_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = 3; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr tmppc; uaecptr dsta; m68k_incpc (2); { tmppc = m68k_getpc (); dsta = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_s8 dst = x_get_byte (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); x_put_byte (dsta, dst); }}}}}return 16 * CYCLE_UNIT / 2; } /* BCLR.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0180_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= 31; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); m68k_dreg (regs, dstreg) = (dst); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* MVPRM.W Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0188_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); uaecptr memp = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); x_put_byte (memp, src >> 8); x_put_byte (memp + 2, src); }} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* BCLR.B Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0190_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); x_put_byte (dsta, dst); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* BCLR.B Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0198_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); x_put_byte (dsta, dst); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* BCLR.B Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_01a0_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); x_put_byte (dsta, dst); }}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* BCLR.B Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_01a8_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); x_put_byte (dsta, dst); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* BCLR.B Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_01b0_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); x_put_byte (dsta, dst); }}}}}return 16 * CYCLE_UNIT / 2; } /* BCLR.B Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_01b8_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); x_put_byte (dsta, dst); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* BCLR.B Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_01b9_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); x_put_byte (dsta, dst); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* BCLR.B Dn,(d16,PC) */ uae_u32 REGPARAM2 CPUFUNC(op_01ba_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = 2; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_getpc () + 2; dsta += (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); x_put_byte (dsta, dst); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* BCLR.B Dn,(d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_01bb_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = 3; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr tmppc; uaecptr dsta; m68k_incpc (2); { tmppc = m68k_getpc (); dsta = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); x_put_byte (dsta, dst); }}}}}return 16 * CYCLE_UNIT / 2; } /* BSET.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_01c0_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= 31; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); m68k_dreg (regs, dstreg) = (dst); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* MVPRM.L Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_01c8_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); uaecptr memp = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); x_put_byte (memp, src >> 24); x_put_byte (memp + 2, src >> 16); x_put_byte (memp + 4, src >> 8); x_put_byte (memp + 6, src); }} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* BSET.B Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_01d0_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); x_put_byte (dsta, dst); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* BSET.B Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_01d8_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); x_put_byte (dsta, dst); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* BSET.B Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_01e0_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); x_put_byte (dsta, dst); }}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* BSET.B Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_01e8_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); x_put_byte (dsta, dst); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* BSET.B Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_01f0_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); x_put_byte (dsta, dst); }}}}}return 16 * CYCLE_UNIT / 2; } /* BSET.B Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_01f8_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); x_put_byte (dsta, dst); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* BSET.B Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_01f9_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); x_put_byte (dsta, dst); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* BSET.B Dn,(d16,PC) */ uae_u32 REGPARAM2 CPUFUNC(op_01fa_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = 2; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_getpc () + 2; dsta += (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); x_put_byte (dsta, dst); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* BSET.B Dn,(d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_01fb_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = 3; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr tmppc; uaecptr dsta; m68k_incpc (2); { tmppc = m68k_getpc (); dsta = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); x_put_byte (dsta, dst); }}}}}return 16 * CYCLE_UNIT / 2; } /* AND.B #.B,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0200_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = x_get_ibyte (2); { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* AND.B #.B,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0210_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = x_get_ibyte (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} m68k_incpc (4); return 20 * CYCLE_UNIT / 2; } /* AND.B #.B,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0218_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = x_get_ibyte (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} m68k_incpc (4); return 20 * CYCLE_UNIT / 2; } /* AND.B #.B,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0220_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = x_get_ibyte (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} m68k_incpc (4); return 22 * CYCLE_UNIT / 2; } /* AND.B #.B,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0228_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = x_get_ibyte (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} m68k_incpc (6); return 24 * CYCLE_UNIT / 2; } /* AND.B #.B,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0230_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = x_get_ibyte (2); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); { uae_s8 dst = x_get_byte (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}}}return 24 * CYCLE_UNIT / 2; } /* AND.B #.B,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_0238_20)(uae_u32 opcode) { {{ uae_s8 src = x_get_ibyte (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} m68k_incpc (6); return 24 * CYCLE_UNIT / 2; } /* AND.B #.B,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_0239_20)(uae_u32 opcode) { {{ uae_s8 src = x_get_ibyte (2); { uaecptr dsta = get_long_020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} m68k_incpc (8); return 28 * CYCLE_UNIT / 2; } /* ANDSR.B #.W */ uae_u32 REGPARAM2 CPUFUNC(op_023c_20)(uae_u32 opcode) { { MakeSR (); { uae_s16 src = get_word_020_prefetch (2); src |= 0xFF00; regs.sr &= src; MakeFromSR (); }} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* AND.W #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0240_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* AND.W #.W,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0250_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* AND.W #.W,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0258_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) += 2; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* AND.W #.W,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0260_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) = dsta; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* AND.W #.W,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0268_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_s16 dst = x_get_word (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* AND.W #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0270_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); { uae_s16 dst = x_get_word (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}}}return 20 * CYCLE_UNIT / 2; } /* AND.W #.W,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_0278_20)(uae_u32 opcode) { {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_s16 dst = x_get_word (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* AND.W #.W,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_0279_20)(uae_u32 opcode) { {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = get_long_020_prefetch (4); { uae_s16 dst = x_get_word (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} m68k_incpc (8); return 24 * CYCLE_UNIT / 2; } /* ANDSR.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_027c_20)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel5388; } { MakeSR (); { uae_s16 src = get_word_020_prefetch (2); regs.sr &= src; MakeFromSR (); }}} m68k_incpc (4); endlabel5388: ; return 8 * CYCLE_UNIT / 2; } /* AND.L #.L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0280_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_020_prefetch (2); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } /* AND.L #.L,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0290_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} m68k_incpc (6); return 28 * CYCLE_UNIT / 2; } /* AND.L #.L,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0298_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) += 4; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} m68k_incpc (6); return 28 * CYCLE_UNIT / 2; } /* AND.L #.L,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_02a0_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) = dsta; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} m68k_incpc (6); return 30 * CYCLE_UNIT / 2; } /* AND.L #.L,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_02a8_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (6); { uae_s32 dst = x_get_long (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} m68k_incpc (8); return 32 * CYCLE_UNIT / 2; } /* AND.L #.L,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_02b0_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_020_prefetch (2); { uaecptr dsta; m68k_incpc (6); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); { uae_s32 dst = x_get_long (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}}}return 32 * CYCLE_UNIT / 2; } /* AND.L #.L,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_02b8_20)(uae_u32 opcode) { {{ uae_s32 src = get_long_020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (6); { uae_s32 dst = x_get_long (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} m68k_incpc (8); return 32 * CYCLE_UNIT / 2; } /* AND.L #.L,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_02b9_20)(uae_u32 opcode) { {{ uae_s32 src = get_long_020_prefetch (2); { uaecptr dsta = get_long_020_prefetch (6); { uae_s32 dst = x_get_long (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} m68k_incpc (10); return 36 * CYCLE_UNIT / 2; } /* CHK2.W #.W,(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_02d0_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = (uae_s32)(uae_s16)x_get_word (dsta); upper = (uae_s32)(uae_s16)x_get_word (dsta + 2); if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s16)reg; SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel5397; } } }}} m68k_incpc (4); endlabel5397: ; return 8 * CYCLE_UNIT / 2; } #endif /* CHK2.W #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_02e8_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (4); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = (uae_s32)(uae_s16)x_get_word (dsta); upper = (uae_s32)(uae_s16)x_get_word (dsta + 2); if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s16)reg; SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel5398; } } }}} m68k_incpc (6); endlabel5398: ; return 12 * CYCLE_UNIT / 2; } #endif /* CHK2.W #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_02f0_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = (uae_s32)(uae_s16)x_get_word (dsta); upper = (uae_s32)(uae_s16)x_get_word (dsta + 2); if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s16)reg; SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel5399; } } }}}}endlabel5399: ; return 12 * CYCLE_UNIT / 2; } #endif /* CHK2.W #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_02f8_20)(uae_u32 opcode) { {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (4); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = (uae_s32)(uae_s16)x_get_word (dsta); upper = (uae_s32)(uae_s16)x_get_word (dsta + 2); if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s16)reg; SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel5400; } } }}} m68k_incpc (6); endlabel5400: ; return 12 * CYCLE_UNIT / 2; } #endif /* CHK2.W #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_02f9_20)(uae_u32 opcode) { {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta = get_long_020_prefetch (4); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = (uae_s32)(uae_s16)x_get_word (dsta); upper = (uae_s32)(uae_s16)x_get_word (dsta + 2); if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s16)reg; SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel5401; } } }}} m68k_incpc (8); endlabel5401: ; return 16 * CYCLE_UNIT / 2; } #endif /* CHK2.W #.W,(d16,PC) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_02fa_20)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_word_020_prefetch (4); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = (uae_s32)(uae_s16)x_get_word (dsta); upper = (uae_s32)(uae_s16)x_get_word (dsta + 2); if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s16)reg; SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel5402; } } }}} m68k_incpc (6); endlabel5402: ; return 12 * CYCLE_UNIT / 2; } #endif /* CHK2.W #.W,(d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_02fb_20)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr tmppc; uaecptr dsta; m68k_incpc (4); { tmppc = m68k_getpc (); dsta = get_disp_ea_020 (tmppc, next_iword_020 ()); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = (uae_s32)(uae_s16)x_get_word (dsta); upper = (uae_s32)(uae_s16)x_get_word (dsta + 2); if ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s16)reg; SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel5403; } } }}}}endlabel5403: ; return 12 * CYCLE_UNIT / 2; } #endif /* SUB.B #.B,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0400_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = x_get_ibyte (2); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* SUB.B #.B,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0410_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = x_get_ibyte (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (4); return 20 * CYCLE_UNIT / 2; } /* SUB.B #.B,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0418_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = x_get_ibyte (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (4); return 20 * CYCLE_UNIT / 2; } /* SUB.B #.B,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0420_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = x_get_ibyte (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (4); return 22 * CYCLE_UNIT / 2; } /* SUB.B #.B,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0428_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = x_get_ibyte (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (6); return 24 * CYCLE_UNIT / 2; } /* SUB.B #.B,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0430_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = x_get_ibyte (2); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}}}return 24 * CYCLE_UNIT / 2; } /* SUB.B #.B,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_0438_20)(uae_u32 opcode) { {{ uae_s8 src = x_get_ibyte (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (6); return 24 * CYCLE_UNIT / 2; } /* SUB.B #.B,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_0439_20)(uae_u32 opcode) { {{ uae_s8 src = x_get_ibyte (2); { uaecptr dsta = get_long_020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (8); return 28 * CYCLE_UNIT / 2; } /* SUB.W #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0440_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* SUB.W #.W,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0450_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* SUB.W #.W,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0458_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) += 2; {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* SUB.W #.W,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0460_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* SUB.W #.W,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0468_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* SUB.W #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0470_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}}}return 20 * CYCLE_UNIT / 2; } /* SUB.W #.W,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_0478_20)(uae_u32 opcode) { {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* SUB.W #.W,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_0479_20)(uae_u32 opcode) { {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = get_long_020_prefetch (4); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} m68k_incpc (8); return 24 * CYCLE_UNIT / 2; } /* SUB.L #.L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0480_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_020_prefetch (2); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } /* SUB.L #.L,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0490_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} m68k_incpc (6); return 28 * CYCLE_UNIT / 2; } /* SUB.L #.L,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0498_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) += 4; {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} m68k_incpc (6); return 28 * CYCLE_UNIT / 2; } /* SUB.L #.L,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_04a0_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} m68k_incpc (6); return 30 * CYCLE_UNIT / 2; } /* SUB.L #.L,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_04a8_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (6); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} m68k_incpc (8); return 32 * CYCLE_UNIT / 2; } /* SUB.L #.L,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_04b0_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_020_prefetch (2); { uaecptr dsta; m68k_incpc (6); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}}}return 32 * CYCLE_UNIT / 2; } /* SUB.L #.L,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_04b8_20)(uae_u32 opcode) { {{ uae_s32 src = get_long_020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (6); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} m68k_incpc (8); return 32 * CYCLE_UNIT / 2; } /* SUB.L #.L,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_04b9_20)(uae_u32 opcode) { {{ uae_s32 src = get_long_020_prefetch (2); { uaecptr dsta = get_long_020_prefetch (6); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} m68k_incpc (10); return 36 * CYCLE_UNIT / 2; } /* CHK2.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_04d0_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = x_get_long (dsta); upper = x_get_long (dsta + 4); SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel5428; } } }}} m68k_incpc (4); endlabel5428: ; return 8 * CYCLE_UNIT / 2; } #endif /* CHK2.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_04e8_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (4); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = x_get_long (dsta); upper = x_get_long (dsta + 4); SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel5429; } } }}} m68k_incpc (6); endlabel5429: ; return 12 * CYCLE_UNIT / 2; } #endif /* CHK2.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_04f0_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = x_get_long (dsta); upper = x_get_long (dsta + 4); SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel5430; } } }}}}endlabel5430: ; return 12 * CYCLE_UNIT / 2; } #endif /* CHK2.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_04f8_20)(uae_u32 opcode) { {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (4); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = x_get_long (dsta); upper = x_get_long (dsta + 4); SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel5431; } } }}} m68k_incpc (6); endlabel5431: ; return 12 * CYCLE_UNIT / 2; } #endif /* CHK2.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_04f9_20)(uae_u32 opcode) { {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta = get_long_020_prefetch (4); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = x_get_long (dsta); upper = x_get_long (dsta + 4); SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel5432; } } }}} m68k_incpc (8); endlabel5432: ; return 16 * CYCLE_UNIT / 2; } #endif /* CHK2.L #.W,(d16,PC) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_04fa_20)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_word_020_prefetch (4); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = x_get_long (dsta); upper = x_get_long (dsta + 4); SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel5433; } } }}} m68k_incpc (6); endlabel5433: ; return 12 * CYCLE_UNIT / 2; } #endif /* CHK2.L #.W,(d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_04fb_20)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr tmppc; uaecptr dsta; m68k_incpc (4); { tmppc = m68k_getpc (); dsta = get_disp_ea_020 (tmppc, next_iword_020 ()); {uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15]; lower = x_get_long (dsta); upper = x_get_long (dsta + 4); SET_ZFLG (upper == reg || lower == reg); SET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower); if ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto endlabel5434; } } }}}}endlabel5434: ; return 12 * CYCLE_UNIT / 2; } #endif /* ADD.B #.B,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0600_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = x_get_ibyte (2); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* ADD.B #.B,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0610_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = x_get_ibyte (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (4); return 20 * CYCLE_UNIT / 2; } /* ADD.B #.B,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0618_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = x_get_ibyte (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (4); return 20 * CYCLE_UNIT / 2; } /* ADD.B #.B,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0620_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = x_get_ibyte (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (4); return 22 * CYCLE_UNIT / 2; } /* ADD.B #.B,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0628_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = x_get_ibyte (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (6); return 24 * CYCLE_UNIT / 2; } /* ADD.B #.B,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0630_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = x_get_ibyte (2); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}}}return 24 * CYCLE_UNIT / 2; } /* ADD.B #.B,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_0638_20)(uae_u32 opcode) { {{ uae_s8 src = x_get_ibyte (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (6); return 24 * CYCLE_UNIT / 2; } /* ADD.B #.B,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_0639_20)(uae_u32 opcode) { {{ uae_s8 src = x_get_ibyte (2); { uaecptr dsta = get_long_020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (8); return 28 * CYCLE_UNIT / 2; } /* ADD.W #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0640_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* ADD.W #.W,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0650_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* ADD.W #.W,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0658_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) += 2; {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* ADD.W #.W,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0660_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* ADD.W #.W,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0668_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* ADD.W #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0670_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}}}return 20 * CYCLE_UNIT / 2; } /* ADD.W #.W,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_0678_20)(uae_u32 opcode) { {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* ADD.W #.W,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_0679_20)(uae_u32 opcode) { {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = get_long_020_prefetch (4); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} m68k_incpc (8); return 24 * CYCLE_UNIT / 2; } /* ADD.L #.L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0680_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_020_prefetch (2); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } /* ADD.L #.L,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0690_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} m68k_incpc (6); return 28 * CYCLE_UNIT / 2; } /* ADD.L #.L,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0698_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) += 4; {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} m68k_incpc (6); return 28 * CYCLE_UNIT / 2; } /* ADD.L #.L,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_06a0_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} m68k_incpc (6); return 30 * CYCLE_UNIT / 2; } /* ADD.L #.L,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_06a8_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (6); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} m68k_incpc (8); return 32 * CYCLE_UNIT / 2; } /* ADD.L #.L,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_06b0_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_020_prefetch (2); { uaecptr dsta; m68k_incpc (6); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}}}return 32 * CYCLE_UNIT / 2; } /* ADD.L #.L,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_06b8_20)(uae_u32 opcode) { {{ uae_s32 src = get_long_020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (6); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} m68k_incpc (8); return 32 * CYCLE_UNIT / 2; } /* ADD.L #.L,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_06b9_20)(uae_u32 opcode) { {{ uae_s32 src = get_long_020_prefetch (2); { uaecptr dsta = get_long_020_prefetch (6); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} m68k_incpc (10); return 36 * CYCLE_UNIT / 2; } /* RTM.L Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_06c0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); { m68k_incpc (2); op_illg (opcode); }return 4 * CYCLE_UNIT / 2; } #endif /* RTM.L An */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_06c8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); { m68k_incpc (2); op_illg (opcode); }return 4 * CYCLE_UNIT / 2; } #endif /* CALLM.L (An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_06d0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); { m68k_incpc (2); op_illg (opcode); }return 4 * CYCLE_UNIT / 2; } #endif /* CALLM.L (d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_06e8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); { m68k_incpc (2); op_illg (opcode); }return 4 * CYCLE_UNIT / 2; } #endif /* CALLM.L (d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_06f0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); { m68k_incpc (2); op_illg (opcode); }return 4 * CYCLE_UNIT / 2; } #endif /* CALLM.L (xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_06f8_20)(uae_u32 opcode) { { m68k_incpc (2); op_illg (opcode); }return 4 * CYCLE_UNIT / 2; } #endif /* CALLM.L (xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_06f9_20)(uae_u32 opcode) { { m68k_incpc (2); op_illg (opcode); }return 4 * CYCLE_UNIT / 2; } #endif /* CALLM.L (d16,PC) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_06fa_20)(uae_u32 opcode) { { m68k_incpc (2); op_illg (opcode); }return 4 * CYCLE_UNIT / 2; } #endif /* CALLM.L (d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_06fb_20)(uae_u32 opcode) { { m68k_incpc (2); op_illg (opcode); }return 4 * CYCLE_UNIT / 2; } #endif /* BTST.L #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0800_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= 31; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* BTST.B #.W,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0810_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* BTST.B #.W,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0818_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* BTST.B #.W,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0820_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpc (4); return 14 * CYCLE_UNIT / 2; } /* BTST.B #.W,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0828_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* BTST.B #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0830_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}}}return 16 * CYCLE_UNIT / 2; } /* BTST.B #.W,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_0838_20)(uae_u32 opcode) { {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* BTST.B #.W,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_0839_20)(uae_u32 opcode) { {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = get_long_020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpc (8); return 20 * CYCLE_UNIT / 2; } /* BTST.B #.W,(d16,PC) */ uae_u32 REGPARAM2 CPUFUNC(op_083a_20)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* BTST.B #.W,(d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_083b_20)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr tmppc; uaecptr dsta; m68k_incpc (4); { tmppc = m68k_getpc (); dsta = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}}}return 16 * CYCLE_UNIT / 2; } /* BTST.B #.W,#.B */ uae_u32 REGPARAM2 CPUFUNC(op_083c_20)(uae_u32 opcode) { {{ uae_s16 src = get_word_020_prefetch (2); { uae_s8 dst = x_get_ibyte (4); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* BCHG.L #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0840_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= 31; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); m68k_dreg (regs, dstreg) = (dst); }}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* BCHG.B #.W,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0850_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); x_put_byte (dsta, dst); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* BCHG.B #.W,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0858_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); x_put_byte (dsta, dst); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* BCHG.B #.W,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0860_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); x_put_byte (dsta, dst); }}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* BCHG.B #.W,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0868_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); x_put_byte (dsta, dst); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* BCHG.B #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0870_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); { uae_s8 dst = x_get_byte (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); x_put_byte (dsta, dst); }}}}}return 20 * CYCLE_UNIT / 2; } /* BCHG.B #.W,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_0878_20)(uae_u32 opcode) { {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); x_put_byte (dsta, dst); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* BCHG.B #.W,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_0879_20)(uae_u32 opcode) { {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = get_long_020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); x_put_byte (dsta, dst); }}}} m68k_incpc (8); return 24 * CYCLE_UNIT / 2; } /* BCHG.B #.W,(d16,PC) */ uae_u32 REGPARAM2 CPUFUNC(op_087a_20)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); x_put_byte (dsta, dst); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* BCHG.B #.W,(d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_087b_20)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr tmppc; uaecptr dsta; m68k_incpc (4); { tmppc = m68k_getpc (); dsta = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_s8 dst = x_get_byte (dsta); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); x_put_byte (dsta, dst); }}}}}return 20 * CYCLE_UNIT / 2; } /* BCLR.L #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0880_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= 31; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); m68k_dreg (regs, dstreg) = (dst); }}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* BCLR.B #.W,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0890_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); x_put_byte (dsta, dst); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* BCLR.B #.W,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0898_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); x_put_byte (dsta, dst); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* BCLR.B #.W,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_08a0_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); x_put_byte (dsta, dst); }}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* BCLR.B #.W,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_08a8_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); x_put_byte (dsta, dst); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* BCLR.B #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_08b0_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); x_put_byte (dsta, dst); }}}}}return 20 * CYCLE_UNIT / 2; } /* BCLR.B #.W,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_08b8_20)(uae_u32 opcode) { {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); x_put_byte (dsta, dst); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* BCLR.B #.W,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_08b9_20)(uae_u32 opcode) { {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = get_long_020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); x_put_byte (dsta, dst); }}}} m68k_incpc (8); return 24 * CYCLE_UNIT / 2; } /* BCLR.B #.W,(d16,PC) */ uae_u32 REGPARAM2 CPUFUNC(op_08ba_20)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); x_put_byte (dsta, dst); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* BCLR.B #.W,(d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_08bb_20)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr tmppc; uaecptr dsta; m68k_incpc (4); { tmppc = m68k_getpc (); dsta = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); x_put_byte (dsta, dst); }}}}}return 20 * CYCLE_UNIT / 2; } /* BSET.L #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_08c0_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= 31; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); m68k_dreg (regs, dstreg) = (dst); }}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* BSET.B #.W,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_08d0_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); x_put_byte (dsta, dst); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* BSET.B #.W,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_08d8_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); x_put_byte (dsta, dst); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* BSET.B #.W,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_08e0_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); x_put_byte (dsta, dst); }}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* BSET.B #.W,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_08e8_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); x_put_byte (dsta, dst); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* BSET.B #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_08f0_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); x_put_byte (dsta, dst); }}}}}return 20 * CYCLE_UNIT / 2; } /* BSET.B #.W,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_08f8_20)(uae_u32 opcode) { {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); x_put_byte (dsta, dst); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* BSET.B #.W,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_08f9_20)(uae_u32 opcode) { {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = get_long_020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); x_put_byte (dsta, dst); }}}} m68k_incpc (8); return 24 * CYCLE_UNIT / 2; } /* BSET.B #.W,(d16,PC) */ uae_u32 REGPARAM2 CPUFUNC(op_08fa_20)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); x_put_byte (dsta, dst); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* BSET.B #.W,(d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_08fb_20)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr tmppc; uaecptr dsta; m68k_incpc (4); { tmppc = m68k_getpc (); dsta = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_s8 dst = x_get_byte (dsta); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); x_put_byte (dsta, dst); }}}}}return 20 * CYCLE_UNIT / 2; } /* EOR.B #.B,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0a00_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = x_get_ibyte (2); { uae_s8 dst = m68k_dreg (regs, dstreg); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* EOR.B #.B,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0a10_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = x_get_ibyte (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} m68k_incpc (4); return 20 * CYCLE_UNIT / 2; } /* EOR.B #.B,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0a18_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = x_get_ibyte (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} m68k_incpc (4); return 20 * CYCLE_UNIT / 2; } /* EOR.B #.B,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0a20_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = x_get_ibyte (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} m68k_incpc (4); return 22 * CYCLE_UNIT / 2; } /* EOR.B #.B,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0a28_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = x_get_ibyte (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} m68k_incpc (6); return 24 * CYCLE_UNIT / 2; } /* EOR.B #.B,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0a30_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = x_get_ibyte (2); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); { uae_s8 dst = x_get_byte (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}}}return 24 * CYCLE_UNIT / 2; } /* EOR.B #.B,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_0a38_20)(uae_u32 opcode) { {{ uae_s8 src = x_get_ibyte (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} m68k_incpc (6); return 24 * CYCLE_UNIT / 2; } /* EOR.B #.B,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_0a39_20)(uae_u32 opcode) { {{ uae_s8 src = x_get_ibyte (2); { uaecptr dsta = get_long_020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} m68k_incpc (8); return 28 * CYCLE_UNIT / 2; } /* EORSR.B #.W */ uae_u32 REGPARAM2 CPUFUNC(op_0a3c_20)(uae_u32 opcode) { { MakeSR (); { uae_s16 src = get_word_020_prefetch (2); src &= 0xFF; regs.sr ^= src; MakeFromSR (); }} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* EOR.W #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0a40_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uae_s16 dst = m68k_dreg (regs, dstreg); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* EOR.W #.W,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0a50_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* EOR.W #.W,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0a58_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) += 2; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* EOR.W #.W,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0a60_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) = dsta; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* EOR.W #.W,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0a68_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_s16 dst = x_get_word (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* EOR.W #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0a70_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); { uae_s16 dst = x_get_word (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}}}return 20 * CYCLE_UNIT / 2; } /* EOR.W #.W,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_0a78_20)(uae_u32 opcode) { {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_s16 dst = x_get_word (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* EOR.W #.W,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_0a79_20)(uae_u32 opcode) { {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = get_long_020_prefetch (4); { uae_s16 dst = x_get_word (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} m68k_incpc (8); return 24 * CYCLE_UNIT / 2; } /* EORSR.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_0a7c_20)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel5526; } { MakeSR (); { uae_s16 src = get_word_020_prefetch (2); regs.sr ^= src; MakeFromSR (); }}} m68k_incpc (4); endlabel5526: ; return 8 * CYCLE_UNIT / 2; } /* EOR.L #.L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0a80_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_020_prefetch (2); { uae_s32 dst = m68k_dreg (regs, dstreg); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } #endif #ifdef PART_2 /* EOR.L #.L,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0a90_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} m68k_incpc (6); return 28 * CYCLE_UNIT / 2; } /* EOR.L #.L,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0a98_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) += 4; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} m68k_incpc (6); return 28 * CYCLE_UNIT / 2; } /* EOR.L #.L,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0aa0_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) = dsta; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} m68k_incpc (6); return 30 * CYCLE_UNIT / 2; } /* EOR.L #.L,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0aa8_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (6); { uae_s32 dst = x_get_long (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} m68k_incpc (8); return 32 * CYCLE_UNIT / 2; } /* EOR.L #.L,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0ab0_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_020_prefetch (2); { uaecptr dsta; m68k_incpc (6); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); { uae_s32 dst = x_get_long (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}}}return 32 * CYCLE_UNIT / 2; } /* EOR.L #.L,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_0ab8_20)(uae_u32 opcode) { {{ uae_s32 src = get_long_020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (6); { uae_s32 dst = x_get_long (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} m68k_incpc (8); return 32 * CYCLE_UNIT / 2; } /* EOR.L #.L,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_0ab9_20)(uae_u32 opcode) { {{ uae_s32 src = get_long_020_prefetch (2); { uaecptr dsta = get_long_020_prefetch (6); { uae_s32 dst = x_get_long (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} m68k_incpc (10); return 36 * CYCLE_UNIT / 2; } /* CAS.B #.W,(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0ad0_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(m68k_dreg (regs, rc))); { int flgs = ((uae_s8)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(m68k_dreg (regs, rc))) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); m68k_incpc (4); if (GET_ZFLG ()){ x_put_byte (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = (m68k_dreg(regs, rc) & ~0xff) | (dst & 0xff); }}}}}}}}return 16 * CYCLE_UNIT / 2; } #endif /* CAS.B #.W,(An)+ */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0ad8_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(m68k_dreg (regs, rc))); { int flgs = ((uae_s8)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(m68k_dreg (regs, rc))) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); m68k_incpc (4); if (GET_ZFLG ()){ x_put_byte (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = (m68k_dreg(regs, rc) & ~0xff) | (dst & 0xff); }}}}}}}}return 16 * CYCLE_UNIT / 2; } #endif /* CAS.B #.W,-(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0ae0_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(m68k_dreg (regs, rc))); { int flgs = ((uae_s8)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(m68k_dreg (regs, rc))) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); m68k_incpc (4); if (GET_ZFLG ()){ x_put_byte (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = (m68k_dreg(regs, rc) & ~0xff) | (dst & 0xff); }}}}}}}}return 18 * CYCLE_UNIT / 2; } #endif /* CAS.B #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0ae8_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(m68k_dreg (regs, rc))); { int flgs = ((uae_s8)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(m68k_dreg (regs, rc))) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); m68k_incpc (6); if (GET_ZFLG ()){ x_put_byte (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = (m68k_dreg(regs, rc) & ~0xff) | (dst & 0xff); }}}}}}}}return 20 * CYCLE_UNIT / 2; } #endif /* CAS.B #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0af0_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); { uae_s8 dst = x_get_byte (dsta); { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(m68k_dreg (regs, rc))); { int flgs = ((uae_s8)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(m68k_dreg (regs, rc))) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); if (GET_ZFLG ()){ x_put_byte (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = (m68k_dreg(regs, rc) & ~0xff) | (dst & 0xff); }}}}}}}}}return 20 * CYCLE_UNIT / 2; } #endif /* CAS.B #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0af8_20)(uae_u32 opcode) { {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(m68k_dreg (regs, rc))); { int flgs = ((uae_s8)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(m68k_dreg (regs, rc))) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); m68k_incpc (6); if (GET_ZFLG ()){ x_put_byte (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = (m68k_dreg(regs, rc) & ~0xff) | (dst & 0xff); }}}}}}}}return 20 * CYCLE_UNIT / 2; } #endif /* CAS.B #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0af9_20)(uae_u32 opcode) { {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = get_long_020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(m68k_dreg (regs, rc))); { int flgs = ((uae_s8)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(m68k_dreg (regs, rc))) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); m68k_incpc (8); if (GET_ZFLG ()){ x_put_byte (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = (m68k_dreg(regs, rc) & ~0xff) | (dst & 0xff); }}}}}}}}return 24 * CYCLE_UNIT / 2; } #endif /* CMP.B #.B,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0c00_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = x_get_ibyte (2); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* CMP.B #.B,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0c10_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = x_get_ibyte (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* CMP.B #.B,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0c18_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = x_get_ibyte (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* CMP.B #.B,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0c20_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = x_get_ibyte (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* CMP.B #.B,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0c28_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = x_get_ibyte (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* CMP.B #.B,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0c30_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = x_get_ibyte (2); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}}}return 20 * CYCLE_UNIT / 2; } /* CMP.B #.B,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_0c38_20)(uae_u32 opcode) { {{ uae_s8 src = x_get_ibyte (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* CMP.B #.B,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_0c39_20)(uae_u32 opcode) { {{ uae_s8 src = x_get_ibyte (2); { uaecptr dsta = get_long_020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (8); return 24 * CYCLE_UNIT / 2; } /* CMP.B #.B,(d16,PC) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0c3a_20)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s8 src = x_get_ibyte (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } #endif /* CMP.B #.B,(d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0c3b_20)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s8 src = x_get_ibyte (2); { uaecptr tmppc; uaecptr dsta; m68k_incpc (4); { tmppc = m68k_getpc (); dsta = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}}}return 20 * CYCLE_UNIT / 2; } #endif /* CMP.W #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0c40_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* CMP.W #.W,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0c50_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* CMP.W #.W,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0c58_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) += 2; {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* CMP.W #.W,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0c60_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (4); return 14 * CYCLE_UNIT / 2; } /* CMP.W #.W,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0c68_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* CMP.W #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0c70_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}}}return 16 * CYCLE_UNIT / 2; } /* CMP.W #.W,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_0c78_20)(uae_u32 opcode) { {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* CMP.W #.W,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_0c79_20)(uae_u32 opcode) { {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = get_long_020_prefetch (4); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (8); return 20 * CYCLE_UNIT / 2; } /* CMP.W #.W,(d16,PC) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0c7a_20)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } #endif /* CMP.W #.W,(d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0c7b_20)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr tmppc; uaecptr dsta; m68k_incpc (4); { tmppc = m68k_getpc (); dsta = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}}}return 16 * CYCLE_UNIT / 2; } #endif /* CMP.L #.L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0c80_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_020_prefetch (2); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } /* CMP.L #.L,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0c90_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* CMP.L #.L,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0c98_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) += 4; {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* CMP.L #.L,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0ca0_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (6); return 22 * CYCLE_UNIT / 2; } /* CMP.L #.L,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0ca8_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (6); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (8); return 24 * CYCLE_UNIT / 2; } /* CMP.L #.L,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0cb0_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_020_prefetch (2); { uaecptr dsta; m68k_incpc (6); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}}return 24 * CYCLE_UNIT / 2; } /* CMP.L #.L,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_0cb8_20)(uae_u32 opcode) { {{ uae_s32 src = get_long_020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (6); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (8); return 24 * CYCLE_UNIT / 2; } /* CMP.L #.L,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_0cb9_20)(uae_u32 opcode) { {{ uae_s32 src = get_long_020_prefetch (2); { uaecptr dsta = get_long_020_prefetch (6); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (10); return 28 * CYCLE_UNIT / 2; } /* CMP.L #.L,(d16,PC) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0cba_20)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s32 src = get_long_020_prefetch (2); { uaecptr dsta = m68k_getpc () + 6; dsta += (uae_s32)(uae_s16)get_word_020_prefetch (6); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (8); return 24 * CYCLE_UNIT / 2; } #endif /* CMP.L #.L,(d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0cbb_20)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s32 src = get_long_020_prefetch (2); { uaecptr tmppc; uaecptr dsta; m68k_incpc (6); { tmppc = m68k_getpc (); dsta = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}}return 24 * CYCLE_UNIT / 2; } #endif /* CAS.W #.W,(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0cd0_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(m68k_dreg (regs, rc))); { int flgs = ((uae_s16)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(m68k_dreg (regs, rc))) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); m68k_incpc (4); if (GET_ZFLG ()){ x_put_word (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = (m68k_dreg(regs, rc) & ~0xffff) | (dst & 0xffff); }}}}}}}}return 16 * CYCLE_UNIT / 2; } #endif /* CAS.W #.W,(An)+ */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0cd8_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) += 2; { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(m68k_dreg (regs, rc))); { int flgs = ((uae_s16)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(m68k_dreg (regs, rc))) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); m68k_incpc (4); if (GET_ZFLG ()){ x_put_word (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = (m68k_dreg(regs, rc) & ~0xffff) | (dst & 0xffff); }}}}}}}}return 16 * CYCLE_UNIT / 2; } #endif /* CAS.W #.W,-(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0ce0_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) = dsta; { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(m68k_dreg (regs, rc))); { int flgs = ((uae_s16)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(m68k_dreg (regs, rc))) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); m68k_incpc (4); if (GET_ZFLG ()){ x_put_word (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = (m68k_dreg(regs, rc) & ~0xffff) | (dst & 0xffff); }}}}}}}}return 18 * CYCLE_UNIT / 2; } #endif /* CAS.W #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0ce8_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_s16 dst = x_get_word (dsta); { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(m68k_dreg (regs, rc))); { int flgs = ((uae_s16)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(m68k_dreg (regs, rc))) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); m68k_incpc (6); if (GET_ZFLG ()){ x_put_word (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = (m68k_dreg(regs, rc) & ~0xffff) | (dst & 0xffff); }}}}}}}}return 20 * CYCLE_UNIT / 2; } #endif /* CAS.W #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0cf0_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); { uae_s16 dst = x_get_word (dsta); { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(m68k_dreg (regs, rc))); { int flgs = ((uae_s16)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(m68k_dreg (regs, rc))) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); if (GET_ZFLG ()){ x_put_word (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = (m68k_dreg(regs, rc) & ~0xffff) | (dst & 0xffff); }}}}}}}}}return 20 * CYCLE_UNIT / 2; } #endif /* CAS.W #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0cf8_20)(uae_u32 opcode) { {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_s16 dst = x_get_word (dsta); { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(m68k_dreg (regs, rc))); { int flgs = ((uae_s16)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(m68k_dreg (regs, rc))) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); m68k_incpc (6); if (GET_ZFLG ()){ x_put_word (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = (m68k_dreg(regs, rc) & ~0xffff) | (dst & 0xffff); }}}}}}}}return 20 * CYCLE_UNIT / 2; } #endif /* CAS.W #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0cf9_20)(uae_u32 opcode) { {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = get_long_020_prefetch (4); { uae_s16 dst = x_get_word (dsta); { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(m68k_dreg (regs, rc))); { int flgs = ((uae_s16)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(m68k_dreg (regs, rc))) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); m68k_incpc (8); if (GET_ZFLG ()){ x_put_word (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = (m68k_dreg(regs, rc) & ~0xffff) | (dst & 0xffff); }}}}}}}}return 24 * CYCLE_UNIT / 2; } #endif /* CAS2.W #.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0cfc_20)(uae_u32 opcode) { {{ uae_s32 extra = get_long_020_prefetch (2); uae_u32 rn1 = regs.regs[(extra >> 28) & 15]; uae_u32 rn2 = regs.regs[(extra >> 12) & 15]; uae_u16 dst1 = x_get_word (rn1), dst2 = x_get_word (rn2); {uae_u32 newv = ((uae_s16)(dst1)) - ((uae_s16)(m68k_dreg (regs, (extra >> 16) & 7))); { int flgs = ((uae_s16)(m68k_dreg (regs, (extra >> 16) & 7))) < 0; int flgo = ((uae_s16)(dst1)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(m68k_dreg (regs, (extra >> 16) & 7))) > ((uae_u16)(dst1))); SET_NFLG (flgn != 0); if (GET_ZFLG ()) { {uae_u32 newv = ((uae_s16)(dst2)) - ((uae_s16)(m68k_dreg (regs, extra & 7))); { int flgs = ((uae_s16)(m68k_dreg (regs, extra & 7))) < 0; int flgo = ((uae_s16)(dst2)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(m68k_dreg (regs, extra & 7))) > ((uae_u16)(dst2))); SET_NFLG (flgn != 0); if (GET_ZFLG ()) { x_put_word (rn1, m68k_dreg (regs, (extra >> 22) & 7)); x_put_word (rn2, m68k_dreg (regs, (extra >> 6) & 7)); }} }}}} if (! GET_ZFLG ()) { m68k_dreg (regs, (extra >> 6) & 7) = (m68k_dreg (regs, (extra >> 6) & 7) & ~0xffff) | (dst2 & 0xffff); m68k_dreg (regs, (extra >> 22) & 7) = (m68k_dreg (regs, (extra >> 22) & 7) & ~0xffff) | (dst1 & 0xffff); } }} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } #endif /* MOVES.B #.W,(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0e10_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel5580; } {{ uae_s16 extra = get_word_020_prefetch (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = m68k_areg (regs, dstreg); x_put_byte (dsta, src); }}else{{ uaecptr srca = m68k_areg (regs, dstreg); { uae_s8 src = x_get_byte (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = (uae_s32)(uae_s8)src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (m68k_dreg (regs, (extra >> 12) & 7) & ~0xff) | ((src) & 0xff); } }}} m68k_incpc (4); }}}endlabel5580: ; return 16 * CYCLE_UNIT / 2; } #endif /* MOVES.B #.W,(An)+ */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0e18_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel5581; } {{ uae_s16 extra = get_word_020_prefetch (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; x_put_byte (dsta, src); }}else{{ uaecptr srca = m68k_areg (regs, dstreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = (uae_s32)(uae_s8)src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (m68k_dreg (regs, (extra >> 12) & 7) & ~0xff) | ((src) & 0xff); } }}} m68k_incpc (4); }}}endlabel5581: ; return 16 * CYCLE_UNIT / 2; } #endif /* MOVES.B #.W,-(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0e20_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel5582; } {{ uae_s16 extra = get_word_020_prefetch (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; x_put_byte (dsta, src); }}else{{ uaecptr srca; srca = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, dstreg) = srca; if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = (uae_s32)(uae_s8)src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (m68k_dreg (regs, (extra >> 12) & 7) & ~0xff) | ((src) & 0xff); } }}} m68k_incpc (4); }}}endlabel5582: ; return 20 * CYCLE_UNIT / 2; } #endif /* MOVES.B #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0e28_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel5583; } {{ uae_s16 extra = get_word_020_prefetch (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (4); x_put_byte (dsta, src); }}else{{ uaecptr srca = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_s8 src = x_get_byte (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = (uae_s32)(uae_s8)src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (m68k_dreg (regs, (extra >> 12) & 7) & ~0xff) | ((src) & 0xff); } }}} m68k_incpc (6); }}}endlabel5583: ; return 24 * CYCLE_UNIT / 2; } #endif /* MOVES.B #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0e30_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel5584; } {{ uae_s16 extra = get_word_020_prefetch (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); x_put_byte (dsta, src); }}}else{{ uaecptr srca; m68k_incpc (4); { srca = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); { uae_s8 src = x_get_byte (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = (uae_s32)(uae_s8)src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (m68k_dreg (regs, (extra >> 12) & 7) & ~0xff) | ((src) & 0xff); } }}}}}}}endlabel5584: ; return 24 * CYCLE_UNIT / 2; } #endif /* MOVES.B #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0e38_20)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel5585; } {{ uae_s16 extra = get_word_020_prefetch (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (4); x_put_byte (dsta, src); }}else{{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_s8 src = x_get_byte (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = (uae_s32)(uae_s8)src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (m68k_dreg (regs, (extra >> 12) & 7) & ~0xff) | ((src) & 0xff); } }}} m68k_incpc (6); }}}endlabel5585: ; return 24 * CYCLE_UNIT / 2; } #endif /* MOVES.B #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0e39_20)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel5586; } {{ uae_s16 extra = get_word_020_prefetch (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = get_long_020_prefetch (4); x_put_byte (dsta, src); }}else{{ uaecptr srca = get_long_020_prefetch (4); { uae_s8 src = x_get_byte (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = (uae_s32)(uae_s8)src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (m68k_dreg (regs, (extra >> 12) & 7) & ~0xff) | ((src) & 0xff); } }}} m68k_incpc (8); }}}endlabel5586: ; return 32 * CYCLE_UNIT / 2; } #endif /* MOVES.W #.W,(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0e50_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel5587; } {{ uae_s16 extra = get_word_020_prefetch (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = m68k_areg (regs, dstreg); x_put_word (dsta, src); }}else{{ uaecptr srca = m68k_areg (regs, dstreg); { uae_s16 src = x_get_word (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = (uae_s32)(uae_s16)src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (m68k_dreg (regs, (extra >> 12) & 7) & ~0xffff) | ((src) & 0xffff); } }}} m68k_incpc (4); }}}endlabel5587: ; return 16 * CYCLE_UNIT / 2; } #endif /* MOVES.W #.W,(An)+ */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0e58_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel5588; } {{ uae_s16 extra = get_word_020_prefetch (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 2; x_put_word (dsta, src); }}else{{ uaecptr srca = m68k_areg (regs, dstreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, dstreg) += 2; if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = (uae_s32)(uae_s16)src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (m68k_dreg (regs, (extra >> 12) & 7) & ~0xffff) | ((src) & 0xffff); } }}} m68k_incpc (4); }}}endlabel5588: ; return 16 * CYCLE_UNIT / 2; } #endif /* MOVES.W #.W,-(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0e60_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel5589; } {{ uae_s16 extra = get_word_020_prefetch (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; m68k_areg (regs, dstreg) = dsta; x_put_word (dsta, src); }}else{{ uaecptr srca; srca = m68k_areg (regs, dstreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, dstreg) = srca; if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = (uae_s32)(uae_s16)src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (m68k_dreg (regs, (extra >> 12) & 7) & ~0xffff) | ((src) & 0xffff); } }}} m68k_incpc (4); }}}endlabel5589: ; return 20 * CYCLE_UNIT / 2; } #endif /* MOVES.W #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0e68_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel5590; } {{ uae_s16 extra = get_word_020_prefetch (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (4); x_put_word (dsta, src); }}else{{ uaecptr srca = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_s16 src = x_get_word (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = (uae_s32)(uae_s16)src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (m68k_dreg (regs, (extra >> 12) & 7) & ~0xffff) | ((src) & 0xffff); } }}} m68k_incpc (6); }}}endlabel5590: ; return 24 * CYCLE_UNIT / 2; } #endif /* MOVES.W #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0e70_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel5591; } {{ uae_s16 extra = get_word_020_prefetch (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); x_put_word (dsta, src); }}}else{{ uaecptr srca; m68k_incpc (4); { srca = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); { uae_s16 src = x_get_word (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = (uae_s32)(uae_s16)src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (m68k_dreg (regs, (extra >> 12) & 7) & ~0xffff) | ((src) & 0xffff); } }}}}}}}endlabel5591: ; return 24 * CYCLE_UNIT / 2; } #endif /* MOVES.W #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0e78_20)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel5592; } {{ uae_s16 extra = get_word_020_prefetch (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (4); x_put_word (dsta, src); }}else{{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_s16 src = x_get_word (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = (uae_s32)(uae_s16)src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (m68k_dreg (regs, (extra >> 12) & 7) & ~0xffff) | ((src) & 0xffff); } }}} m68k_incpc (6); }}}endlabel5592: ; return 24 * CYCLE_UNIT / 2; } #endif /* MOVES.W #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0e79_20)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel5593; } {{ uae_s16 extra = get_word_020_prefetch (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = get_long_020_prefetch (4); x_put_word (dsta, src); }}else{{ uaecptr srca = get_long_020_prefetch (4); { uae_s16 src = x_get_word (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = (uae_s32)(uae_s16)src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (m68k_dreg (regs, (extra >> 12) & 7) & ~0xffff) | ((src) & 0xffff); } }}} m68k_incpc (8); }}}endlabel5593: ; return 32 * CYCLE_UNIT / 2; } #endif /* MOVES.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0e90_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel5594; } {{ uae_s16 extra = get_word_020_prefetch (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = m68k_areg (regs, dstreg); x_put_long (dsta, src); }}else{{ uaecptr srca = m68k_areg (regs, dstreg); { uae_s32 src = x_get_long (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (src); } }}} m68k_incpc (4); }}}endlabel5594: ; return 24 * CYCLE_UNIT / 2; } #endif /* MOVES.L #.W,(An)+ */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0e98_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel5595; } {{ uae_s16 extra = get_word_020_prefetch (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 4; x_put_long (dsta, src); }}else{{ uaecptr srca = m68k_areg (regs, dstreg); { uae_s32 src = x_get_long (srca); m68k_areg (regs, dstreg) += 4; if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (src); } }}} m68k_incpc (4); }}}endlabel5595: ; return 24 * CYCLE_UNIT / 2; } #endif /* MOVES.L #.W,-(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0ea0_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel5596; } {{ uae_s16 extra = get_word_020_prefetch (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; m68k_areg (regs, dstreg) = dsta; x_put_long (dsta, src); }}else{{ uaecptr srca; srca = m68k_areg (regs, dstreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, dstreg) = srca; if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (src); } }}} m68k_incpc (4); }}}endlabel5596: ; return 28 * CYCLE_UNIT / 2; } #endif /* MOVES.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0ea8_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel5597; } {{ uae_s16 extra = get_word_020_prefetch (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (4); x_put_long (dsta, src); }}else{{ uaecptr srca = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_s32 src = x_get_long (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (src); } }}} m68k_incpc (6); }}}endlabel5597: ; return 32 * CYCLE_UNIT / 2; } #endif /* MOVES.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0eb0_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {if (!regs.s) { Exception (8); goto endlabel5598; } {{ uae_s16 extra = get_word_020_prefetch (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); x_put_long (dsta, src); }}}else{{ uaecptr srca; m68k_incpc (4); { srca = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); { uae_s32 src = x_get_long (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (src); } }}}}}}}endlabel5598: ; return 32 * CYCLE_UNIT / 2; } #endif /* MOVES.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0eb8_20)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel5599; } {{ uae_s16 extra = get_word_020_prefetch (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (4); x_put_long (dsta, src); }}else{{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_s32 src = x_get_long (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (src); } }}} m68k_incpc (6); }}}endlabel5599: ; return 32 * CYCLE_UNIT / 2; } #endif /* MOVES.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0eb9_20)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel5600; } {{ uae_s16 extra = get_word_020_prefetch (2); if (extra & 0x800) { uae_u32 src = regs.regs[(extra >> 12) & 15]; { uaecptr dsta = get_long_020_prefetch (4); x_put_long (dsta, src); }}else{{ uaecptr srca = get_long_020_prefetch (4); { uae_s32 src = x_get_long (srca); if (extra & 0x8000) { m68k_areg (regs, (extra >> 12) & 7) = src; } else { m68k_dreg (regs, (extra >> 12) & 7) = (src); } }}} m68k_incpc (8); }}}endlabel5600: ; return 40 * CYCLE_UNIT / 2; } #endif /* CAS.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0ed0_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(m68k_dreg (regs, rc))); { int flgs = ((uae_s32)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(m68k_dreg (regs, rc))) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); m68k_incpc (4); if (GET_ZFLG ()){ x_put_long (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = dst; }}}}}}}}return 24 * CYCLE_UNIT / 2; } #endif /* CAS.L #.W,(An)+ */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0ed8_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) += 4; { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(m68k_dreg (regs, rc))); { int flgs = ((uae_s32)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(m68k_dreg (regs, rc))) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); m68k_incpc (4); if (GET_ZFLG ()){ x_put_long (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = dst; }}}}}}}}return 24 * CYCLE_UNIT / 2; } #endif /* CAS.L #.W,-(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0ee0_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) = dsta; { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(m68k_dreg (regs, rc))); { int flgs = ((uae_s32)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(m68k_dreg (regs, rc))) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); m68k_incpc (4); if (GET_ZFLG ()){ x_put_long (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = dst; }}}}}}}}return 26 * CYCLE_UNIT / 2; } #endif /* CAS.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0ee8_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_s32 dst = x_get_long (dsta); { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(m68k_dreg (regs, rc))); { int flgs = ((uae_s32)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(m68k_dreg (regs, rc))) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); m68k_incpc (6); if (GET_ZFLG ()){ x_put_long (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = dst; }}}}}}}}return 28 * CYCLE_UNIT / 2; } #endif /* CAS.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0ef0_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); { uae_s32 dst = x_get_long (dsta); { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(m68k_dreg (regs, rc))); { int flgs = ((uae_s32)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(m68k_dreg (regs, rc))) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); if (GET_ZFLG ()){ x_put_long (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = dst; }}}}}}}}}return 28 * CYCLE_UNIT / 2; } #endif /* CAS.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0ef8_20)(uae_u32 opcode) { {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_s32 dst = x_get_long (dsta); { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(m68k_dreg (regs, rc))); { int flgs = ((uae_s32)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(m68k_dreg (regs, rc))) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); m68k_incpc (6); if (GET_ZFLG ()){ x_put_long (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = dst; }}}}}}}}return 28 * CYCLE_UNIT / 2; } #endif /* CAS.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0ef9_20)(uae_u32 opcode) { {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = get_long_020_prefetch (4); { uae_s32 dst = x_get_long (dsta); { int ru = (src >> 6) & 7; int rc = src & 7; {uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(m68k_dreg (regs, rc))); { int flgs = ((uae_s32)(m68k_dreg (regs, rc))) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(m68k_dreg (regs, rc))) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); m68k_incpc (8); if (GET_ZFLG ()){ x_put_long (dsta, (m68k_dreg (regs, ru))); }else{ m68k_dreg(regs, rc) = dst; }}}}}}}}return 32 * CYCLE_UNIT / 2; } #endif /* CAS2.L #.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_0efc_20)(uae_u32 opcode) { {{ uae_s32 extra = get_long_020_prefetch (2); uae_u32 rn1 = regs.regs[(extra >> 28) & 15]; uae_u32 rn2 = regs.regs[(extra >> 12) & 15]; uae_u32 dst1 = x_get_long (rn1), dst2 = x_get_long (rn2); {uae_u32 newv = ((uae_s32)(dst1)) - ((uae_s32)(m68k_dreg (regs, (extra >> 16) & 7))); { int flgs = ((uae_s32)(m68k_dreg (regs, (extra >> 16) & 7))) < 0; int flgo = ((uae_s32)(dst1)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(m68k_dreg (regs, (extra >> 16) & 7))) > ((uae_u32)(dst1))); SET_NFLG (flgn != 0); if (GET_ZFLG ()) { {uae_u32 newv = ((uae_s32)(dst2)) - ((uae_s32)(m68k_dreg (regs, extra & 7))); { int flgs = ((uae_s32)(m68k_dreg (regs, extra & 7))) < 0; int flgo = ((uae_s32)(dst2)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(m68k_dreg (regs, extra & 7))) > ((uae_u32)(dst2))); SET_NFLG (flgn != 0); if (GET_ZFLG ()) { x_put_long (rn1, m68k_dreg (regs, (extra >> 22) & 7)); x_put_long (rn2, m68k_dreg (regs, (extra >> 6) & 7)); }} }}}} if (! GET_ZFLG ()) { m68k_dreg (regs, (extra >> 6) & 7) = dst2; m68k_dreg (regs, (extra >> 22) & 7) = dst1; } }} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } #endif /* MOVE.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_1000_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); m68k_incpc (2); }}}return 4 * CYCLE_UNIT / 2; } /* MOVE.B (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_1010_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); m68k_incpc (2); }}}}return 8 * CYCLE_UNIT / 2; } /* MOVE.B (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_1018_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); m68k_incpc (2); }}}}return 8 * CYCLE_UNIT / 2; } /* MOVE.B -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_1020_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); m68k_incpc (2); }}}}return 10 * CYCLE_UNIT / 2; } /* MOVE.B (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_1028_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 src = x_get_byte (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); m68k_incpc (4); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.B (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_1030_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s8 src = x_get_byte (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.B (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_1038_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 src = x_get_byte (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); m68k_incpc (4); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.B (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_1039_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_020_prefetch (2); { uae_s8 src = x_get_byte (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); m68k_incpc (6); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_103a_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 src = x_get_byte (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); m68k_incpc (4); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.B (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_103b_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_s8 src = x_get_byte (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.B #.B,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_103c_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = x_get_ibyte (2); { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); m68k_incpc (4); }}}return 12 * CYCLE_UNIT / 2; } /* MOVE.B Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_1080_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (2); }}}return 8 * CYCLE_UNIT / 2; } /* MOVE.B (An),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_1090_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (2); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.B (An)+,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_1098_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (2); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.B -(An),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_10a0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (2); }}}}return 14 * CYCLE_UNIT / 2; } /* MOVE.B (d16,An),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_10a8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B (d8,An,Xn),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_10b0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B (xxx).W,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_10b8_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B (xxx).L,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_10b9_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (6); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.B (d16,PC),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_10ba_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B (d8,PC,Xn),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_10bb_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B #.B,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_10bc_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = x_get_ibyte (2); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); }}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_10c0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (2); }}}return 8 * CYCLE_UNIT / 2; } /* MOVE.B (An),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_10d0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (2); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.B (An)+,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_10d8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (2); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.B -(An),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_10e0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (2); }}}}return 14 * CYCLE_UNIT / 2; } /* MOVE.B (d16,An),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_10e8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B (d8,An,Xn),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_10f0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B (xxx).W,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_10f8_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B (xxx).L,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_10f9_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (6); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.B (d16,PC),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_10fa_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B (d8,PC,Xn),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_10fb_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B #.B,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_10fc_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = x_get_ibyte (2); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); }}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_1100_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (2); }}}return 8 * CYCLE_UNIT / 2; } /* MOVE.B (An),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_1110_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (2); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.B (An)+,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_1118_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (2); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.B -(An),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_1120_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (2); }}}}return 14 * CYCLE_UNIT / 2; } /* MOVE.B (d16,An),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_1128_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B (d8,An,Xn),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_1130_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s8 src = x_get_byte (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B (xxx).W,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_1138_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B (xxx).L,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_1139_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (6); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.B (d16,PC),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_113a_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B (d8,PC,Xn),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_113b_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_s8 src = x_get_byte (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B #.B,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_113c_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = x_get_ibyte (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); }}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_1140_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); }}}return 12 * CYCLE_UNIT / 2; } /* MOVE.B (An),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_1150_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B (An)+,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_1158_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B -(An),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_1160_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); }}}}return 18 * CYCLE_UNIT / 2; } /* MOVE.B (d16,An),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_1168_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (6); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.B (d8,An,Xn),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_1170_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (0); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (2); }}}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.B (xxx).W,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_1178_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (6); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.B (xxx).L,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_1179_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (8); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.B (d16,PC),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_117a_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (6); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.B (d8,PC,Xn),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_117b_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (0); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (2); }}}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.B #.B,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_117c_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = x_get_ibyte (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (6); }}}return 20 * CYCLE_UNIT / 2; } /* MOVE.B Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_1180_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.B (An),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_1190_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B (An)+,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_1198_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B -(An),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_11a0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}}}return 18 * CYCLE_UNIT / 2; } /* MOVE.B (d16,An),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_11a8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.B (d8,An,Xn),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_11b0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s8 src = x_get_byte (srca); { uaecptr dsta; { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.B (xxx).W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_11b8_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.B (xxx).L,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_11b9_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta; m68k_incpc (6); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.B (d16,PC),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_11ba_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.B (d8,PC,Xn),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_11bb_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_s8 src = x_get_byte (srca); { uaecptr dsta; { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.B #.B,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_11bc_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = x_get_ibyte (2); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.B Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_11c0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); }}}return 12 * CYCLE_UNIT / 2; } /* MOVE.B (An),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_11d0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B (An)+,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_11d8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B -(An),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_11e0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); }}}}return 18 * CYCLE_UNIT / 2; } /* MOVE.B (d16,An),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_11e8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (6); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.B (d8,An,Xn),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_11f0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (0); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (2); }}}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.B (xxx).W,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_11f8_20)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (6); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.B (xxx).L,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_11f9_20)(uae_u32 opcode) { {{ uaecptr srca = get_long_020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (8); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.B (d16,PC),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_11fa_20)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (6); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.B (d8,PC,Xn),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_11fb_20)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (0); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (2); }}}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.B #.B,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_11fc_20)(uae_u32 opcode) { {{ uae_s8 src = x_get_ibyte (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (6); }}}return 20 * CYCLE_UNIT / 2; } /* MOVE.B Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_13c0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (6); }}}return 16 * CYCLE_UNIT / 2; } /* MOVE.B (An),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_13d0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = get_long_020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (6); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.B (An)+,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_13d8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uaecptr dsta = get_long_020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (6); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.B -(An),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_13e0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = get_long_020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (6); }}}}return 22 * CYCLE_UNIT / 2; } /* MOVE.B (d16,An),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_13e8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = get_long_020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (8); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.B (d8,An,Xn),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_13f0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = get_long_020_prefetch (0); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); }}}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.B (xxx).W,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_13f8_20)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = get_long_020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (8); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.B (xxx).L,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_13f9_20)(uae_u32 opcode) { {{ uaecptr srca = get_long_020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = get_long_020_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (10); }}}}return 28 * CYCLE_UNIT / 2; } /* MOVE.B (d16,PC),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_13fa_20)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = get_long_020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (8); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.B (d8,PC,Xn),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_13fb_20)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_s8 src = x_get_byte (srca); { uaecptr dsta = get_long_020_prefetch (0); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (4); }}}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.B #.B,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_13fc_20)(uae_u32 opcode) { {{ uae_s8 src = x_get_ibyte (2); { uaecptr dsta = get_long_020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); m68k_incpc (8); }}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_2000_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpc (2); }}}return 4 * CYCLE_UNIT / 2; } /* MOVE.L An,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_2008_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpc (2); }}}return 4 * CYCLE_UNIT / 2; } /* MOVE.L (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_2010_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpc (2); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.L (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_2018_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) += 4; { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpc (2); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.L -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_2020_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) = srca; { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpc (2); }}}}return 14 * CYCLE_UNIT / 2; } /* MOVE.L (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_2028_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 src = x_get_long (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpc (4); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.L (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_2030_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s32 src = x_get_long (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.L (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_2038_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 src = x_get_long (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpc (4); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.L (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_2039_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_020_prefetch (2); { uae_s32 src = x_get_long (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpc (6); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.L (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_203a_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 src = x_get_long (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpc (4); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.L (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_203b_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_s32 src = x_get_long (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.L #.L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_203c_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_long_020_prefetch (2); { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpc (6); }}}return 12 * CYCLE_UNIT / 2; } /* MOVEA.L Dn,An */ uae_u32 REGPARAM2 CPUFUNC(op_2040_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { m68k_areg (regs, dstreg) = (src); m68k_incpc (2); }}}return 4 * CYCLE_UNIT / 2; } /* MOVEA.L An,An */ uae_u32 REGPARAM2 CPUFUNC(op_2048_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { m68k_areg (regs, dstreg) = (src); m68k_incpc (2); }}}return 4 * CYCLE_UNIT / 2; } /* MOVEA.L (An),An */ uae_u32 REGPARAM2 CPUFUNC(op_2050_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); { m68k_areg (regs, dstreg) = (src); m68k_incpc (2); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVEA.L (An)+,An */ uae_u32 REGPARAM2 CPUFUNC(op_2058_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) += 4; { m68k_areg (regs, dstreg) = (src); m68k_incpc (2); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVEA.L -(An),An */ uae_u32 REGPARAM2 CPUFUNC(op_2060_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) = srca; { m68k_areg (regs, dstreg) = (src); m68k_incpc (2); }}}}return 14 * CYCLE_UNIT / 2; } /* MOVEA.L (d16,An),An */ uae_u32 REGPARAM2 CPUFUNC(op_2068_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 src = x_get_long (srca); { m68k_areg (regs, dstreg) = (src); m68k_incpc (4); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVEA.L (d8,An,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_2070_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s32 src = x_get_long (srca); { m68k_areg (regs, dstreg) = (src); }}}}}return 16 * CYCLE_UNIT / 2; } /* MOVEA.L (xxx).W,An */ uae_u32 REGPARAM2 CPUFUNC(op_2078_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 src = x_get_long (srca); { m68k_areg (regs, dstreg) = (src); m68k_incpc (4); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVEA.L (xxx).L,An */ uae_u32 REGPARAM2 CPUFUNC(op_2079_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_020_prefetch (2); { uae_s32 src = x_get_long (srca); { m68k_areg (regs, dstreg) = (src); m68k_incpc (6); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVEA.L (d16,PC),An */ uae_u32 REGPARAM2 CPUFUNC(op_207a_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 src = x_get_long (srca); { m68k_areg (regs, dstreg) = (src); m68k_incpc (4); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVEA.L (d8,PC,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_207b_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_s32 src = x_get_long (srca); { m68k_areg (regs, dstreg) = (src); }}}}}return 16 * CYCLE_UNIT / 2; } /* MOVEA.L #.L,An */ uae_u32 REGPARAM2 CPUFUNC(op_207c_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_long_020_prefetch (2); { m68k_areg (regs, dstreg) = (src); m68k_incpc (6); }}}return 12 * CYCLE_UNIT / 2; } /* MOVE.L Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_2080_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (2); }}}return 12 * CYCLE_UNIT / 2; } /* MOVE.L An,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_2088_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (2); }}}return 12 * CYCLE_UNIT / 2; } /* MOVE.L (An),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_2090_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (2); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.L (An)+,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_2098_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) += 4; { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (2); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.L -(An),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_20a0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (2); }}}}return 22 * CYCLE_UNIT / 2; } /* MOVE.L (d16,An),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_20a8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (4); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L (d8,An,Xn),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_20b0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s32 src = x_get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L (xxx).W,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_20b8_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (4); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L (xxx).L,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_20b9_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (6); }}}}return 28 * CYCLE_UNIT / 2; } /* MOVE.L (d16,PC),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_20ba_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (4); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L (d8,PC,Xn),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_20bb_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_s32 src = x_get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L #.L,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_20bc_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_long_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (6); }}}return 20 * CYCLE_UNIT / 2; } /* MOVE.L Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_20c0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (2); }}}return 12 * CYCLE_UNIT / 2; } /* MOVE.L An,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_20c8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (2); }}}return 12 * CYCLE_UNIT / 2; } /* MOVE.L (An),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_20d0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (2); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.L (An)+,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_20d8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) += 4; { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (2); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.L -(An),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_20e0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (2); }}}}return 22 * CYCLE_UNIT / 2; } /* MOVE.L (d16,An),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_20e8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (4); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L (d8,An,Xn),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_20f0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s32 src = x_get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L (xxx).W,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_20f8_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (4); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L (xxx).L,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_20f9_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (6); }}}}return 28 * CYCLE_UNIT / 2; } /* MOVE.L (d16,PC),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_20fa_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (4); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L (d8,PC,Xn),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_20fb_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_s32 src = x_get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L #.L,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_20fc_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_long_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (6); }}}return 20 * CYCLE_UNIT / 2; } /* MOVE.L Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_2100_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (2); }}}return 12 * CYCLE_UNIT / 2; } /* MOVE.L An,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_2108_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (2); }}}return 12 * CYCLE_UNIT / 2; } /* MOVE.L (An),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_2110_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (2); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.L (An)+,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_2118_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) += 4; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (2); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.L -(An),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_2120_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (2); }}}}return 22 * CYCLE_UNIT / 2; } /* MOVE.L (d16,An),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_2128_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (4); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L (d8,An,Xn),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_2130_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s32 src = x_get_long (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L (xxx).W,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_2138_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (4); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L (xxx).L,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_2139_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (6); }}}}return 28 * CYCLE_UNIT / 2; } /* MOVE.L (d16,PC),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_213a_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (4); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L (d8,PC,Xn),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_213b_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_s32 src = x_get_long (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L #.L,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_213c_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_long_020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (6); }}}return 20 * CYCLE_UNIT / 2; } /* MOVE.L Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_2140_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (4); }}}return 16 * CYCLE_UNIT / 2; } /* MOVE.L An,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_2148_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (4); }}}return 16 * CYCLE_UNIT / 2; } /* MOVE.L (An),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_2150_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (4); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L (An)+,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_2158_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) += 4; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (4); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L -(An),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_2160_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (4); }}}}return 26 * CYCLE_UNIT / 2; } /* MOVE.L (d16,An),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_2168_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (6); }}}}return 28 * CYCLE_UNIT / 2; } #endif #ifdef PART_3 /* MOVE.L (d8,An,Xn),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_2170_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s32 src = x_get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (0); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (2); }}}}}return 28 * CYCLE_UNIT / 2; } /* MOVE.L (xxx).W,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_2178_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (6); }}}}return 28 * CYCLE_UNIT / 2; } /* MOVE.L (xxx).L,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_2179_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (8); }}}}return 32 * CYCLE_UNIT / 2; } /* MOVE.L (d16,PC),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_217a_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (6); }}}}return 28 * CYCLE_UNIT / 2; } /* MOVE.L (d8,PC,Xn),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_217b_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_s32 src = x_get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (0); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (2); }}}}}return 28 * CYCLE_UNIT / 2; } /* MOVE.L #.L,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_217c_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_long_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (8); }}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_2180_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.L An,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_2188_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.L (An),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_2190_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L (An)+,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_2198_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) += 4; { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L -(An),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_21a0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}}}return 26 * CYCLE_UNIT / 2; } /* MOVE.L (d16,An),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_21a8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}}}return 28 * CYCLE_UNIT / 2; } /* MOVE.L (d8,An,Xn),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_21b0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s32 src = x_get_long (srca); { uaecptr dsta; { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}}}}return 28 * CYCLE_UNIT / 2; } /* MOVE.L (xxx).W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_21b8_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}}}return 28 * CYCLE_UNIT / 2; } /* MOVE.L (xxx).L,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_21b9_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta; m68k_incpc (6); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}}}return 32 * CYCLE_UNIT / 2; } /* MOVE.L (d16,PC),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_21ba_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}}}return 28 * CYCLE_UNIT / 2; } /* MOVE.L (d8,PC,Xn),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_21bb_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_s32 src = x_get_long (srca); { uaecptr dsta; { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}}}}return 28 * CYCLE_UNIT / 2; } /* MOVE.L #.L,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_21bc_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_long_020_prefetch (2); { uaecptr dsta; m68k_incpc (6); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_21c0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (4); }}}return 16 * CYCLE_UNIT / 2; } /* MOVE.L An,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_21c8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_areg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (4); }}}return 16 * CYCLE_UNIT / 2; } /* MOVE.L (An),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_21d0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (4); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L (An)+,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_21d8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) += 4; { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (4); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L -(An),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_21e0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (4); }}}}return 26 * CYCLE_UNIT / 2; } /* MOVE.L (d16,An),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_21e8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (6); }}}}return 28 * CYCLE_UNIT / 2; } /* MOVE.L (d8,An,Xn),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_21f0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s32 src = x_get_long (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (0); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (2); }}}}}return 28 * CYCLE_UNIT / 2; } /* MOVE.L (xxx).W,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_21f8_20)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (6); }}}}return 28 * CYCLE_UNIT / 2; } /* MOVE.L (xxx).L,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_21f9_20)(uae_u32 opcode) { {{ uaecptr srca = get_long_020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (8); }}}}return 32 * CYCLE_UNIT / 2; } /* MOVE.L (d16,PC),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_21fa_20)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (6); }}}}return 28 * CYCLE_UNIT / 2; } /* MOVE.L (d8,PC,Xn),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_21fb_20)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_s32 src = x_get_long (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (0); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (2); }}}}}return 28 * CYCLE_UNIT / 2; } /* MOVE.L #.L,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_21fc_20)(uae_u32 opcode) { {{ uae_s32 src = get_long_020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (8); }}}return 24 * CYCLE_UNIT / 2; } /* MOVE.L Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_23c0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (6); }}}return 20 * CYCLE_UNIT / 2; } /* MOVE.L An,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_23c8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_areg (regs, srcreg); { uaecptr dsta = get_long_020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (6); }}}return 20 * CYCLE_UNIT / 2; } /* MOVE.L (An),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_23d0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); { uaecptr dsta = get_long_020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (6); }}}}return 28 * CYCLE_UNIT / 2; } /* MOVE.L (An)+,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_23d8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) += 4; { uaecptr dsta = get_long_020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (6); }}}}return 28 * CYCLE_UNIT / 2; } /* MOVE.L -(An),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_23e0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = get_long_020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (6); }}}}return 30 * CYCLE_UNIT / 2; } /* MOVE.L (d16,An),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_23e8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta = get_long_020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (8); }}}}return 32 * CYCLE_UNIT / 2; } /* MOVE.L (d8,An,Xn),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_23f0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s32 src = x_get_long (srca); { uaecptr dsta = get_long_020_prefetch (0); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (4); }}}}}return 32 * CYCLE_UNIT / 2; } /* MOVE.L (xxx).W,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_23f8_20)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta = get_long_020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (8); }}}}return 32 * CYCLE_UNIT / 2; } /* MOVE.L (xxx).L,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_23f9_20)(uae_u32 opcode) { {{ uaecptr srca = get_long_020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta = get_long_020_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (10); }}}}return 36 * CYCLE_UNIT / 2; } /* MOVE.L (d16,PC),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_23fa_20)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 src = x_get_long (srca); { uaecptr dsta = get_long_020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (8); }}}}return 32 * CYCLE_UNIT / 2; } /* MOVE.L (d8,PC,Xn),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_23fb_20)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_s32 src = x_get_long (srca); { uaecptr dsta = get_long_020_prefetch (0); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (4); }}}}}return 32 * CYCLE_UNIT / 2; } /* MOVE.L #.L,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_23fc_20)(uae_u32 opcode) { {{ uae_s32 src = get_long_020_prefetch (2); { uaecptr dsta = get_long_020_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); m68k_incpc (10); }}}return 28 * CYCLE_UNIT / 2; } /* MOVE.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_3000_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpc (2); }}}return 4 * CYCLE_UNIT / 2; } /* MOVE.W An,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_3008_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpc (2); }}}return 4 * CYCLE_UNIT / 2; } /* MOVE.W (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_3010_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpc (2); }}}}return 8 * CYCLE_UNIT / 2; } /* MOVE.W (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_3018_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpc (2); }}}}return 8 * CYCLE_UNIT / 2; } /* MOVE.W -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_3020_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpc (2); }}}}return 10 * CYCLE_UNIT / 2; } /* MOVE.W (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_3028_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpc (4); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.W (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_3030_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s16 src = x_get_word (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.W (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_3038_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpc (4); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.W (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_3039_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_020_prefetch (2); { uae_s16 src = x_get_word (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpc (6); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_303a_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpc (4); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.W (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_303b_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_s16 src = x_get_word (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.W #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_303c_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_020_prefetch (2); { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpc (4); }}}return 8 * CYCLE_UNIT / 2; } /* MOVEA.W Dn,An */ uae_u32 REGPARAM2 CPUFUNC(op_3040_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpc (2); }}}return 4 * CYCLE_UNIT / 2; } /* MOVEA.W An,An */ uae_u32 REGPARAM2 CPUFUNC(op_3048_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpc (2); }}}return 4 * CYCLE_UNIT / 2; } /* MOVEA.W (An),An */ uae_u32 REGPARAM2 CPUFUNC(op_3050_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpc (2); }}}}return 8 * CYCLE_UNIT / 2; } /* MOVEA.W (An)+,An */ uae_u32 REGPARAM2 CPUFUNC(op_3058_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpc (2); }}}}return 8 * CYCLE_UNIT / 2; } /* MOVEA.W -(An),An */ uae_u32 REGPARAM2 CPUFUNC(op_3060_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpc (2); }}}}return 10 * CYCLE_UNIT / 2; } /* MOVEA.W (d16,An),An */ uae_u32 REGPARAM2 CPUFUNC(op_3068_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpc (4); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVEA.W (d8,An,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_3070_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s16 src = x_get_word (srca); { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); }}}}}return 12 * CYCLE_UNIT / 2; } /* MOVEA.W (xxx).W,An */ uae_u32 REGPARAM2 CPUFUNC(op_3078_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpc (4); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVEA.W (xxx).L,An */ uae_u32 REGPARAM2 CPUFUNC(op_3079_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_020_prefetch (2); { uae_s16 src = x_get_word (srca); { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpc (6); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVEA.W (d16,PC),An */ uae_u32 REGPARAM2 CPUFUNC(op_307a_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpc (4); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVEA.W (d8,PC,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_307b_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_s16 src = x_get_word (srca); { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); }}}}}return 12 * CYCLE_UNIT / 2; } /* MOVEA.W #.W,An */ uae_u32 REGPARAM2 CPUFUNC(op_307c_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_020_prefetch (2); { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpc (4); }}}return 8 * CYCLE_UNIT / 2; } /* MOVE.W Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_3080_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (2); }}}return 8 * CYCLE_UNIT / 2; } /* MOVE.W An,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_3088_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (2); }}}return 8 * CYCLE_UNIT / 2; } /* MOVE.W (An),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_3090_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (2); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.W (An)+,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_3098_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (2); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.W -(An),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_30a0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (2); }}}}return 14 * CYCLE_UNIT / 2; } /* MOVE.W (d16,An),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_30a8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W (d8,An,Xn),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_30b0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W (xxx).W,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_30b8_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W (xxx).L,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_30b9_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.W (d16,PC),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_30ba_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W (d8,PC,Xn),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_30bb_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W #.W,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_30bc_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}}return 12 * CYCLE_UNIT / 2; } /* MOVE.W Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_30c0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (2); }}}return 8 * CYCLE_UNIT / 2; } /* MOVE.W An,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_30c8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (2); }}}return 8 * CYCLE_UNIT / 2; } /* MOVE.W (An),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_30d0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (2); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.W (An)+,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_30d8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (2); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.W -(An),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_30e0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (2); }}}}return 14 * CYCLE_UNIT / 2; } /* MOVE.W (d16,An),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_30e8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W (d8,An,Xn),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_30f0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W (xxx).W,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_30f8_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W (xxx).L,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_30f9_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.W (d16,PC),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_30fa_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W (d8,PC,Xn),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_30fb_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W #.W,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_30fc_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}}return 12 * CYCLE_UNIT / 2; } /* MOVE.W Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_3100_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (2); }}}return 8 * CYCLE_UNIT / 2; } /* MOVE.W An,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_3108_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (2); }}}return 8 * CYCLE_UNIT / 2; } /* MOVE.W (An),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_3110_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (2); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.W (An)+,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_3118_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (2); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.W -(An),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_3120_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (2); }}}}return 14 * CYCLE_UNIT / 2; } /* MOVE.W (d16,An),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_3128_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W (d8,An,Xn),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_3130_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s16 src = x_get_word (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W (xxx).W,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_3138_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W (xxx).L,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_3139_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.W (d16,PC),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_313a_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W (d8,PC,Xn),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_313b_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_s16 src = x_get_word (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W #.W,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_313c_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; m68k_areg (regs, dstreg) = dsta; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}}return 12 * CYCLE_UNIT / 2; } /* MOVE.W Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_3140_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}}return 12 * CYCLE_UNIT / 2; } /* MOVE.W An,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_3148_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}}return 12 * CYCLE_UNIT / 2; } /* MOVE.W (An),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_3150_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W (An)+,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_3158_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W -(An),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_3160_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}}}return 18 * CYCLE_UNIT / 2; } /* MOVE.W (d16,An),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_3168_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.W (d8,An,Xn),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_3170_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (0); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (2); }}}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.W (xxx).W,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_3178_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.W (xxx).L,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_3179_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (8); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.W (d16,PC),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_317a_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.W (d8,PC,Xn),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_317b_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_s16 src = x_get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (0); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (2); }}}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.W #.W,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_317c_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); }}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_3180_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.W An,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_3188_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}}return 12 * CYCLE_UNIT / 2; } /* MOVE.W (An),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_3190_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W (An)+,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_3198_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W -(An),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_31a0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}}}return 18 * CYCLE_UNIT / 2; } /* MOVE.W (d16,An),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_31a8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.W (d8,An,Xn),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_31b0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s16 src = x_get_word (srca); { uaecptr dsta; { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.W (xxx).W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_31b8_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.W (xxx).L,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_31b9_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta; m68k_incpc (6); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.W (d16,PC),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_31ba_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.W (d8,PC,Xn),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_31bb_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_s16 src = x_get_word (srca); { uaecptr dsta; { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.W #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_31bc_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_31c0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}}return 12 * CYCLE_UNIT / 2; } /* MOVE.W An,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_31c8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_areg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}}return 12 * CYCLE_UNIT / 2; } /* MOVE.W (An),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_31d0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W (An)+,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_31d8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W -(An),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_31e0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}}}return 18 * CYCLE_UNIT / 2; } /* MOVE.W (d16,An),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_31e8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.W (d8,An,Xn),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_31f0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s16 src = x_get_word (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (0); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (2); }}}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.W (xxx).W,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_31f8_20)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.W (xxx).L,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_31f9_20)(uae_u32 opcode) { {{ uaecptr srca = get_long_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (8); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.W (d16,PC),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_31fa_20)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.W (d8,PC,Xn),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_31fb_20)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_s16 src = x_get_word (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (0); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (2); }}}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.W #.W,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_31fc_20)(uae_u32 opcode) { {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); }}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_33c0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); }}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W An,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_33c8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_areg (regs, srcreg); { uaecptr dsta = get_long_020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); }}}return 16 * CYCLE_UNIT / 2; } /* MOVE.W (An),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_33d0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); { uaecptr dsta = get_long_020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.W (An)+,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_33d8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uaecptr dsta = get_long_020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); }}}}return 20 * CYCLE_UNIT / 2; } /* MOVE.W -(An),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_33e0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = get_long_020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (6); }}}}return 22 * CYCLE_UNIT / 2; } /* MOVE.W (d16,An),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_33e8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta = get_long_020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (8); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.W (d8,An,Xn),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_33f0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s16 src = x_get_word (srca); { uaecptr dsta = get_long_020_prefetch (0); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.W (xxx).W,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_33f8_20)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta = get_long_020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (8); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.W (xxx).L,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_33f9_20)(uae_u32 opcode) { {{ uaecptr srca = get_long_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta = get_long_020_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (10); }}}}return 28 * CYCLE_UNIT / 2; } /* MOVE.W (d16,PC),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_33fa_20)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uaecptr dsta = get_long_020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (8); }}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.W (d8,PC,Xn),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_33fb_20)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_s16 src = x_get_word (srca); { uaecptr dsta = get_long_020_prefetch (0); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (4); }}}}}return 24 * CYCLE_UNIT / 2; } /* MOVE.W #.W,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_33fc_20)(uae_u32 opcode) { {{ uae_s16 src = get_word_020_prefetch (2); { uaecptr dsta = get_long_020_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); m68k_incpc (8); }}}return 20 * CYCLE_UNIT / 2; } /* NEGX.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4000_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((newv) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* NEGX.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4010_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); x_put_byte (srca, newv); }}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* NEGX.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4018_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); x_put_byte (srca, newv); }}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* NEGX.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_4020_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); x_put_byte (srca, newv); }}}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* NEGX.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4028_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); x_put_byte (srca, newv); }}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* NEGX.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4030_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s8 src = x_get_byte (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); x_put_byte (srca, newv); }}}}}}return 16 * CYCLE_UNIT / 2; } /* NEGX.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4038_20)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); x_put_byte (srca, newv); }}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* NEGX.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4039_20)(uae_u32 opcode) { {{ uaecptr srca = get_long_020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); x_put_byte (srca, newv); }}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* NEGX.W Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4040_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | ((newv) & 0xffff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* NEGX.W (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4050_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); x_put_word (srca, newv); }}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* NEGX.W (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4058_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); x_put_word (srca, newv); }}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* NEGX.W -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_4060_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); x_put_word (srca, newv); }}}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* NEGX.W (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4068_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); x_put_word (srca, newv); }}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* NEGX.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4070_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s16 src = x_get_word (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); x_put_word (srca, newv); }}}}}}return 16 * CYCLE_UNIT / 2; } /* NEGX.W (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4078_20)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); x_put_word (srca, newv); }}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* NEGX.W (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4079_20)(uae_u32 opcode) { {{ uaecptr srca = get_long_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); x_put_word (srca, newv); }}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* NEGX.L Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4080_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, srcreg) = (newv); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* NEGX.L (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4090_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); x_put_long (srca, newv); }}}}} m68k_incpc (2); return 20 * CYCLE_UNIT / 2; } /* NEGX.L (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4098_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) += 4; { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); x_put_long (srca, newv); }}}}} m68k_incpc (2); return 20 * CYCLE_UNIT / 2; } /* NEGX.L -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_40a0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) = srca; { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); x_put_long (srca, newv); }}}}} m68k_incpc (2); return 22 * CYCLE_UNIT / 2; } /* NEGX.L (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_40a8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); x_put_long (srca, newv); }}}}} m68k_incpc (4); return 24 * CYCLE_UNIT / 2; } /* NEGX.L (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_40b0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s32 src = x_get_long (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); x_put_long (srca, newv); }}}}}}return 24 * CYCLE_UNIT / 2; } /* NEGX.L (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_40b8_20)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); x_put_long (srca, newv); }}}}} m68k_incpc (4); return 24 * CYCLE_UNIT / 2; } /* NEGX.L (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_40b9_20)(uae_u32 opcode) { {{ uaecptr srca = get_long_020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); x_put_long (srca, newv); }}}}} m68k_incpc (6); return 28 * CYCLE_UNIT / 2; } /* MVSR2.W Dn */ uae_u32 REGPARAM2 CPUFUNC(op_40c0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel5937; } {{ MakeSR (); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | ((regs.sr) & 0xffff); }}} m68k_incpc (2); endlabel5937: ; return 4 * CYCLE_UNIT / 2; } /* MVSR2.W (An) */ uae_u32 REGPARAM2 CPUFUNC(op_40d0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel5938; } {{ uaecptr srca = m68k_areg (regs, srcreg); MakeSR (); x_put_word (srca, regs.sr); }}} m68k_incpc (2); endlabel5938: ; return 8 * CYCLE_UNIT / 2; } /* MVSR2.W (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_40d8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel5939; } {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += 2; MakeSR (); x_put_word (srca, regs.sr); }}} m68k_incpc (2); endlabel5939: ; return 8 * CYCLE_UNIT / 2; } /* MVSR2.W -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_40e0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel5940; } {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; m68k_areg (regs, srcreg) = srca; MakeSR (); x_put_word (srca, regs.sr); }}} m68k_incpc (2); endlabel5940: ; return 10 * CYCLE_UNIT / 2; } /* MVSR2.W (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_40e8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel5941; } {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); MakeSR (); x_put_word (srca, regs.sr); }}} m68k_incpc (4); endlabel5941: ; return 12 * CYCLE_UNIT / 2; } /* MVSR2.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_40f0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel5942; } {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); MakeSR (); x_put_word (srca, regs.sr); }}}}endlabel5942: ; return 12 * CYCLE_UNIT / 2; } /* MVSR2.W (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_40f8_20)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel5943; } {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); MakeSR (); x_put_word (srca, regs.sr); }}} m68k_incpc (4); endlabel5943: ; return 12 * CYCLE_UNIT / 2; } /* MVSR2.W (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_40f9_20)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel5944; } {{ uaecptr srca = get_long_020_prefetch (2); MakeSR (); x_put_word (srca, regs.sr); }}} m68k_incpc (6); endlabel5944: ; return 16 * CYCLE_UNIT / 2; } /* CHK.L Dn,Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4100_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); m68k_incpc (2); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel5945; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel5945; } }}}endlabel5945: ; return 4 * CYCLE_UNIT / 2; } #endif /* CHK.L (An),Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4110_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); m68k_incpc (2); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel5946; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel5946; } }}}}endlabel5946: ; return 12 * CYCLE_UNIT / 2; } #endif /* CHK.L (An)+,Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4118_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) += 4; { uae_s32 dst = m68k_dreg (regs, dstreg); m68k_incpc (2); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel5947; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel5947; } }}}}endlabel5947: ; return 12 * CYCLE_UNIT / 2; } #endif /* CHK.L -(An),Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4120_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_dreg (regs, dstreg); m68k_incpc (2); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel5948; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel5948; } }}}}endlabel5948: ; return 14 * CYCLE_UNIT / 2; } #endif /* CHK.L (d16,An),Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4128_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); m68k_incpc (4); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel5949; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel5949; } }}}}endlabel5949: ; return 16 * CYCLE_UNIT / 2; } #endif /* CHK.L (d8,An,Xn),Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4130_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel5950; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel5950; } }}}}}endlabel5950: ; return 16 * CYCLE_UNIT / 2; } #endif /* CHK.L (xxx).W,Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4138_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); m68k_incpc (4); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel5951; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel5951; } }}}}endlabel5951: ; return 16 * CYCLE_UNIT / 2; } #endif /* CHK.L (xxx).L,Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4139_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); m68k_incpc (6); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel5952; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel5952; } }}}}endlabel5952: ; return 20 * CYCLE_UNIT / 2; } #endif /* CHK.L (d16,PC),Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_413a_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); m68k_incpc (4); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel5953; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel5953; } }}}}endlabel5953: ; return 16 * CYCLE_UNIT / 2; } #endif /* CHK.L (d8,PC,Xn),Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_413b_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel5954; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel5954; } }}}}}endlabel5954: ; return 16 * CYCLE_UNIT / 2; } #endif /* CHK.L #.L,Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_413c_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_long_020_prefetch (2); { uae_s32 dst = m68k_dreg (regs, dstreg); m68k_incpc (6); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel5955; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel5955; } }}}endlabel5955: ; return 12 * CYCLE_UNIT / 2; } #endif /* CHK.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4180_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); m68k_incpc (2); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel5956; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel5956; } }}}endlabel5956: ; return 4 * CYCLE_UNIT / 2; } /* CHK.W (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4190_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); m68k_incpc (2); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel5957; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel5957; } }}}}endlabel5957: ; return 8 * CYCLE_UNIT / 2; } /* CHK.W (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4198_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s16 dst = m68k_dreg (regs, dstreg); m68k_incpc (2); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel5958; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel5958; } }}}}endlabel5958: ; return 8 * CYCLE_UNIT / 2; } /* CHK.W -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_41a0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s16 dst = m68k_dreg (regs, dstreg); m68k_incpc (2); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel5959; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel5959; } }}}}endlabel5959: ; return 10 * CYCLE_UNIT / 2; } /* CHK.W (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_41a8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); m68k_incpc (4); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel5960; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel5960; } }}}}endlabel5960: ; return 12 * CYCLE_UNIT / 2; } /* CHK.W (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_41b0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel5961; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel5961; } }}}}}endlabel5961: ; return 12 * CYCLE_UNIT / 2; } /* CHK.W (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_41b8_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); m68k_incpc (4); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel5962; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel5962; } }}}}endlabel5962: ; return 12 * CYCLE_UNIT / 2; } /* CHK.W (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_41b9_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); m68k_incpc (6); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel5963; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel5963; } }}}}endlabel5963: ; return 16 * CYCLE_UNIT / 2; } /* CHK.W (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_41ba_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); m68k_incpc (4); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel5964; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel5964; } }}}}endlabel5964: ; return 12 * CYCLE_UNIT / 2; } /* CHK.W (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_41bb_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel5965; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel5965; } }}}}}endlabel5965: ; return 12 * CYCLE_UNIT / 2; } /* CHK.W #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_41bc_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uae_s16 dst = m68k_dreg (regs, dstreg); m68k_incpc (4); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel5966; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel5966; } }}}endlabel5966: ; return 8 * CYCLE_UNIT / 2; } /* LEA.L (An),An */ uae_u32 REGPARAM2 CPUFUNC(op_41d0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { m68k_areg (regs, dstreg) = (srca); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* LEA.L (d16,An),An */ uae_u32 REGPARAM2 CPUFUNC(op_41e8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { m68k_areg (regs, dstreg) = (srca); }}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* LEA.L (d8,An,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_41f0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { m68k_areg (regs, dstreg) = (srca); }}}}return 8 * CYCLE_UNIT / 2; } /* LEA.L (xxx).W,An */ uae_u32 REGPARAM2 CPUFUNC(op_41f8_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); { m68k_areg (regs, dstreg) = (srca); }}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* LEA.L (xxx).L,An */ uae_u32 REGPARAM2 CPUFUNC(op_41f9_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_020_prefetch (2); { m68k_areg (regs, dstreg) = (srca); }}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } /* LEA.L (d16,PC),An */ uae_u32 REGPARAM2 CPUFUNC(op_41fa_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_020_prefetch (2); { m68k_areg (regs, dstreg) = (srca); }}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* LEA.L (d8,PC,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_41fb_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword_020 ()); { m68k_areg (regs, dstreg) = (srca); }}}}return 8 * CYCLE_UNIT / 2; } /* CLR.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4200_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ CLEAR_CZNV (); SET_ZFLG (((uae_s8)(0)) == 0); SET_NFLG (((uae_s8)(0)) < 0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((0) & 0xff); }} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* CLR.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4210_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(0)) == 0); SET_NFLG (((uae_s8)(0)) < 0); x_put_byte (srca, 0); }} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* CLR.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4218_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(0)) == 0); SET_NFLG (((uae_s8)(0)) < 0); x_put_byte (srca, 0); }} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* CLR.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_4220_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(0)) == 0); SET_NFLG (((uae_s8)(0)) < 0); x_put_byte (srca, 0); }} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* CLR.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4228_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(0)) == 0); SET_NFLG (((uae_s8)(0)) < 0); x_put_byte (srca, 0); }} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* CLR.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4230_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(0)) == 0); SET_NFLG (((uae_s8)(0)) < 0); x_put_byte (srca, 0); }}}return 12 * CYCLE_UNIT / 2; } /* CLR.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4238_20)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(0)) == 0); SET_NFLG (((uae_s8)(0)) < 0); x_put_byte (srca, 0); }} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* CLR.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4239_20)(uae_u32 opcode) { {{ uaecptr srca = get_long_020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(0)) == 0); SET_NFLG (((uae_s8)(0)) < 0); x_put_byte (srca, 0); }} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* CLR.W Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4240_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ CLEAR_CZNV (); SET_ZFLG (((uae_s16)(0)) == 0); SET_NFLG (((uae_s16)(0)) < 0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | ((0) & 0xffff); }} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* CLR.W (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4250_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(0)) == 0); SET_NFLG (((uae_s16)(0)) < 0); x_put_word (srca, 0); }} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* CLR.W (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4258_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(0)) == 0); SET_NFLG (((uae_s16)(0)) < 0); x_put_word (srca, 0); }} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* CLR.W -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_4260_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; m68k_areg (regs, srcreg) = srca; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(0)) == 0); SET_NFLG (((uae_s16)(0)) < 0); x_put_word (srca, 0); }} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* CLR.W (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4268_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(0)) == 0); SET_NFLG (((uae_s16)(0)) < 0); x_put_word (srca, 0); }} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* CLR.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4270_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(0)) == 0); SET_NFLG (((uae_s16)(0)) < 0); x_put_word (srca, 0); }}}return 12 * CYCLE_UNIT / 2; } /* CLR.W (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4278_20)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(0)) == 0); SET_NFLG (((uae_s16)(0)) < 0); x_put_word (srca, 0); }} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* CLR.W (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4279_20)(uae_u32 opcode) { {{ uaecptr srca = get_long_020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(0)) == 0); SET_NFLG (((uae_s16)(0)) < 0); x_put_word (srca, 0); }} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* CLR.L Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4280_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ CLEAR_CZNV (); SET_ZFLG (((uae_s32)(0)) == 0); SET_NFLG (((uae_s32)(0)) < 0); m68k_dreg (regs, srcreg) = (0); }} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* CLR.L (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4290_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(0)) == 0); SET_NFLG (((uae_s32)(0)) < 0); x_put_long (srca, 0); }} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* CLR.L (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4298_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(0)) == 0); SET_NFLG (((uae_s32)(0)) < 0); x_put_long (srca, 0); }} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* CLR.L -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_42a0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; m68k_areg (regs, srcreg) = srca; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(0)) == 0); SET_NFLG (((uae_s32)(0)) < 0); x_put_long (srca, 0); }} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* CLR.L (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_42a8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(0)) == 0); SET_NFLG (((uae_s32)(0)) < 0); x_put_long (srca, 0); }} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* CLR.L (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_42b0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(0)) == 0); SET_NFLG (((uae_s32)(0)) < 0); x_put_long (srca, 0); }}}return 16 * CYCLE_UNIT / 2; } /* CLR.L (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_42b8_20)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(0)) == 0); SET_NFLG (((uae_s32)(0)) < 0); x_put_long (srca, 0); }} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* CLR.L (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_42b9_20)(uae_u32 opcode) { {{ uaecptr srca = get_long_020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(0)) == 0); SET_NFLG (((uae_s32)(0)) < 0); x_put_long (srca, 0); }} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* MVSR2.B Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_42c0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ MakeSR (); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | ((regs.sr & 0xff) & 0xffff); }} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } #endif #endif #ifdef PART_4 /* MVSR2.B (An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_42d0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); MakeSR (); x_put_word (srca, regs.sr & 0xff); }} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } #endif /* MVSR2.B (An)+ */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_42d8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += 2; MakeSR (); x_put_word (srca, regs.sr & 0xff); }} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } #endif /* MVSR2.B -(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_42e0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; m68k_areg (regs, srcreg) = srca; MakeSR (); x_put_word (srca, regs.sr & 0xff); }} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } #endif /* MVSR2.B (d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_42e8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); MakeSR (); x_put_word (srca, regs.sr & 0xff); }} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } #endif /* MVSR2.B (d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_42f0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); MakeSR (); x_put_word (srca, regs.sr & 0xff); }}}return 12 * CYCLE_UNIT / 2; } #endif /* MVSR2.B (xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_42f8_20)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); MakeSR (); x_put_word (srca, regs.sr & 0xff); }} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } #endif /* MVSR2.B (xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_42f9_20)(uae_u32 opcode) { {{ uaecptr srca = get_long_020_prefetch (2); MakeSR (); x_put_word (srca, regs.sr & 0xff); }} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } #endif /* NEG.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4400_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); {{uae_u32 dst = ((uae_s8)(0)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(dst)) < 0; SET_ZFLG (((uae_s8)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((dst) & 0xff); }}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* NEG.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4410_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); {{uae_u32 dst = ((uae_s8)(0)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(dst)) < 0; SET_ZFLG (((uae_s8)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (srca, dst); }}}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* NEG.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4418_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{uae_u32 dst = ((uae_s8)(0)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(dst)) < 0; SET_ZFLG (((uae_s8)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (srca, dst); }}}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* NEG.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_4420_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; {{uae_u32 dst = ((uae_s8)(0)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(dst)) < 0; SET_ZFLG (((uae_s8)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (srca, dst); }}}}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* NEG.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4428_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 src = x_get_byte (srca); {{uae_u32 dst = ((uae_s8)(0)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(dst)) < 0; SET_ZFLG (((uae_s8)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (srca, dst); }}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* NEG.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4430_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s8 src = x_get_byte (srca); {{uae_u32 dst = ((uae_s8)(0)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(dst)) < 0; SET_ZFLG (((uae_s8)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (srca, dst); }}}}}}}return 16 * CYCLE_UNIT / 2; } /* NEG.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4438_20)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 src = x_get_byte (srca); {{uae_u32 dst = ((uae_s8)(0)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(dst)) < 0; SET_ZFLG (((uae_s8)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (srca, dst); }}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* NEG.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4439_20)(uae_u32 opcode) { {{ uaecptr srca = get_long_020_prefetch (2); { uae_s8 src = x_get_byte (srca); {{uae_u32 dst = ((uae_s8)(0)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(dst)) < 0; SET_ZFLG (((uae_s8)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (srca, dst); }}}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* NEG.W Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4440_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); {{uae_u32 dst = ((uae_s16)(0)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(dst)) < 0; SET_ZFLG (((uae_s16)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | ((dst) & 0xffff); }}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* NEG.W (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4450_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); {{uae_u32 dst = ((uae_s16)(0)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(dst)) < 0; SET_ZFLG (((uae_s16)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (srca, dst); }}}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* NEG.W (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4458_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; {{uae_u32 dst = ((uae_s16)(0)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(dst)) < 0; SET_ZFLG (((uae_s16)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (srca, dst); }}}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* NEG.W -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_4460_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; {{uae_u32 dst = ((uae_s16)(0)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(dst)) < 0; SET_ZFLG (((uae_s16)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (srca, dst); }}}}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* NEG.W (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4468_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); {{uae_u32 dst = ((uae_s16)(0)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(dst)) < 0; SET_ZFLG (((uae_s16)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (srca, dst); }}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* NEG.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4470_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s16 src = x_get_word (srca); {{uae_u32 dst = ((uae_s16)(0)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(dst)) < 0; SET_ZFLG (((uae_s16)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (srca, dst); }}}}}}}return 16 * CYCLE_UNIT / 2; } /* NEG.W (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4478_20)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); {{uae_u32 dst = ((uae_s16)(0)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(dst)) < 0; SET_ZFLG (((uae_s16)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (srca, dst); }}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* NEG.W (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4479_20)(uae_u32 opcode) { {{ uaecptr srca = get_long_020_prefetch (2); { uae_s16 src = x_get_word (srca); {{uae_u32 dst = ((uae_s16)(0)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(dst)) < 0; SET_ZFLG (((uae_s16)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (srca, dst); }}}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* NEG.L Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4480_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); {{uae_u32 dst = ((uae_s32)(0)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(dst)) < 0; SET_ZFLG (((uae_s32)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, srcreg) = (dst); }}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* NEG.L (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4490_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); {{uae_u32 dst = ((uae_s32)(0)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(dst)) < 0; SET_ZFLG (((uae_s32)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (srca, dst); }}}}}} m68k_incpc (2); return 20 * CYCLE_UNIT / 2; } /* NEG.L (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4498_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) += 4; {{uae_u32 dst = ((uae_s32)(0)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(dst)) < 0; SET_ZFLG (((uae_s32)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (srca, dst); }}}}}} m68k_incpc (2); return 20 * CYCLE_UNIT / 2; } /* NEG.L -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_44a0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) = srca; {{uae_u32 dst = ((uae_s32)(0)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(dst)) < 0; SET_ZFLG (((uae_s32)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (srca, dst); }}}}}} m68k_incpc (2); return 22 * CYCLE_UNIT / 2; } /* NEG.L (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_44a8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 src = x_get_long (srca); {{uae_u32 dst = ((uae_s32)(0)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(dst)) < 0; SET_ZFLG (((uae_s32)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (srca, dst); }}}}}} m68k_incpc (4); return 24 * CYCLE_UNIT / 2; } /* NEG.L (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_44b0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s32 src = x_get_long (srca); {{uae_u32 dst = ((uae_s32)(0)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(dst)) < 0; SET_ZFLG (((uae_s32)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (srca, dst); }}}}}}}return 24 * CYCLE_UNIT / 2; } /* NEG.L (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_44b8_20)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 src = x_get_long (srca); {{uae_u32 dst = ((uae_s32)(0)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(dst)) < 0; SET_ZFLG (((uae_s32)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (srca, dst); }}}}}} m68k_incpc (4); return 24 * CYCLE_UNIT / 2; } /* NEG.L (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_44b9_20)(uae_u32 opcode) { {{ uaecptr srca = get_long_020_prefetch (2); { uae_s32 src = x_get_long (srca); {{uae_u32 dst = ((uae_s32)(0)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(dst)) < 0; SET_ZFLG (((uae_s32)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (srca, dst); }}}}}} m68k_incpc (6); return 28 * CYCLE_UNIT / 2; } /* MV2SR.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_44c0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); }} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* MV2SR.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_44d0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); }}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* MV2SR.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_44d8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); }}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* MV2SR.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_44e0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); }}} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* MV2SR.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_44e8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); }}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* MV2SR.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_44f0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s16 src = x_get_word (srca); MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); }}}}return 12 * CYCLE_UNIT / 2; } /* MV2SR.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_44f8_20)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); }}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* MV2SR.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_44f9_20)(uae_u32 opcode) { {{ uaecptr srca = get_long_020_prefetch (2); { uae_s16 src = x_get_word (srca); MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); }}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* MV2SR.B (d16,PC) */ uae_u32 REGPARAM2 CPUFUNC(op_44fa_20)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); }}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* MV2SR.B (d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_44fb_20)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_s16 src = x_get_word (srca); MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); }}}}return 12 * CYCLE_UNIT / 2; } /* MV2SR.B #.B */ uae_u32 REGPARAM2 CPUFUNC(op_44fc_20)(uae_u32 opcode) { {{ uae_s16 src = get_word_020_prefetch (2); MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); }} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* NOT.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4600_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(dst)) == 0); SET_NFLG (((uae_s8)(dst)) < 0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((dst) & 0xff); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* NOT.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4610_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(dst)) == 0); SET_NFLG (((uae_s8)(dst)) < 0); x_put_byte (srca, dst); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* NOT.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4618_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(dst)) == 0); SET_NFLG (((uae_s8)(dst)) < 0); x_put_byte (srca, dst); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* NOT.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_4620_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(dst)) == 0); SET_NFLG (((uae_s8)(dst)) < 0); x_put_byte (srca, dst); }}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* NOT.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4628_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(dst)) == 0); SET_NFLG (((uae_s8)(dst)) < 0); x_put_byte (srca, dst); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* NOT.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4630_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s8 src = x_get_byte (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(dst)) == 0); SET_NFLG (((uae_s8)(dst)) < 0); x_put_byte (srca, dst); }}}}}return 16 * CYCLE_UNIT / 2; } /* NOT.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4638_20)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(dst)) == 0); SET_NFLG (((uae_s8)(dst)) < 0); x_put_byte (srca, dst); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* NOT.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4639_20)(uae_u32 opcode) { {{ uaecptr srca = get_long_020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(dst)) == 0); SET_NFLG (((uae_s8)(dst)) < 0); x_put_byte (srca, dst); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* NOT.W Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4640_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(dst)) == 0); SET_NFLG (((uae_s16)(dst)) < 0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | ((dst) & 0xffff); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* NOT.W (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4650_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(dst)) == 0); SET_NFLG (((uae_s16)(dst)) < 0); x_put_word (srca, dst); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* NOT.W (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4658_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(dst)) == 0); SET_NFLG (((uae_s16)(dst)) < 0); x_put_word (srca, dst); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* NOT.W -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_4660_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(dst)) == 0); SET_NFLG (((uae_s16)(dst)) < 0); x_put_word (srca, dst); }}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* NOT.W (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4668_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(dst)) == 0); SET_NFLG (((uae_s16)(dst)) < 0); x_put_word (srca, dst); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* NOT.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4670_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s16 src = x_get_word (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(dst)) == 0); SET_NFLG (((uae_s16)(dst)) < 0); x_put_word (srca, dst); }}}}}return 16 * CYCLE_UNIT / 2; } /* NOT.W (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4678_20)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(dst)) == 0); SET_NFLG (((uae_s16)(dst)) < 0); x_put_word (srca, dst); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* NOT.W (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4679_20)(uae_u32 opcode) { {{ uaecptr srca = get_long_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(dst)) == 0); SET_NFLG (((uae_s16)(dst)) < 0); x_put_word (srca, dst); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* NOT.L Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4680_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); m68k_dreg (regs, srcreg) = (dst); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* NOT.L (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4690_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); x_put_long (srca, dst); }}}} m68k_incpc (2); return 20 * CYCLE_UNIT / 2; } /* NOT.L (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4698_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) += 4; { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); x_put_long (srca, dst); }}}} m68k_incpc (2); return 20 * CYCLE_UNIT / 2; } /* NOT.L -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_46a0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) = srca; { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); x_put_long (srca, dst); }}}} m68k_incpc (2); return 22 * CYCLE_UNIT / 2; } /* NOT.L (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_46a8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); x_put_long (srca, dst); }}}} m68k_incpc (4); return 24 * CYCLE_UNIT / 2; } /* NOT.L (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_46b0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s32 src = x_get_long (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); x_put_long (srca, dst); }}}}}return 24 * CYCLE_UNIT / 2; } /* NOT.L (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_46b8_20)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); x_put_long (srca, dst); }}}} m68k_incpc (4); return 24 * CYCLE_UNIT / 2; } /* NOT.L (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_46b9_20)(uae_u32 opcode) { {{ uaecptr srca = get_long_020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); x_put_long (srca, dst); }}}} m68k_incpc (6); return 28 * CYCLE_UNIT / 2; } /* MV2SR.W Dn */ uae_u32 REGPARAM2 CPUFUNC(op_46c0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel6065; } {{ uae_s16 src = m68k_dreg (regs, srcreg); regs.sr = src; MakeFromSR (); }}} m68k_incpc (2); endlabel6065: ; return 4 * CYCLE_UNIT / 2; } /* MV2SR.W (An) */ uae_u32 REGPARAM2 CPUFUNC(op_46d0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel6066; } {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); regs.sr = src; MakeFromSR (); }}}} m68k_incpc (2); endlabel6066: ; return 8 * CYCLE_UNIT / 2; } /* MV2SR.W (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_46d8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel6067; } {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; regs.sr = src; MakeFromSR (); }}}} m68k_incpc (2); endlabel6067: ; return 8 * CYCLE_UNIT / 2; } /* MV2SR.W -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_46e0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel6068; } {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; regs.sr = src; MakeFromSR (); }}}} m68k_incpc (2); endlabel6068: ; return 10 * CYCLE_UNIT / 2; } /* MV2SR.W (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_46e8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel6069; } {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); regs.sr = src; MakeFromSR (); }}}} m68k_incpc (4); endlabel6069: ; return 12 * CYCLE_UNIT / 2; } /* MV2SR.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_46f0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel6070; } {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s16 src = x_get_word (srca); regs.sr = src; MakeFromSR (); }}}}}endlabel6070: ; return 12 * CYCLE_UNIT / 2; } /* MV2SR.W (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_46f8_20)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel6071; } {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); regs.sr = src; MakeFromSR (); }}}} m68k_incpc (4); endlabel6071: ; return 12 * CYCLE_UNIT / 2; } /* MV2SR.W (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_46f9_20)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel6072; } {{ uaecptr srca = get_long_020_prefetch (2); { uae_s16 src = x_get_word (srca); regs.sr = src; MakeFromSR (); }}}} m68k_incpc (6); endlabel6072: ; return 16 * CYCLE_UNIT / 2; } /* MV2SR.W (d16,PC) */ uae_u32 REGPARAM2 CPUFUNC(op_46fa_20)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel6073; } {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); regs.sr = src; MakeFromSR (); }}}} m68k_incpc (4); endlabel6073: ; return 12 * CYCLE_UNIT / 2; } /* MV2SR.W (d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_46fb_20)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel6074; } {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_s16 src = x_get_word (srca); regs.sr = src; MakeFromSR (); }}}}}endlabel6074: ; return 12 * CYCLE_UNIT / 2; } /* MV2SR.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_46fc_20)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel6075; } {{ uae_s16 src = get_word_020_prefetch (2); regs.sr = src; MakeFromSR (); }}} m68k_incpc (4); endlabel6075: ; return 8 * CYCLE_UNIT / 2; } /* NBCD.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4800_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = - (src & 0xF0); uae_u16 newv; int cflg; if (newv_lo > 9) { newv_lo -= 6; } newv = newv_hi + newv_lo; cflg = (newv & 0x1F0) > 0x90; if (cflg) newv -= 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((newv) & 0xff); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* LINK.L An,#.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4808_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr olda; olda = m68k_areg (regs, 7) - 4; m68k_areg (regs, 7) = olda; { uae_s32 src = m68k_areg (regs, srcreg); { uae_s32 offs = get_long_020_prefetch (2); x_put_long (olda, src); m68k_areg (regs, srcreg) = (m68k_areg (regs, 7)); m68k_areg (regs, 7) += offs; }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } #endif /* NBCD.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4810_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { uae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = - (src & 0xF0); uae_u16 newv; int cflg; if (newv_lo > 9) { newv_lo -= 6; } newv = newv_hi + newv_lo; cflg = (newv & 0x1F0) > 0x90; if (cflg) newv -= 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); x_put_byte (srca, newv); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* NBCD.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4818_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = - (src & 0xF0); uae_u16 newv; int cflg; if (newv_lo > 9) { newv_lo -= 6; } newv = newv_hi + newv_lo; cflg = (newv & 0x1F0) > 0x90; if (cflg) newv -= 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); x_put_byte (srca, newv); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* NBCD.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_4820_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = - (src & 0xF0); uae_u16 newv; int cflg; if (newv_lo > 9) { newv_lo -= 6; } newv = newv_hi + newv_lo; cflg = (newv & 0x1F0) > 0x90; if (cflg) newv -= 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); x_put_byte (srca, newv); }}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* NBCD.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4828_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = - (src & 0xF0); uae_u16 newv; int cflg; if (newv_lo > 9) { newv_lo -= 6; } newv = newv_hi + newv_lo; cflg = (newv & 0x1F0) > 0x90; if (cflg) newv -= 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); x_put_byte (srca, newv); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* NBCD.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4830_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s8 src = x_get_byte (srca); { uae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = - (src & 0xF0); uae_u16 newv; int cflg; if (newv_lo > 9) { newv_lo -= 6; } newv = newv_hi + newv_lo; cflg = (newv & 0x1F0) > 0x90; if (cflg) newv -= 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); x_put_byte (srca, newv); }}}}}return 16 * CYCLE_UNIT / 2; } /* NBCD.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4838_20)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = - (src & 0xF0); uae_u16 newv; int cflg; if (newv_lo > 9) { newv_lo -= 6; } newv = newv_hi + newv_lo; cflg = (newv & 0x1F0) > 0x90; if (cflg) newv -= 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); x_put_byte (srca, newv); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* NBCD.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4839_20)(uae_u32 opcode) { {{ uaecptr srca = get_long_020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = - (src & 0xF0); uae_u16 newv; int cflg; if (newv_lo > 9) { newv_lo -= 6; } newv = newv_hi + newv_lo; cflg = (newv & 0x1F0) > 0x90; if (cflg) newv -= 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); x_put_byte (srca, newv); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* SWAP.W Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4840_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_u32 dst = ((src >> 16)&0xFFFF) | ((src&0xFFFF)<<16); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); m68k_dreg (regs, srcreg) = (dst); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* BKPTQ.L # */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4848_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); { m68k_incpc (2); op_illg (opcode); }return 4 * CYCLE_UNIT / 2; } #endif /* PEA.L (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4850_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, 7) - 4; m68k_areg (regs, 7) = dsta; x_put_long (dsta, srca); }}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* PEA.L (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4868_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, 7) - 4; m68k_areg (regs, 7) = dsta; x_put_long (dsta, srca); }}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* PEA.L (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4870_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uaecptr dsta; dsta = m68k_areg (regs, 7) - 4; m68k_areg (regs, 7) = dsta; x_put_long (dsta, srca); }}}}return 16 * CYCLE_UNIT / 2; } /* PEA.L (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4878_20)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, 7) - 4; m68k_areg (regs, 7) = dsta; x_put_long (dsta, srca); }}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* PEA.L (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4879_20)(uae_u32 opcode) { {{ uaecptr srca = get_long_020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, 7) - 4; m68k_areg (regs, 7) = dsta; x_put_long (dsta, srca); }}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* PEA.L (d16,PC) */ uae_u32 REGPARAM2 CPUFUNC(op_487a_20)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, 7) - 4; m68k_areg (regs, 7) = dsta; x_put_long (dsta, srca); }}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* PEA.L (d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_487b_20)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword_020 ()); { uaecptr dsta; dsta = m68k_areg (regs, 7) - 4; m68k_areg (regs, 7) = dsta; x_put_long (dsta, srca); }}}}return 16 * CYCLE_UNIT / 2; } /* EXT.W Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4880_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_u16 dst = (uae_s16)(uae_s8)src; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(dst)) == 0); SET_NFLG (((uae_s16)(dst)) < 0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | ((dst) & 0xffff); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* MVMLE.W #.W,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_4890_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_020_prefetch (2); { uaecptr srca = m68k_areg (regs, dstreg); { uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; while (dmask) { x_put_word (srca, m68k_dreg (regs, movem_index1[dmask])); srca += 2; dmask = movem_next[dmask]; } while (amask) { x_put_word (srca, m68k_areg (regs, movem_index1[amask])); srca += 2; amask = movem_next[amask]; } }}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* MVMLE.W #.W,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_48a0_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_020_prefetch (2); { uaecptr srca; srca = m68k_areg (regs, dstreg) - 0; { uae_u16 amask = mask & 0xff, dmask = (mask >> 8) & 0xff; int type = get_cpu_model () >= 68020; while (amask) { srca -= 2; if (type) m68k_areg (regs, dstreg) = srca; x_put_word (srca, m68k_areg (regs, movem_index2[amask])); amask = movem_next[amask]; } while (dmask) { srca -= 2; x_put_word (srca, m68k_dreg (regs, movem_index2[dmask])); dmask = movem_next[dmask]; } m68k_areg (regs, dstreg) = srca; }}} m68k_incpc (4); return 10 * CYCLE_UNIT / 2; } /* MVMLE.W #.W,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_48a8_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_020_prefetch (2); { uaecptr srca = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; while (dmask) { x_put_word (srca, m68k_dreg (regs, movem_index1[dmask])); srca += 2; dmask = movem_next[dmask]; } while (amask) { x_put_word (srca, m68k_areg (regs, movem_index1[amask])); srca += 2; amask = movem_next[amask]; } }}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } /* MVMLE.W #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_48b0_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_020_prefetch (2); { uaecptr srca; m68k_incpc (4); { srca = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); { uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; while (dmask) { x_put_word (srca, m68k_dreg (regs, movem_index1[dmask])); srca += 2; dmask = movem_next[dmask]; } while (amask) { x_put_word (srca, m68k_areg (regs, movem_index1[amask])); srca += 2; amask = movem_next[amask]; } }}}}return 12 * CYCLE_UNIT / 2; } /* MVMLE.W #.W,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_48b8_20)(uae_u32 opcode) { { uae_u16 mask = get_word_020_prefetch (2); { uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; while (dmask) { x_put_word (srca, m68k_dreg (regs, movem_index1[dmask])); srca += 2; dmask = movem_next[dmask]; } while (amask) { x_put_word (srca, m68k_areg (regs, movem_index1[amask])); srca += 2; amask = movem_next[amask]; } }}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } /* MVMLE.W #.W,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_48b9_20)(uae_u32 opcode) { { uae_u16 mask = get_word_020_prefetch (2); { uaecptr srca = get_long_020_prefetch (4); { uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; while (dmask) { x_put_word (srca, m68k_dreg (regs, movem_index1[dmask])); srca += 2; dmask = movem_next[dmask]; } while (amask) { x_put_word (srca, m68k_areg (regs, movem_index1[amask])); srca += 2; amask = movem_next[amask]; } }}} m68k_incpc (8); return 16 * CYCLE_UNIT / 2; } /* EXT.L Dn */ uae_u32 REGPARAM2 CPUFUNC(op_48c0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_u32 dst = (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); m68k_dreg (regs, srcreg) = (dst); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* MVMLE.L #.W,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_48d0_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_020_prefetch (2); { uaecptr srca = m68k_areg (regs, dstreg); { uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; while (dmask) { x_put_long (srca, m68k_dreg (regs, movem_index1[dmask])); srca += 4; dmask = movem_next[dmask]; } while (amask) { x_put_long (srca, m68k_areg (regs, movem_index1[amask])); srca += 4; amask = movem_next[amask]; } }}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* MVMLE.L #.W,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_48e0_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_020_prefetch (2); { uaecptr srca; srca = m68k_areg (regs, dstreg) - 0; { uae_u16 amask = mask & 0xff, dmask = (mask >> 8) & 0xff; int type = get_cpu_model () >= 68020; while (amask) { srca -= 4; if (type) m68k_areg (regs, dstreg) = srca; x_put_long (srca, m68k_areg (regs, movem_index2[amask])); amask = movem_next[amask]; } while (dmask) { srca -= 4; x_put_long (srca, m68k_dreg (regs, movem_index2[dmask])); dmask = movem_next[dmask]; } m68k_areg (regs, dstreg) = srca; }}} m68k_incpc (4); return 10 * CYCLE_UNIT / 2; } /* MVMLE.L #.W,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_48e8_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_020_prefetch (2); { uaecptr srca = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; while (dmask) { x_put_long (srca, m68k_dreg (regs, movem_index1[dmask])); srca += 4; dmask = movem_next[dmask]; } while (amask) { x_put_long (srca, m68k_areg (regs, movem_index1[amask])); srca += 4; amask = movem_next[amask]; } }}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } /* MVMLE.L #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_48f0_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_020_prefetch (2); { uaecptr srca; m68k_incpc (4); { srca = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); { uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; while (dmask) { x_put_long (srca, m68k_dreg (regs, movem_index1[dmask])); srca += 4; dmask = movem_next[dmask]; } while (amask) { x_put_long (srca, m68k_areg (regs, movem_index1[amask])); srca += 4; amask = movem_next[amask]; } }}}}return 12 * CYCLE_UNIT / 2; } /* MVMLE.L #.W,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_48f8_20)(uae_u32 opcode) { { uae_u16 mask = get_word_020_prefetch (2); { uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; while (dmask) { x_put_long (srca, m68k_dreg (regs, movem_index1[dmask])); srca += 4; dmask = movem_next[dmask]; } while (amask) { x_put_long (srca, m68k_areg (regs, movem_index1[amask])); srca += 4; amask = movem_next[amask]; } }}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } /* MVMLE.L #.W,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_48f9_20)(uae_u32 opcode) { { uae_u16 mask = get_word_020_prefetch (2); { uaecptr srca = get_long_020_prefetch (4); { uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; while (dmask) { x_put_long (srca, m68k_dreg (regs, movem_index1[dmask])); srca += 4; dmask = movem_next[dmask]; } while (amask) { x_put_long (srca, m68k_areg (regs, movem_index1[amask])); srca += 4; amask = movem_next[amask]; } }}} m68k_incpc (8); return 16 * CYCLE_UNIT / 2; } /* EXT.B Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_49c0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_u32 dst = (uae_s32)(uae_s8)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); m68k_dreg (regs, srcreg) = (dst); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } #endif /* TST.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4a00_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* TST.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4a10_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* TST.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4a18_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* TST.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_4a20_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }}} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* TST.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4a28_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 src = x_get_byte (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* TST.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4a30_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s8 src = x_get_byte (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }}}}return 12 * CYCLE_UNIT / 2; } /* TST.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4a38_20)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 src = x_get_byte (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* TST.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4a39_20)(uae_u32 opcode) { {{ uaecptr srca = get_long_020_prefetch (2); { uae_s8 src = x_get_byte (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* TST.B (d16,PC) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4a3a_20)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 src = x_get_byte (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } #endif /* TST.B (d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4a3b_20)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_s8 src = x_get_byte (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }}}}return 12 * CYCLE_UNIT / 2; } #endif /* TST.B #.B */ uae_u32 REGPARAM2 CPUFUNC(op_4a3c_20)(uae_u32 opcode) { {{ uae_s8 src = x_get_ibyte (2); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* TST.W Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4a40_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* TST.W An */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4a48_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_areg (regs, srcreg); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } #endif /* TST.W (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4a50_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* TST.W (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4a58_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* TST.W -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_4a60_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }}} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* TST.W (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4a68_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* TST.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4a70_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s16 src = x_get_word (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }}}}return 12 * CYCLE_UNIT / 2; } /* TST.W (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4a78_20)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* TST.W (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4a79_20)(uae_u32 opcode) { {{ uaecptr srca = get_long_020_prefetch (2); { uae_s16 src = x_get_word (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* TST.W (d16,PC) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4a7a_20)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } #endif /* TST.W (d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4a7b_20)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_s16 src = x_get_word (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }}}}return 12 * CYCLE_UNIT / 2; } #endif /* TST.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_4a7c_20)(uae_u32 opcode) { {{ uae_s16 src = get_word_020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* TST.L Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4a80_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* TST.L An */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4a88_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_areg (regs, srcreg); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } #endif /* TST.L (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4a90_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* TST.L (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4a98_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* TST.L -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_4aa0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) = srca; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* TST.L (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4aa8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 src = x_get_long (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* TST.L (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4ab0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s32 src = x_get_long (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }}}}return 16 * CYCLE_UNIT / 2; } /* TST.L (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4ab8_20)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 src = x_get_long (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* TST.L (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4ab9_20)(uae_u32 opcode) { {{ uaecptr srca = get_long_020_prefetch (2); { uae_s32 src = x_get_long (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* TST.L (d16,PC) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4aba_20)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 src = x_get_long (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } #endif /* TST.L (d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4abb_20)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_s32 src = x_get_long (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }}}}return 16 * CYCLE_UNIT / 2; } #endif /* TST.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_4abc_20)(uae_u32 opcode) { {{ uae_s32 src = get_long_020_prefetch (2); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } /* TAS.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4ac0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); src |= 0x80; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((src) & 0xff); }} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* TAS.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4ad0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); src |= 0x80; x_put_byte (srca, src); }}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* TAS.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4ad8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); src |= 0x80; x_put_byte (srca, src); }}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* TAS.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_4ae0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); src |= 0x80; x_put_byte (srca, src); }}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* TAS.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4ae8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 src = x_get_byte (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); src |= 0x80; x_put_byte (srca, src); }}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* TAS.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4af0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s8 src = x_get_byte (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); src |= 0x80; x_put_byte (srca, src); }}}}return 16 * CYCLE_UNIT / 2; } /* TAS.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4af8_20)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 src = x_get_byte (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); src |= 0x80; x_put_byte (srca, src); }}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* TAS.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4af9_20)(uae_u32 opcode) { {{ uaecptr srca = get_long_020_prefetch (2); { uae_s8 src = x_get_byte (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); src |= 0x80; x_put_byte (srca, src); }}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* MULL.L #.W,Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4c00_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_020_prefetch (2); { uae_s32 dst = m68k_dreg (regs, dstreg); m68k_incpc (4); m68k_mull(opcode, dst, extra); }}}return 8 * CYCLE_UNIT / 2; } #endif /* MULL.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4c10_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); m68k_incpc (4); m68k_mull(opcode, dst, extra); }}}}return 16 * CYCLE_UNIT / 2; } #endif /* MULL.L #.W,(An)+ */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4c18_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) += 4; m68k_incpc (4); m68k_mull(opcode, dst, extra); }}}}return 16 * CYCLE_UNIT / 2; } #endif /* MULL.L #.W,-(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4c20_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) = dsta; m68k_incpc (4); m68k_mull(opcode, dst, extra); }}}}return 18 * CYCLE_UNIT / 2; } #endif /* MULL.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4c28_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_s32 dst = x_get_long (dsta); m68k_incpc (6); m68k_mull(opcode, dst, extra); }}}}return 20 * CYCLE_UNIT / 2; } #endif /* MULL.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4c30_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); { uae_s32 dst = x_get_long (dsta); m68k_mull(opcode, dst, extra); }}}}}return 20 * CYCLE_UNIT / 2; } #endif /* MULL.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4c38_20)(uae_u32 opcode) { {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_s32 dst = x_get_long (dsta); m68k_incpc (6); m68k_mull(opcode, dst, extra); }}}}return 20 * CYCLE_UNIT / 2; } #endif /* MULL.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4c39_20)(uae_u32 opcode) { {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta = get_long_020_prefetch (4); { uae_s32 dst = x_get_long (dsta); m68k_incpc (8); m68k_mull(opcode, dst, extra); }}}}return 24 * CYCLE_UNIT / 2; } #endif /* MULL.L #.W,(d16,PC) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4c3a_20)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_s32 dst = x_get_long (dsta); m68k_incpc (6); m68k_mull(opcode, dst, extra); }}}}return 20 * CYCLE_UNIT / 2; } #endif /* MULL.L #.W,(d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4c3b_20)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr tmppc; uaecptr dsta; m68k_incpc (4); { tmppc = m68k_getpc (); dsta = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_s32 dst = x_get_long (dsta); m68k_mull(opcode, dst, extra); }}}}}return 20 * CYCLE_UNIT / 2; } #endif /* MULL.L #.W,#.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4c3c_20)(uae_u32 opcode) { {{ uae_s16 extra = get_word_020_prefetch (2); { uae_s32 dst = get_long_020_prefetch (4); m68k_incpc (8); m68k_mull(opcode, dst, extra); }}}return 16 * CYCLE_UNIT / 2; } #endif /* DIVL.L #.W,Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4c40_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_020_prefetch (2); { uae_s32 dst = m68k_dreg (regs, dstreg); m68k_incpc (4); m68k_divl(opcode, dst, extra); }}}return 8 * CYCLE_UNIT / 2; } #endif /* DIVL.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4c50_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); m68k_incpc (4); m68k_divl(opcode, dst, extra); }}}}return 16 * CYCLE_UNIT / 2; } #endif /* DIVL.L #.W,(An)+ */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4c58_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) += 4; m68k_incpc (4); m68k_divl(opcode, dst, extra); }}}}return 16 * CYCLE_UNIT / 2; } #endif /* DIVL.L #.W,-(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4c60_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) = dsta; m68k_incpc (4); m68k_divl(opcode, dst, extra); }}}}return 18 * CYCLE_UNIT / 2; } #endif /* DIVL.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4c68_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_s32 dst = x_get_long (dsta); m68k_incpc (6); m68k_divl(opcode, dst, extra); }}}}return 20 * CYCLE_UNIT / 2; } #endif /* DIVL.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4c70_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); { uae_s32 dst = x_get_long (dsta); m68k_divl(opcode, dst, extra); }}}}}return 20 * CYCLE_UNIT / 2; } #endif /* DIVL.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4c78_20)(uae_u32 opcode) { {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_s32 dst = x_get_long (dsta); m68k_incpc (6); m68k_divl(opcode, dst, extra); }}}}return 20 * CYCLE_UNIT / 2; } #endif /* DIVL.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4c79_20)(uae_u32 opcode) { {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta = get_long_020_prefetch (4); { uae_s32 dst = x_get_long (dsta); m68k_incpc (8); m68k_divl(opcode, dst, extra); }}}}return 24 * CYCLE_UNIT / 2; } #endif /* DIVL.L #.W,(d16,PC) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4c7a_20)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_s32 dst = x_get_long (dsta); m68k_incpc (6); m68k_divl(opcode, dst, extra); }}}}return 20 * CYCLE_UNIT / 2; } #endif /* DIVL.L #.W,(d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4c7b_20)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr tmppc; uaecptr dsta; m68k_incpc (4); { tmppc = m68k_getpc (); dsta = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_s32 dst = x_get_long (dsta); m68k_divl(opcode, dst, extra); }}}}}return 20 * CYCLE_UNIT / 2; } #endif /* DIVL.L #.W,#.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4c7c_20)(uae_u32 opcode) { {{ uae_s16 extra = get_word_020_prefetch (2); { uae_s32 dst = get_long_020_prefetch (4); m68k_incpc (8); m68k_divl(opcode, dst, extra); }}}return 16 * CYCLE_UNIT / 2; } #endif /* MVMEL.W #.W,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_4c90_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_020_prefetch (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca = m68k_areg (regs, dstreg); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = (uae_s32)(uae_s16)x_get_word (srca); srca += 2; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = (uae_s32)(uae_s16)x_get_word (srca); srca += 2; amask = movem_next[amask]; } }}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* MVMEL.W #.W,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4c98_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_020_prefetch (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca = m68k_areg (regs, dstreg); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = (uae_s32)(uae_s16)x_get_word (srca); srca += 2; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = (uae_s32)(uae_s16)x_get_word (srca); srca += 2; amask = movem_next[amask]; } m68k_areg (regs, dstreg) = srca; }}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* MVMEL.W #.W,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4ca8_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_020_prefetch (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (4); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = (uae_s32)(uae_s16)x_get_word (srca); srca += 2; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = (uae_s32)(uae_s16)x_get_word (srca); srca += 2; amask = movem_next[amask]; } }}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } /* MVMEL.W #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4cb0_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_020_prefetch (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca; m68k_incpc (4); { srca = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = (uae_s32)(uae_s16)x_get_word (srca); srca += 2; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = (uae_s32)(uae_s16)x_get_word (srca); srca += 2; amask = movem_next[amask]; } }}}}return 12 * CYCLE_UNIT / 2; } /* MVMEL.W #.W,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4cb8_20)(uae_u32 opcode) { { uae_u16 mask = get_word_020_prefetch (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (4); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = (uae_s32)(uae_s16)x_get_word (srca); srca += 2; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = (uae_s32)(uae_s16)x_get_word (srca); srca += 2; amask = movem_next[amask]; } }}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } /* MVMEL.W #.W,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4cb9_20)(uae_u32 opcode) { { uae_u16 mask = get_word_020_prefetch (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca = get_long_020_prefetch (4); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = (uae_s32)(uae_s16)x_get_word (srca); srca += 2; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = (uae_s32)(uae_s16)x_get_word (srca); srca += 2; amask = movem_next[amask]; } }}} m68k_incpc (8); return 16 * CYCLE_UNIT / 2; } /* MVMEL.W #.W,(d16,PC) */ uae_u32 REGPARAM2 CPUFUNC(op_4cba_20)(uae_u32 opcode) { uae_u32 dstreg = 2; { uae_u16 mask = get_word_020_prefetch (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca = m68k_getpc () + 4; srca += (uae_s32)(uae_s16)get_word_020_prefetch (4); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = (uae_s32)(uae_s16)x_get_word (srca); srca += 2; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = (uae_s32)(uae_s16)x_get_word (srca); srca += 2; amask = movem_next[amask]; } }}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } /* MVMEL.W #.W,(d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4cbb_20)(uae_u32 opcode) { uae_u32 dstreg = 3; { uae_u16 mask = get_word_020_prefetch (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr tmppc; uaecptr srca; m68k_incpc (4); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword_020 ()); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = (uae_s32)(uae_s16)x_get_word (srca); srca += 2; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = (uae_s32)(uae_s16)x_get_word (srca); srca += 2; amask = movem_next[amask]; } }}}}return 12 * CYCLE_UNIT / 2; } /* MVMEL.L #.W,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_4cd0_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_020_prefetch (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca = m68k_areg (regs, dstreg); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = x_get_long (srca); srca += 4; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = x_get_long (srca); srca += 4; amask = movem_next[amask]; } }}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* MVMEL.L #.W,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4cd8_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_020_prefetch (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca = m68k_areg (regs, dstreg); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = x_get_long (srca); srca += 4; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = x_get_long (srca); srca += 4; amask = movem_next[amask]; } m68k_areg (regs, dstreg) = srca; }}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* MVMEL.L #.W,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4ce8_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_020_prefetch (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (4); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = x_get_long (srca); srca += 4; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = x_get_long (srca); srca += 4; amask = movem_next[amask]; } }}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } /* MVMEL.L #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4cf0_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_020_prefetch (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca; m68k_incpc (4); { srca = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = x_get_long (srca); srca += 4; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = x_get_long (srca); srca += 4; amask = movem_next[amask]; } }}}}return 12 * CYCLE_UNIT / 2; } /* MVMEL.L #.W,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4cf8_20)(uae_u32 opcode) { { uae_u16 mask = get_word_020_prefetch (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (4); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = x_get_long (srca); srca += 4; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = x_get_long (srca); srca += 4; amask = movem_next[amask]; } }}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } /* MVMEL.L #.W,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4cf9_20)(uae_u32 opcode) { { uae_u16 mask = get_word_020_prefetch (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca = get_long_020_prefetch (4); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = x_get_long (srca); srca += 4; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = x_get_long (srca); srca += 4; amask = movem_next[amask]; } }}} m68k_incpc (8); return 16 * CYCLE_UNIT / 2; } /* MVMEL.L #.W,(d16,PC) */ uae_u32 REGPARAM2 CPUFUNC(op_4cfa_20)(uae_u32 opcode) { uae_u32 dstreg = 2; { uae_u16 mask = get_word_020_prefetch (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca = m68k_getpc () + 4; srca += (uae_s32)(uae_s16)get_word_020_prefetch (4); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = x_get_long (srca); srca += 4; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = x_get_long (srca); srca += 4; amask = movem_next[amask]; } }}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } /* MVMEL.L #.W,(d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4cfb_20)(uae_u32 opcode) { uae_u32 dstreg = 3; { uae_u16 mask = get_word_020_prefetch (2); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr tmppc; uaecptr srca; m68k_incpc (4); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword_020 ()); { while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = x_get_long (srca); srca += 4; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = x_get_long (srca); srca += 4; amask = movem_next[amask]; } }}}}return 12 * CYCLE_UNIT / 2; } /* TRAPQ.L # */ uae_u32 REGPARAM2 CPUFUNC(op_4e40_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 15); {{ uae_u32 src = srcreg; m68k_incpc (2); Exception (src + 32); }}return 4 * CYCLE_UNIT / 2; } /* LINK.W An,#.W */ uae_u32 REGPARAM2 CPUFUNC(op_4e50_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr olda; olda = m68k_areg (regs, 7) - 4; m68k_areg (regs, 7) = olda; { uae_s32 src = m68k_areg (regs, srcreg); { uae_s16 offs = get_word_020_prefetch (2); x_put_long (olda, src); m68k_areg (regs, srcreg) = (m68k_areg (regs, 7)); m68k_areg (regs, 7) += offs; }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* UNLK.L An */ uae_u32 REGPARAM2 CPUFUNC(op_4e58_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_areg (regs, srcreg); m68k_areg (regs, 7) = src; { uaecptr olda = m68k_areg (regs, 7); { uae_s32 old = x_get_long (olda); m68k_areg (regs, 7) += 4; m68k_areg (regs, srcreg) = (old); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* MVR2USP.L An */ uae_u32 REGPARAM2 CPUFUNC(op_4e60_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel6193; } {{ uae_s32 src = m68k_areg (regs, srcreg); regs.usp = src; }}} m68k_incpc (2); endlabel6193: ; return 4 * CYCLE_UNIT / 2; } /* MVUSP2R.L An */ uae_u32 REGPARAM2 CPUFUNC(op_4e68_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel6194; } {{ m68k_areg (regs, srcreg) = (regs.usp); }}} m68k_incpc (2); endlabel6194: ; return 4 * CYCLE_UNIT / 2; } /* RESET.L */ uae_u32 REGPARAM2 CPUFUNC(op_4e70_20)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel6195; } { cpureset (); m68k_incpc (2); }}endlabel6195: ; return 4 * CYCLE_UNIT / 2; } /* NOP.L */ uae_u32 REGPARAM2 CPUFUNC(op_4e71_20)(uae_u32 opcode) { {} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* STOP.L #.W */ uae_u32 REGPARAM2 CPUFUNC(op_4e72_20)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel6197; } {{ uae_s16 src = get_word_020_prefetch (2); regs.sr = src; MakeFromSR (); m68k_setstopped (); m68k_incpc (4); }}}endlabel6197: ; return 8 * CYCLE_UNIT / 2; } /* RTE.L */ uae_u32 REGPARAM2 CPUFUNC(op_4e73_20)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel6198; } { uae_u16 newsr; uae_u32 newpc; for (;;) { uaecptr a = m68k_areg (regs, 7); uae_s16 sr = x_get_word (a); uae_s32 pc = x_get_long (a + 2); uae_s16 format = x_get_word (a + 2 + 4); int frame = format >> 12; int offset = 8; newsr = sr; newpc = pc; if (frame == 0x0) { m68k_areg (regs, 7) += offset; break; } else if (frame == 0x1) { m68k_areg (regs, 7) += offset; } else if (frame == 0x2) { m68k_areg (regs, 7) += offset + 4; break; } else if (frame == 0x4) { m68k_areg (regs, 7) += offset + 8; break; } else if (frame == 0x8) { m68k_areg (regs, 7) += offset + 50; break; } else if (frame == 0x9) { m68k_areg (regs, 7) += offset + 12; break; } else if (frame == 0xa) { m68k_areg (regs, 7) += offset + 24; break; } else if (frame == 0xb) { m68k_areg (regs, 7) += offset + 84; break; } else { m68k_areg (regs, 7) += offset; Exception (14); goto endlabel6198; } regs.sr = newsr; MakeFromSR (); } regs.sr = newsr; MakeFromSR (); if (newpc & 1) { exception3i (0x4E73, newpc); goto endlabel6198; } m68k_setpc (newpc); ipl_fetch (); }}endlabel6198: ; return 4 * CYCLE_UNIT / 2; } /* RTD.L #.W */ uae_u32 REGPARAM2 CPUFUNC(op_4e74_20)(uae_u32 opcode) { {{ uaecptr pca = m68k_areg (regs, 7); { uae_s32 pc = x_get_long (pca); m68k_areg (regs, 7) += 4; { uae_s16 offs = get_word_020_prefetch (2); m68k_areg (regs, 7) += offs; if (pc & 1) { exception3i (0x4E74, pc); goto endlabel6199; } if (pc & 1) { exception3i (0x4E74, pc); goto endlabel6199; } m68k_setpc (pc); }}}}endlabel6199: ; return 16 * CYCLE_UNIT / 2; } /* RTS.L */ uae_u32 REGPARAM2 CPUFUNC(op_4e75_20)(uae_u32 opcode) { { uaecptr pc = m68k_getpc (); m68k_do_rts (); if (m68k_getpc () & 1) { uaecptr faultpc = m68k_getpc (); m68k_setpc (pc); exception3i (0x4E75, faultpc); } }return 4 * CYCLE_UNIT / 2; } /* TRAPV.L */ uae_u32 REGPARAM2 CPUFUNC(op_4e76_20)(uae_u32 opcode) { { m68k_incpc (2); if (GET_VFLG ()) { Exception (7); goto endlabel6201; } }endlabel6201: ; return 4 * CYCLE_UNIT / 2; } /* RTR.L */ uae_u32 REGPARAM2 CPUFUNC(op_4e77_20)(uae_u32 opcode) { { uaecptr oldpc = m68k_getpc (); MakeSR (); { uaecptr sra = m68k_areg (regs, 7); { uae_s16 sr = x_get_word (sra); m68k_areg (regs, 7) += 2; { uaecptr pca = m68k_areg (regs, 7); { uae_s32 pc = x_get_long (pca); m68k_areg (regs, 7) += 4; regs.sr &= 0xFF00; sr &= 0xFF; regs.sr |= sr; m68k_setpc (pc); MakeFromSR (); if (m68k_getpc () & 1) { uaecptr faultpc = m68k_getpc (); m68k_setpc (oldpc); exception3i (0x4E77, faultpc); } }}}}}return 16 * CYCLE_UNIT / 2; } /* MOVEC2.L #.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4e7a_20)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel6203; } {{ uae_s16 src = get_word_020_prefetch (2); { int regno = (src >> 12) & 15; uae_u32 *regp = regs.regs + regno; if (! m68k_movec2(src & 0xFFF, regp)) goto endlabel6203; }}}} m68k_incpc (4); endlabel6203: ; return 8 * CYCLE_UNIT / 2; } #endif /* MOVE2C.L #.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_4e7b_20)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel6204; } {{ uae_s16 src = get_word_020_prefetch (2); { int regno = (src >> 12) & 15; uae_u32 *regp = regs.regs + regno; if (! m68k_move2c(src & 0xFFF, regp)) goto endlabel6204; }}}} m68k_incpc (4); endlabel6204: ; return 8 * CYCLE_UNIT / 2; } #endif /* JSR.L (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4e90_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uaecptr oldpc = m68k_getpc () + 2; if (srca & 1) { exception3i (opcode, srca); goto endlabel6205; } m68k_setpc (srca); m68k_areg (regs, 7) -= 4; x_put_long (m68k_areg (regs, 7), oldpc); }}}endlabel6205: ; return 4 * CYCLE_UNIT / 2; } /* JSR.L (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4ea8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uaecptr oldpc = m68k_getpc () + 4; if (srca & 1) { exception3i (opcode, srca); goto endlabel6206; } m68k_setpc (srca); m68k_areg (regs, 7) -= 4; x_put_long (m68k_areg (regs, 7), oldpc); }}}endlabel6206: ; return 8 * CYCLE_UNIT / 2; } /* JSR.L (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4eb0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uaecptr oldpc = m68k_getpc () + 0; if (srca & 1) { exception3i (opcode, srca); goto endlabel6207; } m68k_setpc (srca); m68k_areg (regs, 7) -= 4; x_put_long (m68k_areg (regs, 7), oldpc); }}}}endlabel6207: ; return 8 * CYCLE_UNIT / 2; } /* JSR.L (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4eb8_20)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uaecptr oldpc = m68k_getpc () + 4; if (srca & 1) { exception3i (opcode, srca); goto endlabel6208; } m68k_setpc (srca); m68k_areg (regs, 7) -= 4; x_put_long (m68k_areg (regs, 7), oldpc); }}}endlabel6208: ; return 8 * CYCLE_UNIT / 2; } /* JSR.L (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4eb9_20)(uae_u32 opcode) { {{ uaecptr srca = get_long_020_prefetch (2); { uaecptr oldpc = m68k_getpc () + 6; if (srca & 1) { exception3i (opcode, srca); goto endlabel6209; } m68k_setpc (srca); m68k_areg (regs, 7) -= 4; x_put_long (m68k_areg (regs, 7), oldpc); }}}endlabel6209: ; return 12 * CYCLE_UNIT / 2; } /* JSR.L (d16,PC) */ uae_u32 REGPARAM2 CPUFUNC(op_4eba_20)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_020_prefetch (2); { uaecptr oldpc = m68k_getpc () + 4; if (srca & 1) { exception3i (opcode, srca); goto endlabel6210; } m68k_setpc (srca); m68k_areg (regs, 7) -= 4; x_put_long (m68k_areg (regs, 7), oldpc); }}}endlabel6210: ; return 8 * CYCLE_UNIT / 2; } /* JSR.L (d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4ebb_20)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword_020 ()); { uaecptr oldpc = m68k_getpc () + 0; if (srca & 1) { exception3i (opcode, srca); goto endlabel6211; } m68k_setpc (srca); m68k_areg (regs, 7) -= 4; x_put_long (m68k_areg (regs, 7), oldpc); }}}}endlabel6211: ; return 8 * CYCLE_UNIT / 2; } /* JMP.L (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4ed0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3i (opcode, srca); goto endlabel6212; } m68k_setpc (srca); }}endlabel6212: ; return 4 * CYCLE_UNIT / 2; } /* JMP.L (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4ee8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); if (srca & 1) { exception3i (opcode, srca); goto endlabel6213; } m68k_setpc (srca); }}endlabel6213: ; return 8 * CYCLE_UNIT / 2; } /* JMP.L (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4ef0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); if (srca & 1) { exception3i (opcode, srca); goto endlabel6214; } m68k_setpc (srca); }}}endlabel6214: ; return 8 * CYCLE_UNIT / 2; } /* JMP.L (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4ef8_20)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); if (srca & 1) { exception3i (opcode, srca); goto endlabel6215; } m68k_setpc (srca); }}endlabel6215: ; return 8 * CYCLE_UNIT / 2; } /* JMP.L (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4ef9_20)(uae_u32 opcode) { {{ uaecptr srca = get_long_020_prefetch (2); if (srca & 1) { exception3i (opcode, srca); goto endlabel6216; } m68k_setpc (srca); }}endlabel6216: ; return 12 * CYCLE_UNIT / 2; } /* JMP.L (d16,PC) */ uae_u32 REGPARAM2 CPUFUNC(op_4efa_20)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_020_prefetch (2); if (srca & 1) { exception3i (opcode, srca); goto endlabel6217; } m68k_setpc (srca); }}endlabel6217: ; return 8 * CYCLE_UNIT / 2; } /* JMP.L (d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4efb_20)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword_020 ()); if (srca & 1) { exception3i (opcode, srca); goto endlabel6218; } m68k_setpc (srca); }}}endlabel6218: ; return 8 * CYCLE_UNIT / 2; } /* ADDQ.B #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_5000_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ADDQ.B #,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_5010_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* ADDQ.B #,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_5018_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* ADDQ.B #,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_5020_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* ADDQ.B #,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_5028_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* ADDQ.B #,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_5030_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}}}return 16 * CYCLE_UNIT / 2; } /* ADDQ.B #,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_5038_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* ADDQ.B #,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_5039_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = get_long_020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* ADDQ.W #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_5040_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ADDAQ.W #,An */ uae_u32 REGPARAM2 CPUFUNC(op_5048_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ADDQ.W #,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_5050_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* ADDQ.W #,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_5058_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) += 2; {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* ADDQ.W #,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_5060_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* ADDQ.W #,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_5068_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* ADDQ.W #,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_5070_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}}}return 16 * CYCLE_UNIT / 2; } #endif #ifdef PART_5 /* ADDQ.W #,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_5078_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* ADDQ.W #,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_5079_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = get_long_020_prefetch (2); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* ADDQ.L #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_5080_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ADDAQ.L #,An */ uae_u32 REGPARAM2 CPUFUNC(op_5088_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ADDQ.L #,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_5090_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} m68k_incpc (2); return 20 * CYCLE_UNIT / 2; } /* ADDQ.L #,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_5098_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) += 4; {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} m68k_incpc (2); return 20 * CYCLE_UNIT / 2; } /* ADDQ.L #,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_50a0_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} m68k_incpc (2); return 22 * CYCLE_UNIT / 2; } /* ADDQ.L #,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_50a8_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} m68k_incpc (4); return 24 * CYCLE_UNIT / 2; } /* ADDQ.L #,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_50b0_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}}}return 24 * CYCLE_UNIT / 2; } /* ADDQ.L #,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_50b8_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} m68k_incpc (4); return 24 * CYCLE_UNIT / 2; } /* ADDQ.L #,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_50b9_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = get_long_020_prefetch (2); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} m68k_incpc (6); return 28 * CYCLE_UNIT / 2; } /* Scc.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_50c0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (0) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* DBcc.W Dn,#.W */ uae_u32 REGPARAM2 CPUFUNC(op_50c8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_word_020_prefetch (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (0)) { m68k_incpc ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel6246; } return 12 * CYCLE_UNIT / 2; } } else { } m68k_setpc (oldpc + 4); }}}endlabel6246: ; return 12 * CYCLE_UNIT / 2; } /* Scc.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_50d0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (0) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* Scc.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_50d8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (0) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* Scc.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_50e0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (0) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* Scc.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_50e8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); {{ int val = cctrue (0) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_50f0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); {{ int val = cctrue (0) ? 0xff : 0; x_put_byte (srca, val); }}}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_50f8_20)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); {{ int val = cctrue (0) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_50f9_20)(uae_u32 opcode) { {{ uaecptr srca = get_long_020_prefetch (2); {{ int val = cctrue (0) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_50fa_20)(uae_u32 opcode) { {{ uae_s16 dummy = get_word_020_prefetch (2); if (cctrue (0)) { Exception (7); goto endlabel6254; } }} m68k_incpc (4); endlabel6254: ; return 8 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_50fb_20)(uae_u32 opcode) { {{ uae_s32 dummy = get_long_020_prefetch (2); if (cctrue (0)) { Exception (7); goto endlabel6255; } }} m68k_incpc (6); endlabel6255: ; return 12 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_50fc_20)(uae_u32 opcode) { { if (cctrue (0)) { Exception (7); goto endlabel6256; } } m68k_incpc (2); endlabel6256: ; return 4 * CYCLE_UNIT / 2; } #endif /* SUBQ.B #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_5100_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* SUBQ.B #,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_5110_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* SUBQ.B #,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_5118_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* SUBQ.B #,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_5120_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* SUBQ.B #,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_5128_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* SUBQ.B #,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_5130_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}}}return 16 * CYCLE_UNIT / 2; } /* SUBQ.B #,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_5138_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* SUBQ.B #,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_5139_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = get_long_020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* SUBQ.W #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_5140_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* SUBAQ.W #,An */ uae_u32 REGPARAM2 CPUFUNC(op_5148_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* SUBQ.W #,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_5150_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* SUBQ.W #,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_5158_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) += 2; {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* SUBQ.W #,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_5160_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* SUBQ.W #,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_5168_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* SUBQ.W #,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_5170_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}}}return 16 * CYCLE_UNIT / 2; } /* SUBQ.W #,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_5178_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* SUBQ.W #,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_5179_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = get_long_020_prefetch (2); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* SUBQ.L #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_5180_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* SUBAQ.L #,An */ uae_u32 REGPARAM2 CPUFUNC(op_5188_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* SUBQ.L #,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_5190_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} m68k_incpc (2); return 20 * CYCLE_UNIT / 2; } /* SUBQ.L #,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_5198_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) += 4; {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} m68k_incpc (2); return 20 * CYCLE_UNIT / 2; } /* SUBQ.L #,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_51a0_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} m68k_incpc (2); return 22 * CYCLE_UNIT / 2; } /* SUBQ.L #,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_51a8_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} m68k_incpc (4); return 24 * CYCLE_UNIT / 2; } /* SUBQ.L #,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_51b0_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}}}return 24 * CYCLE_UNIT / 2; } /* SUBQ.L #,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_51b8_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} m68k_incpc (4); return 24 * CYCLE_UNIT / 2; } /* SUBQ.L #,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_51b9_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = get_long_020_prefetch (2); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} m68k_incpc (6); return 28 * CYCLE_UNIT / 2; } /* Scc.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_51c0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (1) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* DBcc.W Dn,#.W */ uae_u32 REGPARAM2 CPUFUNC(op_51c8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_word_020_prefetch (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (1)) { m68k_incpc ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel6284; } return 12 * CYCLE_UNIT / 2; } } else { } m68k_setpc (oldpc + 4); }}}endlabel6284: ; return 12 * CYCLE_UNIT / 2; } /* Scc.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_51d0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (1) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* Scc.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_51d8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (1) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* Scc.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_51e0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (1) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* Scc.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_51e8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); {{ int val = cctrue (1) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_51f0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); {{ int val = cctrue (1) ? 0xff : 0; x_put_byte (srca, val); }}}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_51f8_20)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); {{ int val = cctrue (1) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_51f9_20)(uae_u32 opcode) { {{ uaecptr srca = get_long_020_prefetch (2); {{ int val = cctrue (1) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_51fa_20)(uae_u32 opcode) { {{ uae_s16 dummy = get_word_020_prefetch (2); if (cctrue (1)) { Exception (7); goto endlabel6292; } }} m68k_incpc (4); endlabel6292: ; return 8 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_51fb_20)(uae_u32 opcode) { {{ uae_s32 dummy = get_long_020_prefetch (2); if (cctrue (1)) { Exception (7); goto endlabel6293; } }} m68k_incpc (6); endlabel6293: ; return 12 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_51fc_20)(uae_u32 opcode) { { if (cctrue (1)) { Exception (7); goto endlabel6294; } } m68k_incpc (2); endlabel6294: ; return 4 * CYCLE_UNIT / 2; } #endif /* Scc.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_52c0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (2) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* DBcc.W Dn,#.W */ uae_u32 REGPARAM2 CPUFUNC(op_52c8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_word_020_prefetch (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (2)) { m68k_incpc ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel6296; } return 12 * CYCLE_UNIT / 2; } } else { } m68k_setpc (oldpc + 4); }}}endlabel6296: ; return 12 * CYCLE_UNIT / 2; } /* Scc.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_52d0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (2) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* Scc.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_52d8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (2) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* Scc.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_52e0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (2) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* Scc.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_52e8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); {{ int val = cctrue (2) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_52f0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); {{ int val = cctrue (2) ? 0xff : 0; x_put_byte (srca, val); }}}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_52f8_20)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); {{ int val = cctrue (2) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_52f9_20)(uae_u32 opcode) { {{ uaecptr srca = get_long_020_prefetch (2); {{ int val = cctrue (2) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_52fa_20)(uae_u32 opcode) { {{ uae_s16 dummy = get_word_020_prefetch (2); if (cctrue (2)) { Exception (7); goto endlabel6304; } }} m68k_incpc (4); endlabel6304: ; return 8 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_52fb_20)(uae_u32 opcode) { {{ uae_s32 dummy = get_long_020_prefetch (2); if (cctrue (2)) { Exception (7); goto endlabel6305; } }} m68k_incpc (6); endlabel6305: ; return 12 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_52fc_20)(uae_u32 opcode) { { if (cctrue (2)) { Exception (7); goto endlabel6306; } } m68k_incpc (2); endlabel6306: ; return 4 * CYCLE_UNIT / 2; } #endif /* Scc.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_53c0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (3) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* DBcc.W Dn,#.W */ uae_u32 REGPARAM2 CPUFUNC(op_53c8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_word_020_prefetch (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (3)) { m68k_incpc ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel6308; } return 12 * CYCLE_UNIT / 2; } } else { } m68k_setpc (oldpc + 4); }}}endlabel6308: ; return 12 * CYCLE_UNIT / 2; } /* Scc.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_53d0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (3) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* Scc.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_53d8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (3) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* Scc.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_53e0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (3) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* Scc.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_53e8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); {{ int val = cctrue (3) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_53f0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); {{ int val = cctrue (3) ? 0xff : 0; x_put_byte (srca, val); }}}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_53f8_20)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); {{ int val = cctrue (3) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_53f9_20)(uae_u32 opcode) { {{ uaecptr srca = get_long_020_prefetch (2); {{ int val = cctrue (3) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_53fa_20)(uae_u32 opcode) { {{ uae_s16 dummy = get_word_020_prefetch (2); if (cctrue (3)) { Exception (7); goto endlabel6316; } }} m68k_incpc (4); endlabel6316: ; return 8 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_53fb_20)(uae_u32 opcode) { {{ uae_s32 dummy = get_long_020_prefetch (2); if (cctrue (3)) { Exception (7); goto endlabel6317; } }} m68k_incpc (6); endlabel6317: ; return 12 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_53fc_20)(uae_u32 opcode) { { if (cctrue (3)) { Exception (7); goto endlabel6318; } } m68k_incpc (2); endlabel6318: ; return 4 * CYCLE_UNIT / 2; } #endif /* Scc.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_54c0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (4) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* DBcc.W Dn,#.W */ uae_u32 REGPARAM2 CPUFUNC(op_54c8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_word_020_prefetch (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (4)) { m68k_incpc ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel6320; } return 12 * CYCLE_UNIT / 2; } } else { } m68k_setpc (oldpc + 4); }}}endlabel6320: ; return 12 * CYCLE_UNIT / 2; } /* Scc.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_54d0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (4) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* Scc.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_54d8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (4) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* Scc.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_54e0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (4) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* Scc.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_54e8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); {{ int val = cctrue (4) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_54f0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); {{ int val = cctrue (4) ? 0xff : 0; x_put_byte (srca, val); }}}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_54f8_20)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); {{ int val = cctrue (4) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_54f9_20)(uae_u32 opcode) { {{ uaecptr srca = get_long_020_prefetch (2); {{ int val = cctrue (4) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_54fa_20)(uae_u32 opcode) { {{ uae_s16 dummy = get_word_020_prefetch (2); if (cctrue (4)) { Exception (7); goto endlabel6328; } }} m68k_incpc (4); endlabel6328: ; return 8 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_54fb_20)(uae_u32 opcode) { {{ uae_s32 dummy = get_long_020_prefetch (2); if (cctrue (4)) { Exception (7); goto endlabel6329; } }} m68k_incpc (6); endlabel6329: ; return 12 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_54fc_20)(uae_u32 opcode) { { if (cctrue (4)) { Exception (7); goto endlabel6330; } } m68k_incpc (2); endlabel6330: ; return 4 * CYCLE_UNIT / 2; } #endif /* Scc.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_55c0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (5) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* DBcc.W Dn,#.W */ uae_u32 REGPARAM2 CPUFUNC(op_55c8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_word_020_prefetch (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (5)) { m68k_incpc ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel6332; } return 12 * CYCLE_UNIT / 2; } } else { } m68k_setpc (oldpc + 4); }}}endlabel6332: ; return 12 * CYCLE_UNIT / 2; } /* Scc.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_55d0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (5) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* Scc.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_55d8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (5) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* Scc.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_55e0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (5) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* Scc.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_55e8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); {{ int val = cctrue (5) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_55f0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); {{ int val = cctrue (5) ? 0xff : 0; x_put_byte (srca, val); }}}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_55f8_20)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); {{ int val = cctrue (5) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_55f9_20)(uae_u32 opcode) { {{ uaecptr srca = get_long_020_prefetch (2); {{ int val = cctrue (5) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_55fa_20)(uae_u32 opcode) { {{ uae_s16 dummy = get_word_020_prefetch (2); if (cctrue (5)) { Exception (7); goto endlabel6340; } }} m68k_incpc (4); endlabel6340: ; return 8 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_55fb_20)(uae_u32 opcode) { {{ uae_s32 dummy = get_long_020_prefetch (2); if (cctrue (5)) { Exception (7); goto endlabel6341; } }} m68k_incpc (6); endlabel6341: ; return 12 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_55fc_20)(uae_u32 opcode) { { if (cctrue (5)) { Exception (7); goto endlabel6342; } } m68k_incpc (2); endlabel6342: ; return 4 * CYCLE_UNIT / 2; } #endif /* Scc.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_56c0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (6) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* DBcc.W Dn,#.W */ uae_u32 REGPARAM2 CPUFUNC(op_56c8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_word_020_prefetch (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (6)) { m68k_incpc ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel6344; } return 12 * CYCLE_UNIT / 2; } } else { } m68k_setpc (oldpc + 4); }}}endlabel6344: ; return 12 * CYCLE_UNIT / 2; } /* Scc.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_56d0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (6) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* Scc.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_56d8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (6) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* Scc.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_56e0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (6) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* Scc.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_56e8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); {{ int val = cctrue (6) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_56f0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); {{ int val = cctrue (6) ? 0xff : 0; x_put_byte (srca, val); }}}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_56f8_20)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); {{ int val = cctrue (6) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_56f9_20)(uae_u32 opcode) { {{ uaecptr srca = get_long_020_prefetch (2); {{ int val = cctrue (6) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_56fa_20)(uae_u32 opcode) { {{ uae_s16 dummy = get_word_020_prefetch (2); if (cctrue (6)) { Exception (7); goto endlabel6352; } }} m68k_incpc (4); endlabel6352: ; return 8 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_56fb_20)(uae_u32 opcode) { {{ uae_s32 dummy = get_long_020_prefetch (2); if (cctrue (6)) { Exception (7); goto endlabel6353; } }} m68k_incpc (6); endlabel6353: ; return 12 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_56fc_20)(uae_u32 opcode) { { if (cctrue (6)) { Exception (7); goto endlabel6354; } } m68k_incpc (2); endlabel6354: ; return 4 * CYCLE_UNIT / 2; } #endif /* Scc.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_57c0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (7) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* DBcc.W Dn,#.W */ uae_u32 REGPARAM2 CPUFUNC(op_57c8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_word_020_prefetch (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (7)) { m68k_incpc ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel6356; } return 12 * CYCLE_UNIT / 2; } } else { } m68k_setpc (oldpc + 4); }}}endlabel6356: ; return 12 * CYCLE_UNIT / 2; } /* Scc.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_57d0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (7) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* Scc.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_57d8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (7) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* Scc.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_57e0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (7) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* Scc.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_57e8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); {{ int val = cctrue (7) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_57f0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); {{ int val = cctrue (7) ? 0xff : 0; x_put_byte (srca, val); }}}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_57f8_20)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); {{ int val = cctrue (7) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_57f9_20)(uae_u32 opcode) { {{ uaecptr srca = get_long_020_prefetch (2); {{ int val = cctrue (7) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_57fa_20)(uae_u32 opcode) { {{ uae_s16 dummy = get_word_020_prefetch (2); if (cctrue (7)) { Exception (7); goto endlabel6364; } }} m68k_incpc (4); endlabel6364: ; return 8 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_57fb_20)(uae_u32 opcode) { {{ uae_s32 dummy = get_long_020_prefetch (2); if (cctrue (7)) { Exception (7); goto endlabel6365; } }} m68k_incpc (6); endlabel6365: ; return 12 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_57fc_20)(uae_u32 opcode) { { if (cctrue (7)) { Exception (7); goto endlabel6366; } } m68k_incpc (2); endlabel6366: ; return 4 * CYCLE_UNIT / 2; } #endif /* Scc.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_58c0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (8) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* DBcc.W Dn,#.W */ uae_u32 REGPARAM2 CPUFUNC(op_58c8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_word_020_prefetch (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (8)) { m68k_incpc ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel6368; } return 12 * CYCLE_UNIT / 2; } } else { } m68k_setpc (oldpc + 4); }}}endlabel6368: ; return 12 * CYCLE_UNIT / 2; } /* Scc.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_58d0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (8) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* Scc.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_58d8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (8) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* Scc.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_58e0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (8) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* Scc.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_58e8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); {{ int val = cctrue (8) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_58f0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); {{ int val = cctrue (8) ? 0xff : 0; x_put_byte (srca, val); }}}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_58f8_20)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); {{ int val = cctrue (8) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_58f9_20)(uae_u32 opcode) { {{ uaecptr srca = get_long_020_prefetch (2); {{ int val = cctrue (8) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_58fa_20)(uae_u32 opcode) { {{ uae_s16 dummy = get_word_020_prefetch (2); if (cctrue (8)) { Exception (7); goto endlabel6376; } }} m68k_incpc (4); endlabel6376: ; return 8 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_58fb_20)(uae_u32 opcode) { {{ uae_s32 dummy = get_long_020_prefetch (2); if (cctrue (8)) { Exception (7); goto endlabel6377; } }} m68k_incpc (6); endlabel6377: ; return 12 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_58fc_20)(uae_u32 opcode) { { if (cctrue (8)) { Exception (7); goto endlabel6378; } } m68k_incpc (2); endlabel6378: ; return 4 * CYCLE_UNIT / 2; } #endif /* Scc.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_59c0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (9) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* DBcc.W Dn,#.W */ uae_u32 REGPARAM2 CPUFUNC(op_59c8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_word_020_prefetch (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (9)) { m68k_incpc ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel6380; } return 12 * CYCLE_UNIT / 2; } } else { } m68k_setpc (oldpc + 4); }}}endlabel6380: ; return 12 * CYCLE_UNIT / 2; } /* Scc.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_59d0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (9) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* Scc.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_59d8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (9) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* Scc.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_59e0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (9) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* Scc.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_59e8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); {{ int val = cctrue (9) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_59f0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); {{ int val = cctrue (9) ? 0xff : 0; x_put_byte (srca, val); }}}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_59f8_20)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); {{ int val = cctrue (9) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_59f9_20)(uae_u32 opcode) { {{ uaecptr srca = get_long_020_prefetch (2); {{ int val = cctrue (9) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_59fa_20)(uae_u32 opcode) { {{ uae_s16 dummy = get_word_020_prefetch (2); if (cctrue (9)) { Exception (7); goto endlabel6388; } }} m68k_incpc (4); endlabel6388: ; return 8 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_59fb_20)(uae_u32 opcode) { {{ uae_s32 dummy = get_long_020_prefetch (2); if (cctrue (9)) { Exception (7); goto endlabel6389; } }} m68k_incpc (6); endlabel6389: ; return 12 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_59fc_20)(uae_u32 opcode) { { if (cctrue (9)) { Exception (7); goto endlabel6390; } } m68k_incpc (2); endlabel6390: ; return 4 * CYCLE_UNIT / 2; } #endif /* Scc.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_5ac0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (10) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* DBcc.W Dn,#.W */ uae_u32 REGPARAM2 CPUFUNC(op_5ac8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_word_020_prefetch (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (10)) { m68k_incpc ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel6392; } return 12 * CYCLE_UNIT / 2; } } else { } m68k_setpc (oldpc + 4); }}}endlabel6392: ; return 12 * CYCLE_UNIT / 2; } /* Scc.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_5ad0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (10) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* Scc.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_5ad8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (10) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* Scc.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_5ae0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (10) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* Scc.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_5ae8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); {{ int val = cctrue (10) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_5af0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); {{ int val = cctrue (10) ? 0xff : 0; x_put_byte (srca, val); }}}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_5af8_20)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); {{ int val = cctrue (10) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_5af9_20)(uae_u32 opcode) { {{ uaecptr srca = get_long_020_prefetch (2); {{ int val = cctrue (10) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_5afa_20)(uae_u32 opcode) { {{ uae_s16 dummy = get_word_020_prefetch (2); if (cctrue (10)) { Exception (7); goto endlabel6400; } }} m68k_incpc (4); endlabel6400: ; return 8 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_5afb_20)(uae_u32 opcode) { {{ uae_s32 dummy = get_long_020_prefetch (2); if (cctrue (10)) { Exception (7); goto endlabel6401; } }} m68k_incpc (6); endlabel6401: ; return 12 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_5afc_20)(uae_u32 opcode) { { if (cctrue (10)) { Exception (7); goto endlabel6402; } } m68k_incpc (2); endlabel6402: ; return 4 * CYCLE_UNIT / 2; } #endif /* Scc.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_5bc0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (11) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* DBcc.W Dn,#.W */ uae_u32 REGPARAM2 CPUFUNC(op_5bc8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_word_020_prefetch (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (11)) { m68k_incpc ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel6404; } return 12 * CYCLE_UNIT / 2; } } else { } m68k_setpc (oldpc + 4); }}}endlabel6404: ; return 12 * CYCLE_UNIT / 2; } /* Scc.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_5bd0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (11) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* Scc.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_5bd8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (11) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* Scc.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_5be0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (11) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* Scc.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_5be8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); {{ int val = cctrue (11) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_5bf0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); {{ int val = cctrue (11) ? 0xff : 0; x_put_byte (srca, val); }}}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_5bf8_20)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); {{ int val = cctrue (11) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_5bf9_20)(uae_u32 opcode) { {{ uaecptr srca = get_long_020_prefetch (2); {{ int val = cctrue (11) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_5bfa_20)(uae_u32 opcode) { {{ uae_s16 dummy = get_word_020_prefetch (2); if (cctrue (11)) { Exception (7); goto endlabel6412; } }} m68k_incpc (4); endlabel6412: ; return 8 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_5bfb_20)(uae_u32 opcode) { {{ uae_s32 dummy = get_long_020_prefetch (2); if (cctrue (11)) { Exception (7); goto endlabel6413; } }} m68k_incpc (6); endlabel6413: ; return 12 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_5bfc_20)(uae_u32 opcode) { { if (cctrue (11)) { Exception (7); goto endlabel6414; } } m68k_incpc (2); endlabel6414: ; return 4 * CYCLE_UNIT / 2; } #endif /* Scc.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_5cc0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (12) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* DBcc.W Dn,#.W */ uae_u32 REGPARAM2 CPUFUNC(op_5cc8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_word_020_prefetch (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (12)) { m68k_incpc ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel6416; } return 12 * CYCLE_UNIT / 2; } } else { } m68k_setpc (oldpc + 4); }}}endlabel6416: ; return 12 * CYCLE_UNIT / 2; } /* Scc.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_5cd0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (12) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* Scc.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_5cd8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (12) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* Scc.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_5ce0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (12) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* Scc.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_5ce8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); {{ int val = cctrue (12) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_5cf0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); {{ int val = cctrue (12) ? 0xff : 0; x_put_byte (srca, val); }}}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_5cf8_20)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); {{ int val = cctrue (12) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_5cf9_20)(uae_u32 opcode) { {{ uaecptr srca = get_long_020_prefetch (2); {{ int val = cctrue (12) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_5cfa_20)(uae_u32 opcode) { {{ uae_s16 dummy = get_word_020_prefetch (2); if (cctrue (12)) { Exception (7); goto endlabel6424; } }} m68k_incpc (4); endlabel6424: ; return 8 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_5cfb_20)(uae_u32 opcode) { {{ uae_s32 dummy = get_long_020_prefetch (2); if (cctrue (12)) { Exception (7); goto endlabel6425; } }} m68k_incpc (6); endlabel6425: ; return 12 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_5cfc_20)(uae_u32 opcode) { { if (cctrue (12)) { Exception (7); goto endlabel6426; } } m68k_incpc (2); endlabel6426: ; return 4 * CYCLE_UNIT / 2; } #endif /* Scc.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_5dc0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (13) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* DBcc.W Dn,#.W */ uae_u32 REGPARAM2 CPUFUNC(op_5dc8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_word_020_prefetch (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (13)) { m68k_incpc ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel6428; } return 12 * CYCLE_UNIT / 2; } } else { } m68k_setpc (oldpc + 4); }}}endlabel6428: ; return 12 * CYCLE_UNIT / 2; } /* Scc.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_5dd0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (13) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* Scc.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_5dd8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (13) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* Scc.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_5de0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (13) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* Scc.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_5de8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); {{ int val = cctrue (13) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_5df0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); {{ int val = cctrue (13) ? 0xff : 0; x_put_byte (srca, val); }}}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_5df8_20)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); {{ int val = cctrue (13) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_5df9_20)(uae_u32 opcode) { {{ uaecptr srca = get_long_020_prefetch (2); {{ int val = cctrue (13) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_5dfa_20)(uae_u32 opcode) { {{ uae_s16 dummy = get_word_020_prefetch (2); if (cctrue (13)) { Exception (7); goto endlabel6436; } }} m68k_incpc (4); endlabel6436: ; return 8 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_5dfb_20)(uae_u32 opcode) { {{ uae_s32 dummy = get_long_020_prefetch (2); if (cctrue (13)) { Exception (7); goto endlabel6437; } }} m68k_incpc (6); endlabel6437: ; return 12 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_5dfc_20)(uae_u32 opcode) { { if (cctrue (13)) { Exception (7); goto endlabel6438; } } m68k_incpc (2); endlabel6438: ; return 4 * CYCLE_UNIT / 2; } #endif /* Scc.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_5ec0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (14) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* DBcc.W Dn,#.W */ uae_u32 REGPARAM2 CPUFUNC(op_5ec8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_word_020_prefetch (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (14)) { m68k_incpc ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel6440; } return 12 * CYCLE_UNIT / 2; } } else { } m68k_setpc (oldpc + 4); }}}endlabel6440: ; return 12 * CYCLE_UNIT / 2; } /* Scc.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_5ed0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (14) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* Scc.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_5ed8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (14) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* Scc.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_5ee0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (14) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* Scc.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_5ee8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); {{ int val = cctrue (14) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_5ef0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); {{ int val = cctrue (14) ? 0xff : 0; x_put_byte (srca, val); }}}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_5ef8_20)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); {{ int val = cctrue (14) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_5ef9_20)(uae_u32 opcode) { {{ uaecptr srca = get_long_020_prefetch (2); {{ int val = cctrue (14) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_5efa_20)(uae_u32 opcode) { {{ uae_s16 dummy = get_word_020_prefetch (2); if (cctrue (14)) { Exception (7); goto endlabel6448; } }} m68k_incpc (4); endlabel6448: ; return 8 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_5efb_20)(uae_u32 opcode) { {{ uae_s32 dummy = get_long_020_prefetch (2); if (cctrue (14)) { Exception (7); goto endlabel6449; } }} m68k_incpc (6); endlabel6449: ; return 12 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_5efc_20)(uae_u32 opcode) { { if (cctrue (14)) { Exception (7); goto endlabel6450; } } m68k_incpc (2); endlabel6450: ; return 4 * CYCLE_UNIT / 2; } #endif /* Scc.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_5fc0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{{{ int val = cctrue (15) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* DBcc.W Dn,#.W */ uae_u32 REGPARAM2 CPUFUNC(op_5fc8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = get_word_020_prefetch (2); uaecptr oldpc = m68k_getpc (); if (!cctrue (15)) { m68k_incpc ((uae_s32)offs + 2); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel6452; } return 12 * CYCLE_UNIT / 2; } } else { } m68k_setpc (oldpc + 4); }}}endlabel6452: ; return 12 * CYCLE_UNIT / 2; } /* Scc.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_5fd0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); {{ int val = cctrue (15) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* Scc.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_5fd8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; {{ int val = cctrue (15) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* Scc.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_5fe0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; m68k_areg (regs, srcreg) = srca; {{ int val = cctrue (15) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* Scc.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_5fe8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); {{ int val = cctrue (15) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_5ff0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); {{ int val = cctrue (15) ? 0xff : 0; x_put_byte (srca, val); }}}}}return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_5ff8_20)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); {{ int val = cctrue (15) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* Scc.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_5ff9_20)(uae_u32 opcode) { {{ uaecptr srca = get_long_020_prefetch (2); {{ int val = cctrue (15) ? 0xff : 0; x_put_byte (srca, val); }}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* TRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_5ffa_20)(uae_u32 opcode) { {{ uae_s16 dummy = get_word_020_prefetch (2); if (cctrue (15)) { Exception (7); goto endlabel6460; } }} m68k_incpc (4); endlabel6460: ; return 8 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_5ffb_20)(uae_u32 opcode) { {{ uae_s32 dummy = get_long_020_prefetch (2); if (cctrue (15)) { Exception (7); goto endlabel6461; } }} m68k_incpc (6); endlabel6461: ; return 12 * CYCLE_UNIT / 2; } #endif /* TRAPcc.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_5ffc_20)(uae_u32 opcode) { { if (cctrue (15)) { Exception (7); goto endlabel6462; } } m68k_incpc (2); endlabel6462: ; return 4 * CYCLE_UNIT / 2; } #endif /* Bcc.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_6000_20)(uae_u32 opcode) { {{ uae_s16 src = get_word_020_prefetch (2); if (!cctrue (0)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel6463; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); }}endlabel6463: ; return 12 * CYCLE_UNIT / 2; } /* BccQ.B # */ uae_u32 REGPARAM2 CPUFUNC(op_6001_20)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (0)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel6464; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (2); }}endlabel6464: ; return 8 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_60ff_20)(uae_u32 opcode) { {{ uae_s32 src = get_long_020_prefetch (2); if (!cctrue (0)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel6465; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (6); }}endlabel6465: ; return 12 * CYCLE_UNIT / 2; } /* BSR.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_6100_20)(uae_u32 opcode) { { uae_s32 s; { uae_s16 src = get_word_020_prefetch (2); s = (uae_s32)src + 2; if (src & 1) { exception3 (opcode, m68k_getpc () + s, 0, 1, m68k_getpc () + s); goto endlabel6466; } m68k_do_bsr (m68k_getpc () + 4, s); }}endlabel6466: ; return 8 * CYCLE_UNIT / 2; } /* BSRQ.B # */ uae_u32 REGPARAM2 CPUFUNC(op_6101_20)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); { uae_s32 s; { uae_u32 src = srcreg; s = (uae_s32)src + 2; if (src & 1) { exception3 (opcode, m68k_getpc () + s, 0, 1, m68k_getpc () + s); goto endlabel6467; } m68k_do_bsr (m68k_getpc () + 2, s); }}endlabel6467: ; return 4 * CYCLE_UNIT / 2; } /* BSR.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_61ff_20)(uae_u32 opcode) { { uae_s32 s; { uae_s32 src = get_long_020_prefetch (2); s = (uae_s32)src + 2; if (src & 1) { exception3 (opcode, m68k_getpc () + s, 0, 1, m68k_getpc () + s); goto endlabel6468; } m68k_do_bsr (m68k_getpc () + 6, s); }}endlabel6468: ; return 12 * CYCLE_UNIT / 2; } #endif #ifdef PART_6 /* Bcc.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_6200_20)(uae_u32 opcode) { {{ uae_s16 src = get_word_020_prefetch (2); if (!cctrue (2)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel6469; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); }}endlabel6469: ; return 12 * CYCLE_UNIT / 2; } /* BccQ.B # */ uae_u32 REGPARAM2 CPUFUNC(op_6201_20)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (2)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel6470; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (2); }}endlabel6470: ; return 8 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_62ff_20)(uae_u32 opcode) { {{ uae_s32 src = get_long_020_prefetch (2); if (!cctrue (2)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel6471; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (6); }}endlabel6471: ; return 12 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_6300_20)(uae_u32 opcode) { {{ uae_s16 src = get_word_020_prefetch (2); if (!cctrue (3)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel6472; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); }}endlabel6472: ; return 12 * CYCLE_UNIT / 2; } /* BccQ.B # */ uae_u32 REGPARAM2 CPUFUNC(op_6301_20)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (3)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel6473; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (2); }}endlabel6473: ; return 8 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_63ff_20)(uae_u32 opcode) { {{ uae_s32 src = get_long_020_prefetch (2); if (!cctrue (3)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel6474; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (6); }}endlabel6474: ; return 12 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_6400_20)(uae_u32 opcode) { {{ uae_s16 src = get_word_020_prefetch (2); if (!cctrue (4)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel6475; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); }}endlabel6475: ; return 12 * CYCLE_UNIT / 2; } /* BccQ.B # */ uae_u32 REGPARAM2 CPUFUNC(op_6401_20)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (4)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel6476; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (2); }}endlabel6476: ; return 8 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_64ff_20)(uae_u32 opcode) { {{ uae_s32 src = get_long_020_prefetch (2); if (!cctrue (4)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel6477; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (6); }}endlabel6477: ; return 12 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_6500_20)(uae_u32 opcode) { {{ uae_s16 src = get_word_020_prefetch (2); if (!cctrue (5)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel6478; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); }}endlabel6478: ; return 12 * CYCLE_UNIT / 2; } /* BccQ.B # */ uae_u32 REGPARAM2 CPUFUNC(op_6501_20)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (5)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel6479; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (2); }}endlabel6479: ; return 8 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_65ff_20)(uae_u32 opcode) { {{ uae_s32 src = get_long_020_prefetch (2); if (!cctrue (5)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel6480; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (6); }}endlabel6480: ; return 12 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_6600_20)(uae_u32 opcode) { {{ uae_s16 src = get_word_020_prefetch (2); if (!cctrue (6)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel6481; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); }}endlabel6481: ; return 12 * CYCLE_UNIT / 2; } /* BccQ.B # */ uae_u32 REGPARAM2 CPUFUNC(op_6601_20)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (6)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel6482; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (2); }}endlabel6482: ; return 8 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_66ff_20)(uae_u32 opcode) { {{ uae_s32 src = get_long_020_prefetch (2); if (!cctrue (6)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel6483; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (6); }}endlabel6483: ; return 12 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_6700_20)(uae_u32 opcode) { {{ uae_s16 src = get_word_020_prefetch (2); if (!cctrue (7)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel6484; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); }}endlabel6484: ; return 12 * CYCLE_UNIT / 2; } /* BccQ.B # */ uae_u32 REGPARAM2 CPUFUNC(op_6701_20)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (7)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel6485; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (2); }}endlabel6485: ; return 8 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_67ff_20)(uae_u32 opcode) { {{ uae_s32 src = get_long_020_prefetch (2); if (!cctrue (7)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel6486; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (6); }}endlabel6486: ; return 12 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_6800_20)(uae_u32 opcode) { {{ uae_s16 src = get_word_020_prefetch (2); if (!cctrue (8)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel6487; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); }}endlabel6487: ; return 12 * CYCLE_UNIT / 2; } /* BccQ.B # */ uae_u32 REGPARAM2 CPUFUNC(op_6801_20)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (8)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel6488; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (2); }}endlabel6488: ; return 8 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_68ff_20)(uae_u32 opcode) { {{ uae_s32 src = get_long_020_prefetch (2); if (!cctrue (8)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel6489; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (6); }}endlabel6489: ; return 12 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_6900_20)(uae_u32 opcode) { {{ uae_s16 src = get_word_020_prefetch (2); if (!cctrue (9)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel6490; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); }}endlabel6490: ; return 12 * CYCLE_UNIT / 2; } /* BccQ.B # */ uae_u32 REGPARAM2 CPUFUNC(op_6901_20)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (9)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel6491; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (2); }}endlabel6491: ; return 8 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_69ff_20)(uae_u32 opcode) { {{ uae_s32 src = get_long_020_prefetch (2); if (!cctrue (9)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel6492; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (6); }}endlabel6492: ; return 12 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_6a00_20)(uae_u32 opcode) { {{ uae_s16 src = get_word_020_prefetch (2); if (!cctrue (10)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel6493; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); }}endlabel6493: ; return 12 * CYCLE_UNIT / 2; } /* BccQ.B # */ uae_u32 REGPARAM2 CPUFUNC(op_6a01_20)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (10)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel6494; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (2); }}endlabel6494: ; return 8 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_6aff_20)(uae_u32 opcode) { {{ uae_s32 src = get_long_020_prefetch (2); if (!cctrue (10)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel6495; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (6); }}endlabel6495: ; return 12 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_6b00_20)(uae_u32 opcode) { {{ uae_s16 src = get_word_020_prefetch (2); if (!cctrue (11)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel6496; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); }}endlabel6496: ; return 12 * CYCLE_UNIT / 2; } /* BccQ.B # */ uae_u32 REGPARAM2 CPUFUNC(op_6b01_20)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (11)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel6497; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (2); }}endlabel6497: ; return 8 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_6bff_20)(uae_u32 opcode) { {{ uae_s32 src = get_long_020_prefetch (2); if (!cctrue (11)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel6498; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (6); }}endlabel6498: ; return 12 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_6c00_20)(uae_u32 opcode) { {{ uae_s16 src = get_word_020_prefetch (2); if (!cctrue (12)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel6499; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); }}endlabel6499: ; return 12 * CYCLE_UNIT / 2; } /* BccQ.B # */ uae_u32 REGPARAM2 CPUFUNC(op_6c01_20)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (12)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel6500; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (2); }}endlabel6500: ; return 8 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_6cff_20)(uae_u32 opcode) { {{ uae_s32 src = get_long_020_prefetch (2); if (!cctrue (12)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel6501; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (6); }}endlabel6501: ; return 12 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_6d00_20)(uae_u32 opcode) { {{ uae_s16 src = get_word_020_prefetch (2); if (!cctrue (13)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel6502; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); }}endlabel6502: ; return 12 * CYCLE_UNIT / 2; } /* BccQ.B # */ uae_u32 REGPARAM2 CPUFUNC(op_6d01_20)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (13)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel6503; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (2); }}endlabel6503: ; return 8 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_6dff_20)(uae_u32 opcode) { {{ uae_s32 src = get_long_020_prefetch (2); if (!cctrue (13)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel6504; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (6); }}endlabel6504: ; return 12 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_6e00_20)(uae_u32 opcode) { {{ uae_s16 src = get_word_020_prefetch (2); if (!cctrue (14)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel6505; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); }}endlabel6505: ; return 12 * CYCLE_UNIT / 2; } /* BccQ.B # */ uae_u32 REGPARAM2 CPUFUNC(op_6e01_20)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (14)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel6506; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (2); }}endlabel6506: ; return 8 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_6eff_20)(uae_u32 opcode) { {{ uae_s32 src = get_long_020_prefetch (2); if (!cctrue (14)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel6507; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (6); }}endlabel6507: ; return 12 * CYCLE_UNIT / 2; } /* Bcc.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_6f00_20)(uae_u32 opcode) { {{ uae_s16 src = get_word_020_prefetch (2); if (!cctrue (15)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel6508; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); }}endlabel6508: ; return 12 * CYCLE_UNIT / 2; } /* BccQ.B # */ uae_u32 REGPARAM2 CPUFUNC(op_6f01_20)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (15)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel6509; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (2); }}endlabel6509: ; return 8 * CYCLE_UNIT / 2; } /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_6fff_20)(uae_u32 opcode) { {{ uae_s32 src = get_long_020_prefetch (2); if (!cctrue (15)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel6510; } m68k_incpc ((uae_s32)src + 2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (6); }}endlabel6510: ; return 12 * CYCLE_UNIT / 2; } /* MOVEQ.L #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_7000_20)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_u32 src = srcreg; { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpc (2); }}}return 4 * CYCLE_UNIT / 2; } /* OR.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8000_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* OR.B (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8010_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* OR.B (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8018_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* OR.B -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8020_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* OR.B (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8028_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* OR.B (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8030_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}}}return 12 * CYCLE_UNIT / 2; } /* OR.B (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8038_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* OR.B (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8039_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* OR.B (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_803a_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* OR.B (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_803b_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}}}return 12 * CYCLE_UNIT / 2; } /* OR.B #.B,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_803c_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = x_get_ibyte (2); { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* OR.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8040_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* OR.W (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8050_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* OR.W (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8058_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* OR.W -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8060_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* OR.W (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8068_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* OR.W (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8070_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}}return 12 * CYCLE_UNIT / 2; } /* OR.W (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8078_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* OR.W (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8079_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* OR.W (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_807a_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* OR.W (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_807b_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}}return 12 * CYCLE_UNIT / 2; } /* OR.W #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_807c_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* OR.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8080_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* OR.L (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8090_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* OR.L (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8098_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) += 4; { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* OR.L -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80a0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* OR.L (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80a8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* OR.L (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80b0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}}}return 16 * CYCLE_UNIT / 2; } /* OR.L (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80b8_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* OR.L (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80b9_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* OR.L (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80ba_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* OR.L (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80bb_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}}}return 16 * CYCLE_UNIT / 2; } /* OR.L #.L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80bc_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_long_020_prefetch (2); { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } /* DIVU.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80c0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); if (dst < 0) SET_NFLG (1); m68k_incpc (2); Exception (5); goto endlabel6545; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (2); } }}}endlabel6545: ; return 110 * CYCLE_UNIT / 2; } /* DIVU.W (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80d0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); if (dst < 0) SET_NFLG (1); m68k_incpc (2); Exception (5); goto endlabel6546; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (2); } }}}}endlabel6546: ; return 114 * CYCLE_UNIT / 2; } /* DIVU.W (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80d8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); if (dst < 0) SET_NFLG (1); m68k_incpc (2); Exception (5); goto endlabel6547; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (2); } }}}}endlabel6547: ; return 114 * CYCLE_UNIT / 2; } /* DIVU.W -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80e0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); if (dst < 0) SET_NFLG (1); m68k_incpc (2); Exception (5); goto endlabel6548; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (2); } }}}}endlabel6548: ; return 116 * CYCLE_UNIT / 2; } /* DIVU.W (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80e8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); if (dst < 0) SET_NFLG (1); m68k_incpc (4); Exception (5); goto endlabel6549; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (4); } }}}}endlabel6549: ; return 118 * CYCLE_UNIT / 2; } /* DIVU.W (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80f0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); if (dst < 0) SET_NFLG (1); m68k_incpc (0); Exception (5); goto endlabel6550; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } } }}}}}endlabel6550: ; return 118 * CYCLE_UNIT / 2; } /* DIVU.W (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80f8_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); if (dst < 0) SET_NFLG (1); m68k_incpc (4); Exception (5); goto endlabel6551; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (4); } }}}}endlabel6551: ; return 118 * CYCLE_UNIT / 2; } /* DIVU.W (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80f9_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); if (dst < 0) SET_NFLG (1); m68k_incpc (6); Exception (5); goto endlabel6552; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (6); } }}}}endlabel6552: ; return 122 * CYCLE_UNIT / 2; } /* DIVU.W (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80fa_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); if (dst < 0) SET_NFLG (1); m68k_incpc (4); Exception (5); goto endlabel6553; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (4); } }}}}endlabel6553: ; return 118 * CYCLE_UNIT / 2; } /* DIVU.W (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80fb_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); if (dst < 0) SET_NFLG (1); m68k_incpc (0); Exception (5); goto endlabel6554; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } } }}}}}endlabel6554: ; return 118 * CYCLE_UNIT / 2; } /* DIVU.W #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80fc_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); if (dst < 0) SET_NFLG (1); m68k_incpc (4); Exception (5); goto endlabel6555; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (4); } }}}endlabel6555: ; return 114 * CYCLE_UNIT / 2; } /* SBCD.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8100_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); { uae_u16 newv_lo = (dst & 0xF) - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = (dst & 0xF0) - (src & 0xF0); uae_u16 newv, tmp_newv; int bcd = 0; newv = tmp_newv = newv_hi + newv_lo; if (newv_lo & 0xF0) { newv -= 6; bcd = 6; }; if ((((dst & 0xFF) - (src & 0xFF) - (GET_XFLG () ? 1 : 0)) & 0x100) > 0xFF) { newv -= 0x60; } SET_CFLG ((((dst & 0xFF) - (src & 0xFF) - bcd - (GET_XFLG () ? 1 : 0)) & 0x300) > 0xFF); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); SET_VFLG ((tmp_newv & 0x80) != 0 && (newv & 0x80) == 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* SBCD.B -(An),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_8108_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; { uae_u16 newv_lo = (dst & 0xF) - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = (dst & 0xF0) - (src & 0xF0); uae_u16 newv, tmp_newv; int bcd = 0; newv = tmp_newv = newv_hi + newv_lo; if (newv_lo & 0xF0) { newv -= 6; bcd = 6; }; if ((((dst & 0xFF) - (src & 0xFF) - (GET_XFLG () ? 1 : 0)) & 0x100) > 0xFF) { newv -= 0x60; } SET_CFLG ((((dst & 0xFF) - (src & 0xFF) - bcd - (GET_XFLG () ? 1 : 0)) & 0x300) > 0xFF); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); SET_VFLG ((tmp_newv & 0x80) != 0 && (newv & 0x80) == 0); x_put_byte (dsta, newv); }}}}}} m68k_incpc (2); return 16 * CYCLE_UNIT / 2; } /* OR.B Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_8110_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* OR.B Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_8118_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* OR.B Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_8120_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* OR.B Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_8128_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* OR.B Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_8130_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); { uae_s8 dst = x_get_byte (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}}}return 16 * CYCLE_UNIT / 2; } /* OR.B Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_8138_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* OR.B Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_8139_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* PACK.L Dn,Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_8140_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; { uae_u16 val = m68k_dreg (regs, srcreg) + get_word_020_prefetch (2); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & 0xffffff00) | ((val >> 4) & 0xf0) | (val & 0xf); } m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } #endif /* PACK.L -(An),-(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_8148_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; { uae_u16 val; m68k_areg (regs, srcreg) -= areg_byteinc[srcreg]; val = (uae_u16)x_get_byte (m68k_areg (regs, srcreg)); m68k_areg (regs, srcreg) -= areg_byteinc[srcreg]; val = (val | ((uae_u16)x_get_byte (m68k_areg (regs, srcreg)) << 8)) + get_word_020_prefetch (2); m68k_areg (regs, dstreg) -= areg_byteinc[dstreg]; x_put_byte (m68k_areg (regs, dstreg),((val >> 4) & 0xf0) | (val & 0xf)); } m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } #endif /* OR.W Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_8150_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* OR.W Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_8158_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) += 2; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* OR.W Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_8160_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) = dsta; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* OR.W Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_8168_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 dst = x_get_word (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* OR.W Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_8170_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); { uae_s16 dst = x_get_word (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}}}return 16 * CYCLE_UNIT / 2; } /* OR.W Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_8178_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 dst = x_get_word (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* OR.W Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_8179_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_020_prefetch (2); { uae_s16 dst = x_get_word (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* UNPK.L Dn,Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_8180_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; { uae_u16 val = m68k_dreg (regs, srcreg); val = (((val << 4) & 0xf00) | (val & 0xf)) + get_word_020_prefetch (2); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & 0xffff0000) | (val & 0xffff); } m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } #endif /* UNPK.L -(An),-(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_8188_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; { uae_u16 val; m68k_areg (regs, srcreg) -= areg_byteinc[srcreg]; val = (uae_u16)x_get_byte (m68k_areg (regs, srcreg)); val = (((val << 4) & 0xf00) | (val & 0xf)) + get_word_020_prefetch (2); m68k_areg (regs, dstreg) -= 2 * areg_byteinc[dstreg]; x_put_byte (m68k_areg (regs, dstreg) + areg_byteinc[dstreg], val); x_put_byte (m68k_areg (regs, dstreg), val >> 8); } m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } #endif /* OR.L Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_8190_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} m68k_incpc (2); return 20 * CYCLE_UNIT / 2; } /* OR.L Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_8198_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) += 4; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} m68k_incpc (2); return 20 * CYCLE_UNIT / 2; } /* OR.L Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_81a0_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) = dsta; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} m68k_incpc (2); return 22 * CYCLE_UNIT / 2; } /* OR.L Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_81a8_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 dst = x_get_long (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} m68k_incpc (4); return 24 * CYCLE_UNIT / 2; } /* OR.L Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_81b0_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); { uae_s32 dst = x_get_long (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}}}return 24 * CYCLE_UNIT / 2; } /* OR.L Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_81b8_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 dst = x_get_long (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} m68k_incpc (4); return 24 * CYCLE_UNIT / 2; } /* OR.L Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_81b9_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_020_prefetch (2); { uae_s32 dst = x_get_long (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} m68k_incpc (6); return 28 * CYCLE_UNIT / 2; } /* DIVS.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_81c0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); SET_ZFLG (1); m68k_incpc (2); Exception (5); goto endlabel6583; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (2); } }}}endlabel6583: ; return 142 * CYCLE_UNIT / 2; } /* DIVS.W (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_81d0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); SET_ZFLG (1); m68k_incpc (2); Exception (5); goto endlabel6584; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (2); } }}}}endlabel6584: ; return 146 * CYCLE_UNIT / 2; } /* DIVS.W (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_81d8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); SET_ZFLG (1); m68k_incpc (2); Exception (5); goto endlabel6585; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (2); } }}}}endlabel6585: ; return 146 * CYCLE_UNIT / 2; } /* DIVS.W -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_81e0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); SET_ZFLG (1); m68k_incpc (2); Exception (5); goto endlabel6586; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (2); } }}}}endlabel6586: ; return 148 * CYCLE_UNIT / 2; } /* DIVS.W (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_81e8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); SET_ZFLG (1); m68k_incpc (4); Exception (5); goto endlabel6587; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (4); } }}}}endlabel6587: ; return 150 * CYCLE_UNIT / 2; } /* DIVS.W (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_81f0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); SET_ZFLG (1); m68k_incpc (0); Exception (5); goto endlabel6588; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } } }}}}}endlabel6588: ; return 150 * CYCLE_UNIT / 2; } /* DIVS.W (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_81f8_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); SET_ZFLG (1); m68k_incpc (4); Exception (5); goto endlabel6589; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (4); } }}}}endlabel6589: ; return 150 * CYCLE_UNIT / 2; } /* DIVS.W (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_81f9_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); SET_ZFLG (1); m68k_incpc (6); Exception (5); goto endlabel6590; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (6); } }}}}endlabel6590: ; return 154 * CYCLE_UNIT / 2; } /* DIVS.W (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_81fa_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); SET_ZFLG (1); m68k_incpc (4); Exception (5); goto endlabel6591; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (4); } }}}}endlabel6591: ; return 150 * CYCLE_UNIT / 2; } /* DIVS.W (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_81fb_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); SET_ZFLG (1); m68k_incpc (0); Exception (5); goto endlabel6592; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } } }}}}}endlabel6592: ; return 150 * CYCLE_UNIT / 2; } /* DIVS.W #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_81fc_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { SET_VFLG (1); SET_ZFLG (1); m68k_incpc (4); Exception (5); goto endlabel6593; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (4); } }}}endlabel6593: ; return 146 * CYCLE_UNIT / 2; } /* SUB.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9000_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* SUB.B (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9010_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* SUB.B (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9018_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* SUB.B -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9020_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* SUB.B (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9028_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* SUB.B (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9030_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}}}return 12 * CYCLE_UNIT / 2; } /* SUB.B (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9038_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* SUB.B (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9039_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* SUB.B (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_903a_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* SUB.B (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_903b_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}}}return 12 * CYCLE_UNIT / 2; } /* SUB.B #.B,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_903c_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = x_get_ibyte (2); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* SUB.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9040_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* SUB.W An,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9048_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* SUB.W (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9050_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* SUB.W (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9058_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* SUB.W -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9060_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* SUB.W (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9068_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* SUB.W (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9070_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}}return 12 * CYCLE_UNIT / 2; } /* SUB.W (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9078_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* SUB.W (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9079_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* SUB.W (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_907a_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* SUB.W (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_907b_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}}return 12 * CYCLE_UNIT / 2; } /* SUB.W #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_907c_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* SUB.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9080_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* SUB.L An,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9088_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* SUB.L (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9090_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* SUB.L (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9098_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) += 4; { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* SUB.L -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_90a0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* SUB.L (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_90a8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* SUB.L (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_90b0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}}}return 16 * CYCLE_UNIT / 2; } /* SUB.L (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_90b8_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* SUB.L (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_90b9_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* SUB.L (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_90ba_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* SUB.L (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_90bb_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}}}return 16 * CYCLE_UNIT / 2; } /* SUB.L #.L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_90bc_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_long_020_prefetch (2); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } /* SUBA.W Dn,An */ uae_u32 REGPARAM2 CPUFUNC(op_90c0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* SUBA.W An,An */ uae_u32 REGPARAM2 CPUFUNC(op_90c8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* SUBA.W (An),An */ uae_u32 REGPARAM2 CPUFUNC(op_90d0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* SUBA.W (An)+,An */ uae_u32 REGPARAM2 CPUFUNC(op_90d8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* SUBA.W -(An),An */ uae_u32 REGPARAM2 CPUFUNC(op_90e0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* SUBA.W (d16,An),An */ uae_u32 REGPARAM2 CPUFUNC(op_90e8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* SUBA.W (d8,An,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_90f0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}}}return 12 * CYCLE_UNIT / 2; } /* SUBA.W (xxx).W,An */ uae_u32 REGPARAM2 CPUFUNC(op_90f8_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* SUBA.W (xxx).L,An */ uae_u32 REGPARAM2 CPUFUNC(op_90f9_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* SUBA.W (d16,PC),An */ uae_u32 REGPARAM2 CPUFUNC(op_90fa_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* SUBA.W (d8,PC,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_90fb_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}}}return 12 * CYCLE_UNIT / 2; } /* SUBA.W #.W,An */ uae_u32 REGPARAM2 CPUFUNC(op_90fc_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* SUBX.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9100_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = dst - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* SUBX.B -(An),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_9108_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; { uae_u32 newv = dst - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (2); return 16 * CYCLE_UNIT / 2; } /* SUB.B Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_9110_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* SUB.B Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_9118_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* SUB.B Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_9120_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* SUB.B Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_9128_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* SUB.B Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_9130_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}}}return 16 * CYCLE_UNIT / 2; } /* SUB.B Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_9138_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* SUB.B Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_9139_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* SUBX.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9140_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = dst - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* SUBX.W -(An),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_9148_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) = dsta; { uae_u32 newv = dst - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); x_put_word (dsta, newv); }}}}}}} m68k_incpc (2); return 16 * CYCLE_UNIT / 2; } /* SUB.W Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_9150_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* SUB.W Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_9158_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) += 2; {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* SUB.W Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_9160_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* SUB.W Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_9168_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* SUB.W Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_9170_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}}}return 16 * CYCLE_UNIT / 2; } /* SUB.W Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_9178_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* SUB.W Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_9179_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_020_prefetch (2); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* SUBX.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9180_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = dst - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); }}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* SUBX.L -(An),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_9188_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) = dsta; { uae_u32 newv = dst - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); x_put_long (dsta, newv); }}}}}}} m68k_incpc (2); return 28 * CYCLE_UNIT / 2; } /* SUB.L Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_9190_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} m68k_incpc (2); return 20 * CYCLE_UNIT / 2; } /* SUB.L Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_9198_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) += 4; {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} m68k_incpc (2); return 20 * CYCLE_UNIT / 2; } /* SUB.L Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_91a0_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} m68k_incpc (2); return 22 * CYCLE_UNIT / 2; } /* SUB.L Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_91a8_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} m68k_incpc (4); return 24 * CYCLE_UNIT / 2; } /* SUB.L Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_91b0_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}}}return 24 * CYCLE_UNIT / 2; } /* SUB.L Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_91b8_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} m68k_incpc (4); return 24 * CYCLE_UNIT / 2; } /* SUB.L Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_91b9_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_020_prefetch (2); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} m68k_incpc (6); return 28 * CYCLE_UNIT / 2; } /* SUBA.L Dn,An */ uae_u32 REGPARAM2 CPUFUNC(op_91c0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* SUBA.L An,An */ uae_u32 REGPARAM2 CPUFUNC(op_91c8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* SUBA.L (An),An */ uae_u32 REGPARAM2 CPUFUNC(op_91d0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* SUBA.L (An)+,An */ uae_u32 REGPARAM2 CPUFUNC(op_91d8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) += 4; { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* SUBA.L -(An),An */ uae_u32 REGPARAM2 CPUFUNC(op_91e0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* SUBA.L (d16,An),An */ uae_u32 REGPARAM2 CPUFUNC(op_91e8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* SUBA.L (d8,An,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_91f0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}}}return 16 * CYCLE_UNIT / 2; } /* SUBA.L (xxx).W,An */ uae_u32 REGPARAM2 CPUFUNC(op_91f8_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* SUBA.L (xxx).L,An */ uae_u32 REGPARAM2 CPUFUNC(op_91f9_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* SUBA.L (d16,PC),An */ uae_u32 REGPARAM2 CPUFUNC(op_91fa_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* SUBA.L (d8,PC,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_91fb_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}}}return 16 * CYCLE_UNIT / 2; } /* SUBA.L #.L,An */ uae_u32 REGPARAM2 CPUFUNC(op_91fc_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_long_020_prefetch (2); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } /* CMP.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b000_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* CMP.B (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b010_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* CMP.B (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b018_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* CMP.B -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b020_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* CMP.B (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b028_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* CMP.B (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b030_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}}}return 12 * CYCLE_UNIT / 2; } /* CMP.B (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b038_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* CMP.B (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b039_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* CMP.B (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b03a_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* CMP.B (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b03b_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}}}return 12 * CYCLE_UNIT / 2; } /* CMP.B #.B,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b03c_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = x_get_ibyte (2); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* CMP.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b040_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* CMP.W An,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b048_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* CMP.W (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b050_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* CMP.W (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b058_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* CMP.W -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b060_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* CMP.W (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b068_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* CMP.W (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b070_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}}}return 12 * CYCLE_UNIT / 2; } /* CMP.W (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b078_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* CMP.W (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b079_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* CMP.W (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b07a_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* CMP.W (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b07b_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}}}return 12 * CYCLE_UNIT / 2; } /* CMP.W #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b07c_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* CMP.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b080_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* CMP.L An,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b088_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } #endif #ifdef PART_7 /* CMP.L (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b090_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* CMP.L (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b098_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) += 4; { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* CMP.L -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b0a0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* CMP.L (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b0a8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* CMP.L (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b0b0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}}return 16 * CYCLE_UNIT / 2; } /* CMP.L (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b0b8_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* CMP.L (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b0b9_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* CMP.L (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b0ba_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* CMP.L (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b0bb_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}}return 16 * CYCLE_UNIT / 2; } /* CMP.L #.L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b0bc_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_long_020_prefetch (2); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } /* CMPA.W Dn,An */ uae_u32 REGPARAM2 CPUFUNC(op_b0c0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* CMPA.W An,An */ uae_u32 REGPARAM2 CPUFUNC(op_b0c8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* CMPA.W (An),An */ uae_u32 REGPARAM2 CPUFUNC(op_b0d0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* CMPA.W (An)+,An */ uae_u32 REGPARAM2 CPUFUNC(op_b0d8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* CMPA.W -(An),An */ uae_u32 REGPARAM2 CPUFUNC(op_b0e0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* CMPA.W (d16,An),An */ uae_u32 REGPARAM2 CPUFUNC(op_b0e8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* CMPA.W (d8,An,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_b0f0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}}return 12 * CYCLE_UNIT / 2; } /* CMPA.W (xxx).W,An */ uae_u32 REGPARAM2 CPUFUNC(op_b0f8_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* CMPA.W (xxx).L,An */ uae_u32 REGPARAM2 CPUFUNC(op_b0f9_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* CMPA.W (d16,PC),An */ uae_u32 REGPARAM2 CPUFUNC(op_b0fa_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* CMPA.W (d8,PC,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_b0fb_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}}return 12 * CYCLE_UNIT / 2; } /* CMPA.W #.W,An */ uae_u32 REGPARAM2 CPUFUNC(op_b0fc_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* EOR.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b100_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* CMPM.B (An)+,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_b108_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* EOR.B Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_b110_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* EOR.B Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_b118_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* EOR.B Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_b120_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* EOR.B Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_b128_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* EOR.B Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_b130_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); { uae_s8 dst = x_get_byte (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}}}return 16 * CYCLE_UNIT / 2; } /* EOR.B Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_b138_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* EOR.B Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_b139_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* EOR.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b140_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* CMPM.W (An)+,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_b148_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) += 2; {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* EOR.W Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_b150_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* EOR.W Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_b158_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) += 2; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* EOR.W Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_b160_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) = dsta; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* EOR.W Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_b168_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 dst = x_get_word (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* EOR.W Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_b170_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); { uae_s16 dst = x_get_word (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}}}return 16 * CYCLE_UNIT / 2; } /* EOR.W Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_b178_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 dst = x_get_word (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* EOR.W Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_b179_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_020_prefetch (2); { uae_s16 dst = x_get_word (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* EOR.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b180_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* CMPM.L (An)+,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_b188_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) += 4; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) += 4; {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (2); return 20 * CYCLE_UNIT / 2; } /* EOR.L Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_b190_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} m68k_incpc (2); return 20 * CYCLE_UNIT / 2; } /* EOR.L Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_b198_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) += 4; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} m68k_incpc (2); return 20 * CYCLE_UNIT / 2; } /* EOR.L Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_b1a0_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) = dsta; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} m68k_incpc (2); return 22 * CYCLE_UNIT / 2; } /* EOR.L Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_b1a8_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 dst = x_get_long (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} m68k_incpc (4); return 24 * CYCLE_UNIT / 2; } /* EOR.L Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_b1b0_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); { uae_s32 dst = x_get_long (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}}}return 24 * CYCLE_UNIT / 2; } /* EOR.L Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_b1b8_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 dst = x_get_long (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} m68k_incpc (4); return 24 * CYCLE_UNIT / 2; } /* EOR.L Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_b1b9_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_020_prefetch (2); { uae_s32 dst = x_get_long (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} m68k_incpc (6); return 28 * CYCLE_UNIT / 2; } /* CMPA.L Dn,An */ uae_u32 REGPARAM2 CPUFUNC(op_b1c0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* CMPA.L An,An */ uae_u32 REGPARAM2 CPUFUNC(op_b1c8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* CMPA.L (An),An */ uae_u32 REGPARAM2 CPUFUNC(op_b1d0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* CMPA.L (An)+,An */ uae_u32 REGPARAM2 CPUFUNC(op_b1d8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) += 4; { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* CMPA.L -(An),An */ uae_u32 REGPARAM2 CPUFUNC(op_b1e0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* CMPA.L (d16,An),An */ uae_u32 REGPARAM2 CPUFUNC(op_b1e8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* CMPA.L (d8,An,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_b1f0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}}return 16 * CYCLE_UNIT / 2; } /* CMPA.L (xxx).W,An */ uae_u32 REGPARAM2 CPUFUNC(op_b1f8_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* CMPA.L (xxx).L,An */ uae_u32 REGPARAM2 CPUFUNC(op_b1f9_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* CMPA.L (d16,PC),An */ uae_u32 REGPARAM2 CPUFUNC(op_b1fa_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* CMPA.L (d8,PC,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_b1fb_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}}return 16 * CYCLE_UNIT / 2; } /* CMPA.L #.L,An */ uae_u32 REGPARAM2 CPUFUNC(op_b1fc_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_long_020_prefetch (2); { uae_s32 dst = m68k_areg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } /* AND.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c000_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* AND.B (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c010_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* AND.B (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c018_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* AND.B -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c020_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* AND.B (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c028_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* AND.B (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c030_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}}}return 12 * CYCLE_UNIT / 2; } /* AND.B (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c038_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* AND.B (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c039_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* AND.B (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c03a_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* AND.B (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c03b_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}}}return 12 * CYCLE_UNIT / 2; } /* AND.B #.B,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c03c_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = x_get_ibyte (2); { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* AND.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c040_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* AND.W (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c050_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* AND.W (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c058_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* AND.W -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c060_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* AND.W (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c068_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* AND.W (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c070_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}}return 12 * CYCLE_UNIT / 2; } /* AND.W (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c078_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* AND.W (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c079_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* AND.W (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c07a_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* AND.W (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c07b_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}}return 12 * CYCLE_UNIT / 2; } /* AND.W #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c07c_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* AND.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c080_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* AND.L (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c090_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* AND.L (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c098_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) += 4; { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* AND.L -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0a0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* AND.L (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0a8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* AND.L (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0b0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}}}return 16 * CYCLE_UNIT / 2; } /* AND.L (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0b8_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* AND.L (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0b9_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* AND.L (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0ba_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* AND.L (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0bb_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}}}}return 16 * CYCLE_UNIT / 2; } /* AND.L #.L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0bc_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_long_020_prefetch (2); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); }}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } /* MULU.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0c0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); m68k_incpc (2); }}}}return 58 * CYCLE_UNIT / 2; } /* MULU.W (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0d0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); m68k_incpc (2); }}}}}return 62 * CYCLE_UNIT / 2; } /* MULU.W (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0d8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); m68k_incpc (2); }}}}}return 62 * CYCLE_UNIT / 2; } /* MULU.W -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0e0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); m68k_incpc (2); }}}}}return 64 * CYCLE_UNIT / 2; } /* MULU.W (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0e8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); m68k_incpc (4); }}}}}return 66 * CYCLE_UNIT / 2; } /* MULU.W (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0f0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}return 66 * CYCLE_UNIT / 2; } /* MULU.W (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0f8_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); m68k_incpc (4); }}}}}return 66 * CYCLE_UNIT / 2; } /* MULU.W (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0f9_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); m68k_incpc (6); }}}}}return 70 * CYCLE_UNIT / 2; } /* MULU.W (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0fa_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); m68k_incpc (4); }}}}}return 66 * CYCLE_UNIT / 2; } /* MULU.W (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0fb_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}return 66 * CYCLE_UNIT / 2; } /* MULU.W #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0fc_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); m68k_incpc (4); }}}}return 62 * CYCLE_UNIT / 2; } /* ABCD.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c100_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); { uae_u16 newv_lo = (src & 0xF) + (dst & 0xF) + (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = (src & 0xF0) + (dst & 0xF0); uae_u16 newv, tmp_newv; int cflg; newv = tmp_newv = newv_hi + newv_lo; if (newv_lo > 9) { newv += 6; } cflg = (newv & 0x3F0) > 0x90; if (cflg) newv += 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); SET_VFLG ((tmp_newv & 0x80) == 0 && (newv & 0x80) != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ABCD.B -(An),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_c108_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; { uae_u16 newv_lo = (src & 0xF) + (dst & 0xF) + (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = (src & 0xF0) + (dst & 0xF0); uae_u16 newv, tmp_newv; int cflg; newv = tmp_newv = newv_hi + newv_lo; if (newv_lo > 9) { newv += 6; } cflg = (newv & 0x3F0) > 0x90; if (cflg) newv += 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); SET_VFLG ((tmp_newv & 0x80) == 0 && (newv & 0x80) != 0); x_put_byte (dsta, newv); }}}}}} m68k_incpc (2); return 16 * CYCLE_UNIT / 2; } /* AND.B Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_c110_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* AND.B Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_c118_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* AND.B Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_c120_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* AND.B Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_c128_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* AND.B Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_c130_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); { uae_s8 dst = x_get_byte (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}}}return 16 * CYCLE_UNIT / 2; } /* AND.B Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_c138_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* AND.B Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_c139_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); x_put_byte (dsta, src); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* EXG.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c140_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); m68k_dreg (regs, srcreg) = (dst); m68k_dreg (regs, dstreg) = (src); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* EXG.L An,An */ uae_u32 REGPARAM2 CPUFUNC(op_c148_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); m68k_areg (regs, srcreg) = (dst); m68k_areg (regs, dstreg) = (src); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* AND.W Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_c150_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* AND.W Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_c158_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) += 2; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* AND.W Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_c160_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) = dsta; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* AND.W Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_c168_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 dst = x_get_word (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* AND.W Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_c170_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); { uae_s16 dst = x_get_word (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}}}return 16 * CYCLE_UNIT / 2; } /* AND.W Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_c178_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 dst = x_get_word (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* AND.W Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_c179_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_020_prefetch (2); { uae_s16 dst = x_get_word (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); x_put_word (dsta, src); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* EXG.L Dn,An */ uae_u32 REGPARAM2 CPUFUNC(op_c188_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); m68k_dreg (regs, srcreg) = (dst); m68k_areg (regs, dstreg) = (src); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* AND.L Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_c190_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} m68k_incpc (2); return 20 * CYCLE_UNIT / 2; } /* AND.L Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_c198_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) += 4; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} m68k_incpc (2); return 20 * CYCLE_UNIT / 2; } /* AND.L Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_c1a0_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) = dsta; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} m68k_incpc (2); return 22 * CYCLE_UNIT / 2; } /* AND.L Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_c1a8_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 dst = x_get_long (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} m68k_incpc (4); return 24 * CYCLE_UNIT / 2; } /* AND.L Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_c1b0_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); { uae_s32 dst = x_get_long (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}}}return 24 * CYCLE_UNIT / 2; } /* AND.L Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_c1b8_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 dst = x_get_long (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} m68k_incpc (4); return 24 * CYCLE_UNIT / 2; } /* AND.L Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_c1b9_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_020_prefetch (2); { uae_s32 dst = x_get_long (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); x_put_long (dsta, src); }}}} m68k_incpc (6); return 28 * CYCLE_UNIT / 2; } /* MULS.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c1c0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); }}}} m68k_incpc (2); return 58 * CYCLE_UNIT / 2; } /* MULS.W (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c1d0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); }}}}} m68k_incpc (2); return 62 * CYCLE_UNIT / 2; } /* MULS.W (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c1d8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); }}}}} m68k_incpc (2); return 62 * CYCLE_UNIT / 2; } /* MULS.W -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c1e0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); }}}}} m68k_incpc (2); return 64 * CYCLE_UNIT / 2; } /* MULS.W (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c1e8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); }}}}} m68k_incpc (4); return 66 * CYCLE_UNIT / 2; } /* MULS.W (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c1f0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}return 66 * CYCLE_UNIT / 2; } /* MULS.W (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c1f8_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); }}}}} m68k_incpc (4); return 66 * CYCLE_UNIT / 2; } /* MULS.W (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c1f9_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); }}}}} m68k_incpc (6); return 70 * CYCLE_UNIT / 2; } /* MULS.W (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c1fa_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); }}}}} m68k_incpc (4); return 66 * CYCLE_UNIT / 2; } /* MULS.W (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c1fb_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}return 66 * CYCLE_UNIT / 2; } /* MULS.W #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c1fc_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); }}}} m68k_incpc (4); return 62 * CYCLE_UNIT / 2; } /* ADD.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d000_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ADD.B (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d010_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* ADD.B (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d018_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* ADD.B -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d020_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* ADD.B (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d028_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* ADD.B (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d030_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}}}return 12 * CYCLE_UNIT / 2; } /* ADD.B (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d038_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* ADD.B (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d039_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* ADD.B (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d03a_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* ADD.B (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d03b_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_s8 src = x_get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}}}return 12 * CYCLE_UNIT / 2; } /* ADD.B #.B,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d03c_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = x_get_ibyte (2); { uae_s8 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* ADD.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d040_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ADD.W An,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d048_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ADD.W (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d050_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* ADD.W (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d058_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* ADD.W -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d060_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* ADD.W (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d068_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* ADD.W (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d070_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}}return 12 * CYCLE_UNIT / 2; } /* ADD.W (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d078_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* ADD.W (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d079_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* ADD.W (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d07a_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* ADD.W (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d07b_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_s16 src = x_get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}}return 12 * CYCLE_UNIT / 2; } /* ADD.W #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d07c_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uae_s16 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* ADD.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d080_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ADD.L An,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d088_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ADD.L (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d090_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* ADD.L (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d098_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) += 4; { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* ADD.L -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d0a0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* ADD.L (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d0a8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* ADD.L (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d0b0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}}}return 16 * CYCLE_UNIT / 2; } /* ADD.L (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d0b8_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* ADD.L (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d0b9_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* ADD.L (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d0ba_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* ADD.L (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d0bb_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}}}return 16 * CYCLE_UNIT / 2; } /* ADD.L #.L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d0bc_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_long_020_prefetch (2); { uae_s32 dst = m68k_dreg (regs, dstreg); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } /* ADDA.W Dn,An */ uae_u32 REGPARAM2 CPUFUNC(op_d0c0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ADDA.W An,An */ uae_u32 REGPARAM2 CPUFUNC(op_d0c8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ADDA.W (An),An */ uae_u32 REGPARAM2 CPUFUNC(op_d0d0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* ADDA.W (An)+,An */ uae_u32 REGPARAM2 CPUFUNC(op_d0d8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* ADDA.W -(An),An */ uae_u32 REGPARAM2 CPUFUNC(op_d0e0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* ADDA.W (d16,An),An */ uae_u32 REGPARAM2 CPUFUNC(op_d0e8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* ADDA.W (d8,An,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_d0f0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}}}return 12 * CYCLE_UNIT / 2; } /* ADDA.W (xxx).W,An */ uae_u32 REGPARAM2 CPUFUNC(op_d0f8_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* ADDA.W (xxx).L,An */ uae_u32 REGPARAM2 CPUFUNC(op_d0f9_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* ADDA.W (d16,PC),An */ uae_u32 REGPARAM2 CPUFUNC(op_d0fa_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* ADDA.W (d8,PC,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_d0fb_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_s16 src = x_get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}}}return 12 * CYCLE_UNIT / 2; } /* ADDA.W #.W,An */ uae_u32 REGPARAM2 CPUFUNC(op_d0fc_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_020_prefetch (2); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* ADDX.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d100_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = dst + src + (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgo) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ADDX.B -(An),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_d108_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = x_get_byte (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; { uae_u32 newv = dst + src + (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgo) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (2); return 16 * CYCLE_UNIT / 2; } /* ADD.B Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_d110_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* ADD.B Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_d118_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* ADD.B Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_d120_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = x_get_byte (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* ADD.B Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_d128_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* ADD.B Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_d130_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}}}return 16 * CYCLE_UNIT / 2; } /* ADD.B Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_d138_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* ADD.B Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_d139_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_020_prefetch (2); { uae_s8 dst = x_get_byte (dsta); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_byte (dsta, newv); }}}}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* ADDX.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d140_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = dst + src + (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgo) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ADDX.W -(An),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_d148_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; { uae_s16 src = x_get_word (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) = dsta; { uae_u32 newv = dst + src + (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgo) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); x_put_word (dsta, newv); }}}}}}} m68k_incpc (2); return 16 * CYCLE_UNIT / 2; } /* ADD.W Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_d150_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* ADD.W Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_d158_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) += 2; {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* ADD.W Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_d160_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; { uae_s16 dst = x_get_word (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* ADD.W Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_d168_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* ADD.W Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_d170_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}}}return 16 * CYCLE_UNIT / 2; } /* ADD.W Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_d178_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* ADD.W Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_d179_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_020_prefetch (2); { uae_s16 dst = x_get_word (dsta); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_word (dsta, newv); }}}}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* ADDX.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d180_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); { uae_u32 newv = dst + src + (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgo) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); }}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ADDX.L -(An),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_d188_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) = dsta; { uae_u32 newv = dst + src + (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgo) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); x_put_long (dsta, newv); }}}}}}} m68k_incpc (2); return 28 * CYCLE_UNIT / 2; } /* ADD.L Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_d190_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} m68k_incpc (2); return 20 * CYCLE_UNIT / 2; } /* ADD.L Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_d198_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) += 4; {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} m68k_incpc (2); return 20 * CYCLE_UNIT / 2; } /* ADD.L Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_d1a0_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; { uae_s32 dst = x_get_long (dsta); m68k_areg (regs, dstreg) = dsta; {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} m68k_incpc (2); return 22 * CYCLE_UNIT / 2; } /* ADD.L Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_d1a8_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} m68k_incpc (4); return 24 * CYCLE_UNIT / 2; } /* ADD.L Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_d1b0_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; m68k_incpc (2); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}}}return 24 * CYCLE_UNIT / 2; } /* ADD.L Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_d1b8_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} m68k_incpc (4); return 24 * CYCLE_UNIT / 2; } /* ADD.L Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_d1b9_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_020_prefetch (2); { uae_s32 dst = x_get_long (dsta); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); x_put_long (dsta, newv); }}}}}}} m68k_incpc (6); return 28 * CYCLE_UNIT / 2; } /* ADDA.L Dn,An */ uae_u32 REGPARAM2 CPUFUNC(op_d1c0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ADDA.L An,An */ uae_u32 REGPARAM2 CPUFUNC(op_d1c8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ADDA.L (An),An */ uae_u32 REGPARAM2 CPUFUNC(op_d1d0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* ADDA.L (An)+,An */ uae_u32 REGPARAM2 CPUFUNC(op_d1d8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) += 4; { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* ADDA.L -(An),An */ uae_u32 REGPARAM2 CPUFUNC(op_d1e0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; { uae_s32 src = x_get_long (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* ADDA.L (d16,An),An */ uae_u32 REGPARAM2 CPUFUNC(op_d1e8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* ADDA.L (d8,An,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_d1f0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; m68k_incpc (2); { srca = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}}}return 16 * CYCLE_UNIT / 2; } /* ADDA.L (xxx).W,An */ uae_u32 REGPARAM2 CPUFUNC(op_d1f8_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* ADDA.L (xxx).L,An */ uae_u32 REGPARAM2 CPUFUNC(op_d1f9_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* ADDA.L (d16,PC),An */ uae_u32 REGPARAM2 CPUFUNC(op_d1fa_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* ADDA.L (d8,PC,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_d1fb_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; m68k_incpc (2); { tmppc = m68k_getpc (); srca = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_s32 src = x_get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}}}return 16 * CYCLE_UNIT / 2; } /* ADDA.L #.L,An */ uae_u32 REGPARAM2 CPUFUNC(op_d1fc_20)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_long_020_prefetch (2); { uae_s32 dst = m68k_areg (regs, dstreg); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } /* ASRQ.B #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e000_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; uae_u32 sign = (0x80 & val) >> 7; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 8) { val = 0xff & (uae_u32)-sign; SET_CFLG (sign); COPY_CARRY (); } else { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; val |= (0xff << (8 - cnt)) & (uae_u32)-sign; val &= 0xff; } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* LSRQ.B #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e008_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 8) { SET_CFLG ((cnt == 8) & (val >> 7)); COPY_CARRY (); val = 0; } else { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ROXRQ.B #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e010_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { cnt--; { uae_u32 carry; uae_u32 hival = (val << 1) | GET_XFLG (); hival <<= (7 - cnt); val >>= cnt; carry = val & 1; val >>= 1; val |= hival; SET_XFLG (carry); val &= 0xff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* RORQ.B #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e018_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { uae_u32 hival; cnt &= 7; hival = val << (8 - cnt); val >>= cnt; val |= hival; val &= 0xff; SET_CFLG ((val & 0x80) >> 7); } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ASR.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e020_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 cnt = m68k_dreg (regs, srcreg); { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; uae_u32 sign = (0x80 & val) >> 7; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 8) { val = 0xff & (uae_u32)-sign; SET_CFLG (sign); COPY_CARRY (); } else if (cnt > 0) { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; val |= (0xff << (8 - cnt)) & (uae_u32)-sign; val &= 0xff; } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* LSR.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e028_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 cnt = m68k_dreg (regs, srcreg); { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 8) { SET_CFLG ((cnt == 8) & (val >> 7)); COPY_CARRY (); val = 0; } else if (cnt > 0) { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ROXR.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e030_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 cnt = m68k_dreg (regs, srcreg); { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 36) cnt -= 36; if (cnt >= 18) cnt -= 18; if (cnt >= 9) cnt -= 9; if (cnt > 0) { cnt--; { uae_u32 carry; uae_u32 hival = (val << 1) | GET_XFLG (); hival <<= (7 - cnt); val >>= cnt; carry = val & 1; val >>= 1; val |= hival; SET_XFLG (carry); val &= 0xff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } #endif #ifdef PART_8 /* ROR.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e038_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 cnt = m68k_dreg (regs, srcreg); { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt > 0) { uae_u32 hival; cnt &= 7; hival = val << (8 - cnt); val >>= cnt; val |= hival; val &= 0xff; SET_CFLG ((val & 0x80) >> 7); } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ASRQ.W #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e040_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; uae_u32 sign = (0x8000 & val) >> 15; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 16) { val = 0xffff & (uae_u32)-sign; SET_CFLG (sign); COPY_CARRY (); } else { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; val |= (0xffff << (16 - cnt)) & (uae_u32)-sign; val &= 0xffff; } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* LSRQ.W #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e048_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 16) { SET_CFLG ((cnt == 16) & (val >> 15)); COPY_CARRY (); val = 0; } else { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ROXRQ.W #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e050_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { cnt--; { uae_u32 carry; uae_u32 hival = (val << 1) | GET_XFLG (); hival <<= (15 - cnt); val >>= cnt; carry = val & 1; val >>= 1; val |= hival; SET_XFLG (carry); val &= 0xffff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* RORQ.W #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e058_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { uae_u32 hival; cnt &= 15; hival = val << (16 - cnt); val >>= cnt; val |= hival; val &= 0xffff; SET_CFLG ((val & 0x8000) >> 15); } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ASR.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e060_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 cnt = m68k_dreg (regs, srcreg); { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; uae_u32 sign = (0x8000 & val) >> 15; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 16) { val = 0xffff & (uae_u32)-sign; SET_CFLG (sign); COPY_CARRY (); } else if (cnt > 0) { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; val |= (0xffff << (16 - cnt)) & (uae_u32)-sign; val &= 0xffff; } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* LSR.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e068_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 cnt = m68k_dreg (regs, srcreg); { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 16) { SET_CFLG ((cnt == 16) & (val >> 15)); COPY_CARRY (); val = 0; } else if (cnt > 0) { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ROXR.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e070_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 cnt = m68k_dreg (regs, srcreg); { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 34) cnt -= 34; if (cnt >= 17) cnt -= 17; if (cnt > 0) { cnt--; { uae_u32 carry; uae_u32 hival = (val << 1) | GET_XFLG (); hival <<= (15 - cnt); val >>= cnt; carry = val & 1; val >>= 1; val |= hival; SET_XFLG (carry); val &= 0xffff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ROR.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e078_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 cnt = m68k_dreg (regs, srcreg); { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt > 0) { uae_u32 hival; cnt &= 15; hival = val << (16 - cnt); val >>= cnt; val |= hival; val &= 0xffff; SET_CFLG ((val & 0x8000) >> 15); } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ASRQ.L #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e080_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; uae_u32 sign = (0x80000000 & val) >> 31; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 32) { val = 0xffffffff & (uae_u32)-sign; SET_CFLG (sign); COPY_CARRY (); } else { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; val |= (0xffffffff << (32 - cnt)) & (uae_u32)-sign; val &= 0xffffffff; } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* LSRQ.L #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e088_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 32) { SET_CFLG ((cnt == 32) & (val >> 31)); COPY_CARRY (); val = 0; } else { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ROXRQ.L #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e090_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { cnt--; { uae_u32 carry; uae_u32 hival = (val << 1) | GET_XFLG (); hival <<= (31 - cnt); val >>= cnt; carry = val & 1; val >>= 1; val |= hival; SET_XFLG (carry); val &= 0xffffffff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* RORQ.L #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e098_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { uae_u32 hival; cnt &= 31; hival = val << (32 - cnt); val >>= cnt; val |= hival; val &= 0xffffffff; SET_CFLG ((val & 0x80000000) >> 31); } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ASR.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e0a0_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 cnt = m68k_dreg (regs, srcreg); { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; uae_u32 sign = (0x80000000 & val) >> 31; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 32) { val = 0xffffffff & (uae_u32)-sign; SET_CFLG (sign); COPY_CARRY (); } else if (cnt > 0) { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; val |= (0xffffffff << (32 - cnt)) & (uae_u32)-sign; val &= 0xffffffff; } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* LSR.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e0a8_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 cnt = m68k_dreg (regs, srcreg); { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 32) { SET_CFLG ((cnt == 32) & (val >> 31)); COPY_CARRY (); val = 0; } else if (cnt > 0) { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ROXR.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e0b0_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 cnt = m68k_dreg (regs, srcreg); { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 33) cnt -= 33; if (cnt > 0) { cnt--; { uae_u32 carry; uae_u32 hival = (val << 1) | GET_XFLG (); hival <<= (31 - cnt); val >>= cnt; carry = val & 1; val >>= 1; val |= hival; SET_XFLG (carry); val &= 0xffffffff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ROR.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e0b8_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 cnt = m68k_dreg (regs, srcreg); { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt > 0) { uae_u32 hival; cnt &= 31; hival = val << (32 - cnt); val >>= cnt; val |= hival; val &= 0xffffffff; SET_CFLG ((val & 0x80000000) >> 31); } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ASRW.W (An) */ uae_u32 REGPARAM2 CPUFUNC(op_e0d0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = x_get_word (dataa); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 cflg = val & 1; val = (val >> 1) | sign; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (cflg); COPY_CARRY (); x_put_word (dataa, val); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* ASRW.W (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_e0d8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = x_get_word (dataa); m68k_areg (regs, srcreg) += 2; { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 cflg = val & 1; val = (val >> 1) | sign; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (cflg); COPY_CARRY (); x_put_word (dataa, val); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* ASRW.W -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_e0e0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; dataa = m68k_areg (regs, srcreg) - 2; { uae_s16 data = x_get_word (dataa); m68k_areg (regs, srcreg) = dataa; { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 cflg = val & 1; val = (val >> 1) | sign; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (cflg); COPY_CARRY (); x_put_word (dataa, val); }}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* ASRW.W (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_e0e8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 data = x_get_word (dataa); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 cflg = val & 1; val = (val >> 1) | sign; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (cflg); COPY_CARRY (); x_put_word (dataa, val); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* ASRW.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_e0f0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; m68k_incpc (2); { dataa = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s16 data = x_get_word (dataa); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 cflg = val & 1; val = (val >> 1) | sign; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (cflg); COPY_CARRY (); x_put_word (dataa, val); }}}}}return 16 * CYCLE_UNIT / 2; } /* ASRW.W (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_e0f8_20)(uae_u32 opcode) { {{ uaecptr dataa = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 data = x_get_word (dataa); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 cflg = val & 1; val = (val >> 1) | sign; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (cflg); COPY_CARRY (); x_put_word (dataa, val); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* ASRW.W (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_e0f9_20)(uae_u32 opcode) { {{ uaecptr dataa = get_long_020_prefetch (2); { uae_s16 data = x_get_word (dataa); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 cflg = val & 1; val = (val >> 1) | sign; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (cflg); COPY_CARRY (); x_put_word (dataa, val); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* ASLQ.B #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e100_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 8) { SET_VFLG (val != 0); SET_CFLG (cnt == 8 ? val & 1 : 0); COPY_CARRY (); val = 0; } else { uae_u32 mask = (0xff << (7 - cnt)) & 0xff; SET_VFLG ((val & mask) != mask && (val & mask) != 0); val <<= cnt - 1; SET_CFLG ((val & 0x80) >> 7); COPY_CARRY (); val <<= 1; val &= 0xff; } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* LSLQ.B #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e108_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 8) { SET_CFLG (cnt == 8 ? val & 1 : 0); COPY_CARRY (); val = 0; } else { val <<= (cnt - 1); SET_CFLG ((val & 0x80) >> 7); COPY_CARRY (); val <<= 1; val &= 0xff; } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ROXLQ.B #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e110_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { cnt--; { uae_u32 carry; uae_u32 loval = val >> (7 - cnt); carry = loval & 1; val = (((val << 1) | GET_XFLG ()) << cnt) | (loval >> 1); SET_XFLG (carry); val &= 0xff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ROLQ.B #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e118_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { uae_u32 loval; cnt &= 7; loval = val >> (8 - cnt); val <<= cnt; val |= loval; val &= 0xff; SET_CFLG (val & 1); } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ASL.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e120_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 cnt = m68k_dreg (regs, srcreg); { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 8) { SET_VFLG (val != 0); SET_CFLG (cnt == 8 ? val & 1 : 0); COPY_CARRY (); val = 0; } else if (cnt > 0) { uae_u32 mask = (0xff << (7 - cnt)) & 0xff; SET_VFLG ((val & mask) != mask && (val & mask) != 0); val <<= cnt - 1; SET_CFLG ((val & 0x80) >> 7); COPY_CARRY (); val <<= 1; val &= 0xff; } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* LSL.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e128_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 cnt = m68k_dreg (regs, srcreg); { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 8) { SET_CFLG (cnt == 8 ? val & 1 : 0); COPY_CARRY (); val = 0; } else if (cnt > 0) { val <<= (cnt - 1); SET_CFLG ((val & 0x80) >> 7); COPY_CARRY (); val <<= 1; val &= 0xff; } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ROXL.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e130_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 cnt = m68k_dreg (regs, srcreg); { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 36) cnt -= 36; if (cnt >= 18) cnt -= 18; if (cnt >= 9) cnt -= 9; if (cnt > 0) { cnt--; { uae_u32 carry; uae_u32 loval = val >> (7 - cnt); carry = loval & 1; val = (((val << 1) | GET_XFLG ()) << cnt) | (loval >> 1); SET_XFLG (carry); val &= 0xff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ROL.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e138_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 cnt = m68k_dreg (regs, srcreg); { uae_s8 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt > 0) { uae_u32 loval; cnt &= 7; loval = val >> (8 - cnt); val <<= cnt; val |= loval; val &= 0xff; SET_CFLG (val & 1); } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ASLQ.W #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e140_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 16) { SET_VFLG (val != 0); SET_CFLG (cnt == 16 ? val & 1 : 0); COPY_CARRY (); val = 0; } else { uae_u32 mask = (0xffff << (15 - cnt)) & 0xffff; SET_VFLG ((val & mask) != mask && (val & mask) != 0); val <<= cnt - 1; SET_CFLG ((val & 0x8000) >> 15); COPY_CARRY (); val <<= 1; val &= 0xffff; } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* LSLQ.W #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e148_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 16) { SET_CFLG (cnt == 16 ? val & 1 : 0); COPY_CARRY (); val = 0; } else { val <<= (cnt - 1); SET_CFLG ((val & 0x8000) >> 15); COPY_CARRY (); val <<= 1; val &= 0xffff; } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ROXLQ.W #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e150_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { cnt--; { uae_u32 carry; uae_u32 loval = val >> (15 - cnt); carry = loval & 1; val = (((val << 1) | GET_XFLG ()) << cnt) | (loval >> 1); SET_XFLG (carry); val &= 0xffff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ROLQ.W #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e158_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { uae_u32 loval; cnt &= 15; loval = val >> (16 - cnt); val <<= cnt; val |= loval; val &= 0xffff; SET_CFLG (val & 1); } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ASL.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e160_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 cnt = m68k_dreg (regs, srcreg); { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 16) { SET_VFLG (val != 0); SET_CFLG (cnt == 16 ? val & 1 : 0); COPY_CARRY (); val = 0; } else if (cnt > 0) { uae_u32 mask = (0xffff << (15 - cnt)) & 0xffff; SET_VFLG ((val & mask) != mask && (val & mask) != 0); val <<= cnt - 1; SET_CFLG ((val & 0x8000) >> 15); COPY_CARRY (); val <<= 1; val &= 0xffff; } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* LSL.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e168_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 cnt = m68k_dreg (regs, srcreg); { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 16) { SET_CFLG (cnt == 16 ? val & 1 : 0); COPY_CARRY (); val = 0; } else if (cnt > 0) { val <<= (cnt - 1); SET_CFLG ((val & 0x8000) >> 15); COPY_CARRY (); val <<= 1; val &= 0xffff; } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ROXL.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e170_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 cnt = m68k_dreg (regs, srcreg); { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 34) cnt -= 34; if (cnt >= 17) cnt -= 17; if (cnt > 0) { cnt--; { uae_u32 carry; uae_u32 loval = val >> (15 - cnt); carry = loval & 1; val = (((val << 1) | GET_XFLG ()) << cnt) | (loval >> 1); SET_XFLG (carry); val &= 0xffff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ROL.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e178_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 cnt = m68k_dreg (regs, srcreg); { uae_s16 data = m68k_dreg (regs, dstreg); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt > 0) { uae_u32 loval; cnt &= 15; loval = val >> (16 - cnt); val <<= cnt; val |= loval; val &= 0xffff; SET_CFLG (val & 1); } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ASLQ.L #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e180_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 32) { SET_VFLG (val != 0); SET_CFLG (cnt == 32 ? val & 1 : 0); COPY_CARRY (); val = 0; } else { uae_u32 mask = (0xffffffff << (31 - cnt)) & 0xffffffff; SET_VFLG ((val & mask) != mask && (val & mask) != 0); val <<= cnt - 1; SET_CFLG ((val & 0x80000000) >> 31); COPY_CARRY (); val <<= 1; val &= 0xffffffff; } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* LSLQ.L #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e188_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 32) { SET_CFLG (cnt == 32 ? val & 1 : 0); COPY_CARRY (); val = 0; } else { val <<= (cnt - 1); SET_CFLG ((val & 0x80000000) >> 31); COPY_CARRY (); val <<= 1; val &= 0xffffffff; } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ROXLQ.L #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e190_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { cnt--; { uae_u32 carry; uae_u32 loval = val >> (31 - cnt); carry = loval & 1; val = (((val << 1) | GET_XFLG ()) << cnt) | (loval >> 1); SET_XFLG (carry); val &= 0xffffffff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ROLQ.L #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e198_20)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { uae_u32 loval; cnt &= 31; loval = val >> (32 - cnt); val <<= cnt; val |= loval; val &= 0xffffffff; SET_CFLG (val & 1); } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ASL.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e1a0_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 cnt = m68k_dreg (regs, srcreg); { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 32) { SET_VFLG (val != 0); SET_CFLG (cnt == 32 ? val & 1 : 0); COPY_CARRY (); val = 0; } else if (cnt > 0) { uae_u32 mask = (0xffffffff << (31 - cnt)) & 0xffffffff; SET_VFLG ((val & mask) != mask && (val & mask) != 0); val <<= cnt - 1; SET_CFLG ((val & 0x80000000) >> 31); COPY_CARRY (); val <<= 1; val &= 0xffffffff; } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* LSL.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e1a8_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 cnt = m68k_dreg (regs, srcreg); { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 32) { SET_CFLG (cnt == 32 ? val & 1 : 0); COPY_CARRY (); val = 0; } else if (cnt > 0) { val <<= (cnt - 1); SET_CFLG ((val & 0x80000000) >> 31); COPY_CARRY (); val <<= 1; val &= 0xffffffff; } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ROXL.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e1b0_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 cnt = m68k_dreg (regs, srcreg); { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 33) cnt -= 33; if (cnt > 0) { cnt--; { uae_u32 carry; uae_u32 loval = val >> (31 - cnt); carry = loval & 1; val = (((val << 1) | GET_XFLG ()) << cnt) | (loval >> 1); SET_XFLG (carry); val &= 0xffffffff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ROL.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e1b8_20)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 cnt = m68k_dreg (regs, srcreg); { uae_s32 data = m68k_dreg (regs, dstreg); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt > 0) { uae_u32 loval; cnt &= 31; loval = val >> (32 - cnt); val <<= cnt; val |= loval; val &= 0xffffffff; SET_CFLG (val & 1); } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* ASLW.W (An) */ uae_u32 REGPARAM2 CPUFUNC(op_e1d0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = x_get_word (dataa); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 sign2; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); sign2 = 0x8000 & val; SET_CFLG (sign != 0); COPY_CARRY (); SET_VFLG (GET_VFLG () | (sign2 != sign)); x_put_word (dataa, val); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* ASLW.W (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_e1d8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = x_get_word (dataa); m68k_areg (regs, srcreg) += 2; { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 sign2; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); sign2 = 0x8000 & val; SET_CFLG (sign != 0); COPY_CARRY (); SET_VFLG (GET_VFLG () | (sign2 != sign)); x_put_word (dataa, val); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* ASLW.W -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_e1e0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; dataa = m68k_areg (regs, srcreg) - 2; { uae_s16 data = x_get_word (dataa); m68k_areg (regs, srcreg) = dataa; { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 sign2; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); sign2 = 0x8000 & val; SET_CFLG (sign != 0); COPY_CARRY (); SET_VFLG (GET_VFLG () | (sign2 != sign)); x_put_word (dataa, val); }}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* ASLW.W (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_e1e8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 data = x_get_word (dataa); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 sign2; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); sign2 = 0x8000 & val; SET_CFLG (sign != 0); COPY_CARRY (); SET_VFLG (GET_VFLG () | (sign2 != sign)); x_put_word (dataa, val); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* ASLW.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_e1f0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; m68k_incpc (2); { dataa = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s16 data = x_get_word (dataa); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 sign2; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); sign2 = 0x8000 & val; SET_CFLG (sign != 0); COPY_CARRY (); SET_VFLG (GET_VFLG () | (sign2 != sign)); x_put_word (dataa, val); }}}}}return 16 * CYCLE_UNIT / 2; } /* ASLW.W (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_e1f8_20)(uae_u32 opcode) { {{ uaecptr dataa = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 data = x_get_word (dataa); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 sign2; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); sign2 = 0x8000 & val; SET_CFLG (sign != 0); COPY_CARRY (); SET_VFLG (GET_VFLG () | (sign2 != sign)); x_put_word (dataa, val); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* ASLW.W (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_e1f9_20)(uae_u32 opcode) { {{ uaecptr dataa = get_long_020_prefetch (2); { uae_s16 data = x_get_word (dataa); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 sign2; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); sign2 = 0x8000 & val; SET_CFLG (sign != 0); COPY_CARRY (); SET_VFLG (GET_VFLG () | (sign2 != sign)); x_put_word (dataa, val); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* LSRW.W (An) */ uae_u32 REGPARAM2 CPUFUNC(op_e2d0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = x_get_word (dataa); { uae_u32 val = (uae_u16)data; uae_u32 carry = val & 1; val >>= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); x_put_word (dataa, val); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* LSRW.W (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_e2d8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = x_get_word (dataa); m68k_areg (regs, srcreg) += 2; { uae_u32 val = (uae_u16)data; uae_u32 carry = val & 1; val >>= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); x_put_word (dataa, val); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* LSRW.W -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_e2e0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; dataa = m68k_areg (regs, srcreg) - 2; { uae_s16 data = x_get_word (dataa); m68k_areg (regs, srcreg) = dataa; { uae_u32 val = (uae_u16)data; uae_u32 carry = val & 1; val >>= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); x_put_word (dataa, val); }}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* LSRW.W (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_e2e8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 data = x_get_word (dataa); { uae_u32 val = (uae_u16)data; uae_u32 carry = val & 1; val >>= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); x_put_word (dataa, val); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* LSRW.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_e2f0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; m68k_incpc (2); { dataa = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s16 data = x_get_word (dataa); { uae_u32 val = (uae_u16)data; uae_u32 carry = val & 1; val >>= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); x_put_word (dataa, val); }}}}}return 16 * CYCLE_UNIT / 2; } /* LSRW.W (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_e2f8_20)(uae_u32 opcode) { {{ uaecptr dataa = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 data = x_get_word (dataa); { uae_u32 val = (uae_u16)data; uae_u32 carry = val & 1; val >>= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); x_put_word (dataa, val); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* LSRW.W (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_e2f9_20)(uae_u32 opcode) { {{ uaecptr dataa = get_long_020_prefetch (2); { uae_s16 data = x_get_word (dataa); { uae_u32 val = (uae_u16)data; uae_u32 carry = val & 1; val >>= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); x_put_word (dataa, val); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* LSLW.W (An) */ uae_u32 REGPARAM2 CPUFUNC(op_e3d0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); x_put_word (dataa, val); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* LSLW.W (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_e3d8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = x_get_word (dataa); m68k_areg (regs, srcreg) += 2; { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); x_put_word (dataa, val); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* LSLW.W -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_e3e0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; dataa = m68k_areg (regs, srcreg) - 2; { uae_s16 data = x_get_word (dataa); m68k_areg (regs, srcreg) = dataa; { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); x_put_word (dataa, val); }}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* LSLW.W (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_e3e8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); x_put_word (dataa, val); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* LSLW.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_e3f0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; m68k_incpc (2); { dataa = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); x_put_word (dataa, val); }}}}}return 16 * CYCLE_UNIT / 2; } /* LSLW.W (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_e3f8_20)(uae_u32 opcode) { {{ uaecptr dataa = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); x_put_word (dataa, val); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* LSLW.W (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_e3f9_20)(uae_u32 opcode) { {{ uaecptr dataa = get_long_020_prefetch (2); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); x_put_word (dataa, val); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* ROXRW.W (An) */ uae_u32 REGPARAM2 CPUFUNC(op_e4d0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (GET_XFLG ()) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); x_put_word (dataa, val); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* ROXRW.W (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_e4d8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = x_get_word (dataa); m68k_areg (regs, srcreg) += 2; { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (GET_XFLG ()) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); x_put_word (dataa, val); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* ROXRW.W -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_e4e0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; dataa = m68k_areg (regs, srcreg) - 2; { uae_s16 data = x_get_word (dataa); m68k_areg (regs, srcreg) = dataa; { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (GET_XFLG ()) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); x_put_word (dataa, val); }}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* ROXRW.W (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_e4e8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (GET_XFLG ()) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); x_put_word (dataa, val); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* ROXRW.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_e4f0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; m68k_incpc (2); { dataa = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (GET_XFLG ()) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); x_put_word (dataa, val); }}}}}return 16 * CYCLE_UNIT / 2; } /* ROXRW.W (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_e4f8_20)(uae_u32 opcode) { {{ uaecptr dataa = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (GET_XFLG ()) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); x_put_word (dataa, val); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* ROXRW.W (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_e4f9_20)(uae_u32 opcode) { {{ uaecptr dataa = get_long_020_prefetch (2); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (GET_XFLG ()) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); x_put_word (dataa, val); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* ROXLW.W (An) */ uae_u32 REGPARAM2 CPUFUNC(op_e5d0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (GET_XFLG ()) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); x_put_word (dataa, val); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* ROXLW.W (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_e5d8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = x_get_word (dataa); m68k_areg (regs, srcreg) += 2; { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (GET_XFLG ()) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); x_put_word (dataa, val); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* ROXLW.W -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_e5e0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; dataa = m68k_areg (regs, srcreg) - 2; { uae_s16 data = x_get_word (dataa); m68k_areg (regs, srcreg) = dataa; { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (GET_XFLG ()) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); x_put_word (dataa, val); }}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* ROXLW.W (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_e5e8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (GET_XFLG ()) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); x_put_word (dataa, val); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* ROXLW.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_e5f0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; m68k_incpc (2); { dataa = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (GET_XFLG ()) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); x_put_word (dataa, val); }}}}}return 16 * CYCLE_UNIT / 2; } /* ROXLW.W (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_e5f8_20)(uae_u32 opcode) { {{ uaecptr dataa = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (GET_XFLG ()) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); x_put_word (dataa, val); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* ROXLW.W (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_e5f9_20)(uae_u32 opcode) { {{ uaecptr dataa = get_long_020_prefetch (2); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (GET_XFLG ()) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); x_put_word (dataa, val); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* RORW.W (An) */ uae_u32 REGPARAM2 CPUFUNC(op_e6d0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (carry) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); x_put_word (dataa, val); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* RORW.W (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_e6d8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = x_get_word (dataa); m68k_areg (regs, srcreg) += 2; { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (carry) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); x_put_word (dataa, val); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* RORW.W -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_e6e0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; dataa = m68k_areg (regs, srcreg) - 2; { uae_s16 data = x_get_word (dataa); m68k_areg (regs, srcreg) = dataa; { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (carry) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); x_put_word (dataa, val); }}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* RORW.W (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_e6e8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (carry) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); x_put_word (dataa, val); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* RORW.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_e6f0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; m68k_incpc (2); { dataa = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (carry) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); x_put_word (dataa, val); }}}}}return 16 * CYCLE_UNIT / 2; } /* RORW.W (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_e6f8_20)(uae_u32 opcode) { {{ uaecptr dataa = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (carry) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); x_put_word (dataa, val); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* RORW.W (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_e6f9_20)(uae_u32 opcode) { {{ uaecptr dataa = get_long_020_prefetch (2); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (carry) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); x_put_word (dataa, val); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* ROLW.W (An) */ uae_u32 REGPARAM2 CPUFUNC(op_e7d0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (carry) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); x_put_word (dataa, val); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* ROLW.W (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_e7d8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); { uae_s16 data = x_get_word (dataa); m68k_areg (regs, srcreg) += 2; { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (carry) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); x_put_word (dataa, val); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* ROLW.W -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_e7e0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; dataa = m68k_areg (regs, srcreg) - 2; { uae_s16 data = x_get_word (dataa); m68k_areg (regs, srcreg) = dataa; { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (carry) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); x_put_word (dataa, val); }}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* ROLW.W (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_e7e8_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (carry) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); x_put_word (dataa, val); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* ROLW.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_e7f0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; m68k_incpc (2); { dataa = get_disp_ea_020 (m68k_areg (regs, srcreg), next_iword_020 ()); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (carry) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); x_put_word (dataa, val); }}}}}return 16 * CYCLE_UNIT / 2; } /* ROLW.W (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_e7f8_20)(uae_u32 opcode) { {{ uaecptr dataa = (uae_s32)(uae_s16)get_word_020_prefetch (2); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (carry) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); x_put_word (dataa, val); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* ROLW.W (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_e7f9_20)(uae_u32 opcode) { {{ uaecptr dataa = get_long_020_prefetch (2); { uae_s16 data = x_get_word (dataa); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (carry) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); x_put_word (dataa, val); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* BFTST.L #.W,Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_e8c0_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_020_prefetch (2); {{ uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp = m68k_dreg(regs, dstreg); offset &= 0x1f; tmp = (tmp << offset) | (tmp >> (32 - offset)); bdata[0] = tmp & ((1 << (32 - width)) - 1); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); }}}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } #endif /* BFTST.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_e8d0_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); }}}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } #endif /* BFTST.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_e8e8_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); }}}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } #endif /* BFTST.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_e8f0_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); }}}}}return 12 * CYCLE_UNIT / 2; } #endif /* BFTST.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_e8f8_20)(uae_u32 opcode) { {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); }}}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } #endif /* BFTST.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_e8f9_20)(uae_u32 opcode) { {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta = get_long_020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); }}}} m68k_incpc (8); return 16 * CYCLE_UNIT / 2; } #endif /* BFTST.L #.W,(d16,PC) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_e8fa_20)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); }}}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } #endif /* BFTST.L #.W,(d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_e8fb_20)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr tmppc; uaecptr dsta; m68k_incpc (4); { tmppc = m68k_getpc (); dsta = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); }}}}}return 12 * CYCLE_UNIT / 2; } #endif /* BFEXTU.L #.W,Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_e9c0_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_020_prefetch (2); {{ uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp = m68k_dreg(regs, dstreg); offset &= 0x1f; tmp = (tmp << offset) | (tmp >> (32 - offset)); bdata[0] = tmp & ((1 << (32 - width)) - 1); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } #endif /* BFEXTU.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_e9d0_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } #endif /* BFEXTU.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_e9e8_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } #endif /* BFEXTU.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_e9f0_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}}}return 12 * CYCLE_UNIT / 2; } #endif /* BFEXTU.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_e9f8_20)(uae_u32 opcode) { {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } #endif /* BFEXTU.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_e9f9_20)(uae_u32 opcode) { {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta = get_long_020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}} m68k_incpc (8); return 16 * CYCLE_UNIT / 2; } #endif /* BFEXTU.L #.W,(d16,PC) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_e9fa_20)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } #endif /* BFEXTU.L #.W,(d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_e9fb_20)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr tmppc; uaecptr dsta; m68k_incpc (4); { tmppc = m68k_getpc (); dsta = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}}}return 12 * CYCLE_UNIT / 2; } #endif /* BFCHG.L #.W,Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_eac0_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_020_prefetch (2); {{ uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp = m68k_dreg(regs, dstreg); offset &= 0x1f; tmp = (tmp << offset) | (tmp >> (32 - offset)); bdata[0] = tmp & ((1 << (32 - width)) - 1); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = tmp ^ (0xffffffffu >> (32 - width)); tmp = bdata[0] | (tmp << (32 - width)); m68k_dreg(regs, dstreg) = (tmp >> offset) | (tmp << (32 - offset)); }}}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } #endif /* BFCHG.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_ead0_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = tmp ^ (0xffffffffu >> (32 - width)); put_bitfield(dsta, bdata, tmp, offset, width); }}}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } #endif /* BFCHG.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_eae8_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = tmp ^ (0xffffffffu >> (32 - width)); put_bitfield(dsta, bdata, tmp, offset, width); }}}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } #endif /* BFCHG.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_eaf0_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = tmp ^ (0xffffffffu >> (32 - width)); put_bitfield(dsta, bdata, tmp, offset, width); }}}}}return 12 * CYCLE_UNIT / 2; } #endif /* BFCHG.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_eaf8_20)(uae_u32 opcode) { {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = tmp ^ (0xffffffffu >> (32 - width)); put_bitfield(dsta, bdata, tmp, offset, width); }}}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } #endif /* BFCHG.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_eaf9_20)(uae_u32 opcode) { {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta = get_long_020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = tmp ^ (0xffffffffu >> (32 - width)); put_bitfield(dsta, bdata, tmp, offset, width); }}}} m68k_incpc (8); return 16 * CYCLE_UNIT / 2; } #endif /* BFEXTS.L #.W,Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_ebc0_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_020_prefetch (2); {{ uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp = m68k_dreg(regs, dstreg); offset &= 0x1f; tmp = (tmp << offset) | (tmp >> (32 - offset)); bdata[0] = tmp & ((1 << (32 - width)) - 1); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp = (uae_s32)tmp >> (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } #endif /* BFEXTS.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_ebd0_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp = (uae_s32)tmp >> (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } #endif /* BFEXTS.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_ebe8_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp = (uae_s32)tmp >> (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } #endif /* BFEXTS.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_ebf0_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp = (uae_s32)tmp >> (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}}}return 12 * CYCLE_UNIT / 2; } #endif /* BFEXTS.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_ebf8_20)(uae_u32 opcode) { {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp = (uae_s32)tmp >> (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } #endif /* BFEXTS.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_ebf9_20)(uae_u32 opcode) { {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta = get_long_020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp = (uae_s32)tmp >> (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}} m68k_incpc (8); return 16 * CYCLE_UNIT / 2; } #endif /* BFEXTS.L #.W,(d16,PC) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_ebfa_20)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp = (uae_s32)tmp >> (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } #endif /* BFEXTS.L #.W,(d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_ebfb_20)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr tmppc; uaecptr dsta; m68k_incpc (4); { tmppc = m68k_getpc (); dsta = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp = (uae_s32)tmp >> (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); m68k_dreg (regs, (extra >> 12) & 7) = tmp; }}}}}return 12 * CYCLE_UNIT / 2; } #endif /* BFCLR.L #.W,Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_ecc0_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_020_prefetch (2); {{ uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp = m68k_dreg(regs, dstreg); offset &= 0x1f; tmp = (tmp << offset) | (tmp >> (32 - offset)); bdata[0] = tmp & ((1 << (32 - width)) - 1); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = 0; tmp = bdata[0] | (tmp << (32 - width)); m68k_dreg(regs, dstreg) = (tmp >> offset) | (tmp << (32 - offset)); }}}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } #endif /* BFCLR.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_ecd0_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = 0; put_bitfield(dsta, bdata, tmp, offset, width); }}}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } #endif /* BFCLR.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_ece8_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = 0; put_bitfield(dsta, bdata, tmp, offset, width); }}}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } #endif /* BFCLR.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_ecf0_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = 0; put_bitfield(dsta, bdata, tmp, offset, width); }}}}}return 12 * CYCLE_UNIT / 2; } #endif /* BFCLR.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_ecf8_20)(uae_u32 opcode) { {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = 0; put_bitfield(dsta, bdata, tmp, offset, width); }}}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } #endif /* BFCLR.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_ecf9_20)(uae_u32 opcode) { {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta = get_long_020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = 0; put_bitfield(dsta, bdata, tmp, offset, width); }}}} m68k_incpc (8); return 16 * CYCLE_UNIT / 2; } #endif /* BFFFO.L #.W,Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_edc0_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_020_prefetch (2); {{ uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp = m68k_dreg(regs, dstreg); offset &= 0x1f; tmp = (tmp << offset) | (tmp >> (32 - offset)); bdata[0] = tmp & ((1 << (32 - width)) - 1); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); { uae_u32 mask = 1 << (width - 1); while (mask) { if (tmp & mask) break; mask >>= 1; offset++; }} m68k_dreg (regs, (extra >> 12) & 7) = offset; }}}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } #endif /* BFFFO.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_edd0_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); { uae_u32 mask = 1 << (width - 1); while (mask) { if (tmp & mask) break; mask >>= 1; offset++; }} m68k_dreg (regs, (extra >> 12) & 7) = offset; }}}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } #endif /* BFFFO.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_ede8_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); { uae_u32 mask = 1 << (width - 1); while (mask) { if (tmp & mask) break; mask >>= 1; offset++; }} m68k_dreg (regs, (extra >> 12) & 7) = offset; }}}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } #endif /* BFFFO.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_edf0_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); { uae_u32 mask = 1 << (width - 1); while (mask) { if (tmp & mask) break; mask >>= 1; offset++; }} m68k_dreg (regs, (extra >> 12) & 7) = offset; }}}}}return 12 * CYCLE_UNIT / 2; } #endif /* BFFFO.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_edf8_20)(uae_u32 opcode) { {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); { uae_u32 mask = 1 << (width - 1); while (mask) { if (tmp & mask) break; mask >>= 1; offset++; }} m68k_dreg (regs, (extra >> 12) & 7) = offset; }}}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } #endif /* BFFFO.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_edf9_20)(uae_u32 opcode) { {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta = get_long_020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); { uae_u32 mask = 1 << (width - 1); while (mask) { if (tmp & mask) break; mask >>= 1; offset++; }} m68k_dreg (regs, (extra >> 12) & 7) = offset; }}}} m68k_incpc (8); return 16 * CYCLE_UNIT / 2; } #endif /* BFFFO.L #.W,(d16,PC) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_edfa_20)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); { uae_u32 mask = 1 << (width - 1); while (mask) { if (tmp & mask) break; mask >>= 1; offset++; }} m68k_dreg (regs, (extra >> 12) & 7) = offset; }}}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } #endif /* BFFFO.L #.W,(d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_edfb_20)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr tmppc; uaecptr dsta; m68k_incpc (4); { tmppc = m68k_getpc (); dsta = get_disp_ea_020 (tmppc, next_iword_020 ()); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); { uae_u32 mask = 1 << (width - 1); while (mask) { if (tmp & mask) break; mask >>= 1; offset++; }} m68k_dreg (regs, (extra >> 12) & 7) = offset; }}}}}return 12 * CYCLE_UNIT / 2; } #endif /* BFSET.L #.W,Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_eec0_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_020_prefetch (2); {{ uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp = m68k_dreg(regs, dstreg); offset &= 0x1f; tmp = (tmp << offset) | (tmp >> (32 - offset)); bdata[0] = tmp & ((1 << (32 - width)) - 1); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = 0xffffffffu >> (32 - width); tmp = bdata[0] | (tmp << (32 - width)); m68k_dreg(regs, dstreg) = (tmp >> offset) | (tmp << (32 - offset)); }}}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } #endif /* BFSET.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_eed0_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = 0xffffffffu >> (32 - width); put_bitfield(dsta, bdata, tmp, offset, width); }}}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } #endif /* BFSET.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_eee8_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = 0xffffffffu >> (32 - width); put_bitfield(dsta, bdata, tmp, offset, width); }}}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } #endif /* BFSET.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_eef0_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = 0xffffffffu >> (32 - width); put_bitfield(dsta, bdata, tmp, offset, width); }}}}}return 12 * CYCLE_UNIT / 2; } #endif /* BFSET.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_eef8_20)(uae_u32 opcode) { {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = 0xffffffffu >> (32 - width); put_bitfield(dsta, bdata, tmp, offset, width); }}}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } #endif /* BFSET.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_eef9_20)(uae_u32 opcode) { {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta = get_long_020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = 0xffffffffu >> (32 - width); put_bitfield(dsta, bdata, tmp, offset, width); }}}} m68k_incpc (8); return 16 * CYCLE_UNIT / 2; } #endif /* BFINS.L #.W,Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_efc0_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_020_prefetch (2); {{ uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp = m68k_dreg(regs, dstreg); offset &= 0x1f; tmp = (tmp << offset) | (tmp >> (32 - offset)); bdata[0] = tmp & ((1 << (32 - width)) - 1); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = m68k_dreg (regs, (extra >> 12) & 7); tmp = tmp & (0xffffffffu >> (32 - width)); SET_NFLG (tmp & (1 << (width - 1)) ? 1 : 0); SET_ZFLG (tmp == 0); tmp = bdata[0] | (tmp << (32 - width)); m68k_dreg(regs, dstreg) = (tmp >> offset) | (tmp << (32 - offset)); }}}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } #endif /* BFINS.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_efd0_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = m68k_dreg (regs, (extra >> 12) & 7); tmp = tmp & (0xffffffffu >> (32 - width)); SET_NFLG (tmp & (1 << (width - 1)) ? 1 : 0); SET_ZFLG (tmp == 0); put_bitfield(dsta, bdata, tmp, offset, width); }}}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } #endif /* BFINS.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_efe8_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = m68k_dreg (regs, (extra >> 12) & 7); tmp = tmp & (0xffffffffu >> (32 - width)); SET_NFLG (tmp & (1 << (width - 1)) ? 1 : 0); SET_ZFLG (tmp == 0); put_bitfield(dsta, bdata, tmp, offset, width); }}}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } #endif /* BFINS.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_eff0_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta; m68k_incpc (4); { dsta = get_disp_ea_020 (m68k_areg (regs, dstreg), next_iword_020 ()); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = m68k_dreg (regs, (extra >> 12) & 7); tmp = tmp & (0xffffffffu >> (32 - width)); SET_NFLG (tmp & (1 << (width - 1)) ? 1 : 0); SET_ZFLG (tmp == 0); put_bitfield(dsta, bdata, tmp, offset, width); }}}}}return 12 * CYCLE_UNIT / 2; } #endif /* BFINS.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_eff8_20)(uae_u32 opcode) { {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta = (uae_s32)(uae_s16)get_word_020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = m68k_dreg (regs, (extra >> 12) & 7); tmp = tmp & (0xffffffffu >> (32 - width)); SET_NFLG (tmp & (1 << (width - 1)) ? 1 : 0); SET_ZFLG (tmp == 0); put_bitfield(dsta, bdata, tmp, offset, width); }}}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } #endif /* BFINS.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_eff9_20)(uae_u32 opcode) { {{ uae_s16 extra = get_word_020_prefetch (2); { uaecptr dsta = get_long_020_prefetch (4); { uae_u32 bdata[2]; uae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f; int width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1; uae_u32 tmp; dsta += offset >> 3; tmp = get_bitfield (dsta, bdata, offset, width); SET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0); tmp >>= (32 - width); SET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0); tmp = m68k_dreg (regs, (extra >> 12) & 7); tmp = tmp & (0xffffffffu >> (32 - width)); SET_NFLG (tmp & (1 << (width - 1)) ? 1 : 0); SET_ZFLG (tmp == 0); put_bitfield(dsta, bdata, tmp, offset, width); }}}} m68k_incpc (8); return 16 * CYCLE_UNIT / 2; } #endif /* FPP.L #.W,Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f200_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { #ifdef FPUEMU { uae_s16 extra = get_word_020_prefetch (2); m68k_incpc (4); fpuop_arithmetic(opcode, extra); } #endif }return 8 * CYCLE_UNIT / 2; } #endif /* FPP.L #.W,An */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f208_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { #ifdef FPUEMU { uae_s16 extra = get_word_020_prefetch (2); m68k_incpc (4); fpuop_arithmetic(opcode, extra); } #endif }return 8 * CYCLE_UNIT / 2; } #endif /* FPP.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f210_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { #ifdef FPUEMU { uae_s16 extra = get_word_020_prefetch (2); m68k_incpc (4); fpuop_arithmetic(opcode, extra); } #endif }return 8 * CYCLE_UNIT / 2; } #endif /* FPP.L #.W,(An)+ */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f218_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { #ifdef FPUEMU { uae_s16 extra = get_word_020_prefetch (2); m68k_incpc (4); fpuop_arithmetic(opcode, extra); } #endif }return 8 * CYCLE_UNIT / 2; } #endif /* FPP.L #.W,-(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f220_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { #ifdef FPUEMU { uae_s16 extra = get_word_020_prefetch (2); m68k_incpc (4); fpuop_arithmetic(opcode, extra); } #endif }return 8 * CYCLE_UNIT / 2; } #endif /* FPP.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f228_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { #ifdef FPUEMU { uae_s16 extra = get_word_020_prefetch (2); m68k_incpc (4); fpuop_arithmetic(opcode, extra); } #endif }return 8 * CYCLE_UNIT / 2; } #endif /* FPP.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f230_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { #ifdef FPUEMU { uae_s16 extra = get_word_020_prefetch (2); m68k_incpc (4); fpuop_arithmetic(opcode, extra); } #endif }return 8 * CYCLE_UNIT / 2; } #endif /* FPP.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f238_20)(uae_u32 opcode) { { #ifdef FPUEMU { uae_s16 extra = get_word_020_prefetch (2); m68k_incpc (4); fpuop_arithmetic(opcode, extra); } #endif }return 8 * CYCLE_UNIT / 2; } #endif /* FPP.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f239_20)(uae_u32 opcode) { { #ifdef FPUEMU { uae_s16 extra = get_word_020_prefetch (2); m68k_incpc (4); fpuop_arithmetic(opcode, extra); } #endif }return 8 * CYCLE_UNIT / 2; } #endif /* FPP.L #.W,(d16,PC) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f23a_20)(uae_u32 opcode) { uae_u32 dstreg = 2; { #ifdef FPUEMU { uae_s16 extra = get_word_020_prefetch (2); m68k_incpc (4); fpuop_arithmetic(opcode, extra); } #endif }return 8 * CYCLE_UNIT / 2; } #endif /* FPP.L #.W,(d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f23b_20)(uae_u32 opcode) { uae_u32 dstreg = 3; { #ifdef FPUEMU { uae_s16 extra = get_word_020_prefetch (2); m68k_incpc (4); fpuop_arithmetic(opcode, extra); } #endif }return 8 * CYCLE_UNIT / 2; } #endif /* FPP.L #.W,#.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f23c_20)(uae_u32 opcode) { { #ifdef FPUEMU { uae_s16 extra = get_word_020_prefetch (2); m68k_incpc (4); fpuop_arithmetic(opcode, extra); } #endif }return 8 * CYCLE_UNIT / 2; } #endif /* FScc.L #.W,Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f240_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { #ifdef FPUEMU { uae_s16 extra = get_word_020_prefetch (2); m68k_incpc (4); fpuop_scc (opcode, extra); } #endif }return 8 * CYCLE_UNIT / 2; } #endif /* FDBcc.L #.W,Dn */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f248_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { #ifdef FPUEMU { uae_s16 extra = get_word_020_prefetch (2); m68k_incpc (4); fpuop_dbcc (opcode, extra); } #endif }return 8 * CYCLE_UNIT / 2; } #endif /* FScc.L #.W,(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f250_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { #ifdef FPUEMU { uae_s16 extra = get_word_020_prefetch (2); m68k_incpc (4); fpuop_scc (opcode, extra); } #endif }return 8 * CYCLE_UNIT / 2; } #endif /* FScc.L #.W,(An)+ */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f258_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { #ifdef FPUEMU { uae_s16 extra = get_word_020_prefetch (2); m68k_incpc (4); fpuop_scc (opcode, extra); } #endif }return 8 * CYCLE_UNIT / 2; } #endif /* FScc.L #.W,-(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f260_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { #ifdef FPUEMU { uae_s16 extra = get_word_020_prefetch (2); m68k_incpc (4); fpuop_scc (opcode, extra); } #endif }return 8 * CYCLE_UNIT / 2; } #endif /* FScc.L #.W,(d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f268_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { #ifdef FPUEMU { uae_s16 extra = get_word_020_prefetch (2); m68k_incpc (4); fpuop_scc (opcode, extra); } #endif }return 8 * CYCLE_UNIT / 2; } #endif /* FScc.L #.W,(d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f270_20)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { #ifdef FPUEMU { uae_s16 extra = get_word_020_prefetch (2); m68k_incpc (4); fpuop_scc (opcode, extra); } #endif }return 8 * CYCLE_UNIT / 2; } #endif /* FScc.L #.W,(xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f278_20)(uae_u32 opcode) { { #ifdef FPUEMU { uae_s16 extra = get_word_020_prefetch (2); m68k_incpc (4); fpuop_scc (opcode, extra); } #endif }return 8 * CYCLE_UNIT / 2; } #endif /* FScc.L #.W,(xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f279_20)(uae_u32 opcode) { { #ifdef FPUEMU { uae_s16 extra = get_word_020_prefetch (2); m68k_incpc (4); fpuop_scc (opcode, extra); } #endif }return 8 * CYCLE_UNIT / 2; } #endif /* FTRAPcc.L #.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f27a_20)(uae_u32 opcode) { { #ifdef FPUEMU uaecptr oldpc = m68k_getpc (); uae_u16 extra = get_word_020_prefetch (2); { uae_s16 dummy = get_word_020_prefetch (4); m68k_incpc (6); fpuop_trapcc (opcode, oldpc, extra); } #endif }return 12 * CYCLE_UNIT / 2; } #endif /* FTRAPcc.L #.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f27b_20)(uae_u32 opcode) { { #ifdef FPUEMU uaecptr oldpc = m68k_getpc (); uae_u16 extra = get_word_020_prefetch (2); { uae_s32 dummy = get_long_020_prefetch (4); m68k_incpc (8); fpuop_trapcc (opcode, oldpc, extra); } #endif }return 16 * CYCLE_UNIT / 2; } #endif /* FTRAPcc.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f27c_20)(uae_u32 opcode) { { #ifdef FPUEMU uaecptr oldpc = m68k_getpc (); uae_u16 extra = get_word_020_prefetch (2); m68k_incpc (4); fpuop_trapcc (opcode, oldpc, extra); #endif }return 8 * CYCLE_UNIT / 2; } #endif /* FBccQ.L #,#.W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f280_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 63); { #ifdef FPUEMU m68k_incpc (2); { uaecptr pc = m68k_getpc (); { uae_s16 extra = get_word_020_prefetch (0); m68k_incpc (2); fpuop_bcc (opcode, pc,extra); }} #endif }return 8 * CYCLE_UNIT / 2; } #endif /* FBccQ.L #,#.L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f2c0_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 63); { #ifdef FPUEMU m68k_incpc (2); { uaecptr pc = m68k_getpc (); { uae_s32 extra = get_long_020_prefetch (0); m68k_incpc (4); fpuop_bcc (opcode, pc,extra); }} #endif }return 12 * CYCLE_UNIT / 2; } #endif /* FSAVE.L (An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f310_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel7119; } { #ifdef FPUEMU m68k_incpc (2); fpuop_save (opcode); #endif }}endlabel7119: ; return 4 * CYCLE_UNIT / 2; } #endif /* FSAVE.L -(An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f320_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel7120; } { #ifdef FPUEMU m68k_incpc (2); fpuop_save (opcode); #endif }}endlabel7120: ; return 4 * CYCLE_UNIT / 2; } #endif /* FSAVE.L (d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f328_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel7121; } { #ifdef FPUEMU m68k_incpc (2); fpuop_save (opcode); #endif }}endlabel7121: ; return 4 * CYCLE_UNIT / 2; } #endif /* FSAVE.L (d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f330_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel7122; } { #ifdef FPUEMU m68k_incpc (2); fpuop_save (opcode); #endif }}endlabel7122: ; return 4 * CYCLE_UNIT / 2; } #endif /* FSAVE.L (xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f338_20)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel7123; } { #ifdef FPUEMU m68k_incpc (2); fpuop_save (opcode); #endif }}endlabel7123: ; return 4 * CYCLE_UNIT / 2; } #endif /* FSAVE.L (xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f339_20)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel7124; } { #ifdef FPUEMU m68k_incpc (2); fpuop_save (opcode); #endif }}endlabel7124: ; return 4 * CYCLE_UNIT / 2; } #endif /* FRESTORE.L (An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f350_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel7125; } { #ifdef FPUEMU m68k_incpc (2); fpuop_restore (opcode); #endif }}endlabel7125: ; return 4 * CYCLE_UNIT / 2; } #endif /* FRESTORE.L (An)+ */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f358_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel7126; } { #ifdef FPUEMU m68k_incpc (2); fpuop_restore (opcode); #endif }}endlabel7126: ; return 4 * CYCLE_UNIT / 2; } #endif /* FRESTORE.L (d16,An) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f368_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel7127; } { #ifdef FPUEMU m68k_incpc (2); fpuop_restore (opcode); #endif }}endlabel7127: ; return 4 * CYCLE_UNIT / 2; } #endif /* FRESTORE.L (d8,An,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f370_20)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel7128; } { #ifdef FPUEMU m68k_incpc (2); fpuop_restore (opcode); #endif }}endlabel7128: ; return 4 * CYCLE_UNIT / 2; } #endif /* FRESTORE.L (xxx).W */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f378_20)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel7129; } { #ifdef FPUEMU m68k_incpc (2); fpuop_restore (opcode); #endif }}endlabel7129: ; return 4 * CYCLE_UNIT / 2; } #endif /* FRESTORE.L (xxx).L */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f379_20)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel7130; } { #ifdef FPUEMU m68k_incpc (2); fpuop_restore (opcode); #endif }}endlabel7130: ; return 4 * CYCLE_UNIT / 2; } #endif /* FRESTORE.L (d16,PC) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f37a_20)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel7131; } { #ifdef FPUEMU m68k_incpc (2); fpuop_restore (opcode); #endif }}endlabel7131: ; return 4 * CYCLE_UNIT / 2; } #endif /* FRESTORE.L (d8,PC,Xn) */ #ifndef CPUEMU_68000_ONLY uae_u32 REGPARAM2 CPUFUNC(op_f37b_20)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel7132; } { #ifdef FPUEMU m68k_incpc (2); fpuop_restore (opcode); #endif }}endlabel7132: ; return 4 * CYCLE_UNIT / 2; } #endif #endif fs-uae-2.2.3+dfsg/gensrc/blit.h0000644000175000017500000002735612162366654016455 0ustar glaubitzglaubitzSTATIC_INLINE uae_u32 blit_func(uae_u32 srca, uae_u32 srcb, uae_u32 srcc, uae_u8 mt) { switch(mt){ case 0x0: return 0; case 0x1: return ~(srca | srcb | srcc); case 0x2: return (srcc & ~(srca | srcb)); case 0x3: return ~(srca | srcb); case 0x4: return (srcb & ~(srca | srcc)); case 0x5: return ~(srca | srcc); case 0x6: return (~srca & (srcb ^ srcc)); case 0x7: return ~(srca | (srcb & srcc)); case 0x8: return (~srca & srcb & srcc); case 0x9: return ~(srca | (srcb ^ srcc)); case 0xa: return (~srca & srcc); case 0xb: return ~(srca | (srcb & ~srcc)); case 0xc: return (~srca & srcb); case 0xd: return ~(srca | (~srcb & srcc)); case 0xe: return (~srca & (srcb | srcc)); case 0xf: return ~srca; case 0x10: return (srca & ~(srcb | srcc)); case 0x11: return ~(srcb | srcc); case 0x12: return (~srcb & (srca ^ srcc)); case 0x13: return ~(srcb | (srca & srcc)); case 0x14: return (~srcc & (srca ^ srcb)); case 0x15: return ~(srcc | (srca & srcb)); case 0x16: return (srca ^ ((srca & srcb) | (srcb ^ srcc))); case 0x17: return ~(srca ^ ((srca ^ srcb) & (srca ^ srcc))); case 0x18: return ((srca ^ srcb) & (srca ^ srcc)); case 0x19: return (srcb ^ (~srcc | (srca & srcb))); case 0x1a: return (srca ^ (srcc | (srca & srcb))); case 0x1b: return (srca ^ (srcc | ~(srca ^ srcb))); case 0x1c: return (srca ^ (srcb | (srca & srcc))); case 0x1d: return (srca ^ (srcb | ~(srca ^ srcc))); case 0x1e: return (srca ^ (srcb | srcc)); case 0x1f: return ~(srca & (srcb | srcc)); case 0x20: return (srca & ~srcb & srcc); case 0x21: return ~(srcb | (srca ^ srcc)); case 0x22: return (~srcb & srcc); case 0x23: return ~(srcb | (srca & ~srcc)); case 0x24: return ((srca ^ srcb) & (srcb ^ srcc)); case 0x25: return (srca ^ (~srcc | (srca & srcb))); case 0x26: return (srcb ^ (srcc | (srca & srcb))); case 0x27: return ~(srca ^ (srcc & (srca ^ srcb))); case 0x28: return (srcc & (srca ^ srcb)); case 0x29: return ~(srca ^ srcb ^ (srcc | (srca & srcb))); case 0x2a: return (srcc & ~(srca & srcb)); case 0x2b: return ~(srca ^ ((srca ^ srcb) & (srcb ^ srcc))); case 0x2c: return (srcb ^ (srca & (srcb | srcc))); case 0x2d: return (srca ^ (srcb | ~srcc)); case 0x2e: return (srca ^ (srcb | (srca ^ srcc))); case 0x2f: return ~(srca & (srcb | ~srcc)); case 0x30: return (srca & ~srcb); case 0x31: return ~(srcb | (~srca & srcc)); case 0x32: return (~srcb & (srca | srcc)); case 0x33: return ~srcb; case 0x34: return (srcb ^ (srca | (srcb & srcc))); case 0x35: return (srcb ^ (srca | ~(srcb ^ srcc))); case 0x36: return (srcb ^ (srca | srcc)); case 0x37: return ~(srcb & (srca | srcc)); case 0x38: return (srca ^ (srcb & (srca | srcc))); case 0x39: return (srcb ^ (srca | ~srcc)); case 0x3a: return (srcb ^ (srca | (srcb ^ srcc))); case 0x3b: return ~(srcb & (srca | ~srcc)); case 0x3c: return (srca ^ srcb); case 0x3d: return (srca ^ (srcb | ~(srca | srcc))); case 0x3e: return (srca ^ (srcb | (srca ^ (srca | srcc)))); case 0x3f: return ~(srca & srcb); case 0x40: return (srca & srcb & ~srcc); case 0x41: return ~(srcc | (srca ^ srcb)); case 0x42: return ((srca ^ srcc) & (srcb ^ srcc)); case 0x43: return (srca ^ (~srcb | (srca & srcc))); case 0x44: return (srcb & ~srcc); case 0x45: return ~(srcc | (srca & ~srcb)); case 0x46: return (srcc ^ (srcb | (srca & srcc))); case 0x47: return ~(srca ^ (srcb & (srca ^ srcc))); case 0x48: return (srcb & (srca ^ srcc)); case 0x49: return ~(srca ^ srcc ^ (srcb | (srca & srcc))); case 0x4a: return (srcc ^ (srca & (srcb | srcc))); case 0x4b: return (srca ^ (~srcb | srcc)); case 0x4c: return (srcb & ~(srca & srcc)); case 0x4d: return (srca ^ ((srca ^ srcb) | ~(srca ^ srcc))); case 0x4e: return (srca ^ (srcc | (srca ^ srcb))); case 0x4f: return ~(srca & (~srcb | srcc)); case 0x50: return (srca & ~srcc); case 0x51: return ~(srcc | (~srca & srcb)); case 0x52: return (srcc ^ (srca | (srcb & srcc))); case 0x53: return ~(srcb ^ (srca & (srcb ^ srcc))); case 0x54: return (~srcc & (srca | srcb)); case 0x55: return ~srcc; case 0x56: return (srcc ^ (srca | srcb)); case 0x57: return ~(srcc & (srca | srcb)); case 0x58: return (srca ^ (srcc & (srca | srcb))); case 0x59: return (srcc ^ (srca | ~srcb)); case 0x5a: return (srca ^ srcc); case 0x5b: return (srca ^ (srcc | ~(srca | srcb))); case 0x5c: return (srcc ^ (srca | (srcb ^ srcc))); case 0x5d: return ~(srcc & (srca | ~srcb)); case 0x5e: return (srca ^ (srcc | (srca ^ (srca | srcb)))); case 0x5f: return ~(srca & srcc); case 0x60: return (srca & (srcb ^ srcc)); case 0x61: return ~(srcb ^ srcc ^ (srca | (srcb & srcc))); case 0x62: return (srcc ^ (srcb & (srca | srcc))); case 0x63: return (srcb ^ (~srca | srcc)); case 0x64: return (srcb ^ (srcc & (srca | srcb))); case 0x65: return (srcc ^ (~srca | srcb)); case 0x66: return (srcb ^ srcc); case 0x67: return (srcb ^ (srcc | ~(srca | srcb))); case 0x68: return ((srca & srcb) ^ (srcc & (srca | srcb))); case 0x69: return ~(srca ^ srcb ^ srcc); case 0x6a: return (srcc ^ (srca & srcb)); case 0x6b: return ~(srca ^ srcb ^ (srcc & (srca | srcb))); case 0x6c: return (srcb ^ (srca & srcc)); case 0x6d: return ~(srca ^ srcc ^ (srcb & (srca | srcc))); case 0x6e: return ((~srca & srcb) | (srcb ^ srcc)); case 0x6f: return (~srca | (srcb ^ srcc)); case 0x70: return (srca & ~(srcb & srcc)); case 0x71: return ~(srca ^ ((srca ^ srcb) | (srca ^ srcc))); case 0x72: return (srcb ^ (srcc | (srca ^ srcb))); case 0x73: return ~(srcb & (~srca | srcc)); case 0x74: return (srcc ^ (srcb | (srca ^ srcc))); case 0x75: return ~(srcc & (~srca | srcb)); case 0x76: return (srcb ^ (srcc | (srca ^ (srca & srcb)))); case 0x77: return ~(srcb & srcc); case 0x78: return (srca ^ (srcb & srcc)); case 0x79: return ~(srcb ^ srcc ^ (srca & (srcb | srcc))); case 0x7a: return ((srca & ~srcb) | (srca ^ srcc)); case 0x7b: return (~srcb | (srca ^ srcc)); case 0x7c: return ((srca ^ srcb) | (srca & ~srcc)); case 0x7d: return (~srcc | (srca ^ srcb)); case 0x7e: return ((srca ^ srcb) | (srca ^ srcc)); case 0x7f: return ~(srca & srcb & srcc); case 0x80: return (srca & srcb & srcc); case 0x81: return ~((srca ^ srcb) | (srca ^ srcc)); case 0x82: return (srcc & ~(srca ^ srcb)); case 0x83: return (srca ^ (~srcb | (srca & ~srcc))); case 0x84: return (srcb & ~(srca ^ srcc)); case 0x85: return (srca ^ (~srcc | (srca & ~srcb))); case 0x86: return (srcb ^ srcc ^ (srca & (srcb | srcc))); case 0x87: return ~(srca ^ (srcb & srcc)); case 0x88: return (srcb & srcc); case 0x89: return (srcb ^ (~srcc & (~srca | srcb))); case 0x8a: return (srcc & (~srca | srcb)); case 0x8b: return (srca ^ (~srcb | (srca ^ srcc))); case 0x8c: return (srcb & (~srca | srcc)); case 0x8d: return (srca ^ (~srcc | (srca ^ srcb))); case 0x8e: return (srca ^ ((srca ^ srcb) | (srca ^ srcc))); case 0x8f: return (~srca | (srcb & srcc)); case 0x90: return (srca & ~(srcb ^ srcc)); case 0x91: return (srcb ^ (~srcc | (~srca & srcb))); case 0x92: return (srca ^ srcc ^ (srcb & (srca | srcc))); case 0x93: return ~(srcb ^ (srca & srcc)); case 0x94: return (srca ^ srcb ^ (srcc & (srca | srcb))); case 0x95: return ~(srcc ^ (srca & srcb)); case 0x96: return (srca ^ srcb ^ srcc); case 0x97: return (srca ^ srcb ^ (srcc | ~(srca | srcb))); case 0x98: return (srcb ^ (~srcc & (srca | srcb))); case 0x99: return ~(srcb ^ srcc); case 0x9a: return (srcc ^ (srca & ~srcb)); case 0x9b: return ~(srcb ^ (srcc & (srca | srcb))); case 0x9c: return (srcb ^ (srca & ~srcc)); case 0x9d: return ~(srcc ^ (srcb & (srca | srcc))); case 0x9e: return (srcb ^ srcc ^ (srca | (srcb & srcc))); case 0x9f: return ~(srca & (srcb ^ srcc)); case 0xa0: return (srca & srcc); case 0xa1: return (srca ^ (~srcc & (srca | ~srcb))); case 0xa2: return (srcc & (srca | ~srcb)); case 0xa3: return (srcb ^ (~srca | (srcb ^ srcc))); case 0xa4: return (srca ^ (~srcc & (srca | srcb))); case 0xa5: return ~(srca ^ srcc); case 0xa6: return (srcc ^ (~srca & srcb)); case 0xa7: return ~(srca ^ (srcc & (srca | srcb))); case 0xa8: return (srcc & (srca | srcb)); case 0xa9: return ~(srcc ^ (srca | srcb)); case 0xaa: return srcc; case 0xab: return (srcc | ~(srca | srcb)); case 0xac: return (srcb ^ (srca & (srcb ^ srcc))); case 0xad: return ~(srcc ^ (srca | (srcb & srcc))); case 0xae: return (srcc | (~srca & srcb)); case 0xaf: return (~srca | srcc); case 0xb0: return (srca & (~srcb | srcc)); case 0xb1: return ~(srca ^ (srcc | (srca ^ srcb))); case 0xb2: return (srca ^ ((srca ^ srcc) & (srcb ^ srcc))); case 0xb3: return (~srcb | (srca & srcc)); case 0xb4: return (srca ^ (srcb & ~srcc)); case 0xb5: return ~(srcc ^ (srca & (srcb | srcc))); case 0xb6: return (srca ^ srcc ^ (srcb | (srca & srcc))); case 0xb7: return ~(srcb & (srca ^ srcc)); case 0xb8: return (srca ^ (srcb & (srca ^ srcc))); case 0xb9: return ~(srcc ^ (srcb | (srca & srcc))); case 0xba: return (srcc | (srca & ~srcb)); case 0xbb: return (~srcb | srcc); case 0xbc: return ((srca ^ srcb) | (srca & srcc)); case 0xbd: return ((srca ^ srcb) | ~(srca ^ srcc)); case 0xbe: return (srcc | (srca ^ srcb)); case 0xbf: return (srcc | ~(srca & srcb)); case 0xc0: return (srca & srcb); case 0xc1: return (srca ^ (~srcb & (srca | ~srcc))); case 0xc2: return (srca ^ (~srcb & (srca | srcc))); case 0xc3: return ~(srca ^ srcb); case 0xc4: return (srcb & (srca | ~srcc)); case 0xc5: return ~(srcb ^ (srca | (srcb ^ srcc))); case 0xc6: return (srcb ^ (~srca & srcc)); case 0xc7: return ~(srca ^ (srcb & (srca | srcc))); case 0xc8: return (srcb & (srca | srcc)); case 0xc9: return ~(srcb ^ (srca | srcc)); case 0xca: return (srcc ^ (srca & (srcb ^ srcc))); case 0xcb: return ~(srcb ^ (srca | (srcb & srcc))); case 0xcc: return srcb; case 0xcd: return (srcb | ~(srca | srcc)); case 0xce: return (srcb | (~srca & srcc)); case 0xcf: return (~srca | srcb); case 0xd0: return (srca & (srcb | ~srcc)); case 0xd1: return ~(srca ^ (srcb | (srca ^ srcc))); case 0xd2: return (srca ^ (~srcb & srcc)); case 0xd3: return ~(srcb ^ (srca & (srcb | srcc))); case 0xd4: return (srca ^ ((srca ^ srcb) & (srcb ^ srcc))); case 0xd5: return (~srcc | (srca & srcb)); case 0xd6: return (srca ^ srcb ^ (srcc | (srca & srcb))); case 0xd7: return ~(srcc & (srca ^ srcb)); case 0xd8: return (srca ^ (srcc & (srca ^ srcb))); case 0xd9: return ~(srcb ^ (srcc | (srca & srcb))); case 0xda: return ((srca & srcb) | (srca ^ srcc)); case 0xdb: return ~((srca ^ srcb) & (srcb ^ srcc)); case 0xdc: return (srcb | (srca & ~srcc)); case 0xdd: return (srcb | ~srcc); case 0xde: return (srcb | (srca ^ srcc)); case 0xdf: return (srcb | ~(srca & srcc)); case 0xe0: return (srca & (srcb | srcc)); case 0xe1: return ~(srca ^ (srcb | srcc)); case 0xe2: return (srcc ^ (srcb & (srca ^ srcc))); case 0xe3: return ~(srca ^ (srcb | (srca & srcc))); case 0xe4: return (srcb ^ (srcc & (srca ^ srcb))); case 0xe5: return ~(srca ^ (srcc | (srca & srcb))); case 0xe6: return ((srca & srcb) | (srcb ^ srcc)); case 0xe7: return ~((srca ^ srcb) & (srca ^ srcc)); case 0xe8: return (srca ^ ((srca ^ srcb) & (srca ^ srcc))); case 0xe9: return (srca ^ srcb ^ (~srcc | (srca & srcb))); case 0xea: return (srcc | (srca & srcb)); case 0xeb: return (srcc | ~(srca ^ srcb)); case 0xec: return (srcb | (srca & srcc)); case 0xed: return (srcb | ~(srca ^ srcc)); case 0xee: return (srcb | srcc); case 0xef: return (~srca | srcb | srcc); case 0xf0: return srca; case 0xf1: return (srca | ~(srcb | srcc)); case 0xf2: return (srca | (~srcb & srcc)); case 0xf3: return (srca | ~srcb); case 0xf4: return (srca | (srcb & ~srcc)); case 0xf5: return (srca | ~srcc); case 0xf6: return (srca | (srcb ^ srcc)); case 0xf7: return (srca | ~(srcb & srcc)); case 0xf8: return (srca | (srcb & srcc)); case 0xf9: return (srca | ~(srcb ^ srcc)); case 0xfa: return (srca | srcc); case 0xfb: return (srca | ~srcb | srcc); case 0xfc: return (srca | srcb); case 0xfd: return (srca | srcb | ~srcc); case 0xfe: return (srca | srcb | srcc); case 0xff: return 0xFFFFFFFF; } return 0; } fs-uae-2.2.3+dfsg/gensrc/cpuemu_11.cpp0000644000175000017500000351734712162366654017664 0ustar glaubitzglaubitz#include "sysconfig.h" #include "sysdeps.h" #include "options.h" #include "uae/memory.h" #include "custom.h" #include "events.h" #include "newcpu.h" #include "cpu_prefetch.h" #include "cputbl.h" #include "cpummu.h" #define CPUFUNC(x) x##_ff #define SET_CFLG_ALWAYS(x) SET_CFLG(x) #define SET_NFLG_ALWAYS(x) SET_NFLG(x) #ifdef NOFLAGS #include "noflags.h" #endif #if !defined(PART_1) && !defined(PART_2) && !defined(PART_3) && !defined(PART_4) && !defined(PART_5) && !defined(PART_6) && !defined(PART_7) && !defined(PART_8) #define PART_1 1 #define PART_2 1 #define PART_3 1 #define PART_4 1 #define PART_5 1 #define PART_6 1 #define PART_7 1 #define PART_8 1 #endif #ifdef PART_1 /* OR.B #.B,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0000_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_prefetch (4); { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* OR.B #.B,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0010_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); put_byte (dsta, src); }}}} m68k_incpc (4); return 20 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* OR.B #.B,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0018_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); put_byte (dsta, src); }}}} m68k_incpc (4); return 20 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* OR.B #.B,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0020_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_prefetch (4); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) = dsta; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); put_byte (dsta, src); }}}} m68k_incpc (4); return 22 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* OR.B #.B,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0028_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (6); { uae_s8 dst = get_byte (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (8); put_byte (dsta, src); }}}} m68k_incpc (6); return 24 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* OR.B #.B,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0030_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_prefetch (4); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (6)); { uae_s8 dst = get_byte (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (8); put_byte (dsta, src); }}}} m68k_incpc (6); return 26 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* OR.B #.B,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_0038_11)(uae_u32 opcode) { {{ uae_s8 src = (uae_u8)get_word_prefetch (4); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (6); { uae_s8 dst = get_byte (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (8); put_byte (dsta, src); }}}} m68k_incpc (6); return 24 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* OR.B #.B,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_0039_11)(uae_u32 opcode) { {{ uae_s8 src = (uae_u8)get_word_prefetch (4); { uaecptr dsta = get_long_prefetch (6); { uae_s8 dst = get_byte (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (10); put_byte (dsta, src); }}}} m68k_incpc (8); return 28 * CYCLE_UNIT / 2; } /* 24 (5/1) */ /* ORSR.B #.W */ uae_u32 REGPARAM2 CPUFUNC(op_003c_11)(uae_u32 opcode) { { MakeSR (); { uae_s16 src = get_word_prefetch (4); get_wordi (6); src &= 0xFF; regs.ir = regs.irc; get_word_prefetch (6); regs.sr |= src; MakeFromSR (); }} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* OR.W #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0040_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_prefetch (4); { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* OR.W #.W,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0050_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2187; } {{ uae_s16 dst = get_word (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); put_word (dsta, src); }}}}} m68k_incpc (4); endlabel2187: ; return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* OR.W #.W,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0058_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2188; } {{ uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) += 2; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); put_word (dsta, src); }}}}} m68k_incpc (4); endlabel2188: ; return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* OR.W #.W,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0060_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2189; } {{ uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) = dsta; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); put_word (dsta, src); }}}}} m68k_incpc (4); endlabel2189: ; return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* OR.W #.W,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0068_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (6); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2190; } {{ uae_s16 dst = get_word (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (8); put_word (dsta, src); }}}}} m68k_incpc (6); endlabel2190: ; return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* OR.W #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0070_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (6)); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2191; } {{ uae_s16 dst = get_word (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (8); put_word (dsta, src); }}}}} m68k_incpc (6); endlabel2191: ; return 22 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* OR.W #.W,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_0078_11)(uae_u32 opcode) { {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (6); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2192; } {{ uae_s16 dst = get_word (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (8); put_word (dsta, src); }}}}} m68k_incpc (6); endlabel2192: ; return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* OR.W #.W,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_0079_11)(uae_u32 opcode) { {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta = get_long_prefetch (6); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2193; } {{ uae_s16 dst = get_word (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (10); put_word (dsta, src); }}}}} m68k_incpc (8); endlabel2193: ; return 24 * CYCLE_UNIT / 2; } /* 24 (5/1) */ /* ORSR.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_007c_11)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel2194; } { MakeSR (); { uae_s16 src = get_word_prefetch (4); get_wordi (6); regs.ir = regs.irc; get_word_prefetch (6); regs.sr |= src; MakeFromSR (); }}} m68k_incpc (4); endlabel2194: ; return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* OR.L #.L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0080_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_prefetch (4); { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (8); m68k_dreg (regs, dstreg) = (src); }}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* OR.L #.L,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0090_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2196; } {{ uae_s32 dst = get_long (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (8); put_long (dsta, src); }}}}} m68k_incpc (6); endlabel2196: ; return 28 * CYCLE_UNIT / 2; } /* 28 (5/2) */ /* OR.L #.L,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0098_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2197; } {{ uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) += 4; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (8); put_long (dsta, src); }}}}} m68k_incpc (6); endlabel2197: ; return 28 * CYCLE_UNIT / 2; } /* 28 (5/2) */ /* OR.L #.L,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_00a0_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_prefetch (4); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2198; } {{ uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) = dsta; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (8); put_long (dsta, src); }}}}} m68k_incpc (6); endlabel2198: ; return 30 * CYCLE_UNIT / 2; } /* 28 (5/2) */ /* OR.L #.L,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_00a8_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (8); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2199; } {{ uae_s32 dst = get_long (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (10); put_long (dsta, src); }}}}} m68k_incpc (8); endlabel2199: ; return 32 * CYCLE_UNIT / 2; } /* 32 (6/2) */ /* OR.L #.L,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_00b0_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_prefetch (4); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (8)); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2200; } {{ uae_s32 dst = get_long (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (10); put_long (dsta, src); }}}}} m68k_incpc (8); endlabel2200: ; return 34 * CYCLE_UNIT / 2; } /* 32 (6/2) */ /* OR.L #.L,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_00b8_11)(uae_u32 opcode) { {{ uae_s32 src = get_long_prefetch (4); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (8); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2201; } {{ uae_s32 dst = get_long (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (10); put_long (dsta, src); }}}}} m68k_incpc (8); endlabel2201: ; return 32 * CYCLE_UNIT / 2; } /* 32 (6/2) */ /* OR.L #.L,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_00b9_11)(uae_u32 opcode) { {{ uae_s32 src = get_long_prefetch (4); { uaecptr dsta = get_long_prefetch (8); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2202; } {{ uae_s32 dst = get_long (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (12); put_long (dsta, src); }}}}} m68k_incpc (10); endlabel2202: ; return 36 * CYCLE_UNIT / 2; } /* 36 (7/2) */ /* BTST.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0100_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); src &= 31; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* MVPMR.W (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0108_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; { uaecptr memp = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); { uae_u16 val = (get_byte (memp) << 8) + get_byte (memp + 2); regs.ir = regs.irc; get_word_prefetch (6); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* BTST.B Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0110_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); regs.ir = regs.irc; regs.irc = 0; { uae_s8 dst = get_byte (dsta); get_word_prefetch (4); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* BTST.B Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0118_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); regs.ir = regs.irc; regs.irc = 0; { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; get_word_prefetch (4); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* BTST.B Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0120_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; regs.ir = regs.irc; regs.irc = 0; { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) = dsta; get_word_prefetch (4); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* BTST.B Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0128_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (4); regs.ir = regs.irc; regs.irc = 0; { uae_s8 dst = get_byte (dsta); get_word_prefetch (6); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* BTST.B Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0130_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (4)); regs.ir = regs.irc; regs.irc = 0; { uae_s8 dst = get_byte (dsta); get_word_prefetch (6); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpc (4); return 14 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* BTST.B Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_0138_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (4); regs.ir = regs.irc; regs.irc = 0; { uae_s8 dst = get_byte (dsta); get_word_prefetch (6); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* BTST.B Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_0139_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_prefetch (4); regs.ir = regs.irc; regs.irc = 0; { uae_s8 dst = get_byte (dsta); get_word_prefetch (8); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* BTST.B Dn,(d16,PC) */ uae_u32 REGPARAM2 CPUFUNC(op_013a_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = 2; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_getpc () + 2; dsta += (uae_s32)(uae_s16)get_word_prefetch (4); regs.ir = regs.irc; regs.irc = 0; { uae_s8 dst = get_byte (dsta); get_word_prefetch (6); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* BTST.B Dn,(d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_013b_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = 3; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr tmppc; uaecptr dsta; tmppc = m68k_getpc () + 2; dsta = get_disp_ea_000 (tmppc, get_word_prefetch (4)); regs.ir = regs.irc; regs.irc = 0; { uae_s8 dst = get_byte (dsta); get_word_prefetch (6); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpc (4); return 14 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* BTST.B Dn,#.B */ uae_u32 REGPARAM2 CPUFUNC(op_013c_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = (uae_u8)get_word_prefetch (4); regs.ir = regs.irc; get_word_prefetch (6); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* BCHG.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0140_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); src &= 31; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); m68k_dreg (regs, dstreg) = (dst); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* MVPMR.L (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0148_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; { uaecptr memp = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); { uae_u32 val = (get_byte (memp) << 24) + (get_byte (memp + 2) << 16) + (get_byte (memp + 4) << 8) + get_byte (memp + 6); regs.ir = regs.irc; get_word_prefetch (6); m68k_dreg (regs, dstreg) = (val); }} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* 24 (6/0) */ /* BCHG.B Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0150_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); regs.ir = regs.irc; regs.irc = 0; { uae_s8 dst = get_byte (dsta); get_word_prefetch (4); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); put_byte (dsta, dst); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* BCHG.B Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0158_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); regs.ir = regs.irc; regs.irc = 0; { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; get_word_prefetch (4); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); put_byte (dsta, dst); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* BCHG.B Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0160_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; regs.ir = regs.irc; regs.irc = 0; { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) = dsta; get_word_prefetch (4); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); put_byte (dsta, dst); }}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* BCHG.B Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0168_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (4); regs.ir = regs.irc; regs.irc = 0; { uae_s8 dst = get_byte (dsta); get_word_prefetch (6); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); put_byte (dsta, dst); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* BCHG.B Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0170_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (4)); regs.ir = regs.irc; regs.irc = 0; { uae_s8 dst = get_byte (dsta); get_word_prefetch (6); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); put_byte (dsta, dst); }}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* BCHG.B Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_0178_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (4); regs.ir = regs.irc; regs.irc = 0; { uae_s8 dst = get_byte (dsta); get_word_prefetch (6); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); put_byte (dsta, dst); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* BCHG.B Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_0179_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_prefetch (4); regs.ir = regs.irc; regs.irc = 0; { uae_s8 dst = get_byte (dsta); get_word_prefetch (8); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); put_byte (dsta, dst); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* BCHG.B Dn,(d16,PC) */ uae_u32 REGPARAM2 CPUFUNC(op_017a_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = 2; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_getpc () + 2; dsta += (uae_s32)(uae_s16)get_word_prefetch (4); regs.ir = regs.irc; regs.irc = 0; { uae_s8 dst = get_byte (dsta); get_word_prefetch (6); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); put_byte (dsta, dst); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* BCHG.B Dn,(d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_017b_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = 3; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr tmppc; uaecptr dsta; tmppc = m68k_getpc () + 2; dsta = get_disp_ea_000 (tmppc, get_word_prefetch (4)); regs.ir = regs.irc; regs.irc = 0; { uae_s8 dst = get_byte (dsta); get_word_prefetch (6); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); put_byte (dsta, dst); }}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* BCLR.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0180_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); src &= 31; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); m68k_dreg (regs, dstreg) = (dst); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* MVPRM.W Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0188_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); uaecptr memp = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (4); put_byte (memp, src >> 8); put_byte (memp + 2, src); regs.ir = regs.irc; get_word_prefetch (6); }} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* 16 (2/2) */ /* BCLR.B Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0190_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); regs.ir = regs.irc; regs.irc = 0; { uae_s8 dst = get_byte (dsta); get_word_prefetch (4); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); put_byte (dsta, dst); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* BCLR.B Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0198_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); regs.ir = regs.irc; regs.irc = 0; { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; get_word_prefetch (4); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); put_byte (dsta, dst); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* BCLR.B Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_01a0_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; regs.ir = regs.irc; regs.irc = 0; { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) = dsta; get_word_prefetch (4); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); put_byte (dsta, dst); }}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* BCLR.B Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_01a8_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (4); regs.ir = regs.irc; regs.irc = 0; { uae_s8 dst = get_byte (dsta); get_word_prefetch (6); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); put_byte (dsta, dst); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* BCLR.B Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_01b0_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (4)); regs.ir = regs.irc; regs.irc = 0; { uae_s8 dst = get_byte (dsta); get_word_prefetch (6); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); put_byte (dsta, dst); }}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* BCLR.B Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_01b8_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (4); regs.ir = regs.irc; regs.irc = 0; { uae_s8 dst = get_byte (dsta); get_word_prefetch (6); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); put_byte (dsta, dst); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* BCLR.B Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_01b9_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_prefetch (4); regs.ir = regs.irc; regs.irc = 0; { uae_s8 dst = get_byte (dsta); get_word_prefetch (8); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); put_byte (dsta, dst); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* BCLR.B Dn,(d16,PC) */ uae_u32 REGPARAM2 CPUFUNC(op_01ba_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = 2; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_getpc () + 2; dsta += (uae_s32)(uae_s16)get_word_prefetch (4); regs.ir = regs.irc; regs.irc = 0; { uae_s8 dst = get_byte (dsta); get_word_prefetch (6); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); put_byte (dsta, dst); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* BCLR.B Dn,(d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_01bb_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = 3; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr tmppc; uaecptr dsta; tmppc = m68k_getpc () + 2; dsta = get_disp_ea_000 (tmppc, get_word_prefetch (4)); regs.ir = regs.irc; regs.irc = 0; { uae_s8 dst = get_byte (dsta); get_word_prefetch (6); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); put_byte (dsta, dst); }}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* BSET.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_01c0_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); src &= 31; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); m68k_dreg (regs, dstreg) = (dst); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* MVPRM.L Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_01c8_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); uaecptr memp = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (4); put_byte (memp, src >> 24); put_byte (memp + 2, src >> 16); put_byte (memp + 4, src >> 8); put_byte (memp + 6, src); regs.ir = regs.irc; get_word_prefetch (6); }} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* 24 (2/4) */ /* BSET.B Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_01d0_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); regs.ir = regs.irc; regs.irc = 0; { uae_s8 dst = get_byte (dsta); get_word_prefetch (4); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); put_byte (dsta, dst); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* BSET.B Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_01d8_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); regs.ir = regs.irc; regs.irc = 0; { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; get_word_prefetch (4); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); put_byte (dsta, dst); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* BSET.B Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_01e0_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; regs.ir = regs.irc; regs.irc = 0; { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) = dsta; get_word_prefetch (4); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); put_byte (dsta, dst); }}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* BSET.B Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_01e8_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (4); regs.ir = regs.irc; regs.irc = 0; { uae_s8 dst = get_byte (dsta); get_word_prefetch (6); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); put_byte (dsta, dst); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* BSET.B Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_01f0_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (4)); regs.ir = regs.irc; regs.irc = 0; { uae_s8 dst = get_byte (dsta); get_word_prefetch (6); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); put_byte (dsta, dst); }}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* BSET.B Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_01f8_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (4); regs.ir = regs.irc; regs.irc = 0; { uae_s8 dst = get_byte (dsta); get_word_prefetch (6); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); put_byte (dsta, dst); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* BSET.B Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_01f9_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_prefetch (4); regs.ir = regs.irc; regs.irc = 0; { uae_s8 dst = get_byte (dsta); get_word_prefetch (8); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); put_byte (dsta, dst); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* BSET.B Dn,(d16,PC) */ uae_u32 REGPARAM2 CPUFUNC(op_01fa_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = 2; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_getpc () + 2; dsta += (uae_s32)(uae_s16)get_word_prefetch (4); regs.ir = regs.irc; regs.irc = 0; { uae_s8 dst = get_byte (dsta); get_word_prefetch (6); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); put_byte (dsta, dst); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* BSET.B Dn,(d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_01fb_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = 3; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr tmppc; uaecptr dsta; tmppc = m68k_getpc () + 2; dsta = get_disp_ea_000 (tmppc, get_word_prefetch (4)); regs.ir = regs.irc; regs.irc = 0; { uae_s8 dst = get_byte (dsta); get_word_prefetch (6); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); put_byte (dsta, dst); }}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* AND.B #.B,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0200_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_prefetch (4); { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* AND.B #.B,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0210_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); put_byte (dsta, src); }}}} m68k_incpc (4); return 20 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* AND.B #.B,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0218_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); put_byte (dsta, src); }}}} m68k_incpc (4); return 20 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* AND.B #.B,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0220_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_prefetch (4); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) = dsta; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); put_byte (dsta, src); }}}} m68k_incpc (4); return 22 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* AND.B #.B,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0228_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (6); { uae_s8 dst = get_byte (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (8); put_byte (dsta, src); }}}} m68k_incpc (6); return 24 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* AND.B #.B,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0230_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_prefetch (4); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (6)); { uae_s8 dst = get_byte (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (8); put_byte (dsta, src); }}}} m68k_incpc (6); return 26 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* AND.B #.B,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_0238_11)(uae_u32 opcode) { {{ uae_s8 src = (uae_u8)get_word_prefetch (4); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (6); { uae_s8 dst = get_byte (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (8); put_byte (dsta, src); }}}} m68k_incpc (6); return 24 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* AND.B #.B,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_0239_11)(uae_u32 opcode) { {{ uae_s8 src = (uae_u8)get_word_prefetch (4); { uaecptr dsta = get_long_prefetch (6); { uae_s8 dst = get_byte (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (10); put_byte (dsta, src); }}}} m68k_incpc (8); return 28 * CYCLE_UNIT / 2; } /* 24 (5/1) */ /* ANDSR.B #.W */ uae_u32 REGPARAM2 CPUFUNC(op_023c_11)(uae_u32 opcode) { { MakeSR (); { uae_s16 src = get_word_prefetch (4); get_wordi (6); src |= 0xFF00; regs.ir = regs.irc; get_word_prefetch (6); regs.sr &= src; MakeFromSR (); }} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* AND.W #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0240_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_prefetch (4); { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* AND.W #.W,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0250_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2258; } {{ uae_s16 dst = get_word (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); put_word (dsta, src); }}}}} m68k_incpc (4); endlabel2258: ; return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* AND.W #.W,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0258_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2259; } {{ uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) += 2; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); put_word (dsta, src); }}}}} m68k_incpc (4); endlabel2259: ; return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* AND.W #.W,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0260_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2260; } {{ uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) = dsta; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); put_word (dsta, src); }}}}} m68k_incpc (4); endlabel2260: ; return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* AND.W #.W,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0268_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (6); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2261; } {{ uae_s16 dst = get_word (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (8); put_word (dsta, src); }}}}} m68k_incpc (6); endlabel2261: ; return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* AND.W #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0270_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (6)); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2262; } {{ uae_s16 dst = get_word (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (8); put_word (dsta, src); }}}}} m68k_incpc (6); endlabel2262: ; return 22 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* AND.W #.W,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_0278_11)(uae_u32 opcode) { {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (6); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2263; } {{ uae_s16 dst = get_word (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (8); put_word (dsta, src); }}}}} m68k_incpc (6); endlabel2263: ; return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* AND.W #.W,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_0279_11)(uae_u32 opcode) { {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta = get_long_prefetch (6); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2264; } {{ uae_s16 dst = get_word (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (10); put_word (dsta, src); }}}}} m68k_incpc (8); endlabel2264: ; return 24 * CYCLE_UNIT / 2; } /* 24 (5/1) */ /* ANDSR.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_027c_11)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel2265; } { MakeSR (); { uae_s16 src = get_word_prefetch (4); get_wordi (6); regs.ir = regs.irc; get_word_prefetch (6); regs.sr &= src; MakeFromSR (); }}} m68k_incpc (4); endlabel2265: ; return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* AND.L #.L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0280_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_prefetch (4); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (8); m68k_dreg (regs, dstreg) = (src); }}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* AND.L #.L,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0290_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2267; } {{ uae_s32 dst = get_long (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (8); put_long (dsta, src); }}}}} m68k_incpc (6); endlabel2267: ; return 28 * CYCLE_UNIT / 2; } /* 28 (5/2) */ /* AND.L #.L,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0298_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2268; } {{ uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) += 4; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (8); put_long (dsta, src); }}}}} m68k_incpc (6); endlabel2268: ; return 28 * CYCLE_UNIT / 2; } /* 28 (5/2) */ /* AND.L #.L,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_02a0_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_prefetch (4); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2269; } {{ uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) = dsta; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (8); put_long (dsta, src); }}}}} m68k_incpc (6); endlabel2269: ; return 30 * CYCLE_UNIT / 2; } /* 28 (5/2) */ /* AND.L #.L,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_02a8_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (8); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2270; } {{ uae_s32 dst = get_long (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (10); put_long (dsta, src); }}}}} m68k_incpc (8); endlabel2270: ; return 32 * CYCLE_UNIT / 2; } /* 32 (6/2) */ /* AND.L #.L,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_02b0_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_prefetch (4); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (8)); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2271; } {{ uae_s32 dst = get_long (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (10); put_long (dsta, src); }}}}} m68k_incpc (8); endlabel2271: ; return 34 * CYCLE_UNIT / 2; } /* 32 (6/2) */ /* AND.L #.L,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_02b8_11)(uae_u32 opcode) { {{ uae_s32 src = get_long_prefetch (4); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (8); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2272; } {{ uae_s32 dst = get_long (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (10); put_long (dsta, src); }}}}} m68k_incpc (8); endlabel2272: ; return 32 * CYCLE_UNIT / 2; } /* 32 (6/2) */ /* AND.L #.L,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_02b9_11)(uae_u32 opcode) { {{ uae_s32 src = get_long_prefetch (4); { uaecptr dsta = get_long_prefetch (8); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2273; } {{ uae_s32 dst = get_long (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (12); put_long (dsta, src); }}}}} m68k_incpc (10); endlabel2273: ; return 36 * CYCLE_UNIT / 2; } /* 36 (7/2) */ /* SUB.B #.B,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0400_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_prefetch (4); { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* SUB.B #.B,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0410_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte (dsta); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (4); return 20 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* SUB.B #.B,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0418_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (4); return 20 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* SUB.B #.B,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0420_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_prefetch (4); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (4); return 22 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* SUB.B #.B,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0428_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (6); { uae_s8 dst = get_byte (dsta); regs.ir = regs.irc; get_word_prefetch (8); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (6); return 24 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* SUB.B #.B,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0430_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_prefetch (4); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (6)); { uae_s8 dst = get_byte (dsta); regs.ir = regs.irc; get_word_prefetch (8); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (6); return 26 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* SUB.B #.B,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_0438_11)(uae_u32 opcode) { {{ uae_s8 src = (uae_u8)get_word_prefetch (4); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (6); { uae_s8 dst = get_byte (dsta); regs.ir = regs.irc; get_word_prefetch (8); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (6); return 24 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* SUB.B #.B,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_0439_11)(uae_u32 opcode) { {{ uae_s8 src = (uae_u8)get_word_prefetch (4); { uaecptr dsta = get_long_prefetch (6); { uae_s8 dst = get_byte (dsta); regs.ir = regs.irc; get_word_prefetch (10); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (8); return 28 * CYCLE_UNIT / 2; } /* 24 (5/1) */ /* SUB.W #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0440_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_prefetch (4); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* SUB.W #.W,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0450_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2283; } {{ uae_s16 dst = get_word (dsta); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}}} m68k_incpc (4); endlabel2283: ; return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* SUB.W #.W,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0458_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2284; } {{ uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) += 2; regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}}} m68k_incpc (4); endlabel2284: ; return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* SUB.W #.W,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0460_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2285; } {{ uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}}} m68k_incpc (4); endlabel2285: ; return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* SUB.W #.W,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0468_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (6); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2286; } {{ uae_s16 dst = get_word (dsta); regs.ir = regs.irc; get_word_prefetch (8); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}}} m68k_incpc (6); endlabel2286: ; return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* SUB.W #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0470_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (6)); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2287; } {{ uae_s16 dst = get_word (dsta); regs.ir = regs.irc; get_word_prefetch (8); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}}} m68k_incpc (6); endlabel2287: ; return 22 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* SUB.W #.W,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_0478_11)(uae_u32 opcode) { {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (6); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2288; } {{ uae_s16 dst = get_word (dsta); regs.ir = regs.irc; get_word_prefetch (8); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}}} m68k_incpc (6); endlabel2288: ; return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* SUB.W #.W,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_0479_11)(uae_u32 opcode) { {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta = get_long_prefetch (6); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2289; } {{ uae_s16 dst = get_word (dsta); regs.ir = regs.irc; get_word_prefetch (10); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}}} m68k_incpc (8); endlabel2289: ; return 24 * CYCLE_UNIT / 2; } /* 24 (5/1) */ /* SUB.L #.L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0480_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_prefetch (4); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (8); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* SUB.L #.L,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0490_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2291; } {{ uae_s32 dst = get_long (dsta); regs.ir = regs.irc; get_word_prefetch (8); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}}} m68k_incpc (6); endlabel2291: ; return 28 * CYCLE_UNIT / 2; } /* 28 (5/2) */ /* SUB.L #.L,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0498_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2292; } {{ uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) += 4; regs.ir = regs.irc; get_word_prefetch (8); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}}} m68k_incpc (6); endlabel2292: ; return 28 * CYCLE_UNIT / 2; } /* 28 (5/2) */ /* SUB.L #.L,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_04a0_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_prefetch (4); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2293; } {{ uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; get_word_prefetch (8); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}}} m68k_incpc (6); endlabel2293: ; return 30 * CYCLE_UNIT / 2; } /* 28 (5/2) */ /* SUB.L #.L,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_04a8_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (8); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2294; } {{ uae_s32 dst = get_long (dsta); regs.ir = regs.irc; get_word_prefetch (10); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}}} m68k_incpc (8); endlabel2294: ; return 32 * CYCLE_UNIT / 2; } /* 32 (6/2) */ /* SUB.L #.L,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_04b0_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_prefetch (4); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (8)); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2295; } {{ uae_s32 dst = get_long (dsta); regs.ir = regs.irc; get_word_prefetch (10); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}}} m68k_incpc (8); endlabel2295: ; return 34 * CYCLE_UNIT / 2; } /* 32 (6/2) */ /* SUB.L #.L,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_04b8_11)(uae_u32 opcode) { {{ uae_s32 src = get_long_prefetch (4); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (8); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2296; } {{ uae_s32 dst = get_long (dsta); regs.ir = regs.irc; get_word_prefetch (10); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}}} m68k_incpc (8); endlabel2296: ; return 32 * CYCLE_UNIT / 2; } /* 32 (6/2) */ /* SUB.L #.L,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_04b9_11)(uae_u32 opcode) { {{ uae_s32 src = get_long_prefetch (4); { uaecptr dsta = get_long_prefetch (8); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2297; } {{ uae_s32 dst = get_long (dsta); regs.ir = regs.irc; get_word_prefetch (12); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}}} m68k_incpc (10); endlabel2297: ; return 36 * CYCLE_UNIT / 2; } /* 36 (7/2) */ /* ADD.B #.B,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0600_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_prefetch (4); { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* ADD.B #.B,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0610_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte (dsta); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (4); return 20 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* ADD.B #.B,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0618_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (4); return 20 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* ADD.B #.B,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0620_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_prefetch (4); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (4); return 22 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* ADD.B #.B,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0628_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (6); { uae_s8 dst = get_byte (dsta); regs.ir = regs.irc; get_word_prefetch (8); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (6); return 24 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* ADD.B #.B,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0630_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_prefetch (4); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (6)); { uae_s8 dst = get_byte (dsta); regs.ir = regs.irc; get_word_prefetch (8); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (6); return 26 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* ADD.B #.B,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_0638_11)(uae_u32 opcode) { {{ uae_s8 src = (uae_u8)get_word_prefetch (4); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (6); { uae_s8 dst = get_byte (dsta); regs.ir = regs.irc; get_word_prefetch (8); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (6); return 24 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* ADD.B #.B,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_0639_11)(uae_u32 opcode) { {{ uae_s8 src = (uae_u8)get_word_prefetch (4); { uaecptr dsta = get_long_prefetch (6); { uae_s8 dst = get_byte (dsta); regs.ir = regs.irc; get_word_prefetch (10); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (8); return 28 * CYCLE_UNIT / 2; } /* 24 (5/1) */ /* ADD.W #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0640_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_prefetch (4); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* ADD.W #.W,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0650_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2307; } {{ uae_s16 dst = get_word (dsta); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}}} m68k_incpc (4); endlabel2307: ; return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* ADD.W #.W,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0658_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2308; } {{ uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) += 2; regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}}} m68k_incpc (4); endlabel2308: ; return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* ADD.W #.W,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0660_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2309; } {{ uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}}} m68k_incpc (4); endlabel2309: ; return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* ADD.W #.W,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0668_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (6); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2310; } {{ uae_s16 dst = get_word (dsta); regs.ir = regs.irc; get_word_prefetch (8); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}}} m68k_incpc (6); endlabel2310: ; return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* ADD.W #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0670_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (6)); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2311; } {{ uae_s16 dst = get_word (dsta); regs.ir = regs.irc; get_word_prefetch (8); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}}} m68k_incpc (6); endlabel2311: ; return 22 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* ADD.W #.W,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_0678_11)(uae_u32 opcode) { {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (6); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2312; } {{ uae_s16 dst = get_word (dsta); regs.ir = regs.irc; get_word_prefetch (8); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}}} m68k_incpc (6); endlabel2312: ; return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* ADD.W #.W,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_0679_11)(uae_u32 opcode) { {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta = get_long_prefetch (6); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2313; } {{ uae_s16 dst = get_word (dsta); regs.ir = regs.irc; get_word_prefetch (10); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}}} m68k_incpc (8); endlabel2313: ; return 24 * CYCLE_UNIT / 2; } /* 24 (5/1) */ /* ADD.L #.L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0680_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_prefetch (4); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (8); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* ADD.L #.L,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0690_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2315; } {{ uae_s32 dst = get_long (dsta); regs.ir = regs.irc; get_word_prefetch (8); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}}} m68k_incpc (6); endlabel2315: ; return 28 * CYCLE_UNIT / 2; } /* 28 (5/2) */ /* ADD.L #.L,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0698_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2316; } {{ uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) += 4; regs.ir = regs.irc; get_word_prefetch (8); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}}} m68k_incpc (6); endlabel2316: ; return 28 * CYCLE_UNIT / 2; } /* 28 (5/2) */ /* ADD.L #.L,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_06a0_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_prefetch (4); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2317; } {{ uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; get_word_prefetch (8); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}}} m68k_incpc (6); endlabel2317: ; return 30 * CYCLE_UNIT / 2; } /* 28 (5/2) */ /* ADD.L #.L,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_06a8_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (8); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2318; } {{ uae_s32 dst = get_long (dsta); regs.ir = regs.irc; get_word_prefetch (10); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}}} m68k_incpc (8); endlabel2318: ; return 32 * CYCLE_UNIT / 2; } /* 32 (6/2) */ /* ADD.L #.L,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_06b0_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_prefetch (4); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (8)); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2319; } {{ uae_s32 dst = get_long (dsta); regs.ir = regs.irc; get_word_prefetch (10); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}}} m68k_incpc (8); endlabel2319: ; return 34 * CYCLE_UNIT / 2; } /* 32 (6/2) */ /* ADD.L #.L,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_06b8_11)(uae_u32 opcode) { {{ uae_s32 src = get_long_prefetch (4); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (8); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2320; } {{ uae_s32 dst = get_long (dsta); regs.ir = regs.irc; get_word_prefetch (10); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}}} m68k_incpc (8); endlabel2320: ; return 32 * CYCLE_UNIT / 2; } /* 32 (6/2) */ /* ADD.L #.L,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_06b9_11)(uae_u32 opcode) { {{ uae_s32 src = get_long_prefetch (4); { uaecptr dsta = get_long_prefetch (8); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2321; } {{ uae_s32 dst = get_long (dsta); regs.ir = regs.irc; get_word_prefetch (12); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}}} m68k_incpc (10); endlabel2321: ; return 36 * CYCLE_UNIT / 2; } /* 36 (7/2) */ /* BTST.L #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0800_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_prefetch (4); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); src &= 31; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* BTST.B #.W,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0810_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); regs.ir = regs.irc; regs.irc = 0; { uae_s8 dst = get_byte (dsta); get_word_prefetch (6); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* BTST.B #.W,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0818_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); regs.ir = regs.irc; regs.irc = 0; { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; get_word_prefetch (6); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* BTST.B #.W,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0820_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; regs.ir = regs.irc; regs.irc = 0; { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) = dsta; get_word_prefetch (6); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpc (4); return 14 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* BTST.B #.W,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0828_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (6); regs.ir = regs.irc; regs.irc = 0; { uae_s8 dst = get_byte (dsta); get_word_prefetch (8); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* BTST.B #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0830_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (6)); regs.ir = regs.irc; regs.irc = 0; { uae_s8 dst = get_byte (dsta); get_word_prefetch (8); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpc (6); return 18 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* BTST.B #.W,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_0838_11)(uae_u32 opcode) { {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (6); regs.ir = regs.irc; regs.irc = 0; { uae_s8 dst = get_byte (dsta); get_word_prefetch (8); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* BTST.B #.W,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_0839_11)(uae_u32 opcode) { {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta = get_long_prefetch (6); regs.ir = regs.irc; regs.irc = 0; { uae_s8 dst = get_byte (dsta); get_word_prefetch (10); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpc (8); return 20 * CYCLE_UNIT / 2; } /* 20 (5/0) */ /* BTST.B #.W,(d16,PC) */ uae_u32 REGPARAM2 CPUFUNC(op_083a_11)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_word_prefetch (6); regs.ir = regs.irc; regs.irc = 0; { uae_s8 dst = get_byte (dsta); get_word_prefetch (8); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* BTST.B #.W,(d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_083b_11)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 src = get_word_prefetch (4); { uaecptr tmppc; uaecptr dsta; tmppc = m68k_getpc () + 4; dsta = get_disp_ea_000 (tmppc, get_word_prefetch (6)); regs.ir = regs.irc; regs.irc = 0; { uae_s8 dst = get_byte (dsta); get_word_prefetch (8); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}}} m68k_incpc (6); return 18 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* BTST.B #.W,#.B */ uae_u32 REGPARAM2 CPUFUNC(op_083c_11)(uae_u32 opcode) { {{ uae_s16 src = get_word_prefetch (4); { uae_s8 dst = (uae_u8)get_word_prefetch (6); regs.ir = regs.irc; get_word_prefetch (8); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); }}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* BCHG.L #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0840_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_prefetch (4); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); src &= 31; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); m68k_dreg (regs, dstreg) = (dst); }}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* BCHG.B #.W,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0850_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); regs.ir = regs.irc; regs.irc = 0; { uae_s8 dst = get_byte (dsta); get_word_prefetch (6); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); put_byte (dsta, dst); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* BCHG.B #.W,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0858_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); regs.ir = regs.irc; regs.irc = 0; { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; get_word_prefetch (6); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); put_byte (dsta, dst); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* BCHG.B #.W,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0860_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; regs.ir = regs.irc; regs.irc = 0; { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) = dsta; get_word_prefetch (6); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); put_byte (dsta, dst); }}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* BCHG.B #.W,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0868_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (6); regs.ir = regs.irc; regs.irc = 0; { uae_s8 dst = get_byte (dsta); get_word_prefetch (8); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); put_byte (dsta, dst); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* BCHG.B #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0870_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (6)); regs.ir = regs.irc; regs.irc = 0; { uae_s8 dst = get_byte (dsta); get_word_prefetch (8); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); put_byte (dsta, dst); }}}} m68k_incpc (6); return 22 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* BCHG.B #.W,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_0878_11)(uae_u32 opcode) { {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (6); regs.ir = regs.irc; regs.irc = 0; { uae_s8 dst = get_byte (dsta); get_word_prefetch (8); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); put_byte (dsta, dst); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* BCHG.B #.W,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_0879_11)(uae_u32 opcode) { {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta = get_long_prefetch (6); regs.ir = regs.irc; regs.irc = 0; { uae_s8 dst = get_byte (dsta); get_word_prefetch (10); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); put_byte (dsta, dst); }}}} m68k_incpc (8); return 24 * CYCLE_UNIT / 2; } /* 24 (5/1) */ /* BCHG.B #.W,(d16,PC) */ uae_u32 REGPARAM2 CPUFUNC(op_087a_11)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_word_prefetch (6); regs.ir = regs.irc; regs.irc = 0; { uae_s8 dst = get_byte (dsta); get_word_prefetch (8); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); put_byte (dsta, dst); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* BCHG.B #.W,(d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_087b_11)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 src = get_word_prefetch (4); { uaecptr tmppc; uaecptr dsta; tmppc = m68k_getpc () + 4; dsta = get_disp_ea_000 (tmppc, get_word_prefetch (6)); regs.ir = regs.irc; regs.irc = 0; { uae_s8 dst = get_byte (dsta); get_word_prefetch (8); src &= 7; dst ^= (1 << src); SET_ZFLG (((uae_u32)dst & (1 << src)) >> src); put_byte (dsta, dst); }}}} m68k_incpc (6); return 22 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* BCLR.L #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0880_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_prefetch (4); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); src &= 31; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); m68k_dreg (regs, dstreg) = (dst); }}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* BCLR.B #.W,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0890_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); regs.ir = regs.irc; regs.irc = 0; { uae_s8 dst = get_byte (dsta); get_word_prefetch (6); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); put_byte (dsta, dst); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* BCLR.B #.W,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0898_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); regs.ir = regs.irc; regs.irc = 0; { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; get_word_prefetch (6); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); put_byte (dsta, dst); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* BCLR.B #.W,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_08a0_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; regs.ir = regs.irc; regs.irc = 0; { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) = dsta; get_word_prefetch (6); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); put_byte (dsta, dst); }}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* BCLR.B #.W,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_08a8_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (6); regs.ir = regs.irc; regs.irc = 0; { uae_s8 dst = get_byte (dsta); get_word_prefetch (8); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); put_byte (dsta, dst); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* BCLR.B #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_08b0_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (6)); regs.ir = regs.irc; regs.irc = 0; { uae_s8 dst = get_byte (dsta); get_word_prefetch (8); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); put_byte (dsta, dst); }}}} m68k_incpc (6); return 22 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* BCLR.B #.W,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_08b8_11)(uae_u32 opcode) { {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (6); regs.ir = regs.irc; regs.irc = 0; { uae_s8 dst = get_byte (dsta); get_word_prefetch (8); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); put_byte (dsta, dst); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* BCLR.B #.W,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_08b9_11)(uae_u32 opcode) { {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta = get_long_prefetch (6); regs.ir = regs.irc; regs.irc = 0; { uae_s8 dst = get_byte (dsta); get_word_prefetch (10); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); put_byte (dsta, dst); }}}} m68k_incpc (8); return 24 * CYCLE_UNIT / 2; } /* 24 (5/1) */ /* BCLR.B #.W,(d16,PC) */ uae_u32 REGPARAM2 CPUFUNC(op_08ba_11)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_word_prefetch (6); regs.ir = regs.irc; regs.irc = 0; { uae_s8 dst = get_byte (dsta); get_word_prefetch (8); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); put_byte (dsta, dst); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* BCLR.B #.W,(d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_08bb_11)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 src = get_word_prefetch (4); { uaecptr tmppc; uaecptr dsta; tmppc = m68k_getpc () + 4; dsta = get_disp_ea_000 (tmppc, get_word_prefetch (6)); regs.ir = regs.irc; regs.irc = 0; { uae_s8 dst = get_byte (dsta); get_word_prefetch (8); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst &= ~(1 << src); put_byte (dsta, dst); }}}} m68k_incpc (6); return 22 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* BSET.L #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_08c0_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_prefetch (4); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); src &= 31; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); m68k_dreg (regs, dstreg) = (dst); }}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* BSET.B #.W,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_08d0_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); regs.ir = regs.irc; regs.irc = 0; { uae_s8 dst = get_byte (dsta); get_word_prefetch (6); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); put_byte (dsta, dst); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* BSET.B #.W,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_08d8_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); regs.ir = regs.irc; regs.irc = 0; { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; get_word_prefetch (6); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); put_byte (dsta, dst); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* BSET.B #.W,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_08e0_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; regs.ir = regs.irc; regs.irc = 0; { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) = dsta; get_word_prefetch (6); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); put_byte (dsta, dst); }}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* BSET.B #.W,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_08e8_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (6); regs.ir = regs.irc; regs.irc = 0; { uae_s8 dst = get_byte (dsta); get_word_prefetch (8); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); put_byte (dsta, dst); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* BSET.B #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_08f0_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (6)); regs.ir = regs.irc; regs.irc = 0; { uae_s8 dst = get_byte (dsta); get_word_prefetch (8); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); put_byte (dsta, dst); }}}} m68k_incpc (6); return 22 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* BSET.B #.W,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_08f8_11)(uae_u32 opcode) { {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (6); regs.ir = regs.irc; regs.irc = 0; { uae_s8 dst = get_byte (dsta); get_word_prefetch (8); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); put_byte (dsta, dst); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* BSET.B #.W,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_08f9_11)(uae_u32 opcode) { {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta = get_long_prefetch (6); regs.ir = regs.irc; regs.irc = 0; { uae_s8 dst = get_byte (dsta); get_word_prefetch (10); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); put_byte (dsta, dst); }}}} m68k_incpc (8); return 24 * CYCLE_UNIT / 2; } /* 24 (5/1) */ /* BSET.B #.W,(d16,PC) */ uae_u32 REGPARAM2 CPUFUNC(op_08fa_11)(uae_u32 opcode) { uae_u32 dstreg = 2; {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta = m68k_getpc () + 4; dsta += (uae_s32)(uae_s16)get_word_prefetch (6); regs.ir = regs.irc; regs.irc = 0; { uae_s8 dst = get_byte (dsta); get_word_prefetch (8); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); put_byte (dsta, dst); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* BSET.B #.W,(d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_08fb_11)(uae_u32 opcode) { uae_u32 dstreg = 3; {{ uae_s16 src = get_word_prefetch (4); { uaecptr tmppc; uaecptr dsta; tmppc = m68k_getpc () + 4; dsta = get_disp_ea_000 (tmppc, get_word_prefetch (6)); regs.ir = regs.irc; regs.irc = 0; { uae_s8 dst = get_byte (dsta); get_word_prefetch (8); src &= 7; SET_ZFLG (1 ^ ((dst >> src) & 1)); dst |= (1 << src); put_byte (dsta, dst); }}}} m68k_incpc (6); return 22 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* EOR.B #.B,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0a00_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_prefetch (4); { uae_s8 dst = m68k_dreg (regs, dstreg); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* EOR.B #.B,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0a10_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); put_byte (dsta, src); }}}} m68k_incpc (4); return 20 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* EOR.B #.B,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0a18_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); put_byte (dsta, src); }}}} m68k_incpc (4); return 20 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* EOR.B #.B,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0a20_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_prefetch (4); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) = dsta; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); put_byte (dsta, src); }}}} m68k_incpc (4); return 22 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* EOR.B #.B,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0a28_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (6); { uae_s8 dst = get_byte (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (8); put_byte (dsta, src); }}}} m68k_incpc (6); return 24 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* EOR.B #.B,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0a30_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_prefetch (4); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (6)); { uae_s8 dst = get_byte (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (8); put_byte (dsta, src); }}}} m68k_incpc (6); return 26 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* EOR.B #.B,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_0a38_11)(uae_u32 opcode) { {{ uae_s8 src = (uae_u8)get_word_prefetch (4); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (6); { uae_s8 dst = get_byte (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (8); put_byte (dsta, src); }}}} m68k_incpc (6); return 24 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* EOR.B #.B,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_0a39_11)(uae_u32 opcode) { {{ uae_s8 src = (uae_u8)get_word_prefetch (4); { uaecptr dsta = get_long_prefetch (6); { uae_s8 dst = get_byte (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (10); put_byte (dsta, src); }}}} m68k_incpc (8); return 28 * CYCLE_UNIT / 2; } /* 24 (5/1) */ /* EORSR.B #.W */ uae_u32 REGPARAM2 CPUFUNC(op_0a3c_11)(uae_u32 opcode) { { MakeSR (); { uae_s16 src = get_word_prefetch (4); get_wordi (6); src &= 0xFF; regs.ir = regs.irc; get_word_prefetch (6); regs.sr ^= src; MakeFromSR (); }} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* EOR.W #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0a40_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_prefetch (4); { uae_s16 dst = m68k_dreg (regs, dstreg); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* EOR.W #.W,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0a50_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2373; } {{ uae_s16 dst = get_word (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); put_word (dsta, src); }}}}} m68k_incpc (4); endlabel2373: ; return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* EOR.W #.W,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0a58_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2374; } {{ uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) += 2; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); put_word (dsta, src); }}}}} m68k_incpc (4); endlabel2374: ; return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* EOR.W #.W,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0a60_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2375; } {{ uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) = dsta; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); put_word (dsta, src); }}}}} m68k_incpc (4); endlabel2375: ; return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* EOR.W #.W,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0a68_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (6); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2376; } {{ uae_s16 dst = get_word (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (8); put_word (dsta, src); }}}}} m68k_incpc (6); endlabel2376: ; return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* EOR.W #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0a70_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (6)); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2377; } {{ uae_s16 dst = get_word (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (8); put_word (dsta, src); }}}}} m68k_incpc (6); endlabel2377: ; return 22 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* EOR.W #.W,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_0a78_11)(uae_u32 opcode) { {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (6); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2378; } {{ uae_s16 dst = get_word (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (8); put_word (dsta, src); }}}}} m68k_incpc (6); endlabel2378: ; return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* EOR.W #.W,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_0a79_11)(uae_u32 opcode) { {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta = get_long_prefetch (6); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2379; } {{ uae_s16 dst = get_word (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (10); put_word (dsta, src); }}}}} m68k_incpc (8); endlabel2379: ; return 24 * CYCLE_UNIT / 2; } /* 24 (5/1) */ /* EORSR.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_0a7c_11)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel2380; } { MakeSR (); { uae_s16 src = get_word_prefetch (4); get_wordi (6); regs.ir = regs.irc; get_word_prefetch (6); regs.sr ^= src; MakeFromSR (); }}} m68k_incpc (4); endlabel2380: ; return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* EOR.L #.L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0a80_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_prefetch (4); { uae_s32 dst = m68k_dreg (regs, dstreg); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (8); m68k_dreg (regs, dstreg) = (src); }}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ #endif #ifdef PART_2 /* EOR.L #.L,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0a90_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2382; } {{ uae_s32 dst = get_long (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (8); put_long (dsta, src); }}}}} m68k_incpc (6); endlabel2382: ; return 28 * CYCLE_UNIT / 2; } /* 28 (5/2) */ /* EOR.L #.L,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0a98_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2383; } {{ uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) += 4; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (8); put_long (dsta, src); }}}}} m68k_incpc (6); endlabel2383: ; return 28 * CYCLE_UNIT / 2; } /* 28 (5/2) */ /* EOR.L #.L,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0aa0_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_prefetch (4); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2384; } {{ uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) = dsta; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (8); put_long (dsta, src); }}}}} m68k_incpc (6); endlabel2384: ; return 30 * CYCLE_UNIT / 2; } /* 28 (5/2) */ /* EOR.L #.L,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0aa8_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (8); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2385; } {{ uae_s32 dst = get_long (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (10); put_long (dsta, src); }}}}} m68k_incpc (8); endlabel2385: ; return 32 * CYCLE_UNIT / 2; } /* 32 (6/2) */ /* EOR.L #.L,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0ab0_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_prefetch (4); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (8)); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2386; } {{ uae_s32 dst = get_long (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (10); put_long (dsta, src); }}}}} m68k_incpc (8); endlabel2386: ; return 34 * CYCLE_UNIT / 2; } /* 32 (6/2) */ /* EOR.L #.L,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_0ab8_11)(uae_u32 opcode) { {{ uae_s32 src = get_long_prefetch (4); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (8); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2387; } {{ uae_s32 dst = get_long (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (10); put_long (dsta, src); }}}}} m68k_incpc (8); endlabel2387: ; return 32 * CYCLE_UNIT / 2; } /* 32 (6/2) */ /* EOR.L #.L,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_0ab9_11)(uae_u32 opcode) { {{ uae_s32 src = get_long_prefetch (4); { uaecptr dsta = get_long_prefetch (8); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2388; } {{ uae_s32 dst = get_long (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (12); put_long (dsta, src); }}}}} m68k_incpc (10); endlabel2388: ; return 36 * CYCLE_UNIT / 2; } /* 36 (7/2) */ /* CMP.B #.B,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0c00_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_prefetch (4); { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* CMP.B #.B,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0c10_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte (dsta); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* CMP.B #.B,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0c18_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* CMP.B #.B,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0c20_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_prefetch (4); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* CMP.B #.B,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0c28_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (6); { uae_s8 dst = get_byte (dsta); regs.ir = regs.irc; get_word_prefetch (8); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* CMP.B #.B,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0c30_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s8 src = (uae_u8)get_word_prefetch (4); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (6)); { uae_s8 dst = get_byte (dsta); regs.ir = regs.irc; get_word_prefetch (8); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (6); return 22 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* CMP.B #.B,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_0c38_11)(uae_u32 opcode) { {{ uae_s8 src = (uae_u8)get_word_prefetch (4); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (6); { uae_s8 dst = get_byte (dsta); regs.ir = regs.irc; get_word_prefetch (8); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* CMP.B #.B,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_0c39_11)(uae_u32 opcode) { {{ uae_s8 src = (uae_u8)get_word_prefetch (4); { uaecptr dsta = get_long_prefetch (6); { uae_s8 dst = get_byte (dsta); regs.ir = regs.irc; get_word_prefetch (10); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (8); return 24 * CYCLE_UNIT / 2; } /* 20 (5/0) */ /* CMP.W #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0c40_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_prefetch (4); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* CMP.W #.W,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0c50_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2398; } {{ uae_s16 dst = get_word (dsta); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (4); endlabel2398: ; return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* CMP.W #.W,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0c58_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2399; } {{ uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) += 2; regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (4); endlabel2399: ; return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* CMP.W #.W,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0c60_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2400; } {{ uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (4); endlabel2400: ; return 14 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* CMP.W #.W,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0c68_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (6); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2401; } {{ uae_s16 dst = get_word (dsta); regs.ir = regs.irc; get_word_prefetch (8); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (6); endlabel2401: ; return 16 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* CMP.W #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0c70_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (6)); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2402; } {{ uae_s16 dst = get_word (dsta); regs.ir = regs.irc; get_word_prefetch (8); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (6); endlabel2402: ; return 18 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* CMP.W #.W,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_0c78_11)(uae_u32 opcode) { {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (6); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2403; } {{ uae_s16 dst = get_word (dsta); regs.ir = regs.irc; get_word_prefetch (8); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (6); endlabel2403: ; return 16 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* CMP.W #.W,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_0c79_11)(uae_u32 opcode) { {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta = get_long_prefetch (6); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2404; } {{ uae_s16 dst = get_word (dsta); regs.ir = regs.irc; get_word_prefetch (10); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (8); endlabel2404: ; return 20 * CYCLE_UNIT / 2; } /* 20 (5/0) */ /* CMP.L #.L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_0c80_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_prefetch (4); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (8); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* CMP.L #.L,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0c90_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2406; } {{ uae_s32 dst = get_long (dsta); regs.ir = regs.irc; get_word_prefetch (8); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (6); endlabel2406: ; return 20 * CYCLE_UNIT / 2; } /* 20 (5/0) */ /* CMP.L #.L,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_0c98_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2407; } {{ uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) += 4; regs.ir = regs.irc; get_word_prefetch (8); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (6); endlabel2407: ; return 20 * CYCLE_UNIT / 2; } /* 20 (5/0) */ /* CMP.L #.L,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_0ca0_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_prefetch (4); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2408; } {{ uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; get_word_prefetch (8); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (6); endlabel2408: ; return 22 * CYCLE_UNIT / 2; } /* 20 (5/0) */ /* CMP.L #.L,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_0ca8_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (8); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2409; } {{ uae_s32 dst = get_long (dsta); regs.ir = regs.irc; get_word_prefetch (10); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (8); endlabel2409: ; return 24 * CYCLE_UNIT / 2; } /* 24 (6/0) */ /* CMP.L #.L,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_0cb0_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; {{ uae_s32 src = get_long_prefetch (4); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (8)); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2410; } {{ uae_s32 dst = get_long (dsta); regs.ir = regs.irc; get_word_prefetch (10); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (8); endlabel2410: ; return 26 * CYCLE_UNIT / 2; } /* 24 (6/0) */ /* CMP.L #.L,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_0cb8_11)(uae_u32 opcode) { {{ uae_s32 src = get_long_prefetch (4); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (8); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2411; } {{ uae_s32 dst = get_long (dsta); regs.ir = regs.irc; get_word_prefetch (10); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (8); endlabel2411: ; return 24 * CYCLE_UNIT / 2; } /* 24 (6/0) */ /* CMP.L #.L,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_0cb9_11)(uae_u32 opcode) { {{ uae_s32 src = get_long_prefetch (4); { uaecptr dsta = get_long_prefetch (8); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2412; } {{ uae_s32 dst = get_long (dsta); regs.ir = regs.irc; get_word_prefetch (12); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (10); endlabel2412: ; return 28 * CYCLE_UNIT / 2; } /* 28 (7/0) */ /* MOVE.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_1000_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); }}}return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* MOVE.B (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_1010_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); }}}}return 8 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* MOVE.B (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_1018_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); }}}}return 8 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* MOVE.B -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_1020_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) = srca; { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); }}}}return 10 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* MOVE.B (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_1028_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* MOVE.B (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_1030_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); { uae_s8 src = get_byte (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}return 14 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* MOVE.B (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_1038_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* MOVE.B (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_1039_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_prefetch (4); { uae_s8 src = get_byte (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); m68k_incpc (6); regs.ir = regs.irc; get_word_prefetch (2); }}}}return 16 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* MOVE.B (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_103a_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* MOVE.B (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_103b_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_word_prefetch (4)); { uae_s8 src = get_byte (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}return 14 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* MOVE.B #.B,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_103c_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = (uae_u8)get_word_prefetch (4); { CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}return 12 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* MOVE.B Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_1080_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); }}}return 8 * CYCLE_UNIT / 2; } /* 8 (1/1) */ /* MOVE.B (An),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_1090_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); }}}}return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* MOVE.B (An)+,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_1098_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); }}}}return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* MOVE.B -(An),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_10a0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); }}}}return 14 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* MOVE.B (d16,An),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_10a8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* MOVE.B (d8,An,Xn),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_10b0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); { uae_s8 src = get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* MOVE.B (xxx).W,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_10b8_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* MOVE.B (xxx).L,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_10b9_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_prefetch (4); { uae_s8 src = get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (6); regs.ir = regs.irc; get_word_prefetch (2); }}}}return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* MOVE.B (d16,PC),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_10ba_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* MOVE.B (d8,PC,Xn),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_10bb_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_word_prefetch (4)); { uae_s8 src = get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* MOVE.B #.B,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_10bc_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = (uae_u8)get_word_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}return 16 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* MOVE.B Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_10c0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); }}}return 8 * CYCLE_UNIT / 2; } /* 8 (1/1) */ /* MOVE.B (An),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_10d0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); }}}}return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* MOVE.B (An)+,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_10d8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); }}}}return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* MOVE.B -(An),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_10e0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); }}}}return 14 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* MOVE.B (d16,An),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_10e8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* MOVE.B (d8,An,Xn),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_10f0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); { uae_s8 src = get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* MOVE.B (xxx).W,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_10f8_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* MOVE.B (xxx).L,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_10f9_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_prefetch (4); { uae_s8 src = get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (6); regs.ir = regs.irc; get_word_prefetch (2); }}}}return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* MOVE.B (d16,PC),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_10fa_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* MOVE.B (d8,PC,Xn),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_10fb_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_word_prefetch (4)); { uae_s8 src = get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* MOVE.B #.B,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_10fc_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = (uae_u8)get_word_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}return 16 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* MOVE.B Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_1100_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; get_word_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (2); }}}return 8 * CYCLE_UNIT / 2; } /* 8 (1/1) */ /* MOVE.B (An),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_1110_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; get_word_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (2); }}}}return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* MOVE.B (An)+,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_1118_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; get_word_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (2); }}}}return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* MOVE.B -(An),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_1120_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; get_word_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (2); }}}}return 14 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* MOVE.B (d16,An),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_1128_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; get_word_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (4); }}}}return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* MOVE.B (d8,An,Xn),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_1130_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); { uae_s8 src = get_byte (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; get_word_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (4); }}}}return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* MOVE.B (xxx).W,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_1138_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; get_word_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (4); }}}}return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* MOVE.B (xxx).L,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_1139_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_prefetch (4); { uae_s8 src = get_byte (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; get_word_prefetch (8); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (6); }}}}return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* MOVE.B (d16,PC),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_113a_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; get_word_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (4); }}}}return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* MOVE.B (d8,PC,Xn),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_113b_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_word_prefetch (4)); { uae_s8 src = get_byte (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; get_word_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (4); }}}}return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* MOVE.B #.B,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_113c_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = (uae_u8)get_word_prefetch (4); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; get_word_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (4); }}}return 16 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* MOVE.B Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_1140_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* MOVE.B (An),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_1150_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* MOVE.B (An)+,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_1158_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* MOVE.B -(An),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_1160_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* MOVE.B (d16,An),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_1168_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (6); regs.ir = regs.irc; get_word_prefetch (2); }}}}return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* MOVE.B (d8,An,Xn),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_1170_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); { uae_s8 src = get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (6); regs.ir = regs.irc; get_word_prefetch (2); }}}}return 22 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* MOVE.B (xxx).W,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_1178_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (6); regs.ir = regs.irc; get_word_prefetch (2); }}}}return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* MOVE.B (xxx).L,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_1179_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_prefetch (4); { uae_s8 src = get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (8); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (8); regs.ir = regs.irc; get_word_prefetch (2); }}}}return 24 * CYCLE_UNIT / 2; } /* 24 (5/1) */ /* MOVE.B (d16,PC),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_117a_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (6); regs.ir = regs.irc; get_word_prefetch (2); }}}}return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* MOVE.B (d8,PC,Xn),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_117b_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_word_prefetch (4)); { uae_s8 src = get_byte (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (6); regs.ir = regs.irc; get_word_prefetch (2); }}}}return 22 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* MOVE.B #.B,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_117c_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = (uae_u8)get_word_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (6); regs.ir = regs.irc; get_word_prefetch (2); }}}return 20 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* MOVE.B Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_1180_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (4)); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}return 14 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* MOVE.B (An),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_1190_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (4)); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* MOVE.B (An)+,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_1198_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (4)); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* MOVE.B -(An),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_11a0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (4)); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}return 20 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* MOVE.B (d16,An),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_11a8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (6)); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (6); regs.ir = regs.irc; get_word_prefetch (2); }}}}return 22 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* MOVE.B (d8,An,Xn),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_11b0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); { uae_s8 src = get_byte (srca); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (6)); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (6); regs.ir = regs.irc; get_word_prefetch (2); }}}}return 24 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* MOVE.B (xxx).W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_11b8_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (6)); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (6); regs.ir = regs.irc; get_word_prefetch (2); }}}}return 22 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* MOVE.B (xxx).L,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_11b9_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_prefetch (4); { uae_s8 src = get_byte (srca); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (8)); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (8); regs.ir = regs.irc; get_word_prefetch (2); }}}}return 26 * CYCLE_UNIT / 2; } /* 24 (5/1) */ /* MOVE.B (d16,PC),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_11ba_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (6)); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (6); regs.ir = regs.irc; get_word_prefetch (2); }}}}return 22 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* MOVE.B (d8,PC,Xn),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_11bb_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_word_prefetch (4)); { uae_s8 src = get_byte (srca); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (6)); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (6); regs.ir = regs.irc; get_word_prefetch (2); }}}}return 24 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* MOVE.B #.B,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_11bc_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = (uae_u8)get_word_prefetch (4); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (6)); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (6); regs.ir = regs.irc; get_word_prefetch (2); }}}return 22 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* MOVE.B Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_11c0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* MOVE.B (An),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_11d0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* MOVE.B (An)+,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_11d8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* MOVE.B -(An),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_11e0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* MOVE.B (d16,An),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_11e8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (6); regs.ir = regs.irc; get_word_prefetch (2); }}}}return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* MOVE.B (d8,An,Xn),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_11f0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); { uae_s8 src = get_byte (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (6); regs.ir = regs.irc; get_word_prefetch (2); }}}}return 22 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* MOVE.B (xxx).W,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_11f8_11)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (6); regs.ir = regs.irc; get_word_prefetch (2); }}}}return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* MOVE.B (xxx).L,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_11f9_11)(uae_u32 opcode) { {{ uaecptr srca = get_long_prefetch (4); { uae_s8 src = get_byte (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (8); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (8); regs.ir = regs.irc; get_word_prefetch (2); }}}}return 24 * CYCLE_UNIT / 2; } /* 24 (5/1) */ /* MOVE.B (d16,PC),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_11fa_11)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (6); regs.ir = regs.irc; get_word_prefetch (2); }}}}return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* MOVE.B (d8,PC,Xn),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_11fb_11)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_word_prefetch (4)); { uae_s8 src = get_byte (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (6); regs.ir = regs.irc; get_word_prefetch (2); }}}}return 22 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* MOVE.B #.B,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_11fc_11)(uae_u32 opcode) { {{ uae_s8 src = (uae_u8)get_word_prefetch (4); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (6); regs.ir = regs.irc; get_word_prefetch (2); }}}return 20 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* MOVE.B Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_13c0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (6); regs.ir = regs.irc; get_word_prefetch (2); }}}return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* MOVE.B (An),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_13d0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); { uaecptr dsta; dsta = get_word_prefetch (4) << 16; dsta |= regs.irc; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (6); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}}}return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* MOVE.B (An)+,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_13d8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uaecptr dsta; dsta = get_word_prefetch (4) << 16; dsta |= regs.irc; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (6); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}}}return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* MOVE.B -(An),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_13e0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = get_word_prefetch (4) << 16; dsta |= regs.irc; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (6); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}}}return 22 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* MOVE.B (d16,An),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_13e8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); { uaecptr dsta; dsta = get_word_prefetch (6) << 16; dsta |= regs.irc; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (8); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}}}return 24 * CYCLE_UNIT / 2; } /* 24 (5/1) */ /* MOVE.B (d8,An,Xn),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_13f0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); { uae_s8 src = get_byte (srca); { uaecptr dsta; dsta = get_word_prefetch (6) << 16; dsta |= regs.irc; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (8); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}}}return 26 * CYCLE_UNIT / 2; } /* 24 (5/1) */ /* MOVE.B (xxx).W,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_13f8_11)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); { uaecptr dsta; dsta = get_word_prefetch (6) << 16; dsta |= regs.irc; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (8); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}}}return 24 * CYCLE_UNIT / 2; } /* 24 (5/1) */ /* MOVE.B (xxx).L,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_13f9_11)(uae_u32 opcode) { {{ uaecptr srca = get_long_prefetch (4); { uae_s8 src = get_byte (srca); { uaecptr dsta; dsta = get_word_prefetch (8) << 16; dsta |= regs.irc; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (10); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}}}return 28 * CYCLE_UNIT / 2; } /* 28 (6/1) */ /* MOVE.B (d16,PC),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_13fa_11)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); { uaecptr dsta; dsta = get_word_prefetch (6) << 16; dsta |= regs.irc; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (8); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}}}return 24 * CYCLE_UNIT / 2; } /* 24 (5/1) */ /* MOVE.B (d8,PC,Xn),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_13fb_11)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_word_prefetch (4)); { uae_s8 src = get_byte (srca); { uaecptr dsta; dsta = get_word_prefetch (6) << 16; dsta |= regs.irc; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (8); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}}}return 26 * CYCLE_UNIT / 2; } /* 24 (5/1) */ /* MOVE.B #.B,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_13fc_11)(uae_u32 opcode) { {{ uae_s8 src = (uae_u8)get_word_prefetch (4); { uaecptr dsta = get_long_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); m68k_incpc (8); regs.ir = regs.irc; get_word_prefetch (2); }}}return 24 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* MOVE.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_2000_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); }}}return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* MOVE.L An,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_2008_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); }}}return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* MOVE.L (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_2010_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel2503; } {{ uae_s32 src = get_long (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); }}}}}endlabel2503: ; return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* MOVE.L (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_2018_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel2504; } {{ uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) += 4; { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); }}}}}endlabel2504: ; return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* MOVE.L -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_2020_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; if (srca & 1) { exception3 (opcode, srca); goto endlabel2505; } {{ uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) = srca; { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); }}}}}endlabel2505: ; return 14 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* MOVE.L (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_2028_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2506; } {{ uae_s32 src = get_long (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}}endlabel2506: ; return 16 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* MOVE.L (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_2030_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2507; } {{ uae_s32 src = get_long (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}}endlabel2507: ; return 18 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* MOVE.L (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_2038_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2508; } {{ uae_s32 src = get_long (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}}endlabel2508: ; return 16 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* MOVE.L (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_2039_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_prefetch (4); if (srca & 1) { m68k_incpc (4); exception3 (opcode, srca); goto endlabel2509; } {{ uae_s32 src = get_long (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpc (6); regs.ir = regs.irc; get_word_prefetch (2); }}}}}endlabel2509: ; return 20 * CYCLE_UNIT / 2; } /* 20 (5/0) */ /* MOVE.L (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_203a_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2510; } {{ uae_s32 src = get_long (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}}endlabel2510: ; return 16 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* MOVE.L (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_203b_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_word_prefetch (4)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2511; } {{ uae_s32 src = get_long (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}}endlabel2511: ; return 18 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* MOVE.L #.L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_203c_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_long_prefetch (4); { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpc (6); regs.ir = regs.irc; get_word_prefetch (2); }}}return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* MOVEA.L Dn,An */ uae_u32 REGPARAM2 CPUFUNC(op_2040_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { m68k_areg (regs, dstreg) = (src); m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); }}}return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* MOVEA.L An,An */ uae_u32 REGPARAM2 CPUFUNC(op_2048_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { m68k_areg (regs, dstreg) = (src); m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); }}}return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* MOVEA.L (An),An */ uae_u32 REGPARAM2 CPUFUNC(op_2050_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel2515; } {{ uae_s32 src = get_long (srca); { m68k_areg (regs, dstreg) = (src); m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); }}}}}endlabel2515: ; return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* MOVEA.L (An)+,An */ uae_u32 REGPARAM2 CPUFUNC(op_2058_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel2516; } {{ uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) += 4; { m68k_areg (regs, dstreg) = (src); m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); }}}}}endlabel2516: ; return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* MOVEA.L -(An),An */ uae_u32 REGPARAM2 CPUFUNC(op_2060_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; if (srca & 1) { exception3 (opcode, srca); goto endlabel2517; } {{ uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) = srca; { m68k_areg (regs, dstreg) = (src); m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); }}}}}endlabel2517: ; return 14 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* MOVEA.L (d16,An),An */ uae_u32 REGPARAM2 CPUFUNC(op_2068_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2518; } {{ uae_s32 src = get_long (srca); { m68k_areg (regs, dstreg) = (src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}}endlabel2518: ; return 16 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* MOVEA.L (d8,An,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_2070_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2519; } {{ uae_s32 src = get_long (srca); { m68k_areg (regs, dstreg) = (src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}}endlabel2519: ; return 18 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* MOVEA.L (xxx).W,An */ uae_u32 REGPARAM2 CPUFUNC(op_2078_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2520; } {{ uae_s32 src = get_long (srca); { m68k_areg (regs, dstreg) = (src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}}endlabel2520: ; return 16 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* MOVEA.L (xxx).L,An */ uae_u32 REGPARAM2 CPUFUNC(op_2079_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_prefetch (4); if (srca & 1) { m68k_incpc (4); exception3 (opcode, srca); goto endlabel2521; } {{ uae_s32 src = get_long (srca); { m68k_areg (regs, dstreg) = (src); m68k_incpc (6); regs.ir = regs.irc; get_word_prefetch (2); }}}}}endlabel2521: ; return 20 * CYCLE_UNIT / 2; } /* 20 (5/0) */ /* MOVEA.L (d16,PC),An */ uae_u32 REGPARAM2 CPUFUNC(op_207a_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2522; } {{ uae_s32 src = get_long (srca); { m68k_areg (regs, dstreg) = (src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}}endlabel2522: ; return 16 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* MOVEA.L (d8,PC,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_207b_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_word_prefetch (4)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2523; } {{ uae_s32 src = get_long (srca); { m68k_areg (regs, dstreg) = (src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}}endlabel2523: ; return 18 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* MOVEA.L #.L,An */ uae_u32 REGPARAM2 CPUFUNC(op_207c_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_long_prefetch (4); { m68k_areg (regs, dstreg) = (src); m68k_incpc (6); regs.ir = regs.irc; get_word_prefetch (2); }}}return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* MOVE.L Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_2080_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2525; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); }}}}endlabel2525: ; return 12 * CYCLE_UNIT / 2; } /* 12 (1/2) */ /* MOVE.L An,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_2088_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2526; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); }}}}endlabel2526: ; return 12 * CYCLE_UNIT / 2; } /* 12 (1/2) */ /* MOVE.L (An),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_2090_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel2527; } {{ uae_s32 src = get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2527; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2527: ; return 20 * CYCLE_UNIT / 2; } /* 20 (3/2) */ /* MOVE.L (An)+,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_2098_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel2528; } {{ uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) += 4; { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2528; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2528: ; return 20 * CYCLE_UNIT / 2; } /* 20 (3/2) */ /* MOVE.L -(An),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_20a0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; if (srca & 1) { exception3 (opcode, srca); goto endlabel2529; } {{ uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2529; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2529: ; return 22 * CYCLE_UNIT / 2; } /* 20 (3/2) */ /* MOVE.L (d16,An),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_20a8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2530; } {{ uae_s32 src = get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2530; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2530: ; return 24 * CYCLE_UNIT / 2; } /* 24 (4/2) */ /* MOVE.L (d8,An,Xn),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_20b0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2531; } {{ uae_s32 src = get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2531; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2531: ; return 26 * CYCLE_UNIT / 2; } /* 24 (4/2) */ /* MOVE.L (xxx).W,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_20b8_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2532; } {{ uae_s32 src = get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2532; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2532: ; return 24 * CYCLE_UNIT / 2; } /* 24 (4/2) */ /* MOVE.L (xxx).L,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_20b9_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_prefetch (4); if (srca & 1) { m68k_incpc (4); exception3 (opcode, srca); goto endlabel2533; } {{ uae_s32 src = get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel2533; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (6); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2533: ; return 28 * CYCLE_UNIT / 2; } /* 28 (5/2) */ /* MOVE.L (d16,PC),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_20ba_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2534; } {{ uae_s32 src = get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2534; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2534: ; return 24 * CYCLE_UNIT / 2; } /* 24 (4/2) */ /* MOVE.L (d8,PC,Xn),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_20bb_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_word_prefetch (4)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2535; } {{ uae_s32 src = get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2535; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2535: ; return 26 * CYCLE_UNIT / 2; } /* 24 (4/2) */ /* MOVE.L #.L,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_20bc_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_long_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel2536; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (6); regs.ir = regs.irc; get_word_prefetch (2); }}}}endlabel2536: ; return 20 * CYCLE_UNIT / 2; } /* 20 (3/2) */ /* MOVE.L Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_20c0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2537; } { m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); }}}}endlabel2537: ; return 12 * CYCLE_UNIT / 2; } /* 12 (1/2) */ /* MOVE.L An,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_20c8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2538; } { m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); }}}}endlabel2538: ; return 12 * CYCLE_UNIT / 2; } /* 12 (1/2) */ /* MOVE.L (An),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_20d0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel2539; } {{ uae_s32 src = get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2539; } { m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2539: ; return 20 * CYCLE_UNIT / 2; } /* 20 (3/2) */ /* MOVE.L (An)+,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_20d8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel2540; } {{ uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) += 4; { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2540; } { m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2540: ; return 20 * CYCLE_UNIT / 2; } /* 20 (3/2) */ /* MOVE.L -(An),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_20e0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; if (srca & 1) { exception3 (opcode, srca); goto endlabel2541; } {{ uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2541; } { m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2541: ; return 22 * CYCLE_UNIT / 2; } /* 20 (3/2) */ /* MOVE.L (d16,An),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_20e8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2542; } {{ uae_s32 src = get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2542; } { m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2542: ; return 24 * CYCLE_UNIT / 2; } /* 24 (4/2) */ /* MOVE.L (d8,An,Xn),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_20f0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2543; } {{ uae_s32 src = get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2543; } { m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2543: ; return 26 * CYCLE_UNIT / 2; } /* 24 (4/2) */ /* MOVE.L (xxx).W,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_20f8_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2544; } {{ uae_s32 src = get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2544; } { m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2544: ; return 24 * CYCLE_UNIT / 2; } /* 24 (4/2) */ /* MOVE.L (xxx).L,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_20f9_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_prefetch (4); if (srca & 1) { m68k_incpc (4); exception3 (opcode, srca); goto endlabel2545; } {{ uae_s32 src = get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel2545; } { m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (6); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2545: ; return 28 * CYCLE_UNIT / 2; } /* 28 (5/2) */ /* MOVE.L (d16,PC),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_20fa_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2546; } {{ uae_s32 src = get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2546; } { m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2546: ; return 24 * CYCLE_UNIT / 2; } /* 24 (4/2) */ /* MOVE.L (d8,PC,Xn),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_20fb_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_word_prefetch (4)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2547; } {{ uae_s32 src = get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2547; } { m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2547: ; return 26 * CYCLE_UNIT / 2; } /* 24 (4/2) */ /* MOVE.L #.L,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_20fc_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_long_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel2548; } { m68k_areg (regs, dstreg) += 4; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (6); regs.ir = regs.irc; get_word_prefetch (2); }}}}endlabel2548: ; return 20 * CYCLE_UNIT / 2; } /* 20 (3/2) */ /* MOVE.L Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_2100_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2549; } { m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; get_word_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (2); }}}}endlabel2549: ; return 12 * CYCLE_UNIT / 2; } /* 12 (1/2) */ /* MOVE.L An,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_2108_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2550; } { m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; get_word_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (2); }}}}endlabel2550: ; return 12 * CYCLE_UNIT / 2; } /* 12 (1/2) */ /* MOVE.L (An),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_2110_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel2551; } {{ uae_s32 src = get_long (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2551; } { m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; get_word_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (2); }}}}}}endlabel2551: ; return 20 * CYCLE_UNIT / 2; } /* 20 (3/2) */ /* MOVE.L (An)+,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_2118_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel2552; } {{ uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) += 4; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2552; } { m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; get_word_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (2); }}}}}}endlabel2552: ; return 20 * CYCLE_UNIT / 2; } /* 20 (3/2) */ /* MOVE.L -(An),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_2120_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; if (srca & 1) { exception3 (opcode, srca); goto endlabel2553; } {{ uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2553; } { m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; get_word_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (2); }}}}}}endlabel2553: ; return 22 * CYCLE_UNIT / 2; } /* 20 (3/2) */ /* MOVE.L (d16,An),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_2128_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2554; } {{ uae_s32 src = get_long (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2554; } { m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; get_word_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (4); }}}}}}endlabel2554: ; return 24 * CYCLE_UNIT / 2; } /* 24 (4/2) */ /* MOVE.L (d8,An,Xn),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_2130_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2555; } {{ uae_s32 src = get_long (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2555; } { m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; get_word_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (4); }}}}}}endlabel2555: ; return 26 * CYCLE_UNIT / 2; } /* 24 (4/2) */ /* MOVE.L (xxx).W,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_2138_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2556; } {{ uae_s32 src = get_long (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2556; } { m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; get_word_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (4); }}}}}}endlabel2556: ; return 24 * CYCLE_UNIT / 2; } /* 24 (4/2) */ /* MOVE.L (xxx).L,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_2139_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_prefetch (4); if (srca & 1) { m68k_incpc (4); exception3 (opcode, srca); goto endlabel2557; } {{ uae_s32 src = get_long (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel2557; } { m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; get_word_prefetch (8); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (6); }}}}}}endlabel2557: ; return 28 * CYCLE_UNIT / 2; } /* 28 (5/2) */ /* MOVE.L (d16,PC),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_213a_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2558; } {{ uae_s32 src = get_long (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2558; } { m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; get_word_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (4); }}}}}}endlabel2558: ; return 24 * CYCLE_UNIT / 2; } /* 24 (4/2) */ /* MOVE.L (d8,PC,Xn),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_213b_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_word_prefetch (4)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2559; } {{ uae_s32 src = get_long (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2559; } { m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; get_word_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (4); }}}}}}endlabel2559: ; return 26 * CYCLE_UNIT / 2; } /* 24 (4/2) */ /* MOVE.L #.L,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_213c_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_long_prefetch (4); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel2560; } { m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; get_word_prefetch (8); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (6); }}}}endlabel2560: ; return 20 * CYCLE_UNIT / 2; } /* 20 (3/2) */ /* MOVE.L Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_2140_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2561; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}endlabel2561: ; return 16 * CYCLE_UNIT / 2; } /* 16 (2/2) */ /* MOVE.L An,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_2148_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2562; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}endlabel2562: ; return 16 * CYCLE_UNIT / 2; } /* 16 (2/2) */ /* MOVE.L (An),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_2150_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel2563; } {{ uae_s32 src = get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2563; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2563: ; return 24 * CYCLE_UNIT / 2; } /* 24 (4/2) */ /* MOVE.L (An)+,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_2158_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel2564; } {{ uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) += 4; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2564; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2564: ; return 24 * CYCLE_UNIT / 2; } /* 24 (4/2) */ /* MOVE.L -(An),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_2160_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; if (srca & 1) { exception3 (opcode, srca); goto endlabel2565; } {{ uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2565; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2565: ; return 26 * CYCLE_UNIT / 2; } /* 24 (4/2) */ /* MOVE.L (d16,An),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_2168_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2566; } {{ uae_s32 src = get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (6); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel2566; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (6); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2566: ; return 28 * CYCLE_UNIT / 2; } /* 28 (5/2) */ #endif #ifdef PART_3 /* MOVE.L (d8,An,Xn),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_2170_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2567; } {{ uae_s32 src = get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (6); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel2567; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (6); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2567: ; return 30 * CYCLE_UNIT / 2; } /* 28 (5/2) */ /* MOVE.L (xxx).W,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_2178_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2568; } {{ uae_s32 src = get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (6); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel2568; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (6); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2568: ; return 28 * CYCLE_UNIT / 2; } /* 28 (5/2) */ /* MOVE.L (xxx).L,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_2179_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_prefetch (4); if (srca & 1) { m68k_incpc (4); exception3 (opcode, srca); goto endlabel2569; } {{ uae_s32 src = get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (8); if (dsta & 1) { m68k_incpc (8); exception3 (opcode, dsta); goto endlabel2569; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (8); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2569: ; return 32 * CYCLE_UNIT / 2; } /* 32 (6/2) */ /* MOVE.L (d16,PC),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_217a_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2570; } {{ uae_s32 src = get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (6); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel2570; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (6); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2570: ; return 28 * CYCLE_UNIT / 2; } /* 28 (5/2) */ /* MOVE.L (d8,PC,Xn),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_217b_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_word_prefetch (4)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2571; } {{ uae_s32 src = get_long (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (6); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel2571; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (6); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2571: ; return 30 * CYCLE_UNIT / 2; } /* 28 (5/2) */ /* MOVE.L #.L,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_217c_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_long_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (8); if (dsta & 1) { m68k_incpc (8); exception3 (opcode, dsta); goto endlabel2572; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (8); regs.ir = regs.irc; get_word_prefetch (2); }}}}endlabel2572: ; return 24 * CYCLE_UNIT / 2; } /* 24 (4/2) */ /* MOVE.L Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_2180_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (4)); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2573; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}endlabel2573: ; return 18 * CYCLE_UNIT / 2; } /* 16 (2/2) */ /* MOVE.L An,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_2188_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (4)); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2574; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}endlabel2574: ; return 18 * CYCLE_UNIT / 2; } /* 16 (2/2) */ /* MOVE.L (An),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_2190_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel2575; } {{ uae_s32 src = get_long (srca); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (4)); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2575; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2575: ; return 26 * CYCLE_UNIT / 2; } /* 24 (4/2) */ /* MOVE.L (An)+,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_2198_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel2576; } {{ uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) += 4; { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (4)); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2576; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2576: ; return 26 * CYCLE_UNIT / 2; } /* 24 (4/2) */ /* MOVE.L -(An),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_21a0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; if (srca & 1) { exception3 (opcode, srca); goto endlabel2577; } {{ uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (4)); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2577; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2577: ; return 28 * CYCLE_UNIT / 2; } /* 24 (4/2) */ /* MOVE.L (d16,An),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_21a8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2578; } {{ uae_s32 src = get_long (srca); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (6)); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel2578; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (6); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2578: ; return 30 * CYCLE_UNIT / 2; } /* 28 (5/2) */ /* MOVE.L (d8,An,Xn),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_21b0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2579; } {{ uae_s32 src = get_long (srca); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (6)); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel2579; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (6); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2579: ; return 32 * CYCLE_UNIT / 2; } /* 28 (5/2) */ /* MOVE.L (xxx).W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_21b8_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2580; } {{ uae_s32 src = get_long (srca); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (6)); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel2580; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (6); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2580: ; return 30 * CYCLE_UNIT / 2; } /* 28 (5/2) */ /* MOVE.L (xxx).L,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_21b9_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_prefetch (4); if (srca & 1) { m68k_incpc (4); exception3 (opcode, srca); goto endlabel2581; } {{ uae_s32 src = get_long (srca); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (8)); if (dsta & 1) { m68k_incpc (8); exception3 (opcode, dsta); goto endlabel2581; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (8); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2581: ; return 34 * CYCLE_UNIT / 2; } /* 32 (6/2) */ /* MOVE.L (d16,PC),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_21ba_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2582; } {{ uae_s32 src = get_long (srca); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (6)); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel2582; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (6); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2582: ; return 30 * CYCLE_UNIT / 2; } /* 28 (5/2) */ /* MOVE.L (d8,PC,Xn),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_21bb_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_word_prefetch (4)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2583; } {{ uae_s32 src = get_long (srca); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (6)); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel2583; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (6); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2583: ; return 32 * CYCLE_UNIT / 2; } /* 28 (5/2) */ /* MOVE.L #.L,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_21bc_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_long_prefetch (4); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (8)); if (dsta & 1) { m68k_incpc (8); exception3 (opcode, dsta); goto endlabel2584; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (8); regs.ir = regs.irc; get_word_prefetch (2); }}}}endlabel2584: ; return 26 * CYCLE_UNIT / 2; } /* 24 (4/2) */ /* MOVE.L Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_21c0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (4); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2585; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}endlabel2585: ; return 16 * CYCLE_UNIT / 2; } /* 16 (2/2) */ /* MOVE.L An,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_21c8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_areg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (4); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2586; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}endlabel2586: ; return 16 * CYCLE_UNIT / 2; } /* 16 (2/2) */ /* MOVE.L (An),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_21d0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel2587; } {{ uae_s32 src = get_long (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (4); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2587; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2587: ; return 24 * CYCLE_UNIT / 2; } /* 24 (4/2) */ /* MOVE.L (An)+,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_21d8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel2588; } {{ uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) += 4; { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (4); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2588; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2588: ; return 24 * CYCLE_UNIT / 2; } /* 24 (4/2) */ /* MOVE.L -(An),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_21e0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; if (srca & 1) { exception3 (opcode, srca); goto endlabel2589; } {{ uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (4); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2589; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2589: ; return 26 * CYCLE_UNIT / 2; } /* 24 (4/2) */ /* MOVE.L (d16,An),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_21e8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2590; } {{ uae_s32 src = get_long (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (6); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel2590; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (6); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2590: ; return 28 * CYCLE_UNIT / 2; } /* 28 (5/2) */ /* MOVE.L (d8,An,Xn),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_21f0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2591; } {{ uae_s32 src = get_long (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (6); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel2591; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (6); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2591: ; return 30 * CYCLE_UNIT / 2; } /* 28 (5/2) */ /* MOVE.L (xxx).W,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_21f8_11)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2592; } {{ uae_s32 src = get_long (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (6); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel2592; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (6); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2592: ; return 28 * CYCLE_UNIT / 2; } /* 28 (5/2) */ /* MOVE.L (xxx).L,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_21f9_11)(uae_u32 opcode) { {{ uaecptr srca = get_long_prefetch (4); if (srca & 1) { m68k_incpc (4); exception3 (opcode, srca); goto endlabel2593; } {{ uae_s32 src = get_long (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (8); if (dsta & 1) { m68k_incpc (8); exception3 (opcode, dsta); goto endlabel2593; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (8); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2593: ; return 32 * CYCLE_UNIT / 2; } /* 32 (6/2) */ /* MOVE.L (d16,PC),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_21fa_11)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2594; } {{ uae_s32 src = get_long (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (6); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel2594; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (6); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2594: ; return 28 * CYCLE_UNIT / 2; } /* 28 (5/2) */ /* MOVE.L (d8,PC,Xn),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_21fb_11)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_word_prefetch (4)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2595; } {{ uae_s32 src = get_long (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (6); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel2595; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (6); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2595: ; return 30 * CYCLE_UNIT / 2; } /* 28 (5/2) */ /* MOVE.L #.L,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_21fc_11)(uae_u32 opcode) { {{ uae_s32 src = get_long_prefetch (4); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (8); if (dsta & 1) { m68k_incpc (8); exception3 (opcode, dsta); goto endlabel2596; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (8); regs.ir = regs.irc; get_word_prefetch (2); }}}}endlabel2596: ; return 24 * CYCLE_UNIT / 2; } /* 24 (4/2) */ /* MOVE.L Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_23c0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_prefetch (4); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel2597; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (6); regs.ir = regs.irc; get_word_prefetch (2); }}}}endlabel2597: ; return 20 * CYCLE_UNIT / 2; } /* 20 (3/2) */ /* MOVE.L An,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_23c8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_areg (regs, srcreg); { uaecptr dsta = get_long_prefetch (4); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel2598; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (6); regs.ir = regs.irc; get_word_prefetch (2); }}}}endlabel2598: ; return 20 * CYCLE_UNIT / 2; } /* 20 (3/2) */ /* MOVE.L (An),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_23d0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel2599; } {{ uae_s32 src = get_long (srca); { uaecptr dsta; dsta = get_word_prefetch (4) << 16; dsta |= regs.irc; if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel2599; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (6); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2599: ; return 28 * CYCLE_UNIT / 2; } /* 28 (5/2) */ /* MOVE.L (An)+,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_23d8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel2600; } {{ uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) += 4; { uaecptr dsta; dsta = get_word_prefetch (4) << 16; dsta |= regs.irc; if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel2600; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (6); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2600: ; return 28 * CYCLE_UNIT / 2; } /* 28 (5/2) */ /* MOVE.L -(An),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_23e0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; if (srca & 1) { exception3 (opcode, srca); goto endlabel2601; } {{ uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = get_word_prefetch (4) << 16; dsta |= regs.irc; if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel2601; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (6); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2601: ; return 30 * CYCLE_UNIT / 2; } /* 28 (5/2) */ /* MOVE.L (d16,An),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_23e8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2602; } {{ uae_s32 src = get_long (srca); { uaecptr dsta; dsta = get_word_prefetch (6) << 16; dsta |= regs.irc; if (dsta & 1) { m68k_incpc (8); exception3 (opcode, dsta); goto endlabel2602; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (8); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2602: ; return 32 * CYCLE_UNIT / 2; } /* 32 (6/2) */ /* MOVE.L (d8,An,Xn),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_23f0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2603; } {{ uae_s32 src = get_long (srca); { uaecptr dsta; dsta = get_word_prefetch (6) << 16; dsta |= regs.irc; if (dsta & 1) { m68k_incpc (8); exception3 (opcode, dsta); goto endlabel2603; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (8); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2603: ; return 34 * CYCLE_UNIT / 2; } /* 32 (6/2) */ /* MOVE.L (xxx).W,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_23f8_11)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2604; } {{ uae_s32 src = get_long (srca); { uaecptr dsta; dsta = get_word_prefetch (6) << 16; dsta |= regs.irc; if (dsta & 1) { m68k_incpc (8); exception3 (opcode, dsta); goto endlabel2604; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (8); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2604: ; return 32 * CYCLE_UNIT / 2; } /* 32 (6/2) */ /* MOVE.L (xxx).L,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_23f9_11)(uae_u32 opcode) { {{ uaecptr srca = get_long_prefetch (4); if (srca & 1) { m68k_incpc (4); exception3 (opcode, srca); goto endlabel2605; } {{ uae_s32 src = get_long (srca); { uaecptr dsta; dsta = get_word_prefetch (8) << 16; dsta |= regs.irc; if (dsta & 1) { m68k_incpc (10); exception3 (opcode, dsta); goto endlabel2605; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (10); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2605: ; return 36 * CYCLE_UNIT / 2; } /* 36 (7/2) */ /* MOVE.L (d16,PC),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_23fa_11)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2606; } {{ uae_s32 src = get_long (srca); { uaecptr dsta; dsta = get_word_prefetch (6) << 16; dsta |= regs.irc; if (dsta & 1) { m68k_incpc (8); exception3 (opcode, dsta); goto endlabel2606; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (8); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2606: ; return 32 * CYCLE_UNIT / 2; } /* 32 (6/2) */ /* MOVE.L (d8,PC,Xn),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_23fb_11)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_word_prefetch (4)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2607; } {{ uae_s32 src = get_long (srca); { uaecptr dsta; dsta = get_word_prefetch (6) << 16; dsta |= regs.irc; if (dsta & 1) { m68k_incpc (8); exception3 (opcode, dsta); goto endlabel2607; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (8); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2607: ; return 34 * CYCLE_UNIT / 2; } /* 32 (6/2) */ /* MOVE.L #.L,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_23fc_11)(uae_u32 opcode) { {{ uae_s32 src = get_long_prefetch (4); { uaecptr dsta = get_long_prefetch (8); if (dsta & 1) { m68k_incpc (10); exception3 (opcode, dsta); goto endlabel2608; } { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); put_long (dsta, src); m68k_incpc (10); regs.ir = regs.irc; get_word_prefetch (2); }}}}endlabel2608: ; return 28 * CYCLE_UNIT / 2; } /* 28 (5/2) */ /* MOVE.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_3000_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); }}}return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* MOVE.W An,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_3008_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); }}}return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* MOVE.W (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_3010_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel2611; } {{ uae_s16 src = get_word (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); }}}}}endlabel2611: ; return 8 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* MOVE.W (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_3018_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel2612; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) += 2; { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); }}}}}endlabel2612: ; return 8 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* MOVE.W -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_3020_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; if (srca & 1) { exception3 (opcode, srca); goto endlabel2613; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); }}}}}endlabel2613: ; return 10 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* MOVE.W (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_3028_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2614; } {{ uae_s16 src = get_word (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}}endlabel2614: ; return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* MOVE.W (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_3030_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2615; } {{ uae_s16 src = get_word (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}}endlabel2615: ; return 14 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* MOVE.W (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_3038_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2616; } {{ uae_s16 src = get_word (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}}endlabel2616: ; return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* MOVE.W (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_3039_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_prefetch (4); if (srca & 1) { m68k_incpc (4); exception3 (opcode, srca); goto endlabel2617; } {{ uae_s16 src = get_word (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpc (6); regs.ir = regs.irc; get_word_prefetch (2); }}}}}endlabel2617: ; return 16 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* MOVE.W (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_303a_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2618; } {{ uae_s16 src = get_word (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}}endlabel2618: ; return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* MOVE.W (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_303b_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_word_prefetch (4)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2619; } {{ uae_s16 src = get_word (srca); { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}}endlabel2619: ; return 14 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* MOVE.W #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_303c_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_prefetch (4); { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}return 8 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* MOVEA.W Dn,An */ uae_u32 REGPARAM2 CPUFUNC(op_3040_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); }}}return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* MOVEA.W An,An */ uae_u32 REGPARAM2 CPUFUNC(op_3048_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); }}}return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* MOVEA.W (An),An */ uae_u32 REGPARAM2 CPUFUNC(op_3050_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel2623; } {{ uae_s16 src = get_word (srca); { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); }}}}}endlabel2623: ; return 8 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* MOVEA.W (An)+,An */ uae_u32 REGPARAM2 CPUFUNC(op_3058_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel2624; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) += 2; { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); }}}}}endlabel2624: ; return 8 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* MOVEA.W -(An),An */ uae_u32 REGPARAM2 CPUFUNC(op_3060_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; if (srca & 1) { exception3 (opcode, srca); goto endlabel2625; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); }}}}}endlabel2625: ; return 10 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* MOVEA.W (d16,An),An */ uae_u32 REGPARAM2 CPUFUNC(op_3068_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2626; } {{ uae_s16 src = get_word (srca); { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}}endlabel2626: ; return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* MOVEA.W (d8,An,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_3070_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2627; } {{ uae_s16 src = get_word (srca); { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}}endlabel2627: ; return 14 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* MOVEA.W (xxx).W,An */ uae_u32 REGPARAM2 CPUFUNC(op_3078_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2628; } {{ uae_s16 src = get_word (srca); { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}}endlabel2628: ; return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* MOVEA.W (xxx).L,An */ uae_u32 REGPARAM2 CPUFUNC(op_3079_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_prefetch (4); if (srca & 1) { m68k_incpc (4); exception3 (opcode, srca); goto endlabel2629; } {{ uae_s16 src = get_word (srca); { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpc (6); regs.ir = regs.irc; get_word_prefetch (2); }}}}}endlabel2629: ; return 16 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* MOVEA.W (d16,PC),An */ uae_u32 REGPARAM2 CPUFUNC(op_307a_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2630; } {{ uae_s16 src = get_word (srca); { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}}endlabel2630: ; return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* MOVEA.W (d8,PC,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_307b_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_word_prefetch (4)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2631; } {{ uae_s16 src = get_word (srca); { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}}endlabel2631: ; return 14 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* MOVEA.W #.W,An */ uae_u32 REGPARAM2 CPUFUNC(op_307c_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_prefetch (4); { src = (uae_s32)(uae_s16)src; m68k_areg (regs, dstreg) = (uae_s32)(uae_s16)(src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}return 8 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* MOVE.W Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_3080_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2633; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); }}}}endlabel2633: ; return 8 * CYCLE_UNIT / 2; } /* 8 (1/1) */ /* MOVE.W An,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_3088_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2634; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); }}}}endlabel2634: ; return 8 * CYCLE_UNIT / 2; } /* 8 (1/1) */ /* MOVE.W (An),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_3090_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel2635; } {{ uae_s16 src = get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2635; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2635: ; return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* MOVE.W (An)+,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_3098_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel2636; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) += 2; { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2636; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2636: ; return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* MOVE.W -(An),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_30a0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; if (srca & 1) { exception3 (opcode, srca); goto endlabel2637; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2637; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2637: ; return 14 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* MOVE.W (d16,An),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_30a8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2638; } {{ uae_s16 src = get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2638; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2638: ; return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* MOVE.W (d8,An,Xn),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_30b0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2639; } {{ uae_s16 src = get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2639; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2639: ; return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* MOVE.W (xxx).W,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_30b8_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2640; } {{ uae_s16 src = get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2640; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2640: ; return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* MOVE.W (xxx).L,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_30b9_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_prefetch (4); if (srca & 1) { m68k_incpc (4); exception3 (opcode, srca); goto endlabel2641; } {{ uae_s16 src = get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel2641; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (6); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2641: ; return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* MOVE.W (d16,PC),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_30ba_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2642; } {{ uae_s16 src = get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2642; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2642: ; return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* MOVE.W (d8,PC,Xn),(An) */ uae_u32 REGPARAM2 CPUFUNC(op_30bb_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_word_prefetch (4)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2643; } {{ uae_s16 src = get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2643; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2643: ; return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* MOVE.W #.W,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_30bc_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2644; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}endlabel2644: ; return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* MOVE.W Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_30c0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2645; } { m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); }}}}endlabel2645: ; return 8 * CYCLE_UNIT / 2; } /* 8 (1/1) */ /* MOVE.W An,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_30c8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2646; } { m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); }}}}endlabel2646: ; return 8 * CYCLE_UNIT / 2; } /* 8 (1/1) */ /* MOVE.W (An),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_30d0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel2647; } {{ uae_s16 src = get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2647; } { m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2647: ; return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* MOVE.W (An)+,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_30d8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel2648; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) += 2; { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2648; } { m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2648: ; return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* MOVE.W -(An),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_30e0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; if (srca & 1) { exception3 (opcode, srca); goto endlabel2649; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2649; } { m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2649: ; return 14 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* MOVE.W (d16,An),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_30e8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2650; } {{ uae_s16 src = get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2650; } { m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2650: ; return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* MOVE.W (d8,An,Xn),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_30f0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2651; } {{ uae_s16 src = get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2651; } { m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2651: ; return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* MOVE.W (xxx).W,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_30f8_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2652; } {{ uae_s16 src = get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2652; } { m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2652: ; return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* MOVE.W (xxx).L,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_30f9_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_prefetch (4); if (srca & 1) { m68k_incpc (4); exception3 (opcode, srca); goto endlabel2653; } {{ uae_s16 src = get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel2653; } { m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (6); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2653: ; return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* MOVE.W (d16,PC),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_30fa_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2654; } {{ uae_s16 src = get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2654; } { m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2654: ; return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* MOVE.W (d8,PC,Xn),(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_30fb_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_word_prefetch (4)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2655; } {{ uae_s16 src = get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2655; } { m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2655: ; return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* MOVE.W #.W,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_30fc_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2656; } { m68k_areg (regs, dstreg) += 2; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}endlabel2656: ; return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* MOVE.W Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_3100_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2657; } { m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; get_word_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (2); }}}}endlabel2657: ; return 8 * CYCLE_UNIT / 2; } /* 8 (1/1) */ /* MOVE.W An,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_3108_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2658; } { m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; get_word_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (2); }}}}endlabel2658: ; return 8 * CYCLE_UNIT / 2; } /* 8 (1/1) */ /* MOVE.W (An),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_3110_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel2659; } {{ uae_s16 src = get_word (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2659; } { m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; get_word_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (2); }}}}}}endlabel2659: ; return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* MOVE.W (An)+,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_3118_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel2660; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) += 2; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2660; } { m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; get_word_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (2); }}}}}}endlabel2660: ; return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* MOVE.W -(An),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_3120_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; if (srca & 1) { exception3 (opcode, srca); goto endlabel2661; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2661; } { m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; get_word_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (2); }}}}}}endlabel2661: ; return 14 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* MOVE.W (d16,An),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_3128_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2662; } {{ uae_s16 src = get_word (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2662; } { m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; get_word_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (4); }}}}}}endlabel2662: ; return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* MOVE.W (d8,An,Xn),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_3130_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2663; } {{ uae_s16 src = get_word (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2663; } { m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; get_word_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (4); }}}}}}endlabel2663: ; return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* MOVE.W (xxx).W,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_3138_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2664; } {{ uae_s16 src = get_word (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2664; } { m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; get_word_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (4); }}}}}}endlabel2664: ; return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* MOVE.W (xxx).L,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_3139_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_prefetch (4); if (srca & 1) { m68k_incpc (4); exception3 (opcode, srca); goto endlabel2665; } {{ uae_s16 src = get_word (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel2665; } { m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; get_word_prefetch (8); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (6); }}}}}}endlabel2665: ; return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* MOVE.W (d16,PC),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_313a_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2666; } {{ uae_s16 src = get_word (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2666; } { m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; get_word_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (4); }}}}}}endlabel2666: ; return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* MOVE.W (d8,PC,Xn),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_313b_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_word_prefetch (4)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2667; } {{ uae_s16 src = get_word (srca); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2667; } { m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; get_word_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (4); }}}}}}endlabel2667: ; return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* MOVE.W #.W,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_313c_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2668; } { m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; get_word_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (4); }}}}endlabel2668: ; return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* MOVE.W Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_3140_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2669; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}endlabel2669: ; return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* MOVE.W An,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_3148_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2670; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}endlabel2670: ; return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* MOVE.W (An),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_3150_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel2671; } {{ uae_s16 src = get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2671; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2671: ; return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* MOVE.W (An)+,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_3158_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel2672; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) += 2; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2672; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2672: ; return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* MOVE.W -(An),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_3160_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; if (srca & 1) { exception3 (opcode, srca); goto endlabel2673; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2673; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2673: ; return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* MOVE.W (d16,An),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_3168_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2674; } {{ uae_s16 src = get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (6); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel2674; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (6); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2674: ; return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* MOVE.W (d8,An,Xn),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_3170_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2675; } {{ uae_s16 src = get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (6); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel2675; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (6); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2675: ; return 22 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* MOVE.W (xxx).W,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_3178_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2676; } {{ uae_s16 src = get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (6); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel2676; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (6); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2676: ; return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* MOVE.W (xxx).L,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_3179_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_prefetch (4); if (srca & 1) { m68k_incpc (4); exception3 (opcode, srca); goto endlabel2677; } {{ uae_s16 src = get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (8); if (dsta & 1) { m68k_incpc (8); exception3 (opcode, dsta); goto endlabel2677; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (8); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2677: ; return 24 * CYCLE_UNIT / 2; } /* 24 (5/1) */ /* MOVE.W (d16,PC),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_317a_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2678; } {{ uae_s16 src = get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (6); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel2678; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (6); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2678: ; return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* MOVE.W (d8,PC,Xn),(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_317b_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_word_prefetch (4)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2679; } {{ uae_s16 src = get_word (srca); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (6); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel2679; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (6); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2679: ; return 22 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* MOVE.W #.W,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_317c_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (6); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel2680; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (6); regs.ir = regs.irc; get_word_prefetch (2); }}}}endlabel2680: ; return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* MOVE.W Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_3180_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (4)); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2681; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}endlabel2681: ; return 14 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* MOVE.W An,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_3188_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (4)); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2682; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}endlabel2682: ; return 14 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* MOVE.W (An),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_3190_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel2683; } {{ uae_s16 src = get_word (srca); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (4)); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2683; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2683: ; return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* MOVE.W (An)+,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_3198_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel2684; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) += 2; { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (4)); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2684; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2684: ; return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* MOVE.W -(An),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_31a0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; if (srca & 1) { exception3 (opcode, srca); goto endlabel2685; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (4)); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2685; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2685: ; return 20 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* MOVE.W (d16,An),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_31a8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2686; } {{ uae_s16 src = get_word (srca); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (6)); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel2686; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (6); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2686: ; return 22 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* MOVE.W (d8,An,Xn),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_31b0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2687; } {{ uae_s16 src = get_word (srca); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (6)); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel2687; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (6); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2687: ; return 24 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* MOVE.W (xxx).W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_31b8_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2688; } {{ uae_s16 src = get_word (srca); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (6)); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel2688; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (6); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2688: ; return 22 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* MOVE.W (xxx).L,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_31b9_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_prefetch (4); if (srca & 1) { m68k_incpc (4); exception3 (opcode, srca); goto endlabel2689; } {{ uae_s16 src = get_word (srca); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (8)); if (dsta & 1) { m68k_incpc (8); exception3 (opcode, dsta); goto endlabel2689; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (8); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2689: ; return 26 * CYCLE_UNIT / 2; } /* 24 (5/1) */ /* MOVE.W (d16,PC),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_31ba_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2690; } {{ uae_s16 src = get_word (srca); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (6)); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel2690; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (6); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2690: ; return 22 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* MOVE.W (d8,PC,Xn),(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_31bb_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_word_prefetch (4)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2691; } {{ uae_s16 src = get_word (srca); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (6)); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel2691; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (6); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2691: ; return 24 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* MOVE.W #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_31bc_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (6)); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel2692; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (6); regs.ir = regs.irc; get_word_prefetch (2); }}}}endlabel2692: ; return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* MOVE.W Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_31c0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (4); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2693; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}endlabel2693: ; return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* MOVE.W An,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_31c8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_areg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (4); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2694; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}endlabel2694: ; return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* MOVE.W (An),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_31d0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel2695; } {{ uae_s16 src = get_word (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (4); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2695; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2695: ; return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* MOVE.W (An)+,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_31d8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel2696; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) += 2; { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (4); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2696; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2696: ; return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* MOVE.W -(An),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_31e0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; if (srca & 1) { exception3 (opcode, srca); goto endlabel2697; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (4); if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2697; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (4); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2697: ; return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* MOVE.W (d16,An),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_31e8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2698; } {{ uae_s16 src = get_word (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (6); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel2698; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (6); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2698: ; return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* MOVE.W (d8,An,Xn),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_31f0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2699; } {{ uae_s16 src = get_word (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (6); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel2699; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (6); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2699: ; return 22 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* MOVE.W (xxx).W,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_31f8_11)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2700; } {{ uae_s16 src = get_word (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (6); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel2700; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (6); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2700: ; return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* MOVE.W (xxx).L,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_31f9_11)(uae_u32 opcode) { {{ uaecptr srca = get_long_prefetch (4); if (srca & 1) { m68k_incpc (4); exception3 (opcode, srca); goto endlabel2701; } {{ uae_s16 src = get_word (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (8); if (dsta & 1) { m68k_incpc (8); exception3 (opcode, dsta); goto endlabel2701; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (8); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2701: ; return 24 * CYCLE_UNIT / 2; } /* 24 (5/1) */ /* MOVE.W (d16,PC),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_31fa_11)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2702; } {{ uae_s16 src = get_word (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (6); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel2702; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (6); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2702: ; return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* MOVE.W (d8,PC,Xn),(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_31fb_11)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_word_prefetch (4)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2703; } {{ uae_s16 src = get_word (srca); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (6); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel2703; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (6); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2703: ; return 22 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* MOVE.W #.W,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_31fc_11)(uae_u32 opcode) { {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (6); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel2704; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (6); regs.ir = regs.irc; get_word_prefetch (2); }}}}endlabel2704: ; return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* MOVE.W Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_33c0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_prefetch (4); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel2705; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (6); regs.ir = regs.irc; get_word_prefetch (2); }}}}endlabel2705: ; return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* MOVE.W An,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_33c8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_areg (regs, srcreg); { uaecptr dsta = get_long_prefetch (4); if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel2706; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (6); regs.ir = regs.irc; get_word_prefetch (2); }}}}endlabel2706: ; return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* MOVE.W (An),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_33d0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel2707; } {{ uae_s16 src = get_word (srca); { uaecptr dsta; dsta = get_word_prefetch (4) << 16; dsta |= regs.irc; if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel2707; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (6); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2707: ; return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* MOVE.W (An)+,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_33d8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel2708; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) += 2; { uaecptr dsta; dsta = get_word_prefetch (4) << 16; dsta |= regs.irc; if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel2708; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (6); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2708: ; return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* MOVE.W -(An),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_33e0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; if (srca & 1) { exception3 (opcode, srca); goto endlabel2709; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = get_word_prefetch (4) << 16; dsta |= regs.irc; if (dsta & 1) { m68k_incpc (6); exception3 (opcode, dsta); goto endlabel2709; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (6); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2709: ; return 22 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* MOVE.W (d16,An),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_33e8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2710; } {{ uae_s16 src = get_word (srca); { uaecptr dsta; dsta = get_word_prefetch (6) << 16; dsta |= regs.irc; if (dsta & 1) { m68k_incpc (8); exception3 (opcode, dsta); goto endlabel2710; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (8); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2710: ; return 24 * CYCLE_UNIT / 2; } /* 24 (5/1) */ /* MOVE.W (d8,An,Xn),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_33f0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2711; } {{ uae_s16 src = get_word (srca); { uaecptr dsta; dsta = get_word_prefetch (6) << 16; dsta |= regs.irc; if (dsta & 1) { m68k_incpc (8); exception3 (opcode, dsta); goto endlabel2711; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (8); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2711: ; return 26 * CYCLE_UNIT / 2; } /* 24 (5/1) */ /* MOVE.W (xxx).W,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_33f8_11)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2712; } {{ uae_s16 src = get_word (srca); { uaecptr dsta; dsta = get_word_prefetch (6) << 16; dsta |= regs.irc; if (dsta & 1) { m68k_incpc (8); exception3 (opcode, dsta); goto endlabel2712; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (8); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2712: ; return 24 * CYCLE_UNIT / 2; } /* 24 (5/1) */ /* MOVE.W (xxx).L,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_33f9_11)(uae_u32 opcode) { {{ uaecptr srca = get_long_prefetch (4); if (srca & 1) { m68k_incpc (4); exception3 (opcode, srca); goto endlabel2713; } {{ uae_s16 src = get_word (srca); { uaecptr dsta; dsta = get_word_prefetch (8) << 16; dsta |= regs.irc; if (dsta & 1) { m68k_incpc (10); exception3 (opcode, dsta); goto endlabel2713; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (10); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2713: ; return 28 * CYCLE_UNIT / 2; } /* 28 (6/1) */ /* MOVE.W (d16,PC),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_33fa_11)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2714; } {{ uae_s16 src = get_word (srca); { uaecptr dsta; dsta = get_word_prefetch (6) << 16; dsta |= regs.irc; if (dsta & 1) { m68k_incpc (8); exception3 (opcode, dsta); goto endlabel2714; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (8); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2714: ; return 24 * CYCLE_UNIT / 2; } /* 24 (5/1) */ /* MOVE.W (d8,PC,Xn),(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_33fb_11)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_word_prefetch (4)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2715; } {{ uae_s16 src = get_word (srca); { uaecptr dsta; dsta = get_word_prefetch (6) << 16; dsta |= regs.irc; if (dsta & 1) { m68k_incpc (8); exception3 (opcode, dsta); goto endlabel2715; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (8); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}endlabel2715: ; return 26 * CYCLE_UNIT / 2; } /* 24 (5/1) */ /* MOVE.W #.W,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_33fc_11)(uae_u32 opcode) { {{ uae_s16 src = get_word_prefetch (4); { uaecptr dsta = get_long_prefetch (6); if (dsta & 1) { m68k_incpc (8); exception3 (opcode, dsta); goto endlabel2716; } { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); put_word (dsta, src); m68k_incpc (8); regs.ir = regs.irc; get_word_prefetch (2); }}}}endlabel2716: ; return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* NEGX.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4000_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((newv) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* NEGX.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4010_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); put_byte (srca, newv); }}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* NEGX.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4018_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); put_byte (srca, newv); }}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* NEGX.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_4020_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) = srca; regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); put_byte (srca, newv); }}}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* NEGX.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4028_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); regs.ir = regs.irc; get_word_prefetch (6); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); put_byte (srca, newv); }}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* NEGX.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4030_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); { uae_s8 src = get_byte (srca); regs.ir = regs.irc; get_word_prefetch (6); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); put_byte (srca, newv); }}}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* NEGX.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4038_11)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); regs.ir = regs.irc; get_word_prefetch (6); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); put_byte (srca, newv); }}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* NEGX.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4039_11)(uae_u32 opcode) { {{ uaecptr srca = get_long_prefetch (4); { uae_s8 src = get_byte (srca); regs.ir = regs.irc; get_word_prefetch (8); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); put_byte (srca, newv); }}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* NEGX.W Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4040_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | ((newv) & 0xffff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* NEGX.W (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4050_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel2726; } {{ uae_s16 src = get_word (srca); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); put_word (srca, newv); }}}}}} m68k_incpc (2); endlabel2726: ; return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* NEGX.W (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4058_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel2727; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) += 2; regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); put_word (srca, newv); }}}}}} m68k_incpc (2); endlabel2727: ; return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* NEGX.W -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_4060_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; if (srca & 1) { exception3 (opcode, srca); goto endlabel2728; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); put_word (srca, newv); }}}}}} m68k_incpc (2); endlabel2728: ; return 14 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* NEGX.W (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4068_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel2729; } {{ uae_s16 src = get_word (srca); regs.ir = regs.irc; get_word_prefetch (6); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); put_word (srca, newv); }}}}}} m68k_incpc (4); endlabel2729: ; return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* NEGX.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4070_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel2730; } {{ uae_s16 src = get_word (srca); regs.ir = regs.irc; get_word_prefetch (6); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); put_word (srca, newv); }}}}}} m68k_incpc (4); endlabel2730: ; return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* NEGX.W (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4078_11)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel2731; } {{ uae_s16 src = get_word (srca); regs.ir = regs.irc; get_word_prefetch (6); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); put_word (srca, newv); }}}}}} m68k_incpc (4); endlabel2731: ; return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* NEGX.W (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4079_11)(uae_u32 opcode) { {{ uaecptr srca = get_long_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel2732; } {{ uae_s16 src = get_word (srca); regs.ir = regs.irc; get_word_prefetch (8); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); put_word (srca, newv); }}}}}} m68k_incpc (6); endlabel2732: ; return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* NEGX.L Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4080_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, srcreg) = (newv); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* NEGX.L (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4090_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel2734; } {{ uae_s32 src = get_long (srca); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); put_long (srca, newv); }}}}}} m68k_incpc (2); endlabel2734: ; return 20 * CYCLE_UNIT / 2; } /* 20 (3/2) */ /* NEGX.L (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4098_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel2735; } {{ uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) += 4; regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); put_long (srca, newv); }}}}}} m68k_incpc (2); endlabel2735: ; return 20 * CYCLE_UNIT / 2; } /* 20 (3/2) */ /* NEGX.L -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_40a0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; if (srca & 1) { exception3 (opcode, srca); goto endlabel2736; } {{ uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) = srca; regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); put_long (srca, newv); }}}}}} m68k_incpc (2); endlabel2736: ; return 22 * CYCLE_UNIT / 2; } /* 20 (3/2) */ /* NEGX.L (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_40a8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel2737; } {{ uae_s32 src = get_long (srca); regs.ir = regs.irc; get_word_prefetch (6); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); put_long (srca, newv); }}}}}} m68k_incpc (4); endlabel2737: ; return 24 * CYCLE_UNIT / 2; } /* 24 (4/2) */ /* NEGX.L (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_40b0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel2738; } {{ uae_s32 src = get_long (srca); regs.ir = regs.irc; get_word_prefetch (6); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); put_long (srca, newv); }}}}}} m68k_incpc (4); endlabel2738: ; return 26 * CYCLE_UNIT / 2; } /* 24 (4/2) */ /* NEGX.L (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_40b8_11)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel2739; } {{ uae_s32 src = get_long (srca); regs.ir = regs.irc; get_word_prefetch (6); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); put_long (srca, newv); }}}}}} m68k_incpc (4); endlabel2739: ; return 24 * CYCLE_UNIT / 2; } /* 24 (4/2) */ /* NEGX.L (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_40b9_11)(uae_u32 opcode) { {{ uaecptr srca = get_long_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel2740; } {{ uae_s32 src = get_long (srca); regs.ir = regs.irc; get_word_prefetch (8); { uae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); put_long (srca, newv); }}}}}} m68k_incpc (6); endlabel2740: ; return 28 * CYCLE_UNIT / 2; } /* 28 (5/2) */ /* MVSR2.W Dn */ uae_u32 REGPARAM2 CPUFUNC(op_40c0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ regs.ir = regs.irc; get_word_prefetch (4); MakeSR (); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | ((regs.sr) & 0xffff); }} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* MVSR2.W (An) */ uae_u32 REGPARAM2 CPUFUNC(op_40d0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel2742; } { regs.ir = regs.irc; get_word_prefetch (4); MakeSR (); put_word (srca, regs.sr); }}} m68k_incpc (2); endlabel2742: ; return 8 * CYCLE_UNIT / 2; } /* 8 (1/1) */ /* MVSR2.W (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_40d8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel2743; } { m68k_areg (regs, srcreg) += 2; regs.ir = regs.irc; get_word_prefetch (4); MakeSR (); put_word (srca, regs.sr); }}} m68k_incpc (2); endlabel2743: ; return 8 * CYCLE_UNIT / 2; } /* 8 (1/1) */ /* MVSR2.W -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_40e0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; if (srca & 1) { exception3 (opcode, srca); goto endlabel2744; } { m68k_areg (regs, srcreg) = srca; regs.ir = regs.irc; get_word_prefetch (4); MakeSR (); put_word (srca, regs.sr); }}} m68k_incpc (2); endlabel2744: ; return 10 * CYCLE_UNIT / 2; } /* 8 (1/1) */ /* MVSR2.W (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_40e8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel2745; } { regs.ir = regs.irc; get_word_prefetch (6); MakeSR (); put_word (srca, regs.sr); }}} m68k_incpc (4); endlabel2745: ; return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* MVSR2.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_40f0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel2746; } { regs.ir = regs.irc; get_word_prefetch (6); MakeSR (); put_word (srca, regs.sr); }}} m68k_incpc (4); endlabel2746: ; return 14 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* MVSR2.W (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_40f8_11)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel2747; } { regs.ir = regs.irc; get_word_prefetch (6); MakeSR (); put_word (srca, regs.sr); }}} m68k_incpc (4); endlabel2747: ; return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* MVSR2.W (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_40f9_11)(uae_u32 opcode) { {{ uaecptr srca = get_long_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel2748; } { regs.ir = regs.irc; get_word_prefetch (8); MakeSR (); put_word (srca, regs.sr); }}} m68k_incpc (6); endlabel2748: ; return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* CHK.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4180_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); m68k_incpc (2); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel2749; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel2749; } regs.ir = regs.irc; get_word_prefetch (2); }}}endlabel2749: ; return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* CHK.W (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4190_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel2750; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); m68k_incpc (2); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel2750; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel2750; } regs.ir = regs.irc; get_word_prefetch (2); }}}}}endlabel2750: ; return 8 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* CHK.W (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4198_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel2751; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s16 dst = m68k_dreg (regs, dstreg); m68k_incpc (2); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel2751; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel2751; } regs.ir = regs.irc; get_word_prefetch (2); }}}}}endlabel2751: ; return 8 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* CHK.W -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_41a0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; if (srca & 1) { exception3 (opcode, srca); goto endlabel2752; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s16 dst = m68k_dreg (regs, dstreg); m68k_incpc (2); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel2752; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel2752; } regs.ir = regs.irc; get_word_prefetch (2); }}}}}endlabel2752: ; return 10 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* CHK.W (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_41a8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel2753; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); m68k_incpc (4); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel2753; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel2753; } regs.ir = regs.irc; get_word_prefetch (2); }}}}}endlabel2753: ; return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* CHK.W (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_41b0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel2754; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); m68k_incpc (4); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel2754; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel2754; } regs.ir = regs.irc; get_word_prefetch (2); }}}}}endlabel2754: ; return 14 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* CHK.W (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_41b8_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel2755; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); m68k_incpc (4); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel2755; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel2755; } regs.ir = regs.irc; get_word_prefetch (2); }}}}}endlabel2755: ; return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* CHK.W (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_41b9_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel2756; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); m68k_incpc (6); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel2756; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel2756; } regs.ir = regs.irc; get_word_prefetch (2); }}}}}endlabel2756: ; return 16 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* CHK.W (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_41ba_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel2757; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); m68k_incpc (4); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel2757; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel2757; } regs.ir = regs.irc; get_word_prefetch (2); }}}}}endlabel2757: ; return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* CHK.W (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_41bb_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_word_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel2758; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); m68k_incpc (4); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel2758; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel2758; } regs.ir = regs.irc; get_word_prefetch (2); }}}}}endlabel2758: ; return 14 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* CHK.W #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_41bc_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_prefetch (4); { uae_s16 dst = m68k_dreg (regs, dstreg); m68k_incpc (4); if (dst > src) { SET_NFLG (0); Exception (6); goto endlabel2759; } if ((uae_s32)dst < 0) { SET_NFLG (1); Exception (6); goto endlabel2759; } regs.ir = regs.irc; get_word_prefetch (2); }}}endlabel2759: ; return 8 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* LEA.L (An),An */ uae_u32 REGPARAM2 CPUFUNC(op_41d0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { regs.ir = regs.irc; get_word_prefetch (4); m68k_areg (regs, dstreg) = (srca); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* LEA.L (d16,An),An */ uae_u32 REGPARAM2 CPUFUNC(op_41e8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); { regs.ir = regs.irc; get_word_prefetch (6); m68k_areg (regs, dstreg) = (srca); }}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* LEA.L (d8,An,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_41f0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); { regs.ir = regs.irc; get_word_prefetch (6); m68k_areg (regs, dstreg) = (srca); }}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* LEA.L (xxx).W,An */ uae_u32 REGPARAM2 CPUFUNC(op_41f8_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); { regs.ir = regs.irc; get_word_prefetch (6); m68k_areg (regs, dstreg) = (srca); }}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* LEA.L (xxx).L,An */ uae_u32 REGPARAM2 CPUFUNC(op_41f9_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_prefetch (4); { regs.ir = regs.irc; get_word_prefetch (8); m68k_areg (regs, dstreg) = (srca); }}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* LEA.L (d16,PC),An */ uae_u32 REGPARAM2 CPUFUNC(op_41fa_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_prefetch (4); { regs.ir = regs.irc; get_word_prefetch (6); m68k_areg (regs, dstreg) = (srca); }}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* LEA.L (d8,PC,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_41fb_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_word_prefetch (4)); { regs.ir = regs.irc; get_word_prefetch (6); m68k_areg (regs, dstreg) = (srca); }}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* CLR.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4200_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); regs.ir = regs.irc; get_word_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(0)) == 0); SET_NFLG (((uae_s8)(0)) < 0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((0) & 0xff); }} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* CLR.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4210_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); regs.ir = regs.irc; get_word_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(0)) == 0); SET_NFLG (((uae_s8)(0)) < 0); put_byte (srca, 0); }}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* CLR.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4218_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; regs.ir = regs.irc; get_word_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(0)) == 0); SET_NFLG (((uae_s8)(0)) < 0); put_byte (srca, 0); }}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* CLR.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_4220_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) = srca; regs.ir = regs.irc; get_word_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(0)) == 0); SET_NFLG (((uae_s8)(0)) < 0); put_byte (srca, 0); }}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* CLR.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4228_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); regs.ir = regs.irc; get_word_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(0)) == 0); SET_NFLG (((uae_s8)(0)) < 0); put_byte (srca, 0); }}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* CLR.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4230_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); { uae_s8 src = get_byte (srca); regs.ir = regs.irc; get_word_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(0)) == 0); SET_NFLG (((uae_s8)(0)) < 0); put_byte (srca, 0); }}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* CLR.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4238_11)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); regs.ir = regs.irc; get_word_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(0)) == 0); SET_NFLG (((uae_s8)(0)) < 0); put_byte (srca, 0); }}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* CLR.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4239_11)(uae_u32 opcode) { {{ uaecptr srca = get_long_prefetch (4); { uae_s8 src = get_byte (srca); regs.ir = regs.irc; get_word_prefetch (8); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(0)) == 0); SET_NFLG (((uae_s8)(0)) < 0); put_byte (srca, 0); }}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* CLR.W Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4240_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); regs.ir = regs.irc; get_word_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(0)) == 0); SET_NFLG (((uae_s16)(0)) < 0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | ((0) & 0xffff); }} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* CLR.W (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4250_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel2776; } {{ uae_s16 src = get_word (srca); regs.ir = regs.irc; get_word_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(0)) == 0); SET_NFLG (((uae_s16)(0)) < 0); put_word (srca, 0); }}}} m68k_incpc (2); endlabel2776: ; return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* CLR.W (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4258_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel2777; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) += 2; regs.ir = regs.irc; get_word_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(0)) == 0); SET_NFLG (((uae_s16)(0)) < 0); put_word (srca, 0); }}}} m68k_incpc (2); endlabel2777: ; return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* CLR.W -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_4260_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; if (srca & 1) { exception3 (opcode, srca); goto endlabel2778; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; regs.ir = regs.irc; get_word_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(0)) == 0); SET_NFLG (((uae_s16)(0)) < 0); put_word (srca, 0); }}}} m68k_incpc (2); endlabel2778: ; return 14 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* CLR.W (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4268_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel2779; } {{ uae_s16 src = get_word (srca); regs.ir = regs.irc; get_word_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(0)) == 0); SET_NFLG (((uae_s16)(0)) < 0); put_word (srca, 0); }}}} m68k_incpc (4); endlabel2779: ; return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* CLR.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4270_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel2780; } {{ uae_s16 src = get_word (srca); regs.ir = regs.irc; get_word_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(0)) == 0); SET_NFLG (((uae_s16)(0)) < 0); put_word (srca, 0); }}}} m68k_incpc (4); endlabel2780: ; return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* CLR.W (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4278_11)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel2781; } {{ uae_s16 src = get_word (srca); regs.ir = regs.irc; get_word_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(0)) == 0); SET_NFLG (((uae_s16)(0)) < 0); put_word (srca, 0); }}}} m68k_incpc (4); endlabel2781: ; return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* CLR.W (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4279_11)(uae_u32 opcode) { {{ uaecptr srca = get_long_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel2782; } {{ uae_s16 src = get_word (srca); regs.ir = regs.irc; get_word_prefetch (8); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(0)) == 0); SET_NFLG (((uae_s16)(0)) < 0); put_word (srca, 0); }}}} m68k_incpc (6); endlabel2782: ; return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* CLR.L Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4280_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); regs.ir = regs.irc; get_word_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(0)) == 0); SET_NFLG (((uae_s32)(0)) < 0); m68k_dreg (regs, srcreg) = (0); }} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* CLR.L (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4290_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel2784; } {{ uae_s32 src = get_long (srca); regs.ir = regs.irc; get_word_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(0)) == 0); SET_NFLG (((uae_s32)(0)) < 0); put_long (srca, 0); }}}} m68k_incpc (2); endlabel2784: ; return 20 * CYCLE_UNIT / 2; } /* 20 (3/2) */ /* CLR.L (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4298_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel2785; } {{ uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) += 4; regs.ir = regs.irc; get_word_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(0)) == 0); SET_NFLG (((uae_s32)(0)) < 0); put_long (srca, 0); }}}} m68k_incpc (2); endlabel2785: ; return 20 * CYCLE_UNIT / 2; } /* 20 (3/2) */ /* CLR.L -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_42a0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; if (srca & 1) { exception3 (opcode, srca); goto endlabel2786; } {{ uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) = srca; regs.ir = regs.irc; get_word_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(0)) == 0); SET_NFLG (((uae_s32)(0)) < 0); put_long (srca, 0); }}}} m68k_incpc (2); endlabel2786: ; return 22 * CYCLE_UNIT / 2; } /* 20 (3/2) */ /* CLR.L (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_42a8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel2787; } {{ uae_s32 src = get_long (srca); regs.ir = regs.irc; get_word_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(0)) == 0); SET_NFLG (((uae_s32)(0)) < 0); put_long (srca, 0); }}}} m68k_incpc (4); endlabel2787: ; return 24 * CYCLE_UNIT / 2; } /* 24 (4/2) */ /* CLR.L (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_42b0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel2788; } {{ uae_s32 src = get_long (srca); regs.ir = regs.irc; get_word_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(0)) == 0); SET_NFLG (((uae_s32)(0)) < 0); put_long (srca, 0); }}}} m68k_incpc (4); endlabel2788: ; return 26 * CYCLE_UNIT / 2; } /* 24 (4/2) */ /* CLR.L (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_42b8_11)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel2789; } {{ uae_s32 src = get_long (srca); regs.ir = regs.irc; get_word_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(0)) == 0); SET_NFLG (((uae_s32)(0)) < 0); put_long (srca, 0); }}}} m68k_incpc (4); endlabel2789: ; return 24 * CYCLE_UNIT / 2; } /* 24 (4/2) */ /* CLR.L (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_42b9_11)(uae_u32 opcode) { {{ uaecptr srca = get_long_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel2790; } {{ uae_s32 src = get_long (srca); regs.ir = regs.irc; get_word_prefetch (8); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(0)) == 0); SET_NFLG (((uae_s32)(0)) < 0); put_long (srca, 0); }}}} m68k_incpc (6); endlabel2790: ; return 28 * CYCLE_UNIT / 2; } /* 28 (5/2) */ #endif #ifdef PART_4 /* NEG.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4400_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 dst = ((uae_s8)(0)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(dst)) < 0; SET_ZFLG (((uae_s8)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((dst) & 0xff); }}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* NEG.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4410_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 dst = ((uae_s8)(0)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(dst)) < 0; SET_ZFLG (((uae_s8)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (srca, dst); }}}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* NEG.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4418_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 dst = ((uae_s8)(0)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(dst)) < 0; SET_ZFLG (((uae_s8)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (srca, dst); }}}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* NEG.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_4420_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) = srca; regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 dst = ((uae_s8)(0)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(dst)) < 0; SET_ZFLG (((uae_s8)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (srca, dst); }}}}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* NEG.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4428_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 dst = ((uae_s8)(0)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(dst)) < 0; SET_ZFLG (((uae_s8)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (srca, dst); }}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* NEG.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4430_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); { uae_s8 src = get_byte (srca); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 dst = ((uae_s8)(0)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(dst)) < 0; SET_ZFLG (((uae_s8)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (srca, dst); }}}}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* NEG.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4438_11)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 dst = ((uae_s8)(0)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(dst)) < 0; SET_ZFLG (((uae_s8)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (srca, dst); }}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* NEG.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4439_11)(uae_u32 opcode) { {{ uaecptr srca = get_long_prefetch (4); { uae_s8 src = get_byte (srca); regs.ir = regs.irc; get_word_prefetch (8); {{uae_u32 dst = ((uae_s8)(0)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(0)) < 0; int flgn = ((uae_s8)(dst)) < 0; SET_ZFLG (((uae_s8)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (srca, dst); }}}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* NEG.W Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4440_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 dst = ((uae_s16)(0)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(dst)) < 0; SET_ZFLG (((uae_s16)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | ((dst) & 0xffff); }}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* NEG.W (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4450_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel2800; } {{ uae_s16 src = get_word (srca); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 dst = ((uae_s16)(0)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(dst)) < 0; SET_ZFLG (((uae_s16)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (srca, dst); }}}}}}} m68k_incpc (2); endlabel2800: ; return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* NEG.W (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4458_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel2801; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) += 2; regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 dst = ((uae_s16)(0)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(dst)) < 0; SET_ZFLG (((uae_s16)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (srca, dst); }}}}}}} m68k_incpc (2); endlabel2801: ; return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* NEG.W -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_4460_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; if (srca & 1) { exception3 (opcode, srca); goto endlabel2802; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 dst = ((uae_s16)(0)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(dst)) < 0; SET_ZFLG (((uae_s16)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (srca, dst); }}}}}}} m68k_incpc (2); endlabel2802: ; return 14 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* NEG.W (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4468_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel2803; } {{ uae_s16 src = get_word (srca); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 dst = ((uae_s16)(0)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(dst)) < 0; SET_ZFLG (((uae_s16)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (srca, dst); }}}}}}} m68k_incpc (4); endlabel2803: ; return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* NEG.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4470_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel2804; } {{ uae_s16 src = get_word (srca); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 dst = ((uae_s16)(0)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(dst)) < 0; SET_ZFLG (((uae_s16)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (srca, dst); }}}}}}} m68k_incpc (4); endlabel2804: ; return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* NEG.W (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4478_11)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel2805; } {{ uae_s16 src = get_word (srca); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 dst = ((uae_s16)(0)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(dst)) < 0; SET_ZFLG (((uae_s16)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (srca, dst); }}}}}}} m68k_incpc (4); endlabel2805: ; return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* NEG.W (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4479_11)(uae_u32 opcode) { {{ uaecptr srca = get_long_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel2806; } {{ uae_s16 src = get_word (srca); regs.ir = regs.irc; get_word_prefetch (8); {{uae_u32 dst = ((uae_s16)(0)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(0)) < 0; int flgn = ((uae_s16)(dst)) < 0; SET_ZFLG (((uae_s16)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (srca, dst); }}}}}}} m68k_incpc (6); endlabel2806: ; return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* NEG.L Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4480_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 dst = ((uae_s32)(0)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(dst)) < 0; SET_ZFLG (((uae_s32)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, srcreg) = (dst); }}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* NEG.L (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4490_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel2808; } {{ uae_s32 src = get_long (srca); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 dst = ((uae_s32)(0)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(dst)) < 0; SET_ZFLG (((uae_s32)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (srca, dst); }}}}}}} m68k_incpc (2); endlabel2808: ; return 20 * CYCLE_UNIT / 2; } /* 20 (3/2) */ /* NEG.L (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4498_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel2809; } {{ uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) += 4; regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 dst = ((uae_s32)(0)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(dst)) < 0; SET_ZFLG (((uae_s32)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (srca, dst); }}}}}}} m68k_incpc (2); endlabel2809: ; return 20 * CYCLE_UNIT / 2; } /* 20 (3/2) */ /* NEG.L -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_44a0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; if (srca & 1) { exception3 (opcode, srca); goto endlabel2810; } {{ uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) = srca; regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 dst = ((uae_s32)(0)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(dst)) < 0; SET_ZFLG (((uae_s32)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (srca, dst); }}}}}}} m68k_incpc (2); endlabel2810: ; return 22 * CYCLE_UNIT / 2; } /* 20 (3/2) */ /* NEG.L (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_44a8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel2811; } {{ uae_s32 src = get_long (srca); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 dst = ((uae_s32)(0)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(dst)) < 0; SET_ZFLG (((uae_s32)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (srca, dst); }}}}}}} m68k_incpc (4); endlabel2811: ; return 24 * CYCLE_UNIT / 2; } /* 24 (4/2) */ /* NEG.L (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_44b0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel2812; } {{ uae_s32 src = get_long (srca); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 dst = ((uae_s32)(0)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(dst)) < 0; SET_ZFLG (((uae_s32)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (srca, dst); }}}}}}} m68k_incpc (4); endlabel2812: ; return 26 * CYCLE_UNIT / 2; } /* 24 (4/2) */ /* NEG.L (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_44b8_11)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel2813; } {{ uae_s32 src = get_long (srca); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 dst = ((uae_s32)(0)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(dst)) < 0; SET_ZFLG (((uae_s32)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (srca, dst); }}}}}}} m68k_incpc (4); endlabel2813: ; return 24 * CYCLE_UNIT / 2; } /* 24 (4/2) */ /* NEG.L (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_44b9_11)(uae_u32 opcode) { {{ uaecptr srca = get_long_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel2814; } {{ uae_s32 src = get_long (srca); regs.ir = regs.irc; get_word_prefetch (8); {{uae_u32 dst = ((uae_s32)(0)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(0)) < 0; int flgn = ((uae_s32)(dst)) < 0; SET_ZFLG (((uae_s32)(dst)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(0))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (srca, dst); }}}}}}} m68k_incpc (6); endlabel2814: ; return 28 * CYCLE_UNIT / 2; } /* 28 (5/2) */ /* MV2SR.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_44c0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); get_wordi (4); MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); regs.ir = regs.irc; get_word_prefetch (4); }} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* MV2SR.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_44d0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel2816; } {{ uae_s16 src = get_word (srca); get_wordi (4); MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); regs.ir = regs.irc; get_word_prefetch (4); }}}} m68k_incpc (2); endlabel2816: ; return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* MV2SR.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_44d8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel2817; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) += 2; get_wordi (4); MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); regs.ir = regs.irc; get_word_prefetch (4); }}}} m68k_incpc (2); endlabel2817: ; return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* MV2SR.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_44e0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; if (srca & 1) { exception3 (opcode, srca); goto endlabel2818; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; get_wordi (4); MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); regs.ir = regs.irc; get_word_prefetch (4); }}}} m68k_incpc (2); endlabel2818: ; return 14 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* MV2SR.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_44e8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel2819; } {{ uae_s16 src = get_word (srca); get_wordi (6); MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); regs.ir = regs.irc; get_word_prefetch (6); }}}} m68k_incpc (4); endlabel2819: ; return 16 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* MV2SR.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_44f0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel2820; } {{ uae_s16 src = get_word (srca); get_wordi (6); MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); regs.ir = regs.irc; get_word_prefetch (6); }}}} m68k_incpc (4); endlabel2820: ; return 18 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* MV2SR.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_44f8_11)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel2821; } {{ uae_s16 src = get_word (srca); get_wordi (6); MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); regs.ir = regs.irc; get_word_prefetch (6); }}}} m68k_incpc (4); endlabel2821: ; return 16 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* MV2SR.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_44f9_11)(uae_u32 opcode) { {{ uaecptr srca = get_long_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel2822; } {{ uae_s16 src = get_word (srca); get_wordi (8); MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); regs.ir = regs.irc; get_word_prefetch (8); }}}} m68k_incpc (6); endlabel2822: ; return 20 * CYCLE_UNIT / 2; } /* 20 (5/0) */ /* MV2SR.B (d16,PC) */ uae_u32 REGPARAM2 CPUFUNC(op_44fa_11)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel2823; } {{ uae_s16 src = get_word (srca); get_wordi (6); MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); regs.ir = regs.irc; get_word_prefetch (6); }}}} m68k_incpc (4); endlabel2823: ; return 16 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* MV2SR.B (d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_44fb_11)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_word_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel2824; } {{ uae_s16 src = get_word (srca); get_wordi (6); MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); regs.ir = regs.irc; get_word_prefetch (6); }}}} m68k_incpc (4); endlabel2824: ; return 18 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* MV2SR.B #.B */ uae_u32 REGPARAM2 CPUFUNC(op_44fc_11)(uae_u32 opcode) { {{ uae_s16 src = get_word_prefetch (4); get_wordi (6); MakeSR (); regs.sr &= 0xFF00; regs.sr |= src & 0xFF; MakeFromSR (); regs.ir = regs.irc; get_word_prefetch (6); }} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* NOT.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4600_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(dst)) == 0); SET_NFLG (((uae_s8)(dst)) < 0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((dst) & 0xff); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* NOT.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4610_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(dst)) == 0); SET_NFLG (((uae_s8)(dst)) < 0); put_byte (srca, dst); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* NOT.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4618_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(dst)) == 0); SET_NFLG (((uae_s8)(dst)) < 0); put_byte (srca, dst); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* NOT.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_4620_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) = srca; regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(dst)) == 0); SET_NFLG (((uae_s8)(dst)) < 0); put_byte (srca, dst); }}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* NOT.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4628_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); regs.ir = regs.irc; get_word_prefetch (6); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(dst)) == 0); SET_NFLG (((uae_s8)(dst)) < 0); put_byte (srca, dst); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* NOT.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4630_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); { uae_s8 src = get_byte (srca); regs.ir = regs.irc; get_word_prefetch (6); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(dst)) == 0); SET_NFLG (((uae_s8)(dst)) < 0); put_byte (srca, dst); }}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* NOT.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4638_11)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); regs.ir = regs.irc; get_word_prefetch (6); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(dst)) == 0); SET_NFLG (((uae_s8)(dst)) < 0); put_byte (srca, dst); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* NOT.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4639_11)(uae_u32 opcode) { {{ uaecptr srca = get_long_prefetch (4); { uae_s8 src = get_byte (srca); regs.ir = regs.irc; get_word_prefetch (8); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(dst)) == 0); SET_NFLG (((uae_s8)(dst)) < 0); put_byte (srca, dst); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* NOT.W Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4640_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(dst)) == 0); SET_NFLG (((uae_s16)(dst)) < 0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | ((dst) & 0xffff); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* NOT.W (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4650_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel2835; } {{ uae_s16 src = get_word (srca); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(dst)) == 0); SET_NFLG (((uae_s16)(dst)) < 0); put_word (srca, dst); }}}}} m68k_incpc (2); endlabel2835: ; return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* NOT.W (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4658_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel2836; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) += 2; regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(dst)) == 0); SET_NFLG (((uae_s16)(dst)) < 0); put_word (srca, dst); }}}}} m68k_incpc (2); endlabel2836: ; return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* NOT.W -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_4660_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; if (srca & 1) { exception3 (opcode, srca); goto endlabel2837; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(dst)) == 0); SET_NFLG (((uae_s16)(dst)) < 0); put_word (srca, dst); }}}}} m68k_incpc (2); endlabel2837: ; return 14 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* NOT.W (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4668_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel2838; } {{ uae_s16 src = get_word (srca); regs.ir = regs.irc; get_word_prefetch (6); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(dst)) == 0); SET_NFLG (((uae_s16)(dst)) < 0); put_word (srca, dst); }}}}} m68k_incpc (4); endlabel2838: ; return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* NOT.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4670_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel2839; } {{ uae_s16 src = get_word (srca); regs.ir = regs.irc; get_word_prefetch (6); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(dst)) == 0); SET_NFLG (((uae_s16)(dst)) < 0); put_word (srca, dst); }}}}} m68k_incpc (4); endlabel2839: ; return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* NOT.W (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4678_11)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel2840; } {{ uae_s16 src = get_word (srca); regs.ir = regs.irc; get_word_prefetch (6); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(dst)) == 0); SET_NFLG (((uae_s16)(dst)) < 0); put_word (srca, dst); }}}}} m68k_incpc (4); endlabel2840: ; return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* NOT.W (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4679_11)(uae_u32 opcode) { {{ uaecptr srca = get_long_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel2841; } {{ uae_s16 src = get_word (srca); regs.ir = regs.irc; get_word_prefetch (8); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(dst)) == 0); SET_NFLG (((uae_s16)(dst)) < 0); put_word (srca, dst); }}}}} m68k_incpc (6); endlabel2841: ; return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* NOT.L Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4680_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); m68k_dreg (regs, srcreg) = (dst); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* NOT.L (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4690_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel2843; } {{ uae_s32 src = get_long (srca); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); put_long (srca, dst); }}}}} m68k_incpc (2); endlabel2843: ; return 20 * CYCLE_UNIT / 2; } /* 20 (3/2) */ /* NOT.L (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4698_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel2844; } {{ uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) += 4; regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); put_long (srca, dst); }}}}} m68k_incpc (2); endlabel2844: ; return 20 * CYCLE_UNIT / 2; } /* 20 (3/2) */ /* NOT.L -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_46a0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; if (srca & 1) { exception3 (opcode, srca); goto endlabel2845; } {{ uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) = srca; regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); put_long (srca, dst); }}}}} m68k_incpc (2); endlabel2845: ; return 22 * CYCLE_UNIT / 2; } /* 20 (3/2) */ /* NOT.L (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_46a8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel2846; } {{ uae_s32 src = get_long (srca); regs.ir = regs.irc; get_word_prefetch (6); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); put_long (srca, dst); }}}}} m68k_incpc (4); endlabel2846: ; return 24 * CYCLE_UNIT / 2; } /* 24 (4/2) */ /* NOT.L (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_46b0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel2847; } {{ uae_s32 src = get_long (srca); regs.ir = regs.irc; get_word_prefetch (6); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); put_long (srca, dst); }}}}} m68k_incpc (4); endlabel2847: ; return 26 * CYCLE_UNIT / 2; } /* 24 (4/2) */ /* NOT.L (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_46b8_11)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel2848; } {{ uae_s32 src = get_long (srca); regs.ir = regs.irc; get_word_prefetch (6); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); put_long (srca, dst); }}}}} m68k_incpc (4); endlabel2848: ; return 24 * CYCLE_UNIT / 2; } /* 24 (4/2) */ /* NOT.L (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_46b9_11)(uae_u32 opcode) { {{ uaecptr srca = get_long_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel2849; } {{ uae_s32 src = get_long (srca); regs.ir = regs.irc; get_word_prefetch (8); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); put_long (srca, dst); }}}}} m68k_incpc (6); endlabel2849: ; return 28 * CYCLE_UNIT / 2; } /* 28 (5/2) */ /* MV2SR.W Dn */ uae_u32 REGPARAM2 CPUFUNC(op_46c0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel2850; } {{ uae_s16 src = m68k_dreg (regs, srcreg); get_wordi (4); regs.sr = src; MakeFromSR (); regs.ir = regs.irc; get_word_prefetch (4); }}} m68k_incpc (2); endlabel2850: ; return 8 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* MV2SR.W (An) */ uae_u32 REGPARAM2 CPUFUNC(op_46d0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel2851; } {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel2851; } {{ uae_s16 src = get_word (srca); get_wordi (4); regs.sr = src; MakeFromSR (); regs.ir = regs.irc; get_word_prefetch (4); }}}}} m68k_incpc (2); endlabel2851: ; return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* MV2SR.W (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_46d8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel2852; } {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel2852; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) += 2; get_wordi (4); regs.sr = src; MakeFromSR (); regs.ir = regs.irc; get_word_prefetch (4); }}}}} m68k_incpc (2); endlabel2852: ; return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* MV2SR.W -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_46e0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel2853; } {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; if (srca & 1) { exception3 (opcode, srca); goto endlabel2853; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; get_wordi (4); regs.sr = src; MakeFromSR (); regs.ir = regs.irc; get_word_prefetch (4); }}}}} m68k_incpc (2); endlabel2853: ; return 14 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* MV2SR.W (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_46e8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel2854; } {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel2854; } {{ uae_s16 src = get_word (srca); get_wordi (6); regs.sr = src; MakeFromSR (); regs.ir = regs.irc; get_word_prefetch (6); }}}}} m68k_incpc (4); endlabel2854: ; return 16 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* MV2SR.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_46f0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel2855; } {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel2855; } {{ uae_s16 src = get_word (srca); get_wordi (6); regs.sr = src; MakeFromSR (); regs.ir = regs.irc; get_word_prefetch (6); }}}}} m68k_incpc (4); endlabel2855: ; return 18 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* MV2SR.W (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_46f8_11)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel2856; } {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel2856; } {{ uae_s16 src = get_word (srca); get_wordi (6); regs.sr = src; MakeFromSR (); regs.ir = regs.irc; get_word_prefetch (6); }}}}} m68k_incpc (4); endlabel2856: ; return 16 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* MV2SR.W (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_46f9_11)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel2857; } {{ uaecptr srca = get_long_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel2857; } {{ uae_s16 src = get_word (srca); get_wordi (8); regs.sr = src; MakeFromSR (); regs.ir = regs.irc; get_word_prefetch (8); }}}}} m68k_incpc (6); endlabel2857: ; return 20 * CYCLE_UNIT / 2; } /* 20 (5/0) */ /* MV2SR.W (d16,PC) */ uae_u32 REGPARAM2 CPUFUNC(op_46fa_11)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel2858; } {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel2858; } {{ uae_s16 src = get_word (srca); get_wordi (6); regs.sr = src; MakeFromSR (); regs.ir = regs.irc; get_word_prefetch (6); }}}}} m68k_incpc (4); endlabel2858: ; return 16 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* MV2SR.W (d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_46fb_11)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel2859; } {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_word_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel2859; } {{ uae_s16 src = get_word (srca); get_wordi (6); regs.sr = src; MakeFromSR (); regs.ir = regs.irc; get_word_prefetch (6); }}}}} m68k_incpc (4); endlabel2859: ; return 18 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* MV2SR.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_46fc_11)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel2860; } {{ uae_s16 src = get_word_prefetch (4); get_wordi (6); regs.sr = src; MakeFromSR (); regs.ir = regs.irc; get_word_prefetch (6); }}} m68k_incpc (4); endlabel2860: ; return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* NBCD.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4800_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = - (src & 0xF0); uae_u16 newv; int cflg; if (newv_lo > 9) { newv_lo -= 6; } newv = newv_hi + newv_lo; cflg = (newv & 0x1F0) > 0x90; if (cflg) newv -= 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((newv) & 0xff); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* NBCD.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4810_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); regs.ir = regs.irc; get_word_prefetch (4); { uae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = - (src & 0xF0); uae_u16 newv; int cflg; if (newv_lo > 9) { newv_lo -= 6; } newv = newv_hi + newv_lo; cflg = (newv & 0x1F0) > 0x90; if (cflg) newv -= 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); put_byte (srca, newv); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* NBCD.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4818_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; regs.ir = regs.irc; get_word_prefetch (4); { uae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = - (src & 0xF0); uae_u16 newv; int cflg; if (newv_lo > 9) { newv_lo -= 6; } newv = newv_hi + newv_lo; cflg = (newv & 0x1F0) > 0x90; if (cflg) newv -= 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); put_byte (srca, newv); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* NBCD.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_4820_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) = srca; regs.ir = regs.irc; get_word_prefetch (4); { uae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = - (src & 0xF0); uae_u16 newv; int cflg; if (newv_lo > 9) { newv_lo -= 6; } newv = newv_hi + newv_lo; cflg = (newv & 0x1F0) > 0x90; if (cflg) newv -= 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); put_byte (srca, newv); }}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* NBCD.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4828_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); regs.ir = regs.irc; get_word_prefetch (6); { uae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = - (src & 0xF0); uae_u16 newv; int cflg; if (newv_lo > 9) { newv_lo -= 6; } newv = newv_hi + newv_lo; cflg = (newv & 0x1F0) > 0x90; if (cflg) newv -= 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); put_byte (srca, newv); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* NBCD.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4830_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); { uae_s8 src = get_byte (srca); regs.ir = regs.irc; get_word_prefetch (6); { uae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = - (src & 0xF0); uae_u16 newv; int cflg; if (newv_lo > 9) { newv_lo -= 6; } newv = newv_hi + newv_lo; cflg = (newv & 0x1F0) > 0x90; if (cflg) newv -= 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); put_byte (srca, newv); }}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* NBCD.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4838_11)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); regs.ir = regs.irc; get_word_prefetch (6); { uae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = - (src & 0xF0); uae_u16 newv; int cflg; if (newv_lo > 9) { newv_lo -= 6; } newv = newv_hi + newv_lo; cflg = (newv & 0x1F0) > 0x90; if (cflg) newv -= 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); put_byte (srca, newv); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* NBCD.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4839_11)(uae_u32 opcode) { {{ uaecptr srca = get_long_prefetch (4); { uae_s8 src = get_byte (srca); regs.ir = regs.irc; get_word_prefetch (8); { uae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = - (src & 0xF0); uae_u16 newv; int cflg; if (newv_lo > 9) { newv_lo -= 6; } newv = newv_hi + newv_lo; cflg = (newv & 0x1F0) > 0x90; if (cflg) newv -= 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); put_byte (srca, newv); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* SWAP.W Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4840_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 dst = ((src >> 16)&0xFFFF) | ((src&0xFFFF)<<16); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); m68k_dreg (regs, srcreg) = (dst); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* PEA.L (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4850_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, 7) - 4; if (dsta & 1) { exception3 (opcode, dsta); goto endlabel2870; } { m68k_areg (regs, 7) = dsta; regs.ir = regs.irc; get_word_prefetch (4); put_long (dsta, srca); }}}} m68k_incpc (2); endlabel2870: ; return 12 * CYCLE_UNIT / 2; } /* 12 (1/2) */ /* PEA.L (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4868_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); { uaecptr dsta; dsta = m68k_areg (regs, 7) - 4; if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2871; } { m68k_areg (regs, 7) = dsta; regs.ir = regs.irc; get_word_prefetch (6); put_long (dsta, srca); }}}} m68k_incpc (4); endlabel2871: ; return 16 * CYCLE_UNIT / 2; } /* 16 (2/2) */ /* PEA.L (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4870_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); { uaecptr dsta; dsta = m68k_areg (regs, 7) - 4; if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2872; } { m68k_areg (regs, 7) = dsta; regs.ir = regs.irc; get_word_prefetch (6); put_long (dsta, srca); }}}} m68k_incpc (4); endlabel2872: ; return 16 * CYCLE_UNIT / 2; } /* 16 (2/2) */ /* PEA.L (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4878_11)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); { uaecptr dsta; dsta = m68k_areg (regs, 7) - 4; if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2873; } { m68k_areg (regs, 7) = dsta; put_long (dsta, srca); regs.ir = regs.irc; get_word_prefetch (6); }}}} m68k_incpc (4); endlabel2873: ; return 16 * CYCLE_UNIT / 2; } /* 16 (2/2) */ /* PEA.L (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4879_11)(uae_u32 opcode) { {{ uaecptr srca = get_long_prefetch (4); { uaecptr dsta; dsta = m68k_areg (regs, 7) - 4; if (dsta & 1) { m68k_incpc (4); exception3 (opcode, dsta); goto endlabel2874; } { m68k_areg (regs, 7) = dsta; put_long (dsta, srca); regs.ir = regs.irc; get_word_prefetch (8); }}}} m68k_incpc (6); endlabel2874: ; return 20 * CYCLE_UNIT / 2; } /* 20 (3/2) */ /* PEA.L (d16,PC) */ uae_u32 REGPARAM2 CPUFUNC(op_487a_11)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_prefetch (4); { uaecptr dsta; dsta = m68k_areg (regs, 7) - 4; if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2875; } { m68k_areg (regs, 7) = dsta; regs.ir = regs.irc; get_word_prefetch (6); put_long (dsta, srca); }}}} m68k_incpc (4); endlabel2875: ; return 16 * CYCLE_UNIT / 2; } /* 16 (2/2) */ /* PEA.L (d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_487b_11)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_word_prefetch (4)); { uaecptr dsta; dsta = m68k_areg (regs, 7) - 4; if (dsta & 1) { m68k_incpc (2); exception3 (opcode, dsta); goto endlabel2876; } { m68k_areg (regs, 7) = dsta; regs.ir = regs.irc; get_word_prefetch (6); put_long (dsta, srca); }}}} m68k_incpc (4); endlabel2876: ; return 16 * CYCLE_UNIT / 2; } /* 16 (2/2) */ /* EXT.W Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4880_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u16 dst = (uae_s16)(uae_s8)src; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(dst)) == 0); SET_NFLG (((uae_s16)(dst)) < 0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | ((dst) & 0xffff); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* MVMLE.W #.W,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_4890_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_prefetch (4); { uaecptr srca = m68k_areg (regs, dstreg); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2878; } {{ uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; while (dmask) { put_word (srca, m68k_dreg (regs, movem_index1[dmask])); srca += 2; dmask = movem_next[dmask]; } while (amask) { put_word (srca, m68k_areg (regs, movem_index1[amask])); srca += 2; amask = movem_next[amask]; } regs.ir = regs.irc; get_word_prefetch (6); }}}} m68k_incpc (4); endlabel2878: ; return 8 * CYCLE_UNIT / 2; } /* 12+ (2/1) */ /* MVMLE.W #.W,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_48a0_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_prefetch (4); { uaecptr srca; srca = m68k_areg (regs, dstreg) - 0; if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2879; } {{ uae_u16 amask = mask & 0xff, dmask = (mask >> 8) & 0xff; int type = get_cpu_model () >= 68020; while (amask) { srca -= 2; if (type) m68k_areg (regs, dstreg) = srca; put_word (srca, m68k_areg (regs, movem_index2[amask])); amask = movem_next[amask]; } while (dmask) { srca -= 2; put_word (srca, m68k_dreg (regs, movem_index2[dmask])); dmask = movem_next[dmask]; } m68k_areg (regs, dstreg) = srca; regs.ir = regs.irc; get_word_prefetch (6); }}}} m68k_incpc (4); endlabel2879: ; return 10 * CYCLE_UNIT / 2; } /* 12+ (2/1) */ /* MVMLE.W #.W,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_48a8_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_prefetch (4); { uaecptr srca = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (6); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2880; } {{ uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; while (dmask) { put_word (srca, m68k_dreg (regs, movem_index1[dmask])); srca += 2; dmask = movem_next[dmask]; } while (amask) { put_word (srca, m68k_areg (regs, movem_index1[amask])); srca += 2; amask = movem_next[amask]; } regs.ir = regs.irc; get_word_prefetch (8); }}}} m68k_incpc (6); endlabel2880: ; return 12 * CYCLE_UNIT / 2; } /* 16+ (3/1) */ /* MVMLE.W #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_48b0_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_prefetch (4); { uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (6)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2881; } {{ uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; while (dmask) { put_word (srca, m68k_dreg (regs, movem_index1[dmask])); srca += 2; dmask = movem_next[dmask]; } while (amask) { put_word (srca, m68k_areg (regs, movem_index1[amask])); srca += 2; amask = movem_next[amask]; } regs.ir = regs.irc; get_word_prefetch (8); }}}} m68k_incpc (6); endlabel2881: ; return 14 * CYCLE_UNIT / 2; } /* 16+ (3/1) */ /* MVMLE.W #.W,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_48b8_11)(uae_u32 opcode) { { uae_u16 mask = get_word_prefetch (4); { uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (6); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2882; } {{ uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; while (dmask) { put_word (srca, m68k_dreg (regs, movem_index1[dmask])); srca += 2; dmask = movem_next[dmask]; } while (amask) { put_word (srca, m68k_areg (regs, movem_index1[amask])); srca += 2; amask = movem_next[amask]; } regs.ir = regs.irc; get_word_prefetch (8); }}}} m68k_incpc (6); endlabel2882: ; return 12 * CYCLE_UNIT / 2; } /* 16+ (3/1) */ /* MVMLE.W #.W,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_48b9_11)(uae_u32 opcode) { { uae_u16 mask = get_word_prefetch (4); { uaecptr srca = get_long_prefetch (6); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2883; } {{ uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; while (dmask) { put_word (srca, m68k_dreg (regs, movem_index1[dmask])); srca += 2; dmask = movem_next[dmask]; } while (amask) { put_word (srca, m68k_areg (regs, movem_index1[amask])); srca += 2; amask = movem_next[amask]; } regs.ir = regs.irc; get_word_prefetch (10); }}}} m68k_incpc (8); endlabel2883: ; return 16 * CYCLE_UNIT / 2; } /* 20+ (4/1) */ /* EXT.L Dn */ uae_u32 REGPARAM2 CPUFUNC(op_48c0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 dst = (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(dst)) == 0); SET_NFLG (((uae_s32)(dst)) < 0); m68k_dreg (regs, srcreg) = (dst); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* MVMLE.L #.W,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_48d0_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_prefetch (4); { uaecptr srca = m68k_areg (regs, dstreg); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2885; } {{ uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; while (dmask) { put_long (srca, m68k_dreg (regs, movem_index1[dmask])); srca += 4; dmask = movem_next[dmask]; } while (amask) { put_long (srca, m68k_areg (regs, movem_index1[amask])); srca += 4; amask = movem_next[amask]; } regs.ir = regs.irc; get_word_prefetch (6); }}}} m68k_incpc (4); endlabel2885: ; return 8 * CYCLE_UNIT / 2; } /* 16+ (2/2) */ /* MVMLE.L #.W,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_48e0_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_prefetch (4); { uaecptr srca; srca = m68k_areg (regs, dstreg) - 0; if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2886; } {{ uae_u16 amask = mask & 0xff, dmask = (mask >> 8) & 0xff; int type = get_cpu_model () >= 68020; while (amask) { srca -= 4; if (type) m68k_areg (regs, dstreg) = srca; put_long (srca, m68k_areg (regs, movem_index2[amask])); amask = movem_next[amask]; } while (dmask) { srca -= 4; put_long (srca, m68k_dreg (regs, movem_index2[dmask])); dmask = movem_next[dmask]; } m68k_areg (regs, dstreg) = srca; regs.ir = regs.irc; get_word_prefetch (6); }}}} m68k_incpc (4); endlabel2886: ; return 10 * CYCLE_UNIT / 2; } /* 16+ (2/2) */ /* MVMLE.L #.W,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_48e8_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_prefetch (4); { uaecptr srca = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (6); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2887; } {{ uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; while (dmask) { put_long (srca, m68k_dreg (regs, movem_index1[dmask])); srca += 4; dmask = movem_next[dmask]; } while (amask) { put_long (srca, m68k_areg (regs, movem_index1[amask])); srca += 4; amask = movem_next[amask]; } regs.ir = regs.irc; get_word_prefetch (8); }}}} m68k_incpc (6); endlabel2887: ; return 12 * CYCLE_UNIT / 2; } /* 20+ (3/2) */ /* MVMLE.L #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_48f0_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_prefetch (4); { uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (6)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2888; } {{ uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; while (dmask) { put_long (srca, m68k_dreg (regs, movem_index1[dmask])); srca += 4; dmask = movem_next[dmask]; } while (amask) { put_long (srca, m68k_areg (regs, movem_index1[amask])); srca += 4; amask = movem_next[amask]; } regs.ir = regs.irc; get_word_prefetch (8); }}}} m68k_incpc (6); endlabel2888: ; return 14 * CYCLE_UNIT / 2; } /* 20+ (3/2) */ /* MVMLE.L #.W,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_48f8_11)(uae_u32 opcode) { { uae_u16 mask = get_word_prefetch (4); { uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (6); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2889; } {{ uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; while (dmask) { put_long (srca, m68k_dreg (regs, movem_index1[dmask])); srca += 4; dmask = movem_next[dmask]; } while (amask) { put_long (srca, m68k_areg (regs, movem_index1[amask])); srca += 4; amask = movem_next[amask]; } regs.ir = regs.irc; get_word_prefetch (8); }}}} m68k_incpc (6); endlabel2889: ; return 12 * CYCLE_UNIT / 2; } /* 20+ (3/2) */ /* MVMLE.L #.W,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_48f9_11)(uae_u32 opcode) { { uae_u16 mask = get_word_prefetch (4); { uaecptr srca = get_long_prefetch (6); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2890; } {{ uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; while (dmask) { put_long (srca, m68k_dreg (regs, movem_index1[dmask])); srca += 4; dmask = movem_next[dmask]; } while (amask) { put_long (srca, m68k_areg (regs, movem_index1[amask])); srca += 4; amask = movem_next[amask]; } regs.ir = regs.irc; get_word_prefetch (10); }}}} m68k_incpc (8); endlabel2890: ; return 16 * CYCLE_UNIT / 2; } /* 24+ (4/2) */ /* TST.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4a00_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); regs.ir = regs.irc; get_word_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* TST.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4a10_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); regs.ir = regs.irc; get_word_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* TST.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4a18_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; regs.ir = regs.irc; get_word_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* TST.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_4a20_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) = srca; regs.ir = regs.irc; get_word_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }}} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* TST.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4a28_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); regs.ir = regs.irc; get_word_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* TST.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4a30_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); { uae_s8 src = get_byte (srca); regs.ir = regs.irc; get_word_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }}} m68k_incpc (4); return 14 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* TST.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4a38_11)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); regs.ir = regs.irc; get_word_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* TST.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4a39_11)(uae_u32 opcode) { {{ uaecptr srca = get_long_prefetch (4); { uae_s8 src = get_byte (srca); regs.ir = regs.irc; get_word_prefetch (8); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* TST.B #.B */ uae_u32 REGPARAM2 CPUFUNC(op_4a3c_11)(uae_u32 opcode) { {{ uae_s8 src = (uae_u8)get_word_prefetch (4); regs.ir = regs.irc; get_word_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); }} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* TST.W Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4a40_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); regs.ir = regs.irc; get_word_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* TST.W (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4a50_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel2901; } {{ uae_s16 src = get_word (srca); regs.ir = regs.irc; get_word_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }}}} m68k_incpc (2); endlabel2901: ; return 8 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* TST.W (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4a58_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel2902; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) += 2; regs.ir = regs.irc; get_word_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }}}} m68k_incpc (2); endlabel2902: ; return 8 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* TST.W -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_4a60_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; if (srca & 1) { exception3 (opcode, srca); goto endlabel2903; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; regs.ir = regs.irc; get_word_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }}}} m68k_incpc (2); endlabel2903: ; return 10 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* TST.W (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4a68_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel2904; } {{ uae_s16 src = get_word (srca); regs.ir = regs.irc; get_word_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }}}} m68k_incpc (4); endlabel2904: ; return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* TST.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4a70_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel2905; } {{ uae_s16 src = get_word (srca); regs.ir = regs.irc; get_word_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }}}} m68k_incpc (4); endlabel2905: ; return 14 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* TST.W (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4a78_11)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel2906; } {{ uae_s16 src = get_word (srca); regs.ir = regs.irc; get_word_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }}}} m68k_incpc (4); endlabel2906: ; return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* TST.W (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4a79_11)(uae_u32 opcode) { {{ uaecptr srca = get_long_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel2907; } {{ uae_s16 src = get_word (srca); regs.ir = regs.irc; get_word_prefetch (8); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }}}} m68k_incpc (6); endlabel2907: ; return 16 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* TST.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_4a7c_11)(uae_u32 opcode) { {{ uae_s16 src = get_word_prefetch (4); regs.ir = regs.irc; get_word_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); }} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* TST.L Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4a80_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); regs.ir = regs.irc; get_word_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* TST.L (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4a90_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel2910; } {{ uae_s32 src = get_long (srca); regs.ir = regs.irc; get_word_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }}}} m68k_incpc (2); endlabel2910: ; return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* TST.L (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4a98_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel2911; } {{ uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) += 4; regs.ir = regs.irc; get_word_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }}}} m68k_incpc (2); endlabel2911: ; return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* TST.L -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_4aa0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; if (srca & 1) { exception3 (opcode, srca); goto endlabel2912; } {{ uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) = srca; regs.ir = regs.irc; get_word_prefetch (4); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }}}} m68k_incpc (2); endlabel2912: ; return 14 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* TST.L (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4aa8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel2913; } {{ uae_s32 src = get_long (srca); regs.ir = regs.irc; get_word_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }}}} m68k_incpc (4); endlabel2913: ; return 16 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* TST.L (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4ab0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel2914; } {{ uae_s32 src = get_long (srca); regs.ir = regs.irc; get_word_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }}}} m68k_incpc (4); endlabel2914: ; return 18 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* TST.L (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4ab8_11)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel2915; } {{ uae_s32 src = get_long (srca); regs.ir = regs.irc; get_word_prefetch (6); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }}}} m68k_incpc (4); endlabel2915: ; return 16 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* TST.L (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4ab9_11)(uae_u32 opcode) { {{ uaecptr srca = get_long_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel2916; } {{ uae_s32 src = get_long (srca); regs.ir = regs.irc; get_word_prefetch (8); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }}}} m68k_incpc (6); endlabel2916: ; return 20 * CYCLE_UNIT / 2; } /* 20 (5/0) */ /* TST.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_4abc_11)(uae_u32 opcode) { {{ uae_s32 src = get_long_prefetch (4); regs.ir = regs.irc; get_word_prefetch (8); CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); }} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* TAS.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_4ac0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (4); src |= 0x80; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((src) & 0xff); }} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* TAS.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4ad0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (4); src |= 0x80; put_byte (srca, src); }}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* TAS.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4ad8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (4); src |= 0x80; put_byte (srca, src); }}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* TAS.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_4ae0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) = srca; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (4); src |= 0x80; put_byte (srca, src); }}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* TAS.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4ae8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); src |= 0x80; put_byte (srca, src); }}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* TAS.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4af0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); { uae_s8 src = get_byte (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); src |= 0x80; put_byte (srca, src); }}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* TAS.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4af8_11)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); src |= 0x80; put_byte (srca, src); }}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* TAS.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4af9_11)(uae_u32 opcode) { {{ uaecptr srca = get_long_prefetch (4); { uae_s8 src = get_byte (srca); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (8); src |= 0x80; put_byte (srca, src); }}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* MVMEL.W #.W,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_4c90_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_prefetch (4); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca = m68k_areg (regs, dstreg); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2926; } {{ while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = (uae_s32)(uae_s16)get_word (srca); srca += 2; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = (uae_s32)(uae_s16)get_word (srca); srca += 2; amask = movem_next[amask]; } regs.ir = regs.irc; get_word_prefetch (6); }}}} m68k_incpc (4); endlabel2926: ; return 8 * CYCLE_UNIT / 2; } /* 12+ (3/0) */ /* MVMEL.W #.W,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4c98_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_prefetch (4); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca = m68k_areg (regs, dstreg); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2927; } {{ while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = (uae_s32)(uae_s16)get_word (srca); srca += 2; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = (uae_s32)(uae_s16)get_word (srca); srca += 2; amask = movem_next[amask]; } m68k_areg (regs, dstreg) = srca; regs.ir = regs.irc; get_word_prefetch (6); }}}} m68k_incpc (4); endlabel2927: ; return 8 * CYCLE_UNIT / 2; } /* 16+ (4/0) */ /* MVMEL.W #.W,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4ca8_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_prefetch (4); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (6); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2928; } {{ while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = (uae_s32)(uae_s16)get_word (srca); srca += 2; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = (uae_s32)(uae_s16)get_word (srca); srca += 2; amask = movem_next[amask]; } regs.ir = regs.irc; get_word_prefetch (8); }}}} m68k_incpc (6); endlabel2928: ; return 12 * CYCLE_UNIT / 2; } /* 16+ (4/0) */ /* MVMEL.W #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4cb0_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_prefetch (4); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (6)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2929; } {{ while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = (uae_s32)(uae_s16)get_word (srca); srca += 2; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = (uae_s32)(uae_s16)get_word (srca); srca += 2; amask = movem_next[amask]; } regs.ir = regs.irc; get_word_prefetch (8); }}}} m68k_incpc (6); endlabel2929: ; return 14 * CYCLE_UNIT / 2; } /* 16+ (4/0) */ /* MVMEL.W #.W,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4cb8_11)(uae_u32 opcode) { { uae_u16 mask = get_word_prefetch (4); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (6); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2930; } {{ while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = (uae_s32)(uae_s16)get_word (srca); srca += 2; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = (uae_s32)(uae_s16)get_word (srca); srca += 2; amask = movem_next[amask]; } regs.ir = regs.irc; get_word_prefetch (8); }}}} m68k_incpc (6); endlabel2930: ; return 12 * CYCLE_UNIT / 2; } /* 16+ (4/0) */ /* MVMEL.W #.W,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4cb9_11)(uae_u32 opcode) { { uae_u16 mask = get_word_prefetch (4); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca = get_long_prefetch (6); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2931; } {{ while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = (uae_s32)(uae_s16)get_word (srca); srca += 2; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = (uae_s32)(uae_s16)get_word (srca); srca += 2; amask = movem_next[amask]; } regs.ir = regs.irc; get_word_prefetch (10); }}}} m68k_incpc (8); endlabel2931: ; return 16 * CYCLE_UNIT / 2; } /* 20+ (5/0) */ /* MVMEL.W #.W,(d16,PC) */ uae_u32 REGPARAM2 CPUFUNC(op_4cba_11)(uae_u32 opcode) { uae_u32 dstreg = 2; { uae_u16 mask = get_word_prefetch (4); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca = m68k_getpc () + 4; srca += (uae_s32)(uae_s16)get_word_prefetch (6); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2932; } {{ while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = (uae_s32)(uae_s16)get_word (srca); srca += 2; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = (uae_s32)(uae_s16)get_word (srca); srca += 2; amask = movem_next[amask]; } regs.ir = regs.irc; get_word_prefetch (8); }}}} m68k_incpc (6); endlabel2932: ; return 12 * CYCLE_UNIT / 2; } /* 16+ (4/0) */ /* MVMEL.W #.W,(d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4cbb_11)(uae_u32 opcode) { uae_u32 dstreg = 3; { uae_u16 mask = get_word_prefetch (4); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 4; srca = get_disp_ea_000 (tmppc, get_word_prefetch (6)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2933; } {{ while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = (uae_s32)(uae_s16)get_word (srca); srca += 2; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = (uae_s32)(uae_s16)get_word (srca); srca += 2; amask = movem_next[amask]; } regs.ir = regs.irc; get_word_prefetch (8); }}}} m68k_incpc (6); endlabel2933: ; return 14 * CYCLE_UNIT / 2; } /* 16+ (4/0) */ /* MVMEL.L #.W,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_4cd0_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_prefetch (4); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca = m68k_areg (regs, dstreg); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2934; } {{ while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = get_long (srca); srca += 4; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = get_long (srca); srca += 4; amask = movem_next[amask]; } regs.ir = regs.irc; get_word_prefetch (6); }}}} m68k_incpc (4); endlabel2934: ; return 8 * CYCLE_UNIT / 2; } /* 16+ (4/0) */ /* MVMEL.L #.W,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_4cd8_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_prefetch (4); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca = m68k_areg (regs, dstreg); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2935; } {{ while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = get_long (srca); srca += 4; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = get_long (srca); srca += 4; amask = movem_next[amask]; } m68k_areg (regs, dstreg) = srca; regs.ir = regs.irc; get_word_prefetch (6); }}}} m68k_incpc (4); endlabel2935: ; return 8 * CYCLE_UNIT / 2; } /* 20+ (5/0) */ /* MVMEL.L #.W,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4ce8_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_prefetch (4); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (6); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2936; } {{ while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = get_long (srca); srca += 4; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = get_long (srca); srca += 4; amask = movem_next[amask]; } regs.ir = regs.irc; get_word_prefetch (8); }}}} m68k_incpc (6); endlabel2936: ; return 12 * CYCLE_UNIT / 2; } /* 20+ (5/0) */ /* MVMEL.L #.W,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4cf0_11)(uae_u32 opcode) { uae_u32 dstreg = opcode & 7; { uae_u16 mask = get_word_prefetch (4); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (6)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2937; } {{ while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = get_long (srca); srca += 4; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = get_long (srca); srca += 4; amask = movem_next[amask]; } regs.ir = regs.irc; get_word_prefetch (8); }}}} m68k_incpc (6); endlabel2937: ; return 14 * CYCLE_UNIT / 2; } /* 20+ (5/0) */ /* MVMEL.L #.W,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4cf8_11)(uae_u32 opcode) { { uae_u16 mask = get_word_prefetch (4); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (6); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2938; } {{ while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = get_long (srca); srca += 4; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = get_long (srca); srca += 4; amask = movem_next[amask]; } regs.ir = regs.irc; get_word_prefetch (8); }}}} m68k_incpc (6); endlabel2938: ; return 12 * CYCLE_UNIT / 2; } /* 20+ (5/0) */ /* MVMEL.L #.W,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4cf9_11)(uae_u32 opcode) { { uae_u16 mask = get_word_prefetch (4); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca = get_long_prefetch (6); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2939; } {{ while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = get_long (srca); srca += 4; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = get_long (srca); srca += 4; amask = movem_next[amask]; } regs.ir = regs.irc; get_word_prefetch (10); }}}} m68k_incpc (8); endlabel2939: ; return 16 * CYCLE_UNIT / 2; } /* 24+ (6/0) */ /* MVMEL.L #.W,(d16,PC) */ uae_u32 REGPARAM2 CPUFUNC(op_4cfa_11)(uae_u32 opcode) { uae_u32 dstreg = 2; { uae_u16 mask = get_word_prefetch (4); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr srca = m68k_getpc () + 4; srca += (uae_s32)(uae_s16)get_word_prefetch (6); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2940; } {{ while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = get_long (srca); srca += 4; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = get_long (srca); srca += 4; amask = movem_next[amask]; } regs.ir = regs.irc; get_word_prefetch (8); }}}} m68k_incpc (6); endlabel2940: ; return 12 * CYCLE_UNIT / 2; } /* 20+ (5/0) */ /* MVMEL.L #.W,(d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4cfb_11)(uae_u32 opcode) { uae_u32 dstreg = 3; { uae_u16 mask = get_word_prefetch (4); uae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff; { uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 4; srca = get_disp_ea_000 (tmppc, get_word_prefetch (6)); if (srca & 1) { m68k_incpc (2); exception3 (opcode, srca); goto endlabel2941; } {{ while (dmask) { m68k_dreg (regs, movem_index1[dmask]) = get_long (srca); srca += 4; dmask = movem_next[dmask]; } while (amask) { m68k_areg (regs, movem_index1[amask]) = get_long (srca); srca += 4; amask = movem_next[amask]; } regs.ir = regs.irc; get_word_prefetch (8); }}}} m68k_incpc (6); endlabel2941: ; return 14 * CYCLE_UNIT / 2; } /* 20+ (5/0) */ /* TRAPQ.L # */ uae_u32 REGPARAM2 CPUFUNC(op_4e40_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 15); {{ uae_u32 src = srcreg; m68k_incpc (2); Exception (src + 32); }}return 0 * CYCLE_UNIT / 2; } /* 4 (0/0) */ /* LINK.W An,#.W */ uae_u32 REGPARAM2 CPUFUNC(op_4e50_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr olda; olda = m68k_areg (regs, 7) - 4; if (olda & 1) { exception3 (opcode, olda); goto endlabel2943; } { m68k_areg (regs, 7) = olda; { uae_s32 src = m68k_areg (regs, srcreg); { uae_s16 offs = get_word_prefetch (4); put_long (olda, src); m68k_areg (regs, srcreg) = (m68k_areg (regs, 7)); m68k_areg (regs, 7) += offs; regs.ir = regs.irc; get_word_prefetch (6); }}}}} m68k_incpc (4); endlabel2943: ; return 16 * CYCLE_UNIT / 2; } /* 16 (2/2) */ /* UNLK.L An */ uae_u32 REGPARAM2 CPUFUNC(op_4e58_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s32 src = m68k_areg (regs, srcreg); m68k_areg (regs, 7) = src; { uaecptr olda = m68k_areg (regs, 7); if (olda & 1) { exception3 (opcode, olda); goto endlabel2944; } {{ uae_s32 old = get_long (olda); m68k_areg (regs, 7) += 4; regs.ir = regs.irc; get_word_prefetch (4); m68k_areg (regs, srcreg) = (old); }}}}} m68k_incpc (2); endlabel2944: ; return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* MVR2USP.L An */ uae_u32 REGPARAM2 CPUFUNC(op_4e60_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel2945; } {{ uae_s32 src = m68k_areg (regs, srcreg); regs.ir = regs.irc; get_word_prefetch (4); regs.usp = src; }}} m68k_incpc (2); endlabel2945: ; return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* MVUSP2R.L An */ uae_u32 REGPARAM2 CPUFUNC(op_4e68_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {if (!regs.s) { Exception (8); goto endlabel2946; } {{ regs.ir = regs.irc; get_word_prefetch (4); m68k_areg (regs, srcreg) = (regs.usp); }}} m68k_incpc (2); endlabel2946: ; return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* RESET.L */ uae_u32 REGPARAM2 CPUFUNC(op_4e70_11)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel2947; } { regs.ir = regs.irc; get_word_prefetch (4); cpureset (); m68k_incpc (2); get_word_prefetch (2); }}endlabel2947: ; return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* NOP.L */ uae_u32 REGPARAM2 CPUFUNC(op_4e71_11)(uae_u32 opcode) { { regs.ir = regs.irc; get_word_prefetch (4); } m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* STOP.L #.W */ uae_u32 REGPARAM2 CPUFUNC(op_4e72_11)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel2949; } { regs.sr = regs.irc; MakeFromSR (); m68k_setstopped (); m68k_incpc (4); }}endlabel2949: ; return 0 * CYCLE_UNIT / 2; } /* 4 (0/0) */ /* RTE.L */ uae_u32 REGPARAM2 CPUFUNC(op_4e73_11)(uae_u32 opcode) { {if (!regs.s) { Exception (8); goto endlabel2950; } {{ uaecptr sra = m68k_areg (regs, 7); if (sra & 1) { exception3 (opcode, sra); goto endlabel2950; } {{ uae_s16 sr = get_word (sra); m68k_areg (regs, 7) += 2; { uaecptr pca = m68k_areg (regs, 7); if (pca & 1) { exception3 (opcode, pca); goto endlabel2950; } {{ uae_s32 pc = get_long (pca); m68k_areg (regs, 7) += 4; regs.sr = sr; m68k_setpc (pc); MakeFromSR (); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}}}endlabel2950: ; return 20 * CYCLE_UNIT / 2; } /* 20 (5/0) */ /* RTD.L #.W */ uae_u32 REGPARAM2 CPUFUNC(op_4e74_11)(uae_u32 opcode) { {{ uaecptr pca = m68k_areg (regs, 7); if (pca & 1) { exception3 (opcode, pca); goto endlabel2951; } {{ uae_s32 pc = get_long (pca); m68k_areg (regs, 7) += 4; { uae_s16 offs = get_word_prefetch (4); m68k_areg (regs, 7) += offs; if (pc & 1) { exception3i (0x4E74, pc); goto endlabel2951; } if (pc & 1) { exception3i (0x4E74, pc); goto endlabel2951; } m68k_setpc (pc); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}}}}endlabel2951: ; return 20 * CYCLE_UNIT / 2; } /* 20 (5/0) */ /* RTS.L */ uae_u32 REGPARAM2 CPUFUNC(op_4e75_11)(uae_u32 opcode) { { uaecptr pc = m68k_getpc (); m68k_do_rts (); if (m68k_getpc () & 1) { uaecptr faultpc = m68k_getpc (); m68k_setpc (pc); exception3i (0x4E75, faultpc); } get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }return 8 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* TRAPV.L */ uae_u32 REGPARAM2 CPUFUNC(op_4e76_11)(uae_u32 opcode) { { m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); if (GET_VFLG ()) { Exception (7); goto endlabel2953; } }endlabel2953: ; return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* RTR.L */ uae_u32 REGPARAM2 CPUFUNC(op_4e77_11)(uae_u32 opcode) { { uaecptr oldpc = m68k_getpc (); MakeSR (); { uaecptr sra = m68k_areg (regs, 7); if (sra & 1) { exception3 (opcode, sra); goto endlabel2954; } {{ uae_s16 sr = get_word (sra); m68k_areg (regs, 7) += 2; { uaecptr pca = m68k_areg (regs, 7); if (pca & 1) { exception3 (opcode, pca); goto endlabel2954; } {{ uae_s32 pc = get_long (pca); m68k_areg (regs, 7) += 4; regs.sr &= 0xFF00; sr &= 0xFF; regs.sr |= sr; m68k_setpc (pc); MakeFromSR (); if (m68k_getpc () & 1) { uaecptr faultpc = m68k_getpc (); m68k_setpc (oldpc); exception3i (0x4E77, faultpc); } get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}}}}}}endlabel2954: ; return 20 * CYCLE_UNIT / 2; } /* 20 (5/0) */ /* JSR.L (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4e90_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uaecptr oldpc = m68k_getpc () + 2; if (srca & 1) { exception3i (opcode, srca); goto endlabel2955; } m68k_setpc (srca); get_word_prefetch (0); m68k_areg (regs, 7) -= 4; put_long (m68k_areg (regs, 7), oldpc); regs.ir = regs.irc; get_word_prefetch (2); }}}endlabel2955: ; return 8 * CYCLE_UNIT / 2; } /* 16 (2/2) */ /* JSR.L (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4ea8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)regs.irc; { uaecptr oldpc = m68k_getpc () + 4; if (srca & 1) { exception3i (opcode, srca); goto endlabel2956; } m68k_setpc (srca); get_word_prefetch (0); m68k_areg (regs, 7) -= 4; put_long (m68k_areg (regs, 7), oldpc); regs.ir = regs.irc; get_word_prefetch (2); }}}endlabel2956: ; return 8 * CYCLE_UNIT / 2; } /* 16 (2/2) */ /* JSR.L (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4eb0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), regs.irc); { uaecptr oldpc = m68k_getpc () + 4; if (srca & 1) { exception3i (opcode, srca); goto endlabel2957; } m68k_setpc (srca); get_word_prefetch (0); m68k_areg (regs, 7) -= 4; put_long (m68k_areg (regs, 7), oldpc); regs.ir = regs.irc; get_word_prefetch (2); }}}endlabel2957: ; return 8 * CYCLE_UNIT / 2; } /* 16 (2/2) */ /* JSR.L (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4eb8_11)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)regs.irc; { uaecptr oldpc = m68k_getpc () + 4; if (srca & 1) { exception3i (opcode, srca); goto endlabel2958; } m68k_setpc (srca); get_word_prefetch (0); m68k_areg (regs, 7) -= 4; put_long (m68k_areg (regs, 7), oldpc); regs.ir = regs.irc; get_word_prefetch (2); }}}endlabel2958: ; return 8 * CYCLE_UNIT / 2; } /* 16 (2/2) */ /* JSR.L (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4eb9_11)(uae_u32 opcode) { {{ uaecptr srca; srca = get_word_prefetch (4) << 16; srca |= regs.irc; { uaecptr oldpc = m68k_getpc () + 6; if (srca & 1) { exception3i (opcode, srca); goto endlabel2959; } m68k_setpc (srca); get_word_prefetch (0); m68k_areg (regs, 7) -= 4; put_long (m68k_areg (regs, 7), oldpc); regs.ir = regs.irc; get_word_prefetch (2); }}}endlabel2959: ; return 12 * CYCLE_UNIT / 2; } /* 20 (3/2) */ /* JSR.L (d16,PC) */ uae_u32 REGPARAM2 CPUFUNC(op_4eba_11)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)regs.irc; { uaecptr oldpc = m68k_getpc () + 4; if (srca & 1) { exception3i (opcode, srca); goto endlabel2960; } m68k_setpc (srca); get_word_prefetch (0); m68k_areg (regs, 7) -= 4; put_long (m68k_areg (regs, 7), oldpc); regs.ir = regs.irc; get_word_prefetch (2); }}}endlabel2960: ; return 8 * CYCLE_UNIT / 2; } /* 16 (2/2) */ /* JSR.L (d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4ebb_11)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, regs.irc); { uaecptr oldpc = m68k_getpc () + 4; if (srca & 1) { exception3i (opcode, srca); goto endlabel2961; } m68k_setpc (srca); get_word_prefetch (0); m68k_areg (regs, 7) -= 4; put_long (m68k_areg (regs, 7), oldpc); regs.ir = regs.irc; get_word_prefetch (2); }}}endlabel2961: ; return 8 * CYCLE_UNIT / 2; } /* 16 (2/2) */ /* JMP.L (An) */ uae_u32 REGPARAM2 CPUFUNC(op_4ed0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3i (opcode, srca); goto endlabel2962; } m68k_setpc (srca); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}endlabel2962: ; return 8 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* JMP.L (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_4ee8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)regs.irc; if (srca & 1) { exception3i (opcode, srca); goto endlabel2963; } m68k_setpc (srca); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}endlabel2963: ; return 8 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* JMP.L (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4ef0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); if (srca & 1) { exception3i (opcode, srca); goto endlabel2964; } m68k_setpc (srca); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}endlabel2964: ; return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* JMP.L (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_4ef8_11)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)regs.irc; if (srca & 1) { exception3i (opcode, srca); goto endlabel2965; } m68k_setpc (srca); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}endlabel2965: ; return 8 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* JMP.L (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_4ef9_11)(uae_u32 opcode) { {{ uaecptr srca; srca = get_word_prefetch (4) << 16; srca |= regs.irc; if (srca & 1) { exception3i (opcode, srca); goto endlabel2966; } m68k_setpc (srca); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}endlabel2966: ; return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* JMP.L (d16,PC) */ uae_u32 REGPARAM2 CPUFUNC(op_4efa_11)(uae_u32 opcode) { {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)regs.irc; if (srca & 1) { exception3i (opcode, srca); goto endlabel2967; } m68k_setpc (srca); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}endlabel2967: ; return 8 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* JMP.L (d8,PC,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_4efb_11)(uae_u32 opcode) { {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_word_prefetch (4)); if (srca & 1) { exception3i (opcode, srca); goto endlabel2968; } m68k_setpc (srca); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}endlabel2968: ; return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* ADDQ.B #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_5000_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* ADDQ.B #,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_5010_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte (dsta); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* ADDQ.B #,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_5018_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* ADDQ.B #,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_5020_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* ADDQ.B #,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_5028_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 dst = get_byte (dsta); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* ADDQ.B #,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_5030_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (4)); { uae_s8 dst = get_byte (dsta); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* ADDQ.B #,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_5038_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 dst = get_byte (dsta); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* ADDQ.B #,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_5039_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = get_long_prefetch (4); { uae_s8 dst = get_byte (dsta); regs.ir = regs.irc; get_word_prefetch (8); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* ADDQ.W #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_5040_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* ADDAQ.W #,An */ uae_u32 REGPARAM2 CPUFUNC(op_5048_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* ADDQ.W #,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_5050_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel2979; } {{ uae_s16 dst = get_word (dsta); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}}} m68k_incpc (2); endlabel2979: ; return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* ADDQ.W #,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_5058_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel2980; } {{ uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) += 2; regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}}} m68k_incpc (2); endlabel2980: ; return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* ADDQ.W #,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_5060_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; if (dsta & 1) { exception3 (opcode, dsta); goto endlabel2981; } {{ uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}}} m68k_incpc (2); endlabel2981: ; return 14 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* ADDQ.W #,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_5068_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel2982; } {{ uae_s16 dst = get_word (dsta); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}}} m68k_incpc (4); endlabel2982: ; return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* ADDQ.W #,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_5070_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (4)); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel2983; } {{ uae_s16 dst = get_word (dsta); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}}} m68k_incpc (4); endlabel2983: ; return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ #endif #ifdef PART_5 /* ADDQ.W #,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_5078_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (4); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel2984; } {{ uae_s16 dst = get_word (dsta); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}}} m68k_incpc (4); endlabel2984: ; return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* ADDQ.W #,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_5079_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = get_long_prefetch (4); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel2985; } {{ uae_s16 dst = get_word (dsta); regs.ir = regs.irc; get_word_prefetch (8); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}}} m68k_incpc (6); endlabel2985: ; return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* ADDQ.L #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_5080_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* ADDAQ.L #,An */ uae_u32 REGPARAM2 CPUFUNC(op_5088_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* ADDQ.L #,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_5090_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel2988; } {{ uae_s32 dst = get_long (dsta); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}}} m68k_incpc (2); endlabel2988: ; return 20 * CYCLE_UNIT / 2; } /* 20 (3/2) */ /* ADDQ.L #,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_5098_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel2989; } {{ uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) += 4; regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}}} m68k_incpc (2); endlabel2989: ; return 20 * CYCLE_UNIT / 2; } /* 20 (3/2) */ /* ADDQ.L #,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_50a0_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; if (dsta & 1) { exception3 (opcode, dsta); goto endlabel2990; } {{ uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}}} m68k_incpc (2); endlabel2990: ; return 22 * CYCLE_UNIT / 2; } /* 20 (3/2) */ /* ADDQ.L #,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_50a8_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel2991; } {{ uae_s32 dst = get_long (dsta); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}}} m68k_incpc (4); endlabel2991: ; return 24 * CYCLE_UNIT / 2; } /* 24 (4/2) */ /* ADDQ.L #,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_50b0_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (4)); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel2992; } {{ uae_s32 dst = get_long (dsta); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}}} m68k_incpc (4); endlabel2992: ; return 26 * CYCLE_UNIT / 2; } /* 24 (4/2) */ /* ADDQ.L #,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_50b8_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (4); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel2993; } {{ uae_s32 dst = get_long (dsta); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}}} m68k_incpc (4); endlabel2993: ; return 24 * CYCLE_UNIT / 2; } /* 24 (4/2) */ /* ADDQ.L #,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_50b9_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = get_long_prefetch (4); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel2994; } {{ uae_s32 dst = get_long (dsta); regs.ir = regs.irc; get_word_prefetch (8); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}}} m68k_incpc (6); endlabel2994: ; return 28 * CYCLE_UNIT / 2; } /* 28 (5/2) */ /* Scc.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_50c0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { regs.ir = regs.irc; get_word_prefetch (4); { int val = cctrue (0) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* DBcc.W Dn,#.W */ uae_u32 REGPARAM2 CPUFUNC(op_50c8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = regs.irc; uaecptr oldpc = m68k_getpc (); if (!cctrue (0)) { m68k_incpc ((uae_s32)offs + 2); get_word_prefetch (0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel2996; } regs.ir = regs.irc; get_word_prefetch (2); return 12 * CYCLE_UNIT / 2; } } else { } m68k_setpc (oldpc + 4); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}}endlabel2996: ; return 12 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* Scc.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_50d0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (4); { int val = cctrue (0) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* Scc.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_50d8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { regs.ir = regs.irc; get_word_prefetch (4); { int val = cctrue (0) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* Scc.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_50e0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) = srca; { regs.ir = regs.irc; get_word_prefetch (4); { int val = cctrue (0) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* Scc.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_50e8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (6); { int val = cctrue (0) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_50f0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (6); { int val = cctrue (0) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* Scc.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_50f8_11)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (6); { int val = cctrue (0) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* Scc.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_50f9_11)(uae_u32 opcode) { {{ uaecptr srca = get_long_prefetch (4); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (8); { int val = cctrue (0) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* SUBQ.B #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_5100_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* SUBQ.B #,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_5110_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte (dsta); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* SUBQ.B #,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_5118_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* SUBQ.B #,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_5120_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* SUBQ.B #,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_5128_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 dst = get_byte (dsta); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* SUBQ.B #,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_5130_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (4)); { uae_s8 dst = get_byte (dsta); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* SUBQ.B #,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_5138_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 dst = get_byte (dsta); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* SUBQ.B #,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_5139_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = get_long_prefetch (4); { uae_s8 dst = get_byte (dsta); regs.ir = regs.irc; get_word_prefetch (8); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* SUBQ.W #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_5140_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* SUBAQ.W #,An */ uae_u32 REGPARAM2 CPUFUNC(op_5148_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* SUBQ.W #,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_5150_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3014; } {{ uae_s16 dst = get_word (dsta); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}}} m68k_incpc (2); endlabel3014: ; return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* SUBQ.W #,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_5158_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3015; } {{ uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) += 2; regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}}} m68k_incpc (2); endlabel3015: ; return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* SUBQ.W #,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_5160_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3016; } {{ uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}}} m68k_incpc (2); endlabel3016: ; return 14 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* SUBQ.W #,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_5168_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3017; } {{ uae_s16 dst = get_word (dsta); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}}} m68k_incpc (4); endlabel3017: ; return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* SUBQ.W #,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_5170_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (4)); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3018; } {{ uae_s16 dst = get_word (dsta); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}}} m68k_incpc (4); endlabel3018: ; return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* SUBQ.W #,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_5178_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (4); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3019; } {{ uae_s16 dst = get_word (dsta); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}}} m68k_incpc (4); endlabel3019: ; return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* SUBQ.W #,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_5179_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = get_long_prefetch (4); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3020; } {{ uae_s16 dst = get_word (dsta); regs.ir = regs.irc; get_word_prefetch (8); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}}} m68k_incpc (6); endlabel3020: ; return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* SUBQ.L #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_5180_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* SUBAQ.L #,An */ uae_u32 REGPARAM2 CPUFUNC(op_5188_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* SUBQ.L #,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_5190_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3023; } {{ uae_s32 dst = get_long (dsta); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}}} m68k_incpc (2); endlabel3023: ; return 20 * CYCLE_UNIT / 2; } /* 20 (3/2) */ /* SUBQ.L #,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_5198_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3024; } {{ uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) += 4; regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}}} m68k_incpc (2); endlabel3024: ; return 20 * CYCLE_UNIT / 2; } /* 20 (3/2) */ /* SUBQ.L #,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_51a0_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3025; } {{ uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}}} m68k_incpc (2); endlabel3025: ; return 22 * CYCLE_UNIT / 2; } /* 20 (3/2) */ /* SUBQ.L #,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_51a8_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3026; } {{ uae_s32 dst = get_long (dsta); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}}} m68k_incpc (4); endlabel3026: ; return 24 * CYCLE_UNIT / 2; } /* 24 (4/2) */ /* SUBQ.L #,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_51b0_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 src = srcreg; { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (4)); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3027; } {{ uae_s32 dst = get_long (dsta); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}}} m68k_incpc (4); endlabel3027: ; return 26 * CYCLE_UNIT / 2; } /* 24 (4/2) */ /* SUBQ.L #,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_51b8_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (4); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3028; } {{ uae_s32 dst = get_long (dsta); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}}} m68k_incpc (4); endlabel3028: ; return 24 * CYCLE_UNIT / 2; } /* 24 (4/2) */ /* SUBQ.L #,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_51b9_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; {{ uae_u32 src = srcreg; { uaecptr dsta = get_long_prefetch (4); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3029; } {{ uae_s32 dst = get_long (dsta); regs.ir = regs.irc; get_word_prefetch (8); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}}} m68k_incpc (6); endlabel3029: ; return 28 * CYCLE_UNIT / 2; } /* 28 (5/2) */ /* Scc.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_51c0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { regs.ir = regs.irc; get_word_prefetch (4); { int val = cctrue (1) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* DBcc.W Dn,#.W */ uae_u32 REGPARAM2 CPUFUNC(op_51c8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = regs.irc; uaecptr oldpc = m68k_getpc (); if (!cctrue (1)) { m68k_incpc ((uae_s32)offs + 2); get_word_prefetch (0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel3031; } regs.ir = regs.irc; get_word_prefetch (2); return 12 * CYCLE_UNIT / 2; } } else { } m68k_setpc (oldpc + 4); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}}endlabel3031: ; return 12 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* Scc.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_51d0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (4); { int val = cctrue (1) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* Scc.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_51d8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { regs.ir = regs.irc; get_word_prefetch (4); { int val = cctrue (1) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* Scc.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_51e0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) = srca; { regs.ir = regs.irc; get_word_prefetch (4); { int val = cctrue (1) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* Scc.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_51e8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (6); { int val = cctrue (1) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_51f0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (6); { int val = cctrue (1) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* Scc.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_51f8_11)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (6); { int val = cctrue (1) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* Scc.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_51f9_11)(uae_u32 opcode) { {{ uaecptr srca = get_long_prefetch (4); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (8); { int val = cctrue (1) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* Scc.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_52c0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { regs.ir = regs.irc; get_word_prefetch (4); { int val = cctrue (2) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* DBcc.W Dn,#.W */ uae_u32 REGPARAM2 CPUFUNC(op_52c8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = regs.irc; uaecptr oldpc = m68k_getpc (); if (!cctrue (2)) { m68k_incpc ((uae_s32)offs + 2); get_word_prefetch (0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel3040; } regs.ir = regs.irc; get_word_prefetch (2); return 12 * CYCLE_UNIT / 2; } } else { } m68k_setpc (oldpc + 4); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}}endlabel3040: ; return 12 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* Scc.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_52d0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (4); { int val = cctrue (2) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* Scc.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_52d8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { regs.ir = regs.irc; get_word_prefetch (4); { int val = cctrue (2) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* Scc.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_52e0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) = srca; { regs.ir = regs.irc; get_word_prefetch (4); { int val = cctrue (2) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* Scc.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_52e8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (6); { int val = cctrue (2) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_52f0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (6); { int val = cctrue (2) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* Scc.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_52f8_11)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (6); { int val = cctrue (2) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* Scc.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_52f9_11)(uae_u32 opcode) { {{ uaecptr srca = get_long_prefetch (4); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (8); { int val = cctrue (2) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* Scc.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_53c0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { regs.ir = regs.irc; get_word_prefetch (4); { int val = cctrue (3) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* DBcc.W Dn,#.W */ uae_u32 REGPARAM2 CPUFUNC(op_53c8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = regs.irc; uaecptr oldpc = m68k_getpc (); if (!cctrue (3)) { m68k_incpc ((uae_s32)offs + 2); get_word_prefetch (0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel3049; } regs.ir = regs.irc; get_word_prefetch (2); return 12 * CYCLE_UNIT / 2; } } else { } m68k_setpc (oldpc + 4); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}}endlabel3049: ; return 12 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* Scc.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_53d0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (4); { int val = cctrue (3) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* Scc.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_53d8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { regs.ir = regs.irc; get_word_prefetch (4); { int val = cctrue (3) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* Scc.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_53e0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) = srca; { regs.ir = regs.irc; get_word_prefetch (4); { int val = cctrue (3) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* Scc.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_53e8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (6); { int val = cctrue (3) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_53f0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (6); { int val = cctrue (3) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* Scc.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_53f8_11)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (6); { int val = cctrue (3) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* Scc.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_53f9_11)(uae_u32 opcode) { {{ uaecptr srca = get_long_prefetch (4); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (8); { int val = cctrue (3) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* Scc.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_54c0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { regs.ir = regs.irc; get_word_prefetch (4); { int val = cctrue (4) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* DBcc.W Dn,#.W */ uae_u32 REGPARAM2 CPUFUNC(op_54c8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = regs.irc; uaecptr oldpc = m68k_getpc (); if (!cctrue (4)) { m68k_incpc ((uae_s32)offs + 2); get_word_prefetch (0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel3058; } regs.ir = regs.irc; get_word_prefetch (2); return 12 * CYCLE_UNIT / 2; } } else { } m68k_setpc (oldpc + 4); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}}endlabel3058: ; return 12 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* Scc.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_54d0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (4); { int val = cctrue (4) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* Scc.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_54d8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { regs.ir = regs.irc; get_word_prefetch (4); { int val = cctrue (4) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* Scc.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_54e0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) = srca; { regs.ir = regs.irc; get_word_prefetch (4); { int val = cctrue (4) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* Scc.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_54e8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (6); { int val = cctrue (4) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_54f0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (6); { int val = cctrue (4) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* Scc.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_54f8_11)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (6); { int val = cctrue (4) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* Scc.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_54f9_11)(uae_u32 opcode) { {{ uaecptr srca = get_long_prefetch (4); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (8); { int val = cctrue (4) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* Scc.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_55c0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { regs.ir = regs.irc; get_word_prefetch (4); { int val = cctrue (5) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* DBcc.W Dn,#.W */ uae_u32 REGPARAM2 CPUFUNC(op_55c8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = regs.irc; uaecptr oldpc = m68k_getpc (); if (!cctrue (5)) { m68k_incpc ((uae_s32)offs + 2); get_word_prefetch (0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel3067; } regs.ir = regs.irc; get_word_prefetch (2); return 12 * CYCLE_UNIT / 2; } } else { } m68k_setpc (oldpc + 4); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}}endlabel3067: ; return 12 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* Scc.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_55d0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (4); { int val = cctrue (5) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* Scc.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_55d8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { regs.ir = regs.irc; get_word_prefetch (4); { int val = cctrue (5) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* Scc.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_55e0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) = srca; { regs.ir = regs.irc; get_word_prefetch (4); { int val = cctrue (5) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* Scc.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_55e8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (6); { int val = cctrue (5) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_55f0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (6); { int val = cctrue (5) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* Scc.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_55f8_11)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (6); { int val = cctrue (5) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* Scc.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_55f9_11)(uae_u32 opcode) { {{ uaecptr srca = get_long_prefetch (4); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (8); { int val = cctrue (5) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* Scc.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_56c0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { regs.ir = regs.irc; get_word_prefetch (4); { int val = cctrue (6) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* DBcc.W Dn,#.W */ uae_u32 REGPARAM2 CPUFUNC(op_56c8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = regs.irc; uaecptr oldpc = m68k_getpc (); if (!cctrue (6)) { m68k_incpc ((uae_s32)offs + 2); get_word_prefetch (0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel3076; } regs.ir = regs.irc; get_word_prefetch (2); return 12 * CYCLE_UNIT / 2; } } else { } m68k_setpc (oldpc + 4); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}}endlabel3076: ; return 12 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* Scc.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_56d0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (4); { int val = cctrue (6) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* Scc.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_56d8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { regs.ir = regs.irc; get_word_prefetch (4); { int val = cctrue (6) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* Scc.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_56e0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) = srca; { regs.ir = regs.irc; get_word_prefetch (4); { int val = cctrue (6) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* Scc.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_56e8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (6); { int val = cctrue (6) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_56f0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (6); { int val = cctrue (6) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* Scc.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_56f8_11)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (6); { int val = cctrue (6) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* Scc.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_56f9_11)(uae_u32 opcode) { {{ uaecptr srca = get_long_prefetch (4); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (8); { int val = cctrue (6) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* Scc.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_57c0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { regs.ir = regs.irc; get_word_prefetch (4); { int val = cctrue (7) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* DBcc.W Dn,#.W */ uae_u32 REGPARAM2 CPUFUNC(op_57c8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = regs.irc; uaecptr oldpc = m68k_getpc (); if (!cctrue (7)) { m68k_incpc ((uae_s32)offs + 2); get_word_prefetch (0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel3085; } regs.ir = regs.irc; get_word_prefetch (2); return 12 * CYCLE_UNIT / 2; } } else { } m68k_setpc (oldpc + 4); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}}endlabel3085: ; return 12 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* Scc.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_57d0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (4); { int val = cctrue (7) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* Scc.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_57d8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { regs.ir = regs.irc; get_word_prefetch (4); { int val = cctrue (7) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* Scc.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_57e0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) = srca; { regs.ir = regs.irc; get_word_prefetch (4); { int val = cctrue (7) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* Scc.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_57e8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (6); { int val = cctrue (7) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_57f0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (6); { int val = cctrue (7) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* Scc.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_57f8_11)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (6); { int val = cctrue (7) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* Scc.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_57f9_11)(uae_u32 opcode) { {{ uaecptr srca = get_long_prefetch (4); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (8); { int val = cctrue (7) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* Scc.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_58c0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { regs.ir = regs.irc; get_word_prefetch (4); { int val = cctrue (8) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* DBcc.W Dn,#.W */ uae_u32 REGPARAM2 CPUFUNC(op_58c8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = regs.irc; uaecptr oldpc = m68k_getpc (); if (!cctrue (8)) { m68k_incpc ((uae_s32)offs + 2); get_word_prefetch (0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel3094; } regs.ir = regs.irc; get_word_prefetch (2); return 12 * CYCLE_UNIT / 2; } } else { } m68k_setpc (oldpc + 4); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}}endlabel3094: ; return 12 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* Scc.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_58d0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (4); { int val = cctrue (8) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* Scc.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_58d8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { regs.ir = regs.irc; get_word_prefetch (4); { int val = cctrue (8) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* Scc.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_58e0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) = srca; { regs.ir = regs.irc; get_word_prefetch (4); { int val = cctrue (8) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* Scc.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_58e8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (6); { int val = cctrue (8) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_58f0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (6); { int val = cctrue (8) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* Scc.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_58f8_11)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (6); { int val = cctrue (8) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* Scc.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_58f9_11)(uae_u32 opcode) { {{ uaecptr srca = get_long_prefetch (4); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (8); { int val = cctrue (8) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* Scc.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_59c0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { regs.ir = regs.irc; get_word_prefetch (4); { int val = cctrue (9) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* DBcc.W Dn,#.W */ uae_u32 REGPARAM2 CPUFUNC(op_59c8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = regs.irc; uaecptr oldpc = m68k_getpc (); if (!cctrue (9)) { m68k_incpc ((uae_s32)offs + 2); get_word_prefetch (0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel3103; } regs.ir = regs.irc; get_word_prefetch (2); return 12 * CYCLE_UNIT / 2; } } else { } m68k_setpc (oldpc + 4); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}}endlabel3103: ; return 12 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* Scc.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_59d0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (4); { int val = cctrue (9) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* Scc.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_59d8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { regs.ir = regs.irc; get_word_prefetch (4); { int val = cctrue (9) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* Scc.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_59e0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) = srca; { regs.ir = regs.irc; get_word_prefetch (4); { int val = cctrue (9) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* Scc.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_59e8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (6); { int val = cctrue (9) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_59f0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (6); { int val = cctrue (9) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* Scc.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_59f8_11)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (6); { int val = cctrue (9) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* Scc.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_59f9_11)(uae_u32 opcode) { {{ uaecptr srca = get_long_prefetch (4); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (8); { int val = cctrue (9) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* Scc.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_5ac0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { regs.ir = regs.irc; get_word_prefetch (4); { int val = cctrue (10) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* DBcc.W Dn,#.W */ uae_u32 REGPARAM2 CPUFUNC(op_5ac8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = regs.irc; uaecptr oldpc = m68k_getpc (); if (!cctrue (10)) { m68k_incpc ((uae_s32)offs + 2); get_word_prefetch (0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel3112; } regs.ir = regs.irc; get_word_prefetch (2); return 12 * CYCLE_UNIT / 2; } } else { } m68k_setpc (oldpc + 4); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}}endlabel3112: ; return 12 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* Scc.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_5ad0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (4); { int val = cctrue (10) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* Scc.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_5ad8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { regs.ir = regs.irc; get_word_prefetch (4); { int val = cctrue (10) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* Scc.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_5ae0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) = srca; { regs.ir = regs.irc; get_word_prefetch (4); { int val = cctrue (10) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* Scc.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_5ae8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (6); { int val = cctrue (10) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_5af0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (6); { int val = cctrue (10) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* Scc.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_5af8_11)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (6); { int val = cctrue (10) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* Scc.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_5af9_11)(uae_u32 opcode) { {{ uaecptr srca = get_long_prefetch (4); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (8); { int val = cctrue (10) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* Scc.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_5bc0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { regs.ir = regs.irc; get_word_prefetch (4); { int val = cctrue (11) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* DBcc.W Dn,#.W */ uae_u32 REGPARAM2 CPUFUNC(op_5bc8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = regs.irc; uaecptr oldpc = m68k_getpc (); if (!cctrue (11)) { m68k_incpc ((uae_s32)offs + 2); get_word_prefetch (0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel3121; } regs.ir = regs.irc; get_word_prefetch (2); return 12 * CYCLE_UNIT / 2; } } else { } m68k_setpc (oldpc + 4); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}}endlabel3121: ; return 12 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* Scc.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_5bd0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (4); { int val = cctrue (11) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* Scc.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_5bd8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { regs.ir = regs.irc; get_word_prefetch (4); { int val = cctrue (11) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* Scc.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_5be0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) = srca; { regs.ir = regs.irc; get_word_prefetch (4); { int val = cctrue (11) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* Scc.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_5be8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (6); { int val = cctrue (11) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_5bf0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (6); { int val = cctrue (11) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* Scc.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_5bf8_11)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (6); { int val = cctrue (11) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* Scc.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_5bf9_11)(uae_u32 opcode) { {{ uaecptr srca = get_long_prefetch (4); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (8); { int val = cctrue (11) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* Scc.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_5cc0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { regs.ir = regs.irc; get_word_prefetch (4); { int val = cctrue (12) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* DBcc.W Dn,#.W */ uae_u32 REGPARAM2 CPUFUNC(op_5cc8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = regs.irc; uaecptr oldpc = m68k_getpc (); if (!cctrue (12)) { m68k_incpc ((uae_s32)offs + 2); get_word_prefetch (0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel3130; } regs.ir = regs.irc; get_word_prefetch (2); return 12 * CYCLE_UNIT / 2; } } else { } m68k_setpc (oldpc + 4); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}}endlabel3130: ; return 12 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* Scc.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_5cd0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (4); { int val = cctrue (12) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* Scc.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_5cd8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { regs.ir = regs.irc; get_word_prefetch (4); { int val = cctrue (12) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* Scc.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_5ce0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) = srca; { regs.ir = regs.irc; get_word_prefetch (4); { int val = cctrue (12) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* Scc.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_5ce8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (6); { int val = cctrue (12) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_5cf0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (6); { int val = cctrue (12) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* Scc.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_5cf8_11)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (6); { int val = cctrue (12) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* Scc.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_5cf9_11)(uae_u32 opcode) { {{ uaecptr srca = get_long_prefetch (4); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (8); { int val = cctrue (12) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* Scc.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_5dc0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { regs.ir = regs.irc; get_word_prefetch (4); { int val = cctrue (13) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* DBcc.W Dn,#.W */ uae_u32 REGPARAM2 CPUFUNC(op_5dc8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = regs.irc; uaecptr oldpc = m68k_getpc (); if (!cctrue (13)) { m68k_incpc ((uae_s32)offs + 2); get_word_prefetch (0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel3139; } regs.ir = regs.irc; get_word_prefetch (2); return 12 * CYCLE_UNIT / 2; } } else { } m68k_setpc (oldpc + 4); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}}endlabel3139: ; return 12 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* Scc.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_5dd0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (4); { int val = cctrue (13) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* Scc.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_5dd8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { regs.ir = regs.irc; get_word_prefetch (4); { int val = cctrue (13) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* Scc.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_5de0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) = srca; { regs.ir = regs.irc; get_word_prefetch (4); { int val = cctrue (13) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* Scc.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_5de8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (6); { int val = cctrue (13) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_5df0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (6); { int val = cctrue (13) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* Scc.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_5df8_11)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (6); { int val = cctrue (13) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* Scc.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_5df9_11)(uae_u32 opcode) { {{ uaecptr srca = get_long_prefetch (4); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (8); { int val = cctrue (13) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* Scc.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_5ec0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { regs.ir = regs.irc; get_word_prefetch (4); { int val = cctrue (14) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* DBcc.W Dn,#.W */ uae_u32 REGPARAM2 CPUFUNC(op_5ec8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = regs.irc; uaecptr oldpc = m68k_getpc (); if (!cctrue (14)) { m68k_incpc ((uae_s32)offs + 2); get_word_prefetch (0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel3148; } regs.ir = regs.irc; get_word_prefetch (2); return 12 * CYCLE_UNIT / 2; } } else { } m68k_setpc (oldpc + 4); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}}endlabel3148: ; return 12 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* Scc.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_5ed0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (4); { int val = cctrue (14) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* Scc.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_5ed8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { regs.ir = regs.irc; get_word_prefetch (4); { int val = cctrue (14) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* Scc.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_5ee0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) = srca; { regs.ir = regs.irc; get_word_prefetch (4); { int val = cctrue (14) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* Scc.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_5ee8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (6); { int val = cctrue (14) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_5ef0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (6); { int val = cctrue (14) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* Scc.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_5ef8_11)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (6); { int val = cctrue (14) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* Scc.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_5ef9_11)(uae_u32 opcode) { {{ uaecptr srca = get_long_prefetch (4); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (8); { int val = cctrue (14) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* Scc.B Dn */ uae_u32 REGPARAM2 CPUFUNC(op_5fc0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { regs.ir = regs.irc; get_word_prefetch (4); { int val = cctrue (15) ? 0xff : 0; m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* DBcc.W Dn,#.W */ uae_u32 REGPARAM2 CPUFUNC(op_5fc8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 offs = regs.irc; uaecptr oldpc = m68k_getpc (); if (!cctrue (15)) { m68k_incpc ((uae_s32)offs + 2); get_word_prefetch (0); m68k_dreg (regs, srcreg) = (m68k_dreg (regs, srcreg) & ~0xffff) | (((src - 1)) & 0xffff); if (src) { if (offs & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2); goto endlabel3157; } regs.ir = regs.irc; get_word_prefetch (2); return 12 * CYCLE_UNIT / 2; } } else { } m68k_setpc (oldpc + 4); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}}endlabel3157: ; return 12 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* Scc.B (An) */ uae_u32 REGPARAM2 CPUFUNC(op_5fd0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (4); { int val = cctrue (15) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* Scc.B (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_5fd8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { regs.ir = regs.irc; get_word_prefetch (4); { int val = cctrue (15) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* Scc.B -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_5fe0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) = srca; { regs.ir = regs.irc; get_word_prefetch (4); { int val = cctrue (15) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* Scc.B (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_5fe8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (6); { int val = cctrue (15) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* Scc.B (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_5ff0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (6); { int val = cctrue (15) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* Scc.B (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_5ff8_11)(uae_u32 opcode) { {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (6); { int val = cctrue (15) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* Scc.B (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_5ff9_11)(uae_u32 opcode) { {{ uaecptr srca = get_long_prefetch (4); { uae_s8 src = get_byte (srca); { regs.ir = regs.irc; get_word_prefetch (8); { int val = cctrue (15) ? 0xff : 0; put_byte (srca, val); }}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* Bcc.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_6000_11)(uae_u32 opcode) { {{ uae_s16 src = regs.irc; if (!cctrue (0)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel3165; } m68k_incpc ((uae_s32)src + 2); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}endlabel3165: ; return 12 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* BccQ.B # */ uae_u32 REGPARAM2 CPUFUNC(op_6001_11)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (0)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel3166; } m68k_incpc ((uae_s32)src + 2); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); }}endlabel3166: ; return 8 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_60ff_11)(uae_u32 opcode) { { if (cctrue (0)) { exception3i (opcode, m68k_getpc () + 1); goto endlabel3167; } m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); goto endlabel3167; { uae_s32 src; src = get_word_prefetch (2) << 16; src |= regs.irc; if (!cctrue (0)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel3167; } m68k_incpc ((uae_s32)src + 2); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}endlabel3167: ; return 12 * CYCLE_UNIT / 2; } /* 24 (6/0) */ /* BSR.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_6100_11)(uae_u32 opcode) { { uae_s32 s; { uae_s16 src = regs.irc; s = (uae_s32)src + 2; if (src & 1) { exception3 (opcode, m68k_getpc () + s, 0, 1, m68k_getpc () + s); goto endlabel3168; } m68k_do_bsr (m68k_getpc () + 4, s); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}endlabel3168: ; return 8 * CYCLE_UNIT / 2; } /* 16 (2/2) */ /* BSRQ.B # */ uae_u32 REGPARAM2 CPUFUNC(op_6101_11)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); { uae_s32 s; { uae_u32 src = srcreg; s = (uae_s32)src + 2; if (src & 1) { exception3 (opcode, m68k_getpc () + s, 0, 1, m68k_getpc () + s); goto endlabel3169; } m68k_do_bsr (m68k_getpc () + 2, s); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}endlabel3169: ; return 8 * CYCLE_UNIT / 2; } /* 16 (2/2) */ /* BSR.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_61ff_11)(uae_u32 opcode) { { uae_s32 s; uae_u32 src = 0xffffffff; s = (uae_s32)src + 2; if (src & 1) { exception3 (opcode, m68k_getpc () + s, 0, 1, m68k_getpc () + s); goto endlabel3170; } m68k_do_bsr (m68k_getpc () + 2, s); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }endlabel3170: ; return 8 * CYCLE_UNIT / 2; } /* 16 (2/2) */ #endif #ifdef PART_6 /* Bcc.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_6200_11)(uae_u32 opcode) { {{ uae_s16 src = regs.irc; if (!cctrue (2)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel3171; } m68k_incpc ((uae_s32)src + 2); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}endlabel3171: ; return 12 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* BccQ.B # */ uae_u32 REGPARAM2 CPUFUNC(op_6201_11)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (2)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel3172; } m68k_incpc ((uae_s32)src + 2); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); }}endlabel3172: ; return 8 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_62ff_11)(uae_u32 opcode) { { if (cctrue (2)) { exception3i (opcode, m68k_getpc () + 1); goto endlabel3173; } m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); goto endlabel3173; { uae_s32 src; src = get_word_prefetch (2) << 16; src |= regs.irc; if (!cctrue (2)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel3173; } m68k_incpc ((uae_s32)src + 2); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}endlabel3173: ; return 12 * CYCLE_UNIT / 2; } /* 24 (6/0) */ /* Bcc.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_6300_11)(uae_u32 opcode) { {{ uae_s16 src = regs.irc; if (!cctrue (3)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel3174; } m68k_incpc ((uae_s32)src + 2); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}endlabel3174: ; return 12 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* BccQ.B # */ uae_u32 REGPARAM2 CPUFUNC(op_6301_11)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (3)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel3175; } m68k_incpc ((uae_s32)src + 2); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); }}endlabel3175: ; return 8 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_63ff_11)(uae_u32 opcode) { { if (cctrue (3)) { exception3i (opcode, m68k_getpc () + 1); goto endlabel3176; } m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); goto endlabel3176; { uae_s32 src; src = get_word_prefetch (2) << 16; src |= regs.irc; if (!cctrue (3)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel3176; } m68k_incpc ((uae_s32)src + 2); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}endlabel3176: ; return 12 * CYCLE_UNIT / 2; } /* 24 (6/0) */ /* Bcc.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_6400_11)(uae_u32 opcode) { {{ uae_s16 src = regs.irc; if (!cctrue (4)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel3177; } m68k_incpc ((uae_s32)src + 2); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}endlabel3177: ; return 12 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* BccQ.B # */ uae_u32 REGPARAM2 CPUFUNC(op_6401_11)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (4)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel3178; } m68k_incpc ((uae_s32)src + 2); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); }}endlabel3178: ; return 8 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_64ff_11)(uae_u32 opcode) { { if (cctrue (4)) { exception3i (opcode, m68k_getpc () + 1); goto endlabel3179; } m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); goto endlabel3179; { uae_s32 src; src = get_word_prefetch (2) << 16; src |= regs.irc; if (!cctrue (4)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel3179; } m68k_incpc ((uae_s32)src + 2); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}endlabel3179: ; return 12 * CYCLE_UNIT / 2; } /* 24 (6/0) */ /* Bcc.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_6500_11)(uae_u32 opcode) { {{ uae_s16 src = regs.irc; if (!cctrue (5)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel3180; } m68k_incpc ((uae_s32)src + 2); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}endlabel3180: ; return 12 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* BccQ.B # */ uae_u32 REGPARAM2 CPUFUNC(op_6501_11)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (5)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel3181; } m68k_incpc ((uae_s32)src + 2); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); }}endlabel3181: ; return 8 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_65ff_11)(uae_u32 opcode) { { if (cctrue (5)) { exception3i (opcode, m68k_getpc () + 1); goto endlabel3182; } m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); goto endlabel3182; { uae_s32 src; src = get_word_prefetch (2) << 16; src |= regs.irc; if (!cctrue (5)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel3182; } m68k_incpc ((uae_s32)src + 2); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}endlabel3182: ; return 12 * CYCLE_UNIT / 2; } /* 24 (6/0) */ /* Bcc.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_6600_11)(uae_u32 opcode) { {{ uae_s16 src = regs.irc; if (!cctrue (6)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel3183; } m68k_incpc ((uae_s32)src + 2); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}endlabel3183: ; return 12 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* BccQ.B # */ uae_u32 REGPARAM2 CPUFUNC(op_6601_11)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (6)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel3184; } m68k_incpc ((uae_s32)src + 2); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); }}endlabel3184: ; return 8 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_66ff_11)(uae_u32 opcode) { { if (cctrue (6)) { exception3i (opcode, m68k_getpc () + 1); goto endlabel3185; } m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); goto endlabel3185; { uae_s32 src; src = get_word_prefetch (2) << 16; src |= regs.irc; if (!cctrue (6)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel3185; } m68k_incpc ((uae_s32)src + 2); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}endlabel3185: ; return 12 * CYCLE_UNIT / 2; } /* 24 (6/0) */ /* Bcc.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_6700_11)(uae_u32 opcode) { {{ uae_s16 src = regs.irc; if (!cctrue (7)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel3186; } m68k_incpc ((uae_s32)src + 2); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}endlabel3186: ; return 12 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* BccQ.B # */ uae_u32 REGPARAM2 CPUFUNC(op_6701_11)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (7)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel3187; } m68k_incpc ((uae_s32)src + 2); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); }}endlabel3187: ; return 8 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_67ff_11)(uae_u32 opcode) { { if (cctrue (7)) { exception3i (opcode, m68k_getpc () + 1); goto endlabel3188; } m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); goto endlabel3188; { uae_s32 src; src = get_word_prefetch (2) << 16; src |= regs.irc; if (!cctrue (7)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel3188; } m68k_incpc ((uae_s32)src + 2); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}endlabel3188: ; return 12 * CYCLE_UNIT / 2; } /* 24 (6/0) */ /* Bcc.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_6800_11)(uae_u32 opcode) { {{ uae_s16 src = regs.irc; if (!cctrue (8)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel3189; } m68k_incpc ((uae_s32)src + 2); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}endlabel3189: ; return 12 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* BccQ.B # */ uae_u32 REGPARAM2 CPUFUNC(op_6801_11)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (8)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel3190; } m68k_incpc ((uae_s32)src + 2); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); }}endlabel3190: ; return 8 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_68ff_11)(uae_u32 opcode) { { if (cctrue (8)) { exception3i (opcode, m68k_getpc () + 1); goto endlabel3191; } m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); goto endlabel3191; { uae_s32 src; src = get_word_prefetch (2) << 16; src |= regs.irc; if (!cctrue (8)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel3191; } m68k_incpc ((uae_s32)src + 2); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}endlabel3191: ; return 12 * CYCLE_UNIT / 2; } /* 24 (6/0) */ /* Bcc.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_6900_11)(uae_u32 opcode) { {{ uae_s16 src = regs.irc; if (!cctrue (9)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel3192; } m68k_incpc ((uae_s32)src + 2); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}endlabel3192: ; return 12 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* BccQ.B # */ uae_u32 REGPARAM2 CPUFUNC(op_6901_11)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (9)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel3193; } m68k_incpc ((uae_s32)src + 2); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); }}endlabel3193: ; return 8 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_69ff_11)(uae_u32 opcode) { { if (cctrue (9)) { exception3i (opcode, m68k_getpc () + 1); goto endlabel3194; } m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); goto endlabel3194; { uae_s32 src; src = get_word_prefetch (2) << 16; src |= regs.irc; if (!cctrue (9)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel3194; } m68k_incpc ((uae_s32)src + 2); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}endlabel3194: ; return 12 * CYCLE_UNIT / 2; } /* 24 (6/0) */ /* Bcc.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_6a00_11)(uae_u32 opcode) { {{ uae_s16 src = regs.irc; if (!cctrue (10)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel3195; } m68k_incpc ((uae_s32)src + 2); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}endlabel3195: ; return 12 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* BccQ.B # */ uae_u32 REGPARAM2 CPUFUNC(op_6a01_11)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (10)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel3196; } m68k_incpc ((uae_s32)src + 2); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); }}endlabel3196: ; return 8 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_6aff_11)(uae_u32 opcode) { { if (cctrue (10)) { exception3i (opcode, m68k_getpc () + 1); goto endlabel3197; } m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); goto endlabel3197; { uae_s32 src; src = get_word_prefetch (2) << 16; src |= regs.irc; if (!cctrue (10)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel3197; } m68k_incpc ((uae_s32)src + 2); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}endlabel3197: ; return 12 * CYCLE_UNIT / 2; } /* 24 (6/0) */ /* Bcc.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_6b00_11)(uae_u32 opcode) { {{ uae_s16 src = regs.irc; if (!cctrue (11)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel3198; } m68k_incpc ((uae_s32)src + 2); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}endlabel3198: ; return 12 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* BccQ.B # */ uae_u32 REGPARAM2 CPUFUNC(op_6b01_11)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (11)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel3199; } m68k_incpc ((uae_s32)src + 2); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); }}endlabel3199: ; return 8 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_6bff_11)(uae_u32 opcode) { { if (cctrue (11)) { exception3i (opcode, m68k_getpc () + 1); goto endlabel3200; } m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); goto endlabel3200; { uae_s32 src; src = get_word_prefetch (2) << 16; src |= regs.irc; if (!cctrue (11)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel3200; } m68k_incpc ((uae_s32)src + 2); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}endlabel3200: ; return 12 * CYCLE_UNIT / 2; } /* 24 (6/0) */ /* Bcc.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_6c00_11)(uae_u32 opcode) { {{ uae_s16 src = regs.irc; if (!cctrue (12)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel3201; } m68k_incpc ((uae_s32)src + 2); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}endlabel3201: ; return 12 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* BccQ.B # */ uae_u32 REGPARAM2 CPUFUNC(op_6c01_11)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (12)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel3202; } m68k_incpc ((uae_s32)src + 2); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); }}endlabel3202: ; return 8 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_6cff_11)(uae_u32 opcode) { { if (cctrue (12)) { exception3i (opcode, m68k_getpc () + 1); goto endlabel3203; } m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); goto endlabel3203; { uae_s32 src; src = get_word_prefetch (2) << 16; src |= regs.irc; if (!cctrue (12)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel3203; } m68k_incpc ((uae_s32)src + 2); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}endlabel3203: ; return 12 * CYCLE_UNIT / 2; } /* 24 (6/0) */ /* Bcc.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_6d00_11)(uae_u32 opcode) { {{ uae_s16 src = regs.irc; if (!cctrue (13)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel3204; } m68k_incpc ((uae_s32)src + 2); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}endlabel3204: ; return 12 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* BccQ.B # */ uae_u32 REGPARAM2 CPUFUNC(op_6d01_11)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (13)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel3205; } m68k_incpc ((uae_s32)src + 2); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); }}endlabel3205: ; return 8 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_6dff_11)(uae_u32 opcode) { { if (cctrue (13)) { exception3i (opcode, m68k_getpc () + 1); goto endlabel3206; } m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); goto endlabel3206; { uae_s32 src; src = get_word_prefetch (2) << 16; src |= regs.irc; if (!cctrue (13)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel3206; } m68k_incpc ((uae_s32)src + 2); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}endlabel3206: ; return 12 * CYCLE_UNIT / 2; } /* 24 (6/0) */ /* Bcc.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_6e00_11)(uae_u32 opcode) { {{ uae_s16 src = regs.irc; if (!cctrue (14)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel3207; } m68k_incpc ((uae_s32)src + 2); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}endlabel3207: ; return 12 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* BccQ.B # */ uae_u32 REGPARAM2 CPUFUNC(op_6e01_11)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (14)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel3208; } m68k_incpc ((uae_s32)src + 2); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); }}endlabel3208: ; return 8 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_6eff_11)(uae_u32 opcode) { { if (cctrue (14)) { exception3i (opcode, m68k_getpc () + 1); goto endlabel3209; } m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); goto endlabel3209; { uae_s32 src; src = get_word_prefetch (2) << 16; src |= regs.irc; if (!cctrue (14)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel3209; } m68k_incpc ((uae_s32)src + 2); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}endlabel3209: ; return 12 * CYCLE_UNIT / 2; } /* 24 (6/0) */ /* Bcc.W #.W */ uae_u32 REGPARAM2 CPUFUNC(op_6f00_11)(uae_u32 opcode) { {{ uae_s16 src = regs.irc; if (!cctrue (15)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel3210; } m68k_incpc ((uae_s32)src + 2); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}endlabel3210: ; return 12 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* BccQ.B # */ uae_u32 REGPARAM2 CPUFUNC(op_6f01_11)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); {{ uae_u32 src = srcreg; if (!cctrue (15)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel3211; } m68k_incpc ((uae_s32)src + 2); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); }}endlabel3211: ; return 8 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* Bcc.L #.L */ uae_u32 REGPARAM2 CPUFUNC(op_6fff_11)(uae_u32 opcode) { { if (cctrue (15)) { exception3i (opcode, m68k_getpc () + 1); goto endlabel3212; } m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); goto endlabel3212; { uae_s32 src; src = get_word_prefetch (2) << 16; src |= regs.irc; if (!cctrue (15)) goto didnt_jump; if (src & 1) { exception3i (opcode, m68k_getpc () + 2 + (uae_s32)src); goto endlabel3212; } m68k_incpc ((uae_s32)src + 2); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); return 10 * CYCLE_UNIT / 2; didnt_jump:; m68k_incpc (4); get_word_prefetch (0); regs.ir = regs.irc; get_word_prefetch (2); }}endlabel3212: ; return 12 * CYCLE_UNIT / 2; } /* 24 (6/0) */ /* MOVEQ.L #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_7000_11)(uae_u32 opcode) { uae_u32 srcreg = (uae_s32)(uae_s8)(opcode & 255); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_u32 src = srcreg; { CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); m68k_dreg (regs, dstreg) = (src); m68k_incpc (2); regs.ir = regs.irc; get_word_prefetch (2); }}}return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* OR.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8000_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (4); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* OR.B (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8010_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (4); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* OR.B (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8018_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (4); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* OR.B -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8020_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) = srca; { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (4); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* OR.B (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8028_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* OR.B (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8030_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpc (4); return 14 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* OR.B (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8038_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* OR.B (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8039_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_prefetch (4); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (8); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* OR.B (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_803a_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* OR.B (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_803b_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_word_prefetch (4)); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpc (4); return 14 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* OR.B #.B,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_803c_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = (uae_u8)get_word_prefetch (4); { uae_s8 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* OR.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8040_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (4); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* OR.W (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8050_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel3226; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (4); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}} m68k_incpc (2); endlabel3226: ; return 8 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* OR.W (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8058_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel3227; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (4); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}} m68k_incpc (2); endlabel3227: ; return 8 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* OR.W -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8060_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; if (srca & 1) { exception3 (opcode, srca); goto endlabel3228; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (4); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}} m68k_incpc (2); endlabel3228: ; return 10 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* OR.W (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8068_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3229; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}} m68k_incpc (4); endlabel3229: ; return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* OR.W (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8070_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel3230; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}} m68k_incpc (4); endlabel3230: ; return 14 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* OR.W (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8078_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3231; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}} m68k_incpc (4); endlabel3231: ; return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* OR.W (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8079_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3232; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (8); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}} m68k_incpc (6); endlabel3232: ; return 16 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* OR.W (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_807a_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3233; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}} m68k_incpc (4); endlabel3233: ; return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* OR.W (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_807b_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_word_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel3234; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}} m68k_incpc (4); endlabel3234: ; return 14 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* OR.W #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_807c_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_prefetch (4); { uae_s16 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* OR.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8080_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (4); m68k_dreg (regs, dstreg) = (src); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* OR.L (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8090_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel3237; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (4); m68k_dreg (regs, dstreg) = (src); }}}}} m68k_incpc (2); endlabel3237: ; return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* OR.L (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8098_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel3238; } {{ uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) += 4; { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (4); m68k_dreg (regs, dstreg) = (src); }}}}} m68k_incpc (2); endlabel3238: ; return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* OR.L -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80a0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; if (srca & 1) { exception3 (opcode, srca); goto endlabel3239; } {{ uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (4); m68k_dreg (regs, dstreg) = (src); }}}}} m68k_incpc (2); endlabel3239: ; return 14 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* OR.L (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80a8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3240; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); m68k_dreg (regs, dstreg) = (src); }}}}} m68k_incpc (4); endlabel3240: ; return 16 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* OR.L (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80b0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel3241; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); m68k_dreg (regs, dstreg) = (src); }}}}} m68k_incpc (4); endlabel3241: ; return 18 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* OR.L (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80b8_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3242; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); m68k_dreg (regs, dstreg) = (src); }}}}} m68k_incpc (4); endlabel3242: ; return 16 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* OR.L (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80b9_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3243; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (8); m68k_dreg (regs, dstreg) = (src); }}}}} m68k_incpc (6); endlabel3243: ; return 20 * CYCLE_UNIT / 2; } /* 20 (5/0) */ /* OR.L (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80ba_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3244; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); m68k_dreg (regs, dstreg) = (src); }}}}} m68k_incpc (4); endlabel3244: ; return 16 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* OR.L (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80bb_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_word_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel3245; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); m68k_dreg (regs, dstreg) = (src); }}}}} m68k_incpc (4); endlabel3245: ; return 18 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* OR.L #.L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80bc_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_long_prefetch (4); { uae_s32 dst = m68k_dreg (regs, dstreg); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (8); m68k_dreg (regs, dstreg) = (src); }}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* DIVU.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80c0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { m68k_incpc (2); Exception (5); goto endlabel3247; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; regs.ir = regs.irc; get_word_prefetch (4); if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (2); } }}}endlabel3247: ; return 110 * CYCLE_UNIT / 2; } /* 4+ (1/0) */ /* DIVU.W (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80d0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel3248; } {{ uae_s16 src = get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { m68k_incpc (2); Exception (5); goto endlabel3248; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; regs.ir = regs.irc; get_word_prefetch (4); if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (2); } }}}}}endlabel3248: ; return 114 * CYCLE_UNIT / 2; } /* 8+ (2/0) */ /* DIVU.W (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80d8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel3249; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { m68k_incpc (2); Exception (5); goto endlabel3249; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; regs.ir = regs.irc; get_word_prefetch (4); if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (2); } }}}}}endlabel3249: ; return 114 * CYCLE_UNIT / 2; } /* 8+ (2/0) */ /* DIVU.W -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80e0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; if (srca & 1) { exception3 (opcode, srca); goto endlabel3250; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { m68k_incpc (2); Exception (5); goto endlabel3250; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; regs.ir = regs.irc; get_word_prefetch (4); if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (2); } }}}}}endlabel3250: ; return 116 * CYCLE_UNIT / 2; } /* 8+ (2/0) */ /* DIVU.W (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80e8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3251; } {{ uae_s16 src = get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { m68k_incpc (4); Exception (5); goto endlabel3251; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; regs.ir = regs.irc; get_word_prefetch (6); if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (4); } }}}}}endlabel3251: ; return 118 * CYCLE_UNIT / 2; } /* 12+ (3/0) */ /* DIVU.W (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80f0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel3252; } {{ uae_s16 src = get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { m68k_incpc (4); Exception (5); goto endlabel3252; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; regs.ir = regs.irc; get_word_prefetch (6); if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (4); } }}}}}endlabel3252: ; return 120 * CYCLE_UNIT / 2; } /* 12+ (3/0) */ /* DIVU.W (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80f8_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3253; } {{ uae_s16 src = get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { m68k_incpc (4); Exception (5); goto endlabel3253; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; regs.ir = regs.irc; get_word_prefetch (6); if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (4); } }}}}}endlabel3253: ; return 118 * CYCLE_UNIT / 2; } /* 12+ (3/0) */ /* DIVU.W (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80f9_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3254; } {{ uae_s16 src = get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { m68k_incpc (6); Exception (5); goto endlabel3254; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; regs.ir = regs.irc; get_word_prefetch (8); if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (6); } }}}}}endlabel3254: ; return 122 * CYCLE_UNIT / 2; } /* 16+ (4/0) */ /* DIVU.W (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80fa_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3255; } {{ uae_s16 src = get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { m68k_incpc (4); Exception (5); goto endlabel3255; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; regs.ir = regs.irc; get_word_prefetch (6); if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (4); } }}}}}endlabel3255: ; return 118 * CYCLE_UNIT / 2; } /* 12+ (3/0) */ /* DIVU.W (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80fb_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_word_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel3256; } {{ uae_s16 src = get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { m68k_incpc (4); Exception (5); goto endlabel3256; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; regs.ir = regs.irc; get_word_prefetch (6); if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (4); } }}}}}endlabel3256: ; return 120 * CYCLE_UNIT / 2; } /* 12+ (3/0) */ /* DIVU.W #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_80fc_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_prefetch (4); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { m68k_incpc (4); Exception (5); goto endlabel3257; } else { uae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src; uae_u32 rem = (uae_u32)dst % (uae_u32)(uae_u16)src; regs.ir = regs.irc; get_word_prefetch (6); if (newv > 0xffff) { SET_VFLG (1); SET_NFLG (1); } else { CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (4); } }}}endlabel3257: ; return 114 * CYCLE_UNIT / 2; } /* 8+ (2/0) */ /* SBCD.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_8100_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u16 newv_lo = (dst & 0xF) - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = (dst & 0xF0) - (src & 0xF0); uae_u16 newv, tmp_newv; int bcd = 0; newv = tmp_newv = newv_hi + newv_lo; if (newv_lo & 0xF0) { newv -= 6; bcd = 6; }; if ((((dst & 0xFF) - (src & 0xFF) - (GET_XFLG () ? 1 : 0)) & 0x100) > 0xFF) { newv -= 0x60; } SET_CFLG ((((dst & 0xFF) - (src & 0xFF) - bcd - (GET_XFLG () ? 1 : 0)) & 0x300) > 0xFF); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); SET_VFLG ((tmp_newv & 0x80) != 0 && (newv & 0x80) == 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* SBCD.B -(An),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_8108_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; get_word_prefetch (4); { uae_u16 newv_lo = (dst & 0xF) - (src & 0xF) - (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = (dst & 0xF0) - (src & 0xF0); uae_u16 newv, tmp_newv; int bcd = 0; newv = tmp_newv = newv_hi + newv_lo; if (newv_lo & 0xF0) { newv -= 6; bcd = 6; }; if ((((dst & 0xFF) - (src & 0xFF) - (GET_XFLG () ? 1 : 0)) & 0x100) > 0xFF) { newv -= 0x60; } SET_CFLG ((((dst & 0xFF) - (src & 0xFF) - bcd - (GET_XFLG () ? 1 : 0)) & 0x300) > 0xFF); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); SET_VFLG ((tmp_newv & 0x80) != 0 && (newv & 0x80) == 0); put_byte (dsta, newv); }}}}}} m68k_incpc (2); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* OR.B Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_8110_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (4); put_byte (dsta, src); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* OR.B Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_8118_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (4); put_byte (dsta, src); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* OR.B Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_8120_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) = dsta; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (4); put_byte (dsta, src); }}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* OR.B Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_8128_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 dst = get_byte (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); put_byte (dsta, src); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* OR.B Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_8130_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (4)); { uae_s8 dst = get_byte (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); put_byte (dsta, src); }}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* OR.B Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_8138_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 dst = get_byte (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); put_byte (dsta, src); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* OR.B Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_8139_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_prefetch (4); { uae_s8 dst = get_byte (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (8); put_byte (dsta, src); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* OR.W Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_8150_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3267; } {{ uae_s16 dst = get_word (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (4); put_word (dsta, src); }}}}} m68k_incpc (2); endlabel3267: ; return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* OR.W Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_8158_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3268; } {{ uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) += 2; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (4); put_word (dsta, src); }}}}} m68k_incpc (2); endlabel3268: ; return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* OR.W Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_8160_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3269; } {{ uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) = dsta; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (4); put_word (dsta, src); }}}}} m68k_incpc (2); endlabel3269: ; return 14 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* OR.W Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_8168_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3270; } {{ uae_s16 dst = get_word (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); put_word (dsta, src); }}}}} m68k_incpc (4); endlabel3270: ; return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* OR.W Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_8170_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (4)); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3271; } {{ uae_s16 dst = get_word (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); put_word (dsta, src); }}}}} m68k_incpc (4); endlabel3271: ; return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* OR.W Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_8178_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (4); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3272; } {{ uae_s16 dst = get_word (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); put_word (dsta, src); }}}}} m68k_incpc (4); endlabel3272: ; return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* OR.W Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_8179_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_prefetch (4); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3273; } {{ uae_s16 dst = get_word (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (8); put_word (dsta, src); }}}}} m68k_incpc (6); endlabel3273: ; return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* OR.L Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_8190_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3274; } {{ uae_s32 dst = get_long (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (4); put_long (dsta, src); }}}}} m68k_incpc (2); endlabel3274: ; return 20 * CYCLE_UNIT / 2; } /* 20 (3/2) */ /* OR.L Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_8198_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3275; } {{ uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) += 4; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (4); put_long (dsta, src); }}}}} m68k_incpc (2); endlabel3275: ; return 20 * CYCLE_UNIT / 2; } /* 20 (3/2) */ /* OR.L Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_81a0_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3276; } {{ uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) = dsta; src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (4); put_long (dsta, src); }}}}} m68k_incpc (2); endlabel3276: ; return 22 * CYCLE_UNIT / 2; } /* 20 (3/2) */ /* OR.L Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_81a8_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3277; } {{ uae_s32 dst = get_long (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); put_long (dsta, src); }}}}} m68k_incpc (4); endlabel3277: ; return 24 * CYCLE_UNIT / 2; } /* 24 (4/2) */ /* OR.L Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_81b0_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (4)); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3278; } {{ uae_s32 dst = get_long (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); put_long (dsta, src); }}}}} m68k_incpc (4); endlabel3278: ; return 26 * CYCLE_UNIT / 2; } /* 24 (4/2) */ /* OR.L Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_81b8_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (4); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3279; } {{ uae_s32 dst = get_long (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); put_long (dsta, src); }}}}} m68k_incpc (4); endlabel3279: ; return 24 * CYCLE_UNIT / 2; } /* 24 (4/2) */ /* OR.L Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_81b9_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_prefetch (4); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3280; } {{ uae_s32 dst = get_long (dsta); src |= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (8); put_long (dsta, src); }}}}} m68k_incpc (6); endlabel3280: ; return 28 * CYCLE_UNIT / 2; } /* 28 (5/2) */ /* DIVS.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_81c0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { m68k_incpc (2); Exception (5); goto endlabel3281; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; regs.ir = regs.irc; get_word_prefetch (4); if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (2); } }}}endlabel3281: ; return 142 * CYCLE_UNIT / 2; } /* 4+ (1/0) */ /* DIVS.W (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_81d0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel3282; } {{ uae_s16 src = get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { m68k_incpc (2); Exception (5); goto endlabel3282; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; regs.ir = regs.irc; get_word_prefetch (4); if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (2); } }}}}}endlabel3282: ; return 146 * CYCLE_UNIT / 2; } /* 8+ (2/0) */ /* DIVS.W (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_81d8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel3283; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { m68k_incpc (2); Exception (5); goto endlabel3283; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; regs.ir = regs.irc; get_word_prefetch (4); if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (2); } }}}}}endlabel3283: ; return 146 * CYCLE_UNIT / 2; } /* 8+ (2/0) */ /* DIVS.W -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_81e0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; if (srca & 1) { exception3 (opcode, srca); goto endlabel3284; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { m68k_incpc (2); Exception (5); goto endlabel3284; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; regs.ir = regs.irc; get_word_prefetch (4); if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (2); } }}}}}endlabel3284: ; return 148 * CYCLE_UNIT / 2; } /* 8+ (2/0) */ /* DIVS.W (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_81e8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3285; } {{ uae_s16 src = get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { m68k_incpc (4); Exception (5); goto endlabel3285; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; regs.ir = regs.irc; get_word_prefetch (6); if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (4); } }}}}}endlabel3285: ; return 150 * CYCLE_UNIT / 2; } /* 12+ (3/0) */ /* DIVS.W (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_81f0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel3286; } {{ uae_s16 src = get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { m68k_incpc (4); Exception (5); goto endlabel3286; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; regs.ir = regs.irc; get_word_prefetch (6); if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (4); } }}}}}endlabel3286: ; return 152 * CYCLE_UNIT / 2; } /* 12+ (3/0) */ /* DIVS.W (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_81f8_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3287; } {{ uae_s16 src = get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { m68k_incpc (4); Exception (5); goto endlabel3287; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; regs.ir = regs.irc; get_word_prefetch (6); if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (4); } }}}}}endlabel3287: ; return 150 * CYCLE_UNIT / 2; } /* 12+ (3/0) */ /* DIVS.W (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_81f9_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3288; } {{ uae_s16 src = get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { m68k_incpc (6); Exception (5); goto endlabel3288; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; regs.ir = regs.irc; get_word_prefetch (8); if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (6); } }}}}}endlabel3288: ; return 154 * CYCLE_UNIT / 2; } /* 16+ (4/0) */ /* DIVS.W (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_81fa_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3289; } {{ uae_s16 src = get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { m68k_incpc (4); Exception (5); goto endlabel3289; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; regs.ir = regs.irc; get_word_prefetch (6); if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (4); } }}}}}endlabel3289: ; return 150 * CYCLE_UNIT / 2; } /* 12+ (3/0) */ /* DIVS.W (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_81fb_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_word_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel3290; } {{ uae_s16 src = get_word (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { m68k_incpc (4); Exception (5); goto endlabel3290; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; regs.ir = regs.irc; get_word_prefetch (6); if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (4); } }}}}}endlabel3290: ; return 152 * CYCLE_UNIT / 2; } /* 12+ (3/0) */ /* DIVS.W #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_81fc_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_prefetch (4); { uae_s32 dst = m68k_dreg (regs, dstreg); CLEAR_CZNV (); if (src == 0) { m68k_incpc (4); Exception (5); goto endlabel3291; } else { uae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src; uae_u16 rem = (uae_s32)dst % (uae_s32)(uae_s16)src; regs.ir = regs.irc; get_word_prefetch (6); if ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { SET_VFLG (1); SET_NFLG (1); } else { if (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(newv)) == 0); SET_NFLG (((uae_s16)(newv)) < 0); newv = (newv & 0xffff) | ((uae_u32)rem << 16); m68k_dreg (regs, dstreg) = (newv); } m68k_incpc (4); } }}}endlabel3291: ; return 146 * CYCLE_UNIT / 2; } /* 8+ (2/0) */ /* SUB.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9000_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* SUB.B (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9010_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* SUB.B (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9018_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* SUB.B -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9020_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) = srca; { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* SUB.B (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9028_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* SUB.B (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9030_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpc (4); return 14 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* SUB.B (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9038_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* SUB.B (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9039_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_prefetch (4); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (8); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* SUB.B (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_903a_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* SUB.B (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_903b_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_word_prefetch (4)); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpc (4); return 14 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* SUB.B #.B,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_903c_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = (uae_u8)get_word_prefetch (4); { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* SUB.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9040_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* SUB.W An,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9048_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* SUB.W (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9050_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel3305; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}} m68k_incpc (2); endlabel3305: ; return 8 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* SUB.W (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9058_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel3306; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}} m68k_incpc (2); endlabel3306: ; return 8 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* SUB.W -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9060_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; if (srca & 1) { exception3 (opcode, srca); goto endlabel3307; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}} m68k_incpc (2); endlabel3307: ; return 10 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* SUB.W (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9068_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3308; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}} m68k_incpc (4); endlabel3308: ; return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* SUB.W (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9070_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel3309; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}} m68k_incpc (4); endlabel3309: ; return 14 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* SUB.W (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9078_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3310; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}} m68k_incpc (4); endlabel3310: ; return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* SUB.W (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9079_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3311; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (8); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}} m68k_incpc (6); endlabel3311: ; return 16 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* SUB.W (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_907a_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3312; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}} m68k_incpc (4); endlabel3312: ; return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* SUB.W (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_907b_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_word_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel3313; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}} m68k_incpc (4); endlabel3313: ; return 14 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* SUB.W #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_907c_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_prefetch (4); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* SUB.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9080_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* SUB.L An,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9088_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* SUB.L (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9090_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel3317; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}}} m68k_incpc (2); endlabel3317: ; return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* SUB.L (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9098_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel3318; } {{ uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) += 4; { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}}} m68k_incpc (2); endlabel3318: ; return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* SUB.L -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_90a0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; if (srca & 1) { exception3 (opcode, srca); goto endlabel3319; } {{ uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}}} m68k_incpc (2); endlabel3319: ; return 14 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* SUB.L (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_90a8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3320; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}}} m68k_incpc (4); endlabel3320: ; return 16 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* SUB.L (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_90b0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel3321; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}}} m68k_incpc (4); endlabel3321: ; return 18 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* SUB.L (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_90b8_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3322; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}}} m68k_incpc (4); endlabel3322: ; return 16 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* SUB.L (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_90b9_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3323; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (8); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}}} m68k_incpc (6); endlabel3323: ; return 20 * CYCLE_UNIT / 2; } /* 20 (5/0) */ /* SUB.L (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_90ba_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3324; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}}} m68k_incpc (4); endlabel3324: ; return 16 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* SUB.L (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_90bb_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_word_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel3325; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}}} m68k_incpc (4); endlabel3325: ; return 18 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* SUB.L #.L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_90bc_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_long_prefetch (4); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (8); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* SUBA.W Dn,An */ uae_u32 REGPARAM2 CPUFUNC(op_90c0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* SUBA.W An,An */ uae_u32 REGPARAM2 CPUFUNC(op_90c8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* SUBA.W (An),An */ uae_u32 REGPARAM2 CPUFUNC(op_90d0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel3329; } {{ uae_s16 src = get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}}} m68k_incpc (2); endlabel3329: ; return 8 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* SUBA.W (An)+,An */ uae_u32 REGPARAM2 CPUFUNC(op_90d8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel3330; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}}} m68k_incpc (2); endlabel3330: ; return 8 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* SUBA.W -(An),An */ uae_u32 REGPARAM2 CPUFUNC(op_90e0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; if (srca & 1) { exception3 (opcode, srca); goto endlabel3331; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}}} m68k_incpc (2); endlabel3331: ; return 10 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* SUBA.W (d16,An),An */ uae_u32 REGPARAM2 CPUFUNC(op_90e8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3332; } {{ uae_s16 src = get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}}} m68k_incpc (4); endlabel3332: ; return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* SUBA.W (d8,An,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_90f0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel3333; } {{ uae_s16 src = get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}}} m68k_incpc (4); endlabel3333: ; return 14 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* SUBA.W (xxx).W,An */ uae_u32 REGPARAM2 CPUFUNC(op_90f8_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3334; } {{ uae_s16 src = get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}}} m68k_incpc (4); endlabel3334: ; return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* SUBA.W (xxx).L,An */ uae_u32 REGPARAM2 CPUFUNC(op_90f9_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3335; } {{ uae_s16 src = get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (8); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}}} m68k_incpc (6); endlabel3335: ; return 16 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* SUBA.W (d16,PC),An */ uae_u32 REGPARAM2 CPUFUNC(op_90fa_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3336; } {{ uae_s16 src = get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}}} m68k_incpc (4); endlabel3336: ; return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* SUBA.W (d8,PC,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_90fb_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_word_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel3337; } {{ uae_s16 src = get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}}} m68k_incpc (4); endlabel3337: ; return 14 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* SUBA.W #.W,An */ uae_u32 REGPARAM2 CPUFUNC(op_90fc_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_prefetch (4); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* SUBX.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9100_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 newv = dst - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* SUBX.B -(An),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_9108_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 newv = dst - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (2); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* SUB.B Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_9110_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte (dsta); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* SUB.B Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_9118_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* SUB.B Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_9120_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* SUB.B Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_9128_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 dst = get_byte (dsta); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* SUB.B Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_9130_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (4)); { uae_s8 dst = get_byte (dsta); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* SUB.B Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_9138_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 dst = get_byte (dsta); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* SUB.B Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_9139_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_prefetch (4); { uae_s8 dst = get_byte (dsta); regs.ir = regs.irc; get_word_prefetch (8); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* SUBX.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9140_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 newv = dst - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* SUBX.W -(An),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_9148_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; if (srca & 1) { exception3 (opcode, srca); goto endlabel3349; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3349; } {{ uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 newv = dst - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); put_word (dsta, newv); }}}}}}}}} m68k_incpc (2); endlabel3349: ; return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* SUB.W Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_9150_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3350; } {{ uae_s16 dst = get_word (dsta); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}}} m68k_incpc (2); endlabel3350: ; return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* SUB.W Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_9158_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3351; } {{ uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) += 2; regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}}} m68k_incpc (2); endlabel3351: ; return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* SUB.W Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_9160_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3352; } {{ uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}}} m68k_incpc (2); endlabel3352: ; return 14 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* SUB.W Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_9168_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3353; } {{ uae_s16 dst = get_word (dsta); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}}} m68k_incpc (4); endlabel3353: ; return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* SUB.W Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_9170_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (4)); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3354; } {{ uae_s16 dst = get_word (dsta); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}}} m68k_incpc (4); endlabel3354: ; return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* SUB.W Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_9178_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (4); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3355; } {{ uae_s16 dst = get_word (dsta); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}}} m68k_incpc (4); endlabel3355: ; return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* SUB.W Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_9179_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_prefetch (4); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3356; } {{ uae_s16 dst = get_word (dsta); regs.ir = regs.irc; get_word_prefetch (8); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}}} m68k_incpc (6); endlabel3356: ; return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* SUBX.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_9180_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 newv = dst - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); }}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* SUBX.L -(An),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_9188_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; if (srca & 1) { exception3 (opcode, srca); goto endlabel3358; } {{ uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3358; } {{ uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 newv = dst - src - (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgo) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); put_long (dsta, newv); }}}}}}}}} m68k_incpc (2); endlabel3358: ; return 28 * CYCLE_UNIT / 2; } /* 28 (5/2) */ /* SUB.L Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_9190_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3359; } {{ uae_s32 dst = get_long (dsta); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}}} m68k_incpc (2); endlabel3359: ; return 20 * CYCLE_UNIT / 2; } /* 20 (3/2) */ /* SUB.L Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_9198_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3360; } {{ uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) += 4; regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}}} m68k_incpc (2); endlabel3360: ; return 20 * CYCLE_UNIT / 2; } /* 20 (3/2) */ /* SUB.L Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_91a0_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3361; } {{ uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}}} m68k_incpc (2); endlabel3361: ; return 22 * CYCLE_UNIT / 2; } /* 20 (3/2) */ /* SUB.L Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_91a8_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3362; } {{ uae_s32 dst = get_long (dsta); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}}} m68k_incpc (4); endlabel3362: ; return 24 * CYCLE_UNIT / 2; } /* 24 (4/2) */ /* SUB.L Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_91b0_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (4)); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3363; } {{ uae_s32 dst = get_long (dsta); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}}} m68k_incpc (4); endlabel3363: ; return 26 * CYCLE_UNIT / 2; } /* 24 (4/2) */ /* SUB.L Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_91b8_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (4); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3364; } {{ uae_s32 dst = get_long (dsta); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}}} m68k_incpc (4); endlabel3364: ; return 24 * CYCLE_UNIT / 2; } /* 24 (4/2) */ /* SUB.L Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_91b9_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_prefetch (4); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3365; } {{ uae_s32 dst = get_long (dsta); regs.ir = regs.irc; get_word_prefetch (8); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgo) & (flgn ^ flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}}} m68k_incpc (6); endlabel3365: ; return 28 * CYCLE_UNIT / 2; } /* 28 (5/2) */ /* SUBA.L Dn,An */ uae_u32 REGPARAM2 CPUFUNC(op_91c0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* SUBA.L An,An */ uae_u32 REGPARAM2 CPUFUNC(op_91c8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* SUBA.L (An),An */ uae_u32 REGPARAM2 CPUFUNC(op_91d0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel3368; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}}} m68k_incpc (2); endlabel3368: ; return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* SUBA.L (An)+,An */ uae_u32 REGPARAM2 CPUFUNC(op_91d8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel3369; } {{ uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) += 4; { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}}} m68k_incpc (2); endlabel3369: ; return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* SUBA.L -(An),An */ uae_u32 REGPARAM2 CPUFUNC(op_91e0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; if (srca & 1) { exception3 (opcode, srca); goto endlabel3370; } {{ uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}}} m68k_incpc (2); endlabel3370: ; return 14 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* SUBA.L (d16,An),An */ uae_u32 REGPARAM2 CPUFUNC(op_91e8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3371; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}}} m68k_incpc (4); endlabel3371: ; return 16 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* SUBA.L (d8,An,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_91f0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel3372; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}}} m68k_incpc (4); endlabel3372: ; return 18 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* SUBA.L (xxx).W,An */ uae_u32 REGPARAM2 CPUFUNC(op_91f8_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3373; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}}} m68k_incpc (4); endlabel3373: ; return 16 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* SUBA.L (xxx).L,An */ uae_u32 REGPARAM2 CPUFUNC(op_91f9_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3374; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (8); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}}} m68k_incpc (6); endlabel3374: ; return 20 * CYCLE_UNIT / 2; } /* 20 (5/0) */ /* SUBA.L (d16,PC),An */ uae_u32 REGPARAM2 CPUFUNC(op_91fa_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3375; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}}} m68k_incpc (4); endlabel3375: ; return 16 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* SUBA.L (d8,PC,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_91fb_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_word_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel3376; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}}}} m68k_incpc (4); endlabel3376: ; return 18 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* SUBA.L #.L,An */ uae_u32 REGPARAM2 CPUFUNC(op_91fc_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_long_prefetch (4); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (8); { uae_u32 newv = dst - src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* CMP.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b000_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* CMP.B (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b010_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* CMP.B (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b018_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* CMP.B -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b020_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) = srca; { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* CMP.B (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b028_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* CMP.B (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b030_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (4); return 14 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* CMP.B (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b038_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* CMP.B (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b039_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_prefetch (4); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (8); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* CMP.B (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b03a_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* CMP.B (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b03b_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_word_prefetch (4)); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}} m68k_incpc (4); return 14 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* CMP.B #.B,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b03c_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = (uae_u8)get_word_prefetch (4); { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* CMP.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b040_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* CMP.W An,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b048_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* CMP.W (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b050_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel3391; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (2); endlabel3391: ; return 8 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* CMP.W (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b058_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel3392; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (2); endlabel3392: ; return 8 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* CMP.W -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b060_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; if (srca & 1) { exception3 (opcode, srca); goto endlabel3393; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (2); endlabel3393: ; return 10 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* CMP.W (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b068_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3394; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (4); endlabel3394: ; return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* CMP.W (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b070_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel3395; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (4); endlabel3395: ; return 14 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* CMP.W (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b078_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3396; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (4); endlabel3396: ; return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* CMP.W (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b079_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3397; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (8); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (6); endlabel3397: ; return 16 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* CMP.W (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b07a_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3398; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (4); endlabel3398: ; return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* CMP.W (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b07b_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_word_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel3399; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (4); endlabel3399: ; return 14 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* CMP.W #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b07c_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_prefetch (4); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* CMP.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b080_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* CMP.L An,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b088_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ #endif #ifdef PART_7 /* CMP.L (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b090_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel3403; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (2); endlabel3403: ; return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* CMP.L (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b098_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel3404; } {{ uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) += 4; { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (2); endlabel3404: ; return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* CMP.L -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b0a0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; if (srca & 1) { exception3 (opcode, srca); goto endlabel3405; } {{ uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (2); endlabel3405: ; return 14 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* CMP.L (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b0a8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3406; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (4); endlabel3406: ; return 16 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* CMP.L (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b0b0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel3407; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (4); endlabel3407: ; return 18 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* CMP.L (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b0b8_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3408; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (4); endlabel3408: ; return 16 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* CMP.L (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b0b9_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3409; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (8); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (6); endlabel3409: ; return 20 * CYCLE_UNIT / 2; } /* 20 (5/0) */ /* CMP.L (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b0ba_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3410; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (4); endlabel3410: ; return 16 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* CMP.L (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b0bb_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_word_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel3411; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (4); endlabel3411: ; return 18 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* CMP.L #.L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b0bc_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_long_prefetch (4); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (8); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* CMPA.W Dn,An */ uae_u32 REGPARAM2 CPUFUNC(op_b0c0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* CMPA.W An,An */ uae_u32 REGPARAM2 CPUFUNC(op_b0c8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* CMPA.W (An),An */ uae_u32 REGPARAM2 CPUFUNC(op_b0d0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel3415; } {{ uae_s16 src = get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (2); endlabel3415: ; return 8 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* CMPA.W (An)+,An */ uae_u32 REGPARAM2 CPUFUNC(op_b0d8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel3416; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (2); endlabel3416: ; return 8 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* CMPA.W -(An),An */ uae_u32 REGPARAM2 CPUFUNC(op_b0e0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; if (srca & 1) { exception3 (opcode, srca); goto endlabel3417; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (2); endlabel3417: ; return 10 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* CMPA.W (d16,An),An */ uae_u32 REGPARAM2 CPUFUNC(op_b0e8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3418; } {{ uae_s16 src = get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (4); endlabel3418: ; return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* CMPA.W (d8,An,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_b0f0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel3419; } {{ uae_s16 src = get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (4); endlabel3419: ; return 14 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* CMPA.W (xxx).W,An */ uae_u32 REGPARAM2 CPUFUNC(op_b0f8_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3420; } {{ uae_s16 src = get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (4); endlabel3420: ; return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* CMPA.W (xxx).L,An */ uae_u32 REGPARAM2 CPUFUNC(op_b0f9_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3421; } {{ uae_s16 src = get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (8); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (6); endlabel3421: ; return 16 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* CMPA.W (d16,PC),An */ uae_u32 REGPARAM2 CPUFUNC(op_b0fa_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3422; } {{ uae_s16 src = get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (4); endlabel3422: ; return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* CMPA.W (d8,PC,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_b0fb_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_word_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel3423; } {{ uae_s16 src = get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (4); endlabel3423: ; return 14 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* CMPA.W #.W,An */ uae_u32 REGPARAM2 CPUFUNC(op_b0fc_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_prefetch (4); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* EOR.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b100_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (4); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* CMPM.B (An)+,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_b108_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s8)(dst)) - ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u8)(src)) > ((uae_u8)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* EOR.B Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_b110_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (4); put_byte (dsta, src); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* EOR.B Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_b118_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (4); put_byte (dsta, src); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* EOR.B Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_b120_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) = dsta; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (4); put_byte (dsta, src); }}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* EOR.B Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_b128_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 dst = get_byte (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); put_byte (dsta, src); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* EOR.B Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_b130_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (4)); { uae_s8 dst = get_byte (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); put_byte (dsta, src); }}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* EOR.B Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_b138_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 dst = get_byte (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); put_byte (dsta, src); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* EOR.B Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_b139_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_prefetch (4); { uae_s8 dst = get_byte (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (8); put_byte (dsta, src); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* EOR.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b140_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (4); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* CMPM.W (An)+,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_b148_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel3435; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) += 2; { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3435; } {{ uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) += 2; regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s16)(dst)) - ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u16)(src)) > ((uae_u16)(dst))); SET_NFLG (flgn != 0); }}}}}}}}}} m68k_incpc (2); endlabel3435: ; return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* EOR.W Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_b150_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3436; } {{ uae_s16 dst = get_word (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (4); put_word (dsta, src); }}}}} m68k_incpc (2); endlabel3436: ; return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* EOR.W Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_b158_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3437; } {{ uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) += 2; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (4); put_word (dsta, src); }}}}} m68k_incpc (2); endlabel3437: ; return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* EOR.W Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_b160_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3438; } {{ uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) = dsta; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (4); put_word (dsta, src); }}}}} m68k_incpc (2); endlabel3438: ; return 14 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* EOR.W Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_b168_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3439; } {{ uae_s16 dst = get_word (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); put_word (dsta, src); }}}}} m68k_incpc (4); endlabel3439: ; return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* EOR.W Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_b170_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (4)); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3440; } {{ uae_s16 dst = get_word (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); put_word (dsta, src); }}}}} m68k_incpc (4); endlabel3440: ; return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* EOR.W Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_b178_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (4); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3441; } {{ uae_s16 dst = get_word (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); put_word (dsta, src); }}}}} m68k_incpc (4); endlabel3441: ; return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* EOR.W Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_b179_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_prefetch (4); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3442; } {{ uae_s16 dst = get_word (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (8); put_word (dsta, src); }}}}} m68k_incpc (6); endlabel3442: ; return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* EOR.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_b180_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (4); m68k_dreg (regs, dstreg) = (src); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* CMPM.L (An)+,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_b188_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel3444; } {{ uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) += 4; { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3444; } {{ uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) += 4; regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}}}} m68k_incpc (2); endlabel3444: ; return 20 * CYCLE_UNIT / 2; } /* 20 (5/0) */ /* EOR.L Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_b190_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3445; } {{ uae_s32 dst = get_long (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (4); put_long (dsta, src); }}}}} m68k_incpc (2); endlabel3445: ; return 20 * CYCLE_UNIT / 2; } /* 20 (3/2) */ /* EOR.L Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_b198_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3446; } {{ uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) += 4; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (4); put_long (dsta, src); }}}}} m68k_incpc (2); endlabel3446: ; return 20 * CYCLE_UNIT / 2; } /* 20 (3/2) */ /* EOR.L Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_b1a0_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3447; } {{ uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) = dsta; src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (4); put_long (dsta, src); }}}}} m68k_incpc (2); endlabel3447: ; return 22 * CYCLE_UNIT / 2; } /* 20 (3/2) */ /* EOR.L Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_b1a8_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3448; } {{ uae_s32 dst = get_long (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); put_long (dsta, src); }}}}} m68k_incpc (4); endlabel3448: ; return 24 * CYCLE_UNIT / 2; } /* 24 (4/2) */ /* EOR.L Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_b1b0_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (4)); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3449; } {{ uae_s32 dst = get_long (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); put_long (dsta, src); }}}}} m68k_incpc (4); endlabel3449: ; return 26 * CYCLE_UNIT / 2; } /* 24 (4/2) */ /* EOR.L Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_b1b8_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (4); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3450; } {{ uae_s32 dst = get_long (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); put_long (dsta, src); }}}}} m68k_incpc (4); endlabel3450: ; return 24 * CYCLE_UNIT / 2; } /* 24 (4/2) */ /* EOR.L Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_b1b9_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_prefetch (4); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3451; } {{ uae_s32 dst = get_long (dsta); src ^= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (8); put_long (dsta, src); }}}}} m68k_incpc (6); endlabel3451: ; return 28 * CYCLE_UNIT / 2; } /* 28 (5/2) */ /* CMPA.L Dn,An */ uae_u32 REGPARAM2 CPUFUNC(op_b1c0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* CMPA.L An,An */ uae_u32 REGPARAM2 CPUFUNC(op_b1c8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* CMPA.L (An),An */ uae_u32 REGPARAM2 CPUFUNC(op_b1d0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel3454; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (2); endlabel3454: ; return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* CMPA.L (An)+,An */ uae_u32 REGPARAM2 CPUFUNC(op_b1d8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel3455; } {{ uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) += 4; { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (2); endlabel3455: ; return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* CMPA.L -(An),An */ uae_u32 REGPARAM2 CPUFUNC(op_b1e0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; if (srca & 1) { exception3 (opcode, srca); goto endlabel3456; } {{ uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (2); endlabel3456: ; return 14 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* CMPA.L (d16,An),An */ uae_u32 REGPARAM2 CPUFUNC(op_b1e8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3457; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (4); endlabel3457: ; return 16 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* CMPA.L (d8,An,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_b1f0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel3458; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (4); endlabel3458: ; return 18 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* CMPA.L (xxx).W,An */ uae_u32 REGPARAM2 CPUFUNC(op_b1f8_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3459; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (4); endlabel3459: ; return 16 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* CMPA.L (xxx).L,An */ uae_u32 REGPARAM2 CPUFUNC(op_b1f9_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3460; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (8); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (6); endlabel3460: ; return 20 * CYCLE_UNIT / 2; } /* 20 (5/0) */ /* CMPA.L (d16,PC),An */ uae_u32 REGPARAM2 CPUFUNC(op_b1fa_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3461; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (4); endlabel3461: ; return 16 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* CMPA.L (d8,PC,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_b1fb_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_word_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel3462; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}}}} m68k_incpc (4); endlabel3462: ; return 18 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* CMPA.L #.L,An */ uae_u32 REGPARAM2 CPUFUNC(op_b1fc_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_long_prefetch (4); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (8); {{uae_u32 newv = ((uae_s32)(dst)) - ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs != flgo) && (flgn != flgo)); SET_CFLG (((uae_u32)(src)) > ((uae_u32)(dst))); SET_NFLG (flgn != 0); }}}}}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* AND.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c000_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (4); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* AND.B (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c010_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (4); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* AND.B (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c018_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (4); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* AND.B -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c020_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) = srca; { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (4); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* AND.B (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c028_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* AND.B (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c030_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpc (4); return 14 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* AND.B (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c038_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* AND.B (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c039_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_prefetch (4); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (8); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* AND.B (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c03a_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* AND.B (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c03b_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_word_prefetch (4)); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}}} m68k_incpc (4); return 14 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* AND.B #.B,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c03c_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = (uae_u8)get_word_prefetch (4); { uae_s8 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((src) & 0xff); }}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* AND.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c040_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (4); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* AND.W (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c050_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel3476; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (4); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}} m68k_incpc (2); endlabel3476: ; return 8 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* AND.W (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c058_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel3477; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (4); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}} m68k_incpc (2); endlabel3477: ; return 8 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* AND.W -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c060_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; if (srca & 1) { exception3 (opcode, srca); goto endlabel3478; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (4); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}} m68k_incpc (2); endlabel3478: ; return 10 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* AND.W (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c068_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3479; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}} m68k_incpc (4); endlabel3479: ; return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* AND.W (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c070_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel3480; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}} m68k_incpc (4); endlabel3480: ; return 14 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* AND.W (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c078_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3481; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}} m68k_incpc (4); endlabel3481: ; return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* AND.W (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c079_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3482; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (8); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}} m68k_incpc (6); endlabel3482: ; return 16 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* AND.W (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c07a_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3483; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}} m68k_incpc (4); endlabel3483: ; return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* AND.W (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c07b_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_word_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel3484; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}}}} m68k_incpc (4); endlabel3484: ; return 14 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* AND.W #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c07c_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_prefetch (4); { uae_s16 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((src) & 0xffff); }}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* AND.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c080_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (4); m68k_dreg (regs, dstreg) = (src); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* AND.L (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c090_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel3487; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (4); m68k_dreg (regs, dstreg) = (src); }}}}} m68k_incpc (2); endlabel3487: ; return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* AND.L (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c098_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel3488; } {{ uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) += 4; { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (4); m68k_dreg (regs, dstreg) = (src); }}}}} m68k_incpc (2); endlabel3488: ; return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* AND.L -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0a0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; if (srca & 1) { exception3 (opcode, srca); goto endlabel3489; } {{ uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (4); m68k_dreg (regs, dstreg) = (src); }}}}} m68k_incpc (2); endlabel3489: ; return 14 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* AND.L (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0a8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3490; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); m68k_dreg (regs, dstreg) = (src); }}}}} m68k_incpc (4); endlabel3490: ; return 16 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* AND.L (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0b0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel3491; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); m68k_dreg (regs, dstreg) = (src); }}}}} m68k_incpc (4); endlabel3491: ; return 18 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* AND.L (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0b8_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3492; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); m68k_dreg (regs, dstreg) = (src); }}}}} m68k_incpc (4); endlabel3492: ; return 16 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* AND.L (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0b9_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3493; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (8); m68k_dreg (regs, dstreg) = (src); }}}}} m68k_incpc (6); endlabel3493: ; return 20 * CYCLE_UNIT / 2; } /* 20 (5/0) */ /* AND.L (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0ba_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3494; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); m68k_dreg (regs, dstreg) = (src); }}}}} m68k_incpc (4); endlabel3494: ; return 16 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* AND.L (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0bb_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_word_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel3495; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); m68k_dreg (regs, dstreg) = (src); }}}}} m68k_incpc (4); endlabel3495: ; return 18 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* AND.L #.L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0bc_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_long_prefetch (4); { uae_s32 dst = m68k_dreg (regs, dstreg); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (8); m68k_dreg (regs, dstreg) = (src); }}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* MULU.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0c0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); m68k_incpc (2); }}}}return 58 * CYCLE_UNIT / 2; } /* 38+ (1/0) */ /* MULU.W (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0d0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel3498; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); m68k_incpc (2); }}}}}}endlabel3498: ; return 62 * CYCLE_UNIT / 2; } /* 42+ (2/0) */ /* MULU.W (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0d8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel3499; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); m68k_incpc (2); }}}}}}endlabel3499: ; return 62 * CYCLE_UNIT / 2; } /* 42+ (2/0) */ /* MULU.W -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0e0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; if (srca & 1) { exception3 (opcode, srca); goto endlabel3500; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); m68k_incpc (2); }}}}}}endlabel3500: ; return 64 * CYCLE_UNIT / 2; } /* 42+ (2/0) */ /* MULU.W (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0e8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3501; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); m68k_incpc (4); }}}}}}endlabel3501: ; return 66 * CYCLE_UNIT / 2; } /* 46+ (3/0) */ /* MULU.W (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0f0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel3502; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); m68k_incpc (4); }}}}}}endlabel3502: ; return 68 * CYCLE_UNIT / 2; } /* 46+ (3/0) */ /* MULU.W (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0f8_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3503; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); m68k_incpc (4); }}}}}}endlabel3503: ; return 66 * CYCLE_UNIT / 2; } /* 46+ (3/0) */ /* MULU.W (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0f9_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3504; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (8); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); m68k_incpc (6); }}}}}}endlabel3504: ; return 70 * CYCLE_UNIT / 2; } /* 50+ (4/0) */ /* MULU.W (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0fa_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3505; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); m68k_incpc (4); }}}}}}endlabel3505: ; return 66 * CYCLE_UNIT / 2; } /* 46+ (3/0) */ /* MULU.W (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0fb_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_word_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel3506; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); m68k_incpc (4); }}}}}}endlabel3506: ; return 68 * CYCLE_UNIT / 2; } /* 46+ (3/0) */ /* MULU.W #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c0fc_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_prefetch (4); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); { uae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); m68k_incpc (4); }}}}return 62 * CYCLE_UNIT / 2; } /* 42+ (2/0) */ /* ABCD.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c100_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u16 newv_lo = (src & 0xF) + (dst & 0xF) + (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = (src & 0xF0) + (dst & 0xF0); uae_u16 newv, tmp_newv; int cflg; newv = tmp_newv = newv_hi + newv_lo; if (newv_lo > 9) { newv += 6; } cflg = (newv & 0x3F0) > 0x90; if (cflg) newv += 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); SET_VFLG ((tmp_newv & 0x80) == 0 && (newv & 0x80) != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* ABCD.B -(An),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_c108_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; get_word_prefetch (4); { uae_u16 newv_lo = (src & 0xF) + (dst & 0xF) + (GET_XFLG () ? 1 : 0); uae_u16 newv_hi = (src & 0xF0) + (dst & 0xF0); uae_u16 newv, tmp_newv; int cflg; newv = tmp_newv = newv_hi + newv_lo; if (newv_lo > 9) { newv += 6; } cflg = (newv & 0x3F0) > 0x90; if (cflg) newv += 0x60; SET_CFLG (cflg); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); SET_VFLG ((tmp_newv & 0x80) == 0 && (newv & 0x80) != 0); put_byte (dsta, newv); }}}}}} m68k_incpc (2); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* AND.B Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_c110_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (4); put_byte (dsta, src); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* AND.B Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_c118_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (4); put_byte (dsta, src); }}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* AND.B Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_c120_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) = dsta; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (4); put_byte (dsta, src); }}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* AND.B Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_c128_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 dst = get_byte (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); put_byte (dsta, src); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* AND.B Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_c130_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (4)); { uae_s8 dst = get_byte (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); put_byte (dsta, src); }}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* AND.B Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_c138_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 dst = get_byte (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); put_byte (dsta, src); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* AND.B Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_c139_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_prefetch (4); { uae_s8 dst = get_byte (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (8); put_byte (dsta, src); }}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* EXG.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c140_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); m68k_dreg (regs, srcreg) = (dst); m68k_dreg (regs, dstreg) = (src); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* EXG.L An,An */ uae_u32 REGPARAM2 CPUFUNC(op_c148_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); m68k_areg (regs, srcreg) = (dst); m68k_areg (regs, dstreg) = (src); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* AND.W Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_c150_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3519; } {{ uae_s16 dst = get_word (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (4); put_word (dsta, src); }}}}} m68k_incpc (2); endlabel3519: ; return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* AND.W Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_c158_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3520; } {{ uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) += 2; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (4); put_word (dsta, src); }}}}} m68k_incpc (2); endlabel3520: ; return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* AND.W Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_c160_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3521; } {{ uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) = dsta; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (4); put_word (dsta, src); }}}}} m68k_incpc (2); endlabel3521: ; return 14 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* AND.W Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_c168_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3522; } {{ uae_s16 dst = get_word (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); put_word (dsta, src); }}}}} m68k_incpc (4); endlabel3522: ; return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* AND.W Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_c170_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (4)); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3523; } {{ uae_s16 dst = get_word (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); put_word (dsta, src); }}}}} m68k_incpc (4); endlabel3523: ; return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* AND.W Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_c178_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (4); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3524; } {{ uae_s16 dst = get_word (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); put_word (dsta, src); }}}}} m68k_incpc (4); endlabel3524: ; return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* AND.W Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_c179_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_prefetch (4); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3525; } {{ uae_s16 dst = get_word (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(src)) == 0); SET_NFLG (((uae_s16)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (8); put_word (dsta, src); }}}}} m68k_incpc (6); endlabel3525: ; return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* EXG.L Dn,An */ uae_u32 REGPARAM2 CPUFUNC(op_c188_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); m68k_dreg (regs, srcreg) = (dst); m68k_areg (regs, dstreg) = (src); }}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* AND.L Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_c190_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3527; } {{ uae_s32 dst = get_long (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (4); put_long (dsta, src); }}}}} m68k_incpc (2); endlabel3527: ; return 20 * CYCLE_UNIT / 2; } /* 20 (3/2) */ /* AND.L Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_c198_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3528; } {{ uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) += 4; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (4); put_long (dsta, src); }}}}} m68k_incpc (2); endlabel3528: ; return 20 * CYCLE_UNIT / 2; } /* 20 (3/2) */ /* AND.L Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_c1a0_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3529; } {{ uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) = dsta; src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (4); put_long (dsta, src); }}}}} m68k_incpc (2); endlabel3529: ; return 22 * CYCLE_UNIT / 2; } /* 20 (3/2) */ /* AND.L Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_c1a8_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3530; } {{ uae_s32 dst = get_long (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); put_long (dsta, src); }}}}} m68k_incpc (4); endlabel3530: ; return 24 * CYCLE_UNIT / 2; } /* 24 (4/2) */ /* AND.L Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_c1b0_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (4)); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3531; } {{ uae_s32 dst = get_long (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); put_long (dsta, src); }}}}} m68k_incpc (4); endlabel3531: ; return 26 * CYCLE_UNIT / 2; } /* 24 (4/2) */ /* AND.L Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_c1b8_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (4); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3532; } {{ uae_s32 dst = get_long (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (6); put_long (dsta, src); }}}}} m68k_incpc (4); endlabel3532: ; return 24 * CYCLE_UNIT / 2; } /* 24 (4/2) */ /* AND.L Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_c1b9_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_prefetch (4); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3533; } {{ uae_s32 dst = get_long (dsta); src &= dst; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(src)) == 0); SET_NFLG (((uae_s32)(src)) < 0); regs.ir = regs.irc; get_word_prefetch (8); put_long (dsta, src); }}}}} m68k_incpc (6); endlabel3533: ; return 28 * CYCLE_UNIT / 2; } /* 28 (5/2) */ /* MULS.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c1c0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); }}}} m68k_incpc (2); return 58 * CYCLE_UNIT / 2; } /* 38+ (1/0) */ /* MULS.W (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c1d0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel3535; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} m68k_incpc (2); endlabel3535: ; return 62 * CYCLE_UNIT / 2; } /* 42+ (2/0) */ /* MULS.W (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c1d8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel3536; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} m68k_incpc (2); endlabel3536: ; return 62 * CYCLE_UNIT / 2; } /* 42+ (2/0) */ /* MULS.W -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c1e0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; if (srca & 1) { exception3 (opcode, srca); goto endlabel3537; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} m68k_incpc (2); endlabel3537: ; return 64 * CYCLE_UNIT / 2; } /* 42+ (2/0) */ /* MULS.W (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c1e8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3538; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} m68k_incpc (4); endlabel3538: ; return 66 * CYCLE_UNIT / 2; } /* 46+ (3/0) */ /* MULS.W (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c1f0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel3539; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} m68k_incpc (4); endlabel3539: ; return 68 * CYCLE_UNIT / 2; } /* 46+ (3/0) */ /* MULS.W (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c1f8_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3540; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} m68k_incpc (4); endlabel3540: ; return 66 * CYCLE_UNIT / 2; } /* 46+ (3/0) */ /* MULS.W (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c1f9_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3541; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (8); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} m68k_incpc (6); endlabel3541: ; return 70 * CYCLE_UNIT / 2; } /* 50+ (4/0) */ /* MULS.W (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c1fa_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3542; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} m68k_incpc (4); endlabel3542: ; return 66 * CYCLE_UNIT / 2; } /* 46+ (3/0) */ /* MULS.W (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c1fb_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_word_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel3543; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} m68k_incpc (4); endlabel3543: ; return 68 * CYCLE_UNIT / 2; } /* 46+ (3/0) */ /* MULS.W #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_c1fc_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_prefetch (4); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); { uae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src; CLEAR_CZNV (); SET_ZFLG (((uae_s32)(newv)) == 0); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); }}}} m68k_incpc (4); return 62 * CYCLE_UNIT / 2; } /* 42+ (2/0) */ /* ADD.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d000_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* ADD.B (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d010_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* ADD.B (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d018_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) += areg_byteinc[srcreg]; { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* ADD.B -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d020_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) = srca; { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpc (2); return 10 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* ADD.B (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d028_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* ADD.B (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d030_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpc (4); return 14 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* ADD.B (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d038_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* ADD.B (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d039_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_prefetch (4); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (8); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpc (6); return 16 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* ADD.B (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d03a_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* ADD.B (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d03b_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_word_prefetch (4)); { uae_s8 src = get_byte (srca); { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}}} m68k_incpc (4); return 14 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* ADD.B #.B,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d03c_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = (uae_u8)get_word_prefetch (4); { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}}} m68k_incpc (4); return 12 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* ADD.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d040_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* ADD.W An,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d048_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* ADD.W (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d050_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel3558; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}} m68k_incpc (2); endlabel3558: ; return 8 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* ADD.W (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d058_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel3559; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}} m68k_incpc (2); endlabel3559: ; return 8 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* ADD.W -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d060_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; if (srca & 1) { exception3 (opcode, srca); goto endlabel3560; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}} m68k_incpc (2); endlabel3560: ; return 10 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* ADD.W (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d068_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3561; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}} m68k_incpc (4); endlabel3561: ; return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* ADD.W (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d070_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel3562; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}} m68k_incpc (4); endlabel3562: ; return 14 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* ADD.W (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d078_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3563; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}} m68k_incpc (4); endlabel3563: ; return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* ADD.W (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d079_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3564; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (8); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}} m68k_incpc (6); endlabel3564: ; return 16 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* ADD.W (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d07a_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3565; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}} m68k_incpc (4); endlabel3565: ; return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* ADD.W (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d07b_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_word_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel3566; } {{ uae_s16 src = get_word (srca); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}}}} m68k_incpc (4); endlabel3566: ; return 14 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* ADD.W #.W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d07c_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_prefetch (4); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* ADD.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d080_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* ADD.L An,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d088_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* ADD.L (An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d090_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel3570; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}}} m68k_incpc (2); endlabel3570: ; return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* ADD.L (An)+,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d098_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel3571; } {{ uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) += 4; { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}}} m68k_incpc (2); endlabel3571: ; return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* ADD.L -(An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d0a0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; if (srca & 1) { exception3 (opcode, srca); goto endlabel3572; } {{ uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}}} m68k_incpc (2); endlabel3572: ; return 14 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* ADD.L (d16,An),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d0a8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3573; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}}} m68k_incpc (4); endlabel3573: ; return 16 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* ADD.L (d8,An,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d0b0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel3574; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}}} m68k_incpc (4); endlabel3574: ; return 18 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* ADD.L (xxx).W,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d0b8_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3575; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}}} m68k_incpc (4); endlabel3575: ; return 16 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* ADD.L (xxx).L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d0b9_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3576; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (8); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}}} m68k_incpc (6); endlabel3576: ; return 20 * CYCLE_UNIT / 2; } /* 20 (5/0) */ /* ADD.L (d16,PC),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d0ba_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3577; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}}} m68k_incpc (4); endlabel3577: ; return 16 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* ADD.L (d8,PC,Xn),Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d0bb_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_word_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel3578; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}}}} m68k_incpc (4); endlabel3578: ; return 18 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* ADD.L #.L,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d0bc_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_long_prefetch (4); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (8); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); m68k_dreg (regs, dstreg) = (newv); }}}}}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* ADDA.W Dn,An */ uae_u32 REGPARAM2 CPUFUNC(op_d0c0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* ADDA.W An,An */ uae_u32 REGPARAM2 CPUFUNC(op_d0c8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_areg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* ADDA.W (An),An */ uae_u32 REGPARAM2 CPUFUNC(op_d0d0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel3582; } {{ uae_s16 src = get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}}} m68k_incpc (2); endlabel3582: ; return 8 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* ADDA.W (An)+,An */ uae_u32 REGPARAM2 CPUFUNC(op_d0d8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel3583; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) += 2; { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}}} m68k_incpc (2); endlabel3583: ; return 8 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* ADDA.W -(An),An */ uae_u32 REGPARAM2 CPUFUNC(op_d0e0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; if (srca & 1) { exception3 (opcode, srca); goto endlabel3584; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}}} m68k_incpc (2); endlabel3584: ; return 10 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* ADDA.W (d16,An),An */ uae_u32 REGPARAM2 CPUFUNC(op_d0e8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3585; } {{ uae_s16 src = get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}}} m68k_incpc (4); endlabel3585: ; return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* ADDA.W (d8,An,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_d0f0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel3586; } {{ uae_s16 src = get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}}} m68k_incpc (4); endlabel3586: ; return 14 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* ADDA.W (xxx).W,An */ uae_u32 REGPARAM2 CPUFUNC(op_d0f8_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3587; } {{ uae_s16 src = get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}}} m68k_incpc (4); endlabel3587: ; return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* ADDA.W (xxx).L,An */ uae_u32 REGPARAM2 CPUFUNC(op_d0f9_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3588; } {{ uae_s16 src = get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (8); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}}} m68k_incpc (6); endlabel3588: ; return 16 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* ADDA.W (d16,PC),An */ uae_u32 REGPARAM2 CPUFUNC(op_d0fa_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3589; } {{ uae_s16 src = get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}}} m68k_incpc (4); endlabel3589: ; return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* ADDA.W (d8,PC,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_d0fb_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_word_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel3590; } {{ uae_s16 src = get_word (srca); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}}} m68k_incpc (4); endlabel3590: ; return 14 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* ADDA.W #.W,An */ uae_u32 REGPARAM2 CPUFUNC(op_d0fc_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = get_word_prefetch (4); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpc (4); return 8 * CYCLE_UNIT / 2; } /* 8 (2/0) */ /* ADDX.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d100_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uae_s8 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 newv = dst + src + (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgo) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((newv) & 0xff); }}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* ADDX.B -(An),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_d108_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - areg_byteinc[srcreg]; { uae_s8 src = get_byte (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 newv = dst + src + (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgo) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s8)(newv)) == 0)); SET_NFLG (((uae_s8)(newv)) < 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (2); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* ADD.B Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_d110_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte (dsta); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* ADD.B Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_d118_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) += areg_byteinc[dstreg]; regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (2); return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* ADD.B Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_d120_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - areg_byteinc[dstreg]; { uae_s8 dst = get_byte (dsta); m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (2); return 14 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* ADD.B Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_d128_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 dst = get_byte (dsta); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* ADD.B Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_d130_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (4)); { uae_s8 dst = get_byte (dsta); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (4); return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* ADD.B Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_d138_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (4); { uae_s8 dst = get_byte (dsta); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* ADD.B Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_d139_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s8 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_prefetch (4); { uae_s8 dst = get_byte (dsta); regs.ir = regs.irc; get_word_prefetch (8); {{uae_u32 newv = ((uae_s8)(dst)) + ((uae_s8)(src)); { int flgs = ((uae_s8)(src)) < 0; int flgo = ((uae_s8)(dst)) < 0; int flgn = ((uae_s8)(newv)) < 0; SET_ZFLG (((uae_s8)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u8)(~dst)) < ((uae_u8)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_byte (dsta, newv); }}}}}}} m68k_incpc (6); return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* ADDX.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d140_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uae_s16 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 newv = dst + src + (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgo) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((newv) & 0xffff); }}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* ADDX.W -(An),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_d148_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 2; if (srca & 1) { exception3 (opcode, srca); goto endlabel3602; } {{ uae_s16 src = get_word (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3602; } {{ uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 newv = dst + src + (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgo) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s16)(newv)) == 0)); SET_NFLG (((uae_s16)(newv)) < 0); put_word (dsta, newv); }}}}}}}}} m68k_incpc (2); endlabel3602: ; return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* ADD.W Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_d150_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3603; } {{ uae_s16 dst = get_word (dsta); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}}} m68k_incpc (2); endlabel3603: ; return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* ADD.W Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_d158_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3604; } {{ uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) += 2; regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}}} m68k_incpc (2); endlabel3604: ; return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* ADD.W Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_d160_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 2; if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3605; } {{ uae_s16 dst = get_word (dsta); m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}}} m68k_incpc (2); endlabel3605: ; return 14 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* ADD.W Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_d168_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3606; } {{ uae_s16 dst = get_word (dsta); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}}} m68k_incpc (4); endlabel3606: ; return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* ADD.W Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_d170_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (4)); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3607; } {{ uae_s16 dst = get_word (dsta); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}}} m68k_incpc (4); endlabel3607: ; return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* ADD.W Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_d178_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (4); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3608; } {{ uae_s16 dst = get_word (dsta); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}}} m68k_incpc (4); endlabel3608: ; return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* ADD.W Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_d179_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s16 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_prefetch (4); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3609; } {{ uae_s16 dst = get_word (dsta); regs.ir = regs.irc; get_word_prefetch (8); {{uae_u32 newv = ((uae_s16)(dst)) + ((uae_s16)(src)); { int flgs = ((uae_s16)(src)) < 0; int flgo = ((uae_s16)(dst)) < 0; int flgn = ((uae_s16)(newv)) < 0; SET_ZFLG (((uae_s16)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u16)(~dst)) < ((uae_u16)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_word (dsta, newv); }}}}}}}} m68k_incpc (6); endlabel3609: ; return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* ADDX.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_d180_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 newv = dst + src + (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgo) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); m68k_dreg (regs, dstreg) = (newv); }}}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* ADDX.L -(An),-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_d188_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; if (srca & 1) { exception3 (opcode, srca); goto endlabel3611; } {{ uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) = srca; { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3611; } {{ uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 newv = dst + src + (GET_XFLG () ? 1 : 0); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (flgs ^ ((flgs ^ flgo) & (flgo ^ flgn))); COPY_CARRY (); SET_ZFLG (GET_ZFLG () & (((uae_s32)(newv)) == 0)); SET_NFLG (((uae_s32)(newv)) < 0); put_long (dsta, newv); }}}}}}}}} m68k_incpc (2); endlabel3611: ; return 28 * CYCLE_UNIT / 2; } /* 28 (5/2) */ /* ADD.L Dn,(An) */ uae_u32 REGPARAM2 CPUFUNC(op_d190_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3612; } {{ uae_s32 dst = get_long (dsta); regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}}} m68k_incpc (2); endlabel3612: ; return 20 * CYCLE_UNIT / 2; } /* 20 (3/2) */ /* ADD.L Dn,(An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_d198_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3613; } {{ uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) += 4; regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}}} m68k_incpc (2); endlabel3613: ; return 20 * CYCLE_UNIT / 2; } /* 20 (3/2) */ /* ADD.L Dn,-(An) */ uae_u32 REGPARAM2 CPUFUNC(op_d1a0_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = m68k_areg (regs, dstreg) - 4; if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3614; } {{ uae_s32 dst = get_long (dsta); m68k_areg (regs, dstreg) = dsta; regs.ir = regs.irc; get_word_prefetch (4); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}}} m68k_incpc (2); endlabel3614: ; return 22 * CYCLE_UNIT / 2; } /* 20 (3/2) */ /* ADD.L Dn,(d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_d1a8_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3615; } {{ uae_s32 dst = get_long (dsta); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}}} m68k_incpc (4); endlabel3615: ; return 24 * CYCLE_UNIT / 2; } /* 24 (4/2) */ /* ADD.L Dn,(d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_d1b0_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_word_prefetch (4)); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3616; } {{ uae_s32 dst = get_long (dsta); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}}} m68k_incpc (4); endlabel3616: ; return 26 * CYCLE_UNIT / 2; } /* 24 (4/2) */ /* ADD.L Dn,(xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_d1b8_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = (uae_s32)(uae_s16)get_word_prefetch (4); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3617; } {{ uae_s32 dst = get_long (dsta); regs.ir = regs.irc; get_word_prefetch (6); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}}} m68k_incpc (4); endlabel3617: ; return 24 * CYCLE_UNIT / 2; } /* 24 (4/2) */ /* ADD.L Dn,(xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_d1b9_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); {{ uae_s32 src = m68k_dreg (regs, srcreg); { uaecptr dsta = get_long_prefetch (4); if (dsta & 1) { exception3 (opcode, dsta); goto endlabel3618; } {{ uae_s32 dst = get_long (dsta); regs.ir = regs.irc; get_word_prefetch (8); {{uae_u32 newv = ((uae_s32)(dst)) + ((uae_s32)(src)); { int flgs = ((uae_s32)(src)) < 0; int flgo = ((uae_s32)(dst)) < 0; int flgn = ((uae_s32)(newv)) < 0; SET_ZFLG (((uae_s32)(newv)) == 0); SET_VFLG ((flgs ^ flgn) & (flgo ^ flgn)); SET_CFLG (((uae_u32)(~dst)) < ((uae_u32)(src))); COPY_CARRY (); SET_NFLG (flgn != 0); put_long (dsta, newv); }}}}}}}} m68k_incpc (6); endlabel3618: ; return 28 * CYCLE_UNIT / 2; } /* 28 (5/2) */ /* ADDA.L Dn,An */ uae_u32 REGPARAM2 CPUFUNC(op_d1c0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_dreg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* ADDA.L An,An */ uae_u32 REGPARAM2 CPUFUNC(op_d1c8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = m68k_areg (regs, srcreg); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* ADDA.L (An),An */ uae_u32 REGPARAM2 CPUFUNC(op_d1d0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel3621; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}}} m68k_incpc (2); endlabel3621: ; return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* ADDA.L (An)+,An */ uae_u32 REGPARAM2 CPUFUNC(op_d1d8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg); if (srca & 1) { exception3 (opcode, srca); goto endlabel3622; } {{ uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) += 4; { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}}} m68k_incpc (2); endlabel3622: ; return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* ADDA.L -(An),An */ uae_u32 REGPARAM2 CPUFUNC(op_d1e0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = m68k_areg (regs, srcreg) - 4; if (srca & 1) { exception3 (opcode, srca); goto endlabel3623; } {{ uae_s32 src = get_long (srca); m68k_areg (regs, srcreg) = srca; { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}}} m68k_incpc (2); endlabel3623: ; return 14 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* ADDA.L (d16,An),An */ uae_u32 REGPARAM2 CPUFUNC(op_d1e8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3624; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}}} m68k_incpc (4); endlabel3624: ; return 16 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* ADDA.L (d8,An,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_d1f0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel3625; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}}} m68k_incpc (4); endlabel3625: ; return 18 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* ADDA.L (xxx).W,An */ uae_u32 REGPARAM2 CPUFUNC(op_d1f8_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3626; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}}} m68k_incpc (4); endlabel3626: ; return 16 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* ADDA.L (xxx).L,An */ uae_u32 REGPARAM2 CPUFUNC(op_d1f9_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = get_long_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3627; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (8); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}}} m68k_incpc (6); endlabel3627: ; return 20 * CYCLE_UNIT / 2; } /* 20 (5/0) */ /* ADDA.L (d16,PC),An */ uae_u32 REGPARAM2 CPUFUNC(op_d1fa_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr srca = m68k_getpc () + 2; srca += (uae_s32)(uae_s16)get_word_prefetch (4); if (srca & 1) { exception3 (opcode, srca); goto endlabel3628; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}}} m68k_incpc (4); endlabel3628: ; return 16 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* ADDA.L (d8,PC,Xn),An */ uae_u32 REGPARAM2 CPUFUNC(op_d1fb_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uaecptr tmppc; uaecptr srca; tmppc = m68k_getpc () + 2; srca = get_disp_ea_000 (tmppc, get_word_prefetch (4)); if (srca & 1) { exception3 (opcode, srca); goto endlabel3629; } {{ uae_s32 src = get_long (srca); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (6); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}}}} m68k_incpc (4); endlabel3629: ; return 18 * CYCLE_UNIT / 2; } /* 16 (4/0) */ /* ADDA.L #.L,An */ uae_u32 REGPARAM2 CPUFUNC(op_d1fc_11)(uae_u32 opcode) { uae_u32 dstreg = (opcode >> 9) & 7; {{ uae_s32 src = get_long_prefetch (4); { uae_s32 dst = m68k_areg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (8); { uae_u32 newv = dst + src; m68k_areg (regs, dstreg) = (newv); }}}} m68k_incpc (6); return 12 * CYCLE_UNIT / 2; } /* 12 (3/0) */ /* ASRQ.B #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e000_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s8 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 val = (uae_u8)data; uae_u32 sign = (0x80 & val) >> 7; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 8) { val = 0xff & (uae_u32)-sign; SET_CFLG (sign); COPY_CARRY (); } else { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; val |= (0xff << (8 - cnt)) & (uae_u32)-sign; val &= 0xff; } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* LSRQ.B #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e008_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s8 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 8) { SET_CFLG ((cnt == 8) & (val >> 7)); COPY_CARRY (); val = 0; } else { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* ROXRQ.B #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e010_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s8 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { cnt--; { uae_u32 carry; uae_u32 hival = (val << 1) | GET_XFLG (); hival <<= (7 - cnt); val >>= cnt; carry = val & 1; val >>= 1; val |= hival; SET_XFLG (carry); val &= 0xff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* RORQ.B #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e018_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s8 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { uae_u32 hival; cnt &= 7; hival = val << (8 - cnt); val >>= cnt; val |= hival; val &= 0xff; SET_CFLG ((val & 0x80) >> 7); } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* ASR.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e020_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 cnt = m68k_dreg (regs, srcreg); { uae_s8 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 val = (uae_u8)data; uae_u32 sign = (0x80 & val) >> 7; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 8) { val = 0xff & (uae_u32)-sign; SET_CFLG (sign); COPY_CARRY (); } else if (cnt > 0) { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; val |= (0xff << (8 - cnt)) & (uae_u32)-sign; val &= 0xff; } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* LSR.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e028_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 cnt = m68k_dreg (regs, srcreg); { uae_s8 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 8) { SET_CFLG ((cnt == 8) & (val >> 7)); COPY_CARRY (); val = 0; } else if (cnt > 0) { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* ROXR.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e030_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 cnt = m68k_dreg (regs, srcreg); { uae_s8 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 36) cnt -= 36; if (cnt >= 18) cnt -= 18; if (cnt >= 9) cnt -= 9; if (cnt > 0) { cnt--; { uae_u32 carry; uae_u32 hival = (val << 1) | GET_XFLG (); hival <<= (7 - cnt); val >>= cnt; carry = val & 1; val >>= 1; val |= hival; SET_XFLG (carry); val &= 0xff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ #endif #ifdef PART_8 /* ROR.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e038_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 cnt = m68k_dreg (regs, srcreg); { uae_s8 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt > 0) { uae_u32 hival; cnt &= 7; hival = val << (8 - cnt); val >>= cnt; val |= hival; val &= 0xff; SET_CFLG ((val & 0x80) >> 7); } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* ASRQ.W #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e040_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s16 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 val = (uae_u16)data; uae_u32 sign = (0x8000 & val) >> 15; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 16) { val = 0xffff & (uae_u32)-sign; SET_CFLG (sign); COPY_CARRY (); } else { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; val |= (0xffff << (16 - cnt)) & (uae_u32)-sign; val &= 0xffff; } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* LSRQ.W #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e048_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s16 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 16) { SET_CFLG ((cnt == 16) & (val >> 15)); COPY_CARRY (); val = 0; } else { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* ROXRQ.W #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e050_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s16 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { cnt--; { uae_u32 carry; uae_u32 hival = (val << 1) | GET_XFLG (); hival <<= (15 - cnt); val >>= cnt; carry = val & 1; val >>= 1; val |= hival; SET_XFLG (carry); val &= 0xffff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* RORQ.W #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e058_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s16 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { uae_u32 hival; cnt &= 15; hival = val << (16 - cnt); val >>= cnt; val |= hival; val &= 0xffff; SET_CFLG ((val & 0x8000) >> 15); } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* ASR.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e060_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 cnt = m68k_dreg (regs, srcreg); { uae_s16 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 val = (uae_u16)data; uae_u32 sign = (0x8000 & val) >> 15; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 16) { val = 0xffff & (uae_u32)-sign; SET_CFLG (sign); COPY_CARRY (); } else if (cnt > 0) { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; val |= (0xffff << (16 - cnt)) & (uae_u32)-sign; val &= 0xffff; } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* LSR.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e068_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 cnt = m68k_dreg (regs, srcreg); { uae_s16 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 16) { SET_CFLG ((cnt == 16) & (val >> 15)); COPY_CARRY (); val = 0; } else if (cnt > 0) { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* ROXR.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e070_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 cnt = m68k_dreg (regs, srcreg); { uae_s16 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 34) cnt -= 34; if (cnt >= 17) cnt -= 17; if (cnt > 0) { cnt--; { uae_u32 carry; uae_u32 hival = (val << 1) | GET_XFLG (); hival <<= (15 - cnt); val >>= cnt; carry = val & 1; val >>= 1; val |= hival; SET_XFLG (carry); val &= 0xffff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* ROR.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e078_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 cnt = m68k_dreg (regs, srcreg); { uae_s16 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt > 0) { uae_u32 hival; cnt &= 15; hival = val << (16 - cnt); val >>= cnt; val |= hival; val &= 0xffff; SET_CFLG ((val & 0x8000) >> 15); } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* ASRQ.L #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e080_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s32 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 val = data; uae_u32 sign = (0x80000000 & val) >> 31; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 32) { val = 0xffffffff & (uae_u32)-sign; SET_CFLG (sign); COPY_CARRY (); } else { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; val |= (0xffffffff << (32 - cnt)) & (uae_u32)-sign; val &= 0xffffffff; } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* LSRQ.L #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e088_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s32 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 32) { SET_CFLG ((cnt == 32) & (val >> 31)); COPY_CARRY (); val = 0; } else { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* ROXRQ.L #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e090_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s32 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { cnt--; { uae_u32 carry; uae_u32 hival = (val << 1) | GET_XFLG (); hival <<= (31 - cnt); val >>= cnt; carry = val & 1; val >>= 1; val |= hival; SET_XFLG (carry); val &= 0xffffffff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* RORQ.L #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e098_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s32 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { uae_u32 hival; cnt &= 31; hival = val << (32 - cnt); val >>= cnt; val |= hival; val &= 0xffffffff; SET_CFLG ((val & 0x80000000) >> 31); } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* ASR.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e0a0_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 cnt = m68k_dreg (regs, srcreg); { uae_s32 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 val = data; uae_u32 sign = (0x80000000 & val) >> 31; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 32) { val = 0xffffffff & (uae_u32)-sign; SET_CFLG (sign); COPY_CARRY (); } else if (cnt > 0) { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; val |= (0xffffffff << (32 - cnt)) & (uae_u32)-sign; val &= 0xffffffff; } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* LSR.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e0a8_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 cnt = m68k_dreg (regs, srcreg); { uae_s32 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 32) { SET_CFLG ((cnt == 32) & (val >> 31)); COPY_CARRY (); val = 0; } else if (cnt > 0) { val >>= cnt - 1; SET_CFLG (val & 1); COPY_CARRY (); val >>= 1; } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* ROXR.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e0b0_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 cnt = m68k_dreg (regs, srcreg); { uae_s32 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 33) cnt -= 33; if (cnt > 0) { cnt--; { uae_u32 carry; uae_u32 hival = (val << 1) | GET_XFLG (); hival <<= (31 - cnt); val >>= cnt; carry = val & 1; val >>= 1; val |= hival; SET_XFLG (carry); val &= 0xffffffff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* ROR.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e0b8_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 cnt = m68k_dreg (regs, srcreg); { uae_s32 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt > 0) { uae_u32 hival; cnt &= 31; hival = val << (32 - cnt); val >>= cnt; val |= hival; val &= 0xffffffff; SET_CFLG ((val & 0x80000000) >> 31); } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* ASRW.W (An) */ uae_u32 REGPARAM2 CPUFUNC(op_e0d0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel3655; } {{ uae_s16 data = get_word (dataa); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 cflg = val & 1; val = (val >> 1) | sign; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (cflg); COPY_CARRY (); put_word (dataa, val); }}}}} m68k_incpc (2); endlabel3655: ; return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* ASRW.W (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_e0d8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel3656; } {{ uae_s16 data = get_word (dataa); m68k_areg (regs, srcreg) += 2; regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 cflg = val & 1; val = (val >> 1) | sign; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (cflg); COPY_CARRY (); put_word (dataa, val); }}}}} m68k_incpc (2); endlabel3656: ; return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* ASRW.W -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_e0e0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; dataa = m68k_areg (regs, srcreg) - 2; if (dataa & 1) { exception3 (opcode, dataa); goto endlabel3657; } {{ uae_s16 data = get_word (dataa); m68k_areg (regs, srcreg) = dataa; regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 cflg = val & 1; val = (val >> 1) | sign; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (cflg); COPY_CARRY (); put_word (dataa, val); }}}}} m68k_incpc (2); endlabel3657: ; return 14 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* ASRW.W (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_e0e8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel3658; } {{ uae_s16 data = get_word (dataa); regs.ir = regs.irc; get_word_prefetch (6); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 cflg = val & 1; val = (val >> 1) | sign; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (cflg); COPY_CARRY (); put_word (dataa, val); }}}}} m68k_incpc (4); endlabel3658: ; return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* ASRW.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_e0f0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; dataa = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel3659; } {{ uae_s16 data = get_word (dataa); regs.ir = regs.irc; get_word_prefetch (6); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 cflg = val & 1; val = (val >> 1) | sign; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (cflg); COPY_CARRY (); put_word (dataa, val); }}}}} m68k_incpc (4); endlabel3659: ; return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* ASRW.W (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_e0f8_11)(uae_u32 opcode) { {{ uaecptr dataa = (uae_s32)(uae_s16)get_word_prefetch (4); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel3660; } {{ uae_s16 data = get_word (dataa); regs.ir = regs.irc; get_word_prefetch (6); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 cflg = val & 1; val = (val >> 1) | sign; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (cflg); COPY_CARRY (); put_word (dataa, val); }}}}} m68k_incpc (4); endlabel3660: ; return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* ASRW.W (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_e0f9_11)(uae_u32 opcode) { {{ uaecptr dataa = get_long_prefetch (4); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel3661; } {{ uae_s16 data = get_word (dataa); regs.ir = regs.irc; get_word_prefetch (8); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 cflg = val & 1; val = (val >> 1) | sign; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (cflg); COPY_CARRY (); put_word (dataa, val); }}}}} m68k_incpc (6); endlabel3661: ; return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* ASLQ.B #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e100_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s8 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 8) { SET_VFLG (val != 0); SET_CFLG (cnt == 8 ? val & 1 : 0); COPY_CARRY (); val = 0; } else { uae_u32 mask = (0xff << (7 - cnt)) & 0xff; SET_VFLG ((val & mask) != mask && (val & mask) != 0); val <<= cnt - 1; SET_CFLG ((val & 0x80) >> 7); COPY_CARRY (); val <<= 1; val &= 0xff; } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* LSLQ.B #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e108_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s8 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 8) { SET_CFLG (cnt == 8 ? val & 1 : 0); COPY_CARRY (); val = 0; } else { val <<= (cnt - 1); SET_CFLG ((val & 0x80) >> 7); COPY_CARRY (); val <<= 1; val &= 0xff; } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* ROXLQ.B #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e110_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s8 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { cnt--; { uae_u32 carry; uae_u32 loval = val >> (7 - cnt); carry = loval & 1; val = (((val << 1) | GET_XFLG ()) << cnt) | (loval >> 1); SET_XFLG (carry); val &= 0xff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* ROLQ.B #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e118_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s8 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { uae_u32 loval; cnt &= 7; loval = val >> (8 - cnt); val <<= cnt; val |= loval; val &= 0xff; SET_CFLG (val & 1); } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* ASL.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e120_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 cnt = m68k_dreg (regs, srcreg); { uae_s8 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 8) { SET_VFLG (val != 0); SET_CFLG (cnt == 8 ? val & 1 : 0); COPY_CARRY (); val = 0; } else if (cnt > 0) { uae_u32 mask = (0xff << (7 - cnt)) & 0xff; SET_VFLG ((val & mask) != mask && (val & mask) != 0); val <<= cnt - 1; SET_CFLG ((val & 0x80) >> 7); COPY_CARRY (); val <<= 1; val &= 0xff; } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* LSL.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e128_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 cnt = m68k_dreg (regs, srcreg); { uae_s8 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 8) { SET_CFLG (cnt == 8 ? val & 1 : 0); COPY_CARRY (); val = 0; } else if (cnt > 0) { val <<= (cnt - 1); SET_CFLG ((val & 0x80) >> 7); COPY_CARRY (); val <<= 1; val &= 0xff; } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* ROXL.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e130_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 cnt = m68k_dreg (regs, srcreg); { uae_s8 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 36) cnt -= 36; if (cnt >= 18) cnt -= 18; if (cnt >= 9) cnt -= 9; if (cnt > 0) { cnt--; { uae_u32 carry; uae_u32 loval = val >> (7 - cnt); carry = loval & 1; val = (((val << 1) | GET_XFLG ()) << cnt) | (loval >> 1); SET_XFLG (carry); val &= 0xff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* ROL.B Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e138_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s8 cnt = m68k_dreg (regs, srcreg); { uae_s8 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 val = (uae_u8)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt > 0) { uae_u32 loval; cnt &= 7; loval = val >> (8 - cnt); val <<= cnt; val |= loval; val &= 0xff; SET_CFLG (val & 1); } SET_ZFLG (((uae_s8)(val)) == 0); SET_NFLG (((uae_s8)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xff) | ((val) & 0xff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* ASLQ.W #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e140_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s16 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 16) { SET_VFLG (val != 0); SET_CFLG (cnt == 16 ? val & 1 : 0); COPY_CARRY (); val = 0; } else { uae_u32 mask = (0xffff << (15 - cnt)) & 0xffff; SET_VFLG ((val & mask) != mask && (val & mask) != 0); val <<= cnt - 1; SET_CFLG ((val & 0x8000) >> 15); COPY_CARRY (); val <<= 1; val &= 0xffff; } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* LSLQ.W #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e148_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s16 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 16) { SET_CFLG (cnt == 16 ? val & 1 : 0); COPY_CARRY (); val = 0; } else { val <<= (cnt - 1); SET_CFLG ((val & 0x8000) >> 15); COPY_CARRY (); val <<= 1; val &= 0xffff; } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* ROXLQ.W #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e150_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s16 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { cnt--; { uae_u32 carry; uae_u32 loval = val >> (15 - cnt); carry = loval & 1; val = (((val << 1) | GET_XFLG ()) << cnt) | (loval >> 1); SET_XFLG (carry); val &= 0xffff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* ROLQ.W #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e158_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s16 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { uae_u32 loval; cnt &= 15; loval = val >> (16 - cnt); val <<= cnt; val |= loval; val &= 0xffff; SET_CFLG (val & 1); } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* ASL.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e160_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 cnt = m68k_dreg (regs, srcreg); { uae_s16 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 16) { SET_VFLG (val != 0); SET_CFLG (cnt == 16 ? val & 1 : 0); COPY_CARRY (); val = 0; } else if (cnt > 0) { uae_u32 mask = (0xffff << (15 - cnt)) & 0xffff; SET_VFLG ((val & mask) != mask && (val & mask) != 0); val <<= cnt - 1; SET_CFLG ((val & 0x8000) >> 15); COPY_CARRY (); val <<= 1; val &= 0xffff; } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* LSL.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e168_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 cnt = m68k_dreg (regs, srcreg); { uae_s16 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 16) { SET_CFLG (cnt == 16 ? val & 1 : 0); COPY_CARRY (); val = 0; } else if (cnt > 0) { val <<= (cnt - 1); SET_CFLG ((val & 0x8000) >> 15); COPY_CARRY (); val <<= 1; val &= 0xffff; } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* ROXL.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e170_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 cnt = m68k_dreg (regs, srcreg); { uae_s16 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 34) cnt -= 34; if (cnt >= 17) cnt -= 17; if (cnt > 0) { cnt--; { uae_u32 carry; uae_u32 loval = val >> (15 - cnt); carry = loval & 1; val = (((val << 1) | GET_XFLG ()) << cnt) | (loval >> 1); SET_XFLG (carry); val &= 0xffff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* ROL.W Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e178_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s16 cnt = m68k_dreg (regs, srcreg); { uae_s16 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 val = (uae_u16)data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt > 0) { uae_u32 loval; cnt &= 15; loval = val >> (16 - cnt); val <<= cnt; val |= loval; val &= 0xffff; SET_CFLG (val & 1); } SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); m68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & ~0xffff) | ((val) & 0xffff); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* ASLQ.L #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e180_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s32 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 32) { SET_VFLG (val != 0); SET_CFLG (cnt == 32 ? val & 1 : 0); COPY_CARRY (); val = 0; } else { uae_u32 mask = (0xffffffff << (31 - cnt)) & 0xffffffff; SET_VFLG ((val & mask) != mask && (val & mask) != 0); val <<= cnt - 1; SET_CFLG ((val & 0x80000000) >> 31); COPY_CARRY (); val <<= 1; val &= 0xffffffff; } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* LSLQ.L #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e188_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s32 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 32) { SET_CFLG (cnt == 32 ? val & 1 : 0); COPY_CARRY (); val = 0; } else { val <<= (cnt - 1); SET_CFLG ((val & 0x80000000) >> 31); COPY_CARRY (); val <<= 1; val &= 0xffffffff; } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* ROXLQ.L #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e190_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s32 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { cnt--; { uae_u32 carry; uae_u32 loval = val >> (31 - cnt); carry = loval & 1; val = (((val << 1) | GET_XFLG ()) << cnt) | (loval >> 1); SET_XFLG (carry); val &= 0xffffffff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* ROLQ.L #,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e198_11)(uae_u32 opcode) { uae_u32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; {{ uae_u32 cnt = srcreg; { uae_s32 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); { uae_u32 loval; cnt &= 31; loval = val >> (32 - cnt); val <<= cnt; val |= loval; val &= 0xffffffff; SET_CFLG (val & 1); } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* ASL.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e1a0_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 cnt = m68k_dreg (regs, srcreg); { uae_s32 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 32) { SET_VFLG (val != 0); SET_CFLG (cnt == 32 ? val & 1 : 0); COPY_CARRY (); val = 0; } else if (cnt > 0) { uae_u32 mask = (0xffffffff << (31 - cnt)) & 0xffffffff; SET_VFLG ((val & mask) != mask && (val & mask) != 0); val <<= cnt - 1; SET_CFLG ((val & 0x80000000) >> 31); COPY_CARRY (); val <<= 1; val &= 0xffffffff; } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* LSL.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e1a8_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 cnt = m68k_dreg (regs, srcreg); { uae_s32 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 32) { SET_CFLG (cnt == 32 ? val & 1 : 0); COPY_CARRY (); val = 0; } else if (cnt > 0) { val <<= (cnt - 1); SET_CFLG ((val & 0x80000000) >> 31); COPY_CARRY (); val <<= 1; val &= 0xffffffff; } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* ROXL.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e1b0_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 cnt = m68k_dreg (regs, srcreg); { uae_s32 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt >= 33) cnt -= 33; if (cnt > 0) { cnt--; { uae_u32 carry; uae_u32 loval = val >> (31 - cnt); carry = loval & 1; val = (((val << 1) | GET_XFLG ()) << cnt) | (loval >> 1); SET_XFLG (carry); val &= 0xffffffff; } } SET_CFLG (GET_XFLG ()); SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* ROL.L Dn,Dn */ uae_u32 REGPARAM2 CPUFUNC(op_e1b8_11)(uae_u32 opcode) { uae_u32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; {{ uae_s32 cnt = m68k_dreg (regs, srcreg); { uae_s32 data = m68k_dreg (regs, dstreg); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 val = data; int ccnt = cnt & 63; cnt &= 63; CLEAR_CZNV (); if (cnt > 0) { uae_u32 loval; cnt &= 31; loval = val >> (32 - cnt); val <<= cnt; val |= loval; val &= 0xffffffff; SET_CFLG (val & 1); } SET_ZFLG (((uae_s32)(val)) == 0); SET_NFLG (((uae_s32)(val)) < 0); m68k_dreg (regs, dstreg) = (val); }}}} m68k_incpc (2); return 4 * CYCLE_UNIT / 2; } /* 4 (1/0) */ /* ASLW.W (An) */ uae_u32 REGPARAM2 CPUFUNC(op_e1d0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel3686; } {{ uae_s16 data = get_word (dataa); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 sign2; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); sign2 = 0x8000 & val; SET_CFLG (sign != 0); COPY_CARRY (); SET_VFLG (GET_VFLG () | (sign2 != sign)); put_word (dataa, val); }}}}} m68k_incpc (2); endlabel3686: ; return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* ASLW.W (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_e1d8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel3687; } {{ uae_s16 data = get_word (dataa); m68k_areg (regs, srcreg) += 2; regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 sign2; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); sign2 = 0x8000 & val; SET_CFLG (sign != 0); COPY_CARRY (); SET_VFLG (GET_VFLG () | (sign2 != sign)); put_word (dataa, val); }}}}} m68k_incpc (2); endlabel3687: ; return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* ASLW.W -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_e1e0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; dataa = m68k_areg (regs, srcreg) - 2; if (dataa & 1) { exception3 (opcode, dataa); goto endlabel3688; } {{ uae_s16 data = get_word (dataa); m68k_areg (regs, srcreg) = dataa; regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 sign2; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); sign2 = 0x8000 & val; SET_CFLG (sign != 0); COPY_CARRY (); SET_VFLG (GET_VFLG () | (sign2 != sign)); put_word (dataa, val); }}}}} m68k_incpc (2); endlabel3688: ; return 14 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* ASLW.W (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_e1e8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel3689; } {{ uae_s16 data = get_word (dataa); regs.ir = regs.irc; get_word_prefetch (6); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 sign2; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); sign2 = 0x8000 & val; SET_CFLG (sign != 0); COPY_CARRY (); SET_VFLG (GET_VFLG () | (sign2 != sign)); put_word (dataa, val); }}}}} m68k_incpc (4); endlabel3689: ; return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* ASLW.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_e1f0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; dataa = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel3690; } {{ uae_s16 data = get_word (dataa); regs.ir = regs.irc; get_word_prefetch (6); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 sign2; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); sign2 = 0x8000 & val; SET_CFLG (sign != 0); COPY_CARRY (); SET_VFLG (GET_VFLG () | (sign2 != sign)); put_word (dataa, val); }}}}} m68k_incpc (4); endlabel3690: ; return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* ASLW.W (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_e1f8_11)(uae_u32 opcode) { {{ uaecptr dataa = (uae_s32)(uae_s16)get_word_prefetch (4); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel3691; } {{ uae_s16 data = get_word (dataa); regs.ir = regs.irc; get_word_prefetch (6); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 sign2; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); sign2 = 0x8000 & val; SET_CFLG (sign != 0); COPY_CARRY (); SET_VFLG (GET_VFLG () | (sign2 != sign)); put_word (dataa, val); }}}}} m68k_incpc (4); endlabel3691: ; return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* ASLW.W (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_e1f9_11)(uae_u32 opcode) { {{ uaecptr dataa = get_long_prefetch (4); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel3692; } {{ uae_s16 data = get_word (dataa); regs.ir = regs.irc; get_word_prefetch (8); { uae_u32 val = (uae_u16)data; uae_u32 sign = 0x8000 & val; uae_u32 sign2; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); sign2 = 0x8000 & val; SET_CFLG (sign != 0); COPY_CARRY (); SET_VFLG (GET_VFLG () | (sign2 != sign)); put_word (dataa, val); }}}}} m68k_incpc (6); endlabel3692: ; return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* LSRW.W (An) */ uae_u32 REGPARAM2 CPUFUNC(op_e2d0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel3693; } {{ uae_s16 data = get_word (dataa); regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 val = (uae_u16)data; uae_u32 carry = val & 1; val >>= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); put_word (dataa, val); }}}}} m68k_incpc (2); endlabel3693: ; return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* LSRW.W (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_e2d8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel3694; } {{ uae_s16 data = get_word (dataa); m68k_areg (regs, srcreg) += 2; regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 val = (uae_u16)data; uae_u32 carry = val & 1; val >>= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); put_word (dataa, val); }}}}} m68k_incpc (2); endlabel3694: ; return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* LSRW.W -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_e2e0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; dataa = m68k_areg (regs, srcreg) - 2; if (dataa & 1) { exception3 (opcode, dataa); goto endlabel3695; } {{ uae_s16 data = get_word (dataa); m68k_areg (regs, srcreg) = dataa; regs.ir = regs.irc; get_word_prefetch (4); { uae_u32 val = (uae_u16)data; uae_u32 carry = val & 1; val >>= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); put_word (dataa, val); }}}}} m68k_incpc (2); endlabel3695: ; return 14 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* LSRW.W (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_e2e8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel3696; } {{ uae_s16 data = get_word (dataa); regs.ir = regs.irc; get_word_prefetch (6); { uae_u32 val = (uae_u16)data; uae_u32 carry = val & 1; val >>= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); put_word (dataa, val); }}}}} m68k_incpc (4); endlabel3696: ; return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* LSRW.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_e2f0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; dataa = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel3697; } {{ uae_s16 data = get_word (dataa); regs.ir = regs.irc; get_word_prefetch (6); { uae_u32 val = (uae_u16)data; uae_u32 carry = val & 1; val >>= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); put_word (dataa, val); }}}}} m68k_incpc (4); endlabel3697: ; return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* LSRW.W (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_e2f8_11)(uae_u32 opcode) { {{ uaecptr dataa = (uae_s32)(uae_s16)get_word_prefetch (4); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel3698; } {{ uae_s16 data = get_word (dataa); regs.ir = regs.irc; get_word_prefetch (6); { uae_u32 val = (uae_u16)data; uae_u32 carry = val & 1; val >>= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); put_word (dataa, val); }}}}} m68k_incpc (4); endlabel3698: ; return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* LSRW.W (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_e2f9_11)(uae_u32 opcode) { {{ uaecptr dataa = get_long_prefetch (4); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel3699; } {{ uae_s16 data = get_word (dataa); regs.ir = regs.irc; get_word_prefetch (8); { uae_u32 val = (uae_u16)data; uae_u32 carry = val & 1; val >>= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); put_word (dataa, val); }}}}} m68k_incpc (6); endlabel3699: ; return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* LSLW.W (An) */ uae_u32 REGPARAM2 CPUFUNC(op_e3d0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel3700; } {{ uae_s16 data = get_word (dataa); regs.ir = regs.irc; get_word_prefetch (4); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); put_word (dataa, val); }}}}} m68k_incpc (2); endlabel3700: ; return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* LSLW.W (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_e3d8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel3701; } {{ uae_s16 data = get_word (dataa); m68k_areg (regs, srcreg) += 2; regs.ir = regs.irc; get_word_prefetch (4); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); put_word (dataa, val); }}}}} m68k_incpc (2); endlabel3701: ; return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* LSLW.W -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_e3e0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; dataa = m68k_areg (regs, srcreg) - 2; if (dataa & 1) { exception3 (opcode, dataa); goto endlabel3702; } {{ uae_s16 data = get_word (dataa); m68k_areg (regs, srcreg) = dataa; regs.ir = regs.irc; get_word_prefetch (4); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); put_word (dataa, val); }}}}} m68k_incpc (2); endlabel3702: ; return 14 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* LSLW.W (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_e3e8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel3703; } {{ uae_s16 data = get_word (dataa); regs.ir = regs.irc; get_word_prefetch (6); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); put_word (dataa, val); }}}}} m68k_incpc (4); endlabel3703: ; return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* LSLW.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_e3f0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; dataa = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel3704; } {{ uae_s16 data = get_word (dataa); regs.ir = regs.irc; get_word_prefetch (6); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); put_word (dataa, val); }}}}} m68k_incpc (4); endlabel3704: ; return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* LSLW.W (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_e3f8_11)(uae_u32 opcode) { {{ uaecptr dataa = (uae_s32)(uae_s16)get_word_prefetch (4); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel3705; } {{ uae_s16 data = get_word (dataa); regs.ir = regs.irc; get_word_prefetch (6); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); put_word (dataa, val); }}}}} m68k_incpc (4); endlabel3705: ; return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* LSLW.W (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_e3f9_11)(uae_u32 opcode) { {{ uaecptr dataa = get_long_prefetch (4); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel3706; } {{ uae_s16 data = get_word (dataa); regs.ir = regs.irc; get_word_prefetch (8); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); put_word (dataa, val); }}}}} m68k_incpc (6); endlabel3706: ; return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* ROXRW.W (An) */ uae_u32 REGPARAM2 CPUFUNC(op_e4d0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel3707; } {{ uae_s16 data = get_word (dataa); regs.ir = regs.irc; get_word_prefetch (4); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (GET_XFLG ()) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); put_word (dataa, val); }}}}} m68k_incpc (2); endlabel3707: ; return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* ROXRW.W (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_e4d8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel3708; } {{ uae_s16 data = get_word (dataa); m68k_areg (regs, srcreg) += 2; regs.ir = regs.irc; get_word_prefetch (4); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (GET_XFLG ()) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); put_word (dataa, val); }}}}} m68k_incpc (2); endlabel3708: ; return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* ROXRW.W -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_e4e0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; dataa = m68k_areg (regs, srcreg) - 2; if (dataa & 1) { exception3 (opcode, dataa); goto endlabel3709; } {{ uae_s16 data = get_word (dataa); m68k_areg (regs, srcreg) = dataa; regs.ir = regs.irc; get_word_prefetch (4); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (GET_XFLG ()) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); put_word (dataa, val); }}}}} m68k_incpc (2); endlabel3709: ; return 14 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* ROXRW.W (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_e4e8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel3710; } {{ uae_s16 data = get_word (dataa); regs.ir = regs.irc; get_word_prefetch (6); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (GET_XFLG ()) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); put_word (dataa, val); }}}}} m68k_incpc (4); endlabel3710: ; return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* ROXRW.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_e4f0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; dataa = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel3711; } {{ uae_s16 data = get_word (dataa); regs.ir = regs.irc; get_word_prefetch (6); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (GET_XFLG ()) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); put_word (dataa, val); }}}}} m68k_incpc (4); endlabel3711: ; return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* ROXRW.W (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_e4f8_11)(uae_u32 opcode) { {{ uaecptr dataa = (uae_s32)(uae_s16)get_word_prefetch (4); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel3712; } {{ uae_s16 data = get_word (dataa); regs.ir = regs.irc; get_word_prefetch (6); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (GET_XFLG ()) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); put_word (dataa, val); }}}}} m68k_incpc (4); endlabel3712: ; return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* ROXRW.W (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_e4f9_11)(uae_u32 opcode) { {{ uaecptr dataa = get_long_prefetch (4); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel3713; } {{ uae_s16 data = get_word (dataa); regs.ir = regs.irc; get_word_prefetch (8); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (GET_XFLG ()) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); COPY_CARRY (); put_word (dataa, val); }}}}} m68k_incpc (6); endlabel3713: ; return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* ROXLW.W (An) */ uae_u32 REGPARAM2 CPUFUNC(op_e5d0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel3714; } {{ uae_s16 data = get_word (dataa); regs.ir = regs.irc; get_word_prefetch (4); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (GET_XFLG ()) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); put_word (dataa, val); }}}}} m68k_incpc (2); endlabel3714: ; return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* ROXLW.W (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_e5d8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel3715; } {{ uae_s16 data = get_word (dataa); m68k_areg (regs, srcreg) += 2; regs.ir = regs.irc; get_word_prefetch (4); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (GET_XFLG ()) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); put_word (dataa, val); }}}}} m68k_incpc (2); endlabel3715: ; return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* ROXLW.W -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_e5e0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; dataa = m68k_areg (regs, srcreg) - 2; if (dataa & 1) { exception3 (opcode, dataa); goto endlabel3716; } {{ uae_s16 data = get_word (dataa); m68k_areg (regs, srcreg) = dataa; regs.ir = regs.irc; get_word_prefetch (4); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (GET_XFLG ()) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); put_word (dataa, val); }}}}} m68k_incpc (2); endlabel3716: ; return 14 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* ROXLW.W (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_e5e8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel3717; } {{ uae_s16 data = get_word (dataa); regs.ir = regs.irc; get_word_prefetch (6); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (GET_XFLG ()) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); put_word (dataa, val); }}}}} m68k_incpc (4); endlabel3717: ; return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* ROXLW.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_e5f0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; dataa = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel3718; } {{ uae_s16 data = get_word (dataa); regs.ir = regs.irc; get_word_prefetch (6); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (GET_XFLG ()) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); put_word (dataa, val); }}}}} m68k_incpc (4); endlabel3718: ; return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* ROXLW.W (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_e5f8_11)(uae_u32 opcode) { {{ uaecptr dataa = (uae_s32)(uae_s16)get_word_prefetch (4); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel3719; } {{ uae_s16 data = get_word (dataa); regs.ir = regs.irc; get_word_prefetch (6); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (GET_XFLG ()) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); put_word (dataa, val); }}}}} m68k_incpc (4); endlabel3719: ; return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* ROXLW.W (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_e5f9_11)(uae_u32 opcode) { {{ uaecptr dataa = get_long_prefetch (4); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel3720; } {{ uae_s16 data = get_word (dataa); regs.ir = regs.irc; get_word_prefetch (8); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (GET_XFLG ()) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); COPY_CARRY (); put_word (dataa, val); }}}}} m68k_incpc (6); endlabel3720: ; return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* RORW.W (An) */ uae_u32 REGPARAM2 CPUFUNC(op_e6d0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel3721; } {{ uae_s16 data = get_word (dataa); regs.ir = regs.irc; get_word_prefetch (4); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (carry) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); put_word (dataa, val); }}}}} m68k_incpc (2); endlabel3721: ; return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* RORW.W (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_e6d8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel3722; } {{ uae_s16 data = get_word (dataa); m68k_areg (regs, srcreg) += 2; regs.ir = regs.irc; get_word_prefetch (4); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (carry) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); put_word (dataa, val); }}}}} m68k_incpc (2); endlabel3722: ; return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* RORW.W -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_e6e0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; dataa = m68k_areg (regs, srcreg) - 2; if (dataa & 1) { exception3 (opcode, dataa); goto endlabel3723; } {{ uae_s16 data = get_word (dataa); m68k_areg (regs, srcreg) = dataa; regs.ir = regs.irc; get_word_prefetch (4); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (carry) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); put_word (dataa, val); }}}}} m68k_incpc (2); endlabel3723: ; return 14 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* RORW.W (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_e6e8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel3724; } {{ uae_s16 data = get_word (dataa); regs.ir = regs.irc; get_word_prefetch (6); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (carry) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); put_word (dataa, val); }}}}} m68k_incpc (4); endlabel3724: ; return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* RORW.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_e6f0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; dataa = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel3725; } {{ uae_s16 data = get_word (dataa); regs.ir = regs.irc; get_word_prefetch (6); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (carry) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); put_word (dataa, val); }}}}} m68k_incpc (4); endlabel3725: ; return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* RORW.W (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_e6f8_11)(uae_u32 opcode) { {{ uaecptr dataa = (uae_s32)(uae_s16)get_word_prefetch (4); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel3726; } {{ uae_s16 data = get_word (dataa); regs.ir = regs.irc; get_word_prefetch (6); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (carry) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); put_word (dataa, val); }}}}} m68k_incpc (4); endlabel3726: ; return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* RORW.W (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_e6f9_11)(uae_u32 opcode) { {{ uaecptr dataa = get_long_prefetch (4); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel3727; } {{ uae_s16 data = get_word (dataa); regs.ir = regs.irc; get_word_prefetch (8); { uae_u16 val = data; uae_u32 carry = val & 1; val >>= 1; if (carry) val |= 0x8000; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry); put_word (dataa, val); }}}}} m68k_incpc (6); endlabel3727: ; return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ /* ROLW.W (An) */ uae_u32 REGPARAM2 CPUFUNC(op_e7d0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel3728; } {{ uae_s16 data = get_word (dataa); regs.ir = regs.irc; get_word_prefetch (4); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (carry) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); put_word (dataa, val); }}}}} m68k_incpc (2); endlabel3728: ; return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* ROLW.W (An)+ */ uae_u32 REGPARAM2 CPUFUNC(op_e7d8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel3729; } {{ uae_s16 data = get_word (dataa); m68k_areg (regs, srcreg) += 2; regs.ir = regs.irc; get_word_prefetch (4); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (carry) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); put_word (dataa, val); }}}}} m68k_incpc (2); endlabel3729: ; return 12 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* ROLW.W -(An) */ uae_u32 REGPARAM2 CPUFUNC(op_e7e0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; dataa = m68k_areg (regs, srcreg) - 2; if (dataa & 1) { exception3 (opcode, dataa); goto endlabel3730; } {{ uae_s16 data = get_word (dataa); m68k_areg (regs, srcreg) = dataa; regs.ir = regs.irc; get_word_prefetch (4); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (carry) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); put_word (dataa, val); }}}}} m68k_incpc (2); endlabel3730: ; return 14 * CYCLE_UNIT / 2; } /* 12 (2/1) */ /* ROLW.W (d16,An) */ uae_u32 REGPARAM2 CPUFUNC(op_e7e8_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)get_word_prefetch (4); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel3731; } {{ uae_s16 data = get_word (dataa); regs.ir = regs.irc; get_word_prefetch (6); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (carry) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); put_word (dataa, val); }}}}} m68k_incpc (4); endlabel3731: ; return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* ROLW.W (d8,An,Xn) */ uae_u32 REGPARAM2 CPUFUNC(op_e7f0_11)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr dataa; dataa = get_disp_ea_000 (m68k_areg (regs, srcreg), get_word_prefetch (4)); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel3732; } {{ uae_s16 data = get_word (dataa); regs.ir = regs.irc; get_word_prefetch (6); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (carry) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); put_word (dataa, val); }}}}} m68k_incpc (4); endlabel3732: ; return 18 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* ROLW.W (xxx).W */ uae_u32 REGPARAM2 CPUFUNC(op_e7f8_11)(uae_u32 opcode) { {{ uaecptr dataa = (uae_s32)(uae_s16)get_word_prefetch (4); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel3733; } {{ uae_s16 data = get_word (dataa); regs.ir = regs.irc; get_word_prefetch (6); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (carry) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); put_word (dataa, val); }}}}} m68k_incpc (4); endlabel3733: ; return 16 * CYCLE_UNIT / 2; } /* 16 (3/1) */ /* ROLW.W (xxx).L */ uae_u32 REGPARAM2 CPUFUNC(op_e7f9_11)(uae_u32 opcode) { {{ uaecptr dataa = get_long_prefetch (4); if (dataa & 1) { exception3 (opcode, dataa); goto endlabel3734; } {{ uae_s16 data = get_word (dataa); regs.ir = regs.irc; get_word_prefetch (8); { uae_u16 val = data; uae_u32 carry = val & 0x8000; val <<= 1; if (carry) val |= 1; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(val)) == 0); SET_NFLG (((uae_s16)(val)) < 0); SET_CFLG (carry >> 15); put_word (dataa, val); }}}}} m68k_incpc (6); endlabel3734: ; return 20 * CYCLE_UNIT / 2; } /* 20 (4/1) */ #endif fs-uae-2.2.3+dfsg/gensrc/blitfunc.cpp0000644000175000017500000013360412162366654017656 0ustar glaubitzglaubitz#include "sysconfig.h" #include "sysdeps.h" #include "options.h" #include "custom.h" #include "uae/memory.h" #include "blitter.h" #include "blitfunc.h" void blitdofast_0 (uaecptr pta, uaecptr ptb, uaecptr ptc, uaecptr ptd, struct bltinfo *b) { int i,j; uae_u32 totald = 0; uae_u32 dstd=0; uaecptr dstp = 0; for (j = b->vblitsize; j--; ) { for (i = b->hblitsize; i--; ) { uae_u32 bltadat, srca; if (dstp) chipmem_wput_indirect (dstp, dstd); dstd = (0) & 0xFFFF; totald |= dstd; if (ptd) { dstp = ptd; ptd += 2; } } if (ptd) ptd += b->bltdmod; } if (dstp) chipmem_wput_indirect (dstp, dstd); if (totald != 0) b->blitzero = 0; } void blitdofast_desc_0 (uaecptr pta, uaecptr ptb, uaecptr ptc, uaecptr ptd, struct bltinfo *b) { uae_u32 totald = 0; int i,j; uae_u32 dstd = 0; uaecptr dstp = 0; for (j = b->vblitsize; j--; ) { for (i = b->hblitsize; i--; ) { uae_u32 bltadat, srca; if (dstp) chipmem_wput_indirect (dstp, dstd); dstd = (0) & 0xFFFF; totald |= dstd; if (ptd) { dstp = ptd; ptd -= 2; } } if (ptd) ptd -= b->bltdmod; } if (dstp) chipmem_wput_indirect (dstp, dstd); if (totald != 0) b->blitzero = 0; } void blitdofast_a (uaecptr pta, uaecptr ptb, uaecptr ptc, uaecptr ptd, struct bltinfo *b) { int i,j; uae_u32 totald = 0; uae_u32 preva = 0; uae_u32 srcc = b->bltcdat; uae_u32 dstd=0; uaecptr dstp = 0; for (j = b->vblitsize; j--; ) { for (i = 0; i < b->hblitsize; i++) { uae_u32 bltadat, srca; if (ptc) { srcc = chipmem_wget_indirect (ptc); ptc += 2; } if (pta) { bltadat = blt_info.bltadat = chipmem_wget_indirect (pta); pta += 2; } else { bltadat = blt_info.bltadat; } bltadat &= blit_masktable[i]; srca = (((uae_u32)preva << 16) | bltadat) >> b->blitashift; preva = bltadat; if (dstp) chipmem_wput_indirect (dstp, dstd); dstd = ((~srca & srcc)) & 0xFFFF; totald |= dstd; if (ptd) { dstp = ptd; ptd += 2; } } if (pta) pta += b->bltamod; if (ptc) ptc += b->bltcmod; if (ptd) ptd += b->bltdmod; } b->bltcdat = srcc; if (dstp) chipmem_wput_indirect (dstp, dstd); if (totald != 0) b->blitzero = 0; } void blitdofast_desc_a (uaecptr pta, uaecptr ptb, uaecptr ptc, uaecptr ptd, struct bltinfo *b) { uae_u32 totald = 0; int i,j; uae_u32 preva = 0; uae_u32 srcc = b->bltcdat; uae_u32 dstd = 0; uaecptr dstp = 0; for (j = b->vblitsize; j--; ) { for (i = 0; i < b->hblitsize; i++) { uae_u32 bltadat, srca; if (ptc) { srcc = chipmem_wget_indirect (ptc); ptc -= 2; } if (pta) { bltadat = blt_info.bltadat = chipmem_wget_indirect (pta); pta -= 2; } else { bltadat = blt_info.bltadat; } bltadat &= blit_masktable[i]; srca = (((uae_u32)bltadat << 16) | preva) >> b->blitdownashift; preva = bltadat; if (dstp) chipmem_wput_indirect (dstp, dstd); dstd = ((~srca & srcc)) & 0xFFFF; totald |= dstd; if (ptd) { dstp = ptd; ptd -= 2; } } if (pta) pta -= b->bltamod; if (ptc) ptc -= b->bltcmod; if (ptd) ptd -= b->bltdmod; } b->bltcdat = srcc; if (dstp) chipmem_wput_indirect (dstp, dstd); if (totald != 0) b->blitzero = 0; } void blitdofast_2a (uaecptr pta, uaecptr ptb, uaecptr ptc, uaecptr ptd, struct bltinfo *b) { int i,j; uae_u32 totald = 0; uae_u32 preva = 0; uae_u32 prevb = 0, srcb = b->bltbhold; uae_u32 srcc = b->bltcdat; uae_u32 dstd=0; uaecptr dstp = 0; for (j = b->vblitsize; j--; ) { for (i = 0; i < b->hblitsize; i++) { uae_u32 bltadat, srca; if (ptc) { srcc = chipmem_wget_indirect (ptc); ptc += 2; } if (ptb) { uae_u32 bltbdat = blt_info.bltbdat = chipmem_wget_indirect (ptb); ptb += 2; srcb = (((uae_u32)prevb << 16) | bltbdat) >> b->blitbshift; prevb = bltbdat; } if (pta) { bltadat = blt_info.bltadat = chipmem_wget_indirect (pta); pta += 2; } else { bltadat = blt_info.bltadat; } bltadat &= blit_masktable[i]; srca = (((uae_u32)preva << 16) | bltadat) >> b->blitashift; preva = bltadat; if (dstp) chipmem_wput_indirect (dstp, dstd); dstd = ((srcc & ~(srca & srcb))) & 0xFFFF; totald |= dstd; if (ptd) { dstp = ptd; ptd += 2; } } if (pta) pta += b->bltamod; if (ptb) ptb += b->bltbmod; if (ptc) ptc += b->bltcmod; if (ptd) ptd += b->bltdmod; } b->bltbhold = srcb; b->bltcdat = srcc; if (dstp) chipmem_wput_indirect (dstp, dstd); if (totald != 0) b->blitzero = 0; } void blitdofast_desc_2a (uaecptr pta, uaecptr ptb, uaecptr ptc, uaecptr ptd, struct bltinfo *b) { uae_u32 totald = 0; int i,j; uae_u32 preva = 0; uae_u32 prevb = 0, srcb = b->bltbhold; uae_u32 srcc = b->bltcdat; uae_u32 dstd = 0; uaecptr dstp = 0; for (j = b->vblitsize; j--; ) { for (i = 0; i < b->hblitsize; i++) { uae_u32 bltadat, srca; if (ptc) { srcc = chipmem_wget_indirect (ptc); ptc -= 2; } if (ptb) { uae_u32 bltbdat = blt_info.bltbdat = chipmem_wget_indirect (ptb); ptb -= 2; srcb = ((bltbdat << 16) | prevb) >> b->blitdownbshift; prevb = bltbdat; } if (pta) { bltadat = blt_info.bltadat = chipmem_wget_indirect (pta); pta -= 2; } else { bltadat = blt_info.bltadat; } bltadat &= blit_masktable[i]; srca = (((uae_u32)bltadat << 16) | preva) >> b->blitdownashift; preva = bltadat; if (dstp) chipmem_wput_indirect (dstp, dstd); dstd = ((srcc & ~(srca & srcb))) & 0xFFFF; totald |= dstd; if (ptd) { dstp = ptd; ptd -= 2; } } if (pta) pta -= b->bltamod; if (ptb) ptb -= b->bltbmod; if (ptc) ptc -= b->bltcmod; if (ptd) ptd -= b->bltdmod; } b->bltbhold = srcb; b->bltcdat = srcc; if (dstp) chipmem_wput_indirect (dstp, dstd); if (totald != 0) b->blitzero = 0; } void blitdofast_30 (uaecptr pta, uaecptr ptb, uaecptr ptc, uaecptr ptd, struct bltinfo *b) { int i,j; uae_u32 totald = 0; uae_u32 preva = 0; uae_u32 prevb = 0, srcb = b->bltbhold; uae_u32 dstd=0; uaecptr dstp = 0; for (j = b->vblitsize; j--; ) { for (i = 0; i < b->hblitsize; i++) { uae_u32 bltadat, srca; if (ptb) { uae_u32 bltbdat = blt_info.bltbdat = chipmem_wget_indirect (ptb); ptb += 2; srcb = (((uae_u32)prevb << 16) | bltbdat) >> b->blitbshift; prevb = bltbdat; } if (pta) { bltadat = blt_info.bltadat = chipmem_wget_indirect (pta); pta += 2; } else { bltadat = blt_info.bltadat; } bltadat &= blit_masktable[i]; srca = (((uae_u32)preva << 16) | bltadat) >> b->blitashift; preva = bltadat; if (dstp) chipmem_wput_indirect (dstp, dstd); dstd = ((srca & ~srcb)) & 0xFFFF; totald |= dstd; if (ptd) { dstp = ptd; ptd += 2; } } if (pta) pta += b->bltamod; if (ptb) ptb += b->bltbmod; if (ptd) ptd += b->bltdmod; } b->bltbhold = srcb; if (dstp) chipmem_wput_indirect (dstp, dstd); if (totald != 0) b->blitzero = 0; } void blitdofast_desc_30 (uaecptr pta, uaecptr ptb, uaecptr ptc, uaecptr ptd, struct bltinfo *b) { uae_u32 totald = 0; int i,j; uae_u32 preva = 0; uae_u32 prevb = 0, srcb = b->bltbhold; uae_u32 dstd = 0; uaecptr dstp = 0; for (j = b->vblitsize; j--; ) { for (i = 0; i < b->hblitsize; i++) { uae_u32 bltadat, srca; if (ptb) { uae_u32 bltbdat = blt_info.bltbdat = chipmem_wget_indirect (ptb); ptb -= 2; srcb = ((bltbdat << 16) | prevb) >> b->blitdownbshift; prevb = bltbdat; } if (pta) { bltadat = blt_info.bltadat = chipmem_wget_indirect (pta); pta -= 2; } else { bltadat = blt_info.bltadat; } bltadat &= blit_masktable[i]; srca = (((uae_u32)bltadat << 16) | preva) >> b->blitdownashift; preva = bltadat; if (dstp) chipmem_wput_indirect (dstp, dstd); dstd = ((srca & ~srcb)) & 0xFFFF; totald |= dstd; if (ptd) { dstp = ptd; ptd -= 2; } } if (pta) pta -= b->bltamod; if (ptb) ptb -= b->bltbmod; if (ptd) ptd -= b->bltdmod; } b->bltbhold = srcb; if (dstp) chipmem_wput_indirect (dstp, dstd); if (totald != 0) b->blitzero = 0; } void blitdofast_3a (uaecptr pta, uaecptr ptb, uaecptr ptc, uaecptr ptd, struct bltinfo *b) { int i,j; uae_u32 totald = 0; uae_u32 preva = 0; uae_u32 prevb = 0, srcb = b->bltbhold; uae_u32 srcc = b->bltcdat; uae_u32 dstd=0; uaecptr dstp = 0; for (j = b->vblitsize; j--; ) { for (i = 0; i < b->hblitsize; i++) { uae_u32 bltadat, srca; if (ptc) { srcc = chipmem_wget_indirect (ptc); ptc += 2; } if (ptb) { uae_u32 bltbdat = blt_info.bltbdat = chipmem_wget_indirect (ptb); ptb += 2; srcb = (((uae_u32)prevb << 16) | bltbdat) >> b->blitbshift; prevb = bltbdat; } if (pta) { bltadat = blt_info.bltadat = chipmem_wget_indirect (pta); pta += 2; } else { bltadat = blt_info.bltadat; } bltadat &= blit_masktable[i]; srca = (((uae_u32)preva << 16) | bltadat) >> b->blitashift; preva = bltadat; if (dstp) chipmem_wput_indirect (dstp, dstd); dstd = ((srcb ^ (srca | (srcb ^ srcc)))) & 0xFFFF; totald |= dstd; if (ptd) { dstp = ptd; ptd += 2; } } if (pta) pta += b->bltamod; if (ptb) ptb += b->bltbmod; if (ptc) ptc += b->bltcmod; if (ptd) ptd += b->bltdmod; } b->bltbhold = srcb; b->bltcdat = srcc; if (dstp) chipmem_wput_indirect (dstp, dstd); if (totald != 0) b->blitzero = 0; } void blitdofast_desc_3a (uaecptr pta, uaecptr ptb, uaecptr ptc, uaecptr ptd, struct bltinfo *b) { uae_u32 totald = 0; int i,j; uae_u32 preva = 0; uae_u32 prevb = 0, srcb = b->bltbhold; uae_u32 srcc = b->bltcdat; uae_u32 dstd = 0; uaecptr dstp = 0; for (j = b->vblitsize; j--; ) { for (i = 0; i < b->hblitsize; i++) { uae_u32 bltadat, srca; if (ptc) { srcc = chipmem_wget_indirect (ptc); ptc -= 2; } if (ptb) { uae_u32 bltbdat = blt_info.bltbdat = chipmem_wget_indirect (ptb); ptb -= 2; srcb = ((bltbdat << 16) | prevb) >> b->blitdownbshift; prevb = bltbdat; } if (pta) { bltadat = blt_info.bltadat = chipmem_wget_indirect (pta); pta -= 2; } else { bltadat = blt_info.bltadat; } bltadat &= blit_masktable[i]; srca = (((uae_u32)bltadat << 16) | preva) >> b->blitdownashift; preva = bltadat; if (dstp) chipmem_wput_indirect (dstp, dstd); dstd = ((srcb ^ (srca | (srcb ^ srcc)))) & 0xFFFF; totald |= dstd; if (ptd) { dstp = ptd; ptd -= 2; } } if (pta) pta -= b->bltamod; if (ptb) ptb -= b->bltbmod; if (ptc) ptc -= b->bltcmod; if (ptd) ptd -= b->bltdmod; } b->bltbhold = srcb; b->bltcdat = srcc; if (dstp) chipmem_wput_indirect (dstp, dstd); if (totald != 0) b->blitzero = 0; } void blitdofast_3c (uaecptr pta, uaecptr ptb, uaecptr ptc, uaecptr ptd, struct bltinfo *b) { int i,j; uae_u32 totald = 0; uae_u32 preva = 0; uae_u32 prevb = 0, srcb = b->bltbhold; uae_u32 dstd=0; uaecptr dstp = 0; for (j = b->vblitsize; j--; ) { for (i = 0; i < b->hblitsize; i++) { uae_u32 bltadat, srca; if (ptb) { uae_u32 bltbdat = blt_info.bltbdat = chipmem_wget_indirect (ptb); ptb += 2; srcb = (((uae_u32)prevb << 16) | bltbdat) >> b->blitbshift; prevb = bltbdat; } if (pta) { bltadat = blt_info.bltadat = chipmem_wget_indirect (pta); pta += 2; } else { bltadat = blt_info.bltadat; } bltadat &= blit_masktable[i]; srca = (((uae_u32)preva << 16) | bltadat) >> b->blitashift; preva = bltadat; if (dstp) chipmem_wput_indirect (dstp, dstd); dstd = ((srca ^ srcb)) & 0xFFFF; totald |= dstd; if (ptd) { dstp = ptd; ptd += 2; } } if (pta) pta += b->bltamod; if (ptb) ptb += b->bltbmod; if (ptd) ptd += b->bltdmod; } b->bltbhold = srcb; if (dstp) chipmem_wput_indirect (dstp, dstd); if (totald != 0) b->blitzero = 0; } void blitdofast_desc_3c (uaecptr pta, uaecptr ptb, uaecptr ptc, uaecptr ptd, struct bltinfo *b) { uae_u32 totald = 0; int i,j; uae_u32 preva = 0; uae_u32 prevb = 0, srcb = b->bltbhold; uae_u32 dstd = 0; uaecptr dstp = 0; for (j = b->vblitsize; j--; ) { for (i = 0; i < b->hblitsize; i++) { uae_u32 bltadat, srca; if (ptb) { uae_u32 bltbdat = blt_info.bltbdat = chipmem_wget_indirect (ptb); ptb -= 2; srcb = ((bltbdat << 16) | prevb) >> b->blitdownbshift; prevb = bltbdat; } if (pta) { bltadat = blt_info.bltadat = chipmem_wget_indirect (pta); pta -= 2; } else { bltadat = blt_info.bltadat; } bltadat &= blit_masktable[i]; srca = (((uae_u32)bltadat << 16) | preva) >> b->blitdownashift; preva = bltadat; if (dstp) chipmem_wput_indirect (dstp, dstd); dstd = ((srca ^ srcb)) & 0xFFFF; totald |= dstd; if (ptd) { dstp = ptd; ptd -= 2; } } if (pta) pta -= b->bltamod; if (ptb) ptb -= b->bltbmod; if (ptd) ptd -= b->bltdmod; } b->bltbhold = srcb; if (dstp) chipmem_wput_indirect (dstp, dstd); if (totald != 0) b->blitzero = 0; } void blitdofast_4a (uaecptr pta, uaecptr ptb, uaecptr ptc, uaecptr ptd, struct bltinfo *b) { int i,j; uae_u32 totald = 0; uae_u32 preva = 0; uae_u32 prevb = 0, srcb = b->bltbhold; uae_u32 srcc = b->bltcdat; uae_u32 dstd=0; uaecptr dstp = 0; for (j = b->vblitsize; j--; ) { for (i = 0; i < b->hblitsize; i++) { uae_u32 bltadat, srca; if (ptc) { srcc = chipmem_wget_indirect (ptc); ptc += 2; } if (ptb) { uae_u32 bltbdat = blt_info.bltbdat = chipmem_wget_indirect (ptb); ptb += 2; srcb = (((uae_u32)prevb << 16) | bltbdat) >> b->blitbshift; prevb = bltbdat; } if (pta) { bltadat = blt_info.bltadat = chipmem_wget_indirect (pta); pta += 2; } else { bltadat = blt_info.bltadat; } bltadat &= blit_masktable[i]; srca = (((uae_u32)preva << 16) | bltadat) >> b->blitashift; preva = bltadat; if (dstp) chipmem_wput_indirect (dstp, dstd); dstd = ((srcc ^ (srca & (srcb | srcc)))) & 0xFFFF; totald |= dstd; if (ptd) { dstp = ptd; ptd += 2; } } if (pta) pta += b->bltamod; if (ptb) ptb += b->bltbmod; if (ptc) ptc += b->bltcmod; if (ptd) ptd += b->bltdmod; } b->bltbhold = srcb; b->bltcdat = srcc; if (dstp) chipmem_wput_indirect (dstp, dstd); if (totald != 0) b->blitzero = 0; } void blitdofast_desc_4a (uaecptr pta, uaecptr ptb, uaecptr ptc, uaecptr ptd, struct bltinfo *b) { uae_u32 totald = 0; int i,j; uae_u32 preva = 0; uae_u32 prevb = 0, srcb = b->bltbhold; uae_u32 srcc = b->bltcdat; uae_u32 dstd = 0; uaecptr dstp = 0; for (j = b->vblitsize; j--; ) { for (i = 0; i < b->hblitsize; i++) { uae_u32 bltadat, srca; if (ptc) { srcc = chipmem_wget_indirect (ptc); ptc -= 2; } if (ptb) { uae_u32 bltbdat = blt_info.bltbdat = chipmem_wget_indirect (ptb); ptb -= 2; srcb = ((bltbdat << 16) | prevb) >> b->blitdownbshift; prevb = bltbdat; } if (pta) { bltadat = blt_info.bltadat = chipmem_wget_indirect (pta); pta -= 2; } else { bltadat = blt_info.bltadat; } bltadat &= blit_masktable[i]; srca = (((uae_u32)bltadat << 16) | preva) >> b->blitdownashift; preva = bltadat; if (dstp) chipmem_wput_indirect (dstp, dstd); dstd = ((srcc ^ (srca & (srcb | srcc)))) & 0xFFFF; totald |= dstd; if (ptd) { dstp = ptd; ptd -= 2; } } if (pta) pta -= b->bltamod; if (ptb) ptb -= b->bltbmod; if (ptc) ptc -= b->bltcmod; if (ptd) ptd -= b->bltdmod; } b->bltbhold = srcb; b->bltcdat = srcc; if (dstp) chipmem_wput_indirect (dstp, dstd); if (totald != 0) b->blitzero = 0; } void blitdofast_6a (uaecptr pta, uaecptr ptb, uaecptr ptc, uaecptr ptd, struct bltinfo *b) { int i,j; uae_u32 totald = 0; uae_u32 preva = 0; uae_u32 prevb = 0, srcb = b->bltbhold; uae_u32 srcc = b->bltcdat; uae_u32 dstd=0; uaecptr dstp = 0; for (j = b->vblitsize; j--; ) { for (i = 0; i < b->hblitsize; i++) { uae_u32 bltadat, srca; if (ptc) { srcc = chipmem_wget_indirect (ptc); ptc += 2; } if (ptb) { uae_u32 bltbdat = blt_info.bltbdat = chipmem_wget_indirect (ptb); ptb += 2; srcb = (((uae_u32)prevb << 16) | bltbdat) >> b->blitbshift; prevb = bltbdat; } if (pta) { bltadat = blt_info.bltadat = chipmem_wget_indirect (pta); pta += 2; } else { bltadat = blt_info.bltadat; } bltadat &= blit_masktable[i]; srca = (((uae_u32)preva << 16) | bltadat) >> b->blitashift; preva = bltadat; if (dstp) chipmem_wput_indirect (dstp, dstd); dstd = ((srcc ^ (srca & srcb))) & 0xFFFF; totald |= dstd; if (ptd) { dstp = ptd; ptd += 2; } } if (pta) pta += b->bltamod; if (ptb) ptb += b->bltbmod; if (ptc) ptc += b->bltcmod; if (ptd) ptd += b->bltdmod; } b->bltbhold = srcb; b->bltcdat = srcc; if (dstp) chipmem_wput_indirect (dstp, dstd); if (totald != 0) b->blitzero = 0; } void blitdofast_desc_6a (uaecptr pta, uaecptr ptb, uaecptr ptc, uaecptr ptd, struct bltinfo *b) { uae_u32 totald = 0; int i,j; uae_u32 preva = 0; uae_u32 prevb = 0, srcb = b->bltbhold; uae_u32 srcc = b->bltcdat; uae_u32 dstd = 0; uaecptr dstp = 0; for (j = b->vblitsize; j--; ) { for (i = 0; i < b->hblitsize; i++) { uae_u32 bltadat, srca; if (ptc) { srcc = chipmem_wget_indirect (ptc); ptc -= 2; } if (ptb) { uae_u32 bltbdat = blt_info.bltbdat = chipmem_wget_indirect (ptb); ptb -= 2; srcb = ((bltbdat << 16) | prevb) >> b->blitdownbshift; prevb = bltbdat; } if (pta) { bltadat = blt_info.bltadat = chipmem_wget_indirect (pta); pta -= 2; } else { bltadat = blt_info.bltadat; } bltadat &= blit_masktable[i]; srca = (((uae_u32)bltadat << 16) | preva) >> b->blitdownashift; preva = bltadat; if (dstp) chipmem_wput_indirect (dstp, dstd); dstd = ((srcc ^ (srca & srcb))) & 0xFFFF; totald |= dstd; if (ptd) { dstp = ptd; ptd -= 2; } } if (pta) pta -= b->bltamod; if (ptb) ptb -= b->bltbmod; if (ptc) ptc -= b->bltcmod; if (ptd) ptd -= b->bltdmod; } b->bltbhold = srcb; b->bltcdat = srcc; if (dstp) chipmem_wput_indirect (dstp, dstd); if (totald != 0) b->blitzero = 0; } void blitdofast_8a (uaecptr pta, uaecptr ptb, uaecptr ptc, uaecptr ptd, struct bltinfo *b) { int i,j; uae_u32 totald = 0; uae_u32 preva = 0; uae_u32 prevb = 0, srcb = b->bltbhold; uae_u32 srcc = b->bltcdat; uae_u32 dstd=0; uaecptr dstp = 0; for (j = b->vblitsize; j--; ) { for (i = 0; i < b->hblitsize; i++) { uae_u32 bltadat, srca; if (ptc) { srcc = chipmem_wget_indirect (ptc); ptc += 2; } if (ptb) { uae_u32 bltbdat = blt_info.bltbdat = chipmem_wget_indirect (ptb); ptb += 2; srcb = (((uae_u32)prevb << 16) | bltbdat) >> b->blitbshift; prevb = bltbdat; } if (pta) { bltadat = blt_info.bltadat = chipmem_wget_indirect (pta); pta += 2; } else { bltadat = blt_info.bltadat; } bltadat &= blit_masktable[i]; srca = (((uae_u32)preva << 16) | bltadat) >> b->blitashift; preva = bltadat; if (dstp) chipmem_wput_indirect (dstp, dstd); dstd = ((srcc & (~srca | srcb))) & 0xFFFF; totald |= dstd; if (ptd) { dstp = ptd; ptd += 2; } } if (pta) pta += b->bltamod; if (ptb) ptb += b->bltbmod; if (ptc) ptc += b->bltcmod; if (ptd) ptd += b->bltdmod; } b->bltbhold = srcb; b->bltcdat = srcc; if (dstp) chipmem_wput_indirect (dstp, dstd); if (totald != 0) b->blitzero = 0; } void blitdofast_desc_8a (uaecptr pta, uaecptr ptb, uaecptr ptc, uaecptr ptd, struct bltinfo *b) { uae_u32 totald = 0; int i,j; uae_u32 preva = 0; uae_u32 prevb = 0, srcb = b->bltbhold; uae_u32 srcc = b->bltcdat; uae_u32 dstd = 0; uaecptr dstp = 0; for (j = b->vblitsize; j--; ) { for (i = 0; i < b->hblitsize; i++) { uae_u32 bltadat, srca; if (ptc) { srcc = chipmem_wget_indirect (ptc); ptc -= 2; } if (ptb) { uae_u32 bltbdat = blt_info.bltbdat = chipmem_wget_indirect (ptb); ptb -= 2; srcb = ((bltbdat << 16) | prevb) >> b->blitdownbshift; prevb = bltbdat; } if (pta) { bltadat = blt_info.bltadat = chipmem_wget_indirect (pta); pta -= 2; } else { bltadat = blt_info.bltadat; } bltadat &= blit_masktable[i]; srca = (((uae_u32)bltadat << 16) | preva) >> b->blitdownashift; preva = bltadat; if (dstp) chipmem_wput_indirect (dstp, dstd); dstd = ((srcc & (~srca | srcb))) & 0xFFFF; totald |= dstd; if (ptd) { dstp = ptd; ptd -= 2; } } if (pta) pta -= b->bltamod; if (ptb) ptb -= b->bltbmod; if (ptc) ptc -= b->bltcmod; if (ptd) ptd -= b->bltdmod; } b->bltbhold = srcb; b->bltcdat = srcc; if (dstp) chipmem_wput_indirect (dstp, dstd); if (totald != 0) b->blitzero = 0; } void blitdofast_8c (uaecptr pta, uaecptr ptb, uaecptr ptc, uaecptr ptd, struct bltinfo *b) { int i,j; uae_u32 totald = 0; uae_u32 preva = 0; uae_u32 prevb = 0, srcb = b->bltbhold; uae_u32 srcc = b->bltcdat; uae_u32 dstd=0; uaecptr dstp = 0; for (j = b->vblitsize; j--; ) { for (i = 0; i < b->hblitsize; i++) { uae_u32 bltadat, srca; if (ptc) { srcc = chipmem_wget_indirect (ptc); ptc += 2; } if (ptb) { uae_u32 bltbdat = blt_info.bltbdat = chipmem_wget_indirect (ptb); ptb += 2; srcb = (((uae_u32)prevb << 16) | bltbdat) >> b->blitbshift; prevb = bltbdat; } if (pta) { bltadat = blt_info.bltadat = chipmem_wget_indirect (pta); pta += 2; } else { bltadat = blt_info.bltadat; } bltadat &= blit_masktable[i]; srca = (((uae_u32)preva << 16) | bltadat) >> b->blitashift; preva = bltadat; if (dstp) chipmem_wput_indirect (dstp, dstd); dstd = ((srcb & (~srca | srcc))) & 0xFFFF; totald |= dstd; if (ptd) { dstp = ptd; ptd += 2; } } if (pta) pta += b->bltamod; if (ptb) ptb += b->bltbmod; if (ptc) ptc += b->bltcmod; if (ptd) ptd += b->bltdmod; } b->bltbhold = srcb; b->bltcdat = srcc; if (dstp) chipmem_wput_indirect (dstp, dstd); if (totald != 0) b->blitzero = 0; } void blitdofast_desc_8c (uaecptr pta, uaecptr ptb, uaecptr ptc, uaecptr ptd, struct bltinfo *b) { uae_u32 totald = 0; int i,j; uae_u32 preva = 0; uae_u32 prevb = 0, srcb = b->bltbhold; uae_u32 srcc = b->bltcdat; uae_u32 dstd = 0; uaecptr dstp = 0; for (j = b->vblitsize; j--; ) { for (i = 0; i < b->hblitsize; i++) { uae_u32 bltadat, srca; if (ptc) { srcc = chipmem_wget_indirect (ptc); ptc -= 2; } if (ptb) { uae_u32 bltbdat = blt_info.bltbdat = chipmem_wget_indirect (ptb); ptb -= 2; srcb = ((bltbdat << 16) | prevb) >> b->blitdownbshift; prevb = bltbdat; } if (pta) { bltadat = blt_info.bltadat = chipmem_wget_indirect (pta); pta -= 2; } else { bltadat = blt_info.bltadat; } bltadat &= blit_masktable[i]; srca = (((uae_u32)bltadat << 16) | preva) >> b->blitdownashift; preva = bltadat; if (dstp) chipmem_wput_indirect (dstp, dstd); dstd = ((srcb & (~srca | srcc))) & 0xFFFF; totald |= dstd; if (ptd) { dstp = ptd; ptd -= 2; } } if (pta) pta -= b->bltamod; if (ptb) ptb -= b->bltbmod; if (ptc) ptc -= b->bltcmod; if (ptd) ptd -= b->bltdmod; } b->bltbhold = srcb; b->bltcdat = srcc; if (dstp) chipmem_wput_indirect (dstp, dstd); if (totald != 0) b->blitzero = 0; } void blitdofast_9a (uaecptr pta, uaecptr ptb, uaecptr ptc, uaecptr ptd, struct bltinfo *b) { int i,j; uae_u32 totald = 0; uae_u32 preva = 0; uae_u32 prevb = 0, srcb = b->bltbhold; uae_u32 srcc = b->bltcdat; uae_u32 dstd=0; uaecptr dstp = 0; for (j = b->vblitsize; j--; ) { for (i = 0; i < b->hblitsize; i++) { uae_u32 bltadat, srca; if (ptc) { srcc = chipmem_wget_indirect (ptc); ptc += 2; } if (ptb) { uae_u32 bltbdat = blt_info.bltbdat = chipmem_wget_indirect (ptb); ptb += 2; srcb = (((uae_u32)prevb << 16) | bltbdat) >> b->blitbshift; prevb = bltbdat; } if (pta) { bltadat = blt_info.bltadat = chipmem_wget_indirect (pta); pta += 2; } else { bltadat = blt_info.bltadat; } bltadat &= blit_masktable[i]; srca = (((uae_u32)preva << 16) | bltadat) >> b->blitashift; preva = bltadat; if (dstp) chipmem_wput_indirect (dstp, dstd); dstd = ((srcc ^ (srca & ~srcb))) & 0xFFFF; totald |= dstd; if (ptd) { dstp = ptd; ptd += 2; } } if (pta) pta += b->bltamod; if (ptb) ptb += b->bltbmod; if (ptc) ptc += b->bltcmod; if (ptd) ptd += b->bltdmod; } b->bltbhold = srcb; b->bltcdat = srcc; if (dstp) chipmem_wput_indirect (dstp, dstd); if (totald != 0) b->blitzero = 0; } void blitdofast_desc_9a (uaecptr pta, uaecptr ptb, uaecptr ptc, uaecptr ptd, struct bltinfo *b) { uae_u32 totald = 0; int i,j; uae_u32 preva = 0; uae_u32 prevb = 0, srcb = b->bltbhold; uae_u32 srcc = b->bltcdat; uae_u32 dstd = 0; uaecptr dstp = 0; for (j = b->vblitsize; j--; ) { for (i = 0; i < b->hblitsize; i++) { uae_u32 bltadat, srca; if (ptc) { srcc = chipmem_wget_indirect (ptc); ptc -= 2; } if (ptb) { uae_u32 bltbdat = blt_info.bltbdat = chipmem_wget_indirect (ptb); ptb -= 2; srcb = ((bltbdat << 16) | prevb) >> b->blitdownbshift; prevb = bltbdat; } if (pta) { bltadat = blt_info.bltadat = chipmem_wget_indirect (pta); pta -= 2; } else { bltadat = blt_info.bltadat; } bltadat &= blit_masktable[i]; srca = (((uae_u32)bltadat << 16) | preva) >> b->blitdownashift; preva = bltadat; if (dstp) chipmem_wput_indirect (dstp, dstd); dstd = ((srcc ^ (srca & ~srcb))) & 0xFFFF; totald |= dstd; if (ptd) { dstp = ptd; ptd -= 2; } } if (pta) pta -= b->bltamod; if (ptb) ptb -= b->bltbmod; if (ptc) ptc -= b->bltcmod; if (ptd) ptd -= b->bltdmod; } b->bltbhold = srcb; b->bltcdat = srcc; if (dstp) chipmem_wput_indirect (dstp, dstd); if (totald != 0) b->blitzero = 0; } void blitdofast_a8 (uaecptr pta, uaecptr ptb, uaecptr ptc, uaecptr ptd, struct bltinfo *b) { int i,j; uae_u32 totald = 0; uae_u32 preva = 0; uae_u32 prevb = 0, srcb = b->bltbhold; uae_u32 srcc = b->bltcdat; uae_u32 dstd=0; uaecptr dstp = 0; for (j = b->vblitsize; j--; ) { for (i = 0; i < b->hblitsize; i++) { uae_u32 bltadat, srca; if (ptc) { srcc = chipmem_wget_indirect (ptc); ptc += 2; } if (ptb) { uae_u32 bltbdat = blt_info.bltbdat = chipmem_wget_indirect (ptb); ptb += 2; srcb = (((uae_u32)prevb << 16) | bltbdat) >> b->blitbshift; prevb = bltbdat; } if (pta) { bltadat = blt_info.bltadat = chipmem_wget_indirect (pta); pta += 2; } else { bltadat = blt_info.bltadat; } bltadat &= blit_masktable[i]; srca = (((uae_u32)preva << 16) | bltadat) >> b->blitashift; preva = bltadat; if (dstp) chipmem_wput_indirect (dstp, dstd); dstd = ((srcc & (srca | srcb))) & 0xFFFF; totald |= dstd; if (ptd) { dstp = ptd; ptd += 2; } } if (pta) pta += b->bltamod; if (ptb) ptb += b->bltbmod; if (ptc) ptc += b->bltcmod; if (ptd) ptd += b->bltdmod; } b->bltbhold = srcb; b->bltcdat = srcc; if (dstp) chipmem_wput_indirect (dstp, dstd); if (totald != 0) b->blitzero = 0; } void blitdofast_desc_a8 (uaecptr pta, uaecptr ptb, uaecptr ptc, uaecptr ptd, struct bltinfo *b) { uae_u32 totald = 0; int i,j; uae_u32 preva = 0; uae_u32 prevb = 0, srcb = b->bltbhold; uae_u32 srcc = b->bltcdat; uae_u32 dstd = 0; uaecptr dstp = 0; for (j = b->vblitsize; j--; ) { for (i = 0; i < b->hblitsize; i++) { uae_u32 bltadat, srca; if (ptc) { srcc = chipmem_wget_indirect (ptc); ptc -= 2; } if (ptb) { uae_u32 bltbdat = blt_info.bltbdat = chipmem_wget_indirect (ptb); ptb -= 2; srcb = ((bltbdat << 16) | prevb) >> b->blitdownbshift; prevb = bltbdat; } if (pta) { bltadat = blt_info.bltadat = chipmem_wget_indirect (pta); pta -= 2; } else { bltadat = blt_info.bltadat; } bltadat &= blit_masktable[i]; srca = (((uae_u32)bltadat << 16) | preva) >> b->blitdownashift; preva = bltadat; if (dstp) chipmem_wput_indirect (dstp, dstd); dstd = ((srcc & (srca | srcb))) & 0xFFFF; totald |= dstd; if (ptd) { dstp = ptd; ptd -= 2; } } if (pta) pta -= b->bltamod; if (ptb) ptb -= b->bltbmod; if (ptc) ptc -= b->bltcmod; if (ptd) ptd -= b->bltdmod; } b->bltbhold = srcb; b->bltcdat = srcc; if (dstp) chipmem_wput_indirect (dstp, dstd); if (totald != 0) b->blitzero = 0; } void blitdofast_aa (uaecptr pta, uaecptr ptb, uaecptr ptc, uaecptr ptd, struct bltinfo *b) { int i,j; uae_u32 totald = 0; uae_u32 srcc = b->bltcdat; uae_u32 dstd=0; uaecptr dstp = 0; for (j = b->vblitsize; j--; ) { for (i = b->hblitsize; i--; ) { uae_u32 bltadat, srca; if (ptc) { srcc = chipmem_wget_indirect (ptc); ptc += 2; } if (dstp) chipmem_wput_indirect (dstp, dstd); dstd = (srcc) & 0xFFFF; totald |= dstd; if (ptd) { dstp = ptd; ptd += 2; } } if (ptc) ptc += b->bltcmod; if (ptd) ptd += b->bltdmod; } b->bltcdat = srcc; if (dstp) chipmem_wput_indirect (dstp, dstd); if (totald != 0) b->blitzero = 0; } void blitdofast_desc_aa (uaecptr pta, uaecptr ptb, uaecptr ptc, uaecptr ptd, struct bltinfo *b) { uae_u32 totald = 0; int i,j; uae_u32 srcc = b->bltcdat; uae_u32 dstd = 0; uaecptr dstp = 0; for (j = b->vblitsize; j--; ) { for (i = b->hblitsize; i--; ) { uae_u32 bltadat, srca; if (ptc) { srcc = chipmem_wget_indirect (ptc); ptc -= 2; } if (dstp) chipmem_wput_indirect (dstp, dstd); dstd = (srcc) & 0xFFFF; totald |= dstd; if (ptd) { dstp = ptd; ptd -= 2; } } if (ptc) ptc -= b->bltcmod; if (ptd) ptd -= b->bltdmod; } b->bltcdat = srcc; if (dstp) chipmem_wput_indirect (dstp, dstd); if (totald != 0) b->blitzero = 0; } void blitdofast_b1 (uaecptr pta, uaecptr ptb, uaecptr ptc, uaecptr ptd, struct bltinfo *b) { int i,j; uae_u32 totald = 0; uae_u32 preva = 0; uae_u32 prevb = 0, srcb = b->bltbhold; uae_u32 srcc = b->bltcdat; uae_u32 dstd=0; uaecptr dstp = 0; for (j = b->vblitsize; j--; ) { for (i = 0; i < b->hblitsize; i++) { uae_u32 bltadat, srca; if (ptc) { srcc = chipmem_wget_indirect (ptc); ptc += 2; } if (ptb) { uae_u32 bltbdat = blt_info.bltbdat = chipmem_wget_indirect (ptb); ptb += 2; srcb = (((uae_u32)prevb << 16) | bltbdat) >> b->blitbshift; prevb = bltbdat; } if (pta) { bltadat = blt_info.bltadat = chipmem_wget_indirect (pta); pta += 2; } else { bltadat = blt_info.bltadat; } bltadat &= blit_masktable[i]; srca = (((uae_u32)preva << 16) | bltadat) >> b->blitashift; preva = bltadat; if (dstp) chipmem_wput_indirect (dstp, dstd); dstd = (~(srca ^ (srcc | (srca ^ srcb)))) & 0xFFFF; totald |= dstd; if (ptd) { dstp = ptd; ptd += 2; } } if (pta) pta += b->bltamod; if (ptb) ptb += b->bltbmod; if (ptc) ptc += b->bltcmod; if (ptd) ptd += b->bltdmod; } b->bltbhold = srcb; b->bltcdat = srcc; if (dstp) chipmem_wput_indirect (dstp, dstd); if (totald != 0) b->blitzero = 0; } void blitdofast_desc_b1 (uaecptr pta, uaecptr ptb, uaecptr ptc, uaecptr ptd, struct bltinfo *b) { uae_u32 totald = 0; int i,j; uae_u32 preva = 0; uae_u32 prevb = 0, srcb = b->bltbhold; uae_u32 srcc = b->bltcdat; uae_u32 dstd = 0; uaecptr dstp = 0; for (j = b->vblitsize; j--; ) { for (i = 0; i < b->hblitsize; i++) { uae_u32 bltadat, srca; if (ptc) { srcc = chipmem_wget_indirect (ptc); ptc -= 2; } if (ptb) { uae_u32 bltbdat = blt_info.bltbdat = chipmem_wget_indirect (ptb); ptb -= 2; srcb = ((bltbdat << 16) | prevb) >> b->blitdownbshift; prevb = bltbdat; } if (pta) { bltadat = blt_info.bltadat = chipmem_wget_indirect (pta); pta -= 2; } else { bltadat = blt_info.bltadat; } bltadat &= blit_masktable[i]; srca = (((uae_u32)bltadat << 16) | preva) >> b->blitdownashift; preva = bltadat; if (dstp) chipmem_wput_indirect (dstp, dstd); dstd = (~(srca ^ (srcc | (srca ^ srcb)))) & 0xFFFF; totald |= dstd; if (ptd) { dstp = ptd; ptd -= 2; } } if (pta) pta -= b->bltamod; if (ptb) ptb -= b->bltbmod; if (ptc) ptc -= b->bltcmod; if (ptd) ptd -= b->bltdmod; } b->bltbhold = srcb; b->bltcdat = srcc; if (dstp) chipmem_wput_indirect (dstp, dstd); if (totald != 0) b->blitzero = 0; } void blitdofast_ca (uaecptr pta, uaecptr ptb, uaecptr ptc, uaecptr ptd, struct bltinfo *b) { int i,j; uae_u32 totald = 0; uae_u32 preva = 0; uae_u32 prevb = 0, srcb = b->bltbhold; uae_u32 srcc = b->bltcdat; uae_u32 dstd=0; uaecptr dstp = 0; for (j = b->vblitsize; j--; ) { for (i = 0; i < b->hblitsize; i++) { uae_u32 bltadat, srca; if (ptc) { srcc = chipmem_wget_indirect (ptc); ptc += 2; } if (ptb) { uae_u32 bltbdat = blt_info.bltbdat = chipmem_wget_indirect (ptb); ptb += 2; srcb = (((uae_u32)prevb << 16) | bltbdat) >> b->blitbshift; prevb = bltbdat; } if (pta) { bltadat = blt_info.bltadat = chipmem_wget_indirect (pta); pta += 2; } else { bltadat = blt_info.bltadat; } bltadat &= blit_masktable[i]; srca = (((uae_u32)preva << 16) | bltadat) >> b->blitashift; preva = bltadat; if (dstp) chipmem_wput_indirect (dstp, dstd); dstd = ((srcc ^ (srca & (srcb ^ srcc)))) & 0xFFFF; totald |= dstd; if (ptd) { dstp = ptd; ptd += 2; } } if (pta) pta += b->bltamod; if (ptb) ptb += b->bltbmod; if (ptc) ptc += b->bltcmod; if (ptd) ptd += b->bltdmod; } b->bltbhold = srcb; b->bltcdat = srcc; if (dstp) chipmem_wput_indirect (dstp, dstd); if (totald != 0) b->blitzero = 0; } void blitdofast_desc_ca (uaecptr pta, uaecptr ptb, uaecptr ptc, uaecptr ptd, struct bltinfo *b) { uae_u32 totald = 0; int i,j; uae_u32 preva = 0; uae_u32 prevb = 0, srcb = b->bltbhold; uae_u32 srcc = b->bltcdat; uae_u32 dstd = 0; uaecptr dstp = 0; for (j = b->vblitsize; j--; ) { for (i = 0; i < b->hblitsize; i++) { uae_u32 bltadat, srca; if (ptc) { srcc = chipmem_wget_indirect (ptc); ptc -= 2; } if (ptb) { uae_u32 bltbdat = blt_info.bltbdat = chipmem_wget_indirect (ptb); ptb -= 2; srcb = ((bltbdat << 16) | prevb) >> b->blitdownbshift; prevb = bltbdat; } if (pta) { bltadat = blt_info.bltadat = chipmem_wget_indirect (pta); pta -= 2; } else { bltadat = blt_info.bltadat; } bltadat &= blit_masktable[i]; srca = (((uae_u32)bltadat << 16) | preva) >> b->blitdownashift; preva = bltadat; if (dstp) chipmem_wput_indirect (dstp, dstd); dstd = ((srcc ^ (srca & (srcb ^ srcc)))) & 0xFFFF; totald |= dstd; if (ptd) { dstp = ptd; ptd -= 2; } } if (pta) pta -= b->bltamod; if (ptb) ptb -= b->bltbmod; if (ptc) ptc -= b->bltcmod; if (ptd) ptd -= b->bltdmod; } b->bltbhold = srcb; b->bltcdat = srcc; if (dstp) chipmem_wput_indirect (dstp, dstd); if (totald != 0) b->blitzero = 0; } void blitdofast_cc (uaecptr pta, uaecptr ptb, uaecptr ptc, uaecptr ptd, struct bltinfo *b) { int i,j; uae_u32 totald = 0; uae_u32 prevb = 0, srcb = b->bltbhold; uae_u32 dstd=0; uaecptr dstp = 0; for (j = b->vblitsize; j--; ) { for (i = b->hblitsize; i--; ) { uae_u32 bltadat, srca; if (ptb) { uae_u32 bltbdat = blt_info.bltbdat = chipmem_wget_indirect (ptb); ptb += 2; srcb = (((uae_u32)prevb << 16) | bltbdat) >> b->blitbshift; prevb = bltbdat; } if (dstp) chipmem_wput_indirect (dstp, dstd); dstd = (srcb) & 0xFFFF; totald |= dstd; if (ptd) { dstp = ptd; ptd += 2; } } if (ptb) ptb += b->bltbmod; if (ptd) ptd += b->bltdmod; } b->bltbhold = srcb; if (dstp) chipmem_wput_indirect (dstp, dstd); if (totald != 0) b->blitzero = 0; } void blitdofast_desc_cc (uaecptr pta, uaecptr ptb, uaecptr ptc, uaecptr ptd, struct bltinfo *b) { uae_u32 totald = 0; int i,j; uae_u32 prevb = 0, srcb = b->bltbhold; uae_u32 dstd = 0; uaecptr dstp = 0; for (j = b->vblitsize; j--; ) { for (i = b->hblitsize; i--; ) { uae_u32 bltadat, srca; if (ptb) { uae_u32 bltbdat = blt_info.bltbdat = chipmem_wget_indirect (ptb); ptb -= 2; srcb = ((bltbdat << 16) | prevb) >> b->blitdownbshift; prevb = bltbdat; } if (dstp) chipmem_wput_indirect (dstp, dstd); dstd = (srcb) & 0xFFFF; totald |= dstd; if (ptd) { dstp = ptd; ptd -= 2; } } if (ptb) ptb -= b->bltbmod; if (ptd) ptd -= b->bltdmod; } b->bltbhold = srcb; if (dstp) chipmem_wput_indirect (dstp, dstd); if (totald != 0) b->blitzero = 0; } void blitdofast_d8 (uaecptr pta, uaecptr ptb, uaecptr ptc, uaecptr ptd, struct bltinfo *b) { int i,j; uae_u32 totald = 0; uae_u32 preva = 0; uae_u32 prevb = 0, srcb = b->bltbhold; uae_u32 srcc = b->bltcdat; uae_u32 dstd=0; uaecptr dstp = 0; for (j = b->vblitsize; j--; ) { for (i = 0; i < b->hblitsize; i++) { uae_u32 bltadat, srca; if (ptc) { srcc = chipmem_wget_indirect (ptc); ptc += 2; } if (ptb) { uae_u32 bltbdat = blt_info.bltbdat = chipmem_wget_indirect (ptb); ptb += 2; srcb = (((uae_u32)prevb << 16) | bltbdat) >> b->blitbshift; prevb = bltbdat; } if (pta) { bltadat = blt_info.bltadat = chipmem_wget_indirect (pta); pta += 2; } else { bltadat = blt_info.bltadat; } bltadat &= blit_masktable[i]; srca = (((uae_u32)preva << 16) | bltadat) >> b->blitashift; preva = bltadat; if (dstp) chipmem_wput_indirect (dstp, dstd); dstd = ((srca ^ (srcc & (srca ^ srcb)))) & 0xFFFF; totald |= dstd; if (ptd) { dstp = ptd; ptd += 2; } } if (pta) pta += b->bltamod; if (ptb) ptb += b->bltbmod; if (ptc) ptc += b->bltcmod; if (ptd) ptd += b->bltdmod; } b->bltbhold = srcb; b->bltcdat = srcc; if (dstp) chipmem_wput_indirect (dstp, dstd); if (totald != 0) b->blitzero = 0; } void blitdofast_desc_d8 (uaecptr pta, uaecptr ptb, uaecptr ptc, uaecptr ptd, struct bltinfo *b) { uae_u32 totald = 0; int i,j; uae_u32 preva = 0; uae_u32 prevb = 0, srcb = b->bltbhold; uae_u32 srcc = b->bltcdat; uae_u32 dstd = 0; uaecptr dstp = 0; for (j = b->vblitsize; j--; ) { for (i = 0; i < b->hblitsize; i++) { uae_u32 bltadat, srca; if (ptc) { srcc = chipmem_wget_indirect (ptc); ptc -= 2; } if (ptb) { uae_u32 bltbdat = blt_info.bltbdat = chipmem_wget_indirect (ptb); ptb -= 2; srcb = ((bltbdat << 16) | prevb) >> b->blitdownbshift; prevb = bltbdat; } if (pta) { bltadat = blt_info.bltadat = chipmem_wget_indirect (pta); pta -= 2; } else { bltadat = blt_info.bltadat; } bltadat &= blit_masktable[i]; srca = (((uae_u32)bltadat << 16) | preva) >> b->blitdownashift; preva = bltadat; if (dstp) chipmem_wput_indirect (dstp, dstd); dstd = ((srca ^ (srcc & (srca ^ srcb)))) & 0xFFFF; totald |= dstd; if (ptd) { dstp = ptd; ptd -= 2; } } if (pta) pta -= b->bltamod; if (ptb) ptb -= b->bltbmod; if (ptc) ptc -= b->bltcmod; if (ptd) ptd -= b->bltdmod; } b->bltbhold = srcb; b->bltcdat = srcc; if (dstp) chipmem_wput_indirect (dstp, dstd); if (totald != 0) b->blitzero = 0; } void blitdofast_e2 (uaecptr pta, uaecptr ptb, uaecptr ptc, uaecptr ptd, struct bltinfo *b) { int i,j; uae_u32 totald = 0; uae_u32 preva = 0; uae_u32 prevb = 0, srcb = b->bltbhold; uae_u32 srcc = b->bltcdat; uae_u32 dstd=0; uaecptr dstp = 0; for (j = b->vblitsize; j--; ) { for (i = 0; i < b->hblitsize; i++) { uae_u32 bltadat, srca; if (ptc) { srcc = chipmem_wget_indirect (ptc); ptc += 2; } if (ptb) { uae_u32 bltbdat = blt_info.bltbdat = chipmem_wget_indirect (ptb); ptb += 2; srcb = (((uae_u32)prevb << 16) | bltbdat) >> b->blitbshift; prevb = bltbdat; } if (pta) { bltadat = blt_info.bltadat = chipmem_wget_indirect (pta); pta += 2; } else { bltadat = blt_info.bltadat; } bltadat &= blit_masktable[i]; srca = (((uae_u32)preva << 16) | bltadat) >> b->blitashift; preva = bltadat; if (dstp) chipmem_wput_indirect (dstp, dstd); dstd = ((srcc ^ (srcb & (srca ^ srcc)))) & 0xFFFF; totald |= dstd; if (ptd) { dstp = ptd; ptd += 2; } } if (pta) pta += b->bltamod; if (ptb) ptb += b->bltbmod; if (ptc) ptc += b->bltcmod; if (ptd) ptd += b->bltdmod; } b->bltbhold = srcb; b->bltcdat = srcc; if (dstp) chipmem_wput_indirect (dstp, dstd); if (totald != 0) b->blitzero = 0; } void blitdofast_desc_e2 (uaecptr pta, uaecptr ptb, uaecptr ptc, uaecptr ptd, struct bltinfo *b) { uae_u32 totald = 0; int i,j; uae_u32 preva = 0; uae_u32 prevb = 0, srcb = b->bltbhold; uae_u32 srcc = b->bltcdat; uae_u32 dstd = 0; uaecptr dstp = 0; for (j = b->vblitsize; j--; ) { for (i = 0; i < b->hblitsize; i++) { uae_u32 bltadat, srca; if (ptc) { srcc = chipmem_wget_indirect (ptc); ptc -= 2; } if (ptb) { uae_u32 bltbdat = blt_info.bltbdat = chipmem_wget_indirect (ptb); ptb -= 2; srcb = ((bltbdat << 16) | prevb) >> b->blitdownbshift; prevb = bltbdat; } if (pta) { bltadat = blt_info.bltadat = chipmem_wget_indirect (pta); pta -= 2; } else { bltadat = blt_info.bltadat; } bltadat &= blit_masktable[i]; srca = (((uae_u32)bltadat << 16) | preva) >> b->blitdownashift; preva = bltadat; if (dstp) chipmem_wput_indirect (dstp, dstd); dstd = ((srcc ^ (srcb & (srca ^ srcc)))) & 0xFFFF; totald |= dstd; if (ptd) { dstp = ptd; ptd -= 2; } } if (pta) pta -= b->bltamod; if (ptb) ptb -= b->bltbmod; if (ptc) ptc -= b->bltcmod; if (ptd) ptd -= b->bltdmod; } b->bltbhold = srcb; b->bltcdat = srcc; if (dstp) chipmem_wput_indirect (dstp, dstd); if (totald != 0) b->blitzero = 0; } void blitdofast_ea (uaecptr pta, uaecptr ptb, uaecptr ptc, uaecptr ptd, struct bltinfo *b) { int i,j; uae_u32 totald = 0; uae_u32 preva = 0; uae_u32 prevb = 0, srcb = b->bltbhold; uae_u32 srcc = b->bltcdat; uae_u32 dstd=0; uaecptr dstp = 0; for (j = b->vblitsize; j--; ) { for (i = 0; i < b->hblitsize; i++) { uae_u32 bltadat, srca; if (ptc) { srcc = chipmem_wget_indirect (ptc); ptc += 2; } if (ptb) { uae_u32 bltbdat = blt_info.bltbdat = chipmem_wget_indirect (ptb); ptb += 2; srcb = (((uae_u32)prevb << 16) | bltbdat) >> b->blitbshift; prevb = bltbdat; } if (pta) { bltadat = blt_info.bltadat = chipmem_wget_indirect (pta); pta += 2; } else { bltadat = blt_info.bltadat; } bltadat &= blit_masktable[i]; srca = (((uae_u32)preva << 16) | bltadat) >> b->blitashift; preva = bltadat; if (dstp) chipmem_wput_indirect (dstp, dstd); dstd = ((srcc | (srca & srcb))) & 0xFFFF; totald |= dstd; if (ptd) { dstp = ptd; ptd += 2; } } if (pta) pta += b->bltamod; if (ptb) ptb += b->bltbmod; if (ptc) ptc += b->bltcmod; if (ptd) ptd += b->bltdmod; } b->bltbhold = srcb; b->bltcdat = srcc; if (dstp) chipmem_wput_indirect (dstp, dstd); if (totald != 0) b->blitzero = 0; } void blitdofast_desc_ea (uaecptr pta, uaecptr ptb, uaecptr ptc, uaecptr ptd, struct bltinfo *b) { uae_u32 totald = 0; int i,j; uae_u32 preva = 0; uae_u32 prevb = 0, srcb = b->bltbhold; uae_u32 srcc = b->bltcdat; uae_u32 dstd = 0; uaecptr dstp = 0; for (j = b->vblitsize; j--; ) { for (i = 0; i < b->hblitsize; i++) { uae_u32 bltadat, srca; if (ptc) { srcc = chipmem_wget_indirect (ptc); ptc -= 2; } if (ptb) { uae_u32 bltbdat = blt_info.bltbdat = chipmem_wget_indirect (ptb); ptb -= 2; srcb = ((bltbdat << 16) | prevb) >> b->blitdownbshift; prevb = bltbdat; } if (pta) { bltadat = blt_info.bltadat = chipmem_wget_indirect (pta); pta -= 2; } else { bltadat = blt_info.bltadat; } bltadat &= blit_masktable[i]; srca = (((uae_u32)bltadat << 16) | preva) >> b->blitdownashift; preva = bltadat; if (dstp) chipmem_wput_indirect (dstp, dstd); dstd = ((srcc | (srca & srcb))) & 0xFFFF; totald |= dstd; if (ptd) { dstp = ptd; ptd -= 2; } } if (pta) pta -= b->bltamod; if (ptb) ptb -= b->bltbmod; if (ptc) ptc -= b->bltcmod; if (ptd) ptd -= b->bltdmod; } b->bltbhold = srcb; b->bltcdat = srcc; if (dstp) chipmem_wput_indirect (dstp, dstd); if (totald != 0) b->blitzero = 0; } void blitdofast_f0 (uaecptr pta, uaecptr ptb, uaecptr ptc, uaecptr ptd, struct bltinfo *b) { int i,j; uae_u32 totald = 0; uae_u32 preva = 0; uae_u32 dstd=0; uaecptr dstp = 0; for (j = b->vblitsize; j--; ) { for (i = 0; i < b->hblitsize; i++) { uae_u32 bltadat, srca; if (pta) { bltadat = blt_info.bltadat = chipmem_wget_indirect (pta); pta += 2; } else { bltadat = blt_info.bltadat; } bltadat &= blit_masktable[i]; srca = (((uae_u32)preva << 16) | bltadat) >> b->blitashift; preva = bltadat; if (dstp) chipmem_wput_indirect (dstp, dstd); dstd = (srca) & 0xFFFF; totald |= dstd; if (ptd) { dstp = ptd; ptd += 2; } } if (pta) pta += b->bltamod; if (ptd) ptd += b->bltdmod; } if (dstp) chipmem_wput_indirect (dstp, dstd); if (totald != 0) b->blitzero = 0; } void blitdofast_desc_f0 (uaecptr pta, uaecptr ptb, uaecptr ptc, uaecptr ptd, struct bltinfo *b) { uae_u32 totald = 0; int i,j; uae_u32 preva = 0; uae_u32 dstd = 0; uaecptr dstp = 0; for (j = b->vblitsize; j--; ) { for (i = 0; i < b->hblitsize; i++) { uae_u32 bltadat, srca; if (pta) { bltadat = blt_info.bltadat = chipmem_wget_indirect (pta); pta -= 2; } else { bltadat = blt_info.bltadat; } bltadat &= blit_masktable[i]; srca = (((uae_u32)bltadat << 16) | preva) >> b->blitdownashift; preva = bltadat; if (dstp) chipmem_wput_indirect (dstp, dstd); dstd = (srca) & 0xFFFF; totald |= dstd; if (ptd) { dstp = ptd; ptd -= 2; } } if (pta) pta -= b->bltamod; if (ptd) ptd -= b->bltdmod; } if (dstp) chipmem_wput_indirect (dstp, dstd); if (totald != 0) b->blitzero = 0; } void blitdofast_fa (uaecptr pta, uaecptr ptb, uaecptr ptc, uaecptr ptd, struct bltinfo *b) { int i,j; uae_u32 totald = 0; uae_u32 preva = 0; uae_u32 srcc = b->bltcdat; uae_u32 dstd=0; uaecptr dstp = 0; for (j = b->vblitsize; j--; ) { for (i = 0; i < b->hblitsize; i++) { uae_u32 bltadat, srca; if (ptc) { srcc = chipmem_wget_indirect (ptc); ptc += 2; } if (pta) { bltadat = blt_info.bltadat = chipmem_wget_indirect (pta); pta += 2; } else { bltadat = blt_info.bltadat; } bltadat &= blit_masktable[i]; srca = (((uae_u32)preva << 16) | bltadat) >> b->blitashift; preva = bltadat; if (dstp) chipmem_wput_indirect (dstp, dstd); dstd = ((srca | srcc)) & 0xFFFF; totald |= dstd; if (ptd) { dstp = ptd; ptd += 2; } } if (pta) pta += b->bltamod; if (ptc) ptc += b->bltcmod; if (ptd) ptd += b->bltdmod; } b->bltcdat = srcc; if (dstp) chipmem_wput_indirect (dstp, dstd); if (totald != 0) b->blitzero = 0; } void blitdofast_desc_fa (uaecptr pta, uaecptr ptb, uaecptr ptc, uaecptr ptd, struct bltinfo *b) { uae_u32 totald = 0; int i,j; uae_u32 preva = 0; uae_u32 srcc = b->bltcdat; uae_u32 dstd = 0; uaecptr dstp = 0; for (j = b->vblitsize; j--; ) { for (i = 0; i < b->hblitsize; i++) { uae_u32 bltadat, srca; if (ptc) { srcc = chipmem_wget_indirect (ptc); ptc -= 2; } if (pta) { bltadat = blt_info.bltadat = chipmem_wget_indirect (pta); pta -= 2; } else { bltadat = blt_info.bltadat; } bltadat &= blit_masktable[i]; srca = (((uae_u32)bltadat << 16) | preva) >> b->blitdownashift; preva = bltadat; if (dstp) chipmem_wput_indirect (dstp, dstd); dstd = ((srca | srcc)) & 0xFFFF; totald |= dstd; if (ptd) { dstp = ptd; ptd -= 2; } } if (pta) pta -= b->bltamod; if (ptc) ptc -= b->bltcmod; if (ptd) ptd -= b->bltdmod; } b->bltcdat = srcc; if (dstp) chipmem_wput_indirect (dstp, dstd); if (totald != 0) b->blitzero = 0; } void blitdofast_fc (uaecptr pta, uaecptr ptb, uaecptr ptc, uaecptr ptd, struct bltinfo *b) { int i,j; uae_u32 totald = 0; uae_u32 preva = 0; uae_u32 prevb = 0, srcb = b->bltbhold; uae_u32 dstd=0; uaecptr dstp = 0; for (j = b->vblitsize; j--; ) { for (i = 0; i < b->hblitsize; i++) { uae_u32 bltadat, srca; if (ptb) { uae_u32 bltbdat = blt_info.bltbdat = chipmem_wget_indirect (ptb); ptb += 2; srcb = (((uae_u32)prevb << 16) | bltbdat) >> b->blitbshift; prevb = bltbdat; } if (pta) { bltadat = blt_info.bltadat = chipmem_wget_indirect (pta); pta += 2; } else { bltadat = blt_info.bltadat; } bltadat &= blit_masktable[i]; srca = (((uae_u32)preva << 16) | bltadat) >> b->blitashift; preva = bltadat; if (dstp) chipmem_wput_indirect (dstp, dstd); dstd = ((srca | srcb)) & 0xFFFF; totald |= dstd; if (ptd) { dstp = ptd; ptd += 2; } } if (pta) pta += b->bltamod; if (ptb) ptb += b->bltbmod; if (ptd) ptd += b->bltdmod; } b->bltbhold = srcb; if (dstp) chipmem_wput_indirect (dstp, dstd); if (totald != 0) b->blitzero = 0; } void blitdofast_desc_fc (uaecptr pta, uaecptr ptb, uaecptr ptc, uaecptr ptd, struct bltinfo *b) { uae_u32 totald = 0; int i,j; uae_u32 preva = 0; uae_u32 prevb = 0, srcb = b->bltbhold; uae_u32 dstd = 0; uaecptr dstp = 0; for (j = b->vblitsize; j--; ) { for (i = 0; i < b->hblitsize; i++) { uae_u32 bltadat, srca; if (ptb) { uae_u32 bltbdat = blt_info.bltbdat = chipmem_wget_indirect (ptb); ptb -= 2; srcb = ((bltbdat << 16) | prevb) >> b->blitdownbshift; prevb = bltbdat; } if (pta) { bltadat = blt_info.bltadat = chipmem_wget_indirect (pta); pta -= 2; } else { bltadat = blt_info.bltadat; } bltadat &= blit_masktable[i]; srca = (((uae_u32)bltadat << 16) | preva) >> b->blitdownashift; preva = bltadat; if (dstp) chipmem_wput_indirect (dstp, dstd); dstd = ((srca | srcb)) & 0xFFFF; totald |= dstd; if (ptd) { dstp = ptd; ptd -= 2; } } if (pta) pta -= b->bltamod; if (ptb) ptb -= b->bltbmod; if (ptd) ptd -= b->bltdmod; } b->bltbhold = srcb; if (dstp) chipmem_wput_indirect (dstp, dstd); if (totald != 0) b->blitzero = 0; } fs-uae-2.2.3+dfsg/licenses/0000755000175000017500000000000012162366653015660 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/licenses/libintl.txt0000644000175000017500000006131312162366653020062 0ustar glaubitzglaubitz GNU LIBRARY GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1991 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the library GPL. It is numbered 2 because it goes with version 2 of the ordinary GPL.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Library General Public License, applies to some specially designated Free Software Foundation software, and to any other libraries whose authors decide to use it. You can use it for your libraries, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library, or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link a program with the library, you must provide complete object files to the recipients so that they can relink them with the library, after making changes to the library and recompiling it. And you must show them these terms so they know their rights. Our method of protecting your rights has two steps: (1) copyright the library, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the library. Also, for each distributor's protection, we want to make certain that everyone understands that there is no warranty for this free library. If the library is modified by someone else and passed on, we want its recipients to know that what they have is not the original version, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that companies distributing free software will individually obtain patent licenses, thus in effect transforming the program into proprietary software. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License, which was designed for utility programs. This license, the GNU Library General Public License, applies to certain designated libraries. This license is quite different from the ordinary one; be sure to read it in full, and don't assume that anything in it is the same as in the ordinary license. The reason we have a separate public license for some libraries is that they blur the distinction we usually make between modifying or adding to a program and simply using it. Linking a program with a library, without changing the library, is in some sense simply using the library, and is analogous to running a utility program or application program. However, in a textual and legal sense, the linked executable is a combined work, a derivative of the original library, and the ordinary General Public License treats it as such. Because of this blurred distinction, using the ordinary General Public License for libraries did not effectively promote software sharing, because most developers did not use the libraries. We concluded that weaker conditions might promote sharing better. However, unrestricted linking of non-free programs would deprive the users of those programs of all benefit from the free status of the libraries themselves. This Library General Public License is intended to permit developers of non-free programs to use free libraries, while preserving your freedom as a user of such programs to change the free libraries that are incorporated in them. (We have not seen how to achieve this as regards changes in header files, but we have achieved it as regards changes in the actual functions of the Library.) The hope is that this will lead to faster development of free libraries. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, while the latter only works together with the library. Note that it is possible for a library to be covered by the ordinary General Public License rather than by this special one. GNU LIBRARY GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Library General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also compile or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. c) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. d) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Library General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS Appendix: How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! fs-uae-2.2.3+dfsg/licenses/lua.txt0000644000175000017500000000205412162366653017203 0ustar glaubitzglaubitzCopyright © 1994–2012 Lua.org, PUC-Rio. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. fs-uae-2.2.3+dfsg/licenses/glib.txt0000644000175000017500000006131412162366653017343 0ustar glaubitzglaubitz GNU LIBRARY GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the library GPL. It is numbered 2 because it goes with version 2 of the ordinary GPL.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Library General Public License, applies to some specially designated Free Software Foundation software, and to any other libraries whose authors decide to use it. You can use it for your libraries, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library, or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link a program with the library, you must provide complete object files to the recipients so that they can relink them with the library, after making changes to the library and recompiling it. And you must show them these terms so they know their rights. Our method of protecting your rights has two steps: (1) copyright the library, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the library. Also, for each distributor's protection, we want to make certain that everyone understands that there is no warranty for this free library. If the library is modified by someone else and passed on, we want its recipients to know that what they have is not the original version, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that companies distributing free software will individually obtain patent licenses, thus in effect transforming the program into proprietary software. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License, which was designed for utility programs. This license, the GNU Library General Public License, applies to certain designated libraries. This license is quite different from the ordinary one; be sure to read it in full, and don't assume that anything in it is the same as in the ordinary license. The reason we have a separate public license for some libraries is that they blur the distinction we usually make between modifying or adding to a program and simply using it. Linking a program with a library, without changing the library, is in some sense simply using the library, and is analogous to running a utility program or application program. However, in a textual and legal sense, the linked executable is a combined work, a derivative of the original library, and the ordinary General Public License treats it as such. Because of this blurred distinction, using the ordinary General Public License for libraries did not effectively promote software sharing, because most developers did not use the libraries. We concluded that weaker conditions might promote sharing better. However, unrestricted linking of non-free programs would deprive the users of those programs of all benefit from the free status of the libraries themselves. This Library General Public License is intended to permit developers of non-free programs to use free libraries, while preserving your freedom as a user of such programs to change the free libraries that are incorporated in them. (We have not seen how to achieve this as regards changes in header files, but we have achieved it as regards changes in the actual functions of the Library.) The hope is that this will lead to faster development of free libraries. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, while the latter only works together with the library. Note that it is possible for a library to be covered by the ordinary General Public License rather than by this special one. GNU LIBRARY GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Library General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also compile or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. c) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. d) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Library General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307 USA. Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! fs-uae-2.2.3+dfsg/licenses/libgcc.txt0000644000175000017500000000637312162366653017655 0ustar glaubitzglaubitzGCC RUNTIME LIBRARY EXCEPTION Version 3.1, 31 March 2009 Copyright (C) 2009 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. This GCC Runtime Library Exception ("Exception") is an additional permission under section 7 of the GNU General Public License, version 3 ("GPLv3"). It applies to a given file (the "Runtime Library") that bears a notice placed by the copyright holder of the file stating that the file is governed by GPLv3 along with this Exception. When you use GCC to compile a program, GCC may combine portions of certain GCC header files and runtime libraries with the compiled program. The purpose of this Exception is to allow compilation of non-GPL (including proprietary) programs to use, in this way, the header files and runtime libraries covered by this Exception. 0. Definitions. A file is an "Independent Module" if it either requires the Runtime Library for execution after a Compilation Process, or makes use of an interface provided by the Runtime Library, but is not otherwise based on the Runtime Library. "GCC" means a version of the GNU Compiler Collection, with or without modifications, governed by version 3 (or a specified later version) of the GNU General Public License (GPL) with the option of using any subsequent versions published by the FSF. "GPL-compatible Software" is software whose conditions of propagation, modification and use would permit combination with GCC in accord with the license of GCC. "Target Code" refers to output from any compiler for a real or virtual target processor architecture, in executable form or suitable for input to an assembler, loader, linker and/or execution phase. Notwithstanding that, Target Code does not include data in any format that is used as a compiler intermediate representation, or used for producing a compiler intermediate representation. The "Compilation Process" transforms code entirely represented in non-intermediate languages designed for human-written code, and/or in Java Virtual Machine byte code, into Target Code. Thus, for example, use of source code generators and preprocessors need not be considered part of the Compilation Process, since the Compilation Process can be understood as starting with the output of the generators or preprocessors. A Compilation Process is "Eligible" if it is done using GCC, alone or with other GPL-compatible software, or if it is done without using any work based on GCC. For example, using non-GPL-compatible Software to optimize any GCC intermediate representations would not qualify as an Eligible Compilation Process. 1. Grant of Additional Permission. You have permission to propagate a work of Target Code formed by combining the Runtime Library with Independent Modules, even if such propagation would otherwise violate the terms of GPLv3, provided that all Target Code was generated by Eligible Compilation Processes. You may then convey such a combination under terms of your choice, consistent with the licensing of the Independent Modules. 2. No Weakening of GCC Copyleft. The availability of this Exception does not imply any general presumption that third-party software is unaffected by the copyleft requirements of the license of GCC. fs-uae-2.2.3+dfsg/licenses/libstdc++.txt0000644000175000017500000000637312162366653020204 0ustar glaubitzglaubitzGCC RUNTIME LIBRARY EXCEPTION Version 3.1, 31 March 2009 Copyright (C) 2009 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. This GCC Runtime Library Exception ("Exception") is an additional permission under section 7 of the GNU General Public License, version 3 ("GPLv3"). It applies to a given file (the "Runtime Library") that bears a notice placed by the copyright holder of the file stating that the file is governed by GPLv3 along with this Exception. When you use GCC to compile a program, GCC may combine portions of certain GCC header files and runtime libraries with the compiled program. The purpose of this Exception is to allow compilation of non-GPL (including proprietary) programs to use, in this way, the header files and runtime libraries covered by this Exception. 0. Definitions. A file is an "Independent Module" if it either requires the Runtime Library for execution after a Compilation Process, or makes use of an interface provided by the Runtime Library, but is not otherwise based on the Runtime Library. "GCC" means a version of the GNU Compiler Collection, with or without modifications, governed by version 3 (or a specified later version) of the GNU General Public License (GPL) with the option of using any subsequent versions published by the FSF. "GPL-compatible Software" is software whose conditions of propagation, modification and use would permit combination with GCC in accord with the license of GCC. "Target Code" refers to output from any compiler for a real or virtual target processor architecture, in executable form or suitable for input to an assembler, loader, linker and/or execution phase. Notwithstanding that, Target Code does not include data in any format that is used as a compiler intermediate representation, or used for producing a compiler intermediate representation. The "Compilation Process" transforms code entirely represented in non-intermediate languages designed for human-written code, and/or in Java Virtual Machine byte code, into Target Code. Thus, for example, use of source code generators and preprocessors need not be considered part of the Compilation Process, since the Compilation Process can be understood as starting with the output of the generators or preprocessors. A Compilation Process is "Eligible" if it is done using GCC, alone or with other GPL-compatible software, or if it is done without using any work based on GCC. For example, using non-GPL-compatible Software to optimize any GCC intermediate representations would not qualify as an Eligible Compilation Process. 1. Grant of Additional Permission. You have permission to propagate a work of Target Code formed by combining the Runtime Library with Independent Modules, even if such propagation would otherwise violate the terms of GPLv3, provided that all Target Code was generated by Eligible Compilation Processes. You may then convey such a combination under terms of your choice, consistent with the licensing of the Independent Modules. 2. No Weakening of GCC Copyleft. The availability of this Exception does not imply any general presumption that third-party software is unaffected by the copyleft requirements of the license of GCC. fs-uae-2.2.3+dfsg/licenses/zlib.txt0000644000175000017500000001210112162366653017354 0ustar glaubitzglaubitzZLIB DATA COMPRESSION LIBRARY zlib 1.2.6 is a general purpose data compression library. All the code is thread safe. The data format used by the zlib library is described by RFCs (Request for Comments) 1950 to 1952 in the files http://tools.ietf.org/html/rfc1950 (zlib format), rfc1951 (deflate format) and rfc1952 (gzip format). All functions of the compression library are documented in the file zlib.h (volunteer to write man pages welcome, contact zlib@gzip.org). A usage example of the library is given in the file test/example.c which also tests that the library is working correctly. Another example is given in the file test/minigzip.c. The compression library itself is composed of all source files in the root directory. To compile all files and run the test program, follow the instructions given at the top of Makefile.in. In short "./configure; make test", and if that goes well, "make install" should work for most flavors of Unix. For Windows, use one of the special makefiles in win32/ or contrib/vstudio/ . For VMS, use make_vms.com. Questions about zlib should be sent to , or to Gilles Vollant for the Windows DLL version. The zlib home page is http://zlib.net/ . Before reporting a problem, please check this site to verify that you have the latest version of zlib; otherwise get the latest version and check whether the problem still exists or not. PLEASE read the zlib FAQ http://zlib.net/zlib_faq.html before asking for help. Mark Nelson wrote an article about zlib for the Jan. 1997 issue of Dr. Dobb's Journal; a copy of the article is available at http://marknelson.us/1997/01/01/zlib-engine/ . The changes made in version 1.2.6 are documented in the file ChangeLog. Unsupported third party contributions are provided in directory contrib/ . zlib is available in Java using the java.util.zip package, documented at http://java.sun.com/developer/technicalArticles/Programming/compression/ . A Perl interface to zlib written by Paul Marquess is available at CPAN (Comprehensive Perl Archive Network) sites, including http://search.cpan.org/~pmqs/IO-Compress-Zlib/ . A Python interface to zlib written by A.M. Kuchling is available in Python 1.5 and later versions, see http://docs.python.org/library/zlib.html . zlib is built into tcl: http://wiki.tcl.tk/4610 . An experimental package to read and write files in .zip format, written on top of zlib by Gilles Vollant , is available in the contrib/minizip directory of zlib. Notes for some targets: - For Windows DLL versions, please see win32/DLL_FAQ.txt - For 64-bit Irix, deflate.c must be compiled without any optimization. With -O, one libpng test fails. The test works in 32 bit mode (with the -n32 compiler flag). The compiler bug has been reported to SGI. - zlib doesn't work with gcc 2.6.3 on a DEC 3000/300LX under OSF/1 2.1 it works when compiled with cc. - On Digital Unix 4.0D (formely OSF/1) on AlphaServer, the cc option -std1 is necessary to get gzprintf working correctly. This is done by configure. - zlib doesn't work on HP-UX 9.05 with some versions of /bin/cc. It works with other compilers. Use "make test" to check your compiler. - gzdopen is not supported on RISCOS or BEOS. - For PalmOs, see http://palmzlib.sourceforge.net/ Acknowledgments: The deflate format used by zlib was defined by Phil Katz. The deflate and zlib specifications were written by L. Peter Deutsch. Thanks to all the people who reported problems and suggested various improvements in zlib; they are too numerous to cite here. Copyright notice: (C) 1995-2012 Jean-loup Gailly and Mark Adler This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. Jean-loup Gailly Mark Adler jloup@gzip.org madler@alumni.caltech.edu If you use the zlib library in a product, we would appreciate *not* receiving lengthy legal documents to sign. The sources are provided for free but without warranty of any kind. The library has been entirely written by Jean-loup Gailly and Mark Adler; it does not include third-party code. If you redistribute modified sources, we would appreciate that you include in the file ChangeLog history information documenting your changes. Please read the FAQ for more information on the distribution of modified source versions. fs-uae-2.2.3+dfsg/licenses/ipflib.txt0000644000175000017500000000657412162366653017702 0ustar glaubitzglaubitzThis licence is based on the MAME licence and is intended for use in all non-commercial projects and environments. Other licensing options are available. Don't hesitate - please contact us at licensing@kryoflux.com. LICENCE Redistribution and use of the IPF DECODER LIBRARY (CLL; "CAPSImage", "CAPSImg", etc.) code or any derivative works are permitted provided that the following conditions are met: - Redistributions may not be sold, nor may they be used in a commercial product or activity. - Redistributions that are modified from the original source must include the complete source code, including the source code for all components used by a binary built from the modified sources. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. - Redistributions must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. COPYRIGHT IPF DECODER LIBRARY Copyright (c) 2001-2011 by István Fábián; additional work by Christian Sauer, under exclusive licence to KryoFlux Products & Services Ltd. COMMON QUESTIONS Q. Can I include the IPF DECODER LIBRARY with my product? A. No. The IPF DECODER LIBRARY is not licensed for commercial use. Using IPF DECODER LIBRARY as a "freebie" or including it at "no cost" with your product still constitutes commerical usage and is forbidden by the licence. Q. Can I sell my product with the IPF DECODER LIBRARY or associated logos (e.g. SPS) on it? A. No. Putting the name or logo on your product makes it appear that the product is something officially endorsed. Q. Can I use the IPF DECODER LIBRARY or the SPS logo to advertise my product? A. No. Using the name or logo in your advertising makes it appear that the product is something officially endorsed. Q. Can I use the term "IPF DECODER LIBRARY" in the name of my software? A. Generally, no, especially if it is something that is sold. However, if you are producing a free IPF DECODER LIBRARY-related piece of software, it is common that permission is granted. Send a query to double-check first, please. Q. Can I ask for donations for the work I did on my port of IPF DECODER LIBRARY to platform X? A. No. You would be earning money from the IPF DECODER LIBRARY trademark and copyrights, and that would be a commercial use, which is prohibited by the licence. It is our wish that IPF DECODER LIBRARY remains free. fs-uae-2.2.3+dfsg/licenses/libpng.txt0000644000175000017500000001015012162366653017671 0ustar glaubitzglaubitz This copy of the libpng notices is provided for your convenience. In case of any discrepancy between this copy and the notices in the file png.h that is included in the libpng distribution, the latter shall prevail. COPYRIGHT NOTICE, DISCLAIMER, and LICENSE: If you modify libpng you may insert additional notices immediately following this sentence. This code is released under the libpng license. libpng versions 1.2.6, August 15, 2004, through 1.5.8, February 1, 2012, are Copyright (c) 2004, 2006-2011 Glenn Randers-Pehrson, and are distributed according to the same disclaimer and license as libpng-1.2.5 with the following individual added to the list of Contributing Authors Cosmin Truta libpng versions 1.0.7, July 1, 2000, through 1.2.5 - October 3, 2002, are Copyright (c) 2000-2002 Glenn Randers-Pehrson, and are distributed according to the same disclaimer and license as libpng-1.0.6 with the following individuals added to the list of Contributing Authors Simon-Pierre Cadieux Eric S. Raymond Gilles Vollant and with the following additions to the disclaimer: There is no warranty against interference with your enjoyment of the library or against infringement. There is no warranty that our efforts or the library will fulfill any of your particular purposes or needs. This library is provided with all faults, and the entire risk of satisfactory quality, performance, accuracy, and effort is with the user. libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are Copyright (c) 1998, 1999 Glenn Randers-Pehrson, and are distributed according to the same disclaimer and license as libpng-0.96, with the following individuals added to the list of Contributing Authors: Tom Lane Glenn Randers-Pehrson Willem van Schaik libpng versions 0.89, June 1996, through 0.96, May 1997, are Copyright (c) 1996, 1997 Andreas Dilger Distributed according to the same disclaimer and license as libpng-0.88, with the following individuals added to the list of Contributing Authors: John Bowler Kevin Bracey Sam Bushell Magnus Holmgren Greg Roelofs Tom Tanner libpng versions 0.5, May 1995, through 0.88, January 1996, are Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc. For the purposes of this copyright and license, "Contributing Authors" is defined as the following set of individuals: Andreas Dilger Dave Martindale Guy Eric Schalnat Paul Schmidt Tim Wegner The PNG Reference Library is supplied "AS IS". The Contributing Authors and Group 42, Inc. disclaim all warranties, expressed or implied, including, without limitation, the warranties of merchantability and of fitness for any purpose. The Contributing Authors and Group 42, Inc. assume no liability for direct, indirect, incidental, special, exemplary, or consequential damages, which may result from the use of the PNG Reference Library, even if advised of the possibility of such damage. Permission is hereby granted to use, copy, modify, and distribute this source code, or portions hereof, for any purpose, without fee, subject to the following restrictions: 1. The origin of this source code must not be misrepresented. 2. Altered versions must be plainly marked as such and must not be misrepresented as being the original source. 3. This Copyright notice may not be removed or altered from any source or altered source distribution. The Contributing Authors and Group 42, Inc. specifically permit, without fee, and encourage the use of this source code as a component to supporting the PNG file format in commercial products. If you use this source code in a product, acknowledgment is not required but would be appreciated. A "png_get_copyright" function is available, for convenient use in "about" boxes and the like: printf("%s",png_get_copyright(NULL)); Also, the PNG logo (in PNG format, of course) is supplied in the files "pngbar.png" and "pngbar.jpg (88x31) and "pngnow.png" (98x31). Libpng is OSI Certified Open Source Software. OSI Certified Open Source is a certification mark of the Open Source Initiative. Glenn Randers-Pehrson glennrp at users.sourceforge.net February 1, 2012 fs-uae-2.2.3+dfsg/licenses/fs-uae.txt0000644000175000017500000004325412162366653017611 0ustar glaubitzglaubitz GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. fs-uae-2.2.3+dfsg/po/0000755000175000017500000000000012162366654014472 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/po/hu.po0000644000175000017500000001033412162366654015447 0ustar glaubitzglaubitz# Hungarian translations for fs-uae package. # Copyright (C) 2012 Frode Solheim and translators. # This file is distributed under the same license as the fs-uae package. # Frode Solheim , 2012. # msgid "" msgstr "" "Project-Id-Version: fs-uae\n" "Report-Msgid-Bugs-To: fs-uae@fengestad.no\n" "POT-Creation-Date: 2013-06-25 21:21+0200\n" "PO-Revision-Date: 2012-11-10 16:11+0100\n" "Last-Translator: Frode Solheim \n" "Language-Team: Hungarian\n" "Language: hu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" msgid "Activated debugger" msgstr "" msgid "Amiga Control" msgstr "" #. / TRANSLATORS: In context "Zoom: Auto" msgid "Auto" msgstr "" msgid "Auto-Fire is Off" msgstr "" msgid "Auto-Fire is On" msgstr "" #, c-format msgid "Auto-fire disabled for port %d" msgstr "" #, c-format msgid "Auto-fire enabled for port %d" msgstr "" #. / TRANSLATORS: Empty or nothing #, c-format msgid "CD%d: Empty" msgstr "" msgid "CD32 Pad Mode" msgstr "" #. / TRANSLATORS: This is a menu entry and must not be too long msgid "Custom Joystick Port" msgstr "" msgid "Custom Mode" msgstr "" #. / TRANSLATORS: Empty or nothing #, c-format msgid "DF%d: Empty" msgstr "" msgid "Disabled" msgstr "" msgid "Eject" msgstr "" msgid "Empty" msgstr "" msgid "Emulator Control" msgstr "" #. / TRANSLATORS: In context "Zoom: Full Frame" msgid "Full Frame" msgstr "" #, c-format msgid "HD not found: %s" msgstr "" #. / TRANSLATORS: Hard reset is a computer reboot with an emulated power #. / cycle msgid "Hard Reset" msgstr "" msgid "Input Options" msgstr "" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Insert Into CD%d" msgstr "" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Insert Into DF%d" msgstr "" msgid "Invalid number of CD-ROM drives specified" msgstr "" msgid "Joystick Mode" msgstr "" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Joystick Port %d" msgstr "" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Joystick Port %d Device" msgstr "" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Joystick Port %d Mode" msgstr "" msgid "Joystick Port 0" msgstr "" msgid "Joystick Port 1" msgstr "" msgid "Joystick Port 2" msgstr "" msgid "Joystick Port 3" msgstr "" msgid "Joystick Port 4" msgstr "" msgid "Joystick Ports" msgstr "" msgid "Keyboard" msgstr "" msgid "Load" msgstr "" msgid "More..." msgstr "" msgid "Mouse" msgstr "" msgid "Mouse Mode" msgstr "" #. / TRANSLATORS: This is a menu entry and must not be too long: If you struggle #. / to get in short enough, just translate "No Device" instead. msgid "No Amiga Device" msgstr "" #. / TRANSLATORS: This is a menu entry and must not be too long: If you struggle #. / to get in short enough, just translate "No Device" instead. msgid "No Host Device" msgstr "" msgid "No configuration file was found" msgstr "" #, c-format msgid "Option \"%s\" is not enabled" msgstr "" msgid "Option chip_memory must be a multiple of 512" msgstr "" msgid "Option fast_memory must be a multiple of 1024" msgstr "" msgid "Option slow_memory must be a multiple of 256" msgstr "" msgid "Option uaegfx.card needs a CPU with 32-bit addressing" msgstr "" msgid "Option zorro_iii_memory must be a multiple of 1024" msgstr "" msgid "Options zorro_iii_memory needs a CPU with 32-bit addressing" msgstr "" #. / TRANSLATORS: This is a menu entry and must not be too long msgid "Parallel Joystick Ports" msgstr "" msgid "Pause" msgstr "" #, c-format msgid "Port 0: %s" msgstr "" msgid "Port Settings" msgstr "" msgid "Removable Media" msgstr "" #. / TRANSLATORS: Reset Amiga as in reboot the computer msgid "Reset Amiga" msgstr "" msgid "Resume" msgstr "" msgid "Save" msgstr "" msgid "Save States" msgstr "" #. / TRANSLATORS: Soft reset reboots the computer without a power cycle msgid "Soft Reset" msgstr "" msgid "Warp mode disabled" msgstr "" msgid "Warp mode enabled" msgstr "" msgid "Zoom is disabled in RTG mode" msgstr "" #, c-format msgid "Zoom: %s" msgstr "" #, c-format msgid "Zoom: %s + Border" msgstr "" fs-uae-2.2.3+dfsg/po/nb.po0000644000175000017500000001307712162366654015441 0ustar glaubitzglaubitz# Norwegian Bokmal translations for fs-uae package. # Copyright (C) 2012 Frode Solheim and translators. # This file is distributed under the same license as the fs-uae package. # Frode Solheim , 2012. # msgid "" msgstr "" "Project-Id-Version: fs-uae\n" "Report-Msgid-Bugs-To: fs-uae@fengestad.no\n" "POT-Creation-Date: 2013-03-17 18:50+0100\n" "PO-Revision-Date: 2013-03-17 18:54+0100\n" "Last-Translator: Frode Solheim \n" "Language-Team: Norwegian Bokmal\n" "Language: nb\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" msgid "Activated debugger" msgstr "Debugger er aktivert" msgid "Amiga Control" msgstr "Amiga-styring" #. / TRANSLATORS: In context "Zoom: Auto" msgid "Auto" msgstr "Auto" msgid "Auto-Fire is Off" msgstr "Auto-fire er av" msgid "Auto-Fire is On" msgstr "Auto-fire er pÃ¥" #, c-format msgid "Auto-fire disabled for port %d" msgstr "Auto-fire for port %d er av" #, c-format msgid "Auto-fire enabled for port %d" msgstr "Auto-fire for port %d er pÃ¥" #. / TRANSLATORS: Empty or nothing #, c-format msgid "CD%d: Empty" msgstr "CD%d: Tom" msgid "CD32 Pad Mode" msgstr "CD32-modus" #. / TRANSLATORS: This is a menu entry and must not be too long msgid "Custom Joystick Port" msgstr "Egendefinert joystick-port" msgid "Custom Mode" msgstr "Egendefinert modus" #. / TRANSLATORS: Empty or nothing #, c-format msgid "DF%d: Empty" msgstr "DF%d: Tom" msgid "Disabled" msgstr "Deaktivert" msgid "Eject" msgstr "Løs ut" msgid "Empty" msgstr "Tom" msgid "Emulator Control" msgstr "Emulator-styring" #. / TRANSLATORS: In context "Zoom: Full Frame" msgid "Full Frame" msgstr "Fullformat" #, c-format msgid "HD not found: %s" msgstr "Fann ikke HD: %s" #. / TRANSLATORS: Hard reset is a computer reboot with an emulated power #. / cycle msgid "Hard Reset" msgstr "Kald omstart" msgid "Input Options" msgstr "Inngangsalternativer" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Insert Into CD%d" msgstr "Sett inn i CD%d" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Insert Into DF%d" msgstr "Sett inn i DF%d" msgid "Invalid number of CD-ROM drives specified" msgstr "Ugyldig antall CD-ROM-stasjoner spesifisert" msgid "Joystick Mode" msgstr "Joystick-modus" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Joystick Port %d" msgstr "Joystick-port %d" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Joystick Port %d Device" msgstr "Enhet i port %d" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Joystick Port %d Mode" msgstr "Modus for port %d" msgid "Joystick Port 0" msgstr "Joystick-port 0" msgid "Joystick Port 1" msgstr "Joystick-port 1" msgid "Joystick Port 2" msgstr "Joystick-port 2" msgid "Joystick Port 3" msgstr "Joystick-port 3" msgid "Joystick Port 4" msgstr "Joystick-port 4" msgid "Joystick Ports" msgstr "Joystick-porter" msgid "Keyboard" msgstr "Tastatur" msgid "Load" msgstr "Last inn" msgid "More..." msgstr "Mer..." msgid "Mouse" msgstr "Mus" msgid "Mouse Mode" msgstr "Mus-modus" #. / TRANSLATORS: This is a menu entry and must not be too long: If you struggle #. / to get in short enough, just translate "No Device" instead. msgid "No Amiga Device" msgstr "Ingen Amiga-enhet" #. / TRANSLATORS: This is a menu entry and must not be too long: If you struggle #. / to get in short enough, just translate "No Device" instead. msgid "No Host Device" msgstr "Ingen vertsenhet" msgid "No configuration file was found" msgstr "Ingen konfigurasjonsfil funnet" #, c-format msgid "Option \"%s\" is not enabled" msgstr "Instillingen \"%s\" er ikke aktivert" msgid "Option chip_memory must be a multiple of 512" msgstr "Instillingen chip_memory mÃ¥ være multiplum av 512" msgid "Option fast_memory must be a multiple of 1024" msgstr "Instillingen fast_memory mÃ¥ være multiplum av 1024" msgid "Option slow_memory must be a multiple of 256" msgstr "Instillingen slow_memory mÃ¥ være multiplum av 256" msgid "Option uaegfx.card needs a CPU with 32-bit addressing" msgstr "Instillingen uaegfx.card trenger en CPU med 32-bits adressering" msgid "Option zorro_iii_memory must be a multiple of 1024" msgstr "Instillingen zorro_iii_memory mÃ¥ være multiplum av 1024" msgid "Options zorro_iii_memory needs a CPU with 32-bit addressing" msgstr "Instillingen zorro_iii_memory trenger en CPU med 32-bits adressering" #. / TRANSLATORS: This is a menu entry and must not be too long msgid "Parallel Joystick Ports" msgstr "Parallellport-joysticker" msgid "Pause" msgstr "Pause" #, c-format msgid "Port 0: %s" msgstr "Port 0: %s" msgid "Port Settings" msgstr "Port-innstillinger" msgid "Removable Media" msgstr "Flyttbare medier" #. / TRANSLATORS: Reset Amiga as in reboot the computer msgid "Reset Amiga" msgstr "Omstart av Amiga" msgid "Resume" msgstr "Fortsett" msgid "Save" msgstr "Lagre" msgid "Save States" msgstr "Lagrede tilstander" #. / TRANSLATORS: Soft reset reboots the computer without a power cycle msgid "Soft Reset" msgstr "Myk omstart" msgid "Warp mode disabled" msgstr "Hurtig-modus deaktivert" msgid "Warp mode enabled" msgstr "Hurtig-modus aktivert" msgid "Zoom is disabled in RTG mode" msgstr "Zoom er utilgjengelig i RTG-modus" #, c-format msgid "Zoom: %s" msgstr "Zoom: %s" #, c-format msgid "Zoom: %s + Border" msgstr "Zoom: %s + ramme" #~ msgid "CD32 Gamepad" #~ msgstr "CD32-kontroll" #~ msgid "Host Device" #~ msgstr "Vertsenhet" #~ msgid "Joystick" #~ msgstr "Joystick" fs-uae-2.2.3+dfsg/po/pt_BR.po0000644000175000017500000001201012162366654016032 0ustar glaubitzglaubitz# Portuguese translations for fs-uae package. # Copyright (C) 2012 Frode Solheim and translators. # This file is distributed under the same license as the fs-uae package. # Frode Solheim , 2012. # msgid "" msgstr "" "Project-Id-Version: fs-uae\n" "Report-Msgid-Bugs-To: fs-uae@fengestad.no\n" "POT-Creation-Date: 2013-06-25 21:21+0200\n" "PO-Revision-Date: 2012-11-23 23:56-0000\n" "Last-Translator: Mário Mateus \n" "Language-Team: Portuguese\n" "Language: pt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 1.5.4\n" msgid "Activated debugger" msgstr "" msgid "Amiga Control" msgstr "Controlo do Amiga" #. / TRANSLATORS: In context "Zoom: Auto" msgid "Auto" msgstr "Auto" msgid "Auto-Fire is Off" msgstr "Auto-Fire está Desligado" msgid "Auto-Fire is On" msgstr "Auto-Fire está Ligado" #, c-format msgid "Auto-fire disabled for port %d" msgstr "Auto-Fire desligado na porta %d" #, c-format msgid "Auto-fire enabled for port %d" msgstr "Auto-Fire ligado na porta %d" #. / TRANSLATORS: Empty or nothing #, c-format msgid "CD%d: Empty" msgstr "CD%d: Vazio" msgid "CD32 Pad Mode" msgstr "Modo Gamepad CD32" #. / TRANSLATORS: This is a menu entry and must not be too long msgid "Custom Joystick Port" msgstr "" msgid "Custom Mode" msgstr "" #. / TRANSLATORS: Empty or nothing #, c-format msgid "DF%d: Empty" msgstr "DF%d: Vazia" msgid "Disabled" msgstr "Desligado" msgid "Eject" msgstr "Ejectar" msgid "Empty" msgstr "Vazio" msgid "Emulator Control" msgstr "Controlo do Emulador" #. / TRANSLATORS: In context "Zoom: Full Frame" msgid "Full Frame" msgstr "Ecrã Completo" #, c-format msgid "HD not found: %s" msgstr "" #. / TRANSLATORS: Hard reset is a computer reboot with an emulated power #. / cycle msgid "Hard Reset" msgstr "Reiniciar por hardware" msgid "Input Options" msgstr "Opções de entrada" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Insert Into CD%d" msgstr "Inserir em CD%d" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Insert Into DF%d" msgstr "Inserir em DF%d" msgid "Invalid number of CD-ROM drives specified" msgstr "" msgid "Joystick Mode" msgstr "Modo joystick" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Joystick Port %d" msgstr "Joystick porta %d" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Joystick Port %d Device" msgstr "Porta do dispositivo joystick %d" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Joystick Port %d Mode" msgstr "Porta do joystick em modo %d" msgid "Joystick Port 0" msgstr "Joystick porta 0" msgid "Joystick Port 1" msgstr "Joystick porta 1" msgid "Joystick Port 2" msgstr "Joystick porta 2" msgid "Joystick Port 3" msgstr "Joystick porta 3" msgid "Joystick Port 4" msgstr "" msgid "Joystick Ports" msgstr "Portas Joystick" msgid "Keyboard" msgstr "Teclado" msgid "Load" msgstr "Abrir" msgid "More..." msgstr "Mais..." msgid "Mouse" msgstr "Rato" msgid "Mouse Mode" msgstr "Modo Rato" #. / TRANSLATORS: This is a menu entry and must not be too long: If you struggle #. / to get in short enough, just translate "No Device" instead. msgid "No Amiga Device" msgstr "Nenhum dispositivo Amiga" #. / TRANSLATORS: This is a menu entry and must not be too long: If you struggle #. / to get in short enough, just translate "No Device" instead. msgid "No Host Device" msgstr "Nenhum dispositivo Host" msgid "No configuration file was found" msgstr "Nenhum ficheiro de configuração encontrado" #, c-format msgid "Option \"%s\" is not enabled" msgstr "" msgid "Option chip_memory must be a multiple of 512" msgstr "" msgid "Option fast_memory must be a multiple of 1024" msgstr "" msgid "Option slow_memory must be a multiple of 256" msgstr "" msgid "Option uaegfx.card needs a CPU with 32-bit addressing" msgstr "" msgid "Option zorro_iii_memory must be a multiple of 1024" msgstr "" msgid "Options zorro_iii_memory needs a CPU with 32-bit addressing" msgstr "" #. / TRANSLATORS: This is a menu entry and must not be too long msgid "Parallel Joystick Ports" msgstr "Joystick da porta paralela" msgid "Pause" msgstr "Pausar" #, c-format msgid "Port 0: %s" msgstr "" msgid "Port Settings" msgstr "Opções da porta" msgid "Removable Media" msgstr "Média Amovível" #. / TRANSLATORS: Reset Amiga as in reboot the computer msgid "Reset Amiga" msgstr "Reiniciar o Amiga" msgid "Resume" msgstr "Continuar" msgid "Save" msgstr "Guardar" msgid "Save States" msgstr "Guardar Estado" #. / TRANSLATORS: Soft reset reboots the computer without a power cycle msgid "Soft Reset" msgstr "Reiniciar por Software" msgid "Warp mode disabled" msgstr "" msgid "Warp mode enabled" msgstr "" msgid "Zoom is disabled in RTG mode" msgstr "Zoom está desactivado no modo RTG" #, c-format msgid "Zoom: %s" msgstr "Zoom: %s" #, c-format msgid "Zoom: %s + Border" msgstr "Zoom: %s + Margem" fs-uae-2.2.3+dfsg/po/fr.po0000644000175000017500000001333212162366654015443 0ustar glaubitzglaubitz# French translations for fs-uae package. # Copyright (C) 2012 Frode Solheim and translators. # This file is distributed under the same license as the fs-uae package. # Frode Solheim , 2012. # msgid "" msgstr "" "Project-Id-Version: FS-UAE\n" "Report-Msgid-Bugs-To: fs-uae@fengestad.no\n" "POT-Creation-Date: 2013-03-13 22:00+0100\n" "PO-Revision-Date: 2013-03-14 11:55+0100\n" "Last-Translator: Foul \n" "Language-Team: Foul \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "X-Poedit-Language: French\n" "X-Poedit-Country: FRANCE\n" msgid "Activated debugger" msgstr "Débogueur activé" msgid "Amiga Control" msgstr "Contrôles Amiga" #. / TRANSLATORS: In context "Zoom: Auto" msgid "Auto" msgstr "Auto" msgid "Auto-Fire is Off" msgstr "Tire-Auto Off" msgid "Auto-Fire is On" msgstr "Tire-Auto On" #, c-format msgid "Auto-fire disabled for port %d" msgstr "Tir-Auto désactivé pour le port %d" #, c-format msgid "Auto-fire enabled for port %d" msgstr "Tir-Auto activé pour le port %d" #. / TRANSLATORS: Empty or nothing #, c-format msgid "CD%d: Empty" msgstr "CD%d: Vide" msgid "CD32 Pad Mode" msgstr "Mode Pad CD32" #. / TRANSLATORS: This is a menu entry and must not be too long msgid "Custom Joystick Port" msgstr "Port Joystick personnalisé" msgid "Custom Mode" msgstr "Mode Personnalisé" #. / TRANSLATORS: Empty or nothing #, c-format msgid "DF%d: Empty" msgstr "DF%d: Vide" msgid "Disabled" msgstr "Désactivé" msgid "Eject" msgstr "Ejecter" msgid "Empty" msgstr "Vide" msgid "Emulator Control" msgstr "Contrôles Emulateur" #. / TRANSLATORS: In context "Zoom: Full Frame" msgid "Full Frame" msgstr "Plein Ecran" #, c-format msgid "HD not found: %s" msgstr "DD non trouvé: %s" #. / TRANSLATORS: Hard reset is a computer reboot with an emulated power #. / cycle msgid "Hard Reset" msgstr "Réinitialisation Matérielle" msgid "Input Options" msgstr "Options d'entrées" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Insert Into CD%d" msgstr "Insérez dans CD%d" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Insert Into DF%d" msgstr "Insérez dans DF%d" msgid "Invalid number of CD-ROM drives specified" msgstr "Nombre de lecteurs CD-ROM spécifié invalide" msgid "Joystick Mode" msgstr "Mode Joystick" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Joystick Port %d" msgstr "Port Joystick %d" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Joystick Port %d Device" msgstr "Périph. Port Joystick %d" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Joystick Port %d Mode" msgstr "Mode Port Joystick %d" msgid "Joystick Port 0" msgstr "Ports Joystick 0" msgid "Joystick Port 1" msgstr "Ports Joystick 1" msgid "Joystick Port 2" msgstr "Ports Joystick 2" msgid "Joystick Port 3" msgstr "Ports Joystick 3" msgid "Joystick Port 4" msgstr "Joystick Port 4" msgid "Joystick Ports" msgstr "Ports Joystick" msgid "Keyboard" msgstr "Clavier" msgid "Load" msgstr "Charger" msgid "More..." msgstr "Plus..." msgid "Mouse" msgstr "Souris" msgid "Mouse Mode" msgstr "Mode Souris" #. / TRANSLATORS: This is a menu entry and must not be too long: If you struggle #. / to get in short enough, just translate "No Device" instead. msgid "No Amiga Device" msgstr "Périph. Amiga Absent" #. / TRANSLATORS: This is a menu entry and must not be too long: If you struggle #. / to get in short enough, just translate "No Device" instead. msgid "No Host Device" msgstr "Périph. Hôte Absent" msgid "No configuration file was found" msgstr "Fichier de configuration absent" #, c-format msgid "Option \"%s\" is not enabled" msgstr "L'option \"%s\" n'est pas activé" msgid "Option chip_memory must be a multiple of 512" msgstr "L'option mémoire_chip doit être un multiple de 512" msgid "Option fast_memory must be a multiple of 1024" msgstr "L'option mémoire_fast doit être un multiple de 1024" msgid "Option slow_memory must be a multiple of 256" msgstr "L'option mémoire_slow doit être un multiple de 256" msgid "Option uaegfx.card needs a CPU with 32-bit addressing" msgstr "L'option uaegfx.card a besoin d'un CPU avec adressage 32 bits" msgid "Option zorro_iii_memory must be a multiple of 1024" msgstr "L'option mémoire_zorro_iii doit être un multiple de 1024" msgid "Options zorro_iii_memory needs a CPU with 32-bit addressing" msgstr "L'option mémoire_zorro_iii a besoin d'un CPU avec adressage 32 bits" #. / TRANSLATORS: This is a menu entry and must not be too long msgid "Parallel Joystick Ports" msgstr "Joystick Port Parallèle" msgid "Pause" msgstr "Pause" #, c-format msgid "Port 0: %s" msgstr "Port 0: %s" msgid "Port Settings" msgstr "Paramètres du port" msgid "Removable Media" msgstr "Supports Amovibles" #. / TRANSLATORS: Reset Amiga as in reboot the computer msgid "Reset Amiga" msgstr "Réinitialiser Amiga" msgid "Resume" msgstr "Reprendre" msgid "Save" msgstr "Sauvegarder" msgid "Save States" msgstr "Sauvegarder l’État" #. / TRANSLATORS: Soft reset reboots the computer without a power cycle msgid "Soft Reset" msgstr "Réinitialisation Logicielle" msgid "Warp mode disabled" msgstr "Mode Warp désactivé" msgid "Warp mode enabled" msgstr "Mode Warp activé" msgid "Zoom is disabled in RTG mode" msgstr "Zoom désactivé en mode RTG" #, c-format msgid "Zoom: %s" msgstr "Zoom: %s" #, c-format msgid "Zoom: %s + Border" msgstr "Zoom: %s + Bordure" #~ msgid "CD32 Gamepad" #~ msgstr "Gamepad CD32" #~ msgid "Host Device" #~ msgstr "Périphérique Hôte" #~ msgid "Joystick" #~ msgstr "Joystick" fs-uae-2.2.3+dfsg/po/it.po0000644000175000017500000001332612162366654015453 0ustar glaubitzglaubitz# Italian translations for fs-uae package. # Copyright (C) 2012 Frode Solheim and translators. # This file is distributed under the same license as the fs-uae package. # Frode Solheim , 2012. # msgid "" msgstr "" "Project-Id-Version: fs-uae\n" "Report-Msgid-Bugs-To: fs-uae@fengestad.no\n" "POT-Creation-Date: 2013-03-13 22:00+0100\n" "PO-Revision-Date: 2013-03-15 11:41+0100\n" "Last-Translator: Speedvicio \n" "Language-Team: Italian\n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 1.5.4\n" msgid "Activated debugger" msgstr "Attiva debugger" msgid "Amiga Control" msgstr "Controllo Amiga" #. / TRANSLATORS: In context "Zoom: Auto" msgid "Auto" msgstr "Auto" msgid "Auto-Fire is Off" msgstr "Auto-Fire Spento" msgid "Auto-Fire is On" msgstr "Auto-Fire Acceso" #, c-format msgid "Auto-fire disabled for port %d" msgstr "Auto-fire disabilitato su porta %d" #, c-format msgid "Auto-fire enabled for port %d" msgstr "Auto-fire abilitato su porta %d" #. / TRANSLATORS: Empty or nothing #, c-format msgid "CD%d: Empty" msgstr "CD%d: Vuoto" msgid "CD32 Pad Mode" msgstr "Modalità Pad CD32" #. / TRANSLATORS: This is a menu entry and must not be too long msgid "Custom Joystick Port" msgstr "Porta Joystick Personalizzata" msgid "Custom Mode" msgstr "Modalità Personalizzata" #. / TRANSLATORS: Empty or nothing #, c-format msgid "DF%d: Empty" msgstr "DF%d: Vuoto" msgid "Disabled" msgstr "Disabilita" msgid "Eject" msgstr "Espelli" msgid "Empty" msgstr "Vuoto" msgid "Emulator Control" msgstr "Controllo Emulatore" #. / TRANSLATORS: In context "Zoom: Full Frame" msgid "Full Frame" msgstr "Fotogramma Completo" #, c-format msgid "HD not found: %s" msgstr "HD non rilevabile: %s" #. / TRANSLATORS: Hard reset is a computer reboot with an emulated power #. / cycle msgid "Hard Reset" msgstr "Forza Riavvio" msgid "Input Options" msgstr "Opzioni Ingresso" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Insert Into CD%d" msgstr "Inserisci In CD%d" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Insert Into DF%d" msgstr "Inserisci In DF%d" msgid "Invalid number of CD-ROM drives specified" msgstr "Numero di drives CD-ROM specificati non validi" msgid "Joystick Mode" msgstr "Modalità Joystick" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Joystick Port %d" msgstr "Porta Joystick %d" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Joystick Port %d Device" msgstr "Porta Joystick %d Dispositivo" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Joystick Port %d Mode" msgstr "Porta Joystick %d Modalità" msgid "Joystick Port 0" msgstr "Porta Joystick 0" msgid "Joystick Port 1" msgstr "Porta Joystick 1" msgid "Joystick Port 2" msgstr "Porta Joystick 2" msgid "Joystick Port 3" msgstr "Porta Joystick 3" msgid "Joystick Port 4" msgstr "Porta Joystick 4" msgid "Joystick Ports" msgstr "Porte Joystick" msgid "Keyboard" msgstr "Tastiera" msgid "Load" msgstr "Carica" msgid "More..." msgstr "Altro..." msgid "Mouse" msgstr "Mouse" msgid "Mouse Mode" msgstr "Modalità Mouse" #. / TRANSLATORS: This is a menu entry and must not be too long: If you struggle #. / to get in short enough, just translate "No Device" instead. msgid "No Amiga Device" msgstr "Nessun Dispositivo Amiga" #. / TRANSLATORS: This is a menu entry and must not be too long: If you struggle #. / to get in short enough, just translate "No Device" instead. msgid "No Host Device" msgstr "Nessun Dispositivo" msgid "No configuration file was found" msgstr "File di Configurazione Assente" #, c-format msgid "Option \"%s\" is not enabled" msgstr "Optione \"%s\" non è abilitata" msgid "Option chip_memory must be a multiple of 512" msgstr "Opzione chip_memory deve essere un multiplo di 512" msgid "Option fast_memory must be a multiple of 1024" msgstr "Opzione fast_memory deve essere un multiplo di 1024" msgid "Option slow_memory must be a multiple of 256" msgstr "Opzione slow_memory deve essere un multiplo di 256" msgid "Option uaegfx.card needs a CPU with 32-bit addressing" msgstr "Opzione uaegfx.card necessita di una CPU con indirizzamento a 32-bit" msgid "Option zorro_iii_memory must be a multiple of 1024" msgstr "Opzione zorro_iii_memory deve essere un multiplo di 1024" msgid "Options zorro_iii_memory needs a CPU with 32-bit addressing" msgstr "Opzioni zorro_iii_memory necessitano una CPU con indirizzamento a 32-bit" #. / TRANSLATORS: This is a menu entry and must not be too long msgid "Parallel Joystick Ports" msgstr "Porte Parallele Joystick" msgid "Pause" msgstr "Pausa" #, c-format msgid "Port 0: %s" msgstr "Porta 0: %s" msgid "Port Settings" msgstr "Settaggi Porte" msgid "Removable Media" msgstr "Supporti Rimovibili" #. / TRANSLATORS: Reset Amiga as in reboot the computer msgid "Reset Amiga" msgstr "Resetta Amiga" msgid "Resume" msgstr "Ripristina" msgid "Save" msgstr "Salva" msgid "Save States" msgstr "Salva Stati" #. / TRANSLATORS: Soft reset reboots the computer without a power cycle msgid "Soft Reset" msgstr "Riavvia" msgid "Warp mode disabled" msgstr "Modalità distorta disabilitata" msgid "Warp mode enabled" msgstr "Modalità distorta abilitata" msgid "Zoom is disabled in RTG mode" msgstr "Ingrandimento disabilitato in modalità RTG" #, c-format msgid "Zoom: %s" msgstr "Ingrandimento: %s" #, c-format msgid "Zoom: %s + Border" msgstr "Ingrandimento: %s + Bordo" #~ msgid "CD32 Gamepad" #~ msgstr "CD32 Gamepad" #~ msgid "Host Device" #~ msgstr "Dispositivo Ospite" #~ msgid "Joystick" #~ msgstr "Joystick" fs-uae-2.2.3+dfsg/po/pt.po0000644000175000017500000001311512162366654015456 0ustar glaubitzglaubitz# Portuguese translations for fs-uae package. # Copyright (C) 2012 Frode Solheim and translators. # This file is distributed under the same license as the fs-uae package. # Frode Solheim , 2012. # msgid "" msgstr "" "Project-Id-Version: fs-uae\n" "Report-Msgid-Bugs-To: fs-uae@fengestad.no\n" "POT-Creation-Date: 2013-03-12 22:03+0100\n" "PO-Revision-Date: 2013-03-13 13:35-0000\n" "Last-Translator: Mário Mateus \n" "Language-Team: Portuguese\n" "Language: pt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 1.5.5\n" msgid "Activated debugger" msgstr "Depurador activado" msgid "Amiga Control" msgstr "Controlo do Amiga" #. / TRANSLATORS: In context "Zoom: Auto" msgid "Auto" msgstr "Auto" msgid "Auto-Fire is Off" msgstr "Auto-Fire está Desligado" msgid "Auto-Fire is On" msgstr "Auto-Fire está Ligado" #, c-format msgid "Auto-fire disabled for port %d" msgstr "Auto-Fire desligado na porta %d" #, c-format msgid "Auto-fire enabled for port %d" msgstr "Auto-Fire ligado na porta %d" #. / TRANSLATORS: Empty or nothing #, c-format msgid "CD%d: Empty" msgstr "CD%d: Vazio" msgid "CD32 Pad Mode" msgstr "Modo Gamepad CD32" #. / TRANSLATORS: This is a menu entry and must not be too long msgid "Custom Joystick Port" msgstr "Porta de Joystrick customisada" msgid "Custom Mode" msgstr "Modo customisado" #. / TRANSLATORS: Empty or nothing #, c-format msgid "DF%d: Empty" msgstr "DF%d: Vazia" msgid "Disabled" msgstr "Desligado" msgid "Eject" msgstr "Ejectar" msgid "Empty" msgstr "Vazio" msgid "Emulator Control" msgstr "Controlo do Emulador" #. / TRANSLATORS: In context "Zoom: Full Frame" msgid "Full Frame" msgstr "Ecrã Completo" #, c-format msgid "HD not found: %s" msgstr "HD não encontrado: %s" #. / TRANSLATORS: Hard reset is a computer reboot with an emulated power #. / cycle msgid "Hard Reset" msgstr "Reiniciar por hardware" msgid "Input Options" msgstr "Opções de entrada" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Insert Into CD%d" msgstr "Inserir em CD%d" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Insert Into DF%d" msgstr "Inserir em DF%d" msgid "Invalid number of CD-ROM drives specified" msgstr "Número de leitores de CD-ROM especificados inválido" msgid "Joystick Mode" msgstr "Modo joystick" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Joystick Port %d" msgstr "Joystick porta %d" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Joystick Port %d Device" msgstr "Porta do dispositivo joystick %d" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Joystick Port %d Mode" msgstr "Porta do joystick em modo %d" msgid "Joystick Port 0" msgstr "Joystick porta 0" msgid "Joystick Port 1" msgstr "Joystick porta 1" msgid "Joystick Port 2" msgstr "Joystick porta 2" msgid "Joystick Port 3" msgstr "Joystick porta 3" msgid "Joystick Port 4" msgstr "Porta de Joystick 4" msgid "Joystick Ports" msgstr "Portas Joystick" msgid "Keyboard" msgstr "Teclado" msgid "Load" msgstr "Abrir" msgid "More..." msgstr "Mais..." msgid "Mouse" msgstr "Rato" msgid "Mouse Mode" msgstr "Modo Rato" #. / TRANSLATORS: This is a menu entry and must not be too long: If you struggle #. / to get in short enough, just translate "No Device" instead. msgid "No Amiga Device" msgstr "Nenhum dispositivo Amiga" #. / TRANSLATORS: This is a menu entry and must not be too long: If you struggle #. / to get in short enough, just translate "No Device" instead. msgid "No Host Device" msgstr "Nenhum dispositivo Host" msgid "No configuration file was found" msgstr "Nenhum ficheiro de configuração encontrado" #, c-format msgid "Option \"%s\" is not enabled" msgstr "Opção \"%s\" não está activada" msgid "Option chip_memory must be a multiple of 512" msgstr "Opção chip_memory necessita de múltiplos de 512" msgid "Option fast_memory must be a multiple of 1024" msgstr "Opção fast_memory necessita de múltiplos de 1024" msgid "Option slow_memory must be a multiple of 256" msgstr "Opção slow_memory necessita de múltiplos de 256" msgid "Option uaegfx.card needs a CPU with 32-bit addressing" msgstr "Opção uaegfx.card necessita um CPU com endereçamento de 32bits" msgid "Option zorro_iii_memory must be a multiple of 1024" msgstr "Opção zorro_iii_memory necessita de múltiplos de 1024" msgid "Options zorro_iii_memory needs a CPU with 32-bit addressing" msgstr "Opção zorro_iii_memory necessita um CPU com endereçamento de 32bits" #. / TRANSLATORS: This is a menu entry and must not be too long msgid "Parallel Joystick Ports" msgstr "Joystick da porta paralela" msgid "Pause" msgstr "Pausa" #, c-format msgid "Port 0: %s" msgstr "Porta 0: %s" msgid "Port Settings" msgstr "Opções da porta" msgid "Removable Media" msgstr "Média Removível" #. / TRANSLATORS: Reset Amiga as in reboot the computer msgid "Reset Amiga" msgstr "Reiniciar o Amiga" msgid "Resume" msgstr "Continuar" msgid "Save" msgstr "Guardar" msgid "Save States" msgstr "Guardar Estado" #. / TRANSLATORS: Soft reset reboots the computer without a power cycle msgid "Soft Reset" msgstr "Reiniciar por Software" msgid "Warp mode disabled" msgstr "Modo warp desligado" msgid "Warp mode enabled" msgstr "Modo warp ligado" msgid "Zoom is disabled in RTG mode" msgstr "Zoom está desactivado no modo RTG" #, c-format msgid "Zoom: %s" msgstr "Zoom: %s" #, c-format msgid "Zoom: %s + Border" msgstr "Zoom: %s + Margem" fs-uae-2.2.3+dfsg/po/ru.po0000644000175000017500000001047612162366654015470 0ustar glaubitzglaubitz# Russian translations for fs-uae package. # Copyright (C) 2012 Frode Solheim and translators. # This file is distributed under the same license as the fs-uae package. # Frode Solheim , 2012. # msgid "" msgstr "" "Project-Id-Version: fs-uae\n" "Report-Msgid-Bugs-To: fs-uae@fengestad.no\n" "POT-Creation-Date: 2013-06-25 21:21+0200\n" "PO-Revision-Date: 2012-08-14 11:13+0200\n" "Last-Translator: Frode Solheim \n" "Language-Team: Russian \n" "Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" msgid "Activated debugger" msgstr "" msgid "Amiga Control" msgstr "" #. / TRANSLATORS: In context "Zoom: Auto" msgid "Auto" msgstr "" msgid "Auto-Fire is Off" msgstr "" msgid "Auto-Fire is On" msgstr "" #, c-format msgid "Auto-fire disabled for port %d" msgstr "" #, c-format msgid "Auto-fire enabled for port %d" msgstr "" #. / TRANSLATORS: Empty or nothing #, c-format msgid "CD%d: Empty" msgstr "" msgid "CD32 Pad Mode" msgstr "" #. / TRANSLATORS: This is a menu entry and must not be too long msgid "Custom Joystick Port" msgstr "" msgid "Custom Mode" msgstr "" #. / TRANSLATORS: Empty or nothing #, c-format msgid "DF%d: Empty" msgstr "" msgid "Disabled" msgstr "" msgid "Eject" msgstr "" msgid "Empty" msgstr "" msgid "Emulator Control" msgstr "" #. / TRANSLATORS: In context "Zoom: Full Frame" msgid "Full Frame" msgstr "" #, c-format msgid "HD not found: %s" msgstr "" #. / TRANSLATORS: Hard reset is a computer reboot with an emulated power #. / cycle msgid "Hard Reset" msgstr "" msgid "Input Options" msgstr "" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Insert Into CD%d" msgstr "" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Insert Into DF%d" msgstr "" msgid "Invalid number of CD-ROM drives specified" msgstr "" msgid "Joystick Mode" msgstr "" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Joystick Port %d" msgstr "" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Joystick Port %d Device" msgstr "" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Joystick Port %d Mode" msgstr "" msgid "Joystick Port 0" msgstr "" msgid "Joystick Port 1" msgstr "" msgid "Joystick Port 2" msgstr "" msgid "Joystick Port 3" msgstr "" msgid "Joystick Port 4" msgstr "" msgid "Joystick Ports" msgstr "" msgid "Keyboard" msgstr "" msgid "Load" msgstr "" msgid "More..." msgstr "" msgid "Mouse" msgstr "" msgid "Mouse Mode" msgstr "" #. / TRANSLATORS: This is a menu entry and must not be too long: If you struggle #. / to get in short enough, just translate "No Device" instead. msgid "No Amiga Device" msgstr "" #. / TRANSLATORS: This is a menu entry and must not be too long: If you struggle #. / to get in short enough, just translate "No Device" instead. msgid "No Host Device" msgstr "" msgid "No configuration file was found" msgstr "" #, c-format msgid "Option \"%s\" is not enabled" msgstr "" msgid "Option chip_memory must be a multiple of 512" msgstr "" msgid "Option fast_memory must be a multiple of 1024" msgstr "" msgid "Option slow_memory must be a multiple of 256" msgstr "" msgid "Option uaegfx.card needs a CPU with 32-bit addressing" msgstr "" msgid "Option zorro_iii_memory must be a multiple of 1024" msgstr "" msgid "Options zorro_iii_memory needs a CPU with 32-bit addressing" msgstr "" #. / TRANSLATORS: This is a menu entry and must not be too long msgid "Parallel Joystick Ports" msgstr "" msgid "Pause" msgstr "" #, c-format msgid "Port 0: %s" msgstr "" msgid "Port Settings" msgstr "" msgid "Removable Media" msgstr "" #. / TRANSLATORS: Reset Amiga as in reboot the computer msgid "Reset Amiga" msgstr "" msgid "Resume" msgstr "" msgid "Save" msgstr "" msgid "Save States" msgstr "" #. / TRANSLATORS: Soft reset reboots the computer without a power cycle msgid "Soft Reset" msgstr "" msgid "Warp mode disabled" msgstr "" msgid "Warp mode enabled" msgstr "" msgid "Zoom is disabled in RTG mode" msgstr "" #, c-format msgid "Zoom: %s" msgstr "" #, c-format msgid "Zoom: %s + Border" msgstr "" fs-uae-2.2.3+dfsg/po/sr.po0000644000175000017500000001331012162366654015454 0ustar glaubitzglaubitz# Serbian translations for fs-uae package. # Copyright (C) 2012 Frode Solheim and translators. # This file is distributed under the same license as the fs-uae package. # Frode Solheim , 2012. # msgid "" msgstr "" "Project-Id-Version: fs-uae\n" "Report-Msgid-Bugs-To: fs-uae@fengestad.no\n" "POT-Creation-Date: 2013-03-15 21:48+0100\n" "PO-Revision-Date: 2013-03-17 08:56+0100\n" "Last-Translator: \n" "Language-Team: Serbian\n" "Language: sr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" msgid "Activated debugger" msgstr "Debager je aktiviran" msgid "Amiga Control" msgstr "Amiga kontrole" #. / TRANSLATORS: In context "Zoom: Auto" msgid "Auto" msgstr "Auto" msgid "Auto-Fire is Off" msgstr "Automatsko pucanje ugaÅ¡eno" msgid "Auto-Fire is On" msgstr "Automatsko pucanje upaljeno" #, c-format msgid "Auto-fire disabled for port %d" msgstr "Automatsko pucanje onemogućeno za port %d" #, c-format msgid "Auto-fire enabled for port %d" msgstr "Automatsko pucanje omogućeno za port %d" #. / TRANSLATORS: Empty or nothing #, c-format msgid "CD%d: Empty" msgstr "CD%d: prazan" msgid "CD32 Pad Mode" msgstr "CD32 pad mod" #. / TRANSLATORS: This is a menu entry and must not be too long msgid "Custom Joystick Port" msgstr "PrilagoÄ‘eni port džojstika" msgid "Custom Mode" msgstr "PrilagoÄ‘eni naÄin rada" #. / TRANSLATORS: Empty or nothing #, c-format msgid "DF%d: Empty" msgstr "DF%d: Prazan" msgid "Disabled" msgstr "Onemogućeno" msgid "Eject" msgstr "Izbacivanje" msgid "Empty" msgstr "Prazno" msgid "Emulator Control" msgstr "Kontrole emulatora" #. / TRANSLATORS: In context "Zoom: Full Frame" msgid "Full Frame" msgstr "Pun okvir" #, c-format msgid "HD not found: %s" msgstr "HD nije pronaÄ‘en: %s" #. / TRANSLATORS: Hard reset is a computer reboot with an emulated power #. / cycle msgid "Hard Reset" msgstr "Hardverski restart" msgid "Input Options" msgstr "Opcije ulaza" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Insert Into CD%d" msgstr "Ubaciti u CD%d" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Insert Into DF%d" msgstr "Ubaciti u DF%d" msgid "Invalid number of CD-ROM drives specified" msgstr "Naveden je neispravan broj CD-ROM ova" msgid "Joystick Mode" msgstr "Režim džojstika" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Joystick Port %d" msgstr "Džojstik port %d" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Joystick Port %d Device" msgstr "Džojstik port %d ureÄ‘aj" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Joystick Port %d Mode" msgstr "Džojstik port %d mod" msgid "Joystick Port 0" msgstr "Džojstik port 0" msgid "Joystick Port 1" msgstr "Džojstik port 1" msgid "Joystick Port 2" msgstr "Džojstik port 2" msgid "Joystick Port 3" msgstr "Džojstik port 3" msgid "Joystick Port 4" msgstr "Džojstik port 4" msgid "Joystick Ports" msgstr "Džojstik portovi" msgid "Keyboard" msgstr "Tastatura" msgid "Load" msgstr "UÄitavanje" msgid "More..." msgstr "JoÅ¡..." msgid "Mouse" msgstr "MiÅ¡" msgid "Mouse Mode" msgstr "Režim miÅ¡a" #. / TRANSLATORS: This is a menu entry and must not be too long: If you struggle #. / to get in short enough, just translate "No Device" instead. msgid "No Amiga Device" msgstr "Nema ureÄ‘aja" #. / TRANSLATORS: This is a menu entry and must not be too long: If you struggle #. / to get in short enough, just translate "No Device" instead. msgid "No Host Device" msgstr "Nema host ureÄ‘aja" msgid "No configuration file was found" msgstr "Konfiguracioni fajl nije pronaÄ‘en" #, c-format msgid "Option \"%s\" is not enabled" msgstr "Opcija \"%s\" nije omogućena" msgid "Option chip_memory must be a multiple of 512" msgstr "Opcija chip_memory mora biti umnožak broja 512" msgid "Option fast_memory must be a multiple of 1024" msgstr "Opcija fast_memory mora biti umnožak broja 1024" msgid "Option slow_memory must be a multiple of 256" msgstr "Opcija slow_memory mora biti umnožak broja 256" msgid "Option uaegfx.card needs a CPU with 32-bit addressing" msgstr "Opcija uaegfx.card zahteva procesor sa 32-bitnim adresiranjem" msgid "Option zorro_iii_memory must be a multiple of 1024" msgstr "Opcija zorro_iii_memory mora biti umnožak broja 1024" msgid "Options zorro_iii_memory needs a CPU with 32-bit addressing" msgstr "Opcije zorro_iii_memory zahtevaju procesor sa 32-bitnim adresiranjem" #. / TRANSLATORS: This is a menu entry and must not be too long msgid "Parallel Joystick Ports" msgstr "Paralelni džojstik portovi" msgid "Pause" msgstr "Pauziranje" #, c-format msgid "Port 0: %s" msgstr "Port 0: %s" msgid "Port Settings" msgstr "PodeÅ¡enja porta" msgid "Removable Media" msgstr "Prenosivi medijum" #. / TRANSLATORS: Reset Amiga as in reboot the computer msgid "Reset Amiga" msgstr "Restart Amige" msgid "Resume" msgstr "Nastavak" msgid "Save" msgstr "Snimanje" msgid "Save States" msgstr "Snimanje stanja" #. / TRANSLATORS: Soft reset reboots the computer without a power cycle msgid "Soft Reset" msgstr "Softverski restart" msgid "Warp mode disabled" msgstr "Warp mod onemogućen" msgid "Warp mode enabled" msgstr "Warp mod omogućen" msgid "Zoom is disabled in RTG mode" msgstr "Uvećanje je onemogućeno u RTG naÄinu rada" #, c-format msgid "Zoom: %s" msgstr "Uvećanje: %s" #, c-format msgid "Zoom: %s + Border" msgstr "Uvećanje: %s + okvir" #~ msgid "CD32 Gamepad" #~ msgstr "CD32 Gamepad" #~ msgid "Host Device" #~ msgstr "Glavni / Host ureÄ‘aj" #~ msgid "Joystick" #~ msgstr "Džojstik" fs-uae-2.2.3+dfsg/po/sv.po0000644000175000017500000001030712162366654015463 0ustar glaubitzglaubitz# Swedish translations for fs-uae package. # Copyright (C) 2013 Frode Solheim # This file is distributed under the same license as the fs-uae package. # Frode Solheim , 2013. # msgid "" msgstr "" "Project-Id-Version: fs-uae\n" "Report-Msgid-Bugs-To: fs-uae@fengestad.no\n" "POT-Creation-Date: 2013-03-07 19:47+0100\n" "PO-Revision-Date: 2013-03-07 22:10+0100\n" "Last-Translator: Frode Solheim \n" "Language-Team: Swedish\n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" msgid "Activated debugger" msgstr "" msgid "Amiga Control" msgstr "" #. / TRANSLATORS: In context "Zoom: Auto" msgid "Auto" msgstr "" msgid "Auto-Fire is Off" msgstr "" msgid "Auto-Fire is On" msgstr "" #, c-format msgid "Auto-fire disabled for port %d" msgstr "" #, c-format msgid "Auto-fire enabled for port %d" msgstr "" #. / TRANSLATORS: Empty or nothing #, c-format msgid "CD%d: Empty" msgstr "" msgid "CD32 Pad Mode" msgstr "" #. / TRANSLATORS: This is a menu entry and must not be too long msgid "Custom Joystick Port" msgstr "" msgid "Custom Mode" msgstr "" #. / TRANSLATORS: Empty or nothing #, c-format msgid "DF%d: Empty" msgstr "" msgid "Disabled" msgstr "" msgid "Eject" msgstr "" msgid "Empty" msgstr "" msgid "Emulator Control" msgstr "" #. / TRANSLATORS: In context "Zoom: Full Frame" msgid "Full Frame" msgstr "" #, c-format msgid "HD not found: %s" msgstr "" #. / TRANSLATORS: Hard reset is a computer reboot with an emulated power #. / cycle msgid "Hard Reset" msgstr "" msgid "Input Options" msgstr "" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Insert Into CD%d" msgstr "" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Insert Into DF%d" msgstr "" msgid "Invalid number of CD-ROM drives specified" msgstr "" msgid "Joystick Mode" msgstr "" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Joystick Port %d" msgstr "" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Joystick Port %d Device" msgstr "" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Joystick Port %d Mode" msgstr "" msgid "Joystick Port 0" msgstr "" msgid "Joystick Port 1" msgstr "" msgid "Joystick Port 2" msgstr "" msgid "Joystick Port 3" msgstr "" msgid "Joystick Port 4" msgstr "" msgid "Joystick Ports" msgstr "" msgid "Keyboard" msgstr "" msgid "Load" msgstr "" msgid "More..." msgstr "" msgid "Mouse" msgstr "" msgid "Mouse Mode" msgstr "" #. / TRANSLATORS: This is a menu entry and must not be too long: If you struggle #. / to get in short enough, just translate "No Device" instead. msgid "No Amiga Device" msgstr "" #. / TRANSLATORS: This is a menu entry and must not be too long: If you struggle #. / to get in short enough, just translate "No Device" instead. msgid "No Host Device" msgstr "" msgid "No configuration file was found" msgstr "" #, c-format msgid "Option \"%s\" is not enabled" msgstr "" msgid "Option chip_memory must be a multiple of 512" msgstr "" msgid "Option fast_memory must be a multiple of 1024" msgstr "" msgid "Option slow_memory must be a multiple of 256" msgstr "" msgid "Option uaegfx.card needs a CPU with 32-bit addressing" msgstr "" msgid "Option zorro_iii_memory must be a multiple of 1024" msgstr "" msgid "Options zorro_iii_memory needs a CPU with 32-bit addressing" msgstr "" #. / TRANSLATORS: This is a menu entry and must not be too long msgid "Parallel Joystick Ports" msgstr "" msgid "Pause" msgstr "" #, c-format msgid "Port 0: %s" msgstr "" msgid "Port Settings" msgstr "" msgid "Removable Media" msgstr "" #. / TRANSLATORS: Reset Amiga as in reboot the computer msgid "Reset Amiga" msgstr "" msgid "Resume" msgstr "" msgid "Save" msgstr "" msgid "Save States" msgstr "" #. / TRANSLATORS: Soft reset reboots the computer without a power cycle msgid "Soft Reset" msgstr "" msgid "Warp mode disabled" msgstr "" msgid "Warp mode enabled" msgstr "" msgid "Zoom is disabled in RTG mode" msgstr "" #, c-format msgid "Zoom: %s" msgstr "" #, c-format msgid "Zoom: %s + Border" msgstr "" fs-uae-2.2.3+dfsg/po/update.sh0000755000175000017500000000021512162366654016311 0ustar glaubitzglaubitz#!/bin/bash SERIES=`cat SERIES` mkdir -p dist/$SERIES/po/fs-uae find . -name *.mo -delete python po/update.py &> dist/$SERIES/po/status.txt fs-uae-2.2.3+dfsg/po/update.py0000644000175000017500000000321712162366654016331 0ustar glaubitzglaubitz#!/usr/bin/env python from __future__ import print_function import os import shutil import tempfile import subprocess dirs = ["src"] files = [] extensions = [".c", ".cpp", ".h"] temp = tempfile.NamedTemporaryFile(delete=False) for dir in dirs: for dir_path, dir_names, file_names in os.walk(dir): for file in file_names: name, ext = os.path.splitext(file) if ext not in extensions: continue path = os.path.join(dir_path, file) files.append(path) with temp: for path in sorted(files): temp.write(path) temp.write("\n") args = ["xgettext", "--output-dir=po", "--files-from=" + temp.name, "--keyword=_", "--keyword=N_", "--package-name=fs-uae", "--msgid-bugs-address=fs-uae@fengestad.no", "--copyright-holder=Frode Solheim", "--add-comments=/", "--no-location", "--sort-output", ] p = subprocess.Popen(args) p.wait() shutil.move("po/messages.po", "po/messages.pot") for file in os.listdir("po"): if file.endswith(".po"): path = os.path.join("po", file) print(path) p = subprocess.Popen(["msgmerge", "--no-fuzzy-matching", "--sort-output", "--update", path, "po/messages.pot"]) p.wait() os.system("find share -name fs-uae.mo -delete") print("\n\nlauncher:") os.system("cd launcher && python po/update.py") #os.chdir("launcher") #os.system("python po/update.py") os.system("make po-dist mo") fs-uae-2.2.3+dfsg/po/tr.po0000644000175000017500000001300012162366654015451 0ustar glaubitzglaubitz# Turkish translations for fs-uae package. # Copyright (C) 2013 Frode Solheim # This file is distributed under the same license as the fs-uae package. # Frode Solheim , 2013. # msgid "" msgstr "" "Project-Id-Version: fs-uae\n" "Report-Msgid-Bugs-To: fs-uae@fengestad.no\n" "POT-Creation-Date: 2013-03-20 22:26+0100\n" "PO-Revision-Date: 2013-04-07 19:24+0200\n" "Last-Translator: Eser Güven \n" "Language-Team: Turkish\n" "Language: tr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 1.5.5\n" msgid "Activated debugger" msgstr "Hata ayıklama aktifleÅŸtirildi" msgid "Amiga Control" msgstr "Amiga Kontrolü" #. / TRANSLATORS: In context "Zoom: Auto" msgid "Auto" msgstr "Otomatik" msgid "Auto-Fire is Off" msgstr "Otomatik-AteÅŸ Kapalı" msgid "Auto-Fire is On" msgstr "Otomatik-AteÅŸ Açık" #, c-format msgid "Auto-fire disabled for port %d" msgstr "Otomatik ateÅŸ %d portu için devre dışı" #, c-format msgid "Auto-fire enabled for port %d" msgstr "Otomatik ateÅŸ %d portu için aktif" #. / TRANSLATORS: Empty or nothing #, c-format msgid "CD%d: Empty" msgstr "CD%d: BoÅŸ" msgid "CD32 Pad Mode" msgstr "CD32 Pad Modu" #. / TRANSLATORS: This is a menu entry and must not be too long msgid "Custom Joystick Port" msgstr "Özel Joystick Portu" msgid "Custom Mode" msgstr "Özel Mod" #. / TRANSLATORS: Empty or nothing #, c-format msgid "DF%d: Empty" msgstr "DF%d: BoÅŸ" msgid "Disabled" msgstr "Devre dışı" msgid "Eject" msgstr "Çıkar" msgid "Empty" msgstr "BoÅŸ" msgid "Emulator Control" msgstr "Emülatör Kontrolü" #. / TRANSLATORS: In context "Zoom: Full Frame" msgid "Full Frame" msgstr "Tam Ekran" #, c-format msgid "HD not found: %s" msgstr "HD bulunamadı: %s" #. / TRANSLATORS: Hard reset is a computer reboot with an emulated power #. / cycle msgid "Hard Reset" msgstr "Hard Reset İşlemi" msgid "Input Options" msgstr "GiriÅŸ Seçenekleri" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Insert Into CD%d" msgstr "CD%d Sürücüsüne Takın" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Insert Into DF%d" msgstr "DF%d Sürücüsüne Takın" msgid "Invalid number of CD-ROM drives specified" msgstr "Belirtilen CD-ROM sürücüsü sayısı geçersiz" msgid "Joystick Mode" msgstr "Joystick Modu" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Joystick Port %d" msgstr "Joystick Portu %d" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Joystick Port %d Device" msgstr "Joystick Portu %d Cihazı" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Joystick Port %d Mode" msgstr "Joystick Portu %d Modu" msgid "Joystick Port 0" msgstr "Joystick Portu 0" msgid "Joystick Port 1" msgstr "Joystick Portu 1" msgid "Joystick Port 2" msgstr "Joystick Portu 2" msgid "Joystick Port 3" msgstr "Joystick Portu 3" msgid "Joystick Port 4" msgstr "Joystick Portu 4" msgid "Joystick Ports" msgstr "Joystick Portları" msgid "Keyboard" msgstr "Klavye" msgid "Load" msgstr "Yükle" msgid "More..." msgstr "Fazlası..." msgid "Mouse" msgstr "Fare" msgid "Mouse Mode" msgstr "Fare Modu" #. / TRANSLATORS: This is a menu entry and must not be too long: If you struggle #. / to get in short enough, just translate "No Device" instead. msgid "No Amiga Device" msgstr "Cihaz Yok" #. / TRANSLATORS: This is a menu entry and must not be too long: If you struggle #. / to get in short enough, just translate "No Device" instead. msgid "No Host Device" msgstr "Cihaz Yok" msgid "No configuration file was found" msgstr "Konfigürasyon dosyası bulunamadı" #, c-format msgid "Option \"%s\" is not enabled" msgstr "\"%s\" ayarı seçili deÄŸil" msgid "Option chip_memory must be a multiple of 512" msgstr "chip_memory ayarı 512'nin katı olmalıdır" msgid "Option fast_memory must be a multiple of 1024" msgstr "fast_memory ayarı 1024'ün katı olmalıdır" msgid "Option slow_memory must be a multiple of 256" msgstr "slow_memory ayarı 256'nın katı olmalıdır" msgid "Option uaegfx.card needs a CPU with 32-bit addressing" msgstr "uaegfx.card ayarı 32-bit adreslemeli bir CPU gerektirir" msgid "Option zorro_iii_memory must be a multiple of 1024" msgstr "zorro_iii_memory ayarı 1024'ün katı olmalıdır" msgid "Options zorro_iii_memory needs a CPU with 32-bit addressing" msgstr "zorro_iii_memory ayarı 32-bit adreslemeli bir CPU gerektirir" #. / TRANSLATORS: This is a menu entry and must not be too long msgid "Parallel Joystick Ports" msgstr "Paralel Joystick Portları" msgid "Pause" msgstr "Durdur" #, c-format msgid "Port 0: %s" msgstr "Port 0: %s" msgid "Port Settings" msgstr "Port Ayarları" msgid "Removable Media" msgstr "Çıkarılabilir Medya" #. / TRANSLATORS: Reset Amiga as in reboot the computer msgid "Reset Amiga" msgstr "Amigayı Resetle" msgid "Resume" msgstr "Devam Et" msgid "Save" msgstr "Kaydet" msgid "Save States" msgstr "Kayıt Dosyaları" #. / TRANSLATORS: Soft reset reboots the computer without a power cycle msgid "Soft Reset" msgstr "Soft Reset İşlemi" msgid "Warp mode disabled" msgstr "Hız modu devre dışı" msgid "Warp mode enabled" msgstr "Hız modu aktif" msgid "Zoom is disabled in RTG mode" msgstr "RTG modunda zum yapma özelliÄŸi kapalıdır" #, c-format msgid "Zoom: %s" msgstr "Zum yap: %s" #, c-format msgid "Zoom: %s + Border" msgstr "Zum yap: %s + Kenar Çizgisi" fs-uae-2.2.3+dfsg/po/cs.po0000644000175000017500000001302612162366654015441 0ustar glaubitzglaubitz# Czech translations for fs-uae package. # Copyright (C) 2013 Frode Solheim # This file is distributed under the same license as the fs-uae package. # Frode Solheim , 2013. # z551693 , 2013. msgid "" msgstr "" "Project-Id-Version: fs-uae\n" "Report-Msgid-Bugs-To: fs-uae@fengestad.no\n" "POT-Creation-Date: 2013-02-24 22:16+0100\n" "PO-Revision-Date: 2013-02-25 08:34+0200\n" "Last-Translator: z551693 \n" "Language-Team: FS-UAE translation team\n" "Language: cs\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" "X-Generator: Virtaal 0.7.1\n" msgid "Activated debugger" msgstr "Debugger aktivován" msgid "Amiga Control" msgstr "Nastavení Amiga" #. / TRANSLATORS: In context "Zoom: Auto" msgid "Auto" msgstr "Automaticky" msgid "Auto-Fire is Off" msgstr "Auto-fire je vypnut" msgid "Auto-Fire is On" msgstr "Auto-fire je zapnut" #, c-format msgid "Auto-fire disabled for port %d" msgstr "Auto-fire vypnut pro port %d" #, c-format msgid "Auto-fire enabled for port %d" msgstr "Auto-fire zapnut pro port %d" #. / TRANSLATORS: Empty or nothing #, c-format msgid "CD%d: Empty" msgstr "CD%d:" msgid "CD32 Pad Mode" msgstr "Mód CD32 Padu" #. / TRANSLATORS: This is a menu entry and must not be too long msgid "Custom Joystick Port" msgstr "Nastavení Joystick portu" msgid "Custom Mode" msgstr "Vlastní mód" #. / TRANSLATORS: Empty or nothing #, c-format msgid "DF%d: Empty" msgstr "DF%d: " msgid "Disabled" msgstr "Vypnuto" msgid "Eject" msgstr "Vysunout" msgid "Empty" msgstr "Prázdné" msgid "Emulator Control" msgstr "Ovládání emulátoru" #. / TRANSLATORS: In context "Zoom: Full Frame" msgid "Full Frame" msgstr "Plné snímkování" #, c-format msgid "HD not found: %s" msgstr "HD nenalezen: %s" #. / TRANSLATORS: Hard reset is a computer reboot with an emulated power #. / cycle msgid "Hard Reset" msgstr "Tvrdý reset" msgid "Input Options" msgstr "Volby vstupu" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Insert Into CD%d" msgstr "Vložit do CD%d" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Insert Into DF%d" msgstr "Vložit do DF%d" msgid "Invalid number of CD-ROM drives specified" msgstr "Uveden Å¡patný poÄet CD-ROM mechanik" msgid "Joystick Mode" msgstr "Mód Joysticku" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Joystick Port %d" msgstr "Joystick Port %d" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Joystick Port %d Device" msgstr "Joystick Port %d zařízení" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Joystick Port %d Mode" msgstr "Joystick Port %d mód" msgid "Joystick Port 0" msgstr "Joystick Port 0" msgid "Joystick Port 1" msgstr "Joystick Port 1" msgid "Joystick Port 2" msgstr "Joystick Port 2" msgid "Joystick Port 3" msgstr "Joystick Port 3" msgid "Joystick Port 4" msgstr "Joystick Port 4" msgid "Joystick Ports" msgstr "Joystick porty" msgid "Keyboard" msgstr "Klávesnice" msgid "Load" msgstr "NaÄíst" msgid "More..." msgstr "Více..." msgid "Mouse" msgstr "MyÅ¡" msgid "Mouse Mode" msgstr "Mód myÅ¡i" #. / TRANSLATORS: This is a menu entry and must not be too long: If you struggle #. / to get in short enough, just translate "No Device" instead. msgid "No Amiga Device" msgstr "Žádné zařízení" #. / TRANSLATORS: This is a menu entry and must not be too long: If you struggle #. / to get in short enough, just translate "No Device" instead. msgid "No Host Device" msgstr "Žádné zařízení" msgid "No configuration file was found" msgstr "KonfiguraÄní soubor nenalezen" #, c-format msgid "Option \"%s\" is not enabled" msgstr "Nastavení \"%s\" nebylo povoleno" msgid "Option chip_memory must be a multiple of 512" msgstr "Nastavení chip_memory musí být násobek 512ti" msgid "Option fast_memory must be a multiple of 1024" msgstr "Nastavení fast_memory musí být násobek 1024" msgid "Option slow_memory must be a multiple of 256" msgstr "Nastavení slow_memory musí být násobek 256ti" msgid "Option uaegfx.card needs a CPU with 32-bit addressing" msgstr "Nastavení uaegfx.card vyžaduje CPU s 32-bit adresováním" msgid "Option zorro_iii_memory must be a multiple of 1024" msgstr "Nastavení zorro_iii_memory musí být násobek 1024" msgid "Options zorro_iii_memory needs a CPU with 32-bit addressing" msgstr "Nastavení zorro_iii_memory vyžaduje CPU s 32-bit adresováním" #. / TRANSLATORS: This is a menu entry and must not be too long msgid "Parallel Joystick Ports" msgstr "Joystick paralelní porty" msgid "Pause" msgstr "Pozastavit" #, c-format msgid "Port 0: %s" msgstr "Port 0: %s" msgid "Port Settings" msgstr "Nastavení portu" msgid "Removable Media" msgstr "VymÄ›nitelná média" #. / TRANSLATORS: Reset Amiga as in reboot the computer msgid "Reset Amiga" msgstr "Reset Amiga" msgid "Resume" msgstr "Obnovit" msgid "Save" msgstr "Uložit" msgid "Save States" msgstr "Uložit pozice" #. / TRANSLATORS: Soft reset reboots the computer without a power cycle msgid "Soft Reset" msgstr "Soft Reset" msgid "Warp mode disabled" msgstr "Mód zrychlení vypnut" msgid "Warp mode enabled" msgstr "Mód zrychlení zapnut" msgid "Zoom is disabled in RTG mode" msgstr "PÅ™iblížení vypnuto v RTG módu" #, c-format msgid "Zoom: %s" msgstr "PÅ™iblížení: %s" #, c-format msgid "Zoom: %s + Border" msgstr "PÅ™iblížení: %s + okraje" fs-uae-2.2.3+dfsg/po/es.po0000644000175000017500000001275712162366654015455 0ustar glaubitzglaubitz# Spanish translations for fs-uae package. # Copyright (C) 2012 Frode Solheim and translators. # This file is distributed under the same license as the fs-uae package. # Frode Solheim , 2012. # msgid "" msgstr "" "Project-Id-Version: fs-uae\n" "Report-Msgid-Bugs-To: fs-uae@fengestad.no\n" "POT-Creation-Date: 2013-03-09 17:22+0100\n" "PO-Revision-Date: 2013-03-10 21:59+0100\n" "Last-Translator: \n" "Language-Team: Spanish\n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 1.5.4\n" msgid "Activated debugger" msgstr "Debugger activado" msgid "Amiga Control" msgstr "Control Amiga" #. / TRANSLATORS: In context "Zoom: Auto" msgid "Auto" msgstr "Auto" msgid "Auto-Fire is Off" msgstr "Auto Disparo Desactivado" msgid "Auto-Fire is On" msgstr "Auto Disparo Activado" #, c-format msgid "Auto-fire disabled for port %d" msgstr "Auto Disparo Deshabilitado para puerto %d" #, c-format msgid "Auto-fire enabled for port %d" msgstr "Auto Disparo Habilitado para puerto %d" #. / TRANSLATORS: Empty or nothing #, c-format msgid "CD%d: Empty" msgstr "CD%d: Vacio" msgid "CD32 Pad Mode" msgstr "CD32 Modo Gamepad" #. / TRANSLATORS: This is a menu entry and must not be too long msgid "Custom Joystick Port" msgstr "Puerto Joystick Personalizado" msgid "Custom Mode" msgstr "Modo Personalizado" #. / TRANSLATORS: Empty or nothing #, c-format msgid "DF%d: Empty" msgstr "DF%d: Vacio" msgid "Disabled" msgstr "Deshabilitado" msgid "Eject" msgstr "Extraer" msgid "Empty" msgstr "Vacio" msgid "Emulator Control" msgstr "Control Emulador" #. / TRANSLATORS: In context "Zoom: Full Frame" msgid "Full Frame" msgstr "Frame Completo" #, c-format msgid "HD not found: %s" msgstr "HD no encontrado: %s" #. / TRANSLATORS: Hard reset is a computer reboot with an emulated power #. / cycle msgid "Hard Reset" msgstr "Reinicio Hardware" msgid "Input Options" msgstr "Opciones Entrada" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Insert Into CD%d" msgstr "Insertar En CD%d" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Insert Into DF%d" msgstr "Insertar en DF%d" msgid "Invalid number of CD-ROM drives specified" msgstr "Numero inválido de disco CD-ROM especificado" msgid "Joystick Mode" msgstr "Modo Joystick" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Joystick Port %d" msgstr "Puerto Joystick %d" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Joystick Port %d Device" msgstr "Puerto Dispositivo Joystick %d" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Joystick Port %d Mode" msgstr "Modo Puerto Joystick %d" msgid "Joystick Port 0" msgstr "Puerto Joystick 0" msgid "Joystick Port 1" msgstr "Puerto Joystick 1" msgid "Joystick Port 2" msgstr "Puerto Joystick 2" msgid "Joystick Port 3" msgstr "Puerto Joystick 3" msgid "Joystick Port 4" msgstr "Puerto Joystick 4" msgid "Joystick Ports" msgstr "Puertos Joystick" msgid "Keyboard" msgstr "Teclado" msgid "Load" msgstr "Cargar" msgid "More..." msgstr "Mas..." msgid "Mouse" msgstr "Ratón" msgid "Mouse Mode" msgstr "Modo Ratón" #. / TRANSLATORS: This is a menu entry and must not be too long: If you struggle #. / to get in short enough, just translate "No Device" instead. msgid "No Amiga Device" msgstr "Ningún Dispositivo Amiga" #. / TRANSLATORS: This is a menu entry and must not be too long: If you struggle #. / to get in short enough, just translate "No Device" instead. msgid "No Host Device" msgstr "Ningún Dispositivo Host" msgid "No configuration file was found" msgstr "Archivo de configuración no encontrado" #, c-format msgid "Option \"%s\" is not enabled" msgstr "Opció \"%s\" no esta activada" msgid "Option chip_memory must be a multiple of 512" msgstr "Opción chip_memori debe ser mútiplo de 512" msgid "Option fast_memory must be a multiple of 1024" msgstr "Opción fast_memory debe ser mútiplo de 1024" msgid "Option slow_memory must be a multiple of 256" msgstr "Opción fast_memory debe ser mútiplo de 256" msgid "Option uaegfx.card needs a CPU with 32-bit addressing" msgstr "Opción uaegfx.card necesita una CPU CON direcciones de 32-bit" msgid "Option zorro_iii_memory must be a multiple of 1024" msgstr "Opción zorro_iii_memory debe ser mútiplo de 1024" msgid "Options zorro_iii_memory needs a CPU with 32-bit addressing" msgstr "Opción zorro_iii_memory necesita una CPU CON direcciones de 32-bit" #. / TRANSLATORS: This is a menu entry and must not be too long msgid "Parallel Joystick Ports" msgstr "Joystick Puerto Paralelo" msgid "Pause" msgstr "Pausa" #, c-format msgid "Port 0: %s" msgstr "Puerto 0: %s" msgid "Port Settings" msgstr "Ajustes Puerto" msgid "Removable Media" msgstr "Medio Removible" #. / TRANSLATORS: Reset Amiga as in reboot the computer msgid "Reset Amiga" msgstr "Reiniciar Amiga" msgid "Resume" msgstr "Continuar" msgid "Save" msgstr "Guardar" msgid "Save States" msgstr "Guardar Estado" #. / TRANSLATORS: Soft reset reboots the computer without a power cycle msgid "Soft Reset" msgstr "Reinicio Software" msgid "Warp mode disabled" msgstr "Modo Warp desactivado" msgid "Warp mode enabled" msgstr "Modo Warp Activado" msgid "Zoom is disabled in RTG mode" msgstr "Zoom esta desactivado en modo RTG" #, c-format msgid "Zoom: %s" msgstr "Zoom: %s" #, c-format msgid "Zoom: %s + Border" msgstr "Zoom: %s + Borde" fs-uae-2.2.3+dfsg/po/de.po0000644000175000017500000001323612162366654015427 0ustar glaubitzglaubitz# German translations for fs-uae package. # Copyright (C) 2012 Frode Solheim # This file is distributed under the same license as the fs-uae package. # Frode Solheim , 2012. # msgid "" msgstr "" "Project-Id-Version: fs-uae\n" "Report-Msgid-Bugs-To: fs-uae@fengestad.no\n" "POT-Creation-Date: 2013-02-24 22:16+0100\n" "PO-Revision-Date: 2013-02-25 19:38+0100\n" "Last-Translator: Jens Weichert \n" "Language-Team: German\n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 1.5.5\n" msgid "Activated debugger" msgstr "Debugger aktiviert" msgid "Amiga Control" msgstr "Amiga Kontrollen" #. / TRANSLATORS: In context "Zoom: Auto" msgid "Auto" msgstr "Auto" msgid "Auto-Fire is Off" msgstr "Dauerfeuer ist ausgeschaltet" msgid "Auto-Fire is On" msgstr "Dauerfeuer ist eingeschaltet" #, c-format msgid "Auto-fire disabled for port %d" msgstr "Dauerfeuer ausgeschaltet für Port %d" #, c-format msgid "Auto-fire enabled for port %d" msgstr "Dauerfeuer eingeschaltet für Port %d" #. / TRANSLATORS: Empty or nothing #, c-format msgid "CD%d: Empty" msgstr "CD%d: Leer" msgid "CD32 Pad Mode" msgstr "CD32-Gamepad-Modus" #. / TRANSLATORS: This is a menu entry and must not be too long msgid "Custom Joystick Port" msgstr "Benutzerdef. Joystickport" msgid "Custom Mode" msgstr "Benutzerdef. Modus" #. / TRANSLATORS: Empty or nothing #, c-format msgid "DF%d: Empty" msgstr "DF%d: Leer" msgid "Disabled" msgstr "Deaktiviert" msgid "Eject" msgstr "Auswerfen" msgid "Empty" msgstr "Leer" msgid "Emulator Control" msgstr "Emulator Kontrollen" #. / TRANSLATORS: In context "Zoom: Full Frame" msgid "Full Frame" msgstr "Volles Frame" #, c-format msgid "HD not found: %s" msgstr "HDD nicht gefunden: %s" #. / TRANSLATORS: Hard reset is a computer reboot with an emulated power #. / cycle msgid "Hard Reset" msgstr "Kaltstart" msgid "Input Options" msgstr "Eingabeoptionen" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Insert Into CD%d" msgstr "In CD%d: einlegen" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Insert Into DF%d" msgstr "In DF%d: einlegen" msgid "Invalid number of CD-ROM drives specified" msgstr "Ungültige Anzahl von CDROM-Laufwerken spezifiziert" msgid "Joystick Mode" msgstr "Joystick-Modus" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Joystick Port %d" msgstr "Joystickport %d" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Joystick Port %d Device" msgstr "Gerät Joystickport %d" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Joystick Port %d Mode" msgstr "Modus Joystickport %d" msgid "Joystick Port 0" msgstr "Joystickport 0" msgid "Joystick Port 1" msgstr "Joystickport 1" msgid "Joystick Port 2" msgstr "Joystickport 2" msgid "Joystick Port 3" msgstr "Joystickport 3" msgid "Joystick Port 4" msgstr "Joystickport 4" msgid "Joystick Ports" msgstr "Joystickports" msgid "Keyboard" msgstr "Tastatur" msgid "Load" msgstr "Laden" msgid "More..." msgstr "Mehr..." msgid "Mouse" msgstr "Maus" msgid "Mouse Mode" msgstr "Maus-Modus" #. / TRANSLATORS: This is a menu entry and must not be too long: If you struggle #. / to get in short enough, just translate "No Device" instead. msgid "No Amiga Device" msgstr "Kein Amigagerät" #. / TRANSLATORS: This is a menu entry and must not be too long: If you struggle #. / to get in short enough, just translate "No Device" instead. msgid "No Host Device" msgstr "Kein Hostgerät" msgid "No configuration file was found" msgstr "Konfigurationsdatei nicht gefunden" #, c-format msgid "Option \"%s\" is not enabled" msgstr "Option \"%s\" ist nicht aktiviert" msgid "Option chip_memory must be a multiple of 512" msgstr "Für die Option chip_memory muss 512 der Multiplikator sein" msgid "Option fast_memory must be a multiple of 1024" msgstr "Für die Option fast_memory muss 1024 der Multiplikator sein" msgid "Option slow_memory must be a multiple of 256" msgstr "Für die Option slow_memory muss 256 der Multiplikator sein" msgid "Option uaegfx.card needs a CPU with 32-bit addressing" msgstr "Option uaegfx_card benötigt eine CPU mit 32bit-Adressierung" msgid "Option zorro_iii_memory must be a multiple of 1024" msgstr "Für die Option zorro_iii_memory muss 1024 der Multiplikator sein" msgid "Options zorro_iii_memory needs a CPU with 32-bit addressing" msgstr "Die Option zorro_iii_memory benötigt eine CPU mit 32bit-Adressierung" #. / TRANSLATORS: This is a menu entry and must not be too long msgid "Parallel Joystick Ports" msgstr "Par. Joystick Anschl." msgid "Pause" msgstr "Pause" #, c-format msgid "Port 0: %s" msgstr "Anschluß 0: %s" msgid "Port Settings" msgstr "Anschluß-Einstellungen" msgid "Removable Media" msgstr "Wechseldatenträger" #. / TRANSLATORS: Reset Amiga as in reboot the computer msgid "Reset Amiga" msgstr "Amiga neustarten" msgid "Resume" msgstr "Widerrufen" msgid "Save" msgstr "Sichern" msgid "Save States" msgstr "Speicherstände" #. / TRANSLATORS: Soft reset reboots the computer without a power cycle msgid "Soft Reset" msgstr "Warmstart" msgid "Warp mode disabled" msgstr "Warp-Modus deaktiviert" msgid "Warp mode enabled" msgstr "Warp-Modus aktiviert" msgid "Zoom is disabled in RTG mode" msgstr "Zoom ist abgeschaltet im RTG Modus" #, c-format msgid "Zoom: %s" msgstr "Zoom: %s" #, c-format msgid "Zoom: %s + Border" msgstr "Zoom: %s + Rand" #~ msgid "CD32 Gamepad" #~ msgstr "CD32 Gamepad" #~ msgid "Host Device" #~ msgstr "Hostgerät" #~ msgid "Joystick" #~ msgstr "Joystick" fs-uae-2.2.3+dfsg/po/pl.po0000644000175000017500000001327612162366654015456 0ustar glaubitzglaubitz# Polish translations for fs-uae package. # Copyright (C) 2012 Frode Solheim and translators. # This file is distributed under the same license as the fs-uae package. # Frode Solheim , 2012. # msgid "" msgstr "" "Project-Id-Version: fs-uae\n" "Report-Msgid-Bugs-To: fs-uae@fengestad.no\n" "POT-Creation-Date: 2013-02-25 21:55+0100\n" "PO-Revision-Date: 2013-02-26 19:01+0100\n" "Last-Translator: grimi \n" "Language-Team: Polish\n" "Language: pl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2);\n" "X-Generator: Poedit 1.5.4\n" msgid "Activated debugger" msgstr "Debuger aktywny" msgid "Amiga Control" msgstr "Sterowanie AmigÄ…" #. / TRANSLATORS: In context "Zoom: Auto" msgid "Auto" msgstr "Auto" msgid "Auto-Fire is Off" msgstr "Auto-fire wyłączony" msgid "Auto-Fire is On" msgstr "Auto-fire włączony" #, c-format msgid "Auto-fire disabled for port %d" msgstr "Auto-fire wyłączony dla portu %d" #, c-format msgid "Auto-fire enabled for port %d" msgstr "Auto-fire włączony dla portu %d" #. / TRANSLATORS: Empty or nothing #, c-format msgid "CD%d: Empty" msgstr "CD%d: pusta" msgid "CD32 Pad Mode" msgstr "Tryb pada CD32" #. / TRANSLATORS: This is a menu entry and must not be too long msgid "Custom Joystick Port" msgstr "WÅ‚asny port joysticka" msgid "Custom Mode" msgstr "Tryb wÅ‚asny" #. / TRANSLATORS: Empty or nothing #, c-format msgid "DF%d: Empty" msgstr "DF%d: pusta" msgid "Disabled" msgstr "wyłączona" msgid "Eject" msgstr "WysuÅ„" msgid "Empty" msgstr "pusty" msgid "Emulator Control" msgstr "Sterowanie emulatorem" #. / TRANSLATORS: In context "Zoom: Full Frame" msgid "Full Frame" msgstr "PeÅ‚na ramka" #, c-format msgid "HD not found: %s" msgstr "Nie znaleziono HD: %s" #. / TRANSLATORS: Hard reset is a computer reboot with an emulated power #. / cycle msgid "Hard Reset" msgstr "\"Twardy\" reset" msgid "Input Options" msgstr "Opcje wejÅ›cia" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Insert Into CD%d" msgstr "Włóż do CD%d" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Insert Into DF%d" msgstr "Włóż do DF%d" msgid "Invalid number of CD-ROM drives specified" msgstr "NieprawidÅ‚owo okreÅ›lona ilość napÄ™dów CD-ROM" msgid "Joystick Mode" msgstr "Tryb joysticka" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Joystick Port %d" msgstr "Port joysticka %d" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Joystick Port %d Device" msgstr "Port joysticka %d - sprzÄ™t" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Joystick Port %d Mode" msgstr "Port joysticka %d - tryb" msgid "Joystick Port 0" msgstr "Joystick - port 0" msgid "Joystick Port 1" msgstr "Joystick - port 1" msgid "Joystick Port 2" msgstr "Joystick - port 2" msgid "Joystick Port 3" msgstr "Joystick - port 3" msgid "Joystick Port 4" msgstr "Joystick - port 4" msgid "Joystick Ports" msgstr "Porty joysticków" msgid "Keyboard" msgstr "Klawiatura" msgid "Load" msgstr "Åaduj" msgid "More..." msgstr "WiÄ™cej..." msgid "Mouse" msgstr "Mysz" msgid "Mouse Mode" msgstr "Tryb myszy" #. / TRANSLATORS: This is a menu entry and must not be too long: If you struggle #. / to get in short enough, just translate "No Device" instead. msgid "No Amiga Device" msgstr "Brak urzÄ…dzenia Amigi" #. / TRANSLATORS: This is a menu entry and must not be too long: If you struggle #. / to get in short enough, just translate "No Device" instead. msgid "No Host Device" msgstr "Brak urzÄ…dzenia" msgid "No configuration file was found" msgstr "Brak pliku konfiguracyjnego" #, c-format msgid "Option \"%s\" is not enabled" msgstr "Opcja \"%s\" nie jest włączona" msgid "Option chip_memory must be a multiple of 512" msgstr "Opcja chip_memory musi być wielokrotnoÅ›ciÄ… 512" msgid "Option fast_memory must be a multiple of 1024" msgstr "Opcja fast_memory musi być wielokrotnoÅ›ciÄ… 1024" msgid "Option slow_memory must be a multiple of 256" msgstr "Opcja slow_memory musi być wielokrotnoÅ›ciÄ… 256" msgid "Option uaegfx.card needs a CPU with 32-bit addressing" msgstr "Opcja uaegfx_card wymaga CPU z 32-bitowym adresowaniem" msgid "Option zorro_iii_memory must be a multiple of 1024" msgstr "Opcja zorro_iii_memory musi być wielokrotnoÅ›ciÄ… 1024" msgid "Options zorro_iii_memory needs a CPU with 32-bit addressing" msgstr "Opcja zorro_iii_memory wymaga CPU z 32-bitowym adresowaniem" #. / TRANSLATORS: This is a menu entry and must not be too long msgid "Parallel Joystick Ports" msgstr "Porty równolegÅ‚e joyów" msgid "Pause" msgstr "Pauza" #, c-format msgid "Port 0: %s" msgstr "Port 0: %s" msgid "Port Settings" msgstr "Ustawienia portu" msgid "Removable Media" msgstr "NoÅ›niki wymienne" #. / TRANSLATORS: Reset Amiga as in reboot the computer msgid "Reset Amiga" msgstr "Resetuj AmigÄ™" msgid "Resume" msgstr "Wznów" msgid "Save" msgstr "Zapisz" msgid "Save States" msgstr "Zapis stanów gry" #. / TRANSLATORS: Soft reset reboots the computer without a power cycle msgid "Soft Reset" msgstr "\"MiÄ™kki\" reset" msgid "Warp mode disabled" msgstr "Tryb warp wyłączony" msgid "Warp mode enabled" msgstr "Tryb warp włączony" msgid "Zoom is disabled in RTG mode" msgstr "Zmiana rozmiaru wyłączona w trybie RTG" #, c-format msgid "Zoom: %s" msgstr "Rozmiar: %s" #, c-format msgid "Zoom: %s + Border" msgstr "Rozmiar: %s + ramka" #~ msgid "CD32 Gamepad" #~ msgstr "Pad CD32" #~ msgid "Host Device" #~ msgstr "UrzÄ…dzenie główne" #~ msgid "Joystick" #~ msgstr "Joystick" fs-uae-2.2.3+dfsg/po/fi.po0000644000175000017500000001346412162366654015440 0ustar glaubitzglaubitz# Finnish translations for fs-uae package. # Copyright (C) 2013 Frode Solheim # This file is distributed under the same license as the fs-uae package. # Frode Solheim , 2013. # msgid "" msgstr "" "Project-Id-Version: fs-uae\n" "Report-Msgid-Bugs-To: fs-uae@fengestad.no\n" "POT-Creation-Date: 2013-03-08 23:38+0100\n" "PO-Revision-Date: 2013-03-09 13:20+0200\n" "Last-Translator: Mika Vaisanen \n" "Language-Team: Finnish\n" "Language: fi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" msgid "Activated debugger" msgstr "Debuggeri aktivoitu" msgid "Amiga Control" msgstr "Amigan hallinta" #. / TRANSLATORS: In context "Zoom: Auto" msgid "Auto" msgstr "Automaattinen" msgid "Auto-Fire is Off" msgstr "Automaattitulitus EI" msgid "Auto-Fire is On" msgstr "Automaattitulitus ON" #, c-format msgid "Auto-fire disabled for port %d" msgstr "Automaattitulitus poistettu käytöstä portille %d" #, c-format msgid "Auto-fire enabled for port %d" msgstr "Automaattitulitus asetettu käyttöön portille %d" #. / TRANSLATORS: Empty or nothing #, c-format msgid "CD%d: Empty" msgstr "CD%d: Tyhjä" msgid "CD32 Pad Mode" msgstr "CD32 Pad-ohjaintila" #. / TRANSLATORS: This is a menu entry and must not be too long msgid "Custom Joystick Port" msgstr "Mukautettu peliohjain" msgid "Custom Mode" msgstr "Mukautettu tila" #. / TRANSLATORS: Empty or nothing #, c-format msgid "DF%d: Empty" msgstr "DF%d: Tyhjä" msgid "Disabled" msgstr "Ei käytössä" msgid "Eject" msgstr "Poista levy" msgid "Empty" msgstr "Tyhjä" msgid "Emulator Control" msgstr "Emulaattorin hallinta" #. / TRANSLATORS: In context "Zoom: Full Frame" msgid "Full Frame" msgstr "Täysi kehys" #, c-format msgid "HD not found: %s" msgstr "Kovalevyä %s ei löydy" # olisiko "Täysi resetointi" parempi? #. / TRANSLATORS: Hard reset is a computer reboot with an emulated power #. / cycle msgid "Hard Reset" msgstr "Kova resetointi" msgid "Input Options" msgstr "Syöttölaitteet" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Insert Into CD%d" msgstr "Aseta asemaan CD%d" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Insert Into DF%d" msgstr "Aseta asemaan DF%d" msgid "Invalid number of CD-ROM drives specified" msgstr "Virheellinen määrä CD-ROM asemia määritelty" msgid "Joystick Mode" msgstr "Peliohjaintila" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Joystick Port %d" msgstr "Peliohjain portti %d" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Joystick Port %d Device" msgstr "Peliohjain portti %d laite" #. / TRANSLATORS: This is a menu entry and must not be too long #, c-format msgid "Joystick Port %d Mode" msgstr "Peliohjain portti %d tila" msgid "Joystick Port 0" msgstr "Peliohjain portti 0" msgid "Joystick Port 1" msgstr "Peliohjain portti 1" msgid "Joystick Port 2" msgstr "Peliohjain portti 2" msgid "Joystick Port 3" msgstr "Peliohjain portti 3" msgid "Joystick Port 4" msgstr "Peliohjain portti 4" msgid "Joystick Ports" msgstr "Peliohjainportit" msgid "Keyboard" msgstr "Näppäimistö" msgid "Load" msgstr "Lataa" msgid "More..." msgstr "Lisää..." msgid "Mouse" msgstr "Hiiri" msgid "Mouse Mode" msgstr "Hiiritila" #. / TRANSLATORS: This is a menu entry and must not be too long: If you struggle #. / to get in short enough, just translate "No Device" instead. msgid "No Amiga Device" msgstr "Ei Amiga laitetta" #. / TRANSLATORS: This is a menu entry and must not be too long: If you struggle #. / to get in short enough, just translate "No Device" instead. msgid "No Host Device" msgstr "Ei isäntälaitetta" msgid "No configuration file was found" msgstr "Asetustiedostoa ei löytynyt" #, c-format msgid "Option \"%s\" is not enabled" msgstr "Asetusta \"%s\" ei ole määritetty" msgid "Option chip_memory must be a multiple of 512" msgstr "Asetuksen \"Chip muisti\" (chip_memory) täytyy olla 512:n kerrannainen" msgid "Option fast_memory must be a multiple of 1024" msgstr "" "Asetuksen \"Fast muisti\" (fast_memory) täytyy olla 1024:n kerrannainen" msgid "Option slow_memory must be a multiple of 256" msgstr "Asetuksen \"Slow muisti\" (slow_memory) täytyy olla 256:n kerrannainen" msgid "Option uaegfx.card needs a CPU with 32-bit addressing" msgstr "" "Asetus \"Picasso96-tuki\" (uaegfx.card) vaatii suorittimen 32-bittisellä " "muistiosoituksella" msgid "Option zorro_iii_memory must be a multiple of 1024" msgstr "" "Asetuksen \"Zorro III muisti\" (zorro_iii_memory) täytyy olla 1024:n " "kerrannainen" msgid "Options zorro_iii_memory needs a CPU with 32-bit addressing" msgstr "" "Asetus \"Zorro III muisti\" (zorro_iii_memory) vaatii suorittimen 32-" "bittisellä muistiosoituksella" #. / TRANSLATORS: This is a menu entry and must not be too long msgid "Parallel Joystick Ports" msgstr "Rinnakkaisportti-ohjaimet" msgid "Pause" msgstr "Tauko" #, c-format msgid "Port 0: %s" msgstr "Portti 0: %s" msgid "Port Settings" msgstr "Portin asetukset" msgid "Removable Media" msgstr "Irrotettavat mediat" #. / TRANSLATORS: Reset Amiga as in reboot the computer msgid "Reset Amiga" msgstr "Resetoi Amiga" msgid "Resume" msgstr "Jatka" msgid "Save" msgstr "Tallenna" msgid "Save States" msgstr "Tallennetut tilat" # olisiko "Nopea resetointi" parempi? #. / TRANSLATORS: Soft reset reboots the computer without a power cycle msgid "Soft Reset" msgstr "Pehmeä resetointi" msgid "Warp mode disabled" msgstr "Warp-nopeus pois päältä" msgid "Warp mode enabled" msgstr "Warp-nopeus päällä" msgid "Zoom is disabled in RTG mode" msgstr "Zoomaus ei ole käytössä RTG-tilassa" #, c-format msgid "Zoom: %s" msgstr "Zoomaus: %s" #, c-format msgid "Zoom: %s + Border" msgstr "Zoomaus: %s + Kehys" fs-uae-2.2.3+dfsg/windows/0000755000175000017500000000000012162366654015546 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/windows/replace_icon.py0000644000175000017500000001424312162366654020547 0ustar glaubitzglaubitz#! /usr/bin/env python # Copyright (C) 2005, Giovanni Bajo # Based on previous work under copyright (c) 2002 McMillan Enterprises, Inc. # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA # This code is courtesy of Thomas Heller, who # has kindly donated it to this project. RT_ICON = 3 RT_GROUP_ICON = 14 LOAD_LIBRARY_AS_DATAFILE = 2 import struct class Structure: def __init__ (self): size = self._sizeInBytes = struct.calcsize (self._format_) self._fields_ = list (struct.unpack (self._format_, '\000' * size)) indexes = self._indexes_ = {} for i in range (len (self._names_)): indexes[self._names_[i]] = i def dump (self): print "I: DUMP of", self for name in self._names_: if name[0] != '_': print "I: %20s = %s" % (name, getattr (self, name)) print def __getattr__ (self, name): if name in self._names_: index = self._indexes_[name] return self._fields_[index] try: return self.__dict__[name] except KeyError: raise AttributeError, name def __setattr__ (self, name, value): if name in self._names_: index = self._indexes_[name] self._fields_[index] = value else: self.__dict__[name] = value def tostring (self): return apply (struct.pack, [self._format_,] + self._fields_) def fromfile (self, file): data = file.read (self._sizeInBytes) self._fields_ = list (struct.unpack (self._format_, data)) class ICONDIRHEADER (Structure): _names_ = "idReserved", "idType", "idCount" _format_ = "hhh" class ICONDIRENTRY (Structure): _names_ = "bWidth", "bHeight", "bColorCount", "bReserved", "wPlanes", "wBitCount", "dwBytesInRes", "dwImageOffset" _format_ = "bbbbhhii" class GRPICONDIR (Structure): _names_ = "idReserved", "idType", "idCount" _format_ = "hhh" class GRPICONDIRENTRY (Structure): _names_ = "bWidth", "bHeight", "bColorCount", "bReserved", "wPlanes", "wBitCount", "dwBytesInRes", "nID" _format_ = "bbbbhhih" class IconFile: def __init__ (self, path): self.path = path file = open (path, "rb") self.entries = [] self.images = [] header = self.header = ICONDIRHEADER() header.fromfile (file) for i in range (header.idCount): entry = ICONDIRENTRY() entry.fromfile (file) #if entry.wBitCount == 32: self.entries.insert (0, entry) #else: self.entries.append (entry) self.entries.append (entry) #for i in range (header.idCount): # entry = ICONDIRENTRY() # entry.fromfile (file) # if entry.wBitCount == 32: continue # self.entries.append (entry) for e in self.entries: file.seek (e.dwImageOffset, 0) self.images.append (file.read (e.dwBytesInRes)) def grp_icon_dir (self): return self.header.tostring() def grp_icondir_entries (self): data = "" i = 1 for entry in self.entries: e = GRPICONDIRENTRY() for n in e._names_[:-1]: setattr(e, n, getattr (entry, n)) e.nID = i i = i + 1 data = data + e.tostring() return data def CopyIcons_FromIco (dstpath, srcpath, replace = 0): f = IconFile (srcpath) print "I: Updating icons from", srcpath, "to", dstpath import win32api #, win32con hdst = win32api.BeginUpdateResource (dstpath, replace) data = f.grp_icon_dir() data = data + f.grp_icondir_entries() win32api.UpdateResource (hdst, RT_GROUP_ICON, 1, data) print "I: Writing RT_GROUP_ICON resource with %d bytes" % len (data) i = 1 for data in f.images: #print data win32api.UpdateResource (hdst, RT_ICON, i, data) print "I: Writing RT_ICON resource with %d bytes" % len (data) i = i + 1 win32api.EndUpdateResource (hdst, 0) def CopyIcons (dstpath, srcpath): import os.path, string index = None try: srcpath, index = map (string.strip, string.split (srcpath, ',')) index = int (index) except: pass print "I: PATH, INDEX", srcpath, index srcext = os.path.splitext (srcpath)[1] if string.lower (srcext) == '.ico': return CopyIcons_FromIco (dstpath, srcpath) if index is not None: print "I: Updating icons from", srcpath, ", %d to" % index, dstpath else: print "I: Updating icons from", srcpath, "to", dstpath import win32api #, win32con hdst = win32api.BeginUpdateResource (dstpath, 0) hsrc = win32api.LoadLibraryEx (srcpath, 0, LOAD_LIBRARY_AS_DATAFILE) if index is None: grpname = win32api.EnumResourceNames (hsrc, RT_GROUP_ICON)[0] elif index >= 0: grpname = win32api.EnumResourceNames (hsrc, RT_GROUP_ICON)[index] else: grpname = -index data = win32api.LoadResource (hsrc, RT_GROUP_ICON, grpname) win32api.UpdateResource (hdst, RT_GROUP_ICON, grpname, data) for iconname in win32api.EnumResourceNames (hsrc, RT_ICON): data = win32api.LoadResource (hsrc, RT_ICON, iconname) win32api.UpdateResource (hdst, RT_ICON, iconname, data) win32api.FreeLibrary (hsrc) win32api.EndUpdateResource (hdst, 0) #CopyIcons_FromIco ("remotehelp.exe", "user1_monitor.ico") #CopyIcons_FromIco ("remotehelp.exe", "user1_monitor.ico") #CopyIcons_FromIco ("new_updater.exe", "setup.ico", 1) if __name__ == '__main__': import sys CopyIcons_FromIco (sys.argv[1], sys.argv[2], 0) fs-uae-2.2.3+dfsg/windows/Makefile0000644000175000017500000000440312162366654017207 0ustar glaubitzglaubitzinclude ../common.mk version = $(strip $(shell cat ../VERSION)) bindist: program cp -a ../licenses fs-uae-$(version)-windows/ cp -a ../README fs-uae-$(version)-windows/README.txt cp -a ../COPYING fs-uae-$(version)-windows/COPYING.txt cp -a ../example.conf fs-uae-$(version)-windows zip -9 -r fs-uae-$(version)-windows.zip fs-uae-$(version)-windows program: make -C .. rm -Rf fs-uae-$(version)-windows mkdir fs-uae-$(version)-windows cp /mingw/bin/zlib1.dll fs-uae-$(version)-windows cp /mingw/bin/libglib-2.0-0.dll fs-uae-$(version)-windows cp /mingw/bin/libgthread-2.0-0.dll fs-uae-$(version)-windows cp /mingw/bin/intl.dll fs-uae-$(version)-windows cp /mingw/bin/libpng*.dll fs-uae-$(version)-windows cp /mingw/bin/*freetype*.dll fs-uae-$(version)-windows cp /mingw/bin/libgcc_s_*.dll fs-uae-$(version)-windows cp /mingw/bin/libstdc++*.dll fs-uae-$(version)-windows cp /mingw/bin/libintl*.dll fs-uae-$(version)-windows cp /mingw/bin/libiconv*.dll fs-uae-$(version)-windows cp /mingw/bin/SDL.dll fs-uae-$(version)-windows cp /mingw/bin/OpenAL32.dll fs-uae-$(version)-windows cp -a ../fs-uae.exe fs-uae-$(version)-windows/fs-uae.exe cp -a ../../CAPSImg.dll fs-uae-$(version)-windows || cp -a ../CAPSImg.dll fs-uae-$(version)-windows cp -a ../share fs-uae-$(version)-windows strip fs-uae-$(version)-windows/*.exe strip fs-uae-$(version)-windows/*.dll python /c/signtool.py fs-uae-$(version)-windows/*.exe launcher: make -C ../launcher -f Makefile.mk rm -Rf ../launcher/dist cd ../launcher && python setup_py2exe.py py2exe rm -Rf fs-uae-$(version)-windows/launcher mv ../launcher/dist fs-uae-$(version)-windows/launcher cp -a ../launcher/share fs-uae-$(version)-windows/launcher/ mv fs-uae-$(version)-windows/launcher/fs-uae-launcher.exe "fs-uae-$(version)-windows/launcher/FS-UAE Launcher.exe" python replace_icon.py "fs-uae-$(version)-windows/launcher/FS-UAE Launcher.exe" ../icon/fs-uae-launcher.ico python /c/signtool.py "fs-uae-$(version)-windows/launcher/FS-UAE Launcher.exe" cp -a /mingw/Microsoft.VC90.CRT fs-uae-$(version)-windows/launcher/ bindist-plus: zip -9 -r fs-uae-plus-$(version)-windows.zip fs-uae-$(version)-windows setup: iscc fs-uae-setup.iss python /c/signtool.py fs-uae-$(version)-setup.exe fs-uae-2.2.3+dfsg/windows/fs-uae-setup.iss0000755000175000017500000000374212162366654020615 0ustar glaubitzglaubitz[Setup] AppName=FS-UAE AppVersion=2.2.3 AppVerName=FS-UAE 2.2.3 DefaultDirName={localappdata}\FS-UAE DefaultGroupName=FS-UAE UninstallDisplayIcon={app}\FS-UAE.exe OutputBaseFilename=fs-uae-2.2.3-setup OutputDir=. PrivilegesRequired=lowest ShowLanguageDialog=no DisableDirPage=yes ; DisableWelcomePage=yes DisableReadyPage=yes DisableStartupPrompt=yes DisableProgramGroupPage=yes [Files] Source: "fs-uae-2.2.3-windows\*"; DestDir: "{app}"; Flags: recursesubdirs replacesameversion; [Icons] Name: "{group}\FS-UAE Emulator"; Filename: "{app}\FS-UAE.exe" Name: "{group}\FS-UAE Launcher"; Filename: "{app}\launcher\FS-UAE Launcher.exe" [Registry] Root: HKCU; Subkey: "SOFTWARE\Classes\Applications\FS-UAE.exe\shell\open"; ValueType: string; ValueName: "FriendlyAppName"; ValueData: "FS-UAE Emulator"; Flags: uninsdeletekey Root: HKCU; Subkey: "SOFTWARE\Classes\Fengestad.FS-UAE.Config.1"; ValueType: string; ValueName: ""; ValueData: "FS-UAE Config File"; Flags: uninsdeletekey Root: HKCU; Subkey: "SOFTWARE\Classes\Fengestad.FS-UAE.Config.1"; ValueType: string; ValueName: "FriendlyTypeName"; ValueData: "FS-UAE Config File"; Flags: uninsdeletekey Root: HKCU; Subkey: "SOFTWARE\Classes\Fengestad.FS-UAE.Config.1\shell\open"; ValueType: string; ValueName: "FriendlyAppName"; ValueData: "FS-UAE Emulator"; Flags: uninsdeletekey Root: HKCU; Subkey: "SOFTWARE\Classes\Fengestad.FS-UAE.Config.1\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\FS-UAE.exe"" ""%1"""; Flags: uninsdeletekey ; Root: HKCU; Subkey: "SOFTWARE\Classes\Fengestad.FS-UAE.Config.1\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\FS-UAE.exe,2"; Flags: uninsdeletekey Root: HKCU; Subkey: "SOFTWARE\Classes\.fs-uae"; ValueType: string; ValueName: ""; ValueData: "Fengestad.FS-UAE.Config.1"; Flags: uninsdeletekey Root: HKCU; Subkey: "SOFTWARE\Classes\.fs-uae\OpenWithProgids"; ValueType: binary; ValueName: "Fengestad.FS-UAE.Config.1"; ValueData: ""; Flags: uninsdeletekey fs-uae-2.2.3+dfsg/launcher/0000755000175000017500000000000012162366654015655 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/launcher/po/0000755000175000017500000000000012162366654016273 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/launcher/po/hu.po0000644000175000017500000002533512162366654017257 0ustar glaubitzglaubitz# Hungarian translations for fs-uae-launcher package. # Copyright (C) 2012 Frode Solheim # This file is distributed under the same license as the fs-uae-launcher package. # Frode Solheim , 2012. # msgid "" msgstr "" "Project-Id-Version: fs-uae-launcher\n" "Report-Msgid-Bugs-To: fs-uae@fengestad.no\n" "POT-Creation-Date: 2013-06-25 21:21+0200\n" "PO-Revision-Date: 2012-11-10 16:11+0100\n" "Last-Translator: Frode Solheim \n" "Language-Team: Hungarian\n" "Language: hu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" msgid "16-bit" msgstr "" msgid "32-bit BGRA" msgstr "" msgid "32-bit RGBA" msgstr "" msgid "640x400 + Border" msgstr "" msgid "640x480 + Border" msgstr "" msgid "640x512 + Border" msgstr "" msgid "ADF & HDF Creator" msgstr "" msgid "ADF - Extended Floppy Disk Image (MFM)" msgstr "" msgid "ADF - Standard Floppy Disk Image" msgstr "" msgid "Abort" msgstr "" msgid "About {name}" msgstr "" msgid "Accurate" msgstr "" msgid "Add Directory to Search Path" msgstr "" msgid "Add Files to List" msgstr "" msgid "Add Multiple CD-ROMs at Once" msgstr "" msgid "Add Multiple Floppies at Once" msgstr "" msgid "Additional Options" msgstr "" msgid "Amiga Forever Import" msgstr "" msgid "Amiga Forever import task started" msgstr "" msgid "Amiga Model" msgstr "" msgid "Audio Settings" msgstr "" msgid "Auto" msgstr "" msgid "Auto + Border" msgstr "" msgid "Auto-Fire is Off" msgstr "" msgid "Auto-Fire is On" msgstr "" msgid "Available Kickstart Versions" msgstr "" msgid "Browse" msgstr "" msgid "Browse for File" msgstr "" msgid "Browse for Folder" msgstr "" msgid "Buffer swap only" msgstr "" msgid "Built-in TCP/IP Stack" msgstr "" msgid "Built-in TCP/IP Stack (bsdsocket.library)" msgstr "" msgid "CD-ROM Drive" msgstr "" msgid "CD-ROM Drives" msgstr "" msgid "CD-ROMs" msgstr "" msgid "CD32 Pad" msgstr "" msgid "Cancel" msgstr "" msgid "Chip RAM" msgstr "" msgid "Choose CD-ROM Image" msgstr "" msgid "Choose Extended ROM" msgstr "" msgid "Choose Floppy Image" msgstr "" msgid "Choose Hard Drive" msgstr "" msgid "Choose Kickstart ROM" msgstr "" msgid "Cleaning up..." msgstr "" msgid "Clear List" msgstr "" msgid "Click 'Scan' button if you want to re-scan" msgstr "" msgid "Click 'Scan' button to start scan" msgstr "" msgid "Click here to download" msgstr "" msgid "Click here to import kickstarts" msgstr "" msgid "Close" msgstr "" msgid "Committing data..." msgstr "" msgid "Config" msgstr "" msgid "Configuration" msgstr "" msgid "Configuration Browser" msgstr "" msgid "Configuration Warning" msgstr "" msgid "Configurations" msgstr "" msgid "Configure Joystick Buttons" msgstr "" msgid "Connect" msgstr "" msgid "" "Copy {0}\n" "to {1}" msgstr "" msgid "Could not open file for writing" msgstr "" msgid "Create" msgstr "" msgid "Cursor Keys and Right Ctrl/Alt" msgstr "" msgid "Custom" msgstr "" msgid "Custom Configuration" msgstr "" msgid "Custom IRC server address" msgstr "" msgid "Custom Joystick Port" msgstr "" msgid "Custom Options" msgstr "" msgid "Custom Settings" msgstr "" msgid "Default" msgstr "" msgid "Default ({0})" msgstr "" msgid "Destination Directory:" msgstr "" msgid "Disconnect" msgstr "" msgid "Disk Image Name:" msgstr "" msgid "Disk image created" msgstr "" msgid "Download failed (attempt {0}) - retrying in {0} seconds" msgstr "" msgid "Downloading {0}..." msgstr "" msgid "Edit Custom Options" msgstr "" msgid "Eject" msgstr "" msgid "Enable experimental net play GUI (requires restart)" msgstr "" msgid "Enable online database support (requires restart)" msgstr "" msgid "Error moving file into place" msgstr "" msgid "Error writing disk image" msgstr "" msgid "Expansions" msgstr "" msgid "Experimental Features" msgstr "" msgid "Extended ROM:" msgstr "" msgid "FS-UAE Launcher Settings" msgstr "" msgid "Fast RAM" msgstr "" msgid "Fetching database entries ({0})" msgstr "" msgid "Fetching game ratings ({0})" msgstr "" msgid "Fetching user game ratings ({0})" msgstr "" msgid "File already exists" msgstr "" msgid "Filters" msgstr "" msgid "Filters & Scaling" msgstr "" msgid "Filters:" msgstr "" msgid "Floppies" msgstr "" msgid "Floppy Drives" msgstr "" msgid "Floppy drive volume" msgstr "" msgid "Full Frame" msgstr "" msgid "Full-scene anti-aliasing (FSAA)" msgstr "" msgid "Fullscreen" msgstr "" msgid "Game Database" msgstr "" msgid "Game Database Settings" msgstr "" msgid "Game database password" msgstr "" msgid "Game database user name" msgstr "" msgid "Gamepad/Joystick Setup" msgstr "" msgid "Games and Configurations" msgstr "" msgid "Grab mouse and keyboard input when FS-UAE starts" msgstr "" msgid "Grab mouse and keyboard input when clicking on FS-UAE window" msgstr "" msgid "HDF - Partitionable Hard Drive Image (RDB)" msgstr "" msgid "HDF - Single Partition Hard Disk File" msgstr "" msgid "Hard Drives" msgstr "" msgid "Hardware" msgstr "" msgid "Hardware Options" msgstr "" msgid "IRC nickname" msgstr "" msgid "If you own Amiga Forever, select the drive/folder and click \"{0}\"" msgstr "" msgid "Import" msgstr "" msgid "Import From Amiga Forever CD/DVD" msgstr "" msgid "Import Kickstarts" msgstr "" msgid "Import Kickstarts and ROMs" msgstr "" msgid "Import task is done" msgstr "" msgid "Include built-in configurations" msgstr "" msgid "Input" msgstr "" msgid "Input Options" msgstr "" msgid "Input Settings" msgstr "" msgid "Internal" msgstr "" msgid "Invalid size specified" msgstr "" msgid "Joystick" msgstr "" msgid "Joystick Configuration" msgstr "" msgid "Joystick Ports" msgstr "" msgid "Joystick Settings" msgstr "" msgid "Keep aspect ratio when scaling (do not stretch)" msgstr "" msgid "Keyboard Settings" msgstr "" msgid "Kickstart ROM" msgstr "" msgid "Kickstart ROMs are missing" msgstr "" msgid "Kickstart import task started" msgstr "" msgid "Launching FS-UAE" msgstr "" msgid "Least Accurate" msgstr "" msgid "Less Accurate" msgstr "" msgid "List of Folders to Index" msgstr "" msgid "Low latency vsync (when using full vsync)" msgstr "" msgid "MB" msgstr "" msgid "Main Configuration Options" msgstr "" msgid "Main Menu" msgstr "" msgid "Media Swap List" msgstr "" msgid "Memory" msgstr "" msgid "Mouse" msgstr "" msgid "Mouse & Joystick Ports" msgstr "" msgid "Mouse Settings" msgstr "" msgid "Mouse speed (%)" msgstr "" msgid "Net Play" msgstr "" msgid "Net Play Settings" msgstr "" msgid "Net play tag (max 3 characters)" msgstr "" msgid "New Configuration" msgstr "" msgid "New Disk Image" msgstr "" msgid "Nick:" msgstr "" msgid "No Device" msgstr "" msgid "No Host Device" msgstr "" msgid "No Joysticks" msgstr "" msgid "No extended kickstart found for this model. Try 'scan' function." msgstr "" msgid "No joysticks are currently connected" msgstr "" msgid "No kickstart found for this model. " msgstr "" msgid "No scan in progress" msgstr "" msgid "Nothing" msgstr "" msgid "OK" msgstr "" msgid "Off" msgstr "" msgid "On" msgstr "" msgid "Open Game Database Entry" msgstr "" msgid "Open Hall of Light Entry" msgstr "" msgid "Open LemonAmiga Entry" msgstr "" msgid "Open MobyGames Entry" msgstr "" msgid "Open Scan Dialog" msgstr "" msgid "Open Tool to Configure Button Mapping" msgstr "" msgid "Open Wikipedia Entry" msgstr "" msgid "OpenGL Settings" msgstr "" msgid "Override Installed Memory" msgstr "" msgid "Parallel Port Joysticks" msgstr "" msgid "Picasso96 Support" msgstr "" msgid "Picasso96 Support (uaegfx.card)" msgstr "" msgid "Please wait..." msgstr "" msgid "Preferences" msgstr "" msgid "Preferred Joystick" msgstr "" msgid "Preferred device for secondary joystick:" msgstr "" msgid "Preparing WHDLoad..." msgstr "" msgid "Preparing floppy images..." msgstr "" msgid "Preparing hard drives..." msgstr "" msgid "Preparing..." msgstr "" msgid "Purging old entries..." msgstr "" msgid "Refresh Game Database" msgstr "" msgid "Refresh game configurations from database" msgstr "" msgid "Refresh list of connected joystick devices" msgstr "" msgid "Remove Directory from Search Path" msgstr "" msgid "Remove Selected Files" msgstr "" msgid "Render scan lines" msgstr "" msgid "Render scan lines in RTG graphics mode" msgstr "" msgid "Resetting database..." msgstr "" msgid "Restoring changes..." msgstr "" msgid "Retrying last operation (attempt {0})" msgstr "" msgid "Save Configuration" msgstr "" msgid "Saving changes..." msgstr "" msgid "Scaling Options" msgstr "" msgid "Scan" msgstr "" msgid "Scan & Indexing" msgstr "" msgid "Scan Files and Configurations" msgstr "" msgid "Scan complete" msgstr "" msgid "Scan error" msgstr "" msgid "Scan for Files" msgstr "" msgid "Scan for Kickstarts, Files and Configurations" msgstr "" msgid "Scanning .fs-uae files..." msgstr "" msgid "Scanning built-in entries..." msgstr "" msgid "Scanning configurations" msgstr "" msgid "Scanning configurations ({count} scanned)" msgstr "" msgid "Scanning database entries..." msgstr "" msgid "Scanning files" msgstr "" msgid "Scanning files ({count} scanned)" msgstr "" msgid "Scanning game database entries..." msgstr "" msgid "Select Destination Directory" msgstr "" msgid "Select Multiple CD-ROMs" msgstr "" msgid "Select Multiple Files..." msgstr "" msgid "Select Multiple Floppies" msgstr "" msgid "Select Source Directory" msgstr "" msgid "Select a folder containing Amiga kickstart files and click \"{0}\"" msgstr "" msgid "Settings" msgstr "" msgid "Show kickstart setup page on startup when all ROMs are missing" msgstr "" msgid "Size:" msgstr "" msgid "Slow RAM" msgstr "" msgid "Specified directory does not exist" msgstr "" msgid "Start" msgstr "" msgid "Start FS-UAE in fullscreen mode" msgstr "" msgid "Starting FS-UAE..." msgstr "" msgid "Starting scan" msgstr "" msgid "Swap left and right CTRL keys" msgstr "" msgid "Synchronizing database..." msgstr "" msgid "Synchronizing personal ratings..." msgstr "" msgid "Texture filter" msgstr "" msgid "Toggle Between Windowed and Full-Screen Mode" msgstr "" msgid "Tools" msgstr "" msgid "Ungrab mouse and keyboard on middle mouse click" msgstr "" msgid "Update available ({version})" msgstr "" msgid "Updating database" msgstr "" msgid "Updating game entries:" msgstr "" msgid "Use RDB disk images for size >= {0}" msgstr "" msgid "Video Settings" msgstr "" msgid "Video buffer format and color depth" msgstr "" msgid "Video synchronization" msgstr "" msgid "Video synchronization method" msgstr "" msgid "Video texture format (on the GPU)" msgstr "" msgid "WHDLoad Arguments" msgstr "" msgid "You should have kickstart files for each Amiga model you want to use:" msgstr "" msgid "Zoom Amiga display (crop)" msgstr "" msgid "Zorro III RAM" msgstr "" msgid "{amiga_model} with < 2 MB chip memory" msgstr "" fs-uae-2.2.3+dfsg/launcher/po/nb.po0000644000175000017500000004275612162366654017250 0ustar glaubitzglaubitz# Norwegian Bokmal translations for fs-uae-launcher package. # Copyright (C) 2012 Frode Solheim # This file is distributed under the same license as the fs-uae-launcher package. # Frode Solheim , 2012. # msgid "" msgstr "" "Project-Id-Version: fs-uae-launcher\n" "Report-Msgid-Bugs-To: fs-uae@fengestad.no\n" "POT-Creation-Date: 2013-06-25 21:21+0200\n" "PO-Revision-Date: 2013-03-17 19:52+0100\n" "Last-Translator: Frode Solheim \n" "Language-Team: Norwegian Bokmal\n" "Language: nb\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" msgid "16-bit" msgstr "16-bit" msgid "32-bit BGRA" msgstr "32-bit BGRA" msgid "32-bit RGBA" msgstr "32-bit RGBA" msgid "640x400 + Border" msgstr "640x400 + kant" msgid "640x480 + Border" msgstr "640x480 + kant" msgid "640x512 + Border" msgstr "640x512 + kant" msgid "ADF & HDF Creator" msgstr "Lag ADF & HDF-filer" msgid "ADF - Extended Floppy Disk Image (MFM)" msgstr "ADF - Utvidet diskettfil (MFM)" msgid "ADF - Standard Floppy Disk Image" msgstr "ADF - Standard diskettfil" msgid "Abort" msgstr "Avbryt" msgid "About {name}" msgstr "Om {name}" msgid "Accurate" msgstr "Nøyaktig" msgid "Add Directory to Search Path" msgstr "Legg til mappe i søkeliste" msgid "Add Files to List" msgstr "Legg til filer i liste" msgid "Add Multiple CD-ROMs at Once" msgstr "Legg til flere CD-er pÃ¥ en gang" msgid "Add Multiple Floppies at Once" msgstr "Legg til flere diskettfiler pÃ¥ en gang" msgid "Additional Options" msgstr "Flere innstillinger" msgid "Amiga Forever Import" msgstr "Importer fra Amiga Forever" msgid "Amiga Forever import task started" msgstr "Importjobb for Amiga Forever er startet" msgid "Amiga Model" msgstr "Amiga-modell" msgid "Audio Settings" msgstr "Innstillinger for audio" msgid "Auto" msgstr "Auto" msgid "Auto + Border" msgstr "Auto + kant" msgid "Auto-Fire is Off" msgstr "Auto-fire er av" msgid "Auto-Fire is On" msgstr "Auto-fire er pÃ¥" msgid "Available Kickstart Versions" msgstr "Tilgjengelige kickstart-versjoner" msgid "Browse" msgstr "Velg" msgid "Browse for File" msgstr "Bla etter filer" msgid "Browse for Folder" msgstr "Bla etter mapper" msgid "Buffer swap only" msgstr "" msgid "Built-in TCP/IP Stack" msgstr "Innebygd TCP/IP-stakk" msgid "Built-in TCP/IP Stack (bsdsocket.library)" msgstr "Innebygd TCP/IP-stakk (bsdsocket.library)" msgid "CD-ROM Drive" msgstr "CD-ROM-stasjon" msgid "CD-ROM Drives" msgstr "CD-ROM-stasjoner" msgid "CD-ROMs" msgstr "CD-er" msgid "CD32 Pad" msgstr "CD32-kontroll" msgid "Cancel" msgstr "Avbryt" msgid "Chip RAM" msgstr "Chip-RAM" msgid "Choose CD-ROM Image" msgstr "Velg CD-fil" msgid "Choose Extended ROM" msgstr "Velg utvidet ROM" msgid "Choose Floppy Image" msgstr "Velg diskettfil" msgid "Choose Hard Drive" msgstr "Velg harddisk" msgid "Choose Kickstart ROM" msgstr "Velg Kickstart-ROM" msgid "Cleaning up..." msgstr "Rydder opp..." msgid "Clear List" msgstr "Tøm liste" msgid "Click 'Scan' button if you want to re-scan" msgstr "Bruk 'søk'-knappen hvis du vil søke pÃ¥ nytt" msgid "Click 'Scan' button to start scan" msgstr "Bruk 'søk'-knappen for Ã¥ starte søk" msgid "Click here to download" msgstr "Klikk her for Ã¥ laste ned" msgid "Click here to import kickstarts" msgstr "Klikk her for Ã¥ importere kickstart-filer" msgid "Close" msgstr "Lukk" msgid "Committing data..." msgstr "Lagrer data..." msgid "Config" msgstr "Konfigurasjon" msgid "Configuration" msgstr "Konfigurasjon" msgid "Configuration Browser" msgstr "Konfigurasjonsvelger" msgid "Configuration Warning" msgstr "" msgid "Configurations" msgstr "Konfigurasjoner" msgid "Configure Joystick Buttons" msgstr "Konfigurer joystick-knapper" msgid "Connect" msgstr "Koble til" msgid "" "Copy {0}\n" "to {1}" msgstr "" "Kopier {0}\n" "til {1}" msgid "Could not open file for writing" msgstr "Kunne ikke Ã¥pne fil for skriving" msgid "Create" msgstr "Opprett" msgid "Cursor Keys and Right Ctrl/Alt" msgstr "Piltaster og høyre ctrl/alt" msgid "Custom" msgstr "Egendefinert" msgid "Custom Configuration" msgstr "Egendefinert konfigurasjon" msgid "Custom IRC server address" msgstr "Egendefinert adresse for IRC-server" msgid "Custom Joystick Port" msgstr "Egendefinert joystick-port" msgid "Custom Options" msgstr "Egendefinerte valg" msgid "Custom Settings" msgstr "Egendefinerte innstillinger" msgid "Default" msgstr "Standard" msgid "Default ({0})" msgstr "Standard ({0})" msgid "Destination Directory:" msgstr "Destinasjonsmappe:" msgid "Disconnect" msgstr "Koble fra" msgid "Disk Image Name:" msgstr "Navn pÃ¥ diskfil:" msgid "Disk image created" msgstr "Diskfil er opprettet" msgid "Download failed (attempt {0}) - retrying in {0} seconds" msgstr "Nedlasting feilet (forsøk {0}) - prøver pÃ¥ nytt om {0} sekunder" msgid "Downloading {0}..." msgstr "Laster ned {0}..." msgid "Edit Custom Options" msgstr "Rediger egendefinerte valg" msgid "Eject" msgstr "Løs ut" msgid "Enable experimental net play GUI (requires restart)" msgstr "Eksperimentelt GUI for online-spilling (krever omstart)" msgid "Enable online database support (requires restart)" msgstr "Støtte for online database (krever omstart)" msgid "Error moving file into place" msgstr "Feil under flytting av fil" msgid "Error writing disk image" msgstr "Feil under skriving av diskfil" msgid "Expansions" msgstr "Utvidelser" msgid "Experimental Features" msgstr "Eksperimentelle funksjoner" msgid "Extended ROM:" msgstr "Utvidet ROM:" msgid "FS-UAE Launcher Settings" msgstr "Innstillinger for FS-UAE Launcher" msgid "Fast RAM" msgstr "Fast-RAM" msgid "Fetching database entries ({0})" msgstr "Henter databaseoppføringer ({0})" msgid "Fetching game ratings ({0})" msgstr "Henter spill-poengsummer ({0})" msgid "Fetching user game ratings ({0})" msgstr "Henter spill-poengsummer for bruker ({0})" msgid "File already exists" msgstr "Filen finnes allerede" msgid "Filters" msgstr "Filtere" msgid "Filters & Scaling" msgstr "Filtere & skalering" msgid "Filters:" msgstr "Filtere:" msgid "Floppies" msgstr "Disketter" msgid "Floppy Drives" msgstr "Diskettstasjoner" msgid "Floppy drive volume" msgstr "Volum for diskettstasjon" msgid "Full Frame" msgstr "Fullt bilde" msgid "Full-scene anti-aliasing (FSAA)" msgstr "Full-scene anti-aliasing (FSAA)" msgid "Fullscreen" msgstr "Fullskjerm" msgid "Game Database" msgstr "Spill-database" msgid "Game Database Settings" msgstr "Innstillinger for spill-database" msgid "Game database password" msgstr "Passord for spill-database" msgid "Game database user name" msgstr "Brukernavn for spill-database" msgid "Gamepad/Joystick Setup" msgstr "Oppsett av Gamepad/Joystick" msgid "Games and Configurations" msgstr "Spill og konfigurasjoner" msgid "Grab mouse and keyboard input when FS-UAE starts" msgstr "Ta kontroll over mus og tastatur nÃ¥r FS-UAE starter" msgid "Grab mouse and keyboard input when clicking on FS-UAE window" msgstr "Ta kontroll over mus og tastatur ved klikk pÃ¥ FS-UAE-vinduet" msgid "HDF - Partitionable Hard Drive Image (RDB)" msgstr "HDF - Partisjonerbar harddisk fil (RDB)" msgid "HDF - Single Partition Hard Disk File" msgstr "HDF - Harddisk-fil med en enkelt partisjon" msgid "Hard Drives" msgstr "Harddisker" msgid "Hardware" msgstr "Maskinvare" msgid "Hardware Options" msgstr "Maskinvarevalg" msgid "IRC nickname" msgstr "IRC-kallenavn" msgid "If you own Amiga Forever, select the drive/folder and click \"{0}\"" msgstr "Hvis du har Amiga Forever, velg stasjon/mappe og klikk \"{0}\"" msgid "Import" msgstr "Importer" msgid "Import From Amiga Forever CD/DVD" msgstr "Importer fra Amiga Forever CD/DVD" msgid "Import Kickstarts" msgstr "Importer kickstart-filer" msgid "Import Kickstarts and ROMs" msgstr "Importer kickstart- og ROM-filer" msgid "Import task is done" msgstr "Importjobb er fullført" msgid "Include built-in configurations" msgstr "Inkluder innebygde konfigurasjoner" msgid "Input" msgstr "Innganger" msgid "Input Options" msgstr "Inngangsalternativer" msgid "Input Settings" msgstr "Innstillinger for inndata" msgid "Internal" msgstr "Intern" msgid "Invalid size specified" msgstr "Ugyldig størrelse spesifisert" msgid "Joystick" msgstr "Joystick" msgid "Joystick Configuration" msgstr "Joystick-konfigurasjon" msgid "Joystick Ports" msgstr "Joystickinnganger" msgid "Joystick Settings" msgstr "Joystick-innstillinger" msgid "Keep aspect ratio when scaling (do not stretch)" msgstr "Behold aspektratio ved skalering (ikke strekk)" msgid "Keyboard Settings" msgstr "Innstillinger for tastatur" msgid "Kickstart ROM" msgstr "Kickstart-ROM" msgid "Kickstart ROMs are missing" msgstr "Kickstart-filer mangler" msgid "Kickstart import task started" msgstr "Importjobb for kickstarter er startet" msgid "Launching FS-UAE" msgstr "Starter FS-UAE" msgid "Least Accurate" msgstr "Minst nøyaktig" msgid "Less Accurate" msgstr "Mindre nøyaktig" msgid "List of Folders to Index" msgstr "Liste over mapper som skal indekseres" msgid "Low latency vsync (when using full vsync)" msgstr "V-sync med lav forsinkelse (ved full v-sync)" msgid "MB" msgstr "MB" msgid "Main Configuration Options" msgstr "Hovedvalg" msgid "Main Menu" msgstr "Hovedmeny" msgid "Media Swap List" msgstr "Bytteliste for medier" msgid "Memory" msgstr "Minne" msgid "Mouse" msgstr "Mus" msgid "Mouse & Joystick Ports" msgstr "Mus og joystick-innganger" msgid "Mouse Settings" msgstr "Innstillinger for mus" msgid "Mouse speed (%)" msgstr "Mushastighet (%)" msgid "Net Play" msgstr "Nettspill" msgid "Net Play Settings" msgstr "Innstillinger for nettspill" msgid "Net play tag (max 3 characters)" msgstr "Tagg for nettspill (maks 3 tegn)" msgid "New Configuration" msgstr "Ny konfigurasjon" msgid "New Disk Image" msgstr "Ny diskfil" msgid "Nick:" msgstr "Kallenavn:" msgid "No Device" msgstr "Ingen enhet" msgid "No Host Device" msgstr "Ingen vertsenhet" msgid "No Joysticks" msgstr "Ingen joysticker" msgid "No extended kickstart found for this model. Try 'scan' function." msgstr "" "Ingen utvidet kickstart ble funnet for denne modellen. Prøv 'Søk'-funksjonen." msgid "No joysticks are currently connected" msgstr "Ingen joysticker er koblet til akkurat nÃ¥" msgid "No kickstart found for this model. " msgstr "Ingen kickstart ble funnet for denne modellen." msgid "No scan in progress" msgstr "Ingen søk pÃ¥gÃ¥r" msgid "Nothing" msgstr "Ingenting" msgid "OK" msgstr "OK" msgid "Off" msgstr "Av" msgid "On" msgstr "PÃ¥" msgid "Open Game Database Entry" msgstr "Ã…pne oppføring i spill-database" msgid "Open Hall of Light Entry" msgstr "Ã…pne oppføring i Hall of Light" msgid "Open LemonAmiga Entry" msgstr "Ã…pne oppføring i LemonAmiga" msgid "Open MobyGames Entry" msgstr "Ã…pne oppføring i MobyGames" msgid "Open Scan Dialog" msgstr "Ã…pne søkedialog" msgid "Open Tool to Configure Button Mapping" msgstr "Start verktøy for Ã¥ stille inn knapper" msgid "Open Wikipedia Entry" msgstr "Ã…pne oppføring i Wikipedia" msgid "OpenGL Settings" msgstr "OpenGL-innstillinger" msgid "Override Installed Memory" msgstr "Overstyr installert minne" msgid "Parallel Port Joysticks" msgstr "Parallellport-joysticker" msgid "Picasso96 Support" msgstr "Støtte for Picasso96" msgid "Picasso96 Support (uaegfx.card)" msgstr "Støtte for Picasso96 (uaegfx.card)" msgid "Please wait..." msgstr "Vennligst vent..." msgid "Preferences" msgstr "Innstillinger" msgid "Preferred Joystick" msgstr "Foretrukken joystick" msgid "Preferred device for secondary joystick:" msgstr "Foretrukken enhet for sekundær joystick:" msgid "Preparing WHDLoad..." msgstr "Forbereder WHDLoad..." msgid "Preparing floppy images..." msgstr "Forbereder diskettfiler" msgid "Preparing hard drives..." msgstr "Forbereder harddisker..." msgid "Preparing..." msgstr "Forbereder..." msgid "Purging old entries..." msgstr "Fjerner gamle oppføringer..." msgid "Refresh Game Database" msgstr "Oppdater spill-database" msgid "Refresh game configurations from database" msgstr "Oppdater spill-konfigurasjoner fra database" msgid "Refresh list of connected joystick devices" msgstr "Oppdater liste over tilkoblede joysticker" msgid "Remove Directory from Search Path" msgstr "Fjern mappe fra søkeliste" msgid "Remove Selected Files" msgstr "Fjern valgte filer" msgid "Render scan lines" msgstr "Tegn scanlines" msgid "Render scan lines in RTG graphics mode" msgstr "Tegn scanlines i RTG video-modus" msgid "Resetting database..." msgstr "Nullstiller database..." msgid "Restoring changes..." msgstr "Gjenoppretter endringer..." msgid "Retrying last operation (attempt {0})" msgstr "Forsøker siste operasjon pÃ¥ nytt (forsøk {0})" msgid "Save Configuration" msgstr "Lagre konfigurasjon" msgid "Saving changes..." msgstr "Lagrer endringer" msgid "Scaling Options" msgstr "Valg for skalering" msgid "Scan" msgstr "Søk" msgid "Scan & Indexing" msgstr "Skanning og indeksering" msgid "Scan Files and Configurations" msgstr "Skann filer og konfigurasjoner" msgid "Scan complete" msgstr "Søket er fullført" msgid "Scan error" msgstr "Feil ved skanning" msgid "Scan for Files" msgstr "Skann etter filer" msgid "Scan for Kickstarts, Files and Configurations" msgstr "Søk etter kickstarter, filer og konfigurasjoner" msgid "Scanning .fs-uae files..." msgstr "Undersøker .fs-uae-filer..." msgid "Scanning built-in entries..." msgstr "Undersøker innebygde oppføringer..." msgid "Scanning configurations" msgstr "Søker etter konfigurasjoner" msgid "Scanning configurations ({count} scanned)" msgstr "Undersøker databaseoppføringer ({count})" msgid "Scanning database entries..." msgstr "Undersøker databaseoppføringer..." msgid "Scanning files" msgstr "Undersøker filer" msgid "Scanning files ({count} scanned)" msgstr "Søker etter filer ({count})" msgid "Scanning game database entries..." msgstr "Skanner oppføringer i spill-database..." msgid "Select Destination Directory" msgstr "Velg destinasjonsmappe" msgid "Select Multiple CD-ROMs" msgstr "Velg flere CD-er" msgid "Select Multiple Files..." msgstr "Velg flere filer..." msgid "Select Multiple Floppies" msgstr "Velg flere disketter" msgid "Select Source Directory" msgstr "Velg kildemappe" msgid "Select a folder containing Amiga kickstart files and click \"{0}\"" msgstr "Velg en mappe som inneholder Amiga kickstart-filer og klikk \"{0}\"" msgid "Settings" msgstr "Innstillinger" msgid "Show kickstart setup page on startup when all ROMs are missing" msgstr "Vis side for kickstart-oppsett ved oppstart nÃ¥r alle ROM-filer mangler" msgid "Size:" msgstr "Størrelse:" msgid "Slow RAM" msgstr "Slow-RAM" msgid "Specified directory does not exist" msgstr "Spesifisert mappe finnes ikke" msgid "Start" msgstr "Start" msgid "Start FS-UAE in fullscreen mode" msgstr "Start FS-UAE i fullskjerm-modus" msgid "Starting FS-UAE..." msgstr "Starter FS-UAE..." msgid "Starting scan" msgstr "Starter søk" msgid "Swap left and right CTRL keys" msgstr "Bytt venstre og høyre CTRL-taster" msgid "Synchronizing database..." msgstr "Synkroniserer database..." msgid "Synchronizing personal ratings..." msgstr "Synkroniserer personlige poengsummer..." msgid "Texture filter" msgstr "Teksturfiler" msgid "Toggle Between Windowed and Full-Screen Mode" msgstr "Bytt mellom vindu- og fullskjerm-modus" msgid "Tools" msgstr "Verktøy" msgid "Ungrab mouse and keyboard on middle mouse click" msgstr "Frigi mus og tastatur ved klikk pÃ¥ midterste museknapp" msgid "Update available ({version})" msgstr "Oppdatering tilgjengelig ({version})" msgid "Updating database" msgstr "Opdaterer database" msgid "Updating game entries:" msgstr "Oppdaterer spilloppføringer:" msgid "Use RDB disk images for size >= {0}" msgstr "Bruk RDB diskfiler for størrelse >= {0}" msgid "Video Settings" msgstr "Innstillinger for video" msgid "Video buffer format and color depth" msgstr "Format og fargedybde for video-buffer" msgid "Video synchronization" msgstr "Synkronisering av video" msgid "Video synchronization method" msgstr "SynkroniseringsmÃ¥te for video" msgid "Video texture format (on the GPU)" msgstr "Teksturformat for video (pÃ¥ GPU)" msgid "WHDLoad Arguments" msgstr "WHDLoad-argumenter" msgid "You should have kickstart files for each Amiga model you want to use:" msgstr "Du bør ha kickstart-filer for de Amiga-modellene du ønsker Ã¥ bruke:" msgid "Zoom Amiga display (crop)" msgstr "Zoom Amiga-bilde (crop)" msgid "Zorro III RAM" msgstr "Zorro III-RAM" msgid "{amiga_model} with < 2 MB chip memory" msgstr "" #~ msgid "Amiga Model and Hardware" #~ msgstr "Amiga-modell og maskinvare" #~ msgid "Extended ROM" #~ msgstr "Utvidet ROM" #~ msgid "Force Full Vsync" #~ msgstr "Tving full vsync" #~ msgid "Host Options" #~ msgstr "Vertsvalg" #~ msgid "Joystick (Emulated by Keyboard)" #~ msgstr "Joystick (emulert av tastatur)" #~ msgid "Kickstart" #~ msgstr "Kickstart" #~ msgid "Kickstart Setup" #~ msgstr "Opsett av kickstart" #~ msgid "Kickstart Versions" #~ msgstr "Kickstart-versjoner" #~ msgid "Kickstarts" #~ msgstr "Kickstart-versjoner" #~ msgid "More..." #~ msgstr "Mer..." #~ msgid "Open Configuration" #~ msgstr "Ã…pne konfigurasjon" #~ msgid "Select Directory to Import From" #~ msgstr "Velg mappe Ã¥ importere fra" #~ msgid "Select Files..." #~ msgstr "Velg filer..." #~ msgid "Show Only Favorites (On/Off)" #~ msgstr "Vis kun favoritter (pÃ¥/av)" #~ msgid "Show Only Verified Configurations (On/Off)" #~ msgstr "Vis kun verifiserte konfigurasjoner (pÃ¥/av)" #~ msgid "Swap List" #~ msgstr "Bytteliste" #~ msgid "Sync to Vblank" #~ msgstr "Synk. til vblank" #~ msgid "Update ({version}) is available" #~ msgstr "Oppdatering ({version}) er tilgjengelig" #~ msgid "Window" #~ msgstr "Vindu" fs-uae-2.2.3+dfsg/launcher/po/pt_BR.po0000644000175000017500000004010412162366654017640 0ustar glaubitzglaubitz# Portuguese translations for fs-uae-launcher package. # Copyright (C) 2012 Frode Solheim # This file is distributed under the same license as the fs-uae-launcher package. # Frode Solheim , 2012. # msgid "" msgstr "" "Project-Id-Version: fs-uae-launcher\n" "Report-Msgid-Bugs-To: fs-uae@fengestad.no\n" "POT-Creation-Date: 2013-06-25 21:21+0200\n" "PO-Revision-Date: 2012-12-02 19:20-0000\n" "Last-Translator: Mário Mateus \n" "Language-Team: Portuguese\n" "Language: pt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 1.5.4\n" msgid "16-bit" msgstr "16-bit" msgid "32-bit BGRA" msgstr "32-bit BGRA" msgid "32-bit RGBA" msgstr "32-bit RGBA" msgid "640x400 + Border" msgstr "640x400 + Margem" msgid "640x480 + Border" msgstr "640x480 + Margem" msgid "640x512 + Border" msgstr "640x512 + Margem" msgid "ADF & HDF Creator" msgstr "" msgid "ADF - Extended Floppy Disk Image (MFM)" msgstr "" msgid "ADF - Standard Floppy Disk Image" msgstr "" msgid "Abort" msgstr "Cancelar" msgid "About {name}" msgstr "" msgid "Accurate" msgstr "Preciso" msgid "Add Directory to Search Path" msgstr "Adicionar pasta para ao caminho da procura" msgid "Add Files to List" msgstr "Adicionar Ficheiros à Lista" msgid "Add Multiple CD-ROMs at Once" msgstr "Adicionar Vários CD-ROMs de Uma Vez" msgid "Add Multiple Floppies at Once" msgstr "Adicionar Várias Disquetes de Uma Vez" msgid "Additional Options" msgstr "Opções Adicionais" msgid "Amiga Forever Import" msgstr "" msgid "Amiga Forever import task started" msgstr "A Acção de Importar Amiga Forever Começou " msgid "Amiga Model" msgstr "Modelo do Amiga" msgid "Audio Settings" msgstr "Opções de Som" msgid "Auto" msgstr "Auto" msgid "Auto + Border" msgstr "Auto + Margem" msgid "Auto-Fire is Off" msgstr "" msgid "Auto-Fire is On" msgstr "" msgid "Available Kickstart Versions" msgstr "Versões do Kickstart Disponiveis" msgid "Browse" msgstr "Procurar" msgid "Browse for File" msgstr "Procurar por um Ficheiro" msgid "Browse for Folder" msgstr "Procurar por uma Pasta" msgid "Buffer swap only" msgstr "" msgid "Built-in TCP/IP Stack" msgstr "Pilha TCP/IP Integrada" msgid "Built-in TCP/IP Stack (bsdsocket.library)" msgstr "Pilha TCP/IP Integrada (bsdsocket.library)" msgid "CD-ROM Drive" msgstr "Leitor de CD-ROM" msgid "CD-ROM Drives" msgstr "Leitores de CD-ROM" msgid "CD-ROMs" msgstr "CD-ROMs" msgid "CD32 Pad" msgstr "CD32 Joypad" msgid "Cancel" msgstr "Cancelar" msgid "Chip RAM" msgstr "Chip RAM" msgid "Choose CD-ROM Image" msgstr "Escolhe uma Imagem CD-ROM" msgid "Choose Extended ROM" msgstr "Escolhe ROM Extendida" msgid "Choose Floppy Image" msgstr "Escolhar uma Imagem disquete" msgid "Choose Hard Drive" msgstr "Escolher um Disco Rígido" msgid "Choose Kickstart ROM" msgstr "Escolher uma ROM Kickstart" msgid "Cleaning up..." msgstr "Limpando..." msgid "Clear List" msgstr "Limpar a Lista" msgid "Click 'Scan' button if you want to re-scan" msgstr "Clica no butão 'Procurar' se queres re-examinar" msgid "Click 'Scan' button to start scan" msgstr "Clica no butão 'Procurar' para começar" msgid "Click here to download" msgstr "Clica aqui para baixar" msgid "Click here to import kickstarts" msgstr "" msgid "Close" msgstr "Fechar" msgid "Committing data..." msgstr "Enviando dados..." msgid "Config" msgstr "Configuração" msgid "Configuration" msgstr "Configuração" msgid "Configuration Browser" msgstr "Opções de Configuração" msgid "Configuration Warning" msgstr "" msgid "Configurations" msgstr "Configurações" msgid "Configure Joystick Buttons" msgstr "Configurar os Botões do Joystick" msgid "Connect" msgstr "" msgid "" "Copy {0}\n" "to {1}" msgstr "" "Copiar {0}\n" "para {1}" msgid "Could not open file for writing" msgstr "" msgid "Create" msgstr "" msgid "Cursor Keys and Right Ctrl/Alt" msgstr "Teclas dos Cursores e Ctlr/Alt Direitos" msgid "Custom" msgstr "Personalizado" msgid "Custom Configuration" msgstr "" msgid "Custom IRC server address" msgstr "Servidor de IRC Personalizado" msgid "Custom Joystick Port" msgstr "" msgid "Custom Options" msgstr "Opções Personalizadas" msgid "Custom Settings" msgstr "Ajustes Personalizados" msgid "Default" msgstr "Por Defeito" msgid "Default ({0})" msgstr "Por Defeito ({0})" msgid "Destination Directory:" msgstr "" msgid "Disconnect" msgstr "" msgid "Disk Image Name:" msgstr "" msgid "Disk image created" msgstr "" msgid "Download failed (attempt {0}) - retrying in {0} seconds" msgstr "" msgid "Downloading {0}..." msgstr "A baixar {0}..." msgid "Edit Custom Options" msgstr "Editar Opções Personalizadas" msgid "Eject" msgstr "Ejectar" msgid "Enable experimental net play GUI (requires restart)" msgstr "" "Activar GUI experimental de jogar em rede (requere o reiniciar da aplicação)" msgid "Enable online database support (requires restart)" msgstr "" "Ligar o suporte da base de dados online(requere o reiniciar da aplicação)" msgid "Error moving file into place" msgstr "" msgid "Error writing disk image" msgstr "" msgid "Expansions" msgstr "Expansões" msgid "Experimental Features" msgstr "Características Experimentais" msgid "Extended ROM:" msgstr "ROM Extendida:" msgid "FS-UAE Launcher Settings" msgstr "Opções do FS-UAE Launcher" msgid "Fast RAM" msgstr "Fast RAM" msgid "Fetching database entries ({0})" msgstr "A puxar ({0}) entrada(s) da base de dados" msgid "Fetching game ratings ({0})" msgstr "Adquirindo avaliações de jogos ({0})" msgid "Fetching user game ratings ({0})" msgstr "" msgid "File already exists" msgstr "" msgid "Filters" msgstr "Filtros" msgid "Filters & Scaling" msgstr "Filtros e Escala" msgid "Filters:" msgstr "Filtros:" msgid "Floppies" msgstr "Disquetes" msgid "Floppy Drives" msgstr "Drive de disquetes" msgid "Floppy drive volume" msgstr "Nome da Disquete" msgid "Full Frame" msgstr "Ecrã Completo (sem margens)" msgid "Full-scene anti-aliasing (FSAA)" msgstr "Anti-aliasing completo de cena (FSAA)" msgid "Fullscreen" msgstr "Ecrã completo" msgid "Game Database" msgstr "Base de Dados de Jogos" msgid "Game Database Settings" msgstr "Ajustes da Base de Dados de Jogos" msgid "Game database password" msgstr "Palavra chave da base de dados de jogos" msgid "Game database user name" msgstr "Nome de utilizador da base de dados de jogos" msgid "Gamepad/Joystick Setup" msgstr "" msgid "Games and Configurations" msgstr "Jogos e Configurações" msgid "Grab mouse and keyboard input when FS-UAE starts" msgstr "Capturar as entradas de rato e teclado no arranque do FS-UAE" msgid "Grab mouse and keyboard input when clicking on FS-UAE window" msgstr "Capturar o rato e o teclado quado clicar na janela do FS-UAE" msgid "HDF - Partitionable Hard Drive Image (RDB)" msgstr "" msgid "HDF - Single Partition Hard Disk File" msgstr "" msgid "Hard Drives" msgstr "Discos Rígidos" msgid "Hardware" msgstr "Hardware" msgid "Hardware Options" msgstr "Opções do Hardware" msgid "IRC nickname" msgstr "Alcunha de IRC " msgid "If you own Amiga Forever, select the drive/folder and click \"{0}\"" msgstr "Se tens o Amiga Forever, selecciona o disco/pasta e carrega em \"{0}\"" msgid "Import" msgstr "Importar" msgid "Import From Amiga Forever CD/DVD" msgstr "Importar do CD/DVD Amiga Forever" msgid "Import Kickstarts" msgstr "" msgid "Import Kickstarts and ROMs" msgstr "Importar Kickstarts e ROMs" msgid "Import task is done" msgstr "Terefa de Importação Terminada" msgid "Include built-in configurations" msgstr "Incluir configurações Integradas" msgid "Input" msgstr "Entrada" msgid "Input Options" msgstr "Opções de Entrada" msgid "Input Settings" msgstr "Ajustes da Entrada" msgid "Internal" msgstr "Interno" msgid "Invalid size specified" msgstr "" msgid "Joystick" msgstr "Joystick" msgid "Joystick Configuration" msgstr "Configuração do Joystick" msgid "Joystick Ports" msgstr "Porta do Joystick" msgid "Joystick Settings" msgstr "Ajustes do Joystick" msgid "Keep aspect ratio when scaling (do not stretch)" msgstr "Manter o ratio de aspecto quando mudar de escala (sem esticar)" msgid "Keyboard Settings" msgstr "Ajustes do teclado" msgid "Kickstart ROM" msgstr "Kickstart ROM" msgid "Kickstart ROMs are missing" msgstr "" msgid "Kickstart import task started" msgstr "A Tarefa da importação do Kickstart começou" msgid "Launching FS-UAE" msgstr "Arrancando o FS-UAE" msgid "Least Accurate" msgstr "O Menos Preciso" msgid "Less Accurate" msgstr "Menos Preciso" msgid "List of Folders to Index" msgstr "Lista de Pastas a Indexar" msgid "Low latency vsync (when using full vsync)" msgstr "Vsync de baixa latência (quando se usa vsync completa)" msgid "MB" msgstr "" msgid "Main Configuration Options" msgstr "Opções de Configuração Principais" msgid "Main Menu" msgstr "" msgid "Media Swap List" msgstr "Lista dos Media para Trocar" msgid "Memory" msgstr "Memória" msgid "Mouse" msgstr "Rato" msgid "Mouse & Joystick Ports" msgstr "" msgid "Mouse Settings" msgstr "Ajustes do Rato" msgid "Mouse speed (%)" msgstr "Velocidade do Rato (%)" msgid "Net Play" msgstr "Jogar em Rede" msgid "Net Play Settings" msgstr "Ajustar Jogos em Rede" msgid "Net play tag (max 3 characters)" msgstr "Tag para Jogar em Rede (max 3 Caracteres)" msgid "New Configuration" msgstr "Nova Configuração" msgid "New Disk Image" msgstr "" msgid "Nick:" msgstr "" msgid "No Device" msgstr "Sem Dispositivo" msgid "No Host Device" msgstr "Nenhum Dispositivo Host" msgid "No Joysticks" msgstr "Sem Joysticks" msgid "No extended kickstart found for this model. Try 'scan' function." msgstr "" "Kickstart expandida não foi encontrada deste modelo. Tenta a função " "'Procurar'." msgid "No joysticks are currently connected" msgstr "Sem Joysticks actualmente ligados" msgid "No kickstart found for this model. " msgstr "Não foi encontrado Kickstart para este modelo" msgid "No scan in progress" msgstr "Não extiste nenhuma procura a decorrer" msgid "Nothing" msgstr "Nada" msgid "OK" msgstr "OK" msgid "Off" msgstr "Desligado" msgid "On" msgstr "Ligado" msgid "Open Game Database Entry" msgstr "" msgid "Open Hall of Light Entry" msgstr "" msgid "Open LemonAmiga Entry" msgstr "" msgid "Open MobyGames Entry" msgstr "" msgid "Open Scan Dialog" msgstr "Abre a Janela de Procura" msgid "Open Tool to Configure Button Mapping" msgstr "Abre a Ferramenta para Configurar os Butões" msgid "Open Wikipedia Entry" msgstr "" msgid "OpenGL Settings" msgstr "Ajustar OpenGL" msgid "Override Installed Memory" msgstr "" msgid "Parallel Port Joysticks" msgstr "Joysticks pela Porta Paralela" msgid "Picasso96 Support" msgstr "Suporte para Picasso96" msgid "Picasso96 Support (uaegfx.card)" msgstr "Suporte para Picasso96 (uaegfx.card)" msgid "Please wait..." msgstr "Espere se faz favor..." msgid "Preferences" msgstr "" msgid "Preferred Joystick" msgstr "Joystick Preferido" msgid "Preferred device for secondary joystick:" msgstr "Dispositivo preferido para joystick secundário:" msgid "Preparing WHDLoad..." msgstr "Preparando WHDLoad..." msgid "Preparing floppy images..." msgstr "Preparando as imagens de disquete..." msgid "Preparing hard drives..." msgstr "Preparando os discos rígidos..." msgid "Preparing..." msgstr "A Preparar..." msgid "Purging old entries..." msgstr "A purgar as entradas antigas..." msgid "Refresh Game Database" msgstr "" msgid "Refresh game configurations from database" msgstr "Actualizar a configuração dos jogos pela base de dados" msgid "Refresh list of connected joystick devices" msgstr "" msgid "Remove Directory from Search Path" msgstr "Remove Pasta do caminho da pesquisa" msgid "Remove Selected Files" msgstr "Remover os Ficheiros Seleccionados" msgid "Render scan lines" msgstr "Usar scanlines" msgid "Render scan lines in RTG graphics mode" msgstr "Usar scanlines no modo RTG" msgid "Resetting database..." msgstr "Reiniciando a base de dados" msgid "Restoring changes..." msgstr "A restaurar as mudanças..." msgid "Retrying last operation (attempt {0})" msgstr "" msgid "Save Configuration" msgstr "Guardar a Configuracão" msgid "Saving changes..." msgstr "A Guardar as mudanças..." msgid "Scaling Options" msgstr "Opções de Escala" msgid "Scan" msgstr "Procurar" msgid "Scan & Indexing" msgstr "Procurar & Indexar" msgid "Scan Files and Configurations" msgstr "" msgid "Scan complete" msgstr "Procura completa" msgid "Scan error" msgstr "Erro de procura" msgid "Scan for Files" msgstr "" msgid "Scan for Kickstarts, Files and Configurations" msgstr "Procurar Kickstarts, Ficheiros e Configurações" msgid "Scanning .fs-uae files..." msgstr "A procurar ficheiros .fs-uae..." msgid "Scanning built-in entries..." msgstr "Procurando pelas Entradas Internas..." msgid "Scanning configurations" msgstr "Procurando configurações" msgid "Scanning configurations ({count} scanned)" msgstr "Procurando configurações, ({count} encontrada(s))" msgid "Scanning database entries..." msgstr "Lendo entradas na base de datos..." msgid "Scanning files" msgstr "Procurando Ficheiros" msgid "Scanning files ({count} scanned)" msgstr "Procurando Ficheiros, ({count} encontrado(s))" msgid "Scanning game database entries..." msgstr "Lendo as entradas de jogos na base de dados..." msgid "Select Destination Directory" msgstr "" msgid "Select Multiple CD-ROMs" msgstr "Seleccionar Vários CD-ROMs" msgid "Select Multiple Files..." msgstr "Seleccionar Vários Ficheiros..." msgid "Select Multiple Floppies" msgstr "Seleccionar Várias Disquetes" msgid "Select Source Directory" msgstr "" msgid "Select a folder containing Amiga kickstart files and click \"{0}\"" msgstr "" "Selecciona a pasta onde se encontram os Kickstart do Amiga e carregue em " "\"{0}\"" msgid "Settings" msgstr "Ajustar" msgid "Show kickstart setup page on startup when all ROMs are missing" msgstr "" "Mostra a página de configuração dos Kickstart se as ROMs não forem encotradas" msgid "Size:" msgstr "" msgid "Slow RAM" msgstr "Slow RAM" msgid "Specified directory does not exist" msgstr "" msgid "Start" msgstr "Correr" msgid "Start FS-UAE in fullscreen mode" msgstr "Corrrer o FS-UAE no modo de ecrã completo" msgid "Starting FS-UAE..." msgstr "Arrancando o FS-UAE..." msgid "Starting scan" msgstr "A começar a procura" msgid "Swap left and right CTRL keys" msgstr "Trocar as teclas CTRL esquerda pela direita" msgid "Synchronizing database..." msgstr "Sincronizando a base de dados..." msgid "Synchronizing personal ratings..." msgstr "" msgid "Texture filter" msgstr "Filtro de Texturas" msgid "Toggle Between Windowed and Full-Screen Mode" msgstr "" msgid "Tools" msgstr "" msgid "Ungrab mouse and keyboard on middle mouse click" msgstr "Dar o control do teclado e do rato ao clicar o butão do meio do rato" msgid "Update available ({version})" msgstr "" msgid "Updating database" msgstr "Actualizando a base de dados" msgid "Updating game entries:" msgstr "Actualizando as entradas de jogos" msgid "Use RDB disk images for size >= {0}" msgstr "" msgid "Video Settings" msgstr "Ajustes de Video" msgid "Video buffer format and color depth" msgstr "Formato do buffer de Video e profundidade de cor" msgid "Video synchronization" msgstr "Sincronização de Video" msgid "Video synchronization method" msgstr "Método Sincronização de Video" msgid "Video texture format (on the GPU)" msgstr "Formato das Texturas de Video (no GPU)" msgid "WHDLoad Arguments" msgstr "Argumentos para o WHDLoad" msgid "You should have kickstart files for each Amiga model you want to use:" msgstr "" "Deves possuir os ficheiros Kickstart dos modelos Amiga que queiras usar:" msgid "Zoom Amiga display (crop)" msgstr "Zoom da Imagem do Amiga (recortado)" msgid "Zorro III RAM" msgstr "Zorro III RAM" msgid "{amiga_model} with < 2 MB chip memory" msgstr "" #~ msgid "Force Full Vsync" #~ msgstr "Vsync Completa Forçada" #~ msgid "Kickstart Setup" #~ msgstr "Configuração do Kickstart" #~ msgid "Select Directory to Import From" #~ msgstr "Seleccionar a Pasta para Importar de" #~ msgid "Sync to Vblank" #~ msgstr "Sincronizar a VBlank" #~ msgid "Update ({version}) is available" #~ msgstr "Actualização para a versão ({version}) está disponivel" fs-uae-2.2.3+dfsg/launcher/po/fr.po0000644000175000017500000004770112162366654017253 0ustar glaubitzglaubitz# French translations for fs-uae-launcher package. # Copyright (C) 2012 Frode Solheim # This file is distributed under the same license as the fs-uae-launcher package. # Frode Solheim , 2012. # msgid "" msgstr "" "Project-Id-Version: fs-uae-launcher\n" "Report-Msgid-Bugs-To: fs-uae@fengestad.no\n" "POT-Creation-Date: 2013-06-25 21:21+0200\n" "PO-Revision-Date: 2013-03-14 14:34+0100\n" "Last-Translator: Foul \n" "Language-Team: Foul \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "X-Poedit-Language: French\n" "X-Poedit-Country: FRANCE\n" msgid "16-bit" msgstr "16-bit" msgid "32-bit BGRA" msgstr "32-bit BGRA" msgid "32-bit RGBA" msgstr "32-bit RGBA" msgid "640x400 + Border" msgstr "640x400 + Bordures" msgid "640x480 + Border" msgstr "640x480 + Bordures" msgid "640x512 + Border" msgstr "640x512 + Bordures" msgid "ADF & HDF Creator" msgstr "Création ADF & HDF" msgid "ADF - Extended Floppy Disk Image (MFM)" msgstr "ADF - Image de Disquette Étendue (MFM)" msgid "ADF - Standard Floppy Disk Image" msgstr "ADF - Image de Disquette Standard" msgid "Abort" msgstr "Interrompre" msgid "About {name}" msgstr "A propos {name}" msgid "Accurate" msgstr "Précision Maximale" msgid "Add Directory to Search Path" msgstr "Ajouter Répertoire au Chemin de Recherche" msgid "Add Files to List" msgstr "Ajouter Fichiers à la Liste" msgid "Add Multiple CD-ROMs at Once" msgstr "Ajouter Plusieurs CD-ROMS à la Fois" msgid "Add Multiple Floppies at Once" msgstr "Ajouter Plusieurs Disquettes à la fois" msgid "Additional Options" msgstr "Options Supplémentaires" msgid "Amiga Forever Import" msgstr "Importer Amiga Forever" msgid "Amiga Forever import task started" msgstr "L'importation d'Amiga Forever à démarré" msgid "Amiga Model" msgstr "Modèle d'Amiga" msgid "Audio Settings" msgstr "Paramètres Audio" msgid "Auto" msgstr "Auto" msgid "Auto + Border" msgstr "Auto + Bordures" msgid "Auto-Fire is Off" msgstr "Tir-Auto Off" msgid "Auto-Fire is On" msgstr "Tir-Auto On" msgid "Available Kickstart Versions" msgstr "Versions des Kickstart Disponibles" msgid "Browse" msgstr "Parcourir" msgid "Browse for File" msgstr "Parcourir les Fichiers" msgid "Browse for Folder" msgstr "Parcourir les Dossiers" msgid "Buffer swap only" msgstr "" msgid "Built-in TCP/IP Stack" msgstr "Pile TCP/IP Interne" msgid "Built-in TCP/IP Stack (bsdsocket.library)" msgstr "Pile TCP/IP Interne (bsdsocket.library)" msgid "CD-ROM Drive" msgstr "Lecteur CD-ROM" msgid "CD-ROM Drives" msgstr "Lecteurs CD-ROM" msgid "CD-ROMs" msgstr "CD-ROMS" msgid "CD32 Pad" msgstr "Pad CD32" msgid "Cancel" msgstr "Annuler" msgid "Chip RAM" msgstr "Mémoire Chip" msgid "Choose CD-ROM Image" msgstr "Choisir Image CD-ROM" msgid "Choose Extended ROM" msgstr "Choisir ROM Etendue" msgid "Choose Floppy Image" msgstr "Choisir une Disquette" msgid "Choose Hard Drive" msgstr "Choisir un Disque Dur" msgid "Choose Kickstart ROM" msgstr "Choisir une ROM Kickstart" msgid "Cleaning up..." msgstr "Nettoyage ..." msgid "Clear List" msgstr "Effacer la Liste" msgid "Click 'Scan' button if you want to re-scan" msgstr "Cliquez sur le bouton 'Analyser' si vous voulez re-analyser" msgid "Click 'Scan' button to start scan" msgstr "Cliquez sur le bouton 'Analyser' pour commencer l'analyse" msgid "Click here to download" msgstr "Cliquer ici pour télécharger" msgid "Click here to import kickstarts" msgstr "Cliquez ici pour importer des kickstarts" msgid "Close" msgstr "Fermer" msgid "Committing data..." msgstr "Données en cours..." msgid "Config" msgstr "Configuration" msgid "Configuration" msgstr "Configuration" msgid "Configuration Browser" msgstr "Configuration du Navigateur" msgid "Configuration Warning" msgstr "" msgid "Configurations" msgstr "Configurations" msgid "Configure Joystick Buttons" msgstr "Configurer les boutons du Joystick" msgid "Connect" msgstr "Connexion" msgid "" "Copy {0}\n" "to {1}" msgstr "" "Copier {0}\n" "vers {1}" msgid "Could not open file for writing" msgstr "Impossible d'écrire sur le fichier" msgid "Create" msgstr "Créer" msgid "Cursor Keys and Right Ctrl/Alt" msgstr "Touches de curseur et Ctrl / Alt Droits" msgid "Custom" msgstr "Personnalisé" msgid "Custom Configuration" msgstr "Configuration Personnalisée" msgid "Custom IRC server address" msgstr "Adresse du Serveur IRC Personnalisé" msgid "Custom Joystick Port" msgstr "Port Joystick personnalisé" msgid "Custom Options" msgstr "Options Personnalisées" msgid "Custom Settings" msgstr "Réglages Personnalisés" msgid "Default" msgstr "Par Défaut" msgid "Default ({0})" msgstr "Par Défaut ({0})" msgid "Destination Directory:" msgstr "Répertoire de destination:" msgid "Disconnect" msgstr "Déconnexion" msgid "Disk Image Name:" msgstr "Nom de l'Image Disque:" msgid "Disk image created" msgstr "Image disque créée" msgid "Download failed (attempt {0}) - retrying in {0} seconds" msgstr "" "Le Téléchargement a échoué (tentative {0}) - réessayer dans {0} secondes" msgid "Downloading {0}..." msgstr "Téléchargement {0}..." msgid "Edit Custom Options" msgstr "Modifier les Options Personnalisées" msgid "Eject" msgstr "Ejecter" msgid "Enable experimental net play GUI (requires restart)" msgstr "" "Activer l'Interface de jeu en ligne expérimentale (nécessite un redémarrage)" msgid "Enable online database support (requires restart)" msgstr "" "Activer le support de la base de données en ligne (nécessite un redémarrage)" msgid "Error moving file into place" msgstr "Erreur de déplacement de fichier" msgid "Error writing disk image" msgstr "Erreur d'écriture image disque" msgid "Expansions" msgstr "Extensions" msgid "Experimental Features" msgstr "Caractéristiques Expérimentales" msgid "Extended ROM:" msgstr "ROM Etendue:" msgid "FS-UAE Launcher Settings" msgstr "Réglages du Lanceur FS-UAE" msgid "Fast RAM" msgstr "Mémoire Rapide" msgid "Fetching database entries ({0})" msgstr "Obtention des entrées de la base de données ({0})" msgid "Fetching game ratings ({0})" msgstr "Obtention de l'évaluation des jeux ({0})" msgid "Fetching user game ratings ({0})" msgstr "Obtention de l'évaluation des jeux utilisateur ({0})" msgid "File already exists" msgstr "Le fichier existe déjà" msgid "Filters" msgstr "Filtres" msgid "Filters & Scaling" msgstr "Filtres et Mise à l’Echelle" msgid "Filters:" msgstr "Filtres:" msgid "Floppies" msgstr "Disquettes" msgid "Floppy Drives" msgstr "Lecteurs de Disquettes" msgid "Floppy drive volume" msgstr "Volume du lecteur de disquette" msgid "Full Frame" msgstr "Plein Ecran" msgid "Full-scene anti-aliasing (FSAA)" msgstr "Anti-crénelage plein écran (FSAA)" msgid "Fullscreen" msgstr "Plein Ecran" msgid "Game Database" msgstr "Base de données de jeu" msgid "Game Database Settings" msgstr "Réglages de la base de donnée de jeu" msgid "Game database password" msgstr "Mot de passe de la base de données de jeu" msgid "Game database user name" msgstr "Nom d'utilisateur de la base de données de jeu" msgid "Gamepad/Joystick Setup" msgstr "Configuration Gamepad/Joystick" msgid "Games and Configurations" msgstr "Jeux et Configurations" msgid "Grab mouse and keyboard input when FS-UAE starts" msgstr "Capture la souris et le clavier lorsque FS-UAE démarre" msgid "Grab mouse and keyboard input when clicking on FS-UAE window" msgstr "" "Capture la souris et le clavier lorsque vous cliquez sur la fenêtre FS-UAE" msgid "HDF - Partitionable Hard Drive Image (RDB)" msgstr "HDF - Image de Disque Dur Partitionnable (RDB)" msgid "HDF - Single Partition Hard Disk File" msgstr "HDF - Fichier de disque dur à partition unique" msgid "Hard Drives" msgstr "Disques Durs" msgid "Hardware" msgstr "Matériel" msgid "Hardware Options" msgstr "Options Matérielles" msgid "IRC nickname" msgstr "Pseudo IRC" msgid "If you own Amiga Forever, select the drive/folder and click \"{0}\"" msgstr "" "Si vous possédez Amiga Forever, sélectionnez le lecteur/dossier et cliquez " "sur \"{0}\"" msgid "Import" msgstr "Importer" msgid "Import From Amiga Forever CD/DVD" msgstr "Importer depuis les CD/DVD d'Amiga Forever" msgid "Import Kickstarts" msgstr "Importer des Kickstarts" msgid "Import Kickstarts and ROMs" msgstr "Importer Kickstarts et ROMs" msgid "Import task is done" msgstr "L'importation est terminée" msgid "Include built-in configurations" msgstr "Inclure les configurations Internes" msgid "Input" msgstr "Entrée" msgid "Input Options" msgstr "Options d'entrée" msgid "Input Settings" msgstr "Paramètres d'Entrée" msgid "Internal" msgstr "Interne" msgid "Invalid size specified" msgstr "Taille spécifiée invalide" msgid "Joystick" msgstr "Joystick" msgid "Joystick Configuration" msgstr "Configuration du Joystick" msgid "Joystick Ports" msgstr "Ports Joystick" msgid "Joystick Settings" msgstr "Paramètres du Joystick" msgid "Keep aspect ratio when scaling (do not stretch)" msgstr "Conserver les proportions lorsque mise à l'échelle (ne pas étirer)" msgid "Keyboard Settings" msgstr "Réglages du clavier" msgid "Kickstart ROM" msgstr "ROM Kickstart" msgid "Kickstart ROMs are missing" msgstr "ROMs Kickstarts Manquantes" msgid "Kickstart import task started" msgstr "L'importation du Kickstart a démarré" msgid "Launching FS-UAE" msgstr "Démarrage de FS-UAE" msgid "Least Accurate" msgstr "Précision Minimale" msgid "Less Accurate" msgstr "Précision Moyenne" msgid "List of Folders to Index" msgstr "Liste des Dossiers à Indexer" msgid "Low latency vsync (when using full vsync)" msgstr "Vsync à latence faible (lors de l'utilisation de vsync complète)" msgid "MB" msgstr "MB" msgid "Main Configuration Options" msgstr "Options de Configuration Principales" msgid "Main Menu" msgstr "Menu Principal" msgid "Media Swap List" msgstr "Liste d’Echange de Média" msgid "Memory" msgstr "Mémoire" msgid "Mouse" msgstr "Souris" msgid "Mouse & Joystick Ports" msgstr "Ports Souris & Joystick" msgid "Mouse Settings" msgstr "Paramètres de la Souris" msgid "Mouse speed (%)" msgstr "Vitesse de la souris (%)" msgid "Net Play" msgstr "Jeu en Ligne" msgid "Net Play Settings" msgstr "Paramètres du Jeu en Ligne" msgid "Net play tag (max 3 characters)" msgstr "Tag jeu en ligne (max 3 caractères)" msgid "New Configuration" msgstr "Nouvelle Configuration" msgid "New Disk Image" msgstr "Nouvelle Image de Disque" msgid "Nick:" msgstr "Pseudo:" msgid "No Device" msgstr "Aucun Périphérique" msgid "No Host Device" msgstr "Pas de Périphérique Hôte" msgid "No Joysticks" msgstr "Pas de Joystick" msgid "No extended kickstart found for this model. Try 'scan' function." msgstr "" "Pas de Kickstart Etendu trouvé pour ce modèle. Essayez la fonction 'Analyse'." msgid "No joysticks are currently connected" msgstr "Pas de Joystick actuellement connecté" msgid "No kickstart found for this model. " msgstr "Pas de kickstart trouvé pour ce modèle." msgid "No scan in progress" msgstr "Pas d'analyse en cours" msgid "Nothing" msgstr "Aucun" msgid "OK" msgstr "OK" msgid "Off" msgstr "Off" msgid "On" msgstr "On" msgid "Open Game Database Entry" msgstr "Ouvrir les Entrées de la base de donnée de jeu" msgid "Open Hall of Light Entry" msgstr "Ouvrir les Entrées de Hall of Light" msgid "Open LemonAmiga Entry" msgstr "Ouvrir les Entrées de LemonAmiga" msgid "Open MobyGames Entry" msgstr "Ouvrir les Entrées de MobyGames" msgid "Open Scan Dialog" msgstr "Ouvrir la boîte de dialogue d'Analyse" msgid "Open Tool to Configure Button Mapping" msgstr "Ouvrir l'Outil de Configuration des Boutons" msgid "Open Wikipedia Entry" msgstr "Ouvrir les Entrées de Wikipedia" msgid "OpenGL Settings" msgstr "Paramètres OpenGL" msgid "Override Installed Memory" msgstr "Remplacer Mémoire installée" msgid "Parallel Port Joysticks" msgstr "Joysticks sur port parallèle" msgid "Picasso96 Support" msgstr "Prise en Charge de Picasso96" msgid "Picasso96 Support (uaegfx.card)" msgstr "Prise en Charge de Picasso96 (uaegfx.card)" msgid "Please wait..." msgstr "Patientez S.V.P." msgid "Preferences" msgstr "Préférences" msgid "Preferred Joystick" msgstr "Joystick Préféré" msgid "Preferred device for secondary joystick:" msgstr "Périphérique préféré pour le joystick secondaire:" msgid "Preparing WHDLoad..." msgstr "Préparation de WHDLoad..." msgid "Preparing floppy images..." msgstr "Préparation des images de disquettes..." msgid "Preparing hard drives..." msgstr "Préparation du disque dur..." msgid "Preparing..." msgstr "Préparations..." msgid "Purging old entries..." msgstr "Purge des anciennes entrées ..." msgid "Refresh Game Database" msgstr "Actualiser Base de données des Jeux" msgid "Refresh game configurations from database" msgstr "Rafraîchir la base de données des configurations de jeu" msgid "Refresh list of connected joystick devices" msgstr "Actualiser la liste des joystick connectés" msgid "Remove Directory from Search Path" msgstr "Supprimer Répertoire du Chemin de Recherche" msgid "Remove Selected Files" msgstr "Supprimer les Fichiers Sélectionnés" msgid "Render scan lines" msgstr "Afficher les lignes de balayage" msgid "Render scan lines in RTG graphics mode" msgstr "Afficher les lignes de balayage en mode graphique RTG" msgid "Resetting database..." msgstr "Réinitialisation de la base de données..." msgid "Restoring changes..." msgstr "Restauration des Changements" msgid "Retrying last operation (attempt {0})" msgstr "Nouvelle tentative sur dernière opération (tentative {0})" msgid "Save Configuration" msgstr "Sauvegarde de la Configuration" msgid "Saving changes..." msgstr "Sauvegarde des Changements" msgid "Scaling Options" msgstr "Options de mise à l'échelle" msgid "Scan" msgstr "Analyse" msgid "Scan & Indexing" msgstr "Analyse et Indexation" msgid "Scan Files and Configurations" msgstr "Analyser les Fichiers et Configurations" msgid "Scan complete" msgstr "Analyse complète" msgid "Scan error" msgstr "Erreur d'analyse" msgid "Scan for Files" msgstr "Analyser les Fichiers" msgid "Scan for Kickstarts, Files and Configurations" msgstr "Analyser les Kickstarts, Fichiers et Configurations" msgid "Scanning .fs-uae files..." msgstr "Analyse des fichiers .fs-uae..." msgid "Scanning built-in entries..." msgstr "Analyse des entrées internes..." msgid "Scanning configurations" msgstr "Analyse des configurations" msgid "Scanning configurations ({count} scanned)" msgstr "Analyse des configurations ({count} analysés)" msgid "Scanning database entries..." msgstr "Analyse des entrées de la base de données..." msgid "Scanning files" msgstr "Analyse des fichiers" msgid "Scanning files ({count} scanned)" msgstr "Analyse des Fichiers ({count}) analysés" msgid "Scanning game database entries..." msgstr "Analyse des entrées de la base de jeu..." msgid "Select Destination Directory" msgstr "Sélectionner le Répertoire de Destination" msgid "Select Multiple CD-ROMs" msgstr "Sélectionner Plusieurs CD-ROMS" msgid "Select Multiple Files..." msgstr "Sélectionner plusieurs fichiers ..." msgid "Select Multiple Floppies" msgstr "Sélectionner Plusieurs Disquettes" msgid "Select Source Directory" msgstr "Sélectionner le Répertoire Source" msgid "Select a folder containing Amiga kickstart files and click \"{0}\"" msgstr "" "Sélectionnez un dossier contenant les fichiers kickstart Amiga et cliquez " "sur \"{0}\"" msgid "Settings" msgstr "Paramètres" msgid "Show kickstart setup page on startup when all ROMs are missing" msgstr "" "Afficher la page de configuration du kickstart au démarrage lorsque toutes " "les ROM sont manquantes" msgid "Size:" msgstr "Taille:" msgid "Slow RAM" msgstr "Mémoire Lente" msgid "Specified directory does not exist" msgstr "Le répertoire spécifié n'existe pas" msgid "Start" msgstr "Démarrer" msgid "Start FS-UAE in fullscreen mode" msgstr "Démarrer FS-UAE en mode plein écran" msgid "Starting FS-UAE..." msgstr "Lancement de FS-UAE" msgid "Starting scan" msgstr "Démarrage de l'analyse" msgid "Swap left and right CTRL keys" msgstr "Echanger les touches CTRL gauches et droites" msgid "Synchronizing database..." msgstr "Synchronisation de la base de données ..." msgid "Synchronizing personal ratings..." msgstr "Synchronisation des évaluations personnelles ..." msgid "Texture filter" msgstr "Filtre de texture" msgid "Toggle Between Windowed and Full-Screen Mode" msgstr "Basculer Entre le Mode Fenêtré et Plein Ecran" msgid "Tools" msgstr "Outils" msgid "Ungrab mouse and keyboard on middle mouse click" msgstr "Relâche la souris et le clavier sur clic du milieu de la souris" msgid "Update available ({version})" msgstr "Mise à jour possible ({version})" msgid "Updating database" msgstr "Mise à jour de la base de données" msgid "Updating game entries:" msgstr "Mise à jour des entrées de jeu:" msgid "Use RDB disk images for size >= {0}" msgstr "Utiliser des images de disque RDB pour la taille >= {0}" msgid "Video Settings" msgstr "Paramètres vidéo" msgid "Video buffer format and color depth" msgstr "Format de mémoire vidéo et profondeur de couleur" msgid "Video synchronization" msgstr "Synchronisation vidéo" msgid "Video synchronization method" msgstr "Méthode de synchronisation vidéo" msgid "Video texture format (on the GPU)" msgstr "Format de texture vidéo (sur le GPU)" msgid "WHDLoad Arguments" msgstr "Arguments de WHDLoad" msgid "You should have kickstart files for each Amiga model you want to use:" msgstr "" "Kickstart original préférable pour chaque modèle d'Amiga que vous souhaitez " "utiliser:" msgid "Zoom Amiga display (crop)" msgstr "Affichage du Zoom Amiga (découper)" msgid "Zorro III RAM" msgstr "Mémoire Zorro III" msgid "{amiga_model} with < 2 MB chip memory" msgstr "" #~ msgid "Add Multiple CD Images at Once" #~ msgstr "Ajouter Plusieurs Images de CD à la fois" #~ msgid "Add Multiple Files at Once" #~ msgstr "Ajouter Plusieurs Fichiers à la fois" #~ msgid "Amiga Hardware Options" #~ msgstr "Options du Matériel Amiga" #~ msgid "Amiga Model and Hardware" #~ msgstr "Modèle d'Amiga et du matériel" #~ msgid "Configure CD-ROMs" #~ msgstr "Configurer CD-ROMs" #~ msgid "Configure Floppies" #~ msgstr "Configurer les disquettes" #~ msgid "Configure Hard Drives" #~ msgstr "Configurer Disque(s) Dur" #~ msgid "Configure Hardware" #~ msgstr "Configurer le Matériel" #~ msgid "Configure Input" #~ msgstr "Configurer les Entrées" #~ msgid "Configure Joysticks" #~ msgstr "Configurer les Joysticks" #~ msgid "Extended ROM" #~ msgstr "ROM Etendue" #~ msgid "Floppies..." #~ msgstr "Disquettes" #~ msgid "Force Full Vsync" #~ msgstr "Forcer Utilisation Vsync Complète" #~ msgid "Hard Drive {0}" #~ msgstr "Disque Dur {0}" #~ msgid "Host Options" #~ msgstr "Options de l’Hôte" #~ msgid "Joystick (Emulated by Keyboard)" #~ msgstr "Joystick (émulé par le clavier)" #~ msgid "Kickstart" #~ msgstr "Kickstart" #~ msgid "Kickstart Setup" #~ msgstr "Configuration du Kickstart" #~ msgid "Kickstart Versions" #~ msgstr "Versions du Kickstart" #~ msgid "Media List" #~ msgstr "Liste des Médias" #~ msgid "More Configuration Options" #~ msgstr "Options de Configurations Supplémentaires" #~ msgid "More..." #~ msgstr "Plus..." #~ msgid "Open Configuration" #~ msgstr "Ouvrir Configuration" #~ msgid "Removable Media" #~ msgstr "Média Amovible" #~ msgid "Scan for Kickstarts, Games and Configurations" #~ msgstr "Analyse des Kickstarts, Jeux et Configurations" #~ msgid "Select Directory to Import From" #~ msgstr "Sélectionner le répertoire d'importation" #~ msgid "Select Files..." #~ msgstr "Selection des Fichiers" #~ msgid "Show Only Favorites (On/Off)" #~ msgstr "Montrer Uniquement les Favoris (On/Off)" #~ msgid "Show Only Verified Configurations (On/Off)" #~ msgstr "Afficher Uniquement les Configurations Vérifiées (On/Off)" #~ msgid "Swap List" #~ msgstr "Inverser la Liste" #~ msgid "Sync to Vblank" #~ msgstr "Synchro en utilisant VBLANK" #~ msgid "Update ({version}) is available" #~ msgstr "La mise à jour ({version}) est disponible" #~ msgid "Window" #~ msgstr "Fenêtré" fs-uae-2.2.3+dfsg/launcher/po/it.po0000644000175000017500000004622112162366654017254 0ustar glaubitzglaubitz# Italian translations for fs-uae-launcher package. # Copyright (C) 2012 Frode Solheim # This file is distributed under the same license as the fs-uae-launcher package. # Frode Solheim , 2012. # msgid "" msgstr "" "Project-Id-Version: fs-uae-launcher\n" "Report-Msgid-Bugs-To: fs-uae@fengestad.no\n" "POT-Creation-Date: 2013-04-19 19:06+0200\n" "PO-Revision-Date: 2013-04-20 18:05+0100\n" "Last-Translator: Speedvicio \n" "Language-Team: Italian\n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" msgid "16-bit" msgstr "16-bit" msgid "32-bit BGRA" msgstr "32-bit BGRA" msgid "32-bit RGBA" msgstr "32-bit RGBA" msgid "640x400 + Border" msgstr "640x400 + Bordo" msgid "640x480 + Border" msgstr "640x480 + Bordo" msgid "640x512 + Border" msgstr "640x512 + Bordo" msgid "ADF & HDF Creator" msgstr "Creatore ADF & HDF" msgid "ADF - Extended Floppy Disk Image (MFM)" msgstr "ADF - Immagine Floppy Disk Estesa (MFM)" msgid "ADF - Standard Floppy Disk Image" msgstr "ADF - Immagine Floppy Disk Standard" msgid "Abort" msgstr "Annulla" msgid "About {name}" msgstr "Circa {name}" msgid "Accurate" msgstr "Precisione" msgid "Add Directory to Search Path" msgstr "Aggiungi Cartella da Ricercare" msgid "Add Files to List" msgstr "Aggiungi Files alla Lista" msgid "Add Multiple CD-ROMs at Once" msgstr "Aggiungi CD-ROM Multipli al Volo" msgid "Add Multiple Floppies at Once" msgstr "Aggiungi Floppies Multipli al Volo" msgid "Additional Options" msgstr "Opzioni Aggiuntive" msgid "Amiga Forever Import" msgstr "Importare Amiga Forever" msgid "Amiga Forever import task started" msgstr "Funzione di importazione Amiga Forever avviata" msgid "Amiga Model" msgstr "Modello Amiga" msgid "Audio Settings" msgstr "Settaggi Audio" msgid "Auto" msgstr "Auto" msgid "Auto + Border" msgstr "Auto + Bordo" msgid "Auto-Fire is Off" msgstr "Auto-Fire Spento" msgid "Auto-Fire is On" msgstr "Auto-Fire Attivato" msgid "Available Kickstart Versions" msgstr "Versioni di Kickstart Disponibili" msgid "Browse" msgstr "Sfoglia" msgid "Browse for File" msgstr "Ricerca File" msgid "Browse for Folder" msgstr "Ricerca Cartelle" msgid "Buffer swap only" msgstr "Scambia solo il buffer " msgid "Built-in TCP/IP Stack" msgstr "TCP/IP Stack Incorporato" msgid "Built-in TCP/IP Stack (bsdsocket.library)" msgstr "TCP/IP Stack Incorporato (bsdsocket.library)" msgid "CD-ROM Drive" msgstr "Drive CD-ROM" msgid "CD-ROM Drives" msgstr "Supporti CD-ROM" msgid "CD-ROMs" msgstr "CD-ROMs" msgid "CD32 Pad" msgstr "Pad CD32" msgid "Cancel" msgstr "Annulla" msgid "Chip RAM" msgstr "Chip RAM" msgid "Choose CD-ROM Image" msgstr "Scegli Immagine CD-ROM" msgid "Choose Extended ROM" msgstr "Seleziona ROM Estesa" msgid "Choose Floppy Image" msgstr "Seleziona Immagine Floppy" msgid "Choose Hard Drive" msgstr "Scegli Hard Drive" msgid "Choose Kickstart ROM" msgstr "Seleziona ROM Kickstart" msgid "Cleaning up..." msgstr "Ripulendo..." msgid "Clear List" msgstr "Pulisci Lista" msgid "Click 'Scan' button if you want to re-scan" msgstr "Clikka il bottone 'Scansiona' se vuoi ri-scansionare" msgid "Click 'Scan' button to start scan" msgstr "Clikka il bottone 'Scansiona' per iniziare la scansione" msgid "Click here to download" msgstr "Premi qui per scaricare" msgid "Click here to import kickstarts" msgstr "Clikka qui per importare i kickstarts" msgid "Close" msgstr "Chiudi" msgid "Committing data..." msgstr "Invia dati..." msgid "Config" msgstr "Configura" msgid "Configuration" msgstr "Configurazione" msgid "Configuration Browser" msgstr "Configurazione Browser" msgid "Configuration Warning" msgstr "Avviso di Configuraziione" msgid "Configurations" msgstr "Configurazioni" msgid "Configure Joystick Buttons" msgstr "Configura Tasti Joystick" msgid "Connect" msgstr "Connetti" msgid "" "Copy {0}\n" "to {1}" msgstr "" "Copia {0}\n" "in {1}" msgid "Could not open file for writing" msgstr "Impossibile aprire il file per la scrittura" msgid "Create" msgstr "Crea" msgid "Cursor Keys and Right Ctrl/Alt" msgstr "Tasti Cursore e Right Ctrl/Alt" msgid "Custom" msgstr "Personalizzato" msgid "Custom Configuration" msgstr "Configurazione Personalizzata" msgid "Custom IRC server address" msgstr "Indirizzo server IRC personalizzato" msgid "Custom Joystick Port" msgstr "Porta Joystick Personalizzata" msgid "Custom Options" msgstr "Opzioni Personalizzate" msgid "Custom Settings" msgstr "Settaggi Personalizzati" msgid "Default" msgstr "Predefinito" msgid "Default ({0})" msgstr "Predefinito ({0})" msgid "Destination Directory:" msgstr "Directory di Destinazione:" msgid "Disconnect" msgstr "Disconnetti" msgid "Disk Image Name:" msgstr "Nome Disco Immagine:" msgid "Disk image created" msgstr "Disco immagine creato" msgid "Download failed (attempt {0}) - retrying in {0} seconds" msgstr "Download fallito (tentativo {0}) - ritento in {0} seconds" msgid "Downloading {0}..." msgstr "Scaricando {0}..." msgid "Edit Custom Options" msgstr "Modifica Opzioni Personalizzate" msgid "Eject" msgstr "Espelli" msgid "Enable experimental net play GUI (requires restart)" msgstr "Abilita net play GUI sperimentale (richiede riavvio)" msgid "Enable online database support (requires restart)" msgstr "Abilita supporto al database online (richiede riavvio)" msgid "Error moving file into place" msgstr "Errore di spostamento file nella posizione" msgid "Error writing disk image" msgstr "Errore di scrittura del disco immagine" msgid "Expansions" msgstr "Espansioni" msgid "Experimental Features" msgstr "Funzionalità Sperimentali" msgid "Extended ROM:" msgstr "ROM Estesa:" msgid "FS-UAE Launcher Settings" msgstr "Impostazioni Lanciatore FS-UAE" msgid "Fast RAM" msgstr "Fast RAM" msgid "Fetching database entries ({0})" msgstr "Recupera voci del database ({0})" msgid "Fetching game ratings ({0})" msgstr "Recupera valutazioni giochi ({0})" msgid "Fetching user game ratings ({0})" msgstr "Recupera valutazioni giochi utente ({0})" msgid "File already exists" msgstr "File esistente" msgid "Filters" msgstr "Filtri" msgid "Filters & Scaling" msgstr "Filtri e Ridimensionamento" msgid "Filters:" msgstr "Filtri:" msgid "Floppies" msgstr "Floppies" msgid "Floppy Drives" msgstr "Unità Floppy" msgid "Floppy drive volume" msgstr "Volume floppy drive" msgid "Full Frame" msgstr "Fotogrammi Completi" msgid "Full-scene anti-aliasing (FSAA)" msgstr "Anti-aliasing completo (FSAA)" msgid "Fullscreen" msgstr "Schermo Intero" msgid "Game Database" msgstr "Database Giochi" msgid "Game Database Settings" msgstr "Impostazioni Database Giochi" msgid "Game database password" msgstr "Password database giochi" msgid "Game database user name" msgstr "Nome utente database giochi " msgid "Gamepad/Joystick Setup" msgstr "Installazione Gamepad/Joystick" msgid "Games and Configurations" msgstr "Giochi e Configurazioni" msgid "Grab mouse and keyboard input when FS-UAE starts" msgstr "Cattura input mouse e tastiera quando si avvia FS-UAE" msgid "Grab mouse and keyboard input when clicking on FS-UAE window" msgstr "Cattura input mouse e tastiera quando si clikka sulla finestra di FS-UAE" msgid "HDF - Partitionable Hard Drive Image (RDB)" msgstr "HDF - Immagine Hard Drive Partizionabile (RDB)" msgid "HDF - Single Partition Hard Disk File" msgstr "HDF - File Hard Disk a Singola Partizione" msgid "Hard Drives" msgstr "Hard Drives" msgid "Hardware" msgstr "Hardware" msgid "Hardware Options" msgstr "Opzioni Hardware" msgid "IRC nickname" msgstr "IRC nickname" msgid "If you own Amiga Forever, select the drive/folder and click \"{0}\"" msgstr "Se possiedi Amiga Forever, seleziona il suo drive/cartella e premi \"{0}\"" msgid "Import" msgstr "Importa" msgid "Import From Amiga Forever CD/DVD" msgstr "Importa Da Amiga Forever CD/DVD" msgid "Import Kickstarts" msgstr "Importa Kickstarts" msgid "Import Kickstarts and ROMs" msgstr "Importa Kickstarts e ROMs" msgid "Import task is done" msgstr "Funzione di Importazione eseguita" msgid "Include built-in configurations" msgstr "Includi configurazioni incorporate" msgid "Input" msgstr "Ingresso" msgid "Input Options" msgstr "Opzioni Input" msgid "Input Settings" msgstr "Settaggi Input" msgid "Internal" msgstr "Interno" msgid "Invalid size specified" msgstr "Dimensione specificata non valida" msgid "Joystick" msgstr "Joystick" msgid "Joystick Configuration" msgstr "Configuratione Joystick" msgid "Joystick Ports" msgstr "Porte Joystick" msgid "Joystick Settings" msgstr "Settaggi Joystick" msgid "Keep aspect ratio when scaling (do not stretch)" msgstr "Mantiene proporzioni quando ridimensiona (non stira)" msgid "Keyboard Settings" msgstr "Settaggi Tastiera" msgid "Kickstart ROM" msgstr "Kickstart ROM" msgid "Kickstart ROMs are missing" msgstr "ROMs Kickstart mancanti" msgid "Kickstart import task started" msgstr "Funzione di importazione Kickstart avviata" msgid "Launching FS-UAE" msgstr "Avviando FS-UAE" msgid "Least Accurate" msgstr "Poco Preciso" msgid "Less Accurate" msgstr "Meno Preciso" msgid "List of Folders to Index" msgstr "Lista Cartelle da Indicizzare" msgid "Low latency vsync (when using full vsync)" msgstr "VSync a Bassa Latenza (Usando VSync completo)" msgid "MB" msgstr "MB" msgid "Main Configuration Options" msgstr "Configurazione Opzioni Principali" msgid "Main Menu" msgstr "Menu Principale" msgid "Media Swap List" msgstr "Lista Dispositivi di Scambio" msgid "Memory" msgstr "Memoria" msgid "Mouse" msgstr "Mouse" msgid "Mouse & Joystick Ports" msgstr "Porte Mouse & Joystick" msgid "Mouse Settings" msgstr "Settaggi Mouse" msgid "Mouse speed (%)" msgstr "Velocità mouse (%)" msgid "Net Play" msgstr "Gioco On-Line" msgid "Net Play Settings" msgstr "Settaggi Net Play" msgid "Net play tag (max 3 characters)" msgstr "Net play tag (massimo 3 caratteri)" msgid "New Configuration" msgstr "Nuova Configurazione" msgid "New Disk Image" msgstr "Nuovo Disco Immagine" msgid "Nick:" msgstr "Nick:" msgid "No Device" msgstr "Nessun Dispositivo" msgid "No Host Device" msgstr "Nessun Dispositivo Ospite" msgid "No Joysticks" msgstr "Nessun Joysticks" msgid "No extended kickstart found for this model. Try 'scan' function." msgstr "Nessun kickstart esteso trovato per questo modello. Prova la funzione 'scansione'." msgid "No joysticks are currently connected" msgstr "Attualmente nessun joysticks connesso" msgid "No kickstart found for this model. " msgstr "Nessun kickstart presente per questo modello." msgid "No scan in progress" msgstr "Nessuna scansione in corso" msgid "Nothing" msgstr "Nullo" msgid "OK" msgstr "OK" msgid "Off" msgstr "Spento" msgid "On" msgstr "Acceso" msgid "Open Game Database Entry" msgstr "Apri Voce Database Giochi" msgid "Open Hall of Light Entry" msgstr "Apri Voce Hall of Light" msgid "Open LemonAmiga Entry" msgstr "Apri Voce LemonAmiga" msgid "Open MobyGames Entry" msgstr "Apri Voce MobyGames" msgid "Open Scan Dialog" msgstr "Apri Finestra Scansione" msgid "Open Tool to Configure Button Mapping" msgstr "Apri Strumento Configurazione Bottoni" msgid "Open Wikipedia Entry" msgstr "Apri Voce Wikipedia" msgid "OpenGL Settings" msgstr "Settaggi OpenGL" msgid "Override Installed Memory" msgstr "Ignora Memorie Installate" msgid "Parallel Port Joysticks" msgstr "Joysticks Porte Parallele" msgid "Picasso96 Support" msgstr "Supporto al Picasso96" msgid "Picasso96 Support (uaegfx.card)" msgstr "Supporto al Picasso96 (uaegfx.card)" msgid "Please wait..." msgstr "Per favore attendi..." msgid "Preferences" msgstr "Preferenze" msgid "Preferred Joystick" msgstr "Joystick Preferito" msgid "Preferred device for secondary joystick:" msgstr "Dispositivo preferito per joystick secondario:" msgid "Preparing WHDLoad..." msgstr "Preparando WHDLoad..." msgid "Preparing floppy images..." msgstr "Preparando immagine floppy..." msgid "Preparing hard drives..." msgstr "Preparando hard drives..." msgid "Preparing..." msgstr "Preparando..." msgid "Purging old entries..." msgstr "Pulisci vecchie voci..." msgid "Refresh Game Database" msgstr "Aggiorna Database Giochi" msgid "Refresh game configurations from database" msgstr "Aggiorna configurazioni giochi dal database" msgid "Refresh list of connected joystick devices" msgstr "Aggiorna la lista dei joystick connessi" msgid "Remove Directory from Search Path" msgstr "Rimuovi Directory dalla Cartella di Ricerca" msgid "Remove Selected Files" msgstr "Rimuovi Files Selezionati" msgid "Render scan lines" msgstr "Riproduci scan lines" msgid "Render scan lines in RTG graphics mode" msgstr "Riproduci scan lines in modalità grafica RTG" msgid "Resetting database..." msgstr "Resetta database..." msgid "Restoring changes..." msgstr "Ripristinando modifiche..." msgid "Retrying last operation (attempt {0})" msgstr "Ritento l'ultima operazione (tentativo {0})" msgid "Save Configuration" msgstr "Salva Configurazione" msgid "Saving changes..." msgstr "Salvando modifiche..." msgid "Scaling Options" msgstr "Opzioni Ridimensionamento" msgid "Scan" msgstr "Scansiona" msgid "Scan & Indexing" msgstr "Scansiona e Indicizza" msgid "Scan Files and Configurations" msgstr "Scansiona Files e Configurazioni" msgid "Scan complete" msgstr "Scansione completata" msgid "Scan error" msgstr "Errore scansione" msgid "Scan for Files" msgstr "Scanziona Files" msgid "Scan for Kickstarts, Files and Configurations" msgstr "Scansiona Kickstarts, Files e Configurazioni" msgid "Scanning .fs-uae files..." msgstr "Scansionando files .fs-uae..." msgid "Scanning built-in entries..." msgstr "Scansionando voci create..." msgid "Scanning configurations" msgstr "Ricercando configurazioni" msgid "Scanning configurations ({count} scanned)" msgstr "Scansionando le configurazioni ({count} scansionati)" msgid "Scanning database entries..." msgstr "Scansionando voci database..." msgid "Scanning files" msgstr "Ricerca Files" msgid "Scanning files ({count} scanned)" msgstr "Ricercando files ({count} scansionati)" msgid "Scanning game database entries..." msgstr "Scansiona voci database giochi" msgid "Select Destination Directory" msgstr "Seleziona la Directory di Destinazione" msgid "Select Multiple CD-ROMs" msgstr "Seleziona CD-ROMs Multipli" msgid "Select Multiple Files..." msgstr "Seleziona Files Multipli..." msgid "Select Multiple Floppies" msgstr "Seleziona Floppies Multipli" msgid "Select Source Directory" msgstr "Seleziona la Directory Sorgente" msgid "Select a folder containing Amiga kickstart files and click \"{0}\"" msgstr "Seleziona una cartella contenente un kickstart Amiga e premi \"{0}\"" msgid "Settings" msgstr "Settaggi" msgid "Show kickstart setup page on startup when all ROMs are missing" msgstr "Visualizza pagina di impostazioni kickstart quando tutte le ROMs non sono presenti" msgid "Size:" msgstr "Dimensione:" msgid "Slow RAM" msgstr "Slow RAM" msgid "Specified directory does not exist" msgstr "Directory specificata non esistente" msgid "Start" msgstr "Avvia" msgid "Start FS-UAE in fullscreen mode" msgstr "Avvia FS-UAE in modalità schermo intero" msgid "Starting FS-UAE..." msgstr "Avviando FS-UAE..." msgid "Starting scan" msgstr "Iniziando scansione" msgid "Swap left and right CTRL keys" msgstr "Inverti i tasti sinistra e destra CTRL" msgid "Synchronizing database..." msgstr "Sincronizza database..." msgid "Synchronizing personal ratings..." msgstr "Sincronizza valutazioni personali..." msgid "Texture filter" msgstr "Filtri Texture" msgid "Toggle Between Windowed and Full-Screen Mode" msgstr "Scambia fra modalità Finestra e Schermo Intero" msgid "Tools" msgstr "Strumenti" msgid "Ungrab mouse and keyboard on middle mouse click" msgstr "Sgancia mouse e tastiera al click del tasto medio del mouse" msgid "Update available ({version})" msgstr "Disponibile aggiornamento ({version})" msgid "Updating database" msgstr "Aggiorna database" msgid "Updating game entries:" msgstr "Aggiorna voci giochi:" msgid "Use RDB disk images for size >= {0}" msgstr "Usa un disco immagine RDB di dimensione >= {0}" msgid "Video Settings" msgstr "Settaggi Video" msgid "Video buffer format and color depth" msgstr "Formato buffer video e profondità del colore" msgid "Video synchronization" msgstr "Sincronizzazione video" msgid "Video synchronization method" msgstr "Metodo sincronizzazione video" msgid "Video texture format (on the GPU)" msgstr "Formato video texture (su GPU)" msgid "WHDLoad Arguments" msgstr "Argomenti WHDLoad" msgid "You should have kickstart files for each Amiga model you want to use:" msgstr "Dovresti avere un file kickstart per ogni modello Amiga da utilizzare" msgid "Zoom Amiga display (crop)" msgstr "Visualizza zoom Amiga (ritaglia)" msgid "Zorro III RAM" msgstr "Zorro III RAM" msgid "{amiga_model} with < 2 MB chip memory" msgstr "{amiga_model} con < 2 MB memoria chip" #~ msgid "Add Multiple CD Images at Once" #~ msgstr "Aggiungi Immagini CD Multiple al Volo" #~ msgid "Add Multiple Files at Once" #~ msgstr "Aggiungi Files Multipli al Volo" #~ msgid "Amiga Hardware Options" #~ msgstr "Opzioni Hardware Amiga" #~ msgid "Amiga Model and Hardware" #~ msgstr "Modello Amiga" #~ msgid "Commiting data..." #~ msgstr "Invia dati..." #~ msgid "Configure CD-ROMs" #~ msgstr "Configura CD-ROMs" #~ msgid "Configure Floppies" #~ msgstr "Configura Floppies" #~ msgid "Configure Hard Drives" #~ msgstr "Configura Hard Drives" #~ msgid "Configure Hardware" #~ msgstr "Configura Hardware" #~ msgid "Configure Input" #~ msgstr "Configura Ingresso" #~ msgid "Configure Joysticks" #~ msgstr "Configura Joysticks" #~ msgid "Extended ROM" #~ msgstr "ROM Estesa" #~ msgid "Floppies..." #~ msgstr "Floppies..." #~ msgid "Force Full Vsync" #~ msgstr "Forza Sincronia Verticale" #~ msgid "Game Files" #~ msgstr "Files Di Gioco" #~ msgid "Hard Drive {0}" #~ msgstr "Hard Drive {0}" #~ msgid "Host Options" #~ msgstr "Opzioni Ospite" #~ msgid "Joystick (Emulated by Keyboard)" #~ msgstr "Joystick (Emulato da Tastiera)" #~ msgid "Kickstart" #~ msgstr "Kickstart" #~ msgid "Kickstart Setup" #~ msgstr "Imposta Kickstart" #~ msgid "Kickstart Versions" #~ msgstr "Versioni Kickstart" #~ msgid "Media List" #~ msgstr "Lista Media" #~ msgid "More Configuration Options" #~ msgstr "Più Opzioni Configurazione" #~ msgid "More..." #~ msgstr "Di Più..." #~ msgid "Open Configuration" #~ msgstr "Apri Configurazione" #~ msgid "Preferred Joysticks" #~ msgstr "Joysticks Preferiti" #~ msgid "ROMs" #~ msgstr "ROMs" #~ msgid "Removable Media" #~ msgstr "Media Rimovibili" #~ msgid "Remove Diretory from Search Path" #~ msgstr "Rimuovi Directory dalla Cartella di Ricerca" #~ msgid "Scan for Kickstarts, Games and Configurations" #~ msgstr "Scansiona Kickstarts, Giochi e Configurazioni" #~ msgid "Scan for:" #~ msgstr "Scansiona per:" #~ msgid "Select Directory to Import From" #~ msgstr "Seleziona la Cartella da Importare" #~ msgid "Select Files..." #~ msgstr "Seleziona Files..." #~ msgid "Show Only Favorites (On/Off)" #~ msgstr "Visualizza Solo i Favoriti (On/Off)" #~ msgid "Show Only Verified Configurations (On/Off)" #~ msgstr "Visualizza Solo le Configurazioni Verificate (On/Off)" #~ msgid "Swap List" #~ msgstr "Scambia Lista" #~ msgid "Sync to Vblank" #~ msgstr "Sincronizza si Vblank" #~ msgid "Update ({version}) is available" #~ msgstr "Aggiornamento ({version}) disponibile" #~ msgid "Window" #~ msgstr "Finestra" fs-uae-2.2.3+dfsg/launcher/po/pt.po0000644000175000017500000004316212162366654017264 0ustar glaubitzglaubitz# Portuguese translations for fs-uae-launcher package. # Copyright (C) 2012 Frode Solheim # This file is distributed under the same license as the fs-uae-launcher package. # Frode Solheim , 2012. # msgid "" msgstr "" "Project-Id-Version: fs-uae-launcher\n" "Report-Msgid-Bugs-To: fs-uae@fengestad.no\n" "POT-Creation-Date: 2013-06-25 21:21+0200\n" "PO-Revision-Date: 2013-03-13 14:14-0000\n" "Last-Translator: Mário Mateus \n" "Language-Team: Portuguese\n" "Language: pt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 1.5.5\n" msgid "16-bit" msgstr "16-bit" msgid "32-bit BGRA" msgstr "32-bit BGRA" msgid "32-bit RGBA" msgstr "32-bit RGBA" msgid "640x400 + Border" msgstr "640x400 + Margem" msgid "640x480 + Border" msgstr "640x480 + Margem" msgid "640x512 + Border" msgstr "640x512 + Margem" msgid "ADF & HDF Creator" msgstr "Criador de ADF & HDF" msgid "ADF - Extended Floppy Disk Image (MFM)" msgstr "ADF - Imagem de Diskette Extendida (MFM)" msgid "ADF - Standard Floppy Disk Image" msgstr "ADF - Formato Standard de Disquete" msgid "Abort" msgstr "Cancelar" msgid "About {name}" msgstr "Acerca " msgid "Accurate" msgstr "Preciso" msgid "Add Directory to Search Path" msgstr "Adicionar pasta para ao caminho da procura" msgid "Add Files to List" msgstr "Adicionar Ficheiros à Lista" msgid "Add Multiple CD-ROMs at Once" msgstr "Adicionar Vários CD-ROMs de Uma Vez" msgid "Add Multiple Floppies at Once" msgstr "Adicionar Várias Disquetes de Uma Vez" msgid "Additional Options" msgstr "Opções Adicionais" msgid "Amiga Forever Import" msgstr "Importação de Amiga Forever" msgid "Amiga Forever import task started" msgstr "A Acção de Importar Amiga Forever Começou " msgid "Amiga Model" msgstr "Modelo do Amiga" msgid "Audio Settings" msgstr "Opções de Som" msgid "Auto" msgstr "Auto" msgid "Auto + Border" msgstr "Auto + Margem" msgid "Auto-Fire is Off" msgstr "Auto-Fire está desligado" msgid "Auto-Fire is On" msgstr "Auto-Fire está ligado" msgid "Available Kickstart Versions" msgstr "Versões do Kickstart Disponiveis" msgid "Browse" msgstr "Procurar" msgid "Browse for File" msgstr "Procurar por um Ficheiro" msgid "Browse for Folder" msgstr "Procurar por uma Pasta" msgid "Buffer swap only" msgstr "" msgid "Built-in TCP/IP Stack" msgstr "Pilha TCP/IP Integrada" msgid "Built-in TCP/IP Stack (bsdsocket.library)" msgstr "Pilha TCP/IP Integrada (bsdsocket.library)" msgid "CD-ROM Drive" msgstr "Leitor de CD-ROM" msgid "CD-ROM Drives" msgstr "Leitores de CD-ROM" msgid "CD-ROMs" msgstr "CD-ROMs" msgid "CD32 Pad" msgstr "CD32 Joypad" msgid "Cancel" msgstr "Cancelar" msgid "Chip RAM" msgstr "Chip RAM" msgid "Choose CD-ROM Image" msgstr "Escolha uma Imagem de CD-ROM" msgid "Choose Extended ROM" msgstr "Escolha ROM Extendida" msgid "Choose Floppy Image" msgstr "Escolha uma Imagem disquete" msgid "Choose Hard Drive" msgstr "Escolher um Disco Rígido" msgid "Choose Kickstart ROM" msgstr "Escolher uma ROM Kickstart" msgid "Cleaning up..." msgstr "Limpando..." msgid "Clear List" msgstr "Limpar a Lista" msgid "Click 'Scan' button if you want to re-scan" msgstr "Clica no butão 'Procurar' se queres re-examinar" msgid "Click 'Scan' button to start scan" msgstr "Clica no butão 'Procurar' para começar" msgid "Click here to download" msgstr "Clica aqui para baixar" msgid "Click here to import kickstarts" msgstr "Clicar aqui para importar kickstarts" msgid "Close" msgstr "Fechar" msgid "Committing data..." msgstr "Enviando dados..." msgid "Config" msgstr "Configuração" msgid "Configuration" msgstr "Configuração" msgid "Configuration Browser" msgstr "Opções de Configuração" msgid "Configuration Warning" msgstr "" msgid "Configurations" msgstr "Configurações" msgid "Configure Joystick Buttons" msgstr "Configurar os Botões do Joystick" msgid "Connect" msgstr "Ligar" msgid "" "Copy {0}\n" "to {1}" msgstr "" "Copiar {0}\n" "para {1}" msgid "Could not open file for writing" msgstr "Não se conseguiu abrir ficheiro para escrita" msgid "Create" msgstr "Criar" msgid "Cursor Keys and Right Ctrl/Alt" msgstr "Teclas dos Cursores e Ctlr/Alt Direitos" msgid "Custom" msgstr "Personalizado" msgid "Custom Configuration" msgstr "Configuração Costumisada" msgid "Custom IRC server address" msgstr "Servidor de IRC Personalizado" msgid "Custom Joystick Port" msgstr "Porto de Joystick" msgid "Custom Options" msgstr "Opções Personalizadas" msgid "Custom Settings" msgstr "Ajustes Personalizados" msgid "Default" msgstr "Por Defeito" msgid "Default ({0})" msgstr "Por Defeito ({0})" msgid "Destination Directory:" msgstr "Directório de Destino:" msgid "Disconnect" msgstr "Desligar" msgid "Disk Image Name:" msgstr "Nome da Imagem de Disco:" msgid "Disk image created" msgstr "Imagem de disco criada" msgid "Download failed (attempt {0}) - retrying in {0} seconds" msgstr "" "Tentativa de download falhada (tentativa {0}) - voltar a tentar em {0} " "segundos" msgid "Downloading {0}..." msgstr "A baixar {0}..." msgid "Edit Custom Options" msgstr "Editar Opções Personalizadas" msgid "Eject" msgstr "Ejectar" msgid "Enable experimental net play GUI (requires restart)" msgstr "" "Activar GUI experimental de jogar em rede (requere o reiniciar da aplicação)" msgid "Enable online database support (requires restart)" msgstr "" "Ligar o suporte da base de dados online(requere o reiniciar da aplicação)" msgid "Error moving file into place" msgstr "Erro ao mover fichiero para o lugar" msgid "Error writing disk image" msgstr "Erro ao escrever a imagem de disco" msgid "Expansions" msgstr "Expansões" msgid "Experimental Features" msgstr "Características Experimentais" msgid "Extended ROM:" msgstr "ROM Extendida:" msgid "FS-UAE Launcher Settings" msgstr "Opções do FS-UAE Launcher" msgid "Fast RAM" msgstr "Fast RAM" msgid "Fetching database entries ({0})" msgstr "Adquirindo as entradas da base de dados ({0})" msgid "Fetching game ratings ({0})" msgstr "Adquirindo avaliações de jogos ({0})" msgid "Fetching user game ratings ({0})" msgstr "Buscando as classificações de utilizador ({0})" msgid "File already exists" msgstr "Ficheiro já existente" msgid "Filters" msgstr "Filtros" msgid "Filters & Scaling" msgstr "Filtros e Escala" msgid "Filters:" msgstr "Filtros:" msgid "Floppies" msgstr "Disquetes" msgid "Floppy Drives" msgstr "Drive de disquetes" msgid "Floppy drive volume" msgstr "Nome da Disquete" msgid "Full Frame" msgstr "Ecrã Completo (sem margens)" msgid "Full-scene anti-aliasing (FSAA)" msgstr "Anti-aliasing completo de cena (FSAA)" msgid "Fullscreen" msgstr "Ecrã completo" msgid "Game Database" msgstr "Base de Dados de Jogos" msgid "Game Database Settings" msgstr "Ajustes da Base de Dados de Jogos" msgid "Game database password" msgstr "Palavra chave da base de dados de jogos" msgid "Game database user name" msgstr "Nome de utilizador da base de dados de jogos" msgid "Gamepad/Joystick Setup" msgstr "Configurações de Gamepad/Joystick" msgid "Games and Configurations" msgstr "Jogos e Configurações" msgid "Grab mouse and keyboard input when FS-UAE starts" msgstr "Capturar as entradas de rato e teclado no arranque do FS-UAE" msgid "Grab mouse and keyboard input when clicking on FS-UAE window" msgstr "Capturar o rato e o teclado quando clicar na janela do FS-UAE" msgid "HDF - Partitionable Hard Drive Image (RDB)" msgstr "HDF - Imagem de Disco Rígido Particionável (RDB)" msgid "HDF - Single Partition Hard Disk File" msgstr "HDF - Imagem de Disco Rígido de Partição Única" msgid "Hard Drives" msgstr "Discos Rígidos" msgid "Hardware" msgstr "Hardware" msgid "Hardware Options" msgstr "Opções do Hardware" msgid "IRC nickname" msgstr "Alcunha de IRC " msgid "If you own Amiga Forever, select the drive/folder and click \"{0}\"" msgstr "Se tens o Amiga Forever, selecciona o disco/pasta e carrega em \"{0}\"" msgid "Import" msgstr "Importar" msgid "Import From Amiga Forever CD/DVD" msgstr "Importar do CD/DVD Amiga Forever" msgid "Import Kickstarts" msgstr "Importar os Kickstarts" msgid "Import Kickstarts and ROMs" msgstr "Importar Kickstarts e ROMs" msgid "Import task is done" msgstr "Terefa de importação concluída" msgid "Include built-in configurations" msgstr "Incluir configurações Integradas" msgid "Input" msgstr "Entrada" msgid "Input Options" msgstr "Opções de Entrada" msgid "Input Settings" msgstr "Ajustes da Entrada" msgid "Internal" msgstr "Interno" msgid "Invalid size specified" msgstr "Tamanho especificado inválido" msgid "Joystick" msgstr "Joystick" msgid "Joystick Configuration" msgstr "Configuração do Joystick" msgid "Joystick Ports" msgstr "Porta do Joystick" msgid "Joystick Settings" msgstr "Ajustes do Joystick" msgid "Keep aspect ratio when scaling (do not stretch)" msgstr "Manter a proporção de aspecto quando mudar de escala (sem esticar)" msgid "Keyboard Settings" msgstr "Ajustes do teclado" msgid "Kickstart ROM" msgstr "Kickstart ROM" msgid "Kickstart ROMs are missing" msgstr "ROMs the Kickstart não encontradas" msgid "Kickstart import task started" msgstr "A tarefa da importação do Kickstart começou" msgid "Launching FS-UAE" msgstr "Iniciando o FS-UAE" msgid "Least Accurate" msgstr "Precisão menor" msgid "Less Accurate" msgstr "Menor precisão" msgid "List of Folders to Index" msgstr "Lista de Pastas a Indexar" msgid "Low latency vsync (when using full vsync)" msgstr "Vsync de baixa latência (quando se usa vsync completa)" msgid "MB" msgstr "MB" msgid "Main Configuration Options" msgstr "Opções de Configuração Principais" msgid "Main Menu" msgstr "Menú Principal" msgid "Media Swap List" msgstr "Lista dos Media para Trocar" msgid "Memory" msgstr "Memória" msgid "Mouse" msgstr "Rato" msgid "Mouse & Joystick Ports" msgstr "Portas de Rato & Joystick" msgid "Mouse Settings" msgstr "Ajustes do Rato" msgid "Mouse speed (%)" msgstr "Velocidade do Rato (%)" msgid "Net Play" msgstr "Jogar em Rede" msgid "Net Play Settings" msgstr "Ajustar Jogos em Rede" msgid "Net play tag (max 3 characters)" msgstr "Tag para Jogar em Rede (max 3 Caracteres)" msgid "New Configuration" msgstr "Nova Configuração" msgid "New Disk Image" msgstr "Nova Imagem de Disco" msgid "Nick:" msgstr "Alcunha:" msgid "No Device" msgstr "Sem Dispositivo" msgid "No Host Device" msgstr "Nenhum Dispositivo Host" msgid "No Joysticks" msgstr "Sem Joysticks" msgid "No extended kickstart found for this model. Try 'scan' function." msgstr "" "O Kickstart expandido deste modelo não foi encontrado. Tente a função " "'Procurar'." msgid "No joysticks are currently connected" msgstr "Sem Joysticks actualmente ligados" msgid "No kickstart found for this model. " msgstr "Não foi encontrado Kickstart para este modelo" msgid "No scan in progress" msgstr "Não extiste nenhuma procura a decorrer" msgid "Nothing" msgstr "Nada" msgid "OK" msgstr "OK" msgid "Off" msgstr "Desligado" msgid "On" msgstr "Ligado" msgid "Open Game Database Entry" msgstr "Abrir entrada de Open Game Database" msgid "Open Hall of Light Entry" msgstr "Abrir entrada de Hall of Light" msgid "Open LemonAmiga Entry" msgstr "Abrir entrada de LemonAmiga" msgid "Open MobyGames Entry" msgstr "Abrir entrada de Moby Games" msgid "Open Scan Dialog" msgstr "Abre a Janela de Procura" msgid "Open Tool to Configure Button Mapping" msgstr "Abrir a Ferramenta de Configuração para mapeamento dos botões" msgid "Open Wikipedia Entry" msgstr "Abrir entrada de Wikipedia" msgid "OpenGL Settings" msgstr "Ajustar OpenGL" msgid "Override Installed Memory" msgstr "Ultrapassar Memória Instalada" msgid "Parallel Port Joysticks" msgstr "Joysticks pela Porta Paralela" msgid "Picasso96 Support" msgstr "Suporte para Picasso96" msgid "Picasso96 Support (uaegfx.card)" msgstr "Suporte para Picasso96 (uaegfx.card)" msgid "Please wait..." msgstr "Espere se faz favor..." msgid "Preferences" msgstr "Preferências" msgid "Preferred Joystick" msgstr "Joystick Preferido" msgid "Preferred device for secondary joystick:" msgstr "Dispositivo preferido para joystick secundário:" msgid "Preparing WHDLoad..." msgstr "Preparando WHDLoad..." msgid "Preparing floppy images..." msgstr "Preparando as imagens de disquete..." msgid "Preparing hard drives..." msgstr "Preparando os discos rígidos..." msgid "Preparing..." msgstr "A Preparar..." msgid "Purging old entries..." msgstr "A purgar as entradas antigas..." msgid "Refresh Game Database" msgstr "Rescanear Base de Dados" msgid "Refresh game configurations from database" msgstr "Actualizar a configuração dos jogos pela base de dados" msgid "Refresh list of connected joystick devices" msgstr "Rescanear lista de joysticks ligados" msgid "Remove Directory from Search Path" msgstr "Remove Pasta do caminho da pesquisa" msgid "Remove Selected Files" msgstr "Remover os Ficheiros Seleccionados" msgid "Render scan lines" msgstr "Usar scanlines" msgid "Render scan lines in RTG graphics mode" msgstr "Usar scanlines no modo RTG" msgid "Resetting database..." msgstr "Reiniciando a base de dados" msgid "Restoring changes..." msgstr "A restaurar as mudanças..." msgid "Retrying last operation (attempt {0})" msgstr "Voltar a tentar última operação (tentativa {0})" msgid "Save Configuration" msgstr "Guardar a Configuracão" msgid "Saving changes..." msgstr "A Guardar as mudanças..." msgid "Scaling Options" msgstr "Opções de Escala" msgid "Scan" msgstr "Procurar" msgid "Scan & Indexing" msgstr "Procurar & Indexar" msgid "Scan Files and Configurations" msgstr "Scanear Ficheiros e Configurações" msgid "Scan complete" msgstr "Procura completa" msgid "Scan error" msgstr "Erro de procura" msgid "Scan for Files" msgstr "Scanear Ficheiros" msgid "Scan for Kickstarts, Files and Configurations" msgstr "Procurar Kickstarts, Ficheiros e Configurações" msgid "Scanning .fs-uae files..." msgstr "A procurar ficheiros .fs-uae..." msgid "Scanning built-in entries..." msgstr "Procurando pelas Entradas Internas..." msgid "Scanning configurations" msgstr "Procurando configurações" msgid "Scanning configurations ({count} scanned)" msgstr "Procurando configurações, ({count} encontrada(s))" msgid "Scanning database entries..." msgstr "Lendo entradas na base de datos..." msgid "Scanning files" msgstr "Procurando Ficheiros" msgid "Scanning files ({count} scanned)" msgstr "Procurando Ficheiros, ({count} encontrado(s))" msgid "Scanning game database entries..." msgstr "Lendo as entradas de jogos na base de dados..." msgid "Select Destination Directory" msgstr "Seleccionar Directório de Destino" msgid "Select Multiple CD-ROMs" msgstr "Seleccionar Vários CD-ROMs" msgid "Select Multiple Files..." msgstr "Seleccionar Vários Ficheiros..." msgid "Select Multiple Floppies" msgstr "Seleccionar Várias Disquetes" msgid "Select Source Directory" msgstr "Seleccionar Directório de Origem" msgid "Select a folder containing Amiga kickstart files and click \"{0}\"" msgstr "" "Seleccione a pasta onde se encontram os Kickstart do Amiga e carregue em " "\"{0}\"" msgid "Settings" msgstr "Ajustar" msgid "Show kickstart setup page on startup when all ROMs are missing" msgstr "" "Mostra a página de configuração dos Kickstart se as ROMs não forem encotradas" msgid "Size:" msgstr "Tamanho:" msgid "Slow RAM" msgstr "Slow RAM" msgid "Specified directory does not exist" msgstr "Directório especificado não existe" msgid "Start" msgstr "Iniciar" msgid "Start FS-UAE in fullscreen mode" msgstr "Iniciar o FS-UAE no modo de ecrã completo" msgid "Starting FS-UAE..." msgstr "Iniciando o FS-UAE..." msgid "Starting scan" msgstr "A começar a procura" msgid "Swap left and right CTRL keys" msgstr "Trocar as teclas CTRL esquerda pela direita" msgid "Synchronizing database..." msgstr "Sincronizando a base de dados..." msgid "Synchronizing personal ratings..." msgstr "Sincronizando classificações pessoais..." msgid "Texture filter" msgstr "Filtro de Texturas" msgid "Toggle Between Windowed and Full-Screen Mode" msgstr "Mudar entre modo de Écran Total ou Janela" msgid "Tools" msgstr "Ferramentas" msgid "Ungrab mouse and keyboard on middle mouse click" msgstr "Dar o controle do teclado e do rato ao clicar o botão do meio do rato" msgid "Update available ({version})" msgstr "Actualização existente ({version})" msgid "Updating database" msgstr "Actualizando a base de dados" msgid "Updating game entries:" msgstr "Actualizando as entradas de jogos" msgid "Use RDB disk images for size >= {0}" msgstr "Usar RDB de imagens de disco para tamanho >= {0}" msgid "Video Settings" msgstr "Ajustes de Video" msgid "Video buffer format and color depth" msgstr "Formato do buffer de Video e profundidade de cor" msgid "Video synchronization" msgstr "Sincronização de Video" msgid "Video synchronization method" msgstr "Método Sincronização de Video" msgid "Video texture format (on the GPU)" msgstr "Formato das Texturas de Video (no GPU)" msgid "WHDLoad Arguments" msgstr "Argumentos para o WHDLoad" msgid "You should have kickstart files for each Amiga model you want to use:" msgstr "" "Deverá possuir os ficheiros Kickstart dos modelos Amiga que queira usar:" msgid "Zoom Amiga display (crop)" msgstr "Zoom da Imagem do Amiga (recortado)" msgid "Zorro III RAM" msgstr "Zorro III RAM" msgid "{amiga_model} with < 2 MB chip memory" msgstr "" #~ msgid "Force Full Vsync" #~ msgstr "Vsync Completa Forçada" #~ msgid "Kickstart Setup" #~ msgstr "Configuração do Kickstart" #~ msgid "Select Directory to Import From" #~ msgstr "Seleccionar a Pasta para Importar de" #~ msgid "Sync to Vblank" #~ msgstr "Sincronizar a VBlank" #~ msgid "Update ({version}) is available" #~ msgstr "Actualização para a versão ({version}) está disponivel" fs-uae-2.2.3+dfsg/launcher/po/ru.po0000644000175000017500000002547412162366654017275 0ustar glaubitzglaubitz# Russian translations for fs-uae-launcher package. # Copyright (C) 2012 Frode Solheim # This file is distributed under the same license as the fs-uae-launcher package. # Frode Solheim , 2012. # msgid "" msgstr "" "Project-Id-Version: fs-uae-launcher\n" "Report-Msgid-Bugs-To: fs-uae@fengestad.no\n" "POT-Creation-Date: 2013-06-25 21:21+0200\n" "PO-Revision-Date: 2012-08-14 11:16+0200\n" "Last-Translator: Frode Solheim \n" "Language-Team: Russian \n" "Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" msgid "16-bit" msgstr "" msgid "32-bit BGRA" msgstr "" msgid "32-bit RGBA" msgstr "" msgid "640x400 + Border" msgstr "" msgid "640x480 + Border" msgstr "" msgid "640x512 + Border" msgstr "" msgid "ADF & HDF Creator" msgstr "" msgid "ADF - Extended Floppy Disk Image (MFM)" msgstr "" msgid "ADF - Standard Floppy Disk Image" msgstr "" msgid "Abort" msgstr "" msgid "About {name}" msgstr "" msgid "Accurate" msgstr "" msgid "Add Directory to Search Path" msgstr "" msgid "Add Files to List" msgstr "" msgid "Add Multiple CD-ROMs at Once" msgstr "" msgid "Add Multiple Floppies at Once" msgstr "" msgid "Additional Options" msgstr "" msgid "Amiga Forever Import" msgstr "" msgid "Amiga Forever import task started" msgstr "" msgid "Amiga Model" msgstr "" msgid "Audio Settings" msgstr "" msgid "Auto" msgstr "" msgid "Auto + Border" msgstr "" msgid "Auto-Fire is Off" msgstr "" msgid "Auto-Fire is On" msgstr "" msgid "Available Kickstart Versions" msgstr "" msgid "Browse" msgstr "" msgid "Browse for File" msgstr "" msgid "Browse for Folder" msgstr "" msgid "Buffer swap only" msgstr "" msgid "Built-in TCP/IP Stack" msgstr "" msgid "Built-in TCP/IP Stack (bsdsocket.library)" msgstr "" msgid "CD-ROM Drive" msgstr "" msgid "CD-ROM Drives" msgstr "" msgid "CD-ROMs" msgstr "" msgid "CD32 Pad" msgstr "" msgid "Cancel" msgstr "" msgid "Chip RAM" msgstr "" msgid "Choose CD-ROM Image" msgstr "" msgid "Choose Extended ROM" msgstr "" msgid "Choose Floppy Image" msgstr "" msgid "Choose Hard Drive" msgstr "" msgid "Choose Kickstart ROM" msgstr "" msgid "Cleaning up..." msgstr "" msgid "Clear List" msgstr "" msgid "Click 'Scan' button if you want to re-scan" msgstr "" msgid "Click 'Scan' button to start scan" msgstr "" msgid "Click here to download" msgstr "" msgid "Click here to import kickstarts" msgstr "" msgid "Close" msgstr "" msgid "Committing data..." msgstr "" msgid "Config" msgstr "" msgid "Configuration" msgstr "" msgid "Configuration Browser" msgstr "" msgid "Configuration Warning" msgstr "" msgid "Configurations" msgstr "" msgid "Configure Joystick Buttons" msgstr "" msgid "Connect" msgstr "" msgid "" "Copy {0}\n" "to {1}" msgstr "" msgid "Could not open file for writing" msgstr "" msgid "Create" msgstr "" msgid "Cursor Keys and Right Ctrl/Alt" msgstr "" msgid "Custom" msgstr "" msgid "Custom Configuration" msgstr "" msgid "Custom IRC server address" msgstr "" msgid "Custom Joystick Port" msgstr "" msgid "Custom Options" msgstr "" msgid "Custom Settings" msgstr "" msgid "Default" msgstr "" msgid "Default ({0})" msgstr "" msgid "Destination Directory:" msgstr "" msgid "Disconnect" msgstr "" msgid "Disk Image Name:" msgstr "" msgid "Disk image created" msgstr "" msgid "Download failed (attempt {0}) - retrying in {0} seconds" msgstr "" msgid "Downloading {0}..." msgstr "" msgid "Edit Custom Options" msgstr "" msgid "Eject" msgstr "" msgid "Enable experimental net play GUI (requires restart)" msgstr "" msgid "Enable online database support (requires restart)" msgstr "" msgid "Error moving file into place" msgstr "" msgid "Error writing disk image" msgstr "" msgid "Expansions" msgstr "" msgid "Experimental Features" msgstr "" msgid "Extended ROM:" msgstr "" msgid "FS-UAE Launcher Settings" msgstr "" msgid "Fast RAM" msgstr "" msgid "Fetching database entries ({0})" msgstr "" msgid "Fetching game ratings ({0})" msgstr "" msgid "Fetching user game ratings ({0})" msgstr "" msgid "File already exists" msgstr "" msgid "Filters" msgstr "" msgid "Filters & Scaling" msgstr "" msgid "Filters:" msgstr "" msgid "Floppies" msgstr "" msgid "Floppy Drives" msgstr "" msgid "Floppy drive volume" msgstr "" msgid "Full Frame" msgstr "" msgid "Full-scene anti-aliasing (FSAA)" msgstr "" msgid "Fullscreen" msgstr "" msgid "Game Database" msgstr "" msgid "Game Database Settings" msgstr "" msgid "Game database password" msgstr "" msgid "Game database user name" msgstr "" msgid "Gamepad/Joystick Setup" msgstr "" msgid "Games and Configurations" msgstr "" msgid "Grab mouse and keyboard input when FS-UAE starts" msgstr "" msgid "Grab mouse and keyboard input when clicking on FS-UAE window" msgstr "" msgid "HDF - Partitionable Hard Drive Image (RDB)" msgstr "" msgid "HDF - Single Partition Hard Disk File" msgstr "" msgid "Hard Drives" msgstr "" msgid "Hardware" msgstr "" msgid "Hardware Options" msgstr "" msgid "IRC nickname" msgstr "" msgid "If you own Amiga Forever, select the drive/folder and click \"{0}\"" msgstr "" msgid "Import" msgstr "" msgid "Import From Amiga Forever CD/DVD" msgstr "" msgid "Import Kickstarts" msgstr "" msgid "Import Kickstarts and ROMs" msgstr "" msgid "Import task is done" msgstr "" msgid "Include built-in configurations" msgstr "" msgid "Input" msgstr "" msgid "Input Options" msgstr "" msgid "Input Settings" msgstr "" msgid "Internal" msgstr "" msgid "Invalid size specified" msgstr "" msgid "Joystick" msgstr "" msgid "Joystick Configuration" msgstr "" msgid "Joystick Ports" msgstr "" msgid "Joystick Settings" msgstr "" msgid "Keep aspect ratio when scaling (do not stretch)" msgstr "" msgid "Keyboard Settings" msgstr "" msgid "Kickstart ROM" msgstr "" msgid "Kickstart ROMs are missing" msgstr "" msgid "Kickstart import task started" msgstr "" msgid "Launching FS-UAE" msgstr "" msgid "Least Accurate" msgstr "" msgid "Less Accurate" msgstr "" msgid "List of Folders to Index" msgstr "" msgid "Low latency vsync (when using full vsync)" msgstr "" msgid "MB" msgstr "" msgid "Main Configuration Options" msgstr "" msgid "Main Menu" msgstr "" msgid "Media Swap List" msgstr "" msgid "Memory" msgstr "" msgid "Mouse" msgstr "" msgid "Mouse & Joystick Ports" msgstr "" msgid "Mouse Settings" msgstr "" msgid "Mouse speed (%)" msgstr "" msgid "Net Play" msgstr "" msgid "Net Play Settings" msgstr "" msgid "Net play tag (max 3 characters)" msgstr "" msgid "New Configuration" msgstr "" msgid "New Disk Image" msgstr "" msgid "Nick:" msgstr "" msgid "No Device" msgstr "" msgid "No Host Device" msgstr "" msgid "No Joysticks" msgstr "" msgid "No extended kickstart found for this model. Try 'scan' function." msgstr "" msgid "No joysticks are currently connected" msgstr "" msgid "No kickstart found for this model. " msgstr "" msgid "No scan in progress" msgstr "" msgid "Nothing" msgstr "" msgid "OK" msgstr "" msgid "Off" msgstr "" msgid "On" msgstr "" msgid "Open Game Database Entry" msgstr "" msgid "Open Hall of Light Entry" msgstr "" msgid "Open LemonAmiga Entry" msgstr "" msgid "Open MobyGames Entry" msgstr "" msgid "Open Scan Dialog" msgstr "" msgid "Open Tool to Configure Button Mapping" msgstr "" msgid "Open Wikipedia Entry" msgstr "" msgid "OpenGL Settings" msgstr "" msgid "Override Installed Memory" msgstr "" msgid "Parallel Port Joysticks" msgstr "" msgid "Picasso96 Support" msgstr "" msgid "Picasso96 Support (uaegfx.card)" msgstr "" msgid "Please wait..." msgstr "" msgid "Preferences" msgstr "" msgid "Preferred Joystick" msgstr "" msgid "Preferred device for secondary joystick:" msgstr "" msgid "Preparing WHDLoad..." msgstr "" msgid "Preparing floppy images..." msgstr "" msgid "Preparing hard drives..." msgstr "" msgid "Preparing..." msgstr "" msgid "Purging old entries..." msgstr "" msgid "Refresh Game Database" msgstr "" msgid "Refresh game configurations from database" msgstr "" msgid "Refresh list of connected joystick devices" msgstr "" msgid "Remove Directory from Search Path" msgstr "" msgid "Remove Selected Files" msgstr "" msgid "Render scan lines" msgstr "" msgid "Render scan lines in RTG graphics mode" msgstr "" msgid "Resetting database..." msgstr "" msgid "Restoring changes..." msgstr "" msgid "Retrying last operation (attempt {0})" msgstr "" msgid "Save Configuration" msgstr "" msgid "Saving changes..." msgstr "" msgid "Scaling Options" msgstr "" msgid "Scan" msgstr "" msgid "Scan & Indexing" msgstr "" msgid "Scan Files and Configurations" msgstr "" msgid "Scan complete" msgstr "" msgid "Scan error" msgstr "" msgid "Scan for Files" msgstr "" msgid "Scan for Kickstarts, Files and Configurations" msgstr "" msgid "Scanning .fs-uae files..." msgstr "" msgid "Scanning built-in entries..." msgstr "" msgid "Scanning configurations" msgstr "" msgid "Scanning configurations ({count} scanned)" msgstr "" msgid "Scanning database entries..." msgstr "" msgid "Scanning files" msgstr "" msgid "Scanning files ({count} scanned)" msgstr "" msgid "Scanning game database entries..." msgstr "" msgid "Select Destination Directory" msgstr "" msgid "Select Multiple CD-ROMs" msgstr "" msgid "Select Multiple Files..." msgstr "" msgid "Select Multiple Floppies" msgstr "" msgid "Select Source Directory" msgstr "" msgid "Select a folder containing Amiga kickstart files and click \"{0}\"" msgstr "" msgid "Settings" msgstr "" msgid "Show kickstart setup page on startup when all ROMs are missing" msgstr "" msgid "Size:" msgstr "" msgid "Slow RAM" msgstr "" msgid "Specified directory does not exist" msgstr "" msgid "Start" msgstr "" msgid "Start FS-UAE in fullscreen mode" msgstr "" msgid "Starting FS-UAE..." msgstr "" msgid "Starting scan" msgstr "" msgid "Swap left and right CTRL keys" msgstr "" msgid "Synchronizing database..." msgstr "" msgid "Synchronizing personal ratings..." msgstr "" msgid "Texture filter" msgstr "" msgid "Toggle Between Windowed and Full-Screen Mode" msgstr "" msgid "Tools" msgstr "" msgid "Ungrab mouse and keyboard on middle mouse click" msgstr "" msgid "Update available ({version})" msgstr "" msgid "Updating database" msgstr "" msgid "Updating game entries:" msgstr "" msgid "Use RDB disk images for size >= {0}" msgstr "" msgid "Video Settings" msgstr "" msgid "Video buffer format and color depth" msgstr "" msgid "Video synchronization" msgstr "" msgid "Video synchronization method" msgstr "" msgid "Video texture format (on the GPU)" msgstr "" msgid "WHDLoad Arguments" msgstr "" msgid "You should have kickstart files for each Amiga model you want to use:" msgstr "" msgid "Zoom Amiga display (crop)" msgstr "" msgid "Zorro III RAM" msgstr "" msgid "{amiga_model} with < 2 MB chip memory" msgstr "" fs-uae-2.2.3+dfsg/launcher/po/sr.po0000644000175000017500000004544612162366654017274 0ustar glaubitzglaubitz# Serbian translations for fs-uae-launcher package. # Copyright (C) 2012 Frode Solheim # This file is distributed under the same license as the fs-uae-launcher package. # Frode Solheim , 2012. # msgid "" msgstr "" "Project-Id-Version: fs-uae-launcher\n" "Report-Msgid-Bugs-To: fs-uae@fengestad.no\n" "POT-Creation-Date: 2013-06-25 21:21+0200\n" "PO-Revision-Date: 2013-03-17 08:47+0100\n" "Last-Translator: \n" "Language-Team: Serbian\n" "Language: sr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" msgid "16-bit" msgstr "16-bit" msgid "32-bit BGRA" msgstr "32-bit BGRA" msgid "32-bit RGBA" msgstr "32-bit RGBA" msgid "640x400 + Border" msgstr "640x400 + okvir" msgid "640x480 + Border" msgstr "640x480 + okvir" msgid "640x512 + Border" msgstr "640x512 + okvir" msgid "ADF & HDF Creator" msgstr "Kreiranje ADF i HDF" msgid "ADF - Extended Floppy Disk Image (MFM)" msgstr "ADF - ProÅ¡irena slika diskete (MFM)" msgid "ADF - Standard Floppy Disk Image" msgstr "ADF - Standardna slika diskete " msgid "Abort" msgstr "Prekid" msgid "About {name}" msgstr "O {name}" msgid "Accurate" msgstr "Precizno" msgid "Add Directory to Search Path" msgstr "Dodati direktorijum u putanju pretrage" msgid "Add Files to List" msgstr "Dodati fajlove u listu" msgid "Add Multiple CD-ROMs at Once" msgstr "Dodati viÅ¡e CD-ROM-ova odjednom" msgid "Add Multiple Floppies at Once" msgstr "Dodati viÅ¡e disketa odjednom" msgid "Additional Options" msgstr "Dodatne opcije" msgid "Amiga Forever Import" msgstr "Uvoženje iz Amiga Forever" msgid "Amiga Forever import task started" msgstr "ZapoÄet je uvoz iz Amiga Forever" msgid "Amiga Model" msgstr "Amiga model" msgid "Audio Settings" msgstr "Postavke zvuka" msgid "Auto" msgstr "Auto" msgid "Auto + Border" msgstr "Auto + okvir" msgid "Auto-Fire is Off" msgstr "Automatsko pucanje je iskljuÄeno" msgid "Auto-Fire is On" msgstr "Automatsko pucanje je ukljuÄeno" msgid "Available Kickstart Versions" msgstr "Dostupne kickstart verzije" msgid "Browse" msgstr "Pretražiti" msgid "Browse for File" msgstr "Pronaći fajl" msgid "Browse for Folder" msgstr "Pronaći folder" msgid "Buffer swap only" msgstr "" msgid "Built-in TCP/IP Stack" msgstr "UgraÄ‘en TCP/IP stek" msgid "Built-in TCP/IP Stack (bsdsocket.library)" msgstr "UgraÄ‘enTCP/IP stek (bsdsocket.library)" msgid "CD-ROM Drive" msgstr "CD-ROM ureÄ‘aj" msgid "CD-ROM Drives" msgstr "CD-ROM ureÄ‘aji" msgid "CD-ROMs" msgstr "CD-ROM ureÄ‘aji" msgid "CD32 Pad" msgstr "CD32 " msgid "Cancel" msgstr "Otkazati" msgid "Chip RAM" msgstr "Chip RAM" msgid "Choose CD-ROM Image" msgstr "Odabrati CD-ROM sliku" msgid "Choose Extended ROM" msgstr "Odabrati proÅ¡ireni ROM" msgid "Choose Floppy Image" msgstr "Izabrati disketnu sliku" msgid "Choose Hard Drive" msgstr "Odabrati hard disk ureÄ‘aj" msgid "Choose Kickstart ROM" msgstr "Izabrati kikstart ROM" msgid "Cleaning up..." msgstr "ÄŒišćenje..." msgid "Clear List" msgstr "Isprazniti listu" msgid "Click 'Scan' button if you want to re-scan" msgstr "Kliknite na dugme 'Skeniranje' ako želite da ponovo skenira" msgid "Click 'Scan' button to start scan" msgstr "Kliknite na dugme 'Skeniranje' da biste zapoÄeli skeniranje" msgid "Click here to download" msgstr "Kliknuti ovde za preuzimanje" msgid "Click here to import kickstarts" msgstr "Kliknuti ovde za uvoz kikstarta" msgid "Close" msgstr "Zatvoriti" msgid "Committing data..." msgstr "IzvrÅ¡avanje podataka" msgid "Config" msgstr "Konfiguracija" msgid "Configuration" msgstr "Konfiguracija" msgid "Configuration Browser" msgstr "PretraživaÄ konfiguracije" msgid "Configuration Warning" msgstr "" msgid "Configurations" msgstr "Konfiguracije" msgid "Configure Joystick Buttons" msgstr "Konfigurisati dugmeta džojstika" msgid "Connect" msgstr "Povezivanje" msgid "" "Copy {0}\n" "to {1}" msgstr "" "Kopiranje {0}\n" "u {1}" msgid "Could not open file for writing" msgstr "Nije moguće otvoriti fajl za upis" msgid "Create" msgstr "Kreirati" msgid "Cursor Keys and Right Ctrl/Alt" msgstr "Kursorski tasteri i desni Ctrl/Alt" msgid "Custom" msgstr "PrilagoÄ‘eno" msgid "Custom Configuration" msgstr "PrilagoÄ‘ena konfiguracija" msgid "Custom IRC server address" msgstr "PrilagoÄ‘ena adresa IRC servera" msgid "Custom Joystick Port" msgstr "PrilagoÄ‘eni džojstik port" msgid "Custom Options" msgstr "PrilagoÄ‘ene opcije" msgid "Custom Settings" msgstr "PrilagoÄ‘ena podeÅ¡avanja" msgid "Default" msgstr "Podrazumevano" msgid "Default ({0})" msgstr "Podrazumevano ({0})" msgid "Destination Directory:" msgstr "Ciljni direktorijum:" msgid "Disconnect" msgstr "Prekid veze" msgid "Disk Image Name:" msgstr "Ime slike diskete:" msgid "Disk image created" msgstr "Slika diskete je kreirana" msgid "Download failed (attempt {0}) - retrying in {0} seconds" msgstr "Preuzimanje nije uspelo (pokuÅ¡aj {0}) - ponovni pokuÅ¡aj u {0} sekundi" msgid "Downloading {0}..." msgstr "Preuzimanje {0}..." msgid "Edit Custom Options" msgstr "Urediti prilagoÄ‘ene opcije" msgid "Eject" msgstr "Izbaciti" msgid "Enable experimental net play GUI (requires restart)" msgstr "OmogucÌiti eksperimentalni net play GUI (zahteva restart)" msgid "Enable online database support (requires restart)" msgstr "OmogucÌiti onlajn podrÅ¡ku baze podataka (zahteva restart)" msgid "Error moving file into place" msgstr "GreÅ¡ka pomeranja fajla u mestu" msgid "Error writing disk image" msgstr "GreÅ¡ka prilikom upisa slike diskete" msgid "Expansions" msgstr "ProÅ¡irenja" msgid "Experimental Features" msgstr "Eksperimentalne funkcije" msgid "Extended ROM:" msgstr "ProÅ¡ireni ROM:" msgid "FS-UAE Launcher Settings" msgstr "PodeÅ¡avanja FS-UAE Launcher-a" msgid "Fast RAM" msgstr "Fast RAM" msgid "Fetching database entries ({0})" msgstr "Preuzimanje baze podataka ({0})" msgid "Fetching game ratings ({0})" msgstr "Preuzimanje ocena igre ({0})" msgid "Fetching user game ratings ({0})" msgstr "Preuzimanje korisniÄkih ocena igre ({0})" msgid "File already exists" msgstr "Fajl već postoji" msgid "Filters" msgstr "Filteri" msgid "Filters & Scaling" msgstr "Filteri i skaliranje" msgid "Filters:" msgstr "Filteri:" msgid "Floppies" msgstr "Diskete" msgid "Floppy Drives" msgstr "Disketni ureÄ‘aji" msgid "Floppy drive volume" msgstr "Oznaka disketnog ureÄ‘aja" msgid "Full Frame" msgstr "Pun okvir" msgid "Full-scene anti-aliasing (FSAA)" msgstr "Full-scene anti-aliasing (FSAA)" msgid "Fullscreen" msgstr "Preko celog ekrana" msgid "Game Database" msgstr "Baza igara" msgid "Game Database Settings" msgstr "Postavke baze igara" msgid "Game database password" msgstr "Å ifra baze igara" msgid "Game database user name" msgstr "KorisniÄko ime baze igara" msgid "Gamepad/Joystick Setup" msgstr "Gamepad / džojstik konfiguracija" msgid "Games and Configurations" msgstr "Igre i konfiguracije" msgid "Grab mouse and keyboard input when FS-UAE starts" msgstr "Preuzmi miÅ¡a i tastaturu kada se FS-UAE pokrene" msgid "Grab mouse and keyboard input when clicking on FS-UAE window" msgstr "Preuzmi miÅ¡a i tastaturu kada se klikne na FS-UAE prozor" msgid "HDF - Partitionable Hard Drive Image (RDB)" msgstr "HDF - Slika hard diska sa mogućnošću particionisanja (RDB)" msgid "HDF - Single Partition Hard Disk File" msgstr "HDF - Fajl hard diska sa jednom particijom" msgid "Hard Drives" msgstr "Hard disk ureÄ‘aji" msgid "Hardware" msgstr "Hardver" msgid "Hardware Options" msgstr "Opcije hardvera" msgid "IRC nickname" msgstr "IRC nadimak" msgid "If you own Amiga Forever, select the drive/folder and click \"{0}\"" msgstr "Ako posedujete Amiga Forever, izaberite disk/folder i kliknite \"{0}\"" msgid "Import" msgstr "Uvoz podataka" msgid "Import From Amiga Forever CD/DVD" msgstr "Uvoz sa Amiga Forever CD/DVD" msgid "Import Kickstarts" msgstr "Uvoženje kikstartova" msgid "Import Kickstarts and ROMs" msgstr "Uvoz kikstart-ova i ROM-ova" msgid "Import task is done" msgstr "Zadatak uvoženja je zavrÅ¡en" msgid "Include built-in configurations" msgstr "UkljuÄiti ugraÄ‘ene konfiguracije" msgid "Input" msgstr "Ulaz" msgid "Input Options" msgstr "Opcije ulaza" msgid "Input Settings" msgstr "Postavke ulaza" msgid "Internal" msgstr "Interno" msgid "Invalid size specified" msgstr "Specificirana nevalidna veliÄina" msgid "Joystick" msgstr "Džojstik" msgid "Joystick Configuration" msgstr "Konfiguracija džojstika" msgid "Joystick Ports" msgstr "Džojstik portovi" msgid "Joystick Settings" msgstr "Postavke džojstika" msgid "Keep aspect ratio when scaling (do not stretch)" msgstr "Zadržati razmeru kada se skalira (bez rastezanja)" msgid "Keyboard Settings" msgstr "Postavke tastature" msgid "Kickstart ROM" msgstr "Kikstart ROM" msgid "Kickstart ROMs are missing" msgstr "Kikstart romovi nedostaju" msgid "Kickstart import task started" msgstr "Uvoženje kikstarta je zapoÄeto" msgid "Launching FS-UAE" msgstr "Pokretanje FS-UAE" msgid "Least Accurate" msgstr "Najmanje precizno" msgid "Less Accurate" msgstr "Manje precizno" msgid "List of Folders to Index" msgstr "Spisak foldera za indeksiranje" msgid "Low latency vsync (when using full vsync)" msgstr "Malo kaÅ¡njenje vsync (kada se koristi puni vsync)" msgid "MB" msgstr "MB" msgid "Main Configuration Options" msgstr "Glavne opcije konfiguracije" msgid "Main Menu" msgstr "Glavni meni" msgid "Media Swap List" msgstr "Lista izmena medija" msgid "Memory" msgstr "Memorija" msgid "Mouse" msgstr "MiÅ¡" msgid "Mouse & Joystick Ports" msgstr "Portovi miÅ¡a i džojstika" msgid "Mouse Settings" msgstr "PodeÅ¡avanje miÅ¡a" msgid "Mouse speed (%)" msgstr "Brzina miÅ¡a (%)" msgid "Net Play" msgstr "Igra preko mreže" msgid "Net Play Settings" msgstr "PodeÅ¡avanja igre preko mreže" msgid "Net play tag (max 3 characters)" msgstr "Oznaka igre preko mreže (maksimalno 3 slova)" msgid "New Configuration" msgstr "Nova konfiguracija" msgid "New Disk Image" msgstr "Nova slika diskete" msgid "Nick:" msgstr "Nadimak:" msgid "No Device" msgstr "Nema ureÄ‘aja" msgid "No Host Device" msgstr "Nema host ureÄ‘aja" msgid "No Joysticks" msgstr "Nema džojstika" msgid "No extended kickstart found for this model. Try 'scan' function." msgstr "" "Nije pronaÄ‘en proÅ¡ireni kikstart za ovaj model. Probajte funkciju " "'Skeniranje'." msgid "No joysticks are currently connected" msgstr "Trenutno nema spojenog džojstika" msgid "No kickstart found for this model. " msgstr "Nije pronaÄ‘en kikstart za ovaj model." msgid "No scan in progress" msgstr "Skeniranje nije u toku" msgid "Nothing" msgstr "NiÅ¡ta" msgid "OK" msgstr "OK" msgid "Off" msgstr "IskljuÄeno" msgid "On" msgstr "UkljuÄeno" msgid "Open Game Database Entry" msgstr "Otvoriti bazu igara" msgid "Open Hall of Light Entry" msgstr "Otvoriti Hall of Light unos " msgid "Open LemonAmiga Entry" msgstr "Otvoriti LemonAmiga unos" msgid "Open MobyGames Entry" msgstr "Otvoriti MobyGames unos " msgid "Open Scan Dialog" msgstr "Otvoriti dijalog za skeniranje" msgid "Open Tool to Configure Button Mapping" msgstr "Otvoriti alat da bi ste konfigurisali mapiranje tastera" msgid "Open Wikipedia Entry" msgstr "Otvoriti Wikipedia unos " msgid "OpenGL Settings" msgstr "PodeÅ¡avanje OpenGL-a " msgid "Override Installed Memory" msgstr "Zanemariti instaliranu memoriju" msgid "Parallel Port Joysticks" msgstr "Paralelni džojstik portovi" msgid "Picasso96 Support" msgstr "Picasso96 podrÅ¡ka" msgid "Picasso96 Support (uaegfx.card)" msgstr "Picasso96 podrÅ¡ka (uaegfx.card)" msgid "Please wait..." msgstr "Molimo saÄekajte..." msgid "Preferences" msgstr "Postavke" msgid "Preferred Joystick" msgstr "Željeni džojstik" msgid "Preferred device for secondary joystick:" msgstr "Željeni ureÄ‘aj za drugi džojstik:" msgid "Preparing WHDLoad..." msgstr "Priprema WHDLoad..." msgid "Preparing floppy images..." msgstr "Priprema slike diskete..." msgid "Preparing hard drives..." msgstr "Priprema hard diskova..." msgid "Preparing..." msgstr "Priprema..." msgid "Purging old entries..." msgstr "ÄŒišćenje starih zapisa..." msgid "Refresh Game Database" msgstr "Osvežiti bazu igara" msgid "Refresh game configurations from database" msgstr "Osvežiti konfiguracije igara iz baze podataka" msgid "Refresh list of connected joystick devices" msgstr "Osvežiti listu povezanih džojstika" msgid "Remove Directory from Search Path" msgstr "Ukloniti direktorijum iz putanje pretrage" msgid "Remove Selected Files" msgstr "Ukloniti izabrane fajlove" msgid "Render scan lines" msgstr "Renderovanje sken linija" msgid "Render scan lines in RTG graphics mode" msgstr "Renderovanje sken linija u RTG grafiÄkom režimu" msgid "Resetting database..." msgstr "Resetovanje podataka baze ..." msgid "Restoring changes..." msgstr "Vraćanje izmena..." msgid "Retrying last operation (attempt {0})" msgstr "IzvrÅ¡avanje poslednje operacije (pokuÅ¡aj {0})" msgid "Save Configuration" msgstr "Snimiti konfiguraciju" msgid "Saving changes..." msgstr "Snimanje izmena..." msgid "Scaling Options" msgstr "Opcije skaliranja" msgid "Scan" msgstr "Skeniranje" msgid "Scan & Indexing" msgstr "Skeniranje i indeksiranje" msgid "Scan Files and Configurations" msgstr "Skeniranje fajlova i konfiguacija" msgid "Scan complete" msgstr "Skeniranje zavrÅ¡eno" msgid "Scan error" msgstr "GreÅ¡ka skeniranja" msgid "Scan for Files" msgstr "Skeniranje fajlova" msgid "Scan for Kickstarts, Files and Configurations" msgstr "Skeniranje kikstart-ova, datoteka i konfiguracija" msgid "Scanning .fs-uae files..." msgstr "Skeniranje .fs-uae fajlova..." msgid "Scanning built-in entries..." msgstr "Skeniranje ugraÄ‘enih unosa..." msgid "Scanning configurations" msgstr "Skeniranje konfiguracija" msgid "Scanning configurations ({count} scanned)" msgstr "Skeniranje konfiguracija ({count} skenirano)" msgid "Scanning database entries..." msgstr "Skeniranje unosa baze..." msgid "Scanning files" msgstr "Skeniranje fajlova" msgid "Scanning files ({count} scanned)" msgstr "Skeniranje fajlova ({count} skenirano)" msgid "Scanning game database entries..." msgstr "Skeniranje " msgid "Select Destination Directory" msgstr "Odabrati ciljni direktorijum" msgid "Select Multiple CD-ROMs" msgstr "Izabrati viÅ¡e CD-ova" msgid "Select Multiple Files..." msgstr "Izabrati viÅ¡e fajlova..." msgid "Select Multiple Floppies" msgstr "Izabrati viÅ¡e disketa" msgid "Select Source Directory" msgstr "Odabrati izvorni direktorijum" msgid "Select a folder containing Amiga kickstart files and click \"{0}\"" msgstr "Izabrati folder koji sadrži Amiga kikstart fajlove i kliknuti \"{0}\"" msgid "Settings" msgstr "PodeÅ¡avanja" msgid "Show kickstart setup page on startup when all ROMs are missing" msgstr "Prikaži na startu kikstart podeÅ¡avanja ako svi ROM-ovi nedostaju" msgid "Size:" msgstr "VeliÄina:" msgid "Slow RAM" msgstr "Slow RAM" msgid "Specified directory does not exist" msgstr "Navedeni direktorijum ne postoji" msgid "Start" msgstr "Start" msgid "Start FS-UAE in fullscreen mode" msgstr "Pokretanje FS-UAE preko celog ekrana" msgid "Starting FS-UAE..." msgstr "FS-UAE se startuje..." msgid "Starting scan" msgstr "Skeniranje zapoÄeto" msgid "Swap left and right CTRL keys" msgstr "Zameniti levi i desni CTRL taster" msgid "Synchronizing database..." msgstr "Sinhronizovanje baze..." msgid "Synchronizing personal ratings..." msgstr "Sinhronizovanje liÄnih ocena..." msgid "Texture filter" msgstr "Filter teksture" msgid "Toggle Between Windowed and Full-Screen Mode" msgstr "Prelaženje izmeÄ‘u moda prozora i Äitavog ekrana" msgid "Tools" msgstr "Alati" msgid "Ungrab mouse and keyboard on middle mouse click" msgstr "Otpustiti miÅ¡a i tastaturu na srednji klik miÅ¡a" msgid "Update available ({version})" msgstr "Ažurna verzija dostupna ({version})" msgid "Updating database" msgstr "Ažuriranje baze" msgid "Updating game entries:" msgstr "Ažuriranje podataka igre:" msgid "Use RDB disk images for size >= {0}" msgstr "Koristiti RDB sliku diska za veliÄinu >= {0}" msgid "Video Settings" msgstr "PodeÅ¡avanje videa" msgid "Video buffer format and color depth" msgstr "Video format bafera i dubine boja" msgid "Video synchronization" msgstr "Video sinhronizacija" msgid "Video synchronization method" msgstr "Metoda sinhronizacije videa" msgid "Video texture format (on the GPU)" msgstr "Video format teksture (na GPU)" msgid "WHDLoad Arguments" msgstr "WHDLoad argumenti" msgid "You should have kickstart files for each Amiga model you want to use:" msgstr "" "Trebalo bi da posedujete kikstart fajlove za svaki Amiga model koji " "koristite:" msgid "Zoom Amiga display (crop)" msgstr "Zumiranje Amiga prikaza (crop opcija)" msgid "Zorro III RAM" msgstr "Zorro III RAM" msgid "{amiga_model} with < 2 MB chip memory" msgstr "" #~ msgid "Add Multiple CD Images at Once" #~ msgstr "Dodati viÅ¡e CD slika odjednom" #~ msgid "Add Multiple Files at Once" #~ msgstr "Dodati viÅ¡e datoteka odjednom" #~ msgid "Amiga Hardware Options" #~ msgstr "Opcije Amiga hardvera" #~ msgid "Amiga Model and Hardware" #~ msgstr "Amiga model i hardver" #~ msgid "Commiting data..." #~ msgstr "IzvrÅ¡avanje podataka" #~ msgid "Configure CD-ROMs" #~ msgstr "Konfigurisanje CD-ROM-ova" #~ msgid "Configure Floppies" #~ msgstr "Konfigurisanje disketa" #~ msgid "Configure Hard Drives" #~ msgstr "Konfigurisanje hard diskova" #~ msgid "Configure Hardware" #~ msgstr "Konfigurisanje hardvera" #~ msgid "Configure Input" #~ msgstr "Konfigurisanje ulaznih ureÄ‘aja" #~ msgid "Configure Joysticks" #~ msgstr "Konfigurisanje džojstika" #~ msgid "Floppies..." #~ msgstr "Diskete..." #~ msgid "Force Full Vsync" #~ msgstr "Forsirati pun Vsync" #~ msgid "Game Files" #~ msgstr "Fajlovi igre" #~ msgid "Hard Drive {0}" #~ msgstr "Hard disk {0}" #~ msgid "Host Options" #~ msgstr "Opcije host ureÄ‘aja" #~ msgid "Kickstart" #~ msgstr "Kickstart" #~ msgid "Kickstart Setup" #~ msgstr "PodeÅ¡avanja kikstarta" #~ msgid "Kickstart Versions" #~ msgstr "Verzije kickstarta" #~ msgid "Media List" #~ msgstr "Lista medija" #~ msgid "More Configuration Options" #~ msgstr "JoÅ¡ opcija konfiguracije" #~ msgid "More..." #~ msgstr "JoÅ¡..." #~ msgid "Open Configuration" #~ msgstr "Otvoriti konfiguraciju" #~ msgid "ROMs" #~ msgstr "ROM-ovi" #~ msgid "Refresh Joystick List" #~ msgstr "Osvežiti listu džojstika " #~ msgid "Removable Media" #~ msgstr "Prenosivi medijum" #~ msgid "Remove Diretory from Search Path" #~ msgstr "Ukloniti direktorijum iz putanje pretrage" #~ msgid "Scan for Kickstarts, Games and Configurations" #~ msgstr "Skeniranje kickstartova, igara i konfiguracija" #~ msgid "Scan for:" #~ msgstr "Skeniranje:" #~ msgid "Select Directory to Import From" #~ msgstr "Izabrati direktorijum iz koga se uvozi" #~ msgid "Select Files..." #~ msgstr "Izabrati fajlove..." #~ msgid "Sync to Vblank" #~ msgstr "Sinhronizacija sa Vblank" #~ msgid "Update ({version}) is available" #~ msgstr "Ažuriranje ({version}) je dostupna" #~ msgid "Window" #~ msgstr "U prozoru" fs-uae-2.2.3+dfsg/launcher/po/sv.po0000644000175000017500000002533112162366654017267 0ustar glaubitzglaubitz# Swedish translations for fs-uae-launcher package. # Copyright (C) 2013 Frode Solheim # This file is distributed under the same license as the fs-uae-launcher package. # Frode Solheim , 2013. # msgid "" msgstr "" "Project-Id-Version: fs-uae-launcher\n" "Report-Msgid-Bugs-To: fs-uae@fengestad.no\n" "POT-Creation-Date: 2013-06-25 21:21+0200\n" "PO-Revision-Date: 2013-03-07 22:11+0100\n" "Last-Translator: Frode Solheim \n" "Language-Team: Swedish\n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" msgid "16-bit" msgstr "" msgid "32-bit BGRA" msgstr "" msgid "32-bit RGBA" msgstr "" msgid "640x400 + Border" msgstr "" msgid "640x480 + Border" msgstr "" msgid "640x512 + Border" msgstr "" msgid "ADF & HDF Creator" msgstr "" msgid "ADF - Extended Floppy Disk Image (MFM)" msgstr "" msgid "ADF - Standard Floppy Disk Image" msgstr "" msgid "Abort" msgstr "" msgid "About {name}" msgstr "" msgid "Accurate" msgstr "" msgid "Add Directory to Search Path" msgstr "" msgid "Add Files to List" msgstr "" msgid "Add Multiple CD-ROMs at Once" msgstr "" msgid "Add Multiple Floppies at Once" msgstr "" msgid "Additional Options" msgstr "" msgid "Amiga Forever Import" msgstr "" msgid "Amiga Forever import task started" msgstr "" msgid "Amiga Model" msgstr "" msgid "Audio Settings" msgstr "" msgid "Auto" msgstr "" msgid "Auto + Border" msgstr "" msgid "Auto-Fire is Off" msgstr "" msgid "Auto-Fire is On" msgstr "" msgid "Available Kickstart Versions" msgstr "" msgid "Browse" msgstr "" msgid "Browse for File" msgstr "" msgid "Browse for Folder" msgstr "" msgid "Buffer swap only" msgstr "" msgid "Built-in TCP/IP Stack" msgstr "" msgid "Built-in TCP/IP Stack (bsdsocket.library)" msgstr "" msgid "CD-ROM Drive" msgstr "" msgid "CD-ROM Drives" msgstr "" msgid "CD-ROMs" msgstr "" msgid "CD32 Pad" msgstr "" msgid "Cancel" msgstr "" msgid "Chip RAM" msgstr "" msgid "Choose CD-ROM Image" msgstr "" msgid "Choose Extended ROM" msgstr "" msgid "Choose Floppy Image" msgstr "" msgid "Choose Hard Drive" msgstr "" msgid "Choose Kickstart ROM" msgstr "" msgid "Cleaning up..." msgstr "" msgid "Clear List" msgstr "" msgid "Click 'Scan' button if you want to re-scan" msgstr "" msgid "Click 'Scan' button to start scan" msgstr "" msgid "Click here to download" msgstr "" msgid "Click here to import kickstarts" msgstr "" msgid "Close" msgstr "" msgid "Committing data..." msgstr "" msgid "Config" msgstr "" msgid "Configuration" msgstr "" msgid "Configuration Browser" msgstr "" msgid "Configuration Warning" msgstr "" msgid "Configurations" msgstr "" msgid "Configure Joystick Buttons" msgstr "" msgid "Connect" msgstr "" msgid "" "Copy {0}\n" "to {1}" msgstr "" msgid "Could not open file for writing" msgstr "" msgid "Create" msgstr "" msgid "Cursor Keys and Right Ctrl/Alt" msgstr "" msgid "Custom" msgstr "" msgid "Custom Configuration" msgstr "" msgid "Custom IRC server address" msgstr "" msgid "Custom Joystick Port" msgstr "" msgid "Custom Options" msgstr "" msgid "Custom Settings" msgstr "" msgid "Default" msgstr "" msgid "Default ({0})" msgstr "" msgid "Destination Directory:" msgstr "" msgid "Disconnect" msgstr "" msgid "Disk Image Name:" msgstr "" msgid "Disk image created" msgstr "" msgid "Download failed (attempt {0}) - retrying in {0} seconds" msgstr "" msgid "Downloading {0}..." msgstr "" msgid "Edit Custom Options" msgstr "" msgid "Eject" msgstr "" msgid "Enable experimental net play GUI (requires restart)" msgstr "" msgid "Enable online database support (requires restart)" msgstr "" msgid "Error moving file into place" msgstr "" msgid "Error writing disk image" msgstr "" msgid "Expansions" msgstr "" msgid "Experimental Features" msgstr "" msgid "Extended ROM:" msgstr "" msgid "FS-UAE Launcher Settings" msgstr "" msgid "Fast RAM" msgstr "" msgid "Fetching database entries ({0})" msgstr "" msgid "Fetching game ratings ({0})" msgstr "" msgid "Fetching user game ratings ({0})" msgstr "" msgid "File already exists" msgstr "" msgid "Filters" msgstr "" msgid "Filters & Scaling" msgstr "" msgid "Filters:" msgstr "" msgid "Floppies" msgstr "" msgid "Floppy Drives" msgstr "" msgid "Floppy drive volume" msgstr "" msgid "Full Frame" msgstr "" msgid "Full-scene anti-aliasing (FSAA)" msgstr "" msgid "Fullscreen" msgstr "" msgid "Game Database" msgstr "" msgid "Game Database Settings" msgstr "" msgid "Game database password" msgstr "" msgid "Game database user name" msgstr "" msgid "Gamepad/Joystick Setup" msgstr "" msgid "Games and Configurations" msgstr "" msgid "Grab mouse and keyboard input when FS-UAE starts" msgstr "" msgid "Grab mouse and keyboard input when clicking on FS-UAE window" msgstr "" msgid "HDF - Partitionable Hard Drive Image (RDB)" msgstr "" msgid "HDF - Single Partition Hard Disk File" msgstr "" msgid "Hard Drives" msgstr "" msgid "Hardware" msgstr "" msgid "Hardware Options" msgstr "" msgid "IRC nickname" msgstr "" msgid "If you own Amiga Forever, select the drive/folder and click \"{0}\"" msgstr "" msgid "Import" msgstr "" msgid "Import From Amiga Forever CD/DVD" msgstr "" msgid "Import Kickstarts" msgstr "" msgid "Import Kickstarts and ROMs" msgstr "" msgid "Import task is done" msgstr "" msgid "Include built-in configurations" msgstr "" msgid "Input" msgstr "" msgid "Input Options" msgstr "" msgid "Input Settings" msgstr "" msgid "Internal" msgstr "" msgid "Invalid size specified" msgstr "" msgid "Joystick" msgstr "" msgid "Joystick Configuration" msgstr "" msgid "Joystick Ports" msgstr "" msgid "Joystick Settings" msgstr "" msgid "Keep aspect ratio when scaling (do not stretch)" msgstr "" msgid "Keyboard Settings" msgstr "" msgid "Kickstart ROM" msgstr "" msgid "Kickstart ROMs are missing" msgstr "" msgid "Kickstart import task started" msgstr "" msgid "Launching FS-UAE" msgstr "" msgid "Least Accurate" msgstr "" msgid "Less Accurate" msgstr "" msgid "List of Folders to Index" msgstr "" msgid "Low latency vsync (when using full vsync)" msgstr "" msgid "MB" msgstr "" msgid "Main Configuration Options" msgstr "" msgid "Main Menu" msgstr "" msgid "Media Swap List" msgstr "" msgid "Memory" msgstr "" msgid "Mouse" msgstr "" msgid "Mouse & Joystick Ports" msgstr "" msgid "Mouse Settings" msgstr "" msgid "Mouse speed (%)" msgstr "" msgid "Net Play" msgstr "" msgid "Net Play Settings" msgstr "" msgid "Net play tag (max 3 characters)" msgstr "" msgid "New Configuration" msgstr "" msgid "New Disk Image" msgstr "" msgid "Nick:" msgstr "" msgid "No Device" msgstr "" msgid "No Host Device" msgstr "" msgid "No Joysticks" msgstr "" msgid "No extended kickstart found for this model. Try 'scan' function." msgstr "" msgid "No joysticks are currently connected" msgstr "" msgid "No kickstart found for this model. " msgstr "" msgid "No scan in progress" msgstr "" msgid "Nothing" msgstr "" msgid "OK" msgstr "" msgid "Off" msgstr "" msgid "On" msgstr "" msgid "Open Game Database Entry" msgstr "" msgid "Open Hall of Light Entry" msgstr "" msgid "Open LemonAmiga Entry" msgstr "" msgid "Open MobyGames Entry" msgstr "" msgid "Open Scan Dialog" msgstr "" msgid "Open Tool to Configure Button Mapping" msgstr "" msgid "Open Wikipedia Entry" msgstr "" msgid "OpenGL Settings" msgstr "" msgid "Override Installed Memory" msgstr "" msgid "Parallel Port Joysticks" msgstr "" msgid "Picasso96 Support" msgstr "" msgid "Picasso96 Support (uaegfx.card)" msgstr "" msgid "Please wait..." msgstr "" msgid "Preferences" msgstr "" msgid "Preferred Joystick" msgstr "" msgid "Preferred device for secondary joystick:" msgstr "" msgid "Preparing WHDLoad..." msgstr "" msgid "Preparing floppy images..." msgstr "" msgid "Preparing hard drives..." msgstr "" msgid "Preparing..." msgstr "" msgid "Purging old entries..." msgstr "" msgid "Refresh Game Database" msgstr "" msgid "Refresh game configurations from database" msgstr "" msgid "Refresh list of connected joystick devices" msgstr "" msgid "Remove Directory from Search Path" msgstr "" msgid "Remove Selected Files" msgstr "" msgid "Render scan lines" msgstr "" msgid "Render scan lines in RTG graphics mode" msgstr "" msgid "Resetting database..." msgstr "" msgid "Restoring changes..." msgstr "" msgid "Retrying last operation (attempt {0})" msgstr "" msgid "Save Configuration" msgstr "" msgid "Saving changes..." msgstr "" msgid "Scaling Options" msgstr "" msgid "Scan" msgstr "" msgid "Scan & Indexing" msgstr "" msgid "Scan Files and Configurations" msgstr "" msgid "Scan complete" msgstr "" msgid "Scan error" msgstr "" msgid "Scan for Files" msgstr "" msgid "Scan for Kickstarts, Files and Configurations" msgstr "" msgid "Scanning .fs-uae files..." msgstr "" msgid "Scanning built-in entries..." msgstr "" msgid "Scanning configurations" msgstr "" msgid "Scanning configurations ({count} scanned)" msgstr "" msgid "Scanning database entries..." msgstr "" msgid "Scanning files" msgstr "" msgid "Scanning files ({count} scanned)" msgstr "" msgid "Scanning game database entries..." msgstr "" msgid "Select Destination Directory" msgstr "" msgid "Select Multiple CD-ROMs" msgstr "" msgid "Select Multiple Files..." msgstr "" msgid "Select Multiple Floppies" msgstr "" msgid "Select Source Directory" msgstr "" msgid "Select a folder containing Amiga kickstart files and click \"{0}\"" msgstr "" msgid "Settings" msgstr "" msgid "Show kickstart setup page on startup when all ROMs are missing" msgstr "" msgid "Size:" msgstr "" msgid "Slow RAM" msgstr "" msgid "Specified directory does not exist" msgstr "" msgid "Start" msgstr "" msgid "Start FS-UAE in fullscreen mode" msgstr "" msgid "Starting FS-UAE..." msgstr "" msgid "Starting scan" msgstr "" msgid "Swap left and right CTRL keys" msgstr "" msgid "Synchronizing database..." msgstr "" msgid "Synchronizing personal ratings..." msgstr "" msgid "Texture filter" msgstr "" msgid "Toggle Between Windowed and Full-Screen Mode" msgstr "" msgid "Tools" msgstr "" msgid "Ungrab mouse and keyboard on middle mouse click" msgstr "" msgid "Update available ({version})" msgstr "" msgid "Updating database" msgstr "" msgid "Updating game entries:" msgstr "" msgid "Use RDB disk images for size >= {0}" msgstr "" msgid "Video Settings" msgstr "" msgid "Video buffer format and color depth" msgstr "" msgid "Video synchronization" msgstr "" msgid "Video synchronization method" msgstr "" msgid "Video texture format (on the GPU)" msgstr "" msgid "WHDLoad Arguments" msgstr "" msgid "You should have kickstart files for each Amiga model you want to use:" msgstr "" msgid "Zoom Amiga display (crop)" msgstr "" msgid "Zorro III RAM" msgstr "" msgid "{amiga_model} with < 2 MB chip memory" msgstr "" fs-uae-2.2.3+dfsg/launcher/po/update.py0000644000175000017500000000312412162366654020127 0ustar glaubitzglaubitz#!/usr/bin/env python from __future__ import print_function import os import shutil import tempfile import subprocess dirs = ["fs_uae_launcher"] files = [] extensions = [".py"] temp = tempfile.NamedTemporaryFile(delete=False) for dir in dirs: for dir_path, dir_names, file_names in os.walk(dir): for file in file_names: name, ext = os.path.splitext(file) if ext not in extensions: continue path = os.path.join(dir_path, file) files.append(path) with temp: for path in sorted(files): temp.write(path) temp.write("\n") args = ["xgettext", "--output-dir=po", "--files-from=" + temp.name, "--keyword=_", "--keyword=N_", "--package-name=fs-uae-launcher", "--msgid-bugs-address=fs-uae@fengestad.no", "--copyright-holder=Frode Solheim", "--add-comments=#", "--no-location", "--sort-output", "--from-code=ISO-8859-1", ] p = subprocess.Popen(args) p.wait() shutil.move("po/messages.po", "po/messages.pot") for file in os.listdir("po"): if file.endswith(".po"): path = os.path.join("po", file) print(path) p = subprocess.Popen(["msgmerge", "--no-fuzzy-matching", "--sort-output", "--update", path, "po/messages.pot"]) p.wait() os.system("find share -name fs-uae.mo -delete") #os.system("make -C .. po-dist") os.system("make -f Makefile.mk mo") fs-uae-2.2.3+dfsg/launcher/po/tr.po0000644000175000017500000004177512162366654017276 0ustar glaubitzglaubitz# Turkish translations for fs-uae-launcher package. # Copyright (C) 2013 Frode Solheim # This file is distributed under the same license as the fs-uae-launcher package. # Frode Solheim , 2013. # msgid "" msgstr "" "Project-Id-Version: fs-uae-launcher\n" "Report-Msgid-Bugs-To: fs-uae@fengestad.no\n" "POT-Creation-Date: 2013-06-25 21:21+0200\n" "PO-Revision-Date: 2013-04-07 19:25+0200\n" "Last-Translator: Eser Güven \n" "Language-Team: Turkish\n" "Language: tr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 1.5.5\n" msgid "16-bit" msgstr "16-bit" msgid "32-bit BGRA" msgstr "32-bit BGRA" msgid "32-bit RGBA" msgstr "32-bit RGBA" msgid "640x400 + Border" msgstr "640x400 + Kenar" msgid "640x480 + Border" msgstr "640x480 + Kenar" msgid "640x512 + Border" msgstr "640x512 + Kenar" msgid "ADF & HDF Creator" msgstr "ADF & HDF Yaratıcı" msgid "ADF - Extended Floppy Disk Image (MFM)" msgstr "ADF - GeniÅŸletilmiÅŸ Disket İmajı (MFM)" msgid "ADF - Standard Floppy Disk Image" msgstr "ADF - Standart Disket İmajı" msgid "Abort" msgstr "İptal Et" msgid "About {name}" msgstr "{name} hakkında" msgid "Accurate" msgstr "İsabetli" msgid "Add Directory to Search Path" msgstr "Arama Adresine Klasör Ekle" msgid "Add Files to List" msgstr "Listeye Dosya Ekle" msgid "Add Multiple CD-ROMs at Once" msgstr "Tek Seferde Birden Çok CD-ROM Ekle" msgid "Add Multiple Floppies at Once" msgstr "Tek Seferde Birden Çok Disket Ekle" msgid "Additional Options" msgstr "Ek Seçenekler" msgid "Amiga Forever Import" msgstr "Amiga Forever'dan Aktar" msgid "Amiga Forever import task started" msgstr "Amiga Forever'dan aktarma iÅŸlemi baÅŸladı" msgid "Amiga Model" msgstr "Amiga Modeli" msgid "Audio Settings" msgstr "Ses Ayarları" msgid "Auto" msgstr "Otomatik" msgid "Auto + Border" msgstr "Otomatik + Kenar" msgid "Auto-Fire is Off" msgstr "Otomatik AteÅŸ Kapalı" msgid "Auto-Fire is On" msgstr "Otomatik AteÅŸ Açık" msgid "Available Kickstart Versions" msgstr "Mevcut Kickstart Versiyonları" msgid "Browse" msgstr "Gözat" msgid "Browse for File" msgstr "Dosya için Gözat" msgid "Browse for Folder" msgstr "Klasör için Gözat" msgid "Buffer swap only" msgstr "" msgid "Built-in TCP/IP Stack" msgstr "Dahili TCP/IP Yığını" msgid "Built-in TCP/IP Stack (bsdsocket.library)" msgstr "Dahili TCP/IP Yığını (bsdsocket.library)" msgid "CD-ROM Drive" msgstr "CD-ROM Sürücü" msgid "CD-ROM Drives" msgstr "CD-ROM Sürücüleri" msgid "CD-ROMs" msgstr "CD-ROM'lar" msgid "CD32 Pad" msgstr "CD32 Pad" msgid "Cancel" msgstr "Vazgeç" msgid "Chip RAM" msgstr "Çip RAM" msgid "Choose CD-ROM Image" msgstr "CD-ROM İmajını Seçin" msgid "Choose Extended ROM" msgstr "GeniÅŸletilmiÅŸ ROM'u Seçin" msgid "Choose Floppy Image" msgstr "Disket İmajını Seçin" msgid "Choose Hard Drive" msgstr "Hard Diski Seçin" msgid "Choose Kickstart ROM" msgstr "Kickstart ROM'unu Seçin" msgid "Cleaning up..." msgstr "Temizleniyor..." msgid "Clear List" msgstr "Listeyi Temizle" msgid "Click 'Scan' button if you want to re-scan" msgstr "Tekrar taramak istiyorsanız 'Tara' düğmesine tıklayın" msgid "Click 'Scan' button to start scan" msgstr "Taramayı baÅŸlatmak için 'Tara' düğmesine tıklayın" msgid "Click here to download" msgstr "İndirmek için buraya tıklayın" msgid "Click here to import kickstarts" msgstr "Kickstart yüklemek için buraya tıklayın" msgid "Close" msgstr "Kapat" msgid "Committing data..." msgstr "Veri iÅŸleniyor..." msgid "Config" msgstr "Konfig" msgid "Configuration" msgstr "Konfigürasyon" msgid "Configuration Browser" msgstr "Konfigürasyon Gezgini" msgid "Configuration Warning" msgstr "Konfigürasyon Uyarısı" msgid "Configurations" msgstr "Konfigürasyonlar" msgid "Configure Joystick Buttons" msgstr "Joystick Düğmelerini Ayarla" msgid "Connect" msgstr "BaÄŸlan" msgid "" "Copy {0}\n" "to {1}" msgstr "" "{0}'ı\n" "{1}'e kopyala" msgid "Could not open file for writing" msgstr "Dosyayı yazmak için açamıyorum" msgid "Create" msgstr "Yarat" msgid "Cursor Keys and Right Ctrl/Alt" msgstr "İmleç TuÅŸları ve SaÄŸ Ctrl/Alt" msgid "Custom" msgstr "Özel" msgid "Custom Configuration" msgstr "Özel Konfigürasyon" msgid "Custom IRC server address" msgstr "Özel IRC sunucu adresi" msgid "Custom Joystick Port" msgstr "Özel Joystick Portu" msgid "Custom Options" msgstr "Özel Seçenekler" msgid "Custom Settings" msgstr "Özel Ayarlar" msgid "Default" msgstr "Varsayılan" msgid "Default ({0})" msgstr "Varsayılan ({0})" msgid "Destination Directory:" msgstr "Hedef Klasör:" msgid "Disconnect" msgstr "BaÄŸlantıyı Kes" msgid "Disk Image Name:" msgstr "Disk İmaj İsmi:" msgid "Disk image created" msgstr "Disk imajı yaratıldı" msgid "Download failed (attempt {0}) - retrying in {0} seconds" msgstr "İndirme baÅŸarısız (deneme {0}) - {0} saniye içinde tekrar denenecek" msgid "Downloading {0}..." msgstr "İndiriliyor {0}..." msgid "Edit Custom Options" msgstr "Özel Seçenekleri Düzenle" msgid "Eject" msgstr "Çıkar" msgid "Enable experimental net play GUI (requires restart)" msgstr "Deneysel net oyunu arayüzünü aktifleÅŸtir (yeniden baÅŸlatmanız gerekir)" msgid "Enable online database support (requires restart)" msgstr "Online veritabanı desteÄŸini aktifleÅŸtir (yeniden baÅŸlatmanız gerekir)" msgid "Error moving file into place" msgstr "Dosyayı taşırken hata oluÅŸtu" msgid "Error writing disk image" msgstr "Disk imajını yazarken hata oluÅŸtu" msgid "Expansions" msgstr "GeniÅŸlemeler" msgid "Experimental Features" msgstr "Deneysel Özellikler" msgid "Extended ROM:" msgstr "GeniÅŸletilmiÅŸ ROM:" msgid "FS-UAE Launcher Settings" msgstr "FS-UAE Çalıştırıcı Ayarları" msgid "Fast RAM" msgstr "Hızlı RAM" msgid "Fetching database entries ({0})" msgstr "Veritabanı girdileri alınıyor ({0})" msgid "Fetching game ratings ({0})" msgstr "Oyunun puanları alınıyor ({0})" msgid "Fetching user game ratings ({0})" msgstr "Oyunun kullanıcı puanları alınıyor ({0})" msgid "File already exists" msgstr "Dosya zaten mevcut" msgid "Filters" msgstr "Filtreler" msgid "Filters & Scaling" msgstr "Filtreler ve Büyütme" msgid "Filters:" msgstr "Filtreler:" msgid "Floppies" msgstr "Disketler" msgid "Floppy Drives" msgstr "Disket Sürücüler" msgid "Floppy drive volume" msgstr "Disket sürücü sesi" msgid "Full Frame" msgstr "Tam Pencere" msgid "Full-scene anti-aliasing (FSAA)" msgstr "Tam ekran anti-aliasing (FSAA)" msgid "Fullscreen" msgstr "Tam Ekran" msgid "Game Database" msgstr "Oyun Veritabanı" msgid "Game Database Settings" msgstr "Oyun Veritabanı Ayarları" msgid "Game database password" msgstr "Oyun veritabanı ÅŸifresi" msgid "Game database user name" msgstr "Oyun veritabanı kullanıcı ismi" msgid "Gamepad/Joystick Setup" msgstr "Gamepad/Joystick Ayarı" msgid "Games and Configurations" msgstr "Oyunlar ve Konfigürasyonlar" msgid "Grab mouse and keyboard input when FS-UAE starts" msgstr "FS-UAE baÅŸladığında fare ve klavye giriÅŸini kap" msgid "Grab mouse and keyboard input when clicking on FS-UAE window" msgstr "FS-UAE penceresine tıklandığında fare ve klavye giriÅŸini kap" msgid "HDF - Partitionable Hard Drive Image (RDB)" msgstr "HDF - Bölünebilir Hard Disk İmajı (RDB)" msgid "HDF - Single Partition Hard Disk File" msgstr "HDF - Tek Parça Hard Disk Dosyası" msgid "Hard Drives" msgstr "Hard Diskler" msgid "Hardware" msgstr "Donanım" msgid "Hardware Options" msgstr "Donanım Ayarları" msgid "IRC nickname" msgstr "IRC takma ismi" msgid "If you own Amiga Forever, select the drive/folder and click \"{0}\"" msgstr "" "EÄŸer Amiga Forever sahibiyseniz, sürücü/klasör seçin ve \"{0}\"ye tıklayın" msgid "Import" msgstr "Yükle" msgid "Import From Amiga Forever CD/DVD" msgstr "Amiga Forever CD/DVD'sinden Yükle" msgid "Import Kickstarts" msgstr "Kickstart Yükle" msgid "Import Kickstarts and ROMs" msgstr "Kickstart ve ROM Yükle" msgid "Import task is done" msgstr "Yükleme iÅŸlemi tamamlandı" msgid "Include built-in configurations" msgstr "Dahili konfigürasyonları ekle" msgid "Input" msgstr "GiriÅŸ" msgid "Input Options" msgstr "GiriÅŸ Seçenekleri" msgid "Input Settings" msgstr "GiriÅŸ Ayarları" msgid "Internal" msgstr "Dahili" msgid "Invalid size specified" msgstr "Geçersiz boyut seçildi" msgid "Joystick" msgstr "Joystick" msgid "Joystick Configuration" msgstr "Joystick Konfigürasyonu" msgid "Joystick Ports" msgstr "Joystick Portları" msgid "Joystick Settings" msgstr "Joystick Ayarları" msgid "Keep aspect ratio when scaling (do not stretch)" msgstr "Büyütme sırasında en boy oranını koru (kenarı uzatma)" msgid "Keyboard Settings" msgstr "Klavye Ayarları" msgid "Kickstart ROM" msgstr "Kickstart ROM'u" msgid "Kickstart ROMs are missing" msgstr "Kickstart ROM'ları eksik" msgid "Kickstart import task started" msgstr "Kickstart yükleme iÅŸlemi baÅŸladı" msgid "Launching FS-UAE" msgstr "FS-UAE BaÅŸlatılıyor" msgid "Least Accurate" msgstr "En Az İsabetli" msgid "Less Accurate" msgstr "Az İsabetli" msgid "List of Folders to Index" msgstr "İndekslenecek Klasörler Listesi" msgid "Low latency vsync (when using full vsync)" msgstr "Düşük gecikmeli vsync (tam vsync kullanırken)" msgid "MB" msgstr "MB" msgid "Main Configuration Options" msgstr "Ana Konfigürasyon Ayarları" msgid "Main Menu" msgstr "Ana Menü" msgid "Media Swap List" msgstr "Medya DeÄŸiÅŸim Listesi" msgid "Memory" msgstr "Hafıza" msgid "Mouse" msgstr "Fare" msgid "Mouse & Joystick Ports" msgstr "Fare & Joystick Portları" msgid "Mouse Settings" msgstr "Fare Ayarları" msgid "Mouse speed (%)" msgstr "Fare hızı (%)" msgid "Net Play" msgstr "Net Oyunu" msgid "Net Play Settings" msgstr "Net Oyunu Ayarları" msgid "Net play tag (max 3 characters)" msgstr "Net oyunu etiketi (max 3 karakter)" msgid "New Configuration" msgstr "Yeni Konfigürasyon" msgid "New Disk Image" msgstr "Yeni Disk İmajı" msgid "Nick:" msgstr "Takma isim:" msgid "No Device" msgstr "Cihaz Yok" msgid "No Host Device" msgstr "Sunucu Cihaz Yok" msgid "No Joysticks" msgstr "Joystick Yok" msgid "No extended kickstart found for this model. Try 'scan' function." msgstr "" "Bu model için geniÅŸletilmiÅŸ kickstart bulunamadı. 'Tara' iÅŸlevini deneyin." msgid "No joysticks are currently connected" msgstr "Åžu an bir Joystick takılı deÄŸil" msgid "No kickstart found for this model. " msgstr "Bu model için hiçbir kickstart bulunamadı" msgid "No scan in progress" msgstr "Devam eden tarama yok" msgid "Nothing" msgstr "Hiçbir ÅŸey" msgid "OK" msgstr "Tamam" msgid "Off" msgstr "Kapalı" msgid "On" msgstr "Açık" msgid "Open Game Database Entry" msgstr "Oyun Veritabanı Girdisini Aç" msgid "Open Hall of Light Entry" msgstr "Hall of Light Girdisini Aç" msgid "Open LemonAmiga Entry" msgstr "LemonAmiga Girdisini Aç" msgid "Open MobyGames Entry" msgstr "MobyGames Girdisini Aç" msgid "Open Scan Dialog" msgstr "Tarama DiyaloÄŸunu Aç" msgid "Open Tool to Configure Button Mapping" msgstr "Düğme Atamalarını Ayarlama Aracını Aç" msgid "Open Wikipedia Entry" msgstr "Wikipedia Girdisini Aç" msgid "OpenGL Settings" msgstr "OpenGL Ayarları" msgid "Override Installed Memory" msgstr "Kurulu Hafızanın Üzerine Yaz" msgid "Parallel Port Joysticks" msgstr "Paralel Port Joystickleri" msgid "Picasso96 Support" msgstr "Picasso96 DesteÄŸi" msgid "Picasso96 Support (uaegfx.card)" msgstr "Picasso96 DesteÄŸi (uaegfx.card)" msgid "Please wait..." msgstr "Lütfen bekleyin..." msgid "Preferences" msgstr "Tercihler" msgid "Preferred Joystick" msgstr "Tercih edilen Joystick" msgid "Preferred device for secondary joystick:" msgstr "İkinci joystick için tercih edilen cihaz:" msgid "Preparing WHDLoad..." msgstr "WHDLoad hazırlanıyor..." msgid "Preparing floppy images..." msgstr "Disket imajları hazırlanıyor..." msgid "Preparing hard drives..." msgstr "Hard diskler hazırlanıyor..." msgid "Preparing..." msgstr "Hazırlanıyor..." msgid "Purging old entries..." msgstr "Eski girdiler temizleniyor..." msgid "Refresh Game Database" msgstr "Oyun Veritabanını Yenile" msgid "Refresh game configurations from database" msgstr "Veritabanından oyun konfigürasyonlarını yenile" msgid "Refresh list of connected joystick devices" msgstr "Takılı joystick cihazlarının listesini yenile" msgid "Remove Directory from Search Path" msgstr "Arama Adresinden Klasörü Sil" msgid "Remove Selected Files" msgstr "Seçili Dosyaları Kaldır" msgid "Render scan lines" msgstr "Tarama çizgilerini göster" msgid "Render scan lines in RTG graphics mode" msgstr "RTG grafik modunda tarama çizgilerini göster" msgid "Resetting database..." msgstr "Veritabanı sıfırlanıyor..." msgid "Restoring changes..." msgstr "DeÄŸiÅŸiklikler geri alınıyor..." msgid "Retrying last operation (attempt {0})" msgstr "Son iÅŸlem tekrar deneniyor (deneme {0})" msgid "Save Configuration" msgstr "Konfigürasyonu Kaydet" msgid "Saving changes..." msgstr "DeÄŸiÅŸiklikler kaydediliyor..." msgid "Scaling Options" msgstr "Büyütme Seçenekleri" msgid "Scan" msgstr "Tara" msgid "Scan & Indexing" msgstr "Tarama & İndeksleme" msgid "Scan Files and Configurations" msgstr "Dosya ve Konfigürasyonları Tara" msgid "Scan complete" msgstr "Tarama tamamlandı" msgid "Scan error" msgstr "Tarama hatası" msgid "Scan for Files" msgstr "Dosyaları tara" msgid "Scan for Kickstarts, Files and Configurations" msgstr "Kickstart, Dosya ve Konfigürasyonlar İçin Tara" msgid "Scanning .fs-uae files..." msgstr ".fs-uae dosyaları taranıyor..." msgid "Scanning built-in entries..." msgstr "Dahili girdiler taranıyor..." msgid "Scanning configurations" msgstr "Konfigürasyonlar taranıyor" msgid "Scanning configurations ({count} scanned)" msgstr "Konfigürasyonlar taranıyor ({count} tarandı)" msgid "Scanning database entries..." msgstr "Veritabanı girdileri taranıyor..." msgid "Scanning files" msgstr "Dosyalar taranıyor" msgid "Scanning files ({count} scanned)" msgstr "Dosyalar taranıyor ({count} tarandı)" msgid "Scanning game database entries..." msgstr "Oyun veritabanı girdileri taranıyor..." msgid "Select Destination Directory" msgstr "Hedef Klasörü Seçin" msgid "Select Multiple CD-ROMs" msgstr "Birden Çok CD-ROM Seçin" msgid "Select Multiple Files..." msgstr "Birden Çok Dosya Seçin..." msgid "Select Multiple Floppies" msgstr "Birden Çok Disket Seçin" msgid "Select Source Directory" msgstr "Kaynak Klasörü Seçin" msgid "Select a folder containing Amiga kickstart files and click \"{0}\"" msgstr "" "İçinde Amiga kickstart dosyalarının bulunduÄŸu klasörü seçin ve \"{0}\"'e " "tıklayın" msgid "Settings" msgstr "Ayarlar" msgid "Show kickstart setup page on startup when all ROMs are missing" msgstr "Tüm ROM'lar eksikse baÅŸlangıçta kickstart ayar sayfasını göster" msgid "Size:" msgstr "Boyut:" msgid "Slow RAM" msgstr "YavaÅŸ RAM" msgid "Specified directory does not exist" msgstr "Belirtilen klasör mevcut deÄŸil" msgid "Start" msgstr "BaÅŸlat" msgid "Start FS-UAE in fullscreen mode" msgstr "FS-UAE'yi tam ekran modunda baÅŸlat" msgid "Starting FS-UAE..." msgstr "FS-UAE baÅŸlatılıyor..." msgid "Starting scan" msgstr "Tarama baÅŸlatılıyor" msgid "Swap left and right CTRL keys" msgstr "Sol ve saÄŸ CTRL tuÅŸlarının yerini deÄŸiÅŸtir" msgid "Synchronizing database..." msgstr "Veritabanı senkronlanıyor..." msgid "Synchronizing personal ratings..." msgstr "KiÅŸisel puanlar senkronlanıyor..." msgid "Texture filter" msgstr "Doku filtresi" msgid "Toggle Between Windowed and Full-Screen Mode" msgstr "Pencere ve Tam-Ekran Modu Arasında GeçiÅŸ Yap" msgid "Tools" msgstr "Araçlar" msgid "Ungrab mouse and keyboard on middle mouse click" msgstr "Orta fare düğmesine tıklandığında fare ve klavyeyi serbest bırak" msgid "Update available ({version})" msgstr "Güncelleme mevcut ({version})" msgid "Updating database" msgstr "Veritabanı güncelleniyor" msgid "Updating game entries:" msgstr "Oyun girdileri güncelleniyor:" msgid "Use RDB disk images for size >= {0}" msgstr ">= {0} boyutu için RDB disk imajları kullan" msgid "Video Settings" msgstr "Video Ayarları" msgid "Video buffer format and color depth" msgstr "Video arabellek formatı ve renk derinliÄŸi" msgid "Video synchronization" msgstr "Video senkronizasyonu" msgid "Video synchronization method" msgstr "Video senkronizasyon formatı" msgid "Video texture format (on the GPU)" msgstr "Video doku formatı (GPU üzerinde)" msgid "WHDLoad Arguments" msgstr "WHDLoad Argümanları" msgid "You should have kickstart files for each Amiga model you want to use:" msgstr "" "Kullanmak istediÄŸiniz her Amiga modeli için kickstart dosyasına sahip " "olmalısınız:" msgid "Zoom Amiga display (crop)" msgstr "Amiga görüntüsüne zum yap (kenarlardan kes)" msgid "Zorro III RAM" msgstr "Zorro III RAM" msgid "{amiga_model} with < 2 MB chip memory" msgstr "< 2 MB çip belleÄŸe sahip {amiga_model} " #~ msgid "Force Full Vsync" #~ msgstr "Tam VSync Kullan" #~ msgid "Sync to Vblank" #~ msgstr "VBlank'a senkronla" fs-uae-2.2.3+dfsg/launcher/po/cs.po0000644000175000017500000004246112162366654017247 0ustar glaubitzglaubitz# Czech translations for fs-uae-launcher package. # Copyright (C) 2013 Frode Solheim # This file is distributed under the same license as the fs-uae-launcher package. # Frode Solheim , 2013. # z551693 , 2013. msgid "" msgstr "" "Project-Id-Version: fs-uae-launcher\n" "Report-Msgid-Bugs-To: fs-uae@fengestad.no\n" "POT-Creation-Date: 2013-06-25 21:21+0200\n" "PO-Revision-Date: 2013-03-11 08:30+0200\n" "Last-Translator: z551693 \n" "Language-Team: FS-UAE translation team\n" "Language: cs\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" "X-Generator: Virtaal 0.7.1\n" msgid "16-bit" msgstr "16-bitové" msgid "32-bit BGRA" msgstr "32-bitové BGRA" msgid "32-bit RGBA" msgstr "32-bitové RGBA" msgid "640x400 + Border" msgstr "640x400 + okraje" msgid "640x480 + Border" msgstr "640x480 + okraje" msgid "640x512 + Border" msgstr "640x512 + okraje" msgid "ADF & HDF Creator" msgstr "ADF & HDF vytváření" msgid "ADF - Extended Floppy Disk Image (MFM)" msgstr "ADF - Rozšířený obraz diskety (MFM)" msgid "ADF - Standard Floppy Disk Image" msgstr "ADF - Standardní obraz diskety" msgid "Abort" msgstr "ZruÅ¡it" msgid "About {name}" msgstr "O {name}" msgid "Accurate" msgstr "PÅ™esnost" msgid "Add Directory to Search Path" msgstr "PÅ™idat adresář do cesty hledání" msgid "Add Files to List" msgstr "PÅ™idat soubory do seznamu" msgid "Add Multiple CD-ROMs at Once" msgstr "PÅ™idat více CD-ROM najednou" msgid "Add Multiple Floppies at Once" msgstr "PÅ™idat více disket najednou" msgid "Additional Options" msgstr "DodateÄná nastavení" msgid "Amiga Forever Import" msgstr "Importovat Amiga Forever" msgid "Amiga Forever import task started" msgstr "Amiga Forever požadavek importu spuÅ¡tÄ›n" msgid "Amiga Model" msgstr "Amiga model" msgid "Audio Settings" msgstr "Nastavení zvuku" msgid "Auto" msgstr "Automaticky" msgid "Auto + Border" msgstr "Automaticky + okraje" msgid "Auto-Fire is Off" msgstr "Auto-fire je vypnut" msgid "Auto-Fire is On" msgstr "Auto-fire je zapnut" msgid "Available Kickstart Versions" msgstr "K dispozici jsou verze Kickstart" msgid "Browse" msgstr "Procházet" msgid "Browse for File" msgstr "Procházet soubor" msgid "Browse for Folder" msgstr "Procházet složku" msgid "Buffer swap only" msgstr "" msgid "Built-in TCP/IP Stack" msgstr "VestavÄ›ný TCP/IP stack" msgid "Built-in TCP/IP Stack (bsdsocket.library)" msgstr "VestavÄ›ný TCP/IP Stack (bsdsocket.library)" msgid "CD-ROM Drive" msgstr "Mechanika CD-ROM" msgid "CD-ROM Drives" msgstr "Mechaniky CD-ROM" msgid "CD-ROMs" msgstr "CD-ROM disky" msgid "CD32 Pad" msgstr "CD32 Pad" msgid "Cancel" msgstr "ZruÅ¡it" msgid "Chip RAM" msgstr "Chip RAM" msgid "Choose CD-ROM Image" msgstr "Zvolit soubor obrazu CD-ROM" msgid "Choose Extended ROM" msgstr "Zvolit rozšířenou ROM" msgid "Choose Floppy Image" msgstr "Zvolit soubor obrazu diskety" msgid "Choose Hard Drive" msgstr "Zvolit Harddisk" msgid "Choose Kickstart ROM" msgstr "Zvolit Kickstart ROM" msgid "Cleaning up..." msgstr "Probíhá ÄiÅ¡tÄ›ní..." msgid "Clear List" msgstr "VyÄistit seznam" msgid "Click 'Scan' button if you want to re-scan" msgstr "KliknÄ›te na 'Prohledat' tlaÄítko, pro znovuhledání " msgid "Click 'Scan' button to start scan" msgstr "KliknÄ›te na 'Prohledat' tlaÄítko na zahájení hledání" msgid "Click here to download" msgstr "KliknÄ›te zde na stažení" msgid "Click here to import kickstarts" msgstr "KliknÄ›te zde na import kickstart souborů" msgid "Close" msgstr "Zavřít" msgid "Committing data..." msgstr "Zasílám data..." msgid "Config" msgstr "Konfigurace" msgid "Configuration" msgstr "Nastavení" msgid "Configuration Browser" msgstr "ProhlížeÄ nastavení" msgid "Configuration Warning" msgstr "" msgid "Configurations" msgstr "Více nastavení" msgid "Configure Joystick Buttons" msgstr "Nastavení Joystick tlaÄítek" msgid "Connect" msgstr "PÅ™ipojit" msgid "" "Copy {0}\n" "to {1}" msgstr "" "Zkopírovat {0}\n" "do {1}" msgid "Could not open file for writing" msgstr "Nelze otevřít soubor pro zápis" msgid "Create" msgstr "VytvoÅ™it" msgid "Cursor Keys and Right Ctrl/Alt" msgstr "Klávesové Å¡ipky a Pravý CTRL/ALT" msgid "Custom" msgstr "Vlastní" msgid "Custom Configuration" msgstr "Vlastní konfigurace" msgid "Custom IRC server address" msgstr "Vlastní IRC server adresa" msgid "Custom Joystick Port" msgstr "Vlastní port joysticku" msgid "Custom Options" msgstr "Vlastní možnosti" msgid "Custom Settings" msgstr "Vlastní nastavení" msgid "Default" msgstr "Výchozí" msgid "Default ({0})" msgstr "Výchozí ({0})" msgid "Destination Directory:" msgstr "Cílový adresář:" msgid "Disconnect" msgstr "Odpojit" msgid "Disk Image Name:" msgstr "Jméno obrazu disku:" msgid "Disk image created" msgstr "Obraz disku vytvoÅ™en" msgid "Download failed (attempt {0}) - retrying in {0} seconds" msgstr "Stahování selhalo (pokus {0}) - opakuji za {0} sekund" msgid "Downloading {0}..." msgstr "Stahuje se {0}..." msgid "Edit Custom Options" msgstr "Upravit vlastní možnosti" msgid "Eject" msgstr "Vysunout" msgid "Enable experimental net play GUI (requires restart)" msgstr "Povolit experimentální grafické rozhraní síťové hry (vyžaduje restart)" msgid "Enable online database support (requires restart)" msgstr "Povolit podporu online databáze (vyžaduje restart)" msgid "Error moving file into place" msgstr "Chyba pÅ™i pÅ™emístÄ›ní souboru do místa" msgid "Error writing disk image" msgstr "Chybu pÅ™i zápisu do obrazu disku" msgid "Expansions" msgstr "Rozšíření" msgid "Experimental Features" msgstr "Experimentální funkce" msgid "Extended ROM:" msgstr "Extended ROM:" msgid "FS-UAE Launcher Settings" msgstr "FS-UAE nastavení spouÅ¡tÄ›ní" msgid "Fast RAM" msgstr "Fast RAM" msgid "Fetching database entries ({0})" msgstr "NaÄítám záznamy v databázi ({0})" msgid "Fetching game ratings ({0})" msgstr "NaÄítám hodnocení hry ({0})" msgid "Fetching user game ratings ({0})" msgstr "NaÄítám uživ. hodnocení hry ({0})" msgid "File already exists" msgstr "Soubor již existuje" msgid "Filters" msgstr "Filtry" msgid "Filters & Scaling" msgstr "Filtry & Å kálování" msgid "Filters:" msgstr "Filtry:" msgid "Floppies" msgstr "Diskety" msgid "Floppy Drives" msgstr "Disketové mechaniky" msgid "Floppy drive volume" msgstr "Svazek disketové mechaniky" msgid "Full Frame" msgstr "PÅ™esné snímkování" msgid "Full-scene anti-aliasing (FSAA)" msgstr "Celoobrazové vyhlazení (FSAA)" msgid "Fullscreen" msgstr "Celá obrazovka" msgid "Game Database" msgstr "Databáze her" msgid "Game Database Settings" msgstr "Nastavení herní databáze" msgid "Game database password" msgstr "Heslo herní databáze" msgid "Game database user name" msgstr "Jméno herní databáze" msgid "Gamepad/Joystick Setup" msgstr "Gamepad/Joystick nastavení" msgid "Games and Configurations" msgstr "Hry a nastavení" msgid "Grab mouse and keyboard input when FS-UAE starts" msgstr "UchyÅ¥ vstup myÅ¡i a klávesnice pÅ™i startu FS-UAE" msgid "Grab mouse and keyboard input when clicking on FS-UAE window" msgstr "UchyÅ¥ vstup myÅ¡i a klávesnice pÅ™i kliknutí na okno FS-UAE" msgid "HDF - Partitionable Hard Drive Image (RDB)" msgstr "HDF - RozdÄ›litelný oddíl harddisku (RDB)" msgid "HDF - Single Partition Hard Disk File" msgstr "HDF - Jednotlivý oddíl harddisku" msgid "Hard Drives" msgstr "Pevné disky" msgid "Hardware" msgstr "Hardware" msgid "Hardware Options" msgstr "Možnosti hardware" msgid "IRC nickname" msgstr "PÅ™ezdívka na IRC" msgid "If you own Amiga Forever, select the drive/folder and click \"{0}\"" msgstr "Jestli vlastníte Amiga Forever, zvolte disk/adresář a kliknÄ›te \"{0}\"" msgid "Import" msgstr "Importovat" msgid "Import From Amiga Forever CD/DVD" msgstr "Importovat z Amiga Forever CD/DVD" msgid "Import Kickstarts" msgstr "Importovat více Kickstart verzí" msgid "Import Kickstarts and ROMs" msgstr "Importovat Kickstart a ROM soubory" msgid "Import task is done" msgstr "Import je dokonÄen" msgid "Include built-in configurations" msgstr "Zahrnout vestavÄ›ná nastavení" msgid "Input" msgstr "Vstupní zařízení" msgid "Input Options" msgstr "Nastavení vstupu" msgid "Input Settings" msgstr "Možnosti vstupu" msgid "Internal" msgstr "VnitÅ™ní" msgid "Invalid size specified" msgstr "Specifikována Å¡patná velikost" msgid "Joystick" msgstr "Joystick" msgid "Joystick Configuration" msgstr "Joystick konfigurace" msgid "Joystick Ports" msgstr "Joystick porty" msgid "Joystick Settings" msgstr "Joystick nastavení" msgid "Keep aspect ratio when scaling (do not stretch)" msgstr "Drž pomÄ›r stran pÅ™i Å¡kálování (neroztahovat)" msgid "Keyboard Settings" msgstr "Nastavení klávesnice" msgid "Kickstart ROM" msgstr "Kickstart ROM" msgid "Kickstart ROMs are missing" msgstr "Chybí Kickstart ROM soubory " msgid "Kickstart import task started" msgstr "Zadání importu kickstart spuÅ¡tÄ›no" msgid "Launching FS-UAE" msgstr "SpouÅ¡tím FS-UAE" msgid "Least Accurate" msgstr "Nejmenší pÅ™esnost" msgid "Less Accurate" msgstr "Menší pÅ™esnost" msgid "List of Folders to Index" msgstr "Seznam složek k indexaci" msgid "Low latency vsync (when using full vsync)" msgstr "Nízká latence vsync (pÅ™i použití plné vsync)" msgid "MB" msgstr "MB" msgid "Main Configuration Options" msgstr "Hlavní volby konfigurace" msgid "Main Menu" msgstr "Hlavní nabídka" msgid "Media Swap List" msgstr "Prohození poÅ™adí média v seznamu" msgid "Memory" msgstr "Paměť" msgid "Mouse" msgstr "MyÅ¡" msgid "Mouse & Joystick Ports" msgstr "Porty myÅ¡i & joysticků" msgid "Mouse Settings" msgstr "Nastavení myÅ¡i" msgid "Mouse speed (%)" msgstr "Rychlost myÅ¡i (%)" msgid "Net Play" msgstr "Síťová hra" msgid "Net Play Settings" msgstr "Nastavení síťové hry" msgid "Net play tag (max 3 characters)" msgstr "OznaÄení síťové hry (max. tÅ™i znaky)" msgid "New Configuration" msgstr "Nová konfigurace" msgid "New Disk Image" msgstr "Nový obraz disku" msgid "Nick:" msgstr "PÅ™ezdívka:" msgid "No Device" msgstr "Žádné zařízení" msgid "No Host Device" msgstr "Žádné hostitelské zařízení" msgid "No Joysticks" msgstr "Žádný joystick" msgid "No extended kickstart found for this model. Try 'scan' function." msgstr "Nenalezen rozšířený kickstart pro tento model. Zkus funkci 'skenovat'" msgid "No joysticks are currently connected" msgstr "Žádné joysticky nejsou momentálnÄ› pÅ™ipojeny" msgid "No kickstart found for this model. " msgstr "Kickstart nenalezen pro tento model." msgid "No scan in progress" msgstr "Žádné skenování neprobíhá" msgid "Nothing" msgstr "Nic" msgid "OK" msgstr "OK" msgid "Off" msgstr "Vypnuto" msgid "On" msgstr "Zapnuto" msgid "Open Game Database Entry" msgstr "Otevřít záznam v herní databázi" msgid "Open Hall of Light Entry" msgstr "Otevřít záznam Hall of Light" msgid "Open LemonAmiga Entry" msgstr "Otevřít záznam LemonAmiga" msgid "Open MobyGames Entry" msgstr "Otevřít záznam MobyGames" msgid "Open Scan Dialog" msgstr "Otevřít dialog skenování" msgid "Open Tool to Configure Button Mapping" msgstr "Otevřít nástroj na konfiguraci mapování tlaÄítek" msgid "Open Wikipedia Entry" msgstr "Otevřít záznam Wikipedia" msgid "OpenGL Settings" msgstr "OpenGL nastavení" msgid "Override Installed Memory" msgstr "Nastavit instalovanou paměť na:" msgid "Parallel Port Joysticks" msgstr "Paralelní porty Joysticků" msgid "Picasso96 Support" msgstr "Podpora Picasso96" msgid "Picasso96 Support (uaegfx.card)" msgstr "Podpora Picasso96 (uaegfx.card)" msgid "Please wait..." msgstr "ÄŒekejte prosím…" msgid "Preferences" msgstr "Možnosti" msgid "Preferred Joystick" msgstr "Preferovaný joystick" msgid "Preferred device for secondary joystick:" msgstr "Preferované zařízení pro sekundární joystick:" msgid "Preparing WHDLoad..." msgstr "Příprava WHDLoad..." msgid "Preparing floppy images..." msgstr "Příprava floppy obrazů disket" msgid "Preparing hard drives..." msgstr "Příprava pevných disků..." msgid "Preparing..." msgstr "PÅ™ipravuje se…" msgid "Purging old entries..." msgstr "ÄŒistím staré záznamy..." msgid "Refresh Game Database" msgstr "Obnovit databázi her" msgid "Refresh game configurations from database" msgstr "Obnovit konfigurace her z databáze" msgid "Refresh list of connected joystick devices" msgstr "Obnovit seznam pÅ™ipojených joystick zařízení" msgid "Remove Directory from Search Path" msgstr "Odstranit adresář z cesty hledání" msgid "Remove Selected Files" msgstr "Odstranit vybrané soubory" msgid "Render scan lines" msgstr "Vykresli řádkování" msgid "Render scan lines in RTG graphics mode" msgstr "Vykresli řádkování v RTG grafickém módu" msgid "Resetting database..." msgstr "Resetování databáze..." msgid "Restoring changes..." msgstr "Obnovování zmÄ›n..." msgid "Retrying last operation (attempt {0})" msgstr "Opakuji poslední operaci (pokus {0})" msgid "Save Configuration" msgstr "Uložení konfigurace" msgid "Saving changes..." msgstr "Ukládání zmÄ›n..." msgid "Scaling Options" msgstr "Nastavení Å¡kálování" msgid "Scan" msgstr "Prohledat" msgid "Scan & Indexing" msgstr "Prohledat & Indexace" msgid "Scan Files and Configurations" msgstr "Prohledávám soubory a konfigurace" msgid "Scan complete" msgstr "Hledání dokonÄeno" msgid "Scan error" msgstr "Chyba pÅ™i skenování" msgid "Scan for Files" msgstr "Hledat soubory" msgid "Scan for Kickstarts, Files and Configurations" msgstr "Hledání Kickstart, souborů a konfigurací" msgid "Scanning .fs-uae files..." msgstr "Prohledávám .fs-uae soubory..." msgid "Scanning built-in entries..." msgstr "Prohledávám vestavÄ›né záznamy..." msgid "Scanning configurations" msgstr "Prohledávám konfigurace" msgid "Scanning configurations ({count} scanned)" msgstr "Prohledávám konfigurace ({count} prohledáno)" msgid "Scanning database entries..." msgstr "Prohledávám záznamy v databázi" msgid "Scanning files" msgstr "Prohledávám soubory" msgid "Scanning files ({count} scanned)" msgstr "Prohledávám soubory ({count} prohledáno)" msgid "Scanning game database entries..." msgstr "Prohledávám záznamy v herní databázi" msgid "Select Destination Directory" msgstr "Vybrat cílový adresář" msgid "Select Multiple CD-ROMs" msgstr "Vybrat nÄ›kolik CD-ROM mechanik" msgid "Select Multiple Files..." msgstr "Vybrat nÄ›kolik souborů..." msgid "Select Multiple Floppies" msgstr "Vybrat nÄ›kolik disket" msgid "Select Source Directory" msgstr "Vybrat zdrojový adresář" msgid "Select a folder containing Amiga kickstart files and click \"{0}\"" msgstr "Vyber adresář, obsahující Amiga kickstart soubory a klikni na \"{0}\"" msgid "Settings" msgstr "Nastavení" msgid "Show kickstart setup page on startup when all ROMs are missing" msgstr "" "Ukaž stránku nastavení pro kickstart, pokud vÅ¡echny ROM soubory chybÄ›jí" msgid "Size:" msgstr "Velikost:" msgid "Slow RAM" msgstr "Slow RAM" msgid "Specified directory does not exist" msgstr "Zadaný adresář neexistuje" msgid "Start" msgstr "Spustit" msgid "Start FS-UAE in fullscreen mode" msgstr "SpouÅ¡tÄ›ní her v režimu celé obrazovky" msgid "Starting FS-UAE..." msgstr "SpouÅ¡tím FS-UAE..." msgid "Starting scan" msgstr "SpouÅ¡tím skenování" msgid "Swap left and right CTRL keys" msgstr "Prohodit levou a pravou klávesu CTRL" msgid "Synchronizing database..." msgstr "Synchronizuji databázi..." msgid "Synchronizing personal ratings..." msgstr "Synchronizuji osobní nastavení..." msgid "Texture filter" msgstr "Filtr textury" msgid "Toggle Between Windowed and Full-Screen Mode" msgstr "PÅ™epnout mód plná obrazovka/v oknÄ›" msgid "Tools" msgstr "Nástroje" msgid "Ungrab mouse and keyboard on middle mouse click" msgstr "Vypni/zapni myÅ¡ a klávesnici po kliknutí prostÅ™edním tlaÄítkem myÅ¡i" msgid "Update available ({version})" msgstr "Aktualizace k dispozici ({version})" msgid "Updating database" msgstr "Aktualizuji databázi" msgid "Updating game entries:" msgstr "Aktualizuji záznamy her:" msgid "Use RDB disk images for size >= {0}" msgstr "Použít RDB obrazy disků pro velikost >= {0}" msgid "Video Settings" msgstr "Nastavení videa" msgid "Video buffer format and color depth" msgstr "Typ video bufferu a hloubka barev" msgid "Video synchronization" msgstr "Synchronizace videa" msgid "Video synchronization method" msgstr "Metoda synchronizace videa" msgid "Video texture format (on the GPU)" msgstr "Formát video textury (na GPU)" msgid "WHDLoad Arguments" msgstr "WHDLoad parametry" msgid "You should have kickstart files for each Amiga model you want to use:" msgstr "MÄ›l bys mít soubory kickstart, pro každý model Amiga, který použijeÅ¡:" msgid "Zoom Amiga display (crop)" msgstr "PÅ™iblížit Amiga displej (ostÅ™ihnout)" msgid "Zorro III RAM" msgstr "Zorro III RAM" msgid "{amiga_model} with < 2 MB chip memory" msgstr "" #~ msgid "Force Full Vsync" #~ msgstr "Vnutit plnou vertikální synchronizaci" #~ msgid "Kickstart Setup" #~ msgstr "Kickstart nastavení" #~ msgid "Select Directory to Import From" #~ msgstr "Vybrat adresář, odkud provést Import" #~ msgid "Sync to Vblank" #~ msgstr "Synchronizace Vblank (vertikální)" #~ msgid "Update ({version}) is available" #~ msgstr "Update ({version}) je k dispozici" fs-uae-2.2.3+dfsg/launcher/po/es.po0000644000175000017500000004220712162366654017247 0ustar glaubitzglaubitz# Spanish translations for fs-uae-launcher package. # Copyright (C) 2012 Frode Solheim # This file is distributed under the same license as the fs-uae-launcher package. # Frode Solheim , 2012. # msgid "" msgstr "" "Project-Id-Version: fs-uae-launcher\n" "Report-Msgid-Bugs-To: fs-uae@fengestad.no\n" "POT-Creation-Date: 2013-06-25 21:21+0200\n" "PO-Revision-Date: 2013-03-10 22:22+0100\n" "Last-Translator: \n" "Language-Team: Spanish\n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 1.5.4\n" msgid "16-bit" msgstr "16-bit" msgid "32-bit BGRA" msgstr "32-bit BGRA" msgid "32-bit RGBA" msgstr "32-bit RGBA" msgid "640x400 + Border" msgstr "640x400 + Borde" msgid "640x480 + Border" msgstr "640x480 + Borde" msgid "640x512 + Border" msgstr "640x512 + Borde" msgid "ADF & HDF Creator" msgstr "Crear ADF y HDF" msgid "ADF - Extended Floppy Disk Image (MFM)" msgstr "ADF - Imagen de diskette Expandida (MFM)" msgid "ADF - Standard Floppy Disk Image" msgstr "ADF - Imagen diskette estandar" msgid "Abort" msgstr "Interrumpir" msgid "About {name}" msgstr "Acerca de {name}" msgid "Accurate" msgstr "Exacto" msgid "Add Directory to Search Path" msgstr "Añadir directorio a la ruta de busqueda" msgid "Add Files to List" msgstr "Añadir Archivos a la Lista" msgid "Add Multiple CD-ROMs at Once" msgstr "Añadir Varios CD-ROMs de Una vez" msgid "Add Multiple Floppies at Once" msgstr "Añadir Varios Disquetes de Una vez" msgid "Additional Options" msgstr "Opciones Adicionales" msgid "Amiga Forever Import" msgstr "Importar Amiga Forever" msgid "Amiga Forever import task started" msgstr "Tarea Importar Amiga Forever comenzada" msgid "Amiga Model" msgstr "Modelo Amiga" msgid "Audio Settings" msgstr "Opciones de Sonido" msgid "Auto" msgstr "Auto" msgid "Auto + Border" msgstr "Auto + Borde" msgid "Auto-Fire is Off" msgstr "Auto-disparo no activo" msgid "Auto-Fire is On" msgstr "Auto-disparo activo" msgid "Available Kickstart Versions" msgstr "Versiones Kickstart Disponibles" msgid "Browse" msgstr "Navegar" msgid "Browse for File" msgstr "Navegar a un Archivo" msgid "Browse for Folder" msgstr "Navegar a una Carpeta" msgid "Buffer swap only" msgstr "" msgid "Built-in TCP/IP Stack" msgstr "Pila TCP/IP Integrada" msgid "Built-in TCP/IP Stack (bsdsocket.library)" msgstr "Pila TCP/IP Integrada (bsdsocket.library)" msgid "CD-ROM Drive" msgstr "Lector CD-rom" msgid "CD-ROM Drives" msgstr "Lectores CD-ROM" msgid "CD-ROMs" msgstr "CD-ROMs" msgid "CD32 Pad" msgstr "CD32 Joypad" msgid "Cancel" msgstr "Cancelar" msgid "Chip RAM" msgstr "Chip RAM" msgid "Choose CD-ROM Image" msgstr "Seleccionar Imagen CD-ROM" msgid "Choose Extended ROM" msgstr "Seleccionar ROM Extendida" msgid "Choose Floppy Image" msgstr "Seleccionar Imagen disquete" msgid "Choose Hard Drive" msgstr "Seleccionar Disco Duro" msgid "Choose Kickstart ROM" msgstr "Seleccionar Kickstart ROM" msgid "Cleaning up..." msgstr "Limpiando..." msgid "Clear List" msgstr "Limpiar Lista" msgid "Click 'Scan' button if you want to re-scan" msgstr "Pulsa el botón 'Escanear' si quieres Re-escanear" msgid "Click 'Scan' button to start scan" msgstr "Pulsa el botón 'Escanear' para empezar escáner" msgid "Click here to download" msgstr "Pulsa aquí para Descargar" msgid "Click here to import kickstarts" msgstr "Pulsa aquí para importar kickstarts" msgid "Close" msgstr "Cerrar" msgid "Committing data..." msgstr "Enviando datos..." msgid "Config" msgstr "Configuración" msgid "Configuration" msgstr "Configuración" msgid "Configuration Browser" msgstr "Configuración Navegador" msgid "Configuration Warning" msgstr "" msgid "Configurations" msgstr "Configuraciones" msgid "Configure Joystick Buttons" msgstr "Configurar Botones Joystick" msgid "Connect" msgstr "Conectado" msgid "" "Copy {0}\n" "to {1}" msgstr "" "Copiar {0}\n" "en {1}" msgid "Could not open file for writing" msgstr "No se puede abrir el fichero para escritura" msgid "Create" msgstr "Crear" msgid "Cursor Keys and Right Ctrl/Alt" msgstr "Teclas Cursor y Ctlr/Alt Derecho" msgid "Custom" msgstr "Personalizado" msgid "Custom Configuration" msgstr "Configuración Personalizada" msgid "Custom IRC server address" msgstr "Dirección servidor IRC Personalizado" msgid "Custom Joystick Port" msgstr "Puerto Joystick personalizado" msgid "Custom Options" msgstr "Opciones Personalizadas" msgid "Custom Settings" msgstr "Ajustes Personalizados" msgid "Default" msgstr "Por Defecto" msgid "Default ({0})" msgstr "Por Defecto ({0})" msgid "Destination Directory:" msgstr "Directorio destino:" msgid "Disconnect" msgstr "Desconectado" msgid "Disk Image Name:" msgstr "Nombre imagen disco:" msgid "Disk image created" msgstr "Imagen disco creada" msgid "Download failed (attempt {0}) - retrying in {0} seconds" msgstr "Descarga fallida (intento {0}) - reintento en {0} segundos" msgid "Downloading {0}..." msgstr "Descargando {0}..." msgid "Edit Custom Options" msgstr "Editar Opciones Personalizadas" msgid "Eject" msgstr "Expulsar" msgid "Enable experimental net play GUI (requires restart)" msgstr "Activar GUI experimental de juego en red (requiere reiniciar)" msgid "Enable online database support (requires restart)" msgstr "Activar soporte Base de datos online (requiere reinicio)" msgid "Error moving file into place" msgstr "Error moviendo fichero " msgid "Error writing disk image" msgstr "Error escribiendo imagen disco" msgid "Expansions" msgstr "Expansiones" msgid "Experimental Features" msgstr "Características Experimentales" msgid "Extended ROM:" msgstr "ROM Extendida:" msgid "FS-UAE Launcher Settings" msgstr "Ajustes FS-UAE Launcher" msgid "Fast RAM" msgstr "Fast RAM" msgid "Fetching database entries ({0})" msgstr "Obteniendo entrada base de datos ({0})" msgid "Fetching game ratings ({0})" msgstr "Buscando Clasificación juego ({0})" msgid "Fetching user game ratings ({0})" msgstr "Buscando Clasificación usuario juego ({0})" msgid "File already exists" msgstr "Fichero ya existe" msgid "Filters" msgstr "Filtros" msgid "Filters & Scaling" msgstr "Filtros y Escalado" msgid "Filters:" msgstr "Filtros:" msgid "Floppies" msgstr "Disquetes" msgid "Floppy Drives" msgstr "Disqueteras" msgid "Floppy drive volume" msgstr "Volumen Disquetera" msgid "Full Frame" msgstr "Frame Completos" msgid "Full-scene anti-aliasing (FSAA)" msgstr "Anti-aliasing escena completa (FSAA)" msgid "Fullscreen" msgstr "Pantalla Completa" msgid "Game Database" msgstr "Base de datos Juegos" msgid "Game Database Settings" msgstr "Ajustes Base de datos Juegos " msgid "Game database password" msgstr "Contraseña base de datos Juegos" msgid "Game database user name" msgstr "Usuario base de datos Juegos" msgid "Gamepad/Joystick Setup" msgstr "Gamepad/Joystick Configuración" msgid "Games and Configurations" msgstr "Juegos y Configuraciones" msgid "Grab mouse and keyboard input when FS-UAE starts" msgstr "Capturar la entrada de teclado y ratón cuando FS-UAE arranque" msgid "Grab mouse and keyboard input when clicking on FS-UAE window" msgstr "Capturar la entrada de teclado y ratón al pulsar en la ventana FS-UAE" msgid "HDF - Partitionable Hard Drive Image (RDB)" msgstr "HDF - Fichero Disco duro Particionable (RDB)" msgid "HDF - Single Partition Hard Disk File" msgstr "HDF - Fichero Disco duro Partición Única" msgid "Hard Drives" msgstr "Discos Duros" msgid "Hardware" msgstr "Hardware" msgid "Hardware Options" msgstr "Opciones Hardware" msgid "IRC nickname" msgstr "Apodo IRC " msgid "If you own Amiga Forever, select the drive/folder and click \"{0}\"" msgstr "Si posees Amiga Forever, selecciona el disco/carpeta y pulsa \"{0}\"" msgid "Import" msgstr "Importar" msgid "Import From Amiga Forever CD/DVD" msgstr "Importar Desde Amiga Forever CD/DVD" msgid "Import Kickstarts" msgstr "Importar Kickstarts" msgid "Import Kickstarts and ROMs" msgstr "Importar Kickstarts y ROMs" msgid "Import task is done" msgstr "Tarea Importación Terminada" msgid "Include built-in configurations" msgstr "Incluir configuraciones Integradas" msgid "Input" msgstr "Entrada" msgid "Input Options" msgstr "Opciones Entrada" msgid "Input Settings" msgstr "Ajustes Entrada" msgid "Internal" msgstr "Interno" msgid "Invalid size specified" msgstr "Tamaño inválido especificado" msgid "Joystick" msgstr "Joystick" msgid "Joystick Configuration" msgstr "Configuración Joystick" msgid "Joystick Ports" msgstr "Puerto Joystick" msgid "Joystick Settings" msgstr "Ajustes Joystick" msgid "Keep aspect ratio when scaling (do not stretch)" msgstr "Manterner el ratio de aspectos cuando escale (no estirar)" msgid "Keyboard Settings" msgstr "Ajustes Teclado" msgid "Kickstart ROM" msgstr "Kickstart ROM" msgid "Kickstart ROMs are missing" msgstr "Kickstart ROM no encontradas" msgid "Kickstart import task started" msgstr "Tarea importación Kickstart comenzada" msgid "Launching FS-UAE" msgstr "Comenzando FS-UAE" msgid "Least Accurate" msgstr "El Menos Exacto" msgid "Less Accurate" msgstr "Menos Exacto" msgid "List of Folders to Index" msgstr "Listado de Carpetas a Indexar" msgid "Low latency vsync (when using full vsync)" msgstr "Vsync baja latencia (cuando usas vsync completa)" msgid "MB" msgstr "MB" msgid "Main Configuration Options" msgstr "Opciones Configuración Principal" msgid "Main Menu" msgstr "Menú Principal" msgid "Media Swap List" msgstr "Lista Intercambio Medios" msgid "Memory" msgstr "Memoria" msgid "Mouse" msgstr "Ratón" msgid "Mouse & Joystick Ports" msgstr "Puertos Ratón y Joystick" msgid "Mouse Settings" msgstr "Ajustes Ratón" msgid "Mouse speed (%)" msgstr "Velocidad Ratón (%)" msgid "Net Play" msgstr "Juego en Red" msgid "Net Play Settings" msgstr "Ajustes Juego en Red" msgid "Net play tag (max 3 characters)" msgstr "Tag Juego en Red (max 3 Caracteres)" msgid "New Configuration" msgstr "Nueva configuración" msgid "New Disk Image" msgstr "Nueva Imagen Disco" msgid "Nick:" msgstr "Apodo:" msgid "No Device" msgstr "Ningún Dispositivo" msgid "No Host Device" msgstr "Ningún Dispositivo Host" msgid "No Joysticks" msgstr "Ningún Joysticks" msgid "No extended kickstart found for this model. Try 'scan' function." msgstr "" "Kickstart extendida no encontrada de este modelo. Prueba función 'escanear'." msgid "No joysticks are currently connected" msgstr "Ningún Joysticks esta actualmente conectado" msgid "No kickstart found for this model. " msgstr "Ninguna Kickstart encontrada para este modelo" msgid "No scan in progress" msgstr "Ningún escáner en curso" msgid "Nothing" msgstr "Nada" msgid "OK" msgstr "OK" msgid "Off" msgstr "Desactivado" msgid "On" msgstr "Activado" msgid "Open Game Database Entry" msgstr "Abrir entrada Base de datos Juegos" msgid "Open Hall of Light Entry" msgstr "Abrir Entrada Hall of Light" msgid "Open LemonAmiga Entry" msgstr "Abrir Entrada LemonAmiga" msgid "Open MobyGames Entry" msgstr "Abrir Entrada Mobygames" msgid "Open Scan Dialog" msgstr "Abrir Ventana Escaneo" msgid "Open Tool to Configure Button Mapping" msgstr "Abrir Herramienta para Configurar Bottones" msgid "Open Wikipedia Entry" msgstr "Abrir Entrada Wikipedia" msgid "OpenGL Settings" msgstr "Ajustes OpenGL" msgid "Override Installed Memory" msgstr "Sobrescribir Memoria Instalada" msgid "Parallel Port Joysticks" msgstr "Joysticks Puerto Paralelo" msgid "Picasso96 Support" msgstr "Soporte Picasso96" msgid "Picasso96 Support (uaegfx.card)" msgstr "Soporte Picasso96 (uaegfx.card)" msgid "Please wait..." msgstr "Por favor espere..." msgid "Preferences" msgstr "Preferencias" msgid "Preferred Joystick" msgstr "Joystick Preferido" msgid "Preferred device for secondary joystick:" msgstr "Dispositivo preferido para joystick secundario:" msgid "Preparing WHDLoad..." msgstr "Preparando WHDLoad..." msgid "Preparing floppy images..." msgstr "Preparando Imágenes Disquetes..." msgid "Preparing hard drives..." msgstr "Preparando Discos Duros..." msgid "Preparing..." msgstr "Preparando..." msgid "Purging old entries..." msgstr "Purgando entradas antiguas..." msgid "Refresh Game Database" msgstr "Actualizar Base de datos Juegos" msgid "Refresh game configurations from database" msgstr "Actualizar configuración desde base de datos Juegos" msgid "Refresh list of connected joystick devices" msgstr "Actualizar lista de dispositivos joystick conectados" msgid "Remove Directory from Search Path" msgstr "Eliminar directorio de la ruta de busqueda" msgid "Remove Selected Files" msgstr "Eliminar Archivos Seleccionados" msgid "Render scan lines" msgstr "Renderizar scanlines" msgid "Render scan lines in RTG graphics mode" msgstr "Renderizar scanlines en modo gráfico RTG" msgid "Resetting database..." msgstr "Reseteando base de datos..." msgid "Restoring changes..." msgstr "Restableciendo Cambios..." msgid "Retrying last operation (attempt {0})" msgstr "Reintentar ultima operación (intento {0}) " msgid "Save Configuration" msgstr "Guardar Configuración" msgid "Saving changes..." msgstr "Guardando Cambios..." msgid "Scaling Options" msgstr "Opciones de escalado" msgid "Scan" msgstr "Escáner" msgid "Scan & Indexing" msgstr "Escaneando e Indexando" msgid "Scan Files and Configurations" msgstr "Escanear Ficheros y Configuraciones" msgid "Scan complete" msgstr "Escáner Completo" msgid "Scan error" msgstr "Error escaner" msgid "Scan for Files" msgstr "Escanear por ficheros" msgid "Scan for Kickstarts, Files and Configurations" msgstr "Escanear Kickstarts, Archivos y Configuraciones" msgid "Scanning .fs-uae files..." msgstr "Escaneando archivos .fs-uae..." msgid "Scanning built-in entries..." msgstr "Escaneando Entradas Internas..." msgid "Scanning configurations" msgstr "Escaneando configuraciones" msgid "Scanning configurations ({count} scanned)" msgstr "Escaneando configuraciones ({count} escaneadas)" msgid "Scanning database entries..." msgstr "Escaneando entradas base de datos..." msgid "Scanning files" msgstr "Escaneando Archivos" msgid "Scanning files ({count} scanned)" msgstr "Escaneando Archivos ({count} escaneados)" msgid "Scanning game database entries..." msgstr "Escaneando entradas base de datos Juegos" msgid "Select Destination Directory" msgstr "Seleccione Directorio Destino" msgid "Select Multiple CD-ROMs" msgstr "Seleccionar Varios CD-ROMs" msgid "Select Multiple Files..." msgstr "Seleccionar Varios Archivos..." msgid "Select Multiple Floppies" msgstr "Seleccionar Varios Disquetes" msgid "Select Source Directory" msgstr "Seleccione Directorio Origen" msgid "Select a folder containing Amiga kickstart files and click \"{0}\"" msgstr "Selecciona una capeta que contenga archivos Kickstar y pulse \"{0}\"" msgid "Settings" msgstr "Ajustes" msgid "Show kickstart setup page on startup when all ROMs are missing" msgstr "Configuración kickstart en el inicio si no hay ROMs disponibles" msgid "Size:" msgstr "Tamaño:" msgid "Slow RAM" msgstr "Slow RAM" msgid "Specified directory does not exist" msgstr "El directorio especificado no existe" msgid "Start" msgstr "Comenzar" msgid "Start FS-UAE in fullscreen mode" msgstr "Comenzar FS-UAE en modo Pantalla Completa" msgid "Starting FS-UAE..." msgstr "Comenzando FS-UAE..." msgid "Starting scan" msgstr "Comenzando Escáner" msgid "Swap left and right CTRL keys" msgstr "Cambiar tecla CTRL izquierda y derecha" msgid "Synchronizing database..." msgstr "Sincronizando base de datos..." msgid "Synchronizing personal ratings..." msgstr "Sincronizando calificación personal…" msgid "Texture filter" msgstr "Filtro Texturas" msgid "Toggle Between Windowed and Full-Screen Mode" msgstr "Cambiar entre modo ventana y pantalla completa" msgid "Tools" msgstr "Herramientas:" msgid "Ungrab mouse and keyboard on middle mouse click" msgstr "Devolver control teclado y ratón con el botón medio del ratón" msgid "Update available ({version})" msgstr "Actualización disponible ({version})" msgid "Updating database" msgstr "Actualizando base de datos" msgid "Updating game entries:" msgstr "Actualizando entrada Juego:" msgid "Use RDB disk images for size >= {0}" msgstr "Usar imágenes disco RDB para tamaño >= {0}" msgid "Video Settings" msgstr "Ajustes Video" msgid "Video buffer format and color depth" msgstr "Formato buffer Video y profundidad de color" msgid "Video synchronization" msgstr "Sincronización Video" msgid "Video synchronization method" msgstr "Método Sincronización Video" msgid "Video texture format (on the GPU)" msgstr "Formato Textura Video (en la GPU)" msgid "WHDLoad Arguments" msgstr "Parámetros WHDLoad" msgid "You should have kickstart files for each Amiga model you want to use:" msgstr "Debes tener archivos kickstart por cada modelo Amiga que quieras usar:" msgid "Zoom Amiga display (crop)" msgstr "Visualización Zoom Amiga (recortado)" msgid "Zorro III RAM" msgstr "Zorro III RAM" msgid "{amiga_model} with < 2 MB chip memory" msgstr "" #~ msgid "Force Full Vsync" #~ msgstr "Forzar Vsync Completa" #~ msgid "Kickstart Setup" #~ msgstr "Configuración Kickstart" #~ msgid "Select Directory to Import From" #~ msgstr "Selecionar el Direstorios Desde el que Importar" #~ msgid "Sync to Vblank" #~ msgstr "Sincronizar a VBlank" #~ msgid "Update ({version}) is available" #~ msgstr "Actualización ({version}) está disponible" fs-uae-2.2.3+dfsg/launcher/po/de.po0000644000175000017500000004646612162366654017243 0ustar glaubitzglaubitz# German translations for fs-uae-launcher package. # Copyright (C) 2012 Frode Solheim # This file is distributed under the same license as the fs-uae-launcher package. # Frode Solheim , 2012. # msgid "" msgstr "" "Project-Id-Version: fs-uae-launcher\n" "Report-Msgid-Bugs-To: fs-uae@fengestad.no\n" "POT-Creation-Date: 2013-06-25 21:21+0200\n" "PO-Revision-Date: 2013-03-13 10:17+0100\n" "Last-Translator: Jens Weichert \n" "Language-Team: German\n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 1.5.4\n" msgid "16-bit" msgstr "16 Bit" msgid "32-bit BGRA" msgstr "32 Bit BGRA" msgid "32-bit RGBA" msgstr "32 Bit RGBA" msgid "640x400 + Border" msgstr "640x400 + Rand" msgid "640x480 + Border" msgstr "640x480 + Rand" msgid "640x512 + Border" msgstr "640x512 + Rand" msgid "ADF & HDF Creator" msgstr "ADF & HDF Erzeuger" msgid "ADF - Extended Floppy Disk Image (MFM)" msgstr "ADF - Erweitertes Disketten-Image (MFM)" msgid "ADF - Standard Floppy Disk Image" msgstr "ADF - Standard-Disketten-Image" msgid "Abort" msgstr "Abbrechen" msgid "About {name}" msgstr "Über {name}" msgid "Accurate" msgstr "Genau" msgid "Add Directory to Search Path" msgstr "Ordner zum Suchpfad hinzufügen" msgid "Add Files to List" msgstr "Dateien zur Liste hinzufügen" msgid "Add Multiple CD-ROMs at Once" msgstr "Mehrere CD-ROMs gleichzeitig hinzufügen" msgid "Add Multiple Floppies at Once" msgstr "Mehrere Floppies gleichzeitig hinzufügen" msgid "Additional Options" msgstr "Zusätzliche Optionen" msgid "Amiga Forever Import" msgstr "Amiga Forever Importer" msgid "Amiga Forever import task started" msgstr "Amiga Forever Importprozeß gestartet" msgid "Amiga Model" msgstr "Amiga Modell" msgid "Audio Settings" msgstr "Audioeinstellungen" msgid "Auto" msgstr "Auto" msgid "Auto + Border" msgstr "Auto + Rand" msgid "Auto-Fire is Off" msgstr "Dauerfeuer ist AUS" msgid "Auto-Fire is On" msgstr "Dauerfeuer ist AN" msgid "Available Kickstart Versions" msgstr "Verfügbare Kickstart-Versionen" msgid "Browse" msgstr "Stöbern" msgid "Browse for File" msgstr "Nach Datei suchen" msgid "Browse for Folder" msgstr "Nach Ordner suchen" msgid "Buffer swap only" msgstr "" msgid "Built-in TCP/IP Stack" msgstr "Eingebauter TCP/IP Stack" msgid "Built-in TCP/IP Stack (bsdsocket.library)" msgstr "Eingebauter TCP/IP Stack (bsdsocket.library)" msgid "CD-ROM Drive" msgstr "CD-ROM Laufwerk" msgid "CD-ROM Drives" msgstr "CD-ROM Laufwerke" msgid "CD-ROMs" msgstr "CD-ROMs" msgid "CD32 Pad" msgstr "CD32 Joypad" msgid "Cancel" msgstr "Abbruch" msgid "Chip RAM" msgstr "Chip RAM" msgid "Choose CD-ROM Image" msgstr "CD-ROM Abbild auswählen" msgid "Choose Extended ROM" msgstr "Erweiterten ROM auswählen" msgid "Choose Floppy Image" msgstr "Floppy Image wählen" msgid "Choose Hard Drive" msgstr "Festplatte wählen" msgid "Choose Kickstart ROM" msgstr "Kickstart ROM wählen" msgid "Cleaning up..." msgstr "Räume auf..." msgid "Clear List" msgstr "Liste leeren" msgid "Click 'Scan' button if you want to re-scan" msgstr "'Suchen' Knopf drücken, wenn Sie neu suchen wollen" msgid "Click 'Scan' button to start scan" msgstr "Zum Starten 'Suchen' Knopf drücken" msgid "Click here to download" msgstr "Zum Download hier klicken" msgid "Click here to import kickstarts" msgstr "Hier klicken zum importieren der Kickstarts" msgid "Close" msgstr "Schließen" msgid "Committing data..." msgstr "Übertrage Daten..." msgid "Config" msgstr "Konfiguration" msgid "Configuration" msgstr "Konfiguration" msgid "Configuration Browser" msgstr "Konfigurationsbrowser" msgid "Configuration Warning" msgstr "" msgid "Configurations" msgstr "Konfigurationen" msgid "Configure Joystick Buttons" msgstr "Joystick-Schalter konfigurieren" msgid "Connect" msgstr "Verbinden" msgid "" "Copy {0}\n" "to {1}" msgstr "" "Kopiere {0}\n" "zu {1}" msgid "Could not open file for writing" msgstr "Kann Datei für Schreibzugriff nicht öffnen" msgid "Create" msgstr "Erstellen" msgid "Cursor Keys and Right Ctrl/Alt" msgstr "Pfeiltasten und rechts Ctrl/Alt" msgid "Custom" msgstr "Benutzerdefiniert" msgid "Custom Configuration" msgstr "Eigene Konfigurationen" msgid "Custom IRC server address" msgstr "Eigene IRC Server Adresse" msgid "Custom Joystick Port" msgstr "Benutzerdef. Joystickport" msgid "Custom Options" msgstr "Spezielle Einstellungen" msgid "Custom Settings" msgstr "Globale Einstellungen" msgid "Default" msgstr "Vorgabe" msgid "Default ({0})" msgstr "Vorgabe ({0})" msgid "Destination Directory:" msgstr "Zielverzeichnis:" msgid "Disconnect" msgstr "Trennen" msgid "Disk Image Name:" msgstr "Diskimage-Name:" msgid "Disk image created" msgstr "Disk-Image wurde erzeugt" msgid "Download failed (attempt {0}) - retrying in {0} seconds" msgstr "Download fehlgeschlagen (Versuch {0}) - Wiederholung in {0} Sekunden" msgid "Downloading {0}..." msgstr "Lade herunter {0}..." msgid "Edit Custom Options" msgstr "Eigene Optionen bearbeiten" msgid "Eject" msgstr "Auswerfen" msgid "Enable experimental net play GUI (requires restart)" msgstr "Experimentelle Net-Play-Oberfläche erlauben (Neustart erforderlich)" msgid "Enable online database support (requires restart)" msgstr "Online Datenbank Unterstützung erlauben (Neustart erforderlich)" msgid "Error moving file into place" msgstr "Fehler beim verschieben der Datei" msgid "Error writing disk image" msgstr "Fehler beim Schreiben des Disk-Images" msgid "Expansions" msgstr "Erweiterungen" msgid "Experimental Features" msgstr "Experimentelle Features" msgid "Extended ROM:" msgstr "Erweiterter ROM:" msgid "FS-UAE Launcher Settings" msgstr "FS-UAE Launcher Einstellungen" msgid "Fast RAM" msgstr "Fast RAM" msgid "Fetching database entries ({0})" msgstr "Hole Datenbank-Einträge ({0})" msgid "Fetching game ratings ({0})" msgstr "Hole Spielbewertungen ({0})" msgid "Fetching user game ratings ({0})" msgstr "Hole User-Spielebewertungen ({0})" msgid "File already exists" msgstr "Datei existiert bereits" msgid "Filters" msgstr "Filter" msgid "Filters & Scaling" msgstr "Filter & Skalierung" msgid "Filters:" msgstr "Filter:" msgid "Floppies" msgstr "Disketten" msgid "Floppy Drives" msgstr "Floppy Laufwerke" msgid "Floppy drive volume" msgstr "Lautstärke der Floppy-Laufwerke" msgid "Full Frame" msgstr "Voller Rahmen" msgid "Full-scene anti-aliasing (FSAA)" msgstr "Full-Scene Anti-Aliasing (FSAA)" msgid "Fullscreen" msgstr "Vollbild" msgid "Game Database" msgstr "Game-Database" msgid "Game Database Settings" msgstr "Game-Database Einstellungen" msgid "Game database password" msgstr "Game-Database Kennwort" msgid "Game database user name" msgstr "Game-Database Benutzername" msgid "Gamepad/Joystick Setup" msgstr "Gamepad/Joystick Einstellungen" msgid "Games and Configurations" msgstr "Spiele und Konfigurationen" msgid "Grab mouse and keyboard input when FS-UAE starts" msgstr "Maus und Tastatur übernehmen wenn FS-UAE startet" msgid "Grab mouse and keyboard input when clicking on FS-UAE window" msgstr "Maus und Tastatur übernehmen wenn ins FS-UAE Fenster geklickt wird" msgid "HDF - Partitionable Hard Drive Image (RDB)" msgstr "HDF - partitionierbares Festplatten-Image (RDB)" msgid "HDF - Single Partition Hard Disk File" msgstr "HDF - normales Festplatten-Image" msgid "Hard Drives" msgstr "Festplatten" msgid "Hardware" msgstr "Hardware" msgid "Hardware Options" msgstr "Hardwareoptionen" msgid "IRC nickname" msgstr "IRC Nickname" msgid "If you own Amiga Forever, select the drive/folder and click \"{0}\"" msgstr "Zum Import von Amiga Forever Pfad angeben und und klicken \"{0}\"" msgid "Import" msgstr "Importieren" msgid "Import From Amiga Forever CD/DVD" msgstr "Von der Amiga Forever CD/DVD importieren" msgid "Import Kickstarts" msgstr "Importiere Kickstarts" msgid "Import Kickstarts and ROMs" msgstr "Kickstarts und ROMs importieren" msgid "Import task is done" msgstr "Importprozeß beendet" msgid "Include built-in configurations" msgstr "Eingebaute Konfigurationen übernehmen" msgid "Input" msgstr "Eingabe" msgid "Input Options" msgstr "Eingabeoptionen" msgid "Input Settings" msgstr "Eingabeeinstellungen" msgid "Internal" msgstr "Intern" msgid "Invalid size specified" msgstr "Ungültige Größe angegeben" msgid "Joystick" msgstr "Joystick" msgid "Joystick Configuration" msgstr "Joystick-Konfiguration" msgid "Joystick Ports" msgstr "Joystickports" msgid "Joystick Settings" msgstr "Joystick-Einstellungen" msgid "Keep aspect ratio when scaling (do not stretch)" msgstr "Seitenverhältnis beim Skalieren beibehalten (nicht strecken)" msgid "Keyboard Settings" msgstr "Tastatur-Einstellungen" msgid "Kickstart ROM" msgstr "Kickstart ROM" msgid "Kickstart ROMs are missing" msgstr "Kickstart ROMs fehlen" msgid "Kickstart import task started" msgstr "Kickstart-Importprozeß gestartet" msgid "Launching FS-UAE" msgstr "Starte FS-UAE" msgid "Least Accurate" msgstr "Am wenigsten genau" msgid "Less Accurate" msgstr "Weniger genau" msgid "List of Folders to Index" msgstr "Liste der Ordner für Indexierung" msgid "Low latency vsync (when using full vsync)" msgstr "VSync mit niedriger Latenz (bei vollem VSync)" msgid "MB" msgstr "MB" msgid "Main Configuration Options" msgstr "Allgemeine Konfigurationsoptionen" msgid "Main Menu" msgstr "Hauptmenü" msgid "Media Swap List" msgstr "Medienwechsler" msgid "Memory" msgstr "Speicher" msgid "Mouse" msgstr "Maus" msgid "Mouse & Joystick Ports" msgstr "Maus- & Joystickports" msgid "Mouse Settings" msgstr "Maus-Einstellungen" msgid "Mouse speed (%)" msgstr "Mausgeschwindigkeit (%)" msgid "Net Play" msgstr "Netzwerkspiel" msgid "Net Play Settings" msgstr "Net-Play-Einstellungen" msgid "Net play tag (max 3 characters)" msgstr "Net-Play-Tag (max. 3 Zeichen)" msgid "New Configuration" msgstr "Neue Konfiguration" msgid "New Disk Image" msgstr "Neues Disk-Image" msgid "Nick:" msgstr "Nickname:" msgid "No Device" msgstr "Kein Gerät" msgid "No Host Device" msgstr "Kein Host Gerät" msgid "No Joysticks" msgstr "Keine Joysticks" msgid "No extended kickstart found for this model. Try 'scan' function." msgstr "" "Kein erweitertes Kickstart ROM für dieses Modell gefunden. Benutzen Sie die " "\"Suchen\" Funktion." msgid "No joysticks are currently connected" msgstr "Derzeit sind keine Joysticks verbunden" msgid "No kickstart found for this model. " msgstr "Für dieses Modell wurde kein Kickstart ROM gefunden" msgid "No scan in progress" msgstr "Kein Suchprozess im Gange" msgid "Nothing" msgstr "Nichts" msgid "OK" msgstr "OK" msgid "Off" msgstr "Aus" msgid "On" msgstr "Ein" msgid "Open Game Database Entry" msgstr "Öffne Game Database Eintrag" msgid "Open Hall of Light Entry" msgstr "Öffne Hall of Light Eintrag" msgid "Open LemonAmiga Entry" msgstr "Öffne LemonAmiga Eintrag" msgid "Open MobyGames Entry" msgstr "Öffne MobyGames Eintrag" msgid "Open Scan Dialog" msgstr "Öffne Suchdialog" msgid "Open Tool to Configure Button Mapping" msgstr "Öffne Werkzeug für Schalter-Mapping" msgid "Open Wikipedia Entry" msgstr "Öffne Wikipedia Eintrag" msgid "OpenGL Settings" msgstr "OpenGL Einstellungen" msgid "Override Installed Memory" msgstr "Überschreibe installierten Speicher" msgid "Parallel Port Joysticks" msgstr "Parallel Port Joysticks" msgid "Picasso96 Support" msgstr "Picasso96 Unterstützung" msgid "Picasso96 Support (uaegfx.card)" msgstr "Picasso96 Unterstützung (uaegfx.card)" msgid "Please wait..." msgstr "Bitte warten..." msgid "Preferences" msgstr "Voreinstellungen" msgid "Preferred Joystick" msgstr "Bevorzugter Joystick" msgid "Preferred device for secondary joystick:" msgstr "Bevorzugtes Gerät für den sekundären Joystick:" msgid "Preparing WHDLoad..." msgstr "Bereite WHDLoad vor..." msgid "Preparing floppy images..." msgstr "Bereite Floppie Abbilder vor..." msgid "Preparing hard drives..." msgstr "Bereite Festplatten vor..." msgid "Preparing..." msgstr "Vorbereitung..." msgid "Purging old entries..." msgstr "Säubere alte Einträge" msgid "Refresh Game Database" msgstr "Erneuere Spieledatenbank" msgid "Refresh game configurations from database" msgstr "Erneuere Spielekonfigurationen aus der Datenbank" msgid "Refresh list of connected joystick devices" msgstr "Erneuere Liste mit verbundenen Joysticks" msgid "Remove Directory from Search Path" msgstr "Entferne Ordner vom Suchpfad" msgid "Remove Selected Files" msgstr "Entferne ausgewählte Dateien" msgid "Render scan lines" msgstr "Scanlines zeichnen" msgid "Render scan lines in RTG graphics mode" msgstr "Scanlines im RTG Grafikmodus zeichnen" msgid "Resetting database..." msgstr "Setze Datenbank zurück..." msgid "Restoring changes..." msgstr "Stelle Änderungen wieder her..." msgid "Retrying last operation (attempt {0})" msgstr "Vorgang wird wiederholt (Versuch {0})" msgid "Save Configuration" msgstr "Konfiguration sichern" msgid "Saving changes..." msgstr "Sichere Änderungen..." msgid "Scaling Options" msgstr "Skalierungsoptionen" msgid "Scan" msgstr "Suchen" msgid "Scan & Indexing" msgstr "Scannen und indexieren" msgid "Scan Files and Configurations" msgstr "Suche Dateien und Konfigurationen" msgid "Scan complete" msgstr "Suche beendet" msgid "Scan error" msgstr "Scanfehler" msgid "Scan for Files" msgstr "Suche nach Dateien" msgid "Scan for Kickstarts, Files and Configurations" msgstr "Suche nach Kickstarts, Dateien und Konfigurationen" msgid "Scanning .fs-uae files..." msgstr "Scanne nach .fs-uae files..." msgid "Scanning built-in entries..." msgstr "Scanne Built-In Einträge..." msgid "Scanning configurations" msgstr "Suche Konfigurationen" msgid "Scanning configurations ({count} scanned)" msgstr "Scanne Konfigurationen ({count} gescannt)" msgid "Scanning database entries..." msgstr "Scanne Datenbankeinträge..." msgid "Scanning files" msgstr "Scanne Dateien" msgid "Scanning files ({count} scanned)" msgstr "Suche Dateien ({count} bearbeitet)" msgid "Scanning game database entries..." msgstr "Scanne Game-Datenbankeinträge" msgid "Select Destination Directory" msgstr "Wähle Zielverzeichnis" msgid "Select Multiple CD-ROMs" msgstr "Mehrere CD-ROMs auswählen" msgid "Select Multiple Files..." msgstr "Mehrere Dateien gleichzeitig auswählen..." msgid "Select Multiple Floppies" msgstr "Mehrere Floppies auswählen" msgid "Select Source Directory" msgstr "Wähle Quellverzeichnis" msgid "Select a folder containing Amiga kickstart files and click \"{0}\"" msgstr "Ordner mit Amiga-Kickstart-Dateien auswählen und \"{0}\" drücken" msgid "Settings" msgstr "Einstellungen" msgid "Show kickstart setup page on startup when all ROMs are missing" msgstr "Kickstart-Einstellungen beim Start anzeigen, wenn alle ROMs fehlen" msgid "Size:" msgstr "Größe:" msgid "Slow RAM" msgstr "Langsames RAM" msgid "Specified directory does not exist" msgstr "Spezifiziertes Verzeichnis existiert nicht" msgid "Start" msgstr "Start" msgid "Start FS-UAE in fullscreen mode" msgstr "FS-UAE im Vollbild starten" msgid "Starting FS-UAE..." msgstr "Starte FS-UAE..." msgid "Starting scan" msgstr "Starte Suche" msgid "Swap left and right CTRL keys" msgstr "Tausche linke und rechte CTRL (STRG) Tasten" msgid "Synchronizing database..." msgstr "Synchronisiere Datenbank..." msgid "Synchronizing personal ratings..." msgstr "Synchronisiere persönliche Bewertungen…" msgid "Texture filter" msgstr "Texturfilter" msgid "Toggle Between Windowed and Full-Screen Mode" msgstr "Wechsle zwischen Fenster- und Vollbildmodus" msgid "Tools" msgstr "Werkzeuge" msgid "Ungrab mouse and keyboard on middle mouse click" msgstr "Maus und Tastatur mit mittlerer Maustaste freigeben" msgid "Update available ({version})" msgstr "Update verfügbar ({version})" msgid "Updating database" msgstr "Aktualisiere Datenbank" msgid "Updating game entries:" msgstr "Aktualisiere Spieleinträge:" msgid "Use RDB disk images for size >= {0}" msgstr "Nutze partitionierbare Images für Größe >= {0}" msgid "Video Settings" msgstr "Videoeinstellungen" msgid "Video buffer format and color depth" msgstr "Video-Puffer-Format und Farbtiefe" msgid "Video synchronization" msgstr "Videosynchronisierung" msgid "Video synchronization method" msgstr "Video-Sychronisierungs-Methode" msgid "Video texture format (on the GPU)" msgstr "Video-Textur-Format (auf der GPU)" msgid "WHDLoad Arguments" msgstr "WHDLoad Argumente" msgid "You should have kickstart files for each Amiga model you want to use:" msgstr "" "Sie sollten eine Kickstart-Datei für jedes benutzte Amiga-Modell besitzen:" msgid "Zoom Amiga display (crop)" msgstr "Amigaanzeige strecken" msgid "Zorro III RAM" msgstr "Zorro III RAM" msgid "{amiga_model} with < 2 MB chip memory" msgstr "" #~ msgid "640x400" #~ msgstr "640x400" #~ msgid "640x480" #~ msgstr "640x480" #~ msgid "640x512" #~ msgstr "640x512" #~ msgid "Add Multiple CD Images at Once" #~ msgstr "Mehrere CD Abbilder gleichzeitig hinzufügen" #~ msgid "Add Multiple Files at Once" #~ msgstr "Mehrere Dateien gleichzeitig hinzufügen" #~ msgid "Amiga Hardware Options" #~ msgstr "Amiga Hardware Einstellungen" #~ msgid "Amiga Model and Hardware" #~ msgstr "Amiga Modell und Hardware" #~ msgid "Configure CD-ROMs" #~ msgstr "CD-ROMs konfigurieren" #~ msgid "Configure Floppies" #~ msgstr "Floppies konfigurieren" #~ msgid "Configure Hard Drives" #~ msgstr "Festplatten konfigurieren" #~ msgid "Configure Hardware" #~ msgstr "Hardware konfigurieren" #~ msgid "Configure Input" #~ msgstr "Eingaben konfigurieren" #~ msgid "Configure Joysticks" #~ msgstr "Joysticks konfigurieren" #~ msgid "Crop Amiga display (zoom)" #~ msgstr "Amiga Display anpassen (Zoom)" #~ msgid "Enable experimental net play GUI (requires re-start)" #~ msgstr "Experimentelle NetPlay Oberfläche einschalten (Neustart notwendig)" #~ msgid "Extended ROM" #~ msgstr "Erweiterter ROM" #~ msgid "Floppies..." #~ msgstr "Floppies..." #~ msgid "Force Full Vsync" #~ msgstr "Volles Vsync erzwingen" #~ msgid "Hard Drive {0}" #~ msgstr "Festplatte {0}" #~ msgid "Host Options" #~ msgstr "Host Optionen" #~ msgid "Joystick (Emulated by Keyboard)" #~ msgstr "Joystick (emuliert per Tastatur)" #~ msgid "Kickstart" #~ msgstr "Kickstart" #~ msgid "Kickstart Setup" #~ msgstr "Kickstart-Einstellungen" #~ msgid "Kickstart Versions" #~ msgstr "Kickstart Versionen" #~ msgid "Media List" #~ msgstr "Medienliste" #~ msgid "More Configuration Options" #~ msgstr "Mehr Konfigurationsoptionen" #~ msgid "More..." #~ msgstr "Mehr..." #~ msgid "Open Configuration" #~ msgstr "Konfiguration öffnen" #~ msgid "Removable Media" #~ msgstr "Entferne Medium" #~ msgid "Scale with original aspect ratio (instead of stretching video)" #~ msgstr "Seitenverhältnis beim Skalieren beibehalten (anstatt Stretching)" #~ msgid "Scan for Kickstarts, Games and Configurations" #~ msgstr "Scanne nach Kickstarts, Spielen und Konfigurationen" #~ msgid "Select Directory to Import From" #~ msgstr "Wählen Sie einen Ordner, von welchem importiert werden soll" #~ msgid "Select Files..." #~ msgstr "Dateien auswählen..." #~ msgid "Show Only Favorites (On/Off)" #~ msgstr "Zeige nur Favoriten (Ein/Aus)" #~ msgid "Show Only Verified Configurations (On/Off)" #~ msgstr "Zeige nur geprüfte Konfigurationen (Ein/Aus)" #~ msgid "Swap List" #~ msgstr "Objekte im Wechsler" #~ msgid "Sync to Vblank" #~ msgstr "Nach VBlank synchronisieren" #~ msgid "Update ({version}) is available" #~ msgstr "Ein Update ({version}) ist verfügbar" #~ msgid "Window" #~ msgstr "Fenster" fs-uae-2.2.3+dfsg/launcher/po/pl.po0000644000175000017500000004317012162366654017253 0ustar glaubitzglaubitz# Polish translations for fs-uae-launcher package. # Copyright (C) 2012 Frode Solheim # This file is distributed under the same license as the fs-uae-launcher package. # Frode Solheim , 2012. # msgid "" msgstr "" "Project-Id-Version: fs-uae-launcher\n" "Report-Msgid-Bugs-To: fs-uae@fengestad.no\n" "POT-Creation-Date: 2013-06-25 21:21+0200\n" "PO-Revision-Date: 2013-03-09 07:45+0100\n" "Last-Translator: grimi \n" "Language-Team: Polish\n" "Language: pl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2);\n" "X-Generator: Poedit 1.5.4\n" msgid "16-bit" msgstr "16-bit" msgid "32-bit BGRA" msgstr "32-bit BGRA" msgid "32-bit RGBA" msgstr "32-bit RGBA" msgid "640x400 + Border" msgstr "640x400 + ramka" msgid "640x480 + Border" msgstr "640x480 + ramka" msgid "640x512 + Border" msgstr "640x512 + ramka" msgid "ADF & HDF Creator" msgstr "Kreator ADF i HDF" msgid "ADF - Extended Floppy Disk Image (MFM)" msgstr "ADF - Rozszerzony obraz dyskietki (MFM)" msgid "ADF - Standard Floppy Disk Image" msgstr "ADF - Standardowy obraz dyskietki" msgid "Abort" msgstr "Przerwij" msgid "About {name}" msgstr "O {name}" msgid "Accurate" msgstr "DokÅ‚adnie" msgid "Add Directory to Search Path" msgstr "Dodaj katalog do Å›cieżki wyszukiwania" msgid "Add Files to List" msgstr "Dodaj pliki do listy" msgid "Add Multiple CD-ROMs at Once" msgstr "Dodaj kilka obrazów CD-ROM" msgid "Add Multiple Floppies at Once" msgstr "Dodaj kilka obrazów dyskietek" msgid "Additional Options" msgstr "Opcje dodatkowe" msgid "Amiga Forever Import" msgstr "Import z Amiga Forever" msgid "Amiga Forever import task started" msgstr "Import z Amiga Forever rozpoczÄ™ty" msgid "Amiga Model" msgstr "Model Amigi" msgid "Audio Settings" msgstr "Ustawienia audio" msgid "Auto" msgstr "Auto" msgid "Auto + Border" msgstr "Auto + ramka" msgid "Auto-Fire is Off" msgstr "Auto-Fire wyłączony" msgid "Auto-Fire is On" msgstr "Auto-Fire włączony" msgid "Available Kickstart Versions" msgstr "DostÄ™pne wersje kickstartu" msgid "Browse" msgstr "PrzeglÄ…daj" msgid "Browse for File" msgstr "Wybierz plik" msgid "Browse for Folder" msgstr "Wybierz katalog" msgid "Buffer swap only" msgstr "" msgid "Built-in TCP/IP Stack" msgstr "Wbudowany stos TCP/IP" msgid "Built-in TCP/IP Stack (bsdsocket.library)" msgstr "Wbudowany stos TCP/IP (bsdsocket.library)" msgid "CD-ROM Drive" msgstr "NapÄ™d CD-ROM" msgid "CD-ROM Drives" msgstr "NapÄ™dy CD-ROM" msgid "CD-ROMs" msgstr "CD-ROMy" msgid "CD32 Pad" msgstr "CD32 Pad" msgid "Cancel" msgstr "Anuluj" msgid "Chip RAM" msgstr "Chip RAM" msgid "Choose CD-ROM Image" msgstr "Wybierz obraz CD-ROM" msgid "Choose Extended ROM" msgstr "Wybierz rozszerzony ROM" msgid "Choose Floppy Image" msgstr "Wybierz obraz dyskietki" msgid "Choose Hard Drive" msgstr "Wybierz dysk twardy" msgid "Choose Kickstart ROM" msgstr "Wybierz ROM (kickstart)" msgid "Cleaning up..." msgstr "SprzÄ…tanie..." msgid "Clear List" msgstr "Wyczyść listÄ™" msgid "Click 'Scan' button if you want to re-scan" msgstr "Kliknij przycisk 'Skanuj', aby ponownie przeskanować" msgid "Click 'Scan' button to start scan" msgstr "Kliknij przycisk 'Skanuj', aby przeskanować" msgid "Click here to download" msgstr "Kliknij tutaj aby pobrać" msgid "Click here to import kickstarts" msgstr "Kliknij aby importować pliki kickstartu" msgid "Close" msgstr "Zamknij" msgid "Committing data..." msgstr "Przydzielanie danych..." msgid "Config" msgstr "Konfiguracja" msgid "Configuration" msgstr "Konfiguracja" msgid "Configuration Browser" msgstr "Lista konfiguracji" msgid "Configuration Warning" msgstr "" msgid "Configurations" msgstr "Konfiguracje" msgid "Configure Joystick Buttons" msgstr "Konfigurowanie joysticka" msgid "Connect" msgstr "Połącz" msgid "" "Copy {0}\n" "to {1}" msgstr "" "Kopiuj {0}\n" "do {1}" msgid "Could not open file for writing" msgstr "Nie można otworzyć pliku do zapisu" msgid "Create" msgstr "Utwórz" msgid "Cursor Keys and Right Ctrl/Alt" msgstr "Klawisze kursora i prawy Ctrl/Alt" msgid "Custom" msgstr "WÅ‚asny" msgid "Custom Configuration" msgstr "Opcje konfiguracji" msgid "Custom IRC server address" msgstr "Adres wÅ‚asnego serwera IRC" msgid "Custom Joystick Port" msgstr "WÅ‚asny port joysticka" msgid "Custom Options" msgstr "Opcje dodatkowe" msgid "Custom Settings" msgstr "WÅ‚asne ustawienia" msgid "Default" msgstr "DomyÅ›lnie" msgid "Default ({0})" msgstr "DomyÅ›lnie ({0})" msgid "Destination Directory:" msgstr "Katalog docelowy:" msgid "Disconnect" msgstr "Rozłącz" msgid "Disk Image Name:" msgstr "Nazwa obrazu dysku:" msgid "Disk image created" msgstr "Obraz dysku utworzony" msgid "Download failed (attempt {0}) - retrying in {0} seconds" msgstr "Pobieranie nieudane (próba {0}) - ponowienie za {0} sekund" msgid "Downloading {0}..." msgstr "Pobieranie {0}..." msgid "Edit Custom Options" msgstr "Edytuj opcje dodatkowe" msgid "Eject" msgstr "WysuÅ„" msgid "Enable experimental net play GUI (requires restart)" msgstr "Włącz eksperymentalny interfejs gry sieciowej (wymaga restartu)" msgid "Enable online database support (requires restart)" msgstr "Włącz obsÅ‚ugÄ™ bazy danych online (wymaga restartu)" msgid "Error moving file into place" msgstr "Błąd przenoszenia pliku na miejsce" msgid "Error writing disk image" msgstr "Błąd zapisu obrazu dysku" msgid "Expansions" msgstr "Rozszerzenia" msgid "Experimental Features" msgstr "Funkcje eksperymentalne" msgid "Extended ROM:" msgstr "Rozszerzony ROM:" msgid "FS-UAE Launcher Settings" msgstr "Ustawienia FS-UAE Launcher" msgid "Fast RAM" msgstr "Fast RAM" msgid "Fetching database entries ({0})" msgstr "Pobieranie wpisów bazy danych ({0})" msgid "Fetching game ratings ({0})" msgstr "Pobieranie wpisów bazy danych ({0})" msgid "Fetching user game ratings ({0})" msgstr "Pobieranie ocen gier użytkownika ({0})" msgid "File already exists" msgstr "Plik już istnieje" msgid "Filters" msgstr "Filtry" msgid "Filters & Scaling" msgstr "Filtry i skalowanie" msgid "Filters:" msgstr "Filtry:" msgid "Floppies" msgstr "Dyskietki" msgid "Floppy Drives" msgstr "NapÄ™dy dyskietek" msgid "Floppy drive volume" msgstr "GÅ‚oÅ›ność stacji dyskietek" msgid "Full Frame" msgstr "PeÅ‚na ramka" msgid "Full-scene anti-aliasing (FSAA)" msgstr "PeÅ‚noekranowy antyaliasing (FSAA)" msgid "Fullscreen" msgstr "PeÅ‚ny ekran" msgid "Game Database" msgstr "Baza danych gier" msgid "Game Database Settings" msgstr "Ustawienia bazy danych gier" msgid "Game database password" msgstr "HasÅ‚o bazy danych gier" msgid "Game database user name" msgstr "Nazwa użytkownika bazy danych gier" msgid "Gamepad/Joystick Setup" msgstr "Gamepad/joystick - ustawienia" msgid "Games and Configurations" msgstr "Gry i konfiguracje" msgid "Grab mouse and keyboard input when FS-UAE starts" msgstr "Przechwyć polecenia myszy i klawiatury przy starcie FS-UAE" msgid "Grab mouse and keyboard input when clicking on FS-UAE window" msgstr "Przechwyć polecenia myszy i klawiatury po klikniÄ™ciu okna FS-UAE" msgid "HDF - Partitionable Hard Drive Image (RDB)" msgstr "HDF - Obraz dysku twardego z tablicÄ… partycji (RDB)" msgid "HDF - Single Partition Hard Disk File" msgstr "HDF - Plik dysku twardego z jednÄ… partycjÄ…" msgid "Hard Drives" msgstr "Dyski twarde" msgid "Hardware" msgstr "SprzÄ™t" msgid "Hardware Options" msgstr "Opcje sprzÄ™towe" msgid "IRC nickname" msgstr "Nazwa użytkownika IRC" msgid "If you own Amiga Forever, select the drive/folder and click \"{0}\"" msgstr "JeÅ›li posiadasz Amiga Forever, wybierz dysk/folder i kliknij \"{0}\"" msgid "Import" msgstr "Importuj" msgid "Import From Amiga Forever CD/DVD" msgstr "Importuj z CD/DVD Amiga Forever" msgid "Import Kickstarts" msgstr "Importuj pliki kickstart" msgid "Import Kickstarts and ROMs" msgstr "Importuj pliki kickstart i ROM" msgid "Import task is done" msgstr "Importowanie zakoÅ„czone" msgid "Include built-in configurations" msgstr "Dołącz konfiguracje wbudowane" msgid "Input" msgstr "WejÅ›cie" msgid "Input Options" msgstr "Opcje wejÅ›cia" msgid "Input Settings" msgstr "Opcje wejÅ›cia" msgid "Internal" msgstr "Wbudowany" msgid "Invalid size specified" msgstr "Niepoprawnie podany rozmiar" msgid "Joystick" msgstr "Joystick" msgid "Joystick Configuration" msgstr "Konfiguracja joysticka" msgid "Joystick Ports" msgstr "Porty joysticka" msgid "Joystick Settings" msgstr "Ustawienia joysticka" msgid "Keep aspect ratio when scaling (do not stretch)" msgstr "Zachowaj proporcje przy skalowaniu (nie rozciÄ…gaj)" msgid "Keyboard Settings" msgstr "Opcje klawiatury" msgid "Kickstart ROM" msgstr "Kickstart ROM" msgid "Kickstart ROMs are missing" msgstr "Brak plików ROM kickstart" msgid "Kickstart import task started" msgstr "Importowanie kickstartu uruchomione" msgid "Launching FS-UAE" msgstr "Uruchamiam FS-UAE" msgid "Least Accurate" msgstr "Najmniej dokÅ‚adnie" msgid "Less Accurate" msgstr "Mniej dokÅ‚adnie" msgid "List of Folders to Index" msgstr "Lista folderów do indeksowania" msgid "Low latency vsync (when using full vsync)" msgstr "Niskie opóźnienia vsync (przy peÅ‚nej synchronizacji)" msgid "MB" msgstr "MB" msgid "Main Configuration Options" msgstr "Główne opcje konfiguracyjne" msgid "Main Menu" msgstr "Menu główne" msgid "Media Swap List" msgstr "Lista zmiany obrazów" msgid "Memory" msgstr "Pamięć" msgid "Mouse" msgstr "Myszka" msgid "Mouse & Joystick Ports" msgstr "Porty myszki i joysticka" msgid "Mouse Settings" msgstr "Ustawienia myszki" msgid "Mouse speed (%)" msgstr "PrÄ™dkość myszki (%)" msgid "Net Play" msgstr "Gra przez sieć" msgid "Net Play Settings" msgstr "Opcje gry sieciowej" msgid "Net play tag (max 3 characters)" msgstr "Oznaczenie gry sieciowej (maks 3 znaki)" msgid "New Configuration" msgstr "Nowa konfiguracja" msgid "New Disk Image" msgstr "Nowy obraz dysku" msgid "Nick:" msgstr "Pseudonim:" msgid "No Device" msgstr "Brak urzÄ…dzenia" msgid "No Host Device" msgstr "Brak urzÄ…dzenia" msgid "No Joysticks" msgstr "Brak joysticków" msgid "No extended kickstart found for this model. Try 'scan' function." msgstr "" "Nie znaleziono rozszerzonego kickstartu dla tego modelu. Użyj funkcji " "'Skanuj'." msgid "No joysticks are currently connected" msgstr "Brak podłączonych joysticków" msgid "No kickstart found for this model. " msgstr "Nie znaleziono kickstartu dla tego modelu." msgid "No scan in progress" msgstr "Brak skanowania w toku" msgid "Nothing" msgstr "Nic" msgid "OK" msgstr "Ok" msgid "Off" msgstr "Nie" msgid "On" msgstr "Tak" msgid "Open Game Database Entry" msgstr "Otwórz wpis z bazy danych gier" msgid "Open Hall of Light Entry" msgstr "Otwórz wpis na Hall of Light" msgid "Open LemonAmiga Entry" msgstr "Otwórz wpis na LemonAmiga" msgid "Open MobyGames Entry" msgstr "Otwórz wpis na MobyGames" msgid "Open Scan Dialog" msgstr "Otwórz okno skanowania" msgid "Open Tool to Configure Button Mapping" msgstr "Otwórz narzÄ™dzie konfiguracji/mapowania przycisków" msgid "Open Wikipedia Entry" msgstr "Otwórz wpis na Wikipedii" msgid "OpenGL Settings" msgstr "Ustawienia OpenGL" msgid "Override Installed Memory" msgstr "ZastÄ…p pamięć zainstalowanÄ…" msgid "Parallel Port Joysticks" msgstr "RównolegÅ‚y port joysticków" msgid "Picasso96 Support" msgstr "Wsparcie dla Picasso96" msgid "Picasso96 Support (uaegfx.card)" msgstr "Wsparcie dla Picasso96 (uaegfx.card)" msgid "Please wait..." msgstr "ProszÄ™ czekać..." msgid "Preferences" msgstr "Ustawienia" msgid "Preferred Joystick" msgstr "DomyÅ›lny joystick" msgid "Preferred device for secondary joystick:" msgstr "DomyÅ›lne urzÄ…dzenie drugiego joysticka" msgid "Preparing WHDLoad..." msgstr "Przygotowanie WHDLoad ..." msgid "Preparing floppy images..." msgstr "Przygotowanie obrazów dyskietek ..." msgid "Preparing hard drives..." msgstr "Przygotowywanie dysków twardych ..." msgid "Preparing..." msgstr "Przygotowywanie..." msgid "Purging old entries..." msgstr "Usuwanie starych wpisów" msgid "Refresh Game Database" msgstr "OdÅ›wież bazÄ™ danych gier" msgid "Refresh game configurations from database" msgstr "OdÅ›wież konfiguracje gier z bazy danych" msgid "Refresh list of connected joystick devices" msgstr "OdÅ›wież listÄ™ podłączonych joysticków" msgid "Remove Directory from Search Path" msgstr "UsuÅ„ katalog ze Å›cieżki wyszukiwania" msgid "Remove Selected Files" msgstr "UsuÅ„ wybrane pliki" msgid "Render scan lines" msgstr "Renderuj \"scanlines\"" msgid "Render scan lines in RTG graphics mode" msgstr "Renderuj \"scanlines\" w trybie RTG" msgid "Resetting database..." msgstr "Resetowanie bazy danych..." msgid "Restoring changes..." msgstr "Przywracanie zmian..." msgid "Retrying last operation (attempt {0})" msgstr "Ponawianie ostatniej operacji (próba{0})" msgid "Save Configuration" msgstr "Zapisz konfiguracjÄ™" msgid "Saving changes..." msgstr "Zapisywanie zmian..." msgid "Scaling Options" msgstr "Opcje skalowania" msgid "Scan" msgstr "Skanuj" msgid "Scan & Indexing" msgstr "Skanowanie i indeksowanie" msgid "Scan Files and Configurations" msgstr "Skanuj w poszukiwaniu plików i konfiguracji" msgid "Scan complete" msgstr "Skanowanie zakoÅ„czone" msgid "Scan error" msgstr "Błąd skanowania" msgid "Scan for Files" msgstr "Skanuj w poszukiwaniu plików" msgid "Scan for Kickstarts, Files and Configurations" msgstr "Skanuj w poszukiwaniu plików, plików kickstart i konfiguracji" msgid "Scanning .fs-uae files..." msgstr "Skanuje pliki .fs-uae..." msgid "Scanning built-in entries..." msgstr "Skanowanie wbudowany wpisów..." msgid "Scanning configurations" msgstr "Skanowanie konfiguracji" msgid "Scanning configurations ({count} scanned)" msgstr "Skanowanie konfiguracji ({count} przeskanowanych)" msgid "Scanning database entries..." msgstr "Skanowanie wpisów bazy danych ..." msgid "Scanning files" msgstr "Skanowanie plików" msgid "Scanning files ({count} scanned)" msgstr "Skanowanie plików ({count} przeskanowanych)" msgid "Scanning game database entries..." msgstr "Skanowanie wpisów bazy danych gier..." msgid "Select Destination Directory" msgstr "Wybierz katalog docelowy" msgid "Select Multiple CD-ROMs" msgstr "Wybierz kilka obrazów CD-ROM" msgid "Select Multiple Files..." msgstr "Zaznaczanie wielu plików..." msgid "Select Multiple Floppies" msgstr "Zaznacz kilka dyskietek" msgid "Select Source Directory" msgstr "Wybierz katalog źródÅ‚owy" msgid "Select a folder containing Amiga kickstart files and click \"{0}\"" msgstr "Wybierz folder zawierajÄ…cy pliki kickstart i kliknij \"{0}\"" msgid "Settings" msgstr "Ustawienia" msgid "Show kickstart setup page on startup when all ROMs are missing" msgstr "Pokaż ustawienia kickstartu przy starcie, gdy brak plików ROM" msgid "Size:" msgstr "Rozmiar:" msgid "Slow RAM" msgstr "Slow RAM" msgid "Specified directory does not exist" msgstr "Podany katalog nie istnieje" msgid "Start" msgstr "Start" msgid "Start FS-UAE in fullscreen mode" msgstr "Startuj FS-UAE w trybie peÅ‚noekranowym" msgid "Starting FS-UAE..." msgstr "Uruchamianie FS-UAE..." msgid "Starting scan" msgstr "Uruchamianie skanowania" msgid "Swap left and right CTRL keys" msgstr "ZamieÅ„ lewy i prawy klawisz CTRL" msgid "Synchronizing database..." msgstr "Synchronizacja bazy danych..." msgid "Synchronizing personal ratings..." msgstr "Synchronizowanie ocen osobistych..." msgid "Texture filter" msgstr "Filtr teksturowania" msgid "Toggle Between Windowed and Full-Screen Mode" msgstr "Przełącz miÄ™dzy trybem okna a peÅ‚nym ekranem" msgid "Tools" msgstr "NarzÄ™dzia" msgid "Ungrab mouse and keyboard on middle mouse click" msgstr "Zwolnij myszkÄ™ i klawiaturÄ™ po kliku Å›rodkowego przycisku" msgid "Update available ({version})" msgstr "DostÄ™pna aktualizacja ({version})" msgid "Updating database" msgstr "Aktualizacja bazy danych" msgid "Updating game entries:" msgstr "Aktualizacja wpisów gier:" msgid "Use RDB disk images for size >= {0}" msgstr "Użyj obrazów dysków RDB dla rozmiaru >= {0}" msgid "Video Settings" msgstr "Opcje wideo" msgid "Video buffer format and color depth" msgstr "Format buforu wideo i głębia kolorów" msgid "Video synchronization" msgstr "Synchronizacja wideo" msgid "Video synchronization method" msgstr "Metoda synchronizacji wideo" msgid "Video texture format (on the GPU)" msgstr "Format tekstur wideo (dla GPU)" msgid "WHDLoad Arguments" msgstr "Argumenty WHDLoad" msgid "You should have kickstart files for each Amiga model you want to use:" msgstr "Potrzebny jest kickstart dla każdego modelu Amigi jaki chesz emulować:" msgid "Zoom Amiga display (crop)" msgstr "Zbliżenie obrazu Amigi (przyciÄ™cie)" msgid "Zorro III RAM" msgstr "RAM Zorro III" msgid "{amiga_model} with < 2 MB chip memory" msgstr "" #~ msgid "640x400" #~ msgstr "640x400" #~ msgid "640x480" #~ msgstr "640x480" #~ msgid "640x512" #~ msgstr "640x512" #~ msgid "Crop Amiga display (zoom)" #~ msgstr "Przytnij obraz Amigi (zbliżenie)" #~ msgid "Enable experimental net play GUI (requires re-start)" #~ msgstr "Włącz eksperymentalny interfejs gry sieciowej (wymaga restartu)" #~ msgid "Force Full Vsync" #~ msgstr "WymuÅ› peÅ‚nÄ… synchronizacjÄ™" #~ msgid "Kickstart Setup" #~ msgstr "Ustawienia kickstartu" #~ msgid "Scale with original aspect ratio (instead of stretching video)" #~ msgstr "Skaluj wedÅ‚ug oryginalnych proporcji (zamiast rozciÄ…gania wideo)" #~ msgid "Select Directory to Import From" #~ msgstr "Wybierz katalog, z którego importować" #~ msgid "Setup" #~ msgstr "Ustawienia" #~ msgid "Sync to Vblank" #~ msgstr "Synchronizacja Vblank" #~ msgid "Unnamed Configuration" #~ msgstr "Konfiguracja bez nazwy" #~ msgid "Update ({version}) is available" #~ msgstr "DostÄ™pna aktualizacja ({version})" fs-uae-2.2.3+dfsg/launcher/po/fi.po0000644000175000017500000004267012162366654017242 0ustar glaubitzglaubitz# Finnish translations for fs-uae-launcher package. # Copyright (C) 2013 Frode Solheim # This file is distributed under the same license as the fs-uae-launcher package. # Frode Solheim , 2013. # msgid "" msgstr "" "Project-Id-Version: fs-uae-launcher\n" "Report-Msgid-Bugs-To: fs-uae@fengestad.no\n" "POT-Creation-Date: 2013-06-25 21:21+0200\n" "PO-Revision-Date: 2013-03-09 13:28+0200\n" "Last-Translator: Mika Vaisanen \n" "Language-Team: Finnish\n" "Language: fi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" msgid "16-bit" msgstr "16-bittinen" msgid "32-bit BGRA" msgstr "32-bittinen BGRA" msgid "32-bit RGBA" msgstr "32-bittinen RGBA" msgid "640x400 + Border" msgstr "640x400 + kehys" msgid "640x480 + Border" msgstr "640x480 + kehys" msgid "640x512 + Border" msgstr "640x512 + kehys" msgid "ADF & HDF Creator" msgstr "ADF & HDF Levykuvien teko" msgid "ADF - Extended Floppy Disk Image (MFM)" msgstr "ADF - Laajennettu levykkeen levykuva (MFM)" msgid "ADF - Standard Floppy Disk Image" msgstr "ADF - Normaali levykkeen levykuva" msgid "Abort" msgstr "Keskeytä" msgid "About {name}" msgstr "Tietoja {name}ista" msgid "Accurate" msgstr "Tarkka" msgid "Add Directory to Search Path" msgstr "Lisää hakemisto hakupolkuun" msgid "Add Files to List" msgstr "Lisää tiedostoja listalle" msgid "Add Multiple CD-ROMs at Once" msgstr "Lisää useita CD-ROM levyjä kerralla" msgid "Add Multiple Floppies at Once" msgstr "Lisää useita levykkeitä kerralla" msgid "Additional Options" msgstr "Lisävalinnat" msgid "Amiga Forever Import" msgstr "Amiga Forever - tuonti" msgid "Amiga Forever import task started" msgstr "Amiga Forever - tuonti aloitettu" msgid "Amiga Model" msgstr "Amigan malli" msgid "Audio Settings" msgstr "Ääniasetukset" msgid "Auto" msgstr "Automaattinen" msgid "Auto + Border" msgstr "Automaattinen + kehys" msgid "Auto-Fire is Off" msgstr "Automaattitulitus on pois päältä" msgid "Auto-Fire is On" msgstr "Automaattitulitus on päällä" msgid "Available Kickstart Versions" msgstr "Saatavilla olevat Kickstart versiot" msgid "Browse" msgstr "Selaa" msgid "Browse for File" msgstr "Selaa tiedosto" msgid "Browse for Folder" msgstr "Selaa kansio" msgid "Buffer swap only" msgstr "" msgid "Built-in TCP/IP Stack" msgstr "Sisäänrakennettu TCP/IP pino" msgid "Built-in TCP/IP Stack (bsdsocket.library)" msgstr "Sisäänrakennettu TCP/IP pino (bsdsocket.library)" msgid "CD-ROM Drive" msgstr "CD-ROM asema" msgid "CD-ROM Drives" msgstr "CD-ROM asemat" msgid "CD-ROMs" msgstr "CD-ROM:t" msgid "CD32 Pad" msgstr "CD32 Pad-ohjain" msgid "Cancel" msgstr "Peruuta" msgid "Chip RAM" msgstr "Chip muisti" msgid "Choose CD-ROM Image" msgstr "Valitse CD-ROM levyn kuvatiedosto" msgid "Choose Extended ROM" msgstr "Valitse laajennettu ROM" msgid "Choose Floppy Image" msgstr "Valitse levykkeen kuvatiedosto" msgid "Choose Hard Drive" msgstr "Valitse kovalevy" msgid "Choose Kickstart ROM" msgstr "Valitse Kickstart ROM" msgid "Cleaning up..." msgstr "Siivotaan..." msgid "Clear List" msgstr "Tyhjennä lista" msgid "Click 'Scan' button if you want to re-scan" msgstr "Klikkaa 'Skannaus' nappia skannataksesi uudelleen" msgid "Click 'Scan' button to start scan" msgstr "Klikkaa 'Skannaus' nappia käynnistääksesi skannauksen" msgid "Click here to download" msgstr "Lataa klikkaamalla tästä" msgid "Click here to import kickstarts" msgstr "Tuo Kickstart ROMit klikkaamalla tästä" msgid "Close" msgstr "Sulje" msgid "Committing data..." msgstr "Tallennetaan tietoja..." msgid "Config" msgstr "Kokoonpano" msgid "Configuration" msgstr "Kokoonpano" msgid "Configuration Browser" msgstr "Kokoonpanoselain" msgid "Configuration Warning" msgstr "" msgid "Configurations" msgstr "Kokoonpanomääritykset" msgid "Configure Joystick Buttons" msgstr "Määritä peliohjaimen napit" msgid "Connect" msgstr "Yhdistä" msgid "" "Copy {0}\n" "to {1}" msgstr "" "Kopioi {0}\n" "kohteeseen {1}" msgid "Could not open file for writing" msgstr "Tiedostoa ei voi avata kirjoitusta varten" msgid "Create" msgstr "Luo" msgid "Cursor Keys and Right Ctrl/Alt" msgstr "Kursorinäppäimet ja oikea Ctrl/Alt" msgid "Custom" msgstr "Mukautettu" msgid "Custom Configuration" msgstr "Mukautettu kokoonpano" msgid "Custom IRC server address" msgstr "Mukautettu IRC palvelinosoite" msgid "Custom Joystick Port" msgstr "Mukautettu peliohjainportti" msgid "Custom Options" msgstr "Mukautetut valinnat" msgid "Custom Settings" msgstr "Mukautetut asetukset" msgid "Default" msgstr "Oletus" msgid "Default ({0})" msgstr "Oletus ({0})" msgid "Destination Directory:" msgstr "Kohdehakemisto:" msgid "Disconnect" msgstr "Irrota" msgid "Disk Image Name:" msgstr "Levykuvan nimi:" msgid "Disk image created" msgstr "Levykuva luotu" msgid "Download failed (attempt {0}) - retrying in {0} seconds" msgstr "" "Lataus epäonnistui (yrityskerta {0}) - yritetään uudelleen {0} sekunnin " "kuluttua" msgid "Downloading {0}..." msgstr "Ladataan {0}..." msgid "Edit Custom Options" msgstr "Muokkaa mukautettuja valintoja" msgid "Eject" msgstr "Poista levy" msgid "Enable experimental net play GUI (requires restart)" msgstr "" "Aktivoi kokeellinen verkkopeli-käyttöliittymä (vaatii uudelleenkäynnistyksen)" msgid "Enable online database support (requires restart)" msgstr "Aktivoi verkkopelitietokannan tuki (vaatii uudelleenkäynnistyksen)" msgid "Error moving file into place" msgstr "Virhe siirrettäessä tiedostoa paikalleen" msgid "Error writing disk image" msgstr "Virhe levykuvan kirjoittamisessa" msgid "Expansions" msgstr "Laajennukset" msgid "Experimental Features" msgstr "Kokeelliset ominaisuudet" msgid "Extended ROM:" msgstr "Laajennettu ROM:" msgid "FS-UAE Launcher Settings" msgstr "FS-UAE Käynnistimen asetukset" msgid "Fast RAM" msgstr "Fast muisti" msgid "Fetching database entries ({0})" msgstr "Ladataan tietokannan merkintöjä ({0})" msgid "Fetching game ratings ({0})" msgstr "Ladataan pelien arvioita ({0})" msgid "Fetching user game ratings ({0})" msgstr "Ladataan pelien käyttäjäarvioita ({0})" msgid "File already exists" msgstr "Tiedosto on jo olemassa" msgid "Filters" msgstr "Suodattimet" msgid "Filters & Scaling" msgstr "Suodattimet & Skaalaus" msgid "Filters:" msgstr "Suodattimet:" msgid "Floppies" msgstr "Levykkeet" msgid "Floppy Drives" msgstr "Levykeasemat" msgid "Floppy drive volume" msgstr "Levykeaseman äänitaso" msgid "Full Frame" msgstr "Täysi kehys" msgid "Full-scene anti-aliasing (FSAA)" msgstr "Koko ruudun reunojenpehmennys (FSAA)" msgid "Fullscreen" msgstr "Kokoruutu" msgid "Game Database" msgstr "Pelitietokanta" msgid "Game Database Settings" msgstr "Pelitietokannan asetukset" msgid "Game database password" msgstr "Pelitietokannan salasana" msgid "Game database user name" msgstr "Pelitietokannan käyttäjänimi" msgid "Gamepad/Joystick Setup" msgstr "Pad-ohjain/Peliohjain asetukset" msgid "Games and Configurations" msgstr "Pelit ja kokoonpanot" msgid "Grab mouse and keyboard input when FS-UAE starts" msgstr "Kaappaa hiiri ja näppäimistö FS-UAE:n käynnistyksen yhteydessä" msgid "Grab mouse and keyboard input when clicking on FS-UAE window" msgstr "Kaappaa hiiri ja näppäimistö kun FS-UAE ikkunaa klikataan" msgid "HDF - Partitionable Hard Drive Image (RDB)" msgstr "HDF - Monipartitioinen kovalevytiedosto (RDB)" msgid "HDF - Single Partition Hard Disk File" msgstr "HDF - Yksipartitioinen kovalevytiedosto" msgid "Hard Drives" msgstr "Kovalevyt" msgid "Hardware" msgstr "Rauta" msgid "Hardware Options" msgstr "Rautavalinnat" msgid "IRC nickname" msgstr "IRC nimimerkki" msgid "If you own Amiga Forever, select the drive/folder and click \"{0}\"" msgstr "" "Jos omistat Amiga Foreverin, valitse asema ja kansio, sekä klikkaa \"{0}\"" msgid "Import" msgstr "Tuonti" msgid "Import From Amiga Forever CD/DVD" msgstr "Tuo Amiga Forever CD/DVD levyltä" msgid "Import Kickstarts" msgstr "Tuo Kickstart ROMit" msgid "Import Kickstarts and ROMs" msgstr "Tuo Kickstartit ja muut ROMit" msgid "Import task is done" msgstr "Tuonti suoritettu" msgid "Include built-in configurations" msgstr "Sisällytä sisäänrakennetut kokoonpanot" msgid "Input" msgstr "Syöttölaitteet" msgid "Input Options" msgstr "Syöttölaitevalinnat" msgid "Input Settings" msgstr "Syöttölaiteasetukset" msgid "Internal" msgstr "Sisäinen" msgid "Invalid size specified" msgstr "Virheellinen koko määritelty" msgid "Joystick" msgstr "Peliohjain" msgid "Joystick Configuration" msgstr "Peliohjainkokoonpano" msgid "Joystick Ports" msgstr "Peliohjainportit" msgid "Joystick Settings" msgstr "Peliohjainasetukset" msgid "Keep aspect ratio when scaling (do not stretch)" msgstr "Säilytä kuvasuhde skaalatessa (älä venytä)" msgid "Keyboard Settings" msgstr "Näppäimistön asetukset" msgid "Kickstart ROM" msgstr "Kickstart ROM" msgid "Kickstart ROMs are missing" msgstr "Kickstart ROM:it puuttuvat" msgid "Kickstart import task started" msgstr "Kickstart ROMien tuonti aloitettu" msgid "Launching FS-UAE" msgstr "Käynnistetään FS-UAE" msgid "Least Accurate" msgstr "Epätarkka" msgid "Less Accurate" msgstr "Vähemmän tarkka" msgid "List of Folders to Index" msgstr "Lista indeksoitavista kansioista" msgid "Low latency vsync (when using full vsync)" msgstr "Matalaviiveinen vsync (kun vsync käytössä)" msgid "MB" msgstr "MB" msgid "Main Configuration Options" msgstr "Pääkokoonpanovalinnat" msgid "Main Menu" msgstr "Päävalikko" msgid "Media Swap List" msgstr "Median pikavaihtolista" msgid "Memory" msgstr "Muisti" msgid "Mouse" msgstr "Hiiri" msgid "Mouse & Joystick Ports" msgstr "Hiiri- ja peliohjainportit" msgid "Mouse Settings" msgstr "Hiiren asetukset" msgid "Mouse speed (%)" msgstr "Hiiren nopeus (%)" msgid "Net Play" msgstr "Verkkopeli" msgid "Net Play Settings" msgstr "Verkkopeliasetukset" msgid "Net play tag (max 3 characters)" msgstr "Verkkopelitagi (maksimi 3 merkkiä)" msgid "New Configuration" msgstr "Uusi kokoonpanomääritys" msgid "New Disk Image" msgstr "Uusi levykuva" msgid "Nick:" msgstr "Nimimerkki:" msgid "No Device" msgstr "Ei laitetta" msgid "No Host Device" msgstr "Ei isäntälaitetta" msgid "No Joysticks" msgstr "Ei peliohjaimia" msgid "No extended kickstart found for this model. Try 'scan' function." msgstr "" "Laajennettua Kickstartia ei löytynyt tälle mallille. Yritä 'Skannaus' " "toimintoa." msgid "No joysticks are currently connected" msgstr "Peliohjaimia ei ole liitettynä" msgid "No kickstart found for this model. " msgstr "Kickstart ROMia ei löytynyt tälle mallille." msgid "No scan in progress" msgstr "Ei skannausta käynnissä" msgid "Nothing" msgstr "Ei mitään" msgid "OK" msgstr "OK" msgid "Off" msgstr "Pois" msgid "On" msgstr "Päällä" msgid "Open Game Database Entry" msgstr "Avaa pelitietokannan merkintä" msgid "Open Hall of Light Entry" msgstr "Avaa Hall of Light - merkintä" msgid "Open LemonAmiga Entry" msgstr "Avaa LemonAmiga - merkintä" msgid "Open MobyGames Entry" msgstr "Avaa MobyGames - merkintä" msgid "Open Scan Dialog" msgstr "Avaa skannus-ikkuna" msgid "Open Tool to Configure Button Mapping" msgstr "Avaa Nappienmääritystyökalu" msgid "Open Wikipedia Entry" msgstr "Avaa Wikipedia - merkintä" msgid "OpenGL Settings" msgstr "OpenGL asetukset" msgid "Override Installed Memory" msgstr "Ohita asennetun muistin määrä" msgid "Parallel Port Joysticks" msgstr "Rinnakkaisportti-peliohjaimet" msgid "Picasso96 Support" msgstr "Picasso96 - tuki" msgid "Picasso96 Support (uaegfx.card)" msgstr "Picasso96 - tuki (uaegfx.card)" msgid "Please wait..." msgstr "Odota..." msgid "Preferences" msgstr "Asetukset" msgid "Preferred Joystick" msgstr "Ensisijainen peliohjain" msgid "Preferred device for secondary joystick:" msgstr "Ensisijainen laite toissijaiselle peliohjaimelle:" msgid "Preparing WHDLoad..." msgstr "Valmistellaan WHDLoadia..." msgid "Preparing floppy images..." msgstr "Valmistellaan levykuvia..." msgid "Preparing hard drives..." msgstr "Valmistellaan kovalevyjä..." msgid "Preparing..." msgstr "Valmistellaan..." msgid "Purging old entries..." msgstr "Siivotaan vanhoja merkintöjä..." msgid "Refresh Game Database" msgstr "Virkistä pelitietokanta" msgid "Refresh game configurations from database" msgstr "Virkistä pelikokoonpanot tietokannasta" msgid "Refresh list of connected joystick devices" msgstr "Virkistä liitettyjen peliohjaimien lista" msgid "Remove Directory from Search Path" msgstr "Poista hakemisto hakupolusta" msgid "Remove Selected Files" msgstr "Poista valitut tiedostot" msgid "Render scan lines" msgstr "Renderöi pyyhkäisyjuovat" msgid "Render scan lines in RTG graphics mode" msgstr "Renderöi pyyhkäisyjuovat RTG grafiikkatilassa" msgid "Resetting database..." msgstr "Resetoidaan tietokantaa..." msgid "Restoring changes..." msgstr "Palautetaan muutokset..." msgid "Retrying last operation (attempt {0})" msgstr "Yritetään viimeistä toimintoa uudelleen (yrityskerta {0})" msgid "Save Configuration" msgstr "Tallenna kokoonpano" msgid "Saving changes..." msgstr "Tallennetaan muutoksia..." msgid "Scaling Options" msgstr "Skaalausvalinnat" msgid "Scan" msgstr "Skannaus" msgid "Scan & Indexing" msgstr "Skannaus & indeksointi" msgid "Scan Files and Configurations" msgstr "Skannaa tiedostoja ja kokoonpanoja" msgid "Scan complete" msgstr "Skannaus suoritettu" msgid "Scan error" msgstr "Skannausvirhe" msgid "Scan for Files" msgstr "Skannaa tiedostoja" msgid "Scan for Kickstarts, Files and Configurations" msgstr "Skannaa Kickstartit, tiedostot ja kokoonpanomääritykset" msgid "Scanning .fs-uae files..." msgstr "Skannataan .fs-uae tiedostot..." msgid "Scanning built-in entries..." msgstr "Skannataan sisäänrakennettuja merkintöjä..." msgid "Scanning configurations" msgstr "Skannataan kokoonpanomäärityksiä" msgid "Scanning configurations ({count} scanned)" msgstr "Skannataan kokoonpanomäärityksiä ({count} skannattu)" msgid "Scanning database entries..." msgstr "Skannataan tietokantamerkintöjä..." msgid "Scanning files" msgstr "Skannataan tiedostoja" msgid "Scanning files ({count} scanned)" msgstr "Skannataan tiedostoja ({count} skannattu)" msgid "Scanning game database entries..." msgstr "Skannataan pelitietokannan merkintöjä..." msgid "Select Destination Directory" msgstr "Valitse kohdehakemisto" msgid "Select Multiple CD-ROMs" msgstr "Valitse useita CD-ROM:eja " msgid "Select Multiple Files..." msgstr "Valitse useita tiedostoja..." msgid "Select Multiple Floppies" msgstr "Valitse useita levykkeitä" msgid "Select Source Directory" msgstr "Valitse lähdehakemisto" msgid "Select a folder containing Amiga kickstart files and click \"{0}\"" msgstr "" "Valitse kansio joka sisältää Amiga kickstart ROM tiedostot ja klikkaa \"{0}\"" msgid "Settings" msgstr "Asetukset" msgid "Show kickstart setup page on startup when all ROMs are missing" msgstr "Näytä Kickstart-asetukset käynnistettäessä jos yhtään ROMia ei löydy" msgid "Size:" msgstr "Koko:" msgid "Slow RAM" msgstr "Slow muisti" msgid "Specified directory does not exist" msgstr "Määriteltyä hakemistoa ei ole olemassa" msgid "Start" msgstr "Käynnistä" msgid "Start FS-UAE in fullscreen mode" msgstr "Käynnistä FS-UAE kokoruututilassa" msgid "Starting FS-UAE..." msgstr "Käynnistetään FS-UAE..." msgid "Starting scan" msgstr "Käynnistetään skannaus" msgid "Swap left and right CTRL keys" msgstr "Vaihda vasemman ja oikean CTRL napin paikkoja" msgid "Synchronizing database..." msgstr "Tietokannan synkronointi..." msgid "Synchronizing personal ratings..." msgstr "Henkilökohtaisten arvioiden synkronointi..." msgid "Texture filter" msgstr "Tekstuurisuodatin" msgid "Toggle Between Windowed and Full-Screen Mode" msgstr "Vaihda ikkuna- ja kokoruututilan välillä" msgid "Tools" msgstr "Työkalut" msgid "Ungrab mouse and keyboard on middle mouse click" msgstr "Vapauta hiiri ja näppäimistö hiiren keskinapin klikkauksella" msgid "Update available ({version})" msgstr "Päivitys saatavilla ({version})" msgid "Updating database" msgstr "Päivitetään tietokantaa" msgid "Updating game entries:" msgstr "Päivitetään pelien merkintöjä:" msgid "Use RDB disk images for size >= {0}" msgstr "Käytä RDB-levykuvia jos koko >= {0}" msgid "Video Settings" msgstr "Näyttöasetukset" msgid "Video buffer format and color depth" msgstr "Näyttöpuskurin muoto ja värisyvyys" msgid "Video synchronization" msgstr "Näytön synkronointi" msgid "Video synchronization method" msgstr "Näytön synkronointimenetelmä" msgid "Video texture format (on the GPU)" msgstr "Näytön tekstuurimuoto (GPU:lla)" msgid "WHDLoad Arguments" msgstr "WHDLoad optiot" msgid "You should have kickstart files for each Amiga model you want to use:" msgstr "" "Sinulla täytyy olla Kickstart tiedosto jokaiselle Amiga-mallille mitä haluat " "käyttää:" msgid "Zoom Amiga display (crop)" msgstr "Zoomaa Amiga-näyttö (leikkaa)" msgid "Zorro III RAM" msgstr "Zorro III muisti" msgid "{amiga_model} with < 2 MB chip memory" msgstr "" #~ msgid "ADF - MFM Extended Floppy Disk Image" #~ msgstr "ADF- MFM Laajennettu levykkeen levykuva" #~ msgid "Error writing disk image:" #~ msgstr "Virhe kirjoitettaessa levykuvaa:" #~ msgid "Force Full Vsync" #~ msgstr "Pakota täysi Vsync" #~ msgid "Kickstart Setup" #~ msgstr "Kickstart asetuset" #~ msgid "Select Directory to Import From" #~ msgstr "Valitse hakemisto tuontia varten" #~ msgid "Sync to Vblank" #~ msgstr "Synkronoi Vblank:iin" #~ msgid "Update ({version}) is available" #~ msgstr "Päivitys ({version}) on saatavilla" fs-uae-2.2.3+dfsg/launcher/Makefile.mk0000644000175000017500000000165012162366654017725 0ustar glaubitzglaubitzprefix := /usr all: mo share/locale/%/LC_MESSAGES/fs-uae-launcher.mo: po/%.po mkdir -p share/locale/$*/LC_MESSAGES msgfmt --verbose $< -o $@ catalogs = \ share/locale/cs/LC_MESSAGES/fs-uae-launcher.mo \ share/locale/de/LC_MESSAGES/fs-uae-launcher.mo \ share/locale/es/LC_MESSAGES/fs-uae-launcher.mo \ share/locale/fi/LC_MESSAGES/fs-uae-launcher.mo \ share/locale/fr/LC_MESSAGES/fs-uae-launcher.mo \ share/locale/it/LC_MESSAGES/fs-uae-launcher.mo \ share/locale/nb/LC_MESSAGES/fs-uae-launcher.mo \ share/locale/pl/LC_MESSAGES/fs-uae-launcher.mo \ share/locale/pt/LC_MESSAGES/fs-uae-launcher.mo \ share/locale/sr/LC_MESSAGES/fs-uae-launcher.mo \ share/locale/tr/LC_MESSAGES/fs-uae-launcher.mo mo: $(catalogs) install: mkdir -p $(DESTDIR)$(prefix)/share cp -a share/* $(DESTDIR)$(prefix)/share mkdir -p $(DESTDIR)$(prefix)/share/doc/fs-uae-launcher cp -a README COPYING $(DESTDIR)$(prefix)/share/doc/fs-uae-launcher fs-uae-2.2.3+dfsg/launcher/fs-uae-launcher.py0000755000175000017500000000007712162366654021215 0ustar glaubitzglaubitz#!/usr/bin/env python from fs_uae_launcher import main main() fs-uae-2.2.3+dfsg/launcher/share/0000755000175000017500000000000012162366654016757 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/launcher/share/applications/0000755000175000017500000000000012162366654021445 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/launcher/share/applications/fs-uae-launcher.desktop0000644000175000017500000000034412162366654026020 0ustar glaubitzglaubitz[Desktop Entry] Name=FS-UAE Launcher Comment=Launcher for FS-UAE Amiga Emulator TryExec=fs-uae-launcher Exec=fs-uae-launcher %f StartupNotify=true Terminal=false Type=Application Icon=fs-uae-launcher Categories=System;Emulator; fs-uae-2.2.3+dfsg/launcher/share/fs-uae-launcher/0000755000175000017500000000000012162366654021736 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/launcher/share/fs-uae-launcher/share-dir0000644000175000017500000000000012162366654023525 0ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/launcher/share/fs-uae-launcher/fs-uae-launcher.ico0000755000175000017500000007644612162366654025435 0ustar glaubitzglaubitz hF ¨®00 ¨%V@@ (Bþ:(  @ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿¤–8·™ŒÑ²“‡ç±’†ç±’†ç±’†ç±’†ç±’†ç±’†ç±’†ç±’†ç²“‡ç·™ŒÑ¿¤–8ÿÿÿÿÿÿ¶™ŒÑ]3#ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿ]3#ÿ¶™ŒÑÿÿÿÿÿÿ±“‡çL#ÿL)ÿ?Û$ÿ9É=ÿ1à-ÿI™AÿL#ÿ†j_ÿ^9*ÿ…i^ÿ…i^ÿL#ÿ±“‡çÿÿÿÿÿÿ¯‘…èH!ÿ¡œÿ»Ì/ÿòYÿf³`ÿñ[ÿPC.ÿ…kaÿ~bXÿ–vÿhG;ÿH!ÿ¯‘…èÿÿÿÿÿÿ®…è^/ÿñƒÿ”^.ÿ˜©Lÿè”ÿ4§qÿ4ƉÿD ÿDÿDÿDÿDÿ®…èÿÿÿÿÿÿ¯‘…èj$ÿy2)ÿ}(ÿh/$ÿ ÉžÿB¬ÿîºÿQp]ÿJ"ÿJ"ÿJ"ÿJ"ÿ¯‘…èÿÿÿÿÿÿ°‘†èQ&ÿQ&ÿQ&ÿQ&ÿIC3ÿ óãÿH‰~ÿäÖÿU/ ÿQ&ÿQ&ÿQ&ÿ°‘†èÿÿÿÿÿÿ±’†èX*ÿX*ÿX*ÿX*ÿX*ÿ5Ž—ÿ/½Ðÿ »ÏÿH—ŸÿX*ÿX*ÿX*ÿ±’†èÿÿÿÿÿÿ²“‡è_.ÿ_.ÿ_.ÿ_.ÿ_.ÿ]1!ÿ çÿRw‹ÿ ¦òÿaJDÿ_.ÿ_.ÿ²“‡èÿÿÿÿÿÿµ•ˆèn;(ÿn;(ÿn;(ÿn;(ÿn;(ÿn;(ÿRQiÿwëÿAj¦ÿ5wÊÿo<*ÿn;(ÿµ•ˆèÿÿÿÿÿÿ¹™Œè‚N9ÿ‚N9ÿ‚N9ÿ‚N9ÿ‚N9ÿ‚N9ÿ‚N9ÿ-LÊÿI]´ÿEíÿj_€ÿ‚N9ÿ¹™Œèÿÿÿÿÿÿ½œç–`Kÿ–`Kÿ–`Kÿ–`Kÿ–`Kÿ–`Kÿ–`Kÿ…W`ÿ95ÈÿlR…ÿME³ÿ–aLÿ½œçÿÿÿÿÿÿÁ¡•Ñ­ydÿªs]ÿªs]ÿªs]ÿªs]ÿªs]ÿªs]ÿªs]ÿªs]ÿªs]ÿªs]ÿ­ydÿÁ¡•ÑÿÿÿÿÿÿĨ›8ã—Ñâ•ç¡•ç¡•ç¡•ç¡•ç¡•ç¡•ç¡•ç¡•çâ•çã—ÑĨ›8ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ( @ €ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿı ŨžÃ¦›àĨÿĨÿĨÿĨÿĨÿĨÿĨÿĨÿĨÿĨÿĨÿĨÿĨÿĨÿĨÿĨÿĨÿĨÿĨÿĨÿæ›àŨžÄ± ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿı æ›ÜĨþ¡€sÿŽj\ÿŒgYÿŒgYÿŒgYÿŒgYÿŒgYÿŒgYÿŒgYÿŒgYÿŒgYÿŒgYÿŒgYÿŒgYÿŒgYÿŒgYÿŒgYÿŒgYÿŒgYÿŒgYÿŽj\ÿ¡€sÿĨþæ›Üı ÿÿÿÿÿÿÿÿÿÿÿÿŨžÄ¨þrK<ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿrK<ÿĨþŨžÿÿÿÿÿÿÿÿÿÿÿÿæ›à sÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿ sÿæ›àÿÿÿÿÿÿÿÿÿÿÿÿĨÿ‹h[ÿM#ÿM#ÿM#ÿM#ÿ8{ÿ&Ü#ÿ/Ó.ÿ]V:ÿ'Ìÿ+Ù*ÿN¦EÿO&ÿM#ÿM#ÿO&ÿ™xÿM#ÿM#ÿvVJÿ¦‘‰ÿ…}ÿO&ÿM#ÿM#ÿ‹h[ÿĨÿÿÿÿÿÿÿÿÿÿÿÿÿĨÿˆfXÿK#ÿK#ÿK#ÿP4ÿôÿ-ö$ÿÿ$ÿ<ÍMÿuöÿþ%ÿú(ÿ_jJÿK#ÿK#ÿO'ÿµ¤žÿX3$ÿO(ÿ†k`ÿW2#ÿ± ™ÿ^:,ÿK#ÿK#ÿˆfXÿĨÿÿÿÿÿÿÿÿÿÿÿÿÿĨÿ‡eXÿI"ÿI"ÿI"ÿ¦²ÿØÿÿ Ð:ÿùFÿþFÿŠÄTÿ3ÃKÿÿEÿ.Ø[ÿR0#ÿI"ÿM&ÿµ°ÿ’zqÿb@3ÿ‡mcÿ®–ÿcXÿI"ÿI"ÿI"ÿ‡eXÿĨÿÿÿÿÿÿÿÿÿÿÿÿÿĨÿ†eXÿG!ÿG!ÿsVÿþýÿôóÿkU>ÿjá?ÿÿgÿ äpÿSF3ÿ ñfÿÿgÿW”hÿG!ÿK%ÿµ°ÿ‘zqÿuYMÿœˆ€ÿ’|sÿ±¡›ÿH#ÿG!ÿG!ÿ†eXÿĨÿÿÿÿÿÿÿÿÿÿÿÿÿĨÿ…dWÿE ÿH"ÿ㜠ÿÿ­ÿ©ˆIÿ†Rÿù¯ÿðÿÿˆÿNª|ÿ.vBÿÿˆÿî‰ÿYF9ÿE ÿW5'ÿW5'ÿP-ÿF"ÿX7)ÿF"ÿE ÿE ÿE ÿ…dWÿĨÿÿÿÿÿÿÿÿÿÿÿÿÿĨÿ…dWÿE ÿAÿÿ]ÿài$ÿZ7'ÿð]ÿÿ]ÿmeÿÿ¥ÿ õ£ÿ\XKÿÔÿÿ¥ÿD¼ÿG$ÿE ÿE ÿE ÿE ÿE ÿE ÿE ÿE ÿE ÿ…dWÿĨÿÿÿÿÿÿÿÿÿÿÿÿÿĨÿ†eXÿL!ÿÁ#ÿÏ+!ÿ|F=ÿÿÏ* ÿ·<3ÿO- ÿ¾‹ÿÿ¹ÿ8̤ÿBP8ÿý¸ÿú·ÿ^m_ÿH"ÿH"ÿH"ÿH"ÿH"ÿH"ÿH"ÿH"ÿH"ÿ†eXÿĨÿÿÿÿÿÿÿÿÿÿÿÿÿĨÿˆfYÿL#ÿL#ÿL#ÿL#ÿL#ÿL#ÿL#ÿL#ÿD;)ÿùÉÿþÍÿ]ƒtÿ%¦„ÿÿÎÿ,Ú¸ÿV3&ÿL#ÿL#ÿL#ÿL#ÿL#ÿL#ÿL#ÿL#ÿˆfYÿĨÿÿÿÿÿÿÿÿÿÿÿÿÿĨÿŠgZÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿ-zÿÿãÿæÐÿYG;ÿ ðÖÿÿãÿW™ŽÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿŠgZÿĨÿÿÿÿÿÿÿÿÿÿÿÿÿĨÿŒhZÿS'ÿS'ÿS'ÿS'ÿS'ÿS'ÿS'ÿS'ÿS'ÿQ+ÿãÜÿÿøÿN­ªÿ8wkÿÿøÿïéÿcNCÿS'ÿS'ÿS'ÿS'ÿS'ÿS'ÿS'ÿŒhZÿĨÿÿÿÿÿÿÿÿÿÿÿÿÿĨÿi[ÿV)ÿV)ÿV)ÿV)ÿV)ÿV)ÿV)ÿV)ÿV)ÿV)ÿA[Tÿíÿÿ æöÿf^WÿÄÏÿíÿÿD¶¾ÿX-ÿV)ÿV)ÿV)ÿV)ÿV)ÿV)ÿi[ÿĨÿÿÿÿÿÿÿÿÿÿÿÿÿĨÿj\ÿZ+ÿZ+ÿZ+ÿZ+ÿZ+ÿZ+ÿZ+ÿZ+ÿZ+ÿZ+ÿZ+ÿ# ¸ÿÒÿÿ7´ÏÿQMHÿÐýÿÐûÿenmÿZ+ÿZ+ÿZ+ÿZ+ÿZ+ÿZ+ÿj\ÿĨÿÿÿÿÿÿÿÿÿÿÿÿÿĨÿ‘k\ÿ]-ÿ]-ÿ]-ÿ]-ÿ]-ÿ]-ÿ]-ÿ]-ÿ]-ÿ]-ÿ]-ÿT;1ÿ³÷ÿ·þÿbz„ÿ-~Ÿÿ·ÿÿ)©Üÿe=.ÿ]-ÿ]-ÿ]-ÿ]-ÿ]-ÿ‘k\ÿĨÿÿÿÿÿÿÿÿÿÿÿÿÿĨÿ“l]ÿa/ÿa/ÿa/ÿa/ÿa/ÿa/ÿa/ÿa/ÿa/ÿa/ÿa/ÿa/ÿ8c†ÿœÿÿ™èÿhKCÿ •íÿœÿÿY€›ÿa/ÿa/ÿa/ÿa/ÿa/ÿ“l]ÿĨÿÿÿÿÿÿÿÿÿÿÿÿÿĨÿ—p`ÿi7#ÿi7#ÿi7#ÿi7#ÿi7#ÿi7#ÿi7#ÿi7#ÿi7#ÿi7#ÿi7#ÿi7#ÿg8&ÿzàÿÿÿO~°ÿGSqÿÿÿ‚ñÿpVMÿi7#ÿi7#ÿi7#ÿi7#ÿ—p`ÿĨÿÿÿÿÿÿÿÿÿÿÿÿÿĨÿœteÿs@,ÿs@,ÿs@,ÿs@,ÿs@,ÿs@,ÿs@,ÿs@,ÿs@,ÿs@,ÿs@,ÿs@,ÿs@,ÿXI_ÿfÿÿ i÷ÿtbdÿ bÏÿfÿÿCuÂÿtD1ÿs@,ÿs@,ÿs@,ÿœteÿĨÿÿÿÿÿÿÿÿÿÿÿÿÿĨÿ¡yiÿ}I5ÿ}I5ÿ}I5ÿ}I5ÿ}I5ÿ}I5ÿ}I5ÿ}I5ÿ}I5ÿ}I5ÿ}I5ÿ}I5ÿ}I5ÿ}I5ÿ/O¼ÿKÿÿ5bÑÿmPZÿLüÿMüÿrizÿ}I5ÿ}I5ÿ}I5ÿ¡yiÿĨÿÿÿÿÿÿÿÿÿÿÿÿÿĨÿ¦}nÿ‡R>ÿ‡R>ÿ‡R>ÿ‡R>ÿ‡R>ÿ‡R>ÿ‡R>ÿ‡R>ÿ‡R>ÿ‡R>ÿ‡R>ÿ‡R>ÿ‡R>ÿ‡R>ÿ{OOÿ4öÿ0ÿÿkh‘ÿ?C¨ÿ0ÿÿ(IÞÿˆ\Kÿ‡R>ÿ‡R>ÿ¦}nÿĨÿÿÿÿÿÿÿÿÿÿÿÿÿĨÿ«‚rÿ‘\Gÿ‘\Gÿ‘\Gÿ‘\Gÿ‘\Gÿ‘\Gÿ‘\Gÿ‘\Gÿ‘\Gÿ‘\Gÿ‘\Gÿ‘\Gÿ‘\Gÿ‘\Gÿ‘\GÿS@™ÿÿÿ+éÿŠf`ÿîÿÿÿ`^¦ÿ‘\Gÿ‘\Gÿ«‚rÿĨÿÿÿÿÿÿÿÿÿÿÿÿÿĨÿ°ˆxÿ›eOÿ›eOÿ›eOÿ›eOÿ›eOÿ›eOÿ›eOÿ›eOÿ›eOÿ›eOÿ›eOÿ›eOÿ›eOÿ›eOÿ›eOÿ™dQÿjKŽÿgN“ÿŽfgÿUmÿgN“ÿuX…ÿ›gRÿ›eOÿ°ˆxÿĨÿÿÿÿÿÿÿÿÿÿÿÿÿħœàº–ˆÿ¥nXÿ¥nXÿ¥nXÿ¥nXÿ¥nXÿ¥nXÿ¥nXÿ¥nXÿ¥nXÿ¥nXÿ¥nXÿ¥nXÿ¥nXÿ¥nXÿ¥nXÿ¥nXÿ¥nXÿ¥nXÿ¥nXÿ¥nXÿ¥nXÿ¥nXÿ¥nXÿ¥nXÿº–ˆÿħœàÿÿÿÿÿÿÿÿÿÿÿÿŨžÄ¨þµ…rÿ¯waÿ¯waÿ¯waÿ¯waÿ¯waÿ¯waÿ¯waÿ¯waÿ¯waÿ¯waÿ¯waÿ¯waÿ¯waÿ¯waÿ¯waÿ¯waÿ¯waÿ¯waÿ¯waÿ¯waÿ¯waÿ¯waÿµ…rÿĨþŨžÿÿÿÿÿÿÿÿÿÿÿÿı ħœÜĨþÁœÿ¿•…ÿ¿•„ÿ¿•„ÿ¿•„ÿ¿•„ÿ¿•„ÿ¿•„ÿ¿•„ÿ¿•„ÿ¿•„ÿ¿•„ÿ¿•„ÿ¿•„ÿ¿•„ÿ¿•„ÿ¿•„ÿ¿•„ÿ¿•„ÿ¿•„ÿ¿•…ÿÁœÿĨþħœÜı ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿı ŨžÄ§œàĨÿĨÿĨÿĨÿĨÿĨÿĨÿĨÿĨÿĨÿĨÿĨÿĨÿĨÿĨÿĨÿĨÿĨÿĨÿĨÿħœàŨžÄ± ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ(0` €% "$%%%%%%%%%%%%%%%%%%%%%%%%%%%%$! 2IYcfgggggggggggggggggggggggggggge_SA* $A85a’}v¿©‡â¿£™úĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿ¿£™ú§‡ä‹voÉ/(%†\9"‚pj–¿£™øÄ¨žÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿ½¡—úl]X´d9ŠunĨÿĨÿĨÿ©ˆ|ÿl_ÿˆcUÿˆcUÿˆcUÿˆcUÿˆcUÿˆcUÿˆcUÿˆcUÿˆcUÿˆcUÿˆcUÿˆcUÿˆcUÿˆcUÿˆcUÿˆcUÿˆcUÿˆcUÿˆcUÿˆcUÿˆcUÿˆcUÿˆcUÿˆcUÿˆcUÿˆcUÿˆcUÿˆcUÿˆcUÿˆcUÿl_ÿ©ˆ|ÿĨÿĨÿĨÿl]X´\*  ZMHFÀ¤š÷Ĩÿ»ž’ÿsK;ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿsK;ÿ»ž’ÿĨÿ½¡—ú/(%†A¤Œ„ªÄ¨žÿĨÿrK;ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿrK;ÿĨÿĨžÿ‹voÉS´™ÔĨžÿ¨ˆ|ÿP$ÿP$ÿP$ÿP$ÿP$ÿP$ÿP$ÿP$ÿP$ÿP$ÿP$ÿP$ÿP$ÿP$ÿP$ÿP$ÿP$ÿP$ÿP$ÿP$ÿP$ÿP$ÿP$ÿP$ÿP$ÿP$ÿP$ÿP$ÿP$ÿP$ÿP$ÿP$ÿP$ÿP$ÿP$ÿP$ÿP$ÿP$ÿ¨ˆ|ÿĨžÿ§‡ä^!Á¥›÷ĨžÿŽk^ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿŽk^ÿĨžÿ¿£™úd$ĨžÿĨžÿ…bTÿM#ÿM#ÿM#ÿM#ÿM#ÿM#ÿL%ÿ,Þÿÿ ÿÿ ÿÿ ÿ[¯^ÿIoÿü ÿÿ ÿÿ ÿè%ÿkXOÿM#ÿM#ÿM#ÿM#ÿM#ÿ}_SÿÀ±¬ÿM#ÿM#ÿM#ÿN$ÿ£…ÿʽ¹ÿÐÄÀÿ¨”ŒÿR)ÿM#ÿM#ÿM#ÿM#ÿ…bTÿĨžÿĨžÿg%ĨžÿĨžÿ„bTÿL#ÿL#ÿL#ÿL#ÿL#ÿL#ÿ`~ ÿ}ÿÿ3ýÿÿ ÿÿ ÿò,ÿ´Wÿjÿÿþ!ÿÿ ÿÿ ÿQ¹]ÿT0#ÿL#ÿL#ÿL#ÿL#ÿ|_SÿÀ±¬ÿL#ÿL#ÿL#ÿsSGÿÈ»¶ÿY3$ÿX2#ÿË¿»ÿtTHÿL#ÿL#ÿL#ÿL#ÿ„bTÿĨžÿĨžÿg%ĨžÿĨžÿƒaTÿJ"ÿJ"ÿJ"ÿJ"ÿJ"ÿU5ÿ¿óÿÅÿÿ·ÿÿ ø9ÿÿ5ÿÿ5ÿ@Ê\ÿ¸ä ÿZö&ÿÿ5ÿÿ5ÿ ÷;ÿowcÿJ"ÿJ"ÿJ"ÿJ"ÿ{^SÿÈ»·ÿ†kaÿ†kaÿa>1ÿJ"ÿP)ÿpPDÿžˆ€ÿÏÅÁÿb?2ÿJ"ÿJ"ÿJ"ÿJ"ÿƒaTÿĨžÿĨžÿg%ĨžÿĨžÿƒaSÿI!ÿI!ÿI!ÿI!ÿI!ÿ¨° ÿÞÿÿÞÿÿÍçÿA–LÿÿJÿÿJÿýKÿ°kÿ–¦^ÿ èHÿÿJÿÿJÿ6Ócÿ]A7ÿI!ÿI!ÿI!ÿz]RÿÊ¿ºÿš„|ÿš„|ÿhG;ÿJ"ÿµ¤žÿÎÿÿ¦’‹ÿmMAÿI!ÿI!ÿI!ÿI!ÿI!ÿƒaSÿĨžÿĨžÿg%ĨžÿĨžÿ‚aSÿH!ÿH!ÿH!ÿH!ÿrWÿ÷ÿÿ÷ÿÿöþÿ™•bÿJ%ÿ-òPÿÿ`ÿÿ`ÿ#âkÿrc^ÿ2f*ÿÿ`ÿÿ`ÿÿ`ÿf›vÿJ%ÿH!ÿH!ÿz]Rÿ¾±«ÿH!ÿH!ÿH!ÿdC6ÿ;ÿS/!ÿ\9,ÿª˜‘ÿN)ÿH!ÿH!ÿH!ÿH!ÿ‚aSÿĨžÿĨžÿg%ĨžÿĨžÿ‚`SÿG ÿG ÿG ÿJ"ÿã¿ÿÿÜÿÿÜÿκ<ÿY<1ÿh ÿÏãÿþtÿÿuÿÿuÿX°€ÿM*ÿÁ\ÿÿuÿÿuÿéyÿiYQÿG ÿG ÿy\RÿÑÇÄÿÎÄÀÿÎÄÀÿ­œ–ÿK$ÿ­œ–ÿÌÁ½ÿȽ¸ÿ“|tÿG ÿG ÿG ÿG ÿG ÿ‚`SÿĨžÿĨžÿg%ĨžÿĨžÿ`SÿE ÿE ÿE ÿ›_ ÿÿ©ÿÿ©ÿô¦ÿ{j\ÿR*ÿò¡ÿÿ©ÿlÚQÿÿŠÿÿŠÿ ôŠÿlmbÿ<>!ÿú‡ÿÿŠÿÿŠÿO¼‰ÿO/#ÿE ÿF"ÿI%ÿI%ÿI%ÿI$ÿE ÿE ÿP-ÿI$ÿE ÿE ÿE ÿE ÿE ÿE ÿ`SÿĨžÿĨžÿg%ĨžÿĨžÿ€_SÿDÿDÿY(ÿøsÿÿuÿÿuÿ±€WÿK)ÿµT ÿÿuÿÿuÿÚ‚#ÿ ñšÿÿŸÿÿŸÿ=Í—ÿU9/ÿ#XÿÿŸÿÿŸÿøžÿm{nÿDÿDÿDÿDÿDÿDÿDÿDÿDÿDÿDÿDÿDÿDÿDÿDÿ€_SÿĨžÿĨžÿg%ĨžÿĨžÿ`SÿF ÿF ÿÆ9 ÿÿAÿÿAÿàU%ÿdNEÿn'ÿþAÿÿAÿþBÿpaÿ.tLÿÿ¬ÿÿ¬ÿþ¬ÿi’ÿE(ÿ ã›ÿÿ¬ÿÿ¬ÿ3Õ ÿ\C9ÿF ÿF ÿF ÿF ÿF ÿF ÿF ÿF ÿF ÿF ÿF ÿF ÿF ÿF ÿF ÿ`SÿĨžÿĨžÿg%ĨžÿĨžÿ‚aTÿH!ÿeÿÙÿß&ÿÞ&ÿ‰ZTÿH"ÿ° ÿÞ%ÿß&ÿ½?6ÿZ=3ÿH!ÿÌ”ÿÿ¹ÿÿ¹ÿ ä¯ÿgRIÿ3aCÿÿ¹ÿÿ¹ÿÿ¹ÿdŸÿK&ÿH!ÿH!ÿH!ÿH!ÿH!ÿH!ÿH!ÿH!ÿH!ÿH!ÿH!ÿH!ÿH!ÿH!ÿ‚aTÿĨžÿĨžÿg%ĨžÿĨžÿ„bTÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿ>I3ÿüÄÿÿÆÿÿÆÿU´žÿQ- ÿ¼‘ÿÿÆÿÿÆÿë¼ÿl^VÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿ„bTÿĨžÿĨžÿg%ĨžÿĨžÿ…bUÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿ#ž€ÿÿÔÿÿÔÿ öÎÿorkÿD?,ÿøÎÿÿÔÿÿÔÿM¾«ÿW4(ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿ…bUÿĨžÿĨžÿg%ĨžÿĨžÿ†cUÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿK0ÿ ìÐÿÿáÿÿáÿ:Ͼÿ_?4ÿ*ŽwÿÿáÿÿáÿùÝÿo€yÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿ†cUÿĨžÿĨžÿg%ĨžÿĨžÿ‡dVÿQ'ÿQ'ÿQ'ÿQ'ÿQ'ÿQ'ÿQ'ÿQ'ÿQ'ÿQ'ÿQ'ÿQ'ÿQ'ÿQ'ÿQ'ÿ5q_ÿÿîÿÿîÿþíÿh•ÿQ.ÿâÒÿÿîÿÿîÿ0ØÍÿeJ>ÿQ'ÿQ'ÿQ'ÿQ'ÿQ'ÿQ'ÿQ'ÿQ'ÿQ'ÿQ'ÿQ'ÿQ'ÿ‡dVÿĨžÿĨžÿg%ĨžÿĨžÿ‰dVÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿÉÂÿÿüÿÿüÿçäÿnWNÿ=bUÿÿüÿÿüÿÿüÿc£¡ÿW-ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿ‰dVÿĨžÿĨžÿg%ĨžÿĨžÿŠeWÿV)ÿV)ÿV)ÿV)ÿV)ÿV)ÿV)ÿV)ÿV)ÿV)ÿV)ÿV)ÿV)ÿV)ÿV)ÿV)ÿII<ÿîûÿòÿÿòÿÿS²·ÿ\3$ÿ±µÿòÿÿòÿÿâíÿqb[ÿV)ÿV)ÿV)ÿV)ÿV)ÿV)ÿV)ÿV)ÿV)ÿV)ÿV)ÿŠeWÿĨžÿĨžÿg%ĨžÿĨžÿ‹eWÿX*ÿX*ÿX*ÿX*ÿX*ÿX*ÿX*ÿX*ÿX*ÿX*ÿX*ÿX*ÿX*ÿX*ÿX*ÿX*ÿX*ÿ*‹”ÿáÿÿáÿÿ ÛöÿrurÿO>1ÿÚöÿáÿÿáÿÿJ³Áÿa;-ÿX*ÿX*ÿX*ÿX*ÿX*ÿX*ÿX*ÿX*ÿX*ÿX*ÿ‹eWÿĨžÿĨžÿg%ĨžÿĨžÿŒfXÿZ,ÿZ,ÿZ,ÿZ,ÿZ,ÿZ,ÿZ,ÿZ,ÿZ,ÿZ,ÿZ,ÿZ,ÿZ,ÿZ,ÿZ,ÿZ,ÿZ,ÿV3$ÿ ¿èÿÏÿÿÏÿÿ7´ÑÿgF9ÿ1x„ÿÏÿÿÏÿÿÌúÿr‚ÿZ,ÿZ,ÿZ,ÿZ,ÿZ,ÿZ,ÿZ,ÿZ,ÿZ,ÿZ,ÿŒfXÿĨžÿĨžÿg%ĨžÿĨžÿgXÿ\-ÿ\-ÿ\-ÿ\-ÿ\-ÿ\-ÿ\-ÿ\-ÿ\-ÿ\-ÿ\-ÿ\-ÿ\-ÿ\-ÿ\-ÿ\-ÿ\-ÿ\-ÿ>\dÿ¾ÿÿ¾ÿÿ¾ÿÿh‹—ÿ[2"ÿ©Ýÿ¾ÿÿ¾ÿÿ-®ÚÿmPDÿ\-ÿ\-ÿ\-ÿ\-ÿ\-ÿ\-ÿ\-ÿ\-ÿ\-ÿgXÿĨžÿĨžÿg%ĨžÿĨžÿgYÿ_.ÿ_.ÿ_.ÿ_.ÿ_.ÿ_.ÿ_.ÿ_.ÿ_.ÿ_.ÿ_.ÿ_.ÿ_.ÿ_.ÿ_.ÿ_.ÿ_.ÿ_.ÿ_.ÿŒÂÿ­ÿÿ­ÿÿ§èÿt]SÿGMUÿ­ÿÿ­ÿÿ­ÿÿa¥ÿa3"ÿ_.ÿ_.ÿ_.ÿ_.ÿ_.ÿ_.ÿ_.ÿ_.ÿgYÿĨžÿĨžÿg%ĨžÿĨžÿhYÿa/ÿa/ÿa/ÿa/ÿa/ÿa/ÿa/ÿa/ÿa/ÿa/ÿa/ÿa/ÿa/ÿa/ÿa/ÿa/ÿa/ÿa/ÿa/ÿS>=ÿšúÿœÿÿœÿÿP‘ºÿf:*ÿ$w±ÿœÿÿœÿÿšïÿwfbÿa/ÿa/ÿa/ÿa/ÿa/ÿa/ÿa/ÿa/ÿhYÿĨžÿĨžÿg%ĨžÿĨžÿ’j[ÿe3 ÿe3 ÿe3 ÿe3 ÿe3 ÿe3 ÿe3 ÿe3 ÿe3 ÿe3 ÿe3 ÿe3 ÿe3 ÿe3 ÿe3 ÿe3 ÿe3 ÿe3 ÿe3 ÿe3 ÿ2`“ÿŠÿÿŠÿÿ Šøÿuswÿ[;5ÿ‡õÿŠÿÿŠÿÿGŠÃÿlC4ÿe3 ÿe3 ÿe3 ÿe3 ÿe3 ÿe3 ÿe3 ÿ’j[ÿĨžÿĨžÿg%ĨžÿĨžÿ•m^ÿl9&ÿl9&ÿl9&ÿl9&ÿl9&ÿl9&ÿl9&ÿl9&ÿl9&ÿl9&ÿl9&ÿl9&ÿl9&ÿl9&ÿl9&ÿl9&ÿl9&ÿl9&ÿl9&ÿl9&ÿh;.ÿsæÿyÿÿyÿÿ4€ÔÿvQDÿ=U„ÿyÿÿyÿÿzûÿtz‡ÿm:'ÿl9&ÿl9&ÿl9&ÿl9&ÿl9&ÿl9&ÿ•m^ÿĨžÿĨžÿg%ĨžÿĨžÿ™paÿr?+ÿr?+ÿr?+ÿr?+ÿr?+ÿr?+ÿr?+ÿr?+ÿr?+ÿr?+ÿr?+ÿr?+ÿr?+ÿr?+ÿr?+ÿr?+ÿr?+ÿr?+ÿr?+ÿr?+ÿr?+ÿPKjÿhÿÿhÿÿhÿÿi|žÿqA0ÿbÛÿhÿÿhÿÿ*sÝÿ|]Pÿr?+ÿr?+ÿr?+ÿr?+ÿr?+ÿr?+ÿ™paÿĨžÿĨžÿg%ĨžÿĨžÿœtdÿyE1ÿyE1ÿyE1ÿyE1ÿyE1ÿyE1ÿyE1ÿyE1ÿyE1ÿyE1ÿyE1ÿyE1ÿyE1ÿyE1ÿyE1ÿyE1ÿyE1ÿyE1ÿyE1ÿyE1ÿyE1ÿyE1ÿ%RÃÿVÿÿVÿÿ`êÿh`ÿ]IaÿVþÿVÿÿVÿÿaxªÿzJ8ÿyE1ÿyE1ÿyE1ÿyE1ÿyE1ÿœtdÿĨžÿĨžÿg%ĨžÿĨžÿŸwgÿK7ÿK7ÿK7ÿK7ÿK7ÿK7ÿK7ÿK7ÿK7ÿK7ÿK7ÿK7ÿK7ÿK7ÿK7ÿK7ÿK7ÿK7ÿK7ÿK7ÿK7ÿK7ÿoKPÿFùÿEÿÿEÿÿNl½ÿTCÿ0HµÿEÿÿEÿÿNñÿpnÿK7ÿK7ÿK7ÿK7ÿK7ÿŸwgÿĨžÿĨžÿg%ĨžÿĨžÿ£zjÿ†Q<ÿ†Q<ÿ†Q<ÿ†Q<ÿ†Q<ÿ†Q<ÿ†Q<ÿ†Q<ÿ†Q<ÿ†Q<ÿ†Q<ÿ†Q<ÿ†Q<ÿ†Q<ÿ†Q<ÿ†Q<ÿ†Q<ÿ†Q<ÿ†Q<ÿ†Q<ÿ†Q<ÿ†Q<ÿ†Q<ÿECœÿ4ÿÿ4ÿÿ9ùÿ|sÿ{NLÿ 7õÿ4ÿÿ4ÿÿE^Çÿ‡]Mÿ†Q<ÿ†Q<ÿ†Q<ÿ†Q<ÿ£zjÿĨžÿĨžÿg%ĨžÿĨžÿ¦}mÿŒWBÿŒWBÿŒWBÿŒWBÿŒWBÿŒWBÿŒWBÿŒWBÿŒWBÿŒWBÿŒWBÿŒWBÿŒWBÿŒWBÿŒWBÿŒWBÿŒWBÿŒWBÿŒWBÿŒWBÿŒWBÿŒWBÿŒWBÿˆVGÿ+æÿ"ÿÿ"ÿÿ1GÖÿŒgYÿRA‘ÿ"ÿÿ"ÿÿ%üÿwsÿŒWBÿŒWBÿŒWBÿŒWBÿ¦}mÿĨžÿĨžÿf%ĨžÿĨžÿª€pÿ“]Hÿ“]Hÿ“]Hÿ“]Hÿ“]Hÿ“]Hÿ“]Hÿ“]Hÿ“]Hÿ“]Hÿ“]Hÿ“]Hÿ“]Hÿ“]Hÿ“]Hÿ“]Hÿ“]Hÿ“]Hÿ“]Hÿ“]Hÿ“]Hÿ“]Hÿ“]Hÿ“]HÿjH{ÿÿÿÿÿÿÿih£ÿ’^Lÿ"Üÿÿÿÿÿ'3ßÿpdÿ“]Hÿ“]Hÿ“]Hÿª€pÿĨžÿĨžÿe$ĨžÿĨžÿ­ƒsÿ™cNÿ™cNÿ™cNÿ™cNÿ™cNÿ™cNÿ™cNÿ™cNÿ™cNÿ™cNÿ™cNÿ™cNÿ™cNÿ™cNÿ™cNÿ™cNÿ™cNÿ™cNÿ™cNÿ™cNÿ™cNÿ™cNÿ™cNÿ™cNÿ™cNÿU9ÿE9¼ÿE9¼ÿZK¦ÿ–kZÿ}QoÿE5·ÿE9¼ÿE9¼ÿ…kyÿ™cNÿ™cNÿ™cNÿ­ƒsÿĨžÿĨžÿb"Á¥›÷Ĩžÿ³‹{ÿ iSÿ iSÿ iSÿ iSÿ iSÿ iSÿ iSÿ iSÿ iSÿ iSÿ iSÿ iSÿ iSÿ iSÿ iSÿ iSÿ iSÿ iSÿ iSÿ iSÿ iSÿ iSÿ iSÿ iSÿ iSÿ iSÿ iSÿ iSÿ iSÿ iSÿ iSÿ iSÿ iSÿ iSÿ iSÿ iSÿ iSÿ iSÿ³‹{ÿĨžÿ¿£™úX¶›’ÒĨžÿ½šŒÿ¦oYÿ¦oYÿ¦oYÿ¦oYÿ¦oYÿ¦oYÿ¦oYÿ¦oYÿ¦oYÿ¦oYÿ¦oYÿ¦oYÿ¦oYÿ¦oYÿ¦oYÿ¦oYÿ¦oYÿ¦oYÿ¦oYÿ¦oYÿ¦oYÿ¦oYÿ¦oYÿ¦oYÿ¦oYÿ¦oYÿ¦oYÿ¦oYÿ¦oYÿ¦oYÿ¦oYÿ¦oYÿ¦oYÿ¦oYÿ¦oYÿ¦oYÿ¦oYÿ¦oYÿ½šŒÿĨžÿ©‡âI ª‘ˆ¤Ä¨žÿĨÿ´„qÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ´„qÿĨÿĨžÿ’}v¿2 o_Y9À¤šöĨÿä™ÿ¸ˆtÿ³{dÿ³{dÿ³{dÿ³{dÿ³{dÿ³{dÿ³{dÿ³{dÿ³{dÿ³{dÿ³{dÿ³{dÿ³{dÿ³{dÿ³{dÿ³{dÿ³{dÿ³{dÿ³{dÿ³{dÿ³{dÿ³{dÿ³{dÿ³{dÿ³{dÿ³{dÿ³{dÿ³{dÿ³{dÿ³{dÿ³{dÿ³{dÿ³{dÿ³{dÿ¸ˆtÿä™ÿĨÿ¿£™øA85ažˆ€|ĨÿĨÿĨÿÁŸ‘ÿ¿–†ÿ¾“‚ÿ¾“‚ÿ¾“‚ÿ¾“‚ÿ¾“‚ÿ¾“‚ÿ¾“‚ÿ¾“‚ÿ¾“‚ÿ¾“‚ÿ¾“‚ÿ¾“‚ÿ¾“‚ÿ¾“‚ÿ¾“‚ÿ¾“‚ÿ¾“‚ÿ¾“‚ÿ¾“‚ÿ¾“‚ÿ¾“‚ÿ¾“‚ÿ¾“‚ÿ¾“‚ÿ¾“‚ÿ¾“‚ÿ¾“‚ÿ¾“‚ÿ¾“‚ÿ¾“‚ÿ¿–†ÿÁŸ‘ÿĨÿĨÿĨÿ‚pj–$žˆ€|À¤šöĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿÀ¤š÷Šun" m]W:ª‘ˆ¤¶›’ÒÁ¥›÷ĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿÁ¥›÷´™Ô¤Œ„ªZMHF  (@€ B   !,5;>@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@>;5,! ":Qdqz~~zqdQ:"+ Psb]¥{tЫ’‰ëÁ¥›ýĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿÁ¥›ý©‡îŠunÛcTOÀ ‹mL++QEAt±˜èĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿ«’‰ð6/,­|T+ "‰tm•¦œüĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿÀ¤šþfWRÇ|L" eVQ^¦œüĨÿĨÿÀ£˜ÿiZÿpG7ÿY-ÿS&ÿS&ÿS&ÿS&ÿS&ÿS&ÿS&ÿS&ÿS&ÿS&ÿS&ÿS&ÿS&ÿS&ÿS&ÿS&ÿS&ÿS&ÿS&ÿS&ÿS&ÿS&ÿS&ÿS&ÿS&ÿS&ÿS&ÿS&ÿS&ÿS&ÿS&ÿS&ÿS&ÿS&ÿS&ÿS&ÿS&ÿS&ÿY-ÿpG7ÿiZÿÀ£˜ÿĨÿĨÿÀ¤šþ6/,­m:"&·œ“àĨžÿĨÿ®‚ÿb8'ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿb8'ÿ®‚ÿĨÿĨžÿ«’‰ð ‹Q! ˜‚z}ĨžÿĨžÿÀ£˜ÿa7'ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿa7'ÿÀ£˜ÿĨžÿĨžÿcTOÀd, «“‹¯Ä¨žÿĨžÿŒhZÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿŒhZÿĨžÿĨžÿŠunÚq5ºž”ÙĨžÿĨžÿmF7ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿmF7ÿĨžÿĨžÿ©‡îy;çûĨžÿĨžÿT+ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿ8cÿ?‹'ÿCŽ-ÿCŽ-ÿK2ÿ]>1ÿN$ÿ8aÿ?‹'ÿCŽ-ÿCŽ-ÿK2ÿ]>1ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿQ'ÿoM?ÿ^8(ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿ_9*ÿyYLÿfA2ÿO%ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿT+ÿĨžÿĨžÿÁ¥›ý~>ĨžÿĨžÿĨžÿM#ÿM#ÿM#ÿM#ÿM#ÿM#ÿM#ÿM#ÿM#ÿIIÿ%ýÿÿ ÿÿ ÿÿ ÿÿ ÿh§jÿRS!ÿ&ýÿÿ ÿÿ ÿÿ ÿÿ ÿh§jÿV2$ÿM#ÿM#ÿM#ÿM#ÿM#ÿM#ÿW0!ÿÓÉÅÿŽsiÿM#ÿM#ÿM#ÿM#ÿW/ ÿ½­§ÿÓÉÅÿÒÇÃÿÓÉÅÿ©•ÿP'ÿM#ÿM#ÿM#ÿM#ÿM#ÿM#ÿĨžÿĨžÿĨžÿ@ĨžÿĨžÿĨžÿL#ÿL#ÿL#ÿL#ÿL#ÿL#ÿL#ÿL#ÿL$ÿhÌÿpÿÿ$ÿÿÿÿÿÿÿÿì/ÿ€Ÿfÿpÿÿ'ÿÿÿÿÿÿÿÿì/ÿyqjÿL#ÿL#ÿL#ÿL#ÿL#ÿL#ÿW0!ÿÓÉÅÿsiÿL#ÿL#ÿL#ÿL#ÿ‘xoÿÐÅÁÿkI<ÿP'ÿŒrgÿÓÉÅÿqQDÿL#ÿL#ÿL#ÿL#ÿL#ÿL#ÿĨžÿĨžÿĨžÿ@ĨžÿĨžÿĨžÿK"ÿK"ÿK"ÿK"ÿK"ÿK"ÿK"ÿK"ÿqu ÿ®ÿÿ®ÿÿšÿÿþ-ÿÿ-ÿÿ-ÿÿ-ÿMÀaÿ£Ú.ÿœÿÿþ,ÿÿ-ÿÿ-ÿÿ-ÿMÀaÿaE;ÿK"ÿK"ÿK"ÿK"ÿK"ÿV/!ÿÓÈÅÿsiÿK"ÿK"ÿK"ÿK"ÿlK>ÿqQEÿK"ÿQ)ÿŽtkÿÓÈÅÿsSHÿK"ÿK"ÿK"ÿK"ÿK"ÿK"ÿĨžÿĨžÿĨžÿ@ĨžÿĨžÿĨžÿJ"ÿJ"ÿJ"ÿJ"ÿJ"ÿJ"ÿJ"ÿS1ÿÅîÿÏÿÿÏÿÿÏÿÿWÚJÿÿ=ÿÿ=ÿÿ=ÿúAÿ…£vÿÌúÿ\ØKÿÿ=ÿÿ=ÿÿ=ÿúAÿwŒxÿM'ÿJ"ÿJ"ÿJ"ÿJ"ÿU/ ÿÒÈÄÿÐÆÂÿÏÄÀÿÏÄÀÿ«˜ÿJ"ÿJ"ÿmL@ÿª—ÿÏÅÁÿÒÈÄÿ± ™ÿO(ÿJ"ÿJ"ÿJ"ÿJ"ÿJ"ÿJ"ÿĨžÿĨžÿĨžÿ@ĨžÿĨžÿĨžÿI!ÿI!ÿI!ÿI!ÿI!ÿI!ÿI!ÿ¤¥ÿâÿÿâÿÿâÿÿÎå ÿtlbÿ ÞFÿÿNÿÿNÿÿNÿ0Øcÿ«¶Zÿukbÿ ÙEÿÿNÿÿNÿÿNÿ0ØcÿmZSÿI!ÿI!ÿI!ÿI!ÿT. ÿÒÈÄÿ£‡ÿxZOÿxZOÿkK?ÿI!ÿ`=0ÿÑÇÄÿɽ¸ÿš„|ÿmMAÿK$ÿI!ÿI!ÿI!ÿI!ÿI!ÿI!ÿI!ÿĨžÿĨžÿĨžÿ@ĨžÿĨžÿĨžÿH!ÿH!ÿH!ÿH!ÿH!ÿH!ÿmQÿôýÿöÿÿöÿÿõþÿœ›mÿO,ÿQ#ÿÿ_ÿÿ_ÿÿ_ÿÿ_ÿhª€ÿY;0ÿ6W%ÿÿ_ÿÿ_ÿÿ_ÿÿ_ÿg©~ÿS2%ÿH!ÿH!ÿH!ÿS. ÿÒÈÄÿ‹rhÿH!ÿH!ÿH!ÿH!ÿŽvmÿÏÅÁÿP+ÿH!ÿ†lbÿ¯—ÿN)ÿH!ÿH!ÿH!ÿH!ÿH!ÿH!ÿĨžÿĨžÿĨžÿ@ĨžÿĨžÿĨžÿG ÿG ÿG ÿG ÿG ÿI#ÿÜÄÿÿêÿÿêÿÿêÿÌÀ>ÿdNFÿI#ÿÜÄÿVøJÿÿoÿÿoÿÿoÿítÿwrlÿG ÿ¯MÿÿoÿÿoÿÿoÿítÿwrlÿG ÿG ÿG ÿR- ÿÒÈÄÿŸ´ÿ¸©¤ÿ¸©¤ÿ¸©¤ÿ`?3ÿfF:ÿÍÿÿÁ´¯ÿ²¡œÿÏÅÂÿ Œ„ÿG ÿG ÿG ÿG ÿG ÿG ÿG ÿĨžÿĨžÿĨžÿ@ĨžÿĨžÿĨžÿF ÿF ÿF ÿF ÿF ÿ•e ÿÿÂÿÿÂÿÿÂÿó¼ÿ†|oÿG"ÿ•e ÿÿÂÿäÈÿ ü{ÿÿ€ÿÿ€ÿÿ€ÿK†ÿ^E;ÿ@4ÿó{ÿÿ€ÿÿ€ÿÿ€ÿK†ÿ^E;ÿF ÿF ÿK&ÿ‡oeÿ‡oeÿ‡oeÿ‡oeÿ‡oeÿU1$ÿF ÿ_?2ÿŠriÿypÿhI=ÿH#ÿF ÿF ÿF ÿF ÿF ÿF ÿF ÿĨžÿĨžÿĨžÿ@ĨžÿĨžÿĨžÿEÿEÿEÿEÿW*ÿô“ÿÿšÿÿšÿÿšÿ²\ÿU7,ÿW*ÿô“ÿÿšÿÿšÿ‹ÈBÿÿÿÿÿÿÿúÿuÿI%ÿ'€HÿÿÿÿÿÿÿúÿuÿI%ÿEÿEÿEÿEÿEÿEÿEÿEÿEÿEÿEÿEÿEÿEÿEÿEÿEÿEÿEÿEÿEÿĨžÿĨžÿĨžÿ@ĨžÿĨžÿĨžÿDÿDÿDÿDÿ½Tÿÿqÿÿqÿÿqÿàx&ÿpa\ÿDÿ½TÿÿqÿÿqÿÿqÿÜ{(ÿå”ÿÿŸÿÿŸÿÿŸÿ.Ù™ÿkZTÿC"ÿ Ö†ÿÿŸÿÿŸÿÿŸÿ.Ù™ÿkZTÿDÿDÿDÿDÿDÿDÿDÿDÿDÿDÿDÿDÿDÿDÿDÿDÿDÿDÿDÿDÿDÿĨžÿĨžÿĨžÿ@ĨžÿĨžÿĨžÿF ÿF ÿF ÿv+ ÿÿHÿÿHÿÿHÿüJÿ˜{oÿK(ÿv+ ÿÿHÿÿHÿÿHÿüJÿ˜{oÿ8]?ÿÿªÿÿªÿÿªÿÿªÿeª“ÿR3'ÿ6T5ÿþªÿÿªÿÿªÿÿªÿeª“ÿR3'ÿF ÿF ÿF ÿF ÿF ÿF ÿF ÿF ÿF ÿF ÿF ÿF ÿF ÿF ÿF ÿF ÿF ÿF ÿF ÿF ÿĨžÿĨžÿĨžÿ@ĨžÿĨžÿĨžÿH!ÿH!ÿL!ÿã"ÿÿ ÿÿ ÿÿ ÿÆUEÿbI@ÿL!ÿã"ÿÿ ÿÿ ÿÿ ÿÆUEÿbI@ÿH!ÿ±zÿÿ´ÿÿ´ÿÿ´ÿî®ÿyuoÿH!ÿ«wÿÿ´ÿÿ´ÿÿ´ÿî®ÿyuoÿH!ÿH!ÿH!ÿH!ÿH!ÿH!ÿH!ÿH!ÿH!ÿH!ÿH!ÿH!ÿH!ÿH!ÿH!ÿH!ÿH!ÿH!ÿH!ÿH!ÿĨžÿĨžÿĨžÿ@ĨžÿĨžÿĨžÿI"ÿI"ÿV ÿ‚!ÿ‹.'ÿ‹.'ÿ‹.'ÿ`=2ÿJ#ÿV ÿ‚!ÿ‹.'ÿ‹.'ÿ‹.'ÿ`=2ÿJ#ÿI"ÿB7#ÿô·ÿÿ¿ÿÿ¿ÿÿ¿ÿIäÿ`G=ÿC5!ÿòµÿÿ¿ÿÿ¿ÿÿ¿ÿIäÿ`G=ÿI"ÿI"ÿI"ÿI"ÿI"ÿI"ÿI"ÿI"ÿI"ÿI"ÿI"ÿI"ÿI"ÿI"ÿI"ÿI"ÿI"ÿI"ÿI"ÿĨžÿĨžÿĨžÿ@ĨžÿĨžÿĨžÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿ*„cÿÿÉÿÿÉÿÿÉÿúÇÿu‘‰ÿO)ÿ,~`ÿÿÉÿÿÉÿÿÉÿúÇÿu‘‰ÿO)ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿĨžÿĨžÿĨžÿ@ĨžÿĨžÿĨžÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿL'ÿسÿÿÔÿÿÔÿÿÔÿ,Û½ÿq_XÿL&ÿÕ°ÿÿÔÿÿÔÿÿÔÿ,Û½ÿq_XÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿĨžÿĨžÿĨžÿ@ĨžÿĨžÿĨžÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿT@ÿþÝÿÿÞÿÿÞÿÿÞÿc«¢ÿZ7*ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿĨžÿĨžÿĨžÿ@ĨžÿĨžÿĨžÿP&ÿP&ÿP&ÿP&ÿP&ÿP&ÿP&ÿP&ÿP&ÿP&ÿP&ÿP&ÿP&ÿP&ÿP&ÿP&ÿP&ÿP&ÿP&ÿP&ÿ®šÿÿèÿÿèÿÿèÿïÛÿzxsÿP&ÿª–ÿÿèÿÿèÿÿèÿïÛÿzxsÿP&ÿP&ÿP&ÿP&ÿP&ÿP&ÿP&ÿP&ÿP&ÿP&ÿP&ÿP&ÿP&ÿP&ÿP&ÿP&ÿP&ÿĨžÿĨžÿĨžÿ@ĨžÿĨžÿĨžÿR'ÿR'ÿR'ÿR'ÿR'ÿR'ÿR'ÿR'ÿR'ÿR'ÿR'ÿR'ÿR'ÿR'ÿR'ÿR'ÿR'ÿR'ÿR'ÿR'ÿK:*ÿòæÿÿóÿÿóÿÿóÿGÅ¿ÿhMCÿL8(ÿðäÿÿóÿÿóÿÿóÿGÅ¿ÿhMCÿR'ÿR'ÿR'ÿR'ÿR'ÿR'ÿR'ÿR'ÿR'ÿR'ÿR'ÿR'ÿR'ÿR'ÿR'ÿR'ÿĨžÿĨžÿĨžÿ@ĨžÿĨžÿĨžÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿ1‚wÿÿýÿÿýÿÿýÿûùÿv“‘ÿW.ÿ2tÿÿýÿÿýÿÿýÿûùÿv“‘ÿW.ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿĨžÿĨžÿĨžÿ@ĨžÿĨžÿĨžÿU)ÿU)ÿU)ÿU)ÿU)ÿU)ÿU)ÿU)ÿU)ÿU)ÿU)ÿU)ÿU)ÿU)ÿU)ÿU)ÿU)ÿU)ÿU)ÿU)ÿU)ÿT+ÿÍÓÿôÿÿôÿÿôÿÿ*ÕÜÿtbZÿT+ÿÊÐÿôÿÿôÿÿôÿÿ*ÕÜÿtbZÿU)ÿU)ÿU)ÿU)ÿU)ÿU)ÿU)ÿU)ÿU)ÿU)ÿU)ÿU)ÿU)ÿU)ÿU)ÿĨžÿĨžÿĨžÿ@ĨžÿĨžÿĨžÿW*ÿW*ÿW*ÿW*ÿW*ÿW*ÿW*ÿW*ÿW*ÿW*ÿW*ÿW*ÿW*ÿW*ÿW*ÿW*ÿW*ÿW*ÿW*ÿW*ÿW*ÿW*ÿDTLÿåþÿæÿÿæÿÿæÿÿa¦­ÿa<.ÿEPHÿåýÿæÿÿæÿÿæÿÿa¦­ÿa<.ÿW*ÿW*ÿW*ÿW*ÿW*ÿW*ÿW*ÿW*ÿW*ÿW*ÿW*ÿW*ÿW*ÿW*ÿĨžÿĨžÿĨžÿ@ĨžÿĨžÿĨžÿY+ÿY+ÿY+ÿY+ÿY+ÿY+ÿY+ÿY+ÿY+ÿY+ÿY+ÿY+ÿY+ÿY+ÿY+ÿY+ÿY+ÿY+ÿY+ÿY+ÿY+ÿY+ÿY+ÿ#•¥ÿÙÿÿÙÿÿÙÿÿÏðÿ|zwÿZ,ÿ$’¢ÿÙÿÿÙÿÿÙÿÿÏðÿ|zwÿZ,ÿY+ÿY+ÿY+ÿY+ÿY+ÿY+ÿY+ÿY+ÿY+ÿY+ÿY+ÿY+ÿY+ÿĨžÿĨžÿĨžÿ@ĨžÿĨžÿĨžÿ[,ÿ[,ÿ[,ÿ[,ÿ[,ÿ[,ÿ[,ÿ[,ÿ[,ÿ[,ÿ[,ÿ[,ÿ[,ÿ[,ÿ[,ÿ[,ÿ[,ÿ[,ÿ[,ÿ[,ÿ[,ÿ[,ÿ[,ÿT8+ÿÁðÿËÿÿËÿÿËÿÿE¬ÆÿmPEÿU7*ÿÀïÿËÿÿËÿÿËÿÿE¬ÆÿmPEÿ[,ÿ[,ÿ[,ÿ[,ÿ[,ÿ[,ÿ[,ÿ[,ÿ[,ÿ[,ÿ[,ÿ[,ÿ[,ÿĨžÿĨžÿĨžÿ@ĨžÿĨžÿĨžÿ]-ÿ]-ÿ]-ÿ]-ÿ]-ÿ]-ÿ]-ÿ]-ÿ]-ÿ]-ÿ]-ÿ]-ÿ]-ÿ]-ÿ]-ÿ]-ÿ]-ÿ]-ÿ]-ÿ]-ÿ]-ÿ]-ÿ]-ÿ]-ÿ8gvÿ¾ÿÿ¾ÿÿ¾ÿÿ½üÿuŒ“ÿ`3"ÿ9ftÿ¾ÿÿ¾ÿÿ¾ÿÿ½üÿuŒ“ÿ`3"ÿ]-ÿ]-ÿ]-ÿ]-ÿ]-ÿ]-ÿ]-ÿ]-ÿ]-ÿ]-ÿ]-ÿ]-ÿĨžÿĨžÿĨžÿ@ĨžÿĨžÿĨžÿ^.ÿ^.ÿ^.ÿ^.ÿ^.ÿ^.ÿ^.ÿ^.ÿ^.ÿ^.ÿ^.ÿ^.ÿ^.ÿ^.ÿ^.ÿ^.ÿ^.ÿ^.ÿ^.ÿ^.ÿ^.ÿ^.ÿ^.ÿ^.ÿ]/ÿ•Ñÿ°ÿÿ°ÿÿ°ÿÿ(¦Þÿye^ÿ^/ÿ”Îÿ°ÿÿ°ÿÿ°ÿÿ(¦Þÿye^ÿ^.ÿ^.ÿ^.ÿ^.ÿ^.ÿ^.ÿ^.ÿ^.ÿ^.ÿ^.ÿ^.ÿ^.ÿĨžÿĨžÿĨžÿ@ĨžÿĨžÿĨžÿ`/ÿ`/ÿ`/ÿ`/ÿ`/ÿ`/ÿ`/ÿ`/ÿ`/ÿ`/ÿ`/ÿ`/ÿ`/ÿ`/ÿ`/ÿ`/ÿ`/ÿ`/ÿ`/ÿ`/ÿ`/ÿ`/ÿ`/ÿ`/ÿ`/ÿLFJÿ¢ýÿ£ÿÿ£ÿÿ£ÿÿ_“¯ÿiB2ÿMFIÿ¢ýÿ£ÿÿ£ÿÿ£ÿÿ_“¯ÿiB2ÿ`/ÿ`/ÿ`/ÿ`/ÿ`/ÿ`/ÿ`/ÿ`/ÿ`/ÿ`/ÿ`/ÿĨžÿĨžÿĨžÿ@ĨžÿĨžÿĨžÿb0ÿb0ÿb0ÿb0ÿb0ÿb0ÿb0ÿb0ÿb0ÿb0ÿb0ÿb0ÿb0ÿb0ÿb0ÿb0ÿb0ÿb0ÿb0ÿb0ÿb0ÿb0ÿb0ÿb0ÿb0ÿb0ÿ(m£ÿ–ÿÿ–ÿÿ–ÿÿ•ñÿ~zzÿc1ÿ)k ÿ–ÿÿ–ÿÿ–ÿÿ•ñÿ~zzÿc1ÿb0ÿb0ÿb0ÿb0ÿb0ÿb0ÿb0ÿb0ÿb0ÿb0ÿĨžÿĨžÿĨžÿ@ĨžÿĨžÿĨžÿg4!ÿg4!ÿg4!ÿg4!ÿg4!ÿg4!ÿg4!ÿg4!ÿg4!ÿg4!ÿg4!ÿg4!ÿg4!ÿg4!ÿg4!ÿg4!ÿg4!ÿg4!ÿg4!ÿg4!ÿg4!ÿg4!ÿg4!ÿg4!ÿg4!ÿg4!ÿ`:0ÿ ‚îÿˆÿÿˆÿÿˆÿÿCŠÈÿuVKÿa:/ÿ ‚íÿˆÿÿˆÿÿˆÿÿCŠÈÿuVKÿg4!ÿg4!ÿg4!ÿg4!ÿg4!ÿg4!ÿg4!ÿg4!ÿg4!ÿg4!ÿĨžÿĨžÿĨžÿ@ĨžÿĨžÿĨžÿk9%ÿk9%ÿk9%ÿk9%ÿk9%ÿk9%ÿk9%ÿk9%ÿk9%ÿk9%ÿk9%ÿk9%ÿk9%ÿk9%ÿk9%ÿk9%ÿk9%ÿk9%ÿk9%ÿk9%ÿk9%ÿk9%ÿk9%ÿk9%ÿk9%ÿk9%ÿk9%ÿBRyÿzÿÿzÿÿzÿÿzüÿv…—ÿm?,ÿCRwÿzÿÿzÿÿzÿÿzüÿv…—ÿm?,ÿk9%ÿk9%ÿk9%ÿk9%ÿk9%ÿk9%ÿk9%ÿk9%ÿk9%ÿĨžÿĨžÿĨžÿ@ĨžÿĨžÿĨžÿq=*ÿq=*ÿq=*ÿq=*ÿq=*ÿq=*ÿq=*ÿq=*ÿq=*ÿq=*ÿq=*ÿq=*ÿq=*ÿq=*ÿq=*ÿq=*ÿq=*ÿq=*ÿq=*ÿq=*ÿq=*ÿq=*ÿq=*ÿq=*ÿq=*ÿq=*ÿq=*ÿq=+ÿcÐÿmÿÿmÿÿmÿÿ&vßÿ‚mfÿq=+ÿcÎÿmÿÿmÿÿmÿÿ&vßÿ‚mfÿq=*ÿq=*ÿq=*ÿq=*ÿq=*ÿq=*ÿq=*ÿq=*ÿq=*ÿĨžÿĨžÿĨžÿ@ĨžÿĨžÿĨžÿvB.ÿvB.ÿvB.ÿvB.ÿvB.ÿvB.ÿvB.ÿvB.ÿvB.ÿvB.ÿvB.ÿvB.ÿvB.ÿvB.ÿvB.ÿvB.ÿvB.ÿvB.ÿvB.ÿvB.ÿvB.ÿvB.ÿvB.ÿvB.ÿvB.ÿvB.ÿvB.ÿvB.ÿ`HUÿ_üÿ_ÿÿ_ÿÿ_ÿÿ]}±ÿ{RBÿ`HUÿ_üÿ_ÿÿ_ÿÿ_ÿÿ]}±ÿ{RBÿvB.ÿvB.ÿvB.ÿvB.ÿvB.ÿvB.ÿvB.ÿvB.ÿĨžÿĨžÿĨžÿ@ĨžÿĨžÿĨžÿ{G3ÿ{G3ÿ{G3ÿ{G3ÿ{G3ÿ{G3ÿ{G3ÿ{G3ÿ{G3ÿ{G3ÿ{G3ÿ{G3ÿ{G3ÿ{G3ÿ{G3ÿ{G3ÿ{G3ÿ{G3ÿ{G3ÿ{G3ÿ{G3ÿ{G3ÿ{G3ÿ{G3ÿ{G3ÿ{G3ÿ{G3ÿ{G3ÿ{G3ÿ5M¨ÿRÿÿRÿÿRÿÿXòÿƒ}€ÿ{G4ÿ5N§ÿRÿÿRÿÿRÿÿXòÿƒ}€ÿ{G4ÿ{G3ÿ{G3ÿ{G3ÿ{G3ÿ{G3ÿ{G3ÿ{G3ÿĨžÿĨžÿĨžÿ@ĨžÿĨžÿĨžÿ€K7ÿ€K7ÿ€K7ÿ€K7ÿ€K7ÿ€K7ÿ€K7ÿ€K7ÿ€K7ÿ€K7ÿ€K7ÿ€K7ÿ€K7ÿ€K7ÿ€K7ÿ€K7ÿ€K7ÿ€K7ÿ€K7ÿ€K7ÿ€K7ÿ€K7ÿ€K7ÿ€K7ÿ€K7ÿ€K7ÿ€K7ÿ€K7ÿ€K7ÿxKCÿ EîÿDÿÿDÿÿDÿÿAeÊÿ…fZÿxKCÿ EîÿDÿÿDÿÿDÿÿAeÊÿ…fZÿ€K7ÿ€K7ÿ€K7ÿ€K7ÿ€K7ÿ€K7ÿ€K7ÿĨžÿĨžÿĨžÿ@ĨžÿĨžÿĨžÿ…P;ÿ…P;ÿ…P;ÿ…P;ÿ…P;ÿ…P;ÿ…P;ÿ…P;ÿ…P;ÿ…P;ÿ…P;ÿ…P;ÿ…P;ÿ…P;ÿ…P;ÿ…P;ÿ…P;ÿ…P;ÿ…P;ÿ…P;ÿ…P;ÿ…P;ÿ…P;ÿ…P;ÿ…P;ÿ…P;ÿ…P;ÿ…P;ÿ…P;ÿ…P;ÿTG‚ÿ7ÿÿ7ÿÿ7ÿÿ9ýÿu{šÿ†UBÿUG‚ÿ7ÿÿ7ÿÿ7ÿÿ9ýÿu{šÿ†UBÿ…P;ÿ…P;ÿ…P;ÿ…P;ÿ…P;ÿ…P;ÿĨžÿĨžÿĨžÿ@ĨžÿĨžÿĨžÿŠU@ÿŠU@ÿŠU@ÿŠU@ÿŠU@ÿŠU@ÿŠU@ÿŠU@ÿŠU@ÿŠU@ÿŠU@ÿŠU@ÿŠU@ÿŠU@ÿŠU@ÿŠU@ÿŠU@ÿŠU@ÿŠU@ÿŠU@ÿŠU@ÿŠU@ÿŠU@ÿŠU@ÿŠU@ÿŠU@ÿŠU@ÿŠU@ÿŠU@ÿŠU@ÿŠU@ÿ!4Òÿ)ÿÿ)ÿÿ)ÿÿ$Cáÿ‹woÿŠU@ÿ!4Ñÿ)ÿÿ)ÿÿ)ÿÿ$Cáÿ‹woÿŠU@ÿŠU@ÿŠU@ÿŠU@ÿŠU@ÿŠU@ÿĨžÿĨžÿĨžÿ@ĨžÿĨžÿĨžÿYDÿYDÿYDÿYDÿYDÿYDÿYDÿYDÿYDÿYDÿYDÿYDÿYDÿYDÿYDÿYDÿYDÿYDÿYDÿYDÿYDÿYDÿYDÿYDÿYDÿYDÿYDÿYDÿYDÿYDÿYDÿvOdÿýÿÿÿÿÿÿÿ\e³ÿŽdTÿvOdÿýÿÿÿÿÿÿÿ\e³ÿŽdTÿYDÿYDÿYDÿYDÿYDÿĨžÿĨžÿĨžÿ@ĨžÿĨžÿĨžÿ”^Iÿ”^Iÿ”^Iÿ”^Iÿ”^Iÿ”^Iÿ”^Iÿ”^Iÿ”^Iÿ”^Iÿ”^Iÿ”^Iÿ”^Iÿ”^Iÿ”^Iÿ”^Iÿ”^Iÿ”^Iÿ”^Iÿ”^Iÿ”^Iÿ”^Iÿ”^Iÿ”^Iÿ”^Iÿ”^Iÿ”^Iÿ”^Iÿ”^Iÿ”^Iÿ”^Iÿ”^IÿB2®ÿÿÿÿÿÿÿóÿ‡~†ÿ”_JÿB2®ÿÿÿÿÿÿÿóÿ‡~†ÿ”_Jÿ”^Iÿ”^Iÿ”^Iÿ”^IÿĨžÿĨžÿĨžÿ~>ĨžÿĨžÿĨžÿ™bMÿ™bMÿ™bMÿ™bMÿ™bMÿ™bMÿ™bMÿ™bMÿ™bMÿ™bMÿ™bMÿ™bMÿ™bMÿ™bMÿ™bMÿ™bMÿ™bMÿ™bMÿ™bMÿ™bMÿ™bMÿ™bMÿ™bMÿ™bMÿ™bMÿ™bMÿ™bMÿ™bMÿ™bMÿ™bMÿ™bMÿ™bMÿ‘]Vÿ:'¼ÿ6.Ìÿ6.Ìÿ6.Ìÿi[šÿ—jYÿ‘]Vÿ:'¼ÿ6.Ìÿ6.Ìÿ6.Ìÿi[šÿ—jYÿ™bMÿ™bMÿ™bMÿ™bMÿĨžÿĨžÿĨžÿy;çûĨžÿĨžÿ kVÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿ kVÿĨžÿĨžÿÁ¥›ýp5 ¼ –ÖĨžÿĨžÿ«{hÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ«{hÿĨžÿĨžÿ«’‰ëd, ³š‘§Ä¨žÿĨžÿ¶|ÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¶|ÿĨžÿĨžÿ’|tÏQ!­”‹nĨžÿĨžÿæ›ÿ°|hÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ°|hÿæ›ÿĨžÿĨžÿsb]¥9OC?¾¢˜ØÄ¨žÿĨÿÀŸ’ÿµ€kÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿµ€kÿÀŸ’ÿĨÿĨžÿ±˜è P" ›…}=çûĨÿĨÿħ›ÿ¾”ƒÿº‰vÿ¸kÿ·hÿ·hÿ·hÿ·hÿ·hÿ·hÿ·hÿ·hÿ·hÿ·hÿ·hÿ·hÿ·hÿ·hÿ·hÿ·hÿ·hÿ·hÿ·hÿ·hÿ·hÿ·hÿ·hÿ·hÿ·hÿ·hÿ·hÿ·hÿ·hÿ·hÿ·hÿ·hÿ·hÿ·hÿ·hÿ·hÿ·hÿ·hÿ¸kÿº‰vÿ¾”ƒÿħ›ÿĨÿĨÿ¦œüRFBs+±–sçûĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿ¦œü‰tm•+›…}=¾¢˜ØÄ¨žÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿ·œ“àeVQ^"OC?­”‹n³š‘§¼ –ÖçûĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿçûºž”Ù«“‹¯˜‚z}"&   fs-uae-2.2.3+dfsg/launcher/share/icons/0000755000175000017500000000000012162366654020072 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/launcher/share/icons/hicolor/0000755000175000017500000000000012162366654021531 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/launcher/share/icons/hicolor/48x48/0000755000175000017500000000000012162366654022330 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/launcher/share/icons/hicolor/48x48/apps/0000755000175000017500000000000012162366654023273 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/launcher/share/icons/hicolor/48x48/apps/fs-uae-launcher.png0000644000175000017500000000520012162366654026755 0ustar glaubitzglaubitz‰PNG  IHDR00Wù‡sRGB®ÎébKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEÜ &³³d IDAThÞÍšytÔÕÇ?¿Y2™É„5„U$B" ‚€ ´ÚsО£bh-T Ö¶V­µ*Ö§î«‚hR¢" È’Y"B„`YH2²Ìd2Ûoé¿ÉÈc wÎ=sÞ›÷{¿û}÷{߽⦅€ÿ"\ä÷Zå"¿]í\=ä ¹ ¯H€»“È(¯Ls{j̸”) M¦Ð±FSÈH­V|=¦_’$§½ÍVÑfk)Ù“·å“­›×¬€œG-úò«þÿ¼N§3Ò‹Š(ŠÎcE>|wù_Þê' wÐx•:6nÔ«µ9$ìQR®‹Ò:­@ˆQC¨Qëk;”¿kÅo¿ô&P¸tœô‰?Þÿ¼ŠV¡¬ÆN‹ÍÓ+f¿o˜ž‘1!ètIÉSÒn¹mzAA~Î6ÀÒ (iüí‹t:QJ+[ijuõúXκ‘D‘1#ú¢×ë Óïùåãù9E€Uçíd2…Žh¶º¨·Xém¥Þâ"z‘ˆpýúNÕtFSÈH€æÖvÜn7½±4·¶n ¢ÿ !@ ¸ƒBšŽ¥Òétãq÷<}(ÙÁ0Z0G $+n2ÏÔqoM>zï´î?bçß3N§:±z½^˜À×õ\<$©Ç-l9NZi¦¯¾fîï±ÚD^)ZMBs5•ñ‰dèCp[ÝãBça´€F×5xˆ¸{ÐzEdQõzè§ÖÇ%{ªsI ú¤ÕñÍ´9Y#âyº]˜5øгøµ5‡Hc#Á­&sÌýØÊšùMû·¡ö)¸a:»Ì}»èq¼yN ô”DÒÂcÚßìïIœÁîÓzžqoÀîÀjŒ`]ÄdÌeNüéÖ%Ø]K ü)l A!ªS$éb2Cí夆ñõÙÿŽºp{¹QD©G|`jèI&*óY?kÀƒÙÛBæð­AjëÉX[ÍÞî?¹ ‰x®²‚5"/ŽÎQ“s ØÌÚ¢0~5`?#[ÔdMгžû8^ÑŠ¢(ÉN¦ÐÕµÀS7"rp+.Œ¤7L§Õ\Ë’YÔÅÈçN¾ÚæÄår]*½¾<Y–‘Dñª)×ÇÊ‚IGÕ|ØmŸÉæý­ükʘªÊ¶ÈøôàÍ44š/9–,Ë—€¢ (òU°tÎôýÕ ipGó߼ܨÿGæL(÷õÙR5›ÜCæË¿×µt]÷q2Š"]åS“ª˜2¾Úç¸ͦ°¸ŽíýÁ·”–µÜħy¡¸ÜÍì1¯¡L‘׿†¾jýhí>ß®6£„øQjä‘‚ÈÈ»‡’òúwÉX@QPä+°ø‘c ŽoÀá6ñYÞí8<“v jŸýGï&sGsÀïSWnq6Ì/õž—›Ê¦]fÞy©ãu—×Ô2ˆ6$biªíÆ)Ëå,p…^¹¡ŸŒÔ×eÅÑŒK*dæœ*:¼+kãlvœùYï ÐWæÄ©÷Õ0fB=V@Q¾üú>ޝ&+«ˆŽ}Þ©7³r×ϘrÏú€)DdÉ ÅØ¼õŠ¢‰¬YïàÑy'èkňn_fLåxYåÏ?é ÈŠݤГO—¢ëߎ p;Bù*ýœ3wáO>PÇ÷Î`CV}÷ÞXèž eãîÇOùhRº+•ìíU,y«§AÄ ´7!sõ0›Ouó¬1 È(²„$Å¢QžÅh &¦d’›ŸƒÓñ;ÂCÇ"Ñ‘'‘ä•TÖ4ñä«%ص*ðöÚ82WErÑwÕùfÿXÖ,vçŸB‘»écŠø*¤ÑœÆy–¦à‰yæ2nL?œØÅ™¨9€ÀaóÆUyë; InTU4JaI9¯n/õ)ßV’Ì—kœ¸ÝÝ?,óçš‹EbE‘ j~Íx¤@YÜ0"ÆÏ&\S±ÿ·J²Àîˆ)Ìù{96ÀX oçëuL[p]Œ`usxí$JËë}cwG€ øDãl$¸1R€øvÔ]L›~3†’•èÆØ Æ>ò.-áíX‹=Œ‚ÕIXõu$-ªTÛËž™dgU©cj5é}¢×ë}ï =¯îW.„N¸‚¿ß€4ï^\±1X ¡rÀà ?ºœŸöLÄ w’ýoß÷³}çi¦®ø‰&½Ês9ŠÒ•Q4·žD@ÃÔIãyfÑ#ˆÞܾ¤ôÿ|cÿx.Ä‘Ãðˆ";r Xµ& º]€ÀùHÇoáÊX À¾øÑÌ+›FõÛ™´l5‚êX!Õ 4lŽ"lr.º;Ì^Pƒ6ÍbïÁÓçÆêÌgY°xÙ¹Ô#>†Ñ£â˜ÿÔ넘Œüö‰9 ¾ƒ¬KèïßöÔ8ŽqãFL@`ÇC)Ü&dàû3 ÈZB?w dèѱ-‰}ouÞ2Ú›ÊÐØ(u‚ëͨ7•R‡¦î6[K Àð¸ã/L®ƒ$&Æ3<.F½­©«©쀨ñZÀ½'oË'¢(:æ>œJâ¨Þ"qT=ë€Z­Î™Œömë¶êÊJ?øeÑ{΀ͯA&(üïþëð )iÓÿG©TN¬N­ÖLÉÎÉÛ‘9[}ñÜñ:Àí'y0 Åž×Θ9» ¿ªK2´]XmlN ¯$OÈ+D(­HL”’”D5¢t²$y½óÇWÊJ?(ô@wÀúÛ²°rÕÆèôéYAPÊ€Íá¡NgÃéòNx‰»g-ÐÖ¡ '#Ѝ%¢(*Ö?¾óå‹çËnv[Í¿?p²¢¿ôŸßõëgbbâ¾ I2•õ&ì7’$M*r¹=˜»\¤Þ(hµ‘ÑZm„TYq¾°=á4@©V« ºV+]6ç¤ rÜ7ºV+3ÓcHNËÈR€¶€ `€J‘¸èè´áq»'u¤×Ñi 2 ijê4 ˆòÇ4=Êþ& Ñh²f4©Ðiîõ] ‰S€h Â?hľAŽÃÑ3®p;yîâ»LÑx‚uåó 8—‡×êëvнfÐG …è¼:Íö×€iÑã_õßVu˜U­ç‚×Ý1±”fmÆ¢óò̘,9c©ÒÇoƒF†îq´ÿöV6NAloÝgk7PÞ¢!ÍÜ<(ær Ûg¡ÏZ†!cúñÔ€ôCŒî•dsÚ}Oȧ£ÑÞ!°¯[†dÀxiÀGóMA K¢‚O–næZ½›‡»*Ès»å‘eÀxLÑ8y^*˜Þº+™+øÌ0ÁÞ5(f³»îª½ gϪOÓ¼¶ªã8šò0õíìÒœ >Æ»ÛÕÉ„2u;[.‡Ô¼w§«œd z¶Æ‡Ç\ß ŸÆà癟 ˆì•å­ˆY|lÎæ¶ÁÄog•†ÅÚ ¦oÔîÐàq¶¤ÖŸÜ¼ö¢ $jç>7°.©šû“[Âbîo©£ž1|œº‡—œ÷ÅgþrYüÅ—eînþ}ÌfûæšNpWáâïq¯»äxŽè—q톞Wÿå ÷ØÃb²,.dyôByÉl_\ƒ–™7PrÁÀܤvv,© ‹IÒÈlÐ ½»;Ê ™}/ ö i›ì³)ªLÃ`ÔsðÙðX{‡~Äú0ŒŒîÞß¶ÂäÍéèun²’Ös¶¼•'—Üàþ\CXl$û5n&ÝÃîíåÙ[wQ÷GÎ:Ñ*mü|{…oÛ¢æìY¿4n ؽ£‚¸”^/n±'p¸| U ¼ñ\SRa±‘ÖÊqñ¹F¾³éfˆs;qe#ÇNëÉ»ÏÀSO4„Ådiäw¦Ç\DQfßÏ® ÄõÖÝÔåò÷ã‰t˜nñß¿¿‚k7êFEcîw|ÇNÞ"7¯“5[ta±ÑŽEÆÄD…ÌO÷VâèãÙo7Ìãhq,FÓm~ýç/Âbcû¨‡âcbëv415§+¨Þ’[Åå£k9s±žµÛn‘šk ‹ÅZäŽ K1¨„yL‰‰bQqU4·´#y£ÅdYfJR[^¬QoýçP|Ô€:º›­/Õ…Åœ=c³qg>@°Ó)|Û]Ó‚ØêœóÄF¤²¶}¬…'w×àò%ì2%qéȪê+xv-rŒ;,6VEÖÈÈ.´ÿ ³ ÒIÛä/|€<(6ÿA3 6´b‡ éo¢¤¬Ž¬‚N žÐ‡ÅzÛ!º[Ȳ$ew9êè2˜ÌOŽ‚cÞoóPavXìaëõØ H¦ú£êœŠóÃyÔܸʲ?ÔÓí ‹ÚÓj4ìüÎc˜ÍVÌ–Þ?BʯÖ15)ž×÷ü³¥£ÑÂãëVrúüüþ­¿Ž¾ø&j™Èßý‰®÷÷ès!gWÌáÇ7–RÛøñŸ¾LÒ²¢ gžxœãŸ7“¸ÄD¦–,ãøfÖÚ–ÿwqé9Þ+:ÒüS[EE~òʰÛlzl‹ïŸƒ6BƒÓéáY ˜2JÊ« hþïC è@Œ|ô¯ yä[ÙdíüIY·€úèU,\0¯Ö Àª«1šìaÚŒé),/\ÀòÂÌÏÍΜ¯D!ŠüŸñ£ï?N“®•_î;ˆÓé´¿#«þùÛ".UÔŽ° ¤)ºêJ)pšXöc\Aõ)¨š ¨Ì¾B,¿Á,8C°ˆÃó¨m4 ñþð}¸~6¿xi'srf I2Iÿ÷ ï©8``¤Q{tt7Ð#6Ð7¥jç›8V\‰òéëôˆõ°ÒS7¹³lýÐ{;ÇÒÅóxsï‘$Q¸p¹šëÕMwC(†ÿ²')¦Õj†]”(n¨ˆ|.‘ÔÙi¨¾×©,ZΟ´ÑÕâ!ò™RsWÀL]ÎA¥cw¸ØýÚAnLî±Ú<ÿÊŸHNŠgæŒ4ZÚŒ4uÛ·n ó>­¦÷OE¯/Xœ'û3@d‡ÃÑ9 `Zz*7›‡å¢úT2ÆSýk»PŸIÆx&<6Xñz%ªjn é‡Ú fÚ æaýÕ´ôÔàïC›_JqðÜ@ 9l–àTÖÌŒaýÀD§¬™ÁÁµêuø’¤]-ûi€×d2–*V,[DbBüóëĦĄxV,[ ®©®_¢´# ý5ÀóÎÛûßµu[u*•’§¶­'11~ÒI>11ž§¶­G¥òY¹¡½ÕRR|è`¤÷äýÓå±v™d­6ò«ìœ¼ ‚ ˆ±1Q´ÕšhÒËC}°¦66VÚ¨U­ik”úÐÆÊ¥6ÔŠF[c¼ÐT# xEA@„œa€™™Ù»–‘QÔÒ¸’ópvÖÞÿwþµÏ>g ¥Ï2´gª„t¿Ù{°(J¸D–T*SûSH)j4! T¸Z·|á´Ö®qÑU‚½‹¢”“R!H²·ù„»CÒ_ÅÀ€0A‘ºRŠ["‚I]~„Kd!TÒ•Êastö“t`ÄF‡ŠqÉ1IÂ%²€¤R™M6§¨k°ÿ/â.—“øXƒ‘ù€$ÚN\.çS hJ2ãîE ºË汄ÚZÓQ‡#"šâ˜1ø$ØNŒqþý° ;;=¸ÿÀË)V^9€5~Åæd6žÛN¬ÓÆþùË8Õžà×è^—óéb}m¼ÓVÃ9SóÚÍBbcmT¥¥°O¦ø×õz‚x¼ž§.Á硇7¹)3Mæl½Æágð!;aÖêö^¼ž§È¯eŽé"n=œ3Y÷ zˆÓ1s8Rªáñ>X³ßÐ…ä‹©Ç! Žú^%êÊ%&ޝÆ!âØrùE­íùAðy½tºÝOðþK×HLj¤Á7‚‡’·`„AžeÊ[É÷y½½(%‘20!XÄG»X•Y‚ dŸ~…·3ŠˆKj¥Ò‘ÊÎã‘HùèÃ(%{@I”ô=6ÀÆ¥ HìäÂí—9sÉFaÖ¼„°ãÈtšîµ÷<)À“80=½‘yoTâêˆ`ÓÖ l\sm„ääÙÙœhEJÙã¼ (¥ËCˆdÓ¦ tÄÁ¡_ç2dh©Óê°ÚóÕ®D:;{?Îþÿè¡};ðîò[„%ظ~w$;vdOn@~Þ\.]k >¹ïwÀhv³è£ëX•`ÿ3™¿ôoÜ1Nnß|]»UŸóû(DI0h« MÂð\¾n &r!ƒãêinÙÅò¬rì¡‹§p¦¸–õk+hðÈÙ™N³ÍüéûPHÕ{dõ ËÑ#c‰oYK͘QT3‘‡6ë7¬ÎHr¶ŽæÍ/Ѭ)OÌäð‘†^7ÞÃÝ£ÇBQ“OäL sIZ¼ˆ°öïЗt2lYw€òÂÙ¸F–ágÅb3’ûµ¯WoŒ#ÞGtÔ@4M`6 FÓDP „¡RèǶÃþ-9_gbñDú*êcî^û§³ däWPˆŸgS~ó¡†P6¯ÿ“E¥TTYȘ0–Ö6')Ï'òé†ï‘Rù5‚8 @h 4ôóWT˜ƒ#Ò‚÷³É„™÷P¥4,Õ`^WMU´“¶òñü‘íñÏéZ£în3wjI•ÀñS%H%ºåø×®KÛGX{!Ö1Û¸ê!¬t*ÇÓ¹1­„;žPlßLÂÞÚáÏ¿gkå÷£QWߌO*¶}›Ë¬é 3ý9<ä@@ tM`6óQïu0Ð5æÍ£ˆøä †¨4†'sþO»?_*¸QiÁf¿[í¬\ºKmÖ¦Þ}¤T5f“1Qˆ@Sô\-¹&î×ðV V ë…ëÊ—²:ì¿?WRι’ònæÞ7›ŒH©j)®ii©£UÊØäõêç+el2i©£•®i~°î‰lW¥š&’®^¯ Öf|¾¾ßëÇ ]×0Å&-%YI©ni…¿1݆®ÖÌ'e¦¦‰~mͤT5º¦õÞš=«xæÝñ?tèí:ÞIEND®B`‚fs-uae-2.2.3+dfsg/launcher/share/icons/hicolor/128x128/0000755000175000017500000000000012162366654022466 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/launcher/share/icons/hicolor/128x128/apps/0000755000175000017500000000000012162366654023431 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/launcher/share/icons/hicolor/128x128/apps/fs-uae-launcher.png0000644000175000017500000001471612162366654027127 0ustar glaubitzglaubitz‰PNG  IHDR€€Ã>aËsRGB®ÎébKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEÜ ›5ýNIDATxÚí]{xÕÝ~gvö¾›û…Ü !€ @B‚( Ä ÕÖZm«Ö{[õ)­­·Ö~ýõ©­ŸÕÊWkë'Õ**U%$@ !wBî÷l.{ßùþØÉº„ÙI²Âf³¿<çÉ&{ÞÝ™ó¾ç=¿sæì,ŠP„"¡˜¦ALñןnÁMô R—™p"$†ËJ:I²P ÀpÅo1D<Éÿ-á éQ$uBB?ñ,ÿÛÉ?.N¾puÆ-ÂOò=I–òŽ" ãRÀB1º8‚Bpð#Ä1.P>’Oð¤z®ˆ‰KÔìüÞÃëRf¥å*ª4¹\GIe1‰DâsüÁ0ŒqÐ:š¶õ™Œ†¦†úÊ‚½üµÈ 0°°ñÅSãrÂÇ^/áÉWPÞú\›½ù mXäz‰D¢QwYEaÕõuŸ<øùžÝGó?«``ñãᣊ€ð|Šïñʵ97§ÜœwÏ“Ñ1ñ·A…虼`YÖÙÞÚx`Ï?^{»®º¬€ƒ•wf,"ø@¾€æÇžÏ¹qëw>ÐjÃWA†(™ä‚ Ã#¢æ­\µá&‰„j¯«)ë÷ ›‘Cþ À“|õ®çÿrÏ¢%Y¢(*d÷W8(Š’§ÍÏÈŸ‘l?súX O¸S@> `8ás÷ü]Ïÿåž´ôÅ¿'BjþÀ’$É”Ys¯‰ŽM´”•k1MdÅ@Ãú•<ö|öœ´«_TXЛèMNXìN8 ÃMüf°[<Š" ¥¨ä„k$×P ïõW_·ñÎöÆžÿyÿÈ ‚IÝh‰Û0ùе97§d®\÷I’RÁI+è†h´÷Úá`BtOD8€Ý˜Ì z)E 9NŽ˜!H$jÛ­÷>][u¦­¹±Öá15Z0çå4üü¥ç´Úð•ÂÊ¡®ÕŒN Œ“Çq¡r ãd1`pÀdu"J+éa„;'Ê’R# |QÎÏè"ó0<ß—åí¼atLümÞȯhÐÃbs†ºì$Å€ÞŽ ;ƒŒ¹áH.µ‚¹ó­]ºüºý奅f~Àæ1-ó@ð«|ŠëÖßô¸Ð<Ÿã€š&=Lf:ÄÊ$‡ÉìDM“Wω¸d8 IRrsÞ½·——Öóëækî\€Éü%¨˜¸D6,r½ÐAtë,è²…ظBÑ?dC·Î‚„XÕ%Ï%¥ÌÎP(UQ6«e€žwrd"H‰ô~ éßt­Ðò.Ërhl7€eCÖ%£±Ý€øh%$#¦2™Lž»1/sÿ¾÷º(y7—xÌF @–”2gƒPÝ V›#ÄÀ«“…nȆø¨K¯·-ÌÈZ¶ß{Gáºf#÷—ä1VP …*M¨B_¿9Ôû$úúÍ‚ˆŠŠIà{¿œçZ‚‹7èp”ù$J.—Ç ½©Þd˲¡Ö€Ð›ì‚ÿWª´á<ù2~ Gæ”—ùÿðEIe1‚Öc¥Á:CÀ•ö"u˜ù’ñ n'ð¶™Ãj§Á…üCvaÈd²aâ%¸xWÖ˜rÑí[ÎPïw-ºèZ dlP˼·GS|*¬”«ÄoœA ?ê:€Ðã‹§! ­¿/ù"VØœ‚÷~ ­†L2¿p>!Ö¡Çr5PXÓ<$8?9ó>™w9‚À¡¼<ØÝX–õ7AÀX‡€Ñ`š `KK!ÒÌ­®ËKTd®BOb ê[(8Ö/œŸð>ïã›Î9@¸ÃŒ4þÇ5Áò–˜)Õ(̹ ýFý®M:¾â.gø,€é¼ôÃæÏ ‘XD÷SËÙ«\‰ª†oÛÊW\€ `z Í-¸QZ´wÆÏBå•hìŒÖ/\ `ú9 Oôì!KàH䯽Vš@]–õØpN?Øn<‰¹\§hW>o5z£QYËÀá`ý´œÓÌ¢X~dýZÔÂ-r-ŽglFÏ m}¿p/€éæÙB#ßürtÉX% ”Õ[Ýíã+.ð0`)Z±YR.š½·GÌFuò Ô6Ûa0;üÂML€ÅSÒý¢-Å$òäÁleQÕhËr>㦌¦K°S~s½¢uÊf\ :%åFÐ ãnê8À4ÈbH~V º˜j–†áDòèè£ÑÚeó 7µ0 àg1‡¡VØÅ¸¤›a%ä(®Ô¹ÛÄWÜ@p;ÀJunŠ®­Ó¦œƒš°e¨¨3Borø…›zâ‹AÁâ™”|Ñ…– ?&F3ƒ³õz°NÎgÜ”€3ˆàÞä3˜1 Z§TµýÒx?Ý Úáô 75 Hs€x¹§»›ˆpœTmDs§Í&¿pSWA: Øuu!T*ñqùˆôXY Ît¹ÛÁW\È(®ïÀ–ÙDë´ uÄ”Tè 7ÚýÂMq—HI/¬>.zÑÆ ;ò0d QZ¥Ër>㦼8.¸ðã%¸*N/Z§„ÎÆ‹oNµ€ágA¾â‚@ÁC~’ÖŒÇÖœm bÓF4´ÐÂ'p¾â‚B¢Û>=·±JµøZü‘í°8$8ZÒå>w_qÁ!€ ±€õs;°iQ«hfë|œ·.BqE7Œ&Ú/\Ð nü&£œxq[±xÇQÈïØŽ½¥Õ}àÀùŒ *ƒ<´¾© FÑ:§{r0DÇà›â ßîòñ\˜âmÂ#7Uº>8í-³G¡¸/uÍChí2ú… :pSÜ^¸ó4ñ)Ùá ÛaµKpôT»û|}Å… €âúeؘÕ!Z§Q·âDyLÚ/\p `Š:€\êÄ‹÷•Š^²eX ‡ë·£Èвê€ã|Æ­¦jÿäöjÌL_9U»zk¬‡“_¶õr€ŠÔ¹³Z42EãT}j.ô£½Ëà.¸0=à·O”B¦Ÿ’.Ü«ÀÑSmîsôÔ˜j³€MÙÈ]×%Z§¡yš:棰´ÕÀùŠ 9@…RáÄ‹O—‰&pFŠoж¡oÀ‚²ênœÏ¸i!€©ä?PäT‹hâ’ëa0FâëãUî½¾âB@qUª ÷ßWFäCƒƒ±()YÊó}èè1ø…›>˜"ðܯËÀIYˆÌ‡ówÀbåp´¸Ù}^¾â¦¦Âénº±׬酨Vͦú ´·ÌCÁéF˜­¿p!¤ÄOéÄÓ»*DId2œ<² =:ʪ»ÎwÜô@€ŸõÔ j†U”Èò“a1†ãë³î¤ÖWÜ´@ Ÿøì9FìüÁQ ñ¨-]‡³µÝîÎWÜ´@ ;ÀÏŸ­K‰'p¥‡†¸&÷¹øŠ›žPذµ‹WéD{qgíRèÚæâhq½û^û¾â¦­q›JÍàþ]Õâ -GÍÑ[ÐÕkDyM8p>㦵Ѿ÷X=Ââl¢D^8qlF-+ǯÜùŠ›Þ°˜5ψÍ÷4‰ŽßÝ ´—­Eyu'ºûŒ~ᦽmð£ç*ÁJ8ˆõÍ ùy°Xœ8ZÔè>~_q!ik–,ÄEk!— P~ÁÕG Òôâð‰8ùíÒërЖՈÒ@!>¤ôÇ  ë¾7ëvt -k@Ôª—ÃØ~¾9YãþŽ_q!xÉ(yLì“h5i¼Âˆ¶$ÜÇG°Ù(8ÕèÂ)ê`dŸB›9Ìõ-·ál‰‡îüà"¨´ vþ¢V”D§]Σ[ÑÑ£ÇÙê¿pÁ¤?³€‘?1UØ;@ ¼–zÓ,”7¦cUf*"•|6m€J»[×hMFÉù…á8pØþÓóPÅÐp^K÷‰Mp˜58p´Æo\ þLºÀq‚EîøTX½(™ûÖÃÉ)°){þ·8æ+PÚ*QÜçÙp°J7.y¾kïn x-¦¾D •­Aé¹6ôôüÂt™t€óRX¨Œ¯1 ÁbÐjp } f§DcÁÜx7NmøëôŠ3…©ðeûZ.-;_¬S‰ôbºCy0[+>€Ap>á¿Ð,@bª‡Ü²öYÛ¼Ö9Îdb¥½ ×ÎGCshÒÒ…éØRoóŠ;Éd`¥íò1#vùèn«\º3ù…çÜ_tu['R|Àk—ë…• ï€Ô zµs6šÀÇôõP«äÈ^5×S\øH•Î+Ž‹!ð%•…ð_‰Žß´M ã±-hëĹZW§ w`ó®†qãBÎçE á°@Yù–è˜Þ‘ˆSäb¬È˜…¸è0gƒ²òMQ\ææ?®4Áx-¦ÂÍpšÕ8p´Æ}LŸº*Š7nj”ÉÀŽIVw”ñ¬×1±À±ka¥TØœ³I¸pçAª/¬Ÿœ^Š‹ß%ÑÖ“ ¦b5Jε¢·ß@B†‹ïê7.Èù÷g!hlïªÚÿg~ý& ~+ ”øBºw°‘± éÛyúþÿþ7o”Ôã9l]õ0l+z\²ü„õöïºë-Ù˜ðbˆÝ\]V‘²k&òŸM3 ,ÜÙŽÈ¥úqãFFtT^~ñÑ1÷»ïïÇÇû¾qÿ=Þ,üâ‰ï#**ì’º½}ƒø¿⛂ÒàÉ<‹bïÎ^‘Äøøšë¡P)³fÞ·¸O>Iw1€2®«SvÁ x-v« ŠÂ-héDU}7òHKŸ>?nÜÄx²ëñ𬠼ô›Ÿ **\°n\l~úð¸~}Ö¤.· ìv¨ß|Æ??çµNWL, z–aÓ‰³5èèÖƒpÐ.Ü/b•|²_´ÇnÌJ¾%O׃‹tŒ7ê9sÞøÛ^¯Uëê[ÜõwÜ’ Šr5uÁÉrœ<]‰–Ö.¤§Í¦ «0oîLÀƒ÷mGAÑYØ'ñšÃeÏÜãç‘bÈN}}–×:_e¯ÄÒÆZܸnþþÑ)×8 Jxî-\µj·(‰Êî™ÐVd¡¸¢ º ‘KôHÚÙ>6ÜÙV7n¬ç|àPñ¨m¦UcÞU)ƒÁ„W^ßã¾Sh[Gêηâõÿþ’„L&ÜÔ$T×5OŒ?TÏ¿ ǵéà”¶³Ë€}9«q·é2%£¤¢ ÉaYä/a[íâÌ:”€€Éâº/ArXðb¬b|ò8£™FÁéÆËrΞÉ]X˜7ä^ƒo θ{y[G/žý¯ÿEI@ÓttõM‘«>Œ;dG?¯ëS·z­sv^<²RM3¨ièEøŽÈÓD{ñŒŠÕPõ$£#.×­˜Êºn„ïh€l‘aL¸O +A;Ø1œ1î6°ZiÔ7¶#·ù‡~˜‡û¾»'OWâèñrTT6 ü\ƒßm;%”o½cœsgx­óɆÅx²­¹›“Ðõä~Q¥V fnÆùYqøhã2<õ÷CãÂ5µ  ¦¡Çýø×ßž|êïŠÜÿññêï…R麱 B!CÎÚLä¬Í„ÉlEqI¾:| 5õ-Sh@¾' Õ³ÿÉÉ­ÐE8œu¸{Nƒ wˆ.ÞÌ>¶„C½¹éè'Í8p9¾*¨ßñ{iJ…`‘J©‹0Ý:<þË×PTré'ˆ5j%6d¯ÀïŸ}¹ÙË}oשâ -ºÙgE ·ex­sêš>,”ˆ¾Ntg*’+WàpVú¢œÎêÅrl¸“å­è²ø|§J«…g4=ý—ü¯»g/½úOh5*¬Zq5V,KGÆÕs¡V)\=‘$ñăw ³«µç[ ü§Ô/„#7œV.ðÚ,fHþ›HâGp$–äça(LޝWE0ºpäØp“ÇKZÆuÿ¸6Äüî•޹}‚A&“‡Ž”àБ$¬Ì¸ÿÛX¾dêηoà{t¨^9ósK/y.‡@ At _X¾‘½‰x÷Ò¶qãöVÂÁ\þ{÷ß½óFä®ËDD¸ï}ø5>ÞwÄýËr(*©FTd¼w»ëøæÏž"³ÂÿLUñ~#ì·ÉÁ,R¹ÿ'| «ØtÒ¢Åòã›P›Êà\Z׸q­¨kÒÿâÛ[t÷ "šïÝ7ä¬ÄþCE°Z/þʘŒEsݯÛÝ;0!mðàê€ú7ç¡ÿ(ÂŽjPâß©“{t+$V>ÍiøýcÆYdøªðì¤biY-lv ¹ 3¢ñÒ3?ÆžóÑÝÛÙ³±lqV¯¼Ú]¿¤¼.x× Â Åž.ؾë…!D{ñÌöÙXX½ÇËZ`ú²/®¼ƒzÛÿè¯10dÂ[ïìÃãºv9Í™„gžü¾`ݦ–n”U4Ô:À¤| BõŠô¦&ÑÍ¢ã7É’Ø”Ÿ½Ñ†gZ¡ªõ 7Ù‘ì àÎÛ®G\L„`§ªðæ;Ÿ]Žëœ¯’r¾ýŠ0RP?û-1HTE" jÁz± 30xJŠâòZ0NÎgœ¯cìà ¿üínWãŒ1p‹   ÇNV`ÞÜ™HˆBltl4þªjšÐ?¼wÀ‡c#Ib4xîåF€gŽaEQŠ‘•4j5 Ɖû$Ù˜o·]hP†ê Áù´ƒAeM“ÏxãDUmªj›&´‹kÔ§iÚQ¶S£©†qÐ:Š¢’GVÓj`4šŠ+aZáObY-F“+ÕëÍÈQ¬ƒ¥i›àå©„q¡–ðÆ…Éh0pò…rRÄþ“Ñ èW æÏÁÔÚ5¼ÅÅťѯëéáçÉ@LîžÏÿfê+ „^<=m6´aêPû_ᢠS#=Mxõ°¢¼¨€ÝCžÃèÀ ;ÀÞþZÄ0Ì%Sl©” ¹×†¸Âå†Ük]WG„Ýn§ |^~Û#†çô¢<@L,Ú 0êúºO UZ‘¹éi©¡Aø EzZ*Vd.|®¹±¶¶Û p}àÞÆ»À˜†Op°ü|ÏnVàûâI’À]wlÅŒøØPoœä2#>wݱUp Àét²Ÿþ{÷׌¼¬ÞòÉ("“´4ÕÙ2Wf§„GDÍ»dIQX–1]=}è q3 %}^*î»{ ¹à¢tUEqùçŸüã€:zŒIž›ÍITWgKëÊUn¢(J.$‚%‹ç#"\‹öÎ^¸ÖBLMtÑj5¸ys6nº!û’qŸpÏýÍÖ×_ýÕ{f“¡@/€~Þ †ó€‹¦‚bà<ÞìïëvH$T{ÚüŒ\’$/:‚@RbÌ÷ünÞú ÞÆþ±&„Ðõ²’c-Ý2wÞ¢•%•…(¸raµ˜­ï¾ýòžC_~xƒüáÄoØú+½c€ÐÚ€ÛP®§ªâtQBRjDdTl A!7˜Äp:lUEqùë¯þê=~Ìïò ŸþÑ‹?Üh=|4 áºz(  @ôÒå×-¼9ïÞÛ“RfgÈd2yˆžËv»nn¬møôß»¿®«.kâÉîçË oûf¬ŸõÖûÇ*!È(hx!DW(UQ¹ó2fd-‹ŠŠIPª´áJ•:L&“ICÔ?hšvX-F“Éh0öëzz*Ê‹j |^ïðy›×󉞀‰ó‡{¾SŒüñ`¤$¼¼Ô¼4üc5ÿ9?‹ <†?oj2-ÂÓ²|Ovð½ÚÊ÷p3O¸ÉcµÏæ±æÏŽF>| ‚1E¤x‚e¼†¡àÉ—ñÏKøú„ï;EÀz,ËÓ¼l„¯ó;<,Ÿ ùþáéÃŽ !J€üPï¿FŠ€A¸ç?;Vâ1=‘aéžbðüMâÒû¦„blé¬Ùž¤sãéõ%¡×‚Ðãùþ‰#ì}äªç/y)„ˆ¿¬B€¿Äcˆ ‘~yÅŠPøÿʵ¬:ÙCC€IEND®B`‚fs-uae-2.2.3+dfsg/launcher/share/icons/hicolor/256x256/0000755000175000017500000000000012162366654022472 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/launcher/share/icons/hicolor/256x256/apps/0000755000175000017500000000000012162366654023435 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/launcher/share/icons/hicolor/256x256/apps/fs-uae-launcher.png0000644000175000017500000003752712162366654027140 0ustar glaubitzglaubitz‰PNG  IHDR\r¨fsRGB®ÎébKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEÜ  ¢Ž÷ IDATxÚí}w|[Ç™í¹è…`/"%‘¢D‰Tï’U©jY–U]²q‰Sl'^÷Äv6Yw;q²Iömüœuœd7õ%NìØŽì¸I”H‰¢(‰)öÞ v z»÷ý¼/H€J,sô›t à3ß™oΙ PPPPPPPPPPPPPPPPPPPPPPPPPPPÌ00ô{PP„  ú™)(¦(03$Ø©(PL§`ç¨Lì31~)(¦¢p2~D‚ Åõës~ ëçÑŸ0\w`¦Xàû9¿ˆyωÇ*7"ø}ÝÅ;vyùÅW®»0S,ð}Þ_ñ}ÝÐû1†PP„ZøËz~»Æ(B‚p]…€¹AÁ/ü¡À–xþÏ”,ÎX~øøýÛ5áQóå e¼\.“Hdq©,V*•ÆH$ m“× N§ÓàtØu6›­Ïá°õZ-æ>«ÕÜ3ÐßÛþÑû¿¿ÔÚ\kàºÓ§¸|}3ßa¤‰sƒŸß;‹}‚_Â+RÒ{ŽÌÙ±ûÐÍñ óö¨Ã4›D"‘”6=Š©–e†Áþ«­Íõ¹gO}STp¾€ÃìvÏ£ƒ÷7¾0ð3¡l€›Nàüü1»˜øÒ¡Ç̽G“ö¼óKQÑq{”*õ šÊSL÷¡‚aP_ÝÕÙzáãþp²¤(¯Ë#üâà‰‚Ógˆ ” pÓA”ß7ð‡‚_–±|]äW¾ñôƒq s¿&‹U´ÝPÌÀaƒ¥©¡ê½ß¾ýú;íÍl¼â+BBò!3Éï›ò•¡_Ÿ¤~ä©|eîüÔoI$’hÚL(f:ìv»¾ªüê_~ý‹W?0õFV =:x…o†|H0™ dòy{|²ï½üÖí)©éOÉd²y´YPÌ6X-殢 ¿ûõ›/Àâ)VOñÍ„LBb_§à |9yl|RØk?ýãçÎK}J,‡Ó¦@1!‘JÃæ'/Ú¾~Ó®¤KyY%‡ ¼˜áÇÑX½=3U  àß–yhÞãO¿þ¿šðÈ}´ PPáQ‹¶î<°¶¾®¢D××åÀHÜ›L‡8øù &òIùå÷}㙵·ÿÊ e:­v Ša(”ª¸ ›wí4›Œ5M UŸ¸kRG"âI~F`¼¯xöù7ެߔù+jôQPC*•©–¯Ú´;<"ª§´8_+ð¡…G ‰ˆCü¾—ù¼iÿ³Ï¿q$cùº7†‘Ñj¦ ð‘H$I]´tk˜&¢“'Ü=?G2•øŽù%CÁß7žY»~Sæ¯hðSPT Ã$/X²~ ¿¯¢¥©FïÓã‡ô*€$„½?ãÓû˶eš»-óà/E"‘¡ø´œ.FÌV' »“ƒÃS8Ž6Šë €TÂ@*a “0JDP)Dˆ C"&»²>ôn‰D"ÿ—û}¶µ¹öûM U­ð¿Ô˜?€À° à žègåû½†_l|’æåýöÏJ•z½¿AL °;8è Nôœ0š]´RLY„©ÄˆÒH­‘@&e&TCèëíª}þ™û_´ZŒý=Å‚á„C†‚ž2Ì¿oê/óå¾õáO#£bïËŤ·×öØÐÕo§½;Å´Ë¢dHŠ“•½²©¡êÜ+ßàÿÐ ˆÀЄ!ßiÃ…›˜ øÑ³üdäß{ù­;çÎK}j¢?ËrÐöÚQ×jÆ ÙIƒŸbÚã£Å…n€0¥ ÃLH"£bSÂ4QºÒâ‹­½‡ÀX³Ç%$õÆÆ'©SRÓ'üv‹êfLšêSL8Y­èôv¤§¨!“Š&tž-Û÷ßñ÷wÞÊ·ZÌüu¾ †DÁz$€oï/ xæ¹7¾h"_Ò`r¢¢Á«¥-‡bFÁî`Ñ;`‡F%\& zL.•ÉTѱs¬W/ç4øýxk˜Pf̽¿$cùºÈ¹óS¿5‘¨wÀ†Ú#M÷)f°eõz,NCl¤<è÷¯Û°ý¶è˜ø]_·ï~CˇùBP ž Žý¿ý½Ÿ=•ì49PÙ8HƒŸbVx:½)ä2qÀH$RY\Â<Ñå¼ÓU½g€ï’a„Z|ÿ¡kþ2²Ì½GçoÙqàÿ»m—Í΢¬N—‹F?Åì¸(Ũ+ã¹v±q‰É¥Åù—ô}&øßNÌwÏ&”à»ØG@ñà#Ï?½#˜‚e9”Ö ÀbsùÝXZfbq±ôF;¢#®Œ'b±X¦‰²_ÉϪ€ /Nô*À(÷?*:nO°'ií2Á`²Ó.bVÂ`²£µË„”İ Þ—º(}5€“pÏ{:á¡]¶Ä<ð­ËMT„nÅåìÜsdŽgÏ€áp²hé0‚ciêO1{ÑÒaDRœ RIà—cb槤¦Ç57V›x ÁÈûf0c~°C€1Í¿{¿þí;¢câƒ2ÿÚ10H{ŠÙ –åÀrb" †â‘ãÐ_R”×÷|þVãA™øfÒø„yA¥ÿV» íFpÔö§ @{§óç„A! Ü’K_ºz%€Óž~?´ÿ?éL@ß[y‰ˆg¬Ö¨Ã4›‚ùÂÝ}f¸X:Ù‡‚\‡î>3’¿¹UBâüE‘Q±šþ^£'ð¥¹ó¶o¼ Î ø¾=¿wÍÿWüîÍ ‰ó‚šùWÛ<«ÍIkž‚bH\’âÃ^'‰D‹Y[]YÔ áû  ˆ‡£îî£ šÌ ì­ É?Å0­°;\KÄÅ'Æbäµ|{†¯p¡Àgü/’+”ñÁ|Ñ,uþ)(F€óÄÆ¼„À/ †i"#}‚_‚‘7Ú ùjÀQù\Ì ô+XŽŽÿ)(„b#P‡iÂ1ò¦º¾ÂÅ@¾¦‚€H"‘%V»“ºÿ~b#¨Õ Füá¹È'^C’ø X"•Åõ%mT((üÅF0P©Ã4>Á/âe¾½¿à•€`gÂ'`¤RiLp_ÒŽ((c#(•ê0ŸÀc¤QOì0ãü]$‘H4Á Í((H@&W(Ò}Q cÿ‰|MÀ árÑÞŸ‚B86&Ô1Š|z}`ôZ€ ±ÐÅ?!‡¯áPðOT@$tüOÁÃMÍŘ;Ð ‹8hk¥i+Лp² :ú…÷¥ÙØR‚ä~÷·D"á“Ìw ´R7`HBD„Ð €ÂÄÁ<ókH]dÓ£¢Ðxp R¥6@m‡\°Åux6ûW¹Ä|M·@1ßu€ õþ$0á; Q ÂCï@Ê8‰»¡³GÁ)u÷À«ZœÀÌ× þ ã Ÿ#¾ë,ŠUIˆÉÆK€ÀÖ¶b¬ï*'¾=mã’¥¨[¶Ü{\Ý.ƒK mì(ÃæŽk×ïî¨%×ûrtð¬‡ÜeÇC%ï£S"Á™CǼÇí:1ô&`äíñ™Ëoÿ-ä|Z?|ÓI$!$¡CŠ€ðåêOgï'î~®ì܃h÷<4‡“A]‡X°}ÝQw ‰¶ÞÐò¹€Z?|Ó ×? 0«1ÏÔÍgˆ{c}d .oÞˆª¶C »ð]õšhîÃ] §BÎW§•òM‘Ÿ ÅÔÄ#UïB"r ÏW› Î8§ÄÝ|õfm½ÂKÞ®~2‘cRø¸°«Å êÌVdvc­¾š¸7®[´ —b¨ÿ­haÛÕÖÞ2lê'7ëøfÊ’všP\(]6|³ñÃqRœÝ}Ô{ÜÚÃxŒ¸‘íJÎ:ðpã!á;*càÞ¶ÏËê‰[\þæ½ Ø@M›p›úrû)$8uÄ|—䣨е³)Ö.ÜÞsޏ7îˆEÁÚ]ÞãªVÀîÝžæÚzqWWvHø®ÀG ÐíÀfoby½ŸÙq.±»Éö€–nás>Öþ>¤"ghùŒþù¨Ð!…ì,Æk=qK«]° MóÒ=m(idÛÒNC)6ZjÈùRVÄG€ …¨Yîý˜8wHd8»éˆ÷¸±“…Þ4º7V°v<ÚóQhø6M],ôÆ™™¹ÒË€“†¯õÈ¿5ûaPGlU-Nõ#_ÈB'NÅí9²WuíNè£{xgÃãÖOC`üÉ‘½òð¸|Tˆ€š€39N#Jl">ÏÅŒ›aT„,6å6ÁÎã뎳ˆˆùò2öèˆXíþù¨‚î4s‘Îuâw…¸7î ›ƒ« vx¯ÕYawŽî8qÝø—OÌ×6W Åu6A>*t@á €g¹B$&¯ß¬e'À2îõ»]ýN4w oâù ÷ Ä!0O/=îåëîw¢¹Ó>kên Fc…¤ø<• ëѹГ-…UÁ6sPTе’fr¾øuh‹Zäå+ðÃG€f~ÎXð¨ô áv±€M¢@ÎÂÛ¼ÇÕÍVè£/Ã…16*T(ÆÀ#ò³ˆ”˜‰Ï“—r L2÷­&ÍV¥õÁöò-Yb$Fb¾ ÄG€ …,“tา˜ø<=ª$ÍÙê=.¬2Á!`Ä-wã.UAøQ4gÛ0_µ0€ õf Dàð½°ÏC`ü18½à8×ÑkGs§UàUÀ÷4Ÿ…„/+…Ç×gGs‡uVÖ!Í(&Œãêb,WvŸ§Onø!XD*€ÁäDqpoüTr."åäFãùðƒ°ˆÔn>³ÅÕ´÷¿q@/NK¬‹èÀѤJâótJ’Q¢Üä=¾Pܧct§°*¼ wÎ-ß|”*oòçëàpÐNˆ(†˜áðRF6±ñÇÁé°ZÅÓ¤5£¹cô¥=ÃáÅôÐñ Íf4iM´B©Pƒ{RJÙG|žét‰çœ.Š{Û׿—aEt1_©ô&t‰ç{ùr‹ziû£E0ˆ“›ñdÆerã C®ì ÷øj…ƒÆÑoDË,øöÒK!àSã<Ÿ¯²_ ÀuÝlzáßV\D˜œ{¹¬ÀvÛ›“:qbi=1_»3å<¾ì+pÑ-è§â€þèS¶1ˆX¼º›ü–Þ,DÈ2žðW7éÑ"`üID,^Û£ÑÍç6þj›ÑL?šP‡on(CZ¬žøŠ©"´n¦2iqë2òûìµXÓPe^ã=>sI V`æç¶8²2F£u*Íë¼Çg/µƒuÑF‡C&qáÕ[Éß°œYºãÞ㪆´w b¯ Ÿ§û‡ùªÐÚI—úNyàh 0¥ð­íeHM$>On'tŽ€Íî¹B­`]?¸­i‰äFãÕþè³9´mÑ €"Ì2â±=¥Ä½±Á‰|Ý~ïñÅk]‚Æ_R„ Oî-!æ3:#×Ççë„ÉB¿iâP•ž*xùèe(”äûâŸÕƒ•zt·ñ'PÏ/¹•ŠÜhÌÖƒu½ýVWôÒvE3Š`°wY;n^ÕF|ž&ÃÔêWyÏ\j\ï‘™®Å­k[ˆùZ ‹Q­_Íãk£ëü§—ÐʺÑK]xõNò]~\œgÚ†gü•×é í=O*fñÚ]¡áËj6þ*ëuhï¢3þh@¹¹É äSоý¶X€ÕîÂùB­àëÞ_ÔD1_¡6:k<€a£‘bš ]|c‘gÄ#ˉ{ãA[òµ{½Ç®ja0âæÅ˜ðøm!0m‘È×îóçuÀDgüÑ €"8¼vÏÈCaüUƒ“•ºúÌ(©î|Ý+w„Æh¬9 ‡‹g4VõÒʤ@ ¬kÞµäiscßRÔõ-÷g]l4á÷¬ÖâÀ†ºtÔö®ôŸ¾ØJ3Éé+´ân2^ùJq*îd%Ȫ=æ=.­éEgïèxr© ¯Ý…Üøc%8S;lü•Õö¡£‡ÓWhüß_Ыm´—’`Ä£·W–h\j6s Ûa±RãoZ ÿë|³RùöXg*ŽÁɺ›Lg %5~Œ¿ Cb4ž©8 §‹o4öÐöC3Š`phk+2×wŸ§®c9º–ºkN_l¬Ë›Û±o3¹ÑØÐ¹õËGðQãzA@¥pâåo‘.)Î^6þJª{ÐÕ;ú®¾ ™ ¯>|5|œ¹Æ7{ÐÙM—úÒ €"(‡C†ììa㯨¢ Ý:3­Ð™-TßC§/GL¬¤£æ‹y7Ãd ÍvÿÆß£åˆ·ó]Ü£!`²8[H¿YàÐ=”Xš¡Ç½w×÷ƺÞ9¸V´Ã{|6¿v#.}ñ î¿¯Ž˜¯_—€âBžÑ˜ß ›4  ¼üB æˆ{ãì¬`Y E«GU½°ñ÷Ò E`BÀ—“u|ØhìDE5þ¨@ŽkÆšu}ÄÁXW¹m   ‚¯;z¤ë7öóÕW­A{KÚ¸|3Pè Cƒðpž~¦ŒÜø³)Ÿ}›÷øJi;úFqÏ|·”Üø³Ë‘Ï3 Ë;ÐÓOgüQ€"(<ñd"¢mĽqAÞ-°˜5ƒÑ†¼Â6Á:zì±JDÅóæÝ 3ßh,h¡m‚zÁ`ÙòÜù/äF\OªŠ¶z³.6Âá½ô6=C¹§˜o w*øFãÅFØt©/õ(Ãßñ8©Ç ÿô pœÛøkj@Mc¯0ßK×À…ÀøËÏ:Îc46kPYO—úR  ÇîhƲÕýÄÁØX¶=ÚËáÔ…zÁ×>Ñ‚•kuÄ|M•ëÑÍ3OçRãoV ÝØqâ°ãѧËÉ?«Åçy/·A'`ü…G8ðXø6Šs†ÆË%íè¥ÆÍ(‚Ã#OW",ÒNÜ—ä„Í4ØWÔ"øº‡ŸªDxŒÆÒ¼[`5¹ÆA£ y…-´2g¯Ð `"X¶r‡ïl&7âºæ¡±d‹÷øt^œÎÑ!ž±bGÿ¥‰˜Oß“„zžÑxæb½ ÑHA3 ?‰8|çå’ŧO€ã@}‹µM}£_Åßy©4„|n㯱­Õ ô®¾³[¨4ßÕŒÅ+ˆSñ–’MèïL8],NçÖ ÖÇmwµ }¹ÑØV¾:žÑxú|-­šPƒˆ(;øN%¹gQ¡*wØøË/jÁÀ uÔëÂ#íxðéðÙ”¨Ìá­Ðé-´Bg»Pý>[ U„ƒ¸7®Ê=‡Eåö­È/j¬‹ž®„:FcuîAØ=F£Þ`Å…«Í´î©P ËÖöãæÛ[ˆ{ãÁÎd´•lòŸÊ­…Ó%`ü­À-w‘óºæ¢íÏh¼ l4RÌJ€þè@$æðèË¥`Ÿ›cPyú÷‰j{Qß,`ü‰BÃ0¨Ìºg4ö¡¶‘T¨…Cw7aÁÒAâT\{m ]óN'‹ÓjëàЗ›±p…ž˜¯³t;†ÆSçkiS ‘±6ÜûíêahºpÐ{œwµ zÃhã/"Ú>§E…†ó¾F#5þ¨Ð (|õ»•PhœÄ½qCÎ!8­J@¿ÞŒKEÂ{îÝÿÝJ(C`46æÞ §×h´ ÿj­o*¾cRú£…euÈ<ÞNnÄi §|ƒ÷øós5pºFŸ5c]?vh#æ3v&£«t³÷øÔù8œ,­P*4b1‡^.'î‰9N„&žñW]߯ÖÑÆŸHÌáÁWÊÈ?ŽAãé€Çø«mêE]35þ¨5bXgœ÷X£–A,þTRY7‘`w8a0Ú¦Ÿn¹¿óÒ ÄÐS´æž$·àpyŒ¿Ñ8po æ/%çë-Ù3ÏhUã/ ÚÜñFŠ© Ñ èÚ* ÌPG¿ ¨@Tr¯­EG·»g—IÅØ·mñäò¯ ˆÏ·ÜóýJÈÔn㤴çÜ—Mèë7árq³ ß—ÿ­ r 9ŸöÜ!¸l46t£¾¥7èú¥ÿFþ£€¯3Îi¡ÿ•85ÿ¸d'Ì6wª¡ÂÖu &™oG@|7½ ‰‹Ä½±®hl½s¼æãé 5‚|û¾ÚŒ¤%!à+Þ [÷°ÑH?š„Ôà…í¯É;ˆÒ,VâŸåÃ[RoYŸŠ¨p¥ ŸÒöÄ2-1ßÇeÃ|[ø¢¬¸íñzâÞØn ‡.ïf/×ùKõ0­£¾Wd¼‡Ÿ ŸYƒ¾ |£±ƒ ¿S`’®pv¨o÷Ê—»V¢yÀÝkIÄ"ÈÌð#R¨L¿ æ»Ò½Mýn>±X„™KGÐÜù|$*q@öæk—»/öq¥DxϽ;þ½Ò½9·å—ŠšhWJ3€É…Ô\™3PcÂ…SoØ Ö3aear,2%ŒÁwž˜ïý†}<¾d¤¹ù2¶õaí­]Ä©¸¹% ¦ª5ÃÆ_N¥ ñ—¾U‡õ‡;‰ù,m©0U¬—bz`ZÝPÙñßpį'VNøZ6º×bGÂU÷˜xG:ê[z`w¸øÞ‚#~‡ÜîuØ™PØ¿#MÚ.ÜùJùŒ?VŒ~žñWV­E³V7Ú×p¸ë•Jb>°¢|µhlë£QD3€ `ÂEdë…¢óOÄ©ùçýÛ0èTÂÃر1m ¾?„€o+îÝq4j¾ú¢q Mä—ý v©‹ØìNœÎ­ü{hFÜ"r>CÑv8z=F£Ë/-eæÈ~!Eëß!v5¤U!ÃÉþÝÞO´iM âbÔ~ø>€ØÙ@ÄgSÈðþ]î<|KŽÃ†Hó÷{¿CN~-LfۨϙhÁþÇÈùLá0æ6/×Á`´Ðˆæ šv9 炪ì瀊# Êb.µö÷ bpp×rÿ|åoó]ãÒQc_Õ®ÁJÄi8{œCèê5 Àñwô…ˆC`4²ƒ2uF\.¦ÆÜ(㢷 ²öSÄ©ùûνpÁ½àg~RV-뇯òöωùÊR8ˆ—£­i 쵫¼Ÿï³ìrÁ[®-Ùчå»ÉùZÓ`¯ZËã« Æ5' &$gQþŽŒ­àäa>G¢p–Ûˆ}L>`ï¶tÔ4ôÀjsŒ6 þöômàš‰ýÐbn9ø=ßÇ%å̰w­²múQ¿«DÆâð+Õä|¬–¬ã<£±-íý!«G šLLF,z( þ‡è2Ô@–j3tL„[T”2ìÞºX˜Ïª‡òÊo&̳oû *ªN€¨Ø víXmœñ3ãoÛC͈H5“óîÛ—à5³réŒ?*¤ @ˆŠ¼äHú«‰Òr‡J‚Âöx?ÞÚåó4'B˜¯ô3HtAsDÇ7b÷ú×áÈÊ`4œù{½Ÿ5ûb-ÌVû¨Ï9ß‚­6ó"à¼8l4ž»T£ÅÒ:¤Å§Ð CƒêÓŸ –H*#¢Léîù†ÁÁ]ËÀ0Œà Õ'oÍwdë`ÄâÞØuö(à”:ºqµ¼MðgÙ÷B5 `Éù²·ñ×Ýgð;Âz×Ý‚¸½òÂ`Ûy”è<&îÂ’¦&ÈXæÄ…cÃÊdÁ/îh„üÊ?`Ûu< óf$|Œ%IÅE K!©¾RñYN¥gêøÈßsឤîï!çk^IÍjžñ'Ì7mR]‘aj%4÷¦¥f³&“v‡“ Àt‡òŸ¿‡cëN°Q>ÇÂqjÎÒždÞ”†Êº.Í£wóQ~ò{8¶í9ö:‰ÈŠƒ+'7âœ(Ïó•·AÛ¥Í'g±ëŪb(Î \I•­Áï‘´ 9÷Þu ¤um¶XñŸ¿xgÜ×ÉdR¬_Žë–bݪtDGG@(©ëìêC]c; Š*‘› 6˜ À”7MPþým˜ý7¢óœ[°Ê‘`îƒ\&Á¾íKð᥆ Ê÷Þ†éñïy¾íó^‡FÙHòË{ÀèÝbc±:pö¢ðën„:ÙBÎW ‘.Îc4:ýã!"< ›7,i] æq_³}Ëj|ãÞÛ9îkç$Ä`NB ¶ß´ }õþú÷SøàŸç/«Rpjy€#ŠüÂYH늉¼—Z„÷—íó~ÖåK‘:/Z˜ïb¤5þw+ŠŠ¬Ãæ¹?&‡³úÈ® ›”g/ÖÂjuŒú<ɬþV#9ß`$d—FÎ04[ìSÊÓòÇ%b<ýØÝøî÷ü¾P)åøÚ½·á‡ÏJ…|6x€7œ¼ŸOõ«_2'‘ÔχÂù˼Ÿö@æRÏîÀ~ø¤Â»íM~,c#vâ•YÇÀ8݉š¶KâòvÁÏrÓKU`å,9_ö10·ÑØÕcÀÕ²vÂæ<!"üÜ_9‚Ìmëˆ9V,KÃóÏ| b±dÆKÀô¾ àkе¶Bù¿ÏØûhC&,2·û¥Ææ5)~ Èv(ßwÔûÓ¢?@²êSâxÒºå7º÷à8ŸåT ~ŽäýÝHÚÝCÌ'iÌ€¼v…Ñ8=RáÕ+ÒpøàŽñ_à÷Y¹< ‡l¥Àtƒâw†íð.°I >‡Q¥Â§vàDÞiÀ¶©(¯í„^à>wŠ?¼ÛÑÝ`ç¹WÉI3¶kž©•Ä8¥?;lü]-kCg÷àhR¸°îÅ*r>—ñ<£ñZE;Ú;õ“SI‡>ËÐ[-V»àßï8ºÇ‹‹—ËðÙé|h;{ѧ„X,Blt–/MÅ]Ç÷"!^ØÌýòíûðÙ©‹3úJÁõ€IÎr› ꟽÃ[/çâºUØXWŠùÝ]Jĸyg:Þýgñh>‡êŸþ7 ¿zÕmĉ_ƒRÔBlÄEçï…d0Êã|Û‘s©^ð·[öhäsÉ¿¨Ë»!ˆi42“S×,Çá×8²óF„‡aõÊÑ38].^úÑop­¬näßY´]½Ðvõ"çB~ôÒ¿"máüQïW«UX»&— Ê© 8<€¡"={ ²s;áÂÉ9¼ó^pžkG‹Äaqj¼0ß¹ÈÎæ"BV…âŸq¢þ8D /W>“W«Í9Š7,ÕŒ´‡šˆù}4¢.÷ Ùùu0[“<¦ ]}'&Ä 2”U6àZYý˜ïµ;\øÑýÉïPgÕ²4êLG¨^~ ŒÅHd‰µ&Dãâêá1ñÍ;Ò!•ß.LõÊÛØìúW¸`'6ââÎãró´wéQR¥§¾T —”Üø‹;{ o†aq…vZÕutT¸p¦Áv‚îž~TÕ4 >…™ ÉLýb¢ö(Þ|–gî&:ϧÛ7`eM4f "4 lÛŠìüºQ¯›»¶ âbâm·"jV!¬i‰÷X×/|Ý;ñ`'¢wôó…×/ƒ¦~Ù£qº]7š,½÷ò4¬Xºe• ãžãwùóçÆÃjµ»‹Í«Õ½ÁD`ºBùë“°ŸØ×¢¤ ŸÃ"gðqæF|ùS÷ Á›Ö¦ ´º}ýà C¬rañsäFœÈ!CRöÈ)ÍË—ÌA~Q3ztÆ‘|χ€Ï)EÏh,®Ð¢CÀhœêhmïÇq£ÖoˆÅb¼öÜCÈÎ½Š¿}pÚNÿw,®¬nBeuff¤à-Nªþ—0Av pY ê繯*ˆD nÉÌÁ“úx$s¬Äcñ9÷Cfp/Mv‰E~ùÝ ~öæ;8ñžûÎý‚¯™?7ž ÀLƒú…³øøV@x¯‡ßƒÃñÜõnÂì¾ÃЀFŒS7Éè'oÍÅýPyfšÌvœ¿Ò4cêqûM«ðÐý‡®†ˆ6ìºztxð‰ÿø<— +ѪíÆü¤øÑõ0íŨLõ£fÊÿ-‚åÁ…e hCN/¾‰éIÂÒâáfNî–À.ÕO_T_–Yyu°ÙgŽñ׫Ó#2bôíÚâ¢‘š’„ÆæÀ'856w @ ¦!€€rSg_yåµ°Ö€3^sˆÁŸB`Ä1ØzúÎÝSU/àP²Øè‡ïÿ…ÄøÛ’u"Ï ÃíÊk»¯_ø»´Í„®4µtÂérA"°LûÈ­Ûñó_¾`³d°4=Eðóvvë¦T» %fÏ<¡J·¸ ~µÚ“~û/jäB‚âI8KÊ6`ŽvÀ)æðÁž1øš‰ùV­ÅÜVÏ C–Ãççkg\Zmv ߯pïÎuÈܶ& óÜul·ßT¿½£‡f3²Ï!Íé„#SáG!mÐà,ùâ«ÛÎ _yÈÞ0€Þ¨¾Iã“Ù娑}Ø{|¥¤ ½º™¹¶=ë\!6oX&øÜcÞŽÉsð÷“9‚ûD„«qû‘]8zPx ÑdÁ•¢**3ê—uЪ'ýœ pÁB<ß{J‹ûVæz³gV7S{BÅ·#ïÔ&÷ CƒÉ†Ü‚¦[— +Q]Û‚ôÅÉ£…P&Áí‡3qpßfÔ5´£½£z#b¢Ã‰¥é)PŒ1Æÿçaõ³)€  §Ä-”¿4Àüëóãè!Cq0Î隇5%[¼Ç§ÎÕC¢„ý™Éá‹ïMÄú¢íÃ=ä…zØì øí™ëÒ8xë·'ñ/} 2™p“V)Xµ|V-_ðyµ}øÇ'0]ï‡H=€`Rô·q“À€·Èq Np„cqNŸÃ¹Q]sj{¡üâºÉànÎ:‘g†aS[?*ë{f|ý54iñoüyBóþ… 4á¥ÿÖïvcS Ü€uó4ÆÎ@ý’ÌŒ4‚…‘xñÍê’M˜ÛéNM.§r=û :õ òó-¯Ø€ä¶T€‹åðÅùºY#â—¯Vá…×ÿݽDç©®kÅs?ø :»t3þ7£Ò\dŸˆ`¿µ ºÈwù±¨°?wØø»xµƒÃ›MH/+!ÿP Û±Þð)l Èæ»|­}æYU‡¥ xìÙŸã¶[p`ï&ÄÇ>‰§¥­'?»€Sg ¦ûÍA¹É޼çŸÚã)õksáÜØ g$@ 1Ĉ0‡ý¹E,ƒÝù{!7)á`Ytõ‘_Ô6ê<ª×ç¹µ Î(r¾W2¡4†ÁɲèÖ™p¡°õ†þÞu Züûk¿³Oæç²Xíx÷9xïä9¤¥ÎÅâEs‘š’ˆÈ ÂÔ È¤RLf Ì0ÌhjéDQI­Ï–cÌL|n dáü˜ú'Òɹ-4|Ùp {¾ë “ÅŠRóñ™ë jÛPÛØ6-ú&‰Ÿ{NvÊÜdyÀ9NC0opï²BAAAv›ÕÊÎG ê¤IM@Îé°å”h4a´¦)(Bf³ÑäðAÑ% |ïÿm6[ŸB©J ôÍášàÇ·³áÁ €Éhä'”H&üœ‡‡­7Ø/Iß‚‚\ŒÆA#/øY^|²Š€(À€÷÷wÖj1÷ó¡ç&%К¦ Al˜Œú!àgìdxœï؈Ôj55ÍlYÆ¢1÷`£ ˜`Ë2õý@¿'.Oá|aR<€¡âèïmæÍjµ )ÉsÑÔÜNk‚ƒ”ä¹P«ƒÛ¨¶·G«ã>_8?÷¨Ì@4ÁÀRö£÷‰eÙ v­Z¾lñÔ¼/#-´Ü ²|Ùâ ‚ßétºr³?©ã €ËÇð5‰†B*Â`[›k†Áþ«ÁœdÕŠtˆÅb*ûp߯|ÕŠô ÞÓÑÞØ2¨×Y0rÐ_ð³<Åq¶6×çóá##4زi5­y [6­Ü×p,T–Ö`x ØPð;}bs\`"ë#®³§>ÈAödn\.§¹-³ºÈårìÉÜ\rÎý¸Š×ó;üd㚢ƒÞC'vpœï6 ꫃3•Èܾ‘Ê?ŬFæöP«ƒ»m}w—¶CÛÖÔÀ÷F—NCp\˜€|óÁÑÕÙz!Ø/¿sÛ$%ÆÓV@1+‘”Û6ý¾šª’:OðÛ}DÀ%ŒéLd-ç3pp~üÁN:Π¶O‘J%¸ÿžcS«hk ˜US«pÿ=Ç •w%Þn·Û?ûèO…>`ÇH#0ày"‚àgyƃ½¤(¯«©¡ê½`ˆÈ î»û½*@1k ‹qßÝG‚6þ ðÒÙ‚Žöf¯ð3þ`\v& 'xEà·o¿þŽÝn×û¥$ÏÅ]'nX,¡Æ-3ºˆÅÜuâ,Hžtð[Ì&Ë;|3ÏôVO±ñ2ßùO‚évÞ#¿ˆ<ç z¤-Y)JHœôÀfNB,-LFUMìm+´Ì¸¦Â׿rKRÇ 2!äœ>y¾ðrv ƒ§˜˜ybàð3 àB%€!”^»Ø²gÿ‰ý©4è…ÿ‘¬^™Ž†¦6Œ3ó&³×ð{èkwbNBlÀAƇ~ ðç?yöCÖåò ~¾ ] `à<€`ÞŒŸlÀ+»Iš¿Ð2?yÑö‰üP …ë×,ƒD"A›¶Û³Í3í>h™¾×ù÷fÞ„;ŽÝ µJp€ùâÓ“>UYVÐè |¾˜}†AÍœ¨øÿ¸z9§mý¦]IáQ‹&"b± Ìæõ+áb]hïè™î»´RÌB£oÛMkpß—#}ɈŢ lå%WÊ~÷«õý @úïëÔû7äï=C/   @£R‡Ç¼öÓ?ü$2*v©› ôzJÊjP^Uæ-Š) †a’œ„å‹°jÅDLÀå÷ ÈŽöfíKßûúvÛðdÜEÏ‹Ÿ!À¸aG"|P@æ•GÂÓÒW%?õÝŸü—R¥Ž%>L& *«Юí ÁƒÑƒçq*ï6L1s ‘ˆ¡ SC£QC¦F¸F¹I Xš¾0èY}cä ~ÀðÿõûîζNOÀóƒÐgà/à&+ðÍ$äPÐßµïØª»¿úä$‰œ6 ŠÀàp8oþìû.-¾Øà vþ½ä‡‚ßÈÿ;ƒíý'âŒåeLSCÕ`xDToꢥ[ºŸà8Ž{ï/¿ü8ïܧ•ž çû ž^ß_ÚÏ3â&™~ÇvÎG ø>SZœ¯ ÓDt&/X²^$ÑÛ‘QPŒÑó¿÷—_~üùÇ)æü ?ÿ²PÐÛ‚‡BÆË (-Î×ô÷Ud,[»N*•ÑÉÿ>ÔÞ~㥿 ôüC) “~¨NÀgüd¾™ ¥©F_QZpeÅêÍ*UX ­r 7:Ú›µ?ýÁ“ï4ÖU´cäµ~ßà·`xî¿ï~€AÝ(Ôàï¹j ¿×zþì'ùËWmˆ‹ŒŠM¡UO1ÛQ^r¥ìǯ>ö®A߯ãõüƒiöñƒß1Nïë%BYÀx7*äœN;›“u²8L¥›“8TF‡³úþÁOOþùÔï~õ£³¼)¾üñ¾oÏoÃÈUümÀƒJýéÁ'zFO’Á}‰P ÷<¡¹j…R~ß7ž¹e݆í·ÉJzã@Š‹Ùd¹óéÅwÿòÖe‡Ý6à&Ÿ2Ôë ?ßõŸpð‡R|ÇþŒyD`¨¨=b ŽŽ‰ºçkß9¼bõ¦½R©”Π˜q°ÛíöÂKg Þùã›y†Á~ƒ'°-¼^žÿhởàúnÀ“)㉀„'r!Ê T)©é ‡ŽÝ¿+uQúê˜Ø„ù w¥˜Æà8Ý]ÚŽšª’ºÏ>úS!o3~€›}z{‹O¯Ïßñ'dÁ?™ $b!B@ ”ž¿+SRÓãvî9².}éê• ‰ó‰Ý;†PPLi8NWG{cKeYa͹³Wñ6ð´cøÞÐD‹@Ð[R~ß}Éïz€?`<0T¤¼Œ€/ " ‹ŒŠÕìÜsdy\|bl˜&2R¦ W«5•:L£TªÃdr…‚6=Šë–ÎÛ¬V³Ùh2›ŒF£qÐh2êú~CoV—›ýIç¦CÁËß»¿›¿ðŸ¿Ó¯¿>‰ƒ²@èÜü%Ãb^6àëÈý”¡ç¥¼÷Hxçâ¾ÂCAòÌÞ'ù†›<ï‘/BÅwœ/´Å+ð90U@(ð'R1ð-R^‘øF@@…€"„àçü€Ó§7·û)ßàCè¶ß! |\ÇÀkHàëð³þ0ÁW$Ä…ü"ø×AXàîP û·ÝG|ïíç{—ߦü7B„xD6 E¼ž]âãˆùïÚ“ T(&!ð}‡ü›åøn™ïûèø áí¼Cžòß(âÚ]XäÔþŠH øéøŸâFû¾"ÀÖ§pðKoîzåT‚ â |_ë/ð©PLVà+¾—éøSuýü üþ–3ãã'àiðSLnœ€÷·˜‡»8•„@èX4Æs cŠàøðÇñBÏݰÀŸŠ2–þïIüSHáiºB—oHÐOõ™ àï\ß§@q=‡BÏrùŽ›ŠÁ6•…€:Åt†)øÓ5xh°SÌdQ E‚<ŤàÿÕ'“€¸¬|4IEND®B`‚fs-uae-2.2.3+dfsg/launcher/share/locale/0000755000175000017500000000000012162366654020216 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/launcher/share/locale/sr/0000755000175000017500000000000012162366654020642 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/launcher/share/locale/sr/LC_MESSAGES/0000755000175000017500000000000012162366654022427 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/launcher/share/locale/fi/0000755000175000017500000000000012162366654020614 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/launcher/share/locale/fi/LC_MESSAGES/0000755000175000017500000000000012162366654022401 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/launcher/share/locale/cs/0000755000175000017500000000000012162366654020623 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/launcher/share/locale/cs/LC_MESSAGES/0000755000175000017500000000000012162366654022410 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/launcher/share/locale/it/0000755000175000017500000000000012162366654020632 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/launcher/share/locale/it/LC_MESSAGES/0000755000175000017500000000000012162366654022417 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/launcher/share/locale/tr/0000755000175000017500000000000012162366654020643 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/launcher/share/locale/tr/LC_MESSAGES/0000755000175000017500000000000012162366654022430 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/launcher/share/locale/pt/0000755000175000017500000000000012162366654020641 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/launcher/share/locale/pt/LC_MESSAGES/0000755000175000017500000000000012162366654022426 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/launcher/share/locale/pl/0000755000175000017500000000000012162366654020631 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/launcher/share/locale/pl/LC_MESSAGES/0000755000175000017500000000000012162366654022416 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/launcher/share/locale/es/0000755000175000017500000000000012162366654020625 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/launcher/share/locale/es/LC_MESSAGES/0000755000175000017500000000000012162366654022412 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/launcher/share/locale/nb/0000755000175000017500000000000012162366654020615 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/launcher/share/locale/nb/LC_MESSAGES/0000755000175000017500000000000012162366654022402 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/launcher/share/locale/fr/0000755000175000017500000000000012162366654020625 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/launcher/share/locale/fr/LC_MESSAGES/0000755000175000017500000000000012162366654022412 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/launcher/share/locale/de/0000755000175000017500000000000012162366654020606 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/launcher/share/locale/de/LC_MESSAGES/0000755000175000017500000000000012162366654022373 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/0000755000175000017500000000000012162366654021000 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/Version.py0000644000175000017500000000007312162366654022777 0ustar glaubitzglaubitzclass Version: VERSION = "2.2.3" SERIES = "stable" fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/OverlayDatabase.py0000644000175000017500000000146312162366654024424 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import os import sqlite3 import threading from .fsgs.GameDatabase import GameDatabase class OverlayDatabase(GameDatabase): thread_local = threading.local() database_path = None @classmethod def get_database_path(cls): if not cls.database_path: raise Exception("GameDatabase: Database path not set") return cls.database_path @classmethod def set_database_path(cls, path): cls.database_path = path @classmethod def get_instance(cls): if not hasattr(cls.thread_local, "instance"): cls.thread_local.instance = cls(cls.get_database_path()) return cls.thread_local.instance fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ROMManager.py0000644000175000017500000001133212162366654023302 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import os import hashlib from .Archive import Archive from .Database import Database from .Settings import Settings class ROMManager: @classmethod def add_rom_to_database(cls, path, database, log_function=None): if log_function is None: log_function = print file_name = os.path.basename(path) try: archive = Archive(path) rom = ROMManager.decrypt_archive_rom(archive, path) except Exception: import traceback traceback.print_exc() return try: st = os.stat(path) except: log_function("Error stat-ing file {0}".format(repr(path))) return size = st.st_size mtime = int(st.st_mtime) log_function("Adding ROM \"{0}\" to database (SHA-1: {1})".format( file_name, rom["sha1"])) database.delete_file(path=path) database.add_file(path=path, sha1=rom["sha1"], mtime=mtime, size=size, scan=0, name=file_name) @classmethod def decrypt_archive_rom(cls, archive, path, file=None): print("decrypt_archive_rom", path) result = {} f = archive.open(path) data = f.read(len("AMIROMTYPE1")) out_data = b"" sha1 = hashlib.sha1() if data != b"AMIROMTYPE1": # not encrypted, write raw data sha1.update(data) out_data += data data = f.read() sha1.update(data) out_data += data result["data"] = out_data result["sha1"] = sha1.hexdigest() cls.patch_rom(result) if file is not None: file.write(result["data"]) return result key_path = archive.join(archive.dirname(path), "rom.key") key_archive = Archive(key_path) try: f2 = key_archive.open(key_path) except Exception: raise Exception("did not find rom.key to decrypt ROM with") print("using key file", key_path) #if not os.path.exists(key_file): # raise Exception("did not find rom.key to decrypt ROM with") key_data = f2.read() f2.close() while True: data = f.read(len(key_data)) if not data: break dec = [] for i in range(len(data)): dec.append(chr(ord(data[i]) ^ ord(key_data[i]))) dec_data = b"".join(dec) #if file is not None: # file.write(dec_data) out_data += dec_data if sha1 is not None: sha1.update(dec_data) result["data"] = out_data result["sha1"] = sha1.hexdigest() cls.patch_rom(result) if file is not None: file.write(result["data"]) return result @classmethod def patch_standard_roms(cls, database): pass @classmethod def patch_rom(cls, rom): src_data = rom["data"] dst_data = b"" if rom["sha1"] == "c39bd9094d4e5f4e28c1411f3086950406062e87": dst_data += src_data[:413] dst_data += b"\x08" dst_data += src_data[414:176029] dst_data += b"\xb9" dst_data += src_data[176030:262121] dst_data += b"\x26" dst_data += src_data[262122:] rom["sha1"] = "891e9a547772fe0c6c19b610baf8bc4ea7fcb785" elif rom["sha1"] == "90933936cce43ca9bc6bf375662c076b27e3c458": # from Kickstart v1.3 rev 34.5 (1987)(Commodore) # (A500-A1000-A2000-CDTV)[o].rom dst_data += src_data[:262144] rom["sha1"] = "891e9a547772fe0c6c19b610baf8bc4ea7fcb785" elif rom["sha1"] == "c3c481160866e60d085e436a24db3617ff60b5f9": # from Kickstart v3.1 r40.68 (1993)(Commodore)(A4000)[h Cloanto] # to Kickstart v3.1 r40.68 (1993)(Commodore)(A4000) dst_data += src_data[:220] dst_data += b"\x74" dst_data += src_data[221:222] dst_data += b"\x7a" dst_data += src_data[223:326] dst_data += b"\x70" dst_data += src_data[327:434] dst_data += b"\x7c" dst_data += src_data[435:524264] dst_data += b"\x45" dst_data += src_data[524265:524266] dst_data += b"\x14" dst_data += src_data[524267:] rom["sha1"] = "5fe04842d04a489720f0f4bb0e46948199406f49" if dst_data: rom["data"] = dst_data sha1 = hashlib.sha1() sha1.update(rom["data"]) assert sha1.hexdigest() == rom["sha1"] fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/fs.py0000644000175000017500000002426512162366654021773 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import os import re import sys import functools import subprocess import ConfigParser windows = sys.platform == 'win32' linux = sys.platform.startswith('linux') macosx = sys.platform == 'darwin' if windows: from win32com.shell import shell, shellcon import win32api else: import getpass def memoize(func): memoize_dict = {} @functools.wraps(func) def wrapper(*args, **kwargs): try: key = (args, frozenset(kwargs.items())) except TypeError: # cannot create key -- for instance, passing a list as an argument. # FIXME: Log warning here return func(*args, **kwargs) try: return memoize_dict[key] except KeyError: value = func(*args, **kwargs) try: memoize_dict[key] = value except TypeError: # uncachable -- for instance, passing a list as an argument. # FIXME: Log warning here # FIXME: will not happen here.. se above type error? pass return value return wrapper def cache(func): first_time = [True, None] @functools.wraps(func) def wrapper(*args, **kwargs): if first_time[0] == True: first_time[1] = func(*args, **kwargs) first_time[0] = False return first_time[1] return wrapper @cache def get_lib_dir(): lib_dir = os.environ.get('LIB_DIR', '').decode('UTF-8') if lib_dir: return unicode_path(lib_dir) lib_dir = os.path.join(os.getcwdu(), "lib") if os.path.exists(lib_dir): return lib_dir #raise RuntimeError("could not detect lib dir") return "" EXCEPTION = "EXCEPTION" @cache def config_file(): cp = ConfigParser.ConfigParser() path = os.path.join(get_app_config_dir(), get_app_id() + u".cfg") print("config file:", path) try: cp.read([path]) except Exception, e: print(repr(e)) return cp def get_int(self, key, default=None): try: return int(self.get(key, default)) except Exception: return default def get_float(self, key, default=None): try: return float(self.get(key, default)) except Exception: return default def get_bool(self, key, default=None): try: value = self.get(key, default).strip().lower() #print value if value in ['1', 'true']: return True elif value in ['0', 'false']: return False else: return default except Exception: return default def config_string(key, default=None): section, option = key.lower().split('/', 1) section = utf8(section) option = utf8(option) #with self.lock: # if not self._initialized: # self.initialize() # try: print("config", key) cp = config_file() try: value = cp.get(section, option, raw = True) return unicode(value , 'utf-8') except (ConfigParser.NoSectionError, ConfigParser.NoOptionError): return default except Exception: return default def config_bool(key, default=None): try: value = config_string(key, default).strip().lower() if value in ['1', 'true']: return True elif value in ['0', 'false']: return False else: return default except Exception: return default def config_int(key, default=None): try: return int(config_string(key, default)) except Exception: return default def config_float(key, default=None): try: return float(config_string(key, default)) except Exception: return default @cache def get_app_id(): # FIXME return "fs-uae" #if windows or macosx: # return "fs-uae" #else: # return "fs-game-center" @cache def get_data_dir(): if windows: path = shell.SHGetFolderPath(0, shellcon.CSIDL_APPDATA, 0, 0) elif macosx: path = os.path.join(get_home_dir(), 'Library', 'Application Support') else: path = os.path.join(get_home_dir(), '.local', 'share') path = os.environ.get('XDG_DATA_HOME', path) path = unicode_path(path) if not os.path.exists(path): os.makedirs(path) return path @memoize def get_app_data_dir(app=None): if not app: app = get_app_id() path = os.path.join(get_data_dir(), app) if not os.path.exists(path): os.makedirs(path) return path @memoize def get_app_config_dir(app=None): if not app: app = get_app_id() if windows: path = os.path.join(get_app_data_dir()) elif macosx: path = os.path.join(get_home_dir(), "Library", "Preferences", app) else: path = os.path.join(get_home_dir(), ".config") path = os.environ.get('XDG_CONFIG_HOME', path) path = os.path.join(path, app) path = unicode_path(path) if not os.path.isdir(path): os.makedirs(path) return path @cache def get_app_cache_dir(): if windows: path = os.path.join(get_data_dir(), 'cache') elif macosx: path = os.path.join(get_home_dir(), 'Library', 'Caches', get_app_id()) else: path = os.path.join(get_home_dir(), '.cache') path = os.environ.get('XDG_CACHE_HOME', path) path = os.path.join(path, get_app_id()) path = unicode_path(path) if not os.path.isdir(path): os.makedirs(path) return path def cause(exc, cause): exc.__cause__ = cause cause.__traceback__ = sys.exc_info()[2] return exc def encode_path(path): return path.encode(sys.getfilesystemencoding()) def unicode_path(path): if isinstance(path, unicode): return path return path.decode(sys.getfilesystemencoding()) def utf8(object): return unicode_safe(object, 'utf-8').encode('utf-8') def utf8_safe(object): return unicode_safe(object, 'utf-8').encode('utf-8') def unicode_safe(object, encoding = 'ASCII'): try: return unicode(object) except Exception: pass try: return unicode(object, encoding, 'replace') except Exception: pass try: return unicode(str(object), encoding, 'replace') except Exception: #logger.exception("Error in pyapp.unicode_safe") return u"String returned from unicode_safe (problem logged)" def normalize_path(path): path = os.path.normcase(os.path.normpath(path)) return unicode_path(path) @memoize def get_user_name(): if windows: user_name = win32api.GetUserName() encoding = "mbcs" else: user_name = getpass.getuser() encoding = "UTF-8" if isinstance(user_name, unicode): return user_name return unicode(user_name, encoding, "replace") @memoize def xdg_user_dir(name): if windows or macosx: return try: proc = subprocess.Popen(["xdg-user-dir", name], stdout=subprocess.PIPE) path = proc.stdout.read().strip() path = path.decode("UTF-8") print("XDG user dir {0} => {1}".format(name, repr(path))) except Exception: path = None return path @memoize def get_desktop_dir(allow_create=True): if windows: path = shell.SHGetFolderPath(0, shellcon.CSIDL_DESKTOP, 0, 0) else: path = xdg_user_dir("DESKTOP") if not path: path = os.path.join(get_home_dir(), 'Desktop') path = unicode_path(path) if allow_create and not os.path.isdir(path): os.makedirs(path) return path @memoize def get_documents_dir(allow_create=True): if windows: path = shell.SHGetFolderPath(0, shellcon.CSIDL_PERSONAL, 0, 0) elif macosx: path = os.path.join(get_home_dir(), 'Documents') else: path = xdg_user_dir("DOCUMENTS") if not path: path = get_home_dir() path = unicode_path(path) if allow_create and not os.path.isdir(path): os.makedirs(path) return path @memoize def get_pictures_dir(allow_create=True): if windows: path = shell.SHGetFolderPath(0, shellcon.CSIDL_MYPICTURES, 0, 0) else: path = xdg_user_dir("PICTURES") if not path: path = os.path.join(get_home_dir(), 'Pictures') path = unicode_path(path) if allow_create and not os.path.isdir(path): os.makedirs(path) return path @memoize def get_home_dir(): if windows: path = shell.SHGetFolderPath(0, shellcon.CSIDL_PROFILE, 0, 0) return path return unicode_path(os.path.expanduser("~")) class Version (object): def __init__ (self, version_string): self.string = str(version_string) v = split_version(version_string) self.major = int (v[0]) self.minor = int (v[1] or 0) self.revision = int (v[2] or 0) self.build = int (v[3] or 0) self.val = self.major * 10000**3 self.val += self.minor * 10000**2 self.val += self.revision * 10000**1 self.val += self.build * 10000**0 self.mod = v[4] self.release = None if v[5] is None else int (v[5]) def cmp_value(self): return (self.val, self.mod or 'o', int (self.release or 0)) def __cmp__(self, other): return cmp(self.cmp_value(), other.cmp_value()) def __str__ (self): return self.string def split_version(version_string): pattern = re.compile ("^([0-9]{1,4})(?:\.([0-9]{1,4}))?" "(?:\.([0-9]{1,4}))?(?:\.([0-9]{1,4}))?" "([a-z][a-z0-9]*)?(?:_([0-9]+))?$") m = pattern.match(version_string) if m is None: raise ValueError(version_string + u" is not a valid version number") return m.groups() def compare_versions(a, b): if isinstance(a, Version): pass elif isinstance(a, basestring): a = Version(a) else: raise TypeError("Not a valid version string or object") if isinstance(b, Version): pass elif isinstance(b, basestring): b = Version(b) else: raise TypeError("Not a valid version string or object") return cmp(a, b) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/netplay/0000755000175000017500000000000012162366654022454 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/netplay/Player.py0000644000175000017500000000123112162366654024257 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import fs_uae_launcher.fsui as fsui from ..Settings import Settings from .IRC import IRC from .Netplay import Netplay from .IRCBroadcaster import IRCBroadcaster class Player: def __init__(self, nick): self.nick = nick self.values = {} def get(self, key): try: return self.values[key] except KeyError: return "" def set(self, key, value): self.values[key] = value def __str__(self): return "".format(self.nick) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/netplay/CommandHandler.py0000644000175000017500000000222112162366654025677 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals from .oyoyo.client import IRCClient from .oyoyo.cmdhandler import DefaultCommandHandler from .oyoyo import helpers class CommandHandler(DefaultCommandHandler): #def __init__(self, client, handler): # DefaultCommandHandler.__init__(self, client) #def privmsg(self, nick, chan, msg): # print("%s in %s said: %s" % (nick, chan, msg)) # def nicknameinuse(self, nick, *message): print("Nickname in use", nick, message) helpers.nick(self.client, self.client.handler.generate_nick()) #def endofmotd(self, *args): # print("end of motd", args) # helpers.join(self.client, "#FS-UAE") #def __getattr__(self, name): # print("__getattr__", name) # def handler(*args): # print(name, args) # return handler def __unhandled__(self, command, *args): # print("__unhandled__", command, args) handler = self.client.handler #handler.queue_message((command, args)) handler.post_message(command, args) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/netplay/IRCColor.py0000644000175000017500000000072712162366654024450 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals class IRCColor: JOIN = (64, 164, 64) POS_MODE = (64, 164, 64) PART = (164, 64, 64) NEG_MODE = (164, 64, 64) KICK = (255, 64, 64) WARNING = (255, 0, 0) INFO = (64, 128, 255) MESSAGE = (0, 0, 0) MY_MESSAGE = (164, 164, 164) TOPIC = (192, 128, 0) NOTICE = (164, 64, 164) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/netplay/Channel.py0000644000175000017500000001741012162366654024401 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals from ..Config import Config from .IRC import IRC from .IRCColor import IRCColor #from .Netplay import Netplay from .IRCBroadcaster import IRCBroadcaster class Channel: @classmethod def active(cls): return IRC.channel(IRC.active_channel) def __init__(self, name): self.name = name self.lines = [] self.colors = [] self.nicks = set() self.ops = set() self.half_ops = set() self.voices = set() def get_text(self): return u"\n".join(self.lines) + u"\n" def is_op(self, nick=None): if nick is None: nick = IRC.my_nick return nick in self.ops def message(self, message, color=None): if color is None: # default color does not work properly on Mac color = IRCColor.MESSAGE # remove special character (action) message = message.replace(u"\u0001", "") # remove special character (bold font) message = message.replace(u"\u0002", "") line = message + u"\n" self.lines.append(line) self.colors.append(color) IRCBroadcaster.broadcast("message", {"channel": self.name, "message": line, "color": color}) def info(self, message): return self.message(message, color=IRCColor.INFO) def warning(self, message): return self.message(message, color=IRCColor.WARNING) def get_nick_list(self): nicks = [] for nick in self.nicks: if nick in self.ops: status = "@" elif nick in self.half_ops: status = "%" elif nick in self.voices: status = "+" else: status = "" nicks.append(status + nick) return sorted(nicks) def action(self, message): message = u"\u0001ACTION {0}\u0001".format(message) self.privmsg(message) def privmsg(self, message, notice=False, echo=True): if echo and not message.startswith(u"__"): if notice: text = u"-{0}- {1}".format(IRC.my_nick, message) elif message.startswith(u"[*] "): text = u"* {0} {1}".format(IRC.my_nick, message[4:]) elif message.startswith(u"\u0001ACTION"): text = u"* {0} {1}".format(IRC.my_nick, message[8:-1]) else: text = u"<{0}> {1}".format(IRC.my_nick, message) self.message(text, IRCColor.MY_MESSAGE) if notice: IRC.notice(self.name, message) else: IRC.privmsg(self.name, message) def notice(self, message): return self.privmsg(message, notice=True) def add_nick(self, nick): self.nicks.add(nick) IRCBroadcaster.broadcast("join", {"channel": self.name, "nick": nick}) def remove_nick(self, nick): IRCBroadcaster.broadcast("part", {"channel": self.name, "nick": nick}) if nick not in self.nicks: #print("Channel.parted - warning, nick not in list", nick) pass else: self.nicks.remove(nick) IRCBroadcaster.broadcast("nick_list", {"channel": self.name}) if nick in self.ops: self.ops.remove(nick) if nick in self.half_ops: self.half_ops.remove(nick) if nick in self.voices: self.voices.remove(nick) def handle_leave_channel(self): self.nicks.clear() self.ops.clear() self.voices.clear() IRCBroadcaster.broadcast("parted", {"channel": self.name}) def on_privmsg(self, nick, message, notice=False): if message.startswith(u"__"): pass else: color = IRCColor.MESSAGE if notice: text = u"-{0}- {1}".format(nick, message) color = IRCColor.NOTICE elif message.startswith(u"[*] "): text = u"* {0} {1}".format(nick, message[4:]) elif message.startswith(u"\u0001ACTION"): text = u"* {0} {1}".format(nick, message[8:-1]) else: text = u"<{0}> {1}".format(nick, message) self.message(text, color) def on_notice(self, nick, message): return self.on_privmsg(nick, message, notice=True) def on_currenttopic(self, topic): self.message(u"{0}".format(topic), IRCColor.TOPIC) def on_join(self, nick): if IRC.me(nick): self.nicks.clear() self.ops.clear() self.voices.clear() self.message("* you joined {0} ".format(self.name), IRCColor.JOIN) IRC.set_active_channel(self.name) IRCBroadcaster.broadcast("joined", {"channel": self.name}) else: self.message("* {0} joined ({1}) ".format( nick, self.name), IRCColor.JOIN) if nick in self.nicks: print("Channel.joined - warning, nick already in list", nick) else: #self.nicks.add(nick) self.add_nick(nick) IRCBroadcaster.broadcast("nick_list", {"channel": self.name}) def on_kick(self, kicker, kickee, reason): self.message(u"* {0} kicked {1} ({2})".format( kicker, kickee, reason), IRCColor.KICK) if IRC.me(kickee): self.handle_leave_channel() def on_topic(self, who, topic): self.message(u"* {0} changed topic to:\n{1} ".format(who, topic), IRCColor.TOPIC) def on_mode(self, who, args): if args[0] == "+o": for nick in args[1:]: self.ops.add(nick) elif args[0] == "-o": for nick in args[1:]: if nick in self.ops: self.ops.remove(nick) elif args[0] == "+h": for nick in args[1:]: self.half_ops.add(nick) elif args[0] == "-h": for nick in args[1:]: if nick in self.half_ops: self.half_ops.remove(nick) elif args[0] == "+v": for nick in args[1:]: self.voices.add(nick) elif args[0] == "-v": for nick in args[1:]: if nick in self.voices: self.voices.remove(nick) if args[0].startswith("+"): color = IRCColor.POS_MODE else: color = IRCColor.NEG_MODE self.message(u"* {0} sets mode {1}".format(who, u" ".join(args)), color) IRCBroadcaster.broadcast("nick_list", {"channel": self.name}) def on_namreply(self, nicks): for nick in nicks: if nick.startswith('@'): #self.nicks.add(nick[1:]) self.ops.add(nick[1:]) self.add_nick(nick[1:]) elif nick.startswith('+'): #self.nicks.add(nick[1:]) self.voices.add(nick[1:]) self.add_nick(nick[1:]) else: #self.nicks.add(nick) self.add_nick(nick) IRCBroadcaster.broadcast("nick_list", {"channel": self.name}) def on_part(self, nick): if IRC.me(nick): self.message("* you left " + self.name, IRCColor.PART) self.handle_leave_channel() else: self.message("* {0} left {1}".format( nick, self.name), IRCColor.PART) self.remove_nick(nick) IRCBroadcaster.broadcast("nick_list", {"channel": self.name}) def on_quit(self, nick, reason): if nick in self.nicks or self.name == nick or not self.name: self.message("* {0} quit ({1}) ".format(nick, reason), IRCColor.PART) self.remove_nick(nick) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/netplay/Netplay.py0000644000175000017500000006354712162366654024461 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import uuid import urllib2 import urlparse import random from .IRC import IRC from .Channel import Channel from .IRCColor import IRCColor from .IRCBroadcaster import IRCBroadcaster from .ConnectionTester import ConnectionTester from ..Amiga import Amiga from ..Config import Config from ..Database import Database from ..builtin_configs import find_downloadable_file from ..server.Server import Server from ..server.ServerWindow import ServerWindow class Netplay: host_ports = [] enabled = False game_channel = "" connection_tester = None start_sequence = "" players = {} @classmethod def new_host_port(cls): if not cls.host_ports is None: cls.host_ports = list(range(25102, 25500)) random.shuffle(cls.host_ports) return cls.host_ports.pop() @classmethod def player(cls, nick): try: return cls.players[nick] except Exception: from .Player import Player cls.players[nick] = Player(nick) print("players are now", cls.players) return cls.players[nick] @classmethod def remove_player(cls, nick): try: del cls.players[nick] except Exception: print("warning, tried to remove player (but wasn't in list):", nick) else: print("players are now", cls.players) @classmethod def start_netplay_game(cls): if Netplay.set_ready(): if Netplay.is_op(): cls.game_info("you are marked as ready, initiating game start") Netplay.initiate_start_sequence() else: cls.game_info("you are marked as ready " "(only ops can start game)") else: cls.game_info("you are not ready") @classmethod def is_op(cls): return IRC.channel(cls.game_channel).is_op(IRC.my_nick) @classmethod def initiate_start_sequence(cls): print("initiate start sequence") if not cls.game_channel: cls.game_info("cannot start - no game channel") cls.start_sequence = str(uuid.uuid4()) message = u"__prestart {0} {1}".format(cls.start_sequence, cls.get_config_hash()) IRC.channel(cls.game_channel).privmsg(message) # in case one wants to try a single-player game for testing cls.on_ackstart() @classmethod def on_ackstart(cls): config_hash = cls.get_config_hash() start_sequence = cls.start_sequence player_count = 0 for player in cls.players.values(): player_count += 1 if player.nick == IRC.my_nick: # implicitly ok! continue if player.get("config_hash") != config_hash: return if player.get("start_sequence") != start_sequence: return want_players = int(Config.get("__netplay_players") or "0") if player_count != want_players: cls.game_warning(u"cannot start game, wanted {0} players, " "has {1}".format(want_players, player_count)) return cls.game_info("sending game start command to all clients!") message = u"__start {0} {1}".format(cls.start_sequence, cls.get_config_hash()) IRC.channel(cls.game_channel).privmsg(message) cls.do_start_game() @classmethod def do_start_game(cls): cls.game_info("starting game!") print("do start game") # we now reset __netplay_addresses so that the ConnectionTester # does not connect to the game in progress Config.set("__netplay_addresses", "") from ..LaunchHandler import LaunchHandler LaunchHandler.start_local_game() # game done, resetting config as the same game server cannot be # used again cls.reset_netplay_config() @classmethod def get_config_hash(cls): return Config.checksum() @classmethod def set_ready(cls): if not cls.enabled: return False if not cls.game_channel: IRC.warning("cannot set ready - not in a game") return False if not Config.get("__netplay_addresses"): cls.game_warning("cannot set ready - no server configured") cls.game_info("an operator needs to use /startgame or " "/hostgame (or /customgame) first") return False if not Config.get("__netplay_host"): cls.game_warning("cannot set ready - no connection to game " "server") return False Config.set("__netplay_ready", "1") # check in case an component has force __netplay_ready back to 0 return Config.get("__netplay_ready") == "1" @classmethod def connect(cls): cls.enabled = True IRC.connect() if cls.connection_tester is None: cls.connection_tester = ConnectionTester() @classmethod def is_connected(cls): return cls.enabled @classmethod def on_config(cls, key, value): if key == "__netplay_host_last_error": cls.game_warning(u"problem connecting to game server: " + value) elif key == "__netplay_host": if value: cls.game_info(u"successfully connected to net play host: " + value) if not IRC.running: return if not cls.game_channel: return if key in Config.sync_keys_set: message = u"__config {0} {1}".format(key, value) IRC.channel(cls.game_channel).privmsg(message) @classmethod def game_message(cls, message, color=None): if not cls.game_channel: IRC.warning(u"game message received (but not " u"currently in a game channel): " + message) return IRC.channel(cls.game_channel).message(message, color) if cls.game_channel != IRC.active_channel: # also paste message to active console Channel.active().message(message, color) @classmethod def game_warning(cls, message): cls.game_message(message, IRCColor.WARNING) @classmethod def game_info(cls, message): cls.game_message(message, IRCColor.INFO) @classmethod def is_game_channel(cls, name): if not IRC.is_channel(name): return False if name.startswith("&"): return True if name.endswith("-game"): return True return False @classmethod def on_irc(cls, key, args): if key == "joined": if cls.is_game_channel(args["channel"]): if cls.game_channel: IRC.part(cls.game_channel) cls.game_channel = "" cls.reset_netplay_config() cls.on_join_game_channel(args["channel"]) elif key == "parted": if cls.game_channel == args["channel"]: cls.game_channel = "" cls.reset_netplay_config() elif key == "privmsg": if args["message"].startswith("__"): if args["channel"] == cls.game_channel: cls.handle_game_instruction(args["nick"], args["message"]) elif key == "join": if args["channel"] == cls.game_channel: # initialize new player cls.player(args["nick"]) if args["nick"] != IRC.my_nick: if cls.is_op(): # operator - send config to new player(s) IRC.channel(cls.game_channel).action( "sends config on arrival of new player") cls.send_config() elif key == "part": if args["channel"] == cls.game_channel: Netplay.remove_player(args["nick"]) @classmethod def on_join_game_channel(cls, channel): # first we erase config which is not part of the default configuration # key set, to avoid some problems keys = Config.config.keys() for key in keys: if key not in Config.default_config: Config.set(key, "") cls.game_channel = channel # reset list of players cls.players = {} @classmethod def reset_config(cls): Config.load_default_config() @classmethod def reset_netplay_config(cls): Config.set_multiple([("__netplay_id", ""), ("__netplay_password", ""), ("__netplay_players", ""), ("__netplay_port", ""), ("__netplay_addresses", ""), ("__netplay_host", "")]) @classmethod def handle_command(cls, command): if not command.startswith("/"): return False args = command[1:].split(" ") print(args) command = args[0] function_name = "command_" + args[0] try: function = getattr(cls, function_name) except AttributeError: return False else: try: function(args[1:]) except Exception, e: cls.game_warning(repr(e)) return True @classmethod def command_ready(cls, args): cls.set_ready() if Config.get("__netplay_ready") == "1": cls.game_info("status set to ready") @classmethod def command_notready(cls, args): Config.set("__netplay_ready", "0") cls.game_info("status set to not ready") @classmethod def command_check(cls, args): channel = Channel.active() if not cls.require_game_channel(channel): return if len(args) != 1: IRC.warning("syntax: /check ") return if not channel.is_op(): IRC.warning("check: you need to be an operator") return for arg in args: cls.print_check_request(IRC.my_nick, arg, Config.get(arg)) message = u"__check {0} {1}".format(arg, Config.get(arg)) IRC.channel(cls.game_channel).privmsg(message) @classmethod def command_verify(cls, args): channel = Channel.active() if not cls.require_game_channel(channel): return if len(args) != 0: IRC.warning("syntax: /verify") return if not channel.is_op(): IRC.warning("verify: you need to be an operator") return #for arg in args: # cls.game_info("requesting verification of {0} = {1}".format(arg, # Config.get(arg))) cls.print_verify_request(IRC.my_nick) IRC.channel(cls.game_channel).privmsg(u"__beginverify") for key in Config.checksum_keys: value = Config.get(key) message = u"__verify {0} {1}".format(key, value) IRC.channel(cls.game_channel).privmsg(message) IRC.channel(cls.game_channel).privmsg(u"__endverify") @classmethod def command_sendconfig(cls, args): channel = Channel.active() if not cls.require_game_channel(channel): return if len(args) != 0: IRC.warning("syntax: /sendconfig") return cls.game_info("sending config") cls.send_config() @classmethod def send_config(cls): if not cls.game_channel: return channel = IRC.channel(cls.game_channel) # sending keys in preferred key order for key in Config.sync_keys_list: value = Config.get(key) message = u"__config {0} {1}".format(key, value) channel.privmsg(message) @classmethod def require_game_channel(cls, channel): if not IRC.running: return False result = cls.game_channel and channel.name == cls.game_channel if not result: channel.warning("not in active game channel") return result @classmethod def command_resetconfig(cls, args): channel = Channel.active() if not cls.require_game_channel(channel): return channel.info("config reset by request") # send resetconfig command to other players first if channel.is_op(): channel.privmsg("__resetconfig") # then reset own config, so config changes are applied after # other players have reset their configs Netplay.reset_config() @classmethod def parse_server_args(cls, args, default_port): if len(args) == 0: return None host = args.pop(0) if ":" in host: host, port = host.split(":", 1) port = int(port) else: port = default_port if len(args) > 0: players = args.pop(0) players = int(players) else: players = len(cls.players) if len(args) > 0: password = args.pop(0) else: password = "" if len(args) > 0: return None return host, port, players, password @classmethod def command_startserver(cls, args): return cls.command_startgame(args) @classmethod def command_startgame(cls, args): channel = Channel.active() if not cls.require_game_channel(channel): return result = cls.parse_server_args(args, 25101) if not result: IRC.warning("usage: /startgame [:] " "[] []") return host, port, players, password = result if not channel.is_op(): IRC.warning("startgame: you need to be an operator") return url = u"http://{0}:{1}/game/create?players={2}&password={3}".format( host, port, players, password) try: f = urllib2.urlopen(url) result = f.read() except urllib2.URLError, e: channel.warning(u"problem starting game server: {0}".format( repr(e))) else: print(result) result_dict = urlparse.parse_qs(result) game_id = result_dict["id"][0] game_password = result_dict["password"][0] game_port = result_dict["port"][0] game_addresses = result_dict["addresses"][0] Config.set_multiple([("__netplay_game", game_id), ("__netplay_password", game_password), ("__netplay_players", str(players)), ("__netplay_port", game_port), ("__netplay_host", u""), ("__netplay_addresses", game_addresses)]) channel.info(u"started game id: {0} password: {1} " "server: {2} port: {3}".format( game_id, game_password, game_addresses, game_port)) @classmethod def command_hostgame(cls, args): channel = Channel.active() if not cls.require_game_channel(channel): return result = cls.parse_server_args(args, cls.new_host_port()) if not result: IRC.warning("usage: /hostgame [:] " "[] []") return host, port, players, password = result if not channel.is_op(): IRC.warning("hostgame: you need to be an operator") return server = Server(port, players, password) server.start() window = ServerWindow(None, server) window.Show() game_id = str(uuid.uuid4()) Config.set_multiple([("__netplay_game", game_id), ("__netplay_password", password), ("__netplay_players", str(players)), ("__netplay_port", str(port)), ("__netplay_host", u""), ("__netplay_addresses", host)]) channel.info(u"started game id: {0} password: {1} " "server: {2} port: {3}".format( game_id, password, host, port)) @classmethod def command_setserver(cls, args): return cls.command_customgame(args) @classmethod def command_customgame(cls, args): channel = Channel.active() if not cls.require_game_channel(channel): return result = cls.parse_server_args(args, 25100) if not result: IRC.warning("usage: /customgame [:] " "[] []") return addresses, port, players, password = result if not channel.is_op(): IRC.warning("customgame: you need to be an operator") return game_id = str(uuid.uuid4()) Config.set_multiple([("__netplay_game", game_id), ("__netplay_password", password), ("__netplay_players", str(players)), ("__netplay_port", str(port)), ("__netplay_host", u""), ("__netplay_addresses", addresses)]) channel.info(u"started game id: {0} password: {1} " "server: {2} port: {3}".format( game_id, password, addresses, port)) @classmethod def command_set(cls, args): channel = Channel.active() if not cls.require_game_channel(channel): return if len(args) < 1: IRC.warning("usage: /set []") return if not channel.is_op(): IRC.warning("hostgame: you need to be an operator") return key = args[0] value = " ".join(args[1:]) print("config, setting", key, "to", value) channel.action("set option {0} to \"{1}\"".format(key, value)) Config.set(key, value) @classmethod def handle_game_instruction(cls, nick, message): channel = IRC.channel(cls.game_channel) #if Netplay.game_channel != self.name: # self.warning(self, u"ignored command in " # "non-active game: {0}".format(command), IRCColor.WARNING) # return words = message.split(u" ") command = words[0] arg = u" ".join(words[1:]) if command == "__config": if channel.is_op(nick): args = arg.split(u" ", 1) key = args[0] value = "" if len(args) > 1: value = args[1] cls.set_config(key.strip(), value.strip()) elif command == "__prestart": if channel.is_op(nick): seq, config_hash = arg.split(u" ") my_config_hash = cls.get_config_hash() if my_config_hash != config_hash: channel.privmsg("not the same config hash") return if Config.get("__netplay_ready") != "1": channel.privmsg("(op tried to start game, " "but I am not ready)") return channel.privmsg("__ackstart {0} {1}".format(seq, my_config_hash)) elif command == "__ackstart": start_sequence, config_hash = arg.split(u" ") cls.player(nick).set("start_sequence", start_sequence) cls.player(nick).set("config_hash", config_hash) cls.on_ackstart() # FIXME: check start sequence? elif command == "__start": if channel.is_op(nick): start_sequence, config_hash = arg.split(u" ") my_config_hash = Netplay.get_config_hash() if my_config_hash != config_hash: channel.action("could not start game " "(mismatching config hash)") return Netplay.do_start_game() elif command == "__resetconfig": if channel.is_op(nick): channel.info("config reset by op") Netplay.reset_config() elif command == "__check": if channel.is_op(nick): args = arg.split(u" ") key = args[0] value = u" ".join(args[1:]) my_value = Config.get(key) cls.print_check_request(nick, key, value) cls.print_check_response(IRC.my_nick, key, my_value, value) channel.privmsg(u"__ackcheck {0} {1}".format(key, my_value)) elif command == "__beginverify": if channel.is_op(nick): cls.print_verify_request(nick) elif command == "__verify": if channel.is_op(nick): args = arg.split(u" ") key = args[0] value = u" ".join(args[1:]) if Config.get(key) != value: cls.print_verify_response(IRC.my_nick, key, Config.get(key)) channel.privmsg(u"__ackverify {0} {1}".format(key, Config.get(key))) elif command == "__endverify": pass elif command == "__ackcheck": args = arg.split(u" ") key = args[0] value = u" ".join(args[1:]) my_value = Config.get(key) cls.print_check_response(nick, key, value, my_value) elif command == "__ackverify": args = arg.split(u" ", 1) cls.print_verify_response(nick, args[0], u" ".join(args[1:])) else: channel.warning(u"unknown command received: {0}".format( command)) @classmethod def print_check_request(cls, nick, key, value): IRC.channel(cls.game_channel).info( u"* {0} requested check of {1} ({2})".format( nick, key, value)) @classmethod def print_check_response(cls, nick, key, value, check_value): if value == check_value: color = IRCColor.INFO else: color = IRCColor.WARNING IRC.channel(cls.game_channel).message( u"{0} = {1} ({2})".format(key, value, nick), color) @classmethod def print_verify_request(cls, nick): IRC.channel(cls.game_channel).info( u"* {0} requested automatic config verification".format(nick)) @classmethod def print_verify_response(cls, nick, key, value): IRC.channel(cls.game_channel).warning( u"{0} = {1} ({2})".format(key, value, nick)) @classmethod def set_config(cls, key, value): # this config was received from a game channel operator print("received config", key, value) channel = IRC.channel(cls.game_channel) if key not in Config.sync_keys_set: print("not processing this key") return elif key in ["x_kickstart_file_sha1", "x_kickstart_ext_file_sha1"]: cls.set_kickstart_config(key, value) elif key in cls.file_config: cls.set_file_config(key, value) else: Config.set(key, value) @classmethod def set_kickstart_config(cls, key, value): channel = IRC.channel(cls.game_channel) if key == "x_kickstart_file_sha1": if value == Amiga.INTERNAL_ROM_SHA1: Config.set_multiple([ ("kickstart_file", "internal"), ("x_kickstart_file", "internal"), (key, value)]) else: path = Database.get_instance().find_file(sha1=value) if path: Config.set_multiple([ ("kickstart_file", path), ("x_kickstart_file", path), (key, value)]) else: channel.action(u"could not find kickstart for {0}".format( repr(value))) elif key == "x_kickstart_ext_file_sha1": if not value: Config.set_multiple([ ("kickstart_ext_file", ""), ("x_kickstart_ext_file", ""), (key, "")]) return path = Database.get_instance().find_file(sha1=value) if path: Config.set_multiple([ ("kickstart_ext_file", path), ("x_kickstart_ext_file", path), (key, value)]) else: channel.action(u"could not find (ext) kickstart " "for {0}".format(repr(value))) @classmethod def set_file_config(cls, key, value): channel = IRC.channel(cls.game_channel) set_key = cls.file_config[key] if not value: Config.set_multiple([(set_key, ""), (key, "")]) return if value.startswith("http://") or value.startswith("https://"): path = value else: path = Database.get_instance().find_file(sha1=value) if not path: path = find_downloadable_file(value) if path: Config.set_multiple([(set_key, path), (key, value)]) else: Config.set_multiple([(set_key, ""), (key, "")]) channel.action(u"could not find {1} for " "for {0}".format(value, set_key)) file_config = { } for i in range(Amiga.MAX_FLOPPY_DRIVES): file_config["x_floppy_drive_{0}_sha1".format(i)] = \ "floppy_drive_{0}".format(i) for i in range(Amiga.MAX_FLOPPY_IMAGES): file_config["x_floppy_image_{0}_sha1".format(i)] = \ "floppy_image_{0}".format(i) for i in range(Amiga.MAX_CDROM_DRIVES): file_config["x_cdrom_drive_{0}_sha1".format(i)] = \ "cdrom_drive_{0}".format(i) for i in range(Amiga.MAX_CDROM_IMAGES): file_config["x_cdrom_image_{0}_sha1".format(i)] = \ "cdrom_image_{0}".format(i) for i in range(Amiga.MAX_HARD_DRIVES): file_config["x_hard_drive_{0}_sha1".format(i)] = \ "hard_drive_{0}".format(i) Config.add_listener(Netplay) IRCBroadcaster.add_listener(Netplay) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/netplay/__init__.py0000644000175000017500000000000012162366654024553 0ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/netplay/IRCBroadcaster.py0000644000175000017500000000102312162366654025611 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals class IRCBroadcaster: irc_listeners = [] @classmethod def add_listener(cls, listener): cls.irc_listeners.append(listener) @classmethod def remove_listener(cls, listener): cls.irc_listeners.remove(listener) @classmethod def broadcast(cls, key, value): for listener in cls.irc_listeners: listener.on_irc(key, value) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/netplay/oyoyo/0000755000175000017500000000000012162366654023632 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/netplay/oyoyo/ircevents.py0000644000175000017500000001336512162366654026216 0ustar glaubitzglaubitz# Copyright (c) 2008 Duncan Fordyce # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # taken from python irclib.. who took it from... # Numeric table mostly stolen from the Perl IRC module (Net::IRC). numeric_events = { "001": "welcome", "002": "yourhost", "003": "created", "004": "myinfo", "005": "featurelist", # XXX "200": "tracelink", "201": "traceconnecting", "202": "tracehandshake", "203": "traceunknown", "204": "traceoperator", "205": "traceuser", "206": "traceserver", "207": "traceservice", "208": "tracenewtype", "209": "traceclass", "210": "tracereconnect", "211": "statslinkinfo", "212": "statscommands", "213": "statscline", "214": "statsnline", "215": "statsiline", "216": "statskline", "217": "statsqline", "218": "statsyline", "219": "endofstats", "221": "umodeis", "231": "serviceinfo", "232": "endofservices", "233": "service", "234": "servlist", "235": "servlistend", "241": "statslline", "242": "statsuptime", "243": "statsoline", "244": "statshline", "250": "luserconns", "251": "luserclient", "252": "luserop", "253": "luserunknown", "254": "luserchannels", "255": "luserme", "256": "adminme", "257": "adminloc1", "258": "adminloc2", "259": "adminemail", "261": "tracelog", "262": "endoftrace", "263": "tryagain", "265": "n_local", "266": "n_global", "300": "none", "301": "away", "302": "userhost", "303": "ison", "305": "unaway", "306": "nowaway", "311": "whoisuser", "312": "whoisserver", "313": "whoisoperator", "314": "whowasuser", "315": "endofwho", "316": "whoischanop", "317": "whoisidle", "318": "endofwhois", "319": "whoischannels", "321": "liststart", "322": "list", "323": "listend", "324": "channelmodeis", "329": "channelcreate", "331": "notopic", "332": "currenttopic", "333": "topicinfo", "341": "inviting", "342": "summoning", "346": "invitelist", "347": "endofinvitelist", "348": "exceptlist", "349": "endofexceptlist", "351": "version", "352": "whoreply", "353": "namreply", "361": "killdone", "362": "closing", "363": "closeend", "364": "links", "365": "endoflinks", "366": "endofnames", "367": "banlist", "368": "endofbanlist", "369": "endofwhowas", "371": "info", "372": "motd", "373": "infostart", "374": "endofinfo", "375": "motdstart", "376": "endofmotd", "377": "motd2", # 1997-10-16 -- tkil "381": "youreoper", "382": "rehashing", "384": "myportis", "391": "time", "392": "usersstart", "393": "users", "394": "endofusers", "395": "nousers", "401": "nosuchnick", "402": "nosuchserver", "403": "nosuchchannel", "404": "cannotsendtochan", "405": "toomanychannels", "406": "wasnosuchnick", "407": "toomanytargets", "409": "noorigin", "411": "norecipient", "412": "notexttosend", "413": "notoplevel", "414": "wildtoplevel", "421": "unknowncommand", "422": "nomotd", "423": "noadmininfo", "424": "fileerror", "431": "nonicknamegiven", "432": "erroneusnickname", # Thiss iz how its speld in thee RFC. "433": "nicknameinuse", "436": "nickcollision", "437": "unavailresource", # "Nick temporally unavailable" "441": "usernotinchannel", "442": "notonchannel", "443": "useronchannel", "444": "nologin", "445": "summondisabled", "446": "usersdisabled", "451": "notregistered", "461": "needmoreparams", "462": "alreadyregistered", "463": "nopermforhost", "464": "passwdmismatch", "465": "yourebannedcreep", # I love this one... "466": "youwillbebanned", "467": "keyset", "471": "channelisfull", "472": "unknownmode", "473": "inviteonlychan", "474": "bannedfromchan", "475": "badchannelkey", "476": "badchanmask", "477": "nochanmodes", # "Channel doesn't support modes" "478": "banlistfull", "481": "noprivileges", "482": "chanoprivsneeded", "483": "cantkillserver", "484": "restricted", # Connection is restricted "485": "uniqopprivsneeded", "491": "nooperhost", "492": "noservicehost", "501": "umodeunknownflag", "502": "usersdontmatch", } generated_events = [ # Generated events "dcc_connect", "dcc_disconnect", "dccmsg", "disconnect", "ctcp", "ctcpreply", ] protocol_events = [ # IRC protocol events "error", "join", "kick", "mode", "part", "ping", "privmsg", "privnotice", "pubmsg", "pubnotice", "quit", "invite", "pong", ] all_events = generated_events + protocol_events + numeric_events.values() fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/netplay/oyoyo/examplebot.py0000644000175000017500000000200012162366654026334 0ustar glaubitzglaubitz#!/usr/bin/python """Example bot for oyoyo that responds to !say""" import logging import re from fs_uae_launcher.oyoyo.client import IRCClient from fs_uae_launcher.oyoyo.cmdhandler import DefaultCommandHandler from fs_uae_launcher.oyoyo import helpers HOST = 'irc.freenode.net' PORT = 6667 NICK = 'oyoyo-example' CHANNEL = '#oyoyo-test' class MyHandler(DefaultCommandHandler): def privmsg(self, nick, chan, msg): msg = msg.decode() match = re.match('\!say (.*)', msg) if match: to_say = match.group(1).strip() print('Saying, "%s"' % to_say) helpers.msg(self.client, chan, to_say) def connect_cb(cli): helpers.join(cli, CHANNEL) def main(): logging.basicConfig(level=logging.DEBUG) cli = IRCClient(MyHandler, host=HOST, port=PORT, nick=NICK, connect_cb=connect_cb) conn = cli.connect() while True: conn.next() ## python 2 # next(conn) ## python 3 if __name__ == '__main__': main() fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/netplay/oyoyo/helpers.py0000644000175000017500000000530412162366654025650 0ustar glaubitzglaubitz# Copyright (c) 2008 Duncan Fordyce # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. """ contains helper functions for common irc commands """ import random def msg(cli, user, msg): for line in msg.split('\n'): cli.send("PRIVMSG", user, ":%s" % line) def msgrandom(cli, choices, dest, user=None): o = "%s: " % user if user else "" o += random.choice(choices) msg(cli, dest, o) def _makeMsgRandomFunc(choices): def func(cli, dest, user=None): msgrandom(cli, choices, dest, user) return func msgYes = _makeMsgRandomFunc(['yes', 'alright', 'ok']) msgOK = _makeMsgRandomFunc(['ok', 'done']) msgNo = _makeMsgRandomFunc(['no', 'no-way']) def ns(cli, *args): msg(cli, "NickServ", " ".join(args)) def cs(cli, *args): msg(cli, "ChanServ", " ".join(args)) def identify(cli, passwd, authuser="NickServ"): msg(cli, authuser, "IDENTIFY %s" % passwd) def quit(cli, msg='gone'): cli.send("QUIT :%s" % msg) cli._end = 1 def user(cli, username, realname=None): cli.send("USER", username, cli.host, cli.host, realname or username) _simple = ( 'join', 'part', 'nick', 'notice', ) def _addsimple(): import sys def simplecmd(cmd_name): def f(cli, *args): cli.send(cmd_name, *args) return f m = sys.modules[__name__] for t in _simple: setattr(m, t, simplecmd(t.upper())) _addsimple() def _addNumerics(): import sys from . import ircevents def numericcmd(cmd_num, cmd_name): def f(cli, *args): cli.send(cmd_num, *args) return f m = sys.modules[__name__] for num, name in ircevents.numeric_events.iteritems(): setattr(m, name, numericcmd(num, name)) _addNumerics() fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/netplay/oyoyo/client.py0000644000175000017500000002367412162366654025476 0ustar glaubitzglaubitz# Copyright (c) 2008 Duncan Fordyce # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. import logging import socket import sys import re import string import time import threading import os import traceback from fs_uae_launcher.netplay.oyoyo.parse import * from fs_uae_launcher.netplay.oyoyo import helpers from fs_uae_launcher.netplay.oyoyo.cmdhandler import CommandError # Python < 3 compatibility if sys.version_info < (3,): class bytes(object): def __new__(self, b='', encoding='utf8'): return str(b) class IRCClientError(Exception): pass class IRCClient: """ IRC Client class. This handles one connection to a server. This can be used either with or without IRCApp ( see connect() docs ) """ def __init__(self, cmd_handler, **kwargs): """ the first argument should be an object with attributes/methods named as the irc commands. You may subclass from one of the classes in oyoyo.cmdhandler for convenience but it is not required. The methods should have arguments (prefix, args). prefix is normally the sender of the command. args is a list of arguments. Its recommened you subclass oyoyo.cmdhandler.DefaultCommandHandler, this class provides defaults for callbacks that are required for normal IRC operation. all other arguments should be keyword arguments. The most commonly used will be nick, host and port. You can also specify an "on connect" callback. ( check the source for others ) Warning: By default this class will not block on socket operations, this means if you use a plain while loop your app will consume 100% cpu. To enable blocking pass blocking=True. >>> class My_Handler(DefaultCommandHandler): ... def privmsg(self, prefix, command, args): ... print "%s said %s" % (prefix, args[1]) ... >>> def connect_callback(c): ... helpers.join(c, '#myroom') ... >>> cli = IRCClient(My_Handler, ... host="irc.freenode.net", ... port=6667, ... nick="myname", ... connect_cb=connect_callback) ... >>> cli_con = cli.connect() >>> while 1: ... cli_con.next() ... """ self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.nick = None self.real_name = None self.host = None self.port = None self.connect_cb = None self.blocking = False self.__dict__.update(kwargs) self.command_handler = cmd_handler(self) self._end = 0 def send(self, *args, **kwargs): """ send a message to the connected server. all arguments are joined with a space for convenience, for example the following are identical >>> cli.send("JOIN %s" % some_room) >>> cli.send("JOIN", some_room) In python 2, all args must be of type str or unicode, *BUT* if they are unicode they will be converted to str with the encoding specified by the 'encoding' keyword argument (default 'utf8'). In python 3, all args must be of type str or bytes, *BUT* if they are str they will be converted to bytes with the encoding specified by the 'encoding' keyword argument (default 'utf8'). """ # Convert all args to bytes if not already encoding = kwargs.get('encoding') or 'utf8' bargs = [] for arg in args: if isinstance(arg, str): bargs.append(bytes(arg, encoding)) elif isinstance(arg, bytes): bargs.append(arg) elif type(arg).__name__ == 'unicode': bargs.append(arg.encode(encoding)) else: raise IRCClientError('Refusing to send one of the args from provided: %s' % repr([(type(arg), arg) for arg in args])) msg = bytes(" ", "ascii").join(bargs) logging.info('---> send "%s"' % msg) self.socket.send(msg + bytes("\r\n", "ascii")) def connect(self): """ initiates the connection to the server set in self.host:self.port and returns a generator object. >>> cli = IRCClient(my_handler, host="irc.freenode.net", port=6667) >>> g = cli.connect() >>> while 1: ... g.next() """ try: logging.info('connecting to %s:%s' % (self.host, self.port)) self.socket.connect(("%s" % self.host, self.port)) if not self.blocking: self.socket.setblocking(0) helpers.nick(self, self.nick) helpers.user(self, self.nick, self.real_name) if self.connect_cb: self.connect_cb(self) buffer = bytes() while not self._end: try: buffer += self.socket.recv(1024) except socket.error, e: try: # a little dance of compatibility to get the errno errno = e.errno except AttributeError: errno = e[0] if not self.blocking and errno == 11: pass else: raise e else: data = buffer.split(bytes("\n", "ascii")) buffer = data.pop() for el in data: prefix, command, args = parse_raw_irc_command(el) try: self.command_handler.run(command, prefix, *args) except CommandError: # error will of already been loggingged by the handler pass yield True finally: if self.socket: logging.info('closing socket') self.socket.close() class IRCApp: """ This class manages several IRCClient instances without the use of threads. (Non-threaded) Timer functionality is also included. """ class _ClientDesc: def __init__(self, **kwargs): self.con = None self.autoreconnect = False self.__dict__.update(kwargs) def __init__(self): self._clients = {} self._timers = [] self.running = False self.sleep_time = 0.5 def addClient(self, client, autoreconnect=False): """ add a client object to the application. setting autoreconnect to true will mean the application will attempt to reconnect the client after every disconnect. you can also set autoreconnect to a number to specify how many reconnects should happen. warning: if you add a client that has blocking set to true, timers will no longer function properly """ logging.info('added client %s (ar=%s)' % (client, autoreconnect)) self._clients[client] = self._ClientDesc(autoreconnect=autoreconnect) def addTimer(self, seconds, cb): """ add a timed callback. accuracy is not specified, you can only garuntee the callback will be called after seconds has passed. ( the only advantage to these timers is they dont use threads ) """ assert callable(cb) logging.info('added timer to call %s in %ss' % (cb, seconds)) self._timers.append((time.time() + seconds, cb)) def run(self): """ run the application. this will block until stop() is called """ # TODO: convert this to use generators too? self.running = True while self.running: found_one_alive = False for client, clientdesc in self._clients.iteritems(): if clientdesc.con is None: clientdesc.con = client.connect() try: clientdesc.con.next() except Exception, e: logging.error('client error %s' % e) logging.error(traceback.format_exc()) if clientdesc.autoreconnect: clientdesc.con = None if isinstance(clientdesc.autoreconnect, (int, float)): clientdesc.autoreconnect -= 1 found_one_alive = True else: clientdesc.con = False else: found_one_alive = True if not found_one_alive: logging.info('nothing left alive... quiting') self.stop() now = time.time() timers = self._timers[:] self._timers = [] for target_time, cb in timers: if now > target_time: logging.info('calling timer cb %s' % cb) cb() else: self._timers.append((target_time, cb)) time.sleep(self.sleep_time) def stop(self): """ stop the application """ self.running = False fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/netplay/oyoyo/cmdhandler.py0000644000175000017500000001545112162366654026313 0ustar glaubitzglaubitz# Copyright (c) 2008 Duncan Fordyce # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. import inspect import logging import sys import traceback from fs_uae_launcher.netplay.oyoyo import helpers from fs_uae_launcher.netplay.oyoyo.parse import parse_nick # Python < 3 compatibility if sys.version_info < (3,): class bytes(object): def __new__(self, b='', encoding='utf8'): return str(b) def protected(func): """ decorator to protect functions from being called """ func.protected = True return func class CommandError(Exception): def __init__(self, cmd): self.cmd = cmd class NoSuchCommandError(CommandError): def __str__(self): return 'No such command "%s"' % ".".join(self.cmd) class ProtectedCommandError(CommandError): def __str__(self): return 'Command "%s" is protected' % ".".join(self.cmd) class CommandHandler(object): """ The most basic CommandHandler """ def __init__(self, client): self.client = client @protected def get(self, in_command_parts): """ finds a command commands may be dotted. each command part is checked that it does not start with and underscore and does not have an attribute "protected". if either of these is true, ProtectedCommandError is raised. its possible to pass both "command.sub.func" and ["command", "sub", "func"]. """ if isinstance(in_command_parts, (str, bytes)): in_command_parts = in_command_parts.split(bytes('.', 'ascii')) command_parts = in_command_parts[:] p = self while command_parts: cmd = command_parts.pop(0).decode('ascii') if cmd.startswith('_'): raise ProtectedCommandError(in_command_parts) try: f = getattr(p, cmd) except AttributeError: raise NoSuchCommandError(in_command_parts) if hasattr(f, 'protected'): raise ProtectedCommandError(in_command_parts) if isinstance(f, CommandHandler) and command_parts: return f.get(command_parts) p = f return f @protected def run(self, command, *args): """ finds and runs a command """ logging.debug("processCommand %s(%s)" % (command, args)) #print(command, args) try: f = self.get(command) except NoSuchCommandError: self.__unhandled__(command, *args) return logging.debug('f %s' % f) try: f(*args) except Exception, e: logging.error('command raised %s' % e) logging.error(traceback.format_exc()) raise CommandError(command) @protected def __unhandled__(self, cmd, *args): """The default handler for commands. Override this method to apply custom behavior (example, printing) unhandled commands. """ logging.debug('unhandled command %s(%s)' % (cmd, args)) class DefaultCommandHandler(CommandHandler): """ CommandHandler that provides methods for the normal operation of IRC. If you want your bot to properly respond to pings, etc, you should subclass this. """ def ping(self, prefix, server): self.client.send('PONG', server) class DefaultBotCommandHandler(CommandHandler): """ default command handler for bots. methods/attributes are made available as commands """ @protected def getVisibleCommands(self, obj=None): test = (lambda x: isinstance(x, CommandHandler) or \ inspect.ismethod(x) or inspect.isfunction(x)) members = inspect.getmembers(obj or self, test) return [m for m, _ in members if (not m.startswith('_') and not hasattr(getattr(obj, m), 'protected'))] def help(self, sender, dest, arg=None): """list all available commands or get help on a specific command""" logging.info('help sender=%s dest=%s arg=%s' % (sender, dest, arg)) if not arg: commands = self.getVisibleCommands() commands.sort() helpers.msg(self.client, dest, "available commands: %s" % " ".join(commands)) else: try: f = self.get(arg) except CommandError, e: helpers.msg(self.client, dest, str(e)) return doc = f.__doc__.strip() if f.__doc__ else "No help available" if not inspect.ismethod(f): subcommands = self.getVisibleCommands(f) if subcommands: doc += " [sub commands: %s]" % " ".join(subcommands) helpers.msg(self.client, dest, "%s: %s" % (arg, doc)) class BotCommandHandler(DefaultCommandHandler): """ complete command handler for bots """ def __init__(self, client, command_handler): DefaultCommandHandler.__init__(self, client) self.command_handler = command_handler def privmsg(self, prefix, dest, msg): self.tryBotCommand(prefix, dest, msg) @protected def tryBotCommand(self, prefix, dest, msg): """ tests a command to see if its a command for the bot, returns True and calls self.processBotCommand(cmd, sender) if its is. """ logging.debug("tryBotCommand('%s' '%s' '%s')" % (prefix, dest, msg)) if dest == self.client.nick: dest = parse_nick(prefix)[0] elif msg.startswith(self.client.nick): msg = msg[len(self.client.nick)+1:] else: return False msg = msg.strip() parts = msg.split(' ', 1) command = parts[0] arg = parts[1:] try: self.command_handler.run(command, prefix, dest, *arg) except CommandError, e: helpers.msg(self.client, dest, str(e)) return True fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/netplay/oyoyo/__init__.py0000644000175000017500000000237012162366654025745 0ustar glaubitzglaubitz# Copyright (c) 2008 Duncan Fordyce # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. """A small, simple irc lib for python suitable for bots, clients and anything else. For more information and documentation about this package: http://code.google.com/p/oyoyo/ """ fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/netplay/oyoyo/parse.py0000644000175000017500000000662512162366654025327 0ustar glaubitzglaubitz# Copyright (c) 2008 Duncan Fordyce # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. import logging import sys from fs_uae_launcher.netplay.oyoyo.ircevents import * # Python < 3 compatibility if sys.version_info < (3,): class bytes(object): def __new__(self, b='', encoding='utf8'): return str(b) def parse_raw_irc_command(element): """ This function parses a raw irc command and returns a tuple of (prefix, command, args). The following is a psuedo BNF of the input text: ::= [':' ] ::= | [ '!' ] [ '@' ] ::= { } | ::= ' ' { ' ' } ::= [ ':' | ] ::= ::= ::= CR LF """ print(element) parts = element.strip().split(bytes(" ", "ascii")) if parts[0].startswith(bytes(':', 'ascii')): prefix = parts[0][1:] command = parts[1] args = parts[2:] else: prefix = None command = parts[0] args = parts[1:] if command.isdigit(): try: command = numeric_events[command] except KeyError: logging.warn('unknown numeric event %s' % command) command = command.lower() if args[0].startswith(bytes(':', 'ascii')): args = [bytes(" ", "ascii").join(args)[1:]] else: for idx, arg in enumerate(args): if arg.startswith(bytes(':', 'ascii')): args = args[:idx] + [bytes(" ", 'ascii').join(args[idx:])[1:]] break return (prefix, command, args) def parse_nick(name): """ parse a nickname and return a tuple of (nick, mode, user, host) [ '!' [ = ] ] [ '@' ] """ try: nick, rest = name.split('!') except ValueError: return (name, None, None, None) try: mode, rest = rest.split('=') except ValueError: mode, rest = None, rest try: user, host = rest.split('@') except ValueError: return (name, mode, rest, None) return (name, mode, user, host) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/netplay/IRC.py0000644000175000017500000003206212162366654023446 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import sys import threading import fs_uae_launcher.fsui as fsui from ..Settings import Settings from .oyoyo.client import IRCClient from .oyoyo import helpers from .CommandHandler import CommandHandler from .IRCBroadcaster import IRCBroadcaster from .IRCColor import IRCColor class IRC: running = False stopping = False nick_number = 0 channels = {} my_nick = "" # FIXME: should not be hardcoded here default_channel = "#lobby" active_channel = default_channel @classmethod def message(cls, message, color=None): cls.channel(cls.active_channel).message(message, color) @classmethod def warning(cls, message): cls.message(message, IRCColor.WARNING) @classmethod def info(cls, message): cls.message(message, IRCColor.INFO) @classmethod def is_channel(cls, name): return len(name) > 0 and name[0] in "&#+!" @classmethod def channel(cls, name): # FIXME: name should be checked case independently if not name: name = cls.default_channel from .Channel import Channel try: return cls.channels[name] except KeyError: print("new channel", repr(name)) cls.channels[name] = Channel(name) print("channels are now", repr(cls.channels)) #cls.set_active_channel(name) IRCBroadcaster.broadcast("channel_list", {"added": name}) return cls.channels[name] @classmethod def set_active_channel(cls, name): cls.active_channel = name IRCBroadcaster.broadcast("active_channel", {"channel": name}) @classmethod def connect(cls): cls.start() @classmethod def start(cls): cls.stopping = False if cls.running: print("IRC.start - already running") return threading.Thread(target=cls.irc_thread).start() cls.running = True @classmethod def stop(cls): if not cls.running: return cls.stopping = True helpers.quit(cls.client, "Exited") #cls.client.quit() @classmethod def irc_thread(cls): try: cls.irc_main() except Exception, e: def func(): cls.warning(repr(e)) fsui.call_after(func) import traceback traceback.print_exc() cls.running = False @classmethod def nick(cls, spec): nick = spec.split("!")[0] nick = nick.strip("@+") return nick @classmethod def me(cls, spec): nick = spec.split("!")[0] return nick == cls.my_nick @classmethod def get_irc_server_host(cls): return Settings.get_irc_server() @classmethod def irc_main(cls): def func(): cls.message(u"connecting to {0}...".format( cls.get_irc_server_host())) fsui.call_after(func) cls.client = IRCClient(CommandHandler, host=cls.get_irc_server_host(), port=6667, nick=cls.generate_nick(True), blocking=True, connect_cb=cls.connect_callback) cls.client.handler = cls cls.connection = cls.client.connect() while not cls.stopping: cls.connection.next() print("irc_main done") cls.running = False @classmethod def connect_callback(cls, client): def func(): cls.message(u"connected to {0}".format(cls.get_irc_server_host())) fsui.call_after(func) @classmethod def post_message(cls, command, args): if cls.stopping: print("ignoring message", command, "because we're stopping") return #print("post_message", command, args) #cls.on_message(command, args) #print(command, args) args = list(args) for i, arg in enumerate(args): if arg is not None: args[i] = arg.decode("UTF-8", errors="replace") def func(): #if IRC.broadcast(command, args): # return if cls.irc_server_message(command, args): return name = "irc_" + command try: method = getattr(cls, name) except AttributeError: cls.info(u" ".join([command] + args)) pass else: method(*args) fsui.call_after(func) @classmethod def privmsg(cls, destination, message): helpers.msg(cls.client, destination, message) @classmethod def notice(cls, destination, message): cls.client.send(u"notice {0} :{1}".format(destination, message)) @classmethod def generate_nick(cls, reset=False): if reset: cls.nick_number = 0 cls.nick_number += 1 if cls.nick_number == 1: nick = Settings.get_irc_nick() else: nick = Settings.get_irc_nick() + str(cls.nick_number) cls.my_nick = nick return nick @classmethod def append_text(cls, message): cls.message(message) @classmethod def handle_command(cls, message): if message.startswith("/"): return cls.handle_command_string(message) else: if not cls.active_channel: cls.warning("no active channel") else: cls.channel(cls.active_channel).privmsg(message) @classmethod def handle_command_string(cls, message): message = message[1:] parts = message.split(u" ") command = parts[0].lower() args = parts[1:] name = "command_" + command try: method = getattr(cls, name) except AttributeError: cls.warning(command + u": unknown command") return False else: method(args) return True @classmethod def command_raw(cls, args): if len(args) >= 1: cls.client.send(u" ".join(args)) else: cls.warning("usage: /raw ") @classmethod def command_whois(cls, args): if len(args) >= 1: cls.client.send(u"whois {0}".format(u" ".join(args))) else: cls.warning("usage: /whois ") @classmethod def command_away(cls, args): if len(args) == 0: cls.client.send(u"away") else: cls.client.send(u"away {0}".format((u" ").join(args))) @classmethod def command_back(cls, args): if len(args) == 0: cls.client.send(u"away") else: cls.warning("usage: /back") @classmethod def command_msg(cls, args): if len(args) >= 2: channel = args[0] message = u" ".join(args[1:]) #cls.channel(channel).privmsg(message) #cls.channel(channel).message("<{0}> {1}".format(cls.my_nick, # message), IRCColor.MY_MESSAGE) cls.client.send(u"privmsg {0} :{1}".format(channel, message)) else: cls.warning("usage: /msg ") @classmethod def command_notice(cls, args): if len(args) >= 2: channel = args[0] message = u" ".join(args[1:]) #cls.channel(channel).notice(message) cls.client.send(u"notice {0} :{1}".format(channel, message)) else: cls.warning("usage: /notice ") @classmethod def command_oper(cls, args): if len(args) == 2: cls.client.send(u"oper {0} {1}".format(args[0], args[1])) else: cls.warning("usage: /oper ") @classmethod def command_slap(cls, args): if len(args) == 1: message = u"slaps {0} around a bit with a large trout".format( args[0]) cls.channel(cls.active_channel).action(message) else: cls.warning("usage: /slap ") @classmethod def command_me(cls, args): if len(args) > 0: message = u" ".join(args) cls.channel(cls.active_channel).action(message) else: cls.warning("usage: /me ") @classmethod def command_mode(cls, args): if len(args) >= 2: cls.client.send(u"mode {0}".format(u" ".join(args))) else: cls.warning("usage: /mode ") @classmethod def command_kick(cls, args): if not cls.is_channel(cls.active_channel): cls.warning("cannot kick - not in a channel") return if len(args) >= 1: cls.kick(cls.active_channel, args[0], u" ".join(args[1:])) else: cls.warning("usage: /kick []") @classmethod def kick(cls, channel, nick, message="kicked"): cls.client.send("KICK", channel, nick, u":{0}".format(message)) @classmethod def command_join(cls, args): if len(args) == 1: cls.join(args[0]) else: cls.warning("join: invalid arguments") @classmethod def join(cls, channel): helpers.join(cls.client, channel) @classmethod def command_leave(cls, args): return cls.command_part(args) @classmethod def command_part(cls, args): if len(args) == 1: cls.part(args[0]) else: cls.warning("part: invalid arguments") @classmethod def part(cls, channel): helpers.part(cls.client, channel) @classmethod def irc_server_message(cls, command, args): if command in ["yourhost", "created", "luserclient", "luserchannels", "luserme", "n_local", "n_global", "luserconns", "motdstart", "motd", "nomotd", "endofmotd"]: cls.message(args[2]) return 1 return 0 @classmethod def irc_featurelist(cls, server, nick, *features): cls.message(" ".join(features)) @classmethod def irc_welcome(cls, server, nick, message): cls.message(message) password = Settings.get_irc_nickserv_pass() if password: cls.privmsg("nickserv", u"identify {0}".format(password)) #cls.join("#support") cls.join("#lobby") # convenience for development... for arg in sys.argv: if arg.startswith("--netplay-game="): cls.join("&" + arg[15:]) break @classmethod def filter_nick(cls, full): nick = full.split("!")[0] return nick @classmethod def irc_privmsg(cls, sender, destination, message): nick = cls.filter_nick(sender) if cls.is_channel(destination): channel = destination else: channel = IRC.filter_nick(sender) cls.channel(channel).on_privmsg(nick, message) IRCBroadcaster.broadcast("privmsg", {"channel": channel, "message": message, "nick": nick}) @classmethod def irc_notice(cls, sender, destination, message): if sender: nick = cls.filter_nick(sender) else: nick = "(server)" if cls.is_channel(destination): channel = destination else: channel = cls.active_channel cls.channel(channel).on_notice(nick, message) IRCBroadcaster.broadcast("notice", {"channel": channel, "message": message, "nick": nick}) @classmethod def irc_kick(cls, kicker, channel, who, why): cls.channel(channel).on_kick(IRC.filter_nick(kicker), who, why) @classmethod def irc_part(cls, who, channel, *args): cls.channel(channel).on_part(IRC.filter_nick(who)) @classmethod def irc_join(cls, who, channel): cls.channel(channel).on_join(IRC.filter_nick(who)) @classmethod def irc_endofnames(cls, sender, recipient, channel, message): pass @classmethod def irc_namreply(cls, server, who, equals, channel, nicks): cls.channel(channel).on_namreply(nicks.split(" ")) @classmethod def irc_currenttopic(cls, sender, recipient, channel, topic): cls.channel(channel).on_currenttopic(topic) @classmethod def irc_topicinfo(cls, sender, recipient, channel, who, when): pass @classmethod def irc_cannotsendtochan(cls, server, who, channel, message): cls.channel(channel).warning(u"cannot send to channel: " + message) @classmethod def irc_topic(cls, who, channel, topic): cls.channel(channel).on_topic(who, topic) @classmethod def irc_mode(cls, who, destination, *args): if cls.is_channel(destination): cls.channel(destination).on_mode(IRC.filter_nick(who), args) else: cls.message("{0} set mode {1} {2}".format( who, destination, u" ".join(args))) @classmethod def irc_quit(cls, who, reason): for name in cls.channels: cls.channel(name).on_quit(IRC.filter_nick(who), reason) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/netplay/ConnectionTester.py0000644000175000017500000000737512162366654026330 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import time import socket import threading import traceback import fs_uae_launcher.fsui as fsui from ..Config import Config from ..Signal import Signal class ConnectionTester(): def __init__(self): self.host_info = ("", 0) self.running = False self.stopping = False self.connection_attempt = 0 Config.add_listener(self) Signal.add_listener("quit", self) def on_quit_signal(self): print("on_quit_signal") self.stopping = True def on_config(self, key, value): if key in ["__netplay_addresses", "__netplay_port"]: addresses = Config.get("__netplay_addresses") port = Config.get("__netplay_port") host_info = (addresses, port) if host_info != self.host_info: self.host_info = host_info if not self.running: threading.Thread(target=self.thread_main).start() self.running = True def thread_main(self): try: self._thread_main() except Exception: traceback.print_exc() def set_host(self, host, last_error): if last_error: last_error = u"attempt {1} {0}".format( last_error, self.connection_attempt) values = [("__netplay_host", host), ("__netplay_host_last_error", last_error)] if last_error or not host: # force not ready when we cannot connect to server values.append(("__netplay_ready", "0")) def function(): Config.set_multiple(values) fsui.call_after(function) def _thread_main(self): last_host_info = None last_check_time = 0 while not self.stopping: t = time.time() host_info = self.host_info time_diff = t - last_check_time time_for_new_test = time_diff > 30.0 or host_info != last_host_info if host_info[0] and host_info[1] and time_for_new_test: last_check_time = t last_host_info = host_info try: result, error = self.test_connection(host_info) self.set_host(result, error) except Exception, e: traceback.print_exc() # FIXME: handle problem... self.set_host("", repr(e)) time.sleep(1.0) def test_connection(self, host_info): addresses, port = host_info port = int(port) addresses = addresses.split(",") verified_host = "" last_error = "" for host in addresses: self.connection_attempt += 1 host = host.strip() s = None try: try: print("trying", host, port) s = socket.create_connection((host, port)) s.send("PING") # FIXME: set timeout, don't want to wait forever here... data = s.recv(4) if data == "PONG": verified_host = host last_error = "" break else: last_error = "Wrong PING response" except Exception, e: last_error = repr(e) print(last_error) finally: if s is not None: try: s.close() except Exception: pass print("test connection - verified host:", verified_host) return verified_host, last_error fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/fsui/0000755000175000017500000000000012162366654021746 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/fsui/wx/0000755000175000017500000000000012162366654022404 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/fsui/wx/wxelement.py0000644000175000017500000000162012162366654024765 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import wx from ..common.element import Element class WXElement(Element): def __init__(self, parent, title=""): Element.__init__(self, parent) self._window = None #self._container = None def get_position_base(self): return (0, 0) def get_position(self): return self._window.GetPos() def set_position(self, position): print("--- set position", position) return self._window.SetPosition(position) def get_size(self): return self._window.GetSize() def get_min_size(self): print("returning", self._window.GetBestSize()) return self._window.GetBestSize() def set_size(self, size): self._window.SetSize(size) Element.set_size(self, size) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/fsui/wx/application.py0000644000175000017500000000054712162366654025267 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import wx class Application: def __init__(self): self.wx_app = wx.PySimpleApp() self.on_create() def on_create(self): pass def run(self): self.wx_app.MainLoop() fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/fsui/wx/itemview.py0000644000175000017500000013135412162366654024616 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import wx import math import time from .Color import Color from .common import update_class from .System import System # FIXME: remove this dummy class class wxgui: @staticmethod def mixColors (a, b, alpha): return Color.mix_colors(a, b, alpha) @staticmethod def getHighlightPen(): return None def getHighlightBrush(self): return None class RenderData: pass class BaseItemView(wx.ScrolledWindow): """Acts as super class for several ItemView classes.""" def __init__(self, parent, id=wx.ID_ANY, pos=wx.DefaultPosition, size=wx.DefaultSize): if System.windows: style = wx.BORDER_THEME else: style = wx.BORDER_SUNKEN wx.ScrolledWindow.__init__(self, parent.get_container(), id, pos, size, style) self.SetBackgroundColour(wx.WHITE) self.SetBackgroundStyle(wx.BG_STYLE_CUSTOM) self.numrows = 0 self.numcolumns = 1 self.numitems = 0 self.xpadding = 0 self.ypadding = 0 self.xspacing = 0 self.yspacing = 0 self.itemwidth = 100 self.itemheight = 26 self.selectmode = 0 # FIXME: not used? always 0? self.selected_items = [] self.canreselect_items = False # FIXME: not used? can select selected. self.trydragdrop = False self.selectonmouseup = False self.typingsearchstr = "" self.typingsearchtime = 0 self.keyendindex = -1 # HorizontalItemView should set this to True self.horizontalscrolling = False # FIXME: not implemented (always) self.SetScrollRate(10, 10) self.calculateColors() self.multi_select = False self.mouselastclickonitem = None self.Bind(wx.EVT_CHAR, self.onKeyPressEvent) self.Bind(wx.EVT_PAINT, self.onPaintEvent) self.Bind(wx.EVT_SIZE, self.onResizeEvent) self.Bind(wx.EVT_LEFT_DOWN, self.onLeftDownEvent) self.Bind(wx.EVT_RIGHT_DOWN, self.onRightDownEvent) self.Bind(wx.EVT_LEFT_DCLICK, self.onLeftDoubleClickEvent) self.Bind(wx.EVT_MOTION, self.onMouseMoveEvent) self.Bind(wx.EVT_SET_FOCUS, self.onSetFocusEvent) self.Bind(wx.EVT_KILL_FOCUS, self.onKillFocusEvent) self.Bind(wx.EVT_LEFT_UP, self.__on_left_up) def get_item_search_text(self, index): return self.get_item_text(index).lower() def search_for_text(self, text): print("search for", repr(text)) text = text.lower() imin = 0 imax = len(self.items) -1 while imin < imax: imid = (imin + imax) // 2 assert imid < imax mid_text = self.get_item_search_text(imid) if mid_text < text and not mid_text.startswith(text): imin = imid + 1 else: imax = imid if imax == imin and self.get_item_search_text(imin).lower( ).startswith(text): return imin return None def setItemHeight(self, height): self.itemheight = height def setPadding(self, x, y=None): self.xpadding = x if y == None: self.ypadding = x else: self.ypadding = y def setItemSpacing(self, x, y=None): self.xspacing = x if y == None: self.yspacing = x else: self.yspacing = y def calculateColors(self): self.selecteditembackgroundcolor = wx.SystemSettings.GetColour ( wx.SYS_COLOUR_HIGHLIGHT) self.selecteditembordercolor = wxgui.mixColors ( self.selecteditembackgroundcolor, wx.WHITE, 0.2) self.selecteditemtextcolor = wx.SystemSettings.GetColour ( wx.SYS_COLOUR_HIGHLIGHTTEXT) self.itembordercolor = wx.Colour (0xc4, 0xc4, 0xc4) self.itembackgroundcolor = wx.Colour (0xf2, 0xf2, 0xf2) self.itemtextcolour = wx.Colour (0xff, 0xff, 0xff) def on_select_item(self, index): """Virtual method""" # FIXME: Send event pass def on_activate_item(self, index): """Virtual method""" # FIXME: Send event pass def onRightClickItem(self, index): pass def get_item_count(self): """Must be overriden to return the number of items""" return 0 def reset(self): self.selected_items = [] self.calculateVirtualSize() self.Scroll(0, 0) def update(self): #print("Itemview update") self.calculateVirtualSize (); self.Refresh () #self.numitems = self.get_item_count () #print("- Items: " + str(self.numitems)) #self.Refresh () #int itemcount = get_item_count (); #if (m_selecteditem >= itemcount) { # removeIndex (m_selecteditem); # m_selecteditem = -1; #} # #CalculateVirtualSize (); #Refresh (); def doStartDragDrop(self): """Override this to implement dragging items""" pass def scrollToItem(self, index): if index < 0: return if index >= self.get_item_count (): return startx, starty = self.GetViewStart () sunitx, sunity = self.GetScrollPixelsPerUnit () scrolltox = -1 scrolltoy = -1 startx = startx * sunitx starty = starty * sunity pos = self.getItemCoordinates (index) size = self.GetClientSize () if self.horizontalscrolling: # FIXME: NOT IMPLEMENTED print("Not implemented") # if (pos.x - m_padding < startx) { # scrolltox = pos.x - m_padding; # if (scrolltox < m_padding) scrolltox = 0; # } # else if (pos.x + m_cellwidth + m_padding > startx + size.x) { # scrolltox = (pos.x + m_cellwidth - size.x) + m_padding; # if (scrolltox > GetVirtualSize ().x - size.x - m_padding) { # scrolltox = GetVirtualSize ().x; # } # } # # if (scrolltox > -1) { # Scroll (scrolltox // sunitx, -1); # } else: if pos[1] - self.ypadding < starty: #scrolltoy = pos[1] - self.ypadding #if scrolltoy < self.ypadding: scrolltoy = 0 scrolltoy = pos[1] - (size.y - self.itemheight) // 2 elif pos[1] + self.itemheight + self.ypadding > starty + size.y: #scrolltoy = (pos[1] + self.itemheight - size.GetHeight ()) + \ # sunity + self.ypadding #if scrolltoy > self.GetVirtualSize ().y - size.GetHeight () - \ # self.ypadding: # scrolltoy = GetVirtualSize ().y - size.GetHeight () scrolltoy = pos[1] - (size.y - self.itemheight) // 2 else: return print("scrolltoy", scrolltoy) if scrolltoy < 0: scrolltoy = 0 #if scrolltoy > -1: self.Scroll (-1, scrolltoy // sunity) def refreshItem(self, index, updatefocusonly=False, selected=False, dc=None): """Schedules refresh of a particular item.""" coord = self.getItemCoordinates(index) if dc is None: x, y = coord start_x, start_y = self.GetViewStart() scroll_x, scroll_y = self.GetScrollPixelsPerUnit() x -= start_x * scroll_x y -= start_y * scroll_y self.RefreshRect(wx.Rect(x - 5, y - 5, self.itemwidth + 10, self.itemheight + 10), False) return #dc = wx.ClientDC(self) # Not good on mac. #self.PrepareDC(dc) #print("Refreshing item " + str (index)) renderdata = RenderData() renderdata.itemrect = wx.Rect(coord[0], coord[1], self.itemwidth, self.itemheight) renderdata.dc = dc #renderdata.wxdc = #renderdata.cliprect = cliprect; #renderdata.dc = &dc; renderdata.dragover = False # FIXME m_dragover && m_dragoveritem == index; #renderdata.itemfocus = focused && m_selecteditem == index; #renderdata.index = index; renderdata.widgetfocus = wx.Window.FindFocus() == self renderdata.itemfocus = False if len(self.selected_items) > 0: if index == self.selected_items[0]: renderdata.selected = True renderdata.itemfocus = renderdata.widgetfocus elif index in self.selected_items: renderdata.selected = True else: renderdata.selected = False else: renderdata.selected = False #renderdata.updatefocusonly = updatefocusonly; #renderdata.widgetfocus = focused; self.render_item(index, renderdata) def render_item(self, index, renderdata): """Must be overriden to render an item""" print("Must override render_item " + str (index)) #def select_item(self, index): # """Select the item with the specified index""" # # pass # FIXME: not used? def _moveindexUp(self, index): #"""Must be extended by descendants""" if index <= 0: return pass # FIXME: not used? def _moveIndexDown(self, index): #"""Must be extented by descendants""" if index >= self.get_item_count () - 1: return pass def _insertIndex(self, index): pass def _removeIndex(self, index): pass def renderEmptyView(self, dc): """Override this method to custom render the empty view""" pass def clearSelection(self): # FIXME: IMPLEMENT! self.selected_items = [] olditems = self.selected_items[:] itemcount = len(self.selected_items) for i in range(0, itemcount): self.refreshItem(olditems[i], True, False) def select_item(self, index, addtoselection=False, sendevent=True, d2=0, d3=0, forceallowreselect=False): if index >= self.get_item_count(): return False if index < 0 or index is None: self.clearSelection() return False itemcount = len(self.selected_items) if not self.canreselect_items and not forceallowreselect: # Scroll to item if it is outside the view. if self.GetScrollRange(wx.VERTICAL) > 1: scrollrate = self.GetScrollPixelsPerUnit()[1] virtual_top_y = self.getItemCoordinates(index)[1] virtual_bottom_y = virtual_top_y + self.itemheight virtual_win_top_y = self.GetViewStart()[1] * scrollrate virtual_win_bottom_y = virtual_win_top_y + \ self.GetClientSize()[1] if virtual_top_y < virtual_win_top_y: new_scroll_pos = virtual_top_y // scrollrate self.Scroll(0, new_scroll_pos - 4) elif virtual_bottom_y > virtual_win_bottom_y: new_scroll_pos = math.ceil((virtual_bottom_y - self.GetClientSize()[1]) // scrollrate) self.Scroll(0, new_scroll_pos + 4) #for i in range (0, itemcount): # if(self.selected_items.Item (i) == index) return False; #} if addtoselection: #//wxLogDebug("A"); #if (m_selecteditems.Index (index) == wxNOT_FOUND) { # m_selecteditems.Add (index); # RefreshCell (index, true, true); #} self.keyendindex = index if not index in self.selected_items: self.selected_items.append(index) self.refreshItem(index, True, True) else: #m_selecteditem = index; self.keyendindex = index olditems = self.selected_items[:] self.selected_items = [index] self.refreshItem(index, True, True) for i in range(0, itemcount): if olditems[i] != index: self.refreshItem(olditems[i], True, False) #wxLogDebug("ADDING TO SELECTED ITEMS..!"); #m_selecteditems.Add (index); if sendevent: self.on_select_item(index) self.mouselastclickonitem = index #if (sendevent) { # SendEvent (EVENT_ITEMVIEW_SELECT, index, -1, -1, batch, last); #} # #/* FIXME: Need not refresh the entire thing.. */ # # return False def findItemAt(self, x, y): if x == -1 or y == -1: return -1; # FIXME: Optimize, should not need to loop through all elements ! sx = self.xpadding sy = self.ypadding insidecell = -1 for i in range (0, self.numitems): if i % self.numcolumns == 0: sx = self.xpadding; if i > 0: sy = sy + self.itemheight + self.yspacing if x >= sx and y >= sy and x <= sx + self.itemwidth \ and y <= sy + self.itemheight: insidecell = i break sx = sx + self.itemwidth + self.xspacing #if (insidecell > -1) { #// wxLogDebug("Inside cell %d", insidecell); #} else { #// wxLogDebug("Not inside anything..."); #} return insidecell def getItemCoordinates(self, index): if self.numcolumns == 0 or self.numrows == 0: return (0, 0) row = index // self.numcolumns column = index % self.numcolumns totalcolspacing = (column) * self.xspacing totalrowspacing = (row) * self.yspacing if totalcolspacing < 0: totalcolspacing = 0 if totalrowspacing < 0: totalrowspacing = 0 return(self.xpadding + column * self.itemwidth + totalcolspacing, self.ypadding + row * self.itemheight + totalrowspacing) def calculateRows(self): pass def calculateColumns(self): pass def calculateVirtualSize(self): raise Exception, "Must override calculateVirtualSize" def absoluteToRelative(self, pos): return (absoluteToRelativeX (pos[0]), absoluteToRelativeY (pos[1])) def relativeToAbsolute(self, pos): return (relativeToAbsoluteX (pos[0]), relativeToAbsoluteY (pos[1])) def relativeToAbsoluteX(self, coord): sunitx, sunity = self.GetScrollPixelsPerUnit () startx, starty = self.GetViewStart () startx = startx * sunitx return startx + coord relToAbsX = relativeToAbsoluteX def relativeToAbsoluteY(self, coord): sunitx, sunity = self.GetScrollPixelsPerUnit () startx, starty = self.GetViewStart () starty = starty * sunity return starty + coord relToAbsY = relativeToAbsoluteY def absoluteToRelativeX(self, coord): sunitx, sunity = self.GetScrollPixelsPerUnit () startx, starty = self.GetViewStart () startx = startx * sunitx return coord - startx absToRelX = absoluteToRelativeX def absoluteToRelativeY(self, coord): sunitx, sunity = self.GetScrollPixelsPerUnit () startx, starty = self.GetViewStart () starty = starty * sunity return coord - starty absToRelY = absoluteToRelativeX def onPaintEvent(self, event): #logger.debug('painting') dc = wx.AutoBufferedPaintDC(self) dc.SetBackground(wx.Brush(self.GetBackgroundColour())) dc.Clear() # dc = wx.PaintDC(self) self.PrepareDC(dc) # dc.BeginDrawing() #print("BASEITEMVIEW: onPaintEvent") #int startx, starty; // Start of client area #int sunitx, sunity; // Scrolling units #int ux, uy, uw, uh; // Update rectangle sunitx, sunity = self.GetScrollPixelsPerUnit() startx, starty = self.GetViewStart() #// wxBrush brush(*wxWHITE); #// dc.SetBrush(brush); # FIXME: RENDERBACKGROUND SUPPORT #renderBackground (dc); if self.numcolumns == 0 or self.numrows == 0: self.renderEmptyView(dc) region = wx.RegionIterator(self.GetUpdateRegion()) # Keep a list of which items are rendered so we avoid rendering # items twice (or more) because of items overlapping regions rendereditems = [] while region: ux = self.relativeToAbsoluteX(region.GetX()) uy = self.relativeToAbsoluteY(region.GetY()) uw = region.GetW() uh = region.GetH() rowstart, rowend = -1, -1 columnstart, columnend = -1, -1 # This is not very efficient... x = self.xpadding for i in range (0, self.numcolumns): if columnstart == -1 and x + self.itemwidth >= ux: columnstart = i if x < ux + uw: columnend = i x = x + self.itemwidth + self.xspacing # This is not very efficient... y = self.ypadding for i in range (0, self.numrows): if rowstart == -1 and y + self.itemheight >= uy: rowstart = i if y < uy + uh: rowend = i y = y + self.itemheight + self.yspacing #logger.debug('%s rows, %s cols' %(rowend, columnend)) # Refresh the items overlapping with the update region for i in range(columnstart, columnend + 1): for j in range(rowstart, rowend + 1): if rowstart == -1 or columnstart == -1: continue index = i + j * self.numcolumns #logger.debug('painting index %s' %index) if index >= self.numitems: break #if index in self.selected_items: selected = True #else: selected = False # Do not render this item again (if already rendered) if index in rendereditems: continue rendereditems.append(index) self.refreshItem(index, dc=dc) region.Next() # dc.EndDrawing() def onResizeEvent(self, event): self.calculateRows () self.calculateColumns () self.calculateVirtualSize () self.Refresh() def onMouseMoveEvent(self, event): if self.trydragdrop and event.Dragging() and event.LeftIsDown() \ and self.mouseclickonitem > -1: mouseend = wx.Size() mouseend.x = self.relativeToAbsoluteX(event.GetX()) mouseend.y = self.relativeToAbsoluteY(event.GetY()) distance = math.sqrt((mouseend.x - self.mousestartx) * (mouseend.x - self.mousestartx) + (mouseend.y - self.mousestarty) * (mouseend.y - self.mousestarty)) if distance > 15: print("START DRAG AND DROP") self.trydragdrop = False if self.HasCapture(): # Allow drop outside the itemview. self.ReleaseMouse() self.doStartDragDrop() self.selectonmouseup = False # if (m_selectmode == SELECT_MODE_SINGLE) return; # wxClientDC dc(this); # PrepareDC (dc); # dc.BeginDrawing (); # if (event.Dragging() && event.LeftIsDown() && # m_mouseclickonitem == -1 && # m_drawrubberband == false) { # //CaptureMouse (); # m_drawrubberband = true; # } # if (m_drawrubberband) { # DrawRubberBand (dc); # } # m_mouseend.x = RelativeToAbsoluteX (event.GetX ()); # m_mouseend.y = RelativeToAbsoluteY (event.GetY ()); # if (m_drawrubberband) { # RefreshRubberCells (); # DrawRubberBand (dc); # } # /* FIXME: Use timeout instead... ! */ # if (abs (m_mouseend.x - m_mousestart.x) > 10 || # abs (m_mouseend.y - m_mousestart.y) > 10) { # m_mouseclick = false; # } # int startx, starty; # int sunitx, sunity; # int dy = 0; # GetScrollPixelsPerUnit (&sunitx, &sunity); # GetViewStart (&startx, &starty); # starty = starty * sunity; # wxSize size = GetClientSize (); # // wxLogDebug("Timer event"); # if (m_mouseend.y < starty) dy = m_mouseend.y - starty; # if (m_mouseend.y > starty + size.GetY ()) # dy = m_mouseend.y - (starty + size.GetY ()); # if (dy != 0) { # m_rubberscroll = dy // sunity; # //Scroll(-1, scrolltoy); # } # else { # m_rubberscroll = 0; # } # dc.EndDrawing (); def onLeftDoubleClickEvent(self, event): cellindex = -1 mousestartx = self.relativeToAbsoluteX (event.GetX ()) mousestarty = self.relativeToAbsoluteY (event.GetY ()) cellindex = self.findItemAt (mousestartx, mousestarty) if cellindex > -1 and cellindex in self.selected_items: self.on_activate_item (cellindex) def onRightDownEvent(self, event): cellindex = -1 mousestartx = self.relativeToAbsoluteX (event.GetX ()) mousestarty = self.relativeToAbsoluteY (event.GetY ()) cellindex = self.findItemAt (mousestartx, mousestarty) if cellindex > -1: if self.multi_select and cellindex not in self.selected_items: self.select_item(cellindex) self.onRightClickItem (cellindex) def onLeftDownEvent(self, event): cellindex = -1 #CaptureMouse (); self.mousestartx = self.relativeToAbsoluteX(event.GetX()) self.mousestarty = self.relativeToAbsoluteY(event.GetY()) self.mouseclick = True cellindex = self.findItemAt(self.mousestartx, self.mousestarty) if cellindex > -1: cellpos = self.getItemCoordinates(cellindex) #if (onItemMouseDown (cellindex, m_mousestart.x - cellpos.x, # m_mousestart.y - cellpos.y) == false) return; self.mouseclickonitem = cellindex #last_clicked_on = self.mouselastclickonitem #self.mouselastclickonitem = cellindex self.trydragdrop = True self.selectonmouseup = False if self.selectmode == 0: if cellindex > -1: add_to_selection = False shift_down = False if self.multi_select: if event.ControlDown(): add_to_selection = True if event.ShiftDown(): shift_down = True if self.canreselect_items: self.select_item(cellindex, add_to_selection) elif shift_down: if not self.mouselastclickonitem is None and \ cellindex != self.mouselastclickonitem: add = [i for i in range(min(cellindex, self.mouselastclickonitem), max( cellindex, self.mouselastclickonitem) + 1)] update = self.selected_items + add if add_to_selection: self.selected_items += add else: self.selected_items = add for i in update: self.refreshItem(i) elif not cellindex in self.selected_items: # The item was not already selected #//SendEvent (EVENT_ITEMVIEW_SELECT, cellindex); self.select_item(cellindex, add_to_selection) elif cellindex in self.selected_items: # FIXME: if more than one selected, wait for drag? #if len(self.selected_items) > 1: self.selectonmouseup = cellindex # if add_to_selection: # self.selected_items.remove(cellindex) # self.refreshItem(cellindex, True, False) # else: # # Remove selection on other items. # self.select_item(cellindex, False, True) #else { # # m_rubberaddeditems.Clear (); # # if (cellindex > -1 && event.ControlDown ()) { # if (m_selecteditems.Index(cellindex) == wxNOT_FOUND) { # SelectCell(cellindex, true); # //SendEvent (EVENT_ITEMVIEW_SELECT, cellindex); # } else { # DeselectCell(cellindex, true); # } # # } # else if (cellindex > -1 && event.ShiftDown ()) { # SelectRange(m_selecteditem, cellindex); # # /* FIXME: Should send some kind of select range event */ # //SendEvent (EVENT_ITEMVIEW_SELECT, cellindex); # # } # # else if (m_selecteditems.Index (cellindex) != wxNOT_FOUND) { # # // We want to "select" the cell in any case, to unselect any # // other selected cells # //m_keyendindex = cellindex; # # m_selectonmouseup = true; # //SelectCell(cellindex, false); # # if (m_selecteditems.Index (cellindex) == wxNOT_FOUND) { # // The item was not already selected # //SendEvent (EVENT_ITEMVIEW_SELECT, cellindex); # } # } # else if (cellindex > -1) { # # SelectCell (cellindex, false); # } # else { # # ClearSelection (); # } # # m_rubberscroll = 0; # m_timer.Start(SCROLLDELAY); #} # Allow wxWidgets to process the event (focus the widget, etc..) self.mouselastclickonitem = cellindex event.Skip () def __on_left_up(self, event): # FIXME: deselect if not drag-n-drop. if self.selectonmouseup is not False: cellindex = self.selectonmouseup add_to_selection = False if self.multi_select: if event.ControlDown(): add_to_selection = True if add_to_selection: if cellindex in self.selected_items: self.selected_items.remove(cellindex) self.refreshItem(cellindex, True, False) else: # Remove selection on other items. self.select_item(cellindex, False, True) event.Skip() def onSetFocusEvent(self, event): if len(self.selected_items) > 0: self.refreshItem(self.selected_items[0]) def onKillFocusEvent(self, event): if len(self.selected_items) > 0: self.refreshItem(self.selected_items[0]) def onKeyPressEvent(self, event): cellindex = -1 skip = False handlenavigation = False if self.numitems == 0: return if event.GetKeyCode () == 9: if event.ShiftDown(): self.Navigate (0) else: self.Navigate (wx.NavigationKeyEvent.IsForward) return if event.GetKeyCode() == wx.WXK_NEXT: skip = False self.Scroll(-1, self.relativeToAbsoluteY (0) + self.GetClientSize().y) elif event.GetKeyCode () == wx.WXK_PRIOR: skip = False self.Scroll(-1, self.relativeToAbsoluteY(0) - self.GetClientSize().y) elif event.GetKeyCode() == wx.WXK_LEFT: if len(self.selected_items) == 0: cellindex = 0 else: cellindex = self.selected_items[0] - 1 self.keyendindex = self.keyendindex - 1 skip = False handlenavigation = True elif event.GetKeyCode() == wx.WXK_RIGHT: if len(self.selected_items) == 0: cellindex = 0 else: cellindex = self.selected_items[0] + 1 self.keyendindex = self.keyendindex + 1 skip = False handlenavigation = True elif event.GetKeyCode () == wx.WXK_UP: if len(self.selected_items) == 0: cellindex = 0 else: cellindex = self.selected_items[0] - self.numcolumns self.keyendindex = self.keyendindex - self.numcolumns skip = False handlenavigation = True elif event.GetKeyCode () == wx.WXK_DOWN: if len(self.selected_items) == 0: cellindex = 0 else: cellindex = self.selected_items[0] + self.numcolumns self.keyendindex = self.keyendindex + self.numcolumns skip = False handlenavigation = True elif event.GetKeyCode () == wx.WXK_RETURN: # FIXME: IMPLEMENT if len(self.selected_items) == 1: # self.sendEvent (EVENT_ITEMVIEW_ACTIVATE, m_selecteditem) self.on_activate_item(self.selected_items[0]) skip = True else: if self.numitems == 0: if skip: event.Skip () return #if event.GetKeyCode () == wx.WXK_BACK: # self.typingsearchstr = "" # if skip: event.Skip () # return char = event.GetUnicodeKey() #print(chr (char)) t = time.time () if t - self.typingsearchtime > 1: self.typingsearchstr = "" self.typingsearchtime = t if event.GetKeyCode() == wx.WXK_BACK: self.typingsearchstr = self.typingsearchstr[:-1] else: self.typingsearchstr = self.typingsearchstr + chr (char) print(self.typingsearchstr) pos = self.search_for_text(self.typingsearchstr) if len(self.selected_items) == 0 or self.selected_items[0] != pos \ and pos != None and len(self.typingsearchstr) > 0: self.scrollToItem (pos) self.select_item (pos) if handlenavigation: if not event.ShiftDown() or len(self.selected_items) == 0: self.keyendindex = cellindex else: cellindex = self.selected_items[0] if cellindex < 0: cellindex = 0 if cellindex > self.numitems - 1: cellindex = self.numitems - 1 if self.keyendindex < 0: self.keyendindex = 0 if self.keyendindex > self.numitems - 1: self.keyendindex = self.numitems - 1 #wxLogDebug("New cellindex: %d, keyendindex: %d, selecteditem: %d", # cellindex, m_keyendindex, m_selecteditem); #if False: # pass #if (m_selectmode == SELECT_MODE_MULTIPLE && event.ShiftDown ()) { # SelectRange (m_selecteditem, m_keyendindex); # ScrollToCell (m_keyendindex); #} #else { #else: self.select_item(cellindex, False) #//SendEvent (EVENT_ITEMVIEW_SELECT, cellindex); self.scrollToItem(cellindex) if skip: event.Skip () #def onResizeEvent(self, event): # self.Refresh (False) class VerticalItemView (BaseItemView): def __init__(self, parent, id=wx.ID_ANY, pos=wx.DefaultPosition, size=wx.DefaultSize): self.numcolumns = 1 # Default number of columns self.wantcolumns = 1 self.expanditemwidth = True self.minitemwidth = 20 self._singletextlineitemheight = 26 self._doubletextlineitemheight = 40 BaseItemView.__init__(self, parent, id, pos, size) def render_item (self, index, rd): # FIXME: remove direct dependency on wx from this method import wx dc = rd.dc dc.SetFont(self.GetFont()) c = dc.GetTextForeground() old_foreground = wx.Colour(c.Red(),c.Green(),c.Blue()) reset_color = False if rd.selected: flags = wx.CONTROL_SELECTED flags |= wx.CONTROL_FOCUSED wx.RendererNative_Get().DrawItemSelectionRect(self, dc, rd.itemrect, flags=flags) #dc.SetTextForeground(wx.SystemSettings.GetColour( # wx.SYS_COLOUR_HIGHLIGHTTEXT)) dc.SetTextForeground(wx.WHITE) reset_color = True x, y, w, h = rd.itemrect icon = self.get_item_icon(index) if icon is not None: bitmap = icon.bitmap if bitmap is not None and bitmap.Ok(): dc.DrawBitmap(bitmap, x + 6, y + (h - 16) // 2, True) x += 16 + 6 w -= 16 + 6 x += 6 w -= 6 primary = self.get_item_text(index) #primary = primary.replace(u"\nAmiga \u00b7 ", "\n") secondary = "" SPLIT = u"\n" if SPLIT in primary: primary, secondary = primary.split(SPLIT, 1) primary = primary.rstrip() secondary = u" " + secondary.lstrip() itemRect = wx.Rect(x, y, w, h) dw, dh = dc.GetTextExtent(primary) dc.DrawText(primary, x, y + (h - dh) // 2) x += dw w -= dw if secondary: if not rd.selected: dc.SetTextForeground(wx.Colour(0xa0, 0xa0, 0xa0)) dc.DrawText(secondary, x, y + (h - dh) // 2) reset_color = True if reset_color: dc.SetTextForeground(old_foreground) def setupSingleTextLineItems(self): self.itemheight = self._singletextlineitemheight def setupDoubleTextLineItems(self): self.itemheight = self._doubletextlineitemheight def getTextLinePosition (textlineindex): if textlineindex == 1: if self.itemheight == self._singletextlineitemheight: return (6, 6) elif self.itemheight == self._doubletextlineitemheight: return (6, 6) elif textlineindex == 2: if self.itemheight == self._doubletextlineitemheight: return (6, 24) return (0, 0) def getTextLineRect(self, textlineindex, icon=False): """ Assumed icon size: 32x32 for doubleline items with text Assumed icon size: 16x16 for singleline items with text """ pos = (0, 0) if textlineindex == 1: if self.itemheight == self._singletextlineitemheight: pos = (6, 6) elif self.itemheight == self._doubletextlineitemheight: pos = (6, 6) elif textlineindex == 2: if self.itemheight == self._doubletextlineitemheight: pos = (6, 20) if pos == (0, 0): return wx.Rect (0, 0, self.itemwidth, self.itemheight) if self.itemheight == self._singletextlineitemheight: if icon: x = pos[0] + 16 + 6 else: x = pos[0] else: if icon: x = pos[0] + 32 + 6 else: x = pos[0] # FIXME: 20 here represents the line height.. return wx.Rect (x, pos[1], self.itemwidth - x - 6, 20) def getIconPosition(self): if self.itemheight == self._singletextlineitemheight: return (7, 5) else: return (7, 7) def setColumns(self, numcolumns, minitemwidth, expand): self.wantcolumns = numcolumns self.minitemwidth = minitemwidth self.expanditemwidth = expand def calculateColumns(self): #print("VerticalItemView.calculateColums ()") width = self.GetClientSize ().GetWidth () if self.wantcolumns == -1: self.numcolumns = 1 + (width - self.minitemwidth - \ 2 * self.xpadding) // (self.minitemwidth + self.xspacing) else: self.numcolumns = self.wantcolumns if self.expanditemwidth: self.itemwidth = (width - self.xpadding * 2 - self.xspacing * (self.numcolumns - 1)) // (self.numcolumns) else: self.itemwidth = self.minitemwidth #wxLogDebug("Width: %d, Cell width: %d", width, m_cellwidth); return self.numcolumns; def calculateVirtualSize(self): self.numitems = self.get_item_count() if self.numitems > 0: #print(self.numcolumns) if self.numcolumns < 1: self.numcolumns = 1 self.numrows = self.numitems // self.numcolumns #(self.numitems % 1) # KH: doesn't work if odd number. if self.numitems - self.numrows * self.numcolumns != 0: self.numrows += 1 else: self.numrows = 0 #self.numrows = self.numitems // self.numcolumns + \ #(self.numitems % 0) #self.numrows = self.numitems // self.numcolumns + # (self.numitems % self.numcolumns > 0 ? 1 : 0) width = -1; if self.numrows > 0: height = self.ypadding * 2 + self.numrows * self.itemheight + \ (self.numrows - 1) * self.yspacing else: height = self.ypadding * 2 + self.numrows * self.itemheight #height = self.ypadding * 2 + self.numrows * self.itemheight + \ # (self.numrows > 0 ?(self.numrows - 1) * self.yspacing : 0) #print("Setting virtualsize to %dx%d" % (width, height)) self.SetVirtualSize ((width, height)); #self.SetScrollRate(self.cellwidth + self.yspacing, self.itemheight + # self.yspacing); return (width, height) def renderStdListItemBackground(self, renderdata): dc = renderdata.dc if renderdata.dragover: dc.SetPen (wx.RED_PEN) dc.SetBrush (wx.RED_BRUSH) dc.SetTextForeground (wx.WHITE) elif renderdata.selected: dc.SetPen (wxgui.getHighlightPen ()) dc.SetBrush (wxgui.getHighlightBrush ()) dc.SetTextForeground (wx.SystemSettings.GetColour ( wx.SYS_COLOUR_HIGHLIGHTTEXT)); else: dc.SetPen (wx.Pen(self.GetBackgroundColour ())) dc.SetBrush (wx.Brush(self.GetBackgroundColour ())) dc.SetTextForeground (wx.BLACK) #dc.DrawRectangleRect (renderdata.itemrect) dc.DrawRectangle (renderdata.itemrect.x, renderdata.itemrect.y, renderdata.itemrect.width, renderdata.itemrect.height - 1) if not renderdata.dragover and not renderdata.selected: dc.SetPen (wx.Pen (wx.Color (0xe8, 0xe8, 0xe8))) dc.DrawLine (renderdata.itemrect.x, renderdata.itemrect.y + renderdata.itemrect.height - 1, renderdata.itemrect.x + renderdata.itemrect.width, renderdata.itemrect.y + renderdata.itemrect.height - 1); # Draw item focus if item has focus if renderdata.itemfocus: dc.SetPen (wx.Pen (wxgui.mixColors (dc.GetBrush ().GetColour (), dc.GetTextForeground (), 0.6), 1, wx.DOT)) brush = dc.GetBrush () dc.SetBrush (wx.TRANSPARENT_BRUSH) dc.DrawRectangle (renderdata.itemrect.x + 1, renderdata.itemrect.y + 1, renderdata.itemrect.width - 2, renderdata.itemrect.height - 3); dc.SetBrush (brush) class SimpleListItemView (VerticalItemView): def __init__(self, parent, id=wx.ID_ANY, doublelinemode=False, pos=wx.DefaultPosition, size=wx.DefaultSize): VerticalItemView.__init__(self, parent, id, pos, size) self.doublelinemode = doublelinemode self.items = [] if doublelinemode: self.setupDoubleTextLineItems () else: self.setupSingleTextLineItems () def setItems(self, items): """Sets the full content of the itemview items is a python list of item(s). See addItem for format of item """ self.items = items self.reset () def addItem(self, item): """ item is a list with the following content 0: text (string) 1: 16 small icon (wxBitmap) - used in singlelinemode 2: subtext (string) - only used in doublelinemode 3: 32 large icon (wxBitmap) - used in doublelinemode 4: data (any type, content is not used) """ self.items.append (item) self.update () def removeItem(self, index): self.items[index:index] = [] self._removeIndex (index) self.update () def insertItem(self, index, item): self.items[index:index] = item self._insertIndex (index) # FIXME: UPDATE indexes self.update () def moveItemUp(self, index): self._moveIndexUp (index) def moveItemDown(self, index): self._moveIndexDown (index) def get_item_count(self): return len(self.items) def render_item(self, index, renderdata): dc = renderdata.dc ndc = wxgui.DrawingContext (dc, (self.relToAbsX (0), self.relToAbsY (0))) item = self.items[index] if len (item) < 4: if len (item) < 3: if len (item) < 2: item[1] = None item[2] = "" item[3] = None # Set colors and draw background self.renderStdListItemBackground (renderdata) # Draw icon for album if self.doublelinemode: icon = item[3] else: icon = item[1] if icon and icon.Ok (): pos = self.getIconPosition () pos = (pos[0] + renderdata.itemrect.x, pos[1] + renderdata.itemrect.y) dc.DrawBitmap (icon, pos[0], pos[1], True) # Draw text if self.doublelinemode: name = item[0] pos = name.find (" -- ") if pos == -1: # Old, standard display font = self.GetFont () #font.SetWeight (wx.BOLD) dc.SetFont (font) textarea = self.getTextLineRect (1, True) ypadd = textarea.y textarea.x = textarea.x + renderdata.itemrect.x textarea.y = textarea.y + renderdata.itemrect.y textarea.height = renderdata.itemrect.height - ypadd drawnsize = ndc.drawTextArea (name, textarea) dc.SetTextForeground (wxgui.mixColors ( dc.GetBrush ().GetColour (), dc.GetTextForeground (), 0.4)) if (ypadd + drawnsize[1]) < 20 and item[2]: count = folder.getFileCount () textarea = self.getTextLineRect (2, True) textarea.x = textarea.x + renderdata.itemrect.x textarea.y = textarea.y + renderdata.itemrect.y dc.DrawText (item[2], textarea.x, textarea.y) else: # Display with group name group = name[0:pos] name = name[pos + 4:] orgfg = dc.GetTextForeground () font = self.GetFont () #font.SetWeight (wx.BOLD) dc.SetFont (font) textarea = self.getTextLineRect (1, True) textarea.x = textarea.x + renderdata.itemrect.x textarea.y = textarea.y + renderdata.itemrect.y ndc.drawTextLine (name, textarea) dc.SetTextForeground (wxgui.mixColors ( dc.GetBrush ().GetColour (), orgfg, 0.4)) textarea = self.getTextLineRect (2, True) textarea.x = textarea.x + renderdata.itemrect.x textarea.y = textarea.y + renderdata.itemrect.y tw, th = dc.GetTextExtent (group); dc.DrawText (group, textarea.x, textarea.y) textarea.x = textarea.x + tw if item[2]: dc.DrawText (" - " + item[2], textarea.x, textarea.y) else: name = item[0] pos = name.find (" -- ") if pos == -1: # Old, standard display font = self.GetFont () #font.SetWeight (wx.BOLD) dc.SetFont (font) textarea = self.getTextLineRect (1, True) ypadd = textarea.y textarea.x = textarea.x + renderdata.itemrect.x textarea.y = textarea.y + renderdata.itemrect.y textarea.height = renderdata.itemrect.height - ypadd drawnsize = ndc.drawTextArea (name, textarea) #class CheckListItemView (SimpleListItemView): # # def __init__(self, parent, id = wx.ID_ANY, pos = wx.DefaultPosition, # size = wx.DefaultSize, style = 0): # # SimpleListItemView.__init__(self, parent, id, pos, size, style) update_class(BaseItemView) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/fsui/wx/window.py0000644000175000017500000000624112162366654024270 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import wx from ..common.element import Element from .common import update_class class Window(wx.Frame): def __init__(self, parent=None, title=""): wx.Frame.__init__(self, parent, -1, title) if parent: wx_parent = parent.container else: wx_parent = None self.container = wx.Panel(self) self.container.get_window = self.get_window #self._window = wx.Frame(wx_parent, -1, title) #self._container = wx.Panel(self._window) #self.on_create() self.Bind(wx.EVT_SIZE, self.__resize_event) # hack to work around window maximizing before show on Windows self.container.Bind(wx.EVT_SIZE, self.__resize_event) self.Bind(wx.EVT_WINDOW_DESTROY, self.__destroy_event) self.Bind(wx.EVT_CLOSE, self.__close_event) self.destroy_listeners = [] self.close_listeners = [] sizer = wx.BoxSizer(wx.VERTICAL) sizer.Add(self.container, 1, wx.EXPAND) self.SetSizer(sizer) def set_background_color(self, color): self.container.SetBackgroundColour(color) def maximize(self, maximize=True): self.Maximize(maximize) #print(self.GetSize()) def is_maximized(self): return self.IsMaximized() def center_on_screen(self): self.CenterOnScreen() def set_icon_from_path(self, path): print("set_icon_from_path", path) icons = wx.IconBundleFromFile(path, wx.BITMAP_TYPE_ICO) self.SetIcons(icons) def add_destroy_listener(self, function): self.destroy_listeners.append(function) def get_window(self): return self def get_container(self): return self.container def show(self): self.Show() self.Layout() def hide(self): self.Hide() def destroy(self): self.Destroy() def set_title(self, title): self.SetTitle(title) def get_size(self): return self.GetClientSize() def get_position(self): return self.GetPosition() def set_size(self, size): self.SetClientSize(size) def on_create(self): pass def on_resize(self): if self.layout: #print("calling layout.set_size", self.get_size()) self.layout.set_size(self.get_size()) #self.layout.update() #def set_size_after(): # print("set_size_after") # self.layout.set_size(self.get_size()) #wx.CallLater(1000, set_size_after) def __resize_event(self, event): self.on_resize() event.Skip() def on_destroy(self): pass def __destroy_event(self, event): for function in self.destroy_listeners: function() self.on_destroy() def on_destroy(self): pass def on_close(self): pass def __close_event(self, event): print("__close_event") for function in self.close_listeners: function() self.on_close() self.Destroy() update_class(Window) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/fsui/wx/dialog.py0000644000175000017500000000417312162366654024222 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import wx class Dialog(wx.Dialog): def __init__(self, parent=None, title=""): #print("setting parent to", parent) wx.Dialog.__init__(self, parent, -1, title) self.container = wx.Panel(self) self.container.get_window = self.get_window self.Bind(wx.EVT_SIZE, self.__resize_event) self.Bind(wx.EVT_WINDOW_DESTROY, self.__destroy_event) self.Bind(wx.EVT_CLOSE, self.__close_event) self.destroy_listeners = [] self.close_listeners = [] def add_destroy_listener(self, function): self.destroy_listeners.append(function) def add_close_listener(self, function): self.close_listeners.append(function) def get_window(self): return self def get_container(self): return self.container def show(self): self.Show() def close(self): self.Close() def show_modal(self): return self.ShowModal() def end_modal(self, value): self.EndModal(value) def center_on_parent(self): self.CenterOnParent() def destroy(self): self.Destroy() def set_title(self, title): self.SetTitle(title) def get_size(self): return self.GetClientSize() def set_size(self, size): self.SetClientSize(size) def on_create(self): pass def on_resize(self): if self.layout: #print("calling layout.set_size", self.get_size()) self.layout.set_size(self.get_size()) self.layout.update() def __resize_event(self, event): self.on_resize() event.Skip() def on_destroy(self): pass def on_close(self): pass def __destroy_event(self, event): for function in self.destroy_listeners: function() self.on_destroy() def __close_event(self, event): print("__close_event") for function in self.close_listeners: function() self.on_close() self.Destroy() fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/fsui/wx/Menu.py0000644000175000017500000000230512162366654023662 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import wx class Menu: def __init__(self): self._menu = wx.Menu() self._ids = [] #self._functions = [] def add_item(self, text, function, item_id=-1): text = text.replace("&", "&&") if item_id == -1: item_id = wx.NewId() self._ids.append(item_id) #self._functions.append(function) self._menu.Append(item_id, text) def function_wrapper(event): # the reason we use CallAfter here is so control will return # to the application after having popped up a menu, so the # button opening a menu can draw its correct state when the # menu is closed, before for example a modal dialog is opened. wx.CallAfter(function) self._menu.Bind(wx.EVT_MENU, function_wrapper, id=item_id) def add_about_item(self, text, function): self.add_item(text, function, wx.ID_ABOUT) def add_preferences_item(self, text, function): self.add_item(text, function, wx.ID_PREFERENCES) def add_separator(self): self._menu.AppendSeparator() fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/fsui/wx/image.py0000644000175000017500000000241112162366654024036 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import wx import pkg_resources class Image: NEAREST = 0 def __init__(self, name): logger = wx.LogNull() index = name.find(":") if index > 1: package, file = name.split(":", 1) stream = pkg_resources.resource_stream(str(package), str(file)) self._image = wx.ImageFromStream(stream) #self.bitmap = wx.BitmapFromImage(image) else: self._image = wx.Image(name) #self.bitmap = wx.Bitmap(name) #self.bitmap = wx.BitmapFromImage(image) self._bitmap = None @property def size(self): return (self._image.GetWidth(), self._image.GetHeight()) @property def bitmap(self): if self._bitmap is None: self._bitmap = wx.BitmapFromImage(self._image) return self._bitmap def resize(self, size, filter=1): if size == self.size: return if filter: q = wx.IMAGE_QUALITY_HIGH else: q = wx.IMAGE_QUALITY_NORMAL self._image.Rescale(size[0], size[1], q) self._bitmap = None fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/fsui/wx/separator.py0000644000175000017500000000064312162366654024761 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import wx from .common import update_class class Separator(wx.StaticLine): def __init__(self, parent): wx.StaticLine.__init__(self, parent.get_container(), -1, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL) update_class(Separator) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/fsui/wx/combobox.py0000644000175000017500000000250512162366654024570 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import wx from .common import update_class class ComboBox(wx.ComboBox): def __init__(self, parent, items=[], read_only=False): style = 0 if read_only: style = style | wx.CB_READONLY wx.ComboBox.__init__(self, parent.get_container(), -1, "", wx.DefaultPosition, wx.DefaultSize, items, style) if len(items) > 0: self.SetSelection(0) self.Bind(wx.EVT_COMBOBOX, self.__combobox_event) self.Bind(wx.EVT_TEXT, self.__text_event) def get_index(self): return self.GetSelection() def set_index(self, index): self.SetSelection(index) def set_items(self, items): print("setting items", items) self.Clear() for item in items: self.Append(item) def set_item_text(self, index, text): self.SetString(index, text) def get_text(self): return self.GetValue() def set_text(self, text): self.SetValue(text) def on_change(self): print("ComboBox.on_change") def __combobox_event(self, event): self.on_change() def __text_event(self, event): self.on_change() update_class(ComboBox) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/fsui/wx/ImageButton.py0000644000175000017500000000127612162366654025202 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import wx from .common import update_class from .System import System class ImageButton(wx.BitmapButton): def __init__(self, parent, image): wx.BitmapButton.__init__(self, parent.get_container(), -1, image.bitmap) self.Bind(wx.EVT_BUTTON, self.__button_event) if not System.macosx: self.min_height = 26 def set_image(self, image): self.SetBitmapLabel(image.bitmap) def on_activate(self): pass def __button_event(self, event): self.on_activate() update_class(ImageButton) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/fsui/wx/listview.py0000644000175000017500000000225412162366654024627 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import wx from .common import update_class from .itemview import VerticalItemView class ListView(VerticalItemView): def __init__(self, parent): VerticalItemView.__init__(self, parent) self.__index = 0 self.__items = [] self.__default_icon = None def set_default_icon(self, icon): self.__default_icon = icon def on_select_item(self, index): pass def on_activate_item(self, index): pass def get_index(self): if len(self.selected_items) == 0: return -1 return self.selected_items[0] def set_index(self, index): self.select_item(index) def get_item_icon(self, index): return self.__default_icon def get_item_text(self, index): return self.__items[index] def get_item(self, index): return self.__items[index] def get_item_count(self): return len(self.__items) def set_items(self, items): self.__items = list(items) self.update() update_class(ListView) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/fsui/wx/control.py0000644000175000017500000000513312162366654024440 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import wx from .common import update_class class Control(wx.Control): def __init__(self, parent, paintable=False): # create it outside the visible area to avoid flickering on Windows # when the controls are displayed before they are moved to the # correct place id = wx.NewId() wx.Control.__init__(self, parent.get_container(), id, (0, 2000), (0, 0), wx.NO_BORDER) self.Bind(wx.EVT_PAINT, self.__paint_event) self.Bind(wx.EVT_ERASE_BACKGROUND, self.__erase_background_event) self.Bind(wx.EVT_LEFT_DOWN, self.__left_down_event) self.Bind(wx.EVT_LEFT_UP, self.__left_up_event) self.Bind(wx.EVT_WINDOW_DESTROY, self.__destroy_event) self.Bind(wx.EVT_ENTER_WINDOW, self.__enter_window_event) self.Bind(wx.EVT_LEAVE_WINDOW, self.__leave_window_event) self.position = (0, 2000) self._paintable = paintable self._paint_dc = None @property def size(self): return self.GetSizeTuple() def get_window(self): return self.GetParent().get_window() def get_container(self): return self def on_resize(self): print("Panel.on_resize") if self.layout: self.layout.set_size(self.get_size()) self.layout.update() def on_destroy(self): pass def __destroy_event(self, event): self.on_destroy() def on_left_down(self): pass def __left_down_event(self, event): self.on_left_down() def on_left_up(self): pass def __left_up_event(self, event): self.on_left_up() def create_dc(self): from .dc import DrawingContext return DrawingContext(self._paint_dc) def on_paint(self): pass def __paint_event(self, event): if not self._paintable: event.Skip() return self._paint_dc = wx.PaintDC(self) try: self.on_paint() finally: self._paint_dc = None def on_erase(self): return False def __erase_background_event(self, event): if not self._paintable: event.Skip() if self.on_erase(): event.Skip() def on_mouse_enter(self): pass def __enter_window_event(self, event): self.on_mouse_enter() def on_mouse_leave(self): pass def __leave_window_event(self, event): self.on_mouse_leave() update_class(Control) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/fsui/wx/label.py0000644000175000017500000000173512162366654024043 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import wx from .common import update_class from .System import System class Label(wx.StaticText): def __init__(self, parent, title=""): title = title.replace("&", "&&") wx.StaticText.__init__(self, parent.get_container(), -1, title) def set_text(self, text): self.SetLabel(text) class BoldLabel(Label): def __init__(self, parent, title=""): Label.__init__(self, parent, title) font = self.GetFont() font.SetWeight(wx.BOLD) self.SetFont(font) class HeadingLabel(Label): def __init__(self, parent, title=""): Label.__init__(self, parent, title) font = self.GetFont() if System.windows: font.SetPointSize(10) font.SetFaceName("Arial") font.SetWeight(wx.BOLD) self.SetFont(font) update_class(Label) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/fsui/wx/Color.py0000644000175000017500000002025412162366654024037 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import wx class BaseColor(): #def __init__(self): # #wx.Colour.__init__() # pass def mix(self, color, opacity=0.5): """Mixes this color with another color and returns the result. Arguments: color -- The overlay color to mix in (Color or wx.Colour) opacity -- The opacity of the overlay color in the range [0.0, 1.0] Returns a reference to self. """ assert opacity >= 0.0 and opacity <= 1.0, "Invalid opacity" iopacity = 1 - opacity #return wx.Colour( self.set_components( int(self[0] * iopacity + color[0] * opacity), int(self[1] * iopacity + color[1] * opacity), int(self[2] * iopacity + color[2] * opacity)) return self class Color(wx.Colour, BaseColor): def __init__(self, *args): wx.Colour.__init__(self) #BaseColor.__init__(self) if len(args) == 1: c = args[0] if isinstance(c, wx.Colour): self.Set(c.Red(), c.Green(), c.Blue(), c.Alpha()) else: if len(c) == 3: r, g, b = c self.Set(r, g, b) else: r, g, b, a = c self.Set(r, g, b, a) elif len(args) >= 3: self.Set(*args) else: raise TypeError("Color object is not initialized") @staticmethod def mix_colors (basecolor, overlaycolor, opacity=0.5): c = Color(basecolor) return c.mix(overlaycolor, opacity) def set_components(self, r, g, b, a=wx.ALPHA_OPAQUE): #print(r, g, b, a) self.Set(r, g, b, a) def __getitem__(self, index): if index == 0: return self.Red() if index == 1: return self.Green() if index == 2: return self.Blue() raise IndexError("Invalid color component") def to_hsv(self): return HSVColor.from_rgb(self.Red(), self.Green(), self.Blue()) def to_hsl(self): return HSLColor.from_rgb(self.Red(), self.Green(), self.Blue()) def lighten(self, amount=0.05): c = self.to_hsl().lighten(amount).to_rgb() self.set_components(*c) return self def darken(self, amount=0.05): c = self.to_hsl().darken(amount).to_rgb() self.set_components(*c) return self # def mix(self, color, opacity=0.5): # """Mixes this color with another color and returns the result. # # Arguments: # color -- The overlay color to mix in (Color or wx.Colour) # opacity -- The opacity of the overlay color in the range [0.0, 1.0] # # Returns a reference to self. # """ # assert opacity >= 0.0 and opacity <= 1.0, "Invalid opacity" # iopacity = 1 - opacity # #return wx.Colour( # self.Set( # int(self.Red() * iopacity + color.Red() * opacity), # int(self.Green() * iopacity + color.Green() * opacity), # int(self.Blue() * iopacity + color.Blue() * opacity)) # return self def invert(self): self.Set(255 - self.Red(), 255 - self.Green(), 255 - self.Blue()) return self def inverted(self): return self.copy().invert() def copy(self): return Color(*list(self)) def complement(self): r, g, b = self.Red(), self.Green(), self.Blue() baseval = max(r, max(g, b)) + min(r, min(g, b)) self.Set(baseval - self.Red(), baseval - self.Green(), baseval - self.Blue()) return self def complemented(self): return self.copy().complement() @property def intensity(self): return (self.Red() + self.Blue() + self.Green()) // 3 class HSVColor(BaseColor): """ Based on formulas from http://en.wikipedia.org/wiki/HSL_color_space. """ #def __init__(self): # #BaseColor. # pass def __init__(self): self.h = 0.0 self.s = 0.0 self.v = 0.0 @staticmethod def from_rgb(r, g, b): r = r / 255 g = g / 255 b = b / 255 c = HSVColor() ma = max(r, max(g, b)) mi = min(r, min(g, b)) if ma == mi: c.h = 0 elif ma == r: c.h = (60 * (g - b)/(ma - mi)) % 360 elif ma == g: c.h = (60 * (b - r)/(ma - mi)) + 120 else: c.h = (60 * (r - g)/(ma - mi)) + 240 if ma == 0: c.s = 0 else: c.s = 1 - mi/ma c.v = ma return c #def ints(self): def darken(self, amount=0.05): self.v = max(0.0, self.v - amount) return self def lighten(self, amount=0.05): self.v = min(1.0, self.v + amount) return self def to_rgb(self): hi = (self.h // 60) % 6 f = self.h / 60 - self.h // 60 p = int(255 * self.v * (1 - self.s)) q = int(255 * self.v * (1 - f * self.s)) t = int(255 * self.v * (1 - (1 - f) * self.s)) v = int(255 * self.v) if hi == 0: return Color(v, t, p) elif hi == 1: return Color(q, v, p) elif hi == 2: return Color(p, v, q) elif hi == 3: return Color(p, q, v) elif hi == 4: return Color(t, p, v) elif hi == 5: return Color(v, p, q) raise RuntimeError("Invalid 'hi'-value in to_rgb") def __getitem__(self, index): if index == 0: return int(round(self.h)) if index == 1: return int(round(self.s * 100)) if index == 2: return int(round(self.v * 100)) raise IndexError("Invalid color component") def set_components(self, h, s, v): self.h = h self.s = s self.v = v class HSLColor(BaseColor): """ Based on formulas from http://en.wikipedia.org/wiki/HSL_color_space. """ #def __init__(self): # #BaseColor. # pass def __init__(self): self.h = 0.0 self.s = 0.0 self.l = 0.0 @staticmethod def from_rgb(r, g, b): r = r / 255 g = g / 255 b = b / 255 c = HSLColor() ma = max(r, max(g, b)) mi = min(r, min(g, b)) if ma == mi: c.h = 0 elif ma == r: c.h = (60 * (g - b) / (ma - mi)) % 360 elif ma == g: c.h = (60 * (b - r) / (ma - mi)) + 120 else: c.h = (60 * (r - g) / (ma - mi)) + 240 c.l = (ma + mi)/2 if ma == mi: c.s = 0 elif c.l <= 0.5: c.s = (ma - mi) / (2 * c.l) else: # c.l > 0.5 c.s = (ma - mi) / (2 - 2 * c.l) return c def darken(self, amount=0.05): self.l = max(0.0, self.l - amount) return self def lighten(self, amount=0.05): self.l = min(1.0, self.l + amount) return self def to_rgb(self): if self.l < 0.5: q = self.l * (1 + self.s) else: # c.l >= 0.5 q = self.l + self.s - (self.l * self.s) p = 2 * self.l - q hk = self.h / 360 # t = [tr, tg, tb] t = [hk + 1/3, hk, hk - 1/3] for i in range(3): if t[i] < 0.0: t[i] += 1.0 elif t[1] > 1.0: t[i] -= 1.0 for i in range(3): if t[i] < 1/6: t[i] = int(round(255 * (p + ((q - p) * 6 * t[i])))) elif 1/6 <= t[i] < 1/2: t[i] = int(round(255 * q)) elif 1/2 <= t[i] < 2/3: t[i] = int(round(255 * (p + ((q - p) * 6 * (2/3 - t[i]))))) else: t[i] = int(round(255 * p)) return Color(t) def __getitem__(self, index): if index == 0: return int(round(self.h)) if index == 1: return int(round(self.s * 100)) if index == 2: return int(round(self.l * 100)) raise IndexError("Invalid color component") def set_components(self, h, s, l): self.h = h self.s = s self.l = l fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/fsui/wx/System.py0000644000175000017500000000046212162366654024244 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import sys class System: macosx = (sys.platform == "darwin") windows = sys.platform.startswith("win") linux = sys.platform.startswith("linux") fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/fsui/wx/textfield.py0000644000175000017500000000232412162366654024747 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import wx from .common import update_class class TextField(wx.TextCtrl): def __init__(self, parent, text="", read_only=False): style = wx.TE_PROCESS_ENTER if read_only: style = style | wx.TE_READONLY wx.TextCtrl.__init__(self, parent.get_container(), -1, text, wx.DefaultPosition, wx.DefaultSize, style) self.Bind(wx.EVT_KEY_DOWN, self.__key_down_event) self.Bind(wx.EVT_TEXT, self.__text_event) def set_position(self, position): self.SetPosition(position) def set_size(self, size): self.SetSize(size) def focus(self): self.SetFocus() def on_activate(self): pass def on_change(self): pass def get_text(self): return self.GetValue() def set_text(self, text): self.SetValue(text) def __key_down_event(self, event): if event.GetKeyCode() == wx.WXK_RETURN: self.on_activate() else: event.Skip() def __text_event(self, event): self.on_change() update_class(TextField) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/fsui/wx/__init__.py0000644000175000017500000000177112162366654024523 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import sys if not hasattr(sys, "frozen"): try: import wxversion except ImportError: pass else: try: wxversion.select(["2.8"]) except wxversion.VersionError, e: # if a new interpreter is started with sys.executable on # Mac, sys.frozen may not be set, so we allow/ignore # this error print(repr(e)) import wx def call_after(function): import wx wx.CallAfter(function) def call_later(ms, function): import wx wx.CallLater(ms, function) def show_error(message): import wx wx.MessageBox(message, "Error", wx.ICON_ERROR) def get_screen_size(): import wx return wx.GetDisplaySize() def get_background_color(): import wx c = wx.SystemSettings_GetColour(wx.SYS_COLOUR_BTNFACE) from .Color import Color return Color(c) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/fsui/wx/button.py0000644000175000017500000000145612162366654024277 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import wx from .common import update_class from .System import System class Button(wx.Button): def __init__(self, parent, title=""): if System.macosx: # spaces at the end seems to affect the left padding # and Mac OS also title = title + u" " else: title = u" " + title + u" " wx.Button.__init__(self, parent.get_container(), -1, title) self.Bind(wx.EVT_BUTTON, self.__button_event) if not System.macosx: self.min_height = 26 def on_activate(self): pass def __button_event(self, event): self.on_activate() update_class(Button) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/fsui/wx/DirDialog.py0000644000175000017500000000125112162366654024613 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import wx class DirDialog(): def __init__(self, parent, message="", directory=""): style = wx.DD_DEFAULT_STYLE #if multiple: # style |= wx.FD_MULTIPLE self._window = wx.DirDialog(parent, message, directory, style) self._window.CenterOnParent() def get_path(self): return self._window.GetPath() def show_modal(self): if self._window.ShowModal() == wx.ID_OK: return True return False def destroy(self): self._window.Destroy() fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/fsui/wx/panel.py0000644000175000017500000000617212162366654024063 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import wx from .common import update_class class Panel(wx.Panel): def __init__(self, parent, paintable=False): # create it outside the visible area to avoid flickering on Windows # when the controls are displayed before they are moved to the # correct place wx.Panel.__init__(self, parent.get_container(), -1, (0, 2000), (0, 0), wx.FULL_REPAINT_ON_RESIZE) #p = parent.get_real_parent() #self._window = wx.Panel(p._container, -1) #self._container = self._window #self._window.Bind(wx.EVT_WINDOW_DESTROY, self.__destroy_event) self.Bind(wx.EVT_PAINT, self.__paint_event) self.Bind(wx.EVT_ERASE_BACKGROUND, self.__erase_background_event) self.Bind(wx.EVT_LEFT_DOWN, self.__left_down_event) self.Bind(wx.EVT_LEFT_DCLICK, self.__left_dclick_event) self.Bind(wx.EVT_LEFT_UP, self.__left_up_event) self.Bind(wx.EVT_WINDOW_DESTROY, self.__destroy_event) self.Bind(wx.EVT_ENTER_WINDOW, self.__enter_window_event) self.Bind(wx.EVT_LEAVE_WINDOW, self.__leave_window_event) self.position = (0, 2000) self._paintable = paintable self._paint_dc = None @property def size(self): return self.GetSizeTuple() def get_window(self): return self.GetParent().get_window() def get_container(self): return self def on_resize(self): print("Panel.on_resize") if self.layout: self.layout.set_size(self.get_size()) self.layout.update() def on_destroy(self): pass def __destroy_event(self, event): self.on_destroy() def on_left_down(self): pass def __left_down_event(self, event): #self.CaptureMouse() self.on_left_down() def on_left_dclick(self): pass def __left_dclick_event(self, event): if self.on_left_dclick(): return self.on_left_down() def on_left_up(self): pass def __left_up_event(self, event): #if self.HasCapture(): # self.ReleaseMouse() self.on_left_up() def create_dc(self): from .dc import DrawingContext return DrawingContext(self._paint_dc) def on_paint(self): pass def __paint_event(self, event): if not self._paintable: #dc = wx.PaintDC(self) event.Skip() return self._paint_dc = wx.PaintDC(self) try: self.on_paint() finally: self._paint_dc = None def on_erase(self): return False def __erase_background_event(self, event): if not self._paintable: event.Skip() if self.on_erase(): event.Skip() def on_mouse_enter(self): pass def __enter_window_event(self, event): self.on_mouse_enter() def on_mouse_leave(self): pass def __leave_window_event(self, event): self.on_mouse_leave() update_class(Panel) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/fsui/wx/choice.py0000644000175000017500000000205512162366654024212 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import wx from .common import update_class class Choice(wx.Choice): def __init__(self, parent, items=[]): wx.Choice.__init__(self, parent.get_container(), -1, wx.DefaultPosition, wx.DefaultSize, items) if len(items) > 0: self.SetSelection(0) self.Bind(wx.EVT_CHOICE, self.__choice_event) #self.min_height = 26 #def get_min_width(self): # return self.GetBestSize()[0] #def get_min_height(self): # return self.GetBestSize()[1] def set_position(self, position): self.SetPosition(position) def set_size(self, size): self.SetSize(size) def get_index(self): return self.GetSelection() def set_index(self, index): self.SetSelection(index) def on_change(self): print("Choice.on_change") def __choice_event(self, event): self.on_change() update_class(Choice) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/fsui/wx/imageview.py0000644000175000017500000000141512162366654024734 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import wx from .common import update_class class ImageView(wx.StaticBitmap): def __init__(self, parent, image=None): if image is not None: bitmap = image.bitmap else: bitmap = wx.NullBitmap wx.StaticBitmap.__init__(self, parent.get_container(), -1, bitmap) def set_image(self, image): if image is None: #self.SetBitmap(wx.NullBitmap) #print("self.SetBitmap(wx.NullBitmap)") self.SetBitmap(wx.BitmapFromBufferRGBA(1, 1, "\0\0\0\0")) else: self.SetBitmap(image.bitmap) update_class(ImageView) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/fsui/wx/SpinCtrl.py0000644000175000017500000000140412162366654024513 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import wx from .common import update_class class SpinCtrl(wx.SpinCtrl): def __init__(self, parent, min_value, max_value, initial_value): wx.SpinCtrl.__init__(self, parent.get_container(), -1, "", wx.DefaultPosition, wx.DefaultSize, wx.SP_ARROW_KEYS, min_value, max_value, initial_value) self.Bind(wx.EVT_SPINCTRL, self.__spin_event) def on_change(self): pass def get_value(self): self.GetValue() def set_value(self, value): self.SetValue(value) def __spin_event(self, event): self.on_change() update_class(SpinCtrl) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/fsui/wx/textarea.py0000644000175000017500000000326312162366654024577 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import wx from .common import update_class from .System import System class TextArea(wx.TextCtrl): def __init__(self, parent, text="", read_only=False, horizontal_scroll=False, font_family=""): style = wx.TE_MULTILINE | wx.TE_RICH if read_only: style = style | wx.TE_READONLY if horizontal_scroll: style = style | wx.HSCROLL wx.TextCtrl.__init__(self, parent.get_container(), -1, text, wx.DefaultPosition, wx.DefaultSize, style) if font_family == "monospace": font = self.GetFont() if System.linux: font.SetFaceName("Monospace") font.SetPointSize(font.GetPointSize() - 1) else: font.SetFaceName("Courier") #font.SetFamily(wx.FONTFAMILY_MODERN) self.SetFont(font) #self.SetScrollPos(wx.VERTICAL, 0, True) self.ShowPosition(0) def get_text(self): return self.GetValue() def set_text(self, text): self.SetValue(text) def append_text(self, text, color=None): if color is not None: self.SetDefaultStyle(wx.TextAttr(wx.Color(*color))) else: self.SetDefaultStyle(wx.TextAttr()) self.AppendText(text) if System.windows: # hack to work around a problem on Windows where the # content scroll one page when adding a single line # when the window would need to scroll a line. self.ScrollLines(-1) update_class(TextArea) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/fsui/wx/CheckBox.py0000644000175000017500000000127012162366654024444 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import wx from .common import update_class class CheckBox(wx.CheckBox): def __init__(self, parent, text=""): wx.CheckBox.__init__(self, parent.get_container(), -1, text, wx.DefaultPosition, wx.DefaultSize) self.Bind(wx.EVT_CHECKBOX, self.__checkbox_event) def on_change(self): pass def is_checked(self): return self.GetValue() def check(self, checked=True): self.SetValue(checked) def __checkbox_event(self, event): self.on_change() update_class(CheckBox) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/fsui/wx/filedialog.py0000644000175000017500000000242312162366654025056 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import wx class FileDialog(): def __init__(self, parent, message="", directory="", file="", pattern="*.*", multiple=False, dir_mode=False): #if parent: # p = parent.get_real_parent() # parent = p._container if dir_mode: style = wx.DD_DEFAULT_STYLE #if multiple: # style |= wx.FD_MULTIPLE self._window = wx.DirDialog(parent, message, directory, style) self._window.CenterOnParent() else: style = wx.FD_DEFAULT_STYLE if multiple: style |= wx.FD_MULTIPLE self._window = wx.FileDialog(parent, message, directory, file, pattern, style) self._window.CenterOnParent() def get_path(self): return self._window.GetPath() def get_paths(self): return self._window.GetPaths() def show_modal(self): if self._window.ShowModal() == wx.ID_OK: return True return False def destroy(self): self._window.Destroy() # FIXME: remove def show(self): return self.show_modal() fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/fsui/wx/common.py0000644000175000017500000000602212162366654024246 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals #import sys #macosx = (sys.platform == "darwin") def get_parent(self): return self.GetParent() def enable(self, enable=True): self.Enable(enable) def disable(self): self.Enable(False) def show(self, show=True): self.Show(show) def hide(self): self.Show(False) def is_visible(self): return self.IsShown() def set_position_and_size(self, position, size): self.SetDimensions(position[0], position[1], size[0], size[1]) #self.SetPosition(position) #self.SetSize(size) #self.set_position(position) #self.set_size(size) if hasattr(self, "layout"): #self.layout.set_position_and_size((0, 0)) #self.layout.set_position_and_size(size) self.layout.set_size(size) def set_size(self, size): self.SetSize(size) #def get_min_width(self): # return self.GetBestSize()[0] #def get_min_height(self): # return self.GetBestSize()[1] #def set_fixed_width(self, width): # self.min_width = width # #def set_fixed_height(self, height): # self.min_height = height def set_min_width(self, width): self.min_width = width def set_min_height(self, height): self.min_height = height def get_min_width(self): width = 0 if hasattr(self, "min_width"): if self.min_width: width = max(self.min_width, width) if hasattr(self, "layout"): #return self.layout.get_min_width() width = max(self.layout.get_min_width(), width) return width return max(width, self.GetBestSize()[0]) #return self.GetBestSize()[0] def get_min_height(self): height = 0 if hasattr(self, "min_height"): if self.min_height: height = max(self.min_height, height) if hasattr(self, "layout"): height = max(self.layout.get_min_height(), height) return height return max(height, self.GetBestSize()[1]) def focus(self): self.SetFocus() def get_window(self): while self.parent: parent = self.parent return parent def refresh(self): self.Refresh() def get_background_color(self): from .Color import Color c= self.GetBackgroundColour() return Color(c.Red(), c.Blue(), c.Green()) def set_background_color(self, color): import wx self.SetBackgroundColour(wx.Colour(*color)) def set_tooltip(self, text): import wx self.SetToolTip(wx.ToolTip(text)) def popup_menu(self, menu, pos=(0, 0)): self.PopupMenu(menu._menu, pos) names = [ "disable", "enable", "focus", "get_background_color", "get_min_height", "get_min_width", "get_parent", "get_window", "hide", "is_visible", "refresh", "set_background_color", "set_min_height", "set_min_width", "set_position_and_size", "set_size", "set_tooltip", "show", "popup_menu", ] def update_class(klass): for name in names: if not hasattr(klass, name): setattr(klass, name, globals()[name]) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/fsui/wx/dc.py0000644000175000017500000001001412162366654023340 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import wx from .System import System from .Color import Color class Font(object): def __init__(self, font): self.font = font def set_bold(self, bold): if bold: self.font.SetWeight(wx.FONTWEIGHT_BOLD) else: self.font.SetWeight(wx.FONTWEIGHT_NORMAL) class DrawingContext(object): def __init__(self, dc): self.dc = dc self.gc = wx.GraphicsContext_Create(dc) if System.macosx: self.draws_last_line_point = True else: self.draws_last_line_point = False if System.windows: self.line_coordinate_offset_x = 0.0 self.line_coordinate_offset_y = 0.0 else: self.line_coordinate_offset_x = 0.5 self.line_coordinate_offset_y = 0.5 def get_font(self): return Font(self.dc.GetFont()) def set_font(self, font): return self.dc.SetFont(font.font) def draw_text(self, text, x, y): self.dc.DrawText(text, x, y) def measure_text(self, text): return self.dc.GetTextExtent(text) #def set_color(self, color): # self.dc.SetPen(wx.Pen(color)) # #self.gc.SetPen(self.gc.CreatePen(wx.Pen(color))) def get_text_color(self): return Color(self.dc.GetTextForeground()) def set_text_color(self, color): self.dc.SetTextForeground(color) def draw_line(self, x1, y1, x2, y2, c): """ if self.draws_last_line_point: if x1 == x2: # Line is vertical if y2 > y1: y2 -= 1 else: y1 += 1 elif y1 == y2: # Line is horizontal if x2 > x1: x2 -= 1 else: x1 += 1 else: # Line is neither horizontal nor vertical # This correction does not support angular lines. pass if self.line_coordinate_offset_x: x1 += self.line_coordinate_offset_x x2 += self.line_coordinate_offset_x if self.line_coordinate_offset_y: y1 += self.line_coordinate_offset_y y2 += self.line_coordinate_offset_y print(x1, y1, x2, y2) c = wx.Color(255, 0, 0, 255) #x1 += 1.0 #self.dc.DrawLine(x1, y1, x2, y2) #self.gc.DrawLine(x1, y1, x2, y2) #self.gc.SetPen(wx.NullGraphicsPen) #self.gc.SetBrush(self.gc.CreateBrush(wx.Brush(c))) #self.gc.DrawRectangle(x1, y1, x2, y2) #self.gc.SetPen(wx.NullGraphicsPen) self.gc.SetPen(self.gc.CreatePen(wx.Pen(c))) self.gc.StrokeLine(x1, y1, x2, y2) """ if x1 == x2: # Line is vertical if y1 > y2: y1, y2 = y2, y1 x2 += 1 elif y1 == y2: # Line is horizontal if x1 > x2: x1, x2 = x2, x1 y2 += 1 else: # Line is neither horizontal nor vertical # This function does not support angular lines. return self.gc.SetPen(wx.NullGraphicsPen) self.gc.SetBrush(self.gc.CreateBrush(wx.Brush(c))) self.gc.DrawRectangle(x1, y1, x2 - x1, y2 - y1) def draw_image(self, image, x, y): self.dc.DrawBitmap(image.bitmap, x, y, True) def draw_vertical_gradient(self, x, y, w, h, c1, c2): #self.dc.GradientFillLinear(wx.Rect(x, y, w, h), c1, # c2, wx.SOUTH) #self.gc.SetPen(self.gc.CreatePen(wx.Pen(color))) #print(c1, c2) brush = self.gc.CreateLinearGradientBrush(x, y, x, y + h, c1, c2) self.gc.SetPen(wx.NullGraphicsPen) self.gc.SetBrush(brush) self.gc.DrawRectangle(x, y, w, h) def draw_rectangle(self, x, y, w, h, c): brush = self.gc.CreateBrush(wx.Brush(c)) self.gc.SetPen(wx.NullGraphicsPen) self.gc.SetBrush(brush) self.gc.DrawRectangle(x, y, w, h) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/fsui/__init__.py0000644000175000017500000000226312162366654024062 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals from .common.element import Element, LightElement from .common.group import Group from .common.layout import VerticalLayout, HorizontalLayout from .common.spacer import Spacer # import functions from .wx import * # import classes from .wx.application import Application from .wx.button import Button from .wx.choice import Choice from .wx.CheckBox import CheckBox from .wx.Color import Color from .wx.control import Control from .wx.combobox import ComboBox from .wx.dialog import Dialog from .wx.DirDialog import DirDialog from .wx.filedialog import FileDialog from .wx.itemview import VerticalItemView from .wx.ImageButton import ImageButton from .wx.label import Label, BoldLabel, HeadingLabel from .wx.listview import ListView from .wx.Menu import Menu from .wx.panel import Panel from .wx.separator import Separator from .wx.SpinCtrl import SpinCtrl from .wx.textarea import TextArea from .wx.textfield import TextField from .wx.window import Window from .wx.image import Image from .wx.imageview import ImageView from .wx.System import System fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/fsui/common/0000755000175000017500000000000012162366654023236 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/fsui/common/spacer.py0000644000175000017500000000114312162366654025064 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals from .element import LightElement class Spacer(LightElement): def __init__(self, size, size2=None): LightElement.__init__(self, None) self.width = size if size2 is None: self.height = size else: self.height = size2 def get_min_size(self): return (self.width, self.height) def get_min_width(self): return self.width def get_min_height(self): return self.height fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/fsui/common/layout.py0000644000175000017500000002131612162366654025130 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals #from .element import LightElement from .spacer import Spacer DEBUG = 0 class LayoutChild: def __init__(self): self.element = None self.spacing = 0 self.expand = False self.fill = False self.valign = 0.5 self.margin_left = 0 self.margin_right = 0 self.margin_top = 0 self.margin_bottom = 0 self.size = 0 class Layout: def __init__(self, padding): #self.min_size = (0, 0) self.position = (0, 0) self.size = (0, 0) self.padding_left = padding self.padding_right = padding self.padding_top = padding self.padding_bottom = padding self._skip = 0 #self.origin = (0, 0) self.children = [] def is_visible(self): return True def set_padding(self, amount): self.padding_left = amount self.padding_right = amount self.padding_top = amount self.padding_bottom = amount def get_min_size(self): return (self.get_min_width(), self.get_min_height()) def add(self, element, spacing=0, expand=False, fill=False, valign=0.5, margin=0, margin_left=None, margin_right=None, margin_top=None, margin_bottom=None): child = LayoutChild() child.element = element child.spacing = spacing child.expand = expand child.fill = fill child.valign = valign if margin_left is not None: child.margin_left = margin_left else: child.margin_left = margin if margin_right is not None: child.margin_right = margin_right else: child.margin_right = margin if margin_top is not None: child.margin_top = margin_top else: child.margin_top = margin if margin_bottom is not None: child.margin_bottom = margin_bottom else: child.margin_bottom = margin self.children.append(child) def remove(self, element): for i, child in enumerate(self.children): if child.element == element: del self.children[i] return def add_spacer(self, size, size2=None, expand=False): self.add(Spacer(size, size2), expand=expand) def get_position(self): return self.position def set_position(self, position): self.position = position #self.origin = position # FIXME: avoid calling update after both set_position and set_size self.update() def set_size(self, size): if DEBUG: print("Layout.set_size", size) self.size = size self.update() def set_position_and_size(self, position, size): self.position = position self.size = size self.update() def update(self): pass class LinearLayout(Layout): def __init__(self, vertical, padding=0): Layout.__init__(self, padding) self.vertical = vertical def update(self): available = self.size[self.vertical] if self.vertical: available = available - self.padding_top - self.padding_bottom else: available = available - self.padding_left - self.padding_right if DEBUG: print("update, available =", available) expanding = 0 last_margin = 0 for child in self.children: if not child.element.is_visible(): continue child.min_size = [child.element.get_min_width(), child.element.get_min_height()] if child.expand < 0: child.size = 0 else: child.size = child.min_size[self.vertical] available -= child.size expanding += abs(child.expand) if self.vertical: child._skip = max(last_margin, child.margin_top) available-= child._skip last_margin = child.margin_bottom #available = available - child.margin_top - child.margin_bottom #available = available - last_margin + max() #last_margin = child.margin_bottom else: child._skip = max(last_margin, child.margin_left) available-= child._skip last_margin = child.margin_right available -= last_margin if DEBUG: print("available", available, "expanding", expanding) if available > 0 and expanding > 0: if DEBUG: print("distributing extra pixels:", available) available2 = available for child in self.children: extra = int(available2 * (abs(child.expand) / expanding)) if DEBUG: print(child.expand, expanding, extra) child.size += extra available -= extra # some more pixels could be available due to rounding if available > 0: #print("distributing extra pixels:", available) for child in self.children: if abs(child.expand): child.size += 1 available -= 1 if available == 0: break x = self.padding_left y = self.padding_top #self_height = self.size[1] - self.padding_top - self.padding_bottom fill_size = (self.size[0] - self.padding_left - self.padding_right, self.size[1] - self.padding_top - self.padding_bottom) for child in self.children: if not child.element.is_visible(): continue size = [child.min_size[0], child.min_size[1]] size[self.vertical] = child.size if child.fill: size[not self.vertical] = fill_size[not self.vertical] if self.vertical: size[0] -= child.margin_left + child.margin_right else: size[1] -= child.margin_top + child.margin_bottom if DEBUG: print(child.element, size) self_pos = self.get_position() position = [self_pos[0] + x, self_pos[1] + y] position[self.vertical] += child._skip if self.vertical: position[0] += child.margin_left else: position[1] += child.margin_top if not child.fill: # center child if self.vertical: #position[0] += (self.size[0] - size[0]) // 2 pass else: position[1] += (fill_size[1] \ - child.margin_top - child.margin_bottom \ - size[1]) * child.valign child.element.set_position_and_size(position, size) if self.vertical: y += size[1] + child._skip else: x += size[0] + child._skip class HorizontalLayout(LinearLayout): def __init__(self, padding=0): LinearLayout.__init__(self, False, padding=padding) def get_min_width(self): min_width = 0 last_margin = 0 for child in self.children: min_width += child.element.get_min_width() min_width += max(last_margin, child.margin_left) last_margin = child.margin_right min_width += last_margin return min_width + self.padding_left + self.padding_right def get_min_height(self): min_height = 0 for child in self.children: h = child.element.get_min_height() h += child.margin_top + child.margin_bottom if h > min_height: min_height = h return min_height + self.padding_top + self.padding_bottom class VerticalLayout(LinearLayout): def __init__(self, padding=0): LinearLayout.__init__(self, True, padding=padding) def get_min_width(self): min_width = 0 for child in self.children: w = child.element.get_min_width() w += child.margin_left + child.margin_right if w > min_width: min_width = w return min_width + self.padding_left + self.padding_right def get_min_height(self): min_height = 0 last_margin = 0 for child in self.children: min_height += child.element.get_min_height() min_height += max(last_margin, child.margin_top) last_margin = child.margin_bottom min_height += last_margin return min_height + self.padding_top + self.padding_bottom fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/fsui/common/group.py0000644000175000017500000000232512162366654024746 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals class Group: def __init__(self, parent): self.parent = parent self.position = (0, 0) # FIXME: should instead be closest "real" parent (panel, whatever) self.get_window().add_destroy_listener(self.__on_destroy) def __on_destroy(self): self.on_destroy() def is_visible(self): return True def on_destroy(self): pass def get_window(self): return self.parent.get_window() def get_container(self): return self.parent.get_container() def get_min_width(self): return self.layout.get_min_width() def get_min_height(self): return self.layout.get_min_height() def set_position(self, position): self.position = position if self.layout: self.layout.set_position(position) def set_size(self, size): if self.layout: self.layout.set_size(size) def set_position_and_size(self, position, size): self.position = position if self.layout: self.layout.set_position_and_size(position, size) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/fsui/common/__init__.py0000644000175000017500000000000012162366654025335 0ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/fsui/common/element.py0000644000175000017500000000335112162366654025243 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals #def xx_on_resize(self): # if self.layout: # self.layout.set_size(self.get_size()) # self.layout.update() class Element: def __init__(self, parent, delay_create=False): self.parent = parent self.layout = None self.position = (0, 0) self.size = (0, 0) #if not delay_create: # self.on_create() #@classmethod #def init(cls, obj): # obj.on_resize = xx_on_resize def is_visible(self): return True def create(self): self.on_create() return self def get_position_base(self): base = self.get_position_base() pos = self.get_position() return (base[0] + pos[0], base[1] + pos[1]) def on_create(self): pass def get_real_parent(self): return self def get_size(self): return self.size def get_min_size(self): return (0, 0) def get_position(self): return self.position def set_position(self, position): self.position = position def set_position_and_size(self, position, size): self.set_position(position) self.set_size(size) def set_size(self, size): self.size = size if self.layout: self.layout.set_size(size) self.on_resize() def on_resize(self): if self.layout: self.layout.set_size(self.get_size()) self.layout.update() class LightElement(Element): def __init__(self, parent): Element.__init__(self, parent) def get_real_parent(self): return self.parent.get_real_parent() fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/FSUAELauncher.py0000644000175000017500000002470112162366654023703 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import os import sys import shutil import hashlib import ConfigParser import fs_uae_launcher.fsui as fsui from .ui.MainWindow import MainWindow import fs_uae_launcher.fs as fs from .Amiga import Amiga from .Config import Config from .ConfigurationScanner import ConfigurationScanner from .Database import Database from .I18N import initialize_locale from .Paths import Paths from .ROMManager import ROMManager from .Settings import Settings from .UpdateManager import UpdateManager from .fsgs.GameDatabase import GameDatabase from .OverlayDatabase import OverlayDatabase class FSUAELauncher(fsui.Application): def get_game_database_path(self): launcher_dir = Settings.get_launcher_dir() path = os.path.join(launcher_dir, "Game Database.sqlite") return path def get_overlay_database_path(self): launcher_dir = Settings.get_launcher_dir() path = os.path.join(launcher_dir, "Overlay Database.sqlite") return path def on_create(self): print("FSUAELauncherApplication.on_create") #from .fsgs.GameDatabase import GameDatabase #GameDatabase.set_database_path(self.get_game_database_path()) #from .OverlayDatabase import OverlayDatabase #OverlayDatabase.set_database_path(self.get_overlay_database_path()) #database = GameDatabase.get_instance() #from .fsgs.GameDatabaseClient import GameDatabaseClient #client = GameDatabaseClient(database) #from .fsgs.GameDatabaseSynchronizer import GameDatabaseSynchronizer #synchronizer = GameDatabaseSynchronizer(client) #synchronizer.synchronize() GameDatabase.set_database_path(self.get_game_database_path()) OverlayDatabase.set_database_path(self.get_overlay_database_path()) self.parse_arguments() self.load_settings() language = Settings.get("language") initialize_locale(language) self.config_startup_scan() self.kickstart_startup_scan() database = Database.get_instance() ROMManager.patch_standard_roms(database) #sys.exit(1) # FIXME: should now sanitize check some options -for instance, # - check if configured joysticks are still connected # - check if paths still exists, etc #Config.update_kickstart() icon = None def check_icon(path): path = os.path.join(path, "fs-uae-launcher.ico") if os.path.exists(path): return path return None if not icon: icon = check_icon("share/fs-uae-launcher") if not icon: icon = check_icon("launcher/share/fs-uae-launcher") # FIXME: should check data directories (XDG_DATA_DIRS) properly # instead if not icon: icon = check_icon(os.path.expanduser( "~/.local/share/fs-uae-launcher")) if not icon: icon = check_icon("/usr/local/share/fs-uae-launcher") if not icon: icon = check_icon("/usr/share/fs-uae-launcher") if fs.macosx: # Icons come from the app bundles icon = None window = MainWindow(icon=icon) MainWindow.instance = window window.show() UpdateManager.run_update_check() def get_settings_file(self): return os.path.join(fs.get_app_data_dir(), "launcher.settings") def load_settings(self): path = self.get_settings_file() print("loading settings from " + repr(path)) if not os.path.exists(path): print("settings file does not exist") cp = ConfigParser.ConfigParser() try: cp.read([path]) except Exception, e: print(repr(e)) return config = {} try: keys = cp.options("config") except ConfigParser.NoSectionError: keys = [] for key in keys: config[key] = cp.get("config", key).decode("UTF-8") for key, value in config.iteritems(): print("loaded", key, value) Config.config[key] = value settings = {} try: keys = cp.options("settings") except ConfigParser.NoSectionError: keys = [] for key in keys: settings[key] = cp.get("settings", key).decode("UTF-8") for key, value in settings.iteritems(): #if key in Settings.settings: # # this setting is already initialized, possibly via # # command line arguments # pass #else: print("-- setting", key, value) Settings.settings[key] = value #Settings.set("config_search", "") def parse_arguments(self): pass #for arg in sys.argv: # if arg.startswith("--"): # if "=" in arg: # key, value = arg[2:].split("=", 1) # key = key.replace("-", "_") # if key == "base_dir": # Settings.set("base_dir", value) def save_settings(self): path = self.get_settings_file() path = path + u".part" print("writing " + repr(path)) cp = ConfigParser.ConfigParser() cp.add_section("settings") for key, value in Settings.settings.iteritems(): #lines.append(u"{0} = {1}".format(key, value)) cp.set("settings", str(key), value.encode("UTF-8")) cp.add_section("config") #lines.append(u"[config]") for key, value in Config.config.iteritems(): if key.startswith("__"): # keys starting with __ are never saved continue cp.set("config", str(key), value.encode("UTF-8")) with open(path, "wb") as f: cp.write(f) print("moving to " + repr(self.get_settings_file())) shutil.move(path, self.get_settings_file()) def get_dir_mtime_str(self, path): try: return str(int(os.path.getmtime(path))) except Exception: return "0" def config_startup_scan(self): print("config_startup_scan") configs_dir = Settings.get_configurations_dir() if Settings.get("configurations_dir_mtime") == \ self.get_dir_mtime_str(configs_dir): print("... mtime not changed") return database = Database.get_instance() print("... database.find_local_configurations") local_configs = database.find_local_configurations() print("... walk configs_dir") for dir_path, dir_names, file_names in os.walk(configs_dir): for file_name in file_names: if not file_name.endswith(".fs-uae"): continue path = Paths.join(dir_path, file_name) if path in local_configs: local_configs[path] = None # already exists in database continue name, ext = os.path.splitext(file_name) search = ConfigurationScanner.create_configuration_search(name) name = ConfigurationScanner.create_configuration_name(name) print("[startup] adding config", path) database.delete_file(path=path) database.add_file(path=path) database.add_configuration(path=path, uuid="", name=name, scan=0, search=search) for path, id in local_configs.iteritems(): if id is not None: print("[startup] removing configuration", path) database.delete_configuration(id=id) database.delete_file(path=path) print("... commit") database.commit() Settings.set("configurations_dir_mtime", self.get_dir_mtime_str(configs_dir)) def kickstart_startup_scan(self): print("kickstart_startup_scan") kickstarts_dir = Settings.get_kickstarts_dir() if Settings.get("kickstarts_dir_mtime") == \ self.get_dir_mtime_str(kickstarts_dir): print("... mtime not changed") return database = Database.get_instance() print("... database.find_local_roms") local_roms = database.find_local_roms() print("... walk kickstarts_dir") for dir_path, dir_names, file_names in os.walk(kickstarts_dir): for file_name in file_names: if not file_name.endswith(".rom"): continue path = Paths.join(dir_path, file_name) if path in local_roms: local_roms[path] = None # already exists in database continue print("[startup] adding kickstart", path) ROMManager.add_rom_to_database(path, database) print(local_roms) for path, id in local_roms.iteritems(): if id is not None: print("[startup] removing kickstart", path) database.delete_file(id=id) print("... commit") database.commit() Settings.set("kickstarts_dir_mtime", self.get_dir_mtime_str(kickstarts_dir)) database = Database.get_instance() amiga = Amiga.get_model_config("A500") for sha1 in amiga["kickstarts"]: if database.find_file(sha1=sha1): break else: self.amiga_forever_kickstart_scan(database) def amiga_forever_kickstart_scan(self, database): if fs.windows: from win32com.shell import shell, shellcon path = shell.SHGetFolderPath(0, shellcon.CSIDL_COMMON_DOCUMENTS, 0, 0) path = os.path.join(path, "Amiga Files", "Shared", "rom") self.scan_dir_for_kickstarts(database, path) def scan_dir_for_kickstarts(self, database, scan_dir): for dir_path, dir_names, file_names in os.walk(scan_dir): for file_name in file_names: if not file_name.endswith(".rom"): continue path = Paths.join(dir_path, file_name) if database.find_file(path): #if path in local_roms: # local_roms[path] = None # # already exists in database continue print("[startup] adding kickstart", path) ROMManager.add_rom_to_database(path, database) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/Settings.py0000644000175000017500000002762512162366654023166 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import os import fs_uae_launcher.fs as fs from .Signal import Signal from .Util import memoize, get_real_case from .I18N import _, ngettext class Settings: irc_server = "irc.fengestad.no" #nick = "FrodeSolheim" #nick. #lobby_nick_number = 0 base_dir = "" default_settings = { "__netplay_ready": "", "automatic_input_grab": "", "builtin_configs": "", "config_base": "", "config_changed": "0", "config_name": "Unnamed Configuration", "config_path": "", "config_refresh": "", "config_search": "", "config_xml_path": "", "configurations_dir_mtime": "", "database_feature": "", "database_password": "", "database_username": "", "fsaa": "", "floppy_drive_volume": "", "fullscreen": "", "fullscreen_mode": "fullscreen", "game_uuid": "", "initial_input_grab": "", "irc_nick": "", "irc_server": "", "keep_aspect": "", "kickstarts_dir_mtime": "", "kickstart_setup": "", "last_cd_dir": "", "last_floppy_dir": "", "last_hd_dir": "", "last_rom_dir": "", "last_scan": "", "low_latency_vsync": "", "maximized": "0", "middle_click_ungrab": "", "mouse_speed": "", "netplay_feature": "", "netplay_tag": "", "parent_uuid": "", "primary_joystick": "", "rtg_scanlines": "", "scan_configs": "1", "scan_files": "1", "scan_roms": "1", "scanlines": "", "search_path": "", "secondary_joystick": "", "swap_ctrl_keys": "", "texture_filter": "", "texture_format": "", "ui_background_color": "", "video_format": "", "video_sync": "", "video_sync_method": "", "zoom": "", #"window_width": "", #"window_height": "", } settings = default_settings.copy() #settings_listeners = [] initialize_from_config = set([ "fullscreen", ]) @classmethod def get(cls, key): #return cls.settings.setdefault(key, "") return cls.settings.get(key, "") @classmethod def add_listener(cls, listener): #cls.settings_listeners.append(listener) Signal.add_listener("setting", listener) @classmethod def remove_listener(cls, listener): #cls.settings_listeners.remove(listener) Signal.remove_listener("setting", listener) @classmethod def set(cls, key, value): if cls.get(key) == value: print(u"set {0} to {1} (no change)".format(key, value)) return print(u"set {0} to {1}".format(key, value)) cls.settings[key] = value #for listener in cls.settings_listeners: # listener.on_setting(key, value) Signal.broadcast("setting", key, value) @classmethod def get_irc_nick(cls): value = cls.settings.get("irc_nick", "").strip() if not value: value = fs.get_user_name() # these are probably valid too: \` valid_chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" \ "abcdefghijklmnopqrstuvwxyz" \ "_[]{}|^" extra_valid_chars = "0123456789-" nick = "" for c in value: if c in valid_chars: nick = nick + c if extra_valid_chars: valid_chars += extra_valid_chars extra_valid_chars = "" if not nick: nick = "User" return nick @classmethod def get_irc_nickserv_pass(cls): value = cls.settings.get("irc_nickserv_pass", "").strip() if value: return value return "" @classmethod def get_irc_server(cls): value = cls.settings.get("irc_server", "").strip() if value: return value return "irc.fengestad.no" @classmethod def read_custom_path(cls, name): for app in ["fs-uae-launcher", "fs-uae"]: key_path = os.path.join(fs.get_app_config_dir(app), name) print("- checking", key_path) if os.path.exists(key_path): try: with open(key_path, "rb") as f: path = f.read().strip() break except Exception, e: print("error reading custom path", repr(e)) else: return None lpath = path.lower() if lpath.startswith("$home/") or lpath.startswith("$home\\"): path = os.path.join(fs.get_home_dir(), path[6:]) return path @classmethod @memoize def get_base_dir(cls): path = cls.base_dir if not path: path = cls.read_custom_path("base-dir") if not path: path = os.path.join(fs.get_documents_dir(True), "FS-UAE") if not os.path.exists(path): os.makedirs(path) path = get_real_case(path) print("base dir is", path) return path @classmethod def get_default_search_path(cls): paths = [] path = cls.get_base_dir() if fs.windows: path = path.replace("/", "\\") paths.append(path) if fs.windows: from win32com.shell import shell, shellcon path = shell.SHGetFolderPath(0, shellcon.CSIDL_COMMON_DOCUMENTS, 0, 0) path = fs.unicode_path(path) path = os.path.join(path, "Amiga Files") if os.path.exists(path): print("\n\n\n", path, "exists!!\n\n\n") paths.append(path) return paths @classmethod def get_whdload_dir(cls): #path = os.path.join(fs.get_home_dir(), "Games", "Amiga", "WHDLoad") #if os.path.exists(path): # return path path = os.path.join(cls.get_hard_drives_dir(), "WHDLoad") if os.path.exists(path): path = get_real_case(path) return path return None @classmethod def get_configurations_dir(cls): path = os.path.join(cls.get_base_dir(), "Configurations") if not os.path.exists(path): os.makedirs(path) path = get_real_case(path) return path @classmethod def get_controllers_dir(cls): path = os.path.join(cls.get_base_dir(), "Controllers") path = get_real_case(path) return path @classmethod def get_kickstarts_dir(cls): path = os.path.join(cls.get_base_dir(), "Kickstarts") if not os.path.exists(path): os.makedirs(path) path = get_real_case(path) return path @classmethod def get_floppies_dir(cls): path = os.path.join(cls.get_base_dir(), "Floppies") if not os.path.exists(path): os.makedirs(path) path = get_real_case(path) return path @classmethod def get_hard_drives_dir(cls): path = os.path.join(cls.get_base_dir(), "Hard Drives") if not os.path.exists(path): os.makedirs(path) path = get_real_case(path) return path @classmethod def get_cdroms_dir(cls): path = os.path.join(cls.get_base_dir(), "CD-ROMs") if not os.path.exists(path): os.makedirs(path) path = get_real_case(path) return path @classmethod def get_logs_dir(cls): path = os.path.join(cls.get_base_dir(), "Logs") if not os.path.exists(path): os.makedirs(path) path = get_real_case(path) return path @classmethod def get_launcher_dir(cls): path = os.path.join(cls.get_base_dir(), "Launcher") if not os.path.exists(path): os.makedirs(path) path = get_real_case(path) return path @classmethod def get_titles_dir(cls): path = os.path.join(cls.get_base_dir(), "Titles") return path @classmethod def get_save_states_dir(cls): path = os.path.join(cls.get_base_dir(), "Save States") if not os.path.exists(path): os.makedirs(path) path = get_real_case(path) return path @classmethod def get_screenshots_dir(cls): path = os.path.join(cls.get_base_dir(), "Screenshots") return path @classmethod def get_images_dir(cls): path = cls.get_base_dir() return path @classmethod def get_covers_dir(cls): path = os.path.join(cls.get_base_dir(), "Covers") return path @classmethod def get_themes_dir(cls): path = os.path.join(cls.get_base_dir(), "Themes") if not os.path.exists(path): os.makedirs(path) return path @classmethod def get_cache_dir(cls): path = os.path.join(cls.get_base_dir(), "Cache") if not os.path.exists(path): os.makedirs(path) return path #@classmethod #def get_config_dirs(cls): # paths = [cls.get_floppies_dir(), cls.get_cdroms_dir(), # os.path.expanduser("~/Games/Amiga/Files"), # os.path.expanduser("~/Games/CD32/Files"), # os.path.expanduser("~/Games/CDTV/Files")] # return paths @classmethod def get_files_dirs(cls): paths = [cls.get_floppies_dir(), cls.get_cdroms_dir(), os.path.expanduser("~/Games/Amiga/Files/"), os.path.expanduser("~/Games/CD32/Files"), os.path.expanduser("~/Games/CDTV/Files") ] return paths @classmethod def get_titles_dirs(cls): paths = [cls.get_titles_dir(), os.path.join(fs.get_home_dir(), "Games", "Amiga", "Titles"), os.path.join(fs.get_home_dir(), "Games", "CD32", "Titles"), os.path.join(fs.get_home_dir(), "Games", "CDTV", "Titles"), ] return paths @classmethod def get_screenshots_dirs(cls): paths = [cls.get_screenshots_dir(), os.path.join(fs.get_home_dir(), "Games", "Amiga", "Screenshots"), os.path.join(fs.get_home_dir(), "Games", "CD32", "Screenshots"), os.path.join(fs.get_home_dir(), "Games", "CDTV", "Screenshots"), ] return paths @classmethod def get_images_dirs(cls): paths = [cls.get_images_dir(), os.path.join(fs.get_home_dir(), "Games"), #os.path.join(fs.get_home_dir(), "Games", # "Amiga", "Images"), #os.path.join(fs.get_home_dir(), "Games", # "CD32", "Images"), #os.path.join(fs.get_home_dir(), "Games", # "CDTV", "Images"), ] return paths @classmethod def get_covers_dirs(cls): paths = [cls.get_covers_dir(), os.path.join(fs.get_home_dir(), "Games", "Amiga", "Covers"), os.path.join(fs.get_home_dir(), "Games", "CD32", "Covers"), os.path.join(fs.get_home_dir(), "Games", "CDTV", "Covers"), ] return paths @classmethod def get_themes_dirs(cls): paths = [cls.get_themes_dir()] return paths @classmethod def get_configurations_dirs(cls): paths = [cls.get_configurations_dir(), #os.path.expanduser("~/Games/Amiga/Configs"), os.path.expanduser("~/Games/Amiga/Data"), #os.path.expanduser("~/Games/CD32/Configs"), os.path.expanduser("~/Games/CD32/Data"), #os.path.expanduser("~/Games/CDTV/Configs"), os.path.expanduser("~/Games/CDTV/Data") ] return paths fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ChecksumTool.py0000644000175000017500000000215712162366654023757 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import hashlib import fs_uae_launcher.fsui as fsui from .Archive import Archive from .ROMManager import ROMManager class ChecksumTool(): def __init__(self, parent): self.parent = parent #fsui.Window.__init__(self, parent, "Checksumming") #self.layout = fsui.VerticalLayout() # #label = fsui.HeadingLabel(self, "Checksumming file...") #self.layout.add(label, fill=True) #self.layout.add_spacer(6) ##self.center_on_parent() def checksum(self, path): print("checksum", repr(path)) archive = Archive(path) s = hashlib.sha1() f = archive.open(path) while True: data = f.read(65536) if not data: break s.update(data) return s.hexdigest() def checksum_rom(self, path): print("checksum_rom", repr(path)) archive = Archive(path) return ROMManager.decrypt_archive_rom(archive, path)["sha1"] fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/CDManager.py0000644000175000017500000000513712162366654023141 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import os import fs_uae_launcher.fsui as fsui from .ui.LauncherFileDialog import LauncherFileDialog from .Amiga import Amiga from .Config import Config from .I18N import _, ngettext from .Paths import Paths from .Settings import Settings class CDManager: @classmethod def clear_all(cls): for i in range(1): cls.eject(i) cls.clear_cdrom_list() @classmethod def eject(cls, drive): values = [] values.append(("cdrom_drive_{0}".format(drive), "")) values.append(("x_cdrom_drive_{0}_sha1".format(drive), "")) Config.set_multiple(values) @classmethod def clear_cdrom_list(cls): values = [] for i in range(Amiga.MAX_CDROM_IMAGES): values.append(("cdrom_image_{0}".format(i), "")) values.append(("x_cdrom_image_{0}_sha1".format(i), "")) Config.set_multiple(values) @classmethod def multiselect(cls, parent=None): default_dir = Settings.get_cdroms_dir() dialog = LauncherFileDialog(parent, _("Select Multiple CD-ROMs"), "cd", multiple=True) if not dialog.show(): return paths = dialog.get_paths() paths.sort() from .ChecksumTool import ChecksumTool checksum_tool = ChecksumTool(parent) for i, path in enumerate(paths): #sha1 = checksum_tool.checksum(path) sha1 = "" print("FIXME: not calculating CD checksum just yet") path = Paths.contract_path(path, default_dir) if i < 1: Config.set_multiple([ ("cdrom_drive_{0}".format(i), path), ("x_cdrom_drive_{0}_sha1".format(i), sha1)]) Config.set_multiple([ ("cdrom_image_{0}".format(i), path), ("x_cdrom_image_{0}_sha1".format(i), sha1)]) # blank the rest of the drives for i in range(len(paths), 1): Config.set_multiple([ ("cdrom_drive_{0}".format(i), ""), ("x_cdrom_drive_{0}_sha1".format(i), "")]) #Config.set("x_cdrom_drive_{0}_sha1".format(i), "") #Config.set("x_cdrom_drive_{0}_name".format(i), "") # blank the rest of the image list for i in range(len(paths), Amiga.MAX_CDROM_IMAGES): Config.set_multiple([ ("cdrom_image_{0}".format(i), ""), ("x_cdrom_image_{0}_sha1".format(i), "")]) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/Archive.py0000644000175000017500000001622012162366654022734 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import os import io import xml.etree.ElementTree from xml.etree.cElementTree import ElementTree, fromstring from zipfile import ZipFile from .Database import Database archive_extensions = [".zip", ".rp9", ".xml"] supports_lha = False try: from .lhafile import Lhafile except ImportError: print("lhafile module not found") else: archive_extensions.append(".lha") supports_lha = True class ZipHandler: def __init__(self, path): self.path = path self.zip = ZipFile(self.path, "r") def list_files(self, sub_path): if sub_path: return for name in self.zip.namelist(): if name.endswith(str("/")): continue yield self.decode_name(name) def open(self, name): name = self.encode_name(name) return self.zip.open(name) def exists(self, name): name = self.encode_name(name) try: self.zip.getinfo(name) except KeyError: return False else: return True def encode_name(self, name): name = name.replace("\\", "/") name = name.replace("%5f", "\\") name = name.replace("%25", "%") #name = name.encode("CP437") name = name.encode("ISO-8859-1") return name def decode_name(self, name): #name = name.decode("CP437") name = name.decode("ISO-8859-1") name = name.replace("%", "%25") name = name.replace("\\", "%5f") name = name.replace("/", os.sep) return name class LhaHandler: def __init__(self, path): self.path = path self.zip = Lhafile(self.path, "r") def list_files(self, sub_path): if sub_path: return for name in self.zip.namelist(): if name.endswith(str("/")): continue yield self.decode_name(name) def open(self, name): name = self.encode_name(name) # Lhafile does not have open method data = self.zip.read(name) return io.BytesIO(data) def exists(self, name): name = self.encode_name(name) try: self.zip.getinfo(name) except KeyError: return False else: return True def encode_name(self, name): name = name.replace("\\", "/") name = name.replace("%5f", "\\") name = name.replace("%25", "%") # FIXME: a little hack here, Lhafile uses os.sep # as path separator name = name.replace("/", os.sep) name = name.encode("ISO-8859-1") return name def decode_name(self, name): #print("decode_name", name) name = name.decode("ISO-8859-1") # FIXME: a little hack here, Lhafile uses os.sep # as path separator, normalizing to / name = name.replace(os.sep, "/") name = name.replace("%", "%25") name = name.replace("\\", "%5f") name = name.replace("/", os.sep) return name class XMLHandler: def __init__(self, path): self.path = path self.tree = None def get_tree(self): if self.tree is None: tree = ElementTree() tree.parse(self.path) self.tree = tree return self.tree def list_files(self, sub_path): print("XMLHandler.list_files, sub_path =", sub_path) result = [] if not sub_path: return result sub_path = sub_path.replace("\\", "/") prefix = sub_path + "/" tree = self.get_tree() root = tree.getroot() for file_node in root.findall("file"): n = file_node.find("name").text.strip() if n.startswith(prefix): result.append(n) return result def get_real_path(self, sub_path): sub_path = sub_path.replace("\\", "/") tree = self.get_tree() root = tree.getroot() for file_node in root.findall("file"): n = file_node.find("name").text.strip() if n == sub_path: sha1 = file_node.find("sha1").text.strip() database = Database() return database.find_file(sha1=sha1) raise Exception("Did not find file for " + repr(sub_path)) def open(self, name): path = self.get_real_path(name) return Archive(path).open(path) def exists(self, name): path = self.get_real_path(name) return Archive(path).exists(path) class NullHandler: def __init__(self, path): self.path = path def list_files(self, sub_path): return [] class Archive: def __init__(self, path): self.path, self.sub_path = self.split_path(path) #@staticmethod def join(self, base, *args): return os.path.join(base, *args) #@staticmethod def dirname(self, path): return os.path.dirname(path) def split_path(self, path): parts = path.replace("\\", "/").split("/") for i, part in enumerate(parts): n, ext = os.path.splitext(part) ext = ext.lower() if ext in archive_extensions: # FIXME: should also check that it isn't a dir path = unicode(os.sep).join(parts[:i + 1]) sub_path = unicode(os.sep).join(parts[i + 1:]) return path, sub_path return path, "" def get_handler(self): if hasattr(self, "_handler"): return self._handler name, ext = os.path.splitext(self.path) ext = ext.lower() print(name, ext) if ext == ".zip": self._handler = ZipHandler(self.path) elif ext == ".rp9": self._handler = ZipHandler(self.path) elif ext == ".lha" and supports_lha: self._handler = LhaHandler(self.path) elif ext == ".xml": self._handler = XMLHandler(self.path) else: self._handler = NullHandler(self.path) return self._handler def list_files(self): result = [] print(self.get_handler()) for item in self.get_handler().list_files(self.sub_path): result.append(os.path.join(self.path, item)) return result #def is_archive(self): # return self.get_handler().is_archive() def exists(self, path): path, sub_path = self.split_path(path) #print(path, self.path) assert path == self.path if not sub_path: #print("os.path.exists", path) return os.path.exists(path) return self.get_handler().exists(sub_path) def open(self, path): #print("open", repr(path)) path, sub_path = self.split_path(path) #print(path, self.path) assert path == self.path if not sub_path: return open(path, "rb") return self.get_handler().open(sub_path) def copy(self, path, dest): ifo = self.open(path) with open(dest, "wb") as ofo: while True: data = ifo.read(65536) if not data: break ofo.write(data) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ADFFileExtractor.py0000644000175000017500000000755112162366654024450 0ustar glaubitzglaubitz# Simple ADF file extraction # Support for ADos OFS/FFS disks # Author: TheCyberDruid # Notes: Internal functions prefaced with adf_ for now. # ToDo: Convert functions to a class. # Version: 1.0 BLOCK_SIZE = 512 # Size of a block on an ADos disk AMIGA_ULONG_SIZE = 4 # Size of an Amiga ULong variable def convert_big_endian(big_endian): length = len(big_endian) c = 1 sum = 0 for digit in big_endian: sum += ord(digit) * 2**((length - c) * 8) c += 1 return sum def adf_check_ffs(data): return ord(data[3]) & 1 == 1 # Check if bit 1 is set = FFS def adf_get_block(data, block_number): return data[block_number * BLOCK_SIZE:block_number * BLOCK_SIZE + BLOCK_SIZE] def adf_get_block_name(block): length = ord(block[432]) # The length of the block (file) name is stored at offset 432 return block[433:433 + length] def adf_get_data_blocks(data, block, amount, ffs): c = 0 offset = 24 # For OFS disks we need to skip the data header if (ffs): offset = 0 # For FFS disks there is no header in a data block filedata = "" for i in range(amount): data_block_number = convert_big_endian(block[308 - c:308 - c + AMIGA_ULONG_SIZE]) # The data block numbers are stored from offset 308 backwards t_data = adf_get_block(data, data_block_number) filedata += t_data[offset:] c += 4 return filedata def adf_get_file_block_count(block): return convert_big_endian(block[8:8 + AMIGA_ULONG_SIZE]) def adf_get_file_size(block): return convert_big_endian(block[324:324 + AMIGA_ULONG_SIZE]) # The next file size is stored at offset 324 def adf_get_hashtable(block): return block[24:24 + 72 * AMIGA_ULONG_SIZE] # The hashtable starts at offset 24 and is 72 * 4 (size_of ulong) big def adf_get_next_hash(block): return convert_big_endian(block[496:496 + AMIGA_ULONG_SIZE]) # The next file/directory/link info block hash is stored at offset 496 def adf_get_rootblock(data): return data[880 * BLOCK_SIZE:880 * BLOCK_SIZE + BLOCK_SIZE] # Rootblock is block 880 def adf_hash_name(name): l = hash = len(name) for char in name: hash = hash * 13 hash = hash + ord(char.upper()) hash = hash & 0x7ff; hash = hash % ((BLOCK_SIZE / AMIGA_ULONG_SIZE) - 56) return hash def adf_find_file(name, hashtable, data): hash = adf_hash_name(name) name = name.upper() sector_number = convert_big_endian(hashtable[hash * AMIGA_ULONG_SIZE:hash * AMIGA_ULONG_SIZE + AMIGA_ULONG_SIZE]); if (sector_number != 0): sector = adf_get_block(data, sector_number) sector_name = adf_get_block_name(sector) sector_name = sector_name.upper(); while (sector_name != name and adf_get_next_hash(sector) != 0): sector_number = adf_get_next_hash(sector) sector = adf_get_block(data, sector_number) sector_name = adf_get_block_name(sector) sector_name = sector_name.upper() if (sector_name != name): raise KeyError("file/dir not found") return -1 return sector else: raise KeyError("file/dir not found") return -1 def adf_parse_name(name): return name.split("/") def extract_file_from_adf_data(data, name): ffs = adf_check_ffs(data) name_parts = adf_parse_name(name) block = adf_get_rootblock(data) for name_part in name_parts: block = adf_find_file(name_part, adf_get_hashtable(block), data) if block == -1: return -1 fs = adf_get_file_size(block) filedata = adf_get_data_blocks(data, block, adf_get_file_block_count(block), ffs) return filedata[:fs] class ADFFileExtractor: def __init__(self, data): self.data = data def extract_file(self, name): return extract_file_from_adf_data(self.data, name) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/0000755000175000017500000000000012162366654021571 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/tab_main.png0000644000175000017500000000270612162366654024056 0ustar glaubitzglaubitz‰PNG  IHDR D¤ŠÆsRGB®ÎéÁPLTEN‰L„ $? 2 +!K‰!Jˆ!J„!H‚ H€!G!K‰!L‰4Z“!Kˆ3Y‘!Kˆ"Kˆ"L‡2X3Xš¯Î²Ï¤¹Ô µÐ¡¶Ñ J‡4e¤5e¤5f¤5f¥6g¥7g¦7h¦8h¦8i§9i§9j§9j¨:j¨:k¨;k©;l©n«>o«?o«?o¬?p¬@p«@p¬Aq¬Aq­Ar­Br­Br®Cs®Ds¯Dt®Dt¯Et¯Eu°Fv°Gv±Gw±Hx²Ix²Iy²Jy²Jy³Kz³Kz´K{´L|µM|µM}µN}¶N~¶O~¶O~·P·Q{±Q€¸R¸R¹S~´S‚¹T‚ºTƒºU„ºU„»V„»V…»V…¼W…¼W†¼X†½X‡½Y†¼Y‡½Yˆ¾Z†¼Zˆ¾[ˆ¾[‰¿[Š¿\‡º\‹À]ˆ¼]ŒÀ^н^ŒÁ_‹¾_Â`Â`ŽÂ`Ãa‹½aÀaÃbÃbÄc¿cÀcÃc‘Äc‘ÅdŽÀd‘Åd’Åe“Æf”Æf”Çg“Äh”Åh•Èh–Èi‘Ái–Èi—Éj—Ék”Ãk™Êl™Ëm•Ån›ÌoœÌoœÍq•ÁqžÎr–Ât—Äv›ÆwšÅy¢ÏzœÇ{£Ï|žÈ}žÇ~ŸÇ€ È€¡É¤Ì¦Ðƒ£Ëƒ¥Ìƒ¥Î…¨Ð‡§Îˆ©ÏˆªÑŠ«ÑŒ®Ô®Ó‘±Ö”³Ö—·Ù—·ÚšµÖ›¶Ö ºØ£½Û¤¼Ù¤¾Ü¥¾Ü¦¿ÜÀÏãÉ×éÊØéÐÝìÑÝëÑÝìÒÝìÒßíÓßíÖâð×ãðäëôåëôåìôæíöçíõèîöèïöéïöêïöëðöëð÷ìñöíòøîóøïóøðóøòõùúûýýþþþþþþþÿÿÿÿ)ÕÄqtRNS@æØfbKGDˆH pHYs × ×B(›xtIMEÜ 7 ùoqIDAT8Ëc`  ’VÇd…aò2ÊO^aO”¥ ú•N%j¦¶ŽŽ®žžž®ŽŽ¶&ŸxJb†Ä¼¶Žž‘±‰‰‰±‘žŽ6PÅY°õW@i]}CSs KKK sSC}]mWêPZ:úF¦æ–V6¶©¯^¥ÚÙÚXYš›éëÀèšš[Ù8:9¹¬{õj‹‹“³•¹©!\‘™¥Ý’ë<–Ÿ{õêÂJÏõW—9ÙÙXšÁ˜[Ù9¹]}õê.Ä÷^½ºæåêdgW`mïâî½9 6úz»»ØÃ8¸xøøÜDÈß ðóñp+pñðõ\ ”xy¬¿ôÐ3 cEh`€¯\‡o@Õ–ó@ñ#IÉÉɇŒ³[k‚|á |‚!F×eA„WàìÎÍÏÏoƒ°£Âƒá âZw\ -)++; d\ÚÙW›”¶ (þüÄ´©Ç_Û2Ó’b#á "bR2òn!¼y§8/#%!® 2.)#g7r@í-ÌÍHЇ+ˆNHË*ð"{ãÕ«ÛåYi p±Ié¹ÅÛïìïÜsåÕ«Ë›'«²h\A|rF~YuSÇÄ)^½:8cÊÄžÆê²üŒd¸‚„”¬‚ŠÚæÞIÓW½zµfÎôI½ÍµY)iY…õí}SfÍ[¸xá¼YSúÚë+ ³Ò  $ÍLË.¬¬oŸ0eöüÅKÏŸ=eB{}eaöܧr`"ª§ç‚Lhé› 4aØ„  ΨˆB2†‚Úcl籚",k‰ËcËzrbÔÉØ‡€â¸Äñ)\ ®ÜúW®D‘¨;Á $D“!¹]U.î0É ¸Ø›C×Ï©êÓ'¸;ÿsÂÖ€‡.ñ‰K°£ŒÙìþÅ¡¿8‘`4ßgo?XQ° Vƒ¢“}¾xµ¯õÁõKCß\DÌéýƒm<Ÿó!Œw"–µ`cô(,ÏÛ¤ ìmÍbšá׮пyâÜ•›ÜÇ'c¶_>»•Ûï^£¹ÉÇÎý•UŠøç!sº~í1j€xfu@Ñ[žŠ§øî'üÛ:TÕbñb +¤ºvŠþüëÓù‚²{òÿ‰  )g F¨ºí Ó ²Aå©vЉlSD l¹A”† ÎÍ¥5Dê ©6RBÕà PçŸ jƒd"–­’ػѻƒ[ƒaŠØÌ@¸‚;õä±D¶õŸ×VNŸï4~u;V>kV°#’£=÷lïÛ»\Ž‘µZ¹ÚF‚"òE•;p¼íʳIEND®B`‚fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/help_16.png0000644000175000017500000000157712162366654023547 0ustar glaubitzglaubitz‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEÜ 3?Ì IDAT8Ë]“KhœU†Ÿó_¦3“;“L.¶¶iV1j4Ô…xuUÔv¥R*.¼€6¸(¸q#ƒ¸ìN %‚.$Q¤‹‚»)Qh¢-!Ú8MÒd&&Kæÿÿsu1í`üàÀ÷ÁùÞ÷p^Áÿê™õðO;_ǹ"€'Ä–³nV1y©üôÿ½/î4£å™T‰â¹L¾2>\J ìõò™ÍHògµn]Þˆ•±ÓÕâÄÜÔQÕŒ–gR}:wñÞ¡Â#OÜ¿?Óh[¶[¥;ð0€Þ|@>ãqéêJô×Fcn+h>÷{ùe¢Ôg÷ õŒêÏÌWnQʧ9ùÔ>riŸBOÈÊ?1_ÿ¼Ær-æÑ‘L"“q½)'7Åãgf öø¿{ì¾Ìr-"Q޳¯=ÌÂ&Ó?UH‡>ï8L*ðxzžt(îÏrþòÕH*{Ô3NNŒ RÕzL#’(£Y¿ów­…ÔšF”PmĤSÊhꑤֈ84XL9«Þ ŒÕ/rY¿ÚˆÐÆ"„ÇGß.tGöõf)2ua e ÎY6ê–¾\Æ7Z¬JJN8Z±D@N=9Ì?.qáʇs¥5}ù VÉÀ)¥QFOˆ8Xê¡If/Wp€sëàH”Ƙ„Ài]Ûn¶öƒ@×]B0XLs¥²…4ç\’ò=¶›-œÓÕÀ*ùýfuólo¿¯}ÛFGþÅ…ÕîëÈïö„!µjÕ)g=c“Oªë7£ŒíX‘ºsÞ=ö¯?{¤;+£±Î`TLm}%Ñ*úÔ»6ýÁ¼Òñ7k×w|— e•D(qäî»8Ø—EÊ•DhÙÆ³1«×w¥>_üª|-µÿV»µuXW’±\ï`ÖŠçàÕ³ßq;Lž3ÔÖn¶“¤ýÛZúÌÒ®0½TNEº~ÎYq2ìÙé¬/ü ãßht´cTÜPX¾ìlMÌMM©]i¼SžûAÏ Ocy(-ç˜u†ÉÊùwÅù_¿Ñ­ò4±MIEND®B`‚fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/add_button.png0000644000175000017500000000071312162366654024423 0ustar glaubitzglaubitz‰PNG  IHDRóÿasRGB®Îé pHYs  šœtIMEÜ& ’ý]IDAT8ËÅS=KA}»·IŽˆø´°³QDÁ”‚Xh©ˆX«`!ØÈ5!Í–b£½‚¥…? (!EH~DmML0&ÜÝîÍXh„ AÎN503yoÞfF?!Ñg¨^…ÔÖiF›Ð€˜²Ü˃åt¤ :;+Sj{iRú(Ò̬´ Qz®ƒ™Ud ˜o-Õz Fëß5˜Þ8ÎC)fFÒŽy¦gWm"olõ™`6p '›é.ßóù™Q)Âíb¥†—F©ña;·@Äxoû*›+9ºŒÖ¨7}Ü”ŸH) ¥„”ùûêwÎL0:øIBãf¯Š1+f‚´,oqvÂ.<¾â®|ëé@Ûø¢`Å,·3'z9qda×׿¨!wqÊù®ˆv" $LþÍÊR , )„‰l$WîþÑ™ÓÉ{õ‰ÿÆb|­"ÏqGIEND®B`‚fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/remove_button.png0000644000175000017500000000043112162366654025165 0ustar glaubitzglaubitz‰PNG  IHDRóÿasRGB®Îé pHYs  šœtIMEÜ'%¥J˜«IDAT8Ëí’1 Â@Eÿn6Å3žÀ›è¶›ÜDï‘J;Q,=…"®ÿ·XB–i,þŸb`œ$ )õ¡5“ùzeÆH2H‚D@‚$ˆy–H‡ê°Y,{€ôLq6‡Q@"@)7;½?R¨w§ °¦Áõ–°?_8xïà½Ïê:/Ö¼¾OàÛªz{Œ”B7GïÅ$+Ê¢j÷Üÿðõwu— Ï<IEND®B`‚fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/fs_uae_group.png0000644000175000017500000000532412162366654024761 0ustar glaubitzglaubitz‰PNG  IHDR04Ì“»‘sRGB®ÎébKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEÜ ,$øQ TIDAThÞíšipTUÇïuwÒNB’0 Ê.„MÁS#P–ã ŽJé8.0ÖÌ(ãXZ…3ZNY|PQ´bÑIX„5Y€ÄìKgéN/ét÷ë÷æCwš–tHȰUçÕ­Nwî»÷üïùŸsÏ»ç Š¢p¥‚ ôýyÅçÍÅÿS  ¬àÿ›WqÐAÞ¦Ä[Bñ67àôk²?¯ò* ä…‡_˜”yw泡ºÐ)ú}šJTioÅò»ew¯Åf©6YM¹'r·í:°«0NEQd?åC·¿¾ýù”Ä”WÔ*µŽÛH$Iê=Y~rëËï¾üÐ ô*Š"÷½Ê¯K“þ2H& Ù&£¸”[¢´ õ"굇Ä@^QÞû¯½ÿÚ& p¨½«¯YÿÈú‰)‰)¯H6 ëE+r¯|[¬¾¨ ŠZ¯&sZæ“YY…ùEùvµ×9ƒæM÷œZ¥Ö)²‚±ÜˆÛî¾}øãW¹‹‘#Ѩ5Á+²V<–_”0«½]‚Bu¡Sz =ôt÷pÛ‰Ó£›~”ž¸¨¸T hè Ö‡èÓìF;N—“ÛQìF;úQzb£bG#m…ľPi·Ùq87\™™U_¡UèŒIä\ÒbâꚘØvEã §f-¡·#Á·Ùmv4j4ê+wZI’p:o¬’MeLoËñM½wÁlÜ?¸˜_û)qÖê’Ó1 ‘¨NÿPê?Œ Õâí ¥Zq±Àü9Dy¾—ŸA£q,S;ÔQàUä-X‰û¬7î€À¤Ð÷ÂC»phtä[ŠªÈÈ|!"=}ŠîZHkU8Êz@îG¡(±‹9#Žù8}büºJÕd}‰Vïá·YÁ‰{q\迈’[êoÑ›I¡¥crQi=JB)0O#Ö^Í´1g|}òÇþã1²K”N À%¹n…&¼DZBµÏú‡"Ä´ÏÄÓ x³®Ú;9]=»Åx?“\C´Àu¦PZâÁŒo Øó½4x&¥ÇõÌJ, !ÁàÉØóÁàdåúe¡þªu´g¼6Çh¾>ÌØè2æ.¸äës¸!›†ãƒÎ«àV?²"ãV®O&:{vwe4{'Øú §[yá/'}1¿¦û.ŽíÀiït¼@û[@¹>Ðê$]W ^ÇmšÍÉ/-­ i¢ÑÃiYMαŸÓQÖN Ã…@º näë`åSçˆHö„C»3„œÃóÀ\ÅCëËÀû„}ªü>J¾0äv@ p“,”ÖÍÒßTzÒ-àøÑeœÏ1ðÌÆ‚ã=!ºÛMÎg“°¶5ý˜b(¸žxç J„ŒhmÃþI™TÂì‡ë|©ÙÁ}P“×|Ms ™Bÿ‹ÏYÕ@â,f@Qrþ½œæ¢zž>z³·O}ÕDòÿ¡Ãa7_ÓØC¢¬ ß´aËß(Çâý^}n.ß}ÒCæS•èSÌX·¤áëÝ‹h-­’ã^{B ˆt(²hÃyˆ¶cœöPò?ž‰ÛYÁü?^ôºT°ˆâ½íòòöáú@ì3“ÖÖú­<º”ò¯È~·œ^­D/`7Žäø‡i˜Ûj†wÖx->Ð%O¦%ìq4Z ¢(sß„ÔSÌyñET‘ÉŒKºHDÛ§XÚÌ,ÜTEôïiËw[¢ˆ¹»˜„åÍ>î_ÊͦòÈÃö±kòb)•I:L²‘!0~\=‘m”ÄÿÌãŒJ ÏdÕËGègtzV_©þ×2Š«yèÛ >‹ô\šLá‡2ÎÞágº˜!D!E–Hoß„¡@ÅMB»x1±¶o‰M,„ ¦«ø&6‹)­ÆX€ö’¹ÒEú³5p‡ `vi¨Þu/M¥M¾N D¡~¿kDÇE’ûa(3`ßøå¤.Oú©÷PMu HÿåºÃít=¡ü°}v©™„ß×z~: î§tw3jµš}ˆ¯iuÚËóE@¢û‘W^ƒRHDá2®´}Û1<>Gx8­Œ¤!tq¥ï‘rv7æu“Iý!}I°>o¾ª%që%:¼Žª®l[“±µW! "SæNaõK«qôxRéÖúV¶lØÂÚ××2öα(²Â…ÓØõÎ.é68€+™m¤oßJéß×ðõ3xúÌ,,Û>'lã&Ú/Cš’qîI@˜sœÞ%­ôzïOØ÷Õyµ¾1Lí&ÞZû–oŽ˜ÄÒ¦¥ñæ“o"»eV=¿ŠðÈp,FK?ݨcÒž£´ü:ƒŽY©84ptÍ|&…ýKÈ9ÚAI.ZƒãžH”ìm>‹ÄTN¥i›‚ì”4¦>LÏÊgWpöØYjÊj¨)­aÃG¨,®¤èpV£5 Â×äþׄ?E”š€ΧY©_WB;ÐŒ83œé÷plM1m£­´FW0#wÞ‹¡ÜÐo,É%ÑRÓBKM =æv¼±ƒí¯oÇd0±ú¥ÕŒ›2nH> äW¶ð‹¤lÝ&Jþ3ÍÁ6 €Õ†Ü²˜ºÑ‡°‡îÆ€±ß.¦îŸ­Çrõº(ÑtŽøêNDDô%úËÇH†½A²5dIð¾øÑñžÐÛÙjð”Ax @£ð”2#¼57ÿ…Ùm¬^ηy7ÿnÀ(þ/{ø—nÔ^Jé¼íV¾±â$Àôô…O<„ÿI~’ÿ/ù/Ž*êg†<ÀIEND®B`‚fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/browse_file_16.png0000644000175000017500000000123012162366654025101 0ustar glaubitzglaubitz‰PNG  IHDRóÿa_IDATxÚ‘MOQ†1nüQ.ݸ1ñ7ˆ¥_4,TRåCEŒUâ"R¤‚‰ÑW†‰ ¥”–¶Óéçt¦--…ÜöõÞ“¦“Š OòLN2÷<ç½3-ZV×—/¯}öF}kŸà[[‚wÕƒåÁ¢ Ìû•%ïÂ%qöoèÁ$%—E­V;Ãéé äD«ëÞò‡Å¹ž K’¤H;«µ9_¯×ßÞ›¾Ÿ9Õýd Z­n.—Ëo‰È££ÔêÕ«ô¢E‹È²Yšà½§St©×j\¼x)žù쳨”ú¨Óé¼¾oß¾³ÿ3À²v»ù»å§OìØnGGF(ºE§÷‰ $6!IRÒ4cpp­5gΜáƒ#G¼µöÝ4M_Ý»woñ­ªÕêƒyž]±bÅú]»v(m4SS7!b´A+‹ÑcLïZ[Ò$¡\®`¬%/exïùàƒ¿Ê䥋­Vëɱ±±÷ðæ›o®TŠñmÛ¶.ajú&µÚ\?Áh‹"ÁhK’¨þ=C©T&Ï2´Öh­I³ ›ZN:ÅÑ¿iw:ï†Ð÷J»µæoÛ·ñú ë¹ty’©©[ĉAúŠÄ ‚—¾" Õû< "àœ£hwxü±Çصsçp¥\>zàÀì:ö;<úÈÚM›6róæ—ˆD@|$Äžb„ˆà}H"heQH¤Ñév»lÙ²…Õ«W­wνóµû÷ï !¾üôÓOªZ}–"ÖZ¬I@@‚„ñ…Çù‚z½C«Õ!FÕS ! ‘>D‚÷<óÌnåœ{yÿþý£÷Èòìà3»Ÿ²ÆZ­&ÆööÛZ‹1 !®ðÌLטžž¡ÕlÓiÌÌÔ©7Û4mœ„~BPDï<õz<¹k§ÍóüàWªÕê„£##4ês½•[‹±­-ÆXœ LÏÌÒétq!¢  ø‰É(\ ÑìÐíz|¼Ôë ÍÞºEÁèè(1ÆÕjuÉÝxaóæM:J@^pm±º7Æ h·‚"ˆÇ&Š4`ÉÒE /~Ryˆ5>@½Ñ¡Vo23;GQ8|BŒøØ›{ݺµxaA+|mýúµ:„€µ…1‚ÂE»]¥ÑZQ*åˆæìñ/gfg–/^v}dÖ‡~h½uë&µú,yž0<<„( h JpαfÍj}ùò•×€ßßÉ€HܰhñbàváÙÞù6¶W\JY²¼ JùS§?nLMO¶OMßøíGÇ7®\½àCTt O£ÙÁ¹ˆóï"! Î{††‰1nXçÜâR)§(Zm£ˆFúÇÏ!’¢äY…‰ ÿøx{llìWýŸŸ¬V«LLþëÕíÛ÷|ç‹7 Y8Ê:A´¯P´¤Y†snñ‚pÎgYšõZ«±Ähð.%†¢e RbÉÒœåæÌÎάÐZ¿·à*Ö­ÙºüÖ­?ÿ¼Z­¢µ~¯£~ñø÷6 Ejdy›¢k"ˆÃy P k5Íf“Ä&s ´6çkµÚòJeÆD‚cÀE’@¹<@¥’b“œ¡Áe&Ë~84~柯LMOí{ॷ¶<¾yhdd­š¸0Nž)¬uhíAõbû 0AÌÍÍaŒ™X077wðܹó;}ôQ| XÐ’D£MÆÊ•Ôêm¼´Z –-Y®Ÿ}úG«Ó&ªöJçjLL| Yfȵ!ÄÂ`pÁ $ãÚ¥+±^¯¿u·%{ÿôéOä¹çžÅ‹5 2K°à< ,Ë@ ‘7¿¤^›é-²ÜcGš&¤iÖ;ÿ¾ JF/Q†…k×® ðþ‚"›6Æ|8>>Ží;›´1 Ú²,£T.aŒ¡(:ÛkV½ç¿EB@ëHŒ]bp( ˆt@ˆ'O-/L`¬ýð¶g\`J[­Öë‡ÿå“Ñ‘ÖKŒ µ`Œ&Á˜H‹HÂðÒa\7!úZåX Šœ õž]S hDDO”ˆ1 E×qæÓs2353Ùh4v½ñÆÿþ¯®X)¥˜;v”÷ìÙó`ÏîÝÏÙÑÑïÒ)<í®§Ùê‚»X‰ ˆÈä…Kœ;sÎÇÿxèСŸþé§:vìØ‘«W¯^ÀàîàDD_œÉí­è+€2P™§¬?ih­þx[n^êÝí•ß÷ŸÓy@wKÍS¯ÝCœ7ΗÈ×úÞ¯¼¤ˆz3IEND®B`‚fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/cover.png0000644000175000017500000000057312162366654023422 0ustar glaubitzglaubitz‰PNG  IHDRj†5§nsRGB®ÎébKGDùC» pHYs  šœtIMEÜ "ÞC¹tEXtCommentCreated with GIMPWÖIDATxÚíÑ1ðüKÄ8R M%™è}m(%PJ  ”@ ((P%P  ”@ ((P%P J @ ”@(P%P J @ ”@(%PJ @ ”@(%PJ  ”@ (%PJ  ”@ ((P%P  ”@ ((P%P J @ ”@(P%P J @ ”@(%PJ @ ”@(%PJ t·]ð2ˆO5IEND®B`‚fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/kickstart.png0000644000175000017500000000410212162366654024273 0ustar glaubitzglaubitz‰PNG  IHDR04Ì“»‘sRGB®Îé pHYs × ×B(›xtIMEÜ 3/}NøÔIDAThÞíšÛo×Ç?gvíõ}íµîÚÆl¼6‰’@ÂÅfCšö!ªª†4-©’ö¡QóÖŠ‰š‡°Zhî. ÀÀ.µ*øõ£9sÇŽ½S˜!4¬BT© Èjdà£÷E•äÄv»:æî8¯¾x•7Ž´/{o·tÐö–Èòæx<¾"}fW½KÌ‹EŸ´s틵„jùÓ»[—µÿó·ÒÖ9AßcW<·X±ãvô9ô›Ayù•HŽ ‰¡øÛ©íìÜñµü \ƒOŸåÏ~‚Ò$njև"üþÐ|À£yi ¬ç¹oþxP€Báõúøíz˜O¦xïÔ6úŸÚ¼" ÃÈ0à+/£%¸éÁÌ%îð“þ›aà?ÿ¦i+  <€ßëc>1Ç_Oneócà÷û­‘Ìê‚àŒhJ)ʦ¥º®»Î$“IÞ<|˜Ó?ÃWQIh]xüð¥=x4ˆÆ¡C‡Od‚ðå­‹$“³(MèÜx“á £ôoßÉÙávDøtd”þçF.ØÅÐègDvqnäýÖùΜïß¾“á £tn¼‰Ò„drÖ5ìÝ»!‘H”΀!FFî꣫wŒh4Ê·¾sÖµæÛg‹ž/v_¡RÂPQQA~&X’1£”fö(ÆÇÇsŒäŽíóöõ…ç‹G¨e­…š{ŽSUá§µ÷$>_-¡Ç©òùi Ÿ¤¢¢–P÷q*Ê̱ÇSK°û8ešŸTÅëÌÍP÷:©´˜}ʧÓd[`ÿþý¤’Iæçç À½ÙÕÕfîŨ±ûšwgbÔÚ}m€ééuv_@ÄÜÍ®ŽÒCqWÇæ U5LŒG9qâDé>àÖswi ´SUiF£ÚêTU™ãºs\]mŽýµæ¸/¼9G±R”¿tñ&k›º8xðàý‡Q7{Ô Ãйrm±mÔÚ]Á!ÛóäŽKi}½s~亮³ÆðžÇëõrïî\†…E¬oy<«…õtAPh…sHh>°b@5åA7tª«kèîêbhè|Î=ûöí㯽†Ïç+3Ÿ <·mÛ™‡/ØõRä]§:5µµtvtpñÒ圵¨”XÌœò”—ùho ;Ê ʾÈ)›C缡\¼t™™»3®Ò.!Ê[$ —@²å_(ØÎÄÄ âñJitvvNr;~› ]ÝD''‰Çãlèî&15£§§›[“LNNaˆ,`Ê^þÀêÈ45®#­ëLÅ¢ˆ@0ØÌ\"At*J(ÔÊ\"ÁäT”P°™d2Å­‰ Z[[™M$˜˜ˆºš–ÓÞ:úvé‰L¸?b@c`7¿ËÌ5Ô¸qó:"hpýº%Œ™rc Àµÿ]Ï]K®]r&~õ¥Á%1 bV–©T*;Ƭ@m9­ëˆa^—Në™{lÙ©°¸˜Ð¢Nüñ¹Ê=¹%’QÀ’ è\É8Ùå+ƒhÊTÔVLÓÀг²­¼¦†ˆYZk :twF²‘Ú™;–…4葃ƒMŽW3ɤ{J3çÔó{"š„Ú¼¤hàŸ£Qz \ïeø¼Ðûh€P›—O‡„Mhnó24½–|挹ü©ãƒKÿ}À~±øð¬±ÜÝ>زíδt57‡Ç0P••”µ´³ 5kø*ý|6¥'\Oc£†!î­§©ÉL|á>S6 ¡oS=MkÌyŒŒÔº5cØ›Öÿ4zQbQº NYøÎ[àÛ> ª¥=kbkƒ Mõˆ]=õ”•i BW¸žrKî×S^î1Í&\Oy¹†Ø¡ÓlÀ,°€ØqH/…åH1ö¡9z ðXÊû5æG/@e•¢’rD Î_nmŒÂï÷eåzŸõ,–¬Ñœ;Ó LÓ@Êf£9¸{¾TÈWÞVÚ–½€k·¬Ê1Bz6lÉÞŒ¼¡Ý“•;4Ò³a³¤îÔHÝ BW‡ùRo¿†s@Ò)E?-ª¬ä+oðä_Ûñ4ï*¨^¦oC³§ù.p ¸mHú÷¾¿;öö[ïd?&¸0 yö/ŽÃpœÓ-j§NÀ3@YK8dµÈºNŸ·ìÆR<ípfòŽˆ˜œ(ÏQ¼*ëAºµø<ËS^å)^ €äÐЧó¢ÑBóQjˆ #ÊZÀ©TÚ¢7‘gnù «QÍùjãÆˆá²yîy o÷ qöÊ¥WÎQ@¡õ¥HwŽø_jM'.Q‹E^Ô—PKÞ÷ <@áº1ªp5jfÂÕý§™é9—°+î?³1©UÑr>"/¶ó«ÌÃþ— ¯ÚWm%Ûÿ|ÎÇÉlà„ IEND®B`‚fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/tab_settings.png0000644000175000017500000000411412162366654024765 0ustar glaubitzglaubitz‰PNG  IHDR szzôsRGB®ÎébKGDÿÿÿ ½§“ pHYsÄÄ•+tIMEÜ , P9HtEXtCommentCreated with GIMPW§IDATXÃW]lÙþîxlÇvâ'BB"'P r@ðR"vU±Uߪ>ìC¶TH bÕÇB•XЪ +íK¥­ÄÃj»‘ÚU“JH±â`¡A«šùaü;þ‰gîíCgfÇŽ³»W:ï{¾{Îw~.ÁbyœE¬ƒZ„éb ¶ÓæüT ]¡M¾„¡X éB«(g?©rZã7?>>~Þï÷1ÆÜe’WåêÅ‹¿Ð–°Ze~å¶ 1€ð’$…Nž<)ÖÔÔ”}˜Éd\ápø€/-¨Å"†”àwPΰ‡B¡÷ï0ÆŠOŸ>ýíÍ›73ÆDÇJi·Û J©À544t¸§§çÏÜ+++Ÿ\¾|y@I_Z¶ƒrÇèèèMMMŸƒA_CCC-¥ôÜÀÀ@« ÚÛÛmÕˆ‹ÅÔæÖÖÖO=Z·oß>w:>{üøñøäääB57Xp†ò‘‘‘Ÿ777Ößßï’$ ²,Û½^oGww·ç«s·©©‰¡cÿþýÎ]»v—Ë…††{*•úi___|jjjÞ! Uî=×ÔÔôy__ß6?ë¾F<Çêê*òù<Àåra÷îÝhnn†×ëÝöM6›ÅììlîÕ«W~ `Kwã+oÛ³gÏŸŽ;&z½^0öa‹Å"ž={†••466"@@¡P@"‘Àôô4qèÐ!8Ž2~ôööŠš¦ýÀßt]Ô`%!G)Íår9¿Ïç3'r¹¢Ñ(êêêpâÄ ØlåE²,£µµñx‘HÁ`¢(–íA)ÍYÂÚäge~ øÀ>ŸÏ.Š")•J˜››CKK öîÝ BÈŽ)“ã8H’‡ÃÅÅE444€ã8¼{÷ŽÍÍÍå?~üáƒâ†ù0®‚ýüØØØR©Ô7ëëë¥/_¾D}}=dY¥ÔÆ! „€1V6'Ë2dYÆÒÒ(¥X[[ÓÒéôßC¡Ð·†]'!ì·oßþ¥Ï磔º !ôôéÓÇq˜ŸŸG Ç}—ú5MÃÂÂÂf*•"àóùÐÙÙ)V®YZZBGG(¥˜žž¦Œ1@>™L^½råÊ_l9¯©© õ÷÷Ìç`uu~¿ß<¥±q4-*Š2>99ùœ9sæW‰Dâ7ýýýNÇqðûýØØØ@}}=Ξ=Ë3‰ÜðWªYT(¥Û2\±X„(Šæ„,,,äÖ××ïŽéÙLMMÝ …BÜüüüGt`A@¡P(ÛÓívCÓ4ÑàŸa3Ž1†J!„€ã¸²wEQ¸ÙÙÙ{z¾Wuj$¹§(Ši-Ƙé¶j{áo†¡e‡£ÌüúsÇÚ^¡`·Û·ík}7ëy5”F21Þ5MCmm-ëíí=o„­.|0;|ø°(I’y²ÍÍMÔÖÖÂétBQ”mݵÔÕÕA¤R)s$I8räˆÀpÐÚ'ò+àr8e&UUÉdµµµhkkC6›E6›E±X8Nx<x<äóy$‰m õhpU4¨ÿ/ÖrÜÓÓ³˜N§ß¯¯¯·[k:c ù|ù|‚ ÀçóÁï÷C–eˆ¢UU‘H$Íf·ñ!“ÉàáǹÕÕÕKápøß–¦•½ ‡Ãÿíîî~‘J¥ÎÖÕÕÙ k(Š‚ååeÕétr¥R H¥RH&“H§ÓÈårÈf³xñâ… €¸\.ÂÃÆÆ¢ÑhîíÛ·—oܸñ•ž9Mت\Dl333K/777Ïø|>{&“Á£GòËËËÿ\[[k U›Òû÷ï«KKKÿPeŸÛíæK¥™››ËÇãñ«ÃÃÃ_iÛÒ›à,uÚÀF—[ZZ …Bß›7oÒ333Cããã_ üº­­­* ¹ëׯ(ÂC§Óyìõë×[±XìÓ;wî|c¹-Y;c³'´Þ~ŒIíîÝ»ÿ¶s0ÆòétÚUÙ|ê¾/ O&&&ÞÓO[ÔŸÌrXCWY}aeT¨FÇ  ‹Å~àw:£­£°¼¼üý›-k~±˜ßzkb¤ÊÕÌöbX£òr Vøøû„UÞ‚¿ïjN*xÂY~«Ë,~V+nÇ;–ðÿÐóögÀà?IEND®B`‚fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/hd_game_16.png0000644000175000017500000000121612162366654024171 0ustar glaubitzglaubitz‰PNG  IHDRóÿaUIDATxÚ¥“ÝORaÇûãÜè–`ÆX͹îL¡­L¹Æ¬6§%Ël.Ê,Ç,YòÎXž”wDÇ‹ØK† CÞ¾ßsÁɺióâ{žsÎsžÏóý}Ÿß¹&‰®$vq8¬6§9áp[A²»,—dÞ4á‹ÉˆOƼ[YÆÒò⯅…¹>€×ê5{¯×K5›M´Z-\\\àì쌩ÑhàôôÅbñx‡ºgO Y*•T¼P©TP.—qttzÞÛÛC8†ßï‡ÏçÃîî.&5ñ7 ŸËå> d2¸=.·ØßßG2™D(B$&ƒ«GÿTÒ«Á`â H$°³³ƒµµ ‹Å0rwX|6 PÝ´Y{܇‡‡Ìúùù9S6›e›Ý³ÅŒT*åm…x¿ú|€õu#›L§ÓT'lw§Ó Žã°µõKoY‰ƒC2ðêõK4·¹MRÒ àv»áñxØâ@ ÀÞ3_*nÞ’ €ç³3èv» ‡ŽŒÒ§à"‘¢Ñ(9a'srr—Ë…|>!Å ÐNO¡ÓéðáÙnÇÇǨ×ëh·ÛÔ´Âd¥x½^–B9$LÜg :k²K0 H.˜#r¨×ëQ«Õ.;EµZ¥Dn¨$ºïw%u(u%-¦Q*—€á‘;?gžê°aÚÀÜüt:&&ážJ…1µ­³ó/ y@Di¨h‚èRDDW>Ð…HAÅL¬ˆQLóë¹H³Ig~Ü{ç m¢±ÐQ=)Ç T«a=|dK‚ˆúöìż^~…ûîò{¦øYYñ±¿íчñöÝ2oä”釘<À0wCÂÜ¢Üd~Qi°¤6É/y騡¦À²¬mÔ E/üû÷À#‹ú$â@5 vŒdb-•6ß0Ù×ô ýÈŽf1:¶In< "@6,¨É´CP*•ìêPÙ$G’~ŒîÂä,sRVòMã;¿Âz¡¨Â-îåjÚdüXÎ Ž Á›N9‰Dbw0Üa ò$ünôŠb+‚ ŠyÀ)0cU3m|`4žZžþò‰ŽŸ%þ«3üø-W¨T*vµó\0Ûé‹.Ü~¸ËþøÎ£œºàÂÝÇ=Èn:ÇÈ1ÌøW¾H5>ó©óÝ8se;>–Ý8y®ŸÖÜvþüÓC{ À»¯´H­{À7ìò‚€«×%,Ü’°òG²ŸWk\B#ûÝëÔø»E úÙÕǪm°J?ž¿|ÊõL&Óe ´M8º…ë$¸Æó–MÓvþ›7ÉsB|÷¿ IEND®B`‚fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/wikipedia_url_16.png0000644000175000017500000000114112162366654025432 0ustar glaubitzglaubitz‰PNG  IHDRóÿabKGD@@@§ö/f pHYs  šœtIMEÝ,|C%îIDAT8Ë¥“AkQ…?-H “h6Íj,B»Å…˜F BF’v3;1‹܇.ÆüÿGQfÕ,:C³pSB16Òò`tªSÒň]”¾Æ¦«zá-Þåžóî=÷H8 fü_D¢ €fQŒ¨ëº˜¦Iq·ˆëº4^7(î±, !–eaš&B„T«ULÓ$ªë:©')º½®dݾ@³ÑÀïû,Ý_BS5Ea%¾€¦jD^ŒlÛÆïû%ƒ`Ðiwð<ë¯×T+síW+¿E!§æ°›6žç j*étšÚI ÇqPsª^|¼w)b¹\Àq~“%ñEpùéRŽå÷}Îߟ³¼ºÚË¢V¡@Wè…v¦Óm(--t:K7ŽßŒt’›™d¾s¾sÏ=· À½êéyúDOõÎLý=ÕWUË4hˆPFÝŒúïáù»îîîG:}ïÒÂâœÄ²)H’ˆÛGQd”J°Ù¬eÐ/©goqw`Ëð@.™¢;‚PÃÑqáHÁ±XÙLµÚZ­&x¾ÐznÉ©˜;••aSíR¹w ?~:°½ã„ßïF$“L¢Èó¨\–¡È2òù\Ç`¢–T¬Öóââ¼(ËŽãöváüµ»Ý ›ÕŠ5Ç*NOPÈP.•P­\j-ÍÎ~Ul—ѬŸÉ‰•J úH“½²òk«øÜ^„Á&YЧ4²é,re¢”¦Ï Û58dŠHR—•sp~¢ÀãÙU´††-ÒØÄˆEÛñØ! €¡Sć ¹° u:]”Q_íÜ´QÊàÏ9ÞF2™ÂÈØ3‰¢¨ÇjŽHÅKl¬o!?#1eý]õ/A§ ¥Q#æœcwׇ‹‹"&¦F•[‚ÉéqE¨‹°Ú#‰#ÁÐźF µ Ô¯Ñl‰„*NNNQÈÁqÙ›é—SÒÔ‹I™e™:‡}}®Àb‰ò|ž´`Œh&¦R ´Ú2šM××5d8žuF£IJA"qˆÍ-+\\¾Î샚‰ÚçægEÒ!i@‘b€ƒXßìNu”äý ®íÏpû—±ís"ÉåñîýÛºŠÕ‚d –X$BBT4!ÔÄçØ ÀësÃív`só ¶v–#Yùît¶ÔðÝ‹òÐð`–ãØv§M Uš`¸‚‡ ÁüÁø÷7qx‚cÝÑ"‹v/Êw$ª’’J†I!—çÁ—®&“‰ŰáÜÀë7¯ê:ª÷á2ý»ÎF353`1GõFÝYç+ƒÙÕ÷÷}øß:ÿIV ý´–ºµIEND®B`‚fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/cd_game_16.png0000644000175000017500000000145712162366654024173 0ustar glaubitzglaubitz‰PNG  IHDRóÿaöIDATxÚmSYOaåøèŸñßHB-ÓŠÈp‰o*¾‘->ÚË¢V¡@Wè…v¦Óm(--t:K7ŽßŒt’›™d¾s¾sÏ=· À½êéyúDOõÎLý=ÕWUË4hˆPFÝŒúïáù»îîîG:}ïÒÂâœÄ²)H’ˆÛGQd”J°Ù¬eÐ/©goqw`Ëð@.™¢;‚PÃÑqáHÁ±XÙLµÚZ­&x¾ÐznÉ©˜;••aSíR¹w ?~:°½ã„ßïF$“L¢Èó¨\–¡È2òù\Ç`¢–T¬Öóââ¼(ËŽãöváüµ»Ý ›ÕŠ5Ç*NOPÈP.•P­\j-ÍÎ~Ul—ѬŸÉ‰•J úH“½²òk«øÜ^„Á&YЧ4²é,re¢”¦Ï Û58dŠHR—•sp~¢ÀãÙU´††-ÒØÄˆEÛñØ! €¡Sć ¹° u:]”Q_íÜ´QÊàÏ9ÞF2™ÂÈØ3‰¢¨ÇjŽHÅKl¬o!?#1eý]õ/A§ ¥Q#æœcwׇ‹‹"&¦F•[‚ÉéqE¨‹°Ú#‰#ÁÐźF µ Ô¯Ñl‰„*NNNQÈÁqÙ›é—SÒÔ‹I™e™:‡}}®Àb‰ò|ž´`Œh&¦R ´Ú2šM××5d8žuF£IJA"qˆÍ-+\\¾Î샚‰ÚçægEÒ!i@‘b€ƒXßìNu”äý ®íÏpû—±ís"ÉåñîýÛºŠÕ‚d –X$BBT4!ÔÄçØ ÀësÃív`só ¶v–#Yùît¶ÔðÝ‹òÐð`–ãØv§M Uš`¸‚‡ ÁüÁø÷7qx‚cÝÑ"‹v/Êw$ª’’J†I!—çÁ—®&“‰ŰáÜÀë7¯ê:ª÷á2ý»ÎF353`1GõFÝYç+ƒÙÕ÷÷}øß:ÿIV ý´–ºµIEND®B`‚fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/screenshot.png0000644000175000017500000000067312162366654024462 0ustar glaubitzglaubitz‰PNG  IHDRÒ†¨†Ô£bKGD@@@§ö/f pHYs  šœtIMEÝ*ÍU=tEXtCommentCreated with GIMPW#IDATxÚíÓ1 ±1ø—ˆ†VÂ%WI&ÀIKF#‘#‘ÀH`$ÀH`$0 0 ŒFŒF#‘#‘ÀH`$ÀH`$0`$0 Œ ŒF#F#‘ÀH€‘ÀH`$0`$0 Œ ŒF#F#‘#‘ÀH`$ÀH`$0 0 ŒFŒF#‘#‘ÀH`$ÀH`$0 0 Œ ŒF#F#‘ÀH€‘ÀH`$0`$0 Œ ŒF#F#‘#‘ÀH`$ÀH`$0 0 ŒFŒF#‘#‘ÀH`$ÀH`$0 0 Œ Œ,M2ØyðTIEND®B`‚fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/favorite_button_2.png0000644000175000017500000000101212162366654025724 0ustar glaubitzglaubitz‰PNG  IHDRóÿaÑIDATxÚ“MHaÇ« „$hÒ1!¡²æû8d̉©^Þ qaþ“ƨàŸî¥mÆÏñ߯H\;ÝÃ3éÞK¼-ú}ê%çù¬‘2®ò|Ôˇ·^2ÿ·¶±NjǼ̎?%û¯¼rS',„ÚÈ1»¨ÉCÁÔ›ÈðÒM‡èwQà{È7m§aÉ{}.úµfXn¡CáˆÚh[S’þ5PïáT±'\cKWÚRƒÆ¹µšÃn;$wöWìà²ÄÁ„Î \Î[IvÑBg%_E»EcM•tÝ¿Í 9¯k×H¶4¨/声h¨rƒÓFN¹IZC)%·"lוpÆÔànŬÖSn6G ¹RŸp\玩RF†AÂlò§þÌýÅÕCâÇIEND®B`‚fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/save_button.png0000644000175000017500000000164312162366654024634 0ustar glaubitzglaubitz‰PNG  IHDRóÿasBIT|dˆ pHYs × ×B(›xtEXtSoftwarewww.inkscape.org›î<tEXtTitleHard Drive©O·2tEXtAuthorJakub Steineræû÷/#tEXtSourcehttp://tango.freedesktop.org}²Œ§µIDAT8¥ÓOhTWÇñï}÷fR&¾q’±XZ3`HM-„ŠñO\¤AŠAJ]D»iñßJÑ¥Åu7’]ÛWv£ (¸Di³h!q“˜h¢3-iª“—¼?óîÌ»×…F¥®zà¬|8¿G‹EþO©÷ ߸±ÙIÉŸŒN– œ½X,þþ^àÌ™“»Œ0ƒŽãtXk™Ÿ§o·‹~ªy¨úøžXÇèXëÚ3U¿¹zõúM`„ÜÚÓ;붸ŽÖúSÇq¸Tþ wýfî,Qð7ý}{ð<Ïó˜›û§íϱ?Ï^EèʬȈÙÙÙ À©T “$Ä•€™™¢(¢^¯ÓÖ–#ôƒ®woÐ2÷î—ÓçÎ!ÒiìË(Zk,0µ?*»’Ì‘£¸Û·†/`ç }ÿ‡³ý[vÖéùb‰l>1ÇdצéÝ¥èÞèñdh)%¾4Ž!€ZªÕ›+£!+š$ÛÀqXÙ·†üç.‹·çyR s)”RooÖÚ¦ô·‡ùm*äÑ¿ÍDc­Øe—–5ŸÝkåñBšÑ’¯ ¥Dkýàûªcß^v\»FiõjnOŽŠL#.Žbü œªjœLZbeUÓö?"|l¯¾› ù\a¢ðR÷ñ“Áà¿ÏFêUcUÍÇ ¨‰‰ýqŠ}g)öŸ›&.q'ò( "ØUÍ8M«¸¡ÝGß ³ƒ£BXú…ýzpF®<¨ðÂÛß‘}¦ûÚÇú†×Íp¹W¹ ¿÷ÆŸ(%nfE«À”¢ÜºÂ(ÁÀ‰sÅ —íUøÞ¦zlNeø•Wõò覠è¿píüA\ÁDÅIÏJð;oùÆìD- ±lͱ¼4C]ÝAa"û·‹—xp&ò;¶b€8F*ëS q“΋ÐÿÏ»ôŒ â&’¥è–ú¤ê2‰ñ¡ñôŽSjvˆˆÎÐfmD""X²¥²®*ii€ã%qÞÍ9ááØ‚íXØŽà¸Sï’8^›ˆÊ†Z llÀ™SDD¾ VlX›®¯Æv+]å$gÒK“ Øéyˆ@c"DÈTÖ­ùÕf–>{˜+%Û¦<³¦à_gEdHfê« CÈNØd‡Çut𺿰ež7¯y˜üàd“5d³Bçé‚Ú†*§ª±ÆJ×UQ‘ôð2•…ù…ÜF 0sÕ€x°Þ rü³~P,¸Š\/êÉ1_û'†Çž©[¸ÁñR5¨FˆWÃù7ß ._ÏýC> šÒ=­.ºØñϤéY?àžï†3µÕ¹Þ>þ iƒPyƒB-IEND®B`‚fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/search_group.png0000644000175000017500000001035012162366654024757 0ustar glaubitzglaubitz‰PNG  IHDR04Ì“»‘sRGB®Îé pHYs  šœtIMEÜaÙhtEXtCommentCreated with GIMPWUIDAThÞíšiŒ^WyÇÿg¹û{ßýÅÏL’ÉØ‰ã8È„M )T6Ñ RhÒ6H…ª¢…ªU?ôK«–V´|ª„´”6{¦,)©›B^âÄò6ÎØ3öسϼË}ïz¶~°Fn%ä%tGúë¼çê¾GÏï>çyÎ=ç\àgågågåÿt!W«£çï…Wq°9Ö·?†õÿÕ¯|ŽIðMð1©ÈJÁÓÆPΔ1€‚a)Å¥æqâs7~ ÿãÇ>k’Ì…y­ãZ¦4r- ¯ßIíæ&ðr`% Èî’™C¦;µO%kmfYX´©ùí‰ûñÔOà•¢l|<œæx{uxP5ßðÎkÃáР8½ØÆêZ£­*†Z0˵K³ÐþÁzé…oJÍ gæ—·Þ½?€£¿…Jºç¶Þðf Œ#ÀœÄì=†CÇÏ¢×OPJ)<›Ãq,„%“ãCxÓk'qëÎë´Æ@Ý–Ÿþ¼Z=ôñl|jò~|þU8~>f䫱QTïx+Ç·ž;„g_8Šn?G®)(ã†b8#Æ·›S³ÚW4Î lB¡X¸ûõÛpç;áÜŒtöeœzô³ÆåúáÉð¡Wà•ûðî$ÅSïÙgâ6rf¹G¿û"Î,váú%Ty"‡K&[ËíCË);,ê)Þ÷™rC®B‡×P-wvUJŒE'ãC!Þõæ›1vÓm0JáÔŸÒD‹'¶}↑‡?† !pt𦛘7yyåL÷%$Šc l©&iVƒG´ÃcŒ1ÃSœsM)5 ”¢B*¥d#^ÞØÕèþÚÉiî²±:Ãûî¾c[w€ŽéþÀضùÌ ÷㯮 €ùЗgÉzep T½õíìÄ|ß|î04±Ð²ú"˜þÎ|õqÉËßw ×r¤mÛrl|ÜݼesèÚ®£Œ!ëëëâäôt277§â4vîl¬Þ-ŠìÍå±ë}¼ç®0vÃ-ÈN`ö÷kßÂ[Ä÷/€_|áÈü ¡¬T~Í/°v”áÙMZ.ZzMY÷?œï+UKYúyà…åZbÇ;*×o›¬5›ÍV³Ù³m;ì÷ãöòòâÊôñéÕ=ûö¬í›šzº®VZë¿9»BüÝ{§É{åñí¨Mî@{úÐ#€Ù|©lccß;á§OíØÅX©g÷ž@'#M¯8ѳÿyJŽ=_«Õâf­–Ôõ¸\-'õz=¹ù–Áøèxmtl|W£Ñx}–'êõúöááá±Á¡!Úl¶R¢M2³/¥Òo’öík¹C&1è•ío ‹ûþ­ô‰]˜ýÒKxù²=@ø²Åã _‹™ù6Öº 8¡:ÍÕ™ãòºÝF=©T*I¥RJ+•rêû~ßò·lY¼O)å,àÜj Ü$„X˲¤·ÞíöffØ,3ñwâ¸û¶ý'9Ûº¥ V1°óuX|iÏ_æ¡K © 搜Nr£€™³k0Ô†®‹ÙèßUêõ¸Y¯÷[­z4؈Z­f4<<ÔÜÜ¢ÎÕä¸Öê9¥Ô>cLï|—’"<Ï“­VKNNNèf­Oaò麇եvlNί#_;‹æ-w‘Bšêþ_Å —å=Æö~b¼`øtû)ºqލY~By­¥V5LªõJ\«Uãf³W¼rZi•Ó ðòžhGѾR5XbŒ.QêíÖZ)¥ZJÊE)åi‹òucôjµQåÒrº=ò·•|æžê’·T¡U·RVEÜû €^2@!ñiÇsáÝ(A?7ð‘“—±í…z­œ–*•´Q©'õf-®Õªq+lÄå ÈÇÑ=¥L`çfiúÔ,¥ôÔàÄh’¶¨M™+še}µ²¼Ü§šØ•J¥$sÉ–òá¹³°¼ÚM‡’¬€Ý[Gmt‚Ÿ9xà€¹tEn«Ô«Z#N2H!AÝÒIÏ„q©TʪÕJZ®‡i#¬'V-.•š©í -¤­­Mž+û\_íöüR’¤+”2Â2‹öMli*Kµj5LEʳ,³Â<´óÄQÆé[×{ƒ>Ê#ãÈ^|±~Y1 5Ìõa´†6†-ˆwÒó¼"ü<‚¼âW²À÷³R©™ !´”B !´ëºÊó5lÛÒóUžÊ2[Iéi%„&$aØHƒªŸV«•¬T rß÷‹Œ—_±ˆ6뱄–_‚4 Þ ï’„DÉr=­Á(B•aκëyÂu=~aVQ¯V3­µñzE š‡f¡id±ß96Ü FiŒŒ†XK( |>ôN4Íæ=†bû¾¤ôˆ‚P*IšjêûвÌPÁ¢nâµ£ÈÖ»Aqô;¯ñ–^úó R ÆBAB&@Ás?:†¥”õ>ùŒú+€:çÞ=A>¾¸Òö‡k!eŒbpÀÇjLˆç²­­ôÈ=qRì‹x%RiÁ„æÔ˜„b–iʵ¦‰¤¼“¬;kQÇï÷b¿·:W!{¿üIÞ™ùýRµQÚTÖ¤É3j0=}g—{xdiØ™85¿ô/W÷܈‡ÒDýnÜOXÕá„`¨å “¢( Jbù½ÖÚ[å#G“<áy^XE?µ;yädiá®÷V½~?ö:žŸþöMöѯ‘Aß6ÜÍ^Bê,¥Àòr/_@éÖ÷aÇí?Oþýùý¯¼nÔ™›_úÞï =tn_‹ñý±V™ìÜ6BÜJˆps˱…µ„Af™4²P…03íìÜ9ÁÊKF'%“õšº×¹ÆäÝ»µÒõ Z³CŸ‘&ëÁ¡ ÐÀâJ{Ž. ©^ƒÞ¦;06¶BH|ñÁGt­þÑ ÿÅïÌ}åñÆÕß«x6{ã-×0f1Í*x©„•„!Ê)ò\‘BB‰<'Fi­”!±]Ïae"Ï À@kLÍ.áè\lp ^T“ð¼•0À–‘)ñ¥‡Sßÿý‡áŠ÷F¿òV t$Š´v^Û¤c›ê Œ€».¸cC€!SBi`„UÌHxT€c ` zýû-š^. ßr-r¿ŠXؘZu–ÎAlÞ¼…xð«OJ?ð>úò‘é¯]r l,O@|Û‡ñ¹ú<ʳ+É­3ócCKÌrè4Íð<†#8:ƒm X€Ö0Fc½ãÀÔ‚Ú²Mö­[Yybv0%58ÕXêäy†rXÂömtïÃïnU®¬÷¦®ÊùÀ£·Ã[õð`$ñÞ\Àn–,=TsYÉ·x6×B!úiŽ~*°ez¡SÀhƒÀÆA|èO5>@)¹ïÎ vÓ¯VHƒB,DÚ¹‡Jùœ'f9~â[…a¸gffþ™«zÄôÀÛðº¤Àï M~Nj”¥1N¡À8¶ NIlQ3es|éãÏàkdÃJ}x þ6€|ut HÞrKmLiƒBsŽ‚œ¨„š ÄIŽG¿ñÝœõ–§—ðª‘]jÂØT¯hNñ>ôæÍñ’KI. Nu,0Ëÿ1D³QCÔÏðÔ·žMóT¾iauuÿ%ÅÀ{Aô"1¥éúÕØh8;/ €}‘Ñ€`ƒBa’æ+R«ÝJ⎅vjèø5èÄƘóÓ‡Fµ¢V-[g—–ÞÚâvÇöƧn]p½æ‚'|)IóôyÊØ¦Õn>èØ6·9H?•08ç ­5šµ2945[Ò E]M€ãœoátʺHÏ„išŸ…1yV¨ë4›3šfâǽ(ÁÜübÅéß+¥úì*gòxãõ‹ïç@ !{E!σk‹BQËá,/$ò\˜cÓ§Ó~œ='é3zìÕH‘çvi`èóRç%Ï×q¾.äçu¡)­;iV¤„„y.ý8M:ÝÈdYþ¯ý$ú¬Ö8 #¯R®ßø¤ÉE)ôbЋ‚ß¾çc„ض]ñl{(Éó=BˆÝs›<Ðä§4q‘ŸPã¿gÚê"éÿ7ŸÛü'«ž‚C“9æIEND®B`‚fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/cd_group.png0000644000175000017500000000765212162366654024113 0ustar glaubitzglaubitz‰PNG  IHDR04Ì“»‘sRGB®Îé pHYs × ×B(›xtIMEÜ5 I¿9U@Kì£ ¢„BòPÑ*IÃKQÒJó¡2…V †Ö›±'ÇfÆÛsù/ç²÷Z}Øg.vÆæÒ¼p¤¥}.ÿ´¾½¾uýà£ã£ãW:èÃzQ³Ù\`‡µöVcÌ*Y*"‹E¤ÎÌmcø43ŸÑ·ò<ð|³Ùûh6› ‰è­µwº¡m±zÕªz£QGµZC¥RAÇ( ‡<Ϧ)ÚíŽýE{pðPDDƒEQ<­ªßn6›gÿß4›Í 3ßÏL}íuìÕW¯©,^´E‘#ÍRˆˆ(T`µ¬±0Ö"I$I§ÇNãÐÁCÙ¾}û /ò7"òx³ÙL­~øá?`æoõ÷_]Û¼ùU6Œ©© dYUƒÙ€™gωADá3"£Z­ÂFqœ MS¼ôòKéÁC‡ÚÞû¿Ø½{÷?}èšÍ&3óßöõõþɧ?ý;•Z­†3gO#M»`fÍ*L00&(K˜UœÉ€ˆf¨ED "DQ„8I0>~ÿúÜséäääßçy~_³Ù”Àc=ÖWù¿-_¾|ó'?¹µröÜ&''f;_y‘“³Î(>‚µj ÖF3V!ˆ 6Š@Ìøáÿ={ûر½Ì¼ó˜ø•<öØc}Îå¯oÚtòk¯ÛhY–Ϋ|X*æ:cÐh4ÊïÒŒLaˈã?~å'nïÞ½ÃÆ˜.‚/¥ü3Ï|øÉ«V­üĦ6Ù‘‘Px¬Š €ê̪‚Y`ªx/ðN!>Ü3Æ@€RI7A•ò,ÃÍ[¶ØÕ«VýÖ‘#Gž¼˜ŽæNûÅ… ìºóÎ;ª§N½ƒ¢Ègž©†]VETAØw`a˜ Óϸ|®@¥R…a3­-q¹ÍòZþµk¢Ã‡oܲeËÑïÉO<ñDbŒyòŽ;?[kµ'à\f†1fv%Ê+f”W¼Ÿµx,å½B•@0¥…à%Àè½6‚H ÜÎ;jÖÚ'Ÿxâ‰ä=˜˜˜¸gýúuµF½ŽN§=Ça ĦtFf†ˆ”4‘ÅŠÂ#/ di““S˜šê"Ë q ž+ŠТ:ã תðÞ£ÕšBoO/Öö÷×&&&îyW 5›Í^cÌs;v~®Ñé´à½+i£ŸÓ»§¸þñëÍäÔ¢X`£D +¨Ô—ެ3¾à¼‡¡ÓéD'çõ}«ÕjmûØ‹ÁìaT¡¬`VH¨»‚S³ÀÚ0Qðiz½†Z­z=Á¶­ŸI^þ¯ýè‘GyRU¿+"G˜¹ß2‰­ýÊ]w}>ò¾Á#Ž €ƒa“GÔ Àð¢`š®\ "@«ÕTΠ˲#?;ò…þþ5u#*6,úUH4ÔB,Z´yî!`¨t;._°˜îúü+û÷ÿï}ïŒ ß395™\vY_±bÅR{ã ×ç2LŒÁZFYˆxDµà.!„+\H¾,[<D`68~l¨]Nöæ-%ž?p`ðï>{Çgfç8,`LØÃŕЅ÷„v'C7-@ V´;ŒQ¬X¾:^wÍ:T«^Š„M†ãCƒ)`£ 1@µƒYá%‡" ¥:Y(‚EB@bX„R~hh(ðü¼ýÀÀÀ@çöÛoÿÝÕ«®º²§§Ðéö1”¼l ⨢P™ªR(м*0¤`RLNŽãôè(Î9ƒÑ‘œ;,;‡öT Š Þñ âØBTCkI¨ìöf® Bl &ÆÏâøÐÐ]_ýê×/ZNgYöôS"qHfQ#IÄQ<;)r6ŒJ¥‚$I@ž¥i ˜ˆa# BÖ5P%äYŠ¢èšÃš²Q‚‡²´ÔAáT=T=DÖZ;z4õEñ½KöªúÔ¾}ûŠV«}^ÿk Ÿ?¿a3ÍœÇI‚Îaã˜ÀL°†áÃP &‹J\1ïsxŸAT ÞäõB,k £Ûíbèí· U}ê’-åÀÀ@ö©O}*ï´Û·¬»f]IJ†”Mz  •ýo˜:ˆ 3 âa #Ž-¬%°’Ø¢R‰Ðè©#Žb° mb¨÷PñHIIÀ–eu i­ZÅ}¯uZ“Íf³9ð®M}__ß7ꌡlRËݦó,Á¦´€)g< 䮀º^o ··õž:*µ cc0% ×ÞÞ… D˜l€rp¦‚82hMNàôÈÉî‚ ¾ùž¦÷Þ{oæœûóïÿàŸ;Îù0ס@âé\0{Ï0&H™Ù0hZ˜ƒÓspFqâL5'Pµ1eãbÃ@ à k ^õ'ù³{ï½7{σ­Á[n¹åÊ‘ÑÑM×o°a{¨ì ¦ËééùS0µ+r8—‡4DAÊðRQ ’„ž †Ô”ïˆ jµ~úÚkéTküvïÚýµ÷=ZÌóüþcÇŽí}éå—œ1 f×—à’FÎ hºŽb•=tè‚,ˆ-`‚ÀsWÁ—…ˆQ­Tñóƒ‹sgÆ^'÷½ïÑbiݾ}û¿œ8qò ï+W®äéx­¢P ç¢ašåEèž($ÎÌy”Â~« ”4ô¸´v¸ìð"Tk =ò‹âÄÐñ“Qm{衇Ò^xá…lûöíßÞzòÄÉ+×ö÷[f[’ÂyvPK¥Uʧ–3P1A,£Ðº  ŠX“àÀëûÓÓ£§^¢hÛ»ý>ð®¦Alݺõ»íNûŠ7ß¼nåÊ•QOO#Ìx eâfi˜–ΈÙk ¹!ŒyFyf‹Jµn'Ãëÿóz·5Õú¶ˆüþ¥vþýüBÃsåÁü½F½ñxuë¶[«Fò£ÝÍQ8¼¥°ø •¢Ì¨9 ï ¡¿%&0ºi†ÁýƒéØ©±N·Û½ÿÑGý~ýž'ú~Pi!¾p]¿~}uçÎÚÛÛû—6\]sÍúäŠ+®„SB–;äåÀÊ;ÑÔ—UæÌ@§FGqüØPvrøDÑjµ¾öì³Ï>uøðáî¥ý<ë{@ó(þK`®¿þú¾Ûn»íî .ÿ3®^¹r•[¹êêj¥ZGWW*°6BžuÐnO¡Ûi£ÓšÂððPzjdÄ8çß:wîì^|ñÅÜ¿ÿd©à|J_xï=Y`ÞÝŸ¦ V®Õ+V\¹yóæ­Ë—/ßT­Ö>ÇÑBfÓP•„ˆ²Âù¶+òsívwôĉãoìÝ»÷¿‡‡‡OèÌ‘)ù%”wï×è‚Ýç Î#É©\°Æåç¥TlZºåšÈÊ5Ÿ‡÷ÓJûâïF«¹BsžÓï¦ÙŒfÖ eÚIçî¸\H—_ÇŸ=hÁ<×s¿ýè¿7¿ãÿÀ¯ƒÐˆ©aIEND®B`‚fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/browse_folder_16.png0000644000175000017500000000101512162366654025436 0ustar glaubitzglaubitz‰PNG  IHDRóÿasRGB®ÎébKGD÷š?Eµ') pHYs  šœtIMEÜ… ·IDAT8Ë¥’ÍjTA…¿®î˽3ÆøƒèB|q'.">€â¸Äñ)\ ®ÜúW®D‘¨;Á $D“!¹]U.î0É ¸Ø›C×Ï©êÓ'¸;ÿsÂÖ€‡.ñ‰K°£ŒÙìþÅ¡¿8‘`4ßgo?XQ° Vƒ¢“}¾xµ¯õÁõKCß\DÌéýƒm<Ÿó!Œw"–µ`cô(,ÏÛ¤ ìmÍbšá׮пyâÜ•›ÜÇ'c¶_>»•Ûï^£¹ÉÇÎý•UŠøç!sº~í1j€xfu@Ñ[žŠ§øî'üÛ:TÕbñb +¤ºvŠþüëÓù‚²{òÿ‰  )g F¨ºí Ó ²Aå©vЉlSD l¹A”† ÎÍ¥5Dê ©6RBÕà PçŸ jƒd"–­’ػѻƒ[ƒaŠØÌ@¸‚;õä±D¶õŸ×VNŸï4~u;V>kV°#’£=÷lïÛ»\Ž‘µZ¹ÚF‚"òE•;p¼íʳIEND®B`‚fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/ipf_game_16.png0000644000175000017500000000114212162366654024352 0ustar glaubitzglaubitz‰PNG  IHDRóÿa pHYs × ×B(›xtIMEÜ  ®œw—IDAT8Ë’=hTA…¿Ù7›ý‰Én‚f7„U±[%ŠZˆV"©­umc0viì mD ‰bea'’¢$Üd“É{¹÷Z¼5n“ ùg¾{ç8`îÂÔôŒ™&ñèE³¶¿¾ÀÌäó›§óîüÔ­òñsI’xn\9{(ƒ'Ï_“¥_ÞŠW‘$I–——¸}õ&ÝîfŸÔýS\­2·ð˜ñæ8¢’xUÅÌp.¯­ýÜ÷õjuçf†ªâU~ä‚FcìÀSEEñòÁÊÊê¾Å­V çÀUÁ«Êƒ‰‰‰ Fý&j£}-¨°¾Þ¦V«ï[Ün·Á9L QÅ«*jÀäô®Ðzwùa˜aä{˜a¬o=‚™kc4 ÌUE$?UQ%†m½ „0ë'茌Œpâd‹á¡¥2ÅâY–’ídt:ßÓÞhS¯Õ‰1b"xÙÅÝŽ‘bq€«ßy0÷€»÷î°Õí2v¬A Ìòxõ ÖGb RªìÎ"MSÒ4ÅT 1âœÛ¤‚ªílu»”JeB8•ruA¡q áÏ1DŸ®|º¾nöìÈ©ÉR JÁ%x?K Cå2†CD(+xïɲ @@³Ù¼œ4ϼ¼tz´$"ˆÈsðêã·^ð ÒYú0ÿ •f?v‘¸¾½IEND®B`‚fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/adf.dat0000644000175000017500000000172412162366654023021 0ustar glaubitzglaubitzxœíÑ¡ Â`à¤ÉŒ@0H ‡è È&%Á°c$ 0OGeEBò}âòÌå]r»CÑô+ï?ãº|<tËßèÞ’Ù©LÛz‘T«d~«ŽM{¾ ÛéçžIrßtEm‹¶ð ` £ƒé7fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/mobygames_url_16.png0000644000175000017500000000142312162366654025452 0ustar glaubitzglaubitz‰PNG  IHDRóÿabKGD@@@§ö/f pHYs  šœtIMEÝ·RT] IDAT8Ë}’MH“qÇ?ÏžmnÓ½èÆÒM-µ2!È¢ÈDH¢¥Q$TÇ KuèÐÁe·.QaÐ+ŒŽ‘½(E¢‚Ø2'+™[móy¶¹ç¿‡è¶õ9ÿ¾¾ðû*€ h騻Úé«EO¥˜ŽŽh×19šv…˜{9ÿwåXlf%[À¥9iÜÙ€m«I.™Gk÷ãô;qútµv¡Tȇ€Žm»_ì}°½ìÁ—‘IF?9YIàù'iéëé>Û‰¯Ù‹’¥™_ǽ;:Ä*ãÂ@wK_ÇmSÏ‚V—›¯‘É=À °ø Á¬ž IEND®B`‚fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/joystick.png0000644000175000017500000000611012162366654024134 0ustar glaubitzglaubitz‰PNG  IHDR04Ì“»‘sRGB®Îé pHYs  šœtIMEÜ 45ßì¹)tEXtCommentCreated with GIMPW µIDAThÞí™{TÕÇ?çÞÛïyv; Ìð4 ㌆ÈKŒh¤’J•@¯,”EŘqS»ñDDLA±d@fxTvãFÉn²Æ×:£CAU‹8¢fE¢²qƒ•,0Ìô»ï=gÿèî;ÓC÷¼Le÷U]çÜ_ßÇï{Ïïõ=WC–ݹ¸ô¸­K&](] )…´$­­{mØ€‹q¡½C‡sÇ¥KH] (¥xâ§ÿl_¿úÁ5t}vÛ‹išôööÐꥶæZvýxÿ½ïó“ù'¤)xôÑG®‹/&Ü@ù(”PXqIk[Á;—òíþ;uÑäJ˜\Éž†»ÑPHŠêëíû*¥rÎezžu‡`$’ ¸"Øw`I”R˜2Á‡Ç>¦³³€úú:"“wß>B"‘ ¬¬ O‘‡b¯oA†n 4”ÙRy Pé•J†aŒVßS“f‚=/í»â‚#GŽewuue×Õ×Q=õK ´lCUn½’©±¢¢‚cãÆÍ# ú½'Ýp yá…ç1M“ÔsJ©¬yjÄž3mòT„0³´sÇNŠß9DÉëo"/\@ è^0ý³¿ŠÐû€Ì›3sçÎ{²nÆŒö¼¦v:šÐœ‘¹Då½á@ßB L‘ÀåÙ_E p:œÄ¢Iܱh’uëÖl:::®˜WWW@Æ%I‘DÅãD"&Ñh4o =ú{þãùoj´ïWâ/dÜÑ÷¸îöÛ3e :y’÷ß|¾~ ݽ!Ö¬~„ÓŸž¢­­•î_ÍÎ]M(¥B 2²}W«XÃh¤ ÔùzƒDLæ]Ý)høN……żôr 'Ng꤫9qê8ëÖüpÐçi¹”–iOÄÓþžúíÜÕÌùó]X–Å«·ÞÊ‘±cùóôé\¬­åÒ¬YöµÇŽÔ [7-€iÀó€™öA3}<Í”)%‰Dœ¹sçá2Üö8¢ÈÈãMÜÛð=Μ;…Bñ›½¿²ÿs{}Øÿn·›–[ØÚô£!"…¸±´¨è•qMÞëæÍËr¡®u«#ݽ¡E:¼eÇ€×A4œÀãs '-ly“®i%í¬äpõ½‰»V®âÀþ×ìãµk†®š;vmÛý7Ë–{{ï?0þ¿€xœq'ò»gŸeÉAïÓÏüûî‡|¸ÖŽûV³­y+óç.à@û‘UâLn6MàW¿î{û“«¦à÷û „ÃaV¬ü-{ Q@áÔ)æ/àšÜ„p:³R¬iZÕ¥¥~"Û·g=kLY9JÊêžžnª*'2aB[›7ã4ÜÔÔ\ÃÁ7Ž<œN½¡^JŠKq;<öoù+Y¶"È… xîÙ_³hÒ$n«®f¦¦£·µqhÉR;Íö«z&›twuÙ?!J)}` TTT°mÛV?¸†Ù DãaöíÝ2ÀáÃï’LºúŸâ®Î8æÏWbÌD,Fi{;"L‰ÒE?}rùüyrÏË—/£”blù8„&øã‰ÓØã°¬_»Å‹ãK7s=Ý¥._Š&@ ‡«V¬üFïÿÜ{)‹Ñó'À?g %Ñ•(b±¨m¨¯²’®3gðÀWYi×Äp8Œ®Û¾¯iÁ`‡~°–`0HKKËð\(«©’–% õ…—°4àF·¦Ki¼}éG#ÎVNÀ±ô¦<ù–”ýýߎ«YOþ”xU%g€Xe%7<ñdº™3MË2‰ÇcÔÔ\ƒaÔÏœEíµÓìqØY¨ Èkw£§Ì¸jB‘зZçö?>ÚÔC2™ÄíqãõàõxÐuÃb]×í®Ó{ãW¸ýøq4!ˆ'â\¼x˲ì.T×u’É^o)´¿zÀnê6üpóX’PO_‘Cw±R`βåKoѤ2¤´^nmÝsðéŸ?MiIiΦ.ãÿn·Ë^P¨Ë4³Mù˜±© òzñù|©Â »©Ë @×\ÀMÀד–»Z uÈŠË–Ö¶¶Ã€¼s©Zõí»r6s»wÿ< BÙA<¡)))±u‰Dœòòqv äòý¡\hvA‘·Q)uÒ”‰½ûxcggg,eø29X7 pOÃwØýäϲ¨ÌP„&«rK‰e™ÔÏœEoïe±?¯ ýkÒL4îyißË€9wá\Ëï÷“IN~Ò9d7*ÜsÏwÙ½û©aš’L&˜Q]ûï¾3ŠJŒ’ºá¸- ¶£ÉÏFÊR/UP\\ÒßÒA”–®lÔD/¦eŽÀ>踽¦vz3B¼Ÿ.ZçpÎôèH_º‹ÀëÀËB‡L+‘ÅTЙØÖ¼Å&4_™[ ª*'Ž.ˆ;::>ëèè¸pVWWÆ®’qi%E2©âq31­h4šL$VYY™ÇSä)(öúÆx n1tã9!ø™Ž³qxœøÊ¸yþ­¼úú’HÄG™…R>ÚºíG<òðúK|Ä™ *MêEÚ¯tàwuõuOWOýÒûÖ®yôX¦=Ï Mæû32¡RµbTvìj¶çÇOv*·Ëe=óÜ/–Âíõ‹Årí˜X@⑇×ÿaÚä©o aÖ<ÞÔxl¨}• °¦í[q:œÄc[›7sóM_#ŽbŽ‘ˆÆÃö<ÓԹĭH]šEÍÈ׆lÝfœo/ ¶ %÷å<ôØ'[¶lÁé6èéí9€õk7d¯ÈŽÄ’Qœ.÷ž»V®šâ÷FÄ“u!e»qúÓS3ÛÚZ÷SõÐu d³3éäÂñãÇúý~⡬_ÏÅ7Þ çøñ! Ípê@šÐˆ ªÆlmÞ|‹î0^ŽmÚP'ljÜ„¡%q;<÷ß´àf¯”ŠÿZ²ýÅ©D†Eh ‚L%îGh¼.Ãý€•Tƒ™­àW¨Åååc‘RÒµ?“&LÀ5m¢ªŠáš|+©Í"  øóçàõ¸0-sÕÂù D†Ž[´ˆßz‹«?øç{ï1¡Ñ4 Ӵдì×u#Ž…HhÄöw¸ ÿ\.ÔÐÐ@$Ça8¨­­sJi!¥ä†gŸ¡pÅßòQQ!Ã!4ÅÅÅœë:‹Ï[€¦ééþß¿ÔÏÙ³Ÿâóù§a÷‡zz?Ÿ =õÔSljÜ4¿¬¬¼ÌãöH$…§¨ˆëš› ‡C„BCšºÚëyíµvfy6S§^MqQ Jvsâäq~ÿÞQª§×ä"4Å—/ß¼ÈѺðz\÷-\ø5·”–ýV…¸œNœÿ°Må„ñ8Œ¹œüã Þ~ç¢Ñn·‡«Wqýµ3 ¹÷ܹ³÷ø¨444„߬W!LÓì+Iª_yRWfœ¾yêÜÂÂB@€D"no×뺎ÓéÀãñàñxršEÁ`°¼¥¥å|ºÐ @åÄñwÝ8{ŽH"sžõ‘¢ß dŸ .— §Ói§ÌLBȵû<€Ð¬ji¡)€Á‚Xóú¼ß¯­­sYö—•—t|+ iš¦ ºuž&4.Ÿ·ðïÒ¢é h–iV¹Üîôw«‘}»úKHšÐT¤ÏɤµJ)%¢ÑòáÍXÿ­wTªY»B§T–ÞÖõÓgéè‡Chs!ˆþ»ÔùZc•B¥·¯é§O›—¥ÏÒ Ð÷#4*_/2©”™]꜓Ç`òœ«µV¹Ûí„Fæ0˜ )§Óuª7Ô;©¤¸4kƒ$§«¤2•в\GÊtf’}z©$HìyßýR÷PReÍé|hȈÆÃwïÛ»ï߉ø$þÄ0§{z»¿›þ5üOL÷éúí@ˆ¿VJ»™®ÂêóÈÄŠþW` öæ¿/ä ùBþÈÿ<³­#WìHIEND®B`‚fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/tab_hardware_2.png0000644000175000017500000000264412162366654025151 0ustar glaubitzglaubitz‰PNG  IHDR szzôsRGB®ÎébKGDÿÿÿ ½§“ pHYs  šœtIMEÜ "&É$IDATXõ—Ëo[EÆ3÷^ÛqÛIhœ&ikµªŠ"EZ RB± ª ŠTBHe…X°bXdA‹Ðš!øxU­ $šôé¤$vÒ&q›&vâ{gXØq|¯1…i4sóÍœïÌZkî¶¼ôJï[RÊ÷ iDV¿)¥²ŽÒGÌz&xâµOI/dP(J1‹B_HAÓ 8wüÍ‚øàð‡ZŠã®\¹ªÀÔõ4G^ï%è7\ßEÞWQm!ksô³oJM#áýýýd³ÙÕoóÑoÖ»¿Åï—ÓØªvÈL)ع-Zµÿ«“_ —ýÞ'ÅœªØ7†I‡ƒ¾‹þü«åªm€¿€`ÿSïá8v¦#Ö[p(´ž}¡»á.r°áì÷5v !1 ÍÌìùÿ쩳}“©± =[j4š\n €›éF.ßÊrÖZ×áþ§+€ö¤õí%£6g€P)«¯^ØFWìQ|¾õùùÇ/]ìÜý]M› ©Ç ® (±¶í(;ˆÏ2˜›½^sâ––{°,ƒÎ÷ºÃPÐ'“£y»Ð5²óÝÅþWõÝ4¤œ8öùàýÒjMäìå÷ÉähYqjq‡é㣟„3ÙÌ}«z€i\ÇÊÿ%×péÑh´râΘï W²1×!Ówèà²eYK9àq½!¨jûÆ3\›{n-Il±Å¶íÅ2¶?£wíáÜéúV¿çÀèº69ÇïÎRáLZ~ãVOOOÛðð°-+ Úµo„æH¼¬Þs`ÔU×#—R»]úЗ§ ¥T8›eYP*Ï<Ÿ(«svÆU×#í‘‹ëD.‰oz¨¬]­®EÀht;7æRÄ¢—¹=¾³øý`ßËŽ”òV"‘°Ë$®ÔD+ ʳE ¥µ“¿ëAü–B2íÉì€/J$öððp€VzhÔèb*jtÞQɹ.¥Ag{7Ò0=ÀBOrú¶“óþÈV .Ö3²µy3‹KsäìB­¤¦Çˆ„cMLÏ\$éÀ²‚Ìܸ„ÖkÃ×»rI(„¬Z,ÓOÀb>=E$cv~&Ücvn „›Ú˜Gs­¯×%¡e6°¹ó±ŠZ+’3#(å ÑD£¶¶H%!Ò,Yv|L§– 7D-š‚ã(;¿rÈÕ?kXXXô8›©ÔiY¦ùbß#VéõsSܤ¥½™Tò&][Lš7´J.°9.iljejNÿÙÑ`‹ü ÝÞÖÛPýé[RùãZ)„Ry&:6²9Ä„w@¬ÓDë(§„ö‰ÒQ~úaœ’P$ÂäUpŒÙi6K‰…д‘\ u>táAbž9Cºp€Qà…÷ö€)Ln-ÜÀ²‚4…ÁçkÀ4ƒ„Âàó1Í ‘fI ØX$ÝØ @XŽo-ãB µÖfÇf¡„µÖ8Î Zw”#Qަ­µÛÕ^%r.WŒf++y»”òΔ³Ä@”€¥œ¥¿J^!âÄÀÚL'­Y{J ­ÁÎ)€%à6 *(C£\GA^75ò+;,‹@6‹YØ!é¬WVVÇ)UkË…’­uzrêï¨íØÙÕÕh M­µB¨´«Ef2d2™¢SéÙ!áî-jÍ‘xgpð‹·•æ£€" …÷u¼ÊRÊߟõ^™t•vÑ©kò;}ž{ÓéNåé š0ªWsIEND®B`‚fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/tab_setup.png0000644000175000017500000000404612162366654024271 0ustar glaubitzglaubitz‰PNG  IHDR szzôsRGB®ÎébKGDÿÿÿ ½§“ pHYs  šœtIMEÜ 8>ONΦIDATXÃÅW{PTçÿ}÷îÞ}/+,²À D` ¨ ÖBHãMÚ¤…ˆ¦S±35ÍŒ+Ú±5Ó6:¥¶M«©É85ÆÑB¢v¨¡­/*©+EyÈ‚`]¸w_ì²÷ô`‹ZŸ1ö›93÷Þ¹÷|¿ïwÎùsáÿ¹¸Gý0))iÉ„ öªTªo~΃شk‘tyMqû‰äÆØ=ý°‡a`ýúõJ£Ñ³cÇŽ©ÙQ‚Ô?_ôXöÝ5ú¶©£|"¿Hÿµ%\»ê¤\>mvŽl³ÙÆ#11½½½ºÖÖÖ322XRR6oÞü«;wn¸gÂ1†Þóø9aÞZ(bÕŸo$ßYeì7¼Aže}ç”°ö…?É{~ðâ³ÆÝ»wcË–-½õõõ&ǃ´´4occãuI’ …””ôüý’˜ˆ ç І†µÐf¼'4 2a]³¤*Ný¹wÛ_:8ߥMÓ¾ë.>ºq£êŸÇcu:]Èét*$IÏóGÊÊÊ••…ŽŽŽqŒ±˜{è«fsýœ…ObHò|”÷<ú9  Ú0oè€eæ$`ðÕì7Å ³Ù>½é›ÖØór4ïu-|*§«¨¨ÈQWW]ZZ ŸÏWuàÀÏššš¡â¸VÝmóÁJ¶6Ê2«–ó9TÃ^±é‡ñ cŒ¡GR^áÇN7‡•ª X6°‡ˆä… Š]ß¾1·JጇÓV4ŸÓWVVRmmíg{÷îUWTTPæ¸1gbÔÀÙºzX3æ¾|ûÆ=o³Œàñq—"bf¿ÍÄq!©«ùøÇ˜±z3ùÇ›ñUWU$ÑåW)X•|ttæ–””ÏV¾›ÔÞØ700—““3 À”åË—O5E¾–ŸŸ¿ Ú¾};˜DDèú l=†srU¶L¥“ü!ôTâ¢"£÷àb,ñÏ)U \EXu‹n–••‰‡kíÒ¥–Zºt)Í›7Ï @sðàA*((pÓÓÓÓ!ÂUI’àuõà­õþáŸ*Úb"c¯¨Ôæ,ô\&ÏÕç¯ÊñúÅXóþû¼¥2>ù kVrœålj8ÀJ^/ÿûöá9oLþÆ¡÷õ,ËÞú^ݧ¾ÜÜ\0Ÿ>}Z9sæÌ…÷äæ„Z#£t œ8áÙ‰Z¨´€Néõá þôºÛ½2u .ßMòábù´·RŸJù¾!ìàájù‡ixP!ù®Gù†E“‰WKNwØÙ p¡‰ðÉÖ¨O¯ )e1&ð™¢1 à4§ãF[ÃþÎ>纒rÑ¿^ó!:ñkEZš-{kl¤i¦X6$+Ü'úö‡Á ‹õÂÃHVA«6aH ’z8=4ävyÝ»êz¸?|ê²®X¹ µµµ477=Hƒ»C GÚ'wi—°ÄâLý1GJ3(;Uqþ³~×€òŠÃãlê ü£\œÛyât­699Y544” IRJ__ߦÌÌL¤¤¤ø:ED~<ˆ:ÝÓÖU2=zTWÔˆMKK‹ËÎÎþ €96›m¹V«]Íqœ•””cì¥ûú&z€„ˆ,e{GÝzø) vOžŽãÜ&“É/Š¢¬P(.€ÝnGrrrîMiîÞ Ø–§x,èóX¸„ív{¯V« z<oddd Çq}‡ƒãy~)(4õ½–YÓ' ž}l3!É7A´··w[,–þþþ~A©Tž€ŽŽX­ÖÕ®fΠð4c[žú±0è÷û½N§Óm4û•Je=444 >>~JÅ•|0´~^b ­$æŽö¡ø¢c5ùcJQ<Ïyžá8®]’¤DA°®ºC½Èf\ p?3ÿâââ‡/ð‘ Àñ’F£©@ãǧ˜˜˜NÜ£—ჱ܃ƒƒm<Ï×q'_»v f³9n$þ÷ÇäIyÝãñ´*Š«7Á1ÆV<º>|8T¦2ÆÞU(¤ÕjI¯×{h¿´Üv !mDT‡@‚ è¼ðDÅD€¿3ÆH«Õ€3O„Q« À"‚ßï€YJ¥R÷ÄaA  ™çùöÂÂÂ_þ¯wþ ʼn2°Ú­¡IEND®B`‚fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/floppy_16.png0000644000175000017500000000124612162366654024121 0ustar glaubitzglaubitz‰PNG  IHDRóÿasBIT|dˆ pHYs × ×B(›xtEXtSoftwarewww.inkscape.org›î<tEXtTitleOptical Drive>gº IDAT8’¿OSQÇ?÷zûZÚ`Y ABʤ¬¸€D‰&&Æèà¨qÔÁh ƒ úWà`ˆƒqduòO@ ° ï½’×sÎuhÁ"r’“{‡óýurܽûw—Í⢙…½K9Oů¯131‹+AUçço„$)34={.‚íÑ;äY67>- I’°ùyƒOŸ‘çéÀ¨;®Vk,¬~áêÌ "‚ª`fxïØßÿu¦zµZÃ{™¡*í¸žZ£1ößÞ9L%ˆ(fŠ÷=‚Ý3Á“““xï°NE˜˜˜ø¿ïQp ¢´Û-êõ‘3Á­V × ªUE­GðøÉ£“Ác¿ÿü­ÿzï‰1¢"AU¸2}™f³I4Cû :ÐYš“¦9˜ :èGh4ÌÍÍrq¸N9©P*%t»]érxxÈÚÛ5¾}ßfª9E«ÝpÐg9¥RÂÏݬ¾zÀ‹—ÏÉòœ±ÑYš-âœ#š!¢øAi–0T:ÙEQEA4#M3¼w½;°^,¯jÅîÞõúYšâ UªßHÖpÎcDD]í>ØÚÜZ¿v}®Úc¿@¥å%Ž::G†+"¡V«Q.WȲœ£¸#ããã7#ñã­Û Õãÿ«Öß½'ƈsNJ¥ÒÊo°€S Þ{)¢IEND®B`‚fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/clear_button.png0000644000175000017500000000131512162366654024760 0ustar glaubitzglaubitz‰PNG  IHDRóÿasRGB®Îé pHYs  šœtIMEÜ#2B£ [_IDAT8Ë“ÍKTaÆŸ÷½3wf¼8ŒˆM¥˜ ‰b}!µ³ ƒvÕJ"ZHø…›6 ‚ ¦TbSÎBâBR3'sÌÏ;÷¾ïiö5)sÖÏùsxžÃˆ¥V_—vF×ÕGŽm×+ªÖ{ãIî/µ¹ÿ’Úí1\/4¶4œ;ßÅ¥7 $@ÿef2Eék;Ñé}ýqkk1¨ª2^2Lï Uïu•è¾ÐŽéèd¦`9½ îÖ7÷¶bرÅsEg×ë›ÜD„ÈÄHF8Îã[öø®€h4ªù ö™•íÇ¯Ä æ0óÁ.¤’‰©páÞ¶nG€/ŸxÀø ¼æ'#Š"•ˆ"ttFÛsØ5tðTþ—uì_¿L†ŒYO žN·qMs쳊|åóÐõaÄWDwëÚ’‹s£f€»]o¼f¨&XÕæá\…@&½ÉõC°¬ €zžÅìÁ«äü˜LéðHy ®Öô‡uÝUÆdÓðø*~jfÇ ÙÂBðHG"¹=”o¯--ó×ÖøÊªõ|nŒ)BÀÊnþ¾>Å–@Væ‡<ÞªÓvÇ¿F`úà ’ØJ,3VîûŽVs rŽžJceñ•›_—Ç`eSPt7R› Ò†$ÉDY2S`ŒŒ¯NåÁ¸ä\Cli4›K}Ë“4Ý@zk¹Ì*®N77“]ØßºñŽª¾¿²8K§–®sI6‘FÁÚB&µbIé¼,JùÿÞyv"Р€ßfD%„D*§–úÖÍ÷jõ|‚±ãâIEND®B`‚fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/cover_overlay.png0000644000175000017500000003276012162366654025166 0ustar glaubitzglaubitz‰PNG  IHDR€œ·*£+sRGB®ÎébKGDÿÿÿ ½§“ pHYsÄÄ•+tIMEÜ :j ¦tEXtCommentCreated with GIMPW IDATxÚíyœ\U™÷¿w©½ª««÷î$Ýét:1@H@AG@ä#*Yf7Fßyut_DT*E%=¬ÝI§÷½öíÖ½÷ýãÔíº½¦+$°žÏ§>ÝUu—sÏó{ö眂Yiš˜¦I‰Þ~$—¦ €•P¢JT@‰þþH*â8©ÈsJôæiûk¾QXŒ—m/©‚cšù&`Ø^3A”üqNÀ‘_Á±Ë|Ѐ,Ë¿?,X’ï<€/ÿ×iA‰Ž-èyƧ€Dþ¯9“˜-|ÀWWþ½\À1 #/ýà¿ó g3E›»pµ¶¾|…a˜È²Ãvˆ¥a¦ºTnÜ熡!Ë“q#®©äo§c†íýìhºkÿ=ÒÞ½ïüyžgÉ<hm}ù ù–ýGQ¼ìÛ÷a Cª±ñ»H’›ŽŽÏS ’dÒÜüsÚÛ¯$$ɤµõQL33e²ÌððOùµµÿ—²²ãè켓tú©ü­3cÃq8hZIòàp8ÉfGñx˜7ïÇS^ûï”Lµt8yidÁX…ÆÆ0[¶<Ê£ÞB2EÓ’Ü|ógùíooåÕWbëÖG9é¤Åäri¾ùÍËØµëIÎ8£2!ñ’ä ÛM.—`dd ííÏrþù‹½Æm·­à…îã[ߺŒ­[Ë#ü€-[¡¡!ÊÞ½âã?ØÅÀÀFR©WÆ,V4ºPÇúwœß™•³.ÏBØ_FŠpøZ6oÞ@2™@–Áã™Ç-·ÏW\Œ¢(twwÓÞÞ‹ËUÇ×¾vº®“Ëéã$¾½ý¾ÿ}“ÚÚ›$ F¹îºoòÝïœtÒ»I$¤Ói8ÿüóX¶l±XŒË.»Œ_þò— ²ì¥·÷sÜ~»“ýû¯FQÜïùYEjEg³ÙnLÓ‹”¿t2ÙI"ñ †ñ1\®JV®\Isó/–Ñ´þ¼&]‡Tª]Oåµ@œ@ ˆ¢dÇÆ)Ë2kÖ\‚$©<ôÐCc÷ôù|<þøcìØ±çžû ?úѸð q»ÝcÏlšqÊÊÊ1ŒhÉ¡*Š •ŽŽk¹çž¥wÜñ,Z´”ûî[I_ßõ\pÁ¥<õÔ“Ü{、R)z{ûH§/徇,Ë|ýëßáË_n#Þ€a,\øu.¿¼“îî¯`šiÀ$0wnˆë® S]Äçóáñx$øàïæºë$ )++#ßÀÄ044ÜÏÇ>¶‡… ‰®§KÜ¥ª˜Ž”|Øê€Z[_]ÓÛûuâñõ¶SMüþ“Ñu/©Ô_òŸ45ÝÃÁƒ—!úH ÇΙs^ïòIüpø1@§¥å1ÚÚÎËû¨ K}ý×ðûßÉðð]ŒŒ<xPU¹\§³Žùóï/9…(à~àf ˆ™ÖÖ—õ7 €––—Ö¨jIR§IBŠiæ¦8N|>UH*I…°Ï45$É1åy¦©åÃZûw&†‘-…‡µ˜ ˲ƒ¶öóðhmiÛü‡8F̪¯Q:wб•˜8¤{BNòqµ-2?R¤gO’íñ”®”%®½™°ò{úHn×ÕJüz³£€•P¢JT@‰þž@7G¾@B4äJ<9¶àU‚|[®8*ƒ¹uÙ‚º ¢ý `sçýP‘eï!eÚ0bȲÈÕб†ŸÕDFP/qîÍ€,K˜f–túu††>‰ªN/±˜Fsó“ôöž€ÃQ8.×(+s‹e1 (/w‰¨´¶>_Êå¿U|M3øÙÏîaéÒwàõzQeÜ÷Š¢pÙepà€ÁϾ–Õ«O#‹ …¸øâ‹¹ï¾û¸æškضm6l`îÜÖYh‰3Èf³èºÎ…^ÀŽ{§``Žæf•5k.§¦¦’^x‰ææfÒé4‡ŸÏG*•¢Ô_ú€°Ç&Š’dùò.r9» 70Œ¦™féÒ6"‘óû TKÑu›o¾UUÉdJjÿ- Ÿo›7דbEi¢¾þ׆‰aØ%\´®+ŠÂUW]ÅöíÛyõÕWK\x+ÀëõâñxX»önd¹OJ¥RD"a®¸â;HÒy@Èc;¢ÄÇãÁívã÷ûKöÿ­§ÓÉÇ>v1“‰wÜq'žx"ÁàëD"À¤³s„úúŽV\®:æÏoÎßZ¡®®UWâÄ[ ŠDU× ë^¯BSÓw1Œ Éd;°g¼+˜‹±hÑ6 WLà“òºž*5u¼UJ r×]`ùòã¹úêkذa.’$‘Ë™(ÊÏDH²ç’³Ê1”è-—«Ž»ï¾•ÿø]üâ÷Œó2™ ##ƒ œŠªfK3üv€ªèêú.­­­ÓHó.|Ó,àm Y–Èå",^¼}šý’M»‡²,a‰’M‹S©!¤€•P¢JT@‰J(Q %* D%”¨€É¤i`¥Iû»Àý÷Ã%—@´´Óß'dÎ<¾ùMÈ– }o *ªdšÂ46¹çB.©üéOà÷—&óm€X ¼^P8ÿ|(+ x÷»á¿þ \®Ò„¾­ Ë ª‚éÁ`Á!\¾.4ٿߪj”z}Ò4X²ZZÄû½{MvíràriGPèõ‹Å (€àÒK]üþ÷¿æå—/Äí.… G›Z[á?þC¤$Áð°Â³Ï®ãÞ{?zôœ@]‡‘H&…6H$„ iÐÐáºë>ÎÚµ:Ç'Ž)Ñ‘']>ØW¿*˜B++u>üárà ³[i•ɈWÑ (ÜX×!ž_æóI(JŸOâÓŸ†³Ï†ÿüOq|‰Þ8e2'ü²Ë„/fBú% CB–³¬X!Mk2qN$ßþöa ·[\„ô[Ô×õõâ·æÍŽáSOÁ+¯@S¢â%~þ|øÊW„ßµm›ø,—θÝ4›¦˜û©è߀‡×øÀ„ööxŠÀÀ€`¤•0 1ˆÄÍ­‘$ „Þ|³ø+—ÎoÈÙûüçE˜mÂá;¯|°Â !ÝSÑâÅpÑE‚ñ‰Dᜢ°gPÍÍ`5÷÷‹íÛ7ÞAüÍoD˜—P,e³ _´ªªÄÜjZ! Ëå`tTÃ2 ©T)—|SUèé|S”"°n¸áD††`´ýæee%F¥Óð©OÁ{Þ¯¿.Ì­5ߊ"æÚ.Áöy—å‚`N¤D¢pLCCÁlE(›î»½1J&áÚk…ÉÀ)§˜¬ëÂfÇbⳊгS)!áº>½p:Åùº.4I}=Ì™sö(Ñ‘ñð“I¸ê*8ë,ñ^’³LS0Î4…«j!€‚ã§ëÁàÔ÷p»Å9–61MqN GI¯^-&]’„t>ÿ¼`äDóéñ}éR!ÉóM³âI’`®iBy¹`ÜÄÄœ¢ˆûM§¡íÇÚ#ŒŽ0%ð­o †ZÌ3M8ç{[j;—QÓ55B˜¦H<^Hµ[@˜ŠéÖwvMP ¥RÇXGaÛ¶r%œt46šd22Çò"º.¼öLFØÖÓO9zÓ,¨YÓ©Û›n‚… Åqú<ù¤°Ãš&$XQCƒA×ÕuÚYßE£ ©”˜/ vM1YÔõcP8ðßÿ >Ÿ•v–xé¥ç¸ë®3ñùŽÍÍ!.„K/ ê쌶¤Þòº-õíõ¾ƒƒ°``p295ó*ë==â{BM׬kXB4ã­û$í¢¾Ù¯i2õõÝ8 üË¿˜cO6 ÕÕ&çžû^–,Érï½»v ¼Y’ne>ñþïRm%Àêêx£Ñ‚ãfyçvÆ.\XHàøý‚!##àd2"Æ—$Áp]‡¦¦ÉÙTKkd2…¤ÜtјÝiôz êM€¢Àg?k²l™ÊJ“¡!èíqªðZ%dYcþ|‰«¯†íÛáŽ;ä7¥Ú¸x1|îs‚±Ÿý¬°ñ_ý*„ÃÆYaV P` iê!’$T·¥ìN™$‰ùèéŽÞâÅ&%ÂLL×oáñˆóey<Ø&j€D¢0ËUß,É÷ùà§?Y6ÉåÊ0Má Yvϲy¦)¯iP[«±ti7û÷Ïÿ›…gÇ'Æñío ïÞ4áÑGEZ|º˜Û¦)JÁÁ³üËa´®©(";×Ô4>d³z/,M2•„Û?›Nˆ‚Q!™ô¦jÀ+¯,8?“!’T¨:ZùíPÂa~+PøµÑ£EÑ(üèG"a’Lªq’$l¸Ç3^ºì¶ÞbZ4*ív¼{]×K$8\®B¸XQ!¾s¹ ²„ÀÑDï*&OG>_a¬‘ˆx¯˸#AÁ °ŸŠ"&ÄRG‰D!ÉŒw¤¬‰x×»^býú“q8tdYA’ô# MÎÖEAmmAb¬qZc²z",F„Ãâ½Ó)Òàb#l€h´À4ÓfÎçþ€Ï7ž™Þ6a·3Î.8–GŸHLŸ²û†!,)¡ÐŸàHDÔ³­¢†]ЬЗ$‰É±œ®Âq&K–¬æÿWg`ÀÅ3Ï<ÀîÝátæ&%b¬seyæIµŸcpýõB ×ÖÂðpaÒ¬KÂe¹ŠMT½vfK’Písæˆ÷}}o^– À±„Àž­›N•Û½~;åÐa Ý÷p8£p¸´eþó? j5˜lí‰ {è28‹Ix<&†!1o^†¥K?ÆcilØ0H4Zƒ¢˜44€55‰k Áí·C{ûÔ„aæ|âBú«ªÄx»»Ç3Â2CvS‹g™X€±NÓÄkÿþB¨kå âq¡!TUŒÓò{&2Ëš+¥›Ë Mi1±¿_D º>}n¢ÿpXaàlL€$ i²‹ ïyþ|ñÀ ŒÈdR¨4»—œË †WU ‰‰µ(Ãp»³¬Z%1w®D*%ð´ÓĤXï÷ ©Þ¼~ò1¦‰šG×aíÚÂd›&|ò“â|‹öíƒM›&ÏÇ?ýÓøã$I8ˆv8p÷Ýb|—_.òvµneñ,°O%­v0ªêøº¿ªŠù²À4utLkÑ ºúÐ’îõÂGó}‰?,ZÆW¯“bå±5­ðÀ°‘öŒ–aˆÏ Cg©Ë‘q »š¯®6©©©bdÄS%R–áøãáúëMî¿?‰¢ø&Ûnj$ID(vf¨êäÉ•åÉÇ56Ц »Ö|òÉBwçÓGoÔ±>ã ¡¹¦¢ÁA!ŒÍKÑ CfÊŸ¾f«ö|Î9bÒvî’èr fkZaÒ=a âñBx81_mÅΖz›.ï]V&Ô«Ï7¾SÆ:'›…E‹Löí;ô³Nuý©žâq}}"–ŸëÜbóõÅÐúõÓóH׿<ôÐøEù‰Nõ½Ã!Þ¯^-Æ¿e œp‚¸æÎ‡óX'+Ï¡(‚çWÀ™bÿx||V±(L\í£ë°bÅô©I‹b±©WŒ2ƒöæ {§«Ý³·|âýì¹së{+Ù41­j-§ª®†þç‚wòɰaƒˆÙ'FÒßx¹ãDFÚŸÁå=/¿,"­\næ1Zæ6?§‡H¥Dçj:]¨0M‚µ ¥¢b¼†eàñçMÌg'““›¬œÁL¯–ߑ͊×Ä•Iöœýœ9âû¢ ˯yí5ÎY÷~íµÂ‚˜#ê0J*NÅK*ÆÞŸãñÀܹâÞíí…’oU¼ï}ÀŸsN¡ÕìP‚h=¿%`Éd‘hl,0oåJáTY ŒÇ vÙ.‘¡ÐøDɤPÛ–šµº\, a1ÃÊÚµ¦‰‰°ûÖCg2ãý ÃלQ“åµÓéññ½i [ ƨi ‘ˆ¸®õ<Ö8ì *†$IâÕƒòDÿwùö©;ÑcšR>\-$˜Ž?^\¿±QŒÉí.¤}ñ ‡ÅüO— ¶¯æ¶Èï/ï{_¡šeµ-µ]·Æ/]Ò´2'fâ,FYÌÉdS¬Ñ€Xlr¶Ì’h{Áž'°@iùö¼»u«b÷,(Hüà xf+9e­Œòz IOÏäâ•Õf÷eì v*nžØü]N9þÒ÷>~Ò'Ð s,ÉeiÆ¡öí)æX¬pýXL$ÈìÐL~€]Óm$©Àü©ò÷VÕÌÊúÅbã{ا”¤\Nœ;­Ö5#‘ñ¾ˆýþV3¥ýAíµËœÊõxP­ûÛ :uuíÓÖVhÀ°ƒM–EºÛj ËåDþ£¬Lh“TJ—ÚÛóyyIb89@Ë*X¿ÞÕrI2ñz¥qu{…ϦòrqŸD¢xŸb,Ê:çIJÇéôø‰°&×b¼¢ŒßC`6dIÙt9q§süw~¿˜$«´:ȦRŸËÒG ü†!ª„öëX­b-ͼιœA]œzªPãsçŠñUU @œ~:œx"ôd¶£Vì£íy`+dwvñ½ç?‡KõŒÏ C8ª–º·7XB¨(…Zf²ÿö>@{ÍF>'ptt|œ5i–жÂ4ûbQë8ëÁ¦Ó.öûLªÌ’ EÌ÷z ¶ÜÏDSãpL­‰,µnå&‹ì× …„ÿciÀÖVñ~ËðݬY{~w¦¦ñ@Öù–@&‹i|Yæ“ËáÕàvum%TîdQ«LCƒ‰ªŠëXŒ³€a/5ÛhEUÓå ,~X~L:]¤ Èf =ñ2Y@¢•~µ7)D£Bj-¦[]@ +¹ÜìÖFñ3…géôø4Ö†Sõ躻U¢Å +p¬.Z ìÖ*œ —3© yÈ?¸óVV½Ž[î¦w ÊtM*†a2§ª’ïüþWxüNÂ;³ à8´ÜòøèÏtrïu¿¤º:5&hnw!H$Æ÷NØÍÙt«ƒqž}‹¿¢M€Û-ìyy¹`j 0¾¨c—+hmJˆAÛëH,gf¦‚“õ¹¥ú¥!$©Ðla™¬\n¼²$Ë£¢Z½¬\½Na'§SB•|éW_d8:BýjØÐÿþÅEQ¤i£‚x<ÎÉßXÎÓ»Ÿ%•ÊÒó:´~øåÃØ›á¶Ëo'MI¹ÃQðü-!°6æ°?Lß´cû«($…Õ¨–Í/+›¹ÂåvÐj—`KuƒGl¦åÍvI<”‰°jÖ9ɤÐ^ÖÑh¡–`_mk%¼ÞB Ùò–­|‚”ûËøç￟}Ã;x½g'z´ô‹å/ãpg¦l>Q…[7RSî‚]Àk ¼²Dáÿó!r+ μüLjC5$“æØ³êz¡Ý,ó meµÏY­hS‘˜¾>Qš·^EÀ’ËÖÛs÷ÓÙ‰ªÚþWÓĵ„ó&Ÿh4I<'™L’Éd1 ke%Á³qT-©°4}Œåå…Ê¥•·®ksâXí^·išÜ÷âÝìJCÛs=üëÿBËð€×5ÄH|„t:1EÛ–ŽZí ½=Æâ@,ªãi¥Ááƒíž£îÔr.½í3x½Ê¸ÐÒª´Zã´4BYYAcM'‘ˆˆB<žB3ªËua ¥‚­óTª ´«(+æµ$hâÀ¬Ög«*'Ieüú×w"Ia6nÜ”ÿQi‰ÚÚf>÷¹¯ârÅ‘$cÊÐÓ¾âÕêàµ&Ê,“`å!¦äl£EQÜç¬nO5hH>xµrø‡ÆpÁG.à;~ƒ·Å7éºg.{?÷|â|þÏÿçÁ¼í°¯ .0Â~þðØ/©­«%“˲<>Y6jŸ‰jk þñx?gžy&‡ƒþþ>^{í®»î|þú×d2ib1iÜu,ƆÃ&‘ˆPÑ–Ÿ NÝ|:ÓdMWP÷1‘$‰D*ÁϽ'çk47‚™†äxúö?òȺgøÑ¦ÿA¶Ý(›×þÓSó©u—Þ „áí „³>þaü»ƒlܸ›PeˆŒ–ABøVÅs* … Ë3‘Ã!Êù¡Ø¿©²ò0ö2 w>~LA~pk÷ö*ž£Æb~¿ƒîî4›6ýd2Cw÷A.ºèzÖ­û¦i”ÓÓÓAee%~¿Ÿ¹sçrðàAæÌ™C]]>úx Ç9ç|„SN¹€­[˾}m„B´´´°bÅ{Ðuá}[öÎÒ4ÖÂ+:˜Ég ‡ ‰«ñZF%S¹ï‰[¹gçÏVBd´í‚`‚Q þpþÿ{Ÿjþ¦mQ«å,^¹˜¼Æwîükÿ´µŒ~xá…—øòM_æÕ­ÏsφŸsÛ§o#£efLäØ#‰fn*[<•*4ڀ믿T*Á÷¾÷2™$Ó4'I•øßÄ4%dYbp°ŸµkE0@Qœ†$éÜpÇ™?¿…žžÊÊÊH$x<æÍ›‡×ëEUU:;;q»ÝŒŽFP…§žú->xÕÕµœ|òÉüõ¯Ï°gÏvî¼ó¹ùæ;)+sátca˜=,š¸¬Zü5‰\N'—ÓPU“™ÊJYVÆ´ÂSOý™îYç“N"ÉÂà< §Êð›mÐü/nÚïRÉT¹óŒ1$™l6‹iÔ–ÕòÎwžDäô$ÔCë좮¾òÐWPTÝÈáP¤³it]3»öÎÞ‰¦k6…*K(Ç•Úg*T.oꀚ5­A‚XM²pî?Ĺ­ŸfÎ<_¾ˆ‘ÂáPU7‘ˆÊÆ¿åàÁ0==[ ‡£ÌŸ?EQÈd2ìܹ¿ßOgg'ÍÍÍdâ\>ÝžnÊFÊÈx3´[èèè  ’N§QU•d2‰ËåÂï÷3::Jcc#ƒƒƒ˜¦IWWkÖ|–O~ò’É8¦)íehwZ-‰ôù ›õñÄ¿"•rÐݽMÓÆï¯ã½ï}7nw½½tum¤¬¬œÝûÙ:º•¾}¼[‡çÓÀ2à⺟½ä«ÄZúP9Ö¼ûzn}ðß™ãXÄÃ}“~6J2§nŒ4Bö¢¢úܳÐX7Ÿ”·‡s®|/•>?ŽöÅ|òŠ5hY ÝÈâR<$2 f³æï|çýÀÍ@2[¶lÑs¹,šfŒÖbà|¯sMÓÁ&’Þ$¦d¢j*i)A•Z‹žKsÙåÿC*ãgkÿ€'ÈÒ%Ç!Ë2sçÎ¥§§‡d2‰nèäÈáTœ´ïkgÉ¢%ìØ½ƒxk÷^7•‹*Ù9BcC#}ý}´,n¡mw­­­är9EaïÞ½ÔÔÔÐÛÛ‹$IȲL("‰ â?¸ŸŠŠ‡:æ—X $¦i’JD£>z7O!‡<< RZ”MÈAý`=½õ½4t7ÐÓØCÃË ô¬ê ð‘VØÔ!lÃÉÿ¯ü (·ä&Ôâø|gžp ·<ÿoÜ{íݸ]²¬¢Y$CÂív‘N§q»Ýc¿ã<ÞûÞ÷ègžùYþñ‘eÇXT2SWœœoq~à]s=s×uÍéBÕU4‡†'í!L‘$IgC›ž‚çü†pcŒ””FV &M7ât•w‘îIóÅÀ Aï ƒÙAÔ^•ÀâáÁ0þy~º]¬hXÁk±×È5äH‘¢g?~¯Ÿêúj†Ì!r‘‡P(D,cáÂ…8FF†yúé‡yå• ¬Zu*.—Ÿßÿ~}}mlÞ¼‰ººSøóŸŸæŽ;nbÁ‚¢ùô˜ªªèºNgg'Á`Ã0èêè&žˆ3Ê(a3Lĵ›Ÿÿl‚Úã Ì±aÅ*8ÐάœSNÒ©±ðõ%´/ØÏÒ×—²Á~ê†ëèÓû‘ª ì”`i ^íç2ðÔ0K€Áþ Aoíéìú㳌ªƒüê¡_ðÄë ã¯ þã/_äW>@0àßÖþrD":ŽuÉÆ?½r!ð"wB_½zµyàÀ«<ùä_ˆDâ„Ãaž~úÙâzGj]K{ = =dYª†«ð&½ôÕ÷áθI•¥YÐÕÂPíõ}õìiØCY[ëC뙟šOlO C7xÏñï!9¤£«ƒnµ›lU–3+ÎäEýEN÷žŽ7ƒ£ƒl+Û†ÛåÆ¿×ÏüÐ|ªjªØ¤n¢Þ¨GJJDSQ*+* ôô382ˆª¨4ÌÆÙF>?IDATk`p`˜X,Æ£>Ì®]›‘$Ó„_|‰ü)¹\œN8‘]»v1wî\Ô|nzã†x˼tvtRYYÉöìvšCÍlîÛÌÁÀA:¶ Ã|¨¯…W!z*¬ºÀ¢ZHžmé4éLN¢¡«ý ÷S-g䥪Ï3Ȥ`q ýºþØ ú д4AÏãÀ4V7²oÁ>Z:Zh[ºŸúþz†Ü_ÎË¡g˜ÓY‡/ãá1£®·Žg’ÏðÀK?cC÷zØÇ$,Y²Ä4 “ææ&^};†‘Ã0²Å ¼º|]Ôg^÷\2î Io’îÆníYDÒ›$ð%Hz’H¦DÆa44*B§¡›BÖ÷¯§]o'\¦*^Åâøb¶iÛp§Ü ƒ1lœ“äLéLsŽÉþ¡ýÈ1™ÊFFG{Ât5t‘Mr@;@&ÁP ‰Z¦ËÄq£Ê*².cH’$‘L& ô=ôíë# ¡ë:Ñh”íÛ¶Ómvs0}ǰÅ©àû11 ‡Âœ8p"FM­&]aÞ ì¶ø–Âî- /m¸=^Z0P3€îÒñôxHÖ¥(Oƒ»†;`ÎHlY@³r›!ó¨?¯Act»—í¦f †´;MÆ‘!Œ€ IO’ÑÊQªªèm襮:HBî$`=x+aÎ)âš³yÃóo˜Ðö“¢€–sÐ1'󨸥aUÅñ±Xæ&¬ÐÎç†èïïE–eæ4Öѽáx¢ïØŠjú^òaÜ{6焪 èÝ4‚?¯¬ƒ@øËÀ1ŸïÙ| â2äNYHp¸ ÷h9Úî†tDr°e'°üÃ9Êû ²‚u@¥€|žA®œúóⶈ>Š €åòùÌ]0Ó4)¯(#›Í’N§yשïâ@Ûµ#o­u˜· è†f«3zŠù§:J]õïñywbêNFHÒSøÙJ†þZ1öükC/V©ÒGAúã´ pTHòr¹élš7“,‰ÑMhu¼ú¶À¾:]ƒ\ mòœ€àGÁˆ‚ꀸˆÜp ¬Ë?øA4M£µµ•TêØø92kc-ÕM"Þªh°ô3Ù™A냾͠ÎMf`ø!¨<riÈnnâÞ_üŒ /¼ˆ‡zˆK.¹„²2¡æÝÖEÆõ(ÂÃ>>éó±²8žI1Þã¿y¼¸0°õÖ@“Y•[Do_7 ¤ÓœNN§‹\NÃ4$å=E9.F¾uêhxy ŸÍòý=(ª‰n 'ÍEvÀÃõ_¸Ûüc®¹æJn½í‡†A,#à`0s×G:æK7|‰/~þ‹“ÂÀ9­sôé†7{\rt0U<~$ÂJ€ÁMÞytÆÛòqFyŠ^HdÁØä BrÙ¤‰6iИú¡ Ý@–df“m€PkH·¾7LY‘# :új•#(°ì±Z§BcåÒé¤'NÛTª¯m,ËŒØúÛ|>/m¿N2ï'n——æù 8iå*îøöoùÓ3O²qÃ&¾ñ¿Á×nü2?úñmã®=sÀž‹s9"‘_úÒ—øÅÚ_pͮᮻî"rGôñÇ>tÞ‡ðù}„ÊCÜtÓM¸Ýî"5ÀÙGWqbBÛ“âÿE‹Í€áááq .//§Ú¶-Úèè(CCC¶^¼£ù¥Ç- Z8çƒçð™Ï|†³Î:k lFÎ8lõµråJn¼ñFÎ9çDcö×Ù»wï$ °më6]Q>ðàu{Ç®S>ùÖ€‘_еçX¼x1Éd’ä¿g[YY)#ÉÖ*cš&z~Õ‹ªª†%^ï?ÉVJuc˜Ó=5rÆô “yFÓQª&“ÕŽRRTTWL”H$Âå—^ŽÓédí/ÖâtÍþW/$$$SBQ”üZ‰Ž•¤i}„`~¹UÇ.ó]ý°Â)L›¥ÉO9ÒHìåÔé YÒÒN“N9yêÏub™×(«0Ù'×1:ÜGÒLFÇ™'þðµuµ\uÕU”;Ê‘‹p$$ÀátPSSsˆœŠ<-jjje™Ý»w¿ ½Éœ¶•[ɯûó§Ý4xÒ4©°»¶tC™ʽöʜŅ‹£ŽQ¨ Ââ“ãjaAE[TèE×aùòåär9Âá0ââ1 –ßÀd²,3444ÎW™(Ý‹/žÄd‹bSìóÖùÙ¸|m]ë)ÇûˆEãüîw¿ãûWÛ€{_±9A ˆå„¡n@÷ˆxIÀ§Þ«æCk=ü~ ìØñÚ¸š››Çzûñ%‰ýû÷“ÍNN1 ±dÉ4MØf‰P&“¡gâ¶ÇŠhoT€¤²N²Z–_x19]'§éüîg¯ *27~åÎ|ÏìØËÍWœ³ ÙóB ÊIAÈ;û{›uÌm¨cÿ®-Ô‹Kaï€Åµ0”„g÷Á)MPW@ÈcNCBwÓ•Qg5 9E"7ãs€žwX§£]mm4.X0í1éiÖ–®9 a`žññ}^2#N0eaÔ1) ˆÊ4Mâùõ^nUQñ¥‡9©@’M$e¼ MD'%RÒ™4¦a’§iÓDÞRš ýIpôä¹!ý·§ÿežM/éŠ"î#88òù{`÷ (æ˜âc zcÂßõ‰šxR8&M¡&Á¼h†sR>MçK@Xj¹0Åì=7à ыM“ϧ#*’àì£á&ä—Ô!±=>´Haáš¡3Ù¶Ž¯˜”ñ¢ —öÂÕù {XipÑ•ðòK°};¯;$‰«®ºšl6SôóìØ±ƒ—Ö¯çDw%ÿú¯pëÁÐYlß+˜ånþq9Ì­—*4Á ûaÿ¬¦é4“&kEJã«} εç€MÀ‘þq¼Ÿkïs]X‡ÛF©>'R^j%Ù$²#Xø^1‘l<—ä#ZȰ­¾˜We®üƒŒ<=…ýT¬t»](Jñ¸å¼¹­Gv»Ç Yµ}÷E`m¼¿U¢*P„Ρ©ýžÚ”ÆôĹx¢pÀ&¡Ó‘xÊëeqk+m[·òî æá/Sœ³*¯¼üÀÿ~¿z8LÏ%e";‚cL7²¤Úep4cF p(ùfËü{Õþ0ÇØZieì#ÇŒNÔ¡à°$rÂÞ/jþ;ë{§*ÆÖ6ö m0¥á‘àÔþIà¿(ôà¿ 45‡xþ5é4®½{ÑòÚ‡CàbD;Ç’<ÌÃqËçW®Ro"©æ›–0u³w”´<~°c–ÕsÍ’¾Ïä¶ðK@ÏäÁuØa ì0‰¬,Á©‹Àçä˜$+šPd±ö*jNi¬4L~\<ŒØj  0>úQF¢QO>ÉC œöÙÅi¯»îšl6Î?Ç#°'ï˸ò¾Ó['4Q2óíÖ’tìMÊ;ñtá;y€_Î3Ä‘·Ï&ˆ½[ÒiaZT¿ÏwXæËNþü¶(©¼Viîx+ ?­îâwè>ÚÏŠ±-ÌÛ~·¢é©Ý)‡Í©“òMˇq8pæA‡ë¿ŒÓù-Dœ6ïßY¬PÑZ±æØ0“VFÉéÇ ôçgtiµ˜ÝgwC÷Àj“$Ãé±>[¶\ƒ-R˜êóCÑÀ>@MÞ•°r&†-z*"|¬ˆ›)z-¥ÉÙ1ÓÇQÐkZNÜϾë˜aŽÿ1,» èO@­bYËcó§Ipi8=É!;RôÉ©éý•b.\Mõ1Â~Hbâ‘#´T_ ­CNÌÿõ+GþžkNÍ]Я¤"$KPáèçĹWÁ4&Ó“Œäw,K³ˆš¼?ŸCBb×ßpÎ\ÓÌã[RÈŠ¡Cû(¨4–çí™ çŸpt"ÝpÖY«X¿~=K–,áåõCœ6_'#A4ƒI¡)$bHæìZÁÀÈÏŸ -6?à¨;ÍÓHÿ[Æ ´J , ªªŠ—^ÉQ¦Çp;EÚuïÑîXNZ6^¢¼¼§Ó‰,Á¾QÐóL—%Q$ñÿëùŸqmii!—Ëë0§ÿ†ó÷Ä‘ÐoE£Q®¼òJV­ZEyy9^¯—[n¹…ûîÛ*STï ÅvÀsÏ=‡ÛífÓ¦M†Îæöñiµ´6•Æ2&õ(y/<;…T_—õåãþ‰™œc†aJ¥8õÔS‰ÇãÜrË-d³Y¶nÝJ4%“Éðç?ÿ§ÓI6›%güíÆ6±»8­**&uð8t8±§‡ÈÛç,byÙ¶¶7B?Q¾¥ë5'…„é1EÉdŸÏÇO~òêëë1 MÓX·nk×®S£>ŸŸÏG&“9¦µ—,Ë(£V–qê:*ðBÞ8=ÿ÷xà¶7è ÿóŸŸuÁŒ>ôUùû<—Ý1€l6K.—cõêÕ|âŸ`É’%d2t]§««‹OúÓƒAœSlÂïr¹x+ÒÁòrBCCtJàÝ亡ëlC,î2_D; ì¯#Jº®ÓßßϯýkR©ÍÍÍc 4yä^~ùeöíÛ7n…ÎÛ…œ¦É£†šÏ´…HyÏ~÷è£S–ÕC\Äú«sû²Ù,MMM466rã7‡Q]×ùú×¿ÎÆñx<8Ž·¬„ÏüK/¦­­aM;âŸçÙ à r‰ ‹ùÅg$§¤x<Îüã1o>#Ë2>ø [¶laß¾}b9ÔÛœdYFÓ4š››I§Ó“rýK—.åòË/×åëv»¹òÊ+ñM÷ûxyêìì´ø5‚yóæÍÜL=F 6Aà+y‡Õ‘ÿN¢DÇ™yÉׯÿFÔRˆúQ,$[¸êɇ’žü{¥€czÞ¹O!ºåRù÷út>Ü¡˜(ç™í°½ŽÒž%:‚¶_³½fôß«z(Û^RIúi-`™ë5c7[FÚ™^bþ±Žhè>ÕÚù½M¢‘Ò”P¢JT@‰J(ÑßýÙ;IòÔ0i¶IEND®B`‚fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/lemon_url_16.png0000644000175000017500000000167512162366654024612 0ustar glaubitzglaubitz‰PNG  IHDRóÿabKGD@@@§ö/f pHYs  šœtIMEÝoÁJIDAT8ËmÓ_lSuÅñïí½½íþeôÏlg6fš°uüypšÈˆ›Dƒ‘¡/ÀMH”Ý‚hB˜Fb|añIgŒ›#>A|˜J†¨ PWÙ&·„•1Ó ­uËh;×v·íííýù‚J¢çå<ä¼|$þMP~·“ï¼;§ý0öüsS)Òá^85â€ä”{Æ®È['b%W5åÝÝ_~¨¬ }g…d"‰15É{}¯Îy6×q°ïȃ@ÈYþûæ@L-hÔ8ˆkñ¼§Oã‰DØXlîëÃrƪ*þßâµÎ®ØÝ·È@uôöíeG>{ü,êÒÊömHNV‡µ¿ÕãÕŠüÁ–èo¤kÜ\¾¹0äÀ—û3…{l ›^DtìBn `¶0¿¿‚4:ŠºcU¦I!›Á™Ëámܵµ‹'‡>ôËógÎ,ç¯NâŠÇ±5mAzù0 J%ÄçcÈSÓHãã蔺ºÈ//£ûý$ ƒÞÚWä§týmÇÃÜÇ#›&"½†ðzóa¤ ß Y,PÈ#öï§ðD'zCÚDµD9›EQl fS#E{êDK4†hkÅl ©¡iúG„χØÚ†È¦1%`z5¹Jõ¡C(kN7•™lôWÔp»DãÈGÛ¡cæü ÌŸg1bqŒûÜ‘f&ƒZ½½¢e¥¾žÊOFXojÁ*ñ%,XíeX£¹…üÇì S|¤¢ÕJAµ£Öm"'I(Îû}ćG¨âØ1Ì`ˆòæJ%!+.^ ?su]'}ù™þ~¨¯Ãüîmpa9ÐÛÈlÜDt5ÅŠÃAr_7‰SŸ’àιqRgÇI¯eÈtÒíRðzù¶h”§{{ü ¯Û·—ù+Al7æÑõ•‹·°^¿ŽX\DôôR¨q‘¿¹€¾µRjíü×¼ ùße€Ï¾:ÿ‘½ÆuD½ö"µJÞ(¢ٽϒ­¯#çv“›šÄÑì64Spnvö–îÅ4xø¥˜–HaÛ¾ª™ìN'ÖÆf”PcvtP³çv?¹ûLÒÿpö ¾~tN»:‰Ëí¦rçã$‚x|Ð3ôþ8ÿkân¢rhvIEND®B`‚fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/main_menu.png0000644000175000017500000000260412162366654024251 0ustar glaubitzglaubitz‰PNG  IHDR szzôbKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEÝ0(w»ÒeIDATXÃå—mLÕUÇ?ç¹ ȃ <ˆ( †¨åärŠc©eÚJtkëE¦³ÖËÜ2—ÍfRCS7ÍY¦¸U›ò”&:-ælÙDEAAP„ x/O÷{ï9½0o\ !®í¼øo¿s¾Ÿÿ÷÷ûÿçÀÿ}ˆžòŠ„E¤J¥R„ z8…”â–&D®òUW/Kêèp ¯(@™)‚S§SXm5Œo9ÂGc”¿N)ÅMáǬû^® ‹HE¨˜²ª6alï~$vz‹i±A1Â"RܤR)-F³hh2=²|[,f‚õbL°_J!ˆ6µ›±XÌCДdþKèuN®DLÆÛØAœ­v¿@ŠƒâpJ0µ› ñsÕ—WÏ º»íX`EÝÞ*;Œ!,’âˆXÒþÜI°ÙHÆ’•œéŠriôn»‹yhÁÎN^ë̇q‚Ì9ËyþF>ÁÁFª§ÆsPÆ»öuØ=Øö!§àSï£ø†[) ŸÍ¹F|‹pŽ÷"=j)†š.7 Ï  Ñ·ž…á—°ê|ÙmKf]È輜-äx‰†ÝavÓVtBòÙÜðÎç(»ÌÌé5´‹¶]y’öŽ.zkô àt8è¶ZÿÀ;O]#:¦™&çxvKöÒƒàÙu‹¹XÑÖ'Þépô ”DJÇ ÅÃ-¬M¹€ò¤>Ë«‰g ‰é ª} » ü‘Òú€_²ì%QÒ9h€´5%Œˆîæâí§)ºl$?µ ^ì:žDËÝ®~š‚’šYüb›[¶Ï mýQ´ñ’Óç{ª)e?MÉ#€”z/É–-±…ÀÑŸ1fl)Sæ5`0拽Ñtw›MÜB „J¡;¹2¶qÖü3‹×#ÖÒT‹oýc¦ëIÌ©¤‡Pqã.Þzo¶nzÓgK¨¬®#qÆd::ÍÄ?ÍÇ›¿AJåÒðà€¡ÐпʨüLÚýëp|2ŸˆýT+ºšw‰ØXCu ™ÎŠéüšnw­¹¿GÃVj뛉EÁ™ H%zÄxøÛûSÛœOW>†¸Üô¶ãS2—‚„f®Ï»@­ÝãW³0uØ\ñwürâw[qJÅŽ=Y<3?ȈPW ½pKNÓ¹1 £¿´Ô›6FZfкu"~A0•qűœÿÍ䊗 ®WÕa4Ýû·go¯Ìr̬Ê'sß½z¤'ÎþC…5åUÑßüyX -•y}*¾w½Ñ#qè4-wê”I*~rì?ùz˜ù€‚ë%Þ÷b"»T‰¦‰˜«åU¢ÉЊÓ)Ê…Œo?ìóí÷ý^ÍœR¦hš–«ÙêW’\½Åû<¡ú»þçã/ $Z“˜LIEND®B`‚fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/windowed_16.png0000644000175000017500000000027012162366654024424 0ustar glaubitzglaubitz‰PNG  IHDRóÿabKGD@@@§ö/f pHYs  šœtIMEÝ6 †"{EIDAT8ËíÓÁ 0@Ú8›6s3ûhÒä[þ\xèên8 I–PU£2É ôdæ¨, f>ðw‰’ÆÀrßù #èxÇ>IEND®B`‚fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/database_url_16.png0000644000175000017500000000122412162366654025232 0ustar glaubitzglaubitz‰PNG  IHDRóÿabKGD@@@§ö/f pHYsÝÝpS¢tIMEÝ!Ôõp!IDAT8Ë•“ÍKTaÆïÛ{ÇHfÆ´&¿Æ¬ËEn¢¢XÒ"hÓFFèOŠ"rÕ*ˆ†6A’.2 “2"­…¥6‰–ÞšgGgî½o ©”8«óœçP–m‰X¬°ÀU§ó`5]s¹]yžèÚBËeYñŽûfØWo2‘ÚÅde€G#Ž^°,”vlS ›Û®´s?|Œ`ó =çH&ë}íØ(­5¶µ²©Àå‹“Ìû«9Uõ‘'M|Šdþék­‘¬ ü_• œî ót¬‚¢z›kwÝ8hÒ¬ ¸d-%/é%…«è—n¾àñË£4w¾¥ûúIR©ô‡Bk;˲{‘Ù³ÝÔ~}@M[K{û™žJ’ý\Ç@jóÕ…© iâ®èG´À]w±á3äZ{ê8A{Û2™jü匼'ü%²þÖRJ©…T©ÈÜê#í½ÁL8À‡C£üèmb6báhÁx8œ'°ßOž/¥Ô Xu ­;Éê' $ ¾àù«QþæHÃe˜^{ËYðzÜ.Ãwz^7.¥—C¹lΗ¿má4¯ÆÙpæŽâíÁ?@>ÿ/%lÔIEND®B`‚fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/amiga_forever_group.png0000644000175000017500000000642712162366654026332 0ustar glaubitzglaubitz‰PNG  IHDR00Wù‡sRGB®ÎébKGDÿÿÿ ½§“ pHYsÄÄ•+tIMEÜ );(‘LêtEXtCommentCreated with GIMPW rIDAThÞÕš{lÇ}Ç?3»{{/¤(S"E‘¢¨§EIQbÁŽTÛhäÖH#¹¨b§MÐ¨ÚÆ(â"HÚª@›?üGáÔMœIÛ8§¶a!iR«®ÑÄF[®]?äD’-‹’õˆmY¢(Jä‘Gr¹;3ýcwïö"[#@•w;s;óýÎï9¿Yø¿Äûìûÿ¼ÌB  ŸkéÒ‰iF@Öþ½Ë÷ýc×rÇYÇÎ;ö-f9 Œ¨ÿÌÓ[ü¹¬”a·Œä âûÄSRÊJx?¿æim¿Ak]½ºLô#îÒÚPž8uªÄGvêJ‘ 9›µÿ]Á†ë/"ÌÌH!2ˆñÙ¶¨€¤R^ |•€6“¦B¢J@‡ÏC&m£ }}1;wîëÆY™Ô{Ï;F&#™™ 0у2FkѦ²JA`*`ÂÿêFc’¢"µ" €×Zš@´1.h&#ñ¼c PŽpñŒ1¿<÷–.ä/Ï¡E]À¤Ý`ãÉ?ëP=jÛ X é9H å—05#),µ_ÌЖÁ¦’ª›F M0ÊØÙõ–íºåøÚhÐ!cwì59>KZÁ*z|ë»ïpq"Çòe9úúò•9´þ_øNm°¤UU×zÏšõUÊ4g]ç1â…Šm`väF×Ú‚3z§Òf@O|å˧yñÅQ&JsUcÖ¦nLÝ”TŒ)Æ_vãŠ&Ô@F ¤A Q#j-œ?ÍȽM6 ^^PºþÚ‹i[ÑÙfðK ^zŽ˜å­·Ê¤«âê=OÕГÚPµÖzr²þ!­Í¼*KÁhƒv”¡ ‹º }]š+û_áùçGØ÷Øq˜;dàç§Ã1|Gž{u^·9Ÿ*i3ÌUt2)…°_#¥dzå*ôÛ‡É-2L—à¶ÝŠ w½Å‡ÖHØÂDK´.M@[¼w&A™¼r~+–-hoKÕ®Äê×/`½¤d³@3MJ#Ž IIäÛ üÓÁb\Ô(ÜÿÉ€àJ::Àqáõ} ŒÔL¿ôÂ쵸ïKü~t|^ðI,ÍŒ¾A…jC8 €™®Å¸Y6”Êðk4lm7L€ñ€Üy/<óuûd×ÁÇቧ gN”¸eÙqŸãÙÅó4ž§kÁk^•@½ØBæÍIÄŸB>ÅÉ‹K€•@Co7\< ¢þYؼ¶X‚ŽAøÉ¸m`äǚÇ4ý×gaÏWxðÁS¼qlÏÓðõ€ë1ÖØ@  ª¾ BŠp-(èÕe<‚|б‘ù‰Inݱ™o|uŒ¯Ý=%p—º!‘a¾øß‡_Ø…-†C‡áégÁ¿bà$ðvè¡@ ¿|Ëã>ù¬MK|èõB¨Œ¸ÙµÄ{‘Ž¢y|®ë,C'üå×^bÃúrNƒ¾ó†Ÿ=%èé2ôo »áþ?N‚qB‚¢ (Bo'œ7¬œœbë ezzrX¶X0ZËfn2öFFr“GèØ¤ =Ê>,06à7_úÇ9|ï-~ïóÀd3†7ÚVHúÖÃØ (OAaQ˜‚ÍŽƒ˜±¾/4ðwÇ ·£Ý&“µy3 .7¸9È@¿ ·ïP<÷‚d×ßjx.¼ ¯˜9è· Ç ÜVC¡ŽŸ„îe`~ºT<#ºgxï‡gž+R*ùd³RÊ(xÊÈqÌ#C"|›òT`³î¦€µ‹ 7­ ûJÓ0u - ½(§MGá~Ô8»` †=-É Øf(¶…6ÛÑkºCuãd¤šðüà oÌâÆ­­Üxc'ÙlˆEFÈ0Çá=PÕ¤­Ü±‰ÏÜœ__2ÁÇ?e` :¦`ü\ׂl;;ô>ø`µ~žy^âpS0¸´n1L‰ ¿…¦´‡Û” ½š¯kǬßP$±˜¬ Ʀ’$b7êû†mëâÑýðÇž$#5)aøèà‹7ØíP\ S%½"(ÿ»ah'#FTb³»N‰ÍƒÇ¡Ìy@…®ÜL+X²$Ü©.îƒá£‚ÞU†‹ç 3R0^6(ŽÙa׃7oo¥k©‹ëHRi‹–‡lÖ¢PpÈfm2®•È…ªXT`¨wC ©DR,K Ql·ÑÐè´–«VdÖÃwïܸz×Ô(Œ^t¬4,î.Á‰#‚þ~C{gÀŽ>ÍĬbժ˗åšçüu c,õ›&sÒ•D)ƒ«ÎC1¢ªÀê¶Àþ Ī0ysÓ½ Ì À¢ü´ @.ep³06*˜ð |ÎðOóê+—™š ir-ð8YŒu>,ñè†dNÖ²JÆÝLÑÍ÷q¡X?û X|å °,hÍÛܱ[…Þ‡¬ ýg@&ê\ ‹{ ãc$\8g¸g›æàÁ †‡K5‘ﱊ fJUm ¹¹™Ì,ãSw:äs‚þIhOÙ¬dýú [op¡Û€X2ôv Ìt8Ak,;ôT““†½¿ÃoÎðêkW¸rÙ ç­T§‹ ðB5à£4ZJ\] TZÊð™QÎói-Xl¸>Ãm¿¹˜âÄ)˜ I998òd8–7 ¶߇¶Nø—Ÿkö~L2V6LM>6¯*³qã›7¶UK3õ›û–Š!_=ªî*"U`IÁêµît$¥É€Žö==:¥¹ùÖ Ìë= >|S˜R<ð$콜¨²ñÀ_€½]S~Hòøó†G^0´µÍqæô4kV·IÛóî¼ê±]=%X&óñÖBŠCmQ©[V&{øïÒ¤ÊËóp÷7 e2ÉSGlö.šÃ>sÓàn WËž08:Ž —•8©¸`Õ:©ÚZ(iTÁD`²dJNÔ½i=ÿöä{|þÛ— H§+úSܾë:ð~pÁ.Uki™Œ¤oyŠb›ÅÀŠ4k×´à8V͘IãÓ|!%2 š: €ïT j ‘ÚȰ¬®kÏ„_)VæØñŸóæÈf$‡Z*ò§÷Nð͇ƱŽRN8q.'¹å–"›6¶ÒÚêÏ; ž¯Z/ÒU"ZJ1ÿ~@ª,d\Ó “¨“& YB28gÉ’4ތƲ…×µù­Ý}üö®³üô¹I´Q¸®d`ÀeÍê<ÝÝÙºÒIpMɱFµ™Œ5ÿ~ P K·#â™ÊiV¨º™|Ö&ŸÕãE¸ùÖæÃÙ3]]Û¶·Ñ¹8]ÙY5ó:õjšô< ±ïWõ,[Š0¼YSi“R døLµM‡ªµõödù£?\^S¦÷}CyZUƨH¼î¾Ò•çç |¿*F•صh+è÷ÝV]ÑÚ¾«ÞGó¡ö4­J4T§“â22’Bb…Tä¥ÞO[í¾£ÚW9ºª»O¶ÇÏGFlšp¬ë¸2>M6*kÄ%õ¤×‰ ¾Ÿ¶z®¾W‹Æ¡ªFφ6ÐpN,"2…{>»äRï² Ù¬Us¬R«ïÿ·¶¤ 4Óù…làÙŸŽñÏ^ÚŒRÍ1ktòWüô§×¾«üÑkîƒ|)"0Ì6tG5‚Ðe^ïM˜Hm¼ˆ@Óƒî$ 7ï\C/}˜pÇqõW ~%_öøüh«ÏX-IEND®B`‚fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/tab_main_2.png0000644000175000017500000000270612162366654024277 0ustar glaubitzglaubitz‰PNG  IHDR D¤ŠÆsRGB®ÎéÁPLTEN‰L„ $? 2 +!K‰!Jˆ!J„!H‚ H€!G!K‰!L‰4Z“!Kˆ3Y‘!Kˆ"Kˆ"L‡2X3Xš¯Î²Ï¤¹Ô µÐ¡¶Ñ J‡4e¤5e¤5f¤5f¥6g¥7g¦7h¦8h¦8i§9i§9j§9j¨:j¨:k¨;k©;l©n«>o«?o«?o¬?p¬@p«@p¬Aq¬Aq­Ar­Br­Br®Cs®Ds¯Dt®Dt¯Et¯Eu°Fv°Gv±Gw±Hx²Ix²Iy²Jy²Jy³Kz³Kz´K{´L|µM|µM}µN}¶N~¶O~¶O~·P·Q{±Q€¸R¸R¹S~´S‚¹T‚ºTƒºU„ºU„»V„»V…»V…¼W…¼W†¼X†½X‡½Y†¼Y‡½Yˆ¾Z†¼Zˆ¾[ˆ¾[‰¿[Š¿\‡º\‹À]ˆ¼]ŒÀ^н^ŒÁ_‹¾_Â`Â`ŽÂ`Ãa‹½aÀaÃbÃbÄc¿cÀcÃc‘Äc‘ÅdŽÀd‘Åd’Åe“Æf”Æf”Çg“Äh”Åh•Èh–Èi‘Ái–Èi—Éj—Ék”Ãk™Êl™Ëm•Ån›ÌoœÌoœÍq•ÁqžÎr–Ât—Äv›ÆwšÅy¢ÏzœÇ{£Ï|žÈ}žÇ~ŸÇ€ È€¡É¤Ì¦Ðƒ£Ëƒ¥Ìƒ¥Î…¨Ð‡§Îˆ©ÏˆªÑŠ«ÑŒ®Ô®Ó‘±Ö”³Ö—·Ù—·ÚšµÖ›¶Ö ºØ£½Û¤¼Ù¤¾Ü¥¾Ü¦¿ÜÀÏãÉ×éÊØéÐÝìÑÝëÑÝìÒÝìÒßíÓßíÖâð×ãðäëôåëôåìôæíöçíõèîöèïöéïöêïöëðöëð÷ìñöíòøîóøïóøðóøòõùúûýýþþþþþþþÿÿÿÿ)ÕÄqtRNS@æØfbKGDˆH pHYs × ×B(›xtIMEÜ 7 ùoqIDAT8Ëc`  ’VÇd…aò2ÊO^aO”¥ ú•N%j¦¶ŽŽ®žžž®ŽŽ¶&ŸxJb†Ä¼¶Žž‘±‰‰‰±‘žŽ6PÅY°õW@i]}CSs KKK sSC}]mWêPZ:úF¦æ–V6¶©¯^¥ÚÙÚXYš›éëÀèšš[Ù8:9¹¬{õj‹‹“³•¹©!\‘™¥Ý’ë<–Ÿ{õêÂJÏõW—9ÙÙXšÁ˜[Ù9¹]}õê.Ä÷^½ºæåêdgW`mïâî½9 6úz»»ØÃ8¸xøøÜDÈß ðóñp+pñðõ\ ”xy¬¿ôÐ3 cEh`€¯\‡o@Õ–ó@ñ#IÉÉɇŒ³[k‚|á |‚!F×eA„WàìÎÍÏÏoƒ°£Âƒá âZw\ -)++; d\ÚÙW›”¶ (þüÄ´©Ç_Û2Ó’b#á "bR2òn!¼y§8/#%!® 2.)#g7r@í-ÌÍHЇ+ˆNHË*ð"{ãÕ«ÛåYi p±Ié¹ÅÛïìïÜsåÕ«Ë›'«²h\A|rF~YuSÇÄ)^½:8cÊÄžÆê²üŒd¸‚„”¬‚ŠÚæÞIÓW½zµfÎôI½ÍµY)iY…õí}SfÍ[¸xá¼YSúÚë+ ³Ò  $ÍLË.¬¬oŸ0eöüÅKÏŸ=eB{}eaöܧr`"ª§ç‚Lhé› 4aØ„  ΨˆB2†‚Úcl籚",k‰ËcËzrbÔÉØ‡ã œ¹ãŽ;>ÿŽöŒïzÇ_q‡Ÿû¹Ÿû¹Ÿû¹Ÿÿ—ýü.úùÿ©ŸŸ—½]{ïÙÞ«½w{Ÿö¾íýÚû·hØ>¨}pûö¡íÃÚ‡·hÙ>ª}tû˜ö±íãÚÇ·OhŸØ>©}rû”ö©íÓÚ§·ÏhŸÙ>«}vûœö¹íóÚç·/h_ؾ¨Ý¿}qû’ö¥íËÚ—·¯h_Ù¾ª}uûšöµíëÚ×·ohߨ¾©}sû–ö­íÛÚ··ïhßÙ¾«}wûžö½íûÚ÷·h?Ø~¨ýpû‘ö£íÇÚ·Ÿh?Ù~ªýtû™ö³íçÚÏ·_h¿Ø~©ýrû•ö«í×Ú¯·ßh¿Ù~«ývûö»í÷Úï·?hØþ¨ýqû“ö§íÏÚŸ·¿hÙþªýuû›ö·íïÚß·hÿØþ©ýsû—ö¯íßÚ΃þ¸K»k»[»{»G{ˆöíží¡ÚC·‡iÛ®=|{„öˆí‘Ú#·GiÚ­=z{Œö˜í±Úc·ÇiÛ¯=~»W{‚ö„í‰Ú·'iOÚž¬=y{Šö”í©ÚS·§iOÛž®=}{†öŒí™Ú3·giÏÚž­={{Žöœí¹Ús·çiÏÛž¯Ý»={ö‚í…Úi/Ü^¤½h{±öâí%ÚK¶—j/Ý^¦½l{¹öòíÚ}Ú+¶û¶WjÓ^¹½J{Õ¶íÕÚ«·×h¯Ù^«½v{öºíõÚë·7hoØÞ¨½q{“ö¦íÍÚ›··h÷koÙÞª½u{›ö¶ííÚÛ·whïØÞ©½s{—ö®íÝÚ»·÷8üóÏ?ÿüóÏ?ÿü_Ìÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿáÿâþï$I’$I’$I’ôKÇÙ»³wgï—={?üóÏ?ÿü_Ôÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿåŸþùçŸþ/èÿ¦¿?K’$I’$I’$I·¥ãÝ[ïÞz÷öÂïÞòøçŸþùçŸþùçÿ2þݽ=îÞº{{Ù»·üŸ û¿éïÏ’$I’$I’$IÒmé8{wöîìý²gï‡þùçŸÿ‹ú÷îõñîµw¯/úîõáŸþùçŸþ/çÿ¦¿?K’$I’$I’$I·¥ãÝ[ïÞz÷öÂïÞòøçŸþùçŸþùçÿ2þݽ=îÞº{{Ù»·üŸ û¿éïÏ’$I’$I’$IÒmé8{wöîìý²gï‡þùçŸÿ‹ú÷îõñîµw¯/úîõáŸþùçŸþ/çÿ¦¿?K’$I’$I’$I·¥ãÝ[ïÞz÷öÂïÞòøçŸþùçŸþùçÿ2þݽ=îÞº{{Ù»·üŸ û¿éïÏ’$I’$I’$IÒmé8{wöîìý²gï‡þùçŸÿ‹ú÷îõñîµw¯/úîõáŸþùçŸþ/çÿ¦¿?K’$I’$I’$I·¥ãÝ[ïÞz÷öÂïÞòøçŸþùçŸþùçÿ2þݽ=îÞº{{Ù»·üŸ û¿éïÏ’$I’$I’$IÒmé8{wöîìý²gï‡þùçŸÿ‹ú÷îõñîµw¯/úîõáŸþùçŸþ/çÿ¦¿?K’$I’$I’$I·¥ãÝ[ïÞz÷öÂïÞòøçŸþùçŸþùçÿ2þݽ=îÞº{{Ù»·üŸ û¿éïÏ’$I’$I’$IÒmé8{wöîìý²gï‡þùçŸÿ‹ú÷îõñîµw¯/úîõáŸþùçŸþ/çÿ¦¿?K’$I’$I’$I·¥ãÝ[ïÞz÷öÂïÞòøçŸþùçŸþùçÿ2þݽ=îÞº{{Ù»·üŸ û¿éïÏ’$I’$I’$IÒmé8{wöîìý²gï‡þùçŸÿ‹ú÷îõñîµw¯/úîõáŸþùçŸþ/çÿ¦¿?K’$I’$I’$I·¥ãÝ[ïÞz÷öÂïÞòøçŸþùçŸþùçÿ2þݽ=îÞº{{Ù»·üŸ û¿éïÏ’$I’$I’$IÒmé8{wöîìý²gï‡þùçŸÿ‹ú÷îõñîµw¯/úîõáŸþùçŸþ/çÿ¦¿?K’$I’$I’$I·¥ãÝ[ïÞz÷öÂïÞòøçŸþùçŸþùçÿ2þݽ=îÞº{{Ù»·üŸ û¿éïÏ’$I’$I’$IÒmé8{wöîìý²gï‡þùçŸÿ‹ú÷îõñîµw¯/úîõáŸþùçŸþ/çÿ¦¿?K’$I’$I’$I·¥ãÝ[ïÞz÷öÂïÞòøçŸþùçŸþùçÿ2þݽ=îÞº{{Ù»·üŸ û¿éïÏ’$I’$I’$IÒmé8{wöîìý²gï‡þùçŸÿ‹ú÷îõñîµw¯/úîõáŸþùçŸþ/çÿ¦¿?K’$I’$I’$I·¥ãÝ[ïÞz÷öÂïÞòøçŸþùçŸþùçÿ2þݽ=îÞº{{Ù»·üŸ û¿éïÏ’$I’$I’$IÒmé8{wöîìý²gï‡þùçŸÿ‹ú÷îõñîµw¯/úîõáŸþùçŸþ/çÿ¦¿?K’$I’$I’$I·¥ãÝ[ïÞz÷öÂïÞòøçŸþùçŸþùçÿ2þݽ=îÞº{{Ù»·üŸ û¿éïÏ’$I’$I’$IÒmé8{wöîìý²gï‡þùçŸÿ‹ú÷îõñîµw¯/úîõáŸþùçŸþ/çÿ¦¿?K’$I’$I’$I·¥ãÝ[ïÞz÷öÂïÞòøçŸþùçŸþùçÿ2þݽ=îÞº{{Ù»·üŸ û¿éïÏ’$I’$I’$IÒmé8{wöîìý²gï‡þùçŸÿ‹ú÷îõñîµw¯/úîõáŸþùçŸþ/çÿ¦¿?K’$I’$I’$I·¥ãÝ[ïÞz÷öÂïÞòøçŸþùçŸþùçÿ2þݽ=îÞº{{Ù»·üŸ û¿éïÏ’$I’$I’$IÒmé8{wöîìý²gï‡þùçŸÿ‹ú÷îõñîµw¯/úîõáŸþùçŸþ/çÿ¦¿?K’$I’$I’$I·¥ãÝ[ïÞz÷öÂïÞòøçŸþùçŸþùçÿ2þݽ=îÞº{{Ù»·üŸ û¿éïÏ’$I’$I’$IÒmé8{wöîìý²gï‡þùçŸÿ‹ú÷îõñîµw¯/úîõáŸþùçŸþ/çÿ¦¿?K’$I’$I’$I·¥ãÝ[ïÞz÷öÂïÞòøçŸþùçŸþùçÿ2þݽ=îÞº{{Ù»·üŸ û¿éïÏ’$I’$I’$IÒmé8{wöîìý²gï‡þùçŸÿ‹ú÷îõñîµw¯/úîõáŸþùçŸþ/çÿ¦¿?K’$I’$I’$I·¥óš÷¹swiwmwkwo÷hѲݳ=T{èö0íaÛõ‡oб=R{äö(íQÛ£µGoѳ=V{ìö8íqÛãµÇo÷jOО°=Q{âö$íIÛ“µ'oOÑž²=U{êö4íiÛÓµ§oÏО±=S{æö,íYÛ³µgoÏÑž³=W{îö<íyÛóµ{·ço/Ð^°½P;í…Û‹´m/Ö^¼½D{ÉöRí¥ÛË´—m/×^¾½B»O{ÅvßöJmÚ+·Wi¯Ú¶½Z{õöí5Ûkµ×n¯Ó^·½^{ýöí Ûµ7noÒÞ´½Y{óöí~í-Û[µ·noÓÞ¶½]{ûöíÛ;µwnïÒÞµ½[{÷öí=Û{µ÷nïÓÞ·½_{ÿöíÛµnÒ>´}Xûðöí#ÛGµnÓ>¶}\ûøö íÛ'µOnŸÒ>µ}Zûôöí3ÛgµÏnŸÓ>·}^ûüöí Ûµû·/n_Ò¾´}Yûòöí+ÛWµ¯n_Ó¾¶}]ûúö íÛ7µonßÒ¾µ}[ûööí;ÛwµïnßÓ¾·}_ûþöíÛµn?Ò~´ýXûñöí'ÛOµŸn?Ó~¶ý\ûùö íÛ/µ_n¿Ò~µýZûõöí7Ûoµßn¿Ó~·ý^ûýöíÛµ?nÒþ´ýYûóöí/Û_µ¿nÓþ¶ý]ûûöíÛ?µnÿÒþµý[{ÀáŸþùçŸþùçŸþ/äò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿðqÿ7ýýY’$I’$I’$Iº-gïÎÞ½_öìýðÏ?ÿüóQÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ—þùçŸþù¿ ÿ›þþ,I’$I’$I’$Ý–Žwo½{ëÝÛ ¿{ËÿáŸþùçŸþùçŸÿËøw÷ö¸{ëîíeïÞò.ìÿ¦¿?K’$I’$I’$I·¥ãìÝÙ»³÷Ëž½þùçŸþ/êß»×Ç»×Þ½¾è»×‡þùçŸþù¿œÿ›þþ,I’$I’$I’$Ý–Žwo½{ëÝÛ ¿{ËÿáŸþùçŸþùçŸÿËøw÷ö¸{ëîíeïÞò.ìÿ¦¿?K’$I’$I’$I·¥ãìÝÙ»³÷Ëž½þùçŸþ/êß»×Ç»×Þ½¾è»×‡þùçŸþù¿œÿ›þþ,I’$I’$I’$Ý–Žwo½{ëÝÛ ¿{ËÿáŸþùçŸþùçŸÿËøw÷ö¸{ëîíeïÞò.ìÿ¦¿?K’$I’$I’$I·¥ãìÝÙ»³÷Ëž½þùçŸþ/êß»×Ç»×Þ½¾è»×‡þùçŸþù¿œÿ›þþ,I’$I’$I’$Ý–Žwo½{ëÝÛ ¿{ËÿáŸþùçŸþùçŸÿËøw÷ö¸{ëîíeïÞò.ìÿ¦¿?K’$I’$I’$I·¥ãìÝÙ»³÷Ëž½þùçŸþ/êß»×Ç»×Þ½¾è»×‡þùçŸþù¿œÿ›þþ,I’$I’$I’$Ý–Žwo½{ëÝÛ ¿{ËÿáŸþùçŸþùçŸÿËøw÷ö¸{ëîíeïÞò.ìÿ¦¿?K’$I’$I’$I·¥ãìÝÙ»³÷Ëž½þùçŸþ/êß»×Ç»×Þ½¾è»×‡þùçŸþù¿œÿ›þþ,I’$I’$I’$Ý–Žwo½{ëÝÛ ¿{ËÿáŸþùçŸþùçŸÿËøw÷ö¸{ëîíeïÞò.ìÿ¦¿?K’$I’$I’$I·¥ãìÝÙ»³÷Ëž½þùçŸþ/êß»×Ç»×Þ½¾è»×‡þùçŸþù¿œÿ›þþ,I’$I’$I’$Ý–Žwo½{ëÝÛ ¿{ËÿáŸþùçŸþùçŸÿËøw÷ö¸{ëîíeïÞò.ìÿ¦¿?K’$I’$I’$I·¥ãìÝÙ»³÷Ëž½þùçŸþ/êß»×Ç»×Þ½¾è»×‡þùçŸþù¿œÿ›þþ,I’$I’$I’$Ý–Žwo½{ëÝÛ ¿{ËÿáŸþùçŸþùçŸÿËøw÷ö¸{ëîíeïÞò.ìÿ¦¿?K’$I’$I’$I·¥ãìÝÙ»³÷Ëž½þùçŸþ/êß»×Ç»×Þ½¾è»×‡þùçŸþù¿œÿ›þþ,I’$I’$I’$Ý–Žwo½{ëÝÛ ¿{ËÿáŸþùçŸþùçŸÿËøw÷ö¸{ëîíeïÞò.ìÿ¦¿?K’$I’$I’$I·¥ãìÝÙ»³÷Ëž½þùçŸþ/êß»×Ç»×Þ½¾è»×‡þùçŸþù¿œÿ›þþ,I’$I’$I’$Ý–Žwo½{ëÝÛ ¿{ËÿáŸþùçŸþùçŸÿËøw÷ö¸{ëîíeïÞò.ìÿ¦¿?K’$I’$I’$I·¥ãìÝÙ»³÷Ëž½þùçŸþ/êß»×Ç»×Þ½¾è»×‡þùçŸþù¿œÿ›þþ,I’$I’$I’$Ý–Žwo½{ëÝÛ ¿{ËÿáŸþùçŸþùçŸÿËøw÷ö¸{ëîíeïÞò.ìÿ¦¿?K’$I’$I’$I·¥ãìÝÙ»³÷Ëž½þùçŸþ/êß»×Ç»×Þ½¾è»×‡þùçŸþù¿œÿ›þþ,I’$I’$I’$Ý–Žwo½{ëÝÛ ¿{ËÿáŸþùçŸþùçŸÿËøw÷ö¸{ëîíeïÞò.ìÿ¦¿?K’$I’$I’$I·¥ãìÝÙ»³÷Ëž½þùçŸþ/êß»×Ç»×Þ½¾è»×‡þùçŸþù¿œÿ›þþ,I’$I’$I’$Ý–Žwo½{ëÝÛ ¿{ËÿáŸþùçŸþùçŸÿËøw÷ö¸{ëîíeïÞò.ìÿ¦¿?K’$I’$I’$I·¥ãìÝÙ»³÷Ëž½þùçŸþ/êß»×Ç»×Þ½¾è»×‡þùçŸþù¿œÿ›þþ,I’$I’$I’$Ý–Žwo½{ëÝÛ ¿{ËÿáŸþùçŸþùçŸÿËøw÷ö¸{ëîíeïÞò.ìÿ¦¿?K’$I’$I’$I·¥ãìÝÙ»³÷Ëž½þùçŸþ/êß»×Ç»×Þ½¾è»×‡þùçŸþù¿œÿ›þþ,I’$I’$I’$Ý–Žwo½{ëÝÛ ¿{ËÿáŸþùçŸþùçŸÿËøw÷ö¸{ëîíeïÞò.ìÿ¦¿?K’$I’$I’$I·¥ãìÝÙ»³÷Ëž½þùçŸþ/êß»×Ç»×Þ½¾è»×‡þùçŸþù¿œÿ›þþ,I’$I’$I’$Ý–ÎýîsçîÒîÚîÖîÞîÑ¢=d»g{¨öÐíaÚö‡kß¡=b{¤öÈíQÚ£¶GkÞ£=f{¬öØíqÚã¶ÇkßîÕž =a{¢öÄíIÚ“¶'kOÞž¢=e{ªöÔíiÚÓ¶§kOßž¡=c{¦öÌíYÚ³¶gkÏÞž£=g{®öÜíyÚó¶çk÷nÏß^ ½`{¡vÚ ·i/Ú^¬½x{‰ö’í¥ÚK·—i/Û^®½|{…vŸöŠí¾í•Ú´Wn¯Ò^µm{µöêí5Úk¶×j¯Ý^§½n{½öúí Ú¶7joÜÞ¤½i{³öæí-ÚýÚ[¶·joÝÞ¦½m{»ööíÚ;¶wjïÜÞ¥½k{·öîí=Ú{¶÷jïÝÞ§½o{¿öþíÚ¶jÜ>¤}hû°öáí#ÚG¶jÝ>¦}lû¸öñíÚ'¶OjŸÜ>¥}jû´öéí3Úg¶ÏjŸÝ>§}nû¼öùí Ú¶/j÷o_ܾ¤}iû²öåí+ÚW¶¯j_ݾ¦}mûºöõíÚ7¶ojßܾ¥}kû¶öíí;Úw¶ïjßݾ§}oû¾öýíÚ¶j?Ü~¤ýhû±öãí'ÚO¶Ÿj?Ý~¦ýlû¹öóíÚ/¶_j¿Ü~¥ýjûµöëí7Úo¶ßj¿Ý~§ýnû½öûíÚ¶?jÜþ¤ýiû³öçí/Ú_¶¿jÝþ¦ýmû»ö÷íÚ?¶jÿÜþ¥ýkû·ö€Ã?ÿüóÏ?ÿüóÏ?ÿü_Èÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿáÿâþoúû³$I’$I’$I’t[:ÎÞ½;{¿ìÙûáŸþùçÿ¢þ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßü/ÿüóÏ?ÿüóAÿ7ýýY’$I’$I’$Iº-ïÞz÷Ö»·~÷–ÿÃ?ÿüóÏ?ÿüóÏ?ÿ—ñïîíq÷ÖÝÛËÞ½åÿ\ØÿM–$I’$I’$I’nKÇÙ»³wgï—={?üóÏ?ÿü_Ô¿w¯w¯½{}Ñw¯ÿüóÏ?ÿüó9ÿ7ýýY’$I’$I’$Iº-ïÞz÷Ö»·~÷–ÿÃ?ÿüóÏ?ÿüóÏ?ÿ—ñïîíq÷ÖÝÛËÞ½åÿ\ØÿM–$I’$I’$I’nKÇÙ»³wgï—={?üóÏ?ÿü_Ô¿w¯w¯½{}Ñw¯ÿüóÏ?ÿüó9ÿ7ýýY’$I’$I’$Iº-ïÞz÷Ö»·~÷–ÿÃ?ÿüóÏ?ÿüóÏ?ÿ—ñïîíq÷ÖÝÛËÞ½åÿ\ØÿM–$I’$I’$I’nKÇÙ»³wgï—={?üóÏ?ÿü_Ô¿w¯w¯½{}Ñw¯ÿüóÏ?ÿüó9ÿ7ýýY’$I’$I’$Iº-ïÞz÷Ö»·~÷–ÿÃ?ÿüóÏ?ÿüóÏ?ÿ—ñïîíq÷ÖÝÛËÞ½åÿ\ØÿM–$I’$I’$I’nKÇÙ»³wgï—={?üóÏ?ÿü_Ô¿w¯w¯½{}Ñw¯ÿüóÏ?ÿüó9ÿ7ýýY’$I’$I’$Iº-ïÞz÷Ö»·~÷–ÿÃ?ÿüóÏ?ÿüóÏ?ÿ—ñïîíq÷ÖÝÛËÞ½åÿ\ØÿM–$I’$I’$I’nKÇÙ»³wgï—={?üóÏ?ÿü_Ô¿w¯w¯½{}Ñw¯ÿüóÏ?ÿüó9ÿ7ýýY’$I’$I’$Iº-ïÞz÷Ö»·~÷–ÿÃ?ÿüóÏ?ÿüóÏ?ÿ—ñïîíq÷ÖÝÛËÞ½åÿ\ØÿM–$I’$I’$I’nKÇÙ»³wgï—={?üóÏ?ÿü_Ô¿w¯w¯½{}Ñw¯ÿüóÏ?ÿüó9ÿ7ýýY’$I’$I’$Iº-ïÞz÷Ö»·~÷–ÿÃ?ÿüóÏ?ÿüóÏ?ÿ—ñïîíq÷ÖÝÛËÞ½åÿ\ØÿM–$I’$I’$I’nKÇÙ»³wgï—={?üóÏ?ÿü_Ô¿w¯w¯½{}Ñw¯ÿüóÏ?ÿüó9ÿ7ýýY’$I’$I’$IºEÝõúù‹Ýùÿ½ÿóÿƳþÇÿØÝÞú¿èçÿ…Ýímþý¯y@õëßê¿æ÷ÿôÛïëËï¸ãî¸Ç ¿ù[¾í;ý_ùï¹Ç3þŸßí»þÝè.ßq¯ïxöüWö÷þ/û]Ýù{úàoÆmë®ÿÞö£¿à?úMýÁèÿ¬ÿáÿž¯øÖ¯ý6oôº¯ýÿ©ßÞÝÞòÁ?¹ëƒöÀ¿ÝíÁÿµ·½ÿçÝïÞÿ©ßü­ínoßÞîοFÿÓ¯ì¯ßÝ?öÿÙßïÿwù÷ßþþ?Ý¿ÅÜïÿßßÞƒþþ÷¯Çí‡{>øïÿ]úpçŸß=ïóoŸôÛxç/?¸ç¾ã^wè×?Õôã#Þû=ÿåqûñ‰>ü©ÞúCûñ‘~ì5ÞêGîüå{º·þ‘ÿòôã=ïé^÷ïüå7x׿óÇ{þþÓüö?Þý ÷÷ŸáÎ_þ‚§ùí;¼ûÛ<î÷ßùãC?óÓüÐáï~ŸOú¾×ºó¯ÃÐüF?Þã/ô›wþxÇý¿ýïùŸù|ÈüÃ|ø;îüÿã=ôçs—þÃ÷¼ãnüñ;þûüõwü¿ÿw}ðßÿ·¯'x±;ÿ@þÛßÿw;ÿƒÿ»üûùßþxçÿþ—ÿýüãù‡þàôã{<øÇ{=ðÇ¿xðïæ;øŸÿ—ÿgüà6îý‘ÿáŸ{=è¯Å#üÅÙo㎿xèoûÂ{õ'ø~÷ýãŸ}þœ>ùþßvÿo¼ó/ÙßÞwø×þü×îßõÿ™6þÛŸïƒþšýû¿çú‹ûÿëßûÿïù?ýûÿ{îüwýÂÏøÐ{=ðïÁ»wþEÿoÿùÿãÿ›ÿÙø/ùÿþýß½ð÷â¸{ëî­»·½{Ëÿ¹°ÿÿÌÿº!I’$I’$I’$étœ½;{wö~Ù³÷Ã?ÿüóÏÿEý{÷úx÷Ú»×}÷úðÏ?ÿüóÏ?ÿ—óÓߟ%I’$I’$I’¤ÛÒ¹ß}îÜ]Ú]ÛÝÚÝÛ=ÚC´‡l÷lÕº=L{ØöpíáÛ#´GlÔ¹=J{ÔöhíÑÛc´ÇlÕ»=N{ÜöxíñÛ½Ú´'lOÔž¸=I{ÒödíÉÛS´§lOÕžº=M{ÚötíéÛ3´glÏÔž¹=K{ÖölíÙÛs´çlÏÕž»=O{Þö|íÞíùÛ ´l/ÔN{áö"íEÛ‹µo/Ñ^²½T{éö2íeÛ˵—o¯ÐîÓ^±Ý·½R›öÊíUÚ«¶m¯Ö^½½F{ÍöZíµÛë´×m¯×^¿½A{ÃöFíÛ›´7moÖÞ¼½E»_{ËöVí­ÛÛ´·mo×Þ¾½C{ÇöNíÛ»´wmïÖÞ½½ÇñîíÅß½åÿðÏ?ÿüóÏ?ÿüóÏÿeü»{{ܽu÷ö²woù?öÓߟ%I’$I’$I’¤ÛÒqöîìÝÙûeÏÞÿüóÏ?ÿõïÝëãÝkï^_ôÝëÃ?ÿüóÏ?ÿü_ÎÿM–$I’$I’$I’nKÇ»·Þ½õîí…ß½åÿðÏ?ÿüóÏ?ÿüóÏÿeü»{{ܽu÷ö²woù?öÓߟ%I’$I’$I’¤ÛÒqöîìÝÙûeÏÞÿüóÏ?ÿõïÝëãÝkï^_ôÝëÃ?ÿüóÏ?ÿü_ÎÿM–$I’$I’$I’nKÇ»·Þ½õîí…ß½åÿðÏ?ÿüóÏ?ÿüóÏÿeü»{{ܽu÷ö²woù?öÓߟ%I’$I’$I’¤ÛÒqöîìÝÙûeÏÞÿüóÏ?ÿõïÝëãÝkï^_ôÝëÃ?ÿüóÏ?ÿü_ÎÿM–$I’$I’$I’nKÇ»·Þ½õîí…ß½åÿðÏ?ÿüóÏ?ÿüóÏÿeü»{{ܽu÷ö²woù?öÓߟ%I’$I’$I’¤ÛÒqöîìÝÙûeÏÞÿüóÏ?ÿõïÝëãÝkï^_ôÝëÃ?ÿüóÏ?ÿü_ÎÿM–$I’$I’$I’nKÇ»·Þ½õîí…ß½åÿðÏ?ÿüóÏ?ÿüóÏÿeü»{{ܽu÷ö²woù?öÓߟ%I’$I’$I’¤ÛÒqöîìÝÙûeÏÞÿüóÏ?ÿõïÝëãÝkï^_ôÝëÃ?ÿüóÏ?ÿü_ÎÿM–$I’$I’$I’nKÇ»·Þ½õîí…ß½åÿðÏ?ÿüóÏ?ÿüóÏÿeü»{{ܽu÷ö²woù?öÓߟ%I’$I’$I’¤ÛÒqöîìÝÙûeÏÞÿüóÏ?ÿõïÝëãÝkï^_ôÝëÃ?ÿüóÏ?ÿü_ÎÿM–$I’$I’$I’nKÇ»·Þ½õîí…ß½åÿðÏ?ÿüóÏ?ÿüóÏÿeü»{{ܽu÷ö²woù?öÓߟ%I’$I’$I’¤ÛÒqöîìÝÙûeÏÞÿüóÏ?ÿõïÝëãÝkï^_ôÝëÃ?ÿüóÏ?ÿü_ÎÿM–$I’$I’$I’nKç=îsçîÒîÚîÖîÞîÑ¢=d»g{¨öÐíaÚö‡kß¡=b{¤öÈíQÚ£¶GkÞ£=f{¬öØíqÚã¶ÇkßîÕž =a{¢öÄíIÚ“¶'kOÞž¢=e{ªöÔíiÚÓ¶§kOßž¡=c{¦öÌíYÚ³¶gkÏÞž£=g{®öÜíyÚó¶çk÷nÏß^ ½`{¡vÚ ·i/Ú^¬½x{‰ö’í¥ÚK·—i/Û^®½|{…vŸöŠí¾í•Ú´Wn¯Ò^µm{µöêí5Úk¶×j¯Ý^§½n{½öúí Ú¶7joÜÞ¤½i{³öæí-ÚýÚ[¶·joÝÞ¦½m{»ööíÚ;¶wjïÜÞ¥½k{·öîí=Ú{¶÷jïÝÞ§½o{¿öþíÚ¶jÜ>¤}hû°öáí#ÚG¶jÝ>¦}lû¸öñíÚ'¶OjŸÜ>¥}jû´öéí3Úg¶ÏjŸÝ>§}nû¼öùí Ú¶/j÷o_ܾ¤}iû²öåí+ÚW¶¯j_ݾ¦}mûºöõíÚ7¶ojßܾ¥}kû¶öíí;Úw¶ïjßݾ§}oû¾öýíÚ¶j?Ü~¤ýhû±öãí'ÚO¶Ÿj?Ý~¦ýlû¹öóíÚ/¶_j¿Ü~¥ýjûµöëí7Úo¶ßj¿Ý~§ýnû½öûíÚ¶?jÜþ¤ýiû³öçí/Ú_¶¿jÝþ¦ýmû»ö÷íÚ?¶jÿÜþ¥ýkû·ö€Ã?ÿüóÏ?ÿüóÏ?ÿü_Èÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿáÿâþoúû³$I’$I’$I’t[:ÎÞ½;{¿ìÙûáŸþùçÿ¢þ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßü/ÿüóÏ?ÿüóAÿ7ýýY’$I’$I’$Iº-ïÞz÷Ö»·~÷–ÿÃ?ÿüóÏ?ÿüóÏ?ÿ—ñïîíq÷ÖÝÛËÞ½åÿ\ØÿM–$I’$I’$I’nKÇÙ»³wgï—={?üóÏ?ÿü_Ô¿w¯w¯½{}Ñw¯ÿüóÏ?ÿüó9ÿ7ýýY’$I’$I’$Iº-ïÞz÷Ö»·~÷–ÿÃ?ÿüóÏ?ÿüóÏ?ÿ—ñïîíq÷ÖÝÛËÞ½åÿ\ØÿM–$I’$I’$I’nKÇÙ»³wgï—={?üóÏ?ÿü_Ô¿w¯w¯½{}Ñw¯ÿüóÏ?ÿüó9ÿ7ýýY’$I’$I’$Iº-ïÞz÷Ö»·~÷–ÿÃ?ÿüóÏ?ÿüóÏ?ÿ—ñïîíq÷ÖÝÛËÞ½åÿ\ØÿM–$I’$I’$I’nKÇÙ»³wgï—={?üóÏ?ÿü_Ô¿w¯w¯½{}Ñw¯ÿüóÏ?ÿüó9ÿ7ýýY’$I’$I’$Iº-ïÞz÷Ö»·~÷–ÿÃ?ÿüóÏ?ÿüóÏ?ÿ—ñïîíq÷ÖÝÛËÞ½åÿ\ØÿM–$I’$I’$I’nKÇÙ»³wgï—={?üóÏ?ÿü_Ô¿w¯w¯½{}Ñw¯ÿüóÏ?ÿüó9ÿ7ýýY’$I’$I’$Iº-ïÞz÷Ö»·~÷–ÿÃ?ÿüóÏ?ÿüóÏ?ÿ—ñïîíq÷ÖÝÛËÞ½åÿ\ØÿM–$I’$I’$I’nKÇÙ»³wgï—={?üóÏ?ÿü_Ô¿w¯w¯½{}Ñw¯ÿüóÏ?ÿüó9ÿ7ýýY’$I’$I’$Iº-ïÞz÷Ö»·~÷–ÿÃ?ÿüóÏ?ÿüóÏ?ÿ—ñïîíq÷ÖÝÛËÞ½åÿ\ØÿM–$I’$I’$I’nKÇÙ»³wgï—={?üóÏ?ÿü_Ô¿w¯w¯½{}Ñw¯ÿüóÏ?ÿüó9ÿ7ýýY’$I’$I’$Iº-ïÞz÷Ö»·~÷–ÿÃ?ÿüóÏ?ÿüóÏ?ÿ—ñïîíq÷ÖÝÛËÞ½åÿ\ØÿM–$I’$I’$I’nKÇÙ»³wgï—={?üóÏ?ÿü_Ô¿w¯w¯½{}Ñw¯ÿüóÏ?ÿüó9ÿ7ýýY’$I’$I’$Iº-ïÞz÷Ö»·~÷–ÿÃ?ÿüóÏ?ÿüóÏ?ÿ—ñïîíq÷ÖÝÛËÞ½åÿ\ØÿM–$I’$I’$I’nKÇÙ»³wgï—={?üóÏ?ÿü_Ô¿w¯w¯½{}Ñw¯ÿüóÏ?ÿüó9ÿ7ýýY’$I’$I’$Iº-ïÞz÷Ö»·~÷–ÿÃ?ÿüóÏ?ÿüóÏ?ÿ—ñïîíq÷ÖÝÛËÞ½åÿ\ØÿM–$I’$I’$I’nKÇÙ»³wgï—={?üóÏ?ÿü_Ô¿w¯w¯½{}Ñw¯ÿüóÏ?ÿüó9ÿ7ýýY’$I’$I’$Iº-ïÞz÷Ö»·~÷–ÿÃ?ÿüóÏ?ÿüóÏ?ÿ—ñïîíq÷ÖÝÛËÞ½åÿ\ØÿM–$I’$I’$I’nKÇÙ»³wgï—={?üóÏ?ÿü_Ô¿w¯w¯½{}Ñw¯ÿüóÏ?ÿüó9ÿ7ýýY’$I’$I’$Iº-ïÞz÷Ö»·~÷–ÿÃ?ÿüóÏ?ÿüóÏ?ÿ—ñïîíq÷ÖÝÛËÞ½åÿ\ØÿM–$I’$I’$I’nKÇÙ»³wgï—={?üóÏ?ÿü_Ô¿w¯w¯½{}Ñw¯ÿüóÏ?ÿüó9ÿ7ýýY’$I’$I’$Iº-ïÞz÷Ö»·~÷–ÿÃ?ÿüóÏ?ÿüóÏ?ÿ—ñïîíq÷ÖÝÛËÞ½åÿ\ØÿM–$I’$I’$I’nKÇÙ»³wgï—={?üóÏ?ÿü_Ô¿w¯w¯½{}Ñw¯ÿüóÏ?ÿüó9ÿ7ýýY’$I’$I’$Iº-ïÞz÷Ö»·~÷–ÿÃ?ÿüóÏ?ÿüóÏ?ÿ—ñïîíq÷ÖÝÛËÞ½åÿ\ØÿM–$I’$I’$I’nKÇÙ»³wgï—={?üóÏ?ÿü_Ô¿w¯w¯½{}Ñw¯ÿüóÏ?ÿüó9ÿ7ýýY’$I’$I’$Iº-ïÞz÷Ö»·~÷–ÿÃ?ÿüóÏ?ÿüóÏ?ÿ—ñïîíq÷ÖÝÛËÞ½åÿ\ØÿM–$I’$I’$I’nKÇÙ»³wgï—={?üóÏ?ÿü_Ô¿w¯w¯½{}Ñw¯ÿüóÏ?ÿüó9ÿ7ýýY’$I’$I’$Iº-ïÞz÷Ö»·~÷–ÿÃ?ÿüóÏ?ÿüóÏ?ÿ—ñïîíq÷ÖÝÛËÞ½åÿ\ØÿM–$I’$I’$I’nKÇÙ»³wgï—={?üóÏ?ÿü_Ô¿w¯w¯½{}Ñw¯ÿüóÏ?ÿüó9ÿ7ýýY’$I’$I’$Iº-—½Ï»K»k»[»{»G{ˆöíží¡ÚC·‡iÛ®=|{„öˆí‘Ú#·GiÚ­=z{Œö˜í±Úc·ÇiÛ¯=~»W{‚ö„í‰Ú·'iOÚž¬=y{Šö”í©ÚS·§iOÛž®=}{†öŒí™Ú3·giÏÚž­={{Žöœí¹Ús·çiÏÛž¯Ý»={ö‚í…Úi/Ü^¤½h{±öâí%ÚK¶—j/Ý^¦½l{¹öòíÚ}Ú+¶û¶WjÓ^¹½J{Õ¶íÕÚ«·×h¯Ù^«½v{öºíõÚë·7hoØÞ¨½q{“ö¦íÍÚ›··h÷koÙÞª½u{›ö¶ííÚÛ·whïØÞ©½s{—ö®íÝÚ»·÷hïÙÞ«½w{Ÿö¾íýÚû·hØ>¨}pûö¡íÃÚ‡·hÙ>ª}tû˜ö±íãÚÇ·OhŸØ>©}rû”ö©íÓÚ§·ÏhŸÙ>«}vûœö¹íóÚç·/h_ؾ¨Ý¿}qû’ö¥íËÚ—·¯h_Ù¾ª}uûšöµíëÚ×·ohߨ¾©}sû–ö­íÛÚ··ïhßÙ¾«}wûžö½íûÚ÷·h?Ø~¨ýpû‘ö£íÇÚ·Ÿh?Ù~ªýtû™ö³íçÚÏ·_h¿Ø~©ýrû•ö«í×Ú¯·ßh¿Ù~«ývûö»í÷Úï·?hØþ¨ýqû“ö§íÏÚŸ·¿hÙþªýuû›ö·íïÚß·hÿØþ©ýsû—ö¯íßÚÿüóÏ?ÿüóÏ?ÿüó!ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ'ÿ“ÿÉÿäò?ùŸüOþ‡ÿ‹û¿éïÏ’$I’$I’$IÒmé8{wöîìý²gï‡þùçŸÿ‹úßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿ùßüoþ7ÿ›ÿÍÿæó¿üóÏ?ÿüóÏÿýßô÷gI’$I’$I’$é¶t¼{ëÝ[ïÞ^øÝ[þÿüóÏ?ÿüóÏ?ÿü_Æ¿»·ÇÝ[wo/{÷–ÿsaÿ7ýýY’$I’$I’$Iº-gïÎÞ½_öìýðÏ?ÿüóQÿÞ½>Þ½öîõEß½>üóÏ?ÿüóÏÿåüßô÷gI’$I’$I’$é¶t¼{ëÝ[ïÞ^øÝ[þÿüóÏ?ÿüóÏ?ÿü_Æ¿»·ÇÝ[wo/{÷–ÿsaÿ7ýýY’$I’$I’$Iº-gïÎÞ½_öìýðÏ?ÿüóQÿÞ½>Þ½öîõEß½>üóÏ?ÿüóÏÿåüßô÷gI’$I’$I’$é¶t¼{ëÝ[ïÞ^øÝ[þÿüóÏ?ÿüóÏ?ÿü_Æ¿»·ÇÝ[wo/{÷–ÿsaÿ7ýýY’$I’$I’$Iº-gïÎÞ½_öìýðÏ?ÿüóQÿÞ½>Þ½öîõEß½>üóÏ?ÿüóÏÿåüßô÷gI’$I’$I’$é¶t¼{ëÝ[ïÞ^øÝ[þÿüóÏ?ÿüóÏ?ÿü_Æ¿»·ÇÝ[wo/{÷–ÿsaÿ7ýýY’$I’$I’$Iº-gïÎÞ½_öìýðÏ?ÿüóQÿÞ½>Þ½öîõEß½>üóÏ?ÿüóÏÿåüßô÷gI’$I’$I’$é¶t¼{ëÝ[ïÞ^øÝ[þÿüóÏ?ÿüóÏ?ÿü_Æ¿»·ÇÝ[wo/{÷–ÿsaÿ7ýýY’$I’$I’$Iº-gïÎÞ½_öìýðÏ?ÿüóQÿÞ½>Þ½öîõEß½>üóÏ?ÿüóÏÿåüßô÷gI’$I’$I’$é¶t¼{ëÝ[ïÞ^øÝ[þÿüóÏ?ÿüóÏ?ÿü_Æ¿»·ÇÝ[wo/{÷–ÿsaÿ7ýýY’$I’$I’$Iº-gïÎÞ½_öìýðÏ?ÿüóQÿÞ½>Þ½öîõEß½>üóÏ?ÿüóÏÿåüßô÷gI’$I’$I’$é¶t¼{ëÝ[ïÞ^øÝ[þÿüóÏ?ÿüóÏ?ÿü_Æ¿»·ÇÝ[wo/{÷–ÿsaÿ7ýýY’$I’$I’$Iº-gïÎÞ½_öìýðÏ?ÿüóQÿÞ½>Þ½öîõEß½>üóÏ?ÿüóÏÿåüßô÷gI’$I’$I’$é¶t¼{ëÝ[ïÞ^øÝ[þÿüóÏ?ÿüóÏ?ÿü_Æ¿»·ÇÝ[wo/{÷–ÿsaÿ7ýýY’$I’$I’$Iº-gïÎÞ½_öìýðÏ?ÿüóQÿÞ½>Þ½öîõEß½>üóÏ?ÿüóÏÿåüßô÷gI’$I’$I’$é¶t¼{ëÝ[ïÞ^øÝ[þÿüóÏ?ÿüóÏ?ÿü_Æ¿»·ÇÝ[wo/{÷–ÿsaÿ7ýýY’$I’$I’$Iº-gïÎÞ½_öìýðÏ?ÿüóQÿÞ½>Þ½öîõEß½>üóÏ?ÿüóÏÿåüßô÷gI’$I’$I’$é¶t¼{ëÝ[ïÞ^øÝ[þÿüóÏ?ÿüóÏ?ÿü_Æ¿»·ÇÝ[wo/{÷–ÿsaÿ7ýýY’$I’$I’$Iº-gïÎÞ½_öìýðÏ?ÿüóQÿÞ½>Þ½öîõEß½>üóÏ?ÿüóÏÿåüßô÷gI’$I’$I’$é¶t¼{ëÝ[ïÞ^øÝ[þÿüóÏ?ÿüóÏ?ÿü_Æ¿»·ÇÝ[wo/{÷–ÿsaÿ7ýýY’$ýíÜA À0Aræ©(ª“²3ö“S ¼bnïnïnïÙÛûô¯ýë_ÿÑþí^ÏîµÝëèîõô¯ýë_ÿú×®ÿë÷gxÅìÞÚ½µ{Þ½Õÿô¯ýë_ÿú׿þõ¯ÿLÿþÞÎß[o³oõ¿pÿ×ïÏðŠ¹½»½»½goïÓ¿þõ¯ýGû·{=»×v¯£»×Ó¿þõ¯ýë_ÿ¹þ¯ßŸà³{k÷Öîmx÷VÿÓ¿þõ¯ýë_ÿú׿þ3ýû{;oý½Íþ½ÕÿÂý_¿?À+æöîöîöž½½Oÿú׿þõíßîõì^Û½Žî^Oÿú׿þõ¯ýçú¿~€WÌî­Ý[»·áÝ[ýOÿú׿þõ¯ýë_ÿúÏôïïíü½õ÷6û÷Vÿ ÷ýþ ¯˜Û»Û»Û{öö>ýë_ÿú×´»×³{m÷:º{=ýë_ÿú׿þõŸëÿúý^1»·voíÞ†woõ?ýë_ÿú׿þõ¯ýë?Ó¿¿·ó÷ÖßÛìß[ý/Üÿõû3¼bnïnïnïÙÛûô¯ýë_ÿÑþí^ÏîµÝëèîõô¯ýë_ÿú×®ÿë÷gþ÷@AVfs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/tab_cdroms_2.png0000644000175000017500000000437112162366654024642 0ustar glaubitzglaubitz‰PNG  IHDR szzôsRGB®ÎébKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEÜ 9^£yIDATXÃÅ—IŒT׆¿;¼¡ªº°aî"Ù¡`À¶¬HIìˆM콇M$‰²DjU„½ÊŽUŒHÙ9 É–!ÅA ±E" `»1Ð4£±ôTó«;œ,ª@Ý;8›”ôëÖ{UuÏwÏ=÷¼¿”ˆðÿ|ÙoóåjµºL)õãJ¥üZqƒ÷~‘÷>K’¤H;«µ9_¯×ßÞ›¾Ÿ9Õýd Z­n.—Ëo‰È££ÔêÕ«ô¢E‹È²Yšà½§St©×j\¼x)žù쳨”ú¨Óé¼¾oß¾³ÿ3À²v»ù»å§OìØnGGF(ºE§÷‰ $6!IRÒ4cpp­5gΜáƒ#G¼µöÝ4M_Ý»woñ­ªÕêƒyž]±bÅú]»v(m4SS7!b´A+‹ÑcLïZ[Ò$¡\®`¬%/exïùàƒ¿Ê䥋­Vëɱ±±÷ðæ›o®TŠñmÛ¶.ajú&µÚ\?Áh‹"ÁhK’¨þ=C©T&Ï2´Öh­I³ ›ZN:ÅÑ¿iw:ï†Ð÷J»µæoÛ·ñú ë¹ty’©©[ĉAúŠÄ ‚—¾" Õû< "àœ£hwxü±Çصsçp¥\>zàÀì:ö;<úÈÚM›6róæ—ˆD@|$Äžb„ˆà}H"heQH¤Ñév»lÙ²…Õ«W­wνóµû÷ï !¾üôÓOªZ}–"ÖZ¬I@@‚„ñ…Çù‚z½C«Õ!FÕS ! ‘>D‚÷<óÌnåœ{yÿþý£÷Èòìà3»Ÿ²ÆZ­&ÆööÛZ‹1 !®ðÌLטžž¡ÕlÓiÌÌÔ©7Û4mœ„~BPDï<õz<¹k§ÍóüàWªÕê„£##4ês½•[‹±­-ÆXœ LÏÌÒétq!¢  ø‰É(\ ÑìÐíz|¼Ôë ÍÞºEÁèè(1ÆÕjuÉÝxaóæM:J@^pm±º7Æ h·‚"ˆÇ&Š4`ÉÒE /~Ryˆ5>@½Ñ¡Vo23;GQ8|BŒøØ›{ݺµxaA+|mýúµ:„€µ…1‚ÂE»]¥ÑZQ*åˆæìñ/gfg–/^v}dÖ‡~h½uë&µú,yž0<<„( h JpαfÍj}ùò•×€ßßÉ€HܰhñbàváÙÞù6¶W\JY²¼ JùS§?nLMO¶OMßøíGÇ7®\½àCTt O£ÙÁ¹ˆóï"! Î{††‰1nXçÜâR)§(Zm£ˆFúÇÏ!’¢äY…‰ ÿøx{llìWýŸŸ¬V«LLþëÕíÛ÷|ç‹7 Y8Ê:A´¯P´¤Y†snñ‚pÎgYšõZ«±Ähð.%†¢e RbÉÒœåæÌÎάÐZ¿·à*Ö­ÙºüÖ­?ÿ¼Z­¢µ~¯£~ñø÷6 Ejdy›¢k"ˆÃy P k5Íf“Ä&s ´6çkµÚòJeÆD‚cÀE’@¹<@¥’b“œ¡Áe&Ë~84~柯LMOí{ॷ¶<¾yhdd­š¸0Nž)¬uhíAõbû 0AÌÍÍaŒ™X077wðܹó;}ôQ| XÐ’D£MÆÊ•Ôêm¼´Z –-Y®Ÿ}úG«Ó&ªöJçjLL| Yfȵ!ÄÂ`pÁ $ãÚ¥+±^¯¿u·%{ÿôéOä¹çžÅ‹5 2K°à< ,Ë@ ‘7¿¤^›é-²ÜcGš&¤iÖ;ÿ¾ JF/Q†…k×® ðþ‚"›6Æ|8>>Ží;›´1 Ú²,£T.aŒ¡(:ÛkV½ç¿EB@ëHŒ]bp( ˆt@ˆ'O-/L`¬ýð¶g\`J[­Öë‡ÿå“Ñ‘ÖKŒ µ`Œ&Á˜H‹HÂðÒa\7!úZåX Šœ õž]S hDDO”ˆ1 E×qæÓs2353Ùh4v½ñÆÿþ¯®X)¥˜;v”÷ìÙó`ÏîÝÏÙÑÑïÒ)<í®§Ùê‚»X‰ ˆÈä…Kœ;sÎÇÿxèСŸþé§:vìØ‘«W¯^ÀàîàDD_œÉí­è+€2P™§¬?ih­þx[n^êÝí•ß÷ŸÓy@wKÍS¯ÝCœ7ΗÈ×úÞ¯¼¤ˆz3IEND®B`‚fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/__init__.py0000644000175000017500000000000012162366654023670 0ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/new_button.png0000644000175000017500000000134312162366654024464 0ustar glaubitzglaubitz‰PNG  IHDRóÿaªIDATxÚ“ÛKqǧžŠ0zÒžCò¡Þƒ^Œ¨ˆ"úÊÖÝu]6ïWŒ(¢ˆD+,¢)yWŠ  £¢huÓݹÏ^fvö¾®³ûí7¿]]—|†ÃÌï|Îùýf†™~;~zæÝ793†É™QLL`|ÊäI’äS£Ã' ÿù*ÂÂÂ.Œ C U !—Ëí “Ù€,{°ò½{3Ê]”4weJùVžJóÕDRNÃ#¯èâh,а®"¨ú¡D ^ô!Àö,FÂ{ö¢B´ß‡Í{½†yùú‹%ˆ2Vð‚ã yªIÁA„~€±Á"›Q ,•Aø\ž¿T´1OŸ?¦‚b1Žtör qc¿îÇÎÈЫçSi’|ò€²[éØ>~ k¾Uˆìé^…û€l±>„òã$¸ÅŠyfàa?²D ûé¾iw–_‡—õ€eç‘”-à—Èø©U  ™ø¬Ï•›òÙcLßý{ÿxS ¬›[ S¨b?ÖæJa†Î¶C÷µÐÜ=[’!‡¸›¹Û{» ˆ€_˜‚¼Aø ~ù8<÷BZ®„wáÜïK2+³û†èk¼uçFA ARxˆ‰"äñç ú—M-bðQSvèEýžíéúÍzˆþ B)B †üªyBj€¾­®ž££«µd[Ð}­“>PÃA¨ZZ8MW¦hGòèzf´u4Í­ EA{g èÑ0%ÓE‹G)ñDÌ„æf46» Wƒ³(hj¹J[‹É8’©Ré$ÒéÒš›átÕuõ¶¢€Œ#©jÿ‘ˆNŽ€ÅVSüNû9W£S¬«·v‡Õ°9j [ŰÚ-F­ýŠQk«1,V“Ëfg™ähq¿ªIJ PDIEND®B`‚fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/adf_extended.dat0000644000175000017500000000405312162366654024677 0ustar glaubitzglaubitzxœíÆQ !Ág û0‚pgۘǜ —B˜…í{j{{’u*Iùyï½÷þ®€km¡ïsfs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/save_as_button.png0000644000175000017500000000157712162366654025325 0ustar glaubitzglaubitz‰PNG  IHDRóÿasBIT|dˆ pHYs × ×B(›xtEXtSoftwarewww.inkscape.org›î<tEXtTitleHard Drive©O·2tEXtAuthorJakub Steineræû÷/#tEXtSourcehttp://tango.freedesktop.org}²Œ§‘IDAT8•’IhSQ†¿{ß5M“¶Æ:‹­$A¥àBÔ ÎuÀŠ ‚Pt¡ ˆâTAq)bª A\‚ADê@µ¸³¤­cš­µ56ï½¾ ï]V­.üálÎðÿÀ›¯ùš´ààçÿäÍiÑ÷ ßÜ–ê5ä¸È¿:ëV®¥µåáo9×Ë¿Ûygú øCÁÊÈ¥Ëþ:|ôðqñ–Š â¾aÓÎdõj0=mˆû†Å¦«¾&%|ç :7fû² è뤻½wLMj…' 'TîÞŠóû<·fåúžD"ñ\J¹ÝqÞŸ€mf)8pvùK¤ eƒÜº}“×íoΫ_ eïû_-in=BÀ"ïè"ÀrÈ;š‹Ï¶bx%lˆ`~ÅRLÓ*:°,@5?96+¶ÚÏŒe9ÊÃåáÑU¥bC<茣”¶mT`¡µçX.©ß))•,\U ÀôYUTM­ çÝW¾¥2¸i?†aËå~q`šjëÂC|hµH' óYµ4å¡JÌ>0S’ïo%æîÅ0 „£³è@Í›YG|ß JúgÓÑ’ÂïT1^O¢£%Eé@„+{ž™\‹RjP<Á´ÐZÙl–|_ž3;nó¸ã.ñë§صþ$‹çl$ù)‰R ¥RÊQ€ã8h­éêê"’L&‰NXDÓ–H)™6±šB¡@8¦­­ÚÚZ<Ïd¦iÒØØˆëº!BàyZë‘p]—šš”RäóùQ@ÆÌ|i¾~mJ,6—D"mÙ˜¶…=ì „  RQQI:¦³û-‘šj<í½õõõ„Beë"b星ý‹<ÏKBîþñÃ|ô‘ÌM0}¡u IEND®B`‚fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/cover_overlay_square.png0000644000175000017500000002727112162366654026547 0ustar glaubitzglaubitz‰PNG  IHDR€€Ã>aË pHYsÄÄ•+tIMEÜ 1xÑÞ¡tEXtCommentCreated with GIMPW IDATxÚíyœU™÷¿Uu÷¥oßô¾§ÓéÎ QÇòEƒʈ Ì88 ®ã¼3úŽ£àøê âÀ(D•EDAEd $d…¬ÝI§Óûv÷­nU½œ{r«WºC2½Ïçs?·ï½U§Nç÷ìÏ©†9eYX–E‰þüH--A %* D%”¨€ýå‘2ã”yžS¢7‡,Û»õF ¯Ú^J Ç5ó-À´½f‚cРǹgás Ç/ó @r@¾ðùˆ %ß xáÝeA‰Ž/ƧdáÝšM Ì~à €»ðY-฀Yþ,ð ·™‚y›»p··¿xµiZ¨ªÓvˆÔ0Ó •Ÿð½iê¨êT܈1µÂå LÓ´}žÍ4ö_"íÝû¶x–*€ööß í?šæcß¾÷ašPÍÍß@QŸ`ll ]]ÏpñÅ¿Êm·­à¹çîåßÿý*¶ný%¿øÅwزåÔ×ÇØ»÷w\~ù)À.††6‘N¿tØbÅb;Ça€þçwæä¬«sÐö¦™&¹žÍ›7’J%QUðz›øö·Oæê«?„¦iôööÒÕÕÛ]Ë—¿|†aÏ$¾«ëÛ|ë[557£(n@!‹qà _åß09í´sH&“d2†††¸øâ‹X¾|9ñxœ«®ºŠŸüä'ŒŒŒ ªê£¿ÿ“Ü~»‹ýû¯EÓ<éù9EjóÎær½X–¥0t*ÕC2ù¦ùAÜî V®\Ikë"–,QÑõÁ‚&Àtº ÃH´@‚`0„¦åÏSUUÖ­»Eqðàƒ¾¦ßïç±ÇeÇŽmüñà{ßû—^z)çð=[V‚²²rL3V2óPó ÝÝ×ó£-ã„N¦£c÷Þ»’¹ä’+yòÉ'¸çž{H§Óô÷É\Éý÷UUù—ù:Ÿÿ|'‘ÈFLÓdñâá£í¡·÷ XV°ƒ46†¹á†UU!ü~?^¯E .¸›nH’L.¦¬¬ŒPHü  ÓLR_üà/þ †‘)qwŽªb&Ò a_¨njoy]ÿ¿Hl°jœŽaøH§ÿPøÞ¤¥åG¶^ç°*¿Ì‚ð…ÓÌ­Äü#!Ç|OÈ+~®µEæG‹tàü)²=‘RÀ'TW‰ko&d~Ï8ÊÉÏa\½Ä¯7; (Q %* D%”è/Ù ôpô›DÓA¾Ä“ã>-Ä×ÔÇd2·Î![P;)AT¢ÿE˜¦NcÓwªê{]™6Í8ª*rõ¯ÇXÓLÌi"#h”8÷f@U,+G&ó##Áá˜YãqÖÖ'èï?§³x\"¡SVæ"ÏašP^î!uÐÞþl)—ÿVñtÝä?øË–„ÏçCÓ´ ¿kšÆUW]Â&?üázV¯>‹x@6›ell˜¡¡3q8r¥þs€ÃäСoÐÞÞ>ƒ4/bñⱬþ, ª ù|”%K¶Ïðü@³dÓÿÜÃ@UU0Ídɦ¿Å©ÔR@‰J(Q %* D%”¨€•P¢JTÀTÒu0ÍÒ¢ýÅà¾ûàŠ+ VzÓ_&TÖ¬¯~r¥BߟÍ«dYÂ47Ã…B>é4üîw”óÏñ8ø| ipñÅPV&@qÎ9ðÿ/¸Ý¥ý³€ª‚Ã!˜ ÂO„Å‹-öïwâpè”6z{ÒuXºÚÚÄç½{-vírâvëÇPìõ‹Ç!,‚àÊ+Ýüú×?ãÅ/Åã)… ÇšÚÛáŸÿY¤¢Àè¨Æ3Ï<Ä=÷|àØ9†ccJ mL ?@ס¾>Ë 7\Îúõ'œ Ž)ÑÑ'Ã>Ø¿(˜B+* Þ÷¾pÓMsÛi•͊׼5@0X¼°a@¢°#ÌïWд~¿Âßþ-œ>ü뿊ãKôÆ)›-:áW]%|1ÓÒ¯(`š ªšcÅ eF“átŠs¢QøÚ׎™ x½^á¡/[&$Y2ß²Š!ž¢æZ”— ÆMNÌiš¸ÞLÚ~¬=Â(à(S2 ÿþï‚¡’y–k׊Ø[ªí|^DMßý.TW `Y ‰D1Õ.0ÓåovM0J§³Ž Ó¶måJ8í4hn¶ÈfUŽç'ˆ†ðÚ³Ya[Ï>[äè-«¨f-K¤no¾/ǽ÷½ðÄÂëº`M …`dDŒk"´“¿Åb é´X/ »¦˜$ ã8Ô.üÇ€ß/ÓÎ /¼ðGîºk ~ÿñùpÈÅ‹áÊ+ƒzz£¥ÔK¯[ªoŸ>ó†E‹ƒS©é™çt PÉ1úúÄ9ö„šaÈ1¤ÍÄxyd²¨]o¶ÄëºJ]]/.W=ÿ÷Öa‡'—ƒª*‹ /|'K—æ¸ç…]»HÞ,I—™O§S|>é$!Õ2V[+À‹7éÛ»xq1†Œ“ÍŠ_Qà ZZ¦fS¥ÖÈf‹I¹™¢1»Óèó5Ô› Mƒk®±X¾ÜOE…ÅÈô÷‹8Ux­ ªª³p¡Âµ×ÂöípÇê›Rm\²>ùIÁØk®6þ‹_„H¤È8fƒEZV±¢(BuKí`wÊE¬G_Ÿpô–,)2)™fb¦~ ¯Wœ¯ªÁ6Y$“ŹHgÔñfI¾ßÿó? ªù|–%œ!i÷¤Í³,|]‡šeËzÙ¿áÿZxv b_ûšðî- yD¤Ågй%(@0MÓŠžô ¤Ã(ÇÔ4‘ki™²ÉÞ ©I¦“pûw3iQ0*&“ÞT `šð‰OŸÉÉE)Ve~;†HÄI ÐÿÛè±¢X ¾÷=‘0I¥ŠÕ8E6Üë(]v[/™‹ @{‚0MÁœXHe¥˜ooïDFH3d7U‘ˆ¸—É;àt]¼öï/†º2gH ápˆyJ¿g2³äúÈ”n>/4¥dâà ˆ@ cæ"ÜdÿáˆÂÀ¹˜EÒ$' ïyáBqËM¼ÉTJ¨4»—œÏ †WV'‹…•”i*x<9V­RhlTH§Å žu–X¹ð€êÍ›á¿ÿ[Ìi²æ1 X¿¾¸Ø–ùˆ8_Ò¾}ðÊ+S×ãoþfâqŠ"D;\.¸ûn1¿~Tä ìj]fñ$ا“V;މu‡C¬—ÓtÔÝ=¬óÖUU¯/é>| Ð—øðâe|õj±(2­ëÅöz…´g´LS|ošâ8©.ÇÆÄv5_UeQ]]ÉØ˜uX5N–HU…“O†o´¸ï¾šæŸ2o»©Q¡Ø™ápL]\Uz\s³hÚ°kÍ'ž(†pwÞ9sôðFësÏšk:Â8Ù¼Ì{cÈl9ð‹/Ò,kÏk׊EÛ¹SH¢Û-˜­ëÅE÷z…)H$Šááä|µŒ¥z›)ï]V&Ô«ß?±SFž“ËAG‡Å¾}¯¯Ó?ÝýO>n`@Äò“"Ïo¾~>´aÃÌ<2 ±.>8qϼ÷È…µ¬¢ÒuQÆôû…º“‹-½ü¶¶bfL¢5 “cÉIMöÙÓœv?AÎ%Þ°½"ªd Ngà˜w(½Y½³Ý×Ùg‹µ¸új¸ãŽ#ô**à}ï¶°²R¨vé éº`r8,<“)J³‚=¶•aˆt'Û<»d·¥“}…`P#w.Û5…¢:_b.ÕÕbŒînaÿþÜšXìšu:aYÂŒ_x¡àOKË<på•b/¸ è<¥ÓB}wt/¢iS=î霛Phâ„í!–”^UiUŸO¼ËI2>-jé¥KMaÂìHÕÖ ­uýõðüó°cGQ«½žÏdB O>–/­{39èº.jªz‰ ßþvâg·[,êi§q2£%C'Ûd¹à“S(Ùì(™+ÃF yŽ=ì±÷ÉOvêäïN§ø¼zµ˜ÿ–-pÊ)bÌ;‹çñN2Ï¡i‚]TÀÙbÿDbbVq^˜¼ÛÇ0`ÅŠ™S“’âñéw3ƒöæ {§«Ý³·O|òõì¹sù»L6MN«ÊíTUUðwWôîO?6n1ûähBù_Þî8™‘ö{p»EÏÀ‹/ŠH+ŸŸ}ŽÒ܆B×ôˆóé´è\ÍdЦÉ@»P,˜¨!Dxây“óÙ©ÔÔf™3˜­óUú¹œxMÞ™dÏÙ74ˆcì›*¤_óê«"œ“×~õÕ↘£ê0*\št>‚½?Çë…ÆFqí®®bÉ·²Þõ®"à×®-¶š½ž Êû—–JÍÍÍEæ­\)œ*ÉÀD¢h—íOÜA”J µ-Õ¬ìr‘B2CfíÚF×ÅBØý yÓÙìDÂ4ŘããS3jªZ;“™ß[–°¥ápqŽº.ÀŠqåýÈyØA4R…—>ÀãƒßàkgîD'‚e)…pµ˜`:ùd1~s³˜“ÇSLû:≈õŸ)lßÍ-)˜'Þõ®b5ËkKµ] ·&n]Òõ"2'gâ$£$s²YÁ"ÚOÍ–I‰¶çìy JéWØóîòú²b÷-*Jüð°¸g™œ’;£|¾bDÒ×7µx%ÛÁ쾌Ô.ÍÃ㛿ÁkàÿÍå§}ô'¹¤6¬¯jßžbŽÇ‹ãÇã"Af€fóìšvÞ&@QŠÌŸ./«f2ëOìaŸiRHù¼8w2Zå˜ÑèD_Ä~}ÙLi¿Q{­A:Ó9¢^¯ª¼¾½ S[[Ô>Å ;ØTU¤»ekX>/òeeB›¤Ó¢¸ÔÕUÈË+ £©!ÚVÁ†Ýðö¶XX(Š…Ï§L¨+Ø+|v0•—‹ë$“ó÷)GYGâœH{œÉL\¹¸’ñš6ñs!)e3åÄ]®‰¿b‘diu&M§'ß—Ô“G ~ÓUBû8²U¬­Õ‰Ï$Ÿ7©­…3Ïj¼±Q̯²Râì³áÔS¡/»Ç‚}t> l…ÜÎC|óÙOâvxÏLS8ªRÝÛH¤jZñI-³Ù{ ½f£‰8>>±GN.šTÑ2L³o•ÇÉ›I»Øk쳩2)š&˜ïóm¹œÏdSãtN¯‰¤Z—y†ÉÅ"û˜á°ð¤loŸ·ŒÞͺõ'ð„hi™Ø $Ï— Zttè|óékYî…ÓËáåÐFvÚJ¸ÜEG»J}½…Ã!Æ‘Œ“À°—ší@”QÕL¹ÉéÇd2ó4¹\q¢×+þN¥ŠH”éW{“B,&¤V2]vM.¬äósÛOhšEÄÏže2wÐÈZL×`bî²DwàÈ.Z v¹ gÑ"Èç-*Ã^ò¦ÉwUï†NôÐ?c¦&Ó´h¨¬àë¿þ)Þ€‹ÈÎC&8O=ß~ì3 f{¸ç†ŸPU•>,hO1H&'öNØÍÙL»ƒƒAqžýó6°çåå‚©ÁàÄ¢Ž]rd6P>” “¶×$H¤33[ÁI~/UßëiE)6[H“•ÏOÔBR²ä5­Øê%sö:…\.‡šäs?ý,£±1êVÃÆnø§Ïþš¦Ì$ Nÿʉ<µûÒé} ÂO>ó(æÞ,·}ôv2¹ôa)w:‹ž¿ù`û}ÀÌM;v±¿æ€d²¸UÚü²²Ù+\O­v –ª;*:b³mo¶Kâë™Yç¤RB{ÉgÄbÅZ‚}·­Lù|Ųô–e>AFå2þî[ïfßè^ëÛ‰Ñ mýð|ù‹8=Ùi›O4McÓÖMT—»að*h¯‚ª1øð¾—üJ“5]CM¸šTÊ:|¯†Ql7 źÆbB[Éö9ÙŠ6IÀ ˆÒ¼|Í R¤­·çîg²;“Uµý]×ÅXÂyáO,–"‘HJ¥Èfs˜¦‚Ü$%x.Žª” ©iìs,//V.eN\Ž+9y®v¯Û²,î}þnve ó}üÃOÛ Ï=ÂXbŒL&9MÛ–£ÊIWWœ%+€Cб̧ œ§¶ø#µg–såmÇçÓ&„–²Ò*ç)5BYYQcÍ$ѨˆB¼Þb3ªÛ}a TÁ²Ç<.fí*JƼR‚&OL¶>˪œ¢”ñ³ŸÝ‰¢DØ´é•Â?•V¨©i哟ü"nwE1§ =í;^e¯\ !H“ óÓr®QЦ9Þ•à¼^'OÖë(~x¹òYø«æ÷pÉû/áþ;~ޝÍ?eÜ5ËßÍ>üc>ýû¿‹ i;ì«„¤ÌD‡ß<újjkÈæ³€‚ªNL–ͤÚg£šš¢##¯wžÀ¾èò 2ŒÇÅÛ{â§óLíZCÓ,t=Ãï?Âý÷ÿ'~¿Žß`Íš58NxõÕ—¸á†‹ùÓŸv’ÍfˆÇ• ãHÆF"ѨPÑÒO …¦o>m±f*¨ˆëX(ŠB2ä‡ÜÆ uZ›ÁÊ@µÔjxêößò‹‡žæ{¯ü'ªíB¹œûwO>ÆÇºŠÈV ¿íý œwùûì±iÓnÂa²záKÈŠçt;—g#§S”óÃañü¦ŠŠ#xFiz ñc “›\»·WñdŒ+Nz{3¼òÊoH¥²ôöä²Ën䡇¾‰e™ƒåôõuSQQA  ±±‘ƒÒÐÐ@mm-<òî¿?ÏÚµïçŒ3.aëÖ_²o_'áðÚÚÚX±â†ð¾¥½“šFn,‘ÑÁl>K$RL\MÔ2âq÷>~+?ÚùBÝ»€XÃ`Ö@`\üÿÞÅÇZßeÛÔ*}‚%+—°ã’Wùú_gýïÖã¨sž{î>óçyyë³ühã¹íoo#«ggMäØ#Éfn:K žNmæ€o¼‰t:É7¿ù²Ù^¯˲¦H•øÛ²TUaxxõëJ(DÓ\˜¦‰¢ÜtÓûX¸°¾¾>ÊÊÊH&“x½^šššðù|8zzzðx<ŒGÑ4'Ÿü%;˜{Œ/<ø4‡ÃÌãÔœdr C9lví½“M×\ UR('”Úg+Tnoj›Z:ZÖ¡@¼:9¸ð‚÷raûßÒÐä/1Ò8 ‡‡hÔÁ¦M¿äàÁ}}[‰Db,\¸MÓÈf³ìܹ“@ @OO­­­dYÜ~7½Þ^ÊÆÊÈú²´…Úèîî& ‘Édp8¤R)Ün7@€ññqš››Ʋ,:ĺu×ð‘\B*•À²”ÃÏ2´;­R"ý~Èåü<þøOI§ôöîD×uÆÆF jyç;ÏÁã©§¿¿‡C‡6QVVÎîÑÝlßÊÀÎ1àÙ °ø÷š+¾H¼m-™gÝ97rëÿDƒ³ƒ‡&óLŒT6AmŒ5Cî·¢¢úÇg ¹v!i_k?ñN*üœ]KøÈÕëÐs:†™Ã­yIf“ÌeÌÛÞö¶û€[€ d·lÙbäó9tÝœ(¬ó€ë®u-[HùRXŠ…CwQ’T:j0ò®úè’NÄùÁú"è ±lé ¨ªJcc#}}}¤R) Ó O—æ¢k_K;–²c÷í <{=TtT0¶sŒæúfh[ÒFçîNÚÛÛÉçóhšÆÞ½{©®®¦¿¿EQPU•p8L4% 1<<Âw¾s äq:‡ýÙ@bYé´I,¦óÈ#wãõsÈ£££TTTÐÕÕÅ®]»X½zÕÕ5 0gyûrÈÁ­=·Â“ 6Ùí›aïð>P2 –jAê†ëè¯ë§¾·ž¾æ>ê_¬§oUl„÷·Ã+öÃæœþ7ðÒï€rð(Â]aNþë“XsÊu|ûÙäžëïÆãVPUº™C1<7™LÇsøÿ8O€w¾óÆš5×ð×ÝŒª:G%³uÅ©…†ÞÞèm|èPÃ!†Ý©ãÍxI…Ò¤HÑSßÇ+Ï>ÎüœHsœ´’Á1ê B„L,CÂLp¨ü™¾ q<àÉyö 3œÆÑï ¸$Hd8B )À¡ä!VÔ¯àÕø«äëó¤I3¸s€/@U]#Öùh¯×K8&³xñbœN'cc£<õÔüôÒFV­:·;À¯ýlÞü µµgðûß?ÅwÜÌ¢EmÄ é1‡Ãaôôô …0M“Cݽ$’ Æ'bEˆºwóÀ³¿W æ(sBüyX± tƒ+ +ÊI¹t¿¶”®EûYöÚ2ö/ÚOíh-Æ J… ,KÃË=àZ±j†ãI0 4"ä ±=³ƒ]¿}†qÇ0?}ðÇ<þÚoèþS’þÃgùé#÷ŠùÇõÿˆU‡Oà¡M?aÓï^ºxHˆ+a¬^½Ú:pàežxâD£ "‘O=õÌü>)ýP[W}õ}ä\9*G+ñ¥| Ô àÉzH—eXt¨‘šêêØS¿‡²Î26„7°0½øž8¦aòŽ“ßAj(E÷¡nz½ä*s¬Y°†çç9Ûw6< ³­l·‡ÀÞ Ã ©¬®äÇ+Ô™u()…X:FÅ‚ ‚Á ƒCƒ ãÐÔ7Õ3<4J<ç‘ /ÚºÛè\¶ŸºÁ:FÚ_΋á§iè©ÅŸõò(RÛ_ËÓ©§¹ÿ…°±wìc –.]j™¦Ekk ¯½¶ÓÌcš¹ù ¼ªü¡˜?ASo#YO–”/Eos/{:HùRA’þ$)o ÅRÈz²Œ‡ÇEè4’ä`ëAÈÀ†Á t]Dê"T&*Y’XÂ6}ž´T0GMR )Ö(k`¬‹ý#ûQã*´ŒñF8TˆÔxŠú²Á,¦f’L&éÖ»±Üž¬‡ê@5TLÅDQR©Á`>³}„Ãa à ‹±}Ûvz­^fâu¢¹4‰‘p„S‡N¥Ç죥ÝâÐ&hº´=Ðÿ2ؽÔA߯¶áE Ua¸ ¼}^RµiÊ3à©ÑnhX É­" huC~3dO‚º !ò*4ǚؽ|7ÕCÕd<²Î,ÑP,HySŒWŒS9TI}?åÑr܆ÍÔÐêS¨KX»‡w“;#gäèèf»µ}~X° ò!ïÒAº‚£Ô ×0Ð0HKw3Ô Ô0X3ˆ¥Z(¦p/MÅÄs“såH–'iÝ×J_chà2\äÕ<†iÐî"éÀÔéóöqjòTvÜÉΆ YCĽqú}ýSAÆ+ÇIº’´íi£¯¥Ý­³ðÀBº[ºQQ©¯ éOâÉz_0ÎÞª½h{4Äëñ288Ȉ{gÔ‰i™¨ªÊŽ;ÈYܺ›@:ÀPÝæIoU/ ‚ÌÏ–¦-œµÚÂç†ô!hYzÄ^ÿ¤².ƒtTtè*Åó*OÊ›‚N¨=ªÃpàYˆ4ÙÖ! ɳDyOX…‘Ê<ñ`œŠñ ¢á(M‡šX0¶€±š1v-¤¯IìB±T‹œ+ ää§ Ü[nyó^v¶î„QDž!ªÌwÇ2 ¨YÁÖ(Må`ÕF© B¢6JU´Œ¬eáJùÐ ¾d€XYœ`,„–×È9u4ÝAÖŸA÷èT V ÅFËqäè5¤‚ FÆG(o.Ç™tàyq;-¼ã!rãè9¨ª&éKƒ¥wéX¦Š;릮¿žš!êú먓ñRßÛ@<˜ H2lŽ ¤QMo"Àþ`7Ù9Òei’¾I_šX IY¤œxYÅÔH’dÒýiÆž‡CvCf/ôï†úˆ-Ý ‰ý`%@k€ÆH˜ò(ÁªáWu˜±W’|\ÍŒAg£ËÁêœÐc€¹¨ƒ<&†b²xoûÛ:)]€îÈ“s餃)CÅW™¦ÖÕÕy|^W8O|ëTPwŠj…jsŽ#¾8jFæ¼¢€¶óY‡LÍO~§PÔ°'Ž8ÂÇYPižÄÊösÙ¿ï »Õ_½î8òZ“ßç”àšÃ9ãû`d‘Èø ýF|úõðÒmÀy¶u( 0¡N™g)ìy8j{ vxR°ép×Bfò§ÀW gˆ1çr/¦%Öß´ óq¦Dmk1°¦òh~[Ã*çÇÇù2ß´`…~~G˜ÁÁ~TU¥¡¹–Þ';i+óõ¯¥ÁµçrN¸ª€þí@3ÂðÒC¬‡@8‡àà3à;R¯BB…ü™" iN7ô?mAçÝ©„h¶ìA`²BùD—B¨¨PÂ=¨Ó?¿GÄŒÃÀ‰êÅ4.j²,Ê”‘ËåÈd2¼ýÌ·s ³‰]Ê£GÖÇvȆmQ°¡m%D:áÄ‹÷²*xi«Ð ý°÷XU ãBh ìz '˜¿ú“ðòCäPc a¼SȪÕ(ž<´ ™«à(SUèy7?,86‹k*ÌV°ÀÂét²uëV|>>Ÿ±±1B¡šK¡føLÆý]uƒÿëÏŽÊÁÉõÉCçv/‡ì}@ì~Ð.Ø›^ýæ­ÐòWC›aé'``*N„}£ ¶AxF@¼`dUˆþ^,×jh 0ã}æô0c‘³ÐThôT,Ã^*üòÔ4põÑÐÒÖÑ™8ó.꣧ãöºÙ°a===<÷ÜsÔÕÕ‘H$PU•¶¶6FÇFYUu>†ulæ2Û+à%p­ÚϪ Ør° Â+àÒ2P÷AÐ ç€Ñ/ª„PµŒT¹Eë×øCbŒ²Sà!pt¬µM«€^h•ÑÓ¬¸ãÔVý¿o'–áa„’%3=€Ÿ©`äO ¿†ÿ´€‘çÌSdŽô'è—à\ pðàAV­ZÅí·ßŽÛíÆ²,¼^/>ú(ïÿûÉçódrÞL’cXÐîu l}µ†ù(,¹L}êšÐÀŒÃ ¹á BYx­Â¹ H%!€xþâõS}N¬¼ àhÒ¾J¾oW\qOüöq¶O3o¿Ó=Á#5 “Ë.¾lžHƒUáÕ½Ûq{477pÖYg¡iétšgžy† .¸]×ioo'>>þ™|‚±ž†ªo-¨—úÌÜì ÀÀfp4€n30ú T\ù ä6·pÏÀ¥—^ƃ>ÈW\AY™Pó9È„ExøÇ¦|¸,ŽwJŒ÷ØÏ›_Ø~ 뎉 ŠÅ¬ÌwÐ?ÐK}}=™L—ˉËå&Ÿ×±L…auϼ³Ð:u,¼F…‚„Ïå@ušþƃ^4‡…a 'ÝMnÈËŸ¹‰Û¿ÿ}®»îÜzÛw1M“xZ.â´•«¸ãk¿äwO?Á¦¯ð•û _þÒçùÞ÷o›0öì{!,Îç‰F£|îsŸãÇëÌuŸ¹Ž»îº‹H$òº‹8θYà™tip6ðÞ‹Þ‹?à'\ææ›oÆãñ̪Ô‚•ÀgÛÏçjÞBdZÐù„ø»££cVŒŽŽN`pyy9U¶Ç¢322bëÅ 3^Øzܶ¨µ¬åãÿ8çwÞa°™yóˆÕ×Ê•+ùÒ—¾ÄÚµk͹³wïÞ72 ·më6Ssh¼ç=ïÁçñçõà¼3ð…‚Oà,üVúÑÇY¥§òÿÿQ°ÿi ï¨yÔ²²² ‚ ¼Žû"ý/à/¼» ß—püÀ1i YxÏÙÌÁ¼œ@©´‚ÔË×1ò«Kt”Ü£ äËÌPa¹Œ*æš ¶lèÉT‹R’þãZ HS _@uu5ªª²{÷î '8æ8 e PJÌ?þA`çÝaŠOóüÇ|Õ¾öM¼-ù$оr̈Ÿx,Á¯~õ+¾õ©sñxá¾—lvK™Z÷>Úd˜ÅÕU€½²yˆfá×[À:,'­­­‡{ç}ÛŠBWW.—‹|>O.7}Šqéҥ躎ªªìÝ»wÊïÙl–¾Éϰe¾ÕÀcT3 LCR^ȹÈé9.¿ôCä ƒ¼n𫼄CSùÒnbÍ;Îå`÷^n¹ú\\eð‹mЇ Ñ4„}s¿ö¨UKc}-ûwm¡64œ…*ÚÀ—ÔÀH žÙg´@¹Î_a¯E$IÃá¬cN‹×òÓ /íð,aì®ÎNš-šñ˜Ì {Ëæ%'í뎑d+Øç#;æKõa,Ê‚eXXX–E¢°ßËãõàÐø3£œVž$o½UÂ]}pbãÜ/ŸGéièzÇ<\[‡ ë_€é¼ ͦ¢YgÓ5®°Óª@%•«+ k÷Gø@~RÂWQÄNª9ÈŸZØ9{ù4 ø©¢³}ŸDllr‰žO"Fµe Lr#®Âv,0td§PT åð ŠßcÉØ”DJ&›Á2-’‘ ºps¥òÐ-L³¯«ÈEŸ1oo^3Kº¦‰ëN‰XH+ÜÓîaQ̱ !’iB¢)8¹ê‚0³ð³¤qNYB]¦X–µi¿nð9 ,“N×|ž=7ËÑYÎFT$½ÀùóÖWÌ‘é¶VÓø?z´¸qÍÔ'Š™¢ZóF–bZt¨ã¼°®-,ØkÀ yÀ5Ÿ€_€íÛy Ø¡(|êS×’Ëeç­ vìØÁ† ¸®ñÿ·~W Ø,-$InþúD(sÛ!4Ásûaÿ¬Xâ¤Ç N¼SÓbYZç‹} .´}-/Gú/šfû¯1Nà@caÕü¿†Ùô˜p)Ý*þ®Y(ªáoP­®½­>[Pen[Êoñy*ò=7š6ÿô…tÞ<ò–=ž SvØ~û,°¾ÞÝ^X\ jCÐ32½ßS“Öùç¾×'!Z‡l:ŸôùXÒÞNçÖ­œ3É<üašsV”Wø?Àw ×ùÿ7­k‰|ü”ZIEND®B`‚fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/tab_input_2.png0000644000175000017500000000245212162366654024510 0ustar glaubitzglaubitz‰PNG  IHDR szzôsRGB®ÎébKGDÿÿÿ ½§“ pHYs  šœtIMEÜ %!\ìvªIDATXÃÕVolSUÿÝ{ßkßëÖîÊX˜&ÃĉMT8ÆDHÌdŒf 1èGI Ù$€ŸHÀ.c¢ŒÄM…¢–¸ý"1 1AH‰‚DJ—®í^ÿ¬}÷?Pc–À6=ÉIÞ»ÉùsÏ9¿ß¹Œˆ0‘Â1Á¢='þ6ÿ3†Co–¶Z,4þm:“m[ß¼þØhlÙý¶ µuóӞ¢C•GŽ™W{Pêóáì³sRV¼ÁÚµïü<æ-Ð gÓË‹—ö9ù|ø'@Mu­Áu­i\f@Ú²nJi)#)Á«ª@R¢¬ÌË”Tuã5„:çà§š›Î!„é㊂Š7^ÇUMô•+ÇPÕÞŽ9ˆDzÿ_<ðßK ¡¡A0ÆØDV xYã²éFÅÁ`°·ÞWÿÄŠõ³‰TˆsôÛŒsT:êë9xð =¦ " î ~OÄdŒq ñ˜Px\¿òðäâ—û–/—eÔÕÕ¾õ¬±±q2É@CëѮ®¯ö; @ˆmo?¨ Üq¶´mZh8];²™Œ—ˆpD"Œ1œs¾æ­&d³Y躑H/Ün¶mš¦ÅHªUÍÍë¾¾c9‡CtÓÖMÞOvtZñxœ¤”¤”"¥I)‡ik›ŸÒé¥RI²m›®]»JápˆZZ7S4ÚG´oµZZZ¦‡ˆFn[suÔÔÔšîü|DŽǹÎNüÑÞŽðáà )sÆ J)!`YÖû¾¾„0Mjªk ‡):F=[¶øçy½å §–O㿬^#uuˆ8€óëÖá§%Kp¸¾>W9 ̘1g~?3ÄGϹn”—OE4ÅÌ™¢° pAkë»Õ÷L  3ϵ»úÅ…&ç¿øZ(„̾}ð¤ÓÈK$Ú¿Àõ¹I&S˜þÈ œ<õ+Nœ€ìÄwäJaHR.ð¿iáÆUŠSØIEND®B`‚fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/hol_url_16.png0000644000175000017500000000167012162366654024255 0ustar glaubitzglaubitz‰PNG  IHDRóÿabKGD000ZÐÖÅ pHYs  šœtIMEÝ ÝãþîEIDAT8Ëu“]h[uÆ'çäó¤_Ij»~dí,¸nر 꺪8ˆÊ°Þy#*uâz£‚^ˆx!ˆÃ Á‹‰¨È&ˆè:ÚnÔM×f®M?¶®IóyÚ4'ÉINNr’¿7:ËÄçê¹xŸßû^¼Ä-úìø[;öŽ=6æé :½æî>)ô[™üÄÉi3žþrjê“ÿ§÷ÎD_þx¦›¯ñm\ˆ¾b÷–8þ“)~¨ñÌIm`äèøÖŒü91«zNê{cÖp{ûÝ0Ú ÷ô@O $†B2þP‹:¯‘´L XHüxðÂûŸ¿ôgÏ7s›požß ª]>ØÓãàob|n•L\Ã2-Òù^I¤+…ìÊS·ß×ä‰co[^¸(ÁÑ^¥O<¿P`éú’]åÚÕ½!•‘C™(¿K¼- tæ4Ö&BÈ6m^#a•P›Ê®Ûˆ¬lgâì4±å9šÕe¤°r)’ãéYîߦ`8êé´EJó°«;Lª±u½bãtzÐ’+Ä®LRÓ–‘]®†¢/þ–‰-…îL$J¼úôݤw‡ˆ®jDWsT™TÁ&o reÁÒ5Ö× f`›:j ˜C]ݽfÕz°ÅçahpA¿Âá½NM^f~%ÍF±Æ¦Qcæ×)W¦©é šV —ËB‘W£'íŽúkz¶µc&ºJ›ZTIMgaþ*Íz êe¤ZѨ#êêÆYѼ¾¯dm3Yìï/ˆG³ñe6õºQeîò/äQDYÃÊÝÀ*d°ŠÌì®â’x±˜Ï_¸ù2}{¤%ããNµok·ŠmêÔŠ¶Y iר5D³N;ò‡:WþS¦Ö`ϳ²Ë—œ>á Oç=­‡,!9ä”Wq?·5#Ý ñù:»%OÚúú¨-Ë}4A¡™TdßÙ¦ÓsÊ4s©­ó_t‚aìIEND®B`‚fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/tab_netplay.png0000644000175000017500000000265612162366654024612 0ustar glaubitzglaubitz‰PNG  IHDR szzôsRGB®ÎébKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEÜ 9sŽwœ.IDATXÃÅWMhU=ßyi’×óÊÉ6ž"k/ö•K]tû¢«äÁ÷|à{"×¾ x‚ Á–-´ahc¡…ÒI¬Œ…ÒJ'ÿGÒlY–vÿüªþÑÃ.$ºxëÔ虾rçKÕž’‚@D”€¤1‘Òìòd™Á °eXvÍ2Øõ¶¥_Ž-/¬©KŸ{~( Cø„Ræ…žN_! D^ˆSBN2fN bYaÙ&m’h¶ÐÕA4Û°{]ú­¥L§ÎyyrÖ³[u–Ôô·Îüô†ÙÌt¥L)Uß­5,3L³ –ô. 0œü. –9KÅ=ÐJM¨•[@kër +"'½#кД@Ò3¬‹ „ _ˆuh k-¬u`9ÐÔtDMÏ4Oåm’@N f°ÍbË ¼¥4¬±Ð–3ÈINÔ£PP"Ûu”)yÕª€TÚXÄÚ6Áóe7=·„éÙëÁÕ  >·„é™ú{0P­€™1=×Àôl÷oÅö¾ž¶Ô0Ú'¨œŒR0Æ@) ) b¥K © b©1TñÙÛ‡0´»ŠX&ÿ íNÆ7¦ †‚*>çöý*¹?ë“f-<”¡ÖÆ"n‚Ä<–G†ôU:qx8Hþ“‡ÝØ‘á ›wÐLçÁ¥6nwl% 4”ÒMpéˆÜÊFÆêX\‘«#rãù±”ìÈØW$~¸<…X¥ ºE¥ R¦ÝZ'•Ò€›µž™°v~µóãóµŽ1€³£8;:îL˜UI>Žb ÓfBiÅ ;FVë^Ó-ïìâÞ«77-Ñ(JµnD«‘‚TÉÖJÔþßðjîºÜ¶õ¦/,ΑZz½Ha5Rй•gÐ58‡ÏY­¾.˜ÐO«`eM¹¥S&=åu¸ øjdJdPÚBÊVR«åÕ¥R©-խǪ»À·Y£™‚œ78ÙLÑ„k+×—+ûvîè'AyÙi“ç>nIGΔ"i0?¿)×& –ÆÏÑñ%3:;ËÝhƒ¿'¥’‡Õ­0Öà¯úRÛ$EXúg6jL}”Þå‡ahkµoÎ1è ¶ûß'á €Èlêlïy¶²­Ú%u ß^ÄÀ¶2¬µX¸]×Ìl¾`Ö +Sc'ç®|}ºIÀ=£1õÌéù«g.ùåí½[«Ý›!PÙuàE£Õñr¥·„žŠ79ÓÁriâ—÷Öf®›h!Šë nXÀÒO³Z­––€çÚ½øG{žÜß·çå~gyW¥¯¿Ëó},Íά¬Þ™~srä“/×8/|˜¸AvÇHµjµZÔ˜¼ø]cò·›޽f•~½»··ÃÛ²¥K”º÷ˆó ùË ‚àóA€ Ô×f—oýz…utA”†Œ±½D ;~j#œûúm†¡P_¼ùÓ·ãç>8ݹu Œw«£û¢@‹¼qíÚìòÄèe†ÿ{üÜÎ?ß·ëÍÿóªú§]IEND®B`‚fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/eject_button.png0000644000175000017500000000067412162366654024773 0ustar glaubitzglaubitz‰PNG  IHDRóÿasRGB®ÎébKGDÿÿÿ ½§“ pHYs  šœtIMEÜ .çZ£€áZquÉ0Äÿ±Wõu„Z½g 8IEND®B`‚fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/tab_custom.png0000644000175000017500000000240512162366654024440 0ustar glaubitzglaubitz‰PNG  IHDR szzôsRGB®ÎébKGDÿÿÿ ½§“ pHYs  šœtIMEÜ (¿ñ«…IDATXÃÅWMhcUþÎKšô¥™&&uHšE7:mf-³](ˆà΀"C7 ].\ " ® n,e¡ 20àÒYèÔiU´BWÚvbÛiÓIÒy}É=ÇŽï'íkæB¸yÉKÎw¾ï;çÜG"‚G¹,<â•ìýàÖ÷7_fV_2s|†ô&ÁÞý€ˆ:Dô‹|ç‰úìÒ‹—6â ^ nÞúöïgž~nb4=:ä'‚†`=t°½³…Í{›^­¶ÙÐ;¯¼ôÚ‰ètÔ¹t*‡î˜Ì @a†ƒEÀÌH&“pœl{4•ÏŸM­®þùÅ⯫—_}ýƒ~¸Gx€™ƒ™!" fÑ@DË!,€žç¡Ùl ;æ ¶€êôtƶíw¯_»€b3 T€0¶j[8<ôbŠ™±¿×ÀÔÔy(V˜žšÎ®¬¬<mñêGo\~óÃX˜•1–β8^ÐLÖbÌ'‘ëPŠýz!w&ÏsQ­V³Kw–Þ_XøjéÊ•·¾‰À0`þ|ûŸxž»¬šÍ€=šAÆÁBõÂ{eùç«óóóÅ™™7–"Úl…b^û^ÿ‡ú÷1!H&ðËowÑl¶àº.œ\•J™l–ëõú nÄ”@ loÝG§Ý‰Í€ëºhµZP܈`c}éTO>qÞ¹óÓo `@gY,æƒ šB†.ô÷J)(fxž‡Æƒvwwqñ©‹¸}û‡gçææÒ³³³‡Ãˆ`"nï있èI¢T*¡T*Á¶3 ”R6€Ã#<  A¡‡.ä° SÈâ30ø†˜0ìÿ÷c0H&P/ôµì¾&n*,V"Âc…<ˆ€`¶ð}äzØÜpPL¾D@– ׂЖh`lý¾h% `?" 1ÁÃÀAhÓ°ì)œœ©°ýc%0ehA@تm£ÝnŸÈýD„‰J‰„…¨ï«^HÀ¾‚s¥ÇA - …êS  %AT¢ÉŨŸ²Bí^ ž×>U¨T&J§Â“ÓIªÀϬT.…Ù’a¢æì+B݉ô•£ XuQ¼¾¾qêN86–A¹\†x>»ÇH ¡‹EÓègND´'¨Çè9ÀJÐÒur  ~ C“ß_6Ö7cŸ2™ &''2ÔG‚ëä:=á0¡ÿÛòD©›¢Lè¦cº_¸ÍP)î+C+R»DD–oÂLfúš Ñ''ÿ”Ìú埘ƒã[ `oo/AgÒnÀŒø­8˜r2¬Ç“ž’"¿m÷Ž!s¨ñ“Å´¶¶6 ADádDvãŽãD{ê^®ëÂõ\µ¼¼ì˜Ð""IF¢€‘»Ë¿~þɧ¿'„3è}, ²êÞ=º ¸×ýã÷ÕÅV«•6ÉZ™ç:2ÚY#‘é”TøŽV:æ$Ô0¯Ã€ñe‚Y‘ ÿ—ÙÙb‘L鶯 §IEND®B`‚fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/ok_button_2.png0000644000175000017500000000163612162366654024532 0ustar glaubitzglaubitz‰PNG  IHDRóÿasRGB®ÎébKGDÿÿÿ ½§“ pHYs  šœtIMEÜ8 @m)cIDAT8Ëe“1HcY…Ͻ÷Ýë{‰T4EF0ƈJ„2 ‚)"ˆ[D‹©¦™n¶_Øz·Øb ‹e‹ÅÂ-DC‚ƒê-‚N¡®DLÈoÍ">ó^òòÞ½Ûì‡ùëÃáÿ¿ÿ¢”ÂóÉd2ƒ„¯ !³Œ±YRJùQJùQ)õ!ŸÏÿó\Ož¬¬¬,÷õõ­/,,èñx\ŒŒŒ€1†jµŠR©ÔÞÙÙqÞäóùÝ/ –——׉Ä륥%ãææõzF”R„ÃaD"ŒŽŽb{{Û9;;û5—Ë}Ó5Èd2¯gff֓ɤq|| Û¶!„€¦i „@J ÏóÐÛÛ‹¹¹9µïîî~Z]]ý–‹Å¡þþþßÒét°P( ÕjA!zzz „c `Û6<ÏC:ÖJ¥Ò«\.—Õ8ço‰„~~~Žf³ ]×Áƒ¦iàœC×uáû>&&&0??Ã0FaYÖ”2 …x­VëÂTJapp@J)B055…T*]×Á9G2™$º®¿Ô„_)¥`Y ÀR ±X ñxJ)œžžbzzãããàœw7 …B¨×ëžFÑ›ÍfT4ÅÿïÓu©T @à³³NNNP©Tà8ŽN]×ýÔétÀƒçy¸¼¼„iš`Œ1Ö…¨i(¥ØÛÛC6›…eYp]·H¥”…ÇÇG_×ut:´Ûm T«UPJA)c RJlnnâàà@¦iv¤”¿SJév¹\v‡‡‡áû>\×E«ÕÂáá!®®®@)…mÛX[[C±X„”¨T*žR*Ë...þÞØØœó—áp˜ßßßCJ ß÷q}} ØÝÝE­VƒïûˆD"h4¶išßçóù†††~¨V«7ÍfÓžœœD(‚ëºpûûû0MBÄb1<==Ù···ƒÁ÷Ÿuaqqуï Ãx;66f†Ïóº9pårÙ±mûMÓ¾ÛÚÚjÑÆÿJ5Ë9GyEyAïûI)ÿPJýœÍfŸëÿwVÁÇcçÆIEND®B`‚fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/cdrom_16.png0000644000175000017500000000145712162366654023720 0ustar glaubitzglaubitz‰PNG  IHDRóÿaöIDATxÚmSYOaåøèŸñßHB-ÓŠÈp‰o*¾‘->ÚË¢V¡@Wè…v¦Óm(--t:K7ŽßŒt’›™d¾s¾sÏ=· À½êéyúDOõÎLý=ÕWUË4hˆPFÝŒúïáù»îîîG:}ïÒÂâœÄ²)H’ˆÛGQd”J°Ù¬eÐ/©goqw`Ëð@.™¢;‚PÃÑqáHÁ±XÙLµÚZ­&x¾ÐznÉ©˜;••aSíR¹w ?~:°½ã„ßïF$“L¢Èó¨\–¡È2òù\Ç`¢–T¬Öóââ¼(ËŽãöváüµ»Ý ›ÕŠ5Ç*NOPÈP.•P­\j-ÍÎ~Ul—ѬŸÉ‰•J úH“½²òk«øÜ^„Á&YЧ4²é,re¢”¦Ï Û58dŠHR—•sp~¢ÀãÙU´††-ÒØÄˆEÛñØ! €¡Sć ¹° u:]”Q_íÜ´QÊàÏ9ÞF2™ÂÈØ3‰¢¨ÇjŽHÅKl¬o!?#1eý]õ/A§ ¥Q#æœcwׇ‹‹"&¦F•[‚ÉéqE¨‹°Ú#‰#ÁÐźF µ Ô¯Ñl‰„*NNNQÈÁqÙ›é—SÒÔ‹I™e™:‡}}®Àb‰ò|ž´`Œh&¦R ´Ú2šM××5d8žuF£IJA"qˆÍ-+\\¾Î샚‰ÚçægEÒ!i@‘b€ƒXßìNu”äý ®íÏpû—±ís"ÉåñîýÛºŠÕ‚d –X$BBT4!ÔÄçØ ÀësÃív`só ¶v–#Yùît¶ÔðÝ‹òÐð`–ãØv§M Uš`¸‚‡ ÁüÁø÷7qx‚cÝÑ"‹v/Êw$ª’’J†I!—çÁ—®&“‰ŰáÜÀë7¯ê:ª÷á2ý»ÎF353`1GõFÝYç+ƒÙÕ÷÷}øß:ÿIV ý´–ºµIEND®B`‚fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/open_button.png0000644000175000017500000000141012162366654024627 0ustar glaubitzglaubitz‰PNG  IHDRóÿasBIT|dˆ pHYs × ×B(›xtEXtSoftwarewww.inkscape.org›î<tEXtTitleFolders!Tª`AtEXtAuthorLapo Calamandreiß‘*)tEXtDescriptionBased of Jakub Steiner design „sIDAT8¥’ÏKTQÇ?÷ÍÉœÆÚ•PîúAË’Ä¢®+¤Eµ Ú$µ¤Õ_த…P.Z¹,BÑ¢ÔTKg•tæ5¾{ï9-fzi¦-:p¸—s¾÷Ë9ßû5ªÊÿ„¶ðÕnnÌÍÕÜøøxø¹3t}02™cL&­*(ZõNo=~8:¶+ÁàÐjÏÙ¾<€ˆ *ˆ’$afv*N|8óèÁèôŽ+ˆ°'Ïç/ [ííŽ9¶waqþýàÐÍMëPÅDÔsÏïˆãZÚ.—¾S,.!"M4[´‰¢ˆîî.:;Û[?~±Þ*ËߨV$ÅâcOžaí–wixï¸v•'»ðεXç<¥¥IRç—ÖZÞ¼}ýW‚¾sV–Wñ>`ƒ,W*Û€§ŽŸÞI7Öת°Î{2Q´ 05ó‘í6èí¹€1¼à½Çz ÷ÉD¼xù”©éw¨JZÿåØÉÉ .4&È·µFÙ\6ÜgY_[å|ï%²¹ªÚHÑô.*xçx5ñë]¹<@ÖfF!®ÇTVJx— Ma›îDDA•Žýø×±q­ŽµYªµu Š6’Ï·a‚JsADQ”„†êX—8Y˜Ÿ …Œ1ÍŒÒS¤aí!"žår™dcCMÏmˆî{ï[wý·?ÂZ«ÊÝŸÄR4s›¿3IEND®B`‚fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/tab_hardware.png0000644000175000017500000000264412162366654024730 0ustar glaubitzglaubitz‰PNG  IHDR szzôsRGB®ÎébKGDÿÿÿ ½§“ pHYs  šœtIMEÜ "&É$IDATXõ—Ëo[EÆ3÷^ÛqÛIhœ&ikµªŠ"EZ RB± ª ŠTBHe…X°bXdA‹Ðš!øxU­ $šôé¤$vÒ&q›&vâ{gXØq|¯1…i4sóÍœïÌZkî¶¼ôJï[RÊ÷ iDV¿)¥²ŽÒGÌz&xâµOI/dP(J1‹B_HAÓ 8wüÍ‚øàð‡ZŠã®\¹ªÀÔõ4G^ï%è7\ßEÞWQm!ksô³oJM#áýýýd³ÙÕoóÑoÖ»¿Åï—ÓØªvÈL)ع-Zµÿ«“_ —ýÞ'ÅœªØ7†I‡ƒ¾‹þü«åªm€¿€`ÿSïá8v¦#Ö[p(´ž}¡»á.r°áì÷5v !1 ÍÌìùÿ쩳}“©± =[j4š\n €›éF.ßÊrÖZ×áþ§+€ö¤õí%£6g€P)«¯^ØFWìQ|¾õùùÇ/]ìÜý]M› ©Ç ® (±¶í(;ˆÏ2˜›½^sâ––{°,ƒÎ÷ºÃPÐ'“£y»Ð5²óÝÅþWõÝ4¤œ8öùàýÒjMäìå÷ÉähYqjq‡é㣟„3ÙÌ}«z€i\ÇÊÿ%×péÑh´râΘï W²1×!Ówèà²eYK9àq½!¨jûÆ3\›{n-Il±Å¶íÅ2¶?£wíáÜéúV¿çÀèº69ÇïÎRáLZ~ãVOOOÛðð°-+ Úµo„æH¼¬Þs`ÔU×#—R»]úЗ§ ¥T8›eYP*Ï<Ÿ(«svÆU×#í‘‹ëD.‰oz¨¬]­®EÀht;7æRÄ¢—¹=¾³øý`ßËŽ”òV"‘°Ë$®ÔD+ ʳE ¥µ“¿ëAü–B2íÉì€/J$öððp€VzhÔèb*jtÞQɹ.¥Ag{7Ò0=ÀBOrú¶“óþÈV .Ö3²µy3‹KsäìB­¤¦Çˆ„cMLÏ\$éÀ²‚Ìܸ„ÖkÃ×»rI(„¬Z,ÓOÀb>=E$cv~&Ücvn „›Ú˜Gs­¯×%¡e6°¹ó±ŠZ+’3#(å ÑD£¶¶H%!Ò,Yv|L§– 7D-š‚ã(;¿rÈÕ?kXXXô8›©ÔiY¦ùbß#VéõsSܤ¥½™Tò&][Lš7´J.°9.iljejNÿÙÑ`‹ü ÝÞÖÛPýé[RùãZ)„Ry&:6²9Ä„w@¬ÓDë(§„ö‰ÒQ~úaœ’P$ÂäUpŒÙi6K‰…д‘\ u>táAbž9Cºp€Qà…÷ö€)Ln-ÜÀ²‚4…ÁçkÀ4ƒ„Âàó1Í ‘fI ØX$ÝØ @XŽo-ãB µÖfÇf¡„µÖ8Î Zw”#Qަ­µÛÕ^%r.WŒf++y»”òΔ³Ä@”€¥œ¥¿J^!âÄÀÚL'­Y{J ­ÁÎ)€%à6 *(C£\GA^75ò+;,‹@6‹YØ!é¬WVVÇ)UkË…’­uzrêï¨íØÙÕÕh M­µB¨´«Ef2d2™¢SéÙ!áî-jÍ‘xgpð‹·•æ£€" …÷u¼ÊRÊߟõ^™t•vÑ©kò;}ž{ÓéNåé š0ªWsIEND®B`‚fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/tab_hard_drives.png0000644000175000017500000000303512162366654025420 0ustar glaubitzglaubitz‰PNG  IHDR szzôsRGB®ÎébKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEÜ  ~ÆwIDATXÃí—]‹\IÇUuÞºûÌŒ='Ót7™šM²º“‰c èfÉÜäbI‚˜›U¢+ ÊÞDoVe!B>‚Ÿ 7"üæ.C^æ$Ý“~™óZU^tŸ“žI0(¸{á§»è®çÿüŸÿórÄææ&_ä’|ÁëKÎËoß¾-^ñ?qàùªe»¹¹iÿ-€Êð_oÿå#Ç‘t” ù¢ k-ÆX¬5äy1zòÝŒ}þ4Æ`ÅXSæYþ«ð“?qqóæÍ®Râ³Õ£_÷—––PJa­E1cÜ`Œ!Ë2ò<ÇZ‹µß÷Éó­5Zk²,ãÉ“'!ĽÜýÍ7þvýúõ;³ äïU´¼ðÓ¥hÙét:î£GH’„<ÏɲŒ,Ë(Š‚¢(ö)¥B°³³CÇÄq\.Š­µjøM‰´r6ÄrƸü†üèÈ‘•f¯×c~~~ò#)‘RbŒ!MS’$aoo­5J)F£ƒÁcÌs*…`nnŽ0 8¼|¸eµþàÂ… Á¬vf³@~úéo¿çÍù°¢”ƒ֚<ÏÇŒÇc’$!MSŒ1E1‰µ}A_h­ét:cÃ9aK¾õö[ï¢bAΨىE®}k-HÓ­5EQ°»»Ëp8Dã8¸®‹ëºµQ!Ä Æ+M¤iZi€·¿¹Ö <÷³ŽWñçÏŸŸo4š›Îa1 ØÝÝe<Óh4ð<¯VEs£Ñ ÝnEQ177WŸ Ãx<®A®]Áu½õË—/¯T jÞùîw~°±±áXkyüø1Ãáß÷)˲ÞZkʲdkk‹Á`@Ç<|øž>}ÊÝ»wkfª]‡EÁ»ï¾§V…Á©è_l/þ|õcª×ëqïÞ=N:…Öº¦o–Þ(ŠxðàRÊ}aèv»5KÕ¶Ö"¥¤ßïÓëõ8yâ¤TŽº| È«W¯®ÎÏ/ó<8Žét: ‡Ã}žWÞWÊ_ZZbqq‘v»]«}Öè,RJ’$ÁZ‹Öš×¾öÚüÅ‹¿H È7V~¼ñí 5 Èóœ(Šp§.BC0 jÖãƒÞchµZh­év»H)Fœ={ÖY^^þ5 À1ZÿpuµËöö6Zk¬µ8ŽCQ´Z-\×¥,˺U†f«b%N×ui4A€‚Ñh„µÏóPJ‘ç9Ýn—$IÞY__œk×®½÷ú‘•P)E¿ß¯ Ž­5iš"¥¤Õj†!žçáºn}a¤( ²,#MSöööˆã­5®ëÖl*¥Râû>gΜQa~ì4ÁïN¼yBÞºu ÏóXYY¡×ëá8Nm MSʲ¬/ª.vg_¯PJ‡Bk]WÑjß¿Ÿ­­-666øû;9Ïž=;š¦ ív›Ó§OEQ»RJ„ûvëY¡Y,Øçªò8/Šº3–Zô2V)9 Ä•+WÒ7O~ÃO’”8ŽY[[ã¿ÿ ×uYXX`~aV«Iø¾š^îzsaˆxžGLâžeƒÁ8fûŸÛŒÇ{Óm'Ïif„aÈÊW—RJ)šÖ´­Örüøq:RIÀbít¢˜ÖcÌ$ôd(KM©KŠé™6fJ¹ÚWšg«d«Ù¤Ùl qéÒ¥þú™Ó_ ‚„àØj—ñÞXð}ŸÑhD¿ßÇØ‰ÒK­§—‚T¦Ê÷©p˲¤( ’,£,JŒ±€á`¿Ú}âܹsŸDQôK¥TÃZ+ªÒùÊkFx³µÿeéeKkÇqüg¼,K@0íâ8‡Z v‡˜€¨ÿpØüoT 1 ÕŒçâs˜Æ'¢€R0*>§×JV|ùnøà_kÏ|MEPˆIEND®B`‚fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/adf_game_16.png0000644000175000017500000000114212162366654024326 0ustar glaubitzglaubitz‰PNG  IHDRóÿa pHYs × ×B(›xtIMEÜ Yg)›IDAT8Ë’?OQÅoæÍþ™ ÁÀ²ÑÂá,l,-¨´  ü XD>…!¡’Pš`!Öv F $„]˜·;{ﵘ]×¼äåœóÎ=÷8àÙÛå¥Ußo7¸Îy<þY|½8ë––ßôîß{DZçKëæµîø=òþMZ«RMËTª%’’Ç'Q DJ§£–¦9è0::Ê­Û n S.UH’yÞ%ïå´Ûm¶¶>Ól5!t*B4 IRâ×ÁOæ_Î3÷â9ßìñmg„,ƒÁÊÍQ¢ó²¨–«gYt»]ºÝ.¦Jι~ U%2£wrrJ¹\!Ë2œƒj%½ EÅŠC–5| à×Öמ`¶>ýpº²@äb¼÷,¼Z dYȪT0"B’$øØ“ç9€8€z½þhffæC«}TDä¿=ðQiP&Y]]ýfZ(hx À6IEND®B`‚fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/hd_button.png0000644000175000017500000000121612162366654024265 0ustar glaubitzglaubitz‰PNG  IHDRóÿaUIDATxÚ¥“ÝORaÇûãÜè–`ÆX͹îL¡­L¹Æ¬6§%Ël.Ê,Ç,YòÎXž”wDÇ‹ØK† CÞ¾ßsÁɺióâ{žsÎsžÏóý}Ÿß¹&‰®$vq8¬6§9áp[A²»,—dÞ4á‹ÉˆOƼ[YÆÒò⯅…¹>€×ê5{¯×K5›M´Z-\\\àì쌩ÑhàôôÅbñx‡ºgO Y*•T¼P©TP.—qttzÞÛÛC8†ßï‡ÏçÃîî.&5ñ7 ŸËå> d2¸=.·ØßßG2™D(B$&ƒ«GÿTÒ«Á`â H$°³³ƒµµ ‹Å0rwX|6 PÝ´Y{܇‡‡Ìúùù9S6›e›Ý³ÅŒT*åm…x¿ú|€õu#›L§ÓT'lw§Ó Žã°µõKoY‰ƒC2ðêõK4·¹MRÒ àv»áñxØâ@ ÀÞ3_*nÞ’ €ç³3èv» ‡ŽŒÒ§à"‘¢Ñ(9a'srr—Ë…|>!Å ÐNO¡ÓéðáÙnÇÇǨ×ëh·ÛÔ´Âd¥x½^–B9$LÜg :k²K0 H.˜#r¨×ëQ«Õ.;EµZ¥Dn¨$ºïw%u(u%-¦Q*—€á‘;?gžê°aÚÀÜüt:&&ážJ…1µ­³ó/ y\\p”çòÇKì£ÍV‹››<+•F|¾¾fpuÅáOæ•‹ò<Ÿ÷4…ßÌÿ‡¾Q>ŸÑž õ&IEND®B`‚fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/tab_custom_2.png0000644000175000017500000000240512162366654024661 0ustar glaubitzglaubitz‰PNG  IHDR szzôsRGB®ÎébKGDÿÿÿ ½§“ pHYs  šœtIMEÜ (¿ñ«…IDATXÃÅWMhcUþÎKšô¥™&&uHšE7:mf-³](ˆà΀"C7 ].\ " ® n,e¡ 20àÒYèÔiU´BWÚvbÛiÓIÒy}É=ÇŽï'íkæB¸yÉKÎw¾ï;çÜG"‚G¹,<â•ìýàÖ÷7_fV_2s|†ô&ÁÞý€ˆ:Dô‹|ç‰úìÒ‹—6â ^ nÞúöïgž~nb4=:ä'‚†`=t°½³…Í{›^­¶ÙÐ;¯¼ôÚ‰ètÔ¹t*‡î˜Ì @a†ƒEÀÌH&“pœl{4•ÏŸM­®þùÅ⯫—_}ýƒ~¸Gx€™ƒ™!" fÑ@DË!,€žç¡Ùl ;æ ¶€êôtƶíw¯_»€b3 T€0¶j[8<ôbŠ™±¿×ÀÔÔy(V˜žšÎ®¬¬<mñêGo\~óÃX˜•1–β8^ÐLÖbÌ'‘ëPŠýz!w&ÏsQ­V³Kw–Þ_XøjéÊ•·¾‰À0`þ|ûŸxž»¬šÍ€=šAÆÁBõÂ{eùç«óóóÅ™™7–"Úl…b^û^ÿ‡ú÷1!H&ðËowÑl¶àº.œ\•J™l–ëõú nÄ”@ loÝG§Ý‰Í€ëºhµZP܈`c}éTO>qÞ¹óÓo `@gY,æƒ šB†.ô÷J)(fxž‡Æƒvwwqñ©‹¸}û‡gçææÒ³³³‡Ãˆ`"nï있èI¢T*¡T*Á¶3 ”R6€Ã#<  A¡‡.ä° SÈâ30ø†˜0ìÿ÷c0H&P/ôµì¾&n*,V"Âc…<ˆ€`¶ð}äzØÜpPL¾D@– ׂЖh`lý¾h% `?" 1ÁÃÀAhÓ°ì)œœ©°ýc%0ehA@تm£ÝnŸÈýD„‰J‰„…¨ï«^HÀ¾‚s¥ÇA - …êS  %AT¢ÉŨŸ²Bí^ ž×>U¨T&J§Â“ÓIªÀϬT.…Ù’a¢æì+B݉ô•£ XuQ¼¾¾qêN86–A¹\†x>»ÇH ¡‹EÓègND´'¨Çè9ÀJÐÒur  ~ C“ß_6Ö7cŸ2™ &''2ÔG‚ëä:=á0¡ÿÛòD©›¢Lè¦cº_¸ÍP)î+C+R»DD–oÂLfúš Ñ''ÿ”Ìú埘ƒã[ `oo/AgÒnÀŒø­8˜r2¬Ç“ž’"¿m÷Ž!s¨ñ“Å´¶¶6 ADádDvãŽãD{ê^®ëÂõ\µ¼¼ì˜Ð""IF¢€‘»Ë¿~þɧ¿'„3è}, ²êÞ=º ¸×ýã÷ÕÅV«•6ÉZ™ç:2ÚY#‘é”TøŽV:æ$Ô0¯Ã€ñe‚Y‘ ÿ—ÙÙb‘L鶯 §IEND®B`‚fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/tab_scan.png0000644000175000017500000001145512162366654024057 0ustar glaubitzglaubitz‰PNG  IHDR szzô CiCCPICC profilexÚSwX“÷>ß÷eVBØð±—l"#¬ÈY¢’a„@Å…ˆ VœHUÄ‚Õ Hˆâ (¸gAŠˆZ‹U\8îܧµ}zïííû×û¼çœçüÎyÏ€&‘æ¢j9R…<:ØOHÄɽ€Hà æËÂgÅðyx~t°?ü¯opÕ.$ÇáÿƒºP&W ‘à"ç RÈ.TÈȰS³d ”ly|B"ª ìôI>Ø©“ÜØ¢©™(G$@»`UR,À ¬@".À®€Y¶2G€½vŽX@`€™B,Ì 8CÍ L 0Ò¿à©_p…¸HÀ˕͗KÒ3¸•Ðwòðàâ!âÂl±Ba)f ä"œ—›#HçLÎ ùÑÁþ8?çæäáæfçlïôÅ¢þkðo">!ñßþ¼ŒNÏïÚ_ååÖpǰu¿k©[ÚVhßù]3Û  Z Ðzù‹y8ü@ž¡PÈ< í%b¡½0ã‹>ÿ3áoà‹~öü@þÛzðqš@™­À£ƒýqanv®RŽçËB1n÷ç#þÇ…ýŽ)Ñâ4±\,ŠñX‰¸P"MÇy¹R‘D!É•âé2ñ–ý “w ¬†OÀN¶µËlÀ~î‹XÒv@~ó-Œ ‘g42y÷“¿ù@+Í—¤ã¼è\¨”LÆD *°A Á¬ÀœÁ¼ÀaD@ $À<Bä€ ¡–ATÀ:ص° šá´Á18 çà\ëp`žÂ¼† AÈa!:ˆbŽØ"ΙŽ"aH4’€¤ éˆQ"ÅÈr¤©Bj‘]H#ò-r9\@úÛÈ 2ŠüмG1”²QÔu@¹¨ŠÆ sÑt4]€–¢kÑ´=€¶¢§ÑKèut}ŠŽc€Ñ1fŒÙa\Œ‡E`‰X&ÇcåX5V5cX7vÀžaï$‹€ì^„Âl‚GXLXC¨%ì#´ºW ƒ„1Â'"“¨O´%zùÄxb:±XF¬&î!!ž%^'_“H$É’äN !%2I IkHÛH-¤S¤>ÒiœL&ëmÉÞä²€¬ —‘·O’ûÉÃä·:ňâL ¢$R¤”J5e?奟2B™ ªQÍ©žÔªˆ:ŸZIm vP/S‡©4uš%Í›Cˤ-£ÕКigi÷h/étº ݃E—ЗÒkèéçéƒôw † ƒÇHb(k{§·/™L¦Ó—™ÈT0×2™g˜˜oUX*ö*|‘Ê•:•V•~•çªTUsU?Õyª T«U«^V}¦FU³Pã© Ô«Õ©U»©6®ÎRwRPÏQ_£¾_ý‚úc ²†…F †H£Tc·Æ!Æ2eñXBÖrVë,k˜Mb[²ùìLvûv/{LSCsªf¬f‘fæqÍƱàð9ÙœJÎ!Î Î{--?-±Öj­f­~­7ÚzÚ¾ÚbírííëÚïup@,õ:m:÷u º6ºQº…ºÛuÏê>Ócëyé õÊõéÝÑGõmô£õêïÖïÑ7046l18cðÌcèk˜i¸Ñð„á¨Ëhº‘Äh£ÑI£'¸&î‡gã5x>f¬ob¬4ÞeÜkVyVõV׬IÖ\ë,ëmÖWlPW› ›:›Ë¶¨­›­Äv›mßâ)Ò)õSnÚ1ìüì ìšìí9öaö%ömöÏÌÖ;t;|rtuÌvlp¼ë¤á4éĩÃéWgg¡só5¦KË—v—Sm§Š§nŸzË•åîºÒµÓõ£›»›Ü­ÙmÔÝÌ=Å}«ûM.›É]Ã=ïAôð÷XâqÌã§›§Âóç/^v^Y^û½O³œ&žÖ0mÈÛÄ[à½Ë{`:>=eúÎé>Æ>ŸzŸ‡¾¦¾"ß=¾#~Ö~™~üžû;úËýø¿áyòñN`Áå½³k™¥5»/ >B Yr“oÀòùc3Üg,šÑÊZú0Ì&LÖކÏß~o¦ùLé̶ˆàGlˆ¸i™ù})*2ª.êQ´Stqt÷,Ö¬äYûg½Žñ©Œ¹;Ûj¶rvg¬jlRlc웸€¸ª¸x‡øEñ—t$ í‰äÄØÄ=‰ãsçlš3œäšT–tc®åÜ¢¹æéÎËžwç|þü/÷„óû€9%bKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEÜ D˜q¢kIDATXÃÅ–[h\ÇÇ¿™9s®»:{öì®V—ÈŽ6²c)ؤvj©iJZHüRhûƒ©¡¡Å¤`'`Zš˜^)ôÁ”&´(! mÚ††º 5®âX®-$l×¶,Ùµ%­wµòÞÏžÝs3}¨Ü:!e7Ð?gæðý¾ËÌ|ˆsÿÏï姉‰ å³@wŠÀÄĵ,ëQØN)ýrE[£(JbŒ-BÈÙ þÊ9?š|î¹çœÏà•W^¥”¾dzÙlVÑuÄb1$ 8çàº.ض•J%§X,6cßÜ¿ÿ©ÿ`bbB¨T*?á…‘‘9N#˲ P(Àêê*,//ƒa°uëV]סÝnÃää¤ëºî/ààþýû½{8pàÉf³Óu}dxxX ÃŽ?ÓÓÓ`FÂBët:Ðét„\.Ï>û,¤R)˜õ.]º´¤iÚÖ}ûöuî ||Á4Íïkš6<22¢,..Âûï¿ö÷÷/¸®{1‚eÇqnJ’”TUuC2™ÜR«Õzùå—ÉîÝ»attT€ .\ø|ç®"ðâ‹/>$Šâ™;v(¶mûï¾ËDQôšÍæUUÏêºîär9aÛ¶mªªÆÃ0$gÏž]9qâDš1ö-Ïó”§žz ŒŒÀ;ï¼ãضýä¡C‡&×ðÒK/ ¡‹›7oÒu;v ,ËrÇùi__ßJ:¶»ºº:ãããƒkšö„Žã\=þüŸ_ýõÇq~¤(J|ïÞ½Àƒ£G®*Š’;xð`ûŽ÷€ëº_ ”ö¤R)tíÚ5h·Û¼™Ëåòƒƒƒå7ÞÌår«¢(þ]„ë!!$©ªºñþûïïÚµË×uýµZMOOƒ,Ëpß}÷ÅÆ®uÕ@EŸ7 C î_¿Œ±kétúT___­¯¯¯fšf3‘H´$IZnµZ×A¸ˆ1~„1Æ1Æ—DQ¼ÑÛÛ[ó}zfffÇèè(J§ÓÊ•+WvÀoî€1~LQ±Õjïûž¢(3ÙlÖÊf³Ížžžz2™¬sÎBˆ…aè—J¥·£(ú=!×ëõ¥ÔÌd2i˲N-//o³m[Ô4 À×uû¾ÿ°ªªÀƒ(Š ‹]6 £H$Z†a41Æ!!$dŒ…œóP–å@–å C¦iZ;•JY¦iÚº®_¦”’f³ ”RðhµZLUU†Š8ç\–e_Q”€1ÖEẮƒçyàº.?|øðêSÀ9Ÿ±, B`š&ò<ïÁ(Š>²¹ÑhÀøø8äíöGOW†Ðn·)¥¡,Ë·öÏñOypþ à8ÎñZ­0Æ ™L ’$…a(¸®K1ÆH’$D)Åa’R©DËå² Š"#„çy”1&X–õH,£!¨V«ÜuÝë*Â(Ц‹Å¢twwƒiš...>êyžÌ#AÎ9‰¢HÃA@}ß8瘂;Ž2???Ún· œs¸qãF'‚©u¬®®žêt:7 …÷<úúú°ªª?XZZʶZ­.„aŒ ®ëÒ(Š(BHÀ k^«¥RÉ\ZZúIoo/5 Êå2‹E‡rt]ï½÷^EÑ7Ο?ïV* ”Boo¯dÛöNž<ùD¹\6‚ ‚  œsE ‚€Öëõø|0>99ù;Y–“ÝÝÝ( C8sæ äóùÂo¼Ñº«çxÏž=‡t]aûöíªišÔëuV­VO#„þ˜ÉdÎ=ðÀ‹‹‹‹=ÅbñsFãKŽãìJ§Ó’iš \¾|A€?ü0rç×SSSß^7ÀØØš6 cÓ–-[4Ã0@’$°,‹»®ë[–…-Ë"Œ1†1öeY–u]'Š¢c æçç¡R©Ààà ô÷÷ÃáÇ™$IÏOMMý|ÝÑÄJ¥òc„оááa%“É J) „€sŽóŸÖ!!¨Õj077ªª‚,Ë`Û6d2H¥Rðꫯ†š¦}íôéÓº«žðé§Ÿ~X„߯b±¤išj<'š¦(Šàû>´Ûm°m;j4íjµ*,,,´ÆÆÆ’¢( ÍfcÍfAE8räˆ/ÂÖsçÎ]º«®xïÞ½’ëº_aÆø±(ŠF@åœ{ã QMÀiÛ¶ÿ2;;û]„Ðó;wîS©T×êê*(Š===ÐétàØ±c­Z­6X(*ëø¤ñÌ3Ïo½õVКðšPÿ“„_ ù6lÈ®¬¬@*•‚îîn(‹077—·,ëÁ«W¯:œs~ס[FÉšèšÄ[óD"1Ç_K&“xÓ¦MýÕj²Ù,ôôôÀÅ‹¡\.OÏÌÌ< >¾ãxÍ*Ä  €T£Ñh—J¥ï•Ëåêììl…ù|òù< ã8ÛLÓ|$|žãÛ<×@äÛ¤€‹Å×Z­Ö?:aFÅb …‚À1Æ;@Zw >ðߌK·}¥µè˜º®5‘HŸ€â]ÕÀÇ „Ûò/­Ý’°%|«PEÑ Ãø:ç|Åqœ7F‚{-Bø„@n? ·ÚŒÛ[Sô¯„óÝÂ<3HÀSsIEND®B`‚fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/tab_configs_2.png0000644000175000017500000000310012162366654024770 0ustar glaubitzglaubitz‰PNG  IHDR szzôsRGB®ÎébKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEÜ 88Æ)¿ÀIDATXÃí—MŒTÇÇýf†5ÁI0kc“µ#˜ &!¬A%öZäŸBÉÇ„Kî‘rÈÙ§ä–cΖsq$$+‘W H Øqb´Ú±»Á€³»D1ÞÏùx¯»«*‡žy3Ë~€ä|\RR«Z¯gºþýÿWÕëÿ·ÿ±¹îäÒ¥K×Tõ(€sçÒR¿wÎafÔjµÑã¹Ó§O/üی٩S§øUeff¦˜ŸŸŸÉó|äÌ™3·>€êýZïý]˜[÷Ç•/=ɶ‘344T¯×ëOÏÍÍM^¹r¥¶c÷ϳ,ÓjµúëÇÿ`/^´áááÿ¸æªÊÔÔ”MOO×Î;'%Î9îÞ½ûßI<çl×®]®”àÆ/~x“koá¯}þÍÍLÁ Ó47³ŽW0¨šfƒ"w€§æžÙ}ò$®¶W©à*U\¥ • ÎeSÁD0‰ “€IÄbÀB†ä÷˜/0ïq>pE9.ϱ"gÖÕ/0‘`æê²ð1dYD%Í]–2Å,D‹±¸;Bò1b!àBÄ…!âbHÞ'oqà{T=&u—Õ ³2xV©B%+ëŸ1ph&¡˜ ¦4b* gÓˆ“ä‘€H@¢†^Fñ2 ,ÎÉ3—žI7`X9H4·º «Àֵ扥I†f®RI2‚yÉKÕk ©^MÀa@–Nƒ% DJÝ£9FFF˜”Óû„¢±“‰Göðµñ·¨Ç„Ø 9)¨H!Ež+x4˜ÏÑ¢Fgn¾’+I’Žýö½«¸yk–CG1¸÷ “¿‹µ[hcÉ[­žEÞ¶¼…9Áb€ÌáºÔ;#Ñ/ŠiÄDPÕ2øÒrcCݵ³#/róã[XÞ@¼à ×ì¾ÚM²J†IŽ#òUý º ’†3T•W_>ÁïFßçÕ—O¬  »¦Úéj˜é1ÛEËZ ¬¶ m\ÖI@ ß©ûÐñ#ºSKº-v³öÛõNÑz Hay‘JVEó岴̄ĿKÞº )^D:ÝÏ ˜ý'Š!AØ·ï+åZ?‹‚hÖ(4gn¶ýÑHMv ¡J/ËʒĹ$AŠ–¤0[ÀëúÌÑÊ æç—W1z‰ Ñ0••€‹²¢­—©k• èè/ug ÀÝì DÖJ0÷{lß¾Çv~‘[wæ1¬• ¦àb¶Ü—„º¬í—o#“€•Àáú_5`pû«gi´!„H¥’•lìøÂ3³ŸÒÎ=++-¶®bÊÌpjˆ€ëÁZÖ.”¼ÈÐÔp`¥Tœ[j5<½—?Orìùýåé¶ÕÙ¿o»ÿòºI¨I‰QÚ%¯ÚΛ>ÆFk‹™õµdÇj¬Sµžçígúæ ~ôWTmÃ*¸Ÿ`†ƒ¸^+b¹Ï£ÄVÞ§}7øZ ¢xxöÀ3,.¯07÷w~õ/eÎö[³™såƒë ?ˆªÌQD“(} Ä >o;|ÃCæ0Ö Þc!xO”È…w/süØ!ŠÜ£9zh_y÷ëÚºÁ7¿~ lDyTšAÉ£%€VÐ)]Œn~)xzroh#¾ƒº¼ð¼ÿá8¯|ëEÆ'&¹61Í‘çö®qüØþU90~;xÃe¹èÍÀŽÚ¥×>út°¨<è ÷æ#;ÇTå¹—N¾©( Kìyr‰ëS\x÷2uYW ñý CÀÊ…‹ý0:<žÚ]_x ~ƒ-¾ýÎ蚤v’´Ñt?yãõWƺœøÆ³ÝonœäÎgÊr®ôK€.Fæ—#Á£Gæ_úί3zùÔª•R‚Âç¥]ÚבÑ‹²ÁloþüW|ïµoEQÑäU™¸>Ž{÷6“€óçÏoþeôPWoŒ·ße øÙOôP{ý ÏSc;ðu IEND®B`‚fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/screenshot_overlay.png0000644000175000017500000005734612162366654026234 0ustar glaubitzglaubitz‰PNG  IHDRèœuç¯bKGD@@@§ö/f pHYsÄÄ•+tIMEÝ)!Y¨ÊtEXtCommentCreated with GIMPW IDATxÚìy˜U¹ÿ?UÕûLOϾo™Éd2„$]v¹Y„¨€xñª?Aåº{¯ˆŠ(ˆ‚¨ ;Ȧl&„ì I&™d²Ì¾OOïKUýþ8s¦ª'“e€Wû}ž~fº»êTõ9çûîï[°dš&¦i’¥,eéý%5;YÊR YÊR–²ÍR–²ÍR–²”h–²”%eÇ)Ó<'KYÊÒîdÚþšï ˜ªí¥dAš¥,½cpš€a{í¨Žý¨6~œ pŽ¿Ï‚4KYzgàÔÒãïß@¥ät^ gü¯ËÒ,e)KûP}˜1 2þ×Ü›Ý_€æ7îñ÷j YÊÒ´jŒKÏð£q š¶©ºÓVqíÔÝÔ´ôJÃ0QU§í)¡§*ñ¹a¤PÕÝq-ÆÔÆ/§c†íýþÑžÆÎÒ¿#IËlbw`ú¤}›žâ¸½QÚ¶Wûq¬#›†‘ž8¯­mîïÆ1+ïÖ•ö'šæcëÖó0 øÚÚ£(vîüR†PU“3~G{û•€‚¢˜45=‰iî~?ªª24ô[†‡ÿFYÙwÈË›CGÇ=Äã/_:1q;N§ŸTj EñâtºH&Gðz+©©ùõ”cgéß‹ Ã$z“þþŸM|–Ÿ %%ÓÖ¶pœé44<@<¾ŽîîÿÍ’Ó™®§0ŒhÀg̸Uõãr•°iÓ\ ¯·X,8.išJuõ¯Ø¹óª ãõÍŒ·±qã|ÀÃ8–\ûãÏQ÷N;HU<ÚÚQÖ¬y’'ŸüÑè©T”ÛnûO=õ –/”µkŸä¨£šI§ã|ï{—ÓÚú'œP4Á­ ÃDQœ„B›I§c ¯¡½ý5.|ŽPhwÞy(‹?È~p9k×>ÅOÜÁš5OPY9F[ÛË|⇭ô÷¯$[6¡‘m $Kÿ^¤ªª«ƺuOóÄw°aÃsÌŸÿ †笳jX·îi~øÃÏ`š:££Ý,]ú'–,y˜'ž¸ƒçŸ¿g;ç7›ÿÆcÝÎOÜÁ7¾q †‘D×uFGOfçÎu´·¿J,¶†W^ù«V=ÎcÝN{û+ÔÖÀ§Y±âqžxâÖ¯†‹/v±qc÷ß/½ô[‰»ýr¶îK‡T&½0Œ££×²zõ ¢Ñª ^o ?ûÙa\yå%hšFWWíí=¸Ýå|ë[w£ë:é´ž!1ÛÛÆOjRVv+ŠâÆÆÆøò—¿ÇlpÔQljDˆÇãô÷÷³páB:è B¡—_~9?ü0ƒƒƒ€‚ªúè鹚»îr±}û5hš'»[ÿMéàƒç’L&Y¸p!ƒƒƒÌ›w<¦™æùçË$glqÃ0ˆÅb,Y²„X,†¢((ŠB4edd„Gý3.W ^ï ¼ñÆ?¸ñƈD"|á Ÿä¬³Îfݺu¬[·]¿‘ªªjrssY¸p!6lओNàØcpõÕWOÆï »Q2Ù…iúPƇŽF;ˆD–aãvqä‘G2cFÍÍ*©T߸$]‡X¬]KÑ0~MKNܧªª,ZôIÅÁ£>:qÍœœž{îÞ~{¯¿þ*¿úÕ¯¸à‚ ðx<mšaòòò1Œ±ì.ý·÷ÇdÊ™Tjàß'îÄíŽðÿñœrÊ)\zé¥\y啸ý~ž{î9N>ùd>õ©OQVVÆ¿xmmGó÷¿?Æ\hÛsó€%Ìž]ÁÅ_ÌÂ…7ãó† kyã7xúé§©©©±îÊ4Q”éùI¦ P;w^ËþМ9‡1kV >x$½½×sþù—ñÒK/ðÇ?þ‘X,FOO/ñøeüå/?AUUn¹åøú×·1:ºÃ0˜9󮸢ƒ®®›0Í8`â÷û©®.àË_¥¤$@NN^¯E³Ï¾/9B$2“¼¼<ñ½ßï7Â#TV>ÄÅoaæÌ‡ÑõxvŸþ›RkëjÜn7<ðÅÅŬ]»ŽŽŽOóøãPTTÄgüwÝ•ÃÈÈ/øÒ—¾Ä›o¾ÉÃ?LGG'±ØÍ͵üãÿà ¶¶–Å‹_àüóOÁçKQPP8¾ï’FEQÈÍÍܘ¦AMM 999ŒŒŒ››ËâÅo°bÅJn¿ýöi»»öD"¬Êšš–/êé¹…pø-Û©&¹¹óÑu±Ø«ãŸÔÕý]».GÔy[ÇVUÝŠÏwðn·10p'££Ï:ϰmÛ¹ã>,'¤¢â[äæÃÐÐï~ðâp8I§ƒ¸\åÔ×?”ue Ã0 _gpðÖ‰=WPp‘ÈS$“½{±¸ø?z ÓìÿŸ*ä£(VXÅ4S(ŠsÊóL3•á5“ªƒa$³a–,M(†ö½gšúøgʤ}³û禙œâ|c"Œg&šæÎø|Oï'Ÿ/?ß²åÈý¨cZ?[u²­ý\¼©m¼×>RÈÝÇ1:`‹Â‚s¦¸·,8³4!GÇ–¹{¦îÚ3Õ统/÷—ª*ßíëý¾>ß·Q9MJ+9\Ã>¢«ï€RÀ™»ÉÆLŠW©®ìþËÒ¿ 9ÞÉIé=ÉãwAéý7•]¯,ýÛ)ëYÊR–²ÍR–²”h–²”h–²”¥÷‡Þ‘“ÈÃ{_ ª ŠNÓÙ5ÉR–Þ9@}Z€ª…äf~±Ï#LÊgvÕ²”èTd)ªkoŸ2Ñ0B¨ªÈ•Ýð #¼_÷ 2ŠôìÊe鋪z÷€ðÄ>ÙF9ãÙqï#@e6D<¾‘ÁÁOápìYš…B)fÌxžžÃq:­ãÂáyy.B¡$†ùù‚AMModsi³ô¡$ÑEA%yPèvwݤ((x·{†aç“NïšBÀ¤@'n'epï½ ¥å|>š–É)4MãòËÏgǃßýî~æÍ;–P(DAA—\r >ø _øÂX·n+V¬ ººi?¤l–²ôÁªºèì¼{î9‘ƒ^‰ßïŸxÚŸ¢(„ÃÞxãyn¼qÕÕ—£ªßæÙgÿ€ßŸ‡Ïç›8VÔE§™3gÎ(@2)*Ì/¸à|Þ~»m €¥™1ÃÁ¢EWPZZÄâÅo2cÆ âñ8N§“œœb±ÙþcYú0“¢(ÄbÑÔôE¢Ñ‡~¸ :i6lØÀ 'œI4ºEùOòò6ãtºX²dÉx¶P˜=»_ÿú7^‚ZâÚDÓ¢|p'é´Ý†40Œ¦§¥eÁàã\¤hA×un»í6‰DV­ÍÒ‡›LS§¼ü¿9å”§Qµµ"'g>ŠâbãÆCöì4µµ/âó5¢(äÜs—¼ÈÉ©bõêŠ )¨iuTTüÃ01 »„­A5MãóŸÿ<ëׯgùòåÙ¥¹ šÆï? Ey…ÑÑ›PûÙ°uJÈ,õp8¼ôôœŽÃ¡e€ý}¨ÏçÃëõrÿý÷¡ª–Ñ‹ÅG¹òÊÿAQ¾1Xu¢ó(ðÎÅëõâñxÆ+ѳög–>Ì6¨“®®»¸óÎ#8òÈ5»Ù ‰D‚;ïü>ÅÅ_ÌØË‡v­­Û&ÞKô ƒ:°u¹\\|ñ%Sx³ î¾ûnŽ8âƒNÀ¤£c˜ŠŠJœÎ&ÜîrêëgŒ_Z£¼¼‡£&» ²ô!¶AU¢Ñ‡™?ÿ«¤Ói&í}ƒúúg  3ºråJ®ºÊj¿yÈ!søÝï~wà%¨¦p8¡ë>ŸF]Ý1ŒÑh;°%ÓU”1kÖ:¬ÆÚ&ðÝÉZ>ºË]géÿKK˃€ÊÀÀ] í`ÇŽ»)-=„‚‚KlÇ¥¨­} Ÿ¯‡ÃªÎŸö•Þ@c±~ÿûÓ9øàøæš/°bE5Š¢N›hÚ½ã\Gª ¦Ý5" Î,ý_¡%lÝÚ€iB:mÒÚÚŠatÐ…\:±÷5ÍCGÇi8 ¦irÔQǼ?u»Ë¹ï¾_ðë_Çü!ÃM$ Ðß¿‡#™]Ë,ý‹ðŒÑÞÞžaƒF"rrrÆ@IúûHDY°`[·n³9›Œ÷ ‡ŸÎÎÓÔÔ´iØÀÌ™¾£,YÊÒ‡‘4­€ººº½ãóˆi¦p:¿È '\ˆa´¿ëë¾#€ªªB:¤¹yý'É$#kSfé_†t=AcãߨwB>ÞYgæÌǘªšSQ6o>äÀT‚Ô0"Y›2Kÿò$ü(±ý>V¨ºS7N7§QÌlg)Kfæ‚,e) Ð,e)KY€f)KY€f)KYÊ4KYÊR YÊR YÊR–Þ 9²S¥,½?¤ë0Ý"Ó’ ©¼ƒ|ß,e)K@UüêW =Ÿü$Œe';KYšŽ`;æøö·¡¬ìTUáÄá{߃d¶P%KYÚ'¥ÓBr~îs0^‘vàlPÓ*nm-œsޏx,/¿ ¹¹ÙÅÈR–$%“àóÁ·¾ 7é4D" ¡¸¨¦ÁÂ…—'@{üñðýïƒÛ]˜,e)•‚/| >¶×l”–@€ª*8⢀å0:ø`˜9Ódûv'GŠl#ê÷gÌž â}[›Ik«·;;ÿ49ðË_îîP-.†“O>€«×P(~¿u—]ææÙgÿÌÒ¥àñd]½šššà›ß SQ`hHãµ×þÊÿx>_ÖAðA“dzûgá0<ýôôÆ™–“H×ax¢Q!M#¡W§RPY™àË_þ÷߯3gŽ8&Kï=éºðÜ|³§TŠŠtÎ;ï"n¸!±_¼DB¼²Î¾÷TU¼¨õû­¡ë‚+ää(hZ’œ…Ï~Ϋ±Žýýp>Ÿµ&ÍÍpá…˜‘ˆuŽi )ú­oÁ£Bg§%uŽéÖ0ÄþPqn–1¿Ý²E¨E3fXÍúúĆٺ5ÓôØc" g:]J&- 9k–ðþ)ŠŽô¢§Ó02"€+UßXLWS#TV ^yüŒâüîn±nvðy<ðùÏ‹u;ÿ|qîÒ¥Bê65 É»}»¸ÆÞ4¬ÓO‡O††`õjX³ºº,S(K ý«Ø“gb›w?//;¹ï„âqøÌgओ`ãFaNÈùÖ41×v hŸwU`t»3Á©ª‚iÊc*+-³DÚ°ª*Æ:ã +˜~Ä0s¦P…%cøÆ7ÀåÚÝKiB¥¾ðBÁÄý~‘uvì± ·Ü’Mf9àÕ´=sЬíòî)…k¯¶DŽ>Ú¡®  H É 8ˆ5I§Å1¬vf‰Py½â˜TJø ªª°âqèé×·«Ì¦iJ×ÅûÛnLã·¿xMù¥55BBoÝ*¼Ì’©8bŒü@xž].ëþäÿYzš¥C‰„Çç?/$X"!6°…×+þF"bÃK®‘Ç#Ž …„*:™¼^ééµ€cšâ·¾ÚÛ§¥ÓPW'Žs:Åý]t‘Шv킯|E`pP¨·ee),êñW¿*®£ªÈwÜ‘•ªY€~@jê¼y8Š"6øo L6¼^áumi’P‚Ó4-õSQøLòó-`Ù%¥¦‰ëÅbbÌÉßOþ_JE»æSWo¿-ìWÓc©ªø\JlÓ’﨣„*³cq±ø~r]U–×Òuøõ¯ÅgYgR ï E"Bki±ÀešpÖY"ö(7r:-<¬¿ü¥ÈÏŒF-{1¶R)%P§¥üÎ.I'¾7²{‚AHÇêj ,¦)¼º2çZڰѨ¸ÿÂBñ^zó%€å±ö\(”Ét]ا ðì³ðÚkSgßü»Ó‡Ê¿jbÑ/’ǧRÖ{éy– YQ¬q¤i ¿w:Åÿ2>{ÚiPT$~÷­·Zvíû‘ø"cÁS9öþåjBÒüö· ª&ét¦)ìiwI›Ë4Å¢¥RPV–¢¥¥‹íÛëß—ûL$`Îq?ü¡ðΚ&<ù¤H§Û“#F‚VªiÒ"U: ¢HÄSÓDvO]dNÖñ€%‰§’röÏ&o‹J)+Õ[yOò{™í#Lˆp827©N§Žªj(Šþž‚5•Θ /Ü^r~yŸòždM¬Ãè¨xïr ¨aU5™ kwÖôôp8â¯P>ß^\î6`Ù›ôÈF"bnåxRRKÛTžc‚ƒ–º)Kò<ɤô–ÇÈß1™”– Ò4»ùf¡®;bN4MÜÿ7îþ»¤j;ù·¾×ûÐîÙ–{¯¡A¤/J†»m[æCvMS‡ýÈŠ÷¾ñ†ÐþtýCЂ‚wÁ`PÔ3Jg}"dņ¢ˆE“Ã:Îdöìyüüç:ýýnþñ¿°yó…¸\éŒkÄãÖ¹ªº÷Mo?Ç0Ǭ«à²6µÌ°±«†2Ô1Yµœì9íëáÓÒEzcUÕ¶ÜölŸ©HQ2½¶vjšâö±4m÷ly®Ó™ÙÄJÖ„Ju7?ßR×S)‹¹hšli#wtˆl"i‹ÿà"—øÞ{3%ðT™Nï5¥ÓBãq¹2Kðñ ¦yç¢]Ìõ×gÆ}Ëʬ”I¹ªj­Ÿ¢ÀqÇÁO¼?ÅîÓÎÅ}§P¹Y¾ýmKmôûw·Ïìw»ãb`fÍRðzM C¡¦&AKËÅ<óLŠ++EÓL*+¨«c »¥½}j°aˆÉ¿ôR± ‹‹ÅývueEªÙvU|tTü–É5·3Y4½}»J’1ÓpX,²Ã!îSÚÝ“Ád·=+I@‚¬¯Oxu=3©@QÄ}§Râ|ûúIi(C=µµ™ÒËë“ÙD==Öcc™9µÒAµj•`tö{¿ê*Q‹ºuë5™ìÒìÜsE>óË/ Ç¢d8ßþ¶˜;E{âÉ'­9‘û-/Ï yy½â·ÚícL?ùIŠþÐ ¯(/óÞtC p ¸aÞ¼¥‹ö9 b-’Ç#~èÕW‹ÌpXp-û&ŒF3«ùeâ÷À€‹ÜH 6¥=0°c‡Boï±X šfrì±b²ì 1 Qúô›ßd†äÂTTX\S.ħ>eÕE‚Ø`v;IŽûéOg790/C ÷Ý'>¿âŠLÎ+“ì-4@í*ŸMq2)ÔL» ˜J ð+ÊîÌDÓã’ÚKI‰õ}2)²ˆ¤7vÇ‘{«i‚QM•õ3::u1Å*¤PÁìfÍm`}>á°:óLñ»eQºª mÈç³TYÙ Äï·Œ]å—>y|,¼|æÝt,|þ~jŠ+ E£¼ü²ÂŸÿ,Î5÷#§fùòcnz ôw гÏÞ;@u]LÂE‰÷?.ZrΛgyòòóÅäILj „Ûgbâ½^K=’˜ŸŸ©ÆÊM-{%56N½!ÒiضÍ䡇¢hÚ¾û{ÈÚÊ Ucù¢“«­EÕöÍù À&ÿ^J‘Nؽu‰ªŠ4ºÓN›:D¡(ðâ‹â¾N<1sÜnJÉ<>LmU¥mx時ùOv2ÚË KUµÏ½ü\JXÉ\%H£QË!¦(ðZëëÜpÙ>?úؽüì•[¹÷ŠP5Áo»ÍÊ¥Þ=÷ÜþtÚ«÷æ [¸Pliלu–XÜM›Äu»…ÊJYÁë"³R&o°XÌŠÊI·çÚ)/OL½XÙ~ïÂ…nî—º5ÕøSýþÉÇõö çÈdØóS½õÖî’59¯º.æåÑG3mÒtZ0> Ô©<¿û³þ@NqÏöü_{ë»D9œy<ÿ¼µ.Ÿ [ß÷õIï‡ÉP¯¦+ak|ááÏRóöéÜ›ð“4GP'SÅßmP™-'AÚA©”(“Êɶ‰ƒô”56Z™5’ÛYú¾½îp²*9Øž¼w“³aR)¡jÙ³[d‹Pp:sx<냪ü»|>Ñ.EÚ§ŠW^ wßi:HÍàÿZMïààÞ‘“iÕ*ò™ìA–Àþýïw׺Î8c<æðñÐÚ;©.(£Íèã8õ/¼yØÅÜ7ÐÂÇ]I˜cd§Т"8ï<ñC‹‹…ê*8©”aAØ ñ¸Å}%Pí±=»›ró«É¶•žÝ1!mU©÷Ë'¯Ù%­´Qq/¥¥bŒ;ÅÂü«™Û5“œaj””X=‚LS¼?ç±>uubΞ~:³\–,Z½ZHÏ\W.»^ØDÎEÀ0,Þx1Þ“!fBQ‡¨ä@Äæ§ÐË.üì³­Œ˜XL¨§³fYÑ´Ý=¦S9?Lï›=„!¥ŸªŠ´9ŸOü•¶„¦TÏÅò²Úãyn·òòr!õ¯½–,Ás©ì+ööa&] ó°Ãà ƒ,^VØc*%rUÕb 7Þ(â|ÙGKN¥•˜¸Ô\î˜CÓÇa˯A]f \>a8>>r!gäýãƒèdÅí›þ¨£¬Å D ¸©2\$Ø&o"™­bW_eXF‚VžcwØûÄÚm&»Š,½’óæ‰û_³?\Œ¹iÓîimV’OÓÄœ{n¦Ú*“=ÙÄÜÚ³’äggŸ-ÖW&fÈп;9T7u^ o¤i;.:žÝÉ¡¡Öï€\W>%%¹èÉ =Šòz§ÐÉí0t=tß¡ÐÔ­-¤1.³_ìö¨Ìú^¹Één“¯gÏ]•ßÛ+'ì*³ôJ–”À¿hÙ`óçÊ"fiW¯§ºÞûá™J‘ÞÔ#ï—.žréÑ–s )çDš@æœJ½®ÎÒŒÊË…fô VÉ›=Ü0U8è_“"z#ÃosØå°~Y.¬‰ÑT­Ó´>RAú¨ùõo£æ¼c8³ð;ï©$}Ç©~±˜è<gf•ØNðfJXQf–yž}#J`N.F–1Ó=y#KmK&Åkr†=g¶ª*Ó>óx,»zÃáñ“×Þ°áÀ£5ÅKóKb¯Ÿ÷zELSQD¬R–”Ã)§X 鬳¬XŸ=ƒÉîñ¶g ©ªÅ%ÃM§­´>kv»EûÍíÛ…3Fš££"iaºÑ{/ÕyéϘœ|ñ^“Suóûö³8¹ð»¼²ýr6æ?9I›C.¸à.þø‡…äœVBôÄaÎ-ú_âú{k‹N  µµ¸ŽƉ. IDAT<Òz”šŒeÚµrd: ¢Q±yì÷±1KÂÊ &3ì “JY)\“½¸‰D¦=kbÌ‘‘Ìq¥Z-ÇŽÇ3㛦)l¹‚ëS)Ö`ÐzΣ]´ƒ|ZüYQX¾ëžïû1?\°‰£˜¦2QQ! ;LŒ/»åy»F`{Mϯ îgñØÃtÅžFïŠÍ@Ú4ˆ…aÙ&È9t ?^y2 ú1|rþ/ÐÔnI«(8§ÊŸ•U²û\(”ÙÃu*îhç’é´8w2·—cƒ™¶°ýú²Ù–}bì¹¾R-šÊQ%+þåõíêby¹%½·m³ ¤íÌ@UEF‹ÌÍL§…ôÉËÒ8éfííã‰íŠÂP´ŸÆ¹ðÖf8®q&&ŠbâóY?ÀçËL0·ƒ=?ê§6Û%¨, Ÿ<ÿSµB±›²A¶4vì©‚^¯ø;wZà“ŒC–ËÉ. é´hcתäËÏMSì§®.ëÞìÒÕé±HùÙð°˜Oû^<çÁ wîãÍ›j[»VÌý4v:õ‡¡„aõšG(ƒ±6H‡à°2Ø0 ,‡ü úDŽâÐ ØlÅ_ÞAqN9ÝÝ™Ý4Þ‰†5m€Ú½²Ñ¨X{'9¹ù%0ýþÝŸ²/’RjO9©.—UYaߌö8éTL °’'öô»ü~±&;–äæ’ÇöÇ&H)Ö8ÉÛé!’R^®RS#6‰tTåä@UV µòù·Ö“W˜bÛãÀ$“ü$z57Ÿt?±d|âº%%âZ££–ŠèñXLRÓ¬ùÉ›@†¨¤çZ2ù’Új¾dÛ™O={vfª\K‹mGGfG„@ 3„3U3m»#@ss¦/!öïìÙâäÚÚ+U$ÓL¥Äù³g‹ïãñÌz݃Þúé:ˆæ- <ùWŸ}Á>` î€#Ç`Y¤_ã£B²®{ ž~r=}躕÷,Ë&eƒLîÙï0Ï;qŒdö葜Pª 2 b˜’<Î^w8•tÞÕ@>œ)°zðø|™eCvUÍb™Š‹IµUÆY''ÓÛÇ,(ö·Ô ššÄû5C÷±èþ9äzMž'YË´êSuÝZiGÇ㻃ڞ]$¯-MƒÉ©“¥¥Â>–­VÜnqìäžG{¢’ñx‰ÂÂÌšU¿_¨²Giu—°kD2[Íé×+, L60“×—”—'îÕÞIb_/PøÇö‡¸uÇô?Ê @ÔòV8ülé$¨}pè—ຯž:®Yãä狹<üpñ[«« M&-7»×+þ— Ð4+½Îîm“¥Ir’e…ɉçéôþ=ÏÅ0v/©šŠâñÌìòÃSÕ†ÊÆW²,²:¸Ë¾:’É.î N›xIwÜó æ~æì¡§lž<Ã0©*.âžýÞ\£›’ôàœ©4ü칯Зèà_~˜’’Ø#ôx,O®´1'k² @΋Ç#@#ÕÜHÄ©<&Û] ŠÅ2çØ®MÖ¤òò„äÚ¾}zvži mÂ.a'kKö'éí-¦.÷„ýïäï++3“Zö%Ü7¿ðcœõ¬b€^Z/¾_³ šc³èk_çÁ]7qfåwØyæë„Fƒøy(Š:ab[ÎÒéÚ¥Ó’ àVùùt~fÒûdÃ\ÌJg„äv¨ÄRMœ*þ7™³KÕn_Vv˜“œ_ÚFv).9ª¼GM³T#+µç ÛÉåRp¨þߟndhl˜Šy°b'|íÆÿBÓ”=Úáp˜ùß=˜¿o~X,I÷é0x¤úàá¯<ƒÑ–àÎ+î"žŒMH §ÓòÜÚãœvÕ[^« @¼¤ƒÇ.5ìs#_RE´kG±˜pŒ ©<2"þ·¿†‡à‡†¬GCìí!À2þìpˆkÉ'äíφµÏ£Ùžü{bÚRâÏž-Tj§Ójñ2ÕËé49öäs¹oѾxðÿ‘À³ RðX­_¿–š³Žçgß¿–šú£ùê+g’çË›¨í­¬ê÷t̼w,A¥3BroÉA÷ææ–KÞ ärá°%¥d_ÕÉ-˜¼²Ï¾ mRyŽd`µ‘á MËÌ–÷$Õa»·3Ýé„üÜ<.þáÑèÕ•lìÞ„¾£°dæRœže÷Ú,MÓX¹v%¥ùn¯&AMó0ÆàÒÿýÇÏ;¯8‘í/µ³½«oÂa${É ¡É*«l6-fWk¥dSUáiJÒÙ¿³v{Ú€Ò)$3Á†‡÷Îd¥¤”ŒctÜn 7yyɽ{²óK^ß0„Ú,ícE±ºN1 ªÇÁõ'ÿœ_ÞñMV„žC­öR<7FùJX7 ¸aõ²WÀÑpóT“ŸÜ '-¥E3Ÿ±óN=ºÓhn®¥JçŒ\ø=•'«¢“óBC!1a¡I<®JEQUUUÑ4N§U5…tzÿÒÏì½gd7{έ¬)•ÇÚ›gÙ{÷L¾çü|é3ypÉ}´ÆA}½›ÿj»Ž; „æ 2&Ï™GÎ$‘¢ë:Ž'íí!š…ÍOìÃaÓß¡  Â9°~Çë”/Èç²;ÿ“Ûý¦idåå|Êû”]¦²ÝíÚƒÜì{b€êÝ{\÷YTd]W¶DÙS—ªºtI§ÕOŸûÿý‰›OP¦\wÓÜÝIdïÍ$…Ïgi»__åÓW‰¯B§átƒPÑ« ýgBË*h}.?÷tžìßÄÑ-#´öûøÕ¿åÒŸ íjš–˜0§öÕÆæ= ³HSöIŬl"» &7ûž:ÍIã_J1EÉãϾEeåÊUäææ ee3¸úê›q»Ã(Š1ehÇþÄ®¨sÉ…^L{SåýQ‹öäeÖ4­aÎèròRe %–W@:§ÖžÎù?Ÿ¿Üý¾ÆœÝÆ=ñ ò‡KàK¯|Î…šõ°µ"n0FaôyøÛ3SV^F"T53™cO’o2sL§-ïq"a1Wé±–-=dáò{EétæÓÍR©Lõ7?ß (D£1E™²nwr޵߯­~’ï»un½ôV‚ÑàDÎk2)˜J($þZæ–Iž×O2 «Ù¶|”Œ¿J&hš&Ñ`ŠÃÿ3Å93ÿ@05Ȳg¿ÊX-ä-s çŸPâ‡G–½H$¯ë`l ¼ñ‘»¹ï–û‰§¢8NE%5Q ·Û •Š£ëÓ¥Óꨰt©è¨ ÛEL•éVÜNªXùùS·ê0M]Oðæ›a¶n} §Ó;¾` ëÖ­£³³MÓPUøä'¿Áá‡×átz ÌŒk LjàªÒÓ:Ù¦• ºd›Ë}Åz§l0h’Ÿ¯KÄ8é“'Álh,‡m]P…Þ0VÁýƒŸ½ô-~|ñO1ÇŸ+#{½öê+|ó•o wP¼&Æ>÷{çñúO_å//#•÷*I öÐ…eÏZ1Î}qéÉí6íñáXlïµ•Ó ÃI‰)ç0“¡1…H$Ľ÷ÞN,–äê«¿CEE PÐu·Û‡¢˜6Oº%)C±§Ý|xáºs®ã“Ç}2cŒŽZªýD§|Ì»e.nÝ@(n9î¤#M‚YJèáað¸<üÇ ‡“»#ŸpÓ(l„ܦ\Â;Ã()8ªF°­WŒñøc/rÑU§c·F'ly^{u O=ý ­­©¯¯cÙ²åÔ××pöÙ_¡¶6Á©§~t¿;*hûp 9 wå•_ü+8ˆÅR†²[€[ªÁöFR.„à N§‹Îί¾ú«W¿Í /¼@UÕG¸ï¾ŸÒÕµ ‡ÃCww7š¦át:q¹\ìÚµ‹ªª*g²téßxñÅgq8œ‡ðÏþ矉-[ÚI§ãTT4cš‰ñŶšuIUP¾—Ñ=‘,mÛ]J;póÇ¿ÝÅWÿ/$¶ÃÈ.1µ¹]R ·þ°ü~NΙÇQG—á4Sp¸ùïKÿ›p(ÌÚk… ÷ÿï¿n`¸[ŸÿΛwº¡gî'§8J{T>âpoy©’‰:0Ru´‡+<Ë™—›k9RdÿÞ}½ ¬}»Ÿ@QL7¯¾úO^yåIÂámm›‰Ç{imÝL[[wÞy'ùù5¬Zµ’×_…ÞÞ^fΜÄ) 1ÿÔù„N®¹èJrK&L:-æhòÓß_zóÖ ,¡Ä_O}I}†Š­ª™?n·ø­‡Éá‡Íç;ß¼•™žκâL.:ë"ï}œ@¿Bm¬nãÿæŽÛùÍ·?z2 ·ÁÐ:áéÍU56µnÄï÷36¢¾¾žÑÑ1^|ñ!žþEúúú.–a8Íw­â^ý Äb~ò“;H$¢x½LÓÜÍhÿ›˜¦‚ª* ôqÿý"ð£i. Ã@Qtn¸á<êëéîî&//H$‚×륦¦ŸÏ‡Ãá ££ÇÃÈHMÓx饧xä‘ßSRRÆüùóùç?ÿÁ–-ë¹çžŸsÛm÷—çÆå2vã–“ã±–#Á·ouÒé‡I¿JQ‘UÕ&¤êK/½BWWޤ‰ëÁ'a pîx|L…ÇÖÁŒë<´ÿÞA¢Ø3î 0P•d2‰i”å•qÌ1GüH* i6cîanzô&4‡ÝHãԜēB%’f…½³üdƸ?‰üÒ옜«+5ŒtZ|—H¤&Â4££`šn·Ó4öhûÉìLKò Ièäk_ûsæÌ¡¤¤”ÒÒ2ZZZèìì$Èçõ×_'NóöÛKXºt)ÍÍÍtuuñç??Ì=÷ÜË÷þú}´“`W0 Ÿ¹æ3,yl U£«/LŽ'gÂÁg×ІÍ4ÃAXÞ¾Œ[Ž'Q&˜¯½“‚‰z<:Ç4ÁÑÇDå%1v.þ/?÷2½î£IÛöT¸ú™¯@|óÈûøþCWðå¯|™„ž]¡y<óBUU6n܈ÓéD×MjkkX·nÝQqëfÕ-BPi’pÎÙ㜦ÏRU“3žäÃéTp8<ƒV®|Š]»Féî^ËèèõõõhšF"‘`Ó¦MäææÒÑÑÁŒ3H„¸sÜty»ÈÎ#áKÐhdçÎâñ8‡ƒh4ŠÛí&77—‘‘jkkÀ4M:;;Y´ès|êSç†1MeB·¥4ÊÉd2‡çŸÿ±˜“®®M¤R)†‡‡ÈÍ-çä“Ç㩤§§ƒÎΕäåå³yh3kGÖÒ»£—ãux#$àsŸ¼™Pc/Z$Í¢ã¯ç|*ç,ï}œøkcDaÊgÁp-$_A¯¿µåõÄ|ÝœuÕÉåäâloæSW."•L¡IÜš—H"Ât*%ÄFTPU'ªª’N'I¥ŒÝl>M3ÑuXºt)é´ÉÊ•ëÜhšFOO7CCzè1|ö³W Mã•É„ù¼øâx<^Ö¯ßJNŽ‚iš¨ª:aºD"º»»©®®&N ),,dllŒd2ÉXxŒðP˜¢ù-ôx^ w p8Ì*ŸÅ#_|„ů¾É÷Þü±‘MÓ´ý óÖ[16lx'Ó41Æ]窪288ȪU«øÈG>BGG¡Pˆ Ã`Ö¬Yk[PP@AAÛ·lgKóšZikÚFíRØ­E£:ZÅÅ×^ÂO^¾•ËO¼‚ÏŸúù‰0×åeÁw]…fà-xâ¯áÐTLL¿¶ŒÿòK®ºòZòòŽà±ö[øîÇ„æpN¥ÈË pÓ_Nå…5ÃÌŸ˶OÈóhÌ…i PÏã%Pü`ŽÀW¿ðU¶lÝB(BÓ4\6Ûd×®]lܸñÀ´®¥nQOyy¡< Õ  0š?ŠšR*¢ 3@Ü#^”Âô1+> ò¡ÔSJRKÒèŽÕMº(Mž'£Ó Z¥«§ WÈE~s>á0þ"?ÃÃÃÌ+˜ÇúÈzÌ<¿é'º!J}]=®\]±.¢;£x½^ü~?Á`††’É$mmm8*ÕÜtÓ·p» yê©¿à÷; ‡Cœzê•üóŸÏñÜsqÜqall ·ÛÇã! Ñ××G~~>ŒŒQ\ZL"'AĈ_çõ%[`;”šÝëà¤áÕ×ÀU ‡–O›#DõšY¼Ý²‰– -ljÙDùH9}ý0ÛÄl7Á úàÍnp 3sKÙØ×.(-¢ÐSHgq'eÅô×Á IñÌbæ*gótê\Ã.¾tì5üjÙ¯¸|Áeœð‘KxiËŸ8®|7u1<܆é‰Ä‰F£D"!¢Q¹sçQQQFkk‡Îà`?••Õ躎a¤R©‰Mµ|ùr---tuu‘L&¹ñú¹ç{øîÅßå–Gnanî4ÖŸÊ3/üޱ±^òó‹éïï#//D"A?$!e¦¨®­¦··—D(Ãë O“RRºA '@p4HIU Áþ £¡Qòs‹x+g É&9fk-ÌŽ7³qp!µWs=O}õIþþöËä†ý$ Öw­çîoß ~ð4;™?g!Ã+wÐÚŠ©¸nˆ@ÂÅ©xR9©ò^xŒ…DzaÛbÊgÁH8BІªè2 °†SÀiÀ(ßù€¾Uuttõqê©§288ˆj¨à%lÛú¶QVRƺ¥ëœmlo¤mfŠ©Ð°½S1iŸÑŽ+å"éL2sÛLZç´R»½–Žšfm™Åæ¦Íœ”<‰žžT§ÊÉ'œL{{;›Û63P>€Ð9Ã<ƒ§Œ§8K=‹16vod°jR¥”¼¶<@eÆ2Ž2" Ó=ÐMyI9þ\?m[Û@ƒÒ¢RÚZÛPU•T*ÅìÙÍ”––‘ŸŸÏ[o½ÅÀ@?³gϦ±q&›6m¢¥¥eâG/Y¼„’Šz(++cqÿbŽ-;–¥½K –a+0*bÐ÷O0΃¹­Ð?e~h?†GÁ|˜••tWw“ÌglñÅ— A“6= ,ž΀¹°ââ>š›ikló×¼™šŽv5좶½–] »¨ÙQƒª«ìlÜIݶ:º*»0Ò:†×¤rg†&$¡/ê#m¦™{Ä\’É$UUUlݺ•ÆÆFt]§»»›ÆÆFâñ8º®ÓÛÛ‹Çë!•LQ__?!Q‰)=Ewg7½]½l¨Ú€Ô0ü[Ù2k 36Ï ù fº»»©­­¥¡¡ÖÖVܪ›§•§©Sëp·º)/+çuÿë¬Ì60·w.ÅåÅlb;ÍÛ,‹K“?\DÓ¼!–o»ñ|?t-‡®ã¡«WdöÐ8¡vC-ÁÒ …C…ŒS2TJ[NÊ:0σÆô—ôÊ 1»u6­³[™Ý:›ÍÍ›)ë+Ãó FèÀ<Âdî\Xq̽BtÙ pÜ]ª‚2 æ2˜]ÞÓaK©¥›Å}ž=C50u“×ݯ3sëL’$i˜Ñ@çöN¶lßr`¼¸ù%ùË SÓUM“ ê‹ÒUÛŬ-³ˆú¢øÃ~"9¢Þ(Š©ð$)AQ"ƒvÍØqx«ï-ÚõvF+F)Ónf]jž˜T0† ¢UQNTN„!0«L¶nG ©ìÐv0<2̨w”ÎÊN¢#Qv¤vð'04ƒH$ÂÎÔNL·‰'áÁ¡:PuC1P…h4Šßï§Ûè¦wk/èºÎØØë×­§ËìbW|Î!'šK#7œ‹‰ÉhÁ(GôA‡ÑM]“IçJ¨9´-°-9-°y ¨Cjx¼>è/íGwëx»½DËcäÇÁSC;¡j6DÖŠjs'¤WCâ¨8F7@íX ›ÚLi)qOœ„3A0¢Þ(#E#÷ÓSÙC~0·îA34â9q4S#íJ“ð$(¬(d{|;›6“Ü‘$©'ÙÙ»“õæzv ì`lûŠ¡°vÕZt§Îƶ ’Úžb02ÈêM«Y<¸˜Ô#m#¤f¤I…R$s“4mk"áMà0¤½iB!JKKñ8<ìØ¶ƒíÞí„’!JµRfÅfÑSÞC¯Ò‹k±“D]§+ç±R[É Ç :¢¨QC3 ©2Ú{u´!tqŠÀRXÖÅaÀd98<¤œi ¢yx’b3ûˆlLSyTœC`¶ÁŽCG(é/A5U\)¦jbª&•=•Ä|1ž^—­E#ß°åé3.ƒ÷~(í,%Ò|(š±M0xô®‡T:“¢Ú%à Ðñv©dŠõë©íª¥¯¬XnŒdWUQÞo/î´ZXXüWïì>ÚýCT ”Ñ[ÕGÝÎZ¶ÍÚFYo}e}˜ª‰b( €¡¸“n’®$‘ü3¶Î »º4pé.ÒjÝÐi/h'âÀîÓúèövsDä6íÚĦªMô›ý„¼!z|=ø£~FŠGˆ¸"4ni¤»®›”;EýŽzvÖíDE¥h¤ˆHNOÂÃHám%mh[4võîÂëñÒ××Ç {gЉaЬ¥·ß~›„žÀr“Ë¥¿¢£ß «¤ ú g8‡55k8vž‰Ï ±N¨;RE0ö&ä B4y«€¢Y):ó†p'=¤ÿž&êÂ6(Ÿ¥°ã ­£ÌN ‘caÁØÒf®Â`ñ ž¸‡?DÑHÁ‚ 552\6L}{=Ý5¢K¶©š$]IPÀTLÆc” ”Ð[Õ‹³Ç‰Òð¦½lš± † ‘J úªúpŽ8Y™»’°?Œ³ÓIc}#ñ]qvTï Ò¡¸®˜]Ú.R‰ƒ5ýÄ|#TuT¯¦/0LÒ“ ´¿”¡’Ar£~ºéfµ5ÉÑ$þNŒƒf3]Ž.¶)Û8Ýq:«ëVQ 6›8:|4/z_$ì SÝQ͈g„‘¢sIùâT©)F_†®2àh]óAQL½E7ÒäÏL0:æ «¦“¼†v Qp<¬ù ¡«H^„ÂáBÚ›Û©ì¬$šEÓ5RÎycyìhÞAì…áÒ0ÌÑÐ̂Ȗœ"PÛt IJ÷¸-Z 5[kè/é§ÄU*” —   0T4DÔe¨pc»±ß–Š[±ˆEæxvJŽ \*„àTa0¾Îƒé4JLäŠ9RN†ŠÉ ùI;S¸’.RŽÑ@(î.c°xÿXº#EÔ¦¸¯ŒÁ²>rûr©(¯`,Dèy”`ñÚA¢((E×taóú¢õ—¢;Ò”÷–ÓUÙMUw%]•ÝäD}äåò‡ˆ{⚉f¨ ”Ð[ÖKYo)ѼIW]5ÐÇíëhNS1Ñ5§¢1<4DNDÊvb†¢PYÁ ˆî³ȃÀ1PÚ_ÀÖ¼ò†óñæ$IŽåÛØOl\M’‰$Σ t—p2PÔ›ÀÙì$¥ë¨ºÊÌ­MliÙDþp!Š© ˜ Ãô¢Ôp çH< ÆväRÚYÉpѪf¢U S8V€Ïjá¸I^_ ¦¦ãJºP •ÞÒ>J†ŠI9S$Õ¤`ÿœP6IDAT šŽSw0¤Ñ, #o¿¥yІªh 8Ð>~˜¤GDºóPQ0“P` ßX.“æP3Qo‚1sÉ„‡ 0jGp›Pàƒ¶A¨qæã•²cW®TŒ@3t¹!°‚…B)¬;F×Apø†h-Ôìª"'é§o¬_y’Ñ ,ƒîˆHn¯óÍ ˜;BÚ î„ CÓ)¢¢£Š¨/Šfh(ÛTŒÙ:£]Ø!jÆÕèÇ ñ,0¢] }1¨=ºÞÝ1^í2NUGVÕ⸒bs#9¨†Š©˜¨ºFû¶¶cƒ6žÉ"áÂ’®,Û_@Üioºå2V®2ÅÆ!ÙtÛ·îb³úô>Ǒךüwÿêç÷}ÎÈVl€RôÿM<ÿZXv§°'æa|€\*”ÌV4Ø2n›–w@ù\ðDaå#à.‡ø¤^G_T-ÆÜŸßb˜bþåßÉ¿OΫªìù÷ïï\M¹þ¶}€2õxó6ëB%œÕ(N3ÆW…cŠ.Çðñ«GÅ›O¾É‚ IÕ"˜ç"žáÜ&ÆÀ€Æ†FNÍ›·P¸FR`®ºÆÃ`U G«5+‡²É|f¯ª£bÂVÊ{ {µøl^=l9" H?1~à1ÀRñ·Áí¡r{σQ 1å<´ýólµøÖ²o²CSç’ã( ¯¯UU©ª-§kÅaŒ²‡±ïk©ïàÚûsNA1”=ë…”Ë-€e%äæ³v½¾3!ºÂ*¤Œ—WN7ô,†ÆsaÛ}/†`Öl wç@~/gC (Õ»ü ê{¸N{=Vƒ±0x= :2SÏ?ÁÑUŠQ×s– « (…pÔ‹‰‰šNÒ·Ô ¯6‡7¼¯ކ)óVñ±/-ø |8k¢ãÀúq`^(⢬áÿ·wîÑqUWšÿÝg½ô~X[¶%!K€°›Øì=+Á`X BÀ4MO: iCè8ÃÌš¡;$«³C¯ÐmCChó4ÓNHB &!8^ÆÆ[–e[’±¬·TUª×­{ïüqn•ªô²K–l™©½–––t«î=çÜóoï}ÎÞ›ðüv脪¯TQW½€={öàóù¨(«„ã-Ò»àƒ~¿£¾#°à2Øñô¿,‚ùŠ8øï+ƒ¾½ ]Æ%¢ áW“D‚ÿ xËàÈK0çòñ¬Ê Cø2QqëVsëtL~K_´˜ Ý×P\ZÌÇŒ×ëÅëõÒ××G}}=­­­ôt÷Ðï;„YÑ9%ÏD‚1(+€68² σùÂG%b€£ÎÄ ·šy_àìþÊ—Ãñ^PšÀj€Á Ð½AA!GÛ!lX})ÌËÿ%ÇŒBú–£Èƒƒb›)¡.–JѬ׉…T–ÿÓl0fH áÏ…@] %>ÁhŸ„ÒEO„”IŽÆ­€„΃0»1}¨„Þ>òYÅåôy¦® Ý`à8Ì-¯£gÔÞ!/t> Ö Âåg¡øƒ£å4íŽÊ] ú…0Ï3þ»k~~šTÜé…h¦NåàE¸ ]Î>e7===Ü~ûí´µµ!Ë2µµµ455qÑü•¼coF9ÍÍqÊÅ+ÅPw™˜Ï»/~…_ƒ+šàå=૆ŠKáÀ3`G„3©t!˜A(uAà|8þ þ¯ ‡/}/ïu&X=T-ö· z…“ïf{QWû)/ý¡p} 7°ä‚ ƒuÌ«zRœßU¡ëíbä”A³IÛ¿ÇUi•ûDtlA^n#«KHDˆÛãäøtÖÛã\·±Ïü0ÞŠ °£mÃìå)ùBÁ–-j£D\P|>Xñáf%£˜,0\Pt>„íaoÕ‰Ïì#0j.[&”ž#~\6 ý`ý^ô{‘ŸÊ`4;`¼HŽç3çèßµ€Õž©«s“@#ÓÐóëÑŠ$ÚÚÚX²d 7nÄåraÛ6‡W_}•n¸x¬þò¼t»yç­Y·nMÍM㪣¯ýü5ò]ùŽªkòÐCQRRÂ]wÝ…æÒ’ŸÛþÆvG‹1^TTÄÒ¥KycÛ¸Ýn¶üûrõÜ ;¿öîµ,[¶Œ7ß|“+VðÂþ3êì™WÿÐ ¸g;>?´‡j âÎØ{K„W¼*ÊpàU(ðƒî;uÛr6èõÓdƒÊb²—ÄÐqü3*++‰D¢èº†®»ˆÇ lK¢[>Ѫbá„gMÃ’+á0äÉ|pŒ²óCmÕÆ´…Ý„á"Öåáï¿³Ž›6q×]køÉ¿<†eYrsr±NP”'‰°~Ýz^Üò"‡Záõz‘Õw>‰°îï×±eËZÛZÓôDß»ïÞûxíõ×8räÈIÝàà kÿn-oo›Ë/»œ=íewÇ6|s#˜Æ™qN8‡Tñó†`Î1xs#à­€ªË‡ç¬ uûD¦`óËLÏ>èt9‰ÆÚœŠm€î]0°ozÚ[{³X-F¶Ët6À BÝ ¡Ãy£Ú¶Æé 5v§-ÓB–dNjCx¢Á²„Ú*+rfß›è>“¡ ‹45ZVdlŠ–÷‹k†ˆ¤ÂÑmÓQÞŠ|ˆ8š0{¨nÐóNîžÓç$ê™ÞÁOˆãÍÐ1Ç_X˜J5DR „躎7%‰®,Ëô%2C>Ÿ—–—BTý™ŽÛå¥z~ ‹¿°„'~øŸ¼ù»7Øùá.þáÁà<ð}þuÓ¿¤Ý{ÂN:ÿOÄG®_¿žg7?Ë]ß¹‹§Ÿ~šDn2[ÅtMçšk¯Á—㣰 ÿøÇ¸SSKd0èÑh”o~ó›466rï½÷¦…Seú²uMgû¶ÓPßÀºï­ã+W_ËÒ —Q¹¢_¼@ûÌÔæ\(¨,5à¿„”ªqáš|dг­&¤ 1'£Biié„íííM‘×르´4ùw¢LZÀ.††B´ïŽQ[SÅ‚¥Ë¹ùª¿á§~É-«oƶm\•‡7üïI­:K/ZÊ<ÀªU«ðz½lxxäW/¿ß϶ßlCQ®¼òJ¼n/.·+™/)S‰D"üÅuÁ#<‚¦k“¾ˆ3Á‹.âÕ×^eëÖ­|íë7²kï{¬ZµeV?$½ºgÌ×`޽‰aŸ|d¦âÞ6½*ËN©…Ï@}}=¡PˆPh´ƒ©¸¸Ó4Q%­2²Hh&ÞŒªª´µµ‡Ó¶¶¶–}û„þœ[›K("//ï”&lBâFœp8L^^Þ)¿xI’ð;ItóòòÒ*ÛÌ|öKˆûy<TM‚I(îçv»ÑT ÀO~~>¶)ÎJæžÀ2e|UaØœQОª4?wíƒN—¨4ýû°ºØÞÞ>v—l›ââb'·’=ÂÃ,#Iu-‹±oß>ÊÊÊèìì$Ú%V~rª蚎®é ÁÀá,cj6Öú:úÒ¨úb¬¸…$gÖæü¼ü)}_©÷+ȉ‹%Elã[„÷8Ü.öM=•a¼s"gÝœœ~72s;bIéþ•ÄáYucÙã6,ˆ[ãONY‘'T K‰Æ úû+aŠJ‹FMšÁÁAî¸ýt]gó³›Ñ]'o³IˆèEQœ\Á3åHµ   ­ý ¯pRµoꥬ¦LDþgHI±hŒ;n¿ƒx<Γ?}Ÿ×‡¢MqÉë”Cœwç6œËž=Ÿ°kÛG,<_¼¾Ž}M{Ù±sZ®‰žg®€›™Š»rfª¸–®NX¨‹÷™4æ½y i|I'f¼ñ¾kÚˆJtÙ(§¿W€ûýþ4õøõ_¿NYywÞy'ÇGÎ K´$I:tMÓ˜s‚ÒX²,ÓÔ”¾ïY__Ÿ–häõ´ÏÅ­Œ@jY.—‹»ï¾›… ²yófÞ~ûíizÉ h ªªrýõ׳bÅ ¶mÛÆË/¿Ìµ×^˪U«Øöæ6^Øò]*î™v¥„sáÔ]ɉ¸©ôD˜§BSìþ òÜPà%=ÎjŠu÷Ö~(ˇúY6ç—AMÑqv«ÐÚ×iBcc#ñxœ¾~Ëד (ŸB ÷Dâ-iDVí|'S¸eYÉtI[6O>3•9R^^NWWMMM”””P\\œöµGÓ4¢Ñ(š¦‰=ÛÜÜiñÖ˜¦‰iš<ñÄäææRZZʪU«DÓ4|^²­pÓ—îfÈ{ˆç·<®«øæÄÅ\°Î>Ggf ºê 2¨ÓRãXÖ€€?È+¯¼Â†;/Çí>Hy—ÒØqS)¦•þÈ_¢qqhþW»ÁN­Muu5ª:9gJ‚Au]'‹}D©¡¡Ã0ÆV4¥­­mÌksçÎM^Ó4êêê Õú‘,øÝï~G8¦»»›Ûo¿ÂÂÂéÕš, Û¶ÉÉÉahhˆ_|EQ¸é¦›ˆÇã¼ð‹H’Ð`V®º’ÜÜ<äóÚÑq«ö™k&ñ 3BŵP!!ÄtbFŒ›¿úuâ¦IÜ0yå©P™ïÝ¿Ž?ÿ/—ÓÖÚÌOþî+èyð«O Øª ƒa™²Òk—3§²œÃûwSžßC–EšÍú2è Æ¾xžèGoXDª D`Èts4ZubÍÑ‚¸" m--HºŽH?–hskjÆV4¥«µuÜÇ766ÒÕÕEWW¹¹¹TVVŽº×x_ ‰ÁÁA®¾újî»ï>ŠŠ‹¸ä¢Kp{ݧií^àH$Â~ô#lÛfùòå<òÈ#èºÎ%—\‚iÆè p¼³“öžýì>ü{°e(tŽ…ÍL73€Þ: u€<è%Ú§‹A³Ä2——+¶,lÛ&èƒq{Ü¨ŠŠ/ÒËâ‚!âö°/Á´aÿ1hÌ ŠqMQ0ŒjÚ§*ÃæwᯗC8.d%…Á£"ˆ$Á¡~‰}v1ò³À$Và¦øˆ}’$2ñŸ„".,>B‰¥\B$Æ<á5ÖuæÏŸO8¦½½UWQ]*‘@Äq¶ÉÖL|ØÃ6m±-”P§Oó>ˆ„„m‰ù’›››4ü~?’$¡in·#n GYn …Kú“Aæ–9µÅ¤Fô…bƒZ‰ÊcÒpÇc=ºSnLCa¨Å'5²¤¤»`ýCþQÞ¼H4‚mÙ Dh1ÄŽù6t†@;æ ENþš Ü9ÞØ$™RQÄs’äq´¦nqäËÿƲ #ƒ!X4*r¡ÏoãÍF5„†Uþ(«Â>Ãd="ñÜÄ¢ng`ãÔ | ü p)"¢Æ¬VϽñ8ûE<„®ňÇâ4žwq'WnÇ@îüñYQR$CtïëiuQ†—†‚ií0LcÈHoŸ-lÓû~qR“)\Üœ3<––9ý&Ó¸D0åêª NId pÀ‡18zdéoNÖ3·Üe`A‘É»Íð·Î„þQ€×À{ïÂ'Ÿð°W’¸óο%‹fÜŸ½{÷òîûïs—³ÌqÏ=ð“ÇÀ2i>i`ò0§\ªx©< ‡»`a~„vK5X Ãÿíø_Iù·Ž/œ*­+±ü< lþ ˜Iuúk¸cü¸ÌaÜ&à‡û÷'\Ùèå¾±“õ"!kvæƒÊO©Û–DÉòþäi¢Ó© Ÿ@å¤Fø¸žì$Û î;®ØiÁ£ƒƒ¥I={O|ÏQÕ\NG’5[=Ãõât»](JæËz¹ãNtÙíNk²šrí{ÀæcpEøˆª@y>´÷Œmw—… þû± w ‚ó»Rn<Ñ€m^/õuu´|üqPIÐ!ÿàÿìo”“LŒÑD?+ù¯î@ÔŽ!Òö¾ÜüfAºMV°“f›šÇ[´"#iêdØi 7^IàLîøÊ,[ ’gÏDIxƒY¤qKªÃ_°lGd|‘Ò¦°nº‰>¿í7ØZYÉu+WfÌþ=}}¼úË_²ˆ]s šª¢ýâpfƒË±ÝW; mH1ÃÚ Üí0îZàÿsçÍÜ`»æÿ?fX3¬8ë`ÅÚr‚aIÎ¥³uX'¥$ÍÄW6œ®2;u¥Ça¥ï;€ÑûІdšx ÐT•Ÿ/c€†††À¹gÌíN–¼;Ì:xøŽT%…±jo³à¿~éXQ”,&Ç{ïrª–'Û°oã«Bq%HÒøü´sêÜ™íBœ ÆDÛÎqlO·þÈØæ¼–âœ‘œßv†Ö4tHîße ÐDµتš,)­§¨µº£­+Ào0ÿТŽHƒœ\ÁÙ <£V·µ¦žžéûœÔYœöuÍÀ×!¥º2zr[À@Ĥ±õŠçxê©äç\­­<·aäX|žsyË–´ÿKˆ”®yÀÍŽÍ«;öçCΤøPSSCÛÑ£4ÅbYœ"H¥Iî gP{Æ„ˆ“®²4F”»-ŠùLµqñ~øa***°, ·ÛÍÖ­[Ù¼ysrõL0R"ÝÆL•DZ‘Rá÷³¨³3é½ÔhÜaºSQ[s6àƒn`ûo…"ý¥+¸`ëVêœëp…TFµœ—½hWU\.ååå àóù’ ÎéF<§¢¢‚7 …P…@ @ à¶Ûn£¬¬ì¬cÔæææiŠ&‰ÅbÄãq–.]Ê-·ÜBCCÑhÓ49zô(ßøÆ7ÈÏÏsbœ­6I[A…==äš&ÅÀo˜ÚÀeÉìñ–i²ÇaÊ„í)¥<ÓtfK 0X^ŽÙÙIUUû÷ï§¢¢âŒ³ªªtwwså•WòØcQ]]¬»k×.Ö¯_ÏÎ;?žÞÉ0¨>‚AWOåÃMÓ¤³³“—^z‰p8Luu5Š¢ ( [¶lá½÷ÞãàÁƒŸËÁ—$‰Íͨ¶Mþ4Ü?d9™¿»»›\ËwE61ÀÇ)//ŸžD`š=†aP__Ï£>šLÄ­ª*O?ý4?ûÙÏ’ÙÎ}>…AýL2å‰ì¨¸yˆÃ&ß«««ûË©bÌyóæ1wî\xàœ:–bïkçÎx<ž1UÃÏ‹X–…¦i´´´`ÆŒl£ê¨¹³gÏžT¨ÞtÉ¥—^ÊUW]Å‚ ˆÅbhš†Ëåâž{î¡¥¥eÆÏ›æææg#Âý޵1)€êˆã˜%@ÿë©6. ²iÓ¦¤76±ý°uëVvïÞÍÁƒ'ïl©¢(D"‘Q8÷Üs¹ãŽ;Òœ1n·›5kÖ$íÁéMÓP˲f”gšfrËí?ø²,’‹ëºNkk+ßþö·OÛM ?uÚã¸bŒ³}"€&ä÷;Œª1Û›•¬dåäÄv@h8*íQرH2¨”b‡zG4=ÎßJ YÉJÆ5¶ #²õ„SÔ[;S€&XTa8«‡Æp¢¼¬d%+Z5”“ NZž  O¼œò#eÙ3+Y™4‹&TÝÄͧ&Oh© Ì‚3+Y95r"`fvÇ1jgf%+Y™~ÉÚ’YÉJ YÉJV²ÍJV²ÍJV²’hV²’þĸ]Iq~ IEND®B`‚fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/more_button.png0000644000175000017500000000061112162366654024632 0ustar glaubitzglaubitz‰PNG  IHDRóÿasBIT|dˆ pHYs × ×B(›xtEXtSoftwarewww.inkscape.org›î<tEXtTitleOptical Drive>gº çIDAT8ÅÓAJÃPÆñ$½‡!(=€ˆ[AÜ”X{KÄ‹$iƒk±ŠDoÐøf^ž7(¸ YtàÛ Ì0ü`"3cJLšb€å*/½÷Ù˜Aƒª¸˜ÇÛMåw ¾C@TQDADPQD‡žsŽ—ç]™éYZ¶ûý¨ f³¸jšÏy41¸]åe7ÖÀ¨ŠuoPoêìú抃^=ªú'"Šö*‚sÂëîí—Aš”mûuLƒå¢ìBip¨ŠõcoP?e—çFèÞû!ÿ˜8š÷Á INKçÜq &?Óä?±¿,ò¿IEND®B`‚fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/favorite_button.png0000644000175000017500000000116112162366654025510 0ustar glaubitzglaubitz‰PNG  IHDRóÿa8IDATxÚÒ]H“aðÿôaÕEJ÷$„ÐE7]”Eèy1ba®%$9cH­üh7ƒ-Ýè´‚©Û$c¹–›ˆ£ÂÀí´9-7·wßï|Oï‚.‚m`þçÇÃ9JVtµ…*—) Äœ9`ü/ nÇ‘„«:Ÿ«ÌĦqxÇkÇ£\HŸOù[óì :vâÀ”x“çÄ%¦©p&‚¨(ÀŒãœÇŒ+n¸Mhg,P 5YîÊÒvH¬´å–ä¼X™ h:<ãz,¸ºhA-æßà²ë5RŒít>êïç³£Ðô‘xnƒøŒ“þzÚÎ2ÄÅ­”¼%öGïµÉzæ‡Q÷çv=N9+‚…»|rkŠâå~Ɉcu”\§ÌF E|2b×äÿvw í~~…šf`ÖàØ{­ˆYv6åÃ+Z›;DYv„2a­ÎVÓæÒsZž“pVØ;¡CUÑ!öalà E}5õ6ÒÆB#ñ‘4L£jcîÁþ²[0¨àK¬Ë)ºTOÁ¯×Èko G@’Ãdx&ò—_ãCêÝ—M¬É)ì‘‘{ú皼ȭ¸nSòg/igtí8ZPÝAݧ‘ªÔêì^ß}0Õê>9^h{Òß?œçæ³i• %Ç7¡VµUðÝ­øÒÕ‚“ïÍ8!ܹž¶íâ•·ð²$ÐÙŒwBX ÿuRH„Œ­$ lBe‘Ʋ™ßl/$iàˆ 9IEND®B`‚fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/autofire_off_16.png0000644000175000017500000000076712162366654025267 0ustar glaubitzglaubitz‰PNG  IHDRóÿabKGDÿ˜þš"J  pHYs  šœtIMEÜ %ö‡·©„IDAT8ËÍ’M®¢P„¿‹€ƒ8Љ18㌠èt/ÀÙQ÷nÔ¸’VCd`HˆAÀéÁ‹ÆŸîÉ›¼>£ûWuªî)øêR¯Aôªªú©”ú!" +¥V«ÕÛ{ýqãûþ7YM§Ó–ëºF»Ýàt:±ÙlÐ4M‹…ú«‚ z"ò{6›u”REA]לÏglÛ¦,KÖë5$ÚmQ×õ¯ÉdÒºÇÁó<<ÏÃqöû=eY2ð}_Þ€ï®ëÛí–ªªH’„8މã˜<ÏiµZºÝ.J©÷?Dz,Š¢ C®×+ºþq]išRU†a rð¤@ÿÌï ¥I’`Y—Ë…4MïRE„F£išäyþdáQ»ÝŽÁ`€®ë†iš˜¦‰aèºN§Óáx<>Y¸+X.—J)%½^ápH–e§‘É¥Î>!•I"™Jàñ)Žd:¡ÇcQ*õù|ŽseM,üNÄt‘/æ@M§SL&˲0101 Ðï÷aš&ºÝ.:¨è}‚G¤h"®¹×ëÙdÚí6t]G«Õ¾ Að»(\.Þ¾A­V“æjµêäêõº j‰dœ1‹„FI¥R!ǹ“7ˆXüT³Ùt°W6Þ½¿p¸üôÑ kÒGù|>ˆŸ¿¢ ø}<>´Z­pùùƒä›ò…9Öä.(EQ "Ñ0(.ŒËã £€¦â»òUÂÜñ‚)¯× ñ#Å+ãÕ™=þÛkI(¢¹1kòzå€[- ÿƒÙl†pT“l6r’£‡^9ÀïWA- ,—KPñ{l¶l·[ÂØÉQôÐ+\]_ÉÅ7Rûý‡Ã81Å=ôÊ|¸'°mëõÚ1îv»c˜cžÓ¨ªªóÿ?Wìa/OàaÀiçÀöþ@‡xsÄgÖIEND®B`‚fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/tab_hard_drives_2.png0000644000175000017500000000303512162366654025641 0ustar glaubitzglaubitz‰PNG  IHDR szzôsRGB®ÎébKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEÜ  ~ÆwIDATXÃí—]‹\IÇUuÞºûÌŒ='Ót7™šM²º“‰c èfÉÜäbI‚˜›U¢+ ÊÞDoVe!B>‚Ÿ 7"üæ.C^æ$Ý“~™óZU^tŸ“žI0(¸{á§»è®çÿüŸÿórÄææ&_ä’|ÁëKÎËoß¾-^ñ?qàùªe»¹¹iÿ-€Êð_oÿå#Ç‘t” ù¢ k-ÆX¬5äy1zòÝŒ}þ4Æ`ÅXSæYþ«ð“?qqóæÍ®Râ³Õ£_÷—––PJa­E1cÜ`Œ!Ë2ò<ÇZ‹µß÷Éó­5Zk²,ãÉ“'!ĽÜýÍ7þvýúõ;³ äïU´¼ðÓ¥hÙét:î£GH’„<ÏɲŒ,Ë(Š‚¢(ö)¥B°³³CÇÄq\.Š­µjøM‰´r6ÄrƸü†üèÈ‘•f¯×c~~~ò#)‘RbŒ!MS’$aoo­5J)F£ƒÁcÌs*…`nnŽ0 8¼|¸eµþàÂ… Á¬vf³@~úéo¿çÍù°¢”ƒ֚<ÏÇŒÇc’$!MSŒ1E1‰µ}A_h­ét:cÃ9aK¾õö[ï¢bAΨىE®}k-HÓ­5EQ°»»Ëp8Dã8¸®‹ëºµQ!Ä Æ+M¤iZi€·¿¹Ö <÷³ŽWñçÏŸŸo4š›Îa1 ØÝÝe<Óh4ð<¯VEs£Ñ ÝnEQ177WŸ Ãx<®A®]Áu½õË—/¯T jÞùîw~°±±áXkyüø1Ãáß÷)˲ÞZkʲdkk‹Á`@Ç<|øž>}ÊÝ»wkfª]‡EÁ»ï¾§V…Á©è_l/þ|õcª×ëqïÞ=N:…Öº¦o–Þ(ŠxðàRÊ}aèv»5KÕ¶Ö"¥¤ßïÓëõ8yâ¤TŽº| È«W¯®ÎÏ/ó<8Žét: ‡Ã}žWÞWÊ_ZZbqq‘v»]«}Öè,RJ’$ÁZ‹Öš×¾öÚüÅ‹¿H È7V~¼ñí 5 Èóœ(Šp§.BC0 jÖãƒÞchµZh­év»H)Fœ={ÖY^^þ5 À1ZÿpuµËöö6Zk¬µ8ŽCQ´Z-\×¥,˺U†f«b%N×ui4A€‚Ñh„µÏóPJ‘ç9Ýn—$IÞY__œk×®½÷ú‘•P)E¿ß¯ Ž­5iš"¥¤Õj†!žçáºn}a¤( ²,#MSöööˆã­5®ëÖl*¥Râû>gΜQa~ì4ÁïN¼yBÞºu ÏóXYY¡×ëá8Nm MSʲ¬/ª.vg_¯PJ‡Bk]WÑjß¿Ÿ­­-666øû;9Ïž=;š¦ ív›Ó§OEQ»RJ„ûvëY¡Y,Øçªò8/Šº3–Zô2V)9 Ä•+WÒ7O~ÃO’”8ŽY[[ã¿ÿ ×uYXX`~aV«Iø¾š^îzsaˆxžGLâžeƒÁ8fûŸÛŒÇ{Óm'Ïif„aÈÊW—RJ)šÖ´­Örüøq:RIÀbít¢˜ÖcÌ$ôd(KM©KŠé™6fJ¹ÚWšg«d«Ù¤Ùl qéÒ¥þú™Ó_ ‚„àØj—ñÞXð}ŸÑhD¿ßÇØ‰ÒK­§—‚T¦Ê÷©p˲¤( ’,£,JŒ±€á`¿Ú}âܹsŸDQôK¥TÃZ+ªÒùÊkFx³µÿeéeKkÇqüg¼,K@0íâ8‡Z v‡˜€¨ÿpØüoT 1 ÕŒçâs˜Æ'¢€R0*>§×JV|ùnøà_kÏ|MEPˆIEND®B`‚fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/ok_emblem.png0000644000175000017500000000166712162366654024243 0ustar glaubitzglaubitz‰PNG  IHDRóÿasRGB®Îé pHYs  šœtIMEÜíß=IIDAT8Ë]“[lTe…×þÏfÎ:"µíô‚B«1FJ½2 ±ÁhCKy€¨Á1šx4>Pc †„B „FIب4ú`¤RLKì…:šI¥¦--í´63gæÜþíƒiÜÉJöÃþ²÷ÎÊ"fF~Õ¤bh²µº¦×‚ |Ïít:mòÚ~›gn˜yQu‡åÖÝ_=8×?~֞˳§\ö•Çi;ÉLþ˜ÛõEÕlÝ'rS>ó|H¶µ^~ÃJ寏;y‚O½È{{Wð‡ýU|:ÑÈ©3œ¶“|¼óukc‹<¶À3£þ ¾}óÚÝmª_0Oýõ&8tƒ uA¥ž£Pf®ÆK•­ø!þ™Ý=ýå§G×'÷Ð3ûQRQvßµæçÚŸÇ^EZ Ò45èAM|pm;ëã©È›xºtöÅVñÌDzµAmÇæÇ_FObÚJ€4M H t‚”èM—7aCy3ZO”î€Ò~ADëŠÃeúÀÍ`ÁYò2Jdõ¿B`[éq¡¡èj–n…GYœ™}õwµ ÔxD´¨€(Àô éIAš1ŸMBy€rž|€ê;¶€ˆ`haì,ù Bh ¢EëÇ3W18Ûƒ9+eˆŒ“ºj»6 - ×a´ïØ՗·Mäõ@oò>îØ„Tz™ÜlPžßq+}Ý/ Þ ÇVÈe³8Ò¿#™ßn;™™qvx/Žt6¢ÈX‰Ä­¸ëû|Qx2ðMÏ`‡³jEìêÈe¬Œƒ] ¸>ßð”‹c}Ûñ]ïa׼ˢèºèýoµkçÝ©—šÁ@ ZUñ€ž˜¸å)x¾K‰¯Q¾l%Z¯¼‚ßG/C9W¬ÇÈÔßÖÐDì£ ïªvbfì~õ}=÷V®+þœ¡šhŒÈÄIEND®B`‚fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/game_16.png0000644000175000017500000000062212162366654023516 0ustar glaubitzglaubitz‰PNG  IHDR(-SœPLTEÿÿÿ€€€```NbNUUUUUUUUUUUUSYSVVRTXT‰‰†ŒŒ‰TWTTWRVXTUWSŽŒTXSUWSUWSŠˆŠŠŒ‡Ž‹ˆŠ…ŒŽ‰“••—’¤¨ º½¶»ÀÊvuÊËÇÍÍÊÎÎËÔÔÏÖÖÑÚÜØÛÜÝÚÜÞÚ߇‡ææãééçîîìððîööõüüüýýýEËáBtRNS !$'(;@TTgmz{|£³âêêùùû‰ÇŒIDATxÚmÍÙ‚0…áq÷ªÐ«‚ P±TßÿÝœVLñ¿ür’0îiT•?ÊYêÛ±ðn–³ê$iL}o½›<.]«íL÷_À8Ú,p ZmzCËB­ò4W×5ZH©Šë罈>‹sŒ:pý‡2sI!K—¤[&B—`/Õêå›r‡ºIEND®B`‚fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/joystick_button.png0000644000175000017500000000136112162366654025532 0ustar glaubitzglaubitz‰PNG  IHDR(-SnPLTEÿÿÿ€€€UUU@@@UUUPPPUUUQQQ……XXN‰‰‰UUUR[R‰‰‰XXOXXPUUUUUUUUUSSSˆˆ‚‹‹…UUUSXSTXTUUQŠŠ†‡‹ƒVVSTWTŠŠ‡UXR‹Ž‰UXSTWT‰Œ‡UWS‰‹‡ˆŠ†VXTŒŒˆVXTVXTˆŠ„VXTUWS‰‹…UWSTVSŒŽˆŠŒ‡ŠTXSUWSUWSUWSUWSUVTUWSUWSUWSUWSUXR’Œ“Œ’‹‹UWSŽ‘Œ‹ŽŒ‘ŒŒŽ‰Ž‰Œ‰Š‰Ž‹žŸ›‹‘‹¯°­†ˆƒ­®ªŠŒ‡·¸´¹º·º»¸·¸´UWS^`\ac_cea—¶žÄyÀÊÕÁÆÊÆÉÌËÒÚÍÎËÎÕÜÐÑÎÐÒÐÑÒÎÒÒÏÔÔÑÔÕÒÕÕÓÕÖÓÙÇvÙÙ×ÛÛÚÝwvÝÞÛÞÞÜâäæããáææãîîìø ª\tRNS  !$'(+.04:<=DMRSZafjjuwxz|}€ƒ†‡ˆŠŽŽ’—œ­¯¶·¸¹»ÂÆËÏÏÐרÙÙÛÛÝììîñóôôõõöùùúúúûüÛ©”DÖIDATxÚMÌiWAQ†á% ‘J£dФ$§¢4ω#”)…Øÿ¾½:9«ëûîõ|xñÏ”YJNfÆ‚?úPÄm´ãy³Ûëj¼:qºdP.ìÚ¹e«8Œí‡U€n+º71xê=6Ò@²º#å°?Æóüá=;±%90’zú ¤øV¬R¹NŽb实«Ó÷Bù›ÒWú°†Ó¦è¯6Í7NpÖéf»TÔ¢søžY}¾0_,ÒL^–z•§Ã±yKúµ+0}pŸ3ô˜°á D/‚ìµÕ+IEND®B`‚fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/tab_configs.png0000644000175000017500000000310012162366654024547 0ustar glaubitzglaubitz‰PNG  IHDR szzôsRGB®ÎébKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEÜ 88Æ)¿ÀIDATXÃí—MŒTÇÇýf†5ÁI0kc“µ#˜ &!¬A%öZäŸBÉÇ„Kî‘rÈÙ§ä–cΖsq$$+‘W H Øqb´Ú±»Á€³»D1ÞÏùx¯»«*‡žy3Ë~€ä|\RR«Z¯gºþýÿWÕëÿ·ÿ±¹îäÒ¥K×Tõ(€sçÒR¿wÎafÔjµÑã¹Ó§O/üی٩S§øUeff¦˜ŸŸŸÉó|äÌ™3·>€êýZïý]˜[÷Ç•/=ɶ‘344T¯×ëOÏÍÍM^¹r¥¶c÷ϳ,ÓjµúëÇÿ`/^´áááÿ¸æªÊÔÔ”MOO×Î;'%Î9îÞ½ûßI<çl×®]®”àÆ/~x“koá¯}þÍÍLÁ Ó47³ŽW0¨šfƒ"w€§æžÙ}ò$®¶W©à*U\¥ • ÎeSÁD0‰ “€IÄbÀB†ä÷˜/0ïq>pE9.ϱ"gÖÕ/0‘`æê²ð1dYD%Í]–2Å,D‹±¸;Bò1b!àBÄ…!âbHÞ'oqà{T=&u—Õ ³2xV©B%+ëŸ1ph&¡˜ ¦4b* gÓˆ“ä‘€H@¢†^Fñ2 ,ÎÉ3—žI7`X9H4·º «Àֵ扥I†f®RI2‚yÉKÕk ©^MÀa@–Nƒ% DJÝ£9FFF˜”Óû„¢±“‰Göðµñ·¨Ç„Ø 9)¨H!Ež+x4˜ÏÑ¢Fgn¾’+I’Žýö½«¸yk–CG1¸÷ “¿‹µ[hcÉ[­žEÞ¶¼…9Áb€ÌáºÔ;#Ñ/ŠiÄDPÕ2øÒrcCݵ³#/róã[XÞ@¼à ×ì¾ÚM²J†IŽ#òUý º ’†3T•W_>ÁïFßçÕ—O¬  »¦Úéj˜é1ÛEËZ ¬¶ m\ÖI@ ß©ûÐñ#ºSKº-v³öÛõNÑz Hay‘JVEó岴̄ĿKÞº )^D:ÝÏ ˜ý'Š!AØ·ï+åZ?‹‚hÖ(4gn¶ýÑHMv ¡J/ËʒĹ$AŠ–¤0[ÀëúÌÑÊ æç—W1z‰ Ñ0••€‹²¢­—©k• èè/ug ÀÝì DÖJ0÷{lß¾Çv~‘[wæ1¬• ¦àb¶Ü—„º¬í—o#“€•Àáú_5`pû«gi´!„H¥’•lìøÂ3³ŸÒÎ=++-¶®bÊÌpjˆ€ëÁZÖ.”¼ÈÐÔp`¥Tœ[j5<½—?Orìùýåé¶ÕÙ¿o»ÿòºI¨I‰QÚ%¯ÚΛ>ÆFk‹™õµdÇj¬Sµžçígúæ ~ôWTmÃ*¸Ÿ`†ƒ¸^+b¹Ï£ÄVÞ§}7øZ ¢xxöÀ3,.¯07÷w~õ/eÎö[³™såƒë ?ˆªÌQD“(} Ä >o;|ÃCæ0Ö Þc!xO”È…w/süØ!ŠÜ£9zh_y÷ëÚºÁ7¿~ lDyTšAÉ£%€VÐ)]Œn~)xzroh#¾ƒº¼ð¼ÿá8¯|ëEÆ'&¹61Í‘çö®qüØþU90~;xÃe¹èÍÀŽÚ¥×>út°¨<è ÷æ#;ÇTå¹—N¾©( Kìyr‰ëS\x÷2uYW ñý CÀÊ…‹ý0:<žÚ]_x ~ƒ-¾ýÎ蚤v’´Ñt?yãõWƺœøÆ³ÝonœäÎgÊr®ôK€.Fæ—#Á£Gæ_úί3zùÔª•R‚Âç¥]ÚבÑ‹²ÁloþüW|ïµoEQÑäU™¸>Ž{÷6“€óçÏoþeôPWoŒ·ße øÙOôP{ý ÏSc;ðu IEND®B`‚fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/tab_netplay_2.png0000644000175000017500000000265612162366654025033 0ustar glaubitzglaubitz‰PNG  IHDR szzôsRGB®ÎébKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEÜ 9sŽwœ.IDATXÃÅWMhU=ßyi’×óÊÉ6ž"k/ö•K]tû¢«äÁ÷|à{"×¾ x‚ Á–-´ahc¡…ÒI¬Œ…ÒJ'ÿGÒlY–vÿüªþÑÃ.$ºxëÔ虾rçKÕž’‚@D”€¤1‘Òìòd™Á °eXvÍ2Øõ¶¥_Ž-/¬©KŸ{~( Cø„Ræ…žN_! D^ˆSBN2fN bYaÙ&m’h¶ÐÕA4Û°{]ú­¥L§ÎyyrÖ³[u–Ôô·Îüô†ÙÌt¥L)Uß­5,3L³ –ô. 0œü. –9KÅ=ÐJM¨•[@kër +"'½#кД@Ò3¬‹ „ _ˆuh k-¬u`9ÐÔtDMÏ4Oåm’@N f°ÍbË ¼¥4¬±Ð–3ÈINÔ£PP"Ûu”)yÕª€TÚXÄÚ6Áóe7=·„éÙëÁÕ  >·„é™ú{0P­€™1=×Àôl÷oÅö¾ž¶Ô0Ú'¨œŒR0Æ@) ) b¥K © b©1TñÙÛ‡0´»ŠX&ÿ íNÆ7¦ †‚*>çöý*¹?ë“f-<”¡ÖÆ"n‚Ä<–G†ôU:qx8Hþ“‡ÝØ‘á ›wÐLçÁ¥6nwl% 4”ÒMpéˆÜÊFÆêX\‘«#rãù±”ìÈØW$~¸<…X¥ ºE¥ R¦ÝZ'•Ò€›µž™°v~µóãóµŽ1€³£8;:îL˜UI>Žb ÓfBiÅ ;FVë^Ó-ïìâÞ«77-Ñ(JµnD«‘‚TÉÖJÔþßðjîºÜ¶õ¦/,ΑZz½Ha5Rй•gÐ58‡ÏY­¾.˜ÐO«`eM¹¥S&=åu¸ øjdJdPÚBÊVR«åÕ¥R©-խǪ»À·Y£™‚œ78ÙLÑ„k+×—+ûvîè'AyÙi“ç>nIGΔ"i0?¿)×& –ÆÏÑñ%3:;ËÝhƒ¿'¥’‡Õ­0Öà¯úRÛ$EXúg6jL}”Þå‡ahkµoÎ1è ¶ûß'á €Èlêlïy¶²­Ú%u ß^ÄÀ¶2¬µX¸]×Ìl¾`Ö +Sc'ç®|}ºIÀ=£1õÌéù«g.ùåí½[«Ý›!PÙuàE£Õñr¥·„žŠ79ÓÁriâ—÷Öf®›h!Šë nXÀÒO³Z­––€çÚ½øG{žÜß·çå~gyW¥¯¿Ëó},Íά¬Þ™~srä“/×8/|˜¸AvÇHµjµZÔ˜¼ø]cò·›޽f•~½»··ÃÛ²¥K”º÷ˆó ùË ‚àóA€ Ô×f—oýz…utA”†Œ±½D ;~j#œûúm†¡P_¼ùÓ·ãç>8ݹu Œw«£û¢@‹¼qíÚìòÄèe†ÿ{üÜÎ?ß·ëÍÿóªú§]IEND®B`‚fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/fsuae_config_16.png0000644000175000017500000000076212162366654025242 0ustar glaubitzglaubitz‰PNG  IHDRóÿasRGB®ÎébKGDÿÿÿ ½§“ pHYs  šœtIMEÜ 3%Ê| ¦rIDAT8Ë¥“Ï+ÃaÇ_Ïó|µÅ¾ÑÄ"q,)”V;IR;)ÅmR®Ò.↿ÀÅÕNî›ã"åWËIJÔhM|¿³•Ãú~·ÅVãSïËó<Ÿ÷çý|>ï .þ¦\ÑhÔ0 £¦L]× ƒº`š&~¿¿&‚x<€fhšV¢H „¨Jp‰¹ºB7Mn†‡ …Ã(¥¥•0x´EKÓ=ù³³…®»\ERÊŠ 2{«#núrÇ܆Vèè(»· ,Ie‘MãhØ%é#“k¤ráÇ»ª=H§fHz†èê<åíóMÓRbµ{`)(ÅKvŸûú{LO’ó‡)¼Þ”RH)m”)XÚIs’xå飉õµeêäÛϘómÛ ¿Ž@)ÅÖ|+Ý)ƒñçMNßÛÈõ|ÜÀéuVô=F wš„㘻L3©»Q¦}‹U Uö€€c„ËÞ‹Úœ‹Åþ´Žâ¿ëü `'_Â!2>²IEND®B`‚fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/not_important_button.png0000644000175000017500000000133012162366654026564 0ustar glaubitzglaubitz‰PNG  IHDRóÿaŸIDATxÚu“KH”a†ˆ¹4p#µpQ‚; „Šà"h‘+ݺKŠ0‚"ÄK¸qçBܹ©tÊb´HºêxAEaІPçÿç®sufþ3oï÷ICvYœ™9ßÞç{Ï™ó €sa©˜¹÷BÄþRÄg‰ñìݤH÷s‘«ÖŸKXp“‚øœH~½¨» ƒáf,Šü 4Çš‡”ýàÃ)k‹Åáª*ĺºCzj éž$ëê`òÙŒH–Î>(HðL¤ÁÆ[wXjoGÂëE&“m îñqär9dŽ@°¤BX_Øß&æ2YÞ¦&Äc1±Ø²,,õöÂÖЀ,Ï$N#ÚÝ /¢Æ¢“+ÂM„d¶‹‹v¹ÇU¡lŽŒ`º¹§§§ÈçóÚUâ𾚼ùNíc5¸³"Ç;µµ888P€‚ÝŽ¹Žœœœ$ ø;;±"Îíðcš4|mkC8F4E2™Ô·N'–ûû•Xç©T 1¶ãÆú "üÏÇæ˜¸[Z  .$ìñ`stTßL±>?d ^BW©a ûª…Û¯8UWe%ü~?B¡‚è›b,676´mæJ¬]zZ[ñQ8BnX½šè’jch¨‰D"ØçP·&'5¹>7æç±QZ 5tW(ˆs†›¶R^ŽÝ…ø|>¸Ì÷õ©Ötnª–êëñIÇÇE.þÚÂK„dÕ,Ëʰ=8co†aÀ4MßèäKu5œgÖ-¶~ãÜ*“x‹ŒƒN>óØI›«¼ÍÕØˆ¥Š -|Ë`ÅxòÏ—é©Èe‚mtcg!ÛÂ,ƒC>æÖ¥( pí¯ÿïmüýźF‹w(˜`¼&ô¿›é ôÏÚŸ&ßSÅ £IEND®B`‚fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/tab_floppies.png0000644000175000017500000000230712162366654024750 0ustar glaubitzglaubitz‰PNG  IHDR szzôsRGB®ÎébKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEÜ 8•Nm’GIDATXÃÅ—ÏoTUÅ?ß{ï{é™Ú‚M(¢V  —¸3FW.ØhpáMXH W®Ð¿ÀqGŒaე€µILˆ‰Ð¦$v°Ã{3sïýºxo¦SŠmM¹ÉÌÜy¿Î¹÷œó}÷Šªò ›á7×ÿçÍ·Þ8."ÇäNÞbþá·Ôùé3bðÄÛ91;;ûé*"òñö»’Z­ÆÏ/qô—ñq£4ðåÜ×LMí¡Ñh¤gÏ|ÿ °šŽÕj|{ú4ív‡Ë×iûÍ{$u¹›Ü˜›ã•ƒÒ{J ªœ;s†ý/àÈ«uFGÇ6M`iéoNŸ„KÎsð¥ÄïmBUEUùèØ±û`7უ‚꿈1¢1òãùsˆÈ`á~8{UVpw@µÞh.Òh.lŒ kPUŒ"P§^ß4t£±ˆˆªë(âˆPÌ‚1f€2ªq½ˆ…Ò½É Üˆ”Ðõ%°@ÌF$PEL!@}dœ­[·mxaa¾UÖ“ ›‚n é#‚®Eµ¸°Ë`pØp ´—‚f³ÉÜÜŸ›o6›ˆ˜R‚u Q‘‚J5åð»G \°¬z%éòQ]qlUÒÄ•&Œ3auhˆêÐÚO`E¿øêöµ Ù×ï-¶´wU!¬-Aa–¢íÙý${ŸšBU !c$†@ˆ‘"!b(FÕ=bàÊìU®^½†–æ«Õj Ž‚¬ãâr TaçÎ<3ý4“[H“”$II]ñkÁ÷<¨â\Bžg|þÅIZ ´Ú-æoÎ126†Æ š°«]«Ýfb|‚‹¿œçÆ ´²61FªÕ ‡^?D–edyF–Ý!MR†‡GØõÄn²,Ã{ ÃÕ*bÌFbûòZ0Èóc Ö:5˜™¹ÀÔÔ.Z­Þwð1F¬µXkA„,Ë‹ç½ã"‚¨¢k•âØ-D¥Ïò,ÇKâò<ï,Ës‚÷øð!à\R|lBŒ‘<ÏËç(ÖZœµE `í‰tK±¦o’¤ `Ê’šç9>Bð„àqÎa­Ã9‡ªâ½ï•_ë,Ö–ܵYE Ä@µRéÝ\€—öFeDȳ¼÷#W‚ÇWH)"8k±Ö•Þº)Z"èå™™_[““[¨V+ËŒ!q I’R­VHÓ„$IPÀ—£wÎá¬#jì½ýŒHéåJXb&""®¯X^ûí÷÷Z­ÎWÞûG§§Ÿu"†[·@„}{¦™>±¿Òͽg“ ï}á~`rbÕH½>Îä–IÆFƸ½tÀ·D ÓYà`¯sîµí;? l‹1òü ÏáœûÏõ¿ÝjsêÔ7+_Ž<c¾ !¼\ï0@x ØŒÝÇ}cæ ý3 e$‡€Êÿ°iíK€—þXÈ 7k4-ÿ掃wo;~IEND®B`‚fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/refresh_button.png0000644000175000017500000000131512162366654025330 0ustar glaubitzglaubitz‰PNG  IHDRóÿa”IDATxÚ¥’KOSAljºÐ…ntçV?;£ CB\覰…†\[ú.Ü´÷Õ[$ÄÚR‚qAx‰EE$•‡.T(‘)}€”’¶ü¹„S6&NòŸÉ™9ç7gΜ"ªX–=%y¹[™o–d>"É\”¬S’—!ËÂU±^,&vH’…Iâ®Ð5X„óôàåP?¢Ñud³Yäóyìïg‹m¢«»¼½YÆôôGè{ Ëî˯þ¾øM J§w‘J%HlÑ•ÚÊþêjtÄã1L ˆñjíçz«4†¿¥÷ïÁçoÂćq%ho/} Õó¥ÝÏ;qp'©þB{G+D™e±Äãn‹^~ž:ÓýÍÍ  HîC€Gæ·¶bJšoÞŽRò0-&=end)¼ˆÂA.®NÐôçÒé´òÖ¦GAª}í¨°.ž ÍÌNÑ€crÖÙT@2“ÙSÞÞÐèý#€Óå,&ŽóŽZ+ìN* l3¬v,6Ó!€]Ñd*A2HÁx ·›½NþUE,Wøôy;;Û˜œœ€“u5Ýš“ vÚæ°4­Û[L&ÓYP[k×´|H&ãØÝýήØìæQ‹ÃxÃng.šmÆ›f«1Ô?Їi¢Ö6?jÌwµ*€VÜb­ ööõ(…Ìd2XX˜‡ô‹cñ¤=€0ù‰|>GΓxú¬ Œ¡šQt2 uùõðÚ0¹\–ôÆYsÔ¦ûJvúêÊ9†aÎü PÄ0ºKÕŒ~Üx7>†…¯_°¾¾†EÒÞƒ}=´U½z½þõ/¨Òéu%•Uå=Z]ÅÌ]ùÑR…¶üA™¶¬”<÷D¡?þKÆ9çK¾/†åIEND®B`‚fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/warning_32.png0000644000175000017500000000325212162366654024252 0ustar glaubitzglaubitz‰PNG  IHDR szzôbKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEÝ)·`µ7IDATXõ—kŒWÇgæÌ¼óÎ{Yö¾ËÂ^Ø”Û.t«öCcÒò­i­Œb°„ªiÅ`ªXH ýPM‰hÓDcüdbâ%1š¿)±·MÚjv_ lÙ}ay/3s.~Øw—Åâe·Ë“´mì«bó’ÍËáæOøÉÅãØ¨„Q1©ž!Ð õcVkòƒ5 é¾aŒŠÐq…ê¹?¬}8%DðÃ%œý²vzqó­N\8Q1n}2׈5 E]F’K;`˜/ßˆ×ØQ1QáoX!…Û1tÿ»_-@[Žd×oKEcÇÐq£Ò½Ã`’šÇ4æ<êBt&ÜŠQ &‰(Ÿ=Jª{$­¬óÊ¢ÞÞ-òšû¶º~JÄWÞª¿µ ™ÉÍ ™tLSÞ§.ãÎéL„¤H54OSz÷O¨™÷-½§ŸýßÊŠW²} «çaT„ÑŠLïPM$ž+ë}²2êTÞ‡ò5ˆ¦Y1¸ cÆXJg_#ݳ%´Âù‡„ó?Þø¢xT¶öö:6"ž<‡Q1éUý¸)tâ[OCe’O}¬õ*©ÖÞ 3Ô c,$ÅËè[“ÈÖµÍ'ÏóùÿpH8ÖŠ#u]ëÃêØqt\Ūˆìšˆo@t’[ *ó³?œáí±I0³ÂØÛÞ°~á¥0JþJ¸j0Ž<ü÷íÂÿ'þɯyM›¨NOO “*™5÷ázrVÄêù]ž8S௾ÆÞ#G9}îÚ|~.º¾G㺭³](M“'ð[û³EÉÓw}JxÆq¿WßÑV §1? ß¿éÎÝÕDVåh­OÓÑ”¡»9}‡øÜ¼†¸Aˆ±P)¼EºeuÚHÿÛ¯?.r˜¹á<´tå¨\GUf08ä×mÁ‘.Ö¬5` ÔbSÞãÍŸ|’Ñ?A>”óù¹h­A¸ÍG08¨¸J<=AÐÖç«ÐÙÀ/··d¼Ð°º;Œ‹ðBðBÂö.Œ2­1Z£´šw­4Ž5`4Z)´š»7;OkÖ†lGø³õ¢âU¦¶@û¹¯ý~WK€Bˆßm÷Ÿ Û{C Và+(œeþŸÙ2?¶µ±]Ÿs—¼—_y{ŽIȶ¯ñªcïB<#mÍä2)k "\Áì‡~v…X Êq7˜Zw³µ3ˆ1?L{Z›‡)Y¸e u…Kºc`ë„ 8 ÛÄ‘9Aq—Î| có £b¦/ýC_Ñc€'{ø¸þésâúÈÍâ_:]á !÷Â,c”½rS¿xÒþh \ è Sn{>pƒ›]V`oVtTŽõUàp]Ô™ ¤ v}oZpûiTk®æÏ†Bç‹ÿ;„µÖZ±ÔãùrÙ¿4¬†‡8x~IEND®B`‚fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/tab_floppies_2.png0000644000175000017500000000230712162366654025171 0ustar glaubitzglaubitz‰PNG  IHDR szzôsRGB®ÎébKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEÜ 8•Nm’GIDATXÃÅ—ÏoTUÅ?ß{ï{é™Ú‚M(¢V  —¸3FW.ØhpáMXH W®Ð¿ÀqGŒaე€µILˆ‰Ð¦$v°Ã{3sïýºxo¦SŠmM¹ÉÌÜy¿Î¹÷œó}÷Šªò ›á7×ÿçÍ·Þ8."ÇäNÞbþá·Ôùé3bðÄÛ91;;ûé*"òñö»’Z­ÆÏ/qô—ñq£4ðåÜ×LMí¡Ñh¤gÏ|ÿ °šŽÕj|{ú4ív‡Ë×iûÍ{$u¹›Ü˜›ã•ƒÒ{J ªœ;s†ý/àÈ«uFGÇ6M`iéoNŸ„KÎsð¥ÄïmBUEUùèØ±û`7უ‚꿈1¢1òãùsˆÈ`á~8{UVpw@µÞh.Òh.lŒ kPUŒ"P§^ß4t£±ˆˆªë(âˆPÌ‚1f€2ªq½ˆ…Ò½É Üˆ”Ðõ%°@ÌF$PEL!@}dœ­[·mxaa¾UÖ“ ›‚n é#‚®Eµ¸°Ë`pØp ´—‚f³ÉÜÜŸ›o6›ˆ˜R‚u Q‘‚J5åð»G \°¬z%éòQ]qlUÒÄ•&Œ3auhˆêÐÚO`E¿øêöµ Ù×ï-¶´wU!¬-Aa–¢íÙý${ŸšBU !c$†@ˆ‘"!b(FÕ=bàÊìU®^½†–æ«Õj Ž‚¬ãâr TaçÎ<3ý4“[H“”$II]ñkÁ÷<¨â\Bžg|þÅIZ ´Ú-æoÎ126†Æ š°«]«Ýfb|‚‹¿œçÆ ´²61FªÕ ‡^?D–edyF–Ý!MR†‡GØõÄn²,Ã{ ÃÕ*bÌFbûòZ0Èóc Ö:5˜™¹ÀÔÔ.Z­Þwð1F¬µXkA„,Ë‹ç½ã"‚¨¢k•âØ-D¥Ïò,ÇKâò<ï,Ës‚÷øð!à\R|lBŒ‘<ÏËç(ÖZœµE `í‰tK±¦o’¤ `Ê’šç9>Bð„àqÎa­Ã9‡ªâ½ï•_ë,Ö–ܵYE Ä@µRéÝ\€—öFeDȳ¼÷#W‚ÇWH)"8k±Ö•Þº)Z"èå™™_[““[¨V+ËŒ!q I’R­VHÓ„$IPÀ—£wÎá¬#jì½ýŒHéåJXb&""®¯X^ûí÷÷Z­ÎWÞûG§§Ÿu"†[·@„}{¦™>±¿Òͽg“ ï}á~`rbÕH½>Îä–IÆFƸ½tÀ·D ÓYà`¯sîµí;? l‹1òü ÏáœûÏõ¿ÝjsêÔ7+_Ž<c¾ !¼\ï0@x ØŒÝÇ}cæ ý3 e$‡€Êÿ°iíK€—þXÈ 7k4-ÿ掃wo;~IEND®B`‚fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/tab_input.png0000644000175000017500000000245212162366654024267 0ustar glaubitzglaubitz‰PNG  IHDR szzôsRGB®ÎébKGDÿÿÿ ½§“ pHYs  šœtIMEÜ %!\ìvªIDATXÃÕVolSUÿÝ{ßkßëÖîÊX˜&ÃĉMT8ÆDHÌdŒf 1èGI Ù$€ŸHÀ.c¢ŒÄM…¢–¸ý"1 1AH‰‚DJ—®í^ÿ¬}÷?Pc–À6=ÉIÞ»ÉùsÏ9¿ß¹Œˆ0‘Â1Á¢='þ6ÿ3†Co–¶Z,4þm:“m[ß¼þØhlÙý¶ µuóӞ¢C•GŽ™W{Pêóáì³sRV¼ÁÚµïü<æ-Ð gÓË‹—ö9ù|ø'@Mu­Áu­i\f@Ú²nJi)#)Á«ª@R¢¬ÌË”Tuã5„:çà§š›Î!„é㊂Š7^ÇUMô•+ÇPÕÞŽ9ˆDzÿ_<ðßK ¡¡A0ÆØDV xYã²éFÅÁ`°·ÞWÿÄŠõ³‰TˆsôÛŒsT:êë9xð =¦ " î ~OÄdŒq ñ˜Px\¿òðäâ—û–/—eÔÕÕ¾õ¬±±q2É@CëѮ®¯ö; @ˆmo?¨ Üq¶´mZh8];²™Œ—ˆpD"Œ1œs¾æ­&d³Y躑H/Ün¶mš¦ÅHªUÍÍë¾¾c9‡CtÓÖMÞOvtZñxœ¤”¤”"¥I)‡ik›ŸÒé¥RI²m›®]»JápˆZZ7S4ÚG´oµZZZ¦‡ˆFn[suÔÔÔšîü|DŽǹÎNüÑÞŽðáà )sÆ J)!`YÖû¾¾„0Mjªk ‡):F=[¶øçy½å §–O㿬^#uuˆ8€óëÖá§%Kp¸¾>W9 ̘1g~?3ÄGϹn”—OE4ÅÌ™¢° pAkë»Õ÷L  3ϵ»úÅ…&ç¿øZ(„̾}ð¤ÓÈK$Ú¿Àõ¹I&S˜þÈ œ<õ+Nœ€ìÄwäJaHR.ð¿iáÆUŠSØIEND®B`‚fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/browse_button.png0000644000175000017500000000101512162366654025170 0ustar glaubitzglaubitz‰PNG  IHDRóÿasRGB®ÎébKGD÷š?Eµ') pHYs  šœtIMEÜ… ·IDAT8Ë¥’ÍjTA…¿®î˽3ÆøƒèB|q'.">€â¸Äñ)\ ®ÜúW®D‘¨;Á $D“!¹]U.î0É ¸Ø›C×Ï©êÓ'¸;ÿsÂÖ€‡.ñ‰K°£ŒÙìþÅ¡¿8‘`4ßgo?XQ° Vƒ¢“}¾xµ¯õÁõKCß\DÌéýƒm<Ÿó!Œw"–µ`cô(,ÏÛ¤ ìmÍbšá׮пyâÜ•›ÜÇ'c¶_>»•Ûï^£¹ÉÇÎý•UŠøç!sº~í1j€xfu@Ñ[žŠ§øî'üÛ:TÕbñb +¤ºvŠþüëÓù‚²{òÿ‰  )g F¨ºí Ó ²Aå©vЉlSD l¹A”† ÎÍ¥5Dê ©6RBÕà PçŸ jƒd"–­’ػѻƒ[ƒaŠØÌ@¸‚;õä±D¶õŸ×VNŸï4~u;V>kV°#’£=÷lïÛ»\Ž‘µZ¹ÚF‚"òE•;p¼íʳIEND®B`‚fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/res/ok_button.png0000644000175000017500000000166712162366654024315 0ustar glaubitzglaubitz‰PNG  IHDRóÿasRGB®Îé pHYs  šœtIMEÜíß=IIDAT8Ë]“[lTe…×þÏfÎ:"µíô‚B«1FJ½2 ±ÁhCKy€¨Á1šx4>Pc †„B „FIب4ú`¤RLKì…:šI¥¦--í´63gæÜþíƒiÜÉJöÃþ²÷ÎÊ"fF~Õ¤bh²µº¦×‚ |Ïít:mòÚ~›gn˜yQu‡åÖÝ_=8×?~֞˳§\ö•Çi;ÉLþ˜ÛõEÕlÝ'rS>ó|H¶µ^~ÃJ寏;y‚O½È{{Wð‡ýU|:ÑÈ©3œ¶“|¼óukc‹<¶À3£þ ¾}óÚÝmª_0Oýõ&8tƒ uA¥ž£Pf®ÆK•­ø!þ™Ý=ýå§G×'÷Ð3ûQRQvßµæçÚŸÇ^EZ Ò45èAM|pm;ëã©È›xºtöÅVñÌDzµAmÇæÇ_FObÚJ€4M H t‚”èM—7aCy3ZO”î€Ò~ADëŠÃeúÀÍ`ÁYò2Jdõ¿B`[éq¡¡èj–n…GYœ™}õwµ ÔxD´¨€(Àô éIAš1ŸMBy€rž|€ê;¶€ˆ`haì,ù Bh ¢EëÇ3W18Ûƒ9+eˆŒ“ºj»6 - ×a´ïØ՗·Mäõ@oò>îØ„Tz™ÜlPžßq+}Ý/ Þ ÇVÈe³8Ò¿#™ßn;™™qvx/Žt6¢ÈX‰Ä­¸ëû|Qx2ðMÏ`‡³jEìêÈe¬Œƒ] ¸>ßð”‹c}Ûñ]ïa׼ˢèºèýoµkçÝ©—šÁ@ ZUñ€ž˜¸å)x¾K‰¯Q¾l%Z¯¼‚ßG/C9W¬ÇÈÔßÖÐDì£ ïªvbfì~õ}=÷V®+þœ¡šhŒÈÄIEND®B`‚fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/FSUAE.py0000644000175000017500000000544612162366654022226 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import os import tempfile import subprocess import fs_uae_launcher.fs as fs class FSUAE: @classmethod def start_with_config(cls, config): print("FSUAE.start_with_config:") tf = tempfile.NamedTemporaryFile(suffix=".fs-uae", delete=False) config_file = tf.name with tf: for line in config: print(line) tf.write(line.encode("UTF-8")) tf.write("\n") args = [config_file] return cls.start_with_args(args), config_file @classmethod def start_with_args(cls, args, **kwargs): print("FSUAE.start_with_args:", args) exe = cls.find_executable() print("current dir (cwd): ", os.getcwdu()) print("using fs-uae executable:", exe) args = [exe] + args print(args) env = os.environ.copy() #env = None cls.center_window(env) #print(repr(env)) proc = subprocess.Popen(args, env=env, **kwargs) return proc @classmethod def center_window(cls, env): from .Config import Config from .Settings import Settings width = Config.get("window_width") or Settings.get("window_width") height = Config.get("window_height") or Settings.get("window_height") try: width = int(width) except: width = 960 try: height = int(height) except: height = 540 from .ui.MainWindow import MainWindow if MainWindow.instance is None: return main_w, main_h = MainWindow.instance.get_size() main_x, main_y = MainWindow.instance.get_position() x = main_x + (main_w - width) // 2 y = main_y + (main_h - height) // 2 if fs.windows: import wx y += wx.SystemSettings_GetMetric(wx.SYS_CAPTION_Y) env[str("SDL_VIDEO_WINDOW_POS")] = str("{0},{1}".format(x, y)) #print("window position", env["SDL_VIDEO_WINDOW_POS"]) #os.environ["SDL_VIDEO_WINDOW_POS"] = "{0},{1}".format(x, y) @classmethod def find_executable(cls): if os.path.isdir("launcher"): # may be running FS-UAE Launcher from source directory, we # then want to run the locally compiled fs-uae binary, if any for path in ["out/fs-uae", "./fs-uae"]: if fs.windows: path += ".exe" if os.path.isfile(path): return path if fs.windows: exe = "../FS-UAE.exe" elif fs.macosx: exe = "../../../FS-UAE.app/Contents/MacOS/fs-uae" else: exe = "fs-uae" return exe fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/I18N.py0000644000175000017500000000563312162366654022040 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import os import sys import locale import gettext #if (fs_config_get_boolean("localization") == 0) { # fs_log("localization was forced off\n"); # return; #} translations = gettext.NullTranslations() #language = "" def initialize_locale(language=""): global translations loc = language if not loc: try: loc, _charset = locale.getdefaultlocale() print("locale is", loc) except: print("exception while checking locale") loc = "" if not loc: loc = "" if not loc and sys.platform == 'darwin': import wx mac_locales = { wx.LANGUAGE_CZECH: "cs", wx.LANGUAGE_DANISH: "da", wx.LANGUAGE_ENGLISH: "en", wx.LANGUAGE_ENGLISH_UK: "en_GB", wx.LANGUAGE_ENGLISH_US: "en_US", wx.LANGUAGE_FINNISH: "fi", wx.LANGUAGE_FRENCH: "fr", wx.LANGUAGE_GERMAN: "de", wx.LANGUAGE_HUNGARIAN: "hu", wx.LANGUAGE_ITALIAN: "it", wx.LANGUAGE_NORWEGIAN_NYNORSK: "nn", wx.LANGUAGE_NORWEGIAN_BOKMAL: "nb", wx.LANGUAGE_POLISH: "pl", wx.LANGUAGE_PORTUGUESE: "pt", wx.LANGUAGE_RUSSIAN: "ru", wx.LANGUAGE_SERBIAN: "sr", wx.LANGUAGE_SPANISH: "es", wx.LANGUAGE_SWEDISH: "sv", wx.LANGUAGE_SWEDISH_FINLAND: "sv_FI" } try: loc = mac_locales[wx.Locale.GetSystemLanguage()] except: print("no mapping for wx locale value") print("mac locale", loc) dirs = [os.path.join(os.getcwdu(), "launcher", "share"), os.path.join(os.getcwdu(), "share"), os.getcwdu(), "/usr/local/share", "/usr/share"] locale_base = None for dir in dirs: if not os.path.exists(os.path.join(dir, "fs-uae-launcher", "share-dir")): continue locale_base = os.path.join(dir, "locale") print("bindtextdomain fs-uae-launcher:", locale_base) gettext.bindtextdomain("fs-uae-launcher", locale_base) break mo_path = None if locale_base: try: mo_path = gettext.find("fs-uae-launcher", locale_base, [loc]) except Exception: # a bug in openSUSE 12.2's gettext.py can cause an exception # in gettext.find (checking len of None). pass print("path to mo file:", mo_path) translations = gettext.translation("fs-uae-launcher", locale_base, [loc], fallback=True) print(translations) #_ = translations.ugettext #ngettext = translations.ungettext def _(msg): return translations.ugettext(msg) def ngettext(n, msg1, msg2): return translations.ungettext(n, msg1, msg2) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/Scanner.py0000644000175000017500000000770712162366654022756 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import time import threading import traceback import fs_uae_launcher.fsui as fsui from .Database import Database from .FileScanner import FileScanner from .ConfigurationScanner import ConfigurationScanner from .Config import Config from .Settings import Settings from .Signal import Signal from .I18N import _, ngettext from .fsgs.GameDatabase import GameDatabase from .fsgs.GameDatabaseClient import GameDatabaseClient from .OverlayDatabase import OverlayDatabase from .fsgs.GameDatabaseSynchronizer import GameDatabaseSynchronizer from .GameRatingSynchronizer import GameRatingSynchronizer class Scanner: #listeners = [] #@classmethod #def add_listener(cls, listener): # cls.listeners.append(listener) #@classmethod #def remove_listener(cls, listener): # cls.listeners.append(listener) running = False stop_flag = False status = ("", "") error = "" @classmethod def stop_check(cls): return cls.stop_flag @classmethod def scan_thread(cls): try: cls._scan_thread() except Exception, e: cls.error = unicode(e) traceback.print_exc() def on_done(): # FIXME: these should be removed soon Settings.set("last_scan", str(time.time())) Settings.set("config_refresh", str(time.time())) # this must be called from main, since callbacks are broadcast # when settings are changed Signal.broadcast("scan_done") Config.update_kickstart() # call on_done from main thread fsui.call_after(on_done) cls.running = False @classmethod def _scan_thread(cls): database = Database() if cls.update_game_database: game_database = GameDatabase.get_instance() game_database_client = GameDatabaseClient(game_database) synchronizer = GameDatabaseSynchronizer(game_database_client, on_status=cls.on_status, stop_check=cls.stop_check) synchronizer.username = Settings.get("database_username") synchronizer.password = Settings.get("database_password") synchronizer.synchronize() synchronizer = GameRatingSynchronizer(database, on_status=cls.on_status, stop_check=cls.stop_check) synchronizer.username = Settings.get("database_username") synchronizer.password = Settings.get("database_password") synchronizer.synchronize() else: game_database = None if cls.scan_for_roms or cls.scan_for_files or cls.scan_for_configs: scanner = FileScanner(cls.paths, cls.scan_for_roms, cls.scan_for_files, cls.scan_for_configs, on_status=cls.on_status, stop_check=cls.stop_check) scanner.scan() if cls.stop_check(): return if cls.scan_for_configs or cls.update_game_database: scanner = ConfigurationScanner(cls.paths, on_status=cls.on_status, stop_check=cls.stop_check) scanner.scan(database, game_database) @classmethod def start(cls, paths, scan_for_roms, scan_for_files, scan_for_configs, update_game_database=False): print("Scanner.start") if cls.running: print("scan already in progress") return cls.paths = paths[:] cls.running = True cls.error = "" cls.stop_flag = False cls.status = ("", "") cls.scan_for_roms = scan_for_roms cls.scan_for_files = scan_for_files cls.scan_for_configs = scan_for_configs cls.update_game_database = update_game_database threading.Thread(target=cls.scan_thread).start() @classmethod def on_status(cls, status): cls.status = status fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/GameHandler.py0000644000175000017500000002107112162366654023522 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import os import fs_uae_launcher.fsui as fsui from .ui.Constants import Constants from .Config import Config from .Paths import Paths from .Settings import Settings class GameHandler: @staticmethod def current(): model = Config.get("amiga_model") if model.startswith("CD32"): platform = "CD32" elif model == "CDTV": platform = "CDTV" else: platform = "Amiga" name = Settings.get("config_name") uuid = Config.get("x_game_uuid") return GameHandler(name, platform, uuid) def __init__(self, name, platform, uuid): self.uuid = uuid self.config_name = name if "(" in name: parts = name.split("(", 1) self.name, self.variant = parts self.name = self.name.strip() self.variant = self.variant.strip() if self.variant.endswith(u")"): self.variant = self.variant[:-1] self.variant = self.variant.replace(") (", ", ") self.variant = self.variant.replace(")(", ", ") else: self.name = name self.variant = "" self.platform = platform def get_name(self): return self.name def get_variant(self): return self.variant def get_override_path(self, name): path = Config.get(name) if not path: return "" path = Paths.expand_path(path) return path def get_screenshot_path(self, number): if number == 0: sha1 = Config.get("title_sha1") else: sha1 = Config.get("screen{0}_sha1".format(number)) if sha1: return "sha1:" + sha1 if number == 0: path = self.get_override_path("title_image") else: path = self.get_override_path("screen{0}_image".format(number)) if path and os.path.exists(path): return path if self.uuid: if number == 0: name = "title.png" else: name = "screen{0}.png".format(number) paths = Settings.get_images_dirs() for dir in paths: p = os.path.join(dir, self.platform, u"Images", self.uuid[:2], self.uuid, name) if os.path.exists(p): return p p = os.path.join(dir, self.platform, u"Thumbnails", self.uuid[:2], self.uuid, name) if os.path.exists(p): return p letter = self.get_letter(self.name) if not letter: return None name = self.name if number == 0: override_dir = Config.get("titles_dir") if override_dir: paths = [Paths.expand_path(override_dir)] else: paths = Settings.get_titles_dirs() else: override_dir = Config.get("screenshots_dir") if override_dir: paths = [Paths.expand_path(override_dir)] else: paths = Settings.get_screenshots_dirs() if number >= 2: name = u"{0}_{1}".format(name, number) for dir in paths: path = os.path.join(dir, letter, name + u".png") if os.path.exists(path): return path path = os.path.join(dir, letter, name + u".gif") if os.path.exists(path): return path path = os.path.join(dir, name + u".png") if os.path.exists(path): return path path = os.path.join(dir, letter, name + u".gif") if os.path.exists(path): return path return None def load_screenshot(self, number): path = self.get_screenshot_path(number) if path: return fsui.Image(path) def load_screenshot_preview(self, number): image = self.load_screenshot(number) if image is None: return image if image.size == Constants.SCREEN_SIZE: return image if image.size[0] < 400: image.resize((image.size[0] * 2, image.size[1] * 2), fsui.Image.NEAREST) image.resize(Constants.SCREEN_SIZE) return image def get_cover_path(self): sha1 = Config.get("front_sha1") if sha1: return "sha1:" + sha1 path = self.get_override_path("cover_image") if path and os.path.exists(path): return path if self.uuid: paths = Settings.get_images_dirs() for dir in paths: p = os.path.join(dir, self.platform, u"Images", self.uuid[:2], self.uuid, u"front.png") if os.path.exists(p): return p p = os.path.join(dir, self.platform, u"Thumbnails", self.uuid[:2], self.uuid, u"front.png") if os.path.exists(p): return p letter = self.get_letter(self.name) if not letter: return None name = self.name override_dir = Config.get("covers_dir") if override_dir: paths = [Paths.expand_path(override_dir)] else: paths = Settings.get_covers_dirs() for dir in paths: path = os.path.join(dir, letter, name + u".jpg") if os.path.exists(path): return path path = os.path.join(dir, letter, name + u".png") if os.path.exists(path): return path path = os.path.join(dir, name + u".jpg") if os.path.exists(path): return path path = os.path.join(dir, name + u".png") if os.path.exists(path): return path return None def load_cover(self): path = self.get_cover_path() print(path) if path: return fsui.Image(path) def load_cover_preview(self): image = self.load_cover() if image is None: return image image.resize(Constants.COVER_SIZE) return image def get_theme_path(self): letter = self.get_letter(self.name) if not letter: return None paths = Settings.get_themes_dirs() for dir in paths: path = os.path.join(dir, letter, self.name) if os.path.exists(path): return path return None def _get_state_dir(self): config_name = self.config_name if not config_name: config_name = "Default" # use a temporary state dir, for now, to avoid problems with # floppy overlays etc interfering with net play from .netplay.Netplay import Netplay if Netplay.enabled: # it is possible to manually specify the state dir config_name = Config.get("__netplay_state_dir_name") if not config_name: # this is the default behavior, create a clean state # dir for the net play session netplay_game = Config.get("__netplay_game") if netplay_game: config_name = "Net Play ({0})".format(netplay_game) letter = self.get_letter(config_name) if not letter: config_name = "Default" letter = self.get_letter(config_name) # we use an existing state dir in a "letter" dir if it exists # (legacy support). path = os.path.join(Settings.get_save_states_dir(), letter, config_name) if os.path.exists(path): return path # if not, we use a direct subfolder of save states dir path = os.path.join(Settings.get_save_states_dir(), config_name) return path def get_state_dir(self): state_dir = self._get_state_dir() if not os.path.exists(state_dir): os.makedirs(state_dir) return state_dir @staticmethod def get_letter(name): letter_name = name.upper() if letter_name.startswith("THE "): letter_name = letter_name[4:] if letter_name.startswith("A "): letter_name = letter_name[2:] for i in range(len(letter_name)): letter = letter_name[i] if letter in "01234567890": letter = "0" break if letter in "ABCDEFGHIJKLMNOPQRSTUVWXYZ": break else: return None return letter fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/Signal.py0000644000175000017500000000226012162366654022567 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import thread import fs_uae_launcher.fsui as fsui main_thread_id = thread.get_ident() class Signal: listeners = {} @classmethod def add_listener(cls, signal, listener): cls.listeners.setdefault(signal, []).append(listener) @classmethod def remove_listener(cls, signal, listener): cls.listeners[signal].remove(listener) @classmethod def broadcast(cls, signal, *args): if thread.get_ident() == main_thread_id: cls.do_broadcast(signal, *args) else: def function(): cls.do_broadcast(signal, *args) fsui.call_after(function) @classmethod def do_broadcast(cls, signal, *args): print("broadcasting signal", signal) for listener in cls.listeners.setdefault(signal, []): if signal == "config": listener.on_config(*args) elif signal == "setting": listener.on_setting(*args) else: getattr(listener, "on_" + signal + "_signal")(*args) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/Paths.py0000644000175000017500000001023312162366654022430 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import os import fs_uae_launcher.fs as fs from .Archive import Archive from .Settings import Settings class Paths: @classmethod def join(cls, a, b): #if not a: # return b #if a[-1] == "/" or a[-1] == "\\": # return a + b #return a + "/" + b return os.path.join(a, b).replace("\\", "/") @classmethod def expand_path(cls, path, default_dir=None): if path and path[0] == "$": cmp_path = path.upper().replace("\\", "/") if cmp_path.startswith("$BASE/"): return cls.join(cls.get_base_dir(), path[6:]) if cmp_path.startswith("$CONFIG/"): config_path = Settings.get("config_path") if config_path: return cls.join(os.path.dirname(config_path), path[8:]) if cmp_path.startswith("$HOME/"): return cls.join(cls.get_home_dir(), path[6:]) # FIXME: $base_dir is deprecated if cmp_path.startswith("$BASE_DIR/"): return cls.join(Settings.get_base_dir(), path[10:]) elif not os.path.isabs(path) and default_dir is not None: return os.path.join(default_dir, path) return path @classmethod def contract_path(cls, path, default_dir=None, force_real_case=True): if force_real_case: print("before", path) path = cls.get_real_case(path) print("after", path) #dir, file = os.path.split(path) #norm_dir = dir + "/" if default_dir is not None: default_dir = default_dir + "/" if path.startswith(default_dir): return path[len(default_dir):] base_dir = cls.get_base_dir(slash=True) if path.startswith(base_dir): path = path.replace(base_dir, "$BASE/") home_dir = cls.get_home_dir(slash=True) if path.startswith(home_dir): path = path.replace(home_dir, "$HOME/") return path @classmethod @fs.memoize def get_base_dir(cls, slash=False): path = Settings.get_base_dir() if slash: path = path + "/" return path @classmethod @fs.memoize def get_home_dir(cls, slash=False): path = fs.get_home_dir() path = cls.get_real_case(path) if slash: path = path + "/" return path @classmethod def get_real_case(cls, path): """Check the case for the (case insensitive) path. Used to make the database portable across sensitive/insensitive file systems.""" # not really needed on Linux parts = [] drive, p = os.path.splitdrive(path) if path.startswith("/"): drive = "/" elif drive: # on Windows, add / to make drive a valid path drive = drive + "/" last = "" while p != last: name = os.path.basename(p)#.lower() if not name: break #parts.append(os.path.basename(p).lower()) parts.append(name) last = p p = os.path.dirname(p) parts.reverse() #print(drive, parts) result = [drive] result.extend(parts) combined = drive combined = combined.upper() k = 1 for part in parts: #print("part is", part) if os.path.isdir(combined): #print("checking case of", combined+ "/" + part) for name in os.listdir(combined): if name.lower() == part.lower(): #print("found case =", name) combined += "/" + name result[k] = name break else: raise Exception("could not find case for path " + path) k += 1 # normalizing slashes to forward slash to make the database more # portable result_path = os.path.join(*result).replace("\\", "/") return result_path fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/0000755000175000017500000000000012162366654021415 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/ScanProgressGroup.py0000644000175000017500000000512612162366654025421 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import os import traceback import fs_uae_launcher.fsui as fsui from ..Settings import Settings from ..I18N import _, ngettext class ScanProgressGroup(fsui.Group): def __init__(self, parent): fsui.Group.__init__(self, parent) self.layout = fsui.HorizontalLayout() self.layout.padding_left = 10 self.layout.padding_top = 10 self.layout.padding_right = 10 self.layout.padding_bottom = 10 #image = fsui.Image("fs_uae_launcher:res/search_group.png") #self.image_view = fsui.ImageView(self, image) self.layout.add_spacer(20) #self.layout.add(self.image_view, valign=0.0) self.layout.add_spacer(48) self.layout.add_spacer(20) self.layout2 = fsui.VerticalLayout() self.layout.add(self.layout2, fill=True, expand=True) self.title_label = fsui.HeadingLabel(self, "") self.layout2.add(self.title_label) #self.layout2.add_spacer(10) #hor_layout = fsui.HorizontalLayout() #self.layout2.add(hor_layout) #self.scan_label = fsui.Label(self, _("Scan for:")) #hor_layout.add(self.scan_label) #hor_layout.add_spacer(10) #self.scan_roms = fsui.CheckBox(self, _("ROMs")) #if Settings.get("scan_roms") == "1": # self.scan_roms.check() #self.scan_roms.on_change = self.on_change #hor_layout.add(self.scan_roms) #hor_layout.add_spacer(10) #self.scan_files = fsui.CheckBox(self, _("Game Files")) #if Settings.get("scan_files") == "1": # self.scan_files.check() #self.scan_files.on_change = self.on_change #hor_layout.add(self.scan_files) #hor_layout.add_spacer(10) #self.scan_configs = fsui.CheckBox(self, _("Configurations")) #if Settings.get("scan_configs") == "1": # self.scan_configs.check() #self.scan_configs.on_change = self.on_change #hor_layout.add(self.scan_configs) #hor_layout.add_spacer(10) self.layout2.add_spacer(10) self.status_label = fsui.Label(self, "") self.layout2.add(self.status_label) #def on_change(self): # value = "1" if self.scan_roms.is_checked() else "0" # Settings.set("scan_roms", value) # value = "1" if self.scan_files.is_checked() else "0" # Settings.set("scan_files", value) # value = "1" if self.scan_configs.is_checked() else "0" # Settings.set("scan_configs", value) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/FloppiesGroup.py0000644000175000017500000000437512162366654024576 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import os import fs_uae_launcher.fsui as fsui from ..Config import Config from ..CDManager import CDManager from ..FloppyManager import FloppyManager from ..Settings import Settings from ..I18N import _, ngettext from .FloppySelector import FloppySelector class FloppiesGroup(fsui.Group): def __init__(self, parent, drives=2, cd_mode=False): fsui.Group.__init__(self, parent) self.layout = fsui.VerticalLayout() self.cd_mode = cd_mode self.num_drives = drives hori_layout = fsui.HorizontalLayout() self.layout.add(hori_layout, fill=True) if cd_mode: self.label = fsui.HeadingLabel(self, _("CD-ROM Drive")) else: self.label = fsui.HeadingLabel(self, _("Floppy Drives")) hori_layout.add(self.label, margin=10) hori_layout.add_spacer(0, expand=True) self.multi_select_button = fsui.Button(self, _("Select Multiple Files...")) if self.cd_mode: self.multi_select_button.set_tooltip( _("Add Multiple CD-ROMs at Once")) else: self.multi_select_button.set_tooltip( _("Add Multiple Floppies at Once")) self.multi_select_button.on_activate = self.on_multi_select_button hori_layout.add(self.multi_select_button, margin_right=10) self.layout.add_spacer(0) self.selectors = [] for i in range(drives): selector = FloppySelector(parent, i) if cd_mode: selector.set_cd_mode(True) self.selectors.append(selector) self.layout.add(selector, fill=True, margin=10) def on_multi_select_button(self): if self.cd_mode: CDManager.multiselect(self.get_window()) else: FloppyManager.multiselect(self.get_window()) def update_heading_label(self): if self.cd_mode: if self.num_drives > 1: self.label.set_text(_("CD-ROM Drives")) else: self.label.set_text(_("CD-ROM Drive")) else: self.label.set_text(_("Floppy Drives")) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/ScreenshotsPanel.py0000644000175000017500000000744612162366654025262 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import os import time import traceback import fs_uae_launcher.fsui as fsui from ..Config import Config from ..Settings import Settings from ..Database import Database from ..GameHandler import GameHandler from .BottomPanel import BottomPanel from .Constants import Constants from .ImageLoader import ImageLoader from .Skin import Skin BORDER = 20 class ScreenshotsPanel(BottomPanel): def __init__(self, parent): BottomPanel.__init__(self, parent) Skin.set_background_color(self) self.layout = fsui.HorizontalLayout() def get_min_width(): return 0 #def get_min_height(): # return Constants.SCREEN_SIZE[1] + 2 * BORDER self.layout.get_min_width = get_min_width #self.layout.get_min_height = get_min_height self.layout.padding_left = BORDER // 2 self.layout.padding_right = BORDER // 2 self.layout.padding_top = BORDER + 2 self.layout.padding_bottom = Skin.get_bottom_margin() self.default_image = fsui.Image("fs_uae_launcher:res/screenshot.png") #self.default_image.resize(Constants.SCREEN_SIZE) self.screenshot_overlay = fsui.Image( "fs_uae_launcher:res/screenshot_overlay.png") self.images = [self.default_image for x in range(6)] self.requests = [None for x in range(6)] self.x_offset = 0 if Settings.get("config_base"): self.load_images(Settings.get("config_base")) Settings.add_listener(self) def on_destroy(self): Settings.remove_listener(self) def set_min_screenshots(self, count): #w = SCREEN_SIZE[0] * count + BORDER * 2 + (BORDER + 1) * (count - 1) w = Constants.SCREEN_SIZE[0] * count + BORDER * 2 + (BORDER) * (count - 1) self.set_min_width(w) def load_images(self, name): #t1 = time.time() handler = GameHandler.current() for i in range(6): path = handler.get_screenshot_path(i) loader = ImageLoader.get() def on_load(request): #print("on_load, request.image =", request.image) if request.image: self.images[request.args["index"]] = request.image else: self.images[request.args["index"]] = self.default_image self.refresh() self.requests[i] = loader.load_image(path, size=Constants.SCREEN_SIZE, on_load=on_load, index=i) self.images[i] = self.default_image self.refresh() #image = handler.load_screenshot_preview(i) #if image: # self.images[i] = image # self.refresh() #else: # self.images[i] = self.default_image # self.refresh() #t2 = time.time() #print(t2 - t1) def on_setting(self, key, value): if key == "config_name": self.x_offset = 0 self.load_images(value) def on_left_down(self): #print("on_left_down") width = 10 + Constants.SCREEN_SIZE[0] * 6 + 20 * 5 + 22 if self.x_offset == 0: self.x_offset = self.size[0] - width else: self.x_offset = 0 self.refresh() def on_paint(self): dc = self.create_dc() self.draw_background(dc) size = self.size y = 2 + 20 x = 10 + self.x_offset for i in range(6): if x >= size[0] - 12: break image = self.images[i] dc.draw_image(image, x + 1, y + 1) dc.draw_image(self.screenshot_overlay, x - 10, y - 10) x = x + Constants.SCREEN_SIZE[0] + 20 fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/LauncherFileDialog.py0000644000175000017500000000435012162366654025452 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import os import fs_uae_launcher.fsui as fsui from ..Settings import Settings from ..I18N import _, ngettext from .Skin import Skin class LauncherFileDialog(fsui.FileDialog): def __init__(self, parent, title, type, last_path="", multiple=False, dir_mode=False): self.dir_mode = dir_mode self.settings_key = "last_{0}_dir".format(type) directory = "" if last_path and last_path not in ["internal"]: print("last_path", repr(last_path)) #if os.path.isdir(last_path): # last_path_dir = last_path #else: last_path_dir = os.path.dirname(last_path) print("last_path_dir", last_path_dir) if last_path_dir: if os.path.exists(last_path_dir): directory = last_path_dir else: # file was relative to default directory directory = self.get_default_directory(type) if not directory: value = Settings.get(self.settings_key) print(self.settings_key, value) if value and os.path.exists(value): directory = value if not directory: directory = self.get_default_directory(type) fsui.FileDialog.__init__(self, parent, title, directory, dir_mode=dir_mode, multiple=multiple) def get_default_directory(self, type): if type == "floppy": return Settings.get_floppies_dir() elif type == "cd": return Settings.get_cdroms_dir() elif type == "hd": return Settings.get_hard_drives_dir() elif type == "rom": return Settings.get_kickstarts_dir() raise Exception("unknown file dialog type") def show_modal(self): if fsui.FileDialog.show_modal(self): path = self.get_path() #if os.path.isdir(path): # last_path_dir = path #lse: last_path_dir = os.path.dirname(path) Settings.set(self.settings_key, last_path_dir) return True return False fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/config/0000755000175000017500000000000012162366654022662 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/config/InputSelector.py0000644000175000017500000002142512162366654026040 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import os import webbrowser import fs_uae_launcher.fsui as fsui from ...Config import Config from ...DeviceManager import DeviceManager from ...I18N import _, ngettext from ...Signal import Signal from ..IconButton import IconButton from ..HelpButton import HelpButton class InputSelector(fsui.Group): def __init__(self, parent, port): #global joystick_values_initialized self.port = port self.device_option_key = "joystick_port_{0}".format(port) self.mode_option_key = "joystick_port_{0}_mode".format(port) self.autofire_mode_option_key = "joystick_port_{0}_autofire".format( port) fsui.Group.__init__(self, parent) self.layout = fsui.HorizontalLayout() self.joystick_mode_values = ["nothing", "mouse", "joystick", "cd32 gamepad"] self.joystick_mode_titles = [_("Nothing"), _("Mouse"), _("Joystick"), _("CD32 Pad")] self.mode_choice = fsui.Choice(self, self.joystick_mode_titles) self.layout.add(self.mode_choice) self.layout.add_spacer(10) #else: # self.mode_choice = None if port >= 4: self.mode_choice.disable() #devices = ["", _("No Host Device"), _("Mouse"), # _("Cursor Keys and Right Ctrl/Alt")] #for i, name in enumerate(DeviceManager.get_joystick_names()): # devices.append(name) # if not self.joystick_values_initialized: # self.joystick_values.append(DeviceManager.device_ids[i]) #self.joystick_values_initialized = True self.device_choice = fsui.ComboBox(self, [""], read_only=True) self.rebuild_device_list() self.device_choice.set_index(0) #print(self.device_choice.get_index()) self.layout.add(self.device_choice, expand=True) if port < 4: self.autofire_button = IconButton(self, "autofire_off_16.png") self.autofire_button.on_activate = self.on_autofire_button self.layout.add(self.autofire_button, margin_left=10) else: self.autofire_button = None self.help_button = HelpButton(self, "http://fengestad.no/fs-uae/custom-joystick-port") self.layout.add(self.help_button, margin_left=10) self.initialize_from_config() self.set_config_handlers() def rebuild_device_list(self): #self.device_choice.set_items([""]) #self.device_choice.set_text("") self.joystick_values = ["", "none", "mouse", "keyboard"] devices = ["", _("No Host Device"), _("Mouse"), _("Cursor Keys and Right Ctrl/Alt")] for i, name in enumerate(DeviceManager.get_joystick_names()): devices.append(name) self.joystick_values.append(DeviceManager.device_ids[i]) self.device_choice.set_items(devices) def initialize_from_config(self): self.on_config(self.device_option_key, Config.get(self.device_option_key)) self.on_config(self.mode_option_key, Config.get(self.mode_option_key)) self.on_config(self.autofire_mode_option_key, Config.get(self.autofire_mode_option_key)) def set_config_handlers(self): if self.mode_choice is not None: self.mode_choice.on_change = self.on_mode_change self.device_choice.on_change = self.on_device_change Config.add_listener(self) Signal.add_listener("settings_updated", self) Signal.add_listener("device_list_updated", self) def on_destroy(self): print("on_destroy") Config.remove_listener(self) Signal.remove_listener("settings_updated", self) def on_mode_change(self): if self.mode_choice is not None: index = self.mode_choice.get_index() value = self.joystick_mode_values[index] self.set_value_or_default(value) def set_value_or_default(self, value): if self.port == 0: if value == "mouse": value = "" elif self.port == 1: if Config.get("amiga_model").startswith("CD32"): default = "cd32 gamepad" else: default = "joystick" if value == default: value = "" else: if value == "nothing": value == "" if Config.get(self.mode_option_key) != value: Config.set(self.mode_option_key, value) def on_device_change(self): index = self.device_choice.get_index() value = self.joystick_values[index] for port in range(4): if self.port == port: continue key = "joystick_port_{0}".format(port) if Config.get(key) == value: Config.set(key, "") Config.set(self.device_option_key, value) def on_autofire_button(self): if Config.get(self.autofire_mode_option_key) == "1": Config.set(self.autofire_mode_option_key, "") else: Config.set(self.autofire_mode_option_key, "1") def get_calculated_mode(self, port): value = Config.get("joystick_port_{0}_mode".format(port)) if not value: if port == 0: return "mouse" elif port == 1: if Config.get("amiga_model").startswith("CD32"): return "cd32 gamepad" else: return "joystick" return "nothing" return value def on_config(self, key, value): if key == "amiga_model": value = Config.get("joystick_port_{0}_mode".format(self.port)) self.set_value_or_default(value) if key == self.mode_option_key or key == "amiga_model": value = self.get_calculated_mode(self.port) for i, config in enumerate(self.joystick_mode_values): if config == value: if self.mode_choice is not None: self.mode_choice.set_index(i) if self.port >= 4: self.device_choice.enable(i != 0) break else: print("FIXME: could not set mode") elif key == self.device_option_key or key == "amiga_model": #print(self.joystick_values) value_lower = value.lower() for i, name in enumerate(self.joystick_values): if value_lower == name.lower(): self.device_choice.set_index(i) break elif key == self.autofire_mode_option_key: if self.autofire_button is not None: if value == "1": self.autofire_button.set_tooltip(_("Auto-Fire is On")) self.autofire_button.set_icon_name("autofire_on_16.png") else: self.autofire_button.set_tooltip(_("Auto-Fire is Off")) self.autofire_button.set_icon_name("autofire_off_16.png") # this is intended to catch all config changes for all ports (both # mode and device) to update the defaults if key.startswith("joystick_port_") or key == "amiga_model": self.update_default_device() def on_device_list_updated_signal(self): #print(self.device_choice.get_index()) had_default = (self.device_choice.get_index() == 0) self.rebuild_device_list() self.update_default_device(had_default=had_default) def on_settings_updated_signal(self): self.update_default_device() def update_default_device(self, had_default=None): config = {} for port in range(4): key = "joystick_port_{0}".format(port) if self.port == port: config[key] = "" else: config[key] = Config.get(key) key = "joystick_port_{0}_mode".format(port) config[key] = self.get_calculated_mode(port) device = DeviceManager.get_device_for_port(config, self.port) default_description = _("Default ({0})").format(device.name) #print("default_description = ", default_description) if had_default is None: had_default = (self.device_choice.get_index() == 0) #print("had default", had_default, self.device_choice.get_index()) self.device_choice.set_item_text(0, default_description) #print("had_default", had_default) if had_default: #print("set text for", self.port, default_description) #self.device_choice.set_index(1) self.device_choice.set_text(default_description) self.device_choice.set_index(0) #print(self.device_choice.get_index()) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/config/ExpansionsGroup.py0000644000175000017500000000350512162366654026403 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import os import fs_uae_launcher.fsui as fsui from ...I18N import _, ngettext from .ConfigCheckBox import ConfigCheckBox from ..HelpButton import HelpButton class ExpansionsGroup(fsui.Group): def __init__(self, parent): fsui.Group.__init__(self, parent) self.layout = fsui.VerticalLayout() heading_label = fsui.HeadingLabel(self, _("Expansions")) self.layout.add(heading_label, margin=10) self.layout.add_spacer(0) hori_layout = fsui.HorizontalLayout() self.layout.add(hori_layout, fill=True) vert_layout = fsui.VerticalLayout() hori_layout.add(vert_layout, fill=True, expand=True) hor2_layout = fsui.HorizontalLayout() widget = ConfigCheckBox(self, _("Picasso96 Support"), "uaegfx_card") widget.set_tooltip(_("Picasso96 Support (uaegfx.card)")) hor2_layout.add(widget, expand=True) widget = HelpButton(self, "http://fengestad.no/fs-uae/options#uaegfx-card") hor2_layout.add(widget, margin_left=10) vert_layout.add(hor2_layout, fill=True, margin=10) #vert_layout = fsui.VerticalLayout() #hori_layout.add(vert_layout, fill=True, expand=True) hor2_layout = fsui.HorizontalLayout() widget = ConfigCheckBox(self, _("Built-in TCP/IP Stack"), "bsdsocket_library") widget.set_tooltip(_("Built-in TCP/IP Stack (bsdsocket.library)")) hor2_layout.add(widget, expand=True) widget = HelpButton(self, "http://fengestad.no/fs-uae/options#bsdsocket-library") hor2_layout.add(widget, margin_left=10) vert_layout.add(hor2_layout, fill=True, margin=10) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/config/ConfigDialog.py0000644000175000017500000000161212162366654025561 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import fs_uae_launcher.fsui as fsui from ...I18N import _, ngettext from ..PagedDialog import PagedDialog from .CustomOptionsPage import CustomOptionsPage from ..settings.CustomSettingsPage import CustomSettingsPage class ConfigDialog(PagedDialog): CUSTOM_OPTIONS = 0 def __init__(self, parent, index): PagedDialog.__init__(self, parent, _("Custom Configuration")) self.add_page(_("Custom Options"), CustomOptionsPage) self.add_page(_("Custom Settings"), CustomSettingsPage) self.list_view.set_index(index) self.set_size((900, 540)) self.center_on_parent() @classmethod def run(cls, parent, index): dialog = cls(parent, index) dialog.show_modal() dialog.close() fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/config/ModelGroup.py0000644000175000017500000000770612162366654025323 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import fs_uae_launcher.fsui as fsui from ...Config import Config from ...Warnings import Warnings from ...Database import Database from ...Amiga import Amiga from ...FloppyManager import FloppyManager from ...CDManager import CDManager from ...I18N import _, ngettext from .ConfigDialog import ConfigDialog from .ConfigCheckBox import ConfigCheckBox class ModelGroup(fsui.Group): # FIXME: remove with_more_button=True def __init__(self, parent, with_more_button=True): fsui.Group.__init__(self, parent) self.layout = fsui.VerticalLayout() heading_label = fsui.HeadingLabel(self, _("Amiga Model")) model_titles = [x["title"] for x in Amiga.models] self.model_choice = fsui.Choice(self, model_titles) self.accuracy_choice = fsui.Choice(self, [ _("Accurate"), _("Less Accurate"), _("Least Accurate")]) #self.ntsc_checkbox = fsui.CheckBox(self, "NTSC") self.ntsc_checkbox = ConfigCheckBox(self, "NTSC", "ntsc_mode") self.layout.add(heading_label, margin=10) self.layout.add_spacer(0) hori_layout = fsui.HorizontalLayout() self.layout.add(hori_layout, fill=True) hori_layout.add(self.model_choice, expand=True, margin=10) hori_layout.add(self.accuracy_choice, expand=False, margin=10) hori_layout.add(self.ntsc_checkbox, expand=False, margin=10) # FIXME: should not need to call from here... #Config.update_kickstart() self.initialize_from_config() self.set_config_handlers() def initialize_from_config(self): self.on_config("amiga_model", Config.get("amiga_model")) self.on_config("accuracy", Config.get("accuracy")) #self.on_config("ntsc", Config.get("ntsc")) def set_config_handlers(self): self.model_choice.on_change = self.on_model_change self.accuracy_choice.on_change = self.on_accuracy_change #self.ntsc_checkbox.on_change = self.on_ntsc_change Config.add_listener(self) def on_destroy(self): print("on_destroy") Config.remove_listener(self) def on_more_button(self): dialog = ConfigDialog(self.get_window(), ConfigDialog.HARDWARE) dialog.show_modal() dialog.destroy() def on_model_change(self): print("\non_model_change\n\n") index = self.model_choice.get_index() model = Amiga.models_config[index] Config.set("amiga_model", model) Config.update_kickstart() if Amiga.is_cd_based(): FloppyManager.clear_all() else: CDManager.clear_all() def on_accuracy_change(self): index = self.accuracy_choice.get_index() if index == 0: Config.set("accuracy", "") else: Config.set("accuracy", str(1 - index)) #def on_ntsc_change(self): # if self.ntsc_checkbox.is_checked(): # Config.set("ntsc_mode", "1") # else: # Config.set("ntsc_mode", "") def on_config(self, key, value): if key == "amiga_model": for i, config in enumerate(Amiga.models_config): if config == value: self.model_choice.set_index(i) break else: print("FIXME: could not set model") elif key == "accuracy": if not value: index = 0 else: index = 1 - int(value) self.accuracy_choice.set_index(index) #elif key == "ntsc_mode": # if value == "1": # self.ntsc_checkbox.check(True) # else: # self.ntsc_checkbox.check(False) def on_hds_button(self): dialog = ConfigDialog(self.get_window(), ConfigDialog.HARD_DRIVES) dialog.show_modal() dialog.destroy() fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/config/MemoryWidget.py0000644000175000017500000001101012162366654025641 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import os import fs_uae_launcher.fsui as fsui from ...Amiga import Amiga from ...Config import Config from ...I18N import _, ngettext from ...Settings import Settings from ..IconButton import IconButton class MemoryWidget(fsui.Group): def __init__(self, parent, label, option_key, values): fsui.Group.__init__(self, parent) self.option_key = option_key self.values = values self.layout = fsui.HorizontalLayout() #label = fsui.Label(self, label + ":") #self.layout.add(label, expand=True, margin_right=10) self.checkbox = fsui.CheckBox(self, label + ":") self.checkbox.on_change = self.on_checkbox_change self.layout.add(self.checkbox, expand=True, margin_right=10) #choices = [_("Default")] choices = [] for val in values: if val >= 1024 * 1024: choices.append("{0:0.1f} GB".format(val / (1024 * 1024))) elif val >= 10 * 1024: choices.append("{0:0.0f} MB".format(val / 1024)) elif val >= 1024: choices.append("{0:0.1f} MB".format(val / 1024)) else: choices.append("{0} KB".format(val)) self.choice = fsui.Choice(self, choices) #self.layout.add_spacer(0, expand=True) self.layout.add(self.choice) self.initialize_from_config() self.set_config_handlers() def initialize_from_config(self): self.on_config(self.option_key, Config.get(self.option_key)) def set_config_handlers(self): self.choice.on_change = self.on_choice_change Config.add_listener(self) def on_destroy(self): Config.remove_listener(self) def get_default_value(self): return Amiga.get_default_option_value(Config.get("amiga_model"), self.option_key) def on_checkbox_change(self): print("\n\n\n\non_checkbox_change\n\n\n\n") if self.checkbox.is_checked(): if Config.get(self.option_key) == "": print("-- setting config to default value") Config.set(self.option_key, self.get_default_value()) #self.choice.enable() #self.select_value(Config.get(self.option_key)) else: # use default value Config.set(self.option_key, "") #self.choice.disable() #self.select_value(self.get_default_value()) #def update_ui(self): # print("\n\n\n\n -- update_ui -- \n\n\n\n") # if self.checkbox.is_checked(): # if Config.get(self.option_key) == "": # print("-- setting config to default value") # Config.set(self.option_key, self.get_default_value()) # self.choice.enable() # self.select_value(Config.get(self.option_key)) # else: # # use default value # Config.set(self.option_key, "") # self.choice.disable() # self.select_value(self.get_default_value()) def on_choice_change(self): print("\n\n\n\n -- on_choice_change -- \n\n\n\n") index = self.choice.get_index() #if index == 0: # value = "" #else: #value = str(self.values[index - 1]) value = str(self.values[index]) Config.set(self.option_key, value) def on_config(self, key, value): if key == "amiga_model": #self.update_ui() self.on_config(self.option_key, Config.get(self.option_key)) elif key == self.option_key: print("-----", key, value) if value: if not self.checkbox.is_checked(): self.checkbox.check(True) #self.update_ui() if not self.select_value(value): print("WARNING: could not find memory setting") self.choice.enable() else: # if self.checkbox.is_checked(): self.checkbox.check(False) self.select_value(self.get_default_value()) self.choice.disable() #self.update_ui() #self.choice.set_index(0) def select_value(self, value): for i, config in enumerate(self.values): if str(config) == value: #self.choice.set_index(i + 1) self.choice.set_index(i) return True return False fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/config/KickstartGroup.py0000644000175000017500000001377712162366654026227 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import os import traceback import fs_uae_launcher.fsui as fsui from ...Config import Config from ...ChecksumTool import ChecksumTool from ...I18N import _, ngettext from ...Settings import Settings from ..IconButton import IconButton from ..LauncherFileDialog import LauncherFileDialog class KickstartGroup(fsui.Group): def __init__(self, parent): fsui.Group.__init__(self, parent) self.layout = fsui.VerticalLayout() heading_label = fsui.HeadingLabel(self, _("Kickstart ROM")) self.layout.add(heading_label, margin=10) self.layout.add_spacer(0) hori_layout = fsui.HorizontalLayout() self.layout.add(hori_layout, fill=True) #label = fsui.Label(self, _("Kickstart ROM") + ":") #hori_layout.add(label, margin_left=10, margin_right=10) kickstart_types = [_("Default"), _("Custom"), _("Internal")] self.kickstart_type_choice = fsui.Choice(self, kickstart_types) hori_layout.add(self.kickstart_type_choice, margin=10) self.text_field = fsui.TextField(self, "", read_only=True) hori_layout.add(self.text_field, expand=True, margin=10) self.browse_button = IconButton(self, "browse_file_16.png") self.browse_button.set_tooltip(_("Browse for File")) self.browse_button.on_activate = self.on_browse_button hori_layout.add(self.browse_button, margin=10) hori_layout = fsui.HorizontalLayout() self.layout.add(hori_layout, fill=True) label = fsui.Label(self, _("Extended ROM:")) hori_layout.add(label, margin_left=10, margin_right=10) #self.layout.add_spacer(0) kickstart_types = [_("Default"), _("Custom")] self.ext_rom_type_choice = fsui.Choice(self, kickstart_types) hori_layout.add(self.ext_rom_type_choice, margin_right=10) self.ext_text_field = fsui.TextField(self, "", read_only=True) hori_layout.add(self.ext_text_field, expand=True, margin_right=10) self.ext_browse_button = IconButton(self, "browse_file_16.png") self.ext_browse_button.set_tooltip(_("Browse for File")) self.ext_browse_button.on_activate = self.on_ext_browse_button hori_layout.add(self.ext_browse_button, margin_right=10) self.initialize_from_config() self.set_config_handlers() def initialize_from_config(self): self.on_config("kickstart_file", Config.get("kickstart_file")) self.on_config("kickstart_ext_file", Config.get("kickstart_ext_file")) def set_config_handlers(self): self.kickstart_type_choice.on_change = self.on_kickstart_type_change self.ext_rom_type_choice.on_change = self.on_ext_rom_type_change Config.add_listener(self) def on_destroy(self): print("on_destroy") Config.remove_listener(self) def on_kickstart_type_change(self): index = self.kickstart_type_choice.get_index() if index == 0: if Config.get("kickstart_file") == "": return Config.set("kickstart_file", "") elif index == 2: if Config.get("kickstart_file") == "internal": return Config.set("kickstart_file", "internal") else: Config.set("kickstart_file", Config.get("x_kickstart_file")) Config.update_kickstart() def on_ext_rom_type_change(self): index = self.ext_rom_type_choice.get_index() if index == 0: if Config.get("kickstart_ext_file") == "": return Config.set("kickstart_ext_file", "") else: Config.set("kickstart_ext_file", Config.get("x_kickstart_ext_file")) Config.update_kickstart() def on_browse_button(self, extended=False): default_dir = Settings.get_kickstarts_dir() if extended: title = _("Choose Extended ROM") key = "kickstart_ext_file" else: title = _("Choose Kickstart ROM") key = "kickstart_file" dialog = LauncherFileDialog(self.get_window(), title, "rom", Config.get(key)) if not dialog.show(): return path = dialog.get_path() checksum_tool = ChecksumTool(self.get_window()) sha1 = checksum_tool.checksum_rom(path) dir, file = os.path.split(path) if extended: self.ext_text_field.set_text(file) else: self.text_field.set_text(file) if os.path.normcase(os.path.normpath(dir)) == \ os.path.normcase(os.path.normpath(default_dir)): path = file if extended: Config.set_multiple([ ("kickstart_ext_file", path), ("x_kickstart_ext_file", path), ("x_kickstart_ext_file_sha1", sha1)]) else: Config.set_multiple([ ("kickstart_file", path), ("x_kickstart_file", path), ("x_kickstart_file_sha1", sha1)]) def on_ext_browse_button(self): return self.on_browse_button(extended=True) def on_config(self, key, value): if key == "kickstart_file": if value == "internal": self.text_field.set_text("") self.kickstart_type_choice.set_index(2) elif value: dir, file = os.path.split(value) self.text_field.set_text(file) self.kickstart_type_choice.set_index(1) else: self.text_field.set_text("") self.kickstart_type_choice.set_index(0) elif key == "kickstart_ext_file": if value: dir, file = os.path.split(value) self.ext_text_field.set_text(file) self.ext_rom_type_choice.set_index(1) else: self.ext_text_field.set_text("") self.ext_rom_type_choice.set_index(0) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/config/HardDriveGroup.py0000644000175000017500000001242312162366654026123 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import os import traceback import fs_uae_launcher.fsui as fsui from ...Archive import Archive from ...Config import Config from ...ChecksumTool import ChecksumTool from ...I18N import _, ngettext from ...Settings import Settings from ..IconButton import IconButton from ..LauncherFileDialog import LauncherFileDialog class HardDriveGroup(fsui.Group): def __init__(self, parent, index): fsui.Group.__init__(self, parent) self.layout = fsui.VerticalLayout() self.index = index self.config_key = "hard_drive_{0}".format(index) self.config_key_sha1 = "x_hard_drive_{0}_sha1".format(index) if index == 0: #heading_label = fsui.HeadingLabel(self, # _("Hard Drive {0}").format(index + 1)) heading_label = fsui.HeadingLabel(self, _("Hard Drives")) self.layout.add(heading_label, margin_bottom=20) self.layout.add_spacer(0) hori_layout = fsui.HorizontalLayout() self.layout.add(hori_layout, fill=True) self.eject_button = IconButton(self, "eject_button.png") self.eject_button.set_tooltip(_("Eject")) self.eject_button.on_activate = self.on_eject_button hori_layout.add(self.eject_button) self.text_field = fsui.TextField(self, "", read_only=True) hori_layout.add(self.text_field, expand=True, margin_left=10) self.browse_button = IconButton(self, "browse_folder_16.png") self.browse_button.set_tooltip(_("Browse for Folder")) self.browse_button.on_activate = self.on_browse_folder_button hori_layout.add(self.browse_button, margin_left=10) self.browse_button = IconButton(self, "browse_file_16.png") self.browse_button.set_tooltip(_("Browse for File")) self.browse_button.on_activate = self.on_browse_file_button hori_layout.add(self.browse_button, margin_left=10) self.initialize_from_config() self.set_config_handlers() def initialize_from_config(self): self.on_config(self.config_key, Config.get(self.config_key)) def set_config_handlers(self): Config.add_listener(self) def on_destroy(self): Config.remove_listener(self) def on_config(self, key, value): if key != self.config_key: return dir, name = os.path.split(value) if dir: path = "{0} ({1})".format(name, dir) else: path = name self.text_field.set_text(path) def on_eject_button(self): Config.set_multiple([ (self.config_key, ""), (self.config_key_sha1, "")]) def on_browse_folder_button(self): self.browse(dir_mode=True) def on_browse_file_button(self): self.browse(dir_mode=False) def browse(self, dir_mode): default_dir = Settings.get_hard_drives_dir() #if dir_mode: # dialog = fsui.DirDialog(self.get_window(), _("Choose Hard Drive"), # directory=default_dir) #else: dialog = LauncherFileDialog(self.get_window(), _("Choose Hard Drive"), "hd", Config.get(self.config_key), dir_mode=dir_mode) if not dialog.show_modal(): dialog.destroy() return path = dialog.get_path() dialog.destroy() checksum_tool = ChecksumTool(self.get_window()) sha1 = "" if dir_mode: print("not calculating HD checksums for directories") else: size = os.path.getsize(path) if size < 64*1024*1024: sha1 = checksum_tool.checksum(path) else: print("not calculating HD checksums HD files > 64MB") full_path = path # FIXME: use contract function dir, file = os.path.split(path) self.text_field.set_text(file) if os.path.normcase(os.path.normpath(dir)) == \ os.path.normcase(os.path.normpath(default_dir)): path = file self.text_field.set_text(path) values = [(self.config_key, path), (self.config_key_sha1, sha1)] if self.index == 0: whdload_args = "" dummy, ext = os.path.splitext(path) if not dir_mode and ext.lower() in [".zip", ".lha"]: try: whdload_args = self.calculate_whdload_args(full_path) except Exception: traceback.print_exc() values.append(("x_whdload_args", whdload_args)) Config.set_multiple(values) def calculate_whdload_args(self, archive_path): archive = Archive(archive_path) slave = "" for path in archive.list_files(): name = os.path.basename(path) lname = name.lower() if lname.endswith(".slave"): if slave: print("already found one slave, don't know which " "one to choose") return "" slave = name elif lname == "startup-sequence": print("found startup-sequence, assuming non-whdload " "archive") return slave fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/config/MemoryGroup.py0000644000175000017500000000317012162366654025522 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import os import fs_uae_launcher.fsui as fsui from ...I18N import _, ngettext from .MemoryWidget import MemoryWidget class MemoryGroup(fsui.Group): def __init__(self, parent): fsui.Group.__init__(self, parent) self.layout = fsui.VerticalLayout() _("Memory") heading_label = fsui.HeadingLabel(self, _("Override Installed Memory")) self.layout.add(heading_label, margin=10) self.layout.add_spacer(0) hori_layout = fsui.HorizontalLayout() self.layout.add(hori_layout, fill=True) vert_layout = fsui.VerticalLayout() hori_layout.add(vert_layout, fill=True, expand=-1) widget = MemoryWidget(self, _("Chip RAM"), "chip_memory", [((x + 1) * 512) for x in range(16)]) vert_layout.add(widget, fill=True, margin=10) widget = MemoryWidget(self, _("Slow RAM"), "slow_memory", [0, 512, 1024, 1792]) vert_layout.add(widget, fill=True, margin=10) vert_layout = fsui.VerticalLayout() hori_layout.add(vert_layout, fill=True, expand=-1) widget = MemoryWidget(self, _("Fast RAM"), "fast_memory", [(x * 1024) for x in range(9)]) vert_layout.add(widget, fill=True, margin=10) widget = MemoryWidget(self, _("Zorro III RAM"), "zorro_iii_memory", [0, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072, 262144, 524288, 1048576]) vert_layout.add(widget, fill=True, margin=10) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/config/InputGroup.py0000644000175000017500000000407412162366654025355 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import os import sys import subprocess import fs_uae_launcher.fsui as fsui from ...Config import Config from ...DeviceManager import DeviceManager from ...I18N import _, ngettext from ...Settings import Settings from ..IconButton import IconButton from .InputSelector import InputSelector class InputGroup(fsui.Group): def __init__(self, parent, with_more_options=True, parallel_ports=False, custom_ports=False): fsui.Group.__init__(self, parent) self.layout = fsui.VerticalLayout() if parallel_ports: heading = _("Parallel Port Joysticks") elif custom_ports: heading = _("Custom Joystick Port") else: heading = _("Mouse & Joystick Ports") if False: # Keeping the old string here to keep the translations alive _("Joystick Ports") hori_layout = fsui.HorizontalLayout() self.layout.add(hori_layout, fill=True) heading_label = fsui.HeadingLabel(self, heading) hori_layout.add(heading_label, margin=10) hori_layout.add_spacer(0, expand=True) if with_more_options: self.refresh_button = IconButton(self, "refresh_button.png") self.refresh_button.set_tooltip( _("Refresh list of connected joystick devices")) self.refresh_button.on_activate = self.on_refresh_button hori_layout.add(self.refresh_button, margin_right=10) self.layout.add_spacer(0) self.selectors = [] offset = 0 count = 2 if parallel_ports: offset = 2 elif custom_ports: offset = 4 count = 1 for i in range(count): #self.layout.add_spacer(10) selector = InputSelector(self, i + offset) self.layout.add(selector, fill=True, margin=10) def on_refresh_button(selfself): DeviceManager.refresh() fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/config/CustomOptionsPage.py0000644000175000017500000000450712162366654026665 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import hashlib import fs_uae_launcher.fsui as fsui from ...Config import Config from ...I18N import _, ngettext class CustomOptionsPage(fsui.Panel): def __init__(self, parent): fsui.Panel.__init__(self, parent) self.layout = fsui.VerticalLayout() self.layout.add_spacer(20) hor_layout = fsui.HorizontalLayout() self.layout.add(hor_layout, fill=True, expand=True) hor_layout.add_spacer(20) self.text_area = fsui.TextArea(self, font_family="monospace") self.text_area.set_min_height(400) self.text_area.set_text(self.get_initial_text()) hor_layout.add(self.text_area, fill=True, expand=True) hor_layout.add_spacer(20) self.layout.add_spacer(20) self.get_window().add_close_listener(self.on_close_window) def on_close_window(self): self.update_config() def on_close_button(self): self.end_modal(0) def update_config(self): text = self.text_area.get_text() keys = Config.config.keys() for key in keys: if key not in Config.default_config: del Config.config[key] for line in text.split("\n"): line = line.strip() if line.startswith("# You can write key = value pairs here"): continue parts = line.split("=", 1) if len(parts) == 2: key = parts[0].strip() #if key in Config.no_custom_config: # continue value = parts[1].strip() Config.set(key, value) def get_initial_text(self): text = DEFAULT_TEXT keys = Config.config.keys() for key in sorted(keys): if key in Config.no_custom_config: continue value = Config.config[key] text += "{0} = {1}\n".format(key, value) return text DEFAULT_TEXT = """# Custom Configuration Options # # You can write key = value pairs here to set FS-UAE options for which there # are no user interface yet. This is only a temporary feature until the GUI # supports all options directly. # # The options specified here will apply to this configuration only. """ fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/config/ConfigCheckBox.py0000644000175000017500000000203712162366654026052 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import fs_uae_launcher.fsui as fsui from ...Config import Config class ConfigCheckBox(fsui.CheckBox): def __init__(self, parent, label, config_key): fsui.CheckBox.__init__(self, parent, label) self.config_key = config_key self.initialize_from_config() self.set_config_handlers() def initialize_from_config(self): self.on_config(self.config_key, Config.get(self.config_key)) def set_config_handlers(self): Config.add_listener(self) def on_destroy(self): Config.remove_listener(self) def on_change(self): if self.is_checked(): Config.set(self.config_key, "1") else: Config.set(self.config_key, "") def on_config(self, key, value): if key == self.config_key: if value == "1": self.check(True) else: self.check(False) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/config/__init__.py0000644000175000017500000000000012162366654024761 0ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/config/WHDLoadGroup.py0000644000175000017500000000321112162366654025470 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import fs_uae_launcher.fsui as fsui from ...Config import Config from ...I18N import _, ngettext from ...Settings import Settings from ..HelpButton import HelpButton class WHDLoadGroup(fsui.Group): def __init__(self, parent): fsui.Group.__init__(self, parent) self.layout = fsui.VerticalLayout() heading_label = fsui.HeadingLabel(self, _("WHDLoad Arguments")) self.layout.add(heading_label, margin=10) self.layout.add_spacer(0) self.text_field = fsui.TextField(self, "") hori_layout = fsui.HorizontalLayout() self.layout.add(hori_layout, fill=True, margin=10) hori_layout.add(self.text_field, expand=True) self.help_button = HelpButton(self, "http://fengestad.no/fs-uae/whdload-support") hori_layout.add(self.help_button, margin_left=10) self.initialize_from_config() self.set_config_handlers() def initialize_from_config(self): self.on_config("x_whdload_args", Config.get("x_whdload_args")) def set_config_handlers(self): self.text_field.on_change = self.on_text_change Config.add_listener(self) def on_destroy(self): print("on_destroy") Config.remove_listener(self) def on_config(self, key, value): if key == "x_whdload_args": if value != self.text_field.get_text(): self.text_field.set_text(value) def on_text_change(self): Config.set("x_whdload_args", self.text_field.get_text()) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/HelpButton.py0000644000175000017500000000070112162366654024051 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import webbrowser import fs_uae_launcher.fsui as fsui from .IconButton import IconButton class HelpButton(IconButton): def __init__(self, parent, url): IconButton.__init__(self, parent, "help_16.png") self.url = url def on_activate(self): webbrowser.open(self.url) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/Skin.py0000644000175000017500000000346212162366654022700 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import fs_uae_launcher.fsui as fsui from .Constants import Constants from ..Settings import Settings from ..Util import memoize #LEVEL = 0xce LEVEL = 0xeb #LEVEL = 0xe4 class Skin: EXTRA_GROUP_MARGIN = 0 @classmethod def get_background_color(cls): c = cls._get_background_color() if c is None: return None return c.copy() @classmethod @memoize def _get_background_color(cls): value = Settings.get("ui_background_color") if len(value) == 7 and value[0] == "#": def convert(s): return int(s, 16) r = convert(value[1:3]) g = convert(value[3:5]) b = convert(value[5:7]) return fsui.Color(r, g, b) if fsui.System.windows: return fsui.Color(LEVEL, LEVEL, LEVEL) elif fsui.System.macosx: return fsui.Color(237, 237, 237) return None @classmethod def set_background_color(cls, widget): color = cls.get_background_color() if color is not None: widget.set_background_color(cls.get_background_color()) @classmethod def get_window_padding_left(cls): return 10 + cls.EXTRA_GROUP_MARGIN @classmethod def get_window_padding_right(cls): return 10 + cls.EXTRA_GROUP_MARGIN @classmethod def get_window_padding_bottom(cls): return 10 + cls.EXTRA_GROUP_MARGIN @classmethod def get_bottom_margin(cls): return 10 + cls.get_window_padding_bottom() @classmethod def get_bottom_panel_height(cls): return Constants.SCREEN_SIZE[1] + 20 + 2 + 1 + 1 + \ cls.get_bottom_margin() fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/ConfigurationsBrowser.py0000644000175000017500000000670012162366654026330 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import os import traceback import fs_uae_launcher.fsui as fsui from ..Config import Config from ..Settings import Settings from ..Database import Database from ..I18N import _, ngettext from ..fsgs.GameDatabase import GameDatabase from ..fsgs.GameDatabaseClient import GameDatabaseClient class ConfigurationsBrowser(fsui.VerticalItemView): def __init__(self, parent): fsui.VerticalItemView.__init__(self, parent) self.items = [] self.game_icon = fsui.Image("fs_uae_launcher:res/game_16.png") self.config_icon = fsui.Image( "fs_uae_launcher:res/fsuae_config_16.png") Settings.add_listener(self) self.update_search() def on_destroy(self): Settings.remove_listener(self) def on_select_item(self, index): self.load_configuration(self.items[index][0]) def on_activate_item(self, index): from ..LaunchHandler import LaunchHandler LaunchHandler.start_game() def on_setting(self, key, value): if key == "config_search": self.update_search() if len(self.items) > 0: self.select_item(0) else: Settings.set("parent_uuid", "") if key == "config_refresh": self.update_search() self.select_item(None) old_parent_uuid = Settings.get("parent_uuid") if old_parent_uuid: Settings.set("parent_uuid", "") Settings.set("parent_uuid", old_parent_uuid) def set_items(self, items): self.items = items #self.set_item_count(len(self.items)) self.update() def get_item_count(self): return len(self.items) def get_item_text(self, index): return self.items[index][1] def get_item_search_text(self, index): return self.items[index][3] def get_item_icon(self, index): if self.items[index][2]: return self.game_icon else: return self.config_icon #def on_get_item_tooltip(self, row, column): # return self.items[row][1] # #text = text.replace(u"\nAmiga \u00b7 ", "\n") def update_search(self): self.search = Settings.get("config_search").strip().lower() print("search for", self.search) database = Database.get_instance() items = database.search_configurations(self.search) #print(items) self.set_items(items) #self.set_items([list(x) for x in items]) def load_configuration(self, configuration_id): database = Database.get_instance() config_info = database.get_config(configuration_id) if config_info["data"]: Config.load_data(config_info["data"]) Settings.set("parent_uuid", "") elif config_info["path"]: Config.load_file(config_info["path"]) Settings.set("parent_uuid", "") else: Settings.set("parent_uuid", config_info["uuid"]) #game_uuid = config_info["uuid"] #game_database = GameDatabase.get_instance() #game_database_client = GameDatabaseClient(game_database) #game_id = game_database_client.get_game_id(game_uuid) #values = game_database_client.get_final_game_values(game_id) #Config.load_values(values, uuid=game_uuid) pass fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/CustomPanel.py0000644000175000017500000000071312162366654024222 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import fs_uae_launcher.fsui as fsui from ..Config import Config from ..I18N import _, ngettext from .Skin import Skin class CustomPanel(fsui.Panel): def __init__(self, parent): fsui.Panel.__init__(self, parent) Skin.set_background_color(self) self.layout = fsui.VerticalLayout() fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/JoinDialog.py0000644000175000017500000000312712162366654024011 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import fs_uae_launcher.fsui as fsui from .Config import Config from .I18N import _, ngettext class JoinDialog(fsui.Dialog): def __init__(self): fsui.Dialog.__init__(self, None, "Create/Join Game") self.layout = fsui.VerticalLayout() self.layout.add_spacer(20) hor_layout = fsui.HorizontalLayout() self.layout.add(hor_layout, fill=True) hor_layout.add_spacer(20) self.text = fsui.TextField(self) self.text.on_activate = self.on_ok_button hor_layout.add(self.text, expand=True) hor_layout.add_spacer(20) self.layout.add_spacer(20) hor_layout = fsui.HorizontalLayout() self.layout.add(hor_layout, fill=True) hor_layout.add_spacer(20, expand=True) self.cancel_button = fsui.Button(self, " Cancel ") self.cancel_button.on_activate = self.on_cancel_button hor_layout.add(self.cancel_button) hor_layout.add_spacer(10) self.ok_button = fsui.Button(self, " Create/Join ") self.ok_button.on_activate = self.on_ok_button hor_layout.add(self.ok_button) hor_layout.add_spacer(20) self.layout.add_spacer(20) self.set_size(self.layout.get_min_size()) self.text.focus() def get_game_name(self): return "&" + self.text.get_text() def on_ok_button(self): self.end_modal(True) def on_cancel_button(self): self.end_modal(False) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/IconButton.py0000644000175000017500000000102112162366654024045 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import fs_uae_launcher.fsui as fsui class IconButton(fsui.ImageButton): def __init__(self, parent, name): image = fsui.Image("fs_uae_launcher:res/" + name) fsui.ImageButton.__init__(self, parent, image) self.set_min_width(40) def set_icon_name(self, name): image = fsui.Image("fs_uae_launcher:res/" + name) self.set_image(image) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/BottomPanel.py0000644000175000017500000000336412162366654024221 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import fs_uae_launcher.fsui as fsui from .Constants import Constants from .Skin import Skin class BottomPanel(fsui.Panel): def __init__(self, parent): fsui.Panel.__init__(self, parent, paintable=True) Skin.set_background_color(self) self.color_2 = Skin.get_background_color() if self.color_2 is not None: self.color_1 = self.color_2.copy().darken(0.08) if fsui.System.macosx: self.line_color_1 = self.color_2.copy().mix( fsui.Color(0x00, 0x00, 0x00), 0.25) self.line_color_2 = self.color_2.copy().mix( fsui.Color(0xff, 0xff, 0xff), 0.25) else: self.line_color_1 = self.color_2.copy().mix( fsui.Color(0xff, 0xff, 0xff)) self.line_color_2 = self.line_color_1 else: #self.color_1 = fsui.Color(0x00, 0x00, 0x00, 0x20) #self.color_2 = fsui.Color(0x00, 0x00, 0x00, 0x00) self.color_1 = fsui.Color(0xff, 0xff, 0xff, 0x60) self.color_2 = fsui.Color(0xff, 0xff, 0xff, 0x00) self.line_color_1 = fsui.Color(0xff, 0xff, 0xff, 0xa0) self.line_color_2 = self.line_color_1 def on_paint(self): dc = self.create_dc() self.draw_background(dc) def draw_background(self, dc): size = self.size dc.draw_line(0, 0, size[0], 0, self.line_color_1) dc.draw_line(0, 1, size[0], 1, self.line_color_2) dc.draw_vertical_gradient(0, 2, self.size[0], self.size[1] - 2, self.color_1, self.color_2) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/Constants.py0000644000175000017500000000073612162366654023751 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals class Constants: TAB_WIDTH = 64 TAB_HEIGHT = 64 #COVER_SIZE = (108, 136) #SCREEN_SIZE = (224, 140) #SCREEN_SIZE = (216, 136) SCREEN_SIZE = (210, 134) COVER_SIZE = (106, 134) # 2 for top border, 1 + 1 for border over and under screens #BOTTOM_HEIGHT = SCREEN_SIZE[1] + 20 + + 2 + 1 + 1 + 10 fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/SetupDialog.py0000644000175000017500000000236212162366654024212 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import hashlib import fs_uae_launcher.fsui as fsui from ..I18N import _, ngettext from .SetupPanel import SetupPanel class SetupDialog(fsui.Dialog): def __init__(self, parent): fsui.Dialog.__init__(self, parent, _("Import Kickstarts")) self.layout = fsui.VerticalLayout() self.layout.padding_top = 10 self.layout.padding_bottom = 10 self.layout.padding_left = 10 self.layout.padding_right = 10 self.panel = SetupPanel(self) self.panel.set_min_width(620) self.layout.add(self.panel) self.layout.add_spacer(10) hori_layout = fsui.HorizontalLayout() hori_layout.add_spacer(10, expand=True) self.layout.add(hori_layout, fill=True) self.close_button = fsui.Button(self, _("Close")) self.close_button.on_activate = self.on_close_button hori_layout.add(self.close_button) hori_layout.add_spacer(10) self.layout.add_spacer(10) self.set_size(self.layout.get_min_size()) self.center_on_parent() def on_close_button(self): self.end_modal(False) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/ConfigGroup.py0000644000175000017500000001170712162366654024217 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import os import time import datetime import fs_uae_launcher.fsui as fsui from ..Config import Config from ..ConfigurationScanner import ConfigurationScanner from ..I18N import _, ngettext from ..Settings import Settings from .IconButton import IconButton class ConfigGroup(fsui.Group): def __init__(self, parent): fsui.Group.__init__(self, parent) self.layout = fsui.VerticalLayout() heading_label = fsui.HeadingLabel(self, _("Configuration")) self.layout.add(heading_label, margin=10) self.layout.add_spacer(0) hori_layout = fsui.HorizontalLayout() self.layout.add(hori_layout, fill=True) self.new_button = IconButton(self, "new_button.png") self.new_button.set_tooltip(_("New Configuration")) self.new_button.on_activate = self.on_new_button hori_layout.add(self.new_button, margin=10) #self.open_button = IconButton(self, "open_button.png") #self.open_button.set_tooltip(_("Open Configuration")) #self.open_button.disable() #self.open_button.on_activate = self.on_open_button #hori_layout.add(self.open_button, margin=10) self.config_name_field = fsui.TextField(self) hori_layout.add(self.config_name_field, expand=True, margin=10) self.save_button = IconButton(self, "save_button.png") #self.save_button.disable() self.save_button.set_tooltip(_("Save Configuration")) self.save_button.on_activate = self.on_save_button hori_layout.add(self.save_button, margin=10) self.on_setting("config_name", Settings.get("config_name")) self.config_name_field.on_change = self.on_config_name_change #Config.add_listener(self) Settings.add_listener(self) self.on_setting("config_changed", Settings.get("config_changed")) def on_destroy(self): #Config.remove_listener(self) Settings.remove_listener(self) #def on_config(self, key, value): # if key == "__changed": # self.save_button.enable(value == "1") def on_setting(self, key, value): if key == "config_changed": self.save_button.enable(value == "1") elif key == "config_name": if value != self.config_name_field.get_text().strip(): self.config_name_field.set_text(value) def on_config_name_change(self): text = self.config_name_field.get_text().strip() Settings.set("config_name", text) Settings.set("config_changed", "1") # FIXME: remove #Config.set("title", text) def on_new_button(self): Config.load_default_config() Settings.set("config_changed", "1") Settings.set("parent_uuid", "") def on_save_button(self): print("ConfigGroup.on_save_button") #try: self.save_config() #except Exception: # # FIXME: notify user # pass def save_config(self): print("ConfigGroup.save_config") from ..Database import Database database = Database.get_instance() name = Settings.get("config_name").strip() if not name: print("no config_name") # FIXME: notify user return file_name = name + ".fs-uae" path = os.path.join(Settings.get_configurations_dir(), file_name) with open(path, "wb") as f: f.write("# FS-UAE configuration saved by FS-UAE Launcher\n") f.write("# Last saved: {0}\n".format( datetime.datetime.today().strftime("%Y-%m-%d %H:%M:%S"))) f.write("\n[fs-uae]\n") keys = sorted(Config.config.keys()) for key in keys: value = Config.get(key) if key.startswith("__"): continue if key in Config.dont_save_keys_set: continue #elif key == "joystick_port_2_mode" and value == "nothing": # continue #elif key == "joystick_port_3_mode" and value == "nothing": # continue if value == Config.default_config.get(key, ""): continue if value: f.write("{0} = {1}\n".format(key, value)) search = ConfigurationScanner.create_configuration_search(name) name = ConfigurationScanner.create_configuration_name(name) print("adding", path) # deleting the path from the database first in case it already exists database.delete_configuration(path=path) database.delete_file(path=path) database.add_file(path=path) database.add_configuration(path=path, uuid="", name=name, scan=0, search=search) database.commit() Settings.set("config_refresh", str(time.time())) Settings.set("config_changed", "0") fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/GameInfoPanel.py0000644000175000017500000002262112162366654024437 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import os import time import traceback import webbrowser import fs_uae_launcher.fsui as fsui from ..Config import Config from ..I18N import _, ngettext from ..Settings import Settings from ..Database import Database from ..GameHandler import GameHandler from .BottomPanel import BottomPanel from .Constants import Constants from .VariantRatingButton import VariantRatingButton from .ImageLoader import ImageLoader from .LaunchGroup import LaunchGroup from .Skin import Skin #BORDER = 5 #COVER_SIZE = (110, 146) BORDER = 20 #COVER_SIZE = (117, 156) #COVER_SIZE = (110, 140) class GameInfoPanel(BottomPanel): def __init__(self, parent): BottomPanel.__init__(self, parent) Skin.set_background_color(self) #self.set_background_color((0xdd, 0xdd, 0xdd)) self.layout = fsui.HorizontalLayout() #def get_min_height(): # return Constants.COVER_SIZE[1] + 2 * BORDER #self.layout.get_min_height = get_min_height self.layout.padding_left = BORDER // 2 self.layout.padding_right = BORDER // 2 self.layout.padding_top = BORDER + 2 self.layout.padding_bottom = Skin.get_bottom_margin() self.default_image = fsui.Image("fs_uae_launcher:res/cover.png") #self.default_image.resize(Constants.COVER_SIZE) self.cover_overlay = fsui.Image( "fs_uae_launcher:res/cover_overlay.png") self.cover_overlay_square = fsui.Image( "fs_uae_launcher:res/cover_overlay_square.png") #self.cover_view = fsui.ImageView(self, self.default_image) #self.layout.add(self.cover_view, expand=False, fill=True) self.layout.add_spacer(Constants.COVER_SIZE[0]) #self.panel = fsui.Panel(self) #self.panel.set_background_color((0xdd, 0xdd, 0xdd)) #self.layout.add(self.panel, expand=True, fill=True) vert_layout = fsui.VerticalLayout() self.layout.add(vert_layout, expand=True, fill=True) #self.panel.layout.padding_top = 10 vert_layout.padding_left = BORDER vert_layout.add_spacer(58 + 3) hori_layout = fsui.HorizontalLayout() vert_layout.add(hori_layout, fill=True) hori_layout.add_spacer(0, expand=True) self.variant_rating_button = VariantRatingButton(self) hori_layout.add(self.variant_rating_button, margin_right=3) #def label_min_width(): # return 330 #self.title_label = fsui.HeadingLabel(self) #self.title_label.get_min_width = label_min_width #vert_layout.add(self.title_label) #self.sub_title_label = fsui.Label(self) #self.sub_title_label.get_min_width = label_min_width #vert_layout.add(self.sub_title_label) self.title = "" self.sub_title = "" self.year = "" self.publisher = "" self.developer = "" self.companies = "" vert_layout.add_spacer(0, expand=True) #self.variant_panel = fsui.Panel(self) #self.variant_panel.set_background_color(fsui.Color(0xb0, 0xb0, 0xb0)) #self.variant_panel.set_min_height(30) #vert_layout.add(self.variant_panel, fill=True, margin_bottom=20) hori_layout = fsui.HorizontalLayout() vert_layout.add(hori_layout, fill=True) self.link_buttons = {} for name in ["database_url", "hol_url", "lemon_url", "mobygames_url", "wikipedia_url"]: image = fsui.Image("fs_uae_launcher:res/{0}_16.png".format(name)) def create_open_url_function(name): def open_url(): print("link button - open url for", name) url = Config.get(name) print("URL:", url) if url: webbrowser.open(url) return open_url button = fsui.ImageButton(self, image) if name == "database_url": button.set_tooltip(_("Open Game Database Entry")) elif name == "hol_url": button.set_tooltip(_("Open Hall of Light Entry")) elif name == "lemon_url": button.set_tooltip(_("Open LemonAmiga Entry")) elif name == "wikipedia_url": button.set_tooltip(_("Open Wikipedia Entry")) elif name == "mobygames_url": button.set_tooltip(_("Open MobyGames Entry")) button.disable() button.on_activate = create_open_url_function(name) hori_layout.add(button, margin_right=4, fill=True) self.link_buttons[name] = button hori_layout.add_spacer(0, expand=True) self.launch_group = LaunchGroup(self) hori_layout.add(self.launch_group, fill=True) self.load_info() Settings.add_listener(self) Config.add_listener(self) for key in ["database_url", "hol_url", "lemon_url", "mobygames_url", "wikipedia_url", "year", "publisher", "developer"]: self.on_config(key, Config.get(key)) def on_destroy(self): Settings.remove_listener(self) def load_info(self): #t1 = time.time() handler = GameHandler.current() name = handler.get_name() variant = handler.get_variant() if variant.startswith("Amiga, "): variant = variant[7:] self.title = name self.sub_title = variant self.sub_title = self.sub_title.replace(", ", " \u00b7 ") #image = handler.load_cover_preview() #if image: # #self.cover_view.set_image(image) # self.image = image #else: # #self.cover_view.set_image(self.default_image) # self.image = self.default_image #self.refresh() path = handler.get_cover_path() loader = ImageLoader.get() def on_load(request): #print("on_load, request.image =", request.image, request.image.size) if request.image: self.image = request.image else: self.image = self.default_image self.refresh() self.requests = loader.load_image(path, size=Constants.COVER_SIZE, on_load=on_load, is_cover=True) self.image = self.default_image self.refresh() #t2 = time.time() #print(t2 - t1) self.layout.update() def on_setting(self, key, value): if key == "config_name": self.load_info() def on_config(self, key, value): if key in ["database_url", "hol_url", "lemon_url", "mobygames_url", "wikipedia_url"]: print("----", key, bool(value)) self.link_buttons[key].enable(bool(value)) elif key == "publisher": self.publisher = value self.update_companies() elif key == "developer": self.developer = value self.update_companies() elif key == "year": self.year = value elif key == "__variant_rating": self.variant_rating_button.show(bool(value)) def update_companies(self): companies = [x.strip() for x in self.publisher.split("/") if x.strip()] for developer in self.developer.split("/"): developer = developer.strip() if developer and not developer in companies: companies.append(developer) self.companies = " \u00b7 ".join(companies) def on_paint(self): dc = self.create_dc() self.draw_background(dc) y = 2 + 20 x = 10 size = self.size image = self.image #dc.draw_image(image, x, y) if image.size[0] == image.size[1]: # cover_overlay = self.cover_overlay_square y_offset = 14 # #title_x = 10 else: y_offset = 0 cover_overlay = self.cover_overlay title_x = 10 + Constants.COVER_SIZE[0] + 20 if image.size[0] == image.size[1]: dc.draw_rectangle(x + 1, y + 1, Constants.COVER_SIZE[0], Constants.COVER_SIZE[1], fsui.Color(0x0, 0x0, 0x0)) dc.draw_image(image, x + 1, y + 1 + y_offset) dc.draw_image(cover_overlay, x - 10, y - 10) font = dc.get_font() font.set_bold(True) dc.set_font(font) x = 10 + Constants.COVER_SIZE[0] + 20 dc.draw_text(self.title, title_x, y) tw, th = dc.measure_text(self.title) #y += int(th * 1.2) y += 24 color = dc.get_text_color() color.mix(self.get_background_color(), 0.33) dc.set_text_color(color) if self.year: twy, thy = dc.measure_text(self.year) dc.draw_text(self.year, x, y) twy += 10 else: twy = 0 font.set_bold(False) dc.set_font(font) if self.companies: dc.draw_text(self.companies, x + twy, y) y += 24 #y += 10 #dc.set_background_color(fsui.Color(0x00, 0x00, 0x00, 0x10)) background = fsui.Color(0x00, 0x00, 0x00, 0x20) y = 80 h = 30 dc.draw_rectangle(x - 18, y, size[0] - x - 10 + 18, h, background) #background = fsui.Color(0xff, 0xff, 0xff) #dc.draw_rectangle(size[0] - 10 - 40, y, 40, h, background) tw, th = dc.measure_text(self.sub_title) dc.draw_text(self.sub_title, x, y + (h - th) // 2) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/ScanKickstartGroup.py0000644000175000017500000000741712162366654025561 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import os import traceback import fs_uae_launcher.fsui as fsui from ..Amiga import Amiga from ..Database import Database from ..Config import Config from ..Signal import Signal from ..I18N import _, ngettext class KickstartStatusGroup(fsui.Group): def __init__(self, parent, title, model): self.model = model fsui.Group.__init__(self, parent) self.layout = fsui.HorizontalLayout() self.ok_image = fsui.Image("fs_uae_launcher:res/ok_emblem.png") self.na_image = fsui.Image("fs_uae_launcher:res/na_emblem.png") self.icon = fsui.ImageView(self, self.na_image) self.layout.add(self.icon) self.layout.add_spacer(10) self.label = fsui.Label(self, title) self.layout.add(self.label) self.update() Signal.add_listener("scan_done", self) def on_destroy(self): Signal.remove_listener("scan_done", self) def on_scan_done_signal(self): self.update() def update(self): database = Database.get_instance() amiga = Amiga.get_model_config(self.model) for sha1 in amiga["kickstarts"]: if database.find_file(sha1=sha1): self.icon.set_image(self.ok_image) return self.icon.set_image(self.na_image) class ScanKickstartGroup(fsui.Group): def __init__(self, parent): fsui.Group.__init__(self, parent) self.layout = fsui.VerticalLayout() label = fsui.HeadingLabel(self, _("Available Kickstart Versions")) self.layout.add(label, margin=10) icon_layout = fsui.HorizontalLayout() self.layout.add(icon_layout, fill=True) icon_layout.add_spacer(20) image = fsui.Image("fs_uae_launcher:res/kickstart.png") self.image_view = fsui.ImageView(self, image) icon_layout.add(self.image_view, valign=0.0, margin=10) vert_layout = fsui.VerticalLayout() icon_layout.add(vert_layout, fill=True, expand=True) vert_layout.add_spacer(0) label = fsui.Label(self, _("You should have kickstart files for " "each Amiga model you want to use:")) vert_layout.add(label, margin=10) hori_layout = fsui.HorizontalLayout() vert_layout.add(hori_layout, fill=True) self.kickstart_groups = [] colu_layout = fsui.VerticalLayout() hori_layout.add(colu_layout, expand=True, fill=True, margin=10) self.add_kickstart_group(colu_layout, "Amiga 1000", "A1000") colu_layout.add_spacer(10) self.add_kickstart_group(colu_layout, "Amiga 500", "A500") colu_layout.add_spacer(10) self.add_kickstart_group(colu_layout, "Amiga 500+", "A500+") colu_layout = fsui.VerticalLayout() hori_layout.add(colu_layout, expand=True, fill=True, margin=10) self.add_kickstart_group(colu_layout, "Amiga 600", "A600") colu_layout.add_spacer(10) self.add_kickstart_group(colu_layout, "Amiga 1200", "A1200") colu_layout.add_spacer(10) self.add_kickstart_group(colu_layout, "Amiga 3000", "A3000") colu_layout = fsui.VerticalLayout() hori_layout.add(colu_layout, expand=True, fill=True, margin=10) self.add_kickstart_group(colu_layout, "Amiga 4000", "A4000/040") colu_layout.add_spacer(10) self.add_kickstart_group(colu_layout, "Amiga CD32", "CD32") colu_layout.add_spacer(10) self.add_kickstart_group(colu_layout, "Commodore CDTV", "CDTV") def add_kickstart_group(self, layout, title, model): group = KickstartStatusGroup(self, title, model) self.kickstart_groups.append(group) layout.add(group, fill=True) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/CDPanel.py0000644000175000017500000000152612162366654023241 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import fs_uae_launcher.fsui as fsui from ..Config import Config from ..I18N import _, ngettext from .FloppiesGroup import FloppiesGroup from .MediaListGroup import MediaListGroup from .Skin import Skin class CDPanel(fsui.Panel): def __init__(self, parent): fsui.Panel.__init__(self, parent) Skin.set_background_color(self) self.drives_group = FloppiesGroup(self, 1, cd_mode=True) self.media_list_group = MediaListGroup(self, cd_mode=True) self.layout = fsui.VerticalLayout() self.layout.add(self.drives_group, fill=True) self.layout.add_spacer(Skin.EXTRA_GROUP_MARGIN) self.layout.add(self.media_list_group, expand=True, fill=True) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/ConfigurationsPanel.py0000644000175000017500000001160712162366654025746 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import os import traceback import fs_uae_launcher.fsui as fsui from ..Config import Config from ..I18N import _, ngettext from ..Settings import Settings from .ConfigurationsBrowser import ConfigurationsBrowser from .Constants import Constants from .IconButton import IconButton from .ScanDialog import ScanDialog from .Skin import Skin from .VariantsBrowser import VariantsBrowser class ConfigurationsPanel(fsui.Panel): def __init__(self, parent): fsui.Panel.__init__(self, parent) Skin.set_background_color(self) self.layout = fsui.VerticalLayout() hor_layout = fsui.HorizontalLayout() self.layout.add(hor_layout, fill=True) label = fsui.HeadingLabel(self, _("Games and Configurations")) hor_layout.add(label, margin=10) hor_layout.add_spacer(0, expand=True) self.filters_label = fsui.Label(self, _("Filters:")) hor_layout.add(self.filters_label, margin=10, margin_top=0, margin_bottom=0) self.text_field = fsui.TextField(self, Settings.get("config_search")) self.text_field.on_change = self.on_search_change if VariantsBrowser.use_horizontal_layout(): # window is big enough to use fixed size self.text_field.set_min_width(210) hor_layout.add(self.text_field, expand=False, margin=10, margin_top=0, margin_bottom=0) else: hor_layout.add(self.text_field, expand=True, margin=10, margin_top=0, margin_bottom=0) #self.favorite_button = IconButton(self, "favorite_button.png") #self.favorite_button.set_tooltip( # _("Show Only Favorites (On/Off)")) #self.favorite_button.disable() #self.favorite_button.on_activate = self.on_favorite_button #hor_layout.add(self.favorite_button, # margin=10, margin_top=0, margin_bottom=0) #self.verified_button = IconButton(self, "ok_button.png") #self.verified_button.set_tooltip( # _("Show Only Verified Configurations (On/Off)")) #self.verified_button.disable() #self.verified_button.on_activate = self.on_verified_button #hor_layout.add(self.verified_button, # margin=10, margin_top=0, margin_bottom=0) if Settings.get("database_feature") == "1": self.refresh_button = IconButton(self, "refresh_button.png") self.refresh_button.set_tooltip( _("Refresh game configurations from database")) self.refresh_button.on_activate = self.on_refresh_button hor_layout.add(self.refresh_button, margin=10, margin_top=0, margin_bottom=0) if VariantsBrowser.use_horizontal_layout(): hori_layout = fsui.HorizontalLayout() self.layout.add(hori_layout, fill=True, expand=True, margin=10) self.configurations_browser = ConfigurationsBrowser(self) if VariantsBrowser.use_horizontal_layout(): hori_layout.add(self.configurations_browser, fill=True, expand=2) else: self.layout.add(self.configurations_browser, fill=True, expand=3, margin=10) if Settings.get("database_feature") == "1": self.variants_browser = VariantsBrowser(self) if VariantsBrowser.use_horizontal_layout(): hori_layout.add(self.variants_browser, fill=True, expand=1, margin_left=18) #self.variants_browser.set_min_width(Constants.SCREEN_SIZE[0]) self.variants_browser.set_min_width(72) #self.variants_browser.set_min_width(0) else: self.layout.add(self.variants_browser, fill=True, expand=1, margin=10, margin_top=20) else: self.variants_browser = None Settings.add_listener(self) self.on_setting("parent_uuid", Settings.get("parent_uuid")) def on_destroy(self): Settings.remove_listener(self) def on_setting(self, key, value): if key == "parent_uuid": if self.variants_browser is not None: if VariantsBrowser.use_horizontal_layout(): show = bool(value) self.variants_browser.show(show) self.layout.update() else: # always show variants list pass def on_verified_button(self): pass def on_favorite_button(self): pass def on_refresh_button(self): dialog = ScanDialog.refresh_game_database(self.get_window()) dialog.show_modal() dialog.destroy() def on_search_change(self): text = self.text_field.get_text() Settings.set("config_search", text) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/settings/0000755000175000017500000000000012162366654023255 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/settings/GameDatabaseSettingsPage.py0000644000175000017500000000162212162366654030444 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import fs_uae_launcher.fsui as fsui from ...I18N import _, ngettext from .OptionUI import OptionUI class GameDatabaseSettingsPage(fsui.Panel): def __init__(self, parent): fsui.Panel.__init__(self, parent) self.layout = fsui.VerticalLayout() self.layout.padding_left = 10 self.layout.padding_right = 10 self.layout.padding_top = 10 self.layout.padding_bottom = 20 label = fsui.HeadingLabel(self, _("Game Database Settings")) self.layout.add(label, margin=10, margin_bottom=20) def add_option(name): self.layout.add(OptionUI.create_group(self, name), fill=True, margin=10) add_option("database_username") add_option("database_password") fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/settings/SettingsDialog.py0000644000175000017500000000412012162366654026544 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import fs_uae_launcher.fsui as fsui from ...I18N import _, ngettext from ...Settings import Settings from ...Signal import Signal from ..PagedDialog import PagedDialog from .AudioSettingsPage import AudioSettingsPage #from .CustomSettingsPage import CustomSettingsPage from .ExperimentalFeaturesPage import ExperimentalFeaturesPage from .FilterSettingsPage import FilterSettingsPage from .GameDatabaseSettingsPage import GameDatabaseSettingsPage from .InputSettingsPage import InputSettingsPage from .JoystickSettingsPage import JoystickSettingsPage from .NetplaySettingsPage import NetplaySettingsPage from .ScanSettingsPage import ScanSettingsPage from .VideoSettingsPage import VideoSettingsPage class SettingsDialog(PagedDialog): def __init__(self, parent, index=0): PagedDialog.__init__(self, parent, _("FS-UAE Launcher Settings")) self.add_page(_("Joystick Settings"), JoystickSettingsPage) self.add_page(_("Scan & Indexing"), ScanSettingsPage) self.add_page(_("Input Settings"), InputSettingsPage) self.add_page(_("Audio Settings"), AudioSettingsPage) self.add_page(_("Video Settings"), VideoSettingsPage) self.add_page(_("Filters & Scaling"), FilterSettingsPage) #self.add_page(_("OpenGL Settings"), OpenGLSettingsPage) self.add_page(_("Experimental Features"), ExperimentalFeaturesPage) if Settings.get("netplay_feature") == "1": self.add_page(_("Net Play Settings"), NetplaySettingsPage) if Settings.get("database_feature") == "1": self.add_page(_("Game Database"), GameDatabaseSettingsPage) #self.add_page(_("Custom Settings"), CustomSettingsPage) self.list_view.set_index(index) self.set_size((900, 540)) self.center_on_parent() @classmethod def run(cls, parent, index=0): dialog = cls(parent, index) dialog.show_modal() dialog.close() Signal.broadcast("settings_updated") fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/settings/AudioSettingsPage.py0000644000175000017500000000153412162366654027211 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import fs_uae_launcher.fsui as fsui from ...I18N import _, ngettext from .OptionUI import OptionUI class AudioSettingsPage(fsui.Panel): def __init__(self, parent): fsui.Panel.__init__(self, parent) self.layout = fsui.VerticalLayout() self.layout.padding_left = 10 self.layout.padding_right = 10 self.layout.padding_top = 10 self.layout.padding_bottom = 20 def add_option(name): self.layout.add(OptionUI.create_group(self, name), fill=True, margin=10) label = fsui.HeadingLabel(self, _("Audio Settings")) self.layout.add(label, margin=10, margin_bottom=20) add_option("floppy_drive_volume") fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/settings/OptionUI.py0000644000175000017500000000765212162366654025347 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import fs_uae_launcher.fsui as fsui from ...I18N import _, ngettext from ...Settings import Settings from ...Signal import Signal from ...Options import Options class OptionUI: @classmethod def create_group(cls, parent, name): group = fsui.Group(parent) group.layout = fsui.HorizontalLayout() option = Options.get(name) label = fsui.Label(group, _(option["description"])) group.layout.add(label, margin_right=20) choice_values = [] if option["type"] == "boolean": if option["default"] == "1": default_desc = _("Default ({0})").format(_("On")) elif option["default"] == "0": default_desc = _("Default ({0})").format(_("Off")) else: default_desc = _("Default") choice_values.append(("", default_desc)) choice_values.append(("1", _("On"))) choice_values.append(("0", _("Off"))) elif option["type"] == "choice": for i, value in enumerate(option["values"]): if option["default"] == value[0]: default_desc = _("Default ({0})").format(_(value[1])) break else: default_desc = _("Default") choice_values.append(("", default_desc)) for option in option["values"]: choice_values.append((option[0], _(option[1]))) elif option["type"] == "string": def on_change(): value = text_field.get_text() Settings.set(name, value.strip()) text_field = fsui.TextField(group) #text_field.set_min_width(400) text_field.set_text(Settings.get(name)) text_field.on_change = on_change group.layout.add(text_field, expand=True) elif option["type"] == "integer" and "min" in option \ and "max" in option: current = Settings.get(name) current_int = int(option["default"]) if current: try: current_int = int(current) except ValueError: pass current_int = max(option["min"], min(option["max"], current_int)) check_box = fsui.CheckBox(group, _("Default")) spin_ctrl = fsui.SpinCtrl(group, option["min"], option["max"], current_int) if current == "": check_box.check() spin_ctrl.disable() def on_checkbox(): if check_box.is_checked(): spin_ctrl.SetValue(int(option["default"])) spin_ctrl.disable() Settings.set(name, "") else: spin_ctrl.enable() check_box.on_change = on_checkbox def on_spin(): value = spin_ctrl.GetValue() value = max(option["min"], min(option["max"], value)) Settings.set(name, str(value)) spin_ctrl.on_change = on_spin group.layout.add_spacer(0, expand=True) group.layout.add(check_box) group.layout.add(spin_ctrl, margin_left=10) if choice_values: def on_change(): index = choice.get_index() Settings.set(name, choice_values[index][0]) choice_labels = [x[1] for x in choice_values] choice = fsui.Choice(group, choice_labels) current = Settings.get(name) for i, value in enumerate(choice_values): if current == value[0]: choice.set_index(i) break choice.on_change = on_change group.layout.add_spacer(0, expand=True) group.layout.add(choice) return group fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/settings/ScanPathsGroup.py0000644000175000017500000001207512162366654026535 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import os import traceback import fs_uae_launcher.fsui as fsui from ...I18N import _, ngettext from ...Settings import Settings from ..IconButton import IconButton class ScanPathsGroup(fsui.Group): def __init__(self, parent): fsui.Group.__init__(self, parent) self.layout = fsui.HorizontalLayout() self.layout.padding_left = 10 self.layout.padding_top = 10 self.layout.padding_right = 10 self.layout.padding_bottom = 10 image = fsui.Image("fs_uae_launcher:res/search_group.png") self.image_view = fsui.ImageView(self, image) self.layout.add_spacer(20) self.layout.add(self.image_view, valign=0.0) self.layout.add_spacer(20) self.layout2 = fsui.VerticalLayout() self.layout.add(self.layout2, fill=True, expand=True) hlayout = fsui.HorizontalLayout() self.layout2.add(hlayout, fill=True) self.list_view = fsui.ListView(self) self.list_view.set_min_height(130) self.list_view.set_default_icon(fsui.Image( "fs_uae_launcher:res/folder_16.png")) hlayout.add(self.list_view, expand=True, fill=True) hlayout.add_spacer(10) vlayout = fsui.VerticalLayout() hlayout.add(vlayout, fill=True) add_button = IconButton(self, "add_button.png") add_button.set_tooltip(_("Add Directory to Search Path")) #add_button.disable() add_button.on_activate = self.on_add_button vlayout.add(add_button) vlayout.add_spacer(10) self.remove_button = IconButton(self, "remove_button.png") self.remove_button.set_tooltip(_("Remove Directory from Search Path")) self.remove_button.disable() self.remove_button.on_activate = self.on_remove_button vlayout.add(self.remove_button) self.list_view.set_items(self.get_search_path()) self.list_view.on_select_item = self.on_select_item Settings.add_listener(self) def on_destroy(self): Settings.remove_listener(self) def on_setting(self, key, value): if key == "search_path": self.repopulate_list() def on_select_item(self, index): self.remove_button.enable() def repopulate_list(self): #paths = self.get_search_path() self.list_view.set_items(self.get_search_path()) @classmethod def get_search_path(cls): paths = Settings.get_default_search_path() search_path = Settings.get("search_path") for p in search_path.split(u";"): p = p.strip() if not p: continue elif p[0] == "-": p = p[1:] if p in paths: paths.remove(p) else: if not p in paths: paths.append(p) return paths def on_change(self): value = "1" if self.scan_roms.is_checked() else "0" Settings.set("scan_roms", value) value = "1" if self.scan_files.is_checked() else "0" Settings.set("scan_files", value) value = "1" if self.scan_configs.is_checked() else "0" Settings.set("scan_configs", value) def on_add_button(self): paths = self.get_search_path() #search_path = Settings.get("search_path") search_path = Settings.get("search_path") search_path = [x.strip() for x in search_path.split(u";") if x.strip()] dialog = fsui.DirDialog(self.get_window()) if dialog.show_modal(): path = dialog.get_path() for i in range(len(search_path)): if search_path[i].startswith("-"): if path == search_path[i][1:]: search_path.remove(search_path[i]) break else: if search_path[i] == path: # already added break else: default_paths = Settings.get_default_search_path() if path not in default_paths: search_path.append(path) Settings.set("search_path", u";".join(search_path)) dialog.destroy() def on_remove_button(self): path = self.list_view.get_item(self.list_view.get_index()) #search_path = self.get_search_path() search_path = Settings.get("search_path") search_path = [x.strip() for x in search_path.split(u";") if x.strip()] for i in range(len(search_path)): if search_path[i].startswith("-"): if path == search_path[i][1:]: # already removed break else: if search_path[i] == path: search_path.remove(search_path[i]) break default_paths = Settings.get_default_search_path() if path in default_paths: search_path.append(u"-" + path) Settings.set("search_path", u";".join(search_path)) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/settings/NetplaySettingsPage.py0000644000175000017500000000163212162366654027563 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import fs_uae_launcher.fsui as fsui from ...I18N import _, ngettext from .OptionUI import OptionUI class NetplaySettingsPage(fsui.Panel): def __init__(self, parent): fsui.Panel.__init__(self, parent) self.layout = fsui.VerticalLayout() self.layout.padding_left = 10 self.layout.padding_right = 10 self.layout.padding_top = 10 self.layout.padding_bottom = 20 label = fsui.HeadingLabel(self, _("Net Play Settings")) self.layout.add(label, margin=10, margin_bottom=20) def add_option(name): self.layout.add(OptionUI.create_group(self, name), fill=True, margin=10) add_option("irc_nick") add_option("netplay_tag") add_option("irc_server") fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/settings/FullscreenToggleButton.py0000644000175000017500000000252612162366654030274 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import fs_uae_launcher.fsui as fsui from ...I18N import _, ngettext from ...Settings import Settings class FullscreenToggleButton(fsui.ImageButton): def __init__(self, parent): self.windowed_icon = fsui.Image("fs_uae_launcher:res/windowed_16.png") self.fullscreen_icon = fsui.Image( "fs_uae_launcher:res/fullscreen_16.png") fsui.ImageButton.__init__(self, parent, self.windowed_icon) self.set_tooltip(_("Toggle Between Windowed and Full-Screen Mode")) self.set_min_width(40) self.fullscreen_mode = False self.on_setting("fullscreen", Settings.get("fullscreen")) Settings.add_listener(self) def on_destroy(self): Settings.remove_listener(self) def on_setting(self, key, value): if key == "fullscreen": if value == "1": self.fullscreen_mode = True self.set_image(self.fullscreen_icon) else: self.fullscreen_mode = False self.set_image(self.windowed_icon) def on_activate(self): if self.fullscreen_mode: Settings.set("fullscreen", "0") else: Settings.set("fullscreen", "1") fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/settings/ScanSettingsPage.py0000644000175000017500000000233612162366654027035 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import fs_uae_launcher.fsui as fsui from ...Config import Config from ...I18N import _, ngettext from ...Settings import Settings from .ScanPathsGroup import ScanPathsGroup from .OptionUI import OptionUI class ScanSettingsPage(fsui.Panel): def __init__(self, parent): fsui.Panel.__init__(self, parent) self.layout = fsui.VerticalLayout() self.layout.padding_left = 10 self.layout.padding_right = 10 self.layout.padding_top = 10 self.layout.padding_bottom = 20 label = fsui.HeadingLabel(self, _("List of Folders to Index")) self.layout.add(label, margin=10) self.scan_paths_group = ScanPathsGroup(self) self.layout.add(self.scan_paths_group, fill=True) label = fsui.HeadingLabel(self, _("Additional Options")) self.layout.add(label, margin=10, margin_bottom=20) def add_option(name): self.layout.add(OptionUI.create_group(self, name), fill=True, margin=10) add_option("builtin_configs") #add_option("kickstart_setup") fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/settings/OpenGLSettingsPage.py0000644000175000017500000000170212162366654027271 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import fs_uae_launcher.fsui as fsui from ...I18N import _, ngettext from .OptionUI import OptionUI class OpenGLSettingsPage(fsui.Panel): def __init__(self, parent): fsui.Panel.__init__(self, parent) self.layout = fsui.VerticalLayout() self.layout.padding_left = 10 self.layout.padding_right = 10 self.layout.padding_top = 10 self.layout.padding_bottom = 20 label = fsui.HeadingLabel(self, _("OpenGL Settings")) self.layout.add(label, margin=10, margin_bottom=20) def add_option(name): self.layout.add(OptionUI.create_group(self, name), fill=True, margin=10) add_option("fsaa") add_option("texture_filter") add_option("video_sync_method") add_option("texture_format") fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/settings/VideoSettingsPage.py0000644000175000017500000000253512162366654027220 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import fs_uae_launcher.fsui as fsui from ...I18N import _, ngettext from .OptionUI import OptionUI class VideoSettingsPage(fsui.Panel): def __init__(self, parent): fsui.Panel.__init__(self, parent) self.layout = fsui.VerticalLayout() self.layout.padding_left = 10 self.layout.padding_right = 10 self.layout.padding_top = 10 self.layout.padding_bottom = 20 label = fsui.HeadingLabel(self, _("Video Settings")) self.layout.add(label, margin=10, margin_bottom=20) def add_option(name): self.layout.add(OptionUI.create_group(self, name), fill=True, margin=10) add_option("fullscreen") #add_option("zoom") #add_option("keep_aspect") #add_option("scanlines") #add_option("rtg_scanlines") add_option("video_format") add_option("video_sync") add_option("low_latency_vsync") label = fsui.HeadingLabel(self, _("OpenGL Settings")) self.layout.add(label, margin=10, margin_top=20, margin_bottom=20) add_option("fsaa") add_option("texture_filter") add_option("video_sync_method") add_option("texture_format") fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/settings/FilterSettingsPage.py0000644000175000017500000000220412162366654027370 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import fs_uae_launcher.fsui as fsui from ...I18N import _, ngettext from .OptionUI import OptionUI class FilterSettingsPage(fsui.Panel): def __init__(self, parent): fsui.Panel.__init__(self, parent) self.layout = fsui.VerticalLayout() self.layout.padding_left = 10 self.layout.padding_right = 10 self.layout.padding_top = 10 self.layout.padding_bottom = 20 label = fsui.HeadingLabel(self, _("Scaling Options")) self.layout.add(label, margin=10, margin_bottom=20) def add_option(name): self.layout.add(OptionUI.create_group(self, name), fill=True, margin=10) add_option("zoom") add_option("keep_aspect") label = fsui.HeadingLabel(self, _("Filters")) self.layout.add(label, margin=10, margin_top=20, margin_bottom=20) add_option("scanlines") add_option("rtg_scanlines") # FIXME: gamma # FIXME: brightness / contrast / saturation fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/settings/__init__.py0000644000175000017500000000000012162366654025354 0ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/settings/JoystickSettingsPage.py0000644000175000017500000000176112162366654027751 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import os import sys import subprocess import fs_uae_launcher.fsui as fsui from ...Config import Config from ...I18N import _, ngettext from ...Settings import Settings class JoystickSettingsPage(fsui.Panel): def __init__(self, parent): fsui.Panel.__init__(self, parent) self.layout = fsui.VerticalLayout() self.layout.padding_top = 20 #self.layout.padding_right = 20 self.layout.padding_bottom = 20 from .PreferredJoysticksGroup import PreferredJoysticksGroup self.pref_group = PreferredJoysticksGroup(self) self.layout.add(self.pref_group, fill=True) self.layout.add_spacer(20) from .JoystickSettingsGroup import JoystickSettingsGroup self.joystick_settings_group = JoystickSettingsGroup(self) self.layout.add(self.joystick_settings_group, fill=True) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/settings/PreferredJoysticksGroup.py0000644000175000017500000000635412162366654030475 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import os import sys import subprocess import fs_uae_launcher.fsui as fsui from ...Config import Config from ...DeviceManager import DeviceManager from ...I18N import _, ngettext from ...Settings import Settings joystick_mode_values = ["nothing", "mouse", "joystick"] joystick_mode_titles = [_("Nothing"), _("Mouse"), _("Joystick")] joystick_values = ["none", "mouse", "keyboard"] class PreferredJoysticksGroup(fsui.Group): def __init__(self, parent): fsui.Group.__init__(self, parent) self.layout = fsui.HorizontalLayout() self.layout.padding_left = 20 self.layout.padding_right = 20 image = fsui.Image("fs_uae_launcher:res/joystick.png") self.image_view = fsui.ImageView(self, image) self.layout.add(self.image_view, valign=0.0) self.layout.add_spacer(20) self.layout2 = fsui.VerticalLayout() self.layout.add(self.layout2, fill=True, expand=True) heading = _("Preferred Joystick") label = fsui.HeadingLabel(self, heading) self.layout2.add(label) #self.layout2.add_spacer(10) #label = fsui.Label(self, _("Preferred device for primary joystick:")) #self.layout2.add(label) self.layout2.add_spacer(10) selector = PreferredJoystickSelector(self, 0) self.layout2.add(selector, fill=True) self.layout2.add_spacer(10) label = fsui.Label(self, _("Preferred device for secondary joystick:")) self.layout2.add(label) self.layout2.add_spacer(10) selector = PreferredJoystickSelector(self, 1) self.layout2.add(selector, fill=True) class PreferredJoystickSelector(fsui.Group): def __init__(self, parent, index): self.index = index if index: self.key = "secondary_joystick" else: self.key = "primary_joystick" fsui.Group.__init__(self, parent) self.layout = fsui.HorizontalLayout() devices = [] devices.append(get_keyboard_title()) for i, name in enumerate(DeviceManager.get_joystick_names()): devices.append(name) self.device_choice = fsui.ComboBox(self, devices) self.layout.add(self.device_choice, expand=True) #Config.add_listener(self) self.initialize_from_settings() self.set_settings_handlers() def initialize_from_settings(self): self.on_setting(self.key, Settings.get(self.key)) def set_settings_handlers(self): self.device_choice.on_change = self.on_device_change Settings.add_listener(self) def on_destroy(self): Settings.remove_listener(self) def on_device_change(self): value = self.device_choice.get_text() print("on_device_change", value) if value == get_keyboard_title(): value = "keyboard" Settings.set(self.key, value) def on_setting(self, key, value): if key == self.key: if value == "keyboard": value = get_keyboard_title() self.device_choice.set_text(value) def get_keyboard_title(): return _("Cursor Keys and Right Ctrl/Alt") fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/settings/CustomSettingsPage.py0000644000175000017500000000677112162366654027432 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import hashlib import fs_uae_launcher.fsui as fsui from ...Config import Config from ...I18N import _, ngettext from ...Settings import Settings class CustomSettingsPage(fsui.Panel): def __init__(self, parent): fsui.Panel.__init__(self, parent) self.layout = fsui.VerticalLayout() self.layout.add_spacer(580, 20) hor_layout = fsui.HorizontalLayout() self.layout.add(hor_layout, fill=True, expand=True) hor_layout.add_spacer(20) self.text_area = fsui.TextArea(self, font_family="monospace") self.text_area.set_min_height(400) self.text_area.set_text(self.get_initial_text()) hor_layout.add(self.text_area, fill=True, expand=True) hor_layout.add_spacer(20) self.layout.add_spacer(20) #hor_layout = fsui.HorizontalLayout() #self.layout.add(hor_layout, fill=True) #hor_layout.add_spacer(20, expand=True) #self.close_button = fsui.Button(self, _("Close")) #self.close_button.on_activate = self.on_close_button #hor_layout.add(self.close_button) #hor_layout.add_spacer(20) #self.layout.add_spacer(20) #self.set_size(self.layout.get_min_size()) #self.center_on_parent() self.get_window().add_close_listener(self.on_close_window) def on_close_window(self): self.update_settings() #def on_close_button(self): # self.end_modal(0) def update_settings(self): text = self.text_area.get_text() keys = Settings.settings.keys() for key in keys: if key not in Settings.default_settings: del Settings.settings[key] for line in text.split(u"\n"): line = line.strip() if line.startswith("# You can write key = value pairs here"): continue parts = line.split("=", 1) if len(parts) == 2: key = parts[0].strip() #if key in Settings.default_settings: # continue value = parts[1].strip() Settings.set(key, value) def get_initial_text(self): text = DEFAULT_TEXT keys = Settings.settings.keys() for key in sorted(keys): if key in Settings.default_settings: continue # #print("(settings) ignoring key", key) # text += u"# key {0} will be ignored\n".format(key) #if key in Config.config_keys: # print("(settings) ignoring key", key) # continue if key in Config.config_keys: #print("(settings) ignoring key", key) text += u"\n# {0} is ignored here " \ u"(use config dialog instead)\n".format(key) value = Settings.settings[key] text += u"{0} = {1}\n".format(key, value) if key in Config.config_keys: text += u"\n" return text DEFAULT_TEXT = """# Custom Settings # # You can write key = value pairs here to set FS-UAE options for which there # are no user interface yet. This is only a temporary feature until the GUI # supports all options directly. # # The options specified here are global and will apply to all configurations. # (config options such as hardware and memory options will be ignored) # # Options suitable here are options like theme options. """ fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/settings/InputSettingsPage.py0000644000175000017500000000241412162366654027245 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import fs_uae_launcher.fsui as fsui from ...I18N import _, ngettext from .OptionUI import OptionUI class InputSettingsPage(fsui.Panel): def __init__(self, parent): fsui.Panel.__init__(self, parent) self.layout = fsui.VerticalLayout() self.layout.padding_left = 10 self.layout.padding_right = 10 self.layout.padding_top = 10 self.layout.padding_bottom = 20 def add_option(name): self.layout.add(OptionUI.create_group(self, name), fill=True, margin=10) label = fsui.HeadingLabel(self, _("Input Settings")) self.layout.add(label, margin=10, margin_bottom=20) add_option("automatic_input_grab") add_option("initial_input_grab") label = fsui.HeadingLabel(self, _("Mouse Settings")) self.layout.add(label, margin=10, margin_top=20, margin_bottom=20) add_option("mouse_speed") add_option("middle_click_ungrab") label = fsui.HeadingLabel(self, _("Keyboard Settings")) self.layout.add(label, margin=10, margin_top=20, margin_bottom=20) add_option("swap_ctrl_keys") fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/settings/FullscreenCheckBox.py0000644000175000017500000000146612162366654027347 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import fs_uae_launcher.fsui as fsui from ...I18N import _, ngettext from ...Settings import Settings class FullscreenCheckBox(fsui.CheckBox): def __init__(self, parent): fsui.CheckBox.__init__(self, parent, _("Fullscreen")) self.on_setting("fullscreen", Settings.get("fullscreen")) Settings.add_listener(self) def on_destroy(self): Settings.remove_listener(self) def on_setting(self, key, value): if key == "fullscreen": self.check(value == "1") def on_change(self): if self.is_checked(): Settings.set("fullscreen", "1") else: Settings.set("fullscreen", "0") fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/settings/ExperimentalFeaturesPage.py0000644000175000017500000000161612162366654030564 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import fs_uae_launcher.fsui as fsui from ...I18N import _, ngettext from .OptionUI import OptionUI class ExperimentalFeaturesPage(fsui.Panel): def __init__(self, parent): fsui.Panel.__init__(self, parent) self.layout = fsui.VerticalLayout() self.layout.padding_left = 10 self.layout.padding_right = 10 self.layout.padding_top = 10 self.layout.padding_bottom = 20 label = fsui.HeadingLabel(self, _("Experimental Features")) self.layout.add(label, margin=10, margin_bottom=20) def add_option(name): self.layout.add(OptionUI.create_group(self, name), fill=True, margin=10) add_option("netplay_feature") add_option("database_feature") fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/settings/JoystickSettingsGroup.py0000644000175000017500000000306112162366654030164 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import os import sys import subprocess import fs_uae_launcher.fsui as fsui from ...I18N import _, ngettext class JoystickSettingsGroup(fsui.Group): def __init__(self, parent): fsui.Group.__init__(self, parent) self.layout = fsui.HorizontalLayout() self.layout.padding_left = 20 self.layout.padding_right = 20 image = fsui.Image("fs_uae_launcher:res/joystick.png") self.image_view = fsui.ImageView(self, image) self.layout.add(self.image_view, valign=0.0) self.layout.add_spacer(20) self.layout2 = fsui.VerticalLayout() self.layout.add(self.layout2, fill=True, expand=True) heading = _("Joystick Configuration") label = fsui.HeadingLabel(self, heading) self.layout2.add(label) self.layout2.add_spacer(10) self.gamepad_config_button = fsui.Button(self, _("Configure Joystick Buttons")) self.gamepad_config_button.set_tooltip( _("Open Tool to Configure Button Mapping")) self.gamepad_config_button.on_activate = self.on_gamepad_config_button self.layout2.add(self.gamepad_config_button) self.layout.add_spacer(10) def on_gamepad_config_button(self): args = [sys.executable] + sys.argv[:] args.append("--joystick-config") print("start gamepad config, args =", args) subprocess.Popen(args, close_fds=True) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/RemovableMediaGroup.py0000644000175000017500000000255512162366654025667 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import os import fs_uae_launcher.fsui as fsui from ..Amiga import Amiga from ..Config import Config from ..CDManager import CDManager from ..FloppyManager import FloppyManager from ..I18N import _, ngettext from ..Settings import Settings from .IconButton import IconButton from .FloppiesGroup import FloppiesGroup class RemovableMediaGroup(FloppiesGroup): def __init__(self, parent, drives): FloppiesGroup.__init__(self, parent, drives) self.layout3 = fsui.HorizontalLayout() self.layout.add(self.layout3, fill=True) self.layout3.add_spacer(0, expand=True) self.cd_mode = False self.update_media_type() Config.add_listener(self) def on_destroy(self): Config.remove_listener(self) def on_config(self, key, value): if key == "amiga_model": self.update_media_type() def update_media_type(self): self.set_cd_mode(Amiga.is_cd_based()) def set_cd_mode(self, cd_mode): if self.cd_mode == cd_mode: return self.cd_mode = cd_mode for selector in self.selectors: selector.set_cd_mode(cd_mode) self.update_heading_label() self.selectors[1].enable(not self.cd_mode) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/TabPanel.py0000644000175000017500000001234112162366654023456 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import fs_uae_launcher.fsui as fsui from .Constants import Constants from .Skin import Skin class TabPanel(fsui.Panel): def __init__(self, parent, spacing=10): fsui.Panel.__init__(self, parent, paintable=True) Skin.set_background_color(self) self.layout = fsui.HorizontalLayout() #self.layout.add_spacer(spacing) #self.layout.padding_left = 10 #self.layout.padding_right = 10 #self.set_background_color((0xdd, 0xdd, 0xdd)) self.set_min_height(Constants.TAB_HEIGHT) def select_tab(self, index): counter = 0 for child in self.layout.children: child = child.element if hasattr(child, "type"): if child.type == child.TYPE_TAB: if counter == index: child.select() counter = counter + 1 def set_selected_tab(self, tab): for child in self.layout.children: child = child.element if hasattr(child, "type"): if child.type == child.TYPE_TAB: if child == tab: child.state = child.STATE_SELECTED child.refresh() elif child.state == child.STATE_SELECTED: if child.group_id == tab.group_id: child.state = child.STATE_NORMAL child.refresh() def add(self, button, expand=False): self.layout.add(button, expand=expand) def add_spacer(self, spacer=0, expand=False): self.layout.add_spacer(spacer, 0, expand=expand) def on_paint(self): dc = self.create_dc() self.draw_background(self, dc) #self.draw_border(self, dc) @classmethod def draw_border(cls, widget, dc): size = widget.size line_color_1 = Skin.get_background_color() if line_color_1 is not None: line_color_1 = line_color_1.mix(fsui.Color(0xff, 0xff, 0xff)) line_color_2 = line_color_1 else: line_color_1 = fsui.Color(0xff, 0xff, 0xff, 0xa0) line_color_2 = line_color_1 #line_color_1 = fsui.Color(0xff, 0x00, 0x00, 0xff) #line_color_2 = fsui.Color(0x00, 0xff, 0x00, 0xff) dc.draw_line(0, size[1] - 2, size[0], size[1] - 2, line_color_1) dc.draw_line(0, size[1] - 1, size[0], size[1] - 1, line_color_2) @classmethod def draw_background(cls, widget, dc, selected=False, hover=False, button_style=True): if selected: cls.draw_selected_tab(widget, dc) else: cls.draw_border(widget, dc) size = widget.size x = 0 y = 0 w = widget.size[0] h = widget.size[1] - 2 if fsui.System.macosx: dc.draw_line(0, 0, w, 0, fsui.Color(198, 198, 198)) y += 1 h -= 1 if selected: x += 2 w -= 4 h += 2 #if button_style and hover: # x += 6 # y += 6 # w -= 12 # h -= 12 color_1 = Skin.get_background_color() if fsui.System.macosx: if selected: color_2 = color_1 color_1 = fsui.Color(0xa7, 0xa7, 0xa7) elif hover: color_1 = fsui.Color(0xa7, 0xa7, 0xa7) color_2 = fsui.Color(0xef, 0xef, 0xef) else: color_1 = fsui.Color(0xa7, 0xa7, 0xa7) color_2 = fsui.Color(0xcf, 0xcf, 0xcf) elif color_1 is not None: if selected: color_2 = color_1 elif hover: color_2 = color_1.copy().lighten() else: color_2 = color_1.copy().darken(0.08) else: if selected: return #color_1 = fsui.Color(0x00, 0x00, 0x00, 0x00) #color_2 = color_1 elif hover: color_1 = fsui.Color(0xff, 0xff, 0xff, 0x00) color_2 = fsui.Color(0xff, 0xff, 0xff, 0x40) else: color_1 = fsui.Color(0x00, 0x00, 0x00, 0x00) color_2 = fsui.Color(0x00, 0x00, 0x00, 0x20) dc.draw_vertical_gradient(x, y, w, h, color_1, color_2) @classmethod def draw_selected_tab(cls, widget, dc): size = widget.size line_color_1 = Skin.get_background_color() if fsui.System.macosx: line_color_1 = fsui.Color(0xa7, 0xa7, 0xa7) line_color_2 = Skin.get_background_color().mix( fsui.Color(0xff, 0xff, 0xff)) elif line_color_1 is not None: line_color_2 = Skin.get_background_color().mix( fsui.Color(0xff, 0xff, 0xff)) else: line_color_1 = fsui.Color(0xff, 0xff, 0xff, 0x00) line_color_2 = fsui.Color(0xff, 0xff, 0xff, 0xa0) dc.draw_vertical_gradient(0, 0, 2, widget.size[1], line_color_1, line_color_2) dc.draw_vertical_gradient(widget.size[0] - 2, 0, 2, widget.size[1], line_color_1, line_color_2) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/InputPanel.py0000644000175000017500000000175512162366654024056 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import fs_uae_launcher.fsui as fsui from ..Config import Config from ..I18N import _, ngettext from .Skin import Skin class InputPanel(fsui.Panel): def __init__(self, parent): fsui.Panel.__init__(self, parent) Skin.set_background_color(self) self.layout = fsui.VerticalLayout() from .config.InputGroup import InputGroup self.input_group = InputGroup(self, with_more_options=True) self.layout.add(self.input_group, fill=True) self.layout.add_spacer(Skin.EXTRA_GROUP_MARGIN) self.input_group = InputGroup(self, with_more_options=False, parallel_ports=True) self.layout.add(self.input_group, fill=True) self.input_group = InputGroup(self, with_more_options=False, custom_ports=True) self.layout.add(self.input_group, fill=True) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/InfoPanel.py0000644000175000017500000001473012162366654023647 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import fs_uae_launcher.fsui as fsui from ..Amiga import Amiga #from ..Config import Config from ..Database import Database from ..I18N import _, ngettext #from ..Settings import Settings from ..Config import Config from ..Signal import Signal from .SetupDialog import SetupDialog from .Skin import Skin from .TabPanel import TabPanel if fsui.System.macosx: base_class = fsui.Control else: base_class= fsui.Panel class InfoPanel(base_class): def __init__(self, parent, toolbar_mode=False, padding_top=0, padding_bottom=0): base_class.__init__(self, parent, paintable=True) Skin.set_background_color(self) self.update_web_url = "" self.update_version = "" self.toolbar_mode = toolbar_mode self.padding_top = padding_top self.padding_bottom = padding_bottom self.chip_memory_warning = None self.kickstarts_missing = False self.update_available = False self.update_available_icon = fsui.Image("fs_uae_launcher:res/" "update_available_32.png") self.warning_icon = fsui.Image("fs_uae_launcher:res/" "warning_32.png") self.kickstarts_missing_icon = self.warning_icon self.check_kickstarts() #Config.add_listener(self) #Settings.add_listener(self) Signal.add_listener("update_available", self) Signal.add_listener("scan_done", self) Signal.add_listener("config", self) def on_destroy(self): #Config.remove_listener(self) #Settings.remove_listener(self) Signal.remove_listener("config", self) Signal.remove_listener("scan_done", self) Signal.remove_listener("update_available", self) # def on_config(self, key, value): # pass # # def on_setting(self, key, value): # pass def on_config(self, key, value): #print("InfoPanel.on_config", key, value) if key in ["amiga_model", "chip_memory"]: amiga_model = Config.get("amiga_model") try: chip_memory = int(Config.get("chip_memory")) except: chip_memory = "" if chip_memory and chip_memory < 2048 and \ amiga_model in ["A1200", "A1200/020", "A4000/040"]: new_chip_memory_warning = [_("Configuration Warning"), _("{amiga_model} with < 2 MB chip memory" "".format(amiga_model=amiga_model))] else: new_chip_memory_warning = None if new_chip_memory_warning != self.chip_memory_warning: self.chip_memory_warning = new_chip_memory_warning self.refresh() def on_scan_done_signal(self): print("InfoPanel.on_scan_done_signal") self.check_kickstarts() def check_kickstarts(self): # FIXME: instead of this check, check if x_kickstart_sha1 is set # properly when amiga_model / x_kickstart_sha1 changes, so you'' # only get a warning for the Amiga model in question. ok = True database = Database.get_instance() amiga = Amiga.get_model_config("A500") for sha1 in amiga["kickstarts"]: if database.find_file(sha1=sha1): ok = False break self.kickstarts_missing = ok #self.kickstarts_missing = True self.refresh() def on_update_available_signal(self, version, web_url): self.update_available = True self.update_version = version self.update_web_url = web_url self.refresh() def on_left_up(self): if self.kickstarts_missing: dialog = SetupDialog(self.get_window()) dialog.show_modal() dialog.destroy() elif self.update_available: import webbrowser webbrowser.open(self.update_web_url) def on_paint(self): dc = self.create_dc() if not self.toolbar_mode: TabPanel.draw_background(self, dc) if self.chip_memory_warning: self.draw_notification(dc, self.warning_icon, *self.chip_memory_warning) elif self.kickstarts_missing: self.draw_kickstarts_missing_notification(dc) elif self.update_available: self.draw_update_available_notification(dc) def draw_update_available_notification(self, dc): self.draw_notification(dc, self.update_available_icon, _("Update available ({version})").format( version=self.update_version), _("Click here to download")) def draw_kickstarts_missing_notification(self, dc): self.draw_notification(dc, self.kickstarts_missing_icon, _("Kickstart ROMs are missing"), _("Click here to import kickstarts")) def draw_notification(self, dc, icon, text1, text2): available_height = self.size[1] available_height -= self.padding_top + self.padding_bottom y = self.padding_top + (available_height - icon.size[1]) // 2 if fsui.System.macosx: rtl = False else: rtl = True if rtl: right_x = self.size[0] icon_x = right_x - icon.size[0] - 10 dc.draw_image(icon, icon_x, y) right_x = icon_x - 20 font = dc.get_font() font.set_bold(True) dc.set_font(font) tw, th = dc.measure_text(text1) lines_height = th * 2 y = self.padding_top + (available_height - lines_height) // 2 dc.draw_text(text1, right_x - tw, y) y += th font.set_bold(False) dc.set_font(font) tw, th = dc.measure_text(text2) dc.draw_text(text2, right_x - tw, y) else: dc.draw_image(icon, 0, y) x = 50 font = dc.get_font() font.set_bold(True) dc.set_font(font) tw, th = dc.measure_text(text1) lines_height = th * 2 y = self.padding_top + (available_height - lines_height) // 2 #dc.draw_text(text1, right_x - tw, y) dc.draw_text(text1, x, y) y += th font.set_bold(False) dc.set_font(font) tw, th = dc.measure_text(text2) #dc.draw_text(text, right_x - tw, y) dc.draw_text(text2, x, y) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/NetplayPanel.py0000644000175000017500000001167112162366654024371 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import fs_uae_launcher.fsui as fsui from ..Settings import Settings from ..I18N import _, ngettext from ..netplay.IRC import IRC from ..netplay.Netplay import Netplay from ..netplay.IRCBroadcaster import IRCBroadcaster from .Skin import Skin class NetplayPanel(fsui.Panel): def __init__(self, parent): fsui.Panel.__init__(self, parent) Skin.set_background_color(self) self.layout = fsui.VerticalLayout() hori_layout = fsui.HorizontalLayout() self.layout.add(hori_layout, fill=True) self.layout.add_spacer(0) label = fsui.HeadingLabel(self, _("Net Play")) hori_layout.add(label, margin=10) hori_layout.add_spacer(0, expand=True) # TODO _("Nick:") _("Connect") _("Disconnect") """ self.nick_label = fsui.Label(self, _("Nick:")) hori_layout.add(self.nick_label, margin=10, margin_top=0, margin_bottom=0) self.nick_field = fsui.TextField(self, Settings.get("irc_nick")) self.nick_field.set_min_width(130) hori_layout.add(self.nick_field, margin_right=10) #self.nick_field.on_change = self.on_nick_change self.connect_button = fsui.Button(self, _("Connect")) hori_layout.add(self.connect_button, margin_right=10) #self.connect_button.on_activate = self.on_connect_button self.disconnect_button = fsui.Button(self, _("Disconnect")) hori_layout.add(self.disconnect_button, margin_right=10) #self.disconnect_button.on_activate = self.on_disconnect_button """ hori_layout = fsui.HorizontalLayout() self.layout.add(hori_layout, fill=True, expand=True) self.text_area = fsui.TextArea(self, font_family="monospace") hori_layout.add(self.text_area, fill=True, expand=True, margin=10, margin_right=0) ver_layout = fsui.VerticalLayout() hori_layout.add(ver_layout, fill=True) self.channel_list = fsui.ListView(self) self.channel_list.set_min_width(212) self.channel_list.on_select_item = self.on_select_channel ver_layout.add(self.channel_list, fill=True, expand=True, margin=10) #ver_layout.add_spacer(6) self.nick_list = fsui.ListView(self) ver_layout.add(self.nick_list, fill=True, expand=True, margin=10) #self.layout.add_spacer(6) self.input_field = fsui.TextField(self) self.input_field.on_activate = self.on_input self.layout.add(self.input_field, fill=True, margin=10, margin_top=0) #self.layout.add_spacer(20) # FIXME: should not be hardcoded here self.active_channel = "#lobby" IRCBroadcaster.add_listener(self) def on_show(self): if not Netplay.is_connected(): Netplay.connect() self.input_field.focus() def on_select_channel(self, index): #index = self.channel_list.get_index() #if index == 0: # channel = "" #else: channel = self.channel_list.get_item(index) IRC.set_active_channel(channel) self.input_field.focus() def on_input(self): command = self.input_field.get_text().strip() if not command: return if Netplay.handle_command(command): pass else: IRC.handle_command(command) self.input_field.set_text("") def set_active_channel(self, channel): if channel == self.active_channel: return self.text_area.set_text("") #self.text_area.append_text(IRC.channel(channel).get_text()) ch = IRC.channel(channel) for i, line in enumerate(ch.lines): self.text_area.append_text(line, ch.colors[i]) self.active_channel = channel self.update_nick_list() for i in range(self.channel_list.get_item_count()): if self.channel_list.get_item(i) == channel: self.channel_list.set_index(i) def update_channel_list(self): items = sorted(IRC.channels.keys()) #items[0] = u"IRC ({0})".format(Settings.get_irc_server()) #items[0] = Settings.get_irc_server() self.channel_list.set_items(items) def update_nick_list(self): items = IRC.channel(self.active_channel).get_nick_list() self.nick_list.set_items(items) def on_irc(self, key, args): if key == "active_channel": self.set_active_channel(args["channel"]) elif key == "nick_list": if args["channel"] == self.active_channel: self.update_nick_list() elif key == "channel_list": self.update_channel_list() elif key == "message": if args["channel"] == self.active_channel: self.text_area.append_text(args["message"], color=args["color"]) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/TabButton.py0000644000175000017500000000472212162366654023676 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import fs_uae_launcher.fsui as fsui from .Constants import Constants from .Skin import Skin from .TabPanel import TabPanel class TabButton(fsui.Panel): TYPE_TAB = 0 TYPE_BUTTON = 1 STATE_NORMAL = 0 STATE_SELECTED = 1 def __init__(self, parent, icon, type=TYPE_TAB, left_padding=0, right_padding=0): fsui.Panel.__init__(self, parent, paintable=True) Skin.set_background_color(self) self.layout = fsui.VerticalLayout() #self.set_background_color((0xdd, 0xdd, 0xdd)) self.set_min_width(Constants.TAB_WIDTH + left_padding + right_padding) self.set_min_height(Constants.TAB_HEIGHT) self.group_id = 0 self.icon = icon self.type = type self.state = self.STATE_NORMAL self.hover = False self.left_padding = left_padding self.right_padding = right_padding def select(self): self.get_parent().set_selected_tab(self) self.on_select() def on_paint(self): dc = self.create_dc() selected = (self.state == self.STATE_SELECTED) TabPanel.draw_background(self, dc, selected=selected, hover=self.hover, button_style=(self.type == self.TYPE_BUTTON)) #TabPanel.draw_border(self, dc) x = self.left_padding + (self.size[0] - self.left_padding - \ self.right_padding - self.icon.size[0]) // 2 # subtracing two because of bottom border y = (self.size[1] - 2 - self.icon.size[1]) // 2 dc.draw_image(self.icon, x, y) def check_hover(self): # FIXME: check if mouse is hovering, used for example after having # dismissed a popup menu self.hover = False self.refresh() def on_mouse_enter(self): self.hover = True self.refresh() def on_mouse_leave(self): self.hover = False self.refresh() def on_select(self): pass def on_left_down(self): if self.type == self.TYPE_TAB: self.select() def on_left_up(self): if self.type == self.TYPE_BUTTON: # FIXME: hack to avoid sticky hover due to mouse leave not # being sent if on_activate opens modal dialog #self.hover = False #self.refresh() self.on_activate() def on_activate(self): pass fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/LaunchDialog.py0000644000175000017500000000555612162366654024334 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import threading import traceback import fs_uae_launcher.fsui as fsui from ..Config import Config from ..I18N import _, ngettext class LaunchDialog(fsui.Dialog): def __init__(self, parent, handler): fsui.Dialog.__init__(self, parent, _("Launching FS-UAE")) self.layout = fsui.VerticalLayout() self.layout.add_spacer(400, 20) hor_layout = fsui.HorizontalLayout() self.layout.add(hor_layout, fill=True) hor_layout.padding_right = 20 hor_layout.add_spacer(20) image = fsui.Image("fs_uae_launcher:res/fs_uae_group.png") self.image_view = fsui.ImageView(self, image) hor_layout.add(self.image_view, valign=0.0) hor_layout.add_spacer(20) ver_layout = fsui.VerticalLayout() hor_layout.add(ver_layout, fill=True) self.title_label = fsui.HeadingLabel(self, _("Launching FS-UAE")) ver_layout.add(self.title_label) ver_layout.add_spacer(6) self.sub_title_label = fsui.Label(self, _("Preparing...")) ver_layout.add(self.sub_title_label) self.layout.add_spacer(20) hor_layout = fsui.HorizontalLayout() self.layout.add(hor_layout, fill=True) hor_layout.add_spacer(20, expand=True) self.cancel_button = fsui.Button(self, _("Cancel")) self.cancel_button.on_activate = self.on_cancel_button hor_layout.add(self.cancel_button) hor_layout.add_spacer(20) self.layout.add_spacer(20) self.set_size(self.layout.get_min_size()) self.center_on_parent() self.closed = False self.handler = handler self.handler.on_progress = self.on_progress self.handler.on_complete = self.on_complete def complete(self): self.closed = True self.end_modal(0) def on_progress(self, progress): def function(): self.sub_title_label.set_text(progress) fsui.call_after(function) def on_complete(self): def function(): self.complete() fsui.call_after(function) def run(self): print("LaunchDialog.run") threading.Thread(target=self.handler_thread).start() def on_cancel_button(self): #self.handler.on_progress = None #self.handler.on_complete = None self.complete() def on_error(self, message): self.EndModal(1) fsui.show_error(message) def handler_thread(self): try: self._handler_thread() except Exception: traceback.print_exc() message = traceback.format_exc() def function(): self.on_error(message) fsui.call_after(function) def _handler_thread(self): self.handler.run() fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/WindowWithTabs.py0000644000175000017500000001460512162366654024712 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import fs_uae_launcher.fsui as fsui from ..I18N import _, ngettext from .TabPanel import TabPanel from .TabButton import TabButton from .Constants import Constants from .Skin import Skin class WindowWithTabs(fsui.Window): def __init__(self, parent, title): fsui.Window.__init__(self, parent, title) Skin.set_background_color(self) if fsui.System.macosx: import wx self.toolbar = self.CreateToolBar(wx.TB_HORIZONTAL | wx.NO_BORDER | wx.TB_FLAT) # | wx.TB_FLAT | wx.TB_TEXT) self.toolbar.SetMargins((0, 0)) self.toolbar.SetToolBitmapSize((32, 32)) self.toolbar.Realize() def function(): return self.toolbar self.toolbar.get_container = function self.tab_panel = None else: self.toolbar = None self.tab_panel = TabPanel(self) self.layout = fsui.VerticalLayout() if self.tab_panel: self.layout.add(self.tab_panel, fill=True) self.current_tab_group_id = 0 self.tab_groups = [[]] if self.toolbar: self.Bind(wx.EVT_SIZE, self.__size_event) def __size_event(self, event): size = event.GetSize() print("WindowWithTabs size event, size =", size) """ width = size[0] remaining_width = width expandables = 0 for child in self.toolbar.GetChildren(): print(child) if hasattr(child, "expandable") and child.expandable: expandables += 1 else: w = child.GetSize()[0] print(w) remaining_width -= w for i, child in enumerate(self.toolbar.GetChildren()): if hasattr(child, "expandable"): if child.expandable: width = remaining_width // expandables remaining_width -= width expandables -= 1 #self.toolbar.RemoveTool(child.GetId()) #self.toolbar.RemoveChild(child) child.SetSize((width, 46)) child.SetSize((200, 46)) self.toolbar.InsertControl(i, child) print("setting size to, ", width) self.toolbar.Realize() """ event.Skip() def realize_tabs(self): if self.toolbar: self.toolbar.Realize() def new_tab_group(self): self.current_tab_group_id += 1 self.tab_groups.append([]) def set_content(self, content): self.layout.add(content, expand=True, fill=True) def select_tab(self, index, group): if self.toolbar: pass else: print("\n\n\nselect tab", index, group) self.tab_groups[group][index].select() #self.tab_groups[group].select_tab(index) def add_tab(self, function, icon, title="", tooltip=""): if not tooltip: tooltip = title if self.toolbar: import wx self.add_toolbar_spacer(2) tool_id = wx.NewId() self.toolbar.AddLabelTool(tool_id, title, icon.bitmap, wx.NullBitmap, 0, tooltip) def event_handler(event): function() self.toolbar.Bind(wx.EVT_TOOL, event_handler, id=tool_id) self.add_toolbar_spacer(3) self.tab_groups[self.current_tab_group_id].append(tool_id) else: button = TabButton(self.tab_panel, icon) button.set_tooltip(tooltip) button.group_id = self.current_tab_group_id button.on_select = function self.tab_panel.add(button) self.tab_groups[self.current_tab_group_id].append(button) def add_tab_button(self, function, icon, title="", tooltip="", menu_function=None, left_padding=0, right_padding=0): if not tooltip: tooltip = title if self.toolbar: import wx self.add_toolbar_spacer(2) tool_id = wx.NewId() self.toolbar.AddLabelTool(tool_id, title, icon.bitmap, wx.NullBitmap, 0, tooltip) def event_handler(event): if function: function() else: menu_function() self.toolbar.Bind(wx.EVT_TOOL, event_handler, id=tool_id) self.add_toolbar_spacer(3) self.tab_groups[self.current_tab_group_id].append(tool_id) else: button = TabButton(self.tab_panel, icon, type=TabButton.TYPE_BUTTON, left_padding=left_padding, right_padding=right_padding) button.set_tooltip(tooltip) button.group_id = self.current_tab_group_id if function: button.on_activate = function elif menu_function: def menu_wrapper(): menu_function() button.check_hover() button.on_left_down = menu_wrapper self.tab_panel.add(button) self.tab_groups[self.current_tab_group_id].append(button) return button def add_tab_panel(self, class_, min_width=0): if self.toolbar: panel = class_(self.toolbar, toolbar_mode=True) else: #panel = class_(self.tab_panel, padding_bottom=2) panel = class_(self.tab_panel) panel.expandable = True panel.set_min_height(Constants.TAB_HEIGHT) if self.toolbar: panel.SetSize((min_width, 46)) self.toolbar.AddControl(panel) else: self.tab_panel.add(panel, expand=1000000) def add_toolbar_spacer(self, width, height=46): import wx spacer_control = wx.Control(self.toolbar, size=(width, height)) self.toolbar.AddControl(spacer_control) def add_tab_separator(self): if self.toolbar: self.toolbar.AddSeparator() def add_tab_spacer(self, spacer=0, expand=False): if self.toolbar: import wx spacer_control = wx.Control(self.toolbar, size=(spacer, 1)) self.toolbar.AddControl(spacer_control) else: self.tab_panel.add_spacer(spacer, expand=expand) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/HardwarePanel.py0000644000175000017500000000206512162366654024507 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import fs_uae_launcher.fsui as fsui from ..Config import Config from ..I18N import _, ngettext from .config.KickstartGroup import KickstartGroup from .config.MemoryGroup import MemoryGroup from .config.ExpansionsGroup import ExpansionsGroup from .Skin import Skin class HardwarePanel(fsui.Panel): def __init__(self, parent): fsui.Panel.__init__(self, parent) Skin.set_background_color(self) self.kickstart_group = KickstartGroup(self) self.memory_group = MemoryGroup(self) self.expansions_group = ExpansionsGroup(self) self.layout = fsui.VerticalLayout() self.layout.add(self.kickstart_group, fill=True) self.layout.add_spacer(10) self.layout.add_spacer(Skin.EXTRA_GROUP_MARGIN) self.layout.add(self.memory_group, fill=True) self.layout.add_spacer(Skin.EXTRA_GROUP_MARGIN) self.layout.add(self.expansions_group, fill=True) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/MainPanel.py0000644000175000017500000000222012162366654023627 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import fs_uae_launcher.fsui as fsui from .RemovableMediaGroup import RemovableMediaGroup from .config.InputGroup import InputGroup from .config.ModelGroup import ModelGroup from .ConfigGroup import ConfigGroup from .Skin import Skin class MainPanel(fsui.Panel): def __init__(self, parent): fsui.Panel.__init__(self, parent) Skin.set_background_color(self) self.layout = fsui.VerticalLayout() self.config_group = ConfigGroup(self) self.model_group = ModelGroup(self) self.removable_media_group = RemovableMediaGroup(self, 2) self.input_group = InputGroup(self) self.layout.add(self.config_group, fill=True) self.layout.add_spacer(Skin.EXTRA_GROUP_MARGIN) self.layout.add(self.model_group, fill=True) self.layout.add_spacer(Skin.EXTRA_GROUP_MARGIN) self.layout.add(self.removable_media_group, fill=True) self.layout.add_spacer(Skin.EXTRA_GROUP_MARGIN) self.layout.add(self.input_group, fill=True) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/AboutDialog.py0000644000175000017500000001402512162366654024163 0ustar glaubitzglaubitz# -*- coding: UTF-8 -*- from __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import fs_uae_launcher.fsui as fsui from ..I18N import _, ngettext class AboutDialog(fsui.Dialog): def __init__(self, parent): fsui.Dialog.__init__(self, parent, _("About {name}").format( name="FS-UAE Launcher")) self.layout = fsui.VerticalLayout() self.layout.padding_top = 10 self.layout.padding_bottom = 10 self.layout.padding_left = 10 self.layout.padding_right = 10 self.text_area = fsui.TextArea(self, about_message, read_only=True, font_family="monospace") self.text_area.set_min_width(700) self.text_area.set_min_height(400) self.layout.add(self.text_area, fill=True, margin=10) self.layout.add_spacer(10) hori_layout = fsui.HorizontalLayout() hori_layout.add_spacer(10, expand=True) self.layout.add(hori_layout, fill=True) self.close_button = fsui.Button(self, _("Close")) self.close_button.on_activate = self.on_close_button hori_layout.add(self.close_button, margin_left=10) hori_layout.add_spacer(10) self.layout.add_spacer(10) self.set_size(self.layout.get_min_size()) self.center_on_parent() def on_close_button(self): self.end_modal(False) about_message = u"""FS-UAE Launcher is Copyright (C) 2012-2013 Frode Solheim. This package is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This package is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this package; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA The following people have translated FS-UAE Launcher into several languages: Cédric "Foul" Monféfoul (French), nexusle (German), Speedvicio (Italian), grimi (Polish), Milanchez (Serbian), albconde (Spanish), Treco (Portuguese), GoingDown (Finish), spajdr (Czech), Decypher (Turkisk). A big thanks to everyone who have tested the software and provided valuable feedback! Especially the encouraging members of the English Amiga Board, and all you who have commented on the official FS-UAE web site. FS-UAE Launcher includes icons from GNOME icon theme from the GNOME Project (http://www.gnome.org). The GNOME icon theme is distributed under the terms of either GNU LGPL v.3 or Creative Commons BY-SA 3.0 license. FS-UAE Launcher includes icons from humanity-icon-theme, licensed under the terms of the GNU General Public license. FS-UAE includes icons from oxygen-icon-theme, licensed under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. The Amiga Forever icon is (probably) copyright Cloanto Italia srl. FS-UAE Launcher includes the oyoyo library, Copyright (c) 2008 Duncan Fordyce, The license for this library is contained in the following paragraph: Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. FS-UAE Launcher may include lhafile, Copyright (c) 2010 Hidekazu Ohnishi. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the author nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. FS-UAE Launcher depends on several open source third party software packages, including but not limited to, Python and wxPython. """ fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/MainWindow.py0000644000175000017500000003054612162366654024053 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import os import sys import uuid import time import subprocess import fs_uae_launcher.fsui as fsui import fs_uae_launcher.fs as fs from ..Amiga import Amiga from ..Config import Config from ..Signal import Signal from ..Settings import Settings from ..netplay.IRC import IRC #from .FSUAE import FSUAE #from .ConfigWriter import ConfigWriter from ..netplay.Netplay import Netplay from ..Database import Database from ..GameHandler import GameHandler from ..I18N import _, ngettext from ..Version import Version from .AboutDialog import AboutDialog from .Book import Book from .BottomPanel import BottomPanel from .CDPanel import CDPanel from .ConfigurationsPanel import ConfigurationsPanel from .Constants import Constants from .DiskFileCreationDialog import DiskFileCreationDialog from .GameInfoPanel import GameInfoPanel from .FloppiesPanel import FloppiesPanel from .HardDrivesPanel import HardDrivesPanel from .HardwarePanel import HardwarePanel from .InfoPanel import InfoPanel from .InputPanel import InputPanel from .MainPanel import MainPanel from .NetplayPanel import NetplayPanel from .ScanDialog import ScanDialog from .ScreenshotsPanel import ScreenshotsPanel from .SetupDialog import SetupDialog from .Skin import Skin from .TabButton import TabButton from .TabPanel import TabPanel from .WindowWithTabs import WindowWithTabs USE_MAIN_MENU = 1 class MainWindow(WindowWithTabs): instance = None def __init__(self, icon): title = "FS-UAE Launcher {0}".format(Version.VERSION) WindowWithTabs.__init__(self, None, title) if icon: self.set_icon_from_path(icon) self.tab_panels = [] self.books = [] self.main_layout = fsui.HorizontalLayout() self.set_content(self.main_layout) # left border self.create_column(0, min_width=Skin.get_window_padding_left(), content=False) # left content if fsui.get_screen_size()[0] > 1024: self.create_column(1, min_width=518) else: self.create_column(1, min_width=400) # right content right_width = Constants.SCREEN_SIZE[0] * 2 + 21 + 10 + 10 extra_screen_width = Constants.SCREEN_SIZE[0] + 21 need_width = 1280 if self.is_editor_enabled(): need_width += extra_screen_width else: if fsui.get_screen_size()[0] >= need_width: # make room for one more screenshot right_width += extra_screen_width pass #if Skin.EXTRA_GROUP_MARGIN: # self.main_layout.add_spacer(Skin.EXTRA_GROUP_MARGIN) self.create_column(2, min_width=right_width, expand=True) # right border self.create_column(3, min_width=Skin.get_window_padding_right(), content=False) if self.is_editor_enabled(): from ..editor.EditorGroup import EditorGroup editor = EditorGroup(self) self.main_layout.add(editor, fill=True, expand=True, margin_right=20) self.realize_tabs() self.menu = self.create_menu() if fsui.System.macosx: import wx self.tools_menu = self.create_menu() menu_bar = wx.MenuBar() menu_bar.Append(self.tools_menu._menu, _("Tools")) self.SetMenuBar(menu_bar) was_maximized = Settings.get("maximized") == "1" self.set_size(self.layout.get_min_size()) self.center_on_screen() if was_maximized: self.maximize() Signal.add_listener("scan_done", self) def on_destroy(self): print("MainWindow.destroy") Signal.remove_listener("scan_done", self) IRC.stop() Signal.broadcast("quit") def on_scan_done_signal(self): print("MainWindow.on_scan_done_signal") Config.update_kickstart() def on_resize(self): print("on_resize, size =", self.get_size(), self.is_maximized()) if self.is_maximized(): Settings.set("maximized", "1") else: Settings.set("maximized", "0") fsui.Window.on_resize(self) def is_editor_enabled(self): return "--editor" in sys.argv def create_column(self, column, content=True, expand=False, min_width=0): layout = fsui.VerticalLayout() self.main_layout.add(layout, fill=True, expand=expand) if min_width: layout.add_spacer(min_width, 0) layout.add_spacer(0, 10 + Skin.EXTRA_GROUP_MARGIN) if content: book = Book(self) Skin.set_background_color(book) if column == 1: margin_right = Skin.EXTRA_GROUP_MARGIN else: margin_right = 0 layout.add(book, fill=True, expand=True, margin_right=margin_right) self.books.append(book) self.add_column_content(column) else: layout.add_spacer(0, expand=True) self.books.append(None) layout.add_spacer(0, 10 + Skin.EXTRA_GROUP_MARGIN) if fsui.get_screen_size()[1] >= 768: right_margin = 0 if column == 0: bottom_panel = BottomPanel(self) elif column == 1: bottom_panel = GameInfoPanel(self) elif column == 2: bottom_panel = ScreenshotsPanel(self) right_margin = -10 - Skin.EXTRA_GROUP_MARGIN else: bottom_panel = None # FIXME: if bottom_panel is None: layout.add_spacer(0, Skin.get_bottom_panel_height()) else: bottom_panel.set_min_height(Skin.get_bottom_panel_height()) layout.add(bottom_panel, fill=True, margin_right=right_margin) elif column == 1: from .LaunchGroup import LaunchGroup group = LaunchGroup(self) layout.add(group, fill=True, margin=10, margin_top=0) layout.add_spacer(0, 10) def add_column_content(self, column): default_page_index = 0 default_tab_index_offset = 0 if column == 1: if USE_MAIN_MENU: icon = fsui.Image("fs_uae_launcher:res/main_menu.png") self.menu_button = self.add_tab_button(None, icon, _("Main Menu"), menu_function=self.open_main_menu, left_padding=5, right_padding=5) default_tab_index_offset = 1 #self.add_tab_spacer(60) else: self.add_tab_spacer(10) self.add_page(column, MainPanel, "tab_main", _("Config"), _("Main Configuration Options")) self.add_page(column, InputPanel, "tab_input", _("Input"), _("Input Options")) self.add_page(column, FloppiesPanel, "tab_floppies", _("Floppies"), _("Floppy Drives")) self.add_page(column, CDPanel, "tab_cdroms", _("CD-ROMs"), _("CD-ROM Drives")) self.add_page(column, HardDrivesPanel, "tab_hard_drives", _("Hard Drives")) self.add_page(column, HardwarePanel, "tab_hardware", _("Hardware"), _("Hardware Options")) if USE_MAIN_MENU: #self.add_tab_spacer(20) if fsui.System.macosx: self.add_tab_spacer(64) else: self.add_tab_spacer(80) else: icon = fsui.Image("fs_uae_launcher:res/tab_custom.png") self.add_tab_button(self.on_custom_button, icon, _("Custom"), _("Edit Custom Options")) self.add_tab_spacer(60) elif column == 2: self.new_tab_group() page_index = 0 self.add_page(column, ConfigurationsPanel, "tab_configs", _("Configurations"), _("Configuration Browser")) if Settings.get("netplay_feature") == "1": page_index += 1 self.add_page(column, NetplayPanel, "tab_netplay", _("Net Play")) if fsui.System.macosx: #self.add_tab_separator() self.add_tab_spacer(64) pass else: self.add_tab_spacer(100) self.add_tab_panel(InfoPanel) self.add_tab_spacer(10) if not USE_MAIN_MENU: icon = fsui.Image("fs_uae_launcher:res/tab_scan.png") self.add_tab_button(self.on_scan_button, icon, _("Scan"), _("Open Scan Dialog")) icon = fsui.Image("fs_uae_launcher:res/tab_settings.png") self.add_tab_button(self.on_settings_button, icon, _("Settings")) if fsui.System.macosx: self.add_tab_panel(InfoPanel, min_width=400) # column - 1 is the group id of the tab group self.select_tab(default_page_index + default_tab_index_offset, column - 1) self.books[column].set_page(default_page_index) def create_menu(self): menu = fsui.Menu() text = _("Scan for Files") menu.add_item(_("Scan Files and Configurations"), self.on_scan_button) if Settings.get("database_feature") == "1": menu.add_item(_("Refresh Game Database"), self.on_game_database_refresh) menu.add_separator() #menu.add_item(_("Custom Options & Settings"), menu.add_item(_("Custom Configuration"), self.on_custom_button) menu.add_separator() menu.add_item(_("ADF & HDF Creator"), self.on_adf_and_hdf_creator) menu.add_item(_("Gamepad/Joystick Setup"), self.on_joystick_configuration) menu.add_separator() menu.add_item(_("Import Kickstarts"), self.on_import_kickstarts) menu.add_item(_("Amiga Forever Import"), self.on_import_kickstarts) menu.add_separator() menu.add_preferences_item(_("Preferences"), self.on_settings_button) menu.add_separator() menu.add_about_item(_("About {name}").format( name="FS-UAE Launcher"), self.on_about) return menu def add_page(self, column, content_class, icon_name, title, tooltip=""): book = self.books[column] instance = content_class(book) book.add_page(instance) icon = fsui.Image("fs_uae_launcher:res/{0}.png".format(icon_name)) def function(): book.set_page(instance) self.add_tab(function, icon, title, tooltip) return instance def on_custom_button(self): from .config.ConfigDialog import ConfigDialog ConfigDialog.run(self.get_window(), ConfigDialog.CUSTOM_OPTIONS) def open_main_menu(self): if fsui.System.windows: if time.time() - getattr(self, "main_menu_close_time", 0) < 0.2: return if fsui.System.macosx: self.popup_menu(self.menu, (0, -2)) else: self.menu_button.popup_menu(self.menu, (0, self.menu_button.size[1] - 2)) if fsui.System.windows: self.main_menu_close_time = time.time() def on_scan_button(self): from .ScanDialog import ScanDialog dialog = ScanDialog(self.get_window()) dialog.show_modal() dialog.destroy() def on_settings_button(self): from .settings.SettingsDialog import SettingsDialog SettingsDialog.run(self) def on_about(self): dialog = AboutDialog(self.get_window()) dialog.show_modal() dialog.destroy() def on_import_kickstarts(self): dialog = SetupDialog(self.get_window()) dialog.show_modal() dialog.destroy() def on_game_database_refresh(self): dialog = ScanDialog.refresh_game_database(self.get_window()) dialog.show_modal() dialog.destroy() def on_joystick_configuration(self): args = [sys.executable] + sys.argv[:] args.append("--joystick-config") print("start gamepad config, args =", args) subprocess.Popen(args, close_fds=True) def on_adf_and_hdf_creator(self): dialog = DiskFileCreationDialog(self.get_window()) dialog.show_modal() dialog.destroy() fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/LaunchGroup.py0000644000175000017500000000215312162366654024217 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import fs_uae_launcher.fsui as fsui from ..Config import Config from ..Settings import Settings from ..I18N import _, ngettext from ..LaunchHandler import LaunchHandler #from .settings.FullscreenCheckBox import FullscreenCheckBox from .settings.FullscreenToggleButton import FullscreenToggleButton class LaunchGroup(fsui.Group): def __init__(self, parent): fsui.Group.__init__(self, parent) self.layout = fsui.HorizontalLayout() #self.fullscreen_checkbox = FullscreenCheckBox(self) #self.layout.add(self.fullscreen_checkbox) self.fullscreen_button = FullscreenToggleButton(self) self.layout.add(self.fullscreen_button, fill=True) self.layout.add_spacer(0, expand=True) self.start_button = fsui.Button(parent, _("Start")) self.start_button.on_activate = self.on_start_button self.layout.add(self.start_button, margin_left=10) def on_start_button(self): LaunchHandler.start_game() fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/DiskFileCreationDialog.py0000644000175000017500000002003212162366654026263 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import os import zlib import shutil import traceback import pkg_resources import fs_uae_launcher.fsui as fsui from ..I18N import _, ngettext from ..Settings import Settings class DiskFileCreationDialog(fsui.Dialog): def __init__(self, parent): fsui.Dialog.__init__(self, parent, _("ADF & HDF Creator")) self.layout = fsui.VerticalLayout() self.layout.padding_top = 10 self.layout.padding_bottom = 10 self.layout.padding_left = 10 self.layout.padding_right = 10 self.list_view = fsui.ListView(self) self.list_view.set_min_width(600) self.list_view.set_min_height(130) self.list_view.set_default_icon(fsui.Image( "fs_uae_launcher:res/file_16.png")) self.layout.add(self.list_view, expand=True, fill=True, margin=10) self.list_view.set_items([ _("ADF - Standard Floppy Disk Image"), _("ADF - Extended Floppy Disk Image (MFM)"), _("HDF - Single Partition Hard Disk File"), _("HDF - Partitionable Hard Drive Image (RDB)"), ]) self.list_view.on_select_item = self.on_select_item text = _("Disk Image Name:") label = fsui.Label(self, text) self.layout.add(label, margin=10) hori_layout = fsui.HorizontalLayout() self.layout.add(hori_layout, fill=True, margin=10) self.name_field = fsui.TextField(self, _("New Disk Image"), read_only=False) hori_layout.add(self.name_field, expand=True) text = _("Size:") label = fsui.Label(self, text) hori_layout.add(label, margin_left=20) self.size_field = fsui.TextField(self, "") hori_layout.add(self.size_field, expand=False, margin_left=10) text = _("MB") label = fsui.Label(self, text) hori_layout.add(label, margin_left=10) text = _("Destination Directory:") label = fsui.Label(self, text) self.layout.add(label, margin=10) hori_layout = fsui.HorizontalLayout() self.layout.add(hori_layout, fill=True, margin=10) self.dir_field = fsui.TextField(self, "", read_only=True) hori_layout.add(self.dir_field, expand=True) self.browse_button = fsui.Button(self, _("Browse")) self.browse_button.on_activate = self.on_browse_button hori_layout.add(self.browse_button, margin_left=10) self.created_label = fsui.Label(self, " ") self.layout.add(self.created_label, margin=10) self.layout.add_spacer(10) hori_layout = fsui.HorizontalLayout() hori_layout.add_spacer(10, expand=True) self.layout.add(hori_layout, fill=True) self.create_button = fsui.Button(self, _("Create")) self.create_button.on_activate = self.on_create_button hori_layout.add(self.create_button) self.close_button = fsui.Button(self, _("Close")) self.close_button.on_activate = self.on_close_button hori_layout.add(self.close_button, margin_left=10) hori_layout.add_spacer(10) self.layout.add_spacer(10) self.set_size(self.layout.get_min_size()) self.center_on_parent() self.list_view.select_item(0) def on_select_item(self, index): if index < 2: self.set_path(Settings.get_floppies_dir()) else: self.set_path(Settings.get_hard_drives_dir()) if index == 0: size = "0.86" elif index == 1: size = "2.00" elif index == 2: size = "256" elif index == 3: size = "1024" self.size_field.set_text(size) self.size_field.enable(index >= 2) def set_path(self, path): self.path = path self.dir_field.set_text(path) def on_browse_button(self): dialog = fsui.DirDialog(self.get_window(), _("Select Destination Directory")) if dialog.show_modal(): self.set_path(dialog.get_path()) dialog.destroy() def on_close_button(self): self.end_modal(False) def on_create_button(self): try: self.create_disk_file() except Exception, e: traceback.print_exc() self.show_error(repr(e)) def show_error(self, message): self.created_label.set_text(message) fsui.show_error(message) def show_success(self, message): self.created_label.set_text(message) def create_disk_file(self): self.created_label.set_text("") disk_type = self.list_view.get_index() path = self.dir_field.get_text().strip() if not os.path.isdir(path): return self.show_error(_("Specified directory does not exist")) name = self.name_field.get_text().strip() ext = ".adf" if disk_type < 2 else ".hdf" if not name.lower().endswith(ext): name = name + ext path = os.path.join(path, name) if disk_type == 0: size = 901120 elif disk_type == 1: size = 2104892 else: try: size = int(self.size_field.get_text()) except ValueError: return self.show_error(_("Invalid size specified")) else: size = size * 1024 * 1024 if disk_type == 2: if size >= 512 * 1024 * 1024: return self.show_error(_("Use RDB disk images for " "size >= {0}".format(512))) if os.path.exists(path): return self.show_error(_("File already exists")) path_partial = path + ".partial" try: f = open(path_partial, "wb") except Exception: print("error opening", path) traceback.print_exc() return self.show_error(_("Could not open file for writing")) try: if disk_type == 0: self.create_adf(f, size) elif disk_type == 1: self.create_extended_adf(f, size) elif disk_type == 2: self.create_hdf(f, size) elif disk_type == 3: self.create_rdb(f, size) except Exception, e: traceback.print_exc() try: f.close() except Exception: pass try: os.unlink(path_partial) except Exception: pass return self.show_error(_("Error writing disk image")) else: f.close() try: shutil.move(path_partial, path) except Exception: print("error moving", path_partial, path) traceback.print_exc() return self.show_error(_("Error moving file into place")) self.show_success(_("Disk image created") + ": " + name) def create_adf(self, f, size): s = pkg_resources.resource_stream(str("fs_uae_launcher"), str("res/adf.dat")) data = s.read() data = zlib.decompress(data) f.write(data) def create_extended_adf(self, f, size): # Workbench 3.1 does not like the adf_extended file, created by # WinUAE (must check why) #s = pkg_resources.resource_stream(str("fs_uae_launcher"), # str("res/adf_extended.dat")) s = pkg_resources.resource_stream(str("fs_uae_launcher"), str("res/adf_save_disk.dat")) data = s.read() data = zlib.decompress(data) f.write(data) def create_hdf(self, f, size): print("create_hdf", f, size) assert size % (1024 * 1024) == 0 block = "\0" * 1024 * 1024 for i in range(size // (1024 * 1024)): f.write(block) def create_rdb(self, f, size): print("create_rdb", f, size) assert size % (1024 * 1024) == 0 block = "\0" * 1024 * 1024 for i in range(size // (1024 * 1024)): f.write(block) f.seek(0) f.write("rdsk") fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/FloppySelector.py0000644000175000017500000000704212162366654024744 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import os import fs_uae_launcher.fsui as fsui from ..ChecksumTool import ChecksumTool from ..Config import Config from ..CDManager import CDManager from ..FloppyManager import FloppyManager from ..I18N import _, ngettext from ..Paths import Paths from ..Settings import Settings from .IconButton import IconButton from .LauncherFileDialog import LauncherFileDialog class FloppySelector(fsui.Group): def __init__(self, parent, drive): fsui.Group.__init__(self, parent) self.cd_mode = False self.drive = drive self.layout = fsui.HorizontalLayout() self.eject_button = IconButton(self, "eject_button.png") self.eject_button.set_tooltip(_("Eject")) self.eject_button.on_activate = self.on_eject self.layout.add(self.eject_button) self.layout.add_spacer(10) self.text_field = fsui.TextField(self, "", read_only=True) self.layout.add(self.text_field, expand=True)#, expand=True, fill=True) self.layout.add_spacer(10) self.browse_button = IconButton(self, "browse_file_16.png") self.browse_button.set_tooltip(_("Browse for File")) self.browse_button.on_activate = self.on_browse self.layout.add(self.browse_button) self.update_config_key() Config.add_listener(self) def on_destroy(self): Config.remove_listener(self) def enable(self, enable): self.text_field.enable(enable) self.browse_button.enable(enable) self.eject_button.enable(enable) def on_config(self, key, value): if key != self.config_key: return dir, name = os.path.split(value) if dir: path = "{0} ({1})".format(name, dir) else: path = name self.text_field.set_text(path) def update_config_key(self): if self.cd_mode: self.config_key = "cdrom_drive_{0}".format(self.drive) self.config_key_sha1 = "x_cdrom_drive_{0}_sha1".format(self.drive) else: self.config_key = "floppy_drive_{0}".format(self.drive) self.config_key_sha1 = "x_floppy_drive_{0}_sha1".format(self.drive) #self.text_field.set_text(Config.get(self.config_key)) self.on_config(self.config_key, Config.get(self.config_key)) def set_cd_mode(self, cd_mode): self.cd_mode = cd_mode self.update_config_key() def on_eject(self): if self.cd_mode: CDManager.eject(self.drive) else: FloppyManager.eject(self.drive) def on_browse(self): if self.cd_mode: title = _("Choose CD-ROM Image") default_dir = Settings.get_cdroms_dir() type = "cd" else: title = _("Choose Floppy Image") default_dir = Settings.get_floppies_dir() type = "floppy" dialog = LauncherFileDialog(self.get_window(), title, type, Config.get(self.config_key)) if not dialog.show(): return path = dialog.get_path() checksum_tool = ChecksumTool(self.get_window()) if self.cd_mode: sha1 = "" print("FIXME: not calculating CD checksum just yet") else: sha1 = checksum_tool.checksum(path) path = Paths.contract_path(path, default_dir) Config.set_multiple([ (self.config_key, path), (self.config_key_sha1, sha1)]) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/MediaListGroup.py0000644000175000017500000001264712162366654024671 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import os import fs_uae_launcher.fsui as fsui from ..Amiga import Amiga from ..CDManager import CDManager from ..ChecksumTool import ChecksumTool from ..Config import Config from ..FloppyManager import FloppyManager from ..I18N import _, ngettext from ..Paths import Paths from ..Settings import Settings from .IconButton import IconButton from .LauncherFileDialog import LauncherFileDialog class MediaListGroup(fsui.Group): def __init__(self, parent, cd_mode): fsui.Group.__init__(self, parent) self.layout = fsui.VerticalLayout() self.cd_mode = cd_mode if self.cd_mode: self.file_key_prefix = "cdrom_image_" self.file_key = "cdrom_image_{0}" self.sha1_key = "x_cdrom_image_{0}_sha1" else: self.file_key_prefix = "floppy_image_" self.file_key = "floppy_image_{0}" self.sha1_key = "x_floppy_image_{0}_sha1" self.heading_label = fsui.HeadingLabel(self, _("Media Swap List")) self.layout.add(self.heading_label, margin=10) self.layout.add_spacer(0) hori_layout = fsui.HorizontalLayout() self.layout.add(hori_layout, expand=True, fill=True) self.list_view = fsui.ListView(self) if self.cd_mode: self.list_view.set_default_icon(fsui.Image( "fs_uae_launcher:res/cdrom_16.png")) else: self.list_view.set_default_icon(fsui.Image( "fs_uae_launcher:res/floppy_16.png")) hori_layout.add(self.list_view, expand=True, fill=True, margin=10, margin_right=0) vert_layout = fsui.VerticalLayout() hori_layout.add(vert_layout, fill=True) add_button = IconButton(self, "add_button.png") add_button.set_tooltip(_("Add Files to List")) add_button.on_activate = self.on_add_button vert_layout.add(add_button, margin=10) remove_button = IconButton(self, "remove_button.png") remove_button.set_tooltip(_("Remove Selected Files")) remove_button.on_activate = self.on_remove_button vert_layout.add(remove_button, margin=10) clear_button = IconButton(self, "clear_button.png") clear_button.set_tooltip(_("Clear List")) clear_button.on_activate = self.on_clear_list vert_layout.add(clear_button, margin=10) self.update_list() Config.add_listener(self) def on_destroy(self): Config.remove_listener(self) def on_config(self, key, value): if key.startswith(self.file_key_prefix): self.update_list() def create_list(self): items = [] if self.cd_mode: max_items = Amiga.MAX_CDROM_IMAGES else: max_items = Amiga.MAX_FLOPPY_IMAGES for i in range(max_items): path = Config.get(self.file_key.format(i)) sha1 = Config.get(self.sha1_key.format(i)) if not path: continue items.append((path, sha1)) return items def update_list(self): items = [] for path, sha1 in self.create_list(): dir, name = os.path.split(path) if dir: items.append("{0}\n{1}".format(name, dir)) else: items.append(path) self.list_view.set_items(items) def on_clear_list(self): if self.cd_mode: CDManager.clear_cdrom_list() else: FloppyManager.clear_floppy_list() def on_remove_button(self): index = self.list_view.get_index() existing_items = self.create_list() if index >= 0 and index < len(existing_items): del existing_items[index] self.set_new_config(existing_items) def on_add_button(self): existing_items = self.create_list() default_dir = Settings.get_floppies_dir() if self.cd_mode: dialog = LauncherFileDialog(self.get_window(), _("Select Multiple CD-ROMs"), "cd", multiple=True) else: dialog = LauncherFileDialog(self.get_window(), _("Select Multiple Floppies"), "floppy", multiple=True) if not dialog.show(): return paths = dialog.get_paths() paths.sort() checksum_tool = ChecksumTool(self.get_window()) for i, path in enumerate(paths): sha1 = checksum_tool.checksum(path) path = Paths.contract_path(path, default_dir) dir, file = os.path.split(path) if os.path.normcase(os.path.normpath(dir)) == \ os.path.normcase(os.path.normpath(default_dir)): path = file existing_items.append((path, sha1)) self.set_new_config(existing_items) def set_new_config(self, items): if self.cd_mode: max_items = Amiga.MAX_CDROM_IMAGES else: max_items = Amiga.MAX_FLOPPY_IMAGES set_list = [] for i in range(max(max_items, len(items))): if i >= max_items: break elif i >= len(items): path, sha1 = "", "" else: path, sha1 = items[i] set_list.append((self.file_key.format(i), path)) set_list.append((self.sha1_key.format(i), sha1)) Config.set_multiple(set_list) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/__init__.py0000644000175000017500000000000012162366654023514 0ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/Book.py0000644000175000017500000000245612162366654022670 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import fs_uae_launcher.fsui as fsui class Book(fsui.Panel): def __init__(self, parent): fsui.Panel.__init__(self, parent) self.layout = fsui.VerticalLayout() self.page_titles = [] self.pages = [] self.current_page = None def add_page(self, function, title=""): self.page_titles.append(title) self.pages.append(function) def set_page(self, page): try: index = page + 0 except TypeError: for i, p in enumerate(self.pages): if page == p: index = i break else: raise Exception("page not found") if self.current_page: self.current_page.hide() self.layout.remove(self.current_page) if callable(self.pages[index]): page = self.pages[index](self) self.pages[index] = page else: page = self.pages[index] self.layout.add(page, fill=True, expand=True) self.current_page = page page.show() if hasattr(page, "on_show"): page.on_show() self.layout.update() fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/SetupPanel.py0000644000175000017500000000273212162366654024053 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import os import traceback import fs_uae_launcher.fsui as fsui from ..Amiga import Amiga from ..Config import Config from ..Database import Database from ..Settings import Settings from ..I18N import _, ngettext from .imports.ImportGroup import ImportGroup from .ScanKickstartGroup import ScanKickstartGroup from .Skin import Skin class SetupPanel(fsui.Panel): def __init__(self, parent): fsui.Panel.__init__(self, parent) Skin.set_background_color(self) self.layout = fsui.VerticalLayout() self.scan_kickstart_group = ScanKickstartGroup(self) self.import_rom_group = ImportGroup(self) self.import_af_group = ImportGroup(self, ImportGroup.AMIGA_FOREVER) self.layout.add(self.scan_kickstart_group, fill=True) self.layout.add_spacer(Skin.EXTRA_GROUP_MARGIN) self.layout.add(self.import_rom_group, fill=True) self.layout.add_spacer(Skin.EXTRA_GROUP_MARGIN) self.layout.add(self.import_af_group, fill=True) def should_be_automatically_opened(self): if Settings.get("kickstart_setup") == "0": return False database = Database.get_instance() amiga = Amiga.get_model_config("A500") for sha1 in amiga["kickstarts"]: if database.find_file(sha1=sha1): return False return True fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/FloppiesPanel.py0000644000175000017500000000151312162366654024530 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import fs_uae_launcher.fsui as fsui from ..Config import Config from ..I18N import _, ngettext from .FloppiesGroup import FloppiesGroup from .MediaListGroup import MediaListGroup from .Skin import Skin class FloppiesPanel(fsui.Panel): def __init__(self, parent): fsui.Panel.__init__(self, parent) Skin.set_background_color(self) self.floppies_group = FloppiesGroup(self, 4) self.media_list_group = MediaListGroup(self, False) self.layout = fsui.VerticalLayout() self.layout.add(self.floppies_group, fill=True) self.layout.add_spacer(Skin.EXTRA_GROUP_MARGIN) self.layout.add(self.media_list_group, expand=True, fill=True) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/VariantRatingButton.py0000644000175000017500000000422412162366654025736 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import fs_uae_launcher.fsui as fsui from ..Config import Config from ..I18N import _, ngettext from ..Settings import Settings from ..Database import Database class VariantRatingButton(fsui.Panel): def __init__(self, parent): fsui.Panel.__init__(self, parent, paintable=True) self.set_min_width(40) self.set_min_height(24) self.rating = 0 Config.add_listener(self) self.on_config("variant_rating", "") def on_destroy(self): Config.remove_listener(self) pass def on_config(self, key, value): if key == "__variant_rating": try: self.rating = int(value) except ValueError: self.rating = 0 self.refresh() def on_paint(self): dc = self.create_dc() size = self.size foreground = fsui.Color(0xff, 0xff, 0xff) rating = self.rating if rating == -3: background = fsui.Color(0xa0, 0x00, 0x00) elif rating == -1: background = fsui.Color(0x00, 0x70, 0x00) elif rating == 1: background = fsui.Color(0xb0, 0x00, 0x00) elif rating == 2: background = fsui.Color(0xc0, 0x40, 0x00) elif rating == 3: background = fsui.Color(0xd0, 0x70, 0x00) elif rating == 4: background = fsui.Color(0xe0, 0x90, 0x00) elif rating >= 5: background = fsui.Color(0xf0, 0xa0, 0x00) else: background = fsui.Color(0xa8, 0xa8, 0xa8) if rating == -3: text = "BAD" elif rating == -1: text = "OK" elif rating >= 1: text = str(rating) font = dc.get_font() font.set_bold(True) dc.set_font(font) else: text = "-" tw, th = dc.measure_text(text) dc.draw_rectangle(0, 0, size[0], size[1], background) dc.set_text_color(foreground) dc.draw_text(text, (size[0] - tw) // 2, (size[1] - th) // 2) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/HardDrivesPanel.py0000644000175000017500000000171612162366654025007 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import fs_uae_launcher.fsui as fsui from ..Config import Config from ..I18N import _, ngettext from .config.WHDLoadGroup import WHDLoadGroup from .config.HardDriveGroup import HardDriveGroup from .Skin import Skin class HardDrivesPanel(fsui.Panel): def __init__(self, parent): fsui.Panel.__init__(self, parent) Skin.set_background_color(self) self.hard_drive_groups = [] for i in range(4): self.hard_drive_groups.append(HardDriveGroup(self, i)) self.whdload_group = WHDLoadGroup(self) self.layout = fsui.VerticalLayout() for i in range(4): self.layout.add(self.hard_drive_groups[i], fill=True, margin=10) self.layout.add_spacer(Skin.EXTRA_GROUP_MARGIN) self.layout.add(self.whdload_group, fill=True) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/ScanDialog.py0000644000175000017500000001372712162366654024005 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import time import fs_uae_launcher.fsui as fsui from ..Config import Config from ..Database import Database from ..Scanner import Scanner from ..Settings import Settings from ..I18N import _, ngettext from .settings.ScanPathsGroup import ScanPathsGroup TIMER_INTERVAL = 100 class ScanDialog(fsui.Dialog): @classmethod def refresh_game_database(cls, window): return cls(window, minimal=True, interactive=False, scan_files=False, scan_roms=False, scan_configs=False) def __init__(self, parent, minimal=False, interactive=True, scan_roms=True, scan_files=True, scan_configs=True): fsui.Dialog.__init__(self, parent, _("Scan")) self.layout = fsui.VerticalLayout() self.layout.padding_left = 10 self.layout.padding_top = 10 self.layout.padding_right = 10 self.layout.padding_bottom = 10 self.layout.add_spacer(640, 0) self.interactive = interactive self.scan_roms = scan_roms self.scan_files = scan_files self.scan_configs = scan_configs if Settings.get("database_feature") == "1": self.update_game_database = True else: self.update_game_database = False if not minimal: #self.layout.add_spacer(20) from .ScanKickstartGroup import ScanKickstartGroup self.scan_kickstart_group = ScanKickstartGroup(self) self.layout.add(self.scan_kickstart_group, fill=True) #self.layout.add_spacer(20) label = fsui.HeadingLabel(self, _("Scan for Kickstarts, Files and Configurations")) self.layout.add(label, margin=10) self.scan_paths_group = ScanPathsGroup(self) self.layout.add(self.scan_paths_group, fill=True) #self.layout.add_spacer(20) from .ScanProgressGroup import ScanProgressGroup self.scan_progress_group = ScanProgressGroup(self) self.layout.add(self.scan_progress_group, fill=True) self.layout.add_spacer(20) #self.layout.add_spacer(20) hor_layout = fsui.HorizontalLayout() self.layout.add(hor_layout, fill=True) hor_layout.add_spacer(10, expand=True) if interactive: self.scan_button = fsui.Button(self, _("Scan")) self.scan_button.on_activate = self.on_scan_button hor_layout.add(self.scan_button) hor_layout.add_spacer(10) else: self.scan_button = None self.stop_button = fsui.Button(self, _("Abort")) self.stop_button.on_activate = self.on_stop_button hor_layout.add(self.stop_button) hor_layout.add_spacer(10) self.close_button = fsui.Button(self, _("Close")) self.close_button.on_activate = self.on_close_button hor_layout.add(self.close_button) hor_layout.add_spacer(10) self.layout.add_spacer(10) self.set_size(self.layout.get_min_size()) self.center_on_parent() self.old_title = "" self.old_status = "" self.has_started_scan = False self.on_timer() fsui.call_later(TIMER_INTERVAL, self.on_timer) if not self.interactive: self.start_scan() def on_destroy(self): Scanner.stop_flag = True def set_scan_title(self, text): if not text: return if text == self.old_title: return self.old_title = text self.scan_progress_group.title_label.set_text(text) def set_scan_status(self, text): if not text: return if text == self.old_status: return self.old_status = text self.scan_progress_group.status_label.set_text(text) def on_timer(self): fsui.call_later(TIMER_INTERVAL, self.on_timer) if not Scanner.running: if self.has_started_scan: if Scanner.error: self.set_scan_title(_("Scan error")) self.set_scan_status(Scanner.error) else: if not self.interactive: self.end_modal(True) return self.set_scan_title(_("Scan complete")) self.set_scan_status( _("Click 'Scan' button if you want to re-scan")) else: self.set_scan_title(_("No scan in progress")) self.set_scan_status(_("Click 'Scan' button to start scan")) if self.scan_button is not None: self.scan_button.enable() self.stop_button.disable() self.close_button.enable() return status = Scanner.status self.set_scan_title(status[0]) self.set_scan_status(status[1]) #def on_rom_found(self, path, sha1): # self.text.append_text(u"found {0}\n".format(path)) def on_scan_button(self): self.start_scan() def start_scan(self): if self.scan_button is not None: self.scan_button.disable() self.has_started_scan = True self.set_scan_title(_("Starting scan")) self.set_scan_status(_("Please wait...")) paths = ScanPathsGroup.get_search_path() #Settings.set("scan_configs", "1") #Settings.set("scan_files", "1") #Settings.set("scan_roms", "1") self.close_button.disable() self.stop_button.enable() #Scanner.start(paths, Settings.get("scan_roms") == "1", # Settings.get("scan_files") == "1", # Settings.get("scan_configs") == "1") Scanner.start(paths, self.scan_roms, self.scan_files, self.scan_configs, self.update_game_database) def on_close_button(self): self.end_modal(False) def on_stop_button(self): Scanner.stop_flag = True #self.close_button.enable() fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/PagedDialog.py0000644000175000017500000000513712162366654024135 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import fs_uae_launcher.fsui as fsui from ..I18N import _, ngettext class PagedDialog(fsui.Dialog): def __init__(self, parent, title): fsui.Dialog.__init__(self, parent, title) self.layout = fsui.VerticalLayout() hor_layout = fsui.HorizontalLayout() self.layout.add(hor_layout, fill=True, expand=True) layout = fsui.VerticalLayout() layout.padding_top = 20 layout.padding_bottom = 20 layout.padding_left = 20 #layout.padding_right = 20 self.list_view = fsui.ListView(self) self.list_view.set_min_width(200) self.list_view.on_select_item = self.on_select_item layout.add(self.list_view, fill=True, expand=True) hor_layout.add(layout, fill=True) #hor_layout.add_spacer(20) self.page_container = fsui.Panel(self) self.page_container.layout = fsui.VerticalLayout() hor_layout.add(self.page_container, fill=True, expand=True) #self.layout.add_spacer(20) hor_layout = fsui.HorizontalLayout() self.layout.add(hor_layout, fill=True) hor_layout.add_spacer(20, expand=True) self.close_button = fsui.Button(self, _("Close")) self.close_button.on_activate = self.on_close_button hor_layout.add(self.close_button) hor_layout.add_spacer(20) self.layout.add_spacer(20) self.page_titles = [] self.pages = [] #self.add_page(_("Hardware"), HardwarePage) #self.add_page(_("Hard Drives"), HardDrivesPage) #elf.add_page(_("Custom Options"), CustomOptionsPage) self.current_page = None self.set_size((800, 540)) self.center_on_parent() def on_close_button(self): self.end_modal(0) def on_select_item(self, index): self.set_page(index) def add_page(self, title, function): self.page_titles.append(title) self.pages.append(function) self.list_view.set_items(self.page_titles) def set_page(self, index): if self.current_page: self.current_page.hide() self.page_container.layout.remove(self.current_page) if callable(self.pages[index]): page = self.pages[index](self.page_container) self.pages[index] = page else: page = self.pages[index] self.page_container.layout.add(page, fill=True, expand=True) self.current_page = page page.show() self.layout.update() fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/imports/0000755000175000017500000000000012162366654023112 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/imports/ImportGroup.py0000644000175000017500000000553012162366654025756 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import fs_uae_launcher.fsui as fsui from ...I18N import _, ngettext from ...Signal import Signal from .ImportDialog import ImportDialog class ImportGroup(fsui.Group): AMIGA_FOREVER = 1 def __init__(self, parent, type=0): fsui.Group.__init__(self, parent) self.type = type self.layout = fsui.VerticalLayout() if self.type == self.AMIGA_FOREVER: title = _("Import From Amiga Forever CD/DVD") else: title = _("Import Kickstarts and ROMs") label = fsui.HeadingLabel(self, title) self.layout.add(label, margin=10) icon_layout = fsui.HorizontalLayout() self.layout.add(icon_layout, fill=True) icon_layout.add_spacer(20) if self.type == self.AMIGA_FOREVER: image = fsui.Image("fs_uae_launcher:res/amiga_forever_group.png") else: image = fsui.Image("fs_uae_launcher:res/kickstart.png") self.image_view = fsui.ImageView(self, image) icon_layout.add(self.image_view, valign=0.0, margin=10) vert_layout = fsui.VerticalLayout() icon_layout.add(vert_layout, fill=True, expand=True) if self.type == self.AMIGA_FOREVER: text = _("If you own Amiga Forever, select the drive/folder " "and click \"{0}\"").format(_("Import")) else: text = _("Select a folder containing Amiga kickstart files " "and click \"{0}\"").format(_("Import")) label = fsui.Label(self, text) vert_layout.add(label, margin=10) hori_layout = fsui.HorizontalLayout() vert_layout.add(hori_layout, fill=True, margin=10) self.text_field = fsui.TextField(self, "", read_only=True) hori_layout.add(self.text_field, expand=True)#, expand=True, fill=True) self.browse_button = fsui.Button(self, _("Browse")) self.browse_button.on_activate = self.on_browse hori_layout.add(self.browse_button, margin_left=10) self.import_button = fsui.Button(self, _("Import")) self.import_button.on_activate = self.on_import self.import_button.disable() hori_layout.add(self.import_button, margin_left=10) def set_path(self, path): self.path = path self.text_field.set_text(path) self.import_button.enable() def on_browse(self): dialog = fsui.DirDialog(self.get_window(), _("Select Source Directory")) if dialog.show_modal(): self.set_path(dialog.get_path()) dialog.destroy() def on_import(self): dialog = ImportDialog(self.get_window(), self.path, self.type) dialog.show_modal() dialog.destroy() Signal.broadcast("scan_done") fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/imports/ImportDialog.py0000644000175000017500000000366212162366654026065 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import fs_uae_launcher.fsui as fsui from ...I18N import _, ngettext from .ImportTask import ImportTask TIMER_INTERVAL = 100 class ImportDialog(fsui.Dialog): AMIGA_FOREVER = 1 def __init__(self, parent, path, type): if type == self.AMIGA_FOREVER: title = _("Import From Amiga Forever CD/DVD") else: title = _("Import Kickstarts and ROMs") fsui.Dialog.__init__(self, parent, title) self.layout = fsui.VerticalLayout() self.layout.padding_left = 20 self.layout.padding_top = 20 self.layout.padding_right = 20 self.layout.padding_bottom = 20 self.text_area = fsui.TextArea(self, read_only=True) self.text_area.set_min_width(600) self.text_area.set_min_height(300) self.layout.add(self.text_area) hori_layout = fsui.HorizontalLayout() self.layout.add(hori_layout, fill=True, margin_top=20) hori_layout.add_spacer(0, expand=True) self.close_button = fsui.Button(self, _("Close")) self.close_button.on_activate = self.on_close_button self.close_button.disable() hori_layout.add(self.close_button) self.line_count = 0 self.task = ImportTask(path, type) self.task.start() self.set_size(self.layout.get_min_size()) self.center_on_parent() fsui.call_later(TIMER_INTERVAL, self.on_timer) def on_timer(self): if self.task.done: self.close_button.enable() else: fsui.call_later(TIMER_INTERVAL, self.on_timer) lines = self.task.get_new_log_lines(self.line_count) for line in lines: self.text_area.append_text(line + "\n") self.line_count += len(lines) def on_close_button(self): self.end_modal(False) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/imports/ImportTask.py0000644000175000017500000000642612162366654025571 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import os import shutil import threading import traceback import fs_uae_launcher.fsui as fsui from ...Database import Database from ...I18N import _, ngettext from ...ROMManager import ROMManager from ...Settings import Settings from ...Signal import Signal class ImportTask(threading.Thread): AMIGA_FOREVER = 1 def __init__(self, path, type): threading.Thread.__init__(self) self.path = path self.type = type self.done = False self.log_lines = [] self.log_lock = threading.Lock() def run(self): if self.type: self.log(_("Amiga Forever import task started")) else: self.log(_("Kickstart import task started")) self.log("") print("ImportTask.run") try: self.run_task() except Exception, e: self.log("") self.log(repr(e)) traceback.print_exc() self.done = True print("ImportTask.run is done") self.log("") self.log(_("Import task is done")) def run_in_main(): Signal.broadcast("scan_done") fsui.call_after(run_in_main) def get_new_log_lines(self, count): with self.log_lock: if len(self.log_lines) <= count: return [] return self.log_lines[count:] def log(self, line): with self.log_lock: self.log_lines.append(line) def run_task(self): if self.type == 0: self.import_roms() elif self.type == 1: self.import_amiga_forever() database = Database() ROMManager.patch_standard_roms(database) def import_roms(self): self.copy_roms(self.path, Settings.get_kickstarts_dir()) def import_amiga_forever(self): self.copy_roms(os.path.join(self.path, "Amiga Files", "Shared", "rom"), Settings.get_kickstarts_dir()) def copy_file(self, src, dst): with self.log_lock: self.log_lines.append(_("Copy {0}\nto {1}").format(src, dst)) if not os.path.exists(os.path.dirname(dst)): os.makedirs(os.path.dirname(dst)) if os.path.exists(dst): # try to remove the file first, in case the file has read-only # permissions try: os.remove(dst) except Exception: pass shutil.copy(src, dst) def copy_roms(self, src, dst): if not os.path.isdir(src): self.log("{0} is not a directory".format(src)) return src_file = os.path.join(src, "rom.key") if os.path.exists(src_file): dst_file = os.path.join(dst, "rom.key") self.copy_file(src_file, dst_file) for file_name in os.listdir(src): name, ext = os.path.splitext(file_name) if ext not in [".rom"]: continue src_file = os.path.join(src, file_name) dst_file = os.path.join(dst, file_name) self.copy_file(src_file, dst_file) database = Database() ROMManager.add_rom_to_database(dst_file, database, self.log) database.commit() fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/imports/__init__.py0000644000175000017500000000000012162366654025211 0ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/ImageLoader.py0000644000175000017500000001216412162366654024144 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import os import time import hashlib import weakref import urllib2 import threading import traceback import fs_uae_launcher.fsui as fsui from ..Settings import Settings from ..Signal import Signal SENTINEL = "3e31297d-2ae9-4014-9247-2495d40e5382" class ImageLoader: instance = None @classmethod def get(cls): if not cls.instance: cls.instance = cls(SENTINEL) return cls.instance def __init__(self, sentinel): assert sentinel == SENTINEL self.stop_flag = False self.requests_lock = threading.Lock() self.requests = [] threading.Thread(target=self.image_loader_thread).start() Signal.add_listener("quit", self) def on_quit_signal(self): print("ImageLoader.on_quit_signal") self.stop_flag = True def image_loader_thread(self): try: self._image_loader_thread() except Exception: traceback.print_exc() def load_image(self, path="", sha1="", size=None, on_load=None, **kwargs): request = ImageLoadRequest() request.path = path request.sha1 = sha1 request.image = None request.size = size request.on_load = on_load #for key, value in kwargs.iteritems: # setattr(request.data, key, value) request.args = kwargs with self.requests_lock: self.requests.append(weakref.ref(request)) return request def _image_loader_thread(self): while not self.stop_flag: #self.condition.wait() request = None with self.requests_lock: while len(self.requests) > 0: request = self.requests.pop(0)() if request is not None: break if request: self.fill_request(request) request.notify() # FIXME: replace with condition time.sleep(0.01) def fill_request(self, request): try: self._fill_request(request) except Exception: traceback.print_exc() def get_cache_path_for_sha1(self, request, sha1): #print("get_cache_path_for_sha1", sha1) if request.args.get("is_cover", False): size_arg = "?size={0}".format(256) cache_ext = "_{0}".format(256) elif request.size: size_arg = "?w={0}&h={1}".format(request.size[0], request.size[1]) cache_ext = "_{0}x{1}".format(request.size[0], request.size[1]) else: size_arg = "" cache_ext = "" cache_dir = os.path.join(Settings.get_cache_dir(), "Images", sha1[:3]) if not os.path.exists(cache_dir): os.makedirs(cache_dir) cache_file = os.path.join(cache_dir, sha1 + cache_ext) if os.path.exists(cache_file): # an old bug made it possible for 0-byte files to exist, so # we check for that here.. if os.path.getsize(cache_file) > 0: return cache_file try: server = os.environ["FS_GAME_DATABASE_SERVER"] except KeyError: server = "fengestad.no" url = "http://fengestad.no/games/image/{0}{1}".format( sha1, size_arg) r = urllib2.urlopen(url) data = r.read() with open(cache_file, "wb") as f: f.write(data) return cache_file def _fill_request(self, request): if request.path is None: return path = "" if request.path.startswith("sha1:"): path = self.get_cache_path_for_sha1(request, request.path[5:]) double_size = False else: path = request.path double_size = True if path: print("loading image from", request.path) image = fsui.Image(path) print(image.size, request.size) if request.size is not None: dest_size = request.size else: dest_size = image.size if image.size == dest_size: request.image = image return try: ratio = image.size[0] / image.size[1] except Exception: ratio = 1.0 if ratio > 0.85 and ratio < 1.20: min_length = min(request.size) dest_size = (min_length, min_length) if double_size and image.size[0] < 400: image.resize((image.size[0] * 2, image.size[1] * 2), fsui.Image.NEAREST) image.resize(dest_size) #print(image) request.image = image class ImageLoadRequest: def __init__(self): self.on_load = None self.size = None self.args = {} def notify(self): if self.on_load: def on_load_function(): self.on_load(self) fsui.call_after(on_load_function) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/VariantsBrowser.py0000644000175000017500000001342312162366654025125 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import os import traceback import fs_uae_launcher.fsui as fsui from ..Config import Config from ..Signal import Signal from ..Settings import Settings from ..Database import Database from ..I18N import _, ngettext from ..fsgs.GameDatabase import GameDatabase from ..fsgs.GameDatabaseClient import GameDatabaseClient from .Constants import Constants class LastVariants: def __init__(self): self.cache = {} Signal.add_listener("quit", self) def on_quit_signal(self): database = Database.get_instance() for key, value in self.cache.iteritems(): database.set_last_game_variant(key, value) database.commit() class VariantsBrowser(fsui.VerticalItemView): @staticmethod def use_horizontal_layout(): return fsui.get_screen_size()[0] > 1024 def __init__(self, parent): fsui.VerticalItemView.__init__(self, parent) #fsui.Group.__init__(self, parent) #self.layout = fsui.HorizontalLayout() #self.combo = fsui.ComboBox(self) #self.layout.add(self.combo, expand=True, fill=True) self.game_uuid = "" self.items = [] self.last_variants = LastVariants() self.icon = fsui.Image("fs_uae_launcher:res/fsuae_config_16.png") self.adf_icon = fsui.Image("fs_uae_launcher:res/adf_game_16.png") self.ipf_icon = fsui.Image("fs_uae_launcher:res/ipf_game_16.png") self.cd_icon = fsui.Image("fs_uae_launcher:res/cd_game_16.png") self.hd_icon = fsui.Image("fs_uae_launcher:res/hd_game_16.png") Settings.add_listener(self) self.on_setting("parent_uuid", Settings.get("parent_uuid")) def on_destroy(self): Settings.remove_listener(self) #Signal.remove_listener("quit", self) def on_select_item(self, index): self.load_variant(self.items[index][1]) variant_uuid = self.items[index][3] self.last_variants.cache[self.parent_uuid] = variant_uuid #database = Database.get_instance() #database.set_last_game_variant(self.game_uuid, variant_uuid) #database.commit() def on_activate_item(self, index): from ..LaunchHandler import LaunchHandler LaunchHandler.start_game() def on_setting(self, key, value): if key == "parent_uuid": self.parent_uuid = value if value: self.update_list(value) else: Settings.set("game_uuid", "") self.set_items([]) def set_items(self, items): self.items = items self.update() def get_item_count(self): return len(self.items) def get_item_text(self, index): return self.items[index][2] def get_item_icon(self, index): name = self.items[index][2] if "IPF" in name: return self.ipf_icon if "ADF" in name: return self.adf_icon if "WHDLoad" in name: return self.hd_icon if "CD32" in name: return self.cd_icon if "CDTV" in name: return self.cd_icon return self.icon def update_list(self, game_uuid): #print("--- UPDATE LIST ---") #self.search = Settings.get("config_search").strip().lower() #print("search for", self.search) database = Database.get_instance() items = database.find_game_variants(game_uuid) #items = database.search_configurations(self.search) self.items = [] for item in items: name = item[1] name = name.replace(u"\nAmiga \u00b7 ", "\n") #name = name.replace(u"\nCD32 \u00b7 ", "\n") #name = item[1].replace("\n", " \u00b7 ") # only show variant name (without game name) name = name.split("\n", 1)[-1] sort_key = (1000000 - item[3], 1000000 - item[4], name) self.items.append((sort_key, item[0], name, item[2], item[5])) self.items.sort() self.set_items(self.items) for i, item in enumerate(self.items): if item[4] == 5: self.select_item(i) break else: if len(self.items) > 0: self.select_item(0) """ try: variant_uuid = self.last_variants.cache[game_uuid] except KeyError: variant_uuid = database.get_last_game_variant(game_uuid) if len(self.items) > 0: for i, item in enumerate(self.items): if item[3] == variant_uuid: self.select_item(i) break else: self.select_item(0) """ def load_variant(self, configuration_id): database = Database.get_instance() config_info = database.get_config(configuration_id) print(config_info) game_uuid = config_info["uuid"] game_database = GameDatabase.get_instance() game_database_client = GameDatabaseClient(game_database) try: game_id = game_database_client.get_game_id(game_uuid) except Exception: # game not found: print("could not find game", repr(game_uuid)) Config.load_default_config() return values = game_database_client.get_final_game_values(game_id) print(values) Config.load_values(values, uuid=game_uuid) variant_rating = 0 if config_info["work_rating"] is not None: variant_rating = config_info["work_rating"] - 2 if config_info["like_rating"]: variant_rating = config_info["like_rating"] Config.set("__variant_rating", str(variant_rating)) Settings.set("config_changed", "0") fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ui/ChecksumDialog.py0000644000175000017500000000154512162366654024656 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import hashlib import fs_uae_launcher.fsui as fsui from ..I18N import _, ngettext class ChecksumDialog(fsui.Window): def __init__(self, parent, path): fsui.Window.__init__(self, parent, "Checksumming") self.layout = fsui.VerticalLayout() label = fsui.HeadingLabel(self, "Checksumming file...") self.layout.add(label, fill=True) self.layout.add_spacer(6) #self.center_on_parent() def checksum(self, path): #raise Exception(".") s = hashlib.sha1() with open(path, "rb") as f: data = f.read() while data: s.update(data) data = f.read() #aa = bb return s.hexdigest() fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/lhafile.py0000755000175000017500000003156412162366654022772 0ustar glaubitzglaubitz# -*- coding:utf-8 -*- # Copyright (c) 2010 Hidekazu Ohnishi. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are # met: # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above # copyright notice, this list of conditions and the following # disclaimer in the documentation and/or other materials provided # with the distribution. # # * Neither the name of the author nor the names of its contributors # may be used to endorse or promote products derived from this # software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT # HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. """Lhafile, extension extract lzh file. Its interface is likey zipfile module is include in regular python environment. """ import cStringIO import datetime import os import os.path import struct import sys import lzhlib crc16 = lzhlib.crc16 def is_lhafile(filename): try: Lhafile(filename) except: return False return True class BadLhafile(Exception): pass class LhaInfo(object): __slots__ = ( 'orig_filename', 'filename', 'directory', 'date_time', 'compress_type', 'comment', 'extra', 'create_system', 'create_version', 'extract_version', 'reserved', 'flag_bits', 'volume', 'internal_attr', 'external_attr', 'header_offset', 'file_offset', 'CRC', 'compress_size', 'file_size', ) def __init__(self): self.orig_filename = None self.filename = None self.directory = None self.date_time = None self.compress_type = None self.comment = None self.extra = None self.create_system = None self.create_version = None self.extract_version = None self.reserved = None self.flag_bits = None self.volume = None self.internal_attr = None self.external_attr = None self.header_offset = None self.file_offset = None self.CRC = None self.compress_size = None self.file_size = None def __str__(self): return '%s %s %08X %d %04X' % (self.filename, self.file_size, self.file_offset, self.compress_size, self.CRC) def __getstate__(self): return (self.orig_filename, self.filename, self.directory, self.date_time, self.compress_type, self.comment, self.extra, self.create_system, self.create_version, self.extract_version, self.reserved, self.flag_bits, self.volume, self.internal_attr, self.external_attr, self.header_offset, self.file_offset, self.CRC, self.compress_size, self.file_size) def __setstate__(self, state): (self.orig_filename, self.filename, self.directory, self.date_time, self.compress_type, self.comment, self.extra, self.create_system, self.create_version, self.extract_version, self.reserved, self.flag_bits, self.volume, self.internal_attr, self.external_attr, self.header_offset, self.file_offset, self.CRC, self.compress_size, self.file_size) = state class Lhafile: """ """ SUPPORTED_COMPRESS_TYPE = ('-lhd-', '-lh0-', '-lh5-', '-lh6-', '-lh7-'); def __init__(self, file, mode="r", compression=None, callback=None, args=None): """ Open the LZH file """ self.filelist = [] self.NameToInfo = {} self.mode = key = mode.replace('b', '')[0] if isinstance(file, basestring): self._fileParsed = 0 self.filename = file modeDict = {'r' : 'rb'} self.fp = open(file, modeDict[mode]) else: self._fileParsed = 1 self.fp = file self.filename = getattr(file, 'name', None) # Get file size initial_pos = self.fp.tell() self.fp.seek(0, 2) self.filesize = self.fp.tell() self.fp.seek(initial_pos, 0) if key == 'r': self._GetContents(callback=callback,args=args) else: if not self._fileParsed: self.fp.close() self.fp = None raise RuntimeError, 'Mode must be "r"' def _GetContents(self, callback=None, args=None): try: info = self._RealGetContent() while info: if not info.compress_type in Lhafile.SUPPORTED_COMPRESS_TYPE: raise RuntimeError, "Unsupported file is contained %s" % (info.compress_type,) if callback: callback(args, self.fp.tell(), self.filesize, info) self.filelist.append(info) self.NameToInfo[info.filename] = info info = self._RealGetContent() except BadLhafile, e: raise if not self._fileParsed: self.fp.close() self.fp = None def _RealGetContent(self): fp = self.fp filesize = self.filesize initial_pos = fp.tell() is_read = lambda x: fp.tell() + (x) < filesize if fp.tell() == filesize - 1: return None if not is_read(26): raise BadLhafile, "Header is broken" # Check OS level os_level = ord(fp.read(21)[20]) fp.seek(-21, 1) if not os_level in (0, 1, 2): raise BadLhafile, "this file level is out of support range %d" % os_level if os_level in (0, 1): header_size, checksum, signature, skip_size, \ file_size, modify_time, reserved , os_level, \ filename_length = struct.unpack('> 1) + 1980 month = ((ord(modify_time[3]) << 8 | ord(modify_time[2])) >> 5) & 0x0F day = ord(modify_time[2]) & 0x1F hour = ord(modify_time[1]) >> 3 minute = ((ord(modify_time[1]) << 8 | ord(modify_time[0])) >> 5) & 0x2F second = (ord(modify_time[0]) & 0x1F) * 2 #print(os_level, year, month, day, hour, minute, second) try: date_time = datetime.datetime(year, month, day, hour, minute, second) except Exception: date_time = datetime.datetime(1970, 1, 1) create_time = date_time elif os_level in (2,): dummy_date = datetime.datetime(1970,1,1) date_time = dummy_date.fromtimestamp(modify_time) create_time = date_time info = LhaInfo() if directory is None: # for lhaplus archive sjisname = unicode(filename, 'cp932') if '\\' in sjisname: sjispath = [s.encode('cp932') for s in sjisname.split(u'\\')] filename = os.sep.join(sjispath) directory = os.sep.join(sjispath[:-1]) else: directory = os.sep.join(directory.split('\xff')) filename = os.path.join(directory, filename) info.directory = directory info.filename = filename info.compress_size = compress_size info.file_size = file_size info.CRC = crc info.header_offset = initial_pos info.file_offset = file_offset info.external_attr = None info.internal_attr = None info.reserved = 0 info.comment = comment info.compress_type = signature info.date_time = date_time if b"\x00" in info.filename: info.filename, info.comment = info.filename.split("\x00") return info def lhaname(self): return self.filename def namelist(self): if self.filelist: return [d.filename for d in self.filelist \ if d.compress_type in Lhafile.SUPPORTED_COMPRESS_TYPE] return None def infolist(self): return self.filelist def read(self, name): """Return file bytes (as a string) for 'name'. """ if not self.fp: raise RuntimeError, \ "Attempt to read LZH archive that was already closed" info = self.NameToInfo[name] if info.compress_type in Lhafile.SUPPORTED_COMPRESS_TYPE: self.fp.seek(info.file_offset) fin = cStringIO.StringIO(self.fp.read(info.compress_size)) fout = cStringIO.StringIO() try: session = lzhlib.LZHDecodeSession(fin, fout, info) while session.do_next() == False: pass outsize = session.output_pos crc = session.crc16 except Exception, e: raise e if outsize != info.file_size: raise BadLhafile, "%s output_size is not matched %d/%d %s" % \ (name, outsize, info.file_size, info.compress_type) if crc != info.CRC: raise BadLhafile, "crc is not matched" fout.seek(0) bytes = fout.read() elif info.commpress_type == '-lhd-': raise RuntimeError, \ "name is directory" else: raise RuntimeError, \ "Unsupport format" return bytes fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/FloppyManager.py0000644000175000017500000000637512162366654024131 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import os import fs_uae_launcher.fsui as fsui from .ui.LauncherFileDialog import LauncherFileDialog from .Amiga import Amiga from .Archive import Archive from .Config import Config from .I18N import _, ngettext from .Paths import Paths from .Settings import Settings class FloppyManager: @classmethod def clear_all(cls): for i in range(4): cls.eject(i) cls.clear_floppy_list() @classmethod def eject(cls, drive): values = [] values.append(("floppy_drive_{0}".format(drive), "")) values.append(("x_floppy_drive_{0}_sha1".format(drive), "")) Config.set_multiple(values) @classmethod def clear_floppy_list(cls): values = [] for i in range(Amiga.MAX_FLOPPY_IMAGES): values.append(("floppy_image_{0}".format(i), "")) values.append(("x_floppy_image_{0}_sha1".format(i), "")) Config.set_multiple(values) @classmethod def multiselect(cls, parent=None): default_dir = Settings.get_floppies_dir() dialog = LauncherFileDialog(parent, _("Select Multiple Floppies"), "floppy", multiple=True) if not dialog.show(): return original_paths = dialog.get_paths() original_paths.sort() paths = [] for path in original_paths: embedded_files = [] if path.endswith(".zip"): archive = Archive(path) files = archive.list_files() for file in files: name, ext = os.path.splitext(file) # FIXME: get list of floppy extensions from a central # place if ext in [".adf", ".ipf"]: embedded_files.append(file) if len(embedded_files) > 0: embedded_files.sort() print("found embedded floppy images:") print(embedded_files) for file in embedded_files: paths.append(file) else: paths.append(path) from .ChecksumTool import ChecksumTool checksum_tool = ChecksumTool(parent) for i, path in enumerate(paths): sha1 = checksum_tool.checksum(path) path = Paths.contract_path(path, default_dir) if i < 4: Config.set_multiple([ ("floppy_drive_{0}".format(i), path), ("x_floppy_drive_{0}_sha1".format(i), sha1)]) Config.set_multiple([ ("floppy_image_{0}".format(i), path), ("x_floppy_image_{0}_sha1".format(i), sha1)]) # blank the rest of the drives for i in range(len(paths), 4): Config.set_multiple([ ("floppy_drive_{0}".format(i), ""), ("x_floppy_drive_{0}_sha1".format(i), "")]) # blank the rest of the image list for i in range(len(paths), 20): Config.set_multiple([ ("floppy_image_{0}".format(i), ""), ("x_floppy_image_{0}_sha1".format(i), "")]) #dialog.destroy() fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/fsgs/0000755000175000017500000000000012162366654021742 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/fsgs/GameChangeHandler.py0000644000175000017500000001157312162366654025600 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import os import shutil import hashlib # TODO: review the algorithm and add support for saving information about # (empty) directories. class GameChangeHandler(object): def __init__(self, path): self._preserve_changes_dir = path def init(self, state_dir, ignore=[]): print("\n" + "-" * 79 + "\n" + "CHANGEHANDLER INIT") print(self._preserve_changes_dir) path = self._preserve_changes_dir if os.path.exists(state_dir): print("Merging preserved changes in", state_dir, "to", path) if state_dir[-1] == "/" or state_dir[-1] == "\\": state_dir = state_dir[:-1] lstate_dir = len(state_dir) first_iteration = True for dirpath, dir_names, file_names in os.walk(state_dir): for file_name in file_names: ignore_file = False if first_iteration: for ig in ignore: assert ig[0] == "*" dummy, ext = os.path.splitext(file_name) if ext.lower() == ig[1:]: print("ignoring", file_name) ignore_file = True break if ignore_file: continue sourcepath = os.path.join(dirpath, file_name) destpath = os.path.join(path, sourcepath[lstate_dir+1:]) if os.path.getsize(sourcepath) == 17: with open(sourcepath, "rb") as f: if f.read() == "FILE_IS_DELETED": print("- removing file", sourcepath[lstate_dir+1:]) if os.path.exists(destpath): os.remove(destpath) else: print(" (already gone)") continue print("- updating file", sourcepath[lstate_dir+1:]) if not os.path.isdir(os.path.dirname(destpath)): os.makedirs(os.path.dirname(destpath)) shutil.copyfile(sourcepath, destpath) first_iteration = False else: print("no game state") self._preserve_changes_files = self.create_file_version_list(path) print("done") def update(self, state_dir): print("\n" + "-" * 79 + "\n" + "CHANGEHANDLER UPDATE") print("SRC", self._preserve_changes_dir) print("DST", state_dir) oldfiles = self._preserve_changes_files newfiles = self.create_file_version_list(self._preserve_changes_dir) print("checking files") for filename, newcs in newfiles.iteritems(): try: oldcs = oldfiles[filename] except KeyError: print("New file:", filename) oldcs = None if newcs != oldcs: print("File changed:", filename) print("-", newcs, "vs", oldcs) sourcepath = os.path.join(self._preserve_changes_dir, filename) destpath = os.path.join(state_dir, filename) print("Writing file", destpath) if not os.path.exists(os.path.dirname(destpath)): os.makedirs(os.path.dirname(destpath)) shutil.copyfile(sourcepath, destpath) for filename in oldfiles: if not filename in newfiles: print("File removed", filename) destpath = os.path.join(state_dir, filename) if not os.path.exists(os.path.dirname(destpath)): os.makedirs(os.path.dirname(destpath)) with open(destpath, "wb") as f: f.write("FILE_IS_DELETED") print("done") def create_file_version_list(self, path): print("create_file_version_list") if path[-1] == "/" or path[-1] == "\\": path = path[:-1] lpath = len(path) files = {} for dirpath, dirnames, filenames in os.walk(path): for filename in filenames: filepath = os.path.join(dirpath, filename) checksum = self.md5file(filepath) files[filepath[lpath+1:]] = checksum print(" - found %d files (checksummed)" % len(files,)) return files def md5file(self, file): with open(file, "rb") as f: m = hashlib.md5() while True: buffer = f.read(4096) if buffer == b"": break m.update(buffer) return m.hexdigest() fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/fsgs/GameDatabaseSynchronizer.py0000644000175000017500000002023012162366654027225 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import os import json import time #import zlib from gzip import GzipFile from cStringIO import StringIO import urllib import urllib2 #import threading from ..I18N import _, ngettext class GameDatabaseSynchronizer: username = "" password = "" def __init__(self, client, on_status=None, stop_check=None): if client: self.client = client self.database = client.database self.downloaded_size = 0 self.on_status = on_status self._stop_check = stop_check def stop_check(self): if self._stop_check: return self._stop_check() def set_status(self, title, status): if self.on_status: self.on_status((title, status)) def synchronize(self): self._synchronize() if self.stop_check(): self.client.database.rollback() else: print("commiting data") self.set_status(_("Updating database"), _("Committing data...")) self.database.commit() print("done") def _synchronize(self): self.set_status(_("Updating database"), _("Synchronizing database...")) games = {} users = {} while True: if self.stop_check(): return json_data = self.fetch_change_entries() num_changes = len(json_data["changes"]) have_version = self.client.get_game_database_version() if have_version != json_data["version"]: self.set_status(_("Updating database"), _("Resetting database...")) print("have version {0}, need version {1}".format( repr(have_version), repr(json_data["version"]))) print("clearing database") self.client.clear_database() print("setting database version") self.client.set_game_database_version(json_data["version"]) continue if num_changes == 0: print("no more changes") break print(" processing {0} entries".format(num_changes)) t1 = time.time() for change in json_data["changes"]: try: game_id = games[change["game"]] except KeyError: game_id = self.client.get_or_create_game_id(change["game"]) games[change["game"]] = game_id try: user_id = users[change["submitter"]] except KeyError: user_id = self.client.get_or_create_user_id( change["submitter"]) users[change["submitter"]] = user_id self.client.insert_game_value(game_id, change["key"], change["value"], status=1, user=user_id, submitted=change["submitted"], update_games=False, value_id=change["id"]) t2 = time.time() print(" {0:0.2f} seconds".format(t2 - t1)) last_json_data = "" while True: if self.stop_check(): return json_data = self.fetch_rating_entries() if json_data == last_json_data: print("no more changes") break last_json_data = json_data num_changes = len(json_data["ratings"]) print(" processing {0} entries".format(num_changes)) t1 = time.time() for update in json_data["ratings"]: cursor = self.client.database.cursor() cursor.execute("DELETE FROM game_rating WHERE game = ?", (update["game"],)) cursor.execute("INSERT INTO game_rating (game, work_rating, " "like_rating, updated) VALUES (?, ?, ?, ?)", (update["game"], update["work"], update["like"], update["updated"])) t2 = time.time() print(" {0:0.2f} seconds".format(t2 - t1)) print("downloaded size: {0:0.2f} MiB".format( self.downloaded_size / (1024 * 1024))) count = 0 for game_uuid, game_id in games.iteritems(): if self.stop_check(): return if count % 50 == 0: self.set_status(_("Updating database"), _("Updating game entries:") + " {0} / {1}".format( count, len(games))) if count % 250 == 0: print("updating game entries: {0} / {1}".format(count, len(games))) #print(game_id) self.client.update_game(game_id) count += 1 print("purging old values") self.set_status(_("Updating database"), _("Purging old entries...")) self.client.delete_old_values() def get_server(self): try: server = os.environ["FS_GAME_DATABASE_SERVER"] except KeyError: server = "fengestad.no" auth_handler = urllib2.HTTPBasicAuthHandler() auth_handler.add_password(realm="FS Game Database", uri="http://{0}".format(server), user=self.username, passwd=self.password) opener = urllib2.build_opener(auth_handler) return server, opener def fetch_change_entries(self): last_id = self.client.get_last_change_id() self.set_status(_("Updating database"), _("Fetching database entries ({0})").format(last_id + 1)) server = self.get_server()[0] url = "http://{0}/games/api/1/changes?from={1}".format(server, last_id + 1) print(url) data, json_data = self.fetch_json(url) self.downloaded_size += len(data) #print(json_data) return json_data def fetch_rating_entries(self): cursor = self.client.database.cursor() cursor.execute("SELECT max(updated) FROM game_rating") row = cursor.fetchone() last_time = row[0] if not last_time: last_time = "2012-01-01 00:00:00" self.set_status(_("Updating database"), _("Fetching game ratings ({0})").format(last_time)) server = self.get_server()[0] url = "http://{0}/games/api/1/ratings?from={1}".format(server, urllib.quote_plus(last_time)) print(url) data, json_data = self.fetch_json(url) self.downloaded_size += len(data) #print(json_data) return json_data def fetch_json_attempt(self, url): server, opener = self.get_server() request = urllib2.Request(url) request.add_header("Accept-Encoding", "gzip") response = opener.open(request) # print(response.headers) data = response.read() #print(dir(response.headers)) content_encoding = response.headers.getheader( "content-encoding", "").lower() if content_encoding == "gzip": #data = zlib.decompress(data) fake_stream = StringIO(data) data = GzipFile(fileobj=fake_stream).read() #else: # data = response.read() #if int(time.time()) % 2 == 0: # raise Exception("fail horribly") return data, json.loads(data) def fetch_json(self, url): for i in range(20): try: return self.fetch_json_attempt(url) except Exception, e: print(e) sleep_time = 2.0 + i * 0.3 # FIXME: change second {0} to {1} self.set_status(_("Updating database"), _("Download failed (attempt {0}) - " "retrying in {0} seconds").format( i + 1, int(sleep_time))) time.sleep(sleep_time) self.set_status(_("Updating database"), _("Retrying last operation (attempt {0})").format( i + 1)) return self.fetch_json_attempt(url) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/fsgs/GameDatabase.py0000644000175000017500000001250112162366654024611 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import os import sqlite3 import threading class GameDatabase: VERSION = 4 thread_local = threading.local() database_path = None @classmethod def get_database_path(cls): if not cls.database_path: raise Exception("GameDatabase: Database path not set") return cls.database_path @classmethod def set_database_path(cls, path): cls.database_path = path @classmethod def get_instance(cls): if not hasattr(cls.thread_local, "instance"): cls.thread_local.instance = cls(cls.get_database_path()) return cls.thread_local.instance def __init__(self, path): self._path = path self._connection = None self._cursor = None def init(self): if self._connection: return self._connection = sqlite3.connect(self._path) self._cursor = self._connection.cursor() self.ensure_updated_database() def query(self, q): return q.replace("%s", "?") def cursor(self): self.init() return self._connection.cursor() def rollback(self): print("GameDatabase.rollback") self.init() self._connection.rollback() def commit(self): print("GameDatabase.commit") self.init() self._connection.commit() def ensure_updated_database(self): try: self._cursor.execute("SELECT version FROM metadata") version = self._cursor.fetchone()[0] except sqlite3.OperationalError: self._cursor.execute("CREATE TABLE metadata (version INTEGER)") self._cursor.execute("INSERT INTO metadata (version) VALUES (?)", (0,)) version = 0 if self.VERSION < version: raise Exception("GameDatabase: Installed database schema is " "newer. Have you started an old version?") if self.VERSION > version: self.update_database(version, self.VERSION) def update_database(self, old, new): for i in range(old + 1, new + 1): print("upgrading game database to version", i) getattr(self, "update_database_to_version_{0}".format(i))() self._cursor.execute("UPDATE metadata SET version = ?", (i,)) self.commit() def update_database_to_version_1(self): self._cursor.execute(""" ALTER TABLE metadata ADD COLUMN games_version INTEGER NOT NULL DEFAULT 0; """) self._cursor.execute(""" CREATE TABLE user ( id INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT NOT NULL, password TEXT NOT NULL DEFAULT '', email TEXT NOT NULL DEFAULT '' ); """) self._cursor.execute(""" INSERT INTO user (username) VALUES ("System"); """) self._cursor.execute(""" CREATE TABLE game ( id INTEGER PRIMARY KEY AUTOINCREMENT, uuid CHAR(36) NOT NULL, parent INT, game TEXT NOT NULL DEFAULT '', variant TEXT NOT NULL DEFAULT '', platform TEXT NOT NULL DEFAULT '', name TEXT NOT NULL DEFAULT '', search TEXT NOT NULL DEFAULT '', files INTEGER NOT NULL DEFAULT 0, FOREIGN KEY (parent) REFERENCES game (id) ON UPDATE CASCADE ON DELETE SET NULL ); """) self._cursor.execute(""" CREATE INDEX game_uuid ON game (uuid); """) self._cursor.execute(""" CREATE TABLE value ( id INTEGER PRIMARY KEY AUTOINCREMENT, game INT NOT NULL, name VARCHAR(64) NOT NULL, value TEXT NOT NULL, status INT NOT NULL, submitted TIMESTAMP NOT NULL, submitter INT NOT NULL, reviewed TIMESTAMP NULL, reviewer INT, FOREIGN KEY (game) REFERENCES game (id) ON UPDATE CASCADE, FOREIGN KEY (submitter) REFERENCES user (id) ON UPDATE CASCADE, FOREIGN KEY (reviewer) REFERENCES user (id) ON UPDATE CASCADE ); """) self._cursor.execute(""" CREATE INDEX value_game_status ON value (game, status); """) #self._cursor.execute(""" # CREATE INDEX value_game_name_status ON value (game, name, status); #""") def update_database_to_version_2(self): self._cursor.execute(""" CREATE TABLE game_rating ( game VARCHAR(36) PRIMARY KEY NOT NULL, work_rating INT NOT NULL, like_rating INT NOT NULL, updated TIMESTAMP NULL ); """) def update_database_to_version_3(self): self._cursor.execute(""" ALTER TABLE game ADD COLUMN sort_key TEXT NOT NULL DEFAULT ''; """) self._cursor.execute(""" UPDATE game SET sort_key = lower(name); """) def update_database_to_version_4(self): self._cursor.execute(""" ALTER TABLE game ADD COLUMN status INTEGER NOT NULL DEFAULT 0; """) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/fsgs/GameDatabaseClient.py0000644000175000017500000002740112162366654025755 0ustar glaubitzglaubitzfrom __future__ import unicode_literals class GameDatabaseClient: def __init__(self, database): self.database = database def get_or_create_game_id(self, game_uuid): cursor = self.database.cursor() cursor.execute(self.database.query( "SELECT id FROM game WHERE uuid = %s"), (game_uuid,)) row = cursor.fetchone() if row is None: # cursor.execute("INSERT INTO game (uuid, updated) " # "VALUES (%s, utc_timestamp())", # (game_uuid,)) cursor.execute(self.database.query("INSERT INTO game (uuid) " "VALUES (%s)"), (game_uuid,)) cursor.execute(self.database.query("SELECT id FROM game " "WHERE uuid = %s"), (game_uuid,)) row = cursor.fetchone() return row[0] def get_game_id(self, game_uuid): cursor = self.database.cursor() cursor.execute(self.database.query( "SELECT id FROM game WHERE uuid = %s"), (game_uuid,)) row = cursor.fetchone() if row is None: raise Exception("game {0} not found".format(game_uuid)) return row[0] def get_ancestor_game_id(self, game_uuid): cursor = self.database.cursor() cursor.execute(self.database.query( "SELECT id, parent FROM game WHERE uuid = %s"), (game_uuid,)) row = cursor.fetchone() if row is None: raise Exception("game {0} not found".format(game_uuid)) return row[1] or row[0] def get_or_create_user_id(self, username): cursor = self.database.cursor() cursor.execute(self.database.query( "SELECT id FROM user WHERE username = %s"), (username,)) row = cursor.fetchone() if row is None: cursor.execute(self.database.query("INSERT INTO user (username) " "VALUES (%s)"), (username,)) cursor.execute(self.database.query("SELECT id FROM user " "WHERE username = %s"), (username,)) row = cursor.fetchone() return row[0] def insert_game_value(self, game_id, key, value, status, user=1, submitted=None, update_games=True, value_id=None, reviewer=None): key = key.strip().lower().replace("-", "_") value = value.strip() cursor = self.database.cursor() #print((game_id, key, value)) cursor.execute(self.database.query("SELECT value FROM value " "WHERE game = %s AND name = %s and status = 1"), (game_id, key)) row = cursor.fetchone() #if row is not None and row[0].decode("UTF-8") == value: if row is not None and row[0] == value: # key - value already active if value_id: # we must insert this anyway, since a specific value id is # wanted in the database pass else: return if status == 1: cursor.execute(self.database.query("UPDATE value SET status = 0 " "WHERE game = %s and name = %s and status = %s"), (game_id, key, status)) if submitted and value_id: cursor.execute(self.database.query("INSERT INTO value (id, game, " "name, value, submitted, submitter, status) " "VALUES (%s, %s, %s, %s, %s, %s, %s)"), (value_id, game_id, key, value, submitted, user, status)) cursor.execute(self.database.query( "SELECT max(id) from value")) elif reviewer is not None: cursor.execute(self.database.query("INSERT INTO value (game, " "name, value, submitted, submitter, status, " "reviewer, reviewed) " "VALUES (%s, %s, %s, %s, %s, %s, %s, utc_timestamp())"), (game_id, key, value, submitted, user, status, reviewer)) else: cursor.execute(self.database.query("INSERT INTO value (game, " "name, value, submitted, submitter, status) " "VALUES (%s, %s, %s, utc_timestamp(), %s, %s)"), (game_id, key, value, user, status)) if update_games and status == 1 and key in ["game_name", "sort_key", "variant_name", "x_name", "parent_uuid", "file_list", "_status"]: self.update_game(game_id) def get_final_game_values(self, game_id, recursive=True): cursor = self.database.cursor() values = {} original_game_id = game_id while game_id: cursor.execute(self.database.query("SELECT name, value FROM " "value WHERE game = %s and status = 1"), (game_id,)) parent_uuid = "" for row in cursor: name, value = row if not value: continue if name[0] == '_': # non-inheritable variables if game_id != original_game_id: continue if name == "parent_uuid": parent_uuid = value if name == "file_list" and game_id != original_game_id: continue if not name in values: values[name] = value if not recursive: return values if parent_uuid: print("cannot find parent for", game_id, parent_uuid) cursor.execute(self.database.query("SELECT id FROM game " "WHERE uuid = %s"), (parent_uuid,)) game_id = cursor.fetchone()[0] else: game_id = None return values def get_game_values(self, game_id, status=1): return self.get_final_game_values(game_id, False) def get_pending_game_values(self, game_id): cursor = self.database.cursor() values = [] cursor.execute(self.database.query("SELECT name, value FROM " "value WHERE game = %s and status = -1"), (game_id,)) for row in cursor: name, value = row values.append((name, value)) return values def get_game_value_data(self, game_id): cursor = self.database.cursor() values = [] cursor.execute(self.database.query("SELECT value.id, status, name, " "value, username FROM value, user " "WHERE value.submitter = user.id " "AND game = %s AND (status = 1 OR status = -1)" "ORDER BY status DESC, name"), (game_id,)) for row in cursor: id, status, name, value, username = row values.append((id, status, name, value, username)) return values def update_game(self, game_id): cursor = self.database.cursor() values = self.get_final_game_values(game_id) platform = values.get("platform", "") game = values.get("game_name", "") sort_key = values.get("sort_key", "") variant = values.get("variant_name", "") x_name = values.get("x_name", "") try: status = int(values.get("_status", "0")) except: status = 0 parent_uuid = values.get("parent_uuid", "") parent = None if parent_uuid: cursor.execute(self.database.query("SELECT id FROM game " "WHERE uuid = %s"), (parent_uuid,)) row = cursor.fetchone() if row is not None: parent = row[0] files = 1 if values.get("file_list", "") else 0 if game and variant: name = "{0} ({1})".format(game, variant) else: name = x_name or game or variant if not sort_key: sort_key = game if sort_key and variant: sort_key = "{0} ({1})".format(sort_key, variant) else: sort_key = x_name or sort_key or variant sort_key = sort_key.lower() search = name.lower() cursor.execute(self.database.query("UPDATE game SET game = %s, " "variant = %s, name = %s, search = %s, platform = %s, " "files = %s, parent = %s, sort_key = %s, status = %s " "WHERE id = %s"), (game, variant, name, search, platform, files, parent, sort_key, status, game_id)) cursor.execute(self.database.query("SELECT id FROM game WHERE " "parent = %s"), (game_id,)) game_ids = [] for row in cursor: game_ids.append(row[0]) for gid in game_ids: self.update_game(gid) def get_changes(self, start, limit): cursor = self.database.cursor() cursor.execute(self.database.query("SELECT value.id, value.name, " "value, user.username, submitted, game.uuid " "FROM value, user, game WHERE value.submitter = user.id AND " "value.game = game.id AND status = 1 AND value.id >= %s " "ORDER BY value.id LIMIT %s"), (start, limit)) for row in cursor: yield { "id": row[0], "key": row[1], #"value": row[2].decode("UTF-8"), "value": row[2], "submitter": row[3], "submitted": str(row[4]), "game": row[5], } def get_ratings(self, start, limit, user_id=None): cursor = self.database.cursor() if user_id is not None: cursor.execute(self.database.query("SELECT game.uuid, " "game_rating.work_rating, game_rating.like_rating, " "game_rating.updated FROM game, game_rating WHERE " "game_rating.game = game.id AND game_rating.updated >= %s " "AND game_rating.user = %s LIMIT %s"), (start, user_id, limit)) else: cursor.execute(self.database.query("SELECT uuid, work_rating, " "like_rating, updated FROM game WHERE updated >= %s " "LIMIT %s"), (start, limit)) for row in cursor: yield { "game": row[0], "work": row[1], "like": row[2], "updated": str(row[3]), } def get_user_id(self, username, password): cursor = self.database.cursor() cursor.execute(self.database.query("SELECT id FROM user WHERE " "username = %s and password = %s"), (username, password)) row = cursor.fetchone() if row is None: return None return row[0] def get_last_change_id(self): cursor = self.database.cursor() result = cursor.execute(self.database.query( "SELECT max(id) from value")) last_id = result.fetchone()[0] if not last_id: return 0 return last_id def get_game_database_version(self): cursor = self.database.cursor() result = cursor.execute(self.database.query( "SELECT games_version from metadata")) return result.fetchone()[0] def set_game_database_version(self, version): cursor = self.database.cursor() result = cursor.execute(self.database.query( "UPDATE metadata SET games_version = %s"), (version,)) def delete_old_values(self): cursor = self.database.cursor() cursor.execute(self.database.query("DELETE FROM value " "WHERE status = 0")) def clear_database(self): cursor = self.database.cursor() cursor.execute(self.database.query("DELETE FROM value")) cursor.execute(self.database.query("DELETE FROM game")) cursor.execute(self.database.query("DELETE FROM user")) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/fsgs/__init__.py0000644000175000017500000000000012162366654024041 0ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/fsgs/GameNameUtil.py0000644000175000017500000002660112162366654024631 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import import os import re import unicodedata import unittest class GameNameUtil(object): @classmethod def get_letter(cls, name): letter_name = name.upper() if letter_name.startswith("THE "): letter_name = letter_name[4:] if letter_name.startswith("A "): letter_name = letter_name[2:] for i in range(len(letter_name)): letter = letter_name[i] if letter in "01234567890": letter = "0" break if letter in "ABCDEFGHIJKLMNOPQRSTUVWXYZ": break else: raise Exception("could not find letter for game") return letter @classmethod def create_fs_name(cls, name): name = name.replace(':', ' - ') name = name.replace('*', '-') name = name.replace('?', '') name = name.replace('/', '-') name = name.replace('"', "'") name = name.replace('>>>', " ") name = name.replace('<<<', " ") for i in range(3): name = name.replace(' ', ' ') while name.endswith('.'): name = name[:-1] name = name.strip() return name @classmethod def create_cmp_name(cls, name): name = unicode(name) decomposed = unicodedata.normalize('NFD', name) cmpname = [] for c in decomposed.lower(): if c in u'abcdefghijklmnopqrstuvwxyz0123456789+': cmpname.append(c) return u''.join(cmpname) @classmethod def create_cmpname(cls, name): return cls.create_cmp_name(name) @classmethod def is_bad_dump(cls, path): if '[b]' in path: return True m = re.search('\\[b[0-9]? [^\\]]*\\]', path, re.IGNORECASE) if m is not None: return True return False @classmethod def extract_platform(cls, path): p = path.upper() n = os.path.basename(p) for alias, platform in GamePlatform.aliases.iteritems(): if '(' + alias + ',' in n: return platform if '(' + alias + ')' in n: return platform while os.path.dirname(p) != p: p = os.path.dirname(p) n = os.path.basename(p) for alias, platform in GamePlatform.aliases.iteritems(): if '(' + alias + ',' in n: return platform if '(' + alias + ')' in n: return platform if n in GamePlatform.aliases: return GamePlatform.aliases[n] print("extract_platform returning None for", path) return None @classmethod def find_base_name(cls, path): name = os.path.basename(path) #name = os.path.normcase(name) pos_list = [] pos_list.append(name.find('(')) pos_list.append(name.find('[')) pos_list.append(name.rfind('.')) pos_list.append(len(name)) for pos in sorted(pos_list): if pos > -1: return name[:pos].strip().lower() return name.strip().lower() @classmethod def find_alt(cls, path): m = re.search('\\[a([0-9]*)\\]', path, re.IGNORECASE) if m is not None: if not m.group(1): return 1 return int(m.group(1)) return None @classmethod def strip_alt(cls, path): path = re.sub('\\[a([0-9]*)\\]', '', path) return path @classmethod def find_disk_count(cls, name): for i in range(20): if "of {0})".format(i) in name: return i return 0 @classmethod def find_number(cls, name): # find medium number, if any #number = None lname = name.lower() for prefix in 'reel', 'disk', 'cd': #print(prefix) pprefix = '(' + prefix + ' ' index = lname.find(pprefix) #print(index) if index >= 0: rname = lname[index+len(pprefix):].strip() #print(rname) num = '' onlydigits = True for c in rname: if c in '0123456789': num += c elif c in 'abcdefghijklmnopqrstuvwxyz': onlydigits = False num += c else: break if not num: pass elif onlydigits: #number = int(num) return int(num) else: num = num.lower() if num == 'i': return 1 elif num == 'ii': return 2 elif num == 'iii': return 3 elif num == 'iv': return 4 elif num == 'v': return 5 elif num == 'vi': return 6 elif num == 'vii': return 7 elif num == 'viii': return 8 elif num == 'ix': return 9 elif num == 'x': return 10 elif len(num) == 1: return 1 + ord(num) - ord('a') else: return num #print(' ----------- ', rname, '---', num, number) #return number @classmethod def strip_number(cls, name): # remove '(disk xxx)' from name # and also (disk xxx)(yyy) name = re.sub('\\([Dd][Ii][Ss][Kk][^)]*\\)(\\([^\\)]*\\))?', '', name) # remove 'disc x' from name name = re.sub('\\([Dd][Ii][Ss][Cc][^)]*\\)', '', name) # 'reel x' is used by Cinemaware games name = re.sub('\\([Rr][Ee][Ee][Ll][^)]*\\)', '', name) # remove 'cd x' name = re.sub('\\([Cc][Dd][^)]*\\)', '', name) # remove 'track x' from multi-part bin files name = re.sub('\\([Tt][Tr][Aa][Cc][Kk][^)]*\\)', '', name) # remove 'xxx disk' from name #name = re.sub('\\([^\\(]* [Dd][Ii][Ss][Kk]\\)', '', name) return name @classmethod def strip_flags(cls, name): name = re.sub('\\[[^\\]]*\\]', '', name) #name = name.replace('(Boot)', '') return name @classmethod def extract_names(cls, path, info={}): game_name = "" config_name = "" name = os.path.basename(path) #print(name) # find real case of file name #if os.path.dirname(path): # for item in os.listdir(os.path.dirname(path)): # if os.path.normcase(item) == os.path.normcase(name): # name = item # break name, ext = os.path.splitext(name) def ireplace(s, search, replace): index = s.lower().find(search.lower()) if index >= 0: return s[:index] + replace + s[index+len(search):] return s name = cls.strip_number(name) #name = ireplace(name, '(save disk)', '') #name = ireplace(name, '(intro disk)', '') # TOSEC naming convention places vx.yy right after name, # without paranthesis - put paranthesis around version #print(name) name = re.sub('( v[0-9A-Z][^ ]*) \\(', '(\\1) (', name) # also sometimes rXX where XX is the revision name = re.sub('( r[0-9A-Z][^ ]*) \\(', '(\\1) (', name) #print("...", name) # remove adjacent spaces name = re.sub('[ ]+', ' ', name) name = name.replace("[", "(") name = name.replace("]", ")") parts = name.split("(") for i, part in enumerate(parts): if i == 0: continue if part[-1] != ")": continue commaed_parts = part.split(", ") if len(commaed_parts) == 2: parts[i] = commaed_parts[1][:-1] + " " + commaed_parts[0] + ")" name = "(".join(parts) # find end of name (and start of config name) pos = name.find('(') pos2 = name.find('[') if pos > 0: if pos2 > 0 and pos2 < pos: pos = pos2 if pos > 0: game_name = name[:pos].strip() config_name = name[pos:] config_name = config_name.replace('[!]', ' ') config_name = config_name.replace(',', ', ') config_name = config_name.replace(')', ', ') #config_name = config_name.replace(']', ', ') config_name = config_name.replace('(', '') #config_name = config_name.replace('[', '') config_name = config_name.replace(' ,', ',') config_name = config_name.strip(' ,') config_name = re.sub('[ ]+', ' ', config_name) else: game_name = name.strip() #if game_name.lower().endswith(', the'): # game_name = 'The ' + game_name[:-5] # game_name = game_name.strip() #elif game_name.lower().endswith(', a'): # game_name = 'A ' + game_name[:-3] # game_name = game_name.strip() return game_name, config_name class TestGameNameUtil(unittest.TestCase): def test_already_commaed_name(self): full_name = "Name (A, B, C).adf" name, variant = GameNameUtil.extract_names(full_name) self.assertEquals(name, "Name") self.assertEquals(variant, "A, B, C") def test_name_without_variant(self): full_name = "Name.adf" name, variant = GameNameUtil.extract_names(full_name) self.assertEquals(name, "Name") self.assertEquals(variant, "") def test_tosec_name(self): full_name = "Lotus Turbo Challenge 2 (1991)(Gremlin)[cr CPY]" \ "[t +4 Goonies].adf" name, variant = GameNameUtil.extract_names(full_name) self.assertEquals(name, "Lotus Turbo Challenge 2") self.assertEquals(variant, "1991, Gremlin, cr CPY, t +4 Goonies") def test_tosec_name_with_comma_in_publisher(self): full_name = "Zero Gravity (1997)(Hollemans, M.)(AGA).adf" name, variant = GameNameUtil.extract_names(full_name) self.assertEquals(name, "Zero Gravity") self.assertEquals(variant, "1997, M. Hollemans, AGA") def test_tosec_name_with_comma_in_publisher_2(self): full_name = "Ziriax (1990)(Software Business, The)[3001].dummy" name, variant = GameNameUtil.extract_names(full_name) self.assertEquals(name, "Ziriax") self.assertEquals(variant, "1990, The Software Business, 3001") def test_hitchhikers_guide_to_the_galaxy(self): full_name = "Leather Goddesses of Phobos r59 (1986)(Infocom).adf" name, variant = GameNameUtil.extract_names(full_name) self.assertEquals(name, "Leather Goddesses of Phobos") self.assertEquals(variant, "r59, 1986, Infocom") def test_leather_goddesses_of_phobos(self): full_name = "Hitchhiker's Guide to the Galaxy, The r58 " \ "(1986)(Infocom).adf" name, variant = GameNameUtil.extract_names(full_name) self.assertEquals(name, "Hitchhiker's Guide to the Galaxy, The") self.assertEquals(variant, "r58, 1986, Infocom") if __name__ == "__main__": unittest.main()fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ValueConfigLoader.py0000644000175000017500000003532512162366654024713 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import os import json import xml.etree.ElementTree from xml.etree.cElementTree import ElementTree, fromstring from .Amiga import Amiga from .Database import Database from .Paths import Paths from .Settings import Settings class ValueConfigLoader: DB_VERSION_MAX = 1 def __init__(self, uuid=""): self.config = {} self.options = {} self.uuid = uuid if uuid: self.options["database_url"] = "http://fengestad.no/games/" \ "game/" + uuid def get_config(self): return self.config.copy() def load_values(self, values): if values.get("db_version"): try: version = int(values.get("db_version")) except ValueError: version = 10000 if version > self.DB_VERSION_MAX: self.config["__config_name"] = "Unsupported Database " \ "Version (Please upgrade FS-UAE Launcher)" return self.values = values cd_based = False amiga_model = "A500" platform = self.values.get("platform", "Amiga") if platform == "Amiga": pass elif platform == "CD32": amiga_model = "CD32" cd_based = True self.options["joystick_port_1_mode"] = "cd32 gamepad" elif platform == "CDTV": amiga_model = "CDTV" cd_based = True else: raise Exception("unknown platform") self.config["amiga_model"] = amiga_model #self.config["x_game_uuid"] = self.values["uuid"] self.viewport = [] #game_node = self.root.find("game") #if game_node is not None: # game_uuid = game_node.get("uuid", "") # self.config["x_game_uuid"] = game_uuid # self.load_game_info(game_uuid) #self.load_options()) sort_list = [] for key in values: if key == "chip_memory": # chip memory is checked at the end because of support for # the 1024+ value, and others keys can change amiga_model.. sort_list.append(("x_chip_memory", key)) else: sort_list.append((key, key)) sort_list.sort() for dummy, key in sort_list: self.load_option(key, values[key]) if self.viewport: self.options["viewport"] = ", ".join(self.viewport) #self.options["sub_title"] = amiga_model + " - FS-UAE" #self.options["sub_title"] = "FS-UAE ({0})".format(amiga_model) if cd_based: self.load_cdroms() else: self.load_floppies() self.load_hard_drives() # for now, just copy all options to config without checking for key, value in self.options.iteritems(): self.config[key] = value self.set_name_and_uuid() self.contract_paths() def contract_paths(self): def fix(key): if self.config.get(key): self.config[key] = Paths.contract_path( self.config.get(key), default_dir, force_real_case=False) default_dir = Settings.get_floppies_dir() for i in range(Amiga.MAX_FLOPPY_DRIVES): fix("floppy_drive_{0}".format(i)) for i in range(Amiga.MAX_FLOPPY_IMAGES): fix("floppy_image_{0}".format(i)) default_dir = Settings.get_cdroms_dir() for i in range(Amiga.MAX_CDROM_DRIVES): fix("cdrom_drive_{0}".format(i)) for i in range(Amiga.MAX_CDROM_IMAGES): fix("cdrom_image_{0}".format(i)) def set_name_and_uuid(self): #self.config["x_config_uuid"] = self.root.get("uuid", "") game_name = self.values.get("game_name", "") platform_name = self.values.get("platform", "") variant_name = self.values.get("variant_name", "") parts = [] if platform_name: parts.append(platform_name) if variant_name: parts.append(variant_name) if game_name and variant_name: config_name = u"{0} ({1})".format(game_name, u", ".join(parts)) self.config["__config_name"] = config_name else: self.config["__config_name"] = self.values.get("config_name", "") def load_cdroms(self): print("\n\n\nload_cdroms\n\n\n") media_list = self.build_media_list(cds=True) for i, values in enumerate(media_list): path, sha1 = values if i < 1: self.config["cdrom_drive_{0}".format(i)] = path self.config["x_cdrom_drive_{0}_sha1".format(i)] = sha1 self.config["cdrom_image_{0}".format(i)] = path self.config["x_cdrom_image_{0}_sha1".format(i)] = sha1 def load_option(self, key, value): model = self.options.get("amiga_model", "") if key in ["variant_viewport", "viewport"]: if "=" in value: parts = value.split(",") for i in range(len(parts)): parts[i] = parts[i].split("#", 1)[0].strip() #parts[i] = parts[i].replace("=", "=>") #parts[i] = parts[i].replace("==>", "=>") value = ", ".join(parts) while " " in value: value = value.replace(" ", " ") else: value = "* * * * = " + value self.viewport.append(value) #if key.startswith("viewport_"): # parts = key.split("_") # if len(parts) == 5: # parts = parts[1:] # value = " ".join(parts) + " => " + value # value = value.replace("x", "*") # self.viewport.append(value) elif key == "whdload_args": self.options["x_whdload_args"] = value self.options["floppy_drive_volume"] = "0" elif key == "whdload_version": self.options["x_whdload_version"] = value elif key == "kickstart": if value == "1.2": self.options["amiga_model"] = "A1000" elif value == "2.0": if model in ["A500+", "A600"]: pass else: self.options["amiga_model"] = "A600" elif value == "2.0+": if model in ["A500+", "A600", "A1200", "A1200/020", "A3000", "A4000/040"]: pass else: self.options["amiga_model"] = "A600" elif value in ["3.0+", "3.1", "3.1+"]: if model in ["A1200", "A1200/020", "A3000", "A4000/040"]: pass else: self.options["amiga_model"] = "A1200" elif value == "AROS": self.options["kickstart_file"] = "internal" else: # FIXME: print warning pass elif key == "chipset": if value == "ECS": if model in ["A500+", "A600", "A3000"]: pass else: self.options["amiga_model"] = "A600" elif value == "AGA": if model in ["A1200", "A1200/020", "A4000/040"]: pass else: self.options["amiga_model"] = "A1200" elif key == "cpu": if value == "68020+" or value == "68020": if model in ["A1200", "A1200/020", "A3000", "A4000/040"]: pass else: self.options["amiga_model"] = "A1200" elif key == "fast_memory": ivalue = int(value) if ivalue > 8192: self.options["zorro_iii_memory"] = value self.options["amiga_model"] = "A1200/020" else: self.options["fast_memory"] = value elif key == "chip_memory": model = self.options.get("amiga_model", "") if value == "1024+": if model in ["A1200", "A1200/020", "A4000/040"]: pass else: self.options["chip_memory"] = "1024" elif value == "2048+": if model in ["A1200", "A1200/020", "A4000/040"]: pass else: # self.options["amiga_model"] = "A1200" self.options["chip_memory"] = "2048" else: self.options["chip_memory"] = value elif key == "video_standard": if value == "NTSC": self.options["ntsc_mode"] = "1" elif key == "cracktro": # FIXME: handle pass elif key in ["joystick_port_0_mode", "joystick_port_1_mode", "joystick_port_2_mode", "joystick_port_3_mode", "joystick_port_4_mode"]: self. load_joystick_port_x_mode_option(key, value) elif key in ["amiga_model", "accuracy", "floppy_drive_count", "slow_memory", "front_sha1", "screen1_sha1", "screen2_sha1", "screen3_sha1", "screen4_sha1", "screen5_sha1", "title_sha1", "year", "publisher", "developer", "hol_url", "lemon_url", "wikipedia_url", "mobygames_url", "languages", "dongle_type"]: self.options[key] = value elif key == "requirements": if "wb" in value.lower(): self.options["hard_drive_0"] = "hd://template/workbench/DH0" self.options["hard_drive_0_priority"] = "6" elif "hd" in value.lower(): self.options["hard_drive_0"] = "hd://template/empty/DH0" def load_joystick_port_x_mode_option(self, key, value): value = value.lower() if "," not in value: self.options[key] = value return parts = value.split(",") assert "=" not in parts[0] self.options[key] = parts[0] port = ["0", "1", "2", "3", "4"].index(key[14]) for part in parts[1:]: k, v = part.split("=") k = k.strip() v = v.strip() if not v.startswith("action_"): v = "action_" + v k = "joystick_port_{0}_{1}".format(port, k) self.options[k] = v def load_floppies_from_floppy_list(self): media_list = [] for item in self.values.get("floppy_list").split(","): name, sha1 = item.split(":") name = name.strip() sha1 = sha1.strip() path = "db://{0}/{1}/{2}".format(sha1, "", name) media_list.append((path, sha1)) return media_list def load_floppies(self): floppy_drive_count = 4 if "floppy_drive_count" in self.options: try: floppy_drive_count = int(self.options["floppy_drive_count"]) except ValueError: floppy_drive_count = 1 floppy_drive_count = max(0, min(4, floppy_drive_count)) if self.values.get("floppy_list", ""): media_list = self.load_floppies_from_floppy_list() else: media_list = self.build_media_list(floppies=True) for i, values in enumerate(media_list): path, sha1 = values if i < floppy_drive_count: self.config[u"floppy_drive_{0}".format(i)] = path self.config[u"x_floppy_drive_{0}_sha1".format(i)] = sha1 self.config[u"floppy_image_{0}".format(i)] = path self.config[u"x_floppy_image_{0}_sha1".format(i)] = sha1 if floppy_drive_count < 4: self.config["floppy_drive_count"] = floppy_drive_count def build_media_list(self, floppies=False, cds=False, hds=False): media_list = [] added = set() #file_nodes = self.root.findall("file") file_list_json = self.values.get("file_list", "[]") file_list = json.loads(file_list_json) for file_item in file_list: name = file_item["name"] url = file_item.get("url", "") #type = file_node.get("type", "") #name = file_node.find("name").text.strip() if name.startswith("DH0/"): if hds: #p = os.path.join(self.path, "HardDrive") p = "hd://game/" + self.uuid + "/DH0" if p in added: # already added continue added.add(p) # FIXME: hack for now sha1 = self.values.get("dh0_sha1", "") media_list.append((p, sha1)) else: continue sha1 = file_item["sha1"] base, ext = os.path.splitext(name) #if type == "hd" and not hds: # continue if hds: #if type and not type == "HD": # continue if ext not in [".zip"]: continue elif cds: #if type and not type == "cd": # continue if ext not in [".cue", ".iso"]: continue if "(Track" in base: # probably part of a split multi-track cue continue elif floppies: #if type and not type == "floppy": # continue if ext not in [".adf", ".adz", ".dms", ".ipf"]: continue path = "" found_sha1 = "" if sha1: print(sha1) path = Database.get_instance().find_file(sha1=sha1) if path: found_sha1 = sha1 if url and not path: path = url found_sha1 = sha1 if not path: path = Database.get_instance().find_file(name=name) if not path: if self.path: # loaded from an external XML file: path = os.path.join(self.path, name) if path: media_list.append((path, found_sha1)) else: pass #return False # FIXME: handle it with a visible error message #raise Exception("could not find file " + repr(name)) return media_list def load_hard_drives(self): print("load_hard_drives") media_list = self.build_media_list(hds=True) print(media_list) for i, values in enumerate(media_list): path, sha1 = values self.config["hard_drive_{0}".format(i)] = path self.config["x_hard_drive_{0}_sha1".format(i)] = sha1 fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/FileScanner.py0000644000175000017500000002010512162366654023541 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import os import time import zlib import hashlib import traceback from .Archive import Archive from .Database import Database from .Settings import Settings from .ROMManager import ROMManager from .I18N import _, ngettext from .Util import get_real_case #SCAN_EXTENSIONS = [".adf", ".ipf", ".dms", ".rom", ".fs-uae"] class FileScanner: def __init__(self, paths, scan_for_roms, scan_for_files, scan_for_configs, on_status=None, on_rom_found=None, stop_check=None): self.paths = paths self.scan_for_roms = scan_for_roms self.scan_for_files = scan_for_files self.scan_for_configs = scan_for_configs self.on_status = on_status self.on_rom_found = on_rom_found self._stop_check = stop_check self.scan_count = 0 self.files_added = 0 self.bytes_added = 0 self.scan_version = int(time.time() * 100) self.extensions = [] if self.scan_for_roms: self.extensions.append(".rom") if self.scan_for_files: self.extensions.append(".adf") self.extensions.append(".adz") self.extensions.append(".ipf") self.extensions.append(".dms") self.extensions.append(".bin") self.extensions.append(".cue") self.extensions.append(".iso") self.extensions.append(".wav") self.extensions.append(".zip") self.extensions.append(".lha") self.extensions.append(".rp9") if self.scan_for_configs: self.extensions.append(".fs-uae") #self.extensions.append(".xml") def stop_check(self): if self._stop_check: return self._stop_check() def set_status(self, title, status): if self.on_status: self.on_status((title, status)) def get_scan_dirs(self): return self.paths def scan(self): self.set_status(_("Scanning files"), _("Scanning files")) database = Database() #database.clear() scan_dirs = self.get_scan_dirs() for dir in scan_dirs: self.scan_dir(database, dir) if self.stop_check(): database.rollback() else: self.set_status(_("Scanning files"), _("Purging old entries...")) database.remove_unscanned_files(self.scan_version) self.set_status(_("Scanning files"), _("Committing data...")) print("FileScanner.scan - commiting data") database.commit() ROMManager.patch_standard_roms(database) def scan_dir(self, database, dir, all_files=False): #print("scan_dir", repr(dir)) if not os.path.exists(dir): return # this is important to make sure the database is portable across # operating systems dir = get_real_case(dir) dir_content = os.listdir(dir) if not all_files: for name in dir_content: try: # check that the file is actually unicode object (indirectly). # listdir will return str objects for file names on Linux # with invalid encoding. unicode(name) except UnicodeDecodeError: continue lname = name.lower() if lname.endswith(".slave") or lname.endswith(".slave"): all_files = True break for name in dir_content: try: # check that the file is actually unicode object (indirectly). # listdir will return str objects for file names on Linux # with invalid encoding. unicode(name) except UnicodeDecodeError: continue if self.stop_check(): return if name in [".git"]: continue path = os.path.join(dir, name) if os.path.isdir(path): self.scan_dir(database, path, all_files=all_files) continue if not all_files: dummy, ext = os.path.splitext(path) ext = ext.lower() if ext not in self.extensions: continue try: self.scan_file(database, path) except Exception: traceback.print_exc() def scan_file(self, database, path): #print("scan_file", repr(path)) name = os.path.basename(path) #path = os.path.normcase(os.path.normpath(path)) self.scan_count += 1 self.set_status(_("Scanning files ({count} scanned)").format( count=self.scan_count), name) try: st = os.stat(path) except: print("error stat-ing file", repr(path)) return size = st.st_size mtime = int(st.st_mtime) result = {} #print(path) database.find_file(path=path, result=result) #print(result) if result["path"]: if size == result["size"] and mtime == result["mtime"]: # file has not changed #print("ok") #print("not changed") database.update_file_scan(result["id"], self.scan_version) database.update_archive_scan(path, self.scan_version) #print("not changed - ok") return archive = Archive(path) #if archive.is_archive(): for p in archive.list_files(): #print(p) if self.stop_check(): return #n = p.replace("\\", "/").replace("|", "/").split("/")[-1] n = os.path.basename(p) self.scan_count += 1 self.scan_archive_stream(database, archive, p, n, size, mtime) if self.stop_check(): return self.scan_archive_stream(database, archive, path, name, size, mtime) def scan_archive_stream(self, database, archive, path, name, size, mtime): #print(path) base_name, ext = os.path.splitext(name) ext = ext.lower() self.set_status(_("Scanning files ({count} scanned)").format( count=self.scan_count), name) f = archive.open(path) s = hashlib.sha1() #m = hashlib.md5() c = None #with open(path, "rb") as f: while True: if self.stop_check(): return data = f.read(65536) if not data: break s.update(data) #m.update(data) #if c is None: # c = zlib.crc32(data) #else: # c = zlib.crc32(data, c) sha1 = s.hexdigest() #md5 = m.hexdigest() md5 = "" # will happen with 0-byte files #if c is None: # c = 0 #crc32 = c & 0xffffffff crc32 = "" if ext == ".rom": try: sha1_dec = ROMManager.decrypt_archive_rom(archive, path)["sha1"] except Exception: import traceback traceback.print_exc() sha1_dec = None if sha1_dec != sha1: print("found encrypted rom {0} => {1}".format(sha1, sha1_dec)) # sha1 is now the decrypted sha1, not the actual sha1 of the file # itself, a bit ugly, since md5 and crc32 are still encrypted # hashes, but it works well with the kickstart lookup mechanism sha1 = sha1_dec database.add_file(path=path, sha1=sha1, md5=md5, crc32=crc32, mtime=mtime, size=size, scan=self.scan_version, name=name) self.files_added += 1 self.bytes_added += size #if self.bytes_added > 1024 ** 3: # self.bytes_added = 0 # database.commit() #elif self.files_added % 500 == 0: # database.commit() if ext == '.rom': if self.on_rom_found: self.on_rom_found(path, sha1) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ConfigWriter.py0000644000175000017500000000725212162366654023762 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals from .Amiga import Amiga from .Config import Config from .DeviceManager import DeviceManager from .Settings import Settings class ConfigWriter: def __init__(self, config): self.config = config def create_fsuae_config(self): print("create_fsuae_config") config = {} for key, value in Settings.settings.iteritems(): if key in Config.config_keys: print("... ignoring config key from settings:", key) continue config[key] = value config["base_dir"] = Settings.get_base_dir() for key, value in self.config.iteritems(): config[key] = value if not config["joystick_port_0_mode"]: config["joystick_port_0_mode"] = "mouse" if not config["joystick_port_1_mode"]: if config["amiga_model"].startswith("CD32"): config["joystick_port_1_mode"] = "cd32 gamepad" else: config["joystick_port_1_mode"] = "joystick" if not config["joystick_port_2_mode"]: config["joystick_port_2_mode"] = "none" if not config["joystick_port_3_mode"]: config["joystick_port_3_mode"] = "none" devices = DeviceManager.get_devices_for_ports(config) for port in range(4): key = "joystick_port_{0}".format(port) if not config.get(key): # key not set, use calculated default value config[key] = devices[port].id for remove_key in ["database_username", "database_password"]: if remove_key in config: del config[remove_key] # overwrite netplay config if config["__netplay_host"]: config["netplay_server"] = config["__netplay_host"] if config["__netplay_password"]: config["netplay_password"] = config["__netplay_password"] if config["__netplay_port"]: config["netplay_port"] = config["__netplay_port"] # copy actual kickstart options from x_ options config["kickstart_file"] = config["x_kickstart_file"] config["kickstart_ext_file"] = config["x_kickstart_ext_file"] # make sure FS-UAE does not load other config files (Host.fs-uae) config["end_config"] = "1" # set titles #if not config["sub_title"]: # config["sub_title"] = config["amiga_model"] or "A500" if config["__netplay_game"]: print("\nfixing config for netplay game") for key in [x for x in config.keys() if x.startswith("uae_")]: print("* removing option", key) del config[key] c = [] num_drives = 0 for i in range(Amiga.MAX_FLOPPY_DRIVES): key = "floppy_drive_{0}".format(i) value = config.get(key) if value: num_drives = i + 1 num_drives = max(1, num_drives) print("") print("-------------" * 6) print("CONFIG") c.append("[fs-uae]") for key in sorted(config.keys()): ignore = False if key.startswith("floppy_drive_"): for i in range(4): if key == "floppy_drive_{0}".format(i): if i >= num_drives: ignore = True break if ignore: continue value = config[key] print(key, repr(value)) value = value.replace("\\", "\\\\") c.append(u"{0} = {1}".format(key, value)) return c fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ConfigurationScanner.py0000644000175000017500000003037212162366654025500 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import os import sys import time import json import traceback import xml.etree.ElementTree from xml.etree.cElementTree import ElementTree #from .Database import Database from .Settings import Settings from .I18N import _, ngettext from .Util import get_real_case from .fsgs.GameDatabaseClient import GameDatabaseClient class ConfigurationScanner: def __init__(self, paths, on_status=None, stop_check=None): self.paths = paths self.on_status = on_status self._stop_check = stop_check self.scan_count = 0 self.scan_version = int(time.time() * 100) def stop_check(self): if self._stop_check: return self._stop_check() def set_status(self, title, status): if self.on_status: self.on_status((title, status)) def scan_fs_uae_files(self, database): configurations = database.get_files(ext=".fs-uae") for c in configurations: if self.stop_check(): break #name = os.path.basename(c["path"]) #name = c["name"] #name = name[:-7] #search = name.lower() path = c["path"] name, ext = os.path.splitext(c["name"]) search = self.create_configuration_search(name) name = self.create_configuration_name(name) database.add_configuration(path=path, uuid="", name=name, scan=self.scan_version, search=search) def scan_builtin_configs(self, database): from .builtin_configs import builtin_configs for name, data in builtin_configs(): if self.stop_check(): break search = self.create_configuration_search(name) name = self.create_configuration_name(name) database.add_configuration(data=data, name=name, scan=self.scan_version, search=search) def scan(self, database, game_database): self.set_status(_("Scanning configurations"), _("Please wait...")) self.set_status(_("Scanning configurations"), _("Scanning .fs-uae files...")) self.scan_fs_uae_files(database) if Settings.get("database_feature") == "1": self.set_status(_("Scanning configurations"), _("Scanning game database entries...")) self.scan_game_database(database, game_database) else: self.set_status(_("Scanning configurations"), _("Scanning database entries...")) self.scan_configurations(database) if Settings.get("builtin_configs") == "0": print("builtin_configs was set to 0") else: self.set_status(_("Scanning configurations"), _("Scanning built-in entries...")) self.scan_builtin_configs(database) if self.stop_check(): # aborted #database.rollback() return #database.remove_unscanned_configurations(self.scan_version) print("remove unscanned games") self.set_status(_("Scanning configurations"), _("Purging old entries...")) database.remove_unscanned_games(self.scan_version) print("remove unscanned configurations") database.remove_unscanned_configurations(self.scan_version) self.set_status(_("Scanning configurations"), _("Committing data...")) database.commit() def scan_game_database(self, database, game_database): game_database_client = GameDatabaseClient(game_database) game_cursor = game_database.cursor() game_cursor.execute("SELECT a.uuid, a.game, a.variant, a.name, " "a.platform, value, b.uuid, b.game, b.sort_key " "FROM game a LEFT JOIN game b ON a.parent = b.id, value " "WHERE a.id = value.game AND value.status = 1 AND " "value.name = 'file_list' AND a.status > -90") for row in game_cursor: if self.stop_check(): return uuid, game, variant, alt_name, platform, file_list_json, \ parent_uuid, parent_game, parent_sort_key = row if not file_list_json: # not a game variant (with files) continue self.scan_count += 1 self.set_status( _("Scanning configurations ({count} scanned)").format( count=self.scan_count), uuid) try: file_list = json.loads(file_list_json) except Exception: # invalid JSON string continue all_found = True for file_item in file_list: if file_item["name"].endswith("/"): # skip directory entries: continue if not self.check_if_file_exists(database, file_item): all_found = False break if not all_found: #print("not found", uuid) continue #print("found", uuid) if not game: game = alt_name.split("(", 1)[0] name = "{0} ({1}, {2})".format(game, platform, variant) search = self.create_configuration_search(name) name = self.create_configuration_name(name) if parent_uuid: reference = parent_uuid type = 2 else: reference = uuid type = 1 cursor = game_database.cursor() cursor.execute("SELECT like_rating, work_rating FROM game_rating " "WHERE game = ?", (uuid,)) row = cursor.fetchone() if row is None: like_rating, work_rating = 0, 0 else: like_rating, work_rating = row database.add_configuration(path="", uuid=uuid, name=name, scan=self.scan_version, search=search, type=type, reference=reference, like_rating=like_rating, work_rating=work_rating) if parent_uuid: parent_name = "{0}\n{1}".format(parent_game, platform) database.ensure_game_configuration(parent_uuid, parent_name, parent_sort_key, scan=self.scan_version) def scan_configurations(self, database): for dir in self.paths: if self.stop_check(): return self.scan_dir(database, dir) def scan_dir(self, database, dir): if not isinstance(dir, unicode): dir = dir.decode(sys.getfilesystemencoding()) if not os.path.exists(dir): print("does not exist") return dir = get_real_case(dir) for name in os.listdir(dir): if self.stop_check(): return if name in [".git"]: continue path = os.path.join(dir, name) if os.path.isdir(path): self.scan_dir(database, path) continue dummy, ext = os.path.splitext(path) ext = ext.lower() #if ext not in self.extensions: # continue if ext != ".xml": continue self.scan_count += 1 self.set_status( _("Scanning configurations ({count} scanned)").format( count=self.scan_count), name) print("scan", name) result = None try: tree = ElementTree() tree.parse(path) root = tree.getroot() if root.tag == "config": result = self.scan_configuration(database, tree) elif root.tag == "game": self.scan_game(database, tree, path) except Exception: traceback.print_exc() if result is not None: if "name" in result: name = result["name"] else: name, ext = os.path.splitext(name) print("found", name) search = self.create_configuration_search(name) #name = self.create_configuration_name_from_path(path) name = self.create_configuration_name(name) database.add_configuration(path=path, uuid=result["uuid"], name=name, scan=self.scan_version, search=search) def check_if_file_exists(self, database, file_node): #print("check file", file_node) if isinstance(file_node, dict): sha1 = file_node["sha1"] if database.find_file(sha1=sha1): return True return False # The following code is deprecated and will probably be removed # later (used for the old database system) if file_node.find("sha1") is not None: sha1 = file_node.find("sha1").text.strip() #print(sha1) if database.find_file(sha1=sha1): return True archive_node = file_node.find("archive") if archive_node is not None: sub_file_nodes = archive_node.findall("file") for sub_file_node in sub_file_nodes: sha1 = sub_file_node.find("sha1").text.strip() print("sub-sha1", sha1) if not database.find_file(sha1=sha1): # file not found, so stop looking for other files print("not found") break else: # all files were found print("all found") return True name = file_node.find("name").text.strip() if database.find_file(name=name): return True return False def scan_configuration(self, database, tree): root = tree.getroot() file_nodes = root.findall("file") if len(file_nodes) == 0: print("no files in configuration") return for file_node in file_nodes: if not self.check_if_file_exists(database, file_node): return result = {} game_name = "" platform_name = "" #source_name = "" variant_name = "" name_node = root.find("name") if name_node is not None: variant_name = name_node.text.strip() #source_node = root.find("source") #if source_node is not None: # source_name = source_node.text.strip() game_node = root.find("game") if game_node is not None: game_name_node = game_node.find("name") if game_name_node is not None: game_name = game_name_node.text.strip() game_platform_node = game_node.find("platform") if game_platform_node is not None: platform_name = game_platform_node.text.strip() parts = [] if platform_name: parts.append(platform_name) #if source_name: # parts.append(source_name) if variant_name: parts.append(variant_name) if game_name and variant_name: result["name"] = u"{0} ({1})".format(game_name, u", ".join(parts)) result["uuid"] = root.get("uuid", "") return result def scan_game(self, database, tree, path): #print("scan_game") root = tree.getroot() uuid = root.get("uuid") name = root.find("name").text.strip() search = self.create_configuration_search(name) database.add_game(uuid=uuid, path=path, name=name, scan=self.scan_version, search=search) @classmethod def create_configuration_search(cls, name): return name.lower() @classmethod def create_configuration_name(cls, name): if "(" in name: primary, secondary = name.split("(", 1) secondary = secondary.replace(", ", " \u00b7 ") #name = primary.rstrip() + u" \u2013 " + secondary.lstrip() name = primary.rstrip() + "\n" + secondary.lstrip() if name[-1] == ")": name = name[:-1] name = name.replace(") (", " \u00b7 ") name = name.replace(")(", " \u00b7 ") return name fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/DeviceManager.py0000644000175000017500000001602312162366654024046 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import re import traceback import subprocess from .Config import Config from .FSUAE import FSUAE from .I18N import _ from .Settings import Settings from .Signal import Signal def create_cmp_id(id): return id.lower().replace(" ", "") class Device: def __init__(self, id, name, type): self.id = id self.name = name self.type = type self.port = None self.cmp_id = create_cmp_id(id) class DeviceManager: initialized = False @classmethod def init(cls): if cls.initialized: return cls.devices = [] cls.device_ids = [] cls.device_names = [] cls.device_name_count = {} cls.devices.append(Device("none", _("No Device"), "none")) cls.devices.append(Device("mouse", _("Mouse"), "mouse")) cls.init_fsuae() for id, name in zip(cls.device_ids, cls.device_names): cls.devices.append(Device(id, name, "joystick")) cls.devices.append(Device("keyboard", _("Cursor Keys and Right Ctrl/Alt"), "joystick")) cls.initialized = True @classmethod def refresh(cls): cls.initialized = False cls.init() Signal.broadcast("device_list_updated") @classmethod def init_wx(cls): import wx #count = wx.Joystick(wx.JOYSTICK1).GetNumberJoysticks() count = 1 print(count) for i in range(count): joy = wx.Joystick(wx.JOYSTICK1 + i) print(joy, joy.IsOk()) name = joy.GetProductName() print("a") name_count = cls.device_name_count.get(name, 0) + 1 cls.device_name_count[name] = name_count if name_count > 1: name = name + " #" + str(name_count) cls.device_ids.append(name) name = re.sub("[ ]+", " ", name) cls.device_names.append(name) print("a") @classmethod def init_pygame(cls): import pygame #pygame.init() pygame.joystick.init() count = pygame.joystick.get_count() for i in range(count): joy = pygame.joystick.Joystick(i) name = joy.get_name() name_count = cls.device_name_count.get(name, 0) + 1 cls.device_name_count[name] = name_count if name_count > 1: name = name + " #" + str(name_count) cls.device_ids.append(name) name = re.sub("[ ]+", " ", name) cls.device_names.append(name) @classmethod def init_fsuae(cls): print("finding connected joysticks") try: p = FSUAE.start_with_args(["--list-joysticks"], stdout=subprocess.PIPE) joysticks = p.stdout.read() p.wait() except Exception: print("exception while listing joysticks") traceback.print_exc() return print(repr(joysticks)) # If the character conversion failes, replace will ensure that # as much as possible succeeds. The joystick in question will # not be pre-selectable in the launcher, but the other ones will # work at least. joysticks = joysticks.decode("UTF-8", "replace") joysticks = [x.strip() for x in joysticks.split("\n") if x.strip()] for name in joysticks: if name.startswith("#"): continue name_count = cls.device_name_count.get(name, 0) + 1 cls.device_name_count[name] = name_count if name_count > 1: name = name + " #" + str(name_count) cls.device_ids.append(name) name = re.sub("[ ]+", " ", name) cls.device_names.append(name) @classmethod def get_joystick_names(cls): cls.init() return cls.device_names[:] @classmethod def get_joystick_ids(cls): cls.init() return cls.device_ids[:] @classmethod def get_preferred_joysticks(cls): prefs = [] if Settings.get("primary_joystick"): prefs.append(create_cmp_id(Settings.get("primary_joystick"))) if Settings.get("secondary_joystick"): prefs.append(create_cmp_id(Settings.get("secondary_joystick"))) return prefs @classmethod def get_preferred_gamepads(cls): return cls.get_preferred_joysticks() @classmethod def get_devices_for_ports(cls, config): cls.init() ports = [cls.devices[0] for x in range(5)] for device in cls.devices: device.port = None for p in range(4): key = "joystick_port_{0}".format(p) value = config.get(key) for device in cls.devices: if device.id == value: device.port = p break #print("-") #for device in cls.devices: # print(device.port, device.id) #print("-") def autofill(port, type): mode = config.get("joystick_port_{0}_mode".format(port)) value = config.get("joystick_port_{0}".format(port)) if value: # specific device chosen for device in cls.devices: if device.id == value: ports[port] = device break return if type == "mouse": #print("a", mode) if mode != "mouse": return #print("b") for device in cls.devices: #print("c") if device.type == "mouse" and device.port is None: #print("d") ports[port] = device device.port = port return if type == "joystick": if mode == "cd32 gamepad": prefs = cls.get_preferred_joysticks() elif mode == "joystick": prefs = cls.get_preferred_gamepads() else: return # try to find an available preferred device first for pref in prefs: for device in cls.devices: if device.cmp_id == pref and device.port is None: ports[port] = device device.port = port return # find first suitable device for device in cls.devices: if device.type == "joystick" and device.port is None: ports[port] = device device.port = port return for p in [0, 1, 2, 3]: autofill(p, "mouse") for p in [1, 0, 3, 2]: autofill(p, "joystick") return ports @classmethod def get_device_for_port(cls, config, port): return cls.get_devices_for_ports(config)[port] fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/__init__.py0000644000175000017500000001605312162366654023116 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import os import sys import logging import codecs import platform import threading # using this lock to serialize logging from different threads lock = threading.Lock() class NullOutput(object): def flush(self): pass def isatty(self): return False def write(self, msg): pass class MultiOutput: def __init__(self, *files): self.files = files def flush(self): with lock: for f in self.files: try: f.flush() except Exception: pass def isatty(self): return False def write(self, msg): with lock: for f in self.files: try: f.write(msg) except Exception: pass class FileOutput(object): def __init__(self, file_obj): self.file = file_obj def flush(self): return self.file.flush() def isatty(self): return False def write(self, msg): if isinstance(msg, unicode): if "database_password" in msg: return self.file.write(msg.encode("UTF-8")) else: if b"database_password" in msg: return self.file.write(msg) class SafeOutput(object): def __init__(self, file_obj, in_charset, out_charset): try: self.writer = codecs.getwriter(out_charset) except LookupError: self.writer = codecs.getwriter('ASCII') self.in_charset = in_charset self.outfile = self.writer(file_obj, errors='replace') self.thread_local = threading.local() def flush(self): if hasattr(self.thread_local, 'write_func'): return try: if hasattr(self.outfile, 'flush'): self.outfile.flush() except Exception: pass def isatty(self): if hasattr(self.thread_local, 'write_func'): return False return self.outfile.isatty() def redirect_thread_output(self, write_func): if write_func is None: del self.thread_local.write_func else: self.thread_local.write_func = write_func def write(self, msg): if hasattr(self.thread_local, 'write_func'): if isinstance(msg, unicode): self.thread_local.write_func(msg) return msg = unicode(str(msg), self.in_charset, 'replace') self.thread_local.write_func(msg) return try: if isinstance(msg, unicode): self.outfile.write(msg) else: msg = unicode(str(msg), self.in_charset, 'replace') self.outfile.write(msg) except Exception: try: self.outfile.write(repr(msg)) except Exception, e: self.outfile.write("EXCEPTION IN SAFEOUTPUT: %s\n" % repr(e)) def fix_output(): sys._replaced_stdout = sys.stdout sys._replaced_stderr = sys.stderr if sys.platform == 'win32' and not os.environ.has_key('FS_FORCE_STDOUT'): if hasattr(sys, 'frozen'): sys.stdout = NullOutput() sys.stderr = NullOutput() return import win32console if win32console.GetConsoleWindow() == 0: # not running under console sys.stdout = NullOutput() sys.stderr = NullOutput() return try: if sys.platform == 'win32': sys.stdout = SafeOutput(sys.stdout, 'mbcs', 'cp437') else: sys.stdout = SafeOutput(sys.stdout, 'ISO-8859-1', locale.getpreferredencoding()) except Exception: sys.stdout = SafeOutput(sys.stdout, 'ISO-8859-1', 'ASCII') try: if sys.platform == 'win32': sys.stderr = SafeOutput(sys.stderr, 'mbcs', 'cp437') else: sys.stderr = SafeOutput(sys.stderr, 'ISO-8859-1', locale.getpreferredencoding()) except Exception: sys.stderr = SafeOutput(sys.stderr, 'ISO-8859-1', 'ASCII') def setup_logging(): from .Settings import Settings logs_dir = Settings.get_logs_dir() log_file = os.path.join(logs_dir, "Launcher.log.txt") try: f = open(log_file, "wb") except Exception: print("could not open log file") # use MultiOutput here too, for the mutex handling sys.stdout = MultiOutput(sys.stdout) sys.stderr = MultiOutput(sys.stderr) else: sys.stdout = MultiOutput(FileOutput(f), sys.stdout) sys.stderr = MultiOutput(FileOutput(f), sys.stderr) logging.basicConfig(stream=sys.stdout, level=logging.NOTSET) def setup_portable_launcher(): from .Settings import Settings path = os.path.dirname(os.path.abspath(sys.executable)) last = "" while last != path: portable_ini_path = os.path.join(path, "Portable.ini") print("checking", portable_ini_path) if os.path.exists(portable_ini_path): print("detected portable dir", path) Settings.base_dir = path return last = path path = os.path.dirname(path) print("no Portable.ini found in search path") def main(): fix_output() if "--joystick-config" in sys.argv: print("importing pygame") import pygame print("initializing pygame") pygame.init() pygame.joystick.init() from fs_uae_launcher.JoystickConfigDialog import joystick_config_main return joystick_config_main() if "--server" in sys.argv: from fs_uae_launcher.server.game import run_server return run_server() from .Version import Version print("FS-UAE Launcher {0}".format(Version.VERSION)) print("System: {0}".format(repr(platform.uname()))) print(sys.argv) from .Settings import Settings for arg in sys.argv: if arg.startswith("--"): if "=" in arg: key, value = arg[2:].split("=", 1) key = key.replace("-", "_") if key == "base_dir": value = os.path.abspath(value) print("setting base_dir") Settings.base_dir = value if Settings.base_dir: print("base_dir was specified so we will not check for portable dir") else: setup_portable_launcher() if not Settings.base_dir: print("base_dir not decided yet, checking FS_UAE_BASE_DIR") if "FS_UAE_BASE_DIR" in os.environ and os.environ["FS_UAE_BASE_DIR"]: print("base dir specified by FS_UAE_BASE_DIR") Settings.base_dir = os.environ["FS_UAE_BASE_DIR"] if not Settings.base_dir: print("using default base_dir") setup_logging() from .ConfigChecker import ConfigChecker config_checker = ConfigChecker() from .FSUAELauncher import FSUAELauncher application = FSUAELauncher() application.run() application.save_settings() fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/Options.py0000644000175000017500000001202312162366654023003 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals class Options: @staticmethod def get(name): return options[name] N_ = lambda x: x options = { "automatic_input_grab": { "default": "1", "description": N_("Grab mouse and keyboard input when clicking on FS-UAE window"), "type": "boolean", }, "builtin_configs": { "default": "1", "description": N_("Include built-in configurations"), "type": "boolean", }, "database_feature": { "default": "0", "description": N_("Enable online database support (requires restart)"), "type": "boolean", }, "database_password": { "default": "", "description": N_("Game database password"), "type": "string", }, "database_username": { "default": "", "description": N_("Game database user name"), "type": "string", }, "floppy_drive_volume": { "default": "20", "description": N_("Floppy drive volume"), "type": "integer", "min": 0, "max": 100, }, "fsaa": { "default": "0", "description": N_("Full-scene anti-aliasing (FSAA)"), "type": "choice", "values": [ ("0", N_("Off")), ("2", "2x2"), ("4", "4x4"), ("8", "8x8"), ] }, "fullscreen": { "default": "0", "description": N_("Start FS-UAE in fullscreen mode"), "type": "boolean", }, "initial_input_grab": { "default": "", "description": N_("Grab mouse and keyboard input when FS-UAE starts"), "type": "boolean", }, "irc_nick": { "default": "", "description": N_("IRC nickname"), "type": "string", }, "irc_server": { "default": "irc.fengestad.no", "description": N_("Custom IRC server address"), "type": "string", }, "keep_aspect": { "default": "0", "description": N_("Keep aspect ratio when scaling (do not stretch)"), "type": "boolean", }, "kickstart_setup": { "default": "1", "description": N_("Show kickstart setup page on startup when all ROMs are missing"), "type": "boolean", }, "low_latency_vsync": { "default": "0", "description": N_("Low latency vsync (when using full vsync)"), "type": "boolean", }, "middle_click_ungrab": { "default": "1", "description": N_("Ungrab mouse and keyboard on middle mouse click"), "type": "boolean", }, "mouse_speed": { "default": "100", "description": N_("Mouse speed (%)"), "type": "integer", "min": 1, "max": 500, }, "netplay_feature": { "default": "0", "description": N_("Enable experimental net play GUI (requires restart)"), "type": "boolean", }, "netplay_tag": { "default": "UNK", "description": N_("Net play tag (max 3 characters)"), "type": "string", }, "rtg_scanlines": { "default": "0", "description": N_("Render scan lines in RTG graphics mode"), "type": "boolean", }, "scanlines": { "default": "0", "description": N_("Render scan lines"), "type": "boolean", }, "swap_ctrl_keys": { "default": "0", "description": N_("Swap left and right CTRL keys"), "type": "boolean", }, "texture_filter": { "default": "linear", "description": N_("Texture filter"), "type": "choice", "values": [ ("nearest", "GL_NEAREST"), ("linear", "GL_LINEAR"), ] }, "texture_format": { "default": "", "description": N_("Video texture format (on the GPU)"), "type": "choice", "values": [ ("rgb", "GL_RGB"), ("rgb8", "GL_RGB8"), ("rgba", "GL_RGBA"), ("rgba8", "GL_RGBA8"), ("rgb5", "GL_RGB5"), ("rgb5_1", "GL_RGB5_1"), ] }, "video_format": { "default": "bgra", "description": N_("Video buffer format and color depth"), "type": "choice", "values": [ ("bgra", N_("32-bit BGRA")), ("rgba", N_("32-bit RGBA")), ("rgb565", N_("16-bit")), ] }, "video_sync": { "default": "auto", "description": N_("Video synchronization"), "type": "choice", "values": [ ("auto", N_("Auto")), ("vblank", N_("Buffer swap only")), ("off", N_("Off")), ] }, "video_sync_method": { "default": "", "description": N_("Video synchronization method"), "type": "choice", "values": [ ("swap", "Swap"), ("swap-finish", "Swap-Finish"), ("finish-swap-finish", "Finish-Swap-Finish"), ("finish-sleep-swap-finish", "Finish-Sleep-Swap-Finish"), ("sleep-swap-finish", "Sleep-Swap-Finish"), ("swap-fence", "Swap-Fence"), ("swap-sleep-fence", "Swap-Sleep-Fence"), ] }, "zoom": { "default": "auto", "description": N_("Zoom Amiga display (crop)"), "type": "choice", "values": [ ("auto", N_("Auto")), ("full", N_("Full Frame")), ("640x400", "640x400"), ("640x480", "640x480"), ("640x512", "640x512"), ("auto+border", N_("Auto + Border")), ("640x400+border", N_("640x400 + Border")), ("640x480+border", N_("640x480 + Border")), ("640x512+border", N_("640x512 + Border")), ] }, } fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/Amiga.py0000644000175000017500000001754412162366654022403 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals A1000_KICKSTARTS = [ # amiga-os-120.rom (decrypted) # Kickstart v1.2 r33.180 (1986)(Commodore)(A500-A1000-A2000)[!] "11f9e62cf299f72184835b7b2a70a16333fc0d88", # Kickstart v1.2 r33.166 (1986)(Commodore)(A1000) # "6a7bfb5dbd6b8f179f03da84d8d9528267b6273b", ] A500_KICKSTARTS = [ # amiga-os-130.rom (decrypted, patched) # Kickstart v1.3 r34.5 (1987)(Commodore)(A500-A1000-A2000-CDTV)[!] # Kickstart v1.3 r34.5 (1987)(Commodore)(A500-A1000-A2000-CDTV)[o] (patch) "891e9a547772fe0c6c19b610baf8bc4ea7fcb785", ] A500P_KICKSTARTS = [ # amiga-os-204.rom (decrypted) # Kickstart v2.04 r37.175 (1991)(Commodore)(A500+)[!] "c5839f5cb98a7a8947065c3ed2f14f5f42e334a1", ] A600_KICKSTARTS = [ # amiga-os-205.rom (decrypted) # Kickstart v2.05 r37.350 (1992)(Commodore)(A600HD)[!] "02843c4253bbd29aba535b0aa3bd9a85034ecde4", # Kickstart v2.05 r37.300 (1991)(Commodore)(A600HD) # "f72d89148dac39c696e30b10859ebc859226637b", # Kickstart v2.05 r37.299 (1991)(Commodore)(A600)[!] # "87508de834dc7eb47359cede72d2e3c8a2e5d8db", ] A1200_KICKSTARTS = [ # amiga-os-310-a1200.rom (decrypted) # Kickstart v3.1 r40.68 (1993)(Commodore)(A1200)[!] "e21545723fe8374e91342617604f1b3d703094f1", ] A3000_KICKSTARTS = [ # amiga-os-310-a3000.rom (decrypted) # Kickstart v3.1 r40.68 (1993)(Commodore)(A3000).rom "f8e210d72b4c4853e0c9b85d223ba20e3d1b36ee", ] A4000_KICKSTARTS = [ # amiga-os-310.rom (decrypted, patched) # amiga-os-310-a4000.rom (decrypted) # Kickstart v3.1 r40.68 (1993)(Commodore)(A4000) "5fe04842d04a489720f0f4bb0e46948199406f49", # Kickstart v3.1 r40.68 (1993)(Commodore)(A4000)[h Cloanto] #"c3c481160866e60d085e436a24db3617ff60b5f9", ] CD32_KICKSTARTS = [ # amiga-os-310-cd32.rom (decrypted) # Kickstart v3.1 r40.60 (1993)(Commodore)(CD32) "3525be8887f79b5929e017b42380a79edfee542d", ] CD32_EXT_ROMS = [ # amiga-ext-310-cd32.rom (decrypted) # CD32 Extended-ROM r40.60 (1993)(Commodore)(CD32) "5bef3d628ce59cc02a66e6e4ae0da48f60e78f7f", ] CDTV_KICKSTARTS = A500_KICKSTARTS CDTV_EXT_ROMS = [ # amiga-ext-130-cdtv.rom (decrypted) # CDTV Extended-ROM v1.0 (1991)(Commodore)(CDTV)[!] "7ba40ffa17e500ed9fed041f3424bd81d9c907be", ] class Amiga: # FIXME: setting fake checksum, for now INTERNAL_ROM_SHA1 = "0000000000000000000000000000000000000000" MAX_FLOPPY_DRIVES = 4 MAX_FLOPPY_IMAGES = 20 MAX_CDROM_DRIVES = 4 MAX_CDROM_IMAGES = 20 MAX_HARD_DRIVES = 4 models = [ { "title": "Amiga 1000", #"title": "A500", "cd_based": False, "kickstarts": A1000_KICKSTARTS, "ext_roms": [], "defaults": { "chip_memory": "512", "slow_memory": "0", "fast_memory": "0", "zorro_iii_memory": "0", } }, { "title": "Amiga 500", #"title": "A500", "cd_based": False, "kickstarts": A500_KICKSTARTS, "ext_roms": [], "defaults": { "chip_memory": "512", "slow_memory": "512", "fast_memory": "0", "zorro_iii_memory": "0", } }, { "title": "Amiga 500+", #"title": "A500+", "cd_based": False, "kickstarts": A500P_KICKSTARTS, "ext_roms": [], "defaults": { "chip_memory": "1024", "slow_memory": "0", "fast_memory": "0", "zorro_iii_memory": "0", } }, { "title": "Amiga 600", #"title": "A600", "cd_based": False, "kickstarts": A600_KICKSTARTS, "ext_roms": [], "defaults": { "chip_memory": "1024", "slow_memory": "0", "fast_memory": "0", "zorro_iii_memory": "0", } }, { "title": "Amiga 1200", #"title": "A1200", "cd_based": False, "kickstarts": A1200_KICKSTARTS, "ext_roms": [], "defaults": { "chip_memory": "2048", "slow_memory": "0", "fast_memory": "0", "zorro_iii_memory": "0", } }, { "title": "Amiga 1200 (68020)", #"title": "A1200/020", "cd_based": False, "kickstarts": A1200_KICKSTARTS, "ext_roms": [], "defaults": { "chip_memory": "2048", "slow_memory": "0", "fast_memory": "0", "zorro_iii_memory": "0", } }, { "title": "Amiga 3000", #"title": "A4000/040", "cd_based": False, "kickstarts": A3000_KICKSTARTS, "ext_roms": [], "defaults": { "chip_memory": "1024", "slow_memory": "0", "fast_memory": "0", "zorro_iii_memory": "0", } }, { "title": "Amiga 4000 (68040)", #"title": "A4000/040", "cd_based": False, "kickstarts": A4000_KICKSTARTS, "ext_roms": [], "defaults": { "chip_memory": "2048", "slow_memory": "0", "fast_memory": "0", "zorro_iii_memory": "0", } }, { "title": "Amiga CD32", #"title": "CD32", "cd_based": "CD32", "kickstarts": CD32_KICKSTARTS, "ext_roms": CD32_EXT_ROMS, "defaults": { "chip_memory": "2048", "slow_memory": "0", "fast_memory": "0", "zorro_iii_memory": "0", } }, { "title": "Amiga CD32 + FMV ROM", #"title": "CD32", "cd_based": "CD32", "kickstarts": CD32_KICKSTARTS, "ext_roms": CD32_EXT_ROMS, "defaults": { "chip_memory": "2048", "slow_memory": "0", "fast_memory": "0", "zorro_iii_memory": "0", } }, { "title": "Commodore CDTV", #"title": "CDTV", "cd_based": "CDTV", "kickstarts": CDTV_KICKSTARTS, "ext_roms": CDTV_EXT_ROMS, "defaults": { "chip_memory": "1024", "slow_memory": "0", "fast_memory": "0", "zorro_iii_memory": "0", } } ] models_config = [ "A1000", "A500", "A500+", "A600", "A1200", "A1200/020", "A3000", "A4000/040", "CD32", "CD32/FMV", "CDTV", ] @classmethod def is_cd_based(cls): return cls.get_current_config()["cd_based"] @classmethod def get_current_config(cls): from .Config import Config return cls.get_model_config(Config.get("amiga_model")) @classmethod def get_default_option_value(cls, model, key): return cls.get_model_config(model)["defaults"][key] @classmethod def get_model_config(cls, model): for i in range(len(cls.models_config)): if cls.models_config[i] == model: return cls.models[i] return { "title": "Dummy", "cd_based": False, "kickstarts": [ ], "ext_roms": [ ], "defaults": { "chip_memory": "0", "slow_memory": "0", "fast_memory": "0", "zorro_iii_memory": "0", } } fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/JoystickConfigDialog.py0000644000175000017500000026676012162366654025440 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import os import sys from cStringIO import StringIO import fs_uae_launcher.fsui as fsui import wx import pygame windows = sys.platform == "win32" linux = sys.platform.startswith("linux") macosx = sys.platform == "darwin" if windows: platform = "windows" if linux: platform = "linux" if macosx: platform = "macosx" if windows: from win32com.shell import shell, shellcon import win32api from .Settings import Settings from .I18N import _, ngettext joysticks = [] joystick_names = [] current_joystick = None current_joystick_index = None def joystick_config_main(): app = wx.PySimpleApp() frame = JoystickConfigFrame() if len(joysticks) == 0: wx.MessageBox(_("No joysticks are currently connected"), _("No Joysticks"), wx.ICON_WARNING) frame.Destroy() else: frame.Show() app.MainLoop() def unicode_path(path): if isinstance(path, unicode): return path return path.decode(sys.getfilesystemencoding()) def set_current_joystick(index): global current_joystick global current_joystick_index current_joystick = joysticks[index] current_joystick_index = index def save_config(): if not current_joystick: pass config = [] config.append("# {0}".format(current_joystick.get_name().strip())) #config.append("# buttons: {0}".format(current_joystick.get_numbuttons())) #config.append("# axes: {0}".format(current_joystick.get_numaxes())) #config.append("# hats: {0}".format(current_joystick.get_numhats())) #config.append("# balls: {0}".format(current_joystick.get_numballs())) #config.append("# platform: {0}".format(platform)) config.append("") config.append("[default]") config.append("include = universal_gamepad") for i, button in enumerate(buttons): panel = button_panels[i] if panel.event: config.append("{0} = {1}".format(panel.event, button[3])) file_name = get_joystick_id() + ".conf" dest = Settings.get_controllers_dir() if not os.path.exists(dest): os.makedirs(dest) dest = os.path.join(dest, file_name) f = open(dest, "w") for line in config: f.write(line) f.write("\n") f.close() def get_joystick_id(): if not current_joystick: return "" name = current_joystick.get_name() buttons = current_joystick.get_numbuttons() axes = current_joystick.get_numaxes() hats = current_joystick.get_numhats() balls = current_joystick.get_numballs() name_lower = name.lower() name = "" for c in name_lower: if c in "abcdefghijklmnopqrstuvwxyz0123456789": name = name + c else: if not name.endswith("_"): name = name + "_" name = name.strip("_") return "{0}_{1}_{2}_{3}_{4}_{5}".format(name, buttons, axes, hats, balls, platform) already_initialized = 0 def init_joysticks(): global already_initialized if already_initialized: return len(joysticks) #num_joys = wx.Joystick(-1).GetNumberJoysticks() #for i in range(1): # joy = wx.Joystick(wx.JOYSTICK1) # print(joy) # joysticks.append(joy) # joystick_names.append(joy.ProductName) pygame.init() pygame.joystick.init() num_joys = pygame.joystick.get_count() for i in range(num_joys): joy = pygame.joystick.Joystick(i) joy.init() joysticks.append(joy) joystick_names.append(joy.get_name()) already_initialized = 1 return len(joysticks) buttons = [ (160, 240, -1, "dpad_left"), (160, 160, -1, "dpad_right"), (160, 200, -1, "dpad_up"), (160, 280, -1, "dpad_down"), (160, 400, -1, "lstick_left"), (320, 400, -1, "lstick_right"), (160, 360, -1, "lstick_up"), (160, 440, -1, "lstick_down"), (320, 440, -1, "lstick_button"), (480, 400, 1, "rstick_left"), (640, 400, 1, "rstick_right"), (640, 360, 1, "rstick_up"), (640, 440, 1, "rstick_down"), (480, 440, 1, "rstick_button"), (640, 160, 1, "west_button"), (640, 200, 1, "north_button"), (640, 240, 1, "east_button"), (640, 280, 1, "south_button"), (320, 80, -1, "select_button"), (480, 80, 1, "start_button"), (480, 40, 1, "menu_button"), (160, 40, -1, "left_shoulder"), (160, 80, -1, "left_trigger"), (640, 40, 1, "right_shoulder"), (640, 80, 1, "right_trigger"), ] button_panels = [ ] class MapDialog(wx.Dialog): def __init__(self, parent, name): wx.Dialog.__init__(self, parent, -1, "Map Button") sizer = wx.BoxSizer(wx.VERTICAL) self.SetSizer(sizer) label = wx.StaticText(self, -1, "Press joystick button/hat or move axis") sizer.Add(label, 0, wx.ALL, 20) self.name = name self.event = None self.timer = wx.Timer(self) self.Bind(wx.EVT_TIMER, self.on_timer) self.timer.Start(100, wx.TIMER_CONTINUOUS) self.Fit() self.CenterOnParent() def set_result(self, event): self.timer.Stop() self.event = event # remove event from other panels for panel in button_panels: if self == panel: continue if panel.event == event: panel.event = None panel.Refresh() self.EndModal(wx.ID_OK) def on_timer(self, event): #print("on_timer") pygame.event.pump() if not current_joystick: return joy = current_joystick for i in range(joy.get_numbuttons()): if joy.get_button(i): return self.set_result("button_" + str(i)) for i in range(joy.get_numaxes()): value = joy.get_axis(i) if value < -0.8: pos = "neg" elif value > 0.8: pos = "pos" else: pos = None if pos: return self.set_result("axis_" + str(i) + "_" + pos) for i in range(joy.get_numhats()): value = joy.get_hat(i) if value[1] == 1: pos = "up" elif value[1] == -1: pos = "down" elif value[0] == -1: pos = "left" elif value[0] == 1: pos = "right" else: pos = None if pos: return self.set_result("hat_" + str(i) + "_" + pos) class Button(wx.Panel): def __init__(self, parent, position, direction, name): size = (120, 22) if direction < 0: position = (position[0] - size[0], position[1]) wx.Panel.__init__(self, parent, -1, position, size) self.name = name self.event = None self.direction = direction self.Bind(wx.EVT_PAINT, self.on_paint) self.Bind(wx.EVT_LEFT_DOWN, self.on_click) self.SetCursor(wx.StockCursor(wx.CURSOR_HAND)) self.SetBackgroundColour(wx.WHITE) def on_paint(self, event): #print("on_paint") dc = wx.PaintDC(self) dc.SetFont(self.GetFont()) if self.event: text = self.event dc.SetTextForeground(wx.Colour(0x00, 0x80, 0x00)) else: text = "click to configure" dc.SetTextForeground(wx.RED) tw, th = dc.GetTextExtent(text) y = (self.GetSize()[1] - th) / 2 if self.direction > 0: x = 4 else: x = self.GetSize()[0] - 4 - tw dc.DrawText(text, x, y) def on_click(self, event): parent = self.GetParent().GetParent().GetParent() print(parent) dialog = MapDialog(parent, self.name) result = dialog.ShowModal() #print(result, wx.ID_OK) if result == wx.ID_OK: self.event = dialog.event #print(self.event) self.Refresh() dialog.Destroy() class JoystickConfigFrame(wx.Frame): def __init__(self, parent=None): wx.Frame.__init__(self, parent, -1, "Joystick/Gamepad Configuration Tool") init_joysticks() self.frame_sizer = wx.BoxSizer(wx.VERTICAL) self.SetSizer(self.frame_sizer) self.panel = wx.Panel(self) self.frame_sizer.Add(self.panel, 1, wx.EXPAND) self.panel_sizer = wx.BoxSizer(wx.VERTICAL) self.panel.SetSizer(self.panel_sizer) self.top_panel = wx.Panel(self.panel) self.panel_sizer.Add(self.top_panel, 0, wx.EXPAND) self.top_sizer = wx.BoxSizer(wx.HORIZONTAL) self.top_panel.SetSizer(self.top_sizer) self.line_panel = wx.Panel(self.panel, size=(1, 1)) self.line_panel.SetBackgroundColour(wx.Colour(0xaa, 0xaa, 0xaa)) self.panel_sizer.Add(self.line_panel, 0, wx.EXPAND) self.joystick_choice = wx.Choice(self.top_panel, -1, wx.DefaultPosition, wx.DefaultSize, joystick_names) self.joystick_choice.Bind(wx.EVT_CHOICE, self.on_choice) self.top_sizer.Add(self.joystick_choice, 0, wx.ALIGN_CENTER_VERTICAL | wx.ALL, 10) self.id_label = wx.StaticText(self.top_panel, -1, "") self.top_sizer.Add(self.id_label, 0, wx.ALIGN_CENTER_VERTICAL | wx.LEFT, 10) self.top_sizer.AddStretchSpacer(1) self.save_button = wx.Button(self.top_panel, -1, "Save") self.save_button.Bind(wx.EVT_BUTTON, self.on_save) self.top_sizer.Add(self.save_button, 0, wx.ALIGN_CENTER_VERTICAL | wx.ALL, 10) self.hor_sizer = wx.BoxSizer(wx.HORIZONTAL) self.panel_sizer.Add(self.hor_sizer, 1, wx.EXPAND) #with open("joyconfig.png", "rb") as f: # data = f.read() #with open("joyconfig.txt", "wb") as f: # f.write("bitmap = ") # f.write(repr(data)) # f.write("\n") stream = StringIO(bitmap) image = wx.ImageFromStream(stream) #self.bitmap = wx.Bitmap("joyconfig.png") self.bitmap = wx.BitmapFromImage(image) self.joystick_panel = wx.Panel(self.panel, -1, wx.DefaultPosition, self.bitmap.GetSize()) self.joystick_panel.Bind(wx.EVT_PAINT, self.on_paint) self.hor_sizer.Add(self.joystick_panel, 0, 0) self.help_ctrl = wx.TextCtrl(self.panel, -1, help_text, style=wx.TE_MULTILINE | wx.TE_READONLY | wx.NO_BORDER) self.hor_sizer.Add(self.help_ctrl, 1, wx.EXPAND) self.hor_sizer.SetItemMinSize(self.help_ctrl, (180, -1)) if len(joystick_names) > 0: self.joystick_choice.SetSelection(0) self.on_choice(None) self.Fit() self.CenterOnParent() for x, y, direction, name in buttons: b = Button(self.joystick_panel, (x, y + 4), direction, name) button_panels.append(b) #self.SetClientSize(self.frame_sizer.GetMinSize()) #self.Fit() #self.CenterOnParent() def on_save(self, event): save_config() def on_paint(self, event): dc = wx.PaintDC(self.joystick_panel) dc.DrawBitmap(self.bitmap, 0, 0) def on_choice(self, event): index = self.joystick_choice.GetSelection() set_current_joystick(index) for panel in button_panels: panel.event = None panel.Refresh() self.id_label.SetLabel(get_joystick_id()) help_text = """ INSTRUCTIONS The joysticks listed are those connected when you started the program. If you connect more, you must restart the program! Your gamepad may not look exactly like this, so just try to map the buttons as closely as possibly. Some gamepads do not have a "menu" button or similar, in which case you can skip configuring this. Some gamepads have the d-pad and left stick physically swapped. This is not a problem, just map the d-pad buttons against the d-pad etc. Left and right trigger buttons are located *below* left and right shoulder buttons. """ bitmap = b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x03 \x00\x00\x01\xf4\x08\x03\x00\x00\x00\xf2\x9e\xb9J\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x00`PLTE\x0b\t\x0e\x15\x16\x1c\x1d\x1e$$%,,-50/2/3522:68?:9=;?A@>A@A?ABJFDGKJNHMORKTTRVWY\\^`ckilqru~\x7f\x81\x8b\x8b\x8d\xa0\xa0\xa4\xb5\xb6\xb9\xc7\xc8\xcb\xff\xcc\x06\xd5\xd7\xd8\xe7\xea\xeb\xff\xff\xff\xce\xdaE\xea\x00\x00\x00\tpHYs\x00\x00.#\x00\x00.#\x01x\xa5?v\x00\x00\x00\x07tIME\x07\xdc\x04\x0b\x123\x1cta\x19T\x00\x00 \x00IDATx\xda\xec\x9d\x87B\xe3:\xb3\x80cK.\xb2\xaf\xcb\xef\x92J\x92\xf7\x7f\xcb\xab)j\xb6\xc3\x02{X H\xbb@\x08\x01\xc7\xb6>M\xd5\xcc\xee\x1eG\x1cq<\x1c\xbbx\t\xe2\x88#\x02\x12G\x1c\x11\x908\xe2\x88\x80\xc4\x11G\x04$\x8e8" q\xc4\x11\x01\x89#\x8e\x08H\x1cqD@\xe2\x88#\x02\x12G\x1cqD@\xe2\x88#\x02\x12G\x1c\x11\x908\xe2\x88\x80\xc4\x11G\x04$\x8e8" q\xc4\x11\x01\x89#\x8e\x08H\x1cqD@\xe2\x88#\x02\x12G\x1cqD@\xe2\x88#\x02\x12G\x1c\x11\x908\xe2\x88\x80\xc4\x11G\x04$\x8e8" q\xc4\x11\x01\x89#\x8e\x08H\x1cqD@\xe2\x88#\x8e\x08H\x1cq|\x15 R\xfa\xdf\x9d\xbbb\xbeL\xf8\xf0vh\x8az\xbe.^\x10\xfe\xd6\xe6\xcf\xe2\xf8\xf8\xbd\x90\xb7\xfbE\xberU\xf5\xcf\xa4\x9a\xae\xe6[\xb8U|\xbb\xfe\xd1\xfb\x93\xc5\xe4O\t~\xf4M\xa6\xcc?\x00\xa4\xd0w\x88\x9f\x99\xe5\xe5~\x96]\x04\xe4\x9f\x02r\xbe\x9f^\x07D\xcfF9\xfa\xdf\xfe\xc3{@G\x1f\x1e\xce\x83\xaf\x9e2\x9f\n\xc8\xb1,\x8f\xb8DH\xbeA\x85<\xf1\x0b.c{\xd1/\xa8\xf5\x0b\xcc-\xd1\xffoS{\x82\xef\xf0\x17\xf5\x13\xf3\x18g\xf8_\xdf\x8b\xeep\xdfw\xfeU=\x8f\xf5\xd9\xe3\x00?\xcb\x92\x9fq\xb7\xcb\xdc\x1c|\xf9\xa7\x02r\x97\xca\xbb\xfb49\xbe\xcb\x94\xf9L@\x8e\xf2|\x96G\x7fI\x1a\xa5\x1c.\xf8\x82\xc3E\xaf\n\'y\xd2\xff\xbd\xb3\xdd\xcb\xf3Q\x7f\xb1\xbfx\xbe\xc5\x19\xfe\xd7\xf7\xe2\xd0\xdd\x9b\x83\x7fU\x8f\x17\xd9,\x00\xf1\xee\x93\xf9\x81\xbd9\xf8\xf2O\x05\xe4,\'\xf8z\x90\xe7\x03\xbe\x01\x9c\x1c\xdfd\xca|& -\xe8V\x9d\x0f\xc8m\xd0\xeb\xc2L\x1a\x97,\xee\x9d\xbc\xdd\xdc\xbd\xd2\xffk\xbd"\xe8/\xf6\x17\xf9d_\xfe<\x9efB\xbf\xfc\x87\x83\xee\xc5Y^\xf5GpU\xf5\xb5\xf7\x01\xd1c\xbc-\x01\xb17\x07_\xfe)\'b\x8fNS\xa2\x81#J39\xfen\xca\xfc\x08@\n4\xc0B\xa5\xf6\xd4HZ.\xe0\xa3p\x97\x82\xce\xb60\xcf\xdb_\x8c\x80\xfc5 W9\xeb\x0f\xb9\xb8\x1dK\t\xd2-\x7f\x10\xde\x9cO\x04\xe4~.\xc6\xbbw\xf7\xbd\xf7\xf1\xf1)\xf3#\x00i\xe4\x96\xd5wr\xe7\x87\xcbA\x07\xe7\xc8+\x07\xaf!\xcd{m\xaf\xa7\x02\xe4?\xbf\x17\r-\xb9\xe1\xed\xe0\x8bn\xad\x80\xc2\xbb\rN\x82t\x7f\x03\xc8\x9b\xe7\xca\x89\x14<_\x82\xc8\xcf\x9e2\xdf\xc3\x069]\x98\xfd\x92\x9e\x19\xe4\xf9~\x91\xb39\xdb#)\x94\x9d\xbc\x1c\xe9l\x0fF\xa1\xb4\xbf\x18\x01\xf9\xfb{\xb1\x97\xfb{xUq\xa6\xe1E\xb7~\xa4\xc9\xc9?\x0b\x10\xb3\x14,[\x9f{\xb7\xe1s\x9a\xa4\xbf\xb9?\xc8\xeb}\xd2\xff\xd3y\xf2\xed\x01\xf1Z\xa6\xff\xa7\xe7\xfb\xeeYe\x9a\x0b\xdb\xee\xc1\xe6\xd1\xfdX\x17\xd3\xcd\xde\x93\xe3\xe9\xee\xfa$_\xa7\xa2\x18.\xfc\x12l\xde\xd24\xb7\xef\x0e\xc8\xa3>\xe3\xde\xa4\xfb\x9c&\xe9\xefh\xa0\xf3Z\x9f\xf4/\xe2\xe2\x9f\x03\xb2j\x99nn\xc6\xe9\xff\xe9<\xf9\xbe\x80\xac[\xa6\x9b\x13\xbf\xdd\x83^\xa5\xb77\xf7I\xff\xcbYE\xcd\x85]\xf7`~T\xc8\xb5\x1el\xfa$\x9f\xe4|\xe1\xc6\xc3\xf8lQO\xaf\xbc\xbf\x0f6\xab~\xe3\x8b\xde|8\xbf\xcf8\x13n.\xba\x0f\xff\x7f\xdc$}u"\x1f\xee\x93\xfe\x9ey\xf2\x83\x01\xd9j\x99n\xbf\xf1\xbb]\xbf\xbdO\xfa_/\xbb\xd0\\\xd8u\x0fn\x1c\xc9\xeem\x9f\x8eN\x0b(\xee%YP\xf6%\x97\xa3\xbc|{@\xfc>\xe3L\xb8\xb9\xe8>\xfc\xffq\x93\xf4\xf7\x00\xf2\xa7>\xe9o\x9f\'?\x18\x90\xad\x96\xe9\xfe\x89\x87+\xc3\x1b\x9a^\xff% \xa6\xb9\xb0\xeb\x1e\xcc\x8f\xd8\xc0\xe0\x1e\xc4\xfb\xb3\xb3#\'\xfd\xb6.\'\x12\xecl\xa6\xdc\x8a\xe9\xe3S\xe6\xd3_\x14.\x05\xd4\x8c\xfbv\xdf\x00\xe4\x13\x9a\xa4\xbf\xfd\x0e\xfd\xb9O\xfa_\xcd\x93\x9fc\x83,[\xa6\x87\'\xbe\xd4-\xff\xd8\xf4\xfa/\x011\xcd\x85\xbd\xee\xc1\xf4\xe8~(\x95\xfe\xc2=\x88\xdb\x9b\xef\x89<\xd7\xf5\x01_\x89/\x81G3\x8b\x90o\x0c\x88Y\n\xe0\xb23\xe1x]K\xdf\x8b\xf5\x9f7I\x7f\x1f \xaf\xf5I\xff\xcby\xf2\x03\x00y\xd02=\xa9I\xfa;\x01y\xa5O\xfa_\xce\x93o\x0f\xc8\x1b\x07\xb7\xc8~{\xa7\xec\x08\xc8\xcf:\xdb\xb7\xbc\xe37\xdc\xfdw\xcf\x93g\x01\x84[d\xbf\xbdSv\x04\xe4\xf9\x00y\xc3\xdd\x7f\xf7\xcb\xba\x1f5\t3)W(J\xdaZiVT;L\xf30\xdf" \x11\x10\xc3\xc7\xa8\xf4\xa4\xc9D\x86s\xc3\x90\x81sG+\xe9`\xc2\xee\xa7A\xe1\xcc\x19\xb2\xe3\xcf\x05\xe4\xdaV\xe3P\xc9\xa2\x1d\xb4\xc2\xe8\xf4\xac`LC_\xe5\xfaBds\x04$\x02\xc2\xe3$\xa4\x94\xa8_\xe8\xa1?M\xf0\xcf\x1a\xe9\x80\t:z\xf6\x9d\x96$\xaa\xbd\xfeX@\x0e"\xcb\x14\xc31\xaf\x86>[:c\xadg\xea\xe5";G@" \xa4\x97W\xb9\xea\x06c\xad"%> \xe8\xddaJ\xf6\x83\xfa\xf0\xc4\xf9r@\xaem\xd6O\x9a\x8e\xf9\xc1\x98\xfc1\xb4\xed\xfe\x12\x01\x89\x80\xdcOm\xa6e\x87\x1e\xbdu\xe8X:&\xabj\xed-#cw\xfe\x99\x80\x9c\xaavF\xcfU\x88\x05\xbaw\xc92\x0f\x1cx\xd3\xd8V\xc7[\x04\xe4\x97\x03r\xdbgU?\xf4\xbd\x03d\x1c\x06\xa7bMv\x16\x11&\xc0\xc8\xac\x8e?\x11\x90C6\x90cwis\xa0\xb3w\x0b\x90i\xc8\xe7\x08\xc8\xef\x06\xe46\x8a\xb6\xeb\xfa\xbe\xeb}\x112N}\xd5\x06\x80\xf8v\xfbq\xce\x0e?\x0f\x90\xbd\x18f\x8f\x0f{bC\xd5\xb6\xad\xb6\xbf\xf0\xa9)\x0c\x02\x8dC\xbe\x8f\x80\xfcj@\xa6\xb4\x06>\x0c\x1a\x84\x87\x06d(\xab)TFX\xc9B!2\x8a\xe3O\x03\xe4 Z2\xc3\x97\xc4\x8f\x95\x02J\x14/\x06\x01 z\xcd\x10\xc7\x08\xc8/\x06\xe4\x98\x16M\xd7\r@H\xef$\x88\xb6B\xfa\xa2\xa5\xd9\xb2\x94\x1f\xf0q\xd8W\x1f\xb1\xd4\xbf\x12\x90\xb3\xc8\x07sB\xa1\x0c\x19\xb5e2\x8f\xb5\xf2\rt\x82\x03>\x86\xfa\xbfqfE@~$ \x97Lj>@\x82\xd0pB\xa4\x07\t2\xe1\x8a;Y+doc#\x83ho?\t\x90[/*cb\xd0\t\xd9Oc\x05\x1cT\x83\xa3\x03\x01!<\x86\xa1\x13S\x04\xe4\xd7\x02r\xd0\x02\xa4\xd9\x00d\x18\xfb\xac\x9d\xc8n]{C5!\x93L\x8f?\t\x90\xa3\xc8<\x9bj\xb2|\xe8/cY\xb6}\xa5j\'=\x98\x0f&$\x17\x97\x08\xc8/\x05\xe4\xd6\x8a\xd2\x012\xf8\x80\xb4\xaa\x9f\xad\xf3s^\x99"s\x96\x8e\xb7\x9f\x03\xc8uJE\xef\\\xd7S\x10\xf7(\x8bq\x1e\n5\xfa\x02d0x\x0c}\x95\x1e" ?\x11\x90\xff`\\RQo\x032\xb4\n1\x99\x02\x87\x0f\xabY\x00H\x99V\x97\x1f\x03\xc8\xed\xdc\xa7r\x98\xa7\xa5\x8dN\nW\x9e\x8f\xf8\t\x85\x87g\x82\xf0\xa8\xd2\xe1;\x96\xa9\x8c\x80\xfc\x03@\x8e\xa9\xd4|4\xcdJ\xc3\x82y\xa1G\xddO\xf3\xb6\x8e\xb5oRq\xbe\xfd\x14@.\xa7L\x03\xc2\xf2\xc3\x9e\x8f\xa1e\x180Sq\xf6mt\'A\x86Fd\x11\x90_:\xa64\xab}\x1b\xc4w\xf5:}d\x9a\xd7*\xd6~H\xd3\xe3{\xb7\xdf}\x15 \xd7\xcbQ\xa4\xd9\xe86\x81\x19\x87\xeel\x98Y\r\'C\xfaN\xa6\xe7_L\xacpnRy\xf9\x19\x80\\/\xe7*A\x1b\xdd\xf0\xc0\x9e9\xc7\t\xe9\x91\xd3\xbca\x83\x0cC\x97\x89K\x04\xe47\x9a \xad6A\xda\r/oP\xaaa\x9e\xb7u,m\xa5\x9f~\x0c \x92\x9dX\x81\x00\xf1\xdc\xbd\xab-!\xbe\x9f\xb7\xcf\xd3S\x04\xe4\x17\x8ek&\xca\xa6m{\xcb\x07\x89\x90\x11\x05\x88\xdd\x06B\xd9W$5|FF\x91\x1c\xdfi\x84|\x11 \x97\xcb1M\x8bq2\x1b\x06\x03\xf4]\x06\xa6=\xc1e \xa4/\xd39\x02\xf2\x0b\xc7Y\x9b m\x0bV:\x1b\xe9\xbd\xd3\xaeF\x8b\xc8\xe1\xe0jG\xf9\x94LY2\xfd\x08@\xb4\t\xb2O\xd2z\xe9t\x803\xe3\xe2&=\xa4\xbb\xb7\xb0\xe1x0\x88\x8c\x81\x95.\xea[\x04\xe4\xf7\x8dc*\t\x10\xb4B\xc8F\x87\xb9\x92g"5C\x88\xacj\x87q\xf601\x80\xa8\xa4\xfd)\x80L\x89hXm4\x9b\xec\xa1XK\x95\xe93L\xfc\x91\xa6\x99\xd2\xe7K\xae,+C\x1a\xf9\x8b\x8d\x90O\x06DJY\x98\x1d\xaa\xf0\xb8\x0c\x8b\xc9H\xc9?\x90\xc5t\xe5\xef\xdc\xf3\xf7\xcb\xf4\x99\xefm\x848z\xd3\xb4\xa4ea\x99(\x7f\xbe\xe8\xc7\xee;\x91\xb7\xd3|8ZF\xf4\xff&\xc9\xaf?\x02\x90\xeb\xa5ODkC\x9f\xfa\xedO}%\xf8\x1c\x85\x90\x99R\xaaPY\x96\t\xc1\'\xacEk70!\xfa\xd24\xf2\x13\x8d\x90V\xeakX\xcaR\xbfQ\xd9.t\xc3\xc9\xcc\x1b\xa9\xa6\xab\xff\xec\xe7N\x8c\x7f\x0b\xc8\xfd6\xcb\x8b\x9d\xf5\'\xb9\xdf\x02D\x9f\xb2\x1cV\xcf{\xc4|\x86\x8d\xae L\x88\x88@\xa98ihHE\x06\x9bp\xa90\xd6\x04\xd9z\x19O\x1cQ\x8d\x87\xe3\xd1\xe8\xeb\x1d$\x9b\xfc\x00@\xae\xd7\x8b\x02//\x95\xbe\xd3t\xb4\x82N3\xd7g9\xcd\x9eu5Mz\x95\xc8\xf9d\xf5\xea10 }\x91\xee?\xed6\x1c\xe4Y\xdf|\xa9\xe7\xc8Y\x1eV\x93\xc7M\x8f\xd1\x7f\xf6S\'\xc6\xbf\x06D\x9f\xdcl\x1f\xdfdq\xbfNE1\\\xee\xb7\xa9=9@\xeeR!M\xf4\xa4\xbe^c\x0b\x97\xed\x13/\x846A\x18\x90\xa6\xc8\x0c\x1bE\x83%\xe3\xa6\xa0.\xd6\x01p\xc8SfdOO\xcc\x83HN\xf7w\x11\xf2U\x80\x9cE\x9aA.\xaf>\x9d\x91\xe8\x10\xaa\x1dm\xed\xd1i\xb0\xd5\x8e\xd0\xfc\x1a@\x94\x12#\xb0P \xdd\xa7\x19!\x80\xc5Q\xdf\xe8\x93F\xe5t?\x96\xe5Q\xbf\xe5\xb1(\xe6\x9b\xb9\xfd4=J&\xc3\x0c\xad"\xd7\xf0Z)\xcfc}\xfe\xd1\x80\xdce\xe3\x01R\xde\xc7\xf3\xfd\xaa\xa5\xe9^\x9e\x8f\xee\n\x9c\xe5\x04_\xf5zr@@\x0e\x17\xd9}\xeeBAa\xc2\xa6)\xa5Y2\xeb\x8e\x9cX\x8b\x013KK\x8e\xc3<\xe0\xbcI+\xb0H\xf6\x00\xc8\xfe\xf6\xfd\x01\xb9]\xaf\xa74\xcd\xd1\xae\xe8%\xae\x02\xd5@\xc5G}W\x95?F\xa8\x1dW\xa0\xba\x99\xc2\x8a\xa1\x15\xb2\xec\xfaY\xb7\xe1\xaa\xef\xf3(\x0f\xfa\xf6w\xf2z\x94\xe7\xb3<\xde\x1by\x03\x91\xe1I\x10x\x96E\x87\x91 \'y\xd2\xff\xf5\xc3\xe3\x85\'\xd8\xcf\x05\xa4\xb0\x8f\x8f F\xaf\xc7A?\xae\xb5\xbcp6\x88\xd4\xc6\x89\xfeN_\x9a\x9b\xb9\x08\x85\x05\xe4\xe5;\r=m\xb2\xe9\xa0q\x91\xc9\xf03\x009$/\xdfs\xe0\x1bl\xe4\xb5(n\xfa\xbf\xac\xd1 \xd1\xc0\x94r8\xfb*\x96\x1e\xe3m\tH\x07S\xa5\xd1\x0fof\x82\xfd\\@J{\xa2\xe5\xfe\xa6\xd1\x9f\xb5\xf6t/\xa4g\x83\x9c\x8b\x11\xbf\x16\xc1E\xf8\x96\x80\xd4\xa0\xa4\x88a?\xc9\xf7Z\xe9_\x05\xc8\xf4\xad\x01\xd9\xcb\xbd\xd6\xc1g-Df}\xfb\xc1_s?\x97z\xa6\x9cC\t\xd2-\x01)\xdc"\xfa\x99\x9a\xc6?\x00\xe4\xaa\xcf\\z\xd3\xbd\x94\xbe\xb0\xb0\xd6\xfbq)A\xe4\xa7\x9e\xf8U\xa6d\x8e\n\xaci\xee\xe5\xbb\xf7+\x95c\xa4m\xa8\xf0\xe5\xe5\x056\xa4\x83\xf2Q\xcb4\xbd|\x7f@\xb4\x8d^i@R\xf4M\x8d\xb6\xdb\xc1\xe6\xe0\xf3wW\xa3\xd7\xda\x15jZ\xe9\xf0y\xaa\xae,\xb4\xa6D\x9f\x1bs\xc3\xb5\xa2]\x06\xae\x1a\x8dBA*G A\xbag\x00d\xefy\xb1H\xa6^Ndnx6\xc8}(\xae\xbe\r\x82\xcf\x96\x9fx\xe2\xa7\xd4\xe0\xd1{\x83fI\xbfA\x08X\xb1\x9a\x92\x97\x17m\x90\xcc\x84H\xf2N+\xfd\x8b\x009\x0b\r\x88\xc6\xa3\xd1\xef\x7f\x18^\x07\x04\xff\x05\xa3C\x8b=\xfd\xbc|E}\xdb\xf5\x8a\t\x9f\xafZ\x03?]\xb452\xca\xcb\x155-\xcf\xd1\x036\xca\xe5\xc8\x93\xa2Dm\x9dm\x90\x1f\x0e\x88,\x86s\xe0\xb5\xbb\x9f\xeb\xfa\x80\x0e\xab\xd2\xf7bi\xc5\xcbx\xb1\x949\xebs\xf1y\xfe\xee\x03\x00\x02\xa1B\x1f\x8f\r8l\xc5^\xe2\xe4\xe5\x05\xddA3x\x83\xd2\xf4\xf0\x03\x00\xb9\x9dD\xfa\xf2\xa2-\xf3\xc9?\xb9~!8H^\xd8\xa4\x1b\xef\xc1\xd0+\x91\xa6\xe2\xf3\x1cE\xa5f\x01\x04\x02\x18\x12\x87\xba\xd0\xc6\xe8m. .\xc6\xb7\xdf\x84\xc9\xceuw\xe5I\x81?1^\xac\x1f\r\xc8\xbb/\xd6\xe9v\x95\xff"\ntmS\xc0\xa3\xe9\x82\xe5rx\x05\x92\xd1\x01\x02!\x85Q\xe9Y\xf3>+\xfd\x8bl\x909\xd5\x80\xf4\xaf\x08\x8f\xfeO\xa3\xcd\xb5z\xf6K\xb7\x15~3@\xceC\xe1\x05M?\xf18U\x9a\x82\xed\xf1hlK\x11\xcd\xc8\xcb\xcb\x88\xb5\r\xc6\x19\xbc\xbe\xe9t\x81&\x9f<\xec\x83\x07\xe3\xe5\xe5\xe1\x8f.[/\xba<|\x99{\xd1\xe5\xd1\x91/4N\xa7I\x83\xfc\xf2\xb2\xa4\x9e%\xc6\x9f\xe1\xa0QeB\x1cn\x11\x90_2n\x07\x91\x8a\xa2\xda\x04\xe31\x1f\xa8gi@\xccf\xc3y\xaa\xd2$\x1b^M\x8c\x0f\x86\xb6_\xde\xf3\xa2\xfd_\xfd%S}A&i\xdek@\xfa\x85\xb1\xb1\xd4\xa7XVpv\xb3\xdd\xa7o~\xdef"\xed.\x11\x90_1\xaeC*D\xdd<\xc4\x83-\xd5MD\x10\x10\xb3\xe1P\x0b\x91$m\x86\xb7\x0eX\xc7\xff\xe1\x8bp\xe5\xd7\xe2C\xf5\x8b\xd7\xeb\xe7U&\x85\xd0R\x81G*\xdc\xc82\xfd\xb3\xa2\t,36\xd6\xb3S\x04\xe4\x17\x8c\xb3\xd6\xa8\xb3f\xb9\x80v]\x87i\'UU\xb5\xad\xfe\xd4,\x06\xb5\x10\xd1\x80\x0cn\xbb\xfa4\rR\xabj}]\xd5U[\xd7\x90\xf7\xf8\xdaxyy\xf8\xa3f\xebE\xcd\xc3\x97\xb9\x175\x0f^\t\xa7Pi\xdb!\x15\xed\n\xa8\xaeO\x05\xbc\xdf\xf5h[\xday\\\xa5\xc2[3x\xddhs!\xf6\xb7\x08\xc8\xb3\x8fc\xa6\x17\xd5\xb5\xf5\xd1\xd5\xder\xca\xc9\xeeI\xf0%\xeb\x8d\x04\x99\\\x15Bm\xab\'\xa2\xca\xbd\x91\xa9<\xcb\xf2L?\x80\xce\xb1Je*\xa3G\xd9\xcb\x0bv\xce\xcd\x8b\xa2\xcce\xfe`\xbc\xbc\xe0\x1f\xf1\x9e)\x8a\x02\xfe"\xfc"\xfc\xa5B?\xd0/\x82\x03\xe0A\xf08EVH\x99\xcbBfR?\x03~\x1f!\xa5\x92I\x92\xb5k\x89\xd3gb\x7f|}\xecE5X\xaf\x05\xbb\xbf\xfbV\t1\\# \xcfm~\xec\xf5\xa2ZnX\xe7UZ\xfdAe\xc9D\x0fSm\xe2\x92\'d\xacO\xa36DD!|\x1d\x05\xfe\x81\xfa"\xe1;\x9c\xaa\x12\x1f\xbf\xbc\xc0w\xa8\xc4d\xe2\xd1\xd0/\x12\xbe\xf6\xf3\xca\x8b^\x1f\x9a\xf3$\xcdP \xf4\x06\x10\x8e\x04\xa6S@\x03\xf6d\xe36\x8cf\x0c"\xf4\xf8\xe2/7E\x96\xfe\xdf%\x02\xf2\xcc|\x8cz\xdeT\xed\x86y*\x14\xb4\xb6\x844D\xfeX\x8d\x19\x10"\x1b\x84D\x08\xe9Z\x90 +d\xd9\xb5T\x1bE/\xb4h\xebjk\x17\xfe\xb1\xe9\x8b_^^`\xa6a\x01\x95\x8e4\x17\xac\xa5\xd2\xe3f-\xb3X\xc3\\\xee:3%\xd9\xd7\xa4\xbf\xc2+m]\t\x9c\xf0\x9ds\x1d\x8c\xaeT\x11U`\x18\xa7Ah\xc9\x971\x11\x9e\x04\x81w\x90\xceG\x8b\xc3\xe1\x7f"\xd9\xc1\x80\xf4\x19\x07\xc8\x98\x86f\x19?\xa8D\xaa\xce\x11\x90\xa76\xcfM\xe8|\x01H:\xee\x83\xa1\x97\xd5\xc3\xe2\x19\x95\xe1\xd4\x1cGS\xc4\x16\xbb\x94\x8d@H\xaa\x0e\xb8\x85\x957\xb0\xafz\x8a`\xe6\xfc\xcb\x8b\xeduH\x9d\x01\xcdwXGhO/\x84P\xbd\xd9\xa3\xb1\xb7\x95\xea\xec\x1f\xa1\xd7\xf3_r\x9b\xe6\xe7\xc5{?\x1c\xeaT\xebW\x1d\xaf\xfe\x0b\x1bDh@\x0e\x07\x80\xe4Pk2\xb2Z\x13\xd6H\xcd\x89BD\xe0\'\x93X\x04\x88\xd8\xba\xaf2\x91\x9f# \xcf\xcaG\xff0\xfa\xd1\xa6\xe1\x1c\xdb\xcf*\xeb\x16\x80\xd4\x82\xa7\x1a\xe4lL\xa3- \x85\x9b,r\xdaKaSS8?\xc5\xf8\xbc\x80(\x0c2\x06\xe5=7\xea\x1aB\xa0%x\x11\x1b<\xc1\x8b\x17\x7fiY\x17Q\x8b\x11\x05i\x02\x9d)F\xb1\t\x88FdLvi3\x9a}\xe8\x8d\xd8%\xc3\x11\x7fd\x01\x19\x82\xd0\x10\x12\x92\xfe*B~\x13 \xb7>\x15\x92\xf9XF\xc8ZAK\xb8Y\xa3\x87l\xdc\xd7\xed\x02\x90\xcc\x00\xe2iY\xb8\xa7\xa2M}B\xc6\xadA\xd3z\x9c\xac\x93\x98\xb2\xbb&[\xa1\x8e\xe7\xf7\x92\xa2\xe0\x8by\xfc\n T\xb7\x04\xf9h\x8d\xa7\x9a\x95;;\xc4D|t\xbb]\xed\xbf\xc7\xa1Jv\xf5!\x00d\xe5\x04\x87\xddT\xf9%\x02\xf2\x9c\xf6G\x9a\xd5\xedv\xf8\\K\x90\xd9\xab\xf0\xd3f\xa0`u*\x10+\x16\x90\x81\xe66\x89\x06\xb4\x02*Ph\x98\x10k\x13\xb8\xf8;\r\x8e\xa1\x8c\xa6\xf8\xed@Y\xc2\x81p\x08\x01ao\xc0\x86\x98y$;\xa8\x96\xb0\xe6#\x91-\xcfjV\xb1,"}\xc7\x80\xb4\xbb\xa4\xe57;p\x19\x93N\xec\n\xfc\x99\x06d\x15egoo-Su\x89\x80<\xdf\x98\xc1\xfep|\x84\x8f@\x82X\xb3`\xcej\x92\x19 G\xf6V\xf57\x80\x8c<\x9f\xfc\xf2Q\nd\x08\xf7fZF\xdf\xc7\x10\x10_\xc4\xb8TzC\x847\xf7G\x124\xd3\xb8\x82d\x0b\x10\x17\xe0\x9f*\xdc\x1c\xecE\xf98\x92nr\xcd\x08\x90a\x974\xf4\x06\xf1I:\x17\xadf\xa1\x0c\x99\xd2\x87i\'M)\xd2\xf6\x1a\x01y\xba\xf8\x07\xfa\xaf|\xf9\xd1z\x0f4 .\xbf#3\xba\xd5a\xca\x06g\x0c;\t\xc2k\xae\x13\x13\x03\xeefU\xd4ZcX\x13b\xd2T\xecc\xfb\xc5\xd81\xa37\xf7\xc7\r\x1b%x\x8e\x01\t\x9es\xafn!\x17\x1f\\\xd9\x9cR\x82^,\xcf[;\xa4\x00\xc8\xac\xd5)?Q\x91N\xa8o\xd2\xdd\xf4* m\x07\x84\x8c\xb7\x08\xc8s\x8d\x93H\xa1\x90\xa2#\x82<\xb1\xf8\x08\x1c\xb2\xa9\xcb\xa8\x9aZ\xeb\x88\xda\x0f\xf5\x9e\x93\xa2\xf6{%\x9d\xc3ttS\x9f-_ \xa4\xf5\t\x19\xd7y\\[)\xf4\xae)\xf9h\xd3\x85\xad\x04\x19\x97\x96<=\x17J\x90q\xf2-\x9diHi/\xb9\xb7\xb7C\xdb $>\xc8i,F\x8d\x80\xda\x89\x80\x0fB\xbe\xeb\xca]\x8a\x80<\xcc\xe4l\x9a&O?\xb1\xceI\x04\xe4+\xc6\x05\xe3\xe7\x1a\x84\xaewa\n\x12"\xf4\x8d\x98\xe6U\x85Z.D\xc8\xb8\x00 \xc1$\x0f\x00\x19\xb0^H\xbf\xa1d\xbd\x9eA\xe5)[6\x9f\x9e\';?79)c\x9e\x03e\xcd\xea`\xe6u\xe4Y\x9b`3W\x9a\xb5\x81\xe5\x80F\xba\xfb>\x1b\xb4\x00\xd9%\xf5\xd2\x08G+D+Y\x03\x01\xd2\xfazh\x90\xd1XkBN\x11\x90g2\xd0+\xa8\x03\x05w\xbbk\x89\x08\x96\x1c\x04\xcb\x12\x10S\x98w\xf6J)\xce\xfb\\\xf6\xfd\xa34A\xa8\xfd\x91\xc2^\xf5\xc7|l\x02\xb2\xf2vYK\xdeI\x851\x941vW\xca\x18\x08\x0f\xf3\xda\xdc\x19 \x16\t\x00\xc4\x13\x15B\x13P\xef\x04U\\\xed\xfa\xce\x93!$B\xf6$A\xda\xb6\xdf\xf6\x89\xb7\x95H\xb3K\x04\xe4\x99\x0c\xf4\x94\r\xf40\xa5\xcfJ\x93*\xfdc\xd2\xba\x05d\xb9u\xdd\xb8wr,x2\xbe3\x07w\xf4\x9a\x92\xfb\x80x\xcf\xf96=\xff%\x94\x1e\x88\x88\xff\xbaa\x98j0@\xd4\xc2\x97\xed\x03\xa2\x9f\xd5\x80\xec\xd3]\x81\x19\x9a\x1d}\xb2\x1b\xf2\xfb\x0e\xad\x10\r\x88\xa3\x83UQ|\x04\xd5\xf0\xdb\x06\xcc\x90\xfe\x16\x01y\x1a\x03\x04\xf8\xa8B6\xea\x8a\x8c\x0f\xe2\xc4\x002\xb5r\x95\xd2\xa4(\x946g\x9b\x12\xc4MD\xaddi\xbd\xe5\x9d\x80\xd8\xb9o\xf7\xf4\x8e\xa3s\xbb\xaeE\x0c\xe7\x14O\xae\x90\x04?G\x16?\x18 \x89\\jFK@\xba\xbd\xd6\xb0\xca\x1e\xc90|8\x13C\xec:\x04\xc4s\xf3\xf1U\xd2\x0fa\x0f&T4\xce~\x89\x19\xf2+\x00\xb9*T\xb0Z\'?*\x1c~v8\x01\xd2S^\xd2rt\x1e \xeb-\xb9vn\x81\xaf7}\xbc\xb9\xf5\xa1\x8a\xe5?F\tb\x9c\\K\x01bb\x16(A\xa6\xf09\xc2*C\x05\xebU@z\x00d\xd4(w]c\x84H\x00\x88\xdc)\rHm\xb7O\xe9\xc5\xa4\xad\x9c\xc0e%K~\xe6>\xf5\x08\xc8?\x1dS\x9a\xca\x80\x86\xaa&Bj\x8b\x8cJ\xc1\x1e\x1f5\x1fX\xd1\xd9\x1f\xc0\xcc@\x80\xb44\xd5\x82\x86\x9f\xben\xae\xa7\xe7.{\x1f \xfa_\xc7y\x87\xa3\xf3\x05\xdb\xef\xf9\xdf\xe29x\xd1\xb8z\x9d~\xaa"\x05\xab]\x10\xb2\x06d\xd8\xa5\xdc\x00{!@4 \xc5N~V\x11\xac\x08\xc8w\x1cg\xad\'\xc1f \xbb\xb7\xa8\xb2\xc3\x97 \x9a\x90\n\x92ZU\xd7P\x92-\xcc\x9efh\x80\x90,\x00\xc4\xdb\x95\xdb\xfb\x84\xb4u\x9aPtz\xa3\xdc\x14\xc7\xb3\x97EEF\xcc\xef\x1dz\x13\x80g\x15\xcb\x02c\xe4H\xf0\x1c\'\xbc\x84\xaf\x83\x7f\xe9N+X+\x01\xb2\x02\xa4\x05@j\xde"\x06J\x93e\xa4\xd3\x80d;\x11\x01\xf9E\x80\x80\x07\xab\xa8\x16\x80\xd4\x0b@T\n\xd5\xdc\xb3\xddNpUs\x92\x12z\xea6"\xdd\xedR\x00DX\t\xe2\x89\x90\xc0\xbb\xd3d\t\xa4\x8d\xbf\xcfH\x1f8\x05\xdehO^V!~\xb2\xc1w\xff/\xad\x9f\x03\x99\xa2v,@\xde\x00\x88\xb6A\x80\x0e\xf8d\xf9\x00a\x02\x80\xc8\xfd\x98\xd6\xd6\x81Q\xb7vy\x81\xa7\xf0\xb7\xda\xa6z\x97\'+\x02\xf2}\xc7\x11\x14,F\x01\xdb\x81\x10\x1d-\x03\xa2o\xbf\x01d\x12zz\xcb\xba\xaeKo\x1bj)\xf5\xb2\x8c\xf2%\xcbB\x15\xab\xefW%s\xc0\xd5\xbb\xab\xc6a\xb3D\xe3#\x17qG$\xea\xaf#hO]\xbfh\xd9\xeel\x8c\xf0/-\x8bO\x8f=\x08\x90\xadt3\x06\x84\x9f\xefD3k@2\x84\x83\x85\x08\xda!\x14#\x02\x1bd?\xa5\x95\xaf\x92\x9a\xcb\x1489\n\xf1\xf6\xdel\x11\x90\xefk\xa1gZ\x80\xa8\xd6\x03\xa4v*VMw?\x00\x84\xe8h\x1a\xfc\xa2j=\r\xf4\xb3\x103\x84\x9d\xecn-\x1e6\xea\xe6\xb4h\x85\xa4^\xa1\xc2\xa1w\xa8\xd0\xb4\xee\xfd\xa7z\xa6\x83vQu\xfc\xa2n@\xcb\x84\xa9YG\xe59\xa7x\xf5\x03\xc5\x16\xc8*n\x11J\x90F\x032\';\xc9\xc2\x00\tA\xe3\x03>\xda\xa6\x14\xbbVK\x10\x07H]WZ\x84\xe8\xeb\xe4!\x02\x96\xbb\x16!o\xb6\xd3# \xdfv\x1c\xb4\x00)\x9b\xe6! -~V\x82\x00IE\xa6\xa9PH\x08!\xf2: \xcb\xa9\x88\xad\x9b*\xaf\xf8\x94\'LX\x82\xf8fHO\x12\x84\xe1\x80\xafK1\xd3uC\xf7\xd6\xaa&\xe8\xe2\xad8\x0c\xea\xa5dB\x91\x87 \xb5_\x03"w)\x16\xa6h\xad\x14\xe9\t\x95\xbaHv\xc3\xac\x01A\r\xab\xc2\x0fp\x89kH\xaa\x85\x08\xc9E:E@\x9eA\x80\x94\xb6\xe2H\xd3\x06F:k[\x08\xc88N\xe9.\x95\x05\xabV\r\x7f-\xa0|\xb3\x01\xc4_\x8b-!\x14\x91\'\x95\xbd\xce\xad\x08\t\x11\x1a`\xdbR\xbf\xb1Mod\tb\xe7\xbe~826+M\xcb\xd9 \xab\xe7\x86!\xa3$E\xf6\xc7\x1a>\xe0\x1b}\xe4\xd6\x94\xbd\xd2\x0f\xa4\x06D\xebXEP\xb5\x85\xfeUZ\xa5\xdc%\xf34\xb0\x04\xa9\x11\x0f\xbeT^\x01\x152\xe5\xb4\x08\xb9D@\xbe\xe5\xf8\x9cz\xfc\x04\x08\xae\xa3\xaav*V\xb2\x03|\xc6\x05 \xa1\xe8\xe8\xad;\xcc\x88\x10/\x9b\x96\xberF\xd4\xe0=\xd5\xfb\x16\xba\x11\x0e\xdd\xc7\xeab\xf5P\x8c[6\x16\x10\xfe\xd4\xe2\x91[\x9ba\x03Fz\xadqOw\xa2\\\xd66j\xb4P)\xd3]=O#\xda\xfa\xb4\x80\x04a\xa3\x00\x90<}\xab\x08\x89\x80<\r \x99\'>@\xcb*\xb0\x1f\x08\x02"\x11\x90v\x99\x98Dt\xb0\xd3\xa7\xb6V\x88\xed\xbe\xeerj\xd9-\xec\xd7R\x0f\xe4\x87\xb6\x95\xb5\x04\t\xd43j\xbf\xdb\xbf!\xa2\x821\x90\xb2a_\x93\x17\xd8k{\xae\xa3\xc5\x8c\xb4BM\xe3\xd4i3= \xa4\x05\x95\xab\xd2\x02d\x07\x89^Bq\xbaA\x85\xd6\x87\xfe\\;%\x15\xf4\xb2\x1a$\xcb\x9bEH\x04\xe4\x9f\x03\xf2\xb6\xd7\x9d\xb4\x05RT4\xd5\xf9\x06\xeb\x87\xfa\x7f\x15\x8e\x1c\x9d\xb3\t\x00R\xb2\xe8`N\n\x88\x83\xa4\xa0\xcc\x10 a\x14.0[\xd9a\x8c"d\xddH\x80\x93\xceM\x99\x92\xa1\xf7Lvg\x99\xe0\xdc7;\x01\xfb~#r\xf2\x08\x10\x049\xac^\xd7o\x96\xac\xeb\xa5\x824.m\x85l\x88\x10m\x81\xb4\x90\xb3\x9ff\xa1\xb5\x06\xb2\xc4\x00R\xb7\xd4\x1e\xb8\x82\xbe\xc0\x87\x08\xc8\x0f\x06\xe4\xd6j@T\x85\xc2\xa0\x82\x02\x88\x15\x01R\xe3\xadW\xfa\xbf\xa2\xdb\x9f9@\xac\x83\x97\x14\xad\x0c\x00\xc1\x9f\xa6\xb2\xae\xddTc\x05\x7f]\xd2P@8}\xd8\xa8\x0b\xed\'\x9d\xbb\x82u\xbd\x97\xfc\xe8\x12oQ\xa68\xfd\xec\x15@\xcc\x0fZ\xd4\xb0\xaa\xb0\xc8b\xbd\x02\x04\x9eA@\xc6\xffi\xcd\xb1.\xf1\xc2\xd8U\xa3VZ\xf3\x82\xee\x85\x83\xc8,\x1e\xec\x17\'/\x169\xca\xf1\xe5\xfa7\x95H\xf3[\x04\xe4\xbf\x1ao\xec\x9a~\x7fC\xc7\x877^\xf0s\nYXU\x85@x\x92Ci0T\xa9\x1f\x94e\xa9\x1f\xab\xda\x02"\n\xcb\x07\n\x90\xa6\xf4\x00\xa9\xaa\x97\x97j\x99\x0b\\\xb7\x95\x1f"\xd0k0\x84\xd37\\\\\x8b\x94A\xf7\xd5\xe5<\x0eKK~\xb0\xc6\xfc\x03@\xec\xcfr\x08\x12\x96\xf4V*\x87\x03\nN\x02\xc4\xbe\xcbL\xd1\xdey}\xba\xa5Y\x0b`5P\x90\xa8\x98R*\x98(H\xcd4\x02\xa4\xe1W\xd9\x81n\xbeR\xbcqc\xc8\xc3\xfb%\xe5yu\xbb\xa1\r\xba{\xea\xa9\xfb\xa4//\xc6\x1b\xbb\xa6\xffg\x80\xecQ\x800 \xa8g\x19>TYh44\x1fe\x06\xdf\x08+A j]\xf43+2(\x87\x0bk\\e\x122j\xa9E\x88\xd8h1\xb0\xed\x01\x1b6\xb6nl\x17\x14qr\x86\xad\x196e\xf0\'\xacaU\x1c\xa0\xf0\xca\xb6\xa7\xd0@\x87\xca\x0b\xeb\xef\xe1s\xd6\x99\xec\x94L\x9bW\x10\x19m4\x1dS\'v\xbb\xcc\xb8\x8e[*P\x9cx\x83+\x16\xd3_eg_\xf9\xc6|\x93W\x00\x91\xd4\xae\xd34\x8c\x9aGI\x1d-/c{q\x13\xe2I\xfb\xa4\xaf\x01yS\xd7t\x02\xe4\x00M\xe6\xff\n\x90\x13hX%+\nPA:\x0f\x08\xd1|\xf0\x0c\x105\xba\x92\xd0\xcd\xabH|(\xfc\xb5VI\x0b\xc8\xd0\xca\x04\xdb@\x07\xb3\xc5\x0cY\xb1\x12S\x81\x1f+\xd9(\xbe\xb5\xf6\x80\x85\xf3\xff\x15\x8a\xcc\x96\xf2a\xf0\x8a\x98\xda\x86\x9bV\xc3\xcaP\x824z\x06\x9b\xf3\xcc\xb0N\xf0\xcb\x8b\xa6\x18\xce\x1eL\xae\xba\xf6,{\x80B\x9f>p\xb4\xd3\xa7\xd9\xb9\xc8J\xaf\xa8\x167\xb6C\xc8Lg\x84\x0c\xff\x90\x1e\xa94\x80\xa4\xc7\xbf\x03\xa4\xc1N\x9c\xb6\xed\xf9\xd94|>\\\xb07\xdbs\xf7I\xdf\x02\xe4\x8f]\xd3\r \xd8\x07\xfb\xa1O\xf7-\x07\x9c\xb5\x86\xa5\x01A\xcb#\x934{\x8cS3\x18\x9c\xec!\x12}\xdf\x01\r\x94\x1f\xf8k\x05J\x90\xc2\x84\xc6!\x8e\xb75\xfaZd\xe6\x8f\x95\xa8c\xd1\xc4\xf6{ \xc2\xb4n]x{\x9b\x96G\x81\x96\xd5\x16\xda\xc1\x81\x85\xfa\x1f\xe6)\xe2)fI\xfb\xf6~"c\x87^\x05Hc\xae\xbb\xf1\x8f=G\xec\x83\x12\xcc\x17}\xad\xa4TL-\x00\x00 \x00IDAT\xe4\xdb:\xe0>\xbc\x85R\xeai\xaeo\xb7\xd7\xf6\xdc2@S\xe5\xa9\xfb\xa4o\x01\xf2\x87\xae\xe9\x05S\xe4\xae\xd0\x87\x01\x01\x1fV\xaeX\x14\xe8\t\xbc5\xb1\x83\xef\xeaD\xa4u\xe7g*\x16M\t\xb3\xa7\xdb\x9aja\x84/\x13l\x1c\xd7\n\x13\xe4\xfb\xf6\xf5\xb9\xdfn?v/z\xdc \xce\xa1f\x99i\x13\x10\x04\n\xd3f\xd2\xd6\xae\xf5jp\xf9\x80\xf89\x1f\xfec\x0b\x88_v%\xa8\x9b\xc0\xbb]\xfb\x96\x01\xf1~\xdcgd\x82\xa0\x08\xd3\x80\xd0.A\r<\xecO)\xf5\x996\x05\x9e\x19tP\xf8\x13\x1e\x84\x86\xf9\x0b\r\xfc^\x86I\x8ch\x8c\x99wN\x80\x90\x8e\xb5\xff\xcb9\xa1\xff\x96\xdf\xf6\x1c\xdb\xa0\x87\x80\x86z]\xcd!\x0b\x8d\x99\n\x08$\x8f\xb2J\xd9\x08\xb1\x89\xb5&\xe9\xdc\xe5C\xb5\xc1c[\xc1\xce\xe6\xb2\x98:"\xad/?\xcc\xef\x98\xdc\xaa\xdeV\xbfCf\xd1E\xe5\x00Qzr\xff\xcf6\xd7\xd1\x9ch\x8cLE\xd1\xc1)\x88\x98l\xef\xce\x83\xc7\xffP\xff\xd4\xdc5\x9a\x0e\x83L\xdfh\xc8\xf2\xe6\x7f\x90\xfc\xcb\x80\xa8\\\xa4\xd9\x13W\xea}f@\xa0\x9abV\x96\xec\xb1]\x00"A+\xcf\xc8\x8d\x89=\xd1\xa0^C\xcd\x84\x88f\xea\xb4\xfe\xc0|\xe8\xe9\xa4P\x05w.\xdd\x0c\xf0RK@pg\x11\x00\x02\xc2FP9\xa9\xb75\xf1|\xf4\xa2>H\xa9Z\xbd\xc8bT\x1b@Z\x0bHWj\xf1\xb1T\xa8$\xf9\x9f}c{\x01\x86\xf7\x03\x90K\xe90\xea\xd3w\x1b\x0f\xc1g\x91\x81\x0f\x90\x00\xd1*V\xa6\x8d\x90s\x04\xe4\'\x8e\x13\x9a \xa5\xc2\xd4\xc3\x05 \xd0YI\xfa\xe5I\x1a\x98\xf3I\xdb\x13!r\x1c\xf4\xdd\x07\n\xd2\x8e\x14\x8d$\x955g,\xe9/\x03\xa8\xe6\x891\xf8- \x14`\xaf\xd00N\xde\xd3\xe5\xf6/)\xea\x15\xda\xe8\xe4\xc4\xaaS\x85\x0efP\xaf\xfe7\xac\x08I\xdf\x08\x08X0\xfa\xec\x87.l\xf6\x0b\x84\xe4mk%H\xa5\xb2\xb7EB" \xdfn\xec\xc1\x87\xa5\x08\x10\xa5B\x1b\xa4\xd2b"Cc\xd44\rl$\xcc\xf9J\xcfx\xd4\xb28t\x96\xc2\xdc\xc9!J\x90)7M:\xaau\x82\xd6>)l\xdaF!@P\x82\x80\xdf\'A\x8d\xcb\xcf\x1b\x84i]{9Q\xfec\xfb\xd0\xbch\xa3\xaf3\x7f\xd5\xff\\n\x15\xd7\xab\xca\x0c \x90\x99\x8e\x804\xc9\xae\xe8\xd7\x96F\'\xb4\xee\xf7\x96\x01y\xc9\xd0\x1f\xa1_\xf5\xc3\xd6r\x15\xd6\x08\x00\x04sq\xb4\xc55G@~\xe2\xe8a\xb3-\x00\xa2?\x95\x0b\tR\xc1\xees\x9bVD\x0f\x90\x10\xf4t\xa5\xc6\xce\x90\xb0\xc2\x92\xfc(m\x00\x11~\xa1\x04\x0b\xbf\xed\xbc\xddI*U\x15g}A\xff\xe5\xdd\xae2\xdd\xca7\xd7\xfd\xda\xfc\xa06@\x18@\xd0W\xbb\xac\x90\x80\xefYU\x1ej\xa1\xc3\xc1I\x90\xaaJ\xc1\xfc\x91;\xd1\xb9HMgC\x1b\x1a\x9cf\x0b\x88\xa5$\xd1\x7f\x14\x10k\xd6\xa3\x16;`\x83\x00\x01\x1d+M\xbb[\x04\xe4\xe7\x8d[\x866\xbaf\x03?\t\xc5\xf30\x03E]\xaf\x8e\x9cN\xe4\xdd\xf9\xcc\xca\x10\xf4\xee\xeeD\r\xfe`\x94\x1fR\xb9\x04_\xf8Z@\x8e\n\xa0\xa1\x14\x1b\x02Z\x82T\xbe\x04\x01E\x04s\x05[\xca\x13\x84DGL\xfb\xc3y\x8e.\xe1\x8a+\xa0\xd6\x86\x99\x1a\x00\xb1\x9b\x93j\x07G\x85\x01r\xb03\xa0B$\xbc\x88\xaa)p\xc6n\x8bN,\x03\x88\xc8{X\x00J/Pc\x01\xe9\xb4\xf1%\xdf,@\xbafk\xa8dW\x02 \xbc\xe7R_\xe6\'\xb6\xd2\x9f\x18\x90\x8b\x00\t\x82\xf9\xa8\x00\x08\xe7a\xb4\x12\xb3\xa6\xf4\xdd\x97\xc5\xe2\xc6wD\x08R\x01\xd5\xa0\xd0\xc2\x00>\xb46Vk\x05K\xf1V\x12\xe0\x04%H\rE\x1a`:.\x01\xc9\xd0\x8d\xd5\x9a\xe4\xd9\x84\\`//\x1c\xb2\xa3\x8d\x7f\x15\xe5\xa2\x13\x06d\xe0\xebOZ8`\xd8\xa6j9\xf1\xd0\xb0\x02r\x0c\x9d\x06\xa9P\x0cHE\xbf\x08\xa1\x0f\x0c\x83(:~\x9a\xc3\xab\xd3\xb6k\x1a\xdf\x0f\xcd\x8e\xdcZ\x8b\x90\x96+a\xb5a#\x08o\x8fd\xdb\xe8\xbf)\xb7\x01\x01\x11bm\x10\x8c\xa5?q\x11\xd2\'\x06\x84\xe2\xe8f(\xce\xc3\xc8D\x05)} A\xb2\xf5\xbd\x07-+m\x17\xc6\xcaN\xaf\xcd\x8d\xdb%R\x02*\x04\x88\x06-oYw#\x15\x8b\xd2\xca\x0b\x00D\xd4\xa4p\x81E\xe3\xa55B\x8a\xac\x96S\x15\x8b\x11\x163\xec\xff\xaa)3\xbd\xa5\x1f\xb7\xb8\x1d\xbc&A\x91\xeeR}X\x992$y\xc5\x80\xe0K\x13#A`\x08\t\xaf\xce\xd1`\xe8\x16\x88\xf4\xd0\xffC\xb5k\xe7X\x13|\x81G\xbb]\xbd\tHU\x97z\x15\xd1\x97\ns:\xab\xb2\x10\xcf\xdc,\xe4\x89\x019\x80\x13K\x05\x80T\xad\x12\x10\x11\xa9Ai\x97\x1b\x80\xa0r\x94\xfb\x13\x07\xa6\xb7\xb4{p\xf1\xab\xaa\x1b\xda\xa9\x8e\x80\xf4\x95\xa8\t\x90*\x04$\xe5\xbd\x8a;\x98\xd9v-\x07A\x95\xc21\xccv=[3\x84\n$\xd0\x86\x13\n\xfe\xd3\x86\x8e\x96\x1e\xa5;A\xfb1,$\x19jT\xf8\xfb\x08HA\x80\xd4\x1a\x10\xada)\xac\xe8\xc3\x87t\x03jS\x8b78\xca\xda\x02\xb4Mwe|k\xa4Lw%\x02R# ZB\x1e" ?oLz\xad.\x80\x8dB\x0f\x96 \x9a\x0f\xad\x15\xe9\x07\x00\x88l\xfe,B\x14\xb8\x83K\xcb\x06\xef\xa2\x82\xea\xff\xb0\xf3\x1c%H[A1\xc36\xb7\x80\xa8\x00\x10\x01\xb2\xc4\xdf\x85\x07*\x8a\xd5\xbf\xaae\t"\x0b\x88e\x86G\xb2\x13\xe8\'\xc0\xbfUP\x86\x95\xd6\xb6(\xf0\xb2\xb3*\x16\x01\xa2\xb8\xea\x95W:\xd1\xf0\xd1\x14\x1b\x1e\xe8\x8d\xc1J\x9a\r\x80x\xb0(\xb1\xcb|@\xd2d\x8a\x80\xfc<\x1b\xbdN\x13A\x80\xc0\x7f\x92 \xb2\x04#\xb6\xaa\x9am\t\xd2\xb1\xaf\xd7Y\xc7\x19\t\x10N\x7fgN4(\x85\x01\x04\x92\xdcU^\x03 \xacb\xa9j\r\x88\xd9\xafJ\x7f\x05\x00\xa9\x1e\x0c\x0f\x90\x90\x9d\x94\x01\xb1U\xed\x10\x92$\xab\xac\x04\xc9h\x83}\xab\x01\xc9\x1f\x01\xa2\xa7y\xb9\x01\x08\x1aCP\xa9\xc4\xeaX\r\xf8\xaa\xfc+\xe3J\xcc\x95e\xa6\x7f\xc6\x80\xd4Z\xc5J\xd2\xfa\x16\x01\xf9\x19\xe3\xcd\x15~6\x8ct\xe3\xea\xddQ)Z\xb4\x94\x05Z\xe8A)9\x8c\xac`"\x97\x01\xa4\xcds\x1f\x10E\xbb\x10\x13\xabb\x89\xbaq\x95\x1a!o2y/ \x15\x02\xa2j\x8a\xe9\xd4\xb8\x8d\x9e\x18\x01E\xabR> `\x83d\xafI\x90$\xf1\xc0\xe0Q\x99j\xab`\xb8\xd4\x90S\xe6\x03\xd2C\xb5jKH\xa9\xb2\xdd\xd3Uq\x8f\x80\xac\x00\xd92\xd2K\x02\xa4\xaex3w+\x01\x90\x12=\xfeF\x04\xd4M\t{\xb1\t\x90\x0c\x8a\x7f\xb4J\x91\x8a\xa5p\xdb\xb7"/VB\xb5!X\xc5B\xdf\x17#\xa2\x9f\x92\x1f\x00$-\x95\xb7U\x05i\x81"$\x08H\x12\x1a\xe9\x16\x90\xd6|\xe6D\xff\x16\x13hL\x99\x89\x9am\x1do\xa0\x19\x0e_\xc5.\xad\xbd\x00\xbaW\xa5\xb4\xacd\x04\xe4\xe7\x02b\x1e\x1d\xb5j,2E\x16HY\xe4\x1c\xc7\x03\xb7+\xae\xebZ\xffZ\xf3QH\xb7\xf4# 9\x98\xd8e\xc9U\x80\xac\x0c\xa8\xc9\x06\xa9\x01\x10v\xc8\x92\rRbA\x88\x82\x00\xc1\xa8GF*\x96Y\x9eY\xc5\x12\xe6\x08D\x94\xa9\xb5\xe2\x01b\x9e\xf4\x01\xf1\xb7r\x81m\x95\xe9\xb7\x0b\x7f\xa9 /V\x8eA\x96\x8aT,\x85\xdb&\xdd\xfeImE\xb4h\x05\xe9SG\x19a\xc8\x08K\x84Y@B!\xd4\xfae|\xb5\r\x92\xd7N\xc5\x82\xd2\xac\xc7\xd5\xf5\x8f\x80|s@\xf6\x1a\x10\xadu\x14f\x08\x9aq\xb5b@\xd2\xb5\x8aU\xd6\xb0k"4\xa0!\xc1\xbb.\xca\xd2\x99 (NH\x82Tu\x9eA:\x12\xa8d\x19\x12\x08\x80T9I\x10*\x07bl\x10\xafR\x8aV\xb1$\x95VQ\xa6\xd2H\x85\x0f\x15F\x13\xad$r\x85HB@\x80\r\xd8V\x8f\x1b\xea\xa1\xaaQI\x80@}\x16\x94 U\xb5K\xf2\xda[\xfc\x03-R\x8b\x86\x95\xe00\x98\xd0K\x10u8\xf1\xa0*\xa9S\xb1\xd2\x9d\xd2K\x04+\x9c9\xf4\x9d\xdeG@~\x18 \xb7\x0e\x01)\x1c %\x96\xad\xd1\x10hT`\x96\x90\x8ae"uP\x80\xa0\xc6\xdd\xe4;\x7f\xde`|\xae\xc0\xfd!\xb6\x1e)|\xa0\x04\xd1sL\x03Ra\x895\rH\xa9\xb8\xa4P\x919\tR\x02 \x05\xbb\x9aK\xccz\x81\xa7d\r4pQ\x9d\x8a\xab\xeb\xc0/\xbc\xbc@~%\xd1\xa2\x14\x97\xf0\xd2\x9fk\x06D\xff\xbe\x16\x1c\x00\x07\xc6\x1c\xd3\x1c^\x99\xe36\x15\x90 \x04H\xdd$p\x04\xa8(\xd96\x01\'\x9a\xaet\x97\x99:/[\xee\x00c\x94T\xfaM6\xabJX$g\x93]U\xea\x05\x81,"\xf0x\xdb}\xe9\x11\x90\x9f\x02\xc8\xb5\x02@\xa4\x07\x08\xd4\xc1\x82\x08\x06\xa0\xa2\x01!\x15\xcb\xd3"4?\xe8<\xcd\x02\xc5\x03\xf2\xb2@\x86\x14\xa6\xd4\tY\xca\xd2\x02R\xe5\xf8\xd2\x1a%\x08M\xf8\x02#\x15\xa9\xb2\x80`5\x10(\x07\x82\xfa\x1el\xaa\x10%\x17\x9b\xe2\xaaS\xf6\x91\x06$Sv\xb0\x98\x01\x08\x92]Z\x90\xe4HMh^/\x00\x14wQ! \x02\xb48m\xd2W\x8bZo\xb8\x08d\xc9\xae^\x8a\x8fM@\xc0+\xb0\x15(\x04\x13$E@\x00y\xd4\'\x9d\x1b+\x02\xf2S\x009KX\xd8d A\xc0\xc8\x05\xd7\x8fB@\xa0\xc8hUyS\x87\xf8@\xf3\x19\x12\x8cRAn\xa9\x1d\xca\x90\xb2\xf4\xb4\x7f\x06DOA(fP\x19@\x94\x05$a@2T\xb1v\x8b\nA\x90O_\xea\xdft\x80\xa8\xc2\x01b\x1ee\x96\x10\x94"`m\x08\x07\xc7.\xc9\x98\x07\x0b\x88\xc8\x89&\x00\xa4\xd0:V\x89\xfb\xa7\x96Qpm|7\xbe\xb1o\x81\x08\x00\xd1\x7f&\x87\x85\xa1^\xd4~G/o\xaa/\x12K\x10\x8d\x08\x02\xc2\x1b\xa9# ?\x06\x90S\n\x8e\xd8@\x82\x14\xa4\xe5\xa8\x82$Ha|SlV4N~\x98\xdd\x86\xb0\x8b\xb6AB\xca\x86\xc2)\xfa\x8f\xc0\'l\x1a\x92\x94\xb5\x135\x08\x08M\xf9<\xc3d\xc5\x14\xf7c\xa9l\xab\xb3tR \x1b\x05N\xe9,SNh 8\xf7-$4\xa0\x8d\x8f\xf9S\x89\x909\xff\xd8\x07\x84\x91\x11Pr\x17\xc2&e\xc32\x84=h8\xbb!\xd3\xd0\x14S\xb4\x82\xab,\x8dW\x80\x9f/\xf1\x88\x9a\xb4*\xa4\xa3\x01\xe7\xc0.\x81XH\n\xaf\xa9\x81\x14\r\x88\xc9\xc6\x8a\x80\xfc\x14@\x0eX\x15PSQ\xb0\x1d\x92\x16\x85M\xcc*\xb5\n\x92\x14\xf3HM\xce0\xe1u\x1cpV\x0b=w\xb0\xd0\x0f\xd8\xbf`h\x936\xae_=\x0cN\x0bo2h;\x95\x80\xd1a\xfb\x19\x1a@\x80\n\x9c\xc9\x02\x00\xd1\xb4\xe4\xe9\x8a\x8f4\xd7v\x8a\x9e\xde%\xd0\x04\xf3\xdc\x82\x90\x91\x04\xc9\x19\x0f\xa8\xdc\xc6\x98d\x06\x8e\x94$E\xeeka)\x03\x92\x012B\x8bHU\xeevE\xb92!\xaa\x12\xc2\x1b\xfa\xfc\x15\x86\x1c\xdd\x05Q\xf4ap\xd1\x8f\xf4:\xb0\xdb\x95V\x07\xad\x90\r\r\x12\x08\x90\xa2f@J|\x00e\xf4\x8e\x11\x90\x9f\x05\xc8h\x01q\x12\x84\x08\x81\xcfh\x83\xf8\xd9\x13\r\xe9W\x02t\x06\x00\x03\x9a\xcb\xa0K\xab\x00\tA\x84t6\xe6\x86\xa9\x1eh\x83Tf5\xae4 z\x05\xcfaNK\xfa[X\x980\xc7\xef\xc1\x02\x91\x19\xd5&\xa4\xd5\xbf\x80y_\x00#8\xab\x01\x94\xccH\x90\x8c\xa0\x81/\xb9\x93!\x19\x8a\x8e\x9c\x98\tl\x14\x06$\x05 \x11\x10}\x92\xdaP\xd0t\x976\xc9E\x9f3XY\xfa\xd9\x9a\xbd\x05\xca\x07dc\x14\xd0k\xaa\xe9\xb4\xec,Ir\x00\x1c%\x06H\x9a\x1c4\xab\x92$\xa6\xc4:\x93s\x04\xe4G\x01rkQ\tb#D[\xc7YZpD\x04\x94$U\x80_\xd4+\xb2K\xaa=l\x1f)\x12\xaa28\x0c\x039}\x99\x10\xfdd*\x84\xa9q\x0b\xe5MDM2\x83\xb6\xf4fZ,d\xf0_\x03\x81.&\t\x1b\xde\xf3\xad\xc1\xc2C\x03\x92\xe7\x85V\xb3P\xc7\xc2\x97f\xf2\xe5E\x120\xca\xfczF\xc4\x800\xa2\xef\x91\xa8\xc2\xd6\x94\x86\x17\xa6\x94\x8c\xe5\x01RhY\x91\xd0j\xa0\xa78\xbd\xd3\x06\xf6\x0e[\x99\xa1\xf8\x8b\x93\x1a\x1e\x1c\x05\x12"\xa0L=\xaa\x91%\xfd\x1d\xd8\x07\xb2\xdb\xd5$\x92y+\x01\x01\xc2{\xa6" ?\x04\x90k\x9e2 \x19\xc4\xd3\xb2B\x12 h@\xe8Q\xcb\r\xd3\x00\x92\xe3\x91\x0f\t\x89\xde\x9d!\x04\x94\xf3\x8dW\'\x8ag\x19h+e\x05\x04\xd2,g@2*\x06\xec \xb1\x0f@8\x14@\x05\x02R\x98\x1f\xa3\xaa\xf2\xf2\x92b\xd6H\xe6\xe1d\x14-\x0f\xb1\xac@\x19\xa3e\x10\x8c\x1c+\xec\xa6\x12\xe9Q\x1a\x10}\xce\xe0MN\xe0@\x88\x01\x14\x98\xec:P,K_\xd5,\x8bm@\xf8*\xc1\x9f(\xba\xae6\xcf6\x83\x96\x1fI]\xe4\xfa\xafd)\x01\x86y\xcdiZ\\# ?\t\x903\xf8{\xc0\xcf\xcbEK\x8c\x04\xe1\x01V\xc8r\xce\'9\xd8\xdf\tm\xff\xc01tX\x17K\xea\xe7+\xb1\xb6\xb3U\xa0\xc0\x13\x81\xb4\xc6\xa3\xf9\x02p`\xd1\x94@z\x14\xb0\xcag\xf9B\xba\x00\xc0T\x10\x1b\x0b\xb0\xa3G*\x0f\xc0\xca\xcc\x17~\ny1\xdfe\xb8\x9b*A\t\xc2\x80\xe8\xb7\x02\xefY\x9b\xf3\x80H\r\x9a!\xc4\xdbq\xea{Z\x14\x9c2IU\\<\x02<`H\xac\xa7HWc\x1c\x07p6\x93\xfc\x80\x0b\x8a\'\x8e\x80X+=\x02\xf2C\x009\x19@\xac\x8a%\x02@\xf4j_\xb0\xbe\xc4>XP[\x98\x8f\xda\xd8\x1a\xc3\x80\xa1C\xfd\xbc\xc2\x8e\x95<`&K\xf4\x86y\xca\x8a\x06\x84\'l\x86\xd5\xa0\x13[Q(\x0bd\x01\xbeh\xa9ze\xb4\x0cg\xcd0\x8d-\x12\x92H\xe5K\x9d\xc5/\xacT7\xe3\xc6\x02\xed\x8c\x01)\xf2\n\xc5a\ne\x8a2L2\x13\xb5;\xff\xa2\xb4\xe2\xd4-\x1bE\x88\x07\xfc\x91\x14+V\x00aP\xe5\x05CB\x16\x10 \x04\xf3\x9a\xf5AN\x11\x90\x9f\x04\xc8\x81{[\x08\xd0\xb0\xa8^\xbf\xbd\xe7\x99\x99\x0e\x8a\x16\x7f\x08w\x81I\xa0\xd5\x1d\xe4\x83\rq\\5\x07l0\x85\x8cQ\xc4\xceW\xd3\xed\x94\xc2\rY\xa9Y\xe5%\x1a4\xe9\x1a\x90|\xd3$\x81\x9f\x83\xf8Hd?\xef\x0f\x87\xe3\xf10\xc8\x04\x85\xc8\xa3_\xd8x\xca\x18!\xf0.\xcdZ\xa0\xc5\x15%_\x1a\xdfpYf\x99\xbfFl\x0e\x8f\x10\xbd\xach\xe8Ia$\xef\x9b\x16\xa6\xa0\x1c\xc2\x0f$\x02\xa2\x0c \xec\xc6\x8a\x80\xfc\x10@&\x04\x04\xd2\x15\xcd$M\x8b\xacxe\x80G\xb6@\x9d\x84\x9d[\x1d\xfe\x1f\x06\xdcB\x05\xe6\x05\x00\xb4\x9cL\xee3t\x92\xe1\xc9\xea\x00\x91\xf6\xf0+s\xdd\xa3&#\xf9\xa1&\x8d\x87\xe6\xe3t:\xee\x1bt\xc1\xc1\x8bV\xda\x98\xfd.P\xd1\xd8\x08\xc9H\x82\x80\xc8\xe4\x99\\\x16\x12%\xa5\x00\xb3!\xdb\xba\x04\xf0:l%\xb2\xf1\x03P\x19\xf5\xf3\x12\x9b\xe6H\xfa\x13\x99,@q\x95)-/\x92\xdb\xa5\xec# ?\x08\x90[\x8f\x1a\x16\xce\x19\xbc\x9b\x85J33A\xb6\xa7\t\xac\xff;N@\xc1]\xaa\xf41@\xae\x88\x16!\xf9\x06\x1f\x01+zZ\xb2\x8e\x85\x99X\x10\x06\xd1\x93NHc\x05-\xa7\xb9\x99\xea\xf0\x13\x98`\xf54k:\x8e\x08\xc8an\x80o\xb2b\x02\xd3\x83\x8c\x1a\xfac\x995\xf9\xf3\x1c}\xc0\x89\xc4Pa\x9e\xe2\xeb\n\x98\xdb\x8e\x89\xccZc\xfeY\x03\xc4,!4\x91\xd2\xfba\xe6\r\x16\xbb\xe8Z0]t\x84D\x7fq)\x18\x90\xe1\x16\x01\xf99\x80\xb0\x13+1V\xba\xcc*%r)3\xb9=2t%I6@:\xbb\xc7H\x7fBk^\xc0R\n\x89P\xee72\x9e\xe3\xa6tiZ\xe2,\x82\xb9\x89\x81\xc6\x0c[\xbe\t\xe9\xcd\xb3\xdcp\x92\x85C[\xbei\xd1\x8d\xf3\xe1\x80"D+Y\xf3\x08\x19\xf3)\x8b\x1e\xc3W\xf0KV\xfcP\x00\x1c\xad\r\x8a(jk\tNT\xe0\x7f\xfd!\xec[\xce\xf8\x02\x18ES\x7fKg\xa7\xea\x02\x951\xfd\x8bx\x12H\x17X.\xc26\xe4\xca\xf0\xa1\xb0\x17\xa0l\xd0\xb9U\xf0u\xe6l\xac\x08\xc8\xcf\x00\xe4,L{=!\xb9mX\xd5\xe6\x0f\xe9(\xa5\xb4\x80\x90\xfd\xd15\xbc\x0b\xbb\xc3:\xa2\xe4\xa1\x82\xf2\xe9\x18\x9b\xf32@l2UYP\x8b\xb3\xba\x1d\xfa*\x97`\x19\xe7\x98G\xb2\x1cK<\xb4z\x04\xa5|\x9aa\xde\xc3\x00H\xe6\xa9o`a\x17\xab\xdf\n\x0c\x1b\xfdA\x9b\x16\x81\x92\xbe\x1f\xe6\x81\xca\x9c\xd4}\x0f[T\xfa\xcaT\xc1\xe6\x82\xee\xa6\xff\xa0\xd1\xc1$\x84\xfc\x93b\xc0\xe2\xef\xd3\x08n\xae\x1d\\\xaf\x02=\xc7\xd9\x00\xbf\xdc\xd8\x04\xf8\x1as\x80kJH\xae\x1bt\xfe\x16\xaca\x81\xfds\x8d\x80\xfc\x1c@N\x0c\x08:z\x81\x01\x89\x9e\xd1Gfi\xd3\xa0\x01!H\x82P\x19\x106\xd4\xbb\x92\x00\xd1kjb\x9b\xacU\xab\r\xddm\r\xa1\x06\x9c\x96TL}\x00L\x84\xc0\xd0\xe1\x1a\x92\xcc\x17,\x9a\xe2D\x16\xed0\xcdfLC\x0b\xfdcY\x84l\x0et\x8aQ\xe7E\xd5N\xf0\xab0\xcb\xb1IA\x0b\x84\xf4\xbdW\x00\xdb\x15\x8f\xc7\t\xafH\xaejy\x00\r\x11F\xd7x\xad\xc3%\x82\x9d\x1aU[a|\xa4\xe0p"z2\x94\xe7\xd9\xc6\x9f\x98\x1e\x12\xec\xe7\x8d\x80|h\xbc\xbdA\xba\x1d\xe7\xae\x98?\xd0\x0e\x9bo\xd0\xd1hX\x0c\x08\xe8\x17\xees >\xe0S^\xa6z\xb1\x06\x1b]@\x8c\xd0\xd4\xca\xa1\xec<\x03\x88L\xbc\xd8\xc4rP\x1e\xad\xd7\xea\x83{\xc5*m\xddB\xc2\x88\xc9w\xdfb\x05=XY\xddz\xa5\xd8\xbbF\xab<)\x18\x15\xabW\xf3\xdb\xce!\x8d\x18\x92Wz\xbd\xf6\x8f~sA`\x81z\xfa\x9a\xe8\t\'s\xd9\xf4\xad"\xa1\x0b\x01\xb1\xf6\x01;\xa6\x0fF\xbeT\xd0\t\x1b/KR\x92\xfd\xbeXL\x14~\xb2\xe1\xf6"\xb5MM\x8f\x1f\x02\xc4\xf4\xac\r\x06\xdf\xf8\xaf\xed\x90\xfeo\x01yk\x83t;\nj\xcd\xf6A@\xf6\xae\x81\xb1 \x08^\x05D\xaf\xe2\xac\xeb \r\xd3\xd1q\x85\x1d\xa89\x05\x13Y.<\xac\x99\x0bi(*\xc2\x1b6\xae\xc5.\xcd-4\xd0@D6\x01\x015Gc,dYc%7\xb3\xe9"\x03@X\xc7Z\xa3\x05\xd2C\xeb~\xa2\xddj-H\xe2\xa3R&7%\xe7\x06\xb7N\x1dL\xa4\xe5\xe3\x7fA\xaf\xc2\xbek\x88\x10}\xb6Ko\x06\'\xe9\x90\xfc\xe0\xa4\x1d\xabai@\x0e\x1f\x04\xe4\xf1\x93_\xdb!\xfd\x1f\x03\xf2\xc6\x06\xe9\xb0\xfa\x97\xe5\xf1\xee\xdaa\x7f\x04\x90\xdb`\x00\x01\x11B\xf6\xe9\xab\x80\xc8\x04\xa7*V\xb4&\t\xc2z\x16\xaaX\x04\x88H2?p\xe7lmVvL\x11\xcf\xa0w3\xb4on\xa1[\xbb\xcaC9\x90\x99\x83g\xa9\xd6\xb0R\xf0\xa1\xd2\x96E\x8e\xb2\x80s\tt,)\xd7h\x01\x8f\x19\xe21n\xf110!\x95\xca\xbd\xc0$\x04\xde\x0bJ-\xd1\x80\xc0\xd8\xed\xb2aY\xfc]\xdb\\\x1aK\xf8iR\x18\x0f\x16\xf9\x8c9\xec\x83\xc1se\xd3\xb5\x84\x03d\xfe\x1b@x6\\\xc7\xa2\x98o\xe6\xc6\x7fm\x87\xf4\x7f\r\xc8\xdb\x1a\xa4C\xef\xb9\xb3\xd7\x15\xfb\x83\x80T\x0e\x90D\xfcY\xc5\x02@\xa4\xf4$\x88\xc1\xa3\xe9\x06\x02\x04Wz\xeb\xa85F\x00;\x93\x942E\xdc\x83\x86j\xa8h\xd1WD\xc4\x93\x1a\x12\xb3z\xc1\x0b,$\x03\xa2go\xed\xc5\xb1\x01\x10\x01\x80\xa0\xad@\xf9\xc0\x16\x10\xa5\xa5GZ\x85\x8d\x99\xbd\xe6\xb4\\b\xb7RY(\xf2\xd0\xd3\x00\xca\x16^\x13\rB\xb3\xfc\xcd\x0ez\xabAM=\tg+\x0b\xe3\xe4u\x03\xab`\xe4$@\x8a\xc2\n\x90\x84\xbbA\x7f\x14\x10\x9e\r\x8d\xbc\x81\xc8\xf0$\xc8\xd7uH\xff\xf7\x80\xbc\xa5A\xfa\xfd\xde\x82n\x15v/}y\xcf\x08\xbc\xbcF\x84d\x7f\x02$\x15\x06\x10\x8e\xa3\x9bT\xf8\x8eU,\x00D\x1au\x85C\x11\x0c\x08\xf2a\xfa\x15\xac\x9b\x9a\xd3l\xcd\x92\x94E\x0e\x1c\x08C\x88\xf8\x1f\x12\x89\x05\xa5\x83\x14\x81\x1f\x99\x9e\xa7\x88\x03""\xbc\x88J\x92\xe4\x16@KI\xcf\xffm\xefPD\xc4\x0b\xa3\xe0\x04G\t"H\xc1Zu\x0f\x81\xc2\'M\nJ\x96H\xa4\x11\\! \xec"&\x90\x85\x07\x08v*|\xf7\xad2R\x81fC)\xb1\x87\xa5\x05\xe4+;\xa4\xff{@\xfe\xd0 \x9d\xaf\nN\x92\xe2\xef\x00q^^+B2\xab\xd3<\x96 )J\x10\xae\xb4I\xa6\x88Q\xb1`\x19\xa7\x1dI\xa1\x9f\x16\xd5+E\xf2\xa3v\x90\x84\xc6\x08\xaa^U\x8a\x81?M\x04\xcevd#\xa3L{\x04D\x04o\x0b\x9f\xcf@\xb2\xe0\x8b\x89\x12\xd4\xb5\xf4D\xd73\xb8\xc6C\x0c\xfc\x7f`T\xecS\x0c\x88!\xc4\x88:\x1f\x10lx\xdd\x05\xcd\x9f\x11\x90\x0ej\x93\x12 \x19+\xa7+@L\xad\x18\x99z\x80\xa0\x9f\xf7\x03\x80\x90\xdb\x91f\xc3\xb9\xd4\x93\xe3\x1cJ\x90\xaf\xea\x90\xfe\xaf\x01\xf9c\x83t\xfeA#\xff\xde";y\x80X+\xe4\xcf*VJiyF\xc7\x1a\x96\x80d.\xc8\xe7\xec\x0f\xde\xa9J\xa5\xa7\xbd\xaeh\xeb\x96\x1b\x02\x92G0v-\xddF\x14\xcd\x08\x03"\xa4\xf7\xb4\x01\x84b}\xd4\x18\x91\xa6+\xc4\xdd\xb3\xf6\r\xfd=\xb84\x9c\n\x9c\t\x19\xda"\x00H\xb2\x93\x0e\x10\xdbG\x04\xaa\x9f\xd4`\x850 .\x8e\x9ey\x89l\x19\xd9\xecA\x9f\xe0T\\>\xbcv\xda\xd9\xa0\x818\xb0\xd1q\xff\xea\x0e\xe9\xff\x1a\x90?6H\xb76\xc8\t\xbabKn\x87\xfd\xa1q\x10\xa9[\xd90X\xf8G@`\xfe\xa5\xa6\xed\x14!\x82z\x16\xabX\x92$\xc82\xce\x07\xe6\xb2\xda\xa8\r\xe27\x80\x1e\xec\xa4\xcd\x93\x14\xf9\xc8Ht\x18B\x00\x90T\xac\x86~qBd0H\x92\xbb\x8d\xc2\x16\x8d\xce\xf6\xbfuH\xd0\x91\xab\xb0\xb1\x01\x99\xea\x0c\xb5\xb1E\xf4i\x82\x86\xc5\x19\xcb~\x93[,\x0f\xa4m\x1f\x00\xc4\x84\xdf3?\xc53w\x8f\xc3>\xda\x1fl\x12b\x97E\x9c\r\xa3\xbc\\\xf5\xdc/}/\xd6WuH\xff\xd7q\x90?6H7\xda\xe8\xa1.fZN\xb0\x1d\xf6G\xc6\xec\xd9\xe8):Q=\xf5\xca\x8b&\xb8a\x00\x91Y\xe9\xb7\x92\xaa\xeb\x12\xa6AJ\x80\xac\xbd\xad\xb9W\xff\x10\xab5P\x03\x10X\xee\x0b\n\xd7\x05}iT\x92P\xfa\x06iW\x84\t\xa5\xee.\x0747\xd12\xc4\x974\x92\xb6F\xa5j\xd1\x7f\x1d\xea\xcbgf\xb3c\x8a\xc1I\'\xcd\xea\x96dH\x86\xa9#\x94R\x03\x92)\xc5\xca\xa2\xddr P\xd9\x1b\x8dt\x92!\xc5\x834OO\xc1\xf2\xf2y?\x16\x071\xb3a.\xb0%:\xdd\xf8\xaf\xed\x90\xfe\x9c\x91t\x1a\x93\x89\x13\xa6\xfc!\x82,\xaaW\x00)\xba\xa6\xb6\xb5n(\xf2,C\t\xb2\xc8\x1a1\xc5\xe2\xa0\x1dr\x12\x8eT\xaa6\xec\xdc\xd4*\x88\xfd\t\xb9\x94\x15\xda\xda]\xf31\xd4\x89A\x03?S|;I\x95\xef\x0c\xd0\x07\xa8\xf2\xe5\x81!\xcb\x1f\xed"j`\xc5\x84\x90\xb7\x18wg\xe9\x0b\xb2\r\x08\x15\x98\xd3F\x88\xc0\xe5\x00\x12\xb2$\xf8y\xe5Vz\xa7X\x00\xb2\x7f\xc6\xa9\xf4\x94\x80\xdcZ\x0b\x88\x15!\xd9\xdb\x00\xc9\xe6i\xe15\x9d\n\x8a6n\x00B[\xc0\xa1\x1f\x88\x9d,\xa9\xdb\xe3N\x19J\x95\xebo\xd6\x12!"[\x01"\xa7P\xc7\xc2d\xf7!M\x98\x8f\xd4tg\x07>\x8c\xbf\x8ce\x07\x98H\xbbdc\x88\x9c\xb5=\x8c\xaa\xdbX>\xa5\x1b\x1b@\x9a%\x1f8\n\x94 \x12a\xda\x14!\x94\xc9\x15r\x99\xa6S\x04\xe4\x87\x8c\xabr\x80\x00\x1d\xa1\x08y\x0c\x88\x80R>\x8d\xdb\x11\x85\x99Hh\x83,\x00\x91\xc6\x81E\x85Ex\x0bajs\xdb)P\x8d\x95\x1d\x12Q\xb5\xbe\xdd\x0c2D\xae\xcc\x8d\xb6\xc29\xcdj\x12\xbe\xf7ZZ\xbd+eD\xc0\x8b\xa0*\xbf\x01\xae\xb2xx=\xdeh\xc2BYRU\x99\x1e\xa2LHFI\x99pM\xb8\xad\x8fe\xa3s5^X\x82H\x974\xb6\x0c\x88\xe0\x1e\x91\x85\xbc\xe4\x84\xf7\x08\xc8\xf7\x1f\x97\x8cS\x15\x19\x90\xd4\x03\xe4A\xc2;"\x80\xc9\xadv\x86\xda\xb1#?X A\xa4\x05D\xe5\x84\x87\xb0\xb5E\xd1\xc5C\xee*\xda\x9c^\xdb\xd6\x98L\xc8J\xa1J\xb8r\x8f\x1b\x95\xda\xa5Y\xf8*\xf8s\x85\x9f\'Y\t\xae\xe0\x95\n\xef\xd8\x19O]\xdc\xdcbkc{q\x7f\xb0ADJ\xf5\xdf9\xab&lF\xe8\x01\xc2"\xc4\xc3#\xdbT\xb0l $\x02\xf2\x03\x86\t\x83\xa4\x1b\x84<\xf0fQ\xb0\xa4\x10\xbb\xad\x91\xca\x00\x10!M\x80\x10\xd3\xd9S\x83\x07\x80Q\x9b\xa2l%\x16\x99FD\xd0l0\x12\xa4\xaerKHj\x95\xa7d\xd7N\xbd#R\xf4C\x05\x9e\xa4\x15\x1f\xb2\xa9\x9d\x00\xc9R\xb3\xcf\x89\x8b\x97\xd8m\xe6\xb8M\x16\x11\x91\x1e!\xb9\x05\x04U\xac\xa4l\x1e\x8c,\x04D\xf2&+GI\xb6\xb4\xd0\xf1b\xabk\x04\xe4g\x0c\x1b\x06a\x85\x85\xb0|\xaf+{\x0b\xfa\x19\x186(D\x1c!U%\x93\xb5S7\xd9\xe5}\xc7\x07\x17\xfd~\xce\xb7\xf9\x80\xa6W55N\xaf3S\x85\x14\xd0\x04.Kl=U\x978\x97\xb1\x97\x1c\xfc\xd8\x11b%\x88\x04}l\xd1\xdd l\xf3\x9cz*\x964\x8acA\x92\x13M\x10\xa3`\xa5\xfeu\xbaD@~\xc68\xf8|\xa0\xf8\x10@\xc9\x1b\x00\xc1\xd4_\x9c\x14//6\x8d\xd6\x04\xb7\x13?\xb56\xc7\xb2T\xb9\xb0\xe2\x036Mx\xfd\x9f\xa8\x15\tVc\xc7\x95\xdc\x8fL\x80\xf5\x9d\xfa\x12\x84,\x87T\xc2\xe6oYB\xd2yb]]\x9em\x01\xfd\x0flwOAuHq\x7f`phn\x91\x90q]\xa3\x94]\xd1\xca%\xc7\x10 ;\xf9\x08\x90t\x07\xc8\nK\x87\t\xe2\x1b!\x82\x1b(iGs\xfa\xd7\x81\x90\x08\xc8\xbf\x1f\xb3\x07\x08\xcc\xc2\x04g\x97\xc8\x1em\xb8E\xe9\xb0\x08e\xbf\xbc\xf8\xab7&C\x11 \x08\x11\xd9\x1f\x99\xe5\x03\xa5G\xa9\xeaU\xd9\xf4\xb2`KDT^\xe8n#\xeea\x10Q\x059\x15\xb6~L\x95\xe4\xc9u+\x9c\xf8(\xcb\x05 Xu\xb7\xc8\xb8\xa2\t\xd4\xafR,Bh\xaf0\x02\x02V\xfa6!\xa5~\xb7\xa9\t\x14R6\xb1>C\n\xa3\x18\x19\x9a&\x0cH\x9a\xb8\x9c\x85S\x04\xe4g\x8c1\x90 \xa0`A\xcel*\xe4\xe3\xb1\x9a\xb1\x0c\x88\xf4U\x1c\xca\xc3%\x0b\x043e\x05ORJq\xaaq\xd3\x1dP\xe1\xf7U/3.\xd5K\xee\'\x14\x01\xc2\xb9\x83S_\x89\xa2j\x90i\x10(!\xc6Q\x06*\xd7\x0c\x8a\xcc\x0fi\n\'\xc2\xd1P\xc1\xe3z\xa45[@\x96\x10\x88\xf7\x93\xa1.\x19\x10\x08\xa5o\x01\x02\xed;\xe1\x80\x89\x08\xfc~\x04\x17\xe6S2\x1f\\\xe9\xeeo#\x85\x11\x90\x7f\x1f\x06\xe9}\tB\xca\x89|\x85\x10\xb1\x04\x04~\xef\xe5%\xec\xe9\x01\x7f\x05%\x8ctuE,\x1ff\x1bjQ\x96\xc1BN\xea\x8eO\x08\xb5>S\xa8\xf6a\x11EO\x87\x12~\xaa\xa2w\\\xa3`\x15.\x95\x05\xaa\xfc\x80\xef\xc0T\xf7R%a\x81\x9d\xb0j\xde#\x8b[\xc0\x88\x10\xaes\x9d\x13\xdf\x04H\x1a\xf4y\xf6\x05\x08V!&\xbf\x9e\xf1i\x04EN\xb0\xf5JjM\xbc\xa7\x8e\x14>% \xd5\x02\x10\x98\x87\xb0\xb3U\x88\x87eM\x1eI\x10\x1f\x11\xb4\x0b\xc8\xb7\x93C\x19^\xac^\xc2|\xd0F;^\xc6\xb9S\x1bj]\xb0\x98gl\x87\xc0\xe2O)S\x92\x94\xac4\x15\xe9\xd2\x14_\xe5,\x9aj\xa4\xd2e\xb5d\xec[\xcb\x98L\xd2\xaa\x8c\x9e\xc5m\x0c\xa8W\x1b\x12"\xb8\xa7[NN)I\\&\xbbr\xd8\x00$\xd9\x99\xb3\xf5\xfc\xe2\x88Ha\xdd\x15\t\xd7\x97\xf4\x11y\xceH\xe13\x02\xe2j\xfeX\x19\x80jK\x18P\x7f\x0c\x08\xce\xd0\xc0\x06\xb1K9\xda\xe8\x90\xf4W@\xb8\x8d\xf9(\xb8\xff`\xcd3U9\x01\x82\x8e\xa5\x1a\xa2jT\t\x08\x8b\x83@\x87Lt>\xa7L\xc8V\xaa\xa2\x08u0\xd8\x92R\x9a\xc4\xaf\n\xc3\xa5R\x16\x14\xae\xe4NU\x15X\xcb\xd2\xda\x99\x11!\x19\x01\x82\x88\xec\x92fj\xab\xb6\xa9\x9a\x8a\x1a\xe5\xd4M\xdf\xa7;\x92jI(o\xd9\x8d\x05\xbf-\xc8s\xbe\x06\xa4\xbbE@~H\x18\xc4\xdc\xb2\xd4\xcc\xf8T\xdb\xbfb\xadd\x89M\t\xa2_\xba\x01\x08\x88!\x8a\x10RVl\x8aV\x80\xe4\xc6U\xa8\xdc\x94\x1c\x05\xa1\x86\xe6\xd4\x17\x01\xf6_\xb0\xc1\x9c*\xd3\x8fJ\xa1\x08I7D\xc8\x16\x96$@J\x06\xa4.\xf9\xc8Y\xc1u\xb3\xc9.\x87w\x80\x9f\x15\xf2\x82\x8c\x14\x92,\xf5\x84\xb7\xa4\xb3\xca\x94r#\x87]ROC\xdb\xb4\x15\xb5\x9f\xaa\xfa\xb1Kv\xfc\x96\x12\xb1\xca{\xe6R(\xec\x16\\\xf0aKcE@~@\x18$\xf1%\x08\xed\xcf\x13Y\xb9&\xc4\xe8\xfd"T\xb1d!7\x00I\x82\x92m\xec\xc0"+\xd9\t\x10\xd2v\xea\x9a\xe5\x08\xf6\xb5\x05\x11\x82\xf2F\x9aV\x80P\r$\x15\xbc\x90\xbf"@R\xa6\x08\xa2\x0c\x05u\xd1\xad\xa0\t\x8e\xfeS\xe6\xc8F\x82\x18\x17\x9a\xaa\xc9j\xa7\xba<|`0\xd4Kn\xad\xaeO\x8f\xd56(\x0b!\xbb\xe1\x7f\x1d6\x90j\x87i\xaa!\xa6Coh\x03\x10\xb3\xd3\xd1\xbc\xe9% \xc55\x02\xf2\x13\xc61\r\x01\xe1\x10\x87\xc0\x9d\xdcB1\xb5\x06z\x89&2\xda \xb0\x84\xb3\xb5\xcc\xb4Xk )\x8c\x04\x81r Aq\xf9\x07\xfa\x15\x8f\x1d\xf6\xca"@\n\xac\xfc\x9b\xf1\x91\xd1}\x16\x02R\xa3;\xad\xa6-\xeel\x86\x80\x00BB\xf2LH\xf7w!\xb7&\xab`O\xc88Mc\x03\xeeha\xa2G\xdb.\r\xc3\x87{\x7f\x0e\x10y\x89\x80\xfc\x84\xb1OC\x15\x8bTh\xfd\x15\xfa\xd8&\xb6\x82\xa6\x95\x1e\x1b\x80l\xaaX\x89W\x80\x87\x04\x881@\xd8\xd3Z\xd6\xac\xf0\x94\xce\n\xa9\xb0\x0b:\xaf\xe4\x89\xa0\xb6\xcd\xd0w\xc6\x00"\x1e!\x92\xda\x1d\x1e\xa9\xe9\xfd\xa1\t\x81\xc6&\x89S\xedj>0\xbb\x96\t\x13\xc5\xe5\x0fq{-\x87C\xa8)5&\xb0\x8b\x00N\x16\x84z\xe6c\xbee\xea\x82G+\xe1\xb1\xe4C,\xdcX\xcf\x18)|B@n\xe3\x06 P`\xc0\x10"|\xe3#\xa3\x17\xa4o\x00\x04\\a.\x9d\t-t\xab`)\xea\xfc\xa7\x14\xcfT\x173\xa4\x9f\x18;\x1d]\xb5\xa61\xd3\xab\x12\xc4\x93/P\xa6\xd7\xe4~)\x14 "\xb3\n\x16\xe4\x98\x94\xb5s\x11\xe0\x07=\xcb\x05\x84d\xe2\xac\x10\xac\x04/\xd3$\xf8\xebI\xf2\xf2\xb2\xa3\x9et\xde\xb3\xdb\x92\x16=\xe6\xa9\xff&\x9d5(\xb8\xf9\x00\x00 \x00IDAT\x04\x11\xa7\x08\xc8O\x00\xa4\x15\xe9J\xc3\x82,>!2lp\x1e\x18"\xe6q\xfa\'@R?\x99\x97\x05HV\x18\x17\x16e)\x96\xd6\xf2\xe0\xf5\\\x99\xb86\xcdSH~7\x80,t\xac\xf45B\xb8Y\x08\x96\x02\xc5#g\\\xdfP\x8b\xa7\x9aXd\xb3\x83\x1f)\xd3\x82\xb0\xb0\x11\xf5\x14\xfa\xeab&V\xb6\x00D\x1f\x1d\xcf6|.\xd9\xe6\x03=\x1e\xd6\x15\xbd\x08\x84\x1c" ?\xc1\xcb\xab\x16\x81t\x06D\xeb\xfd"o\xbb\xc2\x12\x12\x98#&S\xc9|\xff\xf2\xe2\x05\x91\xf9y\x8f\x10S\n\xdd\x1a\x02\xc6B\xc7x\x83\x85D)\xb3\x92\x93\x15\x92\xa4\xca\x00\x92y\x8e\xd2te\xa9[\xd5\x8b\x04\x0866\xc0f\x89P\xf5}\'\xe8\xc0\xe8\xb9%\x89aL\x8f\x9a\xa3/\xa6\xafsid\x97\xfe\x13\xd8B\x91\xad\xf40\xcfPK\x10\xf3\xbdm\xa2%\xb6\xcc\x8f\x04u1WHb\x01\xc8\x1c\x01\xf9\x01\xc3\xec\x061\x80ps\x18\x98\xb0R\xe6m_m\x9a\xeaf\x7f\xb9\x89d\xbc\xbc\xf0\x847\xc9\xb0\x85\x14\xb6!\x0e\x99\xe8\xd2$\x99\xf3\xda\x8db\x84\xfe\x84\x1fJGO/\x12\x02jL\xc6\x80\x94\xa1\x8e\xb5R\xb3\x16\x1a\x96\xcc\x19\x10\xec\x7fHd*\xfd\xe6J\x15\x1c\xcc\xa4\x9cP\x0b\xf3\xda8\xaeP\xc7\x12X\xb4=+\xa8\x94w8\xf5I^\x9a&:\x99,\xeaFm\x99\xe7\x90N\x99\n/\xd8\x1f\xeaXO\xb8e\xea\t\x019\x8b0N\xc8|@\r\xf7:\xd32dh\xe5f@D\xb8N\x1a\x12U,\xb9\x8cq\x0b+T\x8c\x86e[\xb0\xa1\xe7\n\\W\x95\x9d\xac\xa5\x91!6y\x10\xb7\x1dn\x03BI\'\xe9\x03@\xa0"\x17\x01L[\x08\xd9\xf6\xd1r\xa22\xbe+\x8f\x14z7\x14\x08QN\x84\xa4\xa6y(\x98\xe9e\x90\xa8\xa8\x97\x03U\x07\xcft\xe5"L\x08BG\x14%\xf2\x81\xd1\x90\r7\x96\xa8# ?\xc1\xcb\xbb\x0e\x83d\xdc\xe4\xa0\xa9\xf2L\x132\xe4k\x15B\x84\x1a\xd7:\x0e"\xb9\xb4\x88\xb4\x1a\x1668+\x8c\x86\xa5j\xe5\x0b\rZ\xcc=+\x84bv\t\x18\xcbP\xdd\xb6\x08\x8c\x90\xb5++4\xa2\x05\'\x10C"\xb0\xd5\xb0j\x8c\xb7\xf8[PJ\xe3Z\xe6\xdc\xc92\xd0\xb1\xa88\xbdU#Mb\x0b\x9c;,\x07<\xe9\x03\x0f\x9f\xf5b\xa1\xf8\xd0"X\x80^\xe9\xf2\xc5\xc2P\xbax\xc2\x1d!O\x08\xc8~\xd3\x89\xa5\xd7R\rH\xdfjC\xb5\x1a\xc66$DX\x19"\xcd\xbe\x90\x8dT\x13\xc1\xa9&\xd8\x13\n\xfa2q+\xd0\x9aCs\xcaNP0E\x82\x04t4:8\xdfD\x1b\xd6\xd8X@&>!6`\x98n\x08\x10\xaa0\x82^(\xaba\xd5F>\xe9\xf3\xb2)\x92\x8ds\x9e\xa9\xb2\x0e\xfdX;iv\x15J\xb1\xc8#0\x16\xd7\xc3\x01\xe2\xa3lJ(W\x84*\x98\xdc\x12!\xe93\xfay\x9f\x10\x90)u\x1bn\x85\x95 \n\x15\x88\xbe\xef\xab,S\xfd48[]\n\xff\x13\x7f\xd5*\x96\x14\xab\xfa<\xb8\xbcZ@\x8c\x8f\x17\xe5E\xe3\x19\x02\xb5\xd1\xb4L\xf2\xa0rV:\xbb[!\xaf)]\xe8X6\xba 8Tm\xf8\xc0\xbc\x12"$\xc3\xef\n\xb0u(/xq\xbc\xaa\xf6\x82\x95\x8a\x11!?V", r\xa9a\xc2\xd9\x1a\xb77\x96\x03\xf6\x8a\xd0\x93\xf8\xc8\xa1B\x04\xd4\xa0/\x19\x10\xb9\x05\xc8)\x02\xf2\xfd\xbd\xbc\xbd\xb7!\xdd\x02\x02\xeb<\x01\xd2\xb7\xb96\xd5\xc7\xa9\x13\x8f\x12\xe0Q\x90\x84\x1b\xa6\xdc\xd6\x10\x04\x04\xd3\xd71\x8a\x8e\xb60\xe92\xb4\x82\xd7\xe5r\xcb\x14y`\x951\x96\x85\x01D\xa6\x0b+\xdd\xec\xfc\x08|X\xdc\x8aTr\x97\x9e\x8c\x9c\xbceY/6g5\x8b\x1dSx`\xf6c\x19G/iX2sK\x02\xbb\xf3P^:s#l\xd4\x80\xdaUK\xfd\xb2P*\x11!b\xa5c\xe9w}\x8c\x80\xfc\x18/\xaf\xef\xe4\xc5\x19\xc5\x12\x04\xda(i!2\xccs\xbb\xa8\x07$\x1f\xd9 \xd2\xdf9%\xd9\x04I2\xa3_\xd1z]\x87SV\xb9y[\xda\x1a\x0e\tu+/m\xe5\xce% "]\x9a \x06\x10\xde\xc4(, \xe89\xc3\xd3Z B._\xfd\x83\x92\x83!&H\x99X@V\xeb\x81S\xb1\xc4\x86oW+\xa5}%\xb5\xc4\xc4\xb3\t\x00\x11\x01 O\xb8#\xe4\xf9\x00\tj\xfe\xb0\x00\x81\xde\x1bX&\x8d[\xa3\xf5z\x9e\xd4\x93FD&\x9e\xcb\xd7\xdf\xb0\x84JG @l.<\xf4\\\xa7\xb8\x02\xe7\tz\x8b\xb8"3\xa0i\x16b\x04K)P\xb6I\xca\xad5\xa8:\xcf\xd2\xd1\x9b.\xf3LR\x06\x84\xfd\xbc)u\x14e\t\x82\x19\xea\x8e\x8d\xe0\xb0\xe4\xc2\xa2\tm\xactSaQ,\x935\x1f\xd8 \x98\xb4\x9b\xb5\xb0\xa4\x08\x91CF<\xda[\xd4X}\xcb\x08\x19# \xdf~\x9c\xcc\xc6\xd5\xc0\x04\xf1\x01\x19\xa7qhE\x96\xf7\xd3<\xa1\x14Y\x85E0\x92.\xb7\x13\x08\xb1)\x94\x07\x08\xcd\xfff!9|\x15\x8b\xa4\x8b\xf5\xf3\x06\xe5\xabBG\xafo\xaf\x07\xca\x0b\x02\x92\x87\x80\xe0\x9e\xac\xd2 \xd2\x18L\x1a\x03\nI\x19\xf4\xf3fF\x82d\xdc\xdcyy\xc2[\x80\xe06x\x91u\xd3\x08\xd6GVa{8S\x11bK\xc7\xd2o\xfa\xf9v\x84<\x1f \xc7u\xa2\t\xe9\xecP"\xad\xa7n\x95\xd34\r\x15#\xd2a\x1fJ\xafA\x87\xe0\xd0\x99\x0c\xcd\x0f\xb7\xb9DR#t\x89\xd8\x91B\xc3\x89P5N\xd7\xa6\xb1\x9c(/*\x12\x02\x92mH\x10\x17Q\x0f5,\xca\x1b\x04@\n\x02\x84-\x1e\x03\xa3\x11$\x06I\x96$\x141\\\x02Bf\xc5\xc2\x87\xb7\x02\x04W\x99T6\xc34\xf5J\xbf\xa2\x02\xeb\x8d\x01\xe1F?\x1b:\x96x\xbe\xd2X\xcf\x07\x08\xb7>H\xfd\t\xcd\x80\x18\t\x02\x80\xcc\xd3\x90\x8bL\xb5\xe3<\x0f\x8d\\0\xc2~\x1d\x7f\x0fl\x9ar\xa1\x85\x8c%\xc8NRGK\'(\x1a\x9c\x9b\xc1lm\x82J\xde\xd8\x1d\xdd\xbd\xe8?\xf1\xf2\xb6V\x82X\x9b\xc1\x98 \xad\xd3\xb0f\x1aZ\xd1\x12R[\xa1\xfa\xa9\xa1\xc5\xce\xcb\xc6z\x81)\xe3Vt=5\x15\x16[\'O(\x02"p\x9e\x92FC\xb3\x94\x94\x1d\xce\xd9\xe0Y\x8a\xb40 \xa8\xe8\xa4\xca\x84\xb3\x1fJ\x90\x00\x15\x06\x84\xca~\x96T\xa7\x91\xf2f\xacv\x85<\xd2\x11\x1b\x92-\r\x06I\x1a\xda\x16\xa2\x01I- \xec\x99*(]\xc4(G\x90\xach}\xb5E\xdd\xd3\xa2\x91g)\xa4\xe6L\xd8L\x17\xcb\x0b\x93q\xb3\x0e\x15\x9aE\xe9\xfd~\xde\xdb\xa1)\xeay\xa9\x99A;t\xd7\xfb\xe3+\xfb\xa5\x7f. o\xeb\x8en_\xf4\x9fxy\xbd\x92&~\x1c\xbd\xb6N^\x92 L\xc8<\xb6Y\x9a\xca\xbc\xc2^\x98\x1d\xf4\'\xa7\x9b\xfe\xf2b54\x0c\xcb\x95\\\x88\x04\xff^jw\xb16F\xb5a\xc3\xb8\xe1)\x1b\x02\xc3\x80\xa4k@6\xact\x11\x00\x928@@\x10" \x12\xd3f\x88\x8a\x86%\x86a\xd2\x10\xe3T;\x07\x08\x97\x8e\xc3\xd4}\xdcpU\x98\xac*\x8e\x83h\xe0\x1bvb@O\x9e4\xab\x07\xb8V\xa3\xed\xbf\x8e\x7f\xb9,|\t"\x02\t\xf2\xee\x84w\xb8\xf7\xd0\x87p5u\x02@\xbe\xae_\xfa\'\x03\xf2\xb6\xee\xe8\xf8"j\x1b\xa4?N\xf2|?\x96\x1fm\x83\xed\xe7\xf2.\x9dX\x08\x88/@phEBbA\x06e\xe6\x19\x98\xa1//YQ\x98\xfd\x82\x05\xa9\xed! IQz3\x11^\xd6\xac\xcaA\xbbnU\xf0G(\xa9\x16\xf7d\xf0\xee\x8aG"D\x88P\xc5\xe2j\\\xd0\x8b\x81\x94\xbb\xa61\xf8\x19&\xc2\xc36\xb5\r\\\x9a#\xefR\xe5$\x085\x9e\xc6\x13\x84s|yq\xad\x10\x1a-9\xc0\xcf\x9c)-Gf\xb0\xd6\xa6q\xb4\x804\xac-.\x001\xb2\xf7\xdd\t\xef\x85d\xad\xcco\x1b%\xa9\x99\xe5el/v)\xfd\xa2~\xe9\x9f\r\xc8\xdb\xba\xa3\xeb\x17q\xf3\xeba\xb8OZ\xd0\xe8/\x1fl\x83}r\x95\xdd\xc5\x1a\x90a\x03\x10`\xa4UR\xa4^\xc27\x00B\xf5\xcc\x9d\xd5j\xea\x85b\xbfh\x18\x99\xcb\xa1]O\xd2\xda\x9f\xac\x0e\x10\xda\xfa\x94[S\xf9\x15\x1d+p\x0fQ\xfc%/\xa8\x8ci\xe9\xa4\x86w\x98\x86}h\r\x99\xef\rC\xa2\xe7\xbf\xa4\xeaX\x99\x01\xc4\xae \xceH7\xbeg\x12\xa0"\x07\xd3\x0c/\xcd\x8c"d\xc4V\xbam\xf3(ThjB\x0e\xef\xbd_\xa3\x94\x03Pp\n\x1a\x0f\xd2\x97\xc3\x85D\xcbW\xf6K\xff|@\xde\xd2\x1d]\xbf\x88\x9b_\xef\x8b\x9b\xd6\x87n\xc5\xdeo\x83\xfd\xf2%\xc3\xbb\xfb\\\x9a\xca\x95?\xa4\tgmp\x83\x83\x0f\x8a\x9d\xc0\xa5\x99U\xe4k\x95l\xa2c\n\xc7\xab%\x1b<\x0b\x98\xc2\x9d\x1a\x10\x89M\r\xc2\xba\xec\xdb\x05D\x11\x92\x12c%%\xef\x98\xca\r\xf0|*.\xc1\xe5k\xae0\xda z:Hm\x9c\xda\xe6\xe7\x01\x034\x01\xbe\xb2_\xfa\xe7\x03\xf2\x96\xee\xe8\xfaE\xdc\xfc\xfa(\x8f\xf2\xa4?\x8e\xbe\xa6\xf95\xb7\xcfy\xc1\xa8X\x8e\xf1\xf3b\xa5R\xd2\xb1\xd8\xc6XO\xd3\x8d9[\x16\xd4\xed&s\x80@\xad\xae\x8d*+\xa6\xa4:[\xc2\xd0\x92A\xf0\x9e\xae<\xa3\xae\x1f\xf5\xe3\xe38;D\x1fS! E\xe2\x03B\xac\xbb\xba\xa2d\x83|\x15 Z\x104RN\x8b\xe6\xe7\x16\x10\xe9$\xc8\xd7\xf4K\xffl@\xde\xd4\x1d\x1d^\xc4\xcd\xafO\xdax\xbc\x17\xea\xe3]~\xc7\xb5\t\x92\xb1\x8d\xdem\x9a \xa0F\xa0%:r\xc3p\x0e\x17\xe3~\xee\xd2\xee\x97\xe5z\x1e\\}\x94:\x0b\xc8\xd0\n\xa8\x9bWF\xcd&HZX@\xb4\xed]J\xcf\xd2!\x9f\xb1\xe2\xc2V\xec\x80\x82\xae>\xd6\x7f\x06\xe5\xea0\xe11<\x94\xdf\x1f\xaa\r\xe4\x18\n\x92\xd2\xf0L\x9b\xa5\x18uj>\x886\x88\xe2T\xce\xa6#/\xdf\xa8\xf5*wqP\xc7\x82\xabc"!\xea\xb1\x95.\xb2\x8f\x18\x03\'\xa3At\xcb\x96\xe8\xa1\x96\xf1\x15\xfd\xd2?\x1b\x907uG\x87\x17q\xf3k-^\xe6\xfb\xac\xed\xb3\x0f\x9e\xb7_\xb1\xc1\x00R\xda(H\x8f\xf5\x9f\x18\x90=\x7f\x10!l\x87r\xa7>\xb2\xbb\x95kWh\x01\xe1f\x08T\x14\xfaU$\x16K:9\xa0\x12Q\x98-K\x82\xe3\x1b\xab\xcep\xa6\xb8\x90\xcd\xf8HM\xc2X\x96s\xbf\xb7b\xfb \x04\x88\xf7\x05\xcf\xa4\xe0\xf2\xa3\x05\xa5a\x19@\x88\x0fl\x8be\xf8\xe8\x86 N4/\xafNO\x7fR\xb1\x95.\xd7\x80\xbc;\x102\xc83:i\xf8\xfe{-\xd1C@\xbe\xaa_\xfag\xc7A\xde\xd2\x1d\x9d^D.\x89\xab\xd4\xa7\xac\x7ft\xfd\xe0y_\x95Xm\x06)M\x1c\xbd\xdb\xb8\xfbn\x8d4\xf2\xc3\xcc+[\x19\x847s\xa4.\x8ehu\xac\xc6\xef}\xf9:&$@\x12Y\x98\xa9/\x12\xe7Gx\xd8\xb7D\xb8 >\xa7\x9b$(BB\xb9\xd1\xbd\x8a&\xebvn\xa7,\xe7\xf9#\x1c\xdc]\xa4q\x80\xd0\x1ab\xae\xd1\x84\x84\x8c\x93\x8d\x84\x90\x1b\xcb\xcf6\t\xfc\xbc\xef\r\x84\xdc\xf6u\xd1\x1cn\xe6\xfe{-\xd1}@\xbe\xae_\xfa\xb3E\xd2\xbd\\\xde\xa5\x13\x0b3\xb1\xc2 \xc8r\x8d\xb4\x80\x98\x10\xc2\xa6\x08\x81\xe4%\xee\xde\xa4\x95\x92\xee\xb5)\xea\x06\xa6\x19\x82\x86\x95\xb9]z.R\xf3g@\xe8{\xa3c%e\xd3\x85hv\x0fIU$@\x12\xa7\x16Q\x96?)w&\xe3\x92\xff\x86%d\xf6/\x12\xeb\x9f\xc6\x8fU>\xdaU\xa8O\xe8\xd9\x12\xde\x9f\r\x10\xd7\xbfSx\x89&\xb5\x03dy\xef\x19\x10c\x818>\x0c J\x99\x9a\xb6\xa9k\xfc\xc4:V"\x9bnkfv\x16\x98\x0eeL\xe7\x0b\x10\x97\x0e\xf8g@\xa4\x99\x80\xce\x08\x11,B\xba\x87Ht\xe1#\x16 \xa2\xf02\xad\x84\xf0\x8c\x1f\x03HG6\x88\xaf\x86\x86&Zo\x1d\xbd\xc5\xf6\x9e\x90\xf4\xf9\x12\xde\x9f\r\x90\xe3\x1a\x90bi\xa3o\xc8\x8f-@j3{\xac\x8e\xb5\xf2ci%\x0b\xe6T\xb7Rt\xfcgp"\x17,@\xfc"\x9e\x7f\xd6\xb0\x1c!\xd6\xe1\x90g\xf4\x97\nX\xee\r\x88\x04\x8bk\xe7\xdcy|\xd6\xdc\x0b\xd7\xe9D\x14W15\xbd\xa8\xae\x84\xfd3\x9b\xa1\xa2\xd0\n!@\xe4\x86\x08\xd1_\xfa[\x04\xe4;\x8f\xbd\x8d\xe9zNZ\xd4\xb08\xcf\xe4\x91\x86\x85\x99&\x81\x86e\xaa\xdbR\x1f\x01\xc8\xbcp"\xc4\x98\xe9\x89\xc0U\xd7\x9f\x90\xcbG\x1d\x02$\x82e\x9c\xeb\xcd\xa7\xe2\xcd\x84\xd8\x12\xc3\x19\x8b\x90\xb4\xf6\xd0d"\x96\xa0"7VtY\x8d\xcdjX\x1e \x96\x90~)B\xa6ie\xa6\xbf"A\x9e.\xe1\xfd\xd9\x00\x99V\xc9\xee\x0cH\xdb?\x12 \x86\x8f\xa1\xf7MtS\x12D\xa1\xcb\x15\xad\x10?\xa8gE\x88l\x06#{\xb6t\xad\x8e\xf8 \xbf\xb0\x16 \xb9\xc7\x87x\x0b\x1f\xd2v\xc3\x95\xb6\xe6\x10:\xb2\x08\xcd\xde\x89\x8e\xce\x13$\x9d\x15+\x1c\x03I\x9d\x00qy&\xae}\x82#\xc4\xe5sZB\xc8\n\x19|@\xc2|E\x9f\x90gKx\x7f2@n\xbdX\xd8\xe8\x98\xe3WC&\xafQ\x1e\xfe\x0c\x88g\x82`n\x8f\x07S9\x82\x1a\xc6\x052\xc4\x1c\xd6\xda\x1d|\xf0\x8e=\xbc @\x02\x05+\x15\xb6v)\xd2\xc1\xe5\xe7\xf4Ej[\x06;\x88\x16\xb9L\x03\xb3)d\xb1\xedVx\x80\x1c" \xdfx\x9cB\'\x96tN\xac\xd6\x84\xd1\x03:\x0c \xbe\x89n\xcbwr\xbdD\xaa\xba[\x12 "]\xbaza\x13m\xe3\x08Y\x0c\x8f\x8f$\x90\t\xdd\xf5v\xaa\xa8\xa7ffv\xa9{\x83\x9f*\xb0\xe1\xb4:^\xce\x8d4\x1b~)\x08O\x82\xa1\xa6\xd9\xccG\x1a\xc8\xe41\x87nJ\xa3\x06riU\x0e\x12\xa6\xa9m\xbfS{F\x08\\\xa4\xb6\xef\xbcp\xfa\xbcE\x88\x05\xc4U\xe8\r\x00\x99# \xdf\xd9\xcb\x9bn\x01b\x9dX\xe3+ABg\xa27\xa6\xbc-\xad\xad\x9c\x16U\xa2\x8e%\xd2-B\x8af01\xb6\x90\x0e\xfdd\xc3Q\xf7\xa0\xa5\x99\x10\xe7\xdb\xedv\xc0f\x87\x19w\xd7\xa4\xd6\x87\x85\x19\x1c\xa1T*\xd7|\\\xae\xc7LzF\xbd%\xa4\xe0\xfc\xa9aI\':x\xbd#\xfbS\x99\x05\x88\xaa\xdd\x89\x96l\xa6\xb7A\xb00\xbcH> \x0b+]x\t\xef\xb7\x08\xc8\xf7\x1d\x87\r\tB\xa9X\x06\x907\x9a\xe8\x98h\xa2L\x03@.P(B\x11\x02m6\x88\x90$\xabzTs\xfa\xd1\x83\x03g\x1aG\xd0C>\xa4\x984\x1f\xb7\xeb\xfc\xea\xd8\xb3\x94;^/\xe7\xcbe\xc0\xc9\x98\xb1\x92\x95\xb2\x96\x95J\xd58}\xceC\xb3oh[\x17\xf1\x11\xe6\xcf\x13 \xcavL(\x1d \r\xbf\xefE\xc6\x81\xddW\xc8\xb1\xc2ra\x84x\x80\xb4\x11\x90\xef\xec\xe5\xb5a\x90eE\x13\x00\xe4A\x940\xccS\xf4lt\xe2\xa3V\xb5I\xacMWM\nv\xec\xedM\xf3\xaac\xf3\x98\xf7\xe5\xc1\xe6\xd5N\x19%\'\x11A\xcd\xc2\x1c\x04\xc8\xed\xadS\xe9v9\x9f/\xa7\xbc\xf0+\xd9\x19B\x10\x91\x80\x112\x83j\xff\xc8K>dQX\x01\xc2\xf5I]\xf7\x03\x0e\x16\xae\xa3\xe9\xa3\x9fm\xb2\xe1\xe8\xe5@\xc8%\x02\xf2\xad\xbd\xbc\xa9_\x9d\xc4\xe5\xba\xbf\x12F\xe7<\xa3\x00\x10k\xbcr\xafs\x93\xf2\xae\xf5w\x17\xc1H\xed<\xc5\xb5\xdcnc\xe2\xb0\x027\xf3\xb0|x\xa5\xb7\x0eZ|\xbc\x99\x8f\xfb\xedz\xd6\x84\xcc\xd0\x88\xd4\xc6)9i\x99Z\x0bfemw\xcc\xa2\xb9\xcex,\xf9\x08\x04\x08sQ\xda\x9cL_\x82\xf8"d\xb2VH\x98m\xb2\x91\x8e\x95~0\xe1=\x02\xf2\x8f\xbc\xbcU\x10\x06\xf13\x15_3A\x06\xeb\xe1_jX~\xe9\x03\x06$e9b81\x84\x90\x9b\xaa\xd0&C\xa5-\nE\xe9\xbf\xc8S\xf4b\xc46\x91\x97U,\xd3V\xa0\xe4\xe4\n\xcc\xc0\x95\t\x17b\'\x0c\xed<\xa5\xa9J\x86\xbc\x87Mb3\xb8l\x8b\xaa\xf3\xfb\xf8\x00\x11r:\x9d\x8fe\xe3u*1;\xe5\xddQ\xb8&\xa3;\xf4.I\xd7\x1bx\x13_\xc3\xb2\xa5\xe0\x95\x03\xc4\x16h\rV\x13O\x84\xd0\x96\x90\xb5\x08\xe1\x0b\x7f\x8c\x80|_/o\x16\xd8 \x92\xdd\x99\xcb(\xc8~\xbf_jX\xc1N\x10\xf2~\xfa]\xcd\x94\xa9S\x00\x7f\xba\x90I\xd02-\xf5\x11\xd9AG\xe5\x9d\x03\xc6\xd6z\xb0\x0e\xa8@\xb4\x089\x1e\x0e\xc7c\xdb\xf6\xe96"xt}l\xd7\x94y]\x97\xde\xf8\xb0L\x93\\\xa7b)\x15d,n\x03b\xad\xb5W6\xa6?]\x85\xf7\xe7\x02d\xfe# \x0b\x13ds\xaf\xads\xf2\xfa\x1a\x16\x01\x92\xd1$k\x8a$\xb5Z\x0b\xa7\x12\xda*\x9e\xbbGsT\xcf&\xa5\xfa3\xd8\x13\xd7\xf7\xce\xa2\xeb\xf9\xb0\xdf\x1f\x0fm?\xack\x03\x05\xed\xce\x1f\xd0\x91\x8a\x82\xe0\xceB@J\xf6\xd2-\x00\xe9\xb7C!\x9e\x8e\xb5\xbd\xadP\x1f\xa0\xbeF@\xbe\xab\x97w\xd8\x04d\xe9\xe4\xdd\x87*V\x18E\xe70z\x196\x194\xcbe\xae$\xc9\x8c\xae6\x06\x88\x10.E\x0b\x8e\xce\x93t\xa3\xda\x95\x9eKu\xddkc\xfbxz\xaf\x00A\x11\xa2M\x81\xc3\xbe\x1e&\xb91\xfdS\x07\xc8f\xa1\xadT\x96\xf8V\x05\xe6\x7fe\x99\x0f\x08.\x08*P\xb2\x169\xbd\x93/m\xb7\x01\x11\x16\x90\xe2\x12\x01\xf9\xc6^\xde4pb\x05Q\x10\xba\xdb\x9e~\xb5\x91fB\xcdnT ?\xb8/_\x06|\xd49\xbb\x90\x86\xcev\xf2\x08+\xb2\x9b\x8as\xd4i0\xe8\xe3&\xfb\xb6?\x9d\x8e\x87\xe3\xfb\x05\x88&\xe4|\xd0o\xf7\xb0o\x86\xb9L\x1fT\x99\xdbn\xcd\x0b\xa3\xac\xf9]\x81\x03\x9a6\x83\xf8n,<[0H*\x0f\x10\xa3c\xf1\x1e\xe5 \x1d\xabYZ\xe9\x0e\x90\xe7Jx\x7f*@.\xf9B\x808@\x86\xd0F\xdf\xef\x97\x80t\xfeV)k\xb4\xa2\x9bW\x19\'o\xa6\xb0\xd5+\xf4\x9b\xcdE\xc7+\xf9\xa2\x9d\x07T\xbd^\xb6\xc3a>\xf2\xb1\x1aN\'\xd0\x94.\x1fQ\xd3/\xa7y\x1c\xa6\xfd\xdc\xb4\xfb\xfeA1\xc6\x87\x804\n2\xe5\xe1\x91\xaa\x80uL\xf62F:\xdb\xe98*\xcf\xd1k\x08\x996t\xac\xfa\x81\x8e\x95~\xa0\xf2O\x04\xe4_\x8ds&\xd2t\xa9a\xa9\xda\xf4\x051&\x88\xd5\xb1&\xa3a-\xf7\x12\xd6\x8a\xbb7a\xb3e\xc5\x06iVT}_\x81\x1c\xa9\xeavj\x9a\xb91m\x05\x1f\x00\x12\xea:\xddTMZ|h>\xce\x1f2co\xe7\xe3\x0cg1\xb7\xd5<\xcb\xf4\xed\x80\xa4\xe5P\x0es\xa50{^\x9fQY\x10 \x14\x1d$\xc9\xc1\x1b(\x9b\x00\x90\xd1\x02\xc2\xfbn\xa9H/\',\xaa\xf2\x01 \x87\x08\xc8w\xf5\xf2n\x99 \xca\x0b\x13\xce\x0b\x1b\x84\xd6\xc4\xde\x16\x08\xa9)\xf7\x02\\\xbc\xe8\xd8\xa9\x10\x10R\xb0\xf4\xb2[\xb5\xd8f\x1d\xda\xf5M\x10\x95\x98\xad9\xf0\x00\x10\xd7\x94ST\xd3P\xed\x8fG}\xe0\xc3\xe9\xfa1?\xcf\xedt\x80\xe99L\xbd\x1a\xf6\x8dH\x971\x0e\x02\xc4\xe8u\xb6\xeb\xba\x1c\x86\xeax\xbbLM\t-\xd8\xf4{\xd7\xa8P\xba\xb0\xb2\x95)LGu[\x9e\xbe[\xb5RY[\xe9\x9b}B\x9e-\xe1\xfd\xa9\x00\xd9\x8b4\x90 \xec\xee\xa7\xdb\x1dhX\xee\x96\x0f\x81\x93\x17;+\x97\x08\x87o\x820 \xb0\xaf\xbd\xa9\xb4\x00i\xa7\xf3\xf5r\xda\xeby:\x08\xe3\xcd\x12! \xe1"^\x8cs\xdb\x1f\xb4\xf8\xd0\x87\xff(\x1f\xda\xc6:\xcd\xb8\xefc\x1c*-D\xaa\x05 (AR\xc7\x07\xbf\xb1n\xea{\x10Y\x97\xa9\xd5o\\\x13\x0f\x84,\x00)\x1d \xb5\x0f\x88\x1fN\xa7jr\x83\xcb6\xd92B\xf0\xcc\x9f*\xe1\xfd\xa9\x00\xb1\xb9\xbc\xcb\xce9\xddR\x80X\x13dXZ \x94\x06^\xba\x0e\x99N\xc1\xaa\x01\x90\xf1x\xea\xab\xf1|\x83\xec\x8fC_L\x06\x11\xbb\x8e\x13 \x81q\x9e\x8ds_\xcd\xa0]\xe9\xa3\x7f\xcc\x00a3D+YT\xde\xabW\xed<\x95\xbe\xf8H\r \x1e2Zz\xec\xc7vO>\xb3\xcb\xfe\xa0\xdfq\xa5\xc5`\xad\x8a\xc2\x98\xe9\xa6(p\x19\x8a\x90P\xc9\xf2\xfa 8@\xca-#\x04N\xbd\x8f\x80|W/\xef\x02\x10WS1\xc83\x99\xd7&z\xe3\x03\xa2\xb8\x86\xb4saQ{\'\xcdG\xdb\xeb\xd9v\x850\x06\x00r\xdcOu5\xcd\x83\xf4\x11\xf1\xed\x00\x9c:\n\xf0\x18\x0f\x07\xe6\xe3\xfc7a\x82\xcba\x1a\xa8~\xd1\xd0\xaav\x18\xcaP\x86\x90\x8ae\x9f(\xa7yl\xc7\x93Ik\xb9i3F\x1b0 B\xca"\xd8RX\xba2\xc4$C\xba\xed\xf2&\xc6dk\x9bG)\xef\xe9\xb3U\xfey*@*a\x13\x82, \x95g\xa3\xbb<\x93\xfd& \x14\x17P\xbe\x82U\x19\x05+\xcf\xb0\x13\xf2\x84\n\xd2\x15\xc6E\x8b\x90y\x1a\x94\x1a&=Q\xed\xd2\x1d\x1a\xca\xb2\x19\xa7\xbe\x1a\xf6\x80\xc7\xdf\xf3q\xbf\x9f\x81\x10:\x9f\xa1\xcd\xca\xae\xab\xe5\x03#=k\xe7\xfdP\r\x873\xf0q\x03<\xee\xd8\x9d\x05DH\xbb\xd2\xb1\xca\x10\x10\xbb\xc3dZ\xa5\x9bp,\xdd\xaa\x9ea\xb6\t\x00\x92\x9f# \xdf\xd6\xcb\x8b\x8e\x94\x00\x90ja\x82\x80\x17\x0b\x01q\xb9\x13\xeb\xcd\xe8\x06\x8f\xaa"EB\x03\xa2\x17l=3\x0e\x17\x9c\xe0\xc0\xc7\x05D\x88&\xa4W\xd0\xe1\xb0Qr9IeVwz\xa1\xaf\xa6\xc3\x81\xe4\xc7\xfe\xf0\xb7|\x90\x0c\x198\xf5r\xeckt\xd6\xda5\x9c\x8f\r\x07\x9e\xa6\xbem\xc7\xc3\xe9l\x00aO\xd8\xbe\x05@\xd0Gk\x82\x85\xa8c\xad\x01\xe9\x86~m\xa6[@\xd6\xc5\x7f, O\x95\xf0\xfeL\x80\x9c\x85\xe7\xe55Q\x10\x00$\xcc\xde^\x05Az\xc3\x07\xbawK\x0f\x10\x1bD\xcf2UA\x0f\xb2\xc9\x84\xf84\x1f\x00\xc8a\x8f)\xe0\xad\xca\x0bl\xb8\xecZ\x8eC\xac\xba\xd2\xa2H\x0b\x8f\xe3\x11\xf9\xd8\xebG\xa7\xbf\xd7>.\x87y\xb4%t\xe7\xb1\xafh3{F\x9d\xd42h_\xd8h6\xaav\x98\xf5\x91\r \x86\x90\xebq\xac5!M\xcd\xfb\xdeM\xafh\xabby\t\'a\x9d^\x97\xd1k\x00Q\x0f\x00y\xaa\x84\xf7g\x02\xe4H\xe9\xdc\x16\x10L\xa8\xd0*\xf7B\xc3\xf2\x9b\x82\xf8[\xa5(\x00B[P\x03>\n\xe3\xe2\xed\x87\xa3\xf5@\xdd\x18\x10Ss\x10\xeaqb=\x12\x06D\xca\xa2\xeaG\xa0\xc3\xf0q\xf8O\xf8\x809\xce\xc7\x84F7\xd8\xa8\xb7o\xab\xdc\xb6\x1a\x84h_\xdbOt\xe4\xd3I\xf3q\xf57\xf7\x9e\xf7=\x02\xc2"\xa4\xf4\xb6\x84\x19@\xca\xc6o\x16\x12\x96!\x9dlu,\xaf\x9b\xe7\x92\x90}\x04\xe4[\x8e\xc3B\x82\xb8LER\xa6\xc3\xb69\xab\x8a\xd5\xdeN\x90j%@\xca\x06\x04\xc8\xec\xe5\x88\xdc\x18\x10\x9e\xad\x831__^\xb4\x15\xdc\x0f\xe3\x0cD0\x1e8\x8e\x1f\x0c\x10n\xc4C\xf68Q9\xb9L\xa3\x87BQ?\xf7\xf2\x02\xcc\xec\x0f|d\'@\xfc_\x9e \xfb\xbf\xa9r\x8e\x16*\xbb\xab\xb0\xb4\xda\xa5\xd7\x0b\xc1\x07d\xb9\xefv;\x12"\xc4x\x8b\x80|K/\xaf\x1f\x06!@\x94\x01\xe4\xb1\x0f+\xe4\xa36\xc58U\xc0GQ5\xa1\x00ABN`\x84\xcc\xbcQ\xc2T#|yAm\xeap\x08\xf9\x80\x0c\xc5\xff\xce\xda:PW\x1b\x93\\f\x8e\xf6\xf2r4\x83\x05\xc8\xe9\xbc\xdc\x9au9tP \xaebWo\xa9jo\x0fe\xe9\xd5X\xec\xb8\xa1\xcaH\xf9X\x1c\x08!\x11\xd2\x86\x80\xc8\x10\x906\x02\xf2-\x9dX\xed\n\x90r\x0b\x10KH\x90\xe8\x1eh\x1a\x0b\x05Kj\x0b\x1d\x04\xc8~ab_I\xc7\x02@F\xbb\x87\xdb\x03\xe4\x80\x13\x95A9\xff\x97\xb3F\x1b\xdb\xc48\xc7u\xf8h\x1e G\xd6\xb0\x00\x90\x85\xfc\x99\xa1\xfcU[\x15>!f\x93qHH\xbf\xe87\x15\x00\xf2\xd8J\xaf\xae\x11\x90o8\xae\xd5\x16 \x9c\xcak\x15,k\x83\xd8\xbd\xb6\x8d\xb3@\x08\x90 \x04\x82\x1e\xac\x1c-\xf4q\x15\x03\xbf\x9d\x8f\x07\x16!V\x13Y\x00\xc2\xe3\xfc_\xcf\x99\xeb\xc9\x9c\x88w4\x0b\x08\x1f\x1b\xf8X%\xd6_\x0e\xda\x84\xe8(\x16b\xeb\xc7\xd5^\xbf9W\xdf\xc4\xe5\xf4N^\x11kpw\xbb>![~\xdeK\x04\xe4\xab\xc7\xcb7\x1ek@\xce\x9f\xb1\xa4^O\xe8\x1a\xdb\x9b\xc3\xa1\x8a\xf5}G\x04$\x02\xc2c\x0e\x019\x9d?K%\x07\x01f\x8f\x15\x01\x89\x80\x04\x80l{y\xd3\x85\x13\xcb&b=\xa8\xd6\xb0\xdaj\xcb\xe5~\\\x12V\x9e\x91\x052p\x8cpc\x9e^ `8\xf9\x81\x16\xb3\xa4\x1fO\xe7\xebgZ\xacP\xcc\xc1y\xc9B\xfb\xe3\xf1\x91\xc1\n\x01%+/\xac\xaf\x97K\xc8\x85\x19Y\xde\xbe\xa9U\xbeb\xf3\xb0O\x88\xbe\xfc\xf3[\xeeW\x04\xe4\x1f\x032\xbb\x1bd\xda?\xab\x15 \x86\x91\xb0\xa4{\x8d\x85lLJ\xab\xe7\xc12\x16\x88\x06d>\xbd\x92e\x08ey\xf6\xb3\x97\x0cI~\xab\xcf\xa5\xc30\x02\xfe\xe6\x95q\xfe\xda\x91!\xe1D_\x16vd\x15\xd4\x04\xa5V\x1e \xf5*c\xd1\x01\xe2\x82\xab\xaerC\x08H\xb6\xf6\xf3F@\xbe\x1e\x90\xc1\x03\xc4\x95\x8ckC\x1f\x96\x0b\xa3\xa3o\x96}X\xb81JA^\t\xd9\xac\xca\xf3`\xc9\x82\x04\xc8\x1f\xb3pq\xa6\x9eN\xe0[\xdd\xf2\x1e}6%X|\x11\xc6\x1bJn\x9d\xe7\xaen\xbb\xc6\x03d\x91\x92e\x8b,v^_.\xf6\xf3\xba\x94\xf7\xcd\xf2q\xe8\xe7\xbdF@\xbe\x1d \xe4\xc4J\x83\xcd \x0b@\x9c\x00YhXvg\xb6+\x86\xc3\x80\xe4\x10\x03\xc1\x18\xe1\xe9\x89\\3\xb7\xe3\xd8Boj\x95q\xabB.`o]Y\x81\xa7\xd7\xfa\xb0\xa7\xe9\xe1\xa6)\x19\x00\xb2.`\x1d\x01\xf9r@.\xb9\x07\x88|\x00\x88\xc9\xe4eM\xc1\x06A\x1a\xdb2\xc7z=\xe1\xdeC\x8a\x13Z \xc3pp\xf2Z@x\xa7\xd4\xa2\xda(.\xa1\xf4\xd8\xf4\x0c\x84 \xfa0\xecOOU.\x90\xad\x90\xbe\xc5R\'\xb9\xe4\x86oV\xcdD)\xba\xd1\xf5\xd6O\xc7\xea\xdd\xae\xc2l\x05\xc8>\x02\xf2\xed\x00\x99\x97\x80\xe0:\xd8yy&\xb3W0\x8e,\xcd\xd0\x02a\x1d\x83\x1e\x159\xf6\xd7\xcc`c\xeb0\x1d\x9f\xac\xfb\xb76\xd9\xc0\niZ\xac\x05\xc4"\xa4\xb4r\xd4k8\xc5\xc5\x1bF\xab`=\x00$\xccW\x9cn\x11\x90o\x06\x08\x94\x1d\rU,\xbf\x9e\x89I\xc3r\xfb\x1a\x96\x8d\xd1+\xd3\xd6\x96\xf4p4@\xf4_yR\x01\x02*\xe9\x08W\xa7V\xa8d\x15\xb4\xa9\xd0IR\x07\x88W\x85\xd4U\xc7\xb2\x80l\xa6c\x89ua\x93\x08\xc8\x97\x03\xd2\x87\x12\x844,\xcf\x87\x85Y\x8a\xbcq"\xd8JH\x02\xa4\xaa\x8c\x85NM\x9f\xad\x05\xf2\x9c\x02\xe4~\xbf\xee\x87\n\xf7\x85\x80\x92\x95\x17Fr,c!\xbdW\x85\x94\xe5\x87\xb1\xd2!i\xde6\x84FB\xac\x97\xa4\x8b\x80|;@Z\x07\xc8kN^/\x08\xc26z\xedw}V\x94m\x82u~\xd0\x02\xe9P\x80\xdc\x9e\x0f\x10-BZ\xadc\x81\x15B\x05\xc4\x16\x80\x98}Sa\x91\xc5\xc9\xef\xe6\xd9.\xdb <\xde\x11\x12\x01\xf9j@\xae\xd56 ~\xd7\x83\x85\x0f\xab\x0fk5\x94.T\x06\x1dm\xe5s\x0b\x10\xbd\xa4\xec\xb5\x96\x04\xbb\xd3q-0\xd1\x90\xe5\xde\xf4.hY\xc8\x91Bo\xdf\xad\xb2\xfbn}\x15k\xd5\x02!\x02\xf2m\x00\t\xf6\x82p\xdb\x83\xb5\x8d\x1e\n\x10\xb7\'\xdb\xb5|\x86Y\x93\xd709\x0eO)@\xee\xf7\xf3\xd4\xe9\x0b\x04\xe1t$$\xac\x02\xe4\xf7\x9b\x1aBBFo\'\x8d\xd7\x1a\xc2k\xa3\x1b\x01\xf9\xee\x80d> \x9e\x00\xd9\xef\xfd4\x93\xce\xfax\x1d \x96\x0fk\xa1\xcf\xc7\xcbS\xf2q\xbf\x1d\x06\x8e\x85\xd8\x9e:n\xd3\x94\nEH\x98n\xe2\x01\xb2HX\x8c\x80|g@\x84\x03\xc4\x84\t\x87\x8d0\xa1\x01\xc4S\xb0j6A()\x89\x83\xc3O.@@\x84\xa0\xa1\x8d\xb1\x10\x16!e\xb9Q\xff\xa7\xf3\x83\xe9\xce\x081\x80\x94\xcbt\xach\x83|S#]\xacw\xdb:\x1f\xd6~\xa1aq\x14\xbd\xaa\xfd\xf0\x98b\x0f\x16ukf\x01r}R>H\x84hBP\xa1\x94E\x98\xd0\xab^\x03$\x08\xa6\x07\xf9X\xd1\x8b\xf5]\x01\xe9\xe5\x1a\x90n#\xcfd\x9a\xb6\x00\xa9X\xbf\xaa=\r+C\x13\x7f\x7f\xba?\xed\xb8L\x1dT_\x80\xf9]d\xcb\x1a\xa4*\x00$ \xc4v\x9ajW\r\xa1Q\xc7\xcab\x1c\xe4\xdb\x01r\x1f\xb3P\xc3\xe2(\x88\xedL8\xcfaMwc\x81\xd8\xe2\xff\xca$}\x1b@\xea\'\x17 z\x1c\xd1\x15U\x81\xa77\x0b$\x88\xf2\xf7M\xf9"d\x0e\x1d\xbd-w8\x95\xbe\xa7W\xc8\xe9\xfeK\x00y\x89\xe3\'\xed\xbe\x8e\xd7\xfe?\xbf]\x11\x90\x08H\xbc]\x7f\x03\xc8\x8f\x91\x85\'\x91\t\x0e\x13\x86\xa9\xee\xb3\xdb\x0b\xe2\x17T\xb4\rA\xa8\x1e\xafur\x9a4^\xb4@\xa6\xc3\xf9\xef\x95\xbf\xafT<\xffh\xa7C\xce\xa2k\xcaf\x1d\x15\xa6z\xdez\xdb\xd4\xc2\nY;z\xa1\xba\xfc\xcf\x89\xac\xfe\x1e@.\xd0\xc6u\xe1\xe4\xed\xc3\x9a\xbc\x81\x0f\xab\xe34\xac\xb26\xe1c\xb4\xd41x\x0b~\x92\x00\x00\r\x9eIDAT\xf7\x8e\xf6I\xe9\xdf\x9eO\xf7\xe7\x06\xe4~\x1a0\xe1$+,!\x01 ^\xd2\xbb\x1f\n\x19\xad\x11R\xaf\x13\x16E\xa6.\x11\x90\xef\xe7\xb3\xec\xf9\x06\xf9\x80\xf4\xce\x89\x15d\xba{\x05G\x19\x8f\x82\x00\xe1~\xcf\xdad\xadQ\x80\\\x9e\x1d\x90\x1b\xd4YlL\x81\x13S\xe2\xc4\xed=\x0e\xb6MM\xa3\xcf\x07\x00R\xa9\xd26q\xb4\x12$\xfbAM\xd8~\x0f \xf7\x19\x1a\x81;\x15k\xd9\xdbv\xa3\x1c\x16)X\xa5\x01\xc4\x94\x1a\xa5\xde\x05-f)\xde\x9f\x1d\x90\xfby\xc4K\xe1\x00\xe12\xd6X\xe9\xa4^\xd4\xff\x191\xd1\xc4\xf1\x01\xe9\xbc\x8a\xfcXn\xd7\x94\xc8~P\x9f\xdb_\x04\xc8IOm\x03\x88\xdd\x0b\xb2\x06d\nZ\x1ePK\x10R.\xbc\xb6\x94F\x80\\\x9f\x1f\x10r\xf5R\xbf\x10NXT\xd0\xfb\x87\xfb\xa4\x18@<+\xc4\x07\xa4\xc5\xbd\x02! Y~\x8a\x80|G#D\xe5\x99Q\xb1Va\xc2\xb0\x03LP\xd2\xdd\xa9X\xe4\xd1\xb7YX\xe3\xfe|\xff\x05\x80\\\xa7\x9e\xea7\xa0\x1d\xa2\xfcH\xa1r\xa1\x90\xc1\xec,\x1c=\r\xcbk\x83\x90\x1b\x15K\x9b\xe8\xd5%\x02\xf2\x1d\x8d\x90!\xcb- \xf5& \xd3F\xb1\x06\xf2\\\xb1\x9eE\n\x16Wj\x98\x8e\xb7\xdf\x00\xc8\xfdd\x00\xc9\x18\x10\xde|L\xfdt\xfc\xe2\rd\xa8\xc3\'\xee\x17D\xb5M\xcc\x0ee\xc9\x02d\xbaE@\xbe\xe38f,B2.\xca\xeb\n\xfe8\x0bdZl\xb5\xa5\xec\xdd\x82\xf9`\x05\xeb/\x04\xc8\x0f\x04\xe46\xf7\x98\x91E"\xc4+\x1f\xb7\r\xc8\x18\xc8\x10\x93\x8e\x95\x17\x0e\x90\x9f\x94\x9c\xf3\x9b\x00\xb9V9\x88\x10\xdc\xdb\x10f*.[\xecy\x12\xa4\\\x03\xa2\x05\x08X \xf3\x87\x04\xc8\x0f\x04\xe4~\x1e\xda\x86\xfb\x85\x14\xcb\x84\x93\xd0Lg;\xc4\x13!\xa6\x88\xb5\xd9\x12\x92ey{\x8d\x80|S?V\x0e\x8e,\x02\xa4\xf5\xb7\xa3\xcf~\x16V\xefo%\x84\r\xb6>\x1f\x18\x03\xc9+h2\xb8\xbf\xdc\x7f\t \xe0\xeam\xdb\xba\xf0\t1\xcd\xa6\xca\xa5\x99\xce\x12\xc4DB\x18\x10"\x04\x04H\x9e\x1f\xee\x11\x90\xef9\xceJ\xe5\x92U,\x03H\x18\x04q\xfd\xc3\x9c\x85\xae\xa7DQ\x061t\x12 \xa7\xfbo\x01\xe4~\x81\x8b\xc2\x8e\xac@\x86\xd4&c\xb1\xc3\xb6R\xd6\x0c\x99B@\xc0\x8f\x05|\xc0\xf2\x94\xb7\x97\x08\xc8w\x1dS\xa6P\x86\xe4\x8a\x001\xa9\xbc~\xb1\x86\xde\x07Dy\x80,\x04\xc8\xe1\xfa{\x00\xb9\x1f\xc1\xdc\xae\xd7\x80\xb8*\x8b\x06\x10\x1bO\x1f\xdd\xae\xa9\x86\x01\xd1\xd7^_\xfa\x9f\xd5\x04\xfaw\x01rVUNw\xa9j\xdb\xa0\xaa\xbbS\xb1\x02@<\x0b\xa40A\xf4\x1c7J\xcd\xe7\xfb/\x02\xe4:\xf5\xa6wz`\xa7+k\x85\xb4m\x10\x0b\xb1\xa5\x1b|@pi\xfaY\x02\xe4\xeb\x00\x912\x98\xb9]1_&Vx\x9b\xa2\x9e\xafw\xf8\xd6\xbdh\xf1(\xfc\xedwX!Ji>D^\xa8j\x13\x90\xd1\xee\x14\xb5m:\xc9\xcb\xabl}\'-@\x9a\xee\x83.\xde\x1f\x0b\xc8\xfd\xd4c\xde\xc8Z\xc7Z$d\xc15\xa5X\x88\xad\xd1\x8b\xc5\x7fP\xf8j\x1dK\xa9\xc3{\xe7\x89\x94\xc5t]O\x85\x7f1]\xbe\x0f \x85\xbc\x99gfy\xb9\x9fe\xb7x\xc1\x7ft\xc6\x97\xaa\xd2\x84\x80\x11\xe2\x03\xe2\xdaJy\x80`/t\xeb\xe4U\xcc\x07\xe8Xu7\x0c\xfb\xeb\xfdW\x01r\xdb\xf7T\xa9wI\x88\x97\x91\xe5\x8b\x90\xd1\xed\x9a\xe28<\xb9\xff\xaa\xfe\xfa\xfeyr\x91\xc3z*\xfc\x8b\xe9\xf2\x1d\x009\x96\xe5\x11\x97\t\x18\xc4\xca\xc9\xac\x1c\xf8\xa2c]LH\xcf\xadin\xde\x19Ky.\xdf\x1fq:\x80\x92%\xa0\xebM\x1bt^s|\xb8Z\x03\xca\xd40\xe1a\xaaU\xeb\xdf\x9c\xce\xf7\xdf\x05\xc8\xfd2\xea\xa9\xae\xe5\xef\xb6\x08a3d\xf0\x8b,\x8e\xdcI\xa7C@X\xf8\xd6\xa7\x8f\xcc\x13\xa9p\x02L\xed\to\xfcel/\xfff\xba|= Gy>\xcb#~\xc7\xcf\x8cR\x0e\x17~\x81\xfe\xd0/\xb8\xcaQ?\xba\xb5\xcd\xf5\x1e\x9c\xf1\xe1,\xdf\xed1\xbc\rZ\x84\xc0\xfe\xd1\xaa\xd6\xf7s\xda\x02\x84\xf8pE\xd2pF\x14\xdcN\n:\x12j\x01r\xbc\xff6@@\xc9\x82"r+%\x8bZ\x9azUH\x07\xaa\x8de\x1dY\xa8a\x15\xcc\xc7\xfe#\xf3\xe4,\'\xf8z\x90\xe7\x03\xdd\xf8\x8b\x13\x19\x9f;]\xbe\x1e\x90\x16t\xab\xce\x07\xe46\xe8k9\xdf\xccS\xf0\x02|y+\xcf\xf7\xf0\x8co7\xd9\xbc\xdfN\xaf*\xf4E\xa1\x112\x86y&\xa3\x8b\xfdz-]q>\xa0\x85\x8e\x80@\x96\xc9\xfe\xf6\xfb\x00\xb9\x1d\xb4,\xf0\x93zW\x15\xb2\x16n,\xb8\x9e#\x02\xd2\x94\x05{\xff\x86\xeb\xfb\xe7\x89\x9d\x0e\r\xdcq\x92\x13\xb2\xf8G\xd3\xe5\xcb\x01\xc1\xdc\xbf\xc2\x07D\xafU\x8d\xa4%\x03>\n\xa3q\x16\xf5\xc4\xbfq\xb7\x17H\x7fy\xbf\xc7Ra\r\x02pd=\x04\xa4\xb1\xa5~\nO\xc1\xcasn(5]\xee\xbf\x0f\x10\xf0d\xb5\xcdF,\x04E\xc8\x06 #\xebX-jX\xb4\xb4\x9c?2O\xce\xc5h\xa7\x82\x01D\xfe\xab\xe9\xf2\xd5\x804\xce\xe2\xf2,\xa9\x93c\xc6.\t\x97\xa3\xbc\xd0o\xe8\'\xf4Z\x80KB\xfd\x81#\xef\x95\xa2\x99\x1e\x8a\x90\x89\x01i\xd9Fw\xf2\x83Fn\xfb\xe5L\xe7\xfbo\x04\x04\xcc\x10\x1b-\x0c\x12N\x18\x90\xd6\xdb\x15\xe2\x03Ra\x0b\x05\xcdG{\xfc\xd8<9\x91\x12\xeeK\x10\xf9\xaf\xa6\xcb\xd7\xdb \xa7\x0b\xf3_\xd23\x83\x96\x8d\x179\xe3\xb7\xbeRy\xbf\x15\xb8&\x1c\xb4Uv\xd2\xda\xa4\x94\xc7\x0f)\x95\xf7\xdbH\xb5\x02\xc9\xda^l\x95Z\x00\xc2\xb2\x03\xec\x8f\xdc\xb6;8\xde\x7f\' \xf7\xf3\xd0\xd7\x9eL-\x165\xe4\xda\xdek75\x1a@Z\xad\xd3\xe6\xfa\xf2i\xf9q\xb8}p\x9e\x0c\xc5\xd5\xb7A\xf0\xd9\x7f4]\xbe\x10\x10\xf2C\x1c\xea\x825\xc83\x9d\xd1m_\x17\x8d\xbe\x94\xf0-\xbe\xa0T\xfc\x82\x99\xd6\x84C\x83?\x97\xf2\xa4>\x967}\x1d\x94\x92F\x86L\x0b\r\xcb:y}\xf9\x91\xd16B\x14 \xe3\xe1\xf6[\x01\xd1\x86\xba\x16\x07Z\x1eXB\xcc6u[\xa5\xb7_\xc4\xd21\x00\x0f\x92\xb7l\xfb\x0fYn\x08\xc8I\xce\xc6\x8b\xa5\x0c \xffh\xba\xfc\xdcH\xfa_\xf8\xb6/\x9d\xa2z\xb3\x9e\x96\xe5w]3\x80X\xe7.7;@3\xf3/\xf9\xf8\xd1\x80\x10! M\x8b@\x90(\xbb7\xdd\xe9X,?\xea\xaa\xcc\xa8W\xf6\xfeow\x81\x94\xa7\xdbu]r\xee\x93\xa7\xcb\xaf\x04\xe4~\xe9\x03B\x16\x9d\xf58\xc9\xa4\xb0\xbd\x91$\x03\xa2o\xf3_\xf3\xf1\xb3\x01\xd1\x84\xd4`R\xa0\xc2\xb9A\x88\xbf+\x04\xf5\xd5\x9a6Z\xfd\x17|h\r\xafP\xd35\x02\xf2/\xc6u\x84\xc4^\xf2eiD\x86qt\xf5\x96\xdd.)K\x87\xb4\x1d\x9f\x8f\xb7\xfb\xaf\x06D\xcf\xd2\n\t\xa1+b\xe3"\xce\x91e\xf6\x85`Z4\x89\x1b\xb0\xf6\x0e?\xb4\x04\xfe/\x05\xe4~\x9d\xf5\xadCo/ \xd2\xdb-\xd4T\xe8\xac,\x03\xe9\x81|\xc8\xa2l\x87\xd3\xb7\x98\xa4_z\xec\xcb\x04)Y\x99\xb7nd\x8e\x90\xb6\xa7\xac\xde\x1e/&\xa1\x94\x83\xe7\xef\xf8C\xe7\xc9\xaf\x05\xe4~;*\xba{y\xa6\xaa\xba\xe5QW\xb4\x03$\x90\x1e\xc4\x87\x96\x1f\xd3\xf9\x1e\x01\xb9_\x0f\xb0\xfd6\xcf=\xed\x93\xf4,\xd0L\xe92\xe2\x16]-=2\xb8\xbeZ\xee\x8e?\xb7G\xdd\xaf\x05D\xab\xd3-\xd0\x81\x8ch1R\xbb\xfdQ\x96\x0e*\xf1\xc0\x0be\xd5\xee\xaf\xf7\x08\x08\x19"(\x1a\x02\tK\x8cTv(^\x7f@@\xcf?\xb8\x05\xd7/\x06D\xabY9G7<\x8b\x93=\xba\xa6\xc6\x197l\xd3\xf7y\xf8\x8f\x1aI=\x01 \xf7\xeb\xbeV\x0bD\xa8\xd1g\x96\x9b\xcc5\x92\xce\x98\xafp\xfc\xc9\x1d\xb8~3 \xb0\x14bs\xb1,\x0b\xbdU\xb87\x14\x0bp\x88,\x03\x19\xa2\xb5\xe8\xc3\xe5\x9bM\xd2/=\xf6\xed\xcc\x96H\xa0\x89\xc2\xd5\x93\xa4W\xd1(\xeb\xa6\xdf\xff\xec\x0e\x8e\xbf\x1b\x10m\x89\xb4D\x88\xc4\x7f@\x83\x16\x19b)>\xda\xfd\xf9\xfbM\xd2\xaf=\xf6\xed4\x91\x8b\xca\x0ck\xb2S\xc4\x88\x14\xd7v>\xff\xf0\x06\x8e\xbf\x1c\x10@\xa472$\x83z\x0eYf\xd8\x00I\x02\xd2Cu\xfb\xf3\xf7\x9c\xa4_{\xec\xdbyn\x95\x89\x89\xb0\x086t`\r\xc6\xaa\xdf\x9f\x7f|\x7f\xd3_\x0f\x08\xde\xe8\xca,\x82P\xd1A\xd0\x87\xa0\r\xe8\xd5\xf4\x1f\xf7X{\x1a@\xf4\xb8\x1c\xc7\x1a2\x11\xf3,\x0b\xa5\x07\xc4\x8c\xa6\xd334\xa7\x8b\x80\xa0\xd1y\xda\xb7\xb9]\x05\xe9\x13\xa8V\xfd|\xba\xdc\xbe\xf9$\xfd\xdac\xdf.\xc7\xb9G]\xcb\x0e\xd8k3\xecO\xd7\xe7h\x8e\x1d\x01\xb1r\xe48\x8f\xe8\xbe\xcc\xd0w\xdf\x8d\xfb\xe3\xf9\xfa#&\xe9W\x1f\xfbz>\x1d\xe6\t\x12K\xb0\xe1\xca|\xf8\xefW\x95\x08\xc8\xf7\x80\xe4v\xbd\\\xcez\\.\xd7\xdb\xedGM\xd2/?\xf6\xcd\x8e\xfbS\x8d\x08\xc8\x13M\xd2o}\xec\x08H\x1c\x11\x90\x08H\xbc\xe2\x11\x90x\xbb" \x11\x908" \x11\x908" \x11\x90x\xbb" \x11\x90\x08H\x04$\x02\x12\x01\x89\x80\xc4+\x1e\x01\x89\x80\xc4+\x1e\x01\x89\x80\xc4\x11\x01\x89\x80\xc4+\x1e\x01\x89\x80\xc4+\x1e\x01\x89\xb7+\x02\x12\x01\xf9\xff\xf6\xeeh\xa7m \x88\x02\xe8\x8b%\x83\x10\x8a\x04%JR\x11\xff\xff_v\x9d@AU\x12\xbc;k\xb3\xb8\xe7\xaa\xa8j\xc1e\xd8\xf1\x81\x04\xa4^\x01\x04\x10\x01\x04\x10\xeb\x02\x04\x10@V\t$V\x90~\xe9\xc2J\t\x0cv\xbb\xca\xbbi Uz\xc8g\xddJt\xbe\x9c\xe5\xb4\x07$\xb7 \xfd\xd2\x85\xb3\x00\xc9\x1c\xecV\x95w\xe3@*\xf4\x90\xcf\xbc\x95\xe8|\xd3\x97\xd3\x12\x90\xb2\x82\xf4K\x17V\x06R\xd8\xdc~\xbd\xca\xbby \xe1\x1e\xf2\xb9\xb7\x12\xeeI\x9f\xba\x9c\x86\x80\x14\x16\xa4_\xba\xb0.\x90\xb2\xc1nUy7\x0f$\xdcC>\xf3V\xa2\xf3M_NC@\n\x0b\xd2/]X\x17H\xc9`\xb7\xab\xbc\x9b\x7f\x0e\x12\xee!\x9fu+\xd1\xf9r\x96\xd3\x10\x90\xfc\x82\xf4\x1b\x17\xd6\x04R4\xd8\x17U\xdem\x7f\x05\t\xf5\x90/\xb0\x95\xe8|\x19\xcbi\x08H~A\xfa\xcd\x0b\xeb\x01)\x1b\xec\xab*\xef\xa6\x1fbEz\xc8\x97\xd8Jt\xbe\xe9\xcbi\xea9HnA\xfa\xd5\x0bk?\x07)\x1a\xecF\x95w\xfbO\xd2\x03=\xe4\x8bl%:\xdf\xe4\xe5\xb4\x01\xa4\xb0 \xfd\xea\x855\x1f\xed\x96\r6\xdc\xac\xf2n\x1fH\xa0\x87|\xfe\xadD\xe7\xcbYN\x0b@V\x9d\tU\xde\xed\xfe$=\xd4C\xde\xc6\xe1\xd6\xbf\x1e\x90\xaa\x99P\xe5\xdd.\x90P\x0fy\x1b\x87[\xffz@\xda\xbaI\xd7\xfb\xbeW\xba.@\x00\xb1.@\x00\x11@\x00\xb1.@\x00\xb1.@\x00\x01\x04\x10@\x00\x01\xc4\x89\x03\x02\x88\x00\x02\x88\x00\x02\x88\x13\x07\xc4\xba\x00\x01D\x00\x01D\x00\x01\xc4\xba\x00\x01\x04\x10@\x00\x01\x04\x10\'\x0e\x08 N\x1c\x10@\x04\x10@\x9c8 \x808q@\xac\x0b\x10@\x04\x10@\x04\x10@\xac\x0b\x10@\x00\x01\x04\x10@\x00q\xe2\x80\x00"\x80\x00"\x80\x00Rv\xe2\x91\x12\xf2~s\x98\xf3\x08B\xfd\xe8\x9f\xfe\xbb\xf0\xf1\xcd&\x94o\xaf\xae\'\xbd\xe4\x10r\xb6\x13\x9e/t\xff|\x0f\x90\xbc\x12\xf2\xe3\xb9\ne\x19 \xd9\xfd\xe8\xcf\x9f\xff8\xa1\xd7k\x85=\xe9\xf9\x87\x90\xb7\x9d\xe0|\xa1\xfbgi E%\xe4c\xc5VzE\xbarH/\xfb\xee\x90\xfe\x99\xf4\x8a\xc3\xf3\xc3\xa1"\x90\xc2~\xf4\xbb\xb7\x9b\xe2\xe3\xca\xf3\xa4\xd7\xe6[cOz\xf6!dn\'8_\xe4\xfeY\x18Ha;z\xf7\x98>\xac}\xfa5<=\r\xbf\xba\xed\xf8[\xd7\xed~\xa7\xbf\xaf\x06\xa4\xb4\x1f}\xf7\xb9\x15\xf2\\\x19y\x9a\xf4\xda|+\xecI\xcf?\x84\xbc\xed\x84{\xdc\x03\xf7\xcf\xc2@\n\xdb\xd1\xbb~\xd8\x8c\x15\xa5\x8f\xc3\xb6?\xf6w\xf7\xc7~;\x9e\xc1\xf8\xf7\xd5\x80\x14\xf6\xa3?\x1f\xff\xbd7\xde&\xbd6\xdf\xeaz\xd2K\x0e!\xef9H\xb8\xc7=p\xff,\x0c\xa4\xb0\x1d=}\t\xef\xcf\xc7\xb2\xebv\xdd>\xbd\xec\xea=\xda\r\x8dv\xf80\xf5~e\xff\xb1\xc0K\xf3\xad\xb0\'=\xff\x10\xb2\xb6\x13\xefq\x0f\xdc?\x0b\x03)+!\x7fM\x8f!O\x9f\x016\xe3\x9b\xf6C\x7f\x7f\xfa\xea]\x17Haq{z}:\xfb\xe3\xbf\x9f<7?\x08H\xbc\'=\xfb\x10\xf2\xb6\x13\x9d/r\xff,\xfe\x1c\xa4\xa4\x84|\x9b>\xd6\xdd\xf91dzr\xf62\xbc\xa4\x8f\xbf:\x90\xb2\xd1\xc6K6\xe36\xce\xc5\xdb\xe3\xcb\xee\xfd\xe1\xf7\x8f\x01\x12\xed!\xcf?\x84\xcc\xed\x04\xe7\x8b\xdc?\xcb\x01)oG\xef\x9f\xc6\x87\x93\xe7\xefB\xa4\x83\xda\xa7O\x03\xddkM \x81\xe2\xf6\xf1[\xf4\x87\x87\xcd\xeb[\xf1\xf6\xe9\xca\xf7o\xe0\xfc\x1c \xc1\x9e\xf4\xfcC\xc8\x04\x12\x9b/t\xff\xf8Iz\x037i#\xef{\xed=\xe9M\xff\x1cD\xda\x07\xb2\xf6\x9et@\x00\x19\xac\x0b\x10@\x00\x01\x04\x10@\x00q\xe2\x80\x00"\x80\x00"\x80\x00\xe2\xc4\x01\xb1.@\x00\x11@\x00\x11@\x00\xb1.@\x00\x01\x04\x10@\x00\x01\xc4\x89\x03\x02\x88\x13\x07\x04\x10\x01\x04\x10\'\x0e\x88u\x01\x02\x88u\x01\x02\x88\x00\x02\x88u\x01\x02\x88u\x01\x02\x08 \x80\x00\x02\x08 N\x1c\x10@\x04\x10@\x04\x10@\x9c8 \xd6\x95\x05D\xb2\xf3\x9d\xdb\x96\xca\xeb\x02\x04\x10\xeb*\x07"\xf2\x7f\x07\x10\x11@D\x00\x11\x01D\x04\x10\x11@D\x00\x11\x01D\x04\x10\x11@D\x04\x10\x11@D\x00\x11\x01D\x04\x10\x11@D\x00\x11\x01D\x04\x10\x11@D\x04\x10\x11@D\x00\x11\x01D\x04\x10\x11@D\x00\x11\x01D\x04\x10\x11\xf9\x9b?[\xfc\x08\x03\xfc\x04\x987\x00\x00\x00\x00IEND\xaeB`\x82' if __name__ == "__main__": joystick_config_main() fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/GameRatingSynchronizer.py0000644000175000017500000000666612162366654026024 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import os import json import time import urllib import urllib2 from .I18N import _, ngettext from .fsgs.GameDatabaseSynchronizer import GameDatabaseSynchronizer class GameRatingSynchronizer(GameDatabaseSynchronizer): username = "" password = "" def __init__(self, database, on_status=None, stop_check=None): GameDatabaseSynchronizer.__init__(self, None, on_status, stop_check) self.database = database #self.on_status = on_status #self._stop_check = stop_check #def stop_check(self): # if self._stop_check: # return self._stop_check() # #def set_status(self, title, status): # if self.on_status: # self.on_status((title, status)) #def synchronize(self): # self._synchronize() # if self.stop_check(): # self.database.rollback() # else: # print("commiting data") # self.set_status(_("Updating database"), _("Committing data...")) # self.database.commit() # print("done") def _synchronize(self): self.set_status(_("Updating database"), _("Synchronizing personal ratings...")) last_json_data = "" while True: if self.stop_check(): return json_data = self.fetch_rating_entries() if json_data == last_json_data: print("no more changes") break last_json_data = json_data num_changes = len(json_data["ratings"]) print(" processing {0} entries".format(num_changes)) t1 = time.time() for update in json_data["ratings"]: cursor = self.database.cursor() cursor.execute("DELETE FROM game_rating WHERE game = ?", (update["game"],)) cursor.execute("INSERT INTO game_rating (game, work_rating, " "like_rating, updated) VALUES (?, ?, ?, ?)", (update["game"], update["work"], update["like"], update["updated"])) t2 = time.time() print(" {0:0.2f} seconds".format(t2 - t1)) #def get_server(self): # try: # server = os.environ["FS_GAME_DATABASE_SERVER"] # except KeyError: # server = "fengestad.no" # auth_handler = urllib2.HTTPBasicAuthHandler() # auth_handler.add_password(realm="FS Game Database", # uri="http://{0}".format(server), user=self.username, # passwd=self.password) # opener = urllib2.build_opener(auth_handler) # return server, opener def fetch_rating_entries(self): cursor = self.database.cursor() cursor.execute("SELECT max(updated) FROM game_rating") row = cursor.fetchone() last_time = row[0] if not last_time: last_time = "2012-01-01 00:00:00" self.set_status(_("Updating database"), _("Fetching user game ratings ({0})").format(last_time)) server = self.get_server()[0] url = "http://{0}/games/api/1/user_ratings?from={1}".format(server, urllib.quote_plus(last_time)) print(url) data, json_data = self.fetch_json(url) #self.downloaded_size += len(data) return json_data fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/XMLConfigLoader.py0000644000175000017500000002344112162366654024273 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import os import xml.etree.ElementTree from xml.etree.cElementTree import ElementTree, fromstring from .Database import Database class XMLConfigLoader: def __init__(self): self.config = {} self.options = {} def get_config(self): return self.config.copy() def load_file(self, path): tree = ElementTree() tree.parse(path) self.load_tree(tree, path) def load_data(self, data): root = fromstring(data) tree = ElementTree(root) self.load_tree(tree) def load_tree(self, tree, path=""): self.tree = tree self.path = path #self.tree.parse(path) self.root = self.tree.getroot() cd_based = False amiga_model = "A500" platform = self.root.find("game").find("platform").text.strip() if platform == "CD32": amiga_model = "CD32" cd_based = True self.options["joystick_port_1_mode"] = "cd32 gamepad" elif platform == "CDTV": amiga_model = "CDTV" cd_based = True self.config["amiga_model"] = amiga_model self.viewport = [] game_node = self.root.find("game") if game_node is not None: game_uuid = game_node.get("uuid", "") self.config["x_game_uuid"] = game_uuid self.load_game_info(game_uuid) self.load_options_from_tree(self.tree) """ if self.root.find("options"): for node in self.root.find("options"): print(node.tag) print(node.text) key = node.tag.replace("-", "_") value = node.text if key == "viewport": if "=" in value: value = value.replace("=", "=>") value = value.replace("==>", "=>") else: value = "* * * * => " + value viewport.append(value) continue self.options[key] = value """ if self.viewport: self.options["viewport"] = ", ".join(self.viewport) #self.options["sub_title"] = amiga_model + " - FS-UAE" #self.options["sub_title"] = "FS-UAE ({0})".format(amiga_model) if cd_based: self.load_cdroms() else: self.load_floppies() self.load_hard_drives() # for now, just copy all options to config without checking for key, value in self.options.iteritems(): self.config[key] = value self.set_name_and_uuid() def set_name_and_uuid(self): #self.config["x_config_uuid"] = self.root.get("uuid", "") game_name = "" platform_name = "" variant_name = "" name_node = self.root.find("name") if name_node is not None: variant_name = name_node.text.strip() game_node = self.root.find("game") if game_node is not None: game_name_node = game_node.find("name") if game_name_node is not None: game_name = game_name_node.text.strip() game_platform_node = game_node.find("platform") if game_platform_node is not None: platform_name = game_platform_node.text.strip() parts = [] if platform_name: parts.append(platform_name) if variant_name: parts.append(variant_name) if game_name and variant_name: config_name = u"{0} ({1})".format(game_name, u", ".join(parts)) self.config["__config_name"] = config_name def load_cdroms(self): print("\n\n\nload_cdroms\n\n\n") media_list = self.build_media_list(cds=True) for i, values in enumerate(media_list): path, sha1 = values if i < 1: self.config["cdrom_drive_{0}".format(i)] = path self.config["x_cdrom_drive_{0}_sha1".format(i)] = sha1 self.config["cdrom_image_{0}".format(i)] = path self.config["x_cdrom_image_{0}_sha1".format(i)] = sha1 def load_options_from_tree(self, tree): root = tree.getroot() if root.find("options"): for node in root.find("options"): print(node.tag) print(node.text) key = node.tag.replace("-", "_") value = node.text or "" self.load_option(key, value) def load_option(self, key, value): if key == "viewport": if "=" in value: value = value.replace("=", "=>") value = value.replace("==>", "=>") else: value = "* * * * => " + value self.viewport.append(value) elif key == "whdload_args": self.options["x_whdload_args"] = value elif key == "kickstart": if value == "2.0+": self.options["amiga_model"] = "A600" elif value == "AROS": self.options["kickstart_file"] = "internal" else: # FIXME: print warning pass elif key == "cracktro": # FIXME: handle pass else: self.options[key] = value def load_game_info(self, uuid): print("load_game_info", uuid) path = Database.get_instance().find_game(uuid=uuid) if not path: print("game xml file not found") return tree = ElementTree() tree.parse(path) self.config["x_game_xml_path"] = path self.load_options_from_tree(tree) def load_floppies(self): media_list = self.build_media_list(floppies=True) floppy_drive_count = 4 if "floppy_drive_count" in self.options: try: floppy_drive_count = int(self.options["floppy_drive_count"]) except ValueError: floppy_drive_count = 1 floppy_drive_count = max(0, min(4, floppy_drive_count)) for i, values in enumerate(media_list): path, sha1 = values if i < floppy_drive_count: self.config[u"floppy_drive_{0}".format(i)] = path self.config[u"x_floppy_drive_{0}_sha1".format(i)] = sha1 self.config[u"floppy_image_{0}".format(i)] = path self.config[u"x_floppy_image_{0}_sha1".format(i)] = sha1 if floppy_drive_count < 4: self.config["floppy_drive_count"] = floppy_drive_count def build_media_list(self, floppies=False, cds=False, hds=False): media_list = [] added = set() file_nodes = self.root.findall("file") for file_node in file_nodes: print(file_node) sha1 = "" #for cs_node in file_node.findall("checksum"): # if cs_node.get("type") == "sha1": # sha1 = cs_node.text.strip() sha1_node = file_node.find("sha1") if sha1_node is not None: sha1 = sha1_node.text.strip() print("sha1", sha1) type = file_node.get("type", "") name = file_node.find("name").text.strip() if name.startswith("HardDrive/"): if hds: p = os.path.join(self.path, "HardDrive") if p in added: # already added continue added.add(p) # FIXME: hack for now sha1 = "01234567-89ab-cdef-0123-456789abcdef" media_list.append((p, sha1)) else: continue base, ext = os.path.splitext(name) #if type == "hd" and not hds: # continue if hds: #if type and not type == "HD": # continue if ext not in [".zip"]: continue elif cds: #if type and not type == "cd": # continue if ext not in [".cue", ".iso"]: continue if "(Track" in base: # probably part of a split multi-track cue continue elif floppies: #if type and not type == "floppy": # continue if ext not in [".adf", ".adz", ".dms", ".ipf"]: continue url_node = file_node.find("url") if url_node is not None: url = url_node.text.strip() else: url = "" path = "" found_sha1 = "" if sha1: print(sha1) path = Database.get_instance().find_file(sha1=sha1) if path: found_sha1 = sha1 if url and not path: path = url found_sha1 = sha1 if not path: path = Database.get_instance().find_file(name=name) if not path: if self.path: # loaded from an external XML file: path = os.path.join(self.path, name) if path: media_list.append((path, found_sha1)) else: pass #return False # FIXME: handle it with a visible error message #raise Exception("could not find file " + repr(name)) return media_list def load_hard_drives(self): print("load_hard_drives") media_list = self.build_media_list(hds=True) print(media_list) for i, values in enumerate(media_list): path, sha1 = values self.config[u"hard_drive_{0}".format(i)] = path self.config[u"x_hard_drive_{0}_sha1".format(i)] = sha1 fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/editor/0000755000175000017500000000000012162366654022266 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/editor/GameListView.py0000644000175000017500000000205512162366654025202 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import os import traceback import fs_uae_launcher.fsui as fsui from ..Database import Database from ..I18N import _, ngettext class GameListView(fsui.ListView): def __init__(self, parent): fsui.ListView.__init__(self, parent) self.items = [] def on_select_item(self): index = self.get_index() database = Database.get_instance() info = database.get_game_info(self.items[index][0]) self.set_game_info(info) def set_items(self, items): self.items = items self.set_item_count(len(self.items)) def on_get_item_text(self, row, column): return self.items[row][1] def on_get_item_tooltip(self, row, column): return self.items[row][1] def search(self, search): print("search for", search) database = Database.get_instance() items = database.search_games(search) self.set_items(items) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/editor/EditorGroup.py0000644000175000017500000000457112162366654025112 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import os import fs_uae_launcher.fsui as fsui from ..Config import Config from ..Settings import Settings from .XMLControl import XMLControl from .PickGameDialog import PickGameDialog from ..I18N import _, ngettext class EditorGroup(fsui.Group): def __init__(self, parent): fsui.Group.__init__(self, parent) self.layout = fsui.VerticalLayout() #self.layout.padding_left = 20 #self.layout.padding_right = 20 self.layout.add_spacer(20) self.label = fsui.HeadingLabel(self, "Edit Config") self.layout.add(self.label) self.layout.add_spacer(10) horlayout = fsui.HorizontalLayout() self.layout.add(horlayout, fill=True) self.game_button = fsui.Button(self, "Pick Game") self.game_button.on_activate = self.on_game_button horlayout.add(self.game_button, fill=True) horlayout.add_spacer(10) horlayout.add_spacer(0, expand=True) self.save_button = fsui.Button(self, "Save") self.save_button.on_activate = self.on_save_button horlayout.add(self.save_button, fill=True) self.layout.add_spacer(14) self.config_xml_ctrl = XMLControl(self) self.layout.add(self.config_xml_ctrl, fill=True, expand=True) self.layout.add_spacer(20) self.game_xml_ctrl = XMLControl(self) self.layout.add(self.game_xml_ctrl, fill=True, expand=True) self.layout.add_spacer(20) Settings.add_listener(self) Config.add_listener(self) def on_config(self, key, value): if key == "x_game_xml_path": self.game_xml_ctrl.set_path(value) def on_setting(self, key, value): if key == "config_xml_path": #self.load_config_xml(value) self.config_xml_ctrl.set_path(value) def on_save_button(self): self.config_xml_ctrl.save() self.game_xml_ctrl.save() def on_game_button(self): dialog = PickGameDialog(self.get_window()) if dialog.show_modal(): game_info = dialog.get_game_info() else: game_info = None dialog.destroy() if game_info is None: return print(game_info) self.config_xml_ctrl.connect_game(game_info) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/editor/XMLControl.py0000644000175000017500000000541412162366654024645 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import os import xml.etree.ElementTree from xml.etree.cElementTree import ElementTree, Element, SubElement from xml.etree.cElementTree import fromstring, tostring import fs_uae_launcher.fsui as fsui from ..Config import Config from ..Settings import Settings from ..I18N import _, ngettext class XMLControl(fsui.TextArea): def __init__(self, parent): fsui.TextArea.__init__(self, parent, horizontal_scroll=True) self.path = "" def connect_game(self, info): tree = self.get_tree() root = tree.getroot() if not root.tag == "config": return game_node = self.find_or_create_node(root, "game") game_node.set("uuid", info["uuid"]) game_name_node = self.find_or_create_node(game_node, "name") game_name_node.text = info["name"] self.set_tree(tree) def find_or_create_node(self, element, name): node = element.find(name) if node is None: node = SubElement(element, name) return node def set_path(self, path): if not os.path.exists(path): path = "" self.path = path if path: self.load_xml(path) else: self.set_text("") def get_tree(self): text = self.get_text().strip() try: root = fromstring(text.encode("UTF-8")) except Exception: # FIXME: show message import traceback traceback.print_exc() return tree = ElementTree(root) indent_tree(root) return tree def set_tree(self, tree): data = tostring(tree.getroot(), encoding="UTF-8").decode("UTF-8") std_decl = "" if data.startswith(std_decl): data = data[len(std_decl):].strip() self.set_text(data) def load_xml(self, path): with open(path, "rb") as f: data = f.read() self.set_text(data) def save(self): if not self.path: print("no path to save XML to") return self.save_xml(self.path) def save_xml(self, path): self.get_tree().write(self.path) def indent_tree(elem, level=0): i = "\n" + level*" " if len(elem): if not elem.text or not elem.text.strip(): elem.text = i + " " if not elem.tail or not elem.tail.strip(): elem.tail = i for elem in elem: indent_tree(elem, level+1) if not elem.tail or not elem.tail.strip(): elem.tail = i else: if level and (not elem.tail or not elem.tail.strip()): elem.tail = i fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/editor/PickGameDialog.py0000644000175000017500000000446312162366654025447 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import xml.etree.ElementTree from xml.etree.cElementTree import ElementTree import fs_uae_launcher.fsui as fsui #from ..Database import Database from ..I18N import _, ngettext from .GameListView import GameListView class PickGameDialog(fsui.Dialog): def __init__(self, parent): fsui.Dialog.__init__(self, parent, "Choose Game") self.info = {} self.layout = fsui.VerticalLayout(padding=20) self.text = fsui.TextField(self) self.text.on_change = self.on_text self.layout.add(self.text, fill=True) self.layout.add_spacer(20) self.view = GameListView(self) self.view.set_game_info = self.set_game_info self.view.set_min_width(600) self.view.set_min_height(300) self.layout.add(self.view, expand=True, fill=True) self.layout.add_spacer(20) self.link_field = fsui.TextField(self) self.layout.add(self.link_field, fill=True) self.layout.add_spacer(20) hlayout = fsui.HorizontalLayout() self.layout.add(hlayout, fill=True) hlayout.add_spacer(0, expand=True) self.cancel_button = fsui.Button(self, _("Cancel")) self.cancel_button.on_activate = self.on_cancel_button hlayout.add(self.cancel_button) hlayout.add_spacer(10) self.ok_button = fsui.Button(self, _("OK")) self.ok_button.on_activate = self.on_ok_button hlayout.add(self.ok_button) self.text.focus() self.set_size(self.layout.get_min_size()) self.center_on_parent() def set_game_info(self, info): self.info = info tree = ElementTree() tree.parse(info["path"]) link_node = tree.find("link") if link_node is not None: self.link_field.set_text(link_node.text.strip()) else: self.link_field.set_text("") def on_text(self): self.view.search(self.text.get_text()) def get_game_info(self): return self.info def get_game_uuid(self): return self.info.get("uuid") def on_ok_button(self): self.end_modal(bool(self.info.get("uuid"))) def on_cancel_button(self): self.end_modal(False) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/editor/__init__.py0000644000175000017500000000000012162366654024365 0ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/Util.py0000644000175000017500000000060512162366654022270 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import os import sys from .fs import memoize, get_home_dir def expand_path(path): from .Paths import Paths return Paths.expand_path(path) def get_real_case(path): from .Paths import Paths return Paths.get_real_case(path) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/builtin_configs/0000755000175000017500000000000012162366654024156 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/builtin_configs/__init__.py0000644000175000017500000001243712162366654026276 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import urllib import xml.etree.ElementTree from xml.etree.cElementTree import ElementTree, Element, SubElement, tostring downloadable = { "bb433ea476dca6db52c1a9851c312307dda63010": "Cybernetix - The First Battle (1991)(Vision)(SW)[h BTTR].adf", "67334f9bf28b9e4ae4fb38d695689b3ff8414766": "Dogfight v1.1 (19xx)(R. Ling).adf", "ecd2f292d3f799cd67f6cf2632246836908da380": "Transplant.adf", } def find_downloadable_file(sha1): if sha1 in downloadable: return sha1_to_url(sha1) return None def sha1_to_url(sha1): return "http://fengestad.no/s/{0}/{1}/{2}".format( sha1[:2], sha1, urllib.quote(downloadable[sha1].encode("UTF-8"))) def builtin_configs(): #result = [] #for name in modules: # m = __import__("fs_uae_launcher.builtin_configs." + name) # for name, data in getattr(m).iteritems: # result.append((name, data)) for config_dict in configurations: yield create_xml_from_config_dict(config_dict) #return result def create_xml_from_config_dict(config_dict): root = Element("config") root.set("uuid", config_dict["uuid"]) name_node = SubElement(root, "name") name_node.text =config_dict["config_name"] game_node = SubElement(root, "game") game_node.set("uuid", config_dict["parent"]) game_name_node = SubElement(game_node, "name") game_name_node.text = config_dict["game_name"] game_platform_node = SubElement(game_node, "platform") game_platform_node.text = config_dict["platform"] options_node = SubElement(root, "options") for key, value in config_dict.iteritems(): if key in ["game_name", "platform", "config_name", "uuid", "parent"]: continue if key.startswith("file_"): continue option_node = SubElement(options_node, key) option_node.text = value for i in range(100): name = config_dict.get("file_{0}_name".format(i), "") if not name: break sha1 = config_dict.get("file_{0}_sha1".format(i), "") #url = config_dict.get("file_{0}_url".format(i), "") url = sha1_to_url(sha1) file_node = SubElement(root, "file") file_name_node = SubElement(file_node, "name") file_name_node.text = name file_sha1_node = SubElement(file_node, "sha1") file_sha1_node.text = sha1 file_url_node = SubElement(file_node, "url") file_url_node.text = url name = u"{0} ({1}, {2})".format(config_dict["game_name"], config_dict["platform"], config_dict["config_name"]) print(tostring(root)) return name, tostring(root) configurations = [ # http://aminet.net/game/2play/BlitzBombers.readme # # Short: It's BLITZBOMBERS. And it's FREE. # Author: redwhen@ldngedge.demon.co.uk (Red When Excited) # Uploader: Big Will Riker ldngedge demon co uk (Steve Matty) # Type: game/2play # Architecture: m68k-amigaos # # It's FINALLY here. The game some, or even a LOT people have # been craving for. It's FREE as well. # # It's a snapshot of the game, as it was, back in January 1996 - # when it was 98% complete. There are some quirks, but hey. # # Download and enjoy. Major bugs will probably get fixed. # # It requires an AGA Amiga, needs at LEAST 1.5Mb ChipRAM to run. # FastRAM and/or accelerator will help when using lots of CPU # players, or the serial link. # # http://www.ldngedge.demon.co.uk is the place for FAQ's, # patches etc. # # Have fun. { "uuid": "bf1b7659-bb30-44b0-83dd-bd2c428a4214", "parent": "c1bcb261-adad-5a51-8f25-c5575798e30b", "game_name": "Cybernetix: The First Battle", "platform": "Amiga", "config_name": "Built-in, Shareware, Vision", "kickstart": "AROS", "file_0_name": "Cybernetix - The First Battle (1991)(Vision)(SW)[h BTTR].adf", "file_0_sha1": "bb433ea476dca6db52c1a9851c312307dda63010", }, # Does not work with builtin AROS kickstart (WB problems) #{ #"uuid": "b52a2ddd-e314-4479-8019-575f7b7b0e7a", #"parent": "b11f7f00-1fd7-519a-a0b8-ae0309053d22", #"game_name": "Dogfight", #"platform": "Amiga", #"config_name": "Built-in, Freeware, Richard Ling", #"kickstart": "AROS", #"file_0_name": "Dogfight v1.1 (19xx)(R. Ling).adf", #"file_0_sha1": "67334f9bf28b9e4ae4fb38d695689b3ff8414766", #}, # Does not work with builtin AROS kickstart (freezes at title screen) # "Downfall (Amiga, Freeware)": # """ # Shareware # # Downfall # Amiga # # # AROS # # # Downfall.adf # cc9ea0e8d1ae139ea5313d9b22eccc2e965744e2 # http://fengestad.no/sha1/cc/cc9ea0e8d1ae139ea5313d9b22eccc2e965744e2 # # # """ { "uuid": "ecb3da72-86c4-4921-a2c4-34f2d9290380", "parent": "1adf9bd3-4113-520b-973e-3caaebae369e", "game_name": "Transplant", "platform": "Amiga", "config_name": "Built-in, Freeware, Jumping Jack Flash", "kickstart": "AROS", "file_0_name": "Transplant.adf", "file_0_sha1": "ecd2f292d3f799cd67f6cf2632246836908da380", }, ] fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/LaunchHandler.py0000644000175000017500000011225112162366654024064 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import os import zlib import json import shutil import urllib import zipfile import hashlib import tempfile import unittest import pkg_resources import fs_uae_launcher.fs as fs import fs_uae_launcher.fsui as fsui from fs_uae_launcher.fsgs.GameNameUtil import GameNameUtil from .FSUAE import FSUAE from .ADFFileExtractor import ADFFileExtractor from .Archive import Archive from .Amiga import Amiga from .Config import Config from .ConfigWriter import ConfigWriter from .DownloadService import DownloadService from .GameHandler import GameHandler from .Settings import Settings from .Database import Database from .Paths import Paths from .ROMManager import ROMManager from .fsgs.GameChangeHandler import GameChangeHandler from .fsgs.GameDatabase import GameDatabase from .fsgs.GameDatabaseClient import GameDatabaseClient from .I18N import _, ngettext from .Util import expand_path class LaunchHandler: @classmethod def start_game(self): from .netplay.Netplay import Netplay if Netplay.game_channel: Netplay.start_netplay_game() else: LaunchHandler.start_local_game() @classmethod def start_local_game(self): if not Config.get("x_kickstart_file"):# or not \ #os.path.exists(Config.get("kickstart_file")): fsui.show_error(_("No kickstart found for this model. " + "Use the 'Import Kickstarts' function from the menu.")) return cs = Amiga.get_model_config(Config.get("amiga_model"))["ext_roms"] if len(cs) > 0: # extended kickstart ROM is needed if not Config.get("x_kickstart_ext_file"): fsui.show_error(_("No extended kickstart found for this " "model. Try 'scan' function.")) return #from .LaunchHandler import LaunchHandler handler = LaunchHandler(Settings.get("config_name"), Config, GameHandler.current()) from .ui.LaunchDialog import LaunchDialog from .ui.MainWindow import MainWindow dialog = LaunchDialog(MainWindow.instance, handler) dialog.run() dialog.show_modal() dialog.close() def __init__(self, config_name, config, game_handler): self.config_name = config_name self.config = config.copy() self.game_handler = game_handler def on_progress(self, progress): # method can be overriden / replaced in instances pass def on_complete(self): # method can be overriden / replaced in instances pass def run(self, start=True, cleanup=True): print("LaunchHandler.run") self.temp_dir = tempfile.mkdtemp(prefix="fs-uae-") print("temp dir", self.temp_dir) self.config["floppies_dir"] = self.temp_dir print("state dir", self.get_state_dir()) self.config["state_dir"] = self.get_state_dir() self.config["save_states_dir"] = "" self.config["floppy_overlays_dir"] = "" self.config["flash_memory_dir"] = "" self.change_handler = GameChangeHandler(self.temp_dir) self.prepare_roms() self.copy_floppies() self.prepare_cdroms() self.prepare_hard_drives() self.copy_whdload_files() self.init_changes() self.prepare_theme() self.prepare_extra_settings() if start: self.start() self.update_changes() if cleanup: self.cleanup() print("calling LaunchHandler.on_complete") self.on_complete() def prepare_roms(self): print("LaunchHandler.prepare_roms") roms = [] roms.append(("kickstart_file", self.config.get("kickstart_file"))) if self.config.get("kickstart_ext_file"): # not all Amigas have extended ROMs roms.append(("kickstart_ext_file", self.config.get("kickstart_ext_file"))) for config_key, src in roms: if not src: continue if src == "internal": continue src = expand_path(src) archive = Archive(src) if not archive.exists(src): dirs = [Settings.get_kickstarts_dir()] for dir in dirs: path = os.path.join(dir, src) print("checking", repr(path)) archive = Archive(path) if archive.exists(path): src = path break else: raise Exception("Cannot find kickstart " + repr(src)) dest = os.path.join(self.temp_dir, os.path.basename(src)) with open(dest, "wb") as f: ROMManager.decrypt_archive_rom(archive, src, file=f) self.config[config_key] = os.path.basename(src) self.config["kickstarts_dir"] = self.temp_dir def expand_default_path(self, src, default_dir): src = Paths.expand_path(src, default_dir) archive = Archive(src) #if not archive.exists(src): # dirs = [default_dir] # for dir in dirs: # path = os.path.join(dir, src) # print("checking", repr(path)) # archive = Archive(path) # if archive.exists(path): # #if os.path.exists(path): # src = path # break # else: # raise Exception("Cannot find path for " + repr(src)) return src, archive def copy_floppy(self, key): src = self.config.get(key, "").strip() if not src: return if src.startswith("http://") or src.startswith("https://"): name = src.rsplit("/", 1)[-1] name = urllib.unquote(name) self.on_progress(_("Downloading {0}...".format(name))) dest = os.path.join(self.temp_dir, name) DownloadService.install_file_from_url(src, dest) self.config[key] = name return if src.startswith("db://"): parts = src.split("/") sha1 = parts[2].strip() dest_name = parts[-1].strip() database = Database() src = database.find_file(sha1=sha1) else: dest_name = os.path.basename(src) src, archive = self.expand_default_path(src, Settings.get_floppies_dir()) dest = os.path.join(self.temp_dir, dest_name) #shutil.copy2(src, dest) archive.copy(src, dest) self.config[key] = os.path.basename(dest) def copy_floppies(self): print("LaunchHandler.copy_floppies") self.on_progress(_("Preparing floppy images...")) floppies = [] for i in range(Amiga.MAX_FLOPPY_DRIVES): key = "floppy_drive_{0}".format(i) if self.config[key]: floppies.append(self.config[key]) self.copy_floppy(key) for i in range(Amiga.MAX_FLOPPY_IMAGES): key = "floppy_image_{0}".format(i) if self.config[key]: break else: print("floppy image list is empty") for i, floppy in enumerate(floppies): self.config["floppy_image_{0}".format(i)] = floppy max_image = -1 for i in range(Amiga.MAX_FLOPPY_IMAGES): key = "floppy_image_{0}".format(i) self.copy_floppy(key) if self.config.get(key): max_image = i save_image = max_image + 1 s = pkg_resources.resource_stream(str("fs_uae_launcher"), str("res/adf_save_disk.dat")) data = s.read() data = zlib.decompress(data) save_disk = os.path.join(self.temp_dir, u"Save Disk.adf") with open(save_disk, "wb") as f: f.write(data) key = "floppy_image_{0}".format(save_image) self.config[key] = "Save Disk.adf" def prepare_cdroms(self): print("LaunchHandler.prepare_cdroms") if not self.config.get("cdrom_drive_count"): if self.config.get("cdrom_drive_0") or \ self.config.get("cdrom_image_0"): self.config["cdrom_drive_count"] = "1" cdroms = [] for i in range(Amiga.MAX_CDROM_DRIVES): key = "cdrom_drive_{0}".format(i) if self.config[key]: cdroms.append(self.config[key]) for i in range(Amiga.MAX_CDROM_IMAGES): key = "cdrom_image_{0}".format(i) if self.config[key]: break else: print("CD-ROM image list is empty") for i, cdrom in enumerate(cdroms): self.config["cdrom_image_{0}".format(i)] = cdrom def prepare_hard_drives(self): print("LaunchHandler.prepare_hard_drives") self.on_progress(_("Preparing hard drives...")) for i in range(0, 10): key = "hard_drive_{0}".format(i) src = self.config.get(key, "") dummy, ext = os.path.splitext(src) ext = ext.lower() if src.startswith("http://") or src.startswith("https://"): name = src.rsplit("/", 1)[-1] name = urllib.unquote(name) self.on_progress(_("Downloading {0}...".format(name))) dest = os.path.join(self.temp_dir, name) DownloadService.install_file_from_url(src, dest) src = dest elif src.startswith("hd://game/"): self.unpack_game_hard_drive(i, src) self.disable_save_states() return elif src.startswith("hd://template/workbench/"): self.prepare_workbench_hard_drive(i, src) self.disable_save_states() return elif src.startswith("hd://template/empty/"): self.prepare_empty_hard_drive(i, src) self.disable_save_states() return if ext in [".zip", ".lha"]: print("zipped hard drive", src) self.unpack_hard_drive(i, src) self.disable_save_states() elif src.endswith("HardDrive"): print("XML-described hard drive", src) self.unpack_hard_drive(i, src) self.disable_save_states() else: src = Paths.expand_path(src) self.config[key] = src def disable_save_states(self): # Save states cannot currently be used with temporarily created # hard drives, as HD paths are embedded into the save states, and # restoring the save state causes problems. if Settings.get("unsafe_save_states") == "1": return self.config["save_states"] = "0" def prepare_workbench_hard_drive(self, i, src): #dir_name = "DH{0}".format(i) dir_name = src.rsplit("/", 1)[-1] dir_path = os.path.join(self.temp_dir, dir_name) if not os.path.exists(dir_path): os.makedirs(dir_path) amiga_model = self.config.get("amiga_model", "A500") if amiga_model.startswith("A1200") or \ amiga_model.startswith("A4000") or \ amiga_model.startswith("A3000"): workbench = "Minimal Workbench v3.1" elif amiga_model == "A600": workbench = "Minimal Workbench v2.05" elif amiga_model == "A500+": workbench = "Minimal Workbench v2.04" else: workbench = "Minimal Workbench v1.3" print("Try to find pre-configured hard drive", workbench) src_dir = os.path.join(Settings.get_hard_drives_dir(), workbench) if src_dir and os.path.exists(src_dir): print("found", src_dir) self.copy_folder_tree(src_dir, dir_path) else: print(" - not found -") raise Exception("Did not found pre-configured hard drive " + repr(workbench)) self.config["hard_drive_{0}".format(i)] = dir_path def prepare_empty_hard_drive(self, i, src): dir_name = src.rsplit("/", 1)[-1] #dir_name = "DH{0}".format(i) dir_path = os.path.join(self.temp_dir, dir_name) if not os.path.exists(dir_path): os.makedirs(dir_path) self.config["hard_drive_{0}".format(i)] = dir_path def unpack_game_hard_drive(self, drive_index, src): scheme, dummy, dummy, game_uuid, drive = src.split("/") drive_prefix = drive + "/" database = Database() game_database = GameDatabase.get_instance() game_database_client = GameDatabaseClient(game_database) game_id = game_database_client.get_game_id(game_uuid) values = game_database_client.get_final_game_values(game_id) file_list = json.loads(values["file_list"]) dir_name = "DH{0}".format(drive_index) dir_path = os.path.join(self.temp_dir, dir_name) for file_entry in file_list: name = file_entry["name"] if not name.startswith(drive_prefix): continue # extract Amiga relative path and convert each path component # to host file name (where needed). amiga_rel_path = name[len(drive_prefix):] print("amiga_rel_path", amiga_rel_path) amiga_rel_parts = amiga_rel_path.split("/") for i, part in enumerate(amiga_rel_parts): # part can be blank if amiga_rel_parts is a directory # (ending with /) if part: amiga_rel_parts[i] = amiga_filename_to_host_filename(part) amiga_rel_path = "/".join(amiga_rel_parts) dst_file = os.path.join(dir_path, amiga_rel_path) print(repr(dst_file)) if name.endswith("/"): os.makedirs(fs.encode_path(dst_file)) continue sha1 = file_entry["sha1"] src_file = database.find_file(sha1=sha1) if not os.path.exists(os.path.dirname(dst_file)): os.makedirs(os.path.dirname(dst_file)) archive = Archive(src_file) f = archive.open(src_file) data = f.read() with open(dst_file, "wb") as out_file: out_file.write(data) metadata = ["----rwed", " ", "2000-01-01 00:00:00.00", " ", "", "\n"] if "comment" in file_entry: metadata[4] = self.encode_file_comment(file_entry["comment"]) with open(dst_file + ".uaem", "wb") as out_file: out_file.write("".join(metadata)) self.config["hard_drive_{0}".format(drive_index)] = dir_path def encode_file_comment(self, comment): result = [] #raw = 0 for c in comment: # if c == '%': # result.append("%") # raw = 2 # elif raw: # result.append(c) # raw = raw - 1 # else: # result.append("%{0:x}".format(ord(c))) result.append("%{0:x}".format(ord(c))) return "".join(result) def unpack_hard_drive(self, i, src): src, archive = self.expand_default_path(src, Settings.get_hard_drives_dir()) dir_name = "DH{0}".format(i) dir_path = os.path.join(self.temp_dir, dir_name) #self.unpack_zip(zip_path, dir_path) self.unpack_archive(src, dir_path) self.config["hard_drive_{0}".format(i)] = dir_path def copy_whdload_files(self): whdload_args = self.config.get("x_whdload_args", "").strip() if not whdload_args: return print("LaunchHandler.copy_whdload_files") self.on_progress(_("Preparing WHDLoad...")) dest_dir = os.path.join(self.temp_dir, "DH0") print("copy_whdload_files, dest_dir = ", dest_dir) #src_dir = os.path.join(fs.get_home_dir(), "Games", "Amiga", "WHDLoad") whdload_dir = "" slave = whdload_args.split(" ", 1)[0] slave = slave.lower() found_slave = False for dir_path, dir_names, file_names in os.walk(dest_dir): for name in file_names: #print(name, slave) if name.lower() == slave: print("found", name) found_slave = True whdload_dir = dir_path[len(dest_dir):] whdload_dir = whdload_dir.replace("\\", "/") if whdload_dir[0] == "/": whdload_dir = whdload_dir[1:] break if found_slave: break if not found_slave: raise Exception("Did not find the specified WHDLoad slave. " "Check the WHDLoad arguments") print("WHDLoad dir:", repr(whdload_dir)) print("WHDLoad args:", whdload_args) s_dir = os.path.join(dest_dir, "S") if not os.path.exists(s_dir): os.makedirs(s_dir) libs_dir = os.path.join(dest_dir, "Libs") if not os.path.exists(libs_dir): os.makedirs(libs_dir) devs_dir = os.path.join(dest_dir, "Devs") if not os.path.exists(devs_dir): os.makedirs(devs_dir) system_configuration_file = os.path.join(devs_dir, "system-configuration") if not os.path.exists(system_configuration_file): with open(system_configuration_file, "wb") as f: f.write(system_configuration) self.copy_whdload_kickstart(dest_dir, "kick34005.A500", ["891e9a547772fe0c6c19b610baf8bc4ea7fcb785"]) self.copy_whdload_kickstart(dest_dir, "kick40068.A1200", ["e21545723fe8374e91342617604f1b3d703094f1"]) self.copy_whdload_kickstart(dest_dir, "kick40068.A4000", ["5fe04842d04a489720f0f4bb0e46948199406f49"]) self.create_whdload_prefs_file(os.path.join(s_dir, "WHDLoad.prefs")) self.copy_setpatch(dest_dir) whdload_version = self.config["x_whdload_version"] for key, value in whdload_files[whdload_version].iteritems(): self.install_whdload_file(key, dest_dir, value) for key, value in whdload_support_files.iteritems(): self.install_whdload_file(key, dest_dir, value) if self.config["__netplay_game"]: print("WHDLoad key is not copied in net play mode") else: key_file = os.path.join(Settings.get_base_dir(), "WHDLoad.key") if os.path.exists(key_file): print("found WHDLoad.key at ", key_file) shutil.copy(key_file, os.path.join(s_dir, "WHDLoad.key")) else: print("WHDLoad key not found in base dir (FS-UAE dir)") # temporary feature, at least until it's possible to set more # WHDLoad settings directly in the Launcher prefs_file = os.path.join(Settings.get_base_dir(), "WHDLoad.prefs") if os.path.exists(prefs_file): print("found WHDLoad.prefs at ", prefs_file) shutil.copy(prefs_file, os.path.join(s_dir, "WHDLoad.prefs")) else: print("WHDLoad key not found in base dir (FS-UAE dir)") if self.config["__netplay_game"]: print("WHDLoad base dir is not copied in net play mode") else: src_dir = Settings.get_whdload_dir() if src_dir and os.path.exists(src_dir): print("WHDLoad base dir exists, copying resources...") self.copy_folder_tree(src_dir, dest_dir) startup_sequence = os.path.join(s_dir, "Startup-Sequence") if not os.path.exists(startup_sequence): with open(startup_sequence, "wb") as f: f.write(setpatch_sequence.replace( "\r\n", "\n").encode("ISO-8859-1")) f.write(whdload_sequence.format(whdload_dir, whdload_args).replace( "\r\n", "\n").encode("ISO-8859-1")) # The User-Startup file is useful if the user has provided a # base WHDLoad directory with an existing startup-sequence user_startup = os.path.join(s_dir, "User-Startup") with open(user_startup, "ab") as f: f.write(whdload_sequence.format(whdload_dir, whdload_args).replace( "\r\n", "\n").encode("ISO-8859-1")) def install_whdload_file(self, sha1, dest_dir, rel_path): abs_path = os.path.join(dest_dir, rel_path) name = os.path.basename(rel_path) self.on_progress(_("Downloading {0}...".format(name))) DownloadService.install_file_by_sha1(sha1, name, abs_path) def create_whdload_prefs_file(self, path): default_prefs = """ ;ButtonWait ;wait for button pressed (slave must support this) ;ChipNoCache ;disable cachebility of Chip-Memory ;CoreDumpPath=T: ;path for coredump files ;DebugKey=$5b ;rawkey code to quit with coredump (debug) ;ExecuteStartup=rx offline.rexx ;command to execute on WHDLoad startup ;ExecuteCleanup=rx online.rexx ;command to execute on WHDLoad exit ;Expert ;selects expert mode ;FreezeKey=$5d ;rawkey code to enter HrtMon/TK ;MMU ;use MMU (for 68030) ;NoAutoVec ;ignore unwanted autovector interrupts ;NoFilter ;disable audio filter ;NoFlushMem ;do not flush memory ;NoMemReverse ;do not allocate memory reverse ;NoWriteCache ;disable the disk write cache ;QuitKey=$45 ;ReadDelay=150 ;wait after reading from disk (1/50 seconds) ;RestartKey=$5c ;rawkey code to restart ;ShowRegs=SYS:Utilities/MuchMore W WL=80 WT=80 WW=582 WH=700 ;command for Show Regs ;SplashDelay=0 ;time to display splash window (1/50 seconds) ;WriteDelay=150 ;wait after saving something to disk (1/50 seconds) """ # make sure the data is CRLF line terminated default_prefs = default_prefs.replace("\r\n", "\n") default_prefs = default_prefs.replace("\n", "\r\n") with open(path, "wb") as f: f.write(default_prefs) def copy_setpatch(self, base_dir): dest = os.path.join(base_dir, "C") if not os.path.exists(dest): os.makedirs(dest) dest = os.path.join(dest, "SetPatch") for checksum in workbench_disks_with_setpatch_39_6: path = Database().find_file(sha1=checksum) if path: print("found WB DISK with SetPatch 39.6 at", path) archive = Archive(path) if archive.exists(path): f = archive.open(path) wb_data = f.read() f.close() if self.extract_setpatch_39_6(wb_data, dest): return else: print("WARNING: extract_setpatch_39_6 returned False") else: print("WARNING: did not find SetPatch 39.6") def extract_setpatch_39_6(self, wb_data, dest): extractor = ADFFileExtractor(wb_data) try: setpatch_data = extractor.extract_file("C/SetPatch") except KeyError: return False s = hashlib.sha1() s.update(setpatch_data) print(s.hexdigest()) if s.hexdigest() != "4d4aae988310b07726329e436b2250c0f769ddff": return False with open(dest, "wb") as f: f.write(setpatch_data) return True def copy_whdload_kickstart(self, base_dir, name, checksums): dest = os.path.join(base_dir, "Devs", "Kickstarts") if not os.path.exists(dest): os.makedirs(dest) dest = os.path.join(dest, name) for checksum in checksums: #print("find kickstart with sha1", checksum) path = Database().find_file(sha1=checksum) if path:# and os.path.exists(path): print("found kickstart for", name, "at", path) archive = Archive(path) if archive.exists(path): with open(dest, "wb") as f: ROMManager.decrypt_archive_rom(archive, path, file=f) print(repr(dest)) break else: print("did not find kickstart for", name) def get_state_dir(self): return self.game_handler.get_state_dir() def init_changes(self): print("LaunchHandler.init_changes") self.on_progress(_("Restoring changes...")) self.change_handler.init(self.get_state_dir(), ignore=["*.uss", "*.sdf"]) def update_changes(self): print("LaunchHandler.update_changes") self.on_progress(_("Saving changes...")) self.change_handler.update(self.get_state_dir()) def cleanup(self): print("LaunchHandler.cleanup") self.on_progress(_("Cleaning up...")) #self.delete_tree(self.temp_dir) shutil.rmtree(self.temp_dir, ignore_errors=True) state_dir = self.get_state_dir() try: # this will only succeed if the directory is empty -we don't # want to leave unnecessary empty state directories os.rmdir(state_dir) print("removed", repr(state_dir)) # also try to remove the parent (letter dir) os.rmdir(os.path.dirname(state_dir)) print("removed", repr(os.path.dirname(state_dir))) except OSError, e: # could not delete directories - ok - probably has content pass def prepare_theme(self): path = self.game_handler.get_theme_path() if path: self.config["theme"] = path def prepare_extra_settings(self): prefix = self.config.get("screenshots_output_prefix", "") if prefix: return #name = self.config.get("floppy_drive_0", "") #if not name: # name = self.config.get("hard_drive_0", "") #if not name: # name = self.config.get("cdrom_drive_0", "") #if not name: # name = self.config.get("floppy_image_0", "") name = self.config_name if not name: name = "fs-uae" name, variant = GameNameUtil.extract_names(name) name = GameNameUtil.create_cmpname(name) self.config["screenshots_output_prefix"] = name def create_config(self): config = ConfigWriter(self.config).create_fsuae_config() return config def start(self): print("LaunchHandler.start") self.on_progress(_("Starting FS-UAE...")) config = self.create_config() process, config_file = FSUAE.start_with_config(config) process.wait() print("LaunchHandler.start is done") print("removing", config_file) try: os.remove(config_file) except Exception: print("could not remove config file", config_file) def unpack_archive(cls, path, destination): #try: print("unpack", path, "to", destination) archive = Archive(path) print(archive) print(archive.get_handler()) for name in archive.list_files(): print(name) f = archive.open(name) n = name[len(path) + 1:] out_path = os.path.join(destination, n) print("out path", out_path) if not os.path.exists(os.path.dirname(out_path)): os.makedirs(os.path.dirname(out_path)) with open(out_path, "wb") as out_f: while True: data = f.read(65536) if not data: break out_f.write(data) #raise Exception("unpack") #zip = zipfile.ZipFile(archive, "r") # #def extract_members(zip): # for name in zip.namelist(): # if ".." in name: # continue # if not os.path.normpath(os.path.join(destination, name) # ).startswith(destination): # raise Exception("Invalid path") # yield name #zip.extractall(path=destination, members=extract_members(zip)) #zip.close() #except Exception, e: # print(e) # raise fs.cause(Exception("Could not unpack game"), e) def unpack_zip(cls, archive, destination): try: print("unpack", archive, "to", destination) zip = zipfile.ZipFile(archive, "r") def extract_members(zip): for name in zip.namelist(): if ".." in name: continue if not os.path.normpath(os.path.join(destination, name) ).startswith(destination): raise Exception("Invalid path") yield name zip.extractall(path=destination, members=extract_members(zip)) zip.close() except Exception, e: print(e) raise fs.cause(Exception("Could not unpack game"), e) def copy_folder_tree(cls, sourcepath, destpath, overwrite=False): for item in os.listdir(sourcepath): if item[0] == ".": continue itempath = os.path.join(sourcepath, item) destitempath = os.path.join(destpath, item) if os.path.isdir(itempath): if not os.path.exists(destitempath): os.makedirs(destitempath) cls.copy_folder_tree(itempath, destitempath) else: if overwrite or not os.path.exists(destitempath): print("copy", repr(itempath), "to", repr(destitempath)) shutil.copy(itempath, destitempath) EVILCHARS = '%\\*?\"/|<>' def amiga_filename_to_host_filename(amiga_filename, ascii=False): """ Converted from FS-UAE C code (src/od-fs/fsdb-host.py) @author: TheCyberDruid """ length = len(amiga_filename) repl_1 = -1 repl_2 = -1 check = amiga_filename[:3].upper() dot_pos = -1 if check in ["AUX", "CON", "PRN", "NUL"]: dot_pos = 4 elif check in ["LPT", "COM"] and length >= 4 and amiga_filename[3].isdigit(): dot_pos = 5 if (dot_pos > -1 and (length == (dot_pos - 1) or (length > dot_pos and \ amiga_filename[dot_pos] == "."))): repl_1 = 2 if (amiga_filename[-1] == "." or amiga_filename[-1] == " "): repl_2 = length - 1 i = 0 filename = "" for char in amiga_filename: x = ord(char) repl = False if (i == repl_1): repl = True elif (i == repl_2): repl = True elif (x < 32): repl = True elif (ascii and x > 127): repl = True if (not repl): for evil in EVILCHARS: if (evil == char): repl = True break if (i == length - 1) and amiga_filename[-5:] == ".uaem": repl = True if (repl): filename += "%" + "%02x" % ord(char) else: filename += char i += 1 return filename whdload_support_files = { "1ad1b55e7226bd5cd66def8370a69f19244da796": "Devs/Kickstarts/kick40068.A1200.RTB", "209c109855f94c935439b60950d049527d2f2484": "Devs/Kickstarts/kick34005.A500.RTB", "973b42dcaf8d6cb111484b3c4d3b719b15f6792d": "Devs/Kickstarts/kick40068.A4000.RTB", "09e4d8a055b4a9801c6b011e7a3de42bafaf070d": "C/uae-configuration", } # Other 17.0 files # "100d80eead41511dfef6086508b1f77d3c1672a8": "C/RawDIC", # "e1b6c3871d8327f771874b17258167c2a454029a": "C/Patcher", # "57f29b23cff0107eec81b98159ce304ccd69441a": "C/WHDLoadCD32", # "2fcb5934019133ed7a2069e333cdbc349ecaa7ee": "C/DIC", # Other 17.1 files # "100d80eead41511dfef6086508b1f77d3c1672a8": "C/RawDIC", # "e1b6c3871d8327f771874b17258167c2a454029a": "C/Patcher", # "a4f425b2c7e29600a970abd90f70a4dd4804c01c": "C/WHDLoadCD32", # "2fcb5934019133ed7a2069e333cdbc349ecaa7ee": "C/DIC", whdload_files = { "10.0": { "3096b2f41dfebf490aac015bdf0e91a80045c2c0": "C/WHDLoad", }, "13.0": { "4bcb393e820d68b0520da9131e0d529018e303d1": "C/WHDLoad", }, "16.0": { "883b9e37bc81fc081f78a3f278b732f97bdddf5c": "C/WHDLoad", }, "16.1": { "250506c2444d9fb89b711b4fba5d70dd554e6f0e": "C/WHDLoad", }, "16.2": { "a8bc2828c7da88f6236a8e82c763c71582f66cfd": "C/WHDLoad", }, "16.3": { "5d636899fa9332b7dfccd49df3447238b5b71e49": "C/WHDLoad", }, "16.4": { "1bb42fc83ee9237a6cfffdf15a3eb730504c9f65": "C/WHDLoad", }, "16.5": { "8974e6c828ac18ff1cc29e56a31da0775ddeb0f0": "C/WHDLoad", }, "16.6": { "b268bf7a05630d5b2bbf99616b32f282bac997bf": "C/WHDLoad", }, "16.7": { "be94bc3d70d5980fac7fd04df996120e8220c1c0": "C/WHDLoad", }, "16.8": { "a3286827c821386ac6e0bb519a7df807550d6a70": "C/WHDLoad", }, "16.9": { "b4267a21918d6375e1bbdcaee0bc8b812e366802": "C/WHDLoad", }, "17.0": { "0ec213a8c62beb3eb3b3509aaa44f21405929fce": "C/WHDLoad", }, "17.1": { "1a907ca4539806b42ad5b6f7aeebacb3720e840d": "C/WHDLoad", }, "2013-03-01": { "7ee8516eceb9e799295f1b16909749d08f13d26c": "C/WHDLoad", } } system_configuration = b"\x08\x00\x00\x05\x00\x00\x00\x00\x00\x00" \ b"\xc3P\x00\x00\x00\x00\x00\t'\xc0\x00\x00\x00\x01\x00\x00N \x00\x00\x00\x00" \ b"\xc0\x00@\x00p\x00\xb0\x00<\x00L\x00?\x00C\x00\x1f\xc0 \xc0\x1f\xc0 \x00" \ b"\x0f\x00\x11\x00\r\x80\x12\x80\x04\xc0\t@\x04`\x08\xa0\x00 \x00@\x00\x00" \ b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" \ b"\x00\x00\x00\x00\xff\x00\x0eD\x00\x00\x0e\xec\x00\x01\n\xaa\x00\x00\x0f" \ b"\xff\x06\x8b\x00\x00\x00\x81\x00,\x00\x00\x00\x00generic\x00\x00\x00\x00" \ b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" \ b"\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00K\x00\x00\x00\x00\x00\x00\x00\x07" \ b"\x00 \x00B\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" \ b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" \ b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00" workbench_disks_with_setpatch_39_6 = [ # Workbench v3.0 rev 39.29 (1992)(Commodore)(A1200-A4000)(M10)(Disk 1 of 6)(Install).adf "ba24b4172339b9198e4f724a6804d0c6eb5e394b", # Workbench v3.0 rev 39.29 (1992)(Commodore)(A1200-A4000)(M10)(Disk 1 of 6)(Install)[a].adf "c0781dece2486b54e15ce54a9b24dec6d9429421", # Workbench v3.0 rev 39.29 (1992)(Commodore)(A1200-A4000)(M10)(Disk 1 of 6)(Install)[m drive definitions].adf "7eeb2511ce34f8d3f09efe82b290bddeb899d237", # Workbench v3.0 rev 39.29 (1992)(Commodore)(A1200-A4000)(M10)(Disk 1 of 6)(Install)[m2].adf "7271d7db4472e10fbe4b266278e16f03336c14e3", # Workbench v3.0 rev 39.29 (1992)(Commodore)(A1200-A4000)(M10)(Disk 1 of 6)(Install)[m3].adf "92c2f33bb73e1bdee5d9a0dc0f5b09a15524f684", # Workbench v3.0 rev 39.29 (1992)(Commodore)(A1200-A4000)(M10)(Disk 2 of 6)(Workbench)[!].adf "e663c92a9c88fa38d02bbb299bea8ce70c56b417", # Workbench v3.0 rev 39.29 (1992)(Commodore)(A1200-A4000)(M10)(Disk 2 of 6)(Workbench)[a2].adf "65ab988e597b456ac40320f88a502fc016d590aa", # Workbench v3.0 rev 39.29 (1992)(Commodore)(A1200-A4000)(M10)(Disk 2 of 6)(Workbench)[a].adf "9496daa66e6b2f4ddde4fa2580bb3983a25e3cd2", # Workbench v3.0 rev 39.29 (1992)(Commodore)(A1200-A4000)(M10)(Disk 2 of 6)(Workbench)[m2].adf "cf2f24cf5f5065479476a38ec8f1016b1f746884", # Workbench v3.0 rev 39.29 (1992)(Commodore)(A1200-A4000)(M10)(Disk 2 of 6)(Workbench)[m3].adf "0e7f30223af254df0e2b91ea409f35c56d6164a6", # Workbench v3.0 rev 39.29 (1992)(Commodore)(A1200-A4000)(M10)(Disk 2 of 6)(Workbench)[m4].adf "08c4afde7a67e6aaee1f07af96e95e9bed897947", # amiga-os-300-workbench.adf # Workbench v3.0 rev 39.29 (1992)(Commodore)(A1200-A4000)(M10)(Disk 2 of 6)(Workbench)[m5].adf "4f4770caae5950eca4a2720e0424df052ced6a32", # Workbench v3.0 rev 39.29 (1992)(Commodore)(A1200-A4000)(M10)(Disk 2 of 6)(Workbench)[m].adf "53086c3e44ec2d34e60ab65af71fb11941f4e0af", ] setpatch_sequence = """ IF EXISTS C:SetPatch C:SetPatch ELSE echo "Warning: SetPatch (39.6) not found." echo "Make sure a WB 3.0 disk is scanned in FS-UAE Launcher" echo "and the file will automatically be copied from the disk." EndIF """ whdload_sequence = """ cd "{0}" WHDLoad {1} uae-configuration SPC_QUIT 1 """ class TestCase(unittest.TestCase): def test_convert_amiga_file_name(self): result = amiga_filename_to_host_filename("pro.i*riska") self.assertEquals(result, "pro.i%2ariska") def test_convert_amiga_file_name_2(self): result = amiga_filename_to_host_filename("mypony.uaem") self.assertEquals(result, "mypony.uae%6d") def test_convert_amiga_file_name_short(self): result = amiga_filename_to_host_filename("t") self.assertEquals(result, "t") def test_convert_amiga_file_name_short_2(self): result = amiga_filename_to_host_filename("t ") self.assertEquals(result, "t%20") def test_convert_amiga_file_name_lpt1(self): result = amiga_filename_to_host_filename("LPT1") self.assertEquals(result, "LP%541") def test_convert_amiga_file_name_aux(self): result = amiga_filename_to_host_filename("AUX") self.assertEquals(result, "AU%58") if __name__ == '__main__': unittest.main() fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/Warnings.py0000644000175000017500000000042012162366654023136 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals class Warnings: @classmethod def set(cls, category, item, text): print("WARNING:", category, item, text) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/ConfigChecker.py0000644000175000017500000000431512162366654024047 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import traceback from .Config import Config class ConfigChecker: def __init__(self): Config.add_listener(self) def on_config(self, key, value): if key == "floppy_drive_0" and value: if not Config.get("x_floppy_drive_0_sha1"): print("") traceback.print_stack() print("(floppy_drive_0 set without x_floppy_drive_0_sha1)") print("") elif key == "floppy_image_0" and value: if not Config.get("x_floppy_image_0_sha1"): print("") traceback.print_stack() print("(floppy_image_0 set without x_floppy_image_0_sha1)") print("") elif key == "hard_drive_0" and value: if not Config.get("x_hard_drive_0_sha1"): print("") traceback.print_stack() print("(hard_drive_0 set without x_hard_drive_0_sha1)") print("") elif key == "kickstart_file" and value: if not Config.get("x_kickstart_file_sha1"): print("") traceback.print_stack() print("(kickstart_file set without x_kickstart_file_sha1)") print("") elif key == "x_kickstart_file" and value: if not Config.get("x_kickstart_file_sha1"): print("") traceback.print_stack() print("(x_kickstart_file set without x_kickstart_file_sha1)") print("") elif key == "kickstart_ext_file" and value: if not Config.get("x_kickstart_ext_file_sha1"): print("") traceback.print_stack() print("(kickstart_ext_file set without x_kickstart_ext_file_sha1)") print("") elif key == "x_kickstart_ext_file" and value: if not Config.get("x_kickstart_ext_file_sha1"): print("") traceback.print_stack() print("(x_kickstart_ext_file set without x_kickstart_ext_file_sha1)") print("") fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/Database.py0000644000175000017500000004430512162366654023064 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import os import sqlite3 from .Settings import Settings class Database: VERSION = 7 instance = None @classmethod def get_database_path(self): launcher_dir = Settings.get_launcher_dir() for i in range(8): if i: path = os.path.join(launcher_dir, "Database{0}.sqlite".format(i)) else: path = os.path.join(launcher_dir, "Database.sqlite") if os.path.exists(path): try: os.remove(path) except Exception: pass path = os.path.join(launcher_dir, "Launcher.sqlite") return path @classmethod def get_instance(cls): if not cls.instance: cls.instance = Database() return cls.instance def __init__(self): self.connection = None self._cursor = None def init(self): if self.connection: return self.connection = sqlite3.connect(self.get_database_path()) self._cursor = self.connection.cursor() self._cursor = self._cursor self.ensure_updated_database() def cursor(self): self.init() return self.connection.cursor() def get_files(self, ext=None): self.init() query = "SELECT path, name FROM file WHERE 1 = 1 " args = [] if ext is not None: query = query + " AND path like ?" args.append("%" + ext) self._cursor.execute(query, args) results = [] for row in self._cursor: data = { "path": self.decode_path(row[0]), "name": row[1] } results.append(data) return results def get_configuration_path(self, id): self.init() query = "SELECT path FROM configuration WHERE id = ?" self._cursor.execute(query, (id,)) path = self.decode_path(self._cursor.fetchone()[0]) return path def get_config(self, id): self.init() query = "SELECT name, uuid, path, data, game_rating.work_rating, " \ "game_rating.like_rating FROM configuration LEFT JOIN " \ "game_rating ON game_rating.game = uuid WHERE id = ?" self._cursor.execute(query, (id,)) row = self._cursor.fetchone() return { "name": row[0], "uuid": row[1], "path": self.decode_path(row[2]), "data": row[3], "work_rating": row[4], "like_rating": row[5], } def get_game_info(self, id): self.init() query = "SELECT name, uuid, path FROM game WHERE id = ?" self._cursor.execute(query, (id,)) row = self._cursor.fetchone() return { "name": row[0], "uuid": row[1], "path": self.decode_path(row[2]), } def encode_path(self, path): # this only works if both path and Settings.base_dir (etc) have been # normalized with get_real_case. path = path.replace("\\", "/") base_dir = Settings.get_base_dir() if path.startswith(base_dir): path = path[len(base_dir):] if path.startswith("/"): path = path[1:] path = "$BASE/" + path return path def decode_path(self, path): if not path or path[0] != "$": return path base_dir = Settings.get_base_dir() + "/" # FIXME: $base_dir is deprecated path = path.replace("$base_dir/", base_dir) path = path.replace("$BASE/", base_dir) return path def find_local_configurations(self): self.init() #query = "SELECT id, path FROM configuration WHERE path like ?" #args = ["$BASE/Configurations/%"] #self._cursor.execute(query, args) a = "$BASE/Configurations/" b = "$BASE/Configurations" + "\u0030" # one more than forward slash query = "SELECT id, path FROM configuration WHERE " \ "path >= ? AND path < ?" self._cursor.execute(query, (a, b)) result = {} for row in self._cursor.fetchall(): result[self.decode_path(row[1])] = row[0] return result def delete_configuration(self, id=-1, path=None): self.init() if path is not None: query = "DELETE FROM configuration WHERE path = ?" path = self.encode_path(path) args = [path] else: query = "DELETE FROM configuration WHERE id = ?" args = [id] self._cursor.execute(query, args) def find_local_roms(self): self.init() a = "$BASE/Kickstarts/" b = "$BASE/Kickstarts" + "\u0030" # one more than forward slash query = "SELECT id, path FROM file WHERE path >= ? AND path < ?" #args = ["$BASE/Kickstarts/%"] self._cursor.execute(query, (a, b)) result = {} for row in self._cursor.fetchall(): result[self.decode_path(row[1])] = row[0] return result def delete_file(self, id=-1, path=None): self.init() if path is not None: query = "DELETE FROM file WHERE path = ?" path = self.encode_path(path) args = [path] else: query = "DELETE FROM file WHERE id = ?" args = [id] self._cursor.execute(query, args) def search_configurations(self, search): self.init() query = "SELECT id, name, type, sort_key FROM configuration WHERE " \ "type < 2" args = [] for word in search.split(" "): word = word.strip().lower() if word: #if len(args) == 0: # query = query + " WHERE search like ?" #else: query = query + " AND search like ?" args.append("%{0}%".format(word)) query = query + " ORDER BY sort_key" self._cursor.execute(query, args) return self._cursor.fetchall() def find_game_variants(self, game_uuid): self.init() query = "SELECT id, name, uuid, configuration.like_rating, " \ "configuration.work_rating, game_rating.like_rating " \ "FROM configuration LEFT JOIN " \ "game_rating ON game_rating.game = uuid WHERE " \ "reference = ?" query = query + " ORDER BY name" print(query, game_uuid) self._cursor.execute(query, (game_uuid,)) return self._cursor.fetchall() def get_last_game_variant(self, game_uuid): query = "SELECT variant_uuid FROM last_variant WHERE game_uuid = ?" self._cursor.execute(query, (game_uuid,)) row = self._cursor.fetchone() if row: return row[0] return "" def set_last_game_variant(self, game_uuid, variant_uuid): self._cursor.execute("DELETE FROM last_variant WHERE game_uuid = ?", (game_uuid,)) self._cursor.execute("INSERT INTO last_variant (game_uuid, " "variant_uuid) VALUES (?, ?)", (game_uuid, variant_uuid)) #self._cursor.execute("UPDATE last_variant SET variant_uuid = ? " # "WHERE game_uuid = ?", (variant_uuid, game_uuid)) def search_games(self, search): self.init() query = "SELECT id, name FROM game" args = [] for word in search.split(" "): word = word.strip().lower() if word: if len(args) == 0: query = query + " WHERE search like ?" else: query = query + " AND search like ?" args.append("%{0}%".format(word)) query = query + " ORDER BY name" self._cursor.execute(query, args) return self._cursor.fetchall() def find_game(self, uuid="", result=None): self.init() if uuid: self._cursor.execute("SELECT path FROM game " "WHERE uuid = ? LIMIT 1", (uuid,)) row = self._cursor.fetchone() if row: path = self.decode_path(row[0]) if result is not None: result["path"] = path return path else: if result is not None: result["path"] = None return None def find_file(self, name="", sha1="", path="", result=None): self.init() if sha1: #print("xxx", repr(sha1)) #import traceback #traceback.print_stack() #print("check sha1") self._cursor.execute("SELECT id, path, sha1, mtime, size FROM file " "WHERE sha1 = ? LIMIT 1", (sha1,)) elif name: #print("check name") self._cursor.execute("SELECT id, path, sha1, mtime, size FROM file " "WHERE name = ? COLLATE NOCASE LIMIT 1", (name.lower(),)) else: path = self.encode_path(path) #print(path) #path = unicode(path) #print("SELECT path, sha1, mtime, size FROM file " # "WHERE path = '{0}' LIMIT 1".format(path)) #self._cursor.execute("SELECT count(*) FROM file " # "WHERE lower(path) = ?", (path.lower(),)) #self._cursor.execute("SELECT * FROM file LIMIT 1 OFFSET 100") #print(self._cursor.fetchall()) self._cursor.execute("SELECT id, path, sha1, mtime, size FROM file " "WHERE path = ? LIMIT 1", (path,)) row = self._cursor.fetchone() #print("---------", row) if row: #print(row) path = self.decode_path(row[1]) if result is not None: result["id"] = row[0] result["path"] = path result["sha1"] = row[2] result["mtime"] = row[3] result["size"] = row[4] return path else: if result is not None: result["id"] = None result["path"] = None result["sha1"] = None result["mtime"] = None result["size"] = None return None def add_file(self, path="", sha1=None, md5=None, crc32=None, mtime=0, size=0, scan=0, name=""): self.init() if not name: name = os.path.basename(path) path = self.encode_path(path) #print("adding path", path) #p, name = os.path.split(path) self._cursor.execute("INSERT INTO file (path, sha1, mtime, size, " "md5, crc32, name, scan) VALUES (?, ?, ?, ?, ?, ?, ?, ?)", (path, sha1, mtime, size, md5, crc32, name, scan)) def add_configuration(self, path="", uuid="", data="", name="", search="", scan=0, type=0, reference=None, like_rating=0, work_rating=0, sort_key=""): self.init() if not sort_key: sort_key = name.lower() path = self.encode_path(path) self._cursor.execute("INSERT INTO configuration (path, name, scan, " "search, uuid, data, type, reference, like_rating, " "work_rating, sort_key) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, " "?, ?)", (path, name, scan, search, uuid, data, type, reference, like_rating, work_rating, sort_key)) def ensure_game_configuration(self, uuid, name, sort_key, scan=0, type=1): self.init() self._cursor.execute("SELECT * FROM configuration WHERE uuid = ? " "AND name = ? AND sort_key = ? AND scan = ? AND type = ?", (uuid, name, sort_key, scan, type)) row = self._cursor.fetchone() if row is None: self._cursor.execute("DELETE from configuration WHERE uuid = ?", (uuid,)) search = name.lower() self.add_configuration(uuid=uuid, name=name, search=search, scan=scan, type=type, sort_key=sort_key) def add_game(self, uuid="", path="", name="", search="", scan=0): self.init() path = self.encode_path(path) self._cursor.execute("INSERT INTO game (uuid, path, name, scan, " "search) VALUES (?, ?, ?, ?, ?)", (uuid, path, name, scan, search)) def update_file_scan(self, id, scan): self.init() self._cursor.execute("UPDATE file SET scan = ? WHERE id = ?", (scan, id)) def update_archive_scan(self, path, scan): self.init() path = self.encode_path(path) #self._cursor.execute("UPDATE file SET scan = ? WHERE path like ?", # (scan, path + u"{0}%".format(unicode(os.sep)))) a = path + "\u002f" # forward slash b = path + "\u0030" # one more than forward slash self._cursor.execute("UPDATE file SET scan = ? WHERE " "path >= ? AND path < ?", (scan, a, b)) def remove_unscanned_files(self, scan): self.init() self._cursor.execute("DELETE FROM file WHERE scan != ?", (scan,)) def remove_unscanned_configurations(self, scan): self.init() self._cursor.execute("DELETE FROM configuration WHERE scan != ?", (scan,)) def remove_unscanned_games(self, scan): self.init() self._cursor.execute("DELETE FROM game WHERE scan != ?", (scan,)) def rollback(self): print("Database.rollback") self.init() self.connection.rollback() def commit(self): print("Database.commit") self.init() self.connection.commit() def clear(self): self.init() self._cursor.execute("DELETE FROM file") def ensure_updated_database(self): try: self._cursor.execute("SELECT version FROM metadata") version = self._cursor.fetchone()[0] except sqlite3.OperationalError: self._cursor.execute("CREATE TABLE metadata (version INTEGER)") self._cursor.execute("INSERT INTO metadata (version) VALUES (?)", (0,)) version = 0 if self.VERSION < version: raise Exception("GameDatabase: Installed database schema is " "newer. Have you started an old version?") if self.VERSION > version: self.update_database(version, self.VERSION) def update_database(self, old, new): for i in range(old + 1, new + 1): print("upgrading game database to version", i) getattr(self, "update_database_to_version_{0}".format(i))() self._cursor.execute("UPDATE metadata SET version = ?", (i,)) self.commit() def update_database_to_version_1(self): try: self._cursor.execute("SELECT count(*) FROM file") except sqlite3.OperationalError: self._cursor.execute("""CREATE TABLE file ( id integer primary key, path text, name text, sha1 text, md5 text, crc32 text, size integer, mtime integer, scan int )""") self._cursor.execute("CREATE INDEX file_sha1 ON file(sha1)") self._cursor.execute("CREATE INDEX file_path ON file(path)") self._cursor.execute("CREATE INDEX file_name ON file(name collate nocase)") try: self._cursor.execute("SELECT count(*) FROM configuration") except sqlite3.OperationalError: self._cursor.execute("""CREATE TABLE configuration ( id integer primary key, uuid text, path text, data text, name text, search text, scan int )""") self._cursor.execute("CREATE INDEX configuration_name " "ON configuration(name)") self._cursor.execute("CREATE INDEX configuration_search " "ON configuration(search)") self._cursor.execute("CREATE INDEX configuration_path " "ON configuration(path)") try: self._cursor.execute("SELECT count(*) FROM game") except sqlite3.OperationalError: self._cursor.execute("""CREATE TABLE game ( id integer primary key, uuid text, path text, name text, search text, scan int )""") self._cursor.execute("CREATE INDEX game_uuid " "ON game(uuid)") def update_database_to_version_2(self): self._cursor.execute("ALTER TABLE configuration " "ADD COLUMN type INTEGER NOT NULL DEFAULT 0") self._cursor.execute("UPDATE configuration SET type = 0") self._cursor.execute("ALTER TABLE configuration " "ADD COLUMN reference TEXT") self._cursor.execute("CREATE INDEX configuration_reference " "ON configuration(reference)") self._cursor.execute("CREATE INDEX configuration_type_search " "ON configuration(type, search)") def update_database_to_version_3(self): self._cursor.execute("""CREATE TABLE last_variant ( game_uuid CHAR(36) PRIMARY KEY, variant_uuid CHAR(36) NOT NULL )""") def update_database_to_version_4(self): self._cursor.execute("ALTER TABLE configuration " "ADD COLUMN work_rating INTEGER NOT NULL DEFAULT 0") self._cursor.execute("ALTER TABLE configuration " "ADD COLUMN like_rating INTEGER NOT NULL DEFAULT 0") self._cursor.execute("ALTER TABLE configuration " "ADD COLUMN keywords TEXT NOT NULL DEFAULT ''") def update_database_to_version_5(self): # Delete "old" Amiga Forever indexed ROMs self._cursor.execute("DELETE FROM file WHERE sha1 = ?", ("c39bd9094d4e5f4e28c1411f3086950406062e87",)) self._cursor.execute("DELETE FROM file WHERE sha1 = ?", ("c3c481160866e60d085e436a24db3617ff60b5f9",)) def update_database_to_version_6(self): self._cursor.execute("ALTER TABLE configuration " "ADD COLUMN sort_key TEXT NOT NULL DEFAULT ''") self._cursor.execute("UPDATE configuration " "SET sort_key = lower(name)") def update_database_to_version_7(self): self._cursor.execute(""" CREATE TABLE game_rating ( game VARCHAR(36) PRIMARY KEY NOT NULL, work_rating INT NOT NULL, like_rating INT NOT NULL, updated TIMESTAMP NULL ); """) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/UpdateManager.py0000644000175000017500000000304112162366654024065 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import urllib2 import traceback import threading from .Signal import Signal from .Version import Version import fs_uae_launcher.fs as fs class UpdateManager: @classmethod def run_update_check(cls): threading.Thread(target=cls.update_thread_function).start() @classmethod def update_thread_function(cls): try: cls._update_thread_function() except: traceback.print_exc() @classmethod def _update_thread_function(cls): series = Version.SERIES if fs.windows: platform = "windows" elif fs.macosx: platform = "macosx" elif fs.linux: platform = "linux" else: platform = "other" url = "http://fengestad.no/fs-uae/{0}/latest-{1}".format(series, platform) f = urllib2.urlopen(url) version_str = f.read().strip().decode("UTF-8") result = fs.compare_versions(version_str, Version.VERSION) print("update check result: ", result) if result > 0 and version_str != "9.9.9": # a new version is available #if series == "stable": # web_url = "http://fengestad.no/fs-uae/download" #else: web_url = "http://fengestad.no/fs-uae/{0}/download/".format( series) Signal.broadcast("update_available", version_str, web_url) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/Config.py0000644000175000017500000006100612162366654022562 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import os import hashlib import traceback import ConfigParser from .Amiga import Amiga from .Database import Database from .Settings import Settings from .Signal import Signal from .Util import expand_path from .ValueConfigLoader import ValueConfigLoader from .Version import Version from .Warnings import Warnings from .XMLConfigLoader import XMLConfigLoader # the order of the following keys is significant (for some keys). # multiple options should be set in this order since some options will # implicitly change other options. examples: # - amiga model can change kickstart and joystick modes # - file options should be set before corresponding sha1 options cfg = [ ("amiga_model", "A500", "checksum", "sync"), ("ntsc_mode", "", "checksum", "sync"), ("accuracy", "", "checksum", "sync"), ("chip_memory", "", "checksum", "sync"), ("slow_memory", "", "checksum", "sync"), ("fast_memory", "", "checksum", "sync"), ("zorro_iii_memory", "", "checksum", "sync"), ("bsdsocket_library", "", "checksum", "sync"), ("uaegfx_card", "", "checksum", "sync"), ("joystick_port_0", ""), ("joystick_port_0_mode", "", "checksum", "sync"), ("joystick_port_0_autofire", "", "checksum", "sync"), ("joystick_port_1", ""), ("joystick_port_1_mode", "", "checksum", "sync"), ("joystick_port_1_autofire", "", "checksum", "sync"), ("joystick_port_2", ""), ("joystick_port_2_mode", "", "checksum", "sync"), ("joystick_port_2_autofire", "", "checksum", "sync"), ("joystick_port_3", ""), ("joystick_port_3_mode", "", "checksum", "sync"), ("joystick_port_3_autofire", "", "checksum", "sync"), # this is not an Amiga device, so no need to checksum / sync ("joystick_port_4_mode", "", "custom"), ("kickstart_file", ""), ("x_kickstart_file", "", "nosave"), ("x_kickstart_file_sha1", "", "checksum", "sync", "nosave"), ("kickstart_ext_file", ""), ("x_kickstart_ext_file", "", "nosave"), ("x_kickstart_ext_file_sha1", "", "checksum", "sync", "nosave"), ("x_whdload_args", "", "checksum", "sync"), ("x_whdload_version", "17.1", "checksum", "sync"), ("floppy_drive_count", "", "checksum", "sync", "custom"), ("floppy_drive_speed", "", "checksum", "sync", "custom"), ("cdrom_drive_count", "", "checksum", "sync", "custom"), ("dongle_type", "", "checksum", "sync", "custom"), ("__netplay_game", "", "checksum", "sync"), ("__netplay_password", "", "checksum", "sync"), ("__netplay_players", "", "checksum", "sync"), ("__netplay_port", "", "sync"), ("__netplay_addresses", "", "checksum", "sync"), ("__netplay_host", ""), ("__netplay_ready", "0"), ("__netplay_state_dir_name", "", "checksum", "sync"), ("__version", Version.VERSION), ("x_game_uuid", ""), ("x_game_xml_path", ""), ("title", "", "custom"), ("sub_title", "", "custom"), ("viewport", "", "custom"), ("year", ""), ("developer", ""), ("publisher", ""), ("languages", ""), ("hol_url", ""), ("wikipedia_url", ""), ("database_url", ""), ("lemon_url", ""), ("mobygames_url", ""), ("__variant_rating", ""), ("screen1_sha1", ""), ("screen2_sha1", ""), ("screen3_sha1", ""), ("screen4_sha1", ""), ("screen5_sha1", ""), ("front_sha1", ""), ("title_sha1", ""), ] for i in range(Amiga.MAX_FLOPPY_DRIVES): cfg.append(("floppy_drive_{0}".format(i), "")) cfg.append(("x_floppy_drive_{0}_sha1".format(i), "", "checksum", "sync", "nosave")) for i in range(Amiga.MAX_FLOPPY_IMAGES): cfg.append(("floppy_image_{0}".format(i), "")) cfg.append(("x_floppy_image_{0}_sha1".format(i), "", "checksum", "sync", "nosave")) for i in range(Amiga.MAX_CDROM_DRIVES): cfg.append(("cdrom_drive_{0}".format(i), "")) cfg.append(("x_cdrom_drive_{0}_sha1".format(i), "", "checksum", "sync", "nosave")) for i in range(Amiga.MAX_CDROM_IMAGES): cfg.append(("cdrom_image_{0}".format(i), "")) cfg.append(("x_cdrom_image_{0}_sha1".format(i), "", "checksum", "sync", "nosave")) for i in range(Amiga.MAX_HARD_DRIVES): cfg.append(("hard_drive_{0}".format(i), "")) cfg.append(("hard_drive_{0}_label".format(i), "", "checksum", "sync")) cfg.append(("hard_drive_{0}_priority".format(i), "", "checksum", "sync")) cfg.append(("x_hard_drive_{0}_sha1".format(i), "", "checksum", "sync", "nosave")) class Config: config_keys = [x[0] for x in cfg] default_config = {} for c in cfg: default_config[c[0]] = c[1] key_order = [x[0] for x in cfg] checksum_keys = [x[0] for x in cfg if "checksum" in x] sync_keys_list = [x[0] for x in cfg if "sync" in x] sync_keys_set = set(sync_keys_list) no_custom_config = [x[0] for x in cfg if not "custom" in x] dont_save_keys_set = set([x[0] for x in cfg if "nosave" in x]) reset_values = {} for i in range(Amiga.MAX_FLOPPY_DRIVES): reset_values["floppy_drive_{0}".format(i)] = \ ("x_floppy_drive_{0}_sha1".format(i), "") for i in range(Amiga.MAX_FLOPPY_IMAGES): reset_values["floppy_image_{0}".format(i)] = \ ("x_floppy_image_{0}_sha1".format(i), "") for i in range(Amiga.MAX_CDROM_DRIVES): reset_values["cdrom_drive_{0}".format(i)] = \ ("x_cdrom_drive_{0}_sha1".format(i), "") for i in range(Amiga.MAX_CDROM_IMAGES): reset_values["cdrom_image_{0}".format(i)] = \ ("x_cdrom_image_{0}_sha1".format(i), "") for i in range(Amiga.MAX_HARD_DRIVES): reset_values["hard_drive_{0}".format(i)] = \ ("x_hard_drive_{0}_sha1".format(i), "") reset_values["x_kickstart_file"] = ("x_kickstart_file_sha1", "") reset_values["x_kickstart_ext_file"] = ("x_kickstart_ext_file_sha1", "") config = default_config.copy() #config_listeners = [] @classmethod def copy(cls): return cls.config.copy() @classmethod def get(cls, key): #return cls.config.setdefault(key, "") return cls.config.get(key, "") @classmethod def add_listener(cls, listener): #cls.config_listeners.append(listener) Signal.add_listener("config", listener) @classmethod def remove_listener(cls, listener): #cls.config_listeners.remove(listener) Signal.remove_listener("config", listener) @classmethod def set(cls, key, value): #if cls.get(key) == value: # print(u"set {0} to {1} (no change)".format(key, value)) # return #print(u"set {0} to {1}".format(key, value)) #cls.config[key] = value #for listener in cls.config_listeners: # listener.on_config(key, value) #if key != "__netplay_ready": # cls.set("__netplay_ready", "0") cls.set_multiple([(key, value)]) @classmethod def set_multiple(cls, items): # this will allow us to set multiple keys at a time, to provide # "atomic" setting of several keys before notifications are sent items = list(items) item_keys = [x[0] for x in items] changed_keys = set() def add_changed_key(key): try: priority = cls.key_order.index(key) except ValueError: priority = 1000 changed_keys.add((priority, key)) def change(key, value): #print("change", key, value) if old_config.get(key, "") == value: if value: print(u"set {0} to {1} (no change)".format(key, value)) return print(u"set {0} to {1}".format(key, value)) add_changed_key(key) cls.config[key] = value old_config = cls.config.copy() for key, value in items: change(key, value) try: reset_key, reset_value = cls.reset_values[key] #print(" ---", reset_key, reset_value) except KeyError: pass else: if reset_key not in item_keys: print(" -- reset --", reset_key, "to", repr(reset_value)) change(reset_key, reset_value) # and now broadcast all changed keys at once if len(changed_keys) > 0: for priority, key in sorted(changed_keys): #for listener in cls.config_listeners: # listener.on_config(key, cls.get(key)) Signal.broadcast("config", key, cls.get(key)) changed_keys = [x[1] for x in changed_keys] if "__netplay_ready" not in changed_keys: cls.set("__netplay_ready", "0") if len(changed_keys) > 0: Settings.set("config_changed", "1") @classmethod def update_from_config_dict(cls, config_dict): changes = [] for key, value in config_dict.iteritems(): if key in cls.config: if cls.config[key] != value: changes.append((key, value)) else: changes.append((key, value)) cls.set_multiple(changes) @classmethod def sync_items(cls): for key, value in cls.config.iteritems(): if key in cls.sync_keys_set: yield key, value @classmethod def checksum(cls): return cls.checksum_config(cls.config) @classmethod def checksum_config(cls, config): s = hashlib.sha1() for key in cls.checksum_keys: value = config[key] s.update(unicode(value).encode("UTF-8")) return s.hexdigest() @classmethod def update_kickstart_in_config_dict(cls, config_dict): print("update_kickstart_in_config") model = config_dict.setdefault("amiga_model", cls.default_config["amiga_model"]) kickstart_file = config_dict.setdefault("kickstart_file", "") if kickstart_file: config_dict["x_kickstart_file"] = config_dict["kickstart_file"] if kickstart_file == "internal": config_dict["x_kickstart_file_sha1"] = Amiga.INTERNAL_ROM_SHA1 else: # FIXME: set checksum pass else: checksums = Amiga.get_model_config(model)["kickstarts"] for checksum in checksums: path = Database.get_instance().find_file(sha1=checksum) if path: config_dict["x_kickstart_file"] = path config_dict["x_kickstart_file_sha1"] = checksum break else: print("WARNING: no suitable kickstart file found") config_dict["x_kickstart_file"] = "" config_dict["x_kickstart_file_sha1"], "" if config_dict.setdefault("kickstart_ext_file", ""): config_dict["x_kickstart_ext_file"] = \ config_dict["kickstart_ext_file"] # FIXME: set checksum else: checksums = Amiga.get_model_config(model)["ext_roms"] if len(checksums) == 0: config_dict["x_kickstart_ext_file"] = "" config_dict["x_kickstart_ext_file_sha1"] = "" else: for checksum in checksums: path = Database.get_instance().find_file(sha1=checksum) if path: config_dict["x_kickstart_ext_file"] = path config_dict["x_kickstart_ext_file_sha1"] = checksum break else: #print("WARNING: no suitable kickstart ext file found") config_dict["x_kickstart_ext_file"] = "" config_dict["x_kickstart_ext_file_sha1"] = "" #Warnings.set("hardware", "kickstart_ext", # "No suitable extended kickstart found") # FIXME: set sha1 and name x_options also @classmethod def update_kickstart(cls): cls.set_kickstart_from_model() @classmethod def set_kickstart_from_model(cls): print("set_kickstart_from_model") config_dict = cls.config.copy() cls.update_kickstart_in_config_dict(config_dict) cls.update_from_config_dict(config_dict) @classmethod def load_default_config(cls): print("load_default_config") cls.load({}) #from .Settings import Settings # FIXME: remove use of config_base Settings.set("config_base", "") Settings.set("config_name", "Unnamed Configuration") Settings.set("config_path", "") Settings.set("config_xml_path", "") @classmethod def load(cls, config): from .Settings import Settings update_config = {} for key, value in cls.default_config.iteritems(): update_config[key] = value for key in cls.config.keys(): if key not in cls.default_config: # this is not a recognized key, so we remove it del cls.config[key] for key, value in config.iteritems(): # if this is a settings key, change settings instead if key in Settings.initialize_from_config: Settings.set(key, value) else: update_config[key] = value #for key, value in update_config.iteritems(): # #cls.config[key] = value # cls.set(key, value) cls.update_kickstart_in_config_dict(update_config) cls.fix_loaded_config(update_config) cls.set_multiple(update_config.iteritems()) Settings.set("config_changed", "0") #cls.update_kickstart() @classmethod def fix_joystick_ports(cls, config): #from .Settings import Settings print("---", config["joystick_port_0"]) print("---", config["joystick_port_1"]) from .DeviceManager import DeviceManager available = DeviceManager.get_joystick_names() available.extend(["none", "mouse", "keyboard"]) available_lower = [x.lower() for x in available] device_ids = DeviceManager.get_joystick_ids() device_ids.extend(["none", "mouse", "keyboard"]) # remove devices from available list if specified and found try: index = available_lower.index(config["joystick_port_1"].lower()) except ValueError: pass else: del available[index] del available_lower[index] try: index = available_lower.index(config["joystick_port_0"].lower()) except ValueError: pass else: del available[index] del available_lower[index] #if config in #print("--------------------------------------------") if config["joystick_port_1_mode"] in ["joystick", "cd32 gamepad"]: if not config["joystick_port_1"]: want = Settings.get("primary_joystick").lower() #print("want", want) try: index = available_lower.index(want) except ValueError: index = -1 print("available", available_lower) print("want", repr(want), "index", index) if index == -1: index = len(available) - 1 if index >= 0: config["joystick_port_1"] = device_ids[index] del available[index] del available_lower[index] del device_ids[index] elif config["joystick_port_1_mode"] in ["mouse"]: if not config["joystick_port_1"]: config["joystick_port_1"] = "mouse" elif config["joystick_port_1_mode"] in ["nothing"]: if not config["joystick_port_1"]: config["joystick_port_1"] = "none" if config["joystick_port_0_mode"] in ["joystick", "cd32 gamepad"]: if not config["joystick_port_0"]: want = Settings.get("secondary_joystick").lower() try: index = available_lower.index(want) except ValueError: index = -1 #print("want", want, "index", index) if index == -1: index = len(available) - 1 if index >= 0: config["joystick_port_0"] = device_ids[index] del available[index] del available_lower[index] del device_ids[index] elif config["joystick_port_0_mode"] in ["mouse"]: if not config["joystick_port_0"]: config["joystick_port_0"] = "mouse" elif config["joystick_port_0_mode"] in ["nothing"]: if not config["joystick_port_0"]: config["joystick_port_0"] = "none" @classmethod def fix_loaded_config(cls, config): #cls.fix_joystick_ports(config) from .ChecksumTool import ChecksumTool # FIXME: parent checksum_tool = ChecksumTool(None) def fix_file_checksum(sha1_key, key, base_dir, is_rom=False): path = config.get(key, "") # hack to synchronize URLs if path.startswith("http://") or path.startswith("https://"): sha1 = path config[sha1_key] = sha1 return path = expand_path(path) sha1 = config.get(sha1_key, "") if not path: return if sha1: # assuming sha1 is correct return if not os.path.exists(path): print(repr(path), "does not exist") path = os.path.join(base_dir, path) if not os.path.exists(path): print(repr(path), "does not exist") return if os.path.isdir(path): # could set a fake checksum here or something, to indicate # that it isn't supposed to be set.. return print("checksumming", repr(path)) if os.path.getsize(path) > 64 * 1024 * 1024: # not checksumming large files righ now print("not checksumming large file") return if is_rom: sha1 = checksum_tool.checksum_rom(path) else: sha1 = checksum_tool.checksum(path) config[sha1_key] = sha1 for i in range(Amiga.MAX_FLOPPY_DRIVES): fix_file_checksum("x_floppy_drive_{0}_sha1".format(i), "floppy_drive_{0}".format(i), Settings.get_floppies_dir()) for i in range(Amiga.MAX_FLOPPY_IMAGES): fix_file_checksum("x_floppy_image_{0}_sha1".format(i), "floppy_image_{0}".format(i), Settings.get_floppies_dir()) for i in range(Amiga.MAX_CDROM_DRIVES): fix_file_checksum("x_cdrom_drive_{0}_sha1".format(i), "cdrom_drive_{0}".format(i), Settings.get_cdroms_dir()) for i in range(Amiga.MAX_CDROM_IMAGES): fix_file_checksum("x_cdrom_image_{0}_sha1".format(i), "cdrom_image_{0}".format(i), Settings.get_cdroms_dir()) for i in range(Amiga.MAX_HARD_DRIVES): fix_file_checksum("x_hard_drive_{0}_sha1".format(i), "hard_drive_{0}".format(i), Settings.get_hard_drives_dir()) # FIXME: need to handle checksums for Cloanto here fix_file_checksum("x_kickstart_file_sha1", "x_kickstart_file", Settings.get_kickstarts_dir(), is_rom=True) fix_file_checksum("x_kickstart_ext_file_sha1", "x_kickstart_ext_file", Settings.get_kickstarts_dir(), is_rom=True) @classmethod def load_file(cls, path): try: cls._load_file(path, "") except Exception, e: # FIXME: errors should be logged / displayed cls.load_default_config() traceback.print_exc() @classmethod def load_data(cls, data): print("Config.load_data") try: cls._load_file("", data) except Exception, e: # FIXME: errors should be logged / displayed cls.load_default_config() traceback.print_exc() @classmethod def create_fs_name(cls, name): name = name.replace(':', ' - ') name = name.replace('*', '-') name = name.replace('?', '') name = name.replace('/', '-') name = name.replace('\\', '-') name = name.replace('"', "'") for i in range(3): name = name.replace(' ', ' ') while name.endswith('.'): name = name[:-1] name = name.strip() return name @classmethod def _load_file(cls, path, data): if data: print("loading config from data") else: print("loading config from " + repr(path)) if not os.path.exists(path): print("config file does not exist") if data: config_xml_path = "" loader = XMLConfigLoader() loader.load_data(data) config = loader.get_config() elif path.endswith(".xml"): config_xml_path = path loader = XMLConfigLoader() loader.load_file(path) config = loader.get_config() else: config_xml_path = "" cp = ConfigParser.ConfigParser() try: cp.read([path]) except Exception, e: print(repr(e)) return config = {} try: keys = cp.options("config") except ConfigParser.NoSectionError: keys = [] for key in keys: config[key] = cp.get("config", key) try: keys = cp.options("fs-uae") except ConfigParser.NoSectionError: keys = [] for key in keys: config[key] = cp.get("fs-uae", key) from .Settings import Settings Settings.set("config_path", path) cls.load(config) config_name = config.get("__config_name", "") if config_name: config_name = cls.create_fs_name(config_name) else: config_name, ext = os.path.splitext(os.path.basename(path)) if u"(" in config_name: config_base = config_name.split(u"(")[0].strip() else: config_base = config_name #game = name #if not Config.get("title"): # Config.set("title", config_base) Settings.set("config_base", config_base) Settings.set("config_name", config_name) Settings.set("config_xml_path", config_xml_path) Settings.set("config_changed", "0") @classmethod def load_values(cls, values, uuid=""): print("loading config values", values) value_config_loader = ValueConfigLoader(uuid=uuid) value_config_loader.load_values(values) config = value_config_loader.get_config() #config["x_config_uuid"] = uuid from .Settings import Settings Settings.set("config_path", "") cls.load(config) config_name = config.get("__config_name", "") if config_name: config_name = cls.create_fs_name(config_name) #else: # config_name, ext = os.path.splitext(os.path.basename(path)) if u"(" in config_name: config_base = config_name.split(u"(")[0].strip() else: config_base = config_name #game = name #if not Config.get("title"): # Config.set("title", config_base) Settings.set("config_base", config_base) Settings.set("config_name", config_name) Settings.set("config_xml_path", "") Settings.set("config_changed", "0") fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/DownloadService.py0000644000175000017500000000665112162366654024452 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import from __future__ import unicode_literals import os import shutil import urllib2 import hashlib from .Settings import Settings class DownloadService: @classmethod def install_file_from_url(cls, url, path): print("DownloadService.install_file_from_url", url) print(repr(path)) if not os.path.exists(os.path.dirname(path)): os.makedirs(os.path.dirname(path)) cache_path = cls.get_url_cache_path(url) if os.path.exists(cache_path): print("(in cache)") shutil.copy(cache_path, path) # so we later can delete least accessed files in cache... os.utime(cache_path, None) return ifile = urllib2.urlopen(url) temp_path = path + u".part" #h = hashlib.sha1() with open(temp_path, "wb") as ofile: while True: data = ifile.read(65536) if not data: break #h.update(data) ofile.write(data) #if h.hexdigest() != sha1: # print("error: downloaded sha1 is", sha1) # raise Exception("sha1 of downloaded file does not match") temp_cache_path = cache_path + u".part" shutil.copy(temp_path, temp_cache_path) os.rename(temp_cache_path, cache_path) os.rename(temp_path, path) @classmethod def install_file_by_sha1(cls, sha1, name, path): print("DownloadService.install_file_by_sha1", sha1) print(repr(path)) if not os.path.exists(os.path.dirname(path)): os.makedirs(os.path.dirname(path)) cache_path = cls.get_cache_path(sha1) if os.path.exists(cache_path): print("(in cache)") shutil.copy(cache_path, path) # so we later can delete least accessed files in cache... os.utime(cache_path, None) return url = cls.sha1_to_url(sha1, name) ifile = urllib2.urlopen(url) temp_path = path + u".part" h = hashlib.sha1() with open(temp_path, "wb") as ofile: while True: data = ifile.read(65536) if not data: break h.update(data) ofile.write(data) if h.hexdigest() != sha1: print("error: downloaded sha1 is", sha1) raise Exception("sha1 of downloaded file does not match") temp_cache_path = cache_path + u".part" shutil.copy(temp_path, temp_cache_path) os.rename(temp_cache_path, cache_path) os.rename(temp_path, path) @classmethod def sha1_to_url(self, sha1, name): url = "http://fengestad.no/s/sha1/{0}/{1}".format(sha1, name) print(url) return url @classmethod def get_cache_path(cls, sha1): path = os.path.join(Settings.get_launcher_dir(), "Cache", "Download", sha1[:2]) if not os.path.exists(path): os.makedirs(path) return os.path.join(path, sha1) @classmethod def get_url_cache_path(cls, url): h = hashlib.sha1() h.update(url) sha1 = h.hexdigest() path = os.path.join(Settings.get_launcher_dir(), "Cache", "Download", sha1[:2]) if not os.path.exists(path): os.makedirs(path) return os.path.join(path, sha1) fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/server/0000755000175000017500000000000012162366654022306 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/server/ServerWindow.py0000644000175000017500000000166412162366654025325 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import import traceback import fs_uae_launcher.fsui as fsui from ..Config import Config from ..Settings import Settings from ..I18N import _, ngettext class ServerWindow(fsui.Window): def __init__(self, parent, server): fsui.Window.__init__(self, parent, "FS-UAE Net Play Server") self.layout = fsui.VerticalLayout() self.layout.padding_top = 50 self.layout.padding_bottom = 50 self.layout.padding_left = 50 self.layout.padding_right = 50 self.label = fsui.Label(self, "Close window to stop server") self.layout.add(self.label) self.server = server self.set_size(self.layout.get_min_size()) def on_close(self): print("ServerWindow.on_close") try: self.server.kill() except Exception: traceback.print_exc() fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/server/Server.py0000644000175000017500000000171012162366654024125 0ustar glaubitzglaubitzimport sys import time import atexit import subprocess class Server: def __init__(self, port, players, password): self.port = port self.players = players self.password = password self.proces = None def start(self): args = [sys.executable] + sys.argv[:] args.append("--server") args.append("--port={0}".format(self.port)) args.append("--players={0}".format(self.players)) if self.password: args.append("--password={0}".format(self.password)) print("start gamepad config, args =", args) self.process = subprocess.Popen(args, close_fds=True) # a quick hack to give the server time to start, should instead # read stdout or something else time.sleep(2.0) atexit.register(self.kill) def kill(self): print("Server.kill") if self.process is not None: self.process.kill() self.process = None fs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/server/__init__.py0000644000175000017500000000000012162366654024405 0ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/launcher/fs_uae_launcher/server/game.py0000644000175000017500000006135212162366654023600 0ustar glaubitzglaubitz""" FS-UAE Netplay Game Server Copyright (C) 2012 Frode Solheim This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA """ from __future__ import print_function import sys import time from collections import deque import socket import traceback import threading import random from hashlib import sha1 SERVER_PROTOCOL_VERSION = 1 MAX_PLAYERS = 6 if sys.version > '3': PYTHON3 = True else: PYTHON3 = False if PYTHON3: def int_to_bytes(number): return bytes([(number & 0xff000000) >> 24, (number & 0x00ff0000) >> 16, (number & 0x0000ff00) >> 8, (number & 0x000000ff)]) def bytes_to_int(m): return m[0] << 24 | m[1] << 16 | m[2] << 8 | m[3] def byte_ord(v): #print("byte_ord", v) try: return v[0] except TypeError: return v def byte(v): return bytes([v]) server_protocol_version = byte(SERVER_PROTOCOL_VERSION) else: def int_to_bytes(number): return chr((number & 0xff000000) >> 24) + \ chr((number & 0x00ff0000) >> 16) + \ chr((number & 0x0000ff00) >> 8) + \ chr((number & 0x000000ff)) def bytes_to_int(m): return ord(m[0]) << 24 | ord(m[1]) << 16 | ord(m[2]) << 8 | ord(m[3]) def byte_ord(v): return ord(v) def byte(v): return v server_protocol_version = chr(SERVER_PROTOCOL_VERSION) max_drift = 25 num_clients = 2 port = 25100 host = "0.0.0.0" game = None game_password = 0 launch_timeout = 0 def create_game_password(value): # for python 2 + 3 compatibility #if not isinstance(value, unicode): value = value.encode("UTF-8") #print(repr(value)) h = sha1() h.update(b"FSNP") val = b"" for v in value: if byte_ord(v) < 128: val += byte(v) #print("update:", repr(val)) h.update(val) return bytes_to_int(h.digest()[:4]) for arg in sys.argv: if arg.startswith("--"): parts = arg[2:].split("=", 1) if len(parts) == 2: key, value = parts key = key.lower() if key == "port": port = int(value) elif key == "players": num_clients = int(value) elif key == "password": #game_password = crc32(value) & 0xffffffff game_password = create_game_password(value) #print("game password (numeric) is", game_password) elif key == "launch-timeout": launch_timeout = int(value) MESSAGE_READY = 0 MESSAGE_MEM_CHECK = 5 MESSAGE_RND_CHECK = 6 MESSAGE_PING = 7 MESSAGE_PLAYERS = 8 MESSAGE_PLAYER_TAG_0 = 9 MESSAGE_PLAYER_TAG_1 = 10 MESSAGE_PLAYER_TAG_2 = 11 MESSAGE_PLAYER_TAG_3 = 12 MESSAGE_PLAYER_TAG_4 = 13 MESSAGE_PLAYER_TAG_5 = 14 MESSAGE_PLAYER_PING = 15 MESSAGE_PLAYER_LAG = 16 MESSAGE_SET_PLAYER_TAG = 17 MESSAGE_PROTOCOL_VERSION = 18 MESSAGE_EMULATION_VERSION = 19 MESSAGE_ERROR = 20 MESSAGE_TEXT = 21 MESSAGE_SESSION_KEY = 22 #MESSAGE_MEM_CHECK = 5 #MESSAGE_RND_CHECK = 6 #MESSAGE_PING = 7 MESSAGE_MEMCHECK_MASK = (0x80000000 | (MESSAGE_MEM_CHECK << 24)) MESSAGE_RNDCHECK_MASK = (0x80000000 | (MESSAGE_RND_CHECK << 24)) ERROR_PROTOCOL_MISMATCH = 1 ERROR_WRONG_PASSWORD = 2 ERROR_CANNOT_RESUME = 3 ERROR_GAME_ALREADY_STARTED = 4 ERROR_PLAYER_NUMBER = 5 ERROR_EMULATOR_MISMATCH = 6 ERROR_CLIENT_ERROR = 7 ERROR_MEMORY_DESYNC = 8 ERROR_RANDOM_DESYNC = 9 ERROR_SESSION_KEY = 10 ERROR_GAME_STOPPED = 99 def create_ext_message(ext, data): return 0x80000000 | ext << 24 | (data & 0xffffff) class Client: def __init__(self, socket, address): #self.socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) self.socket = socket self.messages = [] self.lock = threading.Lock() self.address = address self.ready = 0 self.tag = b"PLY" self.player = 0 self.playing = False self.frame = 0 self.frame_times = [0.0 for x in range(100)] self.lag = 0.0 self.out_seq = 0 self.memcheck = [(0, 0) for x in range(100)] self.rndcheck = [(0, 0) for x in range(100)] self.ping_sent_at = 0 self.pings = deque([0 for x in range(10)]) self.pings_sum = 0 self.pings_avg = 0 #self.protocol_version = 0 self.emulator_version = b"" self.session_key = 0 self.temp_a = 0 self.temp_b = 0 self.temp_c = 0 threading.Thread(target=self.__thread_function).start() def send_error_message(self, error_num): print(self, "error", error_num) message = 0x80000000 | (MESSAGE_ERROR) << 24 | error_num self.send_message(message) def send_message(self, message): with self.lock: #if message == 0x87000000: # #print("queueing %08x" % (message,)) # #traceback.print_stack() # self.temp_c += 1 self.__send_data(int_to_bytes(message)) def __send_data(self, data): #if data[0] == '\x87': # #print("queueing ping") # #traceback.print_stack() # self.temp_c += 1 self.socket.sendall(data) def queue_message(self, message): with self.lock: #if message == 0x87000000: # #print("queueing %08x" % (message,)) # #traceback.print_stack() # self.temp_c += 1 #print("queueing %08x" % (message,)) #if message & 0x20000000: # traceback.print_stack() self.messages.append(int_to_bytes(message)) if len(self.messages) == 100: self.__send_queued_messages() def queue_bytes(self, message): with self.lock: self.messages.append(message) if len(self.messages) == 100: self.__send_queued_messages() def send_queued_messages(self): with self.lock: self.__send_queued_messages() def __send_queued_messages(self): data = b"".join(self.messages) self.messages[:] = [] #print("sending", repr(data)) self.__send_data(data) def initialize_client(self): print("initialize", self) def read_bytes(num): data = b"" for i in range(num): data = data + self.socket.recv(1) if not len(data) == num: raise Exception("did not get {0} bytes".format(num)) return data # check header message data = read_bytes(4) if data == b"PING": # connection check only self.__send_data(b"PONG") return False if data != b"FSNP": print(data) raise Exception("did not get expected FSNP header") # check protocol version data = self.socket.recv(1) #print(repr(data), repr(server_protocol_version)) if data != server_protocol_version: print("protocol mismatch") self.send_error_message(ERROR_PROTOCOL_MISMATCH) return False # check net play password password = bytes_to_int(read_bytes(4)) if password != game_password: print("wrong password") self.send_error_message(ERROR_WRONG_PASSWORD) return False # read emulator version self.emulator_version = read_bytes(8) # read player number and session key, session key is checked to # make sure another client cannot hijack this player slot self.session_key = bytes_to_int(b"\0" + read_bytes(3)) self.player = byte_ord(self.socket.recv(1)) self.tag = read_bytes(3) # get package sequence number self.resume_from_packet = bytes_to_int(read_bytes(4)) error = game.add_client(self) if error: print(repr(error)) self.send_error_message(error) return False message = create_ext_message(MESSAGE_SESSION_KEY, self.session_key) self.queue_message(message) data = (self.player << 8) | num_clients message = create_ext_message(MESSAGE_PLAYERS, data) self.queue_message(message) game.send_player_tags(self) self.send_queued_messages() print("initialize done for", self) return True def __thread_function(self): try: try: if not self.initialize_client(): #print("initialize failed for", self) return self.receive_loop() except Exception: traceback.print_exc() game.stop = True finally: try: self.socket.close() except Exception: pass def receive_loop(self): data = b"" count = 0 while not game.stop: new_data = self.socket.recv(4 - count) if not new_data: # FIXME return data = data + new_data count = len(data) if count == 4: self.on_message(data) count = 0 data = b"" def send_ping(self): with self.lock: #print("ping?", self.ping_sent_at) if self.ping_sent_at == 0: self.temp_a += 1 self.ping_sent_at = time.time() message = int_to_bytes(0x80000000 | (7 << 24)) self.__send_data(message) assert self.ping_sent_at > 0 def on_ping(self): # may not need lock here with self.lock: self.temp_b += 1 if self.temp_a != self.temp_b: print(self.temp_a, self.temp_b, self.temp_c) assert self.ping_sent_at > 0 t = time.time() new = (t - self.ping_sent_at) / 1.0 #print(t, "-", self.ping_sent_at, "=", new) old = self.pings.popleft() self.pings.append(new) #print(self.pings) self.pings_sum = self.pings_sum - old + new self.pings_avg = self.pings_sum / len(self.pings) self.ping_sent_at = 0 def on_message(self, m): message = bytes_to_int(m) #with game.lock: # if not self.playing: # print(self, "is no longer playing/valid, ignoring message") if message & 0x80000000: # ext message command = (message & 0x7f000000) >> 24 data = message & 0x00ffffff; if command == MESSAGE_MEM_CHECK: self.memcheck[self.frame % 100] = (data, self.frame) elif command == MESSAGE_RND_CHECK: self.rndcheck[self.frame % 100] = (data, self.frame) elif command == MESSAGE_PING: #print("{0:x}".format(message)) self.on_ping() elif command == MESSAGE_TEXT: print("received text command") remaining = data text = b"" while not game.stop: part = self.socket.recv(remaining) count = len(part) text += part remaining = remaining - count if remaining == 0: game.add_text_message(self, text) break elif message & (1 << 30): frame = message & 0x3fffffff #print("received frame", frame) if frame != self.frame + 1: print("error, expected frame", self.frame + 1, "got", frame) #print("received frame", frame) self.frame = frame t = time.time() self.frame_times[self.frame % 100] = t game_t = game.frame_times[self.frame % 100] self.lag = t - game_t elif message & (1 << 29): game.add_input_event(self, message & 0x00ffffff) else: print("warning: unknown command received %x" % (message,)) def __str__(self): return "".format(self.player, self.tag, self.address) def create_session_key(): return random.randint(0, 2**24 - 1) class Game: def __init__(self, num_clients): self.started = False self.frame = 0 self.time = 0 self.clients = [] self.num_clients = 0 self.frame_times = [0.0 for x in range(100)] self.lock = threading.Lock() self.stop = False self.session_keys = [0 for x in range(MAX_PLAYERS)] self.emulator_version = b"" self.verified_frame = -1 def __start(self): if len(self.clients) != num_clients: printf("error - cannot start until all players have connected") return print("{0} clients connected, starting game".format(num_clients)) self.started = True threading.Thread(target=self.__thread_function).start() def add_client(self, client): with self.lock: if client.player == 0xff: if client.resume_from_packet != 0: return ERROR_CLIENT_ERROR if self.started: return ERROR_GAME_ALREADY_STARTED client.player = len(self.clients) if client.player == 0: self.emulator_version = client.emulator_version else: if self.emulator_version != client.emulator_version: return ERROR_EMULATOR_MISMATCH client.session_key = create_session_key() self.session_keys[client.player] = client.session_key self.clients.append(client) client.playing = True if not self.started: if len(self.clients) == num_clients: self.__start() else: if client.player >= len(self.clients): return ERROR_PLAYER_NUMBER if self.session_keys[client.player] != client.session_key: return ERROR_SESSION_KEY old_client = self.clients[client.player] # FIXME: must transfer settings for resuming to work self.clients[client.player] = client client.playing = True if client.resume_from_packet > 0: # cannot resume yet... print("cannot resume at packet", resume_from_packet) return ERROR_CANNOT_RESUME return 0 # FIXME: start the game..? def __thread_function(self): try: self.__game_loop() except Exception: traceback.print_exc() self.stop = True def __send_player_tags(self, send_to_client): for i, client in enumerate(game.clients): data = bytes_to_int(b"\0" + client.tag) message = create_ext_message(MESSAGE_PLAYER_TAG_0 + i, data) send_to_client.queue_message(message) def send_player_tags(self, client): with game.lock: self.__send_player_tags(client) def __game_loop(self): with self.lock: for client in self.clients: self.__send_player_tags(client) print("game loop running") self.time = time.time() while True: if self.stop: print("stopping game loop") # try to send error message to all players with self.lock: for client in self.clients: try: client.send_error_message(ERROR_GAME_STOPPED) except Exception: traceback.print_exc() return self.__game_loop_iteration() def __game_loop_iteration(self): # FIXME: higher precision sleep? target_time = self.time + 0.02 t2 = time.time() diff = target_time - t2 sleep = diff - 0.001 if sleep > 0.0: #print(sleep) time.sleep(sleep) self.time = target_time while time.time() < target_time: # busy-loop until target time pass with self.lock: if self.frame % 100 == 0: self.__send_status() self.frame += 1 self.frame_times[self.frame % 100] = time.time() message = (1 << 30) | self.frame self.__send_to_clients(message, True) if self.frame % 10 == 0: for client in self.clients: client.send_ping() if self.frame % 200 == 0: self.__print_status() self.__check_game() def __check_game(self): oldest_frame, frames = self.__check_frame_status() while oldest_frame > self.verified_frame: self.check_synchronization(self.verified_frame + 1) self.verified_frame += 1 diff = self.frame - oldest_frame if diff <= max_drift: # clients have not drifted too far return first = True count = 0; while diff > 0 and not self.stop: if first: first = False print("---", self.frame, "acked", frames) elif count % 100 == 0: print(" ", self.frame, "acked", frames) time.sleep(0.02) oldest_frame, frames = self.__check_frame_status() diff = self.frame - oldest_frame count += 1 self.time = time.time() - 0.02 def __check_frame_status(self): oldest_frame = self.frame frames = [] with self.lock: for client in self.clients: af = client.frame if af < oldest_frame: oldest_frame = af frames.append(af) return oldest_frame, frames def __print_status(self): for i, client in enumerate(self.clients): print("{0} f {1:6d} p avg: {2:3d} {3:3d}".format(i, client.frame, int(client.pings_avg * 1000), int(client.lag * 1000))) def __send_status(self): for i, client in enumerate(self.clients): v = int(client.lag * 1000) & 0x0000ffff message = 0x80000000 | MESSAGE_PLAYER_LAG << 24 | i << 16 | v self.__send_to_clients(message) v = int(client.pings_avg * 1000) & 0x0000ffff message = 0x80000000 | MESSAGE_PLAYER_PING << 24 | i << 16 | v self.__send_to_clients(message) def add_input_event(self, client, input_event): if not self.started: # game was not started - ignoring input event print("game not started, ignoring input event {0:08x}".format( input_event)) return with self.lock: if not client.playing: print("client", client, "is no longer valid, dropping msg") return # for now, just broadcast out again to all clients message = (1 << 29) | input_event self.__send_to_clients(message) def add_text_message(self, from_client, text): print("add text message") with self.lock: for client in self.clients: #if from_client == client: # continue message = 0x80000000 | MESSAGE_TEXT << 24 \ | from_client.player << 16 | len(text) message = int_to_bytes(message) + text print("send", repr(message), "to", client) client.queue_bytes(message) def send_to_clients(self, message, force_send=False): # using a lock here to ensure that send_to_clients can # be called from multiple threads, but all clients will # still get messages in expected order with self.lock: self.__send_to_clients(message, force_send) def __send_to_clients(self, message, force_send=False): for client in self.clients: #print("send", message, "to", client) client.queue_message(message) if force_send: client.send_queued_messages() def check_synchronization(self, check_frame): # FIXME: MOVE TO GAME CLASS # FIXME: ONLY RUN ONCE PER FRAME, not once per frame * clients #if self.frame == 0: # return with game.lock: #print("received memcheck", data) #check_frame = self.frame - 1 if check_frame < 0: return index = check_frame % 100 mem_check_data = [] rnd_check_data = [] for client in game.clients: if client.frame <= check_frame: # cannot check yet return #print(client, client.frame, client.memcheck) mem_check_data.append((client, client.memcheck[index])) rnd_check_data.append((client, client.rndcheck[index])) check = mem_check_data[0][1] for client, data in mem_check_data: if check != data: print("memcheck failed for frame", check_frame) for c, d in mem_check_data: print("* {0:08x} f {1:05d} {2}".format(d[0], d[1], c)) for c in game.clients: c.send_error_message(ERROR_MEMORY_DESYNC) c.send_queued_messages() raise Exception("mem check failed") check = rnd_check_data[0][1] for client, data in rnd_check_data: if check != data: print("rndcheck failed for frame", check_frame) for c, d in rnd_check_data: print("* {0:08x} f {1:05d} {2}".format(d[0], d[1], c)) for c in game.clients: c.send_error_message(ERROR_RANDOM_DESYNC) c.send_queued_messages() raise Exception("rnd check failed") address_map = { } def accept_client(server_socket): global last_keepalive_time server_socket.settimeout(1) client_socket, client_address = server_socket.accept() #client_socket.setsockopt(socket.SOL_SOCKET, socket.SO_SNDLOWAT, 4) client_socket.setsockopt(socket.SOL_TCP, socket.TCP_NODELAY, 1) client_socket.settimeout(None) client = Client(client_socket, client_address) #client.player = len(game.clients) + 1 print("Client connected", client) last_keepalive_time = time.time() #game.add_client(client) #client.start() #if game.can_start(): # game.start() #stop_accepting = False def accept_thread(server_socket): while not game.stop: try: accept_client(server_socket) except socket.timeout: pass except Exception: traceback.print_exc() time.sleep(1.0) def _run_server(): global game global last_keepalive_time game = Game(num_clients) address = (host, port) server_socket = socket.socket() server_socket.bind(address) server_socket.listen(10) print("listening") sys.stdout.flush() if address[0] != "0.0.0.0": print("server listening on", address[0], "port", address[1]) else: print("server listening on port", address[1]) print("want", num_clients, "client(s)") if num_clients > MAX_PLAYERS: print("ERROR: max clients are", MAX_PLAYERS) threading.Thread(target=accept_thread, args=(server_socket,)).start() last_keepalive_time = time.time() while not game.started: time.sleep(0.1) if launch_timeout: t2 = time.time() if t2 - last_keepalive_time > launch_timeout: print("game not started yet, aborting (timeout)") game.stop = True return #sys.exit() print("game started") while not game.stop: time.sleep(0.1) def run_server(): try: _run_server() except Exception: traceback.print_exc() except KeyboardInterrupt: traceback.print_exc() game.stop = True if __name__ == "__main__": run_server() fs-uae-2.2.3+dfsg/launcher/README0000644000175000017500000001257012162366654016542 0ustar glaubitzglaubitzFS-UAE LAUNCHER If you are using the source distribution, you should be able to install FS-UAE Launcher by running "python setup.py install". The setup procedure requires python setuptools to be installed. (sudo apt-get install python-setuptools) You start FS-UAE Launcher by running "fs-uae-launcher". This requires wxPython and pygame to be installed. (sudo apt-get install python-wxgtk2.8 python-pygame) SCREENSHOTS Screenshot paths are currently derived from the name of the configuration file. If the configuration file is named Test.fs-uae, the two displayed screenshots will be found in: (My) Documents/FS-UAE/Titles/T/Test.png or ~/Games/Amiga/Titles/T/Test.png and (the right one): (My) Documents/FS-UAE/Screenshots/T/Test.png or ~/Games/Amiga/Screenshots/T/Test.png ABOUT FS-UAE LAUNCHER FS-UAE Launcher is Copyright (C) 2012-2013 Frode Solheim. This package is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This package is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this package; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA The following people have translated FS-UAE Launcher into several languages: Cédric "Foul" Monféfoul (French), nexusle (German), Speedvicio (Italian), grimi (Polish), Milanchez (Serbian), albconde (Spanish), Treco (Portuguese), GoingDown (Finish), spajdr (Czech), Decypher (Turkisk). A big thanks to everyone who have tested the software and provided valuable feedback! Especially the encouraging members of the English Amiga Board, and all you who have commented on the official FS-UAE web site. FS-UAE Launcher includes icons from GNOME icon theme from the GNOME Project (http://www.gnome.org). The GNOME icon theme is distributed under the terms of either GNU LGPL v.3 or Creative Commons BY-SA 3.0 license. FS-UAE Launcher includes icons from humanity-icon-theme, licensed under the terms of the GNU General Public license. FS-UAE includes icons from oxygen-icon-theme, licensed under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. The Amiga Forever icon is (probably) copyright Cloanto Italia srl. FS-UAE Launcher includes the oyoyo library, Copyright (c) 2008 Duncan Fordyce, The license for this library is contained in the following paragraph: Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. FS-UAE Launcher may include lhafile, Copyright (c) 2010 Hidekazu Ohnishi. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the author nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. FS-UAE Launcher depends on several open source third party software packages, including but not limited to, Python and wxPython. fs-uae-2.2.3+dfsg/launcher/setup_py2exe.py0000644000175000017500000000405612162366654020670 0ustar glaubitzglaubitzimport os import glob from distutils.core import setup import py2exe try: # py2exe 0.6.4 introduced a replacement modulefinder. # This means we have to add package paths there, not to the built-in # one. If this new modulefinder gets integrated into Python, then # we might be able to revert this some day. # if this doesn't work, try import modulefinder try: import py2exe.mf as modulefinder except ImportError: import modulefinder import win32com, sys for p in win32com.__path__[1:]: modulefinder.AddPackagePath("win32com", p) for extra in ["win32com.shell"]: #,"win32com.mapi" __import__(extra) m = sys.modules[extra] for p in m.__path__[1:]: modulefinder.AddPackagePath(extra, p) except ImportError: # no build path setup, no worries. pass options = {} py2exe_options = { "dll_excludes": ["MSVCP90.dll"], } options["py2exe"] = py2exe_options from py2exe.build_exe import py2exe as build_exe class LauncherBuildExe(build_exe): def copy_extensions(self, extensions): """Copy the missing extensions.""" build_exe.copy_extensions(self, extensions) res_dir = os.path.join("fs_uae_launcher", "res") full = os.path.join(self.collect_dir, res_dir) if not os.path.exists(full): self.mkpath(full) for f in glob.glob(res_dir + '/*.*'): name = os.path.basename(f) self.copy_file(f, os.path.join(full, name)) self.compiled_files.append(os.path.join(res_dir, name)) setup( name="fs_uae_launcher", cmdclass = { "py2exe": LauncherBuildExe, }, options=options, version="2.2.3", author="Frode Solheim", author_email = "fs-uae@fengestad.no", #packages=["fs_uae_launcher"], #console=["scripts/fs-uae-launcher"], windows=["scripts/fs-uae-launcher"], #data_files=[ # ("fs_uae_launcher/res", [ # "fs_uae_launcher/res/floppy.png", # "fs_uae_launcher/res/joystick.png", # "fs_uae_launcher/res/kickstart.png", # "fs_uae_launcher/res/model.png", # ]), #] ) fs-uae-2.2.3+dfsg/launcher/setup_py2app.py0000644000175000017500000000101712162366654020661 0ustar glaubitzglaubitzimport os from setuptools import setup from py2app.build_app import py2app as py2app_original APP = ["fs-uae-launcher.py"] DATA_FILES = [] OPTIONS = {'argv_emulation': True} setup( name = "FS-UAE Launcher", version = "2.2.3", author = "Frode Solheim", author_email = "fs-uae@fengestad.no", app = APP, data_files = DATA_FILES, options = {'py2app': OPTIONS}, setup_requires = ['py2app'], ) os.system("zip -ru dist/\"FS-UAE Launcher.app\"/Contents/Resources/" + "lib/python2.7/site-packages.zip fs_uae_launcher/res") fs-uae-2.2.3+dfsg/launcher/fs-uae-launcher.spec0000644000175000017500000000356112162366654021515 0ustar glaubitzglaubitz%define is_mandrake %(test -e /etc/mandrake-release && echo 1 || echo 0) %define is_suse %(test -e /etc/SuSE-release && echo 1 || echo 0) %define is_fedora %(test -e /etc/fedora-release && echo 1 || echo 0) Name: fs-uae-launcher Version: 9.8.7 Release: 1%{?dist} Summary: Graphical configuration frontend and launcher for FS-UAE Requires: pygame wxPython fs-uae python-setuptools Group: Applications/Emulators License: GPLv2+ URL: http://fengestad.no/fs-uae/ Source0: http://fengestad.no/fs-uae/files/%{version}/%{name}-%{version}.tar.gz BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildArch: noarch BuildRequires: python-devel python-setuptools %if 0%{?suse_version} %else %if 0%{?mandriva_version} %else %endif %endif %description FS-UAE Launcher is a graphical configuration program and launcher for FS-UAE. %prep %setup -q %build CFLAGS="$RPM_OPT_FLAGS" %{__python} setup.py build make -f Makefile.mk %install %{__python} setup.py install --skip-build --root $RPM_BUILD_ROOT --prefix=/usr make -f Makefile.mk install DESTDIR=$RPM_BUILD_ROOT %clean rm -rf $RPM_BUILD_ROOT %files %defattr(-,root,root,-) %_bindir/* %{python_sitelib}/* %_datadir/%{name}/ %_datadir/doc/%{name}/ %_datadir/applications/*.desktop %_datadir/icons/*/*/*/*.png %_datadir/locale/*/*/*.mo %dir %_datadir/icons/hicolor %dir %_datadir/icons/hicolor/128x128 %dir %_datadir/icons/hicolor/128x128/apps %dir %_datadir/icons/hicolor/16x16 %dir %_datadir/icons/hicolor/16x16/apps %dir %_datadir/icons/hicolor/256x256 %dir %_datadir/icons/hicolor/256x256/apps %dir %_datadir/icons/hicolor/32x32 %dir %_datadir/icons/hicolor/32x32/apps %dir %_datadir/icons/hicolor/48x48 %dir %_datadir/icons/hicolor/48x48/apps %dir %_datadir/icons/hicolor/64x64 %dir %_datadir/icons/hicolor/64x64/apps %doc %changelog fs-uae-2.2.3+dfsg/launcher/setup.py0000644000175000017500000000047712162366654017377 0ustar glaubitzglaubitzfrom setuptools import setup, find_packages setup( name = "fs_uae_launcher", version = "2.2.3", author = "Frode Solheim", author_email = "fs-uae@fengestad.no", install_requires = ["wxPython", "pygame"], packages = find_packages(), package_data = { "": ["*.png", "*.dat"], }, scripts=["scripts/fs-uae-launcher"], ) fs-uae-2.2.3+dfsg/launcher/debian/0000755000175000017500000000000012162366654017077 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/launcher/debian/source/0000755000175000017500000000000012162366654020377 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/launcher/debian/source/format0000644000175000017500000000001412162366654021605 0ustar glaubitzglaubitz3.0 (quilt) fs-uae-2.2.3+dfsg/launcher/debian/control0000644000175000017500000000113112162366654020476 0ustar glaubitzglaubitzSource: fs-uae-launcher Section: otherosfs Priority: extra X-Python-Version: >= 2.6 Maintainer: Frode Solheim Build-Depends: debhelper (>= 7.0.50~), python (>= 2.6), python-support (>= 0.5.3), python-setuptools Standards-Version: 3.8.4 Homepage: http://www.fengestad.no/fs-uae Package: fs-uae-launcher Architecture: all Depends: python (>= 2.6), ${misc:Depends}, fs-uae, ${python:Depends}, python-pygame, python-wxgtk2.8, python-setuptools, fs-uae Description: Launcher and configuration program for FS-UAE. FS-UAE Launcher is a graphical user interface for setting up FS-UAE. fs-uae-2.2.3+dfsg/launcher/debian/compat0000644000175000017500000000000212162366654020275 0ustar glaubitzglaubitz7 fs-uae-2.2.3+dfsg/launcher/debian/rules0000755000175000017500000000036212162366654020160 0ustar glaubitzglaubitz#!/usr/bin/make -f # -*- makefile -*- %: dh $@ override_dh_auto_build: dh_auto_build make -f Makefile.mk override_dh_auto_install: dh_auto_install make -f Makefile.mk install DESTDIR=$$(pwd)/debian/fs-uae-launcher prefix=/usr install fs-uae-2.2.3+dfsg/launcher/debian/copyright0000644000175000017500000000230312162366654021030 0ustar glaubitzglaubitzThis work was packaged for Debian by: Frode Solheim on Mon, 07 Nov 2011 23:26:15 +0100 It was downloaded from: http://www.fengestad.no/fs-uae/ Upstream Author(s): Frode Solheim Copyright: Copyright (C) 2011-2013 Frode Solheim License: This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this package; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. The Debian packaging is: Copyright (C) 2012 Frode Solheim and is licensed under the GPL version 2, see "/usr/share/common-licenses/GPL-2". fs-uae-2.2.3+dfsg/launcher/debian/changelog0000644000175000017500000000022512162366654020750 0ustar glaubitzglaubitzfs-uae-launcher (2.2.3-0) unstable; urgency=low * Dummy changelog entry -- Frode Solheim Mon, 23 Apr 2012 22:49:01 +0100 fs-uae-2.2.3+dfsg/launcher/COPYING0000644000175000017500000004325412162366654016720 0ustar glaubitzglaubitz GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. fs-uae-2.2.3+dfsg/launcher/scripts/0000755000175000017500000000000012162366654017344 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/launcher/scripts/fs-uae-launcher0000755000175000017500000000007712162366654022255 0ustar glaubitzglaubitz#!/usr/bin/env python from fs_uae_launcher import main main() fs-uae-2.2.3+dfsg/ChangeLog0000755000175000017500000021701512162366653015636 0ustar glaubitzglaubitzVersion 2.2.3: * On windows, read file name (as program parameter) with MBCS encoding (CP_ACP) so paths with non-ASCII characters are handled correctly. * Windows executables are digitally signed by "Frode Solheim". * (Launcher) Only add Cloanto "Amiga Files" to search path if directory exists (Windows). * (Launcher) Fix slash direction in default search directory on Windows so it does not look weird. * (Launcher) Updated translations: it [speedvicio]. Version 2.2.2: * With video_sync = auto, allow some slack when deciding to enable full sync or not (accept host refresh rate 49 instead of just 50, ..). * New option: assume_refresh_rate (int) to manually specify host refresh rate when refresh rate detection fails. This option in combination with video_sync = auto effectively replaces video_sync = full. * video_sync = full is now an alias for video_sync = auto. * Fixed bug causing FS-UAE to hang when pausing with video_sync = off. * New model CD32/FMV (includes FMV ROM), CD32 model reverted to original. * Fixed compatibility issues in scanline GLSL shaders. Version 2.2.1: * Show on-screen warning if OpenAL device cannot be opened, log OpenAL error code. * New option save_state_compression can be used to disable save state compression. * New option "log" which can be used to enable misc types of debug logging. * Queued input events are processed in hsync handler. * Use CD32 + FMV quickstart for CD32 model, update cd.device in cartridge ROM fixes problem with Pirates Gold intro. * Removed a couple of left-over / unnecesary log statements. * New translations: tr [Decypher]. * (Launcher) Fixed bug when specifying window_width / window_height in custom settings. * (Launcher) Warn when using A1200 model with < 2 MB chip RAM. * (Launcher) Fixed a bug where 0-byte screenshot / covers files could be stored if a network error occurs while downloading. * (Launcher) Better support for A3000 and A4000 with the game database. * (Launcher) Support hiding variants from the database based on _status. * (Launcher) Cycle-exact can be disabled from database if abs. necessary. * (Launcher) New translations: tr [Decypher]. Version 2.1.35 / 2.2.0: * Updated translations: nb. * (Launcher) Support db_version from online game database, show warning if the launcher is too old to support the chosen variant. * (Launcher) Updated translations: nb. Version 2.1.34: * Updated translations: it [speedvicio], fr [Foul], sr [Milanchez]. * (Launcher) Accept gzip-encoded database changes. * (Launcher) Support x_whdload_version = 13.0 and 10.0. * (Launcher) Updated translations: it [speedvicio], fr [Foul], sr [Milanchez]. Version 2.1.33: * New boolean option joystick_port_0_autoswitch to enable the feature where a device is automatically inserted into port 0 when you press the primary button. * Added new option: dongle_type. * Fixed notification_duration when used in config file (only worked from the command line due to initialization order). * Use GCC optimization level O0 instead of O2 for cpuemu*, since a bug was found caused by the optimizer (where basically (1 ^ 0) & (1 ^ 0) was evaluated to 0). This fixes Tower of Babel (IPF). * Updated translations: fi [GoingDown], es [albconde], pt [xpect]. * (Launcher) Restrict A1000 and A600 models to use only one specific kickstart by default (similar to the other models) for game db compat. * (Launcher) Amiga <-> Host file name conversion for FS-UAE when using WHDLoad variants with the online database [TheCyberDruid]. * (Launcher) Updated translations: fi [GoingDown], pl [grimi], cs [spajdr], es[albconde], de [nexusle], pt [xpect]. Version 2.1.32: * New option notification_duration (ms). Does not apply to warnings. * Fixed bug in IPF handling causing Buggy Boy to not load. * (Launcher) Scan entire directory tree for dirs with .slave files. * (Launcher) Make sure usernames are converted to unicode. * (Launcher) Base screenshots prefix on configuration name. * (Launcher) Updated translations: cs [spajdr]. Version 2.1.31: * Shortcuts F12 + P or Pause/Break key to pause the emulation. * Left and right mouse buttons are aliased to joystick port 0 fire and 2nd button (unless joystick_port0_mode is nothing, or mouse is already used in a port). * Disabled automatic port 0 joystick switching for mouse, alias mouse buttons instead. * Disabled automatic port 0 joystick switching for emulated joystick. * Warn, if necessary, when joystick/gamepad has no config for CD32 game pad. * Fixed scanline code for PPC. * Support for a more advanced viewport syntax. * Updated bitmap font with new character. * Updated translations: pl [grimi]. * (Launcher) Retry database download operations several times on failure. * (Launcher) Support floppy_list field from online database, as well as new database fields. * (Launcher) WHDLoad versions can be selected via the new x_whdload_version option. * (Launcher) Added WHDLoad versions 16.0 - 16.9 [TheCyberDruid]. * (Launcher) ADFFileExtractor module [TheCyberDruid]. * (Launcher) SetPatch is extracted using the new ADFFileExtractor module instead of the old hack. Version 2.1.30: * Make the volume function more sane. * Check/respect GL_MAX_TEXTURE_SIZE for text cache texture. * Make the scanline shaders more standards-compatible, fixes compilation errors which occured with some GL drivers. * Write shader compiler log to log file on shader compilation failure. * Updated translations: cs [spajdr], de [nexusle]. * (Launcher) Updated translations: cs [spajdr]. Version 2.1.29: * Fixed a bug with notification replacing earlier notifications of the same type. * F12 + w to toggle warp mode (no frame limit, no audio). * F12 + comma to decrease the volume. * F12 + period to increase the volume. * Updated translations: fi [GoingDown], sr [Milanchez]. * (Launcher) Updated translations: sr [Milanchez]. Version 2.1.28: * For directory hard drives, save file attributes in .uaem files (permissions, timestamp, file note). * Fix for directory hard drives so correct case is reported back to the Amiga when the Amiga opens a file with another case than what's stored. * Report local time for files in directory hard drive. * Use re-entrant / thread-safe variants of time functions. * Reverted the scanline function to its older / simpler behavior, use the shader "scanlines-nonlinear" instead. * New shaders included: scanlines-classic (same as scanline CPU filter), and scanlines-nonlinear (a scanline filter which varies with pixel intensity and also introduces some pixel blending). * Text cache texture size is now 2048x2048 (was 1024x1024). * For automatic directory hard drive volume label, only use the part before an opening parenthesis (if it exists). * New options to configure what screenshots to save and where to save them. * A bit more compact naming of screenshots, and reset sub-minute counter for each minute (makes sorted names always cronological even with large number of screenshots). * Can now bind keys to action_screenshot, notification replaces previous notification (of same type). * Lua scripts can be used to read/write Amiga memory, position the output video rectangle, change shader (experimental feature). * Support /dev/tty as the serial output [Jason S. McMullan]. * Patch for Linux CD ioctl support [Jason S. McMullan]. * Removed a some useless stubs printed to stdout, removed several printf statements logging stuff to stdout. * F12 + m to mute the sound. * Updated translations: fi [GoingDown], cs [spajdr]. * (Launcher) Make sure the nickname is a valid IRC nickname (net play). * (Launcher) Fixed problem where .fs-uae configurations could in some cases disappear from the configuration list when refreshing the online database. * (Launcher) Fixed a bug where config name was saved in config file if based on a config from online database. * (Launcher) Automatically set screenshots_output_prefix based on floppy name. * (Launcher) If A500 kickstart is not found on startup, look for Amiga Forever in default location and add kickstarts to database if found (Windows). * (Launcher) Add Amiga Forever shared documents directory to search path. * (Launcher) Index files in .rp9 archives, contained disk images can be used with the online database (when match is found). * (Launcher) Support file comments for WHDLoad slave files when using the online database, comments are stored in .uaem files. Fixes Embryo. * (Launcher) Allowing selecting .lha files as hard drives. * (Launcher) Fixed an issue with selecting Amiga 1000 (2.1.26). * (Launcher) Updated translations: cs [spajdr]. Version 2.1.27: * Added lua (sandboxed), (possibly) to be used as a scripting engine. * Added freetype as a build dependency, will be used for truetype fonts. * Some changes to the build system, fs-uae binary now linked in root dir. * Updated translations: fi [GoingDown]. * (Launcher) Index content in .lha files if lhafile python module is found (implemented earlier, but not announced). * (Launcher) Added lhafile module to Windows / OS X binary distributions. * (Launcher) Updated translations: it [Speedvicio], pl [grimi], de [nexusle], fi [GoingDown]. Version 2.1.26: * Implemented options hard_drive_x_priority. * Renamed FS-UAE.log to FS-UAE.log.txt for easier upload to EAB. * Better method to override directories (e.g. base_dir), old ones deprecated. * Added translations: cs [spajdr], fi [GoingDown]. * Updated translations: it [Speedvicio]. * (Launcher) Added refresh button to update list of connected joysticks. * (Launcher) Added support for the recently added A3000 FS-UAE Amiga model. * (Launcher) Improved memory widgets, you now see the current default value. * (Launcher) A new simple ADF & HDF Creator dialog is included. * (Launcher) Display name first, then directory in media selectors. * (Launcher) Fixed a bug where you could get an error message about missing kickstart after just having imported kickstarts and tried to start the emulation. * (Launcher) Do not expose database username/password in FS-UAE logs. * (Launcher) Added main menu button, moved scan and settings to this menu. * (Launcher) Also add menu entries to application menu on OS X. * (Launcher) Moved custom options and custom settings to new dialog accessible from the new menu. * (Launcher) Moved kickstart import to new kickstart import dialog, removed the "setup" / wizard tab. * (Launcher) New "kickstarts are missing" notification in the top tab area. * (Launcher) Marked some additional text for translation. * (Launcher) Added new about dialog. * (Launcher) Database: Game variants can specify that an empty HD or a HD with Workbench must be added to the system. * (Launcher) Preselect variant with personal rating = 5, or else highest rated game variant when selecting a game from the database. * (Launcher) Respect new base_dir override. * (Launcher) Updated GUI layout in several places, minor improvements here and there. * (Launcher) Added translations: cs [spajdr], fi [GoingDown]. Version 2.1.25: * Fixed startup when running under OS X (2.1.24). Version 2.1.24: * Screenshot function also saves a screenshot of the OpenGL frame buffer. * Support some RetroArch extensions to the XML shader spec, as a result, the CRT-interlaced-halation shader works now. * Fixed zoom modes and viewport correction when disabling line doubling or using low_resolution option. * Warn if OpenGL renderer is "GDI Generic" (no real driver installed). * Fixed problem loading state when using directory hard drives on case sensitive file systems. * Don't warn (with LEDs) about missed frames / repeated frames when this is normal (host frame rate != Amiga frame rate). * Blank sync leds a few seconds after startup until the statistics have settled. * New option fade_out_duration (miliseconds). * Updated translations: fr [Foul], de [nexusle], pl [grimi]. * (Launcher) Fixed problem initializing joystick device list on Windows. * (Launcher) Updated translations: fr [Foul], de [nexusle]. Version 2.1.23: * New option save_states can be used to disable the save state feature. * Marked several warning messages for translation. * Updated translations: de [nexusle]. * (Launcher) Disable the save state feature in cases were it is known to not work (with temporarily created hard drives). * (Launcher) Updated translations: de [nexusle]. Version 2.1.22: * Fixed a missing bit in the UTF-8 decoding (for text rendering). * Fixed a potential crash due to an uninitialized variable (2.1.21). * Generated source files were by mistake not updated. Version 2.1.21: * Added A3000 model (68030 + FPU, 2 MB chip + 8 MB fast, KS 3.1) * New aliases for theme overlays (power_led, df0_led, etc). * Theme coordinate system can be defined with theme_width, theme_height. * Old overlay option is deprecated, new overlay types available. * Audio led flashes red on buffer underruns, turns off when the Amiga is not outputting audio data. * New theme_zoom option (preferred over viewport for theme purposes). * Updated translations: pl [grimi]. * (Launcher) Updated translations: pl [grimi]. Version 2.1.20: * Implemented bsdsocket_library support for Windows. * New LED/overlays: CDTV/32 memory access, vsync, fps, audio. * Flicker CD LED instead of HD LED when CDFS is used. * New modes for LED / overlays (overlays can have several states). * Improved scanline renderer (but also more resource hungry..), may become optional or rewritten as a GPU shader. * Fixed bug selecting joystick port mode for port > 0 (2.1.19). * Fixed stuttering in RTG modes (2.1.19). * Fixed scanline rendering on bigendian computers (PPC). * Clear video buffer on target_graphics_buffer_update, e.g. when display mode switches from PAL to NTSC. Fixes garbled graphics on bottom of display. * Allow theme config to overwrite (default) values set by Launcher. * (Launcher) Removed unnused dependency on Python Imaging (PIL). Version 2.1.19: * Fix proper stereo audio output when using OpenAL soft implementation. * Automatically adjust to 50Hz / 60Hz Amiga mode change. * video_sync = full is deprecated (now handled as auto), will enable full video sync only when host frame rate ~= Amiga frame rate. * Fixed a bug with the number of enabled floppy drives, introduced with the support for custom floppy sounds. * Some minor source code and build improvements. * Experimental support for a "fifth joystick port", which can be mapped to Amiga keyboard keys. Version 2.1.18: * Fixed overflow preventing alt/cmd modifier key from working. * Updated translations: es [albconde]. * (Launcher) No floppy drive sounds when loading a WHDLoad variant from the online database. * (Launcher) Updated translations: es [albconde]. Version 2.1.17: * Autoselect device for port 0 when "fire" button of unmapped device is pressed. * New options to specify alternative floppy drive sound sets (floppy_drive_x_sounds). * Built-in floppy drive sounds are now loaded from disk. * Partially merged GLES support code [lunixbochs, lallafa]. * Some code in libfsemu is restructured / cleaned up. * FS-UAE can be compiled without Glib (with a few caveats). * Compile-time option to use posix threads/mutex/semaphores. * Updated translations: it [Speedvicio]. * (Launcher) Fixed display of variant user rating. * (Launcher) Updated translations: fr [Foul], sr [Milanchez], de [nexusle], pl [grimi], it [Speedvicio]. Version 2.1.16: * (Launcher) Only show variant name (without game name) in variant list. * (Launcher) New horizontal layout for game/variants lists. * (Launcher) Variant list now disappears when choosing a non-database entry. * (Launcher) Render square covers inside a portrait cover. * (Launcher) Better differentiation of game and variant info. * (Launcher) Adjusted screenshot sizes for 1920x1080 maximized. * (Launcher) You can click on the screenshot area to show the other screenshots, if not all are shown. * (Launcher) Automatically extract SetPatch from WB disks for WHDLoad. * (Launcher) Copy WHDLoad.key from base dir (Documents/FS-UAE) if found. * (Launcher) Documents/FS-UAE/WHDLoad dir not needed/supported anymore, but you can put files to merge in Documents/FS-UAE/Hard Drives/WHDLoad instead if needed. * (Launcher) Updated translations: pl [grimi], de [nexusle]. Version 2.1.15: * Determine the size of block devices on OS X, making it possible to mount block devices as hard drives on OS X [lallafa]. * Fixed source to remove some compiler warnings in hardfile_host.cpp. * (Launcher) Create "Devs/system-configuration" when running WHDLoad games. * (Launcher) Fixed initialization of (last used) game info on startup. * (Launcher) Added mobygames link button. * (Launcher) Use icon button to toggle fullscreen / windowed mode. * (Launcher) Updated translations: de [nexusle]. Version 2.1.14: * Fixed return value in two stub functions. Version 2.1.13: * Merged updated emulation core from WinUAE 2.5.1. * Fixed performance when using full video sync. * Fix right alt key on Linux. * Use joystick name "Unnamed" when joystick device has no name. * Support action_none, so keys can be mapped against "no action". * Fixed crash when entering fullscreen mode on OS X 10.5 [Tobias Netzel]. * Tuned autoscaling for CD32 boot and menu screens. * (Launcher) Fixed WHDLoad games in directories with + in name. * (Launcher) Some improvements for the game database support. * (Launcher) Show year/publisher/developer information if available. * (Launcher) URL buttons for links to game entries on several game web sites. Version 2.1.12: * Tweaked CD32 startup animation viewport. * (Launcher) Fixed Startup-Sequence for WHDLoad. Version 2.1.11: * Config for gamtec_ltd/smartjoy_plus_adapter.ini [JOPS]. * Small compilation fix for OS X 10.5 * (Launcher) Handle square-ish covers. * (Launcher) Indicate ADF, IPF CD, or WHDLoad also with icon. * (Launcher) Reload game variant list after refreshing database. * (Launcher) Support sort_key from online database. * (Launcher) Run SetPatch (if found) before starting WHDLoad games. * (Launcher) Kickstart import task can overwrite old read-only files. Version 2.1.10: * Merged updated emulation core from WinUAE 2.5.0. * (Launcher) Support (empty) HD directories in database configurations. * (Launcher) Use standard WHDLoad settings by default. * (Launcher) WHDLoad games were unpacked one directory level too deep. * (Launcher) Support chip_memory override from online database. * (Launcher) Skip / ignore file names with invalid encoding. * (Launcher) Fix search function for games from database (needs refresh). * (Launcher) Updated translations: pt [Treco]. Version 2.1.9: * Updated bitmap font with additional characters for Turkish. * (Launcher) Show only game entries in the main list, show game variants for selected game in separate list. * (Launcher) Handle empty file_list values from database. * (Launcher) Support new key/value in database: video_standard (=NTSC). * (Launcher) Updated translations: pt [Treco], sr [Milanchez]. Version 2.1.8: * (Launcher) Fixed Amiga model selection when database key kickstart is used in combination with fast_memory > 8192 (Zorro III). * (Launcher) Updated translations: es [albconde]. Version 2.1.7: * Merged updated emulation core from WinUAE 2.5.0beta27. * (Launcher) WHDLoad support in combination with online database. * (Launcher) Updated translations: it [Speedvicio], pl [grimi]. Version 2.1.6: * Updated bitmap font with additional characters for Portuguese. * (Launcher) Fix a bug where missing files stopped the scan process (when using the database feature). * (Launcher) Fix path expansion when using ADFs from archives. * (Launcher) Updated translations: fr [Foul], de [nexusle]. Version 2.1.5: * Use Windows API function to prevent display from going to sleep. * Added translations: pt [Treco]. * (Launcher) Initial online database support. * (Launcher) Can download screenshots / covers on demand from server. * (Launcher) Added translations: pt [Treco]. * (Launcher) Updated translations: pl [grimi]. Version 2.1.4: * Merged updated emulation core from WinUAE 2.5.0beta26. * Add support for displaying HD/CD/Power leds in themes. * Added new option: swap_ctrl_keys. * Automatically configure unrecognized joysticks/gamepads as simple Amiga joysticks. * Fixes to allow compilation on OpenBSD [vext01]. * Added translations: es [albconde]. * Updated translations: fr [Foul], sr [Milanchez]. * Using directory prefix $BASE/ caused one character to be cut off. * Fixed Launcher-created joystick config when using 2+ of the same type. * Support environment variable FS_UAE_BASE_DIR. * (Launcher) Fixed problem starting joystick configurator on Mac. * (Launcher) GUI setting for swap left/right ctrl keys. * (Launcher) Support environment variable FS_UAE_BASE_DIR. * (Launcher) Fix for non-ASCII characters in joystick device names. * (Launcher) Can set option __netplay_state_dir_name with /set to force a specific state dir for net play, for persistent states. * (Launcher) URLs for floppies/HDs can be synchronized, so net play-compatible configs can be created for downloadable public domain / shareware games. * (Launcher) Can override screenshots_dir, covers_dir, titles_dir in config. * (Launcher) Can use title_image, cover_image, screen1_image (...) to override path for individual images. * (Launcher) Can prefix paths with $CONFIG/ (referring to the directory containing the current configuration file). * (Launcher) Added translations: es [albconde]. * (Launcher) Updated translations: pl [grimi], it [Speedvicio], fr [Foul], sr [Milanchez]. Version 2.1.3: * New option "mouse_speed" - set mouse speed in percentage(1-500). * Escape key can be used to navigate back and exit FS-UAE menu. * Use new state subdirs based on configuration name by default. New options state_dir and state_dir_name to tweak the new behavior. * Remove use of "Floppy Overlays" and "Flash Memory" dirs, save files in state directory instead (same as launcher already does). * Will autoload saved state if "Saved State.uss" exists in state dir. * Merged updated emulation core from WinUAE 2.5.0beta24. * New option middle_click_ungrab (can be set to 0). * Updated translations: pl [grimi], de [nexusle]. * Patch amiga-os-310.rom to default A4000 rom on demand. * Removed the default slight gamma correction which was applied before. * (Launcher) Automatically fill in WHDLoad Arguments when zip file is loaded. * (Launcher) Screenshots/titles/covers don't need to be put in letter subdirs. * (Launcher) Use direct subdirs in save states dir, don't add letter unless an old state dir already exists. * (Launcher) Added many more options to the settings dialog, including the new mouse speed option. * (Launcher) Updated translations: pl [grimi], de [nexusle]. Version 2.1.2: * Fix for running from directory with non-ASCII characters on Windows. * Use mmap to allocate executable memory on non-Windows platforms, fixes segmentation faults with i386 versions. * Patch amiga-os-130.rom to default A500 rom on demand (3 byte diff). * Don't use warning-related compiler options by default, (useful for older compiler versions), enable again with make devel=1. * Updated translations: it [Speedvicio]. * (Launcher) New setting dialog pages for video, input, scan and experimental settings, common options added to these pages. * (Launcher) New option to disable use of built-in configurations. * (Launcher) Can use amiga-os-130.rom as kick34005.A500 for WHDLoad, will patch on demand. * (Launcher) amiga-os-130.rom, default A500 rom and overdumped default A500 rom can be used together in net play mode (they are all normalized to default A500 rom). * (Launcher) Use wxversion.select to specifically choose wxPython 2.8. * (Launcher) Fix for running from directory with non-ASCII characters, and when user's home directory contains non-ASCII characters. Version 2.1.1: * Merged updated emulation core from WinUAE 2.5.0beta23. * Gamepad button "left trigger" toggles auto-fire, GUI message is displayed when auto-fire mode is toggled. * New option hard_drive_x_file_system to specify file system handler, for instance path to SmartFilesystem. * New option hard_drive_x_controller to specify HD controller. * New option hard_drive_x_type to force RDB mode if RDB cannot be autodetected (unpartitioned/blank disk image). * (Launcher) hard_drive_x can be http(s) URL and the HD will be downloaded on demand and used like a local file. URL must end with a "normal file name". * (Launcher) Use wxversion.select to ensure 2.8 is used if also older versions of wxPython are installed. Version 2.1.0: * Merged updated emulation core from WinUAE 2.5.0beta21. * FS-UAE mman updated to work more like the WinUAE implementation. * Ejecting CD images works now, enabled menu option. * Added auto-fire toggle mechanism to F12 menu. * Auto-fire support, new boolean options joystick_port_x_autofire. * Added support for Amiga mouse wheel and middle mouse button. * (Launcher) Added button to configure auto-fire per joystick port. Version 2.0.1: * Removed redundant lag display from net play hud. * Updated translations: pl [grimi]. Version 2.0.0beta36: * (Launcher) Re-enabled the GUI control for WHDLoad arguments. * (Launcher) Added a help button for WHDLoad arguments control. * (Launcher) Scan kickstarts/configs on start only if dir mtime has changed. * (Launcher) fast_memory was always set to 8192 when running WHDLoad games. * (Launcher) Updated translations: it [Speedvicio]. Version 2.0.0beta35: * Make sure memory pointed to by p96mem_offset is contiguous with memory pointed to by natmem_offset, fixes crash on Linux with RTG enabled. * (Launcher) Custom setting "kickstart_setup" can be set to 0 if you don't have and/or don't want to install recognized kickstart ROMs. * (Launcher) Updated translations: pl [grimi], sr [Milanchez], de [nexusle]. Version 2.0.0beta34: * Updated translations: pl [grimi], nb. * (Launcher) Correctly update version number / series in all distributions. * (Launcher) Added translations: pl [grimi], nb. * (Launcher) Updated translations: fr [Foul], de [nexusle], sr [Milanchez]. Version 2.0.0beta33: * (Launcher) When using the "select multiple files" function to select a zip file with floppies, automatically selected the floppies within. * (Launcher) Increased the width of the configuration dialogs. * (Launcher) Include version number in titlebar. * (Launcher) Fixed some missing translations. * (Launcher) Updated translations: fr [Foul], de [nexusle]. Version 2.0.0beta1: * Don't quit on parse error when parsing viewport option. * (Launcher) Show notification about new versions in the same series (stable or devel) as the installed version. * (Launcher) Added information panel to toolbar, currently used to show update notifications. * (Launcher) Fix path issue on Windows causing kickstarts to be scanned on every startup. * (Launcher) Updated downloadable WHDLoad version to 17.1. * (Launcher) Added tooltips to main window tabs. * (Launcher) Simplified default scan search path to just FS-UAE dir. * (Launcher) Implicitly add CD-ROM drive if CD image list is non-empty. * (Launcher) Automatically add CDs in drives to image list if list is empty. * (Launcher) Fixed bug when saving configurations. * (Launcher) Fixed type-ahead search bug in configuration list. Version 1.3.31: * (Launcher) Use native toolbar control on Mac. * (Launcher) More consistent use of browse for file/folder icons. * (Launcher) Automatically select CD32 Gamepad mode when selecting CD32 model. * (Launcher) Recalculate default devices after editing joystick settings. * (Launcher) Contract paths also when using multi-select. * (Launcher) Media swap lists are now editable. * (Launcher) Use proper list views for media swap lists. * (Launcher) Replace other list controls with new implementation. * (Launcher) Hide "WHDLoad Arguments" control. * (Launcher) Updated translations: it [Speedvicio]. Version 1.3.30: * (Launcher) New list control implementation for configurations list. * (Launcher) You can now type in the config list to jump to items. * (Launcher) Configuration list items are prefixed with an icon. * (Launcher) New setup page for importing kickstarts when starting the launcher for the first time. * (Launcher) Automatically scan for rom changes in main Kickstarts folder on startup. * (Launcher) Fixed backspace behaviour in config name text box. * (Launcher) Windows installer: explicitly put registry keys in HKEY_CURRENT_USER\Software\Classes instead of HKEY_CLASSES_ROOT. Version 1.3.29: * Implemented fs_application_exe_path for Unix-like systems. * Data files ("share") are now also searched relative to fs-uae executable (executabledir/share and executabledir/../share) before checking the default system locations, and no longer searched for under cwd. * Fixed problem where A key press could mysteriously appear on OS X. * Fixed bug with shader passes being multiplied on mode switch. * Link with -headerpad_max_install_names on OS X [Tobias Netzel]. * (Launcher) Saving configurations is now possible. * (Launcher) Added new "default" input device options. * (Launcher) Contract paths with $BASE or $HOME if possible. * (Launcher) Automatically scan local config files (.fs-uae) on startup. * (Launcher) Net play panel must be enabled with custom setting netplay_feature = 1 (temporary for 2.0 series). * (Launcher) New icon to distinguish the launcher from FS-UAE. Version 1.3.28: * New official boolean option uaegfx_card to enable the "Picasso 96 card". * Re-initialize shaders after fullscreen<->window switching. * (Launcher) Double-click (or enter) in configuration list starts FS-UAE. * (Launcher) Remember last directories used when browsing for floppies, CDs, hard drives and kickstarts. * (Launcher) Automatically add floppies in drives to swap list if swap list is empty. * (Launcher) Find hard drive zip file relative to hard drives dir. * (Launcher) GUI widgets to override memory settings. * (Launcher) Added checkboxes for uaegfx.card and bsdsocket.library. * (Launcher) Added checkbox to enable NTSC mode. * (Launcher) Updated GUI main window background drawing to make the GUI look better on Linux (looks much nicer on Kubuntu now). * (Launcher) Center FS-UAE window on launcher window. * (Launcher) Center launch dialog on main window also on OS X. * (Launcher) Updated look for OS X. Version 1.3.27: * Config for Retro Joystick interface v1.2 (joystick adapter) [Magnar]. * Fixed serial port emulation when not serial port is not "used". * Native serial port for POSIX systems [lallafa]. * Added A1000 model support (defaulting to Kickstart 1.2). * Fixed a bug preventing the launcher from starting on some systems. * (Launcher) Added A1000 model support. * (Launcher) Work around bug in openSUSE 12.2's gettext.py. Version 1.3.26: * Fixed window manager icon lookup on Linux [grimi]. * (Launcher) Associate .fs-uae files with FS-UAE (windows installer). * (Launcher) Expand ~/ and $HOME/ in paths from config files. * (Launcher) Fixed joystick matching when joystick name contains multiple adjacent spaces. * (Launcher) Set window icon for Linux also, in case the desktop environment does not pick up the .desktop file icon. Version 1.3.25: * Properly close OpenAL device on shutdown (avoids error on shutdown on Windows with OpenAL Soft implementation). * Bundle oal_soft.dll as OpenAL32.dll on Windows (no OpenAL installation needed, but will not use HW-specific drivers unless OpenAL32.dll is deleted from app dir). * New shortcuts (soft/hard reset, freeze, debugger) [lallafa]. * Initial FreeBSD support (tested to compile and run on FreeBSD 8.2). * Automatically choose best texture format for new video_format rgb565. * Added config for Speed-Link Competition Pro Gold [Régis Patroix]. * Added support for RTG modes with native 16-bit buffers. * Copy RTG video row data without pixel conversion when possible. * Added support for PPC / Mac OS 10.5 [Tobias Netzel]. * Added support for 16-bit video and texture formats (new value video_format = rgb565). * Fixes to allow for compilation with clang. * Replaced deprecated valloc, getpagesize with posix equivalents. * (Launcher) Bundle local Microsoft.VC90.CRT on Windows. * (Launcher) Workaround to make translations work on Mac OS X. * (Launcher) Fixed bug when setting hard_drive_x folders options from config files. * (Launcher) Remove information panels when running on small resolutions. * (Launcher) Updated translations: fr [Foul], de [nexusle], it [Speedvicio]. Version 1.3.24: * New option cdrom_drive_count -can be used to specify an empty drive. * Empty options are now treated as unspecified options. This can break a couple of configurations since you cannot use e.g. cdrom_drive_0= to specify that you want a CD drive without any CD inserted. Use cdrom_drive_count=1 instead (or floppy_drive_count for floppy drives). * Reverted F11 key to zoom setting when used alone (on key depress). * Both full-frame and cropped images are saved when taking a screenshot. * (Launcher) Redesigned user interface. * (Launcher) Net play support with integrated lobby, chat rooms and game channels. Options are automatically synchronized between players. * (Launcher) Support --base-dir command line argument. * (Launcher) Check recursively upwards from directory containing executable and look for "Portable.ini" -if found, use directory containing Portable.ini as base_dir. * (Launcher) Paths in database are converted to/from paths relative to base_dir (if possible) so the database can be portable. * (Launcher) You now cannot put options recognized as config options in custom settings. * (Launcher) Added built-in configuration for "Transplant" game. * (Launcher) Log to Documents/FS-UAE/Logs/Launcher.log.txt (while also logging to console, if available) * (Launcher) Updated translations: fr [Foul]. Version 1.3.23: * New shortcut for quit: F12+q or F11+q. * New shortcut for zoom: F12+z or F11+z. * New shortcut for zoom border: F12+b or F11+b. * New shortcut for grab input (toggle): F12+g or F11+g. * New shortcut for fullscreen/window toggle: F12+f or F11+f. * New shortcut for screenshot: F12+s or F11+s. * Menu mode is now triggered on F12 (or F11) _release_ if key is used alone. * F11 does no longer control the zoom function directly. * Floppy drives are no longer write-protected when loading compressed ADFs. * New option writable_floppy_images, set to "1" to write data back to original disk files (when possible) instead of overlay files. * Option "input_grab" renamed to "initial_input_grab". * New option "automatic_input_grab" to control whether input is automatically grabbed on mouse click or not. * (Launcher) Fixed saving custom settings when closing dialog on Windows. * (Launcher) Fixed case in names of scanned .fs-uae configurations on Windows. * (Launcher) Updated translations: it [Speedvicio]. Version 1.3.22: * Some changes to po file management to get smaller diffs between releases. * (Launcher) Changed how images for database entries are looked up. * (Launcher) Continue scanning when encountering corrupt zip files. * (Launcher) Updated translations: it [Speedvicio]. Version 1.3.21: * (Launcher) Add support for a third A600 kickstart (r37.300). * (Launcher) Properly look up save_disk with pkg_resources. * (Launcher) Find kickstarts relative to kickstarts directory when using custom kickstart. * (Launcher) Properly look up save_disk with pkg_resources. * (Launcher) Fixed a couple of mis-spellings. * (Launcher) Updated translations: fr [Foul]. Version 1.3.20: * Preliminary fix for a crash in bsdsocket library. * (Launcher) The launcher supports builtin configurations downloading game media on demand, builtin configuration for "Cybernetix" added. * (Launcher) URLs supported in floppy_drive/image options, floppies will be downloaded and cached on demand -used for freeware/shareware section. * (Launcher) Launcher creates a base WHDLoad system automatically, downloading necessary (re-distributable) files on demand. * (Launcher) Kickstarts can be located in zip files and are temporarily extracted (and decrypted if necessary) on use. * (Launcher) Disk images in zip archives are also scanned and indexed, will be automatically (and temporarily) extracted on use. * (Launcher) Added GUI for extended kickstart ROM. * (Launcher) Explicit abort button in scan dialog, disable close button when scan is running. * (Launcher) Respect XDG user dirs when saving joystick configuration. * (Launcher) Show error message if trying to configure joystick buttons when no joysticks are connected. * (Launcher) Updated translations: sr [Milanchez], it [Speedvicio]. Version 1.3.19: * Line endings / white space cleanup for public git repo. * Improved .spec file for openSUSE builds [RedDwarf]. * Added docdir option to Makefile [RedDwarf]. * Compilation fixes and buffer underflow fix [RedDwarf]. * (Launcher) Support modified database layout format. * (Launcher) Added missing save disk image from distributions. * (Launcher) Updated translations: it [Speedvicio]. Version 1.3.18: * Added option audio_buffer_target_bytes (defaults to 8192). * Reduced internal uae audio buffer from 1024 to 512 bytes. * Added logitech_r_precision_tm_gamepad_10_2_0_0_windows.conf [Paul]. * (Launcher) Search field allows to search for multiple (AND-ed) terms. * (Launcher) Also index .adz files in the database. * (Launcher) Fixed bug where paths relative to Floppies dir were not found by the launcher. Version 1.3.17: * (Launcher) Automatically add blank save floppy to floppy image list. * (Launcher) Create separate state dir for each configuration and store save states, floppy overlays and flash memory in this directory. * (Launcher) Save WHDLoad-zip file changes to state dir (and copy back next time the game is run). * (Launcher) Copy floppy images to temporary directory before starting FS-UAE. * (Launcher) Delete temporary files when FS-UAE is done running. * (Launcher) Automatically copy kick34005.A500, kick40068.A1200 and kick40068.A4000 to HD dir (if found in scan database, and decrypting if necessary) when starting WHDLoad game. * (Launcher) Added action_activate_cartridge (key mapping). * (Launcher) Load per-config theme automatically if found. Version 1.3.16: * Correctly respect end_config option (missing return statement). * Updated Makefile so libfsemu/Makefile is run also when libfsemu.a is already built (in case libfsemu source has changed). * Use AROS builtin rom if kickstart_file is set to "internal" * (Launcher) Remember window maximized state. * (Launcher) On Linux, default to ~ if XDG user dir DOCUMENTS is not set. * (Launcher) Moved joystick settings button to new settings dialog. * (Launcher) Moved input options "More" button to config group. * (Launcher) Fixed startup problem if default locale is None. * (Launcher) Preferred joystick setting did not work after launcher restart on Windows because of a trailing carriage return character. * (Launcher) Purge old (non-existing) file entries when scanning for files. * (Launcher) Changed default kickstarts so kickstarts corresponding to those available from Cloanto is preferred (either encrypted or decrypted). * (Launcher) Calculate decrypted sha1 from Cloanto ROMs when scanning. * (Launcher) New paged settings dialog. * (Launcher) Moved preferred joysticks setting to new settings dialog. * (Launcher) Allow selecting internal kickstart in addition to default/custom. * (Launcher) Open a larger window by default if the screen is big enough. * (Launcher) Allow local custom options via new config dialog. * (Launcher) Merge hardware dialog into new config dialog. * (Launcher) Added GUI widget for WHDLoad arguments. * (Launcher) Add controls for (simple) hard drive configuration. * (Launcher) Also look for WHDLoad base hd directory in FS-UAE dir. * (Launcher) Write "uae-configuration SPC_QUIT 1" to end of User-Startup when running WHDLoad game. * (Launcher) Show game cover if available (along with game and variant name). * (Launcher) Also save key, value pairs prefix with # in custom settings. * (Launcher) Added checksum for decrypted CD32 ROM. * (Launcher) Updated translations: it [Speedvicio]. Version 1.3.15: * Render subtitle (displayed after title) with translucent font. * (Launcher) Allow custom options via settings dialog. * (Launcher) Launcher now instructs FS-UAE to ignore Host.fs-uae - set custom options in settings dialog instead. * (Launcher) Support running zipped WHDLoad games. * (Launcher) Show up to five screenshots + title shot. * (Launcher) Support creating automatic configurations for games based on local files and game definition database. * (Launcher) Add support for CDTV and CD32 models. * (Launcher) Added tooltips for icon buttons and some other elements. * (Launcher) Add CD-ROMs dialog. * (Launcher) Change main floppy selectors into removable media selectors. * (Launcher) Selectors for preferred joysticks. * (Launcher) Implement new XML format for game and config definitions. * (Launcher) Scan and store checksum for floppy images in database. * (Launcher) Support XDG user dirs (requires xdg-user-dir executable). * (Launcher) Some more use of icons and icon buttons. * (Launcher) Changed .desktop categories to Game;Emulator; * (Launcher) Updated translations: fr [Foul]. * (Launcher) Added translations: de [nexusle], it [Speedvicio]. Version 1.3.14: * (Launcher) Add window icon for Windows. * (Launcher) Added translation infrastructure. * (Launcher) Added translations: fr [Foul], nb. * (Launcher) Fix an erroneous error message when starting with a custom kickstart ROM. * (Launcher) Install README, license and icons when building debs. * (Launcher) Install .desktop file for Linux (entry in programs menu). Version 1.3.13: * Show on-screen message when saving screenshot. * Smooth fade on quit also in vsync mode. * Conditionally add OF macro to fix compilation of unzip on Gentoo [jopadan]. * Alter keycode mapping on Linux to make it work with both evdev and kdb Xorg drivers, and not just evdev mappings [AndrewKanaber]. * (Launcher) Remember last used options and settings. * (Launcher) Configuration browser with search-as-you type. * (Launcher) Display screenshots for selected configuration (if found in specific dirs). * (Launcher) Save scanned configurations in a database. * (Launcher) Scan dialog shows identified kickstarts. * (Launcher) Some GUI reorganization / updates related to the introduction of the new configurations panel. * (Launcher) New hardware dialog where kickstart can be overridden. * (Launcher) New input dialog where parallel joystick ports can be configured. * (Launcher) Correctly blank out the rest of the drives when multi-selecting less than 4 floppies. * (Launcher) Spec file for building RPMs of the launcher is added. Version 1.3.12: * Fix framewait and make RTG work again (problem introduced in 1.3.11). Version 1.3.11: * Log to log file when configuration is changed with uae-configuration. * Change framewait, so change from fastest possible -> cycle exact works again. * Also compile libfsemu with _FILE_OFFSET_BITS=64. * 32-bit versions of fs-uae should now be able to open hdf files > 4GB. * (Launcher) Re-enable joystick config (now running in separate process). Version 1.3.10: * Properly close hdf file stream in hdf_close_target function. * Compile with _FILE_OFFSET_BITS=64 for large file support. * Use 64-bit ftell/fseek functions for hdf support where available. * Call fflush(NULL) to flush other remaining file streams on exit, if any. * Less video latency in full sync mode, but also requires a more powerful computer for smooth scrolling. Use new option low_latency_vsync to enable. * Can alternatively specify path to theme folder with theme option. * Warn when using deprecated SUPER model. Use A4000/040 instead. * Use simplified framewait function in custom.cpp. * Merged WinUAE 2.4.2beta2 + compatibility patch. * Fixed a RTG screen mode change crash (pointer to resized buffer not set correctly). * Disabled OpenGL debug checking, which was accidentally enabled in the latest development releases. * fs-uae can be started with --list-joysticks to just print names of connected joysticks to stdout and then exit. * (Launcher) Automatically set amiga joystick port mode when selecting host device. * (Launcher) Clear (rest of) floppy image list when multi-selecting floppies. * (Launcher) Automatically select first joystick for input port 1 if a joystick is connected. * (Launcher) Add window/fullscreen mode selector. * (Launcher) Replaced some text buttons with bitmap buttons. * (Launcher) Detect connected joysticks by running fs-uae --list-joysticks. * (Launcher) Removed joystick configuration from launcher (for now) due to a pygame / wxpython conflict. Version 1.3.9: * Fixed a crash due to row map not being updated when reallocating larger buffer after RTG screen mode change. * Added keyboard emulation for CD32 gamepad -Cursors, Rctrl/Ralt (red), C (red), X (blue), D (Green), S (Yellow), Z (Rewind), A (Forward), Return (Play)) * Do not automatically unpause when exiting menu mode. * Show overlay icon when emulator is paused. * Do not automatically grab/ungrab input when pausing/resuming. * Automatically focus on the last used save state slot (in this session) when entering the save state menu. * Automatically focus on the current floppy image when entering floppy image list. * (Launcher) Function to scan for kickstarts, and automatically select kickstart based on Amiga model. * (Launcher) More Amiga models added. * (Launcher) Changed GUI in preparation for more features. * (Launcher) Added clear button to remove floppy from drive. * (Launcher) Integrated joystick configuration tool. * (Launcher) Can select multiple floppies at a time and auto-fill drives and floppy list. Version 1.3.8: * New option "theme" to specify the name of the theme to load. * New option "texture_filter" to force nearest filter (for pixel-perfect mapping in combination with scaling options). * Themes can override sidebar background images. * Themes can override menu icons (close, volume, etc). * Themes can override bitmap fonts. * Themes can include overlay images (with position) to display when floppy drives have activity (when floppy drive led is enabled). * Themes can include overlay images (with position) to display when floppy drives have disks inserted. * Option to override background colors. * Option to to menu text color (headings and normal items). * Ability to specify an overlay image (such as the one created by Ambermoon). * Themes can also set FS-UAE options such as shaders and scaling option, for instance useful to set scaling options to make the screen fit an overlay. * Theme config options can also be specified in regular config files. * Specify custom images and positions for on-screen leds (for floppy leds etc). * Also read themes from Documents/FS-UAE/Themes, so it is easier to install / unpack custom themes not bundled with FS-UAE. * New bundled example theme: ubuntu_12_04 (colors to match Ubuntu theme). * New bundled example theme: 2x_1920_1080 (for pixel-perfect mapping at 1080p). * New bundled example theme: and 2x_1920_1080_bezel (same with simple bezel). Version 1.3.7 * Fixed an input event offset problem causing soft reset to be interpreted as quit and disk swapping to be off by one (1.3.4). * Merged WinUAE 2.4.2beta1 + FS-UAE compatibility patch. * Patches to respect CFLAGS/CXXFLAGS/LDFLAGS and compilation tools from environment, courtesy of Philantrop. Version 1.3.6 * Recreate OpenGL state when resizing window on Mac OS X. Version 1.3.5 * Compile with JIT on x86 (32-bit) platforms. * Compiling with -fpermissive (for now). * Always set comp_trust* to indirect by default. * Compile with NATMEM_OFFSET defined. * Ported JIT code from WinUAE, E-UAE and PUAE. Version 1.3.4 * Updated translations: it, sr. * Merged code from WinUAE 2.4.1. * Added new bitmap font characters needed for Italian. * Removed libcapsimage from fs-uae deb file (can be installed separately as package libfs-capsimage4). * Removed libcapsimage from the source distribution (due to potential license issues, makes fs-uae package more suitable for inclusion in Linux distributions, etc). * Tweaked the appearance of some bitmap font characters, especially Z. * Make sure rom.key is loaded before scanning for roms. Version 1.3.3 * Use local host file time for file time with mounted virtual hard drives, should fix icon visibility problem with WB 1.3 and mounted directories. * Included genblitter patch from Mustafa 'GgnoStiC' TUFAN. * Build x86_64 version on x86_64 Mac unless arch=i386 arg is given to Makefile. * Added Serbian translation (courtesy of EAB user Milanchez). * Updated translations: fr, de. * Fixed missing translation of KEYBOARD and MOUSE in one context. * Replace RIGHT SINGLE QUOTATION MARK (U+2019) with apostrophe when rendering text with bitmap font. * Updated viewport hack for standard Workbench 2.04 screen * Cleaned up source code to make diffs against WinUAE shorter and cleaner, * FS-UAE-specific code is now properly guarded by ifdefs. * Show a notice when using F11 key in RTG mode. Version 1.3.2 * Fixed crash on Mac when saving state with mounted folder. * New option "zoom" to set the initial zoom mode ("F11 mode"). * New eject menu option for floppies (CD coming later). * Fixed bug where a wrong disk was disabled (when inserted) in the floppy image list. * New boolean option "localization" can be set to 0 if you want to disable translations. * Updated translations: it. * Added Polish characters to the bitmap font. * Added Polish translation (courtesy of EAB user olesio). * Extend the simple bitmap font format to include the first 512 unicode characters. * Bundled additional shaders: hq2x, scale2x (best with line_doubling=0 and/or low_resolution=1, depending on actual game resolution). * New options boolean options "low_resolution", and "line_doubling" to force low-res pixels and disable line doubling) (F11 zoom modes and aspect correction does not work properly in combination with these yet). Version 1.3.1 * Added several common western european characters to bitmap font. * Added German translation (courtesy of EAB user nexusle). * Added Italian translation (courtesy of EAB user Speedvicio). * Added French translation (courtesy of EAB user Foul). * Added some bundled (open-source) shaders: crt, curvature, scanline-3x, heavybloom, simplebloom, edge-detection, lanczos-6tap. * The new "shader" option can now be used to both specify paths to external shader file, or it can name a bundled shader. * Marked text in GUI menu entries for translation. * Added internationalization infrastructure. Version 1.3.0 * Support XML shader spec 1.1. * New scaling options (scale_x, scale_y, align_x, align_y), makes it possible to get 1:1 pixel mapping (or 2:1 etc) for your LCD display. * Write OpenAL debug information to log file on startup. Version 1.2.0rc3 * Fixed bug causing blank screenshots to be saved. Version 1.2.0rc2 * Fix resources in Mac bundle. Version 1.2.0rc1 * Explicitly link against libX11 on Linux because some X functions are now used directly. * Shift+F11 now toggles padding the viewport with 10 pixels. * Shift+F12 now releases input focus (in addition to alt+tab and middle-click). * F12 cannot be combined with (ctrl, shift, alt) now to open the menu, modifier keys are reserved for future shortcuts (Cmd+F12 can still be used on Mac since Mac OS "swallows" F12 if used alone). * New option "end_config" can be used to prevent loading of additional configuration files (Host.fs-uae...). * Do not warn about "no configuration file loaded" if end_config was specified via program arguments. * A couple of glColor statements were left commented out by mistake after debugging a problem. Version 1.1.10 * Request dark window manager theme (GNOME 3) -looks cooler. * Added .desktop application launcher file for Linux. * Added FS-UAE icon (in different sizes) to the icons/hicolor folders. * Set window icon via _NET_WM_ICON on Linux. * Fixed bug when scanline (dark/light) intensity was set to 0. * Removed a couple leftover glEnd causing GL errors (not noticeable). * Changed the way shared data files are looked up -compatible with the XDG standard now. * Don't trust refresh rate from xrandr with only one mode in mode list. Version 1.1.9 * Merged updated code from filesys.cpp isofs.cpp and isofs_api.h, fixes crash when inserting CD image. * Fix screenshot saving when buffers are BGRA. * new option to choose between video sync methods (video_sync_method). * Use older video sync method as default * New default port for net play: 25100 (the port range from 25100 to 25500 is by default used for the new net play service). * New options fullscreen_width, fullscreen_height (especially useful to force output to one display only on a Linux/nVIDIA/twinview setup). Version 1.1.8 * Always load default host-specific configuration values from Host.fs-uae, if it exists (useful for fullscreen settings, etc). * Support replacement prefix $config in paths - will be replaced by the directory containing the current configuration file. * Boolean options ("1" or "0") can now be simplified when specifying as program arguments as --arg (same as --arg=1) or --no-arg (same as --arg=0). For instance you can just use --fullscreen or --no-fullscreen. Version 1.1.7 * Try creating a OpenAL context at 48000 Hz first. * Use GL_ARB_sync extension for display synchronization where available. Version 1.1.6 * Use GL_NV_fence extension for display synchronization where available. * Use GL_APPLE_fence extension for display synchronization where available. * Some code refactoring for better future portability. * Fix rendering of scanlines with aspect correction on (overscan). * Use requested video_format for text rendering and utility textures as well. * Use smaller texture for text rendering and caching (for now). Version 1.1.5 * F11 key toggles between autoscale mode and a few fixed viewports. * Some minor rendering updates. * Ignore viewport setting in RTG mode. * Swap red/blue color channel when saving screenshots in BGRA mode. * Center amiga display, not crop, when keep_aspect is 1. * Stretch overscan border to fill screen if keep_aspect is 1. * Always set cpu_idle option. Version 1.1.4 * Add fullscreen size and window size as RTG screen modes. * Dynamically increase video buffer sizes if necessary. * Options added to change video buffer format and internal texture format. * Use GL_BGRA as the default video buffer format. * Use GL_RGB as the default internal texture format for Amiga video frames. * Write information about OpenGL renderer to log file. * Hack to correct the output of the autoscale algorithm in some specific situations (some Workbench screens, etc), hack will be updated/removed as necessary. Version 1.1.3 * Fixed crash when accessing the input options menu. * Fix rendering of fonts in dialogs. Version 1.1.2 * You can also configure parallel port joysticks from the menu now. * Show CD-CDROM drive selector in GUI (for all Amiga models) if CD-ROM drive is enabled. * Cloanto ROMs are now properly scanned on startup. No need to specify kickstart_file unless you want to use a non-standard kickstart. * Choice between soft and hard reset when choosing "Amiga Reset"; also gives a bit more protection against accidental reset. * Fix crash on Linux/Mac when non-existing CD is specified for cdrom_drive_0. * No scanlines are rendered in RTG mode unless the new option rtg_scanlines is also set to 1. * Quit FS-UAE if Alt+F4 (Cmd+F4) is pressed. * Fixed a bug where all subsequent hard drives were mounted read-only if one was mounted read-only. * Re-enabled bsdsocket.library for Linux and Mac. * Use path resolving function for *_dir path options too. * Match more disk names with built-in regexp (for name shortening). * Write read configuration key/values to log file (for debugging, no need to send config + log file any longer; just the log file will do). * Re-organized the FS-UAE on-screen main menu. * Menu font re-drawn a bit smaller and thinner. * Use only older OpenGL features, should work fine on OpenGL 1.4/1.5 implementations now (possibly also OpenGL 1.1). * Use a texture atlas for GUI elements to reduce the amount of state changes. * BEAMCON0 hack for P96 restricted to only setting PAL bit. * Support new naming scheme for controller configuration files (used for config files created by new new external controller configuration tool). * Added controller configurations: usb_2_axis_8_button_gamepad.ini, (thrustmaster) t_mini_wireless.ini * Showing FS-UAE application icon in window menu and application switcher on Windows. * Disable most Windows hot keys (the "Windows" key, etc) when running FS-UAE. * Disable sticky keys shortcut (and toggle keys etc) on Windows so these don't interfere with game play. Version 1.1.1 * CDFS fix for lowercase file names. * OpenGL performance improvements (avoid unnecessary state changes). * Support fullscreen/window mode switcing with alt+return. * On Mac/Linux you can press alt+tab to release input focus / mouse grab. * On Windows, alt+tabbing also releases mouse grab * On Mac/Linux, alt+tab also temporarily switches to window mode if in fullscreen, hold down alt and press alt once more to start cycling through windows as normal (alt+tab already worked on MS Windows). * Use "real" fullscreen mode on Linux/Mac now since fullscreen/window switching is implemented. * On Mac you can use cmd+tab and cmd+return instead of alt+tab/alt+return. * Restricted ugly BEAMCON0 hack to only when rtgmem_size > 0. * Restructured file layout in source archive. Version 1.1.0 * Picasso 96 / UAEGFX support. * Support mounting CD images with the new built-in CDFS system from WinUAE. * Rendering system updated, more efficient *and* more compatible rendering. * Added A4000/040 model, running in fastest possible mode. * Support file system file names with non-ASCII (Latin-1) characters. * A1200 with accuracy < 1 runs with approximately A1200 speed and can now also be used in net play mode. * New system for accuracy option. * BSD socket emulation is now currently disabled also on Linux/Mac (needs updated code to work). * Use filesys threads (faster file system) when not in netplay mode. * Process filesys packets after variably delay depending on operation. * Updated UAE code to WinUAE 2.4.0 Version 1.0.0 * Process single filesys packets in a hsync handler instead of several packets in a vsync handler. Version 1.0.0rc4 * When looking up nname from aname, check existing files in the directory for a matching file (when not considering case). * Only enter chat mode of tab key is pressed without modifiers. Version 1.0.0rc3 * Fixed file system problem causing file system packets to not be processed in some circumstances. * If flush_block has not been called between calls to flush_screen, assume that a new frame has not been rendered and reuse the last frame. Fixes flickering in CD32 intro animation. * When reusing the last frame, also reuse custom limits from the last frame. Incidentally fixes autoscale shaking issue in CD32 intro animation. Version 1.0.0rc2 * Fix for OpenGL issue on some Intel GPUs (dark screen). Version 1.0.0rc1 * Do not use tab key to enter chat function unless in net play mode. * Fixed bug where key releases where sent to the Amiga while in chat mode. * Compiling UAE code with GFXFILTER define. * More options (classified as host options) can be specified with uae_* options. * Added a bit of default gamma correction. This can be overridden with the option uae_gfx_gamma. * Support none/nothing for options joystick_port_x_mode. * Rendering fix for screen side in perspective mode. Version 0.9.13beta11 * Can specify joystick port mode (useful for forcing CD32 gamepad emulation on non-CD32 model). * Overlay GUI "console" displaying chat and emulation warning messages. * Emulation will now also close when using the quit function, even if the emulation thread is non-responsive. * FS-UAE continues in offline mode if net play connection is broken. * FS-UAE continues in offline mode if a desync or other net play error occurs. * On-screen connection dialog showing when connecting to net play server. * FS-UAE will keep try connecting until successful or manually aborted by user (net play server can be started after clients are started..) * On-screen dialog while waiting for net play game to start (waiting for other players...). * Integrated text chat for net play. * Net play HUD / status bar can be toggled on/off with the TAB key. * Support passwords for net play games (option netplay_password). * Fadeout effect when closing the emulator. * Some name changes in custom / advanced input mapping. * Added aliases for Xbox 360 controllers with slightly different names on some Windows systems. Version 0.9.13beta10 * Fix for net play protocol for 6 players. Version 0.9.13beta9 * Increased max players in net play to 6 (up from 4). * Initialize real-time clock properly when not in net play mode. * Enable real-time clock on A500 only when using memory expansions. * Allow using uae_* options to specify custom uae option overrides (use with caution). Version 0.9.13beta8 * Reduced CPU usage due to Improvements in rendering system. * Large performance improvements in OpenGL renderer. Version 0.9.13beta7 * Strip configuration values for whitespace at start and end * Check for floppies in Floppies, not CD-ROMSs dir. * Process one addition filesys package per hsync (fixes a WHDLoad problem). Version 0.9.13beta6 * Change how input ports is configured, fixes mouse input in port 1, also fixes parallel port joysticks (which probably was broken). * Add CD32 gamepad option to input menu. Version 0.9.13beta5 * Fix to not try to resolve empty paths. * Fix mouse configuration for new input menu system. Version 0.9.13beta4 * New options: window_width, window_height, window_resizable. * File system mounting is compatible with net play. * Show title / subtitle strings in window title. * Clear keyboard modifier state when window is activated / receives focus. Version 0.9.13beta3 * Change in OpenGL renderer for Linux, making it work better with vsync on recent Linux systems with recent nVIDIA drivers. * File system mounting made more compatible with net play (some issues with normal folders remaining, zip file mounting seems stable in net play). * Fixed issue where (mounted) file system access slowed emulation. * Fixed crash when referring to a non-existing disk file. * Fixed crash when saving state wile using hardfiles (hdf). * Reordered input menu items. * Added Mad Catz Wired Xbox 360 Controller config. Version 0.9.13alpha2 * Fix input menu label when input is changed during net play. * When mapping a device to an input port, remove it from other existing port. Version 0.9.13alpha1 * Menu function to swap input device and type. * Support floppy images in ADZ format (zipped ADF). * Support floppy images in DMS format. * Resolve relative paths by looking in a set of directories. * Also look for floppies in new FS-UAE/Floppies directory. * Also Look for CD-ROMs in new FS-UAE/CD-ROMs directory. * Also Look for hard drive images in new FS-UAE/hard Drives directory. * Also look for named kickstarts in FS-UAE/Kickstarts directory. * Do not change permissions on ADF files when inserted into floppy drives. Version 0.9.12 * Fixed config for X-Box 360 Pad (Linux) [u1] * Configuration option to mount hard drive image/folder read only. * Fixed bug where emulation after pause ran too fast in non-full-sync-modes. * Added wisegroup_ltd/mp_8866_dual_usb_joypad.ini (courtesy of Foul). * Fixed a bug where large positive mouse movement became negative. * Event information is written to Synchronization.log during net play (this file can be quite large) -cannot be disabled yet. * Include slow memory in memory checksumming (chip + slow, now). * Replaced a busy-loop in net play with proper condition signal/wait, using significantly less CPU now. * Fixed a race condition in the net play server where input events could be sent to some clients out of order (with regard to frames). This would have caused desync when it occurred. * Fixed a bug in the net play server where input events could be sent to some clients before all clients were connected. * Detect refresh rate properly on Mac OS X (was not included in 0.9.11beta2). * Floppy swapping is performed synchronized in net play mode. * GUI Reset action can be used with net play. * Save state saving and restoring is now synchronized in net play mode. * Parallel port joystick emulation (joystick_port_2, joystick_port_3). * Reduced input lag in net play games. * Custom gamepad/joystick -> action mapping. * Custom keyboard -> action mapping. * Support mounting zip files as (read-only) volumes. * Read command line arguments earlier (fixes a Configurations dir issue). * Renamed "amiga_joystick" config value to "dummy joystick" (more descriptive). * Renamed "amiga_mouse" config value to "dummy mouse" (more descriptive). * Floppy speed setting was already implemented, but not documented. * Finally implemented the volume mute function for OpenAL. * Detect refresh rate properly on Mac OS X. * Fix execute permissions for directories created on virtual file system. * Added support for Xbox 360 cabled controller. * Support new path prefixes: $app/ (directory containing executable (Windows) or .app bundle (Mac OS X), $exe/ (directory containing actual executable), and $fsuae/ (the base directory for files - defaults to My Documents/FS-UAE). Version 0.9.10 * Scanline effect support (see example.conf). * New frame limiting logic in libfsemu. * Auto-grab input on mouse click. * Click middle-mouse button to release input grab. * Xbox 360 Wireless Controller configuration for Mac OS X (from Aequitas). * Updated configuration for Logitech Extreme 3D PRO. * Fix crash in Linux version caused by g_set_prgname not being called. * Log file is now saved to (My) Documents/FS-UAE/Logs/FS-UAE.log * Log file directory is configurable. * Multiple mice can be used (in net play) -useful for Lemmings. * New joystick port values: amiga_mouse, amiga_joystick and nothing. * Send protocol version and emulation core version to netplay server. * Fixed a bug where data were written to both floppy overlay files and original ADF files. * Fix A1200 model with accuracy < 1 (now runs in "fastest possible" mode, but cannot be used with full video sync). * Option bsdsocket_library to enable bsdsocket.library emulation (Mac/Linux only for now). * A1200/020 model with 0 MB Z3 RAM as default, but allows the option zorro_iii_memory to be used. * Serial port (dummy) emulation enabled, allows AROS kickstart to boot. * Fix bug related to path expansion and directories. * Unified configuration (config file and --key=value parameters). --key=value parameters overrides values from config file. * Section names are ignored in config file now (but key/values must still be in a section, for instance [config]). Old config files should still work as before. * Old --fullscreen parameter is no longer valid, use --fullscreen=1 instead * Support hard disk files in RDB format (same config option as regular HDF files - RDB format is automatically recognized). * Grabbing input on startup is optional (see example.conf). * Keys are now "positionally" mapped (as much as possible) from host keyboard to amiga keys (some exceptions because of physically different layout: home = lparen, page up = rparen, delete = del, end = help, insert is mapped to the amiga key to the left of backspace, and page down to right amiga key in case the host keyboard has no right windows/apple/menu key). * Use only scancodes on Linux, (and almost entirely on Mac too). * Use rawinput in Windows for keyboard support. * Make caps lock a proper toggle button. * Added an application icon. * fs-uae.app renamed to FS-UAE.app, fs-uae.exe is now FS-UAE.exe. * New config icon for Mac OS X. * Associate .fs-uae files with FS-UAE on Mac OS X. * Can override controller configurations by placing configs files in new FS-UAE/Controllers directory (+ option to configure this directory). * New configuration option: audio/floppy_drive_volume * New configuration option: paths/base_dir * Ported updated caps code from WinUAE. * NTSC mode added (see example.conf) -was really added in 0.9.8, but omitted from changelog. Version 0.9.8: * Support for SmartJoyPlus/TigerGame PS/PS2 adapter (courtesy of smuj) * Can specify less accurate emulation modes (for slower machines). * Detect when xrandr lies about refresh rates (nVIDIA twinview). * Fixed bug when using left crtl/alt/shift simultaneously with emulated keyboard. * New suggested extension for configuration files (*.fs-uae) * New default config file location: (My) Documents/FS-UAE/Configurations/Default.fs-uae * New default dir for kickstarts: (My) Documents/FS-UAE/Kickstarts * New default dir for save states: (My) Documents/FS-UAE/Save States * Path expansion for paths beginning with $HOME/ or ~/ * Fixed crash when custom limits (autoscaling) rect was outside video size. * New model configuration: "A1200/020" (can use Zorro III memory). * New configuration value: zorro_iii_memory. * Audio buffering tweaks. * Clamp FSAA value to [0, 4] range. * Virtual file system update (ported code from WinUAE). * Mac OS X build is universal x86_64 + i386. Version 0.9.7: * FS-UAE can open configuration files without (-c) parameter, makes FS-UAE. easier to start with config from graphical shells (Windows Explorer, Mac OS X Finder). * Added chip_memory, fast_memory and slow_memory options (see example.conf). * Fixed bug where save states would not be saved if floppies where specified with absolute path. * Fixed problem with opening CUE files on systems other than Windows. * Fixed audio buffering issues. * Buffer additional audio data on buffer underrun before resuming playback. * Fixed problem with renaming files in virtual (mounted) disks on Windows. * Code cleanup in libamiga, new wrapper functions for some platform-specific code. * Support for large HDF files (> 2GB) (untested, and not supported on Windows yet). * Better implementation of write_log in libamiga. * Updated README to clarify that you can use ALT+F11 on Mac to toggle mouse pointer (since the OS intercepts F11 alone). * Write information about base WinUAE version to log file. * Use same random number generator on all platforms. Version 0.9.6: * Support for hard drive images (hdf) * Support for mounting virtual folders as hard drives (experimental) * Bugfix in calculation of save location of overlay adf files * UTF-8 is now used internally in libamiga also on Windows, and text is converted to other character sets / encodings as needed. This enables support for non-ASCII characters in paths on Windows. * Added a copyright notice at startup crediting the original WinUAE, E-UAE and PUAE authors, and added a more prominent notice in the start of the README. Version 0.9.5: * Added support for A500+ and A600 models * Video sync behaviour can now be overriden from config or command line (see example.conf) * New --video-sync command line parameter (auto/off/vblank/full) * Old --vsync parameter is gone * Fixed threading related bug which cased OpenAL output to stop * Added a PID controller implementation for automatic audio buffer management (small pitch adjustments are carefully made to keep the buffer from getting to small or too large). Version 0.9.4: * CD audio support for CDTV/CD32 * Audio output is now using OpenAL * CDTV/CD32 now works properly when specifying kickstart files manually * Link with libdl on Linux systems Version 0.9.3: * Configuration option to keep the aspect when scaling the screen (see example.conf) * README: added information about supporting new controllers * example.conf: documented the kickstart_ext_file option * FS-UAE compiles on Linux 64-bit now Version 0.9.2: * Fixed a crash occuring when swapping floppy disks * Fixed problem with parent dirs not being created, preventing logging * Created and added scripts/makefiles to create binary distributions for Windows and Mac OS X (debian files were already added) * Add example.conf, README, COPYING and licence files to all distributions * Source distribution is now patched for 64-bit support Version 0.9.1: * Add Mac OS X-specific Makefile to build an app bundle * Also map right alt key to emulated joystick (for Mac OS X) * Fix compilation of libcapsimage on Mac OS X * Support for several more gamepad devices fs-uae-2.2.3+dfsg/SERIES0000644000175000017500000000000712162366654014766 0ustar glaubitzglaubitzstable fs-uae-2.2.3+dfsg/example.conf0000644000175000017500000000223712162366655016363 0ustar glaubitzglaubitz# FS-UAE example configuration file # The encoding of the configuration file must be UTF-8 (or ASCII) # # All paths can be either absolute, or relative to the current working # directory. The same is true for all paths in the configuration file. # Some relative paths will also be looked up relative to special # directories. For example, a relative floppy image path will also be # looked up relative to the FS-UAE Floppies dir. # # If you specify paths with backslash on Windows, you must escape them # (use \\ instead of just \ - c:\\path\\to\\file). You can also just use # forward slashes instead (c:/path/to/file). # # You can start paths with ~/ or $HOME/ to refer to the user's home. # Example: ~/Documents/Floppies/example.adf # # There are many options available to configure FS-UAE. # See http://fengestad.no/fs-uae/options # for a complete list of configuration options with documentation [config] amiga_model = A500 kickstart_file = C:/Amiga/Kickstarts/amiga-os-130.rom floppy_drive_0 = C:/Amiga/Floppies/Disk.adf # Here or some additional options which can help if FS-UAE runs # too slow on your system: # # accuracy = 0 # video_sync = off # video_format = rgb565 fs-uae-2.2.3+dfsg/INSTALL0000644000175000017500000000021412162366655015103 0ustar glaubitzglaubitzCOMPILING FS-UAE ================ Instructions for compiling and installing FS-UAE is available here: http://fengestad.no/fs-uae/compiling fs-uae-2.2.3+dfsg/util/0000755000175000017500000000000012162366653015030 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/util/update-version.py0000755000175000017500000000307012162366653020352 0ustar glaubitzglaubitz#!/usr/bin/env python import sys def update_version(path, strict=False, update_series=False): ver = version with open(path, "rb") as f: data = f.read() if strict: # only use the first three components parts = ver.split(".") parts = parts[:3] for i, part in enumerate(parts): p = "" for c in part: if c in "0123456789": p += c else: break parts[i] = p ver = '.'.join(parts) data = data.replace("9.8.7", ver) if update_series: data = data.replace("unknown", series) with open(path, "wb") as f: f.write(data) with open("VERSION", "rb") as f: version = f.read().strip() with open("SERIES", "rb") as f: series = f.read().strip() if len(sys.argv) > 1: update_version(sys.argv[1], update_series=("--update-series" in sys.argv)) else: update_version("README") update_version("common.mk") update_version("fs-uae.spec") update_version("debian/changelog") update_version("server/debian/changelog") update_version("server/setup.py") update_version("launcher/setup.py") update_version("launcher/setup_py2exe.py") update_version("launcher/setup_py2app.py", strict=True) update_version("launcher/debian/changelog") update_version("launcher/fs_uae_launcher/Version.py", update_series=True) update_version("src/fs-uae/version.c") update_version("macosx/template/Contents/Info.plist", strict=True) update_version("windows/fs-uae-setup.iss") fs-uae-2.2.3+dfsg/libfsemu/0000755000175000017500000000000012162366653015661 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/libfsemu/include/0000755000175000017500000000000012162366653017304 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/libfsemu/include/fs/0000755000175000017500000000000012162366653017714 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/libfsemu/include/fs/log.h0000644000175000017500000000042712162366654020652 0ustar glaubitzglaubitz#ifndef FS_LOG_H_ #define FS_LOG_H_ #ifdef __cplusplus extern "C" { #endif void fs_log(const char *format, ...); void fs_log_string(const char *str); void fs_log_enable_stdout(); void fs_config_set_log_file(const char *path); #ifdef __cplusplus } #endif #endif // FS_LOG_H_ fs-uae-2.2.3+dfsg/libfsemu/include/fs/init.h0000644000175000017500000000141512162366653021031 0ustar glaubitzglaubitz#ifndef FS_INIT_H_ #define FS_INIT_H_ #include #define FS_INIT_FUNCTION(name) static int g_fs_init_ ## name = 0; \ static void fs_init_function_ ## name ## _2(); \ static void fs_init_function_ ## name () { \ printf("\n\n\n\n\n\n\n\n init\n\n\n\n\n"); \ fs_init_lock(); \ if (g_fs_init_ ## name != 0) { \ fs_init_unlock(); \ return; \ } \ fs_init_function_ ## name ## _2(); \ g_fs_init_ ## name = 1; \ fs_init_unlock(); \ } \ static void fs_init_function_ ## name ## _2 () #define FS_INIT(name) if (g_fs_init_ ## name == 0) { \ fs_init_function_ ## name (); \ } #ifdef __cplusplus extern "C" { #endif void fs_init(); void fs_init_lock(); void fs_init_unlock(); #ifdef __cplusplus } #endif #endif // FS_INIT_H_ fs-uae-2.2.3+dfsg/libfsemu/include/fs/glee.h0000644000175000017500000344726512162366654021027 0ustar glaubitzglaubitz/*************************************************************************** * * GLee.h * GLee (OpenGL Easy Extension library) * Version : 5.4 * * Copyright (c)2009 Ben Woodhouse All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer as * the first lines of this file unmodified. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY BEN WOODHOUSE ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL BEN WOODHOUSE BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * Web: http://elf-stone.com/glee.php * * [This file was automatically generated by GLeeGen 7.0 * ***************************************************************************/ #ifndef __glee_h_ #define __glee_h_ #ifdef __gl_h_ #error gl.h included before glee.h #endif #ifdef __glext_h_ #error glext.h included before glee.h #endif #ifdef __wglext_h_ #error wglext.h included before glee.h #endif #ifdef __glxext_h_ #error glxext.h included before glee.h #endif #ifdef WIN32 //#define WIN32_LEAN_AND_MEAN #include #include #elif defined(__APPLE__) || defined(__APPLE_CC__) #define GL_GLEXT_LEGACY #include #else // GLX #define __glext_h_ /* prevent glext.h from being included */ #define __glxext_h_ /* prevent glxext.h from being included */ #define GLX_GLXEXT_PROTOTYPES #include #include #endif #ifndef APIENTRY #define APIENTRY #endif #ifndef APIENTRYP #define APIENTRYP APIENTRY * #endif #define GLEE_EXTERN extern #ifdef __cplusplus extern "C" { /* begin C linkage */ #endif #define GLEE_LINK_FAIL 0 #define GLEE_LINK_PARTIAL 1 #define GLEE_LINK_COMPLETE 2 /* Extension querying variables */ GLEE_EXTERN GLboolean _GLEE_VERSION_1_2; GLEE_EXTERN GLboolean _GLEE_ARB_imaging; GLEE_EXTERN GLboolean _GLEE_VERSION_1_3; GLEE_EXTERN GLboolean _GLEE_VERSION_1_4; GLEE_EXTERN GLboolean _GLEE_VERSION_1_5; GLEE_EXTERN GLboolean _GLEE_VERSION_2_0; GLEE_EXTERN GLboolean _GLEE_VERSION_2_1; GLEE_EXTERN GLboolean _GLEE_VERSION_3_0; GLEE_EXTERN GLboolean _GLEE_ARB_multitexture; GLEE_EXTERN GLboolean _GLEE_ARB_transpose_matrix; GLEE_EXTERN GLboolean _GLEE_ARB_multisample; GLEE_EXTERN GLboolean _GLEE_ARB_texture_env_add; GLEE_EXTERN GLboolean _GLEE_ARB_texture_cube_map; GLEE_EXTERN GLboolean _GLEE_ARB_texture_compression; GLEE_EXTERN GLboolean _GLEE_ARB_texture_border_clamp; GLEE_EXTERN GLboolean _GLEE_ARB_point_parameters; GLEE_EXTERN GLboolean _GLEE_ARB_vertex_blend; GLEE_EXTERN GLboolean _GLEE_ARB_matrix_palette; GLEE_EXTERN GLboolean _GLEE_ARB_texture_env_combine; GLEE_EXTERN GLboolean _GLEE_ARB_texture_env_crossbar; GLEE_EXTERN GLboolean _GLEE_ARB_texture_env_dot3; GLEE_EXTERN GLboolean _GLEE_ARB_texture_mirrored_repeat; GLEE_EXTERN GLboolean _GLEE_ARB_depth_texture; GLEE_EXTERN GLboolean _GLEE_ARB_shadow; GLEE_EXTERN GLboolean _GLEE_ARB_shadow_ambient; GLEE_EXTERN GLboolean _GLEE_ARB_window_pos; GLEE_EXTERN GLboolean _GLEE_ARB_vertex_program; GLEE_EXTERN GLboolean _GLEE_ARB_fragment_program; GLEE_EXTERN GLboolean _GLEE_ARB_vertex_buffer_object; GLEE_EXTERN GLboolean _GLEE_ARB_occlusion_query; GLEE_EXTERN GLboolean _GLEE_ARB_shader_objects; GLEE_EXTERN GLboolean _GLEE_ARB_vertex_shader; GLEE_EXTERN GLboolean _GLEE_ARB_fragment_shader; GLEE_EXTERN GLboolean _GLEE_ARB_shading_language_100; GLEE_EXTERN GLboolean _GLEE_ARB_texture_non_power_of_two; GLEE_EXTERN GLboolean _GLEE_ARB_point_sprite; GLEE_EXTERN GLboolean _GLEE_ARB_fragment_program_shadow; GLEE_EXTERN GLboolean _GLEE_ARB_draw_buffers; GLEE_EXTERN GLboolean _GLEE_ARB_texture_rectangle; GLEE_EXTERN GLboolean _GLEE_ARB_color_buffer_float; GLEE_EXTERN GLboolean _GLEE_ARB_half_float_pixel; GLEE_EXTERN GLboolean _GLEE_ARB_texture_float; GLEE_EXTERN GLboolean _GLEE_ARB_pixel_buffer_object; GLEE_EXTERN GLboolean _GLEE_ARB_depth_buffer_float; GLEE_EXTERN GLboolean _GLEE_ARB_draw_instanced; GLEE_EXTERN GLboolean _GLEE_ARB_framebuffer_object; GLEE_EXTERN GLboolean _GLEE_ARB_framebuffer_sRGB; GLEE_EXTERN GLboolean _GLEE_ARB_geometry_shader4; GLEE_EXTERN GLboolean _GLEE_ARB_half_float_vertex; GLEE_EXTERN GLboolean _GLEE_ARB_instanced_arrays; GLEE_EXTERN GLboolean _GLEE_ARB_map_buffer_range; GLEE_EXTERN GLboolean _GLEE_ARB_texture_buffer_object; GLEE_EXTERN GLboolean _GLEE_ARB_texture_compression_rgtc; GLEE_EXTERN GLboolean _GLEE_ARB_texture_rg; GLEE_EXTERN GLboolean _GLEE_ARB_vertex_array_object; GLEE_EXTERN GLboolean _GLEE_EXT_abgr; GLEE_EXTERN GLboolean _GLEE_EXT_blend_color; GLEE_EXTERN GLboolean _GLEE_EXT_polygon_offset; GLEE_EXTERN GLboolean _GLEE_EXT_texture; GLEE_EXTERN GLboolean _GLEE_EXT_texture3D; GLEE_EXTERN GLboolean _GLEE_SGIS_texture_filter4; GLEE_EXTERN GLboolean _GLEE_EXT_subtexture; GLEE_EXTERN GLboolean _GLEE_EXT_copy_texture; GLEE_EXTERN GLboolean _GLEE_EXT_histogram; GLEE_EXTERN GLboolean _GLEE_EXT_convolution; GLEE_EXTERN GLboolean _GLEE_SGI_color_matrix; GLEE_EXTERN GLboolean _GLEE_SGI_color_table; GLEE_EXTERN GLboolean _GLEE_SGIS_pixel_texture; GLEE_EXTERN GLboolean _GLEE_SGIX_pixel_texture; GLEE_EXTERN GLboolean _GLEE_SGIS_texture4D; GLEE_EXTERN GLboolean _GLEE_SGI_texture_color_table; GLEE_EXTERN GLboolean _GLEE_EXT_cmyka; GLEE_EXTERN GLboolean _GLEE_EXT_texture_object; GLEE_EXTERN GLboolean _GLEE_SGIS_detail_texture; GLEE_EXTERN GLboolean _GLEE_SGIS_sharpen_texture; GLEE_EXTERN GLboolean _GLEE_EXT_packed_pixels; GLEE_EXTERN GLboolean _GLEE_SGIS_texture_lod; GLEE_EXTERN GLboolean _GLEE_SGIS_multisample; GLEE_EXTERN GLboolean _GLEE_EXT_rescale_normal; GLEE_EXTERN GLboolean _GLEE_EXT_vertex_array; GLEE_EXTERN GLboolean _GLEE_EXT_misc_attribute; GLEE_EXTERN GLboolean _GLEE_SGIS_generate_mipmap; GLEE_EXTERN GLboolean _GLEE_SGIX_clipmap; GLEE_EXTERN GLboolean _GLEE_SGIX_shadow; GLEE_EXTERN GLboolean _GLEE_SGIS_texture_edge_clamp; GLEE_EXTERN GLboolean _GLEE_SGIS_texture_border_clamp; GLEE_EXTERN GLboolean _GLEE_EXT_blend_minmax; GLEE_EXTERN GLboolean _GLEE_EXT_blend_subtract; GLEE_EXTERN GLboolean _GLEE_EXT_blend_logic_op; GLEE_EXTERN GLboolean _GLEE_SGIX_interlace; GLEE_EXTERN GLboolean _GLEE_SGIX_pixel_tiles; GLEE_EXTERN GLboolean _GLEE_SGIS_texture_select; GLEE_EXTERN GLboolean _GLEE_SGIX_sprite; GLEE_EXTERN GLboolean _GLEE_SGIX_texture_multi_buffer; GLEE_EXTERN GLboolean _GLEE_EXT_point_parameters; GLEE_EXTERN GLboolean _GLEE_SGIS_point_parameters; GLEE_EXTERN GLboolean _GLEE_SGIX_instruments; GLEE_EXTERN GLboolean _GLEE_SGIX_texture_scale_bias; GLEE_EXTERN GLboolean _GLEE_SGIX_framezoom; GLEE_EXTERN GLboolean _GLEE_SGIX_tag_sample_buffer; GLEE_EXTERN GLboolean _GLEE_FfdMaskSGIX; GLEE_EXTERN GLboolean _GLEE_SGIX_polynomial_ffd; GLEE_EXTERN GLboolean _GLEE_SGIX_reference_plane; GLEE_EXTERN GLboolean _GLEE_SGIX_flush_raster; GLEE_EXTERN GLboolean _GLEE_SGIX_depth_texture; GLEE_EXTERN GLboolean _GLEE_SGIS_fog_function; GLEE_EXTERN GLboolean _GLEE_SGIX_fog_offset; GLEE_EXTERN GLboolean _GLEE_HP_image_transform; GLEE_EXTERN GLboolean _GLEE_HP_convolution_border_modes; GLEE_EXTERN GLboolean _GLEE_INGR_palette_buffer; GLEE_EXTERN GLboolean _GLEE_SGIX_texture_add_env; GLEE_EXTERN GLboolean _GLEE_EXT_color_subtable; GLEE_EXTERN GLboolean _GLEE_PGI_vertex_hints; GLEE_EXTERN GLboolean _GLEE_PGI_misc_hints; GLEE_EXTERN GLboolean _GLEE_EXT_paletted_texture; GLEE_EXTERN GLboolean _GLEE_EXT_clip_volume_hint; GLEE_EXTERN GLboolean _GLEE_SGIX_list_priority; GLEE_EXTERN GLboolean _GLEE_SGIX_ir_instrument1; GLEE_EXTERN GLboolean _GLEE_SGIX_calligraphic_fragment; GLEE_EXTERN GLboolean _GLEE_SGIX_texture_lod_bias; GLEE_EXTERN GLboolean _GLEE_SGIX_shadow_ambient; GLEE_EXTERN GLboolean _GLEE_EXT_index_texture; GLEE_EXTERN GLboolean _GLEE_EXT_index_material; GLEE_EXTERN GLboolean _GLEE_EXT_index_func; GLEE_EXTERN GLboolean _GLEE_EXT_index_array_formats; GLEE_EXTERN GLboolean _GLEE_EXT_compiled_vertex_array; GLEE_EXTERN GLboolean _GLEE_EXT_cull_vertex; GLEE_EXTERN GLboolean _GLEE_SGIX_ycrcb; GLEE_EXTERN GLboolean _GLEE_SGIX_fragment_lighting; GLEE_EXTERN GLboolean _GLEE_IBM_rasterpos_clip; GLEE_EXTERN GLboolean _GLEE_HP_texture_lighting; GLEE_EXTERN GLboolean _GLEE_EXT_draw_range_elements; GLEE_EXTERN GLboolean _GLEE_WIN_phong_shading; GLEE_EXTERN GLboolean _GLEE_WIN_specular_fog; GLEE_EXTERN GLboolean _GLEE_EXT_light_texture; GLEE_EXTERN GLboolean _GLEE_SGIX_blend_alpha_minmax; GLEE_EXTERN GLboolean _GLEE_SGIX_impact_pixel_texture; GLEE_EXTERN GLboolean _GLEE_EXT_bgra; GLEE_EXTERN GLboolean _GLEE_SGIX_async; GLEE_EXTERN GLboolean _GLEE_SGIX_async_pixel; GLEE_EXTERN GLboolean _GLEE_SGIX_async_histogram; GLEE_EXTERN GLboolean _GLEE_INTEL_texture_scissor; GLEE_EXTERN GLboolean _GLEE_INTEL_parallel_arrays; GLEE_EXTERN GLboolean _GLEE_HP_occlusion_test; GLEE_EXTERN GLboolean _GLEE_EXT_pixel_transform; GLEE_EXTERN GLboolean _GLEE_EXT_pixel_transform_color_table; GLEE_EXTERN GLboolean _GLEE_EXT_shared_texture_palette; GLEE_EXTERN GLboolean _GLEE_EXT_separate_specular_color; GLEE_EXTERN GLboolean _GLEE_EXT_secondary_color; GLEE_EXTERN GLboolean _GLEE_EXT_texture_perturb_normal; GLEE_EXTERN GLboolean _GLEE_EXT_multi_draw_arrays; GLEE_EXTERN GLboolean _GLEE_EXT_fog_coord; GLEE_EXTERN GLboolean _GLEE_REND_screen_coordinates; GLEE_EXTERN GLboolean _GLEE_EXT_coordinate_frame; GLEE_EXTERN GLboolean _GLEE_EXT_texture_env_combine; GLEE_EXTERN GLboolean _GLEE_APPLE_specular_vector; GLEE_EXTERN GLboolean _GLEE_APPLE_transform_hint; GLEE_EXTERN GLboolean _GLEE_SGIX_fog_scale; GLEE_EXTERN GLboolean _GLEE_SUNX_constant_data; GLEE_EXTERN GLboolean _GLEE_SUN_global_alpha; GLEE_EXTERN GLboolean _GLEE_SUN_triangle_list; GLEE_EXTERN GLboolean _GLEE_SUN_vertex; GLEE_EXTERN GLboolean _GLEE_EXT_blend_func_separate; GLEE_EXTERN GLboolean _GLEE_INGR_color_clamp; GLEE_EXTERN GLboolean _GLEE_INGR_interlace_read; GLEE_EXTERN GLboolean _GLEE_EXT_stencil_wrap; GLEE_EXTERN GLboolean _GLEE_EXT_422_pixels; GLEE_EXTERN GLboolean _GLEE_NV_texgen_reflection; GLEE_EXTERN GLboolean _GLEE_EXT_texture_cube_map; GLEE_EXTERN GLboolean _GLEE_SUN_convolution_border_modes; GLEE_EXTERN GLboolean _GLEE_EXT_texture_env_add; GLEE_EXTERN GLboolean _GLEE_EXT_texture_lod_bias; GLEE_EXTERN GLboolean _GLEE_EXT_texture_filter_anisotropic; GLEE_EXTERN GLboolean _GLEE_EXT_vertex_weighting; GLEE_EXTERN GLboolean _GLEE_NV_light_max_exponent; GLEE_EXTERN GLboolean _GLEE_NV_vertex_array_range; GLEE_EXTERN GLboolean _GLEE_NV_register_combiners; GLEE_EXTERN GLboolean _GLEE_NV_fog_distance; GLEE_EXTERN GLboolean _GLEE_NV_texgen_emboss; GLEE_EXTERN GLboolean _GLEE_NV_blend_square; GLEE_EXTERN GLboolean _GLEE_NV_texture_env_combine4; GLEE_EXTERN GLboolean _GLEE_MESA_resize_buffers; GLEE_EXTERN GLboolean _GLEE_MESA_window_pos; GLEE_EXTERN GLboolean _GLEE_EXT_texture_compression_s3tc; GLEE_EXTERN GLboolean _GLEE_IBM_cull_vertex; GLEE_EXTERN GLboolean _GLEE_IBM_multimode_draw_arrays; GLEE_EXTERN GLboolean _GLEE_IBM_vertex_array_lists; GLEE_EXTERN GLboolean _GLEE_SGIX_subsample; GLEE_EXTERN GLboolean _GLEE_SGIX_ycrcb_subsample; GLEE_EXTERN GLboolean _GLEE_SGIX_ycrcba; GLEE_EXTERN GLboolean _GLEE_SGI_depth_pass_instrument; GLEE_EXTERN GLboolean _GLEE_3DFX_texture_compression_FXT1; GLEE_EXTERN GLboolean _GLEE_3DFX_multisample; GLEE_EXTERN GLboolean _GLEE_3DFX_tbuffer; GLEE_EXTERN GLboolean _GLEE_EXT_multisample; GLEE_EXTERN GLboolean _GLEE_SGIX_vertex_preclip; GLEE_EXTERN GLboolean _GLEE_SGIX_convolution_accuracy; GLEE_EXTERN GLboolean _GLEE_SGIX_resample; GLEE_EXTERN GLboolean _GLEE_SGIS_point_line_texgen; GLEE_EXTERN GLboolean _GLEE_SGIS_texture_color_mask; GLEE_EXTERN GLboolean _GLEE_EXT_texture_env_dot3; GLEE_EXTERN GLboolean _GLEE_ATI_texture_mirror_once; GLEE_EXTERN GLboolean _GLEE_NV_fence; GLEE_EXTERN GLboolean _GLEE_IBM_texture_mirrored_repeat; GLEE_EXTERN GLboolean _GLEE_NV_evaluators; GLEE_EXTERN GLboolean _GLEE_NV_packed_depth_stencil; GLEE_EXTERN GLboolean _GLEE_NV_register_combiners2; GLEE_EXTERN GLboolean _GLEE_NV_texture_compression_vtc; GLEE_EXTERN GLboolean _GLEE_NV_texture_rectangle; GLEE_EXTERN GLboolean _GLEE_NV_texture_shader; GLEE_EXTERN GLboolean _GLEE_NV_texture_shader2; GLEE_EXTERN GLboolean _GLEE_NV_vertex_array_range2; GLEE_EXTERN GLboolean _GLEE_NV_vertex_program; GLEE_EXTERN GLboolean _GLEE_SGIX_texture_coordinate_clamp; GLEE_EXTERN GLboolean _GLEE_SGIX_scalebias_hint; GLEE_EXTERN GLboolean _GLEE_OML_interlace; GLEE_EXTERN GLboolean _GLEE_OML_subsample; GLEE_EXTERN GLboolean _GLEE_OML_resample; GLEE_EXTERN GLboolean _GLEE_NV_copy_depth_to_color; GLEE_EXTERN GLboolean _GLEE_ATI_envmap_bumpmap; GLEE_EXTERN GLboolean _GLEE_ATI_fragment_shader; GLEE_EXTERN GLboolean _GLEE_ATI_pn_triangles; GLEE_EXTERN GLboolean _GLEE_ATI_vertex_array_object; GLEE_EXTERN GLboolean _GLEE_EXT_vertex_shader; GLEE_EXTERN GLboolean _GLEE_ATI_vertex_streams; GLEE_EXTERN GLboolean _GLEE_ATI_element_array; GLEE_EXTERN GLboolean _GLEE_SUN_mesh_array; GLEE_EXTERN GLboolean _GLEE_SUN_slice_accum; GLEE_EXTERN GLboolean _GLEE_NV_multisample_filter_hint; GLEE_EXTERN GLboolean _GLEE_NV_depth_clamp; GLEE_EXTERN GLboolean _GLEE_NV_occlusion_query; GLEE_EXTERN GLboolean _GLEE_NV_point_sprite; GLEE_EXTERN GLboolean _GLEE_NV_texture_shader3; GLEE_EXTERN GLboolean _GLEE_NV_vertex_program1_1; GLEE_EXTERN GLboolean _GLEE_EXT_shadow_funcs; GLEE_EXTERN GLboolean _GLEE_EXT_stencil_two_side; GLEE_EXTERN GLboolean _GLEE_ATI_text_fragment_shader; GLEE_EXTERN GLboolean _GLEE_APPLE_client_storage; GLEE_EXTERN GLboolean _GLEE_APPLE_element_array; GLEE_EXTERN GLboolean _GLEE_APPLE_fence; GLEE_EXTERN GLboolean _GLEE_APPLE_vertex_array_object; GLEE_EXTERN GLboolean _GLEE_APPLE_vertex_array_range; GLEE_EXTERN GLboolean _GLEE_APPLE_ycbcr_422; GLEE_EXTERN GLboolean _GLEE_S3_s3tc; GLEE_EXTERN GLboolean _GLEE_ATI_draw_buffers; GLEE_EXTERN GLboolean _GLEE_ATI_pixel_format_float; GLEE_EXTERN GLboolean _GLEE_ATI_texture_env_combine3; GLEE_EXTERN GLboolean _GLEE_ATI_texture_float; GLEE_EXTERN GLboolean _GLEE_NV_float_buffer; GLEE_EXTERN GLboolean _GLEE_NV_fragment_program; GLEE_EXTERN GLboolean _GLEE_NV_half_float; GLEE_EXTERN GLboolean _GLEE_NV_pixel_data_range; GLEE_EXTERN GLboolean _GLEE_NV_primitive_restart; GLEE_EXTERN GLboolean _GLEE_NV_texture_expand_normal; GLEE_EXTERN GLboolean _GLEE_NV_vertex_program2; GLEE_EXTERN GLboolean _GLEE_ATI_map_object_buffer; GLEE_EXTERN GLboolean _GLEE_ATI_separate_stencil; GLEE_EXTERN GLboolean _GLEE_ATI_vertex_attrib_array_object; GLEE_EXTERN GLboolean _GLEE_OES_read_format; GLEE_EXTERN GLboolean _GLEE_EXT_depth_bounds_test; GLEE_EXTERN GLboolean _GLEE_EXT_texture_mirror_clamp; GLEE_EXTERN GLboolean _GLEE_EXT_blend_equation_separate; GLEE_EXTERN GLboolean _GLEE_MESA_pack_invert; GLEE_EXTERN GLboolean _GLEE_MESA_ycbcr_texture; GLEE_EXTERN GLboolean _GLEE_EXT_pixel_buffer_object; GLEE_EXTERN GLboolean _GLEE_NV_fragment_program_option; GLEE_EXTERN GLboolean _GLEE_NV_fragment_program2; GLEE_EXTERN GLboolean _GLEE_NV_vertex_program2_option; GLEE_EXTERN GLboolean _GLEE_NV_vertex_program3; GLEE_EXTERN GLboolean _GLEE_EXT_framebuffer_object; GLEE_EXTERN GLboolean _GLEE_GREMEDY_string_marker; GLEE_EXTERN GLboolean _GLEE_EXT_packed_depth_stencil; GLEE_EXTERN GLboolean _GLEE_EXT_stencil_clear_tag; GLEE_EXTERN GLboolean _GLEE_EXT_texture_sRGB; GLEE_EXTERN GLboolean _GLEE_EXT_framebuffer_blit; GLEE_EXTERN GLboolean _GLEE_EXT_framebuffer_multisample; GLEE_EXTERN GLboolean _GLEE_MESAX_texture_stack; GLEE_EXTERN GLboolean _GLEE_EXT_timer_query; GLEE_EXTERN GLboolean _GLEE_EXT_gpu_program_parameters; GLEE_EXTERN GLboolean _GLEE_APPLE_flush_buffer_range; GLEE_EXTERN GLboolean _GLEE_EXT_gpu_shader4; GLEE_EXTERN GLboolean _GLEE_EXT_draw_instanced; GLEE_EXTERN GLboolean _GLEE_EXT_packed_float; GLEE_EXTERN GLboolean _GLEE_EXT_texture_array; GLEE_EXTERN GLboolean _GLEE_EXT_texture_buffer_object; GLEE_EXTERN GLboolean _GLEE_EXT_texture_compression_latc; GLEE_EXTERN GLboolean _GLEE_EXT_texture_compression_rgtc; GLEE_EXTERN GLboolean _GLEE_EXT_texture_shared_exponent; GLEE_EXTERN GLboolean _GLEE_NV_depth_buffer_float; GLEE_EXTERN GLboolean _GLEE_NV_framebuffer_multisample_coverage; GLEE_EXTERN GLboolean _GLEE_EXT_framebuffer_sRGB; GLEE_EXTERN GLboolean _GLEE_NV_geometry_shader4; GLEE_EXTERN GLboolean _GLEE_NV_parameter_buffer_object; GLEE_EXTERN GLboolean _GLEE_EXT_draw_buffers2; GLEE_EXTERN GLboolean _GLEE_NV_transform_feedback; GLEE_EXTERN GLboolean _GLEE_EXT_bindable_uniform; GLEE_EXTERN GLboolean _GLEE_EXT_texture_integer; GLEE_EXTERN GLboolean _GLEE_GREMEDY_frame_terminator; GLEE_EXTERN GLboolean _GLEE_NV_conditional_render; GLEE_EXTERN GLboolean _GLEE_NV_present_video; GLEE_EXTERN GLboolean _GLEE_EXT_transform_feedback; GLEE_EXTERN GLboolean _GLEE_EXT_direct_state_access; GLEE_EXTERN GLboolean _GLEE_EXT_vertex_array_bgra; GLEE_EXTERN GLboolean _GLEE_EXT_texture_swizzle; GLEE_EXTERN GLboolean _GLEE_NV_explicit_multisample; GLEE_EXTERN GLboolean _GLEE_NV_transform_feedback2; GLEE_EXTERN GLboolean _GLEE_SGIX_texture_select; GLEE_EXTERN GLboolean _GLEE_INGR_blend_func_separate; GLEE_EXTERN GLboolean _GLEE_SGIX_depth_pass_instrument; GLEE_EXTERN GLboolean _GLEE_SGIX_igloo_interface; GLEE_EXTERN GLboolean _GLEE_EXT_fragment_lighting; GLEE_EXTERN GLboolean _GLEE_EXT_geometry_shader4; GLEE_EXTERN GLboolean _GLEE_EXT_scene_marker; GLEE_EXTERN GLboolean _GLEE_EXT_texture_compression_dxt1; GLEE_EXTERN GLboolean _GLEE_EXT_texture_env; GLEE_EXTERN GLboolean _GLEE_IBM_static_data; GLEE_EXTERN GLboolean _GLEE_NV_gpu_program4; GLEE_EXTERN GLboolean _GLEE_OES_byte_coordinates; GLEE_EXTERN GLboolean _GLEE_OES_compressed_paletted_texture; GLEE_EXTERN GLboolean _GLEE_OES_single_precision; GLEE_EXTERN GLboolean _GLEE_SGIX_pixel_texture_bits; GLEE_EXTERN GLboolean _GLEE_SGIX_texture_range; /* Aliases for extension querying variables */ #define GLEE_VERSION_1_2 GLeeEnabled(&_GLEE_VERSION_1_2) #define GLEE_ARB_imaging GLeeEnabled(&_GLEE_ARB_imaging) #define GLEE_VERSION_1_3 GLeeEnabled(&_GLEE_VERSION_1_3) #define GLEE_VERSION_1_4 GLeeEnabled(&_GLEE_VERSION_1_4) #define GLEE_VERSION_1_5 GLeeEnabled(&_GLEE_VERSION_1_5) #define GLEE_VERSION_2_0 GLeeEnabled(&_GLEE_VERSION_2_0) #define GLEE_VERSION_2_1 GLeeEnabled(&_GLEE_VERSION_2_1) #define GLEE_VERSION_3_0 GLeeEnabled(&_GLEE_VERSION_3_0) #define GLEE_ARB_multitexture GLeeEnabled(&_GLEE_ARB_multitexture) #define GLEE_ARB_transpose_matrix GLeeEnabled(&_GLEE_ARB_transpose_matrix) #define GLEE_ARB_multisample GLeeEnabled(&_GLEE_ARB_multisample) #define GLEE_ARB_texture_env_add GLeeEnabled(&_GLEE_ARB_texture_env_add) #define GLEE_ARB_texture_cube_map GLeeEnabled(&_GLEE_ARB_texture_cube_map) #define GLEE_ARB_texture_compression GLeeEnabled(&_GLEE_ARB_texture_compression) #define GLEE_ARB_texture_border_clamp GLeeEnabled(&_GLEE_ARB_texture_border_clamp) #define GLEE_ARB_point_parameters GLeeEnabled(&_GLEE_ARB_point_parameters) #define GLEE_ARB_vertex_blend GLeeEnabled(&_GLEE_ARB_vertex_blend) #define GLEE_ARB_matrix_palette GLeeEnabled(&_GLEE_ARB_matrix_palette) #define GLEE_ARB_texture_env_combine GLeeEnabled(&_GLEE_ARB_texture_env_combine) #define GLEE_ARB_texture_env_crossbar GLeeEnabled(&_GLEE_ARB_texture_env_crossbar) #define GLEE_ARB_texture_env_dot3 GLeeEnabled(&_GLEE_ARB_texture_env_dot3) #define GLEE_ARB_texture_mirrored_repeat GLeeEnabled(&_GLEE_ARB_texture_mirrored_repeat) #define GLEE_ARB_depth_texture GLeeEnabled(&_GLEE_ARB_depth_texture) #define GLEE_ARB_shadow GLeeEnabled(&_GLEE_ARB_shadow) #define GLEE_ARB_shadow_ambient GLeeEnabled(&_GLEE_ARB_shadow_ambient) #define GLEE_ARB_window_pos GLeeEnabled(&_GLEE_ARB_window_pos) #define GLEE_ARB_vertex_program GLeeEnabled(&_GLEE_ARB_vertex_program) #define GLEE_ARB_fragment_program GLeeEnabled(&_GLEE_ARB_fragment_program) #define GLEE_ARB_vertex_buffer_object GLeeEnabled(&_GLEE_ARB_vertex_buffer_object) #define GLEE_ARB_occlusion_query GLeeEnabled(&_GLEE_ARB_occlusion_query) #define GLEE_ARB_shader_objects GLeeEnabled(&_GLEE_ARB_shader_objects) #define GLEE_ARB_vertex_shader GLeeEnabled(&_GLEE_ARB_vertex_shader) #define GLEE_ARB_fragment_shader GLeeEnabled(&_GLEE_ARB_fragment_shader) #define GLEE_ARB_shading_language_100 GLeeEnabled(&_GLEE_ARB_shading_language_100) #define GLEE_ARB_texture_non_power_of_two GLeeEnabled(&_GLEE_ARB_texture_non_power_of_two) #define GLEE_ARB_point_sprite GLeeEnabled(&_GLEE_ARB_point_sprite) #define GLEE_ARB_fragment_program_shadow GLeeEnabled(&_GLEE_ARB_fragment_program_shadow) #define GLEE_ARB_draw_buffers GLeeEnabled(&_GLEE_ARB_draw_buffers) #define GLEE_ARB_texture_rectangle GLeeEnabled(&_GLEE_ARB_texture_rectangle) #define GLEE_ARB_color_buffer_float GLeeEnabled(&_GLEE_ARB_color_buffer_float) #define GLEE_ARB_half_float_pixel GLeeEnabled(&_GLEE_ARB_half_float_pixel) #define GLEE_ARB_texture_float GLeeEnabled(&_GLEE_ARB_texture_float) #define GLEE_ARB_pixel_buffer_object GLeeEnabled(&_GLEE_ARB_pixel_buffer_object) #define GLEE_ARB_depth_buffer_float GLeeEnabled(&_GLEE_ARB_depth_buffer_float) #define GLEE_ARB_draw_instanced GLeeEnabled(&_GLEE_ARB_draw_instanced) #define GLEE_ARB_framebuffer_object GLeeEnabled(&_GLEE_ARB_framebuffer_object) #define GLEE_ARB_framebuffer_sRGB GLeeEnabled(&_GLEE_ARB_framebuffer_sRGB) #define GLEE_ARB_geometry_shader4 GLeeEnabled(&_GLEE_ARB_geometry_shader4) #define GLEE_ARB_half_float_vertex GLeeEnabled(&_GLEE_ARB_half_float_vertex) #define GLEE_ARB_instanced_arrays GLeeEnabled(&_GLEE_ARB_instanced_arrays) #define GLEE_ARB_map_buffer_range GLeeEnabled(&_GLEE_ARB_map_buffer_range) #define GLEE_ARB_texture_buffer_object GLeeEnabled(&_GLEE_ARB_texture_buffer_object) #define GLEE_ARB_texture_compression_rgtc GLeeEnabled(&_GLEE_ARB_texture_compression_rgtc) #define GLEE_ARB_texture_rg GLeeEnabled(&_GLEE_ARB_texture_rg) #define GLEE_ARB_vertex_array_object GLeeEnabled(&_GLEE_ARB_vertex_array_object) #define GLEE_EXT_abgr GLeeEnabled(&_GLEE_EXT_abgr) #define GLEE_EXT_blend_color GLeeEnabled(&_GLEE_EXT_blend_color) #define GLEE_EXT_polygon_offset GLeeEnabled(&_GLEE_EXT_polygon_offset) #define GLEE_EXT_texture GLeeEnabled(&_GLEE_EXT_texture) #define GLEE_EXT_texture3D GLeeEnabled(&_GLEE_EXT_texture3D) #define GLEE_SGIS_texture_filter4 GLeeEnabled(&_GLEE_SGIS_texture_filter4) #define GLEE_EXT_subtexture GLeeEnabled(&_GLEE_EXT_subtexture) #define GLEE_EXT_copy_texture GLeeEnabled(&_GLEE_EXT_copy_texture) #define GLEE_EXT_histogram GLeeEnabled(&_GLEE_EXT_histogram) #define GLEE_EXT_convolution GLeeEnabled(&_GLEE_EXT_convolution) #define GLEE_SGI_color_matrix GLeeEnabled(&_GLEE_SGI_color_matrix) #define GLEE_SGI_color_table GLeeEnabled(&_GLEE_SGI_color_table) #define GLEE_SGIS_pixel_texture GLeeEnabled(&_GLEE_SGIS_pixel_texture) #define GLEE_SGIX_pixel_texture GLeeEnabled(&_GLEE_SGIX_pixel_texture) #define GLEE_SGIS_texture4D GLeeEnabled(&_GLEE_SGIS_texture4D) #define GLEE_SGI_texture_color_table GLeeEnabled(&_GLEE_SGI_texture_color_table) #define GLEE_EXT_cmyka GLeeEnabled(&_GLEE_EXT_cmyka) #define GLEE_EXT_texture_object GLeeEnabled(&_GLEE_EXT_texture_object) #define GLEE_SGIS_detail_texture GLeeEnabled(&_GLEE_SGIS_detail_texture) #define GLEE_SGIS_sharpen_texture GLeeEnabled(&_GLEE_SGIS_sharpen_texture) #define GLEE_EXT_packed_pixels GLeeEnabled(&_GLEE_EXT_packed_pixels) #define GLEE_SGIS_texture_lod GLeeEnabled(&_GLEE_SGIS_texture_lod) #define GLEE_SGIS_multisample GLeeEnabled(&_GLEE_SGIS_multisample) #define GLEE_EXT_rescale_normal GLeeEnabled(&_GLEE_EXT_rescale_normal) #define GLEE_EXT_vertex_array GLeeEnabled(&_GLEE_EXT_vertex_array) #define GLEE_EXT_misc_attribute GLeeEnabled(&_GLEE_EXT_misc_attribute) #define GLEE_SGIS_generate_mipmap GLeeEnabled(&_GLEE_SGIS_generate_mipmap) #define GLEE_SGIX_clipmap GLeeEnabled(&_GLEE_SGIX_clipmap) #define GLEE_SGIX_shadow GLeeEnabled(&_GLEE_SGIX_shadow) #define GLEE_SGIS_texture_edge_clamp GLeeEnabled(&_GLEE_SGIS_texture_edge_clamp) #define GLEE_SGIS_texture_border_clamp GLeeEnabled(&_GLEE_SGIS_texture_border_clamp) #define GLEE_EXT_blend_minmax GLeeEnabled(&_GLEE_EXT_blend_minmax) #define GLEE_EXT_blend_subtract GLeeEnabled(&_GLEE_EXT_blend_subtract) #define GLEE_EXT_blend_logic_op GLeeEnabled(&_GLEE_EXT_blend_logic_op) #define GLEE_SGIX_interlace GLeeEnabled(&_GLEE_SGIX_interlace) #define GLEE_SGIX_pixel_tiles GLeeEnabled(&_GLEE_SGIX_pixel_tiles) #define GLEE_SGIS_texture_select GLeeEnabled(&_GLEE_SGIS_texture_select) #define GLEE_SGIX_sprite GLeeEnabled(&_GLEE_SGIX_sprite) #define GLEE_SGIX_texture_multi_buffer GLeeEnabled(&_GLEE_SGIX_texture_multi_buffer) #define GLEE_EXT_point_parameters GLeeEnabled(&_GLEE_EXT_point_parameters) #define GLEE_SGIS_point_parameters GLeeEnabled(&_GLEE_SGIS_point_parameters) #define GLEE_SGIX_instruments GLeeEnabled(&_GLEE_SGIX_instruments) #define GLEE_SGIX_texture_scale_bias GLeeEnabled(&_GLEE_SGIX_texture_scale_bias) #define GLEE_SGIX_framezoom GLeeEnabled(&_GLEE_SGIX_framezoom) #define GLEE_SGIX_tag_sample_buffer GLeeEnabled(&_GLEE_SGIX_tag_sample_buffer) #define GLEE_FfdMaskSGIX GLeeEnabled(&_GLEE_FfdMaskSGIX) #define GLEE_SGIX_polynomial_ffd GLeeEnabled(&_GLEE_SGIX_polynomial_ffd) #define GLEE_SGIX_reference_plane GLeeEnabled(&_GLEE_SGIX_reference_plane) #define GLEE_SGIX_flush_raster GLeeEnabled(&_GLEE_SGIX_flush_raster) #define GLEE_SGIX_depth_texture GLeeEnabled(&_GLEE_SGIX_depth_texture) #define GLEE_SGIS_fog_function GLeeEnabled(&_GLEE_SGIS_fog_function) #define GLEE_SGIX_fog_offset GLeeEnabled(&_GLEE_SGIX_fog_offset) #define GLEE_HP_image_transform GLeeEnabled(&_GLEE_HP_image_transform) #define GLEE_HP_convolution_border_modes GLeeEnabled(&_GLEE_HP_convolution_border_modes) #define GLEE_INGR_palette_buffer GLeeEnabled(&_GLEE_INGR_palette_buffer) #define GLEE_SGIX_texture_add_env GLeeEnabled(&_GLEE_SGIX_texture_add_env) #define GLEE_EXT_color_subtable GLeeEnabled(&_GLEE_EXT_color_subtable) #define GLEE_PGI_vertex_hints GLeeEnabled(&_GLEE_PGI_vertex_hints) #define GLEE_PGI_misc_hints GLeeEnabled(&_GLEE_PGI_misc_hints) #define GLEE_EXT_paletted_texture GLeeEnabled(&_GLEE_EXT_paletted_texture) #define GLEE_EXT_clip_volume_hint GLeeEnabled(&_GLEE_EXT_clip_volume_hint) #define GLEE_SGIX_list_priority GLeeEnabled(&_GLEE_SGIX_list_priority) #define GLEE_SGIX_ir_instrument1 GLeeEnabled(&_GLEE_SGIX_ir_instrument1) #define GLEE_SGIX_calligraphic_fragment GLeeEnabled(&_GLEE_SGIX_calligraphic_fragment) #define GLEE_SGIX_texture_lod_bias GLeeEnabled(&_GLEE_SGIX_texture_lod_bias) #define GLEE_SGIX_shadow_ambient GLeeEnabled(&_GLEE_SGIX_shadow_ambient) #define GLEE_EXT_index_texture GLeeEnabled(&_GLEE_EXT_index_texture) #define GLEE_EXT_index_material GLeeEnabled(&_GLEE_EXT_index_material) #define GLEE_EXT_index_func GLeeEnabled(&_GLEE_EXT_index_func) #define GLEE_EXT_index_array_formats GLeeEnabled(&_GLEE_EXT_index_array_formats) #define GLEE_EXT_compiled_vertex_array GLeeEnabled(&_GLEE_EXT_compiled_vertex_array) #define GLEE_EXT_cull_vertex GLeeEnabled(&_GLEE_EXT_cull_vertex) #define GLEE_SGIX_ycrcb GLeeEnabled(&_GLEE_SGIX_ycrcb) #define GLEE_SGIX_fragment_lighting GLeeEnabled(&_GLEE_SGIX_fragment_lighting) #define GLEE_IBM_rasterpos_clip GLeeEnabled(&_GLEE_IBM_rasterpos_clip) #define GLEE_HP_texture_lighting GLeeEnabled(&_GLEE_HP_texture_lighting) #define GLEE_EXT_draw_range_elements GLeeEnabled(&_GLEE_EXT_draw_range_elements) #define GLEE_WIN_phong_shading GLeeEnabled(&_GLEE_WIN_phong_shading) #define GLEE_WIN_specular_fog GLeeEnabled(&_GLEE_WIN_specular_fog) #define GLEE_EXT_light_texture GLeeEnabled(&_GLEE_EXT_light_texture) #define GLEE_SGIX_blend_alpha_minmax GLeeEnabled(&_GLEE_SGIX_blend_alpha_minmax) #define GLEE_SGIX_impact_pixel_texture GLeeEnabled(&_GLEE_SGIX_impact_pixel_texture) #define GLEE_EXT_bgra GLeeEnabled(&_GLEE_EXT_bgra) #define GLEE_SGIX_async GLeeEnabled(&_GLEE_SGIX_async) #define GLEE_SGIX_async_pixel GLeeEnabled(&_GLEE_SGIX_async_pixel) #define GLEE_SGIX_async_histogram GLeeEnabled(&_GLEE_SGIX_async_histogram) #define GLEE_INTEL_texture_scissor GLeeEnabled(&_GLEE_INTEL_texture_scissor) #define GLEE_INTEL_parallel_arrays GLeeEnabled(&_GLEE_INTEL_parallel_arrays) #define GLEE_HP_occlusion_test GLeeEnabled(&_GLEE_HP_occlusion_test) #define GLEE_EXT_pixel_transform GLeeEnabled(&_GLEE_EXT_pixel_transform) #define GLEE_EXT_pixel_transform_color_table GLeeEnabled(&_GLEE_EXT_pixel_transform_color_table) #define GLEE_EXT_shared_texture_palette GLeeEnabled(&_GLEE_EXT_shared_texture_palette) #define GLEE_EXT_separate_specular_color GLeeEnabled(&_GLEE_EXT_separate_specular_color) #define GLEE_EXT_secondary_color GLeeEnabled(&_GLEE_EXT_secondary_color) #define GLEE_EXT_texture_perturb_normal GLeeEnabled(&_GLEE_EXT_texture_perturb_normal) #define GLEE_EXT_multi_draw_arrays GLeeEnabled(&_GLEE_EXT_multi_draw_arrays) #define GLEE_EXT_fog_coord GLeeEnabled(&_GLEE_EXT_fog_coord) #define GLEE_REND_screen_coordinates GLeeEnabled(&_GLEE_REND_screen_coordinates) #define GLEE_EXT_coordinate_frame GLeeEnabled(&_GLEE_EXT_coordinate_frame) #define GLEE_EXT_texture_env_combine GLeeEnabled(&_GLEE_EXT_texture_env_combine) #define GLEE_APPLE_specular_vector GLeeEnabled(&_GLEE_APPLE_specular_vector) #define GLEE_APPLE_transform_hint GLeeEnabled(&_GLEE_APPLE_transform_hint) #define GLEE_SGIX_fog_scale GLeeEnabled(&_GLEE_SGIX_fog_scale) #define GLEE_SUNX_constant_data GLeeEnabled(&_GLEE_SUNX_constant_data) #define GLEE_SUN_global_alpha GLeeEnabled(&_GLEE_SUN_global_alpha) #define GLEE_SUN_triangle_list GLeeEnabled(&_GLEE_SUN_triangle_list) #define GLEE_SUN_vertex GLeeEnabled(&_GLEE_SUN_vertex) #define GLEE_EXT_blend_func_separate GLeeEnabled(&_GLEE_EXT_blend_func_separate) #define GLEE_INGR_color_clamp GLeeEnabled(&_GLEE_INGR_color_clamp) #define GLEE_INGR_interlace_read GLeeEnabled(&_GLEE_INGR_interlace_read) #define GLEE_EXT_stencil_wrap GLeeEnabled(&_GLEE_EXT_stencil_wrap) #define GLEE_EXT_422_pixels GLeeEnabled(&_GLEE_EXT_422_pixels) #define GLEE_NV_texgen_reflection GLeeEnabled(&_GLEE_NV_texgen_reflection) #define GLEE_EXT_texture_cube_map GLeeEnabled(&_GLEE_EXT_texture_cube_map) #define GLEE_SUN_convolution_border_modes GLeeEnabled(&_GLEE_SUN_convolution_border_modes) #define GLEE_EXT_texture_env_add GLeeEnabled(&_GLEE_EXT_texture_env_add) #define GLEE_EXT_texture_lod_bias GLeeEnabled(&_GLEE_EXT_texture_lod_bias) #define GLEE_EXT_texture_filter_anisotropic GLeeEnabled(&_GLEE_EXT_texture_filter_anisotropic) #define GLEE_EXT_vertex_weighting GLeeEnabled(&_GLEE_EXT_vertex_weighting) #define GLEE_NV_light_max_exponent GLeeEnabled(&_GLEE_NV_light_max_exponent) #define GLEE_NV_vertex_array_range GLeeEnabled(&_GLEE_NV_vertex_array_range) #define GLEE_NV_register_combiners GLeeEnabled(&_GLEE_NV_register_combiners) #define GLEE_NV_fog_distance GLeeEnabled(&_GLEE_NV_fog_distance) #define GLEE_NV_texgen_emboss GLeeEnabled(&_GLEE_NV_texgen_emboss) #define GLEE_NV_blend_square GLeeEnabled(&_GLEE_NV_blend_square) #define GLEE_NV_texture_env_combine4 GLeeEnabled(&_GLEE_NV_texture_env_combine4) #define GLEE_MESA_resize_buffers GLeeEnabled(&_GLEE_MESA_resize_buffers) #define GLEE_MESA_window_pos GLeeEnabled(&_GLEE_MESA_window_pos) #define GLEE_EXT_texture_compression_s3tc GLeeEnabled(&_GLEE_EXT_texture_compression_s3tc) #define GLEE_IBM_cull_vertex GLeeEnabled(&_GLEE_IBM_cull_vertex) #define GLEE_IBM_multimode_draw_arrays GLeeEnabled(&_GLEE_IBM_multimode_draw_arrays) #define GLEE_IBM_vertex_array_lists GLeeEnabled(&_GLEE_IBM_vertex_array_lists) #define GLEE_SGIX_subsample GLeeEnabled(&_GLEE_SGIX_subsample) #define GLEE_SGIX_ycrcb_subsample GLeeEnabled(&_GLEE_SGIX_ycrcb_subsample) #define GLEE_SGIX_ycrcba GLeeEnabled(&_GLEE_SGIX_ycrcba) #define GLEE_SGI_depth_pass_instrument GLeeEnabled(&_GLEE_SGI_depth_pass_instrument) #define GLEE_3DFX_texture_compression_FXT1 GLeeEnabled(&_GLEE_3DFX_texture_compression_FXT1) #define GLEE_3DFX_multisample GLeeEnabled(&_GLEE_3DFX_multisample) #define GLEE_3DFX_tbuffer GLeeEnabled(&_GLEE_3DFX_tbuffer) #define GLEE_EXT_multisample GLeeEnabled(&_GLEE_EXT_multisample) #define GLEE_SGIX_vertex_preclip GLeeEnabled(&_GLEE_SGIX_vertex_preclip) #define GLEE_SGIX_convolution_accuracy GLeeEnabled(&_GLEE_SGIX_convolution_accuracy) #define GLEE_SGIX_resample GLeeEnabled(&_GLEE_SGIX_resample) #define GLEE_SGIS_point_line_texgen GLeeEnabled(&_GLEE_SGIS_point_line_texgen) #define GLEE_SGIS_texture_color_mask GLeeEnabled(&_GLEE_SGIS_texture_color_mask) #define GLEE_EXT_texture_env_dot3 GLeeEnabled(&_GLEE_EXT_texture_env_dot3) #define GLEE_ATI_texture_mirror_once GLeeEnabled(&_GLEE_ATI_texture_mirror_once) #define GLEE_NV_fence GLeeEnabled(&_GLEE_NV_fence) #define GLEE_IBM_texture_mirrored_repeat GLeeEnabled(&_GLEE_IBM_texture_mirrored_repeat) #define GLEE_NV_evaluators GLeeEnabled(&_GLEE_NV_evaluators) #define GLEE_NV_packed_depth_stencil GLeeEnabled(&_GLEE_NV_packed_depth_stencil) #define GLEE_NV_register_combiners2 GLeeEnabled(&_GLEE_NV_register_combiners2) #define GLEE_NV_texture_compression_vtc GLeeEnabled(&_GLEE_NV_texture_compression_vtc) #define GLEE_NV_texture_rectangle GLeeEnabled(&_GLEE_NV_texture_rectangle) #define GLEE_NV_texture_shader GLeeEnabled(&_GLEE_NV_texture_shader) #define GLEE_NV_texture_shader2 GLeeEnabled(&_GLEE_NV_texture_shader2) #define GLEE_NV_vertex_array_range2 GLeeEnabled(&_GLEE_NV_vertex_array_range2) #define GLEE_NV_vertex_program GLeeEnabled(&_GLEE_NV_vertex_program) #define GLEE_SGIX_texture_coordinate_clamp GLeeEnabled(&_GLEE_SGIX_texture_coordinate_clamp) #define GLEE_SGIX_scalebias_hint GLeeEnabled(&_GLEE_SGIX_scalebias_hint) #define GLEE_OML_interlace GLeeEnabled(&_GLEE_OML_interlace) #define GLEE_OML_subsample GLeeEnabled(&_GLEE_OML_subsample) #define GLEE_OML_resample GLeeEnabled(&_GLEE_OML_resample) #define GLEE_NV_copy_depth_to_color GLeeEnabled(&_GLEE_NV_copy_depth_to_color) #define GLEE_ATI_envmap_bumpmap GLeeEnabled(&_GLEE_ATI_envmap_bumpmap) #define GLEE_ATI_fragment_shader GLeeEnabled(&_GLEE_ATI_fragment_shader) #define GLEE_ATI_pn_triangles GLeeEnabled(&_GLEE_ATI_pn_triangles) #define GLEE_ATI_vertex_array_object GLeeEnabled(&_GLEE_ATI_vertex_array_object) #define GLEE_EXT_vertex_shader GLeeEnabled(&_GLEE_EXT_vertex_shader) #define GLEE_ATI_vertex_streams GLeeEnabled(&_GLEE_ATI_vertex_streams) #define GLEE_ATI_element_array GLeeEnabled(&_GLEE_ATI_element_array) #define GLEE_SUN_mesh_array GLeeEnabled(&_GLEE_SUN_mesh_array) #define GLEE_SUN_slice_accum GLeeEnabled(&_GLEE_SUN_slice_accum) #define GLEE_NV_multisample_filter_hint GLeeEnabled(&_GLEE_NV_multisample_filter_hint) #define GLEE_NV_depth_clamp GLeeEnabled(&_GLEE_NV_depth_clamp) #define GLEE_NV_occlusion_query GLeeEnabled(&_GLEE_NV_occlusion_query) #define GLEE_NV_point_sprite GLeeEnabled(&_GLEE_NV_point_sprite) #define GLEE_NV_texture_shader3 GLeeEnabled(&_GLEE_NV_texture_shader3) #define GLEE_NV_vertex_program1_1 GLeeEnabled(&_GLEE_NV_vertex_program1_1) #define GLEE_EXT_shadow_funcs GLeeEnabled(&_GLEE_EXT_shadow_funcs) #define GLEE_EXT_stencil_two_side GLeeEnabled(&_GLEE_EXT_stencil_two_side) #define GLEE_ATI_text_fragment_shader GLeeEnabled(&_GLEE_ATI_text_fragment_shader) #define GLEE_APPLE_client_storage GLeeEnabled(&_GLEE_APPLE_client_storage) #define GLEE_APPLE_element_array GLeeEnabled(&_GLEE_APPLE_element_array) #define GLEE_APPLE_fence GLeeEnabled(&_GLEE_APPLE_fence) #define GLEE_APPLE_vertex_array_object GLeeEnabled(&_GLEE_APPLE_vertex_array_object) #define GLEE_APPLE_vertex_array_range GLeeEnabled(&_GLEE_APPLE_vertex_array_range) #define GLEE_APPLE_ycbcr_422 GLeeEnabled(&_GLEE_APPLE_ycbcr_422) #define GLEE_S3_s3tc GLeeEnabled(&_GLEE_S3_s3tc) #define GLEE_ATI_draw_buffers GLeeEnabled(&_GLEE_ATI_draw_buffers) #define GLEE_ATI_pixel_format_float GLeeEnabled(&_GLEE_ATI_pixel_format_float) #define GLEE_ATI_texture_env_combine3 GLeeEnabled(&_GLEE_ATI_texture_env_combine3) #define GLEE_ATI_texture_float GLeeEnabled(&_GLEE_ATI_texture_float) #define GLEE_NV_float_buffer GLeeEnabled(&_GLEE_NV_float_buffer) #define GLEE_NV_fragment_program GLeeEnabled(&_GLEE_NV_fragment_program) #define GLEE_NV_half_float GLeeEnabled(&_GLEE_NV_half_float) #define GLEE_NV_pixel_data_range GLeeEnabled(&_GLEE_NV_pixel_data_range) #define GLEE_NV_primitive_restart GLeeEnabled(&_GLEE_NV_primitive_restart) #define GLEE_NV_texture_expand_normal GLeeEnabled(&_GLEE_NV_texture_expand_normal) #define GLEE_NV_vertex_program2 GLeeEnabled(&_GLEE_NV_vertex_program2) #define GLEE_ATI_map_object_buffer GLeeEnabled(&_GLEE_ATI_map_object_buffer) #define GLEE_ATI_separate_stencil GLeeEnabled(&_GLEE_ATI_separate_stencil) #define GLEE_ATI_vertex_attrib_array_object GLeeEnabled(&_GLEE_ATI_vertex_attrib_array_object) #define GLEE_OES_read_format GLeeEnabled(&_GLEE_OES_read_format) #define GLEE_EXT_depth_bounds_test GLeeEnabled(&_GLEE_EXT_depth_bounds_test) #define GLEE_EXT_texture_mirror_clamp GLeeEnabled(&_GLEE_EXT_texture_mirror_clamp) #define GLEE_EXT_blend_equation_separate GLeeEnabled(&_GLEE_EXT_blend_equation_separate) #define GLEE_MESA_pack_invert GLeeEnabled(&_GLEE_MESA_pack_invert) #define GLEE_MESA_ycbcr_texture GLeeEnabled(&_GLEE_MESA_ycbcr_texture) #define GLEE_EXT_pixel_buffer_object GLeeEnabled(&_GLEE_EXT_pixel_buffer_object) #define GLEE_NV_fragment_program_option GLeeEnabled(&_GLEE_NV_fragment_program_option) #define GLEE_NV_fragment_program2 GLeeEnabled(&_GLEE_NV_fragment_program2) #define GLEE_NV_vertex_program2_option GLeeEnabled(&_GLEE_NV_vertex_program2_option) #define GLEE_NV_vertex_program3 GLeeEnabled(&_GLEE_NV_vertex_program3) #define GLEE_EXT_framebuffer_object GLeeEnabled(&_GLEE_EXT_framebuffer_object) #define GLEE_GREMEDY_string_marker GLeeEnabled(&_GLEE_GREMEDY_string_marker) #define GLEE_EXT_packed_depth_stencil GLeeEnabled(&_GLEE_EXT_packed_depth_stencil) #define GLEE_EXT_stencil_clear_tag GLeeEnabled(&_GLEE_EXT_stencil_clear_tag) #define GLEE_EXT_texture_sRGB GLeeEnabled(&_GLEE_EXT_texture_sRGB) #define GLEE_EXT_framebuffer_blit GLeeEnabled(&_GLEE_EXT_framebuffer_blit) #define GLEE_EXT_framebuffer_multisample GLeeEnabled(&_GLEE_EXT_framebuffer_multisample) #define GLEE_MESAX_texture_stack GLeeEnabled(&_GLEE_MESAX_texture_stack) #define GLEE_EXT_timer_query GLeeEnabled(&_GLEE_EXT_timer_query) #define GLEE_EXT_gpu_program_parameters GLeeEnabled(&_GLEE_EXT_gpu_program_parameters) #define GLEE_APPLE_flush_buffer_range GLeeEnabled(&_GLEE_APPLE_flush_buffer_range) #define GLEE_EXT_gpu_shader4 GLeeEnabled(&_GLEE_EXT_gpu_shader4) #define GLEE_EXT_draw_instanced GLeeEnabled(&_GLEE_EXT_draw_instanced) #define GLEE_EXT_packed_float GLeeEnabled(&_GLEE_EXT_packed_float) #define GLEE_EXT_texture_array GLeeEnabled(&_GLEE_EXT_texture_array) #define GLEE_EXT_texture_buffer_object GLeeEnabled(&_GLEE_EXT_texture_buffer_object) #define GLEE_EXT_texture_compression_latc GLeeEnabled(&_GLEE_EXT_texture_compression_latc) #define GLEE_EXT_texture_compression_rgtc GLeeEnabled(&_GLEE_EXT_texture_compression_rgtc) #define GLEE_EXT_texture_shared_exponent GLeeEnabled(&_GLEE_EXT_texture_shared_exponent) #define GLEE_NV_depth_buffer_float GLeeEnabled(&_GLEE_NV_depth_buffer_float) #define GLEE_NV_framebuffer_multisample_coverage GLeeEnabled(&_GLEE_NV_framebuffer_multisample_coverage) #define GLEE_EXT_framebuffer_sRGB GLeeEnabled(&_GLEE_EXT_framebuffer_sRGB) #define GLEE_NV_geometry_shader4 GLeeEnabled(&_GLEE_NV_geometry_shader4) #define GLEE_NV_parameter_buffer_object GLeeEnabled(&_GLEE_NV_parameter_buffer_object) #define GLEE_EXT_draw_buffers2 GLeeEnabled(&_GLEE_EXT_draw_buffers2) #define GLEE_NV_transform_feedback GLeeEnabled(&_GLEE_NV_transform_feedback) #define GLEE_EXT_bindable_uniform GLeeEnabled(&_GLEE_EXT_bindable_uniform) #define GLEE_EXT_texture_integer GLeeEnabled(&_GLEE_EXT_texture_integer) #define GLEE_GREMEDY_frame_terminator GLeeEnabled(&_GLEE_GREMEDY_frame_terminator) #define GLEE_NV_conditional_render GLeeEnabled(&_GLEE_NV_conditional_render) #define GLEE_NV_present_video GLeeEnabled(&_GLEE_NV_present_video) #define GLEE_EXT_transform_feedback GLeeEnabled(&_GLEE_EXT_transform_feedback) #define GLEE_EXT_direct_state_access GLeeEnabled(&_GLEE_EXT_direct_state_access) #define GLEE_EXT_vertex_array_bgra GLeeEnabled(&_GLEE_EXT_vertex_array_bgra) #define GLEE_EXT_texture_swizzle GLeeEnabled(&_GLEE_EXT_texture_swizzle) #define GLEE_NV_explicit_multisample GLeeEnabled(&_GLEE_NV_explicit_multisample) #define GLEE_NV_transform_feedback2 GLeeEnabled(&_GLEE_NV_transform_feedback2) #define GLEE_SGIX_texture_select GLeeEnabled(&_GLEE_SGIX_texture_select) #define GLEE_INGR_blend_func_separate GLeeEnabled(&_GLEE_INGR_blend_func_separate) #define GLEE_SGIX_depth_pass_instrument GLeeEnabled(&_GLEE_SGIX_depth_pass_instrument) #define GLEE_SGIX_igloo_interface GLeeEnabled(&_GLEE_SGIX_igloo_interface) #define GLEE_EXT_fragment_lighting GLeeEnabled(&_GLEE_EXT_fragment_lighting) #define GLEE_EXT_geometry_shader4 GLeeEnabled(&_GLEE_EXT_geometry_shader4) #define GLEE_EXT_scene_marker GLeeEnabled(&_GLEE_EXT_scene_marker) #define GLEE_EXT_texture_compression_dxt1 GLeeEnabled(&_GLEE_EXT_texture_compression_dxt1) #define GLEE_EXT_texture_env GLeeEnabled(&_GLEE_EXT_texture_env) #define GLEE_IBM_static_data GLeeEnabled(&_GLEE_IBM_static_data) #define GLEE_NV_gpu_program4 GLeeEnabled(&_GLEE_NV_gpu_program4) #define GLEE_OES_byte_coordinates GLeeEnabled(&_GLEE_OES_byte_coordinates) #define GLEE_OES_compressed_paletted_texture GLeeEnabled(&_GLEE_OES_compressed_paletted_texture) #define GLEE_OES_single_precision GLeeEnabled(&_GLEE_OES_single_precision) #define GLEE_SGIX_pixel_texture_bits GLeeEnabled(&_GLEE_SGIX_pixel_texture_bits) #define GLEE_SGIX_texture_range GLeeEnabled(&_GLEE_SGIX_texture_range) /***************************************************************** * Additional types needed for extensions *****************************************************************/ /* Used for GLSL shader text */ #ifndef GL_VERSION_2_0 typedef char GLchar; #endif #include #ifndef GL_VERSION_1_5 typedef ptrdiff_t GLintptr; typedef ptrdiff_t GLsizeiptr; #endif #ifndef GL_NV_half_float typedef unsigned short GLhalfNV; #endif #ifndef GL_ARB_vertex_buffer_object typedef ptrdiff_t GLintptrARB; typedef ptrdiff_t GLsizeiptrARB; #endif #ifndef GL_ARB_shader_objects typedef int GLhandleARB; typedef char GLcharARB; #endif #ifndef GL_EXT_timer_query typedef signed long long GLint64EXT; typedef unsigned long long GLuint64EXT; #endif /* Platform-specific */ #ifdef WIN32 /* WGL */ #ifndef WGL_ARB_pbuffer DECLARE_HANDLE(HPBUFFERARB); #endif #ifndef WGL_EXT_pbuffer DECLARE_HANDLE(HPBUFFEREXT); #endif #ifndef WGL_NV_video_output DECLARE_HANDLE(HPVIDEODEV); #endif #ifndef WGL_NV_present_video DECLARE_HANDLE(HVIDEOOUTPUTDEVICENV); #endif #ifndef WGL_NV_gpu_affinity DECLARE_HANDLE(HPGPUNV); DECLARE_HANDLE(HGPUNV); typedef struct _GPU_DEVICE { DWORD cb; CHAR DeviceName[32]; CHAR DeviceString[128]; DWORD Flags; RECT rcVirtualScreen; } GPU_DEVICE, *PGPU_DEVICE; #endif #elif defined(__APPLE__) || defined(__APPLE_CC__) /* Mac OS X */ #else /* GLX */ /* typedef void (*__GLXextFuncPtr)(void); #ifndef GLX_ARB_get_proc_address #define GLX_ARB_get_proc_address 1 extern __GLXextFuncPtr glXGetProcAddressARB (const GLubyte *); extern void ( * glXGetProcAddressARB (const GLubyte *procName))(void); typedef __GLXextFuncPtr ( * PFNGLXGETPROCADDRESSARBPROC) (const GLubyte *procName); #endif */ #ifndef GLX_SGIX_fbconfig typedef XID GLXFBConfigIDSGIX; typedef struct __GLXFBConfigRec *GLXFBConfigSGIX; #endif #ifndef GLX_SGIX_pbuffer typedef XID GLXPbufferSGIX; typedef struct { int type; unsigned long serial; Bool send_event; Display *display; GLXDrawable drawable; int event_type; int draw_type; unsigned int mask; int x, y; int width, height; int count; } GLXBufferClobberEventSGIX; #endif #ifndef GLX_SGIX_hyperpipe #define _GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX 80 typedef struct { char pipeName[_GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX]; int networkId; } GLXHyperpipeNetworkSGIX; typedef struct { char pipeName[_GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX]; int channel; unsigned int participationType; int timeSlice; } GLXHyperpipeConfigSGIX; typedef struct { char pipeName[_GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX]; int srcXOrigin; int srcYOrigin; int srcWidth; int srcHeight; int destXOrigin; int destYOrigin; int destWidth; int destHeight; } GLXPipeRect; typedef struct { char pipeName[_GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX]; int XOrigin; int YOrigin; int maxHeight; int maxWidth; } GLXPipeRectLimits; #endif #ifndef GLX_NV_video_output typedef unsigned int GLXVideoDeviceNV; #endif // GLX_NV_video_output #endif /* end platform specific */ /* GL_VERSION_1_2 */ #ifndef GL_VERSION_1_2 #define GL_VERSION_1_2 1 #define __GLEE_GL_VERSION_1_2 1 /* Constants */ #define GL_UNSIGNED_BYTE_3_3_2 0x8032 #define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 #define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 #define GL_UNSIGNED_INT_8_8_8_8 0x8035 #define GL_UNSIGNED_INT_10_10_10_2 0x8036 #define GL_RESCALE_NORMAL 0x803A #define GL_TEXTURE_BINDING_3D 0x806A #define GL_PACK_SKIP_IMAGES 0x806B #define GL_PACK_IMAGE_HEIGHT 0x806C #define GL_UNPACK_SKIP_IMAGES 0x806D #define GL_UNPACK_IMAGE_HEIGHT 0x806E #define GL_TEXTURE_3D 0x806F #define GL_PROXY_TEXTURE_3D 0x8070 #define GL_TEXTURE_DEPTH 0x8071 #define GL_TEXTURE_WRAP_R 0x8072 #define GL_MAX_3D_TEXTURE_SIZE 0x8073 #define GL_UNSIGNED_BYTE_2_3_3_REV 0x8362 #define GL_UNSIGNED_SHORT_5_6_5 0x8363 #define GL_UNSIGNED_SHORT_5_6_5_REV 0x8364 #define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365 #define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366 #define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367 #define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368 #define GL_BGR 0x80E0 #define GL_BGRA 0x80E1 #define GL_MAX_ELEMENTS_VERTICES 0x80E8 #define GL_MAX_ELEMENTS_INDICES 0x80E9 #define GL_CLAMP_TO_EDGE 0x812F #define GL_TEXTURE_MIN_LOD 0x813A #define GL_TEXTURE_MAX_LOD 0x813B #define GL_TEXTURE_BASE_LEVEL 0x813C #define GL_TEXTURE_MAX_LEVEL 0x813D #define GL_LIGHT_MODEL_COLOR_CONTROL 0x81F8 #define GL_SINGLE_COLOR 0x81F9 #define GL_SEPARATE_SPECULAR_COLOR 0x81FA #define GL_SMOOTH_POINT_SIZE_RANGE 0x0B12 #define GL_SMOOTH_POINT_SIZE_GRANULARITY 0x0B13 #define GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22 #define GL_SMOOTH_LINE_WIDTH_GRANULARITY 0x0B23 #define GL_ALIASED_POINT_SIZE_RANGE 0x846D #define GL_ALIASED_LINE_WIDTH_RANGE 0x846E #ifndef GLEE_H_DEFINED_glBlendColor #define GLEE_H_DEFINED_glBlendColor typedef void (APIENTRYP GLEEPFNGLBLENDCOLORPROC) (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); GLEE_EXTERN GLEEPFNGLBLENDCOLORPROC GLeeFuncPtr_glBlendColor; #define glBlendColor GLeeFuncPtr_glBlendColor #endif #ifndef GLEE_H_DEFINED_glBlendEquation #define GLEE_H_DEFINED_glBlendEquation typedef void (APIENTRYP GLEEPFNGLBLENDEQUATIONPROC) (GLenum mode); GLEE_EXTERN GLEEPFNGLBLENDEQUATIONPROC GLeeFuncPtr_glBlendEquation; #define glBlendEquation GLeeFuncPtr_glBlendEquation #endif #ifndef GLEE_H_DEFINED_glDrawRangeElements #define GLEE_H_DEFINED_glDrawRangeElements typedef void (APIENTRYP GLEEPFNGLDRAWRANGEELEMENTSPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid * indices); GLEE_EXTERN GLEEPFNGLDRAWRANGEELEMENTSPROC GLeeFuncPtr_glDrawRangeElements; #define glDrawRangeElements GLeeFuncPtr_glDrawRangeElements #endif #ifndef GLEE_H_DEFINED_glColorTable #define GLEE_H_DEFINED_glColorTable typedef void (APIENTRYP GLEEPFNGLCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid * table); GLEE_EXTERN GLEEPFNGLCOLORTABLEPROC GLeeFuncPtr_glColorTable; #define glColorTable GLeeFuncPtr_glColorTable #endif #ifndef GLEE_H_DEFINED_glColorTableParameterfv #define GLEE_H_DEFINED_glColorTableParameterfv typedef void (APIENTRYP GLEEPFNGLCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat * params); GLEE_EXTERN GLEEPFNGLCOLORTABLEPARAMETERFVPROC GLeeFuncPtr_glColorTableParameterfv; #define glColorTableParameterfv GLeeFuncPtr_glColorTableParameterfv #endif #ifndef GLEE_H_DEFINED_glColorTableParameteriv #define GLEE_H_DEFINED_glColorTableParameteriv typedef void (APIENTRYP GLEEPFNGLCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint * params); GLEE_EXTERN GLEEPFNGLCOLORTABLEPARAMETERIVPROC GLeeFuncPtr_glColorTableParameteriv; #define glColorTableParameteriv GLeeFuncPtr_glColorTableParameteriv #endif #ifndef GLEE_H_DEFINED_glCopyColorTable #define GLEE_H_DEFINED_glCopyColorTable typedef void (APIENTRYP GLEEPFNGLCOPYCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); GLEE_EXTERN GLEEPFNGLCOPYCOLORTABLEPROC GLeeFuncPtr_glCopyColorTable; #define glCopyColorTable GLeeFuncPtr_glCopyColorTable #endif #ifndef GLEE_H_DEFINED_glGetColorTable #define GLEE_H_DEFINED_glGetColorTable typedef void (APIENTRYP GLEEPFNGLGETCOLORTABLEPROC) (GLenum target, GLenum format, GLenum type, GLvoid * table); GLEE_EXTERN GLEEPFNGLGETCOLORTABLEPROC GLeeFuncPtr_glGetColorTable; #define glGetColorTable GLeeFuncPtr_glGetColorTable #endif #ifndef GLEE_H_DEFINED_glGetColorTableParameterfv #define GLEE_H_DEFINED_glGetColorTableParameterfv typedef void (APIENTRYP GLEEPFNGLGETCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETCOLORTABLEPARAMETERFVPROC GLeeFuncPtr_glGetColorTableParameterfv; #define glGetColorTableParameterfv GLeeFuncPtr_glGetColorTableParameterfv #endif #ifndef GLEE_H_DEFINED_glGetColorTableParameteriv #define GLEE_H_DEFINED_glGetColorTableParameteriv typedef void (APIENTRYP GLEEPFNGLGETCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETCOLORTABLEPARAMETERIVPROC GLeeFuncPtr_glGetColorTableParameteriv; #define glGetColorTableParameteriv GLeeFuncPtr_glGetColorTableParameteriv #endif #ifndef GLEE_H_DEFINED_glColorSubTable #define GLEE_H_DEFINED_glColorSubTable typedef void (APIENTRYP GLEEPFNGLCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid * data); GLEE_EXTERN GLEEPFNGLCOLORSUBTABLEPROC GLeeFuncPtr_glColorSubTable; #define glColorSubTable GLeeFuncPtr_glColorSubTable #endif #ifndef GLEE_H_DEFINED_glCopyColorSubTable #define GLEE_H_DEFINED_glCopyColorSubTable typedef void (APIENTRYP GLEEPFNGLCOPYCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); GLEE_EXTERN GLEEPFNGLCOPYCOLORSUBTABLEPROC GLeeFuncPtr_glCopyColorSubTable; #define glCopyColorSubTable GLeeFuncPtr_glCopyColorSubTable #endif #ifndef GLEE_H_DEFINED_glConvolutionFilter1D #define GLEE_H_DEFINED_glConvolutionFilter1D typedef void (APIENTRYP GLEEPFNGLCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid * image); GLEE_EXTERN GLEEPFNGLCONVOLUTIONFILTER1DPROC GLeeFuncPtr_glConvolutionFilter1D; #define glConvolutionFilter1D GLeeFuncPtr_glConvolutionFilter1D #endif #ifndef GLEE_H_DEFINED_glConvolutionFilter2D #define GLEE_H_DEFINED_glConvolutionFilter2D typedef void (APIENTRYP GLEEPFNGLCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * image); GLEE_EXTERN GLEEPFNGLCONVOLUTIONFILTER2DPROC GLeeFuncPtr_glConvolutionFilter2D; #define glConvolutionFilter2D GLeeFuncPtr_glConvolutionFilter2D #endif #ifndef GLEE_H_DEFINED_glConvolutionParameterf #define GLEE_H_DEFINED_glConvolutionParameterf typedef void (APIENTRYP GLEEPFNGLCONVOLUTIONPARAMETERFPROC) (GLenum target, GLenum pname, GLfloat params); GLEE_EXTERN GLEEPFNGLCONVOLUTIONPARAMETERFPROC GLeeFuncPtr_glConvolutionParameterf; #define glConvolutionParameterf GLeeFuncPtr_glConvolutionParameterf #endif #ifndef GLEE_H_DEFINED_glConvolutionParameterfv #define GLEE_H_DEFINED_glConvolutionParameterfv typedef void (APIENTRYP GLEEPFNGLCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat * params); GLEE_EXTERN GLEEPFNGLCONVOLUTIONPARAMETERFVPROC GLeeFuncPtr_glConvolutionParameterfv; #define glConvolutionParameterfv GLeeFuncPtr_glConvolutionParameterfv #endif #ifndef GLEE_H_DEFINED_glConvolutionParameteri #define GLEE_H_DEFINED_glConvolutionParameteri typedef void (APIENTRYP GLEEPFNGLCONVOLUTIONPARAMETERIPROC) (GLenum target, GLenum pname, GLint params); GLEE_EXTERN GLEEPFNGLCONVOLUTIONPARAMETERIPROC GLeeFuncPtr_glConvolutionParameteri; #define glConvolutionParameteri GLeeFuncPtr_glConvolutionParameteri #endif #ifndef GLEE_H_DEFINED_glConvolutionParameteriv #define GLEE_H_DEFINED_glConvolutionParameteriv typedef void (APIENTRYP GLEEPFNGLCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint * params); GLEE_EXTERN GLEEPFNGLCONVOLUTIONPARAMETERIVPROC GLeeFuncPtr_glConvolutionParameteriv; #define glConvolutionParameteriv GLeeFuncPtr_glConvolutionParameteriv #endif #ifndef GLEE_H_DEFINED_glCopyConvolutionFilter1D #define GLEE_H_DEFINED_glCopyConvolutionFilter1D typedef void (APIENTRYP GLEEPFNGLCOPYCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); GLEE_EXTERN GLEEPFNGLCOPYCONVOLUTIONFILTER1DPROC GLeeFuncPtr_glCopyConvolutionFilter1D; #define glCopyConvolutionFilter1D GLeeFuncPtr_glCopyConvolutionFilter1D #endif #ifndef GLEE_H_DEFINED_glCopyConvolutionFilter2D #define GLEE_H_DEFINED_glCopyConvolutionFilter2D typedef void (APIENTRYP GLEEPFNGLCOPYCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); GLEE_EXTERN GLEEPFNGLCOPYCONVOLUTIONFILTER2DPROC GLeeFuncPtr_glCopyConvolutionFilter2D; #define glCopyConvolutionFilter2D GLeeFuncPtr_glCopyConvolutionFilter2D #endif #ifndef GLEE_H_DEFINED_glGetConvolutionFilter #define GLEE_H_DEFINED_glGetConvolutionFilter typedef void (APIENTRYP GLEEPFNGLGETCONVOLUTIONFILTERPROC) (GLenum target, GLenum format, GLenum type, GLvoid * image); GLEE_EXTERN GLEEPFNGLGETCONVOLUTIONFILTERPROC GLeeFuncPtr_glGetConvolutionFilter; #define glGetConvolutionFilter GLeeFuncPtr_glGetConvolutionFilter #endif #ifndef GLEE_H_DEFINED_glGetConvolutionParameterfv #define GLEE_H_DEFINED_glGetConvolutionParameterfv typedef void (APIENTRYP GLEEPFNGLGETCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETCONVOLUTIONPARAMETERFVPROC GLeeFuncPtr_glGetConvolutionParameterfv; #define glGetConvolutionParameterfv GLeeFuncPtr_glGetConvolutionParameterfv #endif #ifndef GLEE_H_DEFINED_glGetConvolutionParameteriv #define GLEE_H_DEFINED_glGetConvolutionParameteriv typedef void (APIENTRYP GLEEPFNGLGETCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETCONVOLUTIONPARAMETERIVPROC GLeeFuncPtr_glGetConvolutionParameteriv; #define glGetConvolutionParameteriv GLeeFuncPtr_glGetConvolutionParameteriv #endif #ifndef GLEE_H_DEFINED_glGetSeparableFilter #define GLEE_H_DEFINED_glGetSeparableFilter typedef void (APIENTRYP GLEEPFNGLGETSEPARABLEFILTERPROC) (GLenum target, GLenum format, GLenum type, GLvoid * row, GLvoid * column, GLvoid * span); GLEE_EXTERN GLEEPFNGLGETSEPARABLEFILTERPROC GLeeFuncPtr_glGetSeparableFilter; #define glGetSeparableFilter GLeeFuncPtr_glGetSeparableFilter #endif #ifndef GLEE_H_DEFINED_glSeparableFilter2D #define GLEE_H_DEFINED_glSeparableFilter2D typedef void (APIENTRYP GLEEPFNGLSEPARABLEFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * row, const GLvoid * column); GLEE_EXTERN GLEEPFNGLSEPARABLEFILTER2DPROC GLeeFuncPtr_glSeparableFilter2D; #define glSeparableFilter2D GLeeFuncPtr_glSeparableFilter2D #endif #ifndef GLEE_H_DEFINED_glGetHistogram #define GLEE_H_DEFINED_glGetHistogram typedef void (APIENTRYP GLEEPFNGLGETHISTOGRAMPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid * values); GLEE_EXTERN GLEEPFNGLGETHISTOGRAMPROC GLeeFuncPtr_glGetHistogram; #define glGetHistogram GLeeFuncPtr_glGetHistogram #endif #ifndef GLEE_H_DEFINED_glGetHistogramParameterfv #define GLEE_H_DEFINED_glGetHistogramParameterfv typedef void (APIENTRYP GLEEPFNGLGETHISTOGRAMPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETHISTOGRAMPARAMETERFVPROC GLeeFuncPtr_glGetHistogramParameterfv; #define glGetHistogramParameterfv GLeeFuncPtr_glGetHistogramParameterfv #endif #ifndef GLEE_H_DEFINED_glGetHistogramParameteriv #define GLEE_H_DEFINED_glGetHistogramParameteriv typedef void (APIENTRYP GLEEPFNGLGETHISTOGRAMPARAMETERIVPROC) (GLenum target, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETHISTOGRAMPARAMETERIVPROC GLeeFuncPtr_glGetHistogramParameteriv; #define glGetHistogramParameteriv GLeeFuncPtr_glGetHistogramParameteriv #endif #ifndef GLEE_H_DEFINED_glGetMinmax #define GLEE_H_DEFINED_glGetMinmax typedef void (APIENTRYP GLEEPFNGLGETMINMAXPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid * values); GLEE_EXTERN GLEEPFNGLGETMINMAXPROC GLeeFuncPtr_glGetMinmax; #define glGetMinmax GLeeFuncPtr_glGetMinmax #endif #ifndef GLEE_H_DEFINED_glGetMinmaxParameterfv #define GLEE_H_DEFINED_glGetMinmaxParameterfv typedef void (APIENTRYP GLEEPFNGLGETMINMAXPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETMINMAXPARAMETERFVPROC GLeeFuncPtr_glGetMinmaxParameterfv; #define glGetMinmaxParameterfv GLeeFuncPtr_glGetMinmaxParameterfv #endif #ifndef GLEE_H_DEFINED_glGetMinmaxParameteriv #define GLEE_H_DEFINED_glGetMinmaxParameteriv typedef void (APIENTRYP GLEEPFNGLGETMINMAXPARAMETERIVPROC) (GLenum target, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETMINMAXPARAMETERIVPROC GLeeFuncPtr_glGetMinmaxParameteriv; #define glGetMinmaxParameteriv GLeeFuncPtr_glGetMinmaxParameteriv #endif #ifndef GLEE_H_DEFINED_glHistogram #define GLEE_H_DEFINED_glHistogram typedef void (APIENTRYP GLEEPFNGLHISTOGRAMPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); GLEE_EXTERN GLEEPFNGLHISTOGRAMPROC GLeeFuncPtr_glHistogram; #define glHistogram GLeeFuncPtr_glHistogram #endif #ifndef GLEE_H_DEFINED_glMinmax #define GLEE_H_DEFINED_glMinmax typedef void (APIENTRYP GLEEPFNGLMINMAXPROC) (GLenum target, GLenum internalformat, GLboolean sink); GLEE_EXTERN GLEEPFNGLMINMAXPROC GLeeFuncPtr_glMinmax; #define glMinmax GLeeFuncPtr_glMinmax #endif #ifndef GLEE_H_DEFINED_glResetHistogram #define GLEE_H_DEFINED_glResetHistogram typedef void (APIENTRYP GLEEPFNGLRESETHISTOGRAMPROC) (GLenum target); GLEE_EXTERN GLEEPFNGLRESETHISTOGRAMPROC GLeeFuncPtr_glResetHistogram; #define glResetHistogram GLeeFuncPtr_glResetHistogram #endif #ifndef GLEE_H_DEFINED_glResetMinmax #define GLEE_H_DEFINED_glResetMinmax typedef void (APIENTRYP GLEEPFNGLRESETMINMAXPROC) (GLenum target); GLEE_EXTERN GLEEPFNGLRESETMINMAXPROC GLeeFuncPtr_glResetMinmax; #define glResetMinmax GLeeFuncPtr_glResetMinmax #endif #ifndef GLEE_H_DEFINED_glTexImage3D #define GLEE_H_DEFINED_glTexImage3D typedef void (APIENTRYP GLEEPFNGLTEXIMAGE3DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid * pixels); GLEE_EXTERN GLEEPFNGLTEXIMAGE3DPROC GLeeFuncPtr_glTexImage3D; #define glTexImage3D GLeeFuncPtr_glTexImage3D #endif #ifndef GLEE_H_DEFINED_glTexSubImage3D #define GLEE_H_DEFINED_glTexSubImage3D typedef void (APIENTRYP GLEEPFNGLTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid * pixels); GLEE_EXTERN GLEEPFNGLTEXSUBIMAGE3DPROC GLeeFuncPtr_glTexSubImage3D; #define glTexSubImage3D GLeeFuncPtr_glTexSubImage3D #endif #ifndef GLEE_H_DEFINED_glCopyTexSubImage3D #define GLEE_H_DEFINED_glCopyTexSubImage3D typedef void (APIENTRYP GLEEPFNGLCOPYTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); GLEE_EXTERN GLEEPFNGLCOPYTEXSUBIMAGE3DPROC GLeeFuncPtr_glCopyTexSubImage3D; #define glCopyTexSubImage3D GLeeFuncPtr_glCopyTexSubImage3D #endif #endif /* GL_ARB_imaging */ #ifndef GL_ARB_imaging #define GL_ARB_imaging 1 #define __GLEE_GL_ARB_imaging 1 /* Constants */ #define GL_CONSTANT_COLOR 0x8001 #define GL_ONE_MINUS_CONSTANT_COLOR 0x8002 #define GL_CONSTANT_ALPHA 0x8003 #define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 #define GL_BLEND_COLOR 0x8005 #define GL_FUNC_ADD 0x8006 #define GL_MIN 0x8007 #define GL_MAX 0x8008 #define GL_BLEND_EQUATION 0x8009 #define GL_FUNC_SUBTRACT 0x800A #define GL_FUNC_REVERSE_SUBTRACT 0x800B #define GL_CONVOLUTION_1D 0x8010 #define GL_CONVOLUTION_2D 0x8011 #define GL_SEPARABLE_2D 0x8012 #define GL_CONVOLUTION_BORDER_MODE 0x8013 #define GL_CONVOLUTION_FILTER_SCALE 0x8014 #define GL_CONVOLUTION_FILTER_BIAS 0x8015 #define GL_REDUCE 0x8016 #define GL_CONVOLUTION_FORMAT 0x8017 #define GL_CONVOLUTION_WIDTH 0x8018 #define GL_CONVOLUTION_HEIGHT 0x8019 #define GL_MAX_CONVOLUTION_WIDTH 0x801A #define GL_MAX_CONVOLUTION_HEIGHT 0x801B #define GL_POST_CONVOLUTION_RED_SCALE 0x801C #define GL_POST_CONVOLUTION_GREEN_SCALE 0x801D #define GL_POST_CONVOLUTION_BLUE_SCALE 0x801E #define GL_POST_CONVOLUTION_ALPHA_SCALE 0x801F #define GL_POST_CONVOLUTION_RED_BIAS 0x8020 #define GL_POST_CONVOLUTION_GREEN_BIAS 0x8021 #define GL_POST_CONVOLUTION_BLUE_BIAS 0x8022 #define GL_POST_CONVOLUTION_ALPHA_BIAS 0x8023 #define GL_HISTOGRAM 0x8024 #define GL_PROXY_HISTOGRAM 0x8025 #define GL_HISTOGRAM_WIDTH 0x8026 #define GL_HISTOGRAM_FORMAT 0x8027 #define GL_HISTOGRAM_RED_SIZE 0x8028 #define GL_HISTOGRAM_GREEN_SIZE 0x8029 #define GL_HISTOGRAM_BLUE_SIZE 0x802A #define GL_HISTOGRAM_ALPHA_SIZE 0x802B #define GL_HISTOGRAM_LUMINANCE_SIZE 0x802C #define GL_HISTOGRAM_SINK 0x802D #define GL_MINMAX 0x802E #define GL_MINMAX_FORMAT 0x802F #define GL_MINMAX_SINK 0x8030 #define GL_TABLE_TOO_LARGE 0x8031 #define GL_COLOR_MATRIX 0x80B1 #define GL_COLOR_MATRIX_STACK_DEPTH 0x80B2 #define GL_MAX_COLOR_MATRIX_STACK_DEPTH 0x80B3 #define GL_POST_COLOR_MATRIX_RED_SCALE 0x80B4 #define GL_POST_COLOR_MATRIX_GREEN_SCALE 0x80B5 #define GL_POST_COLOR_MATRIX_BLUE_SCALE 0x80B6 #define GL_POST_COLOR_MATRIX_ALPHA_SCALE 0x80B7 #define GL_POST_COLOR_MATRIX_RED_BIAS 0x80B8 #define GL_POST_COLOR_MATRIX_GREEN_BIAS 0x80B9 #define GL_POST_COLOR_MATRIX_BLUE_BIAS 0x80BA #define GL_POST_COLOR_MATRIX_ALPHA_BIAS 0x80BB #define GL_COLOR_TABLE 0x80D0 #define GL_POST_CONVOLUTION_COLOR_TABLE 0x80D1 #define GL_POST_COLOR_MATRIX_COLOR_TABLE 0x80D2 #define GL_PROXY_COLOR_TABLE 0x80D3 #define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE 0x80D4 #define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE 0x80D5 #define GL_COLOR_TABLE_SCALE 0x80D6 #define GL_COLOR_TABLE_BIAS 0x80D7 #define GL_COLOR_TABLE_FORMAT 0x80D8 #define GL_COLOR_TABLE_WIDTH 0x80D9 #define GL_COLOR_TABLE_RED_SIZE 0x80DA #define GL_COLOR_TABLE_GREEN_SIZE 0x80DB #define GL_COLOR_TABLE_BLUE_SIZE 0x80DC #define GL_COLOR_TABLE_ALPHA_SIZE 0x80DD #define GL_COLOR_TABLE_LUMINANCE_SIZE 0x80DE #define GL_COLOR_TABLE_INTENSITY_SIZE 0x80DF #define GL_CONSTANT_BORDER 0x8151 #define GL_REPLICATE_BORDER 0x8153 #define GL_CONVOLUTION_BORDER_COLOR 0x8154 #endif /* GL_VERSION_1_3 */ #ifndef GL_VERSION_1_3 #define GL_VERSION_1_3 1 #define __GLEE_GL_VERSION_1_3 1 /* Constants */ #define GL_TEXTURE0 0x84C0 #define GL_TEXTURE1 0x84C1 #define GL_TEXTURE2 0x84C2 #define GL_TEXTURE3 0x84C3 #define GL_TEXTURE4 0x84C4 #define GL_TEXTURE5 0x84C5 #define GL_TEXTURE6 0x84C6 #define GL_TEXTURE7 0x84C7 #define GL_TEXTURE8 0x84C8 #define GL_TEXTURE9 0x84C9 #define GL_TEXTURE10 0x84CA #define GL_TEXTURE11 0x84CB #define GL_TEXTURE12 0x84CC #define GL_TEXTURE13 0x84CD #define GL_TEXTURE14 0x84CE #define GL_TEXTURE15 0x84CF #define GL_TEXTURE16 0x84D0 #define GL_TEXTURE17 0x84D1 #define GL_TEXTURE18 0x84D2 #define GL_TEXTURE19 0x84D3 #define GL_TEXTURE20 0x84D4 #define GL_TEXTURE21 0x84D5 #define GL_TEXTURE22 0x84D6 #define GL_TEXTURE23 0x84D7 #define GL_TEXTURE24 0x84D8 #define GL_TEXTURE25 0x84D9 #define GL_TEXTURE26 0x84DA #define GL_TEXTURE27 0x84DB #define GL_TEXTURE28 0x84DC #define GL_TEXTURE29 0x84DD #define GL_TEXTURE30 0x84DE #define GL_TEXTURE31 0x84DF #define GL_ACTIVE_TEXTURE 0x84E0 #define GL_CLIENT_ACTIVE_TEXTURE 0x84E1 #define GL_MAX_TEXTURE_UNITS 0x84E2 #define GL_TRANSPOSE_MODELVIEW_MATRIX 0x84E3 #define GL_TRANSPOSE_PROJECTION_MATRIX 0x84E4 #define GL_TRANSPOSE_TEXTURE_MATRIX 0x84E5 #define GL_TRANSPOSE_COLOR_MATRIX 0x84E6 #define GL_MULTISAMPLE 0x809D #define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E #define GL_SAMPLE_ALPHA_TO_ONE 0x809F #define GL_SAMPLE_COVERAGE 0x80A0 #define GL_SAMPLE_BUFFERS 0x80A8 #define GL_SAMPLES 0x80A9 #define GL_SAMPLE_COVERAGE_VALUE 0x80AA #define GL_SAMPLE_COVERAGE_INVERT 0x80AB #define GL_MULTISAMPLE_BIT 0x20000000 #define GL_NORMAL_MAP 0x8511 #define GL_REFLECTION_MAP 0x8512 #define GL_TEXTURE_CUBE_MAP 0x8513 #define GL_TEXTURE_BINDING_CUBE_MAP 0x8514 #define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A #define GL_PROXY_TEXTURE_CUBE_MAP 0x851B #define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C #define GL_COMPRESSED_ALPHA 0x84E9 #define GL_COMPRESSED_LUMINANCE 0x84EA #define GL_COMPRESSED_LUMINANCE_ALPHA 0x84EB #define GL_COMPRESSED_INTENSITY 0x84EC #define GL_COMPRESSED_RGB 0x84ED #define GL_COMPRESSED_RGBA 0x84EE #define GL_TEXTURE_COMPRESSION_HINT 0x84EF #define GL_TEXTURE_COMPRESSED_IMAGE_SIZE 0x86A0 #define GL_TEXTURE_COMPRESSED 0x86A1 #define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 #define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 #define GL_CLAMP_TO_BORDER 0x812D #define GL_COMBINE 0x8570 #define GL_COMBINE_RGB 0x8571 #define GL_COMBINE_ALPHA 0x8572 #define GL_SOURCE0_RGB 0x8580 #define GL_SOURCE1_RGB 0x8581 #define GL_SOURCE2_RGB 0x8582 #define GL_SOURCE0_ALPHA 0x8588 #define GL_SOURCE1_ALPHA 0x8589 #define GL_SOURCE2_ALPHA 0x858A #define GL_OPERAND0_RGB 0x8590 #define GL_OPERAND1_RGB 0x8591 #define GL_OPERAND2_RGB 0x8592 #define GL_OPERAND0_ALPHA 0x8598 #define GL_OPERAND1_ALPHA 0x8599 #define GL_OPERAND2_ALPHA 0x859A #define GL_RGB_SCALE 0x8573 #define GL_ADD_SIGNED 0x8574 #define GL_INTERPOLATE 0x8575 #define GL_SUBTRACT 0x84E7 #define GL_CONSTANT 0x8576 #define GL_PRIMARY_COLOR 0x8577 #define GL_PREVIOUS 0x8578 #define GL_DOT3_RGB 0x86AE #define GL_DOT3_RGBA 0x86AF #ifndef GLEE_H_DEFINED_glActiveTexture #define GLEE_H_DEFINED_glActiveTexture typedef void (APIENTRYP GLEEPFNGLACTIVETEXTUREPROC) (GLenum texture); GLEE_EXTERN GLEEPFNGLACTIVETEXTUREPROC GLeeFuncPtr_glActiveTexture; #define glActiveTexture GLeeFuncPtr_glActiveTexture #endif #ifndef GLEE_H_DEFINED_glClientActiveTexture #define GLEE_H_DEFINED_glClientActiveTexture typedef void (APIENTRYP GLEEPFNGLCLIENTACTIVETEXTUREPROC) (GLenum texture); GLEE_EXTERN GLEEPFNGLCLIENTACTIVETEXTUREPROC GLeeFuncPtr_glClientActiveTexture; #define glClientActiveTexture GLeeFuncPtr_glClientActiveTexture #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord1d #define GLEE_H_DEFINED_glMultiTexCoord1d typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD1DPROC) (GLenum target, GLdouble s); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD1DPROC GLeeFuncPtr_glMultiTexCoord1d; #define glMultiTexCoord1d GLeeFuncPtr_glMultiTexCoord1d #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord1dv #define GLEE_H_DEFINED_glMultiTexCoord1dv typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD1DVPROC) (GLenum target, const GLdouble * v); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD1DVPROC GLeeFuncPtr_glMultiTexCoord1dv; #define glMultiTexCoord1dv GLeeFuncPtr_glMultiTexCoord1dv #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord1f #define GLEE_H_DEFINED_glMultiTexCoord1f typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD1FPROC) (GLenum target, GLfloat s); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD1FPROC GLeeFuncPtr_glMultiTexCoord1f; #define glMultiTexCoord1f GLeeFuncPtr_glMultiTexCoord1f #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord1fv #define GLEE_H_DEFINED_glMultiTexCoord1fv typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD1FVPROC) (GLenum target, const GLfloat * v); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD1FVPROC GLeeFuncPtr_glMultiTexCoord1fv; #define glMultiTexCoord1fv GLeeFuncPtr_glMultiTexCoord1fv #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord1i #define GLEE_H_DEFINED_glMultiTexCoord1i typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD1IPROC) (GLenum target, GLint s); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD1IPROC GLeeFuncPtr_glMultiTexCoord1i; #define glMultiTexCoord1i GLeeFuncPtr_glMultiTexCoord1i #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord1iv #define GLEE_H_DEFINED_glMultiTexCoord1iv typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD1IVPROC) (GLenum target, const GLint * v); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD1IVPROC GLeeFuncPtr_glMultiTexCoord1iv; #define glMultiTexCoord1iv GLeeFuncPtr_glMultiTexCoord1iv #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord1s #define GLEE_H_DEFINED_glMultiTexCoord1s typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD1SPROC) (GLenum target, GLshort s); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD1SPROC GLeeFuncPtr_glMultiTexCoord1s; #define glMultiTexCoord1s GLeeFuncPtr_glMultiTexCoord1s #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord1sv #define GLEE_H_DEFINED_glMultiTexCoord1sv typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD1SVPROC) (GLenum target, const GLshort * v); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD1SVPROC GLeeFuncPtr_glMultiTexCoord1sv; #define glMultiTexCoord1sv GLeeFuncPtr_glMultiTexCoord1sv #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord2d #define GLEE_H_DEFINED_glMultiTexCoord2d typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD2DPROC) (GLenum target, GLdouble s, GLdouble t); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD2DPROC GLeeFuncPtr_glMultiTexCoord2d; #define glMultiTexCoord2d GLeeFuncPtr_glMultiTexCoord2d #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord2dv #define GLEE_H_DEFINED_glMultiTexCoord2dv typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD2DVPROC) (GLenum target, const GLdouble * v); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD2DVPROC GLeeFuncPtr_glMultiTexCoord2dv; #define glMultiTexCoord2dv GLeeFuncPtr_glMultiTexCoord2dv #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord2f #define GLEE_H_DEFINED_glMultiTexCoord2f typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD2FPROC) (GLenum target, GLfloat s, GLfloat t); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD2FPROC GLeeFuncPtr_glMultiTexCoord2f; #define glMultiTexCoord2f GLeeFuncPtr_glMultiTexCoord2f #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord2fv #define GLEE_H_DEFINED_glMultiTexCoord2fv typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD2FVPROC) (GLenum target, const GLfloat * v); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD2FVPROC GLeeFuncPtr_glMultiTexCoord2fv; #define glMultiTexCoord2fv GLeeFuncPtr_glMultiTexCoord2fv #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord2i #define GLEE_H_DEFINED_glMultiTexCoord2i typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD2IPROC) (GLenum target, GLint s, GLint t); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD2IPROC GLeeFuncPtr_glMultiTexCoord2i; #define glMultiTexCoord2i GLeeFuncPtr_glMultiTexCoord2i #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord2iv #define GLEE_H_DEFINED_glMultiTexCoord2iv typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD2IVPROC) (GLenum target, const GLint * v); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD2IVPROC GLeeFuncPtr_glMultiTexCoord2iv; #define glMultiTexCoord2iv GLeeFuncPtr_glMultiTexCoord2iv #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord2s #define GLEE_H_DEFINED_glMultiTexCoord2s typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD2SPROC) (GLenum target, GLshort s, GLshort t); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD2SPROC GLeeFuncPtr_glMultiTexCoord2s; #define glMultiTexCoord2s GLeeFuncPtr_glMultiTexCoord2s #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord2sv #define GLEE_H_DEFINED_glMultiTexCoord2sv typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD2SVPROC) (GLenum target, const GLshort * v); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD2SVPROC GLeeFuncPtr_glMultiTexCoord2sv; #define glMultiTexCoord2sv GLeeFuncPtr_glMultiTexCoord2sv #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord3d #define GLEE_H_DEFINED_glMultiTexCoord3d typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD3DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD3DPROC GLeeFuncPtr_glMultiTexCoord3d; #define glMultiTexCoord3d GLeeFuncPtr_glMultiTexCoord3d #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord3dv #define GLEE_H_DEFINED_glMultiTexCoord3dv typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD3DVPROC) (GLenum target, const GLdouble * v); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD3DVPROC GLeeFuncPtr_glMultiTexCoord3dv; #define glMultiTexCoord3dv GLeeFuncPtr_glMultiTexCoord3dv #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord3f #define GLEE_H_DEFINED_glMultiTexCoord3f typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD3FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD3FPROC GLeeFuncPtr_glMultiTexCoord3f; #define glMultiTexCoord3f GLeeFuncPtr_glMultiTexCoord3f #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord3fv #define GLEE_H_DEFINED_glMultiTexCoord3fv typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD3FVPROC) (GLenum target, const GLfloat * v); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD3FVPROC GLeeFuncPtr_glMultiTexCoord3fv; #define glMultiTexCoord3fv GLeeFuncPtr_glMultiTexCoord3fv #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord3i #define GLEE_H_DEFINED_glMultiTexCoord3i typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD3IPROC) (GLenum target, GLint s, GLint t, GLint r); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD3IPROC GLeeFuncPtr_glMultiTexCoord3i; #define glMultiTexCoord3i GLeeFuncPtr_glMultiTexCoord3i #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord3iv #define GLEE_H_DEFINED_glMultiTexCoord3iv typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD3IVPROC) (GLenum target, const GLint * v); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD3IVPROC GLeeFuncPtr_glMultiTexCoord3iv; #define glMultiTexCoord3iv GLeeFuncPtr_glMultiTexCoord3iv #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord3s #define GLEE_H_DEFINED_glMultiTexCoord3s typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD3SPROC) (GLenum target, GLshort s, GLshort t, GLshort r); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD3SPROC GLeeFuncPtr_glMultiTexCoord3s; #define glMultiTexCoord3s GLeeFuncPtr_glMultiTexCoord3s #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord3sv #define GLEE_H_DEFINED_glMultiTexCoord3sv typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD3SVPROC) (GLenum target, const GLshort * v); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD3SVPROC GLeeFuncPtr_glMultiTexCoord3sv; #define glMultiTexCoord3sv GLeeFuncPtr_glMultiTexCoord3sv #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord4d #define GLEE_H_DEFINED_glMultiTexCoord4d typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD4DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD4DPROC GLeeFuncPtr_glMultiTexCoord4d; #define glMultiTexCoord4d GLeeFuncPtr_glMultiTexCoord4d #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord4dv #define GLEE_H_DEFINED_glMultiTexCoord4dv typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD4DVPROC) (GLenum target, const GLdouble * v); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD4DVPROC GLeeFuncPtr_glMultiTexCoord4dv; #define glMultiTexCoord4dv GLeeFuncPtr_glMultiTexCoord4dv #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord4f #define GLEE_H_DEFINED_glMultiTexCoord4f typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD4FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD4FPROC GLeeFuncPtr_glMultiTexCoord4f; #define glMultiTexCoord4f GLeeFuncPtr_glMultiTexCoord4f #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord4fv #define GLEE_H_DEFINED_glMultiTexCoord4fv typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD4FVPROC) (GLenum target, const GLfloat * v); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD4FVPROC GLeeFuncPtr_glMultiTexCoord4fv; #define glMultiTexCoord4fv GLeeFuncPtr_glMultiTexCoord4fv #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord4i #define GLEE_H_DEFINED_glMultiTexCoord4i typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD4IPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD4IPROC GLeeFuncPtr_glMultiTexCoord4i; #define glMultiTexCoord4i GLeeFuncPtr_glMultiTexCoord4i #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord4iv #define GLEE_H_DEFINED_glMultiTexCoord4iv typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD4IVPROC) (GLenum target, const GLint * v); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD4IVPROC GLeeFuncPtr_glMultiTexCoord4iv; #define glMultiTexCoord4iv GLeeFuncPtr_glMultiTexCoord4iv #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord4s #define GLEE_H_DEFINED_glMultiTexCoord4s typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD4SPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD4SPROC GLeeFuncPtr_glMultiTexCoord4s; #define glMultiTexCoord4s GLeeFuncPtr_glMultiTexCoord4s #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord4sv #define GLEE_H_DEFINED_glMultiTexCoord4sv typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD4SVPROC) (GLenum target, const GLshort * v); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD4SVPROC GLeeFuncPtr_glMultiTexCoord4sv; #define glMultiTexCoord4sv GLeeFuncPtr_glMultiTexCoord4sv #endif #ifndef GLEE_H_DEFINED_glLoadTransposeMatrixf #define GLEE_H_DEFINED_glLoadTransposeMatrixf typedef void (APIENTRYP GLEEPFNGLLOADTRANSPOSEMATRIXFPROC) (const GLfloat * m); GLEE_EXTERN GLEEPFNGLLOADTRANSPOSEMATRIXFPROC GLeeFuncPtr_glLoadTransposeMatrixf; #define glLoadTransposeMatrixf GLeeFuncPtr_glLoadTransposeMatrixf #endif #ifndef GLEE_H_DEFINED_glLoadTransposeMatrixd #define GLEE_H_DEFINED_glLoadTransposeMatrixd typedef void (APIENTRYP GLEEPFNGLLOADTRANSPOSEMATRIXDPROC) (const GLdouble * m); GLEE_EXTERN GLEEPFNGLLOADTRANSPOSEMATRIXDPROC GLeeFuncPtr_glLoadTransposeMatrixd; #define glLoadTransposeMatrixd GLeeFuncPtr_glLoadTransposeMatrixd #endif #ifndef GLEE_H_DEFINED_glMultTransposeMatrixf #define GLEE_H_DEFINED_glMultTransposeMatrixf typedef void (APIENTRYP GLEEPFNGLMULTTRANSPOSEMATRIXFPROC) (const GLfloat * m); GLEE_EXTERN GLEEPFNGLMULTTRANSPOSEMATRIXFPROC GLeeFuncPtr_glMultTransposeMatrixf; #define glMultTransposeMatrixf GLeeFuncPtr_glMultTransposeMatrixf #endif #ifndef GLEE_H_DEFINED_glMultTransposeMatrixd #define GLEE_H_DEFINED_glMultTransposeMatrixd typedef void (APIENTRYP GLEEPFNGLMULTTRANSPOSEMATRIXDPROC) (const GLdouble * m); GLEE_EXTERN GLEEPFNGLMULTTRANSPOSEMATRIXDPROC GLeeFuncPtr_glMultTransposeMatrixd; #define glMultTransposeMatrixd GLeeFuncPtr_glMultTransposeMatrixd #endif #ifndef GLEE_H_DEFINED_glSampleCoverage #define GLEE_H_DEFINED_glSampleCoverage typedef void (APIENTRYP GLEEPFNGLSAMPLECOVERAGEPROC) (GLclampf value, GLboolean invert); GLEE_EXTERN GLEEPFNGLSAMPLECOVERAGEPROC GLeeFuncPtr_glSampleCoverage; #define glSampleCoverage GLeeFuncPtr_glSampleCoverage #endif #ifndef GLEE_H_DEFINED_glCompressedTexImage3D #define GLEE_H_DEFINED_glCompressedTexImage3D typedef void (APIENTRYP GLEEPFNGLCOMPRESSEDTEXIMAGE3DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid * data); GLEE_EXTERN GLEEPFNGLCOMPRESSEDTEXIMAGE3DPROC GLeeFuncPtr_glCompressedTexImage3D; #define glCompressedTexImage3D GLeeFuncPtr_glCompressedTexImage3D #endif #ifndef GLEE_H_DEFINED_glCompressedTexImage2D #define GLEE_H_DEFINED_glCompressedTexImage2D typedef void (APIENTRYP GLEEPFNGLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid * data); GLEE_EXTERN GLEEPFNGLCOMPRESSEDTEXIMAGE2DPROC GLeeFuncPtr_glCompressedTexImage2D; #define glCompressedTexImage2D GLeeFuncPtr_glCompressedTexImage2D #endif #ifndef GLEE_H_DEFINED_glCompressedTexImage1D #define GLEE_H_DEFINED_glCompressedTexImage1D typedef void (APIENTRYP GLEEPFNGLCOMPRESSEDTEXIMAGE1DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid * data); GLEE_EXTERN GLEEPFNGLCOMPRESSEDTEXIMAGE1DPROC GLeeFuncPtr_glCompressedTexImage1D; #define glCompressedTexImage1D GLeeFuncPtr_glCompressedTexImage1D #endif #ifndef GLEE_H_DEFINED_glCompressedTexSubImage3D #define GLEE_H_DEFINED_glCompressedTexSubImage3D typedef void (APIENTRYP GLEEPFNGLCOMPRESSEDTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid * data); GLEE_EXTERN GLEEPFNGLCOMPRESSEDTEXSUBIMAGE3DPROC GLeeFuncPtr_glCompressedTexSubImage3D; #define glCompressedTexSubImage3D GLeeFuncPtr_glCompressedTexSubImage3D #endif #ifndef GLEE_H_DEFINED_glCompressedTexSubImage2D #define GLEE_H_DEFINED_glCompressedTexSubImage2D typedef void (APIENTRYP GLEEPFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid * data); GLEE_EXTERN GLEEPFNGLCOMPRESSEDTEXSUBIMAGE2DPROC GLeeFuncPtr_glCompressedTexSubImage2D; #define glCompressedTexSubImage2D GLeeFuncPtr_glCompressedTexSubImage2D #endif #ifndef GLEE_H_DEFINED_glCompressedTexSubImage1D #define GLEE_H_DEFINED_glCompressedTexSubImage1D typedef void (APIENTRYP GLEEPFNGLCOMPRESSEDTEXSUBIMAGE1DPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid * data); GLEE_EXTERN GLEEPFNGLCOMPRESSEDTEXSUBIMAGE1DPROC GLeeFuncPtr_glCompressedTexSubImage1D; #define glCompressedTexSubImage1D GLeeFuncPtr_glCompressedTexSubImage1D #endif #ifndef GLEE_H_DEFINED_glGetCompressedTexImage #define GLEE_H_DEFINED_glGetCompressedTexImage typedef void (APIENTRYP GLEEPFNGLGETCOMPRESSEDTEXIMAGEPROC) (GLenum target, GLint level, GLvoid * img); GLEE_EXTERN GLEEPFNGLGETCOMPRESSEDTEXIMAGEPROC GLeeFuncPtr_glGetCompressedTexImage; #define glGetCompressedTexImage GLeeFuncPtr_glGetCompressedTexImage #endif #endif /* GL_VERSION_1_4 */ #ifndef GL_VERSION_1_4 #define GL_VERSION_1_4 1 #define __GLEE_GL_VERSION_1_4 1 /* Constants */ #define GL_BLEND_DST_RGB 0x80C8 #define GL_BLEND_SRC_RGB 0x80C9 #define GL_BLEND_DST_ALPHA 0x80CA #define GL_BLEND_SRC_ALPHA 0x80CB #define GL_POINT_SIZE_MIN 0x8126 #define GL_POINT_SIZE_MAX 0x8127 #define GL_POINT_FADE_THRESHOLD_SIZE 0x8128 #define GL_POINT_DISTANCE_ATTENUATION 0x8129 #define GL_GENERATE_MIPMAP 0x8191 #define GL_GENERATE_MIPMAP_HINT 0x8192 #define GL_DEPTH_COMPONENT16 0x81A5 #define GL_DEPTH_COMPONENT24 0x81A6 #define GL_DEPTH_COMPONENT32 0x81A7 #define GL_MIRRORED_REPEAT 0x8370 #define GL_FOG_COORDINATE_SOURCE 0x8450 #define GL_FOG_COORDINATE 0x8451 #define GL_FRAGMENT_DEPTH 0x8452 #define GL_CURRENT_FOG_COORDINATE 0x8453 #define GL_FOG_COORDINATE_ARRAY_TYPE 0x8454 #define GL_FOG_COORDINATE_ARRAY_STRIDE 0x8455 #define GL_FOG_COORDINATE_ARRAY_POINTER 0x8456 #define GL_FOG_COORDINATE_ARRAY 0x8457 #define GL_COLOR_SUM 0x8458 #define GL_CURRENT_SECONDARY_COLOR 0x8459 #define GL_SECONDARY_COLOR_ARRAY_SIZE 0x845A #define GL_SECONDARY_COLOR_ARRAY_TYPE 0x845B #define GL_SECONDARY_COLOR_ARRAY_STRIDE 0x845C #define GL_SECONDARY_COLOR_ARRAY_POINTER 0x845D #define GL_SECONDARY_COLOR_ARRAY 0x845E #define GL_MAX_TEXTURE_LOD_BIAS 0x84FD #define GL_TEXTURE_FILTER_CONTROL 0x8500 #define GL_TEXTURE_LOD_BIAS 0x8501 #define GL_INCR_WRAP 0x8507 #define GL_DECR_WRAP 0x8508 #define GL_TEXTURE_DEPTH_SIZE 0x884A #define GL_DEPTH_TEXTURE_MODE 0x884B #define GL_TEXTURE_COMPARE_MODE 0x884C #define GL_TEXTURE_COMPARE_FUNC 0x884D #define GL_COMPARE_R_TO_TEXTURE 0x884E #ifndef GLEE_H_DEFINED_glBlendFuncSeparate #define GLEE_H_DEFINED_glBlendFuncSeparate typedef void (APIENTRYP GLEEPFNGLBLENDFUNCSEPARATEPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); GLEE_EXTERN GLEEPFNGLBLENDFUNCSEPARATEPROC GLeeFuncPtr_glBlendFuncSeparate; #define glBlendFuncSeparate GLeeFuncPtr_glBlendFuncSeparate #endif #ifndef GLEE_H_DEFINED_glFogCoordf #define GLEE_H_DEFINED_glFogCoordf typedef void (APIENTRYP GLEEPFNGLFOGCOORDFPROC) (GLfloat coord); GLEE_EXTERN GLEEPFNGLFOGCOORDFPROC GLeeFuncPtr_glFogCoordf; #define glFogCoordf GLeeFuncPtr_glFogCoordf #endif #ifndef GLEE_H_DEFINED_glFogCoordfv #define GLEE_H_DEFINED_glFogCoordfv typedef void (APIENTRYP GLEEPFNGLFOGCOORDFVPROC) (const GLfloat * coord); GLEE_EXTERN GLEEPFNGLFOGCOORDFVPROC GLeeFuncPtr_glFogCoordfv; #define glFogCoordfv GLeeFuncPtr_glFogCoordfv #endif #ifndef GLEE_H_DEFINED_glFogCoordd #define GLEE_H_DEFINED_glFogCoordd typedef void (APIENTRYP GLEEPFNGLFOGCOORDDPROC) (GLdouble coord); GLEE_EXTERN GLEEPFNGLFOGCOORDDPROC GLeeFuncPtr_glFogCoordd; #define glFogCoordd GLeeFuncPtr_glFogCoordd #endif #ifndef GLEE_H_DEFINED_glFogCoorddv #define GLEE_H_DEFINED_glFogCoorddv typedef void (APIENTRYP GLEEPFNGLFOGCOORDDVPROC) (const GLdouble * coord); GLEE_EXTERN GLEEPFNGLFOGCOORDDVPROC GLeeFuncPtr_glFogCoorddv; #define glFogCoorddv GLeeFuncPtr_glFogCoorddv #endif #ifndef GLEE_H_DEFINED_glFogCoordPointer #define GLEE_H_DEFINED_glFogCoordPointer typedef void (APIENTRYP GLEEPFNGLFOGCOORDPOINTERPROC) (GLenum type, GLsizei stride, const GLvoid * pointer); GLEE_EXTERN GLEEPFNGLFOGCOORDPOINTERPROC GLeeFuncPtr_glFogCoordPointer; #define glFogCoordPointer GLeeFuncPtr_glFogCoordPointer #endif #ifndef GLEE_H_DEFINED_glMultiDrawArrays #define GLEE_H_DEFINED_glMultiDrawArrays typedef void (APIENTRYP GLEEPFNGLMULTIDRAWARRAYSPROC) (GLenum mode, GLint * first, GLsizei * count, GLsizei primcount); GLEE_EXTERN GLEEPFNGLMULTIDRAWARRAYSPROC GLeeFuncPtr_glMultiDrawArrays; #define glMultiDrawArrays GLeeFuncPtr_glMultiDrawArrays #endif #ifndef GLEE_H_DEFINED_glMultiDrawElements #define GLEE_H_DEFINED_glMultiDrawElements typedef void (APIENTRYP GLEEPFNGLMULTIDRAWELEMENTSPROC) (GLenum mode, const GLsizei * count, GLenum type, const GLvoid* * indices, GLsizei primcount); GLEE_EXTERN GLEEPFNGLMULTIDRAWELEMENTSPROC GLeeFuncPtr_glMultiDrawElements; #define glMultiDrawElements GLeeFuncPtr_glMultiDrawElements #endif #ifndef GLEE_H_DEFINED_glPointParameterf #define GLEE_H_DEFINED_glPointParameterf typedef void (APIENTRYP GLEEPFNGLPOINTPARAMETERFPROC) (GLenum pname, GLfloat param); GLEE_EXTERN GLEEPFNGLPOINTPARAMETERFPROC GLeeFuncPtr_glPointParameterf; #define glPointParameterf GLeeFuncPtr_glPointParameterf #endif #ifndef GLEE_H_DEFINED_glPointParameterfv #define GLEE_H_DEFINED_glPointParameterfv typedef void (APIENTRYP GLEEPFNGLPOINTPARAMETERFVPROC) (GLenum pname, const GLfloat * params); GLEE_EXTERN GLEEPFNGLPOINTPARAMETERFVPROC GLeeFuncPtr_glPointParameterfv; #define glPointParameterfv GLeeFuncPtr_glPointParameterfv #endif #ifndef GLEE_H_DEFINED_glPointParameteri #define GLEE_H_DEFINED_glPointParameteri typedef void (APIENTRYP GLEEPFNGLPOINTPARAMETERIPROC) (GLenum pname, GLint param); GLEE_EXTERN GLEEPFNGLPOINTPARAMETERIPROC GLeeFuncPtr_glPointParameteri; #define glPointParameteri GLeeFuncPtr_glPointParameteri #endif #ifndef GLEE_H_DEFINED_glPointParameteriv #define GLEE_H_DEFINED_glPointParameteriv typedef void (APIENTRYP GLEEPFNGLPOINTPARAMETERIVPROC) (GLenum pname, const GLint * params); GLEE_EXTERN GLEEPFNGLPOINTPARAMETERIVPROC GLeeFuncPtr_glPointParameteriv; #define glPointParameteriv GLeeFuncPtr_glPointParameteriv #endif #ifndef GLEE_H_DEFINED_glSecondaryColor3b #define GLEE_H_DEFINED_glSecondaryColor3b typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLOR3BPROC) (GLbyte red, GLbyte green, GLbyte blue); GLEE_EXTERN GLEEPFNGLSECONDARYCOLOR3BPROC GLeeFuncPtr_glSecondaryColor3b; #define glSecondaryColor3b GLeeFuncPtr_glSecondaryColor3b #endif #ifndef GLEE_H_DEFINED_glSecondaryColor3bv #define GLEE_H_DEFINED_glSecondaryColor3bv typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLOR3BVPROC) (const GLbyte * v); GLEE_EXTERN GLEEPFNGLSECONDARYCOLOR3BVPROC GLeeFuncPtr_glSecondaryColor3bv; #define glSecondaryColor3bv GLeeFuncPtr_glSecondaryColor3bv #endif #ifndef GLEE_H_DEFINED_glSecondaryColor3d #define GLEE_H_DEFINED_glSecondaryColor3d typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLOR3DPROC) (GLdouble red, GLdouble green, GLdouble blue); GLEE_EXTERN GLEEPFNGLSECONDARYCOLOR3DPROC GLeeFuncPtr_glSecondaryColor3d; #define glSecondaryColor3d GLeeFuncPtr_glSecondaryColor3d #endif #ifndef GLEE_H_DEFINED_glSecondaryColor3dv #define GLEE_H_DEFINED_glSecondaryColor3dv typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLOR3DVPROC) (const GLdouble * v); GLEE_EXTERN GLEEPFNGLSECONDARYCOLOR3DVPROC GLeeFuncPtr_glSecondaryColor3dv; #define glSecondaryColor3dv GLeeFuncPtr_glSecondaryColor3dv #endif #ifndef GLEE_H_DEFINED_glSecondaryColor3f #define GLEE_H_DEFINED_glSecondaryColor3f typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLOR3FPROC) (GLfloat red, GLfloat green, GLfloat blue); GLEE_EXTERN GLEEPFNGLSECONDARYCOLOR3FPROC GLeeFuncPtr_glSecondaryColor3f; #define glSecondaryColor3f GLeeFuncPtr_glSecondaryColor3f #endif #ifndef GLEE_H_DEFINED_glSecondaryColor3fv #define GLEE_H_DEFINED_glSecondaryColor3fv typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLOR3FVPROC) (const GLfloat * v); GLEE_EXTERN GLEEPFNGLSECONDARYCOLOR3FVPROC GLeeFuncPtr_glSecondaryColor3fv; #define glSecondaryColor3fv GLeeFuncPtr_glSecondaryColor3fv #endif #ifndef GLEE_H_DEFINED_glSecondaryColor3i #define GLEE_H_DEFINED_glSecondaryColor3i typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLOR3IPROC) (GLint red, GLint green, GLint blue); GLEE_EXTERN GLEEPFNGLSECONDARYCOLOR3IPROC GLeeFuncPtr_glSecondaryColor3i; #define glSecondaryColor3i GLeeFuncPtr_glSecondaryColor3i #endif #ifndef GLEE_H_DEFINED_glSecondaryColor3iv #define GLEE_H_DEFINED_glSecondaryColor3iv typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLOR3IVPROC) (const GLint * v); GLEE_EXTERN GLEEPFNGLSECONDARYCOLOR3IVPROC GLeeFuncPtr_glSecondaryColor3iv; #define glSecondaryColor3iv GLeeFuncPtr_glSecondaryColor3iv #endif #ifndef GLEE_H_DEFINED_glSecondaryColor3s #define GLEE_H_DEFINED_glSecondaryColor3s typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLOR3SPROC) (GLshort red, GLshort green, GLshort blue); GLEE_EXTERN GLEEPFNGLSECONDARYCOLOR3SPROC GLeeFuncPtr_glSecondaryColor3s; #define glSecondaryColor3s GLeeFuncPtr_glSecondaryColor3s #endif #ifndef GLEE_H_DEFINED_glSecondaryColor3sv #define GLEE_H_DEFINED_glSecondaryColor3sv typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLOR3SVPROC) (const GLshort * v); GLEE_EXTERN GLEEPFNGLSECONDARYCOLOR3SVPROC GLeeFuncPtr_glSecondaryColor3sv; #define glSecondaryColor3sv GLeeFuncPtr_glSecondaryColor3sv #endif #ifndef GLEE_H_DEFINED_glSecondaryColor3ub #define GLEE_H_DEFINED_glSecondaryColor3ub typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLOR3UBPROC) (GLubyte red, GLubyte green, GLubyte blue); GLEE_EXTERN GLEEPFNGLSECONDARYCOLOR3UBPROC GLeeFuncPtr_glSecondaryColor3ub; #define glSecondaryColor3ub GLeeFuncPtr_glSecondaryColor3ub #endif #ifndef GLEE_H_DEFINED_glSecondaryColor3ubv #define GLEE_H_DEFINED_glSecondaryColor3ubv typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLOR3UBVPROC) (const GLubyte * v); GLEE_EXTERN GLEEPFNGLSECONDARYCOLOR3UBVPROC GLeeFuncPtr_glSecondaryColor3ubv; #define glSecondaryColor3ubv GLeeFuncPtr_glSecondaryColor3ubv #endif #ifndef GLEE_H_DEFINED_glSecondaryColor3ui #define GLEE_H_DEFINED_glSecondaryColor3ui typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLOR3UIPROC) (GLuint red, GLuint green, GLuint blue); GLEE_EXTERN GLEEPFNGLSECONDARYCOLOR3UIPROC GLeeFuncPtr_glSecondaryColor3ui; #define glSecondaryColor3ui GLeeFuncPtr_glSecondaryColor3ui #endif #ifndef GLEE_H_DEFINED_glSecondaryColor3uiv #define GLEE_H_DEFINED_glSecondaryColor3uiv typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLOR3UIVPROC) (const GLuint * v); GLEE_EXTERN GLEEPFNGLSECONDARYCOLOR3UIVPROC GLeeFuncPtr_glSecondaryColor3uiv; #define glSecondaryColor3uiv GLeeFuncPtr_glSecondaryColor3uiv #endif #ifndef GLEE_H_DEFINED_glSecondaryColor3us #define GLEE_H_DEFINED_glSecondaryColor3us typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLOR3USPROC) (GLushort red, GLushort green, GLushort blue); GLEE_EXTERN GLEEPFNGLSECONDARYCOLOR3USPROC GLeeFuncPtr_glSecondaryColor3us; #define glSecondaryColor3us GLeeFuncPtr_glSecondaryColor3us #endif #ifndef GLEE_H_DEFINED_glSecondaryColor3usv #define GLEE_H_DEFINED_glSecondaryColor3usv typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLOR3USVPROC) (const GLushort * v); GLEE_EXTERN GLEEPFNGLSECONDARYCOLOR3USVPROC GLeeFuncPtr_glSecondaryColor3usv; #define glSecondaryColor3usv GLeeFuncPtr_glSecondaryColor3usv #endif #ifndef GLEE_H_DEFINED_glSecondaryColorPointer #define GLEE_H_DEFINED_glSecondaryColorPointer typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLORPOINTERPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid * pointer); GLEE_EXTERN GLEEPFNGLSECONDARYCOLORPOINTERPROC GLeeFuncPtr_glSecondaryColorPointer; #define glSecondaryColorPointer GLeeFuncPtr_glSecondaryColorPointer #endif #ifndef GLEE_H_DEFINED_glWindowPos2d #define GLEE_H_DEFINED_glWindowPos2d typedef void (APIENTRYP GLEEPFNGLWINDOWPOS2DPROC) (GLdouble x, GLdouble y); GLEE_EXTERN GLEEPFNGLWINDOWPOS2DPROC GLeeFuncPtr_glWindowPos2d; #define glWindowPos2d GLeeFuncPtr_glWindowPos2d #endif #ifndef GLEE_H_DEFINED_glWindowPos2dv #define GLEE_H_DEFINED_glWindowPos2dv typedef void (APIENTRYP GLEEPFNGLWINDOWPOS2DVPROC) (const GLdouble * v); GLEE_EXTERN GLEEPFNGLWINDOWPOS2DVPROC GLeeFuncPtr_glWindowPos2dv; #define glWindowPos2dv GLeeFuncPtr_glWindowPos2dv #endif #ifndef GLEE_H_DEFINED_glWindowPos2f #define GLEE_H_DEFINED_glWindowPos2f typedef void (APIENTRYP GLEEPFNGLWINDOWPOS2FPROC) (GLfloat x, GLfloat y); GLEE_EXTERN GLEEPFNGLWINDOWPOS2FPROC GLeeFuncPtr_glWindowPos2f; #define glWindowPos2f GLeeFuncPtr_glWindowPos2f #endif #ifndef GLEE_H_DEFINED_glWindowPos2fv #define GLEE_H_DEFINED_glWindowPos2fv typedef void (APIENTRYP GLEEPFNGLWINDOWPOS2FVPROC) (const GLfloat * v); GLEE_EXTERN GLEEPFNGLWINDOWPOS2FVPROC GLeeFuncPtr_glWindowPos2fv; #define glWindowPos2fv GLeeFuncPtr_glWindowPos2fv #endif #ifndef GLEE_H_DEFINED_glWindowPos2i #define GLEE_H_DEFINED_glWindowPos2i typedef void (APIENTRYP GLEEPFNGLWINDOWPOS2IPROC) (GLint x, GLint y); GLEE_EXTERN GLEEPFNGLWINDOWPOS2IPROC GLeeFuncPtr_glWindowPos2i; #define glWindowPos2i GLeeFuncPtr_glWindowPos2i #endif #ifndef GLEE_H_DEFINED_glWindowPos2iv #define GLEE_H_DEFINED_glWindowPos2iv typedef void (APIENTRYP GLEEPFNGLWINDOWPOS2IVPROC) (const GLint * v); GLEE_EXTERN GLEEPFNGLWINDOWPOS2IVPROC GLeeFuncPtr_glWindowPos2iv; #define glWindowPos2iv GLeeFuncPtr_glWindowPos2iv #endif #ifndef GLEE_H_DEFINED_glWindowPos2s #define GLEE_H_DEFINED_glWindowPos2s typedef void (APIENTRYP GLEEPFNGLWINDOWPOS2SPROC) (GLshort x, GLshort y); GLEE_EXTERN GLEEPFNGLWINDOWPOS2SPROC GLeeFuncPtr_glWindowPos2s; #define glWindowPos2s GLeeFuncPtr_glWindowPos2s #endif #ifndef GLEE_H_DEFINED_glWindowPos2sv #define GLEE_H_DEFINED_glWindowPos2sv typedef void (APIENTRYP GLEEPFNGLWINDOWPOS2SVPROC) (const GLshort * v); GLEE_EXTERN GLEEPFNGLWINDOWPOS2SVPROC GLeeFuncPtr_glWindowPos2sv; #define glWindowPos2sv GLeeFuncPtr_glWindowPos2sv #endif #ifndef GLEE_H_DEFINED_glWindowPos3d #define GLEE_H_DEFINED_glWindowPos3d typedef void (APIENTRYP GLEEPFNGLWINDOWPOS3DPROC) (GLdouble x, GLdouble y, GLdouble z); GLEE_EXTERN GLEEPFNGLWINDOWPOS3DPROC GLeeFuncPtr_glWindowPos3d; #define glWindowPos3d GLeeFuncPtr_glWindowPos3d #endif #ifndef GLEE_H_DEFINED_glWindowPos3dv #define GLEE_H_DEFINED_glWindowPos3dv typedef void (APIENTRYP GLEEPFNGLWINDOWPOS3DVPROC) (const GLdouble * v); GLEE_EXTERN GLEEPFNGLWINDOWPOS3DVPROC GLeeFuncPtr_glWindowPos3dv; #define glWindowPos3dv GLeeFuncPtr_glWindowPos3dv #endif #ifndef GLEE_H_DEFINED_glWindowPos3f #define GLEE_H_DEFINED_glWindowPos3f typedef void (APIENTRYP GLEEPFNGLWINDOWPOS3FPROC) (GLfloat x, GLfloat y, GLfloat z); GLEE_EXTERN GLEEPFNGLWINDOWPOS3FPROC GLeeFuncPtr_glWindowPos3f; #define glWindowPos3f GLeeFuncPtr_glWindowPos3f #endif #ifndef GLEE_H_DEFINED_glWindowPos3fv #define GLEE_H_DEFINED_glWindowPos3fv typedef void (APIENTRYP GLEEPFNGLWINDOWPOS3FVPROC) (const GLfloat * v); GLEE_EXTERN GLEEPFNGLWINDOWPOS3FVPROC GLeeFuncPtr_glWindowPos3fv; #define glWindowPos3fv GLeeFuncPtr_glWindowPos3fv #endif #ifndef GLEE_H_DEFINED_glWindowPos3i #define GLEE_H_DEFINED_glWindowPos3i typedef void (APIENTRYP GLEEPFNGLWINDOWPOS3IPROC) (GLint x, GLint y, GLint z); GLEE_EXTERN GLEEPFNGLWINDOWPOS3IPROC GLeeFuncPtr_glWindowPos3i; #define glWindowPos3i GLeeFuncPtr_glWindowPos3i #endif #ifndef GLEE_H_DEFINED_glWindowPos3iv #define GLEE_H_DEFINED_glWindowPos3iv typedef void (APIENTRYP GLEEPFNGLWINDOWPOS3IVPROC) (const GLint * v); GLEE_EXTERN GLEEPFNGLWINDOWPOS3IVPROC GLeeFuncPtr_glWindowPos3iv; #define glWindowPos3iv GLeeFuncPtr_glWindowPos3iv #endif #ifndef GLEE_H_DEFINED_glWindowPos3s #define GLEE_H_DEFINED_glWindowPos3s typedef void (APIENTRYP GLEEPFNGLWINDOWPOS3SPROC) (GLshort x, GLshort y, GLshort z); GLEE_EXTERN GLEEPFNGLWINDOWPOS3SPROC GLeeFuncPtr_glWindowPos3s; #define glWindowPos3s GLeeFuncPtr_glWindowPos3s #endif #ifndef GLEE_H_DEFINED_glWindowPos3sv #define GLEE_H_DEFINED_glWindowPos3sv typedef void (APIENTRYP GLEEPFNGLWINDOWPOS3SVPROC) (const GLshort * v); GLEE_EXTERN GLEEPFNGLWINDOWPOS3SVPROC GLeeFuncPtr_glWindowPos3sv; #define glWindowPos3sv GLeeFuncPtr_glWindowPos3sv #endif #endif /* GL_VERSION_1_5 */ #ifndef GL_VERSION_1_5 #define GL_VERSION_1_5 1 #define __GLEE_GL_VERSION_1_5 1 /* Constants */ #define GL_BUFFER_SIZE 0x8764 #define GL_BUFFER_USAGE 0x8765 #define GL_QUERY_COUNTER_BITS 0x8864 #define GL_CURRENT_QUERY 0x8865 #define GL_QUERY_RESULT 0x8866 #define GL_QUERY_RESULT_AVAILABLE 0x8867 #define GL_ARRAY_BUFFER 0x8892 #define GL_ELEMENT_ARRAY_BUFFER 0x8893 #define GL_ARRAY_BUFFER_BINDING 0x8894 #define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895 #define GL_VERTEX_ARRAY_BUFFER_BINDING 0x8896 #define GL_NORMAL_ARRAY_BUFFER_BINDING 0x8897 #define GL_COLOR_ARRAY_BUFFER_BINDING 0x8898 #define GL_INDEX_ARRAY_BUFFER_BINDING 0x8899 #define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING 0x889A #define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING 0x889B #define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING 0x889C #define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING 0x889D #define GL_WEIGHT_ARRAY_BUFFER_BINDING 0x889E #define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F #define GL_READ_ONLY 0x88B8 #define GL_WRITE_ONLY 0x88B9 #define GL_READ_WRITE 0x88BA #define GL_BUFFER_ACCESS 0x88BB #define GL_BUFFER_MAPPED 0x88BC #define GL_BUFFER_MAP_POINTER 0x88BD #define GL_STREAM_DRAW 0x88E0 #define GL_STREAM_READ 0x88E1 #define GL_STREAM_COPY 0x88E2 #define GL_STATIC_DRAW 0x88E4 #define GL_STATIC_READ 0x88E5 #define GL_STATIC_COPY 0x88E6 #define GL_DYNAMIC_DRAW 0x88E8 #define GL_DYNAMIC_READ 0x88E9 #define GL_DYNAMIC_COPY 0x88EA #define GL_SAMPLES_PASSED 0x8914 #define GL_FOG_COORD_SRC GL_FOG_COORDINATE_SOURCE #define GL_FOG_COORD GL_FOG_COORDINATE #define GL_CURRENT_FOG_COORD GL_CURRENT_FOG_COORDINATE #define GL_FOG_COORD_ARRAY_TYPE GL_FOG_COORDINATE_ARRAY_TYPE #define GL_FOG_COORD_ARRAY_STRIDE GL_FOG_COORDINATE_ARRAY_STRIDE #define GL_FOG_COORD_ARRAY_POINTER GL_FOG_COORDINATE_ARRAY_POINTER #define GL_FOG_COORD_ARRAY GL_FOG_COORDINATE_ARRAY #define GL_FOG_COORD_ARRAY_BUFFER_BINDING GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING #define GL_SRC0_RGB GL_SOURCE0_RGB #define GL_SRC1_RGB GL_SOURCE1_RGB #define GL_SRC2_RGB GL_SOURCE2_RGB #define GL_SRC0_ALPHA GL_SOURCE0_ALPHA #define GL_SRC1_ALPHA GL_SOURCE1_ALPHA #define GL_SRC2_ALPHA GL_SOURCE2_ALPHA #ifndef GLEE_H_DEFINED_glGenQueries #define GLEE_H_DEFINED_glGenQueries typedef void (APIENTRYP GLEEPFNGLGENQUERIESPROC) (GLsizei n, GLuint * ids); GLEE_EXTERN GLEEPFNGLGENQUERIESPROC GLeeFuncPtr_glGenQueries; #define glGenQueries GLeeFuncPtr_glGenQueries #endif #ifndef GLEE_H_DEFINED_glDeleteQueries #define GLEE_H_DEFINED_glDeleteQueries typedef void (APIENTRYP GLEEPFNGLDELETEQUERIESPROC) (GLsizei n, const GLuint * ids); GLEE_EXTERN GLEEPFNGLDELETEQUERIESPROC GLeeFuncPtr_glDeleteQueries; #define glDeleteQueries GLeeFuncPtr_glDeleteQueries #endif #ifndef GLEE_H_DEFINED_glIsQuery #define GLEE_H_DEFINED_glIsQuery typedef GLboolean (APIENTRYP GLEEPFNGLISQUERYPROC) (GLuint id); GLEE_EXTERN GLEEPFNGLISQUERYPROC GLeeFuncPtr_glIsQuery; #define glIsQuery GLeeFuncPtr_glIsQuery #endif #ifndef GLEE_H_DEFINED_glBeginQuery #define GLEE_H_DEFINED_glBeginQuery typedef void (APIENTRYP GLEEPFNGLBEGINQUERYPROC) (GLenum target, GLuint id); GLEE_EXTERN GLEEPFNGLBEGINQUERYPROC GLeeFuncPtr_glBeginQuery; #define glBeginQuery GLeeFuncPtr_glBeginQuery #endif #ifndef GLEE_H_DEFINED_glEndQuery #define GLEE_H_DEFINED_glEndQuery typedef void (APIENTRYP GLEEPFNGLENDQUERYPROC) (GLenum target); GLEE_EXTERN GLEEPFNGLENDQUERYPROC GLeeFuncPtr_glEndQuery; #define glEndQuery GLeeFuncPtr_glEndQuery #endif #ifndef GLEE_H_DEFINED_glGetQueryiv #define GLEE_H_DEFINED_glGetQueryiv typedef void (APIENTRYP GLEEPFNGLGETQUERYIVPROC) (GLenum target, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETQUERYIVPROC GLeeFuncPtr_glGetQueryiv; #define glGetQueryiv GLeeFuncPtr_glGetQueryiv #endif #ifndef GLEE_H_DEFINED_glGetQueryObjectiv #define GLEE_H_DEFINED_glGetQueryObjectiv typedef void (APIENTRYP GLEEPFNGLGETQUERYOBJECTIVPROC) (GLuint id, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETQUERYOBJECTIVPROC GLeeFuncPtr_glGetQueryObjectiv; #define glGetQueryObjectiv GLeeFuncPtr_glGetQueryObjectiv #endif #ifndef GLEE_H_DEFINED_glGetQueryObjectuiv #define GLEE_H_DEFINED_glGetQueryObjectuiv typedef void (APIENTRYP GLEEPFNGLGETQUERYOBJECTUIVPROC) (GLuint id, GLenum pname, GLuint * params); GLEE_EXTERN GLEEPFNGLGETQUERYOBJECTUIVPROC GLeeFuncPtr_glGetQueryObjectuiv; #define glGetQueryObjectuiv GLeeFuncPtr_glGetQueryObjectuiv #endif #ifndef GLEE_H_DEFINED_glBindBuffer #define GLEE_H_DEFINED_glBindBuffer typedef void (APIENTRYP GLEEPFNGLBINDBUFFERPROC) (GLenum target, GLuint buffer); GLEE_EXTERN GLEEPFNGLBINDBUFFERPROC GLeeFuncPtr_glBindBuffer; #define glBindBuffer GLeeFuncPtr_glBindBuffer #endif #ifndef GLEE_H_DEFINED_glDeleteBuffers #define GLEE_H_DEFINED_glDeleteBuffers typedef void (APIENTRYP GLEEPFNGLDELETEBUFFERSPROC) (GLsizei n, const GLuint * buffers); GLEE_EXTERN GLEEPFNGLDELETEBUFFERSPROC GLeeFuncPtr_glDeleteBuffers; #define glDeleteBuffers GLeeFuncPtr_glDeleteBuffers #endif #ifndef GLEE_H_DEFINED_glGenBuffers #define GLEE_H_DEFINED_glGenBuffers typedef void (APIENTRYP GLEEPFNGLGENBUFFERSPROC) (GLsizei n, GLuint * buffers); GLEE_EXTERN GLEEPFNGLGENBUFFERSPROC GLeeFuncPtr_glGenBuffers; #define glGenBuffers GLeeFuncPtr_glGenBuffers #endif #ifndef GLEE_H_DEFINED_glIsBuffer #define GLEE_H_DEFINED_glIsBuffer typedef GLboolean (APIENTRYP GLEEPFNGLISBUFFERPROC) (GLuint buffer); GLEE_EXTERN GLEEPFNGLISBUFFERPROC GLeeFuncPtr_glIsBuffer; #define glIsBuffer GLeeFuncPtr_glIsBuffer #endif #ifndef GLEE_H_DEFINED_glBufferData #define GLEE_H_DEFINED_glBufferData typedef void (APIENTRYP GLEEPFNGLBUFFERDATAPROC) (GLenum target, GLsizeiptr size, const GLvoid * data, GLenum usage); GLEE_EXTERN GLEEPFNGLBUFFERDATAPROC GLeeFuncPtr_glBufferData; #define glBufferData GLeeFuncPtr_glBufferData #endif #ifndef GLEE_H_DEFINED_glBufferSubData #define GLEE_H_DEFINED_glBufferSubData typedef void (APIENTRYP GLEEPFNGLBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid * data); GLEE_EXTERN GLEEPFNGLBUFFERSUBDATAPROC GLeeFuncPtr_glBufferSubData; #define glBufferSubData GLeeFuncPtr_glBufferSubData #endif #ifndef GLEE_H_DEFINED_glGetBufferSubData #define GLEE_H_DEFINED_glGetBufferSubData typedef void (APIENTRYP GLEEPFNGLGETBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, GLvoid * data); GLEE_EXTERN GLEEPFNGLGETBUFFERSUBDATAPROC GLeeFuncPtr_glGetBufferSubData; #define glGetBufferSubData GLeeFuncPtr_glGetBufferSubData #endif #ifndef GLEE_H_DEFINED_glMapBuffer #define GLEE_H_DEFINED_glMapBuffer typedef GLvoid* (APIENTRYP GLEEPFNGLMAPBUFFERPROC) (GLenum target, GLenum access); GLEE_EXTERN GLEEPFNGLMAPBUFFERPROC GLeeFuncPtr_glMapBuffer; #define glMapBuffer GLeeFuncPtr_glMapBuffer #endif #ifndef GLEE_H_DEFINED_glUnmapBuffer #define GLEE_H_DEFINED_glUnmapBuffer typedef GLboolean (APIENTRYP GLEEPFNGLUNMAPBUFFERPROC) (GLenum target); GLEE_EXTERN GLEEPFNGLUNMAPBUFFERPROC GLeeFuncPtr_glUnmapBuffer; #define glUnmapBuffer GLeeFuncPtr_glUnmapBuffer #endif #ifndef GLEE_H_DEFINED_glGetBufferParameteriv #define GLEE_H_DEFINED_glGetBufferParameteriv typedef void (APIENTRYP GLEEPFNGLGETBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETBUFFERPARAMETERIVPROC GLeeFuncPtr_glGetBufferParameteriv; #define glGetBufferParameteriv GLeeFuncPtr_glGetBufferParameteriv #endif #ifndef GLEE_H_DEFINED_glGetBufferPointerv #define GLEE_H_DEFINED_glGetBufferPointerv typedef void (APIENTRYP GLEEPFNGLGETBUFFERPOINTERVPROC) (GLenum target, GLenum pname, GLvoid* * params); GLEE_EXTERN GLEEPFNGLGETBUFFERPOINTERVPROC GLeeFuncPtr_glGetBufferPointerv; #define glGetBufferPointerv GLeeFuncPtr_glGetBufferPointerv #endif #endif /* GL_VERSION_2_0 */ #ifndef GL_VERSION_2_0 #define GL_VERSION_2_0 1 #define __GLEE_GL_VERSION_2_0 1 /* Constants */ #define GL_BLEND_EQUATION_RGB GL_BLEND_EQUATION #define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622 #define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623 #define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624 #define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625 #define GL_CURRENT_VERTEX_ATTRIB 0x8626 #define GL_VERTEX_PROGRAM_POINT_SIZE 0x8642 #define GL_VERTEX_PROGRAM_TWO_SIDE 0x8643 #define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645 #define GL_STENCIL_BACK_FUNC 0x8800 #define GL_STENCIL_BACK_FAIL 0x8801 #define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802 #define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803 #define GL_MAX_DRAW_BUFFERS 0x8824 #define GL_DRAW_BUFFER0 0x8825 #define GL_DRAW_BUFFER1 0x8826 #define GL_DRAW_BUFFER2 0x8827 #define GL_DRAW_BUFFER3 0x8828 #define GL_DRAW_BUFFER4 0x8829 #define GL_DRAW_BUFFER5 0x882A #define GL_DRAW_BUFFER6 0x882B #define GL_DRAW_BUFFER7 0x882C #define GL_DRAW_BUFFER8 0x882D #define GL_DRAW_BUFFER9 0x882E #define GL_DRAW_BUFFER10 0x882F #define GL_DRAW_BUFFER11 0x8830 #define GL_DRAW_BUFFER12 0x8831 #define GL_DRAW_BUFFER13 0x8832 #define GL_DRAW_BUFFER14 0x8833 #define GL_DRAW_BUFFER15 0x8834 #define GL_BLEND_EQUATION_ALPHA 0x883D #define GL_POINT_SPRITE 0x8861 #define GL_COORD_REPLACE 0x8862 #define GL_MAX_VERTEX_ATTRIBS 0x8869 #define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A #define GL_MAX_TEXTURE_COORDS 0x8871 #define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872 #define GL_FRAGMENT_SHADER 0x8B30 #define GL_VERTEX_SHADER 0x8B31 #define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8B49 #define GL_MAX_VERTEX_UNIFORM_COMPONENTS 0x8B4A #define GL_MAX_VARYING_FLOATS 0x8B4B #define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C #define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D #define GL_SHADER_TYPE 0x8B4F #define GL_FLOAT_VEC2 0x8B50 #define GL_FLOAT_VEC3 0x8B51 #define GL_FLOAT_VEC4 0x8B52 #define GL_INT_VEC2 0x8B53 #define GL_INT_VEC3 0x8B54 #define GL_INT_VEC4 0x8B55 #define GL_BOOL 0x8B56 #define GL_BOOL_VEC2 0x8B57 #define GL_BOOL_VEC3 0x8B58 #define GL_BOOL_VEC4 0x8B59 #define GL_FLOAT_MAT2 0x8B5A #define GL_FLOAT_MAT3 0x8B5B #define GL_FLOAT_MAT4 0x8B5C #define GL_SAMPLER_1D 0x8B5D #define GL_SAMPLER_2D 0x8B5E #define GL_SAMPLER_3D 0x8B5F #define GL_SAMPLER_CUBE 0x8B60 #define GL_SAMPLER_1D_SHADOW 0x8B61 #define GL_SAMPLER_2D_SHADOW 0x8B62 #define GL_DELETE_STATUS 0x8B80 #define GL_COMPILE_STATUS 0x8B81 #define GL_LINK_STATUS 0x8B82 #define GL_VALIDATE_STATUS 0x8B83 #define GL_INFO_LOG_LENGTH 0x8B84 #define GL_ATTACHED_SHADERS 0x8B85 #define GL_ACTIVE_UNIFORMS 0x8B86 #define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87 #define GL_SHADER_SOURCE_LENGTH 0x8B88 #define GL_ACTIVE_ATTRIBUTES 0x8B89 #define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A #define GL_FRAGMENT_SHADER_DERIVATIVE_HINT 0x8B8B #define GL_SHADING_LANGUAGE_VERSION 0x8B8C #define GL_CURRENT_PROGRAM 0x8B8D #define GL_POINT_SPRITE_COORD_ORIGIN 0x8CA0 #define GL_LOWER_LEFT 0x8CA1 #define GL_UPPER_LEFT 0x8CA2 #define GL_STENCIL_BACK_REF 0x8CA3 #define GL_STENCIL_BACK_VALUE_MASK 0x8CA4 #define GL_STENCIL_BACK_WRITEMASK 0x8CA5 #ifndef GLEE_H_DEFINED_glBlendEquationSeparate #define GLEE_H_DEFINED_glBlendEquationSeparate typedef void (APIENTRYP GLEEPFNGLBLENDEQUATIONSEPARATEPROC) (GLenum modeRGB, GLenum modeAlpha); GLEE_EXTERN GLEEPFNGLBLENDEQUATIONSEPARATEPROC GLeeFuncPtr_glBlendEquationSeparate; #define glBlendEquationSeparate GLeeFuncPtr_glBlendEquationSeparate #endif #ifndef GLEE_H_DEFINED_glDrawBuffers #define GLEE_H_DEFINED_glDrawBuffers typedef void (APIENTRYP GLEEPFNGLDRAWBUFFERSPROC) (GLsizei n, const GLenum * bufs); GLEE_EXTERN GLEEPFNGLDRAWBUFFERSPROC GLeeFuncPtr_glDrawBuffers; #define glDrawBuffers GLeeFuncPtr_glDrawBuffers #endif #ifndef GLEE_H_DEFINED_glStencilOpSeparate #define GLEE_H_DEFINED_glStencilOpSeparate typedef void (APIENTRYP GLEEPFNGLSTENCILOPSEPARATEPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); GLEE_EXTERN GLEEPFNGLSTENCILOPSEPARATEPROC GLeeFuncPtr_glStencilOpSeparate; #define glStencilOpSeparate GLeeFuncPtr_glStencilOpSeparate #endif #ifndef GLEE_H_DEFINED_glStencilFuncSeparate #define GLEE_H_DEFINED_glStencilFuncSeparate typedef void (APIENTRYP GLEEPFNGLSTENCILFUNCSEPARATEPROC) (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); GLEE_EXTERN GLEEPFNGLSTENCILFUNCSEPARATEPROC GLeeFuncPtr_glStencilFuncSeparate; #define glStencilFuncSeparate GLeeFuncPtr_glStencilFuncSeparate #endif #ifndef GLEE_H_DEFINED_glStencilMaskSeparate #define GLEE_H_DEFINED_glStencilMaskSeparate typedef void (APIENTRYP GLEEPFNGLSTENCILMASKSEPARATEPROC) (GLenum face, GLuint mask); GLEE_EXTERN GLEEPFNGLSTENCILMASKSEPARATEPROC GLeeFuncPtr_glStencilMaskSeparate; #define glStencilMaskSeparate GLeeFuncPtr_glStencilMaskSeparate #endif #ifndef GLEE_H_DEFINED_glAttachShader #define GLEE_H_DEFINED_glAttachShader typedef void (APIENTRYP GLEEPFNGLATTACHSHADERPROC) (GLuint program, GLuint shader); GLEE_EXTERN GLEEPFNGLATTACHSHADERPROC GLeeFuncPtr_glAttachShader; #define glAttachShader GLeeFuncPtr_glAttachShader #endif #ifndef GLEE_H_DEFINED_glBindAttribLocation #define GLEE_H_DEFINED_glBindAttribLocation typedef void (APIENTRYP GLEEPFNGLBINDATTRIBLOCATIONPROC) (GLuint program, GLuint index, const GLchar * name); GLEE_EXTERN GLEEPFNGLBINDATTRIBLOCATIONPROC GLeeFuncPtr_glBindAttribLocation; #define glBindAttribLocation GLeeFuncPtr_glBindAttribLocation #endif #ifndef GLEE_H_DEFINED_glCompileShader #define GLEE_H_DEFINED_glCompileShader typedef void (APIENTRYP GLEEPFNGLCOMPILESHADERPROC) (GLuint shader); GLEE_EXTERN GLEEPFNGLCOMPILESHADERPROC GLeeFuncPtr_glCompileShader; #define glCompileShader GLeeFuncPtr_glCompileShader #endif #ifndef GLEE_H_DEFINED_glCreateProgram #define GLEE_H_DEFINED_glCreateProgram typedef GLuint (APIENTRYP GLEEPFNGLCREATEPROGRAMPROC) (); GLEE_EXTERN GLEEPFNGLCREATEPROGRAMPROC GLeeFuncPtr_glCreateProgram; #define glCreateProgram GLeeFuncPtr_glCreateProgram #endif #ifndef GLEE_H_DEFINED_glCreateShader #define GLEE_H_DEFINED_glCreateShader typedef GLuint (APIENTRYP GLEEPFNGLCREATESHADERPROC) (GLenum type); GLEE_EXTERN GLEEPFNGLCREATESHADERPROC GLeeFuncPtr_glCreateShader; #define glCreateShader GLeeFuncPtr_glCreateShader #endif #ifndef GLEE_H_DEFINED_glDeleteProgram #define GLEE_H_DEFINED_glDeleteProgram typedef void (APIENTRYP GLEEPFNGLDELETEPROGRAMPROC) (GLuint program); GLEE_EXTERN GLEEPFNGLDELETEPROGRAMPROC GLeeFuncPtr_glDeleteProgram; #define glDeleteProgram GLeeFuncPtr_glDeleteProgram #endif #ifndef GLEE_H_DEFINED_glDeleteShader #define GLEE_H_DEFINED_glDeleteShader typedef void (APIENTRYP GLEEPFNGLDELETESHADERPROC) (GLuint shader); GLEE_EXTERN GLEEPFNGLDELETESHADERPROC GLeeFuncPtr_glDeleteShader; #define glDeleteShader GLeeFuncPtr_glDeleteShader #endif #ifndef GLEE_H_DEFINED_glDetachShader #define GLEE_H_DEFINED_glDetachShader typedef void (APIENTRYP GLEEPFNGLDETACHSHADERPROC) (GLuint program, GLuint shader); GLEE_EXTERN GLEEPFNGLDETACHSHADERPROC GLeeFuncPtr_glDetachShader; #define glDetachShader GLeeFuncPtr_glDetachShader #endif #ifndef GLEE_H_DEFINED_glDisableVertexAttribArray #define GLEE_H_DEFINED_glDisableVertexAttribArray typedef void (APIENTRYP GLEEPFNGLDISABLEVERTEXATTRIBARRAYPROC) (GLuint index); GLEE_EXTERN GLEEPFNGLDISABLEVERTEXATTRIBARRAYPROC GLeeFuncPtr_glDisableVertexAttribArray; #define glDisableVertexAttribArray GLeeFuncPtr_glDisableVertexAttribArray #endif #ifndef GLEE_H_DEFINED_glEnableVertexAttribArray #define GLEE_H_DEFINED_glEnableVertexAttribArray typedef void (APIENTRYP GLEEPFNGLENABLEVERTEXATTRIBARRAYPROC) (GLuint index); GLEE_EXTERN GLEEPFNGLENABLEVERTEXATTRIBARRAYPROC GLeeFuncPtr_glEnableVertexAttribArray; #define glEnableVertexAttribArray GLeeFuncPtr_glEnableVertexAttribArray #endif #ifndef GLEE_H_DEFINED_glGetActiveAttrib #define GLEE_H_DEFINED_glGetActiveAttrib typedef void (APIENTRYP GLEEPFNGLGETACTIVEATTRIBPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLint * size, GLenum * type, GLchar * name); GLEE_EXTERN GLEEPFNGLGETACTIVEATTRIBPROC GLeeFuncPtr_glGetActiveAttrib; #define glGetActiveAttrib GLeeFuncPtr_glGetActiveAttrib #endif #ifndef GLEE_H_DEFINED_glGetActiveUniform #define GLEE_H_DEFINED_glGetActiveUniform typedef void (APIENTRYP GLEEPFNGLGETACTIVEUNIFORMPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLint * size, GLenum * type, GLchar * name); GLEE_EXTERN GLEEPFNGLGETACTIVEUNIFORMPROC GLeeFuncPtr_glGetActiveUniform; #define glGetActiveUniform GLeeFuncPtr_glGetActiveUniform #endif #ifndef GLEE_H_DEFINED_glGetAttachedShaders #define GLEE_H_DEFINED_glGetAttachedShaders typedef void (APIENTRYP GLEEPFNGLGETATTACHEDSHADERSPROC) (GLuint program, GLsizei maxCount, GLsizei * count, GLuint * obj); GLEE_EXTERN GLEEPFNGLGETATTACHEDSHADERSPROC GLeeFuncPtr_glGetAttachedShaders; #define glGetAttachedShaders GLeeFuncPtr_glGetAttachedShaders #endif #ifndef GLEE_H_DEFINED_glGetAttribLocation #define GLEE_H_DEFINED_glGetAttribLocation typedef GLint (APIENTRYP GLEEPFNGLGETATTRIBLOCATIONPROC) (GLuint program, const GLchar * name); GLEE_EXTERN GLEEPFNGLGETATTRIBLOCATIONPROC GLeeFuncPtr_glGetAttribLocation; #define glGetAttribLocation GLeeFuncPtr_glGetAttribLocation #endif #ifndef GLEE_H_DEFINED_glGetProgramiv #define GLEE_H_DEFINED_glGetProgramiv typedef void (APIENTRYP GLEEPFNGLGETPROGRAMIVPROC) (GLuint program, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETPROGRAMIVPROC GLeeFuncPtr_glGetProgramiv; #define glGetProgramiv GLeeFuncPtr_glGetProgramiv #endif #ifndef GLEE_H_DEFINED_glGetProgramInfoLog #define GLEE_H_DEFINED_glGetProgramInfoLog typedef void (APIENTRYP GLEEPFNGLGETPROGRAMINFOLOGPROC) (GLuint program, GLsizei bufSize, GLsizei * length, GLchar * infoLog); GLEE_EXTERN GLEEPFNGLGETPROGRAMINFOLOGPROC GLeeFuncPtr_glGetProgramInfoLog; #define glGetProgramInfoLog GLeeFuncPtr_glGetProgramInfoLog #endif #ifndef GLEE_H_DEFINED_glGetShaderiv #define GLEE_H_DEFINED_glGetShaderiv typedef void (APIENTRYP GLEEPFNGLGETSHADERIVPROC) (GLuint shader, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETSHADERIVPROC GLeeFuncPtr_glGetShaderiv; #define glGetShaderiv GLeeFuncPtr_glGetShaderiv #endif #ifndef GLEE_H_DEFINED_glGetShaderInfoLog #define GLEE_H_DEFINED_glGetShaderInfoLog typedef void (APIENTRYP GLEEPFNGLGETSHADERINFOLOGPROC) (GLuint shader, GLsizei bufSize, GLsizei * length, GLchar * infoLog); GLEE_EXTERN GLEEPFNGLGETSHADERINFOLOGPROC GLeeFuncPtr_glGetShaderInfoLog; #define glGetShaderInfoLog GLeeFuncPtr_glGetShaderInfoLog #endif #ifndef GLEE_H_DEFINED_glGetShaderSource #define GLEE_H_DEFINED_glGetShaderSource typedef void (APIENTRYP GLEEPFNGLGETSHADERSOURCEPROC) (GLuint shader, GLsizei bufSize, GLsizei * length, GLchar * source); GLEE_EXTERN GLEEPFNGLGETSHADERSOURCEPROC GLeeFuncPtr_glGetShaderSource; #define glGetShaderSource GLeeFuncPtr_glGetShaderSource #endif #ifndef GLEE_H_DEFINED_glGetUniformLocation #define GLEE_H_DEFINED_glGetUniformLocation typedef GLint (APIENTRYP GLEEPFNGLGETUNIFORMLOCATIONPROC) (GLuint program, const GLchar * name); GLEE_EXTERN GLEEPFNGLGETUNIFORMLOCATIONPROC GLeeFuncPtr_glGetUniformLocation; #define glGetUniformLocation GLeeFuncPtr_glGetUniformLocation #endif #ifndef GLEE_H_DEFINED_glGetUniformfv #define GLEE_H_DEFINED_glGetUniformfv typedef void (APIENTRYP GLEEPFNGLGETUNIFORMFVPROC) (GLuint program, GLint location, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETUNIFORMFVPROC GLeeFuncPtr_glGetUniformfv; #define glGetUniformfv GLeeFuncPtr_glGetUniformfv #endif #ifndef GLEE_H_DEFINED_glGetUniformiv #define GLEE_H_DEFINED_glGetUniformiv typedef void (APIENTRYP GLEEPFNGLGETUNIFORMIVPROC) (GLuint program, GLint location, GLint * params); GLEE_EXTERN GLEEPFNGLGETUNIFORMIVPROC GLeeFuncPtr_glGetUniformiv; #define glGetUniformiv GLeeFuncPtr_glGetUniformiv #endif #ifndef GLEE_H_DEFINED_glGetVertexAttribdv #define GLEE_H_DEFINED_glGetVertexAttribdv typedef void (APIENTRYP GLEEPFNGLGETVERTEXATTRIBDVPROC) (GLuint index, GLenum pname, GLdouble * params); GLEE_EXTERN GLEEPFNGLGETVERTEXATTRIBDVPROC GLeeFuncPtr_glGetVertexAttribdv; #define glGetVertexAttribdv GLeeFuncPtr_glGetVertexAttribdv #endif #ifndef GLEE_H_DEFINED_glGetVertexAttribfv #define GLEE_H_DEFINED_glGetVertexAttribfv typedef void (APIENTRYP GLEEPFNGLGETVERTEXATTRIBFVPROC) (GLuint index, GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETVERTEXATTRIBFVPROC GLeeFuncPtr_glGetVertexAttribfv; #define glGetVertexAttribfv GLeeFuncPtr_glGetVertexAttribfv #endif #ifndef GLEE_H_DEFINED_glGetVertexAttribiv #define GLEE_H_DEFINED_glGetVertexAttribiv typedef void (APIENTRYP GLEEPFNGLGETVERTEXATTRIBIVPROC) (GLuint index, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETVERTEXATTRIBIVPROC GLeeFuncPtr_glGetVertexAttribiv; #define glGetVertexAttribiv GLeeFuncPtr_glGetVertexAttribiv #endif #ifndef GLEE_H_DEFINED_glGetVertexAttribPointerv #define GLEE_H_DEFINED_glGetVertexAttribPointerv typedef void (APIENTRYP GLEEPFNGLGETVERTEXATTRIBPOINTERVPROC) (GLuint index, GLenum pname, GLvoid* * pointer); GLEE_EXTERN GLEEPFNGLGETVERTEXATTRIBPOINTERVPROC GLeeFuncPtr_glGetVertexAttribPointerv; #define glGetVertexAttribPointerv GLeeFuncPtr_glGetVertexAttribPointerv #endif #ifndef GLEE_H_DEFINED_glIsProgram #define GLEE_H_DEFINED_glIsProgram typedef GLboolean (APIENTRYP GLEEPFNGLISPROGRAMPROC) (GLuint program); GLEE_EXTERN GLEEPFNGLISPROGRAMPROC GLeeFuncPtr_glIsProgram; #define glIsProgram GLeeFuncPtr_glIsProgram #endif #ifndef GLEE_H_DEFINED_glIsShader #define GLEE_H_DEFINED_glIsShader typedef GLboolean (APIENTRYP GLEEPFNGLISSHADERPROC) (GLuint shader); GLEE_EXTERN GLEEPFNGLISSHADERPROC GLeeFuncPtr_glIsShader; #define glIsShader GLeeFuncPtr_glIsShader #endif #ifndef GLEE_H_DEFINED_glLinkProgram #define GLEE_H_DEFINED_glLinkProgram typedef void (APIENTRYP GLEEPFNGLLINKPROGRAMPROC) (GLuint program); GLEE_EXTERN GLEEPFNGLLINKPROGRAMPROC GLeeFuncPtr_glLinkProgram; #define glLinkProgram GLeeFuncPtr_glLinkProgram #endif #ifndef GLEE_H_DEFINED_glShaderSource #define GLEE_H_DEFINED_glShaderSource typedef void (APIENTRYP GLEEPFNGLSHADERSOURCEPROC) (GLuint shader, GLsizei count, const GLchar* * string, const GLint * length); GLEE_EXTERN GLEEPFNGLSHADERSOURCEPROC GLeeFuncPtr_glShaderSource; #define glShaderSource GLeeFuncPtr_glShaderSource #endif #ifndef GLEE_H_DEFINED_glUseProgram #define GLEE_H_DEFINED_glUseProgram typedef void (APIENTRYP GLEEPFNGLUSEPROGRAMPROC) (GLuint program); GLEE_EXTERN GLEEPFNGLUSEPROGRAMPROC GLeeFuncPtr_glUseProgram; #define glUseProgram GLeeFuncPtr_glUseProgram #endif #ifndef GLEE_H_DEFINED_glUniform1f #define GLEE_H_DEFINED_glUniform1f typedef void (APIENTRYP GLEEPFNGLUNIFORM1FPROC) (GLint location, GLfloat v0); GLEE_EXTERN GLEEPFNGLUNIFORM1FPROC GLeeFuncPtr_glUniform1f; #define glUniform1f GLeeFuncPtr_glUniform1f #endif #ifndef GLEE_H_DEFINED_glUniform2f #define GLEE_H_DEFINED_glUniform2f typedef void (APIENTRYP GLEEPFNGLUNIFORM2FPROC) (GLint location, GLfloat v0, GLfloat v1); GLEE_EXTERN GLEEPFNGLUNIFORM2FPROC GLeeFuncPtr_glUniform2f; #define glUniform2f GLeeFuncPtr_glUniform2f #endif #ifndef GLEE_H_DEFINED_glUniform3f #define GLEE_H_DEFINED_glUniform3f typedef void (APIENTRYP GLEEPFNGLUNIFORM3FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); GLEE_EXTERN GLEEPFNGLUNIFORM3FPROC GLeeFuncPtr_glUniform3f; #define glUniform3f GLeeFuncPtr_glUniform3f #endif #ifndef GLEE_H_DEFINED_glUniform4f #define GLEE_H_DEFINED_glUniform4f typedef void (APIENTRYP GLEEPFNGLUNIFORM4FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); GLEE_EXTERN GLEEPFNGLUNIFORM4FPROC GLeeFuncPtr_glUniform4f; #define glUniform4f GLeeFuncPtr_glUniform4f #endif #ifndef GLEE_H_DEFINED_glUniform1i #define GLEE_H_DEFINED_glUniform1i typedef void (APIENTRYP GLEEPFNGLUNIFORM1IPROC) (GLint location, GLint v0); GLEE_EXTERN GLEEPFNGLUNIFORM1IPROC GLeeFuncPtr_glUniform1i; #define glUniform1i GLeeFuncPtr_glUniform1i #endif #ifndef GLEE_H_DEFINED_glUniform2i #define GLEE_H_DEFINED_glUniform2i typedef void (APIENTRYP GLEEPFNGLUNIFORM2IPROC) (GLint location, GLint v0, GLint v1); GLEE_EXTERN GLEEPFNGLUNIFORM2IPROC GLeeFuncPtr_glUniform2i; #define glUniform2i GLeeFuncPtr_glUniform2i #endif #ifndef GLEE_H_DEFINED_glUniform3i #define GLEE_H_DEFINED_glUniform3i typedef void (APIENTRYP GLEEPFNGLUNIFORM3IPROC) (GLint location, GLint v0, GLint v1, GLint v2); GLEE_EXTERN GLEEPFNGLUNIFORM3IPROC GLeeFuncPtr_glUniform3i; #define glUniform3i GLeeFuncPtr_glUniform3i #endif #ifndef GLEE_H_DEFINED_glUniform4i #define GLEE_H_DEFINED_glUniform4i typedef void (APIENTRYP GLEEPFNGLUNIFORM4IPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); GLEE_EXTERN GLEEPFNGLUNIFORM4IPROC GLeeFuncPtr_glUniform4i; #define glUniform4i GLeeFuncPtr_glUniform4i #endif #ifndef GLEE_H_DEFINED_glUniform1fv #define GLEE_H_DEFINED_glUniform1fv typedef void (APIENTRYP GLEEPFNGLUNIFORM1FVPROC) (GLint location, GLsizei count, const GLfloat * value); GLEE_EXTERN GLEEPFNGLUNIFORM1FVPROC GLeeFuncPtr_glUniform1fv; #define glUniform1fv GLeeFuncPtr_glUniform1fv #endif #ifndef GLEE_H_DEFINED_glUniform2fv #define GLEE_H_DEFINED_glUniform2fv typedef void (APIENTRYP GLEEPFNGLUNIFORM2FVPROC) (GLint location, GLsizei count, const GLfloat * value); GLEE_EXTERN GLEEPFNGLUNIFORM2FVPROC GLeeFuncPtr_glUniform2fv; #define glUniform2fv GLeeFuncPtr_glUniform2fv #endif #ifndef GLEE_H_DEFINED_glUniform3fv #define GLEE_H_DEFINED_glUniform3fv typedef void (APIENTRYP GLEEPFNGLUNIFORM3FVPROC) (GLint location, GLsizei count, const GLfloat * value); GLEE_EXTERN GLEEPFNGLUNIFORM3FVPROC GLeeFuncPtr_glUniform3fv; #define glUniform3fv GLeeFuncPtr_glUniform3fv #endif #ifndef GLEE_H_DEFINED_glUniform4fv #define GLEE_H_DEFINED_glUniform4fv typedef void (APIENTRYP GLEEPFNGLUNIFORM4FVPROC) (GLint location, GLsizei count, const GLfloat * value); GLEE_EXTERN GLEEPFNGLUNIFORM4FVPROC GLeeFuncPtr_glUniform4fv; #define glUniform4fv GLeeFuncPtr_glUniform4fv #endif #ifndef GLEE_H_DEFINED_glUniform1iv #define GLEE_H_DEFINED_glUniform1iv typedef void (APIENTRYP GLEEPFNGLUNIFORM1IVPROC) (GLint location, GLsizei count, const GLint * value); GLEE_EXTERN GLEEPFNGLUNIFORM1IVPROC GLeeFuncPtr_glUniform1iv; #define glUniform1iv GLeeFuncPtr_glUniform1iv #endif #ifndef GLEE_H_DEFINED_glUniform2iv #define GLEE_H_DEFINED_glUniform2iv typedef void (APIENTRYP GLEEPFNGLUNIFORM2IVPROC) (GLint location, GLsizei count, const GLint * value); GLEE_EXTERN GLEEPFNGLUNIFORM2IVPROC GLeeFuncPtr_glUniform2iv; #define glUniform2iv GLeeFuncPtr_glUniform2iv #endif #ifndef GLEE_H_DEFINED_glUniform3iv #define GLEE_H_DEFINED_glUniform3iv typedef void (APIENTRYP GLEEPFNGLUNIFORM3IVPROC) (GLint location, GLsizei count, const GLint * value); GLEE_EXTERN GLEEPFNGLUNIFORM3IVPROC GLeeFuncPtr_glUniform3iv; #define glUniform3iv GLeeFuncPtr_glUniform3iv #endif #ifndef GLEE_H_DEFINED_glUniform4iv #define GLEE_H_DEFINED_glUniform4iv typedef void (APIENTRYP GLEEPFNGLUNIFORM4IVPROC) (GLint location, GLsizei count, const GLint * value); GLEE_EXTERN GLEEPFNGLUNIFORM4IVPROC GLeeFuncPtr_glUniform4iv; #define glUniform4iv GLeeFuncPtr_glUniform4iv #endif #ifndef GLEE_H_DEFINED_glUniformMatrix2fv #define GLEE_H_DEFINED_glUniformMatrix2fv typedef void (APIENTRYP GLEEPFNGLUNIFORMMATRIX2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); GLEE_EXTERN GLEEPFNGLUNIFORMMATRIX2FVPROC GLeeFuncPtr_glUniformMatrix2fv; #define glUniformMatrix2fv GLeeFuncPtr_glUniformMatrix2fv #endif #ifndef GLEE_H_DEFINED_glUniformMatrix3fv #define GLEE_H_DEFINED_glUniformMatrix3fv typedef void (APIENTRYP GLEEPFNGLUNIFORMMATRIX3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); GLEE_EXTERN GLEEPFNGLUNIFORMMATRIX3FVPROC GLeeFuncPtr_glUniformMatrix3fv; #define glUniformMatrix3fv GLeeFuncPtr_glUniformMatrix3fv #endif #ifndef GLEE_H_DEFINED_glUniformMatrix4fv #define GLEE_H_DEFINED_glUniformMatrix4fv typedef void (APIENTRYP GLEEPFNGLUNIFORMMATRIX4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); GLEE_EXTERN GLEEPFNGLUNIFORMMATRIX4FVPROC GLeeFuncPtr_glUniformMatrix4fv; #define glUniformMatrix4fv GLeeFuncPtr_glUniformMatrix4fv #endif #ifndef GLEE_H_DEFINED_glValidateProgram #define GLEE_H_DEFINED_glValidateProgram typedef void (APIENTRYP GLEEPFNGLVALIDATEPROGRAMPROC) (GLuint program); GLEE_EXTERN GLEEPFNGLVALIDATEPROGRAMPROC GLeeFuncPtr_glValidateProgram; #define glValidateProgram GLeeFuncPtr_glValidateProgram #endif #ifndef GLEE_H_DEFINED_glVertexAttrib1d #define GLEE_H_DEFINED_glVertexAttrib1d typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB1DPROC) (GLuint index, GLdouble x); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB1DPROC GLeeFuncPtr_glVertexAttrib1d; #define glVertexAttrib1d GLeeFuncPtr_glVertexAttrib1d #endif #ifndef GLEE_H_DEFINED_glVertexAttrib1dv #define GLEE_H_DEFINED_glVertexAttrib1dv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB1DVPROC) (GLuint index, const GLdouble * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB1DVPROC GLeeFuncPtr_glVertexAttrib1dv; #define glVertexAttrib1dv GLeeFuncPtr_glVertexAttrib1dv #endif #ifndef GLEE_H_DEFINED_glVertexAttrib1f #define GLEE_H_DEFINED_glVertexAttrib1f typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB1FPROC) (GLuint index, GLfloat x); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB1FPROC GLeeFuncPtr_glVertexAttrib1f; #define glVertexAttrib1f GLeeFuncPtr_glVertexAttrib1f #endif #ifndef GLEE_H_DEFINED_glVertexAttrib1fv #define GLEE_H_DEFINED_glVertexAttrib1fv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB1FVPROC) (GLuint index, const GLfloat * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB1FVPROC GLeeFuncPtr_glVertexAttrib1fv; #define glVertexAttrib1fv GLeeFuncPtr_glVertexAttrib1fv #endif #ifndef GLEE_H_DEFINED_glVertexAttrib1s #define GLEE_H_DEFINED_glVertexAttrib1s typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB1SPROC) (GLuint index, GLshort x); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB1SPROC GLeeFuncPtr_glVertexAttrib1s; #define glVertexAttrib1s GLeeFuncPtr_glVertexAttrib1s #endif #ifndef GLEE_H_DEFINED_glVertexAttrib1sv #define GLEE_H_DEFINED_glVertexAttrib1sv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB1SVPROC) (GLuint index, const GLshort * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB1SVPROC GLeeFuncPtr_glVertexAttrib1sv; #define glVertexAttrib1sv GLeeFuncPtr_glVertexAttrib1sv #endif #ifndef GLEE_H_DEFINED_glVertexAttrib2d #define GLEE_H_DEFINED_glVertexAttrib2d typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB2DPROC) (GLuint index, GLdouble x, GLdouble y); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB2DPROC GLeeFuncPtr_glVertexAttrib2d; #define glVertexAttrib2d GLeeFuncPtr_glVertexAttrib2d #endif #ifndef GLEE_H_DEFINED_glVertexAttrib2dv #define GLEE_H_DEFINED_glVertexAttrib2dv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB2DVPROC) (GLuint index, const GLdouble * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB2DVPROC GLeeFuncPtr_glVertexAttrib2dv; #define glVertexAttrib2dv GLeeFuncPtr_glVertexAttrib2dv #endif #ifndef GLEE_H_DEFINED_glVertexAttrib2f #define GLEE_H_DEFINED_glVertexAttrib2f typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB2FPROC) (GLuint index, GLfloat x, GLfloat y); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB2FPROC GLeeFuncPtr_glVertexAttrib2f; #define glVertexAttrib2f GLeeFuncPtr_glVertexAttrib2f #endif #ifndef GLEE_H_DEFINED_glVertexAttrib2fv #define GLEE_H_DEFINED_glVertexAttrib2fv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB2FVPROC) (GLuint index, const GLfloat * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB2FVPROC GLeeFuncPtr_glVertexAttrib2fv; #define glVertexAttrib2fv GLeeFuncPtr_glVertexAttrib2fv #endif #ifndef GLEE_H_DEFINED_glVertexAttrib2s #define GLEE_H_DEFINED_glVertexAttrib2s typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB2SPROC) (GLuint index, GLshort x, GLshort y); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB2SPROC GLeeFuncPtr_glVertexAttrib2s; #define glVertexAttrib2s GLeeFuncPtr_glVertexAttrib2s #endif #ifndef GLEE_H_DEFINED_glVertexAttrib2sv #define GLEE_H_DEFINED_glVertexAttrib2sv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB2SVPROC) (GLuint index, const GLshort * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB2SVPROC GLeeFuncPtr_glVertexAttrib2sv; #define glVertexAttrib2sv GLeeFuncPtr_glVertexAttrib2sv #endif #ifndef GLEE_H_DEFINED_glVertexAttrib3d #define GLEE_H_DEFINED_glVertexAttrib3d typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB3DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB3DPROC GLeeFuncPtr_glVertexAttrib3d; #define glVertexAttrib3d GLeeFuncPtr_glVertexAttrib3d #endif #ifndef GLEE_H_DEFINED_glVertexAttrib3dv #define GLEE_H_DEFINED_glVertexAttrib3dv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB3DVPROC) (GLuint index, const GLdouble * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB3DVPROC GLeeFuncPtr_glVertexAttrib3dv; #define glVertexAttrib3dv GLeeFuncPtr_glVertexAttrib3dv #endif #ifndef GLEE_H_DEFINED_glVertexAttrib3f #define GLEE_H_DEFINED_glVertexAttrib3f typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB3FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB3FPROC GLeeFuncPtr_glVertexAttrib3f; #define glVertexAttrib3f GLeeFuncPtr_glVertexAttrib3f #endif #ifndef GLEE_H_DEFINED_glVertexAttrib3fv #define GLEE_H_DEFINED_glVertexAttrib3fv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB3FVPROC) (GLuint index, const GLfloat * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB3FVPROC GLeeFuncPtr_glVertexAttrib3fv; #define glVertexAttrib3fv GLeeFuncPtr_glVertexAttrib3fv #endif #ifndef GLEE_H_DEFINED_glVertexAttrib3s #define GLEE_H_DEFINED_glVertexAttrib3s typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB3SPROC) (GLuint index, GLshort x, GLshort y, GLshort z); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB3SPROC GLeeFuncPtr_glVertexAttrib3s; #define glVertexAttrib3s GLeeFuncPtr_glVertexAttrib3s #endif #ifndef GLEE_H_DEFINED_glVertexAttrib3sv #define GLEE_H_DEFINED_glVertexAttrib3sv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB3SVPROC) (GLuint index, const GLshort * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB3SVPROC GLeeFuncPtr_glVertexAttrib3sv; #define glVertexAttrib3sv GLeeFuncPtr_glVertexAttrib3sv #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4Nbv #define GLEE_H_DEFINED_glVertexAttrib4Nbv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4NBVPROC) (GLuint index, const GLbyte * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4NBVPROC GLeeFuncPtr_glVertexAttrib4Nbv; #define glVertexAttrib4Nbv GLeeFuncPtr_glVertexAttrib4Nbv #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4Niv #define GLEE_H_DEFINED_glVertexAttrib4Niv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4NIVPROC) (GLuint index, const GLint * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4NIVPROC GLeeFuncPtr_glVertexAttrib4Niv; #define glVertexAttrib4Niv GLeeFuncPtr_glVertexAttrib4Niv #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4Nsv #define GLEE_H_DEFINED_glVertexAttrib4Nsv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4NSVPROC) (GLuint index, const GLshort * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4NSVPROC GLeeFuncPtr_glVertexAttrib4Nsv; #define glVertexAttrib4Nsv GLeeFuncPtr_glVertexAttrib4Nsv #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4Nub #define GLEE_H_DEFINED_glVertexAttrib4Nub typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4NUBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4NUBPROC GLeeFuncPtr_glVertexAttrib4Nub; #define glVertexAttrib4Nub GLeeFuncPtr_glVertexAttrib4Nub #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4Nubv #define GLEE_H_DEFINED_glVertexAttrib4Nubv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4NUBVPROC) (GLuint index, const GLubyte * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4NUBVPROC GLeeFuncPtr_glVertexAttrib4Nubv; #define glVertexAttrib4Nubv GLeeFuncPtr_glVertexAttrib4Nubv #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4Nuiv #define GLEE_H_DEFINED_glVertexAttrib4Nuiv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4NUIVPROC) (GLuint index, const GLuint * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4NUIVPROC GLeeFuncPtr_glVertexAttrib4Nuiv; #define glVertexAttrib4Nuiv GLeeFuncPtr_glVertexAttrib4Nuiv #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4Nusv #define GLEE_H_DEFINED_glVertexAttrib4Nusv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4NUSVPROC) (GLuint index, const GLushort * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4NUSVPROC GLeeFuncPtr_glVertexAttrib4Nusv; #define glVertexAttrib4Nusv GLeeFuncPtr_glVertexAttrib4Nusv #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4bv #define GLEE_H_DEFINED_glVertexAttrib4bv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4BVPROC) (GLuint index, const GLbyte * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4BVPROC GLeeFuncPtr_glVertexAttrib4bv; #define glVertexAttrib4bv GLeeFuncPtr_glVertexAttrib4bv #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4d #define GLEE_H_DEFINED_glVertexAttrib4d typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4DPROC GLeeFuncPtr_glVertexAttrib4d; #define glVertexAttrib4d GLeeFuncPtr_glVertexAttrib4d #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4dv #define GLEE_H_DEFINED_glVertexAttrib4dv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4DVPROC) (GLuint index, const GLdouble * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4DVPROC GLeeFuncPtr_glVertexAttrib4dv; #define glVertexAttrib4dv GLeeFuncPtr_glVertexAttrib4dv #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4f #define GLEE_H_DEFINED_glVertexAttrib4f typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4FPROC GLeeFuncPtr_glVertexAttrib4f; #define glVertexAttrib4f GLeeFuncPtr_glVertexAttrib4f #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4fv #define GLEE_H_DEFINED_glVertexAttrib4fv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4FVPROC) (GLuint index, const GLfloat * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4FVPROC GLeeFuncPtr_glVertexAttrib4fv; #define glVertexAttrib4fv GLeeFuncPtr_glVertexAttrib4fv #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4iv #define GLEE_H_DEFINED_glVertexAttrib4iv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4IVPROC) (GLuint index, const GLint * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4IVPROC GLeeFuncPtr_glVertexAttrib4iv; #define glVertexAttrib4iv GLeeFuncPtr_glVertexAttrib4iv #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4s #define GLEE_H_DEFINED_glVertexAttrib4s typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4SPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4SPROC GLeeFuncPtr_glVertexAttrib4s; #define glVertexAttrib4s GLeeFuncPtr_glVertexAttrib4s #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4sv #define GLEE_H_DEFINED_glVertexAttrib4sv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4SVPROC) (GLuint index, const GLshort * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4SVPROC GLeeFuncPtr_glVertexAttrib4sv; #define glVertexAttrib4sv GLeeFuncPtr_glVertexAttrib4sv #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4ubv #define GLEE_H_DEFINED_glVertexAttrib4ubv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4UBVPROC) (GLuint index, const GLubyte * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4UBVPROC GLeeFuncPtr_glVertexAttrib4ubv; #define glVertexAttrib4ubv GLeeFuncPtr_glVertexAttrib4ubv #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4uiv #define GLEE_H_DEFINED_glVertexAttrib4uiv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4UIVPROC) (GLuint index, const GLuint * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4UIVPROC GLeeFuncPtr_glVertexAttrib4uiv; #define glVertexAttrib4uiv GLeeFuncPtr_glVertexAttrib4uiv #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4usv #define GLEE_H_DEFINED_glVertexAttrib4usv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4USVPROC) (GLuint index, const GLushort * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4USVPROC GLeeFuncPtr_glVertexAttrib4usv; #define glVertexAttrib4usv GLeeFuncPtr_glVertexAttrib4usv #endif #ifndef GLEE_H_DEFINED_glVertexAttribPointer #define GLEE_H_DEFINED_glVertexAttribPointer typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid * pointer); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBPOINTERPROC GLeeFuncPtr_glVertexAttribPointer; #define glVertexAttribPointer GLeeFuncPtr_glVertexAttribPointer #endif #endif /* GL_VERSION_2_1 */ #ifndef GL_VERSION_2_1 #define GL_VERSION_2_1 1 #define __GLEE_GL_VERSION_2_1 1 /* Constants */ #define GL_CURRENT_RASTER_SECONDARY_COLOR 0x845F #define GL_PIXEL_PACK_BUFFER 0x88EB #define GL_PIXEL_UNPACK_BUFFER 0x88EC #define GL_PIXEL_PACK_BUFFER_BINDING 0x88ED #define GL_PIXEL_UNPACK_BUFFER_BINDING 0x88EF #define GL_FLOAT_MAT2x3 0x8B65 #define GL_FLOAT_MAT2x4 0x8B66 #define GL_FLOAT_MAT3x2 0x8B67 #define GL_FLOAT_MAT3x4 0x8B68 #define GL_FLOAT_MAT4x2 0x8B69 #define GL_FLOAT_MAT4x3 0x8B6A #define GL_SRGB 0x8C40 #define GL_SRGB8 0x8C41 #define GL_SRGB_ALPHA 0x8C42 #define GL_SRGB8_ALPHA8 0x8C43 #define GL_SLUMINANCE_ALPHA 0x8C44 #define GL_SLUMINANCE8_ALPHA8 0x8C45 #define GL_SLUMINANCE 0x8C46 #define GL_SLUMINANCE8 0x8C47 #define GL_COMPRESSED_SRGB 0x8C48 #define GL_COMPRESSED_SRGB_ALPHA 0x8C49 #define GL_COMPRESSED_SLUMINANCE 0x8C4A #define GL_COMPRESSED_SLUMINANCE_ALPHA 0x8C4B #ifndef GLEE_H_DEFINED_glUniformMatrix2x3fv #define GLEE_H_DEFINED_glUniformMatrix2x3fv typedef void (APIENTRYP GLEEPFNGLUNIFORMMATRIX2X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); GLEE_EXTERN GLEEPFNGLUNIFORMMATRIX2X3FVPROC GLeeFuncPtr_glUniformMatrix2x3fv; #define glUniformMatrix2x3fv GLeeFuncPtr_glUniformMatrix2x3fv #endif #ifndef GLEE_H_DEFINED_glUniformMatrix3x2fv #define GLEE_H_DEFINED_glUniformMatrix3x2fv typedef void (APIENTRYP GLEEPFNGLUNIFORMMATRIX3X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); GLEE_EXTERN GLEEPFNGLUNIFORMMATRIX3X2FVPROC GLeeFuncPtr_glUniformMatrix3x2fv; #define glUniformMatrix3x2fv GLeeFuncPtr_glUniformMatrix3x2fv #endif #ifndef GLEE_H_DEFINED_glUniformMatrix2x4fv #define GLEE_H_DEFINED_glUniformMatrix2x4fv typedef void (APIENTRYP GLEEPFNGLUNIFORMMATRIX2X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); GLEE_EXTERN GLEEPFNGLUNIFORMMATRIX2X4FVPROC GLeeFuncPtr_glUniformMatrix2x4fv; #define glUniformMatrix2x4fv GLeeFuncPtr_glUniformMatrix2x4fv #endif #ifndef GLEE_H_DEFINED_glUniformMatrix4x2fv #define GLEE_H_DEFINED_glUniformMatrix4x2fv typedef void (APIENTRYP GLEEPFNGLUNIFORMMATRIX4X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); GLEE_EXTERN GLEEPFNGLUNIFORMMATRIX4X2FVPROC GLeeFuncPtr_glUniformMatrix4x2fv; #define glUniformMatrix4x2fv GLeeFuncPtr_glUniformMatrix4x2fv #endif #ifndef GLEE_H_DEFINED_glUniformMatrix3x4fv #define GLEE_H_DEFINED_glUniformMatrix3x4fv typedef void (APIENTRYP GLEEPFNGLUNIFORMMATRIX3X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); GLEE_EXTERN GLEEPFNGLUNIFORMMATRIX3X4FVPROC GLeeFuncPtr_glUniformMatrix3x4fv; #define glUniformMatrix3x4fv GLeeFuncPtr_glUniformMatrix3x4fv #endif #ifndef GLEE_H_DEFINED_glUniformMatrix4x3fv #define GLEE_H_DEFINED_glUniformMatrix4x3fv typedef void (APIENTRYP GLEEPFNGLUNIFORMMATRIX4X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); GLEE_EXTERN GLEEPFNGLUNIFORMMATRIX4X3FVPROC GLeeFuncPtr_glUniformMatrix4x3fv; #define glUniformMatrix4x3fv GLeeFuncPtr_glUniformMatrix4x3fv #endif #endif /* GL_VERSION_3_0 */ #ifndef GL_VERSION_3_0 #define GL_VERSION_3_0 1 #define __GLEE_GL_VERSION_3_0 1 /* Constants */ #define GL_COMPARE_REF_TO_TEXTURE GL_COMPARE_R_TO_TEXTURE_ARB #define GL_CLIP_DISTANCE0 GL_CLIP_PLANE0 #define GL_CLIP_DISTANCE1 GL_CLIP_PLANE1 #define GL_CLIP_DISTANCE2 GL_CLIP_PLANE2 #define GL_CLIP_DISTANCE3 GL_CLIP_PLANE3 #define GL_CLIP_DISTANCE4 GL_CLIP_PLANE4 #define GL_CLIP_DISTANCE5 GL_CLIP_PLANE5 #define GL_MAX_CLIP_DISTANCES GL_MAX_CLIP_PLANES #define GL_MAJOR_VERSION 0x821B #define GL_MINOR_VERSION 0x821C #define GL_NUM_EXTENSIONS 0x821D #define GL_CONTEXT_FLAGS 0x821E #define GL_DEPTH_BUFFER 0x8223 #define GL_STENCIL_BUFFER 0x8224 #define GL_COMPRESSED_RED 0x8225 #define GL_COMPRESSED_RG 0x8226 #define GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT 0x0001 #define GL_RGBA32F 0x8814 #define GL_RGB32F 0x8815 #define GL_RGBA16F 0x881A #define GL_RGB16F 0x881B #define GL_VERTEX_ATTRIB_ARRAY_INTEGER 0x88FD #define GL_MAX_ARRAY_TEXTURE_LAYERS 0x88FF #define GL_MIN_PROGRAM_TEXEL_OFFSET 0x8904 #define GL_MAX_PROGRAM_TEXEL_OFFSET 0x8905 #define GL_CLAMP_VERTEX_COLOR 0x891A #define GL_CLAMP_FRAGMENT_COLOR 0x891B #define GL_CLAMP_READ_COLOR 0x891C #define GL_FIXED_ONLY 0x891D #define GL_MAX_VARYING_COMPONENTS GL_MAX_VARYING_FLOATS #define GL_TEXTURE_RED_TYPE 0x8C10 #define GL_TEXTURE_GREEN_TYPE 0x8C11 #define GL_TEXTURE_BLUE_TYPE 0x8C12 #define GL_TEXTURE_ALPHA_TYPE 0x8C13 #define GL_TEXTURE_LUMINANCE_TYPE 0x8C14 #define GL_TEXTURE_INTENSITY_TYPE 0x8C15 #define GL_TEXTURE_DEPTH_TYPE 0x8C16 #define GL_UNSIGNED_NORMALIZED 0x8C17 #define GL_TEXTURE_1D_ARRAY 0x8C18 #define GL_PROXY_TEXTURE_1D_ARRAY 0x8C19 #define GL_TEXTURE_2D_ARRAY 0x8C1A #define GL_PROXY_TEXTURE_2D_ARRAY 0x8C1B #define GL_TEXTURE_BINDING_1D_ARRAY 0x8C1C #define GL_TEXTURE_BINDING_2D_ARRAY 0x8C1D #define GL_R11F_G11F_B10F 0x8C3A #define GL_UNSIGNED_INT_10F_11F_11F_REV 0x8C3B #define GL_RGB9_E5 0x8C3D #define GL_UNSIGNED_INT_5_9_9_9_REV 0x8C3E #define GL_TEXTURE_SHARED_SIZE 0x8C3F #define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH 0x8C76 #define GL_TRANSFORM_FEEDBACK_BUFFER_MODE 0x8C7F #define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS 0x8C80 #define GL_TRANSFORM_FEEDBACK_VARYINGS 0x8C83 #define GL_TRANSFORM_FEEDBACK_BUFFER_START 0x8C84 #define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE 0x8C85 #define GL_PRIMITIVES_GENERATED 0x8C87 #define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN 0x8C88 #define GL_RASTERIZER_DISCARD 0x8C89 #define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS 0x8C8A #define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS 0x8C8B #define GL_INTERLEAVED_ATTRIBS 0x8C8C #define GL_SEPARATE_ATTRIBS 0x8C8D #define GL_TRANSFORM_FEEDBACK_BUFFER 0x8C8E #define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING 0x8C8F #define GL_RGBA32UI 0x8D70 #define GL_RGB32UI 0x8D71 #define GL_RGBA16UI 0x8D76 #define GL_RGB16UI 0x8D77 #define GL_RGBA8UI 0x8D7C #define GL_RGB8UI 0x8D7D #define GL_RGBA32I 0x8D82 #define GL_RGB32I 0x8D83 #define GL_RGBA16I 0x8D88 #define GL_RGB16I 0x8D89 #define GL_RGBA8I 0x8D8E #define GL_RGB8I 0x8D8F #define GL_RED_INTEGER 0x8D94 #define GL_GREEN_INTEGER 0x8D95 #define GL_BLUE_INTEGER 0x8D96 #define GL_ALPHA_INTEGER 0x8D97 #define GL_RGB_INTEGER 0x8D98 #define GL_RGBA_INTEGER 0x8D99 #define GL_BGR_INTEGER 0x8D9A #define GL_BGRA_INTEGER 0x8D9B #define GL_SAMPLER_1D_ARRAY 0x8DC0 #define GL_SAMPLER_2D_ARRAY 0x8DC1 #define GL_SAMPLER_1D_ARRAY_SHADOW 0x8DC3 #define GL_SAMPLER_2D_ARRAY_SHADOW 0x8DC4 #define GL_SAMPLER_CUBE_SHADOW 0x8DC5 #define GL_UNSIGNED_INT_VEC2 0x8DC6 #define GL_UNSIGNED_INT_VEC3 0x8DC7 #define GL_UNSIGNED_INT_VEC4 0x8DC8 #define GL_INT_SAMPLER_1D 0x8DC9 #define GL_INT_SAMPLER_2D 0x8DCA #define GL_INT_SAMPLER_3D 0x8DCB #define GL_INT_SAMPLER_CUBE 0x8DCC #define GL_INT_SAMPLER_1D_ARRAY 0x8DCE #define GL_INT_SAMPLER_2D_ARRAY 0x8DCF #define GL_UNSIGNED_INT_SAMPLER_1D 0x8DD1 #define GL_UNSIGNED_INT_SAMPLER_2D 0x8DD2 #define GL_UNSIGNED_INT_SAMPLER_3D 0x8DD3 #define GL_UNSIGNED_INT_SAMPLER_CUBE 0x8DD4 #define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY 0x8DD6 #define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY 0x8DD7 #define GL_QUERY_WAIT 0x8E13 #define GL_QUERY_NO_WAIT 0x8E14 #define GL_QUERY_BY_REGION_WAIT 0x8E15 #define GL_QUERY_BY_REGION_NO_WAIT 0x8E16 #ifndef GLEE_H_DEFINED_glColorMaski #define GLEE_H_DEFINED_glColorMaski typedef void (APIENTRYP GLEEPFNGLCOLORMASKIPROC) (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); GLEE_EXTERN GLEEPFNGLCOLORMASKIPROC GLeeFuncPtr_glColorMaski; #define glColorMaski GLeeFuncPtr_glColorMaski #endif #ifndef GLEE_H_DEFINED_glGetBooleani_v #define GLEE_H_DEFINED_glGetBooleani_v typedef void (APIENTRYP GLEEPFNGLGETBOOLEANI_VPROC) (GLenum target, GLuint index, GLboolean * data); GLEE_EXTERN GLEEPFNGLGETBOOLEANI_VPROC GLeeFuncPtr_glGetBooleani_v; #define glGetBooleani_v GLeeFuncPtr_glGetBooleani_v #endif #ifndef GLEE_H_DEFINED_glGetIntegeri_v #define GLEE_H_DEFINED_glGetIntegeri_v typedef void (APIENTRYP GLEEPFNGLGETINTEGERI_VPROC) (GLenum target, GLuint index, GLint * data); GLEE_EXTERN GLEEPFNGLGETINTEGERI_VPROC GLeeFuncPtr_glGetIntegeri_v; #define glGetIntegeri_v GLeeFuncPtr_glGetIntegeri_v #endif #ifndef GLEE_H_DEFINED_glEnablei #define GLEE_H_DEFINED_glEnablei typedef void (APIENTRYP GLEEPFNGLENABLEIPROC) (GLenum target, GLuint index); GLEE_EXTERN GLEEPFNGLENABLEIPROC GLeeFuncPtr_glEnablei; #define glEnablei GLeeFuncPtr_glEnablei #endif #ifndef GLEE_H_DEFINED_glDisablei #define GLEE_H_DEFINED_glDisablei typedef void (APIENTRYP GLEEPFNGLDISABLEIPROC) (GLenum target, GLuint index); GLEE_EXTERN GLEEPFNGLDISABLEIPROC GLeeFuncPtr_glDisablei; #define glDisablei GLeeFuncPtr_glDisablei #endif #ifndef GLEE_H_DEFINED_glIsEnabledi #define GLEE_H_DEFINED_glIsEnabledi typedef GLboolean (APIENTRYP GLEEPFNGLISENABLEDIPROC) (GLenum target, GLuint index); GLEE_EXTERN GLEEPFNGLISENABLEDIPROC GLeeFuncPtr_glIsEnabledi; #define glIsEnabledi GLeeFuncPtr_glIsEnabledi #endif #ifndef GLEE_H_DEFINED_glBeginTransformFeedback #define GLEE_H_DEFINED_glBeginTransformFeedback typedef void (APIENTRYP GLEEPFNGLBEGINTRANSFORMFEEDBACKPROC) (GLenum primitiveMode); GLEE_EXTERN GLEEPFNGLBEGINTRANSFORMFEEDBACKPROC GLeeFuncPtr_glBeginTransformFeedback; #define glBeginTransformFeedback GLeeFuncPtr_glBeginTransformFeedback #endif #ifndef GLEE_H_DEFINED_glEndTransformFeedback #define GLEE_H_DEFINED_glEndTransformFeedback typedef void (APIENTRYP GLEEPFNGLENDTRANSFORMFEEDBACKPROC) (); GLEE_EXTERN GLEEPFNGLENDTRANSFORMFEEDBACKPROC GLeeFuncPtr_glEndTransformFeedback; #define glEndTransformFeedback GLeeFuncPtr_glEndTransformFeedback #endif #ifndef GLEE_H_DEFINED_glBindBufferRange #define GLEE_H_DEFINED_glBindBufferRange typedef void (APIENTRYP GLEEPFNGLBINDBUFFERRANGEPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); GLEE_EXTERN GLEEPFNGLBINDBUFFERRANGEPROC GLeeFuncPtr_glBindBufferRange; #define glBindBufferRange GLeeFuncPtr_glBindBufferRange #endif #ifndef GLEE_H_DEFINED_glBindBufferBase #define GLEE_H_DEFINED_glBindBufferBase typedef void (APIENTRYP GLEEPFNGLBINDBUFFERBASEPROC) (GLenum target, GLuint index, GLuint buffer); GLEE_EXTERN GLEEPFNGLBINDBUFFERBASEPROC GLeeFuncPtr_glBindBufferBase; #define glBindBufferBase GLeeFuncPtr_glBindBufferBase #endif #ifndef GLEE_H_DEFINED_glTransformFeedbackVaryings #define GLEE_H_DEFINED_glTransformFeedbackVaryings typedef void (APIENTRYP GLEEPFNGLTRANSFORMFEEDBACKVARYINGSPROC) (GLuint program, GLsizei count, const GLint * locations, GLenum bufferMode); GLEE_EXTERN GLEEPFNGLTRANSFORMFEEDBACKVARYINGSPROC GLeeFuncPtr_glTransformFeedbackVaryings; #define glTransformFeedbackVaryings GLeeFuncPtr_glTransformFeedbackVaryings #endif #ifndef GLEE_H_DEFINED_glGetTransformFeedbackVarying #define GLEE_H_DEFINED_glGetTransformFeedbackVarying typedef void (APIENTRYP GLEEPFNGLGETTRANSFORMFEEDBACKVARYINGPROC) (GLuint program, GLuint index, GLint * location); GLEE_EXTERN GLEEPFNGLGETTRANSFORMFEEDBACKVARYINGPROC GLeeFuncPtr_glGetTransformFeedbackVarying; #define glGetTransformFeedbackVarying GLeeFuncPtr_glGetTransformFeedbackVarying #endif #ifndef GLEE_H_DEFINED_glClampColor #define GLEE_H_DEFINED_glClampColor typedef void (APIENTRYP GLEEPFNGLCLAMPCOLORPROC) (GLenum target, GLenum clamp); GLEE_EXTERN GLEEPFNGLCLAMPCOLORPROC GLeeFuncPtr_glClampColor; #define glClampColor GLeeFuncPtr_glClampColor #endif #ifndef GLEE_H_DEFINED_glBeginConditionalRender #define GLEE_H_DEFINED_glBeginConditionalRender typedef void (APIENTRYP GLEEPFNGLBEGINCONDITIONALRENDERPROC) (GLuint id, GLenum mode); GLEE_EXTERN GLEEPFNGLBEGINCONDITIONALRENDERPROC GLeeFuncPtr_glBeginConditionalRender; #define glBeginConditionalRender GLeeFuncPtr_glBeginConditionalRender #endif #ifndef GLEE_H_DEFINED_glEndConditionalRender #define GLEE_H_DEFINED_glEndConditionalRender typedef void (APIENTRYP GLEEPFNGLENDCONDITIONALRENDERPROC) (); GLEE_EXTERN GLEEPFNGLENDCONDITIONALRENDERPROC GLeeFuncPtr_glEndConditionalRender; #define glEndConditionalRender GLeeFuncPtr_glEndConditionalRender #endif #ifndef GLEE_H_DEFINED_glVertexAttribI1i #define GLEE_H_DEFINED_glVertexAttribI1i typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBI1IPROC) (GLuint index, GLint x); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBI1IPROC GLeeFuncPtr_glVertexAttribI1i; #define glVertexAttribI1i GLeeFuncPtr_glVertexAttribI1i #endif #ifndef GLEE_H_DEFINED_glVertexAttribI2i #define GLEE_H_DEFINED_glVertexAttribI2i typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBI2IPROC) (GLuint index, GLint x, GLint y); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBI2IPROC GLeeFuncPtr_glVertexAttribI2i; #define glVertexAttribI2i GLeeFuncPtr_glVertexAttribI2i #endif #ifndef GLEE_H_DEFINED_glVertexAttribI3i #define GLEE_H_DEFINED_glVertexAttribI3i typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBI3IPROC) (GLuint index, GLint x, GLint y, GLint z); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBI3IPROC GLeeFuncPtr_glVertexAttribI3i; #define glVertexAttribI3i GLeeFuncPtr_glVertexAttribI3i #endif #ifndef GLEE_H_DEFINED_glVertexAttribI4i #define GLEE_H_DEFINED_glVertexAttribI4i typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBI4IPROC) (GLuint index, GLint x, GLint y, GLint z, GLint w); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBI4IPROC GLeeFuncPtr_glVertexAttribI4i; #define glVertexAttribI4i GLeeFuncPtr_glVertexAttribI4i #endif #ifndef GLEE_H_DEFINED_glVertexAttribI1ui #define GLEE_H_DEFINED_glVertexAttribI1ui typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBI1UIPROC) (GLuint index, GLuint x); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBI1UIPROC GLeeFuncPtr_glVertexAttribI1ui; #define glVertexAttribI1ui GLeeFuncPtr_glVertexAttribI1ui #endif #ifndef GLEE_H_DEFINED_glVertexAttribI2ui #define GLEE_H_DEFINED_glVertexAttribI2ui typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBI2UIPROC) (GLuint index, GLuint x, GLuint y); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBI2UIPROC GLeeFuncPtr_glVertexAttribI2ui; #define glVertexAttribI2ui GLeeFuncPtr_glVertexAttribI2ui #endif #ifndef GLEE_H_DEFINED_glVertexAttribI3ui #define GLEE_H_DEFINED_glVertexAttribI3ui typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBI3UIPROC) (GLuint index, GLuint x, GLuint y, GLuint z); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBI3UIPROC GLeeFuncPtr_glVertexAttribI3ui; #define glVertexAttribI3ui GLeeFuncPtr_glVertexAttribI3ui #endif #ifndef GLEE_H_DEFINED_glVertexAttribI4ui #define GLEE_H_DEFINED_glVertexAttribI4ui typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBI4UIPROC) (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBI4UIPROC GLeeFuncPtr_glVertexAttribI4ui; #define glVertexAttribI4ui GLeeFuncPtr_glVertexAttribI4ui #endif #ifndef GLEE_H_DEFINED_glVertexAttribI1iv #define GLEE_H_DEFINED_glVertexAttribI1iv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBI1IVPROC) (GLuint index, const GLint * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBI1IVPROC GLeeFuncPtr_glVertexAttribI1iv; #define glVertexAttribI1iv GLeeFuncPtr_glVertexAttribI1iv #endif #ifndef GLEE_H_DEFINED_glVertexAttribI2iv #define GLEE_H_DEFINED_glVertexAttribI2iv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBI2IVPROC) (GLuint index, const GLint * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBI2IVPROC GLeeFuncPtr_glVertexAttribI2iv; #define glVertexAttribI2iv GLeeFuncPtr_glVertexAttribI2iv #endif #ifndef GLEE_H_DEFINED_glVertexAttribI3iv #define GLEE_H_DEFINED_glVertexAttribI3iv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBI3IVPROC) (GLuint index, const GLint * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBI3IVPROC GLeeFuncPtr_glVertexAttribI3iv; #define glVertexAttribI3iv GLeeFuncPtr_glVertexAttribI3iv #endif #ifndef GLEE_H_DEFINED_glVertexAttribI4iv #define GLEE_H_DEFINED_glVertexAttribI4iv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBI4IVPROC) (GLuint index, const GLint * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBI4IVPROC GLeeFuncPtr_glVertexAttribI4iv; #define glVertexAttribI4iv GLeeFuncPtr_glVertexAttribI4iv #endif #ifndef GLEE_H_DEFINED_glVertexAttribI1uiv #define GLEE_H_DEFINED_glVertexAttribI1uiv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBI1UIVPROC) (GLuint index, const GLuint * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBI1UIVPROC GLeeFuncPtr_glVertexAttribI1uiv; #define glVertexAttribI1uiv GLeeFuncPtr_glVertexAttribI1uiv #endif #ifndef GLEE_H_DEFINED_glVertexAttribI2uiv #define GLEE_H_DEFINED_glVertexAttribI2uiv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBI2UIVPROC) (GLuint index, const GLuint * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBI2UIVPROC GLeeFuncPtr_glVertexAttribI2uiv; #define glVertexAttribI2uiv GLeeFuncPtr_glVertexAttribI2uiv #endif #ifndef GLEE_H_DEFINED_glVertexAttribI3uiv #define GLEE_H_DEFINED_glVertexAttribI3uiv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBI3UIVPROC) (GLuint index, const GLuint * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBI3UIVPROC GLeeFuncPtr_glVertexAttribI3uiv; #define glVertexAttribI3uiv GLeeFuncPtr_glVertexAttribI3uiv #endif #ifndef GLEE_H_DEFINED_glVertexAttribI4uiv #define GLEE_H_DEFINED_glVertexAttribI4uiv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBI4UIVPROC) (GLuint index, const GLuint * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBI4UIVPROC GLeeFuncPtr_glVertexAttribI4uiv; #define glVertexAttribI4uiv GLeeFuncPtr_glVertexAttribI4uiv #endif #ifndef GLEE_H_DEFINED_glVertexAttribI4bv #define GLEE_H_DEFINED_glVertexAttribI4bv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBI4BVPROC) (GLuint index, const GLbyte * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBI4BVPROC GLeeFuncPtr_glVertexAttribI4bv; #define glVertexAttribI4bv GLeeFuncPtr_glVertexAttribI4bv #endif #ifndef GLEE_H_DEFINED_glVertexAttribI4sv #define GLEE_H_DEFINED_glVertexAttribI4sv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBI4SVPROC) (GLuint index, const GLshort * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBI4SVPROC GLeeFuncPtr_glVertexAttribI4sv; #define glVertexAttribI4sv GLeeFuncPtr_glVertexAttribI4sv #endif #ifndef GLEE_H_DEFINED_glVertexAttribI4ubv #define GLEE_H_DEFINED_glVertexAttribI4ubv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBI4UBVPROC) (GLuint index, const GLubyte * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBI4UBVPROC GLeeFuncPtr_glVertexAttribI4ubv; #define glVertexAttribI4ubv GLeeFuncPtr_glVertexAttribI4ubv #endif #ifndef GLEE_H_DEFINED_glVertexAttribI4usv #define GLEE_H_DEFINED_glVertexAttribI4usv typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBI4USVPROC) (GLuint index, const GLushort * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBI4USVPROC GLeeFuncPtr_glVertexAttribI4usv; #define glVertexAttribI4usv GLeeFuncPtr_glVertexAttribI4usv #endif #ifndef GLEE_H_DEFINED_glVertexAttribIPointer #define GLEE_H_DEFINED_glVertexAttribIPointer typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBIPOINTERPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid * pointer); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBIPOINTERPROC GLeeFuncPtr_glVertexAttribIPointer; #define glVertexAttribIPointer GLeeFuncPtr_glVertexAttribIPointer #endif #ifndef GLEE_H_DEFINED_glGetVertexAttribIiv #define GLEE_H_DEFINED_glGetVertexAttribIiv typedef void (APIENTRYP GLEEPFNGLGETVERTEXATTRIBIIVPROC) (GLuint index, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETVERTEXATTRIBIIVPROC GLeeFuncPtr_glGetVertexAttribIiv; #define glGetVertexAttribIiv GLeeFuncPtr_glGetVertexAttribIiv #endif #ifndef GLEE_H_DEFINED_glGetVertexAttribIuiv #define GLEE_H_DEFINED_glGetVertexAttribIuiv typedef void (APIENTRYP GLEEPFNGLGETVERTEXATTRIBIUIVPROC) (GLuint index, GLenum pname, GLuint * params); GLEE_EXTERN GLEEPFNGLGETVERTEXATTRIBIUIVPROC GLeeFuncPtr_glGetVertexAttribIuiv; #define glGetVertexAttribIuiv GLeeFuncPtr_glGetVertexAttribIuiv #endif #ifndef GLEE_H_DEFINED_glGetUniformuiv #define GLEE_H_DEFINED_glGetUniformuiv typedef void (APIENTRYP GLEEPFNGLGETUNIFORMUIVPROC) (GLuint program, GLint location, GLuint * params); GLEE_EXTERN GLEEPFNGLGETUNIFORMUIVPROC GLeeFuncPtr_glGetUniformuiv; #define glGetUniformuiv GLeeFuncPtr_glGetUniformuiv #endif #ifndef GLEE_H_DEFINED_glBindFragDataLocation #define GLEE_H_DEFINED_glBindFragDataLocation typedef void (APIENTRYP GLEEPFNGLBINDFRAGDATALOCATIONPROC) (GLuint program, GLuint color, const GLchar * name); GLEE_EXTERN GLEEPFNGLBINDFRAGDATALOCATIONPROC GLeeFuncPtr_glBindFragDataLocation; #define glBindFragDataLocation GLeeFuncPtr_glBindFragDataLocation #endif #ifndef GLEE_H_DEFINED_glGetFragDataLocation #define GLEE_H_DEFINED_glGetFragDataLocation typedef GLint (APIENTRYP GLEEPFNGLGETFRAGDATALOCATIONPROC) (GLuint program, const GLchar * name); GLEE_EXTERN GLEEPFNGLGETFRAGDATALOCATIONPROC GLeeFuncPtr_glGetFragDataLocation; #define glGetFragDataLocation GLeeFuncPtr_glGetFragDataLocation #endif #ifndef GLEE_H_DEFINED_glUniform1ui #define GLEE_H_DEFINED_glUniform1ui typedef void (APIENTRYP GLEEPFNGLUNIFORM1UIPROC) (GLint location, GLuint v0); GLEE_EXTERN GLEEPFNGLUNIFORM1UIPROC GLeeFuncPtr_glUniform1ui; #define glUniform1ui GLeeFuncPtr_glUniform1ui #endif #ifndef GLEE_H_DEFINED_glUniform2ui #define GLEE_H_DEFINED_glUniform2ui typedef void (APIENTRYP GLEEPFNGLUNIFORM2UIPROC) (GLint location, GLuint v0, GLuint v1); GLEE_EXTERN GLEEPFNGLUNIFORM2UIPROC GLeeFuncPtr_glUniform2ui; #define glUniform2ui GLeeFuncPtr_glUniform2ui #endif #ifndef GLEE_H_DEFINED_glUniform3ui #define GLEE_H_DEFINED_glUniform3ui typedef void (APIENTRYP GLEEPFNGLUNIFORM3UIPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2); GLEE_EXTERN GLEEPFNGLUNIFORM3UIPROC GLeeFuncPtr_glUniform3ui; #define glUniform3ui GLeeFuncPtr_glUniform3ui #endif #ifndef GLEE_H_DEFINED_glUniform4ui #define GLEE_H_DEFINED_glUniform4ui typedef void (APIENTRYP GLEEPFNGLUNIFORM4UIPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); GLEE_EXTERN GLEEPFNGLUNIFORM4UIPROC GLeeFuncPtr_glUniform4ui; #define glUniform4ui GLeeFuncPtr_glUniform4ui #endif #ifndef GLEE_H_DEFINED_glUniform1uiv #define GLEE_H_DEFINED_glUniform1uiv typedef void (APIENTRYP GLEEPFNGLUNIFORM1UIVPROC) (GLint location, GLsizei count, const GLuint * value); GLEE_EXTERN GLEEPFNGLUNIFORM1UIVPROC GLeeFuncPtr_glUniform1uiv; #define glUniform1uiv GLeeFuncPtr_glUniform1uiv #endif #ifndef GLEE_H_DEFINED_glUniform2uiv #define GLEE_H_DEFINED_glUniform2uiv typedef void (APIENTRYP GLEEPFNGLUNIFORM2UIVPROC) (GLint location, GLsizei count, const GLuint * value); GLEE_EXTERN GLEEPFNGLUNIFORM2UIVPROC GLeeFuncPtr_glUniform2uiv; #define glUniform2uiv GLeeFuncPtr_glUniform2uiv #endif #ifndef GLEE_H_DEFINED_glUniform3uiv #define GLEE_H_DEFINED_glUniform3uiv typedef void (APIENTRYP GLEEPFNGLUNIFORM3UIVPROC) (GLint location, GLsizei count, const GLuint * value); GLEE_EXTERN GLEEPFNGLUNIFORM3UIVPROC GLeeFuncPtr_glUniform3uiv; #define glUniform3uiv GLeeFuncPtr_glUniform3uiv #endif #ifndef GLEE_H_DEFINED_glUniform4uiv #define GLEE_H_DEFINED_glUniform4uiv typedef void (APIENTRYP GLEEPFNGLUNIFORM4UIVPROC) (GLint location, GLsizei count, const GLuint * value); GLEE_EXTERN GLEEPFNGLUNIFORM4UIVPROC GLeeFuncPtr_glUniform4uiv; #define glUniform4uiv GLeeFuncPtr_glUniform4uiv #endif #ifndef GLEE_H_DEFINED_glTexParameterIiv #define GLEE_H_DEFINED_glTexParameterIiv typedef void (APIENTRYP GLEEPFNGLTEXPARAMETERIIVPROC) (GLenum target, GLenum pname, const GLint * params); GLEE_EXTERN GLEEPFNGLTEXPARAMETERIIVPROC GLeeFuncPtr_glTexParameterIiv; #define glTexParameterIiv GLeeFuncPtr_glTexParameterIiv #endif #ifndef GLEE_H_DEFINED_glTexParameterIuiv #define GLEE_H_DEFINED_glTexParameterIuiv typedef void (APIENTRYP GLEEPFNGLTEXPARAMETERIUIVPROC) (GLenum target, GLenum pname, const GLuint * params); GLEE_EXTERN GLEEPFNGLTEXPARAMETERIUIVPROC GLeeFuncPtr_glTexParameterIuiv; #define glTexParameterIuiv GLeeFuncPtr_glTexParameterIuiv #endif #ifndef GLEE_H_DEFINED_glGetTexParameterIiv #define GLEE_H_DEFINED_glGetTexParameterIiv typedef void (APIENTRYP GLEEPFNGLGETTEXPARAMETERIIVPROC) (GLenum target, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETTEXPARAMETERIIVPROC GLeeFuncPtr_glGetTexParameterIiv; #define glGetTexParameterIiv GLeeFuncPtr_glGetTexParameterIiv #endif #ifndef GLEE_H_DEFINED_glGetTexParameterIuiv #define GLEE_H_DEFINED_glGetTexParameterIuiv typedef void (APIENTRYP GLEEPFNGLGETTEXPARAMETERIUIVPROC) (GLenum target, GLenum pname, GLuint * params); GLEE_EXTERN GLEEPFNGLGETTEXPARAMETERIUIVPROC GLeeFuncPtr_glGetTexParameterIuiv; #define glGetTexParameterIuiv GLeeFuncPtr_glGetTexParameterIuiv #endif #ifndef GLEE_H_DEFINED_glClearBufferiv #define GLEE_H_DEFINED_glClearBufferiv typedef void (APIENTRYP GLEEPFNGLCLEARBUFFERIVPROC) (GLenum buffer, GLint drawbuffer, const GLint * value); GLEE_EXTERN GLEEPFNGLCLEARBUFFERIVPROC GLeeFuncPtr_glClearBufferiv; #define glClearBufferiv GLeeFuncPtr_glClearBufferiv #endif #ifndef GLEE_H_DEFINED_glClearBufferuiv #define GLEE_H_DEFINED_glClearBufferuiv typedef void (APIENTRYP GLEEPFNGLCLEARBUFFERUIVPROC) (GLenum buffer, GLint drawbuffer, const GLuint * value); GLEE_EXTERN GLEEPFNGLCLEARBUFFERUIVPROC GLeeFuncPtr_glClearBufferuiv; #define glClearBufferuiv GLeeFuncPtr_glClearBufferuiv #endif #ifndef GLEE_H_DEFINED_glClearBufferfv #define GLEE_H_DEFINED_glClearBufferfv typedef void (APIENTRYP GLEEPFNGLCLEARBUFFERFVPROC) (GLenum buffer, GLint drawbuffer, const GLfloat * value); GLEE_EXTERN GLEEPFNGLCLEARBUFFERFVPROC GLeeFuncPtr_glClearBufferfv; #define glClearBufferfv GLeeFuncPtr_glClearBufferfv #endif #ifndef GLEE_H_DEFINED_glClearBufferfi #define GLEE_H_DEFINED_glClearBufferfi typedef void (APIENTRYP GLEEPFNGLCLEARBUFFERFIPROC) (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); GLEE_EXTERN GLEEPFNGLCLEARBUFFERFIPROC GLeeFuncPtr_glClearBufferfi; #define glClearBufferfi GLeeFuncPtr_glClearBufferfi #endif #ifndef GLEE_H_DEFINED_glGetStringi #define GLEE_H_DEFINED_glGetStringi typedef const GLubyte * (APIENTRYP GLEEPFNGLGETSTRINGIPROC) (GLenum name, GLuint index); GLEE_EXTERN GLEEPFNGLGETSTRINGIPROC GLeeFuncPtr_glGetStringi; #define glGetStringi GLeeFuncPtr_glGetStringi #endif #endif /* GL_ARB_multitexture */ #ifndef GL_ARB_multitexture #define GL_ARB_multitexture 1 #define __GLEE_GL_ARB_multitexture 1 /* Constants */ #define GL_TEXTURE0_ARB 0x84C0 #define GL_TEXTURE1_ARB 0x84C1 #define GL_TEXTURE2_ARB 0x84C2 #define GL_TEXTURE3_ARB 0x84C3 #define GL_TEXTURE4_ARB 0x84C4 #define GL_TEXTURE5_ARB 0x84C5 #define GL_TEXTURE6_ARB 0x84C6 #define GL_TEXTURE7_ARB 0x84C7 #define GL_TEXTURE8_ARB 0x84C8 #define GL_TEXTURE9_ARB 0x84C9 #define GL_TEXTURE10_ARB 0x84CA #define GL_TEXTURE11_ARB 0x84CB #define GL_TEXTURE12_ARB 0x84CC #define GL_TEXTURE13_ARB 0x84CD #define GL_TEXTURE14_ARB 0x84CE #define GL_TEXTURE15_ARB 0x84CF #define GL_TEXTURE16_ARB 0x84D0 #define GL_TEXTURE17_ARB 0x84D1 #define GL_TEXTURE18_ARB 0x84D2 #define GL_TEXTURE19_ARB 0x84D3 #define GL_TEXTURE20_ARB 0x84D4 #define GL_TEXTURE21_ARB 0x84D5 #define GL_TEXTURE22_ARB 0x84D6 #define GL_TEXTURE23_ARB 0x84D7 #define GL_TEXTURE24_ARB 0x84D8 #define GL_TEXTURE25_ARB 0x84D9 #define GL_TEXTURE26_ARB 0x84DA #define GL_TEXTURE27_ARB 0x84DB #define GL_TEXTURE28_ARB 0x84DC #define GL_TEXTURE29_ARB 0x84DD #define GL_TEXTURE30_ARB 0x84DE #define GL_TEXTURE31_ARB 0x84DF #define GL_ACTIVE_TEXTURE_ARB 0x84E0 #define GL_CLIENT_ACTIVE_TEXTURE_ARB 0x84E1 #define GL_MAX_TEXTURE_UNITS_ARB 0x84E2 #ifndef GLEE_H_DEFINED_glActiveTextureARB #define GLEE_H_DEFINED_glActiveTextureARB typedef void (APIENTRYP GLEEPFNGLACTIVETEXTUREARBPROC) (GLenum texture); GLEE_EXTERN GLEEPFNGLACTIVETEXTUREARBPROC GLeeFuncPtr_glActiveTextureARB; #define glActiveTextureARB GLeeFuncPtr_glActiveTextureARB #endif #ifndef GLEE_H_DEFINED_glClientActiveTextureARB #define GLEE_H_DEFINED_glClientActiveTextureARB typedef void (APIENTRYP GLEEPFNGLCLIENTACTIVETEXTUREARBPROC) (GLenum texture); GLEE_EXTERN GLEEPFNGLCLIENTACTIVETEXTUREARBPROC GLeeFuncPtr_glClientActiveTextureARB; #define glClientActiveTextureARB GLeeFuncPtr_glClientActiveTextureARB #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord1dARB #define GLEE_H_DEFINED_glMultiTexCoord1dARB typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD1DARBPROC) (GLenum target, GLdouble s); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD1DARBPROC GLeeFuncPtr_glMultiTexCoord1dARB; #define glMultiTexCoord1dARB GLeeFuncPtr_glMultiTexCoord1dARB #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord1dvARB #define GLEE_H_DEFINED_glMultiTexCoord1dvARB typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD1DVARBPROC) (GLenum target, const GLdouble * v); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD1DVARBPROC GLeeFuncPtr_glMultiTexCoord1dvARB; #define glMultiTexCoord1dvARB GLeeFuncPtr_glMultiTexCoord1dvARB #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord1fARB #define GLEE_H_DEFINED_glMultiTexCoord1fARB typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD1FARBPROC) (GLenum target, GLfloat s); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD1FARBPROC GLeeFuncPtr_glMultiTexCoord1fARB; #define glMultiTexCoord1fARB GLeeFuncPtr_glMultiTexCoord1fARB #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord1fvARB #define GLEE_H_DEFINED_glMultiTexCoord1fvARB typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD1FVARBPROC) (GLenum target, const GLfloat * v); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD1FVARBPROC GLeeFuncPtr_glMultiTexCoord1fvARB; #define glMultiTexCoord1fvARB GLeeFuncPtr_glMultiTexCoord1fvARB #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord1iARB #define GLEE_H_DEFINED_glMultiTexCoord1iARB typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD1IARBPROC) (GLenum target, GLint s); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD1IARBPROC GLeeFuncPtr_glMultiTexCoord1iARB; #define glMultiTexCoord1iARB GLeeFuncPtr_glMultiTexCoord1iARB #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord1ivARB #define GLEE_H_DEFINED_glMultiTexCoord1ivARB typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD1IVARBPROC) (GLenum target, const GLint * v); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD1IVARBPROC GLeeFuncPtr_glMultiTexCoord1ivARB; #define glMultiTexCoord1ivARB GLeeFuncPtr_glMultiTexCoord1ivARB #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord1sARB #define GLEE_H_DEFINED_glMultiTexCoord1sARB typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD1SARBPROC) (GLenum target, GLshort s); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD1SARBPROC GLeeFuncPtr_glMultiTexCoord1sARB; #define glMultiTexCoord1sARB GLeeFuncPtr_glMultiTexCoord1sARB #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord1svARB #define GLEE_H_DEFINED_glMultiTexCoord1svARB typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD1SVARBPROC) (GLenum target, const GLshort * v); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD1SVARBPROC GLeeFuncPtr_glMultiTexCoord1svARB; #define glMultiTexCoord1svARB GLeeFuncPtr_glMultiTexCoord1svARB #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord2dARB #define GLEE_H_DEFINED_glMultiTexCoord2dARB typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD2DARBPROC) (GLenum target, GLdouble s, GLdouble t); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD2DARBPROC GLeeFuncPtr_glMultiTexCoord2dARB; #define glMultiTexCoord2dARB GLeeFuncPtr_glMultiTexCoord2dARB #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord2dvARB #define GLEE_H_DEFINED_glMultiTexCoord2dvARB typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD2DVARBPROC) (GLenum target, const GLdouble * v); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD2DVARBPROC GLeeFuncPtr_glMultiTexCoord2dvARB; #define glMultiTexCoord2dvARB GLeeFuncPtr_glMultiTexCoord2dvARB #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord2fARB #define GLEE_H_DEFINED_glMultiTexCoord2fARB typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD2FARBPROC) (GLenum target, GLfloat s, GLfloat t); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD2FARBPROC GLeeFuncPtr_glMultiTexCoord2fARB; #define glMultiTexCoord2fARB GLeeFuncPtr_glMultiTexCoord2fARB #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord2fvARB #define GLEE_H_DEFINED_glMultiTexCoord2fvARB typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD2FVARBPROC) (GLenum target, const GLfloat * v); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD2FVARBPROC GLeeFuncPtr_glMultiTexCoord2fvARB; #define glMultiTexCoord2fvARB GLeeFuncPtr_glMultiTexCoord2fvARB #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord2iARB #define GLEE_H_DEFINED_glMultiTexCoord2iARB typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD2IARBPROC) (GLenum target, GLint s, GLint t); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD2IARBPROC GLeeFuncPtr_glMultiTexCoord2iARB; #define glMultiTexCoord2iARB GLeeFuncPtr_glMultiTexCoord2iARB #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord2ivARB #define GLEE_H_DEFINED_glMultiTexCoord2ivARB typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD2IVARBPROC) (GLenum target, const GLint * v); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD2IVARBPROC GLeeFuncPtr_glMultiTexCoord2ivARB; #define glMultiTexCoord2ivARB GLeeFuncPtr_glMultiTexCoord2ivARB #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord2sARB #define GLEE_H_DEFINED_glMultiTexCoord2sARB typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD2SARBPROC) (GLenum target, GLshort s, GLshort t); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD2SARBPROC GLeeFuncPtr_glMultiTexCoord2sARB; #define glMultiTexCoord2sARB GLeeFuncPtr_glMultiTexCoord2sARB #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord2svARB #define GLEE_H_DEFINED_glMultiTexCoord2svARB typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD2SVARBPROC) (GLenum target, const GLshort * v); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD2SVARBPROC GLeeFuncPtr_glMultiTexCoord2svARB; #define glMultiTexCoord2svARB GLeeFuncPtr_glMultiTexCoord2svARB #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord3dARB #define GLEE_H_DEFINED_glMultiTexCoord3dARB typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD3DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD3DARBPROC GLeeFuncPtr_glMultiTexCoord3dARB; #define glMultiTexCoord3dARB GLeeFuncPtr_glMultiTexCoord3dARB #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord3dvARB #define GLEE_H_DEFINED_glMultiTexCoord3dvARB typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD3DVARBPROC) (GLenum target, const GLdouble * v); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD3DVARBPROC GLeeFuncPtr_glMultiTexCoord3dvARB; #define glMultiTexCoord3dvARB GLeeFuncPtr_glMultiTexCoord3dvARB #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord3fARB #define GLEE_H_DEFINED_glMultiTexCoord3fARB typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD3FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD3FARBPROC GLeeFuncPtr_glMultiTexCoord3fARB; #define glMultiTexCoord3fARB GLeeFuncPtr_glMultiTexCoord3fARB #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord3fvARB #define GLEE_H_DEFINED_glMultiTexCoord3fvARB typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD3FVARBPROC) (GLenum target, const GLfloat * v); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD3FVARBPROC GLeeFuncPtr_glMultiTexCoord3fvARB; #define glMultiTexCoord3fvARB GLeeFuncPtr_glMultiTexCoord3fvARB #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord3iARB #define GLEE_H_DEFINED_glMultiTexCoord3iARB typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD3IARBPROC) (GLenum target, GLint s, GLint t, GLint r); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD3IARBPROC GLeeFuncPtr_glMultiTexCoord3iARB; #define glMultiTexCoord3iARB GLeeFuncPtr_glMultiTexCoord3iARB #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord3ivARB #define GLEE_H_DEFINED_glMultiTexCoord3ivARB typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD3IVARBPROC) (GLenum target, const GLint * v); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD3IVARBPROC GLeeFuncPtr_glMultiTexCoord3ivARB; #define glMultiTexCoord3ivARB GLeeFuncPtr_glMultiTexCoord3ivARB #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord3sARB #define GLEE_H_DEFINED_glMultiTexCoord3sARB typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD3SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD3SARBPROC GLeeFuncPtr_glMultiTexCoord3sARB; #define glMultiTexCoord3sARB GLeeFuncPtr_glMultiTexCoord3sARB #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord3svARB #define GLEE_H_DEFINED_glMultiTexCoord3svARB typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD3SVARBPROC) (GLenum target, const GLshort * v); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD3SVARBPROC GLeeFuncPtr_glMultiTexCoord3svARB; #define glMultiTexCoord3svARB GLeeFuncPtr_glMultiTexCoord3svARB #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord4dARB #define GLEE_H_DEFINED_glMultiTexCoord4dARB typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD4DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD4DARBPROC GLeeFuncPtr_glMultiTexCoord4dARB; #define glMultiTexCoord4dARB GLeeFuncPtr_glMultiTexCoord4dARB #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord4dvARB #define GLEE_H_DEFINED_glMultiTexCoord4dvARB typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD4DVARBPROC) (GLenum target, const GLdouble * v); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD4DVARBPROC GLeeFuncPtr_glMultiTexCoord4dvARB; #define glMultiTexCoord4dvARB GLeeFuncPtr_glMultiTexCoord4dvARB #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord4fARB #define GLEE_H_DEFINED_glMultiTexCoord4fARB typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD4FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD4FARBPROC GLeeFuncPtr_glMultiTexCoord4fARB; #define glMultiTexCoord4fARB GLeeFuncPtr_glMultiTexCoord4fARB #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord4fvARB #define GLEE_H_DEFINED_glMultiTexCoord4fvARB typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD4FVARBPROC) (GLenum target, const GLfloat * v); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD4FVARBPROC GLeeFuncPtr_glMultiTexCoord4fvARB; #define glMultiTexCoord4fvARB GLeeFuncPtr_glMultiTexCoord4fvARB #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord4iARB #define GLEE_H_DEFINED_glMultiTexCoord4iARB typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD4IARBPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD4IARBPROC GLeeFuncPtr_glMultiTexCoord4iARB; #define glMultiTexCoord4iARB GLeeFuncPtr_glMultiTexCoord4iARB #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord4ivARB #define GLEE_H_DEFINED_glMultiTexCoord4ivARB typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD4IVARBPROC) (GLenum target, const GLint * v); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD4IVARBPROC GLeeFuncPtr_glMultiTexCoord4ivARB; #define glMultiTexCoord4ivARB GLeeFuncPtr_glMultiTexCoord4ivARB #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord4sARB #define GLEE_H_DEFINED_glMultiTexCoord4sARB typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD4SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD4SARBPROC GLeeFuncPtr_glMultiTexCoord4sARB; #define glMultiTexCoord4sARB GLeeFuncPtr_glMultiTexCoord4sARB #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord4svARB #define GLEE_H_DEFINED_glMultiTexCoord4svARB typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD4SVARBPROC) (GLenum target, const GLshort * v); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD4SVARBPROC GLeeFuncPtr_glMultiTexCoord4svARB; #define glMultiTexCoord4svARB GLeeFuncPtr_glMultiTexCoord4svARB #endif #endif /* GL_ARB_transpose_matrix */ #ifndef GL_ARB_transpose_matrix #define GL_ARB_transpose_matrix 1 #define __GLEE_GL_ARB_transpose_matrix 1 /* Constants */ #define GL_TRANSPOSE_MODELVIEW_MATRIX_ARB 0x84E3 #define GL_TRANSPOSE_PROJECTION_MATRIX_ARB 0x84E4 #define GL_TRANSPOSE_TEXTURE_MATRIX_ARB 0x84E5 #define GL_TRANSPOSE_COLOR_MATRIX_ARB 0x84E6 #ifndef GLEE_H_DEFINED_glLoadTransposeMatrixfARB #define GLEE_H_DEFINED_glLoadTransposeMatrixfARB typedef void (APIENTRYP GLEEPFNGLLOADTRANSPOSEMATRIXFARBPROC) (const GLfloat * m); GLEE_EXTERN GLEEPFNGLLOADTRANSPOSEMATRIXFARBPROC GLeeFuncPtr_glLoadTransposeMatrixfARB; #define glLoadTransposeMatrixfARB GLeeFuncPtr_glLoadTransposeMatrixfARB #endif #ifndef GLEE_H_DEFINED_glLoadTransposeMatrixdARB #define GLEE_H_DEFINED_glLoadTransposeMatrixdARB typedef void (APIENTRYP GLEEPFNGLLOADTRANSPOSEMATRIXDARBPROC) (const GLdouble * m); GLEE_EXTERN GLEEPFNGLLOADTRANSPOSEMATRIXDARBPROC GLeeFuncPtr_glLoadTransposeMatrixdARB; #define glLoadTransposeMatrixdARB GLeeFuncPtr_glLoadTransposeMatrixdARB #endif #ifndef GLEE_H_DEFINED_glMultTransposeMatrixfARB #define GLEE_H_DEFINED_glMultTransposeMatrixfARB typedef void (APIENTRYP GLEEPFNGLMULTTRANSPOSEMATRIXFARBPROC) (const GLfloat * m); GLEE_EXTERN GLEEPFNGLMULTTRANSPOSEMATRIXFARBPROC GLeeFuncPtr_glMultTransposeMatrixfARB; #define glMultTransposeMatrixfARB GLeeFuncPtr_glMultTransposeMatrixfARB #endif #ifndef GLEE_H_DEFINED_glMultTransposeMatrixdARB #define GLEE_H_DEFINED_glMultTransposeMatrixdARB typedef void (APIENTRYP GLEEPFNGLMULTTRANSPOSEMATRIXDARBPROC) (const GLdouble * m); GLEE_EXTERN GLEEPFNGLMULTTRANSPOSEMATRIXDARBPROC GLeeFuncPtr_glMultTransposeMatrixdARB; #define glMultTransposeMatrixdARB GLeeFuncPtr_glMultTransposeMatrixdARB #endif #endif /* GL_ARB_multisample */ #ifndef GL_ARB_multisample #define GL_ARB_multisample 1 #define __GLEE_GL_ARB_multisample 1 /* Constants */ #define GL_MULTISAMPLE_ARB 0x809D #define GL_SAMPLE_ALPHA_TO_COVERAGE_ARB 0x809E #define GL_SAMPLE_ALPHA_TO_ONE_ARB 0x809F #define GL_SAMPLE_COVERAGE_ARB 0x80A0 #define GL_SAMPLE_BUFFERS_ARB 0x80A8 #define GL_SAMPLES_ARB 0x80A9 #define GL_SAMPLE_COVERAGE_VALUE_ARB 0x80AA #define GL_SAMPLE_COVERAGE_INVERT_ARB 0x80AB #define GL_MULTISAMPLE_BIT_ARB 0x20000000 #ifndef GLEE_H_DEFINED_glSampleCoverageARB #define GLEE_H_DEFINED_glSampleCoverageARB typedef void (APIENTRYP GLEEPFNGLSAMPLECOVERAGEARBPROC) (GLclampf value, GLboolean invert); GLEE_EXTERN GLEEPFNGLSAMPLECOVERAGEARBPROC GLeeFuncPtr_glSampleCoverageARB; #define glSampleCoverageARB GLeeFuncPtr_glSampleCoverageARB #endif #endif /* GL_ARB_texture_env_add */ #ifndef GL_ARB_texture_env_add #define GL_ARB_texture_env_add 1 #define __GLEE_GL_ARB_texture_env_add 1 /* Constants */ #endif /* GL_ARB_texture_cube_map */ #ifndef GL_ARB_texture_cube_map #define GL_ARB_texture_cube_map 1 #define __GLEE_GL_ARB_texture_cube_map 1 /* Constants */ #define GL_NORMAL_MAP_ARB 0x8511 #define GL_REFLECTION_MAP_ARB 0x8512 #define GL_TEXTURE_CUBE_MAP_ARB 0x8513 #define GL_TEXTURE_BINDING_CUBE_MAP_ARB 0x8514 #define GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x8515 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x8516 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x8517 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x8518 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x8519 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x851A #define GL_PROXY_TEXTURE_CUBE_MAP_ARB 0x851B #define GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB 0x851C #endif /* GL_ARB_texture_compression */ #ifndef GL_ARB_texture_compression #define GL_ARB_texture_compression 1 #define __GLEE_GL_ARB_texture_compression 1 /* Constants */ #define GL_COMPRESSED_ALPHA_ARB 0x84E9 #define GL_COMPRESSED_LUMINANCE_ARB 0x84EA #define GL_COMPRESSED_LUMINANCE_ALPHA_ARB 0x84EB #define GL_COMPRESSED_INTENSITY_ARB 0x84EC #define GL_COMPRESSED_RGB_ARB 0x84ED #define GL_COMPRESSED_RGBA_ARB 0x84EE #define GL_TEXTURE_COMPRESSION_HINT_ARB 0x84EF #define GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB 0x86A0 #define GL_TEXTURE_COMPRESSED_ARB 0x86A1 #define GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A2 #define GL_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A3 #ifndef GLEE_H_DEFINED_glCompressedTexImage3DARB #define GLEE_H_DEFINED_glCompressedTexImage3DARB typedef void (APIENTRYP GLEEPFNGLCOMPRESSEDTEXIMAGE3DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid * data); GLEE_EXTERN GLEEPFNGLCOMPRESSEDTEXIMAGE3DARBPROC GLeeFuncPtr_glCompressedTexImage3DARB; #define glCompressedTexImage3DARB GLeeFuncPtr_glCompressedTexImage3DARB #endif #ifndef GLEE_H_DEFINED_glCompressedTexImage2DARB #define GLEE_H_DEFINED_glCompressedTexImage2DARB typedef void (APIENTRYP GLEEPFNGLCOMPRESSEDTEXIMAGE2DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid * data); GLEE_EXTERN GLEEPFNGLCOMPRESSEDTEXIMAGE2DARBPROC GLeeFuncPtr_glCompressedTexImage2DARB; #define glCompressedTexImage2DARB GLeeFuncPtr_glCompressedTexImage2DARB #endif #ifndef GLEE_H_DEFINED_glCompressedTexImage1DARB #define GLEE_H_DEFINED_glCompressedTexImage1DARB typedef void (APIENTRYP GLEEPFNGLCOMPRESSEDTEXIMAGE1DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid * data); GLEE_EXTERN GLEEPFNGLCOMPRESSEDTEXIMAGE1DARBPROC GLeeFuncPtr_glCompressedTexImage1DARB; #define glCompressedTexImage1DARB GLeeFuncPtr_glCompressedTexImage1DARB #endif #ifndef GLEE_H_DEFINED_glCompressedTexSubImage3DARB #define GLEE_H_DEFINED_glCompressedTexSubImage3DARB typedef void (APIENTRYP GLEEPFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid * data); GLEE_EXTERN GLEEPFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC GLeeFuncPtr_glCompressedTexSubImage3DARB; #define glCompressedTexSubImage3DARB GLeeFuncPtr_glCompressedTexSubImage3DARB #endif #ifndef GLEE_H_DEFINED_glCompressedTexSubImage2DARB #define GLEE_H_DEFINED_glCompressedTexSubImage2DARB typedef void (APIENTRYP GLEEPFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid * data); GLEE_EXTERN GLEEPFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC GLeeFuncPtr_glCompressedTexSubImage2DARB; #define glCompressedTexSubImage2DARB GLeeFuncPtr_glCompressedTexSubImage2DARB #endif #ifndef GLEE_H_DEFINED_glCompressedTexSubImage1DARB #define GLEE_H_DEFINED_glCompressedTexSubImage1DARB typedef void (APIENTRYP GLEEPFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid * data); GLEE_EXTERN GLEEPFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC GLeeFuncPtr_glCompressedTexSubImage1DARB; #define glCompressedTexSubImage1DARB GLeeFuncPtr_glCompressedTexSubImage1DARB #endif #ifndef GLEE_H_DEFINED_glGetCompressedTexImageARB #define GLEE_H_DEFINED_glGetCompressedTexImageARB typedef void (APIENTRYP GLEEPFNGLGETCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint level, GLvoid * img); GLEE_EXTERN GLEEPFNGLGETCOMPRESSEDTEXIMAGEARBPROC GLeeFuncPtr_glGetCompressedTexImageARB; #define glGetCompressedTexImageARB GLeeFuncPtr_glGetCompressedTexImageARB #endif #endif /* GL_ARB_texture_border_clamp */ #ifndef GL_ARB_texture_border_clamp #define GL_ARB_texture_border_clamp 1 #define __GLEE_GL_ARB_texture_border_clamp 1 /* Constants */ #define GL_CLAMP_TO_BORDER_ARB 0x812D #endif /* GL_ARB_point_parameters */ #ifndef GL_ARB_point_parameters #define GL_ARB_point_parameters 1 #define __GLEE_GL_ARB_point_parameters 1 /* Constants */ #define GL_POINT_SIZE_MIN_ARB 0x8126 #define GL_POINT_SIZE_MAX_ARB 0x8127 #define GL_POINT_FADE_THRESHOLD_SIZE_ARB 0x8128 #define GL_POINT_DISTANCE_ATTENUATION_ARB 0x8129 #ifndef GLEE_H_DEFINED_glPointParameterfARB #define GLEE_H_DEFINED_glPointParameterfARB typedef void (APIENTRYP GLEEPFNGLPOINTPARAMETERFARBPROC) (GLenum pname, GLfloat param); GLEE_EXTERN GLEEPFNGLPOINTPARAMETERFARBPROC GLeeFuncPtr_glPointParameterfARB; #define glPointParameterfARB GLeeFuncPtr_glPointParameterfARB #endif #ifndef GLEE_H_DEFINED_glPointParameterfvARB #define GLEE_H_DEFINED_glPointParameterfvARB typedef void (APIENTRYP GLEEPFNGLPOINTPARAMETERFVARBPROC) (GLenum pname, const GLfloat * params); GLEE_EXTERN GLEEPFNGLPOINTPARAMETERFVARBPROC GLeeFuncPtr_glPointParameterfvARB; #define glPointParameterfvARB GLeeFuncPtr_glPointParameterfvARB #endif #endif /* GL_ARB_vertex_blend */ #ifndef GL_ARB_vertex_blend #define GL_ARB_vertex_blend 1 #define __GLEE_GL_ARB_vertex_blend 1 /* Constants */ #define GL_MAX_VERTEX_UNITS_ARB 0x86A4 #define GL_ACTIVE_VERTEX_UNITS_ARB 0x86A5 #define GL_WEIGHT_SUM_UNITY_ARB 0x86A6 #define GL_VERTEX_BLEND_ARB 0x86A7 #define GL_CURRENT_WEIGHT_ARB 0x86A8 #define GL_WEIGHT_ARRAY_TYPE_ARB 0x86A9 #define GL_WEIGHT_ARRAY_STRIDE_ARB 0x86AA #define GL_WEIGHT_ARRAY_SIZE_ARB 0x86AB #define GL_WEIGHT_ARRAY_POINTER_ARB 0x86AC #define GL_WEIGHT_ARRAY_ARB 0x86AD #define GL_MODELVIEW0_ARB 0x1700 #define GL_MODELVIEW1_ARB 0x850A #define GL_MODELVIEW2_ARB 0x8722 #define GL_MODELVIEW3_ARB 0x8723 #define GL_MODELVIEW4_ARB 0x8724 #define GL_MODELVIEW5_ARB 0x8725 #define GL_MODELVIEW6_ARB 0x8726 #define GL_MODELVIEW7_ARB 0x8727 #define GL_MODELVIEW8_ARB 0x8728 #define GL_MODELVIEW9_ARB 0x8729 #define GL_MODELVIEW10_ARB 0x872A #define GL_MODELVIEW11_ARB 0x872B #define GL_MODELVIEW12_ARB 0x872C #define GL_MODELVIEW13_ARB 0x872D #define GL_MODELVIEW14_ARB 0x872E #define GL_MODELVIEW15_ARB 0x872F #define GL_MODELVIEW16_ARB 0x8730 #define GL_MODELVIEW17_ARB 0x8731 #define GL_MODELVIEW18_ARB 0x8732 #define GL_MODELVIEW19_ARB 0x8733 #define GL_MODELVIEW20_ARB 0x8734 #define GL_MODELVIEW21_ARB 0x8735 #define GL_MODELVIEW22_ARB 0x8736 #define GL_MODELVIEW23_ARB 0x8737 #define GL_MODELVIEW24_ARB 0x8738 #define GL_MODELVIEW25_ARB 0x8739 #define GL_MODELVIEW26_ARB 0x873A #define GL_MODELVIEW27_ARB 0x873B #define GL_MODELVIEW28_ARB 0x873C #define GL_MODELVIEW29_ARB 0x873D #define GL_MODELVIEW30_ARB 0x873E #define GL_MODELVIEW31_ARB 0x873F #ifndef GLEE_H_DEFINED_glWeightbvARB #define GLEE_H_DEFINED_glWeightbvARB typedef void (APIENTRYP GLEEPFNGLWEIGHTBVARBPROC) (GLint size, const GLbyte * weights); GLEE_EXTERN GLEEPFNGLWEIGHTBVARBPROC GLeeFuncPtr_glWeightbvARB; #define glWeightbvARB GLeeFuncPtr_glWeightbvARB #endif #ifndef GLEE_H_DEFINED_glWeightsvARB #define GLEE_H_DEFINED_glWeightsvARB typedef void (APIENTRYP GLEEPFNGLWEIGHTSVARBPROC) (GLint size, const GLshort * weights); GLEE_EXTERN GLEEPFNGLWEIGHTSVARBPROC GLeeFuncPtr_glWeightsvARB; #define glWeightsvARB GLeeFuncPtr_glWeightsvARB #endif #ifndef GLEE_H_DEFINED_glWeightivARB #define GLEE_H_DEFINED_glWeightivARB typedef void (APIENTRYP GLEEPFNGLWEIGHTIVARBPROC) (GLint size, const GLint * weights); GLEE_EXTERN GLEEPFNGLWEIGHTIVARBPROC GLeeFuncPtr_glWeightivARB; #define glWeightivARB GLeeFuncPtr_glWeightivARB #endif #ifndef GLEE_H_DEFINED_glWeightfvARB #define GLEE_H_DEFINED_glWeightfvARB typedef void (APIENTRYP GLEEPFNGLWEIGHTFVARBPROC) (GLint size, const GLfloat * weights); GLEE_EXTERN GLEEPFNGLWEIGHTFVARBPROC GLeeFuncPtr_glWeightfvARB; #define glWeightfvARB GLeeFuncPtr_glWeightfvARB #endif #ifndef GLEE_H_DEFINED_glWeightdvARB #define GLEE_H_DEFINED_glWeightdvARB typedef void (APIENTRYP GLEEPFNGLWEIGHTDVARBPROC) (GLint size, const GLdouble * weights); GLEE_EXTERN GLEEPFNGLWEIGHTDVARBPROC GLeeFuncPtr_glWeightdvARB; #define glWeightdvARB GLeeFuncPtr_glWeightdvARB #endif #ifndef GLEE_H_DEFINED_glWeightubvARB #define GLEE_H_DEFINED_glWeightubvARB typedef void (APIENTRYP GLEEPFNGLWEIGHTUBVARBPROC) (GLint size, const GLubyte * weights); GLEE_EXTERN GLEEPFNGLWEIGHTUBVARBPROC GLeeFuncPtr_glWeightubvARB; #define glWeightubvARB GLeeFuncPtr_glWeightubvARB #endif #ifndef GLEE_H_DEFINED_glWeightusvARB #define GLEE_H_DEFINED_glWeightusvARB typedef void (APIENTRYP GLEEPFNGLWEIGHTUSVARBPROC) (GLint size, const GLushort * weights); GLEE_EXTERN GLEEPFNGLWEIGHTUSVARBPROC GLeeFuncPtr_glWeightusvARB; #define glWeightusvARB GLeeFuncPtr_glWeightusvARB #endif #ifndef GLEE_H_DEFINED_glWeightuivARB #define GLEE_H_DEFINED_glWeightuivARB typedef void (APIENTRYP GLEEPFNGLWEIGHTUIVARBPROC) (GLint size, const GLuint * weights); GLEE_EXTERN GLEEPFNGLWEIGHTUIVARBPROC GLeeFuncPtr_glWeightuivARB; #define glWeightuivARB GLeeFuncPtr_glWeightuivARB #endif #ifndef GLEE_H_DEFINED_glWeightPointerARB #define GLEE_H_DEFINED_glWeightPointerARB typedef void (APIENTRYP GLEEPFNGLWEIGHTPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid * pointer); GLEE_EXTERN GLEEPFNGLWEIGHTPOINTERARBPROC GLeeFuncPtr_glWeightPointerARB; #define glWeightPointerARB GLeeFuncPtr_glWeightPointerARB #endif #ifndef GLEE_H_DEFINED_glVertexBlendARB #define GLEE_H_DEFINED_glVertexBlendARB typedef void (APIENTRYP GLEEPFNGLVERTEXBLENDARBPROC) (GLint count); GLEE_EXTERN GLEEPFNGLVERTEXBLENDARBPROC GLeeFuncPtr_glVertexBlendARB; #define glVertexBlendARB GLeeFuncPtr_glVertexBlendARB #endif #endif /* GL_ARB_matrix_palette */ #ifndef GL_ARB_matrix_palette #define GL_ARB_matrix_palette 1 #define __GLEE_GL_ARB_matrix_palette 1 /* Constants */ #define GL_MATRIX_PALETTE_ARB 0x8840 #define GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB 0x8841 #define GL_MAX_PALETTE_MATRICES_ARB 0x8842 #define GL_CURRENT_PALETTE_MATRIX_ARB 0x8843 #define GL_MATRIX_INDEX_ARRAY_ARB 0x8844 #define GL_CURRENT_MATRIX_INDEX_ARB 0x8845 #define GL_MATRIX_INDEX_ARRAY_SIZE_ARB 0x8846 #define GL_MATRIX_INDEX_ARRAY_TYPE_ARB 0x8847 #define GL_MATRIX_INDEX_ARRAY_STRIDE_ARB 0x8848 #define GL_MATRIX_INDEX_ARRAY_POINTER_ARB 0x8849 #ifndef GLEE_H_DEFINED_glCurrentPaletteMatrixARB #define GLEE_H_DEFINED_glCurrentPaletteMatrixARB typedef void (APIENTRYP GLEEPFNGLCURRENTPALETTEMATRIXARBPROC) (GLint index); GLEE_EXTERN GLEEPFNGLCURRENTPALETTEMATRIXARBPROC GLeeFuncPtr_glCurrentPaletteMatrixARB; #define glCurrentPaletteMatrixARB GLeeFuncPtr_glCurrentPaletteMatrixARB #endif #ifndef GLEE_H_DEFINED_glMatrixIndexubvARB #define GLEE_H_DEFINED_glMatrixIndexubvARB typedef void (APIENTRYP GLEEPFNGLMATRIXINDEXUBVARBPROC) (GLint size, const GLubyte * indices); GLEE_EXTERN GLEEPFNGLMATRIXINDEXUBVARBPROC GLeeFuncPtr_glMatrixIndexubvARB; #define glMatrixIndexubvARB GLeeFuncPtr_glMatrixIndexubvARB #endif #ifndef GLEE_H_DEFINED_glMatrixIndexusvARB #define GLEE_H_DEFINED_glMatrixIndexusvARB typedef void (APIENTRYP GLEEPFNGLMATRIXINDEXUSVARBPROC) (GLint size, const GLushort * indices); GLEE_EXTERN GLEEPFNGLMATRIXINDEXUSVARBPROC GLeeFuncPtr_glMatrixIndexusvARB; #define glMatrixIndexusvARB GLeeFuncPtr_glMatrixIndexusvARB #endif #ifndef GLEE_H_DEFINED_glMatrixIndexuivARB #define GLEE_H_DEFINED_glMatrixIndexuivARB typedef void (APIENTRYP GLEEPFNGLMATRIXINDEXUIVARBPROC) (GLint size, const GLuint * indices); GLEE_EXTERN GLEEPFNGLMATRIXINDEXUIVARBPROC GLeeFuncPtr_glMatrixIndexuivARB; #define glMatrixIndexuivARB GLeeFuncPtr_glMatrixIndexuivARB #endif #ifndef GLEE_H_DEFINED_glMatrixIndexPointerARB #define GLEE_H_DEFINED_glMatrixIndexPointerARB typedef void (APIENTRYP GLEEPFNGLMATRIXINDEXPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid * pointer); GLEE_EXTERN GLEEPFNGLMATRIXINDEXPOINTERARBPROC GLeeFuncPtr_glMatrixIndexPointerARB; #define glMatrixIndexPointerARB GLeeFuncPtr_glMatrixIndexPointerARB #endif #endif /* GL_ARB_texture_env_combine */ #ifndef GL_ARB_texture_env_combine #define GL_ARB_texture_env_combine 1 #define __GLEE_GL_ARB_texture_env_combine 1 /* Constants */ #define GL_COMBINE_ARB 0x8570 #define GL_COMBINE_RGB_ARB 0x8571 #define GL_COMBINE_ALPHA_ARB 0x8572 #define GL_SOURCE0_RGB_ARB 0x8580 #define GL_SOURCE1_RGB_ARB 0x8581 #define GL_SOURCE2_RGB_ARB 0x8582 #define GL_SOURCE0_ALPHA_ARB 0x8588 #define GL_SOURCE1_ALPHA_ARB 0x8589 #define GL_SOURCE2_ALPHA_ARB 0x858A #define GL_OPERAND0_RGB_ARB 0x8590 #define GL_OPERAND1_RGB_ARB 0x8591 #define GL_OPERAND2_RGB_ARB 0x8592 #define GL_OPERAND0_ALPHA_ARB 0x8598 #define GL_OPERAND1_ALPHA_ARB 0x8599 #define GL_OPERAND2_ALPHA_ARB 0x859A #define GL_RGB_SCALE_ARB 0x8573 #define GL_ADD_SIGNED_ARB 0x8574 #define GL_INTERPOLATE_ARB 0x8575 #define GL_SUBTRACT_ARB 0x84E7 #define GL_CONSTANT_ARB 0x8576 #define GL_PRIMARY_COLOR_ARB 0x8577 #define GL_PREVIOUS_ARB 0x8578 #endif /* GL_ARB_texture_env_crossbar */ #ifndef GL_ARB_texture_env_crossbar #define GL_ARB_texture_env_crossbar 1 #define __GLEE_GL_ARB_texture_env_crossbar 1 /* Constants */ #endif /* GL_ARB_texture_env_dot3 */ #ifndef GL_ARB_texture_env_dot3 #define GL_ARB_texture_env_dot3 1 #define __GLEE_GL_ARB_texture_env_dot3 1 /* Constants */ #define GL_DOT3_RGB_ARB 0x86AE #define GL_DOT3_RGBA_ARB 0x86AF #endif /* GL_ARB_texture_mirrored_repeat */ #ifndef GL_ARB_texture_mirrored_repeat #define GL_ARB_texture_mirrored_repeat 1 #define __GLEE_GL_ARB_texture_mirrored_repeat 1 /* Constants */ #define GL_MIRRORED_REPEAT_ARB 0x8370 #endif /* GL_ARB_depth_texture */ #ifndef GL_ARB_depth_texture #define GL_ARB_depth_texture 1 #define __GLEE_GL_ARB_depth_texture 1 /* Constants */ #define GL_DEPTH_COMPONENT16_ARB 0x81A5 #define GL_DEPTH_COMPONENT24_ARB 0x81A6 #define GL_DEPTH_COMPONENT32_ARB 0x81A7 #define GL_TEXTURE_DEPTH_SIZE_ARB 0x884A #define GL_DEPTH_TEXTURE_MODE_ARB 0x884B #endif /* GL_ARB_shadow */ #ifndef GL_ARB_shadow #define GL_ARB_shadow 1 #define __GLEE_GL_ARB_shadow 1 /* Constants */ #define GL_TEXTURE_COMPARE_MODE_ARB 0x884C #define GL_TEXTURE_COMPARE_FUNC_ARB 0x884D #define GL_COMPARE_R_TO_TEXTURE_ARB 0x884E #endif /* GL_ARB_shadow_ambient */ #ifndef GL_ARB_shadow_ambient #define GL_ARB_shadow_ambient 1 #define __GLEE_GL_ARB_shadow_ambient 1 /* Constants */ #define GL_TEXTURE_COMPARE_FAIL_VALUE_ARB 0x80BF #endif /* GL_ARB_window_pos */ #ifndef GL_ARB_window_pos #define GL_ARB_window_pos 1 #define __GLEE_GL_ARB_window_pos 1 /* Constants */ #ifndef GLEE_H_DEFINED_glWindowPos2dARB #define GLEE_H_DEFINED_glWindowPos2dARB typedef void (APIENTRYP GLEEPFNGLWINDOWPOS2DARBPROC) (GLdouble x, GLdouble y); GLEE_EXTERN GLEEPFNGLWINDOWPOS2DARBPROC GLeeFuncPtr_glWindowPos2dARB; #define glWindowPos2dARB GLeeFuncPtr_glWindowPos2dARB #endif #ifndef GLEE_H_DEFINED_glWindowPos2dvARB #define GLEE_H_DEFINED_glWindowPos2dvARB typedef void (APIENTRYP GLEEPFNGLWINDOWPOS2DVARBPROC) (const GLdouble * v); GLEE_EXTERN GLEEPFNGLWINDOWPOS2DVARBPROC GLeeFuncPtr_glWindowPos2dvARB; #define glWindowPos2dvARB GLeeFuncPtr_glWindowPos2dvARB #endif #ifndef GLEE_H_DEFINED_glWindowPos2fARB #define GLEE_H_DEFINED_glWindowPos2fARB typedef void (APIENTRYP GLEEPFNGLWINDOWPOS2FARBPROC) (GLfloat x, GLfloat y); GLEE_EXTERN GLEEPFNGLWINDOWPOS2FARBPROC GLeeFuncPtr_glWindowPos2fARB; #define glWindowPos2fARB GLeeFuncPtr_glWindowPos2fARB #endif #ifndef GLEE_H_DEFINED_glWindowPos2fvARB #define GLEE_H_DEFINED_glWindowPos2fvARB typedef void (APIENTRYP GLEEPFNGLWINDOWPOS2FVARBPROC) (const GLfloat * v); GLEE_EXTERN GLEEPFNGLWINDOWPOS2FVARBPROC GLeeFuncPtr_glWindowPos2fvARB; #define glWindowPos2fvARB GLeeFuncPtr_glWindowPos2fvARB #endif #ifndef GLEE_H_DEFINED_glWindowPos2iARB #define GLEE_H_DEFINED_glWindowPos2iARB typedef void (APIENTRYP GLEEPFNGLWINDOWPOS2IARBPROC) (GLint x, GLint y); GLEE_EXTERN GLEEPFNGLWINDOWPOS2IARBPROC GLeeFuncPtr_glWindowPos2iARB; #define glWindowPos2iARB GLeeFuncPtr_glWindowPos2iARB #endif #ifndef GLEE_H_DEFINED_glWindowPos2ivARB #define GLEE_H_DEFINED_glWindowPos2ivARB typedef void (APIENTRYP GLEEPFNGLWINDOWPOS2IVARBPROC) (const GLint * v); GLEE_EXTERN GLEEPFNGLWINDOWPOS2IVARBPROC GLeeFuncPtr_glWindowPos2ivARB; #define glWindowPos2ivARB GLeeFuncPtr_glWindowPos2ivARB #endif #ifndef GLEE_H_DEFINED_glWindowPos2sARB #define GLEE_H_DEFINED_glWindowPos2sARB typedef void (APIENTRYP GLEEPFNGLWINDOWPOS2SARBPROC) (GLshort x, GLshort y); GLEE_EXTERN GLEEPFNGLWINDOWPOS2SARBPROC GLeeFuncPtr_glWindowPos2sARB; #define glWindowPos2sARB GLeeFuncPtr_glWindowPos2sARB #endif #ifndef GLEE_H_DEFINED_glWindowPos2svARB #define GLEE_H_DEFINED_glWindowPos2svARB typedef void (APIENTRYP GLEEPFNGLWINDOWPOS2SVARBPROC) (const GLshort * v); GLEE_EXTERN GLEEPFNGLWINDOWPOS2SVARBPROC GLeeFuncPtr_glWindowPos2svARB; #define glWindowPos2svARB GLeeFuncPtr_glWindowPos2svARB #endif #ifndef GLEE_H_DEFINED_glWindowPos3dARB #define GLEE_H_DEFINED_glWindowPos3dARB typedef void (APIENTRYP GLEEPFNGLWINDOWPOS3DARBPROC) (GLdouble x, GLdouble y, GLdouble z); GLEE_EXTERN GLEEPFNGLWINDOWPOS3DARBPROC GLeeFuncPtr_glWindowPos3dARB; #define glWindowPos3dARB GLeeFuncPtr_glWindowPos3dARB #endif #ifndef GLEE_H_DEFINED_glWindowPos3dvARB #define GLEE_H_DEFINED_glWindowPos3dvARB typedef void (APIENTRYP GLEEPFNGLWINDOWPOS3DVARBPROC) (const GLdouble * v); GLEE_EXTERN GLEEPFNGLWINDOWPOS3DVARBPROC GLeeFuncPtr_glWindowPos3dvARB; #define glWindowPos3dvARB GLeeFuncPtr_glWindowPos3dvARB #endif #ifndef GLEE_H_DEFINED_glWindowPos3fARB #define GLEE_H_DEFINED_glWindowPos3fARB typedef void (APIENTRYP GLEEPFNGLWINDOWPOS3FARBPROC) (GLfloat x, GLfloat y, GLfloat z); GLEE_EXTERN GLEEPFNGLWINDOWPOS3FARBPROC GLeeFuncPtr_glWindowPos3fARB; #define glWindowPos3fARB GLeeFuncPtr_glWindowPos3fARB #endif #ifndef GLEE_H_DEFINED_glWindowPos3fvARB #define GLEE_H_DEFINED_glWindowPos3fvARB typedef void (APIENTRYP GLEEPFNGLWINDOWPOS3FVARBPROC) (const GLfloat * v); GLEE_EXTERN GLEEPFNGLWINDOWPOS3FVARBPROC GLeeFuncPtr_glWindowPos3fvARB; #define glWindowPos3fvARB GLeeFuncPtr_glWindowPos3fvARB #endif #ifndef GLEE_H_DEFINED_glWindowPos3iARB #define GLEE_H_DEFINED_glWindowPos3iARB typedef void (APIENTRYP GLEEPFNGLWINDOWPOS3IARBPROC) (GLint x, GLint y, GLint z); GLEE_EXTERN GLEEPFNGLWINDOWPOS3IARBPROC GLeeFuncPtr_glWindowPos3iARB; #define glWindowPos3iARB GLeeFuncPtr_glWindowPos3iARB #endif #ifndef GLEE_H_DEFINED_glWindowPos3ivARB #define GLEE_H_DEFINED_glWindowPos3ivARB typedef void (APIENTRYP GLEEPFNGLWINDOWPOS3IVARBPROC) (const GLint * v); GLEE_EXTERN GLEEPFNGLWINDOWPOS3IVARBPROC GLeeFuncPtr_glWindowPos3ivARB; #define glWindowPos3ivARB GLeeFuncPtr_glWindowPos3ivARB #endif #ifndef GLEE_H_DEFINED_glWindowPos3sARB #define GLEE_H_DEFINED_glWindowPos3sARB typedef void (APIENTRYP GLEEPFNGLWINDOWPOS3SARBPROC) (GLshort x, GLshort y, GLshort z); GLEE_EXTERN GLEEPFNGLWINDOWPOS3SARBPROC GLeeFuncPtr_glWindowPos3sARB; #define glWindowPos3sARB GLeeFuncPtr_glWindowPos3sARB #endif #ifndef GLEE_H_DEFINED_glWindowPos3svARB #define GLEE_H_DEFINED_glWindowPos3svARB typedef void (APIENTRYP GLEEPFNGLWINDOWPOS3SVARBPROC) (const GLshort * v); GLEE_EXTERN GLEEPFNGLWINDOWPOS3SVARBPROC GLeeFuncPtr_glWindowPos3svARB; #define glWindowPos3svARB GLeeFuncPtr_glWindowPos3svARB #endif #endif /* GL_ARB_vertex_program */ #ifndef GL_ARB_vertex_program #define GL_ARB_vertex_program 1 #define __GLEE_GL_ARB_vertex_program 1 /* Constants */ #define GL_COLOR_SUM_ARB 0x8458 #define GL_VERTEX_PROGRAM_ARB 0x8620 #define GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB 0x8622 #define GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB 0x8623 #define GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB 0x8624 #define GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB 0x8625 #define GL_CURRENT_VERTEX_ATTRIB_ARB 0x8626 #define GL_PROGRAM_LENGTH_ARB 0x8627 #define GL_PROGRAM_STRING_ARB 0x8628 #define GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB 0x862E #define GL_MAX_PROGRAM_MATRICES_ARB 0x862F #define GL_CURRENT_MATRIX_STACK_DEPTH_ARB 0x8640 #define GL_CURRENT_MATRIX_ARB 0x8641 #define GL_VERTEX_PROGRAM_POINT_SIZE_ARB 0x8642 #define GL_VERTEX_PROGRAM_TWO_SIDE_ARB 0x8643 #define GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB 0x8645 #define GL_PROGRAM_ERROR_POSITION_ARB 0x864B #define GL_PROGRAM_BINDING_ARB 0x8677 #define GL_MAX_VERTEX_ATTRIBS_ARB 0x8869 #define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB 0x886A #define GL_PROGRAM_ERROR_STRING_ARB 0x8874 #define GL_PROGRAM_FORMAT_ASCII_ARB 0x8875 #define GL_PROGRAM_FORMAT_ARB 0x8876 #define GL_PROGRAM_INSTRUCTIONS_ARB 0x88A0 #define GL_MAX_PROGRAM_INSTRUCTIONS_ARB 0x88A1 #define GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A2 #define GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A3 #define GL_PROGRAM_TEMPORARIES_ARB 0x88A4 #define GL_MAX_PROGRAM_TEMPORARIES_ARB 0x88A5 #define GL_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A6 #define GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A7 #define GL_PROGRAM_PARAMETERS_ARB 0x88A8 #define GL_MAX_PROGRAM_PARAMETERS_ARB 0x88A9 #define GL_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AA #define GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AB #define GL_PROGRAM_ATTRIBS_ARB 0x88AC #define GL_MAX_PROGRAM_ATTRIBS_ARB 0x88AD #define GL_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AE #define GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AF #define GL_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B0 #define GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B1 #define GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B2 #define GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B3 #define GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB 0x88B4 #define GL_MAX_PROGRAM_ENV_PARAMETERS_ARB 0x88B5 #define GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB 0x88B6 #define GL_TRANSPOSE_CURRENT_MATRIX_ARB 0x88B7 #define GL_MATRIX0_ARB 0x88C0 #define GL_MATRIX1_ARB 0x88C1 #define GL_MATRIX2_ARB 0x88C2 #define GL_MATRIX3_ARB 0x88C3 #define GL_MATRIX4_ARB 0x88C4 #define GL_MATRIX5_ARB 0x88C5 #define GL_MATRIX6_ARB 0x88C6 #define GL_MATRIX7_ARB 0x88C7 #define GL_MATRIX8_ARB 0x88C8 #define GL_MATRIX9_ARB 0x88C9 #define GL_MATRIX10_ARB 0x88CA #define GL_MATRIX11_ARB 0x88CB #define GL_MATRIX12_ARB 0x88CC #define GL_MATRIX13_ARB 0x88CD #define GL_MATRIX14_ARB 0x88CE #define GL_MATRIX15_ARB 0x88CF #define GL_MATRIX16_ARB 0x88D0 #define GL_MATRIX17_ARB 0x88D1 #define GL_MATRIX18_ARB 0x88D2 #define GL_MATRIX19_ARB 0x88D3 #define GL_MATRIX20_ARB 0x88D4 #define GL_MATRIX21_ARB 0x88D5 #define GL_MATRIX22_ARB 0x88D6 #define GL_MATRIX23_ARB 0x88D7 #define GL_MATRIX24_ARB 0x88D8 #define GL_MATRIX25_ARB 0x88D9 #define GL_MATRIX26_ARB 0x88DA #define GL_MATRIX27_ARB 0x88DB #define GL_MATRIX28_ARB 0x88DC #define GL_MATRIX29_ARB 0x88DD #define GL_MATRIX30_ARB 0x88DE #define GL_MATRIX31_ARB 0x88DF #ifndef GLEE_H_DEFINED_glVertexAttrib1dARB #define GLEE_H_DEFINED_glVertexAttrib1dARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB1DARBPROC) (GLuint index, GLdouble x); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB1DARBPROC GLeeFuncPtr_glVertexAttrib1dARB; #define glVertexAttrib1dARB GLeeFuncPtr_glVertexAttrib1dARB #endif #ifndef GLEE_H_DEFINED_glVertexAttrib1dvARB #define GLEE_H_DEFINED_glVertexAttrib1dvARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB1DVARBPROC) (GLuint index, const GLdouble * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB1DVARBPROC GLeeFuncPtr_glVertexAttrib1dvARB; #define glVertexAttrib1dvARB GLeeFuncPtr_glVertexAttrib1dvARB #endif #ifndef GLEE_H_DEFINED_glVertexAttrib1fARB #define GLEE_H_DEFINED_glVertexAttrib1fARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB1FARBPROC) (GLuint index, GLfloat x); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB1FARBPROC GLeeFuncPtr_glVertexAttrib1fARB; #define glVertexAttrib1fARB GLeeFuncPtr_glVertexAttrib1fARB #endif #ifndef GLEE_H_DEFINED_glVertexAttrib1fvARB #define GLEE_H_DEFINED_glVertexAttrib1fvARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB1FVARBPROC) (GLuint index, const GLfloat * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB1FVARBPROC GLeeFuncPtr_glVertexAttrib1fvARB; #define glVertexAttrib1fvARB GLeeFuncPtr_glVertexAttrib1fvARB #endif #ifndef GLEE_H_DEFINED_glVertexAttrib1sARB #define GLEE_H_DEFINED_glVertexAttrib1sARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB1SARBPROC) (GLuint index, GLshort x); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB1SARBPROC GLeeFuncPtr_glVertexAttrib1sARB; #define glVertexAttrib1sARB GLeeFuncPtr_glVertexAttrib1sARB #endif #ifndef GLEE_H_DEFINED_glVertexAttrib1svARB #define GLEE_H_DEFINED_glVertexAttrib1svARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB1SVARBPROC) (GLuint index, const GLshort * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB1SVARBPROC GLeeFuncPtr_glVertexAttrib1svARB; #define glVertexAttrib1svARB GLeeFuncPtr_glVertexAttrib1svARB #endif #ifndef GLEE_H_DEFINED_glVertexAttrib2dARB #define GLEE_H_DEFINED_glVertexAttrib2dARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB2DARBPROC) (GLuint index, GLdouble x, GLdouble y); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB2DARBPROC GLeeFuncPtr_glVertexAttrib2dARB; #define glVertexAttrib2dARB GLeeFuncPtr_glVertexAttrib2dARB #endif #ifndef GLEE_H_DEFINED_glVertexAttrib2dvARB #define GLEE_H_DEFINED_glVertexAttrib2dvARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB2DVARBPROC) (GLuint index, const GLdouble * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB2DVARBPROC GLeeFuncPtr_glVertexAttrib2dvARB; #define glVertexAttrib2dvARB GLeeFuncPtr_glVertexAttrib2dvARB #endif #ifndef GLEE_H_DEFINED_glVertexAttrib2fARB #define GLEE_H_DEFINED_glVertexAttrib2fARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB2FARBPROC) (GLuint index, GLfloat x, GLfloat y); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB2FARBPROC GLeeFuncPtr_glVertexAttrib2fARB; #define glVertexAttrib2fARB GLeeFuncPtr_glVertexAttrib2fARB #endif #ifndef GLEE_H_DEFINED_glVertexAttrib2fvARB #define GLEE_H_DEFINED_glVertexAttrib2fvARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB2FVARBPROC) (GLuint index, const GLfloat * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB2FVARBPROC GLeeFuncPtr_glVertexAttrib2fvARB; #define glVertexAttrib2fvARB GLeeFuncPtr_glVertexAttrib2fvARB #endif #ifndef GLEE_H_DEFINED_glVertexAttrib2sARB #define GLEE_H_DEFINED_glVertexAttrib2sARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB2SARBPROC) (GLuint index, GLshort x, GLshort y); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB2SARBPROC GLeeFuncPtr_glVertexAttrib2sARB; #define glVertexAttrib2sARB GLeeFuncPtr_glVertexAttrib2sARB #endif #ifndef GLEE_H_DEFINED_glVertexAttrib2svARB #define GLEE_H_DEFINED_glVertexAttrib2svARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB2SVARBPROC) (GLuint index, const GLshort * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB2SVARBPROC GLeeFuncPtr_glVertexAttrib2svARB; #define glVertexAttrib2svARB GLeeFuncPtr_glVertexAttrib2svARB #endif #ifndef GLEE_H_DEFINED_glVertexAttrib3dARB #define GLEE_H_DEFINED_glVertexAttrib3dARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB3DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB3DARBPROC GLeeFuncPtr_glVertexAttrib3dARB; #define glVertexAttrib3dARB GLeeFuncPtr_glVertexAttrib3dARB #endif #ifndef GLEE_H_DEFINED_glVertexAttrib3dvARB #define GLEE_H_DEFINED_glVertexAttrib3dvARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB3DVARBPROC) (GLuint index, const GLdouble * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB3DVARBPROC GLeeFuncPtr_glVertexAttrib3dvARB; #define glVertexAttrib3dvARB GLeeFuncPtr_glVertexAttrib3dvARB #endif #ifndef GLEE_H_DEFINED_glVertexAttrib3fARB #define GLEE_H_DEFINED_glVertexAttrib3fARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB3FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB3FARBPROC GLeeFuncPtr_glVertexAttrib3fARB; #define glVertexAttrib3fARB GLeeFuncPtr_glVertexAttrib3fARB #endif #ifndef GLEE_H_DEFINED_glVertexAttrib3fvARB #define GLEE_H_DEFINED_glVertexAttrib3fvARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB3FVARBPROC) (GLuint index, const GLfloat * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB3FVARBPROC GLeeFuncPtr_glVertexAttrib3fvARB; #define glVertexAttrib3fvARB GLeeFuncPtr_glVertexAttrib3fvARB #endif #ifndef GLEE_H_DEFINED_glVertexAttrib3sARB #define GLEE_H_DEFINED_glVertexAttrib3sARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB3SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB3SARBPROC GLeeFuncPtr_glVertexAttrib3sARB; #define glVertexAttrib3sARB GLeeFuncPtr_glVertexAttrib3sARB #endif #ifndef GLEE_H_DEFINED_glVertexAttrib3svARB #define GLEE_H_DEFINED_glVertexAttrib3svARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB3SVARBPROC) (GLuint index, const GLshort * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB3SVARBPROC GLeeFuncPtr_glVertexAttrib3svARB; #define glVertexAttrib3svARB GLeeFuncPtr_glVertexAttrib3svARB #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4NbvARB #define GLEE_H_DEFINED_glVertexAttrib4NbvARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4NBVARBPROC) (GLuint index, const GLbyte * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4NBVARBPROC GLeeFuncPtr_glVertexAttrib4NbvARB; #define glVertexAttrib4NbvARB GLeeFuncPtr_glVertexAttrib4NbvARB #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4NivARB #define GLEE_H_DEFINED_glVertexAttrib4NivARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4NIVARBPROC) (GLuint index, const GLint * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4NIVARBPROC GLeeFuncPtr_glVertexAttrib4NivARB; #define glVertexAttrib4NivARB GLeeFuncPtr_glVertexAttrib4NivARB #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4NsvARB #define GLEE_H_DEFINED_glVertexAttrib4NsvARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4NSVARBPROC) (GLuint index, const GLshort * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4NSVARBPROC GLeeFuncPtr_glVertexAttrib4NsvARB; #define glVertexAttrib4NsvARB GLeeFuncPtr_glVertexAttrib4NsvARB #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4NubARB #define GLEE_H_DEFINED_glVertexAttrib4NubARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4NUBARBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4NUBARBPROC GLeeFuncPtr_glVertexAttrib4NubARB; #define glVertexAttrib4NubARB GLeeFuncPtr_glVertexAttrib4NubARB #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4NubvARB #define GLEE_H_DEFINED_glVertexAttrib4NubvARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4NUBVARBPROC) (GLuint index, const GLubyte * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4NUBVARBPROC GLeeFuncPtr_glVertexAttrib4NubvARB; #define glVertexAttrib4NubvARB GLeeFuncPtr_glVertexAttrib4NubvARB #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4NuivARB #define GLEE_H_DEFINED_glVertexAttrib4NuivARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4NUIVARBPROC) (GLuint index, const GLuint * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4NUIVARBPROC GLeeFuncPtr_glVertexAttrib4NuivARB; #define glVertexAttrib4NuivARB GLeeFuncPtr_glVertexAttrib4NuivARB #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4NusvARB #define GLEE_H_DEFINED_glVertexAttrib4NusvARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4NUSVARBPROC) (GLuint index, const GLushort * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4NUSVARBPROC GLeeFuncPtr_glVertexAttrib4NusvARB; #define glVertexAttrib4NusvARB GLeeFuncPtr_glVertexAttrib4NusvARB #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4bvARB #define GLEE_H_DEFINED_glVertexAttrib4bvARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4BVARBPROC) (GLuint index, const GLbyte * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4BVARBPROC GLeeFuncPtr_glVertexAttrib4bvARB; #define glVertexAttrib4bvARB GLeeFuncPtr_glVertexAttrib4bvARB #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4dARB #define GLEE_H_DEFINED_glVertexAttrib4dARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4DARBPROC GLeeFuncPtr_glVertexAttrib4dARB; #define glVertexAttrib4dARB GLeeFuncPtr_glVertexAttrib4dARB #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4dvARB #define GLEE_H_DEFINED_glVertexAttrib4dvARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4DVARBPROC) (GLuint index, const GLdouble * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4DVARBPROC GLeeFuncPtr_glVertexAttrib4dvARB; #define glVertexAttrib4dvARB GLeeFuncPtr_glVertexAttrib4dvARB #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4fARB #define GLEE_H_DEFINED_glVertexAttrib4fARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4FARBPROC GLeeFuncPtr_glVertexAttrib4fARB; #define glVertexAttrib4fARB GLeeFuncPtr_glVertexAttrib4fARB #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4fvARB #define GLEE_H_DEFINED_glVertexAttrib4fvARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4FVARBPROC) (GLuint index, const GLfloat * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4FVARBPROC GLeeFuncPtr_glVertexAttrib4fvARB; #define glVertexAttrib4fvARB GLeeFuncPtr_glVertexAttrib4fvARB #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4ivARB #define GLEE_H_DEFINED_glVertexAttrib4ivARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4IVARBPROC) (GLuint index, const GLint * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4IVARBPROC GLeeFuncPtr_glVertexAttrib4ivARB; #define glVertexAttrib4ivARB GLeeFuncPtr_glVertexAttrib4ivARB #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4sARB #define GLEE_H_DEFINED_glVertexAttrib4sARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4SARBPROC GLeeFuncPtr_glVertexAttrib4sARB; #define glVertexAttrib4sARB GLeeFuncPtr_glVertexAttrib4sARB #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4svARB #define GLEE_H_DEFINED_glVertexAttrib4svARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4SVARBPROC) (GLuint index, const GLshort * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4SVARBPROC GLeeFuncPtr_glVertexAttrib4svARB; #define glVertexAttrib4svARB GLeeFuncPtr_glVertexAttrib4svARB #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4ubvARB #define GLEE_H_DEFINED_glVertexAttrib4ubvARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4UBVARBPROC) (GLuint index, const GLubyte * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4UBVARBPROC GLeeFuncPtr_glVertexAttrib4ubvARB; #define glVertexAttrib4ubvARB GLeeFuncPtr_glVertexAttrib4ubvARB #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4uivARB #define GLEE_H_DEFINED_glVertexAttrib4uivARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4UIVARBPROC) (GLuint index, const GLuint * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4UIVARBPROC GLeeFuncPtr_glVertexAttrib4uivARB; #define glVertexAttrib4uivARB GLeeFuncPtr_glVertexAttrib4uivARB #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4usvARB #define GLEE_H_DEFINED_glVertexAttrib4usvARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4USVARBPROC) (GLuint index, const GLushort * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4USVARBPROC GLeeFuncPtr_glVertexAttrib4usvARB; #define glVertexAttrib4usvARB GLeeFuncPtr_glVertexAttrib4usvARB #endif #ifndef GLEE_H_DEFINED_glVertexAttribPointerARB #define GLEE_H_DEFINED_glVertexAttribPointerARB typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBPOINTERARBPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid * pointer); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBPOINTERARBPROC GLeeFuncPtr_glVertexAttribPointerARB; #define glVertexAttribPointerARB GLeeFuncPtr_glVertexAttribPointerARB #endif #ifndef GLEE_H_DEFINED_glEnableVertexAttribArrayARB #define GLEE_H_DEFINED_glEnableVertexAttribArrayARB typedef void (APIENTRYP GLEEPFNGLENABLEVERTEXATTRIBARRAYARBPROC) (GLuint index); GLEE_EXTERN GLEEPFNGLENABLEVERTEXATTRIBARRAYARBPROC GLeeFuncPtr_glEnableVertexAttribArrayARB; #define glEnableVertexAttribArrayARB GLeeFuncPtr_glEnableVertexAttribArrayARB #endif #ifndef GLEE_H_DEFINED_glDisableVertexAttribArrayARB #define GLEE_H_DEFINED_glDisableVertexAttribArrayARB typedef void (APIENTRYP GLEEPFNGLDISABLEVERTEXATTRIBARRAYARBPROC) (GLuint index); GLEE_EXTERN GLEEPFNGLDISABLEVERTEXATTRIBARRAYARBPROC GLeeFuncPtr_glDisableVertexAttribArrayARB; #define glDisableVertexAttribArrayARB GLeeFuncPtr_glDisableVertexAttribArrayARB #endif #ifndef GLEE_H_DEFINED_glProgramStringARB #define GLEE_H_DEFINED_glProgramStringARB typedef void (APIENTRYP GLEEPFNGLPROGRAMSTRINGARBPROC) (GLenum target, GLenum format, GLsizei len, const GLvoid * string); GLEE_EXTERN GLEEPFNGLPROGRAMSTRINGARBPROC GLeeFuncPtr_glProgramStringARB; #define glProgramStringARB GLeeFuncPtr_glProgramStringARB #endif #ifndef GLEE_H_DEFINED_glBindProgramARB #define GLEE_H_DEFINED_glBindProgramARB typedef void (APIENTRYP GLEEPFNGLBINDPROGRAMARBPROC) (GLenum target, GLuint program); GLEE_EXTERN GLEEPFNGLBINDPROGRAMARBPROC GLeeFuncPtr_glBindProgramARB; #define glBindProgramARB GLeeFuncPtr_glBindProgramARB #endif #ifndef GLEE_H_DEFINED_glDeleteProgramsARB #define GLEE_H_DEFINED_glDeleteProgramsARB typedef void (APIENTRYP GLEEPFNGLDELETEPROGRAMSARBPROC) (GLsizei n, const GLuint * programs); GLEE_EXTERN GLEEPFNGLDELETEPROGRAMSARBPROC GLeeFuncPtr_glDeleteProgramsARB; #define glDeleteProgramsARB GLeeFuncPtr_glDeleteProgramsARB #endif #ifndef GLEE_H_DEFINED_glGenProgramsARB #define GLEE_H_DEFINED_glGenProgramsARB typedef void (APIENTRYP GLEEPFNGLGENPROGRAMSARBPROC) (GLsizei n, GLuint * programs); GLEE_EXTERN GLEEPFNGLGENPROGRAMSARBPROC GLeeFuncPtr_glGenProgramsARB; #define glGenProgramsARB GLeeFuncPtr_glGenProgramsARB #endif #ifndef GLEE_H_DEFINED_glProgramEnvParameter4dARB #define GLEE_H_DEFINED_glProgramEnvParameter4dARB typedef void (APIENTRYP GLEEPFNGLPROGRAMENVPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLEE_EXTERN GLEEPFNGLPROGRAMENVPARAMETER4DARBPROC GLeeFuncPtr_glProgramEnvParameter4dARB; #define glProgramEnvParameter4dARB GLeeFuncPtr_glProgramEnvParameter4dARB #endif #ifndef GLEE_H_DEFINED_glProgramEnvParameter4dvARB #define GLEE_H_DEFINED_glProgramEnvParameter4dvARB typedef void (APIENTRYP GLEEPFNGLPROGRAMENVPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble * params); GLEE_EXTERN GLEEPFNGLPROGRAMENVPARAMETER4DVARBPROC GLeeFuncPtr_glProgramEnvParameter4dvARB; #define glProgramEnvParameter4dvARB GLeeFuncPtr_glProgramEnvParameter4dvARB #endif #ifndef GLEE_H_DEFINED_glProgramEnvParameter4fARB #define GLEE_H_DEFINED_glProgramEnvParameter4fARB typedef void (APIENTRYP GLEEPFNGLPROGRAMENVPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); GLEE_EXTERN GLEEPFNGLPROGRAMENVPARAMETER4FARBPROC GLeeFuncPtr_glProgramEnvParameter4fARB; #define glProgramEnvParameter4fARB GLeeFuncPtr_glProgramEnvParameter4fARB #endif #ifndef GLEE_H_DEFINED_glProgramEnvParameter4fvARB #define GLEE_H_DEFINED_glProgramEnvParameter4fvARB typedef void (APIENTRYP GLEEPFNGLPROGRAMENVPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat * params); GLEE_EXTERN GLEEPFNGLPROGRAMENVPARAMETER4FVARBPROC GLeeFuncPtr_glProgramEnvParameter4fvARB; #define glProgramEnvParameter4fvARB GLeeFuncPtr_glProgramEnvParameter4fvARB #endif #ifndef GLEE_H_DEFINED_glProgramLocalParameter4dARB #define GLEE_H_DEFINED_glProgramLocalParameter4dARB typedef void (APIENTRYP GLEEPFNGLPROGRAMLOCALPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLEE_EXTERN GLEEPFNGLPROGRAMLOCALPARAMETER4DARBPROC GLeeFuncPtr_glProgramLocalParameter4dARB; #define glProgramLocalParameter4dARB GLeeFuncPtr_glProgramLocalParameter4dARB #endif #ifndef GLEE_H_DEFINED_glProgramLocalParameter4dvARB #define GLEE_H_DEFINED_glProgramLocalParameter4dvARB typedef void (APIENTRYP GLEEPFNGLPROGRAMLOCALPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble * params); GLEE_EXTERN GLEEPFNGLPROGRAMLOCALPARAMETER4DVARBPROC GLeeFuncPtr_glProgramLocalParameter4dvARB; #define glProgramLocalParameter4dvARB GLeeFuncPtr_glProgramLocalParameter4dvARB #endif #ifndef GLEE_H_DEFINED_glProgramLocalParameter4fARB #define GLEE_H_DEFINED_glProgramLocalParameter4fARB typedef void (APIENTRYP GLEEPFNGLPROGRAMLOCALPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); GLEE_EXTERN GLEEPFNGLPROGRAMLOCALPARAMETER4FARBPROC GLeeFuncPtr_glProgramLocalParameter4fARB; #define glProgramLocalParameter4fARB GLeeFuncPtr_glProgramLocalParameter4fARB #endif #ifndef GLEE_H_DEFINED_glProgramLocalParameter4fvARB #define GLEE_H_DEFINED_glProgramLocalParameter4fvARB typedef void (APIENTRYP GLEEPFNGLPROGRAMLOCALPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat * params); GLEE_EXTERN GLEEPFNGLPROGRAMLOCALPARAMETER4FVARBPROC GLeeFuncPtr_glProgramLocalParameter4fvARB; #define glProgramLocalParameter4fvARB GLeeFuncPtr_glProgramLocalParameter4fvARB #endif #ifndef GLEE_H_DEFINED_glGetProgramEnvParameterdvARB #define GLEE_H_DEFINED_glGetProgramEnvParameterdvARB typedef void (APIENTRYP GLEEPFNGLGETPROGRAMENVPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble * params); GLEE_EXTERN GLEEPFNGLGETPROGRAMENVPARAMETERDVARBPROC GLeeFuncPtr_glGetProgramEnvParameterdvARB; #define glGetProgramEnvParameterdvARB GLeeFuncPtr_glGetProgramEnvParameterdvARB #endif #ifndef GLEE_H_DEFINED_glGetProgramEnvParameterfvARB #define GLEE_H_DEFINED_glGetProgramEnvParameterfvARB typedef void (APIENTRYP GLEEPFNGLGETPROGRAMENVPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETPROGRAMENVPARAMETERFVARBPROC GLeeFuncPtr_glGetProgramEnvParameterfvARB; #define glGetProgramEnvParameterfvARB GLeeFuncPtr_glGetProgramEnvParameterfvARB #endif #ifndef GLEE_H_DEFINED_glGetProgramLocalParameterdvARB #define GLEE_H_DEFINED_glGetProgramLocalParameterdvARB typedef void (APIENTRYP GLEEPFNGLGETPROGRAMLOCALPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble * params); GLEE_EXTERN GLEEPFNGLGETPROGRAMLOCALPARAMETERDVARBPROC GLeeFuncPtr_glGetProgramLocalParameterdvARB; #define glGetProgramLocalParameterdvARB GLeeFuncPtr_glGetProgramLocalParameterdvARB #endif #ifndef GLEE_H_DEFINED_glGetProgramLocalParameterfvARB #define GLEE_H_DEFINED_glGetProgramLocalParameterfvARB typedef void (APIENTRYP GLEEPFNGLGETPROGRAMLOCALPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETPROGRAMLOCALPARAMETERFVARBPROC GLeeFuncPtr_glGetProgramLocalParameterfvARB; #define glGetProgramLocalParameterfvARB GLeeFuncPtr_glGetProgramLocalParameterfvARB #endif #ifndef GLEE_H_DEFINED_glGetProgramivARB #define GLEE_H_DEFINED_glGetProgramivARB typedef void (APIENTRYP GLEEPFNGLGETPROGRAMIVARBPROC) (GLenum target, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETPROGRAMIVARBPROC GLeeFuncPtr_glGetProgramivARB; #define glGetProgramivARB GLeeFuncPtr_glGetProgramivARB #endif #ifndef GLEE_H_DEFINED_glGetProgramStringARB #define GLEE_H_DEFINED_glGetProgramStringARB typedef void (APIENTRYP GLEEPFNGLGETPROGRAMSTRINGARBPROC) (GLenum target, GLenum pname, GLvoid * string); GLEE_EXTERN GLEEPFNGLGETPROGRAMSTRINGARBPROC GLeeFuncPtr_glGetProgramStringARB; #define glGetProgramStringARB GLeeFuncPtr_glGetProgramStringARB #endif #ifndef GLEE_H_DEFINED_glGetVertexAttribdvARB #define GLEE_H_DEFINED_glGetVertexAttribdvARB typedef void (APIENTRYP GLEEPFNGLGETVERTEXATTRIBDVARBPROC) (GLuint index, GLenum pname, GLdouble * params); GLEE_EXTERN GLEEPFNGLGETVERTEXATTRIBDVARBPROC GLeeFuncPtr_glGetVertexAttribdvARB; #define glGetVertexAttribdvARB GLeeFuncPtr_glGetVertexAttribdvARB #endif #ifndef GLEE_H_DEFINED_glGetVertexAttribfvARB #define GLEE_H_DEFINED_glGetVertexAttribfvARB typedef void (APIENTRYP GLEEPFNGLGETVERTEXATTRIBFVARBPROC) (GLuint index, GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETVERTEXATTRIBFVARBPROC GLeeFuncPtr_glGetVertexAttribfvARB; #define glGetVertexAttribfvARB GLeeFuncPtr_glGetVertexAttribfvARB #endif #ifndef GLEE_H_DEFINED_glGetVertexAttribivARB #define GLEE_H_DEFINED_glGetVertexAttribivARB typedef void (APIENTRYP GLEEPFNGLGETVERTEXATTRIBIVARBPROC) (GLuint index, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETVERTEXATTRIBIVARBPROC GLeeFuncPtr_glGetVertexAttribivARB; #define glGetVertexAttribivARB GLeeFuncPtr_glGetVertexAttribivARB #endif #ifndef GLEE_H_DEFINED_glGetVertexAttribPointervARB #define GLEE_H_DEFINED_glGetVertexAttribPointervARB typedef void (APIENTRYP GLEEPFNGLGETVERTEXATTRIBPOINTERVARBPROC) (GLuint index, GLenum pname, GLvoid* * pointer); GLEE_EXTERN GLEEPFNGLGETVERTEXATTRIBPOINTERVARBPROC GLeeFuncPtr_glGetVertexAttribPointervARB; #define glGetVertexAttribPointervARB GLeeFuncPtr_glGetVertexAttribPointervARB #endif #ifndef GLEE_H_DEFINED_glIsProgramARB #define GLEE_H_DEFINED_glIsProgramARB typedef GLboolean (APIENTRYP GLEEPFNGLISPROGRAMARBPROC) (GLuint program); GLEE_EXTERN GLEEPFNGLISPROGRAMARBPROC GLeeFuncPtr_glIsProgramARB; #define glIsProgramARB GLeeFuncPtr_glIsProgramARB #endif #endif /* GL_ARB_fragment_program */ #ifndef GL_ARB_fragment_program #define GL_ARB_fragment_program 1 #define __GLEE_GL_ARB_fragment_program 1 /* Constants */ #define GL_FRAGMENT_PROGRAM_ARB 0x8804 #define GL_PROGRAM_ALU_INSTRUCTIONS_ARB 0x8805 #define GL_PROGRAM_TEX_INSTRUCTIONS_ARB 0x8806 #define GL_PROGRAM_TEX_INDIRECTIONS_ARB 0x8807 #define GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x8808 #define GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x8809 #define GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x880A #define GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB 0x880B #define GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB 0x880C #define GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB 0x880D #define GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x880E #define GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x880F #define GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x8810 #define GL_MAX_TEXTURE_COORDS_ARB 0x8871 #define GL_MAX_TEXTURE_IMAGE_UNITS_ARB 0x8872 #endif /* GL_ARB_vertex_buffer_object */ #ifndef GL_ARB_vertex_buffer_object #define GL_ARB_vertex_buffer_object 1 #define __GLEE_GL_ARB_vertex_buffer_object 1 /* Constants */ #define GL_BUFFER_SIZE_ARB 0x8764 #define GL_BUFFER_USAGE_ARB 0x8765 #define GL_ARRAY_BUFFER_ARB 0x8892 #define GL_ELEMENT_ARRAY_BUFFER_ARB 0x8893 #define GL_ARRAY_BUFFER_BINDING_ARB 0x8894 #define GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB 0x8895 #define GL_VERTEX_ARRAY_BUFFER_BINDING_ARB 0x8896 #define GL_NORMAL_ARRAY_BUFFER_BINDING_ARB 0x8897 #define GL_COLOR_ARRAY_BUFFER_BINDING_ARB 0x8898 #define GL_INDEX_ARRAY_BUFFER_BINDING_ARB 0x8899 #define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB 0x889A #define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB 0x889B #define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB 0x889C #define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB 0x889D #define GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB 0x889E #define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB 0x889F #define GL_READ_ONLY_ARB 0x88B8 #define GL_WRITE_ONLY_ARB 0x88B9 #define GL_READ_WRITE_ARB 0x88BA #define GL_BUFFER_ACCESS_ARB 0x88BB #define GL_BUFFER_MAPPED_ARB 0x88BC #define GL_BUFFER_MAP_POINTER_ARB 0x88BD #define GL_STREAM_DRAW_ARB 0x88E0 #define GL_STREAM_READ_ARB 0x88E1 #define GL_STREAM_COPY_ARB 0x88E2 #define GL_STATIC_DRAW_ARB 0x88E4 #define GL_STATIC_READ_ARB 0x88E5 #define GL_STATIC_COPY_ARB 0x88E6 #define GL_DYNAMIC_DRAW_ARB 0x88E8 #define GL_DYNAMIC_READ_ARB 0x88E9 #define GL_DYNAMIC_COPY_ARB 0x88EA #ifndef GLEE_H_DEFINED_glBindBufferARB #define GLEE_H_DEFINED_glBindBufferARB typedef void (APIENTRYP GLEEPFNGLBINDBUFFERARBPROC) (GLenum target, GLuint buffer); GLEE_EXTERN GLEEPFNGLBINDBUFFERARBPROC GLeeFuncPtr_glBindBufferARB; #define glBindBufferARB GLeeFuncPtr_glBindBufferARB #endif #ifndef GLEE_H_DEFINED_glDeleteBuffersARB #define GLEE_H_DEFINED_glDeleteBuffersARB typedef void (APIENTRYP GLEEPFNGLDELETEBUFFERSARBPROC) (GLsizei n, const GLuint * buffers); GLEE_EXTERN GLEEPFNGLDELETEBUFFERSARBPROC GLeeFuncPtr_glDeleteBuffersARB; #define glDeleteBuffersARB GLeeFuncPtr_glDeleteBuffersARB #endif #ifndef GLEE_H_DEFINED_glGenBuffersARB #define GLEE_H_DEFINED_glGenBuffersARB typedef void (APIENTRYP GLEEPFNGLGENBUFFERSARBPROC) (GLsizei n, GLuint * buffers); GLEE_EXTERN GLEEPFNGLGENBUFFERSARBPROC GLeeFuncPtr_glGenBuffersARB; #define glGenBuffersARB GLeeFuncPtr_glGenBuffersARB #endif #ifndef GLEE_H_DEFINED_glIsBufferARB #define GLEE_H_DEFINED_glIsBufferARB typedef GLboolean (APIENTRYP GLEEPFNGLISBUFFERARBPROC) (GLuint buffer); GLEE_EXTERN GLEEPFNGLISBUFFERARBPROC GLeeFuncPtr_glIsBufferARB; #define glIsBufferARB GLeeFuncPtr_glIsBufferARB #endif #ifndef GLEE_H_DEFINED_glBufferDataARB #define GLEE_H_DEFINED_glBufferDataARB typedef void (APIENTRYP GLEEPFNGLBUFFERDATAARBPROC) (GLenum target, GLsizeiptrARB size, const GLvoid * data, GLenum usage); GLEE_EXTERN GLEEPFNGLBUFFERDATAARBPROC GLeeFuncPtr_glBufferDataARB; #define glBufferDataARB GLeeFuncPtr_glBufferDataARB #endif #ifndef GLEE_H_DEFINED_glBufferSubDataARB #define GLEE_H_DEFINED_glBufferSubDataARB typedef void (APIENTRYP GLEEPFNGLBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid * data); GLEE_EXTERN GLEEPFNGLBUFFERSUBDATAARBPROC GLeeFuncPtr_glBufferSubDataARB; #define glBufferSubDataARB GLeeFuncPtr_glBufferSubDataARB #endif #ifndef GLEE_H_DEFINED_glGetBufferSubDataARB #define GLEE_H_DEFINED_glGetBufferSubDataARB typedef void (APIENTRYP GLEEPFNGLGETBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid * data); GLEE_EXTERN GLEEPFNGLGETBUFFERSUBDATAARBPROC GLeeFuncPtr_glGetBufferSubDataARB; #define glGetBufferSubDataARB GLeeFuncPtr_glGetBufferSubDataARB #endif #ifndef GLEE_H_DEFINED_glMapBufferARB #define GLEE_H_DEFINED_glMapBufferARB typedef GLvoid* (APIENTRYP GLEEPFNGLMAPBUFFERARBPROC) (GLenum target, GLenum access); GLEE_EXTERN GLEEPFNGLMAPBUFFERARBPROC GLeeFuncPtr_glMapBufferARB; #define glMapBufferARB GLeeFuncPtr_glMapBufferARB #endif #ifndef GLEE_H_DEFINED_glUnmapBufferARB #define GLEE_H_DEFINED_glUnmapBufferARB typedef GLboolean (APIENTRYP GLEEPFNGLUNMAPBUFFERARBPROC) (GLenum target); GLEE_EXTERN GLEEPFNGLUNMAPBUFFERARBPROC GLeeFuncPtr_glUnmapBufferARB; #define glUnmapBufferARB GLeeFuncPtr_glUnmapBufferARB #endif #ifndef GLEE_H_DEFINED_glGetBufferParameterivARB #define GLEE_H_DEFINED_glGetBufferParameterivARB typedef void (APIENTRYP GLEEPFNGLGETBUFFERPARAMETERIVARBPROC) (GLenum target, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETBUFFERPARAMETERIVARBPROC GLeeFuncPtr_glGetBufferParameterivARB; #define glGetBufferParameterivARB GLeeFuncPtr_glGetBufferParameterivARB #endif #ifndef GLEE_H_DEFINED_glGetBufferPointervARB #define GLEE_H_DEFINED_glGetBufferPointervARB typedef void (APIENTRYP GLEEPFNGLGETBUFFERPOINTERVARBPROC) (GLenum target, GLenum pname, GLvoid* * params); GLEE_EXTERN GLEEPFNGLGETBUFFERPOINTERVARBPROC GLeeFuncPtr_glGetBufferPointervARB; #define glGetBufferPointervARB GLeeFuncPtr_glGetBufferPointervARB #endif #endif /* GL_ARB_occlusion_query */ #ifndef GL_ARB_occlusion_query #define GL_ARB_occlusion_query 1 #define __GLEE_GL_ARB_occlusion_query 1 /* Constants */ #define GL_QUERY_COUNTER_BITS_ARB 0x8864 #define GL_CURRENT_QUERY_ARB 0x8865 #define GL_QUERY_RESULT_ARB 0x8866 #define GL_QUERY_RESULT_AVAILABLE_ARB 0x8867 #define GL_SAMPLES_PASSED_ARB 0x8914 #ifndef GLEE_H_DEFINED_glGenQueriesARB #define GLEE_H_DEFINED_glGenQueriesARB typedef void (APIENTRYP GLEEPFNGLGENQUERIESARBPROC) (GLsizei n, GLuint * ids); GLEE_EXTERN GLEEPFNGLGENQUERIESARBPROC GLeeFuncPtr_glGenQueriesARB; #define glGenQueriesARB GLeeFuncPtr_glGenQueriesARB #endif #ifndef GLEE_H_DEFINED_glDeleteQueriesARB #define GLEE_H_DEFINED_glDeleteQueriesARB typedef void (APIENTRYP GLEEPFNGLDELETEQUERIESARBPROC) (GLsizei n, const GLuint * ids); GLEE_EXTERN GLEEPFNGLDELETEQUERIESARBPROC GLeeFuncPtr_glDeleteQueriesARB; #define glDeleteQueriesARB GLeeFuncPtr_glDeleteQueriesARB #endif #ifndef GLEE_H_DEFINED_glIsQueryARB #define GLEE_H_DEFINED_glIsQueryARB typedef GLboolean (APIENTRYP GLEEPFNGLISQUERYARBPROC) (GLuint id); GLEE_EXTERN GLEEPFNGLISQUERYARBPROC GLeeFuncPtr_glIsQueryARB; #define glIsQueryARB GLeeFuncPtr_glIsQueryARB #endif #ifndef GLEE_H_DEFINED_glBeginQueryARB #define GLEE_H_DEFINED_glBeginQueryARB typedef void (APIENTRYP GLEEPFNGLBEGINQUERYARBPROC) (GLenum target, GLuint id); GLEE_EXTERN GLEEPFNGLBEGINQUERYARBPROC GLeeFuncPtr_glBeginQueryARB; #define glBeginQueryARB GLeeFuncPtr_glBeginQueryARB #endif #ifndef GLEE_H_DEFINED_glEndQueryARB #define GLEE_H_DEFINED_glEndQueryARB typedef void (APIENTRYP GLEEPFNGLENDQUERYARBPROC) (GLenum target); GLEE_EXTERN GLEEPFNGLENDQUERYARBPROC GLeeFuncPtr_glEndQueryARB; #define glEndQueryARB GLeeFuncPtr_glEndQueryARB #endif #ifndef GLEE_H_DEFINED_glGetQueryivARB #define GLEE_H_DEFINED_glGetQueryivARB typedef void (APIENTRYP GLEEPFNGLGETQUERYIVARBPROC) (GLenum target, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETQUERYIVARBPROC GLeeFuncPtr_glGetQueryivARB; #define glGetQueryivARB GLeeFuncPtr_glGetQueryivARB #endif #ifndef GLEE_H_DEFINED_glGetQueryObjectivARB #define GLEE_H_DEFINED_glGetQueryObjectivARB typedef void (APIENTRYP GLEEPFNGLGETQUERYOBJECTIVARBPROC) (GLuint id, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETQUERYOBJECTIVARBPROC GLeeFuncPtr_glGetQueryObjectivARB; #define glGetQueryObjectivARB GLeeFuncPtr_glGetQueryObjectivARB #endif #ifndef GLEE_H_DEFINED_glGetQueryObjectuivARB #define GLEE_H_DEFINED_glGetQueryObjectuivARB typedef void (APIENTRYP GLEEPFNGLGETQUERYOBJECTUIVARBPROC) (GLuint id, GLenum pname, GLuint * params); GLEE_EXTERN GLEEPFNGLGETQUERYOBJECTUIVARBPROC GLeeFuncPtr_glGetQueryObjectuivARB; #define glGetQueryObjectuivARB GLeeFuncPtr_glGetQueryObjectuivARB #endif #endif /* GL_ARB_shader_objects */ #ifndef GL_ARB_shader_objects #define GL_ARB_shader_objects 1 #define __GLEE_GL_ARB_shader_objects 1 /* Constants */ #define GL_PROGRAM_OBJECT_ARB 0x8B40 #define GL_SHADER_OBJECT_ARB 0x8B48 #define GL_OBJECT_TYPE_ARB 0x8B4E #define GL_OBJECT_SUBTYPE_ARB 0x8B4F #define GL_FLOAT_VEC2_ARB 0x8B50 #define GL_FLOAT_VEC3_ARB 0x8B51 #define GL_FLOAT_VEC4_ARB 0x8B52 #define GL_INT_VEC2_ARB 0x8B53 #define GL_INT_VEC3_ARB 0x8B54 #define GL_INT_VEC4_ARB 0x8B55 #define GL_BOOL_ARB 0x8B56 #define GL_BOOL_VEC2_ARB 0x8B57 #define GL_BOOL_VEC3_ARB 0x8B58 #define GL_BOOL_VEC4_ARB 0x8B59 #define GL_FLOAT_MAT2_ARB 0x8B5A #define GL_FLOAT_MAT3_ARB 0x8B5B #define GL_FLOAT_MAT4_ARB 0x8B5C #define GL_SAMPLER_1D_ARB 0x8B5D #define GL_SAMPLER_2D_ARB 0x8B5E #define GL_SAMPLER_3D_ARB 0x8B5F #define GL_SAMPLER_CUBE_ARB 0x8B60 #define GL_SAMPLER_1D_SHADOW_ARB 0x8B61 #define GL_SAMPLER_2D_SHADOW_ARB 0x8B62 #define GL_SAMPLER_2D_RECT_ARB 0x8B63 #define GL_SAMPLER_2D_RECT_SHADOW_ARB 0x8B64 #define GL_OBJECT_DELETE_STATUS_ARB 0x8B80 #define GL_OBJECT_COMPILE_STATUS_ARB 0x8B81 #define GL_OBJECT_LINK_STATUS_ARB 0x8B82 #define GL_OBJECT_VALIDATE_STATUS_ARB 0x8B83 #define GL_OBJECT_INFO_LOG_LENGTH_ARB 0x8B84 #define GL_OBJECT_ATTACHED_OBJECTS_ARB 0x8B85 #define GL_OBJECT_ACTIVE_UNIFORMS_ARB 0x8B86 #define GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB 0x8B87 #define GL_OBJECT_SHADER_SOURCE_LENGTH_ARB 0x8B88 #ifndef GLEE_H_DEFINED_glDeleteObjectARB #define GLEE_H_DEFINED_glDeleteObjectARB typedef void (APIENTRYP GLEEPFNGLDELETEOBJECTARBPROC) (GLhandleARB obj); GLEE_EXTERN GLEEPFNGLDELETEOBJECTARBPROC GLeeFuncPtr_glDeleteObjectARB; #define glDeleteObjectARB GLeeFuncPtr_glDeleteObjectARB #endif #ifndef GLEE_H_DEFINED_glGetHandleARB #define GLEE_H_DEFINED_glGetHandleARB typedef GLhandleARB (APIENTRYP GLEEPFNGLGETHANDLEARBPROC) (GLenum pname); GLEE_EXTERN GLEEPFNGLGETHANDLEARBPROC GLeeFuncPtr_glGetHandleARB; #define glGetHandleARB GLeeFuncPtr_glGetHandleARB #endif #ifndef GLEE_H_DEFINED_glDetachObjectARB #define GLEE_H_DEFINED_glDetachObjectARB typedef void (APIENTRYP GLEEPFNGLDETACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB attachedObj); GLEE_EXTERN GLEEPFNGLDETACHOBJECTARBPROC GLeeFuncPtr_glDetachObjectARB; #define glDetachObjectARB GLeeFuncPtr_glDetachObjectARB #endif #ifndef GLEE_H_DEFINED_glCreateShaderObjectARB #define GLEE_H_DEFINED_glCreateShaderObjectARB typedef GLhandleARB (APIENTRYP GLEEPFNGLCREATESHADEROBJECTARBPROC) (GLenum shaderType); GLEE_EXTERN GLEEPFNGLCREATESHADEROBJECTARBPROC GLeeFuncPtr_glCreateShaderObjectARB; #define glCreateShaderObjectARB GLeeFuncPtr_glCreateShaderObjectARB #endif #ifndef GLEE_H_DEFINED_glShaderSourceARB #define GLEE_H_DEFINED_glShaderSourceARB typedef void (APIENTRYP GLEEPFNGLSHADERSOURCEARBPROC) (GLhandleARB shaderObj, GLsizei count, const GLcharARB* * string, const GLint * length); GLEE_EXTERN GLEEPFNGLSHADERSOURCEARBPROC GLeeFuncPtr_glShaderSourceARB; #define glShaderSourceARB GLeeFuncPtr_glShaderSourceARB #endif #ifndef GLEE_H_DEFINED_glCompileShaderARB #define GLEE_H_DEFINED_glCompileShaderARB typedef void (APIENTRYP GLEEPFNGLCOMPILESHADERARBPROC) (GLhandleARB shaderObj); GLEE_EXTERN GLEEPFNGLCOMPILESHADERARBPROC GLeeFuncPtr_glCompileShaderARB; #define glCompileShaderARB GLeeFuncPtr_glCompileShaderARB #endif #ifndef GLEE_H_DEFINED_glCreateProgramObjectARB #define GLEE_H_DEFINED_glCreateProgramObjectARB typedef GLhandleARB (APIENTRYP GLEEPFNGLCREATEPROGRAMOBJECTARBPROC) (); GLEE_EXTERN GLEEPFNGLCREATEPROGRAMOBJECTARBPROC GLeeFuncPtr_glCreateProgramObjectARB; #define glCreateProgramObjectARB GLeeFuncPtr_glCreateProgramObjectARB #endif #ifndef GLEE_H_DEFINED_glAttachObjectARB #define GLEE_H_DEFINED_glAttachObjectARB typedef void (APIENTRYP GLEEPFNGLATTACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB obj); GLEE_EXTERN GLEEPFNGLATTACHOBJECTARBPROC GLeeFuncPtr_glAttachObjectARB; #define glAttachObjectARB GLeeFuncPtr_glAttachObjectARB #endif #ifndef GLEE_H_DEFINED_glLinkProgramARB #define GLEE_H_DEFINED_glLinkProgramARB typedef void (APIENTRYP GLEEPFNGLLINKPROGRAMARBPROC) (GLhandleARB programObj); GLEE_EXTERN GLEEPFNGLLINKPROGRAMARBPROC GLeeFuncPtr_glLinkProgramARB; #define glLinkProgramARB GLeeFuncPtr_glLinkProgramARB #endif #ifndef GLEE_H_DEFINED_glUseProgramObjectARB #define GLEE_H_DEFINED_glUseProgramObjectARB typedef void (APIENTRYP GLEEPFNGLUSEPROGRAMOBJECTARBPROC) (GLhandleARB programObj); GLEE_EXTERN GLEEPFNGLUSEPROGRAMOBJECTARBPROC GLeeFuncPtr_glUseProgramObjectARB; #define glUseProgramObjectARB GLeeFuncPtr_glUseProgramObjectARB #endif #ifndef GLEE_H_DEFINED_glValidateProgramARB #define GLEE_H_DEFINED_glValidateProgramARB typedef void (APIENTRYP GLEEPFNGLVALIDATEPROGRAMARBPROC) (GLhandleARB programObj); GLEE_EXTERN GLEEPFNGLVALIDATEPROGRAMARBPROC GLeeFuncPtr_glValidateProgramARB; #define glValidateProgramARB GLeeFuncPtr_glValidateProgramARB #endif #ifndef GLEE_H_DEFINED_glUniform1fARB #define GLEE_H_DEFINED_glUniform1fARB typedef void (APIENTRYP GLEEPFNGLUNIFORM1FARBPROC) (GLint location, GLfloat v0); GLEE_EXTERN GLEEPFNGLUNIFORM1FARBPROC GLeeFuncPtr_glUniform1fARB; #define glUniform1fARB GLeeFuncPtr_glUniform1fARB #endif #ifndef GLEE_H_DEFINED_glUniform2fARB #define GLEE_H_DEFINED_glUniform2fARB typedef void (APIENTRYP GLEEPFNGLUNIFORM2FARBPROC) (GLint location, GLfloat v0, GLfloat v1); GLEE_EXTERN GLEEPFNGLUNIFORM2FARBPROC GLeeFuncPtr_glUniform2fARB; #define glUniform2fARB GLeeFuncPtr_glUniform2fARB #endif #ifndef GLEE_H_DEFINED_glUniform3fARB #define GLEE_H_DEFINED_glUniform3fARB typedef void (APIENTRYP GLEEPFNGLUNIFORM3FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); GLEE_EXTERN GLEEPFNGLUNIFORM3FARBPROC GLeeFuncPtr_glUniform3fARB; #define glUniform3fARB GLeeFuncPtr_glUniform3fARB #endif #ifndef GLEE_H_DEFINED_glUniform4fARB #define GLEE_H_DEFINED_glUniform4fARB typedef void (APIENTRYP GLEEPFNGLUNIFORM4FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); GLEE_EXTERN GLEEPFNGLUNIFORM4FARBPROC GLeeFuncPtr_glUniform4fARB; #define glUniform4fARB GLeeFuncPtr_glUniform4fARB #endif #ifndef GLEE_H_DEFINED_glUniform1iARB #define GLEE_H_DEFINED_glUniform1iARB typedef void (APIENTRYP GLEEPFNGLUNIFORM1IARBPROC) (GLint location, GLint v0); GLEE_EXTERN GLEEPFNGLUNIFORM1IARBPROC GLeeFuncPtr_glUniform1iARB; #define glUniform1iARB GLeeFuncPtr_glUniform1iARB #endif #ifndef GLEE_H_DEFINED_glUniform2iARB #define GLEE_H_DEFINED_glUniform2iARB typedef void (APIENTRYP GLEEPFNGLUNIFORM2IARBPROC) (GLint location, GLint v0, GLint v1); GLEE_EXTERN GLEEPFNGLUNIFORM2IARBPROC GLeeFuncPtr_glUniform2iARB; #define glUniform2iARB GLeeFuncPtr_glUniform2iARB #endif #ifndef GLEE_H_DEFINED_glUniform3iARB #define GLEE_H_DEFINED_glUniform3iARB typedef void (APIENTRYP GLEEPFNGLUNIFORM3IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2); GLEE_EXTERN GLEEPFNGLUNIFORM3IARBPROC GLeeFuncPtr_glUniform3iARB; #define glUniform3iARB GLeeFuncPtr_glUniform3iARB #endif #ifndef GLEE_H_DEFINED_glUniform4iARB #define GLEE_H_DEFINED_glUniform4iARB typedef void (APIENTRYP GLEEPFNGLUNIFORM4IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); GLEE_EXTERN GLEEPFNGLUNIFORM4IARBPROC GLeeFuncPtr_glUniform4iARB; #define glUniform4iARB GLeeFuncPtr_glUniform4iARB #endif #ifndef GLEE_H_DEFINED_glUniform1fvARB #define GLEE_H_DEFINED_glUniform1fvARB typedef void (APIENTRYP GLEEPFNGLUNIFORM1FVARBPROC) (GLint location, GLsizei count, const GLfloat * value); GLEE_EXTERN GLEEPFNGLUNIFORM1FVARBPROC GLeeFuncPtr_glUniform1fvARB; #define glUniform1fvARB GLeeFuncPtr_glUniform1fvARB #endif #ifndef GLEE_H_DEFINED_glUniform2fvARB #define GLEE_H_DEFINED_glUniform2fvARB typedef void (APIENTRYP GLEEPFNGLUNIFORM2FVARBPROC) (GLint location, GLsizei count, const GLfloat * value); GLEE_EXTERN GLEEPFNGLUNIFORM2FVARBPROC GLeeFuncPtr_glUniform2fvARB; #define glUniform2fvARB GLeeFuncPtr_glUniform2fvARB #endif #ifndef GLEE_H_DEFINED_glUniform3fvARB #define GLEE_H_DEFINED_glUniform3fvARB typedef void (APIENTRYP GLEEPFNGLUNIFORM3FVARBPROC) (GLint location, GLsizei count, const GLfloat * value); GLEE_EXTERN GLEEPFNGLUNIFORM3FVARBPROC GLeeFuncPtr_glUniform3fvARB; #define glUniform3fvARB GLeeFuncPtr_glUniform3fvARB #endif #ifndef GLEE_H_DEFINED_glUniform4fvARB #define GLEE_H_DEFINED_glUniform4fvARB typedef void (APIENTRYP GLEEPFNGLUNIFORM4FVARBPROC) (GLint location, GLsizei count, const GLfloat * value); GLEE_EXTERN GLEEPFNGLUNIFORM4FVARBPROC GLeeFuncPtr_glUniform4fvARB; #define glUniform4fvARB GLeeFuncPtr_glUniform4fvARB #endif #ifndef GLEE_H_DEFINED_glUniform1ivARB #define GLEE_H_DEFINED_glUniform1ivARB typedef void (APIENTRYP GLEEPFNGLUNIFORM1IVARBPROC) (GLint location, GLsizei count, const GLint * value); GLEE_EXTERN GLEEPFNGLUNIFORM1IVARBPROC GLeeFuncPtr_glUniform1ivARB; #define glUniform1ivARB GLeeFuncPtr_glUniform1ivARB #endif #ifndef GLEE_H_DEFINED_glUniform2ivARB #define GLEE_H_DEFINED_glUniform2ivARB typedef void (APIENTRYP GLEEPFNGLUNIFORM2IVARBPROC) (GLint location, GLsizei count, const GLint * value); GLEE_EXTERN GLEEPFNGLUNIFORM2IVARBPROC GLeeFuncPtr_glUniform2ivARB; #define glUniform2ivARB GLeeFuncPtr_glUniform2ivARB #endif #ifndef GLEE_H_DEFINED_glUniform3ivARB #define GLEE_H_DEFINED_glUniform3ivARB typedef void (APIENTRYP GLEEPFNGLUNIFORM3IVARBPROC) (GLint location, GLsizei count, const GLint * value); GLEE_EXTERN GLEEPFNGLUNIFORM3IVARBPROC GLeeFuncPtr_glUniform3ivARB; #define glUniform3ivARB GLeeFuncPtr_glUniform3ivARB #endif #ifndef GLEE_H_DEFINED_glUniform4ivARB #define GLEE_H_DEFINED_glUniform4ivARB typedef void (APIENTRYP GLEEPFNGLUNIFORM4IVARBPROC) (GLint location, GLsizei count, const GLint * value); GLEE_EXTERN GLEEPFNGLUNIFORM4IVARBPROC GLeeFuncPtr_glUniform4ivARB; #define glUniform4ivARB GLeeFuncPtr_glUniform4ivARB #endif #ifndef GLEE_H_DEFINED_glUniformMatrix2fvARB #define GLEE_H_DEFINED_glUniformMatrix2fvARB typedef void (APIENTRYP GLEEPFNGLUNIFORMMATRIX2FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); GLEE_EXTERN GLEEPFNGLUNIFORMMATRIX2FVARBPROC GLeeFuncPtr_glUniformMatrix2fvARB; #define glUniformMatrix2fvARB GLeeFuncPtr_glUniformMatrix2fvARB #endif #ifndef GLEE_H_DEFINED_glUniformMatrix3fvARB #define GLEE_H_DEFINED_glUniformMatrix3fvARB typedef void (APIENTRYP GLEEPFNGLUNIFORMMATRIX3FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); GLEE_EXTERN GLEEPFNGLUNIFORMMATRIX3FVARBPROC GLeeFuncPtr_glUniformMatrix3fvARB; #define glUniformMatrix3fvARB GLeeFuncPtr_glUniformMatrix3fvARB #endif #ifndef GLEE_H_DEFINED_glUniformMatrix4fvARB #define GLEE_H_DEFINED_glUniformMatrix4fvARB typedef void (APIENTRYP GLEEPFNGLUNIFORMMATRIX4FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); GLEE_EXTERN GLEEPFNGLUNIFORMMATRIX4FVARBPROC GLeeFuncPtr_glUniformMatrix4fvARB; #define glUniformMatrix4fvARB GLeeFuncPtr_glUniformMatrix4fvARB #endif #ifndef GLEE_H_DEFINED_glGetObjectParameterfvARB #define GLEE_H_DEFINED_glGetObjectParameterfvARB typedef void (APIENTRYP GLEEPFNGLGETOBJECTPARAMETERFVARBPROC) (GLhandleARB obj, GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETOBJECTPARAMETERFVARBPROC GLeeFuncPtr_glGetObjectParameterfvARB; #define glGetObjectParameterfvARB GLeeFuncPtr_glGetObjectParameterfvARB #endif #ifndef GLEE_H_DEFINED_glGetObjectParameterivARB #define GLEE_H_DEFINED_glGetObjectParameterivARB typedef void (APIENTRYP GLEEPFNGLGETOBJECTPARAMETERIVARBPROC) (GLhandleARB obj, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETOBJECTPARAMETERIVARBPROC GLeeFuncPtr_glGetObjectParameterivARB; #define glGetObjectParameterivARB GLeeFuncPtr_glGetObjectParameterivARB #endif #ifndef GLEE_H_DEFINED_glGetInfoLogARB #define GLEE_H_DEFINED_glGetInfoLogARB typedef void (APIENTRYP GLEEPFNGLGETINFOLOGARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei * length, GLcharARB * infoLog); GLEE_EXTERN GLEEPFNGLGETINFOLOGARBPROC GLeeFuncPtr_glGetInfoLogARB; #define glGetInfoLogARB GLeeFuncPtr_glGetInfoLogARB #endif #ifndef GLEE_H_DEFINED_glGetAttachedObjectsARB #define GLEE_H_DEFINED_glGetAttachedObjectsARB typedef void (APIENTRYP GLEEPFNGLGETATTACHEDOBJECTSARBPROC) (GLhandleARB containerObj, GLsizei maxCount, GLsizei * count, GLhandleARB * obj); GLEE_EXTERN GLEEPFNGLGETATTACHEDOBJECTSARBPROC GLeeFuncPtr_glGetAttachedObjectsARB; #define glGetAttachedObjectsARB GLeeFuncPtr_glGetAttachedObjectsARB #endif #ifndef GLEE_H_DEFINED_glGetUniformLocationARB #define GLEE_H_DEFINED_glGetUniformLocationARB typedef GLint (APIENTRYP GLEEPFNGLGETUNIFORMLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB * name); GLEE_EXTERN GLEEPFNGLGETUNIFORMLOCATIONARBPROC GLeeFuncPtr_glGetUniformLocationARB; #define glGetUniformLocationARB GLeeFuncPtr_glGetUniformLocationARB #endif #ifndef GLEE_H_DEFINED_glGetActiveUniformARB #define GLEE_H_DEFINED_glGetActiveUniformARB typedef void (APIENTRYP GLEEPFNGLGETACTIVEUNIFORMARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei * length, GLint * size, GLenum * type, GLcharARB * name); GLEE_EXTERN GLEEPFNGLGETACTIVEUNIFORMARBPROC GLeeFuncPtr_glGetActiveUniformARB; #define glGetActiveUniformARB GLeeFuncPtr_glGetActiveUniformARB #endif #ifndef GLEE_H_DEFINED_glGetUniformfvARB #define GLEE_H_DEFINED_glGetUniformfvARB typedef void (APIENTRYP GLEEPFNGLGETUNIFORMFVARBPROC) (GLhandleARB programObj, GLint location, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETUNIFORMFVARBPROC GLeeFuncPtr_glGetUniformfvARB; #define glGetUniformfvARB GLeeFuncPtr_glGetUniformfvARB #endif #ifndef GLEE_H_DEFINED_glGetUniformivARB #define GLEE_H_DEFINED_glGetUniformivARB typedef void (APIENTRYP GLEEPFNGLGETUNIFORMIVARBPROC) (GLhandleARB programObj, GLint location, GLint * params); GLEE_EXTERN GLEEPFNGLGETUNIFORMIVARBPROC GLeeFuncPtr_glGetUniformivARB; #define glGetUniformivARB GLeeFuncPtr_glGetUniformivARB #endif #ifndef GLEE_H_DEFINED_glGetShaderSourceARB #define GLEE_H_DEFINED_glGetShaderSourceARB typedef void (APIENTRYP GLEEPFNGLGETSHADERSOURCEARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei * length, GLcharARB * source); GLEE_EXTERN GLEEPFNGLGETSHADERSOURCEARBPROC GLeeFuncPtr_glGetShaderSourceARB; #define glGetShaderSourceARB GLeeFuncPtr_glGetShaderSourceARB #endif #endif /* GL_ARB_vertex_shader */ #ifndef GL_ARB_vertex_shader #define GL_ARB_vertex_shader 1 #define __GLEE_GL_ARB_vertex_shader 1 /* Constants */ #define GL_VERTEX_SHADER_ARB 0x8B31 #define GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB 0x8B4A #define GL_MAX_VARYING_FLOATS_ARB 0x8B4B #define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB 0x8B4C #define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB 0x8B4D #define GL_OBJECT_ACTIVE_ATTRIBUTES_ARB 0x8B89 #define GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB 0x8B8A #ifndef GLEE_H_DEFINED_glBindAttribLocationARB #define GLEE_H_DEFINED_glBindAttribLocationARB typedef void (APIENTRYP GLEEPFNGLBINDATTRIBLOCATIONARBPROC) (GLhandleARB programObj, GLuint index, const GLcharARB * name); GLEE_EXTERN GLEEPFNGLBINDATTRIBLOCATIONARBPROC GLeeFuncPtr_glBindAttribLocationARB; #define glBindAttribLocationARB GLeeFuncPtr_glBindAttribLocationARB #endif #ifndef GLEE_H_DEFINED_glGetActiveAttribARB #define GLEE_H_DEFINED_glGetActiveAttribARB typedef void (APIENTRYP GLEEPFNGLGETACTIVEATTRIBARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei * length, GLint * size, GLenum * type, GLcharARB * name); GLEE_EXTERN GLEEPFNGLGETACTIVEATTRIBARBPROC GLeeFuncPtr_glGetActiveAttribARB; #define glGetActiveAttribARB GLeeFuncPtr_glGetActiveAttribARB #endif #ifndef GLEE_H_DEFINED_glGetAttribLocationARB #define GLEE_H_DEFINED_glGetAttribLocationARB typedef GLint (APIENTRYP GLEEPFNGLGETATTRIBLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB * name); GLEE_EXTERN GLEEPFNGLGETATTRIBLOCATIONARBPROC GLeeFuncPtr_glGetAttribLocationARB; #define glGetAttribLocationARB GLeeFuncPtr_glGetAttribLocationARB #endif #endif /* GL_ARB_fragment_shader */ #ifndef GL_ARB_fragment_shader #define GL_ARB_fragment_shader 1 #define __GLEE_GL_ARB_fragment_shader 1 /* Constants */ #define GL_FRAGMENT_SHADER_ARB 0x8B30 #define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB 0x8B49 #define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB 0x8B8B #endif /* GL_ARB_shading_language_100 */ #ifndef GL_ARB_shading_language_100 #define GL_ARB_shading_language_100 1 #define __GLEE_GL_ARB_shading_language_100 1 /* Constants */ #define GL_SHADING_LANGUAGE_VERSION_ARB 0x8B8C #endif /* GL_ARB_texture_non_power_of_two */ #ifndef GL_ARB_texture_non_power_of_two #define GL_ARB_texture_non_power_of_two 1 #define __GLEE_GL_ARB_texture_non_power_of_two 1 /* Constants */ #endif /* GL_ARB_point_sprite */ #ifndef GL_ARB_point_sprite #define GL_ARB_point_sprite 1 #define __GLEE_GL_ARB_point_sprite 1 /* Constants */ #define GL_POINT_SPRITE_ARB 0x8861 #define GL_COORD_REPLACE_ARB 0x8862 #endif /* GL_ARB_fragment_program_shadow */ #ifndef GL_ARB_fragment_program_shadow #define GL_ARB_fragment_program_shadow 1 #define __GLEE_GL_ARB_fragment_program_shadow 1 /* Constants */ #endif /* GL_ARB_draw_buffers */ #ifndef GL_ARB_draw_buffers #define GL_ARB_draw_buffers 1 #define __GLEE_GL_ARB_draw_buffers 1 /* Constants */ #define GL_MAX_DRAW_BUFFERS_ARB 0x8824 #define GL_DRAW_BUFFER0_ARB 0x8825 #define GL_DRAW_BUFFER1_ARB 0x8826 #define GL_DRAW_BUFFER2_ARB 0x8827 #define GL_DRAW_BUFFER3_ARB 0x8828 #define GL_DRAW_BUFFER4_ARB 0x8829 #define GL_DRAW_BUFFER5_ARB 0x882A #define GL_DRAW_BUFFER6_ARB 0x882B #define GL_DRAW_BUFFER7_ARB 0x882C #define GL_DRAW_BUFFER8_ARB 0x882D #define GL_DRAW_BUFFER9_ARB 0x882E #define GL_DRAW_BUFFER10_ARB 0x882F #define GL_DRAW_BUFFER11_ARB 0x8830 #define GL_DRAW_BUFFER12_ARB 0x8831 #define GL_DRAW_BUFFER13_ARB 0x8832 #define GL_DRAW_BUFFER14_ARB 0x8833 #define GL_DRAW_BUFFER15_ARB 0x8834 #ifndef GLEE_H_DEFINED_glDrawBuffersARB #define GLEE_H_DEFINED_glDrawBuffersARB typedef void (APIENTRYP GLEEPFNGLDRAWBUFFERSARBPROC) (GLsizei n, const GLenum * bufs); GLEE_EXTERN GLEEPFNGLDRAWBUFFERSARBPROC GLeeFuncPtr_glDrawBuffersARB; #define glDrawBuffersARB GLeeFuncPtr_glDrawBuffersARB #endif #endif /* GL_ARB_texture_rectangle */ #ifndef GL_ARB_texture_rectangle #define GL_ARB_texture_rectangle 1 #define __GLEE_GL_ARB_texture_rectangle 1 /* Constants */ #define GL_TEXTURE_RECTANGLE_ARB 0x84F5 #define GL_TEXTURE_BINDING_RECTANGLE_ARB 0x84F6 #define GL_PROXY_TEXTURE_RECTANGLE_ARB 0x84F7 #define GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB 0x84F8 #endif /* GL_ARB_color_buffer_float */ #ifndef GL_ARB_color_buffer_float #define GL_ARB_color_buffer_float 1 #define __GLEE_GL_ARB_color_buffer_float 1 /* Constants */ #define GL_RGBA_FLOAT_MODE_ARB 0x8820 #define GL_CLAMP_VERTEX_COLOR_ARB 0x891A #define GL_CLAMP_FRAGMENT_COLOR_ARB 0x891B #define GL_CLAMP_READ_COLOR_ARB 0x891C #define GL_FIXED_ONLY_ARB 0x891D #ifndef GLEE_H_DEFINED_glClampColorARB #define GLEE_H_DEFINED_glClampColorARB typedef void (APIENTRYP GLEEPFNGLCLAMPCOLORARBPROC) (GLenum target, GLenum clamp); GLEE_EXTERN GLEEPFNGLCLAMPCOLORARBPROC GLeeFuncPtr_glClampColorARB; #define glClampColorARB GLeeFuncPtr_glClampColorARB #endif #endif /* GL_ARB_half_float_pixel */ #ifndef GL_ARB_half_float_pixel #define GL_ARB_half_float_pixel 1 #define __GLEE_GL_ARB_half_float_pixel 1 /* Constants */ #define GL_HALF_FLOAT_ARB 0x140B #endif /* GL_ARB_texture_float */ #ifndef GL_ARB_texture_float #define GL_ARB_texture_float 1 #define __GLEE_GL_ARB_texture_float 1 /* Constants */ #define GL_TEXTURE_RED_TYPE_ARB 0x8C10 #define GL_TEXTURE_GREEN_TYPE_ARB 0x8C11 #define GL_TEXTURE_BLUE_TYPE_ARB 0x8C12 #define GL_TEXTURE_ALPHA_TYPE_ARB 0x8C13 #define GL_TEXTURE_LUMINANCE_TYPE_ARB 0x8C14 #define GL_TEXTURE_INTENSITY_TYPE_ARB 0x8C15 #define GL_TEXTURE_DEPTH_TYPE_ARB 0x8C16 #define GL_UNSIGNED_NORMALIZED_ARB 0x8C17 #define GL_RGBA32F_ARB 0x8814 #define GL_RGB32F_ARB 0x8815 #define GL_ALPHA32F_ARB 0x8816 #define GL_INTENSITY32F_ARB 0x8817 #define GL_LUMINANCE32F_ARB 0x8818 #define GL_LUMINANCE_ALPHA32F_ARB 0x8819 #define GL_RGBA16F_ARB 0x881A #define GL_RGB16F_ARB 0x881B #define GL_ALPHA16F_ARB 0x881C #define GL_INTENSITY16F_ARB 0x881D #define GL_LUMINANCE16F_ARB 0x881E #define GL_LUMINANCE_ALPHA16F_ARB 0x881F #endif /* GL_ARB_pixel_buffer_object */ #ifndef GL_ARB_pixel_buffer_object #define GL_ARB_pixel_buffer_object 1 #define __GLEE_GL_ARB_pixel_buffer_object 1 /* Constants */ #define GL_PIXEL_PACK_BUFFER_ARB 0x88EB #define GL_PIXEL_UNPACK_BUFFER_ARB 0x88EC #define GL_PIXEL_PACK_BUFFER_BINDING_ARB 0x88ED #define GL_PIXEL_UNPACK_BUFFER_BINDING_ARB 0x88EF #endif /* GL_ARB_depth_buffer_float */ #ifndef GL_ARB_depth_buffer_float #define GL_ARB_depth_buffer_float 1 #define __GLEE_GL_ARB_depth_buffer_float 1 /* Constants */ #define GL_DEPTH_COMPONENT32F 0x8CAC #define GL_DEPTH32F_STENCIL8 0x8CAD #define GL_FLOAT_32_UNSIGNED_INT_24_8_REV 0x8DAD #endif /* GL_ARB_draw_instanced */ #ifndef GL_ARB_draw_instanced #define GL_ARB_draw_instanced 1 #define __GLEE_GL_ARB_draw_instanced 1 /* Constants */ #ifndef GLEE_H_DEFINED_glDrawArraysInstancedARB #define GLEE_H_DEFINED_glDrawArraysInstancedARB typedef void (APIENTRYP GLEEPFNGLDRAWARRAYSINSTANCEDARBPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount); GLEE_EXTERN GLEEPFNGLDRAWARRAYSINSTANCEDARBPROC GLeeFuncPtr_glDrawArraysInstancedARB; #define glDrawArraysInstancedARB GLeeFuncPtr_glDrawArraysInstancedARB #endif #ifndef GLEE_H_DEFINED_glDrawElementsInstancedARB #define GLEE_H_DEFINED_glDrawElementsInstancedARB typedef void (APIENTRYP GLEEPFNGLDRAWELEMENTSINSTANCEDARBPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid * indices, GLsizei primcount); GLEE_EXTERN GLEEPFNGLDRAWELEMENTSINSTANCEDARBPROC GLeeFuncPtr_glDrawElementsInstancedARB; #define glDrawElementsInstancedARB GLeeFuncPtr_glDrawElementsInstancedARB #endif #endif /* GL_ARB_framebuffer_object */ #ifndef GL_ARB_framebuffer_object #define GL_ARB_framebuffer_object 1 #define __GLEE_GL_ARB_framebuffer_object 1 /* Constants */ #define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506 #define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING 0x8210 #define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE 0x8211 #define GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE 0x8212 #define GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE 0x8213 #define GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE 0x8214 #define GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE 0x8215 #define GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE 0x8216 #define GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE 0x8217 #define GL_FRAMEBUFFER_DEFAULT 0x8218 #define GL_FRAMEBUFFER_UNDEFINED 0x8219 #define GL_DEPTH_STENCIL_ATTACHMENT 0x821A #define GL_INDEX 0x8222 #define GL_MAX_RENDERBUFFER_SIZE 0x84E8 #define GL_DEPTH_STENCIL 0x84F9 #define GL_UNSIGNED_INT_24_8 0x84FA #define GL_DEPTH24_STENCIL8 0x88F0 #define GL_TEXTURE_STENCIL_SIZE 0x88F1 #define GL_FRAMEBUFFER_BINDING 0x8CA6 #define GL_DRAW_FRAMEBUFFER_BINDING GL_FRAMEBUFFER_BINDING #define GL_RENDERBUFFER_BINDING 0x8CA7 #define GL_READ_FRAMEBUFFER 0x8CA8 #define GL_DRAW_FRAMEBUFFER 0x8CA9 #define GL_READ_FRAMEBUFFER_BINDING 0x8CAA #define GL_RENDERBUFFER_SAMPLES 0x8CAB #define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 0x8CD0 #define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME 0x8CD1 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL 0x8CD2 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8CD3 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER 0x8CD4 #define GL_FRAMEBUFFER_COMPLETE 0x8CD5 #define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6 #define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7 #define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER 0x8CDB #define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER 0x8CDC #define GL_FRAMEBUFFER_UNSUPPORTED 0x8CDD #define GL_MAX_COLOR_ATTACHMENTS 0x8CDF #define GL_COLOR_ATTACHMENT0 0x8CE0 #define GL_COLOR_ATTACHMENT1 0x8CE1 #define GL_COLOR_ATTACHMENT2 0x8CE2 #define GL_COLOR_ATTACHMENT3 0x8CE3 #define GL_COLOR_ATTACHMENT4 0x8CE4 #define GL_COLOR_ATTACHMENT5 0x8CE5 #define GL_COLOR_ATTACHMENT6 0x8CE6 #define GL_COLOR_ATTACHMENT7 0x8CE7 #define GL_COLOR_ATTACHMENT8 0x8CE8 #define GL_COLOR_ATTACHMENT9 0x8CE9 #define GL_COLOR_ATTACHMENT10 0x8CEA #define GL_COLOR_ATTACHMENT11 0x8CEB #define GL_COLOR_ATTACHMENT12 0x8CEC #define GL_COLOR_ATTACHMENT13 0x8CED #define GL_COLOR_ATTACHMENT14 0x8CEE #define GL_COLOR_ATTACHMENT15 0x8CEF #define GL_DEPTH_ATTACHMENT 0x8D00 #define GL_STENCIL_ATTACHMENT 0x8D20 #define GL_FRAMEBUFFER 0x8D40 #define GL_RENDERBUFFER 0x8D41 #define GL_RENDERBUFFER_WIDTH 0x8D42 #define GL_RENDERBUFFER_HEIGHT 0x8D43 #define GL_RENDERBUFFER_INTERNAL_FORMAT 0x8D44 #define GL_STENCIL_INDEX1 0x8D46 #define GL_STENCIL_INDEX4 0x8D47 #define GL_STENCIL_INDEX8 0x8D48 #define GL_STENCIL_INDEX16 0x8D49 #define GL_RENDERBUFFER_RED_SIZE 0x8D50 #define GL_RENDERBUFFER_GREEN_SIZE 0x8D51 #define GL_RENDERBUFFER_BLUE_SIZE 0x8D52 #define GL_RENDERBUFFER_ALPHA_SIZE 0x8D53 #define GL_RENDERBUFFER_DEPTH_SIZE 0x8D54 #define GL_RENDERBUFFER_STENCIL_SIZE 0x8D55 #define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE 0x8D56 #define GL_MAX_SAMPLES 0x8D57 #ifndef GLEE_H_DEFINED_glIsRenderbuffer #define GLEE_H_DEFINED_glIsRenderbuffer typedef GLboolean (APIENTRYP GLEEPFNGLISRENDERBUFFERPROC) (GLuint renderbuffer); GLEE_EXTERN GLEEPFNGLISRENDERBUFFERPROC GLeeFuncPtr_glIsRenderbuffer; #define glIsRenderbuffer GLeeFuncPtr_glIsRenderbuffer #endif #ifndef GLEE_H_DEFINED_glBindRenderbuffer #define GLEE_H_DEFINED_glBindRenderbuffer typedef void (APIENTRYP GLEEPFNGLBINDRENDERBUFFERPROC) (GLenum target, GLuint renderbuffer); GLEE_EXTERN GLEEPFNGLBINDRENDERBUFFERPROC GLeeFuncPtr_glBindRenderbuffer; #define glBindRenderbuffer GLeeFuncPtr_glBindRenderbuffer #endif #ifndef GLEE_H_DEFINED_glDeleteRenderbuffers #define GLEE_H_DEFINED_glDeleteRenderbuffers typedef void (APIENTRYP GLEEPFNGLDELETERENDERBUFFERSPROC) (GLsizei n, const GLuint * renderbuffers); GLEE_EXTERN GLEEPFNGLDELETERENDERBUFFERSPROC GLeeFuncPtr_glDeleteRenderbuffers; #define glDeleteRenderbuffers GLeeFuncPtr_glDeleteRenderbuffers #endif #ifndef GLEE_H_DEFINED_glGenRenderbuffers #define GLEE_H_DEFINED_glGenRenderbuffers typedef void (APIENTRYP GLEEPFNGLGENRENDERBUFFERSPROC) (GLsizei n, GLuint * renderbuffers); GLEE_EXTERN GLEEPFNGLGENRENDERBUFFERSPROC GLeeFuncPtr_glGenRenderbuffers; #define glGenRenderbuffers GLeeFuncPtr_glGenRenderbuffers #endif #ifndef GLEE_H_DEFINED_glRenderbufferStorage #define GLEE_H_DEFINED_glRenderbufferStorage typedef void (APIENTRYP GLEEPFNGLRENDERBUFFERSTORAGEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); GLEE_EXTERN GLEEPFNGLRENDERBUFFERSTORAGEPROC GLeeFuncPtr_glRenderbufferStorage; #define glRenderbufferStorage GLeeFuncPtr_glRenderbufferStorage #endif #ifndef GLEE_H_DEFINED_glGetRenderbufferParameteriv #define GLEE_H_DEFINED_glGetRenderbufferParameteriv typedef void (APIENTRYP GLEEPFNGLGETRENDERBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETRENDERBUFFERPARAMETERIVPROC GLeeFuncPtr_glGetRenderbufferParameteriv; #define glGetRenderbufferParameteriv GLeeFuncPtr_glGetRenderbufferParameteriv #endif #ifndef GLEE_H_DEFINED_glIsFramebuffer #define GLEE_H_DEFINED_glIsFramebuffer typedef GLboolean (APIENTRYP GLEEPFNGLISFRAMEBUFFERPROC) (GLuint framebuffer); GLEE_EXTERN GLEEPFNGLISFRAMEBUFFERPROC GLeeFuncPtr_glIsFramebuffer; #define glIsFramebuffer GLeeFuncPtr_glIsFramebuffer #endif #ifndef GLEE_H_DEFINED_glBindFramebuffer #define GLEE_H_DEFINED_glBindFramebuffer typedef void (APIENTRYP GLEEPFNGLBINDFRAMEBUFFERPROC) (GLenum target, GLuint framebuffer); GLEE_EXTERN GLEEPFNGLBINDFRAMEBUFFERPROC GLeeFuncPtr_glBindFramebuffer; #define glBindFramebuffer GLeeFuncPtr_glBindFramebuffer #endif #ifndef GLEE_H_DEFINED_glDeleteFramebuffers #define GLEE_H_DEFINED_glDeleteFramebuffers typedef void (APIENTRYP GLEEPFNGLDELETEFRAMEBUFFERSPROC) (GLsizei n, const GLuint * framebuffers); GLEE_EXTERN GLEEPFNGLDELETEFRAMEBUFFERSPROC GLeeFuncPtr_glDeleteFramebuffers; #define glDeleteFramebuffers GLeeFuncPtr_glDeleteFramebuffers #endif #ifndef GLEE_H_DEFINED_glGenFramebuffers #define GLEE_H_DEFINED_glGenFramebuffers typedef void (APIENTRYP GLEEPFNGLGENFRAMEBUFFERSPROC) (GLsizei n, GLuint * framebuffers); GLEE_EXTERN GLEEPFNGLGENFRAMEBUFFERSPROC GLeeFuncPtr_glGenFramebuffers; #define glGenFramebuffers GLeeFuncPtr_glGenFramebuffers #endif #ifndef GLEE_H_DEFINED_glCheckFramebufferStatus #define GLEE_H_DEFINED_glCheckFramebufferStatus typedef GLenum (APIENTRYP GLEEPFNGLCHECKFRAMEBUFFERSTATUSPROC) (GLenum target); GLEE_EXTERN GLEEPFNGLCHECKFRAMEBUFFERSTATUSPROC GLeeFuncPtr_glCheckFramebufferStatus; #define glCheckFramebufferStatus GLeeFuncPtr_glCheckFramebufferStatus #endif #ifndef GLEE_H_DEFINED_glFramebufferTexture1D #define GLEE_H_DEFINED_glFramebufferTexture1D typedef void (APIENTRYP GLEEPFNGLFRAMEBUFFERTEXTURE1DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); GLEE_EXTERN GLEEPFNGLFRAMEBUFFERTEXTURE1DPROC GLeeFuncPtr_glFramebufferTexture1D; #define glFramebufferTexture1D GLeeFuncPtr_glFramebufferTexture1D #endif #ifndef GLEE_H_DEFINED_glFramebufferTexture2D #define GLEE_H_DEFINED_glFramebufferTexture2D typedef void (APIENTRYP GLEEPFNGLFRAMEBUFFERTEXTURE2DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); GLEE_EXTERN GLEEPFNGLFRAMEBUFFERTEXTURE2DPROC GLeeFuncPtr_glFramebufferTexture2D; #define glFramebufferTexture2D GLeeFuncPtr_glFramebufferTexture2D #endif #ifndef GLEE_H_DEFINED_glFramebufferTexture3D #define GLEE_H_DEFINED_glFramebufferTexture3D typedef void (APIENTRYP GLEEPFNGLFRAMEBUFFERTEXTURE3DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); GLEE_EXTERN GLEEPFNGLFRAMEBUFFERTEXTURE3DPROC GLeeFuncPtr_glFramebufferTexture3D; #define glFramebufferTexture3D GLeeFuncPtr_glFramebufferTexture3D #endif #ifndef GLEE_H_DEFINED_glFramebufferRenderbuffer #define GLEE_H_DEFINED_glFramebufferRenderbuffer typedef void (APIENTRYP GLEEPFNGLFRAMEBUFFERRENDERBUFFERPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); GLEE_EXTERN GLEEPFNGLFRAMEBUFFERRENDERBUFFERPROC GLeeFuncPtr_glFramebufferRenderbuffer; #define glFramebufferRenderbuffer GLeeFuncPtr_glFramebufferRenderbuffer #endif #ifndef GLEE_H_DEFINED_glGetFramebufferAttachmentParameteriv #define GLEE_H_DEFINED_glGetFramebufferAttachmentParameteriv typedef void (APIENTRYP GLEEPFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC) (GLenum target, GLenum attachment, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC GLeeFuncPtr_glGetFramebufferAttachmentParameteriv; #define glGetFramebufferAttachmentParameteriv GLeeFuncPtr_glGetFramebufferAttachmentParameteriv #endif #ifndef GLEE_H_DEFINED_glGenerateMipmap #define GLEE_H_DEFINED_glGenerateMipmap typedef void (APIENTRYP GLEEPFNGLGENERATEMIPMAPPROC) (GLenum target); GLEE_EXTERN GLEEPFNGLGENERATEMIPMAPPROC GLeeFuncPtr_glGenerateMipmap; #define glGenerateMipmap GLeeFuncPtr_glGenerateMipmap #endif #ifndef GLEE_H_DEFINED_glBlitFramebuffer #define GLEE_H_DEFINED_glBlitFramebuffer typedef void (APIENTRYP GLEEPFNGLBLITFRAMEBUFFERPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); GLEE_EXTERN GLEEPFNGLBLITFRAMEBUFFERPROC GLeeFuncPtr_glBlitFramebuffer; #define glBlitFramebuffer GLeeFuncPtr_glBlitFramebuffer #endif #ifndef GLEE_H_DEFINED_glRenderbufferStorageMultisample #define GLEE_H_DEFINED_glRenderbufferStorageMultisample typedef void (APIENTRYP GLEEPFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); GLEE_EXTERN GLEEPFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC GLeeFuncPtr_glRenderbufferStorageMultisample; #define glRenderbufferStorageMultisample GLeeFuncPtr_glRenderbufferStorageMultisample #endif #ifndef GLEE_H_DEFINED_glFramebufferTextureLayer #define GLEE_H_DEFINED_glFramebufferTextureLayer typedef void (APIENTRYP GLEEPFNGLFRAMEBUFFERTEXTURELAYERPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); GLEE_EXTERN GLEEPFNGLFRAMEBUFFERTEXTURELAYERPROC GLeeFuncPtr_glFramebufferTextureLayer; #define glFramebufferTextureLayer GLeeFuncPtr_glFramebufferTextureLayer #endif #endif /* GL_ARB_framebuffer_sRGB */ #ifndef GL_ARB_framebuffer_sRGB #define GL_ARB_framebuffer_sRGB 1 #define __GLEE_GL_ARB_framebuffer_sRGB 1 /* Constants */ #define GL_FRAMEBUFFER_SRGB 0x8DB9 #endif /* GL_ARB_geometry_shader4 */ #ifndef GL_ARB_geometry_shader4 #define GL_ARB_geometry_shader4 1 #define __GLEE_GL_ARB_geometry_shader4 1 /* Constants */ #define GL_LINES_ADJACENCY_ARB 0x000A #define GL_LINE_STRIP_ADJACENCY_ARB 0x000B #define GL_TRIANGLES_ADJACENCY_ARB 0x000C #define GL_TRIANGLE_STRIP_ADJACENCY_ARB 0x000D #define GL_PROGRAM_POINT_SIZE_ARB 0x8642 #define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_ARB 0x8C29 #define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_ARB 0x8DA7 #define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_ARB 0x8DA8 #define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_ARB 0x8DA9 #define GL_GEOMETRY_SHADER_ARB 0x8DD9 #define GL_GEOMETRY_VERTICES_OUT_ARB 0x8DDA #define GL_GEOMETRY_INPUT_TYPE_ARB 0x8DDB #define GL_GEOMETRY_OUTPUT_TYPE_ARB 0x8DDC #define GL_MAX_GEOMETRY_VARYING_COMPONENTS_ARB 0x8DDD #define GL_MAX_VERTEX_VARYING_COMPONENTS_ARB 0x8DDE #define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_ARB 0x8DDF #define GL_MAX_GEOMETRY_OUTPUT_VERTICES_ARB 0x8DE0 #define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_ARB 0x8DE1 #ifndef GLEE_H_DEFINED_glProgramParameteriARB #define GLEE_H_DEFINED_glProgramParameteriARB typedef void (APIENTRYP GLEEPFNGLPROGRAMPARAMETERIARBPROC) (GLuint program, GLenum pname, GLint value); GLEE_EXTERN GLEEPFNGLPROGRAMPARAMETERIARBPROC GLeeFuncPtr_glProgramParameteriARB; #define glProgramParameteriARB GLeeFuncPtr_glProgramParameteriARB #endif #ifndef GLEE_H_DEFINED_glFramebufferTextureARB #define GLEE_H_DEFINED_glFramebufferTextureARB typedef void (APIENTRYP GLEEPFNGLFRAMEBUFFERTEXTUREARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); GLEE_EXTERN GLEEPFNGLFRAMEBUFFERTEXTUREARBPROC GLeeFuncPtr_glFramebufferTextureARB; #define glFramebufferTextureARB GLeeFuncPtr_glFramebufferTextureARB #endif #ifndef GLEE_H_DEFINED_glFramebufferTextureLayerARB #define GLEE_H_DEFINED_glFramebufferTextureLayerARB typedef void (APIENTRYP GLEEPFNGLFRAMEBUFFERTEXTURELAYERARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); GLEE_EXTERN GLEEPFNGLFRAMEBUFFERTEXTURELAYERARBPROC GLeeFuncPtr_glFramebufferTextureLayerARB; #define glFramebufferTextureLayerARB GLeeFuncPtr_glFramebufferTextureLayerARB #endif #ifndef GLEE_H_DEFINED_glFramebufferTextureFaceARB #define GLEE_H_DEFINED_glFramebufferTextureFaceARB typedef void (APIENTRYP GLEEPFNGLFRAMEBUFFERTEXTUREFACEARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); GLEE_EXTERN GLEEPFNGLFRAMEBUFFERTEXTUREFACEARBPROC GLeeFuncPtr_glFramebufferTextureFaceARB; #define glFramebufferTextureFaceARB GLeeFuncPtr_glFramebufferTextureFaceARB #endif #endif /* GL_ARB_half_float_vertex */ #ifndef GL_ARB_half_float_vertex #define GL_ARB_half_float_vertex 1 #define __GLEE_GL_ARB_half_float_vertex 1 /* Constants */ #define GL_HALF_FLOAT 0x140B #endif /* GL_ARB_instanced_arrays */ #ifndef GL_ARB_instanced_arrays #define GL_ARB_instanced_arrays 1 #define __GLEE_GL_ARB_instanced_arrays 1 /* Constants */ #ifndef GLEE_H_DEFINED_glVertexAttribDivisor #define GLEE_H_DEFINED_glVertexAttribDivisor typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBDIVISORPROC) (GLuint index, GLuint divisor); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBDIVISORPROC GLeeFuncPtr_glVertexAttribDivisor; #define glVertexAttribDivisor GLeeFuncPtr_glVertexAttribDivisor #endif #endif /* GL_ARB_map_buffer_range */ #ifndef GL_ARB_map_buffer_range #define GL_ARB_map_buffer_range 1 #define __GLEE_GL_ARB_map_buffer_range 1 /* Constants */ #define GL_MAP_READ_BIT 0x0001 #define GL_MAP_WRITE_BIT 0x0002 #define GL_MAP_INVALIDATE_RANGE_BIT 0x0004 #define GL_MAP_INVALIDATE_BUFFER_BIT 0x0008 #define GL_MAP_FLUSH_EXPLICIT_BIT 0x0010 #define GL_MAP_UNSYNCHRONIZED_BIT 0x0020 #ifndef GLEE_H_DEFINED_glMapBufferRange #define GLEE_H_DEFINED_glMapBufferRange typedef void (APIENTRYP GLEEPFNGLMAPBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); GLEE_EXTERN GLEEPFNGLMAPBUFFERRANGEPROC GLeeFuncPtr_glMapBufferRange; #define glMapBufferRange GLeeFuncPtr_glMapBufferRange #endif #ifndef GLEE_H_DEFINED_glFlushMappedBufferRange #define GLEE_H_DEFINED_glFlushMappedBufferRange typedef void (APIENTRYP GLEEPFNGLFLUSHMAPPEDBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length); GLEE_EXTERN GLEEPFNGLFLUSHMAPPEDBUFFERRANGEPROC GLeeFuncPtr_glFlushMappedBufferRange; #define glFlushMappedBufferRange GLeeFuncPtr_glFlushMappedBufferRange #endif #endif /* GL_ARB_texture_buffer_object */ #ifndef GL_ARB_texture_buffer_object #define GL_ARB_texture_buffer_object 1 #define __GLEE_GL_ARB_texture_buffer_object 1 /* Constants */ #define GL_TEXTURE_BUFFER_ARB 0x8C2A #define GL_MAX_TEXTURE_BUFFER_SIZE_ARB 0x8C2B #define GL_TEXTURE_BINDING_BUFFER_ARB 0x8C2C #define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_ARB 0x8C2D #define GL_TEXTURE_BUFFER_FORMAT_ARB 0x8C2E #ifndef GLEE_H_DEFINED_glTexBufferARB #define GLEE_H_DEFINED_glTexBufferARB typedef void (APIENTRYP GLEEPFNGLTEXBUFFERARBPROC) (GLenum target, GLenum internalformat, GLuint buffer); GLEE_EXTERN GLEEPFNGLTEXBUFFERARBPROC GLeeFuncPtr_glTexBufferARB; #define glTexBufferARB GLeeFuncPtr_glTexBufferARB #endif #endif /* GL_ARB_texture_compression_rgtc */ #ifndef GL_ARB_texture_compression_rgtc #define GL_ARB_texture_compression_rgtc 1 #define __GLEE_GL_ARB_texture_compression_rgtc 1 /* Constants */ #define GL_COMPRESSED_RED_RGTC1 0x8DBB #define GL_COMPRESSED_SIGNED_RED_RGTC1 0x8DBC #define GL_COMPRESSED_RG_RGTC2 0x8DBD #define GL_COMPRESSED_SIGNED_RG_RGTC2 0x8DBE #endif /* GL_ARB_texture_rg */ #ifndef GL_ARB_texture_rg #define GL_ARB_texture_rg 1 #define __GLEE_GL_ARB_texture_rg 1 /* Constants */ #define GL_RG 0x8227 #define GL_RG_INTEGER 0x8228 #define GL_R8 0x8229 #define GL_R16 0x822A #define GL_RG8 0x822B #define GL_RG16 0x822C #define GL_R16F 0x822D #define GL_R32F 0x822E #define GL_RG16F 0x822F #define GL_RG32F 0x8230 #define GL_R8I 0x8231 #define GL_R8UI 0x8232 #define GL_R16I 0x8233 #define GL_R16UI 0x8234 #define GL_R32I 0x8235 #define GL_R32UI 0x8236 #define GL_RG8I 0x8237 #define GL_RG8UI 0x8238 #define GL_RG16I 0x8239 #define GL_RG16UI 0x823A #define GL_RG32I 0x823B #define GL_RG32UI 0x823C #endif /* GL_ARB_vertex_array_object */ #ifndef GL_ARB_vertex_array_object #define GL_ARB_vertex_array_object 1 #define __GLEE_GL_ARB_vertex_array_object 1 /* Constants */ #define GL_VERTEX_ARRAY_BINDING 0x85B5 #ifndef GLEE_H_DEFINED_glBindVertexArray #define GLEE_H_DEFINED_glBindVertexArray typedef void (APIENTRYP GLEEPFNGLBINDVERTEXARRAYPROC) (GLuint array); GLEE_EXTERN GLEEPFNGLBINDVERTEXARRAYPROC GLeeFuncPtr_glBindVertexArray; #define glBindVertexArray GLeeFuncPtr_glBindVertexArray #endif #ifndef GLEE_H_DEFINED_glDeleteVertexArrays #define GLEE_H_DEFINED_glDeleteVertexArrays typedef void (APIENTRYP GLEEPFNGLDELETEVERTEXARRAYSPROC) (GLsizei n, const GLuint * arrays); GLEE_EXTERN GLEEPFNGLDELETEVERTEXARRAYSPROC GLeeFuncPtr_glDeleteVertexArrays; #define glDeleteVertexArrays GLeeFuncPtr_glDeleteVertexArrays #endif #ifndef GLEE_H_DEFINED_glGenVertexArrays #define GLEE_H_DEFINED_glGenVertexArrays typedef void (APIENTRYP GLEEPFNGLGENVERTEXARRAYSPROC) (GLsizei n, GLuint * arrays); GLEE_EXTERN GLEEPFNGLGENVERTEXARRAYSPROC GLeeFuncPtr_glGenVertexArrays; #define glGenVertexArrays GLeeFuncPtr_glGenVertexArrays #endif #ifndef GLEE_H_DEFINED_glIsVertexArray #define GLEE_H_DEFINED_glIsVertexArray typedef GLboolean (APIENTRYP GLEEPFNGLISVERTEXARRAYPROC) (GLuint array); GLEE_EXTERN GLEEPFNGLISVERTEXARRAYPROC GLeeFuncPtr_glIsVertexArray; #define glIsVertexArray GLeeFuncPtr_glIsVertexArray #endif #endif /* GL_EXT_abgr */ #ifndef GL_EXT_abgr #define GL_EXT_abgr 1 #define __GLEE_GL_EXT_abgr 1 /* Constants */ #define GL_ABGR_EXT 0x8000 #endif /* GL_EXT_blend_color */ #ifndef GL_EXT_blend_color #define GL_EXT_blend_color 1 #define __GLEE_GL_EXT_blend_color 1 /* Constants */ #define GL_CONSTANT_COLOR_EXT 0x8001 #define GL_ONE_MINUS_CONSTANT_COLOR_EXT 0x8002 #define GL_CONSTANT_ALPHA_EXT 0x8003 #define GL_ONE_MINUS_CONSTANT_ALPHA_EXT 0x8004 #define GL_BLEND_COLOR_EXT 0x8005 #ifndef GLEE_H_DEFINED_glBlendColorEXT #define GLEE_H_DEFINED_glBlendColorEXT typedef void (APIENTRYP GLEEPFNGLBLENDCOLOREXTPROC) (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); GLEE_EXTERN GLEEPFNGLBLENDCOLOREXTPROC GLeeFuncPtr_glBlendColorEXT; #define glBlendColorEXT GLeeFuncPtr_glBlendColorEXT #endif #endif /* GL_EXT_polygon_offset */ #ifndef GL_EXT_polygon_offset #define GL_EXT_polygon_offset 1 #define __GLEE_GL_EXT_polygon_offset 1 /* Constants */ #define GL_POLYGON_OFFSET_EXT 0x8037 #define GL_POLYGON_OFFSET_FACTOR_EXT 0x8038 #define GL_POLYGON_OFFSET_BIAS_EXT 0x8039 #ifndef GLEE_H_DEFINED_glPolygonOffsetEXT #define GLEE_H_DEFINED_glPolygonOffsetEXT typedef void (APIENTRYP GLEEPFNGLPOLYGONOFFSETEXTPROC) (GLfloat factor, GLfloat bias); GLEE_EXTERN GLEEPFNGLPOLYGONOFFSETEXTPROC GLeeFuncPtr_glPolygonOffsetEXT; #define glPolygonOffsetEXT GLeeFuncPtr_glPolygonOffsetEXT #endif #endif /* GL_EXT_texture */ #ifndef GL_EXT_texture #define GL_EXT_texture 1 #define __GLEE_GL_EXT_texture 1 /* Constants */ #define GL_ALPHA4_EXT 0x803B #define GL_ALPHA8_EXT 0x803C #define GL_ALPHA12_EXT 0x803D #define GL_ALPHA16_EXT 0x803E #define GL_LUMINANCE4_EXT 0x803F #define GL_LUMINANCE8_EXT 0x8040 #define GL_LUMINANCE12_EXT 0x8041 #define GL_LUMINANCE16_EXT 0x8042 #define GL_LUMINANCE4_ALPHA4_EXT 0x8043 #define GL_LUMINANCE6_ALPHA2_EXT 0x8044 #define GL_LUMINANCE8_ALPHA8_EXT 0x8045 #define GL_LUMINANCE12_ALPHA4_EXT 0x8046 #define GL_LUMINANCE12_ALPHA12_EXT 0x8047 #define GL_LUMINANCE16_ALPHA16_EXT 0x8048 #define GL_INTENSITY_EXT 0x8049 #define GL_INTENSITY4_EXT 0x804A #define GL_INTENSITY8_EXT 0x804B #define GL_INTENSITY12_EXT 0x804C #define GL_INTENSITY16_EXT 0x804D #define GL_RGB2_EXT 0x804E #define GL_RGB4_EXT 0x804F #define GL_RGB5_EXT 0x8050 #define GL_RGB8_EXT 0x8051 #define GL_RGB10_EXT 0x8052 #define GL_RGB12_EXT 0x8053 #define GL_RGB16_EXT 0x8054 #define GL_RGBA2_EXT 0x8055 #define GL_RGBA4_EXT 0x8056 #define GL_RGB5_A1_EXT 0x8057 #define GL_RGBA8_EXT 0x8058 #define GL_RGB10_A2_EXT 0x8059 #define GL_RGBA12_EXT 0x805A #define GL_RGBA16_EXT 0x805B #define GL_TEXTURE_RED_SIZE_EXT 0x805C #define GL_TEXTURE_GREEN_SIZE_EXT 0x805D #define GL_TEXTURE_BLUE_SIZE_EXT 0x805E #define GL_TEXTURE_ALPHA_SIZE_EXT 0x805F #define GL_TEXTURE_LUMINANCE_SIZE_EXT 0x8060 #define GL_TEXTURE_INTENSITY_SIZE_EXT 0x8061 #define GL_REPLACE_EXT 0x8062 #define GL_PROXY_TEXTURE_1D_EXT 0x8063 #define GL_PROXY_TEXTURE_2D_EXT 0x8064 #define GL_TEXTURE_TOO_LARGE_EXT 0x8065 #endif /* GL_EXT_texture3D */ #ifndef GL_EXT_texture3D #define GL_EXT_texture3D 1 #define __GLEE_GL_EXT_texture3D 1 /* Constants */ #define GL_PACK_SKIP_IMAGES_EXT 0x806B #define GL_PACK_IMAGE_HEIGHT_EXT 0x806C #define GL_UNPACK_SKIP_IMAGES_EXT 0x806D #define GL_UNPACK_IMAGE_HEIGHT_EXT 0x806E #define GL_TEXTURE_3D_EXT 0x806F #define GL_PROXY_TEXTURE_3D_EXT 0x8070 #define GL_TEXTURE_DEPTH_EXT 0x8071 #define GL_TEXTURE_WRAP_R_EXT 0x8072 #define GL_MAX_3D_TEXTURE_SIZE_EXT 0x8073 #ifndef GLEE_H_DEFINED_glTexImage3DEXT #define GLEE_H_DEFINED_glTexImage3DEXT typedef void (APIENTRYP GLEEPFNGLTEXIMAGE3DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid * pixels); GLEE_EXTERN GLEEPFNGLTEXIMAGE3DEXTPROC GLeeFuncPtr_glTexImage3DEXT; #define glTexImage3DEXT GLeeFuncPtr_glTexImage3DEXT #endif #ifndef GLEE_H_DEFINED_glTexSubImage3DEXT #define GLEE_H_DEFINED_glTexSubImage3DEXT typedef void (APIENTRYP GLEEPFNGLTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid * pixels); GLEE_EXTERN GLEEPFNGLTEXSUBIMAGE3DEXTPROC GLeeFuncPtr_glTexSubImage3DEXT; #define glTexSubImage3DEXT GLeeFuncPtr_glTexSubImage3DEXT #endif #endif /* GL_SGIS_texture_filter4 */ #ifndef GL_SGIS_texture_filter4 #define GL_SGIS_texture_filter4 1 #define __GLEE_GL_SGIS_texture_filter4 1 /* Constants */ #define GL_FILTER4_SGIS 0x8146 #define GL_TEXTURE_FILTER4_SIZE_SGIS 0x8147 #ifndef GLEE_H_DEFINED_glGetTexFilterFuncSGIS #define GLEE_H_DEFINED_glGetTexFilterFuncSGIS typedef void (APIENTRYP GLEEPFNGLGETTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLfloat * weights); GLEE_EXTERN GLEEPFNGLGETTEXFILTERFUNCSGISPROC GLeeFuncPtr_glGetTexFilterFuncSGIS; #define glGetTexFilterFuncSGIS GLeeFuncPtr_glGetTexFilterFuncSGIS #endif #ifndef GLEE_H_DEFINED_glTexFilterFuncSGIS #define GLEE_H_DEFINED_glTexFilterFuncSGIS typedef void (APIENTRYP GLEEPFNGLTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLsizei n, const GLfloat * weights); GLEE_EXTERN GLEEPFNGLTEXFILTERFUNCSGISPROC GLeeFuncPtr_glTexFilterFuncSGIS; #define glTexFilterFuncSGIS GLeeFuncPtr_glTexFilterFuncSGIS #endif #endif /* GL_EXT_subtexture */ #ifndef GL_EXT_subtexture #define GL_EXT_subtexture 1 #define __GLEE_GL_EXT_subtexture 1 /* Constants */ #ifndef GLEE_H_DEFINED_glTexSubImage1DEXT #define GLEE_H_DEFINED_glTexSubImage1DEXT typedef void (APIENTRYP GLEEPFNGLTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid * pixels); GLEE_EXTERN GLEEPFNGLTEXSUBIMAGE1DEXTPROC GLeeFuncPtr_glTexSubImage1DEXT; #define glTexSubImage1DEXT GLeeFuncPtr_glTexSubImage1DEXT #endif #ifndef GLEE_H_DEFINED_glTexSubImage2DEXT #define GLEE_H_DEFINED_glTexSubImage2DEXT typedef void (APIENTRYP GLEEPFNGLTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * pixels); GLEE_EXTERN GLEEPFNGLTEXSUBIMAGE2DEXTPROC GLeeFuncPtr_glTexSubImage2DEXT; #define glTexSubImage2DEXT GLeeFuncPtr_glTexSubImage2DEXT #endif #endif /* GL_EXT_copy_texture */ #ifndef GL_EXT_copy_texture #define GL_EXT_copy_texture 1 #define __GLEE_GL_EXT_copy_texture 1 /* Constants */ #ifndef GLEE_H_DEFINED_glCopyTexImage1DEXT #define GLEE_H_DEFINED_glCopyTexImage1DEXT typedef void (APIENTRYP GLEEPFNGLCOPYTEXIMAGE1DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); GLEE_EXTERN GLEEPFNGLCOPYTEXIMAGE1DEXTPROC GLeeFuncPtr_glCopyTexImage1DEXT; #define glCopyTexImage1DEXT GLeeFuncPtr_glCopyTexImage1DEXT #endif #ifndef GLEE_H_DEFINED_glCopyTexImage2DEXT #define GLEE_H_DEFINED_glCopyTexImage2DEXT typedef void (APIENTRYP GLEEPFNGLCOPYTEXIMAGE2DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); GLEE_EXTERN GLEEPFNGLCOPYTEXIMAGE2DEXTPROC GLeeFuncPtr_glCopyTexImage2DEXT; #define glCopyTexImage2DEXT GLeeFuncPtr_glCopyTexImage2DEXT #endif #ifndef GLEE_H_DEFINED_glCopyTexSubImage1DEXT #define GLEE_H_DEFINED_glCopyTexSubImage1DEXT typedef void (APIENTRYP GLEEPFNGLCOPYTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); GLEE_EXTERN GLEEPFNGLCOPYTEXSUBIMAGE1DEXTPROC GLeeFuncPtr_glCopyTexSubImage1DEXT; #define glCopyTexSubImage1DEXT GLeeFuncPtr_glCopyTexSubImage1DEXT #endif #ifndef GLEE_H_DEFINED_glCopyTexSubImage2DEXT #define GLEE_H_DEFINED_glCopyTexSubImage2DEXT typedef void (APIENTRYP GLEEPFNGLCOPYTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); GLEE_EXTERN GLEEPFNGLCOPYTEXSUBIMAGE2DEXTPROC GLeeFuncPtr_glCopyTexSubImage2DEXT; #define glCopyTexSubImage2DEXT GLeeFuncPtr_glCopyTexSubImage2DEXT #endif #ifndef GLEE_H_DEFINED_glCopyTexSubImage3DEXT #define GLEE_H_DEFINED_glCopyTexSubImage3DEXT typedef void (APIENTRYP GLEEPFNGLCOPYTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); GLEE_EXTERN GLEEPFNGLCOPYTEXSUBIMAGE3DEXTPROC GLeeFuncPtr_glCopyTexSubImage3DEXT; #define glCopyTexSubImage3DEXT GLeeFuncPtr_glCopyTexSubImage3DEXT #endif #endif /* GL_EXT_histogram */ #ifndef GL_EXT_histogram #define GL_EXT_histogram 1 #define __GLEE_GL_EXT_histogram 1 /* Constants */ #define GL_HISTOGRAM_EXT 0x8024 #define GL_PROXY_HISTOGRAM_EXT 0x8025 #define GL_HISTOGRAM_WIDTH_EXT 0x8026 #define GL_HISTOGRAM_FORMAT_EXT 0x8027 #define GL_HISTOGRAM_RED_SIZE_EXT 0x8028 #define GL_HISTOGRAM_GREEN_SIZE_EXT 0x8029 #define GL_HISTOGRAM_BLUE_SIZE_EXT 0x802A #define GL_HISTOGRAM_ALPHA_SIZE_EXT 0x802B #define GL_HISTOGRAM_LUMINANCE_SIZE_EXT 0x802C #define GL_HISTOGRAM_SINK_EXT 0x802D #define GL_MINMAX_EXT 0x802E #define GL_MINMAX_FORMAT_EXT 0x802F #define GL_MINMAX_SINK_EXT 0x8030 #define GL_TABLE_TOO_LARGE_EXT 0x8031 #ifndef GLEE_H_DEFINED_glGetHistogramEXT #define GLEE_H_DEFINED_glGetHistogramEXT typedef void (APIENTRYP GLEEPFNGLGETHISTOGRAMEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid * values); GLEE_EXTERN GLEEPFNGLGETHISTOGRAMEXTPROC GLeeFuncPtr_glGetHistogramEXT; #define glGetHistogramEXT GLeeFuncPtr_glGetHistogramEXT #endif #ifndef GLEE_H_DEFINED_glGetHistogramParameterfvEXT #define GLEE_H_DEFINED_glGetHistogramParameterfvEXT typedef void (APIENTRYP GLEEPFNGLGETHISTOGRAMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETHISTOGRAMPARAMETERFVEXTPROC GLeeFuncPtr_glGetHistogramParameterfvEXT; #define glGetHistogramParameterfvEXT GLeeFuncPtr_glGetHistogramParameterfvEXT #endif #ifndef GLEE_H_DEFINED_glGetHistogramParameterivEXT #define GLEE_H_DEFINED_glGetHistogramParameterivEXT typedef void (APIENTRYP GLEEPFNGLGETHISTOGRAMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETHISTOGRAMPARAMETERIVEXTPROC GLeeFuncPtr_glGetHistogramParameterivEXT; #define glGetHistogramParameterivEXT GLeeFuncPtr_glGetHistogramParameterivEXT #endif #ifndef GLEE_H_DEFINED_glGetMinmaxEXT #define GLEE_H_DEFINED_glGetMinmaxEXT typedef void (APIENTRYP GLEEPFNGLGETMINMAXEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid * values); GLEE_EXTERN GLEEPFNGLGETMINMAXEXTPROC GLeeFuncPtr_glGetMinmaxEXT; #define glGetMinmaxEXT GLeeFuncPtr_glGetMinmaxEXT #endif #ifndef GLEE_H_DEFINED_glGetMinmaxParameterfvEXT #define GLEE_H_DEFINED_glGetMinmaxParameterfvEXT typedef void (APIENTRYP GLEEPFNGLGETMINMAXPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETMINMAXPARAMETERFVEXTPROC GLeeFuncPtr_glGetMinmaxParameterfvEXT; #define glGetMinmaxParameterfvEXT GLeeFuncPtr_glGetMinmaxParameterfvEXT #endif #ifndef GLEE_H_DEFINED_glGetMinmaxParameterivEXT #define GLEE_H_DEFINED_glGetMinmaxParameterivEXT typedef void (APIENTRYP GLEEPFNGLGETMINMAXPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETMINMAXPARAMETERIVEXTPROC GLeeFuncPtr_glGetMinmaxParameterivEXT; #define glGetMinmaxParameterivEXT GLeeFuncPtr_glGetMinmaxParameterivEXT #endif #ifndef GLEE_H_DEFINED_glHistogramEXT #define GLEE_H_DEFINED_glHistogramEXT typedef void (APIENTRYP GLEEPFNGLHISTOGRAMEXTPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); GLEE_EXTERN GLEEPFNGLHISTOGRAMEXTPROC GLeeFuncPtr_glHistogramEXT; #define glHistogramEXT GLeeFuncPtr_glHistogramEXT #endif #ifndef GLEE_H_DEFINED_glMinmaxEXT #define GLEE_H_DEFINED_glMinmaxEXT typedef void (APIENTRYP GLEEPFNGLMINMAXEXTPROC) (GLenum target, GLenum internalformat, GLboolean sink); GLEE_EXTERN GLEEPFNGLMINMAXEXTPROC GLeeFuncPtr_glMinmaxEXT; #define glMinmaxEXT GLeeFuncPtr_glMinmaxEXT #endif #ifndef GLEE_H_DEFINED_glResetHistogramEXT #define GLEE_H_DEFINED_glResetHistogramEXT typedef void (APIENTRYP GLEEPFNGLRESETHISTOGRAMEXTPROC) (GLenum target); GLEE_EXTERN GLEEPFNGLRESETHISTOGRAMEXTPROC GLeeFuncPtr_glResetHistogramEXT; #define glResetHistogramEXT GLeeFuncPtr_glResetHistogramEXT #endif #ifndef GLEE_H_DEFINED_glResetMinmaxEXT #define GLEE_H_DEFINED_glResetMinmaxEXT typedef void (APIENTRYP GLEEPFNGLRESETMINMAXEXTPROC) (GLenum target); GLEE_EXTERN GLEEPFNGLRESETMINMAXEXTPROC GLeeFuncPtr_glResetMinmaxEXT; #define glResetMinmaxEXT GLeeFuncPtr_glResetMinmaxEXT #endif #endif /* GL_EXT_convolution */ #ifndef GL_EXT_convolution #define GL_EXT_convolution 1 #define __GLEE_GL_EXT_convolution 1 /* Constants */ #define GL_CONVOLUTION_1D_EXT 0x8010 #define GL_CONVOLUTION_2D_EXT 0x8011 #define GL_SEPARABLE_2D_EXT 0x8012 #define GL_CONVOLUTION_BORDER_MODE_EXT 0x8013 #define GL_CONVOLUTION_FILTER_SCALE_EXT 0x8014 #define GL_CONVOLUTION_FILTER_BIAS_EXT 0x8015 #define GL_REDUCE_EXT 0x8016 #define GL_CONVOLUTION_FORMAT_EXT 0x8017 #define GL_CONVOLUTION_WIDTH_EXT 0x8018 #define GL_CONVOLUTION_HEIGHT_EXT 0x8019 #define GL_MAX_CONVOLUTION_WIDTH_EXT 0x801A #define GL_MAX_CONVOLUTION_HEIGHT_EXT 0x801B #define GL_POST_CONVOLUTION_RED_SCALE_EXT 0x801C #define GL_POST_CONVOLUTION_GREEN_SCALE_EXT 0x801D #define GL_POST_CONVOLUTION_BLUE_SCALE_EXT 0x801E #define GL_POST_CONVOLUTION_ALPHA_SCALE_EXT 0x801F #define GL_POST_CONVOLUTION_RED_BIAS_EXT 0x8020 #define GL_POST_CONVOLUTION_GREEN_BIAS_EXT 0x8021 #define GL_POST_CONVOLUTION_BLUE_BIAS_EXT 0x8022 #define GL_POST_CONVOLUTION_ALPHA_BIAS_EXT 0x8023 #ifndef GLEE_H_DEFINED_glConvolutionFilter1DEXT #define GLEE_H_DEFINED_glConvolutionFilter1DEXT typedef void (APIENTRYP GLEEPFNGLCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid * image); GLEE_EXTERN GLEEPFNGLCONVOLUTIONFILTER1DEXTPROC GLeeFuncPtr_glConvolutionFilter1DEXT; #define glConvolutionFilter1DEXT GLeeFuncPtr_glConvolutionFilter1DEXT #endif #ifndef GLEE_H_DEFINED_glConvolutionFilter2DEXT #define GLEE_H_DEFINED_glConvolutionFilter2DEXT typedef void (APIENTRYP GLEEPFNGLCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * image); GLEE_EXTERN GLEEPFNGLCONVOLUTIONFILTER2DEXTPROC GLeeFuncPtr_glConvolutionFilter2DEXT; #define glConvolutionFilter2DEXT GLeeFuncPtr_glConvolutionFilter2DEXT #endif #ifndef GLEE_H_DEFINED_glConvolutionParameterfEXT #define GLEE_H_DEFINED_glConvolutionParameterfEXT typedef void (APIENTRYP GLEEPFNGLCONVOLUTIONPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat params); GLEE_EXTERN GLEEPFNGLCONVOLUTIONPARAMETERFEXTPROC GLeeFuncPtr_glConvolutionParameterfEXT; #define glConvolutionParameterfEXT GLeeFuncPtr_glConvolutionParameterfEXT #endif #ifndef GLEE_H_DEFINED_glConvolutionParameterfvEXT #define GLEE_H_DEFINED_glConvolutionParameterfvEXT typedef void (APIENTRYP GLEEPFNGLCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat * params); GLEE_EXTERN GLEEPFNGLCONVOLUTIONPARAMETERFVEXTPROC GLeeFuncPtr_glConvolutionParameterfvEXT; #define glConvolutionParameterfvEXT GLeeFuncPtr_glConvolutionParameterfvEXT #endif #ifndef GLEE_H_DEFINED_glConvolutionParameteriEXT #define GLEE_H_DEFINED_glConvolutionParameteriEXT typedef void (APIENTRYP GLEEPFNGLCONVOLUTIONPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint params); GLEE_EXTERN GLEEPFNGLCONVOLUTIONPARAMETERIEXTPROC GLeeFuncPtr_glConvolutionParameteriEXT; #define glConvolutionParameteriEXT GLeeFuncPtr_glConvolutionParameteriEXT #endif #ifndef GLEE_H_DEFINED_glConvolutionParameterivEXT #define GLEE_H_DEFINED_glConvolutionParameterivEXT typedef void (APIENTRYP GLEEPFNGLCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint * params); GLEE_EXTERN GLEEPFNGLCONVOLUTIONPARAMETERIVEXTPROC GLeeFuncPtr_glConvolutionParameterivEXT; #define glConvolutionParameterivEXT GLeeFuncPtr_glConvolutionParameterivEXT #endif #ifndef GLEE_H_DEFINED_glCopyConvolutionFilter1DEXT #define GLEE_H_DEFINED_glCopyConvolutionFilter1DEXT typedef void (APIENTRYP GLEEPFNGLCOPYCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); GLEE_EXTERN GLEEPFNGLCOPYCONVOLUTIONFILTER1DEXTPROC GLeeFuncPtr_glCopyConvolutionFilter1DEXT; #define glCopyConvolutionFilter1DEXT GLeeFuncPtr_glCopyConvolutionFilter1DEXT #endif #ifndef GLEE_H_DEFINED_glCopyConvolutionFilter2DEXT #define GLEE_H_DEFINED_glCopyConvolutionFilter2DEXT typedef void (APIENTRYP GLEEPFNGLCOPYCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); GLEE_EXTERN GLEEPFNGLCOPYCONVOLUTIONFILTER2DEXTPROC GLeeFuncPtr_glCopyConvolutionFilter2DEXT; #define glCopyConvolutionFilter2DEXT GLeeFuncPtr_glCopyConvolutionFilter2DEXT #endif #ifndef GLEE_H_DEFINED_glGetConvolutionFilterEXT #define GLEE_H_DEFINED_glGetConvolutionFilterEXT typedef void (APIENTRYP GLEEPFNGLGETCONVOLUTIONFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid * image); GLEE_EXTERN GLEEPFNGLGETCONVOLUTIONFILTEREXTPROC GLeeFuncPtr_glGetConvolutionFilterEXT; #define glGetConvolutionFilterEXT GLeeFuncPtr_glGetConvolutionFilterEXT #endif #ifndef GLEE_H_DEFINED_glGetConvolutionParameterfvEXT #define GLEE_H_DEFINED_glGetConvolutionParameterfvEXT typedef void (APIENTRYP GLEEPFNGLGETCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETCONVOLUTIONPARAMETERFVEXTPROC GLeeFuncPtr_glGetConvolutionParameterfvEXT; #define glGetConvolutionParameterfvEXT GLeeFuncPtr_glGetConvolutionParameterfvEXT #endif #ifndef GLEE_H_DEFINED_glGetConvolutionParameterivEXT #define GLEE_H_DEFINED_glGetConvolutionParameterivEXT typedef void (APIENTRYP GLEEPFNGLGETCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETCONVOLUTIONPARAMETERIVEXTPROC GLeeFuncPtr_glGetConvolutionParameterivEXT; #define glGetConvolutionParameterivEXT GLeeFuncPtr_glGetConvolutionParameterivEXT #endif #ifndef GLEE_H_DEFINED_glGetSeparableFilterEXT #define GLEE_H_DEFINED_glGetSeparableFilterEXT typedef void (APIENTRYP GLEEPFNGLGETSEPARABLEFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid * row, GLvoid * column, GLvoid * span); GLEE_EXTERN GLEEPFNGLGETSEPARABLEFILTEREXTPROC GLeeFuncPtr_glGetSeparableFilterEXT; #define glGetSeparableFilterEXT GLeeFuncPtr_glGetSeparableFilterEXT #endif #ifndef GLEE_H_DEFINED_glSeparableFilter2DEXT #define GLEE_H_DEFINED_glSeparableFilter2DEXT typedef void (APIENTRYP GLEEPFNGLSEPARABLEFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * row, const GLvoid * column); GLEE_EXTERN GLEEPFNGLSEPARABLEFILTER2DEXTPROC GLeeFuncPtr_glSeparableFilter2DEXT; #define glSeparableFilter2DEXT GLeeFuncPtr_glSeparableFilter2DEXT #endif #endif /* GL_SGI_color_matrix */ #ifndef GL_SGI_color_matrix #define GL_SGI_color_matrix 1 #define __GLEE_GL_SGI_color_matrix 1 /* Constants */ #define GL_COLOR_MATRIX_SGI 0x80B1 #define GL_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B2 #define GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B3 #define GL_POST_COLOR_MATRIX_RED_SCALE_SGI 0x80B4 #define GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI 0x80B5 #define GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI 0x80B6 #define GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI 0x80B7 #define GL_POST_COLOR_MATRIX_RED_BIAS_SGI 0x80B8 #define GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI 0x80B9 #define GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI 0x80BA #define GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI 0x80BB #endif /* GL_SGI_color_table */ #ifndef GL_SGI_color_table #define GL_SGI_color_table 1 #define __GLEE_GL_SGI_color_table 1 /* Constants */ #define GL_COLOR_TABLE_SGI 0x80D0 #define GL_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D1 #define GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D2 #define GL_PROXY_COLOR_TABLE_SGI 0x80D3 #define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D4 #define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D5 #define GL_COLOR_TABLE_SCALE_SGI 0x80D6 #define GL_COLOR_TABLE_BIAS_SGI 0x80D7 #define GL_COLOR_TABLE_FORMAT_SGI 0x80D8 #define GL_COLOR_TABLE_WIDTH_SGI 0x80D9 #define GL_COLOR_TABLE_RED_SIZE_SGI 0x80DA #define GL_COLOR_TABLE_GREEN_SIZE_SGI 0x80DB #define GL_COLOR_TABLE_BLUE_SIZE_SGI 0x80DC #define GL_COLOR_TABLE_ALPHA_SIZE_SGI 0x80DD #define GL_COLOR_TABLE_LUMINANCE_SIZE_SGI 0x80DE #define GL_COLOR_TABLE_INTENSITY_SIZE_SGI 0x80DF #ifndef GLEE_H_DEFINED_glColorTableSGI #define GLEE_H_DEFINED_glColorTableSGI typedef void (APIENTRYP GLEEPFNGLCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid * table); GLEE_EXTERN GLEEPFNGLCOLORTABLESGIPROC GLeeFuncPtr_glColorTableSGI; #define glColorTableSGI GLeeFuncPtr_glColorTableSGI #endif #ifndef GLEE_H_DEFINED_glColorTableParameterfvSGI #define GLEE_H_DEFINED_glColorTableParameterfvSGI typedef void (APIENTRYP GLEEPFNGLCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, const GLfloat * params); GLEE_EXTERN GLEEPFNGLCOLORTABLEPARAMETERFVSGIPROC GLeeFuncPtr_glColorTableParameterfvSGI; #define glColorTableParameterfvSGI GLeeFuncPtr_glColorTableParameterfvSGI #endif #ifndef GLEE_H_DEFINED_glColorTableParameterivSGI #define GLEE_H_DEFINED_glColorTableParameterivSGI typedef void (APIENTRYP GLEEPFNGLCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, const GLint * params); GLEE_EXTERN GLEEPFNGLCOLORTABLEPARAMETERIVSGIPROC GLeeFuncPtr_glColorTableParameterivSGI; #define glColorTableParameterivSGI GLeeFuncPtr_glColorTableParameterivSGI #endif #ifndef GLEE_H_DEFINED_glCopyColorTableSGI #define GLEE_H_DEFINED_glCopyColorTableSGI typedef void (APIENTRYP GLEEPFNGLCOPYCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); GLEE_EXTERN GLEEPFNGLCOPYCOLORTABLESGIPROC GLeeFuncPtr_glCopyColorTableSGI; #define glCopyColorTableSGI GLeeFuncPtr_glCopyColorTableSGI #endif #ifndef GLEE_H_DEFINED_glGetColorTableSGI #define GLEE_H_DEFINED_glGetColorTableSGI typedef void (APIENTRYP GLEEPFNGLGETCOLORTABLESGIPROC) (GLenum target, GLenum format, GLenum type, GLvoid * table); GLEE_EXTERN GLEEPFNGLGETCOLORTABLESGIPROC GLeeFuncPtr_glGetColorTableSGI; #define glGetColorTableSGI GLeeFuncPtr_glGetColorTableSGI #endif #ifndef GLEE_H_DEFINED_glGetColorTableParameterfvSGI #define GLEE_H_DEFINED_glGetColorTableParameterfvSGI typedef void (APIENTRYP GLEEPFNGLGETCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETCOLORTABLEPARAMETERFVSGIPROC GLeeFuncPtr_glGetColorTableParameterfvSGI; #define glGetColorTableParameterfvSGI GLeeFuncPtr_glGetColorTableParameterfvSGI #endif #ifndef GLEE_H_DEFINED_glGetColorTableParameterivSGI #define GLEE_H_DEFINED_glGetColorTableParameterivSGI typedef void (APIENTRYP GLEEPFNGLGETCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETCOLORTABLEPARAMETERIVSGIPROC GLeeFuncPtr_glGetColorTableParameterivSGI; #define glGetColorTableParameterivSGI GLeeFuncPtr_glGetColorTableParameterivSGI #endif #endif /* GL_SGIS_pixel_texture */ #ifndef GL_SGIS_pixel_texture #define GL_SGIS_pixel_texture 1 #define __GLEE_GL_SGIS_pixel_texture 1 /* Constants */ #define GL_PIXEL_TEXTURE_SGIS 0x8353 #define GL_PIXEL_FRAGMENT_RGB_SOURCE_SGIS 0x8354 #define GL_PIXEL_FRAGMENT_ALPHA_SOURCE_SGIS 0x8355 #define GL_PIXEL_GROUP_COLOR_SGIS 0x8356 #ifndef GLEE_H_DEFINED_glPixelTexGenParameteriSGIS #define GLEE_H_DEFINED_glPixelTexGenParameteriSGIS typedef void (APIENTRYP GLEEPFNGLPIXELTEXGENPARAMETERISGISPROC) (GLenum pname, GLint param); GLEE_EXTERN GLEEPFNGLPIXELTEXGENPARAMETERISGISPROC GLeeFuncPtr_glPixelTexGenParameteriSGIS; #define glPixelTexGenParameteriSGIS GLeeFuncPtr_glPixelTexGenParameteriSGIS #endif #ifndef GLEE_H_DEFINED_glPixelTexGenParameterivSGIS #define GLEE_H_DEFINED_glPixelTexGenParameterivSGIS typedef void (APIENTRYP GLEEPFNGLPIXELTEXGENPARAMETERIVSGISPROC) (GLenum pname, const GLint * params); GLEE_EXTERN GLEEPFNGLPIXELTEXGENPARAMETERIVSGISPROC GLeeFuncPtr_glPixelTexGenParameterivSGIS; #define glPixelTexGenParameterivSGIS GLeeFuncPtr_glPixelTexGenParameterivSGIS #endif #ifndef GLEE_H_DEFINED_glPixelTexGenParameterfSGIS #define GLEE_H_DEFINED_glPixelTexGenParameterfSGIS typedef void (APIENTRYP GLEEPFNGLPIXELTEXGENPARAMETERFSGISPROC) (GLenum pname, GLfloat param); GLEE_EXTERN GLEEPFNGLPIXELTEXGENPARAMETERFSGISPROC GLeeFuncPtr_glPixelTexGenParameterfSGIS; #define glPixelTexGenParameterfSGIS GLeeFuncPtr_glPixelTexGenParameterfSGIS #endif #ifndef GLEE_H_DEFINED_glPixelTexGenParameterfvSGIS #define GLEE_H_DEFINED_glPixelTexGenParameterfvSGIS typedef void (APIENTRYP GLEEPFNGLPIXELTEXGENPARAMETERFVSGISPROC) (GLenum pname, const GLfloat * params); GLEE_EXTERN GLEEPFNGLPIXELTEXGENPARAMETERFVSGISPROC GLeeFuncPtr_glPixelTexGenParameterfvSGIS; #define glPixelTexGenParameterfvSGIS GLeeFuncPtr_glPixelTexGenParameterfvSGIS #endif #ifndef GLEE_H_DEFINED_glGetPixelTexGenParameterivSGIS #define GLEE_H_DEFINED_glGetPixelTexGenParameterivSGIS typedef void (APIENTRYP GLEEPFNGLGETPIXELTEXGENPARAMETERIVSGISPROC) (GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETPIXELTEXGENPARAMETERIVSGISPROC GLeeFuncPtr_glGetPixelTexGenParameterivSGIS; #define glGetPixelTexGenParameterivSGIS GLeeFuncPtr_glGetPixelTexGenParameterivSGIS #endif #ifndef GLEE_H_DEFINED_glGetPixelTexGenParameterfvSGIS #define GLEE_H_DEFINED_glGetPixelTexGenParameterfvSGIS typedef void (APIENTRYP GLEEPFNGLGETPIXELTEXGENPARAMETERFVSGISPROC) (GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETPIXELTEXGENPARAMETERFVSGISPROC GLeeFuncPtr_glGetPixelTexGenParameterfvSGIS; #define glGetPixelTexGenParameterfvSGIS GLeeFuncPtr_glGetPixelTexGenParameterfvSGIS #endif #endif /* GL_SGIX_pixel_texture */ #ifndef GL_SGIX_pixel_texture #define GL_SGIX_pixel_texture 1 #define __GLEE_GL_SGIX_pixel_texture 1 /* Constants */ #define GL_PIXEL_TEX_GEN_SGIX 0x8139 #define GL_PIXEL_TEX_GEN_MODE_SGIX 0x832B #ifndef GLEE_H_DEFINED_glPixelTexGenSGIX #define GLEE_H_DEFINED_glPixelTexGenSGIX typedef void (APIENTRYP GLEEPFNGLPIXELTEXGENSGIXPROC) (GLenum mode); GLEE_EXTERN GLEEPFNGLPIXELTEXGENSGIXPROC GLeeFuncPtr_glPixelTexGenSGIX; #define glPixelTexGenSGIX GLeeFuncPtr_glPixelTexGenSGIX #endif #endif /* GL_SGIS_texture4D */ #ifndef GL_SGIS_texture4D #define GL_SGIS_texture4D 1 #define __GLEE_GL_SGIS_texture4D 1 /* Constants */ #define GL_PACK_SKIP_VOLUMES_SGIS 0x8130 #define GL_PACK_IMAGE_DEPTH_SGIS 0x8131 #define GL_UNPACK_SKIP_VOLUMES_SGIS 0x8132 #define GL_UNPACK_IMAGE_DEPTH_SGIS 0x8133 #define GL_TEXTURE_4D_SGIS 0x8134 #define GL_PROXY_TEXTURE_4D_SGIS 0x8135 #define GL_TEXTURE_4DSIZE_SGIS 0x8136 #define GL_TEXTURE_WRAP_Q_SGIS 0x8137 #define GL_MAX_4D_TEXTURE_SIZE_SGIS 0x8138 #define GL_TEXTURE_4D_BINDING_SGIS 0x814F #ifndef GLEE_H_DEFINED_glTexImage4DSGIS #define GLEE_H_DEFINED_glTexImage4DSGIS typedef void (APIENTRYP GLEEPFNGLTEXIMAGE4DSGISPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const GLvoid * pixels); GLEE_EXTERN GLEEPFNGLTEXIMAGE4DSGISPROC GLeeFuncPtr_glTexImage4DSGIS; #define glTexImage4DSGIS GLeeFuncPtr_glTexImage4DSGIS #endif #ifndef GLEE_H_DEFINED_glTexSubImage4DSGIS #define GLEE_H_DEFINED_glTexSubImage4DSGIS typedef void (APIENTRYP GLEEPFNGLTEXSUBIMAGE4DSGISPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLenum format, GLenum type, const GLvoid * pixels); GLEE_EXTERN GLEEPFNGLTEXSUBIMAGE4DSGISPROC GLeeFuncPtr_glTexSubImage4DSGIS; #define glTexSubImage4DSGIS GLeeFuncPtr_glTexSubImage4DSGIS #endif #endif /* GL_SGI_texture_color_table */ #ifndef GL_SGI_texture_color_table #define GL_SGI_texture_color_table 1 #define __GLEE_GL_SGI_texture_color_table 1 /* Constants */ #define GL_TEXTURE_COLOR_TABLE_SGI 0x80BC #define GL_PROXY_TEXTURE_COLOR_TABLE_SGI 0x80BD #endif /* GL_EXT_cmyka */ #ifndef GL_EXT_cmyka #define GL_EXT_cmyka 1 #define __GLEE_GL_EXT_cmyka 1 /* Constants */ #define GL_CMYK_EXT 0x800C #define GL_CMYKA_EXT 0x800D #define GL_PACK_CMYK_HINT_EXT 0x800E #define GL_UNPACK_CMYK_HINT_EXT 0x800F #endif /* GL_EXT_texture_object */ #ifndef GL_EXT_texture_object #define GL_EXT_texture_object 1 #define __GLEE_GL_EXT_texture_object 1 /* Constants */ #define GL_TEXTURE_PRIORITY_EXT 0x8066 #define GL_TEXTURE_RESIDENT_EXT 0x8067 #define GL_TEXTURE_1D_BINDING_EXT 0x8068 #define GL_TEXTURE_2D_BINDING_EXT 0x8069 #define GL_TEXTURE_3D_BINDING_EXT 0x806A #ifndef GLEE_H_DEFINED_glAreTexturesResidentEXT #define GLEE_H_DEFINED_glAreTexturesResidentEXT typedef GLboolean (APIENTRYP GLEEPFNGLARETEXTURESRESIDENTEXTPROC) (GLsizei n, const GLuint * textures, GLboolean * residences); GLEE_EXTERN GLEEPFNGLARETEXTURESRESIDENTEXTPROC GLeeFuncPtr_glAreTexturesResidentEXT; #define glAreTexturesResidentEXT GLeeFuncPtr_glAreTexturesResidentEXT #endif #ifndef GLEE_H_DEFINED_glBindTextureEXT #define GLEE_H_DEFINED_glBindTextureEXT typedef void (APIENTRYP GLEEPFNGLBINDTEXTUREEXTPROC) (GLenum target, GLuint texture); GLEE_EXTERN GLEEPFNGLBINDTEXTUREEXTPROC GLeeFuncPtr_glBindTextureEXT; #define glBindTextureEXT GLeeFuncPtr_glBindTextureEXT #endif #ifndef GLEE_H_DEFINED_glDeleteTexturesEXT #define GLEE_H_DEFINED_glDeleteTexturesEXT typedef void (APIENTRYP GLEEPFNGLDELETETEXTURESEXTPROC) (GLsizei n, const GLuint * textures); GLEE_EXTERN GLEEPFNGLDELETETEXTURESEXTPROC GLeeFuncPtr_glDeleteTexturesEXT; #define glDeleteTexturesEXT GLeeFuncPtr_glDeleteTexturesEXT #endif #ifndef GLEE_H_DEFINED_glGenTexturesEXT #define GLEE_H_DEFINED_glGenTexturesEXT typedef void (APIENTRYP GLEEPFNGLGENTEXTURESEXTPROC) (GLsizei n, GLuint * textures); GLEE_EXTERN GLEEPFNGLGENTEXTURESEXTPROC GLeeFuncPtr_glGenTexturesEXT; #define glGenTexturesEXT GLeeFuncPtr_glGenTexturesEXT #endif #ifndef GLEE_H_DEFINED_glIsTextureEXT #define GLEE_H_DEFINED_glIsTextureEXT typedef GLboolean (APIENTRYP GLEEPFNGLISTEXTUREEXTPROC) (GLuint texture); GLEE_EXTERN GLEEPFNGLISTEXTUREEXTPROC GLeeFuncPtr_glIsTextureEXT; #define glIsTextureEXT GLeeFuncPtr_glIsTextureEXT #endif #ifndef GLEE_H_DEFINED_glPrioritizeTexturesEXT #define GLEE_H_DEFINED_glPrioritizeTexturesEXT typedef void (APIENTRYP GLEEPFNGLPRIORITIZETEXTURESEXTPROC) (GLsizei n, const GLuint * textures, const GLclampf * priorities); GLEE_EXTERN GLEEPFNGLPRIORITIZETEXTURESEXTPROC GLeeFuncPtr_glPrioritizeTexturesEXT; #define glPrioritizeTexturesEXT GLeeFuncPtr_glPrioritizeTexturesEXT #endif #endif /* GL_SGIS_detail_texture */ #ifndef GL_SGIS_detail_texture #define GL_SGIS_detail_texture 1 #define __GLEE_GL_SGIS_detail_texture 1 /* Constants */ #define GL_DETAIL_TEXTURE_2D_SGIS 0x8095 #define GL_DETAIL_TEXTURE_2D_BINDING_SGIS 0x8096 #define GL_LINEAR_DETAIL_SGIS 0x8097 #define GL_LINEAR_DETAIL_ALPHA_SGIS 0x8098 #define GL_LINEAR_DETAIL_COLOR_SGIS 0x8099 #define GL_DETAIL_TEXTURE_LEVEL_SGIS 0x809A #define GL_DETAIL_TEXTURE_MODE_SGIS 0x809B #define GL_DETAIL_TEXTURE_FUNC_POINTS_SGIS 0x809C #ifndef GLEE_H_DEFINED_glDetailTexFuncSGIS #define GLEE_H_DEFINED_glDetailTexFuncSGIS typedef void (APIENTRYP GLEEPFNGLDETAILTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat * points); GLEE_EXTERN GLEEPFNGLDETAILTEXFUNCSGISPROC GLeeFuncPtr_glDetailTexFuncSGIS; #define glDetailTexFuncSGIS GLeeFuncPtr_glDetailTexFuncSGIS #endif #ifndef GLEE_H_DEFINED_glGetDetailTexFuncSGIS #define GLEE_H_DEFINED_glGetDetailTexFuncSGIS typedef void (APIENTRYP GLEEPFNGLGETDETAILTEXFUNCSGISPROC) (GLenum target, GLfloat * points); GLEE_EXTERN GLEEPFNGLGETDETAILTEXFUNCSGISPROC GLeeFuncPtr_glGetDetailTexFuncSGIS; #define glGetDetailTexFuncSGIS GLeeFuncPtr_glGetDetailTexFuncSGIS #endif #endif /* GL_SGIS_sharpen_texture */ #ifndef GL_SGIS_sharpen_texture #define GL_SGIS_sharpen_texture 1 #define __GLEE_GL_SGIS_sharpen_texture 1 /* Constants */ #define GL_LINEAR_SHARPEN_SGIS 0x80AD #define GL_LINEAR_SHARPEN_ALPHA_SGIS 0x80AE #define GL_LINEAR_SHARPEN_COLOR_SGIS 0x80AF #define GL_SHARPEN_TEXTURE_FUNC_POINTS_SGIS 0x80B0 #ifndef GLEE_H_DEFINED_glSharpenTexFuncSGIS #define GLEE_H_DEFINED_glSharpenTexFuncSGIS typedef void (APIENTRYP GLEEPFNGLSHARPENTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat * points); GLEE_EXTERN GLEEPFNGLSHARPENTEXFUNCSGISPROC GLeeFuncPtr_glSharpenTexFuncSGIS; #define glSharpenTexFuncSGIS GLeeFuncPtr_glSharpenTexFuncSGIS #endif #ifndef GLEE_H_DEFINED_glGetSharpenTexFuncSGIS #define GLEE_H_DEFINED_glGetSharpenTexFuncSGIS typedef void (APIENTRYP GLEEPFNGLGETSHARPENTEXFUNCSGISPROC) (GLenum target, GLfloat * points); GLEE_EXTERN GLEEPFNGLGETSHARPENTEXFUNCSGISPROC GLeeFuncPtr_glGetSharpenTexFuncSGIS; #define glGetSharpenTexFuncSGIS GLeeFuncPtr_glGetSharpenTexFuncSGIS #endif #endif /* GL_EXT_packed_pixels */ #ifndef GL_EXT_packed_pixels #define GL_EXT_packed_pixels 1 #define __GLEE_GL_EXT_packed_pixels 1 /* Constants */ #define GL_UNSIGNED_BYTE_3_3_2_EXT 0x8032 #define GL_UNSIGNED_SHORT_4_4_4_4_EXT 0x8033 #define GL_UNSIGNED_SHORT_5_5_5_1_EXT 0x8034 #define GL_UNSIGNED_INT_8_8_8_8_EXT 0x8035 #define GL_UNSIGNED_INT_10_10_10_2_EXT 0x8036 #endif /* GL_SGIS_texture_lod */ #ifndef GL_SGIS_texture_lod #define GL_SGIS_texture_lod 1 #define __GLEE_GL_SGIS_texture_lod 1 /* Constants */ #define GL_TEXTURE_MIN_LOD_SGIS 0x813A #define GL_TEXTURE_MAX_LOD_SGIS 0x813B #define GL_TEXTURE_BASE_LEVEL_SGIS 0x813C #define GL_TEXTURE_MAX_LEVEL_SGIS 0x813D #endif /* GL_SGIS_multisample */ #ifndef GL_SGIS_multisample #define GL_SGIS_multisample 1 #define __GLEE_GL_SGIS_multisample 1 /* Constants */ #define GL_MULTISAMPLE_SGIS 0x809D #define GL_SAMPLE_ALPHA_TO_MASK_SGIS 0x809E #define GL_SAMPLE_ALPHA_TO_ONE_SGIS 0x809F #define GL_SAMPLE_MASK_SGIS 0x80A0 #define GL_1PASS_SGIS 0x80A1 #define GL_2PASS_0_SGIS 0x80A2 #define GL_2PASS_1_SGIS 0x80A3 #define GL_4PASS_0_SGIS 0x80A4 #define GL_4PASS_1_SGIS 0x80A5 #define GL_4PASS_2_SGIS 0x80A6 #define GL_4PASS_3_SGIS 0x80A7 #define GL_SAMPLE_BUFFERS_SGIS 0x80A8 #define GL_SAMPLES_SGIS 0x80A9 #define GL_SAMPLE_MASK_VALUE_SGIS 0x80AA #define GL_SAMPLE_MASK_INVERT_SGIS 0x80AB #define GL_SAMPLE_PATTERN_SGIS 0x80AC #ifndef GLEE_H_DEFINED_glSampleMaskSGIS #define GLEE_H_DEFINED_glSampleMaskSGIS typedef void (APIENTRYP GLEEPFNGLSAMPLEMASKSGISPROC) (GLclampf value, GLboolean invert); GLEE_EXTERN GLEEPFNGLSAMPLEMASKSGISPROC GLeeFuncPtr_glSampleMaskSGIS; #define glSampleMaskSGIS GLeeFuncPtr_glSampleMaskSGIS #endif #ifndef GLEE_H_DEFINED_glSamplePatternSGIS #define GLEE_H_DEFINED_glSamplePatternSGIS typedef void (APIENTRYP GLEEPFNGLSAMPLEPATTERNSGISPROC) (GLenum pattern); GLEE_EXTERN GLEEPFNGLSAMPLEPATTERNSGISPROC GLeeFuncPtr_glSamplePatternSGIS; #define glSamplePatternSGIS GLeeFuncPtr_glSamplePatternSGIS #endif #endif /* GL_EXT_rescale_normal */ #ifndef GL_EXT_rescale_normal #define GL_EXT_rescale_normal 1 #define __GLEE_GL_EXT_rescale_normal 1 /* Constants */ #define GL_RESCALE_NORMAL_EXT 0x803A #endif /* GL_EXT_vertex_array */ #ifndef GL_EXT_vertex_array #define GL_EXT_vertex_array 1 #define __GLEE_GL_EXT_vertex_array 1 /* Constants */ #define GL_VERTEX_ARRAY_EXT 0x8074 #define GL_NORMAL_ARRAY_EXT 0x8075 #define GL_COLOR_ARRAY_EXT 0x8076 #define GL_INDEX_ARRAY_EXT 0x8077 #define GL_TEXTURE_COORD_ARRAY_EXT 0x8078 #define GL_EDGE_FLAG_ARRAY_EXT 0x8079 #define GL_VERTEX_ARRAY_SIZE_EXT 0x807A #define GL_VERTEX_ARRAY_TYPE_EXT 0x807B #define GL_VERTEX_ARRAY_STRIDE_EXT 0x807C #define GL_VERTEX_ARRAY_COUNT_EXT 0x807D #define GL_NORMAL_ARRAY_TYPE_EXT 0x807E #define GL_NORMAL_ARRAY_STRIDE_EXT 0x807F #define GL_NORMAL_ARRAY_COUNT_EXT 0x8080 #define GL_COLOR_ARRAY_SIZE_EXT 0x8081 #define GL_COLOR_ARRAY_TYPE_EXT 0x8082 #define GL_COLOR_ARRAY_STRIDE_EXT 0x8083 #define GL_COLOR_ARRAY_COUNT_EXT 0x8084 #define GL_INDEX_ARRAY_TYPE_EXT 0x8085 #define GL_INDEX_ARRAY_STRIDE_EXT 0x8086 #define GL_INDEX_ARRAY_COUNT_EXT 0x8087 #define GL_TEXTURE_COORD_ARRAY_SIZE_EXT 0x8088 #define GL_TEXTURE_COORD_ARRAY_TYPE_EXT 0x8089 #define GL_TEXTURE_COORD_ARRAY_STRIDE_EXT 0x808A #define GL_TEXTURE_COORD_ARRAY_COUNT_EXT 0x808B #define GL_EDGE_FLAG_ARRAY_STRIDE_EXT 0x808C #define GL_EDGE_FLAG_ARRAY_COUNT_EXT 0x808D #define GL_VERTEX_ARRAY_POINTER_EXT 0x808E #define GL_NORMAL_ARRAY_POINTER_EXT 0x808F #define GL_COLOR_ARRAY_POINTER_EXT 0x8090 #define GL_INDEX_ARRAY_POINTER_EXT 0x8091 #define GL_TEXTURE_COORD_ARRAY_POINTER_EXT 0x8092 #define GL_EDGE_FLAG_ARRAY_POINTER_EXT 0x8093 #ifndef GLEE_H_DEFINED_glArrayElementEXT #define GLEE_H_DEFINED_glArrayElementEXT typedef void (APIENTRYP GLEEPFNGLARRAYELEMENTEXTPROC) (GLint i); GLEE_EXTERN GLEEPFNGLARRAYELEMENTEXTPROC GLeeFuncPtr_glArrayElementEXT; #define glArrayElementEXT GLeeFuncPtr_glArrayElementEXT #endif #ifndef GLEE_H_DEFINED_glColorPointerEXT #define GLEE_H_DEFINED_glColorPointerEXT typedef void (APIENTRYP GLEEPFNGLCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer); GLEE_EXTERN GLEEPFNGLCOLORPOINTEREXTPROC GLeeFuncPtr_glColorPointerEXT; #define glColorPointerEXT GLeeFuncPtr_glColorPointerEXT #endif #ifndef GLEE_H_DEFINED_glDrawArraysEXT #define GLEE_H_DEFINED_glDrawArraysEXT typedef void (APIENTRYP GLEEPFNGLDRAWARRAYSEXTPROC) (GLenum mode, GLint first, GLsizei count); GLEE_EXTERN GLEEPFNGLDRAWARRAYSEXTPROC GLeeFuncPtr_glDrawArraysEXT; #define glDrawArraysEXT GLeeFuncPtr_glDrawArraysEXT #endif #ifndef GLEE_H_DEFINED_glEdgeFlagPointerEXT #define GLEE_H_DEFINED_glEdgeFlagPointerEXT typedef void (APIENTRYP GLEEPFNGLEDGEFLAGPOINTEREXTPROC) (GLsizei stride, GLsizei count, const GLboolean * pointer); GLEE_EXTERN GLEEPFNGLEDGEFLAGPOINTEREXTPROC GLeeFuncPtr_glEdgeFlagPointerEXT; #define glEdgeFlagPointerEXT GLeeFuncPtr_glEdgeFlagPointerEXT #endif #ifndef GLEE_H_DEFINED_glGetPointervEXT #define GLEE_H_DEFINED_glGetPointervEXT typedef void (APIENTRYP GLEEPFNGLGETPOINTERVEXTPROC) (GLenum pname, GLvoid* * params); GLEE_EXTERN GLEEPFNGLGETPOINTERVEXTPROC GLeeFuncPtr_glGetPointervEXT; #define glGetPointervEXT GLeeFuncPtr_glGetPointervEXT #endif #ifndef GLEE_H_DEFINED_glIndexPointerEXT #define GLEE_H_DEFINED_glIndexPointerEXT typedef void (APIENTRYP GLEEPFNGLINDEXPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer); GLEE_EXTERN GLEEPFNGLINDEXPOINTEREXTPROC GLeeFuncPtr_glIndexPointerEXT; #define glIndexPointerEXT GLeeFuncPtr_glIndexPointerEXT #endif #ifndef GLEE_H_DEFINED_glNormalPointerEXT #define GLEE_H_DEFINED_glNormalPointerEXT typedef void (APIENTRYP GLEEPFNGLNORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer); GLEE_EXTERN GLEEPFNGLNORMALPOINTEREXTPROC GLeeFuncPtr_glNormalPointerEXT; #define glNormalPointerEXT GLeeFuncPtr_glNormalPointerEXT #endif #ifndef GLEE_H_DEFINED_glTexCoordPointerEXT #define GLEE_H_DEFINED_glTexCoordPointerEXT typedef void (APIENTRYP GLEEPFNGLTEXCOORDPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer); GLEE_EXTERN GLEEPFNGLTEXCOORDPOINTEREXTPROC GLeeFuncPtr_glTexCoordPointerEXT; #define glTexCoordPointerEXT GLeeFuncPtr_glTexCoordPointerEXT #endif #ifndef GLEE_H_DEFINED_glVertexPointerEXT #define GLEE_H_DEFINED_glVertexPointerEXT typedef void (APIENTRYP GLEEPFNGLVERTEXPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer); GLEE_EXTERN GLEEPFNGLVERTEXPOINTEREXTPROC GLeeFuncPtr_glVertexPointerEXT; #define glVertexPointerEXT GLeeFuncPtr_glVertexPointerEXT #endif #endif /* GL_EXT_misc_attribute */ #ifndef GL_EXT_misc_attribute #define GL_EXT_misc_attribute 1 #define __GLEE_GL_EXT_misc_attribute 1 /* Constants */ #endif /* GL_SGIS_generate_mipmap */ #ifndef GL_SGIS_generate_mipmap #define GL_SGIS_generate_mipmap 1 #define __GLEE_GL_SGIS_generate_mipmap 1 /* Constants */ #define GL_GENERATE_MIPMAP_SGIS 0x8191 #define GL_GENERATE_MIPMAP_HINT_SGIS 0x8192 #endif /* GL_SGIX_clipmap */ #ifndef GL_SGIX_clipmap #define GL_SGIX_clipmap 1 #define __GLEE_GL_SGIX_clipmap 1 /* Constants */ #define GL_LINEAR_CLIPMAP_LINEAR_SGIX 0x8170 #define GL_TEXTURE_CLIPMAP_CENTER_SGIX 0x8171 #define GL_TEXTURE_CLIPMAP_FRAME_SGIX 0x8172 #define GL_TEXTURE_CLIPMAP_OFFSET_SGIX 0x8173 #define GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8174 #define GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX 0x8175 #define GL_TEXTURE_CLIPMAP_DEPTH_SGIX 0x8176 #define GL_MAX_CLIPMAP_DEPTH_SGIX 0x8177 #define GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8178 #define GL_NEAREST_CLIPMAP_NEAREST_SGIX 0x844D #define GL_NEAREST_CLIPMAP_LINEAR_SGIX 0x844E #define GL_LINEAR_CLIPMAP_NEAREST_SGIX 0x844F #endif /* GL_SGIX_shadow */ #ifndef GL_SGIX_shadow #define GL_SGIX_shadow 1 #define __GLEE_GL_SGIX_shadow 1 /* Constants */ #define GL_TEXTURE_COMPARE_SGIX 0x819A #define GL_TEXTURE_COMPARE_OPERATOR_SGIX 0x819B #define GL_TEXTURE_LEQUAL_R_SGIX 0x819C #define GL_TEXTURE_GEQUAL_R_SGIX 0x819D #endif /* GL_SGIS_texture_edge_clamp */ #ifndef GL_SGIS_texture_edge_clamp #define GL_SGIS_texture_edge_clamp 1 #define __GLEE_GL_SGIS_texture_edge_clamp 1 /* Constants */ #define GL_CLAMP_TO_EDGE_SGIS 0x812F #endif /* GL_SGIS_texture_border_clamp */ #ifndef GL_SGIS_texture_border_clamp #define GL_SGIS_texture_border_clamp 1 #define __GLEE_GL_SGIS_texture_border_clamp 1 /* Constants */ #define GL_CLAMP_TO_BORDER_SGIS 0x812D #endif /* GL_EXT_blend_minmax */ #ifndef GL_EXT_blend_minmax #define GL_EXT_blend_minmax 1 #define __GLEE_GL_EXT_blend_minmax 1 /* Constants */ #define GL_FUNC_ADD_EXT 0x8006 #define GL_MIN_EXT 0x8007 #define GL_MAX_EXT 0x8008 #define GL_BLEND_EQUATION_EXT 0x8009 #ifndef GLEE_H_DEFINED_glBlendEquationEXT #define GLEE_H_DEFINED_glBlendEquationEXT typedef void (APIENTRYP GLEEPFNGLBLENDEQUATIONEXTPROC) (GLenum mode); GLEE_EXTERN GLEEPFNGLBLENDEQUATIONEXTPROC GLeeFuncPtr_glBlendEquationEXT; #define glBlendEquationEXT GLeeFuncPtr_glBlendEquationEXT #endif #endif /* GL_EXT_blend_subtract */ #ifndef GL_EXT_blend_subtract #define GL_EXT_blend_subtract 1 #define __GLEE_GL_EXT_blend_subtract 1 /* Constants */ #define GL_FUNC_SUBTRACT_EXT 0x800A #define GL_FUNC_REVERSE_SUBTRACT_EXT 0x800B #endif /* GL_EXT_blend_logic_op */ #ifndef GL_EXT_blend_logic_op #define GL_EXT_blend_logic_op 1 #define __GLEE_GL_EXT_blend_logic_op 1 /* Constants */ #endif /* GL_SGIX_interlace */ #ifndef GL_SGIX_interlace #define GL_SGIX_interlace 1 #define __GLEE_GL_SGIX_interlace 1 /* Constants */ #define GL_INTERLACE_SGIX 0x8094 #endif /* GL_SGIX_pixel_tiles */ #ifndef GL_SGIX_pixel_tiles #define GL_SGIX_pixel_tiles 1 #define __GLEE_GL_SGIX_pixel_tiles 1 /* Constants */ #define GL_PIXEL_TILE_BEST_ALIGNMENT_SGIX 0x813E #define GL_PIXEL_TILE_CACHE_INCREMENT_SGIX 0x813F #define GL_PIXEL_TILE_WIDTH_SGIX 0x8140 #define GL_PIXEL_TILE_HEIGHT_SGIX 0x8141 #define GL_PIXEL_TILE_GRID_WIDTH_SGIX 0x8142 #define GL_PIXEL_TILE_GRID_HEIGHT_SGIX 0x8143 #define GL_PIXEL_TILE_GRID_DEPTH_SGIX 0x8144 #define GL_PIXEL_TILE_CACHE_SIZE_SGIX 0x8145 #endif /* GL_SGIS_texture_select */ #ifndef GL_SGIS_texture_select #define GL_SGIS_texture_select 1 #define __GLEE_GL_SGIS_texture_select 1 /* Constants */ #define GL_DUAL_ALPHA4_SGIS 0x8110 #define GL_DUAL_ALPHA8_SGIS 0x8111 #define GL_DUAL_ALPHA12_SGIS 0x8112 #define GL_DUAL_ALPHA16_SGIS 0x8113 #define GL_DUAL_LUMINANCE4_SGIS 0x8114 #define GL_DUAL_LUMINANCE8_SGIS 0x8115 #define GL_DUAL_LUMINANCE12_SGIS 0x8116 #define GL_DUAL_LUMINANCE16_SGIS 0x8117 #define GL_DUAL_INTENSITY4_SGIS 0x8118 #define GL_DUAL_INTENSITY8_SGIS 0x8119 #define GL_DUAL_INTENSITY12_SGIS 0x811A #define GL_DUAL_INTENSITY16_SGIS 0x811B #define GL_DUAL_LUMINANCE_ALPHA4_SGIS 0x811C #define GL_DUAL_LUMINANCE_ALPHA8_SGIS 0x811D #define GL_QUAD_ALPHA4_SGIS 0x811E #define GL_QUAD_ALPHA8_SGIS 0x811F #define GL_QUAD_LUMINANCE4_SGIS 0x8120 #define GL_QUAD_LUMINANCE8_SGIS 0x8121 #define GL_QUAD_INTENSITY4_SGIS 0x8122 #define GL_QUAD_INTENSITY8_SGIS 0x8123 #define GL_DUAL_TEXTURE_SELECT_SGIS 0x8124 #define GL_QUAD_TEXTURE_SELECT_SGIS 0x8125 #endif /* GL_SGIX_sprite */ #ifndef GL_SGIX_sprite #define GL_SGIX_sprite 1 #define __GLEE_GL_SGIX_sprite 1 /* Constants */ #define GL_SPRITE_SGIX 0x8148 #define GL_SPRITE_MODE_SGIX 0x8149 #define GL_SPRITE_AXIS_SGIX 0x814A #define GL_SPRITE_TRANSLATION_SGIX 0x814B #define GL_SPRITE_AXIAL_SGIX 0x814C #define GL_SPRITE_OBJECT_ALIGNED_SGIX 0x814D #define GL_SPRITE_EYE_ALIGNED_SGIX 0x814E #ifndef GLEE_H_DEFINED_glSpriteParameterfSGIX #define GLEE_H_DEFINED_glSpriteParameterfSGIX typedef void (APIENTRYP GLEEPFNGLSPRITEPARAMETERFSGIXPROC) (GLenum pname, GLfloat param); GLEE_EXTERN GLEEPFNGLSPRITEPARAMETERFSGIXPROC GLeeFuncPtr_glSpriteParameterfSGIX; #define glSpriteParameterfSGIX GLeeFuncPtr_glSpriteParameterfSGIX #endif #ifndef GLEE_H_DEFINED_glSpriteParameterfvSGIX #define GLEE_H_DEFINED_glSpriteParameterfvSGIX typedef void (APIENTRYP GLEEPFNGLSPRITEPARAMETERFVSGIXPROC) (GLenum pname, const GLfloat * params); GLEE_EXTERN GLEEPFNGLSPRITEPARAMETERFVSGIXPROC GLeeFuncPtr_glSpriteParameterfvSGIX; #define glSpriteParameterfvSGIX GLeeFuncPtr_glSpriteParameterfvSGIX #endif #ifndef GLEE_H_DEFINED_glSpriteParameteriSGIX #define GLEE_H_DEFINED_glSpriteParameteriSGIX typedef void (APIENTRYP GLEEPFNGLSPRITEPARAMETERISGIXPROC) (GLenum pname, GLint param); GLEE_EXTERN GLEEPFNGLSPRITEPARAMETERISGIXPROC GLeeFuncPtr_glSpriteParameteriSGIX; #define glSpriteParameteriSGIX GLeeFuncPtr_glSpriteParameteriSGIX #endif #ifndef GLEE_H_DEFINED_glSpriteParameterivSGIX #define GLEE_H_DEFINED_glSpriteParameterivSGIX typedef void (APIENTRYP GLEEPFNGLSPRITEPARAMETERIVSGIXPROC) (GLenum pname, const GLint * params); GLEE_EXTERN GLEEPFNGLSPRITEPARAMETERIVSGIXPROC GLeeFuncPtr_glSpriteParameterivSGIX; #define glSpriteParameterivSGIX GLeeFuncPtr_glSpriteParameterivSGIX #endif #endif /* GL_SGIX_texture_multi_buffer */ #ifndef GL_SGIX_texture_multi_buffer #define GL_SGIX_texture_multi_buffer 1 #define __GLEE_GL_SGIX_texture_multi_buffer 1 /* Constants */ #define GL_TEXTURE_MULTI_BUFFER_HINT_SGIX 0x812E #endif /* GL_EXT_point_parameters */ #ifndef GL_EXT_point_parameters #define GL_EXT_point_parameters 1 #define __GLEE_GL_EXT_point_parameters 1 /* Constants */ #define GL_POINT_SIZE_MIN_EXT 0x8126 #define GL_POINT_SIZE_MAX_EXT 0x8127 #define GL_POINT_FADE_THRESHOLD_SIZE_EXT 0x8128 #define GL_DISTANCE_ATTENUATION_EXT 0x8129 #ifndef GLEE_H_DEFINED_glPointParameterfEXT #define GLEE_H_DEFINED_glPointParameterfEXT typedef void (APIENTRYP GLEEPFNGLPOINTPARAMETERFEXTPROC) (GLenum pname, GLfloat param); GLEE_EXTERN GLEEPFNGLPOINTPARAMETERFEXTPROC GLeeFuncPtr_glPointParameterfEXT; #define glPointParameterfEXT GLeeFuncPtr_glPointParameterfEXT #endif #ifndef GLEE_H_DEFINED_glPointParameterfvEXT #define GLEE_H_DEFINED_glPointParameterfvEXT typedef void (APIENTRYP GLEEPFNGLPOINTPARAMETERFVEXTPROC) (GLenum pname, const GLfloat * params); GLEE_EXTERN GLEEPFNGLPOINTPARAMETERFVEXTPROC GLeeFuncPtr_glPointParameterfvEXT; #define glPointParameterfvEXT GLeeFuncPtr_glPointParameterfvEXT #endif #endif /* GL_SGIS_point_parameters */ #ifndef GL_SGIS_point_parameters #define GL_SGIS_point_parameters 1 #define __GLEE_GL_SGIS_point_parameters 1 /* Constants */ #define GL_POINT_SIZE_MIN_SGIS 0x8126 #define GL_POINT_SIZE_MAX_SGIS 0x8127 #define GL_POINT_FADE_THRESHOLD_SIZE_SGIS 0x8128 #define GL_DISTANCE_ATTENUATION_SGIS 0x8129 #ifndef GLEE_H_DEFINED_glPointParameterfSGIS #define GLEE_H_DEFINED_glPointParameterfSGIS typedef void (APIENTRYP GLEEPFNGLPOINTPARAMETERFSGISPROC) (GLenum pname, GLfloat param); GLEE_EXTERN GLEEPFNGLPOINTPARAMETERFSGISPROC GLeeFuncPtr_glPointParameterfSGIS; #define glPointParameterfSGIS GLeeFuncPtr_glPointParameterfSGIS #endif #ifndef GLEE_H_DEFINED_glPointParameterfvSGIS #define GLEE_H_DEFINED_glPointParameterfvSGIS typedef void (APIENTRYP GLEEPFNGLPOINTPARAMETERFVSGISPROC) (GLenum pname, const GLfloat * params); GLEE_EXTERN GLEEPFNGLPOINTPARAMETERFVSGISPROC GLeeFuncPtr_glPointParameterfvSGIS; #define glPointParameterfvSGIS GLeeFuncPtr_glPointParameterfvSGIS #endif #endif /* GL_SGIX_instruments */ #ifndef GL_SGIX_instruments #define GL_SGIX_instruments 1 #define __GLEE_GL_SGIX_instruments 1 /* Constants */ #define GL_INSTRUMENT_BUFFER_POINTER_SGIX 0x8180 #define GL_INSTRUMENT_MEASUREMENTS_SGIX 0x8181 #ifndef GLEE_H_DEFINED_glGetInstrumentsSGIX #define GLEE_H_DEFINED_glGetInstrumentsSGIX typedef GLint (APIENTRYP GLEEPFNGLGETINSTRUMENTSSGIXPROC) (); GLEE_EXTERN GLEEPFNGLGETINSTRUMENTSSGIXPROC GLeeFuncPtr_glGetInstrumentsSGIX; #define glGetInstrumentsSGIX GLeeFuncPtr_glGetInstrumentsSGIX #endif #ifndef GLEE_H_DEFINED_glInstrumentsBufferSGIX #define GLEE_H_DEFINED_glInstrumentsBufferSGIX typedef void (APIENTRYP GLEEPFNGLINSTRUMENTSBUFFERSGIXPROC) (GLsizei size, GLint * buffer); GLEE_EXTERN GLEEPFNGLINSTRUMENTSBUFFERSGIXPROC GLeeFuncPtr_glInstrumentsBufferSGIX; #define glInstrumentsBufferSGIX GLeeFuncPtr_glInstrumentsBufferSGIX #endif #ifndef GLEE_H_DEFINED_glPollInstrumentsSGIX #define GLEE_H_DEFINED_glPollInstrumentsSGIX typedef GLint (APIENTRYP GLEEPFNGLPOLLINSTRUMENTSSGIXPROC) (GLint * marker_p); GLEE_EXTERN GLEEPFNGLPOLLINSTRUMENTSSGIXPROC GLeeFuncPtr_glPollInstrumentsSGIX; #define glPollInstrumentsSGIX GLeeFuncPtr_glPollInstrumentsSGIX #endif #ifndef GLEE_H_DEFINED_glReadInstrumentsSGIX #define GLEE_H_DEFINED_glReadInstrumentsSGIX typedef void (APIENTRYP GLEEPFNGLREADINSTRUMENTSSGIXPROC) (GLint marker); GLEE_EXTERN GLEEPFNGLREADINSTRUMENTSSGIXPROC GLeeFuncPtr_glReadInstrumentsSGIX; #define glReadInstrumentsSGIX GLeeFuncPtr_glReadInstrumentsSGIX #endif #ifndef GLEE_H_DEFINED_glStartInstrumentsSGIX #define GLEE_H_DEFINED_glStartInstrumentsSGIX typedef void (APIENTRYP GLEEPFNGLSTARTINSTRUMENTSSGIXPROC) (); GLEE_EXTERN GLEEPFNGLSTARTINSTRUMENTSSGIXPROC GLeeFuncPtr_glStartInstrumentsSGIX; #define glStartInstrumentsSGIX GLeeFuncPtr_glStartInstrumentsSGIX #endif #ifndef GLEE_H_DEFINED_glStopInstrumentsSGIX #define GLEE_H_DEFINED_glStopInstrumentsSGIX typedef void (APIENTRYP GLEEPFNGLSTOPINSTRUMENTSSGIXPROC) (GLint marker); GLEE_EXTERN GLEEPFNGLSTOPINSTRUMENTSSGIXPROC GLeeFuncPtr_glStopInstrumentsSGIX; #define glStopInstrumentsSGIX GLeeFuncPtr_glStopInstrumentsSGIX #endif #endif /* GL_SGIX_texture_scale_bias */ #ifndef GL_SGIX_texture_scale_bias #define GL_SGIX_texture_scale_bias 1 #define __GLEE_GL_SGIX_texture_scale_bias 1 /* Constants */ #define GL_POST_TEXTURE_FILTER_BIAS_SGIX 0x8179 #define GL_POST_TEXTURE_FILTER_SCALE_SGIX 0x817A #define GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX 0x817B #define GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX 0x817C #endif /* GL_SGIX_framezoom */ #ifndef GL_SGIX_framezoom #define GL_SGIX_framezoom 1 #define __GLEE_GL_SGIX_framezoom 1 /* Constants */ #define GL_FRAMEZOOM_SGIX 0x818B #define GL_FRAMEZOOM_FACTOR_SGIX 0x818C #define GL_MAX_FRAMEZOOM_FACTOR_SGIX 0x818D #ifndef GLEE_H_DEFINED_glFrameZoomSGIX #define GLEE_H_DEFINED_glFrameZoomSGIX typedef void (APIENTRYP GLEEPFNGLFRAMEZOOMSGIXPROC) (GLint factor); GLEE_EXTERN GLEEPFNGLFRAMEZOOMSGIXPROC GLeeFuncPtr_glFrameZoomSGIX; #define glFrameZoomSGIX GLeeFuncPtr_glFrameZoomSGIX #endif #endif /* GL_SGIX_tag_sample_buffer */ #ifndef GL_SGIX_tag_sample_buffer #define GL_SGIX_tag_sample_buffer 1 #define __GLEE_GL_SGIX_tag_sample_buffer 1 /* Constants */ #ifndef GLEE_H_DEFINED_glTagSampleBufferSGIX #define GLEE_H_DEFINED_glTagSampleBufferSGIX typedef void (APIENTRYP GLEEPFNGLTAGSAMPLEBUFFERSGIXPROC) (); GLEE_EXTERN GLEEPFNGLTAGSAMPLEBUFFERSGIXPROC GLeeFuncPtr_glTagSampleBufferSGIX; #define glTagSampleBufferSGIX GLeeFuncPtr_glTagSampleBufferSGIX #endif #endif /* GL_FfdMaskSGIX */ #ifndef GL_FfdMaskSGIX #define GL_FfdMaskSGIX 1 #define __GLEE_GL_FfdMaskSGIX 1 /* Constants */ #define GL_TEXTURE_DEFORMATION_BIT_SGIX 0x00000001 #define GL_GEOMETRY_DEFORMATION_BIT_SGIX 0x00000002 #endif /* GL_SGIX_polynomial_ffd */ #ifndef GL_SGIX_polynomial_ffd #define GL_SGIX_polynomial_ffd 1 #define __GLEE_GL_SGIX_polynomial_ffd 1 /* Constants */ #define GL_GEOMETRY_DEFORMATION_SGIX 0x8194 #define GL_TEXTURE_DEFORMATION_SGIX 0x8195 #define GL_DEFORMATIONS_MASK_SGIX 0x8196 #define GL_MAX_DEFORMATION_ORDER_SGIX 0x8197 #ifndef GLEE_H_DEFINED_glDeformationMap3dSGIX #define GLEE_H_DEFINED_glDeformationMap3dSGIX typedef void (APIENTRYP GLEEPFNGLDEFORMATIONMAP3DSGIXPROC) (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, GLdouble w1, GLdouble w2, GLint wstride, GLint worder, const GLdouble * points); GLEE_EXTERN GLEEPFNGLDEFORMATIONMAP3DSGIXPROC GLeeFuncPtr_glDeformationMap3dSGIX; #define glDeformationMap3dSGIX GLeeFuncPtr_glDeformationMap3dSGIX #endif #ifndef GLEE_H_DEFINED_glDeformationMap3fSGIX #define GLEE_H_DEFINED_glDeformationMap3fSGIX typedef void (APIENTRYP GLEEPFNGLDEFORMATIONMAP3FSGIXPROC) (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, GLfloat w1, GLfloat w2, GLint wstride, GLint worder, const GLfloat * points); GLEE_EXTERN GLEEPFNGLDEFORMATIONMAP3FSGIXPROC GLeeFuncPtr_glDeformationMap3fSGIX; #define glDeformationMap3fSGIX GLeeFuncPtr_glDeformationMap3fSGIX #endif #ifndef GLEE_H_DEFINED_glDeformSGIX #define GLEE_H_DEFINED_glDeformSGIX typedef void (APIENTRYP GLEEPFNGLDEFORMSGIXPROC) (GLbitfield mask); GLEE_EXTERN GLEEPFNGLDEFORMSGIXPROC GLeeFuncPtr_glDeformSGIX; #define glDeformSGIX GLeeFuncPtr_glDeformSGIX #endif #ifndef GLEE_H_DEFINED_glLoadIdentityDeformationMapSGIX #define GLEE_H_DEFINED_glLoadIdentityDeformationMapSGIX typedef void (APIENTRYP GLEEPFNGLLOADIDENTITYDEFORMATIONMAPSGIXPROC) (GLbitfield mask); GLEE_EXTERN GLEEPFNGLLOADIDENTITYDEFORMATIONMAPSGIXPROC GLeeFuncPtr_glLoadIdentityDeformationMapSGIX; #define glLoadIdentityDeformationMapSGIX GLeeFuncPtr_glLoadIdentityDeformationMapSGIX #endif #endif /* GL_SGIX_reference_plane */ #ifndef GL_SGIX_reference_plane #define GL_SGIX_reference_plane 1 #define __GLEE_GL_SGIX_reference_plane 1 /* Constants */ #define GL_REFERENCE_PLANE_SGIX 0x817D #define GL_REFERENCE_PLANE_EQUATION_SGIX 0x817E #ifndef GLEE_H_DEFINED_glReferencePlaneSGIX #define GLEE_H_DEFINED_glReferencePlaneSGIX typedef void (APIENTRYP GLEEPFNGLREFERENCEPLANESGIXPROC) (const GLdouble * equation); GLEE_EXTERN GLEEPFNGLREFERENCEPLANESGIXPROC GLeeFuncPtr_glReferencePlaneSGIX; #define glReferencePlaneSGIX GLeeFuncPtr_glReferencePlaneSGIX #endif #endif /* GL_SGIX_flush_raster */ #ifndef GL_SGIX_flush_raster #define GL_SGIX_flush_raster 1 #define __GLEE_GL_SGIX_flush_raster 1 /* Constants */ #ifndef GLEE_H_DEFINED_glFlushRasterSGIX #define GLEE_H_DEFINED_glFlushRasterSGIX typedef void (APIENTRYP GLEEPFNGLFLUSHRASTERSGIXPROC) (); GLEE_EXTERN GLEEPFNGLFLUSHRASTERSGIXPROC GLeeFuncPtr_glFlushRasterSGIX; #define glFlushRasterSGIX GLeeFuncPtr_glFlushRasterSGIX #endif #endif /* GL_SGIX_depth_texture */ #ifndef GL_SGIX_depth_texture #define GL_SGIX_depth_texture 1 #define __GLEE_GL_SGIX_depth_texture 1 /* Constants */ #define GL_DEPTH_COMPONENT16_SGIX 0x81A5 #define GL_DEPTH_COMPONENT24_SGIX 0x81A6 #define GL_DEPTH_COMPONENT32_SGIX 0x81A7 #endif /* GL_SGIS_fog_function */ #ifndef GL_SGIS_fog_function #define GL_SGIS_fog_function 1 #define __GLEE_GL_SGIS_fog_function 1 /* Constants */ #define GL_FOG_FUNC_SGIS 0x812A #define GL_FOG_FUNC_POINTS_SGIS 0x812B #define GL_MAX_FOG_FUNC_POINTS_SGIS 0x812C #ifndef GLEE_H_DEFINED_glFogFuncSGIS #define GLEE_H_DEFINED_glFogFuncSGIS typedef void (APIENTRYP GLEEPFNGLFOGFUNCSGISPROC) (GLsizei n, const GLfloat * points); GLEE_EXTERN GLEEPFNGLFOGFUNCSGISPROC GLeeFuncPtr_glFogFuncSGIS; #define glFogFuncSGIS GLeeFuncPtr_glFogFuncSGIS #endif #ifndef GLEE_H_DEFINED_glGetFogFuncSGIS #define GLEE_H_DEFINED_glGetFogFuncSGIS typedef void (APIENTRYP GLEEPFNGLGETFOGFUNCSGISPROC) (GLfloat * points); GLEE_EXTERN GLEEPFNGLGETFOGFUNCSGISPROC GLeeFuncPtr_glGetFogFuncSGIS; #define glGetFogFuncSGIS GLeeFuncPtr_glGetFogFuncSGIS #endif #endif /* GL_SGIX_fog_offset */ #ifndef GL_SGIX_fog_offset #define GL_SGIX_fog_offset 1 #define __GLEE_GL_SGIX_fog_offset 1 /* Constants */ #define GL_FOG_OFFSET_SGIX 0x8198 #define GL_FOG_OFFSET_VALUE_SGIX 0x8199 #endif /* GL_HP_image_transform */ #ifndef GL_HP_image_transform #define GL_HP_image_transform 1 #define __GLEE_GL_HP_image_transform 1 /* Constants */ #define GL_IMAGE_SCALE_X_HP 0x8155 #define GL_IMAGE_SCALE_Y_HP 0x8156 #define GL_IMAGE_TRANSLATE_X_HP 0x8157 #define GL_IMAGE_TRANSLATE_Y_HP 0x8158 #define GL_IMAGE_ROTATE_ANGLE_HP 0x8159 #define GL_IMAGE_ROTATE_ORIGIN_X_HP 0x815A #define GL_IMAGE_ROTATE_ORIGIN_Y_HP 0x815B #define GL_IMAGE_MAG_FILTER_HP 0x815C #define GL_IMAGE_MIN_FILTER_HP 0x815D #define GL_IMAGE_CUBIC_WEIGHT_HP 0x815E #define GL_CUBIC_HP 0x815F #define GL_AVERAGE_HP 0x8160 #define GL_IMAGE_TRANSFORM_2D_HP 0x8161 #define GL_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8162 #define GL_PROXY_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8163 #ifndef GLEE_H_DEFINED_glImageTransformParameteriHP #define GLEE_H_DEFINED_glImageTransformParameteriHP typedef void (APIENTRYP GLEEPFNGLIMAGETRANSFORMPARAMETERIHPPROC) (GLenum target, GLenum pname, GLint param); GLEE_EXTERN GLEEPFNGLIMAGETRANSFORMPARAMETERIHPPROC GLeeFuncPtr_glImageTransformParameteriHP; #define glImageTransformParameteriHP GLeeFuncPtr_glImageTransformParameteriHP #endif #ifndef GLEE_H_DEFINED_glImageTransformParameterfHP #define GLEE_H_DEFINED_glImageTransformParameterfHP typedef void (APIENTRYP GLEEPFNGLIMAGETRANSFORMPARAMETERFHPPROC) (GLenum target, GLenum pname, GLfloat param); GLEE_EXTERN GLEEPFNGLIMAGETRANSFORMPARAMETERFHPPROC GLeeFuncPtr_glImageTransformParameterfHP; #define glImageTransformParameterfHP GLeeFuncPtr_glImageTransformParameterfHP #endif #ifndef GLEE_H_DEFINED_glImageTransformParameterivHP #define GLEE_H_DEFINED_glImageTransformParameterivHP typedef void (APIENTRYP GLEEPFNGLIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, const GLint * params); GLEE_EXTERN GLEEPFNGLIMAGETRANSFORMPARAMETERIVHPPROC GLeeFuncPtr_glImageTransformParameterivHP; #define glImageTransformParameterivHP GLeeFuncPtr_glImageTransformParameterivHP #endif #ifndef GLEE_H_DEFINED_glImageTransformParameterfvHP #define GLEE_H_DEFINED_glImageTransformParameterfvHP typedef void (APIENTRYP GLEEPFNGLIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, const GLfloat * params); GLEE_EXTERN GLEEPFNGLIMAGETRANSFORMPARAMETERFVHPPROC GLeeFuncPtr_glImageTransformParameterfvHP; #define glImageTransformParameterfvHP GLeeFuncPtr_glImageTransformParameterfvHP #endif #ifndef GLEE_H_DEFINED_glGetImageTransformParameterivHP #define GLEE_H_DEFINED_glGetImageTransformParameterivHP typedef void (APIENTRYP GLEEPFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC GLeeFuncPtr_glGetImageTransformParameterivHP; #define glGetImageTransformParameterivHP GLeeFuncPtr_glGetImageTransformParameterivHP #endif #ifndef GLEE_H_DEFINED_glGetImageTransformParameterfvHP #define GLEE_H_DEFINED_glGetImageTransformParameterfvHP typedef void (APIENTRYP GLEEPFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC GLeeFuncPtr_glGetImageTransformParameterfvHP; #define glGetImageTransformParameterfvHP GLeeFuncPtr_glGetImageTransformParameterfvHP #endif #endif /* GL_HP_convolution_border_modes */ #ifndef GL_HP_convolution_border_modes #define GL_HP_convolution_border_modes 1 #define __GLEE_GL_HP_convolution_border_modes 1 /* Constants */ #define GL_IGNORE_BORDER_HP 0x8150 #define GL_CONSTANT_BORDER_HP 0x8151 #define GL_REPLICATE_BORDER_HP 0x8153 #define GL_CONVOLUTION_BORDER_COLOR_HP 0x8154 #endif /* GL_INGR_palette_buffer */ #ifndef GL_INGR_palette_buffer #define GL_INGR_palette_buffer 1 #define __GLEE_GL_INGR_palette_buffer 1 /* Constants */ #endif /* GL_SGIX_texture_add_env */ #ifndef GL_SGIX_texture_add_env #define GL_SGIX_texture_add_env 1 #define __GLEE_GL_SGIX_texture_add_env 1 /* Constants */ #define GL_TEXTURE_ENV_BIAS_SGIX 0x80BE #endif /* GL_EXT_color_subtable */ #ifndef GL_EXT_color_subtable #define GL_EXT_color_subtable 1 #define __GLEE_GL_EXT_color_subtable 1 /* Constants */ #ifndef GLEE_H_DEFINED_glColorSubTableEXT #define GLEE_H_DEFINED_glColorSubTableEXT typedef void (APIENTRYP GLEEPFNGLCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid * data); GLEE_EXTERN GLEEPFNGLCOLORSUBTABLEEXTPROC GLeeFuncPtr_glColorSubTableEXT; #define glColorSubTableEXT GLeeFuncPtr_glColorSubTableEXT #endif #ifndef GLEE_H_DEFINED_glCopyColorSubTableEXT #define GLEE_H_DEFINED_glCopyColorSubTableEXT typedef void (APIENTRYP GLEEPFNGLCOPYCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); GLEE_EXTERN GLEEPFNGLCOPYCOLORSUBTABLEEXTPROC GLeeFuncPtr_glCopyColorSubTableEXT; #define glCopyColorSubTableEXT GLeeFuncPtr_glCopyColorSubTableEXT #endif #endif /* GL_PGI_vertex_hints */ #ifndef GL_PGI_vertex_hints #define GL_PGI_vertex_hints 1 #define __GLEE_GL_PGI_vertex_hints 1 /* Constants */ #define GL_VERTEX_DATA_HINT_PGI 0x1A22A #define GL_VERTEX_CONSISTENT_HINT_PGI 0x1A22B #define GL_MATERIAL_SIDE_HINT_PGI 0x1A22C #define GL_MAX_VERTEX_HINT_PGI 0x1A22D #define GL_COLOR3_BIT_PGI 0x00010000 #define GL_COLOR4_BIT_PGI 0x00020000 #define GL_EDGEFLAG_BIT_PGI 0x00040000 #define GL_INDEX_BIT_PGI 0x00080000 #define GL_MAT_AMBIENT_BIT_PGI 0x00100000 #define GL_MAT_AMBIENT_AND_DIFFUSE_BIT_PGI 0x00200000 #define GL_MAT_DIFFUSE_BIT_PGI 0x00400000 #define GL_MAT_EMISSION_BIT_PGI 0x00800000 #define GL_MAT_COLOR_INDEXES_BIT_PGI 0x01000000 #define GL_MAT_SHININESS_BIT_PGI 0x02000000 #define GL_MAT_SPECULAR_BIT_PGI 0x04000000 #define GL_NORMAL_BIT_PGI 0x08000000 #define GL_TEXCOORD1_BIT_PGI 0x10000000 #define GL_TEXCOORD2_BIT_PGI 0x20000000 #define GL_TEXCOORD3_BIT_PGI 0x40000000 #define GL_TEXCOORD4_BIT_PGI 0x80000000 #define GL_VERTEX23_BIT_PGI 0x00000004 #define GL_VERTEX4_BIT_PGI 0x00000008 #endif /* GL_PGI_misc_hints */ #ifndef GL_PGI_misc_hints #define GL_PGI_misc_hints 1 #define __GLEE_GL_PGI_misc_hints 1 /* Constants */ #define GL_PREFER_DOUBLEBUFFER_HINT_PGI 0x1A1F8 #define GL_CONSERVE_MEMORY_HINT_PGI 0x1A1FD #define GL_RECLAIM_MEMORY_HINT_PGI 0x1A1FE #define GL_NATIVE_GRAPHICS_HANDLE_PGI 0x1A202 #define GL_NATIVE_GRAPHICS_BEGIN_HINT_PGI 0x1A203 #define GL_NATIVE_GRAPHICS_END_HINT_PGI 0x1A204 #define GL_ALWAYS_FAST_HINT_PGI 0x1A20C #define GL_ALWAYS_SOFT_HINT_PGI 0x1A20D #define GL_ALLOW_DRAW_OBJ_HINT_PGI 0x1A20E #define GL_ALLOW_DRAW_WIN_HINT_PGI 0x1A20F #define GL_ALLOW_DRAW_FRG_HINT_PGI 0x1A210 #define GL_ALLOW_DRAW_MEM_HINT_PGI 0x1A211 #define GL_STRICT_DEPTHFUNC_HINT_PGI 0x1A216 #define GL_STRICT_LIGHTING_HINT_PGI 0x1A217 #define GL_STRICT_SCISSOR_HINT_PGI 0x1A218 #define GL_FULL_STIPPLE_HINT_PGI 0x1A219 #define GL_CLIP_NEAR_HINT_PGI 0x1A220 #define GL_CLIP_FAR_HINT_PGI 0x1A221 #define GL_WIDE_LINE_HINT_PGI 0x1A222 #define GL_BACK_NORMALS_HINT_PGI 0x1A223 #ifndef GLEE_H_DEFINED_glHintPGI #define GLEE_H_DEFINED_glHintPGI typedef void (APIENTRYP GLEEPFNGLHINTPGIPROC) (GLenum target, GLint mode); GLEE_EXTERN GLEEPFNGLHINTPGIPROC GLeeFuncPtr_glHintPGI; #define glHintPGI GLeeFuncPtr_glHintPGI #endif #endif /* GL_EXT_paletted_texture */ #ifndef GL_EXT_paletted_texture #define GL_EXT_paletted_texture 1 #define __GLEE_GL_EXT_paletted_texture 1 /* Constants */ #define GL_COLOR_INDEX1_EXT 0x80E2 #define GL_COLOR_INDEX2_EXT 0x80E3 #define GL_COLOR_INDEX4_EXT 0x80E4 #define GL_COLOR_INDEX8_EXT 0x80E5 #define GL_COLOR_INDEX12_EXT 0x80E6 #define GL_COLOR_INDEX16_EXT 0x80E7 #define GL_TEXTURE_INDEX_SIZE_EXT 0x80ED #ifndef GLEE_H_DEFINED_glColorTableEXT #define GLEE_H_DEFINED_glColorTableEXT typedef void (APIENTRYP GLEEPFNGLCOLORTABLEEXTPROC) (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const GLvoid * table); GLEE_EXTERN GLEEPFNGLCOLORTABLEEXTPROC GLeeFuncPtr_glColorTableEXT; #define glColorTableEXT GLeeFuncPtr_glColorTableEXT #endif #ifndef GLEE_H_DEFINED_glGetColorTableEXT #define GLEE_H_DEFINED_glGetColorTableEXT typedef void (APIENTRYP GLEEPFNGLGETCOLORTABLEEXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid * data); GLEE_EXTERN GLEEPFNGLGETCOLORTABLEEXTPROC GLeeFuncPtr_glGetColorTableEXT; #define glGetColorTableEXT GLeeFuncPtr_glGetColorTableEXT #endif #ifndef GLEE_H_DEFINED_glGetColorTableParameterivEXT #define GLEE_H_DEFINED_glGetColorTableParameterivEXT typedef void (APIENTRYP GLEEPFNGLGETCOLORTABLEPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETCOLORTABLEPARAMETERIVEXTPROC GLeeFuncPtr_glGetColorTableParameterivEXT; #define glGetColorTableParameterivEXT GLeeFuncPtr_glGetColorTableParameterivEXT #endif #ifndef GLEE_H_DEFINED_glGetColorTableParameterfvEXT #define GLEE_H_DEFINED_glGetColorTableParameterfvEXT typedef void (APIENTRYP GLEEPFNGLGETCOLORTABLEPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETCOLORTABLEPARAMETERFVEXTPROC GLeeFuncPtr_glGetColorTableParameterfvEXT; #define glGetColorTableParameterfvEXT GLeeFuncPtr_glGetColorTableParameterfvEXT #endif #endif /* GL_EXT_clip_volume_hint */ #ifndef GL_EXT_clip_volume_hint #define GL_EXT_clip_volume_hint 1 #define __GLEE_GL_EXT_clip_volume_hint 1 /* Constants */ #define GL_CLIP_VOLUME_CLIPPING_HINT_EXT 0x80F0 #endif /* GL_SGIX_list_priority */ #ifndef GL_SGIX_list_priority #define GL_SGIX_list_priority 1 #define __GLEE_GL_SGIX_list_priority 1 /* Constants */ #define GL_LIST_PRIORITY_SGIX 0x8182 #ifndef GLEE_H_DEFINED_glGetListParameterfvSGIX #define GLEE_H_DEFINED_glGetListParameterfvSGIX typedef void (APIENTRYP GLEEPFNGLGETLISTPARAMETERFVSGIXPROC) (GLuint list, GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETLISTPARAMETERFVSGIXPROC GLeeFuncPtr_glGetListParameterfvSGIX; #define glGetListParameterfvSGIX GLeeFuncPtr_glGetListParameterfvSGIX #endif #ifndef GLEE_H_DEFINED_glGetListParameterivSGIX #define GLEE_H_DEFINED_glGetListParameterivSGIX typedef void (APIENTRYP GLEEPFNGLGETLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETLISTPARAMETERIVSGIXPROC GLeeFuncPtr_glGetListParameterivSGIX; #define glGetListParameterivSGIX GLeeFuncPtr_glGetListParameterivSGIX #endif #ifndef GLEE_H_DEFINED_glListParameterfSGIX #define GLEE_H_DEFINED_glListParameterfSGIX typedef void (APIENTRYP GLEEPFNGLLISTPARAMETERFSGIXPROC) (GLuint list, GLenum pname, GLfloat param); GLEE_EXTERN GLEEPFNGLLISTPARAMETERFSGIXPROC GLeeFuncPtr_glListParameterfSGIX; #define glListParameterfSGIX GLeeFuncPtr_glListParameterfSGIX #endif #ifndef GLEE_H_DEFINED_glListParameterfvSGIX #define GLEE_H_DEFINED_glListParameterfvSGIX typedef void (APIENTRYP GLEEPFNGLLISTPARAMETERFVSGIXPROC) (GLuint list, GLenum pname, const GLfloat * params); GLEE_EXTERN GLEEPFNGLLISTPARAMETERFVSGIXPROC GLeeFuncPtr_glListParameterfvSGIX; #define glListParameterfvSGIX GLeeFuncPtr_glListParameterfvSGIX #endif #ifndef GLEE_H_DEFINED_glListParameteriSGIX #define GLEE_H_DEFINED_glListParameteriSGIX typedef void (APIENTRYP GLEEPFNGLLISTPARAMETERISGIXPROC) (GLuint list, GLenum pname, GLint param); GLEE_EXTERN GLEEPFNGLLISTPARAMETERISGIXPROC GLeeFuncPtr_glListParameteriSGIX; #define glListParameteriSGIX GLeeFuncPtr_glListParameteriSGIX #endif #ifndef GLEE_H_DEFINED_glListParameterivSGIX #define GLEE_H_DEFINED_glListParameterivSGIX typedef void (APIENTRYP GLEEPFNGLLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname, const GLint * params); GLEE_EXTERN GLEEPFNGLLISTPARAMETERIVSGIXPROC GLeeFuncPtr_glListParameterivSGIX; #define glListParameterivSGIX GLeeFuncPtr_glListParameterivSGIX #endif #endif /* GL_SGIX_ir_instrument1 */ #ifndef GL_SGIX_ir_instrument1 #define GL_SGIX_ir_instrument1 1 #define __GLEE_GL_SGIX_ir_instrument1 1 /* Constants */ #define GL_IR_INSTRUMENT1_SGIX 0x817F #endif /* GL_SGIX_calligraphic_fragment */ #ifndef GL_SGIX_calligraphic_fragment #define GL_SGIX_calligraphic_fragment 1 #define __GLEE_GL_SGIX_calligraphic_fragment 1 /* Constants */ #define GL_CALLIGRAPHIC_FRAGMENT_SGIX 0x8183 #endif /* GL_SGIX_texture_lod_bias */ #ifndef GL_SGIX_texture_lod_bias #define GL_SGIX_texture_lod_bias 1 #define __GLEE_GL_SGIX_texture_lod_bias 1 /* Constants */ #define GL_TEXTURE_LOD_BIAS_S_SGIX 0x818E #define GL_TEXTURE_LOD_BIAS_T_SGIX 0x818F #define GL_TEXTURE_LOD_BIAS_R_SGIX 0x8190 #endif /* GL_SGIX_shadow_ambient */ #ifndef GL_SGIX_shadow_ambient #define GL_SGIX_shadow_ambient 1 #define __GLEE_GL_SGIX_shadow_ambient 1 /* Constants */ #define GL_SHADOW_AMBIENT_SGIX 0x80BF #endif /* GL_EXT_index_texture */ #ifndef GL_EXT_index_texture #define GL_EXT_index_texture 1 #define __GLEE_GL_EXT_index_texture 1 /* Constants */ #endif /* GL_EXT_index_material */ #ifndef GL_EXT_index_material #define GL_EXT_index_material 1 #define __GLEE_GL_EXT_index_material 1 /* Constants */ #define GL_INDEX_MATERIAL_EXT 0x81B8 #define GL_INDEX_MATERIAL_PARAMETER_EXT 0x81B9 #define GL_INDEX_MATERIAL_FACE_EXT 0x81BA #ifndef GLEE_H_DEFINED_glIndexMaterialEXT #define GLEE_H_DEFINED_glIndexMaterialEXT typedef void (APIENTRYP GLEEPFNGLINDEXMATERIALEXTPROC) (GLenum face, GLenum mode); GLEE_EXTERN GLEEPFNGLINDEXMATERIALEXTPROC GLeeFuncPtr_glIndexMaterialEXT; #define glIndexMaterialEXT GLeeFuncPtr_glIndexMaterialEXT #endif #endif /* GL_EXT_index_func */ #ifndef GL_EXT_index_func #define GL_EXT_index_func 1 #define __GLEE_GL_EXT_index_func 1 /* Constants */ #define GL_INDEX_TEST_EXT 0x81B5 #define GL_INDEX_TEST_FUNC_EXT 0x81B6 #define GL_INDEX_TEST_REF_EXT 0x81B7 #ifndef GLEE_H_DEFINED_glIndexFuncEXT #define GLEE_H_DEFINED_glIndexFuncEXT typedef void (APIENTRYP GLEEPFNGLINDEXFUNCEXTPROC) (GLenum func, GLclampf ref); GLEE_EXTERN GLEEPFNGLINDEXFUNCEXTPROC GLeeFuncPtr_glIndexFuncEXT; #define glIndexFuncEXT GLeeFuncPtr_glIndexFuncEXT #endif #endif /* GL_EXT_index_array_formats */ #ifndef GL_EXT_index_array_formats #define GL_EXT_index_array_formats 1 #define __GLEE_GL_EXT_index_array_formats 1 /* Constants */ #define GL_IUI_V2F_EXT 0x81AD #define GL_IUI_V3F_EXT 0x81AE #define GL_IUI_N3F_V2F_EXT 0x81AF #define GL_IUI_N3F_V3F_EXT 0x81B0 #define GL_T2F_IUI_V2F_EXT 0x81B1 #define GL_T2F_IUI_V3F_EXT 0x81B2 #define GL_T2F_IUI_N3F_V2F_EXT 0x81B3 #define GL_T2F_IUI_N3F_V3F_EXT 0x81B4 #endif /* GL_EXT_compiled_vertex_array */ #ifndef GL_EXT_compiled_vertex_array #define GL_EXT_compiled_vertex_array 1 #define __GLEE_GL_EXT_compiled_vertex_array 1 /* Constants */ #define GL_ARRAY_ELEMENT_LOCK_FIRST_EXT 0x81A8 #define GL_ARRAY_ELEMENT_LOCK_COUNT_EXT 0x81A9 #ifndef GLEE_H_DEFINED_glLockArraysEXT #define GLEE_H_DEFINED_glLockArraysEXT typedef void (APIENTRYP GLEEPFNGLLOCKARRAYSEXTPROC) (GLint first, GLsizei count); GLEE_EXTERN GLEEPFNGLLOCKARRAYSEXTPROC GLeeFuncPtr_glLockArraysEXT; #define glLockArraysEXT GLeeFuncPtr_glLockArraysEXT #endif #ifndef GLEE_H_DEFINED_glUnlockArraysEXT #define GLEE_H_DEFINED_glUnlockArraysEXT typedef void (APIENTRYP GLEEPFNGLUNLOCKARRAYSEXTPROC) (); GLEE_EXTERN GLEEPFNGLUNLOCKARRAYSEXTPROC GLeeFuncPtr_glUnlockArraysEXT; #define glUnlockArraysEXT GLeeFuncPtr_glUnlockArraysEXT #endif #endif /* GL_EXT_cull_vertex */ #ifndef GL_EXT_cull_vertex #define GL_EXT_cull_vertex 1 #define __GLEE_GL_EXT_cull_vertex 1 /* Constants */ #define GL_CULL_VERTEX_EXT 0x81AA #define GL_CULL_VERTEX_EYE_POSITION_EXT 0x81AB #define GL_CULL_VERTEX_OBJECT_POSITION_EXT 0x81AC #ifndef GLEE_H_DEFINED_glCullParameterdvEXT #define GLEE_H_DEFINED_glCullParameterdvEXT typedef void (APIENTRYP GLEEPFNGLCULLPARAMETERDVEXTPROC) (GLenum pname, GLdouble * params); GLEE_EXTERN GLEEPFNGLCULLPARAMETERDVEXTPROC GLeeFuncPtr_glCullParameterdvEXT; #define glCullParameterdvEXT GLeeFuncPtr_glCullParameterdvEXT #endif #ifndef GLEE_H_DEFINED_glCullParameterfvEXT #define GLEE_H_DEFINED_glCullParameterfvEXT typedef void (APIENTRYP GLEEPFNGLCULLPARAMETERFVEXTPROC) (GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLCULLPARAMETERFVEXTPROC GLeeFuncPtr_glCullParameterfvEXT; #define glCullParameterfvEXT GLeeFuncPtr_glCullParameterfvEXT #endif #endif /* GL_SGIX_ycrcb */ #ifndef GL_SGIX_ycrcb #define GL_SGIX_ycrcb 1 #define __GLEE_GL_SGIX_ycrcb 1 /* Constants */ #define GL_YCRCB_422_SGIX 0x81BB #define GL_YCRCB_444_SGIX 0x81BC #endif /* GL_SGIX_fragment_lighting */ #ifndef GL_SGIX_fragment_lighting #define GL_SGIX_fragment_lighting 1 #define __GLEE_GL_SGIX_fragment_lighting 1 /* Constants */ #define GL_FRAGMENT_LIGHTING_SGIX 0x8400 #define GL_FRAGMENT_COLOR_MATERIAL_SGIX 0x8401 #define GL_FRAGMENT_COLOR_MATERIAL_FACE_SGIX 0x8402 #define GL_FRAGMENT_COLOR_MATERIAL_PARAMETER_SGIX 0x8403 #define GL_MAX_FRAGMENT_LIGHTS_SGIX 0x8404 #define GL_MAX_ACTIVE_LIGHTS_SGIX 0x8405 #define GL_CURRENT_RASTER_NORMAL_SGIX 0x8406 #define GL_LIGHT_ENV_MODE_SGIX 0x8407 #define GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_SGIX 0x8408 #define GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_SGIX 0x8409 #define GL_FRAGMENT_LIGHT_MODEL_AMBIENT_SGIX 0x840A #define GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_SGIX 0x840B #define GL_FRAGMENT_LIGHT0_SGIX 0x840C #define GL_FRAGMENT_LIGHT1_SGIX 0x840D #define GL_FRAGMENT_LIGHT2_SGIX 0x840E #define GL_FRAGMENT_LIGHT3_SGIX 0x840F #define GL_FRAGMENT_LIGHT4_SGIX 0x8410 #define GL_FRAGMENT_LIGHT5_SGIX 0x8411 #define GL_FRAGMENT_LIGHT6_SGIX 0x8412 #define GL_FRAGMENT_LIGHT7_SGIX 0x8413 #ifndef GLEE_H_DEFINED_glFragmentColorMaterialSGIX #define GLEE_H_DEFINED_glFragmentColorMaterialSGIX typedef void (APIENTRYP GLEEPFNGLFRAGMENTCOLORMATERIALSGIXPROC) (GLenum face, GLenum mode); GLEE_EXTERN GLEEPFNGLFRAGMENTCOLORMATERIALSGIXPROC GLeeFuncPtr_glFragmentColorMaterialSGIX; #define glFragmentColorMaterialSGIX GLeeFuncPtr_glFragmentColorMaterialSGIX #endif #ifndef GLEE_H_DEFINED_glFragmentLightfSGIX #define GLEE_H_DEFINED_glFragmentLightfSGIX typedef void (APIENTRYP GLEEPFNGLFRAGMENTLIGHTFSGIXPROC) (GLenum light, GLenum pname, GLfloat param); GLEE_EXTERN GLEEPFNGLFRAGMENTLIGHTFSGIXPROC GLeeFuncPtr_glFragmentLightfSGIX; #define glFragmentLightfSGIX GLeeFuncPtr_glFragmentLightfSGIX #endif #ifndef GLEE_H_DEFINED_glFragmentLightfvSGIX #define GLEE_H_DEFINED_glFragmentLightfvSGIX typedef void (APIENTRYP GLEEPFNGLFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, const GLfloat * params); GLEE_EXTERN GLEEPFNGLFRAGMENTLIGHTFVSGIXPROC GLeeFuncPtr_glFragmentLightfvSGIX; #define glFragmentLightfvSGIX GLeeFuncPtr_glFragmentLightfvSGIX #endif #ifndef GLEE_H_DEFINED_glFragmentLightiSGIX #define GLEE_H_DEFINED_glFragmentLightiSGIX typedef void (APIENTRYP GLEEPFNGLFRAGMENTLIGHTISGIXPROC) (GLenum light, GLenum pname, GLint param); GLEE_EXTERN GLEEPFNGLFRAGMENTLIGHTISGIXPROC GLeeFuncPtr_glFragmentLightiSGIX; #define glFragmentLightiSGIX GLeeFuncPtr_glFragmentLightiSGIX #endif #ifndef GLEE_H_DEFINED_glFragmentLightivSGIX #define GLEE_H_DEFINED_glFragmentLightivSGIX typedef void (APIENTRYP GLEEPFNGLFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, const GLint * params); GLEE_EXTERN GLEEPFNGLFRAGMENTLIGHTIVSGIXPROC GLeeFuncPtr_glFragmentLightivSGIX; #define glFragmentLightivSGIX GLeeFuncPtr_glFragmentLightivSGIX #endif #ifndef GLEE_H_DEFINED_glFragmentLightModelfSGIX #define GLEE_H_DEFINED_glFragmentLightModelfSGIX typedef void (APIENTRYP GLEEPFNGLFRAGMENTLIGHTMODELFSGIXPROC) (GLenum pname, GLfloat param); GLEE_EXTERN GLEEPFNGLFRAGMENTLIGHTMODELFSGIXPROC GLeeFuncPtr_glFragmentLightModelfSGIX; #define glFragmentLightModelfSGIX GLeeFuncPtr_glFragmentLightModelfSGIX #endif #ifndef GLEE_H_DEFINED_glFragmentLightModelfvSGIX #define GLEE_H_DEFINED_glFragmentLightModelfvSGIX typedef void (APIENTRYP GLEEPFNGLFRAGMENTLIGHTMODELFVSGIXPROC) (GLenum pname, const GLfloat * params); GLEE_EXTERN GLEEPFNGLFRAGMENTLIGHTMODELFVSGIXPROC GLeeFuncPtr_glFragmentLightModelfvSGIX; #define glFragmentLightModelfvSGIX GLeeFuncPtr_glFragmentLightModelfvSGIX #endif #ifndef GLEE_H_DEFINED_glFragmentLightModeliSGIX #define GLEE_H_DEFINED_glFragmentLightModeliSGIX typedef void (APIENTRYP GLEEPFNGLFRAGMENTLIGHTMODELISGIXPROC) (GLenum pname, GLint param); GLEE_EXTERN GLEEPFNGLFRAGMENTLIGHTMODELISGIXPROC GLeeFuncPtr_glFragmentLightModeliSGIX; #define glFragmentLightModeliSGIX GLeeFuncPtr_glFragmentLightModeliSGIX #endif #ifndef GLEE_H_DEFINED_glFragmentLightModelivSGIX #define GLEE_H_DEFINED_glFragmentLightModelivSGIX typedef void (APIENTRYP GLEEPFNGLFRAGMENTLIGHTMODELIVSGIXPROC) (GLenum pname, const GLint * params); GLEE_EXTERN GLEEPFNGLFRAGMENTLIGHTMODELIVSGIXPROC GLeeFuncPtr_glFragmentLightModelivSGIX; #define glFragmentLightModelivSGIX GLeeFuncPtr_glFragmentLightModelivSGIX #endif #ifndef GLEE_H_DEFINED_glFragmentMaterialfSGIX #define GLEE_H_DEFINED_glFragmentMaterialfSGIX typedef void (APIENTRYP GLEEPFNGLFRAGMENTMATERIALFSGIXPROC) (GLenum face, GLenum pname, GLfloat param); GLEE_EXTERN GLEEPFNGLFRAGMENTMATERIALFSGIXPROC GLeeFuncPtr_glFragmentMaterialfSGIX; #define glFragmentMaterialfSGIX GLeeFuncPtr_glFragmentMaterialfSGIX #endif #ifndef GLEE_H_DEFINED_glFragmentMaterialfvSGIX #define GLEE_H_DEFINED_glFragmentMaterialfvSGIX typedef void (APIENTRYP GLEEPFNGLFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, const GLfloat * params); GLEE_EXTERN GLEEPFNGLFRAGMENTMATERIALFVSGIXPROC GLeeFuncPtr_glFragmentMaterialfvSGIX; #define glFragmentMaterialfvSGIX GLeeFuncPtr_glFragmentMaterialfvSGIX #endif #ifndef GLEE_H_DEFINED_glFragmentMaterialiSGIX #define GLEE_H_DEFINED_glFragmentMaterialiSGIX typedef void (APIENTRYP GLEEPFNGLFRAGMENTMATERIALISGIXPROC) (GLenum face, GLenum pname, GLint param); GLEE_EXTERN GLEEPFNGLFRAGMENTMATERIALISGIXPROC GLeeFuncPtr_glFragmentMaterialiSGIX; #define glFragmentMaterialiSGIX GLeeFuncPtr_glFragmentMaterialiSGIX #endif #ifndef GLEE_H_DEFINED_glFragmentMaterialivSGIX #define GLEE_H_DEFINED_glFragmentMaterialivSGIX typedef void (APIENTRYP GLEEPFNGLFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, const GLint * params); GLEE_EXTERN GLEEPFNGLFRAGMENTMATERIALIVSGIXPROC GLeeFuncPtr_glFragmentMaterialivSGIX; #define glFragmentMaterialivSGIX GLeeFuncPtr_glFragmentMaterialivSGIX #endif #ifndef GLEE_H_DEFINED_glGetFragmentLightfvSGIX #define GLEE_H_DEFINED_glGetFragmentLightfvSGIX typedef void (APIENTRYP GLEEPFNGLGETFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETFRAGMENTLIGHTFVSGIXPROC GLeeFuncPtr_glGetFragmentLightfvSGIX; #define glGetFragmentLightfvSGIX GLeeFuncPtr_glGetFragmentLightfvSGIX #endif #ifndef GLEE_H_DEFINED_glGetFragmentLightivSGIX #define GLEE_H_DEFINED_glGetFragmentLightivSGIX typedef void (APIENTRYP GLEEPFNGLGETFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETFRAGMENTLIGHTIVSGIXPROC GLeeFuncPtr_glGetFragmentLightivSGIX; #define glGetFragmentLightivSGIX GLeeFuncPtr_glGetFragmentLightivSGIX #endif #ifndef GLEE_H_DEFINED_glGetFragmentMaterialfvSGIX #define GLEE_H_DEFINED_glGetFragmentMaterialfvSGIX typedef void (APIENTRYP GLEEPFNGLGETFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETFRAGMENTMATERIALFVSGIXPROC GLeeFuncPtr_glGetFragmentMaterialfvSGIX; #define glGetFragmentMaterialfvSGIX GLeeFuncPtr_glGetFragmentMaterialfvSGIX #endif #ifndef GLEE_H_DEFINED_glGetFragmentMaterialivSGIX #define GLEE_H_DEFINED_glGetFragmentMaterialivSGIX typedef void (APIENTRYP GLEEPFNGLGETFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETFRAGMENTMATERIALIVSGIXPROC GLeeFuncPtr_glGetFragmentMaterialivSGIX; #define glGetFragmentMaterialivSGIX GLeeFuncPtr_glGetFragmentMaterialivSGIX #endif #ifndef GLEE_H_DEFINED_glLightEnviSGIX #define GLEE_H_DEFINED_glLightEnviSGIX typedef void (APIENTRYP GLEEPFNGLLIGHTENVISGIXPROC) (GLenum pname, GLint param); GLEE_EXTERN GLEEPFNGLLIGHTENVISGIXPROC GLeeFuncPtr_glLightEnviSGIX; #define glLightEnviSGIX GLeeFuncPtr_glLightEnviSGIX #endif #endif /* GL_IBM_rasterpos_clip */ #ifndef GL_IBM_rasterpos_clip #define GL_IBM_rasterpos_clip 1 #define __GLEE_GL_IBM_rasterpos_clip 1 /* Constants */ #define GL_RASTER_POSITION_UNCLIPPED_IBM 0x19262 #endif /* GL_HP_texture_lighting */ #ifndef GL_HP_texture_lighting #define GL_HP_texture_lighting 1 #define __GLEE_GL_HP_texture_lighting 1 /* Constants */ #define GL_TEXTURE_LIGHTING_MODE_HP 0x8167 #define GL_TEXTURE_POST_SPECULAR_HP 0x8168 #define GL_TEXTURE_PRE_SPECULAR_HP 0x8169 #endif /* GL_EXT_draw_range_elements */ #ifndef GL_EXT_draw_range_elements #define GL_EXT_draw_range_elements 1 #define __GLEE_GL_EXT_draw_range_elements 1 /* Constants */ #define GL_MAX_ELEMENTS_VERTICES_EXT 0x80E8 #define GL_MAX_ELEMENTS_INDICES_EXT 0x80E9 #ifndef GLEE_H_DEFINED_glDrawRangeElementsEXT #define GLEE_H_DEFINED_glDrawRangeElementsEXT typedef void (APIENTRYP GLEEPFNGLDRAWRANGEELEMENTSEXTPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid * indices); GLEE_EXTERN GLEEPFNGLDRAWRANGEELEMENTSEXTPROC GLeeFuncPtr_glDrawRangeElementsEXT; #define glDrawRangeElementsEXT GLeeFuncPtr_glDrawRangeElementsEXT #endif #endif /* GL_WIN_phong_shading */ #ifndef GL_WIN_phong_shading #define GL_WIN_phong_shading 1 #define __GLEE_GL_WIN_phong_shading 1 /* Constants */ #define GL_PHONG_WIN 0x80EA #define GL_PHONG_HINT_WIN 0x80EB #endif /* GL_WIN_specular_fog */ #ifndef GL_WIN_specular_fog #define GL_WIN_specular_fog 1 #define __GLEE_GL_WIN_specular_fog 1 /* Constants */ #define GL_FOG_SPECULAR_TEXTURE_WIN 0x80EC #endif /* GL_EXT_light_texture */ #ifndef GL_EXT_light_texture #define GL_EXT_light_texture 1 #define __GLEE_GL_EXT_light_texture 1 /* Constants */ #define GL_FRAGMENT_MATERIAL_EXT 0x8349 #define GL_FRAGMENT_NORMAL_EXT 0x834A #define GL_FRAGMENT_COLOR_EXT 0x834C #define GL_ATTENUATION_EXT 0x834D #define GL_SHADOW_ATTENUATION_EXT 0x834E #define GL_TEXTURE_APPLICATION_MODE_EXT 0x834F #define GL_TEXTURE_LIGHT_EXT 0x8350 #define GL_TEXTURE_MATERIAL_FACE_EXT 0x8351 #define GL_TEXTURE_MATERIAL_PARAMETER_EXT 0x8352 #ifndef GLEE_H_DEFINED_glApplyTextureEXT #define GLEE_H_DEFINED_glApplyTextureEXT typedef void (APIENTRYP GLEEPFNGLAPPLYTEXTUREEXTPROC) (GLenum mode); GLEE_EXTERN GLEEPFNGLAPPLYTEXTUREEXTPROC GLeeFuncPtr_glApplyTextureEXT; #define glApplyTextureEXT GLeeFuncPtr_glApplyTextureEXT #endif #ifndef GLEE_H_DEFINED_glTextureLightEXT #define GLEE_H_DEFINED_glTextureLightEXT typedef void (APIENTRYP GLEEPFNGLTEXTURELIGHTEXTPROC) (GLenum pname); GLEE_EXTERN GLEEPFNGLTEXTURELIGHTEXTPROC GLeeFuncPtr_glTextureLightEXT; #define glTextureLightEXT GLeeFuncPtr_glTextureLightEXT #endif #ifndef GLEE_H_DEFINED_glTextureMaterialEXT #define GLEE_H_DEFINED_glTextureMaterialEXT typedef void (APIENTRYP GLEEPFNGLTEXTUREMATERIALEXTPROC) (GLenum face, GLenum mode); GLEE_EXTERN GLEEPFNGLTEXTUREMATERIALEXTPROC GLeeFuncPtr_glTextureMaterialEXT; #define glTextureMaterialEXT GLeeFuncPtr_glTextureMaterialEXT #endif #endif /* GL_SGIX_blend_alpha_minmax */ #ifndef GL_SGIX_blend_alpha_minmax #define GL_SGIX_blend_alpha_minmax 1 #define __GLEE_GL_SGIX_blend_alpha_minmax 1 /* Constants */ #define GL_ALPHA_MIN_SGIX 0x8320 #define GL_ALPHA_MAX_SGIX 0x8321 #endif /* GL_SGIX_impact_pixel_texture */ #ifndef GL_SGIX_impact_pixel_texture #define GL_SGIX_impact_pixel_texture 1 #define __GLEE_GL_SGIX_impact_pixel_texture 1 /* Constants */ #define GL_PIXEL_TEX_GEN_Q_CEILING_SGIX 0x8184 #define GL_PIXEL_TEX_GEN_Q_ROUND_SGIX 0x8185 #define GL_PIXEL_TEX_GEN_Q_FLOOR_SGIX 0x8186 #define GL_PIXEL_TEX_GEN_ALPHA_REPLACE_SGIX 0x8187 #define GL_PIXEL_TEX_GEN_ALPHA_NO_REPLACE_SGIX 0x8188 #define GL_PIXEL_TEX_GEN_ALPHA_LS_SGIX 0x8189 #define GL_PIXEL_TEX_GEN_ALPHA_MS_SGIX 0x818A #endif /* GL_EXT_bgra */ #ifndef GL_EXT_bgra #define GL_EXT_bgra 1 #define __GLEE_GL_EXT_bgra 1 /* Constants */ #define GL_BGR_EXT 0x80E0 #define GL_BGRA_EXT 0x80E1 #endif /* GL_SGIX_async */ #ifndef GL_SGIX_async #define GL_SGIX_async 1 #define __GLEE_GL_SGIX_async 1 /* Constants */ #define GL_ASYNC_MARKER_SGIX 0x8329 #ifndef GLEE_H_DEFINED_glAsyncMarkerSGIX #define GLEE_H_DEFINED_glAsyncMarkerSGIX typedef void (APIENTRYP GLEEPFNGLASYNCMARKERSGIXPROC) (GLuint marker); GLEE_EXTERN GLEEPFNGLASYNCMARKERSGIXPROC GLeeFuncPtr_glAsyncMarkerSGIX; #define glAsyncMarkerSGIX GLeeFuncPtr_glAsyncMarkerSGIX #endif #ifndef GLEE_H_DEFINED_glFinishAsyncSGIX #define GLEE_H_DEFINED_glFinishAsyncSGIX typedef GLint (APIENTRYP GLEEPFNGLFINISHASYNCSGIXPROC) (GLuint * markerp); GLEE_EXTERN GLEEPFNGLFINISHASYNCSGIXPROC GLeeFuncPtr_glFinishAsyncSGIX; #define glFinishAsyncSGIX GLeeFuncPtr_glFinishAsyncSGIX #endif #ifndef GLEE_H_DEFINED_glPollAsyncSGIX #define GLEE_H_DEFINED_glPollAsyncSGIX typedef GLint (APIENTRYP GLEEPFNGLPOLLASYNCSGIXPROC) (GLuint * markerp); GLEE_EXTERN GLEEPFNGLPOLLASYNCSGIXPROC GLeeFuncPtr_glPollAsyncSGIX; #define glPollAsyncSGIX GLeeFuncPtr_glPollAsyncSGIX #endif #ifndef GLEE_H_DEFINED_glGenAsyncMarkersSGIX #define GLEE_H_DEFINED_glGenAsyncMarkersSGIX typedef GLuint (APIENTRYP GLEEPFNGLGENASYNCMARKERSSGIXPROC) (GLsizei range); GLEE_EXTERN GLEEPFNGLGENASYNCMARKERSSGIXPROC GLeeFuncPtr_glGenAsyncMarkersSGIX; #define glGenAsyncMarkersSGIX GLeeFuncPtr_glGenAsyncMarkersSGIX #endif #ifndef GLEE_H_DEFINED_glDeleteAsyncMarkersSGIX #define GLEE_H_DEFINED_glDeleteAsyncMarkersSGIX typedef void (APIENTRYP GLEEPFNGLDELETEASYNCMARKERSSGIXPROC) (GLuint marker, GLsizei range); GLEE_EXTERN GLEEPFNGLDELETEASYNCMARKERSSGIXPROC GLeeFuncPtr_glDeleteAsyncMarkersSGIX; #define glDeleteAsyncMarkersSGIX GLeeFuncPtr_glDeleteAsyncMarkersSGIX #endif #ifndef GLEE_H_DEFINED_glIsAsyncMarkerSGIX #define GLEE_H_DEFINED_glIsAsyncMarkerSGIX typedef GLboolean (APIENTRYP GLEEPFNGLISASYNCMARKERSGIXPROC) (GLuint marker); GLEE_EXTERN GLEEPFNGLISASYNCMARKERSGIXPROC GLeeFuncPtr_glIsAsyncMarkerSGIX; #define glIsAsyncMarkerSGIX GLeeFuncPtr_glIsAsyncMarkerSGIX #endif #endif /* GL_SGIX_async_pixel */ #ifndef GL_SGIX_async_pixel #define GL_SGIX_async_pixel 1 #define __GLEE_GL_SGIX_async_pixel 1 /* Constants */ #define GL_ASYNC_TEX_IMAGE_SGIX 0x835C #define GL_ASYNC_DRAW_PIXELS_SGIX 0x835D #define GL_ASYNC_READ_PIXELS_SGIX 0x835E #define GL_MAX_ASYNC_TEX_IMAGE_SGIX 0x835F #define GL_MAX_ASYNC_DRAW_PIXELS_SGIX 0x8360 #define GL_MAX_ASYNC_READ_PIXELS_SGIX 0x8361 #endif /* GL_SGIX_async_histogram */ #ifndef GL_SGIX_async_histogram #define GL_SGIX_async_histogram 1 #define __GLEE_GL_SGIX_async_histogram 1 /* Constants */ #define GL_ASYNC_HISTOGRAM_SGIX 0x832C #define GL_MAX_ASYNC_HISTOGRAM_SGIX 0x832D #endif /* GL_INTEL_texture_scissor */ #ifndef GL_INTEL_texture_scissor #define GL_INTEL_texture_scissor 1 #define __GLEE_GL_INTEL_texture_scissor 1 /* Constants */ #endif /* GL_INTEL_parallel_arrays */ #ifndef GL_INTEL_parallel_arrays #define GL_INTEL_parallel_arrays 1 #define __GLEE_GL_INTEL_parallel_arrays 1 /* Constants */ #define GL_PARALLEL_ARRAYS_INTEL 0x83F4 #define GL_VERTEX_ARRAY_PARALLEL_POINTERS_INTEL 0x83F5 #define GL_NORMAL_ARRAY_PARALLEL_POINTERS_INTEL 0x83F6 #define GL_COLOR_ARRAY_PARALLEL_POINTERS_INTEL 0x83F7 #define GL_TEXTURE_COORD_ARRAY_PARALLEL_POINTERS_INTEL 0x83F8 #ifndef GLEE_H_DEFINED_glVertexPointervINTEL #define GLEE_H_DEFINED_glVertexPointervINTEL typedef void (APIENTRYP GLEEPFNGLVERTEXPOINTERVINTELPROC) (GLint size, GLenum type, const GLvoid* * pointer); GLEE_EXTERN GLEEPFNGLVERTEXPOINTERVINTELPROC GLeeFuncPtr_glVertexPointervINTEL; #define glVertexPointervINTEL GLeeFuncPtr_glVertexPointervINTEL #endif #ifndef GLEE_H_DEFINED_glNormalPointervINTEL #define GLEE_H_DEFINED_glNormalPointervINTEL typedef void (APIENTRYP GLEEPFNGLNORMALPOINTERVINTELPROC) (GLenum type, const GLvoid* * pointer); GLEE_EXTERN GLEEPFNGLNORMALPOINTERVINTELPROC GLeeFuncPtr_glNormalPointervINTEL; #define glNormalPointervINTEL GLeeFuncPtr_glNormalPointervINTEL #endif #ifndef GLEE_H_DEFINED_glColorPointervINTEL #define GLEE_H_DEFINED_glColorPointervINTEL typedef void (APIENTRYP GLEEPFNGLCOLORPOINTERVINTELPROC) (GLint size, GLenum type, const GLvoid* * pointer); GLEE_EXTERN GLEEPFNGLCOLORPOINTERVINTELPROC GLeeFuncPtr_glColorPointervINTEL; #define glColorPointervINTEL GLeeFuncPtr_glColorPointervINTEL #endif #ifndef GLEE_H_DEFINED_glTexCoordPointervINTEL #define GLEE_H_DEFINED_glTexCoordPointervINTEL typedef void (APIENTRYP GLEEPFNGLTEXCOORDPOINTERVINTELPROC) (GLint size, GLenum type, const GLvoid* * pointer); GLEE_EXTERN GLEEPFNGLTEXCOORDPOINTERVINTELPROC GLeeFuncPtr_glTexCoordPointervINTEL; #define glTexCoordPointervINTEL GLeeFuncPtr_glTexCoordPointervINTEL #endif #endif /* GL_HP_occlusion_test */ #ifndef GL_HP_occlusion_test #define GL_HP_occlusion_test 1 #define __GLEE_GL_HP_occlusion_test 1 /* Constants */ #define GL_OCCLUSION_TEST_HP 0x8165 #define GL_OCCLUSION_TEST_RESULT_HP 0x8166 #endif /* GL_EXT_pixel_transform */ #ifndef GL_EXT_pixel_transform #define GL_EXT_pixel_transform 1 #define __GLEE_GL_EXT_pixel_transform 1 /* Constants */ #define GL_PIXEL_TRANSFORM_2D_EXT 0x8330 #define GL_PIXEL_MAG_FILTER_EXT 0x8331 #define GL_PIXEL_MIN_FILTER_EXT 0x8332 #define GL_PIXEL_CUBIC_WEIGHT_EXT 0x8333 #define GL_CUBIC_EXT 0x8334 #define GL_AVERAGE_EXT 0x8335 #define GL_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8336 #define GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8337 #define GL_PIXEL_TRANSFORM_2D_MATRIX_EXT 0x8338 #ifndef GLEE_H_DEFINED_glPixelTransformParameteriEXT #define GLEE_H_DEFINED_glPixelTransformParameteriEXT typedef void (APIENTRYP GLEEPFNGLPIXELTRANSFORMPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint param); GLEE_EXTERN GLEEPFNGLPIXELTRANSFORMPARAMETERIEXTPROC GLeeFuncPtr_glPixelTransformParameteriEXT; #define glPixelTransformParameteriEXT GLeeFuncPtr_glPixelTransformParameteriEXT #endif #ifndef GLEE_H_DEFINED_glPixelTransformParameterfEXT #define GLEE_H_DEFINED_glPixelTransformParameterfEXT typedef void (APIENTRYP GLEEPFNGLPIXELTRANSFORMPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat param); GLEE_EXTERN GLEEPFNGLPIXELTRANSFORMPARAMETERFEXTPROC GLeeFuncPtr_glPixelTransformParameterfEXT; #define glPixelTransformParameterfEXT GLeeFuncPtr_glPixelTransformParameterfEXT #endif #ifndef GLEE_H_DEFINED_glPixelTransformParameterivEXT #define GLEE_H_DEFINED_glPixelTransformParameterivEXT typedef void (APIENTRYP GLEEPFNGLPIXELTRANSFORMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint * params); GLEE_EXTERN GLEEPFNGLPIXELTRANSFORMPARAMETERIVEXTPROC GLeeFuncPtr_glPixelTransformParameterivEXT; #define glPixelTransformParameterivEXT GLeeFuncPtr_glPixelTransformParameterivEXT #endif #ifndef GLEE_H_DEFINED_glPixelTransformParameterfvEXT #define GLEE_H_DEFINED_glPixelTransformParameterfvEXT typedef void (APIENTRYP GLEEPFNGLPIXELTRANSFORMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat * params); GLEE_EXTERN GLEEPFNGLPIXELTRANSFORMPARAMETERFVEXTPROC GLeeFuncPtr_glPixelTransformParameterfvEXT; #define glPixelTransformParameterfvEXT GLeeFuncPtr_glPixelTransformParameterfvEXT #endif #endif /* GL_EXT_pixel_transform_color_table */ #ifndef GL_EXT_pixel_transform_color_table #define GL_EXT_pixel_transform_color_table 1 #define __GLEE_GL_EXT_pixel_transform_color_table 1 /* Constants */ #endif /* GL_EXT_shared_texture_palette */ #ifndef GL_EXT_shared_texture_palette #define GL_EXT_shared_texture_palette 1 #define __GLEE_GL_EXT_shared_texture_palette 1 /* Constants */ #define GL_SHARED_TEXTURE_PALETTE_EXT 0x81FB #endif /* GL_EXT_separate_specular_color */ #ifndef GL_EXT_separate_specular_color #define GL_EXT_separate_specular_color 1 #define __GLEE_GL_EXT_separate_specular_color 1 /* Constants */ #define GL_LIGHT_MODEL_COLOR_CONTROL_EXT 0x81F8 #define GL_SINGLE_COLOR_EXT 0x81F9 #define GL_SEPARATE_SPECULAR_COLOR_EXT 0x81FA #endif /* GL_EXT_secondary_color */ #ifndef GL_EXT_secondary_color #define GL_EXT_secondary_color 1 #define __GLEE_GL_EXT_secondary_color 1 /* Constants */ #define GL_COLOR_SUM_EXT 0x8458 #define GL_CURRENT_SECONDARY_COLOR_EXT 0x8459 #define GL_SECONDARY_COLOR_ARRAY_SIZE_EXT 0x845A #define GL_SECONDARY_COLOR_ARRAY_TYPE_EXT 0x845B #define GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT 0x845C #define GL_SECONDARY_COLOR_ARRAY_POINTER_EXT 0x845D #define GL_SECONDARY_COLOR_ARRAY_EXT 0x845E #ifndef GLEE_H_DEFINED_glSecondaryColor3bEXT #define GLEE_H_DEFINED_glSecondaryColor3bEXT typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLOR3BEXTPROC) (GLbyte red, GLbyte green, GLbyte blue); GLEE_EXTERN GLEEPFNGLSECONDARYCOLOR3BEXTPROC GLeeFuncPtr_glSecondaryColor3bEXT; #define glSecondaryColor3bEXT GLeeFuncPtr_glSecondaryColor3bEXT #endif #ifndef GLEE_H_DEFINED_glSecondaryColor3bvEXT #define GLEE_H_DEFINED_glSecondaryColor3bvEXT typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLOR3BVEXTPROC) (const GLbyte * v); GLEE_EXTERN GLEEPFNGLSECONDARYCOLOR3BVEXTPROC GLeeFuncPtr_glSecondaryColor3bvEXT; #define glSecondaryColor3bvEXT GLeeFuncPtr_glSecondaryColor3bvEXT #endif #ifndef GLEE_H_DEFINED_glSecondaryColor3dEXT #define GLEE_H_DEFINED_glSecondaryColor3dEXT typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLOR3DEXTPROC) (GLdouble red, GLdouble green, GLdouble blue); GLEE_EXTERN GLEEPFNGLSECONDARYCOLOR3DEXTPROC GLeeFuncPtr_glSecondaryColor3dEXT; #define glSecondaryColor3dEXT GLeeFuncPtr_glSecondaryColor3dEXT #endif #ifndef GLEE_H_DEFINED_glSecondaryColor3dvEXT #define GLEE_H_DEFINED_glSecondaryColor3dvEXT typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLOR3DVEXTPROC) (const GLdouble * v); GLEE_EXTERN GLEEPFNGLSECONDARYCOLOR3DVEXTPROC GLeeFuncPtr_glSecondaryColor3dvEXT; #define glSecondaryColor3dvEXT GLeeFuncPtr_glSecondaryColor3dvEXT #endif #ifndef GLEE_H_DEFINED_glSecondaryColor3fEXT #define GLEE_H_DEFINED_glSecondaryColor3fEXT typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLOR3FEXTPROC) (GLfloat red, GLfloat green, GLfloat blue); GLEE_EXTERN GLEEPFNGLSECONDARYCOLOR3FEXTPROC GLeeFuncPtr_glSecondaryColor3fEXT; #define glSecondaryColor3fEXT GLeeFuncPtr_glSecondaryColor3fEXT #endif #ifndef GLEE_H_DEFINED_glSecondaryColor3fvEXT #define GLEE_H_DEFINED_glSecondaryColor3fvEXT typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLOR3FVEXTPROC) (const GLfloat * v); GLEE_EXTERN GLEEPFNGLSECONDARYCOLOR3FVEXTPROC GLeeFuncPtr_glSecondaryColor3fvEXT; #define glSecondaryColor3fvEXT GLeeFuncPtr_glSecondaryColor3fvEXT #endif #ifndef GLEE_H_DEFINED_glSecondaryColor3iEXT #define GLEE_H_DEFINED_glSecondaryColor3iEXT typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLOR3IEXTPROC) (GLint red, GLint green, GLint blue); GLEE_EXTERN GLEEPFNGLSECONDARYCOLOR3IEXTPROC GLeeFuncPtr_glSecondaryColor3iEXT; #define glSecondaryColor3iEXT GLeeFuncPtr_glSecondaryColor3iEXT #endif #ifndef GLEE_H_DEFINED_glSecondaryColor3ivEXT #define GLEE_H_DEFINED_glSecondaryColor3ivEXT typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLOR3IVEXTPROC) (const GLint * v); GLEE_EXTERN GLEEPFNGLSECONDARYCOLOR3IVEXTPROC GLeeFuncPtr_glSecondaryColor3ivEXT; #define glSecondaryColor3ivEXT GLeeFuncPtr_glSecondaryColor3ivEXT #endif #ifndef GLEE_H_DEFINED_glSecondaryColor3sEXT #define GLEE_H_DEFINED_glSecondaryColor3sEXT typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLOR3SEXTPROC) (GLshort red, GLshort green, GLshort blue); GLEE_EXTERN GLEEPFNGLSECONDARYCOLOR3SEXTPROC GLeeFuncPtr_glSecondaryColor3sEXT; #define glSecondaryColor3sEXT GLeeFuncPtr_glSecondaryColor3sEXT #endif #ifndef GLEE_H_DEFINED_glSecondaryColor3svEXT #define GLEE_H_DEFINED_glSecondaryColor3svEXT typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLOR3SVEXTPROC) (const GLshort * v); GLEE_EXTERN GLEEPFNGLSECONDARYCOLOR3SVEXTPROC GLeeFuncPtr_glSecondaryColor3svEXT; #define glSecondaryColor3svEXT GLeeFuncPtr_glSecondaryColor3svEXT #endif #ifndef GLEE_H_DEFINED_glSecondaryColor3ubEXT #define GLEE_H_DEFINED_glSecondaryColor3ubEXT typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLOR3UBEXTPROC) (GLubyte red, GLubyte green, GLubyte blue); GLEE_EXTERN GLEEPFNGLSECONDARYCOLOR3UBEXTPROC GLeeFuncPtr_glSecondaryColor3ubEXT; #define glSecondaryColor3ubEXT GLeeFuncPtr_glSecondaryColor3ubEXT #endif #ifndef GLEE_H_DEFINED_glSecondaryColor3ubvEXT #define GLEE_H_DEFINED_glSecondaryColor3ubvEXT typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLOR3UBVEXTPROC) (const GLubyte * v); GLEE_EXTERN GLEEPFNGLSECONDARYCOLOR3UBVEXTPROC GLeeFuncPtr_glSecondaryColor3ubvEXT; #define glSecondaryColor3ubvEXT GLeeFuncPtr_glSecondaryColor3ubvEXT #endif #ifndef GLEE_H_DEFINED_glSecondaryColor3uiEXT #define GLEE_H_DEFINED_glSecondaryColor3uiEXT typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLOR3UIEXTPROC) (GLuint red, GLuint green, GLuint blue); GLEE_EXTERN GLEEPFNGLSECONDARYCOLOR3UIEXTPROC GLeeFuncPtr_glSecondaryColor3uiEXT; #define glSecondaryColor3uiEXT GLeeFuncPtr_glSecondaryColor3uiEXT #endif #ifndef GLEE_H_DEFINED_glSecondaryColor3uivEXT #define GLEE_H_DEFINED_glSecondaryColor3uivEXT typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLOR3UIVEXTPROC) (const GLuint * v); GLEE_EXTERN GLEEPFNGLSECONDARYCOLOR3UIVEXTPROC GLeeFuncPtr_glSecondaryColor3uivEXT; #define glSecondaryColor3uivEXT GLeeFuncPtr_glSecondaryColor3uivEXT #endif #ifndef GLEE_H_DEFINED_glSecondaryColor3usEXT #define GLEE_H_DEFINED_glSecondaryColor3usEXT typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLOR3USEXTPROC) (GLushort red, GLushort green, GLushort blue); GLEE_EXTERN GLEEPFNGLSECONDARYCOLOR3USEXTPROC GLeeFuncPtr_glSecondaryColor3usEXT; #define glSecondaryColor3usEXT GLeeFuncPtr_glSecondaryColor3usEXT #endif #ifndef GLEE_H_DEFINED_glSecondaryColor3usvEXT #define GLEE_H_DEFINED_glSecondaryColor3usvEXT typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLOR3USVEXTPROC) (const GLushort * v); GLEE_EXTERN GLEEPFNGLSECONDARYCOLOR3USVEXTPROC GLeeFuncPtr_glSecondaryColor3usvEXT; #define glSecondaryColor3usvEXT GLeeFuncPtr_glSecondaryColor3usvEXT #endif #ifndef GLEE_H_DEFINED_glSecondaryColorPointerEXT #define GLEE_H_DEFINED_glSecondaryColorPointerEXT typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid * pointer); GLEE_EXTERN GLEEPFNGLSECONDARYCOLORPOINTEREXTPROC GLeeFuncPtr_glSecondaryColorPointerEXT; #define glSecondaryColorPointerEXT GLeeFuncPtr_glSecondaryColorPointerEXT #endif #endif /* GL_EXT_texture_perturb_normal */ #ifndef GL_EXT_texture_perturb_normal #define GL_EXT_texture_perturb_normal 1 #define __GLEE_GL_EXT_texture_perturb_normal 1 /* Constants */ #define GL_PERTURB_EXT 0x85AE #define GL_TEXTURE_NORMAL_EXT 0x85AF #ifndef GLEE_H_DEFINED_glTextureNormalEXT #define GLEE_H_DEFINED_glTextureNormalEXT typedef void (APIENTRYP GLEEPFNGLTEXTURENORMALEXTPROC) (GLenum mode); GLEE_EXTERN GLEEPFNGLTEXTURENORMALEXTPROC GLeeFuncPtr_glTextureNormalEXT; #define glTextureNormalEXT GLeeFuncPtr_glTextureNormalEXT #endif #endif /* GL_EXT_multi_draw_arrays */ #ifndef GL_EXT_multi_draw_arrays #define GL_EXT_multi_draw_arrays 1 #define __GLEE_GL_EXT_multi_draw_arrays 1 /* Constants */ #ifndef GLEE_H_DEFINED_glMultiDrawArraysEXT #define GLEE_H_DEFINED_glMultiDrawArraysEXT typedef void (APIENTRYP GLEEPFNGLMULTIDRAWARRAYSEXTPROC) (GLenum mode, GLint * first, GLsizei * count, GLsizei primcount); GLEE_EXTERN GLEEPFNGLMULTIDRAWARRAYSEXTPROC GLeeFuncPtr_glMultiDrawArraysEXT; #define glMultiDrawArraysEXT GLeeFuncPtr_glMultiDrawArraysEXT #endif #ifndef GLEE_H_DEFINED_glMultiDrawElementsEXT #define GLEE_H_DEFINED_glMultiDrawElementsEXT typedef void (APIENTRYP GLEEPFNGLMULTIDRAWELEMENTSEXTPROC) (GLenum mode, const GLsizei * count, GLenum type, const GLvoid* * indices, GLsizei primcount); GLEE_EXTERN GLEEPFNGLMULTIDRAWELEMENTSEXTPROC GLeeFuncPtr_glMultiDrawElementsEXT; #define glMultiDrawElementsEXT GLeeFuncPtr_glMultiDrawElementsEXT #endif #endif /* GL_EXT_fog_coord */ #ifndef GL_EXT_fog_coord #define GL_EXT_fog_coord 1 #define __GLEE_GL_EXT_fog_coord 1 /* Constants */ #define GL_FOG_COORDINATE_SOURCE_EXT 0x8450 #define GL_FOG_COORDINATE_EXT 0x8451 #define GL_FRAGMENT_DEPTH_EXT 0x8452 #define GL_CURRENT_FOG_COORDINATE_EXT 0x8453 #define GL_FOG_COORDINATE_ARRAY_TYPE_EXT 0x8454 #define GL_FOG_COORDINATE_ARRAY_STRIDE_EXT 0x8455 #define GL_FOG_COORDINATE_ARRAY_POINTER_EXT 0x8456 #define GL_FOG_COORDINATE_ARRAY_EXT 0x8457 #ifndef GLEE_H_DEFINED_glFogCoordfEXT #define GLEE_H_DEFINED_glFogCoordfEXT typedef void (APIENTRYP GLEEPFNGLFOGCOORDFEXTPROC) (GLfloat coord); GLEE_EXTERN GLEEPFNGLFOGCOORDFEXTPROC GLeeFuncPtr_glFogCoordfEXT; #define glFogCoordfEXT GLeeFuncPtr_glFogCoordfEXT #endif #ifndef GLEE_H_DEFINED_glFogCoordfvEXT #define GLEE_H_DEFINED_glFogCoordfvEXT typedef void (APIENTRYP GLEEPFNGLFOGCOORDFVEXTPROC) (const GLfloat * coord); GLEE_EXTERN GLEEPFNGLFOGCOORDFVEXTPROC GLeeFuncPtr_glFogCoordfvEXT; #define glFogCoordfvEXT GLeeFuncPtr_glFogCoordfvEXT #endif #ifndef GLEE_H_DEFINED_glFogCoorddEXT #define GLEE_H_DEFINED_glFogCoorddEXT typedef void (APIENTRYP GLEEPFNGLFOGCOORDDEXTPROC) (GLdouble coord); GLEE_EXTERN GLEEPFNGLFOGCOORDDEXTPROC GLeeFuncPtr_glFogCoorddEXT; #define glFogCoorddEXT GLeeFuncPtr_glFogCoorddEXT #endif #ifndef GLEE_H_DEFINED_glFogCoorddvEXT #define GLEE_H_DEFINED_glFogCoorddvEXT typedef void (APIENTRYP GLEEPFNGLFOGCOORDDVEXTPROC) (const GLdouble * coord); GLEE_EXTERN GLEEPFNGLFOGCOORDDVEXTPROC GLeeFuncPtr_glFogCoorddvEXT; #define glFogCoorddvEXT GLeeFuncPtr_glFogCoorddvEXT #endif #ifndef GLEE_H_DEFINED_glFogCoordPointerEXT #define GLEE_H_DEFINED_glFogCoordPointerEXT typedef void (APIENTRYP GLEEPFNGLFOGCOORDPOINTEREXTPROC) (GLenum type, GLsizei stride, const GLvoid * pointer); GLEE_EXTERN GLEEPFNGLFOGCOORDPOINTEREXTPROC GLeeFuncPtr_glFogCoordPointerEXT; #define glFogCoordPointerEXT GLeeFuncPtr_glFogCoordPointerEXT #endif #endif /* GL_REND_screen_coordinates */ #ifndef GL_REND_screen_coordinates #define GL_REND_screen_coordinates 1 #define __GLEE_GL_REND_screen_coordinates 1 /* Constants */ #define GL_SCREEN_COORDINATES_REND 0x8490 #define GL_INVERTED_SCREEN_W_REND 0x8491 #endif /* GL_EXT_coordinate_frame */ #ifndef GL_EXT_coordinate_frame #define GL_EXT_coordinate_frame 1 #define __GLEE_GL_EXT_coordinate_frame 1 /* Constants */ #define GL_TANGENT_ARRAY_EXT 0x8439 #define GL_BINORMAL_ARRAY_EXT 0x843A #define GL_CURRENT_TANGENT_EXT 0x843B #define GL_CURRENT_BINORMAL_EXT 0x843C #define GL_TANGENT_ARRAY_TYPE_EXT 0x843E #define GL_TANGENT_ARRAY_STRIDE_EXT 0x843F #define GL_BINORMAL_ARRAY_TYPE_EXT 0x8440 #define GL_BINORMAL_ARRAY_STRIDE_EXT 0x8441 #define GL_TANGENT_ARRAY_POINTER_EXT 0x8442 #define GL_BINORMAL_ARRAY_POINTER_EXT 0x8443 #define GL_MAP1_TANGENT_EXT 0x8444 #define GL_MAP2_TANGENT_EXT 0x8445 #define GL_MAP1_BINORMAL_EXT 0x8446 #define GL_MAP2_BINORMAL_EXT 0x8447 #ifndef GLEE_H_DEFINED_glTangent3bEXT #define GLEE_H_DEFINED_glTangent3bEXT typedef void (APIENTRYP GLEEPFNGLTANGENT3BEXTPROC) (GLbyte tx, GLbyte ty, GLbyte tz); GLEE_EXTERN GLEEPFNGLTANGENT3BEXTPROC GLeeFuncPtr_glTangent3bEXT; #define glTangent3bEXT GLeeFuncPtr_glTangent3bEXT #endif #ifndef GLEE_H_DEFINED_glTangent3bvEXT #define GLEE_H_DEFINED_glTangent3bvEXT typedef void (APIENTRYP GLEEPFNGLTANGENT3BVEXTPROC) (const GLbyte * v); GLEE_EXTERN GLEEPFNGLTANGENT3BVEXTPROC GLeeFuncPtr_glTangent3bvEXT; #define glTangent3bvEXT GLeeFuncPtr_glTangent3bvEXT #endif #ifndef GLEE_H_DEFINED_glTangent3dEXT #define GLEE_H_DEFINED_glTangent3dEXT typedef void (APIENTRYP GLEEPFNGLTANGENT3DEXTPROC) (GLdouble tx, GLdouble ty, GLdouble tz); GLEE_EXTERN GLEEPFNGLTANGENT3DEXTPROC GLeeFuncPtr_glTangent3dEXT; #define glTangent3dEXT GLeeFuncPtr_glTangent3dEXT #endif #ifndef GLEE_H_DEFINED_glTangent3dvEXT #define GLEE_H_DEFINED_glTangent3dvEXT typedef void (APIENTRYP GLEEPFNGLTANGENT3DVEXTPROC) (const GLdouble * v); GLEE_EXTERN GLEEPFNGLTANGENT3DVEXTPROC GLeeFuncPtr_glTangent3dvEXT; #define glTangent3dvEXT GLeeFuncPtr_glTangent3dvEXT #endif #ifndef GLEE_H_DEFINED_glTangent3fEXT #define GLEE_H_DEFINED_glTangent3fEXT typedef void (APIENTRYP GLEEPFNGLTANGENT3FEXTPROC) (GLfloat tx, GLfloat ty, GLfloat tz); GLEE_EXTERN GLEEPFNGLTANGENT3FEXTPROC GLeeFuncPtr_glTangent3fEXT; #define glTangent3fEXT GLeeFuncPtr_glTangent3fEXT #endif #ifndef GLEE_H_DEFINED_glTangent3fvEXT #define GLEE_H_DEFINED_glTangent3fvEXT typedef void (APIENTRYP GLEEPFNGLTANGENT3FVEXTPROC) (const GLfloat * v); GLEE_EXTERN GLEEPFNGLTANGENT3FVEXTPROC GLeeFuncPtr_glTangent3fvEXT; #define glTangent3fvEXT GLeeFuncPtr_glTangent3fvEXT #endif #ifndef GLEE_H_DEFINED_glTangent3iEXT #define GLEE_H_DEFINED_glTangent3iEXT typedef void (APIENTRYP GLEEPFNGLTANGENT3IEXTPROC) (GLint tx, GLint ty, GLint tz); GLEE_EXTERN GLEEPFNGLTANGENT3IEXTPROC GLeeFuncPtr_glTangent3iEXT; #define glTangent3iEXT GLeeFuncPtr_glTangent3iEXT #endif #ifndef GLEE_H_DEFINED_glTangent3ivEXT #define GLEE_H_DEFINED_glTangent3ivEXT typedef void (APIENTRYP GLEEPFNGLTANGENT3IVEXTPROC) (const GLint * v); GLEE_EXTERN GLEEPFNGLTANGENT3IVEXTPROC GLeeFuncPtr_glTangent3ivEXT; #define glTangent3ivEXT GLeeFuncPtr_glTangent3ivEXT #endif #ifndef GLEE_H_DEFINED_glTangent3sEXT #define GLEE_H_DEFINED_glTangent3sEXT typedef void (APIENTRYP GLEEPFNGLTANGENT3SEXTPROC) (GLshort tx, GLshort ty, GLshort tz); GLEE_EXTERN GLEEPFNGLTANGENT3SEXTPROC GLeeFuncPtr_glTangent3sEXT; #define glTangent3sEXT GLeeFuncPtr_glTangent3sEXT #endif #ifndef GLEE_H_DEFINED_glTangent3svEXT #define GLEE_H_DEFINED_glTangent3svEXT typedef void (APIENTRYP GLEEPFNGLTANGENT3SVEXTPROC) (const GLshort * v); GLEE_EXTERN GLEEPFNGLTANGENT3SVEXTPROC GLeeFuncPtr_glTangent3svEXT; #define glTangent3svEXT GLeeFuncPtr_glTangent3svEXT #endif #ifndef GLEE_H_DEFINED_glBinormal3bEXT #define GLEE_H_DEFINED_glBinormal3bEXT typedef void (APIENTRYP GLEEPFNGLBINORMAL3BEXTPROC) (GLbyte bx, GLbyte by, GLbyte bz); GLEE_EXTERN GLEEPFNGLBINORMAL3BEXTPROC GLeeFuncPtr_glBinormal3bEXT; #define glBinormal3bEXT GLeeFuncPtr_glBinormal3bEXT #endif #ifndef GLEE_H_DEFINED_glBinormal3bvEXT #define GLEE_H_DEFINED_glBinormal3bvEXT typedef void (APIENTRYP GLEEPFNGLBINORMAL3BVEXTPROC) (const GLbyte * v); GLEE_EXTERN GLEEPFNGLBINORMAL3BVEXTPROC GLeeFuncPtr_glBinormal3bvEXT; #define glBinormal3bvEXT GLeeFuncPtr_glBinormal3bvEXT #endif #ifndef GLEE_H_DEFINED_glBinormal3dEXT #define GLEE_H_DEFINED_glBinormal3dEXT typedef void (APIENTRYP GLEEPFNGLBINORMAL3DEXTPROC) (GLdouble bx, GLdouble by, GLdouble bz); GLEE_EXTERN GLEEPFNGLBINORMAL3DEXTPROC GLeeFuncPtr_glBinormal3dEXT; #define glBinormal3dEXT GLeeFuncPtr_glBinormal3dEXT #endif #ifndef GLEE_H_DEFINED_glBinormal3dvEXT #define GLEE_H_DEFINED_glBinormal3dvEXT typedef void (APIENTRYP GLEEPFNGLBINORMAL3DVEXTPROC) (const GLdouble * v); GLEE_EXTERN GLEEPFNGLBINORMAL3DVEXTPROC GLeeFuncPtr_glBinormal3dvEXT; #define glBinormal3dvEXT GLeeFuncPtr_glBinormal3dvEXT #endif #ifndef GLEE_H_DEFINED_glBinormal3fEXT #define GLEE_H_DEFINED_glBinormal3fEXT typedef void (APIENTRYP GLEEPFNGLBINORMAL3FEXTPROC) (GLfloat bx, GLfloat by, GLfloat bz); GLEE_EXTERN GLEEPFNGLBINORMAL3FEXTPROC GLeeFuncPtr_glBinormal3fEXT; #define glBinormal3fEXT GLeeFuncPtr_glBinormal3fEXT #endif #ifndef GLEE_H_DEFINED_glBinormal3fvEXT #define GLEE_H_DEFINED_glBinormal3fvEXT typedef void (APIENTRYP GLEEPFNGLBINORMAL3FVEXTPROC) (const GLfloat * v); GLEE_EXTERN GLEEPFNGLBINORMAL3FVEXTPROC GLeeFuncPtr_glBinormal3fvEXT; #define glBinormal3fvEXT GLeeFuncPtr_glBinormal3fvEXT #endif #ifndef GLEE_H_DEFINED_glBinormal3iEXT #define GLEE_H_DEFINED_glBinormal3iEXT typedef void (APIENTRYP GLEEPFNGLBINORMAL3IEXTPROC) (GLint bx, GLint by, GLint bz); GLEE_EXTERN GLEEPFNGLBINORMAL3IEXTPROC GLeeFuncPtr_glBinormal3iEXT; #define glBinormal3iEXT GLeeFuncPtr_glBinormal3iEXT #endif #ifndef GLEE_H_DEFINED_glBinormal3ivEXT #define GLEE_H_DEFINED_glBinormal3ivEXT typedef void (APIENTRYP GLEEPFNGLBINORMAL3IVEXTPROC) (const GLint * v); GLEE_EXTERN GLEEPFNGLBINORMAL3IVEXTPROC GLeeFuncPtr_glBinormal3ivEXT; #define glBinormal3ivEXT GLeeFuncPtr_glBinormal3ivEXT #endif #ifndef GLEE_H_DEFINED_glBinormal3sEXT #define GLEE_H_DEFINED_glBinormal3sEXT typedef void (APIENTRYP GLEEPFNGLBINORMAL3SEXTPROC) (GLshort bx, GLshort by, GLshort bz); GLEE_EXTERN GLEEPFNGLBINORMAL3SEXTPROC GLeeFuncPtr_glBinormal3sEXT; #define glBinormal3sEXT GLeeFuncPtr_glBinormal3sEXT #endif #ifndef GLEE_H_DEFINED_glBinormal3svEXT #define GLEE_H_DEFINED_glBinormal3svEXT typedef void (APIENTRYP GLEEPFNGLBINORMAL3SVEXTPROC) (const GLshort * v); GLEE_EXTERN GLEEPFNGLBINORMAL3SVEXTPROC GLeeFuncPtr_glBinormal3svEXT; #define glBinormal3svEXT GLeeFuncPtr_glBinormal3svEXT #endif #ifndef GLEE_H_DEFINED_glTangentPointerEXT #define GLEE_H_DEFINED_glTangentPointerEXT typedef void (APIENTRYP GLEEPFNGLTANGENTPOINTEREXTPROC) (GLenum type, GLsizei stride, const GLvoid * pointer); GLEE_EXTERN GLEEPFNGLTANGENTPOINTEREXTPROC GLeeFuncPtr_glTangentPointerEXT; #define glTangentPointerEXT GLeeFuncPtr_glTangentPointerEXT #endif #ifndef GLEE_H_DEFINED_glBinormalPointerEXT #define GLEE_H_DEFINED_glBinormalPointerEXT typedef void (APIENTRYP GLEEPFNGLBINORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, const GLvoid * pointer); GLEE_EXTERN GLEEPFNGLBINORMALPOINTEREXTPROC GLeeFuncPtr_glBinormalPointerEXT; #define glBinormalPointerEXT GLeeFuncPtr_glBinormalPointerEXT #endif #endif /* GL_EXT_texture_env_combine */ #ifndef GL_EXT_texture_env_combine #define GL_EXT_texture_env_combine 1 #define __GLEE_GL_EXT_texture_env_combine 1 /* Constants */ #define GL_COMBINE_EXT 0x8570 #define GL_COMBINE_RGB_EXT 0x8571 #define GL_COMBINE_ALPHA_EXT 0x8572 #define GL_RGB_SCALE_EXT 0x8573 #define GL_ADD_SIGNED_EXT 0x8574 #define GL_INTERPOLATE_EXT 0x8575 #define GL_CONSTANT_EXT 0x8576 #define GL_PRIMARY_COLOR_EXT 0x8577 #define GL_PREVIOUS_EXT 0x8578 #define GL_SOURCE0_RGB_EXT 0x8580 #define GL_SOURCE1_RGB_EXT 0x8581 #define GL_SOURCE2_RGB_EXT 0x8582 #define GL_SOURCE0_ALPHA_EXT 0x8588 #define GL_SOURCE1_ALPHA_EXT 0x8589 #define GL_SOURCE2_ALPHA_EXT 0x858A #define GL_OPERAND0_RGB_EXT 0x8590 #define GL_OPERAND1_RGB_EXT 0x8591 #define GL_OPERAND2_RGB_EXT 0x8592 #define GL_OPERAND0_ALPHA_EXT 0x8598 #define GL_OPERAND1_ALPHA_EXT 0x8599 #define GL_OPERAND2_ALPHA_EXT 0x859A #endif /* GL_APPLE_specular_vector */ #ifndef GL_APPLE_specular_vector #define GL_APPLE_specular_vector 1 #define __GLEE_GL_APPLE_specular_vector 1 /* Constants */ #define GL_LIGHT_MODEL_SPECULAR_VECTOR_APPLE 0x85B0 #endif /* GL_APPLE_transform_hint */ #ifndef GL_APPLE_transform_hint #define GL_APPLE_transform_hint 1 #define __GLEE_GL_APPLE_transform_hint 1 /* Constants */ #define GL_TRANSFORM_HINT_APPLE 0x85B1 #endif /* GL_SGIX_fog_scale */ #ifndef GL_SGIX_fog_scale #define GL_SGIX_fog_scale 1 #define __GLEE_GL_SGIX_fog_scale 1 /* Constants */ #define GL_FOG_SCALE_SGIX 0x81FC #define GL_FOG_SCALE_VALUE_SGIX 0x81FD #endif /* GL_SUNX_constant_data */ #ifndef GL_SUNX_constant_data #define GL_SUNX_constant_data 1 #define __GLEE_GL_SUNX_constant_data 1 /* Constants */ #define GL_UNPACK_CONSTANT_DATA_SUNX 0x81D5 #define GL_TEXTURE_CONSTANT_DATA_SUNX 0x81D6 #ifndef GLEE_H_DEFINED_glFinishTextureSUNX #define GLEE_H_DEFINED_glFinishTextureSUNX typedef void (APIENTRYP GLEEPFNGLFINISHTEXTURESUNXPROC) (); GLEE_EXTERN GLEEPFNGLFINISHTEXTURESUNXPROC GLeeFuncPtr_glFinishTextureSUNX; #define glFinishTextureSUNX GLeeFuncPtr_glFinishTextureSUNX #endif #endif /* GL_SUN_global_alpha */ #ifndef GL_SUN_global_alpha #define GL_SUN_global_alpha 1 #define __GLEE_GL_SUN_global_alpha 1 /* Constants */ #define GL_GLOBAL_ALPHA_SUN 0x81D9 #define GL_GLOBAL_ALPHA_FACTOR_SUN 0x81DA #ifndef GLEE_H_DEFINED_glGlobalAlphaFactorbSUN #define GLEE_H_DEFINED_glGlobalAlphaFactorbSUN typedef void (APIENTRYP GLEEPFNGLGLOBALALPHAFACTORBSUNPROC) (GLbyte factor); GLEE_EXTERN GLEEPFNGLGLOBALALPHAFACTORBSUNPROC GLeeFuncPtr_glGlobalAlphaFactorbSUN; #define glGlobalAlphaFactorbSUN GLeeFuncPtr_glGlobalAlphaFactorbSUN #endif #ifndef GLEE_H_DEFINED_glGlobalAlphaFactorsSUN #define GLEE_H_DEFINED_glGlobalAlphaFactorsSUN typedef void (APIENTRYP GLEEPFNGLGLOBALALPHAFACTORSSUNPROC) (GLshort factor); GLEE_EXTERN GLEEPFNGLGLOBALALPHAFACTORSSUNPROC GLeeFuncPtr_glGlobalAlphaFactorsSUN; #define glGlobalAlphaFactorsSUN GLeeFuncPtr_glGlobalAlphaFactorsSUN #endif #ifndef GLEE_H_DEFINED_glGlobalAlphaFactoriSUN #define GLEE_H_DEFINED_glGlobalAlphaFactoriSUN typedef void (APIENTRYP GLEEPFNGLGLOBALALPHAFACTORISUNPROC) (GLint factor); GLEE_EXTERN GLEEPFNGLGLOBALALPHAFACTORISUNPROC GLeeFuncPtr_glGlobalAlphaFactoriSUN; #define glGlobalAlphaFactoriSUN GLeeFuncPtr_glGlobalAlphaFactoriSUN #endif #ifndef GLEE_H_DEFINED_glGlobalAlphaFactorfSUN #define GLEE_H_DEFINED_glGlobalAlphaFactorfSUN typedef void (APIENTRYP GLEEPFNGLGLOBALALPHAFACTORFSUNPROC) (GLfloat factor); GLEE_EXTERN GLEEPFNGLGLOBALALPHAFACTORFSUNPROC GLeeFuncPtr_glGlobalAlphaFactorfSUN; #define glGlobalAlphaFactorfSUN GLeeFuncPtr_glGlobalAlphaFactorfSUN #endif #ifndef GLEE_H_DEFINED_glGlobalAlphaFactordSUN #define GLEE_H_DEFINED_glGlobalAlphaFactordSUN typedef void (APIENTRYP GLEEPFNGLGLOBALALPHAFACTORDSUNPROC) (GLdouble factor); GLEE_EXTERN GLEEPFNGLGLOBALALPHAFACTORDSUNPROC GLeeFuncPtr_glGlobalAlphaFactordSUN; #define glGlobalAlphaFactordSUN GLeeFuncPtr_glGlobalAlphaFactordSUN #endif #ifndef GLEE_H_DEFINED_glGlobalAlphaFactorubSUN #define GLEE_H_DEFINED_glGlobalAlphaFactorubSUN typedef void (APIENTRYP GLEEPFNGLGLOBALALPHAFACTORUBSUNPROC) (GLubyte factor); GLEE_EXTERN GLEEPFNGLGLOBALALPHAFACTORUBSUNPROC GLeeFuncPtr_glGlobalAlphaFactorubSUN; #define glGlobalAlphaFactorubSUN GLeeFuncPtr_glGlobalAlphaFactorubSUN #endif #ifndef GLEE_H_DEFINED_glGlobalAlphaFactorusSUN #define GLEE_H_DEFINED_glGlobalAlphaFactorusSUN typedef void (APIENTRYP GLEEPFNGLGLOBALALPHAFACTORUSSUNPROC) (GLushort factor); GLEE_EXTERN GLEEPFNGLGLOBALALPHAFACTORUSSUNPROC GLeeFuncPtr_glGlobalAlphaFactorusSUN; #define glGlobalAlphaFactorusSUN GLeeFuncPtr_glGlobalAlphaFactorusSUN #endif #ifndef GLEE_H_DEFINED_glGlobalAlphaFactoruiSUN #define GLEE_H_DEFINED_glGlobalAlphaFactoruiSUN typedef void (APIENTRYP GLEEPFNGLGLOBALALPHAFACTORUISUNPROC) (GLuint factor); GLEE_EXTERN GLEEPFNGLGLOBALALPHAFACTORUISUNPROC GLeeFuncPtr_glGlobalAlphaFactoruiSUN; #define glGlobalAlphaFactoruiSUN GLeeFuncPtr_glGlobalAlphaFactoruiSUN #endif #endif /* GL_SUN_triangle_list */ #ifndef GL_SUN_triangle_list #define GL_SUN_triangle_list 1 #define __GLEE_GL_SUN_triangle_list 1 /* Constants */ #define GL_RESTART_SUN 0x0001 #define GL_REPLACE_MIDDLE_SUN 0x0002 #define GL_REPLACE_OLDEST_SUN 0x0003 #define GL_TRIANGLE_LIST_SUN 0x81D7 #define GL_REPLACEMENT_CODE_SUN 0x81D8 #define GL_REPLACEMENT_CODE_ARRAY_SUN 0x85C0 #define GL_REPLACEMENT_CODE_ARRAY_TYPE_SUN 0x85C1 #define GL_REPLACEMENT_CODE_ARRAY_STRIDE_SUN 0x85C2 #define GL_REPLACEMENT_CODE_ARRAY_POINTER_SUN 0x85C3 #define GL_R1UI_V3F_SUN 0x85C4 #define GL_R1UI_C4UB_V3F_SUN 0x85C5 #define GL_R1UI_C3F_V3F_SUN 0x85C6 #define GL_R1UI_N3F_V3F_SUN 0x85C7 #define GL_R1UI_C4F_N3F_V3F_SUN 0x85C8 #define GL_R1UI_T2F_V3F_SUN 0x85C9 #define GL_R1UI_T2F_N3F_V3F_SUN 0x85CA #define GL_R1UI_T2F_C4F_N3F_V3F_SUN 0x85CB #ifndef GLEE_H_DEFINED_glReplacementCodeuiSUN #define GLEE_H_DEFINED_glReplacementCodeuiSUN typedef void (APIENTRYP GLEEPFNGLREPLACEMENTCODEUISUNPROC) (GLuint code); GLEE_EXTERN GLEEPFNGLREPLACEMENTCODEUISUNPROC GLeeFuncPtr_glReplacementCodeuiSUN; #define glReplacementCodeuiSUN GLeeFuncPtr_glReplacementCodeuiSUN #endif #ifndef GLEE_H_DEFINED_glReplacementCodeusSUN #define GLEE_H_DEFINED_glReplacementCodeusSUN typedef void (APIENTRYP GLEEPFNGLREPLACEMENTCODEUSSUNPROC) (GLushort code); GLEE_EXTERN GLEEPFNGLREPLACEMENTCODEUSSUNPROC GLeeFuncPtr_glReplacementCodeusSUN; #define glReplacementCodeusSUN GLeeFuncPtr_glReplacementCodeusSUN #endif #ifndef GLEE_H_DEFINED_glReplacementCodeubSUN #define GLEE_H_DEFINED_glReplacementCodeubSUN typedef void (APIENTRYP GLEEPFNGLREPLACEMENTCODEUBSUNPROC) (GLubyte code); GLEE_EXTERN GLEEPFNGLREPLACEMENTCODEUBSUNPROC GLeeFuncPtr_glReplacementCodeubSUN; #define glReplacementCodeubSUN GLeeFuncPtr_glReplacementCodeubSUN #endif #ifndef GLEE_H_DEFINED_glReplacementCodeuivSUN #define GLEE_H_DEFINED_glReplacementCodeuivSUN typedef void (APIENTRYP GLEEPFNGLREPLACEMENTCODEUIVSUNPROC) (const GLuint * code); GLEE_EXTERN GLEEPFNGLREPLACEMENTCODEUIVSUNPROC GLeeFuncPtr_glReplacementCodeuivSUN; #define glReplacementCodeuivSUN GLeeFuncPtr_glReplacementCodeuivSUN #endif #ifndef GLEE_H_DEFINED_glReplacementCodeusvSUN #define GLEE_H_DEFINED_glReplacementCodeusvSUN typedef void (APIENTRYP GLEEPFNGLREPLACEMENTCODEUSVSUNPROC) (const GLushort * code); GLEE_EXTERN GLEEPFNGLREPLACEMENTCODEUSVSUNPROC GLeeFuncPtr_glReplacementCodeusvSUN; #define glReplacementCodeusvSUN GLeeFuncPtr_glReplacementCodeusvSUN #endif #ifndef GLEE_H_DEFINED_glReplacementCodeubvSUN #define GLEE_H_DEFINED_glReplacementCodeubvSUN typedef void (APIENTRYP GLEEPFNGLREPLACEMENTCODEUBVSUNPROC) (const GLubyte * code); GLEE_EXTERN GLEEPFNGLREPLACEMENTCODEUBVSUNPROC GLeeFuncPtr_glReplacementCodeubvSUN; #define glReplacementCodeubvSUN GLeeFuncPtr_glReplacementCodeubvSUN #endif #ifndef GLEE_H_DEFINED_glReplacementCodePointerSUN #define GLEE_H_DEFINED_glReplacementCodePointerSUN typedef void (APIENTRYP GLEEPFNGLREPLACEMENTCODEPOINTERSUNPROC) (GLenum type, GLsizei stride, const GLvoid* * pointer); GLEE_EXTERN GLEEPFNGLREPLACEMENTCODEPOINTERSUNPROC GLeeFuncPtr_glReplacementCodePointerSUN; #define glReplacementCodePointerSUN GLeeFuncPtr_glReplacementCodePointerSUN #endif #endif /* GL_SUN_vertex */ #ifndef GL_SUN_vertex #define GL_SUN_vertex 1 #define __GLEE_GL_SUN_vertex 1 /* Constants */ #ifndef GLEE_H_DEFINED_glColor4ubVertex2fSUN #define GLEE_H_DEFINED_glColor4ubVertex2fSUN typedef void (APIENTRYP GLEEPFNGLCOLOR4UBVERTEX2FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y); GLEE_EXTERN GLEEPFNGLCOLOR4UBVERTEX2FSUNPROC GLeeFuncPtr_glColor4ubVertex2fSUN; #define glColor4ubVertex2fSUN GLeeFuncPtr_glColor4ubVertex2fSUN #endif #ifndef GLEE_H_DEFINED_glColor4ubVertex2fvSUN #define GLEE_H_DEFINED_glColor4ubVertex2fvSUN typedef void (APIENTRYP GLEEPFNGLCOLOR4UBVERTEX2FVSUNPROC) (const GLubyte * c, const GLfloat * v); GLEE_EXTERN GLEEPFNGLCOLOR4UBVERTEX2FVSUNPROC GLeeFuncPtr_glColor4ubVertex2fvSUN; #define glColor4ubVertex2fvSUN GLeeFuncPtr_glColor4ubVertex2fvSUN #endif #ifndef GLEE_H_DEFINED_glColor4ubVertex3fSUN #define GLEE_H_DEFINED_glColor4ubVertex3fSUN typedef void (APIENTRYP GLEEPFNGLCOLOR4UBVERTEX3FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); GLEE_EXTERN GLEEPFNGLCOLOR4UBVERTEX3FSUNPROC GLeeFuncPtr_glColor4ubVertex3fSUN; #define glColor4ubVertex3fSUN GLeeFuncPtr_glColor4ubVertex3fSUN #endif #ifndef GLEE_H_DEFINED_glColor4ubVertex3fvSUN #define GLEE_H_DEFINED_glColor4ubVertex3fvSUN typedef void (APIENTRYP GLEEPFNGLCOLOR4UBVERTEX3FVSUNPROC) (const GLubyte * c, const GLfloat * v); GLEE_EXTERN GLEEPFNGLCOLOR4UBVERTEX3FVSUNPROC GLeeFuncPtr_glColor4ubVertex3fvSUN; #define glColor4ubVertex3fvSUN GLeeFuncPtr_glColor4ubVertex3fvSUN #endif #ifndef GLEE_H_DEFINED_glColor3fVertex3fSUN #define GLEE_H_DEFINED_glColor3fVertex3fSUN typedef void (APIENTRYP GLEEPFNGLCOLOR3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); GLEE_EXTERN GLEEPFNGLCOLOR3FVERTEX3FSUNPROC GLeeFuncPtr_glColor3fVertex3fSUN; #define glColor3fVertex3fSUN GLeeFuncPtr_glColor3fVertex3fSUN #endif #ifndef GLEE_H_DEFINED_glColor3fVertex3fvSUN #define GLEE_H_DEFINED_glColor3fVertex3fvSUN typedef void (APIENTRYP GLEEPFNGLCOLOR3FVERTEX3FVSUNPROC) (const GLfloat * c, const GLfloat * v); GLEE_EXTERN GLEEPFNGLCOLOR3FVERTEX3FVSUNPROC GLeeFuncPtr_glColor3fVertex3fvSUN; #define glColor3fVertex3fvSUN GLeeFuncPtr_glColor3fVertex3fvSUN #endif #ifndef GLEE_H_DEFINED_glNormal3fVertex3fSUN #define GLEE_H_DEFINED_glNormal3fVertex3fSUN typedef void (APIENTRYP GLEEPFNGLNORMAL3FVERTEX3FSUNPROC) (GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); GLEE_EXTERN GLEEPFNGLNORMAL3FVERTEX3FSUNPROC GLeeFuncPtr_glNormal3fVertex3fSUN; #define glNormal3fVertex3fSUN GLeeFuncPtr_glNormal3fVertex3fSUN #endif #ifndef GLEE_H_DEFINED_glNormal3fVertex3fvSUN #define GLEE_H_DEFINED_glNormal3fVertex3fvSUN typedef void (APIENTRYP GLEEPFNGLNORMAL3FVERTEX3FVSUNPROC) (const GLfloat * n, const GLfloat * v); GLEE_EXTERN GLEEPFNGLNORMAL3FVERTEX3FVSUNPROC GLeeFuncPtr_glNormal3fVertex3fvSUN; #define glNormal3fVertex3fvSUN GLeeFuncPtr_glNormal3fVertex3fvSUN #endif #ifndef GLEE_H_DEFINED_glColor4fNormal3fVertex3fSUN #define GLEE_H_DEFINED_glColor4fNormal3fVertex3fSUN typedef void (APIENTRYP GLEEPFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); GLEE_EXTERN GLEEPFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC GLeeFuncPtr_glColor4fNormal3fVertex3fSUN; #define glColor4fNormal3fVertex3fSUN GLeeFuncPtr_glColor4fNormal3fVertex3fSUN #endif #ifndef GLEE_H_DEFINED_glColor4fNormal3fVertex3fvSUN #define GLEE_H_DEFINED_glColor4fNormal3fVertex3fvSUN typedef void (APIENTRYP GLEEPFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat * c, const GLfloat * n, const GLfloat * v); GLEE_EXTERN GLEEPFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC GLeeFuncPtr_glColor4fNormal3fVertex3fvSUN; #define glColor4fNormal3fVertex3fvSUN GLeeFuncPtr_glColor4fNormal3fVertex3fvSUN #endif #ifndef GLEE_H_DEFINED_glTexCoord2fVertex3fSUN #define GLEE_H_DEFINED_glTexCoord2fVertex3fSUN typedef void (APIENTRYP GLEEPFNGLTEXCOORD2FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); GLEE_EXTERN GLEEPFNGLTEXCOORD2FVERTEX3FSUNPROC GLeeFuncPtr_glTexCoord2fVertex3fSUN; #define glTexCoord2fVertex3fSUN GLeeFuncPtr_glTexCoord2fVertex3fSUN #endif #ifndef GLEE_H_DEFINED_glTexCoord2fVertex3fvSUN #define GLEE_H_DEFINED_glTexCoord2fVertex3fvSUN typedef void (APIENTRYP GLEEPFNGLTEXCOORD2FVERTEX3FVSUNPROC) (const GLfloat * tc, const GLfloat * v); GLEE_EXTERN GLEEPFNGLTEXCOORD2FVERTEX3FVSUNPROC GLeeFuncPtr_glTexCoord2fVertex3fvSUN; #define glTexCoord2fVertex3fvSUN GLeeFuncPtr_glTexCoord2fVertex3fvSUN #endif #ifndef GLEE_H_DEFINED_glTexCoord4fVertex4fSUN #define GLEE_H_DEFINED_glTexCoord4fVertex4fSUN typedef void (APIENTRYP GLEEPFNGLTEXCOORD4FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w); GLEE_EXTERN GLEEPFNGLTEXCOORD4FVERTEX4FSUNPROC GLeeFuncPtr_glTexCoord4fVertex4fSUN; #define glTexCoord4fVertex4fSUN GLeeFuncPtr_glTexCoord4fVertex4fSUN #endif #ifndef GLEE_H_DEFINED_glTexCoord4fVertex4fvSUN #define GLEE_H_DEFINED_glTexCoord4fVertex4fvSUN typedef void (APIENTRYP GLEEPFNGLTEXCOORD4FVERTEX4FVSUNPROC) (const GLfloat * tc, const GLfloat * v); GLEE_EXTERN GLEEPFNGLTEXCOORD4FVERTEX4FVSUNPROC GLeeFuncPtr_glTexCoord4fVertex4fvSUN; #define glTexCoord4fVertex4fvSUN GLeeFuncPtr_glTexCoord4fVertex4fvSUN #endif #ifndef GLEE_H_DEFINED_glTexCoord2fColor4ubVertex3fSUN #define GLEE_H_DEFINED_glTexCoord2fColor4ubVertex3fSUN typedef void (APIENTRYP GLEEPFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); GLEE_EXTERN GLEEPFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC GLeeFuncPtr_glTexCoord2fColor4ubVertex3fSUN; #define glTexCoord2fColor4ubVertex3fSUN GLeeFuncPtr_glTexCoord2fColor4ubVertex3fSUN #endif #ifndef GLEE_H_DEFINED_glTexCoord2fColor4ubVertex3fvSUN #define GLEE_H_DEFINED_glTexCoord2fColor4ubVertex3fvSUN typedef void (APIENTRYP GLEEPFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC) (const GLfloat * tc, const GLubyte * c, const GLfloat * v); GLEE_EXTERN GLEEPFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC GLeeFuncPtr_glTexCoord2fColor4ubVertex3fvSUN; #define glTexCoord2fColor4ubVertex3fvSUN GLeeFuncPtr_glTexCoord2fColor4ubVertex3fvSUN #endif #ifndef GLEE_H_DEFINED_glTexCoord2fColor3fVertex3fSUN #define GLEE_H_DEFINED_glTexCoord2fColor3fVertex3fSUN typedef void (APIENTRYP GLEEPFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); GLEE_EXTERN GLEEPFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC GLeeFuncPtr_glTexCoord2fColor3fVertex3fSUN; #define glTexCoord2fColor3fVertex3fSUN GLeeFuncPtr_glTexCoord2fColor3fVertex3fSUN #endif #ifndef GLEE_H_DEFINED_glTexCoord2fColor3fVertex3fvSUN #define GLEE_H_DEFINED_glTexCoord2fColor3fVertex3fvSUN typedef void (APIENTRYP GLEEPFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC) (const GLfloat * tc, const GLfloat * c, const GLfloat * v); GLEE_EXTERN GLEEPFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC GLeeFuncPtr_glTexCoord2fColor3fVertex3fvSUN; #define glTexCoord2fColor3fVertex3fvSUN GLeeFuncPtr_glTexCoord2fColor3fVertex3fvSUN #endif #ifndef GLEE_H_DEFINED_glTexCoord2fNormal3fVertex3fSUN #define GLEE_H_DEFINED_glTexCoord2fNormal3fVertex3fSUN typedef void (APIENTRYP GLEEPFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); GLEE_EXTERN GLEEPFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC GLeeFuncPtr_glTexCoord2fNormal3fVertex3fSUN; #define glTexCoord2fNormal3fVertex3fSUN GLeeFuncPtr_glTexCoord2fNormal3fVertex3fSUN #endif #ifndef GLEE_H_DEFINED_glTexCoord2fNormal3fVertex3fvSUN #define GLEE_H_DEFINED_glTexCoord2fNormal3fVertex3fvSUN typedef void (APIENTRYP GLEEPFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat * tc, const GLfloat * n, const GLfloat * v); GLEE_EXTERN GLEEPFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC GLeeFuncPtr_glTexCoord2fNormal3fVertex3fvSUN; #define glTexCoord2fNormal3fVertex3fvSUN GLeeFuncPtr_glTexCoord2fNormal3fVertex3fvSUN #endif #ifndef GLEE_H_DEFINED_glTexCoord2fColor4fNormal3fVertex3fSUN #define GLEE_H_DEFINED_glTexCoord2fColor4fNormal3fVertex3fSUN typedef void (APIENTRYP GLEEPFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); GLEE_EXTERN GLEEPFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC GLeeFuncPtr_glTexCoord2fColor4fNormal3fVertex3fSUN; #define glTexCoord2fColor4fNormal3fVertex3fSUN GLeeFuncPtr_glTexCoord2fColor4fNormal3fVertex3fSUN #endif #ifndef GLEE_H_DEFINED_glTexCoord2fColor4fNormal3fVertex3fvSUN #define GLEE_H_DEFINED_glTexCoord2fColor4fNormal3fVertex3fvSUN typedef void (APIENTRYP GLEEPFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat * tc, const GLfloat * c, const GLfloat * n, const GLfloat * v); GLEE_EXTERN GLEEPFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC GLeeFuncPtr_glTexCoord2fColor4fNormal3fVertex3fvSUN; #define glTexCoord2fColor4fNormal3fVertex3fvSUN GLeeFuncPtr_glTexCoord2fColor4fNormal3fVertex3fvSUN #endif #ifndef GLEE_H_DEFINED_glTexCoord4fColor4fNormal3fVertex4fSUN #define GLEE_H_DEFINED_glTexCoord4fColor4fNormal3fVertex4fSUN typedef void (APIENTRYP GLEEPFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w); GLEE_EXTERN GLEEPFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC GLeeFuncPtr_glTexCoord4fColor4fNormal3fVertex4fSUN; #define glTexCoord4fColor4fNormal3fVertex4fSUN GLeeFuncPtr_glTexCoord4fColor4fNormal3fVertex4fSUN #endif #ifndef GLEE_H_DEFINED_glTexCoord4fColor4fNormal3fVertex4fvSUN #define GLEE_H_DEFINED_glTexCoord4fColor4fNormal3fVertex4fvSUN typedef void (APIENTRYP GLEEPFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC) (const GLfloat * tc, const GLfloat * c, const GLfloat * n, const GLfloat * v); GLEE_EXTERN GLEEPFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC GLeeFuncPtr_glTexCoord4fColor4fNormal3fVertex4fvSUN; #define glTexCoord4fColor4fNormal3fVertex4fvSUN GLeeFuncPtr_glTexCoord4fColor4fNormal3fVertex4fvSUN #endif #ifndef GLEE_H_DEFINED_glReplacementCodeuiVertex3fSUN #define GLEE_H_DEFINED_glReplacementCodeuiVertex3fSUN typedef void (APIENTRYP GLEEPFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC) (GLuint rc, GLfloat x, GLfloat y, GLfloat z); GLEE_EXTERN GLEEPFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC GLeeFuncPtr_glReplacementCodeuiVertex3fSUN; #define glReplacementCodeuiVertex3fSUN GLeeFuncPtr_glReplacementCodeuiVertex3fSUN #endif #ifndef GLEE_H_DEFINED_glReplacementCodeuiVertex3fvSUN #define GLEE_H_DEFINED_glReplacementCodeuiVertex3fvSUN typedef void (APIENTRYP GLEEPFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC) (const GLuint * rc, const GLfloat * v); GLEE_EXTERN GLEEPFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC GLeeFuncPtr_glReplacementCodeuiVertex3fvSUN; #define glReplacementCodeuiVertex3fvSUN GLeeFuncPtr_glReplacementCodeuiVertex3fvSUN #endif #ifndef GLEE_H_DEFINED_glReplacementCodeuiColor4ubVertex3fSUN #define GLEE_H_DEFINED_glReplacementCodeuiColor4ubVertex3fSUN typedef void (APIENTRYP GLEEPFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC) (GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); GLEE_EXTERN GLEEPFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC GLeeFuncPtr_glReplacementCodeuiColor4ubVertex3fSUN; #define glReplacementCodeuiColor4ubVertex3fSUN GLeeFuncPtr_glReplacementCodeuiColor4ubVertex3fSUN #endif #ifndef GLEE_H_DEFINED_glReplacementCodeuiColor4ubVertex3fvSUN #define GLEE_H_DEFINED_glReplacementCodeuiColor4ubVertex3fvSUN typedef void (APIENTRYP GLEEPFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC) (const GLuint * rc, const GLubyte * c, const GLfloat * v); GLEE_EXTERN GLEEPFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC GLeeFuncPtr_glReplacementCodeuiColor4ubVertex3fvSUN; #define glReplacementCodeuiColor4ubVertex3fvSUN GLeeFuncPtr_glReplacementCodeuiColor4ubVertex3fvSUN #endif #ifndef GLEE_H_DEFINED_glReplacementCodeuiColor3fVertex3fSUN #define GLEE_H_DEFINED_glReplacementCodeuiColor3fVertex3fSUN typedef void (APIENTRYP GLEEPFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC) (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); GLEE_EXTERN GLEEPFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC GLeeFuncPtr_glReplacementCodeuiColor3fVertex3fSUN; #define glReplacementCodeuiColor3fVertex3fSUN GLeeFuncPtr_glReplacementCodeuiColor3fVertex3fSUN #endif #ifndef GLEE_H_DEFINED_glReplacementCodeuiColor3fVertex3fvSUN #define GLEE_H_DEFINED_glReplacementCodeuiColor3fVertex3fvSUN typedef void (APIENTRYP GLEEPFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC) (const GLuint * rc, const GLfloat * c, const GLfloat * v); GLEE_EXTERN GLEEPFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC GLeeFuncPtr_glReplacementCodeuiColor3fVertex3fvSUN; #define glReplacementCodeuiColor3fVertex3fvSUN GLeeFuncPtr_glReplacementCodeuiColor3fVertex3fvSUN #endif #ifndef GLEE_H_DEFINED_glReplacementCodeuiNormal3fVertex3fSUN #define GLEE_H_DEFINED_glReplacementCodeuiNormal3fVertex3fSUN typedef void (APIENTRYP GLEEPFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); GLEE_EXTERN GLEEPFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC GLeeFuncPtr_glReplacementCodeuiNormal3fVertex3fSUN; #define glReplacementCodeuiNormal3fVertex3fSUN GLeeFuncPtr_glReplacementCodeuiNormal3fVertex3fSUN #endif #ifndef GLEE_H_DEFINED_glReplacementCodeuiNormal3fVertex3fvSUN #define GLEE_H_DEFINED_glReplacementCodeuiNormal3fVertex3fvSUN typedef void (APIENTRYP GLEEPFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC) (const GLuint * rc, const GLfloat * n, const GLfloat * v); GLEE_EXTERN GLEEPFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC GLeeFuncPtr_glReplacementCodeuiNormal3fVertex3fvSUN; #define glReplacementCodeuiNormal3fVertex3fvSUN GLeeFuncPtr_glReplacementCodeuiNormal3fVertex3fvSUN #endif #ifndef GLEE_H_DEFINED_glReplacementCodeuiColor4fNormal3fVertex3fSUN #define GLEE_H_DEFINED_glReplacementCodeuiColor4fNormal3fVertex3fSUN typedef void (APIENTRYP GLEEPFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); GLEE_EXTERN GLEEPFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC GLeeFuncPtr_glReplacementCodeuiColor4fNormal3fVertex3fSUN; #define glReplacementCodeuiColor4fNormal3fVertex3fSUN GLeeFuncPtr_glReplacementCodeuiColor4fNormal3fVertex3fSUN #endif #ifndef GLEE_H_DEFINED_glReplacementCodeuiColor4fNormal3fVertex3fvSUN #define GLEE_H_DEFINED_glReplacementCodeuiColor4fNormal3fVertex3fvSUN typedef void (APIENTRYP GLEEPFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint * rc, const GLfloat * c, const GLfloat * n, const GLfloat * v); GLEE_EXTERN GLEEPFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC GLeeFuncPtr_glReplacementCodeuiColor4fNormal3fVertex3fvSUN; #define glReplacementCodeuiColor4fNormal3fVertex3fvSUN GLeeFuncPtr_glReplacementCodeuiColor4fNormal3fVertex3fvSUN #endif #ifndef GLEE_H_DEFINED_glReplacementCodeuiTexCoord2fVertex3fSUN #define GLEE_H_DEFINED_glReplacementCodeuiTexCoord2fVertex3fSUN typedef void (APIENTRYP GLEEPFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); GLEE_EXTERN GLEEPFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC GLeeFuncPtr_glReplacementCodeuiTexCoord2fVertex3fSUN; #define glReplacementCodeuiTexCoord2fVertex3fSUN GLeeFuncPtr_glReplacementCodeuiTexCoord2fVertex3fSUN #endif #ifndef GLEE_H_DEFINED_glReplacementCodeuiTexCoord2fVertex3fvSUN #define GLEE_H_DEFINED_glReplacementCodeuiTexCoord2fVertex3fvSUN typedef void (APIENTRYP GLEEPFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC) (const GLuint * rc, const GLfloat * tc, const GLfloat * v); GLEE_EXTERN GLEEPFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC GLeeFuncPtr_glReplacementCodeuiTexCoord2fVertex3fvSUN; #define glReplacementCodeuiTexCoord2fVertex3fvSUN GLeeFuncPtr_glReplacementCodeuiTexCoord2fVertex3fvSUN #endif #ifndef GLEE_H_DEFINED_glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN #define GLEE_H_DEFINED_glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN typedef void (APIENTRYP GLEEPFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); GLEE_EXTERN GLEEPFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC GLeeFuncPtr_glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN; #define glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN GLeeFuncPtr_glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN #endif #ifndef GLEE_H_DEFINED_glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN #define GLEE_H_DEFINED_glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN typedef void (APIENTRYP GLEEPFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLuint * rc, const GLfloat * tc, const GLfloat * n, const GLfloat * v); GLEE_EXTERN GLEEPFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC GLeeFuncPtr_glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN; #define glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN GLeeFuncPtr_glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN #endif #ifndef GLEE_H_DEFINED_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN #define GLEE_H_DEFINED_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN typedef void (APIENTRYP GLEEPFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); GLEE_EXTERN GLEEPFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC GLeeFuncPtr_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN; #define glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN GLeeFuncPtr_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN #endif #ifndef GLEE_H_DEFINED_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN #define GLEE_H_DEFINED_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN typedef void (APIENTRYP GLEEPFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint * rc, const GLfloat * tc, const GLfloat * c, const GLfloat * n, const GLfloat * v); GLEE_EXTERN GLEEPFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC GLeeFuncPtr_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN; #define glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN GLeeFuncPtr_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN #endif #endif /* GL_EXT_blend_func_separate */ #ifndef GL_EXT_blend_func_separate #define GL_EXT_blend_func_separate 1 #define __GLEE_GL_EXT_blend_func_separate 1 /* Constants */ #define GL_BLEND_DST_RGB_EXT 0x80C8 #define GL_BLEND_SRC_RGB_EXT 0x80C9 #define GL_BLEND_DST_ALPHA_EXT 0x80CA #define GL_BLEND_SRC_ALPHA_EXT 0x80CB #ifndef GLEE_H_DEFINED_glBlendFuncSeparateEXT #define GLEE_H_DEFINED_glBlendFuncSeparateEXT typedef void (APIENTRYP GLEEPFNGLBLENDFUNCSEPARATEEXTPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); GLEE_EXTERN GLEEPFNGLBLENDFUNCSEPARATEEXTPROC GLeeFuncPtr_glBlendFuncSeparateEXT; #define glBlendFuncSeparateEXT GLeeFuncPtr_glBlendFuncSeparateEXT #endif #endif /* GL_INGR_color_clamp */ #ifndef GL_INGR_color_clamp #define GL_INGR_color_clamp 1 #define __GLEE_GL_INGR_color_clamp 1 /* Constants */ #define GL_RED_MIN_CLAMP_INGR 0x8560 #define GL_GREEN_MIN_CLAMP_INGR 0x8561 #define GL_BLUE_MIN_CLAMP_INGR 0x8562 #define GL_ALPHA_MIN_CLAMP_INGR 0x8563 #define GL_RED_MAX_CLAMP_INGR 0x8564 #define GL_GREEN_MAX_CLAMP_INGR 0x8565 #define GL_BLUE_MAX_CLAMP_INGR 0x8566 #define GL_ALPHA_MAX_CLAMP_INGR 0x8567 #endif /* GL_INGR_interlace_read */ #ifndef GL_INGR_interlace_read #define GL_INGR_interlace_read 1 #define __GLEE_GL_INGR_interlace_read 1 /* Constants */ #define GL_INTERLACE_READ_INGR 0x8568 #endif /* GL_EXT_stencil_wrap */ #ifndef GL_EXT_stencil_wrap #define GL_EXT_stencil_wrap 1 #define __GLEE_GL_EXT_stencil_wrap 1 /* Constants */ #define GL_INCR_WRAP_EXT 0x8507 #define GL_DECR_WRAP_EXT 0x8508 #endif /* GL_EXT_422_pixels */ #ifndef GL_EXT_422_pixels #define GL_EXT_422_pixels 1 #define __GLEE_GL_EXT_422_pixels 1 /* Constants */ #define GL_422_EXT 0x80CC #define GL_422_REV_EXT 0x80CD #define GL_422_AVERAGE_EXT 0x80CE #define GL_422_REV_AVERAGE_EXT 0x80CF #endif /* GL_NV_texgen_reflection */ #ifndef GL_NV_texgen_reflection #define GL_NV_texgen_reflection 1 #define __GLEE_GL_NV_texgen_reflection 1 /* Constants */ #define GL_NORMAL_MAP_NV 0x8511 #define GL_REFLECTION_MAP_NV 0x8512 #endif /* GL_EXT_texture_cube_map */ #ifndef GL_EXT_texture_cube_map #define GL_EXT_texture_cube_map 1 #define __GLEE_GL_EXT_texture_cube_map 1 /* Constants */ #define GL_NORMAL_MAP_EXT 0x8511 #define GL_REFLECTION_MAP_EXT 0x8512 #define GL_TEXTURE_CUBE_MAP_EXT 0x8513 #define GL_TEXTURE_BINDING_CUBE_MAP_EXT 0x8514 #define GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT 0x8515 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT 0x8516 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT 0x8517 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT 0x8518 #define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT 0x8519 #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT 0x851A #define GL_PROXY_TEXTURE_CUBE_MAP_EXT 0x851B #define GL_MAX_CUBE_MAP_TEXTURE_SIZE_EXT 0x851C #endif /* GL_SUN_convolution_border_modes */ #ifndef GL_SUN_convolution_border_modes #define GL_SUN_convolution_border_modes 1 #define __GLEE_GL_SUN_convolution_border_modes 1 /* Constants */ #define GL_WRAP_BORDER_SUN 0x81D4 #endif /* GL_EXT_texture_env_add */ #ifndef GL_EXT_texture_env_add #define GL_EXT_texture_env_add 1 #define __GLEE_GL_EXT_texture_env_add 1 /* Constants */ #endif /* GL_EXT_texture_lod_bias */ #ifndef GL_EXT_texture_lod_bias #define GL_EXT_texture_lod_bias 1 #define __GLEE_GL_EXT_texture_lod_bias 1 /* Constants */ #define GL_MAX_TEXTURE_LOD_BIAS_EXT 0x84FD #define GL_TEXTURE_FILTER_CONTROL_EXT 0x8500 #define GL_TEXTURE_LOD_BIAS_EXT 0x8501 #endif /* GL_EXT_texture_filter_anisotropic */ #ifndef GL_EXT_texture_filter_anisotropic #define GL_EXT_texture_filter_anisotropic 1 #define __GLEE_GL_EXT_texture_filter_anisotropic 1 /* Constants */ #define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE #define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF #endif /* GL_EXT_vertex_weighting */ #ifndef GL_EXT_vertex_weighting #define GL_EXT_vertex_weighting 1 #define __GLEE_GL_EXT_vertex_weighting 1 /* Constants */ #define GL_MODELVIEW0_STACK_DEPTH_EXT GL_MODELVIEW_STACK_DEPTH #define GL_MODELVIEW1_STACK_DEPTH_EXT 0x8502 #define GL_MODELVIEW0_MATRIX_EXT GL_MODELVIEW_MATRIX #define GL_MODELVIEW1_MATRIX_EXT 0x8506 #define GL_VERTEX_WEIGHTING_EXT 0x8509 #define GL_MODELVIEW0_EXT GL_MODELVIEW #define GL_MODELVIEW1_EXT 0x850A #define GL_CURRENT_VERTEX_WEIGHT_EXT 0x850B #define GL_VERTEX_WEIGHT_ARRAY_EXT 0x850C #define GL_VERTEX_WEIGHT_ARRAY_SIZE_EXT 0x850D #define GL_VERTEX_WEIGHT_ARRAY_TYPE_EXT 0x850E #define GL_VERTEX_WEIGHT_ARRAY_STRIDE_EXT 0x850F #define GL_VERTEX_WEIGHT_ARRAY_POINTER_EXT 0x8510 #ifndef GLEE_H_DEFINED_glVertexWeightfEXT #define GLEE_H_DEFINED_glVertexWeightfEXT typedef void (APIENTRYP GLEEPFNGLVERTEXWEIGHTFEXTPROC) (GLfloat weight); GLEE_EXTERN GLEEPFNGLVERTEXWEIGHTFEXTPROC GLeeFuncPtr_glVertexWeightfEXT; #define glVertexWeightfEXT GLeeFuncPtr_glVertexWeightfEXT #endif #ifndef GLEE_H_DEFINED_glVertexWeightfvEXT #define GLEE_H_DEFINED_glVertexWeightfvEXT typedef void (APIENTRYP GLEEPFNGLVERTEXWEIGHTFVEXTPROC) (const GLfloat * weight); GLEE_EXTERN GLEEPFNGLVERTEXWEIGHTFVEXTPROC GLeeFuncPtr_glVertexWeightfvEXT; #define glVertexWeightfvEXT GLeeFuncPtr_glVertexWeightfvEXT #endif #ifndef GLEE_H_DEFINED_glVertexWeightPointerEXT #define GLEE_H_DEFINED_glVertexWeightPointerEXT typedef void (APIENTRYP GLEEPFNGLVERTEXWEIGHTPOINTEREXTPROC) (GLsizei size, GLenum type, GLsizei stride, const GLvoid * pointer); GLEE_EXTERN GLEEPFNGLVERTEXWEIGHTPOINTEREXTPROC GLeeFuncPtr_glVertexWeightPointerEXT; #define glVertexWeightPointerEXT GLeeFuncPtr_glVertexWeightPointerEXT #endif #endif /* GL_NV_light_max_exponent */ #ifndef GL_NV_light_max_exponent #define GL_NV_light_max_exponent 1 #define __GLEE_GL_NV_light_max_exponent 1 /* Constants */ #define GL_MAX_SHININESS_NV 0x8504 #define GL_MAX_SPOT_EXPONENT_NV 0x8505 #endif /* GL_NV_vertex_array_range */ #ifndef GL_NV_vertex_array_range #define GL_NV_vertex_array_range 1 #define __GLEE_GL_NV_vertex_array_range 1 /* Constants */ #define GL_VERTEX_ARRAY_RANGE_NV 0x851D #define GL_VERTEX_ARRAY_RANGE_LENGTH_NV 0x851E #define GL_VERTEX_ARRAY_RANGE_VALID_NV 0x851F #define GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV 0x8520 #define GL_VERTEX_ARRAY_RANGE_POINTER_NV 0x8521 #ifndef GLEE_H_DEFINED_glFlushVertexArrayRangeNV #define GLEE_H_DEFINED_glFlushVertexArrayRangeNV typedef void (APIENTRYP GLEEPFNGLFLUSHVERTEXARRAYRANGENVPROC) (); GLEE_EXTERN GLEEPFNGLFLUSHVERTEXARRAYRANGENVPROC GLeeFuncPtr_glFlushVertexArrayRangeNV; #define glFlushVertexArrayRangeNV GLeeFuncPtr_glFlushVertexArrayRangeNV #endif #ifndef GLEE_H_DEFINED_glVertexArrayRangeNV #define GLEE_H_DEFINED_glVertexArrayRangeNV typedef void (APIENTRYP GLEEPFNGLVERTEXARRAYRANGENVPROC) (GLsizei length, const GLvoid * pointer); GLEE_EXTERN GLEEPFNGLVERTEXARRAYRANGENVPROC GLeeFuncPtr_glVertexArrayRangeNV; #define glVertexArrayRangeNV GLeeFuncPtr_glVertexArrayRangeNV #endif #endif /* GL_NV_register_combiners */ #ifndef GL_NV_register_combiners #define GL_NV_register_combiners 1 #define __GLEE_GL_NV_register_combiners 1 /* Constants */ #define GL_REGISTER_COMBINERS_NV 0x8522 #define GL_VARIABLE_A_NV 0x8523 #define GL_VARIABLE_B_NV 0x8524 #define GL_VARIABLE_C_NV 0x8525 #define GL_VARIABLE_D_NV 0x8526 #define GL_VARIABLE_E_NV 0x8527 #define GL_VARIABLE_F_NV 0x8528 #define GL_VARIABLE_G_NV 0x8529 #define GL_CONSTANT_COLOR0_NV 0x852A #define GL_CONSTANT_COLOR1_NV 0x852B #define GL_PRIMARY_COLOR_NV 0x852C #define GL_SECONDARY_COLOR_NV 0x852D #define GL_SPARE0_NV 0x852E #define GL_SPARE1_NV 0x852F #define GL_DISCARD_NV 0x8530 #define GL_E_TIMES_F_NV 0x8531 #define GL_SPARE0_PLUS_SECONDARY_COLOR_NV 0x8532 #define GL_UNSIGNED_IDENTITY_NV 0x8536 #define GL_UNSIGNED_INVERT_NV 0x8537 #define GL_EXPAND_NORMAL_NV 0x8538 #define GL_EXPAND_NEGATE_NV 0x8539 #define GL_HALF_BIAS_NORMAL_NV 0x853A #define GL_HALF_BIAS_NEGATE_NV 0x853B #define GL_SIGNED_IDENTITY_NV 0x853C #define GL_SIGNED_NEGATE_NV 0x853D #define GL_SCALE_BY_TWO_NV 0x853E #define GL_SCALE_BY_FOUR_NV 0x853F #define GL_SCALE_BY_ONE_HALF_NV 0x8540 #define GL_BIAS_BY_NEGATIVE_ONE_HALF_NV 0x8541 #define GL_COMBINER_INPUT_NV 0x8542 #define GL_COMBINER_MAPPING_NV 0x8543 #define GL_COMBINER_COMPONENT_USAGE_NV 0x8544 #define GL_COMBINER_AB_DOT_PRODUCT_NV 0x8545 #define GL_COMBINER_CD_DOT_PRODUCT_NV 0x8546 #define GL_COMBINER_MUX_SUM_NV 0x8547 #define GL_COMBINER_SCALE_NV 0x8548 #define GL_COMBINER_BIAS_NV 0x8549 #define GL_COMBINER_AB_OUTPUT_NV 0x854A #define GL_COMBINER_CD_OUTPUT_NV 0x854B #define GL_COMBINER_SUM_OUTPUT_NV 0x854C #define GL_MAX_GENERAL_COMBINERS_NV 0x854D #define GL_NUM_GENERAL_COMBINERS_NV 0x854E #define GL_COLOR_SUM_CLAMP_NV 0x854F #define GL_COMBINER0_NV 0x8550 #define GL_COMBINER1_NV 0x8551 #define GL_COMBINER2_NV 0x8552 #define GL_COMBINER3_NV 0x8553 #define GL_COMBINER4_NV 0x8554 #define GL_COMBINER5_NV 0x8555 #define GL_COMBINER6_NV 0x8556 #define GL_COMBINER7_NV 0x8557 #ifndef GLEE_H_DEFINED_glCombinerParameterfvNV #define GLEE_H_DEFINED_glCombinerParameterfvNV typedef void (APIENTRYP GLEEPFNGLCOMBINERPARAMETERFVNVPROC) (GLenum pname, const GLfloat * params); GLEE_EXTERN GLEEPFNGLCOMBINERPARAMETERFVNVPROC GLeeFuncPtr_glCombinerParameterfvNV; #define glCombinerParameterfvNV GLeeFuncPtr_glCombinerParameterfvNV #endif #ifndef GLEE_H_DEFINED_glCombinerParameterfNV #define GLEE_H_DEFINED_glCombinerParameterfNV typedef void (APIENTRYP GLEEPFNGLCOMBINERPARAMETERFNVPROC) (GLenum pname, GLfloat param); GLEE_EXTERN GLEEPFNGLCOMBINERPARAMETERFNVPROC GLeeFuncPtr_glCombinerParameterfNV; #define glCombinerParameterfNV GLeeFuncPtr_glCombinerParameterfNV #endif #ifndef GLEE_H_DEFINED_glCombinerParameterivNV #define GLEE_H_DEFINED_glCombinerParameterivNV typedef void (APIENTRYP GLEEPFNGLCOMBINERPARAMETERIVNVPROC) (GLenum pname, const GLint * params); GLEE_EXTERN GLEEPFNGLCOMBINERPARAMETERIVNVPROC GLeeFuncPtr_glCombinerParameterivNV; #define glCombinerParameterivNV GLeeFuncPtr_glCombinerParameterivNV #endif #ifndef GLEE_H_DEFINED_glCombinerParameteriNV #define GLEE_H_DEFINED_glCombinerParameteriNV typedef void (APIENTRYP GLEEPFNGLCOMBINERPARAMETERINVPROC) (GLenum pname, GLint param); GLEE_EXTERN GLEEPFNGLCOMBINERPARAMETERINVPROC GLeeFuncPtr_glCombinerParameteriNV; #define glCombinerParameteriNV GLeeFuncPtr_glCombinerParameteriNV #endif #ifndef GLEE_H_DEFINED_glCombinerInputNV #define GLEE_H_DEFINED_glCombinerInputNV typedef void (APIENTRYP GLEEPFNGLCOMBINERINPUTNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); GLEE_EXTERN GLEEPFNGLCOMBINERINPUTNVPROC GLeeFuncPtr_glCombinerInputNV; #define glCombinerInputNV GLeeFuncPtr_glCombinerInputNV #endif #ifndef GLEE_H_DEFINED_glCombinerOutputNV #define GLEE_H_DEFINED_glCombinerOutputNV typedef void (APIENTRYP GLEEPFNGLCOMBINEROUTPUTNVPROC) (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum); GLEE_EXTERN GLEEPFNGLCOMBINEROUTPUTNVPROC GLeeFuncPtr_glCombinerOutputNV; #define glCombinerOutputNV GLeeFuncPtr_glCombinerOutputNV #endif #ifndef GLEE_H_DEFINED_glFinalCombinerInputNV #define GLEE_H_DEFINED_glFinalCombinerInputNV typedef void (APIENTRYP GLEEPFNGLFINALCOMBINERINPUTNVPROC) (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); GLEE_EXTERN GLEEPFNGLFINALCOMBINERINPUTNVPROC GLeeFuncPtr_glFinalCombinerInputNV; #define glFinalCombinerInputNV GLeeFuncPtr_glFinalCombinerInputNV #endif #ifndef GLEE_H_DEFINED_glGetCombinerInputParameterfvNV #define GLEE_H_DEFINED_glGetCombinerInputParameterfvNV typedef void (APIENTRYP GLEEPFNGLGETCOMBINERINPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETCOMBINERINPUTPARAMETERFVNVPROC GLeeFuncPtr_glGetCombinerInputParameterfvNV; #define glGetCombinerInputParameterfvNV GLeeFuncPtr_glGetCombinerInputParameterfvNV #endif #ifndef GLEE_H_DEFINED_glGetCombinerInputParameterivNV #define GLEE_H_DEFINED_glGetCombinerInputParameterivNV typedef void (APIENTRYP GLEEPFNGLGETCOMBINERINPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETCOMBINERINPUTPARAMETERIVNVPROC GLeeFuncPtr_glGetCombinerInputParameterivNV; #define glGetCombinerInputParameterivNV GLeeFuncPtr_glGetCombinerInputParameterivNV #endif #ifndef GLEE_H_DEFINED_glGetCombinerOutputParameterfvNV #define GLEE_H_DEFINED_glGetCombinerOutputParameterfvNV typedef void (APIENTRYP GLEEPFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC GLeeFuncPtr_glGetCombinerOutputParameterfvNV; #define glGetCombinerOutputParameterfvNV GLeeFuncPtr_glGetCombinerOutputParameterfvNV #endif #ifndef GLEE_H_DEFINED_glGetCombinerOutputParameterivNV #define GLEE_H_DEFINED_glGetCombinerOutputParameterivNV typedef void (APIENTRYP GLEEPFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC GLeeFuncPtr_glGetCombinerOutputParameterivNV; #define glGetCombinerOutputParameterivNV GLeeFuncPtr_glGetCombinerOutputParameterivNV #endif #ifndef GLEE_H_DEFINED_glGetFinalCombinerInputParameterfvNV #define GLEE_H_DEFINED_glGetFinalCombinerInputParameterfvNV typedef void (APIENTRYP GLEEPFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC) (GLenum variable, GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC GLeeFuncPtr_glGetFinalCombinerInputParameterfvNV; #define glGetFinalCombinerInputParameterfvNV GLeeFuncPtr_glGetFinalCombinerInputParameterfvNV #endif #ifndef GLEE_H_DEFINED_glGetFinalCombinerInputParameterivNV #define GLEE_H_DEFINED_glGetFinalCombinerInputParameterivNV typedef void (APIENTRYP GLEEPFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC) (GLenum variable, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC GLeeFuncPtr_glGetFinalCombinerInputParameterivNV; #define glGetFinalCombinerInputParameterivNV GLeeFuncPtr_glGetFinalCombinerInputParameterivNV #endif #endif /* GL_NV_fog_distance */ #ifndef GL_NV_fog_distance #define GL_NV_fog_distance 1 #define __GLEE_GL_NV_fog_distance 1 /* Constants */ #define GL_FOG_DISTANCE_MODE_NV 0x855A #define GL_EYE_RADIAL_NV 0x855B #define GL_EYE_PLANE_ABSOLUTE_NV 0x855C #endif /* GL_NV_texgen_emboss */ #ifndef GL_NV_texgen_emboss #define GL_NV_texgen_emboss 1 #define __GLEE_GL_NV_texgen_emboss 1 /* Constants */ #define GL_EMBOSS_LIGHT_NV 0x855D #define GL_EMBOSS_CONSTANT_NV 0x855E #define GL_EMBOSS_MAP_NV 0x855F #endif /* GL_NV_blend_square */ #ifndef GL_NV_blend_square #define GL_NV_blend_square 1 #define __GLEE_GL_NV_blend_square 1 /* Constants */ #endif /* GL_NV_texture_env_combine4 */ #ifndef GL_NV_texture_env_combine4 #define GL_NV_texture_env_combine4 1 #define __GLEE_GL_NV_texture_env_combine4 1 /* Constants */ #define GL_COMBINE4_NV 0x8503 #define GL_SOURCE3_RGB_NV 0x8583 #define GL_SOURCE3_ALPHA_NV 0x858B #define GL_OPERAND3_RGB_NV 0x8593 #define GL_OPERAND3_ALPHA_NV 0x859B #endif /* GL_MESA_resize_buffers */ #ifndef GL_MESA_resize_buffers #define GL_MESA_resize_buffers 1 #define __GLEE_GL_MESA_resize_buffers 1 /* Constants */ #ifndef GLEE_H_DEFINED_glResizeBuffersMESA #define GLEE_H_DEFINED_glResizeBuffersMESA typedef void (APIENTRYP GLEEPFNGLRESIZEBUFFERSMESAPROC) (); GLEE_EXTERN GLEEPFNGLRESIZEBUFFERSMESAPROC GLeeFuncPtr_glResizeBuffersMESA; #define glResizeBuffersMESA GLeeFuncPtr_glResizeBuffersMESA #endif #endif /* GL_MESA_window_pos */ #ifndef GL_MESA_window_pos #define GL_MESA_window_pos 1 #define __GLEE_GL_MESA_window_pos 1 /* Constants */ #ifndef GLEE_H_DEFINED_glWindowPos2dMESA #define GLEE_H_DEFINED_glWindowPos2dMESA typedef void (APIENTRYP GLEEPFNGLWINDOWPOS2DMESAPROC) (GLdouble x, GLdouble y); GLEE_EXTERN GLEEPFNGLWINDOWPOS2DMESAPROC GLeeFuncPtr_glWindowPos2dMESA; #define glWindowPos2dMESA GLeeFuncPtr_glWindowPos2dMESA #endif #ifndef GLEE_H_DEFINED_glWindowPos2dvMESA #define GLEE_H_DEFINED_glWindowPos2dvMESA typedef void (APIENTRYP GLEEPFNGLWINDOWPOS2DVMESAPROC) (const GLdouble * v); GLEE_EXTERN GLEEPFNGLWINDOWPOS2DVMESAPROC GLeeFuncPtr_glWindowPos2dvMESA; #define glWindowPos2dvMESA GLeeFuncPtr_glWindowPos2dvMESA #endif #ifndef GLEE_H_DEFINED_glWindowPos2fMESA #define GLEE_H_DEFINED_glWindowPos2fMESA typedef void (APIENTRYP GLEEPFNGLWINDOWPOS2FMESAPROC) (GLfloat x, GLfloat y); GLEE_EXTERN GLEEPFNGLWINDOWPOS2FMESAPROC GLeeFuncPtr_glWindowPos2fMESA; #define glWindowPos2fMESA GLeeFuncPtr_glWindowPos2fMESA #endif #ifndef GLEE_H_DEFINED_glWindowPos2fvMESA #define GLEE_H_DEFINED_glWindowPos2fvMESA typedef void (APIENTRYP GLEEPFNGLWINDOWPOS2FVMESAPROC) (const GLfloat * v); GLEE_EXTERN GLEEPFNGLWINDOWPOS2FVMESAPROC GLeeFuncPtr_glWindowPos2fvMESA; #define glWindowPos2fvMESA GLeeFuncPtr_glWindowPos2fvMESA #endif #ifndef GLEE_H_DEFINED_glWindowPos2iMESA #define GLEE_H_DEFINED_glWindowPos2iMESA typedef void (APIENTRYP GLEEPFNGLWINDOWPOS2IMESAPROC) (GLint x, GLint y); GLEE_EXTERN GLEEPFNGLWINDOWPOS2IMESAPROC GLeeFuncPtr_glWindowPos2iMESA; #define glWindowPos2iMESA GLeeFuncPtr_glWindowPos2iMESA #endif #ifndef GLEE_H_DEFINED_glWindowPos2ivMESA #define GLEE_H_DEFINED_glWindowPos2ivMESA typedef void (APIENTRYP GLEEPFNGLWINDOWPOS2IVMESAPROC) (const GLint * v); GLEE_EXTERN GLEEPFNGLWINDOWPOS2IVMESAPROC GLeeFuncPtr_glWindowPos2ivMESA; #define glWindowPos2ivMESA GLeeFuncPtr_glWindowPos2ivMESA #endif #ifndef GLEE_H_DEFINED_glWindowPos2sMESA #define GLEE_H_DEFINED_glWindowPos2sMESA typedef void (APIENTRYP GLEEPFNGLWINDOWPOS2SMESAPROC) (GLshort x, GLshort y); GLEE_EXTERN GLEEPFNGLWINDOWPOS2SMESAPROC GLeeFuncPtr_glWindowPos2sMESA; #define glWindowPos2sMESA GLeeFuncPtr_glWindowPos2sMESA #endif #ifndef GLEE_H_DEFINED_glWindowPos2svMESA #define GLEE_H_DEFINED_glWindowPos2svMESA typedef void (APIENTRYP GLEEPFNGLWINDOWPOS2SVMESAPROC) (const GLshort * v); GLEE_EXTERN GLEEPFNGLWINDOWPOS2SVMESAPROC GLeeFuncPtr_glWindowPos2svMESA; #define glWindowPos2svMESA GLeeFuncPtr_glWindowPos2svMESA #endif #ifndef GLEE_H_DEFINED_glWindowPos3dMESA #define GLEE_H_DEFINED_glWindowPos3dMESA typedef void (APIENTRYP GLEEPFNGLWINDOWPOS3DMESAPROC) (GLdouble x, GLdouble y, GLdouble z); GLEE_EXTERN GLEEPFNGLWINDOWPOS3DMESAPROC GLeeFuncPtr_glWindowPos3dMESA; #define glWindowPos3dMESA GLeeFuncPtr_glWindowPos3dMESA #endif #ifndef GLEE_H_DEFINED_glWindowPos3dvMESA #define GLEE_H_DEFINED_glWindowPos3dvMESA typedef void (APIENTRYP GLEEPFNGLWINDOWPOS3DVMESAPROC) (const GLdouble * v); GLEE_EXTERN GLEEPFNGLWINDOWPOS3DVMESAPROC GLeeFuncPtr_glWindowPos3dvMESA; #define glWindowPos3dvMESA GLeeFuncPtr_glWindowPos3dvMESA #endif #ifndef GLEE_H_DEFINED_glWindowPos3fMESA #define GLEE_H_DEFINED_glWindowPos3fMESA typedef void (APIENTRYP GLEEPFNGLWINDOWPOS3FMESAPROC) (GLfloat x, GLfloat y, GLfloat z); GLEE_EXTERN GLEEPFNGLWINDOWPOS3FMESAPROC GLeeFuncPtr_glWindowPos3fMESA; #define glWindowPos3fMESA GLeeFuncPtr_glWindowPos3fMESA #endif #ifndef GLEE_H_DEFINED_glWindowPos3fvMESA #define GLEE_H_DEFINED_glWindowPos3fvMESA typedef void (APIENTRYP GLEEPFNGLWINDOWPOS3FVMESAPROC) (const GLfloat * v); GLEE_EXTERN GLEEPFNGLWINDOWPOS3FVMESAPROC GLeeFuncPtr_glWindowPos3fvMESA; #define glWindowPos3fvMESA GLeeFuncPtr_glWindowPos3fvMESA #endif #ifndef GLEE_H_DEFINED_glWindowPos3iMESA #define GLEE_H_DEFINED_glWindowPos3iMESA typedef void (APIENTRYP GLEEPFNGLWINDOWPOS3IMESAPROC) (GLint x, GLint y, GLint z); GLEE_EXTERN GLEEPFNGLWINDOWPOS3IMESAPROC GLeeFuncPtr_glWindowPos3iMESA; #define glWindowPos3iMESA GLeeFuncPtr_glWindowPos3iMESA #endif #ifndef GLEE_H_DEFINED_glWindowPos3ivMESA #define GLEE_H_DEFINED_glWindowPos3ivMESA typedef void (APIENTRYP GLEEPFNGLWINDOWPOS3IVMESAPROC) (const GLint * v); GLEE_EXTERN GLEEPFNGLWINDOWPOS3IVMESAPROC GLeeFuncPtr_glWindowPos3ivMESA; #define glWindowPos3ivMESA GLeeFuncPtr_glWindowPos3ivMESA #endif #ifndef GLEE_H_DEFINED_glWindowPos3sMESA #define GLEE_H_DEFINED_glWindowPos3sMESA typedef void (APIENTRYP GLEEPFNGLWINDOWPOS3SMESAPROC) (GLshort x, GLshort y, GLshort z); GLEE_EXTERN GLEEPFNGLWINDOWPOS3SMESAPROC GLeeFuncPtr_glWindowPos3sMESA; #define glWindowPos3sMESA GLeeFuncPtr_glWindowPos3sMESA #endif #ifndef GLEE_H_DEFINED_glWindowPos3svMESA #define GLEE_H_DEFINED_glWindowPos3svMESA typedef void (APIENTRYP GLEEPFNGLWINDOWPOS3SVMESAPROC) (const GLshort * v); GLEE_EXTERN GLEEPFNGLWINDOWPOS3SVMESAPROC GLeeFuncPtr_glWindowPos3svMESA; #define glWindowPos3svMESA GLeeFuncPtr_glWindowPos3svMESA #endif #ifndef GLEE_H_DEFINED_glWindowPos4dMESA #define GLEE_H_DEFINED_glWindowPos4dMESA typedef void (APIENTRYP GLEEPFNGLWINDOWPOS4DMESAPROC) (GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLEE_EXTERN GLEEPFNGLWINDOWPOS4DMESAPROC GLeeFuncPtr_glWindowPos4dMESA; #define glWindowPos4dMESA GLeeFuncPtr_glWindowPos4dMESA #endif #ifndef GLEE_H_DEFINED_glWindowPos4dvMESA #define GLEE_H_DEFINED_glWindowPos4dvMESA typedef void (APIENTRYP GLEEPFNGLWINDOWPOS4DVMESAPROC) (const GLdouble * v); GLEE_EXTERN GLEEPFNGLWINDOWPOS4DVMESAPROC GLeeFuncPtr_glWindowPos4dvMESA; #define glWindowPos4dvMESA GLeeFuncPtr_glWindowPos4dvMESA #endif #ifndef GLEE_H_DEFINED_glWindowPos4fMESA #define GLEE_H_DEFINED_glWindowPos4fMESA typedef void (APIENTRYP GLEEPFNGLWINDOWPOS4FMESAPROC) (GLfloat x, GLfloat y, GLfloat z, GLfloat w); GLEE_EXTERN GLEEPFNGLWINDOWPOS4FMESAPROC GLeeFuncPtr_glWindowPos4fMESA; #define glWindowPos4fMESA GLeeFuncPtr_glWindowPos4fMESA #endif #ifndef GLEE_H_DEFINED_glWindowPos4fvMESA #define GLEE_H_DEFINED_glWindowPos4fvMESA typedef void (APIENTRYP GLEEPFNGLWINDOWPOS4FVMESAPROC) (const GLfloat * v); GLEE_EXTERN GLEEPFNGLWINDOWPOS4FVMESAPROC GLeeFuncPtr_glWindowPos4fvMESA; #define glWindowPos4fvMESA GLeeFuncPtr_glWindowPos4fvMESA #endif #ifndef GLEE_H_DEFINED_glWindowPos4iMESA #define GLEE_H_DEFINED_glWindowPos4iMESA typedef void (APIENTRYP GLEEPFNGLWINDOWPOS4IMESAPROC) (GLint x, GLint y, GLint z, GLint w); GLEE_EXTERN GLEEPFNGLWINDOWPOS4IMESAPROC GLeeFuncPtr_glWindowPos4iMESA; #define glWindowPos4iMESA GLeeFuncPtr_glWindowPos4iMESA #endif #ifndef GLEE_H_DEFINED_glWindowPos4ivMESA #define GLEE_H_DEFINED_glWindowPos4ivMESA typedef void (APIENTRYP GLEEPFNGLWINDOWPOS4IVMESAPROC) (const GLint * v); GLEE_EXTERN GLEEPFNGLWINDOWPOS4IVMESAPROC GLeeFuncPtr_glWindowPos4ivMESA; #define glWindowPos4ivMESA GLeeFuncPtr_glWindowPos4ivMESA #endif #ifndef GLEE_H_DEFINED_glWindowPos4sMESA #define GLEE_H_DEFINED_glWindowPos4sMESA typedef void (APIENTRYP GLEEPFNGLWINDOWPOS4SMESAPROC) (GLshort x, GLshort y, GLshort z, GLshort w); GLEE_EXTERN GLEEPFNGLWINDOWPOS4SMESAPROC GLeeFuncPtr_glWindowPos4sMESA; #define glWindowPos4sMESA GLeeFuncPtr_glWindowPos4sMESA #endif #ifndef GLEE_H_DEFINED_glWindowPos4svMESA #define GLEE_H_DEFINED_glWindowPos4svMESA typedef void (APIENTRYP GLEEPFNGLWINDOWPOS4SVMESAPROC) (const GLshort * v); GLEE_EXTERN GLEEPFNGLWINDOWPOS4SVMESAPROC GLeeFuncPtr_glWindowPos4svMESA; #define glWindowPos4svMESA GLeeFuncPtr_glWindowPos4svMESA #endif #endif /* GL_EXT_texture_compression_s3tc */ #ifndef GL_EXT_texture_compression_s3tc #define GL_EXT_texture_compression_s3tc 1 #define __GLEE_GL_EXT_texture_compression_s3tc 1 /* Constants */ #define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0 #define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1 #define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83F2 #define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3 #endif /* GL_IBM_cull_vertex */ #ifndef GL_IBM_cull_vertex #define GL_IBM_cull_vertex 1 #define __GLEE_GL_IBM_cull_vertex 1 /* Constants */ #define GL_CULL_VERTEX_IBM 103050 #endif /* GL_IBM_multimode_draw_arrays */ #ifndef GL_IBM_multimode_draw_arrays #define GL_IBM_multimode_draw_arrays 1 #define __GLEE_GL_IBM_multimode_draw_arrays 1 /* Constants */ #ifndef GLEE_H_DEFINED_glMultiModeDrawArraysIBM #define GLEE_H_DEFINED_glMultiModeDrawArraysIBM typedef void (APIENTRYP GLEEPFNGLMULTIMODEDRAWARRAYSIBMPROC) (const GLenum * mode, const GLint * first, const GLsizei * count, GLsizei primcount, GLint modestride); GLEE_EXTERN GLEEPFNGLMULTIMODEDRAWARRAYSIBMPROC GLeeFuncPtr_glMultiModeDrawArraysIBM; #define glMultiModeDrawArraysIBM GLeeFuncPtr_glMultiModeDrawArraysIBM #endif #ifndef GLEE_H_DEFINED_glMultiModeDrawElementsIBM #define GLEE_H_DEFINED_glMultiModeDrawElementsIBM typedef void (APIENTRYP GLEEPFNGLMULTIMODEDRAWELEMENTSIBMPROC) (const GLenum * mode, const GLsizei * count, GLenum type, const GLvoid* const * indices, GLsizei primcount, GLint modestride); GLEE_EXTERN GLEEPFNGLMULTIMODEDRAWELEMENTSIBMPROC GLeeFuncPtr_glMultiModeDrawElementsIBM; #define glMultiModeDrawElementsIBM GLeeFuncPtr_glMultiModeDrawElementsIBM #endif #endif /* GL_IBM_vertex_array_lists */ #ifndef GL_IBM_vertex_array_lists #define GL_IBM_vertex_array_lists 1 #define __GLEE_GL_IBM_vertex_array_lists 1 /* Constants */ #define GL_VERTEX_ARRAY_LIST_IBM 103070 #define GL_NORMAL_ARRAY_LIST_IBM 103071 #define GL_COLOR_ARRAY_LIST_IBM 103072 #define GL_INDEX_ARRAY_LIST_IBM 103073 #define GL_TEXTURE_COORD_ARRAY_LIST_IBM 103074 #define GL_EDGE_FLAG_ARRAY_LIST_IBM 103075 #define GL_FOG_COORDINATE_ARRAY_LIST_IBM 103076 #define GL_SECONDARY_COLOR_ARRAY_LIST_IBM 103077 #define GL_VERTEX_ARRAY_LIST_STRIDE_IBM 103080 #define GL_NORMAL_ARRAY_LIST_STRIDE_IBM 103081 #define GL_COLOR_ARRAY_LIST_STRIDE_IBM 103082 #define GL_INDEX_ARRAY_LIST_STRIDE_IBM 103083 #define GL_TEXTURE_COORD_ARRAY_LIST_STRIDE_IBM 103084 #define GL_EDGE_FLAG_ARRAY_LIST_STRIDE_IBM 103085 #define GL_FOG_COORDINATE_ARRAY_LIST_STRIDE_IBM 103086 #define GL_SECONDARY_COLOR_ARRAY_LIST_STRIDE_IBM 103087 #ifndef GLEE_H_DEFINED_glColorPointerListIBM #define GLEE_H_DEFINED_glColorPointerListIBM typedef void (APIENTRYP GLEEPFNGLCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* * pointer, GLint ptrstride); GLEE_EXTERN GLEEPFNGLCOLORPOINTERLISTIBMPROC GLeeFuncPtr_glColorPointerListIBM; #define glColorPointerListIBM GLeeFuncPtr_glColorPointerListIBM #endif #ifndef GLEE_H_DEFINED_glSecondaryColorPointerListIBM #define GLEE_H_DEFINED_glSecondaryColorPointerListIBM typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* * pointer, GLint ptrstride); GLEE_EXTERN GLEEPFNGLSECONDARYCOLORPOINTERLISTIBMPROC GLeeFuncPtr_glSecondaryColorPointerListIBM; #define glSecondaryColorPointerListIBM GLeeFuncPtr_glSecondaryColorPointerListIBM #endif #ifndef GLEE_H_DEFINED_glEdgeFlagPointerListIBM #define GLEE_H_DEFINED_glEdgeFlagPointerListIBM typedef void (APIENTRYP GLEEPFNGLEDGEFLAGPOINTERLISTIBMPROC) (GLint stride, const GLboolean* * pointer, GLint ptrstride); GLEE_EXTERN GLEEPFNGLEDGEFLAGPOINTERLISTIBMPROC GLeeFuncPtr_glEdgeFlagPointerListIBM; #define glEdgeFlagPointerListIBM GLeeFuncPtr_glEdgeFlagPointerListIBM #endif #ifndef GLEE_H_DEFINED_glFogCoordPointerListIBM #define GLEE_H_DEFINED_glFogCoordPointerListIBM typedef void (APIENTRYP GLEEPFNGLFOGCOORDPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid* * pointer, GLint ptrstride); GLEE_EXTERN GLEEPFNGLFOGCOORDPOINTERLISTIBMPROC GLeeFuncPtr_glFogCoordPointerListIBM; #define glFogCoordPointerListIBM GLeeFuncPtr_glFogCoordPointerListIBM #endif #ifndef GLEE_H_DEFINED_glIndexPointerListIBM #define GLEE_H_DEFINED_glIndexPointerListIBM typedef void (APIENTRYP GLEEPFNGLINDEXPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid* * pointer, GLint ptrstride); GLEE_EXTERN GLEEPFNGLINDEXPOINTERLISTIBMPROC GLeeFuncPtr_glIndexPointerListIBM; #define glIndexPointerListIBM GLeeFuncPtr_glIndexPointerListIBM #endif #ifndef GLEE_H_DEFINED_glNormalPointerListIBM #define GLEE_H_DEFINED_glNormalPointerListIBM typedef void (APIENTRYP GLEEPFNGLNORMALPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid* * pointer, GLint ptrstride); GLEE_EXTERN GLEEPFNGLNORMALPOINTERLISTIBMPROC GLeeFuncPtr_glNormalPointerListIBM; #define glNormalPointerListIBM GLeeFuncPtr_glNormalPointerListIBM #endif #ifndef GLEE_H_DEFINED_glTexCoordPointerListIBM #define GLEE_H_DEFINED_glTexCoordPointerListIBM typedef void (APIENTRYP GLEEPFNGLTEXCOORDPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* * pointer, GLint ptrstride); GLEE_EXTERN GLEEPFNGLTEXCOORDPOINTERLISTIBMPROC GLeeFuncPtr_glTexCoordPointerListIBM; #define glTexCoordPointerListIBM GLeeFuncPtr_glTexCoordPointerListIBM #endif #ifndef GLEE_H_DEFINED_glVertexPointerListIBM #define GLEE_H_DEFINED_glVertexPointerListIBM typedef void (APIENTRYP GLEEPFNGLVERTEXPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* * pointer, GLint ptrstride); GLEE_EXTERN GLEEPFNGLVERTEXPOINTERLISTIBMPROC GLeeFuncPtr_glVertexPointerListIBM; #define glVertexPointerListIBM GLeeFuncPtr_glVertexPointerListIBM #endif #endif /* GL_SGIX_subsample */ #ifndef GL_SGIX_subsample #define GL_SGIX_subsample 1 #define __GLEE_GL_SGIX_subsample 1 /* Constants */ #define GL_PACK_SUBSAMPLE_RATE_SGIX 0x85A0 #define GL_UNPACK_SUBSAMPLE_RATE_SGIX 0x85A1 #define GL_PIXEL_SUBSAMPLE_4444_SGIX 0x85A2 #define GL_PIXEL_SUBSAMPLE_2424_SGIX 0x85A3 #define GL_PIXEL_SUBSAMPLE_4242_SGIX 0x85A4 #endif /* GL_SGIX_ycrcb_subsample */ #ifndef GL_SGIX_ycrcb_subsample #define GL_SGIX_ycrcb_subsample 1 #define __GLEE_GL_SGIX_ycrcb_subsample 1 /* Constants */ #endif /* GL_SGIX_ycrcba */ #ifndef GL_SGIX_ycrcba #define GL_SGIX_ycrcba 1 #define __GLEE_GL_SGIX_ycrcba 1 /* Constants */ #define GL_YCRCB_SGIX 0x8318 #define GL_YCRCBA_SGIX 0x8319 #endif /* GL_SGI_depth_pass_instrument */ #ifndef GL_SGI_depth_pass_instrument #define GL_SGI_depth_pass_instrument 1 #define __GLEE_GL_SGI_depth_pass_instrument 1 /* Constants */ #define GL_DEPTH_PASS_INSTRUMENT_SGIX 0x8310 #define GL_DEPTH_PASS_INSTRUMENT_COUNTERS_SGIX 0x8311 #define GL_DEPTH_PASS_INSTRUMENT_MAX_SGIX 0x8312 #endif /* GL_3DFX_texture_compression_FXT1 */ #ifndef GL_3DFX_texture_compression_FXT1 #define GL_3DFX_texture_compression_FXT1 1 #define __GLEE_GL_3DFX_texture_compression_FXT1 1 /* Constants */ #define GL_COMPRESSED_RGB_FXT1_3DFX 0x86B0 #define GL_COMPRESSED_RGBA_FXT1_3DFX 0x86B1 #endif /* GL_3DFX_multisample */ #ifndef GL_3DFX_multisample #define GL_3DFX_multisample 1 #define __GLEE_GL_3DFX_multisample 1 /* Constants */ #define GL_MULTISAMPLE_3DFX 0x86B2 #define GL_SAMPLE_BUFFERS_3DFX 0x86B3 #define GL_SAMPLES_3DFX 0x86B4 #define GL_MULTISAMPLE_BIT_3DFX 0x20000000 #endif /* GL_3DFX_tbuffer */ #ifndef GL_3DFX_tbuffer #define GL_3DFX_tbuffer 1 #define __GLEE_GL_3DFX_tbuffer 1 /* Constants */ #ifndef GLEE_H_DEFINED_glTbufferMask3DFX #define GLEE_H_DEFINED_glTbufferMask3DFX typedef void (APIENTRYP GLEEPFNGLTBUFFERMASK3DFXPROC) (GLuint mask); GLEE_EXTERN GLEEPFNGLTBUFFERMASK3DFXPROC GLeeFuncPtr_glTbufferMask3DFX; #define glTbufferMask3DFX GLeeFuncPtr_glTbufferMask3DFX #endif #endif /* GL_EXT_multisample */ #ifndef GL_EXT_multisample #define GL_EXT_multisample 1 #define __GLEE_GL_EXT_multisample 1 /* Constants */ #define GL_MULTISAMPLE_EXT 0x809D #define GL_SAMPLE_ALPHA_TO_MASK_EXT 0x809E #define GL_SAMPLE_ALPHA_TO_ONE_EXT 0x809F #define GL_SAMPLE_MASK_EXT 0x80A0 #define GL_1PASS_EXT 0x80A1 #define GL_2PASS_0_EXT 0x80A2 #define GL_2PASS_1_EXT 0x80A3 #define GL_4PASS_0_EXT 0x80A4 #define GL_4PASS_1_EXT 0x80A5 #define GL_4PASS_2_EXT 0x80A6 #define GL_4PASS_3_EXT 0x80A7 #define GL_SAMPLE_BUFFERS_EXT 0x80A8 #define GL_SAMPLES_EXT 0x80A9 #define GL_SAMPLE_MASK_VALUE_EXT 0x80AA #define GL_SAMPLE_MASK_INVERT_EXT 0x80AB #define GL_SAMPLE_PATTERN_EXT 0x80AC #define GL_MULTISAMPLE_BIT_EXT 0x20000000 #ifndef GLEE_H_DEFINED_glSampleMaskEXT #define GLEE_H_DEFINED_glSampleMaskEXT typedef void (APIENTRYP GLEEPFNGLSAMPLEMASKEXTPROC) (GLclampf value, GLboolean invert); GLEE_EXTERN GLEEPFNGLSAMPLEMASKEXTPROC GLeeFuncPtr_glSampleMaskEXT; #define glSampleMaskEXT GLeeFuncPtr_glSampleMaskEXT #endif #ifndef GLEE_H_DEFINED_glSamplePatternEXT #define GLEE_H_DEFINED_glSamplePatternEXT typedef void (APIENTRYP GLEEPFNGLSAMPLEPATTERNEXTPROC) (GLenum pattern); GLEE_EXTERN GLEEPFNGLSAMPLEPATTERNEXTPROC GLeeFuncPtr_glSamplePatternEXT; #define glSamplePatternEXT GLeeFuncPtr_glSamplePatternEXT #endif #endif /* GL_SGIX_vertex_preclip */ #ifndef GL_SGIX_vertex_preclip #define GL_SGIX_vertex_preclip 1 #define __GLEE_GL_SGIX_vertex_preclip 1 /* Constants */ #define GL_VERTEX_PRECLIP_SGIX 0x83EE #define GL_VERTEX_PRECLIP_HINT_SGIX 0x83EF #endif /* GL_SGIX_convolution_accuracy */ #ifndef GL_SGIX_convolution_accuracy #define GL_SGIX_convolution_accuracy 1 #define __GLEE_GL_SGIX_convolution_accuracy 1 /* Constants */ #define GL_CONVOLUTION_HINT_SGIX 0x8316 #endif /* GL_SGIX_resample */ #ifndef GL_SGIX_resample #define GL_SGIX_resample 1 #define __GLEE_GL_SGIX_resample 1 /* Constants */ #define GL_PACK_RESAMPLE_SGIX 0x842C #define GL_UNPACK_RESAMPLE_SGIX 0x842D #define GL_RESAMPLE_REPLICATE_SGIX 0x842E #define GL_RESAMPLE_ZERO_FILL_SGIX 0x842F #define GL_RESAMPLE_DECIMATE_SGIX 0x8430 #endif /* GL_SGIS_point_line_texgen */ #ifndef GL_SGIS_point_line_texgen #define GL_SGIS_point_line_texgen 1 #define __GLEE_GL_SGIS_point_line_texgen 1 /* Constants */ #define GL_EYE_DISTANCE_TO_POINT_SGIS 0x81F0 #define GL_OBJECT_DISTANCE_TO_POINT_SGIS 0x81F1 #define GL_EYE_DISTANCE_TO_LINE_SGIS 0x81F2 #define GL_OBJECT_DISTANCE_TO_LINE_SGIS 0x81F3 #define GL_EYE_POINT_SGIS 0x81F4 #define GL_OBJECT_POINT_SGIS 0x81F5 #define GL_EYE_LINE_SGIS 0x81F6 #define GL_OBJECT_LINE_SGIS 0x81F7 #endif /* GL_SGIS_texture_color_mask */ #ifndef GL_SGIS_texture_color_mask #define GL_SGIS_texture_color_mask 1 #define __GLEE_GL_SGIS_texture_color_mask 1 /* Constants */ #define GL_TEXTURE_COLOR_WRITEMASK_SGIS 0x81EF #ifndef GLEE_H_DEFINED_glTextureColorMaskSGIS #define GLEE_H_DEFINED_glTextureColorMaskSGIS typedef void (APIENTRYP GLEEPFNGLTEXTURECOLORMASKSGISPROC) (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); GLEE_EXTERN GLEEPFNGLTEXTURECOLORMASKSGISPROC GLeeFuncPtr_glTextureColorMaskSGIS; #define glTextureColorMaskSGIS GLeeFuncPtr_glTextureColorMaskSGIS #endif #endif /* GL_EXT_texture_env_dot3 */ #ifndef GL_EXT_texture_env_dot3 #define GL_EXT_texture_env_dot3 1 #define __GLEE_GL_EXT_texture_env_dot3 1 /* Constants */ #define GL_DOT3_RGB_EXT 0x8740 #define GL_DOT3_RGBA_EXT 0x8741 #endif /* GL_ATI_texture_mirror_once */ #ifndef GL_ATI_texture_mirror_once #define GL_ATI_texture_mirror_once 1 #define __GLEE_GL_ATI_texture_mirror_once 1 /* Constants */ #define GL_MIRROR_CLAMP_ATI 0x8742 #define GL_MIRROR_CLAMP_TO_EDGE_ATI 0x8743 #endif /* GL_NV_fence */ #ifndef GL_NV_fence #define GL_NV_fence 1 #define __GLEE_GL_NV_fence 1 /* Constants */ #define GL_ALL_COMPLETED_NV 0x84F2 #define GL_FENCE_STATUS_NV 0x84F3 #define GL_FENCE_CONDITION_NV 0x84F4 #ifndef GLEE_H_DEFINED_glDeleteFencesNV #define GLEE_H_DEFINED_glDeleteFencesNV typedef void (APIENTRYP GLEEPFNGLDELETEFENCESNVPROC) (GLsizei n, const GLuint * fences); GLEE_EXTERN GLEEPFNGLDELETEFENCESNVPROC GLeeFuncPtr_glDeleteFencesNV; #define glDeleteFencesNV GLeeFuncPtr_glDeleteFencesNV #endif #ifndef GLEE_H_DEFINED_glGenFencesNV #define GLEE_H_DEFINED_glGenFencesNV typedef void (APIENTRYP GLEEPFNGLGENFENCESNVPROC) (GLsizei n, GLuint * fences); GLEE_EXTERN GLEEPFNGLGENFENCESNVPROC GLeeFuncPtr_glGenFencesNV; #define glGenFencesNV GLeeFuncPtr_glGenFencesNV #endif #ifndef GLEE_H_DEFINED_glIsFenceNV #define GLEE_H_DEFINED_glIsFenceNV typedef GLboolean (APIENTRYP GLEEPFNGLISFENCENVPROC) (GLuint fence); GLEE_EXTERN GLEEPFNGLISFENCENVPROC GLeeFuncPtr_glIsFenceNV; #define glIsFenceNV GLeeFuncPtr_glIsFenceNV #endif #ifndef GLEE_H_DEFINED_glTestFenceNV #define GLEE_H_DEFINED_glTestFenceNV typedef GLboolean (APIENTRYP GLEEPFNGLTESTFENCENVPROC) (GLuint fence); GLEE_EXTERN GLEEPFNGLTESTFENCENVPROC GLeeFuncPtr_glTestFenceNV; #define glTestFenceNV GLeeFuncPtr_glTestFenceNV #endif #ifndef GLEE_H_DEFINED_glGetFenceivNV #define GLEE_H_DEFINED_glGetFenceivNV typedef void (APIENTRYP GLEEPFNGLGETFENCEIVNVPROC) (GLuint fence, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETFENCEIVNVPROC GLeeFuncPtr_glGetFenceivNV; #define glGetFenceivNV GLeeFuncPtr_glGetFenceivNV #endif #ifndef GLEE_H_DEFINED_glFinishFenceNV #define GLEE_H_DEFINED_glFinishFenceNV typedef void (APIENTRYP GLEEPFNGLFINISHFENCENVPROC) (GLuint fence); GLEE_EXTERN GLEEPFNGLFINISHFENCENVPROC GLeeFuncPtr_glFinishFenceNV; #define glFinishFenceNV GLeeFuncPtr_glFinishFenceNV #endif #ifndef GLEE_H_DEFINED_glSetFenceNV #define GLEE_H_DEFINED_glSetFenceNV typedef void (APIENTRYP GLEEPFNGLSETFENCENVPROC) (GLuint fence, GLenum condition); GLEE_EXTERN GLEEPFNGLSETFENCENVPROC GLeeFuncPtr_glSetFenceNV; #define glSetFenceNV GLeeFuncPtr_glSetFenceNV #endif #endif /* GL_IBM_texture_mirrored_repeat */ #ifndef GL_IBM_texture_mirrored_repeat #define GL_IBM_texture_mirrored_repeat 1 #define __GLEE_GL_IBM_texture_mirrored_repeat 1 /* Constants */ #define GL_MIRRORED_REPEAT_IBM 0x8370 #endif /* GL_NV_evaluators */ #ifndef GL_NV_evaluators #define GL_NV_evaluators 1 #define __GLEE_GL_NV_evaluators 1 /* Constants */ #define GL_EVAL_2D_NV 0x86C0 #define GL_EVAL_TRIANGULAR_2D_NV 0x86C1 #define GL_MAP_TESSELLATION_NV 0x86C2 #define GL_MAP_ATTRIB_U_ORDER_NV 0x86C3 #define GL_MAP_ATTRIB_V_ORDER_NV 0x86C4 #define GL_EVAL_FRACTIONAL_TESSELLATION_NV 0x86C5 #define GL_EVAL_VERTEX_ATTRIB0_NV 0x86C6 #define GL_EVAL_VERTEX_ATTRIB1_NV 0x86C7 #define GL_EVAL_VERTEX_ATTRIB2_NV 0x86C8 #define GL_EVAL_VERTEX_ATTRIB3_NV 0x86C9 #define GL_EVAL_VERTEX_ATTRIB4_NV 0x86CA #define GL_EVAL_VERTEX_ATTRIB5_NV 0x86CB #define GL_EVAL_VERTEX_ATTRIB6_NV 0x86CC #define GL_EVAL_VERTEX_ATTRIB7_NV 0x86CD #define GL_EVAL_VERTEX_ATTRIB8_NV 0x86CE #define GL_EVAL_VERTEX_ATTRIB9_NV 0x86CF #define GL_EVAL_VERTEX_ATTRIB10_NV 0x86D0 #define GL_EVAL_VERTEX_ATTRIB11_NV 0x86D1 #define GL_EVAL_VERTEX_ATTRIB12_NV 0x86D2 #define GL_EVAL_VERTEX_ATTRIB13_NV 0x86D3 #define GL_EVAL_VERTEX_ATTRIB14_NV 0x86D4 #define GL_EVAL_VERTEX_ATTRIB15_NV 0x86D5 #define GL_MAX_MAP_TESSELLATION_NV 0x86D6 #define GL_MAX_RATIONAL_EVAL_ORDER_NV 0x86D7 #ifndef GLEE_H_DEFINED_glMapControlPointsNV #define GLEE_H_DEFINED_glMapControlPointsNV typedef void (APIENTRYP GLEEPFNGLMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const GLvoid * points); GLEE_EXTERN GLEEPFNGLMAPCONTROLPOINTSNVPROC GLeeFuncPtr_glMapControlPointsNV; #define glMapControlPointsNV GLeeFuncPtr_glMapControlPointsNV #endif #ifndef GLEE_H_DEFINED_glMapParameterivNV #define GLEE_H_DEFINED_glMapParameterivNV typedef void (APIENTRYP GLEEPFNGLMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, const GLint * params); GLEE_EXTERN GLEEPFNGLMAPPARAMETERIVNVPROC GLeeFuncPtr_glMapParameterivNV; #define glMapParameterivNV GLeeFuncPtr_glMapParameterivNV #endif #ifndef GLEE_H_DEFINED_glMapParameterfvNV #define GLEE_H_DEFINED_glMapParameterfvNV typedef void (APIENTRYP GLEEPFNGLMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, const GLfloat * params); GLEE_EXTERN GLEEPFNGLMAPPARAMETERFVNVPROC GLeeFuncPtr_glMapParameterfvNV; #define glMapParameterfvNV GLeeFuncPtr_glMapParameterfvNV #endif #ifndef GLEE_H_DEFINED_glGetMapControlPointsNV #define GLEE_H_DEFINED_glGetMapControlPointsNV typedef void (APIENTRYP GLEEPFNGLGETMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, GLvoid * points); GLEE_EXTERN GLEEPFNGLGETMAPCONTROLPOINTSNVPROC GLeeFuncPtr_glGetMapControlPointsNV; #define glGetMapControlPointsNV GLeeFuncPtr_glGetMapControlPointsNV #endif #ifndef GLEE_H_DEFINED_glGetMapParameterivNV #define GLEE_H_DEFINED_glGetMapParameterivNV typedef void (APIENTRYP GLEEPFNGLGETMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETMAPPARAMETERIVNVPROC GLeeFuncPtr_glGetMapParameterivNV; #define glGetMapParameterivNV GLeeFuncPtr_glGetMapParameterivNV #endif #ifndef GLEE_H_DEFINED_glGetMapParameterfvNV #define GLEE_H_DEFINED_glGetMapParameterfvNV typedef void (APIENTRYP GLEEPFNGLGETMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETMAPPARAMETERFVNVPROC GLeeFuncPtr_glGetMapParameterfvNV; #define glGetMapParameterfvNV GLeeFuncPtr_glGetMapParameterfvNV #endif #ifndef GLEE_H_DEFINED_glGetMapAttribParameterivNV #define GLEE_H_DEFINED_glGetMapAttribParameterivNV typedef void (APIENTRYP GLEEPFNGLGETMAPATTRIBPARAMETERIVNVPROC) (GLenum target, GLuint index, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETMAPATTRIBPARAMETERIVNVPROC GLeeFuncPtr_glGetMapAttribParameterivNV; #define glGetMapAttribParameterivNV GLeeFuncPtr_glGetMapAttribParameterivNV #endif #ifndef GLEE_H_DEFINED_glGetMapAttribParameterfvNV #define GLEE_H_DEFINED_glGetMapAttribParameterfvNV typedef void (APIENTRYP GLEEPFNGLGETMAPATTRIBPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETMAPATTRIBPARAMETERFVNVPROC GLeeFuncPtr_glGetMapAttribParameterfvNV; #define glGetMapAttribParameterfvNV GLeeFuncPtr_glGetMapAttribParameterfvNV #endif #ifndef GLEE_H_DEFINED_glEvalMapsNV #define GLEE_H_DEFINED_glEvalMapsNV typedef void (APIENTRYP GLEEPFNGLEVALMAPSNVPROC) (GLenum target, GLenum mode); GLEE_EXTERN GLEEPFNGLEVALMAPSNVPROC GLeeFuncPtr_glEvalMapsNV; #define glEvalMapsNV GLeeFuncPtr_glEvalMapsNV #endif #endif /* GL_NV_packed_depth_stencil */ #ifndef GL_NV_packed_depth_stencil #define GL_NV_packed_depth_stencil 1 #define __GLEE_GL_NV_packed_depth_stencil 1 /* Constants */ #define GL_DEPTH_STENCIL_NV 0x84F9 #define GL_UNSIGNED_INT_24_8_NV 0x84FA #endif /* GL_NV_register_combiners2 */ #ifndef GL_NV_register_combiners2 #define GL_NV_register_combiners2 1 #define __GLEE_GL_NV_register_combiners2 1 /* Constants */ #define GL_PER_STAGE_CONSTANTS_NV 0x8535 #ifndef GLEE_H_DEFINED_glCombinerStageParameterfvNV #define GLEE_H_DEFINED_glCombinerStageParameterfvNV typedef void (APIENTRYP GLEEPFNGLCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, const GLfloat * params); GLEE_EXTERN GLEEPFNGLCOMBINERSTAGEPARAMETERFVNVPROC GLeeFuncPtr_glCombinerStageParameterfvNV; #define glCombinerStageParameterfvNV GLeeFuncPtr_glCombinerStageParameterfvNV #endif #ifndef GLEE_H_DEFINED_glGetCombinerStageParameterfvNV #define GLEE_H_DEFINED_glGetCombinerStageParameterfvNV typedef void (APIENTRYP GLEEPFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC GLeeFuncPtr_glGetCombinerStageParameterfvNV; #define glGetCombinerStageParameterfvNV GLeeFuncPtr_glGetCombinerStageParameterfvNV #endif #endif /* GL_NV_texture_compression_vtc */ #ifndef GL_NV_texture_compression_vtc #define GL_NV_texture_compression_vtc 1 #define __GLEE_GL_NV_texture_compression_vtc 1 /* Constants */ #endif /* GL_NV_texture_rectangle */ #ifndef GL_NV_texture_rectangle #define GL_NV_texture_rectangle 1 #define __GLEE_GL_NV_texture_rectangle 1 /* Constants */ #define GL_TEXTURE_RECTANGLE_NV 0x84F5 #define GL_TEXTURE_BINDING_RECTANGLE_NV 0x84F6 #define GL_PROXY_TEXTURE_RECTANGLE_NV 0x84F7 #define GL_MAX_RECTANGLE_TEXTURE_SIZE_NV 0x84F8 #endif /* GL_NV_texture_shader */ #ifndef GL_NV_texture_shader #define GL_NV_texture_shader 1 #define __GLEE_GL_NV_texture_shader 1 /* Constants */ #define GL_OFFSET_TEXTURE_RECTANGLE_NV 0x864C #define GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV 0x864D #define GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV 0x864E #define GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV 0x86D9 #define GL_UNSIGNED_INT_S8_S8_8_8_NV 0x86DA #define GL_UNSIGNED_INT_8_8_S8_S8_REV_NV 0x86DB #define GL_DSDT_MAG_INTENSITY_NV 0x86DC #define GL_SHADER_CONSISTENT_NV 0x86DD #define GL_TEXTURE_SHADER_NV 0x86DE #define GL_SHADER_OPERATION_NV 0x86DF #define GL_CULL_MODES_NV 0x86E0 #define GL_OFFSET_TEXTURE_MATRIX_NV 0x86E1 #define GL_OFFSET_TEXTURE_SCALE_NV 0x86E2 #define GL_OFFSET_TEXTURE_BIAS_NV 0x86E3 #define GL_OFFSET_TEXTURE_2D_MATRIX_NV GL_OFFSET_TEXTURE_MATRIX_NV #define GL_OFFSET_TEXTURE_2D_SCALE_NV GL_OFFSET_TEXTURE_SCALE_NV #define GL_OFFSET_TEXTURE_2D_BIAS_NV GL_OFFSET_TEXTURE_BIAS_NV #define GL_PREVIOUS_TEXTURE_INPUT_NV 0x86E4 #define GL_CONST_EYE_NV 0x86E5 #define GL_PASS_THROUGH_NV 0x86E6 #define GL_CULL_FRAGMENT_NV 0x86E7 #define GL_OFFSET_TEXTURE_2D_NV 0x86E8 #define GL_DEPENDENT_AR_TEXTURE_2D_NV 0x86E9 #define GL_DEPENDENT_GB_TEXTURE_2D_NV 0x86EA #define GL_DOT_PRODUCT_NV 0x86EC #define GL_DOT_PRODUCT_DEPTH_REPLACE_NV 0x86ED #define GL_DOT_PRODUCT_TEXTURE_2D_NV 0x86EE #define GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV 0x86F0 #define GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV 0x86F1 #define GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV 0x86F2 #define GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV 0x86F3 #define GL_HILO_NV 0x86F4 #define GL_DSDT_NV 0x86F5 #define GL_DSDT_MAG_NV 0x86F6 #define GL_DSDT_MAG_VIB_NV 0x86F7 #define GL_HILO16_NV 0x86F8 #define GL_SIGNED_HILO_NV 0x86F9 #define GL_SIGNED_HILO16_NV 0x86FA #define GL_SIGNED_RGBA_NV 0x86FB #define GL_SIGNED_RGBA8_NV 0x86FC #define GL_SIGNED_RGB_NV 0x86FE #define GL_SIGNED_RGB8_NV 0x86FF #define GL_SIGNED_LUMINANCE_NV 0x8701 #define GL_SIGNED_LUMINANCE8_NV 0x8702 #define GL_SIGNED_LUMINANCE_ALPHA_NV 0x8703 #define GL_SIGNED_LUMINANCE8_ALPHA8_NV 0x8704 #define GL_SIGNED_ALPHA_NV 0x8705 #define GL_SIGNED_ALPHA8_NV 0x8706 #define GL_SIGNED_INTENSITY_NV 0x8707 #define GL_SIGNED_INTENSITY8_NV 0x8708 #define GL_DSDT8_NV 0x8709 #define GL_DSDT8_MAG8_NV 0x870A #define GL_DSDT8_MAG8_INTENSITY8_NV 0x870B #define GL_SIGNED_RGB_UNSIGNED_ALPHA_NV 0x870C #define GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV 0x870D #define GL_HI_SCALE_NV 0x870E #define GL_LO_SCALE_NV 0x870F #define GL_DS_SCALE_NV 0x8710 #define GL_DT_SCALE_NV 0x8711 #define GL_MAGNITUDE_SCALE_NV 0x8712 #define GL_VIBRANCE_SCALE_NV 0x8713 #define GL_HI_BIAS_NV 0x8714 #define GL_LO_BIAS_NV 0x8715 #define GL_DS_BIAS_NV 0x8716 #define GL_DT_BIAS_NV 0x8717 #define GL_MAGNITUDE_BIAS_NV 0x8718 #define GL_VIBRANCE_BIAS_NV 0x8719 #define GL_TEXTURE_BORDER_VALUES_NV 0x871A #define GL_TEXTURE_HI_SIZE_NV 0x871B #define GL_TEXTURE_LO_SIZE_NV 0x871C #define GL_TEXTURE_DS_SIZE_NV 0x871D #define GL_TEXTURE_DT_SIZE_NV 0x871E #define GL_TEXTURE_MAG_SIZE_NV 0x871F #endif /* GL_NV_texture_shader2 */ #ifndef GL_NV_texture_shader2 #define GL_NV_texture_shader2 1 #define __GLEE_GL_NV_texture_shader2 1 /* Constants */ #define GL_DOT_PRODUCT_TEXTURE_3D_NV 0x86EF #endif /* GL_NV_vertex_array_range2 */ #ifndef GL_NV_vertex_array_range2 #define GL_NV_vertex_array_range2 1 #define __GLEE_GL_NV_vertex_array_range2 1 /* Constants */ #define GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV 0x8533 #endif /* GL_NV_vertex_program */ #ifndef GL_NV_vertex_program #define GL_NV_vertex_program 1 #define __GLEE_GL_NV_vertex_program 1 /* Constants */ #define GL_VERTEX_PROGRAM_NV 0x8620 #define GL_VERTEX_STATE_PROGRAM_NV 0x8621 #define GL_ATTRIB_ARRAY_SIZE_NV 0x8623 #define GL_ATTRIB_ARRAY_STRIDE_NV 0x8624 #define GL_ATTRIB_ARRAY_TYPE_NV 0x8625 #define GL_CURRENT_ATTRIB_NV 0x8626 #define GL_PROGRAM_LENGTH_NV 0x8627 #define GL_PROGRAM_STRING_NV 0x8628 #define GL_MODELVIEW_PROJECTION_NV 0x8629 #define GL_IDENTITY_NV 0x862A #define GL_INVERSE_NV 0x862B #define GL_TRANSPOSE_NV 0x862C #define GL_INVERSE_TRANSPOSE_NV 0x862D #define GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV 0x862E #define GL_MAX_TRACK_MATRICES_NV 0x862F #define GL_MATRIX0_NV 0x8630 #define GL_MATRIX1_NV 0x8631 #define GL_MATRIX2_NV 0x8632 #define GL_MATRIX3_NV 0x8633 #define GL_MATRIX4_NV 0x8634 #define GL_MATRIX5_NV 0x8635 #define GL_MATRIX6_NV 0x8636 #define GL_MATRIX7_NV 0x8637 #define GL_CURRENT_MATRIX_STACK_DEPTH_NV 0x8640 #define GL_CURRENT_MATRIX_NV 0x8641 #define GL_VERTEX_PROGRAM_POINT_SIZE_NV 0x8642 #define GL_VERTEX_PROGRAM_TWO_SIDE_NV 0x8643 #define GL_PROGRAM_PARAMETER_NV 0x8644 #define GL_ATTRIB_ARRAY_POINTER_NV 0x8645 #define GL_PROGRAM_TARGET_NV 0x8646 #define GL_PROGRAM_RESIDENT_NV 0x8647 #define GL_TRACK_MATRIX_NV 0x8648 #define GL_TRACK_MATRIX_TRANSFORM_NV 0x8649 #define GL_VERTEX_PROGRAM_BINDING_NV 0x864A #define GL_PROGRAM_ERROR_POSITION_NV 0x864B #define GL_VERTEX_ATTRIB_ARRAY0_NV 0x8650 #define GL_VERTEX_ATTRIB_ARRAY1_NV 0x8651 #define GL_VERTEX_ATTRIB_ARRAY2_NV 0x8652 #define GL_VERTEX_ATTRIB_ARRAY3_NV 0x8653 #define GL_VERTEX_ATTRIB_ARRAY4_NV 0x8654 #define GL_VERTEX_ATTRIB_ARRAY5_NV 0x8655 #define GL_VERTEX_ATTRIB_ARRAY6_NV 0x8656 #define GL_VERTEX_ATTRIB_ARRAY7_NV 0x8657 #define GL_VERTEX_ATTRIB_ARRAY8_NV 0x8658 #define GL_VERTEX_ATTRIB_ARRAY9_NV 0x8659 #define GL_VERTEX_ATTRIB_ARRAY10_NV 0x865A #define GL_VERTEX_ATTRIB_ARRAY11_NV 0x865B #define GL_VERTEX_ATTRIB_ARRAY12_NV 0x865C #define GL_VERTEX_ATTRIB_ARRAY13_NV 0x865D #define GL_VERTEX_ATTRIB_ARRAY14_NV 0x865E #define GL_VERTEX_ATTRIB_ARRAY15_NV 0x865F #define GL_MAP1_VERTEX_ATTRIB0_4_NV 0x8660 #define GL_MAP1_VERTEX_ATTRIB1_4_NV 0x8661 #define GL_MAP1_VERTEX_ATTRIB2_4_NV 0x8662 #define GL_MAP1_VERTEX_ATTRIB3_4_NV 0x8663 #define GL_MAP1_VERTEX_ATTRIB4_4_NV 0x8664 #define GL_MAP1_VERTEX_ATTRIB5_4_NV 0x8665 #define GL_MAP1_VERTEX_ATTRIB6_4_NV 0x8666 #define GL_MAP1_VERTEX_ATTRIB7_4_NV 0x8667 #define GL_MAP1_VERTEX_ATTRIB8_4_NV 0x8668 #define GL_MAP1_VERTEX_ATTRIB9_4_NV 0x8669 #define GL_MAP1_VERTEX_ATTRIB10_4_NV 0x866A #define GL_MAP1_VERTEX_ATTRIB11_4_NV 0x866B #define GL_MAP1_VERTEX_ATTRIB12_4_NV 0x866C #define GL_MAP1_VERTEX_ATTRIB13_4_NV 0x866D #define GL_MAP1_VERTEX_ATTRIB14_4_NV 0x866E #define GL_MAP1_VERTEX_ATTRIB15_4_NV 0x866F #define GL_MAP2_VERTEX_ATTRIB0_4_NV 0x8670 #define GL_MAP2_VERTEX_ATTRIB1_4_NV 0x8671 #define GL_MAP2_VERTEX_ATTRIB2_4_NV 0x8672 #define GL_MAP2_VERTEX_ATTRIB3_4_NV 0x8673 #define GL_MAP2_VERTEX_ATTRIB4_4_NV 0x8674 #define GL_MAP2_VERTEX_ATTRIB5_4_NV 0x8675 #define GL_MAP2_VERTEX_ATTRIB6_4_NV 0x8676 #define GL_MAP2_VERTEX_ATTRIB7_4_NV 0x8677 #define GL_MAP2_VERTEX_ATTRIB8_4_NV 0x8678 #define GL_MAP2_VERTEX_ATTRIB9_4_NV 0x8679 #define GL_MAP2_VERTEX_ATTRIB10_4_NV 0x867A #define GL_MAP2_VERTEX_ATTRIB11_4_NV 0x867B #define GL_MAP2_VERTEX_ATTRIB12_4_NV 0x867C #define GL_MAP2_VERTEX_ATTRIB13_4_NV 0x867D #define GL_MAP2_VERTEX_ATTRIB14_4_NV 0x867E #define GL_MAP2_VERTEX_ATTRIB15_4_NV 0x867F #ifndef GLEE_H_DEFINED_glAreProgramsResidentNV #define GLEE_H_DEFINED_glAreProgramsResidentNV typedef GLboolean (APIENTRYP GLEEPFNGLAREPROGRAMSRESIDENTNVPROC) (GLsizei n, const GLuint * programs, GLboolean * residences); GLEE_EXTERN GLEEPFNGLAREPROGRAMSRESIDENTNVPROC GLeeFuncPtr_glAreProgramsResidentNV; #define glAreProgramsResidentNV GLeeFuncPtr_glAreProgramsResidentNV #endif #ifndef GLEE_H_DEFINED_glBindProgramNV #define GLEE_H_DEFINED_glBindProgramNV typedef void (APIENTRYP GLEEPFNGLBINDPROGRAMNVPROC) (GLenum target, GLuint id); GLEE_EXTERN GLEEPFNGLBINDPROGRAMNVPROC GLeeFuncPtr_glBindProgramNV; #define glBindProgramNV GLeeFuncPtr_glBindProgramNV #endif #ifndef GLEE_H_DEFINED_glDeleteProgramsNV #define GLEE_H_DEFINED_glDeleteProgramsNV typedef void (APIENTRYP GLEEPFNGLDELETEPROGRAMSNVPROC) (GLsizei n, const GLuint * programs); GLEE_EXTERN GLEEPFNGLDELETEPROGRAMSNVPROC GLeeFuncPtr_glDeleteProgramsNV; #define glDeleteProgramsNV GLeeFuncPtr_glDeleteProgramsNV #endif #ifndef GLEE_H_DEFINED_glExecuteProgramNV #define GLEE_H_DEFINED_glExecuteProgramNV typedef void (APIENTRYP GLEEPFNGLEXECUTEPROGRAMNVPROC) (GLenum target, GLuint id, const GLfloat * params); GLEE_EXTERN GLEEPFNGLEXECUTEPROGRAMNVPROC GLeeFuncPtr_glExecuteProgramNV; #define glExecuteProgramNV GLeeFuncPtr_glExecuteProgramNV #endif #ifndef GLEE_H_DEFINED_glGenProgramsNV #define GLEE_H_DEFINED_glGenProgramsNV typedef void (APIENTRYP GLEEPFNGLGENPROGRAMSNVPROC) (GLsizei n, GLuint * programs); GLEE_EXTERN GLEEPFNGLGENPROGRAMSNVPROC GLeeFuncPtr_glGenProgramsNV; #define glGenProgramsNV GLeeFuncPtr_glGenProgramsNV #endif #ifndef GLEE_H_DEFINED_glGetProgramParameterdvNV #define GLEE_H_DEFINED_glGetProgramParameterdvNV typedef void (APIENTRYP GLEEPFNGLGETPROGRAMPARAMETERDVNVPROC) (GLenum target, GLuint index, GLenum pname, GLdouble * params); GLEE_EXTERN GLEEPFNGLGETPROGRAMPARAMETERDVNVPROC GLeeFuncPtr_glGetProgramParameterdvNV; #define glGetProgramParameterdvNV GLeeFuncPtr_glGetProgramParameterdvNV #endif #ifndef GLEE_H_DEFINED_glGetProgramParameterfvNV #define GLEE_H_DEFINED_glGetProgramParameterfvNV typedef void (APIENTRYP GLEEPFNGLGETPROGRAMPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETPROGRAMPARAMETERFVNVPROC GLeeFuncPtr_glGetProgramParameterfvNV; #define glGetProgramParameterfvNV GLeeFuncPtr_glGetProgramParameterfvNV #endif #ifndef GLEE_H_DEFINED_glGetProgramivNV #define GLEE_H_DEFINED_glGetProgramivNV typedef void (APIENTRYP GLEEPFNGLGETPROGRAMIVNVPROC) (GLuint id, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETPROGRAMIVNVPROC GLeeFuncPtr_glGetProgramivNV; #define glGetProgramivNV GLeeFuncPtr_glGetProgramivNV #endif #ifndef GLEE_H_DEFINED_glGetProgramStringNV #define GLEE_H_DEFINED_glGetProgramStringNV typedef void (APIENTRYP GLEEPFNGLGETPROGRAMSTRINGNVPROC) (GLuint id, GLenum pname, GLubyte * program); GLEE_EXTERN GLEEPFNGLGETPROGRAMSTRINGNVPROC GLeeFuncPtr_glGetProgramStringNV; #define glGetProgramStringNV GLeeFuncPtr_glGetProgramStringNV #endif #ifndef GLEE_H_DEFINED_glGetTrackMatrixivNV #define GLEE_H_DEFINED_glGetTrackMatrixivNV typedef void (APIENTRYP GLEEPFNGLGETTRACKMATRIXIVNVPROC) (GLenum target, GLuint address, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETTRACKMATRIXIVNVPROC GLeeFuncPtr_glGetTrackMatrixivNV; #define glGetTrackMatrixivNV GLeeFuncPtr_glGetTrackMatrixivNV #endif #ifndef GLEE_H_DEFINED_glGetVertexAttribdvNV #define GLEE_H_DEFINED_glGetVertexAttribdvNV typedef void (APIENTRYP GLEEPFNGLGETVERTEXATTRIBDVNVPROC) (GLuint index, GLenum pname, GLdouble * params); GLEE_EXTERN GLEEPFNGLGETVERTEXATTRIBDVNVPROC GLeeFuncPtr_glGetVertexAttribdvNV; #define glGetVertexAttribdvNV GLeeFuncPtr_glGetVertexAttribdvNV #endif #ifndef GLEE_H_DEFINED_glGetVertexAttribfvNV #define GLEE_H_DEFINED_glGetVertexAttribfvNV typedef void (APIENTRYP GLEEPFNGLGETVERTEXATTRIBFVNVPROC) (GLuint index, GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETVERTEXATTRIBFVNVPROC GLeeFuncPtr_glGetVertexAttribfvNV; #define glGetVertexAttribfvNV GLeeFuncPtr_glGetVertexAttribfvNV #endif #ifndef GLEE_H_DEFINED_glGetVertexAttribivNV #define GLEE_H_DEFINED_glGetVertexAttribivNV typedef void (APIENTRYP GLEEPFNGLGETVERTEXATTRIBIVNVPROC) (GLuint index, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETVERTEXATTRIBIVNVPROC GLeeFuncPtr_glGetVertexAttribivNV; #define glGetVertexAttribivNV GLeeFuncPtr_glGetVertexAttribivNV #endif #ifndef GLEE_H_DEFINED_glGetVertexAttribPointervNV #define GLEE_H_DEFINED_glGetVertexAttribPointervNV typedef void (APIENTRYP GLEEPFNGLGETVERTEXATTRIBPOINTERVNVPROC) (GLuint index, GLenum pname, GLvoid* * pointer); GLEE_EXTERN GLEEPFNGLGETVERTEXATTRIBPOINTERVNVPROC GLeeFuncPtr_glGetVertexAttribPointervNV; #define glGetVertexAttribPointervNV GLeeFuncPtr_glGetVertexAttribPointervNV #endif #ifndef GLEE_H_DEFINED_glIsProgramNV #define GLEE_H_DEFINED_glIsProgramNV typedef GLboolean (APIENTRYP GLEEPFNGLISPROGRAMNVPROC) (GLuint id); GLEE_EXTERN GLEEPFNGLISPROGRAMNVPROC GLeeFuncPtr_glIsProgramNV; #define glIsProgramNV GLeeFuncPtr_glIsProgramNV #endif #ifndef GLEE_H_DEFINED_glLoadProgramNV #define GLEE_H_DEFINED_glLoadProgramNV typedef void (APIENTRYP GLEEPFNGLLOADPROGRAMNVPROC) (GLenum target, GLuint id, GLsizei len, const GLubyte * program); GLEE_EXTERN GLEEPFNGLLOADPROGRAMNVPROC GLeeFuncPtr_glLoadProgramNV; #define glLoadProgramNV GLeeFuncPtr_glLoadProgramNV #endif #ifndef GLEE_H_DEFINED_glProgramParameter4dNV #define GLEE_H_DEFINED_glProgramParameter4dNV typedef void (APIENTRYP GLEEPFNGLPROGRAMPARAMETER4DNVPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLEE_EXTERN GLEEPFNGLPROGRAMPARAMETER4DNVPROC GLeeFuncPtr_glProgramParameter4dNV; #define glProgramParameter4dNV GLeeFuncPtr_glProgramParameter4dNV #endif #ifndef GLEE_H_DEFINED_glProgramParameter4dvNV #define GLEE_H_DEFINED_glProgramParameter4dvNV typedef void (APIENTRYP GLEEPFNGLPROGRAMPARAMETER4DVNVPROC) (GLenum target, GLuint index, const GLdouble * v); GLEE_EXTERN GLEEPFNGLPROGRAMPARAMETER4DVNVPROC GLeeFuncPtr_glProgramParameter4dvNV; #define glProgramParameter4dvNV GLeeFuncPtr_glProgramParameter4dvNV #endif #ifndef GLEE_H_DEFINED_glProgramParameter4fNV #define GLEE_H_DEFINED_glProgramParameter4fNV typedef void (APIENTRYP GLEEPFNGLPROGRAMPARAMETER4FNVPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); GLEE_EXTERN GLEEPFNGLPROGRAMPARAMETER4FNVPROC GLeeFuncPtr_glProgramParameter4fNV; #define glProgramParameter4fNV GLeeFuncPtr_glProgramParameter4fNV #endif #ifndef GLEE_H_DEFINED_glProgramParameter4fvNV #define GLEE_H_DEFINED_glProgramParameter4fvNV typedef void (APIENTRYP GLEEPFNGLPROGRAMPARAMETER4FVNVPROC) (GLenum target, GLuint index, const GLfloat * v); GLEE_EXTERN GLEEPFNGLPROGRAMPARAMETER4FVNVPROC GLeeFuncPtr_glProgramParameter4fvNV; #define glProgramParameter4fvNV GLeeFuncPtr_glProgramParameter4fvNV #endif #ifndef GLEE_H_DEFINED_glProgramParameters4dvNV #define GLEE_H_DEFINED_glProgramParameters4dvNV typedef void (APIENTRYP GLEEPFNGLPROGRAMPARAMETERS4DVNVPROC) (GLenum target, GLuint index, GLuint count, const GLdouble * v); GLEE_EXTERN GLEEPFNGLPROGRAMPARAMETERS4DVNVPROC GLeeFuncPtr_glProgramParameters4dvNV; #define glProgramParameters4dvNV GLeeFuncPtr_glProgramParameters4dvNV #endif #ifndef GLEE_H_DEFINED_glProgramParameters4fvNV #define GLEE_H_DEFINED_glProgramParameters4fvNV typedef void (APIENTRYP GLEEPFNGLPROGRAMPARAMETERS4FVNVPROC) (GLenum target, GLuint index, GLuint count, const GLfloat * v); GLEE_EXTERN GLEEPFNGLPROGRAMPARAMETERS4FVNVPROC GLeeFuncPtr_glProgramParameters4fvNV; #define glProgramParameters4fvNV GLeeFuncPtr_glProgramParameters4fvNV #endif #ifndef GLEE_H_DEFINED_glRequestResidentProgramsNV #define GLEE_H_DEFINED_glRequestResidentProgramsNV typedef void (APIENTRYP GLEEPFNGLREQUESTRESIDENTPROGRAMSNVPROC) (GLsizei n, const GLuint * programs); GLEE_EXTERN GLEEPFNGLREQUESTRESIDENTPROGRAMSNVPROC GLeeFuncPtr_glRequestResidentProgramsNV; #define glRequestResidentProgramsNV GLeeFuncPtr_glRequestResidentProgramsNV #endif #ifndef GLEE_H_DEFINED_glTrackMatrixNV #define GLEE_H_DEFINED_glTrackMatrixNV typedef void (APIENTRYP GLEEPFNGLTRACKMATRIXNVPROC) (GLenum target, GLuint address, GLenum matrix, GLenum transform); GLEE_EXTERN GLEEPFNGLTRACKMATRIXNVPROC GLeeFuncPtr_glTrackMatrixNV; #define glTrackMatrixNV GLeeFuncPtr_glTrackMatrixNV #endif #ifndef GLEE_H_DEFINED_glVertexAttribPointerNV #define GLEE_H_DEFINED_glVertexAttribPointerNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBPOINTERNVPROC) (GLuint index, GLint fsize, GLenum type, GLsizei stride, const GLvoid * pointer); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBPOINTERNVPROC GLeeFuncPtr_glVertexAttribPointerNV; #define glVertexAttribPointerNV GLeeFuncPtr_glVertexAttribPointerNV #endif #ifndef GLEE_H_DEFINED_glVertexAttrib1dNV #define GLEE_H_DEFINED_glVertexAttrib1dNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB1DNVPROC) (GLuint index, GLdouble x); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB1DNVPROC GLeeFuncPtr_glVertexAttrib1dNV; #define glVertexAttrib1dNV GLeeFuncPtr_glVertexAttrib1dNV #endif #ifndef GLEE_H_DEFINED_glVertexAttrib1dvNV #define GLEE_H_DEFINED_glVertexAttrib1dvNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB1DVNVPROC) (GLuint index, const GLdouble * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB1DVNVPROC GLeeFuncPtr_glVertexAttrib1dvNV; #define glVertexAttrib1dvNV GLeeFuncPtr_glVertexAttrib1dvNV #endif #ifndef GLEE_H_DEFINED_glVertexAttrib1fNV #define GLEE_H_DEFINED_glVertexAttrib1fNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB1FNVPROC) (GLuint index, GLfloat x); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB1FNVPROC GLeeFuncPtr_glVertexAttrib1fNV; #define glVertexAttrib1fNV GLeeFuncPtr_glVertexAttrib1fNV #endif #ifndef GLEE_H_DEFINED_glVertexAttrib1fvNV #define GLEE_H_DEFINED_glVertexAttrib1fvNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB1FVNVPROC) (GLuint index, const GLfloat * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB1FVNVPROC GLeeFuncPtr_glVertexAttrib1fvNV; #define glVertexAttrib1fvNV GLeeFuncPtr_glVertexAttrib1fvNV #endif #ifndef GLEE_H_DEFINED_glVertexAttrib1sNV #define GLEE_H_DEFINED_glVertexAttrib1sNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB1SNVPROC) (GLuint index, GLshort x); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB1SNVPROC GLeeFuncPtr_glVertexAttrib1sNV; #define glVertexAttrib1sNV GLeeFuncPtr_glVertexAttrib1sNV #endif #ifndef GLEE_H_DEFINED_glVertexAttrib1svNV #define GLEE_H_DEFINED_glVertexAttrib1svNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB1SVNVPROC) (GLuint index, const GLshort * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB1SVNVPROC GLeeFuncPtr_glVertexAttrib1svNV; #define glVertexAttrib1svNV GLeeFuncPtr_glVertexAttrib1svNV #endif #ifndef GLEE_H_DEFINED_glVertexAttrib2dNV #define GLEE_H_DEFINED_glVertexAttrib2dNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB2DNVPROC) (GLuint index, GLdouble x, GLdouble y); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB2DNVPROC GLeeFuncPtr_glVertexAttrib2dNV; #define glVertexAttrib2dNV GLeeFuncPtr_glVertexAttrib2dNV #endif #ifndef GLEE_H_DEFINED_glVertexAttrib2dvNV #define GLEE_H_DEFINED_glVertexAttrib2dvNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB2DVNVPROC) (GLuint index, const GLdouble * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB2DVNVPROC GLeeFuncPtr_glVertexAttrib2dvNV; #define glVertexAttrib2dvNV GLeeFuncPtr_glVertexAttrib2dvNV #endif #ifndef GLEE_H_DEFINED_glVertexAttrib2fNV #define GLEE_H_DEFINED_glVertexAttrib2fNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB2FNVPROC) (GLuint index, GLfloat x, GLfloat y); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB2FNVPROC GLeeFuncPtr_glVertexAttrib2fNV; #define glVertexAttrib2fNV GLeeFuncPtr_glVertexAttrib2fNV #endif #ifndef GLEE_H_DEFINED_glVertexAttrib2fvNV #define GLEE_H_DEFINED_glVertexAttrib2fvNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB2FVNVPROC) (GLuint index, const GLfloat * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB2FVNVPROC GLeeFuncPtr_glVertexAttrib2fvNV; #define glVertexAttrib2fvNV GLeeFuncPtr_glVertexAttrib2fvNV #endif #ifndef GLEE_H_DEFINED_glVertexAttrib2sNV #define GLEE_H_DEFINED_glVertexAttrib2sNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB2SNVPROC) (GLuint index, GLshort x, GLshort y); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB2SNVPROC GLeeFuncPtr_glVertexAttrib2sNV; #define glVertexAttrib2sNV GLeeFuncPtr_glVertexAttrib2sNV #endif #ifndef GLEE_H_DEFINED_glVertexAttrib2svNV #define GLEE_H_DEFINED_glVertexAttrib2svNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB2SVNVPROC) (GLuint index, const GLshort * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB2SVNVPROC GLeeFuncPtr_glVertexAttrib2svNV; #define glVertexAttrib2svNV GLeeFuncPtr_glVertexAttrib2svNV #endif #ifndef GLEE_H_DEFINED_glVertexAttrib3dNV #define GLEE_H_DEFINED_glVertexAttrib3dNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB3DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB3DNVPROC GLeeFuncPtr_glVertexAttrib3dNV; #define glVertexAttrib3dNV GLeeFuncPtr_glVertexAttrib3dNV #endif #ifndef GLEE_H_DEFINED_glVertexAttrib3dvNV #define GLEE_H_DEFINED_glVertexAttrib3dvNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB3DVNVPROC) (GLuint index, const GLdouble * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB3DVNVPROC GLeeFuncPtr_glVertexAttrib3dvNV; #define glVertexAttrib3dvNV GLeeFuncPtr_glVertexAttrib3dvNV #endif #ifndef GLEE_H_DEFINED_glVertexAttrib3fNV #define GLEE_H_DEFINED_glVertexAttrib3fNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB3FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB3FNVPROC GLeeFuncPtr_glVertexAttrib3fNV; #define glVertexAttrib3fNV GLeeFuncPtr_glVertexAttrib3fNV #endif #ifndef GLEE_H_DEFINED_glVertexAttrib3fvNV #define GLEE_H_DEFINED_glVertexAttrib3fvNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB3FVNVPROC) (GLuint index, const GLfloat * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB3FVNVPROC GLeeFuncPtr_glVertexAttrib3fvNV; #define glVertexAttrib3fvNV GLeeFuncPtr_glVertexAttrib3fvNV #endif #ifndef GLEE_H_DEFINED_glVertexAttrib3sNV #define GLEE_H_DEFINED_glVertexAttrib3sNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB3SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB3SNVPROC GLeeFuncPtr_glVertexAttrib3sNV; #define glVertexAttrib3sNV GLeeFuncPtr_glVertexAttrib3sNV #endif #ifndef GLEE_H_DEFINED_glVertexAttrib3svNV #define GLEE_H_DEFINED_glVertexAttrib3svNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB3SVNVPROC) (GLuint index, const GLshort * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB3SVNVPROC GLeeFuncPtr_glVertexAttrib3svNV; #define glVertexAttrib3svNV GLeeFuncPtr_glVertexAttrib3svNV #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4dNV #define GLEE_H_DEFINED_glVertexAttrib4dNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4DNVPROC GLeeFuncPtr_glVertexAttrib4dNV; #define glVertexAttrib4dNV GLeeFuncPtr_glVertexAttrib4dNV #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4dvNV #define GLEE_H_DEFINED_glVertexAttrib4dvNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4DVNVPROC) (GLuint index, const GLdouble * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4DVNVPROC GLeeFuncPtr_glVertexAttrib4dvNV; #define glVertexAttrib4dvNV GLeeFuncPtr_glVertexAttrib4dvNV #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4fNV #define GLEE_H_DEFINED_glVertexAttrib4fNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4FNVPROC GLeeFuncPtr_glVertexAttrib4fNV; #define glVertexAttrib4fNV GLeeFuncPtr_glVertexAttrib4fNV #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4fvNV #define GLEE_H_DEFINED_glVertexAttrib4fvNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4FVNVPROC) (GLuint index, const GLfloat * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4FVNVPROC GLeeFuncPtr_glVertexAttrib4fvNV; #define glVertexAttrib4fvNV GLeeFuncPtr_glVertexAttrib4fvNV #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4sNV #define GLEE_H_DEFINED_glVertexAttrib4sNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4SNVPROC GLeeFuncPtr_glVertexAttrib4sNV; #define glVertexAttrib4sNV GLeeFuncPtr_glVertexAttrib4sNV #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4svNV #define GLEE_H_DEFINED_glVertexAttrib4svNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4SVNVPROC) (GLuint index, const GLshort * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4SVNVPROC GLeeFuncPtr_glVertexAttrib4svNV; #define glVertexAttrib4svNV GLeeFuncPtr_glVertexAttrib4svNV #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4ubNV #define GLEE_H_DEFINED_glVertexAttrib4ubNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4UBNVPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4UBNVPROC GLeeFuncPtr_glVertexAttrib4ubNV; #define glVertexAttrib4ubNV GLeeFuncPtr_glVertexAttrib4ubNV #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4ubvNV #define GLEE_H_DEFINED_glVertexAttrib4ubvNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4UBVNVPROC) (GLuint index, const GLubyte * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4UBVNVPROC GLeeFuncPtr_glVertexAttrib4ubvNV; #define glVertexAttrib4ubvNV GLeeFuncPtr_glVertexAttrib4ubvNV #endif #ifndef GLEE_H_DEFINED_glVertexAttribs1dvNV #define GLEE_H_DEFINED_glVertexAttribs1dvNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBS1DVNVPROC) (GLuint index, GLsizei count, const GLdouble * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBS1DVNVPROC GLeeFuncPtr_glVertexAttribs1dvNV; #define glVertexAttribs1dvNV GLeeFuncPtr_glVertexAttribs1dvNV #endif #ifndef GLEE_H_DEFINED_glVertexAttribs1fvNV #define GLEE_H_DEFINED_glVertexAttribs1fvNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBS1FVNVPROC) (GLuint index, GLsizei count, const GLfloat * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBS1FVNVPROC GLeeFuncPtr_glVertexAttribs1fvNV; #define glVertexAttribs1fvNV GLeeFuncPtr_glVertexAttribs1fvNV #endif #ifndef GLEE_H_DEFINED_glVertexAttribs1svNV #define GLEE_H_DEFINED_glVertexAttribs1svNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBS1SVNVPROC) (GLuint index, GLsizei count, const GLshort * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBS1SVNVPROC GLeeFuncPtr_glVertexAttribs1svNV; #define glVertexAttribs1svNV GLeeFuncPtr_glVertexAttribs1svNV #endif #ifndef GLEE_H_DEFINED_glVertexAttribs2dvNV #define GLEE_H_DEFINED_glVertexAttribs2dvNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBS2DVNVPROC) (GLuint index, GLsizei count, const GLdouble * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBS2DVNVPROC GLeeFuncPtr_glVertexAttribs2dvNV; #define glVertexAttribs2dvNV GLeeFuncPtr_glVertexAttribs2dvNV #endif #ifndef GLEE_H_DEFINED_glVertexAttribs2fvNV #define GLEE_H_DEFINED_glVertexAttribs2fvNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBS2FVNVPROC) (GLuint index, GLsizei count, const GLfloat * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBS2FVNVPROC GLeeFuncPtr_glVertexAttribs2fvNV; #define glVertexAttribs2fvNV GLeeFuncPtr_glVertexAttribs2fvNV #endif #ifndef GLEE_H_DEFINED_glVertexAttribs2svNV #define GLEE_H_DEFINED_glVertexAttribs2svNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBS2SVNVPROC) (GLuint index, GLsizei count, const GLshort * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBS2SVNVPROC GLeeFuncPtr_glVertexAttribs2svNV; #define glVertexAttribs2svNV GLeeFuncPtr_glVertexAttribs2svNV #endif #ifndef GLEE_H_DEFINED_glVertexAttribs3dvNV #define GLEE_H_DEFINED_glVertexAttribs3dvNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBS3DVNVPROC) (GLuint index, GLsizei count, const GLdouble * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBS3DVNVPROC GLeeFuncPtr_glVertexAttribs3dvNV; #define glVertexAttribs3dvNV GLeeFuncPtr_glVertexAttribs3dvNV #endif #ifndef GLEE_H_DEFINED_glVertexAttribs3fvNV #define GLEE_H_DEFINED_glVertexAttribs3fvNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBS3FVNVPROC) (GLuint index, GLsizei count, const GLfloat * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBS3FVNVPROC GLeeFuncPtr_glVertexAttribs3fvNV; #define glVertexAttribs3fvNV GLeeFuncPtr_glVertexAttribs3fvNV #endif #ifndef GLEE_H_DEFINED_glVertexAttribs3svNV #define GLEE_H_DEFINED_glVertexAttribs3svNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBS3SVNVPROC) (GLuint index, GLsizei count, const GLshort * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBS3SVNVPROC GLeeFuncPtr_glVertexAttribs3svNV; #define glVertexAttribs3svNV GLeeFuncPtr_glVertexAttribs3svNV #endif #ifndef GLEE_H_DEFINED_glVertexAttribs4dvNV #define GLEE_H_DEFINED_glVertexAttribs4dvNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBS4DVNVPROC) (GLuint index, GLsizei count, const GLdouble * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBS4DVNVPROC GLeeFuncPtr_glVertexAttribs4dvNV; #define glVertexAttribs4dvNV GLeeFuncPtr_glVertexAttribs4dvNV #endif #ifndef GLEE_H_DEFINED_glVertexAttribs4fvNV #define GLEE_H_DEFINED_glVertexAttribs4fvNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBS4FVNVPROC) (GLuint index, GLsizei count, const GLfloat * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBS4FVNVPROC GLeeFuncPtr_glVertexAttribs4fvNV; #define glVertexAttribs4fvNV GLeeFuncPtr_glVertexAttribs4fvNV #endif #ifndef GLEE_H_DEFINED_glVertexAttribs4svNV #define GLEE_H_DEFINED_glVertexAttribs4svNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBS4SVNVPROC) (GLuint index, GLsizei count, const GLshort * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBS4SVNVPROC GLeeFuncPtr_glVertexAttribs4svNV; #define glVertexAttribs4svNV GLeeFuncPtr_glVertexAttribs4svNV #endif #ifndef GLEE_H_DEFINED_glVertexAttribs4ubvNV #define GLEE_H_DEFINED_glVertexAttribs4ubvNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBS4UBVNVPROC) (GLuint index, GLsizei count, const GLubyte * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBS4UBVNVPROC GLeeFuncPtr_glVertexAttribs4ubvNV; #define glVertexAttribs4ubvNV GLeeFuncPtr_glVertexAttribs4ubvNV #endif #endif /* GL_SGIX_texture_coordinate_clamp */ #ifndef GL_SGIX_texture_coordinate_clamp #define GL_SGIX_texture_coordinate_clamp 1 #define __GLEE_GL_SGIX_texture_coordinate_clamp 1 /* Constants */ #define GL_TEXTURE_MAX_CLAMP_S_SGIX 0x8369 #define GL_TEXTURE_MAX_CLAMP_T_SGIX 0x836A #define GL_TEXTURE_MAX_CLAMP_R_SGIX 0x836B #endif /* GL_SGIX_scalebias_hint */ #ifndef GL_SGIX_scalebias_hint #define GL_SGIX_scalebias_hint 1 #define __GLEE_GL_SGIX_scalebias_hint 1 /* Constants */ #define GL_SCALEBIAS_HINT_SGIX 0x8322 #endif /* GL_OML_interlace */ #ifndef GL_OML_interlace #define GL_OML_interlace 1 #define __GLEE_GL_OML_interlace 1 /* Constants */ #define GL_INTERLACE_OML 0x8980 #define GL_INTERLACE_READ_OML 0x8981 #endif /* GL_OML_subsample */ #ifndef GL_OML_subsample #define GL_OML_subsample 1 #define __GLEE_GL_OML_subsample 1 /* Constants */ #define GL_FORMAT_SUBSAMPLE_24_24_OML 0x8982 #define GL_FORMAT_SUBSAMPLE_244_244_OML 0x8983 #endif /* GL_OML_resample */ #ifndef GL_OML_resample #define GL_OML_resample 1 #define __GLEE_GL_OML_resample 1 /* Constants */ #define GL_PACK_RESAMPLE_OML 0x8984 #define GL_UNPACK_RESAMPLE_OML 0x8985 #define GL_RESAMPLE_REPLICATE_OML 0x8986 #define GL_RESAMPLE_ZERO_FILL_OML 0x8987 #define GL_RESAMPLE_AVERAGE_OML 0x8988 #define GL_RESAMPLE_DECIMATE_OML 0x8989 #endif /* GL_NV_copy_depth_to_color */ #ifndef GL_NV_copy_depth_to_color #define GL_NV_copy_depth_to_color 1 #define __GLEE_GL_NV_copy_depth_to_color 1 /* Constants */ #define GL_DEPTH_STENCIL_TO_RGBA_NV 0x886E #define GL_DEPTH_STENCIL_TO_BGRA_NV 0x886F #endif /* GL_ATI_envmap_bumpmap */ #ifndef GL_ATI_envmap_bumpmap #define GL_ATI_envmap_bumpmap 1 #define __GLEE_GL_ATI_envmap_bumpmap 1 /* Constants */ #define GL_BUMP_ROT_MATRIX_ATI 0x8775 #define GL_BUMP_ROT_MATRIX_SIZE_ATI 0x8776 #define GL_BUMP_NUM_TEX_UNITS_ATI 0x8777 #define GL_BUMP_TEX_UNITS_ATI 0x8778 #define GL_DUDV_ATI 0x8779 #define GL_DU8DV8_ATI 0x877A #define GL_BUMP_ENVMAP_ATI 0x877B #define GL_BUMP_TARGET_ATI 0x877C #ifndef GLEE_H_DEFINED_glTexBumpParameterivATI #define GLEE_H_DEFINED_glTexBumpParameterivATI typedef void (APIENTRYP GLEEPFNGLTEXBUMPPARAMETERIVATIPROC) (GLenum pname, const GLint * param); GLEE_EXTERN GLEEPFNGLTEXBUMPPARAMETERIVATIPROC GLeeFuncPtr_glTexBumpParameterivATI; #define glTexBumpParameterivATI GLeeFuncPtr_glTexBumpParameterivATI #endif #ifndef GLEE_H_DEFINED_glTexBumpParameterfvATI #define GLEE_H_DEFINED_glTexBumpParameterfvATI typedef void (APIENTRYP GLEEPFNGLTEXBUMPPARAMETERFVATIPROC) (GLenum pname, const GLfloat * param); GLEE_EXTERN GLEEPFNGLTEXBUMPPARAMETERFVATIPROC GLeeFuncPtr_glTexBumpParameterfvATI; #define glTexBumpParameterfvATI GLeeFuncPtr_glTexBumpParameterfvATI #endif #ifndef GLEE_H_DEFINED_glGetTexBumpParameterivATI #define GLEE_H_DEFINED_glGetTexBumpParameterivATI typedef void (APIENTRYP GLEEPFNGLGETTEXBUMPPARAMETERIVATIPROC) (GLenum pname, GLint * param); GLEE_EXTERN GLEEPFNGLGETTEXBUMPPARAMETERIVATIPROC GLeeFuncPtr_glGetTexBumpParameterivATI; #define glGetTexBumpParameterivATI GLeeFuncPtr_glGetTexBumpParameterivATI #endif #ifndef GLEE_H_DEFINED_glGetTexBumpParameterfvATI #define GLEE_H_DEFINED_glGetTexBumpParameterfvATI typedef void (APIENTRYP GLEEPFNGLGETTEXBUMPPARAMETERFVATIPROC) (GLenum pname, GLfloat * param); GLEE_EXTERN GLEEPFNGLGETTEXBUMPPARAMETERFVATIPROC GLeeFuncPtr_glGetTexBumpParameterfvATI; #define glGetTexBumpParameterfvATI GLeeFuncPtr_glGetTexBumpParameterfvATI #endif #endif /* GL_ATI_fragment_shader */ #ifndef GL_ATI_fragment_shader #define GL_ATI_fragment_shader 1 #define __GLEE_GL_ATI_fragment_shader 1 /* Constants */ #define GL_FRAGMENT_SHADER_ATI 0x8920 #define GL_REG_0_ATI 0x8921 #define GL_REG_1_ATI 0x8922 #define GL_REG_2_ATI 0x8923 #define GL_REG_3_ATI 0x8924 #define GL_REG_4_ATI 0x8925 #define GL_REG_5_ATI 0x8926 #define GL_REG_6_ATI 0x8927 #define GL_REG_7_ATI 0x8928 #define GL_REG_8_ATI 0x8929 #define GL_REG_9_ATI 0x892A #define GL_REG_10_ATI 0x892B #define GL_REG_11_ATI 0x892C #define GL_REG_12_ATI 0x892D #define GL_REG_13_ATI 0x892E #define GL_REG_14_ATI 0x892F #define GL_REG_15_ATI 0x8930 #define GL_REG_16_ATI 0x8931 #define GL_REG_17_ATI 0x8932 #define GL_REG_18_ATI 0x8933 #define GL_REG_19_ATI 0x8934 #define GL_REG_20_ATI 0x8935 #define GL_REG_21_ATI 0x8936 #define GL_REG_22_ATI 0x8937 #define GL_REG_23_ATI 0x8938 #define GL_REG_24_ATI 0x8939 #define GL_REG_25_ATI 0x893A #define GL_REG_26_ATI 0x893B #define GL_REG_27_ATI 0x893C #define GL_REG_28_ATI 0x893D #define GL_REG_29_ATI 0x893E #define GL_REG_30_ATI 0x893F #define GL_REG_31_ATI 0x8940 #define GL_CON_0_ATI 0x8941 #define GL_CON_1_ATI 0x8942 #define GL_CON_2_ATI 0x8943 #define GL_CON_3_ATI 0x8944 #define GL_CON_4_ATI 0x8945 #define GL_CON_5_ATI 0x8946 #define GL_CON_6_ATI 0x8947 #define GL_CON_7_ATI 0x8948 #define GL_CON_8_ATI 0x8949 #define GL_CON_9_ATI 0x894A #define GL_CON_10_ATI 0x894B #define GL_CON_11_ATI 0x894C #define GL_CON_12_ATI 0x894D #define GL_CON_13_ATI 0x894E #define GL_CON_14_ATI 0x894F #define GL_CON_15_ATI 0x8950 #define GL_CON_16_ATI 0x8951 #define GL_CON_17_ATI 0x8952 #define GL_CON_18_ATI 0x8953 #define GL_CON_19_ATI 0x8954 #define GL_CON_20_ATI 0x8955 #define GL_CON_21_ATI 0x8956 #define GL_CON_22_ATI 0x8957 #define GL_CON_23_ATI 0x8958 #define GL_CON_24_ATI 0x8959 #define GL_CON_25_ATI 0x895A #define GL_CON_26_ATI 0x895B #define GL_CON_27_ATI 0x895C #define GL_CON_28_ATI 0x895D #define GL_CON_29_ATI 0x895E #define GL_CON_30_ATI 0x895F #define GL_CON_31_ATI 0x8960 #define GL_MOV_ATI 0x8961 #define GL_ADD_ATI 0x8963 #define GL_MUL_ATI 0x8964 #define GL_SUB_ATI 0x8965 #define GL_DOT3_ATI 0x8966 #define GL_DOT4_ATI 0x8967 #define GL_MAD_ATI 0x8968 #define GL_LERP_ATI 0x8969 #define GL_CND_ATI 0x896A #define GL_CND0_ATI 0x896B #define GL_DOT2_ADD_ATI 0x896C #define GL_SECONDARY_INTERPOLATOR_ATI 0x896D #define GL_NUM_FRAGMENT_REGISTERS_ATI 0x896E #define GL_NUM_FRAGMENT_CONSTANTS_ATI 0x896F #define GL_NUM_PASSES_ATI 0x8970 #define GL_NUM_INSTRUCTIONS_PER_PASS_ATI 0x8971 #define GL_NUM_INSTRUCTIONS_TOTAL_ATI 0x8972 #define GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI 0x8973 #define GL_NUM_LOOPBACK_COMPONENTS_ATI 0x8974 #define GL_COLOR_ALPHA_PAIRING_ATI 0x8975 #define GL_SWIZZLE_STR_ATI 0x8976 #define GL_SWIZZLE_STQ_ATI 0x8977 #define GL_SWIZZLE_STR_DR_ATI 0x8978 #define GL_SWIZZLE_STQ_DQ_ATI 0x8979 #define GL_SWIZZLE_STRQ_ATI 0x897A #define GL_SWIZZLE_STRQ_DQ_ATI 0x897B #define GL_RED_BIT_ATI 0x00000001 #define GL_GREEN_BIT_ATI 0x00000002 #define GL_BLUE_BIT_ATI 0x00000004 #define GL_2X_BIT_ATI 0x00000001 #define GL_4X_BIT_ATI 0x00000002 #define GL_8X_BIT_ATI 0x00000004 #define GL_HALF_BIT_ATI 0x00000008 #define GL_QUARTER_BIT_ATI 0x00000010 #define GL_EIGHTH_BIT_ATI 0x00000020 #define GL_SATURATE_BIT_ATI 0x00000040 #define GL_COMP_BIT_ATI 0x00000002 #define GL_NEGATE_BIT_ATI 0x00000004 #define GL_BIAS_BIT_ATI 0x00000008 #ifndef GLEE_H_DEFINED_glGenFragmentShadersATI #define GLEE_H_DEFINED_glGenFragmentShadersATI typedef GLuint (APIENTRYP GLEEPFNGLGENFRAGMENTSHADERSATIPROC) (GLuint range); GLEE_EXTERN GLEEPFNGLGENFRAGMENTSHADERSATIPROC GLeeFuncPtr_glGenFragmentShadersATI; #define glGenFragmentShadersATI GLeeFuncPtr_glGenFragmentShadersATI #endif #ifndef GLEE_H_DEFINED_glBindFragmentShaderATI #define GLEE_H_DEFINED_glBindFragmentShaderATI typedef void (APIENTRYP GLEEPFNGLBINDFRAGMENTSHADERATIPROC) (GLuint id); GLEE_EXTERN GLEEPFNGLBINDFRAGMENTSHADERATIPROC GLeeFuncPtr_glBindFragmentShaderATI; #define glBindFragmentShaderATI GLeeFuncPtr_glBindFragmentShaderATI #endif #ifndef GLEE_H_DEFINED_glDeleteFragmentShaderATI #define GLEE_H_DEFINED_glDeleteFragmentShaderATI typedef void (APIENTRYP GLEEPFNGLDELETEFRAGMENTSHADERATIPROC) (GLuint id); GLEE_EXTERN GLEEPFNGLDELETEFRAGMENTSHADERATIPROC GLeeFuncPtr_glDeleteFragmentShaderATI; #define glDeleteFragmentShaderATI GLeeFuncPtr_glDeleteFragmentShaderATI #endif #ifndef GLEE_H_DEFINED_glBeginFragmentShaderATI #define GLEE_H_DEFINED_glBeginFragmentShaderATI typedef void (APIENTRYP GLEEPFNGLBEGINFRAGMENTSHADERATIPROC) (); GLEE_EXTERN GLEEPFNGLBEGINFRAGMENTSHADERATIPROC GLeeFuncPtr_glBeginFragmentShaderATI; #define glBeginFragmentShaderATI GLeeFuncPtr_glBeginFragmentShaderATI #endif #ifndef GLEE_H_DEFINED_glEndFragmentShaderATI #define GLEE_H_DEFINED_glEndFragmentShaderATI typedef void (APIENTRYP GLEEPFNGLENDFRAGMENTSHADERATIPROC) (); GLEE_EXTERN GLEEPFNGLENDFRAGMENTSHADERATIPROC GLeeFuncPtr_glEndFragmentShaderATI; #define glEndFragmentShaderATI GLeeFuncPtr_glEndFragmentShaderATI #endif #ifndef GLEE_H_DEFINED_glPassTexCoordATI #define GLEE_H_DEFINED_glPassTexCoordATI typedef void (APIENTRYP GLEEPFNGLPASSTEXCOORDATIPROC) (GLuint dst, GLuint coord, GLenum swizzle); GLEE_EXTERN GLEEPFNGLPASSTEXCOORDATIPROC GLeeFuncPtr_glPassTexCoordATI; #define glPassTexCoordATI GLeeFuncPtr_glPassTexCoordATI #endif #ifndef GLEE_H_DEFINED_glSampleMapATI #define GLEE_H_DEFINED_glSampleMapATI typedef void (APIENTRYP GLEEPFNGLSAMPLEMAPATIPROC) (GLuint dst, GLuint interp, GLenum swizzle); GLEE_EXTERN GLEEPFNGLSAMPLEMAPATIPROC GLeeFuncPtr_glSampleMapATI; #define glSampleMapATI GLeeFuncPtr_glSampleMapATI #endif #ifndef GLEE_H_DEFINED_glColorFragmentOp1ATI #define GLEE_H_DEFINED_glColorFragmentOp1ATI typedef void (APIENTRYP GLEEPFNGLCOLORFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); GLEE_EXTERN GLEEPFNGLCOLORFRAGMENTOP1ATIPROC GLeeFuncPtr_glColorFragmentOp1ATI; #define glColorFragmentOp1ATI GLeeFuncPtr_glColorFragmentOp1ATI #endif #ifndef GLEE_H_DEFINED_glColorFragmentOp2ATI #define GLEE_H_DEFINED_glColorFragmentOp2ATI typedef void (APIENTRYP GLEEPFNGLCOLORFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); GLEE_EXTERN GLEEPFNGLCOLORFRAGMENTOP2ATIPROC GLeeFuncPtr_glColorFragmentOp2ATI; #define glColorFragmentOp2ATI GLeeFuncPtr_glColorFragmentOp2ATI #endif #ifndef GLEE_H_DEFINED_glColorFragmentOp3ATI #define GLEE_H_DEFINED_glColorFragmentOp3ATI typedef void (APIENTRYP GLEEPFNGLCOLORFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); GLEE_EXTERN GLEEPFNGLCOLORFRAGMENTOP3ATIPROC GLeeFuncPtr_glColorFragmentOp3ATI; #define glColorFragmentOp3ATI GLeeFuncPtr_glColorFragmentOp3ATI #endif #ifndef GLEE_H_DEFINED_glAlphaFragmentOp1ATI #define GLEE_H_DEFINED_glAlphaFragmentOp1ATI typedef void (APIENTRYP GLEEPFNGLALPHAFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); GLEE_EXTERN GLEEPFNGLALPHAFRAGMENTOP1ATIPROC GLeeFuncPtr_glAlphaFragmentOp1ATI; #define glAlphaFragmentOp1ATI GLeeFuncPtr_glAlphaFragmentOp1ATI #endif #ifndef GLEE_H_DEFINED_glAlphaFragmentOp2ATI #define GLEE_H_DEFINED_glAlphaFragmentOp2ATI typedef void (APIENTRYP GLEEPFNGLALPHAFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); GLEE_EXTERN GLEEPFNGLALPHAFRAGMENTOP2ATIPROC GLeeFuncPtr_glAlphaFragmentOp2ATI; #define glAlphaFragmentOp2ATI GLeeFuncPtr_glAlphaFragmentOp2ATI #endif #ifndef GLEE_H_DEFINED_glAlphaFragmentOp3ATI #define GLEE_H_DEFINED_glAlphaFragmentOp3ATI typedef void (APIENTRYP GLEEPFNGLALPHAFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); GLEE_EXTERN GLEEPFNGLALPHAFRAGMENTOP3ATIPROC GLeeFuncPtr_glAlphaFragmentOp3ATI; #define glAlphaFragmentOp3ATI GLeeFuncPtr_glAlphaFragmentOp3ATI #endif #ifndef GLEE_H_DEFINED_glSetFragmentShaderConstantATI #define GLEE_H_DEFINED_glSetFragmentShaderConstantATI typedef void (APIENTRYP GLEEPFNGLSETFRAGMENTSHADERCONSTANTATIPROC) (GLuint dst, const GLfloat * value); GLEE_EXTERN GLEEPFNGLSETFRAGMENTSHADERCONSTANTATIPROC GLeeFuncPtr_glSetFragmentShaderConstantATI; #define glSetFragmentShaderConstantATI GLeeFuncPtr_glSetFragmentShaderConstantATI #endif #endif /* GL_ATI_pn_triangles */ #ifndef GL_ATI_pn_triangles #define GL_ATI_pn_triangles 1 #define __GLEE_GL_ATI_pn_triangles 1 /* Constants */ #define GL_PN_TRIANGLES_ATI 0x87F0 #define GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F1 #define GL_PN_TRIANGLES_POINT_MODE_ATI 0x87F2 #define GL_PN_TRIANGLES_NORMAL_MODE_ATI 0x87F3 #define GL_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F4 #define GL_PN_TRIANGLES_POINT_MODE_LINEAR_ATI 0x87F5 #define GL_PN_TRIANGLES_POINT_MODE_CUBIC_ATI 0x87F6 #define GL_PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI 0x87F7 #define GL_PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI 0x87F8 #ifndef GLEE_H_DEFINED_glPNTrianglesiATI #define GLEE_H_DEFINED_glPNTrianglesiATI typedef void (APIENTRYP GLEEPFNGLPNTRIANGLESIATIPROC) (GLenum pname, GLint param); GLEE_EXTERN GLEEPFNGLPNTRIANGLESIATIPROC GLeeFuncPtr_glPNTrianglesiATI; #define glPNTrianglesiATI GLeeFuncPtr_glPNTrianglesiATI #endif #ifndef GLEE_H_DEFINED_glPNTrianglesfATI #define GLEE_H_DEFINED_glPNTrianglesfATI typedef void (APIENTRYP GLEEPFNGLPNTRIANGLESFATIPROC) (GLenum pname, GLfloat param); GLEE_EXTERN GLEEPFNGLPNTRIANGLESFATIPROC GLeeFuncPtr_glPNTrianglesfATI; #define glPNTrianglesfATI GLeeFuncPtr_glPNTrianglesfATI #endif #endif /* GL_ATI_vertex_array_object */ #ifndef GL_ATI_vertex_array_object #define GL_ATI_vertex_array_object 1 #define __GLEE_GL_ATI_vertex_array_object 1 /* Constants */ #define GL_STATIC_ATI 0x8760 #define GL_DYNAMIC_ATI 0x8761 #define GL_PRESERVE_ATI 0x8762 #define GL_DISCARD_ATI 0x8763 #define GL_OBJECT_BUFFER_SIZE_ATI 0x8764 #define GL_OBJECT_BUFFER_USAGE_ATI 0x8765 #define GL_ARRAY_OBJECT_BUFFER_ATI 0x8766 #define GL_ARRAY_OBJECT_OFFSET_ATI 0x8767 #ifndef GLEE_H_DEFINED_glNewObjectBufferATI #define GLEE_H_DEFINED_glNewObjectBufferATI typedef GLuint (APIENTRYP GLEEPFNGLNEWOBJECTBUFFERATIPROC) (GLsizei size, const GLvoid * pointer, GLenum usage); GLEE_EXTERN GLEEPFNGLNEWOBJECTBUFFERATIPROC GLeeFuncPtr_glNewObjectBufferATI; #define glNewObjectBufferATI GLeeFuncPtr_glNewObjectBufferATI #endif #ifndef GLEE_H_DEFINED_glIsObjectBufferATI #define GLEE_H_DEFINED_glIsObjectBufferATI typedef GLboolean (APIENTRYP GLEEPFNGLISOBJECTBUFFERATIPROC) (GLuint buffer); GLEE_EXTERN GLEEPFNGLISOBJECTBUFFERATIPROC GLeeFuncPtr_glIsObjectBufferATI; #define glIsObjectBufferATI GLeeFuncPtr_glIsObjectBufferATI #endif #ifndef GLEE_H_DEFINED_glUpdateObjectBufferATI #define GLEE_H_DEFINED_glUpdateObjectBufferATI typedef void (APIENTRYP GLEEPFNGLUPDATEOBJECTBUFFERATIPROC) (GLuint buffer, GLuint offset, GLsizei size, const GLvoid * pointer, GLenum preserve); GLEE_EXTERN GLEEPFNGLUPDATEOBJECTBUFFERATIPROC GLeeFuncPtr_glUpdateObjectBufferATI; #define glUpdateObjectBufferATI GLeeFuncPtr_glUpdateObjectBufferATI #endif #ifndef GLEE_H_DEFINED_glGetObjectBufferfvATI #define GLEE_H_DEFINED_glGetObjectBufferfvATI typedef void (APIENTRYP GLEEPFNGLGETOBJECTBUFFERFVATIPROC) (GLuint buffer, GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETOBJECTBUFFERFVATIPROC GLeeFuncPtr_glGetObjectBufferfvATI; #define glGetObjectBufferfvATI GLeeFuncPtr_glGetObjectBufferfvATI #endif #ifndef GLEE_H_DEFINED_glGetObjectBufferivATI #define GLEE_H_DEFINED_glGetObjectBufferivATI typedef void (APIENTRYP GLEEPFNGLGETOBJECTBUFFERIVATIPROC) (GLuint buffer, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETOBJECTBUFFERIVATIPROC GLeeFuncPtr_glGetObjectBufferivATI; #define glGetObjectBufferivATI GLeeFuncPtr_glGetObjectBufferivATI #endif #ifndef GLEE_H_DEFINED_glFreeObjectBufferATI #define GLEE_H_DEFINED_glFreeObjectBufferATI typedef void (APIENTRYP GLEEPFNGLFREEOBJECTBUFFERATIPROC) (GLuint buffer); GLEE_EXTERN GLEEPFNGLFREEOBJECTBUFFERATIPROC GLeeFuncPtr_glFreeObjectBufferATI; #define glFreeObjectBufferATI GLeeFuncPtr_glFreeObjectBufferATI #endif #ifndef GLEE_H_DEFINED_glArrayObjectATI #define GLEE_H_DEFINED_glArrayObjectATI typedef void (APIENTRYP GLEEPFNGLARRAYOBJECTATIPROC) (GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); GLEE_EXTERN GLEEPFNGLARRAYOBJECTATIPROC GLeeFuncPtr_glArrayObjectATI; #define glArrayObjectATI GLeeFuncPtr_glArrayObjectATI #endif #ifndef GLEE_H_DEFINED_glGetArrayObjectfvATI #define GLEE_H_DEFINED_glGetArrayObjectfvATI typedef void (APIENTRYP GLEEPFNGLGETARRAYOBJECTFVATIPROC) (GLenum array, GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETARRAYOBJECTFVATIPROC GLeeFuncPtr_glGetArrayObjectfvATI; #define glGetArrayObjectfvATI GLeeFuncPtr_glGetArrayObjectfvATI #endif #ifndef GLEE_H_DEFINED_glGetArrayObjectivATI #define GLEE_H_DEFINED_glGetArrayObjectivATI typedef void (APIENTRYP GLEEPFNGLGETARRAYOBJECTIVATIPROC) (GLenum array, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETARRAYOBJECTIVATIPROC GLeeFuncPtr_glGetArrayObjectivATI; #define glGetArrayObjectivATI GLeeFuncPtr_glGetArrayObjectivATI #endif #ifndef GLEE_H_DEFINED_glVariantArrayObjectATI #define GLEE_H_DEFINED_glVariantArrayObjectATI typedef void (APIENTRYP GLEEPFNGLVARIANTARRAYOBJECTATIPROC) (GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); GLEE_EXTERN GLEEPFNGLVARIANTARRAYOBJECTATIPROC GLeeFuncPtr_glVariantArrayObjectATI; #define glVariantArrayObjectATI GLeeFuncPtr_glVariantArrayObjectATI #endif #ifndef GLEE_H_DEFINED_glGetVariantArrayObjectfvATI #define GLEE_H_DEFINED_glGetVariantArrayObjectfvATI typedef void (APIENTRYP GLEEPFNGLGETVARIANTARRAYOBJECTFVATIPROC) (GLuint id, GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETVARIANTARRAYOBJECTFVATIPROC GLeeFuncPtr_glGetVariantArrayObjectfvATI; #define glGetVariantArrayObjectfvATI GLeeFuncPtr_glGetVariantArrayObjectfvATI #endif #ifndef GLEE_H_DEFINED_glGetVariantArrayObjectivATI #define GLEE_H_DEFINED_glGetVariantArrayObjectivATI typedef void (APIENTRYP GLEEPFNGLGETVARIANTARRAYOBJECTIVATIPROC) (GLuint id, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETVARIANTARRAYOBJECTIVATIPROC GLeeFuncPtr_glGetVariantArrayObjectivATI; #define glGetVariantArrayObjectivATI GLeeFuncPtr_glGetVariantArrayObjectivATI #endif #endif /* GL_EXT_vertex_shader */ #ifndef GL_EXT_vertex_shader #define GL_EXT_vertex_shader 1 #define __GLEE_GL_EXT_vertex_shader 1 /* Constants */ #define GL_VERTEX_SHADER_EXT 0x8780 #define GL_VERTEX_SHADER_BINDING_EXT 0x8781 #define GL_OP_INDEX_EXT 0x8782 #define GL_OP_NEGATE_EXT 0x8783 #define GL_OP_DOT3_EXT 0x8784 #define GL_OP_DOT4_EXT 0x8785 #define GL_OP_MUL_EXT 0x8786 #define GL_OP_ADD_EXT 0x8787 #define GL_OP_MADD_EXT 0x8788 #define GL_OP_FRAC_EXT 0x8789 #define GL_OP_MAX_EXT 0x878A #define GL_OP_MIN_EXT 0x878B #define GL_OP_SET_GE_EXT 0x878C #define GL_OP_SET_LT_EXT 0x878D #define GL_OP_CLAMP_EXT 0x878E #define GL_OP_FLOOR_EXT 0x878F #define GL_OP_ROUND_EXT 0x8790 #define GL_OP_EXP_BASE_2_EXT 0x8791 #define GL_OP_LOG_BASE_2_EXT 0x8792 #define GL_OP_POWER_EXT 0x8793 #define GL_OP_RECIP_EXT 0x8794 #define GL_OP_RECIP_SQRT_EXT 0x8795 #define GL_OP_SUB_EXT 0x8796 #define GL_OP_CROSS_PRODUCT_EXT 0x8797 #define GL_OP_MULTIPLY_MATRIX_EXT 0x8798 #define GL_OP_MOV_EXT 0x8799 #define GL_OUTPUT_VERTEX_EXT 0x879A #define GL_OUTPUT_COLOR0_EXT 0x879B #define GL_OUTPUT_COLOR1_EXT 0x879C #define GL_OUTPUT_TEXTURE_COORD0_EXT 0x879D #define GL_OUTPUT_TEXTURE_COORD1_EXT 0x879E #define GL_OUTPUT_TEXTURE_COORD2_EXT 0x879F #define GL_OUTPUT_TEXTURE_COORD3_EXT 0x87A0 #define GL_OUTPUT_TEXTURE_COORD4_EXT 0x87A1 #define GL_OUTPUT_TEXTURE_COORD5_EXT 0x87A2 #define GL_OUTPUT_TEXTURE_COORD6_EXT 0x87A3 #define GL_OUTPUT_TEXTURE_COORD7_EXT 0x87A4 #define GL_OUTPUT_TEXTURE_COORD8_EXT 0x87A5 #define GL_OUTPUT_TEXTURE_COORD9_EXT 0x87A6 #define GL_OUTPUT_TEXTURE_COORD10_EXT 0x87A7 #define GL_OUTPUT_TEXTURE_COORD11_EXT 0x87A8 #define GL_OUTPUT_TEXTURE_COORD12_EXT 0x87A9 #define GL_OUTPUT_TEXTURE_COORD13_EXT 0x87AA #define GL_OUTPUT_TEXTURE_COORD14_EXT 0x87AB #define GL_OUTPUT_TEXTURE_COORD15_EXT 0x87AC #define GL_OUTPUT_TEXTURE_COORD16_EXT 0x87AD #define GL_OUTPUT_TEXTURE_COORD17_EXT 0x87AE #define GL_OUTPUT_TEXTURE_COORD18_EXT 0x87AF #define GL_OUTPUT_TEXTURE_COORD19_EXT 0x87B0 #define GL_OUTPUT_TEXTURE_COORD20_EXT 0x87B1 #define GL_OUTPUT_TEXTURE_COORD21_EXT 0x87B2 #define GL_OUTPUT_TEXTURE_COORD22_EXT 0x87B3 #define GL_OUTPUT_TEXTURE_COORD23_EXT 0x87B4 #define GL_OUTPUT_TEXTURE_COORD24_EXT 0x87B5 #define GL_OUTPUT_TEXTURE_COORD25_EXT 0x87B6 #define GL_OUTPUT_TEXTURE_COORD26_EXT 0x87B7 #define GL_OUTPUT_TEXTURE_COORD27_EXT 0x87B8 #define GL_OUTPUT_TEXTURE_COORD28_EXT 0x87B9 #define GL_OUTPUT_TEXTURE_COORD29_EXT 0x87BA #define GL_OUTPUT_TEXTURE_COORD30_EXT 0x87BB #define GL_OUTPUT_TEXTURE_COORD31_EXT 0x87BC #define GL_OUTPUT_FOG_EXT 0x87BD #define GL_SCALAR_EXT 0x87BE #define GL_VECTOR_EXT 0x87BF #define GL_MATRIX_EXT 0x87C0 #define GL_VARIANT_EXT 0x87C1 #define GL_INVARIANT_EXT 0x87C2 #define GL_LOCAL_CONSTANT_EXT 0x87C3 #define GL_LOCAL_EXT 0x87C4 #define GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87C5 #define GL_MAX_VERTEX_SHADER_VARIANTS_EXT 0x87C6 #define GL_MAX_VERTEX_SHADER_INVARIANTS_EXT 0x87C7 #define GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87C8 #define GL_MAX_VERTEX_SHADER_LOCALS_EXT 0x87C9 #define GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CA #define GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT 0x87CB #define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87CC #define GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT 0x87CD #define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT 0x87CE #define GL_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CF #define GL_VERTEX_SHADER_VARIANTS_EXT 0x87D0 #define GL_VERTEX_SHADER_INVARIANTS_EXT 0x87D1 #define GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87D2 #define GL_VERTEX_SHADER_LOCALS_EXT 0x87D3 #define GL_VERTEX_SHADER_OPTIMIZED_EXT 0x87D4 #define GL_X_EXT 0x87D5 #define GL_Y_EXT 0x87D6 #define GL_Z_EXT 0x87D7 #define GL_W_EXT 0x87D8 #define GL_NEGATIVE_X_EXT 0x87D9 #define GL_NEGATIVE_Y_EXT 0x87DA #define GL_NEGATIVE_Z_EXT 0x87DB #define GL_NEGATIVE_W_EXT 0x87DC #define GL_ZERO_EXT 0x87DD #define GL_ONE_EXT 0x87DE #define GL_NEGATIVE_ONE_EXT 0x87DF #define GL_NORMALIZED_RANGE_EXT 0x87E0 #define GL_FULL_RANGE_EXT 0x87E1 #define GL_CURRENT_VERTEX_EXT 0x87E2 #define GL_MVP_MATRIX_EXT 0x87E3 #define GL_VARIANT_VALUE_EXT 0x87E4 #define GL_VARIANT_DATATYPE_EXT 0x87E5 #define GL_VARIANT_ARRAY_STRIDE_EXT 0x87E6 #define GL_VARIANT_ARRAY_TYPE_EXT 0x87E7 #define GL_VARIANT_ARRAY_EXT 0x87E8 #define GL_VARIANT_ARRAY_POINTER_EXT 0x87E9 #define GL_INVARIANT_VALUE_EXT 0x87EA #define GL_INVARIANT_DATATYPE_EXT 0x87EB #define GL_LOCAL_CONSTANT_VALUE_EXT 0x87EC #define GL_LOCAL_CONSTANT_DATATYPE_EXT 0x87ED #ifndef GLEE_H_DEFINED_glBeginVertexShaderEXT #define GLEE_H_DEFINED_glBeginVertexShaderEXT typedef void (APIENTRYP GLEEPFNGLBEGINVERTEXSHADEREXTPROC) (); GLEE_EXTERN GLEEPFNGLBEGINVERTEXSHADEREXTPROC GLeeFuncPtr_glBeginVertexShaderEXT; #define glBeginVertexShaderEXT GLeeFuncPtr_glBeginVertexShaderEXT #endif #ifndef GLEE_H_DEFINED_glEndVertexShaderEXT #define GLEE_H_DEFINED_glEndVertexShaderEXT typedef void (APIENTRYP GLEEPFNGLENDVERTEXSHADEREXTPROC) (); GLEE_EXTERN GLEEPFNGLENDVERTEXSHADEREXTPROC GLeeFuncPtr_glEndVertexShaderEXT; #define glEndVertexShaderEXT GLeeFuncPtr_glEndVertexShaderEXT #endif #ifndef GLEE_H_DEFINED_glBindVertexShaderEXT #define GLEE_H_DEFINED_glBindVertexShaderEXT typedef void (APIENTRYP GLEEPFNGLBINDVERTEXSHADEREXTPROC) (GLuint id); GLEE_EXTERN GLEEPFNGLBINDVERTEXSHADEREXTPROC GLeeFuncPtr_glBindVertexShaderEXT; #define glBindVertexShaderEXT GLeeFuncPtr_glBindVertexShaderEXT #endif #ifndef GLEE_H_DEFINED_glGenVertexShadersEXT #define GLEE_H_DEFINED_glGenVertexShadersEXT typedef GLuint (APIENTRYP GLEEPFNGLGENVERTEXSHADERSEXTPROC) (GLuint range); GLEE_EXTERN GLEEPFNGLGENVERTEXSHADERSEXTPROC GLeeFuncPtr_glGenVertexShadersEXT; #define glGenVertexShadersEXT GLeeFuncPtr_glGenVertexShadersEXT #endif #ifndef GLEE_H_DEFINED_glDeleteVertexShaderEXT #define GLEE_H_DEFINED_glDeleteVertexShaderEXT typedef void (APIENTRYP GLEEPFNGLDELETEVERTEXSHADEREXTPROC) (GLuint id); GLEE_EXTERN GLEEPFNGLDELETEVERTEXSHADEREXTPROC GLeeFuncPtr_glDeleteVertexShaderEXT; #define glDeleteVertexShaderEXT GLeeFuncPtr_glDeleteVertexShaderEXT #endif #ifndef GLEE_H_DEFINED_glShaderOp1EXT #define GLEE_H_DEFINED_glShaderOp1EXT typedef void (APIENTRYP GLEEPFNGLSHADEROP1EXTPROC) (GLenum op, GLuint res, GLuint arg1); GLEE_EXTERN GLEEPFNGLSHADEROP1EXTPROC GLeeFuncPtr_glShaderOp1EXT; #define glShaderOp1EXT GLeeFuncPtr_glShaderOp1EXT #endif #ifndef GLEE_H_DEFINED_glShaderOp2EXT #define GLEE_H_DEFINED_glShaderOp2EXT typedef void (APIENTRYP GLEEPFNGLSHADEROP2EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2); GLEE_EXTERN GLEEPFNGLSHADEROP2EXTPROC GLeeFuncPtr_glShaderOp2EXT; #define glShaderOp2EXT GLeeFuncPtr_glShaderOp2EXT #endif #ifndef GLEE_H_DEFINED_glShaderOp3EXT #define GLEE_H_DEFINED_glShaderOp3EXT typedef void (APIENTRYP GLEEPFNGLSHADEROP3EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3); GLEE_EXTERN GLEEPFNGLSHADEROP3EXTPROC GLeeFuncPtr_glShaderOp3EXT; #define glShaderOp3EXT GLeeFuncPtr_glShaderOp3EXT #endif #ifndef GLEE_H_DEFINED_glSwizzleEXT #define GLEE_H_DEFINED_glSwizzleEXT typedef void (APIENTRYP GLEEPFNGLSWIZZLEEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); GLEE_EXTERN GLEEPFNGLSWIZZLEEXTPROC GLeeFuncPtr_glSwizzleEXT; #define glSwizzleEXT GLeeFuncPtr_glSwizzleEXT #endif #ifndef GLEE_H_DEFINED_glWriteMaskEXT #define GLEE_H_DEFINED_glWriteMaskEXT typedef void (APIENTRYP GLEEPFNGLWRITEMASKEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); GLEE_EXTERN GLEEPFNGLWRITEMASKEXTPROC GLeeFuncPtr_glWriteMaskEXT; #define glWriteMaskEXT GLeeFuncPtr_glWriteMaskEXT #endif #ifndef GLEE_H_DEFINED_glInsertComponentEXT #define GLEE_H_DEFINED_glInsertComponentEXT typedef void (APIENTRYP GLEEPFNGLINSERTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num); GLEE_EXTERN GLEEPFNGLINSERTCOMPONENTEXTPROC GLeeFuncPtr_glInsertComponentEXT; #define glInsertComponentEXT GLeeFuncPtr_glInsertComponentEXT #endif #ifndef GLEE_H_DEFINED_glExtractComponentEXT #define GLEE_H_DEFINED_glExtractComponentEXT typedef void (APIENTRYP GLEEPFNGLEXTRACTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num); GLEE_EXTERN GLEEPFNGLEXTRACTCOMPONENTEXTPROC GLeeFuncPtr_glExtractComponentEXT; #define glExtractComponentEXT GLeeFuncPtr_glExtractComponentEXT #endif #ifndef GLEE_H_DEFINED_glGenSymbolsEXT #define GLEE_H_DEFINED_glGenSymbolsEXT typedef GLuint (APIENTRYP GLEEPFNGLGENSYMBOLSEXTPROC) (GLenum datatype, GLenum storagetype, GLenum range, GLuint components); GLEE_EXTERN GLEEPFNGLGENSYMBOLSEXTPROC GLeeFuncPtr_glGenSymbolsEXT; #define glGenSymbolsEXT GLeeFuncPtr_glGenSymbolsEXT #endif #ifndef GLEE_H_DEFINED_glSetInvariantEXT #define GLEE_H_DEFINED_glSetInvariantEXT typedef void (APIENTRYP GLEEPFNGLSETINVARIANTEXTPROC) (GLuint id, GLenum type, const GLvoid * addr); GLEE_EXTERN GLEEPFNGLSETINVARIANTEXTPROC GLeeFuncPtr_glSetInvariantEXT; #define glSetInvariantEXT GLeeFuncPtr_glSetInvariantEXT #endif #ifndef GLEE_H_DEFINED_glSetLocalConstantEXT #define GLEE_H_DEFINED_glSetLocalConstantEXT typedef void (APIENTRYP GLEEPFNGLSETLOCALCONSTANTEXTPROC) (GLuint id, GLenum type, const GLvoid * addr); GLEE_EXTERN GLEEPFNGLSETLOCALCONSTANTEXTPROC GLeeFuncPtr_glSetLocalConstantEXT; #define glSetLocalConstantEXT GLeeFuncPtr_glSetLocalConstantEXT #endif #ifndef GLEE_H_DEFINED_glVariantbvEXT #define GLEE_H_DEFINED_glVariantbvEXT typedef void (APIENTRYP GLEEPFNGLVARIANTBVEXTPROC) (GLuint id, const GLbyte * addr); GLEE_EXTERN GLEEPFNGLVARIANTBVEXTPROC GLeeFuncPtr_glVariantbvEXT; #define glVariantbvEXT GLeeFuncPtr_glVariantbvEXT #endif #ifndef GLEE_H_DEFINED_glVariantsvEXT #define GLEE_H_DEFINED_glVariantsvEXT typedef void (APIENTRYP GLEEPFNGLVARIANTSVEXTPROC) (GLuint id, const GLshort * addr); GLEE_EXTERN GLEEPFNGLVARIANTSVEXTPROC GLeeFuncPtr_glVariantsvEXT; #define glVariantsvEXT GLeeFuncPtr_glVariantsvEXT #endif #ifndef GLEE_H_DEFINED_glVariantivEXT #define GLEE_H_DEFINED_glVariantivEXT typedef void (APIENTRYP GLEEPFNGLVARIANTIVEXTPROC) (GLuint id, const GLint * addr); GLEE_EXTERN GLEEPFNGLVARIANTIVEXTPROC GLeeFuncPtr_glVariantivEXT; #define glVariantivEXT GLeeFuncPtr_glVariantivEXT #endif #ifndef GLEE_H_DEFINED_glVariantfvEXT #define GLEE_H_DEFINED_glVariantfvEXT typedef void (APIENTRYP GLEEPFNGLVARIANTFVEXTPROC) (GLuint id, const GLfloat * addr); GLEE_EXTERN GLEEPFNGLVARIANTFVEXTPROC GLeeFuncPtr_glVariantfvEXT; #define glVariantfvEXT GLeeFuncPtr_glVariantfvEXT #endif #ifndef GLEE_H_DEFINED_glVariantdvEXT #define GLEE_H_DEFINED_glVariantdvEXT typedef void (APIENTRYP GLEEPFNGLVARIANTDVEXTPROC) (GLuint id, const GLdouble * addr); GLEE_EXTERN GLEEPFNGLVARIANTDVEXTPROC GLeeFuncPtr_glVariantdvEXT; #define glVariantdvEXT GLeeFuncPtr_glVariantdvEXT #endif #ifndef GLEE_H_DEFINED_glVariantubvEXT #define GLEE_H_DEFINED_glVariantubvEXT typedef void (APIENTRYP GLEEPFNGLVARIANTUBVEXTPROC) (GLuint id, const GLubyte * addr); GLEE_EXTERN GLEEPFNGLVARIANTUBVEXTPROC GLeeFuncPtr_glVariantubvEXT; #define glVariantubvEXT GLeeFuncPtr_glVariantubvEXT #endif #ifndef GLEE_H_DEFINED_glVariantusvEXT #define GLEE_H_DEFINED_glVariantusvEXT typedef void (APIENTRYP GLEEPFNGLVARIANTUSVEXTPROC) (GLuint id, const GLushort * addr); GLEE_EXTERN GLEEPFNGLVARIANTUSVEXTPROC GLeeFuncPtr_glVariantusvEXT; #define glVariantusvEXT GLeeFuncPtr_glVariantusvEXT #endif #ifndef GLEE_H_DEFINED_glVariantuivEXT #define GLEE_H_DEFINED_glVariantuivEXT typedef void (APIENTRYP GLEEPFNGLVARIANTUIVEXTPROC) (GLuint id, const GLuint * addr); GLEE_EXTERN GLEEPFNGLVARIANTUIVEXTPROC GLeeFuncPtr_glVariantuivEXT; #define glVariantuivEXT GLeeFuncPtr_glVariantuivEXT #endif #ifndef GLEE_H_DEFINED_glVariantPointerEXT #define GLEE_H_DEFINED_glVariantPointerEXT typedef void (APIENTRYP GLEEPFNGLVARIANTPOINTEREXTPROC) (GLuint id, GLenum type, GLuint stride, const GLvoid * addr); GLEE_EXTERN GLEEPFNGLVARIANTPOINTEREXTPROC GLeeFuncPtr_glVariantPointerEXT; #define glVariantPointerEXT GLeeFuncPtr_glVariantPointerEXT #endif #ifndef GLEE_H_DEFINED_glEnableVariantClientStateEXT #define GLEE_H_DEFINED_glEnableVariantClientStateEXT typedef void (APIENTRYP GLEEPFNGLENABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id); GLEE_EXTERN GLEEPFNGLENABLEVARIANTCLIENTSTATEEXTPROC GLeeFuncPtr_glEnableVariantClientStateEXT; #define glEnableVariantClientStateEXT GLeeFuncPtr_glEnableVariantClientStateEXT #endif #ifndef GLEE_H_DEFINED_glDisableVariantClientStateEXT #define GLEE_H_DEFINED_glDisableVariantClientStateEXT typedef void (APIENTRYP GLEEPFNGLDISABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id); GLEE_EXTERN GLEEPFNGLDISABLEVARIANTCLIENTSTATEEXTPROC GLeeFuncPtr_glDisableVariantClientStateEXT; #define glDisableVariantClientStateEXT GLeeFuncPtr_glDisableVariantClientStateEXT #endif #ifndef GLEE_H_DEFINED_glBindLightParameterEXT #define GLEE_H_DEFINED_glBindLightParameterEXT typedef GLuint (APIENTRYP GLEEPFNGLBINDLIGHTPARAMETEREXTPROC) (GLenum light, GLenum value); GLEE_EXTERN GLEEPFNGLBINDLIGHTPARAMETEREXTPROC GLeeFuncPtr_glBindLightParameterEXT; #define glBindLightParameterEXT GLeeFuncPtr_glBindLightParameterEXT #endif #ifndef GLEE_H_DEFINED_glBindMaterialParameterEXT #define GLEE_H_DEFINED_glBindMaterialParameterEXT typedef GLuint (APIENTRYP GLEEPFNGLBINDMATERIALPARAMETEREXTPROC) (GLenum face, GLenum value); GLEE_EXTERN GLEEPFNGLBINDMATERIALPARAMETEREXTPROC GLeeFuncPtr_glBindMaterialParameterEXT; #define glBindMaterialParameterEXT GLeeFuncPtr_glBindMaterialParameterEXT #endif #ifndef GLEE_H_DEFINED_glBindTexGenParameterEXT #define GLEE_H_DEFINED_glBindTexGenParameterEXT typedef GLuint (APIENTRYP GLEEPFNGLBINDTEXGENPARAMETEREXTPROC) (GLenum unit, GLenum coord, GLenum value); GLEE_EXTERN GLEEPFNGLBINDTEXGENPARAMETEREXTPROC GLeeFuncPtr_glBindTexGenParameterEXT; #define glBindTexGenParameterEXT GLeeFuncPtr_glBindTexGenParameterEXT #endif #ifndef GLEE_H_DEFINED_glBindTextureUnitParameterEXT #define GLEE_H_DEFINED_glBindTextureUnitParameterEXT typedef GLuint (APIENTRYP GLEEPFNGLBINDTEXTUREUNITPARAMETEREXTPROC) (GLenum unit, GLenum value); GLEE_EXTERN GLEEPFNGLBINDTEXTUREUNITPARAMETEREXTPROC GLeeFuncPtr_glBindTextureUnitParameterEXT; #define glBindTextureUnitParameterEXT GLeeFuncPtr_glBindTextureUnitParameterEXT #endif #ifndef GLEE_H_DEFINED_glBindParameterEXT #define GLEE_H_DEFINED_glBindParameterEXT typedef GLuint (APIENTRYP GLEEPFNGLBINDPARAMETEREXTPROC) (GLenum value); GLEE_EXTERN GLEEPFNGLBINDPARAMETEREXTPROC GLeeFuncPtr_glBindParameterEXT; #define glBindParameterEXT GLeeFuncPtr_glBindParameterEXT #endif #ifndef GLEE_H_DEFINED_glIsVariantEnabledEXT #define GLEE_H_DEFINED_glIsVariantEnabledEXT typedef GLboolean (APIENTRYP GLEEPFNGLISVARIANTENABLEDEXTPROC) (GLuint id, GLenum cap); GLEE_EXTERN GLEEPFNGLISVARIANTENABLEDEXTPROC GLeeFuncPtr_glIsVariantEnabledEXT; #define glIsVariantEnabledEXT GLeeFuncPtr_glIsVariantEnabledEXT #endif #ifndef GLEE_H_DEFINED_glGetVariantBooleanvEXT #define GLEE_H_DEFINED_glGetVariantBooleanvEXT typedef void (APIENTRYP GLEEPFNGLGETVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean * data); GLEE_EXTERN GLEEPFNGLGETVARIANTBOOLEANVEXTPROC GLeeFuncPtr_glGetVariantBooleanvEXT; #define glGetVariantBooleanvEXT GLeeFuncPtr_glGetVariantBooleanvEXT #endif #ifndef GLEE_H_DEFINED_glGetVariantIntegervEXT #define GLEE_H_DEFINED_glGetVariantIntegervEXT typedef void (APIENTRYP GLEEPFNGLGETVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint * data); GLEE_EXTERN GLEEPFNGLGETVARIANTINTEGERVEXTPROC GLeeFuncPtr_glGetVariantIntegervEXT; #define glGetVariantIntegervEXT GLeeFuncPtr_glGetVariantIntegervEXT #endif #ifndef GLEE_H_DEFINED_glGetVariantFloatvEXT #define GLEE_H_DEFINED_glGetVariantFloatvEXT typedef void (APIENTRYP GLEEPFNGLGETVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat * data); GLEE_EXTERN GLEEPFNGLGETVARIANTFLOATVEXTPROC GLeeFuncPtr_glGetVariantFloatvEXT; #define glGetVariantFloatvEXT GLeeFuncPtr_glGetVariantFloatvEXT #endif #ifndef GLEE_H_DEFINED_glGetVariantPointervEXT #define GLEE_H_DEFINED_glGetVariantPointervEXT typedef void (APIENTRYP GLEEPFNGLGETVARIANTPOINTERVEXTPROC) (GLuint id, GLenum value, GLvoid* * data); GLEE_EXTERN GLEEPFNGLGETVARIANTPOINTERVEXTPROC GLeeFuncPtr_glGetVariantPointervEXT; #define glGetVariantPointervEXT GLeeFuncPtr_glGetVariantPointervEXT #endif #ifndef GLEE_H_DEFINED_glGetInvariantBooleanvEXT #define GLEE_H_DEFINED_glGetInvariantBooleanvEXT typedef void (APIENTRYP GLEEPFNGLGETINVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean * data); GLEE_EXTERN GLEEPFNGLGETINVARIANTBOOLEANVEXTPROC GLeeFuncPtr_glGetInvariantBooleanvEXT; #define glGetInvariantBooleanvEXT GLeeFuncPtr_glGetInvariantBooleanvEXT #endif #ifndef GLEE_H_DEFINED_glGetInvariantIntegervEXT #define GLEE_H_DEFINED_glGetInvariantIntegervEXT typedef void (APIENTRYP GLEEPFNGLGETINVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint * data); GLEE_EXTERN GLEEPFNGLGETINVARIANTINTEGERVEXTPROC GLeeFuncPtr_glGetInvariantIntegervEXT; #define glGetInvariantIntegervEXT GLeeFuncPtr_glGetInvariantIntegervEXT #endif #ifndef GLEE_H_DEFINED_glGetInvariantFloatvEXT #define GLEE_H_DEFINED_glGetInvariantFloatvEXT typedef void (APIENTRYP GLEEPFNGLGETINVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat * data); GLEE_EXTERN GLEEPFNGLGETINVARIANTFLOATVEXTPROC GLeeFuncPtr_glGetInvariantFloatvEXT; #define glGetInvariantFloatvEXT GLeeFuncPtr_glGetInvariantFloatvEXT #endif #ifndef GLEE_H_DEFINED_glGetLocalConstantBooleanvEXT #define GLEE_H_DEFINED_glGetLocalConstantBooleanvEXT typedef void (APIENTRYP GLEEPFNGLGETLOCALCONSTANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean * data); GLEE_EXTERN GLEEPFNGLGETLOCALCONSTANTBOOLEANVEXTPROC GLeeFuncPtr_glGetLocalConstantBooleanvEXT; #define glGetLocalConstantBooleanvEXT GLeeFuncPtr_glGetLocalConstantBooleanvEXT #endif #ifndef GLEE_H_DEFINED_glGetLocalConstantIntegervEXT #define GLEE_H_DEFINED_glGetLocalConstantIntegervEXT typedef void (APIENTRYP GLEEPFNGLGETLOCALCONSTANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint * data); GLEE_EXTERN GLEEPFNGLGETLOCALCONSTANTINTEGERVEXTPROC GLeeFuncPtr_glGetLocalConstantIntegervEXT; #define glGetLocalConstantIntegervEXT GLeeFuncPtr_glGetLocalConstantIntegervEXT #endif #ifndef GLEE_H_DEFINED_glGetLocalConstantFloatvEXT #define GLEE_H_DEFINED_glGetLocalConstantFloatvEXT typedef void (APIENTRYP GLEEPFNGLGETLOCALCONSTANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat * data); GLEE_EXTERN GLEEPFNGLGETLOCALCONSTANTFLOATVEXTPROC GLeeFuncPtr_glGetLocalConstantFloatvEXT; #define glGetLocalConstantFloatvEXT GLeeFuncPtr_glGetLocalConstantFloatvEXT #endif #endif /* GL_ATI_vertex_streams */ #ifndef GL_ATI_vertex_streams #define GL_ATI_vertex_streams 1 #define __GLEE_GL_ATI_vertex_streams 1 /* Constants */ #define GL_MAX_VERTEX_STREAMS_ATI 0x876B #define GL_VERTEX_STREAM0_ATI 0x876C #define GL_VERTEX_STREAM1_ATI 0x876D #define GL_VERTEX_STREAM2_ATI 0x876E #define GL_VERTEX_STREAM3_ATI 0x876F #define GL_VERTEX_STREAM4_ATI 0x8770 #define GL_VERTEX_STREAM5_ATI 0x8771 #define GL_VERTEX_STREAM6_ATI 0x8772 #define GL_VERTEX_STREAM7_ATI 0x8773 #define GL_VERTEX_SOURCE_ATI 0x8774 #ifndef GLEE_H_DEFINED_glVertexStream1sATI #define GLEE_H_DEFINED_glVertexStream1sATI typedef void (APIENTRYP GLEEPFNGLVERTEXSTREAM1SATIPROC) (GLenum stream, GLshort x); GLEE_EXTERN GLEEPFNGLVERTEXSTREAM1SATIPROC GLeeFuncPtr_glVertexStream1sATI; #define glVertexStream1sATI GLeeFuncPtr_glVertexStream1sATI #endif #ifndef GLEE_H_DEFINED_glVertexStream1svATI #define GLEE_H_DEFINED_glVertexStream1svATI typedef void (APIENTRYP GLEEPFNGLVERTEXSTREAM1SVATIPROC) (GLenum stream, const GLshort * coords); GLEE_EXTERN GLEEPFNGLVERTEXSTREAM1SVATIPROC GLeeFuncPtr_glVertexStream1svATI; #define glVertexStream1svATI GLeeFuncPtr_glVertexStream1svATI #endif #ifndef GLEE_H_DEFINED_glVertexStream1iATI #define GLEE_H_DEFINED_glVertexStream1iATI typedef void (APIENTRYP GLEEPFNGLVERTEXSTREAM1IATIPROC) (GLenum stream, GLint x); GLEE_EXTERN GLEEPFNGLVERTEXSTREAM1IATIPROC GLeeFuncPtr_glVertexStream1iATI; #define glVertexStream1iATI GLeeFuncPtr_glVertexStream1iATI #endif #ifndef GLEE_H_DEFINED_glVertexStream1ivATI #define GLEE_H_DEFINED_glVertexStream1ivATI typedef void (APIENTRYP GLEEPFNGLVERTEXSTREAM1IVATIPROC) (GLenum stream, const GLint * coords); GLEE_EXTERN GLEEPFNGLVERTEXSTREAM1IVATIPROC GLeeFuncPtr_glVertexStream1ivATI; #define glVertexStream1ivATI GLeeFuncPtr_glVertexStream1ivATI #endif #ifndef GLEE_H_DEFINED_glVertexStream1fATI #define GLEE_H_DEFINED_glVertexStream1fATI typedef void (APIENTRYP GLEEPFNGLVERTEXSTREAM1FATIPROC) (GLenum stream, GLfloat x); GLEE_EXTERN GLEEPFNGLVERTEXSTREAM1FATIPROC GLeeFuncPtr_glVertexStream1fATI; #define glVertexStream1fATI GLeeFuncPtr_glVertexStream1fATI #endif #ifndef GLEE_H_DEFINED_glVertexStream1fvATI #define GLEE_H_DEFINED_glVertexStream1fvATI typedef void (APIENTRYP GLEEPFNGLVERTEXSTREAM1FVATIPROC) (GLenum stream, const GLfloat * coords); GLEE_EXTERN GLEEPFNGLVERTEXSTREAM1FVATIPROC GLeeFuncPtr_glVertexStream1fvATI; #define glVertexStream1fvATI GLeeFuncPtr_glVertexStream1fvATI #endif #ifndef GLEE_H_DEFINED_glVertexStream1dATI #define GLEE_H_DEFINED_glVertexStream1dATI typedef void (APIENTRYP GLEEPFNGLVERTEXSTREAM1DATIPROC) (GLenum stream, GLdouble x); GLEE_EXTERN GLEEPFNGLVERTEXSTREAM1DATIPROC GLeeFuncPtr_glVertexStream1dATI; #define glVertexStream1dATI GLeeFuncPtr_glVertexStream1dATI #endif #ifndef GLEE_H_DEFINED_glVertexStream1dvATI #define GLEE_H_DEFINED_glVertexStream1dvATI typedef void (APIENTRYP GLEEPFNGLVERTEXSTREAM1DVATIPROC) (GLenum stream, const GLdouble * coords); GLEE_EXTERN GLEEPFNGLVERTEXSTREAM1DVATIPROC GLeeFuncPtr_glVertexStream1dvATI; #define glVertexStream1dvATI GLeeFuncPtr_glVertexStream1dvATI #endif #ifndef GLEE_H_DEFINED_glVertexStream2sATI #define GLEE_H_DEFINED_glVertexStream2sATI typedef void (APIENTRYP GLEEPFNGLVERTEXSTREAM2SATIPROC) (GLenum stream, GLshort x, GLshort y); GLEE_EXTERN GLEEPFNGLVERTEXSTREAM2SATIPROC GLeeFuncPtr_glVertexStream2sATI; #define glVertexStream2sATI GLeeFuncPtr_glVertexStream2sATI #endif #ifndef GLEE_H_DEFINED_glVertexStream2svATI #define GLEE_H_DEFINED_glVertexStream2svATI typedef void (APIENTRYP GLEEPFNGLVERTEXSTREAM2SVATIPROC) (GLenum stream, const GLshort * coords); GLEE_EXTERN GLEEPFNGLVERTEXSTREAM2SVATIPROC GLeeFuncPtr_glVertexStream2svATI; #define glVertexStream2svATI GLeeFuncPtr_glVertexStream2svATI #endif #ifndef GLEE_H_DEFINED_glVertexStream2iATI #define GLEE_H_DEFINED_glVertexStream2iATI typedef void (APIENTRYP GLEEPFNGLVERTEXSTREAM2IATIPROC) (GLenum stream, GLint x, GLint y); GLEE_EXTERN GLEEPFNGLVERTEXSTREAM2IATIPROC GLeeFuncPtr_glVertexStream2iATI; #define glVertexStream2iATI GLeeFuncPtr_glVertexStream2iATI #endif #ifndef GLEE_H_DEFINED_glVertexStream2ivATI #define GLEE_H_DEFINED_glVertexStream2ivATI typedef void (APIENTRYP GLEEPFNGLVERTEXSTREAM2IVATIPROC) (GLenum stream, const GLint * coords); GLEE_EXTERN GLEEPFNGLVERTEXSTREAM2IVATIPROC GLeeFuncPtr_glVertexStream2ivATI; #define glVertexStream2ivATI GLeeFuncPtr_glVertexStream2ivATI #endif #ifndef GLEE_H_DEFINED_glVertexStream2fATI #define GLEE_H_DEFINED_glVertexStream2fATI typedef void (APIENTRYP GLEEPFNGLVERTEXSTREAM2FATIPROC) (GLenum stream, GLfloat x, GLfloat y); GLEE_EXTERN GLEEPFNGLVERTEXSTREAM2FATIPROC GLeeFuncPtr_glVertexStream2fATI; #define glVertexStream2fATI GLeeFuncPtr_glVertexStream2fATI #endif #ifndef GLEE_H_DEFINED_glVertexStream2fvATI #define GLEE_H_DEFINED_glVertexStream2fvATI typedef void (APIENTRYP GLEEPFNGLVERTEXSTREAM2FVATIPROC) (GLenum stream, const GLfloat * coords); GLEE_EXTERN GLEEPFNGLVERTEXSTREAM2FVATIPROC GLeeFuncPtr_glVertexStream2fvATI; #define glVertexStream2fvATI GLeeFuncPtr_glVertexStream2fvATI #endif #ifndef GLEE_H_DEFINED_glVertexStream2dATI #define GLEE_H_DEFINED_glVertexStream2dATI typedef void (APIENTRYP GLEEPFNGLVERTEXSTREAM2DATIPROC) (GLenum stream, GLdouble x, GLdouble y); GLEE_EXTERN GLEEPFNGLVERTEXSTREAM2DATIPROC GLeeFuncPtr_glVertexStream2dATI; #define glVertexStream2dATI GLeeFuncPtr_glVertexStream2dATI #endif #ifndef GLEE_H_DEFINED_glVertexStream2dvATI #define GLEE_H_DEFINED_glVertexStream2dvATI typedef void (APIENTRYP GLEEPFNGLVERTEXSTREAM2DVATIPROC) (GLenum stream, const GLdouble * coords); GLEE_EXTERN GLEEPFNGLVERTEXSTREAM2DVATIPROC GLeeFuncPtr_glVertexStream2dvATI; #define glVertexStream2dvATI GLeeFuncPtr_glVertexStream2dvATI #endif #ifndef GLEE_H_DEFINED_glVertexStream3sATI #define GLEE_H_DEFINED_glVertexStream3sATI typedef void (APIENTRYP GLEEPFNGLVERTEXSTREAM3SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z); GLEE_EXTERN GLEEPFNGLVERTEXSTREAM3SATIPROC GLeeFuncPtr_glVertexStream3sATI; #define glVertexStream3sATI GLeeFuncPtr_glVertexStream3sATI #endif #ifndef GLEE_H_DEFINED_glVertexStream3svATI #define GLEE_H_DEFINED_glVertexStream3svATI typedef void (APIENTRYP GLEEPFNGLVERTEXSTREAM3SVATIPROC) (GLenum stream, const GLshort * coords); GLEE_EXTERN GLEEPFNGLVERTEXSTREAM3SVATIPROC GLeeFuncPtr_glVertexStream3svATI; #define glVertexStream3svATI GLeeFuncPtr_glVertexStream3svATI #endif #ifndef GLEE_H_DEFINED_glVertexStream3iATI #define GLEE_H_DEFINED_glVertexStream3iATI typedef void (APIENTRYP GLEEPFNGLVERTEXSTREAM3IATIPROC) (GLenum stream, GLint x, GLint y, GLint z); GLEE_EXTERN GLEEPFNGLVERTEXSTREAM3IATIPROC GLeeFuncPtr_glVertexStream3iATI; #define glVertexStream3iATI GLeeFuncPtr_glVertexStream3iATI #endif #ifndef GLEE_H_DEFINED_glVertexStream3ivATI #define GLEE_H_DEFINED_glVertexStream3ivATI typedef void (APIENTRYP GLEEPFNGLVERTEXSTREAM3IVATIPROC) (GLenum stream, const GLint * coords); GLEE_EXTERN GLEEPFNGLVERTEXSTREAM3IVATIPROC GLeeFuncPtr_glVertexStream3ivATI; #define glVertexStream3ivATI GLeeFuncPtr_glVertexStream3ivATI #endif #ifndef GLEE_H_DEFINED_glVertexStream3fATI #define GLEE_H_DEFINED_glVertexStream3fATI typedef void (APIENTRYP GLEEPFNGLVERTEXSTREAM3FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z); GLEE_EXTERN GLEEPFNGLVERTEXSTREAM3FATIPROC GLeeFuncPtr_glVertexStream3fATI; #define glVertexStream3fATI GLeeFuncPtr_glVertexStream3fATI #endif #ifndef GLEE_H_DEFINED_glVertexStream3fvATI #define GLEE_H_DEFINED_glVertexStream3fvATI typedef void (APIENTRYP GLEEPFNGLVERTEXSTREAM3FVATIPROC) (GLenum stream, const GLfloat * coords); GLEE_EXTERN GLEEPFNGLVERTEXSTREAM3FVATIPROC GLeeFuncPtr_glVertexStream3fvATI; #define glVertexStream3fvATI GLeeFuncPtr_glVertexStream3fvATI #endif #ifndef GLEE_H_DEFINED_glVertexStream3dATI #define GLEE_H_DEFINED_glVertexStream3dATI typedef void (APIENTRYP GLEEPFNGLVERTEXSTREAM3DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z); GLEE_EXTERN GLEEPFNGLVERTEXSTREAM3DATIPROC GLeeFuncPtr_glVertexStream3dATI; #define glVertexStream3dATI GLeeFuncPtr_glVertexStream3dATI #endif #ifndef GLEE_H_DEFINED_glVertexStream3dvATI #define GLEE_H_DEFINED_glVertexStream3dvATI typedef void (APIENTRYP GLEEPFNGLVERTEXSTREAM3DVATIPROC) (GLenum stream, const GLdouble * coords); GLEE_EXTERN GLEEPFNGLVERTEXSTREAM3DVATIPROC GLeeFuncPtr_glVertexStream3dvATI; #define glVertexStream3dvATI GLeeFuncPtr_glVertexStream3dvATI #endif #ifndef GLEE_H_DEFINED_glVertexStream4sATI #define GLEE_H_DEFINED_glVertexStream4sATI typedef void (APIENTRYP GLEEPFNGLVERTEXSTREAM4SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w); GLEE_EXTERN GLEEPFNGLVERTEXSTREAM4SATIPROC GLeeFuncPtr_glVertexStream4sATI; #define glVertexStream4sATI GLeeFuncPtr_glVertexStream4sATI #endif #ifndef GLEE_H_DEFINED_glVertexStream4svATI #define GLEE_H_DEFINED_glVertexStream4svATI typedef void (APIENTRYP GLEEPFNGLVERTEXSTREAM4SVATIPROC) (GLenum stream, const GLshort * coords); GLEE_EXTERN GLEEPFNGLVERTEXSTREAM4SVATIPROC GLeeFuncPtr_glVertexStream4svATI; #define glVertexStream4svATI GLeeFuncPtr_glVertexStream4svATI #endif #ifndef GLEE_H_DEFINED_glVertexStream4iATI #define GLEE_H_DEFINED_glVertexStream4iATI typedef void (APIENTRYP GLEEPFNGLVERTEXSTREAM4IATIPROC) (GLenum stream, GLint x, GLint y, GLint z, GLint w); GLEE_EXTERN GLEEPFNGLVERTEXSTREAM4IATIPROC GLeeFuncPtr_glVertexStream4iATI; #define glVertexStream4iATI GLeeFuncPtr_glVertexStream4iATI #endif #ifndef GLEE_H_DEFINED_glVertexStream4ivATI #define GLEE_H_DEFINED_glVertexStream4ivATI typedef void (APIENTRYP GLEEPFNGLVERTEXSTREAM4IVATIPROC) (GLenum stream, const GLint * coords); GLEE_EXTERN GLEEPFNGLVERTEXSTREAM4IVATIPROC GLeeFuncPtr_glVertexStream4ivATI; #define glVertexStream4ivATI GLeeFuncPtr_glVertexStream4ivATI #endif #ifndef GLEE_H_DEFINED_glVertexStream4fATI #define GLEE_H_DEFINED_glVertexStream4fATI typedef void (APIENTRYP GLEEPFNGLVERTEXSTREAM4FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w); GLEE_EXTERN GLEEPFNGLVERTEXSTREAM4FATIPROC GLeeFuncPtr_glVertexStream4fATI; #define glVertexStream4fATI GLeeFuncPtr_glVertexStream4fATI #endif #ifndef GLEE_H_DEFINED_glVertexStream4fvATI #define GLEE_H_DEFINED_glVertexStream4fvATI typedef void (APIENTRYP GLEEPFNGLVERTEXSTREAM4FVATIPROC) (GLenum stream, const GLfloat * coords); GLEE_EXTERN GLEEPFNGLVERTEXSTREAM4FVATIPROC GLeeFuncPtr_glVertexStream4fvATI; #define glVertexStream4fvATI GLeeFuncPtr_glVertexStream4fvATI #endif #ifndef GLEE_H_DEFINED_glVertexStream4dATI #define GLEE_H_DEFINED_glVertexStream4dATI typedef void (APIENTRYP GLEEPFNGLVERTEXSTREAM4DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLEE_EXTERN GLEEPFNGLVERTEXSTREAM4DATIPROC GLeeFuncPtr_glVertexStream4dATI; #define glVertexStream4dATI GLeeFuncPtr_glVertexStream4dATI #endif #ifndef GLEE_H_DEFINED_glVertexStream4dvATI #define GLEE_H_DEFINED_glVertexStream4dvATI typedef void (APIENTRYP GLEEPFNGLVERTEXSTREAM4DVATIPROC) (GLenum stream, const GLdouble * coords); GLEE_EXTERN GLEEPFNGLVERTEXSTREAM4DVATIPROC GLeeFuncPtr_glVertexStream4dvATI; #define glVertexStream4dvATI GLeeFuncPtr_glVertexStream4dvATI #endif #ifndef GLEE_H_DEFINED_glNormalStream3bATI #define GLEE_H_DEFINED_glNormalStream3bATI typedef void (APIENTRYP GLEEPFNGLNORMALSTREAM3BATIPROC) (GLenum stream, GLbyte nx, GLbyte ny, GLbyte nz); GLEE_EXTERN GLEEPFNGLNORMALSTREAM3BATIPROC GLeeFuncPtr_glNormalStream3bATI; #define glNormalStream3bATI GLeeFuncPtr_glNormalStream3bATI #endif #ifndef GLEE_H_DEFINED_glNormalStream3bvATI #define GLEE_H_DEFINED_glNormalStream3bvATI typedef void (APIENTRYP GLEEPFNGLNORMALSTREAM3BVATIPROC) (GLenum stream, const GLbyte * coords); GLEE_EXTERN GLEEPFNGLNORMALSTREAM3BVATIPROC GLeeFuncPtr_glNormalStream3bvATI; #define glNormalStream3bvATI GLeeFuncPtr_glNormalStream3bvATI #endif #ifndef GLEE_H_DEFINED_glNormalStream3sATI #define GLEE_H_DEFINED_glNormalStream3sATI typedef void (APIENTRYP GLEEPFNGLNORMALSTREAM3SATIPROC) (GLenum stream, GLshort nx, GLshort ny, GLshort nz); GLEE_EXTERN GLEEPFNGLNORMALSTREAM3SATIPROC GLeeFuncPtr_glNormalStream3sATI; #define glNormalStream3sATI GLeeFuncPtr_glNormalStream3sATI #endif #ifndef GLEE_H_DEFINED_glNormalStream3svATI #define GLEE_H_DEFINED_glNormalStream3svATI typedef void (APIENTRYP GLEEPFNGLNORMALSTREAM3SVATIPROC) (GLenum stream, const GLshort * coords); GLEE_EXTERN GLEEPFNGLNORMALSTREAM3SVATIPROC GLeeFuncPtr_glNormalStream3svATI; #define glNormalStream3svATI GLeeFuncPtr_glNormalStream3svATI #endif #ifndef GLEE_H_DEFINED_glNormalStream3iATI #define GLEE_H_DEFINED_glNormalStream3iATI typedef void (APIENTRYP GLEEPFNGLNORMALSTREAM3IATIPROC) (GLenum stream, GLint nx, GLint ny, GLint nz); GLEE_EXTERN GLEEPFNGLNORMALSTREAM3IATIPROC GLeeFuncPtr_glNormalStream3iATI; #define glNormalStream3iATI GLeeFuncPtr_glNormalStream3iATI #endif #ifndef GLEE_H_DEFINED_glNormalStream3ivATI #define GLEE_H_DEFINED_glNormalStream3ivATI typedef void (APIENTRYP GLEEPFNGLNORMALSTREAM3IVATIPROC) (GLenum stream, const GLint * coords); GLEE_EXTERN GLEEPFNGLNORMALSTREAM3IVATIPROC GLeeFuncPtr_glNormalStream3ivATI; #define glNormalStream3ivATI GLeeFuncPtr_glNormalStream3ivATI #endif #ifndef GLEE_H_DEFINED_glNormalStream3fATI #define GLEE_H_DEFINED_glNormalStream3fATI typedef void (APIENTRYP GLEEPFNGLNORMALSTREAM3FATIPROC) (GLenum stream, GLfloat nx, GLfloat ny, GLfloat nz); GLEE_EXTERN GLEEPFNGLNORMALSTREAM3FATIPROC GLeeFuncPtr_glNormalStream3fATI; #define glNormalStream3fATI GLeeFuncPtr_glNormalStream3fATI #endif #ifndef GLEE_H_DEFINED_glNormalStream3fvATI #define GLEE_H_DEFINED_glNormalStream3fvATI typedef void (APIENTRYP GLEEPFNGLNORMALSTREAM3FVATIPROC) (GLenum stream, const GLfloat * coords); GLEE_EXTERN GLEEPFNGLNORMALSTREAM3FVATIPROC GLeeFuncPtr_glNormalStream3fvATI; #define glNormalStream3fvATI GLeeFuncPtr_glNormalStream3fvATI #endif #ifndef GLEE_H_DEFINED_glNormalStream3dATI #define GLEE_H_DEFINED_glNormalStream3dATI typedef void (APIENTRYP GLEEPFNGLNORMALSTREAM3DATIPROC) (GLenum stream, GLdouble nx, GLdouble ny, GLdouble nz); GLEE_EXTERN GLEEPFNGLNORMALSTREAM3DATIPROC GLeeFuncPtr_glNormalStream3dATI; #define glNormalStream3dATI GLeeFuncPtr_glNormalStream3dATI #endif #ifndef GLEE_H_DEFINED_glNormalStream3dvATI #define GLEE_H_DEFINED_glNormalStream3dvATI typedef void (APIENTRYP GLEEPFNGLNORMALSTREAM3DVATIPROC) (GLenum stream, const GLdouble * coords); GLEE_EXTERN GLEEPFNGLNORMALSTREAM3DVATIPROC GLeeFuncPtr_glNormalStream3dvATI; #define glNormalStream3dvATI GLeeFuncPtr_glNormalStream3dvATI #endif #ifndef GLEE_H_DEFINED_glClientActiveVertexStreamATI #define GLEE_H_DEFINED_glClientActiveVertexStreamATI typedef void (APIENTRYP GLEEPFNGLCLIENTACTIVEVERTEXSTREAMATIPROC) (GLenum stream); GLEE_EXTERN GLEEPFNGLCLIENTACTIVEVERTEXSTREAMATIPROC GLeeFuncPtr_glClientActiveVertexStreamATI; #define glClientActiveVertexStreamATI GLeeFuncPtr_glClientActiveVertexStreamATI #endif #ifndef GLEE_H_DEFINED_glVertexBlendEnviATI #define GLEE_H_DEFINED_glVertexBlendEnviATI typedef void (APIENTRYP GLEEPFNGLVERTEXBLENDENVIATIPROC) (GLenum pname, GLint param); GLEE_EXTERN GLEEPFNGLVERTEXBLENDENVIATIPROC GLeeFuncPtr_glVertexBlendEnviATI; #define glVertexBlendEnviATI GLeeFuncPtr_glVertexBlendEnviATI #endif #ifndef GLEE_H_DEFINED_glVertexBlendEnvfATI #define GLEE_H_DEFINED_glVertexBlendEnvfATI typedef void (APIENTRYP GLEEPFNGLVERTEXBLENDENVFATIPROC) (GLenum pname, GLfloat param); GLEE_EXTERN GLEEPFNGLVERTEXBLENDENVFATIPROC GLeeFuncPtr_glVertexBlendEnvfATI; #define glVertexBlendEnvfATI GLeeFuncPtr_glVertexBlendEnvfATI #endif #endif /* GL_ATI_element_array */ #ifndef GL_ATI_element_array #define GL_ATI_element_array 1 #define __GLEE_GL_ATI_element_array 1 /* Constants */ #define GL_ELEMENT_ARRAY_ATI 0x8768 #define GL_ELEMENT_ARRAY_TYPE_ATI 0x8769 #define GL_ELEMENT_ARRAY_POINTER_ATI 0x876A #ifndef GLEE_H_DEFINED_glElementPointerATI #define GLEE_H_DEFINED_glElementPointerATI typedef void (APIENTRYP GLEEPFNGLELEMENTPOINTERATIPROC) (GLenum type, const GLvoid * pointer); GLEE_EXTERN GLEEPFNGLELEMENTPOINTERATIPROC GLeeFuncPtr_glElementPointerATI; #define glElementPointerATI GLeeFuncPtr_glElementPointerATI #endif #ifndef GLEE_H_DEFINED_glDrawElementArrayATI #define GLEE_H_DEFINED_glDrawElementArrayATI typedef void (APIENTRYP GLEEPFNGLDRAWELEMENTARRAYATIPROC) (GLenum mode, GLsizei count); GLEE_EXTERN GLEEPFNGLDRAWELEMENTARRAYATIPROC GLeeFuncPtr_glDrawElementArrayATI; #define glDrawElementArrayATI GLeeFuncPtr_glDrawElementArrayATI #endif #ifndef GLEE_H_DEFINED_glDrawRangeElementArrayATI #define GLEE_H_DEFINED_glDrawRangeElementArrayATI typedef void (APIENTRYP GLEEPFNGLDRAWRANGEELEMENTARRAYATIPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count); GLEE_EXTERN GLEEPFNGLDRAWRANGEELEMENTARRAYATIPROC GLeeFuncPtr_glDrawRangeElementArrayATI; #define glDrawRangeElementArrayATI GLeeFuncPtr_glDrawRangeElementArrayATI #endif #endif /* GL_SUN_mesh_array */ #ifndef GL_SUN_mesh_array #define GL_SUN_mesh_array 1 #define __GLEE_GL_SUN_mesh_array 1 /* Constants */ #define GL_QUAD_MESH_SUN 0x8614 #define GL_TRIANGLE_MESH_SUN 0x8615 #ifndef GLEE_H_DEFINED_glDrawMeshArraysSUN #define GLEE_H_DEFINED_glDrawMeshArraysSUN typedef void (APIENTRYP GLEEPFNGLDRAWMESHARRAYSSUNPROC) (GLenum mode, GLint first, GLsizei count, GLsizei width); GLEE_EXTERN GLEEPFNGLDRAWMESHARRAYSSUNPROC GLeeFuncPtr_glDrawMeshArraysSUN; #define glDrawMeshArraysSUN GLeeFuncPtr_glDrawMeshArraysSUN #endif #endif /* GL_SUN_slice_accum */ #ifndef GL_SUN_slice_accum #define GL_SUN_slice_accum 1 #define __GLEE_GL_SUN_slice_accum 1 /* Constants */ #define GL_SLICE_ACCUM_SUN 0x85CC #endif /* GL_NV_multisample_filter_hint */ #ifndef GL_NV_multisample_filter_hint #define GL_NV_multisample_filter_hint 1 #define __GLEE_GL_NV_multisample_filter_hint 1 /* Constants */ #define GL_MULTISAMPLE_FILTER_HINT_NV 0x8534 #endif /* GL_NV_depth_clamp */ #ifndef GL_NV_depth_clamp #define GL_NV_depth_clamp 1 #define __GLEE_GL_NV_depth_clamp 1 /* Constants */ #define GL_DEPTH_CLAMP_NV 0x864F #endif /* GL_NV_occlusion_query */ #ifndef GL_NV_occlusion_query #define GL_NV_occlusion_query 1 #define __GLEE_GL_NV_occlusion_query 1 /* Constants */ #define GL_PIXEL_COUNTER_BITS_NV 0x8864 #define GL_CURRENT_OCCLUSION_QUERY_ID_NV 0x8865 #define GL_PIXEL_COUNT_NV 0x8866 #define GL_PIXEL_COUNT_AVAILABLE_NV 0x8867 #ifndef GLEE_H_DEFINED_glGenOcclusionQueriesNV #define GLEE_H_DEFINED_glGenOcclusionQueriesNV typedef void (APIENTRYP GLEEPFNGLGENOCCLUSIONQUERIESNVPROC) (GLsizei n, GLuint * ids); GLEE_EXTERN GLEEPFNGLGENOCCLUSIONQUERIESNVPROC GLeeFuncPtr_glGenOcclusionQueriesNV; #define glGenOcclusionQueriesNV GLeeFuncPtr_glGenOcclusionQueriesNV #endif #ifndef GLEE_H_DEFINED_glDeleteOcclusionQueriesNV #define GLEE_H_DEFINED_glDeleteOcclusionQueriesNV typedef void (APIENTRYP GLEEPFNGLDELETEOCCLUSIONQUERIESNVPROC) (GLsizei n, const GLuint * ids); GLEE_EXTERN GLEEPFNGLDELETEOCCLUSIONQUERIESNVPROC GLeeFuncPtr_glDeleteOcclusionQueriesNV; #define glDeleteOcclusionQueriesNV GLeeFuncPtr_glDeleteOcclusionQueriesNV #endif #ifndef GLEE_H_DEFINED_glIsOcclusionQueryNV #define GLEE_H_DEFINED_glIsOcclusionQueryNV typedef GLboolean (APIENTRYP GLEEPFNGLISOCCLUSIONQUERYNVPROC) (GLuint id); GLEE_EXTERN GLEEPFNGLISOCCLUSIONQUERYNVPROC GLeeFuncPtr_glIsOcclusionQueryNV; #define glIsOcclusionQueryNV GLeeFuncPtr_glIsOcclusionQueryNV #endif #ifndef GLEE_H_DEFINED_glBeginOcclusionQueryNV #define GLEE_H_DEFINED_glBeginOcclusionQueryNV typedef void (APIENTRYP GLEEPFNGLBEGINOCCLUSIONQUERYNVPROC) (GLuint id); GLEE_EXTERN GLEEPFNGLBEGINOCCLUSIONQUERYNVPROC GLeeFuncPtr_glBeginOcclusionQueryNV; #define glBeginOcclusionQueryNV GLeeFuncPtr_glBeginOcclusionQueryNV #endif #ifndef GLEE_H_DEFINED_glEndOcclusionQueryNV #define GLEE_H_DEFINED_glEndOcclusionQueryNV typedef void (APIENTRYP GLEEPFNGLENDOCCLUSIONQUERYNVPROC) (); GLEE_EXTERN GLEEPFNGLENDOCCLUSIONQUERYNVPROC GLeeFuncPtr_glEndOcclusionQueryNV; #define glEndOcclusionQueryNV GLeeFuncPtr_glEndOcclusionQueryNV #endif #ifndef GLEE_H_DEFINED_glGetOcclusionQueryivNV #define GLEE_H_DEFINED_glGetOcclusionQueryivNV typedef void (APIENTRYP GLEEPFNGLGETOCCLUSIONQUERYIVNVPROC) (GLuint id, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETOCCLUSIONQUERYIVNVPROC GLeeFuncPtr_glGetOcclusionQueryivNV; #define glGetOcclusionQueryivNV GLeeFuncPtr_glGetOcclusionQueryivNV #endif #ifndef GLEE_H_DEFINED_glGetOcclusionQueryuivNV #define GLEE_H_DEFINED_glGetOcclusionQueryuivNV typedef void (APIENTRYP GLEEPFNGLGETOCCLUSIONQUERYUIVNVPROC) (GLuint id, GLenum pname, GLuint * params); GLEE_EXTERN GLEEPFNGLGETOCCLUSIONQUERYUIVNVPROC GLeeFuncPtr_glGetOcclusionQueryuivNV; #define glGetOcclusionQueryuivNV GLeeFuncPtr_glGetOcclusionQueryuivNV #endif #endif /* GL_NV_point_sprite */ #ifndef GL_NV_point_sprite #define GL_NV_point_sprite 1 #define __GLEE_GL_NV_point_sprite 1 /* Constants */ #define GL_POINT_SPRITE_NV 0x8861 #define GL_COORD_REPLACE_NV 0x8862 #define GL_POINT_SPRITE_R_MODE_NV 0x8863 #ifndef GLEE_H_DEFINED_glPointParameteriNV #define GLEE_H_DEFINED_glPointParameteriNV typedef void (APIENTRYP GLEEPFNGLPOINTPARAMETERINVPROC) (GLenum pname, GLint param); GLEE_EXTERN GLEEPFNGLPOINTPARAMETERINVPROC GLeeFuncPtr_glPointParameteriNV; #define glPointParameteriNV GLeeFuncPtr_glPointParameteriNV #endif #ifndef GLEE_H_DEFINED_glPointParameterivNV #define GLEE_H_DEFINED_glPointParameterivNV typedef void (APIENTRYP GLEEPFNGLPOINTPARAMETERIVNVPROC) (GLenum pname, const GLint * params); GLEE_EXTERN GLEEPFNGLPOINTPARAMETERIVNVPROC GLeeFuncPtr_glPointParameterivNV; #define glPointParameterivNV GLeeFuncPtr_glPointParameterivNV #endif #endif /* GL_NV_texture_shader3 */ #ifndef GL_NV_texture_shader3 #define GL_NV_texture_shader3 1 #define __GLEE_GL_NV_texture_shader3 1 /* Constants */ #define GL_OFFSET_PROJECTIVE_TEXTURE_2D_NV 0x8850 #define GL_OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV 0x8851 #define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8852 #define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV 0x8853 #define GL_OFFSET_HILO_TEXTURE_2D_NV 0x8854 #define GL_OFFSET_HILO_TEXTURE_RECTANGLE_NV 0x8855 #define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV 0x8856 #define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8857 #define GL_DEPENDENT_HILO_TEXTURE_2D_NV 0x8858 #define GL_DEPENDENT_RGB_TEXTURE_3D_NV 0x8859 #define GL_DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV 0x885A #define GL_DOT_PRODUCT_PASS_THROUGH_NV 0x885B #define GL_DOT_PRODUCT_TEXTURE_1D_NV 0x885C #define GL_DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV 0x885D #define GL_HILO8_NV 0x885E #define GL_SIGNED_HILO8_NV 0x885F #define GL_FORCE_BLUE_TO_ONE_NV 0x8860 #endif /* GL_NV_vertex_program1_1 */ #ifndef GL_NV_vertex_program1_1 #define GL_NV_vertex_program1_1 1 #define __GLEE_GL_NV_vertex_program1_1 1 /* Constants */ #endif /* GL_EXT_shadow_funcs */ #ifndef GL_EXT_shadow_funcs #define GL_EXT_shadow_funcs 1 #define __GLEE_GL_EXT_shadow_funcs 1 /* Constants */ #endif /* GL_EXT_stencil_two_side */ #ifndef GL_EXT_stencil_two_side #define GL_EXT_stencil_two_side 1 #define __GLEE_GL_EXT_stencil_two_side 1 /* Constants */ #define GL_STENCIL_TEST_TWO_SIDE_EXT 0x8910 #define GL_ACTIVE_STENCIL_FACE_EXT 0x8911 #ifndef GLEE_H_DEFINED_glActiveStencilFaceEXT #define GLEE_H_DEFINED_glActiveStencilFaceEXT typedef void (APIENTRYP GLEEPFNGLACTIVESTENCILFACEEXTPROC) (GLenum face); GLEE_EXTERN GLEEPFNGLACTIVESTENCILFACEEXTPROC GLeeFuncPtr_glActiveStencilFaceEXT; #define glActiveStencilFaceEXT GLeeFuncPtr_glActiveStencilFaceEXT #endif #endif /* GL_ATI_text_fragment_shader */ #ifndef GL_ATI_text_fragment_shader #define GL_ATI_text_fragment_shader 1 #define __GLEE_GL_ATI_text_fragment_shader 1 /* Constants */ #define GL_TEXT_FRAGMENT_SHADER_ATI 0x8200 #endif /* GL_APPLE_client_storage */ #ifndef GL_APPLE_client_storage #define GL_APPLE_client_storage 1 #define __GLEE_GL_APPLE_client_storage 1 /* Constants */ #define GL_UNPACK_CLIENT_STORAGE_APPLE 0x85B2 #endif /* GL_APPLE_element_array */ #ifndef GL_APPLE_element_array #define GL_APPLE_element_array 1 #define __GLEE_GL_APPLE_element_array 1 /* Constants */ #define GL_ELEMENT_ARRAY_APPLE 0x8768 #define GL_ELEMENT_ARRAY_TYPE_APPLE 0x8769 #define GL_ELEMENT_ARRAY_POINTER_APPLE 0x876A #ifndef GLEE_H_DEFINED_glElementPointerAPPLE #define GLEE_H_DEFINED_glElementPointerAPPLE typedef void (APIENTRYP GLEEPFNGLELEMENTPOINTERAPPLEPROC) (GLenum type, const GLvoid * pointer); GLEE_EXTERN GLEEPFNGLELEMENTPOINTERAPPLEPROC GLeeFuncPtr_glElementPointerAPPLE; #define glElementPointerAPPLE GLeeFuncPtr_glElementPointerAPPLE #endif #ifndef GLEE_H_DEFINED_glDrawElementArrayAPPLE #define GLEE_H_DEFINED_glDrawElementArrayAPPLE typedef void (APIENTRYP GLEEPFNGLDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, GLint first, GLsizei count); GLEE_EXTERN GLEEPFNGLDRAWELEMENTARRAYAPPLEPROC GLeeFuncPtr_glDrawElementArrayAPPLE; #define glDrawElementArrayAPPLE GLeeFuncPtr_glDrawElementArrayAPPLE #endif #ifndef GLEE_H_DEFINED_glDrawRangeElementArrayAPPLE #define GLEE_H_DEFINED_glDrawRangeElementArrayAPPLE typedef void (APIENTRYP GLEEPFNGLDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count); GLEE_EXTERN GLEEPFNGLDRAWRANGEELEMENTARRAYAPPLEPROC GLeeFuncPtr_glDrawRangeElementArrayAPPLE; #define glDrawRangeElementArrayAPPLE GLeeFuncPtr_glDrawRangeElementArrayAPPLE #endif #ifndef GLEE_H_DEFINED_glMultiDrawElementArrayAPPLE #define GLEE_H_DEFINED_glMultiDrawElementArrayAPPLE typedef void (APIENTRYP GLEEPFNGLMULTIDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, const GLint * first, const GLsizei * count, GLsizei primcount); GLEE_EXTERN GLEEPFNGLMULTIDRAWELEMENTARRAYAPPLEPROC GLeeFuncPtr_glMultiDrawElementArrayAPPLE; #define glMultiDrawElementArrayAPPLE GLeeFuncPtr_glMultiDrawElementArrayAPPLE #endif #ifndef GLEE_H_DEFINED_glMultiDrawRangeElementArrayAPPLE #define GLEE_H_DEFINED_glMultiDrawRangeElementArrayAPPLE typedef void (APIENTRYP GLEEPFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, const GLint * first, const GLsizei * count, GLsizei primcount); GLEE_EXTERN GLEEPFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC GLeeFuncPtr_glMultiDrawRangeElementArrayAPPLE; #define glMultiDrawRangeElementArrayAPPLE GLeeFuncPtr_glMultiDrawRangeElementArrayAPPLE #endif #endif /* GL_APPLE_fence */ #ifndef GL_APPLE_fence #define GL_APPLE_fence 1 #define __GLEE_GL_APPLE_fence 1 /* Constants */ #define GL_DRAW_PIXELS_APPLE 0x8A0A #define GL_FENCE_APPLE 0x8A0B #ifndef GLEE_H_DEFINED_glGenFencesAPPLE #define GLEE_H_DEFINED_glGenFencesAPPLE typedef void (APIENTRYP GLEEPFNGLGENFENCESAPPLEPROC) (GLsizei n, GLuint * fences); GLEE_EXTERN GLEEPFNGLGENFENCESAPPLEPROC GLeeFuncPtr_glGenFencesAPPLE; #define glGenFencesAPPLE GLeeFuncPtr_glGenFencesAPPLE #endif #ifndef GLEE_H_DEFINED_glDeleteFencesAPPLE #define GLEE_H_DEFINED_glDeleteFencesAPPLE typedef void (APIENTRYP GLEEPFNGLDELETEFENCESAPPLEPROC) (GLsizei n, const GLuint * fences); GLEE_EXTERN GLEEPFNGLDELETEFENCESAPPLEPROC GLeeFuncPtr_glDeleteFencesAPPLE; #define glDeleteFencesAPPLE GLeeFuncPtr_glDeleteFencesAPPLE #endif #ifndef GLEE_H_DEFINED_glSetFenceAPPLE #define GLEE_H_DEFINED_glSetFenceAPPLE typedef void (APIENTRYP GLEEPFNGLSETFENCEAPPLEPROC) (GLuint fence); GLEE_EXTERN GLEEPFNGLSETFENCEAPPLEPROC GLeeFuncPtr_glSetFenceAPPLE; #define glSetFenceAPPLE GLeeFuncPtr_glSetFenceAPPLE #endif #ifndef GLEE_H_DEFINED_glIsFenceAPPLE #define GLEE_H_DEFINED_glIsFenceAPPLE typedef GLboolean (APIENTRYP GLEEPFNGLISFENCEAPPLEPROC) (GLuint fence); GLEE_EXTERN GLEEPFNGLISFENCEAPPLEPROC GLeeFuncPtr_glIsFenceAPPLE; #define glIsFenceAPPLE GLeeFuncPtr_glIsFenceAPPLE #endif #ifndef GLEE_H_DEFINED_glTestFenceAPPLE #define GLEE_H_DEFINED_glTestFenceAPPLE typedef GLboolean (APIENTRYP GLEEPFNGLTESTFENCEAPPLEPROC) (GLuint fence); GLEE_EXTERN GLEEPFNGLTESTFENCEAPPLEPROC GLeeFuncPtr_glTestFenceAPPLE; #define glTestFenceAPPLE GLeeFuncPtr_glTestFenceAPPLE #endif #ifndef GLEE_H_DEFINED_glFinishFenceAPPLE #define GLEE_H_DEFINED_glFinishFenceAPPLE typedef void (APIENTRYP GLEEPFNGLFINISHFENCEAPPLEPROC) (GLuint fence); GLEE_EXTERN GLEEPFNGLFINISHFENCEAPPLEPROC GLeeFuncPtr_glFinishFenceAPPLE; #define glFinishFenceAPPLE GLeeFuncPtr_glFinishFenceAPPLE #endif #ifndef GLEE_H_DEFINED_glTestObjectAPPLE #define GLEE_H_DEFINED_glTestObjectAPPLE typedef GLboolean (APIENTRYP GLEEPFNGLTESTOBJECTAPPLEPROC) (GLenum object, GLuint name); GLEE_EXTERN GLEEPFNGLTESTOBJECTAPPLEPROC GLeeFuncPtr_glTestObjectAPPLE; #define glTestObjectAPPLE GLeeFuncPtr_glTestObjectAPPLE #endif #ifndef GLEE_H_DEFINED_glFinishObjectAPPLE #define GLEE_H_DEFINED_glFinishObjectAPPLE typedef void (APIENTRYP GLEEPFNGLFINISHOBJECTAPPLEPROC) (GLenum object, GLint name); GLEE_EXTERN GLEEPFNGLFINISHOBJECTAPPLEPROC GLeeFuncPtr_glFinishObjectAPPLE; #define glFinishObjectAPPLE GLeeFuncPtr_glFinishObjectAPPLE #endif #endif /* GL_APPLE_vertex_array_object */ #ifndef GL_APPLE_vertex_array_object #define GL_APPLE_vertex_array_object 1 #define __GLEE_GL_APPLE_vertex_array_object 1 /* Constants */ #define GL_VERTEX_ARRAY_BINDING_APPLE 0x85B5 #ifndef GLEE_H_DEFINED_glBindVertexArrayAPPLE #define GLEE_H_DEFINED_glBindVertexArrayAPPLE typedef void (APIENTRYP GLEEPFNGLBINDVERTEXARRAYAPPLEPROC) (GLuint array); GLEE_EXTERN GLEEPFNGLBINDVERTEXARRAYAPPLEPROC GLeeFuncPtr_glBindVertexArrayAPPLE; #define glBindVertexArrayAPPLE GLeeFuncPtr_glBindVertexArrayAPPLE #endif #ifndef GLEE_H_DEFINED_glDeleteVertexArraysAPPLE #define GLEE_H_DEFINED_glDeleteVertexArraysAPPLE typedef void (APIENTRYP GLEEPFNGLDELETEVERTEXARRAYSAPPLEPROC) (GLsizei n, const GLuint * arrays); GLEE_EXTERN GLEEPFNGLDELETEVERTEXARRAYSAPPLEPROC GLeeFuncPtr_glDeleteVertexArraysAPPLE; #define glDeleteVertexArraysAPPLE GLeeFuncPtr_glDeleteVertexArraysAPPLE #endif #ifndef GLEE_H_DEFINED_glGenVertexArraysAPPLE #define GLEE_H_DEFINED_glGenVertexArraysAPPLE typedef void (APIENTRYP GLEEPFNGLGENVERTEXARRAYSAPPLEPROC) (GLsizei n, GLuint * arrays); GLEE_EXTERN GLEEPFNGLGENVERTEXARRAYSAPPLEPROC GLeeFuncPtr_glGenVertexArraysAPPLE; #define glGenVertexArraysAPPLE GLeeFuncPtr_glGenVertexArraysAPPLE #endif #ifndef GLEE_H_DEFINED_glIsVertexArrayAPPLE #define GLEE_H_DEFINED_glIsVertexArrayAPPLE typedef GLboolean (APIENTRYP GLEEPFNGLISVERTEXARRAYAPPLEPROC) (GLuint array); GLEE_EXTERN GLEEPFNGLISVERTEXARRAYAPPLEPROC GLeeFuncPtr_glIsVertexArrayAPPLE; #define glIsVertexArrayAPPLE GLeeFuncPtr_glIsVertexArrayAPPLE #endif #endif /* GL_APPLE_vertex_array_range */ #ifndef GL_APPLE_vertex_array_range #define GL_APPLE_vertex_array_range 1 #define __GLEE_GL_APPLE_vertex_array_range 1 /* Constants */ #define GL_VERTEX_ARRAY_RANGE_APPLE 0x851D #define GL_VERTEX_ARRAY_RANGE_LENGTH_APPLE 0x851E #define GL_VERTEX_ARRAY_STORAGE_HINT_APPLE 0x851F #define GL_VERTEX_ARRAY_RANGE_POINTER_APPLE 0x8521 #define GL_STORAGE_CACHED_APPLE 0x85BE #define GL_STORAGE_SHARED_APPLE 0x85BF #ifndef GLEE_H_DEFINED_glVertexArrayRangeAPPLE #define GLEE_H_DEFINED_glVertexArrayRangeAPPLE typedef void (APIENTRYP GLEEPFNGLVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, GLvoid * pointer); GLEE_EXTERN GLEEPFNGLVERTEXARRAYRANGEAPPLEPROC GLeeFuncPtr_glVertexArrayRangeAPPLE; #define glVertexArrayRangeAPPLE GLeeFuncPtr_glVertexArrayRangeAPPLE #endif #ifndef GLEE_H_DEFINED_glFlushVertexArrayRangeAPPLE #define GLEE_H_DEFINED_glFlushVertexArrayRangeAPPLE typedef void (APIENTRYP GLEEPFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, GLvoid * pointer); GLEE_EXTERN GLEEPFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC GLeeFuncPtr_glFlushVertexArrayRangeAPPLE; #define glFlushVertexArrayRangeAPPLE GLeeFuncPtr_glFlushVertexArrayRangeAPPLE #endif #ifndef GLEE_H_DEFINED_glVertexArrayParameteriAPPLE #define GLEE_H_DEFINED_glVertexArrayParameteriAPPLE typedef void (APIENTRYP GLEEPFNGLVERTEXARRAYPARAMETERIAPPLEPROC) (GLenum pname, GLint param); GLEE_EXTERN GLEEPFNGLVERTEXARRAYPARAMETERIAPPLEPROC GLeeFuncPtr_glVertexArrayParameteriAPPLE; #define glVertexArrayParameteriAPPLE GLeeFuncPtr_glVertexArrayParameteriAPPLE #endif #endif /* GL_APPLE_ycbcr_422 */ #ifndef GL_APPLE_ycbcr_422 #define GL_APPLE_ycbcr_422 1 #define __GLEE_GL_APPLE_ycbcr_422 1 /* Constants */ #define GL_YCBCR_422_APPLE 0x85B9 #define GL_UNSIGNED_SHORT_8_8_APPLE 0x85BA #define GL_UNSIGNED_SHORT_8_8_REV_APPLE 0x85BB #endif /* GL_S3_s3tc */ #ifndef GL_S3_s3tc #define GL_S3_s3tc 1 #define __GLEE_GL_S3_s3tc 1 /* Constants */ #define GL_RGB_S3TC 0x83A0 #define GL_RGB4_S3TC 0x83A1 #define GL_RGBA_S3TC 0x83A2 #define GL_RGBA4_S3TC 0x83A3 #endif /* GL_ATI_draw_buffers */ #ifndef GL_ATI_draw_buffers #define GL_ATI_draw_buffers 1 #define __GLEE_GL_ATI_draw_buffers 1 /* Constants */ #define GL_MAX_DRAW_BUFFERS_ATI 0x8824 #define GL_DRAW_BUFFER0_ATI 0x8825 #define GL_DRAW_BUFFER1_ATI 0x8826 #define GL_DRAW_BUFFER2_ATI 0x8827 #define GL_DRAW_BUFFER3_ATI 0x8828 #define GL_DRAW_BUFFER4_ATI 0x8829 #define GL_DRAW_BUFFER5_ATI 0x882A #define GL_DRAW_BUFFER6_ATI 0x882B #define GL_DRAW_BUFFER7_ATI 0x882C #define GL_DRAW_BUFFER8_ATI 0x882D #define GL_DRAW_BUFFER9_ATI 0x882E #define GL_DRAW_BUFFER10_ATI 0x882F #define GL_DRAW_BUFFER11_ATI 0x8830 #define GL_DRAW_BUFFER12_ATI 0x8831 #define GL_DRAW_BUFFER13_ATI 0x8832 #define GL_DRAW_BUFFER14_ATI 0x8833 #define GL_DRAW_BUFFER15_ATI 0x8834 #ifndef GLEE_H_DEFINED_glDrawBuffersATI #define GLEE_H_DEFINED_glDrawBuffersATI typedef void (APIENTRYP GLEEPFNGLDRAWBUFFERSATIPROC) (GLsizei n, const GLenum * bufs); GLEE_EXTERN GLEEPFNGLDRAWBUFFERSATIPROC GLeeFuncPtr_glDrawBuffersATI; #define glDrawBuffersATI GLeeFuncPtr_glDrawBuffersATI #endif #endif /* GL_ATI_pixel_format_float */ #ifndef GL_ATI_pixel_format_float #define GL_ATI_pixel_format_float 1 #define __GLEE_GL_ATI_pixel_format_float 1 /* Constants */ #define GL_TYPE_RGBA_FLOAT_ATI 0x8820 #define GL_COLOR_CLEAR_UNCLAMPED_VALUE_ATI 0x8835 #endif /* GL_ATI_texture_env_combine3 */ #ifndef GL_ATI_texture_env_combine3 #define GL_ATI_texture_env_combine3 1 #define __GLEE_GL_ATI_texture_env_combine3 1 /* Constants */ #define GL_MODULATE_ADD_ATI 0x8744 #define GL_MODULATE_SIGNED_ADD_ATI 0x8745 #define GL_MODULATE_SUBTRACT_ATI 0x8746 #endif /* GL_ATI_texture_float */ #ifndef GL_ATI_texture_float #define GL_ATI_texture_float 1 #define __GLEE_GL_ATI_texture_float 1 /* Constants */ #define GL_RGBA_FLOAT32_ATI 0x8814 #define GL_RGB_FLOAT32_ATI 0x8815 #define GL_ALPHA_FLOAT32_ATI 0x8816 #define GL_INTENSITY_FLOAT32_ATI 0x8817 #define GL_LUMINANCE_FLOAT32_ATI 0x8818 #define GL_LUMINANCE_ALPHA_FLOAT32_ATI 0x8819 #define GL_RGBA_FLOAT16_ATI 0x881A #define GL_RGB_FLOAT16_ATI 0x881B #define GL_ALPHA_FLOAT16_ATI 0x881C #define GL_INTENSITY_FLOAT16_ATI 0x881D #define GL_LUMINANCE_FLOAT16_ATI 0x881E #define GL_LUMINANCE_ALPHA_FLOAT16_ATI 0x881F #endif /* GL_NV_float_buffer */ #ifndef GL_NV_float_buffer #define GL_NV_float_buffer 1 #define __GLEE_GL_NV_float_buffer 1 /* Constants */ #define GL_FLOAT_R_NV 0x8880 #define GL_FLOAT_RG_NV 0x8881 #define GL_FLOAT_RGB_NV 0x8882 #define GL_FLOAT_RGBA_NV 0x8883 #define GL_FLOAT_R16_NV 0x8884 #define GL_FLOAT_R32_NV 0x8885 #define GL_FLOAT_RG16_NV 0x8886 #define GL_FLOAT_RG32_NV 0x8887 #define GL_FLOAT_RGB16_NV 0x8888 #define GL_FLOAT_RGB32_NV 0x8889 #define GL_FLOAT_RGBA16_NV 0x888A #define GL_FLOAT_RGBA32_NV 0x888B #define GL_TEXTURE_FLOAT_COMPONENTS_NV 0x888C #define GL_FLOAT_CLEAR_COLOR_VALUE_NV 0x888D #define GL_FLOAT_RGBA_MODE_NV 0x888E #endif /* GL_NV_fragment_program */ #ifndef GL_NV_fragment_program #define GL_NV_fragment_program 1 #define __GLEE_GL_NV_fragment_program 1 /* Constants */ #define GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV 0x8868 #define GL_FRAGMENT_PROGRAM_NV 0x8870 #define GL_MAX_TEXTURE_COORDS_NV 0x8871 #define GL_MAX_TEXTURE_IMAGE_UNITS_NV 0x8872 #define GL_FRAGMENT_PROGRAM_BINDING_NV 0x8873 #define GL_PROGRAM_ERROR_STRING_NV 0x8874 #ifndef GLEE_H_DEFINED_glProgramNamedParameter4fNV #define GLEE_H_DEFINED_glProgramNamedParameter4fNV typedef void (APIENTRYP GLEEPFNGLPROGRAMNAMEDPARAMETER4FNVPROC) (GLuint id, GLsizei len, const GLubyte * name, GLfloat x, GLfloat y, GLfloat z, GLfloat w); GLEE_EXTERN GLEEPFNGLPROGRAMNAMEDPARAMETER4FNVPROC GLeeFuncPtr_glProgramNamedParameter4fNV; #define glProgramNamedParameter4fNV GLeeFuncPtr_glProgramNamedParameter4fNV #endif #ifndef GLEE_H_DEFINED_glProgramNamedParameter4dNV #define GLEE_H_DEFINED_glProgramNamedParameter4dNV typedef void (APIENTRYP GLEEPFNGLPROGRAMNAMEDPARAMETER4DNVPROC) (GLuint id, GLsizei len, const GLubyte * name, GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLEE_EXTERN GLEEPFNGLPROGRAMNAMEDPARAMETER4DNVPROC GLeeFuncPtr_glProgramNamedParameter4dNV; #define glProgramNamedParameter4dNV GLeeFuncPtr_glProgramNamedParameter4dNV #endif #ifndef GLEE_H_DEFINED_glProgramNamedParameter4fvNV #define GLEE_H_DEFINED_glProgramNamedParameter4fvNV typedef void (APIENTRYP GLEEPFNGLPROGRAMNAMEDPARAMETER4FVNVPROC) (GLuint id, GLsizei len, const GLubyte * name, const GLfloat * v); GLEE_EXTERN GLEEPFNGLPROGRAMNAMEDPARAMETER4FVNVPROC GLeeFuncPtr_glProgramNamedParameter4fvNV; #define glProgramNamedParameter4fvNV GLeeFuncPtr_glProgramNamedParameter4fvNV #endif #ifndef GLEE_H_DEFINED_glProgramNamedParameter4dvNV #define GLEE_H_DEFINED_glProgramNamedParameter4dvNV typedef void (APIENTRYP GLEEPFNGLPROGRAMNAMEDPARAMETER4DVNVPROC) (GLuint id, GLsizei len, const GLubyte * name, const GLdouble * v); GLEE_EXTERN GLEEPFNGLPROGRAMNAMEDPARAMETER4DVNVPROC GLeeFuncPtr_glProgramNamedParameter4dvNV; #define glProgramNamedParameter4dvNV GLeeFuncPtr_glProgramNamedParameter4dvNV #endif #ifndef GLEE_H_DEFINED_glGetProgramNamedParameterfvNV #define GLEE_H_DEFINED_glGetProgramNamedParameterfvNV typedef void (APIENTRYP GLEEPFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC) (GLuint id, GLsizei len, const GLubyte * name, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC GLeeFuncPtr_glGetProgramNamedParameterfvNV; #define glGetProgramNamedParameterfvNV GLeeFuncPtr_glGetProgramNamedParameterfvNV #endif #ifndef GLEE_H_DEFINED_glGetProgramNamedParameterdvNV #define GLEE_H_DEFINED_glGetProgramNamedParameterdvNV typedef void (APIENTRYP GLEEPFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC) (GLuint id, GLsizei len, const GLubyte * name, GLdouble * params); GLEE_EXTERN GLEEPFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC GLeeFuncPtr_glGetProgramNamedParameterdvNV; #define glGetProgramNamedParameterdvNV GLeeFuncPtr_glGetProgramNamedParameterdvNV #endif #endif /* GL_NV_half_float */ #ifndef GL_NV_half_float #define GL_NV_half_float 1 #define __GLEE_GL_NV_half_float 1 /* Constants */ #define GL_HALF_FLOAT_NV 0x140B #ifndef GLEE_H_DEFINED_glVertex2hNV #define GLEE_H_DEFINED_glVertex2hNV typedef void (APIENTRYP GLEEPFNGLVERTEX2HNVPROC) (GLhalfNV x, GLhalfNV y); GLEE_EXTERN GLEEPFNGLVERTEX2HNVPROC GLeeFuncPtr_glVertex2hNV; #define glVertex2hNV GLeeFuncPtr_glVertex2hNV #endif #ifndef GLEE_H_DEFINED_glVertex2hvNV #define GLEE_H_DEFINED_glVertex2hvNV typedef void (APIENTRYP GLEEPFNGLVERTEX2HVNVPROC) (const GLhalfNV * v); GLEE_EXTERN GLEEPFNGLVERTEX2HVNVPROC GLeeFuncPtr_glVertex2hvNV; #define glVertex2hvNV GLeeFuncPtr_glVertex2hvNV #endif #ifndef GLEE_H_DEFINED_glVertex3hNV #define GLEE_H_DEFINED_glVertex3hNV typedef void (APIENTRYP GLEEPFNGLVERTEX3HNVPROC) (GLhalfNV x, GLhalfNV y, GLhalfNV z); GLEE_EXTERN GLEEPFNGLVERTEX3HNVPROC GLeeFuncPtr_glVertex3hNV; #define glVertex3hNV GLeeFuncPtr_glVertex3hNV #endif #ifndef GLEE_H_DEFINED_glVertex3hvNV #define GLEE_H_DEFINED_glVertex3hvNV typedef void (APIENTRYP GLEEPFNGLVERTEX3HVNVPROC) (const GLhalfNV * v); GLEE_EXTERN GLEEPFNGLVERTEX3HVNVPROC GLeeFuncPtr_glVertex3hvNV; #define glVertex3hvNV GLeeFuncPtr_glVertex3hvNV #endif #ifndef GLEE_H_DEFINED_glVertex4hNV #define GLEE_H_DEFINED_glVertex4hNV typedef void (APIENTRYP GLEEPFNGLVERTEX4HNVPROC) (GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); GLEE_EXTERN GLEEPFNGLVERTEX4HNVPROC GLeeFuncPtr_glVertex4hNV; #define glVertex4hNV GLeeFuncPtr_glVertex4hNV #endif #ifndef GLEE_H_DEFINED_glVertex4hvNV #define GLEE_H_DEFINED_glVertex4hvNV typedef void (APIENTRYP GLEEPFNGLVERTEX4HVNVPROC) (const GLhalfNV * v); GLEE_EXTERN GLEEPFNGLVERTEX4HVNVPROC GLeeFuncPtr_glVertex4hvNV; #define glVertex4hvNV GLeeFuncPtr_glVertex4hvNV #endif #ifndef GLEE_H_DEFINED_glNormal3hNV #define GLEE_H_DEFINED_glNormal3hNV typedef void (APIENTRYP GLEEPFNGLNORMAL3HNVPROC) (GLhalfNV nx, GLhalfNV ny, GLhalfNV nz); GLEE_EXTERN GLEEPFNGLNORMAL3HNVPROC GLeeFuncPtr_glNormal3hNV; #define glNormal3hNV GLeeFuncPtr_glNormal3hNV #endif #ifndef GLEE_H_DEFINED_glNormal3hvNV #define GLEE_H_DEFINED_glNormal3hvNV typedef void (APIENTRYP GLEEPFNGLNORMAL3HVNVPROC) (const GLhalfNV * v); GLEE_EXTERN GLEEPFNGLNORMAL3HVNVPROC GLeeFuncPtr_glNormal3hvNV; #define glNormal3hvNV GLeeFuncPtr_glNormal3hvNV #endif #ifndef GLEE_H_DEFINED_glColor3hNV #define GLEE_H_DEFINED_glColor3hNV typedef void (APIENTRYP GLEEPFNGLCOLOR3HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue); GLEE_EXTERN GLEEPFNGLCOLOR3HNVPROC GLeeFuncPtr_glColor3hNV; #define glColor3hNV GLeeFuncPtr_glColor3hNV #endif #ifndef GLEE_H_DEFINED_glColor3hvNV #define GLEE_H_DEFINED_glColor3hvNV typedef void (APIENTRYP GLEEPFNGLCOLOR3HVNVPROC) (const GLhalfNV * v); GLEE_EXTERN GLEEPFNGLCOLOR3HVNVPROC GLeeFuncPtr_glColor3hvNV; #define glColor3hvNV GLeeFuncPtr_glColor3hvNV #endif #ifndef GLEE_H_DEFINED_glColor4hNV #define GLEE_H_DEFINED_glColor4hNV typedef void (APIENTRYP GLEEPFNGLCOLOR4HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha); GLEE_EXTERN GLEEPFNGLCOLOR4HNVPROC GLeeFuncPtr_glColor4hNV; #define glColor4hNV GLeeFuncPtr_glColor4hNV #endif #ifndef GLEE_H_DEFINED_glColor4hvNV #define GLEE_H_DEFINED_glColor4hvNV typedef void (APIENTRYP GLEEPFNGLCOLOR4HVNVPROC) (const GLhalfNV * v); GLEE_EXTERN GLEEPFNGLCOLOR4HVNVPROC GLeeFuncPtr_glColor4hvNV; #define glColor4hvNV GLeeFuncPtr_glColor4hvNV #endif #ifndef GLEE_H_DEFINED_glTexCoord1hNV #define GLEE_H_DEFINED_glTexCoord1hNV typedef void (APIENTRYP GLEEPFNGLTEXCOORD1HNVPROC) (GLhalfNV s); GLEE_EXTERN GLEEPFNGLTEXCOORD1HNVPROC GLeeFuncPtr_glTexCoord1hNV; #define glTexCoord1hNV GLeeFuncPtr_glTexCoord1hNV #endif #ifndef GLEE_H_DEFINED_glTexCoord1hvNV #define GLEE_H_DEFINED_glTexCoord1hvNV typedef void (APIENTRYP GLEEPFNGLTEXCOORD1HVNVPROC) (const GLhalfNV * v); GLEE_EXTERN GLEEPFNGLTEXCOORD1HVNVPROC GLeeFuncPtr_glTexCoord1hvNV; #define glTexCoord1hvNV GLeeFuncPtr_glTexCoord1hvNV #endif #ifndef GLEE_H_DEFINED_glTexCoord2hNV #define GLEE_H_DEFINED_glTexCoord2hNV typedef void (APIENTRYP GLEEPFNGLTEXCOORD2HNVPROC) (GLhalfNV s, GLhalfNV t); GLEE_EXTERN GLEEPFNGLTEXCOORD2HNVPROC GLeeFuncPtr_glTexCoord2hNV; #define glTexCoord2hNV GLeeFuncPtr_glTexCoord2hNV #endif #ifndef GLEE_H_DEFINED_glTexCoord2hvNV #define GLEE_H_DEFINED_glTexCoord2hvNV typedef void (APIENTRYP GLEEPFNGLTEXCOORD2HVNVPROC) (const GLhalfNV * v); GLEE_EXTERN GLEEPFNGLTEXCOORD2HVNVPROC GLeeFuncPtr_glTexCoord2hvNV; #define glTexCoord2hvNV GLeeFuncPtr_glTexCoord2hvNV #endif #ifndef GLEE_H_DEFINED_glTexCoord3hNV #define GLEE_H_DEFINED_glTexCoord3hNV typedef void (APIENTRYP GLEEPFNGLTEXCOORD3HNVPROC) (GLhalfNV s, GLhalfNV t, GLhalfNV r); GLEE_EXTERN GLEEPFNGLTEXCOORD3HNVPROC GLeeFuncPtr_glTexCoord3hNV; #define glTexCoord3hNV GLeeFuncPtr_glTexCoord3hNV #endif #ifndef GLEE_H_DEFINED_glTexCoord3hvNV #define GLEE_H_DEFINED_glTexCoord3hvNV typedef void (APIENTRYP GLEEPFNGLTEXCOORD3HVNVPROC) (const GLhalfNV * v); GLEE_EXTERN GLEEPFNGLTEXCOORD3HVNVPROC GLeeFuncPtr_glTexCoord3hvNV; #define glTexCoord3hvNV GLeeFuncPtr_glTexCoord3hvNV #endif #ifndef GLEE_H_DEFINED_glTexCoord4hNV #define GLEE_H_DEFINED_glTexCoord4hNV typedef void (APIENTRYP GLEEPFNGLTEXCOORD4HNVPROC) (GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); GLEE_EXTERN GLEEPFNGLTEXCOORD4HNVPROC GLeeFuncPtr_glTexCoord4hNV; #define glTexCoord4hNV GLeeFuncPtr_glTexCoord4hNV #endif #ifndef GLEE_H_DEFINED_glTexCoord4hvNV #define GLEE_H_DEFINED_glTexCoord4hvNV typedef void (APIENTRYP GLEEPFNGLTEXCOORD4HVNVPROC) (const GLhalfNV * v); GLEE_EXTERN GLEEPFNGLTEXCOORD4HVNVPROC GLeeFuncPtr_glTexCoord4hvNV; #define glTexCoord4hvNV GLeeFuncPtr_glTexCoord4hvNV #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord1hNV #define GLEE_H_DEFINED_glMultiTexCoord1hNV typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD1HNVPROC) (GLenum target, GLhalfNV s); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD1HNVPROC GLeeFuncPtr_glMultiTexCoord1hNV; #define glMultiTexCoord1hNV GLeeFuncPtr_glMultiTexCoord1hNV #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord1hvNV #define GLEE_H_DEFINED_glMultiTexCoord1hvNV typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD1HVNVPROC) (GLenum target, const GLhalfNV * v); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD1HVNVPROC GLeeFuncPtr_glMultiTexCoord1hvNV; #define glMultiTexCoord1hvNV GLeeFuncPtr_glMultiTexCoord1hvNV #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord2hNV #define GLEE_H_DEFINED_glMultiTexCoord2hNV typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD2HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD2HNVPROC GLeeFuncPtr_glMultiTexCoord2hNV; #define glMultiTexCoord2hNV GLeeFuncPtr_glMultiTexCoord2hNV #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord2hvNV #define GLEE_H_DEFINED_glMultiTexCoord2hvNV typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD2HVNVPROC) (GLenum target, const GLhalfNV * v); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD2HVNVPROC GLeeFuncPtr_glMultiTexCoord2hvNV; #define glMultiTexCoord2hvNV GLeeFuncPtr_glMultiTexCoord2hvNV #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord3hNV #define GLEE_H_DEFINED_glMultiTexCoord3hNV typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD3HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD3HNVPROC GLeeFuncPtr_glMultiTexCoord3hNV; #define glMultiTexCoord3hNV GLeeFuncPtr_glMultiTexCoord3hNV #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord3hvNV #define GLEE_H_DEFINED_glMultiTexCoord3hvNV typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD3HVNVPROC) (GLenum target, const GLhalfNV * v); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD3HVNVPROC GLeeFuncPtr_glMultiTexCoord3hvNV; #define glMultiTexCoord3hvNV GLeeFuncPtr_glMultiTexCoord3hvNV #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord4hNV #define GLEE_H_DEFINED_glMultiTexCoord4hNV typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD4HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD4HNVPROC GLeeFuncPtr_glMultiTexCoord4hNV; #define glMultiTexCoord4hNV GLeeFuncPtr_glMultiTexCoord4hNV #endif #ifndef GLEE_H_DEFINED_glMultiTexCoord4hvNV #define GLEE_H_DEFINED_glMultiTexCoord4hvNV typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORD4HVNVPROC) (GLenum target, const GLhalfNV * v); GLEE_EXTERN GLEEPFNGLMULTITEXCOORD4HVNVPROC GLeeFuncPtr_glMultiTexCoord4hvNV; #define glMultiTexCoord4hvNV GLeeFuncPtr_glMultiTexCoord4hvNV #endif #ifndef GLEE_H_DEFINED_glFogCoordhNV #define GLEE_H_DEFINED_glFogCoordhNV typedef void (APIENTRYP GLEEPFNGLFOGCOORDHNVPROC) (GLhalfNV fog); GLEE_EXTERN GLEEPFNGLFOGCOORDHNVPROC GLeeFuncPtr_glFogCoordhNV; #define glFogCoordhNV GLeeFuncPtr_glFogCoordhNV #endif #ifndef GLEE_H_DEFINED_glFogCoordhvNV #define GLEE_H_DEFINED_glFogCoordhvNV typedef void (APIENTRYP GLEEPFNGLFOGCOORDHVNVPROC) (const GLhalfNV * fog); GLEE_EXTERN GLEEPFNGLFOGCOORDHVNVPROC GLeeFuncPtr_glFogCoordhvNV; #define glFogCoordhvNV GLeeFuncPtr_glFogCoordhvNV #endif #ifndef GLEE_H_DEFINED_glSecondaryColor3hNV #define GLEE_H_DEFINED_glSecondaryColor3hNV typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLOR3HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue); GLEE_EXTERN GLEEPFNGLSECONDARYCOLOR3HNVPROC GLeeFuncPtr_glSecondaryColor3hNV; #define glSecondaryColor3hNV GLeeFuncPtr_glSecondaryColor3hNV #endif #ifndef GLEE_H_DEFINED_glSecondaryColor3hvNV #define GLEE_H_DEFINED_glSecondaryColor3hvNV typedef void (APIENTRYP GLEEPFNGLSECONDARYCOLOR3HVNVPROC) (const GLhalfNV * v); GLEE_EXTERN GLEEPFNGLSECONDARYCOLOR3HVNVPROC GLeeFuncPtr_glSecondaryColor3hvNV; #define glSecondaryColor3hvNV GLeeFuncPtr_glSecondaryColor3hvNV #endif #ifndef GLEE_H_DEFINED_glVertexWeighthNV #define GLEE_H_DEFINED_glVertexWeighthNV typedef void (APIENTRYP GLEEPFNGLVERTEXWEIGHTHNVPROC) (GLhalfNV weight); GLEE_EXTERN GLEEPFNGLVERTEXWEIGHTHNVPROC GLeeFuncPtr_glVertexWeighthNV; #define glVertexWeighthNV GLeeFuncPtr_glVertexWeighthNV #endif #ifndef GLEE_H_DEFINED_glVertexWeighthvNV #define GLEE_H_DEFINED_glVertexWeighthvNV typedef void (APIENTRYP GLEEPFNGLVERTEXWEIGHTHVNVPROC) (const GLhalfNV * weight); GLEE_EXTERN GLEEPFNGLVERTEXWEIGHTHVNVPROC GLeeFuncPtr_glVertexWeighthvNV; #define glVertexWeighthvNV GLeeFuncPtr_glVertexWeighthvNV #endif #ifndef GLEE_H_DEFINED_glVertexAttrib1hNV #define GLEE_H_DEFINED_glVertexAttrib1hNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB1HNVPROC) (GLuint index, GLhalfNV x); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB1HNVPROC GLeeFuncPtr_glVertexAttrib1hNV; #define glVertexAttrib1hNV GLeeFuncPtr_glVertexAttrib1hNV #endif #ifndef GLEE_H_DEFINED_glVertexAttrib1hvNV #define GLEE_H_DEFINED_glVertexAttrib1hvNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB1HVNVPROC) (GLuint index, const GLhalfNV * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB1HVNVPROC GLeeFuncPtr_glVertexAttrib1hvNV; #define glVertexAttrib1hvNV GLeeFuncPtr_glVertexAttrib1hvNV #endif #ifndef GLEE_H_DEFINED_glVertexAttrib2hNV #define GLEE_H_DEFINED_glVertexAttrib2hNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB2HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB2HNVPROC GLeeFuncPtr_glVertexAttrib2hNV; #define glVertexAttrib2hNV GLeeFuncPtr_glVertexAttrib2hNV #endif #ifndef GLEE_H_DEFINED_glVertexAttrib2hvNV #define GLEE_H_DEFINED_glVertexAttrib2hvNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB2HVNVPROC) (GLuint index, const GLhalfNV * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB2HVNVPROC GLeeFuncPtr_glVertexAttrib2hvNV; #define glVertexAttrib2hvNV GLeeFuncPtr_glVertexAttrib2hvNV #endif #ifndef GLEE_H_DEFINED_glVertexAttrib3hNV #define GLEE_H_DEFINED_glVertexAttrib3hNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB3HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB3HNVPROC GLeeFuncPtr_glVertexAttrib3hNV; #define glVertexAttrib3hNV GLeeFuncPtr_glVertexAttrib3hNV #endif #ifndef GLEE_H_DEFINED_glVertexAttrib3hvNV #define GLEE_H_DEFINED_glVertexAttrib3hvNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB3HVNVPROC) (GLuint index, const GLhalfNV * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB3HVNVPROC GLeeFuncPtr_glVertexAttrib3hvNV; #define glVertexAttrib3hvNV GLeeFuncPtr_glVertexAttrib3hvNV #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4hNV #define GLEE_H_DEFINED_glVertexAttrib4hNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4HNVPROC GLeeFuncPtr_glVertexAttrib4hNV; #define glVertexAttrib4hNV GLeeFuncPtr_glVertexAttrib4hNV #endif #ifndef GLEE_H_DEFINED_glVertexAttrib4hvNV #define GLEE_H_DEFINED_glVertexAttrib4hvNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIB4HVNVPROC) (GLuint index, const GLhalfNV * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIB4HVNVPROC GLeeFuncPtr_glVertexAttrib4hvNV; #define glVertexAttrib4hvNV GLeeFuncPtr_glVertexAttrib4hvNV #endif #ifndef GLEE_H_DEFINED_glVertexAttribs1hvNV #define GLEE_H_DEFINED_glVertexAttribs1hvNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBS1HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBS1HVNVPROC GLeeFuncPtr_glVertexAttribs1hvNV; #define glVertexAttribs1hvNV GLeeFuncPtr_glVertexAttribs1hvNV #endif #ifndef GLEE_H_DEFINED_glVertexAttribs2hvNV #define GLEE_H_DEFINED_glVertexAttribs2hvNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBS2HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBS2HVNVPROC GLeeFuncPtr_glVertexAttribs2hvNV; #define glVertexAttribs2hvNV GLeeFuncPtr_glVertexAttribs2hvNV #endif #ifndef GLEE_H_DEFINED_glVertexAttribs3hvNV #define GLEE_H_DEFINED_glVertexAttribs3hvNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBS3HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBS3HVNVPROC GLeeFuncPtr_glVertexAttribs3hvNV; #define glVertexAttribs3hvNV GLeeFuncPtr_glVertexAttribs3hvNV #endif #ifndef GLEE_H_DEFINED_glVertexAttribs4hvNV #define GLEE_H_DEFINED_glVertexAttribs4hvNV typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBS4HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBS4HVNVPROC GLeeFuncPtr_glVertexAttribs4hvNV; #define glVertexAttribs4hvNV GLeeFuncPtr_glVertexAttribs4hvNV #endif #endif /* GL_NV_pixel_data_range */ #ifndef GL_NV_pixel_data_range #define GL_NV_pixel_data_range 1 #define __GLEE_GL_NV_pixel_data_range 1 /* Constants */ #define GL_WRITE_PIXEL_DATA_RANGE_NV 0x8878 #define GL_READ_PIXEL_DATA_RANGE_NV 0x8879 #define GL_WRITE_PIXEL_DATA_RANGE_LENGTH_NV 0x887A #define GL_READ_PIXEL_DATA_RANGE_LENGTH_NV 0x887B #define GL_WRITE_PIXEL_DATA_RANGE_POINTER_NV 0x887C #define GL_READ_PIXEL_DATA_RANGE_POINTER_NV 0x887D #ifndef GLEE_H_DEFINED_glPixelDataRangeNV #define GLEE_H_DEFINED_glPixelDataRangeNV typedef void (APIENTRYP GLEEPFNGLPIXELDATARANGENVPROC) (GLenum target, GLsizei length, GLvoid * pointer); GLEE_EXTERN GLEEPFNGLPIXELDATARANGENVPROC GLeeFuncPtr_glPixelDataRangeNV; #define glPixelDataRangeNV GLeeFuncPtr_glPixelDataRangeNV #endif #ifndef GLEE_H_DEFINED_glFlushPixelDataRangeNV #define GLEE_H_DEFINED_glFlushPixelDataRangeNV typedef void (APIENTRYP GLEEPFNGLFLUSHPIXELDATARANGENVPROC) (GLenum target); GLEE_EXTERN GLEEPFNGLFLUSHPIXELDATARANGENVPROC GLeeFuncPtr_glFlushPixelDataRangeNV; #define glFlushPixelDataRangeNV GLeeFuncPtr_glFlushPixelDataRangeNV #endif #endif /* GL_NV_primitive_restart */ #ifndef GL_NV_primitive_restart #define GL_NV_primitive_restart 1 #define __GLEE_GL_NV_primitive_restart 1 /* Constants */ #define GL_PRIMITIVE_RESTART_NV 0x8558 #define GL_PRIMITIVE_RESTART_INDEX_NV 0x8559 #ifndef GLEE_H_DEFINED_glPrimitiveRestartNV #define GLEE_H_DEFINED_glPrimitiveRestartNV typedef void (APIENTRYP GLEEPFNGLPRIMITIVERESTARTNVPROC) (); GLEE_EXTERN GLEEPFNGLPRIMITIVERESTARTNVPROC GLeeFuncPtr_glPrimitiveRestartNV; #define glPrimitiveRestartNV GLeeFuncPtr_glPrimitiveRestartNV #endif #ifndef GLEE_H_DEFINED_glPrimitiveRestartIndexNV #define GLEE_H_DEFINED_glPrimitiveRestartIndexNV typedef void (APIENTRYP GLEEPFNGLPRIMITIVERESTARTINDEXNVPROC) (GLuint index); GLEE_EXTERN GLEEPFNGLPRIMITIVERESTARTINDEXNVPROC GLeeFuncPtr_glPrimitiveRestartIndexNV; #define glPrimitiveRestartIndexNV GLeeFuncPtr_glPrimitiveRestartIndexNV #endif #endif /* GL_NV_texture_expand_normal */ #ifndef GL_NV_texture_expand_normal #define GL_NV_texture_expand_normal 1 #define __GLEE_GL_NV_texture_expand_normal 1 /* Constants */ #define GL_TEXTURE_UNSIGNED_REMAP_MODE_NV 0x888F #endif /* GL_NV_vertex_program2 */ #ifndef GL_NV_vertex_program2 #define GL_NV_vertex_program2 1 #define __GLEE_GL_NV_vertex_program2 1 /* Constants */ #endif /* GL_ATI_map_object_buffer */ #ifndef GL_ATI_map_object_buffer #define GL_ATI_map_object_buffer 1 #define __GLEE_GL_ATI_map_object_buffer 1 /* Constants */ #ifndef GLEE_H_DEFINED_glMapObjectBufferATI #define GLEE_H_DEFINED_glMapObjectBufferATI typedef GLvoid* (APIENTRYP GLEEPFNGLMAPOBJECTBUFFERATIPROC) (GLuint buffer); GLEE_EXTERN GLEEPFNGLMAPOBJECTBUFFERATIPROC GLeeFuncPtr_glMapObjectBufferATI; #define glMapObjectBufferATI GLeeFuncPtr_glMapObjectBufferATI #endif #ifndef GLEE_H_DEFINED_glUnmapObjectBufferATI #define GLEE_H_DEFINED_glUnmapObjectBufferATI typedef void (APIENTRYP GLEEPFNGLUNMAPOBJECTBUFFERATIPROC) (GLuint buffer); GLEE_EXTERN GLEEPFNGLUNMAPOBJECTBUFFERATIPROC GLeeFuncPtr_glUnmapObjectBufferATI; #define glUnmapObjectBufferATI GLeeFuncPtr_glUnmapObjectBufferATI #endif #endif /* GL_ATI_separate_stencil */ #ifndef GL_ATI_separate_stencil #define GL_ATI_separate_stencil 1 #define __GLEE_GL_ATI_separate_stencil 1 /* Constants */ #define GL_STENCIL_BACK_FUNC_ATI 0x8800 #define GL_STENCIL_BACK_FAIL_ATI 0x8801 #define GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI 0x8802 #define GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI 0x8803 #ifndef GLEE_H_DEFINED_glStencilOpSeparateATI #define GLEE_H_DEFINED_glStencilOpSeparateATI typedef void (APIENTRYP GLEEPFNGLSTENCILOPSEPARATEATIPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); GLEE_EXTERN GLEEPFNGLSTENCILOPSEPARATEATIPROC GLeeFuncPtr_glStencilOpSeparateATI; #define glStencilOpSeparateATI GLeeFuncPtr_glStencilOpSeparateATI #endif #ifndef GLEE_H_DEFINED_glStencilFuncSeparateATI #define GLEE_H_DEFINED_glStencilFuncSeparateATI typedef void (APIENTRYP GLEEPFNGLSTENCILFUNCSEPARATEATIPROC) (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); GLEE_EXTERN GLEEPFNGLSTENCILFUNCSEPARATEATIPROC GLeeFuncPtr_glStencilFuncSeparateATI; #define glStencilFuncSeparateATI GLeeFuncPtr_glStencilFuncSeparateATI #endif #endif /* GL_ATI_vertex_attrib_array_object */ #ifndef GL_ATI_vertex_attrib_array_object #define GL_ATI_vertex_attrib_array_object 1 #define __GLEE_GL_ATI_vertex_attrib_array_object 1 /* Constants */ #ifndef GLEE_H_DEFINED_glVertexAttribArrayObjectATI #define GLEE_H_DEFINED_glVertexAttribArrayObjectATI typedef void (APIENTRYP GLEEPFNGLVERTEXATTRIBARRAYOBJECTATIPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBARRAYOBJECTATIPROC GLeeFuncPtr_glVertexAttribArrayObjectATI; #define glVertexAttribArrayObjectATI GLeeFuncPtr_glVertexAttribArrayObjectATI #endif #ifndef GLEE_H_DEFINED_glGetVertexAttribArrayObjectfvATI #define GLEE_H_DEFINED_glGetVertexAttribArrayObjectfvATI typedef void (APIENTRYP GLEEPFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC) (GLuint index, GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC GLeeFuncPtr_glGetVertexAttribArrayObjectfvATI; #define glGetVertexAttribArrayObjectfvATI GLeeFuncPtr_glGetVertexAttribArrayObjectfvATI #endif #ifndef GLEE_H_DEFINED_glGetVertexAttribArrayObjectivATI #define GLEE_H_DEFINED_glGetVertexAttribArrayObjectivATI typedef void (APIENTRYP GLEEPFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC) (GLuint index, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC GLeeFuncPtr_glGetVertexAttribArrayObjectivATI; #define glGetVertexAttribArrayObjectivATI GLeeFuncPtr_glGetVertexAttribArrayObjectivATI #endif #endif /* GL_OES_read_format */ #ifndef GL_OES_read_format #define GL_OES_read_format 1 #define __GLEE_GL_OES_read_format 1 /* Constants */ #define GL_IMPLEMENTATION_COLOR_READ_TYPE_OES 0x8B9A #define GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES 0x8B9B #endif /* GL_EXT_depth_bounds_test */ #ifndef GL_EXT_depth_bounds_test #define GL_EXT_depth_bounds_test 1 #define __GLEE_GL_EXT_depth_bounds_test 1 /* Constants */ #define GL_DEPTH_BOUNDS_TEST_EXT 0x8890 #define GL_DEPTH_BOUNDS_EXT 0x8891 #ifndef GLEE_H_DEFINED_glDepthBoundsEXT #define GLEE_H_DEFINED_glDepthBoundsEXT typedef void (APIENTRYP GLEEPFNGLDEPTHBOUNDSEXTPROC) (GLclampd zmin, GLclampd zmax); GLEE_EXTERN GLEEPFNGLDEPTHBOUNDSEXTPROC GLeeFuncPtr_glDepthBoundsEXT; #define glDepthBoundsEXT GLeeFuncPtr_glDepthBoundsEXT #endif #endif /* GL_EXT_texture_mirror_clamp */ #ifndef GL_EXT_texture_mirror_clamp #define GL_EXT_texture_mirror_clamp 1 #define __GLEE_GL_EXT_texture_mirror_clamp 1 /* Constants */ #define GL_MIRROR_CLAMP_EXT 0x8742 #define GL_MIRROR_CLAMP_TO_EDGE_EXT 0x8743 #define GL_MIRROR_CLAMP_TO_BORDER_EXT 0x8912 #endif /* GL_EXT_blend_equation_separate */ #ifndef GL_EXT_blend_equation_separate #define GL_EXT_blend_equation_separate 1 #define __GLEE_GL_EXT_blend_equation_separate 1 /* Constants */ #define GL_BLEND_EQUATION_RGB_EXT GL_BLEND_EQUATION #define GL_BLEND_EQUATION_ALPHA_EXT 0x883D #ifndef GLEE_H_DEFINED_glBlendEquationSeparateEXT #define GLEE_H_DEFINED_glBlendEquationSeparateEXT typedef void (APIENTRYP GLEEPFNGLBLENDEQUATIONSEPARATEEXTPROC) (GLenum modeRGB, GLenum modeAlpha); GLEE_EXTERN GLEEPFNGLBLENDEQUATIONSEPARATEEXTPROC GLeeFuncPtr_glBlendEquationSeparateEXT; #define glBlendEquationSeparateEXT GLeeFuncPtr_glBlendEquationSeparateEXT #endif #endif /* GL_MESA_pack_invert */ #ifndef GL_MESA_pack_invert #define GL_MESA_pack_invert 1 #define __GLEE_GL_MESA_pack_invert 1 /* Constants */ #define GL_PACK_INVERT_MESA 0x8758 #endif /* GL_MESA_ycbcr_texture */ #ifndef GL_MESA_ycbcr_texture #define GL_MESA_ycbcr_texture 1 #define __GLEE_GL_MESA_ycbcr_texture 1 /* Constants */ #define GL_UNSIGNED_SHORT_8_8_MESA 0x85BA #define GL_UNSIGNED_SHORT_8_8_REV_MESA 0x85BB #define GL_YCBCR_MESA 0x8757 #endif /* GL_EXT_pixel_buffer_object */ #ifndef GL_EXT_pixel_buffer_object #define GL_EXT_pixel_buffer_object 1 #define __GLEE_GL_EXT_pixel_buffer_object 1 /* Constants */ #define GL_PIXEL_PACK_BUFFER_EXT 0x88EB #define GL_PIXEL_UNPACK_BUFFER_EXT 0x88EC #define GL_PIXEL_PACK_BUFFER_BINDING_EXT 0x88ED #define GL_PIXEL_UNPACK_BUFFER_BINDING_EXT 0x88EF #endif /* GL_NV_fragment_program_option */ #ifndef GL_NV_fragment_program_option #define GL_NV_fragment_program_option 1 #define __GLEE_GL_NV_fragment_program_option 1 /* Constants */ #endif /* GL_NV_fragment_program2 */ #ifndef GL_NV_fragment_program2 #define GL_NV_fragment_program2 1 #define __GLEE_GL_NV_fragment_program2 1 /* Constants */ #define GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV 0x88F4 #define GL_MAX_PROGRAM_CALL_DEPTH_NV 0x88F5 #define GL_MAX_PROGRAM_IF_DEPTH_NV 0x88F6 #define GL_MAX_PROGRAM_LOOP_DEPTH_NV 0x88F7 #define GL_MAX_PROGRAM_LOOP_COUNT_NV 0x88F8 #endif /* GL_NV_vertex_program2_option */ #ifndef GL_NV_vertex_program2_option #define GL_NV_vertex_program2_option 1 #define __GLEE_GL_NV_vertex_program2_option 1 /* Constants */ #endif /* GL_NV_vertex_program3 */ #ifndef GL_NV_vertex_program3 #define GL_NV_vertex_program3 1 #define __GLEE_GL_NV_vertex_program3 1 /* Constants */ #endif /* GL_EXT_framebuffer_object */ #ifndef GL_EXT_framebuffer_object #define GL_EXT_framebuffer_object 1 #define __GLEE_GL_EXT_framebuffer_object 1 /* Constants */ #define GL_INVALID_FRAMEBUFFER_OPERATION_EXT 0x0506 #define GL_MAX_RENDERBUFFER_SIZE_EXT 0x84E8 #define GL_FRAMEBUFFER_BINDING_EXT 0x8CA6 #define GL_RENDERBUFFER_BINDING_EXT 0x8CA7 #define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT 0x8CD0 #define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT 0x8CD1 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT 0x8CD2 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT 0x8CD3 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT 0x8CD4 #define GL_FRAMEBUFFER_COMPLETE_EXT 0x8CD5 #define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT 0x8CD6 #define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT 0x8CD7 #define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT 0x8CD9 #define GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT 0x8CDA #define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT 0x8CDB #define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT 0x8CDC #define GL_FRAMEBUFFER_UNSUPPORTED_EXT 0x8CDD #define GL_MAX_COLOR_ATTACHMENTS_EXT 0x8CDF #define GL_COLOR_ATTACHMENT0_EXT 0x8CE0 #define GL_COLOR_ATTACHMENT1_EXT 0x8CE1 #define GL_COLOR_ATTACHMENT2_EXT 0x8CE2 #define GL_COLOR_ATTACHMENT3_EXT 0x8CE3 #define GL_COLOR_ATTACHMENT4_EXT 0x8CE4 #define GL_COLOR_ATTACHMENT5_EXT 0x8CE5 #define GL_COLOR_ATTACHMENT6_EXT 0x8CE6 #define GL_COLOR_ATTACHMENT7_EXT 0x8CE7 #define GL_COLOR_ATTACHMENT8_EXT 0x8CE8 #define GL_COLOR_ATTACHMENT9_EXT 0x8CE9 #define GL_COLOR_ATTACHMENT10_EXT 0x8CEA #define GL_COLOR_ATTACHMENT11_EXT 0x8CEB #define GL_COLOR_ATTACHMENT12_EXT 0x8CEC #define GL_COLOR_ATTACHMENT13_EXT 0x8CED #define GL_COLOR_ATTACHMENT14_EXT 0x8CEE #define GL_COLOR_ATTACHMENT15_EXT 0x8CEF #define GL_DEPTH_ATTACHMENT_EXT 0x8D00 #define GL_STENCIL_ATTACHMENT_EXT 0x8D20 #define GL_FRAMEBUFFER_EXT 0x8D40 #define GL_RENDERBUFFER_EXT 0x8D41 #define GL_RENDERBUFFER_WIDTH_EXT 0x8D42 #define GL_RENDERBUFFER_HEIGHT_EXT 0x8D43 #define GL_RENDERBUFFER_INTERNAL_FORMAT_EXT 0x8D44 #define GL_STENCIL_INDEX1_EXT 0x8D46 #define GL_STENCIL_INDEX4_EXT 0x8D47 #define GL_STENCIL_INDEX8_EXT 0x8D48 #define GL_STENCIL_INDEX16_EXT 0x8D49 #define GL_RENDERBUFFER_RED_SIZE_EXT 0x8D50 #define GL_RENDERBUFFER_GREEN_SIZE_EXT 0x8D51 #define GL_RENDERBUFFER_BLUE_SIZE_EXT 0x8D52 #define GL_RENDERBUFFER_ALPHA_SIZE_EXT 0x8D53 #define GL_RENDERBUFFER_DEPTH_SIZE_EXT 0x8D54 #define GL_RENDERBUFFER_STENCIL_SIZE_EXT 0x8D55 #ifndef GLEE_H_DEFINED_glIsRenderbufferEXT #define GLEE_H_DEFINED_glIsRenderbufferEXT typedef GLboolean (APIENTRYP GLEEPFNGLISRENDERBUFFEREXTPROC) (GLuint renderbuffer); GLEE_EXTERN GLEEPFNGLISRENDERBUFFEREXTPROC GLeeFuncPtr_glIsRenderbufferEXT; #define glIsRenderbufferEXT GLeeFuncPtr_glIsRenderbufferEXT #endif #ifndef GLEE_H_DEFINED_glBindRenderbufferEXT #define GLEE_H_DEFINED_glBindRenderbufferEXT typedef void (APIENTRYP GLEEPFNGLBINDRENDERBUFFEREXTPROC) (GLenum target, GLuint renderbuffer); GLEE_EXTERN GLEEPFNGLBINDRENDERBUFFEREXTPROC GLeeFuncPtr_glBindRenderbufferEXT; #define glBindRenderbufferEXT GLeeFuncPtr_glBindRenderbufferEXT #endif #ifndef GLEE_H_DEFINED_glDeleteRenderbuffersEXT #define GLEE_H_DEFINED_glDeleteRenderbuffersEXT typedef void (APIENTRYP GLEEPFNGLDELETERENDERBUFFERSEXTPROC) (GLsizei n, const GLuint * renderbuffers); GLEE_EXTERN GLEEPFNGLDELETERENDERBUFFERSEXTPROC GLeeFuncPtr_glDeleteRenderbuffersEXT; #define glDeleteRenderbuffersEXT GLeeFuncPtr_glDeleteRenderbuffersEXT #endif #ifndef GLEE_H_DEFINED_glGenRenderbuffersEXT #define GLEE_H_DEFINED_glGenRenderbuffersEXT typedef void (APIENTRYP GLEEPFNGLGENRENDERBUFFERSEXTPROC) (GLsizei n, GLuint * renderbuffers); GLEE_EXTERN GLEEPFNGLGENRENDERBUFFERSEXTPROC GLeeFuncPtr_glGenRenderbuffersEXT; #define glGenRenderbuffersEXT GLeeFuncPtr_glGenRenderbuffersEXT #endif #ifndef GLEE_H_DEFINED_glRenderbufferStorageEXT #define GLEE_H_DEFINED_glRenderbufferStorageEXT typedef void (APIENTRYP GLEEPFNGLRENDERBUFFERSTORAGEEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); GLEE_EXTERN GLEEPFNGLRENDERBUFFERSTORAGEEXTPROC GLeeFuncPtr_glRenderbufferStorageEXT; #define glRenderbufferStorageEXT GLeeFuncPtr_glRenderbufferStorageEXT #endif #ifndef GLEE_H_DEFINED_glGetRenderbufferParameterivEXT #define GLEE_H_DEFINED_glGetRenderbufferParameterivEXT typedef void (APIENTRYP GLEEPFNGLGETRENDERBUFFERPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETRENDERBUFFERPARAMETERIVEXTPROC GLeeFuncPtr_glGetRenderbufferParameterivEXT; #define glGetRenderbufferParameterivEXT GLeeFuncPtr_glGetRenderbufferParameterivEXT #endif #ifndef GLEE_H_DEFINED_glIsFramebufferEXT #define GLEE_H_DEFINED_glIsFramebufferEXT typedef GLboolean (APIENTRYP GLEEPFNGLISFRAMEBUFFEREXTPROC) (GLuint framebuffer); GLEE_EXTERN GLEEPFNGLISFRAMEBUFFEREXTPROC GLeeFuncPtr_glIsFramebufferEXT; #define glIsFramebufferEXT GLeeFuncPtr_glIsFramebufferEXT #endif #ifndef GLEE_H_DEFINED_glBindFramebufferEXT #define GLEE_H_DEFINED_glBindFramebufferEXT typedef void (APIENTRYP GLEEPFNGLBINDFRAMEBUFFEREXTPROC) (GLenum target, GLuint framebuffer); GLEE_EXTERN GLEEPFNGLBINDFRAMEBUFFEREXTPROC GLeeFuncPtr_glBindFramebufferEXT; #define glBindFramebufferEXT GLeeFuncPtr_glBindFramebufferEXT #endif #ifndef GLEE_H_DEFINED_glDeleteFramebuffersEXT #define GLEE_H_DEFINED_glDeleteFramebuffersEXT typedef void (APIENTRYP GLEEPFNGLDELETEFRAMEBUFFERSEXTPROC) (GLsizei n, const GLuint * framebuffers); GLEE_EXTERN GLEEPFNGLDELETEFRAMEBUFFERSEXTPROC GLeeFuncPtr_glDeleteFramebuffersEXT; #define glDeleteFramebuffersEXT GLeeFuncPtr_glDeleteFramebuffersEXT #endif #ifndef GLEE_H_DEFINED_glGenFramebuffersEXT #define GLEE_H_DEFINED_glGenFramebuffersEXT typedef void (APIENTRYP GLEEPFNGLGENFRAMEBUFFERSEXTPROC) (GLsizei n, GLuint * framebuffers); GLEE_EXTERN GLEEPFNGLGENFRAMEBUFFERSEXTPROC GLeeFuncPtr_glGenFramebuffersEXT; #define glGenFramebuffersEXT GLeeFuncPtr_glGenFramebuffersEXT #endif #ifndef GLEE_H_DEFINED_glCheckFramebufferStatusEXT #define GLEE_H_DEFINED_glCheckFramebufferStatusEXT typedef GLenum (APIENTRYP GLEEPFNGLCHECKFRAMEBUFFERSTATUSEXTPROC) (GLenum target); GLEE_EXTERN GLEEPFNGLCHECKFRAMEBUFFERSTATUSEXTPROC GLeeFuncPtr_glCheckFramebufferStatusEXT; #define glCheckFramebufferStatusEXT GLeeFuncPtr_glCheckFramebufferStatusEXT #endif #ifndef GLEE_H_DEFINED_glFramebufferTexture1DEXT #define GLEE_H_DEFINED_glFramebufferTexture1DEXT typedef void (APIENTRYP GLEEPFNGLFRAMEBUFFERTEXTURE1DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); GLEE_EXTERN GLEEPFNGLFRAMEBUFFERTEXTURE1DEXTPROC GLeeFuncPtr_glFramebufferTexture1DEXT; #define glFramebufferTexture1DEXT GLeeFuncPtr_glFramebufferTexture1DEXT #endif #ifndef GLEE_H_DEFINED_glFramebufferTexture2DEXT #define GLEE_H_DEFINED_glFramebufferTexture2DEXT typedef void (APIENTRYP GLEEPFNGLFRAMEBUFFERTEXTURE2DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); GLEE_EXTERN GLEEPFNGLFRAMEBUFFERTEXTURE2DEXTPROC GLeeFuncPtr_glFramebufferTexture2DEXT; #define glFramebufferTexture2DEXT GLeeFuncPtr_glFramebufferTexture2DEXT #endif #ifndef GLEE_H_DEFINED_glFramebufferTexture3DEXT #define GLEE_H_DEFINED_glFramebufferTexture3DEXT typedef void (APIENTRYP GLEEPFNGLFRAMEBUFFERTEXTURE3DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); GLEE_EXTERN GLEEPFNGLFRAMEBUFFERTEXTURE3DEXTPROC GLeeFuncPtr_glFramebufferTexture3DEXT; #define glFramebufferTexture3DEXT GLeeFuncPtr_glFramebufferTexture3DEXT #endif #ifndef GLEE_H_DEFINED_glFramebufferRenderbufferEXT #define GLEE_H_DEFINED_glFramebufferRenderbufferEXT typedef void (APIENTRYP GLEEPFNGLFRAMEBUFFERRENDERBUFFEREXTPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); GLEE_EXTERN GLEEPFNGLFRAMEBUFFERRENDERBUFFEREXTPROC GLeeFuncPtr_glFramebufferRenderbufferEXT; #define glFramebufferRenderbufferEXT GLeeFuncPtr_glFramebufferRenderbufferEXT #endif #ifndef GLEE_H_DEFINED_glGetFramebufferAttachmentParameterivEXT #define GLEE_H_DEFINED_glGetFramebufferAttachmentParameterivEXT typedef void (APIENTRYP GLEEPFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) (GLenum target, GLenum attachment, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC GLeeFuncPtr_glGetFramebufferAttachmentParameterivEXT; #define glGetFramebufferAttachmentParameterivEXT GLeeFuncPtr_glGetFramebufferAttachmentParameterivEXT #endif #ifndef GLEE_H_DEFINED_glGenerateMipmapEXT #define GLEE_H_DEFINED_glGenerateMipmapEXT typedef void (APIENTRYP GLEEPFNGLGENERATEMIPMAPEXTPROC) (GLenum target); GLEE_EXTERN GLEEPFNGLGENERATEMIPMAPEXTPROC GLeeFuncPtr_glGenerateMipmapEXT; #define glGenerateMipmapEXT GLeeFuncPtr_glGenerateMipmapEXT #endif #endif /* GL_GREMEDY_string_marker */ #ifndef GL_GREMEDY_string_marker #define GL_GREMEDY_string_marker 1 #define __GLEE_GL_GREMEDY_string_marker 1 /* Constants */ #ifndef GLEE_H_DEFINED_glStringMarkerGREMEDY #define GLEE_H_DEFINED_glStringMarkerGREMEDY typedef void (APIENTRYP GLEEPFNGLSTRINGMARKERGREMEDYPROC) (GLsizei len, const GLvoid * string); GLEE_EXTERN GLEEPFNGLSTRINGMARKERGREMEDYPROC GLeeFuncPtr_glStringMarkerGREMEDY; #define glStringMarkerGREMEDY GLeeFuncPtr_glStringMarkerGREMEDY #endif #endif /* GL_EXT_packed_depth_stencil */ #ifndef GL_EXT_packed_depth_stencil #define GL_EXT_packed_depth_stencil 1 #define __GLEE_GL_EXT_packed_depth_stencil 1 /* Constants */ #define GL_DEPTH_STENCIL_EXT 0x84F9 #define GL_UNSIGNED_INT_24_8_EXT 0x84FA #define GL_DEPTH24_STENCIL8_EXT 0x88F0 #define GL_TEXTURE_STENCIL_SIZE_EXT 0x88F1 #endif /* GL_EXT_stencil_clear_tag */ #ifndef GL_EXT_stencil_clear_tag #define GL_EXT_stencil_clear_tag 1 #define __GLEE_GL_EXT_stencil_clear_tag 1 /* Constants */ #define GL_STENCIL_TAG_BITS_EXT 0x88F2 #define GL_STENCIL_CLEAR_TAG_VALUE_EXT 0x88F3 #ifndef GLEE_H_DEFINED_glStencilClearTagEXT #define GLEE_H_DEFINED_glStencilClearTagEXT typedef void (APIENTRYP GLEEPFNGLSTENCILCLEARTAGEXTPROC) (GLsizei stencilTagBits, GLuint stencilClearTag); GLEE_EXTERN GLEEPFNGLSTENCILCLEARTAGEXTPROC GLeeFuncPtr_glStencilClearTagEXT; #define glStencilClearTagEXT GLeeFuncPtr_glStencilClearTagEXT #endif #endif /* GL_EXT_texture_sRGB */ #ifndef GL_EXT_texture_sRGB #define GL_EXT_texture_sRGB 1 #define __GLEE_GL_EXT_texture_sRGB 1 /* Constants */ #define GL_SRGB_EXT 0x8C40 #define GL_SRGB8_EXT 0x8C41 #define GL_SRGB_ALPHA_EXT 0x8C42 #define GL_SRGB8_ALPHA8_EXT 0x8C43 #define GL_SLUMINANCE_ALPHA_EXT 0x8C44 #define GL_SLUMINANCE8_ALPHA8_EXT 0x8C45 #define GL_SLUMINANCE_EXT 0x8C46 #define GL_SLUMINANCE8_EXT 0x8C47 #define GL_COMPRESSED_SRGB_EXT 0x8C48 #define GL_COMPRESSED_SRGB_ALPHA_EXT 0x8C49 #define GL_COMPRESSED_SLUMINANCE_EXT 0x8C4A #define GL_COMPRESSED_SLUMINANCE_ALPHA_EXT 0x8C4B #define GL_COMPRESSED_SRGB_S3TC_DXT1_EXT 0x8C4C #define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT 0x8C4D #define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT 0x8C4E #define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT 0x8C4F #endif /* GL_EXT_framebuffer_blit */ #ifndef GL_EXT_framebuffer_blit #define GL_EXT_framebuffer_blit 1 #define __GLEE_GL_EXT_framebuffer_blit 1 /* Constants */ #define GL_READ_FRAMEBUFFER_EXT 0x8CA8 #define GL_DRAW_FRAMEBUFFER_EXT 0x8CA9 #define GL_DRAW_FRAMEBUFFER_BINDING_EXT GL_FRAMEBUFFER_BINDING_EXT #define GL_READ_FRAMEBUFFER_BINDING_EXT 0x8CAA #ifndef GLEE_H_DEFINED_glBlitFramebufferEXT #define GLEE_H_DEFINED_glBlitFramebufferEXT typedef void (APIENTRYP GLEEPFNGLBLITFRAMEBUFFEREXTPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); GLEE_EXTERN GLEEPFNGLBLITFRAMEBUFFEREXTPROC GLeeFuncPtr_glBlitFramebufferEXT; #define glBlitFramebufferEXT GLeeFuncPtr_glBlitFramebufferEXT #endif #endif /* GL_EXT_framebuffer_multisample */ #ifndef GL_EXT_framebuffer_multisample #define GL_EXT_framebuffer_multisample 1 #define __GLEE_GL_EXT_framebuffer_multisample 1 /* Constants */ #define GL_RENDERBUFFER_SAMPLES_EXT 0x8CAB #define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8D56 #define GL_MAX_SAMPLES_EXT 0x8D57 #ifndef GLEE_H_DEFINED_glRenderbufferStorageMultisampleEXT #define GLEE_H_DEFINED_glRenderbufferStorageMultisampleEXT typedef void (APIENTRYP GLEEPFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); GLEE_EXTERN GLEEPFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC GLeeFuncPtr_glRenderbufferStorageMultisampleEXT; #define glRenderbufferStorageMultisampleEXT GLeeFuncPtr_glRenderbufferStorageMultisampleEXT #endif #endif /* GL_MESAX_texture_stack */ #ifndef GL_MESAX_texture_stack #define GL_MESAX_texture_stack 1 #define __GLEE_GL_MESAX_texture_stack 1 /* Constants */ #define GL_TEXTURE_1D_STACK_MESAX 0x8759 #define GL_TEXTURE_2D_STACK_MESAX 0x875A #define GL_PROXY_TEXTURE_1D_STACK_MESAX 0x875B #define GL_PROXY_TEXTURE_2D_STACK_MESAX 0x875C #define GL_TEXTURE_1D_STACK_BINDING_MESAX 0x875D #define GL_TEXTURE_2D_STACK_BINDING_MESAX 0x875E #endif /* GL_EXT_timer_query */ #ifndef GL_EXT_timer_query #define GL_EXT_timer_query 1 #define __GLEE_GL_EXT_timer_query 1 /* Constants */ #define GL_TIME_ELAPSED_EXT 0x88BF #ifndef GLEE_H_DEFINED_glGetQueryObjecti64vEXT #define GLEE_H_DEFINED_glGetQueryObjecti64vEXT typedef void (APIENTRYP GLEEPFNGLGETQUERYOBJECTI64VEXTPROC) (GLuint id, GLenum pname, GLint64EXT * params); GLEE_EXTERN GLEEPFNGLGETQUERYOBJECTI64VEXTPROC GLeeFuncPtr_glGetQueryObjecti64vEXT; #define glGetQueryObjecti64vEXT GLeeFuncPtr_glGetQueryObjecti64vEXT #endif #ifndef GLEE_H_DEFINED_glGetQueryObjectui64vEXT #define GLEE_H_DEFINED_glGetQueryObjectui64vEXT typedef void (APIENTRYP GLEEPFNGLGETQUERYOBJECTUI64VEXTPROC) (GLuint id, GLenum pname, GLuint64EXT * params); GLEE_EXTERN GLEEPFNGLGETQUERYOBJECTUI64VEXTPROC GLeeFuncPtr_glGetQueryObjectui64vEXT; #define glGetQueryObjectui64vEXT GLeeFuncPtr_glGetQueryObjectui64vEXT #endif #endif /* GL_EXT_gpu_program_parameters */ #ifndef GL_EXT_gpu_program_parameters #define GL_EXT_gpu_program_parameters 1 #define __GLEE_GL_EXT_gpu_program_parameters 1 /* Constants */ #ifndef GLEE_H_DEFINED_glProgramEnvParameters4fvEXT #define GLEE_H_DEFINED_glProgramEnvParameters4fvEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMENVPARAMETERS4FVEXTPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat * params); GLEE_EXTERN GLEEPFNGLPROGRAMENVPARAMETERS4FVEXTPROC GLeeFuncPtr_glProgramEnvParameters4fvEXT; #define glProgramEnvParameters4fvEXT GLeeFuncPtr_glProgramEnvParameters4fvEXT #endif #ifndef GLEE_H_DEFINED_glProgramLocalParameters4fvEXT #define GLEE_H_DEFINED_glProgramLocalParameters4fvEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat * params); GLEE_EXTERN GLEEPFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC GLeeFuncPtr_glProgramLocalParameters4fvEXT; #define glProgramLocalParameters4fvEXT GLeeFuncPtr_glProgramLocalParameters4fvEXT #endif #endif /* GL_APPLE_flush_buffer_range */ #ifndef GL_APPLE_flush_buffer_range #define GL_APPLE_flush_buffer_range 1 #define __GLEE_GL_APPLE_flush_buffer_range 1 /* Constants */ #define GL_BUFFER_SERIALIZED_MODIFY_APPLE 0x8A12 #define GL_BUFFER_FLUSHING_UNMAP_APPLE 0x8A13 #ifndef GLEE_H_DEFINED_glBufferParameteriAPPLE #define GLEE_H_DEFINED_glBufferParameteriAPPLE typedef void (APIENTRYP GLEEPFNGLBUFFERPARAMETERIAPPLEPROC) (GLenum target, GLenum pname, GLint param); GLEE_EXTERN GLEEPFNGLBUFFERPARAMETERIAPPLEPROC GLeeFuncPtr_glBufferParameteriAPPLE; #define glBufferParameteriAPPLE GLeeFuncPtr_glBufferParameteriAPPLE #endif #ifndef GLEE_H_DEFINED_glFlushMappedBufferRangeAPPLE #define GLEE_H_DEFINED_glFlushMappedBufferRangeAPPLE typedef void (APIENTRYP GLEEPFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC) (GLenum target, GLintptr offset, GLsizeiptr size); GLEE_EXTERN GLEEPFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC GLeeFuncPtr_glFlushMappedBufferRangeAPPLE; #define glFlushMappedBufferRangeAPPLE GLeeFuncPtr_glFlushMappedBufferRangeAPPLE #endif #endif /* GL_EXT_gpu_shader4 */ #ifndef GL_EXT_gpu_shader4 #define GL_EXT_gpu_shader4 1 #define __GLEE_GL_EXT_gpu_shader4 1 /* Constants */ #define GL_SAMPLER_1D_ARRAY_EXT 0x8DC0 #define GL_SAMPLER_2D_ARRAY_EXT 0x8DC1 #define GL_SAMPLER_BUFFER_EXT 0x8DC2 #define GL_SAMPLER_1D_ARRAY_SHADOW_EXT 0x8DC3 #define GL_SAMPLER_2D_ARRAY_SHADOW_EXT 0x8DC4 #define GL_SAMPLER_CUBE_SHADOW_EXT 0x8DC5 #define GL_UNSIGNED_INT_VEC2_EXT 0x8DC6 #define GL_UNSIGNED_INT_VEC3_EXT 0x8DC7 #define GL_UNSIGNED_INT_VEC4_EXT 0x8DC8 #define GL_INT_SAMPLER_1D_EXT 0x8DC9 #define GL_INT_SAMPLER_2D_EXT 0x8DCA #define GL_INT_SAMPLER_3D_EXT 0x8DCB #define GL_INT_SAMPLER_CUBE_EXT 0x8DCC #define GL_INT_SAMPLER_2D_RECT_EXT 0x8DCD #define GL_INT_SAMPLER_1D_ARRAY_EXT 0x8DCE #define GL_INT_SAMPLER_2D_ARRAY_EXT 0x8DCF #define GL_INT_SAMPLER_BUFFER_EXT 0x8DD0 #define GL_UNSIGNED_INT_SAMPLER_1D_EXT 0x8DD1 #define GL_UNSIGNED_INT_SAMPLER_2D_EXT 0x8DD2 #define GL_UNSIGNED_INT_SAMPLER_3D_EXT 0x8DD3 #define GL_UNSIGNED_INT_SAMPLER_CUBE_EXT 0x8DD4 #define GL_UNSIGNED_INT_SAMPLER_2D_RECT_EXT 0x8DD5 #define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY_EXT 0x8DD6 #define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY_EXT 0x8DD7 #define GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT 0x8DD8 #ifndef GLEE_H_DEFINED_glGetUniformuivEXT #define GLEE_H_DEFINED_glGetUniformuivEXT typedef void (APIENTRYP GLEEPFNGLGETUNIFORMUIVEXTPROC) (GLuint program, GLint location, GLuint * params); GLEE_EXTERN GLEEPFNGLGETUNIFORMUIVEXTPROC GLeeFuncPtr_glGetUniformuivEXT; #define glGetUniformuivEXT GLeeFuncPtr_glGetUniformuivEXT #endif #ifndef GLEE_H_DEFINED_glBindFragDataLocationEXT #define GLEE_H_DEFINED_glBindFragDataLocationEXT typedef void (APIENTRYP GLEEPFNGLBINDFRAGDATALOCATIONEXTPROC) (GLuint program, GLuint color, const GLchar * name); GLEE_EXTERN GLEEPFNGLBINDFRAGDATALOCATIONEXTPROC GLeeFuncPtr_glBindFragDataLocationEXT; #define glBindFragDataLocationEXT GLeeFuncPtr_glBindFragDataLocationEXT #endif #ifndef GLEE_H_DEFINED_glGetFragDataLocationEXT #define GLEE_H_DEFINED_glGetFragDataLocationEXT typedef GLint (APIENTRYP GLEEPFNGLGETFRAGDATALOCATIONEXTPROC) (GLuint program, const GLchar * name); GLEE_EXTERN GLEEPFNGLGETFRAGDATALOCATIONEXTPROC GLeeFuncPtr_glGetFragDataLocationEXT; #define glGetFragDataLocationEXT GLeeFuncPtr_glGetFragDataLocationEXT #endif #ifndef GLEE_H_DEFINED_glUniform1uiEXT #define GLEE_H_DEFINED_glUniform1uiEXT typedef void (APIENTRYP GLEEPFNGLUNIFORM1UIEXTPROC) (GLint location, GLuint v0); GLEE_EXTERN GLEEPFNGLUNIFORM1UIEXTPROC GLeeFuncPtr_glUniform1uiEXT; #define glUniform1uiEXT GLeeFuncPtr_glUniform1uiEXT #endif #ifndef GLEE_H_DEFINED_glUniform2uiEXT #define GLEE_H_DEFINED_glUniform2uiEXT typedef void (APIENTRYP GLEEPFNGLUNIFORM2UIEXTPROC) (GLint location, GLuint v0, GLuint v1); GLEE_EXTERN GLEEPFNGLUNIFORM2UIEXTPROC GLeeFuncPtr_glUniform2uiEXT; #define glUniform2uiEXT GLeeFuncPtr_glUniform2uiEXT #endif #ifndef GLEE_H_DEFINED_glUniform3uiEXT #define GLEE_H_DEFINED_glUniform3uiEXT typedef void (APIENTRYP GLEEPFNGLUNIFORM3UIEXTPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2); GLEE_EXTERN GLEEPFNGLUNIFORM3UIEXTPROC GLeeFuncPtr_glUniform3uiEXT; #define glUniform3uiEXT GLeeFuncPtr_glUniform3uiEXT #endif #ifndef GLEE_H_DEFINED_glUniform4uiEXT #define GLEE_H_DEFINED_glUniform4uiEXT typedef void (APIENTRYP GLEEPFNGLUNIFORM4UIEXTPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); GLEE_EXTERN GLEEPFNGLUNIFORM4UIEXTPROC GLeeFuncPtr_glUniform4uiEXT; #define glUniform4uiEXT GLeeFuncPtr_glUniform4uiEXT #endif #ifndef GLEE_H_DEFINED_glUniform1uivEXT #define GLEE_H_DEFINED_glUniform1uivEXT typedef void (APIENTRYP GLEEPFNGLUNIFORM1UIVEXTPROC) (GLint location, GLsizei count, const GLuint * value); GLEE_EXTERN GLEEPFNGLUNIFORM1UIVEXTPROC GLeeFuncPtr_glUniform1uivEXT; #define glUniform1uivEXT GLeeFuncPtr_glUniform1uivEXT #endif #ifndef GLEE_H_DEFINED_glUniform2uivEXT #define GLEE_H_DEFINED_glUniform2uivEXT typedef void (APIENTRYP GLEEPFNGLUNIFORM2UIVEXTPROC) (GLint location, GLsizei count, const GLuint * value); GLEE_EXTERN GLEEPFNGLUNIFORM2UIVEXTPROC GLeeFuncPtr_glUniform2uivEXT; #define glUniform2uivEXT GLeeFuncPtr_glUniform2uivEXT #endif #ifndef GLEE_H_DEFINED_glUniform3uivEXT #define GLEE_H_DEFINED_glUniform3uivEXT typedef void (APIENTRYP GLEEPFNGLUNIFORM3UIVEXTPROC) (GLint location, GLsizei count, const GLuint * value); GLEE_EXTERN GLEEPFNGLUNIFORM3UIVEXTPROC GLeeFuncPtr_glUniform3uivEXT; #define glUniform3uivEXT GLeeFuncPtr_glUniform3uivEXT #endif #ifndef GLEE_H_DEFINED_glUniform4uivEXT #define GLEE_H_DEFINED_glUniform4uivEXT typedef void (APIENTRYP GLEEPFNGLUNIFORM4UIVEXTPROC) (GLint location, GLsizei count, const GLuint * value); GLEE_EXTERN GLEEPFNGLUNIFORM4UIVEXTPROC GLeeFuncPtr_glUniform4uivEXT; #define glUniform4uivEXT GLeeFuncPtr_glUniform4uivEXT #endif #endif /* GL_EXT_draw_instanced */ #ifndef GL_EXT_draw_instanced #define GL_EXT_draw_instanced 1 #define __GLEE_GL_EXT_draw_instanced 1 /* Constants */ #ifndef GLEE_H_DEFINED_glDrawArraysInstancedEXT #define GLEE_H_DEFINED_glDrawArraysInstancedEXT typedef void (APIENTRYP GLEEPFNGLDRAWARRAYSINSTANCEDEXTPROC) (GLenum mode, GLint start, GLsizei count, GLsizei primcount); GLEE_EXTERN GLEEPFNGLDRAWARRAYSINSTANCEDEXTPROC GLeeFuncPtr_glDrawArraysInstancedEXT; #define glDrawArraysInstancedEXT GLeeFuncPtr_glDrawArraysInstancedEXT #endif #ifndef GLEE_H_DEFINED_glDrawElementsInstancedEXT #define GLEE_H_DEFINED_glDrawElementsInstancedEXT typedef void (APIENTRYP GLEEPFNGLDRAWELEMENTSINSTANCEDEXTPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid * indices, GLsizei primcount); GLEE_EXTERN GLEEPFNGLDRAWELEMENTSINSTANCEDEXTPROC GLeeFuncPtr_glDrawElementsInstancedEXT; #define glDrawElementsInstancedEXT GLeeFuncPtr_glDrawElementsInstancedEXT #endif #endif /* GL_EXT_packed_float */ #ifndef GL_EXT_packed_float #define GL_EXT_packed_float 1 #define __GLEE_GL_EXT_packed_float 1 /* Constants */ #define GL_R11F_G11F_B10F_EXT 0x8C3A #define GL_UNSIGNED_INT_10F_11F_11F_REV_EXT 0x8C3B #define GL_RGBA_SIGNED_COMPONENTS_EXT 0x8C3C #endif /* GL_EXT_texture_array */ #ifndef GL_EXT_texture_array #define GL_EXT_texture_array 1 #define __GLEE_GL_EXT_texture_array 1 /* Constants */ #define GL_TEXTURE_1D_ARRAY_EXT 0x8C18 #define GL_PROXY_TEXTURE_1D_ARRAY_EXT 0x8C19 #define GL_TEXTURE_2D_ARRAY_EXT 0x8C1A #define GL_PROXY_TEXTURE_2D_ARRAY_EXT 0x8C1B #define GL_TEXTURE_BINDING_1D_ARRAY_EXT 0x8C1C #define GL_TEXTURE_BINDING_2D_ARRAY_EXT 0x8C1D #define GL_MAX_ARRAY_TEXTURE_LAYERS_EXT 0x88FF #define GL_COMPARE_REF_DEPTH_TO_TEXTURE_EXT 0x884E #endif /* GL_EXT_texture_buffer_object */ #ifndef GL_EXT_texture_buffer_object #define GL_EXT_texture_buffer_object 1 #define __GLEE_GL_EXT_texture_buffer_object 1 /* Constants */ #define GL_TEXTURE_BUFFER_EXT 0x8C2A #define GL_MAX_TEXTURE_BUFFER_SIZE_EXT 0x8C2B #define GL_TEXTURE_BINDING_BUFFER_EXT 0x8C2C #define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_EXT 0x8C2D #define GL_TEXTURE_BUFFER_FORMAT_EXT 0x8C2E #ifndef GLEE_H_DEFINED_glTexBufferEXT #define GLEE_H_DEFINED_glTexBufferEXT typedef void (APIENTRYP GLEEPFNGLTEXBUFFEREXTPROC) (GLenum target, GLenum internalformat, GLuint buffer); GLEE_EXTERN GLEEPFNGLTEXBUFFEREXTPROC GLeeFuncPtr_glTexBufferEXT; #define glTexBufferEXT GLeeFuncPtr_glTexBufferEXT #endif #endif /* GL_EXT_texture_compression_latc */ #ifndef GL_EXT_texture_compression_latc #define GL_EXT_texture_compression_latc 1 #define __GLEE_GL_EXT_texture_compression_latc 1 /* Constants */ #define GL_COMPRESSED_LUMINANCE_LATC1_EXT 0x8C70 #define GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT 0x8C71 #define GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT 0x8C72 #define GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT 0x8C73 #endif /* GL_EXT_texture_compression_rgtc */ #ifndef GL_EXT_texture_compression_rgtc #define GL_EXT_texture_compression_rgtc 1 #define __GLEE_GL_EXT_texture_compression_rgtc 1 /* Constants */ #define GL_COMPRESSED_RED_RGTC1_EXT 0x8DBB #define GL_COMPRESSED_SIGNED_RED_RGTC1_EXT 0x8DBC #define GL_COMPRESSED_RED_GREEN_RGTC2_EXT 0x8DBD #define GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT 0x8DBE #endif /* GL_EXT_texture_shared_exponent */ #ifndef GL_EXT_texture_shared_exponent #define GL_EXT_texture_shared_exponent 1 #define __GLEE_GL_EXT_texture_shared_exponent 1 /* Constants */ #define GL_RGB9_E5_EXT 0x8C3D #define GL_UNSIGNED_INT_5_9_9_9_REV_EXT 0x8C3E #define GL_TEXTURE_SHARED_SIZE_EXT 0x8C3F #endif /* GL_NV_depth_buffer_float */ #ifndef GL_NV_depth_buffer_float #define GL_NV_depth_buffer_float 1 #define __GLEE_GL_NV_depth_buffer_float 1 /* Constants */ #define GL_DEPTH_COMPONENT32F_NV 0x8DAB #define GL_DEPTH32F_STENCIL8_NV 0x8DAC #define GL_FLOAT_32_UNSIGNED_INT_24_8_REV_NV 0x8DAD #define GL_DEPTH_BUFFER_FLOAT_MODE_NV 0x8DAF #ifndef GLEE_H_DEFINED_glDepthRangedNV #define GLEE_H_DEFINED_glDepthRangedNV typedef void (APIENTRYP GLEEPFNGLDEPTHRANGEDNVPROC) (GLdouble zNear, GLdouble zFar); GLEE_EXTERN GLEEPFNGLDEPTHRANGEDNVPROC GLeeFuncPtr_glDepthRangedNV; #define glDepthRangedNV GLeeFuncPtr_glDepthRangedNV #endif #ifndef GLEE_H_DEFINED_glClearDepthdNV #define GLEE_H_DEFINED_glClearDepthdNV typedef void (APIENTRYP GLEEPFNGLCLEARDEPTHDNVPROC) (GLdouble depth); GLEE_EXTERN GLEEPFNGLCLEARDEPTHDNVPROC GLeeFuncPtr_glClearDepthdNV; #define glClearDepthdNV GLeeFuncPtr_glClearDepthdNV #endif #ifndef GLEE_H_DEFINED_glDepthBoundsdNV #define GLEE_H_DEFINED_glDepthBoundsdNV typedef void (APIENTRYP GLEEPFNGLDEPTHBOUNDSDNVPROC) (GLdouble zmin, GLdouble zmax); GLEE_EXTERN GLEEPFNGLDEPTHBOUNDSDNVPROC GLeeFuncPtr_glDepthBoundsdNV; #define glDepthBoundsdNV GLeeFuncPtr_glDepthBoundsdNV #endif #endif /* GL_NV_framebuffer_multisample_coverage */ #ifndef GL_NV_framebuffer_multisample_coverage #define GL_NV_framebuffer_multisample_coverage 1 #define __GLEE_GL_NV_framebuffer_multisample_coverage 1 /* Constants */ #define GL_RENDERBUFFER_COVERAGE_SAMPLES_NV 0x8CAB #define GL_RENDERBUFFER_COLOR_SAMPLES_NV 0x8E10 #define GL_MAX_MULTISAMPLE_COVERAGE_MODES_NV 0x8E11 #define GL_MULTISAMPLE_COVERAGE_MODES_NV 0x8E12 #ifndef GLEE_H_DEFINED_glRenderbufferStorageMultisampleCoverageNV #define GLEE_H_DEFINED_glRenderbufferStorageMultisampleCoverageNV typedef void (APIENTRYP GLEEPFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); GLEE_EXTERN GLEEPFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC GLeeFuncPtr_glRenderbufferStorageMultisampleCoverageNV; #define glRenderbufferStorageMultisampleCoverageNV GLeeFuncPtr_glRenderbufferStorageMultisampleCoverageNV #endif #endif /* GL_EXT_framebuffer_sRGB */ #ifndef GL_EXT_framebuffer_sRGB #define GL_EXT_framebuffer_sRGB 1 #define __GLEE_GL_EXT_framebuffer_sRGB 1 /* Constants */ #define GL_FRAMEBUFFER_SRGB_EXT 0x8DB9 #define GL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x8DBA #endif /* GL_NV_geometry_shader4 */ #ifndef GL_NV_geometry_shader4 #define GL_NV_geometry_shader4 1 #define __GLEE_GL_NV_geometry_shader4 1 /* Constants */ #endif /* GL_NV_parameter_buffer_object */ #ifndef GL_NV_parameter_buffer_object #define GL_NV_parameter_buffer_object 1 #define __GLEE_GL_NV_parameter_buffer_object 1 /* Constants */ #define GL_MAX_PROGRAM_PARAMETER_BUFFER_BINDINGS_NV 0x8DA0 #define GL_MAX_PROGRAM_PARAMETER_BUFFER_SIZE_NV 0x8DA1 #define GL_VERTEX_PROGRAM_PARAMETER_BUFFER_NV 0x8DA2 #define GL_GEOMETRY_PROGRAM_PARAMETER_BUFFER_NV 0x8DA3 #define GL_FRAGMENT_PROGRAM_PARAMETER_BUFFER_NV 0x8DA4 #ifndef GLEE_H_DEFINED_glProgramBufferParametersfvNV #define GLEE_H_DEFINED_glProgramBufferParametersfvNV typedef void (APIENTRYP GLEEPFNGLPROGRAMBUFFERPARAMETERSFVNVPROC) (GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLfloat * params); GLEE_EXTERN GLEEPFNGLPROGRAMBUFFERPARAMETERSFVNVPROC GLeeFuncPtr_glProgramBufferParametersfvNV; #define glProgramBufferParametersfvNV GLeeFuncPtr_glProgramBufferParametersfvNV #endif #ifndef GLEE_H_DEFINED_glProgramBufferParametersIivNV #define GLEE_H_DEFINED_glProgramBufferParametersIivNV typedef void (APIENTRYP GLEEPFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC) (GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLint * params); GLEE_EXTERN GLEEPFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC GLeeFuncPtr_glProgramBufferParametersIivNV; #define glProgramBufferParametersIivNV GLeeFuncPtr_glProgramBufferParametersIivNV #endif #ifndef GLEE_H_DEFINED_glProgramBufferParametersIuivNV #define GLEE_H_DEFINED_glProgramBufferParametersIuivNV typedef void (APIENTRYP GLEEPFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC) (GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLuint * params); GLEE_EXTERN GLEEPFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC GLeeFuncPtr_glProgramBufferParametersIuivNV; #define glProgramBufferParametersIuivNV GLeeFuncPtr_glProgramBufferParametersIuivNV #endif #endif /* GL_EXT_draw_buffers2 */ #ifndef GL_EXT_draw_buffers2 #define GL_EXT_draw_buffers2 1 #define __GLEE_GL_EXT_draw_buffers2 1 /* Constants */ #ifndef GLEE_H_DEFINED_glColorMaskIndexedEXT #define GLEE_H_DEFINED_glColorMaskIndexedEXT typedef void (APIENTRYP GLEEPFNGLCOLORMASKINDEXEDEXTPROC) (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); GLEE_EXTERN GLEEPFNGLCOLORMASKINDEXEDEXTPROC GLeeFuncPtr_glColorMaskIndexedEXT; #define glColorMaskIndexedEXT GLeeFuncPtr_glColorMaskIndexedEXT #endif #ifndef GLEE_H_DEFINED_glGetBooleanIndexedvEXT #define GLEE_H_DEFINED_glGetBooleanIndexedvEXT typedef void (APIENTRYP GLEEPFNGLGETBOOLEANINDEXEDVEXTPROC) (GLenum target, GLuint index, GLboolean * data); GLEE_EXTERN GLEEPFNGLGETBOOLEANINDEXEDVEXTPROC GLeeFuncPtr_glGetBooleanIndexedvEXT; #define glGetBooleanIndexedvEXT GLeeFuncPtr_glGetBooleanIndexedvEXT #endif #ifndef GLEE_H_DEFINED_glGetIntegerIndexedvEXT #define GLEE_H_DEFINED_glGetIntegerIndexedvEXT typedef void (APIENTRYP GLEEPFNGLGETINTEGERINDEXEDVEXTPROC) (GLenum target, GLuint index, GLint * data); GLEE_EXTERN GLEEPFNGLGETINTEGERINDEXEDVEXTPROC GLeeFuncPtr_glGetIntegerIndexedvEXT; #define glGetIntegerIndexedvEXT GLeeFuncPtr_glGetIntegerIndexedvEXT #endif #ifndef GLEE_H_DEFINED_glEnableIndexedEXT #define GLEE_H_DEFINED_glEnableIndexedEXT typedef void (APIENTRYP GLEEPFNGLENABLEINDEXEDEXTPROC) (GLenum target, GLuint index); GLEE_EXTERN GLEEPFNGLENABLEINDEXEDEXTPROC GLeeFuncPtr_glEnableIndexedEXT; #define glEnableIndexedEXT GLeeFuncPtr_glEnableIndexedEXT #endif #ifndef GLEE_H_DEFINED_glDisableIndexedEXT #define GLEE_H_DEFINED_glDisableIndexedEXT typedef void (APIENTRYP GLEEPFNGLDISABLEINDEXEDEXTPROC) (GLenum target, GLuint index); GLEE_EXTERN GLEEPFNGLDISABLEINDEXEDEXTPROC GLeeFuncPtr_glDisableIndexedEXT; #define glDisableIndexedEXT GLeeFuncPtr_glDisableIndexedEXT #endif #ifndef GLEE_H_DEFINED_glIsEnabledIndexedEXT #define GLEE_H_DEFINED_glIsEnabledIndexedEXT typedef GLboolean (APIENTRYP GLEEPFNGLISENABLEDINDEXEDEXTPROC) (GLenum target, GLuint index); GLEE_EXTERN GLEEPFNGLISENABLEDINDEXEDEXTPROC GLeeFuncPtr_glIsEnabledIndexedEXT; #define glIsEnabledIndexedEXT GLeeFuncPtr_glIsEnabledIndexedEXT #endif #endif /* GL_NV_transform_feedback */ #ifndef GL_NV_transform_feedback #define GL_NV_transform_feedback 1 #define __GLEE_GL_NV_transform_feedback 1 /* Constants */ #define GL_BACK_PRIMARY_COLOR_NV 0x8C77 #define GL_BACK_SECONDARY_COLOR_NV 0x8C78 #define GL_TEXTURE_COORD_NV 0x8C79 #define GL_CLIP_DISTANCE_NV 0x8C7A #define GL_VERTEX_ID_NV 0x8C7B #define GL_PRIMITIVE_ID_NV 0x8C7C #define GL_GENERIC_ATTRIB_NV 0x8C7D #define GL_TRANSFORM_FEEDBACK_ATTRIBS_NV 0x8C7E #define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_NV 0x8C7F #define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_NV 0x8C80 #define GL_ACTIVE_VARYINGS_NV 0x8C81 #define GL_ACTIVE_VARYING_MAX_LENGTH_NV 0x8C82 #define GL_TRANSFORM_FEEDBACK_VARYINGS_NV 0x8C83 #define GL_TRANSFORM_FEEDBACK_BUFFER_START_NV 0x8C84 #define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_NV 0x8C85 #define GL_TRANSFORM_FEEDBACK_RECORD_NV 0x8C86 #define GL_PRIMITIVES_GENERATED_NV 0x8C87 #define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_NV 0x8C88 #define GL_RASTERIZER_DISCARD_NV 0x8C89 #define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_ATTRIBS_NV 0x8C8A #define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_NV 0x8C8B #define GL_INTERLEAVED_ATTRIBS_NV 0x8C8C #define GL_SEPARATE_ATTRIBS_NV 0x8C8D #define GL_TRANSFORM_FEEDBACK_BUFFER_NV 0x8C8E #define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_NV 0x8C8F #ifndef GLEE_H_DEFINED_glBeginTransformFeedbackNV #define GLEE_H_DEFINED_glBeginTransformFeedbackNV typedef void (APIENTRYP GLEEPFNGLBEGINTRANSFORMFEEDBACKNVPROC) (GLenum primitiveMode); GLEE_EXTERN GLEEPFNGLBEGINTRANSFORMFEEDBACKNVPROC GLeeFuncPtr_glBeginTransformFeedbackNV; #define glBeginTransformFeedbackNV GLeeFuncPtr_glBeginTransformFeedbackNV #endif #ifndef GLEE_H_DEFINED_glEndTransformFeedbackNV #define GLEE_H_DEFINED_glEndTransformFeedbackNV typedef void (APIENTRYP GLEEPFNGLENDTRANSFORMFEEDBACKNVPROC) (); GLEE_EXTERN GLEEPFNGLENDTRANSFORMFEEDBACKNVPROC GLeeFuncPtr_glEndTransformFeedbackNV; #define glEndTransformFeedbackNV GLeeFuncPtr_glEndTransformFeedbackNV #endif #ifndef GLEE_H_DEFINED_glTransformFeedbackAttribsNV #define GLEE_H_DEFINED_glTransformFeedbackAttribsNV typedef void (APIENTRYP GLEEPFNGLTRANSFORMFEEDBACKATTRIBSNVPROC) (GLuint count, const GLint * attribs, GLenum bufferMode); GLEE_EXTERN GLEEPFNGLTRANSFORMFEEDBACKATTRIBSNVPROC GLeeFuncPtr_glTransformFeedbackAttribsNV; #define glTransformFeedbackAttribsNV GLeeFuncPtr_glTransformFeedbackAttribsNV #endif #ifndef GLEE_H_DEFINED_glBindBufferRangeNV #define GLEE_H_DEFINED_glBindBufferRangeNV typedef void (APIENTRYP GLEEPFNGLBINDBUFFERRANGENVPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); GLEE_EXTERN GLEEPFNGLBINDBUFFERRANGENVPROC GLeeFuncPtr_glBindBufferRangeNV; #define glBindBufferRangeNV GLeeFuncPtr_glBindBufferRangeNV #endif #ifndef GLEE_H_DEFINED_glBindBufferOffsetNV #define GLEE_H_DEFINED_glBindBufferOffsetNV typedef void (APIENTRYP GLEEPFNGLBINDBUFFEROFFSETNVPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset); GLEE_EXTERN GLEEPFNGLBINDBUFFEROFFSETNVPROC GLeeFuncPtr_glBindBufferOffsetNV; #define glBindBufferOffsetNV GLeeFuncPtr_glBindBufferOffsetNV #endif #ifndef GLEE_H_DEFINED_glBindBufferBaseNV #define GLEE_H_DEFINED_glBindBufferBaseNV typedef void (APIENTRYP GLEEPFNGLBINDBUFFERBASENVPROC) (GLenum target, GLuint index, GLuint buffer); GLEE_EXTERN GLEEPFNGLBINDBUFFERBASENVPROC GLeeFuncPtr_glBindBufferBaseNV; #define glBindBufferBaseNV GLeeFuncPtr_glBindBufferBaseNV #endif #ifndef GLEE_H_DEFINED_glTransformFeedbackVaryingsNV #define GLEE_H_DEFINED_glTransformFeedbackVaryingsNV typedef void (APIENTRYP GLEEPFNGLTRANSFORMFEEDBACKVARYINGSNVPROC) (GLuint program, GLsizei count, const GLint * locations, GLenum bufferMode); GLEE_EXTERN GLEEPFNGLTRANSFORMFEEDBACKVARYINGSNVPROC GLeeFuncPtr_glTransformFeedbackVaryingsNV; #define glTransformFeedbackVaryingsNV GLeeFuncPtr_glTransformFeedbackVaryingsNV #endif #ifndef GLEE_H_DEFINED_glActiveVaryingNV #define GLEE_H_DEFINED_glActiveVaryingNV typedef void (APIENTRYP GLEEPFNGLACTIVEVARYINGNVPROC) (GLuint program, const GLchar * name); GLEE_EXTERN GLEEPFNGLACTIVEVARYINGNVPROC GLeeFuncPtr_glActiveVaryingNV; #define glActiveVaryingNV GLeeFuncPtr_glActiveVaryingNV #endif #ifndef GLEE_H_DEFINED_glGetVaryingLocationNV #define GLEE_H_DEFINED_glGetVaryingLocationNV typedef GLint (APIENTRYP GLEEPFNGLGETVARYINGLOCATIONNVPROC) (GLuint program, const GLchar * name); GLEE_EXTERN GLEEPFNGLGETVARYINGLOCATIONNVPROC GLeeFuncPtr_glGetVaryingLocationNV; #define glGetVaryingLocationNV GLeeFuncPtr_glGetVaryingLocationNV #endif #ifndef GLEE_H_DEFINED_glGetActiveVaryingNV #define GLEE_H_DEFINED_glGetActiveVaryingNV typedef void (APIENTRYP GLEEPFNGLGETACTIVEVARYINGNVPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLsizei * size, GLenum * type, GLchar * name); GLEE_EXTERN GLEEPFNGLGETACTIVEVARYINGNVPROC GLeeFuncPtr_glGetActiveVaryingNV; #define glGetActiveVaryingNV GLeeFuncPtr_glGetActiveVaryingNV #endif #ifndef GLEE_H_DEFINED_glGetTransformFeedbackVaryingNV #define GLEE_H_DEFINED_glGetTransformFeedbackVaryingNV typedef void (APIENTRYP GLEEPFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC) (GLuint program, GLuint index, GLint * location); GLEE_EXTERN GLEEPFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC GLeeFuncPtr_glGetTransformFeedbackVaryingNV; #define glGetTransformFeedbackVaryingNV GLeeFuncPtr_glGetTransformFeedbackVaryingNV #endif #endif /* GL_EXT_bindable_uniform */ #ifndef GL_EXT_bindable_uniform #define GL_EXT_bindable_uniform 1 #define __GLEE_GL_EXT_bindable_uniform 1 /* Constants */ #define GL_MAX_VERTEX_BINDABLE_UNIFORMS_EXT 0x8DE2 #define GL_MAX_FRAGMENT_BINDABLE_UNIFORMS_EXT 0x8DE3 #define GL_MAX_GEOMETRY_BINDABLE_UNIFORMS_EXT 0x8DE4 #define GL_MAX_BINDABLE_UNIFORM_SIZE_EXT 0x8DED #define GL_UNIFORM_BUFFER_EXT 0x8DEE #define GL_UNIFORM_BUFFER_BINDING_EXT 0x8DEF #ifndef GLEE_H_DEFINED_glUniformBufferEXT #define GLEE_H_DEFINED_glUniformBufferEXT typedef void (APIENTRYP GLEEPFNGLUNIFORMBUFFEREXTPROC) (GLuint program, GLint location, GLuint buffer); GLEE_EXTERN GLEEPFNGLUNIFORMBUFFEREXTPROC GLeeFuncPtr_glUniformBufferEXT; #define glUniformBufferEXT GLeeFuncPtr_glUniformBufferEXT #endif #ifndef GLEE_H_DEFINED_glGetUniformBufferSizeEXT #define GLEE_H_DEFINED_glGetUniformBufferSizeEXT typedef GLint (APIENTRYP GLEEPFNGLGETUNIFORMBUFFERSIZEEXTPROC) (GLuint program, GLint location); GLEE_EXTERN GLEEPFNGLGETUNIFORMBUFFERSIZEEXTPROC GLeeFuncPtr_glGetUniformBufferSizeEXT; #define glGetUniformBufferSizeEXT GLeeFuncPtr_glGetUniformBufferSizeEXT #endif #ifndef GLEE_H_DEFINED_glGetUniformOffsetEXT #define GLEE_H_DEFINED_glGetUniformOffsetEXT typedef GLintptr (APIENTRYP GLEEPFNGLGETUNIFORMOFFSETEXTPROC) (GLuint program, GLint location); GLEE_EXTERN GLEEPFNGLGETUNIFORMOFFSETEXTPROC GLeeFuncPtr_glGetUniformOffsetEXT; #define glGetUniformOffsetEXT GLeeFuncPtr_glGetUniformOffsetEXT #endif #endif /* GL_EXT_texture_integer */ #ifndef GL_EXT_texture_integer #define GL_EXT_texture_integer 1 #define __GLEE_GL_EXT_texture_integer 1 /* Constants */ #define GL_RGBA32UI_EXT 0x8D70 #define GL_RGB32UI_EXT 0x8D71 #define GL_ALPHA32UI_EXT 0x8D72 #define GL_INTENSITY32UI_EXT 0x8D73 #define GL_LUMINANCE32UI_EXT 0x8D74 #define GL_LUMINANCE_ALPHA32UI_EXT 0x8D75 #define GL_RGBA16UI_EXT 0x8D76 #define GL_RGB16UI_EXT 0x8D77 #define GL_ALPHA16UI_EXT 0x8D78 #define GL_INTENSITY16UI_EXT 0x8D79 #define GL_LUMINANCE16UI_EXT 0x8D7A #define GL_LUMINANCE_ALPHA16UI_EXT 0x8D7B #define GL_RGBA8UI_EXT 0x8D7C #define GL_RGB8UI_EXT 0x8D7D #define GL_ALPHA8UI_EXT 0x8D7E #define GL_INTENSITY8UI_EXT 0x8D7F #define GL_LUMINANCE8UI_EXT 0x8D80 #define GL_LUMINANCE_ALPHA8UI_EXT 0x8D81 #define GL_RGBA32I_EXT 0x8D82 #define GL_RGB32I_EXT 0x8D83 #define GL_ALPHA32I_EXT 0x8D84 #define GL_INTENSITY32I_EXT 0x8D85 #define GL_LUMINANCE32I_EXT 0x8D86 #define GL_LUMINANCE_ALPHA32I_EXT 0x8D87 #define GL_RGBA16I_EXT 0x8D88 #define GL_RGB16I_EXT 0x8D89 #define GL_ALPHA16I_EXT 0x8D8A #define GL_INTENSITY16I_EXT 0x8D8B #define GL_LUMINANCE16I_EXT 0x8D8C #define GL_LUMINANCE_ALPHA16I_EXT 0x8D8D #define GL_RGBA8I_EXT 0x8D8E #define GL_RGB8I_EXT 0x8D8F #define GL_ALPHA8I_EXT 0x8D90 #define GL_INTENSITY8I_EXT 0x8D91 #define GL_LUMINANCE8I_EXT 0x8D92 #define GL_LUMINANCE_ALPHA8I_EXT 0x8D93 #define GL_RED_INTEGER_EXT 0x8D94 #define GL_GREEN_INTEGER_EXT 0x8D95 #define GL_BLUE_INTEGER_EXT 0x8D96 #define GL_ALPHA_INTEGER_EXT 0x8D97 #define GL_RGB_INTEGER_EXT 0x8D98 #define GL_RGBA_INTEGER_EXT 0x8D99 #define GL_BGR_INTEGER_EXT 0x8D9A #define GL_BGRA_INTEGER_EXT 0x8D9B #define GL_LUMINANCE_INTEGER_EXT 0x8D9C #define GL_LUMINANCE_ALPHA_INTEGER_EXT 0x8D9D #define GL_RGBA_INTEGER_MODE_EXT 0x8D9E #ifndef GLEE_H_DEFINED_glTexParameterIivEXT #define GLEE_H_DEFINED_glTexParameterIivEXT typedef void (APIENTRYP GLEEPFNGLTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, const GLint * params); GLEE_EXTERN GLEEPFNGLTEXPARAMETERIIVEXTPROC GLeeFuncPtr_glTexParameterIivEXT; #define glTexParameterIivEXT GLeeFuncPtr_glTexParameterIivEXT #endif #ifndef GLEE_H_DEFINED_glTexParameterIuivEXT #define GLEE_H_DEFINED_glTexParameterIuivEXT typedef void (APIENTRYP GLEEPFNGLTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, const GLuint * params); GLEE_EXTERN GLEEPFNGLTEXPARAMETERIUIVEXTPROC GLeeFuncPtr_glTexParameterIuivEXT; #define glTexParameterIuivEXT GLeeFuncPtr_glTexParameterIuivEXT #endif #ifndef GLEE_H_DEFINED_glGetTexParameterIivEXT #define GLEE_H_DEFINED_glGetTexParameterIivEXT typedef void (APIENTRYP GLEEPFNGLGETTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETTEXPARAMETERIIVEXTPROC GLeeFuncPtr_glGetTexParameterIivEXT; #define glGetTexParameterIivEXT GLeeFuncPtr_glGetTexParameterIivEXT #endif #ifndef GLEE_H_DEFINED_glGetTexParameterIuivEXT #define GLEE_H_DEFINED_glGetTexParameterIuivEXT typedef void (APIENTRYP GLEEPFNGLGETTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, GLuint * params); GLEE_EXTERN GLEEPFNGLGETTEXPARAMETERIUIVEXTPROC GLeeFuncPtr_glGetTexParameterIuivEXT; #define glGetTexParameterIuivEXT GLeeFuncPtr_glGetTexParameterIuivEXT #endif #ifndef GLEE_H_DEFINED_glClearColorIiEXT #define GLEE_H_DEFINED_glClearColorIiEXT typedef void (APIENTRYP GLEEPFNGLCLEARCOLORIIEXTPROC) (GLint red, GLint green, GLint blue, GLint alpha); GLEE_EXTERN GLEEPFNGLCLEARCOLORIIEXTPROC GLeeFuncPtr_glClearColorIiEXT; #define glClearColorIiEXT GLeeFuncPtr_glClearColorIiEXT #endif #ifndef GLEE_H_DEFINED_glClearColorIuiEXT #define GLEE_H_DEFINED_glClearColorIuiEXT typedef void (APIENTRYP GLEEPFNGLCLEARCOLORIUIEXTPROC) (GLuint red, GLuint green, GLuint blue, GLuint alpha); GLEE_EXTERN GLEEPFNGLCLEARCOLORIUIEXTPROC GLeeFuncPtr_glClearColorIuiEXT; #define glClearColorIuiEXT GLeeFuncPtr_glClearColorIuiEXT #endif #endif /* GL_GREMEDY_frame_terminator */ #ifndef GL_GREMEDY_frame_terminator #define GL_GREMEDY_frame_terminator 1 #define __GLEE_GL_GREMEDY_frame_terminator 1 /* Constants */ #ifndef GLEE_H_DEFINED_glFrameTerminatorGREMEDY #define GLEE_H_DEFINED_glFrameTerminatorGREMEDY typedef void (APIENTRYP GLEEPFNGLFRAMETERMINATORGREMEDYPROC) (); GLEE_EXTERN GLEEPFNGLFRAMETERMINATORGREMEDYPROC GLeeFuncPtr_glFrameTerminatorGREMEDY; #define glFrameTerminatorGREMEDY GLeeFuncPtr_glFrameTerminatorGREMEDY #endif #endif /* GL_NV_conditional_render */ #ifndef GL_NV_conditional_render #define GL_NV_conditional_render 1 #define __GLEE_GL_NV_conditional_render 1 /* Constants */ #define GL_QUERY_WAIT_NV 0x8E13 #define GL_QUERY_NO_WAIT_NV 0x8E14 #define GL_QUERY_BY_REGION_WAIT_NV 0x8E15 #define GL_QUERY_BY_REGION_NO_WAIT_NV 0x8E16 #ifndef GLEE_H_DEFINED_glBeginConditionalRenderNV #define GLEE_H_DEFINED_glBeginConditionalRenderNV typedef void (APIENTRYP GLEEPFNGLBEGINCONDITIONALRENDERNVPROC) (GLuint id, GLenum mode); GLEE_EXTERN GLEEPFNGLBEGINCONDITIONALRENDERNVPROC GLeeFuncPtr_glBeginConditionalRenderNV; #define glBeginConditionalRenderNV GLeeFuncPtr_glBeginConditionalRenderNV #endif #ifndef GLEE_H_DEFINED_glEndConditionalRenderNV #define GLEE_H_DEFINED_glEndConditionalRenderNV typedef void (APIENTRYP GLEEPFNGLENDCONDITIONALRENDERNVPROC) (); GLEE_EXTERN GLEEPFNGLENDCONDITIONALRENDERNVPROC GLeeFuncPtr_glEndConditionalRenderNV; #define glEndConditionalRenderNV GLeeFuncPtr_glEndConditionalRenderNV #endif #endif /* GL_NV_present_video */ #ifndef GL_NV_present_video #define GL_NV_present_video 1 #define __GLEE_GL_NV_present_video 1 /* Constants */ #define GL_FRAME_NV 0x8E26 #define GL_FIELDS_NV 0x8E27 #define GL_CURRENT_TIME_NV 0x8E28 #define GL_NUM_FILL_STREAMS_NV 0x8E29 #define GL_PRESENT_TIME_NV 0x8E2A #define GL_PRESENT_DURATION_NV 0x8E2B #endif /* GL_EXT_transform_feedback */ #ifndef GL_EXT_transform_feedback #define GL_EXT_transform_feedback 1 #define __GLEE_GL_EXT_transform_feedback 1 /* Constants */ #define GL_TRANSFORM_FEEDBACK_BUFFER_EXT 0x8C8E #define GL_TRANSFORM_FEEDBACK_BUFFER_START_EXT 0x8C84 #define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_EXT 0x8C85 #define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_EXT 0x8C8F #define GL_INTERLEAVED_ATTRIBS_EXT 0x8C8C #define GL_SEPARATE_ATTRIBS_EXT 0x8C8D #define GL_PRIMITIVES_GENERATED_EXT 0x8C87 #define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_EXT 0x8C88 #define GL_RASTERIZER_DISCARD_EXT 0x8C89 #define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_EXT 0x8C8A #define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_EXT 0x8C8B #define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_EXT 0x8C80 #define GL_TRANSFORM_FEEDBACK_VARYINGS_EXT 0x8C83 #define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_EXT 0x8C7F #define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH_EXT 0x8C76 #ifndef GLEE_H_DEFINED_glBeginTransformFeedbackEXT #define GLEE_H_DEFINED_glBeginTransformFeedbackEXT typedef void (APIENTRYP GLEEPFNGLBEGINTRANSFORMFEEDBACKEXTPROC) (GLenum primitiveMode); GLEE_EXTERN GLEEPFNGLBEGINTRANSFORMFEEDBACKEXTPROC GLeeFuncPtr_glBeginTransformFeedbackEXT; #define glBeginTransformFeedbackEXT GLeeFuncPtr_glBeginTransformFeedbackEXT #endif #ifndef GLEE_H_DEFINED_glEndTransformFeedbackEXT #define GLEE_H_DEFINED_glEndTransformFeedbackEXT typedef void (APIENTRYP GLEEPFNGLENDTRANSFORMFEEDBACKEXTPROC) (); GLEE_EXTERN GLEEPFNGLENDTRANSFORMFEEDBACKEXTPROC GLeeFuncPtr_glEndTransformFeedbackEXT; #define glEndTransformFeedbackEXT GLeeFuncPtr_glEndTransformFeedbackEXT #endif #ifndef GLEE_H_DEFINED_glBindBufferRangeEXT #define GLEE_H_DEFINED_glBindBufferRangeEXT typedef void (APIENTRYP GLEEPFNGLBINDBUFFERRANGEEXTPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); GLEE_EXTERN GLEEPFNGLBINDBUFFERRANGEEXTPROC GLeeFuncPtr_glBindBufferRangeEXT; #define glBindBufferRangeEXT GLeeFuncPtr_glBindBufferRangeEXT #endif #ifndef GLEE_H_DEFINED_glBindBufferOffsetEXT #define GLEE_H_DEFINED_glBindBufferOffsetEXT typedef void (APIENTRYP GLEEPFNGLBINDBUFFEROFFSETEXTPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset); GLEE_EXTERN GLEEPFNGLBINDBUFFEROFFSETEXTPROC GLeeFuncPtr_glBindBufferOffsetEXT; #define glBindBufferOffsetEXT GLeeFuncPtr_glBindBufferOffsetEXT #endif #ifndef GLEE_H_DEFINED_glBindBufferBaseEXT #define GLEE_H_DEFINED_glBindBufferBaseEXT typedef void (APIENTRYP GLEEPFNGLBINDBUFFERBASEEXTPROC) (GLenum target, GLuint index, GLuint buffer); GLEE_EXTERN GLEEPFNGLBINDBUFFERBASEEXTPROC GLeeFuncPtr_glBindBufferBaseEXT; #define glBindBufferBaseEXT GLeeFuncPtr_glBindBufferBaseEXT #endif #ifndef GLEE_H_DEFINED_glTransformFeedbackVaryingsEXT #define GLEE_H_DEFINED_glTransformFeedbackVaryingsEXT typedef void (APIENTRYP GLEEPFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC) (GLuint program, GLsizei count, const GLint * locations, GLenum bufferMode); GLEE_EXTERN GLEEPFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC GLeeFuncPtr_glTransformFeedbackVaryingsEXT; #define glTransformFeedbackVaryingsEXT GLeeFuncPtr_glTransformFeedbackVaryingsEXT #endif #ifndef GLEE_H_DEFINED_glGetTransformFeedbackVaryingEXT #define GLEE_H_DEFINED_glGetTransformFeedbackVaryingEXT typedef void (APIENTRYP GLEEPFNGLGETTRANSFORMFEEDBACKVARYINGEXTPROC) (GLuint program, GLuint index, GLint * location); GLEE_EXTERN GLEEPFNGLGETTRANSFORMFEEDBACKVARYINGEXTPROC GLeeFuncPtr_glGetTransformFeedbackVaryingEXT; #define glGetTransformFeedbackVaryingEXT GLeeFuncPtr_glGetTransformFeedbackVaryingEXT #endif #endif /* GL_EXT_direct_state_access */ #ifndef GL_EXT_direct_state_access #define GL_EXT_direct_state_access 1 #define __GLEE_GL_EXT_direct_state_access 1 /* Constants */ #define GL_PROGRAM_MATRIX_EXT 0x8E2D #define GL_TRANSPOSE_PROGRAM_MATRIX_EXT 0x8E2E #define GL_PROGRAM_MATRIX_STACK_DEPTH_EXT 0x8E2F #ifndef GLEE_H_DEFINED_glClientAttribDefaultEXT #define GLEE_H_DEFINED_glClientAttribDefaultEXT typedef void (APIENTRYP GLEEPFNGLCLIENTATTRIBDEFAULTEXTPROC) (GLbitfield mask); GLEE_EXTERN GLEEPFNGLCLIENTATTRIBDEFAULTEXTPROC GLeeFuncPtr_glClientAttribDefaultEXT; #define glClientAttribDefaultEXT GLeeFuncPtr_glClientAttribDefaultEXT #endif #ifndef GLEE_H_DEFINED_glPushClientAttribDefaultEXT #define GLEE_H_DEFINED_glPushClientAttribDefaultEXT typedef void (APIENTRYP GLEEPFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC) (GLbitfield mask); GLEE_EXTERN GLEEPFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC GLeeFuncPtr_glPushClientAttribDefaultEXT; #define glPushClientAttribDefaultEXT GLeeFuncPtr_glPushClientAttribDefaultEXT #endif #ifndef GLEE_H_DEFINED_glMatrixLoadfEXT #define GLEE_H_DEFINED_glMatrixLoadfEXT typedef void (APIENTRYP GLEEPFNGLMATRIXLOADFEXTPROC) (GLenum mode, const GLfloat * m); GLEE_EXTERN GLEEPFNGLMATRIXLOADFEXTPROC GLeeFuncPtr_glMatrixLoadfEXT; #define glMatrixLoadfEXT GLeeFuncPtr_glMatrixLoadfEXT #endif #ifndef GLEE_H_DEFINED_glMatrixLoaddEXT #define GLEE_H_DEFINED_glMatrixLoaddEXT typedef void (APIENTRYP GLEEPFNGLMATRIXLOADDEXTPROC) (GLenum mode, const GLdouble * m); GLEE_EXTERN GLEEPFNGLMATRIXLOADDEXTPROC GLeeFuncPtr_glMatrixLoaddEXT; #define glMatrixLoaddEXT GLeeFuncPtr_glMatrixLoaddEXT #endif #ifndef GLEE_H_DEFINED_glMatrixMultfEXT #define GLEE_H_DEFINED_glMatrixMultfEXT typedef void (APIENTRYP GLEEPFNGLMATRIXMULTFEXTPROC) (GLenum mode, const GLfloat * m); GLEE_EXTERN GLEEPFNGLMATRIXMULTFEXTPROC GLeeFuncPtr_glMatrixMultfEXT; #define glMatrixMultfEXT GLeeFuncPtr_glMatrixMultfEXT #endif #ifndef GLEE_H_DEFINED_glMatrixMultdEXT #define GLEE_H_DEFINED_glMatrixMultdEXT typedef void (APIENTRYP GLEEPFNGLMATRIXMULTDEXTPROC) (GLenum mode, const GLdouble * m); GLEE_EXTERN GLEEPFNGLMATRIXMULTDEXTPROC GLeeFuncPtr_glMatrixMultdEXT; #define glMatrixMultdEXT GLeeFuncPtr_glMatrixMultdEXT #endif #ifndef GLEE_H_DEFINED_glMatrixLoadIdentityEXT #define GLEE_H_DEFINED_glMatrixLoadIdentityEXT typedef void (APIENTRYP GLEEPFNGLMATRIXLOADIDENTITYEXTPROC) (GLenum mode); GLEE_EXTERN GLEEPFNGLMATRIXLOADIDENTITYEXTPROC GLeeFuncPtr_glMatrixLoadIdentityEXT; #define glMatrixLoadIdentityEXT GLeeFuncPtr_glMatrixLoadIdentityEXT #endif #ifndef GLEE_H_DEFINED_glMatrixRotatefEXT #define GLEE_H_DEFINED_glMatrixRotatefEXT typedef void (APIENTRYP GLEEPFNGLMATRIXROTATEFEXTPROC) (GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z); GLEE_EXTERN GLEEPFNGLMATRIXROTATEFEXTPROC GLeeFuncPtr_glMatrixRotatefEXT; #define glMatrixRotatefEXT GLeeFuncPtr_glMatrixRotatefEXT #endif #ifndef GLEE_H_DEFINED_glMatrixRotatedEXT #define GLEE_H_DEFINED_glMatrixRotatedEXT typedef void (APIENTRYP GLEEPFNGLMATRIXROTATEDEXTPROC) (GLenum mode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z); GLEE_EXTERN GLEEPFNGLMATRIXROTATEDEXTPROC GLeeFuncPtr_glMatrixRotatedEXT; #define glMatrixRotatedEXT GLeeFuncPtr_glMatrixRotatedEXT #endif #ifndef GLEE_H_DEFINED_glMatrixScalefEXT #define GLEE_H_DEFINED_glMatrixScalefEXT typedef void (APIENTRYP GLEEPFNGLMATRIXSCALEFEXTPROC) (GLenum mode, GLfloat x, GLfloat y, GLfloat z); GLEE_EXTERN GLEEPFNGLMATRIXSCALEFEXTPROC GLeeFuncPtr_glMatrixScalefEXT; #define glMatrixScalefEXT GLeeFuncPtr_glMatrixScalefEXT #endif #ifndef GLEE_H_DEFINED_glMatrixScaledEXT #define GLEE_H_DEFINED_glMatrixScaledEXT typedef void (APIENTRYP GLEEPFNGLMATRIXSCALEDEXTPROC) (GLenum mode, GLdouble x, GLdouble y, GLdouble z); GLEE_EXTERN GLEEPFNGLMATRIXSCALEDEXTPROC GLeeFuncPtr_glMatrixScaledEXT; #define glMatrixScaledEXT GLeeFuncPtr_glMatrixScaledEXT #endif #ifndef GLEE_H_DEFINED_glMatrixTranslatefEXT #define GLEE_H_DEFINED_glMatrixTranslatefEXT typedef void (APIENTRYP GLEEPFNGLMATRIXTRANSLATEFEXTPROC) (GLenum mode, GLfloat x, GLfloat y, GLfloat z); GLEE_EXTERN GLEEPFNGLMATRIXTRANSLATEFEXTPROC GLeeFuncPtr_glMatrixTranslatefEXT; #define glMatrixTranslatefEXT GLeeFuncPtr_glMatrixTranslatefEXT #endif #ifndef GLEE_H_DEFINED_glMatrixTranslatedEXT #define GLEE_H_DEFINED_glMatrixTranslatedEXT typedef void (APIENTRYP GLEEPFNGLMATRIXTRANSLATEDEXTPROC) (GLenum mode, GLdouble x, GLdouble y, GLdouble z); GLEE_EXTERN GLEEPFNGLMATRIXTRANSLATEDEXTPROC GLeeFuncPtr_glMatrixTranslatedEXT; #define glMatrixTranslatedEXT GLeeFuncPtr_glMatrixTranslatedEXT #endif #ifndef GLEE_H_DEFINED_glMatrixFrustumEXT #define GLEE_H_DEFINED_glMatrixFrustumEXT typedef void (APIENTRYP GLEEPFNGLMATRIXFRUSTUMEXTPROC) (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); GLEE_EXTERN GLEEPFNGLMATRIXFRUSTUMEXTPROC GLeeFuncPtr_glMatrixFrustumEXT; #define glMatrixFrustumEXT GLeeFuncPtr_glMatrixFrustumEXT #endif #ifndef GLEE_H_DEFINED_glMatrixOrthoEXT #define GLEE_H_DEFINED_glMatrixOrthoEXT typedef void (APIENTRYP GLEEPFNGLMATRIXORTHOEXTPROC) (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); GLEE_EXTERN GLEEPFNGLMATRIXORTHOEXTPROC GLeeFuncPtr_glMatrixOrthoEXT; #define glMatrixOrthoEXT GLeeFuncPtr_glMatrixOrthoEXT #endif #ifndef GLEE_H_DEFINED_glMatrixPopEXT #define GLEE_H_DEFINED_glMatrixPopEXT typedef void (APIENTRYP GLEEPFNGLMATRIXPOPEXTPROC) (GLenum mode); GLEE_EXTERN GLEEPFNGLMATRIXPOPEXTPROC GLeeFuncPtr_glMatrixPopEXT; #define glMatrixPopEXT GLeeFuncPtr_glMatrixPopEXT #endif #ifndef GLEE_H_DEFINED_glMatrixPushEXT #define GLEE_H_DEFINED_glMatrixPushEXT typedef void (APIENTRYP GLEEPFNGLMATRIXPUSHEXTPROC) (GLenum mode); GLEE_EXTERN GLEEPFNGLMATRIXPUSHEXTPROC GLeeFuncPtr_glMatrixPushEXT; #define glMatrixPushEXT GLeeFuncPtr_glMatrixPushEXT #endif #ifndef GLEE_H_DEFINED_glMatrixLoadTransposefEXT #define GLEE_H_DEFINED_glMatrixLoadTransposefEXT typedef void (APIENTRYP GLEEPFNGLMATRIXLOADTRANSPOSEFEXTPROC) (GLenum mode, const GLfloat * m); GLEE_EXTERN GLEEPFNGLMATRIXLOADTRANSPOSEFEXTPROC GLeeFuncPtr_glMatrixLoadTransposefEXT; #define glMatrixLoadTransposefEXT GLeeFuncPtr_glMatrixLoadTransposefEXT #endif #ifndef GLEE_H_DEFINED_glMatrixLoadTransposedEXT #define GLEE_H_DEFINED_glMatrixLoadTransposedEXT typedef void (APIENTRYP GLEEPFNGLMATRIXLOADTRANSPOSEDEXTPROC) (GLenum mode, const GLdouble * m); GLEE_EXTERN GLEEPFNGLMATRIXLOADTRANSPOSEDEXTPROC GLeeFuncPtr_glMatrixLoadTransposedEXT; #define glMatrixLoadTransposedEXT GLeeFuncPtr_glMatrixLoadTransposedEXT #endif #ifndef GLEE_H_DEFINED_glMatrixMultTransposefEXT #define GLEE_H_DEFINED_glMatrixMultTransposefEXT typedef void (APIENTRYP GLEEPFNGLMATRIXMULTTRANSPOSEFEXTPROC) (GLenum mode, const GLfloat * m); GLEE_EXTERN GLEEPFNGLMATRIXMULTTRANSPOSEFEXTPROC GLeeFuncPtr_glMatrixMultTransposefEXT; #define glMatrixMultTransposefEXT GLeeFuncPtr_glMatrixMultTransposefEXT #endif #ifndef GLEE_H_DEFINED_glMatrixMultTransposedEXT #define GLEE_H_DEFINED_glMatrixMultTransposedEXT typedef void (APIENTRYP GLEEPFNGLMATRIXMULTTRANSPOSEDEXTPROC) (GLenum mode, const GLdouble * m); GLEE_EXTERN GLEEPFNGLMATRIXMULTTRANSPOSEDEXTPROC GLeeFuncPtr_glMatrixMultTransposedEXT; #define glMatrixMultTransposedEXT GLeeFuncPtr_glMatrixMultTransposedEXT #endif #ifndef GLEE_H_DEFINED_glTextureParameterfEXT #define GLEE_H_DEFINED_glTextureParameterfEXT typedef void (APIENTRYP GLEEPFNGLTEXTUREPARAMETERFEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLfloat param); GLEE_EXTERN GLEEPFNGLTEXTUREPARAMETERFEXTPROC GLeeFuncPtr_glTextureParameterfEXT; #define glTextureParameterfEXT GLeeFuncPtr_glTextureParameterfEXT #endif #ifndef GLEE_H_DEFINED_glTextureParameterfvEXT #define GLEE_H_DEFINED_glTextureParameterfvEXT typedef void (APIENTRYP GLEEPFNGLTEXTUREPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLfloat * params); GLEE_EXTERN GLEEPFNGLTEXTUREPARAMETERFVEXTPROC GLeeFuncPtr_glTextureParameterfvEXT; #define glTextureParameterfvEXT GLeeFuncPtr_glTextureParameterfvEXT #endif #ifndef GLEE_H_DEFINED_glTextureParameteriEXT #define GLEE_H_DEFINED_glTextureParameteriEXT typedef void (APIENTRYP GLEEPFNGLTEXTUREPARAMETERIEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint param); GLEE_EXTERN GLEEPFNGLTEXTUREPARAMETERIEXTPROC GLeeFuncPtr_glTextureParameteriEXT; #define glTextureParameteriEXT GLeeFuncPtr_glTextureParameteriEXT #endif #ifndef GLEE_H_DEFINED_glTextureParameterivEXT #define GLEE_H_DEFINED_glTextureParameterivEXT typedef void (APIENTRYP GLEEPFNGLTEXTUREPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLint * params); GLEE_EXTERN GLEEPFNGLTEXTUREPARAMETERIVEXTPROC GLeeFuncPtr_glTextureParameterivEXT; #define glTextureParameterivEXT GLeeFuncPtr_glTextureParameterivEXT #endif #ifndef GLEE_H_DEFINED_glTextureImage1DEXT #define GLEE_H_DEFINED_glTextureImage1DEXT typedef void (APIENTRYP GLEEPFNGLTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid * pixels); GLEE_EXTERN GLEEPFNGLTEXTUREIMAGE1DEXTPROC GLeeFuncPtr_glTextureImage1DEXT; #define glTextureImage1DEXT GLeeFuncPtr_glTextureImage1DEXT #endif #ifndef GLEE_H_DEFINED_glTextureImage2DEXT #define GLEE_H_DEFINED_glTextureImage2DEXT typedef void (APIENTRYP GLEEPFNGLTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid * pixels); GLEE_EXTERN GLEEPFNGLTEXTUREIMAGE2DEXTPROC GLeeFuncPtr_glTextureImage2DEXT; #define glTextureImage2DEXT GLeeFuncPtr_glTextureImage2DEXT #endif #ifndef GLEE_H_DEFINED_glTextureSubImage1DEXT #define GLEE_H_DEFINED_glTextureSubImage1DEXT typedef void (APIENTRYP GLEEPFNGLTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid * pixels); GLEE_EXTERN GLEEPFNGLTEXTURESUBIMAGE1DEXTPROC GLeeFuncPtr_glTextureSubImage1DEXT; #define glTextureSubImage1DEXT GLeeFuncPtr_glTextureSubImage1DEXT #endif #ifndef GLEE_H_DEFINED_glTextureSubImage2DEXT #define GLEE_H_DEFINED_glTextureSubImage2DEXT typedef void (APIENTRYP GLEEPFNGLTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * pixels); GLEE_EXTERN GLEEPFNGLTEXTURESUBIMAGE2DEXTPROC GLeeFuncPtr_glTextureSubImage2DEXT; #define glTextureSubImage2DEXT GLeeFuncPtr_glTextureSubImage2DEXT #endif #ifndef GLEE_H_DEFINED_glCopyTextureImage1DEXT #define GLEE_H_DEFINED_glCopyTextureImage1DEXT typedef void (APIENTRYP GLEEPFNGLCOPYTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); GLEE_EXTERN GLEEPFNGLCOPYTEXTUREIMAGE1DEXTPROC GLeeFuncPtr_glCopyTextureImage1DEXT; #define glCopyTextureImage1DEXT GLeeFuncPtr_glCopyTextureImage1DEXT #endif #ifndef GLEE_H_DEFINED_glCopyTextureImage2DEXT #define GLEE_H_DEFINED_glCopyTextureImage2DEXT typedef void (APIENTRYP GLEEPFNGLCOPYTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); GLEE_EXTERN GLEEPFNGLCOPYTEXTUREIMAGE2DEXTPROC GLeeFuncPtr_glCopyTextureImage2DEXT; #define glCopyTextureImage2DEXT GLeeFuncPtr_glCopyTextureImage2DEXT #endif #ifndef GLEE_H_DEFINED_glCopyTextureSubImage1DEXT #define GLEE_H_DEFINED_glCopyTextureSubImage1DEXT typedef void (APIENTRYP GLEEPFNGLCOPYTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); GLEE_EXTERN GLEEPFNGLCOPYTEXTURESUBIMAGE1DEXTPROC GLeeFuncPtr_glCopyTextureSubImage1DEXT; #define glCopyTextureSubImage1DEXT GLeeFuncPtr_glCopyTextureSubImage1DEXT #endif #ifndef GLEE_H_DEFINED_glCopyTextureSubImage2DEXT #define GLEE_H_DEFINED_glCopyTextureSubImage2DEXT typedef void (APIENTRYP GLEEPFNGLCOPYTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); GLEE_EXTERN GLEEPFNGLCOPYTEXTURESUBIMAGE2DEXTPROC GLeeFuncPtr_glCopyTextureSubImage2DEXT; #define glCopyTextureSubImage2DEXT GLeeFuncPtr_glCopyTextureSubImage2DEXT #endif #ifndef GLEE_H_DEFINED_glGetTextureImageEXT #define GLEE_H_DEFINED_glGetTextureImageEXT typedef void (APIENTRYP GLEEPFNGLGETTEXTUREIMAGEEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, GLvoid * pixels); GLEE_EXTERN GLEEPFNGLGETTEXTUREIMAGEEXTPROC GLeeFuncPtr_glGetTextureImageEXT; #define glGetTextureImageEXT GLeeFuncPtr_glGetTextureImageEXT #endif #ifndef GLEE_H_DEFINED_glGetTextureParameterfvEXT #define GLEE_H_DEFINED_glGetTextureParameterfvEXT typedef void (APIENTRYP GLEEPFNGLGETTEXTUREPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETTEXTUREPARAMETERFVEXTPROC GLeeFuncPtr_glGetTextureParameterfvEXT; #define glGetTextureParameterfvEXT GLeeFuncPtr_glGetTextureParameterfvEXT #endif #ifndef GLEE_H_DEFINED_glGetTextureParameterivEXT #define GLEE_H_DEFINED_glGetTextureParameterivEXT typedef void (APIENTRYP GLEEPFNGLGETTEXTUREPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETTEXTUREPARAMETERIVEXTPROC GLeeFuncPtr_glGetTextureParameterivEXT; #define glGetTextureParameterivEXT GLeeFuncPtr_glGetTextureParameterivEXT #endif #ifndef GLEE_H_DEFINED_glGetTextureLevelParameterfvEXT #define GLEE_H_DEFINED_glGetTextureLevelParameterfvEXT typedef void (APIENTRYP GLEEPFNGLGETTEXTURELEVELPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETTEXTURELEVELPARAMETERFVEXTPROC GLeeFuncPtr_glGetTextureLevelParameterfvEXT; #define glGetTextureLevelParameterfvEXT GLeeFuncPtr_glGetTextureLevelParameterfvEXT #endif #ifndef GLEE_H_DEFINED_glGetTextureLevelParameterivEXT #define GLEE_H_DEFINED_glGetTextureLevelParameterivEXT typedef void (APIENTRYP GLEEPFNGLGETTEXTURELEVELPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETTEXTURELEVELPARAMETERIVEXTPROC GLeeFuncPtr_glGetTextureLevelParameterivEXT; #define glGetTextureLevelParameterivEXT GLeeFuncPtr_glGetTextureLevelParameterivEXT #endif #ifndef GLEE_H_DEFINED_glTextureImage3DEXT #define GLEE_H_DEFINED_glTextureImage3DEXT typedef void (APIENTRYP GLEEPFNGLTEXTUREIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid * pixels); GLEE_EXTERN GLEEPFNGLTEXTUREIMAGE3DEXTPROC GLeeFuncPtr_glTextureImage3DEXT; #define glTextureImage3DEXT GLeeFuncPtr_glTextureImage3DEXT #endif #ifndef GLEE_H_DEFINED_glTextureSubImage3DEXT #define GLEE_H_DEFINED_glTextureSubImage3DEXT typedef void (APIENTRYP GLEEPFNGLTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid * pixels); GLEE_EXTERN GLEEPFNGLTEXTURESUBIMAGE3DEXTPROC GLeeFuncPtr_glTextureSubImage3DEXT; #define glTextureSubImage3DEXT GLeeFuncPtr_glTextureSubImage3DEXT #endif #ifndef GLEE_H_DEFINED_glCopyTextureSubImage3DEXT #define GLEE_H_DEFINED_glCopyTextureSubImage3DEXT typedef void (APIENTRYP GLEEPFNGLCOPYTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); GLEE_EXTERN GLEEPFNGLCOPYTEXTURESUBIMAGE3DEXTPROC GLeeFuncPtr_glCopyTextureSubImage3DEXT; #define glCopyTextureSubImage3DEXT GLeeFuncPtr_glCopyTextureSubImage3DEXT #endif #ifndef GLEE_H_DEFINED_glMultiTexParameterfEXT #define GLEE_H_DEFINED_glMultiTexParameterfEXT typedef void (APIENTRYP GLEEPFNGLMULTITEXPARAMETERFEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat param); GLEE_EXTERN GLEEPFNGLMULTITEXPARAMETERFEXTPROC GLeeFuncPtr_glMultiTexParameterfEXT; #define glMultiTexParameterfEXT GLeeFuncPtr_glMultiTexParameterfEXT #endif #ifndef GLEE_H_DEFINED_glMultiTexParameterfvEXT #define GLEE_H_DEFINED_glMultiTexParameterfvEXT typedef void (APIENTRYP GLEEPFNGLMULTITEXPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLfloat * params); GLEE_EXTERN GLEEPFNGLMULTITEXPARAMETERFVEXTPROC GLeeFuncPtr_glMultiTexParameterfvEXT; #define glMultiTexParameterfvEXT GLeeFuncPtr_glMultiTexParameterfvEXT #endif #ifndef GLEE_H_DEFINED_glMultiTexParameteriEXT #define GLEE_H_DEFINED_glMultiTexParameteriEXT typedef void (APIENTRYP GLEEPFNGLMULTITEXPARAMETERIEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint param); GLEE_EXTERN GLEEPFNGLMULTITEXPARAMETERIEXTPROC GLeeFuncPtr_glMultiTexParameteriEXT; #define glMultiTexParameteriEXT GLeeFuncPtr_glMultiTexParameteriEXT #endif #ifndef GLEE_H_DEFINED_glMultiTexParameterivEXT #define GLEE_H_DEFINED_glMultiTexParameterivEXT typedef void (APIENTRYP GLEEPFNGLMULTITEXPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint * params); GLEE_EXTERN GLEEPFNGLMULTITEXPARAMETERIVEXTPROC GLeeFuncPtr_glMultiTexParameterivEXT; #define glMultiTexParameterivEXT GLeeFuncPtr_glMultiTexParameterivEXT #endif #ifndef GLEE_H_DEFINED_glMultiTexImage1DEXT #define GLEE_H_DEFINED_glMultiTexImage1DEXT typedef void (APIENTRYP GLEEPFNGLMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid * pixels); GLEE_EXTERN GLEEPFNGLMULTITEXIMAGE1DEXTPROC GLeeFuncPtr_glMultiTexImage1DEXT; #define glMultiTexImage1DEXT GLeeFuncPtr_glMultiTexImage1DEXT #endif #ifndef GLEE_H_DEFINED_glMultiTexImage2DEXT #define GLEE_H_DEFINED_glMultiTexImage2DEXT typedef void (APIENTRYP GLEEPFNGLMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid * pixels); GLEE_EXTERN GLEEPFNGLMULTITEXIMAGE2DEXTPROC GLeeFuncPtr_glMultiTexImage2DEXT; #define glMultiTexImage2DEXT GLeeFuncPtr_glMultiTexImage2DEXT #endif #ifndef GLEE_H_DEFINED_glMultiTexSubImage1DEXT #define GLEE_H_DEFINED_glMultiTexSubImage1DEXT typedef void (APIENTRYP GLEEPFNGLMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid * pixels); GLEE_EXTERN GLEEPFNGLMULTITEXSUBIMAGE1DEXTPROC GLeeFuncPtr_glMultiTexSubImage1DEXT; #define glMultiTexSubImage1DEXT GLeeFuncPtr_glMultiTexSubImage1DEXT #endif #ifndef GLEE_H_DEFINED_glMultiTexSubImage2DEXT #define GLEE_H_DEFINED_glMultiTexSubImage2DEXT typedef void (APIENTRYP GLEEPFNGLMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * pixels); GLEE_EXTERN GLEEPFNGLMULTITEXSUBIMAGE2DEXTPROC GLeeFuncPtr_glMultiTexSubImage2DEXT; #define glMultiTexSubImage2DEXT GLeeFuncPtr_glMultiTexSubImage2DEXT #endif #ifndef GLEE_H_DEFINED_glCopyMultiTexImage1DEXT #define GLEE_H_DEFINED_glCopyMultiTexImage1DEXT typedef void (APIENTRYP GLEEPFNGLCOPYMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); GLEE_EXTERN GLEEPFNGLCOPYMULTITEXIMAGE1DEXTPROC GLeeFuncPtr_glCopyMultiTexImage1DEXT; #define glCopyMultiTexImage1DEXT GLeeFuncPtr_glCopyMultiTexImage1DEXT #endif #ifndef GLEE_H_DEFINED_glCopyMultiTexImage2DEXT #define GLEE_H_DEFINED_glCopyMultiTexImage2DEXT typedef void (APIENTRYP GLEEPFNGLCOPYMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); GLEE_EXTERN GLEEPFNGLCOPYMULTITEXIMAGE2DEXTPROC GLeeFuncPtr_glCopyMultiTexImage2DEXT; #define glCopyMultiTexImage2DEXT GLeeFuncPtr_glCopyMultiTexImage2DEXT #endif #ifndef GLEE_H_DEFINED_glCopyMultiTexSubImage1DEXT #define GLEE_H_DEFINED_glCopyMultiTexSubImage1DEXT typedef void (APIENTRYP GLEEPFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); GLEE_EXTERN GLEEPFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC GLeeFuncPtr_glCopyMultiTexSubImage1DEXT; #define glCopyMultiTexSubImage1DEXT GLeeFuncPtr_glCopyMultiTexSubImage1DEXT #endif #ifndef GLEE_H_DEFINED_glCopyMultiTexSubImage2DEXT #define GLEE_H_DEFINED_glCopyMultiTexSubImage2DEXT typedef void (APIENTRYP GLEEPFNGLCOPYMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); GLEE_EXTERN GLEEPFNGLCOPYMULTITEXSUBIMAGE2DEXTPROC GLeeFuncPtr_glCopyMultiTexSubImage2DEXT; #define glCopyMultiTexSubImage2DEXT GLeeFuncPtr_glCopyMultiTexSubImage2DEXT #endif #ifndef GLEE_H_DEFINED_glGetMultiTexImageEXT #define GLEE_H_DEFINED_glGetMultiTexImageEXT typedef void (APIENTRYP GLEEPFNGLGETMULTITEXIMAGEEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum format, GLenum type, GLvoid * pixels); GLEE_EXTERN GLEEPFNGLGETMULTITEXIMAGEEXTPROC GLeeFuncPtr_glGetMultiTexImageEXT; #define glGetMultiTexImageEXT GLeeFuncPtr_glGetMultiTexImageEXT #endif #ifndef GLEE_H_DEFINED_glGetMultiTexParameterfvEXT #define GLEE_H_DEFINED_glGetMultiTexParameterfvEXT typedef void (APIENTRYP GLEEPFNGLGETMULTITEXPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETMULTITEXPARAMETERFVEXTPROC GLeeFuncPtr_glGetMultiTexParameterfvEXT; #define glGetMultiTexParameterfvEXT GLeeFuncPtr_glGetMultiTexParameterfvEXT #endif #ifndef GLEE_H_DEFINED_glGetMultiTexParameterivEXT #define GLEE_H_DEFINED_glGetMultiTexParameterivEXT typedef void (APIENTRYP GLEEPFNGLGETMULTITEXPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETMULTITEXPARAMETERIVEXTPROC GLeeFuncPtr_glGetMultiTexParameterivEXT; #define glGetMultiTexParameterivEXT GLeeFuncPtr_glGetMultiTexParameterivEXT #endif #ifndef GLEE_H_DEFINED_glGetMultiTexLevelParameterfvEXT #define GLEE_H_DEFINED_glGetMultiTexLevelParameterfvEXT typedef void (APIENTRYP GLEEPFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC GLeeFuncPtr_glGetMultiTexLevelParameterfvEXT; #define glGetMultiTexLevelParameterfvEXT GLeeFuncPtr_glGetMultiTexLevelParameterfvEXT #endif #ifndef GLEE_H_DEFINED_glGetMultiTexLevelParameterivEXT #define GLEE_H_DEFINED_glGetMultiTexLevelParameterivEXT typedef void (APIENTRYP GLEEPFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC GLeeFuncPtr_glGetMultiTexLevelParameterivEXT; #define glGetMultiTexLevelParameterivEXT GLeeFuncPtr_glGetMultiTexLevelParameterivEXT #endif #ifndef GLEE_H_DEFINED_glMultiTexImage3DEXT #define GLEE_H_DEFINED_glMultiTexImage3DEXT typedef void (APIENTRYP GLEEPFNGLMULTITEXIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid * pixels); GLEE_EXTERN GLEEPFNGLMULTITEXIMAGE3DEXTPROC GLeeFuncPtr_glMultiTexImage3DEXT; #define glMultiTexImage3DEXT GLeeFuncPtr_glMultiTexImage3DEXT #endif #ifndef GLEE_H_DEFINED_glMultiTexSubImage3DEXT #define GLEE_H_DEFINED_glMultiTexSubImage3DEXT typedef void (APIENTRYP GLEEPFNGLMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid * pixels); GLEE_EXTERN GLEEPFNGLMULTITEXSUBIMAGE3DEXTPROC GLeeFuncPtr_glMultiTexSubImage3DEXT; #define glMultiTexSubImage3DEXT GLeeFuncPtr_glMultiTexSubImage3DEXT #endif #ifndef GLEE_H_DEFINED_glCopyMultiTexSubImage3DEXT #define GLEE_H_DEFINED_glCopyMultiTexSubImage3DEXT typedef void (APIENTRYP GLEEPFNGLCOPYMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); GLEE_EXTERN GLEEPFNGLCOPYMULTITEXSUBIMAGE3DEXTPROC GLeeFuncPtr_glCopyMultiTexSubImage3DEXT; #define glCopyMultiTexSubImage3DEXT GLeeFuncPtr_glCopyMultiTexSubImage3DEXT #endif #ifndef GLEE_H_DEFINED_glBindMultiTextureEXT #define GLEE_H_DEFINED_glBindMultiTextureEXT typedef void (APIENTRYP GLEEPFNGLBINDMULTITEXTUREEXTPROC) (GLenum texunit, GLenum target, GLuint texture); GLEE_EXTERN GLEEPFNGLBINDMULTITEXTUREEXTPROC GLeeFuncPtr_glBindMultiTextureEXT; #define glBindMultiTextureEXT GLeeFuncPtr_glBindMultiTextureEXT #endif #ifndef GLEE_H_DEFINED_glEnableClientStateIndexedEXT #define GLEE_H_DEFINED_glEnableClientStateIndexedEXT typedef void (APIENTRYP GLEEPFNGLENABLECLIENTSTATEINDEXEDEXTPROC) (GLenum array, GLuint index); GLEE_EXTERN GLEEPFNGLENABLECLIENTSTATEINDEXEDEXTPROC GLeeFuncPtr_glEnableClientStateIndexedEXT; #define glEnableClientStateIndexedEXT GLeeFuncPtr_glEnableClientStateIndexedEXT #endif #ifndef GLEE_H_DEFINED_glDisableClientStateIndexedEXT #define GLEE_H_DEFINED_glDisableClientStateIndexedEXT typedef void (APIENTRYP GLEEPFNGLDISABLECLIENTSTATEINDEXEDEXTPROC) (GLenum array, GLuint index); GLEE_EXTERN GLEEPFNGLDISABLECLIENTSTATEINDEXEDEXTPROC GLeeFuncPtr_glDisableClientStateIndexedEXT; #define glDisableClientStateIndexedEXT GLeeFuncPtr_glDisableClientStateIndexedEXT #endif #ifndef GLEE_H_DEFINED_glMultiTexCoordPointerEXT #define GLEE_H_DEFINED_glMultiTexCoordPointerEXT typedef void (APIENTRYP GLEEPFNGLMULTITEXCOORDPOINTEREXTPROC) (GLenum texunit, GLint size, GLenum type, GLsizei stride, const GLvoid * pointer); GLEE_EXTERN GLEEPFNGLMULTITEXCOORDPOINTEREXTPROC GLeeFuncPtr_glMultiTexCoordPointerEXT; #define glMultiTexCoordPointerEXT GLeeFuncPtr_glMultiTexCoordPointerEXT #endif #ifndef GLEE_H_DEFINED_glMultiTexEnvfEXT #define GLEE_H_DEFINED_glMultiTexEnvfEXT typedef void (APIENTRYP GLEEPFNGLMULTITEXENVFEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat param); GLEE_EXTERN GLEEPFNGLMULTITEXENVFEXTPROC GLeeFuncPtr_glMultiTexEnvfEXT; #define glMultiTexEnvfEXT GLeeFuncPtr_glMultiTexEnvfEXT #endif #ifndef GLEE_H_DEFINED_glMultiTexEnvfvEXT #define GLEE_H_DEFINED_glMultiTexEnvfvEXT typedef void (APIENTRYP GLEEPFNGLMULTITEXENVFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLfloat * params); GLEE_EXTERN GLEEPFNGLMULTITEXENVFVEXTPROC GLeeFuncPtr_glMultiTexEnvfvEXT; #define glMultiTexEnvfvEXT GLeeFuncPtr_glMultiTexEnvfvEXT #endif #ifndef GLEE_H_DEFINED_glMultiTexEnviEXT #define GLEE_H_DEFINED_glMultiTexEnviEXT typedef void (APIENTRYP GLEEPFNGLMULTITEXENVIEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint param); GLEE_EXTERN GLEEPFNGLMULTITEXENVIEXTPROC GLeeFuncPtr_glMultiTexEnviEXT; #define glMultiTexEnviEXT GLeeFuncPtr_glMultiTexEnviEXT #endif #ifndef GLEE_H_DEFINED_glMultiTexEnvivEXT #define GLEE_H_DEFINED_glMultiTexEnvivEXT typedef void (APIENTRYP GLEEPFNGLMULTITEXENVIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint * params); GLEE_EXTERN GLEEPFNGLMULTITEXENVIVEXTPROC GLeeFuncPtr_glMultiTexEnvivEXT; #define glMultiTexEnvivEXT GLeeFuncPtr_glMultiTexEnvivEXT #endif #ifndef GLEE_H_DEFINED_glMultiTexGendEXT #define GLEE_H_DEFINED_glMultiTexGendEXT typedef void (APIENTRYP GLEEPFNGLMULTITEXGENDEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLdouble param); GLEE_EXTERN GLEEPFNGLMULTITEXGENDEXTPROC GLeeFuncPtr_glMultiTexGendEXT; #define glMultiTexGendEXT GLeeFuncPtr_glMultiTexGendEXT #endif #ifndef GLEE_H_DEFINED_glMultiTexGendvEXT #define GLEE_H_DEFINED_glMultiTexGendvEXT typedef void (APIENTRYP GLEEPFNGLMULTITEXGENDVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLdouble * params); GLEE_EXTERN GLEEPFNGLMULTITEXGENDVEXTPROC GLeeFuncPtr_glMultiTexGendvEXT; #define glMultiTexGendvEXT GLeeFuncPtr_glMultiTexGendvEXT #endif #ifndef GLEE_H_DEFINED_glMultiTexGenfEXT #define GLEE_H_DEFINED_glMultiTexGenfEXT typedef void (APIENTRYP GLEEPFNGLMULTITEXGENFEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLfloat param); GLEE_EXTERN GLEEPFNGLMULTITEXGENFEXTPROC GLeeFuncPtr_glMultiTexGenfEXT; #define glMultiTexGenfEXT GLeeFuncPtr_glMultiTexGenfEXT #endif #ifndef GLEE_H_DEFINED_glMultiTexGenfvEXT #define GLEE_H_DEFINED_glMultiTexGenfvEXT typedef void (APIENTRYP GLEEPFNGLMULTITEXGENFVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLfloat * params); GLEE_EXTERN GLEEPFNGLMULTITEXGENFVEXTPROC GLeeFuncPtr_glMultiTexGenfvEXT; #define glMultiTexGenfvEXT GLeeFuncPtr_glMultiTexGenfvEXT #endif #ifndef GLEE_H_DEFINED_glMultiTexGeniEXT #define GLEE_H_DEFINED_glMultiTexGeniEXT typedef void (APIENTRYP GLEEPFNGLMULTITEXGENIEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLint param); GLEE_EXTERN GLEEPFNGLMULTITEXGENIEXTPROC GLeeFuncPtr_glMultiTexGeniEXT; #define glMultiTexGeniEXT GLeeFuncPtr_glMultiTexGeniEXT #endif #ifndef GLEE_H_DEFINED_glMultiTexGenivEXT #define GLEE_H_DEFINED_glMultiTexGenivEXT typedef void (APIENTRYP GLEEPFNGLMULTITEXGENIVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLint * params); GLEE_EXTERN GLEEPFNGLMULTITEXGENIVEXTPROC GLeeFuncPtr_glMultiTexGenivEXT; #define glMultiTexGenivEXT GLeeFuncPtr_glMultiTexGenivEXT #endif #ifndef GLEE_H_DEFINED_glGetMultiTexEnvfvEXT #define GLEE_H_DEFINED_glGetMultiTexEnvfvEXT typedef void (APIENTRYP GLEEPFNGLGETMULTITEXENVFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETMULTITEXENVFVEXTPROC GLeeFuncPtr_glGetMultiTexEnvfvEXT; #define glGetMultiTexEnvfvEXT GLeeFuncPtr_glGetMultiTexEnvfvEXT #endif #ifndef GLEE_H_DEFINED_glGetMultiTexEnvivEXT #define GLEE_H_DEFINED_glGetMultiTexEnvivEXT typedef void (APIENTRYP GLEEPFNGLGETMULTITEXENVIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETMULTITEXENVIVEXTPROC GLeeFuncPtr_glGetMultiTexEnvivEXT; #define glGetMultiTexEnvivEXT GLeeFuncPtr_glGetMultiTexEnvivEXT #endif #ifndef GLEE_H_DEFINED_glGetMultiTexGendvEXT #define GLEE_H_DEFINED_glGetMultiTexGendvEXT typedef void (APIENTRYP GLEEPFNGLGETMULTITEXGENDVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLdouble * params); GLEE_EXTERN GLEEPFNGLGETMULTITEXGENDVEXTPROC GLeeFuncPtr_glGetMultiTexGendvEXT; #define glGetMultiTexGendvEXT GLeeFuncPtr_glGetMultiTexGendvEXT #endif #ifndef GLEE_H_DEFINED_glGetMultiTexGenfvEXT #define GLEE_H_DEFINED_glGetMultiTexGenfvEXT typedef void (APIENTRYP GLEEPFNGLGETMULTITEXGENFVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETMULTITEXGENFVEXTPROC GLeeFuncPtr_glGetMultiTexGenfvEXT; #define glGetMultiTexGenfvEXT GLeeFuncPtr_glGetMultiTexGenfvEXT #endif #ifndef GLEE_H_DEFINED_glGetMultiTexGenivEXT #define GLEE_H_DEFINED_glGetMultiTexGenivEXT typedef void (APIENTRYP GLEEPFNGLGETMULTITEXGENIVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETMULTITEXGENIVEXTPROC GLeeFuncPtr_glGetMultiTexGenivEXT; #define glGetMultiTexGenivEXT GLeeFuncPtr_glGetMultiTexGenivEXT #endif #ifndef GLEE_H_DEFINED_glGetFloatIndexedvEXT #define GLEE_H_DEFINED_glGetFloatIndexedvEXT typedef void (APIENTRYP GLEEPFNGLGETFLOATINDEXEDVEXTPROC) (GLenum target, GLuint index, GLfloat * data); GLEE_EXTERN GLEEPFNGLGETFLOATINDEXEDVEXTPROC GLeeFuncPtr_glGetFloatIndexedvEXT; #define glGetFloatIndexedvEXT GLeeFuncPtr_glGetFloatIndexedvEXT #endif #ifndef GLEE_H_DEFINED_glGetDoubleIndexedvEXT #define GLEE_H_DEFINED_glGetDoubleIndexedvEXT typedef void (APIENTRYP GLEEPFNGLGETDOUBLEINDEXEDVEXTPROC) (GLenum target, GLuint index, GLdouble * data); GLEE_EXTERN GLEEPFNGLGETDOUBLEINDEXEDVEXTPROC GLeeFuncPtr_glGetDoubleIndexedvEXT; #define glGetDoubleIndexedvEXT GLeeFuncPtr_glGetDoubleIndexedvEXT #endif #ifndef GLEE_H_DEFINED_glGetPointerIndexedvEXT #define GLEE_H_DEFINED_glGetPointerIndexedvEXT typedef void (APIENTRYP GLEEPFNGLGETPOINTERINDEXEDVEXTPROC) (GLenum target, GLuint index, GLvoid* * data); GLEE_EXTERN GLEEPFNGLGETPOINTERINDEXEDVEXTPROC GLeeFuncPtr_glGetPointerIndexedvEXT; #define glGetPointerIndexedvEXT GLeeFuncPtr_glGetPointerIndexedvEXT #endif #ifndef GLEE_H_DEFINED_glCompressedTextureImage3DEXT #define GLEE_H_DEFINED_glCompressedTextureImage3DEXT typedef void (APIENTRYP GLEEPFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid * bits); GLEE_EXTERN GLEEPFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC GLeeFuncPtr_glCompressedTextureImage3DEXT; #define glCompressedTextureImage3DEXT GLeeFuncPtr_glCompressedTextureImage3DEXT #endif #ifndef GLEE_H_DEFINED_glCompressedTextureImage2DEXT #define GLEE_H_DEFINED_glCompressedTextureImage2DEXT typedef void (APIENTRYP GLEEPFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid * bits); GLEE_EXTERN GLEEPFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC GLeeFuncPtr_glCompressedTextureImage2DEXT; #define glCompressedTextureImage2DEXT GLeeFuncPtr_glCompressedTextureImage2DEXT #endif #ifndef GLEE_H_DEFINED_glCompressedTextureImage1DEXT #define GLEE_H_DEFINED_glCompressedTextureImage1DEXT typedef void (APIENTRYP GLEEPFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid * bits); GLEE_EXTERN GLEEPFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC GLeeFuncPtr_glCompressedTextureImage1DEXT; #define glCompressedTextureImage1DEXT GLeeFuncPtr_glCompressedTextureImage1DEXT #endif #ifndef GLEE_H_DEFINED_glCompressedTextureSubImage3DEXT #define GLEE_H_DEFINED_glCompressedTextureSubImage3DEXT typedef void (APIENTRYP GLEEPFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid * bits); GLEE_EXTERN GLEEPFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC GLeeFuncPtr_glCompressedTextureSubImage3DEXT; #define glCompressedTextureSubImage3DEXT GLeeFuncPtr_glCompressedTextureSubImage3DEXT #endif #ifndef GLEE_H_DEFINED_glCompressedTextureSubImage2DEXT #define GLEE_H_DEFINED_glCompressedTextureSubImage2DEXT typedef void (APIENTRYP GLEEPFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid * bits); GLEE_EXTERN GLEEPFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC GLeeFuncPtr_glCompressedTextureSubImage2DEXT; #define glCompressedTextureSubImage2DEXT GLeeFuncPtr_glCompressedTextureSubImage2DEXT #endif #ifndef GLEE_H_DEFINED_glCompressedTextureSubImage1DEXT #define GLEE_H_DEFINED_glCompressedTextureSubImage1DEXT typedef void (APIENTRYP GLEEPFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid * bits); GLEE_EXTERN GLEEPFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC GLeeFuncPtr_glCompressedTextureSubImage1DEXT; #define glCompressedTextureSubImage1DEXT GLeeFuncPtr_glCompressedTextureSubImage1DEXT #endif #ifndef GLEE_H_DEFINED_glGetCompressedTextureImageEXT #define GLEE_H_DEFINED_glGetCompressedTextureImageEXT typedef void (APIENTRYP GLEEPFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC) (GLuint texture, GLenum target, GLint lod, GLvoid * img); GLEE_EXTERN GLEEPFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC GLeeFuncPtr_glGetCompressedTextureImageEXT; #define glGetCompressedTextureImageEXT GLeeFuncPtr_glGetCompressedTextureImageEXT #endif #ifndef GLEE_H_DEFINED_glCompressedMultiTexImage3DEXT #define GLEE_H_DEFINED_glCompressedMultiTexImage3DEXT typedef void (APIENTRYP GLEEPFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid * bits); GLEE_EXTERN GLEEPFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC GLeeFuncPtr_glCompressedMultiTexImage3DEXT; #define glCompressedMultiTexImage3DEXT GLeeFuncPtr_glCompressedMultiTexImage3DEXT #endif #ifndef GLEE_H_DEFINED_glCompressedMultiTexImage2DEXT #define GLEE_H_DEFINED_glCompressedMultiTexImage2DEXT typedef void (APIENTRYP GLEEPFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid * bits); GLEE_EXTERN GLEEPFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC GLeeFuncPtr_glCompressedMultiTexImage2DEXT; #define glCompressedMultiTexImage2DEXT GLeeFuncPtr_glCompressedMultiTexImage2DEXT #endif #ifndef GLEE_H_DEFINED_glCompressedMultiTexImage1DEXT #define GLEE_H_DEFINED_glCompressedMultiTexImage1DEXT typedef void (APIENTRYP GLEEPFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid * bits); GLEE_EXTERN GLEEPFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC GLeeFuncPtr_glCompressedMultiTexImage1DEXT; #define glCompressedMultiTexImage1DEXT GLeeFuncPtr_glCompressedMultiTexImage1DEXT #endif #ifndef GLEE_H_DEFINED_glCompressedMultiTexSubImage3DEXT #define GLEE_H_DEFINED_glCompressedMultiTexSubImage3DEXT typedef void (APIENTRYP GLEEPFNGLCOMPRESSEDMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid * bits); GLEE_EXTERN GLEEPFNGLCOMPRESSEDMULTITEXSUBIMAGE3DEXTPROC GLeeFuncPtr_glCompressedMultiTexSubImage3DEXT; #define glCompressedMultiTexSubImage3DEXT GLeeFuncPtr_glCompressedMultiTexSubImage3DEXT #endif #ifndef GLEE_H_DEFINED_glCompressedMultiTexSubImage2DEXT #define GLEE_H_DEFINED_glCompressedMultiTexSubImage2DEXT typedef void (APIENTRYP GLEEPFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid * bits); GLEE_EXTERN GLEEPFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC GLeeFuncPtr_glCompressedMultiTexSubImage2DEXT; #define glCompressedMultiTexSubImage2DEXT GLeeFuncPtr_glCompressedMultiTexSubImage2DEXT #endif #ifndef GLEE_H_DEFINED_glCompressedMultiTexSubImage1DEXT #define GLEE_H_DEFINED_glCompressedMultiTexSubImage1DEXT typedef void (APIENTRYP GLEEPFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid * bits); GLEE_EXTERN GLEEPFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC GLeeFuncPtr_glCompressedMultiTexSubImage1DEXT; #define glCompressedMultiTexSubImage1DEXT GLeeFuncPtr_glCompressedMultiTexSubImage1DEXT #endif #ifndef GLEE_H_DEFINED_glGetCompressedMultiTexImageEXT #define GLEE_H_DEFINED_glGetCompressedMultiTexImageEXT typedef void (APIENTRYP GLEEPFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC) (GLenum texunit, GLenum target, GLint lod, GLvoid * img); GLEE_EXTERN GLEEPFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC GLeeFuncPtr_glGetCompressedMultiTexImageEXT; #define glGetCompressedMultiTexImageEXT GLeeFuncPtr_glGetCompressedMultiTexImageEXT #endif #ifndef GLEE_H_DEFINED_glNamedProgramStringEXT #define GLEE_H_DEFINED_glNamedProgramStringEXT typedef void (APIENTRYP GLEEPFNGLNAMEDPROGRAMSTRINGEXTPROC) (GLuint program, GLenum target, GLenum format, GLsizei len, const GLvoid * string); GLEE_EXTERN GLEEPFNGLNAMEDPROGRAMSTRINGEXTPROC GLeeFuncPtr_glNamedProgramStringEXT; #define glNamedProgramStringEXT GLeeFuncPtr_glNamedProgramStringEXT #endif #ifndef GLEE_H_DEFINED_glNamedProgramLocalParameter4dEXT #define GLEE_H_DEFINED_glNamedProgramLocalParameter4dEXT typedef void (APIENTRYP GLEEPFNGLNAMEDPROGRAMLOCALPARAMETER4DEXTPROC) (GLuint program, GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLEE_EXTERN GLEEPFNGLNAMEDPROGRAMLOCALPARAMETER4DEXTPROC GLeeFuncPtr_glNamedProgramLocalParameter4dEXT; #define glNamedProgramLocalParameter4dEXT GLeeFuncPtr_glNamedProgramLocalParameter4dEXT #endif #ifndef GLEE_H_DEFINED_glNamedProgramLocalParameter4dvEXT #define GLEE_H_DEFINED_glNamedProgramLocalParameter4dvEXT typedef void (APIENTRYP GLEEPFNGLNAMEDPROGRAMLOCALPARAMETER4DVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLdouble * params); GLEE_EXTERN GLEEPFNGLNAMEDPROGRAMLOCALPARAMETER4DVEXTPROC GLeeFuncPtr_glNamedProgramLocalParameter4dvEXT; #define glNamedProgramLocalParameter4dvEXT GLeeFuncPtr_glNamedProgramLocalParameter4dvEXT #endif #ifndef GLEE_H_DEFINED_glNamedProgramLocalParameter4fEXT #define GLEE_H_DEFINED_glNamedProgramLocalParameter4fEXT typedef void (APIENTRYP GLEEPFNGLNAMEDPROGRAMLOCALPARAMETER4FEXTPROC) (GLuint program, GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); GLEE_EXTERN GLEEPFNGLNAMEDPROGRAMLOCALPARAMETER4FEXTPROC GLeeFuncPtr_glNamedProgramLocalParameter4fEXT; #define glNamedProgramLocalParameter4fEXT GLeeFuncPtr_glNamedProgramLocalParameter4fEXT #endif #ifndef GLEE_H_DEFINED_glNamedProgramLocalParameter4fvEXT #define GLEE_H_DEFINED_glNamedProgramLocalParameter4fvEXT typedef void (APIENTRYP GLEEPFNGLNAMEDPROGRAMLOCALPARAMETER4FVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLfloat * params); GLEE_EXTERN GLEEPFNGLNAMEDPROGRAMLOCALPARAMETER4FVEXTPROC GLeeFuncPtr_glNamedProgramLocalParameter4fvEXT; #define glNamedProgramLocalParameter4fvEXT GLeeFuncPtr_glNamedProgramLocalParameter4fvEXT #endif #ifndef GLEE_H_DEFINED_glGetNamedProgramLocalParameterdvEXT #define GLEE_H_DEFINED_glGetNamedProgramLocalParameterdvEXT typedef void (APIENTRYP GLEEPFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC) (GLuint program, GLenum target, GLuint index, GLdouble * params); GLEE_EXTERN GLEEPFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC GLeeFuncPtr_glGetNamedProgramLocalParameterdvEXT; #define glGetNamedProgramLocalParameterdvEXT GLeeFuncPtr_glGetNamedProgramLocalParameterdvEXT #endif #ifndef GLEE_H_DEFINED_glGetNamedProgramLocalParameterfvEXT #define GLEE_H_DEFINED_glGetNamedProgramLocalParameterfvEXT typedef void (APIENTRYP GLEEPFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC) (GLuint program, GLenum target, GLuint index, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC GLeeFuncPtr_glGetNamedProgramLocalParameterfvEXT; #define glGetNamedProgramLocalParameterfvEXT GLeeFuncPtr_glGetNamedProgramLocalParameterfvEXT #endif #ifndef GLEE_H_DEFINED_glGetNamedProgramivEXT #define GLEE_H_DEFINED_glGetNamedProgramivEXT typedef void (APIENTRYP GLEEPFNGLGETNAMEDPROGRAMIVEXTPROC) (GLuint program, GLenum target, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETNAMEDPROGRAMIVEXTPROC GLeeFuncPtr_glGetNamedProgramivEXT; #define glGetNamedProgramivEXT GLeeFuncPtr_glGetNamedProgramivEXT #endif #ifndef GLEE_H_DEFINED_glGetNamedProgramStringEXT #define GLEE_H_DEFINED_glGetNamedProgramStringEXT typedef void (APIENTRYP GLEEPFNGLGETNAMEDPROGRAMSTRINGEXTPROC) (GLuint program, GLenum target, GLenum pname, GLvoid * string); GLEE_EXTERN GLEEPFNGLGETNAMEDPROGRAMSTRINGEXTPROC GLeeFuncPtr_glGetNamedProgramStringEXT; #define glGetNamedProgramStringEXT GLeeFuncPtr_glGetNamedProgramStringEXT #endif #ifndef GLEE_H_DEFINED_glNamedProgramLocalParameters4fvEXT #define GLEE_H_DEFINED_glNamedProgramLocalParameters4fvEXT typedef void (APIENTRYP GLEEPFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLfloat * params); GLEE_EXTERN GLEEPFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC GLeeFuncPtr_glNamedProgramLocalParameters4fvEXT; #define glNamedProgramLocalParameters4fvEXT GLeeFuncPtr_glNamedProgramLocalParameters4fvEXT #endif #ifndef GLEE_H_DEFINED_glNamedProgramLocalParameterI4iEXT #define GLEE_H_DEFINED_glNamedProgramLocalParameterI4iEXT typedef void (APIENTRYP GLEEPFNGLNAMEDPROGRAMLOCALPARAMETERI4IEXTPROC) (GLuint program, GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); GLEE_EXTERN GLEEPFNGLNAMEDPROGRAMLOCALPARAMETERI4IEXTPROC GLeeFuncPtr_glNamedProgramLocalParameterI4iEXT; #define glNamedProgramLocalParameterI4iEXT GLeeFuncPtr_glNamedProgramLocalParameterI4iEXT #endif #ifndef GLEE_H_DEFINED_glNamedProgramLocalParameterI4ivEXT #define GLEE_H_DEFINED_glNamedProgramLocalParameterI4ivEXT typedef void (APIENTRYP GLEEPFNGLNAMEDPROGRAMLOCALPARAMETERI4IVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLint * params); GLEE_EXTERN GLEEPFNGLNAMEDPROGRAMLOCALPARAMETERI4IVEXTPROC GLeeFuncPtr_glNamedProgramLocalParameterI4ivEXT; #define glNamedProgramLocalParameterI4ivEXT GLeeFuncPtr_glNamedProgramLocalParameterI4ivEXT #endif #ifndef GLEE_H_DEFINED_glNamedProgramLocalParametersI4ivEXT #define GLEE_H_DEFINED_glNamedProgramLocalParametersI4ivEXT typedef void (APIENTRYP GLEEPFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLint * params); GLEE_EXTERN GLEEPFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC GLeeFuncPtr_glNamedProgramLocalParametersI4ivEXT; #define glNamedProgramLocalParametersI4ivEXT GLeeFuncPtr_glNamedProgramLocalParametersI4ivEXT #endif #ifndef GLEE_H_DEFINED_glNamedProgramLocalParameterI4uiEXT #define GLEE_H_DEFINED_glNamedProgramLocalParameterI4uiEXT typedef void (APIENTRYP GLEEPFNGLNAMEDPROGRAMLOCALPARAMETERI4UIEXTPROC) (GLuint program, GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); GLEE_EXTERN GLEEPFNGLNAMEDPROGRAMLOCALPARAMETERI4UIEXTPROC GLeeFuncPtr_glNamedProgramLocalParameterI4uiEXT; #define glNamedProgramLocalParameterI4uiEXT GLeeFuncPtr_glNamedProgramLocalParameterI4uiEXT #endif #ifndef GLEE_H_DEFINED_glNamedProgramLocalParameterI4uivEXT #define GLEE_H_DEFINED_glNamedProgramLocalParameterI4uivEXT typedef void (APIENTRYP GLEEPFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLuint * params); GLEE_EXTERN GLEEPFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC GLeeFuncPtr_glNamedProgramLocalParameterI4uivEXT; #define glNamedProgramLocalParameterI4uivEXT GLeeFuncPtr_glNamedProgramLocalParameterI4uivEXT #endif #ifndef GLEE_H_DEFINED_glNamedProgramLocalParametersI4uivEXT #define GLEE_H_DEFINED_glNamedProgramLocalParametersI4uivEXT typedef void (APIENTRYP GLEEPFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLuint * params); GLEE_EXTERN GLEEPFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC GLeeFuncPtr_glNamedProgramLocalParametersI4uivEXT; #define glNamedProgramLocalParametersI4uivEXT GLeeFuncPtr_glNamedProgramLocalParametersI4uivEXT #endif #ifndef GLEE_H_DEFINED_glGetNamedProgramLocalParameterIivEXT #define GLEE_H_DEFINED_glGetNamedProgramLocalParameterIivEXT typedef void (APIENTRYP GLEEPFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLint * params); GLEE_EXTERN GLEEPFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC GLeeFuncPtr_glGetNamedProgramLocalParameterIivEXT; #define glGetNamedProgramLocalParameterIivEXT GLeeFuncPtr_glGetNamedProgramLocalParameterIivEXT #endif #ifndef GLEE_H_DEFINED_glGetNamedProgramLocalParameterIuivEXT #define GLEE_H_DEFINED_glGetNamedProgramLocalParameterIuivEXT typedef void (APIENTRYP GLEEPFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLuint * params); GLEE_EXTERN GLEEPFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC GLeeFuncPtr_glGetNamedProgramLocalParameterIuivEXT; #define glGetNamedProgramLocalParameterIuivEXT GLeeFuncPtr_glGetNamedProgramLocalParameterIuivEXT #endif #ifndef GLEE_H_DEFINED_glTextureParameterIivEXT #define GLEE_H_DEFINED_glTextureParameterIivEXT typedef void (APIENTRYP GLEEPFNGLTEXTUREPARAMETERIIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLint * params); GLEE_EXTERN GLEEPFNGLTEXTUREPARAMETERIIVEXTPROC GLeeFuncPtr_glTextureParameterIivEXT; #define glTextureParameterIivEXT GLeeFuncPtr_glTextureParameterIivEXT #endif #ifndef GLEE_H_DEFINED_glTextureParameterIuivEXT #define GLEE_H_DEFINED_glTextureParameterIuivEXT typedef void (APIENTRYP GLEEPFNGLTEXTUREPARAMETERIUIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLuint * params); GLEE_EXTERN GLEEPFNGLTEXTUREPARAMETERIUIVEXTPROC GLeeFuncPtr_glTextureParameterIuivEXT; #define glTextureParameterIuivEXT GLeeFuncPtr_glTextureParameterIuivEXT #endif #ifndef GLEE_H_DEFINED_glGetTextureParameterIivEXT #define GLEE_H_DEFINED_glGetTextureParameterIivEXT typedef void (APIENTRYP GLEEPFNGLGETTEXTUREPARAMETERIIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETTEXTUREPARAMETERIIVEXTPROC GLeeFuncPtr_glGetTextureParameterIivEXT; #define glGetTextureParameterIivEXT GLeeFuncPtr_glGetTextureParameterIivEXT #endif #ifndef GLEE_H_DEFINED_glGetTextureParameterIuivEXT #define GLEE_H_DEFINED_glGetTextureParameterIuivEXT typedef void (APIENTRYP GLEEPFNGLGETTEXTUREPARAMETERIUIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLuint * params); GLEE_EXTERN GLEEPFNGLGETTEXTUREPARAMETERIUIVEXTPROC GLeeFuncPtr_glGetTextureParameterIuivEXT; #define glGetTextureParameterIuivEXT GLeeFuncPtr_glGetTextureParameterIuivEXT #endif #ifndef GLEE_H_DEFINED_glMultiTexParameterIivEXT #define GLEE_H_DEFINED_glMultiTexParameterIivEXT typedef void (APIENTRYP GLEEPFNGLMULTITEXPARAMETERIIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint * params); GLEE_EXTERN GLEEPFNGLMULTITEXPARAMETERIIVEXTPROC GLeeFuncPtr_glMultiTexParameterIivEXT; #define glMultiTexParameterIivEXT GLeeFuncPtr_glMultiTexParameterIivEXT #endif #ifndef GLEE_H_DEFINED_glMultiTexParameterIuivEXT #define GLEE_H_DEFINED_glMultiTexParameterIuivEXT typedef void (APIENTRYP GLEEPFNGLMULTITEXPARAMETERIUIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLuint * params); GLEE_EXTERN GLEEPFNGLMULTITEXPARAMETERIUIVEXTPROC GLeeFuncPtr_glMultiTexParameterIuivEXT; #define glMultiTexParameterIuivEXT GLeeFuncPtr_glMultiTexParameterIuivEXT #endif #ifndef GLEE_H_DEFINED_glGetMultiTexParameterIivEXT #define GLEE_H_DEFINED_glGetMultiTexParameterIivEXT typedef void (APIENTRYP GLEEPFNGLGETMULTITEXPARAMETERIIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETMULTITEXPARAMETERIIVEXTPROC GLeeFuncPtr_glGetMultiTexParameterIivEXT; #define glGetMultiTexParameterIivEXT GLeeFuncPtr_glGetMultiTexParameterIivEXT #endif #ifndef GLEE_H_DEFINED_glGetMultiTexParameterIuivEXT #define GLEE_H_DEFINED_glGetMultiTexParameterIuivEXT typedef void (APIENTRYP GLEEPFNGLGETMULTITEXPARAMETERIUIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLuint * params); GLEE_EXTERN GLEEPFNGLGETMULTITEXPARAMETERIUIVEXTPROC GLeeFuncPtr_glGetMultiTexParameterIuivEXT; #define glGetMultiTexParameterIuivEXT GLeeFuncPtr_glGetMultiTexParameterIuivEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniform1fEXT #define GLEE_H_DEFINED_glProgramUniform1fEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM1FEXTPROC) (GLuint program, GLint location, GLfloat v0); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM1FEXTPROC GLeeFuncPtr_glProgramUniform1fEXT; #define glProgramUniform1fEXT GLeeFuncPtr_glProgramUniform1fEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniform2fEXT #define GLEE_H_DEFINED_glProgramUniform2fEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM2FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM2FEXTPROC GLeeFuncPtr_glProgramUniform2fEXT; #define glProgramUniform2fEXT GLeeFuncPtr_glProgramUniform2fEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniform3fEXT #define GLEE_H_DEFINED_glProgramUniform3fEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM3FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM3FEXTPROC GLeeFuncPtr_glProgramUniform3fEXT; #define glProgramUniform3fEXT GLeeFuncPtr_glProgramUniform3fEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniform4fEXT #define GLEE_H_DEFINED_glProgramUniform4fEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM4FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM4FEXTPROC GLeeFuncPtr_glProgramUniform4fEXT; #define glProgramUniform4fEXT GLeeFuncPtr_glProgramUniform4fEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniform1iEXT #define GLEE_H_DEFINED_glProgramUniform1iEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM1IEXTPROC) (GLuint program, GLint location, GLint v0); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM1IEXTPROC GLeeFuncPtr_glProgramUniform1iEXT; #define glProgramUniform1iEXT GLeeFuncPtr_glProgramUniform1iEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniform2iEXT #define GLEE_H_DEFINED_glProgramUniform2iEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM2IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM2IEXTPROC GLeeFuncPtr_glProgramUniform2iEXT; #define glProgramUniform2iEXT GLeeFuncPtr_glProgramUniform2iEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniform3iEXT #define GLEE_H_DEFINED_glProgramUniform3iEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM3IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM3IEXTPROC GLeeFuncPtr_glProgramUniform3iEXT; #define glProgramUniform3iEXT GLeeFuncPtr_glProgramUniform3iEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniform4iEXT #define GLEE_H_DEFINED_glProgramUniform4iEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM4IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM4IEXTPROC GLeeFuncPtr_glProgramUniform4iEXT; #define glProgramUniform4iEXT GLeeFuncPtr_glProgramUniform4iEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniform1fvEXT #define GLEE_H_DEFINED_glProgramUniform1fvEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM1FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM1FVEXTPROC GLeeFuncPtr_glProgramUniform1fvEXT; #define glProgramUniform1fvEXT GLeeFuncPtr_glProgramUniform1fvEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniform2fvEXT #define GLEE_H_DEFINED_glProgramUniform2fvEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM2FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM2FVEXTPROC GLeeFuncPtr_glProgramUniform2fvEXT; #define glProgramUniform2fvEXT GLeeFuncPtr_glProgramUniform2fvEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniform3fvEXT #define GLEE_H_DEFINED_glProgramUniform3fvEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM3FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM3FVEXTPROC GLeeFuncPtr_glProgramUniform3fvEXT; #define glProgramUniform3fvEXT GLeeFuncPtr_glProgramUniform3fvEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniform4fvEXT #define GLEE_H_DEFINED_glProgramUniform4fvEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM4FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM4FVEXTPROC GLeeFuncPtr_glProgramUniform4fvEXT; #define glProgramUniform4fvEXT GLeeFuncPtr_glProgramUniform4fvEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniform1ivEXT #define GLEE_H_DEFINED_glProgramUniform1ivEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM1IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM1IVEXTPROC GLeeFuncPtr_glProgramUniform1ivEXT; #define glProgramUniform1ivEXT GLeeFuncPtr_glProgramUniform1ivEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniform2ivEXT #define GLEE_H_DEFINED_glProgramUniform2ivEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM2IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM2IVEXTPROC GLeeFuncPtr_glProgramUniform2ivEXT; #define glProgramUniform2ivEXT GLeeFuncPtr_glProgramUniform2ivEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniform3ivEXT #define GLEE_H_DEFINED_glProgramUniform3ivEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM3IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM3IVEXTPROC GLeeFuncPtr_glProgramUniform3ivEXT; #define glProgramUniform3ivEXT GLeeFuncPtr_glProgramUniform3ivEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniform4ivEXT #define GLEE_H_DEFINED_glProgramUniform4ivEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM4IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM4IVEXTPROC GLeeFuncPtr_glProgramUniform4ivEXT; #define glProgramUniform4ivEXT GLeeFuncPtr_glProgramUniform4ivEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniformMatrix2fvEXT #define GLEE_H_DEFINED_glProgramUniformMatrix2fvEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC GLeeFuncPtr_glProgramUniformMatrix2fvEXT; #define glProgramUniformMatrix2fvEXT GLeeFuncPtr_glProgramUniformMatrix2fvEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniformMatrix3fvEXT #define GLEE_H_DEFINED_glProgramUniformMatrix3fvEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC GLeeFuncPtr_glProgramUniformMatrix3fvEXT; #define glProgramUniformMatrix3fvEXT GLeeFuncPtr_glProgramUniformMatrix3fvEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniformMatrix4fvEXT #define GLEE_H_DEFINED_glProgramUniformMatrix4fvEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC GLeeFuncPtr_glProgramUniformMatrix4fvEXT; #define glProgramUniformMatrix4fvEXT GLeeFuncPtr_glProgramUniformMatrix4fvEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniformMatrix2x3fvEXT #define GLEE_H_DEFINED_glProgramUniformMatrix2x3fvEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC GLeeFuncPtr_glProgramUniformMatrix2x3fvEXT; #define glProgramUniformMatrix2x3fvEXT GLeeFuncPtr_glProgramUniformMatrix2x3fvEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniformMatrix3x2fvEXT #define GLEE_H_DEFINED_glProgramUniformMatrix3x2fvEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC GLeeFuncPtr_glProgramUniformMatrix3x2fvEXT; #define glProgramUniformMatrix3x2fvEXT GLeeFuncPtr_glProgramUniformMatrix3x2fvEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniformMatrix2x4fvEXT #define GLEE_H_DEFINED_glProgramUniformMatrix2x4fvEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC GLeeFuncPtr_glProgramUniformMatrix2x4fvEXT; #define glProgramUniformMatrix2x4fvEXT GLeeFuncPtr_glProgramUniformMatrix2x4fvEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniformMatrix4x2fvEXT #define GLEE_H_DEFINED_glProgramUniformMatrix4x2fvEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC GLeeFuncPtr_glProgramUniformMatrix4x2fvEXT; #define glProgramUniformMatrix4x2fvEXT GLeeFuncPtr_glProgramUniformMatrix4x2fvEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniformMatrix3x4fvEXT #define GLEE_H_DEFINED_glProgramUniformMatrix3x4fvEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC GLeeFuncPtr_glProgramUniformMatrix3x4fvEXT; #define glProgramUniformMatrix3x4fvEXT GLeeFuncPtr_glProgramUniformMatrix3x4fvEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniformMatrix4x3fvEXT #define GLEE_H_DEFINED_glProgramUniformMatrix4x3fvEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC GLeeFuncPtr_glProgramUniformMatrix4x3fvEXT; #define glProgramUniformMatrix4x3fvEXT GLeeFuncPtr_glProgramUniformMatrix4x3fvEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniform1uiEXT #define GLEE_H_DEFINED_glProgramUniform1uiEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM1UIEXTPROC) (GLuint program, GLint location, GLuint v0); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM1UIEXTPROC GLeeFuncPtr_glProgramUniform1uiEXT; #define glProgramUniform1uiEXT GLeeFuncPtr_glProgramUniform1uiEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniform2uiEXT #define GLEE_H_DEFINED_glProgramUniform2uiEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM2UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM2UIEXTPROC GLeeFuncPtr_glProgramUniform2uiEXT; #define glProgramUniform2uiEXT GLeeFuncPtr_glProgramUniform2uiEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniform3uiEXT #define GLEE_H_DEFINED_glProgramUniform3uiEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM3UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM3UIEXTPROC GLeeFuncPtr_glProgramUniform3uiEXT; #define glProgramUniform3uiEXT GLeeFuncPtr_glProgramUniform3uiEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniform4uiEXT #define GLEE_H_DEFINED_glProgramUniform4uiEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM4UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM4UIEXTPROC GLeeFuncPtr_glProgramUniform4uiEXT; #define glProgramUniform4uiEXT GLeeFuncPtr_glProgramUniform4uiEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniform1uivEXT #define GLEE_H_DEFINED_glProgramUniform1uivEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM1UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM1UIVEXTPROC GLeeFuncPtr_glProgramUniform1uivEXT; #define glProgramUniform1uivEXT GLeeFuncPtr_glProgramUniform1uivEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniform2uivEXT #define GLEE_H_DEFINED_glProgramUniform2uivEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM2UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM2UIVEXTPROC GLeeFuncPtr_glProgramUniform2uivEXT; #define glProgramUniform2uivEXT GLeeFuncPtr_glProgramUniform2uivEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniform3uivEXT #define GLEE_H_DEFINED_glProgramUniform3uivEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM3UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM3UIVEXTPROC GLeeFuncPtr_glProgramUniform3uivEXT; #define glProgramUniform3uivEXT GLeeFuncPtr_glProgramUniform3uivEXT #endif #ifndef GLEE_H_DEFINED_glProgramUniform4uivEXT #define GLEE_H_DEFINED_glProgramUniform4uivEXT typedef void (APIENTRYP GLEEPFNGLPROGRAMUNIFORM4UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint * value); GLEE_EXTERN GLEEPFNGLPROGRAMUNIFORM4UIVEXTPROC GLeeFuncPtr_glProgramUniform4uivEXT; #define glProgramUniform4uivEXT GLeeFuncPtr_glProgramUniform4uivEXT #endif #ifndef GLEE_H_DEFINED_glNamedBufferDataEXT #define GLEE_H_DEFINED_glNamedBufferDataEXT typedef void (APIENTRYP GLEEPFNGLNAMEDBUFFERDATAEXTPROC) (GLuint buffer, GLsizeiptr size, const GLvoid * data, GLenum usage); GLEE_EXTERN GLEEPFNGLNAMEDBUFFERDATAEXTPROC GLeeFuncPtr_glNamedBufferDataEXT; #define glNamedBufferDataEXT GLeeFuncPtr_glNamedBufferDataEXT #endif #ifndef GLEE_H_DEFINED_glNamedBufferSubDataEXT #define GLEE_H_DEFINED_glNamedBufferSubDataEXT typedef void (APIENTRYP GLEEPFNGLNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, const GLvoid * data); GLEE_EXTERN GLEEPFNGLNAMEDBUFFERSUBDATAEXTPROC GLeeFuncPtr_glNamedBufferSubDataEXT; #define glNamedBufferSubDataEXT GLeeFuncPtr_glNamedBufferSubDataEXT #endif #ifndef GLEE_H_DEFINED_glMapNamedBufferEXT #define GLEE_H_DEFINED_glMapNamedBufferEXT typedef GLvoid* (APIENTRYP GLEEPFNGLMAPNAMEDBUFFEREXTPROC) (GLuint buffer, GLenum access); GLEE_EXTERN GLEEPFNGLMAPNAMEDBUFFEREXTPROC GLeeFuncPtr_glMapNamedBufferEXT; #define glMapNamedBufferEXT GLeeFuncPtr_glMapNamedBufferEXT #endif #ifndef GLEE_H_DEFINED_glUnmapNamedBufferEXT #define GLEE_H_DEFINED_glUnmapNamedBufferEXT typedef GLboolean (APIENTRYP GLEEPFNGLUNMAPNAMEDBUFFEREXTPROC) (GLuint buffer); GLEE_EXTERN GLEEPFNGLUNMAPNAMEDBUFFEREXTPROC GLeeFuncPtr_glUnmapNamedBufferEXT; #define glUnmapNamedBufferEXT GLeeFuncPtr_glUnmapNamedBufferEXT #endif #ifndef GLEE_H_DEFINED_glGetNamedBufferParameterivEXT #define GLEE_H_DEFINED_glGetNamedBufferParameterivEXT typedef void (APIENTRYP GLEEPFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC) (GLuint buffer, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC GLeeFuncPtr_glGetNamedBufferParameterivEXT; #define glGetNamedBufferParameterivEXT GLeeFuncPtr_glGetNamedBufferParameterivEXT #endif #ifndef GLEE_H_DEFINED_glGetNamedBufferPointervEXT #define GLEE_H_DEFINED_glGetNamedBufferPointervEXT typedef void (APIENTRYP GLEEPFNGLGETNAMEDBUFFERPOINTERVEXTPROC) (GLuint buffer, GLenum pname, GLvoid* * params); GLEE_EXTERN GLEEPFNGLGETNAMEDBUFFERPOINTERVEXTPROC GLeeFuncPtr_glGetNamedBufferPointervEXT; #define glGetNamedBufferPointervEXT GLeeFuncPtr_glGetNamedBufferPointervEXT #endif #ifndef GLEE_H_DEFINED_glGetNamedBufferSubDataEXT #define GLEE_H_DEFINED_glGetNamedBufferSubDataEXT typedef void (APIENTRYP GLEEPFNGLGETNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, GLvoid * data); GLEE_EXTERN GLEEPFNGLGETNAMEDBUFFERSUBDATAEXTPROC GLeeFuncPtr_glGetNamedBufferSubDataEXT; #define glGetNamedBufferSubDataEXT GLeeFuncPtr_glGetNamedBufferSubDataEXT #endif #ifndef GLEE_H_DEFINED_glTextureBufferEXT #define GLEE_H_DEFINED_glTextureBufferEXT typedef void (APIENTRYP GLEEPFNGLTEXTUREBUFFEREXTPROC) (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer); GLEE_EXTERN GLEEPFNGLTEXTUREBUFFEREXTPROC GLeeFuncPtr_glTextureBufferEXT; #define glTextureBufferEXT GLeeFuncPtr_glTextureBufferEXT #endif #ifndef GLEE_H_DEFINED_glMultiTexBufferEXT #define GLEE_H_DEFINED_glMultiTexBufferEXT typedef void (APIENTRYP GLEEPFNGLMULTITEXBUFFEREXTPROC) (GLenum texunit, GLenum target, GLenum internalformat, GLuint buffer); GLEE_EXTERN GLEEPFNGLMULTITEXBUFFEREXTPROC GLeeFuncPtr_glMultiTexBufferEXT; #define glMultiTexBufferEXT GLeeFuncPtr_glMultiTexBufferEXT #endif #ifndef GLEE_H_DEFINED_glNamedRenderbufferStorageEXT #define GLEE_H_DEFINED_glNamedRenderbufferStorageEXT typedef void (APIENTRYP GLEEPFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC) (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height); GLEE_EXTERN GLEEPFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC GLeeFuncPtr_glNamedRenderbufferStorageEXT; #define glNamedRenderbufferStorageEXT GLeeFuncPtr_glNamedRenderbufferStorageEXT #endif #ifndef GLEE_H_DEFINED_glGetNamedRenderbufferParameterivEXT #define GLEE_H_DEFINED_glGetNamedRenderbufferParameterivEXT typedef void (APIENTRYP GLEEPFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC) (GLuint renderbuffer, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC GLeeFuncPtr_glGetNamedRenderbufferParameterivEXT; #define glGetNamedRenderbufferParameterivEXT GLeeFuncPtr_glGetNamedRenderbufferParameterivEXT #endif #ifndef GLEE_H_DEFINED_glCheckNamedFramebufferStatusEXT #define GLEE_H_DEFINED_glCheckNamedFramebufferStatusEXT typedef GLenum (APIENTRYP GLEEPFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC) (GLuint framebuffer, GLenum target); GLEE_EXTERN GLEEPFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC GLeeFuncPtr_glCheckNamedFramebufferStatusEXT; #define glCheckNamedFramebufferStatusEXT GLeeFuncPtr_glCheckNamedFramebufferStatusEXT #endif #ifndef GLEE_H_DEFINED_glNamedFramebufferTexture1DEXT #define GLEE_H_DEFINED_glNamedFramebufferTexture1DEXT typedef void (APIENTRYP GLEEPFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); GLEE_EXTERN GLEEPFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC GLeeFuncPtr_glNamedFramebufferTexture1DEXT; #define glNamedFramebufferTexture1DEXT GLeeFuncPtr_glNamedFramebufferTexture1DEXT #endif #ifndef GLEE_H_DEFINED_glNamedFramebufferTexture2DEXT #define GLEE_H_DEFINED_glNamedFramebufferTexture2DEXT typedef void (APIENTRYP GLEEPFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); GLEE_EXTERN GLEEPFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC GLeeFuncPtr_glNamedFramebufferTexture2DEXT; #define glNamedFramebufferTexture2DEXT GLeeFuncPtr_glNamedFramebufferTexture2DEXT #endif #ifndef GLEE_H_DEFINED_glNamedFramebufferTexture3DEXT #define GLEE_H_DEFINED_glNamedFramebufferTexture3DEXT typedef void (APIENTRYP GLEEPFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); GLEE_EXTERN GLEEPFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC GLeeFuncPtr_glNamedFramebufferTexture3DEXT; #define glNamedFramebufferTexture3DEXT GLeeFuncPtr_glNamedFramebufferTexture3DEXT #endif #ifndef GLEE_H_DEFINED_glNamedFramebufferRenderbufferEXT #define GLEE_H_DEFINED_glNamedFramebufferRenderbufferEXT typedef void (APIENTRYP GLEEPFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC) (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); GLEE_EXTERN GLEEPFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC GLeeFuncPtr_glNamedFramebufferRenderbufferEXT; #define glNamedFramebufferRenderbufferEXT GLeeFuncPtr_glNamedFramebufferRenderbufferEXT #endif #ifndef GLEE_H_DEFINED_glGetNamedFramebufferAttachmentParameterivEXT #define GLEE_H_DEFINED_glGetNamedFramebufferAttachmentParameterivEXT typedef void (APIENTRYP GLEEPFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC GLeeFuncPtr_glGetNamedFramebufferAttachmentParameterivEXT; #define glGetNamedFramebufferAttachmentParameterivEXT GLeeFuncPtr_glGetNamedFramebufferAttachmentParameterivEXT #endif #ifndef GLEE_H_DEFINED_glGenerateTextureMipmapEXT #define GLEE_H_DEFINED_glGenerateTextureMipmapEXT typedef void (APIENTRYP GLEEPFNGLGENERATETEXTUREMIPMAPEXTPROC) (GLuint texture, GLenum target); GLEE_EXTERN GLEEPFNGLGENERATETEXTUREMIPMAPEXTPROC GLeeFuncPtr_glGenerateTextureMipmapEXT; #define glGenerateTextureMipmapEXT GLeeFuncPtr_glGenerateTextureMipmapEXT #endif #ifndef GLEE_H_DEFINED_glGenerateMultiTexMipmapEXT #define GLEE_H_DEFINED_glGenerateMultiTexMipmapEXT typedef void (APIENTRYP GLEEPFNGLGENERATEMULTITEXMIPMAPEXTPROC) (GLenum texunit, GLenum target); GLEE_EXTERN GLEEPFNGLGENERATEMULTITEXMIPMAPEXTPROC GLeeFuncPtr_glGenerateMultiTexMipmapEXT; #define glGenerateMultiTexMipmapEXT GLeeFuncPtr_glGenerateMultiTexMipmapEXT #endif #ifndef GLEE_H_DEFINED_glFramebufferDrawBufferEXT #define GLEE_H_DEFINED_glFramebufferDrawBufferEXT typedef void (APIENTRYP GLEEPFNGLFRAMEBUFFERDRAWBUFFEREXTPROC) (GLuint framebuffer, GLenum mode); GLEE_EXTERN GLEEPFNGLFRAMEBUFFERDRAWBUFFEREXTPROC GLeeFuncPtr_glFramebufferDrawBufferEXT; #define glFramebufferDrawBufferEXT GLeeFuncPtr_glFramebufferDrawBufferEXT #endif #ifndef GLEE_H_DEFINED_glFramebufferDrawBuffersEXT #define GLEE_H_DEFINED_glFramebufferDrawBuffersEXT typedef void (APIENTRYP GLEEPFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC) (GLuint framebuffer, GLsizei n, const GLenum * bufs); GLEE_EXTERN GLEEPFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC GLeeFuncPtr_glFramebufferDrawBuffersEXT; #define glFramebufferDrawBuffersEXT GLeeFuncPtr_glFramebufferDrawBuffersEXT #endif #ifndef GLEE_H_DEFINED_glFramebufferReadBufferEXT #define GLEE_H_DEFINED_glFramebufferReadBufferEXT typedef void (APIENTRYP GLEEPFNGLFRAMEBUFFERREADBUFFEREXTPROC) (GLuint framebuffer, GLenum mode); GLEE_EXTERN GLEEPFNGLFRAMEBUFFERREADBUFFEREXTPROC GLeeFuncPtr_glFramebufferReadBufferEXT; #define glFramebufferReadBufferEXT GLeeFuncPtr_glFramebufferReadBufferEXT #endif #ifndef GLEE_H_DEFINED_glGetFramebufferParameterivEXT #define GLEE_H_DEFINED_glGetFramebufferParameterivEXT typedef void (APIENTRYP GLEEPFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC GLeeFuncPtr_glGetFramebufferParameterivEXT; #define glGetFramebufferParameterivEXT GLeeFuncPtr_glGetFramebufferParameterivEXT #endif #ifndef GLEE_H_DEFINED_glNamedRenderbufferStorageMultisampleEXT #define GLEE_H_DEFINED_glNamedRenderbufferStorageMultisampleEXT typedef void (APIENTRYP GLEEPFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); GLEE_EXTERN GLEEPFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC GLeeFuncPtr_glNamedRenderbufferStorageMultisampleEXT; #define glNamedRenderbufferStorageMultisampleEXT GLeeFuncPtr_glNamedRenderbufferStorageMultisampleEXT #endif #ifndef GLEE_H_DEFINED_glNamedRenderbufferStorageMultisampleCoverageEXT #define GLEE_H_DEFINED_glNamedRenderbufferStorageMultisampleCoverageEXT typedef void (APIENTRYP GLEEPFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC) (GLuint renderbuffer, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); GLEE_EXTERN GLEEPFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC GLeeFuncPtr_glNamedRenderbufferStorageMultisampleCoverageEXT; #define glNamedRenderbufferStorageMultisampleCoverageEXT GLeeFuncPtr_glNamedRenderbufferStorageMultisampleCoverageEXT #endif #ifndef GLEE_H_DEFINED_glNamedFramebufferTextureEXT #define GLEE_H_DEFINED_glNamedFramebufferTextureEXT typedef void (APIENTRYP GLEEPFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level); GLEE_EXTERN GLEEPFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC GLeeFuncPtr_glNamedFramebufferTextureEXT; #define glNamedFramebufferTextureEXT GLeeFuncPtr_glNamedFramebufferTextureEXT #endif #ifndef GLEE_H_DEFINED_glNamedFramebufferTextureLayerEXT #define GLEE_H_DEFINED_glNamedFramebufferTextureLayerEXT typedef void (APIENTRYP GLEEPFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer); GLEE_EXTERN GLEEPFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC GLeeFuncPtr_glNamedFramebufferTextureLayerEXT; #define glNamedFramebufferTextureLayerEXT GLeeFuncPtr_glNamedFramebufferTextureLayerEXT #endif #ifndef GLEE_H_DEFINED_glNamedFramebufferTextureFaceEXT #define GLEE_H_DEFINED_glNamedFramebufferTextureFaceEXT typedef void (APIENTRYP GLEEPFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLenum face); GLEE_EXTERN GLEEPFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC GLeeFuncPtr_glNamedFramebufferTextureFaceEXT; #define glNamedFramebufferTextureFaceEXT GLeeFuncPtr_glNamedFramebufferTextureFaceEXT #endif #ifndef GLEE_H_DEFINED_glTextureRenderbufferEXT #define GLEE_H_DEFINED_glTextureRenderbufferEXT typedef void (APIENTRYP GLEEPFNGLTEXTURERENDERBUFFEREXTPROC) (GLuint texture, GLenum target, GLuint renderbuffer); GLEE_EXTERN GLEEPFNGLTEXTURERENDERBUFFEREXTPROC GLeeFuncPtr_glTextureRenderbufferEXT; #define glTextureRenderbufferEXT GLeeFuncPtr_glTextureRenderbufferEXT #endif #ifndef GLEE_H_DEFINED_glMultiTexRenderbufferEXT #define GLEE_H_DEFINED_glMultiTexRenderbufferEXT typedef void (APIENTRYP GLEEPFNGLMULTITEXRENDERBUFFEREXTPROC) (GLenum texunit, GLenum target, GLuint renderbuffer); GLEE_EXTERN GLEEPFNGLMULTITEXRENDERBUFFEREXTPROC GLeeFuncPtr_glMultiTexRenderbufferEXT; #define glMultiTexRenderbufferEXT GLeeFuncPtr_glMultiTexRenderbufferEXT #endif #endif /* GL_EXT_vertex_array_bgra */ #ifndef GL_EXT_vertex_array_bgra #define GL_EXT_vertex_array_bgra 1 #define __GLEE_GL_EXT_vertex_array_bgra 1 /* Constants */ #endif /* GL_EXT_texture_swizzle */ #ifndef GL_EXT_texture_swizzle #define GL_EXT_texture_swizzle 1 #define __GLEE_GL_EXT_texture_swizzle 1 /* Constants */ #define GL_TEXTURE_SWIZZLE_R_EXT 0x8E42 #define GL_TEXTURE_SWIZZLE_G_EXT 0x8E43 #define GL_TEXTURE_SWIZZLE_B_EXT 0x8E44 #define GL_TEXTURE_SWIZZLE_A_EXT 0x8E45 #define GL_TEXTURE_SWIZZLE_RGBA_EXT 0x8E46 #endif /* GL_NV_explicit_multisample */ #ifndef GL_NV_explicit_multisample #define GL_NV_explicit_multisample 1 #define __GLEE_GL_NV_explicit_multisample 1 /* Constants */ #define GL_SAMPLE_POSITION_NV 0x8E50 #define GL_SAMPLE_MASK_NV 0x8E51 #define GL_SAMPLE_MASK_VALUE_NV 0x8E52 #define GL_TEXTURE_BINDING_RENDERBUFFER_NV 0x8E53 #define GL_TEXTURE_RENDERBUFFER_DATA_STORE_BINDING_NV 0x8E54 #define GL_MAX_SAMPLE_MASK_WORDS_NV 0x8E59 #define GL_TEXTURE_RENDERBUFFER_NV 0x8E55 #define GL_SAMPLER_RENDERBUFFER_NV 0x8E56 #define GL_INT_SAMPLER_RENDERBUFFER_NV 0x8E57 #define GL_UNSIGNED_INT_SAMPLER_RENDERBUFFER_NV 0x8E58 #ifndef GLEE_H_DEFINED_glGetMultisamplefvNV #define GLEE_H_DEFINED_glGetMultisamplefvNV typedef void (APIENTRYP GLEEPFNGLGETMULTISAMPLEFVNVPROC) (GLenum pname, GLuint index, GLfloat * val); GLEE_EXTERN GLEEPFNGLGETMULTISAMPLEFVNVPROC GLeeFuncPtr_glGetMultisamplefvNV; #define glGetMultisamplefvNV GLeeFuncPtr_glGetMultisamplefvNV #endif #ifndef GLEE_H_DEFINED_glSampleMaskIndexedNV #define GLEE_H_DEFINED_glSampleMaskIndexedNV typedef void (APIENTRYP GLEEPFNGLSAMPLEMASKINDEXEDNVPROC) (GLuint index, GLbitfield mask); GLEE_EXTERN GLEEPFNGLSAMPLEMASKINDEXEDNVPROC GLeeFuncPtr_glSampleMaskIndexedNV; #define glSampleMaskIndexedNV GLeeFuncPtr_glSampleMaskIndexedNV #endif #ifndef GLEE_H_DEFINED_glTexRenderbufferNV #define GLEE_H_DEFINED_glTexRenderbufferNV typedef void (APIENTRYP GLEEPFNGLTEXRENDERBUFFERNVPROC) (GLenum target, GLuint renderbuffer); GLEE_EXTERN GLEEPFNGLTEXRENDERBUFFERNVPROC GLeeFuncPtr_glTexRenderbufferNV; #define glTexRenderbufferNV GLeeFuncPtr_glTexRenderbufferNV #endif #endif /* GL_NV_transform_feedback2 */ #ifndef GL_NV_transform_feedback2 #define GL_NV_transform_feedback2 1 #define __GLEE_GL_NV_transform_feedback2 1 /* Constants */ #define GL_TRANSFORM_FEEDBACK_NV 0x8E22 #define GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED_NV 0x8E23 #define GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE_NV 0x8E24 #define GL_TRANSFORM_FEEDBACK_BINDING_NV 0x8E25 #ifndef GLEE_H_DEFINED_glBindTransformFeedbackNV #define GLEE_H_DEFINED_glBindTransformFeedbackNV typedef void (APIENTRYP GLEEPFNGLBINDTRANSFORMFEEDBACKNVPROC) (GLenum target, GLuint id); GLEE_EXTERN GLEEPFNGLBINDTRANSFORMFEEDBACKNVPROC GLeeFuncPtr_glBindTransformFeedbackNV; #define glBindTransformFeedbackNV GLeeFuncPtr_glBindTransformFeedbackNV #endif #ifndef GLEE_H_DEFINED_glDeleteTransformFeedbacksNV #define GLEE_H_DEFINED_glDeleteTransformFeedbacksNV typedef void (APIENTRYP GLEEPFNGLDELETETRANSFORMFEEDBACKSNVPROC) (GLsizei n, const GLuint * ids); GLEE_EXTERN GLEEPFNGLDELETETRANSFORMFEEDBACKSNVPROC GLeeFuncPtr_glDeleteTransformFeedbacksNV; #define glDeleteTransformFeedbacksNV GLeeFuncPtr_glDeleteTransformFeedbacksNV #endif #ifndef GLEE_H_DEFINED_glGenTransformFeedbacksNV #define GLEE_H_DEFINED_glGenTransformFeedbacksNV typedef void (APIENTRYP GLEEPFNGLGENTRANSFORMFEEDBACKSNVPROC) (GLsizei n, GLuint * ids); GLEE_EXTERN GLEEPFNGLGENTRANSFORMFEEDBACKSNVPROC GLeeFuncPtr_glGenTransformFeedbacksNV; #define glGenTransformFeedbacksNV GLeeFuncPtr_glGenTransformFeedbacksNV #endif #ifndef GLEE_H_DEFINED_glIsTransformFeedbackNV #define GLEE_H_DEFINED_glIsTransformFeedbackNV typedef GLboolean (APIENTRYP GLEEPFNGLISTRANSFORMFEEDBACKNVPROC) (GLuint id); GLEE_EXTERN GLEEPFNGLISTRANSFORMFEEDBACKNVPROC GLeeFuncPtr_glIsTransformFeedbackNV; #define glIsTransformFeedbackNV GLeeFuncPtr_glIsTransformFeedbackNV #endif #ifndef GLEE_H_DEFINED_glPauseTransformFeedbackNV #define GLEE_H_DEFINED_glPauseTransformFeedbackNV typedef void (APIENTRYP GLEEPFNGLPAUSETRANSFORMFEEDBACKNVPROC) (); GLEE_EXTERN GLEEPFNGLPAUSETRANSFORMFEEDBACKNVPROC GLeeFuncPtr_glPauseTransformFeedbackNV; #define glPauseTransformFeedbackNV GLeeFuncPtr_glPauseTransformFeedbackNV #endif #ifndef GLEE_H_DEFINED_glResumeTransformFeedbackNV #define GLEE_H_DEFINED_glResumeTransformFeedbackNV typedef void (APIENTRYP GLEEPFNGLRESUMETRANSFORMFEEDBACKNVPROC) (); GLEE_EXTERN GLEEPFNGLRESUMETRANSFORMFEEDBACKNVPROC GLeeFuncPtr_glResumeTransformFeedbackNV; #define glResumeTransformFeedbackNV GLeeFuncPtr_glResumeTransformFeedbackNV #endif #ifndef GLEE_H_DEFINED_glDrawTransformFeedbackNV #define GLEE_H_DEFINED_glDrawTransformFeedbackNV typedef void (APIENTRYP GLEEPFNGLDRAWTRANSFORMFEEDBACKNVPROC) (GLenum mode, GLuint id); GLEE_EXTERN GLEEPFNGLDRAWTRANSFORMFEEDBACKNVPROC GLeeFuncPtr_glDrawTransformFeedbackNV; #define glDrawTransformFeedbackNV GLeeFuncPtr_glDrawTransformFeedbackNV #endif #endif /* GL_SGIX_texture_select */ #ifndef GL_SGIX_texture_select #define GL_SGIX_texture_select 1 #define __GLEE_GL_SGIX_texture_select 1 /* Constants */ #endif /* GL_INGR_blend_func_separate */ #ifndef GL_INGR_blend_func_separate #define GL_INGR_blend_func_separate 1 #define __GLEE_GL_INGR_blend_func_separate 1 /* Constants */ #ifndef GLEE_H_DEFINED_glBlendFuncSeparateINGR #define GLEE_H_DEFINED_glBlendFuncSeparateINGR typedef void (APIENTRYP GLEEPFNGLBLENDFUNCSEPARATEINGRPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); GLEE_EXTERN GLEEPFNGLBLENDFUNCSEPARATEINGRPROC GLeeFuncPtr_glBlendFuncSeparateINGR; #define glBlendFuncSeparateINGR GLeeFuncPtr_glBlendFuncSeparateINGR #endif #endif /* GL_SGIX_depth_pass_instrument */ #ifndef GL_SGIX_depth_pass_instrument #define GL_SGIX_depth_pass_instrument 1 #define __GLEE_GL_SGIX_depth_pass_instrument 1 /* Constants */ #endif /* GL_SGIX_igloo_interface */ #ifndef GL_SGIX_igloo_interface #define GL_SGIX_igloo_interface 1 #define __GLEE_GL_SGIX_igloo_interface 1 /* Constants */ #ifndef GLEE_H_DEFINED_glIglooInterfaceSGIX #define GLEE_H_DEFINED_glIglooInterfaceSGIX typedef void (APIENTRYP GLEEPFNGLIGLOOINTERFACESGIXPROC) (GLenum pname, const GLvoid * params); GLEE_EXTERN GLEEPFNGLIGLOOINTERFACESGIXPROC GLeeFuncPtr_glIglooInterfaceSGIX; #define glIglooInterfaceSGIX GLeeFuncPtr_glIglooInterfaceSGIX #endif #endif /* GL_EXT_fragment_lighting */ #ifndef GL_EXT_fragment_lighting #define GL_EXT_fragment_lighting 1 #define __GLEE_GL_EXT_fragment_lighting 1 /* Constants */ #define GL_FRAGMENT_LIGHTING_EXT 0x8400 #define GL_FRAGMENT_COLOR_MATERIAL_EXT 0x8401 #define GL_FRAGMENT_COLOR_MATERIAL_FACE_EXT 0x8402 #define GL_FRAGMENT_COLOR_MATERIAL_PARAMETER_EXT 0x8403 #define GL_MAX_FRAGMENT_LIGHTS_EXT 0x8404 #define GL_MAX_ACTIVE_LIGHTS_EXT 0x8405 #define GL_CURRENT_RASTER_NORMAL_EXT 0x8406 #define GL_LIGHT_ENV_MODE_EXT 0x8407 #define GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_EXT 0x8408 #define GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_EXT 0x8409 #define GL_FRAGMENT_LIGHT_MODEL_AMBIENT_EXT 0x840A #define GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_EXT 0x840B #define GL_FRAGMENT_LIGHT0_EXT 0x840C #define GL_FRAGMENT_LIGHT7_EXT 0x8413 #ifndef GLEE_H_DEFINED_glFragmentLightModeliEXT #define GLEE_H_DEFINED_glFragmentLightModeliEXT typedef GLvoid (APIENTRYP GLEEPFNGLFRAGMENTLIGHTMODELIEXTPROC) (GLenum pname, GLint param); GLEE_EXTERN GLEEPFNGLFRAGMENTLIGHTMODELIEXTPROC GLeeFuncPtr_glFragmentLightModeliEXT; #define glFragmentLightModeliEXT GLeeFuncPtr_glFragmentLightModeliEXT #endif #ifndef GLEE_H_DEFINED_glFragmentLightModelfEXT #define GLEE_H_DEFINED_glFragmentLightModelfEXT typedef GLvoid (APIENTRYP GLEEPFNGLFRAGMENTLIGHTMODELFEXTPROC) (GLenum pname, GLfloat param); GLEE_EXTERN GLEEPFNGLFRAGMENTLIGHTMODELFEXTPROC GLeeFuncPtr_glFragmentLightModelfEXT; #define glFragmentLightModelfEXT GLeeFuncPtr_glFragmentLightModelfEXT #endif #ifndef GLEE_H_DEFINED_glFragmentLightModelivEXT #define GLEE_H_DEFINED_glFragmentLightModelivEXT typedef GLvoid (APIENTRYP GLEEPFNGLFRAGMENTLIGHTMODELIVEXTPROC) (GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLFRAGMENTLIGHTMODELIVEXTPROC GLeeFuncPtr_glFragmentLightModelivEXT; #define glFragmentLightModelivEXT GLeeFuncPtr_glFragmentLightModelivEXT #endif #ifndef GLEE_H_DEFINED_glFragmentLightModelfvEXT #define GLEE_H_DEFINED_glFragmentLightModelfvEXT typedef GLvoid (APIENTRYP GLEEPFNGLFRAGMENTLIGHTMODELFVEXTPROC) (GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLFRAGMENTLIGHTMODELFVEXTPROC GLeeFuncPtr_glFragmentLightModelfvEXT; #define glFragmentLightModelfvEXT GLeeFuncPtr_glFragmentLightModelfvEXT #endif #ifndef GLEE_H_DEFINED_glFragmentLightiEXT #define GLEE_H_DEFINED_glFragmentLightiEXT typedef GLvoid (APIENTRYP GLEEPFNGLFRAGMENTLIGHTIEXTPROC) (GLenum light, GLenum pname, GLint param); GLEE_EXTERN GLEEPFNGLFRAGMENTLIGHTIEXTPROC GLeeFuncPtr_glFragmentLightiEXT; #define glFragmentLightiEXT GLeeFuncPtr_glFragmentLightiEXT #endif #ifndef GLEE_H_DEFINED_glFragmentLightfEXT #define GLEE_H_DEFINED_glFragmentLightfEXT typedef GLvoid (APIENTRYP GLEEPFNGLFRAGMENTLIGHTFEXTPROC) (GLenum light, GLenum pname, GLfloat param); GLEE_EXTERN GLEEPFNGLFRAGMENTLIGHTFEXTPROC GLeeFuncPtr_glFragmentLightfEXT; #define glFragmentLightfEXT GLeeFuncPtr_glFragmentLightfEXT #endif #ifndef GLEE_H_DEFINED_glFragmentLightivEXT #define GLEE_H_DEFINED_glFragmentLightivEXT typedef GLvoid (APIENTRYP GLEEPFNGLFRAGMENTLIGHTIVEXTPROC) (GLenum light, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLFRAGMENTLIGHTIVEXTPROC GLeeFuncPtr_glFragmentLightivEXT; #define glFragmentLightivEXT GLeeFuncPtr_glFragmentLightivEXT #endif #ifndef GLEE_H_DEFINED_glFragmentLightfvEXT #define GLEE_H_DEFINED_glFragmentLightfvEXT typedef GLvoid (APIENTRYP GLEEPFNGLFRAGMENTLIGHTFVEXTPROC) (GLenum light, GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLFRAGMENTLIGHTFVEXTPROC GLeeFuncPtr_glFragmentLightfvEXT; #define glFragmentLightfvEXT GLeeFuncPtr_glFragmentLightfvEXT #endif #ifndef GLEE_H_DEFINED_glGetFragmentLightivEXT #define GLEE_H_DEFINED_glGetFragmentLightivEXT typedef GLvoid (APIENTRYP GLEEPFNGLGETFRAGMENTLIGHTIVEXTPROC) (GLenum light, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETFRAGMENTLIGHTIVEXTPROC GLeeFuncPtr_glGetFragmentLightivEXT; #define glGetFragmentLightivEXT GLeeFuncPtr_glGetFragmentLightivEXT #endif #ifndef GLEE_H_DEFINED_glGetFragmentLightfvEXT #define GLEE_H_DEFINED_glGetFragmentLightfvEXT typedef GLvoid (APIENTRYP GLEEPFNGLGETFRAGMENTLIGHTFVEXTPROC) (GLenum light, GLenum pname, GLfloat * params); GLEE_EXTERN GLEEPFNGLGETFRAGMENTLIGHTFVEXTPROC GLeeFuncPtr_glGetFragmentLightfvEXT; #define glGetFragmentLightfvEXT GLeeFuncPtr_glGetFragmentLightfvEXT #endif #ifndef GLEE_H_DEFINED_glFragmentMaterialfEXT #define GLEE_H_DEFINED_glFragmentMaterialfEXT typedef GLvoid (APIENTRYP GLEEPFNGLFRAGMENTMATERIALFEXTPROC) (GLenum face, GLenum pname, const GLfloat param); GLEE_EXTERN GLEEPFNGLFRAGMENTMATERIALFEXTPROC GLeeFuncPtr_glFragmentMaterialfEXT; #define glFragmentMaterialfEXT GLeeFuncPtr_glFragmentMaterialfEXT #endif #ifndef GLEE_H_DEFINED_glFragmentMaterialiEXT #define GLEE_H_DEFINED_glFragmentMaterialiEXT typedef GLvoid (APIENTRYP GLEEPFNGLFRAGMENTMATERIALIEXTPROC) (GLenum face, GLenum pname, const GLint param); GLEE_EXTERN GLEEPFNGLFRAGMENTMATERIALIEXTPROC GLeeFuncPtr_glFragmentMaterialiEXT; #define glFragmentMaterialiEXT GLeeFuncPtr_glFragmentMaterialiEXT #endif #ifndef GLEE_H_DEFINED_glFragmentMaterialfvEXT #define GLEE_H_DEFINED_glFragmentMaterialfvEXT typedef GLvoid (APIENTRYP GLEEPFNGLFRAGMENTMATERIALFVEXTPROC) (GLenum face, GLenum pname, const GLfloat * params); GLEE_EXTERN GLEEPFNGLFRAGMENTMATERIALFVEXTPROC GLeeFuncPtr_glFragmentMaterialfvEXT; #define glFragmentMaterialfvEXT GLeeFuncPtr_glFragmentMaterialfvEXT #endif #ifndef GLEE_H_DEFINED_glFragmentMaterialivEXT #define GLEE_H_DEFINED_glFragmentMaterialivEXT typedef GLvoid (APIENTRYP GLEEPFNGLFRAGMENTMATERIALIVEXTPROC) (GLenum face, GLenum pname, const GLint * params); GLEE_EXTERN GLEEPFNGLFRAGMENTMATERIALIVEXTPROC GLeeFuncPtr_glFragmentMaterialivEXT; #define glFragmentMaterialivEXT GLeeFuncPtr_glFragmentMaterialivEXT #endif #ifndef GLEE_H_DEFINED_glFragmentColorMaterialEXT #define GLEE_H_DEFINED_glFragmentColorMaterialEXT typedef GLvoid (APIENTRYP GLEEPFNGLFRAGMENTCOLORMATERIALEXTPROC) (GLenum face, GLenum mode); GLEE_EXTERN GLEEPFNGLFRAGMENTCOLORMATERIALEXTPROC GLeeFuncPtr_glFragmentColorMaterialEXT; #define glFragmentColorMaterialEXT GLeeFuncPtr_glFragmentColorMaterialEXT #endif #ifndef GLEE_H_DEFINED_glGetFragmentMaterialfvEXT #define GLEE_H_DEFINED_glGetFragmentMaterialfvEXT typedef GLvoid (APIENTRYP GLEEPFNGLGETFRAGMENTMATERIALFVEXTPROC) (GLenum face, GLenum pname, const GLfloat * params); GLEE_EXTERN GLEEPFNGLGETFRAGMENTMATERIALFVEXTPROC GLeeFuncPtr_glGetFragmentMaterialfvEXT; #define glGetFragmentMaterialfvEXT GLeeFuncPtr_glGetFragmentMaterialfvEXT #endif #ifndef GLEE_H_DEFINED_glGetFragmentMaterialivEXT #define GLEE_H_DEFINED_glGetFragmentMaterialivEXT typedef GLvoid (APIENTRYP GLEEPFNGLGETFRAGMENTMATERIALIVEXTPROC) (GLenum face, GLenum pname, const GLint * params); GLEE_EXTERN GLEEPFNGLGETFRAGMENTMATERIALIVEXTPROC GLeeFuncPtr_glGetFragmentMaterialivEXT; #define glGetFragmentMaterialivEXT GLeeFuncPtr_glGetFragmentMaterialivEXT #endif #ifndef GLEE_H_DEFINED_glLightEnviEXT #define GLEE_H_DEFINED_glLightEnviEXT typedef GLvoid (APIENTRYP GLEEPFNGLLIGHTENVIEXTPROC) (GLenum pname, GLint param); GLEE_EXTERN GLEEPFNGLLIGHTENVIEXTPROC GLeeFuncPtr_glLightEnviEXT; #define glLightEnviEXT GLeeFuncPtr_glLightEnviEXT #endif #endif /* GL_EXT_geometry_shader4 */ #ifndef GL_EXT_geometry_shader4 #define GL_EXT_geometry_shader4 1 #define __GLEE_GL_EXT_geometry_shader4 1 /* Constants */ #define GL_GEOMETRY_SHADER_EXT 0x8DD9 #define GL_GEOMETRY_VERTICES_OUT_EXT 0x8DDA #define GL_GEOMETRY_INPUT_TYPE_EXT 0x8DDB #define GL_GEOMETRY_OUTPUT_TYPE_EXT 0x8DDC #define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT 0x8C29 #define GL_MAX_GEOMETRY_VARYING_COMPONENTS_EXT 0x8DDD #define GL_MAX_VERTEX_VARYING_COMPONENTS_EXT 0x8DDE #define GL_MAX_VARYING_COMPONENTS_EXT 0x8B4B #define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT 0x8DDF #define GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT 0x8DE0 #define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT 0x8DE1 #define GL_LINES_ADJACENCY_EXT 0xA #define GL_LINE_STRIP_ADJACENCY_EXT 0xB #define GL_TRIANGLES_ADJACENCY_EXT 0xC #define GL_TRIANGLE_STRIP_ADJACENCY_EXT 0xD #define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT 0x8DA8 #define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_EXT 0x8DA9 #define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT 0x8DA7 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT 0x8CD4 #define GL_PROGRAM_POINT_SIZE_EXT 0x8642 #ifndef GLEE_H_DEFINED_glProgramParameteriEXT #define GLEE_H_DEFINED_glProgramParameteriEXT typedef GLvoid (APIENTRYP GLEEPFNGLPROGRAMPARAMETERIEXTPROC) (GLuint program, GLenum pname, GLint value); GLEE_EXTERN GLEEPFNGLPROGRAMPARAMETERIEXTPROC GLeeFuncPtr_glProgramParameteriEXT; #define glProgramParameteriEXT GLeeFuncPtr_glProgramParameteriEXT #endif #ifndef GLEE_H_DEFINED_glFramebufferTextureEXT #define GLEE_H_DEFINED_glFramebufferTextureEXT typedef GLvoid (APIENTRYP GLEEPFNGLFRAMEBUFFERTEXTUREEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); GLEE_EXTERN GLEEPFNGLFRAMEBUFFERTEXTUREEXTPROC GLeeFuncPtr_glFramebufferTextureEXT; #define glFramebufferTextureEXT GLeeFuncPtr_glFramebufferTextureEXT #endif #ifndef GLEE_H_DEFINED_glFramebufferTextureLayerEXT #define GLEE_H_DEFINED_glFramebufferTextureLayerEXT typedef GLvoid (APIENTRYP GLEEPFNGLFRAMEBUFFERTEXTURELAYEREXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); GLEE_EXTERN GLEEPFNGLFRAMEBUFFERTEXTURELAYEREXTPROC GLeeFuncPtr_glFramebufferTextureLayerEXT; #define glFramebufferTextureLayerEXT GLeeFuncPtr_glFramebufferTextureLayerEXT #endif #ifndef GLEE_H_DEFINED_glFramebufferTextureFaceEXT #define GLEE_H_DEFINED_glFramebufferTextureFaceEXT typedef GLvoid (APIENTRYP GLEEPFNGLFRAMEBUFFERTEXTUREFACEEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); GLEE_EXTERN GLEEPFNGLFRAMEBUFFERTEXTUREFACEEXTPROC GLeeFuncPtr_glFramebufferTextureFaceEXT; #define glFramebufferTextureFaceEXT GLeeFuncPtr_glFramebufferTextureFaceEXT #endif #endif /* GL_EXT_scene_marker */ #ifndef GL_EXT_scene_marker #define GL_EXT_scene_marker 1 #define __GLEE_GL_EXT_scene_marker 1 /* Constants */ #ifndef GLEE_H_DEFINED_glBeginSceneEXT #define GLEE_H_DEFINED_glBeginSceneEXT typedef GLvoid (APIENTRYP GLEEPFNGLBEGINSCENEEXTPROC) (); GLEE_EXTERN GLEEPFNGLBEGINSCENEEXTPROC GLeeFuncPtr_glBeginSceneEXT; #define glBeginSceneEXT GLeeFuncPtr_glBeginSceneEXT #endif #ifndef GLEE_H_DEFINED_glEndSceneEXT #define GLEE_H_DEFINED_glEndSceneEXT typedef GLvoid (APIENTRYP GLEEPFNGLENDSCENEEXTPROC) (); GLEE_EXTERN GLEEPFNGLENDSCENEEXTPROC GLeeFuncPtr_glEndSceneEXT; #define glEndSceneEXT GLeeFuncPtr_glEndSceneEXT #endif #endif /* GL_EXT_texture_compression_dxt1 */ #ifndef GL_EXT_texture_compression_dxt1 #define GL_EXT_texture_compression_dxt1 1 #define __GLEE_GL_EXT_texture_compression_dxt1 1 /* Constants */ #define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0 #define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1 #endif /* GL_EXT_texture_env */ #ifndef GL_EXT_texture_env #define GL_EXT_texture_env 1 #define __GLEE_GL_EXT_texture_env 1 /* Constants */ #define GL_TEXTURE_ENV0_EXT 0 #define GL_TEXTURE_ENV_MODE_ALPHA_EXT 0 #define GL_ENV_COPY_EXT 0 #define GL_ENV_REPLACE_EXT 0 #define GL_ENV_MODULATE_EXT 0 #define GL_ENV_ADD_EXT 0 #define GL_ENV_SUBTRACT_EXT 0 #define GL_ENV_REVERSE_SUBTRACT_EXT 0 #define GL_ENV_BLEND_EXT 0 #define GL_ENV_REVERSE_BLEND_EXT 0 #define GL_TEXTURE_ENV_SHIFT_EXT 0 #endif /* GL_IBM_static_data */ #ifndef GL_IBM_static_data #define GL_IBM_static_data 1 #define __GLEE_GL_IBM_static_data 1 /* Constants */ #define GL_ALL_STATIC_DATA_IBM 103060 #define GL_STATIC_VERTEX_ARRAY_IBM 103061 #endif /* GL_NV_gpu_program4 */ #ifndef GL_NV_gpu_program4 #define GL_NV_gpu_program4 1 #define __GLEE_GL_NV_gpu_program4 1 /* Constants */ #define GL_MIN_PROGRAM_TEXEL_OFFSET_EXT 0x8904 #define GL_MAX_PROGRAM_TEXEL_OFFSET_EXT 0x8905 #define GL_PROGRAM_ATTRIB_COMPONENTS_NV 0x8906 #define GL_PROGRAM_RESULT_COMPONENTS_NV 0x8907 #define GL_MAX_PROGRAM_ATTRIB_COMPONENTS_NV 0x8908 #define GL_MAX_PROGRAM_RESULT_COMPONENTS_NV 0x8909 #define GL_MAX_PROGRAM_GENERIC_ATTRIBS_NV 0x8DA5 #define GL_MAX_PROGRAM_GENERIC_RESULTS_NV 0x8DA6 #define GL_GEOMETRY_PROGRAM_NV 0x8C26 #define GL_MAX_PROGRAM_OUTPUT_VERTICES_NV 0x8C27 #define GL_MAX_PROGRAM_TOTAL_OUTPUT_COMPONENTS_NV 0x8C28 #define GL_GEOMETRY_VERTICES_OUT_EXT 0x8DDA #define GL_GEOMETRY_INPUT_TYPE_EXT 0x8DDB #define GL_GEOMETRY_OUTPUT_TYPE_EXT 0x8DDC #define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT 0x8C29 #define GL_LINES_ADJACENCY_EXT 0xA #define GL_LINE_STRIP_ADJACENCY_EXT 0xB #define GL_TRIANGLES_ADJACENCY_EXT 0xC #define GL_TRIANGLE_STRIP_ADJACENCY_EXT 0xD #define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT 0x8DA8 #define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_EXT 0x8DA9 #define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT 0x8DA7 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT 0x8CD4 #define GL_PROGRAM_POINT_SIZE_EXT 0x8642 #define GL_VERTEX_ATTRIB_ARRAY_INTEGER_EXT 0x88FD #ifndef GLEE_H_DEFINED_glProgramLocalParameterI4iNV #define GLEE_H_DEFINED_glProgramLocalParameterI4iNV typedef GLvoid (APIENTRYP GLEEPFNGLPROGRAMLOCALPARAMETERI4INVPROC) (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); GLEE_EXTERN GLEEPFNGLPROGRAMLOCALPARAMETERI4INVPROC GLeeFuncPtr_glProgramLocalParameterI4iNV; #define glProgramLocalParameterI4iNV GLeeFuncPtr_glProgramLocalParameterI4iNV #endif #ifndef GLEE_H_DEFINED_glProgramLocalParameterI4ivNV #define GLEE_H_DEFINED_glProgramLocalParameterI4ivNV typedef GLvoid (APIENTRYP GLEEPFNGLPROGRAMLOCALPARAMETERI4IVNVPROC) (GLenum target, GLuint index, const GLint * params); GLEE_EXTERN GLEEPFNGLPROGRAMLOCALPARAMETERI4IVNVPROC GLeeFuncPtr_glProgramLocalParameterI4ivNV; #define glProgramLocalParameterI4ivNV GLeeFuncPtr_glProgramLocalParameterI4ivNV #endif #ifndef GLEE_H_DEFINED_glProgramLocalParametersI4ivNV #define GLEE_H_DEFINED_glProgramLocalParametersI4ivNV typedef GLvoid (APIENTRYP GLEEPFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLint * params); GLEE_EXTERN GLEEPFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC GLeeFuncPtr_glProgramLocalParametersI4ivNV; #define glProgramLocalParametersI4ivNV GLeeFuncPtr_glProgramLocalParametersI4ivNV #endif #ifndef GLEE_H_DEFINED_glProgramLocalParameterI4uiNV #define GLEE_H_DEFINED_glProgramLocalParameterI4uiNV typedef GLvoid (APIENTRYP GLEEPFNGLPROGRAMLOCALPARAMETERI4UINVPROC) (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); GLEE_EXTERN GLEEPFNGLPROGRAMLOCALPARAMETERI4UINVPROC GLeeFuncPtr_glProgramLocalParameterI4uiNV; #define glProgramLocalParameterI4uiNV GLeeFuncPtr_glProgramLocalParameterI4uiNV #endif #ifndef GLEE_H_DEFINED_glProgramLocalParameterI4uivNV #define GLEE_H_DEFINED_glProgramLocalParameterI4uivNV typedef GLvoid (APIENTRYP GLEEPFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC) (GLenum target, GLuint index, const GLuint * params); GLEE_EXTERN GLEEPFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC GLeeFuncPtr_glProgramLocalParameterI4uivNV; #define glProgramLocalParameterI4uivNV GLeeFuncPtr_glProgramLocalParameterI4uivNV #endif #ifndef GLEE_H_DEFINED_glProgramLocalParametersI4uivNV #define GLEE_H_DEFINED_glProgramLocalParametersI4uivNV typedef GLvoid (APIENTRYP GLEEPFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLuint * params); GLEE_EXTERN GLEEPFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC GLeeFuncPtr_glProgramLocalParametersI4uivNV; #define glProgramLocalParametersI4uivNV GLeeFuncPtr_glProgramLocalParametersI4uivNV #endif #ifndef GLEE_H_DEFINED_glProgramEnvParameterI4iNV #define GLEE_H_DEFINED_glProgramEnvParameterI4iNV typedef GLvoid (APIENTRYP GLEEPFNGLPROGRAMENVPARAMETERI4INVPROC) (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); GLEE_EXTERN GLEEPFNGLPROGRAMENVPARAMETERI4INVPROC GLeeFuncPtr_glProgramEnvParameterI4iNV; #define glProgramEnvParameterI4iNV GLeeFuncPtr_glProgramEnvParameterI4iNV #endif #ifndef GLEE_H_DEFINED_glProgramEnvParameterI4ivNV #define GLEE_H_DEFINED_glProgramEnvParameterI4ivNV typedef GLvoid (APIENTRYP GLEEPFNGLPROGRAMENVPARAMETERI4IVNVPROC) (GLenum target, GLuint index, const GLint * params); GLEE_EXTERN GLEEPFNGLPROGRAMENVPARAMETERI4IVNVPROC GLeeFuncPtr_glProgramEnvParameterI4ivNV; #define glProgramEnvParameterI4ivNV GLeeFuncPtr_glProgramEnvParameterI4ivNV #endif #ifndef GLEE_H_DEFINED_glProgramEnvParametersI4ivNV #define GLEE_H_DEFINED_glProgramEnvParametersI4ivNV typedef GLvoid (APIENTRYP GLEEPFNGLPROGRAMENVPARAMETERSI4IVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLint * params); GLEE_EXTERN GLEEPFNGLPROGRAMENVPARAMETERSI4IVNVPROC GLeeFuncPtr_glProgramEnvParametersI4ivNV; #define glProgramEnvParametersI4ivNV GLeeFuncPtr_glProgramEnvParametersI4ivNV #endif #ifndef GLEE_H_DEFINED_glProgramEnvParameterI4uiNV #define GLEE_H_DEFINED_glProgramEnvParameterI4uiNV typedef GLvoid (APIENTRYP GLEEPFNGLPROGRAMENVPARAMETERI4UINVPROC) (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); GLEE_EXTERN GLEEPFNGLPROGRAMENVPARAMETERI4UINVPROC GLeeFuncPtr_glProgramEnvParameterI4uiNV; #define glProgramEnvParameterI4uiNV GLeeFuncPtr_glProgramEnvParameterI4uiNV #endif #ifndef GLEE_H_DEFINED_glProgramEnvParameterI4uivNV #define GLEE_H_DEFINED_glProgramEnvParameterI4uivNV typedef GLvoid (APIENTRYP GLEEPFNGLPROGRAMENVPARAMETERI4UIVNVPROC) (GLenum target, GLuint index, const GLuint * params); GLEE_EXTERN GLEEPFNGLPROGRAMENVPARAMETERI4UIVNVPROC GLeeFuncPtr_glProgramEnvParameterI4uivNV; #define glProgramEnvParameterI4uivNV GLeeFuncPtr_glProgramEnvParameterI4uivNV #endif #ifndef GLEE_H_DEFINED_glProgramEnvParametersI4uivNV #define GLEE_H_DEFINED_glProgramEnvParametersI4uivNV typedef GLvoid (APIENTRYP GLEEPFNGLPROGRAMENVPARAMETERSI4UIVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLuint * params); GLEE_EXTERN GLEEPFNGLPROGRAMENVPARAMETERSI4UIVNVPROC GLeeFuncPtr_glProgramEnvParametersI4uivNV; #define glProgramEnvParametersI4uivNV GLeeFuncPtr_glProgramEnvParametersI4uivNV #endif #ifndef GLEE_H_DEFINED_glGetProgramLocalParameterIivNV #define GLEE_H_DEFINED_glGetProgramLocalParameterIivNV typedef GLvoid (APIENTRYP GLEEPFNGLGETPROGRAMLOCALPARAMETERIIVNVPROC) (GLenum target, GLuint index, GLint * params); GLEE_EXTERN GLEEPFNGLGETPROGRAMLOCALPARAMETERIIVNVPROC GLeeFuncPtr_glGetProgramLocalParameterIivNV; #define glGetProgramLocalParameterIivNV GLeeFuncPtr_glGetProgramLocalParameterIivNV #endif #ifndef GLEE_H_DEFINED_glGetProgramLocalParameterIuivNV #define GLEE_H_DEFINED_glGetProgramLocalParameterIuivNV typedef GLvoid (APIENTRYP GLEEPFNGLGETPROGRAMLOCALPARAMETERIUIVNVPROC) (GLenum target, GLuint index, GLuint * params); GLEE_EXTERN GLEEPFNGLGETPROGRAMLOCALPARAMETERIUIVNVPROC GLeeFuncPtr_glGetProgramLocalParameterIuivNV; #define glGetProgramLocalParameterIuivNV GLeeFuncPtr_glGetProgramLocalParameterIuivNV #endif #ifndef GLEE_H_DEFINED_glGetProgramEnvParameterIivNV #define GLEE_H_DEFINED_glGetProgramEnvParameterIivNV typedef GLvoid (APIENTRYP GLEEPFNGLGETPROGRAMENVPARAMETERIIVNVPROC) (GLenum target, GLuint index, GLint * params); GLEE_EXTERN GLEEPFNGLGETPROGRAMENVPARAMETERIIVNVPROC GLeeFuncPtr_glGetProgramEnvParameterIivNV; #define glGetProgramEnvParameterIivNV GLeeFuncPtr_glGetProgramEnvParameterIivNV #endif #ifndef GLEE_H_DEFINED_glGetProgramEnvParameterIuivNV #define GLEE_H_DEFINED_glGetProgramEnvParameterIuivNV typedef GLvoid (APIENTRYP GLEEPFNGLGETPROGRAMENVPARAMETERIUIVNVPROC) (GLenum target, GLuint index, GLuint * params); GLEE_EXTERN GLEEPFNGLGETPROGRAMENVPARAMETERIUIVNVPROC GLeeFuncPtr_glGetProgramEnvParameterIuivNV; #define glGetProgramEnvParameterIuivNV GLeeFuncPtr_glGetProgramEnvParameterIuivNV #endif #ifndef GLEE_H_DEFINED_glFramebufferTextureEXT #define GLEE_H_DEFINED_glFramebufferTextureEXT typedef GLvoid (APIENTRYP GLEEPFNGLFRAMEBUFFERTEXTUREEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); GLEE_EXTERN GLEEPFNGLFRAMEBUFFERTEXTUREEXTPROC GLeeFuncPtr_glFramebufferTextureEXT; #define glFramebufferTextureEXT GLeeFuncPtr_glFramebufferTextureEXT #endif #ifndef GLEE_H_DEFINED_glFramebufferTextureLayerEXT #define GLEE_H_DEFINED_glFramebufferTextureLayerEXT typedef GLvoid (APIENTRYP GLEEPFNGLFRAMEBUFFERTEXTURELAYEREXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); GLEE_EXTERN GLEEPFNGLFRAMEBUFFERTEXTURELAYEREXTPROC GLeeFuncPtr_glFramebufferTextureLayerEXT; #define glFramebufferTextureLayerEXT GLeeFuncPtr_glFramebufferTextureLayerEXT #endif #ifndef GLEE_H_DEFINED_glFramebufferTextureFaceEXT #define GLEE_H_DEFINED_glFramebufferTextureFaceEXT typedef GLvoid (APIENTRYP GLEEPFNGLFRAMEBUFFERTEXTUREFACEEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); GLEE_EXTERN GLEEPFNGLFRAMEBUFFERTEXTUREFACEEXTPROC GLeeFuncPtr_glFramebufferTextureFaceEXT; #define glFramebufferTextureFaceEXT GLeeFuncPtr_glFramebufferTextureFaceEXT #endif #ifndef GLEE_H_DEFINED_glVertexAttribI2iEXT #define GLEE_H_DEFINED_glVertexAttribI2iEXT typedef GLvoid (APIENTRYP GLEEPFNGLVERTEXATTRIBI2IEXTPROC) (GLuint index, GLint x, GLint y); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBI2IEXTPROC GLeeFuncPtr_glVertexAttribI2iEXT; #define glVertexAttribI2iEXT GLeeFuncPtr_glVertexAttribI2iEXT #endif #ifndef GLEE_H_DEFINED_glVertexAttribI3iEXT #define GLEE_H_DEFINED_glVertexAttribI3iEXT typedef GLvoid (APIENTRYP GLEEPFNGLVERTEXATTRIBI3IEXTPROC) (GLuint index, GLint x, GLint y, GLint z); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBI3IEXTPROC GLeeFuncPtr_glVertexAttribI3iEXT; #define glVertexAttribI3iEXT GLeeFuncPtr_glVertexAttribI3iEXT #endif #ifndef GLEE_H_DEFINED_glVertexAttribI4iEXT #define GLEE_H_DEFINED_glVertexAttribI4iEXT typedef GLvoid (APIENTRYP GLEEPFNGLVERTEXATTRIBI4IEXTPROC) (GLuint index, GLint x, GLint y, GLint z, GLint w); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBI4IEXTPROC GLeeFuncPtr_glVertexAttribI4iEXT; #define glVertexAttribI4iEXT GLeeFuncPtr_glVertexAttribI4iEXT #endif #ifndef GLEE_H_DEFINED_glVertexAttribI1uiEXT #define GLEE_H_DEFINED_glVertexAttribI1uiEXT typedef GLvoid (APIENTRYP GLEEPFNGLVERTEXATTRIBI1UIEXTPROC) (GLuint index, GLuint x); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBI1UIEXTPROC GLeeFuncPtr_glVertexAttribI1uiEXT; #define glVertexAttribI1uiEXT GLeeFuncPtr_glVertexAttribI1uiEXT #endif #ifndef GLEE_H_DEFINED_glVertexAttribI2uiEXT #define GLEE_H_DEFINED_glVertexAttribI2uiEXT typedef GLvoid (APIENTRYP GLEEPFNGLVERTEXATTRIBI2UIEXTPROC) (GLuint index, GLuint x, GLuint y); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBI2UIEXTPROC GLeeFuncPtr_glVertexAttribI2uiEXT; #define glVertexAttribI2uiEXT GLeeFuncPtr_glVertexAttribI2uiEXT #endif #ifndef GLEE_H_DEFINED_glVertexAttribI3uiEXT #define GLEE_H_DEFINED_glVertexAttribI3uiEXT typedef GLvoid (APIENTRYP GLEEPFNGLVERTEXATTRIBI3UIEXTPROC) (GLuint index, GLuint x, GLuint y, GLuint z); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBI3UIEXTPROC GLeeFuncPtr_glVertexAttribI3uiEXT; #define glVertexAttribI3uiEXT GLeeFuncPtr_glVertexAttribI3uiEXT #endif #ifndef GLEE_H_DEFINED_glVertexAttribI4uiEXT #define GLEE_H_DEFINED_glVertexAttribI4uiEXT typedef GLvoid (APIENTRYP GLEEPFNGLVERTEXATTRIBI4UIEXTPROC) (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBI4UIEXTPROC GLeeFuncPtr_glVertexAttribI4uiEXT; #define glVertexAttribI4uiEXT GLeeFuncPtr_glVertexAttribI4uiEXT #endif #ifndef GLEE_H_DEFINED_glVertexAttribI1ivEXT #define GLEE_H_DEFINED_glVertexAttribI1ivEXT typedef GLvoid (APIENTRYP GLEEPFNGLVERTEXATTRIBI1IVEXTPROC) (GLuint index, const GLint * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBI1IVEXTPROC GLeeFuncPtr_glVertexAttribI1ivEXT; #define glVertexAttribI1ivEXT GLeeFuncPtr_glVertexAttribI1ivEXT #endif #ifndef GLEE_H_DEFINED_glVertexAttribI2ivEXT #define GLEE_H_DEFINED_glVertexAttribI2ivEXT typedef GLvoid (APIENTRYP GLEEPFNGLVERTEXATTRIBI2IVEXTPROC) (GLuint index, const GLint * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBI2IVEXTPROC GLeeFuncPtr_glVertexAttribI2ivEXT; #define glVertexAttribI2ivEXT GLeeFuncPtr_glVertexAttribI2ivEXT #endif #ifndef GLEE_H_DEFINED_glVertexAttribI3ivEXT #define GLEE_H_DEFINED_glVertexAttribI3ivEXT typedef GLvoid (APIENTRYP GLEEPFNGLVERTEXATTRIBI3IVEXTPROC) (GLuint index, const GLint * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBI3IVEXTPROC GLeeFuncPtr_glVertexAttribI3ivEXT; #define glVertexAttribI3ivEXT GLeeFuncPtr_glVertexAttribI3ivEXT #endif #ifndef GLEE_H_DEFINED_glVertexAttribI4ivEXT #define GLEE_H_DEFINED_glVertexAttribI4ivEXT typedef GLvoid (APIENTRYP GLEEPFNGLVERTEXATTRIBI4IVEXTPROC) (GLuint index, const GLint * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBI4IVEXTPROC GLeeFuncPtr_glVertexAttribI4ivEXT; #define glVertexAttribI4ivEXT GLeeFuncPtr_glVertexAttribI4ivEXT #endif #ifndef GLEE_H_DEFINED_glVertexAttribI1uivEXT #define GLEE_H_DEFINED_glVertexAttribI1uivEXT typedef GLvoid (APIENTRYP GLEEPFNGLVERTEXATTRIBI1UIVEXTPROC) (GLuint index, const GLuint * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBI1UIVEXTPROC GLeeFuncPtr_glVertexAttribI1uivEXT; #define glVertexAttribI1uivEXT GLeeFuncPtr_glVertexAttribI1uivEXT #endif #ifndef GLEE_H_DEFINED_glVertexAttribI2uivEXT #define GLEE_H_DEFINED_glVertexAttribI2uivEXT typedef GLvoid (APIENTRYP GLEEPFNGLVERTEXATTRIBI2UIVEXTPROC) (GLuint index, const GLuint * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBI2UIVEXTPROC GLeeFuncPtr_glVertexAttribI2uivEXT; #define glVertexAttribI2uivEXT GLeeFuncPtr_glVertexAttribI2uivEXT #endif #ifndef GLEE_H_DEFINED_glVertexAttribI3uivEXT #define GLEE_H_DEFINED_glVertexAttribI3uivEXT typedef GLvoid (APIENTRYP GLEEPFNGLVERTEXATTRIBI3UIVEXTPROC) (GLuint index, const GLuint * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBI3UIVEXTPROC GLeeFuncPtr_glVertexAttribI3uivEXT; #define glVertexAttribI3uivEXT GLeeFuncPtr_glVertexAttribI3uivEXT #endif #ifndef GLEE_H_DEFINED_glVertexAttribI4uivEXT #define GLEE_H_DEFINED_glVertexAttribI4uivEXT typedef GLvoid (APIENTRYP GLEEPFNGLVERTEXATTRIBI4UIVEXTPROC) (GLuint index, const GLuint * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBI4UIVEXTPROC GLeeFuncPtr_glVertexAttribI4uivEXT; #define glVertexAttribI4uivEXT GLeeFuncPtr_glVertexAttribI4uivEXT #endif #ifndef GLEE_H_DEFINED_glVertexAttribI4bvEXT #define GLEE_H_DEFINED_glVertexAttribI4bvEXT typedef GLvoid (APIENTRYP GLEEPFNGLVERTEXATTRIBI4BVEXTPROC) (GLuint index, const GLbyte * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBI4BVEXTPROC GLeeFuncPtr_glVertexAttribI4bvEXT; #define glVertexAttribI4bvEXT GLeeFuncPtr_glVertexAttribI4bvEXT #endif #ifndef GLEE_H_DEFINED_glVertexAttribI4svEXT #define GLEE_H_DEFINED_glVertexAttribI4svEXT typedef GLvoid (APIENTRYP GLEEPFNGLVERTEXATTRIBI4SVEXTPROC) (GLuint index, const GLshort * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBI4SVEXTPROC GLeeFuncPtr_glVertexAttribI4svEXT; #define glVertexAttribI4svEXT GLeeFuncPtr_glVertexAttribI4svEXT #endif #ifndef GLEE_H_DEFINED_glVertexAttribI4ubvEXT #define GLEE_H_DEFINED_glVertexAttribI4ubvEXT typedef GLvoid (APIENTRYP GLEEPFNGLVERTEXATTRIBI4UBVEXTPROC) (GLuint index, const GLubyte * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBI4UBVEXTPROC GLeeFuncPtr_glVertexAttribI4ubvEXT; #define glVertexAttribI4ubvEXT GLeeFuncPtr_glVertexAttribI4ubvEXT #endif #ifndef GLEE_H_DEFINED_glVertexAttribI4usvEXT #define GLEE_H_DEFINED_glVertexAttribI4usvEXT typedef GLvoid (APIENTRYP GLEEPFNGLVERTEXATTRIBI4USVEXTPROC) (GLuint index, const GLushort * v); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBI4USVEXTPROC GLeeFuncPtr_glVertexAttribI4usvEXT; #define glVertexAttribI4usvEXT GLeeFuncPtr_glVertexAttribI4usvEXT #endif #ifndef GLEE_H_DEFINED_glVertexAttribIPointerEXT #define GLEE_H_DEFINED_glVertexAttribIPointerEXT typedef GLvoid (APIENTRYP GLEEPFNGLVERTEXATTRIBIPOINTEREXTPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid * pointer); GLEE_EXTERN GLEEPFNGLVERTEXATTRIBIPOINTEREXTPROC GLeeFuncPtr_glVertexAttribIPointerEXT; #define glVertexAttribIPointerEXT GLeeFuncPtr_glVertexAttribIPointerEXT #endif #ifndef GLEE_H_DEFINED_glGetVertexAttribIivEXT #define GLEE_H_DEFINED_glGetVertexAttribIivEXT typedef GLvoid (APIENTRYP GLEEPFNGLGETVERTEXATTRIBIIVEXTPROC) (GLuint index, GLenum pname, GLint * params); GLEE_EXTERN GLEEPFNGLGETVERTEXATTRIBIIVEXTPROC GLeeFuncPtr_glGetVertexAttribIivEXT; #define glGetVertexAttribIivEXT GLeeFuncPtr_glGetVertexAttribIivEXT #endif #ifndef GLEE_H_DEFINED_glGetVertexAttribIuivEXT #define GLEE_H_DEFINED_glGetVertexAttribIuivEXT typedef GLvoid (APIENTRYP GLEEPFNGLGETVERTEXATTRIBIUIVEXTPROC) (GLuint index, GLenum pname, GLuint * params); GLEE_EXTERN GLEEPFNGLGETVERTEXATTRIBIUIVEXTPROC GLeeFuncPtr_glGetVertexAttribIuivEXT; #define glGetVertexAttribIuivEXT GLeeFuncPtr_glGetVertexAttribIuivEXT #endif #endif /* GL_OES_byte_coordinates */ #ifndef GL_OES_byte_coordinates #define GL_OES_byte_coordinates 1 #define __GLEE_GL_OES_byte_coordinates 1 /* Constants */ #define GL_BYTE 0x1400 #endif /* GL_OES_compressed_paletted_texture */ #ifndef GL_OES_compressed_paletted_texture #define GL_OES_compressed_paletted_texture 1 #define __GLEE_GL_OES_compressed_paletted_texture 1 /* Constants */ #define GL_PALETTE4_RGB8_OES 0x8B90 #define GL_PALETTE4_RGBA8_OES 0x8B91 #define GL_PALETTE4_R5_G6_B5_OES 0x8B92 #define GL_PALETTE4_RGBA4_OES 0x8B93 #define GL_PALETTE4_RGB5_A1_OES 0x8B94 #define GL_PALETTE8_RGB8_OES 0x8B95 #define GL_PALETTE8_RGBA8_OES 0x8B96 #define GL_PALETTE8_R5_G6_B5_OES 0x8B97 #define GL_PALETTE8_RGBA4_OES 0x8B98 #define GL_PALETTE8_RGB5_A1_OES 0x8B99 #endif /* GL_OES_single_precision */ #ifndef GL_OES_single_precision #define GL_OES_single_precision 1 #define __GLEE_GL_OES_single_precision 1 /* Constants */ #ifndef GLEE_H_DEFINED_glDepthRangefOES #define GLEE_H_DEFINED_glDepthRangefOES typedef GLvoid (APIENTRYP GLEEPFNGLDEPTHRANGEFOESPROC) (GLclampf n, GLclampf f); GLEE_EXTERN GLEEPFNGLDEPTHRANGEFOESPROC GLeeFuncPtr_glDepthRangefOES; #define glDepthRangefOES GLeeFuncPtr_glDepthRangefOES #endif #ifndef GLEE_H_DEFINED_glFrustumfOES #define GLEE_H_DEFINED_glFrustumfOES typedef GLvoid (APIENTRYP GLEEPFNGLFRUSTUMFOESPROC) (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); GLEE_EXTERN GLEEPFNGLFRUSTUMFOESPROC GLeeFuncPtr_glFrustumfOES; #define glFrustumfOES GLeeFuncPtr_glFrustumfOES #endif #ifndef GLEE_H_DEFINED_glOrthofOES #define GLEE_H_DEFINED_glOrthofOES typedef GLvoid (APIENTRYP GLEEPFNGLORTHOFOESPROC) (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); GLEE_EXTERN GLEEPFNGLORTHOFOESPROC GLeeFuncPtr_glOrthofOES; #define glOrthofOES GLeeFuncPtr_glOrthofOES #endif #ifndef GLEE_H_DEFINED_glClipPlanefOES #define GLEE_H_DEFINED_glClipPlanefOES typedef GLvoid (APIENTRYP GLEEPFNGLCLIPPLANEFOESPROC) (GLenum plane, const GLfloat* equation); GLEE_EXTERN GLEEPFNGLCLIPPLANEFOESPROC GLeeFuncPtr_glClipPlanefOES; #define glClipPlanefOES GLeeFuncPtr_glClipPlanefOES #endif #ifndef GLEE_H_DEFINED_glGetClipPlanefOES #define GLEE_H_DEFINED_glGetClipPlanefOES typedef GLvoid (APIENTRYP GLEEPFNGLGETCLIPPLANEFOESPROC) (GLenum plane, GLfloat* equation); GLEE_EXTERN GLEEPFNGLGETCLIPPLANEFOESPROC GLeeFuncPtr_glGetClipPlanefOES; #define glGetClipPlanefOES GLeeFuncPtr_glGetClipPlanefOES #endif #ifndef GLEE_H_DEFINED_glClearDepthfOES #define GLEE_H_DEFINED_glClearDepthfOES typedef GLvoid (APIENTRYP GLEEPFNGLCLEARDEPTHFOESPROC) (GLclampd depth); GLEE_EXTERN GLEEPFNGLCLEARDEPTHFOESPROC GLeeFuncPtr_glClearDepthfOES; #define glClearDepthfOES GLeeFuncPtr_glClearDepthfOES #endif #endif /* GL_SGIX_pixel_texture_bits */ #ifndef GL_SGIX_pixel_texture_bits #define GL_SGIX_pixel_texture_bits 1 #define __GLEE_GL_SGIX_pixel_texture_bits 1 /* Constants */ #endif /* GL_SGIX_texture_range */ #ifndef GL_SGIX_texture_range #define GL_SGIX_texture_range 1 #define __GLEE_GL_SGIX_texture_range 1 /* Constants */ #define GL_RGB_SIGNED_SGIX 0x85E0 #define GL_RGBA_SIGNED_SGIX 0x85E1 #define GL_ALPHA_SIGNED_SGIX 0x85E2 #define GL_LUMINANCE_SIGNED_SGIX 0x85E3 #define GL_INTENSITY_SIGNED_SGIX 0x85E4 #define GL_LUMINANCE_ALPHA_SIGNED_SGIX 0x85E5 #define GL_RGB16_SIGNED_SGIX 0x85E6 #define GL_RGBA16_SIGNED_SGIX 0x85E7 #define GL_ALPHA16_SIGNED_SGIX 0x85E8 #define GL_LUMINANCE16_SIGNED_SGIX 0x85E9 #define GL_INTENSITY16_SIGNED_SGIX 0x85EA #define GL_LUMINANCE16_ALPHA16_SIGNED_SGIX 0x85EB #define GL_RGB_EXTENDED_RANGE_SGIX 0x85EC #define GL_RGBA_EXTENDED_RANGE_SGIX 0x85ED #define GL_ALPHA_EXTENDED_RANGE_SGIX 0x85EE #define GL_LUMINANCE_EXTENDED_RANGE_SGIX 0x85EF #define GL_INTENSITY_EXTENDED_RANGE_SGIX 0x85F0 #define GL_LUMINANCE_ALPHA_EXTENDED_RANGE_SGIX 0x85F1 #define GL_RGB16_EXTENDED_RANGE_SGIX 0x85F2 #define GL_RGBA16_EXTENDED_RANGE_SGIX 0x85F3 #define GL_ALPHA16_EXTENDED_RANGE_SGIX 0x85F4 #define GL_LUMINANCE16_EXTENDED_RANGE_SGIX 0x85F5 #define GL_INTENSITY16_EXTENDED_RANGE_SGIX 0x85F6 #define GL_LUMINANCE16_ALPHA16_EXTENDED_RANGE_SGIX 0x85F7 #define GL_MIN_LUMINANCE_SGIS 0x85F8 #define GL_MAX_LUMINANCE_SGIS 0x85F9 #define GL_MIN_INTENSITY_SGIS 0x85FA #define GL_MAX_INTENSITY_SGIS 0x85FB #endif /* WGL */ #ifdef WIN32 /* Extension querying variables */ GLEE_EXTERN GLboolean _GLEE_WGL_ARB_buffer_region; GLEE_EXTERN GLboolean _GLEE_WGL_ARB_multisample; GLEE_EXTERN GLboolean _GLEE_WGL_ARB_extensions_string; GLEE_EXTERN GLboolean _GLEE_WGL_ARB_pixel_format; GLEE_EXTERN GLboolean _GLEE_WGL_ARB_make_current_read; GLEE_EXTERN GLboolean _GLEE_WGL_ARB_pbuffer; GLEE_EXTERN GLboolean _GLEE_WGL_ARB_render_texture; GLEE_EXTERN GLboolean _GLEE_WGL_ARB_pixel_format_float; GLEE_EXTERN GLboolean _GLEE_WGL_ARB_create_context; GLEE_EXTERN GLboolean _GLEE_WGL_EXT_make_current_read; GLEE_EXTERN GLboolean _GLEE_WGL_EXT_pixel_format; GLEE_EXTERN GLboolean _GLEE_WGL_EXT_pbuffer; GLEE_EXTERN GLboolean _GLEE_WGL_EXT_depth_float; GLEE_EXTERN GLboolean _GLEE_WGL_3DFX_multisample; GLEE_EXTERN GLboolean _GLEE_WGL_EXT_multisample; GLEE_EXTERN GLboolean _GLEE_WGL_I3D_digital_video_control; GLEE_EXTERN GLboolean _GLEE_WGL_I3D_gamma; GLEE_EXTERN GLboolean _GLEE_WGL_I3D_genlock; GLEE_EXTERN GLboolean _GLEE_WGL_I3D_image_buffer; GLEE_EXTERN GLboolean _GLEE_WGL_I3D_swap_frame_lock; GLEE_EXTERN GLboolean _GLEE_WGL_NV_render_depth_texture; GLEE_EXTERN GLboolean _GLEE_WGL_NV_render_texture_rectangle; GLEE_EXTERN GLboolean _GLEE_WGL_ATI_pixel_format_float; GLEE_EXTERN GLboolean _GLEE_WGL_NV_float_buffer; GLEE_EXTERN GLboolean _GLEE_WGL_3DL_stereo_control; GLEE_EXTERN GLboolean _GLEE_WGL_EXT_pixel_format_packed_float; GLEE_EXTERN GLboolean _GLEE_WGL_EXT_framebuffer_sRGB; GLEE_EXTERN GLboolean _GLEE_WGL_NV_present_video; GLEE_EXTERN GLboolean _GLEE_WGL_NV_swap_group; GLEE_EXTERN GLboolean _GLEE_WGL_NV_gpu_affinity; GLEE_EXTERN GLboolean _GLEE_WGL_EXT_display_color_table; GLEE_EXTERN GLboolean _GLEE_WGL_EXT_extensions_string; GLEE_EXTERN GLboolean _GLEE_WGL_EXT_swap_control; GLEE_EXTERN GLboolean _GLEE_WGL_NV_vertex_array_range; GLEE_EXTERN GLboolean _GLEE_WGL_OML_sync_control; GLEE_EXTERN GLboolean _GLEE_WGL_I3D_swap_frame_usage; GLEE_EXTERN GLboolean _GLEE_WGL_NV_video_output; /* Aliases for extension querying variables */ #define GLEE_WGL_ARB_buffer_region GLeeEnabled(&_GLEE_WGL_ARB_buffer_region) #define GLEE_WGL_ARB_multisample GLeeEnabled(&_GLEE_WGL_ARB_multisample) #define GLEE_WGL_ARB_extensions_string GLeeEnabled(&_GLEE_WGL_ARB_extensions_string) #define GLEE_WGL_ARB_pixel_format GLeeEnabled(&_GLEE_WGL_ARB_pixel_format) #define GLEE_WGL_ARB_make_current_read GLeeEnabled(&_GLEE_WGL_ARB_make_current_read) #define GLEE_WGL_ARB_pbuffer GLeeEnabled(&_GLEE_WGL_ARB_pbuffer) #define GLEE_WGL_ARB_render_texture GLeeEnabled(&_GLEE_WGL_ARB_render_texture) #define GLEE_WGL_ARB_pixel_format_float GLeeEnabled(&_GLEE_WGL_ARB_pixel_format_float) #define GLEE_WGL_ARB_create_context GLeeEnabled(&_GLEE_WGL_ARB_create_context) #define GLEE_WGL_EXT_make_current_read GLeeEnabled(&_GLEE_WGL_EXT_make_current_read) #define GLEE_WGL_EXT_pixel_format GLeeEnabled(&_GLEE_WGL_EXT_pixel_format) #define GLEE_WGL_EXT_pbuffer GLeeEnabled(&_GLEE_WGL_EXT_pbuffer) #define GLEE_WGL_EXT_depth_float GLeeEnabled(&_GLEE_WGL_EXT_depth_float) #define GLEE_WGL_3DFX_multisample GLeeEnabled(&_GLEE_WGL_3DFX_multisample) #define GLEE_WGL_EXT_multisample GLeeEnabled(&_GLEE_WGL_EXT_multisample) #define GLEE_WGL_I3D_digital_video_control GLeeEnabled(&_GLEE_WGL_I3D_digital_video_control) #define GLEE_WGL_I3D_gamma GLeeEnabled(&_GLEE_WGL_I3D_gamma) #define GLEE_WGL_I3D_genlock GLeeEnabled(&_GLEE_WGL_I3D_genlock) #define GLEE_WGL_I3D_image_buffer GLeeEnabled(&_GLEE_WGL_I3D_image_buffer) #define GLEE_WGL_I3D_swap_frame_lock GLeeEnabled(&_GLEE_WGL_I3D_swap_frame_lock) #define GLEE_WGL_NV_render_depth_texture GLeeEnabled(&_GLEE_WGL_NV_render_depth_texture) #define GLEE_WGL_NV_render_texture_rectangle GLeeEnabled(&_GLEE_WGL_NV_render_texture_rectangle) #define GLEE_WGL_ATI_pixel_format_float GLeeEnabled(&_GLEE_WGL_ATI_pixel_format_float) #define GLEE_WGL_NV_float_buffer GLeeEnabled(&_GLEE_WGL_NV_float_buffer) #define GLEE_WGL_3DL_stereo_control GLeeEnabled(&_GLEE_WGL_3DL_stereo_control) #define GLEE_WGL_EXT_pixel_format_packed_float GLeeEnabled(&_GLEE_WGL_EXT_pixel_format_packed_float) #define GLEE_WGL_EXT_framebuffer_sRGB GLeeEnabled(&_GLEE_WGL_EXT_framebuffer_sRGB) #define GLEE_WGL_NV_present_video GLeeEnabled(&_GLEE_WGL_NV_present_video) #define GLEE_WGL_NV_swap_group GLeeEnabled(&_GLEE_WGL_NV_swap_group) #define GLEE_WGL_NV_gpu_affinity GLeeEnabled(&_GLEE_WGL_NV_gpu_affinity) #define GLEE_WGL_EXT_display_color_table GLeeEnabled(&_GLEE_WGL_EXT_display_color_table) #define GLEE_WGL_EXT_extensions_string GLeeEnabled(&_GLEE_WGL_EXT_extensions_string) #define GLEE_WGL_EXT_swap_control GLeeEnabled(&_GLEE_WGL_EXT_swap_control) #define GLEE_WGL_NV_vertex_array_range GLeeEnabled(&_GLEE_WGL_NV_vertex_array_range) #define GLEE_WGL_OML_sync_control GLeeEnabled(&_GLEE_WGL_OML_sync_control) #define GLEE_WGL_I3D_swap_frame_usage GLeeEnabled(&_GLEE_WGL_I3D_swap_frame_usage) #define GLEE_WGL_NV_video_output GLeeEnabled(&_GLEE_WGL_NV_video_output) /* WGL_ARB_buffer_region */ #ifndef WGL_ARB_buffer_region #define WGL_ARB_buffer_region 1 #define __GLEE_WGL_ARB_buffer_region 1 /* Constants */ #define WGL_FRONT_COLOR_BUFFER_BIT_ARB 0x00000001 #define WGL_BACK_COLOR_BUFFER_BIT_ARB 0x00000002 #define WGL_DEPTH_BUFFER_BIT_ARB 0x00000004 #define WGL_STENCIL_BUFFER_BIT_ARB 0x00000008 #ifndef GLEE_H_DEFINED_wglCreateBufferRegionARB #define GLEE_H_DEFINED_wglCreateBufferRegionARB typedef HANDLE (APIENTRYP GLEEPFNWGLCREATEBUFFERREGIONARBPROC) (HDC hDC, int iLayerPlane, UINT uType); GLEE_EXTERN GLEEPFNWGLCREATEBUFFERREGIONARBPROC GLeeFuncPtr_wglCreateBufferRegionARB; #define wglCreateBufferRegionARB GLeeFuncPtr_wglCreateBufferRegionARB #endif #ifndef GLEE_H_DEFINED_wglDeleteBufferRegionARB #define GLEE_H_DEFINED_wglDeleteBufferRegionARB typedef VOID (APIENTRYP GLEEPFNWGLDELETEBUFFERREGIONARBPROC) (HANDLE hRegion); GLEE_EXTERN GLEEPFNWGLDELETEBUFFERREGIONARBPROC GLeeFuncPtr_wglDeleteBufferRegionARB; #define wglDeleteBufferRegionARB GLeeFuncPtr_wglDeleteBufferRegionARB #endif #ifndef GLEE_H_DEFINED_wglSaveBufferRegionARB #define GLEE_H_DEFINED_wglSaveBufferRegionARB typedef BOOL (APIENTRYP GLEEPFNWGLSAVEBUFFERREGIONARBPROC) (HANDLE hRegion, int x, int y, int width, int height); GLEE_EXTERN GLEEPFNWGLSAVEBUFFERREGIONARBPROC GLeeFuncPtr_wglSaveBufferRegionARB; #define wglSaveBufferRegionARB GLeeFuncPtr_wglSaveBufferRegionARB #endif #ifndef GLEE_H_DEFINED_wglRestoreBufferRegionARB #define GLEE_H_DEFINED_wglRestoreBufferRegionARB typedef BOOL (APIENTRYP GLEEPFNWGLRESTOREBUFFERREGIONARBPROC) (HANDLE hRegion, int x, int y, int width, int height, int xSrc, int ySrc); GLEE_EXTERN GLEEPFNWGLRESTOREBUFFERREGIONARBPROC GLeeFuncPtr_wglRestoreBufferRegionARB; #define wglRestoreBufferRegionARB GLeeFuncPtr_wglRestoreBufferRegionARB #endif #endif /* WGL_ARB_multisample */ #ifndef WGL_ARB_multisample #define WGL_ARB_multisample 1 #define __GLEE_WGL_ARB_multisample 1 /* Constants */ #define WGL_SAMPLE_BUFFERS_ARB 0x2041 #define WGL_SAMPLES_ARB 0x2042 #endif /* WGL_ARB_extensions_string */ #ifndef WGL_ARB_extensions_string #define WGL_ARB_extensions_string 1 #define __GLEE_WGL_ARB_extensions_string 1 /* Constants */ #ifndef GLEE_H_DEFINED_wglGetExtensionsStringARB #define GLEE_H_DEFINED_wglGetExtensionsStringARB typedef const char * (APIENTRYP GLEEPFNWGLGETEXTENSIONSSTRINGARBPROC) (HDC hdc); GLEE_EXTERN GLEEPFNWGLGETEXTENSIONSSTRINGARBPROC GLeeFuncPtr_wglGetExtensionsStringARB; #define wglGetExtensionsStringARB GLeeFuncPtr_wglGetExtensionsStringARB #endif #endif /* WGL_ARB_pixel_format */ #ifndef WGL_ARB_pixel_format #define WGL_ARB_pixel_format 1 #define __GLEE_WGL_ARB_pixel_format 1 /* Constants */ #define WGL_NUMBER_PIXEL_FORMATS_ARB 0x2000 #define WGL_DRAW_TO_WINDOW_ARB 0x2001 #define WGL_DRAW_TO_BITMAP_ARB 0x2002 #define WGL_ACCELERATION_ARB 0x2003 #define WGL_NEED_PALETTE_ARB 0x2004 #define WGL_NEED_SYSTEM_PALETTE_ARB 0x2005 #define WGL_SWAP_LAYER_BUFFERS_ARB 0x2006 #define WGL_SWAP_METHOD_ARB 0x2007 #define WGL_NUMBER_OVERLAYS_ARB 0x2008 #define WGL_NUMBER_UNDERLAYS_ARB 0x2009 #define WGL_TRANSPARENT_ARB 0x200A #define WGL_TRANSPARENT_RED_VALUE_ARB 0x2037 #define WGL_TRANSPARENT_GREEN_VALUE_ARB 0x2038 #define WGL_TRANSPARENT_BLUE_VALUE_ARB 0x2039 #define WGL_TRANSPARENT_ALPHA_VALUE_ARB 0x203A #define WGL_TRANSPARENT_INDEX_VALUE_ARB 0x203B #define WGL_SHARE_DEPTH_ARB 0x200C #define WGL_SHARE_STENCIL_ARB 0x200D #define WGL_SHARE_ACCUM_ARB 0x200E #define WGL_SUPPORT_GDI_ARB 0x200F #define WGL_SUPPORT_OPENGL_ARB 0x2010 #define WGL_DOUBLE_BUFFER_ARB 0x2011 #define WGL_STEREO_ARB 0x2012 #define WGL_PIXEL_TYPE_ARB 0x2013 #define WGL_COLOR_BITS_ARB 0x2014 #define WGL_RED_BITS_ARB 0x2015 #define WGL_RED_SHIFT_ARB 0x2016 #define WGL_GREEN_BITS_ARB 0x2017 #define WGL_GREEN_SHIFT_ARB 0x2018 #define WGL_BLUE_BITS_ARB 0x2019 #define WGL_BLUE_SHIFT_ARB 0x201A #define WGL_ALPHA_BITS_ARB 0x201B #define WGL_ALPHA_SHIFT_ARB 0x201C #define WGL_ACCUM_BITS_ARB 0x201D #define WGL_ACCUM_RED_BITS_ARB 0x201E #define WGL_ACCUM_GREEN_BITS_ARB 0x201F #define WGL_ACCUM_BLUE_BITS_ARB 0x2020 #define WGL_ACCUM_ALPHA_BITS_ARB 0x2021 #define WGL_DEPTH_BITS_ARB 0x2022 #define WGL_STENCIL_BITS_ARB 0x2023 #define WGL_AUX_BUFFERS_ARB 0x2024 #define WGL_NO_ACCELERATION_ARB 0x2025 #define WGL_GENERIC_ACCELERATION_ARB 0x2026 #define WGL_FULL_ACCELERATION_ARB 0x2027 #define WGL_SWAP_EXCHANGE_ARB 0x2028 #define WGL_SWAP_COPY_ARB 0x2029 #define WGL_SWAP_UNDEFINED_ARB 0x202A #define WGL_TYPE_RGBA_ARB 0x202B #define WGL_TYPE_COLORINDEX_ARB 0x202C #ifndef GLEE_H_DEFINED_wglGetPixelFormatAttribivARB #define GLEE_H_DEFINED_wglGetPixelFormatAttribivARB typedef BOOL (APIENTRYP GLEEPFNWGLGETPIXELFORMATATTRIBIVARBPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int * piAttributes, int * piValues); GLEE_EXTERN GLEEPFNWGLGETPIXELFORMATATTRIBIVARBPROC GLeeFuncPtr_wglGetPixelFormatAttribivARB; #define wglGetPixelFormatAttribivARB GLeeFuncPtr_wglGetPixelFormatAttribivARB #endif #ifndef GLEE_H_DEFINED_wglGetPixelFormatAttribfvARB #define GLEE_H_DEFINED_wglGetPixelFormatAttribfvARB typedef BOOL (APIENTRYP GLEEPFNWGLGETPIXELFORMATATTRIBFVARBPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int * piAttributes, FLOAT * pfValues); GLEE_EXTERN GLEEPFNWGLGETPIXELFORMATATTRIBFVARBPROC GLeeFuncPtr_wglGetPixelFormatAttribfvARB; #define wglGetPixelFormatAttribfvARB GLeeFuncPtr_wglGetPixelFormatAttribfvARB #endif #ifndef GLEE_H_DEFINED_wglChoosePixelFormatARB #define GLEE_H_DEFINED_wglChoosePixelFormatARB typedef BOOL (APIENTRYP GLEEPFNWGLCHOOSEPIXELFORMATARBPROC) (HDC hdc, const int * piAttribIList, const FLOAT * pfAttribFList, UINT nMaxFormats, int * piFormats, UINT * nNumFormats); GLEE_EXTERN GLEEPFNWGLCHOOSEPIXELFORMATARBPROC GLeeFuncPtr_wglChoosePixelFormatARB; #define wglChoosePixelFormatARB GLeeFuncPtr_wglChoosePixelFormatARB #endif #endif /* WGL_ARB_make_current_read */ #ifndef WGL_ARB_make_current_read #define WGL_ARB_make_current_read 1 #define __GLEE_WGL_ARB_make_current_read 1 /* Constants */ #define ERROR_INVALID_PIXEL_TYPE_ARB 0x2043 #define ERROR_INCOMPATIBLE_DEVICE_CONTEXTS_ARB 0x2054 #ifndef GLEE_H_DEFINED_wglMakeContextCurrentARB #define GLEE_H_DEFINED_wglMakeContextCurrentARB typedef BOOL (APIENTRYP GLEEPFNWGLMAKECONTEXTCURRENTARBPROC) (HDC hDrawDC, HDC hReadDC, HGLRC hglrc); GLEE_EXTERN GLEEPFNWGLMAKECONTEXTCURRENTARBPROC GLeeFuncPtr_wglMakeContextCurrentARB; #define wglMakeContextCurrentARB GLeeFuncPtr_wglMakeContextCurrentARB #endif #ifndef GLEE_H_DEFINED_wglGetCurrentReadDCARB #define GLEE_H_DEFINED_wglGetCurrentReadDCARB typedef HDC (APIENTRYP GLEEPFNWGLGETCURRENTREADDCARBPROC) (); GLEE_EXTERN GLEEPFNWGLGETCURRENTREADDCARBPROC GLeeFuncPtr_wglGetCurrentReadDCARB; #define wglGetCurrentReadDCARB GLeeFuncPtr_wglGetCurrentReadDCARB #endif #endif /* WGL_ARB_pbuffer */ #ifndef WGL_ARB_pbuffer #define WGL_ARB_pbuffer 1 #define __GLEE_WGL_ARB_pbuffer 1 /* Constants */ #define WGL_DRAW_TO_PBUFFER_ARB 0x202D #define WGL_MAX_PBUFFER_PIXELS_ARB 0x202E #define WGL_MAX_PBUFFER_WIDTH_ARB 0x202F #define WGL_MAX_PBUFFER_HEIGHT_ARB 0x2030 #define WGL_PBUFFER_LARGEST_ARB 0x2033 #define WGL_PBUFFER_WIDTH_ARB 0x2034 #define WGL_PBUFFER_HEIGHT_ARB 0x2035 #define WGL_PBUFFER_LOST_ARB 0x2036 #ifndef GLEE_H_DEFINED_wglCreatePbufferARB #define GLEE_H_DEFINED_wglCreatePbufferARB typedef HPBUFFERARB (APIENTRYP GLEEPFNWGLCREATEPBUFFERARBPROC) (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int * piAttribList); GLEE_EXTERN GLEEPFNWGLCREATEPBUFFERARBPROC GLeeFuncPtr_wglCreatePbufferARB; #define wglCreatePbufferARB GLeeFuncPtr_wglCreatePbufferARB #endif #ifndef GLEE_H_DEFINED_wglGetPbufferDCARB #define GLEE_H_DEFINED_wglGetPbufferDCARB typedef HDC (APIENTRYP GLEEPFNWGLGETPBUFFERDCARBPROC) (HPBUFFERARB hPbuffer); GLEE_EXTERN GLEEPFNWGLGETPBUFFERDCARBPROC GLeeFuncPtr_wglGetPbufferDCARB; #define wglGetPbufferDCARB GLeeFuncPtr_wglGetPbufferDCARB #endif #ifndef GLEE_H_DEFINED_wglReleasePbufferDCARB #define GLEE_H_DEFINED_wglReleasePbufferDCARB typedef int (APIENTRYP GLEEPFNWGLRELEASEPBUFFERDCARBPROC) (HPBUFFERARB hPbuffer, HDC hDC); GLEE_EXTERN GLEEPFNWGLRELEASEPBUFFERDCARBPROC GLeeFuncPtr_wglReleasePbufferDCARB; #define wglReleasePbufferDCARB GLeeFuncPtr_wglReleasePbufferDCARB #endif #ifndef GLEE_H_DEFINED_wglDestroyPbufferARB #define GLEE_H_DEFINED_wglDestroyPbufferARB typedef BOOL (APIENTRYP GLEEPFNWGLDESTROYPBUFFERARBPROC) (HPBUFFERARB hPbuffer); GLEE_EXTERN GLEEPFNWGLDESTROYPBUFFERARBPROC GLeeFuncPtr_wglDestroyPbufferARB; #define wglDestroyPbufferARB GLeeFuncPtr_wglDestroyPbufferARB #endif #ifndef GLEE_H_DEFINED_wglQueryPbufferARB #define GLEE_H_DEFINED_wglQueryPbufferARB typedef BOOL (APIENTRYP GLEEPFNWGLQUERYPBUFFERARBPROC) (HPBUFFERARB hPbuffer, int iAttribute, int * piValue); GLEE_EXTERN GLEEPFNWGLQUERYPBUFFERARBPROC GLeeFuncPtr_wglQueryPbufferARB; #define wglQueryPbufferARB GLeeFuncPtr_wglQueryPbufferARB #endif #endif /* WGL_ARB_render_texture */ #ifndef WGL_ARB_render_texture #define WGL_ARB_render_texture 1 #define __GLEE_WGL_ARB_render_texture 1 /* Constants */ #define WGL_BIND_TO_TEXTURE_RGB_ARB 0x2070 #define WGL_BIND_TO_TEXTURE_RGBA_ARB 0x2071 #define WGL_TEXTURE_FORMAT_ARB 0x2072 #define WGL_TEXTURE_TARGET_ARB 0x2073 #define WGL_MIPMAP_TEXTURE_ARB 0x2074 #define WGL_TEXTURE_RGB_ARB 0x2075 #define WGL_TEXTURE_RGBA_ARB 0x2076 #define WGL_NO_TEXTURE_ARB 0x2077 #define WGL_TEXTURE_CUBE_MAP_ARB 0x2078 #define WGL_TEXTURE_1D_ARB 0x2079 #define WGL_TEXTURE_2D_ARB 0x207A #define WGL_MIPMAP_LEVEL_ARB 0x207B #define WGL_CUBE_MAP_FACE_ARB 0x207C #define WGL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x207D #define WGL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x207E #define WGL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x207F #define WGL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x2080 #define WGL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x2081 #define WGL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x2082 #define WGL_FRONT_LEFT_ARB 0x2083 #define WGL_FRONT_RIGHT_ARB 0x2084 #define WGL_BACK_LEFT_ARB 0x2085 #define WGL_BACK_RIGHT_ARB 0x2086 #define WGL_AUX0_ARB 0x2087 #define WGL_AUX1_ARB 0x2088 #define WGL_AUX2_ARB 0x2089 #define WGL_AUX3_ARB 0x208A #define WGL_AUX4_ARB 0x208B #define WGL_AUX5_ARB 0x208C #define WGL_AUX6_ARB 0x208D #define WGL_AUX7_ARB 0x208E #define WGL_AUX8_ARB 0x208F #define WGL_AUX9_ARB 0x2090 #ifndef GLEE_H_DEFINED_wglBindTexImageARB #define GLEE_H_DEFINED_wglBindTexImageARB typedef BOOL (APIENTRYP GLEEPFNWGLBINDTEXIMAGEARBPROC) (HPBUFFERARB hPbuffer, int iBuffer); GLEE_EXTERN GLEEPFNWGLBINDTEXIMAGEARBPROC GLeeFuncPtr_wglBindTexImageARB; #define wglBindTexImageARB GLeeFuncPtr_wglBindTexImageARB #endif #ifndef GLEE_H_DEFINED_wglReleaseTexImageARB #define GLEE_H_DEFINED_wglReleaseTexImageARB typedef BOOL (APIENTRYP GLEEPFNWGLRELEASETEXIMAGEARBPROC) (HPBUFFERARB hPbuffer, int iBuffer); GLEE_EXTERN GLEEPFNWGLRELEASETEXIMAGEARBPROC GLeeFuncPtr_wglReleaseTexImageARB; #define wglReleaseTexImageARB GLeeFuncPtr_wglReleaseTexImageARB #endif #ifndef GLEE_H_DEFINED_wglSetPbufferAttribARB #define GLEE_H_DEFINED_wglSetPbufferAttribARB typedef BOOL (APIENTRYP GLEEPFNWGLSETPBUFFERATTRIBARBPROC) (HPBUFFERARB hPbuffer, const int * piAttribList); GLEE_EXTERN GLEEPFNWGLSETPBUFFERATTRIBARBPROC GLeeFuncPtr_wglSetPbufferAttribARB; #define wglSetPbufferAttribARB GLeeFuncPtr_wglSetPbufferAttribARB #endif #endif /* WGL_ARB_pixel_format_float */ #ifndef WGL_ARB_pixel_format_float #define WGL_ARB_pixel_format_float 1 #define __GLEE_WGL_ARB_pixel_format_float 1 /* Constants */ #define WGL_TYPE_RGBA_FLOAT_ARB 0x21A0 #endif /* WGL_ARB_create_context */ #ifndef WGL_ARB_create_context #define WGL_ARB_create_context 1 #define __GLEE_WGL_ARB_create_context 1 /* Constants */ #define WGL_CONTEXT_DEBUG_BIT_ARB 0x0001 #define WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x0002 #define WGL_CONTEXT_MAJOR_VERSION_ARB 0x2091 #define WGL_CONTEXT_MINOR_VERSION_ARB 0x2092 #define WGL_CONTEXT_LAYER_PLANE_ARB 0x2093 #define WGL_CONTEXT_FLAGS_ARB 0x2094 #define ERROR_INVALID_VERSION_ARB 0x2095 #ifndef GLEE_H_DEFINED_wglCreateContextAttribsARB #define GLEE_H_DEFINED_wglCreateContextAttribsARB typedef HGLRC (APIENTRYP GLEEPFNWGLCREATECONTEXTATTRIBSARBPROC) (HDC hDC, HGLRC hShareContext, const int * attribList); GLEE_EXTERN GLEEPFNWGLCREATECONTEXTATTRIBSARBPROC GLeeFuncPtr_wglCreateContextAttribsARB; #define wglCreateContextAttribsARB GLeeFuncPtr_wglCreateContextAttribsARB #endif #endif /* WGL_EXT_make_current_read */ #ifndef WGL_EXT_make_current_read #define WGL_EXT_make_current_read 1 #define __GLEE_WGL_EXT_make_current_read 1 /* Constants */ #define ERROR_INVALID_PIXEL_TYPE_EXT 0x2043 #ifndef GLEE_H_DEFINED_wglMakeContextCurrentEXT #define GLEE_H_DEFINED_wglMakeContextCurrentEXT typedef BOOL (APIENTRYP GLEEPFNWGLMAKECONTEXTCURRENTEXTPROC) (HDC hDrawDC, HDC hReadDC, HGLRC hglrc); GLEE_EXTERN GLEEPFNWGLMAKECONTEXTCURRENTEXTPROC GLeeFuncPtr_wglMakeContextCurrentEXT; #define wglMakeContextCurrentEXT GLeeFuncPtr_wglMakeContextCurrentEXT #endif #ifndef GLEE_H_DEFINED_wglGetCurrentReadDCEXT #define GLEE_H_DEFINED_wglGetCurrentReadDCEXT typedef HDC (APIENTRYP GLEEPFNWGLGETCURRENTREADDCEXTPROC) (); GLEE_EXTERN GLEEPFNWGLGETCURRENTREADDCEXTPROC GLeeFuncPtr_wglGetCurrentReadDCEXT; #define wglGetCurrentReadDCEXT GLeeFuncPtr_wglGetCurrentReadDCEXT #endif #endif /* WGL_EXT_pixel_format */ #ifndef WGL_EXT_pixel_format #define WGL_EXT_pixel_format 1 #define __GLEE_WGL_EXT_pixel_format 1 /* Constants */ #define WGL_NUMBER_PIXEL_FORMATS_EXT 0x2000 #define WGL_DRAW_TO_WINDOW_EXT 0x2001 #define WGL_DRAW_TO_BITMAP_EXT 0x2002 #define WGL_ACCELERATION_EXT 0x2003 #define WGL_NEED_PALETTE_EXT 0x2004 #define WGL_NEED_SYSTEM_PALETTE_EXT 0x2005 #define WGL_SWAP_LAYER_BUFFERS_EXT 0x2006 #define WGL_SWAP_METHOD_EXT 0x2007 #define WGL_NUMBER_OVERLAYS_EXT 0x2008 #define WGL_NUMBER_UNDERLAYS_EXT 0x2009 #define WGL_TRANSPARENT_EXT 0x200A #define WGL_TRANSPARENT_VALUE_EXT 0x200B #define WGL_SHARE_DEPTH_EXT 0x200C #define WGL_SHARE_STENCIL_EXT 0x200D #define WGL_SHARE_ACCUM_EXT 0x200E #define WGL_SUPPORT_GDI_EXT 0x200F #define WGL_SUPPORT_OPENGL_EXT 0x2010 #define WGL_DOUBLE_BUFFER_EXT 0x2011 #define WGL_STEREO_EXT 0x2012 #define WGL_PIXEL_TYPE_EXT 0x2013 #define WGL_COLOR_BITS_EXT 0x2014 #define WGL_RED_BITS_EXT 0x2015 #define WGL_RED_SHIFT_EXT 0x2016 #define WGL_GREEN_BITS_EXT 0x2017 #define WGL_GREEN_SHIFT_EXT 0x2018 #define WGL_BLUE_BITS_EXT 0x2019 #define WGL_BLUE_SHIFT_EXT 0x201A #define WGL_ALPHA_BITS_EXT 0x201B #define WGL_ALPHA_SHIFT_EXT 0x201C #define WGL_ACCUM_BITS_EXT 0x201D #define WGL_ACCUM_RED_BITS_EXT 0x201E #define WGL_ACCUM_GREEN_BITS_EXT 0x201F #define WGL_ACCUM_BLUE_BITS_EXT 0x2020 #define WGL_ACCUM_ALPHA_BITS_EXT 0x2021 #define WGL_DEPTH_BITS_EXT 0x2022 #define WGL_STENCIL_BITS_EXT 0x2023 #define WGL_AUX_BUFFERS_EXT 0x2024 #define WGL_NO_ACCELERATION_EXT 0x2025 #define WGL_GENERIC_ACCELERATION_EXT 0x2026 #define WGL_FULL_ACCELERATION_EXT 0x2027 #define WGL_SWAP_EXCHANGE_EXT 0x2028 #define WGL_SWAP_COPY_EXT 0x2029 #define WGL_SWAP_UNDEFINED_EXT 0x202A #define WGL_TYPE_RGBA_EXT 0x202B #define WGL_TYPE_COLORINDEX_EXT 0x202C #ifndef GLEE_H_DEFINED_wglGetPixelFormatAttribivEXT #define GLEE_H_DEFINED_wglGetPixelFormatAttribivEXT typedef BOOL (APIENTRYP GLEEPFNWGLGETPIXELFORMATATTRIBIVEXTPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int * piAttributes, int * piValues); GLEE_EXTERN GLEEPFNWGLGETPIXELFORMATATTRIBIVEXTPROC GLeeFuncPtr_wglGetPixelFormatAttribivEXT; #define wglGetPixelFormatAttribivEXT GLeeFuncPtr_wglGetPixelFormatAttribivEXT #endif #ifndef GLEE_H_DEFINED_wglGetPixelFormatAttribfvEXT #define GLEE_H_DEFINED_wglGetPixelFormatAttribfvEXT typedef BOOL (APIENTRYP GLEEPFNWGLGETPIXELFORMATATTRIBFVEXTPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int * piAttributes, FLOAT * pfValues); GLEE_EXTERN GLEEPFNWGLGETPIXELFORMATATTRIBFVEXTPROC GLeeFuncPtr_wglGetPixelFormatAttribfvEXT; #define wglGetPixelFormatAttribfvEXT GLeeFuncPtr_wglGetPixelFormatAttribfvEXT #endif #ifndef GLEE_H_DEFINED_wglChoosePixelFormatEXT #define GLEE_H_DEFINED_wglChoosePixelFormatEXT typedef BOOL (APIENTRYP GLEEPFNWGLCHOOSEPIXELFORMATEXTPROC) (HDC hdc, const int * piAttribIList, const FLOAT * pfAttribFList, UINT nMaxFormats, int * piFormats, UINT * nNumFormats); GLEE_EXTERN GLEEPFNWGLCHOOSEPIXELFORMATEXTPROC GLeeFuncPtr_wglChoosePixelFormatEXT; #define wglChoosePixelFormatEXT GLeeFuncPtr_wglChoosePixelFormatEXT #endif #endif /* WGL_EXT_pbuffer */ #ifndef WGL_EXT_pbuffer #define WGL_EXT_pbuffer 1 #define __GLEE_WGL_EXT_pbuffer 1 /* Constants */ #define WGL_DRAW_TO_PBUFFER_EXT 0x202D #define WGL_MAX_PBUFFER_PIXELS_EXT 0x202E #define WGL_MAX_PBUFFER_WIDTH_EXT 0x202F #define WGL_MAX_PBUFFER_HEIGHT_EXT 0x2030 #define WGL_OPTIMAL_PBUFFER_WIDTH_EXT 0x2031 #define WGL_OPTIMAL_PBUFFER_HEIGHT_EXT 0x2032 #define WGL_PBUFFER_LARGEST_EXT 0x2033 #define WGL_PBUFFER_WIDTH_EXT 0x2034 #define WGL_PBUFFER_HEIGHT_EXT 0x2035 #ifndef GLEE_H_DEFINED_wglCreatePbufferEXT #define GLEE_H_DEFINED_wglCreatePbufferEXT typedef HPBUFFEREXT (APIENTRYP GLEEPFNWGLCREATEPBUFFEREXTPROC) (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int * piAttribList); GLEE_EXTERN GLEEPFNWGLCREATEPBUFFEREXTPROC GLeeFuncPtr_wglCreatePbufferEXT; #define wglCreatePbufferEXT GLeeFuncPtr_wglCreatePbufferEXT #endif #ifndef GLEE_H_DEFINED_wglGetPbufferDCEXT #define GLEE_H_DEFINED_wglGetPbufferDCEXT typedef HDC (APIENTRYP GLEEPFNWGLGETPBUFFERDCEXTPROC) (HPBUFFEREXT hPbuffer); GLEE_EXTERN GLEEPFNWGLGETPBUFFERDCEXTPROC GLeeFuncPtr_wglGetPbufferDCEXT; #define wglGetPbufferDCEXT GLeeFuncPtr_wglGetPbufferDCEXT #endif #ifndef GLEE_H_DEFINED_wglReleasePbufferDCEXT #define GLEE_H_DEFINED_wglReleasePbufferDCEXT typedef int (APIENTRYP GLEEPFNWGLRELEASEPBUFFERDCEXTPROC) (HPBUFFEREXT hPbuffer, HDC hDC); GLEE_EXTERN GLEEPFNWGLRELEASEPBUFFERDCEXTPROC GLeeFuncPtr_wglReleasePbufferDCEXT; #define wglReleasePbufferDCEXT GLeeFuncPtr_wglReleasePbufferDCEXT #endif #ifndef GLEE_H_DEFINED_wglDestroyPbufferEXT #define GLEE_H_DEFINED_wglDestroyPbufferEXT typedef BOOL (APIENTRYP GLEEPFNWGLDESTROYPBUFFEREXTPROC) (HPBUFFEREXT hPbuffer); GLEE_EXTERN GLEEPFNWGLDESTROYPBUFFEREXTPROC GLeeFuncPtr_wglDestroyPbufferEXT; #define wglDestroyPbufferEXT GLeeFuncPtr_wglDestroyPbufferEXT #endif #ifndef GLEE_H_DEFINED_wglQueryPbufferEXT #define GLEE_H_DEFINED_wglQueryPbufferEXT typedef BOOL (APIENTRYP GLEEPFNWGLQUERYPBUFFEREXTPROC) (HPBUFFEREXT hPbuffer, int iAttribute, int * piValue); GLEE_EXTERN GLEEPFNWGLQUERYPBUFFEREXTPROC GLeeFuncPtr_wglQueryPbufferEXT; #define wglQueryPbufferEXT GLeeFuncPtr_wglQueryPbufferEXT #endif #endif /* WGL_EXT_depth_float */ #ifndef WGL_EXT_depth_float #define WGL_EXT_depth_float 1 #define __GLEE_WGL_EXT_depth_float 1 /* Constants */ #define WGL_DEPTH_FLOAT_EXT 0x2040 #endif /* WGL_3DFX_multisample */ #ifndef WGL_3DFX_multisample #define WGL_3DFX_multisample 1 #define __GLEE_WGL_3DFX_multisample 1 /* Constants */ #define WGL_SAMPLE_BUFFERS_3DFX 0x2060 #define WGL_SAMPLES_3DFX 0x2061 #endif /* WGL_EXT_multisample */ #ifndef WGL_EXT_multisample #define WGL_EXT_multisample 1 #define __GLEE_WGL_EXT_multisample 1 /* Constants */ #define WGL_SAMPLE_BUFFERS_EXT 0x2041 #define WGL_SAMPLES_EXT 0x2042 #endif /* WGL_I3D_digital_video_control */ #ifndef WGL_I3D_digital_video_control #define WGL_I3D_digital_video_control 1 #define __GLEE_WGL_I3D_digital_video_control 1 /* Constants */ #define WGL_DIGITAL_VIDEO_CURSOR_ALPHA_FRAMEBUFFER_I3D 0x2050 #define WGL_DIGITAL_VIDEO_CURSOR_ALPHA_VALUE_I3D 0x2051 #define WGL_DIGITAL_VIDEO_CURSOR_INCLUDED_I3D 0x2052 #define WGL_DIGITAL_VIDEO_GAMMA_CORRECTED_I3D 0x2053 #ifndef GLEE_H_DEFINED_wglGetDigitalVideoParametersI3D #define GLEE_H_DEFINED_wglGetDigitalVideoParametersI3D typedef BOOL (APIENTRYP GLEEPFNWGLGETDIGITALVIDEOPARAMETERSI3DPROC) (HDC hDC, int iAttribute, int * piValue); GLEE_EXTERN GLEEPFNWGLGETDIGITALVIDEOPARAMETERSI3DPROC GLeeFuncPtr_wglGetDigitalVideoParametersI3D; #define wglGetDigitalVideoParametersI3D GLeeFuncPtr_wglGetDigitalVideoParametersI3D #endif #ifndef GLEE_H_DEFINED_wglSetDigitalVideoParametersI3D #define GLEE_H_DEFINED_wglSetDigitalVideoParametersI3D typedef BOOL (APIENTRYP GLEEPFNWGLSETDIGITALVIDEOPARAMETERSI3DPROC) (HDC hDC, int iAttribute, const int * piValue); GLEE_EXTERN GLEEPFNWGLSETDIGITALVIDEOPARAMETERSI3DPROC GLeeFuncPtr_wglSetDigitalVideoParametersI3D; #define wglSetDigitalVideoParametersI3D GLeeFuncPtr_wglSetDigitalVideoParametersI3D #endif #endif /* WGL_I3D_gamma */ #ifndef WGL_I3D_gamma #define WGL_I3D_gamma 1 #define __GLEE_WGL_I3D_gamma 1 /* Constants */ #define WGL_GAMMA_TABLE_SIZE_I3D 0x204E #define WGL_GAMMA_EXCLUDE_DESKTOP_I3D 0x204F #ifndef GLEE_H_DEFINED_wglGetGammaTableParametersI3D #define GLEE_H_DEFINED_wglGetGammaTableParametersI3D typedef BOOL (APIENTRYP GLEEPFNWGLGETGAMMATABLEPARAMETERSI3DPROC) (HDC hDC, int iAttribute, int * piValue); GLEE_EXTERN GLEEPFNWGLGETGAMMATABLEPARAMETERSI3DPROC GLeeFuncPtr_wglGetGammaTableParametersI3D; #define wglGetGammaTableParametersI3D GLeeFuncPtr_wglGetGammaTableParametersI3D #endif #ifndef GLEE_H_DEFINED_wglSetGammaTableParametersI3D #define GLEE_H_DEFINED_wglSetGammaTableParametersI3D typedef BOOL (APIENTRYP GLEEPFNWGLSETGAMMATABLEPARAMETERSI3DPROC) (HDC hDC, int iAttribute, const int * piValue); GLEE_EXTERN GLEEPFNWGLSETGAMMATABLEPARAMETERSI3DPROC GLeeFuncPtr_wglSetGammaTableParametersI3D; #define wglSetGammaTableParametersI3D GLeeFuncPtr_wglSetGammaTableParametersI3D #endif #ifndef GLEE_H_DEFINED_wglGetGammaTableI3D #define GLEE_H_DEFINED_wglGetGammaTableI3D typedef BOOL (APIENTRYP GLEEPFNWGLGETGAMMATABLEI3DPROC) (HDC hDC, int iEntries, USHORT * puRed, USHORT * puGreen, USHORT * puBlue); GLEE_EXTERN GLEEPFNWGLGETGAMMATABLEI3DPROC GLeeFuncPtr_wglGetGammaTableI3D; #define wglGetGammaTableI3D GLeeFuncPtr_wglGetGammaTableI3D #endif #ifndef GLEE_H_DEFINED_wglSetGammaTableI3D #define GLEE_H_DEFINED_wglSetGammaTableI3D typedef BOOL (APIENTRYP GLEEPFNWGLSETGAMMATABLEI3DPROC) (HDC hDC, int iEntries, const USHORT * puRed, const USHORT * puGreen, const USHORT * puBlue); GLEE_EXTERN GLEEPFNWGLSETGAMMATABLEI3DPROC GLeeFuncPtr_wglSetGammaTableI3D; #define wglSetGammaTableI3D GLeeFuncPtr_wglSetGammaTableI3D #endif #endif /* WGL_I3D_genlock */ #ifndef WGL_I3D_genlock #define WGL_I3D_genlock 1 #define __GLEE_WGL_I3D_genlock 1 /* Constants */ #define WGL_GENLOCK_SOURCE_MULTIVIEW_I3D 0x2044 #define WGL_GENLOCK_SOURCE_EXTENAL_SYNC_I3D 0x2045 #define WGL_GENLOCK_SOURCE_EXTENAL_FIELD_I3D 0x2046 #define WGL_GENLOCK_SOURCE_EXTENAL_TTL_I3D 0x2047 #define WGL_GENLOCK_SOURCE_DIGITAL_SYNC_I3D 0x2048 #define WGL_GENLOCK_SOURCE_DIGITAL_FIELD_I3D 0x2049 #define WGL_GENLOCK_SOURCE_EDGE_FALLING_I3D 0x204A #define WGL_GENLOCK_SOURCE_EDGE_RISING_I3D 0x204B #define WGL_GENLOCK_SOURCE_EDGE_BOTH_I3D 0x204C #ifndef GLEE_H_DEFINED_wglEnableGenlockI3D #define GLEE_H_DEFINED_wglEnableGenlockI3D typedef BOOL (APIENTRYP GLEEPFNWGLENABLEGENLOCKI3DPROC) (HDC hDC); GLEE_EXTERN GLEEPFNWGLENABLEGENLOCKI3DPROC GLeeFuncPtr_wglEnableGenlockI3D; #define wglEnableGenlockI3D GLeeFuncPtr_wglEnableGenlockI3D #endif #ifndef GLEE_H_DEFINED_wglDisableGenlockI3D #define GLEE_H_DEFINED_wglDisableGenlockI3D typedef BOOL (APIENTRYP GLEEPFNWGLDISABLEGENLOCKI3DPROC) (HDC hDC); GLEE_EXTERN GLEEPFNWGLDISABLEGENLOCKI3DPROC GLeeFuncPtr_wglDisableGenlockI3D; #define wglDisableGenlockI3D GLeeFuncPtr_wglDisableGenlockI3D #endif #ifndef GLEE_H_DEFINED_wglIsEnabledGenlockI3D #define GLEE_H_DEFINED_wglIsEnabledGenlockI3D typedef BOOL (APIENTRYP GLEEPFNWGLISENABLEDGENLOCKI3DPROC) (HDC hDC, BOOL * pFlag); GLEE_EXTERN GLEEPFNWGLISENABLEDGENLOCKI3DPROC GLeeFuncPtr_wglIsEnabledGenlockI3D; #define wglIsEnabledGenlockI3D GLeeFuncPtr_wglIsEnabledGenlockI3D #endif #ifndef GLEE_H_DEFINED_wglGenlockSourceI3D #define GLEE_H_DEFINED_wglGenlockSourceI3D typedef BOOL (APIENTRYP GLEEPFNWGLGENLOCKSOURCEI3DPROC) (HDC hDC, UINT uSource); GLEE_EXTERN GLEEPFNWGLGENLOCKSOURCEI3DPROC GLeeFuncPtr_wglGenlockSourceI3D; #define wglGenlockSourceI3D GLeeFuncPtr_wglGenlockSourceI3D #endif #ifndef GLEE_H_DEFINED_wglGetGenlockSourceI3D #define GLEE_H_DEFINED_wglGetGenlockSourceI3D typedef BOOL (APIENTRYP GLEEPFNWGLGETGENLOCKSOURCEI3DPROC) (HDC hDC, UINT * uSource); GLEE_EXTERN GLEEPFNWGLGETGENLOCKSOURCEI3DPROC GLeeFuncPtr_wglGetGenlockSourceI3D; #define wglGetGenlockSourceI3D GLeeFuncPtr_wglGetGenlockSourceI3D #endif #ifndef GLEE_H_DEFINED_wglGenlockSourceEdgeI3D #define GLEE_H_DEFINED_wglGenlockSourceEdgeI3D typedef BOOL (APIENTRYP GLEEPFNWGLGENLOCKSOURCEEDGEI3DPROC) (HDC hDC, UINT uEdge); GLEE_EXTERN GLEEPFNWGLGENLOCKSOURCEEDGEI3DPROC GLeeFuncPtr_wglGenlockSourceEdgeI3D; #define wglGenlockSourceEdgeI3D GLeeFuncPtr_wglGenlockSourceEdgeI3D #endif #ifndef GLEE_H_DEFINED_wglGetGenlockSourceEdgeI3D #define GLEE_H_DEFINED_wglGetGenlockSourceEdgeI3D typedef BOOL (APIENTRYP GLEEPFNWGLGETGENLOCKSOURCEEDGEI3DPROC) (HDC hDC, UINT * uEdge); GLEE_EXTERN GLEEPFNWGLGETGENLOCKSOURCEEDGEI3DPROC GLeeFuncPtr_wglGetGenlockSourceEdgeI3D; #define wglGetGenlockSourceEdgeI3D GLeeFuncPtr_wglGetGenlockSourceEdgeI3D #endif #ifndef GLEE_H_DEFINED_wglGenlockSampleRateI3D #define GLEE_H_DEFINED_wglGenlockSampleRateI3D typedef BOOL (APIENTRYP GLEEPFNWGLGENLOCKSAMPLERATEI3DPROC) (HDC hDC, UINT uRate); GLEE_EXTERN GLEEPFNWGLGENLOCKSAMPLERATEI3DPROC GLeeFuncPtr_wglGenlockSampleRateI3D; #define wglGenlockSampleRateI3D GLeeFuncPtr_wglGenlockSampleRateI3D #endif #ifndef GLEE_H_DEFINED_wglGetGenlockSampleRateI3D #define GLEE_H_DEFINED_wglGetGenlockSampleRateI3D typedef BOOL (APIENTRYP GLEEPFNWGLGETGENLOCKSAMPLERATEI3DPROC) (HDC hDC, UINT * uRate); GLEE_EXTERN GLEEPFNWGLGETGENLOCKSAMPLERATEI3DPROC GLeeFuncPtr_wglGetGenlockSampleRateI3D; #define wglGetGenlockSampleRateI3D GLeeFuncPtr_wglGetGenlockSampleRateI3D #endif #ifndef GLEE_H_DEFINED_wglGenlockSourceDelayI3D #define GLEE_H_DEFINED_wglGenlockSourceDelayI3D typedef BOOL (APIENTRYP GLEEPFNWGLGENLOCKSOURCEDELAYI3DPROC) (HDC hDC, UINT uDelay); GLEE_EXTERN GLEEPFNWGLGENLOCKSOURCEDELAYI3DPROC GLeeFuncPtr_wglGenlockSourceDelayI3D; #define wglGenlockSourceDelayI3D GLeeFuncPtr_wglGenlockSourceDelayI3D #endif #ifndef GLEE_H_DEFINED_wglGetGenlockSourceDelayI3D #define GLEE_H_DEFINED_wglGetGenlockSourceDelayI3D typedef BOOL (APIENTRYP GLEEPFNWGLGETGENLOCKSOURCEDELAYI3DPROC) (HDC hDC, UINT * uDelay); GLEE_EXTERN GLEEPFNWGLGETGENLOCKSOURCEDELAYI3DPROC GLeeFuncPtr_wglGetGenlockSourceDelayI3D; #define wglGetGenlockSourceDelayI3D GLeeFuncPtr_wglGetGenlockSourceDelayI3D #endif #ifndef GLEE_H_DEFINED_wglQueryGenlockMaxSourceDelayI3D #define GLEE_H_DEFINED_wglQueryGenlockMaxSourceDelayI3D typedef BOOL (APIENTRYP GLEEPFNWGLQUERYGENLOCKMAXSOURCEDELAYI3DPROC) (HDC hDC, UINT * uMaxLineDelay, UINT * uMaxPixelDelay); GLEE_EXTERN GLEEPFNWGLQUERYGENLOCKMAXSOURCEDELAYI3DPROC GLeeFuncPtr_wglQueryGenlockMaxSourceDelayI3D; #define wglQueryGenlockMaxSourceDelayI3D GLeeFuncPtr_wglQueryGenlockMaxSourceDelayI3D #endif #endif /* WGL_I3D_image_buffer */ #ifndef WGL_I3D_image_buffer #define WGL_I3D_image_buffer 1 #define __GLEE_WGL_I3D_image_buffer 1 /* Constants */ #define WGL_IMAGE_BUFFER_MIN_ACCESS_I3D 0x00000001 #define WGL_IMAGE_BUFFER_LOCK_I3D 0x00000002 #ifndef GLEE_H_DEFINED_wglCreateImageBufferI3D #define GLEE_H_DEFINED_wglCreateImageBufferI3D typedef LPVOID (APIENTRYP GLEEPFNWGLCREATEIMAGEBUFFERI3DPROC) (HDC hDC, DWORD dwSize, UINT uFlags); GLEE_EXTERN GLEEPFNWGLCREATEIMAGEBUFFERI3DPROC GLeeFuncPtr_wglCreateImageBufferI3D; #define wglCreateImageBufferI3D GLeeFuncPtr_wglCreateImageBufferI3D #endif #ifndef GLEE_H_DEFINED_wglDestroyImageBufferI3D #define GLEE_H_DEFINED_wglDestroyImageBufferI3D typedef BOOL (APIENTRYP GLEEPFNWGLDESTROYIMAGEBUFFERI3DPROC) (HDC hDC, LPVOID pAddress); GLEE_EXTERN GLEEPFNWGLDESTROYIMAGEBUFFERI3DPROC GLeeFuncPtr_wglDestroyImageBufferI3D; #define wglDestroyImageBufferI3D GLeeFuncPtr_wglDestroyImageBufferI3D #endif #ifndef GLEE_H_DEFINED_wglAssociateImageBufferEventsI3D #define GLEE_H_DEFINED_wglAssociateImageBufferEventsI3D typedef BOOL (APIENTRYP GLEEPFNWGLASSOCIATEIMAGEBUFFEREVENTSI3DPROC) (HDC hDC, const HANDLE * pEvent, const LPVOID * pAddress, const DWORD * pSize, UINT count); GLEE_EXTERN GLEEPFNWGLASSOCIATEIMAGEBUFFEREVENTSI3DPROC GLeeFuncPtr_wglAssociateImageBufferEventsI3D; #define wglAssociateImageBufferEventsI3D GLeeFuncPtr_wglAssociateImageBufferEventsI3D #endif #ifndef GLEE_H_DEFINED_wglReleaseImageBufferEventsI3D #define GLEE_H_DEFINED_wglReleaseImageBufferEventsI3D typedef BOOL (APIENTRYP GLEEPFNWGLRELEASEIMAGEBUFFEREVENTSI3DPROC) (HDC hDC, const LPVOID * pAddress, UINT count); GLEE_EXTERN GLEEPFNWGLRELEASEIMAGEBUFFEREVENTSI3DPROC GLeeFuncPtr_wglReleaseImageBufferEventsI3D; #define wglReleaseImageBufferEventsI3D GLeeFuncPtr_wglReleaseImageBufferEventsI3D #endif #endif /* WGL_I3D_swap_frame_lock */ #ifndef WGL_I3D_swap_frame_lock #define WGL_I3D_swap_frame_lock 1 #define __GLEE_WGL_I3D_swap_frame_lock 1 /* Constants */ #ifndef GLEE_H_DEFINED_wglEnableFrameLockI3D #define GLEE_H_DEFINED_wglEnableFrameLockI3D typedef BOOL (APIENTRYP GLEEPFNWGLENABLEFRAMELOCKI3DPROC) (); GLEE_EXTERN GLEEPFNWGLENABLEFRAMELOCKI3DPROC GLeeFuncPtr_wglEnableFrameLockI3D; #define wglEnableFrameLockI3D GLeeFuncPtr_wglEnableFrameLockI3D #endif #ifndef GLEE_H_DEFINED_wglDisableFrameLockI3D #define GLEE_H_DEFINED_wglDisableFrameLockI3D typedef BOOL (APIENTRYP GLEEPFNWGLDISABLEFRAMELOCKI3DPROC) (); GLEE_EXTERN GLEEPFNWGLDISABLEFRAMELOCKI3DPROC GLeeFuncPtr_wglDisableFrameLockI3D; #define wglDisableFrameLockI3D GLeeFuncPtr_wglDisableFrameLockI3D #endif #ifndef GLEE_H_DEFINED_wglIsEnabledFrameLockI3D #define GLEE_H_DEFINED_wglIsEnabledFrameLockI3D typedef BOOL (APIENTRYP GLEEPFNWGLISENABLEDFRAMELOCKI3DPROC) (BOOL * pFlag); GLEE_EXTERN GLEEPFNWGLISENABLEDFRAMELOCKI3DPROC GLeeFuncPtr_wglIsEnabledFrameLockI3D; #define wglIsEnabledFrameLockI3D GLeeFuncPtr_wglIsEnabledFrameLockI3D #endif #ifndef GLEE_H_DEFINED_wglQueryFrameLockMasterI3D #define GLEE_H_DEFINED_wglQueryFrameLockMasterI3D typedef BOOL (APIENTRYP GLEEPFNWGLQUERYFRAMELOCKMASTERI3DPROC) (BOOL * pFlag); GLEE_EXTERN GLEEPFNWGLQUERYFRAMELOCKMASTERI3DPROC GLeeFuncPtr_wglQueryFrameLockMasterI3D; #define wglQueryFrameLockMasterI3D GLeeFuncPtr_wglQueryFrameLockMasterI3D #endif #endif /* WGL_NV_render_depth_texture */ #ifndef WGL_NV_render_depth_texture #define WGL_NV_render_depth_texture 1 #define __GLEE_WGL_NV_render_depth_texture 1 /* Constants */ #define WGL_BIND_TO_TEXTURE_DEPTH_NV 0x20A3 #define WGL_BIND_TO_TEXTURE_RECTANGLE_DEPTH_NV 0x20A4 #define WGL_DEPTH_TEXTURE_FORMAT_NV 0x20A5 #define WGL_TEXTURE_DEPTH_COMPONENT_NV 0x20A6 #define WGL_DEPTH_COMPONENT_NV 0x20A7 #endif /* WGL_NV_render_texture_rectangle */ #ifndef WGL_NV_render_texture_rectangle #define WGL_NV_render_texture_rectangle 1 #define __GLEE_WGL_NV_render_texture_rectangle 1 /* Constants */ #define WGL_BIND_TO_TEXTURE_RECTANGLE_RGB_NV 0x20A0 #define WGL_BIND_TO_TEXTURE_RECTANGLE_RGBA_NV 0x20A1 #define WGL_TEXTURE_RECTANGLE_NV 0x20A2 #endif /* WGL_ATI_pixel_format_float */ #ifndef WGL_ATI_pixel_format_float #define WGL_ATI_pixel_format_float 1 #define __GLEE_WGL_ATI_pixel_format_float 1 /* Constants */ #define WGL_TYPE_RGBA_FLOAT_ATI 0x21A0 #endif /* WGL_NV_float_buffer */ #ifndef WGL_NV_float_buffer #define WGL_NV_float_buffer 1 #define __GLEE_WGL_NV_float_buffer 1 /* Constants */ #define WGL_FLOAT_COMPONENTS_NV 0x20B0 #define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_R_NV 0x20B1 #define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RG_NV 0x20B2 #define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGB_NV 0x20B3 #define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGBA_NV 0x20B4 #define WGL_TEXTURE_FLOAT_R_NV 0x20B5 #define WGL_TEXTURE_FLOAT_RG_NV 0x20B6 #define WGL_TEXTURE_FLOAT_RGB_NV 0x20B7 #define WGL_TEXTURE_FLOAT_RGBA_NV 0x20B8 #endif /* WGL_3DL_stereo_control */ #ifndef WGL_3DL_stereo_control #define WGL_3DL_stereo_control 1 #define __GLEE_WGL_3DL_stereo_control 1 /* Constants */ #define WGL_STEREO_EMITTER_ENABLE_3DL 0x2055 #define WGL_STEREO_EMITTER_DISABLE_3DL 0x2056 #define WGL_STEREO_POLARITY_NORMAL_3DL 0x2057 #define WGL_STEREO_POLARITY_INVERT_3DL 0x2058 #endif /* WGL_EXT_pixel_format_packed_float */ #ifndef WGL_EXT_pixel_format_packed_float #define WGL_EXT_pixel_format_packed_float 1 #define __GLEE_WGL_EXT_pixel_format_packed_float 1 /* Constants */ #define WGL_TYPE_RGBA_UNSIGNED_FLOAT_EXT 0x20A8 #endif /* WGL_EXT_framebuffer_sRGB */ #ifndef WGL_EXT_framebuffer_sRGB #define WGL_EXT_framebuffer_sRGB 1 #define __GLEE_WGL_EXT_framebuffer_sRGB 1 /* Constants */ #define WGL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x20A9 #endif /* WGL_NV_present_video */ #ifndef WGL_NV_present_video #define WGL_NV_present_video 1 #define __GLEE_WGL_NV_present_video 1 /* Constants */ #define WGL_NUM_VIDEO_SLOTS_NV 0x20F0 #ifndef GLEE_H_DEFINED_wglEnumerateVideoDevicesNV #define GLEE_H_DEFINED_wglEnumerateVideoDevicesNV typedef int (APIENTRYP GLEEPFNWGLENUMERATEVIDEODEVICESNVPROC) (HDC hDC, HVIDEOOUTPUTDEVICENV * phDeviceList); GLEE_EXTERN GLEEPFNWGLENUMERATEVIDEODEVICESNVPROC GLeeFuncPtr_wglEnumerateVideoDevicesNV; #define wglEnumerateVideoDevicesNV GLeeFuncPtr_wglEnumerateVideoDevicesNV #endif #ifndef GLEE_H_DEFINED_wglBindVideoDeviceNV #define GLEE_H_DEFINED_wglBindVideoDeviceNV typedef BOOL (APIENTRYP GLEEPFNWGLBINDVIDEODEVICENVPROC) (HDC hDC, unsigned int uVideoSlot, HVIDEOOUTPUTDEVICENV hVideoDevice, const int * piAttribList); GLEE_EXTERN GLEEPFNWGLBINDVIDEODEVICENVPROC GLeeFuncPtr_wglBindVideoDeviceNV; #define wglBindVideoDeviceNV GLeeFuncPtr_wglBindVideoDeviceNV #endif #ifndef GLEE_H_DEFINED_wglQueryCurrentContextNV #define GLEE_H_DEFINED_wglQueryCurrentContextNV typedef BOOL (APIENTRYP GLEEPFNWGLQUERYCURRENTCONTEXTNVPROC) (int iAttribute, int * piValue); GLEE_EXTERN GLEEPFNWGLQUERYCURRENTCONTEXTNVPROC GLeeFuncPtr_wglQueryCurrentContextNV; #define wglQueryCurrentContextNV GLeeFuncPtr_wglQueryCurrentContextNV #endif #endif /* WGL_NV_swap_group */ #ifndef WGL_NV_swap_group #define WGL_NV_swap_group 1 #define __GLEE_WGL_NV_swap_group 1 /* Constants */ #ifndef GLEE_H_DEFINED_wglJoinSwapGroupNV #define GLEE_H_DEFINED_wglJoinSwapGroupNV typedef BOOL (APIENTRYP GLEEPFNWGLJOINSWAPGROUPNVPROC) (HDC hDC, GLuint group); GLEE_EXTERN GLEEPFNWGLJOINSWAPGROUPNVPROC GLeeFuncPtr_wglJoinSwapGroupNV; #define wglJoinSwapGroupNV GLeeFuncPtr_wglJoinSwapGroupNV #endif #ifndef GLEE_H_DEFINED_wglBindSwapBarrierNV #define GLEE_H_DEFINED_wglBindSwapBarrierNV typedef BOOL (APIENTRYP GLEEPFNWGLBINDSWAPBARRIERNVPROC) (GLuint group, GLuint barrier); GLEE_EXTERN GLEEPFNWGLBINDSWAPBARRIERNVPROC GLeeFuncPtr_wglBindSwapBarrierNV; #define wglBindSwapBarrierNV GLeeFuncPtr_wglBindSwapBarrierNV #endif #ifndef GLEE_H_DEFINED_wglQuerySwapGroupNV #define GLEE_H_DEFINED_wglQuerySwapGroupNV typedef BOOL (APIENTRYP GLEEPFNWGLQUERYSWAPGROUPNVPROC) (HDC hDC, GLuint * group, GLuint * barrier); GLEE_EXTERN GLEEPFNWGLQUERYSWAPGROUPNVPROC GLeeFuncPtr_wglQuerySwapGroupNV; #define wglQuerySwapGroupNV GLeeFuncPtr_wglQuerySwapGroupNV #endif #ifndef GLEE_H_DEFINED_wglQueryMaxSwapGroupsNV #define GLEE_H_DEFINED_wglQueryMaxSwapGroupsNV typedef BOOL (APIENTRYP GLEEPFNWGLQUERYMAXSWAPGROUPSNVPROC) (HDC hDC, GLuint * maxGroups, GLuint * maxBarriers); GLEE_EXTERN GLEEPFNWGLQUERYMAXSWAPGROUPSNVPROC GLeeFuncPtr_wglQueryMaxSwapGroupsNV; #define wglQueryMaxSwapGroupsNV GLeeFuncPtr_wglQueryMaxSwapGroupsNV #endif #ifndef GLEE_H_DEFINED_wglQueryFrameCountNV #define GLEE_H_DEFINED_wglQueryFrameCountNV typedef BOOL (APIENTRYP GLEEPFNWGLQUERYFRAMECOUNTNVPROC) (HDC hDC, GLuint * count); GLEE_EXTERN GLEEPFNWGLQUERYFRAMECOUNTNVPROC GLeeFuncPtr_wglQueryFrameCountNV; #define wglQueryFrameCountNV GLeeFuncPtr_wglQueryFrameCountNV #endif #ifndef GLEE_H_DEFINED_wglResetFrameCountNV #define GLEE_H_DEFINED_wglResetFrameCountNV typedef BOOL (APIENTRYP GLEEPFNWGLRESETFRAMECOUNTNVPROC) (HDC hDC); GLEE_EXTERN GLEEPFNWGLRESETFRAMECOUNTNVPROC GLeeFuncPtr_wglResetFrameCountNV; #define wglResetFrameCountNV GLeeFuncPtr_wglResetFrameCountNV #endif #endif /* WGL_NV_gpu_affinity */ #ifndef WGL_NV_gpu_affinity #define WGL_NV_gpu_affinity 1 #define __GLEE_WGL_NV_gpu_affinity 1 /* Constants */ #define WGL_ERROR_INCOMPATIBLE_AFFINITY_MASKS_NV 0x20D0 #define WGL_ERROR_MISSING_AFFINITY_MASK_NV 0x20D1 #ifndef GLEE_H_DEFINED_wglEnumGpusNV #define GLEE_H_DEFINED_wglEnumGpusNV typedef BOOL (APIENTRYP GLEEPFNWGLENUMGPUSNVPROC) (UINT iGpuIndex, HGPUNV * phGpu); GLEE_EXTERN GLEEPFNWGLENUMGPUSNVPROC GLeeFuncPtr_wglEnumGpusNV; #define wglEnumGpusNV GLeeFuncPtr_wglEnumGpusNV #endif #ifndef GLEE_H_DEFINED_wglEnumGpuDevicesNV #define GLEE_H_DEFINED_wglEnumGpuDevicesNV typedef BOOL (APIENTRYP GLEEPFNWGLENUMGPUDEVICESNVPROC) (HGPUNV hGpu, UINT iDeviceIndex, PGPU_DEVICE lpGpuDevice); GLEE_EXTERN GLEEPFNWGLENUMGPUDEVICESNVPROC GLeeFuncPtr_wglEnumGpuDevicesNV; #define wglEnumGpuDevicesNV GLeeFuncPtr_wglEnumGpuDevicesNV #endif #ifndef GLEE_H_DEFINED_wglCreateAffinityDCNV #define GLEE_H_DEFINED_wglCreateAffinityDCNV typedef HDC (APIENTRYP GLEEPFNWGLCREATEAFFINITYDCNVPROC) (const HGPUNV * phGpuList); GLEE_EXTERN GLEEPFNWGLCREATEAFFINITYDCNVPROC GLeeFuncPtr_wglCreateAffinityDCNV; #define wglCreateAffinityDCNV GLeeFuncPtr_wglCreateAffinityDCNV #endif #ifndef GLEE_H_DEFINED_wglEnumGpusFromAffinityDCNV #define GLEE_H_DEFINED_wglEnumGpusFromAffinityDCNV typedef BOOL (APIENTRYP GLEEPFNWGLENUMGPUSFROMAFFINITYDCNVPROC) (HDC hAffinityDC, UINT iGpuIndex, HGPUNV * hGpu); GLEE_EXTERN GLEEPFNWGLENUMGPUSFROMAFFINITYDCNVPROC GLeeFuncPtr_wglEnumGpusFromAffinityDCNV; #define wglEnumGpusFromAffinityDCNV GLeeFuncPtr_wglEnumGpusFromAffinityDCNV #endif #ifndef GLEE_H_DEFINED_wglDeleteDCNV #define GLEE_H_DEFINED_wglDeleteDCNV typedef BOOL (APIENTRYP GLEEPFNWGLDELETEDCNVPROC) (HDC hdc); GLEE_EXTERN GLEEPFNWGLDELETEDCNVPROC GLeeFuncPtr_wglDeleteDCNV; #define wglDeleteDCNV GLeeFuncPtr_wglDeleteDCNV #endif #endif /* WGL_EXT_display_color_table */ #ifndef WGL_EXT_display_color_table #define WGL_EXT_display_color_table 1 #define __GLEE_WGL_EXT_display_color_table 1 /* Constants */ #ifndef GLEE_H_DEFINED_wglCreateDisplayColorTableEXT #define GLEE_H_DEFINED_wglCreateDisplayColorTableEXT typedef GLboolean (APIENTRYP GLEEPFNWGLCREATEDISPLAYCOLORTABLEEXTPROC) (GLushort id); GLEE_EXTERN GLEEPFNWGLCREATEDISPLAYCOLORTABLEEXTPROC GLeeFuncPtr_wglCreateDisplayColorTableEXT; #define wglCreateDisplayColorTableEXT GLeeFuncPtr_wglCreateDisplayColorTableEXT #endif #ifndef GLEE_H_DEFINED_wglLoadDisplayColorTableEXT #define GLEE_H_DEFINED_wglLoadDisplayColorTableEXT typedef GLboolean (APIENTRYP GLEEPFNWGLLOADDISPLAYCOLORTABLEEXTPROC) (const GLushort * table, GLuint length); GLEE_EXTERN GLEEPFNWGLLOADDISPLAYCOLORTABLEEXTPROC GLeeFuncPtr_wglLoadDisplayColorTableEXT; #define wglLoadDisplayColorTableEXT GLeeFuncPtr_wglLoadDisplayColorTableEXT #endif #ifndef GLEE_H_DEFINED_wglBindDisplayColorTableEXT #define GLEE_H_DEFINED_wglBindDisplayColorTableEXT typedef GLboolean (APIENTRYP GLEEPFNWGLBINDDISPLAYCOLORTABLEEXTPROC) (GLushort id); GLEE_EXTERN GLEEPFNWGLBINDDISPLAYCOLORTABLEEXTPROC GLeeFuncPtr_wglBindDisplayColorTableEXT; #define wglBindDisplayColorTableEXT GLeeFuncPtr_wglBindDisplayColorTableEXT #endif #ifndef GLEE_H_DEFINED_wglDestroyDisplayColorTableEXT #define GLEE_H_DEFINED_wglDestroyDisplayColorTableEXT typedef VOID (APIENTRYP GLEEPFNWGLDESTROYDISPLAYCOLORTABLEEXTPROC) (GLushort id); GLEE_EXTERN GLEEPFNWGLDESTROYDISPLAYCOLORTABLEEXTPROC GLeeFuncPtr_wglDestroyDisplayColorTableEXT; #define wglDestroyDisplayColorTableEXT GLeeFuncPtr_wglDestroyDisplayColorTableEXT #endif #endif /* WGL_EXT_extensions_string */ #ifndef WGL_EXT_extensions_string #define WGL_EXT_extensions_string 1 #define __GLEE_WGL_EXT_extensions_string 1 /* Constants */ #ifndef GLEE_H_DEFINED_wglGetExtensionsStringEXT #define GLEE_H_DEFINED_wglGetExtensionsStringEXT typedef const char * (APIENTRYP GLEEPFNWGLGETEXTENSIONSSTRINGEXTPROC) (); GLEE_EXTERN GLEEPFNWGLGETEXTENSIONSSTRINGEXTPROC GLeeFuncPtr_wglGetExtensionsStringEXT; #define wglGetExtensionsStringEXT GLeeFuncPtr_wglGetExtensionsStringEXT #endif #endif /* WGL_EXT_swap_control */ #ifndef WGL_EXT_swap_control #define WGL_EXT_swap_control 1 #define __GLEE_WGL_EXT_swap_control 1 /* Constants */ #ifndef GLEE_H_DEFINED_wglSwapIntervalEXT #define GLEE_H_DEFINED_wglSwapIntervalEXT typedef BOOL (APIENTRYP GLEEPFNWGLSWAPINTERVALEXTPROC) (int interval); GLEE_EXTERN GLEEPFNWGLSWAPINTERVALEXTPROC GLeeFuncPtr_wglSwapIntervalEXT; #define wglSwapIntervalEXT GLeeFuncPtr_wglSwapIntervalEXT #endif #ifndef GLEE_H_DEFINED_wglGetSwapIntervalEXT #define GLEE_H_DEFINED_wglGetSwapIntervalEXT typedef int (APIENTRYP GLEEPFNWGLGETSWAPINTERVALEXTPROC) (); GLEE_EXTERN GLEEPFNWGLGETSWAPINTERVALEXTPROC GLeeFuncPtr_wglGetSwapIntervalEXT; #define wglGetSwapIntervalEXT GLeeFuncPtr_wglGetSwapIntervalEXT #endif #endif /* WGL_NV_vertex_array_range */ #ifndef WGL_NV_vertex_array_range #define WGL_NV_vertex_array_range 1 #define __GLEE_WGL_NV_vertex_array_range 1 /* Constants */ #ifndef GLEE_H_DEFINED_wglAllocateMemoryNV #define GLEE_H_DEFINED_wglAllocateMemoryNV typedef void* (APIENTRYP GLEEPFNWGLALLOCATEMEMORYNVPROC) (GLsizei size, GLfloat readfreq, GLfloat writefreq, GLfloat priority); GLEE_EXTERN GLEEPFNWGLALLOCATEMEMORYNVPROC GLeeFuncPtr_wglAllocateMemoryNV; #define wglAllocateMemoryNV GLeeFuncPtr_wglAllocateMemoryNV #endif #ifndef GLEE_H_DEFINED_wglFreeMemoryNV #define GLEE_H_DEFINED_wglFreeMemoryNV typedef void (APIENTRYP GLEEPFNWGLFREEMEMORYNVPROC) (void * pointer); GLEE_EXTERN GLEEPFNWGLFREEMEMORYNVPROC GLeeFuncPtr_wglFreeMemoryNV; #define wglFreeMemoryNV GLeeFuncPtr_wglFreeMemoryNV #endif #endif /* WGL_OML_sync_control */ #ifndef WGL_OML_sync_control #define WGL_OML_sync_control 1 #define __GLEE_WGL_OML_sync_control 1 /* Constants */ #ifndef GLEE_H_DEFINED_wglGetSyncValuesOML #define GLEE_H_DEFINED_wglGetSyncValuesOML typedef BOOL (APIENTRYP GLEEPFNWGLGETSYNCVALUESOMLPROC) (HDC hdc, INT64 * ust, INT64 * msc, INT64 * sbc); GLEE_EXTERN GLEEPFNWGLGETSYNCVALUESOMLPROC GLeeFuncPtr_wglGetSyncValuesOML; #define wglGetSyncValuesOML GLeeFuncPtr_wglGetSyncValuesOML #endif #ifndef GLEE_H_DEFINED_wglGetMscRateOML #define GLEE_H_DEFINED_wglGetMscRateOML typedef BOOL (APIENTRYP GLEEPFNWGLGETMSCRATEOMLPROC) (HDC hdc, INT32 * numerator, INT32 * denominator); GLEE_EXTERN GLEEPFNWGLGETMSCRATEOMLPROC GLeeFuncPtr_wglGetMscRateOML; #define wglGetMscRateOML GLeeFuncPtr_wglGetMscRateOML #endif #ifndef GLEE_H_DEFINED_wglSwapBuffersMscOML #define GLEE_H_DEFINED_wglSwapBuffersMscOML typedef INT64 (APIENTRYP GLEEPFNWGLSWAPBUFFERSMSCOMLPROC) (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder); GLEE_EXTERN GLEEPFNWGLSWAPBUFFERSMSCOMLPROC GLeeFuncPtr_wglSwapBuffersMscOML; #define wglSwapBuffersMscOML GLeeFuncPtr_wglSwapBuffersMscOML #endif #ifndef GLEE_H_DEFINED_wglSwapLayerBuffersMscOML #define GLEE_H_DEFINED_wglSwapLayerBuffersMscOML typedef INT64 (APIENTRYP GLEEPFNWGLSWAPLAYERBUFFERSMSCOMLPROC) (HDC hdc, int fuPlanes, INT64 target_msc, INT64 divisor, INT64 remainder); GLEE_EXTERN GLEEPFNWGLSWAPLAYERBUFFERSMSCOMLPROC GLeeFuncPtr_wglSwapLayerBuffersMscOML; #define wglSwapLayerBuffersMscOML GLeeFuncPtr_wglSwapLayerBuffersMscOML #endif #ifndef GLEE_H_DEFINED_wglWaitForMscOML #define GLEE_H_DEFINED_wglWaitForMscOML typedef BOOL (APIENTRYP GLEEPFNWGLWAITFORMSCOMLPROC) (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder, INT64 * ust, INT64 * msc, INT64 * sbc); GLEE_EXTERN GLEEPFNWGLWAITFORMSCOMLPROC GLeeFuncPtr_wglWaitForMscOML; #define wglWaitForMscOML GLeeFuncPtr_wglWaitForMscOML #endif #ifndef GLEE_H_DEFINED_wglWaitForSbcOML #define GLEE_H_DEFINED_wglWaitForSbcOML typedef BOOL (APIENTRYP GLEEPFNWGLWAITFORSBCOMLPROC) (HDC hdc, INT64 target_sbc, INT64 * ust, INT64 * msc, INT64 * sbc); GLEE_EXTERN GLEEPFNWGLWAITFORSBCOMLPROC GLeeFuncPtr_wglWaitForSbcOML; #define wglWaitForSbcOML GLeeFuncPtr_wglWaitForSbcOML #endif #endif /* WGL_I3D_swap_frame_usage */ #ifndef WGL_I3D_swap_frame_usage #define WGL_I3D_swap_frame_usage 1 #define __GLEE_WGL_I3D_swap_frame_usage 1 /* Constants */ #ifndef GLEE_H_DEFINED_wglGetFrameUsageI3D #define GLEE_H_DEFINED_wglGetFrameUsageI3D typedef BOOL (APIENTRYP GLEEPFNWGLGETFRAMEUSAGEI3DPROC) (float * pUsage); GLEE_EXTERN GLEEPFNWGLGETFRAMEUSAGEI3DPROC GLeeFuncPtr_wglGetFrameUsageI3D; #define wglGetFrameUsageI3D GLeeFuncPtr_wglGetFrameUsageI3D #endif #ifndef GLEE_H_DEFINED_wglBeginFrameTrackingI3D #define GLEE_H_DEFINED_wglBeginFrameTrackingI3D typedef BOOL (APIENTRYP GLEEPFNWGLBEGINFRAMETRACKINGI3DPROC) (); GLEE_EXTERN GLEEPFNWGLBEGINFRAMETRACKINGI3DPROC GLeeFuncPtr_wglBeginFrameTrackingI3D; #define wglBeginFrameTrackingI3D GLeeFuncPtr_wglBeginFrameTrackingI3D #endif #ifndef GLEE_H_DEFINED_wglEndFrameTrackingI3D #define GLEE_H_DEFINED_wglEndFrameTrackingI3D typedef BOOL (APIENTRYP GLEEPFNWGLENDFRAMETRACKINGI3DPROC) (); GLEE_EXTERN GLEEPFNWGLENDFRAMETRACKINGI3DPROC GLeeFuncPtr_wglEndFrameTrackingI3D; #define wglEndFrameTrackingI3D GLeeFuncPtr_wglEndFrameTrackingI3D #endif #ifndef GLEE_H_DEFINED_wglQueryFrameTrackingI3D #define GLEE_H_DEFINED_wglQueryFrameTrackingI3D typedef BOOL (APIENTRYP GLEEPFNWGLQUERYFRAMETRACKINGI3DPROC) (DWORD * pFrameCount, DWORD * pMissedFrames, float * pLastMissedUsage); GLEE_EXTERN GLEEPFNWGLQUERYFRAMETRACKINGI3DPROC GLeeFuncPtr_wglQueryFrameTrackingI3D; #define wglQueryFrameTrackingI3D GLeeFuncPtr_wglQueryFrameTrackingI3D #endif #endif /* WGL_NV_video_output */ #ifndef WGL_NV_video_output #define WGL_NV_video_output 1 #define __GLEE_WGL_NV_video_output 1 /* Constants */ #define WGL_BIND_TO_VIDEO_RGB_NV 0x20C0 #define WGL_BIND_TO_VIDEO_RGBA_NV 0x20C1 #define WGL_BIND_TO_VIDEO_RGB_AND_DEPTH_NV 0x20C2 #define WGL_VIDEO_OUT_COLOR_NV 0x20C3 #define WGL_VIDEO_OUT_ALPHA_NV 0x20C4 #define WGL_VIDEO_OUT_DEPTH_NV 0x20C5 #define WGL_VIDEO_OUT_COLOR_AND_ALPHA_NV 0x20C6 #define WGL_VIDEO_OUT_COLOR_AND_DEPTH_NV 0x20C7 #define WGL_VIDEO_OUT_FRAME 0x20C8 #define WGL_VIDEO_OUT_FIELD_1 0x20C9 #define WGL_VIDEO_OUT_FIELD_2 0x20CA #define WGL_VIDEO_OUT_STACKED_FIELDS_1_2 0x20CB #define WGL_VIDEO_OUT_STACKED_FIELDS_2_1 0x20CC #ifndef GLEE_H_DEFINED_wglGetVideoDeviceNV #define GLEE_H_DEFINED_wglGetVideoDeviceNV typedef BOOL (APIENTRYP GLEEPFNWGLGETVIDEODEVICENVPROC) (HDC hDC, int numDevices, HPVIDEODEV * hVideoDevice); GLEE_EXTERN GLEEPFNWGLGETVIDEODEVICENVPROC GLeeFuncPtr_wglGetVideoDeviceNV; #define wglGetVideoDeviceNV GLeeFuncPtr_wglGetVideoDeviceNV #endif #ifndef GLEE_H_DEFINED_wglReleaseVideoDeviceNV #define GLEE_H_DEFINED_wglReleaseVideoDeviceNV typedef BOOL (APIENTRYP GLEEPFNWGLRELEASEVIDEODEVICENVPROC) (HPVIDEODEV hVideoDevice); GLEE_EXTERN GLEEPFNWGLRELEASEVIDEODEVICENVPROC GLeeFuncPtr_wglReleaseVideoDeviceNV; #define wglReleaseVideoDeviceNV GLeeFuncPtr_wglReleaseVideoDeviceNV #endif #ifndef GLEE_H_DEFINED_wglBindVideoImageNV #define GLEE_H_DEFINED_wglBindVideoImageNV typedef BOOL (APIENTRYP GLEEPFNWGLBINDVIDEOIMAGENVPROC) (HPVIDEODEV hVideoDevice, HPBUFFERARB hPbuffer, int iVideoBuffer); GLEE_EXTERN GLEEPFNWGLBINDVIDEOIMAGENVPROC GLeeFuncPtr_wglBindVideoImageNV; #define wglBindVideoImageNV GLeeFuncPtr_wglBindVideoImageNV #endif #ifndef GLEE_H_DEFINED_wglReleaseVideoImageNV #define GLEE_H_DEFINED_wglReleaseVideoImageNV typedef BOOL (APIENTRYP GLEEPFNWGLRELEASEVIDEOIMAGENVPROC) (HPBUFFERARB hPbuffer, int iVideoBuffer); GLEE_EXTERN GLEEPFNWGLRELEASEVIDEOIMAGENVPROC GLeeFuncPtr_wglReleaseVideoImageNV; #define wglReleaseVideoImageNV GLeeFuncPtr_wglReleaseVideoImageNV #endif #ifndef GLEE_H_DEFINED_wglSendPbufferToVideoNV #define GLEE_H_DEFINED_wglSendPbufferToVideoNV typedef BOOL (APIENTRYP GLEEPFNWGLSENDPBUFFERTOVIDEONVPROC) (HPBUFFERARB hPbuffer, int iBufferType, unsigned long * pulCounterPbuffer, BOOL bBlock); GLEE_EXTERN GLEEPFNWGLSENDPBUFFERTOVIDEONVPROC GLeeFuncPtr_wglSendPbufferToVideoNV; #define wglSendPbufferToVideoNV GLeeFuncPtr_wglSendPbufferToVideoNV #endif #ifndef GLEE_H_DEFINED_wglGetVideoInfoNV #define GLEE_H_DEFINED_wglGetVideoInfoNV typedef BOOL (APIENTRYP GLEEPFNWGLGETVIDEOINFONVPROC) (HPVIDEODEV hpVideoDevice, unsigned long * pulCounterOutputPbuffer, unsigned long * pulCounterOutputVideo); GLEE_EXTERN GLEEPFNWGLGETVIDEOINFONVPROC GLeeFuncPtr_wglGetVideoInfoNV; #define wglGetVideoInfoNV GLeeFuncPtr_wglGetVideoInfoNV #endif #endif #elif defined(__APPLE__) || defined(__APPLE_CC__) #else /* GLX */ /* Extension querying variables */ GLEE_EXTERN GLboolean _GLEE_GLX_VERSION_1_3; GLEE_EXTERN GLboolean _GLEE_GLX_VERSION_1_4; GLEE_EXTERN GLboolean _GLEE_GLX_ARB_multisample; GLEE_EXTERN GLboolean _GLEE_GLX_ARB_fbconfig_float; GLEE_EXTERN GLboolean _GLEE_GLX_ARB_create_context; GLEE_EXTERN GLboolean _GLEE_GLX_SGIS_multisample; GLEE_EXTERN GLboolean _GLEE_GLX_EXT_visual_info; GLEE_EXTERN GLboolean _GLEE_GLX_SGI_swap_control; GLEE_EXTERN GLboolean _GLEE_GLX_SGI_video_sync; GLEE_EXTERN GLboolean _GLEE_GLX_SGI_make_current_read; GLEE_EXTERN GLboolean _GLEE_GLX_EXT_visual_rating; GLEE_EXTERN GLboolean _GLEE_GLX_EXT_import_context; GLEE_EXTERN GLboolean _GLEE_GLX_SGIX_fbconfig; GLEE_EXTERN GLboolean _GLEE_GLX_SGIX_pbuffer; GLEE_EXTERN GLboolean _GLEE_GLX_SGI_cushion; GLEE_EXTERN GLboolean _GLEE_GLX_SGIX_video_resize; GLEE_EXTERN GLboolean _GLEE_GLX_SGIX_swap_group; GLEE_EXTERN GLboolean _GLEE_GLX_SGIX_swap_barrier; GLEE_EXTERN GLboolean _GLEE_GLX_SGIS_blended_overlay; GLEE_EXTERN GLboolean _GLEE_GLX_SGIS_shared_multisample; GLEE_EXTERN GLboolean _GLEE_GLX_SUN_get_transparent_index; GLEE_EXTERN GLboolean _GLEE_GLX_3DFX_multisample; GLEE_EXTERN GLboolean _GLEE_GLX_MESA_copy_sub_buffer; GLEE_EXTERN GLboolean _GLEE_GLX_MESA_pixmap_colormap; GLEE_EXTERN GLboolean _GLEE_GLX_MESA_release_buffers; GLEE_EXTERN GLboolean _GLEE_GLX_MESA_set_3dfx_mode; GLEE_EXTERN GLboolean _GLEE_GLX_SGIX_visual_select_group; GLEE_EXTERN GLboolean _GLEE_GLX_OML_swap_method; GLEE_EXTERN GLboolean _GLEE_GLX_OML_sync_control; GLEE_EXTERN GLboolean _GLEE_GLX_NV_float_buffer; GLEE_EXTERN GLboolean _GLEE_GLX_SGIX_hyperpipe; GLEE_EXTERN GLboolean _GLEE_GLX_MESA_agp_offset; GLEE_EXTERN GLboolean _GLEE_GLX_EXT_fbconfig_packed_float; GLEE_EXTERN GLboolean _GLEE_GLX_EXT_framebuffer_sRGB; GLEE_EXTERN GLboolean _GLEE_GLX_EXT_texture_from_pixmap; GLEE_EXTERN GLboolean _GLEE_GLX_NV_present_video; GLEE_EXTERN GLboolean _GLEE_GLX_NV_video_out; GLEE_EXTERN GLboolean _GLEE_GLX_NV_swap_group; GLEE_EXTERN GLboolean _GLEE_GLX_EXT_scene_marker; GLEE_EXTERN GLboolean _GLEE_GLX_NV_video_output; /* Aliases for extension querying variables */ #define GLEE_GLX_VERSION_1_3 GLeeEnabled(&_GLEE_GLX_VERSION_1_3) #define GLEE_GLX_VERSION_1_4 GLeeEnabled(&_GLEE_GLX_VERSION_1_4) #define GLEE_GLX_ARB_multisample GLeeEnabled(&_GLEE_GLX_ARB_multisample) #define GLEE_GLX_ARB_fbconfig_float GLeeEnabled(&_GLEE_GLX_ARB_fbconfig_float) #define GLEE_GLX_ARB_create_context GLeeEnabled(&_GLEE_GLX_ARB_create_context) #define GLEE_GLX_SGIS_multisample GLeeEnabled(&_GLEE_GLX_SGIS_multisample) #define GLEE_GLX_EXT_visual_info GLeeEnabled(&_GLEE_GLX_EXT_visual_info) #define GLEE_GLX_SGI_swap_control GLeeEnabled(&_GLEE_GLX_SGI_swap_control) #define GLEE_GLX_SGI_video_sync GLeeEnabled(&_GLEE_GLX_SGI_video_sync) #define GLEE_GLX_SGI_make_current_read GLeeEnabled(&_GLEE_GLX_SGI_make_current_read) #define GLEE_GLX_EXT_visual_rating GLeeEnabled(&_GLEE_GLX_EXT_visual_rating) #define GLEE_GLX_EXT_import_context GLeeEnabled(&_GLEE_GLX_EXT_import_context) #define GLEE_GLX_SGIX_fbconfig GLeeEnabled(&_GLEE_GLX_SGIX_fbconfig) #define GLEE_GLX_SGIX_pbuffer GLeeEnabled(&_GLEE_GLX_SGIX_pbuffer) #define GLEE_GLX_SGI_cushion GLeeEnabled(&_GLEE_GLX_SGI_cushion) #define GLEE_GLX_SGIX_video_resize GLeeEnabled(&_GLEE_GLX_SGIX_video_resize) #define GLEE_GLX_SGIX_swap_group GLeeEnabled(&_GLEE_GLX_SGIX_swap_group) #define GLEE_GLX_SGIX_swap_barrier GLeeEnabled(&_GLEE_GLX_SGIX_swap_barrier) #define GLEE_GLX_SGIS_blended_overlay GLeeEnabled(&_GLEE_GLX_SGIS_blended_overlay) #define GLEE_GLX_SGIS_shared_multisample GLeeEnabled(&_GLEE_GLX_SGIS_shared_multisample) #define GLEE_GLX_SUN_get_transparent_index GLeeEnabled(&_GLEE_GLX_SUN_get_transparent_index) #define GLEE_GLX_3DFX_multisample GLeeEnabled(&_GLEE_GLX_3DFX_multisample) #define GLEE_GLX_MESA_copy_sub_buffer GLeeEnabled(&_GLEE_GLX_MESA_copy_sub_buffer) #define GLEE_GLX_MESA_pixmap_colormap GLeeEnabled(&_GLEE_GLX_MESA_pixmap_colormap) #define GLEE_GLX_MESA_release_buffers GLeeEnabled(&_GLEE_GLX_MESA_release_buffers) #define GLEE_GLX_MESA_set_3dfx_mode GLeeEnabled(&_GLEE_GLX_MESA_set_3dfx_mode) #define GLEE_GLX_SGIX_visual_select_group GLeeEnabled(&_GLEE_GLX_SGIX_visual_select_group) #define GLEE_GLX_OML_swap_method GLeeEnabled(&_GLEE_GLX_OML_swap_method) #define GLEE_GLX_OML_sync_control GLeeEnabled(&_GLEE_GLX_OML_sync_control) #define GLEE_GLX_NV_float_buffer GLeeEnabled(&_GLEE_GLX_NV_float_buffer) #define GLEE_GLX_SGIX_hyperpipe GLeeEnabled(&_GLEE_GLX_SGIX_hyperpipe) #define GLEE_GLX_MESA_agp_offset GLeeEnabled(&_GLEE_GLX_MESA_agp_offset) #define GLEE_GLX_EXT_fbconfig_packed_float GLeeEnabled(&_GLEE_GLX_EXT_fbconfig_packed_float) #define GLEE_GLX_EXT_framebuffer_sRGB GLeeEnabled(&_GLEE_GLX_EXT_framebuffer_sRGB) #define GLEE_GLX_EXT_texture_from_pixmap GLeeEnabled(&_GLEE_GLX_EXT_texture_from_pixmap) #define GLEE_GLX_NV_present_video GLeeEnabled(&_GLEE_GLX_NV_present_video) #define GLEE_GLX_NV_video_out GLeeEnabled(&_GLEE_GLX_NV_video_out) #define GLEE_GLX_NV_swap_group GLeeEnabled(&_GLEE_GLX_NV_swap_group) #define GLEE_GLX_EXT_scene_marker GLeeEnabled(&_GLEE_GLX_EXT_scene_marker) #define GLEE_GLX_NV_video_output GLeeEnabled(&_GLEE_GLX_NV_video_output) /* GLX_VERSION_1_3 */ #ifndef GLX_VERSION_1_3 #define GLX_VERSION_1_3 1 #define __GLEE_GLX_VERSION_1_3 1 /* Constants */ #define GLX_WINDOW_BIT 0x00000001 #define GLX_PIXMAP_BIT 0x00000002 #define GLX_PBUFFER_BIT 0x00000004 #define GLX_RGBA_BIT 0x00000001 #define GLX_COLOR_INDEX_BIT 0x00000002 #define GLX_PBUFFER_CLOBBER_MASK 0x08000000 #define GLX_FRONT_LEFT_BUFFER_BIT 0x00000001 #define GLX_FRONT_RIGHT_BUFFER_BIT 0x00000002 #define GLX_BACK_LEFT_BUFFER_BIT 0x00000004 #define GLX_BACK_RIGHT_BUFFER_BIT 0x00000008 #define GLX_AUX_BUFFERS_BIT 0x00000010 #define GLX_DEPTH_BUFFER_BIT 0x00000020 #define GLX_STENCIL_BUFFER_BIT 0x00000040 #define GLX_ACCUM_BUFFER_BIT 0x00000080 #define GLX_CONFIG_CAVEAT 0x20 #define GLX_X_VISUAL_TYPE 0x22 #define GLX_TRANSPARENT_TYPE 0x23 #define GLX_TRANSPARENT_INDEX_VALUE 0x24 #define GLX_TRANSPARENT_RED_VALUE 0x25 #define GLX_TRANSPARENT_GREEN_VALUE 0x26 #define GLX_TRANSPARENT_BLUE_VALUE 0x27 #define GLX_TRANSPARENT_ALPHA_VALUE 0x28 #define GLX_DONT_CARE 0xFFFFFFFF #define GLX_NONE 0x8000 #define GLX_SLOW_CONFIG 0x8001 #define GLX_TRUE_COLOR 0x8002 #define GLX_DIRECT_COLOR 0x8003 #define GLX_PSEUDO_COLOR 0x8004 #define GLX_STATIC_COLOR 0x8005 #define GLX_GRAY_SCALE 0x8006 #define GLX_STATIC_GRAY 0x8007 #define GLX_TRANSPARENT_RGB 0x8008 #define GLX_TRANSPARENT_INDEX 0x8009 #define GLX_VISUAL_ID 0x800B #define GLX_SCREEN 0x800C #define GLX_NON_CONFORMANT_CONFIG 0x800D #define GLX_DRAWABLE_TYPE 0x8010 #define GLX_RENDER_TYPE 0x8011 #define GLX_X_RENDERABLE 0x8012 #define GLX_FBCONFIG_ID 0x8013 #define GLX_RGBA_TYPE 0x8014 #define GLX_COLOR_INDEX_TYPE 0x8015 #define GLX_MAX_PBUFFER_WIDTH 0x8016 #define GLX_MAX_PBUFFER_HEIGHT 0x8017 #define GLX_MAX_PBUFFER_PIXELS 0x8018 #define GLX_PRESERVED_CONTENTS 0x801B #define GLX_LARGEST_PBUFFER 0x801C #define GLX_WIDTH 0x801D #define GLX_HEIGHT 0x801E #define GLX_EVENT_MASK 0x801F #define GLX_DAMAGED 0x8020 #define GLX_SAVED 0x8021 #define GLX_WINDOW 0x8022 #define GLX_PBUFFER 0x8023 #define GLX_PBUFFER_HEIGHT 0x8040 #define GLX_PBUFFER_WIDTH 0x8041 #ifndef GLEE_H_DEFINED_glXGetFBConfigs #define GLEE_H_DEFINED_glXGetFBConfigs typedef GLXFBConfig * (APIENTRYP GLEEPFNGLXGETFBCONFIGSPROC) (Display * dpy, int screen, int * nelements); GLEE_EXTERN GLEEPFNGLXGETFBCONFIGSPROC GLeeFuncPtr_glXGetFBConfigs; #define glXGetFBConfigs GLeeFuncPtr_glXGetFBConfigs #endif #ifndef GLEE_H_DEFINED_glXChooseFBConfig #define GLEE_H_DEFINED_glXChooseFBConfig typedef GLXFBConfig * (APIENTRYP GLEEPFNGLXCHOOSEFBCONFIGPROC) (Display * dpy, int screen, const int * attrib_list, int * nelements); GLEE_EXTERN GLEEPFNGLXCHOOSEFBCONFIGPROC GLeeFuncPtr_glXChooseFBConfig; #define glXChooseFBConfig GLeeFuncPtr_glXChooseFBConfig #endif #ifndef GLEE_H_DEFINED_glXGetFBConfigAttrib #define GLEE_H_DEFINED_glXGetFBConfigAttrib typedef int (APIENTRYP GLEEPFNGLXGETFBCONFIGATTRIBPROC) (Display * dpy, GLXFBConfig config, int attribute, int * value); GLEE_EXTERN GLEEPFNGLXGETFBCONFIGATTRIBPROC GLeeFuncPtr_glXGetFBConfigAttrib; #define glXGetFBConfigAttrib GLeeFuncPtr_glXGetFBConfigAttrib #endif #ifndef GLEE_H_DEFINED_glXGetVisualFromFBConfig #define GLEE_H_DEFINED_glXGetVisualFromFBConfig typedef XVisualInfo * (APIENTRYP GLEEPFNGLXGETVISUALFROMFBCONFIGPROC) (Display * dpy, GLXFBConfig config); GLEE_EXTERN GLEEPFNGLXGETVISUALFROMFBCONFIGPROC GLeeFuncPtr_glXGetVisualFromFBConfig; #define glXGetVisualFromFBConfig GLeeFuncPtr_glXGetVisualFromFBConfig #endif #ifndef GLEE_H_DEFINED_glXCreateWindow #define GLEE_H_DEFINED_glXCreateWindow typedef GLXWindow (APIENTRYP GLEEPFNGLXCREATEWINDOWPROC) (Display * dpy, GLXFBConfig config, Window win, const int * attrib_list); GLEE_EXTERN GLEEPFNGLXCREATEWINDOWPROC GLeeFuncPtr_glXCreateWindow; #define glXCreateWindow GLeeFuncPtr_glXCreateWindow #endif #ifndef GLEE_H_DEFINED_glXDestroyWindow #define GLEE_H_DEFINED_glXDestroyWindow typedef void (APIENTRYP GLEEPFNGLXDESTROYWINDOWPROC) (Display * dpy, GLXWindow win); GLEE_EXTERN GLEEPFNGLXDESTROYWINDOWPROC GLeeFuncPtr_glXDestroyWindow; #define glXDestroyWindow GLeeFuncPtr_glXDestroyWindow #endif #ifndef GLEE_H_DEFINED_glXCreatePixmap #define GLEE_H_DEFINED_glXCreatePixmap typedef GLXPixmap (APIENTRYP GLEEPFNGLXCREATEPIXMAPPROC) (Display * dpy, GLXFBConfig config, Pixmap pixmap, const int * attrib_list); GLEE_EXTERN GLEEPFNGLXCREATEPIXMAPPROC GLeeFuncPtr_glXCreatePixmap; #define glXCreatePixmap GLeeFuncPtr_glXCreatePixmap #endif #ifndef GLEE_H_DEFINED_glXDestroyPixmap #define GLEE_H_DEFINED_glXDestroyPixmap typedef void (APIENTRYP GLEEPFNGLXDESTROYPIXMAPPROC) (Display * dpy, GLXPixmap pixmap); GLEE_EXTERN GLEEPFNGLXDESTROYPIXMAPPROC GLeeFuncPtr_glXDestroyPixmap; #define glXDestroyPixmap GLeeFuncPtr_glXDestroyPixmap #endif #ifndef GLEE_H_DEFINED_glXCreatePbuffer #define GLEE_H_DEFINED_glXCreatePbuffer typedef GLXPbuffer (APIENTRYP GLEEPFNGLXCREATEPBUFFERPROC) (Display * dpy, GLXFBConfig config, const int * attrib_list); GLEE_EXTERN GLEEPFNGLXCREATEPBUFFERPROC GLeeFuncPtr_glXCreatePbuffer; #define glXCreatePbuffer GLeeFuncPtr_glXCreatePbuffer #endif #ifndef GLEE_H_DEFINED_glXDestroyPbuffer #define GLEE_H_DEFINED_glXDestroyPbuffer typedef void (APIENTRYP GLEEPFNGLXDESTROYPBUFFERPROC) (Display * dpy, GLXPbuffer pbuf); GLEE_EXTERN GLEEPFNGLXDESTROYPBUFFERPROC GLeeFuncPtr_glXDestroyPbuffer; #define glXDestroyPbuffer GLeeFuncPtr_glXDestroyPbuffer #endif #ifndef GLEE_H_DEFINED_glXQueryDrawable #define GLEE_H_DEFINED_glXQueryDrawable typedef void (APIENTRYP GLEEPFNGLXQUERYDRAWABLEPROC) (Display * dpy, GLXDrawable draw, int attribute, unsigned int * value); GLEE_EXTERN GLEEPFNGLXQUERYDRAWABLEPROC GLeeFuncPtr_glXQueryDrawable; #define glXQueryDrawable GLeeFuncPtr_glXQueryDrawable #endif #ifndef GLEE_H_DEFINED_glXCreateNewContext #define GLEE_H_DEFINED_glXCreateNewContext typedef GLXContext (APIENTRYP GLEEPFNGLXCREATENEWCONTEXTPROC) (Display * dpy, GLXFBConfig config, int render_type, GLXContext share_list, Bool direct); GLEE_EXTERN GLEEPFNGLXCREATENEWCONTEXTPROC GLeeFuncPtr_glXCreateNewContext; #define glXCreateNewContext GLeeFuncPtr_glXCreateNewContext #endif #ifndef GLEE_H_DEFINED_glXMakeContextCurrent #define GLEE_H_DEFINED_glXMakeContextCurrent typedef Bool (APIENTRYP GLEEPFNGLXMAKECONTEXTCURRENTPROC) (Display * dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx); GLEE_EXTERN GLEEPFNGLXMAKECONTEXTCURRENTPROC GLeeFuncPtr_glXMakeContextCurrent; #define glXMakeContextCurrent GLeeFuncPtr_glXMakeContextCurrent #endif #ifndef GLEE_H_DEFINED_glXGetCurrentReadDrawable #define GLEE_H_DEFINED_glXGetCurrentReadDrawable typedef GLXDrawable (APIENTRYP GLEEPFNGLXGETCURRENTREADDRAWABLEPROC) (); GLEE_EXTERN GLEEPFNGLXGETCURRENTREADDRAWABLEPROC GLeeFuncPtr_glXGetCurrentReadDrawable; #define glXGetCurrentReadDrawable GLeeFuncPtr_glXGetCurrentReadDrawable #endif #ifndef GLEE_H_DEFINED_glXGetCurrentDisplay #define GLEE_H_DEFINED_glXGetCurrentDisplay typedef Display * (APIENTRYP GLEEPFNGLXGETCURRENTDISPLAYPROC) (); GLEE_EXTERN GLEEPFNGLXGETCURRENTDISPLAYPROC GLeeFuncPtr_glXGetCurrentDisplay; #define glXGetCurrentDisplay GLeeFuncPtr_glXGetCurrentDisplay #endif #ifndef GLEE_H_DEFINED_glXQueryContext #define GLEE_H_DEFINED_glXQueryContext typedef int (APIENTRYP GLEEPFNGLXQUERYCONTEXTPROC) (Display * dpy, GLXContext ctx, int attribute, int * value); GLEE_EXTERN GLEEPFNGLXQUERYCONTEXTPROC GLeeFuncPtr_glXQueryContext; #define glXQueryContext GLeeFuncPtr_glXQueryContext #endif #ifndef GLEE_H_DEFINED_glXSelectEvent #define GLEE_H_DEFINED_glXSelectEvent typedef void (APIENTRYP GLEEPFNGLXSELECTEVENTPROC) (Display * dpy, GLXDrawable draw, unsigned long event_mask); GLEE_EXTERN GLEEPFNGLXSELECTEVENTPROC GLeeFuncPtr_glXSelectEvent; #define glXSelectEvent GLeeFuncPtr_glXSelectEvent #endif #ifndef GLEE_H_DEFINED_glXGetSelectedEvent #define GLEE_H_DEFINED_glXGetSelectedEvent typedef void (APIENTRYP GLEEPFNGLXGETSELECTEDEVENTPROC) (Display * dpy, GLXDrawable draw, unsigned long * event_mask); GLEE_EXTERN GLEEPFNGLXGETSELECTEDEVENTPROC GLeeFuncPtr_glXGetSelectedEvent; #define glXGetSelectedEvent GLeeFuncPtr_glXGetSelectedEvent #endif #endif /* GLX_VERSION_1_4 */ #ifndef GLX_VERSION_1_4 #define GLX_VERSION_1_4 1 #define __GLEE_GLX_VERSION_1_4 1 /* Constants */ #define GLX_SAMPLE_BUFFERS 100000 #define GLX_SAMPLES 100001 #ifndef GLEE_H_DEFINED_glXGetProcAddress #define GLEE_H_DEFINED_glXGetProcAddress //typedef __GLXextFuncPtr (APIENTRYP GLEEPFNGLXGETPROCADDRESSPROC) (const GLubyte * procName); GLEE_EXTERN GLEEPFNGLXGETPROCADDRESSPROC GLeeFuncPtr_glXGetProcAddress; #define glXGetProcAddress GLeeFuncPtr_glXGetProcAddress #endif #endif /* GLX_ARB_multisample */ #ifndef GLX_ARB_multisample #define GLX_ARB_multisample 1 #define __GLEE_GLX_ARB_multisample 1 /* Constants */ #define GLX_SAMPLE_BUFFERS_ARB 100000 #define GLX_SAMPLES_ARB 100001 #endif /* GLX_ARB_fbconfig_float */ #ifndef GLX_ARB_fbconfig_float #define GLX_ARB_fbconfig_float 1 #define __GLEE_GLX_ARB_fbconfig_float 1 /* Constants */ #define GLX_RGBA_FLOAT_TYPE_ARB 0x20B9 #define GLX_RGBA_FLOAT_BIT_ARB 0x00000004 #endif /* GLX_ARB_create_context */ #ifndef GLX_ARB_create_context #define GLX_ARB_create_context 1 #define __GLEE_GLX_ARB_create_context 1 /* Constants */ #define GLX_CONTEXT_DEBUG_BIT_ARB 0x00000001 #define GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x00000002 #define GLX_CONTEXT_MAJOR_VERSION_ARB 0x2091 #define GLX_CONTEXT_MINOR_VERSION_ARB 0x2092 #define GLX_CONTEXT_FLAGS_ARB 0x2094 #ifndef GLEE_H_DEFINED_glXCreateContextAttribsARB #define GLEE_H_DEFINED_glXCreateContextAttribsARB typedef GLXContext (APIENTRYP GLEEPFNGLXCREATECONTEXTATTRIBSARBPROC) (Display * dpy, GLXFBConfig config, GLXContext share_context, Bool direct, const int * attrib_list); GLEE_EXTERN GLEEPFNGLXCREATECONTEXTATTRIBSARBPROC GLeeFuncPtr_glXCreateContextAttribsARB; #define glXCreateContextAttribsARB GLeeFuncPtr_glXCreateContextAttribsARB #endif #endif /* GLX_SGIS_multisample */ #ifndef GLX_SGIS_multisample #define GLX_SGIS_multisample 1 #define __GLEE_GLX_SGIS_multisample 1 /* Constants */ #define GLX_SAMPLE_BUFFERS_SGIS 100000 #define GLX_SAMPLES_SGIS 100001 #endif /* GLX_EXT_visual_info */ #ifndef GLX_EXT_visual_info #define GLX_EXT_visual_info 1 #define __GLEE_GLX_EXT_visual_info 1 /* Constants */ #define GLX_X_VISUAL_TYPE_EXT 0x22 #define GLX_TRANSPARENT_TYPE_EXT 0x23 #define GLX_TRANSPARENT_INDEX_VALUE_EXT 0x24 #define GLX_TRANSPARENT_RED_VALUE_EXT 0x25 #define GLX_TRANSPARENT_GREEN_VALUE_EXT 0x26 #define GLX_TRANSPARENT_BLUE_VALUE_EXT 0x27 #define GLX_TRANSPARENT_ALPHA_VALUE_EXT 0x28 #define GLX_NONE_EXT 0x8000 #define GLX_TRUE_COLOR_EXT 0x8002 #define GLX_DIRECT_COLOR_EXT 0x8003 #define GLX_PSEUDO_COLOR_EXT 0x8004 #define GLX_STATIC_COLOR_EXT 0x8005 #define GLX_GRAY_SCALE_EXT 0x8006 #define GLX_STATIC_GRAY_EXT 0x8007 #define GLX_TRANSPARENT_RGB_EXT 0x8008 #define GLX_TRANSPARENT_INDEX_EXT 0x8009 #endif /* GLX_SGI_swap_control */ #ifndef GLX_SGI_swap_control #define GLX_SGI_swap_control 1 #define __GLEE_GLX_SGI_swap_control 1 /* Constants */ #ifndef GLEE_H_DEFINED_glXSwapIntervalSGI #define GLEE_H_DEFINED_glXSwapIntervalSGI typedef int (APIENTRYP GLEEPFNGLXSWAPINTERVALSGIPROC) (int interval); GLEE_EXTERN GLEEPFNGLXSWAPINTERVALSGIPROC GLeeFuncPtr_glXSwapIntervalSGI; #define glXSwapIntervalSGI GLeeFuncPtr_glXSwapIntervalSGI #endif #endif /* GLX_SGI_video_sync */ #ifndef GLX_SGI_video_sync #define GLX_SGI_video_sync 1 #define __GLEE_GLX_SGI_video_sync 1 /* Constants */ #ifndef GLEE_H_DEFINED_glXGetVideoSyncSGI #define GLEE_H_DEFINED_glXGetVideoSyncSGI typedef int (APIENTRYP GLEEPFNGLXGETVIDEOSYNCSGIPROC) (unsigned int * count); GLEE_EXTERN GLEEPFNGLXGETVIDEOSYNCSGIPROC GLeeFuncPtr_glXGetVideoSyncSGI; #define glXGetVideoSyncSGI GLeeFuncPtr_glXGetVideoSyncSGI #endif #ifndef GLEE_H_DEFINED_glXWaitVideoSyncSGI #define GLEE_H_DEFINED_glXWaitVideoSyncSGI typedef int (APIENTRYP GLEEPFNGLXWAITVIDEOSYNCSGIPROC) (int divisor, int remainder, unsigned int * count); GLEE_EXTERN GLEEPFNGLXWAITVIDEOSYNCSGIPROC GLeeFuncPtr_glXWaitVideoSyncSGI; #define glXWaitVideoSyncSGI GLeeFuncPtr_glXWaitVideoSyncSGI #endif #endif /* GLX_SGI_make_current_read */ #ifndef GLX_SGI_make_current_read #define GLX_SGI_make_current_read 1 #define __GLEE_GLX_SGI_make_current_read 1 /* Constants */ #ifndef GLEE_H_DEFINED_glXMakeCurrentReadSGI #define GLEE_H_DEFINED_glXMakeCurrentReadSGI typedef Bool (APIENTRYP GLEEPFNGLXMAKECURRENTREADSGIPROC) (Display * dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx); GLEE_EXTERN GLEEPFNGLXMAKECURRENTREADSGIPROC GLeeFuncPtr_glXMakeCurrentReadSGI; #define glXMakeCurrentReadSGI GLeeFuncPtr_glXMakeCurrentReadSGI #endif #ifndef GLEE_H_DEFINED_glXGetCurrentReadDrawableSGI #define GLEE_H_DEFINED_glXGetCurrentReadDrawableSGI typedef GLXDrawable (APIENTRYP GLEEPFNGLXGETCURRENTREADDRAWABLESGIPROC) (); GLEE_EXTERN GLEEPFNGLXGETCURRENTREADDRAWABLESGIPROC GLeeFuncPtr_glXGetCurrentReadDrawableSGI; #define glXGetCurrentReadDrawableSGI GLeeFuncPtr_glXGetCurrentReadDrawableSGI #endif #endif /* GLX_EXT_visual_rating */ #ifndef GLX_EXT_visual_rating #define GLX_EXT_visual_rating 1 #define __GLEE_GLX_EXT_visual_rating 1 /* Constants */ #define GLX_VISUAL_CAVEAT_EXT 0x20 #define GLX_SLOW_VISUAL_EXT 0x8001 #define GLX_NON_CONFORMANT_VISUAL_EXT 0x800D #endif /* GLX_EXT_import_context */ #ifndef GLX_EXT_import_context #define GLX_EXT_import_context 1 #define __GLEE_GLX_EXT_import_context 1 /* Constants */ #define GLX_SHARE_CONTEXT_EXT 0x800A #define GLX_VISUAL_ID_EXT 0x800B #define GLX_SCREEN_EXT 0x800C #ifndef GLEE_H_DEFINED_glXGetCurrentDisplayEXT #define GLEE_H_DEFINED_glXGetCurrentDisplayEXT typedef Display * (APIENTRYP GLEEPFNGLXGETCURRENTDISPLAYEXTPROC) (); GLEE_EXTERN GLEEPFNGLXGETCURRENTDISPLAYEXTPROC GLeeFuncPtr_glXGetCurrentDisplayEXT; #define glXGetCurrentDisplayEXT GLeeFuncPtr_glXGetCurrentDisplayEXT #endif #ifndef GLEE_H_DEFINED_glXQueryContextInfoEXT #define GLEE_H_DEFINED_glXQueryContextInfoEXT typedef int (APIENTRYP GLEEPFNGLXQUERYCONTEXTINFOEXTPROC) (Display * dpy, GLXContext context, int attribute, int * value); GLEE_EXTERN GLEEPFNGLXQUERYCONTEXTINFOEXTPROC GLeeFuncPtr_glXQueryContextInfoEXT; #define glXQueryContextInfoEXT GLeeFuncPtr_glXQueryContextInfoEXT #endif #ifndef GLEE_H_DEFINED_glXGetContextIDEXT #define GLEE_H_DEFINED_glXGetContextIDEXT typedef GLXContextID (APIENTRYP GLEEPFNGLXGETCONTEXTIDEXTPROC) (const GLXContext context); GLEE_EXTERN GLEEPFNGLXGETCONTEXTIDEXTPROC GLeeFuncPtr_glXGetContextIDEXT; #define glXGetContextIDEXT GLeeFuncPtr_glXGetContextIDEXT #endif #ifndef GLEE_H_DEFINED_glXImportContextEXT #define GLEE_H_DEFINED_glXImportContextEXT typedef GLXContext (APIENTRYP GLEEPFNGLXIMPORTCONTEXTEXTPROC) (Display * dpy, GLXContextID contextID); GLEE_EXTERN GLEEPFNGLXIMPORTCONTEXTEXTPROC GLeeFuncPtr_glXImportContextEXT; #define glXImportContextEXT GLeeFuncPtr_glXImportContextEXT #endif #ifndef GLEE_H_DEFINED_glXFreeContextEXT #define GLEE_H_DEFINED_glXFreeContextEXT typedef void (APIENTRYP GLEEPFNGLXFREECONTEXTEXTPROC) (Display * dpy, GLXContext context); GLEE_EXTERN GLEEPFNGLXFREECONTEXTEXTPROC GLeeFuncPtr_glXFreeContextEXT; #define glXFreeContextEXT GLeeFuncPtr_glXFreeContextEXT #endif #endif /* GLX_SGIX_fbconfig */ #ifndef GLX_SGIX_fbconfig #define GLX_SGIX_fbconfig 1 #define __GLEE_GLX_SGIX_fbconfig 1 /* Constants */ #define GLX_WINDOW_BIT_SGIX 0x00000001 #define GLX_PIXMAP_BIT_SGIX 0x00000002 #define GLX_RGBA_BIT_SGIX 0x00000001 #define GLX_COLOR_INDEX_BIT_SGIX 0x00000002 #define GLX_DRAWABLE_TYPE_SGIX 0x8010 #define GLX_RENDER_TYPE_SGIX 0x8011 #define GLX_X_RENDERABLE_SGIX 0x8012 #define GLX_FBCONFIG_ID_SGIX 0x8013 #define GLX_RGBA_TYPE_SGIX 0x8014 #define GLX_COLOR_INDEX_TYPE_SGIX 0x8015 #ifndef GLEE_H_DEFINED_glXGetFBConfigAttribSGIX #define GLEE_H_DEFINED_glXGetFBConfigAttribSGIX typedef int (APIENTRYP GLEEPFNGLXGETFBCONFIGATTRIBSGIXPROC) (Display * dpy, GLXFBConfigSGIX config, int attribute, int * value); GLEE_EXTERN GLEEPFNGLXGETFBCONFIGATTRIBSGIXPROC GLeeFuncPtr_glXGetFBConfigAttribSGIX; #define glXGetFBConfigAttribSGIX GLeeFuncPtr_glXGetFBConfigAttribSGIX #endif #ifndef GLEE_H_DEFINED_glXChooseFBConfigSGIX #define GLEE_H_DEFINED_glXChooseFBConfigSGIX typedef GLXFBConfigSGIX * (APIENTRYP GLEEPFNGLXCHOOSEFBCONFIGSGIXPROC) (Display * dpy, int screen, int * attrib_list, int * nelements); GLEE_EXTERN GLEEPFNGLXCHOOSEFBCONFIGSGIXPROC GLeeFuncPtr_glXChooseFBConfigSGIX; #define glXChooseFBConfigSGIX GLeeFuncPtr_glXChooseFBConfigSGIX #endif #ifndef GLEE_H_DEFINED_glXCreateGLXPixmapWithConfigSGIX #define GLEE_H_DEFINED_glXCreateGLXPixmapWithConfigSGIX typedef GLXPixmap (APIENTRYP GLEEPFNGLXCREATEGLXPIXMAPWITHCONFIGSGIXPROC) (Display * dpy, GLXFBConfigSGIX config, Pixmap pixmap); GLEE_EXTERN GLEEPFNGLXCREATEGLXPIXMAPWITHCONFIGSGIXPROC GLeeFuncPtr_glXCreateGLXPixmapWithConfigSGIX; #define glXCreateGLXPixmapWithConfigSGIX GLeeFuncPtr_glXCreateGLXPixmapWithConfigSGIX #endif #ifndef GLEE_H_DEFINED_glXCreateContextWithConfigSGIX #define GLEE_H_DEFINED_glXCreateContextWithConfigSGIX typedef GLXContext (APIENTRYP GLEEPFNGLXCREATECONTEXTWITHCONFIGSGIXPROC) (Display * dpy, GLXFBConfigSGIX config, int render_type, GLXContext share_list, Bool direct); GLEE_EXTERN GLEEPFNGLXCREATECONTEXTWITHCONFIGSGIXPROC GLeeFuncPtr_glXCreateContextWithConfigSGIX; #define glXCreateContextWithConfigSGIX GLeeFuncPtr_glXCreateContextWithConfigSGIX #endif #ifndef GLEE_H_DEFINED_glXGetVisualFromFBConfigSGIX #define GLEE_H_DEFINED_glXGetVisualFromFBConfigSGIX typedef XVisualInfo * (APIENTRYP GLEEPFNGLXGETVISUALFROMFBCONFIGSGIXPROC) (Display * dpy, GLXFBConfigSGIX config); GLEE_EXTERN GLEEPFNGLXGETVISUALFROMFBCONFIGSGIXPROC GLeeFuncPtr_glXGetVisualFromFBConfigSGIX; #define glXGetVisualFromFBConfigSGIX GLeeFuncPtr_glXGetVisualFromFBConfigSGIX #endif #ifndef GLEE_H_DEFINED_glXGetFBConfigFromVisualSGIX #define GLEE_H_DEFINED_glXGetFBConfigFromVisualSGIX typedef GLXFBConfigSGIX (APIENTRYP GLEEPFNGLXGETFBCONFIGFROMVISUALSGIXPROC) (Display * dpy, XVisualInfo * vis); GLEE_EXTERN GLEEPFNGLXGETFBCONFIGFROMVISUALSGIXPROC GLeeFuncPtr_glXGetFBConfigFromVisualSGIX; #define glXGetFBConfigFromVisualSGIX GLeeFuncPtr_glXGetFBConfigFromVisualSGIX #endif #endif /* GLX_SGIX_pbuffer */ #ifndef GLX_SGIX_pbuffer #define GLX_SGIX_pbuffer 1 #define __GLEE_GLX_SGIX_pbuffer 1 /* Constants */ #define GLX_PBUFFER_BIT_SGIX 0x00000004 #define GLX_BUFFER_CLOBBER_MASK_SGIX 0x08000000 #define GLX_FRONT_LEFT_BUFFER_BIT_SGIX 0x00000001 #define GLX_FRONT_RIGHT_BUFFER_BIT_SGIX 0x00000002 #define GLX_BACK_LEFT_BUFFER_BIT_SGIX 0x00000004 #define GLX_BACK_RIGHT_BUFFER_BIT_SGIX 0x00000008 #define GLX_AUX_BUFFERS_BIT_SGIX 0x00000010 #define GLX_DEPTH_BUFFER_BIT_SGIX 0x00000020 #define GLX_STENCIL_BUFFER_BIT_SGIX 0x00000040 #define GLX_ACCUM_BUFFER_BIT_SGIX 0x00000080 #define GLX_SAMPLE_BUFFERS_BIT_SGIX 0x00000100 #define GLX_MAX_PBUFFER_WIDTH_SGIX 0x8016 #define GLX_MAX_PBUFFER_HEIGHT_SGIX 0x8017 #define GLX_MAX_PBUFFER_PIXELS_SGIX 0x8018 #define GLX_OPTIMAL_PBUFFER_WIDTH_SGIX 0x8019 #define GLX_OPTIMAL_PBUFFER_HEIGHT_SGIX 0x801A #define GLX_PRESERVED_CONTENTS_SGIX 0x801B #define GLX_LARGEST_PBUFFER_SGIX 0x801C #define GLX_WIDTH_SGIX 0x801D #define GLX_HEIGHT_SGIX 0x801E #define GLX_EVENT_MASK_SGIX 0x801F #define GLX_DAMAGED_SGIX 0x8020 #define GLX_SAVED_SGIX 0x8021 #define GLX_WINDOW_SGIX 0x8022 #define GLX_PBUFFER_SGIX 0x8023 #ifndef GLEE_H_DEFINED_glXCreateGLXPbufferSGIX #define GLEE_H_DEFINED_glXCreateGLXPbufferSGIX typedef GLXPbufferSGIX (APIENTRYP GLEEPFNGLXCREATEGLXPBUFFERSGIXPROC) (Display * dpy, GLXFBConfigSGIX config, unsigned int width, unsigned int height, int * attrib_list); GLEE_EXTERN GLEEPFNGLXCREATEGLXPBUFFERSGIXPROC GLeeFuncPtr_glXCreateGLXPbufferSGIX; #define glXCreateGLXPbufferSGIX GLeeFuncPtr_glXCreateGLXPbufferSGIX #endif #ifndef GLEE_H_DEFINED_glXDestroyGLXPbufferSGIX #define GLEE_H_DEFINED_glXDestroyGLXPbufferSGIX typedef void (APIENTRYP GLEEPFNGLXDESTROYGLXPBUFFERSGIXPROC) (Display * dpy, GLXPbufferSGIX pbuf); GLEE_EXTERN GLEEPFNGLXDESTROYGLXPBUFFERSGIXPROC GLeeFuncPtr_glXDestroyGLXPbufferSGIX; #define glXDestroyGLXPbufferSGIX GLeeFuncPtr_glXDestroyGLXPbufferSGIX #endif #ifndef GLEE_H_DEFINED_glXQueryGLXPbufferSGIX #define GLEE_H_DEFINED_glXQueryGLXPbufferSGIX typedef int (APIENTRYP GLEEPFNGLXQUERYGLXPBUFFERSGIXPROC) (Display * dpy, GLXPbufferSGIX pbuf, int attribute, unsigned int * value); GLEE_EXTERN GLEEPFNGLXQUERYGLXPBUFFERSGIXPROC GLeeFuncPtr_glXQueryGLXPbufferSGIX; #define glXQueryGLXPbufferSGIX GLeeFuncPtr_glXQueryGLXPbufferSGIX #endif #ifndef GLEE_H_DEFINED_glXSelectEventSGIX #define GLEE_H_DEFINED_glXSelectEventSGIX typedef void (APIENTRYP GLEEPFNGLXSELECTEVENTSGIXPROC) (Display * dpy, GLXDrawable drawable, unsigned long mask); GLEE_EXTERN GLEEPFNGLXSELECTEVENTSGIXPROC GLeeFuncPtr_glXSelectEventSGIX; #define glXSelectEventSGIX GLeeFuncPtr_glXSelectEventSGIX #endif #ifndef GLEE_H_DEFINED_glXGetSelectedEventSGIX #define GLEE_H_DEFINED_glXGetSelectedEventSGIX typedef void (APIENTRYP GLEEPFNGLXGETSELECTEDEVENTSGIXPROC) (Display * dpy, GLXDrawable drawable, unsigned long * mask); GLEE_EXTERN GLEEPFNGLXGETSELECTEDEVENTSGIXPROC GLeeFuncPtr_glXGetSelectedEventSGIX; #define glXGetSelectedEventSGIX GLeeFuncPtr_glXGetSelectedEventSGIX #endif #endif /* GLX_SGI_cushion */ #ifndef GLX_SGI_cushion #define GLX_SGI_cushion 1 #define __GLEE_GLX_SGI_cushion 1 /* Constants */ #ifndef GLEE_H_DEFINED_glXCushionSGI #define GLEE_H_DEFINED_glXCushionSGI typedef void (APIENTRYP GLEEPFNGLXCUSHIONSGIPROC) (Display * dpy, Window window, float cushion); GLEE_EXTERN GLEEPFNGLXCUSHIONSGIPROC GLeeFuncPtr_glXCushionSGI; #define glXCushionSGI GLeeFuncPtr_glXCushionSGI #endif #endif /* GLX_SGIX_video_resize */ #ifndef GLX_SGIX_video_resize #define GLX_SGIX_video_resize 1 #define __GLEE_GLX_SGIX_video_resize 1 /* Constants */ #define GLX_SYNC_FRAME_SGIX 0x00000000 #define GLX_SYNC_SWAP_SGIX 0x00000001 #ifndef GLEE_H_DEFINED_glXBindChannelToWindowSGIX #define GLEE_H_DEFINED_glXBindChannelToWindowSGIX typedef int (APIENTRYP GLEEPFNGLXBINDCHANNELTOWINDOWSGIXPROC) (Display * display, int screen, int channel, Window window); GLEE_EXTERN GLEEPFNGLXBINDCHANNELTOWINDOWSGIXPROC GLeeFuncPtr_glXBindChannelToWindowSGIX; #define glXBindChannelToWindowSGIX GLeeFuncPtr_glXBindChannelToWindowSGIX #endif #ifndef GLEE_H_DEFINED_glXChannelRectSGIX #define GLEE_H_DEFINED_glXChannelRectSGIX typedef int (APIENTRYP GLEEPFNGLXCHANNELRECTSGIXPROC) (Display * display, int screen, int channel, int x, int y, int w, int h); GLEE_EXTERN GLEEPFNGLXCHANNELRECTSGIXPROC GLeeFuncPtr_glXChannelRectSGIX; #define glXChannelRectSGIX GLeeFuncPtr_glXChannelRectSGIX #endif #ifndef GLEE_H_DEFINED_glXQueryChannelRectSGIX #define GLEE_H_DEFINED_glXQueryChannelRectSGIX typedef int (APIENTRYP GLEEPFNGLXQUERYCHANNELRECTSGIXPROC) (Display * display, int screen, int channel, int * dx, int * dy, int * dw, int * dh); GLEE_EXTERN GLEEPFNGLXQUERYCHANNELRECTSGIXPROC GLeeFuncPtr_glXQueryChannelRectSGIX; #define glXQueryChannelRectSGIX GLeeFuncPtr_glXQueryChannelRectSGIX #endif #ifndef GLEE_H_DEFINED_glXQueryChannelDeltasSGIX #define GLEE_H_DEFINED_glXQueryChannelDeltasSGIX typedef int (APIENTRYP GLEEPFNGLXQUERYCHANNELDELTASSGIXPROC) (Display * display, int screen, int channel, int * x, int * y, int * w, int * h); GLEE_EXTERN GLEEPFNGLXQUERYCHANNELDELTASSGIXPROC GLeeFuncPtr_glXQueryChannelDeltasSGIX; #define glXQueryChannelDeltasSGIX GLeeFuncPtr_glXQueryChannelDeltasSGIX #endif #ifndef GLEE_H_DEFINED_glXChannelRectSyncSGIX #define GLEE_H_DEFINED_glXChannelRectSyncSGIX typedef int (APIENTRYP GLEEPFNGLXCHANNELRECTSYNCSGIXPROC) (Display * display, int screen, int channel, GLenum synctype); GLEE_EXTERN GLEEPFNGLXCHANNELRECTSYNCSGIXPROC GLeeFuncPtr_glXChannelRectSyncSGIX; #define glXChannelRectSyncSGIX GLeeFuncPtr_glXChannelRectSyncSGIX #endif #endif /* GLX_SGIX_swap_group */ #ifndef GLX_SGIX_swap_group #define GLX_SGIX_swap_group 1 #define __GLEE_GLX_SGIX_swap_group 1 /* Constants */ #ifndef GLEE_H_DEFINED_glXJoinSwapGroupSGIX #define GLEE_H_DEFINED_glXJoinSwapGroupSGIX typedef void (APIENTRYP GLEEPFNGLXJOINSWAPGROUPSGIXPROC) (Display * dpy, GLXDrawable drawable, GLXDrawable member); GLEE_EXTERN GLEEPFNGLXJOINSWAPGROUPSGIXPROC GLeeFuncPtr_glXJoinSwapGroupSGIX; #define glXJoinSwapGroupSGIX GLeeFuncPtr_glXJoinSwapGroupSGIX #endif #endif /* GLX_SGIX_swap_barrier */ #ifndef GLX_SGIX_swap_barrier #define GLX_SGIX_swap_barrier 1 #define __GLEE_GLX_SGIX_swap_barrier 1 /* Constants */ #ifndef GLEE_H_DEFINED_glXBindSwapBarrierSGIX #define GLEE_H_DEFINED_glXBindSwapBarrierSGIX typedef void (APIENTRYP GLEEPFNGLXBINDSWAPBARRIERSGIXPROC) (Display * dpy, GLXDrawable drawable, int barrier); GLEE_EXTERN GLEEPFNGLXBINDSWAPBARRIERSGIXPROC GLeeFuncPtr_glXBindSwapBarrierSGIX; #define glXBindSwapBarrierSGIX GLeeFuncPtr_glXBindSwapBarrierSGIX #endif #ifndef GLEE_H_DEFINED_glXQueryMaxSwapBarriersSGIX #define GLEE_H_DEFINED_glXQueryMaxSwapBarriersSGIX typedef Bool (APIENTRYP GLEEPFNGLXQUERYMAXSWAPBARRIERSSGIXPROC) (Display * dpy, int screen, int * max); GLEE_EXTERN GLEEPFNGLXQUERYMAXSWAPBARRIERSSGIXPROC GLeeFuncPtr_glXQueryMaxSwapBarriersSGIX; #define glXQueryMaxSwapBarriersSGIX GLeeFuncPtr_glXQueryMaxSwapBarriersSGIX #endif #endif /* GLX_SGIS_blended_overlay */ #ifndef GLX_SGIS_blended_overlay #define GLX_SGIS_blended_overlay 1 #define __GLEE_GLX_SGIS_blended_overlay 1 /* Constants */ #define GLX_BLENDED_RGBA_SGIS 0x8025 #endif /* GLX_SGIS_shared_multisample */ #ifndef GLX_SGIS_shared_multisample #define GLX_SGIS_shared_multisample 1 #define __GLEE_GLX_SGIS_shared_multisample 1 /* Constants */ #define GLX_MULTISAMPLE_SUB_RECT_WIDTH_SGIS 0x8026 #define GLX_MULTISAMPLE_SUB_RECT_HEIGHT_SGIS 0x8027 #endif /* GLX_SUN_get_transparent_index */ #ifndef GLX_SUN_get_transparent_index #define GLX_SUN_get_transparent_index 1 #define __GLEE_GLX_SUN_get_transparent_index 1 /* Constants */ #ifndef GLEE_H_DEFINED_glXGetTransparentIndexSUN #define GLEE_H_DEFINED_glXGetTransparentIndexSUN typedef Status (APIENTRYP GLEEPFNGLXGETTRANSPARENTINDEXSUNPROC) (Display * dpy, Window overlay, Window underlay, long * pTransparentIndex); GLEE_EXTERN GLEEPFNGLXGETTRANSPARENTINDEXSUNPROC GLeeFuncPtr_glXGetTransparentIndexSUN; #define glXGetTransparentIndexSUN GLeeFuncPtr_glXGetTransparentIndexSUN #endif #endif /* GLX_3DFX_multisample */ #ifndef GLX_3DFX_multisample #define GLX_3DFX_multisample 1 #define __GLEE_GLX_3DFX_multisample 1 /* Constants */ #define GLX_SAMPLE_BUFFERS_3DFX 0x8050 #define GLX_SAMPLES_3DFX 0x8051 #endif /* GLX_MESA_copy_sub_buffer */ #ifndef GLX_MESA_copy_sub_buffer #define GLX_MESA_copy_sub_buffer 1 #define __GLEE_GLX_MESA_copy_sub_buffer 1 /* Constants */ #ifndef GLEE_H_DEFINED_glXCopySubBufferMESA #define GLEE_H_DEFINED_glXCopySubBufferMESA typedef void (APIENTRYP GLEEPFNGLXCOPYSUBBUFFERMESAPROC) (Display * dpy, GLXDrawable drawable, int x, int y, int width, int height); GLEE_EXTERN GLEEPFNGLXCOPYSUBBUFFERMESAPROC GLeeFuncPtr_glXCopySubBufferMESA; #define glXCopySubBufferMESA GLeeFuncPtr_glXCopySubBufferMESA #endif #endif /* GLX_MESA_pixmap_colormap */ #ifndef GLX_MESA_pixmap_colormap #define GLX_MESA_pixmap_colormap 1 #define __GLEE_GLX_MESA_pixmap_colormap 1 /* Constants */ #ifndef GLEE_H_DEFINED_glXCreateGLXPixmapMESA #define GLEE_H_DEFINED_glXCreateGLXPixmapMESA typedef GLXPixmap (APIENTRYP GLEEPFNGLXCREATEGLXPIXMAPMESAPROC) (Display * dpy, XVisualInfo * visual, Pixmap pixmap, Colormap cmap); GLEE_EXTERN GLEEPFNGLXCREATEGLXPIXMAPMESAPROC GLeeFuncPtr_glXCreateGLXPixmapMESA; #define glXCreateGLXPixmapMESA GLeeFuncPtr_glXCreateGLXPixmapMESA #endif #endif /* GLX_MESA_release_buffers */ #ifndef GLX_MESA_release_buffers #define GLX_MESA_release_buffers 1 #define __GLEE_GLX_MESA_release_buffers 1 /* Constants */ #ifndef GLEE_H_DEFINED_glXReleaseBuffersMESA #define GLEE_H_DEFINED_glXReleaseBuffersMESA typedef Bool (APIENTRYP GLEEPFNGLXRELEASEBUFFERSMESAPROC) (Display * dpy, GLXDrawable drawable); GLEE_EXTERN GLEEPFNGLXRELEASEBUFFERSMESAPROC GLeeFuncPtr_glXReleaseBuffersMESA; #define glXReleaseBuffersMESA GLeeFuncPtr_glXReleaseBuffersMESA #endif #endif /* GLX_MESA_set_3dfx_mode */ #ifndef GLX_MESA_set_3dfx_mode #define GLX_MESA_set_3dfx_mode 1 #define __GLEE_GLX_MESA_set_3dfx_mode 1 /* Constants */ #define GLX_3DFX_WINDOW_MODE_MESA 0x1 #define GLX_3DFX_FULLSCREEN_MODE_MESA 0x2 #ifndef GLEE_H_DEFINED_glXSet3DfxModeMESA #define GLEE_H_DEFINED_glXSet3DfxModeMESA typedef Bool (APIENTRYP GLEEPFNGLXSET3DFXMODEMESAPROC) (int mode); GLEE_EXTERN GLEEPFNGLXSET3DFXMODEMESAPROC GLeeFuncPtr_glXSet3DfxModeMESA; #define glXSet3DfxModeMESA GLeeFuncPtr_glXSet3DfxModeMESA #endif #endif /* GLX_SGIX_visual_select_group */ #ifndef GLX_SGIX_visual_select_group #define GLX_SGIX_visual_select_group 1 #define __GLEE_GLX_SGIX_visual_select_group 1 /* Constants */ #define GLX_VISUAL_SELECT_GROUP_SGIX 0x8028 #endif /* GLX_OML_swap_method */ #ifndef GLX_OML_swap_method #define GLX_OML_swap_method 1 #define __GLEE_GLX_OML_swap_method 1 /* Constants */ #define GLX_SWAP_METHOD_OML 0x8060 #define GLX_SWAP_EXCHANGE_OML 0x8061 #define GLX_SWAP_COPY_OML 0x8062 #define GLX_SWAP_UNDEFINED_OML 0x8063 #endif /* GLX_OML_sync_control */ #ifndef GLX_OML_sync_control #define GLX_OML_sync_control 1 #define __GLEE_GLX_OML_sync_control 1 /* Constants */ #ifndef GLEE_H_DEFINED_glXGetSyncValuesOML #define GLEE_H_DEFINED_glXGetSyncValuesOML typedef Bool (APIENTRYP GLEEPFNGLXGETSYNCVALUESOMLPROC) (Display * dpy, GLXDrawable drawable, int64_t * ust, int64_t * msc, int64_t * sbc); GLEE_EXTERN GLEEPFNGLXGETSYNCVALUESOMLPROC GLeeFuncPtr_glXGetSyncValuesOML; #define glXGetSyncValuesOML GLeeFuncPtr_glXGetSyncValuesOML #endif #ifndef GLEE_H_DEFINED_glXGetMscRateOML #define GLEE_H_DEFINED_glXGetMscRateOML typedef Bool (APIENTRYP GLEEPFNGLXGETMSCRATEOMLPROC) (Display * dpy, GLXDrawable drawable, int32_t * numerator, int32_t * denominator); GLEE_EXTERN GLEEPFNGLXGETMSCRATEOMLPROC GLeeFuncPtr_glXGetMscRateOML; #define glXGetMscRateOML GLeeFuncPtr_glXGetMscRateOML #endif #ifndef GLEE_H_DEFINED_glXSwapBuffersMscOML #define GLEE_H_DEFINED_glXSwapBuffersMscOML typedef int64_t (APIENTRYP GLEEPFNGLXSWAPBUFFERSMSCOMLPROC) (Display * dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder); GLEE_EXTERN GLEEPFNGLXSWAPBUFFERSMSCOMLPROC GLeeFuncPtr_glXSwapBuffersMscOML; #define glXSwapBuffersMscOML GLeeFuncPtr_glXSwapBuffersMscOML #endif #ifndef GLEE_H_DEFINED_glXWaitForMscOML #define GLEE_H_DEFINED_glXWaitForMscOML typedef Bool (APIENTRYP GLEEPFNGLXWAITFORMSCOMLPROC) (Display * dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder, int64_t * ust, int64_t * msc, int64_t * sbc); GLEE_EXTERN GLEEPFNGLXWAITFORMSCOMLPROC GLeeFuncPtr_glXWaitForMscOML; #define glXWaitForMscOML GLeeFuncPtr_glXWaitForMscOML #endif #ifndef GLEE_H_DEFINED_glXWaitForSbcOML #define GLEE_H_DEFINED_glXWaitForSbcOML typedef Bool (APIENTRYP GLEEPFNGLXWAITFORSBCOMLPROC) (Display * dpy, GLXDrawable drawable, int64_t target_sbc, int64_t * ust, int64_t * msc, int64_t * sbc); GLEE_EXTERN GLEEPFNGLXWAITFORSBCOMLPROC GLeeFuncPtr_glXWaitForSbcOML; #define glXWaitForSbcOML GLeeFuncPtr_glXWaitForSbcOML #endif #endif /* GLX_NV_float_buffer */ #ifndef GLX_NV_float_buffer #define GLX_NV_float_buffer 1 #define __GLEE_GLX_NV_float_buffer 1 /* Constants */ #define GLX_FLOAT_COMPONENTS_NV 0x20B0 #endif /* GLX_SGIX_hyperpipe */ #ifndef GLX_SGIX_hyperpipe #define GLX_SGIX_hyperpipe 1 #define __GLEE_GLX_SGIX_hyperpipe 1 /* Constants */ #define GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX 80 #define GLX_BAD_HYPERPIPE_CONFIG_SGIX 91 #define GLX_BAD_HYPERPIPE_SGIX 92 #define GLX_HYPERPIPE_DISPLAY_PIPE_SGIX 0x00000001 #define GLX_HYPERPIPE_RENDER_PIPE_SGIX 0x00000002 #define GLX_PIPE_RECT_SGIX 0x00000001 #define GLX_PIPE_RECT_LIMITS_SGIX 0x00000002 #define GLX_HYPERPIPE_STEREO_SGIX 0x00000003 #define GLX_HYPERPIPE_PIXEL_AVERAGE_SGIX 0x00000004 #define GLX_HYPERPIPE_ID_SGIX 0x8030 #ifndef GLEE_H_DEFINED_glXQueryHyperpipeNetworkSGIX #define GLEE_H_DEFINED_glXQueryHyperpipeNetworkSGIX typedef GLXHyperpipeNetworkSGIX * (APIENTRYP GLEEPFNGLXQUERYHYPERPIPENETWORKSGIXPROC) (Display * dpy, int * npipes); GLEE_EXTERN GLEEPFNGLXQUERYHYPERPIPENETWORKSGIXPROC GLeeFuncPtr_glXQueryHyperpipeNetworkSGIX; #define glXQueryHyperpipeNetworkSGIX GLeeFuncPtr_glXQueryHyperpipeNetworkSGIX #endif #ifndef GLEE_H_DEFINED_glXHyperpipeConfigSGIX #define GLEE_H_DEFINED_glXHyperpipeConfigSGIX typedef int (APIENTRYP GLEEPFNGLXHYPERPIPECONFIGSGIXPROC) (Display * dpy, int networkId, int npipes, GLXHyperpipeConfigSGIX * cfg, int * hpId); GLEE_EXTERN GLEEPFNGLXHYPERPIPECONFIGSGIXPROC GLeeFuncPtr_glXHyperpipeConfigSGIX; #define glXHyperpipeConfigSGIX GLeeFuncPtr_glXHyperpipeConfigSGIX #endif #ifndef GLEE_H_DEFINED_glXQueryHyperpipeConfigSGIX #define GLEE_H_DEFINED_glXQueryHyperpipeConfigSGIX typedef GLXHyperpipeConfigSGIX * (APIENTRYP GLEEPFNGLXQUERYHYPERPIPECONFIGSGIXPROC) (Display * dpy, int hpId, int * npipes); GLEE_EXTERN GLEEPFNGLXQUERYHYPERPIPECONFIGSGIXPROC GLeeFuncPtr_glXQueryHyperpipeConfigSGIX; #define glXQueryHyperpipeConfigSGIX GLeeFuncPtr_glXQueryHyperpipeConfigSGIX #endif #ifndef GLEE_H_DEFINED_glXDestroyHyperpipeConfigSGIX #define GLEE_H_DEFINED_glXDestroyHyperpipeConfigSGIX typedef int (APIENTRYP GLEEPFNGLXDESTROYHYPERPIPECONFIGSGIXPROC) (Display * dpy, int hpId); GLEE_EXTERN GLEEPFNGLXDESTROYHYPERPIPECONFIGSGIXPROC GLeeFuncPtr_glXDestroyHyperpipeConfigSGIX; #define glXDestroyHyperpipeConfigSGIX GLeeFuncPtr_glXDestroyHyperpipeConfigSGIX #endif #ifndef GLEE_H_DEFINED_glXBindHyperpipeSGIX #define GLEE_H_DEFINED_glXBindHyperpipeSGIX typedef int (APIENTRYP GLEEPFNGLXBINDHYPERPIPESGIXPROC) (Display * dpy, int hpId); GLEE_EXTERN GLEEPFNGLXBINDHYPERPIPESGIXPROC GLeeFuncPtr_glXBindHyperpipeSGIX; #define glXBindHyperpipeSGIX GLeeFuncPtr_glXBindHyperpipeSGIX #endif #ifndef GLEE_H_DEFINED_glXQueryHyperpipeBestAttribSGIX #define GLEE_H_DEFINED_glXQueryHyperpipeBestAttribSGIX typedef int (APIENTRYP GLEEPFNGLXQUERYHYPERPIPEBESTATTRIBSGIXPROC) (Display * dpy, int timeSlice, int attrib, int size, void * attribList, void * returnAttribList); GLEE_EXTERN GLEEPFNGLXQUERYHYPERPIPEBESTATTRIBSGIXPROC GLeeFuncPtr_glXQueryHyperpipeBestAttribSGIX; #define glXQueryHyperpipeBestAttribSGIX GLeeFuncPtr_glXQueryHyperpipeBestAttribSGIX #endif #ifndef GLEE_H_DEFINED_glXHyperpipeAttribSGIX #define GLEE_H_DEFINED_glXHyperpipeAttribSGIX typedef int (APIENTRYP GLEEPFNGLXHYPERPIPEATTRIBSGIXPROC) (Display * dpy, int timeSlice, int attrib, int size, void * attribList); GLEE_EXTERN GLEEPFNGLXHYPERPIPEATTRIBSGIXPROC GLeeFuncPtr_glXHyperpipeAttribSGIX; #define glXHyperpipeAttribSGIX GLeeFuncPtr_glXHyperpipeAttribSGIX #endif #ifndef GLEE_H_DEFINED_glXQueryHyperpipeAttribSGIX #define GLEE_H_DEFINED_glXQueryHyperpipeAttribSGIX typedef int (APIENTRYP GLEEPFNGLXQUERYHYPERPIPEATTRIBSGIXPROC) (Display * dpy, int timeSlice, int attrib, int size, void * returnAttribList); GLEE_EXTERN GLEEPFNGLXQUERYHYPERPIPEATTRIBSGIXPROC GLeeFuncPtr_glXQueryHyperpipeAttribSGIX; #define glXQueryHyperpipeAttribSGIX GLeeFuncPtr_glXQueryHyperpipeAttribSGIX #endif #endif /* GLX_MESA_agp_offset */ #ifndef GLX_MESA_agp_offset #define GLX_MESA_agp_offset 1 #define __GLEE_GLX_MESA_agp_offset 1 /* Constants */ #ifndef GLEE_H_DEFINED_glXGetAGPOffsetMESA #define GLEE_H_DEFINED_glXGetAGPOffsetMESA typedef unsigned int (APIENTRYP GLEEPFNGLXGETAGPOFFSETMESAPROC) (const void * pointer); GLEE_EXTERN GLEEPFNGLXGETAGPOFFSETMESAPROC GLeeFuncPtr_glXGetAGPOffsetMESA; #define glXGetAGPOffsetMESA GLeeFuncPtr_glXGetAGPOffsetMESA #endif #endif /* GLX_EXT_fbconfig_packed_float */ #ifndef GLX_EXT_fbconfig_packed_float #define GLX_EXT_fbconfig_packed_float 1 #define __GLEE_GLX_EXT_fbconfig_packed_float 1 /* Constants */ #define GLX_RGBA_UNSIGNED_FLOAT_TYPE_EXT 0x20B1 #define GLX_RGBA_UNSIGNED_FLOAT_BIT_EXT 0x00000008 #endif /* GLX_EXT_framebuffer_sRGB */ #ifndef GLX_EXT_framebuffer_sRGB #define GLX_EXT_framebuffer_sRGB 1 #define __GLEE_GLX_EXT_framebuffer_sRGB 1 /* Constants */ #define GLX_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x20B2 #endif /* GLX_EXT_texture_from_pixmap */ #ifndef GLX_EXT_texture_from_pixmap #define GLX_EXT_texture_from_pixmap 1 #define __GLEE_GLX_EXT_texture_from_pixmap 1 /* Constants */ #define GLX_TEXTURE_1D_BIT_EXT 0x00000001 #define GLX_TEXTURE_2D_BIT_EXT 0x00000002 #define GLX_TEXTURE_RECTANGLE_BIT_EXT 0x00000004 #define GLX_BIND_TO_TEXTURE_RGB_EXT 0x20D0 #define GLX_BIND_TO_TEXTURE_RGBA_EXT 0x20D1 #define GLX_BIND_TO_MIPMAP_TEXTURE_EXT 0x20D2 #define GLX_BIND_TO_TEXTURE_TARGETS_EXT 0x20D3 #define GLX_Y_INVERTED_EXT 0x20D4 #define GLX_TEXTURE_FORMAT_EXT 0x20D5 #define GLX_TEXTURE_TARGET_EXT 0x20D6 #define GLX_MIPMAP_TEXTURE_EXT 0x20D7 #define GLX_TEXTURE_FORMAT_NONE_EXT 0x20D8 #define GLX_TEXTURE_FORMAT_RGB_EXT 0x20D9 #define GLX_TEXTURE_FORMAT_RGBA_EXT 0x20DA #define GLX_TEXTURE_1D_EXT 0x20DB #define GLX_TEXTURE_2D_EXT 0x20DC #define GLX_TEXTURE_RECTANGLE_EXT 0x20DD #define GLX_FRONT_LEFT_EXT 0x20DE #define GLX_FRONT_RIGHT_EXT 0x20DF #define GLX_BACK_LEFT_EXT 0x20E0 #define GLX_BACK_RIGHT_EXT 0x20E1 #define GLX_FRONT_EXT GLX_FRONT_LEFT_EXT #define GLX_BACK_EXT GLX_BACK_LEFT_EXT #define GLX_AUX0_EXT 0x20E2 #define GLX_AUX1_EXT 0x20E3 #define GLX_AUX2_EXT 0x20E4 #define GLX_AUX3_EXT 0x20E5 #define GLX_AUX4_EXT 0x20E6 #define GLX_AUX5_EXT 0x20E7 #define GLX_AUX6_EXT 0x20E8 #define GLX_AUX7_EXT 0x20E9 #define GLX_AUX8_EXT 0x20EA #define GLX_AUX9_EXT 0x20EB #ifndef GLEE_H_DEFINED_glXBindTexImageEXT #define GLEE_H_DEFINED_glXBindTexImageEXT typedef void (APIENTRYP GLEEPFNGLXBINDTEXIMAGEEXTPROC) (Display * dpy, GLXDrawable drawable, int buffer, const int * attrib_list); GLEE_EXTERN GLEEPFNGLXBINDTEXIMAGEEXTPROC GLeeFuncPtr_glXBindTexImageEXT; #define glXBindTexImageEXT GLeeFuncPtr_glXBindTexImageEXT #endif #ifndef GLEE_H_DEFINED_glXReleaseTexImageEXT #define GLEE_H_DEFINED_glXReleaseTexImageEXT typedef void (APIENTRYP GLEEPFNGLXRELEASETEXIMAGEEXTPROC) (Display * dpy, GLXDrawable drawable, int buffer); GLEE_EXTERN GLEEPFNGLXRELEASETEXIMAGEEXTPROC GLeeFuncPtr_glXReleaseTexImageEXT; #define glXReleaseTexImageEXT GLeeFuncPtr_glXReleaseTexImageEXT #endif #endif /* GLX_NV_present_video */ #ifndef GLX_NV_present_video #define GLX_NV_present_video 1 #define __GLEE_GLX_NV_present_video 1 /* Constants */ #define GLX_NUM_VIDEO_SLOTS_NV 0x20F0 #endif /* GLX_NV_video_out */ #ifndef GLX_NV_video_out #define GLX_NV_video_out 1 #define __GLEE_GLX_NV_video_out 1 /* Constants */ #define GLX_VIDEO_OUT_COLOR_NV 0x20C3 #define GLX_VIDEO_OUT_ALPHA_NV 0x20C4 #define GLX_VIDEO_OUT_DEPTH_NV 0x20C5 #define GLX_VIDEO_OUT_COLOR_AND_ALPHA_NV 0x20C6 #define GLX_VIDEO_OUT_COLOR_AND_DEPTH_NV 0x20C7 #define GLX_VIDEO_OUT_FRAME_NV 0x20C8 #define GLX_VIDEO_OUT_FIELD_1_NV 0x20C9 #define GLX_VIDEO_OUT_FIELD_2_NV 0x20CA #define GLX_VIDEO_OUT_STACKED_FIELDS_1_2_NV 0x20CB #define GLX_VIDEO_OUT_STACKED_FIELDS_2_1_NV 0x20CC #endif /* GLX_NV_swap_group */ #ifndef GLX_NV_swap_group #define GLX_NV_swap_group 1 #define __GLEE_GLX_NV_swap_group 1 /* Constants */ #endif /* GLX_EXT_scene_marker */ #ifndef GLX_EXT_scene_marker #define GLX_EXT_scene_marker 1 #define __GLEE_GLX_EXT_scene_marker 1 /* Constants */ #endif /* GLX_NV_video_output */ #ifndef GLX_NV_video_output #define GLX_NV_video_output 1 #define __GLEE_GLX_NV_video_output 1 /* Constants */ #define GLX_VIDEO_OUT_COLOR_NV 0x20C3 #define GLX_VIDEO_OUT_ALPHA_NV 0x20C4 #define GLX_VIDEO_OUT_DEPTH_NV 0x20C5 #define GLX_VIDEO_OUT_COLOR_AND_ALPHA_NV 0x20C6 #define GLX_VIDEO_OUT_COLOR_AND_DEPTH_NV 0x20C7 #define GLX_VIDEO_OUT_FRAME_NV 0x20C8 #define GLX_VIDEO_OUT_FIELD_1_NV 0x20C9 #define GLX_VIDEO_OUT_FIELD_2_NV 0x20CA #define GLX_VIDEO_OUT_STACKED_FIELDS_1_2_NV 0x20CB #define GLX_VIDEO_OUT_STACKED_FIELDS_2_1_NV 0x20CC #ifndef GLEE_H_DEFINED_glXGetVideoDeviceNV #define GLEE_H_DEFINED_glXGetVideoDeviceNV typedef int (APIENTRYP GLEEPFNGLXGETVIDEODEVICENVPROC) (Display * dpy, int screen, int numVideoDevices, GLXVideoDeviceNV * pVideoDevice); GLEE_EXTERN GLEEPFNGLXGETVIDEODEVICENVPROC GLeeFuncPtr_glXGetVideoDeviceNV; #define glXGetVideoDeviceNV GLeeFuncPtr_glXGetVideoDeviceNV #endif #ifndef GLEE_H_DEFINED_glXReleaseVideoDeviceNV #define GLEE_H_DEFINED_glXReleaseVideoDeviceNV typedef int (APIENTRYP GLEEPFNGLXRELEASEVIDEODEVICENVPROC) (Display * dpy, int screen, GLXVideoDeviceNV VideoDevice); GLEE_EXTERN GLEEPFNGLXRELEASEVIDEODEVICENVPROC GLeeFuncPtr_glXReleaseVideoDeviceNV; #define glXReleaseVideoDeviceNV GLeeFuncPtr_glXReleaseVideoDeviceNV #endif #ifndef GLEE_H_DEFINED_glXBindVideoImageNV #define GLEE_H_DEFINED_glXBindVideoImageNV typedef int (APIENTRYP GLEEPFNGLXBINDVIDEOIMAGENVPROC) (Display * dpy, GLXVideoDeviceNV VideoDevice, GLXPbuffer pbuf, int iVideoBuffer); GLEE_EXTERN GLEEPFNGLXBINDVIDEOIMAGENVPROC GLeeFuncPtr_glXBindVideoImageNV; #define glXBindVideoImageNV GLeeFuncPtr_glXBindVideoImageNV #endif #ifndef GLEE_H_DEFINED_glXReleaseVideoImageNV #define GLEE_H_DEFINED_glXReleaseVideoImageNV typedef int (APIENTRYP GLEEPFNGLXRELEASEVIDEOIMAGENVPROC) (Display * dpy, GLXPbuffer pbuf); GLEE_EXTERN GLEEPFNGLXRELEASEVIDEOIMAGENVPROC GLeeFuncPtr_glXReleaseVideoImageNV; #define glXReleaseVideoImageNV GLeeFuncPtr_glXReleaseVideoImageNV #endif #ifndef GLEE_H_DEFINED_glXSendPbufferToVideoNV #define GLEE_H_DEFINED_glXSendPbufferToVideoNV typedef int (APIENTRYP GLEEPFNGLXSENDPBUFFERTOVIDEONVPROC) (Display * dpy, GLXPbuffer pbuf, int iBufferType, unsigned long * pulCounterPbuffer, GLboolean bBlock); GLEE_EXTERN GLEEPFNGLXSENDPBUFFERTOVIDEONVPROC GLeeFuncPtr_glXSendPbufferToVideoNV; #define glXSendPbufferToVideoNV GLeeFuncPtr_glXSendPbufferToVideoNV #endif #ifndef GLEE_H_DEFINED_glXGetVideoInfoNV #define GLEE_H_DEFINED_glXGetVideoInfoNV typedef int (APIENTRYP GLEEPFNGLXGETVIDEOINFONVPROC) (Display * dpy, int screen, GLXVideoDeviceNV VideoDevice, unsigned long * pulCounterOutputPbuffer, unsigned long * pulCounterOutputVideo); GLEE_EXTERN GLEEPFNGLXGETVIDEOINFONVPROC GLeeFuncPtr_glXGetVideoInfoNV; #define glXGetVideoInfoNV GLeeFuncPtr_glXGetVideoInfoNV #endif #endif #endif /*end GLX */ /***************************************************************** * GLee functions *****************************************************************/ GLEE_EXTERN GLboolean GLeeInit( void ); GLEE_EXTERN GLint GLeeForceLink(const char * extensionName); GLEE_EXTERN const char * GLeeGetErrorString( void ); GLEE_EXTERN const char * GLeeGetExtStrGL( void ); GLEE_EXTERN GLboolean GLeeEnabled(GLboolean * extensionQueryingVariable); #ifdef WIN32 GLEE_EXTERN const char * GLeeGetExtStrWGL( void ); #elif defined(__APPLE__) || defined(__APPLE_CC__) #else GLEE_EXTERN const char * GLeeGetExtStrGLX( void ); #endif #ifdef __cplusplus } /* end C linkage */ #endif #endif /* __glee_h_ defined */ fs-uae-2.2.3+dfsg/libfsemu/include/fs/hashtable.h0000644000175000017500000000223312162366653022020 0ustar glaubitzglaubitz#ifndef FS_HASH_TABLE_H_ #define FS_HASH_TABLE_H_ #include #include #include #ifdef __cplusplus extern "C" { #endif typedef struct _fs_hash_table fs_hash_table; typedef struct _fs_hash_table_iter fs_hash_table_iter; unsigned int fs_direct_hash (const void *v); fs_hash_table *fs_hash_table_new(fs_hash_func hash_func, fs_equal_func key_equal_func); fs_hash_table *fs_hash_table_new_full(fs_hash_func hash_func, fs_equal_func key_equal_func, fs_destroy_notify key_destroy_func, fs_destroy_notify value_destroy_func); void fs_hash_table_destroy(fs_hash_table *hash_table); void fs_hash_table_remove_all(fs_hash_table *hash_table); void *fs_hash_table_lookup(fs_hash_table *hash_table, const void *key); void fs_hash_table_insert(fs_hash_table *hash_table, void *key, void *value); void fs_hash_table_replace(fs_hash_table *hash_table, void *key, void *value); unsigned int fs_hash_table_size(fs_hash_table *hash_table); fs_list *fs_hash_table_get_keys(fs_hash_table *hash_table); int fs_hash_table_remove(fs_hash_table *hash_table, const void *key); #ifdef __cplusplus } #endif #endif // FS_HASH_TABLE_H_ fs-uae-2.2.3+dfsg/libfsemu/include/fs/glu.h0000644000175000017500000000030012162366654020646 0ustar glaubitzglaubitz#ifndef FS_GLU_H_ #define FS_GLU_H_ #if defined(USE_GLES) && !defined(FAKE_GLES) // no GLU #elif defined(MACOSX) #include #else #include #endif #endif // FS_GLU_H_ fs-uae-2.2.3+dfsg/libfsemu/include/fs/time.h0000644000175000017500000000062512162366653021026 0ustar glaubitzglaubitz#ifndef FS_TIME_H_ #define FS_TIME_H_ #include #include #ifdef __cplusplus extern "C" { #endif void fs_time_init(void); struct tm *fs_localtime_r(const time_t *timep, struct tm *result); struct tm *fs_gmtime_r(const time_t *timep, struct tm *result); time_t fs_timegm(struct tm *tm); int fs_get_local_time_offset(time_t time); #ifdef __cplusplus } #endif #endif // FS_TIME_H_ fs-uae-2.2.3+dfsg/libfsemu/include/fs/string.h0000644000175000017500000000544712162366654021406 0ustar glaubitzglaubitz#ifndef FS_STRING_H_ #define FS_STRING_H_ #include #include #ifdef __cplusplus extern "C" { #endif typedef enum { FS_ASCII_ALNUM = 1 << 0, FS_ASCII_ALPHA = 1 << 1, FS_ASCII_CNTRL = 1 << 2, FS_ASCII_DIGIT = 1 << 3, FS_ASCII_GRAPH = 1 << 4, FS_ASCII_LOWER = 1 << 5, FS_ASCII_PRINT = 1 << 6, FS_ASCII_PUNCT = 1 << 7, FS_ASCII_SPACE = 1 << 8, FS_ASCII_UPPER = 1 << 9, FS_ASCII_XDIGIT = 1 << 10 } fs_ascii_type; extern const uint16_t * const fs_ascii_table; #define fs_ascii_isalnum(c) \ ((fs_ascii_table[(unsigned char) (c)] & FS_ASCII_ALNUM) != 0) #define fs_ascii_isalpha(c) \ ((fs_ascii_table[(unsigned char) (c)] & FS_ASCII_ALPHA) != 0) #define fs_ascii_iscntrl(c) \ ((fs_ascii_table[(unsigned char) (c)] & FS_ASCII_CNTRL) != 0) #define fs_ascii_isdigit(c) \ ((fs_ascii_table[(unsigned char) (c)] & FS_ASCII_DIGIT) != 0) #define fs_ascii_isgraph(c) \ ((fs_ascii_table[(unsigned char) (c)] & FS_ASCII_GRAPH) != 0) #define fs_ascii_islower(c) \ ((fs_ascii_table[(unsigned char) (c)] & FS_ASCII_LOWER) != 0) #define fs_ascii_isprint(c) \ ((fs_ascii_table[(unsigned char) (c)] & FS_ASCII_PRINT) != 0) #define fs_ascii_ispunct(c) \ ((fs_ascii_table[(unsigned char) (c)] & FS_ASCII_PUNCT) != 0) #define fs_ascii_isspace(c) \ ((fs_ascii_table[(unsigned char) (c)] & FS_ASCII_SPACE) != 0) #define fs_ascii_isupper(c) \ ((fs_ascii_table[(unsigned char) (c)] & FS_ASCII_UPPER) != 0) #define fs_ascii_isxdigit(c) \ ((fs_ascii_table[(unsigned char) (c)] & FS_ASCII_XDIGIT) != 0) #define fs_strstrip(string) fs_strchomp (fs_strchug(string)) char *fs_strdup_printf(const char *format, ...) FS_MALLOC; char *fs_strdup_vprintf(const char *format, va_list args); char *fs_strconcat(const char *string1, ...) FS_SENTINEL; int fs_ascii_strcasecmp(const char *s1, const char *s2); char fs_ascii_tolower(char c); char fs_ascii_toupper(char c); char *fs_ascii_strdown(const char *str, ssize_t len); char *fs_ascii_strup(const char *str, ssize_t len); double fs_ascii_strtod(const char *nptr, char **endptr); //char *fs_ascii_formatd(char *buffer, int buf_len, const char *format, double d); int fs_str_has_suffix(const char *str, const char *suffix); int fs_str_has_prefix(const char *str, const char *prefix); char* fs_strdup(const char *str) FS_MALLOC; char* fs_strndup(const char *str, size_t n) FS_MALLOC; char *fs_strdelimit(char *string, const char *delimiters, char new_delim); char *fs_strchug(char *string); char *fs_strchomp(char *string); void *fs_memdup(const void *mem, unsigned int byte_size); int fs_str_equal (const void *v1, const void *v2); unsigned int fs_str_hash (const void *v); void fs_strfreev(char **str_array); char **fs_strsplit(const char *string, const char *delimiter, int max_tokens); #ifdef __cplusplus } #endif #endif // FS_STRING_H_ fs-uae-2.2.3+dfsg/libfsemu/include/fs/base.h0000644000175000017500000000236712162366653021007 0ustar glaubitzglaubitz#ifndef FS_BASE_H_ #define FS_BASE_H_ #include #ifdef __cplusplus extern "C" { #endif struct fs_time_val { int32_t tv_sec; int32_t tv_usec; }; typedef struct fs_time_val fs_time_val; const char *fs_get_application_name(void); void fs_set_application_name(const char *application_name); const char *fs_get_prgname(void); void fs_set_prgname(const char *prgname); char *fs_get_data_file(const char *relative); char *fs_get_program_data_file(const char *relative); void fs_get_current_time(fs_time_val *result); void fs_time_val_add(fs_time_val *tv, int usec); int64_t fs_get_real_time(void); int64_t fs_get_monotonic_time(void); #define fs_new(struct_type, n_structs) (struct_type *) \ malloc(sizeof(struct_type) * (n_structs)) #define fs_new0(struct_type, n_structs) (struct_type *) \ fs_malloc0(sizeof(struct_type) * (n_structs)) void *fs_malloc0(size_t n_bytes) FS_MALLOC /* G_GNUC_ALLOC_SIZE(1) */; void fs_set_argv(int argc, char* argv[]); int fs_get_application_exe_path(char *buffer, int size); int fs_get_application_exe_dir(char *buffer, int size); const char *fs_get_home_dir(void); const char *fs_get_user_config_dir(void); const char *fs_get_user_data_dir(void); #ifdef __cplusplus } #endif #endif // FS_BASE_H_ fs-uae-2.2.3+dfsg/libfsemu/include/fs/config.h0000644000175000017500000000142612162366653021335 0ustar glaubitzglaubitz#ifndef FS_CONFIG_H_ #define FS_CONFIG_H_ #define FS_CONFIG_NONE 0x12345678 #ifdef __cplusplus extern "C" { #endif int fs_config_get_boolean(const char *key); int fs_config_get_int(const char *key); int fs_config_get_int_clamped(const char *key, int min, int max); double fs_config_get_double(const char *key); double fs_config_get_double_clamped(const char *key, double min, double max); char *fs_config_get_string(const char *key); const char *fs_config_get_const_string(const char *key); int fs_config_read_file(const char *path, int force); void fs_config_parse_options(int argc, char **argv); void fs_config_set_string(const char *key, const char *value); void fs_config_set_string_if_unset(const char *key, const char *value); #ifdef __cplusplus } #endif #endif // FS_CONFIG_H_ fs-uae-2.2.3+dfsg/libfsemu/include/fs/ml/0000755000175000017500000000000012162366654020325 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/libfsemu/include/fs/ml/opengl.h0000644000175000017500000000437312162366654021771 0ustar glaubitzglaubitz/* libfsgl - utility and wrapper functions for OpenGL * Copyright (C) 2011 Frode Solheim * * This library is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 of the License, or (at * your option) any later version. * * This library is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef LIBFSGL_OPENGL_H_ #define LIBFSGL_OPENGL_H_ #if defined(USE_GLES) && !defined(FAKE_GLES) #include #define GL_BGRA 0x80e1 #else #include #endif #ifndef APIENTRY #define APIENTRY #endif #ifndef APIENTRYP #define APIENTRYP APIENTRY * #endif void fs_gl_finish(); void fs_gl_texturing(int enable); void fs_gl_bind_texture(int texture); void fs_gl_unpack_row_length(int length); void fs_gl_blending(int enable); void fs_gl_color4fv(float *c); void fs_gl_color4f(float r, float g, float b, float a); void fs_gl_ortho(); void fs_gl_ortho_hd(); void fs_gl_perspective(); void fs_gl_viewport(int x, int y, int w, int h); void fs_gl_reset_client_state(); #define FS_GL_CONTEXT_CREATE 1 #define FS_GL_CONTEXT_DESTROY 2 typedef void (*fs_gl_context_notify_function)(int notification, void *data); void fs_gl_send_context_notification(int notification); void fs_gl_add_context_notification(fs_gl_context_notify_function function, void *data); void fs_gl_remove_context_notification(fs_gl_context_notify_function function, void *data); //#define FS_DEBUG_OPENGL #ifdef FS_DEBUG_OPENGL #define CHECK_GL_ERROR() { \ int error = glGetError(); \ while (error) { \ printf("GL ERROR %d (%s %s:%d)\n", error, __FUNCTION__, __FILE__, \ __LINE__); \ error = glGetError(); \ } \ } #else #define CHECK_GL_ERROR() #endif #endif // LIBFSGL_OPENGL_H_ fs-uae-2.2.3+dfsg/libfsemu/include/fs/random.h0000644000175000017500000000243512162366654021352 0ustar glaubitzglaubitz#ifndef FS_RANDOM_H_ #define FS_RANDOM_H_ #include #ifdef __cplusplus extern "C" { #endif struct fs_rand_context; typedef struct fs_rand_context fs_rand_context; fs_rand_context* fs_rand_new_with_seed(uint32_t seed); fs_rand_context* fs_rand_new_with_seed_array(const uint32_t *seed, unsigned int seed_length); fs_rand_context* fs_rand_new(void); void fs_rand_free(fs_rand_context *rand_); fs_rand_context* fs_rand_copy(fs_rand_context *rand_); void fs_rand_set_seed(fs_rand_context *rand_, uint32_t seed); void fs_rand_set_seed_array(fs_rand_context *rand_, const uint32_t *seed, unsigned int seed_length); #define fs_rand_boolean(rand_) ((g_rand_int (rand_) & (1 << 15)) != 0) uint32_t fs_rand_int(fs_rand_context *rand_); int32_t fs_rand_int_range(fs_rand_context *rand_, int32_t begin, int32_t end); double fs_rand_double(fs_rand_context *rand_); double fs_rand_double_range(fs_rand_context *rand_, double begin, double end); void fs_random_set_seed(uint32_t seed); #define g_random_boolean() ((g_random_int () & (1 << 15)) != 0) uint32_t fs_random_int(void); int32_t fs_random_int_range(int32_t begin, int32_t end); double fs_random_double(void); double fs_random_double_range(double begin, double end); #ifdef __cplusplus } #endif #endif // FS_RANDOM_H_ fs-uae-2.2.3+dfsg/libfsemu/include/fs/ml.h0000644000175000017500000003743712162366653020513 0ustar glaubitzglaubitz/* libfsml - a media library for video and input * Copyright (C) 2011 Frode Solheim * * This library is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 of the License, or (at * your option) any later version. * * This library is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #ifndef LIBFSML_ML_H_ #define LIBFSML_ML_H_ #include #include //#include void fs_ml_quit(); int fs_ml_is_quitting(); extern int g_fs_ml_opengl_context_stamp; void fs_ml_toggle_fullscreen(); typedef void (*fs_ml_void_function)(); typedef int (*fs_ml_int_function)(); typedef struct fs_ml_video_mode { int width; int height; int fps; int bpp; int flags; } fs_ml_video_mode; void fs_ml_show_cursor(int show, int immediate); int fs_ml_has_automatic_input_grab(); void fs_ml_grab_input(int grab, int immediate); static inline int64_t fs_ml_monotonic_time() { return fs_get_monotonic_time(); } void fs_ml_usleep(int usec); #define FS_ML_VIDEO_EVENT_GRAB_INPUT 1 #define FS_ML_VIDEO_EVENT_UNGRAB_INPUT 2 #define FS_ML_VIDEO_EVENT_SHOW_CURSOR 3 #define FS_ML_VIDEO_EVENT_HIDE_CURSOR 4 void fs_ml_init(); void fs_ml_init_2(); void fs_ml_stop(); int fs_ml_main_loop(); int fs_ml_get_video_sync(); double fs_ml_get_refresh_rate(); int fs_ml_get_vblank_sync(); int fs_ml_get_vblank_count(); int64_t fs_ml_get_vblank_time(); int fs_ml_video_mode_get_current(fs_ml_video_mode *mode); int fs_ml_video_create_window(const char *title); void fs_ml_set_quit_function(fs_ml_void_function function); void fs_ml_video_set_update_function(fs_ml_int_function function); void fs_ml_video_set_render_function(fs_ml_void_function function); void fs_ml_video_set_post_render_function(fs_ml_void_function function); //void fs_ml_signal_buffer_swap(); //void fs_ml_lock_buffer_swap(); //void fs_ml_unlock_buffer_swap(); void fs_ml_frame_update_begin(int frame); void fs_ml_frame_update_end(int frame); void fs_ml_video_screenshot(const char *path); int fs_ml_video_width(); int fs_ml_video_height(); void fs_ml_video_sync_enable(int enable); void fs_ml_vblank_sync_enable(); void fs_ml_set_video_fsaa(int fsaa); int fs_ml_get_fullscreen_width(); int fs_ml_get_fullscreen_height(); int fs_ml_get_windowed_width(); int fs_ml_get_windowed_height(); //int fs_ml_main_iteration(); // FIXME: REMOVE? //void fs_ml_swap_buffers(); //void fs_ml_wait_vblank(); void fs_ml_video_swap_buffers(); int fs_ml_get_max_texture_size(); typedef enum { FS_ML_NOEVENT = 0, FS_ML_ACTIVEEVENT, FS_ML_KEYDOWN, FS_ML_KEYUP, FS_ML_MOUSEMOTION, FS_ML_MOUSEBUTTONDOWN, FS_ML_MOUSEBUTTONUP, FS_ML_JOYAXISMOTION, FS_ML_JOYBALLMOTION, FS_ML_JOYHATMOTION, FS_ML_JOYBUTTONDOWN, FS_ML_JOYBUTTONUP, FS_ML_QUIT, FS_ML_SYSWMEVENT, FS_ML_EVENT_RESERVEDA, FS_ML_EVENT_RESERVEDB, FS_ML_VIDEORESIZE, FS_ML_VIDEOEXPOSE, FS_ML_EVENT_RESERVED2, FS_ML_EVENT_RESERVED3, FS_ML_EVENT_RESERVED4, FS_ML_EVENT_RESERVED5, FS_ML_EVENT_RESERVED6, FS_ML_EVENT_RESERVED7, FS_ML_USEREVENT = 24, FS_ML_NUMEVENTS = 32 } FS_ML_EventType; typedef struct fs_ml_keysym { uint16_t scancode; uint16_t sym; uint16_t unicode; uint16_t mod; } fs_ml_keysym; typedef struct fs_ml_ActiveEvent { uint8_t type; uint8_t gain; uint8_t state; } fs_ml_ActiveEvent; typedef struct fs_ml_KeyboardEvent { uint8_t type; uint8_t which; uint8_t state; fs_ml_keysym keysym; } fs_ml_KeyboardEvent; typedef struct fs_ml_MouseMotionEvent { uint8_t type; uint8_t which; uint8_t state; uint16_t x, y; int16_t xrel; int16_t yrel; } fs_ml_MouseMotionEvent; typedef struct fs_ml_MouseButtonEvent { uint8_t type; uint8_t which; uint8_t button; uint8_t state; uint16_t x, y; } fs_ml_MouseButtonEvent; typedef struct fs_ml_JoyAxisEvent { uint8_t type; uint8_t which; uint8_t axis; int16_t value; } fs_ml_JoyAxisEvent; typedef struct fs_ml_JoyBallEvent { uint8_t type; uint8_t which; uint8_t ball; int16_t xrel; int16_t yrel; } fs_ml_JoyBallEvent; typedef struct fs_ml_JoyHatEvent { uint8_t type; uint8_t which; uint8_t hat; uint8_t value; } fs_ml_JoyHatEvent; typedef struct fs_ml_JoyButtonEvent { uint8_t type; uint8_t which; uint8_t button; uint8_t state; } fs_ml_JoyButtonEvent; typedef struct fs_ml_ResizeEvent { uint8_t type; int w; int h; } fs_ml_ResizeEvent; typedef struct fs_ml_ExposeEvent { uint8_t type; } fs_ml_ExposeEvent; typedef struct fs_ml_QuitEvent { uint8_t type; } fs_ml_QuitEvent; typedef struct fs_ml_UserEvent { uint8_t type; int code; void *data1; void *data2; } fs_ml_UserEvent; struct fs_ml_SysWMmsg; typedef struct fs_ml_SysWMmsg fs_ml_SysWMmsg; typedef struct fs_ml_SysWMEvent { uint8_t type; fs_ml_SysWMmsg *msg; } fs_ml_SysWMEvent; typedef union fs_ml_event { uint8_t type; fs_ml_ActiveEvent active; fs_ml_KeyboardEvent key; fs_ml_MouseMotionEvent motion; fs_ml_MouseButtonEvent button; fs_ml_JoyAxisEvent jaxis; fs_ml_JoyBallEvent jball; fs_ml_JoyHatEvent jhat; fs_ml_JoyButtonEvent jbutton; fs_ml_ResizeEvent resize; fs_ml_ExposeEvent expose; fs_ml_QuitEvent quit; fs_ml_UserEvent user; fs_ml_SysWMEvent syswm; } fs_ml_event; fs_ml_event* fs_ml_alloc_event(); void fs_ml_free_event(fs_ml_event* event); int fs_ml_post_event(fs_ml_event* event); typedef int (*fs_ml_input_function)(fs_ml_event* event); void fs_ml_set_input_function(fs_ml_input_function function); int fs_ml_has_input_grab(); #define FS_ML_INPUT_DEVICES_MAX 64 typedef struct fs_ml_input_device { int index; char *name; char *alias; int buttons; int axes; int hats; int usage; int balls; } fs_ml_input_device; int fs_ml_input_device_count(); int fs_ml_input_device_get(int index, fs_ml_input_device *device); fs_ml_input_device *fs_ml_get_input_devices(int* count); #define FS_ML_HAT_CENTERED 0x00 #define FS_ML_HAT_UP 0x01 #define FS_ML_HAT_RIGHT 0x02 #define FS_ML_HAT_DOWN 0x04 #define FS_ML_HAT_LEFT 0x08 #define FS_ML_HAT_RIGHTUP (FS_ML_HAT_RIGHT | FS_ML_HAT_UP) #define FS_ML_HAT_RIGHTDOWN (FS_ML_HAT_RIGHT | FS_ML_HAT_DOWN) #define FS_ML_HAT_LEFTUP (FS_ML_HAT_LEFT | FS_ML_HAT_UP) #define FS_ML_HAT_LEFTDOWN (FS_ML_HAT_LEFT | FS_ML_HAT_DOWN) #define FS_ML_BUTTON_LEFT 1 #define FS_ML_BUTTON_MIDDLE 2 #define FS_ML_BUTTON_RIGHT 3 #define FS_ML_BUTTON_WHEELUP 4 #define FS_ML_BUTTON_WHEELDOWN 5 typedef enum { FS_ML_KEY_UNKNOWN = 0, FS_ML_KEY_FIRST = 0, FS_ML_KEY_BACKSPACE = 8, FS_ML_KEY_TAB = 9, FS_ML_KEY_CLEAR = 12, FS_ML_KEY_RETURN = 13, FS_ML_KEY_PAUSE = 19, FS_ML_KEY_ESCAPE = 27, FS_ML_KEY_SPACE = 32, FS_ML_KEY_EXCLAIM = 33, FS_ML_KEY_QUOTEDBL = 34, FS_ML_KEY_HASH = 35, FS_ML_KEY_DOLLAR = 36, FS_ML_KEY_AMPERSAND = 38, FS_ML_KEY_QUOTE = 39, FS_ML_KEY_LEFTPAREN = 40, FS_ML_KEY_RIGHTPAREN = 41, FS_ML_KEY_ASTERISK = 42, FS_ML_KEY_PLUS = 43, FS_ML_KEY_COMMA = 44, FS_ML_KEY_MINUS = 45, FS_ML_KEY_PERIOD = 46, FS_ML_KEY_SLASH = 47, FS_ML_KEY_0 = 48, FS_ML_KEY_1 = 49, FS_ML_KEY_2 = 50, FS_ML_KEY_3 = 51, FS_ML_KEY_4 = 52, FS_ML_KEY_5 = 53, FS_ML_KEY_6 = 54, FS_ML_KEY_7 = 55, FS_ML_KEY_8 = 56, FS_ML_KEY_9 = 57, FS_ML_KEY_COLON = 58, FS_ML_KEY_SEMICOLON = 59, FS_ML_KEY_LESS = 60, FS_ML_KEY_EQUALS = 61, FS_ML_KEY_GREATER = 62, FS_ML_KEY_QUESTION = 63, FS_ML_KEY_AT = 64, FS_ML_KEY_LEFTBRACKET = 91, FS_ML_KEY_BACKSLASH = 92, FS_ML_KEY_RIGHTBRACKET = 93, FS_ML_KEY_CARET = 94, FS_ML_KEY_UNDERSCORE = 95, FS_ML_KEY_BACKQUOTE = 96, FS_ML_KEY_A = 97, FS_ML_KEY_B = 98, FS_ML_KEY_C = 99, FS_ML_KEY_D = 100, FS_ML_KEY_E = 101, FS_ML_KEY_F = 102, FS_ML_KEY_G = 103, FS_ML_KEY_H = 104, FS_ML_KEY_I = 105, FS_ML_KEY_J = 106, FS_ML_KEY_K = 107, FS_ML_KEY_L = 108, FS_ML_KEY_M = 109, FS_ML_KEY_N = 110, FS_ML_KEY_O = 111, FS_ML_KEY_P = 112, FS_ML_KEY_Q = 113, FS_ML_KEY_R = 114, FS_ML_KEY_S = 115, FS_ML_KEY_T = 116, FS_ML_KEY_U = 117, FS_ML_KEY_V = 118, FS_ML_KEY_W = 119, FS_ML_KEY_X = 120, FS_ML_KEY_Y = 121, FS_ML_KEY_Z = 122, FS_ML_KEY_DELETE = 127, FS_ML_KEY_WORLD_0 = 160, /* 0xA0 */ FS_ML_KEY_WORLD_1 = 161, FS_ML_KEY_WORLD_2 = 162, FS_ML_KEY_WORLD_3 = 163, FS_ML_KEY_WORLD_4 = 164, FS_ML_KEY_WORLD_5 = 165, FS_ML_KEY_WORLD_6 = 166, FS_ML_KEY_WORLD_7 = 167, FS_ML_KEY_WORLD_8 = 168, FS_ML_KEY_WORLD_9 = 169, FS_ML_KEY_WORLD_10 = 170, FS_ML_KEY_WORLD_11 = 171, FS_ML_KEY_WORLD_12 = 172, FS_ML_KEY_WORLD_13 = 173, FS_ML_KEY_WORLD_14 = 174, FS_ML_KEY_WORLD_15 = 175, FS_ML_KEY_WORLD_16 = 176, FS_ML_KEY_WORLD_17 = 177, FS_ML_KEY_WORLD_18 = 178, FS_ML_KEY_WORLD_19 = 179, FS_ML_KEY_WORLD_20 = 180, FS_ML_KEY_WORLD_21 = 181, FS_ML_KEY_WORLD_22 = 182, FS_ML_KEY_WORLD_23 = 183, FS_ML_KEY_WORLD_24 = 184, FS_ML_KEY_WORLD_25 = 185, FS_ML_KEY_WORLD_26 = 186, FS_ML_KEY_WORLD_27 = 187, FS_ML_KEY_WORLD_28 = 188, FS_ML_KEY_WORLD_29 = 189, FS_ML_KEY_WORLD_30 = 190, FS_ML_KEY_WORLD_31 = 191, FS_ML_KEY_WORLD_32 = 192, FS_ML_KEY_WORLD_33 = 193, FS_ML_KEY_WORLD_34 = 194, FS_ML_KEY_WORLD_35 = 195, FS_ML_KEY_WORLD_36 = 196, FS_ML_KEY_WORLD_37 = 197, FS_ML_KEY_WORLD_38 = 198, FS_ML_KEY_WORLD_39 = 199, FS_ML_KEY_WORLD_40 = 200, FS_ML_KEY_WORLD_41 = 201, FS_ML_KEY_WORLD_42 = 202, FS_ML_KEY_WORLD_43 = 203, FS_ML_KEY_WORLD_44 = 204, FS_ML_KEY_WORLD_45 = 205, FS_ML_KEY_WORLD_46 = 206, FS_ML_KEY_WORLD_47 = 207, FS_ML_KEY_WORLD_48 = 208, FS_ML_KEY_WORLD_49 = 209, FS_ML_KEY_WORLD_50 = 210, FS_ML_KEY_WORLD_51 = 211, FS_ML_KEY_WORLD_52 = 212, FS_ML_KEY_WORLD_53 = 213, FS_ML_KEY_WORLD_54 = 214, FS_ML_KEY_WORLD_55 = 215, FS_ML_KEY_WORLD_56 = 216, FS_ML_KEY_WORLD_57 = 217, FS_ML_KEY_WORLD_58 = 218, FS_ML_KEY_WORLD_59 = 219, FS_ML_KEY_WORLD_60 = 220, FS_ML_KEY_WORLD_61 = 221, FS_ML_KEY_WORLD_62 = 222, FS_ML_KEY_WORLD_63 = 223, FS_ML_KEY_WORLD_64 = 224, FS_ML_KEY_WORLD_65 = 225, FS_ML_KEY_WORLD_66 = 226, FS_ML_KEY_WORLD_67 = 227, FS_ML_KEY_WORLD_68 = 228, FS_ML_KEY_WORLD_69 = 229, FS_ML_KEY_WORLD_70 = 230, FS_ML_KEY_WORLD_71 = 231, FS_ML_KEY_WORLD_72 = 232, FS_ML_KEY_WORLD_73 = 233, FS_ML_KEY_WORLD_74 = 234, FS_ML_KEY_WORLD_75 = 235, FS_ML_KEY_WORLD_76 = 236, FS_ML_KEY_WORLD_77 = 237, FS_ML_KEY_WORLD_78 = 238, FS_ML_KEY_WORLD_79 = 239, FS_ML_KEY_WORLD_80 = 240, FS_ML_KEY_WORLD_81 = 241, FS_ML_KEY_WORLD_82 = 242, FS_ML_KEY_WORLD_83 = 243, FS_ML_KEY_WORLD_84 = 244, FS_ML_KEY_WORLD_85 = 245, FS_ML_KEY_WORLD_86 = 246, FS_ML_KEY_WORLD_87 = 247, FS_ML_KEY_WORLD_88 = 248, FS_ML_KEY_WORLD_89 = 249, FS_ML_KEY_WORLD_90 = 250, FS_ML_KEY_WORLD_91 = 251, FS_ML_KEY_WORLD_92 = 252, FS_ML_KEY_WORLD_93 = 253, FS_ML_KEY_WORLD_94 = 254, FS_ML_KEY_WORLD_95 = 255, /* 0xFF */ FS_ML_KEY_KP0 = 256, FS_ML_KEY_KP1 = 257, FS_ML_KEY_KP2 = 258, FS_ML_KEY_KP3 = 259, FS_ML_KEY_KP4 = 260, FS_ML_KEY_KP5 = 261, FS_ML_KEY_KP6 = 262, FS_ML_KEY_KP7 = 263, FS_ML_KEY_KP8 = 264, FS_ML_KEY_KP9 = 265, FS_ML_KEY_KP_PERIOD = 266, FS_ML_KEY_KP_DIVIDE = 267, FS_ML_KEY_KP_MULTIPLY = 268, FS_ML_KEY_KP_MINUS = 269, FS_ML_KEY_KP_PLUS = 270, FS_ML_KEY_KP_ENTER = 271, FS_ML_KEY_KP_EQUALS = 272, FS_ML_KEY_UP = 273, FS_ML_KEY_DOWN = 274, FS_ML_KEY_RIGHT = 275, FS_ML_KEY_LEFT = 276, FS_ML_KEY_INSERT = 277, FS_ML_KEY_HOME = 278, FS_ML_KEY_END = 279, FS_ML_KEY_PAGEUP = 280, FS_ML_KEY_PAGEDOWN = 281, FS_ML_KEY_F1 = 282, FS_ML_KEY_F2 = 283, FS_ML_KEY_F3 = 284, FS_ML_KEY_F4 = 285, FS_ML_KEY_F5 = 286, FS_ML_KEY_F6 = 287, FS_ML_KEY_F7 = 288, FS_ML_KEY_F8 = 289, FS_ML_KEY_F9 = 290, FS_ML_KEY_F10 = 291, FS_ML_KEY_F11 = 292, FS_ML_KEY_F12 = 293, FS_ML_KEY_F13 = 294, FS_ML_KEY_F14 = 295, FS_ML_KEY_F15 = 296, FS_ML_KEY_NUMLOCK = 300, FS_ML_KEY_CAPSLOCK = 301, FS_ML_KEY_SCROLLOCK = 302, FS_ML_KEY_RSHIFT = 303, FS_ML_KEY_LSHIFT = 304, FS_ML_KEY_RCTRL = 305, FS_ML_KEY_LCTRL = 306, FS_ML_KEY_RALT = 307, FS_ML_KEY_LALT = 308, FS_ML_KEY_RMETA = 309, FS_ML_KEY_LMETA = 310, FS_ML_KEY_LSUPER = 311, FS_ML_KEY_RSUPER = 312, FS_ML_KEY_MODE = 313, FS_ML_KEY_COMPOSE = 314, FS_ML_KEY_HELP = 315, FS_ML_KEY_PRINT = 316, FS_ML_KEY_SYSREQ = 317, FS_ML_KEY_BREAK = 318, FS_ML_KEY_MENU = 319, FS_ML_KEY_POWER = 320, FS_ML_KEY_EURO = 321, FS_ML_KEY_UNDO = 322, FS_ML_KEY_LAST } fs_ml_key; typedef enum { FS_ML_KEY_MOD_NONE = 0x0000, FS_ML_KEY_MOD_LSHIFT= 0x0001, FS_ML_KEY_MOD_RSHIFT= 0x0002, FS_ML_KEY_MOD_F11 = 0x0004, FS_ML_KEY_MOD_F12 = 0x0010, FS_ML_KEY_MOD_LCTRL = 0x0040, FS_ML_KEY_MOD_RCTRL = 0x0080, FS_ML_KEY_MOD_LALT = 0x0100, FS_ML_KEY_MOD_RALT = 0x0200, FS_ML_KEY_MOD_LMETA = 0x0400, FS_ML_KEY_MOD_RMETA = 0x0800, FS_ML_KEY_MOD_NUM = 0x1000, FS_ML_KEY_MOD_CAPS = 0x2000, FS_ML_KEY_MOD_MODE = 0x4000, FS_ML_KEY_MOD_RESERVED = 0x8000 } fs_ml_key_mod; #define FS_ML_KEY_MOD_CTRL (FS_ML_KEY_MOD_LCTRL | FS_ML_KEY_MOD_RCTRL) #define FS_ML_KEY_MOD_SHIFT (FS_ML_KEY_MOD_LSHIFT | FS_ML_KEY_MOD_RSHIFT) #define FS_ML_KEY_MOD_ALT (FS_ML_KEY_MOD_LALT | FS_ML_KEY_MOD_RALT) #define FS_ML_KEY_MOD_META (FS_ML_KEY_MOD_LMETA | FS_ML_KEY_MOD_RMETA) #endif // LIBFSML_ML_H_ fs-uae-2.2.3+dfsg/libfsemu/include/fs/thread.h0000644000175000017500000000244112162366653021335 0ustar glaubitzglaubitz#ifndef FS_THREAD_H_ #define FS_THREAD_H_ #include #ifdef __cplusplus extern "C" { #endif //void fs_thread_init(); struct fs_thread; typedef struct fs_thread fs_thread; typedef void *(*fs_thread_function)(void *); fs_thread *fs_thread_create(fs_thread_function fn, void *data); void *fs_thread_wait(fs_thread *thread); void fs_thread_destroy(fs_thread *thread); struct fs_mutex; typedef struct fs_mutex fs_mutex; fs_mutex *fs_mutex_create(void); void fs_mutex_destroy(fs_mutex *mutex); int fs_mutex_lock(fs_mutex *mutex); int fs_mutex_unlock(fs_mutex *mutex); struct fs_condition; typedef struct fs_condition fs_condition; fs_condition *fs_condition_create(void); void fs_condition_destroy(fs_condition *condition); int fs_condition_signal(fs_condition *condition); int fs_condition_wait(fs_condition *condition, fs_mutex *mutex); int fs_condition_timed_wait(fs_condition *condition, fs_mutex *mutex, int64_t real_time); struct fs_semaphore; typedef struct fs_semaphore fs_semaphore; fs_semaphore *fs_semaphore_create(int value); void fs_semaphore_destroy(fs_semaphore *semaphore); int fs_semaphore_post(fs_semaphore *semaphore); int fs_semaphore_wait(fs_semaphore *semaphore); int fs_semaphore_try_wait(fs_semaphore *semaphore); #ifdef __cplusplus } #endif #endif // FS_THREAD_H_ fs-uae-2.2.3+dfsg/libfsemu/include/fs/unicode.h0000644000175000017500000000063512162366653021517 0ustar glaubitzglaubitz#ifndef FS_UNICODE_H_ #define FS_UNICODE_H_ #include #include #ifdef __cplusplus extern "C" { #endif char *fs_utf8_strdown(const char *str, ssize_t len) FS_MALLOC; char *fs_utf8_strup(const char *str, ssize_t len) FS_MALLOC; char *fs_utf8_to_latin1(const char *src, int len); char *fs_utf8_from_latin1(const char *src, int len); #ifdef __cplusplus } #endif #endif // FS_UNICODE_H_ fs-uae-2.2.3+dfsg/libfsemu/include/fs/queue.h0000644000175000017500000000170012162366653021207 0ustar glaubitzglaubitz#ifndef FS_QUEUE_H_ #define FS_QUEUE_H_ #include #include #ifdef __cplusplus extern "C" { #endif struct fs_queue { fs_list *head; fs_list *tail; unsigned int length; }; typedef struct fs_queue fs_queue; fs_queue *fs_queue_new(void); void fs_queue_unlink(fs_queue *queue, fs_list *link_); void fs_queue_delete_link(fs_queue *queue, fs_list *link_); void fs_queue_insert_before(fs_queue *queue, fs_list *sibling, void *data); fs_list *fs_queue_peek_head_link(fs_queue *queue); fs_list *fs_queue_peek_nth_link(fs_queue *queue, unsigned int n); void fs_queue_push_tail(fs_queue *queue, void *data); void *fs_queue_pop_head(fs_queue *queue); void *fs_queue_pop_tail(fs_queue *queue); void *fs_queue_peek_head(fs_queue *queue); void *fs_queue_peek_tail(fs_queue *queue); void fs_queue_push_head(fs_queue *queue, void *data); unsigned int fs_queue_get_length(fs_queue *queue); #ifdef __cplusplus } #endif #endif // FS_QUEUE_H_ fs-uae-2.2.3+dfsg/libfsemu/include/fs/emu.h0000644000175000017500000003250112162366654020655 0ustar glaubitzglaubitz#ifndef LIBFSEMU_EMU_H_ #define LIBFSEMU_EMU_H_ #include #include #include #include #include #if 0 #define USE_GLIB //#undef WITH_PORTAUDIO #include #ifdef USE_GLIB #include #endif #endif //#ifdef MACOSX // SDL.h must be included in the compilation unit containing main // on Mac OS X //#include //#endif //#ifdef WITH_SDL //#include //#endif #ifdef __cplusplus extern "C" { #endif #ifdef WITH_LUA #include lua_State *fs_emu_get_lua_state(void); void fs_emu_acquire_lua(void); void fs_emu_release_lua(void); #endif void fs_emu_lua_run_handler(const char *name); // Can (or should) be called before fs_emu_init #define fs_emu_log fs_log #define fs_emu_log_string fs_log_string typedef void (*fs_emu_simple_function)(); void fs_emu_set_quit_function(fs_emu_simple_function function); void fs_emu_set_controllers_dir(const char *path); // initialize libfsemu void fs_emu_init_overlays(const char **overlay_names); void fs_emu_init(); #define FS_EMU_INIT_VIDEO 1 #define FS_EMU_INIT_AUDIO 2 #define FS_EMU_INIT_INPUT 4 #define FS_EMU_INIT_EVERYTHING 0xffffffff void fs_emu_init_2(int options); // ---------- typedef void (*fs_emu_zoom_function)(int); void fs_emu_set_toggle_zoom_function(fs_emu_zoom_function function); void fs_emu_toggle_zoom(); void fs_emu_notification(int type, const char *format, ...); void fs_emu_warning(const char *format, ...); void fs_emu_deprecated(const char *format, ...); //void fs_emu_warning(const char* warning); // FIXME: REMOVE //extern GKeyFile *g_fs_emu_config; //inline GKeyFile *fs_emu_get_config() { //return g_fs_emu_config; //} //void fs_emu_set_config(GKeyFile *config); //typedef void (*fs_emu_action_function)(int state); typedef struct fs_emu_action { int input_event; const char *name; int flags; //fs_emu_action_function *function; } fs_emu_action; void fs_emu_set_actions(fs_emu_action *actions); int fs_emu_input_action_from_string(const char *value); void fs_emu_reset_input_mapping(); void fs_emu_map_custom_actions(); typedef int (*fs_emu_hotkey_function)(int key_code, int key_mod); void fs_emu_set_hotkey_function(fs_emu_hotkey_function handler); typedef struct fs_emu_rect { int x; int y; int w; int h; } fs_emu_rect; typedef struct fs_emu_input_mapping { const char *name; int action; //int paired_action; } fs_emu_input_mapping; typedef struct fs_emu_key_translation { int system_key; int system_mod; int input_event; } fs_emu_key_translation; int fs_emu_get_input_event(); void fs_emu_queue_action(int action, int state); void fs_emu_set_custom_overlay_state(int overlay, int state); void fs_emu_set_keyboard_translation(fs_emu_key_translation *keymap); /** Unused (do not remove) */ #define FS_EMU_NOEVENT FS_ML_NOEVENT /** Application loses/gains visibility */ #define FS_EMU_ACTIVEEVENT FS_ML_ACTIVEEVENT /** Keys pressed */ #define FS_EMU_KEYDOWN FS_ML_KEYDOWN /** Keys released */ #define FS_EMU_KEYUP FS_ML_KEYUP /** Mouse moved */ #define FS_EMU_MOUSEMOTION FS_ML_MOUSEMOTION /** Mouse button pressed */ #define FS_EMU_MOUSEBUTTONDOWN FS_ML_MOUSEBUTTONDOWN /** Mouse button released */ #define FS_EMU_MOUSEBUTTONUP FS_ML_MOUSEBUTTONUP /** Joystick axis motion */ #define FS_EMU_JOYAXISMOTION FS_ML_JOYAXISMOTION /** Joystick trackball motion */ #define FS_EMU_JOYBALLMOTION FS_ML_JOYBALLMOTION /** Joystick hat position change */ #define FS_EMU_JOYHATMOTION FS_ML_JOYHATMOTION /** Joystick button pressed */ #define FS_EMU_JOYBUTTONDOWN FS_ML_JOYBUTTONDOWN /** Joystick button released */ #define FS_EMU_JOYBUTTONUP FS_ML_JOYBUTTONUP /** User-requested quit */ #define FS_EMU_QUIT FS_ML_QUIT /** System specific event */ #define FS_EMU_SYSWMEVENT FS_ML_SYSWMEVENT /** User resized video mode */ #define FS_EMU_VIDEORESIZE FS_ML_VIDEORESIZE /** Screen needs to be redrawn */ #define FS_EMU_VIDEOEXPOSE FS_ML_VIDEOEXPOSE /** Events SDL_USEREVENT through SDL_MAXEVENTS-1 are for your use */ #define FS_EMU_USEREVENT FS_ML_USEREVENT typedef fs_ml_event fs_emu_event; //int fs_emu_get_event(fs_emu_event *event); int fs_emu_process_event(fs_emu_event *event); int fs_emu_process_key_event(int key_code, int key_mod, int state); typedef fs_ml_input_device fs_emu_input_device; fs_emu_input_device *fs_emu_get_input_devices(int* count); //void fs_emu_register_input_devices_usage(int usage); //typedef void (*fs_emu_action_function)(int action, int state); //void fs_emu_set_action_function(fs_emu_action_function function); int fs_emu_configure_joystick(const char *name, const char *type, fs_emu_input_mapping *mapping, int usage, char *out_name, int out_name_len); void fs_emu_configure_mouse(int horiz, int vert, int left, int middle, int right, int wheel_axis); typedef int (*fs_emu_checksum_function)(void); void fs_emu_set_state_check_function(fs_emu_checksum_function function); void fs_emu_set_rand_check_function(fs_emu_checksum_function function); // high level and generic functions void fs_emu_msleep(int msec); static inline int64_t fs_emu_monotonic_time() { return fs_get_monotonic_time(); } //void fs_emu_log(const char *format, ...); void fs_emu_fatal(const char *msg); //const char *fs_emu_get_share_dir(); typedef void (*fs_emu_main_function)(); int fs_emu_run(fs_emu_main_function function); typedef void (*fs_emu_pause_function)(int pause); void fs_emu_set_pause_function(fs_emu_pause_function function); void fs_emu_pause(int pause); int fs_emu_is_paused(); void fs_emu_quit(); int fs_emu_thread_running(); int fs_emu_is_quitting(); void fs_emu_disable_throttling(); void fs_emu_disallow_full_sync(); void fs_emu_hud_add_console_line(const char *text, int flags); int fs_emu_wait_for_frame(int frame); // net play void fs_emu_netplay_say(const char *text); void fs_emu_hud_add_chat_message(const char *text, const char *player); int fs_emu_netplay_enabled(); int fs_emu_netplay_connected(); void fs_emu_netplay_disconnect(); const char *fs_emu_get_netplay_tag(int player); int fs_emu_send_netplay_message(const char *text); // video related functions //void fs_emu_set_application_title(const char *title); const char *fs_emu_get_title(); void fs_emu_set_title(const char *title); const char *fs_emu_get_sub_title(); void fs_emu_set_sub_title(const char *title); void fs_emu_toggle_fullscreen(); double fs_emu_get_average_emu_fps(); double fs_emu_get_average_sys_fps(); double fs_emu_audio_get_measured_avg_buffer_fill(int stream); double fs_emu_audio_get_measured_output_frequency(); // video interface int fs_emu_get_video_frame_rate(); /** * Specify the frame rate for emulated video (typically 50 or 60). */ void fs_emu_set_video_frame_rate(int frame_rate); int fs_emu_video_get_aspect_correction(); /** * Show with original aspect ratio or stretch to fill the screen. */ void fs_emu_video_set_aspect_correction(int correct); /** * Specify the pixel aspect ratio of the emulated video frames. */ void fs_emu_set_pixel_aspect_ratio(double ratio); /** * Check whether screen drawing is synced to the host display. * * This is not the same as fs_emu_get_video_vsync! */ static inline int fs_emu_get_vblank_sync() { return fs_ml_get_vblank_sync(); } /** * Check whether emulated video is synced to the host display. */ static inline int fs_emu_get_video_sync() { return fs_ml_get_video_sync(); } void fs_emu_update_video(const void *frame, int width, int height, int bpp, fs_emu_rect *crop); struct fs_emu_video_data; //typedef void (*fs_emu_video_raw_function)(unsigned char *output, // const unsigned char *input, void *user_data); typedef void (*fs_emu_video_raw_function)(struct fs_emu_video_data *data); typedef struct fs_emu_video_data { int seq_no; uint8_t *data; int width; int height; int bpp; fs_emu_rect crop; //uint8_t *raw_data; //uint8_t *raw_info; fs_emu_video_raw_function raw_function; } fs_emu_video_data; //void fs_emu_video_raw_data(const void *data, int size, // fs_emu_video_raw_function function, void *user_data); void fs_emu_update_video_with_raw_data(const void *frame, int width, int height, int bpp, fs_emu_rect *crop, fs_emu_video_raw_function function, int size); //void fs_emu_update_video_with_raw_data(const void *data, // int width, int height, int bpp, int size, //fs_emu_video_raw_function function, void *user_data); //void fs_emu_video_frame_finish(); void fs_emu_video_render_synchronous(); #define FS_EMU_MAX_LINES 2048 #define FS_EMU_NO_SCANLINES_FLAG 1 #define FS_EMU_FORCE_VIEWPORT_CROP_FLAG 2 #define FS_EMU_FILL_BORDER_FLAG 4 typedef struct fs_emu_video_buffer { int seq; void *data; int width; int height; int bpp; double aspect; int size; fs_emu_rect crop; //int buffer_width; //int buffer_height; char line[FS_EMU_MAX_LINES]; int flags; } fs_emu_video_buffer; int fs_emu_video_buffer_init(int width, int height, int bpp); fs_emu_video_buffer *fs_emu_video_buffer_get_available(int copy); void fs_emu_video_buffer_update_lines(fs_emu_video_buffer *buffer); void fs_emu_video_buffer_set_current(fs_emu_video_buffer *buffer); fs_emu_video_buffer *fs_emu_video_buffer_get_current(); int fs_emu_video_buffer_grow(fs_emu_video_buffer *buffer, int width, int height); // audio interface int fs_emu_audio_get_volume(); int fs_emu_audio_get_mute(); void fs_emu_audio_set_volume(int volume); void fs_emu_audio_set_mute(int mute); typedef struct fs_emu_audio_stream_options { int struct_size; int frequency; int channels; int sample_size; int buffer_size; int min_buffers; } fs_emu_audio_stream_options; void fs_emu_init_audio_stream(int stream, fs_emu_audio_stream_options *options); void fs_emu_init_audio_stream_options(fs_emu_audio_stream_options *options); void fs_emu_audio_pause_stream(int stream); void fs_emu_audio_resume_stream(int stream); int fs_emu_queue_audio_buffer(int stream, int16_t* buffer, int size); int fs_emu_check_audio_buffer_done(int stream, int buffer); #if 0 // start deprecated void fs_emu_enable_audio_stream(int stream); void fs_emu_disable_audio_stream(int stream); int fs_emu_get_audio_frequency(); int fs_emu_get_audio_buffer_size(); void fs_emu_audio_sample(int stream, int16_t left, int16_t right); void fs_emu_set_max_audio_buffers(int buffers); void fs_emu_set_audio_buffer_frequency(int stream, int frequency); // end deprecated #endif void fs_emu_show_pointer(int show); void fs_emu_show_pointer_msec(int duration); int fs_emu_is_pointer_visible(); int64_t fs_emu_pointer_is_visible_to(); void fs_emu_grab_input(int mode); int fs_emu_has_input_grab(); void fs_emu_screenshot(const char *path, int crop); #define FS_EMU_MENU_ITEM_TYPE_ITEM 0 #define FS_EMU_MENU_ITEM_TYPE_HEADING 1 #define FS_EMU_MENU_ITEM_TYPE_MENU 2 #define FS_EMU_MENU_RESULT_NONE 0 #define FS_EMU_MENU_RESULT_MENU 1 #define FS_EMU_MENU_RESULT_CLOSE 2 #define FS_EMU_MENU_RESULT_UPDATE 4 #define FS_EMU_MENU_RESULT_BACK 8 #define FS_EMU_MENU_RESULT_ROOT 16 // how long pointer is visible after moving mouse (in ms) #define FS_EMU_MOUSE_DEFAULT_DURATION 1000 // menu support functions #define FS_EMU_MENU_MAX_ITEMS 100 typedef struct fs_emu_menu_item { struct fs_ref ref; int type; char *title; int disabled; int idata; void *pdata; char *screen_path; int (*activate)(struct fs_emu_menu_item* menu_item, void **result); } fs_emu_menu_item; typedef struct fs_emu_menu { struct fs_ref ref; int index; fs_emu_menu_item *items[FS_EMU_MENU_MAX_ITEMS]; int count; void (*update)(struct fs_emu_menu* menu); int idata; } fs_emu_menu; void fs_emu_menu_update_current(); void fs_emu_menu_toggle(); void fs_emu_menu_set_current(fs_emu_menu *menu); int fs_emu_menu_is_active(); fs_emu_menu *fs_emu_menu_new(); void fs_emu_menu_set_update_function(fs_emu_menu *menu, void (*function)(fs_emu_menu *menu)); fs_emu_menu_item *fs_emu_menu_item_new(); void fs_emu_menu_append_item(fs_emu_menu *menu, fs_emu_menu_item *item); fs_emu_menu_item *fs_emu_menu_item_at(fs_emu_menu *menu, int index); void fs_emu_menu_item_set_type(fs_emu_menu_item *item, int type); void fs_emu_menu_item_set_enabled(fs_emu_menu_item *item, int enabled); void fs_emu_menu_item_set_title(fs_emu_menu_item *item, const char* title); int fs_emu_menu_item_get_idata(fs_emu_menu_item *item); void *fs_emu_menu_item_get_pdata(fs_emu_menu_item *item); void fs_emu_menu_item_set_idata(fs_emu_menu_item *item, int idata); void fs_emu_menu_item_set_pdata(fs_emu_menu_item *item, void *pdata); void fs_emu_menu_item_set_activate_function(fs_emu_menu_item *item, int (*function)(fs_emu_menu_item *menu_item, void **data)); void fs_emu_acquire_gui_lock(); void fs_emu_assert_gui_lock(); void fs_emu_release_gui_lock(); #include #include // main function support for windows #ifdef WINDOWS #include extern int __argc; extern char** __argv; #undef main extern int g_fs_ml_ncmdshow; extern HINSTANCE g_fs_ml_hinstance; int _fs_emu_windows_main(int argc, char* argv[]); #define main(a, b) WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { \ g_fs_ml_hinstance = hInstance; \ g_fs_ml_ncmdshow = nCmdShow; \ return _fs_emu_windows_main(__argc, __argv); \ } \ int _fs_emu_windows_main(int argc, char* argv[]) #endif #ifdef __cplusplus } #endif #endif // LIBFSEMU_EMU_H_ fs-uae-2.2.3+dfsg/libfsemu/include/fs/i18n.h0000644000175000017500000000025412162366654020646 0ustar glaubitzglaubitz#ifndef FS_I18N_H_ #define FS_I18N_H_ #ifdef USE_GLIB #include #else //#include #define _(x) (x) #define N_(x) (x) #endif #endif // FS_I18N_H_ fs-uae-2.2.3+dfsg/libfsemu/include/fs/eventlog.h0000644000175000017500000000021312162366653021704 0ustar glaubitzglaubitz#ifndef FS_EVENTLOG_H_ #define FS_EVENT_H_ #ifdef __cplusplus extern "C" { #endif #ifdef __cplusplus } #endif #endif // FS_EVENTLOG_H_ fs-uae-2.2.3+dfsg/libfsemu/include/fs/ref.h0000644000175000017500000000044512162366653020644 0ustar glaubitzglaubitz#ifndef FS_REF_H_ #define FS_REF_H_ #define FS_REF_MAGIC 0x00c8a74d struct fs_ref { int magic; int count; void (*destroy)(void* ptr); }; void fs_ref_initialize(void *ptr, void (*destroy_function)(void *ptr)); int fs_ref(void* ptr); int fs_unref(void* ptr); #endif // FS_REF_H_ fs-uae-2.2.3+dfsg/libfsemu/include/fs/emu/0000755000175000017500000000000012162366653020502 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/libfsemu/include/fs/emu/video.h0000644000175000017500000000213012162366653021755 0ustar glaubitzglaubitz#ifndef LIBFSEMU_INCLUDE_FS_EMU_VIDEO_H_ #define LIBFSEMU_INCLUDE_FS_EMU_VIDEO_H_ #include static inline int fs_emu_get_vblank_count() { return fs_ml_get_vblank_count(); } static inline int64_t fs_emu_get_vblank_time() { return fs_ml_get_vblank_time(); } static inline int fs_emu_get_fullscreen_width() { return fs_ml_get_fullscreen_width(); } static inline int fs_emu_get_fullscreen_height() { return fs_ml_get_fullscreen_height(); } static inline int fs_emu_get_windowed_width() { return fs_ml_get_windowed_width(); } static inline int fs_emu_get_windowed_height() { return fs_ml_get_windowed_height(); } //#define FS_EMU_VIDEO_FORMAT_RGB 0x1907 // GL_RGB //#define FS_EMU_VIDEO_FORMAT_RGBA 0x1908 // GL_RGBA //#define FS_EMU_VIDEO_FORMAT_BGRA 0x80e1 // GL_BGRA #define FS_EMU_VIDEO_FORMAT_BGRA 0 #define FS_EMU_VIDEO_FORMAT_RGBA 1 #define FS_EMU_VIDEO_FORMAT_RGB 2 #define FS_EMU_VIDEO_FORMAT_R5G6B5 3 #define FS_EMU_VIDEO_FORMAT_R5G5B5A1 4 int fs_emu_get_video_format(); int fs_emu_get_texture_format(); #endif // LIBFSEMU_INCLUDE_FS_EMU_VIDEO_H_ fs-uae-2.2.3+dfsg/libfsemu/include/fs/emu/dialog.h0000644000175000017500000000244712162366653022121 0ustar glaubitzglaubitz#ifndef LIBFSEMU_INCLUDE_FS_EMU_DIALOG_H_ #define LIBFSEMU_INCLUDE_FS_EMU_DIALOG_H_ #define DIALOG_RESULT_AFFIRMATIVE 1 #define DIALOG_RESULT_NEGATIVE 2 #define DIALOG_MAX_LINES 4 typedef struct fs_emu_dialog { int result; char *title; char *affirmative; char *negative; char *lines[DIALOG_MAX_LINES]; } fs_emu_dialog; fs_emu_dialog* fs_emu_dialog_create(const char *title, const char *affirmative, const char *negative); void fs_emu_dialog_add_option(fs_emu_dialog *dialog, const char *option, int value); void fs_emu_dialog_set_line(fs_emu_dialog *dialog, int line, const char *text); int fs_emu_dialog_result(fs_emu_dialog *dialog); void fs_emu_dialog_destroy(fs_emu_dialog *dialog); //void fs_emu_dialog_lock(); //void fs_emu_dialog_unlock(); // you must hold the dialog lock when calling this function // important: must acquire GUI lock before using this void fs_emu_dialog_show(fs_emu_dialog *dialog); // important: must acquire GUI lock before using this void fs_emu_dialog_dismiss(fs_emu_dialog *dialog); // important: must acquire GUI lock before using this fs_emu_dialog *fs_emu_dialog_get_current(); extern int g_fs_emu_dialog_mode; static inline int fs_emu_in_dialog_mode() { return g_fs_emu_dialog_mode; } #endif // LIBFSEMU_INCLUDE_FS_EMU_DIALOG_H_ fs-uae-2.2.3+dfsg/libfsemu/include/fs/filesys.h0000644000175000017500000000323112162366653021542 0ustar glaubitzglaubitz#ifndef FS_FILESYS_H_ #define FS_FILESYS_H_ #include #include #include #ifdef WINDOWS // struct timeval is defined here... #include #else #include #endif #include #ifdef __cplusplus extern "C" { #endif struct fs_stat { int mode; int64_t size; time_t atime; time_t mtime; time_t ctime; int atime_nsec; int mtime_nsec; int ctime_nsec; }; int fs_set_file_time(const char *path, struct timeval *tv); int fs_stat(const char *path, struct fs_stat *buf); int fs_fstat(int fd, struct fs_stat *buf); struct fs_dir; typedef struct fs_dir fs_dir; fs_dir* fs_dir_open(const char *path, int flags); const char *fs_dir_read_name(fs_dir *dir); void fs_dir_close(fs_dir *dir); FILE *fs_fopen(const char *path, const char *mode); int fs_open(const char *path, int flags, int mode); int fs_rmdir(const char *path); int fs_unlink(const char *path); int fs_rename(const char *old_path, const char *new_path); int fs_mkdir(const char *path, int mode); int fs_mkdir_with_parents(const char *path, int mode); char *fs_path_get_dirname(const char *path) FS_MALLOC; char *fs_path_get_basename(const char *path) FS_MALLOC; const char *fs_get_home_dir(void); const char *fs_get_documents_dir(void); const char *fs_get_desktop_dir(void); char *fs_get_current_dir(void); int fs_path_exists(const char *path); int fs_path_is_file(const char *path); int fs_path_is_dir(const char *path); int fs_path_is_absolute(const char *path); int64_t fs_path_get_size(const char *path); char *fs_path_join(const char *first_element, ...) FS_MALLOC FS_SENTINEL; #ifdef __cplusplus } #endif #endif // FS_FILESYS_H_ fs-uae-2.2.3+dfsg/libfsemu/include/fs/list.h0000644000175000017500000000215212162366654021041 0ustar glaubitzglaubitz#ifndef FS_LIST_H_ #define FS_LIST_H_ #include #ifdef __cplusplus extern "C" { #endif struct fs_list { void *data; struct fs_list *next; struct fs_list *prev; }; typedef struct fs_list fs_list; fs_list *fs_list_append(fs_list *list, void *data) FS_WARN_UNUSED_RESULT; fs_list *fs_list_prepend(fs_list *list, void *data) FS_WARN_UNUSED_RESULT; fs_list *fs_list_delete_link(fs_list *list, fs_list *link_) FS_WARN_UNUSED_RESULT; void fs_list_free(fs_list *list); void fs_list_free_1(fs_list *list); fs_list* fs_list_sort(fs_list *list, fs_compare_func compare_func) FS_WARN_UNUSED_RESULT; void fs_list_foreach(fs_list *list, fs_func func, void *user_data); fs_list *fs_list_last(fs_list *list); fs_list *fs_list_nth(fs_list *list, unsigned int n); fs_list *fs_list_insert_before(fs_list *list, fs_list *sibling, void *data); int fs_list_index(fs_list *list, const void *data); fs_list *fs_list_remove_link(fs_list *list, fs_list *llink); int fs_list_position(fs_list *list, fs_list *llink); fs_list *fs_list_reverse(fs_list *list); #ifdef __cplusplus } #endif #endif // FS_LIST_H_ fs-uae-2.2.3+dfsg/libfsemu/include/fs/image.h0000644000175000017500000000117312162366654021152 0ustar glaubitzglaubitz#ifndef FS_IMAGE_H_ #define FS_IMAGE_H_ #include #define FS_IMAGE_FORMAT_NONE 0 #define FS_IMAGE_FORMAT_RGB 1 #define FS_IMAGE_FORMAT_RGBA 2 typedef struct fs_image { struct fs_ref ref; int format; int width; int height; unsigned char* data; } fs_image; fs_image* fs_image_new(); fs_image* fs_image_new_from_file(const char* file); //void fs_image_destroy(void* ptr); //int fs_image_init(struct fs_image* image); //int fs_image_load_file(struct fs_image* image, const char* file); int fs_image_save_data(const char *path, void *data, int width, int height, int bpp); #endif // FS_IMAGE_H_ fs-uae-2.2.3+dfsg/libfsemu/include/fs/inifile.h0000644000175000017500000000124212162366653021503 0ustar glaubitzglaubitz#ifndef FS_INIFILE_H_ #define FS_INIFILE_H_ struct fs_ini_file; typedef struct fs_ini_file fs_ini_file; fs_ini_file* fs_ini_file_open(const char *path); void fs_ini_file_destroy(fs_ini_file *ini_file); char **fs_ini_file_get_groups(fs_ini_file *ini_file, int *length); char **fs_ini_file_get_keys(fs_ini_file *ini_file, const char *group_name, int *length); int fs_ini_file_has_group(fs_ini_file *ini_file, const char *group_name); char *fs_ini_file_get_value(fs_ini_file *ini_file, const char *group_name, const char *key); char *fs_ini_file_get_string(fs_ini_file *ini_file, const char *group_name, const char *key); #endif // FS_INIFILE_H_ fs-uae-2.2.3+dfsg/libfsemu/include/fs/fs.h0000644000175000017500000000043212162366654020475 0ustar glaubitzglaubitz#ifndef FS_FS_H_ #define FS_FS_H_ #include #include #include #include #include #include #include #ifdef __cplusplus extern "C" { #endif #ifdef __cplusplus } #endif #endif // FS_FS_H_ fs-uae-2.2.3+dfsg/libfsemu/include/fs/defines.h0000644000175000017500000000274512162366654021513 0ustar glaubitzglaubitz#ifndef FS_DEFINES_H_ #define FS_DEFINES_H_ #include #include #include #define FS_SENTINEL __attribute__((__sentinel__)) #define FS_MALLOC __attribute__((__malloc__)) #define FS_WARN_UNUSED_RESULT __attribute__((warn_unused_result)) // FIXME //#define FS_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0)) #define FS_UNLIKELY(expr) expr #define FS_PATH_MAX 2048 typedef int fs_bool; #ifndef TRUE #define TRUE 1 #endif #ifndef FALSE #define FALSE 0 #endif #ifndef MAX #define MAX(a, b) (((a) > (b)) ? (a) : (b)) #endif #ifndef MIN #define MIN(a, b) (((a) < (b)) ? (a) : (b)) #endif #define FS_INT_TO_POINTER(i) ((void *) (long) (i)) #define FS_POINTER_TO_INT(p) ((int) (long) (p)) #define FS_UINT_TO_POINTER(u) ((void *) (unsigned long) (u)) #define FS_POINTER_TO_UINT(p) ((unsigned int) (unsigned long) (p)) #ifdef __cplusplus extern "C" { #endif typedef int (*fs_compare_func)(const void *a, const void *b); typedef int (*fs_compare_data_func)(const void *a, const void *b, void *user_data); typedef int (*fs_equal_func)(const void *a, const void *b); typedef void (*fs_destroy_notify)(void *data); typedef void (*fs_func)(void * data, void *user_data); typedef unsigned int (*fs_hash_func)(const void *key); typedef void (*fs_h_func)(void *key, void *value, void *user_data); typedef int (*fs_hr_func)(void *key, void *value, void *user_data); typedef void (*fs_free_func)(void *data); #ifdef __cplusplus } #endif #endif // FS_DEFINES_H_ fs-uae-2.2.3+dfsg/libfsemu/out/0000755000175000017500000000000012162366653016470 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/libfsemu/out/.dummy0000644000175000017500000000000012162366653017612 0ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/libfsemu/src/0000755000175000017500000000000012162366654016451 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/libfsemu/src/opengl.c0000644000175000017500000001527212162366654020110 0ustar glaubitzglaubitz/* libfsml - a media library for video and input * Copyright (C) 2011 Frode Solheim * * This library is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 of the License, or (at * your option) any later version. * * This library is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #ifdef USE_OPENGL #include #include #include #include #include #include #include #if defined(USE_GLES) && !defined(FAKE_GLES) #define glOrtho glOrthof #endif //#define TRACE static int g_texturing_enabled = -1; static int g_blending_enabled = -1; static int g_viewport_x = -1; static int g_viewport_y = -1; static int g_viewport_w = -1; static int g_viewport_h = -1; static int g_current_texture = -1; static int g_unpack_row_length = -1; static int g_projection = -1; static float g_r = -1; static float g_g = -1; static float g_b = -1; static float g_a = -1; void fs_gl_reset_client_state() { g_texturing_enabled = -1; g_blending_enabled = -1; g_viewport_x = -1; g_viewport_y = -1; g_viewport_w = -1; g_viewport_h = -1; g_current_texture = -1; g_unpack_row_length = -1; g_projection = -1; } typedef struct context_notification { fs_gl_context_notify_function function; void *data; } context_notification; static fs_list *g_context_notifications = NULL; void fs_gl_send_context_notification(int notification) { fs_list *link = g_context_notifications; while (link) { context_notification *cn = link->data; cn->function(notification, cn->data); link = link->next; } } void fs_gl_add_context_notification(fs_gl_context_notify_function function, void *data) { context_notification *cn = fs_new(context_notification, 1); cn->function = function; cn->data = data; // better to prepend than to append, since long-living texture // notifications will then end up at the end.. g_context_notifications = fs_list_prepend(g_context_notifications, cn); } void fs_gl_remove_context_notification(fs_gl_context_notify_function function, void *data) { fs_list *link = g_context_notifications; while (link) { context_notification *cn = link->data; if (cn->function == function && cn->data == data) { free(cn); g_context_notifications = fs_list_delete_link( g_context_notifications, link); return; } link = link->next; } fs_log("WARNING: did not find context notification to remove"); } void fs_gl_finish() { #ifdef TRACE printf("---------- glFinish ----------\n"); #endif glFinish(); CHECK_GL_ERROR(); } void fs_gl_color4fv(float *c) { fs_gl_color4f(c[0], c[1], c[2], c[3]); } void fs_gl_color4f(float r, float g, float b, float a) { if (g_r == r && g_g == g && g_b == b && g_a == a) { return; } #ifdef TRACE printf("glColor4f %f %f %f %f\n", r, g, b, a); #endif glColor4f(r, g, b, a); g_r = r; g_g = g; g_b = b; g_a = a; } void fs_gl_bind_texture(int texture) { if (g_current_texture == texture) { return; } #ifdef TRACE printf("glBindTexture %d\n", texture); #endif glBindTexture(GL_TEXTURE_2D, texture); CHECK_GL_ERROR(); g_current_texture = texture; } void fs_gl_unpack_row_length(int length) { #ifdef USE_GLES // not available on GLES #else if (g_unpack_row_length == length) { return; } #ifdef TRACE printf("glPixelStorei GL_UNPACK_ROW_LENGTH %d\n", length); #endif glPixelStorei(GL_UNPACK_ROW_LENGTH, length); CHECK_GL_ERROR(); g_unpack_row_length = length; #endif } void fs_gl_viewport(int x, int y, int w, int h) { if (x == g_viewport_x && y == g_viewport_y && w == g_viewport_w && h == g_viewport_h) { return; } #ifdef TRACE printf("glViewport %d %d %d %d\n", x, y, w, h); #endif glViewport(x, y, w, h); CHECK_GL_ERROR(); g_viewport_x = x; g_viewport_y = y; g_viewport_w = w; g_viewport_h = h; } void fs_gl_texturing(int enable) { if (enable == g_texturing_enabled) { return; } #ifdef TRACE printf("glEnable GL_TEXTURE_2D %d\n", enable); #endif enable ? glEnable(GL_TEXTURE_2D) : glDisable(GL_TEXTURE_2D); CHECK_GL_ERROR(); g_texturing_enabled = enable; } void fs_gl_blending(int enable) { if (enable == g_blending_enabled) { return; } #ifdef TRACE printf("glEnable GL_BLEND %d\n", enable); #endif enable ? glEnable(GL_BLEND) : glDisable(GL_BLEND); CHECK_GL_ERROR(); g_blending_enabled = enable; } void fs_gl_ortho() { if (g_projection == 1) { return; } #ifdef TRACE printf("glOrtho -1.0 1.0 -1.0 1.0\n"); #endif glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0); glMatrixMode(GL_MODELVIEW); CHECK_GL_ERROR(); //glLoadIdentity(); g_projection = 1; } void fs_gl_ortho_hd() { if (g_projection == 2) { return; } #ifdef TRACE printf("glOrtho 0.0 1920.0 0.0 1080.0\n"); #endif glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0.0, 1920.0, 0.0, 1080.0, -1.0, 1.0); glMatrixMode(GL_MODELVIEW); CHECK_GL_ERROR(); //glLoadIdentity(); g_projection = 2; } void fs_gl_perspective() { if (g_projection == 3) { return; } #ifdef TRACE printf("gluPerspective 45.0, 16.0 / 9.0 0.1 100.0\n"); #endif glMatrixMode(GL_PROJECTION); glLoadIdentity(); // FIXME: ASPECT double fov_y = 45.0; double aspect_ratio = 16.0 / 9.0; double front = 0.1; double back = 100.0; #ifdef USE_GLES const double DEG2RAD = 3.14159265 / 180; double tangent = tan(fov_y/2 * DEG2RAD); // tangent of half fovY double height = front * tangent; // half height of near plane double width = height * aspect_ratio; // half width of near plane // params: left, right, bottom, top, front, back glFrustumf(-width, width, -height, height, front, back); #else gluPerspective(fov_y, aspect_ratio, front, back); #endif glMatrixMode(GL_MODELVIEW); CHECK_GL_ERROR(); //glLoadIdentity(); g_projection = 3; } #endif // USE_OPENGL fs-uae-2.2.3+dfsg/libfsemu/src/ref.c0000644000175000017500000000125712162366654017376 0ustar glaubitzglaubitz#include #include #include void fs_ref_initialize(void *ptr, void (*destroy_function)(void *ptr)) { struct fs_ref *ref = ptr; ref->magic = FS_REF_MAGIC; ref->count = 1; ref->destroy = destroy_function; } int fs_ref(void *ptr) { struct fs_ref *ref = ptr; ref->count += 1; return ref->count; } int fs_unref(void *ptr) { struct fs_ref* ref = ptr; if (ref->magic != FS_REF_MAGIC) { fs_log("ERROR: not UNREF'ING fs-ref struct\n"); return -1; } ref->count -= 1; if (ref->count == 0) { ref->magic = 0x00000000; ref->destroy(ptr); return 0; } return ref->count; } fs-uae-2.2.3+dfsg/libfsemu/src/filesys.c0000644000175000017500000003457012162366654020304 0ustar glaubitzglaubitz#ifdef WINDOWS #include #else #include #include #include #endif #include #include #include #include #include #include #include #ifdef USE_GLIB #include #include #else #include #include #include #include #ifdef WINDOWS #define FS_IS_DIR_SEPARATOR(x) ((x) == '/' || (x) == '\\') #define FS_DIR_SEPARATOR '\\' #else #define FS_IS_DIR_SEPARATOR(x) ((x) == '/') #define FS_DIR_SEPARATOR '/' #endif #endif #ifdef WINDOWS static wchar_t *wide(const char *utf8) { if (utf8[0] == '\0') { wchar_t *result = (wchar_t *) malloc(sizeof(wchar_t)); result[0] = L'0'; return result; } int strict = 1; int size = -1; DWORD flags = 0; if (strict) { flags = MB_ERR_INVALID_CHARS; } else { // FIXME: non-strict mode does not seem to work on Vista/7 } // count number of elements to convert, do not use MB_PRECOMPOSED // with CP_UTF8 -- will fail with error INVALID_FLAGS int chars = MultiByteToWideChar(CP_UTF8, flags, utf8, size, NULL, 0); if (chars == 0) { // error convering to wide string wchar_t *result = (wchar_t *) malloc(sizeof(wchar_t)); result[0] = L'0'; return result; } // convert wchar_t* wstr = (wchar_t*) (malloc(sizeof(wchar_t) * (chars + 1))); chars = MultiByteToWideChar(CP_UTF8, flags, utf8, size, wstr, chars + 1); if (chars == 0) { free(wstr); wchar_t *result = (wchar_t *) malloc(sizeof(wchar_t)); result[0] = L'0'; return result; } return wstr; } static void time_val_to_file_time(struct timeval *tv, FILETIME *ft) { // Note that LONGLONG is a 64-bit value //LONGLONG ll; ULARGE_INTEGER uli; uli.QuadPart = Int32x32To64(tv->tv_sec, 10000000) + 116444736000000000LL; // FILETIME contains 100-nanosecond intervals uli.QuadPart += ((LONGLONG) tv->tv_usec) * 10; //ft->dwLowDateTime = (DWORD)ll; //ft->dwHighDateTime = ll >> 32; ft->dwLowDateTime = uli.LowPart; ft->dwHighDateTime = uli.HighPart; //printf("%d %d %lld, %d, %d\n", (int) tv->tv_sec, (int) tv->tv_usec, uli.QuadPart, ft->dwHighDateTime, ft->dwLowDateTime); } static void file_time_to_time_val(FILETIME *ft, struct timeval *tv) { #if 0 static int test = 1; if (test == 1) { test = 0; FILETIME ft; struct timeval tv; tv.tv_sec = 0; tv.tv_usec = 0; time_val_to_file_time(&tv, &ft); file_time_to_time_val(&ft, &tv); printf("%d %d\n", (int) tv.tv_sec, (int) tv.tv_usec); exit(1); } #endif ULARGE_INTEGER uli; uli.LowPart = ft->dwLowDateTime; uli.HighPart = ft->dwHighDateTime; // Convert from 100s of nanoseconds since 1601-01-01 // to Unix epoch. Yes, this is Y2038 unsafe. uli.QuadPart -= ((int64_t) 116444736) * ((int64_t) 1000000000); uli.QuadPart /= 10; tv->tv_sec = uli.QuadPart / 1000000; tv->tv_usec = uli.QuadPart % 1000000; } #endif #if defined(WINDOWS) #elif defined(MACOSX) #define HAVE_STAT_TV_NSEC2 #else #define HAVE_STAT_TV_NSEC #endif // some code adapted from glib int fs_stat(const char *path, struct fs_stat *buf) { struct stat st; #ifdef USE_GLIB // g_stat handles unicode file names on Windows int result = g_stat(path, &st); #else int result = stat(path, &st); #endif if (result == 0) { buf->atime = st.st_atime; buf->mtime = st.st_mtime; buf->ctime = st.st_ctime; buf->size = st.st_size; buf->mode = st.st_mode; #if defined(HAVE_STAT_TV_NSEC) buf->atime_nsec = st.st_atim.tv_nsec; buf->mtime_nsec = st.st_mtim.tv_nsec; buf->ctime_nsec = st.st_ctim.tv_nsec; #elif defined(HAVE_STAT_TV_NSEC2) buf->atime_nsec = st.st_atimespec.tv_nsec; buf->mtime_nsec = st.st_mtimespec.tv_nsec; buf->ctime_nsec = st.st_ctimespec.tv_nsec; #elif defined(HAVE_STAT_NSEC) buf->atime_nsec = st.st_atime_nsec; buf->mtime_nsec = st.st_mtime_nsec; buf->ctime_nsec = st.st_ctime_nsec; #elif defined(WINDOWS) HANDLE h; DWORD flags; DWORD attr; FILETIME t1, t2, t3; wchar_t *upath = wide(path); attr = GetFileAttributesW(upath); flags = FILE_ATTRIBUTE_NORMAL; if (attr != INVALID_FILE_ATTRIBUTES && (attr & FILE_ATTRIBUTE_DIRECTORY)) { // needed to obtain a handle to a directory flags = FILE_FLAG_BACKUP_SEMANTICS; } h = CreateFileW(upath, FILE_READ_ATTRIBUTES, 0, NULL, OPEN_EXISTING, flags, NULL); if (h != INVALID_HANDLE_VALUE) { if (GetFileTime (h, &t1, &t2, &t3)) { struct timeval tv; file_time_to_time_val(&t1, &tv); buf->ctime = tv.tv_sec; buf->ctime_nsec = tv.tv_usec * 1000; file_time_to_time_val(&t2, &tv); buf->atime = tv.tv_sec; buf->atime_nsec = tv.tv_usec * 1000; file_time_to_time_val(&t3, &tv); buf->mtime = tv.tv_sec; buf->mtime_nsec = tv.tv_usec * 1000; } CloseHandle (h); } free(upath); #else #error no sub-second mtime #endif } return result; } int fs_set_file_time(const char *path, struct timeval *t) { #ifdef WINDOWS HANDLE h; DWORD flags; DWORD attr; FILETIME ft; time_val_to_file_time(t, &ft); int result = -1; wchar_t *upath = wide(path); attr = GetFileAttributesW(upath); flags = FILE_ATTRIBUTE_NORMAL; if (attr != INVALID_FILE_ATTRIBUTES && (attr & FILE_ATTRIBUTE_DIRECTORY)) { // needed to obtain a handle to a directory flags = FILE_FLAG_BACKUP_SEMANTICS; } h = CreateFileW(upath, FILE_WRITE_ATTRIBUTES, 0, NULL, OPEN_EXISTING, flags, NULL); if (h != INVALID_HANDLE_VALUE) { if (SetFileTime (h, NULL, NULL, &ft)) { result = 0; } CloseHandle (h); } free(upath); return result; #else struct timeval tv[2]; tv[0].tv_sec = t->tv_sec; tv[1].tv_sec = t->tv_sec; tv[0].tv_usec = t->tv_usec; tv[1].tv_usec = t->tv_usec; //printf("utimes %s %lld %lld\n", path, (int64_t) t->tv_sec, // (int64_t) t->tv_usec); return utimes(path, tv); #endif } int64_t fs_path_get_size(const char *path) { struct fs_stat buf; int result = fs_stat(path, &buf); if (result == 0) { return buf.size; } return -1; } int fs_fstat(int fd, struct fs_stat *buf) { struct stat st; int result = fstat(fd, &st); if (result == 0) { buf->atime = st.st_atime; buf->mtime = st.st_mtime; buf->ctime = st.st_ctime; buf->size = st.st_size; buf->mode = st.st_mode; } return result; } //#define USE_GLIB struct fs_dir { #ifdef USE_GLIB GDir *gdir; #else DIR* dir; #endif }; fs_dir* fs_dir_open(const char *path, int flags) { #ifdef USE_GLIB GDir* gdir = g_dir_open(path, flags, NULL); if (!gdir) { return NULL; } fs_dir *dir = fs_new(fs_dir, 1); dir->gdir = gdir; return dir; #else DIR* d = opendir(path); if (!d) { return NULL; } fs_dir *dir = fs_new(fs_dir, 1); dir->dir = d; return dir; #endif } const char *fs_dir_read_name(fs_dir *dir) { #ifdef USE_GLIB return g_dir_read_name(dir->gdir); #else struct dirent *de = readdir(dir->dir); while (de != NULL) { // skip . and .. names if (de->d_name[0] == '.') { if (de->d_name[1] == '\0' || (de->d_name[1] == '.' && de->d_name[2] == '\0')) { de = readdir(dir->dir); continue; } } //printf(">> %s", de->d_name); return fs_strdup(de->d_name); } return NULL; #endif } void fs_dir_close(fs_dir *dir) { #ifdef USE_GLIB g_dir_close(dir->gdir); #else closedir(dir->dir); #endif free(dir); } FILE *fs_fopen(const char *path, const char *mode) { #ifdef USE_GLIB return g_fopen(path, mode); #else return fopen(path, mode); #endif } int fs_open(const char *path, int flags, int mode) { #ifdef USE_GLIB return g_open(path, flags, mode); #else return open(path, flags, mode); #endif } int fs_rmdir(const char *path) { #ifdef USE_GLIB return g_rmdir(path); #else return rmdir(path); #endif } int fs_unlink(const char *path) { #ifdef USE_GLIB return g_unlink(path); #else return unlink(path); #endif } int fs_rename(const char *old_path, const char *new_path) { #ifdef USE_GLIB return g_rename(old_path, new_path); #else return rename(old_path, new_path); #endif } int fs_mkdir(const char *path, int mode) { #ifdef USE_GLIB return g_mkdir(path, mode); #else return mkdir(path, mode); #endif } #ifndef USE_GLIB static const char *path_skip_root(const char *fn) { const char *p = fn; #ifdef WINDOWS if (p[0] != '\0' && p[1] == ':') { p += 2; while (*p == '/' || *p == '\\') { ++p; } } #else while (*p++ == '/') {} #endif return p; } #endif int fs_mkdir_with_parents(const char *pathname, int mode) { #ifdef USE_GLIB return g_mkdir_with_parents(pathname, mode); #else char *fn, *p; if (pathname == NULL || *pathname == '\0') { errno = EINVAL; return -1; } fn = fs_strdup(pathname); if (fs_path_is_absolute(fn)) p = (char *) path_skip_root(fn); else p = fn; do { while (*p && !FS_IS_DIR_SEPARATOR (*p)) p++; if (!*p) p = NULL; else *p = '\0'; if (!fs_path_exists(fn)) { if (fs_mkdir(fn, mode) == -1 && errno != EEXIST) { int errno_save = errno; free(fn); errno = errno_save; return -1; } } else if (!fs_path_is_dir(fn)) { free(fn); errno = ENOTDIR; return -1; } if (p) { *p++ = FS_DIR_SEPARATOR; while (*p && FS_IS_DIR_SEPARATOR (*p)) p++; } } while (p); free(fn); return 0; #endif } char *fs_path_get_dirname(const char *path) { #ifdef USE_GLIB return g_path_get_dirname(path); #else char *p = fs_strdup(path); char *result = fs_strdup(dirname(p)); free(p); return result; #endif } char *fs_path_get_basename(const char *path) { #ifdef USE_GLIB return g_path_get_basename(path); #else char *p = fs_strdup(path); char *result = fs_strdup(basename(p)); free(p); return result; #endif } const char *fs_get_home_dir(void) { #ifdef USE_GLIB return g_get_home_dir(); #else const char *result = getenv("HOME"); if (!result) { result = ""; } return result; #endif } const char *fs_get_documents_dir(void) { #ifdef USE_GLIB return g_get_user_special_dir(G_USER_DIRECTORY_DOCUMENTS); #else static const char *dir = NULL; // FIXME: not MT safe // FIXME: support XDG spec, Windows if (dir == NULL) { dir = fs_path_join(fs_get_home_dir(), "Documents", NULL); } return dir; #endif } const char *fs_get_desktop_dir(void) { #ifdef USE_GLIB return g_get_user_special_dir(G_USER_DIRECTORY_DESKTOP); #else static const char *dir = NULL; // FIXME: not MT safe // FIXME: support XDG spec, Windows if (dir == NULL) { dir = fs_path_join(fs_get_home_dir(), "Desktop", NULL); } return dir; #endif } char *fs_get_current_dir(void) { #ifdef USE_GLIB return g_get_current_dir(); #else //return get_current_dir_name(); char *buf = malloc(PATH_MAX); char *result = getcwd(buf, PATH_MAX); if (result == NULL) { free(buf); return fs_strdup(""); } return buf; #endif } int fs_path_exists(const char *path) { #ifdef USE_GLIB return g_file_test(path, G_FILE_TEST_EXISTS); #else struct stat buf; if (stat(path, &buf) != 0) { return 0; } return 1; #endif } int fs_path_is_file(const char *path) { #ifdef USE_GLIB return g_file_test(path, G_FILE_TEST_IS_REGULAR); #else struct stat buf; if (stat(path, &buf) != 0) { return 0; } return S_ISREG(buf.st_mode); #endif } int fs_path_is_dir(const char *path) { #ifdef USE_GLIB return g_file_test(path, G_FILE_TEST_IS_DIR); #else struct stat buf; if (stat(path, &buf) != 0) { return 0; } return S_ISDIR(buf.st_mode); #endif } int fs_path_is_absolute(const char *path) { #ifdef USE_GLIB return g_path_is_absolute(path); #else #ifdef WINDOWS // simple check, only checking that it starts with x: return path[0] != '\0' && path[1] == ':'; #else return path && path[0] == '/'; #endif #endif } #define MAX_JOINED_PATH 1024 char *fs_path_join(const char *first_element, ...) { // MAX_JOINED_PATH 1024 + 1 terminating null character + 1 to // be able to skip some checks char *result = malloc(MAX_JOINED_PATH + 1 + 1); int index = 0; result[index] = '\0'; va_list args; va_start(args, first_element); const char *next_element = first_element; while (1) { const char *element; //const gchar *start; //const gchar *end; if (!next_element) { break; } element = next_element; next_element = va_arg(args, const char*); if (element[0] == '\0') { // skip blank component continue; } if (index > 0 && (result[index - 1] != '/' #ifdef WINDOWS && result[index - 1] != '\\' #endif )) { #ifdef WINDOWS result[index] = '\\'; #else result[index] = '/'; #endif ++index; } //printf("%p %s\n", element, element); int len = strlen(element); if (index + len > MAX_JOINED_PATH) { strcpy(result, "ERROR_MAX_JOINED_PATH"); break; } strcpy(result + index, element); index += len; } va_end(args); //printf(">>>>%s<\n", result); return result; #if 0 gchar *str; va_list args; va_start(args, first_element); #ifndef WINDOWS str = g_build_path_va("/", first_element, &args, NULL); #else str = g_build_pathname_va(first_element, &args, NULL); #endif va_end(args); return str; #endif } fs-uae-2.2.3+dfsg/libfsemu/src/unicode.c0000644000175000017500000000433312162366654020246 0ustar glaubitzglaubitz#include #include #ifdef USE_GLIB #include #endif #include #include #include #ifdef USE_ICONV #include #endif char *fs_utf8_strdown(const char *str, ssize_t len) { #ifdef USE_GLIB return g_utf8_strdown(str, len); #else // FIXME: should handle unicode characters return fs_ascii_strdown(str, len); #endif } char *fs_utf8_strup(const char *str, ssize_t len) { #ifdef USE_GLIB return g_utf8_strup(str, len); #else // FIXME: should handle unicode characters return fs_ascii_strup(str, len); #endif } static char* convert(const char *src, int len, const char *from_code, const char *to_code ){ #ifdef USE_GLIB gsize bytes_read, bytes_written; char *result = g_convert(src, len, to_code, from_code, &bytes_read, &bytes_written, NULL); return result; #elif defined(ANDROID) // FIXME: //#warning no character conversion routine return fs_strdup(src); #else iconv_t converter = iconv_open(to_code, from_code); if (converter == (iconv_t) -1) { return NULL; } if (len == -1) { len = strlen(src); } int size = 128; char *dst = malloc(size + 1); size_t outbytesleft; while(1) { char *inbuf = (char*) src; char *outbuf = dst; size_t inbytesleft = len; outbytesleft = size; size_t result = iconv(converter, &inbuf, &inbytesleft, &outbuf, &outbytesleft); if (result == -1) { if (errno == E2BIG) { size *= 2; dst = realloc(dst, size + 1); continue; } else { // invalid multibyte sequence is encountered in the input free(dst); iconv_close(converter); return NULL; } } break; } iconv_close(converter); // FIXME: is output already NULL-terminated? dst[size - outbytesleft] = 0; return dst; #endif } char *fs_utf8_to_latin1(const char *src, int len) { return convert(src, len, "UTF-8", "ISO-8859-1"); } char *fs_utf8_from_latin1(const char *src, int len) { return convert(src, len, "ISO-8859-1", "UTF-8"); } fs-uae-2.2.3+dfsg/libfsemu/src/GLee.h0000644000175000017500000000002512162366654017433 0ustar glaubitzglaubitz#include fs-uae-2.2.3+dfsg/libfsemu/src/init.c0000644000175000017500000000135712162366654017566 0ustar glaubitzglaubitz#include #include #include #include #ifdef USE_GLIB #include #endif static fs_mutex *g_init_mutex; void fs_init() { #ifdef USE_GLIB GMemVTable vtable; memset(&vtable, 0, sizeof(GMemVTable)); vtable.malloc = malloc; vtable.realloc = realloc; vtable.free = free; g_mem_set_vtable(&vtable); #if !GLIB_CHECK_VERSION (2, 32, 0) // g_thread_init is deprecated since 2.32, and is only needed for older // versions of Glib (quite a bit older than 2.32, actually) g_thread_init(NULL ); #endif #endif g_init_mutex = fs_mutex_create(); } void fs_init_lock() { fs_mutex_lock(g_init_mutex); } void fs_init_unlock() { fs_mutex_unlock(g_init_mutex); } fs-uae-2.2.3+dfsg/libfsemu/src/image.c0000644000175000017500000001556112162366654017707 0ustar glaubitzglaubitz#include #include #include #include #include #include #ifdef USE_PNG #include #endif void fs_image_destroy(void* ptr) { fs_log("fs_image_destroy\n"); fs_image* image = ptr; if (image->data) { free(image->data); } free(image); } fs_image* fs_image_new() { fs_image* image = malloc(sizeof(fs_image)); memset(image, 0, sizeof(fs_image)); fs_ref_initialize(image, fs_image_destroy); image->format = FS_IMAGE_FORMAT_NONE; image->data = NULL; image->width = 0; image->height = 0; return image; } fs_image* fs_image_new_from_file(const char* file) { #ifdef USE_PNG int y; int width, height; png_byte color_type; png_byte bit_depth; png_structp png_ptr; png_infop info_ptr; //int number_of_passes; png_bytep * row_pointers; unsigned char header[8]; fs_image* image = fs_image_new(); FILE *fp = fs_fopen(file, "rb"); if (!fp) { fs_log("file %s could not be opened for reading\n", file); fs_unref(image); //return image; return NULL; } if (fread(header, 1, 8, fp) != 8) { fs_log("could not read 8 bytes from PNG file %s\n", file); return NULL; } if (png_sig_cmp(header, 0, 8)) { fs_log("file %s is not recognized as a PNG file\n", file); fs_unref(image); //return image; return NULL; } png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); if (!png_ptr) { fs_log("png_create_read_struct failed\n"); //return image; fs_unref(image); return NULL; } info_ptr = png_create_info_struct(png_ptr); if (!info_ptr) { fs_log("png_create_info_struct failed\n"); //return image; fs_unref(image); return NULL; } // FIXME: ERROR HANDLING png_init_io(png_ptr, fp); png_set_sig_bytes(png_ptr, 8); png_read_info(png_ptr, info_ptr); width = png_get_image_width(png_ptr, info_ptr); height = png_get_image_height(png_ptr, info_ptr); color_type = png_get_color_type(png_ptr, info_ptr); bit_depth = png_get_bit_depth(png_ptr, info_ptr); //number_of_passes = png_set_interlace_handling(png_ptr); png_set_interlace_handling(png_ptr); // Convert palette color to RGB if (color_type == PNG_COLOR_TYPE_PALETTE) { png_set_palette_to_rgb(png_ptr); } // Convert grayscale with less than 8 bpp to 8 bpp //if (color_type == PNG_COLOR_TYPE_GRAY && bit_depth < 8) { // png_set_gray_1_2_4_to_8(png_ptr); //} // Add full alpha channel if there's transparency if (png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS)) { png_set_tRNS_to_alpha(png_ptr); } // If there's more than one pixel per byte, expand to 1 pixel / byte if (bit_depth < 8) { png_set_packing(png_ptr); } // expand rgb to rgba if (color_type == PNG_COLOR_TYPE_RGB) { png_set_filler(png_ptr, 0xff, PNG_FILLER_AFTER); } png_read_update_info(png_ptr, info_ptr); bit_depth = png_get_bit_depth(png_ptr, info_ptr); //fs_log("%d\n", bit_depth); int channels = png_get_channels(png_ptr, info_ptr); //fs_log("channels: %d\n", channels); /* read file */ //if (setjmp(png_jmpbuf(png_ptr))) // abort_("[read_png_file] Error during read_image"); int format = FS_IMAGE_FORMAT_NONE; switch (channels) { case 4: format = FS_IMAGE_FORMAT_RGBA; break; case 3: format = FS_IMAGE_FORMAT_RGB; break; default: fs_log("unsupported number of channels: %d\n", channels); fs_unref(image); return NULL; } unsigned char* data = malloc(width * height * channels); row_pointers = (png_bytep*) malloc(sizeof(png_bytep) * height); for (y = 0; y < height; y++) { //row_pointers[y] = (png_byte*) malloc(png_get_rowbytes(png_ptr,info_ptr)); row_pointers[y] = data + width * y * channels; } //} //else { // fs_log("LOAD PNG: unsupported bit depth: %d\n", bit_depth); // return NULL; //} png_read_image(png_ptr, row_pointers); fclose(fp); //fs_log("png_read_image done\n"); image->format = format; image->data = data; image->width = width; image->height = height; return image; #else return NULL; #endif } int fs_image_save_data(const char *path, void *buffer, int width, int height, int bpp) { #ifdef USE_PNG FILE *fp; void *data; png_structp png_ptr; png_infop info_ptr; unsigned char** row_pointers = NULL; int i; int bit_depth; int color_type; int interlace_type; int compression_type; int filter_method; int row_stride; if (width < 1) { fs_log("unsupported width\n"); return 0; } if (height < 1) { fs_log("unsupported height\n"); return 0; } if (!(bpp == 3 || bpp == 4 )) { fs_log("unsupported bpp\n"); return 0; } fp = fs_fopen(path, "wb"); if (fp == NULL) { fs_log("could not open png file for writing\n"); return 0; } png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); if (!png_ptr) { fclose(fp); fs_log("png_create_write_struct failed\n"); return 0; } info_ptr = png_create_info_struct(png_ptr); if (!info_ptr) { png_destroy_write_struct(&png_ptr, (png_infopp)NULL); fclose(fp); fs_log("png_create_info_struct failed\n"); return 0; } if (setjmp(png_jmpbuf(png_ptr))) { png_destroy_write_struct(&png_ptr, &info_ptr); if (row_pointers != NULL) { free(row_pointers); } fclose(fp); fs_log("error writing png\n"); return 0; } png_init_io(png_ptr, fp); compression_type = PNG_COMPRESSION_TYPE_BASE; interlace_type = PNG_INTERLACE_NONE; bit_depth = 8; filter_method = PNG_FILTER_TYPE_DEFAULT; if (bpp == 3) { color_type = PNG_COLOR_TYPE_RGB; row_stride = width * 3; } else if (bpp == 4) { color_type = PNG_COLOR_TYPE_RGB_ALPHA; row_stride = width * 4; } //fs_log("bpp: %d\n", bpp); png_set_IHDR(png_ptr, info_ptr, width, height, bit_depth, color_type, interlace_type, compression_type, filter_method); row_pointers = malloc(sizeof (unsigned char*) * height); data = buffer; for (i = 0; i < height; i++) { row_pointers[i] = data; data = data + row_stride; } png_set_rows(png_ptr, info_ptr, row_pointers); png_write_png(png_ptr, info_ptr, PNG_TRANSFORM_IDENTITY, NULL); //png_write_end(png_ptr, info_ptr); png_destroy_write_struct(&png_ptr, &info_ptr); free(row_pointers); fclose(fp); return 1; #else return 0; #endif } fs-uae-2.2.3+dfsg/libfsemu/src/ml/0000755000175000017500000000000012162366654017061 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/libfsemu/src/ml/macosx.c0000644000175000017500000001507512162366654020527 0ustar glaubitzglaubitz#ifdef MACOSX #include #include #include #include #include #include //#include #include #include #include "ml_internal.h" void fs_ml_configure_window() { } #if 0 static int64_t g_syncbase = 0; static int64_t fs_ml_read_clock (void) { return mach_absolute_time(); } void fs_ml_calibrate_clock(void) { mach_timebase_info_data_t info; mach_timebase_info(&info); g_syncbase = 1000000000 * info.denom / info.numer; } int64_t fs_ml_monotonic_time() { return (1000000 * fs_ml_read_clock()) / g_syncbase; } #endif void fs_ml_usleep(int usec) { usleep(usec); } void fs_ml_set_fullscreen_extra() { // Using LSUIPresentationMode instead //SetSystemUIMode(kUIModeAllHidden, kUIOptionAutoShowMenuBar); } int fs_ml_video_mode_get_current(fs_ml_video_mode *mode) { mode->width = 0; mode->height = 0; mode->fps = 0; mode->bpp = 0; mode->flags = 0; #if __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 1060 // CGDisplayCurrentMode is deprecated in Mac OS X 10.6, so we use // the new API here CGDirectDisplayID currentDisplay = CGDisplayPrimaryDisplay( kCGDirectMainDisplay); CGDisplayModeRef currentMode = CGDisplayCopyDisplayMode( currentDisplay); mode->width = CGDisplayModeGetWidth(currentMode); mode->height = CGDisplayModeGetHeight(currentMode); mode->fps = CGDisplayModeGetRefreshRate(currentMode); CGDisplayModeRelease(currentMode); #else CFNumberRef number; long refresh, width, height; CFDictionaryRef currentMode = CGDisplayCurrentMode(kCGDirectMainDisplay); number = CFDictionaryGetValue(currentMode, kCGDisplayWidth); CFNumberGetValue(number, kCFNumberLongType, &width); number = CFDictionaryGetValue(currentMode, kCGDisplayHeight); CFNumberGetValue(number, kCFNumberLongType, &height); number = CFDictionaryGetValue(currentMode, kCGDisplayRefreshRate); CFNumberGetValue(number, kCFNumberLongType, &refresh); mode->width = width; mode->height = height; mode->fps = refresh; #endif //fs_log("WARNING: assuming 60 Hz refresh rate on Mac OS X\n"); //mode->fps = 60; if (mode->fps == 0) { fs_log("WARNING: refresh rate was not detected\n"); fs_log("full video sync will not be enabled automatically, but can " "be forced\n"); } return 0; } #define MAX_SCANCODES 200 static int g_key_map[MAX_SCANCODES] = {}; void fs_ml_initialize_keymap() { for (int i = 0; i < MAX_SCANCODES; i++) { g_key_map[i] = -1; } g_key_map[53] = FS_ML_KEY_ESCAPE; g_key_map[122] = FS_ML_KEY_F1; g_key_map[120] = FS_ML_KEY_F2; g_key_map[99] = FS_ML_KEY_F3; g_key_map[118] = FS_ML_KEY_F4; g_key_map[96] = FS_ML_KEY_F5; g_key_map[97] = FS_ML_KEY_F6; g_key_map[98] = FS_ML_KEY_F7; g_key_map[100] = FS_ML_KEY_F8; g_key_map[101] = FS_ML_KEY_F9; g_key_map[109] = FS_ML_KEY_F10; g_key_map[103] = FS_ML_KEY_F11; g_key_map[111] = FS_ML_KEY_F12; g_key_map[10] = FS_ML_KEY_BACKQUOTE; g_key_map[18] = FS_ML_KEY_1; g_key_map[19] = FS_ML_KEY_2; g_key_map[20] = FS_ML_KEY_3; g_key_map[21] = FS_ML_KEY_4; g_key_map[23] = FS_ML_KEY_5; g_key_map[22] = FS_ML_KEY_6; g_key_map[26] = FS_ML_KEY_7; g_key_map[28] = FS_ML_KEY_8; g_key_map[25] = FS_ML_KEY_9; g_key_map[29] = FS_ML_KEY_0; g_key_map[27] = FS_ML_KEY_MINUS; g_key_map[24] = FS_ML_KEY_EQUALS; g_key_map[15] = FS_ML_KEY_BACKSPACE; g_key_map[48] = FS_ML_KEY_TAB; g_key_map[12] = FS_ML_KEY_Q; g_key_map[13] = FS_ML_KEY_W; g_key_map[14] = FS_ML_KEY_E; g_key_map[15] = FS_ML_KEY_R; g_key_map[17] = FS_ML_KEY_T; g_key_map[16] = FS_ML_KEY_Y; g_key_map[32] = FS_ML_KEY_U; g_key_map[34] = FS_ML_KEY_I; g_key_map[31] = FS_ML_KEY_O; g_key_map[35] = FS_ML_KEY_P; g_key_map[33] = FS_ML_KEY_LEFTBRACKET; g_key_map[30] = FS_ML_KEY_RIGHTBRACKET; g_key_map[36] = FS_ML_KEY_RETURN; //g_key_map[66] = FS_ML_KEY_CAPSLOCK; g_key_map[0] = FS_ML_KEY_A; g_key_map[1] = FS_ML_KEY_S; g_key_map[2] = FS_ML_KEY_D; g_key_map[3] = FS_ML_KEY_F; g_key_map[5] = FS_ML_KEY_G; g_key_map[4] = FS_ML_KEY_H; g_key_map[38] = FS_ML_KEY_J; g_key_map[40] = FS_ML_KEY_K; g_key_map[37] = FS_ML_KEY_L; g_key_map[41] = FS_ML_KEY_SEMICOLON; g_key_map[39] = FS_ML_KEY_QUOTE; g_key_map[42] = FS_ML_KEY_BACKSLASH; //g_key_map[50] = FS_ML_KEY_LSHIFT; g_key_map[50] = FS_ML_KEY_LESS; g_key_map[6] = FS_ML_KEY_Z; g_key_map[7] = FS_ML_KEY_X; g_key_map[8] = FS_ML_KEY_C; g_key_map[9] = FS_ML_KEY_V; g_key_map[11] = FS_ML_KEY_B; g_key_map[45] = FS_ML_KEY_N; g_key_map[46] = FS_ML_KEY_M; g_key_map[43] = FS_ML_KEY_COMMA; g_key_map[47] = FS_ML_KEY_PERIOD; g_key_map[44] = FS_ML_KEY_SLASH; //g_key_map[62] = FS_ML_KEY_RSHIFT; //g_key_map[37] = FS_ML_KEY_LCTRL; //g_key_map[133] = FS_ML_KEY_LSUPER; //g_key_map[64] = FS_ML_KEY_LALT; g_key_map[49] = FS_ML_KEY_SPACE; //g_key_map[108] = FS_ML_KEY_RALT; //g_key_map[134] = FS_ML_KEY_RSUPER; g_key_map[110] = FS_ML_KEY_MENU; //g_key_map[105] = FS_ML_KEY_RCTRL; g_key_map[105] = FS_ML_KEY_PRINT; g_key_map[107] = FS_ML_KEY_SCROLLOCK; g_key_map[113] = FS_ML_KEY_PAUSE; //g_key_map[118] = FS_ML_KEY_INSERT; //g_key_map[110] = FS_ML_KEY_HOME; //g_key_map[112] = FS_ML_KEY_PAGEUP; //g_key_map[119] = FS_ML_KEY_DELETE; //g_key_map[115] = FS_ML_KEY_END; //g_key_map[117] = FS_ML_KEY_PAGEDOWN; //g_key_map[111] = FS_ML_KEY_UP; //g_key_map[113] = FS_ML_KEY_LEFT; //g_key_map[116] = FS_ML_KEY_DOWN; //g_key_map[114] = FS_ML_KEY_RIGHT; //g_key_map[77] = FS_ML_KEY_NUMLOCK; //g_key_map[106] = FS_ML_KEY_KP_DIVIDE; //g_key_map[63] = FS_ML_KEY_KP_MULTIPLY; //g_key_map[82] = FS_ML_KEY_KP_MINUS; //g_key_map[79] = FS_ML_KEY_KP7; //g_key_map[80] = FS_ML_KEY_KP8; //g_key_map[81] = FS_ML_KEY_KP9; //g_key_map[86] = FS_ML_KEY_KP_PLUS; //g_key_map[83] = FS_ML_KEY_KP4; //g_key_map[84] = FS_ML_KEY_KP5; //g_key_map[85] = FS_ML_KEY_KP6; //g_key_map[87] = FS_ML_KEY_KP1; //g_key_map[88] = FS_ML_KEY_KP2; //g_key_map[89] = FS_ML_KEY_KP3; //g_key_map[104] = FS_ML_KEY_KP_ENTER; //g_key_map[90] = FS_ML_KEY_KP0; //g_key_map[91] = FS_ML_KEY_KP_PERIOD; } int fs_ml_scancode_to_key(int scancode) { if (scancode < 0 || scancode >= MAX_SCANCODES) { return -1; } return g_key_map[scancode]; } #endif // MACOSX fs-uae-2.2.3+dfsg/libfsemu/src/ml/ml.c0000644000175000017500000002262412162366654017643 0ustar glaubitzglaubitz#ifdef WINDOWS #define _WIN32_WINNT 0x0501 #include #endif #include #include #include #include #include #include #include #include #if 0 #include #include #include #include #endif // FIXME: REMOVE #include "../emu/video.h" #include "ml_internal.h" static fs_queue *g_input_queue = NULL; static fs_mutex *g_input_mutex = NULL; static fs_ml_input_function g_input_function = NULL; int g_fs_ml_benchmarking = 0; int g_fs_ml_video_width = 0; int g_fs_ml_video_height = 0; int g_fs_ml_video_sync = 0; int g_fs_ml_video_sync_low_latency = 0; int g_fs_ml_vblank_sync = 0; int g_fs_ml_target_refresh_rate = 0; int g_fs_ml_target_frame_time = 0; // when OpenGL is reinitialized, we update this version (because we may need // to reload textures, etc) int g_fs_ml_opengl_context_stamp = 0; fs_ml_int_function g_fs_ml_video_update_function = NULL; fs_ml_void_function g_fs_ml_video_render_function = NULL; fs_ml_void_function g_fs_ml_video_post_render_function = NULL; //fs_ml_input_device *g_fs_ml_input_devices = NULL; fs_ml_input_device *g_fs_ml_input_devices = NULL; int g_fs_ml_input_device_count = 0; static int g_quit; static fs_ml_void_function g_quit_function = NULL; fs_mutex *g_fs_ml_video_screenshot_mutex = NULL; //int g_fs_ml_video_screenshot = 0; //char *g_fs_ml_video_screenshots_dir = NULL; //char *g_fs_ml_video_screenshots_prefix = NULL; char *g_fs_ml_video_screenshot_path = NULL; void fs_ml_set_quit_function(fs_ml_void_function function) { g_quit_function = function; } void fs_ml_video_screenshot(const char *path) { fs_mutex_lock(g_fs_ml_video_screenshot_mutex); if (g_fs_ml_video_screenshot_path) { free(g_fs_ml_video_screenshot_path); } g_fs_ml_video_screenshot_path = fs_strdup(path); #if 0 if (g_fs_ml_video_screenshots_dir) { free(g_fs_ml_video_screenshots_dir); } if (g_fs_ml_video_screenshots_prefix) { free(g_fs_ml_video_screenshots_prefix); } g_fs_ml_video_screenshots_dir = fs_strdup(screenshots_dir); g_fs_ml_video_screenshots_prefix = fs_strdup(prefix); g_fs_ml_video_screenshot = number; #endif fs_mutex_unlock(g_fs_ml_video_screenshot_mutex); } void fs_ml_quit() { if (g_quit) { fs_log("fs_ml_quit already called\n"); return; } fs_log("fs_ml_quit called\n"); if (g_quit_function) { g_quit_function(); } g_quit = 1; } int fs_ml_is_quitting() { return g_quit; } int fs_ml_input_device_count() { //return g_fs_ml_input_device_count; return FS_ML_INPUT_DEVICES_MAX; } fs_ml_input_device *fs_ml_get_input_devices(int* count) { if (count) { *count = g_fs_ml_input_device_count; } return g_fs_ml_input_devices; } int fs_ml_input_device_get(int index, fs_ml_input_device *device) { if (index < 0) { return 0; } if (index >= FS_ML_INPUT_DEVICES_MAX) { //if (index >= g_fs_ml_input_device_count) { return 0; } if (device == NULL) { return 0; } if (g_fs_ml_input_devices[index].name == NULL) { return 0; } *device = g_fs_ml_input_devices[index]; return 1; } int fs_ml_get_vblank_sync() { return g_fs_ml_vblank_sync; } int fs_ml_get_video_sync() { return g_fs_ml_video_sync; } void fs_ml_video_sync_enable(int enable) { fs_log("fs_ml_video_sync_enable(%d)\n", enable); g_fs_ml_video_sync = enable; } void fs_ml_vblank_sync_enable() { g_fs_ml_vblank_sync = 1; } int fs_ml_video_width() { return g_fs_ml_video_width; } int fs_ml_video_height() { return g_fs_ml_video_height; } void fs_ml_video_set_update_function(fs_ml_int_function function) { g_fs_ml_video_update_function = function; } void fs_ml_video_set_render_function(fs_ml_void_function function) { g_fs_ml_video_render_function = function; } void fs_ml_video_set_post_render_function(fs_ml_void_function function) { g_fs_ml_video_post_render_function = function; } fs_ml_event* fs_ml_alloc_event() { return malloc(sizeof(fs_ml_event)); } void fs_ml_input_event_free(fs_ml_event *event) { free(event); } void fs_ml_set_input_function(fs_ml_input_function function) { g_input_function = function; } int fs_ml_post_event(fs_ml_event* event) { if (event->type == FS_ML_KEYDOWN || event->type == FS_ML_KEYUP) { if (fs_ml_handle_keyboard_shortcut(event)) { return 1; } } if (g_input_function) { g_input_function(event); } /* fs_mutex_lock(g_input_mutex); fs_queue_push_tail(g_input_queue, event); fs_mutex_unlock(g_input_mutex); */ return 1; } static void init_input() { fs_log("init_input\n"); g_input_queue = fs_queue_new(); g_input_mutex = fs_mutex_create(); fs_log("calling fs_ml_video_init\n"); fs_ml_video_init(); int size = sizeof(fs_ml_input_device) * FS_ML_INPUT_DEVICES_MAX; // allocate zeroed memory g_fs_ml_input_devices = fs_malloc0(size); fs_log("calling fs_ml_input_init\n"); fs_ml_input_init(); } int fs_ml_handle_keyboard_shortcut(fs_ml_event *event) { int state = event->key.state; int key = event->key.keysym.sym; int mod = event->key.keysym.mod; //printf("%d %d -- %d %d\n", key, mod, SDLK_RETURN, KMOD_ALT); int special = mod & (FS_ML_KEY_MOD_F11 | FS_ML_KEY_MOD_F12); #ifdef MACOSX int alt_mod = mod & (FS_ML_KEY_MOD_ALT | FS_ML_KEY_MOD_META); #else int alt_mod = mod & FS_ML_KEY_MOD_ALT; #endif if (special) { if (key == FS_ML_KEY_F) { if (state) { fs_ml_toggle_fullscreen(); } //return 1; } else if (key == FS_ML_KEY_Q) { if (state) { fs_ml_quit(); } //return 1; } } if (key == FS_ML_KEY_RETURN && alt_mod) { if (state) { fs_log("ALT+Return key press detected\n"); fs_ml_toggle_fullscreen(); } return 1; } else if (key == FS_ML_KEY_F4 && alt_mod) { if (state) { fs_log("ALT+F4 key press detected\n"); fs_ml_quit(); } } else if (key == FS_ML_KEY_TAB && alt_mod) { if (state) { fs_log("ALT+Tab key press detected\n"); #ifdef WINDOWS // input grab will be released be deactivation // event in this case #else if (fs_ml_has_input_grab()) { fs_log("- releasing input grab"); fs_ml_grab_input(0, 1); g_fs_ml_had_input_grab = 1; } if (g_fs_emu_video_fullscreen == 1 && g_fs_emu_video_fullscreen_window == 0) { fs_log("- switching to window mode\n"); g_fs_ml_was_fullscreen = 1; fs_ml_toggle_fullscreen(); } #endif } return 1; } return 0; } void fs_ml_init() { #if defined(WINDOWS) fs_log("WINDOWS\n"); #elif defined(MACOSX) fs_log("MACOSX\n"); #elif defined(LINUX) fs_log("LINUX\n"); #elif defined(FREEBSD) fs_log("FREEBSD\n"); #elif defined(OPENBSD) fs_log("OPENBSD\n"); #else fs_log("UNKNOWN OS\n"); #endif g_fs_ml_video_render_function = NULL; g_fs_ml_video_post_render_function = NULL; #ifdef WINDOWS #ifndef TIMERR_NOERROR #define TIMERR_NOERROR 0 #endif if (timeBeginPeriod(1) == TIMERR_NOERROR) { fs_log("successfully set timeBeginPeriod(1)\n"); } else { fs_log("error setting timeBeginPeriod(1)\n"); } if (SetPriorityClass(GetCurrentProcess(), ABOVE_NORMAL_PRIORITY_CLASS)) { fs_log("set process priority class to ABOVE_NORMAL_PRIORITY_CLASS\n"); } else { int dwError = GetLastError(); fs_log("Failed to set process priority class (%d)\n", dwError); } #endif #if 0 struct rlimit rlim; getrlimit(RLIMIT_RTPRIO, &rlim); printf("%d %d\n", rlim.rlim_cur, rlim.rlim_max); //rlim.rlim_cur = 10; //rlim.rlim_max = 10; //setrlimit(RLIMIT_RTPRIO, &rlim); //getrlimit(RLIMIT_RTPRIO, &rlim); //printf("%d %d\n", rlim.rlim_cur, rlim.rlim_max); struct sched_param params; //params.sched_priority = sched_get_priority_min(SCHED_FIFO); params.sched_priority = 50; fs_log("trying to set priority to %d\n", params.sched_priority); int result = sched_setscheduler(0, SCHED_FIFO, ¶ms); if (result == 0) { fs_log("has set real time priority\n"); } else { fs_log("could not set real time priority, errno = %d\n", errno); } #endif #ifdef WINDOWS fs_ml_prevent_power_saving(); #endif } void fs_ml_init_2() { fs_ml_video_mode mode; memset(&mode, 0, sizeof(fs_ml_video_mode)); if (fs_ml_video_mode_get_current(&mode) == 0) { g_fs_ml_target_refresh_rate = mode.fps; } else { fs_log("WARNING: could not read refresh rate from current mode\n"); g_fs_ml_target_refresh_rate = 0; } if (g_fs_ml_target_refresh_rate) { g_fs_ml_target_frame_time = 1000000 / g_fs_ml_target_refresh_rate; } fs_log("assuming refresh rate: %d (%d usec per frame)\n", g_fs_ml_target_refresh_rate, g_fs_ml_target_frame_time); init_input(); g_fs_ml_video_screenshot_mutex = fs_mutex_create(); } double fs_ml_get_refresh_rate() { return g_fs_ml_target_refresh_rate; } #ifdef WINDOWS // parameters from WinMain int g_fs_ml_ncmdshow; HINSTANCE g_fs_ml_hinstance; #endif fs-uae-2.2.3+dfsg/libfsemu/src/ml/ml_internal.h0000644000175000017500000000276412162366654021547 0ustar glaubitzglaubitz#ifndef LIBFSML_ML_INTERNAL__H_ #define LIBFSML_ML_INTERNAL_H_ #include #include extern fs_ml_int_function g_fs_ml_video_update_function; extern fs_ml_void_function g_fs_ml_video_render_function; extern fs_ml_void_function g_fs_ml_video_post_render_function; extern int g_fs_ml_video_width; extern int g_fs_ml_video_height; extern int g_fs_ml_target_refresh_rate; extern int g_fs_ml_target_frame_time; extern fs_mutex *g_fs_ml_video_screenshot_mutex; extern char *g_fs_ml_video_screenshot_path; void fs_ml_initialize_keymap(); int fs_ml_scancode_to_key(int scancode); void fs_ml_clear_keyboard_modifier_state(); int fs_ml_handle_keyboard_shortcut(fs_ml_event *event); void fs_ml_audio_init(); void fs_ml_input_init(); void fs_ml_video_init(); void fs_ml_render_init(); //void fs_ml_calibrate_clock(); void fs_ml_prevent_power_saving(void); void fs_ml_set_fullscreen_extra(); #ifdef WINDOWS void fs_ml_init_raw_input(); #endif void fs_ml_configure_window(); void fs_ml_render_iteration(); #define FS_ML_KEYBOARD 63 #define FS_ML_SLOTS 512 #define FS_ML_MAX_JOYSTICKS 63 #define FS_ML_MAX_BUTTONS 63 #define FS_ML_MAX_AXIS 63 extern fs_ml_input_device *g_fs_ml_input_devices; extern int g_fs_ml_input_device_count; extern int g_fs_ml_running; extern int g_fs_ml_video_sync; extern int g_fs_ml_video_sync_low_latency; extern int g_fs_ml_vblank_sync; extern int g_fs_ml_benchmarking; extern int g_fs_ml_had_input_grab; extern int g_fs_ml_was_fullscreen; #endif // LIBFSML_ML_INTERNAL_H_ fs-uae-2.2.3+dfsg/libfsemu/src/ml/render.c0000644000175000017500000004745212162366654020520 0ustar glaubitzglaubitz#include #include #include #include #ifdef USE_SDL #include #endif #include #include #include #ifdef USE_OPENGL #include #endif #include //#include "fs/emu.h" #include "ml_internal.h" #include // FIXME: make libfsml independent of libfsmeu #include "../emu/util.h" #include "../emu/video.h" static int g_vblank_count = 0; static int64_t g_measured_vblank_time = 0; static int64_t g_adjusted_vblank_time = 0; static int64_t g_estimated_next_vblank_time = 0; // FIXME static int g_estimated_upload_render_duration = 5000; static fs_condition *g_frame_available_cond = NULL; static fs_mutex *g_frame_available_mutex = NULL; static fs_condition *g_buffer_swap_cond = NULL; static fs_mutex *g_buffer_swap_mutex = NULL; static volatile int g_start_new_frame = 0; static fs_condition *g_start_new_frame_cond = NULL; static fs_mutex *g_start_new_frame_mutex = NULL; static int g_available_frame = -1; static int g_uploaded_frame = -1; static int g_rendered_frame = -1; static int g_has_apple_fence = 0; static int g_has_nv_fence = 0; static int g_has_arb_sync = 0; #define SYNC_FLAG_GLFINISH 1 #define SYNC_FLAG_SLEEP 2 #define SYNC_FLAG_FENCE 4 static int64_t g_sleep_until_vsync_last_time = 0; #define VBLANK_COUNT 100 //static fs_emu_stat_queue g_measured_vblank_times; static int64_t g_measured_vblank_times[VBLANK_COUNT] = {}; static int g_vblank_index = 0; static fs_mutex *g_vblank_mutex = NULL; static int64_t g_epoch = 0; #define CHECK_GL_ERROR_MSG(msg) void fs_ml_frame_update_begin(int frame) { if (g_fs_ml_video_sync) { } else if (g_fs_ml_vblank_sync) { // emulation running independently on the video renderer } else if (g_fs_ml_benchmarking) { // run as fast as possible } else { // video renderer is waiting for a new frame -signal that a new // frame is ready //fs_condition_signal(g_video_cond); } } void fs_ml_frame_update_end(int frame) { //printf("%d\n", frame); // in timed mode only (non-vsync), the video renderer is waiting for // a new frame signal fs_mutex_lock(g_frame_available_mutex); g_available_frame = frame; fs_condition_signal(g_frame_available_cond); fs_mutex_unlock(g_frame_available_mutex); if (g_fs_ml_video_sync) { fs_mutex_lock(g_start_new_frame_mutex); while (!g_start_new_frame) { fs_condition_wait (g_start_new_frame_cond, g_start_new_frame_mutex); } g_start_new_frame = 0; fs_mutex_unlock(g_start_new_frame_mutex); } else if (g_fs_ml_vblank_sync) { // emulation running independently on the video renderer } else if (g_fs_ml_benchmarking) { // run as fast as possible } else { // video renderer is waiting for a new frame -signal that a new // frame is ready //fs_condition_signal(g_video_cond); } } static void save_screenshot_of_opengl_framebuffer(const char *path) { #if 0 static int count = 0; count += 1; time_t t = time(NULL); #ifdef WINDOWS struct tm *tm_p = localtime(&t); #else struct tm tm_struct; struct tm *tm_p = &tm_struct; localtime_r(&t, tm_p); #endif char strbuf[20]; strftime(strbuf, 20, "%Y-%m-%d-%H-%M", tm_p); char *name = fs_strdup_printf("%s-%s-%03d.png", g_fs_ml_video_screenshots_prefix, strbuf, g_fs_ml_video_screenshot); char *path = fs_path_join(g_fs_ml_video_screenshots_dir, name, NULL); #endif fs_log("writing screenshot to %s\n", path); int w = fs_ml_video_width(); int h = fs_ml_video_height(); fs_log("reading opengl frame buffer (%d x %d)\n", w, h); void *out_data = malloc(w * h * 4); // when using GL_RGB, remeber to temporarily set GL_UNPACK_ALIGNMENT so // all rows will be contiguous (the OpenGL default is to align rows on // 4-byte boundaries //GLint unpack_alignment; //glGetIntegerv(GL_UNPACK_ALIGNMENT, &unpack_alignment); //glPixelStorei(GL_UNPACK_ALIGNMENT, 1); glReadPixels(0, 0, w, h, GL_RGBA, GL_UNSIGNED_BYTE, out_data); //glPixelStorei(GL_UNPACK_ALIGNMENT, unpack_alignment); // flip image vertically int stride = w * 4; void *tmp = malloc(stride); void *line1 = out_data; void *line2 = out_data + stride * (h - 1); for (int i = 0; i < h / 2; i++) { memcpy(tmp, line1, stride); memcpy(line1, line2, stride); memcpy(line2, tmp, stride); line1 += stride; line2 -= stride; } free(tmp); int result = fs_image_save_data(path, out_data, w, h, 4); if (result) { fs_log("saved screenshot\n"); } else { fs_log("error saving screenshot\n"); } free(out_data); #if 0 free(name); free(path); #endif } int fs_ml_get_vblank_count() { return g_vblank_count; } int64_t fs_ml_get_vblank_time() { return g_measured_vblank_time; } void fs_ml_stop() { g_fs_ml_running = 0; // signal g_frame_available_cond because video (main) thread may be // blocking on this condition // fs_condition_signal(g_frame_available_cond); } #if 0 static int eltime(int64_t t) { return (int) ((t - g_epoch)); } #endif static void update_frame() { if (g_fs_ml_video_update_function) { g_uploaded_frame = g_fs_ml_video_update_function(); } } static void render_frame() { if (g_fs_ml_video_render_function) { g_fs_ml_video_render_function(); g_rendered_frame = g_uploaded_frame; } } static void swap_opengl_buffers() { //int64_t t1 = fs_get_monotonic_time(); #ifdef USE_SDL SDL_GL_SwapBuffers(); #else printf("ERROR: no swap\n"); #endif //int64_t t2 = fs_get_monotonic_time(); } static void gl_finish() { //int64_t t1 = fs_get_monotonic_time(); fs_gl_finish(); CHECK_GL_ERROR_MSG("render_frame"); //int64_t t3 = fs_get_monotonic_time(); //printf(" %lld : %lld\n", t2 - t1, t3 - t2); } //void fs_ml_wait_vblank() { //} static void sleep_until_vsync() { int sleep_time = 5000; int64_t t = fs_emu_monotonic_time(); //int64_t sleep_until = 0; if (g_fs_ml_target_frame_time > 0) { // calculate sleep time based on frame rate // (allowing 4 ms busy-waiting by OpenGL driver, if necessary) //sleep_time = g_fs_ml_target_frame_time - 4000; sleep_time = g_sleep_until_vsync_last_time + g_fs_ml_target_frame_time - t - 5000; } if (sleep_time > g_fs_ml_target_frame_time - 4000) { sleep_time = 0; } if (sleep_time > 0) { //printf("sleep %d\n", sleep_time); fs_ml_usleep(sleep_time); } } #if 0 static void full_sleep_until_vsync() { // FIXME: use this instead of sleep_until_vsync int sleep_time = 0; int time_left = 3000; int64_t t = fs_emu_monotonic_time(); if (g_fs_ml_target_frame_time > 0) { sleep_time = g_sleep_until_vsync_last_time + g_fs_ml_target_frame_time - t - time_left; } if (sleep_time > g_fs_ml_target_frame_time - time_left) { sleep_time = 0; } if (sleep_time > 0) { fs_ml_usleep(sleep_time); } } #endif typedef int64_t GLint64; typedef uint64_t GLuint64; typedef struct __GLsync *GLsync; static void (APIENTRYP glWaitSync)(GLsync sync, GLbitfield flags, GLuint64 timeout) = NULL; static GLenum (APIENTRYP glClientWaitSync)(GLsync sync, GLbitfield flags, GLuint64 timeout) = NULL; static GLsync (APIENTRYP glFenceSync)(GLenum condition, GLbitfield flags) = NULL; #define GL_OBJECT_TYPE 0x9112 #define GL_SYNC_CONDITION 0x9113 #define GL_SYNC_STATUS 0x9114 #define GL_SYNC_FLAGS 0x9115 #define GL_SYNC_GPU_COMMANDS_COMPLETE 0x9117 #define GL_ALREADY_SIGNALED 0x911A #define GL_TIMEOUT_EXPIRED 0x911B #define GL_CONDITION_SATISFIED 0x911C #define GL_WAIT_FAILED 0x911D #define GL_SYNC_FLUSH_COMMANDS_BIT 0x00000001 #define GL_UNSIGNALED 0x9118 #define GL_SIGNALED 0x9119 #define TIMEOUT_IGNORED 0xFFFFFFFFFFFFFFFFull #define FENCE_SET 1 #define FENCE_WAIT 2 #ifdef USE_GLES #else static GLuint g_fence; static GLsync g_sync; #endif void * __GLeeGetProcAddress(const char *extname); #define SYNC_SWAP 1 #define SYNC_SWAP_FINISH 2 #define SYNC_FINISH_SWAP_FINISH 3 #define SYNC_SLEEP_SWAP_FINISH 4 #define SYNC_FINISH_SLEEP_SWAP_FINISH 5 #define SYNC_SWAP_FENCE_START 6 #define SYNC_SWAP_FENCE 7 #define SYNC_SWAP_SLEEP_FENCE 8 static int g_sync_method = 0; static int check_sync_method(const char *a, const char *b) { if (a && fs_ascii_strcasecmp(a, b) == 0) { return 1; } return 0; } static void decide_opengl_sync_method() { fs_log("deciding video sync method\n"); const char *c = fs_config_get_const_string("video_sync_method"); if (check_sync_method(c, "swap")) { fs_log("- SYNC_SWAP\n"); g_sync_method = SYNC_SWAP; } else if (check_sync_method(c, "swap-finish")) { fs_log("- SYNC_SWAP_FINISH\n"); g_sync_method = SYNC_SWAP_FINISH; } else if (check_sync_method(c, "finish-swap-finish")) { fs_log("- SYNC_FINISH_SWAP_FINISH\n"); g_sync_method = SYNC_FINISH_SWAP_FINISH; } else if (check_sync_method(c, "sleep-swap-finish")) { fs_log("- SYNC_SLEEP_SWAP_FINISH\n"); g_sync_method = SYNC_SLEEP_SWAP_FINISH; } else if (check_sync_method(c, "finish-sleep-swap-finish")) { fs_log("- SYNC_FINISH_SLEEP_SWAP_FINISH\n"); g_sync_method = SYNC_FINISH_SLEEP_SWAP_FINISH; } else if (check_sync_method(c, "swap-fence")) { fs_log("- SYNC_SWAP_FENCE\n"); g_sync_method = SYNC_SWAP_FENCE; } else if (check_sync_method(c, "swap-sleep-fence")) { fs_log("- SYNC_SWAP_SLEEP_FENCE\n"); g_sync_method = SYNC_SWAP_SLEEP_FENCE; } else if (c) { fs_log("WARNING: unknown sync method specified, using default\n"); g_sync_method = 0; } int fence_support = g_has_nv_fence || g_has_apple_fence || g_has_arb_sync; if (g_sync_method >= SYNC_SWAP_FENCE_START && !fence_support) { fs_log("- no fence support, cannot use this sync method\n"); g_sync_method = 0; } if (g_sync_method == 0) { fs_log("- using default sync method\n"); #if defined(WINDOWS) || defined(MACOSX) fs_log("- SYNC_FINISH_SLEEP_SWAP_FINISH\n"); g_sync_method = SYNC_FINISH_SLEEP_SWAP_FINISH; #else fs_log("- SYNC_FINISH_SWAP_FINISH\n"); g_sync_method = SYNC_FINISH_SWAP_FINISH; #endif } } static void check_opengl_sync_capabilities() { fs_log("checking OpenGL capabilities\n"); const char *ext = (const char *) glGetString(GL_EXTENSIONS); if (ext) { if (strstr(ext, "GL_NV_fence") != NULL) { g_has_nv_fence = 1; fs_log("GL_NV_fence extension found \n"); } if (strstr(ext, "GL_APPLE_fence") != NULL) { g_has_apple_fence = 1; fs_log("GL_APPLE_fence extension found\n"); } if (strstr(ext, "GL_ARB_sync") != NULL) { fs_log("GL_ARB_sync extension found\n"); glFenceSync = __GLeeGetProcAddress("glFenceSync"); glWaitSync = __GLeeGetProcAddress("glWaitSync"); glClientWaitSync = __GLeeGetProcAddress("glClientWaitSync"); if (glFenceSync && glClientWaitSync) { g_has_arb_sync = 1; } else { fs_log("error looking up functions\n"); } } } } static void initialize_opengl_sync() { check_opengl_sync_capabilities(); decide_opengl_sync_method(); #ifdef USE_GLES #else if (g_has_nv_fence) { glGenFencesNV(1, &g_fence); CHECK_GL_ERROR_MSG("glGenFencesNV(1, &g_fence)"); } else if (g_has_apple_fence) { glGenFencesAPPLE(1, &g_fence); CHECK_GL_ERROR_MSG("glGenFencesAPPLE(1, &g_fence)"); } #endif } static void opengl_fence(int command) { #ifdef USE_GLES #else if (command == FENCE_SET) { if (g_has_nv_fence) { //printf("...\n"); glSetFenceNV(g_fence, GL_ALL_COMPLETED_NV); CHECK_GL_ERROR_MSG("glSetFenceNV(g_fence, GL_ALL_COMPLETED_NV)"); } else if (g_has_apple_fence) { glSetFenceAPPLE(g_fence); CHECK_GL_ERROR_MSG("glSetFenceAPPLE(g_fence)"); } else if (g_has_arb_sync) { g_sync = glFenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0); CHECK_GL_ERROR_MSG("glFenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0)"); } } else if (command == FENCE_WAIT) { if (g_has_nv_fence) { //printf("-- f --\n"); //glFinishFenceNV(g_fence); //int64_t t1 = fs_get_monotonic_time(); //fs_ml_usleep(10000); while (!glTestFenceNV(g_fence)) { CHECK_GL_ERROR_MSG("glTestFenceNV(g_fence)"); //printf("-> %lld\n", fs_get_monotonic_time() - t1); //printf("%d\n", glGetError()); fs_ml_usleep(1000); //printf("-> %lld\n", fs_get_monotonic_time() - t1); } CHECK_GL_ERROR_MSG("glTestFenceNV(g_fence)"); } else if (g_has_apple_fence) { while (!glTestFenceAPPLE(g_fence)) { CHECK_GL_ERROR_MSG("glTestFenceAPPLE(g_fence)"); fs_ml_usleep(1000); } CHECK_GL_ERROR_MSG("glTestFenceAPPLE(g_fence)"); } else if (g_has_arb_sync) { int flags = GL_SYNC_FLUSH_COMMANDS_BIT; while (glClientWaitSync(g_sync, flags, 0) == GL_TIMEOUT_EXPIRED) { CHECK_GL_ERROR_MSG("glClientWaitSync(g_sync, flags, 0)"); flags = 0; fs_ml_usleep(1000); } CHECK_GL_ERROR_MSG("glClientWaitSync(g_sync, flags, 0)"); } } #endif } static void opengl_swap_synchronous() { if (g_sync_method == SYNC_SWAP) { swap_opengl_buffers(); } else if (g_sync_method == SYNC_SWAP_FINISH) { swap_opengl_buffers(); gl_finish(); } else if (g_sync_method == SYNC_FINISH_SWAP_FINISH) { gl_finish(); swap_opengl_buffers(); gl_finish(); } else if (g_sync_method == SYNC_SLEEP_SWAP_FINISH) { sleep_until_vsync(); swap_opengl_buffers(); gl_finish(); } else if (g_sync_method == SYNC_FINISH_SLEEP_SWAP_FINISH) { gl_finish(); sleep_until_vsync(); swap_opengl_buffers(); gl_finish(); } else if (g_sync_method == SYNC_SWAP_FENCE) { swap_opengl_buffers(); opengl_fence(FENCE_SET); glFlush(); opengl_fence(FENCE_WAIT); } else if (g_sync_method == SYNC_SWAP_SLEEP_FENCE) { swap_opengl_buffers(); sleep_until_vsync(); opengl_fence(FENCE_SET); glFlush(); opengl_fence(FENCE_WAIT); } } static void render_iteration_vsync() { if (g_fs_ml_video_sync_low_latency) { int current_frame_at_start = g_available_frame; //int64_t t1 = fs_ml_monotonic_time(); int sleep_time = 0; int time_left = g_estimated_upload_render_duration; int64_t t = fs_emu_monotonic_time(); if (g_fs_ml_target_frame_time > 0) { sleep_time = g_estimated_next_vblank_time - t - time_left; } if (sleep_time > g_fs_ml_target_frame_time - time_left) { sleep_time = 0; } if (sleep_time > 0) { fs_ml_usleep(sleep_time); } if (g_available_frame > current_frame_at_start) { //printf("low latency %d\n", g_available_frame); } else { //printf("...\n"); } } update_frame(); CHECK_GL_ERROR_MSG("update_frame"); render_frame(); CHECK_GL_ERROR_MSG("render_frame"); //opengl_fence(FENCE_SET); //glFlush(); //opengl_fence(FENCE_WAIT); //int64_t upload_render_time = fs_ml_monotonic_time() - t1; //printf("urt %lld\n", upload_render_time); opengl_swap_synchronous(); g_measured_vblank_time = fs_ml_monotonic_time(); g_vblank_count++; fs_mutex_lock(g_vblank_mutex); g_measured_vblank_times[g_vblank_index] = g_measured_vblank_time; g_vblank_index = (g_vblank_index + 1) % VBLANK_COUNT; fs_mutex_unlock(g_vblank_mutex); // FIXME: adjust g_measured_vblank_time based on historical data (smooth out // irregularities) and save the result in g_adjusted_vblank_time g_adjusted_vblank_time = g_measured_vblank_time; g_sleep_until_vsync_last_time = g_adjusted_vblank_time; g_estimated_next_vblank_time = g_adjusted_vblank_time + \ g_fs_ml_target_frame_time; // g_start_new_frame_cond is used to signal that a new frame can be // generated when the emulation is running in sync - this is not used // when only display flipping is synced to vblank fs_mutex_lock(g_start_new_frame_mutex); g_start_new_frame = 1; fs_condition_signal(g_start_new_frame_cond); fs_mutex_unlock(g_start_new_frame_mutex); } void fs_ml_render_iteration() { static int first = 1; if (first) { first = 0; initialize_opengl_sync(); } if (g_fs_ml_vblank_sync) { render_iteration_vsync(); } else if (g_fs_ml_benchmarking) { update_frame(); render_frame(); swap_opengl_buffers(); } else { // when vsync is off, we wait until a new frame is ready and // then we display it immediately if (fs_ml_is_quitting()) { // but when the emulation is quitting, we can't expect any new // frames so there's no point waiting for them. Instead, we just // sleep a bit to throttle the frame rate for the quit animation fs_ml_usleep(10000); } else { // wait max 33 ms to allow the user interface to work even if // the emu hangs int64_t dest_time = fs_get_real_time() + 33 * 1000; fs_mutex_lock(g_frame_available_mutex); while (g_rendered_frame == g_available_frame) { fs_condition_timed_wait(g_frame_available_cond, g_frame_available_mutex, dest_time); if (fs_get_real_time() >= dest_time) { break; } } fs_mutex_unlock(g_frame_available_mutex); } update_frame(); render_frame(); swap_opengl_buffers(); //gl_finish(); } if (g_fs_ml_video_screenshot_path) { fs_mutex_lock(g_fs_ml_video_screenshot_mutex); if (g_fs_ml_video_screenshot_path) { save_screenshot_of_opengl_framebuffer( g_fs_ml_video_screenshot_path); free(g_fs_ml_video_screenshot_path); g_fs_ml_video_screenshot_path = NULL; } fs_mutex_unlock(g_fs_ml_video_screenshot_mutex); } if (g_fs_ml_video_post_render_function) { g_fs_ml_video_post_render_function(); } } void fs_ml_render_init() { g_frame_available_cond = fs_condition_create(); g_frame_available_mutex = fs_mutex_create(); g_start_new_frame_cond = fs_condition_create(); g_start_new_frame_mutex = fs_mutex_create(); g_buffer_swap_cond = fs_condition_create(); g_buffer_swap_mutex = fs_mutex_create(); g_epoch = fs_get_monotonic_time(); g_vblank_mutex = fs_mutex_create(); //fs_emu_stat_queue_init(&g_measured_vblank_times, VBLANK_TIMES_COUNT); if (fs_config_get_boolean("low_latency_vsync") == 1) { fs_log("using low latency vsync when full vsync is enabled\n"); g_fs_ml_video_sync_low_latency = 1; } else if (fs_config_get_boolean("low_latency_vsync") == 0) { fs_log("disabling use of low latency vsync\n"); g_fs_ml_video_sync_low_latency = 0; } } fs-uae-2.2.3+dfsg/libfsemu/src/ml/x11.c0000644000175000017500000002531112162366654017640 0ustar glaubitzglaubitz#ifdef USE_X11 #include #include #include #include #include #include #include #include #include #include #include "ml_internal.h" #include // FIXME: REMOVE / replace with fs functions #include Display *g_display = NULL; Window g_window = 0; static void set_window_icon() { fs_log("setting _NET_WM_ICON from icon images\n"); int max_size = (16 * 16 + 32 * 32 + 48 * 48 + 64 * 64 + 128 * 128) * \ sizeof(unsigned long); // add space for width, height cardinals max_size += 2 * 5 * sizeof(unsigned long); unsigned long *icon_data = (unsigned long *) malloc(max_size); unsigned long *op = icon_data; int card_count = 0; int sizes[] = {128, 64, 48, 32, 16, 0}; for(int *size = sizes; *size; size++) { char *rel = fs_strdup_printf("icons/hicolor/%dx%d/apps/fs-uae.png", *size, *size); char *path = fs_get_data_file(rel); free(rel); if (!path) { fs_log("did not find icon for %dx%d\n", *size, *size); continue; } fs_image *image = fs_image_new_from_file(path); if (!image) { fs_log("could not load icon from %s\n", path); continue; } free(path); //printf("%d\n", image->width); int pixel_count = image->width * image->height; unsigned char *p = image->data; *op++ = image->width; *op++ = image->height; for (int i = 0; i < pixel_count; i++) { //*op = 0xffff0000; *op = (p[3] << 24) | (p[0] << 16) | (p[1] << 8) | p[2]; p += 4; op++; } card_count += 2 + pixel_count; fs_unref(image); // FIXME } Atom _NET_WM_ICON = XInternAtom(g_display, "_NET_WM_ICON", False); XChangeProperty(g_display, g_window, _NET_WM_ICON, XA_CARDINAL, 32, PropModeReplace, (unsigned char *) icon_data, card_count); free(icon_data); } void fs_ml_configure_window() { SDL_SysWMinfo info; SDL_VERSION(&info.version); // this is important! if (!SDL_GetWMInfo(&info)) { fs_log("error getting window information\n"); return; } // Set the PID related to the window for the given hostname, if possible // if (data->pid > 0) { // _NET_WM_PID = XInternAtom(display, "_NET_WM_PID", False); // XChangeProperty(display, w, _NET_WM_PID, XA_CARDINAL, 32, PropModeReplace, // (unsigned char *)&data->pid, 1); g_display = info.info.x11.display; g_window = info.info.x11.wmwindow; Atom UTF8_STRING = XInternAtom(g_display, "UTF8_STRING", False); fs_log("requesting dark window manager theme\n"); Atom _GTK_THEME_VARIANT = XInternAtom(g_display, "_GTK_THEME_VARIANT", False); XChangeProperty(g_display, g_window, _GTK_THEME_VARIANT, UTF8_STRING, 8, PropModeReplace, (const unsigned char *) "dark", 4); set_window_icon(); /* set_window_icon(32); set_window_icon(48); set_window_icon(64); set_window_icon(128); */ } enum { START, LINE, IGNORE, RESOLUTION, WAIT_REFRESH, REFRESH, }; #if 0 #define CLOCK_FREQ 10000000 static int64_t g_syncbase = 0; static int64_t fs_ml_read_clock(void) { struct timespec tp; clock_gettime(CLOCK_REALTIME, &tp); int64_t t = ((int64_t) tp.tv_sec) * CLOCK_FREQ + \ ((int64_t) tp.tv_nsec) / 100; //printf("%lld\n", t); static int64_t base_time = 0; if (base_time == 0) { base_time = t; } // clock_gettime(CLOCK_REALTIME, &tp); // base_secs = tp.tv_sec; //} //clock_gettime(CLOCK_REALTIME, &tp); //tp.tv_sec -= base_secs; //return ((int64_t) tp.tv_sec) * CLOCK_FREQ + ((int64_t) tp.tv_nsec) / 100; return t - base_time; } void fs_ml_calibrate_clock(void) { g_syncbase = CLOCK_FREQ; } int64_t fs_ml_monotonic_time() { //return (1000000 * fs_ml_read_clock()) / g_syncbase; return fs_ml_read_clock() / 10; } #endif void fs_ml_usleep(int usec) { usleep(usec); } void fs_ml_set_fullscreen_extra() { } int fs_ml_video_mode_get_current(fs_ml_video_mode *mode) { mode->width = 0; mode->height = 0; mode->fps = 0; mode->bpp = 0; mode->flags = 0; int last_refresh = 0; int mode_count = 0; int increasing_by_one = 1; FILE *f = popen("/usr/bin/env xrandr", "r"); int state = START; char buf[24]; int bp = 0; // buffer position char c; while(1) { int num_read = fread(&c, 1, 1, f); if (num_read == 0) { break; } if (state == START && c == ' ') { state = LINE; } else if (state == START) { state = IGNORE; } else if (state == IGNORE) { // yup } else if (state == LINE && c != ' ') { state = RESOLUTION; } else if (state == RESOLUTION && c == ' ') { state = WAIT_REFRESH; } else if (state == WAIT_REFRESH && c != ' ') { if (c != '\n') { buf[bp++] = c; state = REFRESH; } } else if (state == REFRESH && (c == ' ' || c == '*' || c == '\n')) { buf[bp] = '\0'; bp = 0; int refresh = atoi(buf); if (last_refresh == 0) { last_refresh = refresh - 1; } if (refresh != last_refresh + 1) { increasing_by_one = 0; } last_refresh = refresh; mode_count += 1; //fs_log("%s %d\n", buf, refresh); if (c == '*') { fs_log("detected refresh rate: %d\n", refresh); mode->fps = refresh; } state = WAIT_REFRESH; } else if (state == REFRESH) { if (bp < 23) { buf[bp++] = c; } } // newline always resets state if (c == '\n') { state = START; } } if (mode_count > 1 && increasing_by_one) { // nVIDIA xrandr hack detected fs_log("xrandr is lying about about refresh rates; ignoring result\n"); mode->fps = 0; } else if (mode_count == 1) { fs_log("don't trust refresh rate (from xrandr) with only one mode\n"); mode->fps = 0; } return 0; } #define MAX_SCANCODES 200 static int g_key_map[MAX_SCANCODES] = {}; void fs_ml_initialize_keymap() { for (int i = 0; i < MAX_SCANCODES; i++) { g_key_map[i] = -1; } g_key_map[9] = FS_ML_KEY_ESCAPE; g_key_map[67] = FS_ML_KEY_F1; g_key_map[68] = FS_ML_KEY_F2; g_key_map[69] = FS_ML_KEY_F3; g_key_map[70] = FS_ML_KEY_F4; g_key_map[71] = FS_ML_KEY_F5; g_key_map[72] = FS_ML_KEY_F6; g_key_map[73] = FS_ML_KEY_F7; g_key_map[74] = FS_ML_KEY_F8; g_key_map[75] = FS_ML_KEY_F9; g_key_map[76] = FS_ML_KEY_F10; g_key_map[95] = FS_ML_KEY_F11; g_key_map[96] = FS_ML_KEY_F12; g_key_map[49] = FS_ML_KEY_BACKQUOTE; g_key_map[10] = FS_ML_KEY_1; g_key_map[11] = FS_ML_KEY_2; g_key_map[12] = FS_ML_KEY_3; g_key_map[13] = FS_ML_KEY_4; g_key_map[14] = FS_ML_KEY_5; g_key_map[15] = FS_ML_KEY_6; g_key_map[16] = FS_ML_KEY_7; g_key_map[17] = FS_ML_KEY_8; g_key_map[18] = FS_ML_KEY_9; g_key_map[19] = FS_ML_KEY_0; g_key_map[20] = FS_ML_KEY_MINUS; g_key_map[21] = FS_ML_KEY_EQUALS; g_key_map[22] = FS_ML_KEY_BACKSPACE; g_key_map[23] = FS_ML_KEY_TAB; g_key_map[24] = FS_ML_KEY_Q; g_key_map[25] = FS_ML_KEY_W; g_key_map[26] = FS_ML_KEY_E; g_key_map[27] = FS_ML_KEY_R; g_key_map[28] = FS_ML_KEY_T; g_key_map[29] = FS_ML_KEY_Y; g_key_map[30] = FS_ML_KEY_U; g_key_map[31] = FS_ML_KEY_I; g_key_map[32] = FS_ML_KEY_O; g_key_map[33] = FS_ML_KEY_P; g_key_map[34] = FS_ML_KEY_LEFTBRACKET; g_key_map[35] = FS_ML_KEY_RIGHTBRACKET; g_key_map[36] = FS_ML_KEY_RETURN; g_key_map[66] = FS_ML_KEY_CAPSLOCK; g_key_map[38] = FS_ML_KEY_A; g_key_map[39] = FS_ML_KEY_S; g_key_map[40] = FS_ML_KEY_D; g_key_map[41] = FS_ML_KEY_F; g_key_map[42] = FS_ML_KEY_G; g_key_map[43] = FS_ML_KEY_H; g_key_map[44] = FS_ML_KEY_J; g_key_map[45] = FS_ML_KEY_K; g_key_map[46] = FS_ML_KEY_L; g_key_map[47] = FS_ML_KEY_SEMICOLON; g_key_map[48] = FS_ML_KEY_QUOTE; g_key_map[51] = FS_ML_KEY_BACKSLASH; g_key_map[50] = FS_ML_KEY_LSHIFT; g_key_map[94] = FS_ML_KEY_LESS; g_key_map[52] = FS_ML_KEY_Z; g_key_map[53] = FS_ML_KEY_X; g_key_map[54] = FS_ML_KEY_C; g_key_map[55] = FS_ML_KEY_V; g_key_map[56] = FS_ML_KEY_B; g_key_map[57] = FS_ML_KEY_N; g_key_map[58] = FS_ML_KEY_M; g_key_map[59] = FS_ML_KEY_COMMA; g_key_map[60] = FS_ML_KEY_PERIOD; g_key_map[61] = FS_ML_KEY_SLASH; g_key_map[62] = FS_ML_KEY_RSHIFT; g_key_map[37] = FS_ML_KEY_LCTRL; g_key_map[64] = FS_ML_KEY_LALT; g_key_map[65] = FS_ML_KEY_SPACE; g_key_map[78] = FS_ML_KEY_SCROLLOCK; g_key_map[77] = FS_ML_KEY_NUMLOCK; g_key_map[63] = FS_ML_KEY_KP_MULTIPLY; g_key_map[82] = FS_ML_KEY_KP_MINUS; g_key_map[79] = FS_ML_KEY_KP7; g_key_map[80] = FS_ML_KEY_KP8; g_key_map[81] = FS_ML_KEY_KP9; g_key_map[86] = FS_ML_KEY_KP_PLUS; g_key_map[83] = FS_ML_KEY_KP4; g_key_map[84] = FS_ML_KEY_KP5; g_key_map[85] = FS_ML_KEY_KP6; g_key_map[87] = FS_ML_KEY_KP1; g_key_map[88] = FS_ML_KEY_KP2; g_key_map[89] = FS_ML_KEY_KP3; g_key_map[90] = FS_ML_KEY_KP0; g_key_map[91] = FS_ML_KEY_KP_PERIOD; // keys codes above 96 differ between evdev / kdb Xorg drivers, but // on the other hand, these keys does (probably) not differ between // international keyboards, so we can use the translated keysyms from SDL // instead for these. /* g_key_map[104] = FS_ML_KEY_KP_ENTER; g_key_map[105] = FS_ML_KEY_RCTRL; g_key_map[106] = FS_ML_KEY_KP_DIVIDE; g_key_map[107] = FS_ML_KEY_PRINT; g_key_map[108] = FS_ML_KEY_RALT; g_key_map[110] = FS_ML_KEY_HOME; g_key_map[111] = FS_ML_KEY_UP; g_key_map[112] = FS_ML_KEY_PAGEUP; g_key_map[113] = FS_ML_KEY_LEFT; g_key_map[114] = FS_ML_KEY_RIGHT; g_key_map[115] = FS_ML_KEY_END; g_key_map[116] = FS_ML_KEY_DOWN; g_key_map[117] = FS_ML_KEY_PAGEDOWN; g_key_map[118] = FS_ML_KEY_INSERT; g_key_map[119] = FS_ML_KEY_DELETE; g_key_map[127] = FS_ML_KEY_PAUSE; g_key_map[133] = FS_ML_KEY_LSUPER; g_key_map[134] = FS_ML_KEY_RSUPER; g_key_map[135] = FS_ML_KEY_MENU; */ } int fs_ml_scancode_to_key(int scancode) { if (scancode < 0 || scancode >= MAX_SCANCODES) { return -1; } return g_key_map[scancode]; } #endif // USE_X11 fs-uae-2.2.3+dfsg/libfsemu/src/ml/sdl.c0000644000175000017500000005762112162366654020022 0ustar glaubitzglaubitz#ifdef USE_SDL_VIDEO #include #include #include #include #ifdef USE_SDL #include #endif //#ifdef USE_GLIB //#include //#endif #include #include #include #include #include #include #ifdef USE_OPENGL #include #endif //#include "fs/emu.h" #include "ml_internal.h" // FIXME: make libfsml independent of libfsmeu #include "../emu/video.h" static fs_queue *g_video_event_queue = NULL; static fs_mutex *g_video_event_mutex = NULL; static fs_condition *g_video_cond = NULL; static fs_mutex *g_video_mutex = NULL; static SDL_Surface *g_sdl_screen = NULL; //static int g_sync_vblank = 1; // current size of window or fullscreen view //static int g_video_width = 0; //static int g_video_height = 0; static int g_has_input_grab = 0; static int g_fs_ml_automatic_input_grab = 1; static int g_fsaa = 0; static int g_debug_keys = 0; static int g_f12_state = 0; static int g_f11_state = 0; static char *g_window_title; static int g_window_width; static int g_window_height; static int g_window_resizable; static int g_fullscreen_width; static int g_fullscreen_height; static GLint g_max_texture_size; int g_fs_ml_had_input_grab = 0; int g_fs_ml_was_fullscreen = 0; #define FS_ML_VIDEO_EVENT_GRAB_INPUT 1 #define FS_ML_VIDEO_EVENT_UNGRAB_INPUT 2 #define FS_ML_VIDEO_EVENT_SHOW_CURSOR 3 #define FS_ML_VIDEO_EVENT_HIDE_CURSOR 4 int fs_ml_get_max_texture_size() { return g_max_texture_size; } int fs_ml_get_fullscreen_width() { return g_fullscreen_width; } int fs_ml_get_fullscreen_height() { return g_fullscreen_height; } int fs_ml_get_windowed_width() { return g_window_width; } int fs_ml_get_windowed_height() { return g_window_height; } static void post_video_event(int event) { fs_mutex_lock(g_video_event_mutex); fs_queue_push_head(g_video_event_queue, FS_INT_TO_POINTER(event)); fs_mutex_unlock(g_video_event_mutex); } static void process_video_events() { fs_mutex_lock(g_video_event_mutex); int count = fs_queue_get_length(g_video_event_queue); for (int i = 0; i < count; i++) { int event = FS_POINTER_TO_INT(fs_queue_pop_tail(g_video_event_queue)); if (event == FS_ML_VIDEO_EVENT_GRAB_INPUT) { fs_ml_grab_input(1, 1); } else if (event == FS_ML_VIDEO_EVENT_UNGRAB_INPUT) { fs_ml_grab_input(0, 1); } else if (event == FS_ML_VIDEO_EVENT_SHOW_CURSOR) { fs_ml_show_cursor(1, 1); } else if (event == FS_ML_VIDEO_EVENT_HIDE_CURSOR) { fs_ml_show_cursor(0, 1); } } fs_mutex_unlock(g_video_event_mutex); } int fs_ml_has_input_grab() { //printf("has input grab? %d\n", g_grab_input); return g_has_input_grab; } int fs_ml_has_automatic_input_grab() { return g_fs_ml_automatic_input_grab; } void fs_ml_grab_input(int grab, int immediate) { //printf("fs_ml_grab_input %d %d\n", grab, immediate); if (immediate) { SDL_WM_GrabInput(grab ? SDL_GRAB_ON : SDL_GRAB_OFF); fs_ml_show_cursor(!grab, 1); } else { post_video_event(grab ? FS_ML_VIDEO_EVENT_GRAB_INPUT : FS_ML_VIDEO_EVENT_UNGRAB_INPUT); } g_has_input_grab = grab ? 1 : 0; } void fs_ml_set_video_fsaa(int fsaa) { g_fsaa = fsaa; } void fs_ml_show_cursor(int show, int immediate) { if (immediate) { SDL_ShowCursor(show); } else { post_video_event(show ? FS_ML_VIDEO_EVENT_SHOW_CURSOR : FS_ML_VIDEO_EVENT_HIDE_CURSOR); } } static void log_opengl_information() { static int written = 0; if (written) { return; } written = 1; char *software_renderer = NULL; const char *s; s = (const char*) glGetString(GL_VENDOR); if (s) { fs_log("opengl vendor: %s\n", s); } s = (const char*) glGetString(GL_RENDERER); if (s) { fs_log("opengl renderer: %s\n", s); if (strstr(s, "GDI Generic") != NULL) { software_renderer = fs_strdup(s); } } s = (const char*) glGetString(GL_VERSION); if (s) { fs_log("opengl version: %s\n", s); } s = (const char*) glGetString(GL_SHADING_LANGUAGE_VERSION); if (s) { fs_log("opengl shading language version: %s\n", s); } s = (const char*) glGetString(GL_EXTENSIONS); if (s) { fs_log("opengl extensions: %s\n", s); } glGetIntegerv(GL_MAX_TEXTURE_SIZE, &g_max_texture_size); fs_log("opengl max texture size (estimate): %dx%d\n", g_max_texture_size, g_max_texture_size); if (software_renderer) { fs_emu_warning("No HW OpenGL driver (\"%s\")", software_renderer); free(software_renderer); } } static void set_video_mode() { int flags = 0; flags |= SDL_DOUBLEBUF; flags |= SDL_OPENGL; if (g_fs_emu_video_fullscreen == 1) { g_fs_ml_video_width = g_fullscreen_width; g_fs_ml_video_height = g_fullscreen_height; if (g_fs_emu_video_fullscreen_window) { fs_log("using fullscreen window mode\n"); SDL_putenv("SDL_VIDEO_WINDOW_POS=0,0"); flags |= SDL_NOFRAME; fs_ml_set_fullscreen_extra(); } else { fs_log("using SDL_FULLSCREEN mode\n"); flags |= SDL_FULLSCREEN; } fs_log("setting (fullscreen) video mode %d %d\n", g_fs_ml_video_width, g_fs_ml_video_height); g_sdl_screen = SDL_SetVideoMode(g_fs_ml_video_width, g_fs_ml_video_height, 0, flags); //update_viewport(); } else { fs_log("using windowed mode\n"); //SDL_putenv("SDL_VIDEO_WINDOW_POS="); g_fs_ml_video_width = g_window_width; g_fs_ml_video_height = g_window_height; if (g_window_resizable) { flags |= SDL_RESIZABLE; } fs_log("setting (windowed) video mode %d %d\n", g_fs_ml_video_width, g_fs_ml_video_height); g_sdl_screen = SDL_SetVideoMode(g_fs_ml_video_width, g_fs_ml_video_height, 0, flags); //update_viewport(); } fs_ml_configure_window(); // FIXME: this can be removed g_fs_ml_opengl_context_stamp++; log_opengl_information(); //Uint8* keystate; //int numkeys; //keystate = SDL_GetKeyState(&numkeys); //printf("%d\n", keystate[SDLK_F11]); //printf("%d\n", keystate[SDLK_F12]); //g_f11_state = keystate[SDLK_F11] ? FS_ML_KEY_MOD_F11 : 0; //g_f12_state = keystate[SDLK_F12] ? FS_ML_KEY_MOD_F12 : 0; //printf("g_f12_state is %d\n", g_f12_state); } static void destroy_opengl_state() { fs_log("destroy_opengl_state\n"); fs_gl_send_context_notification(FS_GL_CONTEXT_DESTROY); } static void recreate_opengl_state() { fs_log("recreate_opengl_state\n"); fs_gl_reset_client_state(); fs_gl_send_context_notification(FS_GL_CONTEXT_CREATE); } void fs_ml_toggle_fullscreen() { fs_log("fs_ml_toggle_fullscreen\n"); g_fs_emu_video_fullscreen = !g_fs_emu_video_fullscreen; destroy_opengl_state(); set_video_mode(); recreate_opengl_state(); } int fs_ml_video_create_window(const char *title) { fs_log("fs_ml_video_create_window\n"); g_window_title = fs_strdup(title); static int initialized = 0; SDL_Init(SDL_INIT_VIDEO); if (!initialized) { const SDL_VideoInfo* info = SDL_GetVideoInfo(); g_fullscreen_width = fs_config_get_int("fullscreen_width"); if (g_fullscreen_width == FS_CONFIG_NONE) { g_fullscreen_width = info->current_w; } g_fullscreen_height = fs_config_get_int("fullscreen_height"); if (g_fullscreen_height == FS_CONFIG_NONE) { g_fullscreen_height = info->current_h; } if (g_fs_emu_video_fullscreen_mode == NULL) { g_fs_emu_video_fullscreen_window = -1; } else if (fs_ascii_strcasecmp(g_fs_emu_video_fullscreen_mode, "window") == 0) { g_fs_emu_video_fullscreen_window = 1; } else if (fs_ascii_strcasecmp(g_fs_emu_video_fullscreen_mode, "fullscreen") == 0) { g_fs_emu_video_fullscreen_window = 0; } if (g_fs_emu_video_fullscreen_window == -1) { #ifdef MACOSX g_fs_emu_video_fullscreen_window = 0; #else g_fs_emu_video_fullscreen_window = 0; #endif } initialized = 1; } if (g_fs_ml_video_sync) { g_fs_ml_vblank_sync = 1; } SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); if (g_fs_ml_vblank_sync) { fs_emu_log("*** SDL_GL_SWAP_CONTROL is enabled ***\n"); SDL_GL_SetAttribute(SDL_GL_SWAP_CONTROL, 1); } else { fs_emu_log("*** SDL_GL_SWAP_CONTROL is disabled ***\n"); SDL_GL_SetAttribute(SDL_GL_SWAP_CONTROL, 0); } if (g_fsaa) { fs_log("setting FSAA samples to %d\n", g_fsaa); SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 1); SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, g_fsaa); } g_window_width = fs_config_get_int("window_width"); if (g_window_width == FS_CONFIG_NONE) { g_window_width = 1920 / 2; } g_window_height = fs_config_get_int("window_height"); if (g_window_height == FS_CONFIG_NONE) { g_window_height = 1080/ 2; } g_window_resizable = fs_config_get_boolean("window_resizable"); if (g_window_resizable == FS_CONFIG_NONE) { g_window_resizable = 1; } set_video_mode(); // we display a black frame as soon as possible (to reduce flickering on // startup) glClear(GL_COLOR_BUFFER_BIT); SDL_GL_SwapBuffers(); fs_gl_finish(); SDL_WM_SetCaption(g_window_title, fs_get_application_name()); g_fs_ml_automatic_input_grab = fs_config_get_boolean( "automatic_input_grab"); if (g_fs_ml_automatic_input_grab == FS_CONFIG_NONE) { g_fs_ml_automatic_input_grab = 1; } fs_log("automatic input grab: %d\n", g_fs_ml_automatic_input_grab); int initial_input_grab = g_fs_ml_automatic_input_grab; if (fs_config_get_boolean("initial_input_grab") == 1) { initial_input_grab = 1; } else if (fs_config_get_boolean("initial_input_grab") == 0 || // deprecated names: fs_config_get_boolean("input_grab") == 0 || fs_config_get_boolean("grab_input") == 0) { initial_input_grab = 0; } fs_log("initial input grab: %d\n", initial_input_grab); if (initial_input_grab) { fs_ml_grab_input(1, 1); } fs_ml_show_cursor(0, 1); // this function must be called from the video thread fs_log("init_opengl\n"); fs_emu_video_init_opengl(); #ifdef WINDOWS fs_ml_init_raw_input(); #else // enable keysym to unicode char translation SDL_EnableUNICODE(1); #endif fs_log("create windows is done\n"); return 1; } int g_fs_ml_running = 1; #ifndef WINDOWS // using separate implementation on Windows with raw input void fs_ml_clear_keyboard_modifier_state() { } #endif static void on_resize(int width, int height) { if (width == g_fs_ml_video_width && height == g_fs_ml_video_height) { fs_log("got resize event, but size was unchanged\n"); return; } if (g_fs_emu_video_fullscreen) { fs_log("not updating window size in fullscreen\n"); } else if (width == g_fullscreen_width && height == g_fullscreen_height) { fs_log("not setting window size to fullscreen size\n"); } else { g_window_width = width; g_window_height = height; fs_log("resize event %d %d\n", width, height); } #ifdef MACOSX destroy_opengl_state(); #endif set_video_mode(); #ifdef MACOSX recreate_opengl_state(); #endif } static int event_loop() { int result = 0; SDL_Event event; while (SDL_PollEvent(&event)) { switch(event.type) { case SDL_QUIT: fs_log("intercepted SDL_QUIT\n"); fs_ml_quit(); continue; case SDL_VIDEORESIZE: on_resize(event.resize.w, event.resize.h); continue; case SDL_ACTIVEEVENT: //fs_log("got active event %d %d %d %d\n", event.active.state, // SDL_APPMOUSEFOCUS, SDL_APPINPUTFOCUS, SDL_APPACTIVE); if ((event.active.state & SDL_APPINPUTFOCUS)) { if (event.active.gain) { fs_log("got keyboard focus\n"); // just got keyboard focus -- clearing modifier states fs_ml_clear_keyboard_modifier_state(); if (g_fs_ml_had_input_grab) { fs_log("- had input grab, re-acquiring\n"); fs_ml_grab_input(1, 1); g_fs_ml_had_input_grab = 0; } if (g_fs_ml_was_fullscreen) { if (!g_fs_emu_video_fullscreen) { fs_log("- was in fullsreen mode before (switching)\n"); fs_ml_toggle_fullscreen(); } g_fs_ml_was_fullscreen = 0; } } else { fs_log("lost keyboard focus\n"); if (fs_ml_has_input_grab()) { fs_log("- releasing input grab\n"); fs_ml_grab_input(0, 1); g_fs_ml_had_input_grab = 1; } else { fs_log("- did not have input grab\n"); //g_fs_ml_had_input_grab = 0; } } } continue; case SDL_KEYDOWN: case SDL_KEYUP: if (g_debug_keys) { fs_log("SDL key sym %d mod %d scancode %d state %d\n", event.key.keysym.sym, event.key.keysym.mod, event.key.keysym.scancode, event.key.state); } if (event.key.keysym.sym == 0 && event.key.keysym.scancode == 0) { // ignore "ghost key" seen on OS X which without this // specific check will cause the A key to be mysteriously // pressed. if (g_debug_keys) { fs_log("- ignored key with keysym 0 and scancode 0\n"); } continue; } /* if (event.key.keysym.sym == SDLK_F12) { g_f12_state = event.key.state ? FS_ML_KEY_MOD_F12 : 0; printf("-- g_f12_state is %d\n", g_f12_state); } else if (event.key.keysym.sym == SDLK_F11) { g_f11_state = event.key.state ? FS_ML_KEY_MOD_F11 : 0; } */ Uint8* key_state; int num_keys; key_state = SDL_GetKeyState(&num_keys); g_f11_state = key_state[SDLK_F11] ? FS_ML_KEY_MOD_F11 : 0; g_f12_state = key_state[SDLK_F12] ? FS_ML_KEY_MOD_F12 : 0; int key = -1; if (0) { } #ifdef MACOSX else if (event.key.keysym.sym == SDLK_LSHIFT) { key = SDLK_LSHIFT; } else if (event.key.keysym.sym == SDLK_LCTRL) { key = SDLK_LCTRL; } else if (event.key.keysym.sym == SDLK_LALT) { key = SDLK_LALT; } else if (event.key.keysym.sym == SDLK_LMETA) { key = SDLK_LSUPER; } else if (event.key.keysym.sym == SDLK_RMETA) { key = SDLK_RSUPER; } else if (event.key.keysym.sym == SDLK_RALT) { key = SDLK_RALT; } else if (event.key.keysym.sym == SDLK_RCTRL) { key = SDLK_RCTRL; } else if (event.key.keysym.sym == SDLK_RSHIFT) { key = SDLK_RSHIFT; } else if (event.key.keysym.sym == SDLK_CAPSLOCK) { key = SDLK_CAPSLOCK; } #elif WINDOWS #else else if (event.key.keysym.sym == SDLK_MODE) { key = SDLK_RALT; } #endif else { key = fs_ml_scancode_to_key(event.key.keysym.scancode); } if (g_f12_state || g_f11_state) { // leave translated key code in keysym } else if (key >= 0) { if (g_debug_keys) { fs_log("- key code set to %d (was %d) based on " "scancode %d\n", key, event.key.keysym.sym, event.key.keysym.scancode); } event.key.keysym.sym = key; } int mod = event.key.keysym.mod; if (mod & KMOD_LSHIFT || mod & KMOD_RSHIFT) { event.key.keysym.mod |= KMOD_SHIFT; } if (mod & KMOD_LALT || mod & KMOD_RALT) { //mod & ~(KMOD_LALT | KMOD_RALT); event.key.keysym.mod |= KMOD_ALT; } if (mod & KMOD_LCTRL || mod & KMOD_RCTRL) { event.key.keysym.mod |= KMOD_CTRL; } if (mod & KMOD_LMETA || mod & KMOD_RMETA) { event.key.keysym.mod |= KMOD_META; } // filter out other modidifers event.key.keysym.mod &= (KMOD_SHIFT | KMOD_ALT | KMOD_CTRL | KMOD_META); // add F11/F12 state event.key.keysym.mod |= g_f11_state | g_f12_state; //printf("%d %d %d %d\n", event.key.keysym.mod, // KMOD_ALT, KMOD_LALT, KMOD_RALT); break; //case SDL_MOUSEBUTTONDOWN: // printf("--- mousebutton down ---\n"); } fs_ml_event *new_event = NULL; if (event.type == SDL_KEYDOWN) { new_event = fs_ml_alloc_event(); new_event->type = FS_ML_KEYDOWN; new_event->key.keysym.sym = event.key.keysym.sym; new_event->key.keysym.mod = event.key.keysym.mod; new_event->key.keysym.unicode = event.key.keysym.unicode; new_event->key.state = event.key.state; } else if (event.type == SDL_KEYUP) { new_event = fs_ml_alloc_event(); new_event->type = FS_ML_KEYUP; new_event->key.keysym.sym = event.key.keysym.sym; new_event->key.keysym.mod = event.key.keysym.mod; new_event->key.state = event.key.state; } else if (event.type == SDL_JOYBUTTONDOWN) { new_event = fs_ml_alloc_event(); new_event->type = FS_ML_JOYBUTTONDOWN; new_event->jbutton.which = event.jbutton.which; new_event->jbutton.button = event.jbutton.button; new_event->jbutton.state = event.jbutton.state; } else if (event.type == SDL_JOYBUTTONUP) { new_event = fs_ml_alloc_event(); new_event->type = FS_ML_JOYBUTTONUP; new_event->jbutton.which = event.jbutton.which; new_event->jbutton.button = event.jbutton.button; new_event->jbutton.state = event.jbutton.state; } else if (event.type == SDL_JOYAXISMOTION) { new_event = fs_ml_alloc_event(); new_event->type = FS_ML_JOYAXISMOTION; new_event->jaxis.which = event.jaxis.which; new_event->jaxis.axis = event.jaxis.axis; new_event->jaxis.value = event.jaxis.value; } else if (event.type == SDL_JOYHATMOTION) { new_event = fs_ml_alloc_event(); new_event->type = FS_ML_JOYHATMOTION; new_event->jhat.which = event.jhat.which; new_event->jhat.hat = event.jhat.hat; new_event->jhat.value = event.jhat.value; } else if (event.type == SDL_MOUSEMOTION) { new_event = fs_ml_alloc_event(); new_event->type = FS_ML_MOUSEMOTION; new_event->motion.xrel = event.motion.xrel; new_event->motion.yrel = event.motion.yrel; } else if (event.type == SDL_MOUSEBUTTONDOWN) { new_event = fs_ml_alloc_event(); new_event->type = FS_ML_MOUSEBUTTONDOWN; new_event->button.button = event.button.button; new_event->button.state = event.button.state; } else if (event.type == SDL_MOUSEBUTTONUP) { new_event = fs_ml_alloc_event(); new_event->type = FS_ML_MOUSEBUTTONUP; new_event->button.button = event.button.button; new_event->button.state = event.button.state; } if (new_event) { fs_ml_post_event(new_event); } } return result; } void fs_ml_video_swap_buffers() { SDL_GL_SwapBuffers(); } int fs_ml_main_loop() { while (g_fs_ml_running) { event_loop(); process_video_events(); fs_ml_render_iteration(); } return 0; } void fs_ml_video_init() { fs_log("creating condition\n"); g_video_cond = fs_condition_create(); fs_log("creating mutex\n"); g_video_mutex = fs_mutex_create(); g_video_event_queue = fs_queue_new(); g_video_event_mutex = fs_mutex_create(); g_debug_keys = getenv("FS_DEBUG_INPUT") && \ getenv("FS_DEBUG_INPUT")[0] == '1'; fs_ml_render_init(); } void fs_ml_input_init() { fs_emu_log("fs_ml_input_init\n"); fs_ml_initialize_keymap(); /* // reset all input mappings for (int i = 0; i < (FS_ML_MAX_DEVICES * FS_ML_SLOTS); i++) { g_input_action_table[i] = 0; g_menu_action_table[i] = 0; } */ //g_fs_ml_input_devices[FS_ML_KEYBOARD].name = fs_strdup("KEYBOARD"); //g_fs_ml_input_devices[FS_ML_KEYBOARD].alias = fs_strdup(""); fs_hash_table *device_counts = fs_hash_table_new_full(fs_str_hash, fs_str_equal, free, NULL); int num_joysticks = SDL_NumJoysticks(); for (int i = 0; i < num_joysticks; i++) { if (i == FS_ML_MAX_JOYSTICKS) { fs_emu_log("WARNING: reached max num joysticks"); break; } SDL_Joystick *joystick = SDL_JoystickOpen(i); char* name = fs_ascii_strup(SDL_JoystickName(i), -1); name = fs_strstrip(name); if (name[0] == '\0') { free(name); name = fs_ascii_strup("Unnamed", -1); } int count = FS_POINTER_TO_INT(fs_hash_table_lookup( device_counts, name)); count++; // hash table now owns name pointer fs_hash_table_replace(device_counts, fs_strdup(name), FS_INT_TO_POINTER(count)); if (count > 1) { char *result = fs_strdup_printf("%s #%d", name, count); free(name); name = result; } g_fs_ml_input_devices[i].index = i; g_fs_ml_input_devices[i].name = name; //g_input_devices[i].alias = fs_strdup_printf("JOYSTICK #%d", i); if (i == 0) { g_fs_ml_input_devices[i].alias = fs_strdup("JOYSTICK"); } else { g_fs_ml_input_devices[i].alias = fs_strdup_printf("JOYSTICK #%d", i + 1); } g_fs_ml_input_devices[i].hats = SDL_JoystickNumHats(joystick); g_fs_ml_input_devices[i].buttons = SDL_JoystickNumButtons(joystick); g_fs_ml_input_devices[i].axes = SDL_JoystickNumAxes(joystick); g_fs_ml_input_devices[i].balls = SDL_JoystickNumBalls(joystick); /* for (int j = 0; j < MAX_STATES; j++) { g_input_devices[i].actions[j] = 0; } */ fs_emu_log("device #%02d found: %s\n", i + 1, name); fs_emu_log("- %d buttons %d hats %d axes %d balls\n", g_fs_ml_input_devices[i].buttons, g_fs_ml_input_devices[i].hats, g_fs_ml_input_devices[i].axes, g_fs_ml_input_devices[i].balls); } g_fs_ml_input_devices[num_joysticks].name = fs_strdup("KEYBOARD"); g_fs_ml_input_devices[num_joysticks].alias = fs_strdup(""); g_fs_ml_input_device_count = num_joysticks + 1; fs_hash_table_destroy(device_counts); fs_ml_initialize_keymap(); } #endif fs-uae-2.2.3+dfsg/libfsemu/src/ml/rawinput.c0000644000175000017500000004307012162366654021102 0ustar glaubitzglaubitz#ifdef WINDOWS #define _WIN32_WINNT 0x0501 #include #include #include #include #include #include #include #include #include "fs/ml.h" #include "ml_internal.h" #include #include #define NUM_VKEYS 256 #define MAX_VKEY (3 * NUM_VKEYS - 1) // first NUM_VKEYS entries contain vkeys, then vkeys for E0 and E1 #define E0 NUM_VKEYS #define E1 (NUM_VKEYS * 2) #define MAPVK_VK_TO_CHAR 2 #define USE_MAKECODES static char g_key_state[3 * NUM_VKEYS] = {}; static int16_t g_key_mapping[3 * NUM_VKEYS] = {}; static char g_is_modifier_key[FS_ML_KEY_LAST] = {}; //static int16_t g_key_mapping[3 * NUM_VKEYS] = {}; static HWND g_window = 0; static HGLRC g_hglrc = 0; static HKL g_keyboard_layout = 0; static int g_debug_keys = 0; static int g_mod_lalt = 0; static int g_mod_ralt = 0; static int g_mod_lctrl = 0; static int g_mod_rctrl = 0; static int g_mod_lshift = 0; static int g_mod_rshift = 0; static int g_mod_f11 = 0; static int g_mod_f12 = 0; static int g_mod = 0; void fs_ml_clear_keyboard_modifier_state() { fs_log("clearing keyboard modifier state\n"); g_mod_lalt = 0; g_mod_ralt = 0; g_mod_lctrl = 0; g_mod_rctrl = 0; g_mod_lshift = 0; g_mod_rshift = 0; g_mod_f11 = 0; g_mod_f12 = 0; g_mod = 0; } static void process_keyboard_input(LPRAWINPUT raw_input) { //LPRAWKEYBOARD raw_keyboard = &(raw_input->data.keyboard); //int vkey = raw_keyboard->VKey; //int vkey = raw_keyboard->VKey; //int flags = raw_keyboard->Flags; // int vkey = raw_input->data.keyboard.VKey; int flags = raw_input->data.keyboard.Flags; int make_code = raw_input->data.keyboard.MakeCode; if (g_debug_keys) { fs_log("vkey...: %d (0x%x) make %d extra %d flags %d E0 %d E1 %d\n", vkey, vkey, raw_input->data.keyboard.MakeCode, raw_input->data.keyboard.ExtraInformation, flags, (flags & RI_KEY_E0) != 0, (flags & RI_KEY_E1) != 0); } #ifdef USE_MAKECODES vkey = make_code; if (flags & RI_KEY_E0) { vkey += NUM_VKEYS; } else if (flags & RI_KEY_E1) { vkey += 2 * NUM_VKEYS; } #else // special cases if (make_code == 54) { // for some reason, flags is not set properly for right shift vkey = VK_SHIFT + E0; } else if (flags & RI_KEY_E0) { vkey += NUM_VKEYS; } else if (flags & RI_KEY_E1) { vkey += 2 * NUM_VKEYS; } #endif int update_mod = 0; int state = ((flags & RI_KEY_BREAK) == 0); switch (vkey) { case 42: g_mod_lshift = state; //mod_shift = g_mod_lshift || g_mod_rshift; update_mod = 1; break; case 54: g_mod_rshift = state; //mod_shift = g_mod_lshift || g_mod_rshift; update_mod = 1; break; case 29: g_mod_lctrl = state; //mod_ctrl = g_mod_lctrl || g_mod_rctrl; update_mod = 1; break; case E0 + 29: g_mod_rctrl = state; //mod_ctrl = g_mod_lctrl || g_mod_rctrl; update_mod = 1; break; case 56: g_mod_lalt = state; //mod_alt = g_mod_lalt || g_mod_ralt; update_mod = 1; break; case E0 + 56: g_mod_ralt = state; update_mod = 1; break; case 87: g_mod_f11 = state; update_mod = 1; break; case 88: g_mod_f12 = state; update_mod = 1; break; } static unsigned char keyboard_state[256] = {}; //GetKeyboardState(keyboard_state); if (update_mod) { if (g_mod_lshift || g_mod_rshift) { g_mod = g_mod | KMOD_SHIFT; keyboard_state[VK_SHIFT] = 0x80; } else { g_mod = g_mod & ~KMOD_SHIFT; keyboard_state[VK_SHIFT] = 0x0; } if (g_mod_lctrl || g_mod_rctrl) { g_mod = g_mod | KMOD_CTRL; keyboard_state[VK_CONTROL] = 0x80; } else { g_mod = g_mod & ~KMOD_CTRL; keyboard_state[VK_CONTROL] = 0x0; } if (g_mod_lalt || g_mod_ralt) { g_mod = g_mod | KMOD_ALT; keyboard_state[VK_MENU] = 0x80; } else { g_mod = g_mod & ~KMOD_ALT; keyboard_state[VK_MENU] = 0x0; } if (g_mod_f11) { g_mod = g_mod | FS_ML_KEY_MOD_F11; } else { g_mod = g_mod & ~FS_ML_KEY_MOD_F11; } if (g_mod_f12) { g_mod = g_mod | FS_ML_KEY_MOD_F12; } else { g_mod = g_mod & ~FS_ML_KEY_MOD_F12; } } int key_code = g_key_mapping[vkey]; WORD character = 0; if (!g_is_modifier_key[key_code]) { ToAsciiEx(raw_input->data.keyboard.VKey, raw_input->data.keyboard.MakeCode, keyboard_state, &character, 0, g_keyboard_layout); //printf("%d %d => %d\n", raw_input->data.keyboard.VKey, // raw_input->data.keyboard.MakeCode, character); if (character > 128) { character = 0; } } if (state == 0) { // key is up if (vkey <= MAX_VKEY && g_key_state[vkey]) { g_key_state[vkey] = 0; fs_ml_event *event = fs_ml_alloc_event(); event->type = FS_ML_KEYUP; event->key.keysym.sym = key_code; event->key.keysym.mod = g_mod; event->key.keysym.unicode = character; event->key.state = 0; fs_ml_post_event(event); } } else { // key is down if (vkey <= MAX_VKEY && !g_key_state[vkey]) { //fs_log("down\n"); g_key_state[vkey] = 1; fs_ml_event *event = fs_ml_alloc_event(); event->type = FS_ML_KEYDOWN; event->key.keysym.sym = key_code; event->key.keysym.mod = g_mod; event->key.keysym.unicode = character; event->key.state = 1; //fs_log("code: %d\n", event->key.code); fs_ml_post_event(event); } } } static void process_input(void *data) { //fs_log("process_input\n"); LPRAWINPUT raw_input = data; if (raw_input->header.dwType == RIM_TYPEMOUSE) { //process_mouse_input(raw_input); } else if (raw_input->header.dwType == RIM_TYPEKEYBOARD) { process_keyboard_input(raw_input); } } #define RAW_INPUT_MAX_SIZE 1024 static unsigned char *g_raw_input_data[RAW_INPUT_MAX_SIZE]; static WNDPROC g_wndproc = NULL; static LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) { //fs_log("WndProc %d\n", message); HRAWINPUT raw_input_handle; switch (message) { case WM_INPUTLANGCHANGE: g_keyboard_layout = GetKeyboardLayout(0); break; case WM_INPUT: raw_input_handle = (HRAWINPUT) lparam; /* unsigned int size; if (GetRawInputData(raw_input_handle, RID_INPUT, NULL, &size, sizeof(RAWINPUTHEADER)) != -1) { void *data = malloc(size); if (GetRawInputData(raw_input_handle, RID_INPUT, data, &size, sizeof(RAWINPUTHEADER)) != -1) { process_input(data); } free(data); } */ unsigned int size = RAW_INPUT_MAX_SIZE; if (GetRawInputData(raw_input_handle, RID_INPUT, &g_raw_input_data, &size, sizeof(RAWINPUTHEADER)) != -1) { process_input(&g_raw_input_data); } // must call DefWindowProc according to http://msdn.microsoft.com/ // en-us/library/windows/desktop/ms645590(v=vs.85).aspx return DefWindowProc(hwnd, message, wparam, lparam); } return CallWindowProc(g_wndproc, hwnd, message, wparam, lparam); } static void init_key_mapping() { // http://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=VS.85).aspx #ifdef USE_MAKECODES g_key_mapping[1] = FS_ML_KEY_ESCAPE; g_key_mapping[59] = FS_ML_KEY_F1; g_key_mapping[60] = FS_ML_KEY_F2; g_key_mapping[61] = FS_ML_KEY_F3; g_key_mapping[62] = FS_ML_KEY_F4; g_key_mapping[63] = FS_ML_KEY_F5; g_key_mapping[64] = FS_ML_KEY_F6; g_key_mapping[65] = FS_ML_KEY_F7; g_key_mapping[66] = FS_ML_KEY_F8; g_key_mapping[67] = FS_ML_KEY_F9; g_key_mapping[68] = FS_ML_KEY_F10; g_key_mapping[87] = FS_ML_KEY_F11; g_key_mapping[88] = FS_ML_KEY_F12; g_key_mapping[41] = FS_ML_KEY_BACKQUOTE; g_key_mapping[2] = FS_ML_KEY_1; g_key_mapping[3] = FS_ML_KEY_2; g_key_mapping[4] = FS_ML_KEY_3; g_key_mapping[5] = FS_ML_KEY_4; g_key_mapping[6] = FS_ML_KEY_5; g_key_mapping[7] = FS_ML_KEY_6; g_key_mapping[8] = FS_ML_KEY_7; g_key_mapping[9] = FS_ML_KEY_8; g_key_mapping[10] = FS_ML_KEY_9; g_key_mapping[11] = FS_ML_KEY_0; g_key_mapping[12] = FS_ML_KEY_MINUS; g_key_mapping[13] = FS_ML_KEY_EQUALS; g_key_mapping[14] = FS_ML_KEY_BACKSPACE; g_key_mapping[15] = FS_ML_KEY_TAB; g_key_mapping[16] = FS_ML_KEY_Q; g_key_mapping[17] = FS_ML_KEY_W; g_key_mapping[18] = FS_ML_KEY_E; g_key_mapping[19] = FS_ML_KEY_R; g_key_mapping[20] = FS_ML_KEY_T; g_key_mapping[21] = FS_ML_KEY_Y; g_key_mapping[22] = FS_ML_KEY_U; g_key_mapping[23] = FS_ML_KEY_I; g_key_mapping[24] = FS_ML_KEY_O; g_key_mapping[25] = FS_ML_KEY_P; g_key_mapping[26] = FS_ML_KEY_LEFTBRACKET; g_key_mapping[27] = FS_ML_KEY_RIGHTBRACKET; g_key_mapping[28] = FS_ML_KEY_RETURN; g_key_mapping[58] = FS_ML_KEY_CAPSLOCK; g_key_mapping[30] = FS_ML_KEY_A; g_key_mapping[31] = FS_ML_KEY_S; g_key_mapping[32] = FS_ML_KEY_D; g_key_mapping[33] = FS_ML_KEY_F; g_key_mapping[34] = FS_ML_KEY_G; g_key_mapping[35] = FS_ML_KEY_H; g_key_mapping[36] = FS_ML_KEY_J; g_key_mapping[37] = FS_ML_KEY_K; g_key_mapping[38] = FS_ML_KEY_L; g_key_mapping[39] = FS_ML_KEY_SEMICOLON; g_key_mapping[40] = FS_ML_KEY_QUOTE; g_key_mapping[43] = FS_ML_KEY_BACKSLASH; g_key_mapping[42] = FS_ML_KEY_LSHIFT; g_key_mapping[86] = FS_ML_KEY_LESS; g_key_mapping[44] = FS_ML_KEY_Z; g_key_mapping[45] = FS_ML_KEY_X; g_key_mapping[46] = FS_ML_KEY_C; g_key_mapping[47] = FS_ML_KEY_V; g_key_mapping[48] = FS_ML_KEY_B; g_key_mapping[49] = FS_ML_KEY_N; g_key_mapping[50] = FS_ML_KEY_M; g_key_mapping[51] = FS_ML_KEY_COMMA; g_key_mapping[52] = FS_ML_KEY_PERIOD; g_key_mapping[53] = FS_ML_KEY_SLASH; g_key_mapping[54] = FS_ML_KEY_RSHIFT; g_key_mapping[29] = FS_ML_KEY_LCTRL; g_key_mapping[E0 + 91] = FS_ML_KEY_LSUPER; g_key_mapping[56] = FS_ML_KEY_LALT; g_key_mapping[57] = FS_ML_KEY_SPACE; g_key_mapping[E0 + 56] = FS_ML_KEY_RALT; g_key_mapping[E0 + 92] = FS_ML_KEY_RSUPER; g_key_mapping[E0 + 93] = FS_ML_KEY_MENU; g_key_mapping[E0 + 29] = FS_ML_KEY_RCTRL; g_key_mapping[E0 + 55] = FS_ML_KEY_PRINT; //g_key_mapping[E0 + 42] = FS_ML_KEY_PRINT; g_key_mapping[70] = FS_ML_KEY_SCROLLOCK; g_key_mapping[E1 + 29] = FS_ML_KEY_PAUSE; //g_key_mapping[69] = FS_ML_KEY_PAUSE; g_key_mapping[E0 + 82] = FS_ML_KEY_INSERT; g_key_mapping[E0 + 71] = FS_ML_KEY_HOME; g_key_mapping[E0 + 73] = FS_ML_KEY_PAGEUP; g_key_mapping[E0 + 83] = FS_ML_KEY_DELETE; g_key_mapping[E0 + 79] = FS_ML_KEY_END; g_key_mapping[E0 + 81] = FS_ML_KEY_PAGEDOWN; g_key_mapping[E0 + 72] = FS_ML_KEY_UP; g_key_mapping[E0 + 75] = FS_ML_KEY_LEFT; g_key_mapping[E0 + 80] = FS_ML_KEY_DOWN; g_key_mapping[E0 + 77] = FS_ML_KEY_RIGHT; g_key_mapping[69] = FS_ML_KEY_NUMLOCK; g_key_mapping[E0 + 53] = FS_ML_KEY_KP_DIVIDE; g_key_mapping[55] = FS_ML_KEY_KP_MULTIPLY; g_key_mapping[74] = FS_ML_KEY_KP_MINUS; g_key_mapping[71] = FS_ML_KEY_KP7; g_key_mapping[72] = FS_ML_KEY_KP8; g_key_mapping[73] = FS_ML_KEY_KP9; g_key_mapping[78] = FS_ML_KEY_KP_PLUS; g_key_mapping[75] = FS_ML_KEY_KP4; g_key_mapping[76] = FS_ML_KEY_KP5; g_key_mapping[77] = FS_ML_KEY_KP6; g_key_mapping[79] = FS_ML_KEY_KP1; g_key_mapping[80] = FS_ML_KEY_KP2; g_key_mapping[81] = FS_ML_KEY_KP3; g_key_mapping[E0 + 28] = FS_ML_KEY_KP_ENTER; g_key_mapping[82] = FS_ML_KEY_KP0; g_key_mapping[83] = FS_ML_KEY_KP_PERIOD; g_is_modifier_key[FS_ML_KEY_LCTRL] = 1; g_is_modifier_key[FS_ML_KEY_RCTRL] = 1; g_is_modifier_key[FS_ML_KEY_LALT] = 1; g_is_modifier_key[FS_ML_KEY_RALT] = 1; g_is_modifier_key[FS_ML_KEY_LSHIFT] = 1; g_is_modifier_key[FS_ML_KEY_RSHIFT] = 1; g_is_modifier_key[FS_ML_KEY_CAPSLOCK] = 1; g_is_modifier_key[FS_ML_KEY_LSUPER] = 1; g_is_modifier_key[FS_ML_KEY_RSUPER] = 1; #else g_key_mapping[VK_BACK] = FS_ML_KEY_BACKSPACE; g_key_mapping[VK_TAB] = FS_ML_KEY_TAB; g_key_mapping[VK_CLEAR] = FS_ML_KEY_CLEAR; g_key_mapping[VK_RETURN] = FS_ML_KEY_RETURN; // FIXME: RSHIFT g_key_mapping[VK_SHIFT] = FS_ML_KEY_LSHIFT; g_key_mapping[VK_CONTROL] = FS_ML_KEY_LCTRL; g_key_mapping[E0 + VK_CONTROL] = FS_ML_KEY_RCTRL; g_key_mapping[VK_MENU] = FS_ML_KEY_LALT; g_key_mapping[E1 + VK_PAUSE] = FS_ML_KEY_PAUSE; g_key_mapping[VK_CAPITAL] = FS_ML_KEY_CAPSLOCK; g_key_mapping[VK_ESCAPE] = FS_ML_KEY_ESCAPE; g_key_mapping[VK_SPACE] = FS_ML_KEY_SPACE; g_key_mapping[E0 + VK_PRIOR] = FS_ML_KEY_PAGEUP; g_key_mapping[E0 + VK_NEXT] = FS_ML_KEY_PAGEDOWN; g_key_mapping[E0 + VK_END] = FS_ML_KEY_END; g_key_mapping[E0 + VK_HOME] = FS_ML_KEY_HOME; g_key_mapping[E0 + VK_LEFT] = FS_ML_KEY_LEFT; g_key_mapping[E0 + VK_UP] = FS_ML_KEY_UP; g_key_mapping[E0 + VK_RIGHT] = FS_ML_KEY_RIGHT; g_key_mapping[E0 + VK_DOWN] = FS_ML_KEY_DOWN; // SELECT // PRINT // EXECUTE g_key_mapping[E0 + VK_SNAPSHOT] = FS_ML_KEY_PRINT; g_key_mapping[E0 + VK_INSERT] = FS_ML_KEY_INSERT; g_key_mapping[E0 + VK_DELETE] = FS_ML_KEY_DELETE; // HELP g_key_mapping[0x30] = FS_ML_KEY_0; g_key_mapping[0x31] = FS_ML_KEY_1; g_key_mapping[0x32] = FS_ML_KEY_2; g_key_mapping[0x33] = FS_ML_KEY_3; g_key_mapping[0x34] = FS_ML_KEY_4; g_key_mapping[0x35] = FS_ML_KEY_5; g_key_mapping[0x36] = FS_ML_KEY_6; g_key_mapping[0x37] = FS_ML_KEY_7; g_key_mapping[0x38] = FS_ML_KEY_8; g_key_mapping[0x39] = FS_ML_KEY_9; g_key_mapping[0x41] = FS_ML_KEY_A; g_key_mapping[0x42] = FS_ML_KEY_B; g_key_mapping[0x43] = FS_ML_KEY_C; g_key_mapping[0x44] = FS_ML_KEY_D; g_key_mapping[0x45] = FS_ML_KEY_E; g_key_mapping[0x46] = FS_ML_KEY_F; g_key_mapping[0x47] = FS_ML_KEY_G; g_key_mapping[0x48] = FS_ML_KEY_H; g_key_mapping[0x49] = FS_ML_KEY_I; g_key_mapping[0x4a] = FS_ML_KEY_J; g_key_mapping[0x4b] = FS_ML_KEY_K; g_key_mapping[0x4c] = FS_ML_KEY_L; g_key_mapping[0x4d] = FS_ML_KEY_M; g_key_mapping[0x4e] = FS_ML_KEY_N; g_key_mapping[0x4f] = FS_ML_KEY_O; g_key_mapping[0x50] = FS_ML_KEY_P; g_key_mapping[0x51] = FS_ML_KEY_Q; g_key_mapping[0x52] = FS_ML_KEY_R; g_key_mapping[0x53] = FS_ML_KEY_S; g_key_mapping[0x54] = FS_ML_KEY_T; g_key_mapping[0x55] = FS_ML_KEY_U; g_key_mapping[0x56] = FS_ML_KEY_V; g_key_mapping[0x57] = FS_ML_KEY_W; g_key_mapping[0x58] = FS_ML_KEY_X; g_key_mapping[0x59] = FS_ML_KEY_Y; g_key_mapping[0x5a] = FS_ML_KEY_Z; g_key_mapping[VK_LWIN] = FS_ML_KEY_LSUPER; // FIXME? g_key_mapping[VK_RWIN] = FS_ML_KEY_RSUPER; // FIXME? g_key_mapping[VK_APPS] = FS_ML_KEY_MENU; // FIXME? OR MODE? // SLEEP g_key_mapping[VK_NUMPAD0] = FS_ML_KEY_KP0; g_key_mapping[VK_NUMPAD1] = FS_ML_KEY_KP1; g_key_mapping[VK_NUMPAD2] = FS_ML_KEY_KP2; g_key_mapping[VK_NUMPAD3] = FS_ML_KEY_KP3; g_key_mapping[VK_NUMPAD4] = FS_ML_KEY_KP4; g_key_mapping[VK_NUMPAD5] = FS_ML_KEY_KP5; g_key_mapping[VK_NUMPAD6] = FS_ML_KEY_KP6; g_key_mapping[VK_NUMPAD7] = FS_ML_KEY_KP7; g_key_mapping[VK_NUMPAD8] = FS_ML_KEY_KP8; g_key_mapping[VK_NUMPAD9] = FS_ML_KEY_KP9; // ... FIXME ... g_key_mapping[VK_F1] = FS_ML_KEY_F1; g_key_mapping[VK_F2] = FS_ML_KEY_F2; g_key_mapping[VK_F3] = FS_ML_KEY_F3; g_key_mapping[VK_F4] = FS_ML_KEY_F4; g_key_mapping[VK_F5] = FS_ML_KEY_F5; g_key_mapping[VK_F6] = FS_ML_KEY_F6; g_key_mapping[VK_F7] = FS_ML_KEY_F7; g_key_mapping[VK_F8] = FS_ML_KEY_F8; g_key_mapping[VK_F9] = FS_ML_KEY_F9; g_key_mapping[VK_F10] = FS_ML_KEY_F10; g_key_mapping[VK_F11] = FS_ML_KEY_F11; g_key_mapping[VK_F12] = FS_ML_KEY_F12; g_key_mapping[VK_NUMLOCK] = FS_ML_KEY_NUMLOCK; g_key_mapping[VK_SCROLL] = FS_ML_KEY_SCROLLOCK; g_key_mapping[VK_OEM_5] = FS_ML_KEY_BACKQUOTE; //g_key_mapping[VK_OEM_5] = FS_ML_KEY_BACKQUOTE; #endif } void fs_ml_init_raw_input() { fs_log("fs_ml_init_raw_input\n"); g_debug_keys = getenv("FS_DEBUG_INPUT") && \ getenv("FS_DEBUG_INPUT")[0] == '1'; //list_input_devices(); init_key_mapping(); SDL_SysWMinfo info; SDL_VERSION(&info.version); // this is important! if (SDL_GetWMInfo(&info)) { g_window = info.window; g_hglrc = info.hglrc; } g_wndproc = (WNDPROC) GetWindowLongPtr(g_window, GWLP_WNDPROC); SetWindowLongPtr(g_window, GWLP_WNDPROC, (LONG_PTR) WndProc); fs_log("old window proc: %p new window proc: %p\n", g_wndproc, WndProc); RAWINPUTDEVICE rid; /* // mice rid.usUsagePage = 0x01; rid.usUsage = 0x02; rid.dwFlags = 0; //rid.dwFlags = RIDEV_INPUTSINK; //rid.dwFlags = RIDEV_NOLEGACY; rid.hwndTarget = hWnd; RegisterRawInputDevices(&rid, 1, sizeof(rid)); */ // keyboards rid.usUsagePage = 0x01; rid.usUsage = 0x06; rid.dwFlags = RIDEV_NOLEGACY | RIDEV_NOHOTKEYS; rid.hwndTarget = g_window; RegisterRawInputDevices(&rid, 1, sizeof(rid)); g_keyboard_layout = GetKeyboardLayout(0); } #endif fs-uae-2.2.3+dfsg/libfsemu/src/ml/windows.c0000644000175000017500000005634612162366654020735 0ustar glaubitzglaubitz#ifdef WINDOWS #define _WIN32_WINNT 0x0501 #include #include #include #include #include #include #include #include #include #include #include "fs/ml.h" #include "ml_internal.h" HICON hIconSmall = 0; HICON hIconBig = 0; void fs_ml_configure_window() { fs_log("fs_ml_configure_window\n"); SDL_SysWMinfo info; SDL_VERSION(&info.version); // this is important! if (!SDL_GetWMInfo(&info)) { fs_log("error getting window information\n"); return; } if (hIconSmall == 0) { hIconSmall = (HICON) LoadImage(GetModuleHandle(NULL), "icon", IMAGE_ICON, 16, 16, 0); fs_log("hIconSmall = %d\n", hIconSmall); } if (hIconBig == 0) { hIconBig = (HICON) LoadImage(GetModuleHandle(NULL), "icon", IMAGE_ICON, 32, 32, 0); fs_log("hIconBig = %d\n", hIconBig); } if (hIconSmall != 0) { SendMessage(info.window, WM_SETICON, ICON_SMALL, (LPARAM) hIconSmall); } if (hIconBig != 0) { SendMessage(info.window, WM_SETICON, ICON_BIG, (LPARAM) hIconBig); } } void fs_ml_prevent_power_saving(void) { fs_log("SetThreadExecutionState(ES_CONTINUOUS | ES_DISPLAY_REQUIRED)\n"); if (!SetThreadExecutionState(ES_CONTINUOUS | ES_DISPLAY_REQUIRED)) { fs_log("SetThreadExecutionState failed\n"); } } // not used int fs_ml_scancode_to_key(int scancode) { return 0; } #if 0 static int64_t g_syncbase = 0; int64_t fs_ml_read_clock(void) { LARGE_INTEGER result; QueryPerformanceCounter(&result); return result.QuadPart; } void fs_ml_calibrate_clock(void) { //SetProcessAffinityMask(GetCurrentProcess(), 1); LARGE_INTEGER result; QueryPerformanceFrequency(&result); g_syncbase = result.QuadPart; fs_log("calibrating clock: frequency is %lld\n", g_syncbase); } int64_t fs_ml_monotonic_time() { // FIXME: QueryPerformanceFrequency seems to give incorrect result // on my computer. Using "less accurate" timeGetTime instead, -but // beware, value will wrap around after about 47 days... //fs_log("%lld\n", g_syncbase); //fs_log("%lld\n", 1000000); //return (1000000 * fs_ml_read_clock()) / g_syncbase; //return (fs_ml_read_clock() * 1000000) / g_syncbase; return ((int64_t) timeGetTime()) * 1000; //return ((double)fs_ml_read_clock() / (double)g_syncbase) * 1000000; } #endif void fs_ml_usleep(int usec) { SDL_Delay(usec / 1000); } void fs_ml_set_fullscreen_extra() { } int fs_ml_video_mode_get_current(fs_ml_video_mode *mode) { DEVMODE devmode; devmode.dmSize = sizeof(DEVMODE); devmode.dmDriverExtra = 0; int result = EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &devmode); if (result == 0) { return 1; } mode->width = devmode.dmPelsWidth; mode->height = devmode.dmPelsHeight; mode->fps = devmode.dmDisplayFrequency; mode->bpp = devmode.dmBitsPerPel; mode->flags = devmode.dmDisplayFlags; return 0; } static STICKYKEYS g_StartupStickyKeys = {sizeof(STICKYKEYS), 0}; static TOGGLEKEYS g_StartupToggleKeys = {sizeof(TOGGLEKEYS), 0}; static FILTERKEYS g_StartupFilterKeys = {sizeof(FILTERKEYS), 0}; static void disable_accessibility_shortcuts() { SystemParametersInfo(SPI_GETSTICKYKEYS, sizeof(STICKYKEYS), &g_StartupStickyKeys, 0); SystemParametersInfo(SPI_GETTOGGLEKEYS, sizeof(TOGGLEKEYS), &g_StartupToggleKeys, 0); SystemParametersInfo(SPI_GETFILTERKEYS, sizeof(FILTERKEYS), &g_StartupFilterKeys, 0); // Disable StickyKeys/etc shortcuts but if the accessibility feature is on, // then leave the settings alone as its probably being usefully used STICKYKEYS skOff = g_StartupStickyKeys; if ((skOff.dwFlags & SKF_STICKYKEYSON) == 0) { skOff.dwFlags &= ~SKF_HOTKEYACTIVE; skOff.dwFlags &= ~SKF_CONFIRMHOTKEY; SystemParametersInfo(SPI_SETSTICKYKEYS, sizeof(STICKYKEYS), &skOff, 0); } TOGGLEKEYS tkOff = g_StartupToggleKeys; if ((tkOff.dwFlags & TKF_TOGGLEKEYSON) == 0) { tkOff.dwFlags &= ~TKF_HOTKEYACTIVE; tkOff.dwFlags &= ~TKF_CONFIRMHOTKEY; SystemParametersInfo(SPI_SETTOGGLEKEYS, sizeof(TOGGLEKEYS), &tkOff, 0); } FILTERKEYS fkOff = g_StartupFilterKeys; if ((fkOff.dwFlags & FKF_FILTERKEYSON) == 0) { fkOff.dwFlags &= ~FKF_HOTKEYACTIVE; fkOff.dwFlags &= ~FKF_CONFIRMHOTKEY; SystemParametersInfo(SPI_SETFILTERKEYS, sizeof(FILTERKEYS), &fkOff, 0); } } void fs_ml_initialize_keymap() { // FIXME: should ideally re-enable the shortcuts on exit, of they // were enabled in the first place. disable_accessibility_shortcuts(); } #ifdef WITH_WINDOWS_VIDEO #include "video.h" #include #include /* * Background information: * http://www.opengl.org/wiki/Platform_specifics:_Windows * http://www.opengl.org/wiki/SwapInterval_aka_vsync * http://www.equalizergraphics.com/documents/Developer/API-0.9/wglWindow_8cpp-source.html */ static HGLRC g_hrc; static HDC g_hdc; static void setup_pixel_format(HDC hdc) { static PIXELFORMATDESCRIPTOR pfd = { sizeof(PIXELFORMATDESCRIPTOR), //size of structure 1, //default version PFD_DRAW_TO_WINDOW | //window drawing support PFD_SUPPORT_OPENGL | //opengl support PFD_DOUBLEBUFFER, //double buffering support PFD_TYPE_RGBA, //RGBA color mode 32, //32 bit color mode 0, 0, 0, 0, 0, 0, //ignore color bits 0, //no alpha buffer 0, //ignore shift bit 0, //no accumulation buffer 0, 0, 0, 0, //ignore accumulation bits 16, //16 bit z-buffer size 0, //no stencil buffer 0, //no aux buffer PFD_MAIN_PLANE, //main drawing plane 0, //reserved 0, 0, 0 }; //layer masks ignored // choose best matching format int nPixelFormat = ChoosePixelFormat(hdc, &pfd); fs_log("pixel format flags: %d\n", pfd.dwFlags); fs_log("double buffering: %d\n", (pfd.dwFlags & PFD_DOUBLEBUFFER) != 0); // set the pixel format to the device context SetPixelFormat(hdc, nPixelFormat, &pfd); } static int get_fullscreen_width() { return GetSystemMetrics(SM_CXSCREEN); } static int get_fullscreen_height() { return GetSystemMetrics(SM_CYSCREEN); } static void post_mouse_button_event(int button, int state) { fs_ml_input_event *event = fs_ml_input_event_alloc(); if (state) { event->type = FS_ML_INPUT_EVENT_MOUSE_BUTTON_DOWN; } else { event->type = FS_ML_INPUT_EVENT_MOUSE_BUTTON_UP; } event->mouse.button = button; fs_ml_input_event_post(event); } static void process_mouse_input(LPRAWINPUT raw_input) { LPRAWMOUSE raw_mouse = &(raw_input->data.mouse); //fs_log("flags: %d %d %d\n", raw_mouse->usFlags, MOUSE_MOVE_RELATIVE, MOUSE_MOVE_ABSOLUTE); if (raw_mouse->usFlags & MOUSE_MOVE_ABSOLUTE) { } else { if (raw_mouse->lLastX != 0 || raw_mouse->lLastY != 0) { fs_ml_input_event *event = fs_ml_input_event_alloc(); event->type = FS_ML_INPUT_EVENT_MOUSE_MOTION; event->mouse.dx = raw_mouse->lLastX; event->mouse.dy = raw_mouse->lLastY; fs_ml_input_event_post(event); } } int flags = raw_mouse->usButtonFlags; if (flags) { if (flags & RI_MOUSE_LEFT_BUTTON_DOWN) { post_mouse_button_event(1, 1); } if (flags & RI_MOUSE_LEFT_BUTTON_UP) { post_mouse_button_event(1, 0); } if (flags & RI_MOUSE_MIDDLE_BUTTON_DOWN) { post_mouse_button_event(2, 1); } if (flags & RI_MOUSE_MIDDLE_BUTTON_UP) { post_mouse_button_event(2, 0); } if (flags & RI_MOUSE_RIGHT_BUTTON_DOWN) { post_mouse_button_event(3, 1); } if (flags & RI_MOUSE_RIGHT_BUTTON_UP) { post_mouse_button_event(3, 0); } } } #define NUM_VKEYS 256 #define MAX_VKEY (3 * NUM_VKEYS - 1) // first NUM_VKEYS entries contain vkeys, then vkeys for E0 and E1 #define E0 NUM_VKEYS #define E1 (NUM_VKEYS * 2) static char g_key_state[3 * NUM_VKEYS] = {}; static int16_t g_key_mapping[3 * NUM_VKEYS] = {}; static void process_keyboard_input(LPRAWINPUT raw_input) { //LPRAWKEYBOARD raw_keyboard = &(raw_input->data.keyboard); //int vkey = raw_keyboard->VKey; //int vkey = raw_keyboard->VKey; //int flags = raw_keyboard->Flags; // int vkey = raw_input->data.keyboard.VKey; int flags = raw_input->data.keyboard.Flags; int make_code = raw_input->data.keyboard.MakeCode; // special cases if (make_code == 54) { // for some reason, flags is not set properly for right shift vkey = VK_SHIFT + E0; } else if (flags & RI_KEY_E0) { vkey += NUM_VKEYS; } else if (flags & RI_KEY_E1) { vkey += 2 * NUM_VKEYS; } fs_log("vkey...: %d %d %d flags: %d\n", vkey, raw_input->data.keyboard.MakeCode, raw_input->data.keyboard.ExtraInformation, flags); if (flags & RI_KEY_BREAK) { // key is up if (vkey <= MAX_VKEY && g_key_state[vkey]) { g_key_state[vkey] = 0; fs_ml_input_event *event = fs_ml_input_event_alloc(); event->type = FS_ML_INPUT_EVENT_KEY_UP; event->key.code = g_key_mapping[vkey]; event->key.mod = 0; fs_ml_input_event_post(event); } } else { // key is down if (vkey <= MAX_VKEY && !g_key_state[vkey]) { //fs_log("down\n"); g_key_state[vkey] = 1; fs_ml_input_event *event = fs_ml_input_event_alloc(); event->type = FS_ML_INPUT_EVENT_KEY_DOWN; event->key.code = g_key_mapping[vkey]; event->key.mod = 0; //fs_log("code: %d\n", event->key.code); fs_ml_input_event_post(event); } } } static void process_input(void *data) { //fs_log("process_input\n"); LPRAWINPUT raw_input = data; if (raw_input->header.dwType == RIM_TYPEMOUSE) { process_mouse_input(raw_input); } else if (raw_input->header.dwType == RIM_TYPEKEYBOARD) { process_keyboard_input(raw_input); } } #define RAW_INPUT_MAX_SIZE 1024 static unsigned char *g_raw_input_data[RAW_INPUT_MAX_SIZE]; static LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) { //fs_log("WndProc %d\n", message); //static HGLRC hRC; //rendering context //static HDC hDC; //device context HRAWINPUT raw_input_handle; switch (message) { case WM_CREATE: g_hdc = GetDC(hwnd); //get the device context for window if (g_hdc == NULL) { fs_log("could not get window dc\n"); } setup_pixel_format(g_hdc); g_hrc = wglCreateContext(g_hdc); //create rendering context if (g_hrc == NULL) { fs_log("could not create wgl context\n"); } //make rendering context current if (!wglMakeCurrent(g_hdc, g_hrc)) { fs_log("could not set current wgl context in main thread\n"); } break; case WM_DESTROY: wglMakeCurrent(g_hdc, NULL); //deselect rendering context wglDeleteContext(g_hrc); //delete rendering context PostQuitMessage(0); //send wm_quit break; case WM_ERASEBKGND: break; case WM_INPUT: raw_input_handle = (HRAWINPUT) lparam; /* unsigned int size; if (GetRawInputData(raw_input_handle, RID_INPUT, NULL, &size, sizeof(RAWINPUTHEADER)) != -1) { void *data = malloc(size); if (GetRawInputData(raw_input_handle, RID_INPUT, data, &size, sizeof(RAWINPUTHEADER)) != -1) { process_input(data); } free(data); } */ unsigned int size = RAW_INPUT_MAX_SIZE; if (GetRawInputData(raw_input_handle, RID_INPUT, &g_raw_input_data, &size, sizeof(RAWINPUTHEADER)) != -1) { process_input(&g_raw_input_data); } // must call DefWindowProc according to http://msdn.microsoft.com/ // en-us/library/windows/desktop/ms645590(v=vs.85).aspx return DefWindowProc(hwnd, message, wparam, lparam); default: return DefWindowProc(hwnd, message, wparam, lparam); } return 0; } static GCond *g_video_cond = NULL; static GMutex *g_video_mutex = NULL; void fs_ml_wait_vblank() { if (fs_ml_video_vsync()) { g_mutex_lock(g_video_mutex); g_cond_wait(g_video_cond, g_video_mutex); g_mutex_unlock(g_video_mutex); } else { g_cond_signal(g_video_cond); } } //HRESULT (*WaitForVerticalBlank)(DWORD dwFlags, HANDLE hEvent) = NULL; /* void fs_ml_video_frame_ready() { } */ static gpointer video_thread_entry(gpointer data) { fs_log("video thread started\n"); if (!wglMakeCurrent(g_hdc, g_hrc)) { fs_log("could not set current wgl context for video thread\n"); } // this function must be called from the video thread fs_emu_video_init_opengl(); if (fs_ml_video_vsync()) { wglSwapIntervalEXT(1); } else { wglSwapIntervalEXT(0); } while (1) { //g_mutex_lock(g_video_mutex); // ... //fs_log("c\n"); if (!fs_ml_video_vsync()) { // when vsync is off, we wait until a new frame is ready and // then we display it immediately g_mutex_lock(g_video_mutex); g_cond_wait(g_video_cond, g_video_mutex); g_mutex_unlock(g_video_mutex); } fs_emu_render(); //fs_log("d\n"); //g_mutex_unlock(g_video_mutex); //fs_emu_msleep(5); //fs_ml_swap_buffers(); /* if (WaitForVerticalBlank) { fs_log("wait\n"); int result = WaitForVerticalBlank(DDWAITVB_BLOCKBEGIN, NULL); if (result != DD_OK) { fs_log("wait error %d\n", result); } } */ if (fs_ml_video_vsync()) { fs_gl_finish(); SwapBuffers(g_hdc); fs_gl_finish(); g_cond_signal(g_video_cond); } else { SwapBuffers(g_hdc); fs_gl_finish(); } fs_emu_swap_buffers(); } return NULL; } void fs_ml_swap_buffers() { SwapBuffers(g_hdc); } int fs_ml_video_create_window() { /* int WINAPI fs_emu_winmain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow, void (*main_function)()) { */ fs_log("fs_ml_video_create_window\n"); /* HMODULE direct_draw = LoadLibrary("Ddraw.dll"); if (direct_draw) { WaitForVerticalBlank = GetProcAddress(direct_draw, "WaitForVerticalBlank"); fs_log("WaitForVerticalBlank at %p\n", WaitForVerticalBlank); } else { fs_log("could not load Ddraw.dll\n"); } */ g_video_cond = g_cond_new(); g_video_mutex = g_mutex_new(); static TCHAR szWindowClass[] = _T("libfsemu-window"); static TCHAR szTitle[] = _T("fs-emu"); WNDCLASSEX wcex; wcex.cbSize = sizeof(WNDCLASSEX); wcex.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC; wcex.lpfnWndProc = WndProc; wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; wcex.hInstance = g_fs_ml_hinstance; wcex.hIcon = NULL; //LoadIcon(hInstance, MAKEINTRESOURCE(IDI_APPLICATION)); wcex.hCursor = LoadCursor(NULL, IDC_ARROW); wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wcex.lpszMenuName = NULL; wcex.lpszClassName = szWindowClass; wcex.hIconSm = NULL; //LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_APPLICATION)); if (!RegisterClassEx(&wcex)) { MessageBox(NULL, _T("Call to RegisterClassEx failed!"), _T("Win32 Guided Tour"), 0); return 1; } DWORD dwStyle; DWORD dwExStyle; RECT windowRect; windowRect.left = 0; //windowRect.right = 1680; windowRect.right = 1024; windowRect.top = 0; //windowRect.bottom = 1050; windowRect.bottom = 600; int fullscreen = g_fs_emu_video_fullscreen; if (fullscreen) { windowRect.right = get_fullscreen_width(); windowRect.bottom = get_fullscreen_height(); dwExStyle = WS_EX_APPWINDOW; //window extended style dwStyle = WS_POPUP; //windows style ShowCursor(FALSE); //hide mouse pointer } else { dwExStyle = WS_EX_APPWINDOW | WS_EX_WINDOWEDGE; //window extended style dwStyle = WS_OVERLAPPEDWINDOW; //windows style } AdjustWindowRectEx(&windowRect, dwStyle, FALSE, dwExStyle); // The parameters to CreateWindow explained: // szWindowClass: the name of the application // szTitle: the text that appears in the title bar // WS_OVERLAPPEDWINDOW: the type of window to create // CW_USEDEFAULT, CW_USEDEFAULT: initial position (x, y) // 500, 100: initial size (width, length) // NULL: the parent of this window // NULL: this application does not have a menu bar // hInstance: the first parameter from WinMain // NULL: not used in this application HWND hWnd = CreateWindow( szWindowClass, szTitle, dwStyle, CW_USEDEFAULT, CW_USEDEFAULT, windowRect.right - windowRect.left, windowRect.bottom - windowRect.top, NULL, NULL, g_fs_ml_hinstance, NULL ); if (!hWnd) { fs_log("%d\n", GetLastError()); MessageBox(NULL, _T("Call to CreateWindow failed!"), _T("Win32 Guided Tour"), 0); return 1; } ShowWindow(hWnd, g_fs_ml_ncmdshow); UpdateWindow(hWnd); RAWINPUTDEVICE rid; // mice rid.usUsagePage = 0x01; rid.usUsage = 0x02; rid.dwFlags = 0; //rid.dwFlags = RIDEV_INPUTSINK; //rid.dwFlags = RIDEV_NOLEGACY; rid.hwndTarget = hWnd; RegisterRawInputDevices(&rid, 1, sizeof(rid)); // keyboards rid.usUsagePage = 0x01; rid.usUsage = 0x06; rid.dwFlags = 0; //rid.dwFlags = RIDEV_INPUTSINK; //rid.dwFlags = RIDEV_NOLEGACY; rid.hwndTarget = hWnd; RegisterRawInputDevices(&rid, 1, sizeof(rid)); GError *error = NULL; wglMakeCurrent(g_hdc, NULL); //deselect rendering context //GThread *video_thread = g_thread_create(video_thread_entry, NULL, FALSE, &error); if (error != NULL) { fs_log("error starting video thread\n"); // FIXME: ERROR MESSAGE HERE // FIXME: FATAL return 1; } return 0; /* // Main message loop: MSG msg; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return (int) msg.wParam; */ } int fs_ml_main_loop() { // Main message loop: MSG msg; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return (int) msg.wParam; } /* int main(int argc, char *argv[]) { fs_log("heisann\n"); return 0; } */ //UINT WINAPI GetRawInputDeviceList( // __out_opt PRAWINPUTDEVICELIST pRawInputDeviceList, // __inout PUINT puiNumDevices, //__in UINT cbSize //); void fs_ml_error(const char *msg) { fs_log("ERROR: %s\n", msg); int error = GetLastError(); fs_log("GetLastError returned %d (not necessarily related)\n", error); } void fs_ml_fatal(const char *msg) { fs_log("FATAL: %s\n", msg); int error = GetLastError(); fs_log("GetLastError returned %d (not necessarily related)\n", error); fs_log("exiting...\n"); exit(1); } void fs_ml_fatal_malloc() { fs_ml_fatal("could not allocate memory"); } static void list_input_devices() { UINT num_devices; PRAWINPUTDEVICELIST pRawInputDeviceList; if (GetRawInputDeviceList(NULL, &num_devices, sizeof(RAWINPUTDEVICELIST)) != 0) { fs_ml_fatal("GetRawInputDeviceList (count devices) failed "); } if ((pRawInputDeviceList = malloc(sizeof(RAWINPUTDEVICELIST) * num_devices)) == NULL) { fs_ml_fatal_malloc(); } if (GetRawInputDeviceList(pRawInputDeviceList, &num_devices, sizeof(RAWINPUTDEVICELIST)) == -1) { fs_ml_fatal("GetRawInputDeviceList (get devices) failed "); } for (int i = 0; i < num_devices; i++) { fs_log("device index: %d\n", i); fs_log("device type: %d\n", pRawInputDeviceList[i].dwType); char device_name[1024]; unsigned int data_size = 1023; if (GetRawInputDeviceInfo( pRawInputDeviceList[i].hDevice, RIDI_DEVICENAME, &device_name, &data_size) == -1) { fs_ml_error("GetRawInputDeviceInfo (RIDI_DEVICENAME) failed"); continue; } fs_log(" name: %s\n", device_name); RID_DEVICE_INFO device_info; device_info.cbSize = sizeof(RID_DEVICE_INFO); data_size = sizeof(RID_DEVICE_INFO); if (GetRawInputDeviceInfo( pRawInputDeviceList[i].hDevice, RIDI_DEVICEINFO, &device_info, &data_size) == -1) { fs_ml_error("GetRawInputDeviceInfo failed"); continue; } //fs_log(" type: %d\n", device_info.dwType); } free(pRawInputDeviceList); } void fs_ml_video_init() { } void fs_ml_input_init() { list_input_devices(); // http://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=VS.85).aspx g_key_mapping[VK_BACK] = FS_ML_KEY_BACKSPACE; g_key_mapping[VK_TAB] = FS_ML_KEY_TAB; g_key_mapping[VK_CLEAR] = FS_ML_KEY_CLEAR; g_key_mapping[VK_RETURN] = FS_ML_KEY_RETURN; // FIXME: RSHIFT g_key_mapping[VK_SHIFT] = FS_ML_KEY_LSHIFT; g_key_mapping[VK_CONTROL] = FS_ML_KEY_LCTRL; g_key_mapping[E0 + VK_CONTROL] = FS_ML_KEY_RCTRL; g_key_mapping[VK_MENU] = FS_ML_KEY_LALT; g_key_mapping[VK_PAUSE] = FS_ML_KEY_PAUSE; // ... FIXME ... g_key_mapping[E0 + VK_LEFT] = FS_ML_KEY_LEFT; g_key_mapping[E0 + VK_UP] = FS_ML_KEY_UP; g_key_mapping[E0 + VK_RIGHT] = FS_ML_KEY_RIGHT; g_key_mapping[E0 + VK_DOWN] = FS_ML_KEY_DOWN; // ... FIXME ... g_key_mapping[VK_F1] = FS_ML_KEY_F1; g_key_mapping[VK_F2] = FS_ML_KEY_F2; g_key_mapping[VK_F3] = FS_ML_KEY_F3; g_key_mapping[VK_F4] = FS_ML_KEY_F4; g_key_mapping[VK_F5] = FS_ML_KEY_F5; g_key_mapping[VK_F6] = FS_ML_KEY_F6; g_key_mapping[VK_F7] = FS_ML_KEY_F7; g_key_mapping[VK_F8] = FS_ML_KEY_F8; g_key_mapping[VK_F9] = FS_ML_KEY_F9; g_key_mapping[VK_F10] = FS_ML_KEY_F10; g_key_mapping[VK_F11] = FS_ML_KEY_F11; g_key_mapping[VK_F12] = FS_ML_KEY_F12; } #endif // WITH_VIDEO_WINDOWS #endif // WINDOWS fs-uae-2.2.3+dfsg/libfsemu/src/base.c0000644000175000017500000003754212162366654017542 0ustar glaubitzglaubitz#ifdef WINDOWS //#define WIN32_LEAN_AND_MEAN #include #include #else #include #include #include #include #include #include #include #endif #ifdef MACOSX #include #include #endif #include #include #include #include #include #if defined(WINDOWS) #elif defined(MACOSX) //#define HAVE_CLOCK_GETTIME //#define CLOCK_MONOTONIC #include #else #define HAVE_CLOCK_GETTIME #define HAVE_CLOCK_MONOTONIC #include #endif #ifdef USE_GLIB // FIXME g_atomic_int_get / g_atomic_int_set #include #endif // some function adapted from glib const char *fs_get_user_config_dir(void) { #if defined(MACOSX) static char *path = NULL; if (path == NULL) { path = g_build_filename(g_get_home_dir(), "Library", "Preferences", NULL); } return path; #elif defined(USE_GLIB) return g_get_user_config_dir(); #else // FIXME return ""; #endif } const char *fs_get_user_data_dir(void) { #ifdef USE_GLIB return g_get_user_data_dir(); #else // FIXME return ""; #endif #if 0 gchar *data_dir; G_LOCK (g_utils_global); if (!g_user_data_dir) { #ifdef G_OS_WIN32 data_dir = get_special_folder (CSIDL_LOCAL_APPDATA); #else data_dir = (gchar *) g_getenv ("XDG_DATA_HOME"); if (data_dir && data_dir[0]) data_dir = g_strdup (data_dir); #endif if (!data_dir || !data_dir[0]) { g_get_any_init (); if (g_home_dir) data_dir = g_build_filename (g_home_dir, ".local", "share", NULL); else data_dir = g_build_filename (g_tmp_dir, g_user_name, ".local", "share", NULL); } g_user_data_dir = data_dir; } else data_dir = g_user_data_dir; G_UNLOCK (g_utils_global); return data_dir; #endif } char *fs_get_data_file(const char *relative) { //printf("fs_get_data_file<%s>\n", relative); static int initialized = 0; static char executable_dir[PATH_MAX]; if (!initialized) { fs_get_application_exe_dir(executable_dir, PATH_MAX); initialized = 1; } char *path; path = fs_path_join(executable_dir, "share", relative, NULL); if (fs_path_exists(path)) { return path; } free(path); path = fs_path_join(executable_dir, "..", "share", relative, NULL); if (fs_path_exists(path)) { return path; } free(path); #ifdef MACOSX char buffer[FS_PATH_MAX]; fs_get_application_exe_dir(buffer, FS_PATH_MAX); char *test; path = g_build_filename(buffer, "..", "Resources", relative, NULL); if (fs_path_exists(path)) { return path; } free(path); #endif #ifdef USE_GLIB const char *user_dir = g_get_user_data_dir(); path = fs_path_join(user_dir, relative, NULL); if (fs_path_exists(path)) { return path; } free(path); const char * const *dirs = g_get_system_data_dirs(); while(*dirs) { path = fs_path_join(*dirs, relative, NULL); if (fs_path_exists(path)) { return path; } free(path); dirs++; } #endif return NULL; } char *fs_get_program_data_file(const char *relative) { char *relative2 = fs_path_join(fs_get_prgname(), relative, NULL); char *result = fs_get_data_file(relative2); free(relative2); return result; } /* void fs_time_val_add(fs_time_val *tv, int usec) { int64_t utime = ((int64_t) tv->tv_sec) * 1000000 + tv->tv_usec; utime += usec; tv->tv_sec = utime / 1000000; tv->tv_usec = utime % 1000000; } */ void fs_get_current_time(fs_time_val *result) { #ifndef WINDOWS struct timeval r; if (result == NULL) { return; } /*this is required on alpha, there the timeval structs are int's not longs and a cast only would fail horribly*/ gettimeofday(&r, NULL); result->tv_sec = r.tv_sec; result->tv_usec = r.tv_usec; #else FILETIME ft; uint64_t time64; if (result == NULL) { return; } GetSystemTimeAsFileTime(&ft); memmove(&time64, &ft, sizeof(FILETIME)); /* Convert from 100s of nanoseconds since 1601-01-01 * to Unix epoch. Yes, this is Y2038 unsafe. */ //time64 -= G_GINT64_CONSTANT (116444736000000000); time64 -= ((int64_t) 116444736) * ((int64_t) 1000000000); time64 /= 10; result->tv_sec = time64 / 1000000; result->tv_usec = time64 % 1000000; #endif } int64_t fs_get_real_time(void) { fs_time_val tv; fs_get_current_time(&tv); return (((int64_t) tv.tv_sec) * 1000000) + tv.tv_usec; } #ifdef WINDOWS static ULONGLONG (*g_GetTickCount64)(void) = NULL; static uint32_t g_win32_tick_epoch = 0; //G_GNUC_INTERNAL void fs_clock_win32_init(void) { HMODULE kernel32; g_GetTickCount64 = NULL; kernel32 = GetModuleHandle("KERNEL32.DLL"); if (kernel32 != NULL) g_GetTickCount64 = (void *) GetProcAddress(kernel32, "GetTickCount64"); g_win32_tick_epoch = ((uint32_t) GetTickCount()) >> 31; } #endif /** * g_get_monotonic_time: * * Queries the system monotonic time, if available. * * On POSIX systems with clock_gettime() and CLOCK_MONOTONIC this call * is a very shallow wrapper for that. Otherwise, we make a best effort * that probably involves returning the wall clock time (with at least * microsecond accuracy, subject to the limitations of the OS kernel). * * It's important to note that POSIX CLOCK_MONOTONIC does * not count time spent while the machine is suspended. * * On Windows, "limitations of the OS kernel" is a rather substantial * statement. Depending on the configuration of the system, the wall * clock time is updated as infrequently as 64 times a second (which * is approximately every 16ms). Also, on XP (but not on Vista or later) * the monotonic clock is locally monotonic, but may differ in exact * value between processes due to timer wrap handling. * * Returns: the monotonic time, in microseconds * * Since: 2.28 **/ int64_t fs_get_monotonic_time(void) { //return g_get_monotonic_time(); #ifdef HAVE_CLOCK_GETTIME /* librt clock_gettime() is our first choice */ struct timespec ts; #ifdef HAVE_CLOCK_MONOTONIC clock_gettime (CLOCK_MONOTONIC, &ts); #else clock_gettime (CLOCK_REALTIME, &ts); #endif /* In theory monotonic time can have any epoch. * * glib presently assumes the following: * * 1) The epoch comes some time after the birth of Jesus of Nazareth, but * not more than 10000 years later. * * 2) The current time also falls sometime within this range. * * These two reasonable assumptions leave us with a maximum deviation from * the epoch of 10000 years, or 315569520000000000 seconds. * * If we restrict ourselves to this range then the number of microseconds * will always fit well inside the constraints of a int64 (by a factor of * about 29). * * If you actually hit the following assertion, probably you should file a * bug against your operating system for being excessively silly. **/ #if 0 g_assert (G_GINT64_CONSTANT (-315569520000000000) < ts.tv_sec && ts.tv_sec < G_GINT64_CONSTANT (315569520000000000)); #endif return (((int64_t) ts.tv_sec) * 1000000) + (ts.tv_nsec / 1000); #elif defined (WINDOWS) uint64_t ticks; uint32_t ticks32; /* There are four sources for the monotonic time on Windows: * * Three are based on a (1 msec accuracy, but only read periodically) clock chip: * - GetTickCount (GTC) * 32bit msec counter, updated each ~15msec, wraps in ~50 days * - GetTickCount64 (GTC64) * Same as GetTickCount, but extended to 64bit, so no wrap * Only availible in Vista or later * - timeGetTime (TGT) * similar to GetTickCount by default: 15msec, 50 day wrap. * available in winmm.dll (thus known as the multimedia timers) * However apps can raise the system timer clock frequency using timeBeginPeriod() * increasing the accuracy up to 1 msec, at a cost in general system performance * and battery use. * * One is based on high precision clocks: * - QueryPrecisionCounter (QPC) * This has much higher accuracy, but is not guaranteed monotonic, and * has lots of complications like clock jumps and different times on different * CPUs. It also has lower long term accuracy (i.e. it will drift compared to * the low precision clocks. * * Additionally, the precision available in the timer-based wakeup such as * MsgWaitForMultipleObjectsEx (which is what the mainloop is based on) is based * on the TGT resolution, so by default it is ~15msec, but can be increased by apps. * * The QPC timer has too many issues to be used as is. The only way it could be used * is to use it to interpolate the lower precision clocks. Firefox does something like * this: * https://bugzilla.mozilla.org/show_bug.cgi?id=363258 * * However this seems quite complicated, so we're not doing this right now. * * The approach we take instead is to use the TGT timer, extending it to 64bit * either by using the GTC64 value, or if that is not availible, a process local * time epoch that we increment when we detect a timer wrap (assumes that we read * the time at least once every 50 days). * * This means that: * - We have a globally consistent monotonic clock on Vista and later * - We have a locally monotonic clock on XP * - Apps that need higher precision in timeouts and clock reads can call * timeBeginPeriod() to increase it as much as they want */ if (g_GetTickCount64 != NULL) { uint32_t ticks_as_32bit; ticks = g_GetTickCount64(); ticks32 = timeGetTime(); /* GTC64 and TGT are sampled at different times, however they * have the same base and source (msecs since system boot). * They can differ by as much as -16 to +16 msecs. * We can't just inject the low bits into the 64bit counter * as one of the counters can have wrapped in 32bit space and * the other not. Instead we calculate the signed difference * in 32bit space and apply that difference to the 64bit counter. */ ticks_as_32bit = (uint32_t) ticks; /* We could do some 2's complement hack, but we play it safe */ if (ticks32 - ticks_as_32bit <= INT32_MAX) ticks += ticks32 - ticks_as_32bit; else ticks -= ticks_as_32bit - ticks32; } else { uint32_t epoch; epoch = g_atomic_int_get(&g_win32_tick_epoch); /* Must read ticks after the epoch. Then we're guaranteed * that the ticks value we read is higher or equal to any * previous ones that lead to the writing of the epoch. */ ticks32 = timeGetTime(); /* We store the MSB of the current time as the LSB * of the epoch. Comparing these bits lets us detect when * the 32bit counter has wrapped so we can increase the * epoch. * * This will work as long as this function is called at * least once every ~24 days, which is half the wrap time * of a 32bit msec counter. I think this is pretty likely. * * Note that g_win32_tick_epoch is a process local state, * so the monotonic clock will not be the same between * processes. */ if ((ticks32 >> 31) != (epoch & 1)) { epoch++; g_atomic_int_set(&g_win32_tick_epoch, epoch); } ticks = (uint64_t) ticks32 | ((uint64_t) epoch) << 31; } return ticks * 1000; #else /* !HAVE_CLOCK_GETTIME && ! G_OS_WIN32*/ fs_time_val tv; fs_get_current_time(&tv); return (((int64_t) tv.tv_sec) * 1000000) + tv.tv_usec; #endif } static char** g_argv = NULL; static int g_argc = 0; void fs_set_argv(int argc, char* argv[]) { g_argc = argc; g_argv = argv; } char *find_program_in_path(const char *prog) { if (prog[0] == '/') { // absolute path return fs_strdup(prog); } const char* env_path = getenv("PATH"); if (env_path == NULL) { return NULL; } char *result = NULL; char **dirs = fs_strsplit(env_path, ":", 0); char **dir = dirs; while(*dir) { //printf("dir %s\n", *dir); if (*dir) { char *abs = fs_path_join(*dir, prog, NULL); if (fs_path_is_file(abs)) { result = abs; break; } free(abs); } dir++; } fs_strfreev(dirs); return result; } int fs_get_application_exe_path(char *buffer, int size) { //fs_log("fs_get_application_exe_path\n"); // Mac OS X: _NSGetExecutablePath() (man 3 dyld) // Linux: readlink /proc/self/exe // Solaris: getexecname() // FreeBSD: sysctl CTL_KERN KERN_PROC KERN_PROC_PATHNAME -1 // BSD with procfs: readlink /proc/curproc/file // Windows: GetModuleFileName() with hModule = NULL #if defined(WINDOWS) // FIXME: SHOULD HANDLE UTF8 <--> MBCS.. wchar_t * temp_buf = malloc(sizeof(wchar_t) * PATH_MAX); int len = GetModuleFileNameW(NULL, temp_buf, PATH_MAX); int result = WideCharToMultiByte(CP_UTF8, 0, temp_buf, len, buffer, size, NULL, NULL); free(temp_buf); if (result == 0) { return 0; } return 1; #elif defined(MACOSX) //fs_log("fs_get_application_exe_path for Mac OS X\n"); unsigned int usize = size; int result = _NSGetExecutablePath(buffer, &usize); if (result == 0) { return 1; } else { fs_log("_NSGetExecutablePath failed with result %d\n", result); buffer[0] = '\0'; return 0; } #else if (g_argc == 0) { buffer[0] = '\0'; return 0; } char* result = find_program_in_path(g_argv[0]); if (result == NULL) { buffer[0] = '\0'; return 0; } //fs_log("argv[0]: %s result: %s\n", g_argv[0], result); if (result[0] != '/') { char* old_result = result; char* current_dir = fs_get_current_dir(); result = fs_path_join(current_dir, old_result, NULL); //fs_log("new result: %s\n", result); free(old_result); free(current_dir); } if (strlen(result) > size - 1) { buffer[0] = '\0'; return 0; } // we have already checked that the buffer is big enough strcpy(buffer, result); free(result); return 1; #endif //fs_log("WARNING: fs_get_application_exe_path failed\n"); //buffer[0] = '\0'; //return 0; } int fs_get_application_exe_dir(char *buffer, int size) { int result = fs_get_application_exe_path(buffer, size); if (result == 0) { return 0; } int pos = strlen(buffer) - 1; while (pos >= 0) { if (buffer[pos] == '\\' || buffer[pos] == '/') { buffer[pos] = '\0'; return 1; } pos -= 1; } return 0; } void *fs_malloc0(size_t n_bytes) { void *data = malloc(n_bytes); if (data) { memset(data, 0, n_bytes); } return data; } #ifndef USE_GLIB static char *g_prgname = "unnamed-program"; static char *g_application_name = "Unnamed Program"; #endif const char *fs_get_application_name(void) { #ifdef USE_GLIB return g_get_application_name(); #else return g_application_name; #endif } void fs_set_application_name(const char *application_name) { #ifdef USE_GLIB g_set_application_name(application_name); #else g_application_name = fs_strdup(application_name); #endif } const char *fs_get_prgname(void) { #ifdef USE_GLIB return g_get_prgname(); #else return g_prgname; #endif } void fs_set_prgname(const char *prgname) { #ifdef USE_GLIB g_set_prgname(prgname); #else g_prgname = fs_strdup(prgname); #endif } fs-uae-2.2.3+dfsg/libfsemu/src/hashtable.c0000644000175000017500000005314112162366654020554 0ustar glaubitzglaubitz/* GLIB - Library of useful routines for C programming * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ /* * Modified by the GLib Team and others 1997-2000. See the AUTHORS * file for a list of people on the GLib Team. See the ChangeLog * files for a list of changes. These files are distributed with * GLib at ftp://ftp.gtk.org/pub/gtk/. */ /* * MT safe */ //#include "config.h" #include /* memset */ #include #include #include #include #include unsigned int fs_direct_hash (const void *v) { return FS_POINTER_TO_UINT(v); } #define HASH_TABLE_MIN_SHIFT 3 /* 1 << 3 == 8 buckets */ #define UNUSED_HASH_VALUE 0 #define TOMBSTONE_HASH_VALUE 1 #define HASH_IS_UNUSED(h_) ((h_) == UNUSED_HASH_VALUE) #define HASH_IS_TOMBSTONE(h_) ((h_) == TOMBSTONE_HASH_VALUE) #define HASH_IS_REAL(h_) ((h_) >= 2) #define g_return_if_fail(a) if (!(a)) return; #define g_return_val_if_fail(a, b) if (!(a)) return b; struct _fs_hash_table { int size; int mod; unsigned int mask; int nnodes; int noccupied; /* nnodes + tombstones */ void * *keys; unsigned int *hashes; void * *values; fs_hash_func hash_func; fs_equal_func key_equal_func; int ref_count; #ifndef G_DISABLE_ASSERT /* * Tracks the structure of the hash table, not its contents: is only * incremented when a node is added or removed (is not incremented * when the key or data of a node is modified). */ int version; #endif fs_destroy_notify key_destroy_func; fs_destroy_notify value_destroy_func; }; typedef struct { fs_hash_table *hash_table; void * dummy1; void * dummy2; int position; int dummy3; int version; } RealIter; static const int prime_mod[] = { 1, /* For 1 << 0 */ 2, 3, 7, 13, 31, 61, 127, 251, 509, 1021, 2039, 4093, 8191, 16381, 32749, 65521, /* For 1 << 16 */ 131071, 262139, 524287, 1048573, 2097143, 4194301, 8388593, 16777213, 33554393, 67108859, 134217689, 268435399, 536870909, 1073741789, 2147483647 /* For 1 << 31 */ }; static void fs_hash_table_set_shift(fs_hash_table *hash_table, int shift) { int i; unsigned int mask = 0; hash_table->size = 1 << shift; hash_table->mod = prime_mod[shift]; for (i = 0; i < shift; i++) { mask <<= 1; mask |= 1; } hash_table->mask = mask; } static int fs_hash_table_find_closest_shift(int n) { int i; for (i = 0; n; i++) n >>= 1; return i; } static void fs_hash_table_set_shift_from_size(fs_hash_table *hash_table, int size) { int shift; shift = fs_hash_table_find_closest_shift(size); shift = MAX (shift, HASH_TABLE_MIN_SHIFT); fs_hash_table_set_shift(hash_table, shift); } static inline unsigned int fs_hash_table_lookup_node(fs_hash_table *hash_table, const void * key, unsigned int *hash_return) { unsigned int node_index; unsigned int node_hash; unsigned int hash_value; unsigned int first_tombstone = 0; int have_tombstone = FALSE; unsigned int step = 0; hash_value = hash_table->hash_func(key); if (FS_UNLIKELY(!HASH_IS_REAL (hash_value))) hash_value = 2; *hash_return = hash_value; node_index = hash_value % hash_table->mod; node_hash = hash_table->hashes[node_index]; while (!HASH_IS_UNUSED (node_hash)) { /* We first check if our full hash values * are equal so we can avoid calling the full-blown * key equality function in most cases. */ if (node_hash == hash_value) { void * node_key = hash_table->keys[node_index]; if (hash_table->key_equal_func) { if (hash_table->key_equal_func(node_key, key)) return node_index; } else if (node_key == key) { return node_index; } } else if (HASH_IS_TOMBSTONE (node_hash) && !have_tombstone) { first_tombstone = node_index; have_tombstone = TRUE; } step++; node_index += step; node_index &= hash_table->mask; node_hash = hash_table->hashes[node_index]; } if (have_tombstone) return first_tombstone; return node_index; } static void fs_hash_table_remove_node(fs_hash_table *hash_table, int i, int notify) { void * key; void * value; key = hash_table->keys[i]; value = hash_table->values[i]; /* Erect tombstone */ hash_table->hashes[i] = TOMBSTONE_HASH_VALUE; /* Be GC friendly */ hash_table->keys[i] = NULL; hash_table->values[i] = NULL; hash_table->nnodes--; if (notify && hash_table->key_destroy_func) hash_table->key_destroy_func(key); if (notify && hash_table->value_destroy_func) hash_table->value_destroy_func(value); } static void fs_hash_table_remove_all_nodes(fs_hash_table *hash_table, int notify) { int i; void * key; void * value; hash_table->nnodes = 0; hash_table->noccupied = 0; if (!notify || (hash_table->key_destroy_func == NULL && hash_table->value_destroy_func == NULL )) { memset(hash_table->hashes, 0, hash_table->size * sizeof(unsigned int)); memset(hash_table->keys, 0, hash_table->size * sizeof(void *)); memset(hash_table->values, 0, hash_table->size * sizeof(void *)); return; } for (i = 0; i < hash_table->size; i++) { if (HASH_IS_REAL (hash_table->hashes[i])) { key = hash_table->keys[i]; value = hash_table->values[i]; hash_table->hashes[i] = UNUSED_HASH_VALUE; hash_table->keys[i] = NULL; hash_table->values[i] = NULL; if (hash_table->key_destroy_func != NULL ) hash_table->key_destroy_func(key); if (hash_table->value_destroy_func != NULL ) hash_table->value_destroy_func(value); } else if (HASH_IS_TOMBSTONE (hash_table->hashes[i])) { hash_table->hashes[i] = UNUSED_HASH_VALUE; } } } static void fs_hash_table_resize(fs_hash_table *hash_table) { void * *new_keys; void * *new_values; unsigned int *new_hashes; int old_size; int i; old_size = hash_table->size; fs_hash_table_set_shift_from_size(hash_table, hash_table->nnodes * 2); new_keys = fs_new0 (void *, hash_table->size); if (hash_table->keys == hash_table->values) new_values = new_keys; else new_values = fs_new0 (void *, hash_table->size); new_hashes = fs_new0 (unsigned int, hash_table->size); for (i = 0; i < old_size; i++) { unsigned int node_hash = hash_table->hashes[i]; unsigned int hash_val; unsigned int step = 0; if (!HASH_IS_REAL (node_hash)) continue; hash_val = node_hash % hash_table->mod; while (!HASH_IS_UNUSED (new_hashes[hash_val])) { step++; hash_val += step; hash_val &= hash_table->mask; } new_hashes[hash_val] = hash_table->hashes[i]; new_keys[hash_val] = hash_table->keys[i]; new_values[hash_val] = hash_table->values[i]; } if (hash_table->keys != hash_table->values) free(hash_table->values); free(hash_table->keys); free(hash_table->hashes); hash_table->keys = new_keys; hash_table->values = new_values; hash_table->hashes = new_hashes; hash_table->noccupied = hash_table->nnodes; } static inline void fs_hash_table_maybe_resize(fs_hash_table *hash_table) { int noccupied = hash_table->noccupied; int size = hash_table->size; if ((size > hash_table->nnodes * 4 && size > 1 << HASH_TABLE_MIN_SHIFT) || (size <= noccupied + (noccupied / 16))) fs_hash_table_resize(hash_table); } fs_hash_table* fs_hash_table_new(fs_hash_func hash_func, fs_equal_func key_equal_func) { return fs_hash_table_new_full(hash_func, key_equal_func, NULL, NULL ); } fs_hash_table* fs_hash_table_new_full(fs_hash_func hash_func, fs_equal_func key_equal_func, fs_destroy_notify key_destroy_func, fs_destroy_notify value_destroy_func) { fs_hash_table *hash_table; hash_table = fs_new(fs_hash_table, 1); fs_hash_table_set_shift(hash_table, HASH_TABLE_MIN_SHIFT); hash_table->nnodes = 0; hash_table->noccupied = 0; hash_table->hash_func = hash_func ? hash_func : fs_direct_hash; hash_table->key_equal_func = key_equal_func; hash_table->ref_count = 1; #ifndef G_DISABLE_ASSERT hash_table->version = 0; #endif hash_table->key_destroy_func = key_destroy_func; hash_table->value_destroy_func = value_destroy_func; hash_table->keys = fs_new0 (void *, hash_table->size); hash_table->values = hash_table->keys; hash_table->hashes = fs_new0 (unsigned int, hash_table->size); return hash_table; } void fs_hash_table_iter_init(fs_hash_table_iter *iter, fs_hash_table *hash_table) { RealIter *ri = (RealIter *) iter; g_return_if_fail(iter != NULL); g_return_if_fail(hash_table != NULL); ri->hash_table = hash_table; ri->position = -1; #ifndef G_DISABLE_ASSERT ri->version = hash_table->version; #endif } int fs_hash_table_iter_next(fs_hash_table_iter *iter, void * *key, void * *value) { RealIter *ri = (RealIter *) iter; int position; g_return_val_if_fail(iter != NULL, FALSE); #ifndef G_DISABLE_ASSERT g_return_val_if_fail(ri->version == ri->hash_table->version, FALSE); #endif g_return_val_if_fail(ri->position < ri->hash_table->size, FALSE); position = ri->position; do { position++; if (position >= ri->hash_table->size) { ri->position = position; return FALSE; } } while (!HASH_IS_REAL (ri->hash_table->hashes[position])); if (key != NULL ) *key = ri->hash_table->keys[position]; if (value != NULL ) *value = ri->hash_table->values[position]; ri->position = position; return TRUE; } fs_hash_table * fs_hash_table_iter_get_hash_table(fs_hash_table_iter *iter) { g_return_val_if_fail(iter != NULL, NULL); return ((RealIter *) iter)->hash_table; } static void iter_remove_or_steal(RealIter *ri, int notify) { g_return_if_fail(ri != NULL); #ifndef G_DISABLE_ASSERT g_return_if_fail(ri->version == ri->hash_table->version); #endif g_return_if_fail(ri->position >= 0); g_return_if_fail(ri->position < ri->hash_table->size); fs_hash_table_remove_node(ri->hash_table, ri->position, notify); #ifndef G_DISABLE_ASSERT ri->version++; ri->hash_table->version++; #endif } void fs_hash_table_iter_remove(fs_hash_table_iter *iter) { iter_remove_or_steal((RealIter *) iter, TRUE); } static void fs_hash_table_insert_node(fs_hash_table *hash_table, unsigned int node_index, unsigned int key_hash, void * key, void * value, int keep_new_key, int reusing_key) { unsigned int old_hash; void * old_key; void * old_value; if (FS_UNLIKELY(hash_table->keys == hash_table->values && key != value)) hash_table->values = fs_memdup(hash_table->keys, sizeof(void *) * hash_table->size); old_hash = hash_table->hashes[node_index]; old_key = hash_table->keys[node_index]; old_value = hash_table->values[node_index]; if (HASH_IS_REAL (old_hash)) { if (keep_new_key) hash_table->keys[node_index] = key; hash_table->values[node_index] = value; } else { hash_table->keys[node_index] = key; hash_table->values[node_index] = value; hash_table->hashes[node_index] = key_hash; hash_table->nnodes++; if (HASH_IS_UNUSED (old_hash)) { /* We replaced an empty node, and not a tombstone */ hash_table->noccupied++; fs_hash_table_maybe_resize(hash_table); } #ifndef G_DISABLE_ASSERT hash_table->version++; #endif } if (HASH_IS_REAL (old_hash)) { if (hash_table->key_destroy_func && !reusing_key) hash_table->key_destroy_func(keep_new_key ? old_key : key); if (hash_table->value_destroy_func) hash_table->value_destroy_func(old_value); } } void fs_hash_table_iter_replace(fs_hash_table_iter *iter, void * value) { RealIter *ri; unsigned int node_hash; void * key; ri = (RealIter *) iter; g_return_if_fail(ri != NULL); #ifndef G_DISABLE_ASSERT g_return_if_fail(ri->version == ri->hash_table->version); #endif g_return_if_fail(ri->position >= 0); g_return_if_fail(ri->position < ri->hash_table->size); node_hash = ri->hash_table->hashes[ri->position]; key = ri->hash_table->keys[ri->position]; fs_hash_table_insert_node(ri->hash_table, ri->position, node_hash, key, value, TRUE, TRUE); #ifndef G_DISABLE_ASSERT ri->version++; ri->hash_table->version++; #endif } void fs_hash_table_iter_steal(fs_hash_table_iter *iter) { iter_remove_or_steal((RealIter *) iter, FALSE); } #if 0 fs_hash_table* fs_hash_table_ref(fs_hash_table *hash_table) { g_return_val_if_fail(hash_table != NULL, NULL); g_atomic_int_inc(&hash_table->ref_count); return hash_table; } void fs_hash_table_unref(fs_hash_table *hash_table) { g_return_if_fail(hash_table != NULL); if (g_atomic_int_dec_and_test(&hash_table->ref_count)) { fs_hash_table_remove_all_nodes(hash_table, TRUE); if (hash_table->keys != hash_table->values) free(hash_table->values); free(hash_table->keys); free(hash_table->hashes); g_slice_free(fs_hash_table, hash_table); } } void fs_hash_table_destroy(fs_hash_table *hash_table) { g_return_if_fail(hash_table != NULL); fs_hash_table_remove_all(hash_table); fs_hash_table_unref(hash_table); } #endif void fs_hash_table_destroy(fs_hash_table *hash_table) { g_return_if_fail(hash_table != NULL); fs_hash_table_remove_all(hash_table); fs_hash_table_remove_all_nodes(hash_table, TRUE); if (hash_table->keys != hash_table->values) free(hash_table->values); free(hash_table->keys); free(hash_table->hashes); free(hash_table); } void *fs_hash_table_lookup(fs_hash_table *hash_table, const void *key) { unsigned int node_index; unsigned int node_hash; g_return_val_if_fail(hash_table != NULL, NULL); node_index = fs_hash_table_lookup_node(hash_table, key, &node_hash); return HASH_IS_REAL (hash_table->hashes[node_index]) ? hash_table->values[node_index] : NULL ; } int fs_hash_table_lookup_extended(fs_hash_table *hash_table, const void * lookup_key, void * *orig_key, void * *value) { unsigned int node_index; unsigned int node_hash; g_return_val_if_fail(hash_table != NULL, FALSE); node_index = fs_hash_table_lookup_node(hash_table, lookup_key, &node_hash); if (!HASH_IS_REAL (hash_table->hashes[node_index])) return FALSE; if (orig_key) *orig_key = hash_table->keys[node_index]; if (value) *value = hash_table->values[node_index]; return TRUE; } static void fs_hash_table_insert_internal(fs_hash_table *hash_table, void * key, void * value, int keep_new_key) { unsigned int key_hash; unsigned int node_index; g_return_if_fail(hash_table != NULL); node_index = fs_hash_table_lookup_node(hash_table, key, &key_hash); fs_hash_table_insert_node(hash_table, node_index, key_hash, key, value, keep_new_key, FALSE); } void fs_hash_table_insert(fs_hash_table *hash_table, void * key, void * value) { fs_hash_table_insert_internal(hash_table, key, value, FALSE); } void fs_hash_table_replace(fs_hash_table *hash_table, void * key, void * value) { fs_hash_table_insert_internal(hash_table, key, value, TRUE); } static int fs_hash_table_remove_internal(fs_hash_table *hash_table, const void * key, int notify) { unsigned int node_index; unsigned int node_hash; g_return_val_if_fail(hash_table != NULL, FALSE); node_index = fs_hash_table_lookup_node(hash_table, key, &node_hash); if (!HASH_IS_REAL (hash_table->hashes[node_index])) return FALSE; fs_hash_table_remove_node(hash_table, node_index, notify); fs_hash_table_maybe_resize(hash_table); #ifndef G_DISABLE_ASSERT hash_table->version++; #endif return TRUE; } int fs_hash_table_remove(fs_hash_table *hash_table, const void * key) { return fs_hash_table_remove_internal(hash_table, key, TRUE); } int fs_hash_table_steal(fs_hash_table *hash_table, const void * key) { return fs_hash_table_remove_internal(hash_table, key, FALSE); } void fs_hash_table_remove_all(fs_hash_table *hash_table) { g_return_if_fail(hash_table != NULL); #ifndef G_DISABLE_ASSERT if (hash_table->nnodes != 0) hash_table->version++; #endif fs_hash_table_remove_all_nodes(hash_table, TRUE); fs_hash_table_maybe_resize(hash_table); } void fs_hash_table_steal_all(fs_hash_table *hash_table) { g_return_if_fail(hash_table != NULL); #ifndef G_DISABLE_ASSERT if (hash_table->nnodes != 0) hash_table->version++; #endif fs_hash_table_remove_all_nodes(hash_table, FALSE); fs_hash_table_maybe_resize(hash_table); } static unsigned int fs_hash_table_foreach_remove_or_steal( fs_hash_table *hash_table, fs_hr_func func, void * user_data, int notify) { unsigned int deleted = 0; int i; #ifndef G_DISABLE_ASSERT int version = hash_table->version; #endif for (i = 0; i < hash_table->size; i++) { unsigned int node_hash = hash_table->hashes[i]; void * node_key = hash_table->keys[i]; void * node_value = hash_table->values[i]; if (HASH_IS_REAL (node_hash) && (*func)(node_key, node_value, user_data)) { fs_hash_table_remove_node(hash_table, i, notify); deleted++; } #ifndef G_DISABLE_ASSERT g_return_val_if_fail(version == hash_table->version, 0); #endif } fs_hash_table_maybe_resize(hash_table); #ifndef G_DISABLE_ASSERT if (deleted > 0) hash_table->version++; #endif return deleted; } unsigned int fs_hash_table_foreach_remove(fs_hash_table *hash_table, fs_hr_func func, void * user_data) { g_return_val_if_fail(hash_table != NULL, 0); g_return_val_if_fail(func != NULL, 0); return fs_hash_table_foreach_remove_or_steal(hash_table, func, user_data, TRUE); } unsigned int fs_hash_table_foreach_steal(fs_hash_table *hash_table, fs_hr_func func, void *user_data) { g_return_val_if_fail(hash_table != NULL, 0); g_return_val_if_fail(func != NULL, 0); return fs_hash_table_foreach_remove_or_steal(hash_table, func, user_data, FALSE); } void fs_hash_table_foreach(fs_hash_table *hash_table, fs_h_func func, void *user_data) { int i; #ifndef G_DISABLE_ASSERT int version; #endif g_return_if_fail(hash_table != NULL); g_return_if_fail(func != NULL); #ifndef G_DISABLE_ASSERT version = hash_table->version; #endif for (i = 0; i < hash_table->size; i++) { unsigned int node_hash = hash_table->hashes[i]; void * node_key = hash_table->keys[i]; void * node_value = hash_table->values[i]; if (HASH_IS_REAL (node_hash)) (*func)(node_key, node_value, user_data); #ifndef G_DISABLE_ASSERT g_return_if_fail(version == hash_table->version); #endif } } void *fs_hash_table_find(fs_hash_table *hash_table, fs_hr_func predicate, void * user_data) { int i; #ifndef G_DISABLE_ASSERT int version; #endif int match; g_return_val_if_fail(hash_table != NULL, NULL); g_return_val_if_fail(predicate != NULL, NULL); #ifndef G_DISABLE_ASSERT version = hash_table->version; #endif match = FALSE; for (i = 0; i < hash_table->size; i++) { unsigned int node_hash = hash_table->hashes[i]; void * node_key = hash_table->keys[i]; void * node_value = hash_table->values[i]; if (HASH_IS_REAL (node_hash)) match = predicate(node_key, node_value, user_data); #ifndef G_DISABLE_ASSERT g_return_val_if_fail(version == hash_table->version, NULL); #endif if (match) return node_value; } return NULL ; } unsigned int fs_hash_table_size(fs_hash_table *hash_table) { g_return_val_if_fail(hash_table != NULL, 0); return hash_table->nnodes; } fs_list *fs_hash_table_get_keys(fs_hash_table *hash_table) { int i; fs_list *retval; g_return_val_if_fail(hash_table != NULL, NULL); retval = NULL; for (i = 0; i < hash_table->size; i++) { if (HASH_IS_REAL (hash_table->hashes[i])) retval = fs_list_prepend(retval, hash_table->keys[i]); } return retval; } fs_list *fs_hash_table_get_values(fs_hash_table *hash_table) { int i; fs_list *retval; g_return_val_if_fail(hash_table != NULL, NULL); retval = NULL; for (i = 0; i < hash_table->size; i++) { if (HASH_IS_REAL (hash_table->hashes[i])) retval = fs_list_prepend(retval, hash_table->values[i]); } return retval; } fs-uae-2.2.3+dfsg/libfsemu/src/eventlog.c0000644000175000017500000000475712162366654020455 0ustar glaubitzglaubitz#include #include #include #include #include #include #include #include //#define THREADED_LOGGING static int g_log_events = 0; static fs_mutex *g_mutex = NULL; static fs_list *g_event_list = NULL; //static int64_t g_epoch = 0; static volatile int g_event = 0; static volatile int g_event_count = 0; static FILE *g_event_file; FS_INIT_FUNCTION(module) { g_log_events = getenv("FS_DEBUG_EVENTS") && \ getenv("FS_DEBUG_EVENTS")[0] == '1'; if (g_log_events) { g_mutex = fs_mutex_create(); g_event_file = fs_fopen("events.dat", "wb"); if (g_event_file == NULL) { printf("error opening events.dat for writing\n"); g_log_events = 0; } } } static void flush_events() { fs_list *link = g_event_list; while (link) { fwrite(link->data, 13, 1, g_event_file); free(link->data); fs_list *temp = link; link = link->next; free(temp); } g_event_list = NULL; g_event_count = 0; } void fs_eventlog_new_event(int64_t *event_time, int *event, uint8_t event_type) { FS_INIT(module); if (!g_log_events) { return; } int64_t t; if (event_time == NULL) { t = fs_get_monotonic_time(); } else { if (*event_time == 0) { *event_time = fs_get_monotonic_time(); } t = *event_time; } void *data = malloc(13); *((uint8_t *) data) = event_type; *((int64_t *) data + 5) = t; fs_mutex_lock(g_mutex); int e = ++g_event; *((int32_t *) data + 1) = e; g_event_list = fs_list_append(g_event_list, data); g_event_count++; if (g_event_count > 1000000) { flush_events(); } fs_mutex_unlock(g_mutex); if (event) { *event = e; } } void fs_eventlog_update_event(int64_t event_time, int event, int64_t t1, int64_t t2) { FS_INIT(module); if (!g_log_events) { return; } if (t1 == 0) { t1 = fs_get_monotonic_time(); } if (t2 == 0) { t2 = t1; } t1 = t1 - event_time; t2 = t2 - event_time; void *data = malloc(13); *((uint8_t *) data) = 255; // event update *((int32_t *) data + 1) = event; *((uint32_t *) data + 5) = t1; *((uint32_t *) data + 9) = t2; fs_mutex_lock(g_mutex); g_event_list = fs_list_append(g_event_list, data); g_event_count++; fs_mutex_unlock(g_mutex); } fs-uae-2.2.3+dfsg/libfsemu/src/time.c0000644000175000017500000000655612162366654017567 0ustar glaubitzglaubitz #include #include #include #include #include #include #include #include #ifdef HAVE_UNISTD_H #include #endif #ifdef WINDOWS #else // FIXME: move to autoconf #define HAVE_LOCALTIME_R #define HAVE_GMTIME_R #endif static fs_mutex *g_mutex; struct tm *fs_localtime_r(const time_t *timep, struct tm *result) { #ifdef HAVE_LOCALTIME_R return localtime_r(timep, result); #else // on Windows, localtime is thread-safe due to using // thread-local storage, using mutexes for other // platforms... if (g_mutex) { fs_mutex_lock(g_mutex); } struct tm* tm = localtime(timep); if (tm == NULL) { fs_log("WARNING: localtime - invalid time_t (%d)\n", *timep); } else { *result = *tm; } if (g_mutex) { fs_mutex_unlock(g_mutex); } if (tm == NULL) { return NULL; } return result; #endif } struct tm *fs_gmtime_r(const time_t *timep, struct tm *result) { #ifdef HAVE_GMTIME_R return gmtime_r(timep, result); #else // on Windows, gmtime is thread-safe due to using // thread-local storage, using mutexes for other // platforms... if (g_mutex) { fs_mutex_lock(g_mutex); } struct tm* tm = gmtime(timep); if (tm == NULL) { fs_log("WARNING: gmtime - invalid time_t (%d)\n", *timep); } else { *result = *tm; } if (g_mutex) { fs_mutex_unlock(g_mutex); } if (tm == NULL) { return NULL; } return result; #endif } #ifdef WINDOWS int _putenv(const char *envstring); void _tzset(void); #endif time_t fs_timegm(struct tm *tm) { if (g_mutex) { fs_mutex_lock(g_mutex); } time_t ret; // code adapted from the man page of timegm char *tz; #ifdef WINDOWS tz = getenv("TZ"); if (tz) { tz = fs_strdup_printf("TZ=%s", tz); } else { tz = fs_strdup("TZ="); } _putenv("TZ=GMT"); _tzset(); ret = mktime(tm); _putenv(tz); free(tz); _tzset(); #else tz = getenv("TZ"); setenv("TZ", "", 1); tzset(); ret = mktime(tm); if (tz) { setenv("TZ", tz, 1); } else { unsetenv("TZ"); } tzset(); #endif if (g_mutex) { fs_mutex_unlock(g_mutex); } return ret; } #include int fs_get_local_time_offset(time_t time) { time_t t = time; struct tm lt; void *result1 = fs_localtime_r(&t, <); struct tm gt; void *result2 = fs_gmtime_r(&t, >); gt.tm_isdst = lt.tm_isdst; if (result1 == NULL || result2 == NULL) { return 0; } //fs_log("------------- isdst %d -------------\n", lt.tm_isdst); return t - mktime(>); } static int g_initialized = 0; void fs_time_init(void) { if (g_initialized) { return; } g_initialized = 1; g_mutex = fs_mutex_create(); #ifdef WINDOWS _tzset(); #else tzset(); #endif time_t t = time(NULL); fs_log("current time() is: %d\n", (int) t); struct tm tm; fs_localtime_r(&t, &tm); fs_log("localtime+timegm: %d\n", fs_timegm(&tm)); fs_log("localtime+mktime: %d\n", mktime(&tm)); fs_time_val tv; fs_get_current_time(&tv); fs_log("time of day: %d + (%d / 1000000)\n", tv.tv_sec, tv.tv_usec); fs_log("localtime offset: %d\n", fs_get_local_time_offset(t)); } fs-uae-2.2.3+dfsg/libfsemu/src/log.c0000644000175000017500000000452212162366654017401 0ustar glaubitzglaubitz#include #include #include #include #include #include #include #include #ifdef USE_GLIB #include #include #endif int g_fs_log_stdout = 0; static FILE *g_log_file = NULL; static char *g_initial_log_file = NULL; static int g_initialized = 0; static fs_mutex *g_mutex = NULL; static void initialize() { if (g_initialized) { return; } g_mutex = fs_mutex_create(); g_initialized = 1; char *dir = fs_path_join(fs_get_user_data_dir(), "fs-uae", NULL); if (!fs_path_exists(dir)) { if (fs_mkdir_with_parents(dir, 0755) == -1) { // could not create directory printf("WARNING: could not create directory %s\n", dir); free(dir); return; } } g_initial_log_file = fs_path_join(dir, "fs-uae.log", NULL); g_log_file = fs_fopen(g_initial_log_file, "w"); if (g_log_file) { printf("logging to %s\n", g_initial_log_file); } free(dir); } void fs_log_enable_stdout() { g_fs_log_stdout = 1; } void fs_config_set_log_file(const char *path) { fs_log("switch to log file %s\n", path); fs_mutex_lock(g_mutex); if (g_log_file) { fclose(g_log_file); } g_log_file = fs_fopen(path, "w"); if (g_log_file) { printf("logging to %s\n", path); if (g_initial_log_file) { FILE *f = fs_fopen(g_initial_log_file, "r"); if (f) { char *buffer = (char *) malloc(1024); int read = fread(buffer, 1, 1024, f); while (read > 0) { fwrite(buffer, 1, read, g_log_file); read = fread(buffer, 1, 1024, f); } free(buffer); } fclose(f); } } fs_mutex_unlock(g_mutex); } void fs_log_string(const char *str) { if (!g_initialized) { initialize(); } fs_mutex_lock(g_mutex); if (g_fs_log_stdout) { printf("%s", str); } if (g_log_file) { fprintf(g_log_file, "%s", str); } fs_mutex_unlock(g_mutex); } void fs_log(const char *format, ...) { va_list ap; va_start(ap, format); char *buffer = fs_strdup_vprintf(format, ap); va_end(ap); fs_log_string(buffer); free(buffer); } fs-uae-2.2.3+dfsg/libfsemu/src/random.c0000644000175000017500000004544512162366654020111 0ustar glaubitzglaubitz/* GLIB - Library of useful routines for C programming * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ /* Originally developed and coded by Makoto Matsumoto and Takuji * Nishimura. Please mail , if you're using * code from this file in your own programs or libraries. * Further information on the Mersenne Twister can be found at * http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html * This code was adapted to glib by Sebastian Wilhelmi. */ /* * Modified by the GLib Team and others 1997-2000. See the AUTHORS * file for a list of people on the GLib Team. See the ChangeLog * files for a list of changes. These files are distributed with * GLib at ftp://ftp.gtk.org/pub/gtk/. */ /* * MT safe */ #include #include #include #include //#include "config.h" #include #include #include #include #include #include #ifdef HAVE_UNISTD_H #include #endif /* #include "grand.h" #include "genviron.h" #include "gmain.h" #include "gmem.h" #include "gtestutils.h" #include "gthread.h" */ #ifdef WINDOWS #include /* For getpid() */ #endif /** * SECTION:random_numbers * @title: Random Numbers * @short_description: pseudo-random number generator * * The following functions allow you to use a portable, fast and good * pseudo-random number generator (PRNG). It uses the Mersenne Twister * PRNG, which was originally developed by Makoto Matsumoto and Takuji * Nishimura. Further information can be found at * * http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html. * * If you just need a random number, you simply call the * g_random_* functions, which will create a * globally used #fs_rand_context and use the according * g_rand_* functions internally. Whenever you * need a stream of reproducible random numbers, you better create a * #fs_rand_context yourself and use the g_rand_* functions * directly, which will also be slightly faster. Initializing a #fs_rand_context * with a certain seed will produce exactly the same series of random * numbers on all platforms. This can thus be used as a seed for e.g. * games. * * The g_rand*_range functions will return high * quality equally distributed random numbers, whereas for example the * (g_random_int()%max) approach often * doesn't yield equally distributed numbers. * * GLib changed the seeding algorithm for the pseudo-random number * generator Mersenne Twister, as used by * fs_rand_context and fs_rand_contextom. * This was necessary, because some seeds would yield very bad * pseudo-random streams. Also the pseudo-random integers generated by * g_rand*_int_range() will have a slightly better * equal distribution with the new version of GLib. * * The original seeding and generation algorithms, as found in GLib * 2.0.x, can be used instead of the new ones by setting the * environment variable G_RANDOM_VERSION to the value of * '2.0'. Use the GLib-2.0 algorithms only if you have sequences of * numbers generated with Glib-2.0 that you need to reproduce exactly. **/ /** * fs_rand_context: * * The #fs_rand_context struct is an opaque data structure. It should only be * accessed through the g_rand_* functions. **/ //G_LOCK_DEFINE_STATIC( global_random); static fs_rand_context *g_global_random = NULL; static fs_mutex *g_global_random_mutex = NULL; FS_INIT_FUNCTION(global_random) { printf("\n\n\n\n\n\n\n\n random init\n\n\n\n\n"); g_global_random_mutex = fs_mutex_create(); } /* Period parameters */ #define N 624 #define M 397 #define MATRIX_A 0x9908b0df /* constant vector a */ #define UPPER_MASK 0x80000000 /* most significant w-r bits */ #define LOWER_MASK 0x7fffffff /* least significant r bits */ /* Tempering parameters */ #define TEMPERING_MASK_B 0x9d2c5680 #define TEMPERING_MASK_C 0xefc60000 #define TEMPERING_SHIFT_U(y) (y >> 11) #define TEMPERING_SHIFT_S(y) (y << 7) #define TEMPERING_SHIFT_T(y) (y << 15) #define TEMPERING_SHIFT_L(y) (y >> 18) static unsigned int get_random_version(void) { static unsigned int random_version = 22; return random_version; } struct fs_rand_context { uint32_t mt[N]; /* the array for the state vector */ unsigned int mti; }; /** * fs_rand_new_with_seed: * @seed: a value to initialize the random number generator. * * Creates a new random number generator initialized with @seed. * * Return value: the new #fs_rand_context. **/ fs_rand_context *fs_rand_new_with_seed(uint32_t seed) { fs_rand_context *rand = fs_new0(fs_rand_context, 1); fs_rand_set_seed(rand, seed); return rand; } /** * fs_rand_new_with_seed_array: * @seed: an array of seeds to initialize the random number generator. * @seed_length: an array of seeds to initialize the random number generator. * * Creates a new random number generator initialized with @seed. * * Return value: the new #fs_rand_context. * * Since: 2.4 **/ fs_rand_context *fs_rand_new_with_seed_array(const uint32_t *seed, unsigned int seed_length) { fs_rand_context *rand = fs_new0(fs_rand_context, 1); fs_rand_set_seed_array(rand, seed, seed_length); return rand; } /** * fs_rand_new: * * Creates a new random number generator initialized with a seed taken * either from /dev/urandom (if existing) or from * the current time (as a fallback). * * Return value: the new #fs_rand_context. **/ fs_rand_context *fs_rand_new(void) { uint32_t seed[4]; fs_time_val now; #ifdef G_OS_UNIX static int dev_urandom_exists = TRUE; if (dev_urandom_exists) { FILE* dev_urandom; do { errno = 0; dev_urandom = fopen("/dev/urandom", "rb"); } while G_UNLIKELY (errno == EINTR); if (dev_urandom) { int r; setvbuf (dev_urandom, NULL, _IONBF, 0); do { errno = 0; r = fread (seed, sizeof (seed), 1, dev_urandom); } while G_UNLIKELY (errno == EINTR); if (r != 1) dev_urandom_exists = FALSE; fclose (dev_urandom); } else dev_urandom_exists = FALSE; } #else static int dev_urandom_exists = FALSE; #endif if (!dev_urandom_exists) { fs_get_current_time(&now); seed[0] = now.tv_sec; seed[1] = now.tv_usec; seed[2] = getpid(); #ifdef G_OS_UNIX seed[3] = getppid (); #else seed[3] = 0; #endif } return fs_rand_new_with_seed_array(seed, 4); } /** * g_rand_free: * @rand_: a #fs_rand_context. * * Frees the memory allocated for the #fs_rand_context. **/ void fs_rand_free(fs_rand_context *rand) { if (rand == NULL) { return; } free(rand); } /** * g_rand_copy: * @rand_: a #fs_rand_context. * * Copies a #fs_rand_context into a new one with the same exact state as before. * This way you can take a snapshot of the random number generator for * replaying later. * * Return value: the new #fs_rand_context. * * Since: 2.4 **/ fs_rand_context *fs_rand_copy(fs_rand_context *rand) { fs_rand_context *new_rand; if (rand == NULL) { return NULL; } new_rand = fs_new0(fs_rand_context, 1); memcpy(new_rand, rand, sizeof(fs_rand_context)); return new_rand; } /** * g_rand_set_seed: * @rand_: a #fs_rand_context. * @seed: a value to reinitialize the random number generator. * * Sets the seed for the random number generator #fs_rand_context to @seed. **/ void fs_rand_set_seed(fs_rand_context *rand, uint32_t seed) { if (rand == NULL) { return; } switch (get_random_version()) { case 20: /* setting initial seeds to mt[N] using */ /* the generator Line 25 of Table 1 in */ /* [KNUTH 1981, The Art of Computer Programming */ /* Vol. 2 (2nd Ed.), pp102] */ if (seed == 0) /* This would make the PRNG produce only zeros */ seed = 0x6b842128; /* Just set it to another number */ rand->mt[0] = seed; for (rand->mti = 1; rand->mti < N; rand->mti++) rand->mt[rand->mti] = (69069 * rand->mt[rand->mti - 1]); break; case 22: /* See Knuth TAOCP Vol2. 3rd Ed. P.106 for multiplier. */ /* In the previous version (see above), MSBs of the */ /* seed affect only MSBs of the array mt[]. */ rand->mt[0] = seed; for (rand->mti = 1; rand->mti < N; rand->mti++) rand->mt[rand->mti] = 1812433253UL * (rand->mt[rand->mti - 1] ^ (rand->mt[rand->mti - 1] >> 30)) + rand->mti; break; //default: // g_assert_not_reached(); } } /** * g_rand_set_seed_array: * @rand_: a #fs_rand_context. * @seed: array to initialize with * @seed_length: length of array * * Initializes the random number generator by an array of * longs. Array can be of arbitrary size, though only the * first 624 values are taken. This function is useful * if you have many low entropy seeds, or if you require more then * 32bits of actual entropy for your application. * * Since: 2.4 **/ void fs_rand_set_seed_array(fs_rand_context *rand, const uint32_t *seed, unsigned int seed_length) { int i, j, k; if (rand == NULL) { return; } if (seed_length < 1) { return; } fs_rand_set_seed(rand, 19650218UL); i = 1; j = 0; k = (N > seed_length ? N : seed_length); for (; k; k--) { rand->mt[i] = (rand->mt[i] ^ ((rand->mt[i - 1] ^ (rand->mt[i - 1] >> 30)) * 1664525UL)) + seed[j] + j; /* non linear */ rand->mt[i] &= 0xffffffffUL; /* for WORDSIZE > 32 machines */ i++; j++; if (i >= N) { rand->mt[0] = rand->mt[N - 1]; i = 1; } if (j >= seed_length) j = 0; } for (k = N - 1; k; k--) { rand->mt[i] = (rand->mt[i] ^ ((rand->mt[i - 1] ^ (rand->mt[i - 1] >> 30)) * 1566083941UL)) - i; /* non linear */ rand->mt[i] &= 0xffffffffUL; /* for WORDSIZE > 32 machines */ i++; if (i >= N) { rand->mt[0] = rand->mt[N - 1]; i = 1; } } rand->mt[0] = 0x80000000UL; /* MSB is 1; assuring non-zero initial array */ } /** * g_rand_int: * @rand_: a #fs_rand_context. * * Returns the next random #uint32_t from @rand_ equally distributed over * the range [0..2^32-1]. * * Return value: A random number. **/ uint32_t fs_rand_int(fs_rand_context *rand) { uint32_t y; static const uint32_t mag01[2] = { 0x0, MATRIX_A }; /* mag01[x] = x * MATRIX_A for x=0,1 */ if (rand == NULL) { return 0; } if (rand->mti >= N) { /* generate N words at one time */ int kk; for (kk = 0; kk < N - M; kk++) { y = (rand->mt[kk] & UPPER_MASK) | (rand->mt[kk + 1] & LOWER_MASK); rand->mt[kk] = rand->mt[kk + M] ^ (y >> 1) ^ mag01[y & 0x1]; } for (; kk < N - 1; kk++) { y = (rand->mt[kk] & UPPER_MASK) | (rand->mt[kk + 1] & LOWER_MASK); rand->mt[kk] = rand->mt[kk + (M - N)] ^ (y >> 1) ^ mag01[y & 0x1]; } y = (rand->mt[N - 1] & UPPER_MASK) | (rand->mt[0] & LOWER_MASK); rand->mt[N - 1] = rand->mt[M - 1] ^ (y >> 1) ^ mag01[y & 0x1]; rand->mti = 0; } y = rand->mt[rand->mti++]; y ^= TEMPERING_SHIFT_U(y); y ^= TEMPERING_SHIFT_S(y) & TEMPERING_MASK_B; y ^= TEMPERING_SHIFT_T(y) & TEMPERING_MASK_C; y ^= TEMPERING_SHIFT_L(y); return y; } /* transform [0..2^32] -> [0..1] */ #define FS_RAND_DOUBLE_TRANSFORM 2.3283064365386962890625e-10 /** * g_rand_int_range: * @rand_: a #fs_rand_context. * @begin: lower closed bound of the interval. * @end: upper open bound of the interval. * * Returns the next random #int32_t from @rand_ equally distributed over * the range [@begin..@end-1]. * * Return value: A random number. **/ int32_t fs_rand_int_range(fs_rand_context *rand, int32_t begin, int32_t end) { uint32_t dist = end - begin; uint32_t random; if (rand == NULL) { return begin; } if (end <= begin) { return begin; } switch (get_random_version()) { case 20: if (dist <= 0x10000L) /* 2^16 */ { /* This method, which only calls g_rand_int once is only good * for (end - begin) <= 2^16, because we only have 32 bits set * from the one call to g_rand_int (). */ /* we are using (trans + trans * trans), because g_rand_int only * covers [0..2^32-1] and thus g_rand_int * trans only covers * [0..1-2^-32], but the biggest double < 1 is 1-2^-52. */ double double_rand = fs_rand_int(rand) * (FS_RAND_DOUBLE_TRANSFORM + FS_RAND_DOUBLE_TRANSFORM * FS_RAND_DOUBLE_TRANSFORM); random = (int32_t) (double_rand * dist); } else { /* Now we use g_rand_double_range (), which will set 52 bits for us, so that it is safe to round and still get a decent distribution */ random = (int32_t) fs_rand_double_range(rand, 0, dist); } break; case 22: if (dist == 0) random = 0; else { /* maxvalue is set to the predecessor of the greatest * multiple of dist less or equal 2^32. */ uint32_t maxvalue; if (dist <= 0x80000000u) /* 2^31 */ { /* maxvalue = 2^32 - 1 - (2^32 % dist) */ uint32_t leftover = (0x80000000u % dist) * 2; if (leftover >= dist) leftover -= dist; maxvalue = 0xffffffffu - leftover; } else maxvalue = dist - 1; do random = fs_rand_int(rand); while (random > maxvalue); random %= dist; } break; default: random = 0; /* Quiet GCC */ //g_assert_not_reached(); } return begin + random; } /** * g_rand_double: * @rand_: a #fs_rand_context. * * Returns the next random #double from @rand_ equally distributed over * the range [0..1). * * Return value: A random number. **/ double fs_rand_double(fs_rand_context *rand) { /* We set all 52 bits after the point for this, not only the first 32. Thats why we need two calls to g_rand_int */ double retval = fs_rand_int(rand) * FS_RAND_DOUBLE_TRANSFORM; retval = (retval + fs_rand_int(rand)) * FS_RAND_DOUBLE_TRANSFORM; /* The following might happen due to very bad rounding luck, but * actually this should be more than rare, we just try again then */ if (retval >= 1.0) return fs_rand_double(rand); return retval; } /** * g_rand_double_range: * @rand_: a #fs_rand_context. * @begin: lower closed bound of the interval. * @end: upper open bound of the interval. * * Returns the next random #double from @rand_ equally distributed over * the range [@begin..@end). * * Return value: A random number. **/ double fs_rand_double_range(fs_rand_context *rand, double begin, double end) { double r; r = fs_rand_double(rand); return r * end - (r - 1) * begin; } /** * g_random_int: * * Return a random #uint32_t equally distributed over the range * [0..2^32-1]. * * Return value: A random number. **/ uint32_t fs_random_int(void) { FS_INIT(global_random); uint32_t result; fs_mutex_lock(g_global_random_mutex); if (!g_global_random) g_global_random = fs_rand_new(); result = fs_rand_int(g_global_random); fs_mutex_unlock(g_global_random_mutex); return result; } /** * g_random_int_range: * @begin: lower closed bound of the interval. * @end: upper open bound of the interval. * * Returns a random #int32_t equally distributed over the range * [@begin..@end-1]. * * Return value: A random number. **/ int32_t fs_random_int_range(int32_t begin, int32_t end) { FS_INIT(global_random); int32_t result; fs_mutex_lock(g_global_random_mutex); if (!g_global_random) g_global_random = fs_rand_new(); result = fs_rand_int_range(g_global_random, begin, end); fs_mutex_unlock(g_global_random_mutex); return result; } /** * g_random_double: * * Returns a random #double equally distributed over the range [0..1). * * Return value: A random number. **/ double fs_random_double(void) { FS_INIT(global_random); double result; fs_mutex_lock(g_global_random_mutex); if (!g_global_random) g_global_random = fs_rand_new(); result = fs_rand_double(g_global_random); fs_mutex_unlock(g_global_random_mutex); return result; } /** * g_random_double_range: * @begin: lower closed bound of the interval. * @end: upper open bound of the interval. * * Returns a random #double equally distributed over the range [@begin..@end). * * Return value: A random number. **/ double fs_random_double_range(double begin, double end) { FS_INIT(global_random); double result; fs_mutex_lock(g_global_random_mutex); if (!g_global_random) g_global_random = fs_rand_new(); result = fs_rand_double_range(g_global_random, begin, end); fs_mutex_unlock(g_global_random_mutex); return result; } /** * g_random_set_seed: * @seed: a value to reinitialize the global random number generator. * * Sets the seed for the global random number generator, which is used * by the g_random_* functions, to @seed. **/ void fs_random_set_seed(uint32_t seed) { FS_INIT(global_random); fs_mutex_lock(g_global_random_mutex); if (!g_global_random) g_global_random = fs_rand_new_with_seed(seed); else fs_rand_set_seed(g_global_random, seed); fs_mutex_unlock(g_global_random_mutex); } fs-uae-2.2.3+dfsg/libfsemu/src/emu/0000755000175000017500000000000012162366654017237 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/libfsemu/src/emu/font.c0000644000175000017500000004451312162366654020360 0ustar glaubitzglaubitz#include "font.h" #include #include #include #include #include #ifdef USE_OPENGL #include #endif #ifdef USE_FREETYPE #include #include FT_FREETYPE_H FT_Library library; #endif #include "video.h" #include "render.h" static int g_texture_width = 2048; static int g_texture_height = 2048; // FIXME: little-endian only #define MASK 0x00ffffff static int g_initialized = 0; static fs_list* g_cache = NULL; static int g_video_version = 0; static GLuint g_text_texture = 0; static uint8_t *g_buffer = NULL; #define CACHE_SIZE (g_texture_height / 32) //static char g_positions[64] = {}; typedef struct _cache_item { fs_emu_font *font; char *text; //unsigned int texture; int position; int width; int height; float x1; float x2; float y1; float y2; } cache_item; static void sanity_check() { } void initialize_cache() { for (int i = 0; i < CACHE_SIZE; i++) { cache_item *item = malloc(sizeof(cache_item)); item->font = NULL; item->text = NULL; item->position = i; g_cache = fs_list_append(g_cache, item); } sanity_check(); // FIXME: REMOVE g_video_version = g_fs_ml_opengl_context_stamp; } static void create_text_texture() { glGenTextures(1, &g_text_texture); fs_gl_bind_texture(g_text_texture); // want to clear data to color (0, 0, 0, 0), probably a better // way to to this... void *data = fs_malloc0(g_texture_width * g_texture_height * 4); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, g_texture_width, g_texture_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, data); free(data); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); } static void context_notification_handler(int notification, void *data) { if (notification == FS_GL_CONTEXT_DESTROY) { if (g_text_texture != 0) { glDeleteTextures(1, &g_text_texture); g_text_texture = 0; } // FIXME: clear text cache.. //printf("FIXME: clear text cache\n"); fs_list* list = g_cache; while (list) { cache_item *item = (cache_item *) list->data; free(item->text); free(item); list = list->next; } fs_list_free(g_cache); g_cache = NULL; initialize_cache(); } else if (notification == FS_GL_CONTEXT_CREATE) { create_text_texture(); } } #ifdef USE_FREETYPE void init_freetype(void) { int error = FT_Init_FreeType(&library); if (error) { fs_emu_warning("Could not initialize freetype"); } else { fs_emu_log("freetype initialized\n"); } } #endif void initialize() { g_texture_width = 2048; g_texture_height = 2048; int max_texture_size = fs_ml_get_max_texture_size(); if (max_texture_size > 0) { if (max_texture_size < g_texture_width) { g_texture_width = max_texture_size; } if (max_texture_size < g_texture_height) { g_texture_height = max_texture_size; } } fs_log("using text cache texture size %dx%d\n", g_texture_width, g_texture_height); initialize_cache(); create_text_texture(); fs_gl_add_context_notification(context_notification_handler, NULL); g_buffer = malloc(g_texture_width * 32 * 4); #ifdef USE_FREETYPE init_freetype(); #endif g_initialized = 1; } void fs_emu_font_measure(fs_emu_font *font, const char *text, int* width, int *height) { if (font->image == NULL) { if (width) { *width = 0; } if (height) { *height = 0; } return; } int required_width = 0; int required_height = font->h; unsigned char *cp = (unsigned char *) text; for(; *cp; cp++) { unsigned char c = *cp; required_width += font->w[c]; } //fs_log("width: %d, height: %d\n", required_width, required_height); if (width) { *width = required_width; } if (height) { *height = required_height; } } int fs_emu_font_render_with_outline(fs_emu_font *font, const char *text, float x, float y, float r, float g, float b, float a, float o_r, float o_g, float o_b, float o_a, float o_w) { fs_emu_font_render(font, text, x - o_w, y - o_w, o_r, o_g, o_b, o_a); fs_emu_font_render(font, text, x + o_w, y + o_w, o_r, o_g, o_b, o_a); fs_emu_font_render(font, text, x + o_w, y - o_w, o_r, o_g, o_b, o_a); fs_emu_font_render(font, text, x - o_w, y + o_w, o_r, o_g, o_b, o_a); return fs_emu_font_render(font, text, x, y, r, g, b, a); } //gunichar2 fix_char(fs_emu_font *font, gunichar2 c) { int fix_char(fs_emu_font *font, int c) { if (c == 0x2019) { // replace RIGHT SINGLE QUOTATION MARK with common apostrophe return '\''; } else if (c >= font->chars) { // replace with question mark return 63; } else if (c < 0) { // replace with question mark return 63; } return c; } int fs_emu_font_render(fs_emu_font *font, const char *text, float x, float y, float r, float g, float b, float alpha) { if (font->image == NULL) { return 0; } if (text == NULL || *text == '\0') { return 0 ; } if (!g_initialized) { initialize(); } // find cached text entry, if any fs_list* list = g_cache; while (list) { cache_item *item = (cache_item *) list->data; if (item->font == font && strcmp(item->text, text) == 0) { break; } list = list->next; } if (list) { cache_item *item = (cache_item *) list->data; g_cache = fs_list_delete_link(g_cache, list); sanity_check(); fs_gl_blending(1); fs_gl_texturing(1); //fs_emu_ortho(); //fs_emu_set_texture(NULL); fs_gl_bind_texture(g_text_texture); //glColor4f(1.0, 1.0, 1.0, alpha); //printf("rendering %f %f %f %f...\n", item->x1, item->x2, item->y1, item->y2); fs_gl_color4f(r, g, b, alpha); //glColor4f(r * alpha, g * alpha, b * alpha, alpha); #ifdef USE_GLES GLfloat tex[] = { item->x1, item->y2, item->x2, item->y2, item->x2, item->y1, item->x1, item->y1 }; GLfloat vert[] = { x, y, x + item->width, y, x + item->width, y + item->height, x, y + item->height }; glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_TEXTURE_COORD_ARRAY); glVertexPointer(2, GL_FLOAT, 0, vert); glTexCoordPointer(2, GL_FLOAT, 0, tex); glDrawArrays(GL_TRIANGLE_FAN, 0, 4); glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_TEXTURE_COORD_ARRAY); #else glBegin(GL_QUADS); glTexCoord2f(item->x1, item->y2); glVertex2f(x, y); glTexCoord2f(item->x2, item->y2); glVertex2f(x + item->width, y); glTexCoord2f(item->x2, item->y1); glVertex2f(x + item->width, y + item->height); glTexCoord2f(item->x1, item->y1); glVertex2f(x, y + item->height); glEnd(); #endif g_cache = fs_list_prepend(g_cache, item); sanity_check(); return item->width; } // calculate size of text //printf(":: %s\n", text); int num_chars = 0; int required_width = 0; int required_height = font->h; //char *base_text = fs_utf8_strup(text, -1); const char *base_text = text; unsigned const char *c = (unsigned const char*) base_text; int continuations = 0; int cp = 0; while(*c) { //if ((*c & 0b10000000) == 0b00000000) { if ((*c & 0x80) == 0x0) { continuations = 0; //cp = *c & 0b01111111; cp = *c & 0x7f; } //else if ((*c & 0b11000000) == 0b10000000) { else if ((*c & 0xc0) == 0x80) { continuations--; cp = cp << 6; //cp = cp | (*c & 0b00111111); cp = cp | (*c & 0x3f); } //else if ((*c & 0b11111110) == 0b11111100) { // 1111110x else if ((*c & 0xfe) == 0xfc) { // 1111110x continuations = 5; //cp = *c & 0b00000001; cp = *c & 0x1; } //else if ((*c & 0b11111100) == 0b11111000) { // 111110xx else if ((*c & 0xfc) == 0xf8) { // 111110xx continuations = 4; //cp = *c & 0b00000011; cp = *c & 0x3; } //else if ((*c & 0b11111000) == 0b11110000) { // 11110xxx else if ((*c & 0xf8) == 0xf0) { // 11110xxx continuations = 3; //cp = *c & 0b00000111; cp = *c & 0x7; } //else if ((*c & 0b11110000) == 0b11100000) { // 1110xxxx else if ((*c & 0xf0) == 0xe0) { // 1110xxxx continuations = 2; //cp = *c & 0b00001111; cp = *c & 0xf; } //else if ((*c & 0b11100000) == 0b11000000) { // 110xxxxx else if ((*c & 0xe0) == 0xc0) { // 110xxxxx continuations = 1; //cp = *c & 0b00011111; cp = *c & 0x1f; } ++c; if (continuations) { continue; } cp = fix_char(font, cp); //printf("%d\n", cp); if (required_width + font->w[cp] > g_texture_width) { break; } required_width += font->w[cp]; num_chars++; } int dx = 0; int dy = 0; c = (unsigned const char*) base_text; //printf("base_text: %s\n", c); continuations = 0; cp = 0; int k = 0; while(*c) { //printf("%d\n", *c); //if ((*c & 0b10000000) == 0b00000000) { if ((*c & 0x80) == 0x0) { continuations = 0; //cp = *c & 0b01111111; cp = *c & 0x7f; } //else if ((*c & 0b11000000) == 0b10000000) { else if ((*c & 0xc0) == 0x80) { continuations--; cp = cp << 6; //cp = cp | (*c & 0b00111111); cp = cp | (*c & 0x3f); } //else if ((*c & 0b11111110) == 0b11111100) { // 1111110x else if ((*c & 0xfe) == 0xfc) { // 1111110x continuations = 5; //cp = *c & 0b00000001; cp = *c & 0x1; } //else if ((*c & 0b11111100) == 0b11111000) { // 111110xx else if ((*c & 0xfc) == 0xf8) { // 111110xx continuations = 4; //cp = *c & 0b00000011; cp = *c & 0x3; } //else if ((*c & 0b11111000) == 0b11110000) { // 11110xxx else if ((*c & 0xf8) == 0xf0) { // 11110xxx continuations = 3; //cp = *c & 0b00000111; cp = *c & 0x7; } //else if ((*c & 0b11110000) == 0b11100000) { // 1110xxxx else if ((*c & 0xf0) == 0xe0) { // 1110xxxx continuations = 2; //cp = *c & 0b00001111; cp = *c & 0xf; } //else if ((*c & 0b11100000) == 0b11000000) { // 110xxxxx else if ((*c & 0xe0) == 0xc0) { // 110xxxxx continuations = 1; //cp = *c & 0b00011111; cp = *c & 0x1f; } ++c; if (continuations) { continue; } if (++k > num_chars) { // there may be more chars left in the original string, // but there is no room for the next char in the texture break; } cp = fix_char(font, cp); int sx = font->x[cp]; int sy = font->y[cp]; int sw = font->w[cp]; int sh = font->h; //if (c > 256) { // printf("%d %d %d %d %d\n", c, sx, sy, sw, sh); //} // draw character //printf("-----------> %d\n", cp); int *sl = ((int *) font->image->data) + font->image->width * sy + sx; int ss = font->image->width; // source stride //int *sl = sp; int *dl = ((int *) g_buffer) + g_texture_width * dy + dx; int ds = g_texture_width; // destination stride //int *dl = dp; for (int y = 0; y < sh; y++) { //printf("%d\n", y); int *sp = sl; int *dp = dl; for (int x = 0; x < sw; x++) { //printf("%d %d\n", x, y); //*dp++ = 0xff0000ff; //*dp++ = *sp++; int a = *sp; sp++; *dp = a; dp++; //int a = *sp++; } sl += ss; dl += ds; } dx += sw; } //free(utext); //free(base_text); fs_list *last = fs_list_last(g_cache); cache_item *last_item = (cache_item *) last->data; int position = last_item->position; fs_gl_bind_texture(g_text_texture); int gl_buffer_format = GL_RGBA; if (fs_emu_get_video_format() == FS_EMU_VIDEO_FORMAT_BGRA) { gl_buffer_format = GL_BGRA; } #ifdef USE_GLES /* GLES does not support unpack padding of buffer. we have to update line-wise (or create a new one) */ uint8_t *buf = g_buffer; for(int y=0;yfont = font; item->text = fs_strdup(text); item->width = required_width; item->height = required_height; item->position = position; item->x1 = 0; item->x2 = required_width / (1.0 * g_texture_width); item->y1 = (item->position * 32) / (1.0 * g_texture_height); item->y2 = (item->position * 32 + required_height) / (1.0 * g_texture_height); //item->texture = render_texture; g_cache = fs_list_prepend(g_cache, item); sanity_check(); if (last_item->text) { free(last_item->text); } /* if (last_item->texture) { glDeleteTextures(1, &last_item->texture); } */ free(last_item); g_cache = fs_list_delete_link(g_cache, last); sanity_check(); // now the text is in the cache, so call function again return fs_emu_font_render(font, text, x, y, r, g, b, alpha); } static fs_image *load_font_from_file(const char *path) { //char *full_name = g_strconcat(name, ".png", NULL); //char *path = g_build_filename(fs_emu_get_share_dir(), full_name, NULL); //char *path = fs_get_program_data_file(full_name); if (path == NULL) { fs_emu_warning(_("Could not find font: %s"), path); return NULL; } fs_emu_log("loading image \"%s\"\n", path); fs_image *image = fs_image_new_from_file(path); if (image == NULL) { fs_emu_warning(_("Error loading font: %s"), path); return NULL; } // convert to premultiplied alpha if (image->format == FS_IMAGE_FORMAT_RGBA) { int num_pixels = image->width * image->height; unsigned char *pixels = image->data; for (int i = 0; i < num_pixels; i++) { unsigned char alpha = pixels[3]; // should really divide by 255, but 256 is faster... //pixels[0] = ((int) pixels[0]) * alpha / 256; //pixels[1] = ((int) pixels[1]) * alpha / 256; //pixels[2] = ((int) pixels[2]) * alpha / 256; pixels[0] = ((int) pixels[0]) * alpha / 255; pixels[1] = ((int) pixels[1]) * alpha / 255; pixels[2] = ((int) pixels[2]) * alpha / 255; //pixels[0] = (unsigned char) ((pixels[0] * alpha + 0.5) / 255.0); //pixels[1] = (unsigned char) ((pixels[1] * alpha + 0.5) / 255.0); //pixels[2] = (unsigned char) ((pixels[2] * alpha + 0.5) / 255.0); pixels += 4; } } return image; } fs_emu_font *fs_emu_font_new_from_file(const char *name) { fs_emu_log("load font %s\n", name); fs_emu_font *font = fs_malloc0(sizeof(fs_emu_font)); font->image = load_font_from_file(name); if (font->image) { unsigned char *data = font->image->data; uint32_t *idata = (uint32_t *) data; uint32_t *line = idata; int width = font->image->width; int height = font->image->height; int x = 1; int y = 1; int h = 0; //uint32_t blank = line[0] & MASK; uint32_t blank = line[0]; for (int i = 0; i < height; i++) { //if (i > 0 && h == 0 && (idata[i * width] & MASK) == blank) { if (i > 0 && h == 0 && idata[i * width] == blank) { h = i - 1; } idata[i * width] = 0x00000000; } fs_emu_log("font height: %d pixels\n", h); font->h = h; //unsigned char c = 31; // first actual character is 32 int c = -1; int in_character = 0; while (1) { if (in_character) { //if ((line[x] & MASK) == blank) { if (line[x] == blank) { //fs_log("blank at %d %d\n", x, y); in_character = 0; font->w[c] = x - font->x[c]; } } else { //if ((line[x] & MASK) != blank) { if ((line[x]) != blank) { if (c == FS_EMU_FONT_MAX_CHARS - 1) { fs_emu_log("FS_EMU_FONT_MAX_CHARS reached\n"); break; } c++; //fs_log("char %d at %d %d\n", c, x, y); font->x[c] = x; font->y[c] = y; in_character = 1; } } //fs_log("%d %x\n", x, idata[x]); line[x] = 0x00000000; x++; if (x == width) { x = 1; y = y + (h + 1); if (y >= height) { break; } line = line + width * (h + 1); //exit(1); } } font->chars = c + 1; fs_emu_log("%d characters\n", font->chars); } return font; } fs-uae-2.2.3+dfsg/libfsemu/src/emu/audio_dummy.c0000644000175000017500000000172712162366654021726 0ustar glaubitzglaubitz#if !defined(USE_OPENAL) #include #include void fs_emu_init_audio_stream(int stream, fs_emu_audio_stream_options *options) { } void fs_emu_init_audio_stream_options(fs_emu_audio_stream_options *options) { options->frequency = 44100; options->channels = 2; options->sample_size = 16; options->buffer_size = 512; options->min_buffers = 1; } void fs_emu_audio_init() { } void fs_emu_audio_set_default_pitch(double pitch) { } double fs_emu_audio_get_measured_avg_buffer_fill(int stream) { return 0.0; } void fs_emu_audio_shutdown() { } void fs_emu_audio_video_sync(int time_ms) { } int fs_emu_queue_audio_buffer(int stream, int16_t* buffer, int size) { return 1; } int fs_emu_check_audio_buffer_done(int stream, int buffer) { return 0; } double fs_emu_audio_get_volume() { return 1.0; } void fs_emu_audio_set_volume(double volume) { } void fs_emu_audio_render_debug_info(uint32_t *texture) { } #endiffs-uae-2.2.3+dfsg/libfsemu/src/emu/input.h0000644000175000017500000000022412162366654020545 0ustar glaubitzglaubitz#ifndef LIBFSEMU_INPUT_H_ #define LIBFSEMU_INPUT_H_ #include #include void fs_emu_input_init(); #endif // LIBFSEMU_INPUT_H_ fs-uae-2.2.3+dfsg/libfsemu/src/emu/libfsemu.h0000644000175000017500000000352612162366654021224 0ustar glaubitzglaubitz#ifndef _LIBFSEMU_H_ #define _LIBFSEMU_H_ #include "util.h" #include "texture.h" void fs_emu_initialize_textures(); void fs_emu_draw_texture_with_size(int entry, float x, float y, float w, float h); void fs_emu_draw_texture(int entry, float x, float y); void fs_emu_prepare_texture(int entry, float *tx1, float *ty1, float *tx2, float *ty2); extern int64_t g_fs_emu_quit_time; extern int g_fs_emu_emulation_thread_stopped; //extern char *g_fs_emu_application_title; extern char *g_fs_emu_title; extern char *g_fs_emu_sub_title; //extern char *g_fs_emu_window_title; extern int g_fs_emu_audio_buffer_underruns; extern int g_fs_emu_throttling; extern int g_fs_emu_full_sync_allowed; #define MAX_PLAYERS 6 typedef struct fs_emu_player { char tag[4]; int ping; int lag; } fs_emu_player; extern fs_emu_player g_fs_emu_players[MAX_PLAYERS]; void fs_emu_queue_input_event(int input_event); void fs_emu_queue_input_event_internal(int input_event); void fs_emu_clear_menu_input_states(int key); void fs_emu_audio_set_default_pitch(double pitch); void fs_emu_initialize_opengl(); void fs_emu_volume_control(); void fs_emu_init_render(); extern int g_fs_emu_benchmarking; extern int64_t g_fs_emu_benchmark_start_time; extern int g_fs_emu_total_emu_frames; extern int g_fs_emu_total_sys_frames; extern int g_fs_emu_repeated_frames; extern int g_fs_emu_lost_frames; extern int64_t g_fs_emu_lost_frame_time; extern int64_t g_fs_emu_repeated_frame_time; extern int64_t g_fs_emu_video_mode_change_time; extern int g_fs_emu_lost_vblanks; extern fs_emu_stat_queue g_fs_emu_emu_frame_times; extern fs_emu_stat_queue g_fs_emu_emu2_frame_times; extern fs_emu_stat_queue g_fs_emu_sys_frame_times; extern int g_fs_emu_scanlines; extern int g_fs_emu_scanlines_dark; extern int g_fs_emu_scanlines_light; extern fs_emu_texture *g_fs_emu_overlay_texture; #endif fs-uae-2.2.3+dfsg/libfsemu/src/emu/menu.c0000644000175000017500000004670312162366654020361 0ustar glaubitzglaubitz#include "menu.h" #include #include #include #include "dialog.h" #include "font.h" #include "libfsemu.h" #include "render.h" #include "texture.h" #include "theme.h" #include "video.h" #ifdef USE_OPENGL #include #endif static fs_emu_font *g_font_title = NULL; static fs_emu_font *g_font_menu = NULL; static fs_emu_menu* g_menu = NULL; static fs_emu_menu* g_top_menu = NULL; static fs_list* g_menu_stack = NULL; static int g_top_menu_focus = 0; // FIXME: set to 0 later int g_fs_emu_menu_mode = 0; static int g_update_current_menu = 0; void fs_emu_menu_update_current() { g_update_current_menu = 1; } fs_emu_font *fs_emu_font_get_title() { return g_font_title; } fs_emu_font *fs_emu_font_get_menu() { return g_font_menu; } int fs_emu_menu_or_dialog_is_active() { return g_fs_emu_menu_mode || fs_emu_in_dialog_mode(); } int fs_emu_menu_is_active() { return g_fs_emu_menu_mode; } fs_emu_menu *fs_emu_menu_get_current() { return g_menu; } static void select_next() { if (g_menu == NULL) { return; } int index = g_menu->index + 1; while (index < g_menu->count) { if (g_menu->items[index]->type == FS_EMU_MENU_ITEM_TYPE_HEADING) { index++; continue; } g_menu->index = index; break; } } static int on_quit(fs_emu_menu_item* item, void **result_data) { fs_emu_log("on_quit selected from menu\n"); fs_emu_quit(); return FS_EMU_MENU_RESULT_NONE; } static int on_volume(fs_emu_menu_item* item, void **result_data) { fs_emu_log("on_volume selected from menu\n"); //fs_emu_toggle_mute(); fs_emu_volume_control(-1); return FS_EMU_MENU_RESULT_NONE; } static int on_aspect(fs_emu_menu_item* item, void **result_data) { fs_emu_log("on_aspect selected from menu\n"); fs_emu_video_set_aspect_correction(!fs_emu_video_get_aspect_correction()); return FS_EMU_MENU_RESULT_NONE; } static int go_back_in_menu_stack() { if (g_menu_stack != NULL) { fs_unref(g_menu); fs_list* last = fs_list_last(g_menu_stack); g_menu = last->data; g_menu_stack = fs_list_delete_link(g_menu_stack, last); if (g_menu->update) { g_menu->update(g_menu); } return 1; } return 0; } void fs_emu_menu_function(int action, int state) { fs_emu_acquire_gui_lock(); fs_emu_dialog *dialog = fs_emu_dialog_get_current(); if (dialog) { fs_emu_dialog_handle_action(action, state); fs_emu_release_gui_lock(); return; } if (state == 0 || g_menu == NULL) { fs_emu_release_gui_lock(); return; } //printf("fs_emu_menu_function %d %d\n", action, state); // we now lock the video render mutex so we do not change rendering // state while actually rendering the menu // FIXME: Render mutex lock is deprecated fs_emu_video_render_mutex_lock(); if (action == ACTION_MENU_UP) { if (g_top_menu_focus) { } else { int last_index = g_menu->index; int index = g_menu->index - 1; while (index >= 0) { if (g_menu->items[index]->type == \ FS_EMU_MENU_ITEM_TYPE_HEADING) { index--; continue; } g_menu->index = index; break; } if (g_menu->index == last_index) { // we were already at the top-most selectable item, so // we move focus to the top menu g_top_menu_focus = 1; } } } else if (action == ACTION_MENU_DOWN) { if (g_top_menu_focus) { g_top_menu_focus = 0; } else { select_next(); } } else if (action == ACTION_MENU_LEFT) { if (g_top_menu_focus) { if (g_top_menu->index == 0) { // special case: skip clock g_top_menu->index = 2; } else if (g_top_menu->index < g_top_menu->count - 1) { g_top_menu->index++; } } } else if (action == ACTION_MENU_RIGHT) { if (g_top_menu_focus) { if (g_top_menu->index == 2) { // special case: skip clock g_top_menu->index = 0; } else if (g_top_menu->index > 0) { g_top_menu->index--; } } } else if (action == ACTION_MENU_BACK) { go_back_in_menu_stack(); } else if (action == ACTION_MENU_ESCAPE) { if (!go_back_in_menu_stack()) { // no more menus to back out of, go out of menu mode instead fs_emu_menu_toggle(); // hack to clear button input state fs_emu_clear_menu_input_states(FS_ML_KEY_ESCAPE); } } else if (action == ACTION_MENU_PRIMARY) { if (g_top_menu_focus) { if (g_top_menu->items[g_top_menu->index]->activate) { void *result_data = NULL; g_top_menu->items[g_top_menu->index]->activate( g_top_menu->items[g_top_menu->index], &result_data); } } else { fs_emu_menu_item *item = g_menu->items[g_menu->index]; if (item->activate && !item->disabled) { void *result_data; int result = item->activate(item, &result_data); if (result & FS_EMU_MENU_RESULT_CLOSE) { // FIXME: closing the menu here may mean that the state // for the enter key (if it was used to activate an // item) will not be properly reset, disabling for now fs_emu_menu_toggle(); fs_emu_clear_menu_input_states(FS_ML_KEY_RETURN); //if (g_menu->update) { // g_menu->update(g_menu); //} } if (result & FS_EMU_MENU_RESULT_MENU) { g_menu_stack = fs_list_append(g_menu_stack, g_menu); g_menu = result_data; if (g_menu->update) { g_menu->update(g_menu); } while(g_menu->index < g_menu->count - 1 && \ g_menu->items[g_menu->index]->type == \ FS_EMU_MENU_ITEM_TYPE_HEADING) { select_next(); } } if (result & FS_EMU_MENU_RESULT_UPDATE) { if (g_menu->update) { g_menu->update(g_menu); } } if (result & FS_EMU_MENU_RESULT_BACK) { go_back_in_menu_stack(); } if (result & FS_EMU_MENU_RESULT_ROOT) { while (g_menu_stack) { go_back_in_menu_stack(); } } } } } fs_emu_video_render_mutex_unlock(); fs_emu_release_gui_lock(); } void fs_emu_menu_set_current(fs_emu_menu *menu) { fs_emu_log("fs_emu_menu_set_current %p\n", menu); g_menu = menu; if (g_menu->items[g_menu->index]->type == FS_EMU_MENU_ITEM_TYPE_HEADING) { select_next(); } } void fs_emu_menu_destroy(void* ptr) { fs_log("fs_emu_menu_destroy\n"); fs_emu_menu* menu = ptr; for (int i = 0; i < menu->count; i++) { fs_unref(menu->items[i]); } free(menu); } fs_emu_menu *fs_emu_menu_new() { fs_emu_menu *menu = malloc(sizeof(fs_emu_menu)); memset(menu, 0, sizeof(fs_emu_menu)); fs_ref_initialize(menu, fs_emu_menu_destroy); return menu; } void fs_emu_menu_item_destroy(void* ptr) { //fs_log("fs_emu_menu_item_destroy\n"); fs_emu_menu_item* item = ptr; /* if (image->data) { free(image->data); } */ if (item->title) { free(item->title); } free(item); } fs_emu_menu_item *fs_emu_menu_item_new() { fs_emu_menu_item *item = malloc(sizeof(fs_emu_menu_item)); memset(item, 0, sizeof(fs_emu_menu_item)); fs_ref_initialize(item, fs_emu_menu_item_destroy); return item; } void fs_emu_menu_append_item(fs_emu_menu *menu, fs_emu_menu_item *item) { menu->items[menu->count] = item; menu->count += 1; } fs_emu_menu_item *fs_emu_menu_item_at(fs_emu_menu *menu, int index) { //return (fs_emu_menu_item *) fs_list_nth_data(menu->items, index); return menu->items[index]; } int fs_emu_menu_item_count(fs_emu_menu *menu) { //return (fs_emu_menu_item *) fs_list_length(menu->items); return menu->count; } void fs_emu_menu_item_set_type(fs_emu_menu_item *item, int type) { item->type = type; } void fs_emu_menu_item_set_enabled(fs_emu_menu_item *item, int enabled) { item->disabled = !enabled; } void fs_emu_menu_item_set_title(fs_emu_menu_item *item, const char* title) { if (item->title) { free(item->title); } item->title = fs_strdup(title); } int fs_emu_menu_item_get_idata(fs_emu_menu_item *item) { return item->idata; } void *fs_emu_menu_item_get_pdata(fs_emu_menu_item *item) { return item->pdata; } void fs_emu_menu_item_set_idata(fs_emu_menu_item *item, int idata) { item->idata = idata; } void fs_emu_menu_item_set_pdata(fs_emu_menu_item *item, void *pdata) { item->pdata = pdata; } void fs_emu_menu_set_update_function(fs_emu_menu *menu, void (*function)(fs_emu_menu* menu)) { menu->update = function; } void fs_emu_menu_item_set_activate_function(fs_emu_menu_item *item, int (*function)(fs_emu_menu_item* menu_item, void **result)) { item->activate = function; } static void initialize() { static int initialized = 0; if (initialized == 1) { return; } initialized = 1; fs_emu_log("initializing menu\n"); char *path; path = fs_emu_theme_get_resource("title_font.png"); g_font_title = fs_emu_font_new_from_file(path); free(path); path = fs_emu_theme_get_resource("menu_font.png"); g_font_menu = fs_emu_font_new_from_file(path); free(path); g_top_menu = fs_emu_menu_new(); fs_emu_menu_item *item; // close item item = fs_emu_menu_item_new(); fs_emu_menu_item_set_activate_function(item, on_quit); fs_emu_menu_append_item(g_top_menu, item); // clock item item = fs_emu_menu_item_new(); //g_top_menu = g_list_append(g_top_menu, item); fs_emu_menu_append_item(g_top_menu, item); // volume item item = fs_emu_menu_item_new(); fs_emu_menu_item_set_activate_function(item, on_volume); //g_top_menu = g_list_append(g_top_menu, item); fs_emu_menu_append_item(g_top_menu, item); // aspect item item = fs_emu_menu_item_new(); fs_emu_menu_item_set_activate_function(item, on_aspect); //g_top_menu = g_list_append(g_top_menu, item); fs_emu_menu_append_item(g_top_menu, item); } void fs_emu_menu_init_opengl() { initialize(); } #define GROUP_SPACING 26 #define HEADING_TEXT_LEFT (1920 - 560 + 40 + 20 - 28) #define ITEM_TEXT_LEFT (1920 - 560 + 40 + 20) #define SIDEBAR_START_Y (1080 - 90 - 50) static int render_sidebar_item(int mode, int sel, fs_emu_menu *menu, int index, int y) { int selected = (menu->index == index) && !g_top_menu_focus; fs_emu_menu_item *item = fs_emu_menu_item_at(menu, index); int result = 0; if (item->type == FS_EMU_MENU_ITEM_TYPE_HEADING) { if (index > 0) { y -= GROUP_SPACING; result = 1; } } if (sel != selected) { return result; } //int x = 1400; //int x = 1920 - 560 + 40; //int xpadd = 20; double r = g_fs_emu_theme.item_color[0]; double g = g_fs_emu_theme.item_color[1]; double b = g_fs_emu_theme.item_color[2]; double alpha = g_fs_emu_theme.item_color[3]; int text_left = ITEM_TEXT_LEFT; if (item->type == FS_EMU_MENU_ITEM_TYPE_HEADING) { text_left = HEADING_TEXT_LEFT; //alpha = 0.4; //r = 0.0; //g = 1.0 * 0x99 / 0xff; //b = 1.0 * 0xcc / 0xff; r = g_fs_emu_theme.heading_color[0]; g = g_fs_emu_theme.heading_color[1]; b = g_fs_emu_theme.heading_color[2]; alpha = g_fs_emu_theme.heading_color[3]; int x = 0; fs_emu_font_measure(g_font_menu, item->title, &x, NULL); x += text_left + 12; fs_emu_draw_texture_with_size(TEXTURE_HEADING_BG, x, y + 14, 1920 - x, 32); } else { if (selected) { if (mode == 0) { fs_gl_blending(1); fs_gl_color4f(1.0, 1.0, 1.0, 1.0); fs_emu_draw_texture(TEXTURE_ITEM_BACKGROUND, 1920 - 540 + 13, y - 18); } } if (item->disabled) { //fs_gl_color4f(1.0, 1.0, 1.0, 0.3); r = r * 0.25; g = g * 0.25; b = b * 0.25; alpha = alpha * 0.25; } } if (mode == 1) { fs_emu_font_render(g_font_menu, item->title, text_left, y + 14, r, g, b, alpha); /* if (selected) { fs_emu_texture_render(g_tex_menu_fade_selected_item, 1920 - g_tex_menu_fade_selected_item->width, y - 20); } else { fs_emu_texture_render(g_tex_menu_fade_item, 1920 - g_tex_menu_fade_item->width, y - 20); } */ } if (mode == 0) { /* if (item->type == FS_EMU_MENU_ITEM_TYPE_MENU) { if (!item->disabled) { //fs_emu_font_render(g_font_title, ">", 1880, y + 12, 0.7); fs_emu_texture_render(g_tex_menu_arrow, 1920 - g_tex_menu_arrow->width, y - 20); } } */ } return result; } static void render_sidebar(int mode) { //printf("-- render sidebar mode = %d\n", mode); fs_emu_menu *menu = fs_emu_menu_get_current(); if (!menu) { return; } if (mode == 0) { if (g_update_current_menu) { g_update_current_menu = 0; if (menu->update) { menu->update(g_menu); } } } int count = menu->count; //int y = 938; int y = SIDEBAR_START_Y; for (int i = 0; i < count; i++) { int result = render_sidebar_item(mode, 0, menu, i, y); if (result) { y -= GROUP_SPACING; } y -= 54; } y = SIDEBAR_START_Y; for (int i = 0; i < count; i++) { int result = render_sidebar_item(mode, 1, menu, i, y); if (result) { y -= GROUP_SPACING; } y -= 54; } //printf("-- render sidebar (end)\n"); } static void render_top_item_background(int selected, int x, int y, int w, int h) { if (!selected) { return; } fs_gl_blending(1); fs_gl_color4f(1.0, 1.0, 1.0, 1.0); fs_emu_draw_texture_with_size(TEXTURE_TOP_ITEM_BG, x, y, w, h); } static void render_top_item(int mode, int index) { int selected = g_top_menu_focus && index == g_top_menu->index; int x = 1920; int y = 1080 - 60; // textures are 64 px high, but transparent on the // the edges x = x - 80; if (index == 0) { // close if (mode == 0) { //fs_emu_texture_render(top_item_left, 1920 - 72, 1080 - 90); render_top_item_background(selected, x, y, 80, 60); //fs_gl_texturing(0); //fs_gl_texturing(1); fs_gl_blending(1); fs_gl_color4f(1.0, 1.0, 1.0, 1.0); fs_emu_draw_texture(TEXTURE_CLOSE, x + 8, y - 2); } return; } x = x - 148; if (index == 1) { // clock if (mode == 1) { time_t t = time(NULL); struct tm *tm_struct = localtime(&t); char strbuf[6]; strftime(strbuf, 6, "%H:%M", tm_struct); //strftime(strbuf, 6, "00:00", tm_struct); int w = 0; fs_emu_font_measure(g_font_title, strbuf, &w, NULL); //fs_log("%d\n", w); //int rx = 1920 - 20 - 72; // - 20; //int ry = 1080 - 60 + (60 - g_font_title->h) / 2; fs_emu_font_render(g_font_title, strbuf, x + 148 - 20 - w , 1080 - 60 + (60 - g_font_title->h) / 2, 1.0, 1.0, 1.0, 1.0); } return; } x = x - 80; if (index == 2) { if (mode == 0) { //fs_emu_texture *texture = NULL; int texture = TEXTURE_VOLUME; if (fs_emu_audio_get_mute()) { //texture = g_tex_volume_mute; texture = TEXTURE_VOLUME_MUTED; } render_top_item_background(selected, x, y, 80, 60); //fs_emu_texture_render(texture, x, y); fs_gl_blending(1); fs_gl_color4f(1.0, 1.0, 1.0, 1.0); fs_emu_draw_texture(texture, x + 8, y - 2); } return; } x = x - 80; if (index == 3) { if (mode == 0) { //fs_emu_texture *texture = NULL; int texture = TEXTURE_STRETCH; if (fs_emu_video_get_aspect_correction()) { //texture = g_tex_aspect_correct; texture = TEXTURE_ASPECT; } //else { // texture = g_tex_aspect_stretch; //} render_top_item_background(selected, x, y, 80, 60); //fs_emu_texture_render(texture, x, y); fs_gl_blending(1); fs_gl_color4f(1.0, 1.0, 1.0, 1.0); fs_emu_draw_texture(texture, x + 8, y - 2); } return; } } void fs_emu_menu_render(double transition) { initialize(); fs_gl_ortho_hd(); glPushMatrix(); glTranslatef((1.0 - transition) * 600, 0, 0); fs_gl_blending(1); fs_gl_color4f(1.0, 1.0, 1.0, 1.0); fs_emu_draw_texture(TEXTURE_SIDEBAR_EDGE, 1920 - 600, 0); fs_emu_draw_texture_with_size(TEXTURE_SIDEBAR, 1920 - 600 + 50, 0, 600 - 50, 1020); render_sidebar(0); render_sidebar(1); glPopMatrix(); glPushMatrix(); glTranslatef(0, (1.0 - transition) * 60.0, 0); /* glTranslatef(0, (1.0 - transition) * g_tex_top_background->height, 0); fs_emu_set_texture(g_tex_top_background); fs_emu_render_texture_with_size(g_tex_top_background, 0, 1080 - g_tex_top_background->height, 1920, g_tex_top_background->height); */ for (int i = 0; i < g_top_menu->count; i++) { render_top_item(0, i); } const char *title; if (g_fs_emu_title) { title = g_fs_emu_title; } else { title = fs_get_application_name(); } int w = fs_emu_font_render(g_font_title, title, 20, 1080 - 60 + (60 - g_font_title->h) / 2, 1.0, 1.0, 1.0, 1.0); if (g_fs_emu_sub_title) { fs_emu_font_render(g_font_title, g_fs_emu_sub_title, 20 + w + 20, 1080 - 60 + (60 - g_font_title->h) / 2, 0.4, 0.4, 0.4, 0.4); } for (int i = 0; i < g_top_menu->count; i++) { render_top_item(1, i); } glPopMatrix(); } void fs_emu_menu_toggle() { fs_emu_log("fs_emu_toggle_menu\n"); if (g_fs_emu_menu_mode) { // leave menu g_fs_emu_menu_mode = 0; //fs_emu_pause(0); } else { // enter menu // go back to top-level menu while (g_menu_stack) { go_back_in_menu_stack(); } //fs_emu_pause(1); g_fs_emu_menu_mode = 1; if (g_menu) { if (g_menu->update) { g_menu->update(g_menu); } } } } fs-uae-2.2.3+dfsg/libfsemu/src/emu/util.h0000644000175000017500000000101212162366654020357 0ustar glaubitzglaubitz#ifndef LIBFSEMU_UTIL_H_ #define LIBFSEMU_UTIL_H_ #include #include typedef struct fs_emu_stat_queue_ { int seq_no; int count; int max_count; int clear; //int max; //int min; int64_t total; //GList *list; //GList *last; fs_queue* queue; } fs_emu_stat_queue; void fs_emu_stat_queue_init(fs_emu_stat_queue* stat_queue, int count); void fs_emu_stat_queue_add_entry(fs_emu_stat_queue* stat_queue, int data, int threshold); #endif // LIBFSEMU_UTIL_H_ fs-uae-2.2.3+dfsg/libfsemu/src/emu/emu_lua.h0000644000175000017500000000036412162366654021042 0ustar glaubitzglaubitz#ifndef LIBFSEMU_EMU_LUA_H_ #define LIBFSEMU_EMU_LUA_H_ #ifdef WITH_LUA #include void fs_emu_lua_init(void); void fs_emu_lua_log_error(const char *msg); extern lua_State *fs_emu_lua_state; #endif #endif // LIBFSEMU_EMU_LUA_H_ fs-uae-2.2.3+dfsg/libfsemu/src/emu/keynames.c0000644000175000017500000000514212162366654021221 0ustar glaubitzglaubitzconst char* g_fs_emu_key_names[] = { "", "", "", "", "", "", "", "", "BACKSPACE", "TAB", "", "", "CLEAR", "RETURN", "", "", "", "", "", "PAUSE", "", "", "", "", "", "", "", "ESCAPE", "", "", "", "", "SPACE", "EXCLAIM", "QUOTEDBL", "HASH", "DOLLAR", "", "AMPERSAND", "QUOTE", "LEFTPAREN", "RIGHTPAREN", "ASTERISK", "PLUS", "COMMA", "MINUS", "PERIOD", "SLASH", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "COLON", "SEMICOLON", "LESS", "EQUALS", "GREATER", "QUESTION", "AT", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "LEFTBRACKET", "BACKSLASH", "RIGHTBRACKET", "CARET", "UNDERSCORE", "BACKQUOTE", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "", "", "", "", "DELETE", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "WORLD_0", "WORLD_1", "WORLD_2", "WORLD_3", "WORLD_4", "WORLD_5", "WORLD_6", "WORLD_7", "WORLD_8", "WORLD_9", "WORLD_10", "WORLD_11", "WORLD_12", "WORLD_13", "WORLD_14", "WORLD_15", "WORLD_16", "WORLD_17", "WORLD_18", "WORLD_19", "WORLD_20", "WORLD_21", "WORLD_22", "WORLD_23", "WORLD_24", "WORLD_25", "WORLD_26", "WORLD_27", "WORLD_28", "WORLD_29", "WORLD_30", "WORLD_31", "WORLD_32", "WORLD_33", "WORLD_34", "WORLD_35", "WORLD_36", "WORLD_37", "WORLD_38", "WORLD_39", "WORLD_40", "WORLD_41", "WORLD_42", "WORLD_43", "WORLD_44", "WORLD_45", "WORLD_46", "WORLD_47", "WORLD_48", "WORLD_49", "WORLD_50", "WORLD_51", "WORLD_52", "WORLD_53", "WORLD_54", "WORLD_55", "WORLD_56", "WORLD_57", "WORLD_58", "WORLD_59", "WORLD_60", "WORLD_61", "WORLD_62", "WORLD_63", "WORLD_64", "WORLD_65", "WORLD_66", "WORLD_67", "WORLD_68", "WORLD_69", "WORLD_70", "WORLD_71", "WORLD_72", "WORLD_73", "WORLD_74", "WORLD_75", "WORLD_76", "WORLD_77", "WORLD_78", "WORLD_79", "WORLD_80", "WORLD_81", "WORLD_82", "WORLD_83", "WORLD_84", "WORLD_85", "WORLD_86", "WORLD_87", "WORLD_88", "WORLD_89", "WORLD_90", "WORLD_91", "WORLD_92", "WORLD_93", "WORLD_94", "WORLD_95", "KP0", "KP1", "KP2", "KP3", "KP4", "KP5", "KP6", "KP7", "KP8", "KP9", "KP_PERIOD", "KP_DIVIDE", "KP_MULTIPLY", "KP_MINUS", "KP_PLUS", "KP_ENTER", "KP_EQUALS", "UP", "DOWN", "RIGHT", "LEFT", "INSERT", "HOME", "END", "PAGEUP", "PAGEDOWN", "F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "F10", "F11", "F12", "F13", "F14", "F15", "", "", "", "NUMLOCK", "CAPSLOCK", "SCROLLOCK", "RSHIFT", "LSHIFT", "RCTRL", "LCTRL", "RALT", "LALT", "RMETA", "LMETA", "LSUPER", "RSUPER", "MODE", "COMPOSE", "HELP", "PRINT", "SYSREQ", "BREAK", "MENU", "POWER", "EURO", "UNDO", NULL, }; fs-uae-2.2.3+dfsg/libfsemu/src/emu/theme.h0000644000175000017500000000274612162366654020523 0ustar glaubitzglaubitz#ifndef LIBFSEMU_THEME_H_ #define LIBFSEMU_THEME_H_ #include "texture.h" #define FS_EMU_MAX_OVERLAYS 32 #define FS_EMU_MAX_OVERLAY_STATES 5 enum { FS_EMU_TOP_LEFT_OVERLAY, FS_EMU_TOP_RIGHT_OVERLAY, FS_EMU_BOTTOM_RIGHT_OVERLAY, FS_EMU_BOTTOM_LEFT_OVERLAY, FS_EMU_VSYNC_LED_OVERLAY, FS_EMU_FPS_LED_OVERLAY, FS_EMU_AUDIO_LED_OVERLAY, FS_EMU_FIRST_CUSTOM_OVERLAY, }; #define FS_EMU_ANCHOR_RIGHT_BIT 1 #define FS_EMU_ANCHOR_BOTTOM_BIT 2 #define FS_EMU_ANCHOR_TOP_LEFT 0 #define FS_EMU_ANCHOR_TOP_RIGHT (FS_EMU_ANCHOR_RIGHT_BIT) #define FS_EMU_ANCHOR_BOTTOM_RIGHT (FS_EMU_ANCHOR_BOTTOM_BIT | \ FS_EMU_ANCHOR_RIGHT_BIT) #define FS_EMU_ANCHOR_BOTTOM_LEFT (FS_EMU_ANCHOR_BOTTOM_BIT) typedef struct fs_emu_theme_overlay { char *name; fs_emu_texture *textures[FS_EMU_MAX_OVERLAY_STATES]; float x; float y; float w; float h; int anchor; } fs_emu_theme_overlay; struct fs_emu_theme { char *name; int width; int height; char *path; float wall_color_1[4]; float wall_color_2[4]; float floor_color_1[4]; float floor_color_2[4]; int floor_height; char *overlay_image; float fade_color[4]; float heading_color[4]; float item_color[4]; fs_emu_theme_overlay overlays[FS_EMU_MAX_OVERLAYS]; }; void fs_emu_theme_init(); char *fs_emu_theme_get_resource(const char *name); void fs_emu_set_overlay_state(int overlay, int state); extern struct fs_emu_theme g_fs_emu_theme; #endif // LIBFSEMU_THEME_H_ fs-uae-2.2.3+dfsg/libfsemu/src/emu/audio_sdl.c0000644000175000017500000000035512162366654021351 0ustar glaubitzglaubitz#ifdef USE_SDL #include "audio.h" static void sdl_audio_init() { } static void sdl_audio_shutdown() { } fs_emu_audio_driver g_fs_emu_audio_sdl_driver = { "sdl", sdl_audio_init, sdl_audio_shutdown, }; #endif // USE_SDL fs-uae-2.2.3+dfsg/libfsemu/src/emu/video_buffer.c0000644000175000017500000001257012162366654022047 0ustar glaubitzglaubitz#include #include #include #include #include "libfsemu.h" #include "video.h" static fs_mutex* g_video_buffers_mutex = NULL; static fs_emu_video_buffer g_video_buffers[3] = {}; static int g_video_buffers_initialized = 0; static int g_video_buffer_next = 0; static fs_emu_video_buffer *g_video_buffer_current = g_video_buffers; static fs_emu_video_buffer *g_video_buffer_locked = NULL; int fs_emu_video_buffer_init(int width, int height, int bpp) { // should only be called once, currently if (g_video_buffers_initialized) { return 0; } if (bpp == 0) { bpp = g_fs_emu_video_bpp; } for (int i = 0; i < 3; i++) { g_video_buffers[i].width = width; g_video_buffers[i].height = height; g_video_buffers[i].bpp = bpp; g_video_buffers[i].size = width * height * bpp; g_video_buffers[i].data = fs_malloc0(g_video_buffers[i].size); //memset(g_video_buffers[i].data, 0, g_video_buffers[i].size); g_video_buffers[i].aspect = 1.0; //g_video_buffers[i].buffer_width = width; //g_video_buffers[i].buffer_height = height; } g_video_buffers_mutex = fs_mutex_create(); g_video_buffers_initialized = 1; return 1; } static int get_next_video_buffer() { g_video_buffer_next++; g_video_buffer_next = g_video_buffer_next % 3; if (g_video_buffers + g_video_buffer_next == g_video_buffer_locked) { g_video_buffer_next++; g_video_buffer_next = g_video_buffer_next % 3; } return g_video_buffer_next; } fs_emu_video_buffer *fs_emu_video_buffer_get_current() { return g_video_buffer_current; } /* fs_emu_video_buffer *fs_emu_swap_offscreen_video_buffers() { get_next_video_buffer(); } */ fs_emu_video_buffer *fs_emu_video_buffer_get_available(int copy) { fs_mutex_lock(g_video_buffers_mutex); int next_buffer = get_next_video_buffer(); fs_mutex_unlock(g_video_buffers_mutex); // FIXME: REMOVE //memset((g_video_buffers + next_buffer)->data, 0x0, // (g_video_buffers + next_buffer)->size); if (copy) { if (g_video_buffer_current) { memcpy((g_video_buffers + next_buffer)->data, g_video_buffer_current->data, (g_video_buffers + next_buffer)->size); } else { memset((g_video_buffers + next_buffer)->data, 0x0, (g_video_buffers + next_buffer)->size); } } return g_video_buffers + next_buffer; } fs_emu_video_buffer *fs_emu_video_buffer_lock() { fs_mutex_lock(g_video_buffers_mutex); g_video_buffer_locked = g_video_buffer_current; fs_mutex_unlock(g_video_buffers_mutex); return g_video_buffer_locked; } void fs_emu_video_buffer_unlock() { fs_mutex_lock(g_video_buffers_mutex); g_video_buffer_locked = NULL; fs_mutex_unlock(g_video_buffers_mutex); } int fs_emu_video_buffer_grow(fs_emu_video_buffer *buffer, int width, int height) { int needed_size = width * height * buffer->bpp; if (buffer->size >= needed_size) { return 0; } fs_log("fs_emu_grow_render_buffer %dx%d (%d bytes)\n", width, height, needed_size); free(buffer->data); buffer->size = needed_size; buffer->data = fs_malloc0(buffer->size); return 1; } void copy_buffer_data(fs_emu_video_buffer *new_buffer, fs_emu_video_buffer *old_buffer) { if (!old_buffer) { return; } int src_stride = old_buffer->width * old_buffer->bpp; int dst_stride = new_buffer->width * new_buffer->bpp; unsigned char *src, *dst; int width; int first_line, last_line; //int crop = g_fs_emu_video_crop_mode; int crop = 0; // calculate copy parameters if (crop) { width = new_buffer->crop.w; first_line = new_buffer->crop.y; last_line = new_buffer->crop.y + new_buffer->crop.h - 1; src = old_buffer->data + src_stride * first_line + \ new_buffer->crop.x * g_fs_emu_video_bpp; dst = new_buffer->data + dst_stride * first_line + \ new_buffer->crop.x * g_fs_emu_video_bpp; } else { // no cropping; must copy the entire line width = new_buffer->width; first_line = 0; last_line = new_buffer->height - 1; src = old_buffer->data; dst = new_buffer->data; } // actually copy the lines for (int y = first_line; y <= last_line; y++) { if (new_buffer->line[y]) { memcpy(dst, src, width * g_fs_emu_video_bpp); } src += src_stride; dst += dst_stride; } } void fs_emu_video_buffer_update_lines(fs_emu_video_buffer *buffer) { // lines which are not updated in this frame are copied from the last // completed video frame copy_buffer_data(buffer, g_video_buffer_current); } void fs_emu_video_buffer_set_current(fs_emu_video_buffer *buffer) { if (buffer == NULL) { return; } if (g_fs_emu_benchmark_start_time > 0) { g_fs_emu_total_emu_frames++; } fs_emu_update_video_stats_1(); fs_ml_frame_update_begin(buffer->seq); fs_mutex_lock(g_video_buffers_mutex); g_video_buffer_current = buffer; fs_mutex_unlock(g_video_buffers_mutex); fs_ml_frame_update_end(buffer->seq); fs_emu_update_video_stats_2(); /* fs_ml_lock_buffer_swap(); fs_ml_signal_buffer_swap(); fs_ml_unlock_buffer_swap(); */ } fs-uae-2.2.3+dfsg/libfsemu/src/emu/texture.h0000644000175000017500000000177212162366654021117 0ustar glaubitzglaubitz#ifndef LIBFSEMU_TEXTURE_H_ #define LIBFSEMU_TEXTURE_H_ #include "fs/image.h" #define TEXTURE_GLOSS 1 #define TEXTURE_GLOW_LEFT 2 #define TEXTURE_GLOW_TOP_LEFT 3 #define TEXTURE_GLOW_TOP 4 #define TEXTURE_SIDEBAR 5 #define TEXTURE_SIDEBAR_EDGE 6 #define TEXTURE_CLOSE 7 #define TEXTURE_VOLUME 8 #define TEXTURE_VOLUME_MUTED 9 #define TEXTURE_ASPECT 10 #define TEXTURE_STRETCH 11 #define TEXTURE_ITEM_BACKGROUND 12 #define TEXTURE_TOP_ITEM_BG 13 #define TEXTURE_HEADING_BG 14 #define TEXTURE_PAUSE 15 #define TEXTURE_LAST 16 typedef struct _fs_emu_texture { unsigned int texture; unsigned int width; unsigned int height; fs_image* image; int opengl_context_stamp; } fs_emu_texture; fs_emu_texture *fs_emu_texture_new_from_file(const char *name); void fs_emu_set_texture(fs_emu_texture* texture); void fs_emu_texture_render(fs_emu_texture *texture, int x, int y); void fs_emu_render_texture_with_size(fs_emu_texture *texture, int x, int y, int w, int h); #endif // LIBFSEMU_TEXTURE_H_ fs-uae-2.2.3+dfsg/libfsemu/src/emu/xml_shader.c0000644000175000017500000010774512162366654021547 0ustar glaubitzglaubitz#include "xml_shader.h" #ifdef WITH_XML_SHADER #include #include #include #include #include #include #include #include #include #include #include "libfsemu.h" #ifdef USE_GLIB #include #endif #ifdef WITH_LUA #include "emu_lua.h" #endif #define debug_printf(format, ...) //#define debug_printf printf #define FILTERING_NOTSET 0 #define FILTERING_NEAREST 1 #define FILTERING_LINEAR 2 #define SCALING_NOTSET 0 #define SCALING_FIXED 1 #define SCALING_INPUT 2 #define SCALING_OUTPUT 3 typedef struct shader_pass { int filtering; int hor_scale_method; float hor_scale_value; int ver_scale_method; float ver_scale_value; GLuint program; GLuint texture; GLuint frame_buffer; } shader_pass; typedef struct fs_emu_shader { char *path; int ok; fs_list *passes; fs_list *current_shaders; } fs_emu_shader; //static int g_shader_ok; //static fs_list *g_shader_passes = NULL; //static fs_list *g_current_shaders = NULL; static fs_emu_shader *g_active_shader = NULL; #define MAX_TEXT_SIZE 65536 typedef struct { gint tag_count; } CounterData; #define A_FILTER (1 << 0) #define A_SIZE_X (1 << 1) #define A_SIZE_Y (1 << 2) #define A_SIZE (1 << 3) #define A_SCALE_X (1 << 4) #define A_SCALE_Y (1 << 5) #define A_SCALE (1 << 6) #define A_OUTSCALE_X (1 << 7) #define A_OUTSCALE_Y (1 << 8) #define A_OUTSCALE (1 << 9) typedef struct parse_data { char *buffer; int length; int error; int flags; char *filter; int size_x; int size_y; int size; float scale_x; float scale_y; float scale; float outscale_x; float outscale_y; float outscale; fs_emu_shader *shader; } parse_data; static void on_start_element(GMarkupParseContext *context, const gchar *element_name, const gchar **attribute_names, const gchar **attribute_values, gpointer user_data, GError **error) { debug_printf("element %s\n", element_name); if (strcmp(element_name, "fragment") == 0) { } else if (strcmp(element_name, "vertex") == 0) { } else { return; } parse_data *data = user_data; data->length = 0; data->flags = 0; const gchar **v = attribute_values; for (const gchar **k = attribute_names; *k; k++, v++) { if (strcmp(*k, "filter") == 0) { data->filter = fs_strdup(*v); data->flags |= A_FILTER; } else if (strcmp(*k, "size_x") == 0) { data->size_x = atoi(*v); data->flags |= A_SIZE_X; } else if (strcmp(*k, "size_y") == 0) { data->size_y = atoi(*v); data->flags |= A_SIZE_Y; } else if (strcmp(*k, "size") == 0) { data->size = atoi(*v); data->flags |= A_SIZE; } else if (strcmp(*k, "scale_x") == 0) { data->scale_x = atof(*v); data->flags |= A_SCALE_X; } else if (strcmp(*k, "scale_y") == 0) { data->scale_y = atof(*v); data->flags |= A_SCALE_Y; } else if (strcmp(*k, "scale") == 0) { data->scale = atof(*v); data->flags |= A_SCALE; } else if (strcmp(*k, "outscale_x") == 0) { data->outscale_x = atof(*v); data->flags |= A_OUTSCALE_X; } else if (strcmp(*k, "outscale_y") == 0) { data->outscale_y = atof(*v); data->flags |= A_OUTSCALE_Y; } else if (strcmp(*k, "outscale") == 0) { data->outscale = atof(*v); data->flags |= A_OUTSCALE; } } } static void on_text(GMarkupParseContext *context, const gchar *text, gsize text_len, gpointer user_data, GError **error) { char *value = g_strndup(text, text_len); g_strstrip(value); int value_len = strlen(value); //debug_printf("text: (%d) %s\n", value_len, value); if (value_len > 0) { parse_data *data = user_data; if (data->length + value_len > MAX_TEXT_SIZE) { fs_log("shader text length is too big\n"); data->error = 1; } else { if (!data->error) { strncpy(data->buffer + data->length, value, value_len); data->length += value_len; } } } g_free(value); } static void log_shader_error(int shader) { GLint info_length = 0; glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &info_length); if (info_length > 0) { char *buffer = (char *) malloc(info_length + 1); GLsizei length; glGetShaderInfoLog(shader, info_length, &length, buffer); buffer[length] = 0; fs_emu_log("%s\n", buffer); free(buffer); } else { fs_log("GL_INFO_LENGTH was %d\n", info_length); } } #define HASATTR(name) ((data->flags & A_ ## name)) static void handle_element(parse_data *data, const char *element, const char *text) { if (data->error) { return; } //int node = 0; int vertex_shader = 0; //int fragment_shader = 0; if (strcmp(element, "vertex") == 0) { vertex_shader = 1; } else if (strcmp(element, "fragment") == 0) { //fragment_shader = 1; } else { // If the element's name is not vertex or fragment, end this // iteration of the loop and go immediately to the next iteration. return; } if (vertex_shader) { if (data->shader->current_shaders != NULL) { // If "the current list of shaders" is not empty, this shader // file is invalid. Abort this algorithm, do not continue // trying to load the file. Host applications should alert // the user that there was a problem loading the shader. fs_emu_warning("Error (1) loading shader"); data->error = 1; return; } // Take the text content of this element, compile it as a vertex // shader. const GLchar *source = data->buffer; GLuint shader = glCreateShader(GL_VERTEX_SHADER); CHECK_GL_ERROR(); glShaderSource(shader, 1, &source, NULL); CHECK_GL_ERROR(); glCompileShader(shader); CHECK_GL_ERROR(); // Check the compilation status of the new shader. If compilation // failed, this shader file is invalid. Abort this algorithm, do not // continue trying to load the file. Host applications should alert the // user that there was a problem loading the file. GLint compile_status; glGetShaderiv(shader, GL_COMPILE_STATUS, &compile_status); CHECK_GL_ERROR(); if (compile_status == GL_FALSE) { fs_emu_warning("failed to compile vertex shader"); log_shader_error(shader); data->error = 1; return; } else { fs_log("compiled vertex shader successfully\n"); } data->shader->current_shaders = fs_list_append( data->shader->current_shaders, FS_UINT_TO_POINTER(shader)); return; } // If the element has more than one attribute from the set // {size, size_x, scale, scale_x, outscale, outscale_x}, this shader file // is invalid. Abort this algorithm, do not continue trying to load the // file. Host applications should alert the user that there was a // problem loading the file. int count = 0; if (HASATTR(SIZE)) count++; if (HASATTR(SIZE_X)) count++; if (HASATTR(SCALE)) count++; if (HASATTR(SCALE_X)) count++; if (HASATTR(OUTSCALE)) count++; if (HASATTR(OUTSCALE_X)) count++; if (count > 1) { fs_emu_warning("Error (3) loading shader"); data->error = 1; return; } // If the element has more than one attribute from the set // {size, size_y, scale, scale_y, outscale, outscale_y}, this shader file // is invalid. Abort this algorithm, do not continue trying to load the // file. Host applications should alert the user that there was a // problem loading the file. count = 0; if (HASATTR(SIZE)) count++; if (HASATTR(SIZE_Y)) count++; if (HASATTR(SCALE)) count++; if (HASATTR(SCALE_Y)) count++; if (HASATTR(OUTSCALE)) count++; if (HASATTR(OUTSCALE_Y)) count++; if (count > 1) { fs_emu_warning("Error (4) loading shader"); data->error = 1; return; } int cur_hor_scale_method = SCALING_NOTSET; float cur_hor_scale_value = 0; if (HASATTR(SIZE)) { cur_hor_scale_method = SCALING_FIXED; cur_hor_scale_value = data->size; } else if (HASATTR(SIZE_X)) { cur_hor_scale_method = SCALING_FIXED; cur_hor_scale_value = data->size_x; } else if (HASATTR(SCALE)) { cur_hor_scale_method = SCALING_INPUT; cur_hor_scale_value = data->scale; } else if (HASATTR(SCALE_X)) { cur_hor_scale_method = SCALING_INPUT; cur_hor_scale_value = data->scale_x; } else if (HASATTR(OUTSCALE)) { cur_hor_scale_method = SCALING_OUTPUT; cur_hor_scale_value = data->outscale; } else if (HASATTR(OUTSCALE_X)) { cur_hor_scale_method = SCALING_OUTPUT; cur_hor_scale_value = data->outscale_x; } int cur_ver_scale_method = SCALING_NOTSET; float cur_ver_scale_value = 0; if (HASATTR(SIZE)) { cur_ver_scale_method = SCALING_FIXED; cur_ver_scale_value = data->size; } else if (HASATTR(SIZE_Y)) { cur_ver_scale_method = SCALING_FIXED; cur_ver_scale_value = data->size_y; } else if (HASATTR(SCALE)) { cur_ver_scale_method = SCALING_INPUT; cur_ver_scale_value = data->scale; } else if (HASATTR(SCALE_Y)) { cur_ver_scale_method = SCALING_INPUT; cur_ver_scale_value = data->scale_y; } else if (HASATTR(OUTSCALE)) { cur_ver_scale_method = SCALING_OUTPUT; cur_ver_scale_value = data->outscale; } else if (HASATTR(OUTSCALE_Y)) { cur_ver_scale_method = SCALING_OUTPUT; cur_ver_scale_value = data->outscale_y; } // Take the text content of this element, compile it as a fragment shader const GLchar *source = data->buffer; GLuint shader = glCreateShader(GL_FRAGMENT_SHADER); CHECK_GL_ERROR(); glShaderSource(shader, 1, &source, NULL); CHECK_GL_ERROR(); glCompileShader(shader); CHECK_GL_ERROR(); // Check the compilation status of the new shader. If compilation // failed, this shader file is invalid. Abort this algorithm, do not // continue trying to load the file. Host applications should alert the // user that there was a problem loading the file. GLint compile_status; glGetShaderiv(shader, GL_COMPILE_STATUS, &compile_status); CHECK_GL_ERROR(); if (compile_status == GL_FALSE) { fs_emu_warning("failed to compile fragment shader"); log_shader_error(shader); data->error = 1; return; } else { fs_log("compiled fragment shader successfully\n"); } // Add the shader handle to the current list of shaders. data->shader->current_shaders = fs_list_append( data->shader->current_shaders, FS_UINT_TO_POINTER(shader)); // Take the shader-handles from the current list of shaders and link // them into a shader program. GLuint program = glCreateProgram(); CHECK_GL_ERROR(); if (program == 0) { fs_emu_warning("failed to create shader program"); data->error = 1; return; } fs_list *link = data->shader->current_shaders; while (link) { GLuint shader = GPOINTER_TO_UINT(link->data); glAttachShader(program, shader); // schedule shader for deletion so it will be deleted when the // program is deleted glDeleteShader(shader); fs_list *temp = link; link = link->next; fs_list_free_1(temp); } data->shader->current_shaders = NULL; glLinkProgram(program); CHECK_GL_ERROR(); // Validate the new shader program. If validation failed, this shader // file is invalid. Abort this algorithm, do not continue trying to load // the file. Host applications should alert the user that there was a // problem loading the file. // Check the link status of the new shader program. If linking failed, // this shader file is invalid. Abort this algorithm, do not continue // trying to load the file. Host applications should alert the user // that there was a problem loading the file. GLint link_status; glGetProgramiv(program, GL_LINK_STATUS, &link_status); CHECK_GL_ERROR(); if (link_status == GL_FALSE) { fs_emu_warning("failed to link shader pass"); data->error = 1; return; } else { fs_log("linked shader program successfully\n"); } // Create a new shader pass from the new shader program handle, // the value of the filter attribute of the current element, the // current horizontal scale method, the current horizontal scale value, // the current vertical scale method and the current vertical scale value. shader_pass *pass = g_new0(shader_pass, 1); pass->program = program; pass->ver_scale_method = cur_ver_scale_method; pass->ver_scale_value = cur_ver_scale_value; pass->hor_scale_method = cur_hor_scale_method; pass->hor_scale_value = cur_hor_scale_value; pass->filtering = FILTERING_NOTSET; if (data->filter) { if (strcmp(data->filter, "nearest") == 0) { pass->filtering = FILTERING_NEAREST; } else if (strcmp(data->filter, "linear") == 0) { pass->filtering = FILTERING_LINEAR; } } // Add the shader pass to the list of shader passes. data->shader->passes = fs_list_append(data->shader->passes, pass); } static void on_end_element(GMarkupParseContext *context, const gchar *element_name, gpointer user_data, GError **error) { debug_printf("on_end_element %s\n", element_name); if (strcmp(element_name, "fragment") == 0) { } else if (strcmp(element_name, "vertex") == 0) { } else { return; } parse_data *data = user_data; data->buffer[data->length] = 0; if (data->error) { } else { debug_printf("%s\n", data->buffer); handle_element(data, element_name, data->buffer); } if (data->filter) { g_free(data->filter); data->filter = NULL; } } static void on_error(GMarkupParseContext *context, GError *error, gpointer user_data) { fs_log("on_error\n"); } static GMarkupParser counter_subparser = { on_start_element, on_end_element, on_text, NULL, on_error }; void fs_emu_load_shader(fs_emu_shader *shader); static void context_notification_handler(int notification, void *data) { static int recreate = 0; fs_emu_shader *shader = (fs_emu_shader *) data; if (notification == FS_GL_CONTEXT_DESTROY) { fs_log("FS_GL_CONTEXT_DESTROY handler for shader\n"); fs_list *link = shader->passes; if (shader->passes == NULL) { return; } printf("destroying shaders\n"); fs_log("destroying shaders\n"); while (link) { shader_pass *pass = link->data; glDeleteProgram(pass->program); g_free(pass); fs_list *delete_link = link; link = link->next; fs_list_free_1(delete_link); } recreate = 1; shader->passes = NULL; } else if (notification == FS_GL_CONTEXT_CREATE) { fs_log("FS_GL_CONTEXT_CREATE handler for shader\n"); if (recreate) { fs_emu_load_shader(shader); } } } void fs_emu_load_shader(fs_emu_shader *shader) { parse_data *data = g_new0(parse_data, 1); data->shader = shader; data->buffer = malloc(MAX_TEXT_SIZE); GMarkupParseContext *context = g_markup_parse_context_new( &counter_subparser, G_MARKUP_TREAT_CDATA_AS_TEXT, data, NULL); FILE *f = fs_fopen(data->shader->path, "rb"); if (f == NULL) { fs_log("could not open shader file\n"); return; } char *buffer = malloc(8192); int read = fread(buffer, 1, 8192, f); while (read > 0) { g_markup_parse_context_parse(context, buffer, read, NULL); read = fread(buffer, 1, 8192, f); } fclose(f); free(buffer); // If the list of shader passes is empty, this shader file is invalid. // Abort this algorithm, do not continue trying to load the file. Host // applications should alert the user that there was a problem loading // the file. if (data->shader->passes == NULL) { fs_emu_warning("no shader passes loaded"); data->shader->ok = 0; } else if (data->error) { fs_emu_warning("error occured while loading shader"); data->shader->ok = 0; } else { fs_log("shader ok\n"); data->shader->ok = 1; } free(data->buffer); free(data); g_markup_parse_context_free(context); CHECK_GL_ERROR(); fs_log("done loading shader\n"); //exit(1); } static char *find_shader(const char *name) { //char *path = fs_strdup(name); fs_log("checking shader %s\n", name); if (fs_path_exists(name)) { return fs_strdup(name); } char *name2 = fs_strconcat(name, ".shader", NULL); char *path = fs_path_join("shaders", name2, NULL); free(name2); fs_log("checking shader (share)/%s\n", path); char *path2 = fs_get_program_data_file(path); free(path); if (path2) { return path2; } return NULL; } static void fs_emu_load_default_shader() { const char *name = fs_config_get_const_string("shader"); if (!name) { return; } char *path = find_shader(name); if (!path) { fs_emu_warning(_("Shader not found: %s"), name); return; } fs_emu_shader *shader= g_new0(fs_emu_shader, 1); shader->path = path; fs_emu_load_shader(shader); fs_gl_add_context_notification(context_notification_handler, shader); g_active_shader = shader; } static int g_frame_count = 0; static int g_cur_input_w = 0; static int g_cur_input_h = 0; static int g_cur_texture_w = 0; static int g_cur_texture_h = 0; static GLuint g_cur_texture = 0; static int g_orig_input_w = 0; static int g_orig_input_h = 0; static int g_orig_texture_w = 0; static int g_orig_texture_h = 0; static GLuint g_orig_texture = 0; static int g_final_output_w = 0; static int g_final_output_h = 0; static int g_requires_implicit_pass = 0; static float g_x1, g_x2, g_y1, g_y2; static float g_alpha; static int g_render_textured_side = 0; static void render_quad(float s2, float t1, float t2, int first, int last, int flip) { float x1 = -1.0; float x2 = 1.0; float y1 = -1.0; float y2 = 1.0; if (last) { float t3 = t1; t1 = t2; t2 = t3; x1 = g_x1; x2 = g_x2; y1 = g_y1; y2 = g_y2; if (g_render_textured_side) { fs_gl_color4f(0.33 * g_alpha, 0.33 * g_alpha, 0.33 * g_alpha, g_alpha); glBegin(GL_QUADS); glTexCoord2f(0.0, t1); glVertex3f(-1.0, g_y1, -0.1); glTexCoord2f(0.0, t1); glVertex3f(-1.0, g_y1, 0.0); glTexCoord2f(0.0, t2); glVertex3f(-1.0, g_y2, 0.0); glTexCoord2f(0.0, t2); glVertex3f(-1.0, g_y2, -0.1); glEnd(); } fs_gl_color4f(g_alpha, g_alpha, g_alpha, g_alpha); } glBegin(GL_QUADS); glTexCoord2f(0.0, t1); glVertex2f(x1, y1); glTexCoord2f( s2, t1); glVertex2f(x2, y1); glTexCoord2f( s2, t2); glVertex2f(x2, y2); glTexCoord2f(0.0, t2); glVertex2f(x1, y2); glEnd(); } static int round_up_pow2(int val) { // simple implementation, but works int x = 1; while (x < val) { x = x << 1; } return x; } static void render_pass(shader_pass *pass, int first, int last) { int output_w = -1; int output_h = -1; debug_printf("\n"); // If the horizontal scale method is fixed, set the output width to // the horizontal scale value. if (pass->hor_scale_method == SCALING_FIXED) { output_w = pass->hor_scale_value; } // If the horizontal scale method is input, set the output width to the // horizontal component of the current input size, multiplied by // the horizontal scale value. else if (pass->hor_scale_method == SCALING_INPUT) { output_w = g_cur_input_w * pass->hor_scale_value; } // If the horizontal scale method is output, set the output width to the // horizontal component of the final output size, multiplied by the // horizontal scale value. else if (pass->hor_scale_method == SCALING_OUTPUT) { output_w = g_final_output_w * pass->hor_scale_value; } // If this is the first shader pass, and the output width is not yet set, // the host application may set the output width to an arbitrary value. else if (first && !last) { output_w = 1024; debug_printf("setting output width to arbitrary value %d\n", output_w); } // If this is the last shader pass: if (last) { // If the output width is already set, set requires implicit // pass to True. if (output_w > 0) { g_requires_implicit_pass = 1; } // If the output width is not yet set, set the output width to // the horizontal component of the final output size. else { output_w = g_final_output_w; } } // Otherwise, set the output width to the horizontal component of // the current input size. if (output_w < 0) { output_w = g_cur_input_w; } // If the vertical scale method is fixed, set the output height to the // vertical scale value. if (pass->ver_scale_method == SCALING_FIXED) { output_h = pass->ver_scale_value; debug_printf("pass->ver_scale_method == SCALING_FIXED, " "output_h = %d\n", output_h); } // If the vertical scale method is input, set the output height to the // vertical component of the current input size, multiplied by the // vertical scale value. else if (pass->ver_scale_method == SCALING_INPUT) { output_h = g_cur_input_h * pass->ver_scale_value; debug_printf("pass->ver_scale_method == SCALING_INPUT, " "output_h = %d\n", output_h); } // If the vertical scale method is output, set the output height to the // vertical component of the final output size, multiplied by the vertical // scale value. else if (pass->ver_scale_method == SCALING_OUTPUT) { output_h = g_final_output_h * pass->ver_scale_value; debug_printf("pass->ver_scale_method == SCALING_OUTPUT, " "output_h = %d\n", output_h); } // If this is the first shader pass, and the output height is not yet // set, the host application may set the output height to an arbitrary // value. else if (first && !last) { output_h = 1024; debug_printf("setting output height to arbitrary value %d\n", output_h); } // If this is the last shader pass: if (last) { // If the output height is already set, set requires implicit pass // to True. if (output_h > 0) { g_requires_implicit_pass = 1; } // If the output height is not yet set, set the output height to // the vertical component of the final output size. else { output_h = g_final_output_h; } } // Otherwise, set the output height to the vertical component of the // current input size. if (output_h < 0) { output_h = g_cur_input_h; } // Calculate the output size by combining the output width and // the output height. // If this is not the last shader pass, or this is the last shader pass // and requires implicit pass is True: GLuint frame_buffer = 0; GLuint output_texture = 0; int output_texture_w = 0; int output_texture_h = 0; //g_requires_implicit_pass = 1; if (!last || g_requires_implicit_pass) { // Construct the output texture with a suitable set of dimensions // larger than the output size. if (!pass->texture) { glGenTextures(1, &pass->texture); CHECK_GL_ERROR(); } output_texture = pass->texture; output_texture_w = round_up_pow2(output_w); output_texture_h = round_up_pow2(output_h); // The following is a hack to fix compatibility with // CRT-interlaced-halation.shader which has a faulty assumption, // that rubyTextureSize and rubyOriginalTextureSize will be the // same in the final pass. The reason they may not be the same is // because of the crop / zoom function, so for example, FS-UAE may // allocate a 1024x1024 texture, but because of cropping, a // 1024x512 will be big enough for subsequent passes. if (output_texture_h < g_orig_texture_h) { output_texture_h = g_orig_texture_h; } if (output_texture_w < g_orig_texture_w) { output_texture_w = g_orig_texture_w; } fs_gl_bind_texture(output_texture); // using RGBA ensures that line size in bytes is a multiple of 4 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, output_texture_w, output_texture_h, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL); CHECK_GL_ERROR(); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); fs_gl_bind_texture(0); // Construct a framebuffer object, and bind the output texture to it // as GL_COLOR_ATTACHMENT0. // Tell OpenGL to render to the frame-buffer object. if (!pass->frame_buffer) { //debug_printf("generating frame buffer\n"); glGenFramebuffers(1, &pass->frame_buffer); CHECK_GL_ERROR(); } frame_buffer = pass->frame_buffer; glPushMatrix(); glLoadIdentity(); glMatrixMode(GL_PROJECTION); glPushMatrix(); glLoadIdentity(); debug_printf("%d %d\n", output_w, output_h); glViewport(0, 0, output_w, output_h); glBindFramebuffer(GL_FRAMEBUFFER, frame_buffer); CHECK_GL_ERROR(); glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, output_texture, 0); CHECK_GL_ERROR(); if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) { debug_printf("fbo is not complete!\n"); } glClear(GL_COLOR_BUFFER_BIT); } // Set the GL_TEXTURE_MAG_FILTER and GL_TEXTURE_MIN_FILTER parameters // of the current texture according to the filter setting in the current // shader pass. //glBindTexture(GL_TEXTURE_2D, g_cur_texture); fs_gl_bind_texture(g_cur_texture); CHECK_GL_ERROR(); if (pass->filtering == FILTERING_NEAREST) { glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); } else { glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); } //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); CHECK_GL_ERROR(); // Tell OpenGL to use the shader program handle from the current shader // pass as the active shader program. glUseProgram(pass->program); CHECK_GL_ERROR(); GLint rubyFrameCount = glGetUniformLocation(pass->program, "rubyFrameCount"); if (rubyFrameCount >= 0) { glUniform1i(rubyFrameCount, g_frame_count); } CHECK_GL_ERROR(); // Set the uniform rubyOrigTexture to the original texture. GLint rubyOrigTexture = glGetUniformLocation(pass->program, "rubyOrigTexture"); if (rubyOrigTexture >= 0) { debug_printf("set rubyOrigTexture to %d\n", 1); glUniform1i(rubyOrigTexture, 1); glActiveTexture(GL_TEXTURE1); glBindTexture(GL_TEXTURE_2D, g_orig_texture); glActiveTexture(GL_TEXTURE0); } CHECK_GL_ERROR(); // Set the uniform rubyOrigTextureSize to the original texture size. GLint rubyOrigTextureSize = glGetUniformLocation(pass->program, "rubyOrigTextureSize"); if (rubyOrigTextureSize >= 0) { debug_printf("set rubyOrigTextureSize to %dx%d\n", g_orig_texture_w, g_orig_texture_h); glUniform2f(rubyOrigTextureSize, g_orig_texture_w, g_orig_texture_h); } CHECK_GL_ERROR(); // Set the uniform rubyOrigInputSize to the original input size. GLint rubyOrigInputSize = glGetUniformLocation(pass->program, "rubyOrigInputSize"); if (rubyOrigInputSize >= 0) { debug_printf("set rubyOrigInputSize to %dx%d\n", g_orig_input_w, g_orig_input_h); glUniform2f(rubyOrigInputSize, g_orig_input_w, g_orig_input_h); } CHECK_GL_ERROR(); // Set the uniform rubyTexture to the current texture. GLint rubyTexture = glGetUniformLocation(pass->program, "rubyTexture"); if (rubyTexture >= 0) { debug_printf("set rubyTexture to %d\n", 0); glUniform1i(rubyTexture, 0); } CHECK_GL_ERROR(); // Set the uniform rubyTextureSize to the current texture size. GLint rubyTextureSize = glGetUniformLocation(pass->program, "rubyTextureSize"); if (rubyTextureSize >= 0) { debug_printf("set rubyTextureSize to %dx%d\n", g_cur_texture_w, g_cur_texture_h); glUniform2f(rubyTextureSize, g_cur_texture_w, g_cur_texture_h); } CHECK_GL_ERROR(); // Set the uniform rubyInputSize to the current input size. GLint rubyInputSize = glGetUniformLocation(pass->program, "rubyInputSize"); if (rubyInputSize >= 0) { debug_printf("set rubyInputSize to %dx%d\n", g_cur_input_w, g_cur_input_h); glUniform2f(rubyInputSize, g_cur_input_w, g_cur_input_h); } CHECK_GL_ERROR(); // Set the uniform rubyOutputSize to the output size. GLint rubyOutputSize = glGetUniformLocation(pass->program, "rubyOutputSize"); if (rubyOutputSize >= 0) { debug_printf("set rubyOutputSize to %dx%d\n", output_w, output_h); glUniform2f(rubyOutputSize, output_w, output_h); } CHECK_GL_ERROR(); // Render a quad, textured with the current texture, with a vertex at // each corner of the output size. float s2 = (float) g_cur_input_w / (float) g_cur_texture_w; float t2 = (float) g_cur_input_h / (float) g_cur_texture_h; fs_gl_bind_texture(g_cur_texture); render_quad(s2, 0.0, t2, first, last && !g_requires_implicit_pass, first); CHECK_GL_ERROR(); // Tell OpenGL not to use a shader program (i.e. glUseProgram(0)). glUseProgram(0); CHECK_GL_ERROR(); // If this is not the last shader pass, or this is the last shader pass // and requires implicit pass is True: if (!last || g_requires_implicit_pass) { // Tell OpenGL not to use the frame-buffer object. debug_printf("unbind framebuffer\n"); glBindFramebuffer(GL_FRAMEBUFFER, 0); CHECK_GL_ERROR(); glViewport(0, 0, fs_ml_video_width(), fs_ml_video_height()); glPopMatrix(); glMatrixMode(GL_MODELVIEW); glPopMatrix(); } // Set the current input size to the current output size. g_cur_input_w = output_w; g_cur_input_h = output_h; // Set the current texture size to the size of the output texture. g_cur_texture_w = output_texture_w; g_cur_texture_h = output_texture_h; // Set the current texture to the output texture. g_cur_texture = output_texture; } int fs_emu_xml_shader_is_enabled() { return g_active_shader && g_active_shader->ok; } int fs_emu_xml_shader_render(int texture, int texture_width, int texture_height, int input_width, int input_height, int output_width, int output_height, float x1, float y1, float x2, float y2, int render_textured_side, float alpha) { if (!fs_emu_xml_shader_is_enabled()) { return 0; } g_x1 = x1; g_x2 = x2; g_y1 = y1; g_y2 = y2; g_alpha = alpha; g_render_textured_side = render_textured_side; fs_gl_blending(0); fs_gl_texturing(1); fs_gl_color4f(1.0, 1.0, 1.0, 1.0); // Let the current input size be the dimensions of the video-frame // generated by the host application. g_cur_input_w = input_width; g_cur_input_h = input_height; // Calculate the current texture size as a suitable set of dimensions // larger than the current input size. g_cur_texture_w = texture_width; g_cur_texture_h = texture_height; // Calculate the final output size as the dimensions of the region of the // back-buffer where the output will be displayed to the user, measured // in pixels. g_final_output_w = output_width; g_final_output_h = output_height; // Let requires implicit pass be False. g_requires_implicit_pass = 0; // Construct the current texture, whose dimensions are the current // texture size, and draw the video-frame generated by the host // application into it. g_cur_texture = texture; debug_printf("\n\n\n\n\n"); debug_printf("cur tex %d\n", g_cur_texture); g_orig_texture = g_cur_texture; g_orig_texture_w = g_cur_texture_w; g_orig_texture_h = g_cur_texture_h; g_orig_input_w = g_cur_input_w; g_orig_input_h = g_cur_input_h; debug_printf("final output: %d %d\n", g_final_output_w, g_final_output_h); debug_printf(" input: %d %d\n", g_cur_input_w, g_cur_input_h); debug_printf(" texture: %d %d\n", g_cur_texture_w, g_cur_texture_h); // For each shader pass in the list of shader passes... fs_list *link = g_active_shader->passes; int first = 1; while (link) { shader_pass *pass = link->data; render_pass(pass, first, link->next == NULL); first = 0; link = link->next; } // If requires implicit pass is True if (g_requires_implicit_pass) { debug_printf("implicit pass, cur tex %d %d %d\n", g_cur_texture, g_cur_texture_w, g_cur_texture_h); // Render a quad, textured with the current texture, with a vertex // at each corner of the final output size. float s2 = (float) g_cur_input_w / (float) g_cur_texture_w; float t2 = (float) g_cur_input_h / (float) g_cur_texture_h; fs_gl_bind_texture(g_cur_texture); render_quad(s2, 0.0, t2, 0, 1, 0); } CHECK_GL_ERROR(); g_frame_count++; glActiveTexture(GL_TEXTURE1); glBindTexture(GL_TEXTURE_2D, 0); glActiveTexture(GL_TEXTURE0); CHECK_GL_ERROR(); return 1; } #ifdef WITH_LUA static int l_fs_emu_load_shader(lua_State *L) { const char *name = luaL_checkstring(L, 1); char *path = find_shader(name); if (!path) { lua_pushnil(L); return 1; } fs_emu_shader *shader = g_new0(fs_emu_shader, 1); shader->path = path; fs_emu_load_shader(shader); fs_gl_add_context_notification(context_notification_handler, shader); lua_pushlightuserdata(L, shader); luaL_newmetatable(L, "fs_emu_shader"); lua_setmetatable(L, -2); return 1; } static int l_fs_emu_set_shader(lua_State *L) { if (lua_isnil(L, 1)) { g_active_shader = NULL; return 0; } fs_emu_shader *shader = luaL_checkudata(L, 1, "fs_emu_shader"); g_active_shader = shader; return 0; } #endif void fs_emu_xml_shader_init(void) { fs_log("fs_emu_xml_shader_init\n"); fs_emu_load_default_shader(); #ifdef WITH_LUA lua_State *L = fs_emu_lua_state; lua_register(L, "fs_emu_load_shader", l_fs_emu_load_shader); lua_register(L, "fs_emu_set_shader", l_fs_emu_set_shader); #endif } #endif fs-uae-2.2.3+dfsg/libfsemu/src/emu/emu.c0000644000175000017500000003307712162366654020203 0ustar glaubitzglaubitz#include #include #include #include #ifdef USE_SDL #include #endif #include #include #include #include #include #include #include #ifdef USE_GLIB #include #endif #include "audio.h" #include "dialog.h" #include "emu_lua.h" #include "hud.h" #include "input.h" #include "libfsemu.h" #include "netplay.h" #include "theme.h" #include "video.h" char *g_fs_emu_title = NULL; char *g_fs_emu_sub_title = NULL; //GKeyFile *g_fs_emu_config = NULL; static fs_emu_pause_function g_pause_function = NULL; static fs_mutex *g_gui_mutex = NULL; static int g_gui_mutex_locked = 0; int g_fs_emu_throttling = 1; int g_fs_emu_full_sync_allowed = 1; int g_fs_emu_emulation_thread_running = 0; int g_fs_emu_emulation_thread_stopped = 0; void fs_emu_disable_throttling() { g_fs_emu_throttling = 0; } void fs_emu_disallow_full_sync() { // FIXME: can rename to client_inhibit_full_sync, and let it be turn // on and off g_fs_emu_full_sync_allowed = 0; } int64_t g_fs_emu_quit_time = 0; static fs_emu_simple_function g_quit_function = NULL; void fs_emu_set_quit_function(fs_ml_void_function function) { g_quit_function = function; } void *force_quit_thread(void *data) { for (int i = i; i < 5; i++) { fs_ml_usleep(1000 * 1000); } return NULL; } void on_quit() { fs_log("libfsemu:on_quit\n"); g_fs_emu_quit_time = fs_emu_monotonic_time(); if (g_quit_function) { g_quit_function(); } if (fs_thread_create(force_quit_thread, NULL) == NULL) { fs_log("WARNING: could not create force quit thread\n"); } } void fs_emu_quit() { fs_ml_quit(); } int fs_emu_is_quitting() { // FIXME: move to header file for possible inlining... return fs_ml_is_quitting(); } void fs_emu_warning(const char *format, ...) { va_list ap; va_start(ap, format); char *buffer = fs_strdup_vprintf(format, ap); va_end(ap); int len = strlen(buffer); // strip trailing newline, of any if (len > 0 && buffer[len] == '\n') { buffer[len] = '\0'; } fs_log("WARNING: %s\n", buffer); fs_emu_hud_add_console_line(buffer, 0); free(buffer); } void fs_emu_deprecated(const char *format, ...) { va_list ap; va_start(ap, format); char *buffer = fs_strdup_vprintf(format, ap); va_end(ap); int len = strlen(buffer); // strip trailing newline, if any if (len > 0 && buffer[len - 1] == '\n') { buffer[len - 1] = '\0'; } fs_log("DEPRECATED: %s\n", buffer); fs_emu_hud_add_console_line(buffer, 0); free(buffer); } const char *fs_emu_get_title() { return g_fs_emu_title; } void fs_emu_set_title(const char *title) { fs_emu_video_render_mutex_lock(); if (g_fs_emu_title) { free(g_fs_emu_title); } g_fs_emu_title = fs_strdup(title); fs_emu_video_render_mutex_unlock(); } const char *fs_emu_get_sub_title() { return g_fs_emu_sub_title; } void fs_emu_set_sub_title(const char *title) { fs_emu_video_render_mutex_lock(); if (g_fs_emu_sub_title) { free(g_fs_emu_sub_title); } g_fs_emu_sub_title = fs_strdup(title); fs_emu_video_render_mutex_unlock(); } void fs_emu_msleep(int msec) { fs_ml_usleep(msec * 1000); } void fs_emu_set_pause_function(fs_emu_pause_function function) { g_pause_function = function; } static void read_config() { char *string_result; int fullscreen = fs_config_get_boolean("fullscreen"); if (fullscreen != FS_CONFIG_NONE) { g_fs_emu_video_fullscreen = fullscreen; } g_fs_emu_video_fullscreen_mode = fs_config_get_string("fullscreen_mode"); string_result = fs_config_get_string("title"); if (string_result) { g_fs_emu_title = string_result; } string_result = fs_config_get_string("sub_title"); if (string_result) { g_fs_emu_sub_title = string_result; } } extern int g_fs_log_stdout; void fs_emu_fatal(const char *msg) { fs_emu_log("FATAL: %s\n", msg); printf("FATAL: %s\n", msg); exit(1); } static int g_pause_mode = 0; void fs_emu_pause(int pause) { if (pause == g_pause_mode) { return; } if (g_pause_function == NULL) { fs_emu_log("no pause function set"); return; } fs_emu_log("fs_menu_pause %d\n", pause); //fs_emu_grab_input(g_pause_mode == 1); g_pause_mode = pause; g_pause_function(pause); } int fs_emu_is_paused() { return g_pause_mode == 1; } /* void fs_emu_set_config(GKeyFile* config) { g_fs_emu_config = config; } */ void fs_emu_acquire_gui_lock() { fs_mutex_lock(g_gui_mutex); g_gui_mutex_locked = 1; } void fs_emu_assert_gui_lock() { if (!g_gui_mutex_locked) { fs_log("ERROR: gui mutex is not locked\n"); exit(1); } } void fs_emu_release_gui_lock() { g_gui_mutex_locked = 0; fs_mutex_unlock(g_gui_mutex); } void fs_emu_volume_control(int volume) { if (volume == -1) { if (fs_emu_audio_get_mute()) { fs_emu_audio_set_mute(0); if (fs_emu_audio_get_volume() == 0) { fs_emu_audio_set_volume(10); } } else { fs_emu_audio_set_mute(1); } } else if (volume == -2) { int volume = MAX(0, fs_emu_audio_get_volume() - 10); fs_emu_audio_set_volume(volume); if (fs_emu_audio_get_mute()) { fs_emu_audio_set_mute(0); } } else if (volume == -3) { int volume = MIN(100, fs_emu_audio_get_volume() + 10); fs_emu_audio_set_volume(volume); if (fs_emu_audio_get_mute()) { fs_emu_audio_set_mute(0); } } if (fs_emu_audio_get_mute()) { fs_emu_notification(1418909137, _("Volume: Muted")); } else { fs_emu_notification(1418909137, _("Volume: %d%%"), fs_emu_audio_get_volume()); } #if 0 fs_emu_log("decrease volume\n"); if (fs_emu_audio_get_mute()) { fs_emu_audio_set_mute(0); } int volume = MAX(0, fs_emu_audio_get_volume() - 10); fs_emu_audio_set_volume(volume); fs_emu_notification(1418909137, _("Volume: %d%%"), volume); } else if (key_code == FS_ML_KEY_PERIOD) { fs_emu_volume_control(-3); fs_emu_log("increase volume\n"); if (fs_emu_audio_get_mute()) { fs_emu_audio_set_mute(0); } int volume = MIN(100, fs_emu_audio_get_volume() + 10); fs_emu_audio_set_volume(volume); fs_emu_notification(1418909137, _("Volume: %d%%"), volume); #endif } void fs_emu_init() { fs_log("fs_emu_init\n"); //if (!g_fs_emu_config) { // g_fs_emu_config = g_key_file_new(); //} fs_time_init(); if (fs_config_get_boolean("stdout") == 1) { fs_log_enable_stdout(); } fs_emu_log("calling fs_ml_init\n"); fs_ml_init(); #ifdef WITH_LUA fs_emu_lua_init(); #endif g_gui_mutex = fs_mutex_create(); fs_emu_hud_init(); fs_emu_dialog_init(); } void fs_emu_init_2(int options) { fs_log("fs_emu_init_2\n"); #ifdef USE_SDL fs_emu_log("initializing SDL\n"); SDL_Init(SDL_INIT_EVERYTHING); #endif fs_emu_hud_init_after_config(); fs_emu_theme_init(); #ifdef WITH_NETPLAY //g_random_set_seed(time(NULL)); fs_emu_netplay_init(); #endif if (options & FS_EMU_INIT_VIDEO) { fs_emu_video_init(); } fs_emu_init_render(); // these must (currently) be called after renderer has been initialized, // due to a mutex that must be initialized first fs_emu_set_overlay_state(FS_EMU_TOP_LEFT_OVERLAY, 1); fs_emu_set_overlay_state(FS_EMU_TOP_RIGHT_OVERLAY, 1); fs_emu_set_overlay_state(FS_EMU_BOTTOM_RIGHT_OVERLAY, 1); fs_emu_set_overlay_state(FS_EMU_BOTTOM_LEFT_OVERLAY, 1); fs_emu_log("calling fs_ml_init_2\n"); fs_ml_init_2(); fs_ml_set_quit_function(on_quit); fs_emu_log("read config\n"); read_config(); if (options & FS_EMU_INIT_INPUT) { fs_emu_input_init(); } if (options & FS_EMU_INIT_AUDIO) { fs_emu_audio_init(); } fs_ml_video_set_update_function(fs_emu_video_update_function); fs_ml_video_set_render_function(fs_emu_video_render_function); fs_ml_video_set_post_render_function(fs_emu_video_after_update); if (options & FS_EMU_INIT_VIDEO) { char *title; if (fs_emu_get_title()) { title = fs_strdup(fs_emu_get_title()); } else { title = fs_strdup("Emulator"); } if (fs_emu_get_sub_title()) { char *temp = title; // using 'MIDDLE DOT' (U+00B7) in UTF-8 format as separator title = fs_strdup_printf("%s %c%c %s", temp, 0xC2, 0xB7, fs_emu_get_sub_title()); free(temp); } fs_ml_video_create_window(title); free(title); } } int fs_emu_thread_running() { return g_fs_emu_emulation_thread_running; } static void *emulation_thread_entry(void *data) { fs_emu_log("emulation thread started\n"); g_fs_emu_emulation_thread_running = 1; #ifdef WINDOWS if (SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_ABOVE_NORMAL)) { fs_emu_log("thread priority set to THREAD_PRIORITY_ABOVE_NORMAL\n"); } else { int dwError = GetLastError(); fs_emu_log("Failed to set thread priority (%d)\n", dwError); } #endif #ifdef WITH_NETPLAY if (fs_emu_netplay_enabled()) { fs_emu_log("netplay is enabled - waiting for connection\n"); while (!fs_emu_netplay_connected()) { // waiting for connection fs_emu_msleep(10); if (!fs_emu_netplay_enabled()) { // net play mode was aborted fs_emu_log("netplay aborted\n"); break; } } } #endif void (*main_function)() = data; if (main_function) { fs_emu_log("main function at %p\n", data); main_function(); } else { fs_emu_fatal("main function is NULL pointer\n"); } // call fs_ml_quit in case the quit was not explicitly requested already fs_ml_quit(); g_fs_emu_emulation_thread_running = 0; // with this set, and fs_ml_quit being called, the frame render // function will call fs_ml_stop when the fadeout effect is done g_fs_emu_emulation_thread_stopped = 1; //fs_emu_log("calling fs_ml_stop because emulation thread has ended\n"); //fs_ml_stop(); return NULL; } int fs_emu_run(fs_emu_main_function function) { fs_emu_log("fs_emu_run, main_function at %p\n", function); // FIXME: should wait until we are certain that the video thread is // running (i.e. wait for a status / flag) #ifdef WITH_NETPLAY // FIXME: MOVE if (fs_emu_netplay_enabled()) { fs_log("netplay is enabled\n"); fs_emu_netplay_start(); } #endif fs_thread *thread = fs_thread_create(emulation_thread_entry, function); if (thread == NULL) { fs_emu_log("error starting video thread\n"); // FIXME: ERROR MESSAGE HERE // FIXME: FATAL } int result = fs_ml_main_loop(); fs_emu_log("fs_emu_run: main loop is done\n"); if (g_fs_emu_benchmark_start_time) { int64_t t2 = fs_emu_monotonic_time(); double ttime = ((t2 - g_fs_emu_benchmark_start_time) / 1000000); double sys_fps = g_fs_emu_total_sys_frames / ttime; double emu_fps = g_fs_emu_total_emu_frames / ttime; fs_log("average fps sys: %0.1f emu: %0.1f\n", sys_fps, emu_fps); } fs_emu_log("fs_emu_run: waiting for emulation thread to stop\n"); while (g_fs_emu_emulation_thread_running) { fs_emu_msleep(1); } fs_emu_log("fs_emu_run: emulation thread stopped\n"); #ifdef USE_SDL_AUDIO fs_emu_log("fs_emu_run: calling SDL_CloseAudio\n"); SDL_CloseAudio(); #endif fs_emu_audio_shutdown(); fs_emu_log("fs_emu_run: returning\n"); return result; } static int wait_for_frame_no_netplay() { #if 0 while (1) { fs_ml_usleep(100 * 1000); } #endif if (g_fs_emu_benchmarking) { return 1; } if (!g_fs_emu_throttling) { return 1; } //fs_log("wait_for_frame_no_netplay\n"); static int64_t last_time = 0; static int64_t frame_time = 0; if (last_time == 0) { last_time = fs_emu_monotonic_time(); } static int last_frame_rate = 0; int frame_rate = fs_emu_get_video_frame_rate(); if (frame_rate != last_frame_rate) { frame_time = ((int64_t) 1000000) / frame_rate; fs_log("wait_for_frame_no_netplay: new frame rate %d (time: %d)\n", frame_rate, (int) frame_time); last_frame_rate = frame_rate; } int64_t wait_until = last_time + frame_time; //int64_t sleep_until = wait_until; int64_t sleep_until = wait_until - 100; int64_t t = fs_emu_monotonic_time(); //fs_log("%lld %lld\n", sleep_until, t); while (t < sleep_until) { int64_t sleep_time = sleep_until - t; //fs_log("%lld %lld %lld\n", sleep_until, t, sleep_time); fs_ml_usleep(sleep_time); t = fs_emu_monotonic_time(); } while (t < wait_until) { t = fs_emu_monotonic_time(); } last_time = last_time + frame_time; if (fs_emu_monotonic_time() > last_time + frame_time) { // time has elapsed too far, probably due to pause function having // been used last_time = fs_emu_monotonic_time(); } return 1; } int fs_emu_wait_for_frame(int frame) { #ifdef WITH_NETPLAY if (!fs_emu_netplay_enabled()) { #endif if (fs_emu_get_video_sync()) { return 1; } return wait_for_frame_no_netplay(); #ifdef WITH_NETPLAY } return fs_emu_netplay_wait_for_frame(frame); #endif } fs-uae-2.2.3+dfsg/libfsemu/src/emu/scanlines.c0000644000175000017500000000401312162366654021360 0ustar glaubitzglaubitz#include #include void fs_emu_render_scanlines(uint8_t* out, fs_emu_video_buffer *buffer, int cx, int cy, int cw, int ch, int scanline_dark, int scanline_light) { if (buffer->bpp != 4) { // not written code for non-32-bit frames yet return; } int stride = buffer->width * buffer->bpp; unsigned char *src_line = (unsigned char *) buffer->data; src_line += cy * stride + cx * buffer->bpp; unsigned char *dst_line = (unsigned char *) out; dst_line += cy * stride + cx * buffer->bpp; unsigned char *src, *dst; int light_ia = 255 - scanline_light; int dark_ia = 255 - scanline_dark; // dividing by 256 in loop for performance -correct div. would be 255. // using integer math only for performance. int alt = 0; for (int y = 0; y < ch; y++) { src = src_line; src_line += stride; dst = dst_line; dst_line += stride; if ((++alt % 2) == 0) { if (scanline_light == 0) { memcpy(dst, src, stride); continue; } for (int x = 0; x < cw; x++) { #ifdef __BIG_ENDIAN__ src ++; dst ++; #endif *dst++ = (*src++ * light_ia) / 256 + scanline_light; *dst++ = (*src++ * light_ia) / 256 + scanline_light; *dst++ = (*src++ * light_ia) / 256 + scanline_light; #ifndef __BIG_ENDIAN__ src ++; dst ++; #endif } } else { if (scanline_dark == 0) { memcpy(dst, src, stride); continue; } for (int x = 0; x < cw; x++) { #ifdef __BIG_ENDIAN__ src ++; dst ++; #endif *dst++ = (*src++ * dark_ia) / 256; *dst++ = (*src++ * dark_ia) / 256; *dst++ = (*src++ * dark_ia) / 256; #ifndef __BIG_ENDIAN__ src ++; dst ++; #endif } } } } fs-uae-2.2.3+dfsg/libfsemu/src/emu/xml_shader.h0000644000175000017500000000070512162366654021540 0ustar glaubitzglaubitz#ifndef LIBFSEMU_XML_SHADER_H_ #define LIBFSEMU_XML_SHADER_H_ #ifdef WITH_XML_SHADER int fs_emu_xml_shader_is_enabled(); void fs_emu_xml_shader_init(); int fs_emu_xml_shader_render(int texture, int texture_width, int texture_height, int input_width, int input_height, int output_width, int output_height, float x1, float y1, float x2, float y2, int render_textured_side, float alpha); #endif #endif // LIBFSEMU_XML_SHADER_H_ fs-uae-2.2.3+dfsg/libfsemu/src/emu/dialog.c0000644000175000017500000001535712162366654020655 0ustar glaubitzglaubitz/* libfsemu - a library with emulator support functions * Copyright (C) 2011 Frode Solheim * * This library is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 of the License, or (at * your option) any later version. * * This library is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #include "dialog.h" #include #include #include #ifdef USE_OPENGL #include #endif #include "font.h" #include "menu.h" #include "render.h" static fs_list *g_dialog_stack = NULL; int g_fs_emu_dialog_mode = 0; void fs_emu_dialog_init() { fs_log("initialize dialog module\n"); } fs_emu_dialog* fs_emu_dialog_create(const char *title, const char *affirmative, const char *negative) { fs_emu_dialog* dialog = fs_malloc0(sizeof(fs_emu_dialog)); if (title) { dialog->title = fs_strdup(title); } if (affirmative) { dialog->affirmative = fs_strdup(affirmative); } if (negative) { dialog->negative = fs_strdup(negative); } return dialog; } void fs_emu_dialog_destroy(fs_emu_dialog *dialog) { if (dialog->title) { free(dialog->title); } if (dialog->affirmative) { free(dialog->affirmative); } if (dialog->negative) { free(dialog->negative); } for (int i = 0; i < DIALOG_MAX_LINES; i++) { if (dialog->lines[i]) { free(dialog->lines[i]); } } free(dialog); } void fs_emu_dialog_add_option(fs_emu_dialog *dialog, const char *option, int value) { fs_emu_assert_gui_lock(); } void fs_emu_dialog_set_line(fs_emu_dialog *dialog, int line, const char *text) { if (line < 0 || line >= DIALOG_MAX_LINES) { fs_log("warning: invalid dialog line number"); return; } if (dialog->lines[line]) { free(dialog->lines[line]); } dialog->lines[line] = fs_strdup(text); } void fs_emu_dialog_show(fs_emu_dialog *dialog) { fs_emu_assert_gui_lock(); g_dialog_stack = fs_list_append(g_dialog_stack, dialog); g_fs_emu_dialog_mode = 1; } int fs_emu_dialog_result(fs_emu_dialog *dialog) { return dialog->result; } void fs_emu_dialog_dismiss(fs_emu_dialog *dialog) { fs_emu_assert_gui_lock(); fs_list* link = g_dialog_stack; while (link) { if (link->data == dialog) { g_dialog_stack = fs_list_delete_link(g_dialog_stack, link); break; } link = link->next; } g_fs_emu_dialog_mode = (g_dialog_stack != NULL); } fs_emu_dialog *fs_emu_dialog_get_current() { fs_emu_assert_gui_lock(); fs_emu_dialog *dialog = NULL; fs_list* link = g_dialog_stack; while (link) { dialog = link->data; link = link->next; } return dialog; } void fs_emu_dialog_handle_action(int action, int state) { //printf("dialog-action\n"); if (state == 0) { return; } //printf("dialog-action\n"); fs_emu_dialog *dialog = fs_emu_dialog_get_current(); if (!dialog) { return; } //printf("%d %d %d\n", action, ACTION_MENU_PRIMARY, ACTION_MENU_BACK); if (dialog->affirmative && action == ACTION_MENU_PRIMARY) { //printf("..\n"); dialog->result = DIALOG_RESULT_AFFIRMATIVE; } else if (dialog->negative && action == ACTION_MENU_BACK) { //printf("...\n"); dialog->result = DIALOG_RESULT_NEGATIVE; } } void fs_emu_dialog_render() { fs_emu_dialog *dialog = fs_emu_dialog_get_current(); if (!dialog) { return; } fs_gl_ortho_hd(); fs_gl_blending(1); fs_gl_texturing(0); fs_gl_color4f(0.0, 0.0, 0.0, 0.5); #ifdef USE_GLES GLfloat vert[] = { 0, 0, 1920, 0, 1920, 1080, 0, 1080 }; glEnableClientState(GL_VERTEX_ARRAY); glVertexPointer(2, GL_FLOAT, 0, vert); glDrawArrays(GL_TRIANGLE_FAN, 0, 4); #else glBegin(GL_QUADS); glVertex2f(0, 0); glVertex2f(1920, 0); glVertex2f(1920, 1080); glVertex2f(0, 1080); glEnd(); #endif fs_gl_blending(0); int width = 1920 / 2; int height = 480; //1080 / 2; float x1 = (1920 - width) / 2; float x2 = x1 + width; float y1 = (1080 - height) / 2; float y2 = y1 + height; #ifdef USE_GLES GLfloat color2[] = { 0.0, 0.4, 0.75, 1.0, 0.0, 0.4, 0.75, 1.0, 0.0, 0.2, 0.375, 1.0, 0.0, 0.2, 0.375, 1.0 }; GLfloat vert2[] = { x1, y1, x2, y1, x2, y2, x1, y2 }; glEnableClientState(GL_COLOR_ARRAY); glColorPointer(4, GL_FLOAT, 0, color2); glVertexPointer(2, GL_FLOAT, 0, vert2); glDrawArrays(GL_TRIANGLE_FAN, 0, 4); glDisableClientState(GL_COLOR_ARRAY); glDisableClientState(GL_VERTEX_ARRAY); #else glBegin(GL_QUADS); fs_gl_color4f(0.0, 0.4, 0.75, 1.0); glVertex2f(x1, y1); glVertex2f(x2, y1); fs_gl_color4f(0.0, 0.2, 0.375, 1.0); glVertex2f(x2, y2); glVertex2f(x1, y2); glEnd(); #endif fs_emu_font *font = fs_emu_font_get_menu(); int tx = x1 + 50; int ty = y2 - 80; if (dialog->title) { fs_emu_font_render(font, dialog->title, tx, ty, 1.0, 1.0, 1.0, 1.0); ty -= 50; } for (int i = 0; i < DIALOG_MAX_LINES; i++) { if (dialog->lines[i]) { fs_emu_font_render(font, dialog->lines[i], tx, ty, 1.0, 1.0, 1.0, 1.0); } ty -= 50; } tx = x2; ty = y1 - 50; int tw; if (dialog->affirmative) { fs_emu_font_measure(font, dialog->affirmative, &tw, NULL); tx -= tw; fs_emu_font_render(font, dialog->affirmative, tx, ty, 1.0, 1.0, 1.0, 1.0); tx -= 20; fs_emu_font_measure(font, "", &tw, NULL); tx -= tw; fs_emu_font_render(font, "", tx, ty, 1.0, 1.0, 1.0, 1.0); //tx -= 40; } tx = x1; if (dialog->negative) { //fs_emu_font_measure(font, dialog->negative, &tw, NULL); //tx -= tw; tx += fs_emu_font_render(font, "", tx, ty, 1.0, 1.0, 1.0, 1.0); tx += 20; fs_emu_font_render(font, dialog->negative, tx, ty, 1.0, 1.0, 1.0, 1.0); //fs_emu_font_measure(font, "", &tw, NULL); //tx -= tw; //tx -= 40; } } fs-uae-2.2.3+dfsg/libfsemu/src/emu/render.c0000644000175000017500000021707512162366654020676 0ustar glaubitzglaubitz#include "render.h" #include #include #include #include #include #include #include #include #include #include #include #include "libfsemu.h" #include "audio.h" #include "dialog.h" #include "emu_lua.h" #include "font.h" #include "hud.h" #include "menu.h" #include "scanlines.h" #include "texture.h" #include "theme.h" #include "util.h" #include "video.h" #include "video_buffer.h" #include "xml_shader.h" #ifdef USE_OPENGL #include #include #endif #ifdef USE_GLES #define glScaled glScalef #define glTranslated glTranslatef #define glRotated glRotatef #define double float #endif #define VIDEO_DEBUG_SCALE_TIMES 2.5 // menu transition static double g_menu_transition = 0.0; static double g_menu_transition_target = 0.0; //static fs_emu_texture g_frame_texture = {}; static GLuint g_frame_texture = 0; static int g_frame_texture_width = 0; static int g_frame_texture_height = 0; static int g_texture_filter = GL_LINEAR; static int g_frame_texture_black_left = 100000; static int g_frame_texture_black_top = 100000; // crop coordinates of emulator video frame static fs_emu_rect g_crop = {}; #define FS_EMU_VIEWPORT_MODE_CROP 0 #define FS_EMU_VIEWPORT_MODE_CENTER 1 static int g_viewport_mode = FS_EMU_VIEWPORT_MODE_CROP; static int g_effective_viewport_mode = FS_EMU_VIEWPORT_MODE_CROP; // size of emulator video frame static int g_frame_width = 0; static int g_frame_height = 0; static double g_frame_aspect = 0; static uint8_t *g_scanline_buffer = NULL; static int g_scanline_buffer_width = -1; static int g_scanline_buffer_height = -1; // scaling and alignment options static double g_scale_x = -1.0; static double g_scale_y = -1.0; static double g_align_x = 0.5; static double g_align_y = 0.5; static int g_frame_override = 0; static int g_frame_override_x = 0; static int g_frame_override_y = 0; static int g_frame_override_w = 0; static int g_frame_override_h = 0; static int g_l_scale_x = 1920; static int g_l_scale_y = 1080; struct overlay_status { int state; int render_state; //int was_enabled; //int was_disabled; int render_status; }; static struct overlay_status g_overlay_status[FS_EMU_MAX_OVERLAYS]; static fs_mutex *g_overlay_mutex = NULL; void fs_emu_set_custom_overlay_state(int overlay, int state) { fs_emu_set_overlay_state(FS_EMU_FIRST_CUSTOM_OVERLAY + overlay, state); } void fs_emu_set_overlay_state(int overlay, int state) { if (overlay < 0 || overlay >= FS_EMU_MAX_OVERLAYS) { return; } fs_mutex_lock(g_overlay_mutex); g_overlay_status[overlay].state = state; #if 0 if (state) { g_overlay_status[overlay].state = 1; g_overlay_status[overlay].was_enabled = 1; } else { g_overlay_status[overlay].state = 0; g_overlay_status[overlay].was_disabled = 1; } #endif fs_mutex_unlock(g_overlay_mutex); } static void setup_opengl() { fs_log("setup_opengl\n"); glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); CHECK_GL_ERROR(); } static void context_notification_handler(int notification, void *data) { if (notification == FS_GL_CONTEXT_DESTROY) { if (g_frame_texture != 0) { glDeleteTextures(1, &g_frame_texture); CHECK_GL_ERROR(); g_frame_texture = 0; } } else if (notification == FS_GL_CONTEXT_CREATE) { setup_opengl(); } } void fs_emu_initialize_opengl() { setup_opengl(); fs_emu_initialize_textures(); fs_gl_add_context_notification(context_notification_handler, NULL); } void get_buffer_format(int *gl_buffer_format, int *gl_buffer_type) { int format = fs_emu_get_video_format(); if (format == FS_EMU_VIDEO_FORMAT_BGRA) { *gl_buffer_format = GL_BGRA; #ifdef __BIG_ENDIAN__ *gl_buffer_type = GL_UNSIGNED_INT_8_8_8_8_REV; #else *gl_buffer_type = GL_UNSIGNED_BYTE; #endif } else if (format == FS_EMU_VIDEO_FORMAT_RGBA) { *gl_buffer_format = GL_RGBA; #ifdef __BIG_ENDIAN__ *gl_buffer_type = GL_UNSIGNED_INT_8_8_8_8_REV; #else *gl_buffer_type = GL_UNSIGNED_BYTE; #endif } else if (format == FS_EMU_VIDEO_FORMAT_RGB) { *gl_buffer_format = GL_RGB; #ifdef __BIG_ENDIAN__ *gl_buffer_type = GL_UNSIGNED_INT_8_8_8_8_REV; #else *gl_buffer_type = GL_UNSIGNED_BYTE; #endif } else if (format == FS_EMU_VIDEO_FORMAT_R5G6B5) { *gl_buffer_format = GL_RGB; *gl_buffer_type = GL_UNSIGNED_SHORT_5_6_5; } else if (format == FS_EMU_VIDEO_FORMAT_R5G5B5A1) { *gl_buffer_format = GL_RGBA; *gl_buffer_type = GL_UNSIGNED_SHORT_5_5_5_1; } } static void create_texture_if_needed(int width, int height) { //g_frame_texture.video_version = g_fs_emu_video_version; if (g_frame_texture && g_frame_texture_width >= width && g_frame_texture_height >= height) { return; } fs_gl_bind_texture(0); if (g_frame_texture) { glDeleteTextures(1, &g_frame_texture); CHECK_GL_ERROR(); } g_frame_texture_width = 1; while (g_frame_texture_width < width) { g_frame_texture_width *= 2; } g_frame_texture_height = 1; while (g_frame_texture_height < height) { g_frame_texture_height *= 2; } glGenTextures(1, &g_frame_texture); CHECK_GL_ERROR(); //g_frame_texture.opengl_context_stamp = g_fs_ml_opengl_context_stamp; //fs_emu_set_texture(&g_frame_texture); fs_gl_bind_texture(g_frame_texture); // with high quality borders, there should be no reason to initialize // the texture to black void *data = NULL; //void *data = fs_malloc0(g_frame_texture_width * g_frame_texture_height * 4); fs_gl_unpack_row_length(0); int gl_buffer_format = 0; int gl_buffer_type = 0; get_buffer_format(&gl_buffer_format, &gl_buffer_type); glTexImage2D(GL_TEXTURE_2D, 0, fs_emu_get_texture_format(), g_frame_texture_width, g_frame_texture_height, 0, gl_buffer_format, gl_buffer_type, data); CHECK_GL_ERROR(); if (data) { free(data); } glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, g_texture_filter); CHECK_GL_ERROR(); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, g_texture_filter); CHECK_GL_ERROR(); //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); //CHECK_GL_ERROR(); //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); //CHECK_GL_ERROR(); #ifdef USE_GLES #else glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER); CHECK_GL_ERROR(); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER); CHECK_GL_ERROR(); #endif // texture contains no data now, so we ensure that the upload routine // blanks the border if necessary g_frame_texture_black_left = 100000; g_frame_texture_black_top = 100000; } static void fix_border(fs_emu_video_buffer *buffer, int *upload_x, int *upload_y, int *upload_w, int *upload_h) { // upload fixed border as well int ux = g_crop.x; int uy = g_crop.y; int uw = g_crop.w; int uh = g_crop.h; // currently disabled border fixing ... -because this "destroys" the // buffer so it cannot be copied properly from when reusing lines // for the next frame #if 0 int32_t *idata = (int32_t*) buffer->data; int32_t *src; int32_t *dst; if (uy > 1) { src = idata + uy * buffer->width + ux; uy--; dst = idata + uy * buffer->width + ux; for (int x = 0; x < uw; x++) { *dst++ = *src++; } uh++; } //printf("%d %d %d\n", uy, uh, buffer->buffer_height); if (uy + uh < buffer->buffer_height) { src = idata + (uy + uh - 1) * buffer->width + ux; uh++; dst = idata + (uy + uh - 1) * buffer->width + ux; for (int x = 0; x < uw; x++) { *dst++ = *src++; } } if (ux > 1) { src = idata + uy * buffer->width + ux; ux--; dst = idata + uy * buffer->width + ux; for (int y = 0; y < uh; y++) { *dst = *src; src += buffer->width; dst += buffer->width; } uw++; } if (ux + uw < buffer->buffer_width) { src = idata + uy * buffer->width + (ux + uw - 1); uw++; dst = idata + uy * buffer->width + (ux + uw - 1); for (int y = 0; y < uh; y++) { *dst = *src; src += buffer->width; dst += buffer->width; } } #endif *upload_x = ux; *upload_y = uy; *upload_w = uw; *upload_h = uh; } #define R5G6B5_MASK_R 0xf800 #define R5G6B5_MASK_G 0x07e0 #define R5G6B5_MASK_B 0x001f #define R5G6B5_SHIFT_R 11 #define R5G6B5_SHIFT_G 5 #define R5G6B5_SHIFT_B 0 #define R5G5B5A1_MASK_R 0xf800 #define R5G5B5A1_MASK_G 0x07c0 #define R5G5B5A1_MASK_B 0x003e #define R5G5B5A1_SHIFT_R 11 #define R5G5B5A1_SHIFT_G 6 #define R5G5B5A1_SHIFT_B 1 static void save_screenshot(const char *path, int cx, int cy, int cw, int ch, int count, uint8_t *frame, int frame_width, int frame_height, int frame_bpp) { fs_log("writing screenshot to %s\n", path); uint8_t *out_data = malloc(cw * ch * 3); int row_len = cw * frame_bpp; int frame_format = fs_emu_get_video_format(); for (int y = 0; y < ch; y++) { uint8_t *ip = frame + ((cy + y) * frame_width + cx) * frame_bpp; uint8_t *op = out_data + y * cw * 3; if (frame_format == FS_EMU_VIDEO_FORMAT_BGRA) { for (int x = 0; x < row_len; x += frame_bpp) { #ifdef __BIG_ENDIAN__ *op++ = ip[x + 1]; *op++ = ip[x + 2]; *op++ = ip[x + 3]; #else *op++ = ip[x + 2]; *op++ = ip[x + 1]; *op++ = ip[x + 0]; #endif } } else if (frame_format == FS_EMU_VIDEO_FORMAT_RGBA) { for (int x = 0; x < row_len; x += frame_bpp) { *op++ = ip[x + 0]; *op++ = ip[x + 1]; *op++ = ip[x + 2]; } } else if (frame_format == FS_EMU_VIDEO_FORMAT_R5G6B5) { for (int x = 0; x < row_len; x += frame_bpp) { unsigned short *p = (unsigned short *) (ip + x); unsigned char c; c = (*p & R5G6B5_MASK_R) >> R5G6B5_SHIFT_R; *op++ = (c << 3) | (c >> 2); c = (*p & R5G6B5_MASK_G) >> R5G6B5_SHIFT_G; *op++ = (c << 2) | (c >> 4); c = (*p & R5G6B5_MASK_B) >> R5G6B5_SHIFT_B; *op++ = (c << 3) | (c >> 2); } } else if (frame_format == FS_EMU_VIDEO_FORMAT_R5G5B5A1) { for (int x = 0; x < row_len; x += frame_bpp) { unsigned short *p = (unsigned short *) (ip + x); unsigned char c; c = (*p & R5G5B5A1_MASK_R) >> R5G5B5A1_SHIFT_R; *op++ = (c << 3) | (c >> 2); c = (*p & R5G5B5A1_MASK_G) >> R5G5B5A1_SHIFT_G; *op++ = (c << 3) | (c >> 2); c = (*p & R5G5B5A1_MASK_B) >> R5G5B5A1_SHIFT_B; *op++ = (c << 3) | (c >> 2); } } } int result = fs_image_save_data(path, out_data, cw, ch, 3); if (result) { fs_log("saved screenshot\n"); } else { fs_log("error saving screenshot\n"); } free(out_data); #if 0 free(name); free(path); #endif } static int update_texture() { fs_emu_video_buffer *buffer = fs_emu_video_buffer_lock(); #ifdef DEBUG_VIDEO_SYNC printf("u %p\n", buffer); #endif // unlocked in fs_emu_video_after_update if (buffer->seq == 0) { // we haven't received a video frame from the emulator yet return -1; } uint8_t *frame = buffer->data; if (frame == NULL) { return -1; } int is_new_frame = 1; static int last_seq_no = -1; if (buffer->seq == last_seq_no + 1) { // normal } else if (buffer->seq == last_seq_no) { //fs_log("WARNING: repeated frame %d\n", info->seq_no); g_fs_emu_repeated_frames++; if (g_fs_emu_repeated_frames > 9999) { g_fs_emu_repeated_frames = 9999; } g_fs_emu_repeated_frame_time = fs_get_monotonic_time(); is_new_frame = 0; } else { int lost_frame_count = buffer->seq - last_seq_no - 1; g_fs_emu_lost_frames += lost_frame_count; g_fs_emu_lost_frame_time = fs_get_monotonic_time(); //fs_log("lost %d frame(s)\n", lost_frame_count); } last_seq_no = buffer->seq; is_new_frame = 1; int width = buffer->width; int height = buffer->height; int bpp = buffer->bpp; // check for cropping before screenshot, so we can also save cropped // screenshot if (g_fs_emu_video_crop_mode) { g_crop = buffer->crop; if (g_crop.w == 0) { g_crop.w = width; } if (g_crop.h == 0) { g_crop.h = height; } } else { g_crop.x = 0; g_crop.y = 0; g_crop.w = width; g_crop.h = height; } // g_fs_emu_screenshot is set to 1 when screenshot command is executed // (keyboard shortcut), but screenshot is saved here, as soon as possible. if (g_fs_emu_screenshot > 0) { static char* screenshots_dir = NULL; static char* screenshots_prefix = NULL; static int screenshots_mask = 7; if (screenshots_dir == NULL) { char *path = fs_config_get_string("screenshots_output_dir"); if (path) { if (fs_path_exists(path)) { screenshots_dir = path; } else { fs_emu_warning("Directory does not exist: %s", path); free(path); } } if (!screenshots_dir) { screenshots_dir = fs_strdup(fs_get_desktop_dir()); } screenshots_mask = fs_config_get_int("screenshots_output_mask"); if (screenshots_mask == FS_CONFIG_NONE) { screenshots_mask = 7; } screenshots_prefix = fs_config_get_string( "screenshots_output_prefix"); if (!screenshots_prefix) { screenshots_prefix = fs_strdup("fs-uae"); } } static int total_count = 0; if (g_fs_emu_screenshot == 1) { char *name, *path; time_t t = time(NULL); struct tm tm_struct; struct tm *tm_p = &tm_struct; fs_localtime_r(&t, tm_p); static int count = 0; static char laststrbuf[20] = {}; char strbuf[20]; strftime(strbuf, 20, "%y%m%d%H%M", tm_p); if (strcmp(strbuf, laststrbuf) != 0) { count = 0; strncpy(laststrbuf, strbuf, 20); } count += 1; total_count += 1; if (screenshots_mask & 1) { name = fs_strdup_printf("%s-%s-%s-%02d.png", screenshots_prefix, "full", strbuf, count); path = fs_path_join(screenshots_dir, name, NULL); save_screenshot(path, 0, 0, width, height, count, frame, width, height, bpp); free(path); free(name); } if (screenshots_mask & 2) { name = fs_strdup_printf("%s-%s-%s-%02d.png", screenshots_prefix, "crop", strbuf, count); path = fs_path_join(screenshots_dir, name, NULL); save_screenshot(path, g_crop.x, g_crop.y, g_crop.w, g_crop.h, count, frame, width, height, bpp); free(path); free(name); } if (screenshots_mask & 4) { name = fs_strdup_printf("%s-%s-%s-%02d.png", screenshots_prefix, "real", strbuf, count); path = fs_path_join(screenshots_dir, name, NULL); fs_ml_video_screenshot(path); free(path); free(name); } g_fs_emu_screenshot++; } else if (g_fs_emu_screenshot > 4) { // we wait a bit until printing the notification, so the OpenGL // screenshot can be captured before the notification is shown g_fs_emu_screenshot = 0; fs_emu_notification(81830444, _("Saved screenshot %d"), total_count); } else { g_fs_emu_screenshot++; } } int upload_x, upload_y, upload_w, upload_h; g_effective_viewport_mode = g_viewport_mode; if (buffer->flags & FS_EMU_FORCE_VIEWPORT_CROP_FLAG) { g_effective_viewport_mode = FS_EMU_VIEWPORT_MODE_CROP; } if (g_effective_viewport_mode == FS_EMU_VIEWPORT_MODE_CROP) { fix_border(buffer, &upload_x, &upload_y, &upload_w, &upload_h); } else { upload_x = 0; upload_y = 0; upload_w = buffer->width; upload_h = buffer->height; } if (g_fs_emu_scanlines && (buffer->flags & FS_EMU_NO_SCANLINES_FLAG) == 0) { //printf("w %d h %d new frame? %d\n", buffer->width, buffer->height, // is_new_frame); if (is_new_frame) { if (g_scanline_buffer_width != buffer->width || g_scanline_buffer_height != buffer->height) { if (g_scanline_buffer) { free(g_scanline_buffer); } g_scanline_buffer = malloc(buffer->width * buffer->height * bpp); g_scanline_buffer_width = buffer->width; g_scanline_buffer_height = buffer->height; } fs_emu_render_scanlines(g_scanline_buffer, buffer, upload_x, upload_y, upload_w, upload_h, g_fs_emu_scanlines_dark, g_fs_emu_scanlines_light); } if (g_scanline_buffer) { frame = g_scanline_buffer; } } //fs_log("%d %d %d %d %d %d %d\n", width, height, bpp, // g_crop.x, g_crop.y, g_crop.w, g_crop.h); g_frame_width = width; g_frame_height = height; g_frame_aspect = buffer->aspect; int gl_buffer_format = 0; int gl_buffer_type = 0; get_buffer_format(&gl_buffer_format, &gl_buffer_type); create_texture_if_needed(width, height); fs_gl_bind_texture(g_frame_texture); uint8_t *gl_buffer_start = frame + ((upload_y * width) + upload_x) * bpp; #ifdef USE_GLES /* we don't have unpack padding in GLES. uploading full width lines instead */ glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, width, upload_h, gl_buffer_format, gl_buffer_type, gl_buffer_start); #else fs_gl_unpack_row_length(width); glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, upload_w, upload_h, gl_buffer_format, gl_buffer_type, gl_buffer_start); #endif CHECK_GL_ERROR(); int update_black_border = 1; if (update_black_border) { int black_left = upload_w; int black_right = g_frame_texture_width; //printf("%d %d\n", black_left, black_right); if (g_frame_texture_black_left < black_right) { black_right = g_frame_texture_black_left; //printf("set g_frame_texture_black_left to %d\n", black_left); } //printf("%d %d\n", black_left, black_right); int black_width = black_right - black_left; if (black_width > 0) { void *black_data = fs_malloc0( black_width * g_frame_texture_height * bpp); //memset(black_data, 0xff, black_width * g_frame_texture_height * bpp); //printf("black1 w %d h %d\n", black_width, g_frame_texture_height); fs_gl_unpack_row_length(0); glTexSubImage2D(GL_TEXTURE_2D, 0, black_left, 0, black_width, g_frame_texture_height, gl_buffer_format, gl_buffer_type, black_data); free(black_data); CHECK_GL_ERROR(); } g_frame_texture_black_left = black_left; int black_top = upload_h; int black_bottom = g_frame_texture_height; if (g_frame_texture_black_top < black_bottom) { black_bottom = g_frame_texture_black_top; } int black_height = black_bottom - black_top; //printf("---- %d %d\n", black_top, black_bottom); if (black_height > 0) { void *black_data = fs_malloc0( upload_w * black_height * bpp); //memset(black_data, 0xff, upload_w * black_height * bpp); //printf("black2 w %d h %d\n", upload_w, black_height); fs_gl_unpack_row_length(0); glTexSubImage2D(GL_TEXTURE_2D, 0, 0, black_top, upload_w, black_height, gl_buffer_format, gl_buffer_type, black_data); free(black_data); CHECK_GL_ERROR(); } g_frame_texture_black_top = black_top; } //g_frame_texture_black_left = 100000; //g_frame_texture_black_top = 100000; #if 0 int hq_border = 2; if (hq_border >= 1) { /* if (upload_y > 0) { glTexSubImage2D(GL_TEXTURE_2D, 0, 0, upload_y - 1, width, 1, format, GL_UNSIGNED_BYTE, frame + (upload_y) * width * bpp); CHECK_GL_ERROR(); } if (upload_y + upload_h < g_frame_texture_height) { glTexSubImage2D(GL_TEXTURE_2D, 0, 0, upload_y + upload_h, width, 1, format, GL_UNSIGNED_BYTE, frame + (upload_y + upload_h - 1) * width * bpp); CHECK_GL_ERROR(); } */ if (upload_h < g_frame_texture_height) { glTexSubImage2D(GL_TEXTURE_2D, 0, 0, upload_h, width, 1, format, GL_UNSIGNED_BYTE, frame + (upload_y + upload_h - 1) * width * bpp); CHECK_GL_ERROR(); } /* if (upload_x > 0) { glTexSubImage2D(GL_TEXTURE_2D, 0, upload_x - 1, upload_y, 1, upload_h, format, GL_UNSIGNED_BYTE, frame + ((upload_y) * width + upload_x) * bpp); CHECK_GL_ERROR(); } if (upload_x + upload_w < g_frame_texture_width) { glTexSubImage2D(GL_TEXTURE_2D, 0, upload_x + upload_w, upload_y, 1, upload_h, format, GL_UNSIGNED_BYTE, frame + ((upload_y) * width + upload_x + upload_w - 1) * bpp); CHECK_GL_ERROR(); } */ if (upload_w < g_frame_texture_width) { glTexSubImage2D(GL_TEXTURE_2D, 0, upload_w, upload_y, 1, upload_h, format, GL_UNSIGNED_BYTE, frame + ((upload_y) * width + upload_x + upload_w - 1) * bpp); CHECK_GL_ERROR(); } } #if 0 if (hq_border >= 2) { if (upload_y + upload_h < g_frame_texture.height - 1) { //printf("1\n"); glTexSubImage2D(GL_TEXTURE_2D, 0, 0, upload_y + upload_h + 1, width, 1, format, GL_UNSIGNED_BYTE, frame + (upload_y + upload_h - 1) * width * bpp); //frame + (upload_y + upload_h - 2) * width * bpp); } if (upload_x + upload_w < g_frame_texture.width - 1) { glTexSubImage2D(GL_TEXTURE_2D, 0, upload_x + upload_w + 1, upload_y, 1, upload_h, format, GL_UNSIGNED_BYTE, frame + ((upload_y) * width + upload_x + upload_w - 1) * bpp); } } #endif #endif return last_seq_no; } static void render_gloss(double alpha) { //fs_emu_set_texture(g_tex_screen_gloss); fs_gl_blending(1); //fs_emu_blending(0); //fs_emu_texturing(0); fs_gl_color4f(alpha, alpha, alpha, alpha); //fs_ml_color4f(alpha, 0.0, 0.0, alpha); //glBegin(GL_QUADS); //glTexCoord2f(0.0, 1.0); glVertex2f(-1.0, -1.0); //glTexCoord2f(1.0, 1.0); glVertex2f( 1.0, -1.0); //glTexCoord2f(1.0, 0.0); glVertex2f( 1.0, 1.0); //glTexCoord2f(0.0, 0.0); glVertex2f(-1.0, 1.0); fs_emu_draw_texture_with_size(TEXTURE_GLOSS, -1.0, -1.0, 2.0, 2.0); //glEnd(); } static void render_quad(float x1, float y1, float x2, float y2, float s1, float t1, float s2, float t2) { #ifdef USE_GLES GLfloat tex[] = { s1, t2, s2, t2, s2, t1, s1, t1 }; GLfloat vert[] = { x1, y1, x2, y1, x2, y2, x1, y2 }; glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_TEXTURE_COORD_ARRAY); glVertexPointer(2, GL_FLOAT, 0, vert); glTexCoordPointer(2, GL_FLOAT, 0, tex); glDrawArrays(GL_TRIANGLE_FAN, 0, 4); glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_TEXTURE_COORD_ARRAY); #else glBegin(GL_QUADS); glTexCoord2d(s1, t2); glVertex2f(x1, y1); glTexCoord2d(s2, t2); glVertex2f(x2, y1); glTexCoord2d(s2, t1); glVertex2f(x2, y2); glTexCoord2d(s1, t1); glVertex2f(x1, y2); glEnd(); #endif CHECK_GL_ERROR(); } static void render_frame(double alpha, int perspective) { fs_emu_lua_run_handler("on_fs_emu_render_frame"); #ifdef WITH_LUA #if 0 fs_emu_acquire_lua(); lua_getglobal(fs_emu_lua_state, "on_fs_emu_render_frame"); if (lua_isnil(fs_emu_lua_state, -1)) { lua_pop(fs_emu_lua_state, 1); } else if (lua_pcall(fs_emu_lua_state, 0, 0, 0) != 0) { fs_emu_lua_log_error("error calling on_render_frame"); lua_pop(fs_emu_lua_state, 1); } //else if (!lua_isnumber(fs_emu_lua_state, -1)) { // fs_log("fs_emu_on_render_frame must return a number\n"); //} else { // //int handled = lua_tonumber(fs_emu_lua_state, -1); // //lua_pop(fs_emu_lua_state, 1); // //if (handled) { // // return; // //} //fs_emu_release_lua(); //return; } fs_emu_release_lua(); #endif #endif if (g_frame_override) { int x = g_frame_override_x; int y = g_frame_override_y; int w = g_frame_override_w; int h = g_frame_override_h; float color = 1.0; if (g_frame_texture == 0) { // texture has not been created yet color = 0.0; fs_gl_texturing(0); } else { fs_gl_texturing(1); fs_gl_bind_texture(g_frame_texture); } fs_gl_blending(0); fs_gl_color4f(color, color, color, 1.0); float x1 = -1.0 + x * 2.0 / g_l_scale_x; float x2 = -1.0 + (x + w) * 2.0 / g_l_scale_x; float y2 = 1.0 - y * 2.0 / g_l_scale_y; float y1 = 1.0 - (y + h) * 2.0 / g_l_scale_y; double s1 = 0.0; double t1 = 0.0; double s2 = (double) g_crop.w / g_frame_texture_width; double t2 = (double) g_crop.h / g_frame_texture_height; int shader_result = 0; #ifdef WITH_XML_SHADER if (g_frame_texture) { // only try to render with shader passes if we have a valid texture int screen_w = fs_ml_video_width(); int screen_h = fs_ml_video_height(); double doutput_w = screen_w; double doutput_h = screen_h; doutput_w = doutput_w * g_frame_override_w / (double) g_l_scale_x; doutput_h = doutput_h * g_frame_override_h / (double) g_l_scale_y; int output_w = doutput_w + 0.5; int output_h = doutput_h + 0.5; shader_result = fs_emu_xml_shader_render(g_frame_texture, g_frame_texture_width, g_frame_texture_height, g_crop.w, g_crop.h, output_w, output_h, x1, y1, x2, y2, 0, 1.0); } #endif if (!shader_result) { render_quad(x1, y1, x2, y2, s1, t1, s2, t2); } return; } int input_w = g_crop.w; int input_h = g_crop.h; double emu_aspect = (double) input_w / (double) input_h; emu_aspect *= g_frame_aspect; int screen_w = fs_ml_video_width(); int screen_h = fs_ml_video_height(); double screen_aspect = (double) screen_w / (double) screen_h; double doutput_w = screen_w; double doutput_h = screen_h; if (fs_emu_video_get_aspect_correction()) { if (emu_aspect > screen_aspect) { // emu video is wider than screen, typical for 4:3 or 5:4 monitors double h = screen_aspect / emu_aspect; doutput_h *= h; } else { // typical scenario for wide-screen monitors double w = emu_aspect / screen_aspect; doutput_w *= w; } } if (g_scale_x < 0.0) { doutput_w *= -g_scale_x; } else { doutput_w = input_w * g_scale_x; } if (g_scale_y < 0.0) { doutput_h *= -g_scale_y; } else { doutput_h = input_h * g_scale_y; } // round to nearest integer int output_w = doutput_w + 0.5; int output_h = doutput_h + 0.5; //printf("output size: %d %d\n", output_w, output_h); int offset_x = (screen_w - output_w) * g_align_x; int offset_y = (screen_h - output_h) * (1.0 - g_align_y); //printf("w %d h %d x %d y %d\n", output_w, output_h, offset_x, offset_y); double s1 = 0.0; double t1 = 0.0; double s2 = (double) g_crop.w / g_frame_texture_width; double t2 = (double) g_crop.h / g_frame_texture_height; double x1 = -1.0 + 2.0 * (double) offset_x / screen_w; double y1 = -1.0 + 2.0 * (double) offset_y / screen_h; double x2 = -1.0 + 2.0 * (double) (offset_x + output_w) / screen_w; double y2 = -1.0 + 2.0 * (double) (offset_y + output_h) / screen_h; #if 0 double emu_aspect; if (g_fs_emu_video_crop_mode) { //if (g_viewport_mode == FS_EMU_VIEWPORT_MODE_CROP) { /* s1 = (double) g_crop.x / g_frame_texture_width; s2 = (double) (g_crop.x + g_crop.w) / g_frame_texture_width; t1 = (double) g_crop.y / g_frame_texture_height; t2 = (double) (g_crop.y + g_crop.h) / g_frame_texture_height; */ s1 = 0.0; s2 = (double) (g_crop.w) / g_frame_texture_width; t1 = 0.0; t2 = (double) (g_crop.h) / g_frame_texture_height; emu_aspect = (double) g_crop.w / (double) g_crop.h; } else { s1 = 0.0; s2 = (double) g_frame_width / g_frame_texture_width; t1 = 0.0; t2 = (double) g_frame_height / g_frame_texture_height; emu_aspect = (double) g_frame_width / (double) g_frame_height; } emu_aspect *= g_frame_aspect; double x1 = -1.0; double x2 = 1.0; double y1 = -1.0; double y2 = 1.0; #endif double repeat_right_border = 0; //int repeat_bottom_border = 0; #if 0 if (fs_emu_video_get_aspect_correction()) { double screen_aspect = (double) fs_ml_video_width() / (double) fs_ml_video_height(); if (emu_aspect > screen_aspect) { // emu video is wider than screen double h = screen_aspect / emu_aspect; //double padding = (2.0 - 2.0 * h) / 2.0; double padding = 1.0 - h; if (g_effective_viewport_mode == FS_EMU_VIEWPORT_MODE_CROP) { y1 += padding; y2 -= padding; } else { // FS_EMU_VIEWPORT_MODE_CENTER t1 -= padding / 2.0; t2 += padding / 2.0; //y2 -= padding; } } else { double w = emu_aspect / screen_aspect; //double padding = (2.0 - 2.0 * w) / 2.0; double padding = 1.0 - w; if (g_effective_viewport_mode == FS_EMU_VIEWPORT_MODE_CROP) { x1 += padding; x2 -= padding; } else { // FS_EMU_VIEWPORT_MODE_CENTER //s1 -= padding / 4.0; // FIXME: THIS IS WRONG s1 -= padding / 2.0; //s2 += padding / 2.0; x2 -= padding; //repeat_right_border = x2; repeat_right_border = 1.0 - padding; } } } #endif // if video is not stretched, we render black rectangles to cover // the rest of the screen if (x1 > -1.0 || x2 < 1.0 || y1 > -1.0 || y2 < 1.0) { fs_gl_texturing(0); if (alpha < 1.0) { fs_gl_blending(1); fs_gl_color4f(0.0, 0.0, 0.0, alpha); } else { fs_gl_blending(0); fs_gl_color4f(0.0, 0.0, 0.0, 1.0); } if (x1 > -1.0) { #ifdef USE_GLES GLfloat vert[] = { -1.0, -1.0, x1, -1.0, x1, 1.0, -1.0, 1.0 }; glEnableClientState(GL_VERTEX_ARRAY); glVertexPointer(2, GL_FLOAT, 0, vert); glDrawArrays(GL_TRIANGLE_FAN, 0, 4); glDisableClientState(GL_VERTEX_ARRAY); #else glBegin(GL_QUADS); glVertex2f(-1.0, -1.0); glVertex2f( x1, -1.0); glVertex2f( x1, 1.0); glVertex2f(-1.0, 1.0); glEnd(); #endif CHECK_GL_ERROR(); } if (x2 < 1.0) { #ifdef USE_GLES GLfloat vert[] = { x2, -1.0, 1.0, -1.0, 1.0, 1.0, x2, 1.0 }; glEnableClientState(GL_VERTEX_ARRAY); glVertexPointer(2, GL_FLOAT, 0, vert); glDrawArrays(GL_TRIANGLE_FAN, 0, 4); glDisableClientState(GL_VERTEX_ARRAY); #else glBegin(GL_QUADS); glVertex2f( x2, -1.0); glVertex2f( 1.0, -1.0); glVertex2f( 1.0, 1.0); glVertex2f( x2, 1.0); glEnd(); #endif CHECK_GL_ERROR(); } if (y1 > -1.0) { #ifdef USE_GLES GLfloat vert[] = { x1, -1.0, x2, -1.0, x2, y1, x1, y1 }; glEnableClientState(GL_VERTEX_ARRAY); glVertexPointer(2, GL_FLOAT, 0, vert); glDrawArrays(GL_TRIANGLE_FAN, 0, 4); glDisableClientState(GL_VERTEX_ARRAY); #else glBegin(GL_QUADS); glVertex2f(x1, -1.0); glVertex2f(x2, -1.0); glVertex2f(x2, y1); glVertex2f(x1, y1); glEnd(); #endif // left side (3D) #ifdef USE_GLES GLfloat vert2[] = { -1.0, -1.0, -0.1, -1.0, -1.0, 0.0, -1.0, y1, 0.0, -1.0, y1, -0.1 }; glEnableClientState(GL_VERTEX_ARRAY); glVertexPointer(3, GL_FLOAT, 0, vert2); glDrawArrays(GL_TRIANGLE_FAN, 0, 4); glDisableClientState(GL_VERTEX_ARRAY); #else glBegin(GL_QUADS); glVertex3f(-1.0, -1.0, -0.1); glVertex3f(-1.0, -1.0, 0.0); glVertex3f(-1.0, y1, 0.0); glVertex3f(-1.0, y1, -0.1); glEnd(); #endif CHECK_GL_ERROR(); } if (y2 < 1.0) { #ifdef USE_GLES GLfloat vert[] = { x1, y2, x2, y2, x2, 1.0, x1, 1.0 }; glEnableClientState(GL_VERTEX_ARRAY); glVertexPointer(2, GL_FLOAT, 0, vert); glDrawArrays(GL_TRIANGLE_FAN, 0, 4); glDisableClientState(GL_VERTEX_ARRAY); #else glBegin(GL_QUADS); glVertex2f(x1, y2); glVertex2f(x2, y2); glVertex2f(x2, 1.0); glVertex2f(x1, 1.0); glEnd(); #endif // left side (3D) #ifdef USE_GLES GLfloat vert2[] = { -1.0, y2, -0.1, -1.0, y2, 0.0, -1.0, 1.0, 0.0, -1.0, 1.0, -0.1 }; glEnableClientState(GL_VERTEX_ARRAY); glVertexPointer(3, GL_FLOAT, 0, vert2); glDrawArrays(GL_TRIANGLE_FAN, 0, 4); glDisableClientState(GL_VERTEX_ARRAY); #else glBegin(GL_QUADS); glVertex3f(-1.0, y2, -0.1); glVertex3f(-1.0, y2, 0.0); glVertex3f(-1.0, 1.0, 0.0); glVertex3f(-1.0, 1.0, -0.1); glEnd(); #endif CHECK_GL_ERROR(); } } //printf("--- render frame done ---\n"); int render_textured_side = 0; if (perspective) { // render left side in 3d mode fs_gl_blending(0); if (x1 > -1.0) { // emu screen does not reach screen edge - side will be black fs_gl_texturing(0); fs_gl_color4f(0.0, 0.0, 0.0, alpha); } /* else if (fs_emu_using_shader()) { // for simplicity, render black side when using shaders (the // problem is that shaders can render directly to the framebuffer, // and not necessarily to a texture. This can be fixed, but // side rendering should be copied to fs_emu_render_with_shader // in this case, so the side can be rendered with the shader // too... //fs_gl_texturing(0); //fs_gl_color4f(0.0, 0.0, 0.0, alpha); } */ else { render_textured_side = 1; fs_gl_texturing(1); fs_gl_bind_texture(g_frame_texture); fs_gl_color4f(0.33 * alpha, 0.33 * alpha, 0.33 * alpha, alpha); } if (render_textured_side == 0 #ifdef WITH_XML_SHADER || !fs_emu_xml_shader_is_enabled() #endif ) { #ifdef USE_GLES GLfloat tex[] = { s1, t2, s1, t2, s1, t1, s1, t1 }; GLfloat vert[] = { -1.0, y1, -0.1, -1.0, y1, 0.0, -1.0, y2, 0.0, -1.0, y2, -0.1 }; glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_TEXTURE_COORD_ARRAY); glVertexPointer(3, GL_FLOAT, 0, vert); glTexCoordPointer(2, GL_FLOAT, 0, tex); glDrawArrays(GL_TRIANGLE_FAN, 0, 4); glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_TEXTURE_COORD_ARRAY); #else glBegin(GL_QUADS); glTexCoord2d(s1, t2); glVertex3f(-1.0, y1, -0.1); glTexCoord2d(s1, t2); glVertex3f(-1.0, y1, 0.0); glTexCoord2d(s1, t1); glVertex3f(-1.0, y2, 0.0); glTexCoord2d(s1, t1); glVertex3f(-1.0, y2, -0.1); glEnd(); #endif CHECK_GL_ERROR(); } } float color = 1.0; if (g_frame_texture == 0) { // texture has not been created yet color = 0.0; fs_gl_texturing(0); } else { fs_gl_texturing(1); fs_gl_bind_texture(g_frame_texture); } if (alpha < 1.0) { fs_gl_blending(1); fs_gl_color4f(color * alpha, color * alpha, color * alpha, alpha); } else { fs_gl_blending(0); fs_gl_color4f(color, color, color, 1.0); } int shader_result = 0; #ifdef WITH_XML_SHADER if (g_frame_texture) { // only try to render with shader passes if we have a valid texture shader_result = fs_emu_xml_shader_render(g_frame_texture, g_frame_texture_width, g_frame_texture_height, g_crop.w, g_crop.h, output_w, output_h, x1, y1, x2, y2, render_textured_side, alpha); } #endif if (!shader_result) { render_quad(x1, y1, x2, y2, s1, t1, s2, t2); } //repeat_right_border = 0; if (repeat_right_border > 0.0) { s1 = s2 = (double) (g_frame_width - 1) / g_frame_texture_width; #ifdef USE_GLES GLfloat tex[] = { s1, t2, s2, t2, s2, t1, s1, t1 }; GLfloat vert[] = { repeat_right_border, y1, 1.0, y1, 1.0, y2, repeat_right_border, y2 }; glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_TEXTURE_COORD_ARRAY); glVertexPointer(2, GL_FLOAT, 0, vert); glTexCoordPointer(2, GL_FLOAT, 0, tex); glDrawArrays(GL_TRIANGLE_FAN, 0, 4); glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_TEXTURE_COORD_ARRAY); #else glBegin(GL_QUADS); glTexCoord2d(s1, t2); glVertex2f(repeat_right_border, y1); glTexCoord2d(s2, t2); glVertex2f(1.0, y1); glTexCoord2d(s2, t1); glVertex2f(1.0, y2); glTexCoord2d(s1, t1); glVertex2f(repeat_right_border, y2); glEnd(); #endif CHECK_GL_ERROR(); // so the following code does not render black rectangle over // the right border x2 = 1.0; } if (g_fs_emu_overlay_texture) { fs_gl_blending(1); fs_gl_texturing(1); fs_gl_color4f(alpha, alpha, alpha, alpha); //fs_gl_bind_texture(g_fs_emu_overlay_texture->texture); fs_emu_set_texture(g_fs_emu_overlay_texture); #ifdef USE_GLES GLfloat tex[] = { 0.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0 }; GLfloat vert[] = { -1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -1.0, 1.0 }; glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_TEXTURE_COORD_ARRAY); glVertexPointer(2, GL_FLOAT, 0, vert); glTexCoordPointer(2, GL_FLOAT, 0, tex); glDrawArrays(GL_TRIANGLE_FAN, 0, 4); glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_TEXTURE_COORD_ARRAY); #else glBegin(GL_QUADS); glTexCoord2f(0.0, 1.0); glVertex2f(-1.0, -1.0); glTexCoord2f(1.0, 1.0); glVertex2f( 1.0, -1.0); glTexCoord2f(1.0, 0.0); glVertex2f( 1.0, 1.0); glTexCoord2f(0.0, 0.0); glVertex2f(-1.0, 1.0); glEnd(); #endif } fs_mutex_lock(g_overlay_mutex); for (int i = 0; i < FS_EMU_MAX_OVERLAYS; i++) { int state = g_overlay_status[i].state; #if 0 if (g_overlay_status[i].render_status && g_overlay_status[i].was_disabled) { show = 0; } else if (!g_overlay_status[i].render_status && g_overlay_status[i].was_enabled) { show = 1; } g_overlay_status[i].was_enabled = 0; g_overlay_status[i].was_disabled = 0; #endif g_overlay_status[i].render_state = state; if (state) { g_overlay_status[i].render_status++; } else { g_overlay_status[i].render_status = 0; } } fs_mutex_unlock(g_overlay_mutex); for (int i = 0; i < FS_EMU_MAX_OVERLAYS; i++) { //if (g_overlay_status[i].render_status < 1) { // continue; //} int state = g_overlay_status[i].render_state; if (state < 0) state = 0; if (state > FS_EMU_MAX_OVERLAY_STATES - 1) { state = FS_EMU_MAX_OVERLAY_STATES - 1; } fs_emu_texture *overlay_texture = \ g_fs_emu_theme.overlays[i].textures[state]; if (!overlay_texture) { continue; } float w = g_fs_emu_theme.overlays[i].w; float h = g_fs_emu_theme.overlays[i].h; float x1 = g_fs_emu_theme.overlays[i].x; if (g_fs_emu_theme.overlays[i].anchor & FS_EMU_ANCHOR_RIGHT_BIT) { x1 = x1 + 1.0 - w; } float y1 = g_fs_emu_theme.overlays[i].y; if (g_fs_emu_theme.overlays[i].anchor & FS_EMU_ANCHOR_BOTTOM_BIT) { y1 = y1 + 1.0 - h; } float x2 = x1 + w; float y2 = y1 + h; x1 = -1.0 + 2.0 * x1; x2 = -1.0 + 2.0 * x2; y1 = 1.0 - 2.0 * y1; y2 = 1.0 - 2.0 * y2; fs_gl_blending(1); fs_gl_texturing(1); fs_gl_color4f(1.0, 1.0, 1.0, 1.0); fs_emu_set_texture(overlay_texture); #ifdef USE_GLES GLfloat tex[] = { 0.0, 0.0, 1.0, 0.0, 1.0, 1.0, 0.0, 1.0 }; GLfloat vert[] = { x1, y1, x2, y1, x2, y2, x1, y2 }; glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_TEXTURE_COORD_ARRAY); glVertexPointer(2, GL_FLOAT, 0, vert); glTexCoordPointer(2, GL_FLOAT, 0, tex); glDrawArrays(GL_TRIANGLE_FAN, 0, 4); glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_TEXTURE_COORD_ARRAY); #else glBegin(GL_QUADS); glTexCoord2f(0.0, 0.0); glVertex2f(x1, y1); glTexCoord2f(1.0, 0.0); glVertex2f(x2, y1); glTexCoord2f(1.0, 1.0); glVertex2f(x2, y2); glTexCoord2f(0.0, 1.0); glVertex2f(x1, y2); glEnd(); #endif } } static void render_glow(double opacity) { //printf("--- render glow ---\n"); float tx1, ty1, tx2, ty2; //const double dx = 0.1 * 9.0 / 16.0; const double dx = 0.15; const double dy = 0.15 * 16.0 / 9.0; const double z = 0.0; const double s = 0.65 * opacity; fs_gl_color4f(s, s, s, s); fs_gl_blending(1); //fs_emu_set_texture(g_tex_glow_top); fs_emu_prepare_texture(TEXTURE_GLOW_TOP, &tx1, &ty1, &tx2, &ty2); // render top edge #ifdef USE_GLES GLfloat tex[] = { tx1, ty2, tx2, ty2, tx2, ty1, tx1, ty1 }; GLfloat vert[] = { -1.0 + dx, 1.0 - dy, z, 1.0 - dx, 1.0 - dy, z, 1.0 - dx, 1.0 + dy, z, -1.0 + dx, 1.0 + dy, z }; glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_TEXTURE_COORD_ARRAY); glVertexPointer(3, GL_FLOAT, 0, vert); glTexCoordPointer(2, GL_FLOAT, 0, tex); glDrawArrays(GL_TRIANGLE_FAN, 0, 4); glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_TEXTURE_COORD_ARRAY); #else glBegin(GL_QUADS); glTexCoord2f(tx1, ty2); glVertex3f(-1.0 + dx, 1.0 - dy, z); glTexCoord2f(tx2, ty2); glVertex3f( 1.0 - dx, 1.0 - dy, z); glTexCoord2f(tx2, ty1); glVertex3f( 1.0 - dx, 1.0 + dy, z); glTexCoord2f(tx1, ty1); glVertex3f(-1.0 + dx, 1.0 + dy, z); glEnd(); #endif CHECK_GL_ERROR(); // render corners fs_emu_prepare_texture(TEXTURE_GLOW_TOP_LEFT, &tx1, &ty1, &tx2, &ty2); #ifdef USE_GLES GLfloat tex2[] = { // top left corner tx1, ty2, tx2, ty2, tx2, ty1, tx1, ty1, // top right corner tx2, ty2, tx1, ty2, tx1, ty1, tx2, ty1 }; GLfloat vert2[] = { // top left corner -1.0 - dx, 1.0 - dy, z, -1.0 + dx, 1.0 - dy, z, -1.0 + dx, 1.0 + dy, z, -1.0 - dx, 1.0 + dy, z, // top right corner 1.0 - dx, 1.0 - dy, z, 1.0 + dx, 1.0 - dy, z, 1.0 + dx, 1.0 + dy, z, 1.0 - dx, 1.0 + dy, z }; glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_TEXTURE_COORD_ARRAY); glVertexPointer(3, GL_FLOAT, 0, vert2); glTexCoordPointer(2, GL_FLOAT, 0, tex2); glDrawArrays(GL_TRIANGLE_FAN, 0, 4); glDrawArrays(GL_TRIANGLE_FAN, 4, 4); glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_TEXTURE_COORD_ARRAY); #else glBegin(GL_QUADS); // top left corner glTexCoord2f(tx1, ty2); glVertex3f(-1.0 - dx, 1.0 - dy, z); glTexCoord2f(tx2, ty2); glVertex3f(-1.0 + dx, 1.0 - dy, z); glTexCoord2f(tx2, ty1); glVertex3f(-1.0 + dx, 1.0 + dy, z); glTexCoord2f(tx1, ty1); glVertex3f(-1.0 - dx, 1.0 + dy, z); // top right corner glTexCoord2f(tx2, ty2); glVertex3f( 1.0 - dx, 1.0 - dy, z); glTexCoord2f(tx1, ty2); glVertex3f( 1.0 + dx, 1.0 - dy, z); glTexCoord2f(tx1, ty1); glVertex3f( 1.0 + dx, 1.0 + dy, z); glTexCoord2f(tx2, ty1); glVertex3f( 1.0 - dx, 1.0 + dy, z); glEnd(); #endif CHECK_GL_ERROR(); // render left and right edge fs_emu_prepare_texture(TEXTURE_GLOW_LEFT, &tx1, &ty1, &tx2, &ty2); //fs_emu_set_texture(g_tex_glow_left); #ifdef USE_GLES GLfloat color3[] = { // left edge s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, // right edge s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, s, // left edge bottom 0, 0, 0, 0, 0, 0, 0, 0, s, s, s, s, s, s, s, s, // right edge bottom 0, 0, 0, 0, 0, 0, 0, 0, s, s, s, s, s, s, s, s, }; GLfloat tex3[] = { // left edge tx1, ty2, tx2, ty2, tx2, ty1, tx1, ty1, // right edge tx2, ty2, tx1, ty2, tx1, ty1, tx2, ty1, // left edge bottom tx1, ty2, tx2, ty2, tx2, ty1, tx1, ty1, // right edge bottom tx2, ty2, tx1, ty2, tx1, ty1, tx2, ty1 }; GLfloat vert3[] = { // left edge -1.0 - dx, -0.5, z, -1.0 + dx, -0.5, z, -1.0 + dx, 1.0 - dy, z, -1.0 - dx, 1.0 - dy, z, // right edge 1.0 - dx, -0.5, z, 1.0 + dx, -0.5, z, 1.0 + dx, 1.0 - dy, z, 1.0 - dx, 1.0 - dy, z, // left edge bottom -1.0 - dx, -1.0, z, -1.0 + dx, -1.0, z, -1.0 + dx, -0.5, z, -1.0 - dx, -0.5, z, // right edge bottom 1.0 - dx, -1.0, z, 1.0 + dx, -1.0, z, 1.0 + dx, -0.5, z, 1.0 - dx, -0.5, z }; glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_TEXTURE_COORD_ARRAY); glEnableClientState(GL_COLOR_ARRAY); glColorPointer(4, GL_FLOAT, 0, color3); glVertexPointer(3, GL_FLOAT, 0, vert3); glTexCoordPointer(2, GL_FLOAT, 0, tex3); glDrawArrays(GL_TRIANGLE_FAN, 0, 4); glDrawArrays(GL_TRIANGLE_FAN, 4, 4); glDrawArrays(GL_TRIANGLE_FAN, 8, 4); glDrawArrays(GL_TRIANGLE_FAN, 12, 4); glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_TEXTURE_COORD_ARRAY); glDisableClientState(GL_COLOR_ARRAY); #else glBegin(GL_QUADS); // left edge glTexCoord2f(tx1, ty2); glVertex3f(-1.0 - dx, -0.5, z); glTexCoord2f(tx2, ty2); glVertex3f(-1.0 + dx, -0.5, z); glTexCoord2f(tx2, ty1); glVertex3f(-1.0 + dx, 1.0 - dy, z); glTexCoord2f(tx1, ty1); glVertex3f(-1.0 - dx, 1.0 - dy, z); // right edge glTexCoord2f(tx2, ty2); glVertex3f( 1.0 - dx, -0.5, z); glTexCoord2f(tx1, ty2); glVertex3f( 1.0 + dx, -0.5, z); glTexCoord2f(tx1, ty1); glVertex3f( 1.0 + dx, 1.0 - dy, z); glTexCoord2f(tx2, ty1); glVertex3f( 1.0 - dx, 1.0 - dy, z); // left edge bottom fs_gl_color4f(0.0, 0.0, 0.0, 0.0); glTexCoord2f(tx1, ty2); glVertex3f(-1.0 - dx, -1.0, z); glTexCoord2f(tx2, ty2); glVertex3f(-1.0 + dx, -1.0, z); fs_gl_color4f(s, s, s, s); glTexCoord2f(tx2, ty1); glVertex3f(-1.0 + dx, -0.5, z); glTexCoord2f(tx1, ty1); glVertex3f(-1.0 - dx, -0.5, z); // right edge bottom fs_gl_color4f(0.0, 0.0, 0.0, 0.0); glTexCoord2f(tx2, ty2); glVertex3f( 1.0 - dx, -1.0, z); glTexCoord2f(tx1, ty2); glVertex3f( 1.0 + dx, -1.0, z); fs_gl_color4f(s, s, s, s); glTexCoord2f(tx1, ty1); glVertex3f( 1.0 + dx, -0.5, z); glTexCoord2f(tx2, ty1); glVertex3f( 1.0 - dx, -0.5, z); glEnd(); #endif CHECK_GL_ERROR(); //printf("--- render glow done ---\n"); } /** * This function is called at the end of the frame rendering function */ static void handle_quit_sequence() { int fade_time = fs_config_get_int_clamped("fade_out_duration", 0, 10000); if (fade_time == FS_CONFIG_NONE) { fade_time = 750; } fade_time = fade_time * 1000; int64_t dt = fs_emu_monotonic_time() - g_fs_emu_quit_time; if (dt > fade_time && g_fs_emu_emulation_thread_stopped) { fs_emu_log("calling fs_ml_stop because emu thread is done\n"); fs_ml_stop(); } else if (dt > 5 * 1000 * 1000) { // 5 seconds has passed after shutdown was requested fs_emu_log("calling fs_ml_stop because emu does not stop\n"); // FIXME: FORCE STOP fs_ml_stop(); fs_emu_log("force-closing the emulator\n"); exit(1); } // fade out over 750ms float fade = (1.0 * dt) / fade_time; if (fade > 1.0) { fade = 1.0; } // draw fading effect fs_gl_viewport(0, 0, fs_ml_video_width(), fs_ml_video_height()); fs_gl_ortho_hd(); fs_gl_blending(1); fs_gl_texturing(0); fs_gl_color4f(g_fs_emu_theme.fade_color[0] * fade, g_fs_emu_theme.fade_color[1] * fade, g_fs_emu_theme.fade_color[2] * fade, fade); #ifdef USE_GLES GLfloat vert[] = { 0, 0, 1920, 0, 1920, 1080, 0, 1080 }; glEnableClientState(GL_VERTEX_ARRAY); glVertexPointer(2, GL_FLOAT, 0, vert); glDrawArrays(GL_TRIANGLE_FAN, 0, 4); glDisableClientState(GL_VERTEX_ARRAY); #else glBegin(GL_QUADS); glVertex2f(0, 0); glVertex2f(1920, 0); glVertex2f(1920, 1080); glVertex2f(0, 1080); glEnd(); #endif CHECK_GL_ERROR(); } int fs_emu_video_update_function() { return update_texture(); } void fs_emu_video_render_function() { static int initialized_menu = 0; if (!initialized_menu) { // render menu once (without really showing it, so all menu // resources are initialized and loaded, -prevents flickering // when really opening the menu later fs_emu_menu_render(g_menu_transition); initialized_menu = 1; } if (g_fs_emu_video_debug) { int quarter_height = fs_ml_video_height() / 4; fs_gl_viewport(0, quarter_height, fs_ml_video_width(), fs_ml_video_height() - quarter_height); } else { fs_gl_viewport(0, 0, fs_ml_video_width(), fs_ml_video_height()); } // FIXME: can perhaps remove this soon.. fs_emu_video_render_mutex_lock(); int in_menu = fs_emu_menu_is_active(); if (in_menu && g_menu_transition_target < 1.0) { g_menu_transition_target = 1.0; } if (!in_menu && g_menu_transition_target > 0.0) { g_menu_transition_target = 0.0; } float menu_transition_speed = 0.10; int allow_perspective = 1; #ifdef WITH_LUA //fs_emu_acquire_lua(); //lua_getglobal(fs_emu_lua_state, "on_render_frame"); //if (lua_isnil(fs_emu_lua_state, -1)) { // lua_pop(fs_emu_lua_state, 1); //} if (g_frame_override) { // don't allow perspective with the new scripted rendering system allow_perspective = 0; menu_transition_speed = 1.0 / 7.0; glClearColor(0.0, 0.0, 0.0, 1.0); glClear(GL_COLOR_BUFFER_BIT); } //fs_emu_release_lua(); #endif // FIXME: ideally, we would use time-based animation - for now, we use a // simple frame-based animation if (g_menu_transition < g_menu_transition_target) { if (g_menu_transition_target == 1.0) { g_menu_transition += menu_transition_speed; } } if (g_menu_transition > g_menu_transition_target) { if (g_menu_transition_target == 0.0) { g_menu_transition -= menu_transition_speed; } } if (g_menu_transition > 1.0) { g_menu_transition = 1.0; } else if (g_menu_transition < 0.0) { g_menu_transition = 0.0; } int matrix_pushed = 0; double t0_x = 0.0; double t0_y = 0.0; double t0_z = -2.42; double r0_a = 0.0; double t1_x = -0.31; //double t1_y = -0.04; double t1_y = 0.0; double t1_z = -3.7; double r1_a = 30.0; int perspective = 0; if (g_menu_transition == 0.0 || allow_perspective == 0) { perspective = 0; fs_gl_ortho(); //glTranslated(1920.0 / 2.0, 1080.0 / 2.0, 0.0); //glScaled(1920.0 / 2.0, 1080.0 / 2.0, 1.0); } else { perspective = 1; glClearColor(0.1, 0.1, 0.1, 1.0); glClear(GL_DEPTH_BUFFER_BIT); CHECK_GL_ERROR(); fs_gl_ortho_hd(); // transition y-coordinate between floor and wall int splt = g_fs_emu_theme.floor_height; fs_gl_blending(FALSE); fs_gl_texturing(FALSE); #ifdef USE_GLES GLfloat vert[] = { // q1 0, splt, -0.9, 1920, splt, -0.9, 1920, 1020, -0.9, 0, 1020, -0.9, // q2 0, 1020, -0.9, 1920, 1020, -0.9, 1920, 1080, -0.9, 0, 1080, -0.9, // q3 0, 0, -0.9, 1920, 0, -0.9, 1920, splt, -0.9, 0, splt, -0.9 }; GLfloat *wc1 = g_fs_emu_theme.wall_color_1; GLfloat *wc2 = g_fs_emu_theme.wall_color_2; GLfloat color[] = { // q1 wc2[0], wc2[1], wc2[2], wc2[3], wc2[0], wc2[1], wc2[2], wc2[3], wc1[0], wc1[1], wc1[2], wc1[3], wc1[0], wc1[1], wc1[2], wc1[3], // q2 wc1[0], wc1[1], wc1[2], wc1[3], wc1[0], wc1[1], wc1[2], wc1[3], wc1[0], wc1[1], wc1[2], wc1[3], wc1[0], wc1[1], wc1[2], wc1[3], // q3 wc2[0], wc2[1], wc2[2], wc2[3], wc2[0], wc2[1], wc2[2], wc2[3], wc1[0], wc1[1], wc1[2], wc1[3], wc1[0], wc1[1], wc1[2], wc1[3], }; glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_COLOR_ARRAY); glVertexPointer(3, GL_FLOAT, 0, vert); glColorPointer(4, GL_FLOAT, 0, color); glDrawArrays(GL_TRIANGLE_FAN, 0, 4); glDrawArrays(GL_TRIANGLE_FAN, 4, 4); glDrawArrays(GL_TRIANGLE_FAN, 8, 4); glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_COLOR_ARRAY); #else glBegin(GL_QUADS); fs_gl_color4fv(g_fs_emu_theme.wall_color_2); glVertex3f( 0, splt, -0.9); glVertex3f(1920, splt, -0.9); fs_gl_color4fv(g_fs_emu_theme.wall_color_1); glVertex3f(1920, 1020, -0.9); glVertex3f( 0, 1020, -0.9); glVertex3f( 0, 1020, -0.9); glVertex3f(1920, 1020, -0.9); //fs_gl_color4f(0.0, 0.0, 0.0, 1.0); glVertex3f(1920, 1080, -0.9); glVertex3f( 0, 1080, -0.9); fs_gl_color4fv(g_fs_emu_theme.floor_color_2); glVertex3f( 0, 0, -0.9); glVertex3f(1920, 0, -0.9); fs_gl_color4fv(g_fs_emu_theme.floor_color_1); glVertex3f(1920, splt, -0.9); glVertex3f( 0, splt, -0.9); glEnd(); #endif CHECK_GL_ERROR(); fs_gl_perspective(); double t_x = t0_x + (t1_x - t0_x) * g_menu_transition; double t_y = t0_y + (t1_y - t0_y) * g_menu_transition; double t_z = t0_z + (t1_z - t0_z) * g_menu_transition; double r_a = r0_a + (r1_a - r0_a) * g_menu_transition; glPushMatrix(); matrix_pushed = 1; glScaled(16.0 / 9.0, 1.0, 1.0); glTranslated(t_x, t_y, t_z); glRotated(r_a, 0.0, 1.0, 0.0); CHECK_GL_ERROR(); } if (perspective) { render_glow(g_menu_transition); } if (perspective) { glPushMatrix(); glTranslatef(0.0, -2.0, 0.0); //glTranslatef(0.0, -1.0, 0.0); //glScalef(1.0, -1.0, 1.0); glScalef(1.0, -0.5, 1.0); glTranslatef(0.0, -1.0, 0.0); CHECK_GL_ERROR(); render_frame(0.33, perspective); CHECK_GL_ERROR(); render_gloss(g_menu_transition * 0.66); CHECK_GL_ERROR(); glPopMatrix(); CHECK_GL_ERROR(); } render_frame(1.0, perspective); if (perspective) { render_gloss(g_menu_transition); } #if 0 if (fs_emu_is_paused()) { fs_gl_blending(1); fs_gl_texturing(1); fs_emu_draw_texture_with_size(TEXTURE_PAUSE, 0.0, 0.0, 0.1, 0.1); } #endif if (matrix_pushed) { glPopMatrix(); CHECK_GL_ERROR(); matrix_pushed = 0; } fs_emu_acquire_gui_lock(); fs_emu_hud_render_chat(); //if (fs_emu_menu_is_active()) { if (g_menu_transition > 0.0) { fs_emu_menu_render(g_menu_transition); } fs_emu_dialog_render(); fs_emu_release_gui_lock(); #ifdef WITH_NETPLAY if (g_fs_emu_hud_mode && fs_emu_netplay_enabled()) { fs_gl_ortho_hd(); fs_gl_texturing(0); fs_gl_blending(1); fs_gl_color4f(0.0, 0.0, 0.0, 0.5); #ifdef USE_GLES GLfloat vert[] = { 0, 1030, 1920, 1030, 1920, 1080, 0, 1080 }; glEnableClientState(GL_VERTEX_ARRAY); glVertexPointer(2, GL_FLOAT, 0, vert); glDrawArrays(GL_TRIANGLE_FAN, 0, 4); glDisableClientState(GL_VERTEX_ARRAY); #else glBegin(GL_QUADS); glVertex2f(0, 1030); glVertex2f(1920, 1030); glVertex2f(1920, 1080); glVertex2f(0, 1080); glEnd(); #endif CHECK_GL_ERROR(); #if 0 glBegin(GL_QUADS); glVertex2f(0, 1030); glVertex2f(1920, 1030); fs_gl_color4f(0.0, 0.0, 0.0, 0.0); glVertex2f(1920, 1030 - 50); glVertex2f(0, 1030 - 50); glEnd(); #endif fs_emu_font *menu_font = fs_emu_font_get_menu(); char *str; for (int i = 0; i < MAX_PLAYERS; i++) { fs_emu_player *player = g_fs_emu_players + i; int x = i * 1920 / 6 + 20; int y = 1038; int rendered_tag = 0; if (player->tag && player->tag[0]) { str = fs_strdup_printf("%s", player->tag); fs_emu_font_render(menu_font, str, x, y, 1.0, 1.0, 1.0, 1.0); free(str); rendered_tag = 1; } if (rendered_tag || player->ping) { str = fs_strdup_printf("%03d", player->ping); fs_emu_font_render(menu_font, str, x + 100, y, 1.0, 1.0, 1.0, 1.0); free(str); } /* if (rendered_tag || player->lag) { str = fs_strdup_printf("%03d", player->lag); fs_emu_font_render(menu_font, str, x + 200, y, 1.0, 1.0, 1.0, 1.0); free(str); } */ } } #endif #if 1 if (fs_emu_is_paused()) { fs_gl_ortho_hd(); fs_gl_blending(1); fs_gl_texturing(1); fs_emu_draw_texture(TEXTURE_PAUSE, 160, 1080 - 160 - 64); } #endif if (g_fs_emu_video_debug) { int quarter_height = fs_ml_video_height() / 4; fs_gl_viewport(0, 0, fs_ml_video_width(), quarter_height); CHECK_GL_ERROR(); fs_emu_set_texture(NULL); CHECK_GL_ERROR(); static GLuint debug_texture = 0; static uint32_t *debug_texture_data = NULL; if (debug_texture == 0) { debug_texture_data = fs_malloc0(256 * 256 * 4); glGenTextures(1, &debug_texture); CHECK_GL_ERROR(); fs_gl_bind_texture(debug_texture); fs_gl_unpack_row_length(0); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 256, 256, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); CHECK_GL_ERROR(); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); CHECK_GL_ERROR(); } else { fs_gl_bind_texture(debug_texture); CHECK_GL_ERROR(); } memset(debug_texture_data, 0x00, 256 * 256 * 4); CHECK_GL_ERROR(); fs_emu_video_render_debug_info(debug_texture_data); CHECK_GL_ERROR(); fs_emu_audio_render_debug_info(debug_texture_data); CHECK_GL_ERROR(); fs_gl_unpack_row_length(0); CHECK_GL_ERROR(); glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 256, 256, GL_RGBA, GL_UNSIGNED_BYTE, debug_texture_data); CHECK_GL_ERROR(); fs_gl_ortho_hd(); fs_gl_texturing(1); fs_gl_blending(0); fs_gl_color4f(1.0, 1.0, 1.0, 1.0); #ifdef USE_GLES GLfloat tex[] = { 0.0, 0.0, 1.0, 0.0, 1.0, 1.0, 0.0, 1.0 }; GLfloat vert[] = { 0, 0, 1920, 0, 1920, 1080, 0, 1080 }; glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_TEXTURE_COORD_ARRAY); glTexCoordPointer(2, GL_FLOAT, 0, tex); glVertexPointer(2, GL_FLOAT, 0, vert); glDrawArrays(GL_TRIANGLE_FAN, 0, 4); glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_TEXTURE_COORD_ARRAY); #else glBegin(GL_QUADS); glTexCoord2f(0.0, 0.0); glVertex2f(0, 0); glTexCoord2f(1.0, 0.0); glVertex2f(1920, 0); glTexCoord2f(1.0, 1.0); glVertex2f(1920, 1080); glTexCoord2f(0.0, 1.0); glVertex2f(0, 1080); glEnd(); #endif CHECK_GL_ERROR(); glPushMatrix(); glScalef(1.0, 4.0, 1.0); fs_emu_font *menu_font = fs_emu_font_get_menu(); char *str; /* str = fs_strdup_printf("%d", fs_emu_get_audio_frequency()); fs_emu_font_render(menu_font, str, 1920 / 2 + 20, 3, 1.0, 1.0, 1.0, 1.0); free(str); */ str = fs_strdup_printf("%0.1f", fs_emu_audio_get_measured_avg_buffer_fill(0) / 1000.0); fs_emu_font_render(menu_font, str, 1920 / 2 + 220, 3, 1.0, 1.0, 1.0, 1.0); free(str); str = fs_strdup_printf("%d", g_fs_emu_audio_buffer_underruns); fs_emu_font_render(menu_font, str, 1920 / 2 + 420, 3, 1.0, 1.0, 1.0, 1.0); free(str); fs_emu_font_render(menu_font, "EMU", 20, 3, 1.0, 1.0, 1.0, 1.0); str = fs_strdup_printf("%0.1f", fs_emu_get_average_emu_fps()); fs_emu_font_render(menu_font, str, 220, 3, 1.0, 1.0, 1.0, 1.0); free(str); str = fs_strdup_printf("%d", g_fs_emu_lost_frames); fs_emu_font_render(menu_font, str, 420, 3, 1.0, 1.0, 1.0, 1.0); free(str); str = fs_strdup_printf("%d", g_fs_emu_repeated_frames); fs_emu_font_render(menu_font, str, 620, 3, 1.0, 1.0, 1.0, 1.0); free(str); fs_emu_font_render(menu_font, "SYS", 20, 140, 1.0, 1.0, 1.0, 1.0); str = fs_strdup_printf("%0.1f", fs_emu_get_average_sys_fps()); fs_emu_font_render(menu_font, str, 220, 140, 1.0, 1.0, 1.0, 1.0); free(str); str = fs_strdup_printf("%d", g_fs_emu_lost_vblanks); fs_emu_font_render(menu_font, str, 420, 140, 1.0, 1.0, 1.0, 1.0); free(str); glPopMatrix(); CHECK_GL_ERROR(); } if (fs_emu_is_quitting()) { handle_quit_sequence(); } fs_emu_video_render_mutex_unlock(); } void fs_emu_video_render_debug_info(uint32_t *texture) { //return; int x; //, y; int y1; fs_list *link; uint32_t color = 0x80404080; fs_gl_ortho_hd(); fs_gl_blending(TRUE); fs_gl_texturing(FALSE); // render debug triangles, these are for visually debugging vblank // synchronization y1 = 0; color = 0x80800080; static int start_add = 0; int add = start_add; for (int x = 0; x < 256; x++) { int y2 = add % 20; for (int y = y1; y < y2; y++) { *(texture + (((255 - y) * 256) + x)) = color; } add += 2; } start_add += 2; x = 127; y1 = 128; color = 0x80404080; link = fs_queue_peek_head_link(g_fs_emu_sys_frame_times.queue); while (link) { int val = FS_POINTER_TO_INT(link->data); //int x2 = x - 8; int y2 = y1 + val * VIDEO_DEBUG_SCALE_TIMES; if (y2 > 256) { y2 = 256; } for (int y = y1; y < y2; y++) { *(texture + ((y * 256) + x)) = color; } if (--x < 0) { break; } link = link->next; } x = 127; y1 = 0; color = 0x80205080; link = fs_queue_peek_head_link(g_fs_emu_emu_frame_times.queue); while (link) { int val = FS_POINTER_TO_INT(link->data); //int x2 = x - 8; int y2 = y1 + val * VIDEO_DEBUG_SCALE_TIMES; if (y2 > 256) { y2 = 256; } for (int y = y1; y < y2; y++) { *(texture + ((y * 256) + x)) = color; } if (--x < 0) { break; } link = link->next; } x = 127; y1 = 0; color = 0x80008080; link = fs_queue_peek_head_link(g_fs_emu_emu2_frame_times.queue); while (link) { int val = FS_POINTER_TO_INT(link->data); //int x2 = x - 8; int y2 = y1 + val * VIDEO_DEBUG_SCALE_TIMES; if (y2 > 256) { y2 = 256; } for (int y = y1; y < y2; y++) { *(texture + ((y * 256) + x)) = color; } if (--x < 0) { break; } link = link->next; } } #ifdef WITH_LUA static int l_fs_emu_set_scale(lua_State *L) { int x = luaL_checkinteger(L, 1); int y = luaL_checkinteger(L, 2); // make sure we don't divide by zero later, zero scale not allowed if (x == 0) { x = 1; } if (y == 0) { y = 1; } g_l_scale_x = x; g_l_scale_y = y; return 0; } /* static int l_fs_emu_render_frame(lua_State *L) { int x = luaL_checkinteger(L, 1); int y = luaL_checkinteger(L, 2); int w = luaL_checkinteger(L, 3); int h = luaL_checkinteger(L, 4); float color = 1.0; if (g_frame_texture == 0) { // texture has not been created yet color = 0.0; fs_gl_texturing(0); } else { fs_gl_texturing(1); fs_gl_bind_texture(g_frame_texture); } fs_gl_blending(0); fs_gl_color4f(color, color, color, 1.0); float x1 = -1.0 + x * 2.0 / g_l_scale_x; float x2 = -1.0 + (x + w) * 2.0 / g_l_scale_x; float y2 = 1.0 - y * 2.0 / g_l_scale_y; float y1 = 1.0 - (y + h) * 2.0 / g_l_scale_y; double s1 = 0.0; double t1 = 0.0; double s2 = (double) g_crop.w / g_frame_texture_width; double t2 = (double) g_crop.h / g_frame_texture_height; render_quad(x1, y1, x2, y2, s1, t1, s2, t2); return 0; } */ static int l_fs_emu_set_frame_position_and_size(lua_State *L) { int x = luaL_checkinteger(L, 1); int y = luaL_checkinteger(L, 2); int w = luaL_checkinteger(L, 3); int h = luaL_checkinteger(L, 4); g_frame_override_x = x; g_frame_override_y = y; g_frame_override_w = w; g_frame_override_h = h; g_frame_override = g_frame_override_w > 0 || g_frame_override_h > 0 || g_frame_override_x > 0 || g_frame_override_y > 0; return 0; } void fs_emu_render_init_lua(void) { fs_log("fs_emu_render_init_lua\n"); //lua_register(fs_emu_lua_state, "fs_emu_render_frame", // l_fs_emu_render_frame); lua_register(fs_emu_lua_state, "fs_emu_set_scale", l_fs_emu_set_scale); lua_register(fs_emu_lua_state, "fs_emu_set_frame_position_and_size", l_fs_emu_set_frame_position_and_size); } #endif void fs_emu_init_render() { fs_log("fs_emu_init_render\n"); g_scale_x = fs_config_get_double("scale_x"); if (g_scale_x == FS_CONFIG_NONE) { g_scale_x = -1.0; } g_scale_y = fs_config_get_double("scale_y"); if (g_scale_y == FS_CONFIG_NONE) { g_scale_y = -1.0; } g_align_x = fs_config_get_double("align_x"); if (g_align_x == FS_CONFIG_NONE) { g_align_x = 0.5; } g_align_y = fs_config_get_double("align_y"); if (g_align_y == FS_CONFIG_NONE) { g_align_y = 0.5; } const char *ccstr = fs_config_get_const_string("texture_filter"); if (ccstr && fs_ascii_strcasecmp(ccstr, "nearest") == 0) { g_texture_filter = GL_NEAREST; } fs_log("scale: %0.2f %0.2f align: %0.2f %0.2f\n", g_scale_x, g_scale_y, g_align_x, g_align_y); g_overlay_mutex = fs_mutex_create(); #ifdef WITH_LUA fs_emu_render_init_lua(); #endif } fs-uae-2.2.3+dfsg/libfsemu/src/emu/scanlines.h0000644000175000017500000000041312162366654021365 0ustar glaubitzglaubitz#ifndef LIBFSEMU_SCANLINES_H_ #define LIBFSEMU_SCANLINES_H_ #include void fs_emu_render_scanlines(uint8_t* out, fs_emu_video_buffer *buffer, int cx, int cy, int cw, int ch, int scanline_dark, int scanline_light); #endif // LIBFSEMU_SCANLINES_H_ fs-uae-2.2.3+dfsg/libfsemu/src/emu/video.c0000644000175000017500000002704312162366654020517 0ustar glaubitzglaubitz//#include #include #include #include #include #include #ifdef USE_OPENGL #include #endif #include "audio.h" #include "emu_lua.h" #include "font.h" #include "libfsemu.h" #include "menu.h" #include "texture.h" #include "theme.h" #include "util.h" #include "video.h" #include "video_buffer.h" #include "xml_shader.h" static int g_fs_emu_aspect_correction = 0; int g_fs_emu_disable_aspect_correction = 0; int g_fs_emu_video_format = 0; int g_fs_emu_video_bpp = 0; int g_fs_emu_texture_format = 0; int g_fs_emu_scanlines = 0; int g_fs_emu_scanlines_dark = 255 * 0.10; int g_fs_emu_scanlines_light = 255 * 0.05; fs_emu_zoom_function g_toogle_zoom_function = NULL; int g_fs_emu_video_debug = 0; int g_fs_emu_video_fullscreen = 0; char *g_fs_emu_video_fullscreen_mode = NULL; int g_fs_emu_video_fullscreen_window = -1; int g_fs_emu_video_crop_mode = 1; int g_fs_emu_screenshot = 0; int g_fs_emu_benchmarking = 0; int64_t g_fs_emu_benchmark_start_time = 0; int g_fs_emu_total_emu_frames = 0; int g_fs_emu_total_sys_frames = 0; #define FRAME_TIME_LIST_COUNT 256 // time is specified in microseconds fs_emu_stat_queue g_fs_emu_emu_frame_times = {}; fs_emu_stat_queue g_fs_emu_emu2_frame_times = {}; fs_emu_stat_queue g_fs_emu_sys_frame_times = {}; int g_fs_emu_lost_frames = 0; int g_fs_emu_repeated_frames = 0; int g_fs_emu_lost_vblanks = 0; int g_fs_emu_audio_buffer_underruns = 0; int64_t g_fs_emu_lost_frame_time = 0; int64_t g_fs_emu_repeated_frame_time = 0; int64_t g_fs_emu_video_mode_change_time = 0; // this is used to make sure that changes to menu etc is not done while // rendering it... handling of input events for menu actions must be done // when holding this lock static fs_mutex *g_video_render_mutex; int g_fs_emu_video_sync_to_vblank = 1; int g_fs_emu_video_allow_full_sync = 1; int g_fs_emu_video_frame_rate_host = 0; // this is the target frame rate for the video (emulator output) static int g_video_frame_rate = 0; // this is the aspect ratio of the video frame from the emulator, defaults // to 1.0 (1:1 pixels) static double g_video_aspect_ratio = 1.0; //static int g_emu_video_struct_seq_no = 0; static fs_queue *g_emu_video_struct_queue = NULL; static fs_mutex *g_emu_video_struct_mutex = NULL; void fs_emu_set_toggle_zoom_function(fs_emu_zoom_function function) { g_toogle_zoom_function = function; } void fs_emu_toggle_zoom(int flags) { if (g_toogle_zoom_function) { g_toogle_zoom_function(flags); } } void fs_emu_set_pixel_aspect_ratio(double ratio) { g_video_aspect_ratio = ratio; } int fs_emu_get_video_frame_rate() { return g_video_frame_rate; } void fs_emu_set_video_frame_rate(int frame_rate) { static int last_frame_rate = 0; static int last_frame_rate_host = 0; if (frame_rate == last_frame_rate && last_frame_rate_host == g_fs_emu_video_frame_rate_host) { return; } last_frame_rate = frame_rate; last_frame_rate_host = g_fs_emu_video_frame_rate_host; fs_log("fs_emu_set_video_frame_rate: %d\n", frame_rate); g_video_frame_rate = frame_rate; fs_log("g_fs_emu_video_sync_to_vblank = %d\n", g_fs_emu_video_sync_to_vblank); if (g_fs_emu_video_sync_to_vblank) { fs_log("g_fs_emu_video_allow_full_sync = %d\n", g_fs_emu_video_allow_full_sync); if (g_fs_emu_video_allow_full_sync) { if (frame_rate && (frame_rate == g_fs_emu_video_frame_rate_host || frame_rate == g_fs_emu_video_frame_rate_host + 1)) { fs_log("frame rate (%d) close enough to screen refresh (%d)\n", frame_rate, g_fs_emu_video_frame_rate_host); fs_ml_video_sync_enable(1); } else { fs_log("frame rate (%d) does not equal screen refresh (%d)\n", frame_rate, g_fs_emu_video_frame_rate_host); fs_ml_video_sync_enable(0); } } } } static void initialize() { static int initialized = 0; if (initialized == 1) { return; } initialized = 1; fs_emu_stat_queue_init(&g_fs_emu_emu_frame_times, FRAME_TIME_LIST_COUNT); fs_emu_stat_queue_init(&g_fs_emu_emu2_frame_times, FRAME_TIME_LIST_COUNT); fs_emu_stat_queue_init(&g_fs_emu_sys_frame_times, FRAME_TIME_LIST_COUNT); } int fs_emu_video_get_aspect_correction() { return g_fs_emu_aspect_correction && !g_fs_emu_disable_aspect_correction; } void fs_emu_video_set_aspect_correction(int correct) { g_fs_emu_aspect_correction = correct; } void fs_emu_video_render_mutex_lock() { if (!g_video_render_mutex) { return; } fs_mutex_lock(g_video_render_mutex); } void fs_emu_video_render_mutex_unlock() { if (!g_video_render_mutex) { return; } fs_mutex_unlock(g_video_render_mutex); } void fs_emu_video_init() { fs_log("fs_emu_video_init\n"); fs_emu_video_init_options(); g_video_render_mutex = fs_mutex_create(); g_emu_video_struct_queue = fs_queue_new(); g_emu_video_struct_mutex = fs_mutex_create(); } int fs_emu_get_video_format() { return g_fs_emu_video_format; } int fs_emu_get_texture_format() { return g_fs_emu_texture_format; } void fs_emu_video_init_opengl() { fs_log("fs_emu_video_init_opengl\n"); fs_emu_initialize_opengl(); initialize(); fs_emu_menu_init_opengl(); #ifdef WITH_XML_SHADER fs_emu_xml_shader_init(); #endif fs_emu_lua_run_handler("on_fs_emu_init_video"); } void fs_emu_toggle_fullscreen() { fs_ml_toggle_fullscreen(); } static int64_t g_frame_time_last = 0; static int64_t g_frame_time_first = 0; void fs_emu_update_video_stats_1() { int t = fs_emu_monotonic_time(); if (g_frame_time_first == 0) { return; } int time_ms = (t - g_frame_time_first) / 1000; int dt = (int) (time_ms - g_frame_time_last); // more than 5 seconds => do not record entry (abnormality) fs_emu_stat_queue_add_entry(&g_fs_emu_emu2_frame_times, dt, 5 * 1000); } void fs_emu_update_video_stats_2() { int t = fs_emu_monotonic_time(); if (g_frame_time_first == 0) { g_frame_time_first = t; } int time_ms = (t - g_frame_time_first) / 1000; fs_emu_audio_video_sync(time_ms); int dt = (int) (time_ms - g_frame_time_last); // more than 5 seconds => do not record entry (abnormality) fs_emu_stat_queue_add_entry(&g_fs_emu_emu_frame_times, dt, 5 * 1000); g_frame_time_last = time_ms; } void update_video_stats_system_video() { if (g_fs_emu_benchmark_start_time > 0) { g_fs_emu_total_sys_frames++; } static int64_t frame_time_first = 0; static int64_t frame_time_last = 0; int t = fs_emu_monotonic_time(); if (frame_time_first == 0) { frame_time_first = t; } int time_ms = (t - frame_time_first) / 1000; int dt = (int) (time_ms - frame_time_last); // more than 5 seconds => do not record entry (abnormality) fs_emu_stat_queue_add_entry(&g_fs_emu_sys_frame_times, dt, 5 * 1000); frame_time_last = time_ms; double refresh_rate = fs_ml_get_refresh_rate(); // check if we have missed a vblank internal, but only after 2 seconds // after first render if (time_ms > 2000 && refresh_rate > 0) { if (dt > 1.5 * 1000.0 / refresh_rate) { g_fs_emu_lost_vblanks++; } } } double fs_emu_get_average_emu_fps() { return 1000.0 / (((double) g_fs_emu_emu_frame_times.total) / ((double) g_fs_emu_emu_frame_times.count)); } double fs_emu_get_average_sys_fps() { return 1000.0 / (((double) g_fs_emu_sys_frame_times.total) / ((double) g_fs_emu_sys_frame_times.count)); } int g_fs_emu_audio_enabled; static void update_leds(int64_t t) { if (g_fs_emu_video_mode_change_time == 0) { // we use this variable to ignore sync warnings for a short while // after the emulation has started and/or video mode changes, since // it will be temporarily "unstable" then. (normal) g_fs_emu_video_mode_change_time = t; } int vsync_led_state = 0; int fps_led_state = 0; int audio_led_state = 0; double diff; int ignore_lossed_frames = 0; int ignore_repeated_frames = 0; if (fs_ml_get_vblank_sync()) { if (g_fs_emu_video_frame_rate_host == 0) { // ? } else if (g_fs_emu_video_frame_rate_host == g_video_frame_rate) { // should ideally not lose / get repeated frames } else if (g_fs_emu_video_frame_rate_host > g_video_frame_rate) { ignore_repeated_frames = 1; } else if (g_fs_emu_video_frame_rate_host < g_video_frame_rate) { ignore_lossed_frames = 1; } diff = g_fs_emu_video_frame_rate_host - fs_emu_get_average_sys_fps(); } else { diff = g_video_frame_rate - fs_emu_get_average_sys_fps(); } if (g_fs_emu_video_frame_rate_host == 0) { // unknown host frame rate diff = 0; } if (diff < 0) { diff = diff * -1; } if (diff > 0.2) { vsync_led_state = 3; } else if (fs_ml_get_vblank_sync()) { if (fs_ml_get_video_sync()) { vsync_led_state = 1; } else { vsync_led_state = 2; } } else { // leave at 0 } diff = g_video_frame_rate - fs_emu_get_average_emu_fps(); if (diff < 0) { diff = diff * -1; } if (diff > 0.1) { fps_led_state = 3; } else if (!ignore_lossed_frames && t - g_fs_emu_lost_frame_time < 100000) { fps_led_state = 3; } else if (!ignore_repeated_frames && t - g_fs_emu_repeated_frame_time < 100000) { fps_led_state = 3; } else if (g_video_frame_rate == 60) { fps_led_state = 2; } else { fps_led_state = 1; } if (t - g_fs_emu_audio_buffer_underrun_time < 100000) { audio_led_state = 3; } else { audio_led_state = g_fs_emu_audio_stream_playing[0]; } int64_t time_since_change = t - g_fs_emu_video_mode_change_time; if (time_since_change < 6000000) { // 6 seconds //int state = ((t - g_fs_emu_video_mode_change_time) / 250000) % 2; //vsync_led_state = state ? vsync_led_state : 0; //fps_led_state = state ? fps_led_state : 0; //audio_led_state = state; fps_led_state = 0; } if (time_since_change < 5000000) { vsync_led_state = 0; } if (time_since_change < 2000000) { audio_led_state = 0; } fs_emu_set_overlay_state(FS_EMU_VSYNC_LED_OVERLAY, vsync_led_state); fs_emu_set_overlay_state(FS_EMU_FPS_LED_OVERLAY, fps_led_state); fs_emu_set_overlay_state(FS_EMU_AUDIO_LED_OVERLAY, audio_led_state); } void fs_emu_video_after_update() { fs_emu_video_buffer_unlock(); int64_t t = fs_emu_monotonic_time(); if (fs_emu_pointer_is_visible_to() > 0) { if (fs_emu_pointer_is_visible_to() < fs_emu_monotonic_time()) { //fs_log("%lld\n", fs_emu_monotonic_time()); fs_emu_show_pointer(0); } } update_leds(t); update_video_stats_system_video(); if (g_fs_emu_benchmark_start_time) { static int64_t last_report = 0; if (t - last_report > 5000000) { double ttime = ((t - g_fs_emu_benchmark_start_time) / 1000000); double sys_fps = g_fs_emu_total_sys_frames / ttime; double emu_fps = g_fs_emu_total_emu_frames / ttime; //fs_log("average fps sys: %0.1f emu: %0.1f\n", sys_fps, emu_fps); printf("average fps sys: %0.1f emu: %0.1f\n", sys_fps, emu_fps); last_report = t; } } } fs-uae-2.2.3+dfsg/libfsemu/src/emu/render.h0000644000175000017500000000012412162366654020664 0ustar glaubitzglaubitz#ifndef LIBFSEMU_RENDER_H_ #define LIBFSEMU_RENDER_H_ #endif // LIBFSEMU_RENDER_H_ fs-uae-2.2.3+dfsg/libfsemu/src/emu/theme.c0000644000175000017500000002276512162366654020521 0ustar glaubitzglaubitz#include "theme.h" #include #include #include #include #include #include #include #include #include #include "texture.h" #include "libfsemu.h" struct fs_emu_theme g_fs_emu_theme = {}; #ifdef WITH_LUA #include "emu_lua.h" static int l_fs_emu_log(lua_State *L) { int n = lua_gettop(L); if (n != 1 || lua_isstring(L, 1)) { lua_pushstring(L, "incorrect argument"); lua_error(L); } const char *s = luaL_checkstring(L, 1); fs_emu_log("%s\n", s); return 0; } void fs_emu_theme_init_lua(void) { fs_log("fs_emu_theme_init_lua\n"); char *path = fs_path_join(g_fs_emu_theme.path, "theme.lua", NULL); if (fs_path_exists(path)) { int result = luaL_dofile(fs_emu_lua_state, path); if (result != 0) { fs_emu_warning("Error loading/running theme.lua"); fs_emu_lua_log_error("Error loading/running theme.lua"); } } free(path); } #endif void fs_emu_init_overlays(const char **overlay_names) { int k = FS_EMU_FIRST_CUSTOM_OVERLAY; const char **name = overlay_names; while(*name) { if (k < FS_EMU_MAX_OVERLAYS) { g_fs_emu_theme.overlays[k].name = fs_strdup(*name); } k = k + 1; name++; } } char *fs_emu_theme_get_resource(const char *name) { if (fs_path_exists(name)) { return fs_strdup(name); } char *path, *p; p = fs_path_join(g_fs_emu_theme.path, name, NULL); if (fs_path_exists(p)) { return p; } free(p); p = fs_path_join(g_fs_emu_theme.name, name, NULL); path = fs_get_program_data_file(p); free(p); if (path) { return path; } //p = fs_path_join("default", name, NULL); path = fs_get_program_data_file(name); //free(p); if (path) { return path; } return NULL; } static void set_color(float *c, float r, float g, float b, float a) { c[0] = r; c[1] = g; c[2] = b; c[3] = a; } static void set_color_component(float *c, const char *s) { int val = 0; if (s[0] >= '0' && s[0] <= '9') { val = val + (s[0] - '0') * 16; } else if (s[0] >= 'a' && s[0] <= 'f') { val = val + (10 + s[0] - 'a') * 16; } else if (s[0] >= 'A' && s[0] <= 'F') { val = val + (10 + s[0] - 'A') * 16; } if (s[1] >= '0' && s[1] <= '9') { val = val + (s[1] - '0'); } else if (s[1] >= 'a' && s[1] <= 'f') { val = val + (10 + s[1] - 'a'); } else if (s[1] >= 'A' && s[1] <= 'F') { val = val + (10 + s[1] - 'A'); } *c = val / 255.0; } static void set_color_from_string(float *c, const char *s) { //printf("set_color_from_string %s\n", s); if (!s) { return; } int len = strlen(s); if ((len != 7 && len != 9) || s[0] != '#') { fs_log("invalid color: %s\n", s); return; } set_color_component(c + 0, s + 1); set_color_component(c + 1, s + 3); set_color_component(c + 2, s + 5); if (len == 9) { set_color_component(c + 3, s + 7); // pre-multipled alpha c[0] = c[0] * c[3]; c[1] = c[1] * c[3]; c[2] = c[2] * c[3]; } else { c[3] = 1.0; } } static void load_defaults() { // this determines the coordinate system for overlays, etc g_fs_emu_theme.width = 1920; g_fs_emu_theme.height = 1080; g_fs_emu_theme.floor_height = 361; set_color(g_fs_emu_theme.floor_color_1, 20.0 / 255.0, 22.0 / 255.0, 26.0 / 255.0, 1.0); set_color(g_fs_emu_theme.floor_color_2, 0.0, 0.0, 0.0, 1.0); set_color(g_fs_emu_theme.wall_color_1, 0.0, 0.0, 0.0, 1.0); set_color(g_fs_emu_theme.wall_color_2, 39.0 / 255.0, 44.0 / 255.0, 51.0 / 255.0, 1.0); //set_color(g_fs_emu_theme.wall_color_2, 239.0 / 255.0, 44.0 / 255.0, // 51.0 / 255.0, 1.0); set_color(g_fs_emu_theme.heading_color, 0.0, 1.0 * 0x99 / 0xff, 1.0 * 0xcc / 0xff, 1.0); set_color(g_fs_emu_theme.item_color, 1.0, 1.0, 1.0, 1.0); set_color(g_fs_emu_theme.fade_color, 0.0, 0.0, 0.0, 1.0); g_fs_emu_theme.overlay_image = fs_strdup("overlay.png"); } static void load_theme() { fs_log("loading theme \"%s\"\n", g_fs_emu_theme.path); char *p = fs_path_join(g_fs_emu_theme.path, "theme.conf", NULL); if (fs_path_exists(p)) { fs_config_read_file(p, 1); } free(p); char *cv; int iv; iv = fs_config_get_int("theme_width"); if (iv != FS_CONFIG_NONE && iv > 0) { g_fs_emu_theme.width = iv; } iv = fs_config_get_int("theme_height"); if (iv != FS_CONFIG_NONE && iv > 0) { g_fs_emu_theme.height = iv; } set_color_from_string(g_fs_emu_theme.floor_color_1, fs_config_get_const_string("theme_floor_color_1")); set_color_from_string(g_fs_emu_theme.floor_color_2, fs_config_get_const_string("theme_floor_color_2")); set_color_from_string(g_fs_emu_theme.wall_color_1, fs_config_get_const_string("theme_wall_color_1")); set_color_from_string(g_fs_emu_theme.wall_color_2, fs_config_get_const_string("theme_wall_color_2")); iv = fs_config_get_int("theme_floor_height"); if (iv != FS_CONFIG_NONE) { g_fs_emu_theme.floor_height = iv; } cv = fs_config_get_string("theme_overlay_image"); if (cv) { free(g_fs_emu_theme.overlay_image); g_fs_emu_theme.overlay_image = cv; } set_color_from_string(g_fs_emu_theme.fade_color, fs_config_get_const_string("theme_fade_color")); set_color_from_string(g_fs_emu_theme.heading_color, fs_config_get_const_string("theme_heading_color")); set_color_from_string(g_fs_emu_theme.item_color, fs_config_get_const_string("theme_item_color")); for (int i = 0; i < FS_EMU_MAX_OVERLAYS; i++) { char *name; int val; // the first options read here are old compatibility options name = fs_strdup_printf("theme_custom_%d_x", i - FS_EMU_FIRST_CUSTOM_OVERLAY); val = fs_config_get_int(name); free(name); if (val != FS_CONFIG_NONE) { //printf("x is %d\n", val); g_fs_emu_theme.overlays[i].x = (double) val / g_fs_emu_theme.width; } name = fs_strdup_printf("theme_custom_%d_y", i - FS_EMU_FIRST_CUSTOM_OVERLAY); val = fs_config_get_int(name); free(name); if (val != FS_CONFIG_NONE) { g_fs_emu_theme.overlays[i].y = (double) val / g_fs_emu_theme.height; } if (!g_fs_emu_theme.overlays[i].name) { continue; } // these are new theme / overlay options name = fs_strdup_printf("theme_%s_pos", g_fs_emu_theme.overlays[i].name); const char *csval = fs_config_get_const_string(name); free(name); if (csval) { int x, y; if (sscanf(csval, "%d,%d", &x, &y) == 2) { g_fs_emu_theme.overlays[i].x = (double) x / g_fs_emu_theme.width; g_fs_emu_theme.overlays[i].y = (double) y / g_fs_emu_theme.height; } } } #ifdef WITH_LUA fs_emu_theme_init_lua(); #endif } void fs_emu_theme_init() { fs_log("fs_emu_theme_init\n"); fs_emu_theme_overlay* o = g_fs_emu_theme.overlays; o[FS_EMU_TOP_LEFT_OVERLAY].name = fs_strdup("top_left_overlay"); o[FS_EMU_TOP_RIGHT_OVERLAY].name = fs_strdup("top_right_overlay"); o[FS_EMU_TOP_RIGHT_OVERLAY].anchor = FS_EMU_ANCHOR_TOP_RIGHT; o[FS_EMU_BOTTOM_RIGHT_OVERLAY].name = fs_strdup("bottom_right_overlay"); o[FS_EMU_BOTTOM_RIGHT_OVERLAY].anchor = FS_EMU_ANCHOR_BOTTOM_RIGHT; o[FS_EMU_BOTTOM_LEFT_OVERLAY].name = fs_strdup("bottom_left_overlay"); o[FS_EMU_BOTTOM_LEFT_OVERLAY].anchor = FS_EMU_ANCHOR_BOTTOM_LEFT; o[FS_EMU_AUDIO_LED_OVERLAY].name = fs_strdup("audio_led"); o[FS_EMU_FPS_LED_OVERLAY].name = fs_strdup("fps_led"); o[FS_EMU_VSYNC_LED_OVERLAY].name = fs_strdup("vsync_led"); const char *theme = fs_config_get_const_string("theme"); if (theme) { g_fs_emu_theme.name = fs_strdup(theme); // first try to find the theme in the user's theme dir const char *themes_dir = fs_config_get_const_string("themes_dir"); if (themes_dir) { g_fs_emu_theme.path = fs_path_join(themes_dir, g_fs_emu_theme.name, NULL); if (!fs_path_exists(g_fs_emu_theme.path)) { free(g_fs_emu_theme.path); g_fs_emu_theme.path = NULL; } } // or by direct path lookup if (!g_fs_emu_theme.path) { if (fs_path_exists(theme)) { g_fs_emu_theme.path = fs_strdup(theme); } } // then try to find a bundled / installed theme if (!g_fs_emu_theme.path) { g_fs_emu_theme.path = fs_get_program_data_file( g_fs_emu_theme.name); } if (g_fs_emu_theme.path) { fs_log("theme found at %s\n", g_fs_emu_theme.path); } else { fs_emu_warning(_("Theme not found: %s"), g_fs_emu_theme.name); free(g_fs_emu_theme.name); // resources will not be found, but path should not be NULL... g_fs_emu_theme.path = fs_strdup(""); } } else { g_fs_emu_theme.name = fs_strdup(""); g_fs_emu_theme.path = fs_strdup(""); } load_defaults(); load_theme(); } fs-uae-2.2.3+dfsg/libfsemu/src/emu/util.c0000644000175000017500000000254312162366654020364 0ustar glaubitzglaubitz#include "util.h" #include #include void fs_emu_stat_queue_init(fs_emu_stat_queue* stat_queue, int count) { stat_queue->queue = fs_queue_new(); stat_queue->max_count = count; for (int i = 0; i < count; i++) { fs_queue_push_head(stat_queue->queue, FS_INT_TO_POINTER(0)); } } void fs_emu_stat_queue_add_entry(fs_emu_stat_queue* stat_queue, int data, int threshold) { if (stat_queue->queue == NULL) { fs_log("fs_emu_stat_queue_add_entry: queue is null"); return; } if (stat_queue->clear) { for (int i = 0; i < stat_queue->max_count; i++) { fs_queue_push_head(stat_queue->queue, FS_INT_TO_POINTER(0)); fs_queue_pop_tail(stat_queue->queue); } stat_queue->count = 0; stat_queue->total = 0; stat_queue->clear = 0; } /* if (treshold && abs(data) >= treshold) { return; } */ //fs_log("add %d\n", data); fs_queue_push_head(stat_queue->queue, FS_INT_TO_POINTER(data)); int last = FS_POINTER_TO_INT(fs_queue_pop_tail(stat_queue->queue)); // fixme: min and max stat_queue->total += data - last; //fs_log("data %d last %d total %lld\n", data, last, stat_queue->total); stat_queue->seq_no += 1; if (stat_queue->count < stat_queue->max_count) { stat_queue->count++; } } fs-uae-2.2.3+dfsg/libfsemu/src/emu/video.h0000644000175000017500000000271012162366654020516 0ustar glaubitzglaubitz#ifndef LIBFSEMU_VIDEO_H_ #define LIBFSEMU_VIDEO_H_ #include "fs/emu.h" #include "texture.h" extern char *g_fs_emu_video_vsync_mode_arg; extern int g_fs_emu_video_debug; extern int g_fs_emu_video_fullscreen; extern int g_fs_emu_video_fullscreen_window; extern char *g_fs_emu_video_fullscreen_mode; extern int g_fs_emu_video_vsync; extern int g_fs_emu_video_crop_mode; extern int g_fs_ml_opengl_context_stamp; extern int g_fs_emu_screenshot; extern int g_fs_emu_video_bpp; extern int g_fs_emu_video_format; extern int g_fs_emu_texture_format; extern int g_fs_emu_disable_aspect_correction; extern int g_fs_emu_video_allow_full_sync; extern int g_fs_emu_video_frame_rate_host; extern int g_fs_emu_video_sync_to_vblank; void fs_emu_on_resize(int width, int height); void fs_emu_video_render_debug_info(uint32_t *texture); void fs_emu_video_init(void); void fs_emu_video_init_options(void); void fs_emu_video_init_opengl(void); int fs_emu_video_update_function(void); void fs_emu_video_render_function(void); void fs_emu_video_after_update(void); /* this is used to make sure that changes to menu etc is not done while * rendering it... handling of input events for menu actions must be done * when holding this lock, as well as updates to menu state, pause state, etc */ void fs_emu_video_render_mutex_lock(void); void fs_emu_video_render_mutex_unlock(void); void fs_emu_update_video_stats_1(void); void fs_emu_update_video_stats_2(void); #endif // LIBFSEMU_VIDEO_H_ fs-uae-2.2.3+dfsg/libfsemu/src/emu/netplay.c0000644000175000017500000006454312162366654021073 0ustar glaubitzglaubitz#ifdef WINDOWS #define WINVER 0x0502 #endif #include "netplay.h" char *g_fs_emu_netplay_server = 0; static fs_emu_checksum_function g_rand_checksum_function = 0; static fs_emu_checksum_function g_state_checksum_function = 0; int fs_emu_netplay_enabled() { return g_fs_emu_netplay_server != 0; } void fs_emu_set_rand_check_function(fs_emu_checksum_function function) { g_rand_checksum_function = function; } void fs_emu_set_state_check_function(fs_emu_checksum_function function) { g_state_checksum_function = function; } #ifdef WITH_NETPLAY #ifdef WINDOWS #include #include #else #include #include #include #include #include #include #endif #include #include #include #include #include #include #include "hud.h" #include "libfsemu.h" #ifdef USE_GLIB #include #endif #define FS_EMU_NETPLAY_PROTOCOL_VERSION 1 fs_emu_player g_fs_emu_players[MAX_PLAYERS] = {}; static int g_socket = 0; //static gchar *g_port = "9999"; static volatile int g_frame = 0; //static const char *g_hostname = "127.0.0.1"; static fs_thread *g_receive_thread = NULL; static fs_thread *g_netplay_thread = NULL; static fs_mutex *g_send_mutex = NULL; static fs_mutex *g_connection_mutex = NULL; static fs_condition *g_wait_for_frame_cond = NULL; static fs_mutex *g_wait_for_frame_mutex = NULL; char *g_fs_emu_netplay_port = "25100"; char g_fs_emu_netplay_tag[4]; unsigned char g_fs_emu_netplay_password[20 + 1] = {}; //uint32_t g_fs_emu_netplay_pass_checksum = 0; uint32_t g_fs_emu_netplay_session_key = 0; uint32_t g_fs_emu_netplay_resume_at_packet = 0; int g_fs_emu_netplay_player = -1; int g_fs_emu_netplay_num_players = 0; int g_fs_emu_netplay_connected = 0; // FIXME: move to emulator static int g_fs_emu_netplay_emulation_version_major = 2; static int g_fs_emu_netplay_emulation_version_minor = 2; static int g_fs_emu_netplay_emulation_version_revision = 1; #define TCP #ifdef TCP #else static struct sockaddr g_server_address; static int g_addrlen = 0; #endif #ifdef WINDOWS int close(int socket) { return closesocket(socket); } #endif #define BIT(x) (1 << x) #define MESSAGE_HELLO (1 << 24) #define MESSAGE_EXT_MASK (1 << 31) #define MESSAGE_FRAME_MASK (1 << 30) #define MESSAGE_INPUT_MASK (1 << 29) #define MESSAGE_READY 0 #define MESSAGE_MEM_CHECK 5 #define MESSAGE_RND_CHECK 6 #define MESSAGE_PING 7 #define MESSAGE_PLAYERS 8 #define MESSAGE_PLAYER_TAG_0 9 #define MESSAGE_PLAYER_TAG_1 10 #define MESSAGE_PLAYER_TAG_2 11 #define MESSAGE_PLAYER_TAG_3 12 #define MESSAGE_PLAYER_TAG_4 13 #define MESSAGE_PLAYER_TAG_5 14 #define MESSAGE_PLAYER_PING 15 #define MESSAGE_PLAYER_LAG 16 #define MESSAGE_SET_PLAYER_TAG 17 #define MESSAGE_PROTOCOL_VERSION 18 #define MESSAGE_EMULATION_VERSION 19 #define MESSAGE_ERROR 20 #define MESSAGE_TEXT 21 #define MESSAGE_SESSION_KEY 22 #define MESSAGE_HALT 23 #define MESSAGE_MEMCHECK (0x80000000 | (5 << 24)) #define MESSAGE_RNDCHECK (0x80000000 | (6 << 24)) #define CREATE_EXT_MESSAGE(x, y) (0x80000000 | (x << 24) | (y & 0x00ffffff)) static fs_mutex* g_input_event_mutex; static fs_queue* g_input_event_queue; static fs_emu_dialog* g_waiting_dialog = NULL; static void show_waiting_dialog() { fs_emu_acquire_gui_lock(); if (g_waiting_dialog) { return; } g_waiting_dialog = fs_emu_dialog_create( "Connected To Net Play Server", NULL, "Abort"); //fs_emu_dialog_add_option(dialog, "Abort", 1); fs_emu_dialog_set_line(g_waiting_dialog, 0, "Waiting for game to start..."); fs_emu_dialog_show(g_waiting_dialog); fs_emu_release_gui_lock(); } static void dismiss_waiting_dialog() { if (g_waiting_dialog) { fs_emu_acquire_gui_lock(); fs_emu_dialog_dismiss(g_waiting_dialog); fs_emu_dialog_destroy(g_waiting_dialog); g_waiting_dialog = NULL; fs_emu_release_gui_lock(); } } const char *fs_emu_get_netplay_tag(int player) { if (player == -1) { player = g_fs_emu_netplay_player; } if (player >= 0 && player < MAX_PLAYERS) { printf("%d ---- %s\n", player, g_fs_emu_players[player].tag); return g_fs_emu_players[player].tag; } return "PLY"; } static void check_random_number_generator() { fs_random_set_seed(1234); // random number generator must be same across platforms // generate a sequence of random numbers and compare to expected value for(int i = 0; i < 1001; i++) { fs_random_int_range(0, 2147483647); } int random_number = fs_random_int_range(0, 2147483647); if (random_number == 317699229) { fs_log("random number generator for netplay verified (%d)\n", random_number); } else { fs_log("random number generator for netplay failed (%d)\n", random_number); exit(1); } } int fs_emu_netplay_connected() { return g_fs_emu_netplay_connected; } void fs_emu_netplay_init() { const char *value; g_send_mutex = fs_mutex_create(); g_connection_mutex = fs_mutex_create(); g_input_event_mutex = fs_mutex_create(); g_input_event_queue = fs_queue_new(); g_wait_for_frame_cond = fs_condition_create(); g_wait_for_frame_mutex = fs_mutex_create(); value = fs_config_get_const_string("netplay_server"); if (value) { g_fs_emu_netplay_server = fs_strdup(value); } if (!fs_emu_netplay_enabled()) { return; } check_random_number_generator(); value = fs_config_get_const_string("netplay_tag"); if (value) { strncpy(g_fs_emu_netplay_tag, value, 4); } else { g_fs_emu_netplay_tag[0] = 'U'; g_fs_emu_netplay_tag[1] = 'N'; g_fs_emu_netplay_tag[2] = 'K'; } g_fs_emu_netplay_tag[3] = '\0'; value = fs_config_get_const_string("netplay_port"); if (value) { g_fs_emu_netplay_port = fs_strdup(value); } char *password_value = fs_config_get_string("netplay_password"); if (password_value) { GChecksum *cs = g_checksum_new(G_CHECKSUM_SHA1); g_checksum_update(cs, (unsigned char *) "FSNP", 4); int len = strlen(password_value); for (int i = 0; i < len; i++) { unsigned char c = password_value[i]; // only include ASCII characters if (c < 128) { g_checksum_update(cs, &c, 1); } } gsize digest_len = 20; g_checksum_get_digest(cs, g_fs_emu_netplay_password, &digest_len); free(password_value); g_checksum_free(cs); } } static int fs_emu_get_netplay_input_event() { fs_mutex_lock(g_input_event_mutex); int input_event = FS_POINTER_TO_INT(fs_queue_pop_tail( g_input_event_queue)); fs_mutex_unlock(g_input_event_mutex); return input_event; } void fs_emu_queue_netplay_input_event(int input_event) { if (input_event == 0) { fs_log("WARNING: tried to queue input event 0\n"); return; } fs_mutex_lock(g_input_event_mutex); fs_queue_push_head(g_input_event_queue, FS_INT_TO_POINTER(input_event)); fs_mutex_unlock(g_input_event_mutex); } static void uint_to_bytes(uint32_t message, unsigned char* buffer) { buffer[0] = (message >> 24) & 0x0000ff; buffer[1] = (message >> 16) & 0x0000ff; buffer[2] = (message >> 8) & 0x0000ff; buffer[3] = (message) & 0x0000ff; } static uint32_t bytes_to_uint(unsigned char* buffer) { return (buffer[0] << 24) | (buffer[1] << 16) | (buffer[2] << 8) | \ buffer[3]; } void fs_emu_netplay_on_disconnect() { dismiss_waiting_dialog(); //fs_emu_log("fs_emu_netplay_on_disconnect\n"); fs_mutex_lock(g_connection_mutex); if (!g_fs_emu_netplay_connected) { fs_mutex_unlock(g_connection_mutex); //fs_emu_log("fs_emu_netplay_on_disconnect - not connected\n"); return; } fs_emu_log("fs_emu_netplay_on_disconnect - disconnecting\n"); // FIXME: free socket // FIXME: reconnect or let the player continue without net play // FIXME: show onscreen connecting dialog with abort button... if (fs_emu_netplay_enabled()) { fs_emu_warning("disconnected or connection error"); // for now, continue without netplay free(g_fs_emu_netplay_server); g_fs_emu_netplay_server = NULL; g_fs_emu_netplay_connected = 0; fs_emu_warning("emulator is now running in offline mode"); } else { // netplay is no longer enabled, user has chosen to abort connection // and play offline / disconnect fs_emu_warning("disconnected"); g_fs_emu_netplay_connected = 0; } fs_mutex_unlock(g_connection_mutex); } void fs_emu_netplay_disconnect() { close(g_socket); fs_emu_netplay_on_disconnect(); } void fs_emu_netplay_on_socket_error() { fs_emu_log("fs_emu_netplay_on_socket_error\n"); fs_emu_netplay_on_disconnect(); } static int send_bytes(void *buffer, int len) { /* static int temp_a = 0; if (((unsigned char*)buffer)[0] == 0x87) { temp_a++; printf("ping no %d\n", temp_a); } */ fs_mutex_lock(g_send_mutex); int bytes_written = send(g_socket, (char *) buffer, len, 0); fs_mutex_unlock(g_send_mutex); if (bytes_written != len) { fs_emu_warning("ERROR: send returned %d (should be %d)\n", bytes_written, len); //printf("errno: %d\n", WSAGetLastError()); // FIXME: DO NOT EXIT -- RECONNECT INSTEAD fs_emu_netplay_on_socket_error(); return 0; } return 1; } static void send_message(uint32_t message) { unsigned char buffer[4]; uint_to_bytes(message, buffer); send_bytes(buffer, 4); } int fs_emu_send_netplay_message(const char *text) { fs_log("send netplay message: %s\n", text); if (!fs_emu_netplay_connected()) { fs_log("-> not connected\n"); return 0; } int len = strlen(text); static unsigned char buffer[5] = {}; uint_to_bytes(CREATE_EXT_MESSAGE(MESSAGE_TEXT, len), buffer); fs_mutex_lock(g_send_mutex); int bytes_written = send(g_socket, (char *) buffer, 4, 0); bytes_written += send(g_socket, (char *) text, len, 0); fs_mutex_unlock(g_send_mutex); if (bytes_written != len + 4) { fs_emu_warning("ERROR: send returned %d (should be %d)\n", bytes_written, len + 4); fs_emu_netplay_on_socket_error(); return 0; } return 1; } int fs_emu_netplay_send_input_event(int input_event) { if (input_event & 0xff000000) { fs_log("WARNING: input event with high 8 bits set: %d\n", input_event); return 1; } if (!fs_emu_netplay_enabled()) { return 0; } if (!fs_emu_netplay_connected()) { return 0; } //printf("sending event %d\n", input_event); uint32_t message = MESSAGE_INPUT_MASK | input_event; send_message(message); return 1; } int fs_emu_netplay_wait_for_frame(int frame) { //printf("fs_emu_netplay_wait_for_frame %d\n", frame); /* while (1) { fs_ml_usleep(100 * 1000); if (fs_emu_is_quitting()) { fs_log("fs_emu_netplay_wait_for_frame: quitting\n"); return 0; } } */ if (!g_fs_emu_throttling) { static int warned = 0; if (!warned) { fs_emu_warning("Netplay is not compatible with throttling " "disabled"); warned = 1; } } fs_mutex_lock(g_wait_for_frame_mutex); while (g_frame < frame) { //fs_time_val abs_time; // wait max 100 ms for a new frame, to allow the loop to end if the // emu is quitting /* g_get_current_time(&abs_time); g_time_val_add(&abs_time, 100 * 1000); g_cond_timed_wait(g_wait_for_frame_cond, g_wait_for_frame_mutex, &abs_time); */ //fs_get_current_time(&abs_time); //fs_time_val_add(&abs_time, 100 * 1000); int64_t abs_time = fs_get_real_time() + 100 * 1000; fs_condition_timed_wait(g_wait_for_frame_cond, g_wait_for_frame_mutex, abs_time); if (fs_emu_is_quitting()) { fs_log("fs_emu_netplay_wait_for_frame: quitting\n"); fs_mutex_unlock(g_wait_for_frame_mutex); return 0; } if (!fs_emu_netplay_enabled()) { // no longer in net play mode fs_mutex_unlock(g_wait_for_frame_mutex); return 0; } if (g_waiting_dialog) { fs_emu_acquire_gui_lock(); if (g_waiting_dialog) { if (fs_emu_dialog_result(g_waiting_dialog) == DIALOG_RESULT_NEGATIVE) { fs_emu_netplay_disconnect(); } } fs_emu_release_gui_lock(); } } fs_mutex_unlock(g_wait_for_frame_mutex); if (frame == 1) { dismiss_waiting_dialog(); } int always = 1; int frame_mod = frame % 50; if (always || frame_mod == 25) { send_message(MESSAGE_RNDCHECK | (g_rand_checksum_function() & 0x00ffffff)); } if (always || frame_mod == 0) { send_message(MESSAGE_MEMCHECK | (g_state_checksum_function() & 0x00ffffff)); } send_message(MESSAGE_FRAME_MASK | frame); // add all pending events for this frame to libfsemu's input queue int input_event; while ((input_event = fs_emu_get_netplay_input_event()) != 0) { //printf("\n\n---> %08x\n", input_event); if (input_event & 0x80000000) { int sentinel_frame = input_event & 0x7fffffff; if (frame != sentinel_frame) { // should not happen.. fs_log("ERROR: synchronization error (" "frame %d != sentinel %d)\n", frame, sentinel_frame); exit(1); } break; } else { //printf("queue input event %d\n", input_event); fs_emu_queue_input_event_internal(input_event); } } return 1; } //#define EXTRACT_BITS(m, a, b) ((m >> a) & ((1 << (b - a + 1)) - 1)) //#define FILTER_BITS(m, a, b) (((m >> a) << a) & ((1 << (b + 1)) - 1)) void handle_player_tag_message(int ply, int data) { fs_emu_player *p = g_fs_emu_players + ply; p->tag[0] = (data & 0x00ff0000) >> 16; p->tag[1] = (data & 0x0000ff00) >> 8; p->tag[2] = (data & 0x000000ff); p->tag[3] = '\0'; fs_emu_log("received player tag for player %d: \"%s\"\n", ply, p->tag); } static char g_text_buffer[FS_EMU_MAX_CHAT_STRING_SIZE + 1]; void process_text_message(const char *text, int from_player) { //printf("process message from player %d -- self = %d\n", // from_player, g_fs_emu_netplay_player); if (from_player == g_fs_emu_netplay_player) { // message from self --already printed to console return; } /* char *line = fs_strdup_printf("<%s> %s", fs_emu_get_netplay_tag(from_player), text); fs_emu_add_console_line(line, 0); g_free(line); */ fs_emu_hud_add_chat_message(text, fs_emu_get_netplay_tag(from_player)); } void handle_ext_message(int message, int data) { if (message == MESSAGE_PING) { //printf("ping at frame %d\n", g_frame); send_message(CREATE_EXT_MESSAGE(MESSAGE_PING, 0)); } else if (message == MESSAGE_PLAYERS) { g_fs_emu_netplay_player = (data >> 8) & 0xff; g_fs_emu_netplay_num_players = data & 0xff; } else if (message == MESSAGE_PLAYER_TAG_0) { handle_player_tag_message(0, data); } else if (message == MESSAGE_PLAYER_TAG_1) { handle_player_tag_message(1, data); } else if (message == MESSAGE_PLAYER_TAG_2) { handle_player_tag_message(2, data); } else if (message == MESSAGE_PLAYER_TAG_3) { handle_player_tag_message(3, data); } else if (message == MESSAGE_PLAYER_TAG_4) { handle_player_tag_message(4, data); } else if (message == MESSAGE_PLAYER_TAG_5) { handle_player_tag_message(5, data); } else if (message == MESSAGE_PLAYER_PING) { int ply = (data & 0x00ff0000) >> 16; if (ply < MAX_PLAYERS) { g_fs_emu_players[ply].ping = data & 0x0000ffff; //printf("received player ping %d %d\n", ply, g_fs_emu_players[ply].ping); } } else if (message == MESSAGE_PLAYER_LAG) { int ply = (data & 0x00ff0000) >> 16; if (ply < MAX_PLAYERS) { g_fs_emu_players[ply].lag = data & 0x0000ffff; //printf("received player lag %d %d\n", ply, g_fs_emu_players[ply].ping); } } else if (message == MESSAGE_ERROR) { fs_emu_warning("ERROR %d from netplay server", data); fs_emu_netplay_disconnect(); } else if (message == MESSAGE_TEXT) { int from_player = (data & 0xff0000) >> 16; int text_len = data & 0xffff; fs_log("received text message (len %d) from player %d\n", text_len, from_player); int remaining = text_len; if (remaining > FS_EMU_MAX_CHAT_STRING_SIZE) { remaining = FS_EMU_MAX_CHAT_STRING_SIZE; } char *p = g_text_buffer; while (1) { //printf("--> %d <--\n", remaining); int bytes_read = recv(g_socket, p, remaining, 0); if (bytes_read <= 0) { fs_log("ERROR: recv returned %d\n", bytes_read); fs_emu_netplay_on_socket_error(); return; } remaining -= bytes_read; text_len -= bytes_read; p += bytes_read; if (remaining == 0) { break; } } *p = '\0'; process_text_message(g_text_buffer, from_player); // in case more than max chars of text was sent, read and ignore // the rest of the data while (text_len) { char buffer; int bytes_read = recv(g_socket, &buffer, 1, 0); if (bytes_read <= 0) { fs_log("ERROR: recv returned %d\n", bytes_read); fs_emu_netplay_on_socket_error(); return; } text_len -= bytes_read; } } else if (message == MESSAGE_SESSION_KEY) { g_fs_emu_netplay_session_key = data; fs_log("received session key: %d\n", g_fs_emu_netplay_session_key); } else { fs_emu_warning("net play: received unknown (ext) message %d\n", message); fs_emu_netplay_disconnect(); } } void handle_message(uint32_t message) { //printf("----> received message %08x\n", message); int message_type = message & 0xff000000; if (message_type & MESSAGE_EXT_MASK) { handle_ext_message((message_type & 0x7f000000) >> 24, message & 0x00ffffff); } else if (message_type & MESSAGE_FRAME_MASK) { int frame = message & 0x3fffffff; //printf("received frame %d\n", frame); // add frame to netplay input queue as a sentinel between groups // of input events to achieve synchronization between frames // events. High bit set indicates this sentinel. fs_emu_queue_netplay_input_event(0x80000000 | frame); //printf("queueing sentinel %x\n", 0x80000000 | frame); fs_mutex_lock(g_wait_for_frame_mutex); g_frame = frame; fs_condition_signal(g_wait_for_frame_cond); fs_mutex_unlock(g_wait_for_frame_mutex); } else if (message_type & MESSAGE_INPUT_MASK) { // received input event int input_event = message & 0x00ffffff; //printf("received event %d\n", input_event); //fs_emu_queue_input_event_internal(input_event); fs_emu_queue_netplay_input_event(input_event); } } void *receive_thread(void * data) { static unsigned char buffer[5] = {}; int count = 0; while (1) { // FIXME: add shutdown condition int bytes_read = recv(g_socket, (char *) buffer + count, 4 - count, 0); if (bytes_read <= 0) { fs_log("ERROR: recv returned %d\n", bytes_read); // FIXME: handle problem better //return NULL; //exit(1); fs_emu_netplay_on_socket_error(); return NULL; } count += bytes_read; if (bytes_read == 4) { count = 0; uint32_t message = bytes_to_uint(buffer); handle_message(message); } } return NULL; } int fs_emu_netplay_connect() { g_socket = socket(AF_INET, SOCK_STREAM, 0); fs_log("look up address for %s...\n", g_fs_emu_netplay_server); struct addrinfo hints; struct addrinfo *result, *rp; memset(&hints, 0, sizeof(struct addrinfo)); hints.ai_family = AF_UNSPEC; // Allow IPv4 or IPv6 #ifdef TCP hints.ai_socktype = SOCK_STREAM; #else hints.ai_socktype = SOCK_DGRAM; #endif hints.ai_flags = 0; hints.ai_protocol = 0; int s = getaddrinfo(g_fs_emu_netplay_server, g_fs_emu_netplay_port, &hints, &result); if (s != 0) { fs_emu_log("getaddrinfo: %s\n", gai_strerror(s)); // FIXME: //exit(1); return 0; } /* getaddrinfo() returns a list of address structures. Try each address until we successfully connect(2). If socket(2) (or connect(2)) fails, we (close the socket and) try the next address. */ for (rp = result; rp != NULL; rp = rp->ai_next) { // FIXME //printf("---->\n"); g_socket = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol); if (g_socket == -1) { continue; } #ifdef TCP if (connect(g_socket, rp->ai_addr, rp->ai_addrlen) != -1) { // connected break; } close(g_socket); g_socket = 0; #else g_server_address = *rp->ai_addr; g_addrlen = sizeof(struct sockaddr); #endif } if (g_socket == 0) { fs_log("ERROR: could not connect to server\n"); return 0; } #ifdef TCP int flag = 1; int r = setsockopt(g_socket, IPPROTO_TCP, TCP_NODELAY, (char *) &flag, sizeof(int)); if (r < 0) { //fs_log("ERROR: could not set TCP_NODELAY\n"); fs_emu_warning("ERROR: Could not set TCP_NODELAY option"); close(g_socket); g_socket = 0; return 0; } #endif /* 0 - 4 FSNP 4 - 5 PROTOCOL 5 - 9 PASSWORD 9 - 17 EMULATOR VERSION 17 - 20 SESSION KEY 20 - 21 PLAYER NUMBER 21 - 24 TAG 24 - 28 RESUME AT PACKET */ unsigned char data[28] = "FSNP FSUAE "; data[0] = 'F'; data[1] = 'S'; data[2] = 'N'; data[3] = 'P'; // protocol version data[4] = FS_EMU_NETPLAY_PROTOCOL_VERSION; //uint_to_bytes(g_fs_emu_netplay_pass_checksum, data + 5); data[5] = g_fs_emu_netplay_password[0]; data[6] = g_fs_emu_netplay_password[1]; data[7] = g_fs_emu_netplay_password[2]; data[8] = g_fs_emu_netplay_password[3]; uint_to_bytes(g_fs_emu_netplay_session_key, data + 16); // overwrite with protocol version (overwriting 1 byte of session key // on purpose, because session key is 24 bit) data[14] = g_fs_emu_netplay_emulation_version_major; data[15] = g_fs_emu_netplay_emulation_version_minor; data[16] = g_fs_emu_netplay_emulation_version_revision; data[20] = g_fs_emu_netplay_player; data[21] = g_fs_emu_netplay_tag[0]; data[22] = g_fs_emu_netplay_tag[1]; data[23] = g_fs_emu_netplay_tag[2]; uint_to_bytes(g_fs_emu_netplay_resume_at_packet, data + 24); send_bytes(data, 28); return 1; } void *netplay_thread(void * data) { fs_log("netplay_thread started\n"); int connected = 0; int retry_secs = 2; fs_emu_acquire_gui_lock(); fs_emu_dialog* dialog = fs_emu_dialog_create( "Connecting To Net Play Server", NULL, "Abort"); //fs_emu_dialog_add_option(dialog, "Abort", 1); char *line = fs_strdup_printf("%s:%s", g_fs_emu_netplay_server, g_fs_emu_netplay_port); fs_emu_dialog_set_line(dialog, 0, line); free(line); fs_emu_dialog_show(dialog); fs_emu_release_gui_lock(); int connection_attempt = 1; while (1) { if (connection_attempt > 1) { fs_emu_acquire_gui_lock(); char *line = fs_strdup_printf("Connection attempt %d", connection_attempt); fs_emu_dialog_set_line(dialog, 2, line); free(line); fs_emu_release_gui_lock(); } connected = fs_emu_netplay_connect(); if (connected) { break; } fs_emu_warning("Error connecting to server, " "retrying in %d seconds", retry_secs); for (int i = 0; i < retry_secs * 10; i++) { if (fs_emu_is_quitting()) { fs_log("netplay_thread: quitting\n"); return NULL; } if (fs_emu_dialog_result(dialog) == DIALOG_RESULT_NEGATIVE) { break; } fs_ml_usleep(100 * 1000); } if (fs_emu_dialog_result(dialog) == DIALOG_RESULT_NEGATIVE) { break; } if (retry_secs < 10) { retry_secs++; } connection_attempt++; } fs_emu_acquire_gui_lock(); fs_emu_dialog_dismiss(dialog); fs_emu_dialog_destroy(dialog); fs_emu_release_gui_lock(); if (connected) { g_fs_emu_netplay_connected = 1; show_waiting_dialog(); } else { // the user aborted netplay connection fs_emu_warning("Continuing game without net play\n"); free(g_fs_emu_netplay_server); g_fs_emu_netplay_server = NULL; } // FIXME: use non-joinable thread? g_receive_thread = fs_thread_create(receive_thread, NULL); if (g_receive_thread == NULL) { fs_log("ERROR: could not create receive thread\n"); } return NULL; } void fs_emu_netplay_start() { #ifdef WINDOWS WORD wVersionRequested; WSADATA wsaData; wVersionRequested = MAKEWORD(2, 2); int wsa_err = WSAStartup(wVersionRequested, &wsaData); if (wsa_err != 0) { fs_emu_warning("ERROR: WSAStartup failed with error: %d\n", wsa_err); return; } #endif // FIXME: use non-joinable thread? g_netplay_thread = fs_thread_create(netplay_thread, NULL); if (g_netplay_thread == NULL) { fs_emu_warning("ERROR: could not create netplay thread\n"); } } #endif fs-uae-2.2.3+dfsg/libfsemu/src/emu/audio_debug.c0000644000175000017500000000000012162366654021640 0ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/libfsemu/src/emu/hud.h0000644000175000017500000000073112162366654020171 0ustar glaubitzglaubitz#ifndef LIBFSEMU_HUD_H_ #define LIBFSEMU_HUD_H_ #include #define FS_EMU_MAX_CHAT_STRING_SIZE 128 void fs_emu_hud_init(void); void fs_emu_hud_init_after_config(void); void fs_emu_hud_enable_chat_mode(void); void fs_emu_hud_render_chat(void); int fs_emu_hud_in_chat_mode(void); int fs_emu_hud_handle_chat_input(fs_emu_event *event); extern char g_fs_emu_chat_string[]; //extern int g_fs_emu_chat_mode; extern int g_fs_emu_hud_mode; #endif // LIBFSEMU_HUD_H_ fs-uae-2.2.3+dfsg/libfsemu/src/emu/audio_common.c0000644000175000017500000000026612162366654022060 0ustar glaubitzglaubitz#include "audio.h" int64_t g_fs_emu_audio_buffer_underrun_time = 0; #ifdef USE_SDL extern fs_emu_audio_driver g_fs_emu_audio_sdl_driver; #endif // USE_SDL void init_audio() { } fs-uae-2.2.3+dfsg/libfsemu/src/emu/font.h0000644000175000017500000000200612162366654020354 0ustar glaubitzglaubitz#ifndef LIBFSEMU_FONT_H_ #define LIBFSEMU_FONT_H_ #include "fs/emu.h" #include "fs/image.h" #include "texture.h" #define FS_EMU_FONT_MAX_CHARS 512 typedef struct _fs_emu_font { //fs_emu_texture *texture; fs_image *image; //uint8_t *data; int width; int height; uint16_t x[FS_EMU_FONT_MAX_CHARS]; uint16_t y[FS_EMU_FONT_MAX_CHARS]; uint8_t w[FS_EMU_FONT_MAX_CHARS]; int h; int chars; } fs_emu_font; fs_emu_font *fs_emu_font_new_from_file(const char *name); int fs_emu_font_render(fs_emu_font *font, const char *text, float x, float y, float r, float g, float b, float alpha); int fs_emu_font_render_with_outline(fs_emu_font *font, const char *text, float x, float y, float r, float g, float b, float alpha, float o_r, float o_g, float o_b, float o_a, float o_w); void fs_emu_font_measure(fs_emu_font *font, const char *text, int* width, int *height); fs_emu_font *fs_emu_font_get_title(); fs_emu_font *fs_emu_font_get_menu(); #endif // LIBFSEMU_FONT_H_ fs-uae-2.2.3+dfsg/libfsemu/src/emu/actions.c0000644000175000017500000000367612162366654021057 0ustar glaubitzglaubitz/* libfsemu - a library with emulator support functions * Copyright (C) 2011 Frode Solheim * * This library is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 of the License, or (at * your option) any later version. * * This library is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #include "actions.h" #include #include #include #include "video.h" static const char* g_taunts[] = { "You play like a dairy farmer!", "No one will ever catch ME playing as badly as you do!", "I once owned a dog that played better then you!", "Never before have I faced someone so sissified.", "You're no match for my skills, you poor fool.", "Go home and be a family man!", "It's good to be the king.", "Your mother was a hamster and your father smelt of elderberries", NULL, }; static int g_num_taunts = 8; static void taunt() { char *text = fs_strdup_printf("%c%s\n", 1, g_taunts[fs_random_int_range(0, g_num_taunts)]); fs_emu_netplay_say(text); free(text); } void fs_emu_handle_libfsemu_action(int action, int state) { printf("internal action %d %d\n", action, state); if (state) { if (action == FS_EMU_ACTION_TAUNT) { taunt(); } else if (action == FS_EMU_ACTION_SCREENSHOT) { g_fs_emu_screenshot = 1; } } } fs-uae-2.2.3+dfsg/libfsemu/src/emu/texture.c0000644000175000017500000004510312162366654021106 0ustar glaubitzglaubitz#include "texture.h" #ifdef USE_OPENGL #include #ifdef USE_SDL #include #include #endif #endif #include #include "fs/image.h" #include "libfsemu.h" #include "render.h" #include "theme.h" #include "video.h" static fs_emu_texture *g_atlas = NULL; fs_emu_texture *g_fs_emu_overlay_texture = NULL; typedef struct texture_entry { int x; int y; int w; int h; } texture_entry; // dividing the 1024x1024 bitmap into a 128x128 cell structure, for // placement of sub-textures. static char g_cells[128][128] = {}; static texture_entry g_entries[] = { { 0, 0, 0, 0}, { 96, 512, 512, 512}, // TEXTURE_GLOSS - OK { 640, 896, 128, 128}, // TEXTURE_GLOW_LEFT - OK { 640, 736, 128, 128}, // TEXTURE_GLOW_TOP_LEFT - OK { 800, 736, 128, 128}, // TEXTURE_GLOW_TOP - OK { 50, 0, 10, 1020}, // TEXTURE_SIDEBAR - OK { 0, 0, 60, 1020}, // TEXTURE_SIDEBAR_EDGE - OK { 224, 0, 64, 64}, // TEXTURE_CLOSE - OK { 288, 0, 64, 64}, // TEXTURE_VOLUME - OK { 352, 0, 64, 64}, // TEXTURE_VOLUME_MUTED - OK { 96, 0, 64, 64}, // TEXTURE_ASPECT - OK { 160, 0, 64, 64}, // TEXTURE_STRETCH - OK { 96, 384, 540, 96}, // TEXTURE_ITEM_BACKGROUND - OK { 658, 402, 60, 60}, // TEXTURE_TOP_ITEM_BG - OK { 672, 480, 32, 32}, // TEXTURE_HEADING_BG - OK { 0, 0, 0, 0}, // TEXTURE_PAUSE }; void fs_emu_draw_from_atlas(float dx, float dy, float dw, float dh, int sx, int sy, int sw, int sh) { float tx = sx / 1024.0; float ty = sy / 1024.0; float tw = sw / 1024.0; float th = sh / 1024.0; //fs_gl_texturing(1); //fs_gl_bind_texture(g_atlas->texture); //printf("%f %f %f %f - %f %f %f %f\n", dx, dy, dw, dh, tx, ty, tw, th); fs_emu_set_texture(g_atlas); #ifdef USE_GLES GLfloat tex[] = { tx, ty + th, tx + tw, ty + th, tx + tw, ty, tx, ty }; GLfloat vert[] = { dx, dy, dx + dw, dy, dx + dw, dy + dh, dx, dy + dh }; glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_TEXTURE_COORD_ARRAY); glVertexPointer(2, GL_FLOAT, 0, vert); glTexCoordPointer(2, GL_FLOAT, 0, tex); glDrawArrays(GL_TRIANGLE_FAN, 0, 4); glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_TEXTURE_COORD_ARRAY); #else glBegin(GL_QUADS); glTexCoord2f(tx, ty + th); glVertex2f(dx, dy); glTexCoord2f(tx + tw, ty + th); glVertex2f(dx + dw, dy); glTexCoord2f(tx + tw, ty); glVertex2f(dx + dw, dy + dh); glTexCoord2f(tx, ty); glVertex2f(dx, dy + dh); glEnd(); #endif CHECK_GL_ERROR(); } void fs_emu_prepare_texture(int entry, float *tx1, float *ty1, float *tx2, float *ty2) { *tx1 = g_entries[entry].x / 1024.0; *ty1 = g_entries[entry].y / 1024.0; *tx2 = *tx1 + g_entries[entry].w / 1024.0; *ty2 = *ty1 + g_entries[entry].h / 1024.0; fs_emu_set_texture(g_atlas); } void fs_emu_draw_texture_with_size(int entry, float x, float y, float w, float h) { fs_emu_draw_from_atlas(x, y, w, h, g_entries[entry].x, g_entries[entry].y, g_entries[entry].w, g_entries[entry].h); } void fs_emu_draw_texture(int entry, float x, float y) { //printf("%d - %f %f\n", entry, x, y); fs_emu_draw_texture_with_size(entry, x, y, g_entries[entry].w, g_entries[entry].h); } static int check_placement(int cx, int cy, int cw, int ch) { // just using a naive approach to finding a suitable space. The search // space isn't that big in this case.. for (int y = cy; y < cy + ch; y++) { //printf("%d\n", y); for (int x = cx; x < cx + cw; x++) { if (g_cells[y][x]) { return 0; } } } return 1; } static inline void copy_pixel(unsigned char **dst, unsigned char **src) { unsigned char *sp = *src; unsigned char *dp = *dst; if (fs_emu_get_video_format() == FS_EMU_VIDEO_FORMAT_BGRA) { dp[0] = ((int) sp[2]) * sp[3] / 255; dp[1] = ((int) sp[1]) * sp[3] / 255; dp[2] = ((int) sp[0]) * sp[3] / 255; } else { dp[0] = ((int) sp[0]) * sp[3] / 255; dp[1] = ((int) sp[1]) * sp[3] / 255; dp[2] = ((int) sp[2]) * sp[3] / 255; } dp[3] = sp[3]; *dst = *dst + 4; *src = *src + 4; } static void load_atlas_texture(fs_image *atlas_image, int texture_id, const char *name) { char *path = fs_emu_theme_get_resource(name); if (!path) { fs_emu_warning("Could not find resource %s\n", name); return; } fs_image *image = fs_image_new_from_file(path); if (!image) { fs_emu_warning("error loading texture \"%s\"\n", name); return; } fs_emu_log("loaded sub-texture from \"%s\"\n", path); // find needed number of cells int cw = (image->width + 7) / 8; int ch = (image->height + 7) / 8; // adding 1 to get some spacing between cells if (cw < 128) { cw++; } if (ch < 128) { ch++; } // try to find space for it in the texture atlas using a simple // brute-force search int cx = 0; int cy = 0; int ok = 0; for (cy = 0; cy <= 128 - ch; cy++) { for (cx = 0; cx <= 128 - cw; cx++) { if (check_placement(cx, cy, cw, ch)) { ok = 1; break; } } if (ok) { break; } } if (!ok) { fs_emu_warning("could not find space for \"%s\"\n", name); //printf("%d %d %d %d\n", cx * 8, cy * 8, cw * 8, ch * 8); return; } // mark cells as used for (int y = cy; y < cy + ch; y++) { for (int x = cx; x < cx + cw; x++) { g_cells[y][x] = 1; } } //printf("%d %d %d %d\n", cx * 8, cy * 8, cw * 8, ch * 8); // copy sub-texture into texture, also converting to pre-multiplied // alpha, and BGRA if needed. Also copy border pixels to pixels outside // border to fix unwanted bilinear filtering effects int dx = cx * 8; int dy = cy * 8; int ds = atlas_image->width * 4; // stride unsigned char *dst = atlas_image->data + \ (dy * atlas_image->width + dx) * 4; unsigned char *sp = image->data; for (int y = 0; y < image->height; y++) { #if 1 if (y == 0 && dy > 0) { // repeat first line unsigned char *dp = dst - ds; for (int x = 0; x < image->width; x++) { copy_pixel(&dp, &sp); } sp -= image->width * 4; } #endif unsigned char *dp = dst; for (int x = 0; x < image->width; x++) { copy_pixel(&dp, &sp); } dst += 1024 * 4; // stride #if 1 if (y == image->height - 1 && dy + y - 1 < atlas_image->height - 1) { // repeat last line sp -= image->width * 4; unsigned char *dp = dst; for (int x = 0; x < image->width; x++) { copy_pixel(&dp, &sp); } } #endif } // repeat left and right borders uint32_t *idata = (uint32_t *) atlas_image->data; int iwidth = atlas_image->width; int y1 = dy; int y2 = dy + image->height - 1; if (y1 > 0) { y1 -= 1; } if (y2 < atlas_image->height - 1) { y2 += 1; } if (dx > 0) { for (int y = y1; y <= y2; y++) { idata[y * iwidth + dx - 1] = idata[y * iwidth + dx]; } } if (dx + image->width - 1 < atlas_image->width - 1) { for (int y = y1; y <= y2; y++) { idata[y * iwidth + dx + image->width - 1 + 1] = \ idata[y * iwidth + dx + image->width - 1]; } } // register texture coordinates g_entries[texture_id].x = cx * 8; g_entries[texture_id].y = cy * 8; g_entries[texture_id].w = image->width; g_entries[texture_id].h = image->height; // and finally free the sub-texture image fs_unref(image); } static void initialize_atlas(fs_image *image) { load_atlas_texture(image, TEXTURE_SIDEBAR_EDGE, "sidebar_edge.png"); load_atlas_texture(image, TEXTURE_SIDEBAR, "sidebar.png"); load_atlas_texture(image, TEXTURE_GLOSS, "gloss.png"); load_atlas_texture(image, TEXTURE_GLOW_LEFT, "glow_left.png"); load_atlas_texture(image, TEXTURE_GLOW_TOP, "glow_top.png"); load_atlas_texture(image, TEXTURE_GLOW_TOP_LEFT, "glow_top_left.png"); load_atlas_texture(image, TEXTURE_CLOSE, "close.png"); load_atlas_texture(image, TEXTURE_VOLUME, "volume.png"); load_atlas_texture(image, TEXTURE_VOLUME_MUTED, "volume_muted.png"); load_atlas_texture(image, TEXTURE_ASPECT, "aspect.png"); load_atlas_texture(image, TEXTURE_STRETCH, "stretch.png"); load_atlas_texture(image, TEXTURE_ITEM_BACKGROUND, "item_background.png"); load_atlas_texture(image, TEXTURE_TOP_ITEM_BG, "top_item_background.png"); load_atlas_texture(image, TEXTURE_HEADING_BG, "heading_strip.png"); load_atlas_texture(image, TEXTURE_PAUSE, "pause_indicator.png"); //fs_image_save_data("atlas-output-test.png", image->data, // image->width, image->height, 4); } void load_texture(fs_emu_texture *texture) { fs_image *image = texture->image; //printf("loading texture from image %p\n", image); if (!image) { return; } unsigned int opengl_texture; glGenTextures(1, &opengl_texture); //texture->opengl_context_stamp = g_fs_ml_opengl_context_stamp; fs_gl_bind_texture(opengl_texture); fs_gl_unpack_row_length(0); int gl_buffer_format = GL_RGBA; if (fs_emu_get_video_format() == FS_EMU_VIDEO_FORMAT_BGRA) { gl_buffer_format = GL_BGRA; } glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, image->width, image->height, 0, gl_buffer_format, GL_UNSIGNED_BYTE, image->data); CHECK_GL_ERROR(); //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, // GL_LINEAR_MIPMAP_LINEAR); //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, // GL_LINEAR_MIPMAP_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); CHECK_GL_ERROR(); //glGenerateMipmapEXT(GL_TEXTURE_2D); texture->texture = opengl_texture; } static void context_notification_handler(int notification, void *data) { fs_emu_texture *texture = (fs_emu_texture *) data; if (notification == FS_GL_CONTEXT_DESTROY) { //printf("context_notification_handler DESTROY %d\n", texture->texture); if (texture->texture) { glDeleteTextures(1, &texture->texture); CHECK_GL_ERROR(); texture->texture = 0; } } else if (notification == FS_GL_CONTEXT_CREATE) { // loading the texture right now is not strictly necessary load_texture(texture); } } void fs_emu_initialize_textures() { if (g_fs_emu_theme.width == 0) { fs_emu_fatal("theme is not initialized yet"); } //g_atlas = fs_emu_texture_new_from_file("atlas"); fs_image *image = fs_image_new(); image->width = 1024; image->height = 1024; image->format = FS_IMAGE_FORMAT_RGBA; image->data = fs_malloc0(1024 * 1024 * 4); initialize_atlas(image); g_atlas = fs_new(fs_emu_texture, 1); g_atlas->width = image->width; g_atlas->height = image->height; g_atlas->image = image; load_texture(g_atlas); fs_emu_set_texture(g_atlas); fs_gl_add_context_notification(context_notification_handler, g_atlas); if (g_fs_emu_theme.overlay_image[0]) { char *path = fs_emu_theme_get_resource(g_fs_emu_theme.overlay_image); fs_log("g_fs_emu_theme.overlay_image %s => %s\n", g_fs_emu_theme.overlay_image, path); if (path) { g_fs_emu_overlay_texture = fs_emu_texture_new_from_file(path); } } for (int i = 0; i < FS_EMU_MAX_OVERLAYS; i++) { for (int j = 0; j < FS_EMU_MAX_OVERLAY_STATES; j++) { fs_emu_texture *tex = NULL; char *name = fs_strdup_printf("custom_%d_%d.png", i - FS_EMU_FIRST_CUSTOM_OVERLAY, j); char *path = fs_emu_theme_get_resource(name); if (!path && g_fs_emu_theme.overlays[i].name) { free(name); name = fs_strdup_printf("%s_%d.png", g_fs_emu_theme.overlays[i].name, j); path = fs_emu_theme_get_resource(name); } if (path) { tex = fs_emu_texture_new_from_file(path); g_fs_emu_theme.overlays[i].textures[j] = tex; free(path); } else if (j == 1) { char *base_name = fs_strdup_printf("custom_%d.png", i - FS_EMU_FIRST_CUSTOM_OVERLAY); path = fs_emu_theme_get_resource(base_name); if (!path && g_fs_emu_theme.overlays[i].name) { free(name); name = fs_strdup_printf("%s.png", g_fs_emu_theme.overlays[i].name); path = fs_emu_theme_get_resource(name); } if (path) { tex = fs_emu_texture_new_from_file(path); g_fs_emu_theme.overlays[i].textures[j] = tex; free(path); } free(base_name); } else if (j >= 2) { g_fs_emu_theme.overlays[i].textures[j] = \ g_fs_emu_theme.overlays[i].textures[j - 1]; } free(name); // size will be determined from the last loaded texture/state // for the overlay if (tex) { g_fs_emu_theme.overlays[i].w = (double) tex->width / g_fs_emu_theme.width; g_fs_emu_theme.overlays[i].h = (double) tex->height / g_fs_emu_theme.height; } } } } void fs_emu_set_texture(fs_emu_texture *texture) { fs_gl_texturing(1); /* if (texture && texture->opengl_context_stamp && \ g_fs_ml_opengl_context_stamp != texture->opengl_context_stamp) { // OpenGL context has been recreated. load_texture also binds load_texture(texture); } */ if (!texture) { fs_gl_bind_texture(0); return; } if (texture->texture) { fs_gl_bind_texture(texture->texture); } else { // texture was not loaded, perhaps due to context recreation load_texture(texture); } } fs_emu_texture *fs_emu_texture_new_from_file(const char *name) { char *full_name; char *path; if (fs_path_exists(name)) { full_name = fs_strdup(name); path = fs_strdup(name); } else { full_name = fs_strconcat(name, ".png", NULL); path = fs_get_program_data_file(full_name); if (path == NULL) { fs_emu_warning("Could not find texture %s\n", full_name); return NULL; } } fs_image *image = fs_image_new_from_file(path); fs_emu_log("loading texture \"%s\"\n", path); free(path); if (image == NULL) { fs_emu_warning("Could not load texture from %s\n", full_name); free(full_name); return NULL; } free(full_name); if (fs_emu_get_video_format() == FS_EMU_VIDEO_FORMAT_BGRA) { // convert to premultiplied alpha if (image->format == FS_IMAGE_FORMAT_RGBA) { int num_pixels = image->width * image->height; unsigned char *pixels = image->data; for (int i = 0; i < num_pixels; i++) { unsigned char alpha = pixels[3]; unsigned char temp = pixels[2]; pixels[2] = ((int) pixels[0]) * alpha / 255; pixels[1] = ((int) pixels[1]) * alpha / 255; pixels[0] = ((int) temp) * alpha / 255; pixels += 4; } } else { // FIXME: should swap R and B here... } } else { // convert to premultiplied alpha if (image->format == FS_IMAGE_FORMAT_RGBA) { int num_pixels = image->width * image->height; unsigned char *pixels = image->data; for (int i = 0; i < num_pixels; i++) { unsigned char alpha = pixels[3]; // should really divide by 255, but 256 is faster... //pixels[0] = ((int) pixels[0]) * alpha / 256; //pixels[1] = ((int) pixels[1]) * alpha / 256; //pixels[2] = ((int) pixels[2]) * alpha / 256; pixels[0] = ((int) pixels[0]) * alpha / 255; pixels[1] = ((int) pixels[1]) * alpha / 255; pixels[2] = ((int) pixels[2]) * alpha / 255; //pixels[0] = (unsigned char) ((pixels[0] * alpha + 0.5) / 255.0); //pixels[1] = (unsigned char) ((pixels[1] * alpha + 0.5) / 255.0); //pixels[2] = (unsigned char) ((pixels[2] * alpha + 0.5) / 255.0); pixels += 4; } } } fs_emu_texture *texture = fs_new(fs_emu_texture, 1); texture->width = image->width; texture->height = image->height; texture->image = image; load_texture(texture); fs_emu_set_texture(texture); fs_gl_add_context_notification(context_notification_handler, texture); return texture; } void fs_emu_texture_render(fs_emu_texture *texture, int x, int y) { fs_emu_render_texture_with_size(texture, x, y, texture->width, texture->height); } void fs_emu_render_texture_with_size(fs_emu_texture *texture, int x, int y, int w, int h) { fs_emu_set_texture(texture); fs_gl_blending(1); //fs_emu_texturing(0); //return; //fs_log("%d %d %d %d\n", x, y, x + w , y + h); fs_gl_color4f(1.0, 1.0, 1.0, 1.0); #ifdef USE_GLES GLfloat tex[] = { 0.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0 }; GLfloat vert[] = { x, y, x + w, y, x + w, y + h, x, y + h }; glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_TEXTURE_COORD_ARRAY); glVertexPointer(2, GL_FLOAT, 0, vert); glTexCoordPointer(2, GL_FLOAT, 0, tex); glDrawArrays(GL_TRIANGLE_FAN, 0, 4); glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_TEXTURE_COORD_ARRAY); #else glBegin(GL_QUADS); glTexCoord2f(0.0, 1.0); glVertex2f(x, y); glTexCoord2f(1.0, 1.0); glVertex2f(x + w, y); glTexCoord2f(1.0, 0.0); glVertex2f(x + w, y + h); glTexCoord2f(0.0, 0.0); glVertex2f(x, y + h); glEnd(); #endif CHECK_GL_ERROR(); } fs-uae-2.2.3+dfsg/libfsemu/src/emu/video_options.c0000644000175000017500000002073312162366654022271 0ustar glaubitzglaubitz#include #include #include #include #include #include "libfsemu.h" #include "video.h" #define FS_EMU_TEXTURE_FORMAT_RGB 0x1907 #define FS_EMU_TEXTURE_FORMAT_RGB8 0x8051 #define FS_EMU_TEXTURE_FORMAT_RGBA 0x1908 #define FS_EMU_TEXTURE_FORMAT_RGBA8 0x8058 #define FS_EMU_TEXTURE_FORMAT_RGB5 0x8050 #define FS_EMU_TEXTURE_FORMAT_RGB5_A1 0x8057 extern int g_fs_ml_benchmarking; void fs_emu_video_init_options(void) { //int auto_sync_mode = 1; //int sync_to_vblank = 1; //int sync_with_emu = 0; char *sync_mode_str = NULL; int fsaa = fs_config_get_int_clamped("fsaa", 0, 4); if (fsaa != FS_CONFIG_NONE) { fs_log("setting full-scene anti-aliasing (FSAA) to %dx%d\n", fsaa, fsaa); fs_ml_set_video_fsaa(fsaa); } else { fs_log("full-scene anti-aliasing is not requested\n"); } fs_ml_video_mode mode; memset(&mode, 0, sizeof(fs_ml_video_mode)); if (fs_ml_video_mode_get_current(&mode) == 0) { fs_log("current display mode is %dx%d @ %d Hz\n", mode.width, mode.height, mode.fps); int assume_refresh_rate = fs_config_get_int("assume_refresh_rate"); if (assume_refresh_rate != FS_CONFIG_NONE) { fs_log("assuming host refresh rate: %d Hz (from config)\n", assume_refresh_rate); g_fs_emu_video_frame_rate_host = assume_refresh_rate; } else { g_fs_emu_video_frame_rate_host = mode.fps; } } else { fs_log("could not get display mode\n"); } fs_log("checking video sync mode\n"); sync_mode_str = fs_config_get_string("video_sync"); if (!sync_mode_str) { // compatibility key sync_mode_str = fs_config_get_string("sync"); } if (sync_mode_str) { if (fs_ascii_strcasecmp(sync_mode_str, "auto") == 0) { } else if (fs_ascii_strcasecmp(sync_mode_str, "full") == 0) { //auto_sync_mode = 0; //sync_to_vblank = 1; //sync_with_emu = 1; } else if (fs_ascii_strcasecmp(sync_mode_str, "off") == 0) { //auto_sync_mode = 0; g_fs_emu_video_sync_to_vblank = 0; g_fs_emu_video_allow_full_sync = 0; } else if (fs_ascii_strcasecmp(sync_mode_str, "vblank") == 0) { //auto_sync_mode = 0; //sync_to_vblank = 1; g_fs_emu_video_allow_full_sync = 0; } else { fs_log("WARNING: invalid value for video-sync: %s\n", sync_mode_str); } free(sync_mode_str); } else { fs_log("not specified: using automatic video sync mode\n"); } /* if (auto_sync_mode) { fs_log("auto sync mode is enabled\n"); if (frame_rate && frame_rate == mode.fps) { fs_log("frame rate (%d) equals screen refresh (%d)\n", frame_rate, mode.fps); sync_to_vblank = 1; sync_with_emu = 1; } else { fs_log("frame rate (%d) does not equal screen refresh (%d)\n", frame_rate, mode.fps); sync_to_vblank = 1; } } */ if (fs_emu_netplay_enabled()) { fs_log("netplay is enabled, disabling full video/emulator sync\n"); g_fs_emu_video_allow_full_sync = 0; //sync_with_emu = 0; //sync_to_vblank = 0; } if (fs_config_get_boolean("benchmark") != FS_CONFIG_NONE) { fs_log("benchmarking enable, disabling video sync\n"); g_fs_emu_video_sync_to_vblank = 0; //sync_with_emu = 0; g_fs_emu_benchmarking = 1; g_fs_ml_benchmarking = 1; g_fs_emu_video_allow_full_sync = 0; } //if (sync_with_emu && !g_fs_emu_full_sync_allowed) { // FIXME: check where g_fs_emu_full_sync_allowed is used if (!g_fs_emu_full_sync_allowed) { fs_log("full video/emu sync is not allowed in this mode\n"); //sync_with_emu = 0; g_fs_emu_video_allow_full_sync = 0; } /* if (sync_with_emu) { fs_log("will sync emulation and video with vblank\n"); fs_ml_video_sync_enable(); if (frame_rate && mode.fps) { double pitch = (1.0 * mode.fps) / frame_rate; fs_log("changing audio pitch to %0.2f based on frame rates\n", pitch); fs_emu_audio_set_default_pitch(pitch); } } else if (sync_to_vblank) { fs_log("will sync video output only to vblank (no tearing)\n"); fs_ml_vblank_sync_enable(); } else { fs_log("no video sync\n"); } */ if (g_fs_emu_video_sync_to_vblank) { fs_log("will sync video updates to vblank\n"); fs_ml_vblank_sync_enable(); } else { fs_log("no video sync (using timers only)\n"); } if (fs_config_get_boolean("disable_aspect_correction") == 1) { g_fs_emu_disable_aspect_correction = 1; } else if (fs_config_get_boolean("keep_aspect") == 1) { fs_emu_video_set_aspect_correction(1); } // the default texture format is RGB, set here because some video // formats implicitly changes the default texture format g_fs_emu_texture_format = FS_EMU_TEXTURE_FORMAT_RGB; const char *s = fs_config_get_const_string("video_format"); if (s) { if (fs_ascii_strcasecmp(s, "bgra") == 0) { fs_log("using video format BGRA\n"); g_fs_emu_video_format = FS_EMU_VIDEO_FORMAT_BGRA; g_fs_emu_video_bpp = 4; } else if (fs_ascii_strcasecmp(s, "rgba") == 0) { fs_log("using video format RGBA\n"); g_fs_emu_video_format = FS_EMU_VIDEO_FORMAT_RGBA; g_fs_emu_video_bpp = 4; } else if (fs_ascii_strcasecmp(s, "rgb") == 0) { fs_log("using video format RGB\n"); g_fs_emu_video_format = FS_EMU_VIDEO_FORMAT_RGB; g_fs_emu_video_bpp = 3; } else if (fs_ascii_strcasecmp(s, "rgb565") == 0) { fs_log("using video format RGB565\n"); g_fs_emu_video_format = FS_EMU_VIDEO_FORMAT_R5G6B5; g_fs_emu_video_bpp = 2; g_fs_emu_texture_format = FS_EMU_TEXTURE_FORMAT_RGB5; } else if (fs_ascii_strcasecmp(s, "rgba5551") == 0) { fs_log("using video format RGBA5551\n"); g_fs_emu_video_format = FS_EMU_VIDEO_FORMAT_R5G5B5A1; g_fs_emu_video_bpp = 2; g_fs_emu_texture_format = FS_EMU_TEXTURE_FORMAT_RGB5_A1; } else { fs_emu_warning("Unknown video format"); } } if (!g_fs_emu_video_format) { fs_log("using default video format BGRA\n"); g_fs_emu_video_format = FS_EMU_VIDEO_FORMAT_BGRA; g_fs_emu_video_bpp = 4; } s = fs_config_get_const_string("texture_format"); if (s) { if (fs_ascii_strcasecmp(s, "rgb") == 0) { fs_log("using texture format RGB\n"); g_fs_emu_texture_format = FS_EMU_TEXTURE_FORMAT_RGB; } else if (fs_ascii_strcasecmp(s, "rgb8") == 0) { fs_log("using texture format RGB8\n"); g_fs_emu_texture_format = FS_EMU_TEXTURE_FORMAT_RGB8; } else if (fs_ascii_strcasecmp(s, "rgba") == 0) { fs_log("using texture format RGBA\n"); g_fs_emu_texture_format = FS_EMU_TEXTURE_FORMAT_RGBA; } else if (fs_ascii_strcasecmp(s, "rgba8") == 0) { fs_log("using texture format RGBA8\n"); g_fs_emu_texture_format = FS_EMU_TEXTURE_FORMAT_RGBA8; } else if (fs_ascii_strcasecmp(s, "rgb5") == 0) { fs_log("using texture format RGB5\n"); g_fs_emu_texture_format = FS_EMU_TEXTURE_FORMAT_RGB5; } else if (fs_ascii_strcasecmp(s, "rgb5_a1") == 0) { fs_log("using texture format RGB5_A1\n"); g_fs_emu_texture_format = FS_EMU_TEXTURE_FORMAT_RGB5_A1; } else { fs_emu_warning("Unknown texture format (using default)"); } } else { fs_log("using default texture format\n"); } double dval; if (fs_config_get_boolean("scanlines") == 1) { g_fs_emu_scanlines = 1; } dval = fs_config_get_double_clamped("scanlines_light", 0, 100); if (dval != FS_CONFIG_NONE) { g_fs_emu_scanlines_light = 255.0 * dval / 100.0; } dval = fs_config_get_double_clamped("scanlines_dark", 0, 100); if (dval != FS_CONFIG_NONE) { g_fs_emu_scanlines_dark = 255.0 * dval / 100.0; } } fs-uae-2.2.3+dfsg/libfsemu/src/emu/video_buffer.h0000644000175000017500000000032012162366654022042 0ustar glaubitzglaubitz#ifndef LIBFSEMU_VIDEO_BUFFER_H_ #define LIBFSEMU_VIDEO_BUFFER_H_ #include fs_emu_video_buffer *fs_emu_video_buffer_lock(); void fs_emu_video_buffer_unlock(); #endif // LIBFSEMU_VIDEO_BUFFER_H_ fs-uae-2.2.3+dfsg/libfsemu/src/emu/audio_openal.c0000644000175000017500000004551112162366654022050 0ustar glaubitzglaubitz#ifdef USE_OPENAL #include #ifdef MACOSX #include #include #else #include #include #endif #include #include #include #include #include "libfsemu.h" #include "audio.h" // the actual frequency negotiated with the audio driver static double g_audio_out_frequency = 0.0; static int g_volume = 100; static int g_mute = 0; static double g_want_volume = 1.0; static int g_sys_buffer_bytes = 0; double g_default_audio_pitch = 1.0; void fs_emu_audio_set_default_pitch(double pitch) { g_default_audio_pitch = pitch; } int g_fs_emu_audio_stream_playing[MAX_STREAMS] = {}; #define FRAME_TIME_LIST_COUNT 256 #define AUDIO_AVG_FILL_QUEUE_COUNT 256 #define AUDIO_FILL_QUEUE_COUNT 256 #define AUDIO_FILL_QUEUE2_COUNT 128 #define AUDIO_IN_FRAME_QUEUE_SIZE 128 #define AUDIO_OUT_FRAME_QUEUE_SIZE 1024 #define FILL_STAT_BUFFER_LENGTH 512 #define FILL_STAT_BUFFER_ITEMS 256 #define FILL_STAT_BUFFER_ITEMS_AVG 64 #define FILL_STAT_BUFFER_ITEMS_MIN 64 #define FILL_STAT_BUFFER_ITEMS_ERR 64 #define MEMORY_BARRIER __asm__ __volatile__ ("" ::: "memory") typedef struct audio_stream { ALuint source; ALuint *buffers; int num_buffers; int buffer_size; int frequency; fs_queue *queue; fs_mutex *mutex; int buffers_queued; int min_buffers; int fill_target; int fill_stat_buffer[FILL_STAT_BUFFER_LENGTH]; int err_stat_buffer[FILL_STAT_BUFFER_LENGTH]; int err_stat_buffer_sum; int avg_fill_stat_buffer[FILL_STAT_BUFFER_LENGTH]; int min_fill_stat_buffer[FILL_STAT_BUFFER_LENGTH]; int avg_min_fill_stat_buffer[FILL_STAT_BUFFER_LENGTH]; int fill_stat_buffer_avg_sum; int fill_stat_buffer_avg; int fill_stat_buffer_min; int fill_stat_buffer_avg_min_sum; int fill_stat_buffer_avg_min; volatile int fill_stat_buffer_pos; //double pid_integral; double pid_last_error; double pid_last_last_error; int pid_last_time; int pid_last_last_time; double pitch; double source_volume_current; } audio_stream; static audio_stream *g_streams[MAX_STREAMS] = {}; #define MAX_BUFFERS 48 static ALCdevice *g_device = NULL; static ALCcontext *g_context = NULL; static int check_al_error(const char *label) { int error; if ((error = alGetError()) != AL_NO_ERROR) { fs_log("openal error %d (%s)\n", error, label); } return error; } #define KP 0.0000005 #define KI 0.00000000001 #define KD 0.0000000001 static void pid_controller_step(int stream, int time_ms) { audio_stream *s = g_streams[stream]; if (s->fill_target == 0) { return; } if (s->pid_last_last_time == 0) { s->pid_last_time = time_ms; s->pid_last_last_time = time_ms; } int dt = time_ms - s->pid_last_last_time; int error = s->fill_target - s->fill_stat_buffer_avg; //static double last_error = 0.0; //if (s->pid_last_error == 0.0) { // s->pid_last_error = error; //} //s->pid_integral = s->pid_integral + (error * dt); //s->pid_integral = s->err_stat_buffer_sum; double derivative; if (dt > 0) { derivative = (error - s->pid_last_last_error) / dt; } else { derivative = 0; } double output = KP * error + KI * s->err_stat_buffer_sum + KD * derivative; s->pid_last_last_error = s->pid_last_error; s->pid_last_last_time = s->pid_last_time ; s->pid_last_error = error; s->pid_last_time = time_ms; s->pitch = g_default_audio_pitch - output; s->pitch = MAX(0.5, MIN(2.0, s->pitch)); alSourcef(s->source, AL_PITCH, (ALfloat) s->pitch); check_al_error("alSourcef (AL_PITCH)"); } static void unqueue_old_buffers(int stream) { audio_stream *s = g_streams[stream]; ALint old_buffers = 0; fs_mutex_lock(s->mutex); // locking here because unqueue_old_buffers can be run called from // both the video thread and the emulation thread (consider changing this, // perhaps even have a separate thread for periodically unqueuing). alGetSourcei(s->source, AL_BUFFERS_PROCESSED, &old_buffers); check_al_error("alGetSourcei (AL_BUFFERS_PROCESSED)"); if (old_buffers > 0) { ALuint buffers[MAX_BUFFERS]; old_buffers = MIN(old_buffers, MAX_BUFFERS); alSourceUnqueueBuffers(s->source, old_buffers, buffers); if (check_al_error("alSourceUnqueueBuffers") != AL_NO_ERROR) { fs_log("while trying to unqueue %d buffers\n"); } for (int i = 0; i < old_buffers; i++) { fs_queue_push_tail(s->queue, FS_UINT_TO_POINTER(buffers[i])); } s->buffers_queued -= old_buffers; } fs_mutex_unlock(s->mutex); } void fs_emu_audio_pause_stream(int stream) { fs_log("fs_emu_audio_resume_stream %d\n", stream); audio_stream *s = g_streams[stream]; alSourcePause(s->source); g_fs_emu_audio_stream_playing[stream] = 0; check_al_error("alSourcePlay"); } void fs_emu_audio_resume_stream(int stream) { fs_log("fs_emu_audio_resume_stream %d\n", stream); audio_stream *s = g_streams[stream]; alSourcePlay(s->source); g_fs_emu_audio_stream_playing[stream] = 1; check_al_error("alSourcePlay"); } int fs_emu_check_audio_buffer_done(int stream, int buffer) { unqueue_old_buffers(stream); audio_stream *s = g_streams[stream]; // not extremely efficient fs_mutex_lock(s->mutex); fs_list *link = fs_queue_peek_head_link(s->queue); while (link) { if ((unsigned int) buffer == FS_POINTER_TO_UINT(link->data)) { fs_mutex_unlock(s->mutex); return 1; } link = link->next; } fs_mutex_unlock(s->mutex); return 0; } int fs_emu_queue_audio_buffer(int stream, int16_t* data, int size) { if (g_fs_emu_benchmarking) { // no audio output while benchmarking return 0; } //fs_log("fs_emu_queue_audio_buffer stream %d size %d\n", stream, size); audio_stream *s = g_streams[stream]; ALuint buffer = 0; fs_mutex_lock(s->mutex); //while (1) { buffer = FS_POINTER_TO_UINT(fs_queue_pop_head(s->queue)); if (!buffer) { fs_log("no audio buffer available - dropping data\n"); fs_mutex_unlock(s->mutex); return 0; } s->buffers_queued += 1; // create a local copy while we have the lock //int buffers_queued = s->buffers_queued; fs_mutex_unlock(s->mutex); // for debugging, clear one of the stereo channels //int16_t *d = data; //for (int i = 0; i < size / 4; i++) { // d++; // *d = 0; // d++; //} alBufferData(buffer, AL_FORMAT_STEREO16, data, size, s->frequency); check_al_error("alBufferData"); alSourceQueueBuffers(s->source, 1, &buffer); check_al_error("alSourceQueueBuffers"); ALint state; alGetSourcei(s->source, AL_SOURCE_STATE, &state); check_al_error("alGetSourcei (AL_SOURCE_STATE)"); if (state != AL_PLAYING) { g_fs_emu_audio_buffer_underrun_time = fs_get_monotonic_time(); // we have had a buffer underrun - we now wait until we have queued // some buffers //if (buffers_queued < s->min_buffers) { // // want more buffers //} //else { fs_log("restarting audio stream %d (buffer underrun)\n", stream); alSourcePlay(s->source); g_fs_emu_audio_stream_playing[stream] = 1; check_al_error("alSourcePlay"); //} } double want_volume = g_want_volume * 0.9; if (want_volume != s->source_volume_current) { s->source_volume_current = want_volume; alSourcef(s->source, AL_GAIN, want_volume); } unqueue_old_buffers(stream); return buffer; } double fs_emu_audio_get_measured_avg_buffer_fill(int stream) { audio_stream *s = g_streams[stream]; return s->fill_stat_buffer_avg; } void fs_emu_enable_audio_stream(int stream) { fs_log("enabling audio stream %d\n", stream); } void fs_emu_disable_audio_stream(int stream) { fs_log("disabling audio stream %d\n", stream); } void fs_emu_audio_set_volume(int volume) { g_volume = volume; g_want_volume = g_mute ? 0.0 : g_volume / 100.0; } void fs_emu_audio_set_mute(int mute) { g_mute = mute; g_want_volume = g_mute ? 0.0 : g_volume / 100.0; } int fs_emu_audio_get_volume() { return g_volume; } int fs_emu_audio_get_mute() { return g_mute || g_volume == 0; } void fs_emu_set_audio_buffer_frequency(int stream, int frequency) { } int fs_emu_get_audio_frequency() { return g_audio_out_frequency; } int fs_emu_get_audio_buffer_size() { return g_sys_buffer_bytes; } void fs_emu_audio_sample(int stream, int16_t left, int16_t right) { } static void update_stats(int stream, int time_ms) { if (!g_fs_emu_audio_stream_playing[stream]) { return; } audio_stream *s = g_streams[stream]; int available = s->buffers_queued * s->buffer_size; //int error = available - s->fill_target; int error = s->fill_target - s->fill_stat_buffer_avg; int head_pos = s->fill_stat_buffer_pos; int avg_tail_pos = head_pos - (FILL_STAT_BUFFER_ITEMS_AVG - 1); int min_tail_pos = head_pos - (FILL_STAT_BUFFER_ITEMS_MIN - 1); head_pos = (head_pos + 1) % FILL_STAT_BUFFER_LENGTH; avg_tail_pos = (avg_tail_pos + FILL_STAT_BUFFER_LENGTH) % FILL_STAT_BUFFER_LENGTH; min_tail_pos = (min_tail_pos + FILL_STAT_BUFFER_LENGTH) % FILL_STAT_BUFFER_LENGTH; s->fill_stat_buffer[head_pos] = available; s->err_stat_buffer[head_pos] = error; int err_tail_pos = head_pos - (FILL_STAT_BUFFER_ITEMS_ERR - 1); err_tail_pos = (err_tail_pos + FILL_STAT_BUFFER_LENGTH) % FILL_STAT_BUFFER_LENGTH; s->err_stat_buffer_sum = s->err_stat_buffer_sum - s->err_stat_buffer[err_tail_pos] + error; s->fill_stat_buffer_avg_sum = s->fill_stat_buffer_avg_sum - \ s->fill_stat_buffer[avg_tail_pos] + available; s->fill_stat_buffer_avg = s->fill_stat_buffer_avg_sum / FILL_STAT_BUFFER_ITEMS_AVG; //printf("%d %d\n", available, s->fill_stat_buffer_avg); if (s->fill_stat_buffer[min_tail_pos] <= s->fill_stat_buffer_min) { if (s->fill_stat_buffer[min_tail_pos] < s->fill_stat_buffer_min) { fs_log("\n\nERROR WITH g_fill_stat_buffer_min, " "g_fill_stat_buffer[min_tail_pos] = %d, " "g_fill_stat_buffer_min = %d\n\n", s->fill_stat_buffer[min_tail_pos], s->fill_stat_buffer_min); } // must re-calculate min value int pos = head_pos; int min = 1000000000; for (int i = 0; i < FILL_STAT_BUFFER_ITEMS_MIN; i++) { int val = s->fill_stat_buffer[pos]; if (val < min) { min = val; } pos = pos - 1; pos = (pos + FILL_STAT_BUFFER_LENGTH) % FILL_STAT_BUFFER_LENGTH; } s->fill_stat_buffer_min = min; } s->fill_stat_buffer_avg_min_sum = s->fill_stat_buffer_avg_min_sum - \ s->min_fill_stat_buffer[avg_tail_pos] + s->fill_stat_buffer_min; s->fill_stat_buffer_avg_min = s->fill_stat_buffer_avg_min_sum / FILL_STAT_BUFFER_ITEMS_AVG; s->avg_fill_stat_buffer[head_pos] = s->fill_stat_buffer_avg; s->min_fill_stat_buffer[head_pos] = s->fill_stat_buffer_min; s->avg_min_fill_stat_buffer[head_pos] = s->fill_stat_buffer_avg_min; MEMORY_BARRIER; //g_fill_stat_buffer_pos = (g_fill_stat_buffer_pos + 1) % FILL_STAT_BUFFER_LENGTH; s->fill_stat_buffer_pos = head_pos; } void fs_emu_audio_video_sync(int time_ms) { for (int i = 0; i < MAX_STREAMS; i++) { if (g_streams[i]) { unqueue_old_buffers(i); update_stats(i, time_ms); pid_controller_step(i, time_ms); } } } static void log_openal_info() { if (alGetString(AL_VERSION)) { fs_log("openal version: %s\n", alGetString(AL_VERSION)); } if (alGetString(AL_RENDERER)) { fs_log("openal renderer: %s\n", alGetString(AL_RENDERER)); } if (alGetString(AL_VENDOR)) { fs_log("openal vendor: %s\n", alGetString(AL_VENDOR)); } if (alGetString(AL_EXTENSIONS)) { fs_log("openal extensions: %s\n", alGetString(AL_EXTENSIONS)); } // enumerate OpenAL devices fs_log("openal devices:\n"); if (alcIsExtensionPresent (NULL, "ALC_ENUMERATION_EXT") == AL_TRUE) { const char *s = (const char *) alcGetString(NULL, ALC_DEVICE_SPECIFIER); while (*s) { fs_log("- %s\n", s); while (*s++) { // loop until s points to next string } } } else { fs_log(" - no support for device enumeration\n"); } // print default device name fs_log("openal default device: %s\n", alcGetString(NULL, ALC_DEFAULT_DEVICE_SPECIFIER)); } static void openal_audio_init() { fs_log("openal_audio_init\n"); // select the "preferred device" g_device = alcOpenDevice(NULL); if (g_device) { fs_log("openal device opened: %s\n", alcGetString(g_device, ALC_DEVICE_SPECIFIER)); } else { fs_log("alcOpenDevice returned NULL\n"); fs_emu_warning("OpenAL: Could not open audio device device\n"); ALenum error_code = alGetError(); fs_log("OpenAL error code: %d\n", error_code); if (alGetString(error_code)) { fs_log("(%s)\n", alGetString(error_code)); } } log_openal_info(); if (!g_device) { return; } #if 0 // FIXME: enable later ALCint attributes[3] = { ALC_FREQUENCY, 48000, 0 }; fs_log("openal: trying 48000\n"); g_context = alcCreateContext(g_device, attributes); if (g_context) { g_audio_out_frequency = 48000; } else { //check_al_error("alcCreateContext"); fs_log("openal: trying without frequency specified\n"); } #endif ALCint attributes[] = { ALC_MONO_SOURCES, 0, ALC_STEREO_SOURCES, 2, 0 }; if (!g_context) { g_context = alcCreateContext(g_device, attributes); g_audio_out_frequency = 44100; } if (g_context) { fs_log("openal: created context\n"); alcMakeContextCurrent(g_context); check_al_error("alcMakeContextCurrent"); fs_log("openal: made context current\n"); } else { fs_emu_warning("OpenAL: no context created\n"); //check_al_error("alcCreateContext"); } int stereo_sources; alcGetIntegerv(g_device, ALC_STEREO_SOURCES, 1, &stereo_sources); fs_log("openal: number of stereo sources is %d\n", stereo_sources); } void fs_emu_audio_init() { fs_log("fs_emu_audio_init\n"); openal_audio_init(); } static void openal_audio_shutdown() { //alDeleteSources(NUM_SOURCES, source); //alDeleteBuffers(NUM_BUFFERS, buffers); alcMakeContextCurrent(NULL); if (!g_context) { alcDestroyContext(g_context); g_context = NULL; } if (g_device) { alcCloseDevice(g_device); g_device = NULL; } } void fs_emu_audio_shutdown() { openal_audio_shutdown(); } void fs_emu_init_audio_stream_options(fs_emu_audio_stream_options *options) { options->frequency = 44100; options->channels = 2; options->sample_size = 16; //options->buffer_size = 1024; options->buffer_size = 512; //options->min_buffers = 10; options->min_buffers = 1; } void fs_emu_init_audio_stream(int stream, fs_emu_audio_stream_options *options) { fs_log("initializing audio stream %d\n", stream); audio_stream *s = fs_malloc0(sizeof(audio_stream)); s->buffer_size = options->buffer_size; s->frequency = options->frequency; s->num_buffers = MAX_BUFFERS; s->min_buffers = options->min_buffers; fs_log("frequency: %d, buffers: %d buffer size: %d bytes\n", s->frequency, s->num_buffers, s->buffer_size); s->mutex = fs_mutex_create(); s->queue = fs_queue_new(); alGenSources(1, &s->source); //alSourcei (s->source, AL_SOURCE_RELATIVE, AL_TRUE); //alSource3f(s->source, AL_POSITION, 0.0, 0.0, -1.0); //alSourcef (s->source, AL_ROLLOFF_FACTOR, 0.0); // AL_DIRECT_CHANNELS_SOFT alSourcei (s->source, 0x1033, AL_TRUE); check_al_error("alGenSources"); for (int i = 0; i < s->num_buffers; i++) { ALuint buffer; alGenBuffers(1, &buffer); check_al_error("alGenBuffers"); fs_queue_push_tail(s->queue, FS_UINT_TO_POINTER(buffer)); } s->buffers_queued = 0; // FIXME: configure elsewhere if (stream == 0) { int abtb = fs_config_get_int_clamped("audio_buffer_target_bytes", 512, 16 * 1024); if (abtb == FS_CONFIG_NONE) { abtb = 8 * 1024; } s->fill_target = abtb; } else { s->fill_target = 0; } s->pid_last_error = 0; s->pid_last_last_error = 0; s->pid_last_time = 0; s->pid_last_last_time = 0; g_streams[stream] = s; } #define AUDIO_DEBUG_SCALE 0.012 void fs_emu_audio_render_debug_info(uint32_t *texture) { int x; int y1; uint32_t color; uint32_t *line; audio_stream *s = g_streams[0]; int head_pos = s->fill_stat_buffer_pos; int pos = head_pos; x = 255; y1 = 0; for (int i = 0; i < FILL_STAT_BUFFER_ITEMS; i++) { int val = s->fill_stat_buffer[pos]; int underrun = val < g_sys_buffer_bytes; int y2 = y1 + val * AUDIO_DEBUG_SCALE; y2 = MIN(y2, 255); if (underrun) { color = 0x80000080; } else { color = 0x60602020; } for (int y = y1; y < y2; y++) { *(texture + ((y * 256) + x)) = color; } if (--x < 128) { break; } pos = pos - 1; pos = (pos + FILL_STAT_BUFFER_LENGTH) % FILL_STAT_BUFFER_LENGTH; } pos = head_pos; color = 0xb0b0b0b0; x = 255; for (int i = 0; i < FILL_STAT_BUFFER_ITEMS; i++) { int val = s->avg_fill_stat_buffer[pos]; int y = val * AUDIO_DEBUG_SCALE; if (--x < 128) { break; } y = MIN(y, 255); *(texture + ((y * 256) + x)) = color; pos = pos - 1; pos = (pos + FILL_STAT_BUFFER_LENGTH) % FILL_STAT_BUFFER_LENGTH; } pos = head_pos; color = 0xb000b0b0; x = 255; for (int i = 0; i < FILL_STAT_BUFFER_ITEMS; i++) { int val = s->avg_min_fill_stat_buffer[pos]; int y = val * AUDIO_DEBUG_SCALE; if (--x < 128) { break; } y = MIN(y, 255); *(texture + ((y * 256) + x)) = color; pos = pos - 1; pos = (pos + FILL_STAT_BUFFER_LENGTH) % FILL_STAT_BUFFER_LENGTH; } // target buffer line color = 0xb000b000; line = texture + (int) (s->fill_target * AUDIO_DEBUG_SCALE) * 256 + 128; for (int x = 128; x < 256; x++) { *(line++) = color; } } fs_emu_audio_driver g_fs_emu_audio_openal_driver = { "openal", openal_audio_init, openal_audio_shutdown, }; #endif // USE_OPENAL fs-uae-2.2.3+dfsg/libfsemu/src/emu/audio.h0000644000175000017500000000536212162366654020517 0ustar glaubitzglaubitz#ifndef LIBFSEMU_AUDIO_H_ #define LIBFSEMU_AUDIO_H_ #include #include #include "util.h" #define MAX_STREAMS 4 extern int g_fs_emu_audio_stream_playing[MAX_STREAMS]; extern int64_t g_fs_emu_audio_buffer_underrun_time; typedef struct fs_emu_audio_driver { const char *name; void(*init)(void); void(*shutdown)(void); } fs_emu_audio_driver; void fs_emu_audio_init(); void fs_emu_audio_shutdown(); void fs_emu_audio_video_sync(int time_ms); void fs_emu_audio_render_debug_info(uint32_t *texture); void fs_emu_audio_set_default_pitch(double pitch); #define AUDIO_ENABLED #define MEMORY_BARRIER __asm__ __volatile__ ("" ::: "memory") #if 0 // ring buffer for audio, byte size must be a multiple of 4 #define RING_BUFFER_SIZE_FRAMES (4096 * 4) //#define RING_BUFFER_SIZE_FRAMES (16384 * 4) #define RING_BUFFER_SIZE_SAMPLES (2 * RING_BUFFER_SIZE_FRAMES) #define RING_BUFFER_SIZE (4 * RING_BUFFER_SIZE_SAMPLES) #define FRAME_TIME_LIST_COUNT 256 #define AUDIO_AVG_FILL_QUEUE_COUNT 256 #define AUDIO_FILL_QUEUE_COUNT 256 #define AUDIO_FILL_QUEUE2_COUNT 128 #define AUDIO_IN_FRAME_QUEUE_SIZE 128 #define AUDIO_OUT_FRAME_QUEUE_SIZE 1024 #define FILL_STAT_BUFFER_LENGTH 1024 #define FILL_STAT_BUFFER_ITEMS 512 #define FILL_STAT_BUFFER_ITEMS_AVG 128 #define FILL_STAT_BUFFER_ITEMS_MIN 128 typedef struct audio_stream { int enabled; unsigned char g_ring_buffer[RING_BUFFER_SIZE]; int g_ring_read_pos; int g_ring_write_pos; fs_emu_stat_queue g_frame_times; fs_emu_stat_queue g_audio_avg_fill_queue; fs_emu_stat_queue g_audio_fill_queue; fs_emu_stat_queue g_audio_fill_queue2; fs_emu_stat_queue g_audio_underrun_queue; fs_mutex *g_audio_fill_queue2_mutex; int16_t g_old_left; int16_t g_old_right; int g_audio_out_pos; double g_audio_in_pos; fs_emu_stat_queue g_audio_in_frame_times; fs_emu_stat_queue g_audio_in_frame_counts; int g_audio_in_frame_count; fs_emu_stat_queue g_audio_out_frame_times; fs_emu_stat_queue g_audio_out_frame_counts; // FIXME: SET DEFAULT = 44100.0 ? double g_audio_in_frequency; // FIXME: SET DEFAULT = 44100.0 ? //double g_audio_in_fps; // FIXME: SET DEFAULT TO 1.0 double g_advance; int fill_stat_buffer[FILL_STAT_BUFFER_LENGTH]; int avg_fill_stat_buffer[FILL_STAT_BUFFER_LENGTH]; int min_fill_stat_buffer[FILL_STAT_BUFFER_LENGTH]; int avg_min_fill_stat_buffer[FILL_STAT_BUFFER_LENGTH]; int fill_stat_buffer_avg_sum; int fill_stat_buffer_avg; int fill_stat_buffer_min; int fill_stat_buffer_avg_min_sum; int fill_stat_buffer_avg_min; volatile int fill_stat_buffer_pos; double pid_integral; double pid_last_error; int pid_last_time; } audio_stream; #endif #endif // LIBFSEMU_AUDIO_H_ fs-uae-2.2.3+dfsg/libfsemu/src/emu/menu.h0000644000175000017500000000121112162366654020347 0ustar glaubitzglaubitz#ifndef LIBFSEMU_MENU_H_ #define LIBFSEMU_MENU_H_ enum { ACTION_MENU_NONE, ACTION_MENU_LEFT, ACTION_MENU_RIGHT, ACTION_MENU_UP, ACTION_MENU_DOWN, ACTION_MENU_PRIMARY, ACTION_MENU_BACK, ACTION_MENU_MENU, ACTION_MENU_START, ACTION_MENU_SELECT, ACTION_MENU_ESCAPE, }; int fs_emu_menu_or_dialog_is_active(void); void fs_emu_menu_init_opengl(void); int fs_emu_menu_is_active(void); void fs_emu_menu_toggle(void); void fs_emu_menu_render(double transition); void fs_emu_menu_function(int action, int state); extern int g_fs_emu_menu_mode; extern const char* g_fs_emu_key_names[]; #endif // LIBFSEMU_MENU_H_ fs-uae-2.2.3+dfsg/libfsemu/src/emu/emu_lua.c0000644000175000017500000000316612162366654021040 0ustar glaubitzglaubitz#ifdef WITH_LUA #include "emu_lua.h" #include #include #include #include static fs_mutex *g_mutex; lua_State *fs_emu_lua_state = NULL; void fs_emu_lua_run_handler(const char *name) { lua_State **L = &fs_emu_lua_state; while(*L) { fs_emu_acquire_lua(); lua_getglobal(*L, name); if (lua_isnil(*L, -1)) { //lua_pop(*L, 1); } else if (lua_pcall(*L, 0, 0, 0) != 0) { fs_emu_lua_log_error(name); //lua_pop(*L, 1); } lua_settop(*L, 0); fs_emu_release_lua(); //L++; break; } } lua_State *fs_emu_get_lua_state(void) { return fs_emu_lua_state; } static int l_fs_emu_log(lua_State *L) { int n = lua_gettop(L); if (n != 1) { lua_pushstring(L, "incorrect argument"); lua_error(L); } const char *s = luaL_checkstring(L, 1); fs_emu_log_string(s); return 0; } void fs_emu_lua_log_error(const char *msg) { fs_log("%s: %s\n", msg, lua_tostring(fs_emu_lua_state, -1)); printf("%s: %s\n", msg, lua_tostring(fs_emu_lua_state, -1)); } void fs_emu_acquire_lua(void) { fs_mutex_lock(g_mutex); } void fs_emu_release_lua(void) { fs_mutex_unlock(g_mutex); } void fs_emu_lua_init(void) { fs_log("fs_emu_lua_init\n"); fs_emu_lua_state = luaL_newstate(); fs_log("new lua_State at %p\n", fs_emu_lua_state); luaL_openlibs(fs_emu_lua_state); lua_register(fs_emu_lua_state, "fs_emu_log", l_fs_emu_log); g_mutex = fs_mutex_create(); } #else void fs_emu_lua_run_handler(const char *name) { // do nothing } #endif fs-uae-2.2.3+dfsg/libfsemu/src/emu/dialog.h0000644000175000017500000000033312162366654020646 0ustar glaubitzglaubitz#ifndef LIBFSEMU_DIALOG_H_ #define LIBFSEMU_DIALOG_H_ #include void fs_emu_dialog_init(); void fs_emu_dialog_render(); void fs_emu_dialog_handle_action(int action, int state); #endif // LIBFSEMU_DIALOG_H_ fs-uae-2.2.3+dfsg/libfsemu/src/emu/netplay.h0000644000175000017500000000045012162366654021063 0ustar glaubitzglaubitz#ifndef LIBFSEMU_NETPLAY_H_ #define LIBFSEMU_NETPLAY_H_ #include int fs_emu_netplay_connect(); void fs_emu_netplay_start(); int fs_emu_netplay_send_input_event(int input_event); void fs_emu_netplay_init(); int fs_emu_netplay_wait_for_frame(int frame); #endif // LIBFSEMU_NETPLAY_H_ fs-uae-2.2.3+dfsg/libfsemu/src/emu/input.c0000644000175000017500000014163512162366654020554 0ustar glaubitzglaubitz#include "input.h" #include #include #include #include #include #include #include #include #include #include #include "actions.h" #include "hud.h" #include "menu.h" #include "netplay.h" #include "libfsemu.h" #include "video.h" static char *g_controllers_dir = NULL; void fs_emu_set_controllers_dir(const char *path) { if (g_controllers_dir) { free(g_controllers_dir); } if (path) { g_controllers_dir = fs_strdup(path); } } #define CTRL_BIT 1 #define ALT_BIT 2 #define SHIFT_BIT 4 #define MAX_ACTIONS 1024 #define MAX_ACTIONS_WITH_LIBFSEMU_INTERNAL 1200 static fs_emu_action g_actions[MAX_ACTIONS_WITH_LIBFSEMU_INTERNAL] = {}; /* input mapping then comes all joysticks in order every device has 512 "slots" joysticks are device index 0 .. num joysticks - 1 keyboard is MAX_DEVICES - 1 - for keyboard, every index corresponds to a keysym - for joystick: axis, buttons and hats are mapped to an index between - 0 and 512 (see button_index) */ static int g_debug_input = 0; #define MAX_DEVICES 64 #define KEYBOARD 63 #define SLOTS 512 #define MOUSE 59 static fs_hash_table *configure_input_device(const char *name, const char *platform); // FIXME: cleanup here, KEYBOARD occupies more than one "device" at the end, // actually 8 now static int key_index(int key, int mod, int offset) { int slots_offset = offset; if (mod & FS_ML_KEY_MOD_CTRL) { slots_offset |= CTRL_BIT; } if (mod & FS_ML_KEY_MOD_ALT) { slots_offset |= ALT_BIT; } if (mod & FS_ML_KEY_MOD_SHIFT) { slots_offset |= SHIFT_BIT; } int key_index = 0; if (key >= 0) { key_index = (MAX_DEVICES - 8 + slots_offset) * SLOTS + key; } //printf("key index is %d\n", key); return key_index; } static int mouse_index(int horiz, int vert, int button) { int index = 0; if (horiz) { index = 1; } else if (vert) { index = 2; } else if (button == FS_ML_BUTTON_LEFT) { index = 3; } else if (button == FS_ML_BUTTON_MIDDLE) { index = 4; } else if (button == FS_ML_BUTTON_RIGHT) { index = 5; } return MOUSE * SLOTS + index; } #define INPUT_ACTION_TABLE_SIZE_BYTES (MAX_DEVICES * SLOTS * sizeof(int)) static int g_input_action_table[MAX_DEVICES * SLOTS]; static int g_menu_action_table[MAX_DEVICES * SLOTS]; static unsigned char g_input_state[MAX_DEVICES * SLOTS]; static int g_key_modifiers_at_pressed_state[FS_ML_KEY_LAST] = {}; // used to look up start index from select index and vice-versa for menu // button emulation (you can simultaneously press start and select instead // of pressing menu button) static int g_menu_action_corresponding[MAX_DEVICES * SLOTS]; #define MAX_JOYSTICKS 63 #define MAX_BUTTONS 63 #define MAX_AXIS 63 static void map_keyboard_key(int key, int mod, int input_event, int offset) { if (mod == -1) { for (int i = 0; i < 8; i++) { map_keyboard_key(key, 0, input_event, i); } return; } int index = key_index(key, mod, offset); if (index > 0) { g_input_action_table[index] = input_event; } } void fs_emu_set_keyboard_translation(fs_emu_key_translation *keymap) { for (; keymap->system_key; keymap++) { int key = keymap->system_key; int mod = keymap->system_mod; int input_event = keymap->input_event; if (key == -1) { continue; } map_keyboard_key(key, mod, input_event, 0); } } void fs_emu_configure_mouse(int horiz, int vert, int left, int middle, int right, int wheel_axis) { fs_log("fs_emu_configure_mouse\n"); g_input_action_table[mouse_index(1, 0, 0)] = horiz; g_input_action_table[mouse_index(0, 1, 0)] = vert; g_input_action_table[mouse_index(0, 0, FS_ML_BUTTON_LEFT)] = left; g_input_action_table[mouse_index(0, 0, FS_ML_BUTTON_MIDDLE)] = middle; g_input_action_table[mouse_index(0, 0, FS_ML_BUTTON_RIGHT)] = right; g_input_action_table[mouse_index(0, 0, FS_ML_BUTTON_WHEELUP)] = wheel_axis; g_input_action_table[mouse_index(0, 0, FS_ML_BUTTON_WHEELDOWN)] = wheel_axis; } typedef struct input_config_item { char *config_key; char *config_value; int key; int axis; int hat; int button; int value; } input_config_item; void free_input_config_item_list(input_config_item *items) { for (input_config_item *item = items; item->config_key; item++) { free(item->config_key); free(item->config_value); } free(items); } static void map_input_config_item(const char* desc, int *out_key, int *out_axis, int *out_hat, int *out_button, int *out_value) { // make parts always at least three items -this way we do not have to // bounds check parts char *tmp = fs_strconcat(desc, "_x_x_x_x", NULL); char** parts = fs_strsplit(tmp, "_", 4); //int is_keyboard_key = 0; //int index = -1; if (fs_ascii_strcasecmp(parts[0], "key") == 0) { for (int i = 0; g_fs_emu_key_names[i]; i++) { if (fs_ascii_strcasecmp(parts[1], g_fs_emu_key_names[i]) == 0) { *out_key = i; break; } } } else if (fs_ascii_strcasecmp(parts[0], "button") == 0) { *out_button = atoi(parts[1]); } else if (fs_ascii_strcasecmp(parts[0], "axis") == 0) { int axis = atoi(parts[1]); int direction = -1; if (fs_ascii_strcasecmp(parts[2], "pos") == 0) { direction = 1; } else if (fs_ascii_strcasecmp(parts[2], "neg") == 0) { direction = 0; } else { fs_log("error parsing \"%s\"\n", desc); free(tmp); fs_strfreev(parts); return; } *out_axis = axis; *out_value = direction; } else if (fs_ascii_strcasecmp(parts[0], "hat") == 0) { int hat = atoi(parts[1]); int direction = -1; if (fs_ascii_strcasecmp(parts[2], "up") == 0) { direction = FS_ML_HAT_UP; } else if (fs_ascii_strcasecmp(parts[2], "down") == 0) { direction = FS_ML_HAT_DOWN; } else if (fs_ascii_strcasecmp(parts[2], "left") == 0) { direction = FS_ML_HAT_LEFT; } else if (fs_ascii_strcasecmp(parts[2], "right") == 0) { direction = FS_ML_HAT_RIGHT; } else { fs_log("error parsing \"%s\"\n", desc); free(tmp); fs_strfreev(parts); return; } *out_hat = hat; *out_value = direction; } else { fs_log("error parsing \"%s\"\n", desc); } free(tmp); fs_strfreev(parts); } static input_config_item *get_system_config_for_device(const char *device, const char *platform) { fs_log("get system config for device: %s\n", device); fs_hash_table *config = configure_input_device(device, platform); if (config == NULL) { return NULL; } int num_keys = fs_hash_table_size(config); input_config_item *result = fs_malloc0((num_keys + 1) * sizeof(input_config_item)); input_config_item *p = result; fs_list *keys = fs_hash_table_get_keys(config); fs_list *key_item = keys; while (key_item) { char* value = fs_hash_table_lookup(config, key_item->data); // both key and value is owned by hash table, must not be freed //*(p++) = fs_strdup(key_item->data); //*(p++) = fs_strdup(value); //*p = (input_config_item*) fs_malloc0(sizeof(input_config_item)); p->config_key = fs_strdup(key_item->data); p->config_value = fs_strdup(value); p->key = -1; p->axis = -1; p->hat = -1; p->button = -1; p->value = 0; // fill out key, axis, hat button and value fields based on // config_key map_input_config_item(p->config_key, &(p->key), &(p->axis), &(p->hat), &(p->button), &(p->value)); p++; key_item = key_item->next; } fs_list_free(keys); fs_hash_table_destroy(config); // terminate result with NULL pointer and return //*(p++) = NULL; return result; } static input_config_item *get_config_for_device(const char *device, const char *platform) { return get_system_config_for_device(device, platform); } int fs_emu_input_action_from_string(const char *value) { char *value_l = fs_ascii_strdown(value, -1); fs_emu_action *action = g_actions; while (action->name) { //fs_log(" %s vs %s\n", value_l, action->name); if (strcmp(value_l, action->name) == 0) { //fs_log(" ** found %s %d** \n", action->name, action->input_event); free(value_l); return action->input_event; } action++; } free(value_l); return -1; } static void map_custom_key_action(const char *key_name, int key_val, const char *mod_name, int mod_val) { char *config_key = fs_strdup_printf("keyboard_key_%s%s", mod_name, key_name); const char *config_value = fs_config_get_const_string(config_key); if (!config_value) { free(config_key); return; } int action = fs_emu_input_action_from_string(config_value); if (action >= 0) { map_keyboard_key(key_val, mod_val, action, 0); } free(config_key); } static void map_custom_keyboard_actions() { fs_log("map_custom_keyboard_actions\n"); const char **key = g_fs_emu_key_names; int k = 0; while (*key) { if (**key == 0) { key++; k++; continue; } char *keyl = fs_ascii_strdown(*key, -1); map_custom_key_action(keyl, k, "", -1); map_custom_key_action(keyl, k, "ctrl_", FS_ML_KEY_MOD_CTRL); map_custom_key_action(keyl, k, "ctrl_shift_", FS_ML_KEY_MOD_CTRL | FS_ML_KEY_MOD_SHIFT); map_custom_key_action(keyl, k, "ctrl_shift_alt_", FS_ML_KEY_MOD_CTRL | FS_ML_KEY_MOD_SHIFT | FS_ML_KEY_MOD_ALT); map_custom_key_action(keyl, k, "ctrl_alt_", FS_ML_KEY_MOD_CTRL | FS_ML_KEY_MOD_ALT); map_custom_key_action(keyl, k, "shift_", FS_ML_KEY_MOD_SHIFT); map_custom_key_action(keyl, k, "shift_alt_", FS_ML_KEY_MOD_SHIFT | FS_ML_KEY_MOD_ALT); map_custom_key_action(keyl, k, "alt_", FS_ML_KEY_MOD_ALT); free(keyl); key++; k++; } } static int button_index(int key, int joystick, int axis, int hat, int button, int value) { if (key >= 0) { return key_index(key, 0, 0); } // base index for this device //int index = (joystick + 1) * SLOTS; // first valid index is 1 int index = joystick * SLOTS + 1; if (axis >= 0) { index += axis * 2; if (value == 1) { index += 1; } } else if (hat >= 0) { index += 128; index += hat * 16 + value; } else if (button >= 0) { index += 384; index += button; } else { // no match index = joystick * SLOTS; } return index; } void map_custom_joystick_action(int joy, const char *name, int axis, int hat, int button, int value, const char *n1, int n2, const char *n3) { char *config_key = fs_strdup_printf("%s%s%d%s", name, n1, n2, n3); if (g_debug_input) { fs_log("%s\n", config_key); } const char *config_value = fs_config_get_const_string(config_key); if (!config_value) { free(config_key); return; } int index = button_index(-1, joy, axis, hat, button, value); int action = fs_emu_input_action_from_string(config_value); if (action >= 0) { g_input_action_table[index] = action; } free(config_key); } // 0-based or 1-based configuuration #define CONFIG_OFFSET 0 void map_custom_axis_actions(int joy, const char *name, int axis) { map_custom_joystick_action(joy, name, axis, -1, -1, 0, "_axis_", axis + CONFIG_OFFSET, "_neg"); map_custom_joystick_action(joy, name, axis, -1, -1, 1, "_axis_", axis + CONFIG_OFFSET, "_pos"); } void map_custom_hat_actions(int joy, const char *name, int hat) { map_custom_joystick_action(joy, name, -1, hat, -1, FS_ML_HAT_UP, "_hat_", hat + CONFIG_OFFSET, "_up"); map_custom_joystick_action(joy, name, -1, hat, -1, FS_ML_HAT_DOWN, "_hat_", hat + CONFIG_OFFSET, "_down"); map_custom_joystick_action(joy, name, -1, hat, -1, FS_ML_HAT_LEFT, "_hat_", hat + CONFIG_OFFSET, "_left"); map_custom_joystick_action(joy, name, -1, hat, -1, FS_ML_HAT_RIGHT, "_hat_", hat + CONFIG_OFFSET, "_right"); } void map_custom_button_actions(int joy, const char *name, int button) { map_custom_joystick_action(joy, name, -1, -1, button, 0, "_button_", button + CONFIG_OFFSET, ""); } void map_custom_joystick_actions_2(int joy, const char *name, int axis_count, int hat_count, int button_count) { for (int i = 0; i < axis_count; i++) { map_custom_axis_actions(joy, name, i); } for (int i = 0; i < hat_count; i++) { map_custom_hat_actions(joy, name, i); } for (int i = 0; i < button_count; i++) { map_custom_button_actions(joy, name, i); } } static char *joystick_long_config_name(const fs_ml_input_device *device) { const char *in = device->name; char *result = malloc(strlen(device->name) + 1); char *out = result; int other = 0; while (*in) { #if 0 if (!with_number) { #endif if (*in == '#') { // remove #2, #3 from name break; } #if 0 } #endif char c = fs_ascii_tolower(*in); if ((c >= 'a' && c <= 'z') || (c >= '0' && c <= '9')) { if (other) { *(out++) = '_'; } *(out++) = c; other = 0; } else { other = 1; } in++; } *out = '\0'; if (fs_str_has_suffix(result, "_")) { result[strlen(result) - 1] = '\0'; } #if defined(WINDOWS) const char *platform = "windows"; #elif defined(MACOSX) const char *platform = "macosx"; #elif defined(LINUX) const char *platform = "linux"; #elif defined(FREEBSD) const char *platform = "freebsd"; #elif defined(OPENBSD) const char *platform = "openbsd"; #else const char *platform = "unknown"; #endif char *result2 = fs_strdup_printf("%s_%d_%d_%d_%d_%s", result, device->buttons, device->axes, device->hats, device->balls, platform); free(result); return result2; } static char *joystick_config_name(const char* name, int with_number) { const char *in = name; char *result = malloc(strlen(name) + 1); char *out = result; int other = 0; while (*in) { if (!with_number) { if (*in == '#') { // remove #2, #3 from name break; } } char c = fs_ascii_tolower(*in); if ((c >= 'a' && c <= 'z') || (c >= '0' && c <= '9')) { if (other) { *(out++) = '_'; } *(out++) = c; other = 0; } else { other = 1; } in++; } *out = '\0'; if (fs_str_has_suffix(result, "_")) { result[strlen(result) - 1] = '\0'; } return result; } void map_custom_gamepad_actions(int joy, const char *name, fs_ml_input_device *device) { char* config_name = joystick_long_config_name(device); fs_log("config name \"%s\"\n", config_name); input_config_item *config = get_config_for_device(config_name, "universal"); if (config == NULL) { fs_log("did not find generic gamepad config for device \"%s\"\n", config_name); free(config_name); config_name = joystick_config_name(device->name, 0); fs_log("config name \"%s\"\n", config_name); config = get_config_for_device(config_name, "universal"); if (config == NULL) { fs_log("did not find generic gamepad config for device \"%s\"\n", config_name); free(config_name); return; } } for (int j = 0; config[j].config_key != NULL; j++) { char *config_key = fs_strdup_printf("%s_%s", name, config[j].config_value); if (g_debug_input) { fs_log("%s\n", config_key); } const char *config_value = fs_config_get_const_string(config_key); if (!config_value) { free(config_key); continue; } int index = button_index(-1, joy, config[j].axis, config[j].hat, config[j].button, config[j].value); int action = fs_emu_input_action_from_string(config_value); if (action >= 0) { g_input_action_table[index] = action; } } free_input_config_item_list(config); free(config_name); } static void map_custom_joystick_actions() { fs_log("map_custom_joystick_actions\n"); fs_ml_input_device device; for (int i = 0; i < FS_ML_INPUT_DEVICES_MAX; i++) { if (!fs_ml_input_device_get(i, &device)) { continue; } if (device.name == NULL) { continue; } char *name, *config_name; fs_log("map_custom_joystick_actions for %s\n", device.name); name = fs_ascii_strdown(device.name, -1); config_name = joystick_config_name(name, 1); map_custom_joystick_actions_2(i, config_name, device.axes, device.hats, device.buttons); map_custom_gamepad_actions(i, config_name, &device); free(config_name); free(name); name = fs_strdup_printf("joystick_%d", i); map_custom_joystick_actions_2(i, name, device.axes, device.hats, device.buttons); map_custom_gamepad_actions(i, name, &device); free(name); } } void fs_emu_map_custom_actions() { map_custom_keyboard_actions(); map_custom_joystick_actions(); } void fs_emu_set_actions(fs_emu_action *actions) { int k = 0; g_actions[k].name = "action_taunt"; g_actions[k++].input_event = FS_EMU_ACTION_TAUNT; g_actions[k].name = "action_screenshot"; g_actions[k++].input_event = FS_EMU_ACTION_SCREENSHOT; while (actions->name) { if (k == MAX_ACTIONS) { fs_log("MAX_ACTIONS reached\n"); break; } g_actions[k].name = fs_ascii_strdown(actions->name, -1); g_actions[k].input_event = actions->input_event; g_actions[k].flags = actions->flags; k++; actions++; } } void fs_emu_reset_input_mapping() { memset(g_input_action_table, 0, INPUT_ACTION_TABLE_SIZE_BYTES); int count; fs_ml_input_device *devices = fs_ml_get_input_devices(&count); for (int i = 0; i < count; i++) { devices[i].usage = 0; } } static fs_mutex* g_input_event_mutex; static fs_queue* g_input_event_queue; int fs_emu_get_input_event() { fs_mutex_lock(g_input_event_mutex); int input_event = FS_POINTER_TO_INT(fs_queue_pop_tail( g_input_event_queue)); fs_mutex_unlock(g_input_event_mutex); return input_event; } void fs_emu_queue_input_event_internal(int input_event) { if (input_event == 0) { fs_log("WARNING: tried to queue input event 0\n"); return; } fs_mutex_lock(g_input_event_mutex); fs_queue_push_head(g_input_event_queue, FS_INT_TO_POINTER(input_event)); fs_mutex_unlock(g_input_event_mutex); } void fs_emu_queue_action(int action, int state) { int input_event = action | (state << 16); fs_emu_queue_input_event(input_event); } void fs_emu_queue_input_event(int input_event) { if (input_event & 0x8000) { int state = (input_event & 0xff0000) >> 16; int action = input_event & 0xffff; // local action if (input_event & 0xc000) { // local libfsemu action fs_emu_handle_libfsemu_action(action, state); return; } else { // local application action } } #ifdef WITH_NETPLAY if (!fs_emu_netplay_send_input_event(input_event)) { #endif fs_emu_queue_input_event_internal(input_event); #ifdef WITH_NETPLAY } #endif } #include "keynames.c" fs_emu_input_device *fs_emu_get_input_devices(int* count) { return fs_ml_get_input_devices(count); } static void queue_input_event_with_state(int input_event, int state) { //printf("----------------------------- %d\n", state); //printf("action_function => input event %d (state %d)\n", input_event, state); if (input_event > 0) { input_event = input_event | (state << 16); fs_emu_queue_input_event(input_event); } } int g_pointer_visible = 1; int64_t g_pointer_visible_to = 0; void fs_emu_show_pointer(int show) { fs_ml_show_cursor(0, 0); g_pointer_visible = (show != 0); g_pointer_visible_to = 0; } void fs_emu_show_pointer_msec(int duration) { fs_ml_show_cursor(1, 0); g_pointer_visible = 1; g_pointer_visible_to = fs_emu_monotonic_time() + \ (int64_t) duration * 1000; } int fs_emu_is_pointer_visible() { return g_pointer_visible; } int64_t fs_emu_pointer_is_visible_to() { return g_pointer_visible_to; } int fs_emu_has_input_grab() { return fs_ml_has_input_grab(); } static int g_ignore_next_motion = 0; void fs_emu_grab_input(int mode) { fs_log("grab input mode: %d\n", mode); if (mode) { fs_ml_grab_input(1, 0); fs_emu_show_pointer(0); } else { fs_ml_grab_input(0, 0); fs_emu_show_pointer_msec(FS_EMU_MOUSE_DEFAULT_DURATION); } g_ignore_next_motion = 1; } void fs_emu_clear_menu_input_states(int key) { // FIXME: quick hack for fixing the state of the key used to exit // menu mode int index = button_index(key, -1, -1, -1, -1, -1); g_input_state[index] = 0; } static int map_joystick(int joystick, input_config_item *config, fs_emu_input_mapping *mapping, int *action_table, int *out_action, int *out_index) { const char* action_name = config->config_value; int action = 0; // mapping must be terminated with an entry with name set to NULL for (int i = 0;; i++) { if (mapping[i].name == NULL) { fs_log("did not find action for \"%s\"\n", action_name); return 0; } //fs_log("checking %s %s\n", mapping[i].name, action_name); if (strcmp(mapping[i].name, action_name) == 0) { action = mapping[i].action; break; } } int index = button_index(config->key, joystick, config->axis, config->hat, config->button, config->value); if (index > 0) { action_table[index] = action; if (config->key >= 0) { // also map for modifier combinations for (int i = 1; i < 8; i++) { action_table[index + SLOTS * i] = action; } } fs_log("%s (%d) => action \"%s\" (%d)\n", config->config_key, index, action_name, action); if (out_action) { *out_action = action; } if (out_index) { *out_index = index; } return 1; } else { fs_log("no mapping for %s => action \"%s\" (%d)\n", config->config_key, action_name, action); if (out_action) { *out_action = 0; } if (out_index) { *out_index = 0; } return 0; } } static fs_hash_table *g_input_config_paths = NULL; int read_input_config(const char *config_name, fs_hash_table *config, const char *platform) { const char *path = fs_hash_table_lookup(g_input_config_paths, config_name); if (path == NULL) { fs_log("config file for %s was not found\n", config_name); return 0; } fs_log("read config for %s for %s (from %s)\n", config_name, platform, path); fs_ini_file *ini_file = fs_ini_file_open(path); if (ini_file == NULL) { fs_log("error loading config file\n"); return 0; } char *value; //value = fs_ini_file_get_string(ini_file, "device", "type"); #if 0 if cp.has_option('device', 'type'): self.type = cp.get('device', 'type') if cp.has_option('device', 'name'): self.name = cp.get('device', 'name') self.decorate_name_with_number() #endif const char *section = "default"; if (fs_ini_file_has_group(ini_file, platform)) { section = platform; } else if (fs_ini_file_has_group(ini_file, "default")) { } else { fs_log("no config for platform %s\n", platform); return 0; } value = fs_ini_file_get_string(ini_file, section, "include"); if (value) { //fs_log("has section/include\n"); int len = strlen(value); for (int i = 0; i < len; i++) { if (value[i] == '/') { value[i] = '_'; } } int result = read_input_config(value, config, platform); free(value); if (!result) { return 0; } } char **keys = fs_ini_file_get_keys(ini_file, section, NULL); for (char **k = keys; *k; k++) { char *key = *k; value = fs_ini_file_get_string(ini_file, section, key); if (value == NULL) { continue; } #if 0 // FIXME: if value.startswith('('): if not multiple: continue assert value.endswith(')') value = value[1:-1] #endif char *temp = fs_hash_table_lookup(config, value); if (temp) { fs_hash_table_insert(config, fs_strdup(key), fs_strdup(temp)); fs_hash_table_remove(config, value); } else { fs_hash_table_insert(config, fs_strdup(key), fs_strdup(value)); } free(value); } if (keys) { fs_strfreev(keys); keys = NULL; } // indicate success return 1; } static fs_hash_table *configure_input_device(const char *name, const char *platform) { fs_hash_table *config = fs_hash_table_new(fs_str_hash, fs_str_equal); //char *config_name = joystick_config_name(name, 0); int result = read_input_config(name, config, platform); //free(config_name); if (result) { return config; } else { fs_hash_table_destroy(config); return NULL; } } int fs_emu_configure_joystick(const char *name, const char *type, fs_emu_input_mapping *mapping, int usage, char *out_name, int out_name_len) { fs_log("configure joystick \"%s\" for \"%s\"\n", name, type); if (name == NULL || name[0] == '\0') { return 0; } // FIXME: replace use of fs_ml_input_device_get, use a function returning // a pointer instead, we we can use the usage flag fs_ml_input_device device; for (int i = 0; i < FS_ML_INPUT_DEVICES_MAX; i++) { if (!fs_ml_input_device_get(i, &device)) { continue; } if (device.name == NULL || ( (fs_ascii_strcasecmp(device.name, name) != 0) && (fs_ascii_strcasecmp(device.alias, name) != 0))) { fs_log("did not match device #%d (%s)\n", i, device.name); continue; } fs_log("matched device #%d\n", i); if (out_name) { strncpy(out_name, device.name, out_name_len); } char* config_name = joystick_long_config_name(&device); fs_log("config name \"%s\"\n", config_name); input_config_item *config = get_config_for_device( config_name, type); if (config == NULL) { fs_log("did not find config for device \"%s\"\n", config_name); free(config_name); config_name = joystick_config_name(device.name, 0); fs_log("config name \"%s\"\n", config_name); config = get_config_for_device(config_name, type); if (config == NULL) { fs_log("did not find config for device \"%s\"\n", config_name); free(config_name); config_name = fs_strdup("unknown"); fs_log("config name \"%s\"\n", config_name); config = get_config_for_device(config_name, type); if (config == NULL) { fs_log("did not find config for device \"%s\"\n", config_name); free(config_name); fs_emu_notification(0, _("Device needs config for %s: %s"), type, name); break; } } } //printf("aaa config %p\n", config); for (int j = 0; config[j].config_key != NULL; j++) { //printf("%d\n", j); map_joystick(i, config + j, mapping, g_input_action_table, NULL, NULL); } fs_ml_input_device *devices = fs_ml_get_input_devices(NULL); devices[i].usage = usage; //printf("bbb\n"); free_input_config_item_list(config); free(config_name); return 1; } return 0; } // printf("index %d action %d\n", index, action); //printf("index %d state = %d g_input_state[index] = %d\n", index, state, g_input_state[index]); //if (!g_fs_emu_menu_mode) { #define PROCESS_STATE \ index = button_index(key, joystick, axis, hat, button, value); \ if (g_input_state[index] != state) { \ g_input_state[index] = state; \ int menu_action = g_menu_action_table[index]; \ int corresp_index = g_menu_action_corresponding[index]; \ if (state && (menu_action == ACTION_MENU_START \ || menu_action == ACTION_MENU_SELECT \ || menu_action == ACTION_MENU_MENU) && \ (!corresp_index || g_input_state[corresp_index])) { \ fs_emu_menu_toggle(); \ } \ else if (fs_emu_menu_or_dialog_is_active()) {\ handled = 1; \ int action = g_menu_action_table[index]; \ if (action) {\ fs_emu_menu_function(action, state); \ } \ } \ else {\ int action = g_input_action_table[index]; \ if (action) {\ handled = 1; \ queue_input_event_with_state(action, state); \ } \ } \ } static int process_input_event(fs_ml_event *event) { int handled = 0; //fs_log("process_input_event type %d (%d)\n", event->type, FS_ML_JOYBUTTONDOWN); int joystick = event->jbutton.which; int state = 0; int key = -1; int axis = -1; int hat = -1; int button = -1; int value = 0; int index = 0; switch(event->type) { case FS_ML_KEYDOWN: case FS_ML_KEYUP: state = (event->type == FS_ML_KEYDOWN); key = event->key.keysym.sym; PROCESS_STATE; break; case FS_ML_JOYBUTTONDOWN: case FS_ML_JOYBUTTONUP: button = event->jbutton.button; state = event->jbutton.state; PROCESS_STATE; break; case FS_ML_JOYAXISMOTION: axis = event->jaxis.axis; state = event->jaxis.value < -20000; value = 0; // negative axis PROCESS_STATE; state = event->jaxis.value > 20000; value = 1; // positive axis PROCESS_STATE; break; case FS_ML_JOYHATMOTION: hat = event->jhat.hat; state = (event->jhat.value & FS_ML_HAT_LEFT) != 0; value = FS_ML_HAT_LEFT; PROCESS_STATE; state = (event->jhat.value & FS_ML_HAT_RIGHT) != 0; value = FS_ML_HAT_RIGHT; PROCESS_STATE; state = (event->jhat.value & FS_ML_HAT_UP) != 0; value = FS_ML_HAT_UP; PROCESS_STATE; state = (event->jhat.value & FS_ML_HAT_DOWN) != 0; value = FS_ML_HAT_DOWN; PROCESS_STATE; break; } return handled; } int fs_emu_process_key_event(int key_code, int key_mod, int state) { //fs_log("fs_emu_process_key_event %d %d %d\n", key_code, key_mod, state); //if (state == 1) { //} if (fs_emu_menu_or_dialog_is_active()) { //printf("in menu mode\n"); // for now return 0; } // always process all key events, now int index = key_index(key_code, key_mod, 0); int input_event = g_input_action_table[index]; if (state == 0) { // key was released - we must now send a "release" event for // the key that was originally pressed (with the original // modifiers) key_mod = g_key_modifiers_at_pressed_state[key_code]; } else { g_key_modifiers_at_pressed_state[key_code] = key_mod; } if (g_debug_input) { fs_log("--> key_code %d key_mod %d state %d: \"%s\"\n", key_code, key_mod, state, g_fs_emu_key_names[key_code]); } // 65536 is also used as null event if (input_event > 0 && input_event < 65536) { if (g_debug_input) { fs_log(" = press (index %d) => " "input event %d\n", index, input_event); } // encode both state and input event in input_event input_event = input_event | (state << 16); fs_emu_queue_input_event(input_event); } else if (g_debug_input) { fs_log(" = press (index %d) => NO INPUT EVENT\n", index); } return 1; } int fs_emu_process_event(fs_emu_event *event) { return 0; } static fs_emu_input_mapping g_menu_mapping[] = { { "left", ACTION_MENU_LEFT }, { "right", ACTION_MENU_RIGHT }, { "up", ACTION_MENU_UP }, { "down", ACTION_MENU_DOWN }, { "primary", ACTION_MENU_PRIMARY }, { "back", ACTION_MENU_BACK }, { "menu", ACTION_MENU_MENU }, { "escape", ACTION_MENU_ESCAPE }, { "start", ACTION_MENU_START }, { "select", ACTION_MENU_SELECT }, { NULL, ACTION_MENU_NONE }, }; void read_input_configs_from_dir(const char *dir_name) { fs_log("reading input device configs from %s\n", dir_name); fs_dir *dir = fs_dir_open(dir_name, 0); if (dir == NULL) { fs_log("could not read directory %s\n", dir_name); return; } const char *name; while ((name = fs_dir_read_name(dir)) != NULL) { //fs_log("name: %s\n", name); char *dir2_name = fs_path_join(dir_name, name, NULL); fs_dir *dir2 = fs_dir_open(dir2_name, 0); if (dir2 == NULL) { if (fs_str_has_suffix(name, ".ini")) { // remove .ini suffix char* name3 = fs_strdup(name); name3[strlen(name3) - 4] = '\0'; fs_hash_table_insert(g_input_config_paths, fs_strdup(name3), fs_strdup(dir2_name)); ////fs_log("[*] %s\n", name3); free(name3); } else if (fs_str_has_suffix(name, ".conf")) { // remove .conf suffix char* name3 = fs_strdup(name); name3[strlen(name3) - 5] = '\0'; fs_hash_table_insert(g_input_config_paths, fs_strdup(name3), fs_strdup(dir2_name)); //fs_log("[*] %s\n", name3); free(name3); } free(dir2_name); continue; } const char *name2; while ((name2 = fs_dir_read_name(dir2)) != NULL) { //fs_log("name2: %s\n", name2); if (!fs_str_has_suffix(name2, ".ini")) { continue; } // remove .ini suffix char* name3 = fs_strdup(name2); name3[strlen(name3) - 4] = '\0'; char *path = fs_path_join(dir2_name, name2, NULL); char* full_name = fs_strconcat(name, "_", name3, NULL); //register_input_config(full_name, path); //register_input_config(name2, path); fs_hash_table_insert(g_input_config_paths, fs_strdup(full_name), fs_strdup(path)); fs_hash_table_insert(g_input_config_paths, fs_strconcat( full_name, "_usb", NULL), fs_strdup(path)); ////fs_log("[*] %s\n", full_name); fs_hash_table_insert(g_input_config_paths, fs_strdup(name3), fs_strdup(path)); fs_hash_table_insert(g_input_config_paths, fs_strconcat( name3, "_usb", NULL), fs_strdup(path)); ////fs_log("[*] %s\n", name3); free(full_name); free(path); free(name3); } fs_dir_close(dir2); free(dir2_name); } fs_dir_close(dir); } static void init_input_configs() { fs_log("init_input_configs\n"); g_input_config_paths = fs_hash_table_new_full(fs_str_hash, fs_str_equal, free, free); char *dir_name = fs_get_program_data_file("input"); if (dir_name != NULL) { read_input_configs_from_dir(dir_name); free(dir_name); } // read override configurations if (g_controllers_dir) { read_input_configs_from_dir(g_controllers_dir); } } static fs_emu_hotkey_function g_hotkey_function = NULL; void fs_emu_set_hotkey_function(fs_emu_hotkey_function function) { g_hotkey_function = function; } static int handle_shortcut(fs_ml_event *event) { //int sym = event->key.keysym.sym; int key_code = event->key.keysym.sym; int key_mod = event->key.keysym.mod; int state = (event->type == FS_ML_KEYDOWN); int special = key_mod & (FS_ML_KEY_MOD_F11 | FS_ML_KEY_MOD_F12); // keep track of whether F11/F12 has been used alone or not // this code will get a little confused if you use F11 // and F12 keys simultaneously.. static int special_pressed = 0; static int special_combo = 0; if (key_code == FS_ML_KEY_F11 || key_code == FS_ML_KEY_F12) { if (state) { special_pressed = 1; } // we must check key codes here, not modifiers, since the modifier will // be reset now that the keys are unpressed if (!state) { // we check special pressed here, because we get an bogus // release event after switching fullscreen / window mode if (special_pressed && !special_combo) { if (key_code == FS_ML_KEY_F12) { fs_emu_menu_toggle(); } else { fs_emu_toggle_zoom(0); } } special_combo = 0; special_pressed = 0; } } else if (special) { if (state) { // F11/F12 has been used in combination with another key special_combo = 1; if (key_code == FS_ML_KEY_G) { fs_emu_grab_input(!fs_emu_has_input_grab()); } else if (key_code == FS_ML_KEY_S) { fs_log("printscreen pressed\n"); g_fs_emu_screenshot = 1; } else if (key_code == FS_ML_KEY_Z) { fs_emu_toggle_zoom(0); } else if (key_code == FS_ML_KEY_B) { // toogle zoom border fs_emu_toggle_zoom(1); } else if (key_code == FS_ML_KEY_M) { fs_emu_volume_control(-1); } else if (key_code == FS_ML_KEY_COMMA) { fs_emu_volume_control(-2); } else if (key_code == FS_ML_KEY_PERIOD) { fs_emu_volume_control(-3); } else if (key_code == FS_ML_KEY_P) { fs_emu_pause(!fs_emu_is_paused()); } else if (key_code == FS_ML_KEY_W) { // FIXME: UAE-specific, must be moved out of libfsemu fs_emu_queue_input_event(0x00010000 | 274); } else if (g_hotkey_function != NULL) { g_hotkey_function(key_code, key_mod); } } } if (special || key_code == FS_ML_KEY_F11 || key_code == FS_ML_KEY_F12) { return 1; } if (key_code == FS_ML_KEY_TAB && !fs_emu_hud_in_chat_mode() && !fs_emu_menu_or_dialog_is_active()) { if (key_mod == 0 && fs_emu_netplay_enabled()) { if (state) { fs_emu_hud_enable_chat_mode(); } return 1; } } if (key_code == FS_ML_KEY_F10) { if (key_mod & FS_ML_KEY_MOD_CTRL) { if (state) { g_fs_emu_video_debug = !g_fs_emu_video_debug; } return 1; } } else if (key_code == FS_ML_KEY_F9) { if (key_mod & FS_ML_KEY_MOD_CTRL) { if (state) { if (g_fs_emu_benchmark_start_time == 0) { g_fs_emu_benchmark_start_time = fs_emu_monotonic_time(); } } return 1; } } /* else if (key_code == FS_ML_KEY_F11) { if (state) { if (key_mod & FS_ML_KEY_MOD_SHIFT) { fs_emu_toggle_zoom(1); } else if (key_mod & FS_ML_KEY_MOD_ALT) { } else if (key_mod & FS_ML_KEY_MOD_CTRL) { } else { fs_emu_toggle_zoom(0); } } } */ else if (key_code == FS_ML_KEY_F12) { if (state) { if (key_mod & FS_ML_KEY_MOD_CTRL) { } else if (key_mod & FS_ML_KEY_MOD_ALT) { } else if (key_mod & FS_ML_KEY_MOD_SHIFT) { fs_emu_grab_input(!fs_emu_has_input_grab()); } else { fs_emu_menu_toggle(); } } return 1; } else if (key_code == FS_ML_KEY_PRINT) { if (state) { fs_log("printscreen pressed\n"); g_fs_emu_screenshot = 1; } return 1; } else if (key_code == FS_ML_KEY_PAUSE) { if (state) { fs_emu_pause(!fs_emu_is_paused()); } } else if (fs_emu_hud_in_chat_mode() && !fs_emu_menu_or_dialog_is_active()) { if (state) { fs_emu_hud_handle_chat_input(event); } return 1; } return 0; } static int g_middle_click_ungrab = 1; static int g_swap_ctrl_keys = 0; static int g_fs_emu_mouse_speed = 100; #define MAX_MICE 2 #define MAX_MICE_AXES 2 static void adjust_mouse_movement(int mouse, int axis, int *movement) { static double fract[MAX_MICE][MAX_MICE_AXES]; double d = *movement * g_fs_emu_mouse_speed / 100.0; int v = (int)d; fract[mouse][axis] += d - v; int diff = (int) fract[mouse][axis]; v += diff; fract[mouse][axis] -= diff; *movement = v; } static int input_function(fs_ml_event *event) { if (event->type == FS_ML_MOUSEMOTION) { if (g_ignore_next_motion) { g_ignore_next_motion = 0; return 1; } //fs_log("motion %d %d %d %d\n", event->motion.x, event->motion.xrel, // event->motion.y, event->motion.yrel); if (fs_emu_has_input_grab() == FALSE) { fs_emu_show_pointer_msec(FS_EMU_MOUSE_DEFAULT_DURATION); } if (event->motion.xrel) { //printf("xrel %d x %d\n", event->motion.xrel, event->motion.x); int input_event = g_input_action_table[mouse_index(1, 0, 0)]; //printf("x input_event %d\n", input_event); int movement = event->motion.xrel; adjust_mouse_movement(0, 0, &movement); if (input_event > 0) { int state = MAX(-128, MIN(127, movement)); input_event = input_event | (state << 16); input_event = input_event & 0x00ffffff; fs_emu_queue_input_event(input_event); } } if (event->motion.yrel) { int input_event = g_input_action_table[mouse_index(0, 1, 0)]; int movement = event->motion.yrel; adjust_mouse_movement(0, 1, &movement); if (input_event > 0) { int state = MAX(-128, MIN(127, movement)); input_event = input_event | (state << 16); input_event = input_event & 0x00ffffff; fs_emu_queue_input_event(input_event); } } } else if (event->type == FS_ML_KEYDOWN || event->type == FS_ML_KEYUP) { if (g_swap_ctrl_keys) { if (event->key.keysym.sym == FS_ML_KEY_LCTRL) { event->key.keysym.sym = FS_ML_KEY_RCTRL; } else if (event->key.keysym.sym == FS_ML_KEY_RCTRL) { event->key.keysym.sym = FS_ML_KEY_LCTRL; } } if (handle_shortcut(event)) { return 1; } else if (fs_emu_process_key_event(event->key.keysym.sym, event->key.keysym.mod, event->type == FS_ML_KEYDOWN)) { return 1; } } /* else if (event->type == FS_ML_KEYUP) { // FIXME: key depress is sent to Amiga for key presses which // are processed by chat... if (fs_emu_process_key_event(event->key.keysym.sym, event->key.keysym.mod, event->type == FS_ML_KEYDOWN)) { return 1; } } */ else if (event->type == FS_ML_MOUSEBUTTONDOWN || event->type == FS_ML_MOUSEBUTTONUP) { if (event->type == FS_ML_MOUSEBUTTONDOWN) { //printf("mouse button down\n"); if (fs_emu_has_input_grab()) { if (event->button.button == FS_ML_BUTTON_MIDDLE) { if (g_middle_click_ungrab) { fs_emu_grab_input(0); } } } else { if (fs_ml_has_automatic_input_grab()) { fs_emu_grab_input(1); } } } int state = event->button.state; if (event->button.button == FS_ML_BUTTON_WHEELUP) { state = state * 1; } else if (event->button.button == FS_ML_BUTTON_WHEELDOWN) { state = state * -1; } int input_event = g_input_action_table[mouse_index( 0, 0, event->button.button)]; //printf("mouse button %d, %d\n", event->button.button, state); //printf("button input_event %d\n", input_event); if (input_event > 0) { input_event = input_event | (state << 16); input_event = input_event & 0x00ffffff; fs_emu_queue_input_event(input_event); } } //printf("calling process_input_event\n"); return process_input_event(event); } void fs_emu_input_init() { fs_log("fs_emu_input_init\n"); g_debug_input = getenv("FS_DEBUG_INPUT") && \ getenv("FS_DEBUG_INPUT")[0] == '1'; g_input_event_mutex = fs_mutex_create(); g_input_event_queue = fs_queue_new(); init_input_configs(); // reset all input mappings for (int i = 0; i < (MAX_DEVICES * SLOTS); i++) { g_input_action_table[i] = 0; g_menu_action_table[i] = 0; } if (fs_config_get_boolean("middle_click_ungrab") == 0) { g_middle_click_ungrab = 0; } g_fs_emu_mouse_speed = fs_config_get_int("mouse_speed"); if (g_fs_emu_mouse_speed <= 0 || g_fs_emu_mouse_speed > 500) { g_fs_emu_mouse_speed = 100; } g_swap_ctrl_keys = fs_config_get_boolean("swap_ctrl_keys"); if (g_swap_ctrl_keys == FS_CONFIG_NONE) { g_swap_ctrl_keys = 0; } fs_log("initializing devices for menu\n"); fs_ml_input_device device; for (int i = 0; i < FS_ML_INPUT_DEVICES_MAX; i++) { if (!fs_ml_input_device_get(i, &device)) { continue; } fs_log("%i %s\n", i, device.name); char *config_name = joystick_long_config_name(&device); input_config_item *config = get_config_for_device(config_name, "menu"); if (config == NULL) { fs_log("did not find menu config for device \"%s\"\n", config_name); free(config_name); config_name = joystick_config_name(device.name, 0); config = get_config_for_device(config_name, "menu"); if (config == NULL) { fs_log("did not find menu config for device \"%s\"\n", config_name); } } if (config != NULL) { int start_index = 0; int select_index = 0; int action, index; for (int j = 0; config[j].config_key != NULL; j++) { if (map_joystick(i, config + j, g_menu_mapping, g_menu_action_table, &action, &index)) { if (action == ACTION_MENU_START) { start_index = index; } else if (action == ACTION_MENU_SELECT) { select_index = index; } } } if (start_index && select_index) { // register menu button emulation g_menu_action_corresponding[start_index] = select_index; g_menu_action_corresponding[select_index] = start_index; } free_input_config_item_list(config); } free(config_name); } fs_ml_set_input_function(input_function); } fs-uae-2.2.3+dfsg/libfsemu/src/emu/actions.h0000644000175000017500000000033712162366654021053 0ustar glaubitzglaubitz#ifndef LIBFSEMU_ACTIONS_H_ #define LIBFSEMU_ACTIONS_H_ #define FS_EMU_ACTION_TAUNT 0xc001 #define FS_EMU_ACTION_SCREENSHOT 0xc002 void fs_emu_handle_libfsemu_action(int action, int state); #endif // LIBFSEMU_ACTIONS_H_ fs-uae-2.2.3+dfsg/libfsemu/src/emu/hud.c0000644000175000017500000002343412162366654020171 0ustar glaubitzglaubitz/* libfsemu - a library with emulator support functions * Copyright (C) 2011 Frode Solheim * * This library is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 of the License, or (at * your option) any later version. * * This library is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #include "hud.h" #include #include #include #include #include #include #include "libfsemu.h" #include "render.h" #include "menu.h" #include "font.h" #ifdef USE_OPENGL #include #endif #define MAX_VISIBLE_TIME (10 * 1000 * 1000) #define DEFAULT_DURATION (10 * 1000 * 1000) static int g_notification_duration = DEFAULT_DURATION; char g_fs_emu_chat_string[FS_EMU_MAX_CHAT_STRING_SIZE + 1] = {}; static int g_fs_emu_chat_string_pos = 0; static int g_fs_emu_chat_mode = 0; static int64_t g_last_line_time = 0; int g_fs_emu_hud_mode = 0; typedef struct console_line { int type; int64_t time; int64_t show_until; char *text; } console_line; static fs_queue *g_console_lines = NULL; static fs_mutex *g_console_mutex = NULL; void fs_emu_hud_init(void) { g_console_mutex = fs_mutex_create(); g_console_lines = fs_queue_new(); } void fs_emu_hud_init_after_config(void) { g_notification_duration = fs_config_get_int_clamped( "notification_duration", 0, 60 * 1000); if (g_notification_duration == FS_CONFIG_NONE) { g_notification_duration = DEFAULT_DURATION; } else { g_notification_duration *= 1000; } } int fs_emu_hud_in_chat_mode() { return g_fs_emu_chat_mode; } void fs_emu_hud_enable_chat_mode() { g_fs_emu_chat_mode = 1; g_fs_emu_hud_mode = 1; } void fs_emu_notification(int type, const char *format, ...) { va_list ap; va_start(ap, format); char *buffer = fs_strdup_vprintf(format, ap); va_end(ap); int len = strlen(buffer); // strip trailing newline, if any if (len > 0 && buffer[len - 1] == '\n') { buffer[len - 1] = '\0'; } fs_log("%s\n", buffer); fs_mutex_lock(g_console_mutex); if (type != 0) { console_line *line = fs_queue_peek_head(g_console_lines); if (line && line->type == type) { free(line->text); line->text = buffer; line->time = fs_emu_monotonic_time(); line->show_until = line->time + g_notification_duration; g_last_line_time = MAX(line->show_until, line->show_until); fs_mutex_unlock(g_console_mutex); return; } } console_line *line = malloc(sizeof(console_line)); //printf("new console line at %p\n", line); line->type = type; line->text = buffer; line->time = fs_emu_monotonic_time(); line->show_until = line->time + g_notification_duration; g_last_line_time = MAX(line->show_until, line->show_until); fs_queue_push_head(g_console_lines, line); fs_mutex_unlock(g_console_mutex); } void fs_emu_hud_add_console_line(const char *text, int flags) { console_line *line = malloc(sizeof(console_line)); line->type = 0; line->text = fs_strdup(text); line->time = fs_emu_monotonic_time(); line->show_until = line->time + DEFAULT_DURATION; g_last_line_time = MAX(line->show_until, line->show_until); fs_mutex_lock(g_console_mutex); fs_queue_push_head(g_console_lines, line); fs_mutex_unlock(g_console_mutex); } void fs_emu_hud_add_chat_message(const char *text, const char *player) { char *line; if (text[0] == 1) { line = fs_strdup_printf("* %s taunts: %s", player, text); } else { line = fs_strdup_printf("<%s> %s", player, text); } fs_emu_hud_add_console_line(line, 0); free(line); } void fs_emu_netplay_say(const char *text) { #ifdef WITH_NETPLAY fs_emu_send_netplay_message(text); //char *line = fs_strdup_printf("<%s> %s", // fs_emu_get_netplay_tag(-1), text); //fs_emu_add_console_line(line, 0); //g_free(line); fs_emu_hud_add_chat_message(text, fs_emu_get_netplay_tag(-1)); #endif } static void process_command(const char* text) { if (text[0] == '\0') { return; } fs_log("process_command: %s\n", g_fs_emu_chat_string); if (text[0] != '/') { fs_emu_netplay_say(text); } } int fs_emu_hud_handle_chat_input(fs_emu_event *event) { fs_mutex_lock(g_console_mutex); int key_code = event->key.keysym.sym; if (key_code == FS_ML_KEY_RETURN) { fs_mutex_unlock(g_console_mutex); process_command(g_fs_emu_chat_string); fs_mutex_lock(g_console_mutex); g_fs_emu_chat_string_pos = 0; g_fs_emu_chat_string[g_fs_emu_chat_string_pos] = 0; } else if (key_code == FS_ML_KEY_ESCAPE) { g_fs_emu_chat_mode = 0; g_fs_emu_hud_mode = 0; g_fs_emu_chat_string_pos = 0; g_fs_emu_chat_string[g_fs_emu_chat_string_pos] = 0; } else if (key_code == FS_ML_KEY_TAB) { g_fs_emu_chat_mode = 0; g_fs_emu_hud_mode = 0; // hide all messages when dismissing the hud //g_last_line_time = 0; } else if (key_code == FS_ML_KEY_BACKSPACE) { if (g_fs_emu_chat_string_pos > 0) { g_fs_emu_chat_string_pos--; g_fs_emu_chat_string[g_fs_emu_chat_string_pos] = 0; } } else { //printf("%d\n", event->key.keysym.unicode); if (g_fs_emu_chat_string_pos < FS_EMU_MAX_CHAT_STRING_SIZE - 1 && event->key.keysym.unicode >= 32 && event->key.keysym.unicode < 128) { g_fs_emu_chat_string[g_fs_emu_chat_string_pos] = (char) event->key.keysym.unicode; g_fs_emu_chat_string_pos++; g_fs_emu_chat_string[g_fs_emu_chat_string_pos] = '\0'; } } //fs_log("chat: %s\n", g_fs_emu_chat_string); fs_mutex_unlock(g_console_mutex); return 1; } #define MAX_VISIBLE_LINES 12 void fs_emu_hud_render_chat() { fs_list *link; int k; //fs_emu_assert_gui_lock(); fs_mutex_lock(g_console_mutex); int64_t now = fs_emu_monotonic_time(); int64_t time_diff = now - g_last_line_time; //if (time_diff > MAX_VISIBLE_TIME && !g_fs_emu_chat_mode) { if (time_diff >= 0 && !g_fs_emu_chat_mode) { fs_mutex_unlock(g_console_mutex); return; } // FIXME: IMPLEMENT A MAX NUMBER OF LINES // FIXME: IMPLEMENT SCROLLING / PAGE_UP / PAGE DOWN /* int total_height = 0; GList *link = g_queue_peek_head_link(g_console_lines); int k = 0; while (link) { console_line *line = (console_line *) link->data; total_height += 40; GList* link2 = link; link = link->next; k++; //g_queue_delete_link(g_console_lines, link2); if (k == MAX_VISIBLE_LINES) { break; } } */ /* if (total_height == 0 && !g_fs_emu_chat_mode) { return; } */ fs_gl_ortho_hd(); #if 0 fs_gl_blending(1); fs_gl_texturing(0); if (total_height > 0) { fs_gl_color4f(0.0, 0.0, 0.0, 0.5); glBegin(GL_QUADS); glVertex2f(0, 60); glVertex2f(1920, 60); glVertex2f(1920, 60 + total_height); glVertex2f(0, 60 + total_height); glEnd(); glBegin(GL_QUADS); glVertex2f(0, 60 + total_height); glVertex2f(1920, 60 + total_height); fs_gl_color4f(0.0, 0.0, 0.0, 0.0); glVertex2f(1920, 60 + total_height + 50); glVertex2f(0, 60 + total_height + 50); glEnd(); } fs_gl_color4f(0.0, 0.0, 0.0, 0.0); glBegin(GL_QUADS); glVertex2f(0, 0); glVertex2f(1920, 0); fs_gl_color4f(0.0, 0.0, 0.0, 0.5); glVertex2f(1920, 60); glVertex2f(0, 60); glEnd(); #endif if (g_fs_emu_chat_mode) { fs_gl_blending(1); fs_gl_texturing(0); fs_gl_color4f(0.0, 0.3, 0.5, 0.75); #ifdef USE_GLES GLfloat vert[] = { 0, 0, 1920, 0, 1920, 60, 0, 60 }; glEnableClientState(GL_VERTEX_ARRAY); glVertexPointer(2, GL_FLOAT, 0, vert); glDrawArrays(GL_TRIANGLE_FAN, 0, 4); glDisableClientState(GL_VERTEX_ARRAY); #else glBegin(GL_QUADS); glVertex2f(0, 0); glVertex2f(1920, 0); glVertex2f(1920, 60); glVertex2f(0, 60); glEnd(); #endif } fs_emu_font *font = fs_emu_font_get_menu(); int tx; int ty; int tw; if (g_fs_emu_chat_mode) { tx = 65; ty = 13; tw = fs_emu_font_render(font, "Input:", tx, ty, 1.0, 1.0, 1.0, 1.0); tx += tw + 20; fs_emu_font_render(font, g_fs_emu_chat_string, tx, ty, 1.0, 1.0, 1.0, 1.0); } tx = 65; ty = 65; link = fs_queue_peek_head_link(g_console_lines); k = 0; while (link) { console_line *line = (console_line *) link->data; if (!g_fs_emu_chat_mode && now - line->time > MAX_VISIBLE_TIME) { // when not in chat mode, only show lines for a brief period // of time break; } fs_emu_font_render_with_outline(font, line->text, tx, ty, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.5, 2.0); ty += 40; link = link->next; k++; if (k == MAX_VISIBLE_LINES) { break; } } fs_mutex_unlock(g_console_mutex); } fs-uae-2.2.3+dfsg/libfsemu/src/lua/0000755000175000017500000000000012162366654017232 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/libfsemu/src/lua/lparser.h0000644000175000017500000000640012162366654021053 0ustar glaubitzglaubitz/* ** $Id: lparser.h,v 1.70 2012/05/08 13:53:33 roberto Exp $ ** Lua Parser ** See Copyright Notice in lua.h */ #ifndef lparser_h #define lparser_h #include "llimits.h" #include "lobject.h" #include "lzio.h" /* ** Expression descriptor */ typedef enum { VVOID, /* no value */ VNIL, VTRUE, VFALSE, VK, /* info = index of constant in `k' */ VKNUM, /* nval = numerical value */ VNONRELOC, /* info = result register */ VLOCAL, /* info = local register */ VUPVAL, /* info = index of upvalue in 'upvalues' */ VINDEXED, /* t = table register/upvalue; idx = index R/K */ VJMP, /* info = instruction pc */ VRELOCABLE, /* info = instruction pc */ VCALL, /* info = instruction pc */ VVARARG /* info = instruction pc */ } expkind; #define vkisvar(k) (VLOCAL <= (k) && (k) <= VINDEXED) #define vkisinreg(k) ((k) == VNONRELOC || (k) == VLOCAL) typedef struct expdesc { expkind k; union { struct { /* for indexed variables (VINDEXED) */ short idx; /* index (R/K) */ lu_byte t; /* table (register or upvalue) */ lu_byte vt; /* whether 't' is register (VLOCAL) or upvalue (VUPVAL) */ } ind; int info; /* for generic use */ lua_Number nval; /* for VKNUM */ } u; int t; /* patch list of `exit when true' */ int f; /* patch list of `exit when false' */ } expdesc; /* description of active local variable */ typedef struct Vardesc { short idx; /* variable index in stack */ } Vardesc; /* description of pending goto statements and label statements */ typedef struct Labeldesc { TString *name; /* label identifier */ int pc; /* position in code */ int line; /* line where it appeared */ lu_byte nactvar; /* local level where it appears in current block */ } Labeldesc; /* list of labels or gotos */ typedef struct Labellist { Labeldesc *arr; /* array */ int n; /* number of entries in use */ int size; /* array size */ } Labellist; /* dynamic structures used by the parser */ typedef struct Dyndata { struct { /* list of active local variables */ Vardesc *arr; int n; int size; } actvar; Labellist gt; /* list of pending gotos */ Labellist label; /* list of active labels */ } Dyndata; /* control of blocks */ struct BlockCnt; /* defined in lparser.c */ /* state needed to generate code for a given function */ typedef struct FuncState { Proto *f; /* current function header */ Table *h; /* table to find (and reuse) elements in `k' */ struct FuncState *prev; /* enclosing function */ struct LexState *ls; /* lexical state */ struct BlockCnt *bl; /* chain of current blocks */ int pc; /* next position to code (equivalent to `ncode') */ int lasttarget; /* 'label' of last 'jump label' */ int jpc; /* list of pending jumps to `pc' */ int nk; /* number of elements in `k' */ int np; /* number of elements in `p' */ int firstlocal; /* index of first local var (in Dyndata array) */ short nlocvars; /* number of elements in 'f->locvars' */ lu_byte nactvar; /* number of active local variables */ lu_byte nups; /* number of upvalues */ lu_byte freereg; /* first free register */ } FuncState; LUAI_FUNC Closure *luaY_parser (lua_State *L, ZIO *z, Mbuffer *buff, Dyndata *dyd, const char *name, int firstchar); #endif fs-uae-2.2.3+dfsg/libfsemu/src/lua/luac.c0000644000175000017500000002335212162366654020327 0ustar glaubitzglaubitz/* ** $Id: luac.c,v 1.69 2011/11/29 17:46:33 lhf Exp $ ** Lua compiler (saves bytecodes to files; also list bytecodes) ** See Copyright Notice in lua.h */ #include #include #include #include #define luac_c #define LUA_CORE #include "lua.h" #include "lauxlib.h" #include "lobject.h" #include "lstate.h" #include "lundump.h" static void PrintFunction(const Proto* f, int full); #define luaU_print PrintFunction #define PROGNAME "luac" /* default program name */ #define OUTPUT PROGNAME ".out" /* default output file */ static int listing=0; /* list bytecodes? */ static int dumping=1; /* dump bytecodes? */ static int stripping=0; /* strip debug information? */ static char Output[]={ OUTPUT }; /* default output file name */ static const char* output=Output; /* actual output file name */ static const char* progname=PROGNAME; /* actual program name */ static void fatal(const char* message) { fprintf(stderr,"%s: %s\n",progname,message); exit(EXIT_FAILURE); } static void cannot(const char* what) { fprintf(stderr,"%s: cannot %s %s: %s\n",progname,what,output,strerror(errno)); exit(EXIT_FAILURE); } static void usage(const char* message) { if (*message=='-') fprintf(stderr,"%s: unrecognized option " LUA_QS "\n",progname,message); else fprintf(stderr,"%s: %s\n",progname,message); fprintf(stderr, "usage: %s [options] [filenames]\n" "Available options are:\n" " -l list (use -l -l for full listing)\n" " -o name output to file " LUA_QL("name") " (default is \"%s\")\n" " -p parse only\n" " -s strip debug information\n" " -v show version information\n" " -- stop handling options\n" " - stop handling options and process stdin\n" ,progname,Output); exit(EXIT_FAILURE); } #define IS(s) (strcmp(argv[i],s)==0) static int doargs(int argc, char* argv[]) { int i; int version=0; if (argv[0]!=NULL && *argv[0]!=0) progname=argv[0]; for (i=1; itop+(i)) static const Proto* combine(lua_State* L, int n) { if (n==1) return toproto(L,-1); else { Proto* f; int i=n; if (lua_load(L,reader,&i,"=(" PROGNAME ")",NULL)!=LUA_OK) fatal(lua_tostring(L,-1)); f=toproto(L,-1); for (i=0; ip[i]=toproto(L,i-n-1); if (f->p[i]->sizeupvalues>0) f->p[i]->upvalues[0].instack=0; } f->sizelineinfo=0; return f; } } static int writer(lua_State* L, const void* p, size_t size, void* u) { UNUSED(L); return (fwrite(p,size,1,(FILE*)u)!=1) && (size!=0); } static int pmain(lua_State* L) { int argc=(int)lua_tointeger(L,1); char** argv=(char**)lua_touserdata(L,2); const Proto* f; int i; if (!lua_checkstack(L,argc)) fatal("too many input files"); for (i=0; i1); if (dumping) { FILE* D= (output==NULL) ? stdout : fopen(output,"wb"); if (D==NULL) cannot("open"); lua_lock(L); luaU_dump(L,f,writer,D,stripping); lua_unlock(L); if (ferror(D)) cannot("write"); if (fclose(D)) cannot("close"); } return 0; } int main(int argc, char* argv[]) { lua_State* L; int i=doargs(argc,argv); argc-=i; argv+=i; if (argc<=0) usage("no input files given"); L=luaL_newstate(); if (L==NULL) fatal("cannot create state: not enough memory"); lua_pushcfunction(L,&pmain); lua_pushinteger(L,argc); lua_pushlightuserdata(L,argv); if (lua_pcall(L,2,0,0)!=LUA_OK) fatal(lua_tostring(L,-1)); lua_close(L); return EXIT_SUCCESS; } /* ** $Id: print.c,v 1.68 2011/09/30 10:21:20 lhf Exp $ ** print bytecodes ** See Copyright Notice in lua.h */ #include #include #define luac_c #define LUA_CORE #include "ldebug.h" #include "lobject.h" #include "lopcodes.h" #define VOID(p) ((const void*)(p)) static void PrintString(const TString* ts) { const char* s=getstr(ts); size_t i,n=ts->tsv.len; printf("%c",'"'); for (i=0; ik[i]; switch (ttype(o)) { case LUA_TNIL: printf("nil"); break; case LUA_TBOOLEAN: printf(bvalue(o) ? "true" : "false"); break; case LUA_TNUMBER: printf(LUA_NUMBER_FMT,nvalue(o)); break; case LUA_TSTRING: PrintString(rawtsvalue(o)); break; default: /* cannot happen */ printf("? type=%d",ttype(o)); break; } } #define UPVALNAME(x) ((f->upvalues[x].name) ? getstr(f->upvalues[x].name) : "-") #define MYK(x) (-1-(x)) static void PrintCode(const Proto* f) { const Instruction* code=f->code; int pc,n=f->sizecode; for (pc=0; pc0) printf("[%d]\t",line); else printf("[-]\t"); printf("%-9s\t",luaP_opnames[o]); switch (getOpMode(o)) { case iABC: printf("%d",a); if (getBMode(o)!=OpArgN) printf(" %d",ISK(b) ? (MYK(INDEXK(b))) : b); if (getCMode(o)!=OpArgN) printf(" %d",ISK(c) ? (MYK(INDEXK(c))) : c); break; case iABx: printf("%d",a); if (getBMode(o)==OpArgK) printf(" %d",MYK(bx)); if (getBMode(o)==OpArgU) printf(" %d",bx); break; case iAsBx: printf("%d %d",a,sbx); break; case iAx: printf("%d",MYK(ax)); break; } switch (o) { case OP_LOADK: printf("\t; "); PrintConstant(f,bx); break; case OP_GETUPVAL: case OP_SETUPVAL: printf("\t; %s",UPVALNAME(b)); break; case OP_GETTABUP: printf("\t; %s",UPVALNAME(b)); if (ISK(c)) { printf(" "); PrintConstant(f,INDEXK(c)); } break; case OP_SETTABUP: printf("\t; %s",UPVALNAME(a)); if (ISK(b)) { printf(" "); PrintConstant(f,INDEXK(b)); } if (ISK(c)) { printf(" "); PrintConstant(f,INDEXK(c)); } break; case OP_GETTABLE: case OP_SELF: if (ISK(c)) { printf("\t; "); PrintConstant(f,INDEXK(c)); } break; case OP_SETTABLE: case OP_ADD: case OP_SUB: case OP_MUL: case OP_DIV: case OP_POW: case OP_EQ: case OP_LT: case OP_LE: if (ISK(b) || ISK(c)) { printf("\t; "); if (ISK(b)) PrintConstant(f,INDEXK(b)); else printf("-"); printf(" "); if (ISK(c)) PrintConstant(f,INDEXK(c)); else printf("-"); } break; case OP_JMP: case OP_FORLOOP: case OP_FORPREP: case OP_TFORLOOP: printf("\t; to %d",sbx+pc+2); break; case OP_CLOSURE: printf("\t; %p",VOID(f->p[bx])); break; case OP_SETLIST: if (c==0) printf("\t; %d",(int)code[++pc]); else printf("\t; %d",c); break; case OP_EXTRAARG: printf("\t; "); PrintConstant(f,ax); break; default: break; } printf("\n"); } } #define SS(x) ((x==1)?"":"s") #define S(x) (int)(x),SS(x) static void PrintHeader(const Proto* f) { const char* s=f->source ? getstr(f->source) : "=?"; if (*s=='@' || *s=='=') s++; else if (*s==LUA_SIGNATURE[0]) s="(bstring)"; else s="(string)"; printf("\n%s <%s:%d,%d> (%d instruction%s at %p)\n", (f->linedefined==0)?"main":"function",s, f->linedefined,f->lastlinedefined, S(f->sizecode),VOID(f)); printf("%d%s param%s, %d slot%s, %d upvalue%s, ", (int)(f->numparams),f->is_vararg?"+":"",SS(f->numparams), S(f->maxstacksize),S(f->sizeupvalues)); printf("%d local%s, %d constant%s, %d function%s\n", S(f->sizelocvars),S(f->sizek),S(f->sizep)); } static void PrintDebug(const Proto* f) { int i,n; n=f->sizek; printf("constants (%d) for %p:\n",n,VOID(f)); for (i=0; isizelocvars; printf("locals (%d) for %p:\n",n,VOID(f)); for (i=0; ilocvars[i].varname),f->locvars[i].startpc+1,f->locvars[i].endpc+1); } n=f->sizeupvalues; printf("upvalues (%d) for %p:\n",n,VOID(f)); for (i=0; iupvalues[i].instack,f->upvalues[i].idx); } } static void PrintFunction(const Proto* f, int full) { int i,n=f->sizep; PrintHeader(f); PrintCode(f); if (full) PrintDebug(f); for (i=0; ip[i],full); } fs-uae-2.2.3+dfsg/libfsemu/src/lua/lcorolib.c0000644000175000017500000000675412162366654021217 0ustar glaubitzglaubitz/* ** $Id: lcorolib.c,v 1.4 2012/04/27 18:59:04 roberto Exp $ ** Coroutine Library ** See Copyright Notice in lua.h */ #include #define lcorolib_c #define LUA_LIB #include "lua.h" #include "lauxlib.h" #include "lualib.h" static int auxresume (lua_State *L, lua_State *co, int narg) { int status; if (!lua_checkstack(co, narg)) { lua_pushliteral(L, "too many arguments to resume"); return -1; /* error flag */ } if (lua_status(co) == LUA_OK && lua_gettop(co) == 0) { lua_pushliteral(L, "cannot resume dead coroutine"); return -1; /* error flag */ } lua_xmove(L, co, narg); status = lua_resume(co, L, narg); if (status == LUA_OK || status == LUA_YIELD) { int nres = lua_gettop(co); if (!lua_checkstack(L, nres + 1)) { lua_pop(co, nres); /* remove results anyway */ lua_pushliteral(L, "too many results to resume"); return -1; /* error flag */ } lua_xmove(co, L, nres); /* move yielded values */ return nres; } else { lua_xmove(co, L, 1); /* move error message */ return -1; /* error flag */ } } static int luaB_coresume (lua_State *L) { lua_State *co = lua_tothread(L, 1); int r; luaL_argcheck(L, co, 1, "coroutine expected"); r = auxresume(L, co, lua_gettop(L) - 1); if (r < 0) { lua_pushboolean(L, 0); lua_insert(L, -2); return 2; /* return false + error message */ } else { lua_pushboolean(L, 1); lua_insert(L, -(r + 1)); return r + 1; /* return true + `resume' returns */ } } static int luaB_auxwrap (lua_State *L) { lua_State *co = lua_tothread(L, lua_upvalueindex(1)); int r = auxresume(L, co, lua_gettop(L)); if (r < 0) { if (lua_isstring(L, -1)) { /* error object is a string? */ luaL_where(L, 1); /* add extra info */ lua_insert(L, -2); lua_concat(L, 2); } lua_error(L); /* propagate error */ } return r; } static int luaB_cocreate (lua_State *L) { lua_State *NL; luaL_checktype(L, 1, LUA_TFUNCTION); NL = lua_newthread(L); lua_pushvalue(L, 1); /* move function to top */ lua_xmove(L, NL, 1); /* move function from L to NL */ return 1; } static int luaB_cowrap (lua_State *L) { luaB_cocreate(L); lua_pushcclosure(L, luaB_auxwrap, 1); return 1; } static int luaB_yield (lua_State *L) { return lua_yield(L, lua_gettop(L)); } static int luaB_costatus (lua_State *L) { lua_State *co = lua_tothread(L, 1); luaL_argcheck(L, co, 1, "coroutine expected"); if (L == co) lua_pushliteral(L, "running"); else { switch (lua_status(co)) { case LUA_YIELD: lua_pushliteral(L, "suspended"); break; case LUA_OK: { lua_Debug ar; if (lua_getstack(co, 0, &ar) > 0) /* does it have frames? */ lua_pushliteral(L, "normal"); /* it is running */ else if (lua_gettop(co) == 0) lua_pushliteral(L, "dead"); else lua_pushliteral(L, "suspended"); /* initial state */ break; } default: /* some error occurred */ lua_pushliteral(L, "dead"); break; } } return 1; } static int luaB_corunning (lua_State *L) { int ismain = lua_pushthread(L); lua_pushboolean(L, ismain); return 2; } static const luaL_Reg co_funcs[] = { {"create", luaB_cocreate}, {"resume", luaB_coresume}, {"running", luaB_corunning}, {"status", luaB_costatus}, {"wrap", luaB_cowrap}, {"yield", luaB_yield}, {NULL, NULL} }; LUAMOD_API int luaopen_coroutine (lua_State *L) { luaL_newlib(L, co_funcs); return 1; } fs-uae-2.2.3+dfsg/libfsemu/src/lua/lobject.c0000644000175000017500000001734212162366654021027 0ustar glaubitzglaubitz/* ** $Id: lobject.c,v 2.55 2011/11/30 19:30:16 roberto Exp $ ** Some generic functions over Lua objects ** See Copyright Notice in lua.h */ #include #include #include #include #define lobject_c #define LUA_CORE #include "lua.h" #include "lctype.h" #include "ldebug.h" #include "ldo.h" #include "lmem.h" #include "lobject.h" #include "lstate.h" #include "lstring.h" #include "lvm.h" LUAI_DDEF const TValue luaO_nilobject_ = {NILCONSTANT}; /* ** converts an integer to a "floating point byte", represented as ** (eeeeexxx), where the real value is (1xxx) * 2^(eeeee - 1) if ** eeeee != 0 and (xxx) otherwise. */ int luaO_int2fb (unsigned int x) { int e = 0; /* exponent */ if (x < 8) return x; while (x >= 0x10) { x = (x+1) >> 1; e++; } return ((e+1) << 3) | (cast_int(x) - 8); } /* converts back */ int luaO_fb2int (int x) { int e = (x >> 3) & 0x1f; if (e == 0) return x; else return ((x & 7) + 8) << (e - 1); } int luaO_ceillog2 (unsigned int x) { static const lu_byte log_2[256] = { 0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8 }; int l = 0; x--; while (x >= 256) { l += 8; x >>= 8; } return l + log_2[x]; } lua_Number luaO_arith (int op, lua_Number v1, lua_Number v2) { switch (op) { case LUA_OPADD: return luai_numadd(NULL, v1, v2); case LUA_OPSUB: return luai_numsub(NULL, v1, v2); case LUA_OPMUL: return luai_nummul(NULL, v1, v2); case LUA_OPDIV: return luai_numdiv(NULL, v1, v2); case LUA_OPMOD: return luai_nummod(NULL, v1, v2); case LUA_OPPOW: return luai_numpow(NULL, v1, v2); case LUA_OPUNM: return luai_numunm(NULL, v1); default: lua_assert(0); return 0; } } int luaO_hexavalue (int c) { if (lisdigit(c)) return c - '0'; else return ltolower(c) - 'a' + 10; } #if !defined(lua_strx2number) #include static int isneg (const char **s) { if (**s == '-') { (*s)++; return 1; } else if (**s == '+') (*s)++; return 0; } static lua_Number readhexa (const char **s, lua_Number r, int *count) { for (; lisxdigit(cast_uchar(**s)); (*s)++) { /* read integer part */ r = (r * 16.0) + cast_num(luaO_hexavalue(cast_uchar(**s))); (*count)++; } return r; } /* ** convert an hexadecimal numeric string to a number, following ** C99 specification for 'strtod' */ static lua_Number lua_strx2number (const char *s, char **endptr) { lua_Number r = 0.0; int e = 0, i = 0; int neg = 0; /* 1 if number is negative */ *endptr = cast(char *, s); /* nothing is valid yet */ while (lisspace(cast_uchar(*s))) s++; /* skip initial spaces */ neg = isneg(&s); /* check signal */ if (!(*s == '0' && (*(s + 1) == 'x' || *(s + 1) == 'X'))) /* check '0x' */ return 0.0; /* invalid format (no '0x') */ s += 2; /* skip '0x' */ r = readhexa(&s, r, &i); /* read integer part */ if (*s == '.') { s++; /* skip dot */ r = readhexa(&s, r, &e); /* read fractional part */ } if (i == 0 && e == 0) return 0.0; /* invalid format (no digit) */ e *= -4; /* each fractional digit divides value by 2^-4 */ *endptr = cast(char *, s); /* valid up to here */ if (*s == 'p' || *s == 'P') { /* exponent part? */ int exp1 = 0; int neg1; s++; /* skip 'p' */ neg1 = isneg(&s); /* signal */ if (!lisdigit(cast_uchar(*s))) goto ret; /* must have at least one digit */ while (lisdigit(cast_uchar(*s))) /* read exponent */ exp1 = exp1 * 10 + *(s++) - '0'; if (neg1) exp1 = -exp1; e += exp1; } *endptr = cast(char *, s); /* valid up to here */ ret: if (neg) r = -r; return ldexp(r, e); } #endif int luaO_str2d (const char *s, size_t len, lua_Number *result) { char *endptr; if (strpbrk(s, "nN")) /* reject 'inf' and 'nan' */ return 0; else if (strpbrk(s, "xX")) /* hexa? */ *result = lua_strx2number(s, &endptr); else *result = lua_str2number(s, &endptr); if (endptr == s) return 0; /* nothing recognized */ while (lisspace(cast_uchar(*endptr))) endptr++; return (endptr == s + len); /* OK if no trailing characters */ } static void pushstr (lua_State *L, const char *str, size_t l) { setsvalue2s(L, L->top, luaS_newlstr(L, str, l)); incr_top(L); } /* this function handles only `%d', `%c', %f, %p, and `%s' formats */ const char *luaO_pushvfstring (lua_State *L, const char *fmt, va_list argp) { int n = 0; for (;;) { const char *e = strchr(fmt, '%'); if (e == NULL) break; setsvalue2s(L, L->top, luaS_newlstr(L, fmt, e-fmt)); incr_top(L); switch (*(e+1)) { case 's': { const char *s = va_arg(argp, char *); if (s == NULL) s = "(null)"; pushstr(L, s, strlen(s)); break; } case 'c': { char buff; buff = cast(char, va_arg(argp, int)); pushstr(L, &buff, 1); break; } case 'd': { setnvalue(L->top, cast_num(va_arg(argp, int))); incr_top(L); break; } case 'f': { setnvalue(L->top, cast_num(va_arg(argp, l_uacNumber))); incr_top(L); break; } case 'p': { char buff[4*sizeof(void *) + 8]; /* should be enough space for a `%p' */ int l = sprintf(buff, "%p", va_arg(argp, void *)); pushstr(L, buff, l); break; } case '%': { pushstr(L, "%", 1); break; } default: { luaG_runerror(L, "invalid option " LUA_QL("%%%c") " to " LUA_QL("lua_pushfstring"), *(e + 1)); } } n += 2; fmt = e+2; } pushstr(L, fmt, strlen(fmt)); if (n > 0) luaV_concat(L, n + 1); return svalue(L->top - 1); } const char *luaO_pushfstring (lua_State *L, const char *fmt, ...) { const char *msg; va_list argp; va_start(argp, fmt); msg = luaO_pushvfstring(L, fmt, argp); va_end(argp); return msg; } /* number of chars of a literal string without the ending \0 */ #define LL(x) (sizeof(x)/sizeof(char) - 1) #define RETS "..." #define PRE "[string \"" #define POS "\"]" #define addstr(a,b,l) ( memcpy(a,b,(l) * sizeof(char)), a += (l) ) void luaO_chunkid (char *out, const char *source, size_t bufflen) { size_t l = strlen(source); if (*source == '=') { /* 'literal' source */ if (l <= bufflen) /* small enough? */ memcpy(out, source + 1, l * sizeof(char)); else { /* truncate it */ addstr(out, source + 1, bufflen - 1); *out = '\0'; } } else if (*source == '@') { /* file name */ if (l <= bufflen) /* small enough? */ memcpy(out, source + 1, l * sizeof(char)); else { /* add '...' before rest of name */ addstr(out, RETS, LL(RETS)); bufflen -= LL(RETS); memcpy(out, source + 1 + l - bufflen, bufflen * sizeof(char)); } } else { /* string; format as [string "source"] */ const char *nl = strchr(source, '\n'); /* find first new line (if any) */ addstr(out, PRE, LL(PRE)); /* add prefix */ bufflen -= LL(PRE RETS POS) + 1; /* save space for prefix+suffix+'\0' */ if (l < bufflen && nl == NULL) { /* small one-line source? */ addstr(out, source, l); /* keep it */ } else { if (nl != NULL) l = nl - source; /* stop at first newline */ if (l > bufflen) l = bufflen; addstr(out, source, l); addstr(out, RETS, LL(RETS)); } memcpy(out, POS, (LL(POS) + 1) * sizeof(char)); } } fs-uae-2.2.3+dfsg/libfsemu/src/lua/lmem.h0000644000175000017500000000303112162366654020332 0ustar glaubitzglaubitz/* ** $Id: lmem.h,v 1.38 2011/12/02 13:26:54 roberto Exp $ ** Interface to Memory Manager ** See Copyright Notice in lua.h */ #ifndef lmem_h #define lmem_h #include #include "llimits.h" #include "lua.h" #define luaM_reallocv(L,b,on,n,e) \ ((cast(size_t, (n)+1) > MAX_SIZET/(e)) ? /* +1 to avoid warnings */ \ (luaM_toobig(L), (void *)0) : \ luaM_realloc_(L, (b), (on)*(e), (n)*(e))) #define luaM_freemem(L, b, s) luaM_realloc_(L, (b), (s), 0) #define luaM_free(L, b) luaM_realloc_(L, (b), sizeof(*(b)), 0) #define luaM_freearray(L, b, n) luaM_reallocv(L, (b), n, 0, sizeof((b)[0])) #define luaM_malloc(L,s) luaM_realloc_(L, NULL, 0, (s)) #define luaM_new(L,t) cast(t *, luaM_malloc(L, sizeof(t))) #define luaM_newvector(L,n,t) \ cast(t *, luaM_reallocv(L, NULL, 0, n, sizeof(t))) #define luaM_newobject(L,tag,s) luaM_realloc_(L, NULL, tag, (s)) #define luaM_growvector(L,v,nelems,size,t,limit,e) \ if ((nelems)+1 > (size)) \ ((v)=cast(t *, luaM_growaux_(L,v,&(size),sizeof(t),limit,e))) #define luaM_reallocvector(L, v,oldn,n,t) \ ((v)=cast(t *, luaM_reallocv(L, v, oldn, n, sizeof(t)))) LUAI_FUNC l_noret luaM_toobig (lua_State *L); /* not to be called directly */ LUAI_FUNC void *luaM_realloc_ (lua_State *L, void *block, size_t oldsize, size_t size); LUAI_FUNC void *luaM_growaux_ (lua_State *L, void *block, int *size, size_t size_elem, int limit, const char *what); #endif fs-uae-2.2.3+dfsg/libfsemu/src/lua/lauxlib.c0000644000175000017500000006555012162366654021051 0ustar glaubitzglaubitz/* ** $Id: lauxlib.c,v 1.244 2012/05/31 20:28:45 roberto Exp $ ** Auxiliary functions for building Lua libraries ** See Copyright Notice in lua.h */ #include #include #include #include #include /* This file uses only the official API of Lua. ** Any function declared here could be written as an application function. */ #define lauxlib_c #define LUA_LIB #include "lua.h" #include "lauxlib.h" /* ** {====================================================== ** Traceback ** ======================================================= */ #define LEVELS1 12 /* size of the first part of the stack */ #define LEVELS2 10 /* size of the second part of the stack */ /* ** search for 'objidx' in table at index -1. ** return 1 + string at top if find a good name. */ static int findfield (lua_State *L, int objidx, int level) { if (level == 0 || !lua_istable(L, -1)) return 0; /* not found */ lua_pushnil(L); /* start 'next' loop */ while (lua_next(L, -2)) { /* for each pair in table */ if (lua_type(L, -2) == LUA_TSTRING) { /* ignore non-string keys */ if (lua_rawequal(L, objidx, -1)) { /* found object? */ lua_pop(L, 1); /* remove value (but keep name) */ return 1; } else if (findfield(L, objidx, level - 1)) { /* try recursively */ lua_remove(L, -2); /* remove table (but keep name) */ lua_pushliteral(L, "."); lua_insert(L, -2); /* place '.' between the two names */ lua_concat(L, 3); return 1; } } lua_pop(L, 1); /* remove value */ } return 0; /* not found */ } static int pushglobalfuncname (lua_State *L, lua_Debug *ar) { int top = lua_gettop(L); lua_getinfo(L, "f", ar); /* push function */ lua_pushglobaltable(L); if (findfield(L, top + 1, 2)) { lua_copy(L, -1, top + 1); /* move name to proper place */ lua_pop(L, 2); /* remove pushed values */ return 1; } else { lua_settop(L, top); /* remove function and global table */ return 0; } } static void pushfuncname (lua_State *L, lua_Debug *ar) { if (*ar->namewhat != '\0') /* is there a name? */ lua_pushfstring(L, "function " LUA_QS, ar->name); else if (*ar->what == 'm') /* main? */ lua_pushfstring(L, "main chunk"); else if (*ar->what == 'C') { if (pushglobalfuncname(L, ar)) { lua_pushfstring(L, "function " LUA_QS, lua_tostring(L, -1)); lua_remove(L, -2); /* remove name */ } else lua_pushliteral(L, "?"); } else lua_pushfstring(L, "function <%s:%d>", ar->short_src, ar->linedefined); } static int countlevels (lua_State *L) { lua_Debug ar; int li = 1, le = 1; /* find an upper bound */ while (lua_getstack(L, le, &ar)) { li = le; le *= 2; } /* do a binary search */ while (li < le) { int m = (li + le)/2; if (lua_getstack(L, m, &ar)) li = m + 1; else le = m; } return le - 1; } LUALIB_API void luaL_traceback (lua_State *L, lua_State *L1, const char *msg, int level) { lua_Debug ar; int top = lua_gettop(L); int numlevels = countlevels(L1); int mark = (numlevels > LEVELS1 + LEVELS2) ? LEVELS1 : 0; if (msg) lua_pushfstring(L, "%s\n", msg); lua_pushliteral(L, "stack traceback:"); while (lua_getstack(L1, level++, &ar)) { if (level == mark) { /* too many levels? */ lua_pushliteral(L, "\n\t..."); /* add a '...' */ level = numlevels - LEVELS2; /* and skip to last ones */ } else { lua_getinfo(L1, "Slnt", &ar); lua_pushfstring(L, "\n\t%s:", ar.short_src); if (ar.currentline > 0) lua_pushfstring(L, "%d:", ar.currentline); lua_pushliteral(L, " in "); pushfuncname(L, &ar); if (ar.istailcall) lua_pushliteral(L, "\n\t(...tail calls...)"); lua_concat(L, lua_gettop(L) - top); } } lua_concat(L, lua_gettop(L) - top); } /* }====================================================== */ /* ** {====================================================== ** Error-report functions ** ======================================================= */ LUALIB_API int luaL_argerror (lua_State *L, int narg, const char *extramsg) { lua_Debug ar; if (!lua_getstack(L, 0, &ar)) /* no stack frame? */ return luaL_error(L, "bad argument #%d (%s)", narg, extramsg); lua_getinfo(L, "n", &ar); if (strcmp(ar.namewhat, "method") == 0) { narg--; /* do not count `self' */ if (narg == 0) /* error is in the self argument itself? */ return luaL_error(L, "calling " LUA_QS " on bad self", ar.name); } if (ar.name == NULL) ar.name = (pushglobalfuncname(L, &ar)) ? lua_tostring(L, -1) : "?"; return luaL_error(L, "bad argument #%d to " LUA_QS " (%s)", narg, ar.name, extramsg); } static int typeerror (lua_State *L, int narg, const char *tname) { const char *msg = lua_pushfstring(L, "%s expected, got %s", tname, luaL_typename(L, narg)); return luaL_argerror(L, narg, msg); } static void tag_error (lua_State *L, int narg, int tag) { typeerror(L, narg, lua_typename(L, tag)); } LUALIB_API void luaL_where (lua_State *L, int level) { lua_Debug ar; if (lua_getstack(L, level, &ar)) { /* check function at level */ lua_getinfo(L, "Sl", &ar); /* get info about it */ if (ar.currentline > 0) { /* is there info? */ lua_pushfstring(L, "%s:%d: ", ar.short_src, ar.currentline); return; } } lua_pushliteral(L, ""); /* else, no information available... */ } LUALIB_API int luaL_error (lua_State *L, const char *fmt, ...) { va_list argp; va_start(argp, fmt); luaL_where(L, 1); lua_pushvfstring(L, fmt, argp); va_end(argp); lua_concat(L, 2); return lua_error(L); } LUALIB_API int luaL_fileresult (lua_State *L, int stat, const char *fname) { int en = errno; /* calls to Lua API may change this value */ if (stat) { lua_pushboolean(L, 1); return 1; } else { lua_pushnil(L); if (fname) lua_pushfstring(L, "%s: %s", fname, strerror(en)); else lua_pushfstring(L, "%s", strerror(en)); lua_pushinteger(L, en); return 3; } } #if !defined(inspectstat) /* { */ #if defined(LUA_USE_POSIX) #include /* ** use appropriate macros to interpret 'pclose' return status */ #define inspectstat(stat,what) \ if (WIFEXITED(stat)) { stat = WEXITSTATUS(stat); } \ else if (WIFSIGNALED(stat)) { stat = WTERMSIG(stat); what = "signal"; } #else #define inspectstat(stat,what) /* no op */ #endif #endif /* } */ LUALIB_API int luaL_execresult (lua_State *L, int stat) { const char *what = "exit"; /* type of termination */ if (stat == -1) /* error? */ return luaL_fileresult(L, 0, NULL); else { inspectstat(stat, what); /* interpret result */ if (*what == 'e' && stat == 0) /* successful termination? */ lua_pushboolean(L, 1); else lua_pushnil(L); lua_pushstring(L, what); lua_pushinteger(L, stat); return 3; /* return true/nil,what,code */ } } /* }====================================================== */ /* ** {====================================================== ** Userdata's metatable manipulation ** ======================================================= */ LUALIB_API int luaL_newmetatable (lua_State *L, const char *tname) { luaL_getmetatable(L, tname); /* try to get metatable */ if (!lua_isnil(L, -1)) /* name already in use? */ return 0; /* leave previous value on top, but return 0 */ lua_pop(L, 1); lua_newtable(L); /* create metatable */ lua_pushvalue(L, -1); lua_setfield(L, LUA_REGISTRYINDEX, tname); /* registry.name = metatable */ return 1; } LUALIB_API void luaL_setmetatable (lua_State *L, const char *tname) { luaL_getmetatable(L, tname); lua_setmetatable(L, -2); } LUALIB_API void *luaL_testudata (lua_State *L, int ud, const char *tname) { void *p = lua_touserdata(L, ud); if (p != NULL) { /* value is a userdata? */ if (lua_getmetatable(L, ud)) { /* does it have a metatable? */ luaL_getmetatable(L, tname); /* get correct metatable */ if (!lua_rawequal(L, -1, -2)) /* not the same? */ p = NULL; /* value is a userdata with wrong metatable */ lua_pop(L, 2); /* remove both metatables */ return p; } } return NULL; /* value is not a userdata with a metatable */ } LUALIB_API void *luaL_checkudata (lua_State *L, int ud, const char *tname) { void *p = luaL_testudata(L, ud, tname); if (p == NULL) typeerror(L, ud, tname); return p; } /* }====================================================== */ /* ** {====================================================== ** Argument check functions ** ======================================================= */ LUALIB_API int luaL_checkoption (lua_State *L, int narg, const char *def, const char *const lst[]) { const char *name = (def) ? luaL_optstring(L, narg, def) : luaL_checkstring(L, narg); int i; for (i=0; lst[i]; i++) if (strcmp(lst[i], name) == 0) return i; return luaL_argerror(L, narg, lua_pushfstring(L, "invalid option " LUA_QS, name)); } LUALIB_API void luaL_checkstack (lua_State *L, int space, const char *msg) { /* keep some extra space to run error routines, if needed */ const int extra = LUA_MINSTACK; if (!lua_checkstack(L, space + extra)) { if (msg) luaL_error(L, "stack overflow (%s)", msg); else luaL_error(L, "stack overflow"); } } LUALIB_API void luaL_checktype (lua_State *L, int narg, int t) { if (lua_type(L, narg) != t) tag_error(L, narg, t); } LUALIB_API void luaL_checkany (lua_State *L, int narg) { if (lua_type(L, narg) == LUA_TNONE) luaL_argerror(L, narg, "value expected"); } LUALIB_API const char *luaL_checklstring (lua_State *L, int narg, size_t *len) { const char *s = lua_tolstring(L, narg, len); if (!s) tag_error(L, narg, LUA_TSTRING); return s; } LUALIB_API const char *luaL_optlstring (lua_State *L, int narg, const char *def, size_t *len) { if (lua_isnoneornil(L, narg)) { if (len) *len = (def ? strlen(def) : 0); return def; } else return luaL_checklstring(L, narg, len); } LUALIB_API lua_Number luaL_checknumber (lua_State *L, int narg) { int isnum; lua_Number d = lua_tonumberx(L, narg, &isnum); if (!isnum) tag_error(L, narg, LUA_TNUMBER); return d; } LUALIB_API lua_Number luaL_optnumber (lua_State *L, int narg, lua_Number def) { return luaL_opt(L, luaL_checknumber, narg, def); } LUALIB_API lua_Integer luaL_checkinteger (lua_State *L, int narg) { int isnum; lua_Integer d = lua_tointegerx(L, narg, &isnum); if (!isnum) tag_error(L, narg, LUA_TNUMBER); return d; } LUALIB_API lua_Unsigned luaL_checkunsigned (lua_State *L, int narg) { int isnum; lua_Unsigned d = lua_tounsignedx(L, narg, &isnum); if (!isnum) tag_error(L, narg, LUA_TNUMBER); return d; } LUALIB_API lua_Integer luaL_optinteger (lua_State *L, int narg, lua_Integer def) { return luaL_opt(L, luaL_checkinteger, narg, def); } LUALIB_API lua_Unsigned luaL_optunsigned (lua_State *L, int narg, lua_Unsigned def) { return luaL_opt(L, luaL_checkunsigned, narg, def); } /* }====================================================== */ /* ** {====================================================== ** Generic Buffer manipulation ** ======================================================= */ /* ** check whether buffer is using a userdata on the stack as a temporary ** buffer */ #define buffonstack(B) ((B)->b != (B)->initb) /* ** returns a pointer to a free area with at least 'sz' bytes */ LUALIB_API char *luaL_prepbuffsize (luaL_Buffer *B, size_t sz) { lua_State *L = B->L; if (B->size - B->n < sz) { /* not enough space? */ char *newbuff; size_t newsize = B->size * 2; /* double buffer size */ if (newsize - B->n < sz) /* not bit enough? */ newsize = B->n + sz; if (newsize < B->n || newsize - B->n < sz) luaL_error(L, "buffer too large"); /* create larger buffer */ newbuff = (char *)lua_newuserdata(L, newsize * sizeof(char)); /* move content to new buffer */ memcpy(newbuff, B->b, B->n * sizeof(char)); if (buffonstack(B)) lua_remove(L, -2); /* remove old buffer */ B->b = newbuff; B->size = newsize; } return &B->b[B->n]; } LUALIB_API void luaL_addlstring (luaL_Buffer *B, const char *s, size_t l) { char *b = luaL_prepbuffsize(B, l); memcpy(b, s, l * sizeof(char)); luaL_addsize(B, l); } LUALIB_API void luaL_addstring (luaL_Buffer *B, const char *s) { luaL_addlstring(B, s, strlen(s)); } LUALIB_API void luaL_pushresult (luaL_Buffer *B) { lua_State *L = B->L; lua_pushlstring(L, B->b, B->n); if (buffonstack(B)) lua_remove(L, -2); /* remove old buffer */ } LUALIB_API void luaL_pushresultsize (luaL_Buffer *B, size_t sz) { luaL_addsize(B, sz); luaL_pushresult(B); } LUALIB_API void luaL_addvalue (luaL_Buffer *B) { lua_State *L = B->L; size_t l; const char *s = lua_tolstring(L, -1, &l); if (buffonstack(B)) lua_insert(L, -2); /* put value below buffer */ luaL_addlstring(B, s, l); lua_remove(L, (buffonstack(B)) ? -2 : -1); /* remove value */ } LUALIB_API void luaL_buffinit (lua_State *L, luaL_Buffer *B) { B->L = L; B->b = B->initb; B->n = 0; B->size = LUAL_BUFFERSIZE; } LUALIB_API char *luaL_buffinitsize (lua_State *L, luaL_Buffer *B, size_t sz) { luaL_buffinit(L, B); return luaL_prepbuffsize(B, sz); } /* }====================================================== */ /* ** {====================================================== ** Reference system ** ======================================================= */ /* index of free-list header */ #define freelist 0 LUALIB_API int luaL_ref (lua_State *L, int t) { int ref; if (lua_isnil(L, -1)) { lua_pop(L, 1); /* remove from stack */ return LUA_REFNIL; /* `nil' has a unique fixed reference */ } t = lua_absindex(L, t); lua_rawgeti(L, t, freelist); /* get first free element */ ref = (int)lua_tointeger(L, -1); /* ref = t[freelist] */ lua_pop(L, 1); /* remove it from stack */ if (ref != 0) { /* any free element? */ lua_rawgeti(L, t, ref); /* remove it from list */ lua_rawseti(L, t, freelist); /* (t[freelist] = t[ref]) */ } else /* no free elements */ ref = (int)lua_rawlen(L, t) + 1; /* get a new reference */ lua_rawseti(L, t, ref); return ref; } LUALIB_API void luaL_unref (lua_State *L, int t, int ref) { if (ref >= 0) { t = lua_absindex(L, t); lua_rawgeti(L, t, freelist); lua_rawseti(L, t, ref); /* t[ref] = t[freelist] */ lua_pushinteger(L, ref); lua_rawseti(L, t, freelist); /* t[freelist] = ref */ } } /* }====================================================== */ /* ** {====================================================== ** Load functions ** ======================================================= */ typedef struct LoadF { int n; /* number of pre-read characters */ FILE *f; /* file being read */ char buff[LUAL_BUFFERSIZE]; /* area for reading file */ } LoadF; static const char *getF (lua_State *L, void *ud, size_t *size) { LoadF *lf = (LoadF *)ud; (void)L; /* not used */ if (lf->n > 0) { /* are there pre-read characters to be read? */ *size = lf->n; /* return them (chars already in buffer) */ lf->n = 0; /* no more pre-read characters */ } else { /* read a block from file */ /* 'fread' can return > 0 *and* set the EOF flag. If next call to 'getF' called 'fread', it might still wait for user input. The next check avoids this problem. */ if (feof(lf->f)) return NULL; *size = fread(lf->buff, 1, sizeof(lf->buff), lf->f); /* read block */ } return lf->buff; } static int errfile (lua_State *L, const char *what, int fnameindex) { const char *serr = strerror(errno); const char *filename = lua_tostring(L, fnameindex) + 1; lua_pushfstring(L, "cannot %s %s: %s", what, filename, serr); lua_remove(L, fnameindex); return LUA_ERRFILE; } static int skipBOM (LoadF *lf) { const char *p = "\xEF\xBB\xBF"; /* Utf8 BOM mark */ int c; lf->n = 0; do { c = getc(lf->f); if (c == EOF || c != *(unsigned char *)p++) return c; lf->buff[lf->n++] = c; /* to be read by the parser */ } while (*p != '\0'); lf->n = 0; /* prefix matched; discard it */ return getc(lf->f); /* return next character */ } /* ** reads the first character of file 'f' and skips an optional BOM mark ** in its beginning plus its first line if it starts with '#'. Returns ** true if it skipped the first line. In any case, '*cp' has the ** first "valid" character of the file (after the optional BOM and ** a first-line comment). */ static int skipcomment (LoadF *lf, int *cp) { int c = *cp = skipBOM(lf); if (c == '#') { /* first line is a comment (Unix exec. file)? */ do { /* skip first line */ c = getc(lf->f); } while (c != EOF && c != '\n') ; *cp = getc(lf->f); /* skip end-of-line, if present */ return 1; /* there was a comment */ } else return 0; /* no comment */ } LUALIB_API int luaL_loadfilex (lua_State *L, const char *filename, const char *mode) { LoadF lf; int status, readstatus; int c; int fnameindex = lua_gettop(L) + 1; /* index of filename on the stack */ if (filename == NULL) { lua_pushliteral(L, "=stdin"); lf.f = stdin; } else { lua_pushfstring(L, "@%s", filename); lf.f = fopen(filename, "r"); if (lf.f == NULL) return errfile(L, "open", fnameindex); } if (skipcomment(&lf, &c)) /* read initial portion */ lf.buff[lf.n++] = '\n'; /* add line to correct line numbers */ if (c == LUA_SIGNATURE[0] && filename) { /* binary file? */ lf.f = freopen(filename, "rb", lf.f); /* reopen in binary mode */ if (lf.f == NULL) return errfile(L, "reopen", fnameindex); skipcomment(&lf, &c); /* re-read initial portion */ } if (c != EOF) lf.buff[lf.n++] = c; /* 'c' is the first character of the stream */ status = lua_load(L, getF, &lf, lua_tostring(L, -1), mode); readstatus = ferror(lf.f); if (filename) fclose(lf.f); /* close file (even in case of errors) */ if (readstatus) { lua_settop(L, fnameindex); /* ignore results from `lua_load' */ return errfile(L, "read", fnameindex); } lua_remove(L, fnameindex); return status; } typedef struct LoadS { const char *s; size_t size; } LoadS; static const char *getS (lua_State *L, void *ud, size_t *size) { LoadS *ls = (LoadS *)ud; (void)L; /* not used */ if (ls->size == 0) return NULL; *size = ls->size; ls->size = 0; return ls->s; } LUALIB_API int luaL_loadbufferx (lua_State *L, const char *buff, size_t size, const char *name, const char *mode) { LoadS ls; ls.s = buff; ls.size = size; return lua_load(L, getS, &ls, name, mode); } LUALIB_API int luaL_loadstring (lua_State *L, const char *s) { return luaL_loadbuffer(L, s, strlen(s), s); } /* }====================================================== */ LUALIB_API int luaL_getmetafield (lua_State *L, int obj, const char *event) { if (!lua_getmetatable(L, obj)) /* no metatable? */ return 0; lua_pushstring(L, event); lua_rawget(L, -2); if (lua_isnil(L, -1)) { lua_pop(L, 2); /* remove metatable and metafield */ return 0; } else { lua_remove(L, -2); /* remove only metatable */ return 1; } } LUALIB_API int luaL_callmeta (lua_State *L, int obj, const char *event) { obj = lua_absindex(L, obj); if (!luaL_getmetafield(L, obj, event)) /* no metafield? */ return 0; lua_pushvalue(L, obj); lua_call(L, 1, 1); return 1; } LUALIB_API int luaL_len (lua_State *L, int idx) { int l; int isnum; lua_len(L, idx); l = (int)lua_tointegerx(L, -1, &isnum); if (!isnum) luaL_error(L, "object length is not a number"); lua_pop(L, 1); /* remove object */ return l; } LUALIB_API const char *luaL_tolstring (lua_State *L, int idx, size_t *len) { if (!luaL_callmeta(L, idx, "__tostring")) { /* no metafield? */ switch (lua_type(L, idx)) { case LUA_TNUMBER: case LUA_TSTRING: lua_pushvalue(L, idx); break; case LUA_TBOOLEAN: lua_pushstring(L, (lua_toboolean(L, idx) ? "true" : "false")); break; case LUA_TNIL: lua_pushliteral(L, "nil"); break; default: lua_pushfstring(L, "%s: %p", luaL_typename(L, idx), lua_topointer(L, idx)); break; } } return lua_tolstring(L, -1, len); } /* ** {====================================================== ** Compatibility with 5.1 module functions ** ======================================================= */ #if defined(LUA_COMPAT_MODULE) static const char *luaL_findtable (lua_State *L, int idx, const char *fname, int szhint) { const char *e; if (idx) lua_pushvalue(L, idx); do { e = strchr(fname, '.'); if (e == NULL) e = fname + strlen(fname); lua_pushlstring(L, fname, e - fname); lua_rawget(L, -2); if (lua_isnil(L, -1)) { /* no such field? */ lua_pop(L, 1); /* remove this nil */ lua_createtable(L, 0, (*e == '.' ? 1 : szhint)); /* new table for field */ lua_pushlstring(L, fname, e - fname); lua_pushvalue(L, -2); lua_settable(L, -4); /* set new table into field */ } else if (!lua_istable(L, -1)) { /* field has a non-table value? */ lua_pop(L, 2); /* remove table and value */ return fname; /* return problematic part of the name */ } lua_remove(L, -2); /* remove previous table */ fname = e + 1; } while (*e == '.'); return NULL; } /* ** Count number of elements in a luaL_Reg list. */ static int libsize (const luaL_Reg *l) { int size = 0; for (; l && l->name; l++) size++; return size; } /* ** Find or create a module table with a given name. The function ** first looks at the _LOADED table and, if that fails, try a ** global variable with that name. In any case, leaves on the stack ** the module table. */ LUALIB_API void luaL_pushmodule (lua_State *L, const char *modname, int sizehint) { luaL_findtable(L, LUA_REGISTRYINDEX, "_LOADED", 1); /* get _LOADED table */ lua_getfield(L, -1, modname); /* get _LOADED[modname] */ if (!lua_istable(L, -1)) { /* not found? */ lua_pop(L, 1); /* remove previous result */ /* try global variable (and create one if it does not exist) */ lua_pushglobaltable(L); if (luaL_findtable(L, 0, modname, sizehint) != NULL) luaL_error(L, "name conflict for module " LUA_QS, modname); lua_pushvalue(L, -1); lua_setfield(L, -3, modname); /* _LOADED[modname] = new table */ } lua_remove(L, -2); /* remove _LOADED table */ } LUALIB_API void luaL_openlib (lua_State *L, const char *libname, const luaL_Reg *l, int nup) { luaL_checkversion(L); if (libname) { luaL_pushmodule(L, libname, libsize(l)); /* get/create library table */ lua_insert(L, -(nup + 1)); /* move library table to below upvalues */ } if (l) luaL_setfuncs(L, l, nup); else lua_pop(L, nup); /* remove upvalues */ } #endif /* }====================================================== */ /* ** set functions from list 'l' into table at top - 'nup'; each ** function gets the 'nup' elements at the top as upvalues. ** Returns with only the table at the stack. */ LUALIB_API void luaL_setfuncs (lua_State *L, const luaL_Reg *l, int nup) { luaL_checkversion(L); luaL_checkstack(L, nup, "too many upvalues"); for (; l->name != NULL; l++) { /* fill the table with given functions */ int i; for (i = 0; i < nup; i++) /* copy upvalues to the top */ lua_pushvalue(L, -nup); lua_pushcclosure(L, l->func, nup); /* closure with those upvalues */ lua_setfield(L, -(nup + 2), l->name); } lua_pop(L, nup); /* remove upvalues */ } /* ** ensure that stack[idx][fname] has a table and push that table ** into the stack */ LUALIB_API int luaL_getsubtable (lua_State *L, int idx, const char *fname) { lua_getfield(L, idx, fname); if (lua_istable(L, -1)) return 1; /* table already there */ else { lua_pop(L, 1); /* remove previous result */ idx = lua_absindex(L, idx); lua_newtable(L); lua_pushvalue(L, -1); /* copy to be left at top */ lua_setfield(L, idx, fname); /* assign new table to field */ return 0; /* false, because did not find table there */ } } /* ** stripped-down 'require'. Calls 'openf' to open a module, ** registers the result in 'package.loaded' table and, if 'glb' ** is true, also registers the result in the global table. ** Leaves resulting module on the top. */ LUALIB_API void luaL_requiref (lua_State *L, const char *modname, lua_CFunction openf, int glb) { lua_pushcfunction(L, openf); lua_pushstring(L, modname); /* argument to open function */ lua_call(L, 1, 1); /* open module */ luaL_getsubtable(L, LUA_REGISTRYINDEX, "_LOADED"); lua_pushvalue(L, -2); /* make copy of module (call result) */ lua_setfield(L, -2, modname); /* _LOADED[modname] = module */ lua_pop(L, 1); /* remove _LOADED table */ if (glb) { lua_pushvalue(L, -1); /* copy of 'mod' */ lua_setglobal(L, modname); /* _G[modname] = module */ } } LUALIB_API const char *luaL_gsub (lua_State *L, const char *s, const char *p, const char *r) { const char *wild; size_t l = strlen(p); luaL_Buffer b; luaL_buffinit(L, &b); while ((wild = strstr(s, p)) != NULL) { luaL_addlstring(&b, s, wild - s); /* push prefix */ luaL_addstring(&b, r); /* push replacement in place of pattern */ s = wild + l; /* continue after `p' */ } luaL_addstring(&b, s); /* push last suffix */ luaL_pushresult(&b); return lua_tostring(L, -1); } static void *l_alloc (void *ud, void *ptr, size_t osize, size_t nsize) { (void)ud; (void)osize; /* not used */ if (nsize == 0) { free(ptr); return NULL; } else return realloc(ptr, nsize); } static int panic (lua_State *L) { luai_writestringerror("PANIC: unprotected error in call to Lua API (%s)\n", lua_tostring(L, -1)); return 0; /* return to Lua to abort */ } LUALIB_API lua_State *luaL_newstate (void) { lua_State *L = lua_newstate(l_alloc, NULL); if (L) lua_atpanic(L, &panic); return L; } LUALIB_API void luaL_checkversion_ (lua_State *L, lua_Number ver) { const lua_Number *v = lua_version(L); if (v != lua_version(NULL)) luaL_error(L, "multiple Lua VMs detected"); else if (*v != ver) luaL_error(L, "version mismatch: app. needs %f, Lua core provides %f", ver, *v); /* check conversions number -> integer types */ lua_pushnumber(L, -(lua_Number)0x1234); if (lua_tointeger(L, -1) != -0x1234 || lua_tounsigned(L, -1) != (lua_Unsigned)-0x1234) luaL_error(L, "bad conversion number->int;" " must recompile Lua with proper settings"); lua_pop(L, 1); } fs-uae-2.2.3+dfsg/libfsemu/src/lua/ldo.h0000644000175000017500000000276712162366654020175 0ustar glaubitzglaubitz/* ** $Id: ldo.h,v 2.20 2011/11/29 15:55:08 roberto Exp $ ** Stack and Call structure of Lua ** See Copyright Notice in lua.h */ #ifndef ldo_h #define ldo_h #include "lobject.h" #include "lstate.h" #include "lzio.h" #define luaD_checkstack(L,n) if (L->stack_last - L->top <= (n)) \ luaD_growstack(L, n); else condmovestack(L); #define incr_top(L) {L->top++; luaD_checkstack(L,0);} #define savestack(L,p) ((char *)(p) - (char *)L->stack) #define restorestack(L,n) ((TValue *)((char *)L->stack + (n))) /* type of protected functions, to be ran by `runprotected' */ typedef void (*Pfunc) (lua_State *L, void *ud); LUAI_FUNC int luaD_protectedparser (lua_State *L, ZIO *z, const char *name, const char *mode); LUAI_FUNC void luaD_hook (lua_State *L, int event, int line); LUAI_FUNC int luaD_precall (lua_State *L, StkId func, int nresults); LUAI_FUNC void luaD_call (lua_State *L, StkId func, int nResults, int allowyield); LUAI_FUNC int luaD_pcall (lua_State *L, Pfunc func, void *u, ptrdiff_t oldtop, ptrdiff_t ef); LUAI_FUNC int luaD_poscall (lua_State *L, StkId firstResult); LUAI_FUNC void luaD_reallocstack (lua_State *L, int newsize); LUAI_FUNC void luaD_growstack (lua_State *L, int n); LUAI_FUNC void luaD_shrinkstack (lua_State *L); LUAI_FUNC l_noret luaD_throw (lua_State *L, int errcode); LUAI_FUNC int luaD_rawrunprotected (lua_State *L, Pfunc f, void *ud); #endif fs-uae-2.2.3+dfsg/libfsemu/src/lua/luaconf.h0000644000175000017500000003574012162366654021043 0ustar glaubitzglaubitz/* ** $Id: luaconf.h,v 1.172 2012/05/11 14:14:42 roberto Exp $ ** Configuration file for Lua ** See Copyright Notice in lua.h */ #ifndef lconfig_h #define lconfig_h #include #include /* ** ================================================================== ** Search for "@@" to find all configurable definitions. ** =================================================================== */ /* @@ LUA_ANSI controls the use of non-ansi features. ** CHANGE it (define it) if you want Lua to avoid the use of any ** non-ansi feature or library. */ #if !defined(LUA_ANSI) && defined(__STRICT_ANSI__) #define LUA_ANSI #endif #if !defined(LUA_ANSI) && defined(_WIN32) && !defined(_WIN32_WCE) #define LUA_WIN /* enable goodies for regular Windows platforms */ #endif #if defined(LUA_WIN) #define LUA_DL_DLL #define LUA_USE_AFORMAT /* assume 'printf' handles 'aA' specifiers */ #endif #if defined(LUA_USE_LINUX) #define LUA_USE_POSIX #define LUA_USE_DLOPEN /* needs an extra library: -ldl */ #define LUA_USE_READLINE /* needs some extra libraries */ #define LUA_USE_STRTODHEX /* assume 'strtod' handles hexa formats */ #define LUA_USE_AFORMAT /* assume 'printf' handles 'aA' specifiers */ #define LUA_USE_LONGLONG /* assume support for long long */ #endif #if defined(LUA_USE_MACOSX) #define LUA_USE_POSIX #define LUA_USE_DLOPEN /* does not need -ldl */ #define LUA_USE_READLINE /* needs an extra library: -lreadline */ #define LUA_USE_STRTODHEX /* assume 'strtod' handles hexa formats */ #define LUA_USE_AFORMAT /* assume 'printf' handles 'aA' specifiers */ #define LUA_USE_LONGLONG /* assume support for long long */ #endif /* @@ LUA_USE_POSIX includes all functionality listed as X/Open System @* Interfaces Extension (XSI). ** CHANGE it (define it) if your system is XSI compatible. */ #if defined(LUA_USE_POSIX) #define LUA_USE_MKSTEMP #define LUA_USE_ISATTY #define LUA_USE_POPEN #define LUA_USE_ULONGJMP #define LUA_USE_GMTIME_R #endif /* @@ LUA_PATH_DEFAULT is the default path that Lua uses to look for @* Lua libraries. @@ LUA_CPATH_DEFAULT is the default path that Lua uses to look for @* C libraries. ** CHANGE them if your machine has a non-conventional directory ** hierarchy or if you want to install your libraries in ** non-conventional directories. */ #if defined(_WIN32) /* { */ /* ** In Windows, any exclamation mark ('!') in the path is replaced by the ** path of the directory of the executable file of the current process. */ #define LUA_LDIR "!\\lua\\" #define LUA_CDIR "!\\" #define LUA_PATH_DEFAULT \ LUA_LDIR"?.lua;" LUA_LDIR"?\\init.lua;" \ LUA_CDIR"?.lua;" LUA_CDIR"?\\init.lua;" ".\\?.lua" #define LUA_CPATH_DEFAULT \ LUA_CDIR"?.dll;" LUA_CDIR"loadall.dll;" ".\\?.dll" #else /* }{ */ #define LUA_VDIR LUA_VERSION_MAJOR "." LUA_VERSION_MINOR "/" #define LUA_ROOT "/usr/local/" #define LUA_LDIR LUA_ROOT "share/lua/" LUA_VDIR #define LUA_CDIR LUA_ROOT "lib/lua/" LUA_VDIR #define LUA_PATH_DEFAULT \ LUA_LDIR"?.lua;" LUA_LDIR"?/init.lua;" \ LUA_CDIR"?.lua;" LUA_CDIR"?/init.lua;" "./?.lua" #define LUA_CPATH_DEFAULT \ LUA_CDIR"?.so;" LUA_CDIR"loadall.so;" "./?.so" #endif /* } */ /* @@ LUA_DIRSEP is the directory separator (for submodules). ** CHANGE it if your machine does not use "/" as the directory separator ** and is not Windows. (On Windows Lua automatically uses "\".) */ #if defined(_WIN32) #define LUA_DIRSEP "\\" #else #define LUA_DIRSEP "/" #endif /* @@ LUA_ENV is the name of the variable that holds the current @@ environment, used to access global names. ** CHANGE it if you do not like this name. */ #define LUA_ENV "_ENV" /* @@ LUA_API is a mark for all core API functions. @@ LUALIB_API is a mark for all auxiliary library functions. @@ LUAMOD_API is a mark for all standard library opening functions. ** CHANGE them if you need to define those functions in some special way. ** For instance, if you want to create one Windows DLL with the core and ** the libraries, you may want to use the following definition (define ** LUA_BUILD_AS_DLL to get it). */ #if defined(LUA_BUILD_AS_DLL) /* { */ #if defined(LUA_CORE) || defined(LUA_LIB) /* { */ #define LUA_API __declspec(dllexport) #else /* }{ */ #define LUA_API __declspec(dllimport) #endif /* } */ #else /* }{ */ #define LUA_API extern #endif /* } */ /* more often than not the libs go together with the core */ #define LUALIB_API LUA_API #define LUAMOD_API LUALIB_API /* @@ LUAI_FUNC is a mark for all extern functions that are not to be @* exported to outside modules. @@ LUAI_DDEF and LUAI_DDEC are marks for all extern (const) variables @* that are not to be exported to outside modules (LUAI_DDEF for @* definitions and LUAI_DDEC for declarations). ** CHANGE them if you need to mark them in some special way. Elf/gcc ** (versions 3.2 and later) mark them as "hidden" to optimize access ** when Lua is compiled as a shared library. Not all elf targets support ** this attribute. Unfortunately, gcc does not offer a way to check ** whether the target offers that support, and those without support ** give a warning about it. To avoid these warnings, change to the ** default definition. */ #if defined(__GNUC__) && ((__GNUC__*100 + __GNUC_MINOR__) >= 302) && \ defined(__ELF__) /* { */ #define LUAI_FUNC __attribute__((visibility("hidden"))) extern #define LUAI_DDEC LUAI_FUNC #define LUAI_DDEF /* empty */ #else /* }{ */ #define LUAI_FUNC extern #define LUAI_DDEC extern #define LUAI_DDEF /* empty */ #endif /* } */ /* @@ LUA_QL describes how error messages quote program elements. ** CHANGE it if you want a different appearance. */ #define LUA_QL(x) "'" x "'" #define LUA_QS LUA_QL("%s") /* @@ LUA_IDSIZE gives the maximum size for the description of the source @* of a function in debug information. ** CHANGE it if you want a different size. */ #define LUA_IDSIZE 60 /* @@ luai_writestring/luai_writeline define how 'print' prints its results. ** They are only used in libraries and the stand-alone program. (The #if ** avoids including 'stdio.h' everywhere.) */ #if defined(LUA_LIB) || defined(lua_c) #include #define luai_writestring(s,l) fwrite((s), sizeof(char), (l), stdout) #define luai_writeline() (luai_writestring("\n", 1), fflush(stdout)) #endif /* @@ luai_writestringerror defines how to print error messages. ** (A format string with one argument is enough for Lua...) */ #define luai_writestringerror(s,p) \ (fprintf(stderr, (s), (p)), fflush(stderr)) /* @@ LUAI_MAXSHORTLEN is the maximum length for short strings, that is, ** strings that are internalized. (Cannot be smaller than reserved words ** or tags for metamethods, as these strings must be internalized; ** #("function") = 8, #("__newindex") = 10.) */ #define LUAI_MAXSHORTLEN 40 /* ** {================================================================== ** Compatibility with previous versions ** =================================================================== */ /* @@ LUA_COMPAT_ALL controls all compatibility options. ** You can define it to get all options, or change specific options ** to fit your specific needs. */ #if defined(LUA_COMPAT_ALL) /* { */ /* @@ LUA_COMPAT_UNPACK controls the presence of global 'unpack'. ** You can replace it with 'table.unpack'. */ #define LUA_COMPAT_UNPACK /* @@ LUA_COMPAT_LOADERS controls the presence of table 'package.loaders'. ** You can replace it with 'package.searchers'. */ #define LUA_COMPAT_LOADERS /* @@ macro 'lua_cpcall' emulates deprecated function lua_cpcall. ** You can call your C function directly (with light C functions). */ #define lua_cpcall(L,f,u) \ (lua_pushcfunction(L, (f)), \ lua_pushlightuserdata(L,(u)), \ lua_pcall(L,1,0,0)) /* @@ LUA_COMPAT_LOG10 defines the function 'log10' in the math library. ** You can rewrite 'log10(x)' as 'log(x, 10)'. */ #define LUA_COMPAT_LOG10 /* @@ LUA_COMPAT_LOADSTRING defines the function 'loadstring' in the base ** library. You can rewrite 'loadstring(s)' as 'load(s)'. */ #define LUA_COMPAT_LOADSTRING /* @@ LUA_COMPAT_MAXN defines the function 'maxn' in the table library. */ #define LUA_COMPAT_MAXN /* @@ The following macros supply trivial compatibility for some ** changes in the API. The macros themselves document how to ** change your code to avoid using them. */ #define lua_strlen(L,i) lua_rawlen(L, (i)) #define lua_objlen(L,i) lua_rawlen(L, (i)) #define lua_equal(L,idx1,idx2) lua_compare(L,(idx1),(idx2),LUA_OPEQ) #define lua_lessthan(L,idx1,idx2) lua_compare(L,(idx1),(idx2),LUA_OPLT) /* @@ LUA_COMPAT_MODULE controls compatibility with previous ** module functions 'module' (Lua) and 'luaL_register' (C). */ #define LUA_COMPAT_MODULE #endif /* } */ /* }================================================================== */ /* @@ LUAI_BITSINT defines the number of bits in an int. ** CHANGE here if Lua cannot automatically detect the number of bits of ** your machine. Probably you do not need to change this. */ /* avoid overflows in comparison */ #if INT_MAX-20 < 32760 /* { */ #define LUAI_BITSINT 16 #elif INT_MAX > 2147483640L /* }{ */ /* int has at least 32 bits */ #define LUAI_BITSINT 32 #else /* }{ */ #error "you must define LUA_BITSINT with number of bits in an integer" #endif /* } */ /* @@ LUA_INT32 is an signed integer with exactly 32 bits. @@ LUAI_UMEM is an unsigned integer big enough to count the total @* memory used by Lua. @@ LUAI_MEM is a signed integer big enough to count the total memory @* used by Lua. ** CHANGE here if for some weird reason the default definitions are not ** good enough for your machine. Probably you do not need to change ** this. */ #if LUAI_BITSINT >= 32 /* { */ #define LUA_INT32 int #define LUAI_UMEM size_t #define LUAI_MEM ptrdiff_t #else /* }{ */ /* 16-bit ints */ #define LUA_INT32 long #define LUAI_UMEM unsigned long #define LUAI_MEM long #endif /* } */ /* @@ LUAI_MAXSTACK limits the size of the Lua stack. ** CHANGE it if you need a different limit. This limit is arbitrary; ** its only purpose is to stop Lua to consume unlimited stack ** space (and to reserve some numbers for pseudo-indices). */ #if LUAI_BITSINT >= 32 #define LUAI_MAXSTACK 1000000 #else #define LUAI_MAXSTACK 15000 #endif /* reserve some space for error handling */ #define LUAI_FIRSTPSEUDOIDX (-LUAI_MAXSTACK - 1000) /* @@ LUAL_BUFFERSIZE is the buffer size used by the lauxlib buffer system. ** CHANGE it if it uses too much C-stack space. */ #define LUAL_BUFFERSIZE BUFSIZ /* ** {================================================================== @@ LUA_NUMBER is the type of numbers in Lua. ** CHANGE the following definitions only if you want to build Lua ** with a number type different from double. You may also need to ** change lua_number2int & lua_number2integer. ** =================================================================== */ #define LUA_NUMBER_DOUBLE #define LUA_NUMBER double /* @@ LUAI_UACNUMBER is the result of an 'usual argument conversion' @* over a number. */ #define LUAI_UACNUMBER double /* @@ LUA_NUMBER_SCAN is the format for reading numbers. @@ LUA_NUMBER_FMT is the format for writing numbers. @@ lua_number2str converts a number to a string. @@ LUAI_MAXNUMBER2STR is maximum size of previous conversion. */ #define LUA_NUMBER_SCAN "%lf" #define LUA_NUMBER_FMT "%.14g" #define lua_number2str(s,n) sprintf((s), LUA_NUMBER_FMT, (n)) #define LUAI_MAXNUMBER2STR 32 /* 16 digits, sign, point, and \0 */ /* @@ lua_str2number converts a decimal numeric string to a number. @@ lua_strx2number converts an hexadecimal numeric string to a number. ** In C99, 'strtod' do both conversions. C89, however, has no function ** to convert floating hexadecimal strings to numbers. For these ** systems, you can leave 'lua_strx2number' undefined and Lua will ** provide its own implementation. */ #define lua_str2number(s,p) strtod((s), (p)) #if defined(LUA_USE_STRTODHEX) #define lua_strx2number(s,p) strtod((s), (p)) #endif /* @@ The luai_num* macros define the primitive operations over numbers. */ /* the following operations need the math library */ #if defined(lobject_c) || defined(lvm_c) #include #define luai_nummod(L,a,b) ((a) - floor((a)/(b))*(b)) #define luai_numpow(L,a,b) (pow(a,b)) #endif /* these are quite standard operations */ #if defined(LUA_CORE) #define luai_numadd(L,a,b) ((a)+(b)) #define luai_numsub(L,a,b) ((a)-(b)) #define luai_nummul(L,a,b) ((a)*(b)) #define luai_numdiv(L,a,b) ((a)/(b)) #define luai_numunm(L,a) (-(a)) #define luai_numeq(a,b) ((a)==(b)) #define luai_numlt(L,a,b) ((a)<(b)) #define luai_numle(L,a,b) ((a)<=(b)) #define luai_numisnan(L,a) (!luai_numeq((a), (a))) #endif /* @@ LUA_INTEGER is the integral type used by lua_pushinteger/lua_tointeger. ** CHANGE that if ptrdiff_t is not adequate on your machine. (On most ** machines, ptrdiff_t gives a good choice between int or long.) */ #define LUA_INTEGER ptrdiff_t /* @@ LUA_UNSIGNED is the integral type used by lua_pushunsigned/lua_tounsigned. ** It must have at least 32 bits. */ #define LUA_UNSIGNED unsigned LUA_INT32 /* ** Some tricks with doubles */ #if defined(LUA_CORE) && \ defined(LUA_NUMBER_DOUBLE) && !defined(LUA_ANSI) /* { */ /* ** The next definitions activate some tricks to speed up the ** conversion from doubles to integer types, mainly to LUA_UNSIGNED. ** @@ MS_ASMTRICK uses Microsoft assembler to avoid clashes with a ** DirectX idiosyncrasy. ** @@ LUA_IEEE754TRICK uses a trick that should work on any machine ** using IEEE754 with a 32-bit integer type. ** @@ LUA_IEEELL extends the trick to LUA_INTEGER; should only be ** defined when LUA_INTEGER is a 32-bit integer. ** @@ LUA_IEEEENDIAN is the endianness of doubles in your machine ** (0 for little endian, 1 for big endian); if not defined, Lua will ** check it dynamically for LUA_IEEE754TRICK (but not for LUA_NANTRICK). ** @@ LUA_NANTRICK controls the use of a trick to pack all types into ** a single double value, using NaN values to represent non-number ** values. The trick only works on 32-bit machines (ints and pointers ** are 32-bit values) with numbers represented as IEEE 754-2008 doubles ** with conventional endianess (12345678 or 87654321), in CPUs that do ** not produce signaling NaN values (all NaNs are quiet). */ /* Microsoft compiler on a Pentium (32 bit) ? */ #if defined(LUA_WIN) && defined(_MSC_VER) && defined(_M_IX86) /* { */ #define MS_ASMTRICK #define LUA_IEEEENDIAN 0 #define LUA_NANTRICK /* pentium 32 bits? */ #elif defined(__i386__) || defined(__i386) || defined(__X86__) /* }{ */ #define LUA_IEEE754TRICK #define LUA_IEEELL #define LUA_IEEEENDIAN 0 #define LUA_NANTRICK /* pentium 64 bits? */ #elif defined(__x86_64) /* }{ */ #define LUA_IEEE754TRICK #define LUA_IEEEENDIAN 0 #elif defined(__POWERPC__) || defined(__ppc__) /* }{ */ #define LUA_IEEE754TRICK #define LUA_IEEEENDIAN 1 #else /* }{ */ /* assume IEEE754 and a 32-bit integer type */ #define LUA_IEEE754TRICK #endif /* } */ #endif /* } */ /* }================================================================== */ /* =================================================================== */ /* ** Local configuration. You can use this space to add your redefinitions ** without modifying the main part of the file. */ #endif fs-uae-2.2.3+dfsg/libfsemu/src/lua/ltm.h0000644000175000017500000000214112162366654020175 0ustar glaubitzglaubitz/* ** $Id: ltm.h,v 2.11 2011/02/28 17:32:10 roberto Exp $ ** Tag methods ** See Copyright Notice in lua.h */ #ifndef ltm_h #define ltm_h #include "lobject.h" /* * WARNING: if you change the order of this enumeration, * grep "ORDER TM" */ typedef enum { TM_INDEX, TM_NEWINDEX, TM_GC, TM_MODE, TM_LEN, TM_EQ, /* last tag method with `fast' access */ TM_ADD, TM_SUB, TM_MUL, TM_DIV, TM_MOD, TM_POW, TM_UNM, TM_LT, TM_LE, TM_CONCAT, TM_CALL, TM_N /* number of elements in the enum */ } TMS; #define gfasttm(g,et,e) ((et) == NULL ? NULL : \ ((et)->flags & (1u<<(e))) ? NULL : luaT_gettm(et, e, (g)->tmname[e])) #define fasttm(l,et,e) gfasttm(G(l), et, e) #define ttypename(x) luaT_typenames_[(x) + 1] #define objtypename(x) ttypename(ttypenv(x)) LUAI_DDEC const char *const luaT_typenames_[LUA_TOTALTAGS]; LUAI_FUNC const TValue *luaT_gettm (Table *events, TMS event, TString *ename); LUAI_FUNC const TValue *luaT_gettmbyobj (lua_State *L, const TValue *o, TMS event); LUAI_FUNC void luaT_init (lua_State *L); #endif fs-uae-2.2.3+dfsg/libfsemu/src/lua/lmathlib.c0000644000175000017500000001461712162366654021203 0ustar glaubitzglaubitz/* ** $Id: lmathlib.c,v 1.81 2012/05/18 17:47:53 roberto Exp $ ** Standard mathematical library ** See Copyright Notice in lua.h */ #include #include #define lmathlib_c #define LUA_LIB #include "lua.h" #include "lauxlib.h" #include "lualib.h" /* macro 'l_tg' allows the addition of an 'l' or 'f' to all math operations */ #if !defined(l_tg) #define l_tg(x) (x) #endif #undef PI #define PI (l_tg(3.1415926535897932384626433832795)) #define RADIANS_PER_DEGREE (PI/180.0) static int math_abs (lua_State *L) { lua_pushnumber(L, l_tg(fabs)(luaL_checknumber(L, 1))); return 1; } static int math_sin (lua_State *L) { lua_pushnumber(L, l_tg(sin)(luaL_checknumber(L, 1))); return 1; } static int math_sinh (lua_State *L) { lua_pushnumber(L, l_tg(sinh)(luaL_checknumber(L, 1))); return 1; } static int math_cos (lua_State *L) { lua_pushnumber(L, l_tg(cos)(luaL_checknumber(L, 1))); return 1; } static int math_cosh (lua_State *L) { lua_pushnumber(L, l_tg(cosh)(luaL_checknumber(L, 1))); return 1; } static int math_tan (lua_State *L) { lua_pushnumber(L, l_tg(tan)(luaL_checknumber(L, 1))); return 1; } static int math_tanh (lua_State *L) { lua_pushnumber(L, l_tg(tanh)(luaL_checknumber(L, 1))); return 1; } static int math_asin (lua_State *L) { lua_pushnumber(L, l_tg(asin)(luaL_checknumber(L, 1))); return 1; } static int math_acos (lua_State *L) { lua_pushnumber(L, l_tg(acos)(luaL_checknumber(L, 1))); return 1; } static int math_atan (lua_State *L) { lua_pushnumber(L, l_tg(atan)(luaL_checknumber(L, 1))); return 1; } static int math_atan2 (lua_State *L) { lua_pushnumber(L, l_tg(atan2)(luaL_checknumber(L, 1), luaL_checknumber(L, 2))); return 1; } static int math_ceil (lua_State *L) { lua_pushnumber(L, l_tg(ceil)(luaL_checknumber(L, 1))); return 1; } static int math_floor (lua_State *L) { lua_pushnumber(L, l_tg(floor)(luaL_checknumber(L, 1))); return 1; } static int math_fmod (lua_State *L) { lua_pushnumber(L, l_tg(fmod)(luaL_checknumber(L, 1), luaL_checknumber(L, 2))); return 1; } static int math_modf (lua_State *L) { lua_Number ip; lua_Number fp = l_tg(modf)(luaL_checknumber(L, 1), &ip); lua_pushnumber(L, ip); lua_pushnumber(L, fp); return 2; } static int math_sqrt (lua_State *L) { lua_pushnumber(L, l_tg(sqrt)(luaL_checknumber(L, 1))); return 1; } static int math_pow (lua_State *L) { lua_pushnumber(L, l_tg(pow)(luaL_checknumber(L, 1), luaL_checknumber(L, 2))); return 1; } static int math_log (lua_State *L) { lua_Number x = luaL_checknumber(L, 1); lua_Number res; if (lua_isnoneornil(L, 2)) res = l_tg(log)(x); else { lua_Number base = luaL_checknumber(L, 2); if (base == 10.0) res = l_tg(log10)(x); else res = l_tg(log)(x)/l_tg(log)(base); } lua_pushnumber(L, res); return 1; } #if defined(LUA_COMPAT_LOG10) static int math_log10 (lua_State *L) { lua_pushnumber(L, l_tg(log10)(luaL_checknumber(L, 1))); return 1; } #endif static int math_exp (lua_State *L) { lua_pushnumber(L, l_tg(exp)(luaL_checknumber(L, 1))); return 1; } static int math_deg (lua_State *L) { lua_pushnumber(L, luaL_checknumber(L, 1)/RADIANS_PER_DEGREE); return 1; } static int math_rad (lua_State *L) { lua_pushnumber(L, luaL_checknumber(L, 1)*RADIANS_PER_DEGREE); return 1; } static int math_frexp (lua_State *L) { int e; lua_pushnumber(L, l_tg(frexp)(luaL_checknumber(L, 1), &e)); lua_pushinteger(L, e); return 2; } static int math_ldexp (lua_State *L) { lua_pushnumber(L, l_tg(ldexp)(luaL_checknumber(L, 1), luaL_checkint(L, 2))); return 1; } static int math_min (lua_State *L) { int n = lua_gettop(L); /* number of arguments */ lua_Number dmin = luaL_checknumber(L, 1); int i; for (i=2; i<=n; i++) { lua_Number d = luaL_checknumber(L, i); if (d < dmin) dmin = d; } lua_pushnumber(L, dmin); return 1; } static int math_max (lua_State *L) { int n = lua_gettop(L); /* number of arguments */ lua_Number dmax = luaL_checknumber(L, 1); int i; for (i=2; i<=n; i++) { lua_Number d = luaL_checknumber(L, i); if (d > dmax) dmax = d; } lua_pushnumber(L, dmax); return 1; } static int math_random (lua_State *L) { /* the `%' avoids the (rare) case of r==1, and is needed also because on some systems (SunOS!) `rand()' may return a value larger than RAND_MAX */ lua_Number r = (lua_Number)(rand()%RAND_MAX) / (lua_Number)RAND_MAX; switch (lua_gettop(L)) { /* check number of arguments */ case 0: { /* no arguments */ lua_pushnumber(L, r); /* Number between 0 and 1 */ break; } case 1: { /* only upper limit */ lua_Number u = luaL_checknumber(L, 1); luaL_argcheck(L, 1.0 <= u, 1, "interval is empty"); lua_pushnumber(L, l_tg(floor)(r*u) + 1.0); /* int in [1, u] */ break; } case 2: { /* lower and upper limits */ lua_Number l = luaL_checknumber(L, 1); lua_Number u = luaL_checknumber(L, 2); luaL_argcheck(L, l <= u, 2, "interval is empty"); lua_pushnumber(L, l_tg(floor)(r*(u-l+1)) + l); /* int in [l, u] */ break; } default: return luaL_error(L, "wrong number of arguments"); } return 1; } static int math_randomseed (lua_State *L) { srand(luaL_checkunsigned(L, 1)); (void)rand(); /* discard first value to avoid undesirable correlations */ return 0; } static const luaL_Reg mathlib[] = { {"abs", math_abs}, {"acos", math_acos}, {"asin", math_asin}, {"atan2", math_atan2}, {"atan", math_atan}, {"ceil", math_ceil}, {"cosh", math_cosh}, {"cos", math_cos}, {"deg", math_deg}, {"exp", math_exp}, {"floor", math_floor}, {"fmod", math_fmod}, {"frexp", math_frexp}, {"ldexp", math_ldexp}, #if defined(LUA_COMPAT_LOG10) {"log10", math_log10}, #endif {"log", math_log}, {"max", math_max}, {"min", math_min}, {"modf", math_modf}, {"pow", math_pow}, {"rad", math_rad}, {"random", math_random}, {"randomseed", math_randomseed}, {"sinh", math_sinh}, {"sin", math_sin}, {"sqrt", math_sqrt}, {"tanh", math_tanh}, {"tan", math_tan}, {NULL, NULL} }; /* ** Open math library */ LUAMOD_API int luaopen_math (lua_State *L) { luaL_newlib(L, mathlib); lua_pushnumber(L, PI); lua_setfield(L, -2, "pi"); lua_pushnumber(L, HUGE_VAL); lua_setfield(L, -2, "huge"); return 1; } fs-uae-2.2.3+dfsg/libfsemu/src/lua/lua.hpp0000644000175000017500000000027712162366654020532 0ustar glaubitzglaubitz// lua.hpp // Lua header files for C++ // <> not supplied automatically because Lua also compiles as C++ extern "C" { #include "lua.h" #include "lualib.h" #include "lauxlib.h" } fs-uae-2.2.3+dfsg/libfsemu/src/lua/lua.c0000644000175000017500000003321012162366654020156 0ustar glaubitzglaubitz/* ** $Id: lua.c,v 1.205 2012/05/23 15:37:09 roberto Exp $ ** Lua stand-alone interpreter ** See Copyright Notice in lua.h */ #include #include #include #include #define lua_c #include "lua.h" #include "lauxlib.h" #include "lualib.h" #if !defined(LUA_PROMPT) #define LUA_PROMPT "> " #define LUA_PROMPT2 ">> " #endif #if !defined(LUA_PROGNAME) #define LUA_PROGNAME "lua" #endif #if !defined(LUA_MAXINPUT) #define LUA_MAXINPUT 512 #endif #if !defined(LUA_INIT) #define LUA_INIT "LUA_INIT" #endif #define LUA_INITVERSION \ LUA_INIT "_" LUA_VERSION_MAJOR "_" LUA_VERSION_MINOR /* ** lua_stdin_is_tty detects whether the standard input is a 'tty' (that ** is, whether we're running lua interactively). */ #if defined(LUA_USE_ISATTY) #include #define lua_stdin_is_tty() isatty(0) #elif defined(LUA_WIN) #include #include #define lua_stdin_is_tty() _isatty(_fileno(stdin)) #else #define lua_stdin_is_tty() 1 /* assume stdin is a tty */ #endif /* ** lua_readline defines how to show a prompt and then read a line from ** the standard input. ** lua_saveline defines how to "save" a read line in a "history". ** lua_freeline defines how to free a line read by lua_readline. */ #if defined(LUA_USE_READLINE) #include #include #include #define lua_readline(L,b,p) ((void)L, ((b)=readline(p)) != NULL) #define lua_saveline(L,idx) \ if (lua_rawlen(L,idx) > 0) /* non-empty line? */ \ add_history(lua_tostring(L, idx)); /* add it to history */ #define lua_freeline(L,b) ((void)L, free(b)) #elif !defined(lua_readline) #define lua_readline(L,b,p) \ ((void)L, fputs(p, stdout), fflush(stdout), /* show prompt */ \ fgets(b, LUA_MAXINPUT, stdin) != NULL) /* get line */ #define lua_saveline(L,idx) { (void)L; (void)idx; } #define lua_freeline(L,b) { (void)L; (void)b; } #endif static lua_State *globalL = NULL; static const char *progname = LUA_PROGNAME; static void lstop (lua_State *L, lua_Debug *ar) { (void)ar; /* unused arg. */ lua_sethook(L, NULL, 0, 0); luaL_error(L, "interrupted!"); } static void laction (int i) { signal(i, SIG_DFL); /* if another SIGINT happens before lstop, terminate process (default action) */ lua_sethook(globalL, lstop, LUA_MASKCALL | LUA_MASKRET | LUA_MASKCOUNT, 1); } static void print_usage (const char *badoption) { luai_writestringerror("%s: ", progname); if (badoption[1] == 'e' || badoption[1] == 'l') luai_writestringerror("'%s' needs argument\n", badoption); else luai_writestringerror("unrecognized option '%s'\n", badoption); luai_writestringerror( "usage: %s [options] [script [args]]\n" "Available options are:\n" " -e stat execute string " LUA_QL("stat") "\n" " -i enter interactive mode after executing " LUA_QL("script") "\n" " -l name require library " LUA_QL("name") "\n" " -v show version information\n" " -E ignore environment variables\n" " -- stop handling options\n" " - stop handling options and execute stdin\n" , progname); } static void l_message (const char *pname, const char *msg) { if (pname) luai_writestringerror("%s: ", pname); luai_writestringerror("%s\n", msg); } static int report (lua_State *L, int status) { if (status != LUA_OK && !lua_isnil(L, -1)) { const char *msg = lua_tostring(L, -1); if (msg == NULL) msg = "(error object is not a string)"; l_message(progname, msg); lua_pop(L, 1); /* force a complete garbage collection in case of errors */ lua_gc(L, LUA_GCCOLLECT, 0); } return status; } /* the next function is called unprotected, so it must avoid errors */ static void finalreport (lua_State *L, int status) { if (status != LUA_OK) { const char *msg = (lua_type(L, -1) == LUA_TSTRING) ? lua_tostring(L, -1) : NULL; if (msg == NULL) msg = "(error object is not a string)"; l_message(progname, msg); lua_pop(L, 1); } } static int traceback (lua_State *L) { const char *msg = lua_tostring(L, 1); if (msg) luaL_traceback(L, L, msg, 1); else if (!lua_isnoneornil(L, 1)) { /* is there an error object? */ if (!luaL_callmeta(L, 1, "__tostring")) /* try its 'tostring' metamethod */ lua_pushliteral(L, "(no error message)"); } return 1; } static int docall (lua_State *L, int narg, int nres) { int status; int base = lua_gettop(L) - narg; /* function index */ lua_pushcfunction(L, traceback); /* push traceback function */ lua_insert(L, base); /* put it under chunk and args */ globalL = L; /* to be available to 'laction' */ signal(SIGINT, laction); status = lua_pcall(L, narg, nres, base); signal(SIGINT, SIG_DFL); lua_remove(L, base); /* remove traceback function */ return status; } static void print_version (void) { luai_writestring(LUA_COPYRIGHT, strlen(LUA_COPYRIGHT)); luai_writeline(); } static int getargs (lua_State *L, char **argv, int n) { int narg; int i; int argc = 0; while (argv[argc]) argc++; /* count total number of arguments */ narg = argc - (n + 1); /* number of arguments to the script */ luaL_checkstack(L, narg + 3, "too many arguments to script"); for (i=n+1; i < argc; i++) lua_pushstring(L, argv[i]); lua_createtable(L, narg, n + 1); for (i=0; i < argc; i++) { lua_pushstring(L, argv[i]); lua_rawseti(L, -2, i - n); } return narg; } static int dofile (lua_State *L, const char *name) { int status = luaL_loadfile(L, name); if (status == LUA_OK) status = docall(L, 0, 0); return report(L, status); } static int dostring (lua_State *L, const char *s, const char *name) { int status = luaL_loadbuffer(L, s, strlen(s), name); if (status == LUA_OK) status = docall(L, 0, 0); return report(L, status); } static int dolibrary (lua_State *L, const char *name) { int status; lua_getglobal(L, "require"); lua_pushstring(L, name); status = docall(L, 1, 1); /* call 'require(name)' */ if (status == LUA_OK) lua_setglobal(L, name); /* global[name] = require return */ return report(L, status); } static const char *get_prompt (lua_State *L, int firstline) { const char *p; lua_getglobal(L, firstline ? "_PROMPT" : "_PROMPT2"); p = lua_tostring(L, -1); if (p == NULL) p = (firstline ? LUA_PROMPT : LUA_PROMPT2); lua_pop(L, 1); /* remove global */ return p; } /* mark in error messages for incomplete statements */ #define EOFMARK "" #define marklen (sizeof(EOFMARK)/sizeof(char) - 1) static int incomplete (lua_State *L, int status) { if (status == LUA_ERRSYNTAX) { size_t lmsg; const char *msg = lua_tolstring(L, -1, &lmsg); if (lmsg >= marklen && strcmp(msg + lmsg - marklen, EOFMARK) == 0) { lua_pop(L, 1); return 1; } } return 0; /* else... */ } static int pushline (lua_State *L, int firstline) { char buffer[LUA_MAXINPUT]; char *b = buffer; size_t l; const char *prmt = get_prompt(L, firstline); if (lua_readline(L, b, prmt) == 0) return 0; /* no input */ l = strlen(b); if (l > 0 && b[l-1] == '\n') /* line ends with newline? */ b[l-1] = '\0'; /* remove it */ if (firstline && b[0] == '=') /* first line starts with `=' ? */ lua_pushfstring(L, "return %s", b+1); /* change it to `return' */ else lua_pushstring(L, b); lua_freeline(L, b); return 1; } static int loadline (lua_State *L) { int status; lua_settop(L, 0); if (!pushline(L, 1)) return -1; /* no input */ for (;;) { /* repeat until gets a complete line */ size_t l; const char *line = lua_tolstring(L, 1, &l); status = luaL_loadbuffer(L, line, l, "=stdin"); if (!incomplete(L, status)) break; /* cannot try to add lines? */ if (!pushline(L, 0)) /* no more input? */ return -1; lua_pushliteral(L, "\n"); /* add a new line... */ lua_insert(L, -2); /* ...between the two lines */ lua_concat(L, 3); /* join them */ } lua_saveline(L, 1); lua_remove(L, 1); /* remove line */ return status; } static void dotty (lua_State *L) { int status; const char *oldprogname = progname; progname = NULL; while ((status = loadline(L)) != -1) { if (status == LUA_OK) status = docall(L, 0, LUA_MULTRET); report(L, status); if (status == LUA_OK && lua_gettop(L) > 0) { /* any result to print? */ luaL_checkstack(L, LUA_MINSTACK, "too many results to print"); lua_getglobal(L, "print"); lua_insert(L, 1); if (lua_pcall(L, lua_gettop(L)-1, 0, 0) != LUA_OK) l_message(progname, lua_pushfstring(L, "error calling " LUA_QL("print") " (%s)", lua_tostring(L, -1))); } } lua_settop(L, 0); /* clear stack */ luai_writeline(); progname = oldprogname; } static int handle_script (lua_State *L, char **argv, int n) { int status; const char *fname; int narg = getargs(L, argv, n); /* collect arguments */ lua_setglobal(L, "arg"); fname = argv[n]; if (strcmp(fname, "-") == 0 && strcmp(argv[n-1], "--") != 0) fname = NULL; /* stdin */ status = luaL_loadfile(L, fname); lua_insert(L, -(narg+1)); if (status == LUA_OK) status = docall(L, narg, LUA_MULTRET); else lua_pop(L, narg); return report(L, status); } /* check that argument has no extra characters at the end */ #define noextrachars(x) {if ((x)[2] != '\0') return -1;} /* indices of various argument indicators in array args */ #define has_i 0 /* -i */ #define has_v 1 /* -v */ #define has_e 2 /* -e */ #define has_E 3 /* -E */ #define num_has 4 /* number of 'has_*' */ static int collectargs (char **argv, int *args) { int i; for (i = 1; argv[i] != NULL; i++) { if (argv[i][0] != '-') /* not an option? */ return i; switch (argv[i][1]) { /* option */ case '-': noextrachars(argv[i]); return (argv[i+1] != NULL ? i+1 : 0); case '\0': return i; case 'E': args[has_E] = 1; break; case 'i': noextrachars(argv[i]); args[has_i] = 1; /* go through */ case 'v': noextrachars(argv[i]); args[has_v] = 1; break; case 'e': args[has_e] = 1; /* go through */ case 'l': /* both options need an argument */ if (argv[i][2] == '\0') { /* no concatenated argument? */ i++; /* try next 'argv' */ if (argv[i] == NULL || argv[i][0] == '-') return -(i - 1); /* no next argument or it is another option */ } break; default: /* invalid option; return its index... */ return -i; /* ...as a negative value */ } } return 0; } static int runargs (lua_State *L, char **argv, int n) { int i; for (i = 1; i < n; i++) { lua_assert(argv[i][0] == '-'); switch (argv[i][1]) { /* option */ case 'e': { const char *chunk = argv[i] + 2; if (*chunk == '\0') chunk = argv[++i]; lua_assert(chunk != NULL); if (dostring(L, chunk, "=(command line)") != LUA_OK) return 0; break; } case 'l': { const char *filename = argv[i] + 2; if (*filename == '\0') filename = argv[++i]; lua_assert(filename != NULL); if (dolibrary(L, filename) != LUA_OK) return 0; /* stop if file fails */ break; } default: break; } } return 1; } static int handle_luainit (lua_State *L) { const char *name = "=" LUA_INITVERSION; const char *init = getenv(name + 1); if (init == NULL) { name = "=" LUA_INIT; init = getenv(name + 1); /* try alternative name */ } if (init == NULL) return LUA_OK; else if (init[0] == '@') return dofile(L, init+1); else return dostring(L, init, name); } static int pmain (lua_State *L) { int argc = (int)lua_tointeger(L, 1); char **argv = (char **)lua_touserdata(L, 2); int script; int args[num_has]; args[has_i] = args[has_v] = args[has_e] = args[has_E] = 0; if (argv[0] && argv[0][0]) progname = argv[0]; script = collectargs(argv, args); if (script < 0) { /* invalid arg? */ print_usage(argv[-script]); return 0; } if (args[has_v]) print_version(); if (args[has_E]) { /* option '-E'? */ lua_pushboolean(L, 1); /* signal for libraries to ignore env. vars. */ lua_setfield(L, LUA_REGISTRYINDEX, "LUA_NOENV"); } /* open standard libraries */ luaL_checkversion(L); lua_gc(L, LUA_GCSTOP, 0); /* stop collector during initialization */ luaL_openlibs(L); /* open libraries */ lua_gc(L, LUA_GCRESTART, 0); if (!args[has_E] && handle_luainit(L) != LUA_OK) return 0; /* error running LUA_INIT */ /* execute arguments -e and -l */ if (!runargs(L, argv, (script > 0) ? script : argc)) return 0; /* execute main script (if there is one) */ if (script && handle_script(L, argv, script) != LUA_OK) return 0; if (args[has_i]) /* -i option? */ dotty(L); else if (script == 0 && !args[has_e] && !args[has_v]) { /* no arguments? */ if (lua_stdin_is_tty()) { print_version(); dotty(L); } else dofile(L, NULL); /* executes stdin as a file */ } lua_pushboolean(L, 1); /* signal no errors */ return 1; } int main (int argc, char **argv) { int status, result; lua_State *L = luaL_newstate(); /* create state */ if (L == NULL) { l_message(argv[0], "cannot create state: not enough memory"); return EXIT_FAILURE; } /* call 'pmain' in protected mode */ lua_pushcfunction(L, &pmain); lua_pushinteger(L, argc); /* 1st argument */ lua_pushlightuserdata(L, argv); /* 2nd argument */ status = lua_pcall(L, 2, 1, 0); result = lua_toboolean(L, -1); /* get result */ finalreport(L, status); lua_close(L); return (result && status == LUA_OK) ? EXIT_SUCCESS : EXIT_FAILURE; } fs-uae-2.2.3+dfsg/libfsemu/src/lua/lbaselib.c0000644000175000017500000002776012162366654021167 0ustar glaubitzglaubitz/* ** $Id: lbaselib.c,v 1.274 2012/04/27 14:13:19 roberto Exp $ ** Basic library ** See Copyright Notice in lua.h */ #include #include #include #include #define lbaselib_c #define LUA_LIB #include "lua.h" #include "lauxlib.h" #include "lualib.h" static int luaB_print (lua_State *L) { int n = lua_gettop(L); /* number of arguments */ int i; lua_getglobal(L, "tostring"); for (i=1; i<=n; i++) { const char *s; size_t l; lua_pushvalue(L, -1); /* function to be called */ lua_pushvalue(L, i); /* value to print */ lua_call(L, 1, 1); s = lua_tolstring(L, -1, &l); /* get result */ if (s == NULL) return luaL_error(L, LUA_QL("tostring") " must return a string to " LUA_QL("print")); if (i>1) luai_writestring("\t", 1); luai_writestring(s, l); lua_pop(L, 1); /* pop result */ } luai_writeline(); return 0; } #define SPACECHARS " \f\n\r\t\v" static int luaB_tonumber (lua_State *L) { if (lua_isnoneornil(L, 2)) { /* standard conversion */ int isnum; lua_Number n = lua_tonumberx(L, 1, &isnum); if (isnum) { lua_pushnumber(L, n); return 1; } /* else not a number; must be something */ luaL_checkany(L, 1); } else { size_t l; const char *s = luaL_checklstring(L, 1, &l); const char *e = s + l; /* end point for 's' */ int base = luaL_checkint(L, 2); int neg = 0; luaL_argcheck(L, 2 <= base && base <= 36, 2, "base out of range"); s += strspn(s, SPACECHARS); /* skip initial spaces */ if (*s == '-') { s++; neg = 1; } /* handle signal */ else if (*s == '+') s++; if (isalnum((unsigned char)*s)) { lua_Number n = 0; do { int digit = (isdigit((unsigned char)*s)) ? *s - '0' : toupper((unsigned char)*s) - 'A' + 10; if (digit >= base) break; /* invalid numeral; force a fail */ n = n * (lua_Number)base + (lua_Number)digit; s++; } while (isalnum((unsigned char)*s)); s += strspn(s, SPACECHARS); /* skip trailing spaces */ if (s == e) { /* no invalid trailing characters? */ lua_pushnumber(L, (neg) ? -n : n); return 1; } /* else not a number */ } /* else not a number */ } lua_pushnil(L); /* not a number */ return 1; } static int luaB_error (lua_State *L) { int level = luaL_optint(L, 2, 1); lua_settop(L, 1); if (lua_isstring(L, 1) && level > 0) { /* add extra information? */ luaL_where(L, level); lua_pushvalue(L, 1); lua_concat(L, 2); } return lua_error(L); } static int luaB_getmetatable (lua_State *L) { luaL_checkany(L, 1); if (!lua_getmetatable(L, 1)) { lua_pushnil(L); return 1; /* no metatable */ } luaL_getmetafield(L, 1, "__metatable"); return 1; /* returns either __metatable field (if present) or metatable */ } static int luaB_setmetatable (lua_State *L) { int t = lua_type(L, 2); luaL_checktype(L, 1, LUA_TTABLE); luaL_argcheck(L, t == LUA_TNIL || t == LUA_TTABLE, 2, "nil or table expected"); if (luaL_getmetafield(L, 1, "__metatable")) return luaL_error(L, "cannot change a protected metatable"); lua_settop(L, 2); lua_setmetatable(L, 1); return 1; } static int luaB_rawequal (lua_State *L) { luaL_checkany(L, 1); luaL_checkany(L, 2); lua_pushboolean(L, lua_rawequal(L, 1, 2)); return 1; } static int luaB_rawlen (lua_State *L) { int t = lua_type(L, 1); luaL_argcheck(L, t == LUA_TTABLE || t == LUA_TSTRING, 1, "table or string expected"); lua_pushinteger(L, lua_rawlen(L, 1)); return 1; } static int luaB_rawget (lua_State *L) { luaL_checktype(L, 1, LUA_TTABLE); luaL_checkany(L, 2); lua_settop(L, 2); lua_rawget(L, 1); return 1; } static int luaB_rawset (lua_State *L) { luaL_checktype(L, 1, LUA_TTABLE); luaL_checkany(L, 2); luaL_checkany(L, 3); lua_settop(L, 3); lua_rawset(L, 1); return 1; } static int luaB_collectgarbage (lua_State *L) { static const char *const opts[] = {"stop", "restart", "collect", "count", "step", "setpause", "setstepmul", "setmajorinc", "isrunning", "generational", "incremental", NULL}; static const int optsnum[] = {LUA_GCSTOP, LUA_GCRESTART, LUA_GCCOLLECT, LUA_GCCOUNT, LUA_GCSTEP, LUA_GCSETPAUSE, LUA_GCSETSTEPMUL, LUA_GCSETMAJORINC, LUA_GCISRUNNING, LUA_GCGEN, LUA_GCINC}; int o = optsnum[luaL_checkoption(L, 1, "collect", opts)]; int ex = luaL_optint(L, 2, 0); int res = lua_gc(L, o, ex); switch (o) { case LUA_GCCOUNT: { int b = lua_gc(L, LUA_GCCOUNTB, 0); lua_pushnumber(L, res + ((lua_Number)b/1024)); lua_pushinteger(L, b); return 2; } case LUA_GCSTEP: case LUA_GCISRUNNING: { lua_pushboolean(L, res); return 1; } default: { lua_pushinteger(L, res); return 1; } } } static int luaB_type (lua_State *L) { luaL_checkany(L, 1); lua_pushstring(L, luaL_typename(L, 1)); return 1; } static int pairsmeta (lua_State *L, const char *method, int iszero, lua_CFunction iter) { if (!luaL_getmetafield(L, 1, method)) { /* no metamethod? */ luaL_checktype(L, 1, LUA_TTABLE); /* argument must be a table */ lua_pushcfunction(L, iter); /* will return generator, */ lua_pushvalue(L, 1); /* state, */ if (iszero) lua_pushinteger(L, 0); /* and initial value */ else lua_pushnil(L); } else { lua_pushvalue(L, 1); /* argument 'self' to metamethod */ lua_call(L, 1, 3); /* get 3 values from metamethod */ } return 3; } static int luaB_next (lua_State *L) { luaL_checktype(L, 1, LUA_TTABLE); lua_settop(L, 2); /* create a 2nd argument if there isn't one */ if (lua_next(L, 1)) return 2; else { lua_pushnil(L); return 1; } } static int luaB_pairs (lua_State *L) { return pairsmeta(L, "__pairs", 0, luaB_next); } static int ipairsaux (lua_State *L) { int i = luaL_checkint(L, 2); luaL_checktype(L, 1, LUA_TTABLE); i++; /* next value */ lua_pushinteger(L, i); lua_rawgeti(L, 1, i); return (lua_isnil(L, -1)) ? 1 : 2; } static int luaB_ipairs (lua_State *L) { return pairsmeta(L, "__ipairs", 1, ipairsaux); } static int load_aux (lua_State *L, int status) { if (status == LUA_OK) return 1; else { lua_pushnil(L); lua_insert(L, -2); /* put before error message */ return 2; /* return nil plus error message */ } } static int luaB_loadfile (lua_State *L) { const char *fname = luaL_optstring(L, 1, NULL); const char *mode = luaL_optstring(L, 2, NULL); int env = !lua_isnone(L, 3); /* 'env' parameter? */ int status = luaL_loadfilex(L, fname, mode); if (status == LUA_OK && env) { /* 'env' parameter? */ lua_pushvalue(L, 3); lua_setupvalue(L, -2, 1); /* set it as 1st upvalue of loaded chunk */ } return load_aux(L, status); } /* ** {====================================================== ** Generic Read function ** ======================================================= */ /* ** reserved slot, above all arguments, to hold a copy of the returned ** string to avoid it being collected while parsed. 'load' has four ** optional arguments (chunk, source name, mode, and environment). */ #define RESERVEDSLOT 5 /* ** Reader for generic `load' function: `lua_load' uses the ** stack for internal stuff, so the reader cannot change the ** stack top. Instead, it keeps its resulting string in a ** reserved slot inside the stack. */ static const char *generic_reader (lua_State *L, void *ud, size_t *size) { (void)(ud); /* not used */ luaL_checkstack(L, 2, "too many nested functions"); lua_pushvalue(L, 1); /* get function */ lua_call(L, 0, 1); /* call it */ if (lua_isnil(L, -1)) { lua_pop(L, 1); /* pop result */ *size = 0; return NULL; } else if (!lua_isstring(L, -1)) luaL_error(L, "reader function must return a string"); lua_replace(L, RESERVEDSLOT); /* save string in reserved slot */ return lua_tolstring(L, RESERVEDSLOT, size); } static int luaB_load (lua_State *L) { int status; size_t l; int top = lua_gettop(L); const char *s = lua_tolstring(L, 1, &l); const char *mode = luaL_optstring(L, 3, "bt"); if (s != NULL) { /* loading a string? */ const char *chunkname = luaL_optstring(L, 2, s); status = luaL_loadbufferx(L, s, l, chunkname, mode); } else { /* loading from a reader function */ const char *chunkname = luaL_optstring(L, 2, "=(load)"); luaL_checktype(L, 1, LUA_TFUNCTION); lua_settop(L, RESERVEDSLOT); /* create reserved slot */ status = lua_load(L, generic_reader, NULL, chunkname, mode); } if (status == LUA_OK && top >= 4) { /* is there an 'env' argument */ lua_pushvalue(L, 4); /* environment for loaded function */ lua_setupvalue(L, -2, 1); /* set it as 1st upvalue */ } return load_aux(L, status); } /* }====================================================== */ static int dofilecont (lua_State *L) { return lua_gettop(L) - 1; } static int luaB_dofile (lua_State *L) { const char *fname = luaL_optstring(L, 1, NULL); lua_settop(L, 1); if (luaL_loadfile(L, fname) != LUA_OK) lua_error(L); lua_callk(L, 0, LUA_MULTRET, 0, dofilecont); return dofilecont(L); } static int luaB_assert (lua_State *L) { if (!lua_toboolean(L, 1)) return luaL_error(L, "%s", luaL_optstring(L, 2, "assertion failed!")); return lua_gettop(L); } static int luaB_select (lua_State *L) { int n = lua_gettop(L); if (lua_type(L, 1) == LUA_TSTRING && *lua_tostring(L, 1) == '#') { lua_pushinteger(L, n-1); return 1; } else { int i = luaL_checkint(L, 1); if (i < 0) i = n + i; else if (i > n) i = n; luaL_argcheck(L, 1 <= i, 1, "index out of range"); return n - i; } } static int finishpcall (lua_State *L, int status) { if (!lua_checkstack(L, 1)) { /* no space for extra boolean? */ lua_settop(L, 0); /* create space for return values */ lua_pushboolean(L, 0); lua_pushstring(L, "stack overflow"); return 2; /* return false, msg */ } lua_pushboolean(L, status); /* first result (status) */ lua_replace(L, 1); /* put first result in first slot */ return lua_gettop(L); } static int pcallcont (lua_State *L) { int status = lua_getctx(L, NULL); return finishpcall(L, (status == LUA_YIELD)); } static int luaB_pcall (lua_State *L) { int status; luaL_checkany(L, 1); lua_pushnil(L); lua_insert(L, 1); /* create space for status result */ status = lua_pcallk(L, lua_gettop(L) - 2, LUA_MULTRET, 0, 0, pcallcont); return finishpcall(L, (status == LUA_OK)); } static int luaB_xpcall (lua_State *L) { int status; int n = lua_gettop(L); luaL_argcheck(L, n >= 2, 2, "value expected"); lua_pushvalue(L, 1); /* exchange function... */ lua_copy(L, 2, 1); /* ...and error handler */ lua_replace(L, 2); status = lua_pcallk(L, n - 2, LUA_MULTRET, 1, 0, pcallcont); return finishpcall(L, (status == LUA_OK)); } static int luaB_tostring (lua_State *L) { luaL_checkany(L, 1); luaL_tolstring(L, 1, NULL); return 1; } static const luaL_Reg base_funcs[] = { {"assert", luaB_assert}, {"collectgarbage", luaB_collectgarbage}, #ifdef LUA_UNSAFE {"dofile", luaB_dofile}, #endif {"error", luaB_error}, {"getmetatable", luaB_getmetatable}, {"ipairs", luaB_ipairs}, #ifdef LUA_UNSAFE {"loadfile", luaB_loadfile}, #endif {"load", luaB_load}, #if defined(LUA_COMPAT_LOADSTRING) {"loadstring", luaB_load}, #endif {"next", luaB_next}, {"pairs", luaB_pairs}, {"pcall", luaB_pcall}, {"print", luaB_print}, {"rawequal", luaB_rawequal}, {"rawlen", luaB_rawlen}, {"rawget", luaB_rawget}, {"rawset", luaB_rawset}, {"select", luaB_select}, {"setmetatable", luaB_setmetatable}, {"tonumber", luaB_tonumber}, {"tostring", luaB_tostring}, {"type", luaB_type}, {"xpcall", luaB_xpcall}, {NULL, NULL} }; LUAMOD_API int luaopen_base (lua_State *L) { /* set global _G */ lua_pushglobaltable(L); lua_pushglobaltable(L); lua_setfield(L, -2, "_G"); /* open lib into global table */ luaL_setfuncs(L, base_funcs, 0); lua_pushliteral(L, LUA_VERSION); lua_setfield(L, -2, "_VERSION"); /* set global _VERSION */ return 1; } fs-uae-2.2.3+dfsg/libfsemu/src/lua/lgc.h0000644000175000017500000001202312162366654020146 0ustar glaubitzglaubitz/* ** $Id: lgc.h,v 2.56 2012/05/23 15:43:14 roberto Exp $ ** Garbage Collector ** See Copyright Notice in lua.h */ #ifndef lgc_h #define lgc_h #include "lobject.h" #include "lstate.h" /* ** Collectable objects may have one of three colors: white, which ** means the object is not marked; gray, which means the ** object is marked, but its references may be not marked; and ** black, which means that the object and all its references are marked. ** The main invariant of the garbage collector, while marking objects, ** is that a black object can never point to a white one. Moreover, ** any gray object must be in a "gray list" (gray, grayagain, weak, ** allweak, ephemeron) so that it can be visited again before finishing ** the collection cycle. These lists have no meaning when the invariant ** is not being enforced (e.g., sweep phase). */ /* how much to allocate before next GC step */ #if !defined(GCSTEPSIZE) /* ~100 small strings */ #define GCSTEPSIZE (cast_int(100 * sizeof(TString))) #endif /* ** Possible states of the Garbage Collector */ #define GCSpropagate 0 #define GCSatomic 1 #define GCSsweepstring 2 #define GCSsweepudata 3 #define GCSsweep 4 #define GCSpause 5 #define issweepphase(g) \ (GCSsweepstring <= (g)->gcstate && (g)->gcstate <= GCSsweep) #define isgenerational(g) ((g)->gckind == KGC_GEN) /* ** macro to tell when main invariant (white objects cannot point to black ** ones) must be kept. During a non-generational collection, the sweep ** phase may break the invariant, as objects turned white may point to ** still-black objects. The invariant is restored when sweep ends and ** all objects are white again. During a generational collection, the ** invariant must be kept all times. */ #define keepinvariant(g) (isgenerational(g) || g->gcstate <= GCSatomic) /* ** some useful bit tricks */ #define resetbits(x,m) ((x) &= cast(lu_byte, ~(m))) #define setbits(x,m) ((x) |= (m)) #define testbits(x,m) ((x) & (m)) #define bitmask(b) (1<<(b)) #define bit2mask(b1,b2) (bitmask(b1) | bitmask(b2)) #define l_setbit(x,b) setbits(x, bitmask(b)) #define resetbit(x,b) resetbits(x, bitmask(b)) #define testbit(x,b) testbits(x, bitmask(b)) /* Layout for bit use in `marked' field: */ #define WHITE0BIT 0 /* object is white (type 0) */ #define WHITE1BIT 1 /* object is white (type 1) */ #define BLACKBIT 2 /* object is black */ #define FINALIZEDBIT 3 /* object has been separated for finalization */ #define SEPARATED 4 /* object is in 'finobj' list or in 'tobefnz' */ #define FIXEDBIT 5 /* object is fixed (should not be collected) */ #define OLDBIT 6 /* object is old (only in generational mode) */ /* bit 7 is currently used by tests (luaL_checkmemory) */ #define WHITEBITS bit2mask(WHITE0BIT, WHITE1BIT) #define iswhite(x) testbits((x)->gch.marked, WHITEBITS) #define isblack(x) testbit((x)->gch.marked, BLACKBIT) #define isgray(x) /* neither white nor black */ \ (!testbits((x)->gch.marked, WHITEBITS | bitmask(BLACKBIT))) #define isold(x) testbit((x)->gch.marked, OLDBIT) /* MOVE OLD rule: whenever an object is moved to the beginning of a GC list, its old bit must be cleared */ #define resetoldbit(o) resetbit((o)->gch.marked, OLDBIT) #define otherwhite(g) (g->currentwhite ^ WHITEBITS) #define isdeadm(ow,m) (!(((m) ^ WHITEBITS) & (ow))) #define isdead(g,v) isdeadm(otherwhite(g), (v)->gch.marked) #define changewhite(x) ((x)->gch.marked ^= WHITEBITS) #define gray2black(x) l_setbit((x)->gch.marked, BLACKBIT) #define valiswhite(x) (iscollectable(x) && iswhite(gcvalue(x))) #define luaC_white(g) cast(lu_byte, (g)->currentwhite & WHITEBITS) #define luaC_condGC(L,c) \ {if (G(L)->GCdebt > 0) {c;}; condchangemem(L);} #define luaC_checkGC(L) luaC_condGC(L, luaC_step(L);) #define luaC_barrier(L,p,v) { if (valiswhite(v) && isblack(obj2gco(p))) \ luaC_barrier_(L,obj2gco(p),gcvalue(v)); } #define luaC_barrierback(L,p,v) { if (valiswhite(v) && isblack(obj2gco(p))) \ luaC_barrierback_(L,p); } #define luaC_objbarrier(L,p,o) \ { if (iswhite(obj2gco(o)) && isblack(obj2gco(p))) \ luaC_barrier_(L,obj2gco(p),obj2gco(o)); } #define luaC_objbarrierback(L,p,o) \ { if (iswhite(obj2gco(o)) && isblack(obj2gco(p))) luaC_barrierback_(L,p); } #define luaC_barrierproto(L,p,c) \ { if (isblack(obj2gco(p))) luaC_barrierproto_(L,p,c); } LUAI_FUNC void luaC_freeallobjects (lua_State *L); LUAI_FUNC void luaC_step (lua_State *L); LUAI_FUNC void luaC_forcestep (lua_State *L); LUAI_FUNC void luaC_runtilstate (lua_State *L, int statesmask); LUAI_FUNC void luaC_fullgc (lua_State *L, int isemergency); LUAI_FUNC GCObject *luaC_newobj (lua_State *L, int tt, size_t sz, GCObject **list, int offset); LUAI_FUNC void luaC_barrier_ (lua_State *L, GCObject *o, GCObject *v); LUAI_FUNC void luaC_barrierback_ (lua_State *L, GCObject *o); LUAI_FUNC void luaC_barrierproto_ (lua_State *L, Proto *p, Closure *c); LUAI_FUNC void luaC_checkfinalizer (lua_State *L, GCObject *o, Table *mt); LUAI_FUNC void luaC_checkupvalcolor (global_State *g, UpVal *uv); LUAI_FUNC void luaC_changemode (lua_State *L, int mode); #endif fs-uae-2.2.3+dfsg/libfsemu/src/lua/ltable.c0000644000175000017500000004015012162366654020641 0ustar glaubitzglaubitz/* ** $Id: ltable.c,v 2.71 2012/05/23 15:37:09 roberto Exp $ ** Lua tables (hash) ** See Copyright Notice in lua.h */ /* ** Implementation of tables (aka arrays, objects, or hash tables). ** Tables keep its elements in two parts: an array part and a hash part. ** Non-negative integer keys are all candidates to be kept in the array ** part. The actual size of the array is the largest `n' such that at ** least half the slots between 0 and n are in use. ** Hash uses a mix of chained scatter table with Brent's variation. ** A main invariant of these tables is that, if an element is not ** in its main position (i.e. the `original' position that its hash gives ** to it), then the colliding element is in its own main position. ** Hence even when the load factor reaches 100%, performance remains good. */ #include #define ltable_c #define LUA_CORE #include "lua.h" #include "ldebug.h" #include "ldo.h" #include "lgc.h" #include "lmem.h" #include "lobject.h" #include "lstate.h" #include "lstring.h" #include "ltable.h" #include "lvm.h" /* ** max size of array part is 2^MAXBITS */ #if LUAI_BITSINT >= 32 #define MAXBITS 30 #else #define MAXBITS (LUAI_BITSINT-2) #endif #define MAXASIZE (1 << MAXBITS) #define hashpow2(t,n) (gnode(t, lmod((n), sizenode(t)))) #define hashstr(t,str) hashpow2(t, (str)->tsv.hash) #define hashboolean(t,p) hashpow2(t, p) /* ** for some types, it is better to avoid modulus by power of 2, as ** they tend to have many 2 factors. */ #define hashmod(t,n) (gnode(t, ((n) % ((sizenode(t)-1)|1)))) #define hashpointer(t,p) hashmod(t, IntPoint(p)) #define dummynode (&dummynode_) #define isdummy(n) ((n) == dummynode) static const Node dummynode_ = { {NILCONSTANT}, /* value */ {{NILCONSTANT, NULL}} /* key */ }; /* ** hash for lua_Numbers */ static Node *hashnum (const Table *t, lua_Number n) { int i; luai_hashnum(i, n); if (i < 0) { if (cast(unsigned int, i) == 0u - i) /* use unsigned to avoid overflows */ i = 0; /* handle INT_MIN */ i = -i; /* must be a positive value */ } return hashmod(t, i); } /* ** returns the `main' position of an element in a table (that is, the index ** of its hash value) */ static Node *mainposition (const Table *t, const TValue *key) { switch (ttype(key)) { case LUA_TNUMBER: return hashnum(t, nvalue(key)); case LUA_TLNGSTR: { TString *s = rawtsvalue(key); if (s->tsv.extra == 0) { /* no hash? */ s->tsv.hash = luaS_hash(getstr(s), s->tsv.len, s->tsv.hash); s->tsv.extra = 1; /* now it has its hash */ } return hashstr(t, rawtsvalue(key)); } case LUA_TSHRSTR: return hashstr(t, rawtsvalue(key)); case LUA_TBOOLEAN: return hashboolean(t, bvalue(key)); case LUA_TLIGHTUSERDATA: return hashpointer(t, pvalue(key)); case LUA_TLCF: return hashpointer(t, fvalue(key)); default: return hashpointer(t, gcvalue(key)); } } /* ** returns the index for `key' if `key' is an appropriate key to live in ** the array part of the table, -1 otherwise. */ static int arrayindex (const TValue *key) { if (ttisnumber(key)) { lua_Number n = nvalue(key); int k; lua_number2int(k, n); if (luai_numeq(cast_num(k), n)) return k; } return -1; /* `key' did not match some condition */ } /* ** returns the index of a `key' for table traversals. First goes all ** elements in the array part, then elements in the hash part. The ** beginning of a traversal is signaled by -1. */ static int findindex (lua_State *L, Table *t, StkId key) { int i; if (ttisnil(key)) return -1; /* first iteration */ i = arrayindex(key); if (0 < i && i <= t->sizearray) /* is `key' inside array part? */ return i-1; /* yes; that's the index (corrected to C) */ else { Node *n = mainposition(t, key); for (;;) { /* check whether `key' is somewhere in the chain */ /* key may be dead already, but it is ok to use it in `next' */ if (luaV_rawequalobj(gkey(n), key) || (ttisdeadkey(gkey(n)) && iscollectable(key) && deadvalue(gkey(n)) == gcvalue(key))) { i = cast_int(n - gnode(t, 0)); /* key index in hash table */ /* hash elements are numbered after array ones */ return i + t->sizearray; } else n = gnext(n); if (n == NULL) luaG_runerror(L, "invalid key to " LUA_QL("next")); /* key not found */ } } } int luaH_next (lua_State *L, Table *t, StkId key) { int i = findindex(L, t, key); /* find original element */ for (i++; i < t->sizearray; i++) { /* try first array part */ if (!ttisnil(&t->array[i])) { /* a non-nil value? */ setnvalue(key, cast_num(i+1)); setobj2s(L, key+1, &t->array[i]); return 1; } } for (i -= t->sizearray; i < sizenode(t); i++) { /* then hash part */ if (!ttisnil(gval(gnode(t, i)))) { /* a non-nil value? */ setobj2s(L, key, gkey(gnode(t, i))); setobj2s(L, key+1, gval(gnode(t, i))); return 1; } } return 0; /* no more elements */ } /* ** {============================================================= ** Rehash ** ============================================================== */ static int computesizes (int nums[], int *narray) { int i; int twotoi; /* 2^i */ int a = 0; /* number of elements smaller than 2^i */ int na = 0; /* number of elements to go to array part */ int n = 0; /* optimal size for array part */ for (i = 0, twotoi = 1; twotoi/2 < *narray; i++, twotoi *= 2) { if (nums[i] > 0) { a += nums[i]; if (a > twotoi/2) { /* more than half elements present? */ n = twotoi; /* optimal size (till now) */ na = a; /* all elements smaller than n will go to array part */ } } if (a == *narray) break; /* all elements already counted */ } *narray = n; lua_assert(*narray/2 <= na && na <= *narray); return na; } static int countint (const TValue *key, int *nums) { int k = arrayindex(key); if (0 < k && k <= MAXASIZE) { /* is `key' an appropriate array index? */ nums[luaO_ceillog2(k)]++; /* count as such */ return 1; } else return 0; } static int numusearray (const Table *t, int *nums) { int lg; int ttlg; /* 2^lg */ int ause = 0; /* summation of `nums' */ int i = 1; /* count to traverse all array keys */ for (lg=0, ttlg=1; lg<=MAXBITS; lg++, ttlg*=2) { /* for each slice */ int lc = 0; /* counter */ int lim = ttlg; if (lim > t->sizearray) { lim = t->sizearray; /* adjust upper limit */ if (i > lim) break; /* no more elements to count */ } /* count elements in range (2^(lg-1), 2^lg] */ for (; i <= lim; i++) { if (!ttisnil(&t->array[i-1])) lc++; } nums[lg] += lc; ause += lc; } return ause; } static int numusehash (const Table *t, int *nums, int *pnasize) { int totaluse = 0; /* total number of elements */ int ause = 0; /* summation of `nums' */ int i = sizenode(t); while (i--) { Node *n = &t->node[i]; if (!ttisnil(gval(n))) { ause += countint(gkey(n), nums); totaluse++; } } *pnasize += ause; return totaluse; } static void setarrayvector (lua_State *L, Table *t, int size) { int i; luaM_reallocvector(L, t->array, t->sizearray, size, TValue); for (i=t->sizearray; iarray[i]); t->sizearray = size; } static void setnodevector (lua_State *L, Table *t, int size) { int lsize; if (size == 0) { /* no elements to hash part? */ t->node = cast(Node *, dummynode); /* use common `dummynode' */ lsize = 0; } else { int i; lsize = luaO_ceillog2(size); if (lsize > MAXBITS) luaG_runerror(L, "table overflow"); size = twoto(lsize); t->node = luaM_newvector(L, size, Node); for (i=0; ilsizenode = cast_byte(lsize); t->lastfree = gnode(t, size); /* all positions are free */ } void luaH_resize (lua_State *L, Table *t, int nasize, int nhsize) { int i; int oldasize = t->sizearray; int oldhsize = t->lsizenode; Node *nold = t->node; /* save old hash ... */ if (nasize > oldasize) /* array part must grow? */ setarrayvector(L, t, nasize); /* create new hash part with appropriate size */ setnodevector(L, t, nhsize); if (nasize < oldasize) { /* array part must shrink? */ t->sizearray = nasize; /* re-insert elements from vanishing slice */ for (i=nasize; iarray[i])) luaH_setint(L, t, i + 1, &t->array[i]); } /* shrink array */ luaM_reallocvector(L, t->array, oldasize, nasize, TValue); } /* re-insert elements from hash part */ for (i = twoto(oldhsize) - 1; i >= 0; i--) { Node *old = nold+i; if (!ttisnil(gval(old))) { /* doesn't need barrier/invalidate cache, as entry was already present in the table */ setobjt2t(L, luaH_set(L, t, gkey(old)), gval(old)); } } if (!isdummy(nold)) luaM_freearray(L, nold, cast(size_t, twoto(oldhsize))); /* free old array */ } void luaH_resizearray (lua_State *L, Table *t, int nasize) { int nsize = isdummy(t->node) ? 0 : sizenode(t); luaH_resize(L, t, nasize, nsize); } static void rehash (lua_State *L, Table *t, const TValue *ek) { int nasize, na; int nums[MAXBITS+1]; /* nums[i] = number of keys with 2^(i-1) < k <= 2^i */ int i; int totaluse; for (i=0; i<=MAXBITS; i++) nums[i] = 0; /* reset counts */ nasize = numusearray(t, nums); /* count keys in array part */ totaluse = nasize; /* all those keys are integer keys */ totaluse += numusehash(t, nums, &nasize); /* count keys in hash part */ /* count extra key */ nasize += countint(ek, nums); totaluse++; /* compute new size for array part */ na = computesizes(nums, &nasize); /* resize the table to new computed sizes */ luaH_resize(L, t, nasize, totaluse - na); } /* ** }============================================================= */ Table *luaH_new (lua_State *L) { Table *t = &luaC_newobj(L, LUA_TTABLE, sizeof(Table), NULL, 0)->h; t->metatable = NULL; t->flags = cast_byte(~0); t->array = NULL; t->sizearray = 0; setnodevector(L, t, 0); return t; } void luaH_free (lua_State *L, Table *t) { if (!isdummy(t->node)) luaM_freearray(L, t->node, cast(size_t, sizenode(t))); luaM_freearray(L, t->array, t->sizearray); luaM_free(L, t); } static Node *getfreepos (Table *t) { while (t->lastfree > t->node) { t->lastfree--; if (ttisnil(gkey(t->lastfree))) return t->lastfree; } return NULL; /* could not find a free place */ } /* ** inserts a new key into a hash table; first, check whether key's main ** position is free. If not, check whether colliding node is in its main ** position or not: if it is not, move colliding node to an empty place and ** put new key in its main position; otherwise (colliding node is in its main ** position), new key goes to an empty position. */ TValue *luaH_newkey (lua_State *L, Table *t, const TValue *key) { Node *mp; if (ttisnil(key)) luaG_runerror(L, "table index is nil"); else if (ttisnumber(key) && luai_numisnan(L, nvalue(key))) luaG_runerror(L, "table index is NaN"); mp = mainposition(t, key); if (!ttisnil(gval(mp)) || isdummy(mp)) { /* main position is taken? */ Node *othern; Node *n = getfreepos(t); /* get a free place */ if (n == NULL) { /* cannot find a free place? */ rehash(L, t, key); /* grow table */ /* whatever called 'newkey' take care of TM cache and GC barrier */ return luaH_set(L, t, key); /* insert key into grown table */ } lua_assert(!isdummy(n)); othern = mainposition(t, gkey(mp)); if (othern != mp) { /* is colliding node out of its main position? */ /* yes; move colliding node into free position */ while (gnext(othern) != mp) othern = gnext(othern); /* find previous */ gnext(othern) = n; /* redo the chain with `n' in place of `mp' */ *n = *mp; /* copy colliding node into free pos. (mp->next also goes) */ gnext(mp) = NULL; /* now `mp' is free */ setnilvalue(gval(mp)); } else { /* colliding node is in its own main position */ /* new node will go into free position */ gnext(n) = gnext(mp); /* chain new position */ gnext(mp) = n; mp = n; } } setobj2t(L, gkey(mp), key); luaC_barrierback(L, obj2gco(t), key); lua_assert(ttisnil(gval(mp))); return gval(mp); } /* ** search function for integers */ const TValue *luaH_getint (Table *t, int key) { /* (1 <= key && key <= t->sizearray) */ if (cast(unsigned int, key-1) < cast(unsigned int, t->sizearray)) return &t->array[key-1]; else { lua_Number nk = cast_num(key); Node *n = hashnum(t, nk); do { /* check whether `key' is somewhere in the chain */ if (ttisnumber(gkey(n)) && luai_numeq(nvalue(gkey(n)), nk)) return gval(n); /* that's it */ else n = gnext(n); } while (n); return luaO_nilobject; } } /* ** search function for short strings */ const TValue *luaH_getstr (Table *t, TString *key) { Node *n = hashstr(t, key); lua_assert(key->tsv.tt == LUA_TSHRSTR); do { /* check whether `key' is somewhere in the chain */ if (ttisshrstring(gkey(n)) && eqshrstr(rawtsvalue(gkey(n)), key)) return gval(n); /* that's it */ else n = gnext(n); } while (n); return luaO_nilobject; } /* ** main search function */ const TValue *luaH_get (Table *t, const TValue *key) { switch (ttype(key)) { case LUA_TNIL: return luaO_nilobject; case LUA_TSHRSTR: return luaH_getstr(t, rawtsvalue(key)); case LUA_TNUMBER: { int k; lua_Number n = nvalue(key); lua_number2int(k, n); if (luai_numeq(cast_num(k), nvalue(key))) /* index is int? */ return luaH_getint(t, k); /* use specialized version */ /* else go through */ } default: { Node *n = mainposition(t, key); do { /* check whether `key' is somewhere in the chain */ if (luaV_rawequalobj(gkey(n), key)) return gval(n); /* that's it */ else n = gnext(n); } while (n); return luaO_nilobject; } } } /* ** beware: when using this function you probably need to check a GC ** barrier and invalidate the TM cache. */ TValue *luaH_set (lua_State *L, Table *t, const TValue *key) { const TValue *p = luaH_get(t, key); if (p != luaO_nilobject) return cast(TValue *, p); else return luaH_newkey(L, t, key); } void luaH_setint (lua_State *L, Table *t, int key, TValue *value) { const TValue *p = luaH_getint(t, key); TValue *cell; if (p != luaO_nilobject) cell = cast(TValue *, p); else { TValue k; setnvalue(&k, cast_num(key)); cell = luaH_newkey(L, t, &k); } setobj2t(L, cell, value); } static int unbound_search (Table *t, unsigned int j) { unsigned int i = j; /* i is zero or a present index */ j++; /* find `i' and `j' such that i is present and j is not */ while (!ttisnil(luaH_getint(t, j))) { i = j; j *= 2; if (j > cast(unsigned int, MAX_INT)) { /* overflow? */ /* table was built with bad purposes: resort to linear search */ i = 1; while (!ttisnil(luaH_getint(t, i))) i++; return i - 1; } } /* now do a binary search between them */ while (j - i > 1) { unsigned int m = (i+j)/2; if (ttisnil(luaH_getint(t, m))) j = m; else i = m; } return i; } /* ** Try to find a boundary in table `t'. A `boundary' is an integer index ** such that t[i] is non-nil and t[i+1] is nil (and 0 if t[1] is nil). */ int luaH_getn (Table *t) { unsigned int j = t->sizearray; if (j > 0 && ttisnil(&t->array[j - 1])) { /* there is a boundary in the array part: (binary) search for it */ unsigned int i = 0; while (j - i > 1) { unsigned int m = (i+j)/2; if (ttisnil(&t->array[m - 1])) j = m; else i = m; } return i; } /* else must find a boundary in hash part */ else if (isdummy(t->node)) /* hash part is empty? */ return j; /* that is easy... */ else return unbound_search(t, j); } #if defined(LUA_DEBUG) Node *luaH_mainposition (const Table *t, const TValue *key) { return mainposition(t, key); } int luaH_isdummy (Node *n) { return isdummy(n); } #endif fs-uae-2.2.3+dfsg/libfsemu/src/lua/liolib.c0000644000175000017500000004114012162366654020650 0ustar glaubitzglaubitz/* ** $Id: liolib.c,v 2.108 2011/11/25 12:50:03 roberto Exp $ ** Standard I/O (and system) library ** See Copyright Notice in lua.h */ /* ** POSIX idiosyncrasy! ** This definition must come before the inclusion of 'stdio.h'; it ** should not affect non-POSIX systems */ #if !defined(_FILE_OFFSET_BITS) #define _FILE_OFFSET_BITS 64 #endif #include #include #include #include #define liolib_c #define LUA_LIB #include "lua.h" #include "lauxlib.h" #include "lualib.h" /* ** {====================================================== ** lua_popen spawns a new process connected to the current ** one through the file streams. ** ======================================================= */ #if !defined(lua_popen) /* { */ #if defined(LUA_USE_POPEN) /* { */ #define lua_popen(L,c,m) ((void)L, fflush(NULL), popen(c,m)) #define lua_pclose(L,file) ((void)L, pclose(file)) #elif defined(LUA_WIN) /* }{ */ #define lua_popen(L,c,m) ((void)L, _popen(c,m)) #define lua_pclose(L,file) ((void)L, _pclose(file)) #else /* }{ */ #define lua_popen(L,c,m) ((void)((void)c, m), \ luaL_error(L, LUA_QL("popen") " not supported"), (FILE*)0) #define lua_pclose(L,file) ((void)((void)L, file), -1) #endif /* } */ #endif /* } */ /* }====================================================== */ /* ** {====================================================== ** lua_fseek/lua_ftell: configuration for longer offsets ** ======================================================= */ #if !defined(lua_fseek) /* { */ #if defined(LUA_USE_POSIX) #define l_fseek(f,o,w) fseeko(f,o,w) #define l_ftell(f) ftello(f) #define l_seeknum off_t #elif defined(LUA_WIN) && !defined(_CRTIMP_TYPEINFO) \ && defined(_MSC_VER) && (_MSC_VER >= 1400) /* Windows (but not DDK) and Visual C++ 2005 or higher */ #define l_fseek(f,o,w) _fseeki64(f,o,w) #define l_ftell(f) _ftelli64(f) #define l_seeknum __int64 #else #define l_fseek(f,o,w) fseek(f,o,w) #define l_ftell(f) ftell(f) #define l_seeknum long #endif #endif /* } */ /* }====================================================== */ #define IO_PREFIX "_IO_" #define IO_INPUT (IO_PREFIX "input") #define IO_OUTPUT (IO_PREFIX "output") typedef luaL_Stream LStream; #define tolstream(L) ((LStream *)luaL_checkudata(L, 1, LUA_FILEHANDLE)) #define isclosed(p) ((p)->closef == NULL) static int io_type (lua_State *L) { LStream *p; luaL_checkany(L, 1); p = (LStream *)luaL_testudata(L, 1, LUA_FILEHANDLE); if (p == NULL) lua_pushnil(L); /* not a file */ else if (isclosed(p)) lua_pushliteral(L, "closed file"); else lua_pushliteral(L, "file"); return 1; } static int f_tostring (lua_State *L) { LStream *p = tolstream(L); if (isclosed(p)) lua_pushliteral(L, "file (closed)"); else lua_pushfstring(L, "file (%p)", p->f); return 1; } static FILE *tofile (lua_State *L) { LStream *p = tolstream(L); if (isclosed(p)) luaL_error(L, "attempt to use a closed file"); lua_assert(p->f); return p->f; } /* ** When creating file handles, always creates a `closed' file handle ** before opening the actual file; so, if there is a memory error, the ** file is not left opened. */ static LStream *newprefile (lua_State *L) { LStream *p = (LStream *)lua_newuserdata(L, sizeof(LStream)); p->closef = NULL; /* mark file handle as 'closed' */ luaL_setmetatable(L, LUA_FILEHANDLE); return p; } static int aux_close (lua_State *L) { LStream *p = tolstream(L); lua_CFunction cf = p->closef; p->closef = NULL; /* mark stream as closed */ return (*cf)(L); /* close it */ } static int io_close (lua_State *L) { if (lua_isnone(L, 1)) /* no argument? */ lua_getfield(L, LUA_REGISTRYINDEX, IO_OUTPUT); /* use standard output */ tofile(L); /* make sure argument is an open stream */ return aux_close(L); } static int f_gc (lua_State *L) { LStream *p = tolstream(L); if (!isclosed(p) && p->f != NULL) aux_close(L); /* ignore closed and incompletely open files */ return 0; } /* ** function to close regular files */ static int io_fclose (lua_State *L) { LStream *p = tolstream(L); int res = fclose(p->f); return luaL_fileresult(L, (res == 0), NULL); } static LStream *newfile (lua_State *L) { LStream *p = newprefile(L); p->f = NULL; p->closef = &io_fclose; return p; } static void opencheck (lua_State *L, const char *fname, const char *mode) { LStream *p = newfile(L); p->f = fopen(fname, mode); if (p->f == NULL) luaL_error(L, "cannot open file " LUA_QS " (%s)", fname, strerror(errno)); } static int io_open (lua_State *L) { const char *filename = luaL_checkstring(L, 1); const char *mode = luaL_optstring(L, 2, "r"); LStream *p = newfile(L); int i = 0; /* check whether 'mode' matches '[rwa]%+?b?' */ if (!(mode[i] != '\0' && strchr("rwa", mode[i++]) != NULL && (mode[i] != '+' || ++i) && /* skip if char is '+' */ (mode[i] != 'b' || ++i) && /* skip if char is 'b' */ (mode[i] == '\0'))) return luaL_error(L, "invalid mode " LUA_QS " (should match " LUA_QL("[rwa]%%+?b?") ")", mode); p->f = fopen(filename, mode); return (p->f == NULL) ? luaL_fileresult(L, 0, filename) : 1; } /* ** function to close 'popen' files */ static int io_pclose (lua_State *L) { LStream *p = tolstream(L); return luaL_execresult(L, lua_pclose(L, p->f)); } static int io_popen (lua_State *L) { const char *filename = luaL_checkstring(L, 1); const char *mode = luaL_optstring(L, 2, "r"); LStream *p = newprefile(L); p->f = lua_popen(L, filename, mode); p->closef = &io_pclose; return (p->f == NULL) ? luaL_fileresult(L, 0, filename) : 1; } static int io_tmpfile (lua_State *L) { LStream *p = newfile(L); p->f = tmpfile(); return (p->f == NULL) ? luaL_fileresult(L, 0, NULL) : 1; } static FILE *getiofile (lua_State *L, const char *findex) { LStream *p; lua_getfield(L, LUA_REGISTRYINDEX, findex); p = (LStream *)lua_touserdata(L, -1); if (isclosed(p)) luaL_error(L, "standard %s file is closed", findex + strlen(IO_PREFIX)); return p->f; } static int g_iofile (lua_State *L, const char *f, const char *mode) { if (!lua_isnoneornil(L, 1)) { const char *filename = lua_tostring(L, 1); if (filename) opencheck(L, filename, mode); else { tofile(L); /* check that it's a valid file handle */ lua_pushvalue(L, 1); } lua_setfield(L, LUA_REGISTRYINDEX, f); } /* return current value */ lua_getfield(L, LUA_REGISTRYINDEX, f); return 1; } static int io_input (lua_State *L) { return g_iofile(L, IO_INPUT, "r"); } static int io_output (lua_State *L) { return g_iofile(L, IO_OUTPUT, "w"); } static int io_readline (lua_State *L); static void aux_lines (lua_State *L, int toclose) { int i; int n = lua_gettop(L) - 1; /* number of arguments to read */ /* ensure that arguments will fit here and into 'io_readline' stack */ luaL_argcheck(L, n <= LUA_MINSTACK - 3, LUA_MINSTACK - 3, "too many options"); lua_pushvalue(L, 1); /* file handle */ lua_pushinteger(L, n); /* number of arguments to read */ lua_pushboolean(L, toclose); /* close/not close file when finished */ for (i = 1; i <= n; i++) lua_pushvalue(L, i + 1); /* copy arguments */ lua_pushcclosure(L, io_readline, 3 + n); } static int f_lines (lua_State *L) { tofile(L); /* check that it's a valid file handle */ aux_lines(L, 0); return 1; } static int io_lines (lua_State *L) { int toclose; if (lua_isnone(L, 1)) lua_pushnil(L); /* at least one argument */ if (lua_isnil(L, 1)) { /* no file name? */ lua_getfield(L, LUA_REGISTRYINDEX, IO_INPUT); /* get default input */ lua_replace(L, 1); /* put it at index 1 */ tofile(L); /* check that it's a valid file handle */ toclose = 0; /* do not close it after iteration */ } else { /* open a new file */ const char *filename = luaL_checkstring(L, 1); opencheck(L, filename, "r"); lua_replace(L, 1); /* put file at index 1 */ toclose = 1; /* close it after iteration */ } aux_lines(L, toclose); return 1; } /* ** {====================================================== ** READ ** ======================================================= */ static int read_number (lua_State *L, FILE *f) { lua_Number d; if (fscanf(f, LUA_NUMBER_SCAN, &d) == 1) { lua_pushnumber(L, d); return 1; } else { lua_pushnil(L); /* "result" to be removed */ return 0; /* read fails */ } } static int test_eof (lua_State *L, FILE *f) { int c = getc(f); ungetc(c, f); lua_pushlstring(L, NULL, 0); return (c != EOF); } static int read_line (lua_State *L, FILE *f, int chop) { luaL_Buffer b; luaL_buffinit(L, &b); for (;;) { size_t l; char *p = luaL_prepbuffer(&b); if (fgets(p, LUAL_BUFFERSIZE, f) == NULL) { /* eof? */ luaL_pushresult(&b); /* close buffer */ return (lua_rawlen(L, -1) > 0); /* check whether read something */ } l = strlen(p); if (l == 0 || p[l-1] != '\n') luaL_addsize(&b, l); else { luaL_addsize(&b, l - chop); /* chop 'eol' if needed */ luaL_pushresult(&b); /* close buffer */ return 1; /* read at least an `eol' */ } } } #define MAX_SIZE_T (~(size_t)0) static void read_all (lua_State *L, FILE *f) { size_t rlen = LUAL_BUFFERSIZE; /* how much to read in each cycle */ luaL_Buffer b; luaL_buffinit(L, &b); for (;;) { char *p = luaL_prepbuffsize(&b, rlen); size_t nr = fread(p, sizeof(char), rlen, f); luaL_addsize(&b, nr); if (nr < rlen) break; /* eof? */ else if (rlen <= (MAX_SIZE_T / 4)) /* avoid buffers too large */ rlen *= 2; /* double buffer size at each iteration */ } luaL_pushresult(&b); /* close buffer */ } static int read_chars (lua_State *L, FILE *f, size_t n) { size_t nr; /* number of chars actually read */ char *p; luaL_Buffer b; luaL_buffinit(L, &b); p = luaL_prepbuffsize(&b, n); /* prepare buffer to read whole block */ nr = fread(p, sizeof(char), n, f); /* try to read 'n' chars */ luaL_addsize(&b, nr); luaL_pushresult(&b); /* close buffer */ return (nr > 0); /* true iff read something */ } static int g_read (lua_State *L, FILE *f, int first) { int nargs = lua_gettop(L) - 1; int success; int n; clearerr(f); if (nargs == 0) { /* no arguments? */ success = read_line(L, f, 1); n = first+1; /* to return 1 result */ } else { /* ensure stack space for all results and for auxlib's buffer */ luaL_checkstack(L, nargs+LUA_MINSTACK, "too many arguments"); success = 1; for (n = first; nargs-- && success; n++) { if (lua_type(L, n) == LUA_TNUMBER) { size_t l = (size_t)lua_tointeger(L, n); success = (l == 0) ? test_eof(L, f) : read_chars(L, f, l); } else { const char *p = lua_tostring(L, n); luaL_argcheck(L, p && p[0] == '*', n, "invalid option"); switch (p[1]) { case 'n': /* number */ success = read_number(L, f); break; case 'l': /* line */ success = read_line(L, f, 1); break; case 'L': /* line with end-of-line */ success = read_line(L, f, 0); break; case 'a': /* file */ read_all(L, f); /* read entire file */ success = 1; /* always success */ break; default: return luaL_argerror(L, n, "invalid format"); } } } } if (ferror(f)) return luaL_fileresult(L, 0, NULL); if (!success) { lua_pop(L, 1); /* remove last result */ lua_pushnil(L); /* push nil instead */ } return n - first; } static int io_read (lua_State *L) { return g_read(L, getiofile(L, IO_INPUT), 1); } static int f_read (lua_State *L) { return g_read(L, tofile(L), 2); } static int io_readline (lua_State *L) { LStream *p = (LStream *)lua_touserdata(L, lua_upvalueindex(1)); int i; int n = (int)lua_tointeger(L, lua_upvalueindex(2)); if (isclosed(p)) /* file is already closed? */ return luaL_error(L, "file is already closed"); lua_settop(L , 1); for (i = 1; i <= n; i++) /* push arguments to 'g_read' */ lua_pushvalue(L, lua_upvalueindex(3 + i)); n = g_read(L, p->f, 2); /* 'n' is number of results */ lua_assert(n > 0); /* should return at least a nil */ if (!lua_isnil(L, -n)) /* read at least one value? */ return n; /* return them */ else { /* first result is nil: EOF or error */ if (n > 1) { /* is there error information? */ /* 2nd result is error message */ return luaL_error(L, "%s", lua_tostring(L, -n + 1)); } if (lua_toboolean(L, lua_upvalueindex(3))) { /* generator created file? */ lua_settop(L, 0); lua_pushvalue(L, lua_upvalueindex(1)); aux_close(L); /* close it */ } return 0; } } /* }====================================================== */ static int g_write (lua_State *L, FILE *f, int arg) { int nargs = lua_gettop(L) - arg; int status = 1; for (; nargs--; arg++) { if (lua_type(L, arg) == LUA_TNUMBER) { /* optimization: could be done exactly as for strings */ status = status && fprintf(f, LUA_NUMBER_FMT, lua_tonumber(L, arg)) > 0; } else { size_t l; const char *s = luaL_checklstring(L, arg, &l); status = status && (fwrite(s, sizeof(char), l, f) == l); } } if (status) return 1; /* file handle already on stack top */ else return luaL_fileresult(L, status, NULL); } static int io_write (lua_State *L) { return g_write(L, getiofile(L, IO_OUTPUT), 1); } static int f_write (lua_State *L) { FILE *f = tofile(L); lua_pushvalue(L, 1); /* push file at the stack top (to be returned) */ return g_write(L, f, 2); } static int f_seek (lua_State *L) { static const int mode[] = {SEEK_SET, SEEK_CUR, SEEK_END}; static const char *const modenames[] = {"set", "cur", "end", NULL}; FILE *f = tofile(L); int op = luaL_checkoption(L, 2, "cur", modenames); lua_Number p3 = luaL_optnumber(L, 3, 0); l_seeknum offset = (l_seeknum)p3; luaL_argcheck(L, (lua_Number)offset == p3, 3, "not an integer in proper range"); op = l_fseek(f, offset, mode[op]); if (op) return luaL_fileresult(L, 0, NULL); /* error */ else { lua_pushnumber(L, (lua_Number)l_ftell(f)); return 1; } } static int f_setvbuf (lua_State *L) { static const int mode[] = {_IONBF, _IOFBF, _IOLBF}; static const char *const modenames[] = {"no", "full", "line", NULL}; FILE *f = tofile(L); int op = luaL_checkoption(L, 2, NULL, modenames); lua_Integer sz = luaL_optinteger(L, 3, LUAL_BUFFERSIZE); int res = setvbuf(f, NULL, mode[op], sz); return luaL_fileresult(L, res == 0, NULL); } static int io_flush (lua_State *L) { return luaL_fileresult(L, fflush(getiofile(L, IO_OUTPUT)) == 0, NULL); } static int f_flush (lua_State *L) { return luaL_fileresult(L, fflush(tofile(L)) == 0, NULL); } /* ** functions for 'io' library */ static const luaL_Reg iolib[] = { {"close", io_close}, {"flush", io_flush}, {"input", io_input}, {"lines", io_lines}, {"open", io_open}, {"output", io_output}, {"popen", io_popen}, {"read", io_read}, {"tmpfile", io_tmpfile}, {"type", io_type}, {"write", io_write}, {NULL, NULL} }; /* ** methods for file handles */ static const luaL_Reg flib[] = { {"close", io_close}, {"flush", f_flush}, {"lines", f_lines}, {"read", f_read}, {"seek", f_seek}, {"setvbuf", f_setvbuf}, {"write", f_write}, {"__gc", f_gc}, {"__tostring", f_tostring}, {NULL, NULL} }; static void createmeta (lua_State *L) { luaL_newmetatable(L, LUA_FILEHANDLE); /* create metatable for file handles */ lua_pushvalue(L, -1); /* push metatable */ lua_setfield(L, -2, "__index"); /* metatable.__index = metatable */ luaL_setfuncs(L, flib, 0); /* add file methods to new metatable */ lua_pop(L, 1); /* pop new metatable */ } /* ** function to (not) close the standard files stdin, stdout, and stderr */ static int io_noclose (lua_State *L) { LStream *p = tolstream(L); p->closef = &io_noclose; /* keep file opened */ lua_pushnil(L); lua_pushliteral(L, "cannot close standard file"); return 2; } static void createstdfile (lua_State *L, FILE *f, const char *k, const char *fname) { LStream *p = newprefile(L); p->f = f; p->closef = &io_noclose; if (k != NULL) { lua_pushvalue(L, -1); lua_setfield(L, LUA_REGISTRYINDEX, k); /* add file to registry */ } lua_setfield(L, -2, fname); /* add file to module */ } LUAMOD_API int luaopen_io (lua_State *L) { luaL_newlib(L, iolib); /* new module */ createmeta(L); /* create (and set) default files */ createstdfile(L, stdin, IO_INPUT, "stdin"); createstdfile(L, stdout, IO_OUTPUT, "stdout"); createstdfile(L, stderr, NULL, "stderr"); return 1; } fs-uae-2.2.3+dfsg/libfsemu/src/lua/ldo.c0000644000175000017500000004741612162366654020170 0ustar glaubitzglaubitz/* ** $Id: ldo.c,v 2.105 2012/06/08 15:14:04 roberto Exp $ ** Stack and Call structure of Lua ** See Copyright Notice in lua.h */ #include #include #include #define ldo_c #define LUA_CORE #include "lua.h" #include "lapi.h" #include "ldebug.h" #include "ldo.h" #include "lfunc.h" #include "lgc.h" #include "lmem.h" #include "lobject.h" #include "lopcodes.h" #include "lparser.h" #include "lstate.h" #include "lstring.h" #include "ltable.h" #include "ltm.h" #include "lundump.h" #include "lvm.h" #include "lzio.h" /* ** {====================================================== ** Error-recovery functions ** ======================================================= */ /* ** LUAI_THROW/LUAI_TRY define how Lua does exception handling. By ** default, Lua handles errors with exceptions when compiling as ** C++ code, with _longjmp/_setjmp when asked to use them, and with ** longjmp/setjmp otherwise. */ #if !defined(LUAI_THROW) #if defined(__cplusplus) && !defined(LUA_USE_LONGJMP) /* C++ exceptions */ #define LUAI_THROW(L,c) throw(c) #define LUAI_TRY(L,c,a) \ try { a } catch(...) { if ((c)->status == 0) (c)->status = -1; } #define luai_jmpbuf int /* dummy variable */ #elif defined(LUA_USE_ULONGJMP) /* in Unix, try _longjmp/_setjmp (more efficient) */ #define LUAI_THROW(L,c) _longjmp((c)->b, 1) #define LUAI_TRY(L,c,a) if (_setjmp((c)->b) == 0) { a } #define luai_jmpbuf jmp_buf #else /* default handling with long jumps */ #define LUAI_THROW(L,c) longjmp((c)->b, 1) #define LUAI_TRY(L,c,a) if (setjmp((c)->b) == 0) { a } #define luai_jmpbuf jmp_buf #endif #endif /* chain list of long jump buffers */ struct lua_longjmp { struct lua_longjmp *previous; luai_jmpbuf b; volatile int status; /* error code */ }; static void seterrorobj (lua_State *L, int errcode, StkId oldtop) { switch (errcode) { case LUA_ERRMEM: { /* memory error? */ setsvalue2s(L, oldtop, G(L)->memerrmsg); /* reuse preregistered msg. */ break; } case LUA_ERRERR: { setsvalue2s(L, oldtop, luaS_newliteral(L, "error in error handling")); break; } default: { setobjs2s(L, oldtop, L->top - 1); /* error message on current top */ break; } } L->top = oldtop + 1; } l_noret luaD_throw (lua_State *L, int errcode) { if (L->errorJmp) { /* thread has an error handler? */ L->errorJmp->status = errcode; /* set status */ LUAI_THROW(L, L->errorJmp); /* jump to it */ } else { /* thread has no error handler */ L->status = cast_byte(errcode); /* mark it as dead */ if (G(L)->mainthread->errorJmp) { /* main thread has a handler? */ setobjs2s(L, G(L)->mainthread->top++, L->top - 1); /* copy error obj. */ luaD_throw(G(L)->mainthread, errcode); /* re-throw in main thread */ } else { /* no handler at all; abort */ if (G(L)->panic) { /* panic function? */ lua_unlock(L); G(L)->panic(L); /* call it (last chance to jump out) */ } abort(); } } } int luaD_rawrunprotected (lua_State *L, Pfunc f, void *ud) { unsigned short oldnCcalls = L->nCcalls; struct lua_longjmp lj; lj.status = LUA_OK; lj.previous = L->errorJmp; /* chain new error handler */ L->errorJmp = &lj; LUAI_TRY(L, &lj, (*f)(L, ud); ); L->errorJmp = lj.previous; /* restore old error handler */ L->nCcalls = oldnCcalls; return lj.status; } /* }====================================================== */ static void correctstack (lua_State *L, TValue *oldstack) { CallInfo *ci; GCObject *up; L->top = (L->top - oldstack) + L->stack; for (up = L->openupval; up != NULL; up = up->gch.next) gco2uv(up)->v = (gco2uv(up)->v - oldstack) + L->stack; for (ci = L->ci; ci != NULL; ci = ci->previous) { ci->top = (ci->top - oldstack) + L->stack; ci->func = (ci->func - oldstack) + L->stack; if (isLua(ci)) ci->u.l.base = (ci->u.l.base - oldstack) + L->stack; } } /* some space for error handling */ #define ERRORSTACKSIZE (LUAI_MAXSTACK + 200) void luaD_reallocstack (lua_State *L, int newsize) { TValue *oldstack = L->stack; int lim = L->stacksize; lua_assert(newsize <= LUAI_MAXSTACK || newsize == ERRORSTACKSIZE); lua_assert(L->stack_last - L->stack == L->stacksize - EXTRA_STACK); luaM_reallocvector(L, L->stack, L->stacksize, newsize, TValue); for (; lim < newsize; lim++) setnilvalue(L->stack + lim); /* erase new segment */ L->stacksize = newsize; L->stack_last = L->stack + newsize - EXTRA_STACK; correctstack(L, oldstack); } void luaD_growstack (lua_State *L, int n) { int size = L->stacksize; if (size > LUAI_MAXSTACK) /* error after extra size? */ luaD_throw(L, LUA_ERRERR); else { int needed = cast_int(L->top - L->stack) + n + EXTRA_STACK; int newsize = 2 * size; if (newsize > LUAI_MAXSTACK) newsize = LUAI_MAXSTACK; if (newsize < needed) newsize = needed; if (newsize > LUAI_MAXSTACK) { /* stack overflow? */ luaD_reallocstack(L, ERRORSTACKSIZE); luaG_runerror(L, "stack overflow"); } else luaD_reallocstack(L, newsize); } } static int stackinuse (lua_State *L) { CallInfo *ci; StkId lim = L->top; for (ci = L->ci; ci != NULL; ci = ci->previous) { lua_assert(ci->top <= L->stack_last); if (lim < ci->top) lim = ci->top; } return cast_int(lim - L->stack) + 1; /* part of stack in use */ } void luaD_shrinkstack (lua_State *L) { int inuse = stackinuse(L); int goodsize = inuse + (inuse / 8) + 2*EXTRA_STACK; if (goodsize > LUAI_MAXSTACK) goodsize = LUAI_MAXSTACK; if (inuse > LUAI_MAXSTACK || /* handling stack overflow? */ goodsize >= L->stacksize) /* would grow instead of shrink? */ condmovestack(L); /* don't change stack (change only for debugging) */ else luaD_reallocstack(L, goodsize); /* shrink it */ } void luaD_hook (lua_State *L, int event, int line) { lua_Hook hook = L->hook; if (hook && L->allowhook) { CallInfo *ci = L->ci; ptrdiff_t top = savestack(L, L->top); ptrdiff_t ci_top = savestack(L, ci->top); lua_Debug ar; ar.event = event; ar.currentline = line; ar.i_ci = ci; luaD_checkstack(L, LUA_MINSTACK); /* ensure minimum stack size */ ci->top = L->top + LUA_MINSTACK; lua_assert(ci->top <= L->stack_last); L->allowhook = 0; /* cannot call hooks inside a hook */ ci->callstatus |= CIST_HOOKED; lua_unlock(L); (*hook)(L, &ar); lua_lock(L); lua_assert(!L->allowhook); L->allowhook = 1; ci->top = restorestack(L, ci_top); L->top = restorestack(L, top); ci->callstatus &= ~CIST_HOOKED; } } static void callhook (lua_State *L, CallInfo *ci) { int hook = LUA_HOOKCALL; ci->u.l.savedpc++; /* hooks assume 'pc' is already incremented */ if (isLua(ci->previous) && GET_OPCODE(*(ci->previous->u.l.savedpc - 1)) == OP_TAILCALL) { ci->callstatus |= CIST_TAIL; hook = LUA_HOOKTAILCALL; } luaD_hook(L, hook, -1); ci->u.l.savedpc--; /* correct 'pc' */ } static StkId adjust_varargs (lua_State *L, Proto *p, int actual) { int i; int nfixargs = p->numparams; StkId base, fixed; lua_assert(actual >= nfixargs); /* move fixed parameters to final position */ fixed = L->top - actual; /* first fixed argument */ base = L->top; /* final position of first argument */ for (i=0; itop++, fixed + i); setnilvalue(fixed + i); } return base; } static StkId tryfuncTM (lua_State *L, StkId func) { const TValue *tm = luaT_gettmbyobj(L, func, TM_CALL); StkId p; ptrdiff_t funcr = savestack(L, func); if (!ttisfunction(tm)) luaG_typeerror(L, func, "call"); /* Open a hole inside the stack at `func' */ for (p = L->top; p > func; p--) setobjs2s(L, p, p-1); incr_top(L); func = restorestack(L, funcr); /* previous call may change stack */ setobj2s(L, func, tm); /* tag method is the new function to be called */ return func; } #define next_ci(L) (L->ci = (L->ci->next ? L->ci->next : luaE_extendCI(L))) /* ** returns true if function has been executed (C function) */ int luaD_precall (lua_State *L, StkId func, int nresults) { lua_CFunction f; CallInfo *ci; int n; /* number of arguments (Lua) or returns (C) */ ptrdiff_t funcr = savestack(L, func); switch (ttype(func)) { case LUA_TLCF: /* light C function */ f = fvalue(func); goto Cfunc; case LUA_TCCL: { /* C closure */ f = clCvalue(func)->f; Cfunc: luaD_checkstack(L, LUA_MINSTACK); /* ensure minimum stack size */ ci = next_ci(L); /* now 'enter' new function */ ci->nresults = nresults; ci->func = restorestack(L, funcr); ci->top = L->top + LUA_MINSTACK; lua_assert(ci->top <= L->stack_last); ci->callstatus = 0; if (L->hookmask & LUA_MASKCALL) luaD_hook(L, LUA_HOOKCALL, -1); lua_unlock(L); n = (*f)(L); /* do the actual call */ lua_lock(L); api_checknelems(L, n); luaD_poscall(L, L->top - n); return 1; } case LUA_TLCL: { /* Lua function: prepare its call */ StkId base; Proto *p = clLvalue(func)->p; luaD_checkstack(L, p->maxstacksize); func = restorestack(L, funcr); n = cast_int(L->top - func) - 1; /* number of real arguments */ for (; n < p->numparams; n++) setnilvalue(L->top++); /* complete missing arguments */ base = (!p->is_vararg) ? func + 1 : adjust_varargs(L, p, n); ci = next_ci(L); /* now 'enter' new function */ ci->nresults = nresults; ci->func = func; ci->u.l.base = base; ci->top = base + p->maxstacksize; lua_assert(ci->top <= L->stack_last); ci->u.l.savedpc = p->code; /* starting point */ ci->callstatus = CIST_LUA; L->top = ci->top; if (L->hookmask & LUA_MASKCALL) callhook(L, ci); return 0; } default: { /* not a function */ func = tryfuncTM(L, func); /* retry with 'function' tag method */ return luaD_precall(L, func, nresults); /* now it must be a function */ } } } int luaD_poscall (lua_State *L, StkId firstResult) { StkId res; int wanted, i; CallInfo *ci = L->ci; if (L->hookmask & (LUA_MASKRET | LUA_MASKLINE)) { if (L->hookmask & LUA_MASKRET) { ptrdiff_t fr = savestack(L, firstResult); /* hook may change stack */ luaD_hook(L, LUA_HOOKRET, -1); firstResult = restorestack(L, fr); } L->oldpc = ci->previous->u.l.savedpc; /* 'oldpc' for caller function */ } res = ci->func; /* res == final position of 1st result */ wanted = ci->nresults; L->ci = ci = ci->previous; /* back to caller */ /* move results to correct place */ for (i = wanted; i != 0 && firstResult < L->top; i--) setobjs2s(L, res++, firstResult++); while (i-- > 0) setnilvalue(res++); L->top = res; return (wanted - LUA_MULTRET); /* 0 iff wanted == LUA_MULTRET */ } /* ** Call a function (C or Lua). The function to be called is at *func. ** The arguments are on the stack, right after the function. ** When returns, all the results are on the stack, starting at the original ** function position. */ void luaD_call (lua_State *L, StkId func, int nResults, int allowyield) { if (++L->nCcalls >= LUAI_MAXCCALLS) { if (L->nCcalls == LUAI_MAXCCALLS) luaG_runerror(L, "C stack overflow"); else if (L->nCcalls >= (LUAI_MAXCCALLS + (LUAI_MAXCCALLS>>3))) luaD_throw(L, LUA_ERRERR); /* error while handing stack error */ } if (!allowyield) L->nny++; if (!luaD_precall(L, func, nResults)) /* is a Lua function? */ luaV_execute(L); /* call it */ if (!allowyield) L->nny--; L->nCcalls--; luaC_checkGC(L); } static void finishCcall (lua_State *L) { CallInfo *ci = L->ci; int n; lua_assert(ci->u.c.k != NULL); /* must have a continuation */ lua_assert(L->nny == 0); /* finish 'lua_callk' */ adjustresults(L, ci->nresults); /* call continuation function */ if (!(ci->callstatus & CIST_STAT)) /* no call status? */ ci->u.c.status = LUA_YIELD; /* 'default' status */ lua_assert(ci->u.c.status != LUA_OK); ci->callstatus = (ci->callstatus & ~(CIST_YPCALL | CIST_STAT)) | CIST_YIELDED; lua_unlock(L); n = (*ci->u.c.k)(L); lua_lock(L); api_checknelems(L, n); /* finish 'luaD_precall' */ luaD_poscall(L, L->top - n); } static void unroll (lua_State *L, void *ud) { UNUSED(ud); for (;;) { if (L->ci == &L->base_ci) /* stack is empty? */ return; /* coroutine finished normally */ if (!isLua(L->ci)) /* C function? */ finishCcall(L); else { /* Lua function */ luaV_finishOp(L); /* finish interrupted instruction */ luaV_execute(L); /* execute down to higher C 'boundary' */ } } } /* ** check whether thread has a suspended protected call */ static CallInfo *findpcall (lua_State *L) { CallInfo *ci; for (ci = L->ci; ci != NULL; ci = ci->previous) { /* search for a pcall */ if (ci->callstatus & CIST_YPCALL) return ci; } return NULL; /* no pending pcall */ } static int recover (lua_State *L, int status) { StkId oldtop; CallInfo *ci = findpcall(L); if (ci == NULL) return 0; /* no recovery point */ /* "finish" luaD_pcall */ oldtop = restorestack(L, ci->extra); luaF_close(L, oldtop); seterrorobj(L, status, oldtop); L->ci = ci; L->allowhook = ci->u.c.old_allowhook; L->nny = 0; /* should be zero to be yieldable */ luaD_shrinkstack(L); L->errfunc = ci->u.c.old_errfunc; ci->callstatus |= CIST_STAT; /* call has error status */ ci->u.c.status = status; /* (here it is) */ return 1; /* continue running the coroutine */ } /* ** signal an error in the call to 'resume', not in the execution of the ** coroutine itself. (Such errors should not be handled by any coroutine ** error handler and should not kill the coroutine.) */ static l_noret resume_error (lua_State *L, const char *msg, StkId firstArg) { L->top = firstArg; /* remove args from the stack */ setsvalue2s(L, L->top, luaS_new(L, msg)); /* push error message */ incr_top(L); luaD_throw(L, -1); /* jump back to 'lua_resume' */ } /* ** do the work for 'lua_resume' in protected mode */ static void resume (lua_State *L, void *ud) { int nCcalls = L->nCcalls; StkId firstArg = cast(StkId, ud); CallInfo *ci = L->ci; if (nCcalls >= LUAI_MAXCCALLS) resume_error(L, "C stack overflow", firstArg); if (L->status == LUA_OK) { /* may be starting a coroutine */ if (ci != &L->base_ci) /* not in base level? */ resume_error(L, "cannot resume non-suspended coroutine", firstArg); /* coroutine is in base level; start running it */ if (!luaD_precall(L, firstArg - 1, LUA_MULTRET)) /* Lua function? */ luaV_execute(L); /* call it */ } else if (L->status != LUA_YIELD) resume_error(L, "cannot resume dead coroutine", firstArg); else { /* resuming from previous yield */ L->status = LUA_OK; ci->func = restorestack(L, ci->extra); if (isLua(ci)) /* yielded inside a hook? */ luaV_execute(L); /* just continue running Lua code */ else { /* 'common' yield */ if (ci->u.c.k != NULL) { /* does it have a continuation? */ int n; ci->u.c.status = LUA_YIELD; /* 'default' status */ ci->callstatus |= CIST_YIELDED; lua_unlock(L); n = (*ci->u.c.k)(L); /* call continuation */ lua_lock(L); api_checknelems(L, n); firstArg = L->top - n; /* yield results come from continuation */ } luaD_poscall(L, firstArg); /* finish 'luaD_precall' */ } unroll(L, NULL); } lua_assert(nCcalls == L->nCcalls); } LUA_API int lua_resume (lua_State *L, lua_State *from, int nargs) { int status; lua_lock(L); luai_userstateresume(L, nargs); L->nCcalls = (from) ? from->nCcalls + 1 : 1; L->nny = 0; /* allow yields */ api_checknelems(L, (L->status == LUA_OK) ? nargs + 1 : nargs); status = luaD_rawrunprotected(L, resume, L->top - nargs); if (status == -1) /* error calling 'lua_resume'? */ status = LUA_ERRRUN; else { /* yield or regular error */ while (status != LUA_OK && status != LUA_YIELD) { /* error? */ if (recover(L, status)) /* recover point? */ status = luaD_rawrunprotected(L, unroll, NULL); /* run continuation */ else { /* unrecoverable error */ L->status = cast_byte(status); /* mark thread as `dead' */ seterrorobj(L, status, L->top); L->ci->top = L->top; break; } } lua_assert(status == L->status); } L->nny = 1; /* do not allow yields */ L->nCcalls--; lua_assert(L->nCcalls == ((from) ? from->nCcalls : 0)); lua_unlock(L); return status; } LUA_API int lua_yieldk (lua_State *L, int nresults, int ctx, lua_CFunction k) { CallInfo *ci = L->ci; luai_userstateyield(L, nresults); lua_lock(L); api_checknelems(L, nresults); if (L->nny > 0) { if (L != G(L)->mainthread) luaG_runerror(L, "attempt to yield across metamethod/C-call boundary"); else luaG_runerror(L, "attempt to yield from outside a coroutine"); } L->status = LUA_YIELD; ci->extra = savestack(L, ci->func); /* save current 'func' */ if (isLua(ci)) { /* inside a hook? */ api_check(L, k == NULL, "hooks cannot continue after yielding"); } else { if ((ci->u.c.k = k) != NULL) /* is there a continuation? */ ci->u.c.ctx = ctx; /* save context */ ci->func = L->top - nresults - 1; /* protect stack below results */ luaD_throw(L, LUA_YIELD); } lua_assert(ci->callstatus & CIST_HOOKED); /* must be inside a hook */ lua_unlock(L); return 0; /* return to 'luaD_hook' */ } int luaD_pcall (lua_State *L, Pfunc func, void *u, ptrdiff_t old_top, ptrdiff_t ef) { int status; CallInfo *old_ci = L->ci; lu_byte old_allowhooks = L->allowhook; unsigned short old_nny = L->nny; ptrdiff_t old_errfunc = L->errfunc; L->errfunc = ef; status = luaD_rawrunprotected(L, func, u); if (status != LUA_OK) { /* an error occurred? */ StkId oldtop = restorestack(L, old_top); luaF_close(L, oldtop); /* close possible pending closures */ seterrorobj(L, status, oldtop); L->ci = old_ci; L->allowhook = old_allowhooks; L->nny = old_nny; luaD_shrinkstack(L); } L->errfunc = old_errfunc; return status; } /* ** Execute a protected parser. */ struct SParser { /* data to `f_parser' */ ZIO *z; Mbuffer buff; /* dynamic structure used by the scanner */ Dyndata dyd; /* dynamic structures used by the parser */ const char *mode; const char *name; }; static void checkmode (lua_State *L, const char *mode, const char *x) { if (mode && strchr(mode, x[0]) == NULL) { luaO_pushfstring(L, "attempt to load a %s chunk (mode is " LUA_QS ")", x, mode); luaD_throw(L, LUA_ERRSYNTAX); } } static void f_parser (lua_State *L, void *ud) { int i; Closure *cl; struct SParser *p = cast(struct SParser *, ud); int c = zgetc(p->z); /* read first character */ if (c == LUA_SIGNATURE[0]) { checkmode(L, p->mode, "binary"); cl = luaU_undump(L, p->z, &p->buff, p->name); } else { checkmode(L, p->mode, "text"); cl = luaY_parser(L, p->z, &p->buff, &p->dyd, p->name, c); } lua_assert(cl->l.nupvalues == cl->l.p->sizeupvalues); for (i = 0; i < cl->l.nupvalues; i++) { /* initialize upvalues */ UpVal *up = luaF_newupval(L); cl->l.upvals[i] = up; luaC_objbarrier(L, cl, up); } } int luaD_protectedparser (lua_State *L, ZIO *z, const char *name, const char *mode) { struct SParser p; int status; L->nny++; /* cannot yield during parsing */ p.z = z; p.name = name; p.mode = mode; p.dyd.actvar.arr = NULL; p.dyd.actvar.size = 0; p.dyd.gt.arr = NULL; p.dyd.gt.size = 0; p.dyd.label.arr = NULL; p.dyd.label.size = 0; luaZ_initbuffer(L, &p.buff); status = luaD_pcall(L, f_parser, &p, savestack(L, L->top), L->errfunc); luaZ_freebuffer(L, &p.buff); luaM_freearray(L, p.dyd.actvar.arr, p.dyd.actvar.size); luaM_freearray(L, p.dyd.gt.arr, p.dyd.gt.size); luaM_freearray(L, p.dyd.label.arr, p.dyd.label.size); L->nny--; return status; } fs-uae-2.2.3+dfsg/libfsemu/src/lua/lundump.h0000644000175000017500000000140012162366654021062 0ustar glaubitzglaubitz/* ** $Id: lundump.h,v 1.39 2012/05/08 13:53:33 roberto Exp $ ** load precompiled Lua chunks ** See Copyright Notice in lua.h */ #ifndef lundump_h #define lundump_h #include "lobject.h" #include "lzio.h" /* load one chunk; from lundump.c */ LUAI_FUNC Closure* luaU_undump (lua_State* L, ZIO* Z, Mbuffer* buff, const char* name); /* make header; from lundump.c */ LUAI_FUNC void luaU_header (lu_byte* h); /* dump one chunk; from ldump.c */ LUAI_FUNC int luaU_dump (lua_State* L, const Proto* f, lua_Writer w, void* data, int strip); /* data to catch conversion errors */ #define LUAC_TAIL "\x19\x93\r\n\x1a\n" /* size in bytes of header of binary files */ #define LUAC_HEADERSIZE (sizeof(LUA_SIGNATURE)-sizeof(char)+2+6+sizeof(LUAC_TAIL)-sizeof(char)) #endif fs-uae-2.2.3+dfsg/libfsemu/src/lua/lzio.h0000644000175000017500000000271212162366654020362 0ustar glaubitzglaubitz/* ** $Id: lzio.h,v 1.26 2011/07/15 12:48:03 roberto Exp $ ** Buffered streams ** See Copyright Notice in lua.h */ #ifndef lzio_h #define lzio_h #include "lua.h" #include "lmem.h" #define EOZ (-1) /* end of stream */ typedef struct Zio ZIO; #define zgetc(z) (((z)->n--)>0 ? cast_uchar(*(z)->p++) : luaZ_fill(z)) typedef struct Mbuffer { char *buffer; size_t n; size_t buffsize; } Mbuffer; #define luaZ_initbuffer(L, buff) ((buff)->buffer = NULL, (buff)->buffsize = 0) #define luaZ_buffer(buff) ((buff)->buffer) #define luaZ_sizebuffer(buff) ((buff)->buffsize) #define luaZ_bufflen(buff) ((buff)->n) #define luaZ_resetbuffer(buff) ((buff)->n = 0) #define luaZ_resizebuffer(L, buff, size) \ (luaM_reallocvector(L, (buff)->buffer, (buff)->buffsize, size, char), \ (buff)->buffsize = size) #define luaZ_freebuffer(L, buff) luaZ_resizebuffer(L, buff, 0) LUAI_FUNC char *luaZ_openspace (lua_State *L, Mbuffer *buff, size_t n); LUAI_FUNC void luaZ_init (lua_State *L, ZIO *z, lua_Reader reader, void *data); LUAI_FUNC size_t luaZ_read (ZIO* z, void* b, size_t n); /* read next n bytes */ /* --------- Private Part ------------------ */ struct Zio { size_t n; /* bytes still unread */ const char *p; /* current position in buffer */ lua_Reader reader; /* reader function */ void* data; /* additional data */ lua_State *L; /* Lua state (for reader) */ }; LUAI_FUNC int luaZ_fill (ZIO *z); #endif fs-uae-2.2.3+dfsg/libfsemu/src/lua/loadlib.c0000644000175000017500000005204212162366654021007 0ustar glaubitzglaubitz/* ** $Id: loadlib.c,v 1.111 2012/05/30 12:33:44 roberto Exp $ ** Dynamic library loader for Lua ** See Copyright Notice in lua.h ** ** This module contains an implementation of loadlib for Unix systems ** that have dlfcn, an implementation for Windows, and a stub for other ** systems. */ /* ** if needed, includes windows header before everything else */ #if defined(_WIN32) #include #endif #include #include #define loadlib_c #define LUA_LIB #include "lua.h" #include "lauxlib.h" #include "lualib.h" /* ** LUA_PATH and LUA_CPATH are the names of the environment ** variables that Lua check to set its paths. */ #if !defined(LUA_PATH) #define LUA_PATH "LUA_PATH" #endif #if !defined(LUA_CPATH) #define LUA_CPATH "LUA_CPATH" #endif #define LUA_PATHSUFFIX "_" LUA_VERSION_MAJOR "_" LUA_VERSION_MINOR #define LUA_PATHVERSION LUA_PATH LUA_PATHSUFFIX #define LUA_CPATHVERSION LUA_CPATH LUA_PATHSUFFIX /* ** LUA_PATH_SEP is the character that separates templates in a path. ** LUA_PATH_MARK is the string that marks the substitution points in a ** template. ** LUA_EXEC_DIR in a Windows path is replaced by the executable's ** directory. ** LUA_IGMARK is a mark to ignore all before it when building the ** luaopen_ function name. */ #if !defined (LUA_PATH_SEP) #define LUA_PATH_SEP ";" #endif #if !defined (LUA_PATH_MARK) #define LUA_PATH_MARK "?" #endif #if !defined (LUA_EXEC_DIR) #define LUA_EXEC_DIR "!" #endif #if !defined (LUA_IGMARK) #define LUA_IGMARK "-" #endif /* ** LUA_CSUBSEP is the character that replaces dots in submodule names ** when searching for a C loader. ** LUA_LSUBSEP is the character that replaces dots in submodule names ** when searching for a Lua loader. */ #if !defined(LUA_CSUBSEP) #define LUA_CSUBSEP LUA_DIRSEP #endif #if !defined(LUA_LSUBSEP) #define LUA_LSUBSEP LUA_DIRSEP #endif /* prefix for open functions in C libraries */ #define LUA_POF "luaopen_" /* separator for open functions in C libraries */ #define LUA_OFSEP "_" /* table (in the registry) that keeps handles for all loaded C libraries */ #define CLIBS "_CLIBS" #define LIB_FAIL "open" /* error codes for ll_loadfunc */ #define ERRLIB 1 #define ERRFUNC 2 #define setprogdir(L) ((void)0) /* ** system-dependent functions */ static void ll_unloadlib (void *lib); static void *ll_load (lua_State *L, const char *path, int seeglb); static lua_CFunction ll_sym (lua_State *L, void *lib, const char *sym); #if defined(LUA_USE_DLOPEN) /* ** {======================================================================== ** This is an implementation of loadlib based on the dlfcn interface. ** The dlfcn interface is available in Linux, SunOS, Solaris, IRIX, FreeBSD, ** NetBSD, AIX 4.2, HPUX 11, and probably most other Unix flavors, at least ** as an emulation layer on top of native functions. ** ========================================================================= */ #include static void ll_unloadlib (void *lib) { dlclose(lib); } static void *ll_load (lua_State *L, const char *path, int seeglb) { void *lib = dlopen(path, RTLD_NOW | (seeglb ? RTLD_GLOBAL : RTLD_LOCAL)); if (lib == NULL) lua_pushstring(L, dlerror()); return lib; } static lua_CFunction ll_sym (lua_State *L, void *lib, const char *sym) { lua_CFunction f = (lua_CFunction)dlsym(lib, sym); if (f == NULL) lua_pushstring(L, dlerror()); return f; } /* }====================================================== */ #elif defined(LUA_DL_DLL) /* ** {====================================================================== ** This is an implementation of loadlib for Windows using native functions. ** ======================================================================= */ #undef setprogdir /* ** optional flags for LoadLibraryEx */ #if !defined(LUA_LLE_FLAGS) #define LUA_LLE_FLAGS 0 #endif static void setprogdir (lua_State *L) { char buff[MAX_PATH + 1]; char *lb; DWORD nsize = sizeof(buff)/sizeof(char); DWORD n = GetModuleFileNameA(NULL, buff, nsize); if (n == 0 || n == nsize || (lb = strrchr(buff, '\\')) == NULL) luaL_error(L, "unable to get ModuleFileName"); else { *lb = '\0'; luaL_gsub(L, lua_tostring(L, -1), LUA_EXEC_DIR, buff); lua_remove(L, -2); /* remove original string */ } } static void pusherror (lua_State *L) { int error = GetLastError(); char buffer[128]; if (FormatMessageA(FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_FROM_SYSTEM, NULL, error, 0, buffer, sizeof(buffer)/sizeof(char), NULL)) lua_pushstring(L, buffer); else lua_pushfstring(L, "system error %d\n", error); } static void ll_unloadlib (void *lib) { FreeLibrary((HMODULE)lib); } static void *ll_load (lua_State *L, const char *path, int seeglb) { HMODULE lib = LoadLibraryExA(path, NULL, LUA_LLE_FLAGS); (void)(seeglb); /* not used: symbols are 'global' by default */ if (lib == NULL) pusherror(L); return lib; } static lua_CFunction ll_sym (lua_State *L, void *lib, const char *sym) { lua_CFunction f = (lua_CFunction)GetProcAddress((HMODULE)lib, sym); if (f == NULL) pusherror(L); return f; } /* }====================================================== */ #else /* ** {====================================================== ** Fallback for other systems ** ======================================================= */ #undef LIB_FAIL #define LIB_FAIL "absent" #define DLMSG "dynamic libraries not enabled; check your Lua installation" static void ll_unloadlib (void *lib) { (void)(lib); /* not used */ } static void *ll_load (lua_State *L, const char *path, int seeglb) { (void)(path); (void)(seeglb); /* not used */ lua_pushliteral(L, DLMSG); return NULL; } static lua_CFunction ll_sym (lua_State *L, void *lib, const char *sym) { (void)(lib); (void)(sym); /* not used */ lua_pushliteral(L, DLMSG); return NULL; } /* }====================================================== */ #endif static void *ll_checkclib (lua_State *L, const char *path) { void *plib; lua_getfield(L, LUA_REGISTRYINDEX, CLIBS); lua_getfield(L, -1, path); plib = lua_touserdata(L, -1); /* plib = CLIBS[path] */ lua_pop(L, 2); /* pop CLIBS table and 'plib' */ return plib; } static void ll_addtoclib (lua_State *L, const char *path, void *plib) { lua_getfield(L, LUA_REGISTRYINDEX, CLIBS); lua_pushlightuserdata(L, plib); lua_pushvalue(L, -1); lua_setfield(L, -3, path); /* CLIBS[path] = plib */ lua_rawseti(L, -2, luaL_len(L, -2) + 1); /* CLIBS[#CLIBS + 1] = plib */ lua_pop(L, 1); /* pop CLIBS table */ } /* ** __gc tag method for CLIBS table: calls 'll_unloadlib' for all lib ** handles in list CLIBS */ static int gctm (lua_State *L) { int n = luaL_len(L, 1); for (; n >= 1; n--) { /* for each handle, in reverse order */ lua_rawgeti(L, 1, n); /* get handle CLIBS[n] */ ll_unloadlib(lua_touserdata(L, -1)); lua_pop(L, 1); /* pop handle */ } return 0; } static int ll_loadfunc (lua_State *L, const char *path, const char *sym) { void *reg = ll_checkclib(L, path); /* check loaded C libraries */ if (reg == NULL) { /* must load library? */ reg = ll_load(L, path, *sym == '*'); if (reg == NULL) return ERRLIB; /* unable to load library */ ll_addtoclib(L, path, reg); } if (*sym == '*') { /* loading only library (no function)? */ lua_pushboolean(L, 1); /* return 'true' */ return 0; /* no errors */ } else { lua_CFunction f = ll_sym(L, reg, sym); if (f == NULL) return ERRFUNC; /* unable to find function */ lua_pushcfunction(L, f); /* else create new function */ return 0; /* no errors */ } } static int ll_loadlib (lua_State *L) { const char *path = luaL_checkstring(L, 1); const char *init = luaL_checkstring(L, 2); int stat = ll_loadfunc(L, path, init); if (stat == 0) /* no errors? */ return 1; /* return the loaded function */ else { /* error; error message is on stack top */ lua_pushnil(L); lua_insert(L, -2); lua_pushstring(L, (stat == ERRLIB) ? LIB_FAIL : "init"); return 3; /* return nil, error message, and where */ } } /* ** {====================================================== ** 'require' function ** ======================================================= */ static int readable (const char *filename) { FILE *f = fopen(filename, "r"); /* try to open file */ if (f == NULL) return 0; /* open failed */ fclose(f); return 1; } static const char *pushnexttemplate (lua_State *L, const char *path) { const char *l; while (*path == *LUA_PATH_SEP) path++; /* skip separators */ if (*path == '\0') return NULL; /* no more templates */ l = strchr(path, *LUA_PATH_SEP); /* find next separator */ if (l == NULL) l = path + strlen(path); lua_pushlstring(L, path, l - path); /* template */ return l; } static const char *searchpath (lua_State *L, const char *name, const char *path, const char *sep, const char *dirsep) { luaL_Buffer msg; /* to build error message */ luaL_buffinit(L, &msg); if (*sep != '\0') /* non-empty separator? */ name = luaL_gsub(L, name, sep, dirsep); /* replace it by 'dirsep' */ while ((path = pushnexttemplate(L, path)) != NULL) { const char *filename = luaL_gsub(L, lua_tostring(L, -1), LUA_PATH_MARK, name); lua_remove(L, -2); /* remove path template */ if (readable(filename)) /* does file exist and is readable? */ return filename; /* return that file name */ lua_pushfstring(L, "\n\tno file " LUA_QS, filename); lua_remove(L, -2); /* remove file name */ luaL_addvalue(&msg); /* concatenate error msg. entry */ } luaL_pushresult(&msg); /* create error message */ return NULL; /* not found */ } static int ll_searchpath (lua_State *L) { const char *f = searchpath(L, luaL_checkstring(L, 1), luaL_checkstring(L, 2), luaL_optstring(L, 3, "."), luaL_optstring(L, 4, LUA_DIRSEP)); if (f != NULL) return 1; else { /* error message is on top of the stack */ lua_pushnil(L); lua_insert(L, -2); return 2; /* return nil + error message */ } } static const char *findfile (lua_State *L, const char *name, const char *pname, const char *dirsep) { const char *path; lua_getfield(L, lua_upvalueindex(1), pname); path = lua_tostring(L, -1); if (path == NULL) luaL_error(L, LUA_QL("package.%s") " must be a string", pname); return searchpath(L, name, path, ".", dirsep); } static int checkload (lua_State *L, int stat, const char *filename) { if (stat) { /* module loaded successfully? */ lua_pushstring(L, filename); /* will be 2nd argument to module */ return 2; /* return open function and file name */ } else return luaL_error(L, "error loading module " LUA_QS " from file " LUA_QS ":\n\t%s", lua_tostring(L, 1), filename, lua_tostring(L, -1)); } static int searcher_Lua (lua_State *L) { const char *filename; const char *name = luaL_checkstring(L, 1); filename = findfile(L, name, "path", LUA_LSUBSEP); if (filename == NULL) return 1; /* module not found in this path */ return checkload(L, (luaL_loadfile(L, filename) == LUA_OK), filename); } static int loadfunc (lua_State *L, const char *filename, const char *modname) { const char *funcname; const char *mark; modname = luaL_gsub(L, modname, ".", LUA_OFSEP); mark = strchr(modname, *LUA_IGMARK); if (mark) { int stat; funcname = lua_pushlstring(L, modname, mark - modname); funcname = lua_pushfstring(L, LUA_POF"%s", funcname); stat = ll_loadfunc(L, filename, funcname); if (stat != ERRFUNC) return stat; modname = mark + 1; /* else go ahead and try old-style name */ } funcname = lua_pushfstring(L, LUA_POF"%s", modname); return ll_loadfunc(L, filename, funcname); } static int searcher_C (lua_State *L) { const char *name = luaL_checkstring(L, 1); const char *filename = findfile(L, name, "cpath", LUA_CSUBSEP); if (filename == NULL) return 1; /* module not found in this path */ return checkload(L, (loadfunc(L, filename, name) == 0), filename); } static int searcher_Croot (lua_State *L) { const char *filename; const char *name = luaL_checkstring(L, 1); const char *p = strchr(name, '.'); int stat; if (p == NULL) return 0; /* is root */ lua_pushlstring(L, name, p - name); filename = findfile(L, lua_tostring(L, -1), "cpath", LUA_CSUBSEP); if (filename == NULL) return 1; /* root not found */ if ((stat = loadfunc(L, filename, name)) != 0) { if (stat != ERRFUNC) return checkload(L, 0, filename); /* real error */ else { /* open function not found */ lua_pushfstring(L, "\n\tno module " LUA_QS " in file " LUA_QS, name, filename); return 1; } } lua_pushstring(L, filename); /* will be 2nd argument to module */ return 2; } static int searcher_preload (lua_State *L) { const char *name = luaL_checkstring(L, 1); lua_getfield(L, LUA_REGISTRYINDEX, "_PRELOAD"); lua_getfield(L, -1, name); if (lua_isnil(L, -1)) /* not found? */ lua_pushfstring(L, "\n\tno field package.preload['%s']", name); return 1; } static void findloader (lua_State *L, const char *name) { int i; luaL_Buffer msg; /* to build error message */ luaL_buffinit(L, &msg); lua_getfield(L, lua_upvalueindex(1), "searchers"); /* will be at index 3 */ if (!lua_istable(L, 3)) luaL_error(L, LUA_QL("package.searchers") " must be a table"); /* iterate over available searchers to find a loader */ for (i = 1; ; i++) { lua_rawgeti(L, 3, i); /* get a searcher */ if (lua_isnil(L, -1)) { /* no more searchers? */ lua_pop(L, 1); /* remove nil */ luaL_pushresult(&msg); /* create error message */ luaL_error(L, "module " LUA_QS " not found:%s", name, lua_tostring(L, -1)); } lua_pushstring(L, name); lua_call(L, 1, 2); /* call it */ if (lua_isfunction(L, -2)) /* did it find a loader? */ return; /* module loader found */ else if (lua_isstring(L, -2)) { /* searcher returned error message? */ lua_pop(L, 1); /* remove extra return */ luaL_addvalue(&msg); /* concatenate error message */ } else lua_pop(L, 2); /* remove both returns */ } } static int ll_require (lua_State *L) { const char *name = luaL_checkstring(L, 1); lua_settop(L, 1); /* _LOADED table will be at index 2 */ lua_getfield(L, LUA_REGISTRYINDEX, "_LOADED"); lua_getfield(L, 2, name); /* _LOADED[name] */ if (lua_toboolean(L, -1)) /* is it there? */ return 1; /* package is already loaded */ /* else must load package */ lua_pop(L, 1); /* remove 'getfield' result */ findloader(L, name); lua_pushstring(L, name); /* pass name as argument to module loader */ lua_insert(L, -2); /* name is 1st argument (before search data) */ lua_call(L, 2, 1); /* run loader to load module */ if (!lua_isnil(L, -1)) /* non-nil return? */ lua_setfield(L, 2, name); /* _LOADED[name] = returned value */ lua_getfield(L, 2, name); if (lua_isnil(L, -1)) { /* module did not set a value? */ lua_pushboolean(L, 1); /* use true as result */ lua_pushvalue(L, -1); /* extra copy to be returned */ lua_setfield(L, 2, name); /* _LOADED[name] = true */ } return 1; } /* }====================================================== */ /* ** {====================================================== ** 'module' function ** ======================================================= */ #if defined(LUA_COMPAT_MODULE) /* ** changes the environment variable of calling function */ static void set_env (lua_State *L) { lua_Debug ar; if (lua_getstack(L, 1, &ar) == 0 || lua_getinfo(L, "f", &ar) == 0 || /* get calling function */ lua_iscfunction(L, -1)) luaL_error(L, LUA_QL("module") " not called from a Lua function"); lua_pushvalue(L, -2); /* copy new environment table to top */ lua_setupvalue(L, -2, 1); lua_pop(L, 1); /* remove function */ } static void dooptions (lua_State *L, int n) { int i; for (i = 2; i <= n; i++) { if (lua_isfunction(L, i)) { /* avoid 'calling' extra info. */ lua_pushvalue(L, i); /* get option (a function) */ lua_pushvalue(L, -2); /* module */ lua_call(L, 1, 0); } } } static void modinit (lua_State *L, const char *modname) { const char *dot; lua_pushvalue(L, -1); lua_setfield(L, -2, "_M"); /* module._M = module */ lua_pushstring(L, modname); lua_setfield(L, -2, "_NAME"); dot = strrchr(modname, '.'); /* look for last dot in module name */ if (dot == NULL) dot = modname; else dot++; /* set _PACKAGE as package name (full module name minus last part) */ lua_pushlstring(L, modname, dot - modname); lua_setfield(L, -2, "_PACKAGE"); } static int ll_module (lua_State *L) { const char *modname = luaL_checkstring(L, 1); int lastarg = lua_gettop(L); /* last parameter */ luaL_pushmodule(L, modname, 1); /* get/create module table */ /* check whether table already has a _NAME field */ lua_getfield(L, -1, "_NAME"); if (!lua_isnil(L, -1)) /* is table an initialized module? */ lua_pop(L, 1); else { /* no; initialize it */ lua_pop(L, 1); modinit(L, modname); } lua_pushvalue(L, -1); set_env(L); dooptions(L, lastarg); return 1; } static int ll_seeall (lua_State *L) { luaL_checktype(L, 1, LUA_TTABLE); if (!lua_getmetatable(L, 1)) { lua_createtable(L, 0, 1); /* create new metatable */ lua_pushvalue(L, -1); lua_setmetatable(L, 1); } lua_pushglobaltable(L); lua_setfield(L, -2, "__index"); /* mt.__index = _G */ return 0; } #endif /* }====================================================== */ /* auxiliary mark (for internal use) */ #define AUXMARK "\1" /* ** return registry.LUA_NOENV as a boolean */ static int noenv (lua_State *L) { int b; lua_getfield(L, LUA_REGISTRYINDEX, "LUA_NOENV"); b = lua_toboolean(L, -1); lua_pop(L, 1); /* remove value */ return b; } static void setpath (lua_State *L, const char *fieldname, const char *envname1, const char *envname2, const char *def) { const char *path = getenv(envname1); if (path == NULL) /* no environment variable? */ path = getenv(envname2); /* try alternative name */ if (path == NULL || noenv(L)) /* no environment variable? */ lua_pushstring(L, def); /* use default */ else { /* replace ";;" by ";AUXMARK;" and then AUXMARK by default path */ path = luaL_gsub(L, path, LUA_PATH_SEP LUA_PATH_SEP, LUA_PATH_SEP AUXMARK LUA_PATH_SEP); luaL_gsub(L, path, AUXMARK, def); lua_remove(L, -2); } setprogdir(L); lua_setfield(L, -2, fieldname); } static const luaL_Reg pk_funcs[] = { #ifdef LUA_UNSAFE {"loadlib", ll_loadlib}, {"searchpath", ll_searchpath}, #if defined(LUA_COMPAT_MODULE) {"seeall", ll_seeall}, #endif #endif {NULL, NULL} }; static const luaL_Reg ll_funcs[] = { #ifdef LUA_UNSAFE #if defined(LUA_COMPAT_MODULE) {"module", ll_module}, #endif {"require", ll_require}, #endif {NULL, NULL} }; static void createsearcherstable (lua_State *L) { static const lua_CFunction searchers[] = {searcher_preload, searcher_Lua, searcher_C, searcher_Croot, NULL}; int i; /* create 'searchers' table */ lua_createtable(L, sizeof(searchers)/sizeof(searchers[0]) - 1, 0); /* fill it with pre-defined searchers */ for (i=0; searchers[i] != NULL; i++) { lua_pushvalue(L, -2); /* set 'package' as upvalue for all searchers */ lua_pushcclosure(L, searchers[i], 1); lua_rawseti(L, -2, i+1); } } LUAMOD_API int luaopen_package (lua_State *L) { /* create table CLIBS to keep track of loaded C libraries */ luaL_getsubtable(L, LUA_REGISTRYINDEX, CLIBS); lua_createtable(L, 0, 1); /* metatable for CLIBS */ lua_pushcfunction(L, gctm); lua_setfield(L, -2, "__gc"); /* set finalizer for CLIBS table */ lua_setmetatable(L, -2); /* create `package' table */ luaL_newlib(L, pk_funcs); createsearcherstable(L); #if defined(LUA_COMPAT_LOADERS) lua_pushvalue(L, -1); /* make a copy of 'searchers' table */ lua_setfield(L, -3, "loaders"); /* put it in field `loaders' */ #endif lua_setfield(L, -2, "searchers"); /* put it in field 'searchers' */ /* set field 'path' */ setpath(L, "path", LUA_PATHVERSION, LUA_PATH, LUA_PATH_DEFAULT); /* set field 'cpath' */ setpath(L, "cpath", LUA_CPATHVERSION, LUA_CPATH, LUA_CPATH_DEFAULT); /* store config information */ lua_pushliteral(L, LUA_DIRSEP "\n" LUA_PATH_SEP "\n" LUA_PATH_MARK "\n" LUA_EXEC_DIR "\n" LUA_IGMARK "\n"); lua_setfield(L, -2, "config"); /* set field `loaded' */ luaL_getsubtable(L, LUA_REGISTRYINDEX, "_LOADED"); lua_setfield(L, -2, "loaded"); /* set field `preload' */ luaL_getsubtable(L, LUA_REGISTRYINDEX, "_PRELOAD"); lua_setfield(L, -2, "preload"); lua_pushglobaltable(L); lua_pushvalue(L, -2); /* set 'package' as upvalue for next lib */ luaL_setfuncs(L, ll_funcs, 1); /* open lib into global table */ lua_pop(L, 1); /* pop global table */ return 1; /* return 'package' table */ } fs-uae-2.2.3+dfsg/libfsemu/src/lua/lualib.h0000644000175000017500000000217112162366654020654 0ustar glaubitzglaubitz/* ** $Id: lualib.h,v 1.43 2011/12/08 12:11:37 roberto Exp $ ** Lua standard libraries ** See Copyright Notice in lua.h */ #ifndef lualib_h #define lualib_h #include "lua.h" LUAMOD_API int (luaopen_base) (lua_State *L); #define LUA_COLIBNAME "coroutine" LUAMOD_API int (luaopen_coroutine) (lua_State *L); #define LUA_TABLIBNAME "table" LUAMOD_API int (luaopen_table) (lua_State *L); #ifdef LUA_UNSAFE #define LUA_IOLIBNAME "io" LUAMOD_API int (luaopen_io) (lua_State *L); #endif #ifdef LUA_UNSAFE #define LUA_OSLIBNAME "os" LUAMOD_API int (luaopen_os) (lua_State *L); #endif #define LUA_STRLIBNAME "string" LUAMOD_API int (luaopen_string) (lua_State *L); #define LUA_BITLIBNAME "bit32" LUAMOD_API int (luaopen_bit32) (lua_State *L); #define LUA_MATHLIBNAME "math" LUAMOD_API int (luaopen_math) (lua_State *L); #define LUA_DBLIBNAME "debug" LUAMOD_API int (luaopen_debug) (lua_State *L); #define LUA_LOADLIBNAME "package" LUAMOD_API int (luaopen_package) (lua_State *L); /* open all previous libraries */ LUALIB_API void (luaL_openlibs) (lua_State *L); #if !defined(lua_assert) #define lua_assert(x) ((void)0) #endif #endif fs-uae-2.2.3+dfsg/libfsemu/src/lua/lapi.h0000644000175000017500000000103512162366654020327 0ustar glaubitzglaubitz/* ** $Id: lapi.h,v 2.7 2009/11/27 15:37:59 roberto Exp $ ** Auxiliary functions from Lua API ** See Copyright Notice in lua.h */ #ifndef lapi_h #define lapi_h #include "llimits.h" #include "lstate.h" #define api_incr_top(L) {L->top++; api_check(L, L->top <= L->ci->top, \ "stack overflow");} #define adjustresults(L,nres) \ { if ((nres) == LUA_MULTRET && L->ci->top < L->top) L->ci->top = L->top; } #define api_checknelems(L,n) api_check(L, (n) < (L->top - L->ci->func), \ "not enough elements in the stack") #endif fs-uae-2.2.3+dfsg/libfsemu/src/lua/lvm.h0000644000175000017500000000275612162366654020213 0ustar glaubitzglaubitz/* ** $Id: lvm.h,v 2.17 2011/05/31 18:27:56 roberto Exp $ ** Lua virtual machine ** See Copyright Notice in lua.h */ #ifndef lvm_h #define lvm_h #include "ldo.h" #include "lobject.h" #include "ltm.h" #define tostring(L,o) (ttisstring(o) || (luaV_tostring(L, o))) #define tonumber(o,n) (ttisnumber(o) || (((o) = luaV_tonumber(o,n)) != NULL)) #define equalobj(L,o1,o2) (ttisequal(o1, o2) && luaV_equalobj_(L, o1, o2)) #define luaV_rawequalobj(t1,t2) \ (ttisequal(t1,t2) && luaV_equalobj_(NULL,t1,t2)) /* not to called directly */ LUAI_FUNC int luaV_equalobj_ (lua_State *L, const TValue *t1, const TValue *t2); LUAI_FUNC int luaV_lessthan (lua_State *L, const TValue *l, const TValue *r); LUAI_FUNC int luaV_lessequal (lua_State *L, const TValue *l, const TValue *r); LUAI_FUNC const TValue *luaV_tonumber (const TValue *obj, TValue *n); LUAI_FUNC int luaV_tostring (lua_State *L, StkId obj); LUAI_FUNC void luaV_gettable (lua_State *L, const TValue *t, TValue *key, StkId val); LUAI_FUNC void luaV_settable (lua_State *L, const TValue *t, TValue *key, StkId val); LUAI_FUNC void luaV_finishOp (lua_State *L); LUAI_FUNC void luaV_execute (lua_State *L); LUAI_FUNC void luaV_concat (lua_State *L, int total); LUAI_FUNC void luaV_arith (lua_State *L, StkId ra, const TValue *rb, const TValue *rc, TMS op); LUAI_FUNC void luaV_objlen (lua_State *L, StkId ra, const TValue *rb); #endif fs-uae-2.2.3+dfsg/libfsemu/src/lua/lobject.h0000644000175000017500000003523512162366654021035 0ustar glaubitzglaubitz/* ** $Id: lobject.h,v 2.70 2012/05/11 14:10:50 roberto Exp $ ** Type definitions for Lua objects ** See Copyright Notice in lua.h */ #ifndef lobject_h #define lobject_h #include #include "llimits.h" #include "lua.h" /* ** Extra tags for non-values */ #define LUA_TPROTO LUA_NUMTAGS #define LUA_TUPVAL (LUA_NUMTAGS+1) #define LUA_TDEADKEY (LUA_NUMTAGS+2) /* ** number of all possible tags (including LUA_TNONE but excluding DEADKEY) */ #define LUA_TOTALTAGS (LUA_TUPVAL+2) /* ** tags for Tagged Values have the following use of bits: ** bits 0-3: actual tag (a LUA_T* value) ** bits 4-5: variant bits ** bit 6: whether value is collectable */ #define VARBITS (3 << 4) /* ** LUA_TFUNCTION variants: ** 0 - Lua function ** 1 - light C function ** 2 - regular C function (closure) */ /* Variant tags for functions */ #define LUA_TLCL (LUA_TFUNCTION | (0 << 4)) /* Lua closure */ #define LUA_TLCF (LUA_TFUNCTION | (1 << 4)) /* light C function */ #define LUA_TCCL (LUA_TFUNCTION | (2 << 4)) /* C closure */ /* ** LUA_TSTRING variants */ #define LUA_TSHRSTR (LUA_TSTRING | (0 << 4)) /* short strings */ #define LUA_TLNGSTR (LUA_TSTRING | (1 << 4)) /* long strings */ /* Bit mark for collectable types */ #define BIT_ISCOLLECTABLE (1 << 6) /* mark a tag as collectable */ #define ctb(t) ((t) | BIT_ISCOLLECTABLE) /* ** Union of all collectable objects */ typedef union GCObject GCObject; /* ** Common Header for all collectable objects (in macro form, to be ** included in other objects) */ #define CommonHeader GCObject *next; lu_byte tt; lu_byte marked /* ** Common header in struct form */ typedef struct GCheader { CommonHeader; } GCheader; /* ** Union of all Lua values */ typedef union Value Value; #define numfield lua_Number n; /* numbers */ /* ** Tagged Values. This is the basic representation of values in Lua, ** an actual value plus a tag with its type. */ #define TValuefields Value value_; int tt_ typedef struct lua_TValue TValue; /* macro defining a nil value */ #define NILCONSTANT {NULL}, LUA_TNIL #define val_(o) ((o)->value_) #define num_(o) (val_(o).n) /* raw type tag of a TValue */ #define rttype(o) ((o)->tt_) /* tag with no variants (bits 0-3) */ #define novariant(x) ((x) & 0x0F) /* type tag of a TValue (bits 0-3 for tags + variant bits 4-5) */ #define ttype(o) (rttype(o) & 0x3F) /* type tag of a TValue with no variants (bits 0-3) */ #define ttypenv(o) (novariant(rttype(o))) /* Macros to test type */ #define checktag(o,t) (rttype(o) == (t)) #define checktype(o,t) (ttypenv(o) == (t)) #define ttisnumber(o) checktag((o), LUA_TNUMBER) #define ttisnil(o) checktag((o), LUA_TNIL) #define ttisboolean(o) checktag((o), LUA_TBOOLEAN) #define ttislightuserdata(o) checktag((o), LUA_TLIGHTUSERDATA) #define ttisstring(o) checktype((o), LUA_TSTRING) #define ttisshrstring(o) checktag((o), ctb(LUA_TSHRSTR)) #define ttislngstring(o) checktag((o), ctb(LUA_TLNGSTR)) #define ttistable(o) checktag((o), ctb(LUA_TTABLE)) #define ttisfunction(o) checktype(o, LUA_TFUNCTION) #define ttisclosure(o) ((rttype(o) & 0x1F) == LUA_TFUNCTION) #define ttisCclosure(o) checktag((o), ctb(LUA_TCCL)) #define ttisLclosure(o) checktag((o), ctb(LUA_TLCL)) #define ttislcf(o) checktag((o), LUA_TLCF) #define ttisuserdata(o) checktag((o), ctb(LUA_TUSERDATA)) #define ttisthread(o) checktag((o), ctb(LUA_TTHREAD)) #define ttisdeadkey(o) checktag((o), LUA_TDEADKEY) #define ttisequal(o1,o2) (rttype(o1) == rttype(o2)) /* Macros to access values */ #define nvalue(o) check_exp(ttisnumber(o), num_(o)) #define gcvalue(o) check_exp(iscollectable(o), val_(o).gc) #define pvalue(o) check_exp(ttislightuserdata(o), val_(o).p) #define rawtsvalue(o) check_exp(ttisstring(o), &val_(o).gc->ts) #define tsvalue(o) (&rawtsvalue(o)->tsv) #define rawuvalue(o) check_exp(ttisuserdata(o), &val_(o).gc->u) #define uvalue(o) (&rawuvalue(o)->uv) #define clvalue(o) check_exp(ttisclosure(o), &val_(o).gc->cl) #define clLvalue(o) check_exp(ttisLclosure(o), &val_(o).gc->cl.l) #define clCvalue(o) check_exp(ttisCclosure(o), &val_(o).gc->cl.c) #define fvalue(o) check_exp(ttislcf(o), val_(o).f) #define hvalue(o) check_exp(ttistable(o), &val_(o).gc->h) #define bvalue(o) check_exp(ttisboolean(o), val_(o).b) #define thvalue(o) check_exp(ttisthread(o), &val_(o).gc->th) /* a dead value may get the 'gc' field, but cannot access its contents */ #define deadvalue(o) check_exp(ttisdeadkey(o), cast(void *, val_(o).gc)) #define l_isfalse(o) (ttisnil(o) || (ttisboolean(o) && bvalue(o) == 0)) #define iscollectable(o) (rttype(o) & BIT_ISCOLLECTABLE) /* Macros for internal tests */ #define righttt(obj) (ttype(obj) == gcvalue(obj)->gch.tt) #define checkliveness(g,obj) \ lua_longassert(!iscollectable(obj) || \ (righttt(obj) && !isdead(g,gcvalue(obj)))) /* Macros to set values */ #define settt_(o,t) ((o)->tt_=(t)) #define setnvalue(obj,x) \ { TValue *io=(obj); num_(io)=(x); settt_(io, LUA_TNUMBER); } #define changenvalue(o,x) check_exp(ttisnumber(o), num_(o)=(x)) #define setnilvalue(obj) settt_(obj, LUA_TNIL) #define setfvalue(obj,x) \ { TValue *io=(obj); val_(io).f=(x); settt_(io, LUA_TLCF); } #define setpvalue(obj,x) \ { TValue *io=(obj); val_(io).p=(x); settt_(io, LUA_TLIGHTUSERDATA); } #define setbvalue(obj,x) \ { TValue *io=(obj); val_(io).b=(x); settt_(io, LUA_TBOOLEAN); } #define setgcovalue(L,obj,x) \ { TValue *io=(obj); GCObject *i_g=(x); \ val_(io).gc=i_g; settt_(io, ctb(gch(i_g)->tt)); } #define setsvalue(L,obj,x) \ { TValue *io=(obj); \ TString *x_ = (x); \ val_(io).gc=cast(GCObject *, x_); settt_(io, ctb(x_->tsv.tt)); \ checkliveness(G(L),io); } #define setuvalue(L,obj,x) \ { TValue *io=(obj); \ val_(io).gc=cast(GCObject *, (x)); settt_(io, ctb(LUA_TUSERDATA)); \ checkliveness(G(L),io); } #define setthvalue(L,obj,x) \ { TValue *io=(obj); \ val_(io).gc=cast(GCObject *, (x)); settt_(io, ctb(LUA_TTHREAD)); \ checkliveness(G(L),io); } #define setclLvalue(L,obj,x) \ { TValue *io=(obj); \ val_(io).gc=cast(GCObject *, (x)); settt_(io, ctb(LUA_TLCL)); \ checkliveness(G(L),io); } #define setclCvalue(L,obj,x) \ { TValue *io=(obj); \ val_(io).gc=cast(GCObject *, (x)); settt_(io, ctb(LUA_TCCL)); \ checkliveness(G(L),io); } #define sethvalue(L,obj,x) \ { TValue *io=(obj); \ val_(io).gc=cast(GCObject *, (x)); settt_(io, ctb(LUA_TTABLE)); \ checkliveness(G(L),io); } #define setdeadvalue(obj) settt_(obj, LUA_TDEADKEY) #define setobj(L,obj1,obj2) \ { const TValue *io2=(obj2); TValue *io1=(obj1); \ io1->value_ = io2->value_; io1->tt_ = io2->tt_; \ checkliveness(G(L),io1); } /* ** different types of assignments, according to destination */ /* from stack to (same) stack */ #define setobjs2s setobj /* to stack (not from same stack) */ #define setobj2s setobj #define setsvalue2s setsvalue #define sethvalue2s sethvalue #define setptvalue2s setptvalue /* from table to same table */ #define setobjt2t setobj /* to table */ #define setobj2t setobj /* to new object */ #define setobj2n setobj #define setsvalue2n setsvalue /* check whether a number is valid (useful only for NaN trick) */ #define luai_checknum(L,o,c) { /* empty */ } /* ** {====================================================== ** NaN Trick ** ======================================================= */ #if defined(LUA_NANTRICK) /* ** numbers are represented in the 'd_' field. All other values have the ** value (NNMARK | tag) in 'tt__'. A number with such pattern would be ** a "signaled NaN", which is never generated by regular operations by ** the CPU (nor by 'strtod') */ /* allows for external implementation for part of the trick */ #if !defined(NNMARK) /* { */ #if !defined(LUA_IEEEENDIAN) #error option 'LUA_NANTRICK' needs 'LUA_IEEEENDIAN' #endif #define NNMARK 0x7FF7A500 #define NNMASK 0x7FFFFF00 #undef TValuefields #undef NILCONSTANT #if (LUA_IEEEENDIAN == 0) /* { */ /* little endian */ #define TValuefields \ union { struct { Value v__; int tt__; } i; double d__; } u #define NILCONSTANT {{{NULL}, tag2tt(LUA_TNIL)}} /* field-access macros */ #define v_(o) ((o)->u.i.v__) #define d_(o) ((o)->u.d__) #define tt_(o) ((o)->u.i.tt__) #else /* }{ */ /* big endian */ #define TValuefields \ union { struct { int tt__; Value v__; } i; double d__; } u #define NILCONSTANT {{tag2tt(LUA_TNIL), {NULL}}} /* field-access macros */ #define v_(o) ((o)->u.i.v__) #define d_(o) ((o)->u.d__) #define tt_(o) ((o)->u.i.tt__) #endif /* } */ #endif /* } */ /* correspondence with standard representation */ #undef val_ #define val_(o) v_(o) #undef num_ #define num_(o) d_(o) #undef numfield #define numfield /* no such field; numbers are the entire struct */ /* basic check to distinguish numbers from non-numbers */ #undef ttisnumber #define ttisnumber(o) ((tt_(o) & NNMASK) != NNMARK) #define tag2tt(t) (NNMARK | (t)) #undef rttype #define rttype(o) (ttisnumber(o) ? LUA_TNUMBER : tt_(o) & 0xff) #undef settt_ #define settt_(o,t) (tt_(o) = tag2tt(t)) #undef setnvalue #define setnvalue(obj,x) \ { TValue *io_=(obj); num_(io_)=(x); lua_assert(ttisnumber(io_)); } #undef setobj #define setobj(L,obj1,obj2) \ { const TValue *o2_=(obj2); TValue *o1_=(obj1); \ o1_->u = o2_->u; \ checkliveness(G(L),o1_); } /* ** these redefinitions are not mandatory, but these forms are more efficient */ #undef checktag #undef checktype #define checktag(o,t) (tt_(o) == tag2tt(t)) #define checktype(o,t) (ctb(tt_(o) | VARBITS) == ctb(tag2tt(t) | VARBITS)) #undef ttisequal #define ttisequal(o1,o2) \ (ttisnumber(o1) ? ttisnumber(o2) : (tt_(o1) == tt_(o2))) #undef luai_checknum #define luai_checknum(L,o,c) { if (!ttisnumber(o)) c; } #endif /* }====================================================== */ /* ** {====================================================== ** types and prototypes ** ======================================================= */ union Value { GCObject *gc; /* collectable objects */ void *p; /* light userdata */ int b; /* booleans */ lua_CFunction f; /* light C functions */ numfield /* numbers */ }; struct lua_TValue { TValuefields; }; typedef TValue *StkId; /* index to stack elements */ /* ** Header for string value; string bytes follow the end of this structure */ typedef union TString { L_Umaxalign dummy; /* ensures maximum alignment for strings */ struct { CommonHeader; lu_byte extra; /* reserved words for short strings; "has hash" for longs */ unsigned int hash; size_t len; /* number of characters in string */ } tsv; } TString; /* get the actual string (array of bytes) from a TString */ #define getstr(ts) cast(const char *, (ts) + 1) /* get the actual string (array of bytes) from a Lua value */ #define svalue(o) getstr(rawtsvalue(o)) /* ** Header for userdata; memory area follows the end of this structure */ typedef union Udata { L_Umaxalign dummy; /* ensures maximum alignment for `local' udata */ struct { CommonHeader; struct Table *metatable; struct Table *env; size_t len; /* number of bytes */ } uv; } Udata; /* ** Description of an upvalue for function prototypes */ typedef struct Upvaldesc { TString *name; /* upvalue name (for debug information) */ lu_byte instack; /* whether it is in stack */ lu_byte idx; /* index of upvalue (in stack or in outer function's list) */ } Upvaldesc; /* ** Description of a local variable for function prototypes ** (used for debug information) */ typedef struct LocVar { TString *varname; int startpc; /* first point where variable is active */ int endpc; /* first point where variable is dead */ } LocVar; /* ** Function Prototypes */ typedef struct Proto { CommonHeader; TValue *k; /* constants used by the function */ Instruction *code; struct Proto **p; /* functions defined inside the function */ int *lineinfo; /* map from opcodes to source lines (debug information) */ LocVar *locvars; /* information about local variables (debug information) */ Upvaldesc *upvalues; /* upvalue information */ union Closure *cache; /* last created closure with this prototype */ TString *source; /* used for debug information */ int sizeupvalues; /* size of 'upvalues' */ int sizek; /* size of `k' */ int sizecode; int sizelineinfo; int sizep; /* size of `p' */ int sizelocvars; int linedefined; int lastlinedefined; GCObject *gclist; lu_byte numparams; /* number of fixed parameters */ lu_byte is_vararg; lu_byte maxstacksize; /* maximum stack used by this function */ } Proto; /* ** Lua Upvalues */ typedef struct UpVal { CommonHeader; TValue *v; /* points to stack or to its own value */ union { TValue value; /* the value (when closed) */ struct { /* double linked list (when open) */ struct UpVal *prev; struct UpVal *next; } l; } u; } UpVal; /* ** Closures */ #define ClosureHeader \ CommonHeader; lu_byte nupvalues; GCObject *gclist typedef struct CClosure { ClosureHeader; lua_CFunction f; TValue upvalue[1]; /* list of upvalues */ } CClosure; typedef struct LClosure { ClosureHeader; struct Proto *p; UpVal *upvals[1]; /* list of upvalues */ } LClosure; typedef union Closure { CClosure c; LClosure l; } Closure; #define isLfunction(o) ttisLclosure(o) #define getproto(o) (clLvalue(o)->p) /* ** Tables */ typedef union TKey { struct { TValuefields; struct Node *next; /* for chaining */ } nk; TValue tvk; } TKey; typedef struct Node { TValue i_val; TKey i_key; } Node; typedef struct Table { CommonHeader; lu_byte flags; /* 1<

lsizenode)) /* ** (address of) a fixed nil value */ #define luaO_nilobject (&luaO_nilobject_) LUAI_DDEC const TValue luaO_nilobject_; LUAI_FUNC int luaO_int2fb (unsigned int x); LUAI_FUNC int luaO_fb2int (int x); LUAI_FUNC int luaO_ceillog2 (unsigned int x); LUAI_FUNC lua_Number luaO_arith (int op, lua_Number v1, lua_Number v2); LUAI_FUNC int luaO_str2d (const char *s, size_t len, lua_Number *result); LUAI_FUNC int luaO_hexavalue (int c); LUAI_FUNC const char *luaO_pushvfstring (lua_State *L, const char *fmt, va_list argp); LUAI_FUNC const char *luaO_pushfstring (lua_State *L, const char *fmt, ...); LUAI_FUNC void luaO_chunkid (char *out, const char *source, size_t len); #endif fs-uae-2.2.3+dfsg/libfsemu/src/lua/loslib.c0000644000175000017500000001757312162366654020677 0ustar glaubitzglaubitz/* ** $Id: loslib.c,v 1.39 2012/05/23 15:37:09 roberto Exp $ ** Standard Operating System library ** See Copyright Notice in lua.h */ #include #include #include #include #include #define loslib_c #define LUA_LIB #include "lua.h" #include "lauxlib.h" #include "lualib.h" /* ** list of valid conversion specifiers for the 'strftime' function */ #if !defined(LUA_STRFTIMEOPTIONS) #if !defined(LUA_USE_POSIX) #define LUA_STRFTIMEOPTIONS { "aAbBcdHIjmMpSUwWxXyYz%", "" } #else #define LUA_STRFTIMEOPTIONS \ { "aAbBcCdDeFgGhHIjmMnprRStTuUVwWxXyYzZ%", "" \ "", "E", "cCxXyY", \ "O", "deHImMSuUVwWy" } #endif #endif /* ** By default, Lua uses tmpnam except when POSIX is available, where it ** uses mkstemp. */ #if defined(LUA_USE_MKSTEMP) #include #define LUA_TMPNAMBUFSIZE 32 #define lua_tmpnam(b,e) { \ strcpy(b, "/tmp/lua_XXXXXX"); \ e = mkstemp(b); \ if (e != -1) close(e); \ e = (e == -1); } #elif !defined(lua_tmpnam) #define LUA_TMPNAMBUFSIZE L_tmpnam #define lua_tmpnam(b,e) { e = (tmpnam(b) == NULL); } #endif /* ** By default, Lua uses gmtime/localtime, except when POSIX is available, ** where it uses gmtime_r/localtime_r */ #if defined(LUA_USE_GMTIME_R) #define l_gmtime(t,r) gmtime_r(t,r) #define l_localtime(t,r) localtime_r(t,r) #elif !defined(l_gmtime) #define l_gmtime(t,r) ((void)r, gmtime(t)) #define l_localtime(t,r) ((void)r, localtime(t)) #endif static int os_execute (lua_State *L) { const char *cmd = luaL_optstring(L, 1, NULL); int stat = system(cmd); if (cmd != NULL) return luaL_execresult(L, stat); else { lua_pushboolean(L, stat); /* true if there is a shell */ return 1; } } static int os_remove (lua_State *L) { const char *filename = luaL_checkstring(L, 1); return luaL_fileresult(L, remove(filename) == 0, filename); } static int os_rename (lua_State *L) { const char *fromname = luaL_checkstring(L, 1); const char *toname = luaL_checkstring(L, 2); return luaL_fileresult(L, rename(fromname, toname) == 0, fromname); } static int os_tmpname (lua_State *L) { char buff[LUA_TMPNAMBUFSIZE]; int err; lua_tmpnam(buff, err); if (err) return luaL_error(L, "unable to generate a unique filename"); lua_pushstring(L, buff); return 1; } static int os_getenv (lua_State *L) { lua_pushstring(L, getenv(luaL_checkstring(L, 1))); /* if NULL push nil */ return 1; } static int os_clock (lua_State *L) { lua_pushnumber(L, ((lua_Number)clock())/(lua_Number)CLOCKS_PER_SEC); return 1; } /* ** {====================================================== ** Time/Date operations ** { year=%Y, month=%m, day=%d, hour=%H, min=%M, sec=%S, ** wday=%w+1, yday=%j, isdst=? } ** ======================================================= */ static void setfield (lua_State *L, const char *key, int value) { lua_pushinteger(L, value); lua_setfield(L, -2, key); } static void setboolfield (lua_State *L, const char *key, int value) { if (value < 0) /* undefined? */ return; /* does not set field */ lua_pushboolean(L, value); lua_setfield(L, -2, key); } static int getboolfield (lua_State *L, const char *key) { int res; lua_getfield(L, -1, key); res = lua_isnil(L, -1) ? -1 : lua_toboolean(L, -1); lua_pop(L, 1); return res; } static int getfield (lua_State *L, const char *key, int d) { int res, isnum; lua_getfield(L, -1, key); res = (int)lua_tointegerx(L, -1, &isnum); if (!isnum) { if (d < 0) return luaL_error(L, "field " LUA_QS " missing in date table", key); res = d; } lua_pop(L, 1); return res; } static const char *checkoption (lua_State *L, const char *conv, char *buff) { static const char *const options[] = LUA_STRFTIMEOPTIONS; unsigned int i; for (i = 0; i < sizeof(options)/sizeof(options[0]); i += 2) { if (*conv != '\0' && strchr(options[i], *conv) != NULL) { buff[1] = *conv; if (*options[i + 1] == '\0') { /* one-char conversion specifier? */ buff[2] = '\0'; /* end buffer */ return conv + 1; } else if (*(conv + 1) != '\0' && strchr(options[i + 1], *(conv + 1)) != NULL) { buff[2] = *(conv + 1); /* valid two-char conversion specifier */ buff[3] = '\0'; /* end buffer */ return conv + 2; } } } luaL_argerror(L, 1, lua_pushfstring(L, "invalid conversion specifier '%%%s'", conv)); return conv; /* to avoid warnings */ } static int os_date (lua_State *L) { const char *s = luaL_optstring(L, 1, "%c"); time_t t = luaL_opt(L, (time_t)luaL_checknumber, 2, time(NULL)); struct tm tmr, *stm; if (*s == '!') { /* UTC? */ stm = l_gmtime(&t, &tmr); s++; /* skip `!' */ } else stm = l_localtime(&t, &tmr); if (stm == NULL) /* invalid date? */ lua_pushnil(L); else if (strcmp(s, "*t") == 0) { lua_createtable(L, 0, 9); /* 9 = number of fields */ setfield(L, "sec", stm->tm_sec); setfield(L, "min", stm->tm_min); setfield(L, "hour", stm->tm_hour); setfield(L, "day", stm->tm_mday); setfield(L, "month", stm->tm_mon+1); setfield(L, "year", stm->tm_year+1900); setfield(L, "wday", stm->tm_wday+1); setfield(L, "yday", stm->tm_yday+1); setboolfield(L, "isdst", stm->tm_isdst); } else { char cc[4]; luaL_Buffer b; cc[0] = '%'; luaL_buffinit(L, &b); while (*s) { if (*s != '%') /* no conversion specifier? */ luaL_addchar(&b, *s++); else { size_t reslen; char buff[200]; /* should be big enough for any conversion result */ s = checkoption(L, s + 1, cc); reslen = strftime(buff, sizeof(buff), cc, stm); luaL_addlstring(&b, buff, reslen); } } luaL_pushresult(&b); } return 1; } static int os_time (lua_State *L) { time_t t; if (lua_isnoneornil(L, 1)) /* called without args? */ t = time(NULL); /* get current time */ else { struct tm ts; luaL_checktype(L, 1, LUA_TTABLE); lua_settop(L, 1); /* make sure table is at the top */ ts.tm_sec = getfield(L, "sec", 0); ts.tm_min = getfield(L, "min", 0); ts.tm_hour = getfield(L, "hour", 12); ts.tm_mday = getfield(L, "day", -1); ts.tm_mon = getfield(L, "month", -1) - 1; ts.tm_year = getfield(L, "year", -1) - 1900; ts.tm_isdst = getboolfield(L, "isdst"); t = mktime(&ts); } if (t == (time_t)(-1)) lua_pushnil(L); else lua_pushnumber(L, (lua_Number)t); return 1; } static int os_difftime (lua_State *L) { lua_pushnumber(L, difftime((time_t)(luaL_checknumber(L, 1)), (time_t)(luaL_optnumber(L, 2, 0)))); return 1; } /* }====================================================== */ static int os_setlocale (lua_State *L) { static const int cat[] = {LC_ALL, LC_COLLATE, LC_CTYPE, LC_MONETARY, LC_NUMERIC, LC_TIME}; static const char *const catnames[] = {"all", "collate", "ctype", "monetary", "numeric", "time", NULL}; const char *l = luaL_optstring(L, 1, NULL); int op = luaL_checkoption(L, 2, "all", catnames); lua_pushstring(L, setlocale(cat[op], l)); return 1; } static int os_exit (lua_State *L) { int status; if (lua_isboolean(L, 1)) status = (lua_toboolean(L, 1) ? EXIT_SUCCESS : EXIT_FAILURE); else status = luaL_optint(L, 1, EXIT_SUCCESS); if (lua_toboolean(L, 2)) lua_close(L); if (L) exit(status); /* 'if' to avoid warnings for unreachable 'return' */ return 0; } static const luaL_Reg syslib[] = { {"clock", os_clock}, {"date", os_date}, {"difftime", os_difftime}, {"execute", os_execute}, {"exit", os_exit}, {"getenv", os_getenv}, {"remove", os_remove}, {"rename", os_rename}, {"setlocale", os_setlocale}, {"time", os_time}, {"tmpname", os_tmpname}, {NULL, NULL} }; /* }====================================================== */ LUAMOD_API int luaopen_os (lua_State *L) { luaL_newlib(L, syslib); return 1; } fs-uae-2.2.3+dfsg/libfsemu/src/lua/lcode.h0000644000175000017500000000605412162366654020476 0ustar glaubitzglaubitz/* ** $Id: lcode.h,v 1.58 2011/08/30 16:26:41 roberto Exp $ ** Code generator for Lua ** See Copyright Notice in lua.h */ #ifndef lcode_h #define lcode_h #include "llex.h" #include "lobject.h" #include "lopcodes.h" #include "lparser.h" /* ** Marks the end of a patch list. It is an invalid value both as an absolute ** address, and as a list link (would link an element to itself). */ #define NO_JUMP (-1) /* ** grep "ORDER OPR" if you change these enums (ORDER OP) */ typedef enum BinOpr { OPR_ADD, OPR_SUB, OPR_MUL, OPR_DIV, OPR_MOD, OPR_POW, OPR_CONCAT, OPR_EQ, OPR_LT, OPR_LE, OPR_NE, OPR_GT, OPR_GE, OPR_AND, OPR_OR, OPR_NOBINOPR } BinOpr; typedef enum UnOpr { OPR_MINUS, OPR_NOT, OPR_LEN, OPR_NOUNOPR } UnOpr; #define getcode(fs,e) ((fs)->f->code[(e)->u.info]) #define luaK_codeAsBx(fs,o,A,sBx) luaK_codeABx(fs,o,A,(sBx)+MAXARG_sBx) #define luaK_setmultret(fs,e) luaK_setreturns(fs, e, LUA_MULTRET) #define luaK_jumpto(fs,t) luaK_patchlist(fs, luaK_jump(fs), t) LUAI_FUNC int luaK_codeABx (FuncState *fs, OpCode o, int A, unsigned int Bx); LUAI_FUNC int luaK_codeABC (FuncState *fs, OpCode o, int A, int B, int C); LUAI_FUNC int luaK_codek (FuncState *fs, int reg, int k); LUAI_FUNC void luaK_fixline (FuncState *fs, int line); LUAI_FUNC void luaK_nil (FuncState *fs, int from, int n); LUAI_FUNC void luaK_reserveregs (FuncState *fs, int n); LUAI_FUNC void luaK_checkstack (FuncState *fs, int n); LUAI_FUNC int luaK_stringK (FuncState *fs, TString *s); LUAI_FUNC int luaK_numberK (FuncState *fs, lua_Number r); LUAI_FUNC void luaK_dischargevars (FuncState *fs, expdesc *e); LUAI_FUNC int luaK_exp2anyreg (FuncState *fs, expdesc *e); LUAI_FUNC void luaK_exp2anyregup (FuncState *fs, expdesc *e); LUAI_FUNC void luaK_exp2nextreg (FuncState *fs, expdesc *e); LUAI_FUNC void luaK_exp2val (FuncState *fs, expdesc *e); LUAI_FUNC int luaK_exp2RK (FuncState *fs, expdesc *e); LUAI_FUNC void luaK_self (FuncState *fs, expdesc *e, expdesc *key); LUAI_FUNC void luaK_indexed (FuncState *fs, expdesc *t, expdesc *k); LUAI_FUNC void luaK_goiftrue (FuncState *fs, expdesc *e); LUAI_FUNC void luaK_goiffalse (FuncState *fs, expdesc *e); LUAI_FUNC void luaK_storevar (FuncState *fs, expdesc *var, expdesc *e); LUAI_FUNC void luaK_setreturns (FuncState *fs, expdesc *e, int nresults); LUAI_FUNC void luaK_setoneret (FuncState *fs, expdesc *e); LUAI_FUNC int luaK_jump (FuncState *fs); LUAI_FUNC void luaK_ret (FuncState *fs, int first, int nret); LUAI_FUNC void luaK_patchlist (FuncState *fs, int list, int target); LUAI_FUNC void luaK_patchtohere (FuncState *fs, int list); LUAI_FUNC void luaK_patchclose (FuncState *fs, int list, int level); LUAI_FUNC void luaK_concat (FuncState *fs, int *l1, int l2); LUAI_FUNC int luaK_getlabel (FuncState *fs); LUAI_FUNC void luaK_prefix (FuncState *fs, UnOpr op, expdesc *v, int line); LUAI_FUNC void luaK_infix (FuncState *fs, BinOpr op, expdesc *v); LUAI_FUNC void luaK_posfix (FuncState *fs, BinOpr op, expdesc *v1, expdesc *v2, int line); LUAI_FUNC void luaK_setlist (FuncState *fs, int base, int nelems, int tostore); #endif fs-uae-2.2.3+dfsg/libfsemu/src/lua/ltable.h0000644000175000017500000000235312162366654020651 0ustar glaubitzglaubitz/* ** $Id: ltable.h,v 2.16 2011/08/17 20:26:47 roberto Exp $ ** Lua tables (hash) ** See Copyright Notice in lua.h */ #ifndef ltable_h #define ltable_h #include "lobject.h" #define gnode(t,i) (&(t)->node[i]) #define gkey(n) (&(n)->i_key.tvk) #define gval(n) (&(n)->i_val) #define gnext(n) ((n)->i_key.nk.next) #define invalidateTMcache(t) ((t)->flags = 0) LUAI_FUNC const TValue *luaH_getint (Table *t, int key); LUAI_FUNC void luaH_setint (lua_State *L, Table *t, int key, TValue *value); LUAI_FUNC const TValue *luaH_getstr (Table *t, TString *key); LUAI_FUNC const TValue *luaH_get (Table *t, const TValue *key); LUAI_FUNC TValue *luaH_newkey (lua_State *L, Table *t, const TValue *key); LUAI_FUNC TValue *luaH_set (lua_State *L, Table *t, const TValue *key); LUAI_FUNC Table *luaH_new (lua_State *L); LUAI_FUNC void luaH_resize (lua_State *L, Table *t, int nasize, int nhsize); LUAI_FUNC void luaH_resizearray (lua_State *L, Table *t, int nasize); LUAI_FUNC void luaH_free (lua_State *L, Table *t); LUAI_FUNC int luaH_next (lua_State *L, Table *t, StkId key); LUAI_FUNC int luaH_getn (Table *t); #if defined(LUA_DEBUG) LUAI_FUNC Node *luaH_mainposition (const Table *t, const TValue *key); LUAI_FUNC int luaH_isdummy (Node *n); #endif #endif fs-uae-2.2.3+dfsg/libfsemu/src/lua/lstate.c0000644000175000017500000001672612162366654020706 0ustar glaubitzglaubitz/* ** $Id: lstate.c,v 2.98 2012/05/30 12:33:44 roberto Exp $ ** Global State ** See Copyright Notice in lua.h */ #include #include #define lstate_c #define LUA_CORE #include "lua.h" #include "lapi.h" #include "ldebug.h" #include "ldo.h" #include "lfunc.h" #include "lgc.h" #include "llex.h" #include "lmem.h" #include "lstate.h" #include "lstring.h" #include "ltable.h" #include "ltm.h" #if !defined(LUAI_GCPAUSE) #define LUAI_GCPAUSE 200 /* 200% */ #endif #if !defined(LUAI_GCMAJOR) #define LUAI_GCMAJOR 200 /* 200% */ #endif #if !defined(LUAI_GCMUL) #define LUAI_GCMUL 200 /* GC runs 'twice the speed' of memory allocation */ #endif #define MEMERRMSG "not enough memory" /* ** a macro to help the creation of a unique random seed when a state is ** created; the seed is used to randomize hashes. */ #if !defined(luai_makeseed) #include #define luai_makeseed() cast(size_t, time(NULL)) #endif /* ** thread state + extra space */ typedef struct LX { #if defined(LUAI_EXTRASPACE) char buff[LUAI_EXTRASPACE]; #endif lua_State l; } LX; /* ** Main thread combines a thread state and the global state */ typedef struct LG { LX l; global_State g; } LG; #define fromstate(L) (cast(LX *, cast(lu_byte *, (L)) - offsetof(LX, l))) /* ** Compute an initial seed as random as possible. In ANSI, rely on ** Address Space Layout Randomization (if present) to increase ** randomness.. */ #define addbuff(b,p,e) \ { size_t t = cast(size_t, e); \ memcpy(buff + p, &t, sizeof(t)); p += sizeof(t); } static unsigned int makeseed (lua_State *L) { char buff[4 * sizeof(size_t)]; unsigned int h = luai_makeseed(); int p = 0; addbuff(buff, p, L); /* heap variable */ addbuff(buff, p, &h); /* local variable */ addbuff(buff, p, luaO_nilobject); /* global variable */ addbuff(buff, p, &lua_newstate); /* public function */ lua_assert(p == sizeof(buff)); return luaS_hash(buff, p, h); } /* ** set GCdebt to a new value keeping the value (totalbytes + GCdebt) ** invariant */ void luaE_setdebt (global_State *g, l_mem debt) { g->totalbytes -= (debt - g->GCdebt); g->GCdebt = debt; } CallInfo *luaE_extendCI (lua_State *L) { CallInfo *ci = luaM_new(L, CallInfo); lua_assert(L->ci->next == NULL); L->ci->next = ci; ci->previous = L->ci; ci->next = NULL; return ci; } void luaE_freeCI (lua_State *L) { CallInfo *ci = L->ci; CallInfo *next = ci->next; ci->next = NULL; while ((ci = next) != NULL) { next = ci->next; luaM_free(L, ci); } } static void stack_init (lua_State *L1, lua_State *L) { int i; CallInfo *ci; /* initialize stack array */ L1->stack = luaM_newvector(L, BASIC_STACK_SIZE, TValue); L1->stacksize = BASIC_STACK_SIZE; for (i = 0; i < BASIC_STACK_SIZE; i++) setnilvalue(L1->stack + i); /* erase new stack */ L1->top = L1->stack; L1->stack_last = L1->stack + L1->stacksize - EXTRA_STACK; /* initialize first ci */ ci = &L1->base_ci; ci->next = ci->previous = NULL; ci->callstatus = 0; ci->func = L1->top; setnilvalue(L1->top++); /* 'function' entry for this 'ci' */ ci->top = L1->top + LUA_MINSTACK; L1->ci = ci; } static void freestack (lua_State *L) { if (L->stack == NULL) return; /* stack not completely built yet */ L->ci = &L->base_ci; /* free the entire 'ci' list */ luaE_freeCI(L); luaM_freearray(L, L->stack, L->stacksize); /* free stack array */ } /* ** Create registry table and its predefined values */ static void init_registry (lua_State *L, global_State *g) { TValue mt; /* create registry */ Table *registry = luaH_new(L); sethvalue(L, &g->l_registry, registry); luaH_resize(L, registry, LUA_RIDX_LAST, 0); /* registry[LUA_RIDX_MAINTHREAD] = L */ setthvalue(L, &mt, L); luaH_setint(L, registry, LUA_RIDX_MAINTHREAD, &mt); /* registry[LUA_RIDX_GLOBALS] = table of globals */ sethvalue(L, &mt, luaH_new(L)); luaH_setint(L, registry, LUA_RIDX_GLOBALS, &mt); } /* ** open parts of the state that may cause memory-allocation errors */ static void f_luaopen (lua_State *L, void *ud) { global_State *g = G(L); UNUSED(ud); stack_init(L, L); /* init stack */ init_registry(L, g); luaS_resize(L, MINSTRTABSIZE); /* initial size of string table */ luaT_init(L); luaX_init(L); /* pre-create memory-error message */ g->memerrmsg = luaS_newliteral(L, MEMERRMSG); luaS_fix(g->memerrmsg); /* it should never be collected */ g->gcrunning = 1; /* allow gc */ } /* ** preinitialize a state with consistent values without allocating ** any memory (to avoid errors) */ static void preinit_state (lua_State *L, global_State *g) { G(L) = g; L->stack = NULL; L->ci = NULL; L->stacksize = 0; L->errorJmp = NULL; L->nCcalls = 0; L->hook = NULL; L->hookmask = 0; L->basehookcount = 0; L->allowhook = 1; resethookcount(L); L->openupval = NULL; L->nny = 1; L->status = LUA_OK; L->errfunc = 0; } static void close_state (lua_State *L) { global_State *g = G(L); luaF_close(L, L->stack); /* close all upvalues for this thread */ luaC_freeallobjects(L); /* collect all objects */ luaM_freearray(L, G(L)->strt.hash, G(L)->strt.size); luaZ_freebuffer(L, &g->buff); freestack(L); lua_assert(gettotalbytes(g) == sizeof(LG)); (*g->frealloc)(g->ud, fromstate(L), sizeof(LG), 0); /* free main block */ } LUA_API lua_State *lua_newthread (lua_State *L) { lua_State *L1; lua_lock(L); luaC_checkGC(L); L1 = &luaC_newobj(L, LUA_TTHREAD, sizeof(LX), NULL, offsetof(LX, l))->th; setthvalue(L, L->top, L1); api_incr_top(L); preinit_state(L1, G(L)); L1->hookmask = L->hookmask; L1->basehookcount = L->basehookcount; L1->hook = L->hook; resethookcount(L1); luai_userstatethread(L, L1); stack_init(L1, L); /* init stack */ lua_unlock(L); return L1; } void luaE_freethread (lua_State *L, lua_State *L1) { LX *l = fromstate(L1); luaF_close(L1, L1->stack); /* close all upvalues for this thread */ lua_assert(L1->openupval == NULL); luai_userstatefree(L, L1); freestack(L1); luaM_free(L, l); } LUA_API lua_State *lua_newstate (lua_Alloc f, void *ud) { int i; lua_State *L; global_State *g; LG *l = cast(LG *, (*f)(ud, NULL, LUA_TTHREAD, sizeof(LG))); if (l == NULL) return NULL; L = &l->l.l; g = &l->g; L->next = NULL; L->tt = LUA_TTHREAD; g->currentwhite = bit2mask(WHITE0BIT, FIXEDBIT); L->marked = luaC_white(g); g->gckind = KGC_NORMAL; preinit_state(L, g); g->frealloc = f; g->ud = ud; g->mainthread = L; g->seed = makeseed(L); g->uvhead.u.l.prev = &g->uvhead; g->uvhead.u.l.next = &g->uvhead; g->gcrunning = 0; /* no GC while building state */ g->GCestimate = 0; g->strt.size = 0; g->strt.nuse = 0; g->strt.hash = NULL; setnilvalue(&g->l_registry); luaZ_initbuffer(L, &g->buff); g->panic = NULL; g->version = lua_version(NULL); g->gcstate = GCSpause; g->allgc = NULL; g->finobj = NULL; g->tobefnz = NULL; g->sweepgc = g->sweepfin = NULL; g->gray = g->grayagain = NULL; g->weak = g->ephemeron = g->allweak = NULL; g->totalbytes = sizeof(LG); g->GCdebt = 0; g->gcpause = LUAI_GCPAUSE; g->gcmajorinc = LUAI_GCMAJOR; g->gcstepmul = LUAI_GCMUL; for (i=0; i < LUA_NUMTAGS; i++) g->mt[i] = NULL; if (luaD_rawrunprotected(L, f_luaopen, NULL) != LUA_OK) { /* memory allocation error: free partial state */ close_state(L); L = NULL; } else luai_userstateopen(L); return L; } LUA_API void lua_close (lua_State *L) { L = G(L)->mainthread; /* only the main thread can be closed */ lua_lock(L); luai_userstateclose(L); close_state(L); } fs-uae-2.2.3+dfsg/libfsemu/src/lua/lmem.c0000644000175000017500000000512612162366654020334 0ustar glaubitzglaubitz/* ** $Id: lmem.c,v 1.84 2012/05/23 15:41:53 roberto Exp $ ** Interface to Memory Manager ** See Copyright Notice in lua.h */ #include #define lmem_c #define LUA_CORE #include "lua.h" #include "ldebug.h" #include "ldo.h" #include "lgc.h" #include "lmem.h" #include "lobject.h" #include "lstate.h" /* ** About the realloc function: ** void * frealloc (void *ud, void *ptr, size_t osize, size_t nsize); ** (`osize' is the old size, `nsize' is the new size) ** ** * frealloc(ud, NULL, x, s) creates a new block of size `s' (no ** matter 'x'). ** ** * frealloc(ud, p, x, 0) frees the block `p' ** (in this specific case, frealloc must return NULL); ** particularly, frealloc(ud, NULL, 0, 0) does nothing ** (which is equivalent to free(NULL) in ANSI C) ** ** frealloc returns NULL if it cannot create or reallocate the area ** (any reallocation to an equal or smaller size cannot fail!) */ #define MINSIZEARRAY 4 void *luaM_growaux_ (lua_State *L, void *block, int *size, size_t size_elems, int limit, const char *what) { void *newblock; int newsize; if (*size >= limit/2) { /* cannot double it? */ if (*size >= limit) /* cannot grow even a little? */ luaG_runerror(L, "too many %s (limit is %d)", what, limit); newsize = limit; /* still have at least one free place */ } else { newsize = (*size)*2; if (newsize < MINSIZEARRAY) newsize = MINSIZEARRAY; /* minimum size */ } newblock = luaM_reallocv(L, block, *size, newsize, size_elems); *size = newsize; /* update only when everything else is OK */ return newblock; } l_noret luaM_toobig (lua_State *L) { luaG_runerror(L, "memory allocation error: block too big"); } /* ** generic allocation routine. */ void *luaM_realloc_ (lua_State *L, void *block, size_t osize, size_t nsize) { void *newblock; global_State *g = G(L); size_t realosize = (block) ? osize : 0; lua_assert((realosize == 0) == (block == NULL)); #if defined(HARDMEMTESTS) if (nsize > realosize && g->gcrunning) luaC_fullgc(L, 1); /* force a GC whenever possible */ #endif newblock = (*g->frealloc)(g->ud, block, osize, nsize); if (newblock == NULL && nsize > 0) { api_check(L, nsize > realosize, "realloc cannot fail when shrinking a block"); if (g->gcrunning) { luaC_fullgc(L, 1); /* try to free some memory... */ newblock = (*g->frealloc)(g->ud, block, osize, nsize); /* try again */ } if (newblock == NULL) luaD_throw(L, LUA_ERRMEM); } lua_assert((nsize == 0) == (newblock == NULL)); g->GCdebt = (g->GCdebt + nsize) - realosize; return newblock; } fs-uae-2.2.3+dfsg/libfsemu/src/lua/lstring.h0000644000175000017500000000236412162366654021072 0ustar glaubitzglaubitz/* ** $Id: lstring.h,v 1.49 2012/02/01 21:57:15 roberto Exp $ ** String table (keep all strings handled by Lua) ** See Copyright Notice in lua.h */ #ifndef lstring_h #define lstring_h #include "lgc.h" #include "lobject.h" #include "lstate.h" #define sizestring(s) (sizeof(union TString)+((s)->len+1)*sizeof(char)) #define sizeudata(u) (sizeof(union Udata)+(u)->len) #define luaS_newliteral(L, s) (luaS_newlstr(L, "" s, \ (sizeof(s)/sizeof(char))-1)) #define luaS_fix(s) l_setbit((s)->tsv.marked, FIXEDBIT) /* ** test whether a string is a reserved word */ #define isreserved(s) ((s)->tsv.tt == LUA_TSHRSTR && (s)->tsv.extra > 0) /* ** equality for short strings, which are always internalized */ #define eqshrstr(a,b) check_exp((a)->tsv.tt == LUA_TSHRSTR, (a) == (b)) LUAI_FUNC unsigned int luaS_hash (const char *str, size_t l, unsigned int seed); LUAI_FUNC int luaS_eqlngstr (TString *a, TString *b); LUAI_FUNC int luaS_eqstr (TString *a, TString *b); LUAI_FUNC void luaS_resize (lua_State *L, int newsize); LUAI_FUNC Udata *luaS_newudata (lua_State *L, size_t s, Table *e); LUAI_FUNC TString *luaS_newlstr (lua_State *L, const char *str, size_t l); LUAI_FUNC TString *luaS_new (lua_State *L, const char *str); #endif fs-uae-2.2.3+dfsg/libfsemu/src/lua/lcode.c0000644000175000017500000005362312162366654020475 0ustar glaubitzglaubitz/* ** $Id: lcode.c,v 2.60 2011/08/30 16:26:41 roberto Exp $ ** Code generator for Lua ** See Copyright Notice in lua.h */ #include #define lcode_c #define LUA_CORE #include "lua.h" #include "lcode.h" #include "ldebug.h" #include "ldo.h" #include "lgc.h" #include "llex.h" #include "lmem.h" #include "lobject.h" #include "lopcodes.h" #include "lparser.h" #include "lstring.h" #include "ltable.h" #include "lvm.h" #define hasjumps(e) ((e)->t != (e)->f) static int isnumeral(expdesc *e) { return (e->k == VKNUM && e->t == NO_JUMP && e->f == NO_JUMP); } void luaK_nil (FuncState *fs, int from, int n) { Instruction *previous; int l = from + n - 1; /* last register to set nil */ if (fs->pc > fs->lasttarget) { /* no jumps to current position? */ previous = &fs->f->code[fs->pc-1]; if (GET_OPCODE(*previous) == OP_LOADNIL) { int pfrom = GETARG_A(*previous); int pl = pfrom + GETARG_B(*previous); if ((pfrom <= from && from <= pl + 1) || (from <= pfrom && pfrom <= l + 1)) { /* can connect both? */ if (pfrom < from) from = pfrom; /* from = min(from, pfrom) */ if (pl > l) l = pl; /* l = max(l, pl) */ SETARG_A(*previous, from); SETARG_B(*previous, l - from); return; } } /* else go through */ } luaK_codeABC(fs, OP_LOADNIL, from, n - 1, 0); /* else no optimization */ } int luaK_jump (FuncState *fs) { int jpc = fs->jpc; /* save list of jumps to here */ int j; fs->jpc = NO_JUMP; j = luaK_codeAsBx(fs, OP_JMP, 0, NO_JUMP); luaK_concat(fs, &j, jpc); /* keep them on hold */ return j; } void luaK_ret (FuncState *fs, int first, int nret) { luaK_codeABC(fs, OP_RETURN, first, nret+1, 0); } static int condjump (FuncState *fs, OpCode op, int A, int B, int C) { luaK_codeABC(fs, op, A, B, C); return luaK_jump(fs); } static void fixjump (FuncState *fs, int pc, int dest) { Instruction *jmp = &fs->f->code[pc]; int offset = dest-(pc+1); lua_assert(dest != NO_JUMP); if (abs(offset) > MAXARG_sBx) luaX_syntaxerror(fs->ls, "control structure too long"); SETARG_sBx(*jmp, offset); } /* ** returns current `pc' and marks it as a jump target (to avoid wrong ** optimizations with consecutive instructions not in the same basic block). */ int luaK_getlabel (FuncState *fs) { fs->lasttarget = fs->pc; return fs->pc; } static int getjump (FuncState *fs, int pc) { int offset = GETARG_sBx(fs->f->code[pc]); if (offset == NO_JUMP) /* point to itself represents end of list */ return NO_JUMP; /* end of list */ else return (pc+1)+offset; /* turn offset into absolute position */ } static Instruction *getjumpcontrol (FuncState *fs, int pc) { Instruction *pi = &fs->f->code[pc]; if (pc >= 1 && testTMode(GET_OPCODE(*(pi-1)))) return pi-1; else return pi; } /* ** check whether list has any jump that do not produce a value ** (or produce an inverted value) */ static int need_value (FuncState *fs, int list) { for (; list != NO_JUMP; list = getjump(fs, list)) { Instruction i = *getjumpcontrol(fs, list); if (GET_OPCODE(i) != OP_TESTSET) return 1; } return 0; /* not found */ } static int patchtestreg (FuncState *fs, int node, int reg) { Instruction *i = getjumpcontrol(fs, node); if (GET_OPCODE(*i) != OP_TESTSET) return 0; /* cannot patch other instructions */ if (reg != NO_REG && reg != GETARG_B(*i)) SETARG_A(*i, reg); else /* no register to put value or register already has the value */ *i = CREATE_ABC(OP_TEST, GETARG_B(*i), 0, GETARG_C(*i)); return 1; } static void removevalues (FuncState *fs, int list) { for (; list != NO_JUMP; list = getjump(fs, list)) patchtestreg(fs, list, NO_REG); } static void patchlistaux (FuncState *fs, int list, int vtarget, int reg, int dtarget) { while (list != NO_JUMP) { int next = getjump(fs, list); if (patchtestreg(fs, list, reg)) fixjump(fs, list, vtarget); else fixjump(fs, list, dtarget); /* jump to default target */ list = next; } } static void dischargejpc (FuncState *fs) { patchlistaux(fs, fs->jpc, fs->pc, NO_REG, fs->pc); fs->jpc = NO_JUMP; } void luaK_patchlist (FuncState *fs, int list, int target) { if (target == fs->pc) luaK_patchtohere(fs, list); else { lua_assert(target < fs->pc); patchlistaux(fs, list, target, NO_REG, target); } } LUAI_FUNC void luaK_patchclose (FuncState *fs, int list, int level) { level++; /* argument is +1 to reserve 0 as non-op */ while (list != NO_JUMP) { int next = getjump(fs, list); lua_assert(GET_OPCODE(fs->f->code[list]) == OP_JMP && (GETARG_A(fs->f->code[list]) == 0 || GETARG_A(fs->f->code[list]) >= level)); SETARG_A(fs->f->code[list], level); list = next; } } void luaK_patchtohere (FuncState *fs, int list) { luaK_getlabel(fs); luaK_concat(fs, &fs->jpc, list); } void luaK_concat (FuncState *fs, int *l1, int l2) { if (l2 == NO_JUMP) return; else if (*l1 == NO_JUMP) *l1 = l2; else { int list = *l1; int next; while ((next = getjump(fs, list)) != NO_JUMP) /* find last element */ list = next; fixjump(fs, list, l2); } } static int luaK_code (FuncState *fs, Instruction i) { Proto *f = fs->f; dischargejpc(fs); /* `pc' will change */ /* put new instruction in code array */ luaM_growvector(fs->ls->L, f->code, fs->pc, f->sizecode, Instruction, MAX_INT, "opcodes"); f->code[fs->pc] = i; /* save corresponding line information */ luaM_growvector(fs->ls->L, f->lineinfo, fs->pc, f->sizelineinfo, int, MAX_INT, "opcodes"); f->lineinfo[fs->pc] = fs->ls->lastline; return fs->pc++; } int luaK_codeABC (FuncState *fs, OpCode o, int a, int b, int c) { lua_assert(getOpMode(o) == iABC); lua_assert(getBMode(o) != OpArgN || b == 0); lua_assert(getCMode(o) != OpArgN || c == 0); lua_assert(a <= MAXARG_A && b <= MAXARG_B && c <= MAXARG_C); return luaK_code(fs, CREATE_ABC(o, a, b, c)); } int luaK_codeABx (FuncState *fs, OpCode o, int a, unsigned int bc) { lua_assert(getOpMode(o) == iABx || getOpMode(o) == iAsBx); lua_assert(getCMode(o) == OpArgN); lua_assert(a <= MAXARG_A && bc <= MAXARG_Bx); return luaK_code(fs, CREATE_ABx(o, a, bc)); } static int codeextraarg (FuncState *fs, int a) { lua_assert(a <= MAXARG_Ax); return luaK_code(fs, CREATE_Ax(OP_EXTRAARG, a)); } int luaK_codek (FuncState *fs, int reg, int k) { if (k <= MAXARG_Bx) return luaK_codeABx(fs, OP_LOADK, reg, k); else { int p = luaK_codeABx(fs, OP_LOADKX, reg, 0); codeextraarg(fs, k); return p; } } void luaK_checkstack (FuncState *fs, int n) { int newstack = fs->freereg + n; if (newstack > fs->f->maxstacksize) { if (newstack >= MAXSTACK) luaX_syntaxerror(fs->ls, "function or expression too complex"); fs->f->maxstacksize = cast_byte(newstack); } } void luaK_reserveregs (FuncState *fs, int n) { luaK_checkstack(fs, n); fs->freereg += n; } static void freereg (FuncState *fs, int reg) { if (!ISK(reg) && reg >= fs->nactvar) { fs->freereg--; lua_assert(reg == fs->freereg); } } static void freeexp (FuncState *fs, expdesc *e) { if (e->k == VNONRELOC) freereg(fs, e->u.info); } static int addk (FuncState *fs, TValue *key, TValue *v) { lua_State *L = fs->ls->L; TValue *idx = luaH_set(L, fs->h, key); Proto *f = fs->f; int k, oldsize; if (ttisnumber(idx)) { lua_Number n = nvalue(idx); lua_number2int(k, n); if (luaV_rawequalobj(&f->k[k], v)) return k; /* else may be a collision (e.g., between 0.0 and "\0\0\0\0\0\0\0\0"); go through and create a new entry for this value */ } /* constant not found; create a new entry */ oldsize = f->sizek; k = fs->nk; /* numerical value does not need GC barrier; table has no metatable, so it does not need to invalidate cache */ setnvalue(idx, cast_num(k)); luaM_growvector(L, f->k, k, f->sizek, TValue, MAXARG_Ax, "constants"); while (oldsize < f->sizek) setnilvalue(&f->k[oldsize++]); setobj(L, &f->k[k], v); fs->nk++; luaC_barrier(L, f, v); return k; } int luaK_stringK (FuncState *fs, TString *s) { TValue o; setsvalue(fs->ls->L, &o, s); return addk(fs, &o, &o); } int luaK_numberK (FuncState *fs, lua_Number r) { int n; lua_State *L = fs->ls->L; TValue o; setnvalue(&o, r); if (r == 0 || luai_numisnan(NULL, r)) { /* handle -0 and NaN */ /* use raw representation as key to avoid numeric problems */ setsvalue(L, L->top, luaS_newlstr(L, (char *)&r, sizeof(r))); incr_top(L); n = addk(fs, L->top - 1, &o); L->top--; } else n = addk(fs, &o, &o); /* regular case */ return n; } static int boolK (FuncState *fs, int b) { TValue o; setbvalue(&o, b); return addk(fs, &o, &o); } static int nilK (FuncState *fs) { TValue k, v; setnilvalue(&v); /* cannot use nil as key; instead use table itself to represent nil */ sethvalue(fs->ls->L, &k, fs->h); return addk(fs, &k, &v); } void luaK_setreturns (FuncState *fs, expdesc *e, int nresults) { if (e->k == VCALL) { /* expression is an open function call? */ SETARG_C(getcode(fs, e), nresults+1); } else if (e->k == VVARARG) { SETARG_B(getcode(fs, e), nresults+1); SETARG_A(getcode(fs, e), fs->freereg); luaK_reserveregs(fs, 1); } } void luaK_setoneret (FuncState *fs, expdesc *e) { if (e->k == VCALL) { /* expression is an open function call? */ e->k = VNONRELOC; e->u.info = GETARG_A(getcode(fs, e)); } else if (e->k == VVARARG) { SETARG_B(getcode(fs, e), 2); e->k = VRELOCABLE; /* can relocate its simple result */ } } void luaK_dischargevars (FuncState *fs, expdesc *e) { switch (e->k) { case VLOCAL: { e->k = VNONRELOC; break; } case VUPVAL: { e->u.info = luaK_codeABC(fs, OP_GETUPVAL, 0, e->u.info, 0); e->k = VRELOCABLE; break; } case VINDEXED: { OpCode op = OP_GETTABUP; /* assume 't' is in an upvalue */ freereg(fs, e->u.ind.idx); if (e->u.ind.vt == VLOCAL) { /* 't' is in a register? */ freereg(fs, e->u.ind.t); op = OP_GETTABLE; } e->u.info = luaK_codeABC(fs, op, 0, e->u.ind.t, e->u.ind.idx); e->k = VRELOCABLE; break; } case VVARARG: case VCALL: { luaK_setoneret(fs, e); break; } default: break; /* there is one value available (somewhere) */ } } static int code_label (FuncState *fs, int A, int b, int jump) { luaK_getlabel(fs); /* those instructions may be jump targets */ return luaK_codeABC(fs, OP_LOADBOOL, A, b, jump); } static void discharge2reg (FuncState *fs, expdesc *e, int reg) { luaK_dischargevars(fs, e); switch (e->k) { case VNIL: { luaK_nil(fs, reg, 1); break; } case VFALSE: case VTRUE: { luaK_codeABC(fs, OP_LOADBOOL, reg, e->k == VTRUE, 0); break; } case VK: { luaK_codek(fs, reg, e->u.info); break; } case VKNUM: { luaK_codek(fs, reg, luaK_numberK(fs, e->u.nval)); break; } case VRELOCABLE: { Instruction *pc = &getcode(fs, e); SETARG_A(*pc, reg); break; } case VNONRELOC: { if (reg != e->u.info) luaK_codeABC(fs, OP_MOVE, reg, e->u.info, 0); break; } default: { lua_assert(e->k == VVOID || e->k == VJMP); return; /* nothing to do... */ } } e->u.info = reg; e->k = VNONRELOC; } static void discharge2anyreg (FuncState *fs, expdesc *e) { if (e->k != VNONRELOC) { luaK_reserveregs(fs, 1); discharge2reg(fs, e, fs->freereg-1); } } static void exp2reg (FuncState *fs, expdesc *e, int reg) { discharge2reg(fs, e, reg); if (e->k == VJMP) luaK_concat(fs, &e->t, e->u.info); /* put this jump in `t' list */ if (hasjumps(e)) { int final; /* position after whole expression */ int p_f = NO_JUMP; /* position of an eventual LOAD false */ int p_t = NO_JUMP; /* position of an eventual LOAD true */ if (need_value(fs, e->t) || need_value(fs, e->f)) { int fj = (e->k == VJMP) ? NO_JUMP : luaK_jump(fs); p_f = code_label(fs, reg, 0, 1); p_t = code_label(fs, reg, 1, 0); luaK_patchtohere(fs, fj); } final = luaK_getlabel(fs); patchlistaux(fs, e->f, final, reg, p_f); patchlistaux(fs, e->t, final, reg, p_t); } e->f = e->t = NO_JUMP; e->u.info = reg; e->k = VNONRELOC; } void luaK_exp2nextreg (FuncState *fs, expdesc *e) { luaK_dischargevars(fs, e); freeexp(fs, e); luaK_reserveregs(fs, 1); exp2reg(fs, e, fs->freereg - 1); } int luaK_exp2anyreg (FuncState *fs, expdesc *e) { luaK_dischargevars(fs, e); if (e->k == VNONRELOC) { if (!hasjumps(e)) return e->u.info; /* exp is already in a register */ if (e->u.info >= fs->nactvar) { /* reg. is not a local? */ exp2reg(fs, e, e->u.info); /* put value on it */ return e->u.info; } } luaK_exp2nextreg(fs, e); /* default */ return e->u.info; } void luaK_exp2anyregup (FuncState *fs, expdesc *e) { if (e->k != VUPVAL || hasjumps(e)) luaK_exp2anyreg(fs, e); } void luaK_exp2val (FuncState *fs, expdesc *e) { if (hasjumps(e)) luaK_exp2anyreg(fs, e); else luaK_dischargevars(fs, e); } int luaK_exp2RK (FuncState *fs, expdesc *e) { luaK_exp2val(fs, e); switch (e->k) { case VTRUE: case VFALSE: case VNIL: { if (fs->nk <= MAXINDEXRK) { /* constant fits in RK operand? */ e->u.info = (e->k == VNIL) ? nilK(fs) : boolK(fs, (e->k == VTRUE)); e->k = VK; return RKASK(e->u.info); } else break; } case VKNUM: { e->u.info = luaK_numberK(fs, e->u.nval); e->k = VK; /* go through */ } case VK: { if (e->u.info <= MAXINDEXRK) /* constant fits in argC? */ return RKASK(e->u.info); else break; } default: break; } /* not a constant in the right range: put it in a register */ return luaK_exp2anyreg(fs, e); } void luaK_storevar (FuncState *fs, expdesc *var, expdesc *ex) { switch (var->k) { case VLOCAL: { freeexp(fs, ex); exp2reg(fs, ex, var->u.info); return; } case VUPVAL: { int e = luaK_exp2anyreg(fs, ex); luaK_codeABC(fs, OP_SETUPVAL, e, var->u.info, 0); break; } case VINDEXED: { OpCode op = (var->u.ind.vt == VLOCAL) ? OP_SETTABLE : OP_SETTABUP; int e = luaK_exp2RK(fs, ex); luaK_codeABC(fs, op, var->u.ind.t, var->u.ind.idx, e); break; } default: { lua_assert(0); /* invalid var kind to store */ break; } } freeexp(fs, ex); } void luaK_self (FuncState *fs, expdesc *e, expdesc *key) { int ereg; luaK_exp2anyreg(fs, e); ereg = e->u.info; /* register where 'e' was placed */ freeexp(fs, e); e->u.info = fs->freereg; /* base register for op_self */ e->k = VNONRELOC; luaK_reserveregs(fs, 2); /* function and 'self' produced by op_self */ luaK_codeABC(fs, OP_SELF, e->u.info, ereg, luaK_exp2RK(fs, key)); freeexp(fs, key); } static void invertjump (FuncState *fs, expdesc *e) { Instruction *pc = getjumpcontrol(fs, e->u.info); lua_assert(testTMode(GET_OPCODE(*pc)) && GET_OPCODE(*pc) != OP_TESTSET && GET_OPCODE(*pc) != OP_TEST); SETARG_A(*pc, !(GETARG_A(*pc))); } static int jumponcond (FuncState *fs, expdesc *e, int cond) { if (e->k == VRELOCABLE) { Instruction ie = getcode(fs, e); if (GET_OPCODE(ie) == OP_NOT) { fs->pc--; /* remove previous OP_NOT */ return condjump(fs, OP_TEST, GETARG_B(ie), 0, !cond); } /* else go through */ } discharge2anyreg(fs, e); freeexp(fs, e); return condjump(fs, OP_TESTSET, NO_REG, e->u.info, cond); } void luaK_goiftrue (FuncState *fs, expdesc *e) { int pc; /* pc of last jump */ luaK_dischargevars(fs, e); switch (e->k) { case VJMP: { invertjump(fs, e); pc = e->u.info; break; } case VK: case VKNUM: case VTRUE: { pc = NO_JUMP; /* always true; do nothing */ break; } default: { pc = jumponcond(fs, e, 0); break; } } luaK_concat(fs, &e->f, pc); /* insert last jump in `f' list */ luaK_patchtohere(fs, e->t); e->t = NO_JUMP; } void luaK_goiffalse (FuncState *fs, expdesc *e) { int pc; /* pc of last jump */ luaK_dischargevars(fs, e); switch (e->k) { case VJMP: { pc = e->u.info; break; } case VNIL: case VFALSE: { pc = NO_JUMP; /* always false; do nothing */ break; } default: { pc = jumponcond(fs, e, 1); break; } } luaK_concat(fs, &e->t, pc); /* insert last jump in `t' list */ luaK_patchtohere(fs, e->f); e->f = NO_JUMP; } static void codenot (FuncState *fs, expdesc *e) { luaK_dischargevars(fs, e); switch (e->k) { case VNIL: case VFALSE: { e->k = VTRUE; break; } case VK: case VKNUM: case VTRUE: { e->k = VFALSE; break; } case VJMP: { invertjump(fs, e); break; } case VRELOCABLE: case VNONRELOC: { discharge2anyreg(fs, e); freeexp(fs, e); e->u.info = luaK_codeABC(fs, OP_NOT, 0, e->u.info, 0); e->k = VRELOCABLE; break; } default: { lua_assert(0); /* cannot happen */ break; } } /* interchange true and false lists */ { int temp = e->f; e->f = e->t; e->t = temp; } removevalues(fs, e->f); removevalues(fs, e->t); } void luaK_indexed (FuncState *fs, expdesc *t, expdesc *k) { lua_assert(!hasjumps(t)); t->u.ind.t = t->u.info; t->u.ind.idx = luaK_exp2RK(fs, k); t->u.ind.vt = (t->k == VUPVAL) ? VUPVAL : check_exp(vkisinreg(t->k), VLOCAL); t->k = VINDEXED; } static int constfolding (OpCode op, expdesc *e1, expdesc *e2) { lua_Number r; if (!isnumeral(e1) || !isnumeral(e2)) return 0; if ((op == OP_DIV || op == OP_MOD) && e2->u.nval == 0) return 0; /* do not attempt to divide by 0 */ r = luaO_arith(op - OP_ADD + LUA_OPADD, e1->u.nval, e2->u.nval); e1->u.nval = r; return 1; } static void codearith (FuncState *fs, OpCode op, expdesc *e1, expdesc *e2, int line) { if (constfolding(op, e1, e2)) return; else { int o2 = (op != OP_UNM && op != OP_LEN) ? luaK_exp2RK(fs, e2) : 0; int o1 = luaK_exp2RK(fs, e1); if (o1 > o2) { freeexp(fs, e1); freeexp(fs, e2); } else { freeexp(fs, e2); freeexp(fs, e1); } e1->u.info = luaK_codeABC(fs, op, 0, o1, o2); e1->k = VRELOCABLE; luaK_fixline(fs, line); } } static void codecomp (FuncState *fs, OpCode op, int cond, expdesc *e1, expdesc *e2) { int o1 = luaK_exp2RK(fs, e1); int o2 = luaK_exp2RK(fs, e2); freeexp(fs, e2); freeexp(fs, e1); if (cond == 0 && op != OP_EQ) { int temp; /* exchange args to replace by `<' or `<=' */ temp = o1; o1 = o2; o2 = temp; /* o1 <==> o2 */ cond = 1; } e1->u.info = condjump(fs, op, cond, o1, o2); e1->k = VJMP; } void luaK_prefix (FuncState *fs, UnOpr op, expdesc *e, int line) { expdesc e2; e2.t = e2.f = NO_JUMP; e2.k = VKNUM; e2.u.nval = 0; switch (op) { case OPR_MINUS: { if (isnumeral(e)) /* minus constant? */ e->u.nval = luai_numunm(NULL, e->u.nval); /* fold it */ else { luaK_exp2anyreg(fs, e); codearith(fs, OP_UNM, e, &e2, line); } break; } case OPR_NOT: codenot(fs, e); break; case OPR_LEN: { luaK_exp2anyreg(fs, e); /* cannot operate on constants */ codearith(fs, OP_LEN, e, &e2, line); break; } default: lua_assert(0); } } void luaK_infix (FuncState *fs, BinOpr op, expdesc *v) { switch (op) { case OPR_AND: { luaK_goiftrue(fs, v); break; } case OPR_OR: { luaK_goiffalse(fs, v); break; } case OPR_CONCAT: { luaK_exp2nextreg(fs, v); /* operand must be on the `stack' */ break; } case OPR_ADD: case OPR_SUB: case OPR_MUL: case OPR_DIV: case OPR_MOD: case OPR_POW: { if (!isnumeral(v)) luaK_exp2RK(fs, v); break; } default: { luaK_exp2RK(fs, v); break; } } } void luaK_posfix (FuncState *fs, BinOpr op, expdesc *e1, expdesc *e2, int line) { switch (op) { case OPR_AND: { lua_assert(e1->t == NO_JUMP); /* list must be closed */ luaK_dischargevars(fs, e2); luaK_concat(fs, &e2->f, e1->f); *e1 = *e2; break; } case OPR_OR: { lua_assert(e1->f == NO_JUMP); /* list must be closed */ luaK_dischargevars(fs, e2); luaK_concat(fs, &e2->t, e1->t); *e1 = *e2; break; } case OPR_CONCAT: { luaK_exp2val(fs, e2); if (e2->k == VRELOCABLE && GET_OPCODE(getcode(fs, e2)) == OP_CONCAT) { lua_assert(e1->u.info == GETARG_B(getcode(fs, e2))-1); freeexp(fs, e1); SETARG_B(getcode(fs, e2), e1->u.info); e1->k = VRELOCABLE; e1->u.info = e2->u.info; } else { luaK_exp2nextreg(fs, e2); /* operand must be on the 'stack' */ codearith(fs, OP_CONCAT, e1, e2, line); } break; } case OPR_ADD: case OPR_SUB: case OPR_MUL: case OPR_DIV: case OPR_MOD: case OPR_POW: { codearith(fs, cast(OpCode, op - OPR_ADD + OP_ADD), e1, e2, line); break; } case OPR_EQ: case OPR_LT: case OPR_LE: { codecomp(fs, cast(OpCode, op - OPR_EQ + OP_EQ), 1, e1, e2); break; } case OPR_NE: case OPR_GT: case OPR_GE: { codecomp(fs, cast(OpCode, op - OPR_NE + OP_EQ), 0, e1, e2); break; } default: lua_assert(0); } } void luaK_fixline (FuncState *fs, int line) { fs->f->lineinfo[fs->pc - 1] = line; } void luaK_setlist (FuncState *fs, int base, int nelems, int tostore) { int c = (nelems - 1)/LFIELDS_PER_FLUSH + 1; int b = (tostore == LUA_MULTRET) ? 0 : tostore; lua_assert(tostore != 0); if (c <= MAXARG_C) luaK_codeABC(fs, OP_SETLIST, base, b, c); else if (c <= MAXARG_Ax) { luaK_codeABC(fs, OP_SETLIST, base, b, 0); codeextraarg(fs, c); } else luaX_syntaxerror(fs->ls, "constructor too long"); fs->freereg = base + 1; /* free registers with list values */ } fs-uae-2.2.3+dfsg/libfsemu/src/lua/lstrlib.c0000644000175000017500000006453012162366654021061 0ustar glaubitzglaubitz/* ** $Id: lstrlib.c,v 1.176 2012/05/23 15:37:09 roberto Exp $ ** Standard library for string operations and pattern-matching ** See Copyright Notice in lua.h */ #include #include #include #include #include #define lstrlib_c #define LUA_LIB #include "lua.h" #include "lauxlib.h" #include "lualib.h" /* ** maximum number of captures that a pattern can do during ** pattern-matching. This limit is arbitrary. */ #if !defined(LUA_MAXCAPTURES) #define LUA_MAXCAPTURES 32 #endif /* macro to `unsign' a character */ #define uchar(c) ((unsigned char)(c)) static int str_len (lua_State *L) { size_t l; luaL_checklstring(L, 1, &l); lua_pushinteger(L, (lua_Integer)l); return 1; } /* translate a relative string position: negative means back from end */ static size_t posrelat (ptrdiff_t pos, size_t len) { if (pos >= 0) return (size_t)pos; else if (0u - (size_t)pos > len) return 0; else return len - ((size_t)-pos) + 1; } static int str_sub (lua_State *L) { size_t l; const char *s = luaL_checklstring(L, 1, &l); size_t start = posrelat(luaL_checkinteger(L, 2), l); size_t end = posrelat(luaL_optinteger(L, 3, -1), l); if (start < 1) start = 1; if (end > l) end = l; if (start <= end) lua_pushlstring(L, s + start - 1, end - start + 1); else lua_pushliteral(L, ""); return 1; } static int str_reverse (lua_State *L) { size_t l, i; luaL_Buffer b; const char *s = luaL_checklstring(L, 1, &l); char *p = luaL_buffinitsize(L, &b, l); for (i = 0; i < l; i++) p[i] = s[l - i - 1]; luaL_pushresultsize(&b, l); return 1; } static int str_lower (lua_State *L) { size_t l; size_t i; luaL_Buffer b; const char *s = luaL_checklstring(L, 1, &l); char *p = luaL_buffinitsize(L, &b, l); for (i=0; i> 1) static int str_rep (lua_State *L) { size_t l, lsep; const char *s = luaL_checklstring(L, 1, &l); int n = luaL_checkint(L, 2); const char *sep = luaL_optlstring(L, 3, "", &lsep); if (n <= 0) lua_pushliteral(L, ""); else if (l + lsep < l || l + lsep >= MAXSIZE / n) /* may overflow? */ return luaL_error(L, "resulting string too large"); else { size_t totallen = n * l + (n - 1) * lsep; luaL_Buffer b; char *p = luaL_buffinitsize(L, &b, totallen); while (n-- > 1) { /* first n-1 copies (followed by separator) */ memcpy(p, s, l * sizeof(char)); p += l; if (lsep > 0) { /* avoid empty 'memcpy' (may be expensive) */ memcpy(p, sep, lsep * sizeof(char)); p += lsep; } } memcpy(p, s, l * sizeof(char)); /* last copy (not followed by separator) */ luaL_pushresultsize(&b, totallen); } return 1; } static int str_byte (lua_State *L) { size_t l; const char *s = luaL_checklstring(L, 1, &l); size_t posi = posrelat(luaL_optinteger(L, 2, 1), l); size_t pose = posrelat(luaL_optinteger(L, 3, posi), l); int n, i; if (posi < 1) posi = 1; if (pose > l) pose = l; if (posi > pose) return 0; /* empty interval; return no values */ n = (int)(pose - posi + 1); if (posi + n <= pose) /* (size_t -> int) overflow? */ return luaL_error(L, "string slice too long"); luaL_checkstack(L, n, "string slice too long"); for (i=0; i= ms->level || ms->capture[l].len == CAP_UNFINISHED) return luaL_error(ms->L, "invalid capture index %%%d", l + 1); return l; } static int capture_to_close (MatchState *ms) { int level = ms->level; for (level--; level>=0; level--) if (ms->capture[level].len == CAP_UNFINISHED) return level; return luaL_error(ms->L, "invalid pattern capture"); } static const char *classend (MatchState *ms, const char *p) { switch (*p++) { case L_ESC: { if (p == ms->p_end) luaL_error(ms->L, "malformed pattern (ends with " LUA_QL("%%") ")"); return p+1; } case '[': { if (*p == '^') p++; do { /* look for a `]' */ if (p == ms->p_end) luaL_error(ms->L, "malformed pattern (missing " LUA_QL("]") ")"); if (*(p++) == L_ESC && p < ms->p_end) p++; /* skip escapes (e.g. `%]') */ } while (*p != ']'); return p+1; } default: { return p; } } } static int match_class (int c, int cl) { int res; switch (tolower(cl)) { case 'a' : res = isalpha(c); break; case 'c' : res = iscntrl(c); break; case 'd' : res = isdigit(c); break; case 'g' : res = isgraph(c); break; case 'l' : res = islower(c); break; case 'p' : res = ispunct(c); break; case 's' : res = isspace(c); break; case 'u' : res = isupper(c); break; case 'w' : res = isalnum(c); break; case 'x' : res = isxdigit(c); break; case 'z' : res = (c == 0); break; /* deprecated option */ default: return (cl == c); } return (islower(cl) ? res : !res); } static int matchbracketclass (int c, const char *p, const char *ec) { int sig = 1; if (*(p+1) == '^') { sig = 0; p++; /* skip the `^' */ } while (++p < ec) { if (*p == L_ESC) { p++; if (match_class(c, uchar(*p))) return sig; } else if ((*(p+1) == '-') && (p+2 < ec)) { p+=2; if (uchar(*(p-2)) <= c && c <= uchar(*p)) return sig; } else if (uchar(*p) == c) return sig; } return !sig; } static int singlematch (int c, const char *p, const char *ep) { switch (*p) { case '.': return 1; /* matches any char */ case L_ESC: return match_class(c, uchar(*(p+1))); case '[': return matchbracketclass(c, p, ep-1); default: return (uchar(*p) == c); } } static const char *match (MatchState *ms, const char *s, const char *p); static const char *matchbalance (MatchState *ms, const char *s, const char *p) { if (p >= ms->p_end - 1) luaL_error(ms->L, "malformed pattern " "(missing arguments to " LUA_QL("%%b") ")"); if (*s != *p) return NULL; else { int b = *p; int e = *(p+1); int cont = 1; while (++s < ms->src_end) { if (*s == e) { if (--cont == 0) return s+1; } else if (*s == b) cont++; } } return NULL; /* string ends out of balance */ } static const char *max_expand (MatchState *ms, const char *s, const char *p, const char *ep) { ptrdiff_t i = 0; /* counts maximum expand for item */ while ((s+i)src_end && singlematch(uchar(*(s+i)), p, ep)) i++; /* keeps trying to match with the maximum repetitions */ while (i>=0) { const char *res = match(ms, (s+i), ep+1); if (res) return res; i--; /* else didn't match; reduce 1 repetition to try again */ } return NULL; } static const char *min_expand (MatchState *ms, const char *s, const char *p, const char *ep) { for (;;) { const char *res = match(ms, s, ep+1); if (res != NULL) return res; else if (ssrc_end && singlematch(uchar(*s), p, ep)) s++; /* try with one more repetition */ else return NULL; } } static const char *start_capture (MatchState *ms, const char *s, const char *p, int what) { const char *res; int level = ms->level; if (level >= LUA_MAXCAPTURES) luaL_error(ms->L, "too many captures"); ms->capture[level].init = s; ms->capture[level].len = what; ms->level = level+1; if ((res=match(ms, s, p)) == NULL) /* match failed? */ ms->level--; /* undo capture */ return res; } static const char *end_capture (MatchState *ms, const char *s, const char *p) { int l = capture_to_close(ms); const char *res; ms->capture[l].len = s - ms->capture[l].init; /* close capture */ if ((res = match(ms, s, p)) == NULL) /* match failed? */ ms->capture[l].len = CAP_UNFINISHED; /* undo capture */ return res; } static const char *match_capture (MatchState *ms, const char *s, int l) { size_t len; l = check_capture(ms, l); len = ms->capture[l].len; if ((size_t)(ms->src_end-s) >= len && memcmp(ms->capture[l].init, s, len) == 0) return s+len; else return NULL; } static const char *match (MatchState *ms, const char *s, const char *p) { init: /* using goto's to optimize tail recursion */ if (p == ms->p_end) /* end of pattern? */ return s; /* match succeeded */ switch (*p) { case '(': { /* start capture */ if (*(p+1) == ')') /* position capture? */ return start_capture(ms, s, p+2, CAP_POSITION); else return start_capture(ms, s, p+1, CAP_UNFINISHED); } case ')': { /* end capture */ return end_capture(ms, s, p+1); } case '$': { if ((p+1) == ms->p_end) /* is the `$' the last char in pattern? */ return (s == ms->src_end) ? s : NULL; /* check end of string */ else goto dflt; } case L_ESC: { /* escaped sequences not in the format class[*+?-]? */ switch (*(p+1)) { case 'b': { /* balanced string? */ s = matchbalance(ms, s, p+2); if (s == NULL) return NULL; p+=4; goto init; /* else return match(ms, s, p+4); */ } case 'f': { /* frontier? */ const char *ep; char previous; p += 2; if (*p != '[') luaL_error(ms->L, "missing " LUA_QL("[") " after " LUA_QL("%%f") " in pattern"); ep = classend(ms, p); /* points to what is next */ previous = (s == ms->src_init) ? '\0' : *(s-1); if (matchbracketclass(uchar(previous), p, ep-1) || !matchbracketclass(uchar(*s), p, ep-1)) return NULL; p=ep; goto init; /* else return match(ms, s, ep); */ } case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': { /* capture results (%0-%9)? */ s = match_capture(ms, s, uchar(*(p+1))); if (s == NULL) return NULL; p+=2; goto init; /* else return match(ms, s, p+2) */ } default: goto dflt; } } default: dflt: { /* pattern class plus optional suffix */ const char *ep = classend(ms, p); /* points to what is next */ int m = s < ms->src_end && singlematch(uchar(*s), p, ep); switch (*ep) { case '?': { /* optional */ const char *res; if (m && ((res=match(ms, s+1, ep+1)) != NULL)) return res; p=ep+1; goto init; /* else return match(ms, s, ep+1); */ } case '*': { /* 0 or more repetitions */ return max_expand(ms, s, p, ep); } case '+': { /* 1 or more repetitions */ return (m ? max_expand(ms, s+1, p, ep) : NULL); } case '-': { /* 0 or more repetitions (minimum) */ return min_expand(ms, s, p, ep); } default: { if (!m) return NULL; s++; p=ep; goto init; /* else return match(ms, s+1, ep); */ } } } } } static const char *lmemfind (const char *s1, size_t l1, const char *s2, size_t l2) { if (l2 == 0) return s1; /* empty strings are everywhere */ else if (l2 > l1) return NULL; /* avoids a negative `l1' */ else { const char *init; /* to search for a `*s2' inside `s1' */ l2--; /* 1st char will be checked by `memchr' */ l1 = l1-l2; /* `s2' cannot be found after that */ while (l1 > 0 && (init = (const char *)memchr(s1, *s2, l1)) != NULL) { init++; /* 1st char is already checked */ if (memcmp(init, s2+1, l2) == 0) return init-1; else { /* correct `l1' and `s1' to try again */ l1 -= init-s1; s1 = init; } } return NULL; /* not found */ } } static void push_onecapture (MatchState *ms, int i, const char *s, const char *e) { if (i >= ms->level) { if (i == 0) /* ms->level == 0, too */ lua_pushlstring(ms->L, s, e - s); /* add whole match */ else luaL_error(ms->L, "invalid capture index"); } else { ptrdiff_t l = ms->capture[i].len; if (l == CAP_UNFINISHED) luaL_error(ms->L, "unfinished capture"); if (l == CAP_POSITION) lua_pushinteger(ms->L, ms->capture[i].init - ms->src_init + 1); else lua_pushlstring(ms->L, ms->capture[i].init, l); } } static int push_captures (MatchState *ms, const char *s, const char *e) { int i; int nlevels = (ms->level == 0 && s) ? 1 : ms->level; luaL_checkstack(ms->L, nlevels, "too many captures"); for (i = 0; i < nlevels; i++) push_onecapture(ms, i, s, e); return nlevels; /* number of strings pushed */ } /* check whether pattern has no special characters */ static int nospecials (const char *p, size_t l) { size_t upto = 0; do { if (strpbrk(p + upto, SPECIALS)) return 0; /* pattern has a special character */ upto += strlen(p + upto) + 1; /* may have more after \0 */ } while (upto <= l); return 1; /* no special chars found */ } static int str_find_aux (lua_State *L, int find) { size_t ls, lp; const char *s = luaL_checklstring(L, 1, &ls); const char *p = luaL_checklstring(L, 2, &lp); size_t init = posrelat(luaL_optinteger(L, 3, 1), ls); if (init < 1) init = 1; else if (init > ls + 1) { /* start after string's end? */ lua_pushnil(L); /* cannot find anything */ return 1; } /* explicit request or no special characters? */ if (find && (lua_toboolean(L, 4) || nospecials(p, lp))) { /* do a plain search */ const char *s2 = lmemfind(s + init - 1, ls - init + 1, p, lp); if (s2) { lua_pushinteger(L, s2 - s + 1); lua_pushinteger(L, s2 - s + lp); return 2; } } else { MatchState ms; const char *s1 = s + init - 1; int anchor = (*p == '^'); if (anchor) { p++; lp--; /* skip anchor character */ } ms.L = L; ms.src_init = s; ms.src_end = s + ls; ms.p_end = p + lp; do { const char *res; ms.level = 0; if ((res=match(&ms, s1, p)) != NULL) { if (find) { lua_pushinteger(L, s1 - s + 1); /* start */ lua_pushinteger(L, res - s); /* end */ return push_captures(&ms, NULL, 0) + 2; } else return push_captures(&ms, s1, res); } } while (s1++ < ms.src_end && !anchor); } lua_pushnil(L); /* not found */ return 1; } static int str_find (lua_State *L) { return str_find_aux(L, 1); } static int str_match (lua_State *L) { return str_find_aux(L, 0); } static int gmatch_aux (lua_State *L) { MatchState ms; size_t ls, lp; const char *s = lua_tolstring(L, lua_upvalueindex(1), &ls); const char *p = lua_tolstring(L, lua_upvalueindex(2), &lp); const char *src; ms.L = L; ms.src_init = s; ms.src_end = s+ls; ms.p_end = p + lp; for (src = s + (size_t)lua_tointeger(L, lua_upvalueindex(3)); src <= ms.src_end; src++) { const char *e; ms.level = 0; if ((e = match(&ms, src, p)) != NULL) { lua_Integer newstart = e-s; if (e == src) newstart++; /* empty match? go at least one position */ lua_pushinteger(L, newstart); lua_replace(L, lua_upvalueindex(3)); return push_captures(&ms, src, e); } } return 0; /* not found */ } static int gmatch (lua_State *L) { luaL_checkstring(L, 1); luaL_checkstring(L, 2); lua_settop(L, 2); lua_pushinteger(L, 0); lua_pushcclosure(L, gmatch_aux, 3); return 1; } static void add_s (MatchState *ms, luaL_Buffer *b, const char *s, const char *e) { size_t l, i; const char *news = lua_tolstring(ms->L, 3, &l); for (i = 0; i < l; i++) { if (news[i] != L_ESC) luaL_addchar(b, news[i]); else { i++; /* skip ESC */ if (!isdigit(uchar(news[i]))) { if (news[i] != L_ESC) luaL_error(ms->L, "invalid use of " LUA_QL("%c") " in replacement string", L_ESC); luaL_addchar(b, news[i]); } else if (news[i] == '0') luaL_addlstring(b, s, e - s); else { push_onecapture(ms, news[i] - '1', s, e); luaL_addvalue(b); /* add capture to accumulated result */ } } } } static void add_value (MatchState *ms, luaL_Buffer *b, const char *s, const char *e, int tr) { lua_State *L = ms->L; switch (tr) { case LUA_TFUNCTION: { int n; lua_pushvalue(L, 3); n = push_captures(ms, s, e); lua_call(L, n, 1); break; } case LUA_TTABLE: { push_onecapture(ms, 0, s, e); lua_gettable(L, 3); break; } default: { /* LUA_TNUMBER or LUA_TSTRING */ add_s(ms, b, s, e); return; } } if (!lua_toboolean(L, -1)) { /* nil or false? */ lua_pop(L, 1); lua_pushlstring(L, s, e - s); /* keep original text */ } else if (!lua_isstring(L, -1)) luaL_error(L, "invalid replacement value (a %s)", luaL_typename(L, -1)); luaL_addvalue(b); /* add result to accumulator */ } static int str_gsub (lua_State *L) { size_t srcl, lp; const char *src = luaL_checklstring(L, 1, &srcl); const char *p = luaL_checklstring(L, 2, &lp); int tr = lua_type(L, 3); size_t max_s = luaL_optinteger(L, 4, srcl+1); int anchor = (*p == '^'); size_t n = 0; MatchState ms; luaL_Buffer b; luaL_argcheck(L, tr == LUA_TNUMBER || tr == LUA_TSTRING || tr == LUA_TFUNCTION || tr == LUA_TTABLE, 3, "string/function/table expected"); luaL_buffinit(L, &b); if (anchor) { p++; lp--; /* skip anchor character */ } ms.L = L; ms.src_init = src; ms.src_end = src+srcl; ms.p_end = p + lp; while (n < max_s) { const char *e; ms.level = 0; e = match(&ms, src, p); if (e) { n++; add_value(&ms, &b, src, e, tr); } if (e && e>src) /* non empty match? */ src = e; /* skip it */ else if (src < ms.src_end) luaL_addchar(&b, *src++); else break; if (anchor) break; } luaL_addlstring(&b, src, ms.src_end-src); luaL_pushresult(&b); lua_pushinteger(L, n); /* number of substitutions */ return 2; } /* }====================================================== */ /* ** {====================================================== ** STRING FORMAT ** ======================================================= */ /* ** LUA_INTFRMLEN is the length modifier for integer conversions in ** 'string.format'; LUA_INTFRM_T is the integer type corresponding to ** the previous length */ #if !defined(LUA_INTFRMLEN) /* { */ #if defined(LUA_USE_LONGLONG) #define LUA_INTFRMLEN "ll" #define LUA_INTFRM_T long long #else #define LUA_INTFRMLEN "l" #define LUA_INTFRM_T long #endif #endif /* } */ /* ** LUA_FLTFRMLEN is the length modifier for float conversions in ** 'string.format'; LUA_FLTFRM_T is the float type corresponding to ** the previous length */ #if !defined(LUA_FLTFRMLEN) #define LUA_FLTFRMLEN "" #define LUA_FLTFRM_T double #endif /* maximum size of each formatted item (> len(format('%99.99f', -1e308))) */ #define MAX_ITEM 512 /* valid flags in a format specification */ #define FLAGS "-+ #0" /* ** maximum size of each format specification (such as '%-099.99d') ** (+10 accounts for %99.99x plus margin of error) */ #define MAX_FORMAT (sizeof(FLAGS) + sizeof(LUA_INTFRMLEN) + 10) static void addquoted (lua_State *L, luaL_Buffer *b, int arg) { size_t l; const char *s = luaL_checklstring(L, arg, &l); luaL_addchar(b, '"'); while (l--) { if (*s == '"' || *s == '\\' || *s == '\n') { luaL_addchar(b, '\\'); luaL_addchar(b, *s); } else if (*s == '\0' || iscntrl(uchar(*s))) { char buff[10]; if (!isdigit(uchar(*(s+1)))) sprintf(buff, "\\%d", (int)uchar(*s)); else sprintf(buff, "\\%03d", (int)uchar(*s)); luaL_addstring(b, buff); } else luaL_addchar(b, *s); s++; } luaL_addchar(b, '"'); } static const char *scanformat (lua_State *L, const char *strfrmt, char *form) { const char *p = strfrmt; while (*p != '\0' && strchr(FLAGS, *p) != NULL) p++; /* skip flags */ if ((size_t)(p - strfrmt) >= sizeof(FLAGS)/sizeof(char)) luaL_error(L, "invalid format (repeated flags)"); if (isdigit(uchar(*p))) p++; /* skip width */ if (isdigit(uchar(*p))) p++; /* (2 digits at most) */ if (*p == '.') { p++; if (isdigit(uchar(*p))) p++; /* skip precision */ if (isdigit(uchar(*p))) p++; /* (2 digits at most) */ } if (isdigit(uchar(*p))) luaL_error(L, "invalid format (width or precision too long)"); *(form++) = '%'; memcpy(form, strfrmt, (p - strfrmt + 1) * sizeof(char)); form += p - strfrmt + 1; *form = '\0'; return p; } /* ** add length modifier into formats */ static void addlenmod (char *form, const char *lenmod) { size_t l = strlen(form); size_t lm = strlen(lenmod); char spec = form[l - 1]; strcpy(form + l - 1, lenmod); form[l + lm - 1] = spec; form[l + lm] = '\0'; } static int str_format (lua_State *L) { int top = lua_gettop(L); int arg = 1; size_t sfl; const char *strfrmt = luaL_checklstring(L, arg, &sfl); const char *strfrmt_end = strfrmt+sfl; luaL_Buffer b; luaL_buffinit(L, &b); while (strfrmt < strfrmt_end) { if (*strfrmt != L_ESC) luaL_addchar(&b, *strfrmt++); else if (*++strfrmt == L_ESC) luaL_addchar(&b, *strfrmt++); /* %% */ else { /* format item */ char form[MAX_FORMAT]; /* to store the format (`%...') */ char *buff = luaL_prepbuffsize(&b, MAX_ITEM); /* to put formatted item */ int nb = 0; /* number of bytes in added item */ if (++arg > top) luaL_argerror(L, arg, "no value"); strfrmt = scanformat(L, strfrmt, form); switch (*strfrmt++) { case 'c': { nb = sprintf(buff, form, luaL_checkint(L, arg)); break; } case 'd': case 'i': { lua_Number n = luaL_checknumber(L, arg); LUA_INTFRM_T ni = (LUA_INTFRM_T)n; lua_Number diff = n - (lua_Number)ni; luaL_argcheck(L, -1 < diff && diff < 1, arg, "not a number in proper range"); addlenmod(form, LUA_INTFRMLEN); nb = sprintf(buff, form, ni); break; } case 'o': case 'u': case 'x': case 'X': { lua_Number n = luaL_checknumber(L, arg); unsigned LUA_INTFRM_T ni = (unsigned LUA_INTFRM_T)n; lua_Number diff = n - (lua_Number)ni; luaL_argcheck(L, -1 < diff && diff < 1, arg, "not a non-negative number in proper range"); addlenmod(form, LUA_INTFRMLEN); nb = sprintf(buff, form, ni); break; } case 'e': case 'E': case 'f': #if defined(LUA_USE_AFORMAT) case 'a': case 'A': #endif case 'g': case 'G': { addlenmod(form, LUA_FLTFRMLEN); nb = sprintf(buff, form, (LUA_FLTFRM_T)luaL_checknumber(L, arg)); break; } case 'q': { addquoted(L, &b, arg); break; } case 's': { size_t l; const char *s = luaL_tolstring(L, arg, &l); if (!strchr(form, '.') && l >= 100) { /* no precision and string is too long to be formatted; keep original string */ luaL_addvalue(&b); break; } else { nb = sprintf(buff, form, s); lua_pop(L, 1); /* remove result from 'luaL_tolstring' */ break; } } default: { /* also treat cases `pnLlh' */ return luaL_error(L, "invalid option " LUA_QL("%%%c") " to " LUA_QL("format"), *(strfrmt - 1)); } } luaL_addsize(&b, nb); } } luaL_pushresult(&b); return 1; } /* }====================================================== */ static const luaL_Reg strlib[] = { {"byte", str_byte}, {"char", str_char}, {"dump", str_dump}, {"find", str_find}, {"format", str_format}, {"gmatch", gmatch}, {"gsub", str_gsub}, {"len", str_len}, {"lower", str_lower}, {"match", str_match}, {"rep", str_rep}, {"reverse", str_reverse}, {"sub", str_sub}, {"upper", str_upper}, {NULL, NULL} }; static void createmetatable (lua_State *L) { lua_createtable(L, 0, 1); /* table to be metatable for strings */ lua_pushliteral(L, ""); /* dummy string */ lua_pushvalue(L, -2); /* copy table */ lua_setmetatable(L, -2); /* set table as metatable for strings */ lua_pop(L, 1); /* pop dummy string */ lua_pushvalue(L, -2); /* get string library */ lua_setfield(L, -2, "__index"); /* metatable.__index = string */ lua_pop(L, 1); /* pop metatable */ } /* ** Open string library */ LUAMOD_API int luaopen_string (lua_State *L) { luaL_newlib(L, strlib); createmetatable(L); return 1; } fs-uae-2.2.3+dfsg/libfsemu/src/lua/lstate.h0000644000175000017500000001656312162366654020712 0ustar glaubitzglaubitz/* ** $Id: lstate.h,v 2.81 2012/06/08 15:14:04 roberto Exp $ ** Global State ** See Copyright Notice in lua.h */ #ifndef lstate_h #define lstate_h #include "lua.h" #include "lobject.h" #include "ltm.h" #include "lzio.h" /* ** Some notes about garbage-collected objects: All objects in Lua must ** be kept somehow accessible until being freed. ** ** Lua keeps most objects linked in list g->allgc. The link uses field ** 'next' of the CommonHeader. ** ** Strings are kept in several lists headed by the array g->strt.hash. ** ** Open upvalues are not subject to independent garbage collection. They ** are collected together with their respective threads. Lua keeps a ** double-linked list with all open upvalues (g->uvhead) so that it can ** mark objects referred by them. (They are always gray, so they must ** be remarked in the atomic step. Usually their contents would be marked ** when traversing the respective threads, but the thread may already be ** dead, while the upvalue is still accessible through closures.) ** ** Objects with finalizers are kept in the list g->finobj. ** ** The list g->tobefnz links all objects being finalized. */ struct lua_longjmp; /* defined in ldo.c */ /* extra stack space to handle TM calls and some other extras */ #define EXTRA_STACK 5 #define BASIC_STACK_SIZE (2*LUA_MINSTACK) /* kinds of Garbage Collection */ #define KGC_NORMAL 0 #define KGC_EMERGENCY 1 /* gc was forced by an allocation failure */ #define KGC_GEN 2 /* generational collection */ typedef struct stringtable { GCObject **hash; lu_int32 nuse; /* number of elements */ int size; } stringtable; /* ** information about a call */ typedef struct CallInfo { StkId func; /* function index in the stack */ StkId top; /* top for this function */ struct CallInfo *previous, *next; /* dynamic call link */ short nresults; /* expected number of results from this function */ lu_byte callstatus; ptrdiff_t extra; union { struct { /* only for Lua functions */ StkId base; /* base for this function */ const Instruction *savedpc; } l; struct { /* only for C functions */ int ctx; /* context info. in case of yields */ lua_CFunction k; /* continuation in case of yields */ ptrdiff_t old_errfunc; lu_byte old_allowhook; lu_byte status; } c; } u; } CallInfo; /* ** Bits in CallInfo status */ #define CIST_LUA (1<<0) /* call is running a Lua function */ #define CIST_HOOKED (1<<1) /* call is running a debug hook */ #define CIST_REENTRY (1<<2) /* call is running on same invocation of luaV_execute of previous call */ #define CIST_YIELDED (1<<3) /* call reentered after suspension */ #define CIST_YPCALL (1<<4) /* call is a yieldable protected call */ #define CIST_STAT (1<<5) /* call has an error status (pcall) */ #define CIST_TAIL (1<<6) /* call was tail called */ #define CIST_HOOKYIELD (1<<7) /* last hook called yielded */ #define isLua(ci) ((ci)->callstatus & CIST_LUA) /* ** `global state', shared by all threads of this state */ typedef struct global_State { lua_Alloc frealloc; /* function to reallocate memory */ void *ud; /* auxiliary data to `frealloc' */ lu_mem totalbytes; /* number of bytes currently allocated - GCdebt */ l_mem GCdebt; /* bytes allocated not yet compensated by the collector */ lu_mem GCmemtrav; /* memory traversed by the GC */ lu_mem GCestimate; /* an estimate of the non-garbage memory in use */ stringtable strt; /* hash table for strings */ TValue l_registry; unsigned int seed; /* randomized seed for hashes */ lu_byte currentwhite; lu_byte gcstate; /* state of garbage collector */ lu_byte gckind; /* kind of GC running */ lu_byte gcrunning; /* true if GC is running */ int sweepstrgc; /* position of sweep in `strt' */ GCObject *allgc; /* list of all collectable objects */ GCObject *finobj; /* list of collectable objects with finalizers */ GCObject **sweepgc; /* current position of sweep in list 'allgc' */ GCObject **sweepfin; /* current position of sweep in list 'finobj' */ GCObject *gray; /* list of gray objects */ GCObject *grayagain; /* list of objects to be traversed atomically */ GCObject *weak; /* list of tables with weak values */ GCObject *ephemeron; /* list of ephemeron tables (weak keys) */ GCObject *allweak; /* list of all-weak tables */ GCObject *tobefnz; /* list of userdata to be GC */ UpVal uvhead; /* head of double-linked list of all open upvalues */ Mbuffer buff; /* temporary buffer for string concatenation */ int gcpause; /* size of pause between successive GCs */ int gcmajorinc; /* how much to wait for a major GC (only in gen. mode) */ int gcstepmul; /* GC `granularity' */ lua_CFunction panic; /* to be called in unprotected errors */ struct lua_State *mainthread; const lua_Number *version; /* pointer to version number */ TString *memerrmsg; /* memory-error message */ TString *tmname[TM_N]; /* array with tag-method names */ struct Table *mt[LUA_NUMTAGS]; /* metatables for basic types */ } global_State; /* ** `per thread' state */ struct lua_State { CommonHeader; lu_byte status; StkId top; /* first free slot in the stack */ global_State *l_G; CallInfo *ci; /* call info for current function */ const Instruction *oldpc; /* last pc traced */ StkId stack_last; /* last free slot in the stack */ StkId stack; /* stack base */ int stacksize; unsigned short nny; /* number of non-yieldable calls in stack */ unsigned short nCcalls; /* number of nested C calls */ lu_byte hookmask; lu_byte allowhook; int basehookcount; int hookcount; lua_Hook hook; GCObject *openupval; /* list of open upvalues in this stack */ GCObject *gclist; struct lua_longjmp *errorJmp; /* current error recover point */ ptrdiff_t errfunc; /* current error handling function (stack index) */ CallInfo base_ci; /* CallInfo for first level (C calling Lua) */ }; #define G(L) (L->l_G) /* ** Union of all collectable objects */ union GCObject { GCheader gch; /* common header */ union TString ts; union Udata u; union Closure cl; struct Table h; struct Proto p; struct UpVal uv; struct lua_State th; /* thread */ }; #define gch(o) (&(o)->gch) /* macros to convert a GCObject into a specific value */ #define rawgco2ts(o) \ check_exp(novariant((o)->gch.tt) == LUA_TSTRING, &((o)->ts)) #define gco2ts(o) (&rawgco2ts(o)->tsv) #define rawgco2u(o) check_exp((o)->gch.tt == LUA_TUSERDATA, &((o)->u)) #define gco2u(o) (&rawgco2u(o)->uv) #define gco2lcl(o) check_exp((o)->gch.tt == LUA_TLCL, &((o)->cl.l)) #define gco2ccl(o) check_exp((o)->gch.tt == LUA_TCCL, &((o)->cl.c)) #define gco2cl(o) \ check_exp(novariant((o)->gch.tt) == LUA_TFUNCTION, &((o)->cl)) #define gco2t(o) check_exp((o)->gch.tt == LUA_TTABLE, &((o)->h)) #define gco2p(o) check_exp((o)->gch.tt == LUA_TPROTO, &((o)->p)) #define gco2uv(o) check_exp((o)->gch.tt == LUA_TUPVAL, &((o)->uv)) #define gco2th(o) check_exp((o)->gch.tt == LUA_TTHREAD, &((o)->th)) /* macro to convert any Lua object into a GCObject */ #define obj2gco(v) (cast(GCObject *, (v))) /* actual number of total bytes allocated */ #define gettotalbytes(g) ((g)->totalbytes + (g)->GCdebt) LUAI_FUNC void luaE_setdebt (global_State *g, l_mem debt); LUAI_FUNC void luaE_freethread (lua_State *L, lua_State *L1); LUAI_FUNC CallInfo *luaE_extendCI (lua_State *L); LUAI_FUNC void luaE_freeCI (lua_State *L); #endif fs-uae-2.2.3+dfsg/libfsemu/src/lua/lopcodes.c0000644000175000017500000000600012162366654021202 0ustar glaubitzglaubitz/* ** $Id: lopcodes.c,v 1.49 2012/05/14 13:34:18 roberto Exp $ ** Opcodes for Lua virtual machine ** See Copyright Notice in lua.h */ #define lopcodes_c #define LUA_CORE #include "lopcodes.h" /* ORDER OP */ LUAI_DDEF const char *const luaP_opnames[NUM_OPCODES+1] = { "MOVE", "LOADK", "LOADKX", "LOADBOOL", "LOADNIL", "GETUPVAL", "GETTABUP", "GETTABLE", "SETTABUP", "SETUPVAL", "SETTABLE", "NEWTABLE", "SELF", "ADD", "SUB", "MUL", "DIV", "MOD", "POW", "UNM", "NOT", "LEN", "CONCAT", "JMP", "EQ", "LT", "LE", "TEST", "TESTSET", "CALL", "TAILCALL", "RETURN", "FORLOOP", "FORPREP", "TFORCALL", "TFORLOOP", "SETLIST", "CLOSURE", "VARARG", "EXTRAARG", NULL }; #define opmode(t,a,b,c,m) (((t)<<7) | ((a)<<6) | ((b)<<4) | ((c)<<2) | (m)) LUAI_DDEF const lu_byte luaP_opmodes[NUM_OPCODES] = { /* T A B C mode opcode */ opmode(0, 1, OpArgR, OpArgN, iABC) /* OP_MOVE */ ,opmode(0, 1, OpArgK, OpArgN, iABx) /* OP_LOADK */ ,opmode(0, 1, OpArgN, OpArgN, iABx) /* OP_LOADKX */ ,opmode(0, 1, OpArgU, OpArgU, iABC) /* OP_LOADBOOL */ ,opmode(0, 1, OpArgU, OpArgN, iABC) /* OP_LOADNIL */ ,opmode(0, 1, OpArgU, OpArgN, iABC) /* OP_GETUPVAL */ ,opmode(0, 1, OpArgU, OpArgK, iABC) /* OP_GETTABUP */ ,opmode(0, 1, OpArgR, OpArgK, iABC) /* OP_GETTABLE */ ,opmode(0, 0, OpArgK, OpArgK, iABC) /* OP_SETTABUP */ ,opmode(0, 0, OpArgU, OpArgN, iABC) /* OP_SETUPVAL */ ,opmode(0, 0, OpArgK, OpArgK, iABC) /* OP_SETTABLE */ ,opmode(0, 1, OpArgU, OpArgU, iABC) /* OP_NEWTABLE */ ,opmode(0, 1, OpArgR, OpArgK, iABC) /* OP_SELF */ ,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_ADD */ ,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_SUB */ ,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_MUL */ ,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_DIV */ ,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_MOD */ ,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_POW */ ,opmode(0, 1, OpArgR, OpArgN, iABC) /* OP_UNM */ ,opmode(0, 1, OpArgR, OpArgN, iABC) /* OP_NOT */ ,opmode(0, 1, OpArgR, OpArgN, iABC) /* OP_LEN */ ,opmode(0, 1, OpArgR, OpArgR, iABC) /* OP_CONCAT */ ,opmode(0, 0, OpArgR, OpArgN, iAsBx) /* OP_JMP */ ,opmode(1, 0, OpArgK, OpArgK, iABC) /* OP_EQ */ ,opmode(1, 0, OpArgK, OpArgK, iABC) /* OP_LT */ ,opmode(1, 0, OpArgK, OpArgK, iABC) /* OP_LE */ ,opmode(1, 0, OpArgN, OpArgU, iABC) /* OP_TEST */ ,opmode(1, 1, OpArgR, OpArgU, iABC) /* OP_TESTSET */ ,opmode(0, 1, OpArgU, OpArgU, iABC) /* OP_CALL */ ,opmode(0, 1, OpArgU, OpArgU, iABC) /* OP_TAILCALL */ ,opmode(0, 0, OpArgU, OpArgN, iABC) /* OP_RETURN */ ,opmode(0, 1, OpArgR, OpArgN, iAsBx) /* OP_FORLOOP */ ,opmode(0, 1, OpArgR, OpArgN, iAsBx) /* OP_FORPREP */ ,opmode(0, 0, OpArgN, OpArgU, iABC) /* OP_TFORCALL */ ,opmode(0, 1, OpArgR, OpArgN, iAsBx) /* OP_TFORLOOP */ ,opmode(0, 0, OpArgU, OpArgU, iABC) /* OP_SETLIST */ ,opmode(0, 1, OpArgU, OpArgN, iABx) /* OP_CLOSURE */ ,opmode(0, 1, OpArgU, OpArgN, iABC) /* OP_VARARG */ ,opmode(0, 0, OpArgU, OpArgU, iAx) /* OP_EXTRAARG */ }; fs-uae-2.2.3+dfsg/libfsemu/src/lua/lopcodes.h0000644000175000017500000002044212162366654021215 0ustar glaubitzglaubitz/* ** $Id: lopcodes.h,v 1.142 2011/07/15 12:50:29 roberto Exp $ ** Opcodes for Lua virtual machine ** See Copyright Notice in lua.h */ #ifndef lopcodes_h #define lopcodes_h #include "llimits.h" /*=========================================================================== We assume that instructions are unsigned numbers. All instructions have an opcode in the first 6 bits. Instructions can have the following fields: `A' : 8 bits `B' : 9 bits `C' : 9 bits 'Ax' : 26 bits ('A', 'B', and 'C' together) `Bx' : 18 bits (`B' and `C' together) `sBx' : signed Bx A signed argument is represented in excess K; that is, the number value is the unsigned value minus K. K is exactly the maximum value for that argument (so that -max is represented by 0, and +max is represented by 2*max), which is half the maximum for the corresponding unsigned argument. ===========================================================================*/ enum OpMode {iABC, iABx, iAsBx, iAx}; /* basic instruction format */ /* ** size and position of opcode arguments. */ #define SIZE_C 9 #define SIZE_B 9 #define SIZE_Bx (SIZE_C + SIZE_B) #define SIZE_A 8 #define SIZE_Ax (SIZE_C + SIZE_B + SIZE_A) #define SIZE_OP 6 #define POS_OP 0 #define POS_A (POS_OP + SIZE_OP) #define POS_C (POS_A + SIZE_A) #define POS_B (POS_C + SIZE_C) #define POS_Bx POS_C #define POS_Ax POS_A /* ** limits for opcode arguments. ** we use (signed) int to manipulate most arguments, ** so they must fit in LUAI_BITSINT-1 bits (-1 for sign) */ #if SIZE_Bx < LUAI_BITSINT-1 #define MAXARG_Bx ((1<>1) /* `sBx' is signed */ #else #define MAXARG_Bx MAX_INT #define MAXARG_sBx MAX_INT #endif #if SIZE_Ax < LUAI_BITSINT-1 #define MAXARG_Ax ((1<>POS_OP) & MASK1(SIZE_OP,0))) #define SET_OPCODE(i,o) ((i) = (((i)&MASK0(SIZE_OP,POS_OP)) | \ ((cast(Instruction, o)<>pos) & MASK1(size,0))) #define setarg(i,v,pos,size) ((i) = (((i)&MASK0(size,pos)) | \ ((cast(Instruction, v)<= R(A) + 1 */ OP_EQ,/* A B C if ((RK(B) == RK(C)) ~= A) then pc++ */ OP_LT,/* A B C if ((RK(B) < RK(C)) ~= A) then pc++ */ OP_LE,/* A B C if ((RK(B) <= RK(C)) ~= A) then pc++ */ OP_TEST,/* A C if not (R(A) <=> C) then pc++ */ OP_TESTSET,/* A B C if (R(B) <=> C) then R(A) := R(B) else pc++ */ OP_CALL,/* A B C R(A), ... ,R(A+C-2) := R(A)(R(A+1), ... ,R(A+B-1)) */ OP_TAILCALL,/* A B C return R(A)(R(A+1), ... ,R(A+B-1)) */ OP_RETURN,/* A B return R(A), ... ,R(A+B-2) (see note) */ OP_FORLOOP,/* A sBx R(A)+=R(A+2); if R(A) > 4) & 3)) #define getCMode(m) (cast(enum OpArgMask, (luaP_opmodes[m] >> 2) & 3)) #define testAMode(m) (luaP_opmodes[m] & (1 << 6)) #define testTMode(m) (luaP_opmodes[m] & (1 << 7)) LUAI_DDEC const char *const luaP_opnames[NUM_OPCODES+1]; /* opcode names */ /* number of list items to accumulate before a SETLIST instruction */ #define LFIELDS_PER_FLUSH 50 #endif fs-uae-2.2.3+dfsg/libfsemu/src/lua/lfunc.c0000644000175000017500000001027512162366654020512 0ustar glaubitzglaubitz/* ** $Id: lfunc.c,v 2.29 2012/05/08 13:53:33 roberto Exp $ ** Auxiliary functions to manipulate prototypes and closures ** See Copyright Notice in lua.h */ #include #define lfunc_c #define LUA_CORE #include "lua.h" #include "lfunc.h" #include "lgc.h" #include "lmem.h" #include "lobject.h" #include "lstate.h" Closure *luaF_newCclosure (lua_State *L, int n) { Closure *c = &luaC_newobj(L, LUA_TCCL, sizeCclosure(n), NULL, 0)->cl; c->c.nupvalues = cast_byte(n); return c; } Closure *luaF_newLclosure (lua_State *L, int n) { Closure *c = &luaC_newobj(L, LUA_TLCL, sizeLclosure(n), NULL, 0)->cl; c->l.p = NULL; c->l.nupvalues = cast_byte(n); while (n--) c->l.upvals[n] = NULL; return c; } UpVal *luaF_newupval (lua_State *L) { UpVal *uv = &luaC_newobj(L, LUA_TUPVAL, sizeof(UpVal), NULL, 0)->uv; uv->v = &uv->u.value; setnilvalue(uv->v); return uv; } UpVal *luaF_findupval (lua_State *L, StkId level) { global_State *g = G(L); GCObject **pp = &L->openupval; UpVal *p; UpVal *uv; while (*pp != NULL && (p = gco2uv(*pp))->v >= level) { GCObject *o = obj2gco(p); lua_assert(p->v != &p->u.value); if (p->v == level) { /* found a corresponding upvalue? */ if (isdead(g, o)) /* is it dead? */ changewhite(o); /* resurrect it */ return p; } resetoldbit(o); /* may create a newer upval after this one */ pp = &p->next; } /* not found: create a new one */ uv = &luaC_newobj(L, LUA_TUPVAL, sizeof(UpVal), pp, 0)->uv; uv->v = level; /* current value lives in the stack */ uv->u.l.prev = &g->uvhead; /* double link it in `uvhead' list */ uv->u.l.next = g->uvhead.u.l.next; uv->u.l.next->u.l.prev = uv; g->uvhead.u.l.next = uv; lua_assert(uv->u.l.next->u.l.prev == uv && uv->u.l.prev->u.l.next == uv); return uv; } static void unlinkupval (UpVal *uv) { lua_assert(uv->u.l.next->u.l.prev == uv && uv->u.l.prev->u.l.next == uv); uv->u.l.next->u.l.prev = uv->u.l.prev; /* remove from `uvhead' list */ uv->u.l.prev->u.l.next = uv->u.l.next; } void luaF_freeupval (lua_State *L, UpVal *uv) { if (uv->v != &uv->u.value) /* is it open? */ unlinkupval(uv); /* remove from open list */ luaM_free(L, uv); /* free upvalue */ } void luaF_close (lua_State *L, StkId level) { UpVal *uv; global_State *g = G(L); while (L->openupval != NULL && (uv = gco2uv(L->openupval))->v >= level) { GCObject *o = obj2gco(uv); lua_assert(!isblack(o) && uv->v != &uv->u.value); L->openupval = uv->next; /* remove from `open' list */ if (isdead(g, o)) luaF_freeupval(L, uv); /* free upvalue */ else { unlinkupval(uv); /* remove upvalue from 'uvhead' list */ setobj(L, &uv->u.value, uv->v); /* move value to upvalue slot */ uv->v = &uv->u.value; /* now current value lives here */ gch(o)->next = g->allgc; /* link upvalue into 'allgc' list */ g->allgc = o; luaC_checkupvalcolor(g, uv); } } } Proto *luaF_newproto (lua_State *L) { Proto *f = &luaC_newobj(L, LUA_TPROTO, sizeof(Proto), NULL, 0)->p; f->k = NULL; f->sizek = 0; f->p = NULL; f->sizep = 0; f->code = NULL; f->cache = NULL; f->sizecode = 0; f->lineinfo = NULL; f->sizelineinfo = 0; f->upvalues = NULL; f->sizeupvalues = 0; f->numparams = 0; f->is_vararg = 0; f->maxstacksize = 0; f->locvars = NULL; f->sizelocvars = 0; f->linedefined = 0; f->lastlinedefined = 0; f->source = NULL; return f; } void luaF_freeproto (lua_State *L, Proto *f) { luaM_freearray(L, f->code, f->sizecode); luaM_freearray(L, f->p, f->sizep); luaM_freearray(L, f->k, f->sizek); luaM_freearray(L, f->lineinfo, f->sizelineinfo); luaM_freearray(L, f->locvars, f->sizelocvars); luaM_freearray(L, f->upvalues, f->sizeupvalues); luaM_free(L, f); } /* ** Look for n-th local variable at line `line' in function `func'. ** Returns NULL if not found. */ const char *luaF_getlocalname (const Proto *f, int local_number, int pc) { int i; for (i = 0; isizelocvars && f->locvars[i].startpc <= pc; i++) { if (pc < f->locvars[i].endpc) { /* is variable active? */ local_number--; if (local_number == 0) return getstr(f->locvars[i].varname); } } return NULL; /* not found */ } fs-uae-2.2.3+dfsg/libfsemu/src/lua/ltm.c0000644000175000017500000000340312162366654020172 0ustar glaubitzglaubitz/* ** $Id: ltm.c,v 2.14 2011/06/02 19:31:40 roberto Exp $ ** Tag methods ** See Copyright Notice in lua.h */ #include #define ltm_c #define LUA_CORE #include "lua.h" #include "lobject.h" #include "lstate.h" #include "lstring.h" #include "ltable.h" #include "ltm.h" static const char udatatypename[] = "userdata"; LUAI_DDEF const char *const luaT_typenames_[LUA_TOTALTAGS] = { "no value", "nil", "boolean", udatatypename, "number", "string", "table", "function", udatatypename, "thread", "proto", "upval" /* these last two cases are used for tests only */ }; void luaT_init (lua_State *L) { static const char *const luaT_eventname[] = { /* ORDER TM */ "__index", "__newindex", "__gc", "__mode", "__len", "__eq", "__add", "__sub", "__mul", "__div", "__mod", "__pow", "__unm", "__lt", "__le", "__concat", "__call" }; int i; for (i=0; itmname[i] = luaS_new(L, luaT_eventname[i]); luaS_fix(G(L)->tmname[i]); /* never collect these names */ } } /* ** function to be used with macro "fasttm": optimized for absence of ** tag methods */ const TValue *luaT_gettm (Table *events, TMS event, TString *ename) { const TValue *tm = luaH_getstr(events, ename); lua_assert(event <= TM_EQ); if (ttisnil(tm)) { /* no tag method? */ events->flags |= cast_byte(1u<metatable; break; case LUA_TUSERDATA: mt = uvalue(o)->metatable; break; default: mt = G(L)->mt[ttypenv(o)]; } return (mt ? luaH_getstr(mt, G(L)->tmname[event]) : luaO_nilobject); } fs-uae-2.2.3+dfsg/libfsemu/src/lua/lctype.c0000644000175000017500000000436712162366654020710 0ustar glaubitzglaubitz/* ** $Id: lctype.c,v 1.11 2011/10/03 16:19:23 roberto Exp $ ** 'ctype' functions for Lua ** See Copyright Notice in lua.h */ #define lctype_c #define LUA_CORE #include "lctype.h" #if !LUA_USE_CTYPE /* { */ #include LUAI_DDEF const lu_byte luai_ctype_[UCHAR_MAX + 2] = { 0x00, /* EOZ */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0. */ 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 1. */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, /* 2. */ 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, /* 3. */ 0x16, 0x16, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x05, /* 4. */ 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, /* 5. */ 0x05, 0x05, 0x05, 0x04, 0x04, 0x04, 0x04, 0x05, 0x04, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x05, /* 6. */ 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, /* 7. */ 0x05, 0x05, 0x05, 0x04, 0x04, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 8. */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 9. */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* a. */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* b. */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* c. */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* d. */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* e. */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* f. */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; #endif /* } */ fs-uae-2.2.3+dfsg/libfsemu/src/lua/lapi.c0000644000175000017500000007205012162366654020327 0ustar glaubitzglaubitz/* ** $Id: lapi.c,v 2.164 2012/06/08 15:14:04 roberto Exp $ ** Lua API ** See Copyright Notice in lua.h */ #include #include #define lapi_c #define LUA_CORE #include "lua.h" #include "lapi.h" #include "ldebug.h" #include "ldo.h" #include "lfunc.h" #include "lgc.h" #include "lmem.h" #include "lobject.h" #include "lstate.h" #include "lstring.h" #include "ltable.h" #include "ltm.h" #include "lundump.h" #include "lvm.h" const char lua_ident[] = "$LuaVersion: " LUA_COPYRIGHT " $" "$LuaAuthors: " LUA_AUTHORS " $"; /* value at a non-valid index */ #define NONVALIDVALUE cast(TValue *, luaO_nilobject) /* corresponding test */ #define isvalid(o) ((o) != luaO_nilobject) #define api_checkvalidindex(L, i) api_check(L, isvalid(i), "invalid index") static TValue *index2addr (lua_State *L, int idx) { CallInfo *ci = L->ci; if (idx > 0) { TValue *o = ci->func + idx; api_check(L, idx <= ci->top - (ci->func + 1), "unacceptable index"); if (o >= L->top) return NONVALIDVALUE; else return o; } else if (idx > LUA_REGISTRYINDEX) { api_check(L, idx != 0 && -idx <= L->top - (ci->func + 1), "invalid index"); return L->top + idx; } else if (idx == LUA_REGISTRYINDEX) return &G(L)->l_registry; else { /* upvalues */ idx = LUA_REGISTRYINDEX - idx; api_check(L, idx <= MAXUPVAL + 1, "upvalue index too large"); if (ttislcf(ci->func)) /* light C function? */ return NONVALIDVALUE; /* it has no upvalues */ else { CClosure *func = clCvalue(ci->func); return (idx <= func->nupvalues) ? &func->upvalue[idx-1] : NONVALIDVALUE; } } } /* ** to be called by 'lua_checkstack' in protected mode, to grow stack ** capturing memory errors */ static void growstack (lua_State *L, void *ud) { int size = *(int *)ud; luaD_growstack(L, size); } LUA_API int lua_checkstack (lua_State *L, int size) { int res; CallInfo *ci = L->ci; lua_lock(L); if (L->stack_last - L->top > size) /* stack large enough? */ res = 1; /* yes; check is OK */ else { /* no; need to grow stack */ int inuse = cast_int(L->top - L->stack) + EXTRA_STACK; if (inuse > LUAI_MAXSTACK - size) /* can grow without overflow? */ res = 0; /* no */ else /* try to grow stack */ res = (luaD_rawrunprotected(L, &growstack, &size) == LUA_OK); } if (res && ci->top < L->top + size) ci->top = L->top + size; /* adjust frame top */ lua_unlock(L); return res; } LUA_API void lua_xmove (lua_State *from, lua_State *to, int n) { int i; if (from == to) return; lua_lock(to); api_checknelems(from, n); api_check(from, G(from) == G(to), "moving among independent states"); api_check(from, to->ci->top - to->top >= n, "not enough elements to move"); from->top -= n; for (i = 0; i < n; i++) { setobj2s(to, to->top++, from->top + i); } lua_unlock(to); } LUA_API lua_CFunction lua_atpanic (lua_State *L, lua_CFunction panicf) { lua_CFunction old; lua_lock(L); old = G(L)->panic; G(L)->panic = panicf; lua_unlock(L); return old; } LUA_API const lua_Number *lua_version (lua_State *L) { static const lua_Number version = LUA_VERSION_NUM; if (L == NULL) return &version; else return G(L)->version; } /* ** basic stack manipulation */ /* ** convert an acceptable stack index into an absolute index */ LUA_API int lua_absindex (lua_State *L, int idx) { return (idx > 0 || idx <= LUA_REGISTRYINDEX) ? idx : cast_int(L->top - L->ci->func + idx); } LUA_API int lua_gettop (lua_State *L) { return cast_int(L->top - (L->ci->func + 1)); } LUA_API void lua_settop (lua_State *L, int idx) { StkId func = L->ci->func; lua_lock(L); if (idx >= 0) { api_check(L, idx <= L->stack_last - (func + 1), "new top too large"); while (L->top < (func + 1) + idx) setnilvalue(L->top++); L->top = (func + 1) + idx; } else { api_check(L, -(idx+1) <= (L->top - (func + 1)), "invalid new top"); L->top += idx+1; /* `subtract' index (index is negative) */ } lua_unlock(L); } LUA_API void lua_remove (lua_State *L, int idx) { StkId p; lua_lock(L); p = index2addr(L, idx); api_checkvalidindex(L, p); while (++p < L->top) setobjs2s(L, p-1, p); L->top--; lua_unlock(L); } LUA_API void lua_insert (lua_State *L, int idx) { StkId p; StkId q; lua_lock(L); p = index2addr(L, idx); api_checkvalidindex(L, p); for (q = L->top; q>p; q--) setobjs2s(L, q, q-1); setobjs2s(L, p, L->top); lua_unlock(L); } static void moveto (lua_State *L, TValue *fr, int idx) { TValue *to = index2addr(L, idx); api_checkvalidindex(L, to); setobj(L, to, fr); if (idx < LUA_REGISTRYINDEX) /* function upvalue? */ luaC_barrier(L, clCvalue(L->ci->func), fr); /* LUA_REGISTRYINDEX does not need gc barrier (collector revisits it before finishing collection) */ } LUA_API void lua_replace (lua_State *L, int idx) { lua_lock(L); api_checknelems(L, 1); moveto(L, L->top - 1, idx); L->top--; lua_unlock(L); } LUA_API void lua_copy (lua_State *L, int fromidx, int toidx) { TValue *fr; lua_lock(L); fr = index2addr(L, fromidx); api_checkvalidindex(L, fr); moveto(L, fr, toidx); lua_unlock(L); } LUA_API void lua_pushvalue (lua_State *L, int idx) { lua_lock(L); setobj2s(L, L->top, index2addr(L, idx)); api_incr_top(L); lua_unlock(L); } /* ** access functions (stack -> C) */ LUA_API int lua_type (lua_State *L, int idx) { StkId o = index2addr(L, idx); return (isvalid(o) ? ttypenv(o) : LUA_TNONE); } LUA_API const char *lua_typename (lua_State *L, int t) { UNUSED(L); return ttypename(t); } LUA_API int lua_iscfunction (lua_State *L, int idx) { StkId o = index2addr(L, idx); return (ttislcf(o) || (ttisCclosure(o))); } LUA_API int lua_isnumber (lua_State *L, int idx) { TValue n; const TValue *o = index2addr(L, idx); return tonumber(o, &n); } LUA_API int lua_isstring (lua_State *L, int idx) { int t = lua_type(L, idx); return (t == LUA_TSTRING || t == LUA_TNUMBER); } LUA_API int lua_isuserdata (lua_State *L, int idx) { const TValue *o = index2addr(L, idx); return (ttisuserdata(o) || ttislightuserdata(o)); } LUA_API int lua_rawequal (lua_State *L, int index1, int index2) { StkId o1 = index2addr(L, index1); StkId o2 = index2addr(L, index2); return (isvalid(o1) && isvalid(o2)) ? luaV_rawequalobj(o1, o2) : 0; } LUA_API void lua_arith (lua_State *L, int op) { StkId o1; /* 1st operand */ StkId o2; /* 2nd operand */ lua_lock(L); if (op != LUA_OPUNM) /* all other operations expect two operands */ api_checknelems(L, 2); else { /* for unary minus, add fake 2nd operand */ api_checknelems(L, 1); setobjs2s(L, L->top, L->top - 1); L->top++; } o1 = L->top - 2; o2 = L->top - 1; if (ttisnumber(o1) && ttisnumber(o2)) { changenvalue(o1, luaO_arith(op, nvalue(o1), nvalue(o2))); } else luaV_arith(L, o1, o1, o2, cast(TMS, op - LUA_OPADD + TM_ADD)); L->top--; lua_unlock(L); } LUA_API int lua_compare (lua_State *L, int index1, int index2, int op) { StkId o1, o2; int i = 0; lua_lock(L); /* may call tag method */ o1 = index2addr(L, index1); o2 = index2addr(L, index2); if (isvalid(o1) && isvalid(o2)) { switch (op) { case LUA_OPEQ: i = equalobj(L, o1, o2); break; case LUA_OPLT: i = luaV_lessthan(L, o1, o2); break; case LUA_OPLE: i = luaV_lessequal(L, o1, o2); break; default: api_check(L, 0, "invalid option"); } } lua_unlock(L); return i; } LUA_API lua_Number lua_tonumberx (lua_State *L, int idx, int *isnum) { TValue n; const TValue *o = index2addr(L, idx); if (tonumber(o, &n)) { if (isnum) *isnum = 1; return nvalue(o); } else { if (isnum) *isnum = 0; return 0; } } LUA_API lua_Integer lua_tointegerx (lua_State *L, int idx, int *isnum) { TValue n; const TValue *o = index2addr(L, idx); if (tonumber(o, &n)) { lua_Integer res; lua_Number num = nvalue(o); lua_number2integer(res, num); if (isnum) *isnum = 1; return res; } else { if (isnum) *isnum = 0; return 0; } } LUA_API lua_Unsigned lua_tounsignedx (lua_State *L, int idx, int *isnum) { TValue n; const TValue *o = index2addr(L, idx); if (tonumber(o, &n)) { lua_Unsigned res; lua_Number num = nvalue(o); lua_number2unsigned(res, num); if (isnum) *isnum = 1; return res; } else { if (isnum) *isnum = 0; return 0; } } LUA_API int lua_toboolean (lua_State *L, int idx) { const TValue *o = index2addr(L, idx); return !l_isfalse(o); } LUA_API const char *lua_tolstring (lua_State *L, int idx, size_t *len) { StkId o = index2addr(L, idx); if (!ttisstring(o)) { lua_lock(L); /* `luaV_tostring' may create a new string */ if (!luaV_tostring(L, o)) { /* conversion failed? */ if (len != NULL) *len = 0; lua_unlock(L); return NULL; } luaC_checkGC(L); o = index2addr(L, idx); /* previous call may reallocate the stack */ lua_unlock(L); } if (len != NULL) *len = tsvalue(o)->len; return svalue(o); } LUA_API size_t lua_rawlen (lua_State *L, int idx) { StkId o = index2addr(L, idx); switch (ttypenv(o)) { case LUA_TSTRING: return tsvalue(o)->len; case LUA_TUSERDATA: return uvalue(o)->len; case LUA_TTABLE: return luaH_getn(hvalue(o)); default: return 0; } } LUA_API lua_CFunction lua_tocfunction (lua_State *L, int idx) { StkId o = index2addr(L, idx); if (ttislcf(o)) return fvalue(o); else if (ttisCclosure(o)) return clCvalue(o)->f; else return NULL; /* not a C function */ } LUA_API void *lua_touserdata (lua_State *L, int idx) { StkId o = index2addr(L, idx); switch (ttypenv(o)) { case LUA_TUSERDATA: return (rawuvalue(o) + 1); case LUA_TLIGHTUSERDATA: return pvalue(o); default: return NULL; } } LUA_API lua_State *lua_tothread (lua_State *L, int idx) { StkId o = index2addr(L, idx); return (!ttisthread(o)) ? NULL : thvalue(o); } LUA_API const void *lua_topointer (lua_State *L, int idx) { StkId o = index2addr(L, idx); switch (ttype(o)) { case LUA_TTABLE: return hvalue(o); case LUA_TLCL: return clLvalue(o); case LUA_TCCL: return clCvalue(o); case LUA_TLCF: return cast(void *, cast(size_t, fvalue(o))); case LUA_TTHREAD: return thvalue(o); case LUA_TUSERDATA: case LUA_TLIGHTUSERDATA: return lua_touserdata(L, idx); default: return NULL; } } /* ** push functions (C -> stack) */ LUA_API void lua_pushnil (lua_State *L) { lua_lock(L); setnilvalue(L->top); api_incr_top(L); lua_unlock(L); } LUA_API void lua_pushnumber (lua_State *L, lua_Number n) { lua_lock(L); setnvalue(L->top, n); luai_checknum(L, L->top, luaG_runerror(L, "C API - attempt to push a signaling NaN")); api_incr_top(L); lua_unlock(L); } LUA_API void lua_pushinteger (lua_State *L, lua_Integer n) { lua_lock(L); setnvalue(L->top, cast_num(n)); api_incr_top(L); lua_unlock(L); } LUA_API void lua_pushunsigned (lua_State *L, lua_Unsigned u) { lua_Number n; lua_lock(L); n = lua_unsigned2number(u); setnvalue(L->top, n); api_incr_top(L); lua_unlock(L); } LUA_API const char *lua_pushlstring (lua_State *L, const char *s, size_t len) { TString *ts; lua_lock(L); luaC_checkGC(L); ts = luaS_newlstr(L, s, len); setsvalue2s(L, L->top, ts); api_incr_top(L); lua_unlock(L); return getstr(ts); } LUA_API const char *lua_pushstring (lua_State *L, const char *s) { if (s == NULL) { lua_pushnil(L); return NULL; } else { TString *ts; lua_lock(L); luaC_checkGC(L); ts = luaS_new(L, s); setsvalue2s(L, L->top, ts); api_incr_top(L); lua_unlock(L); return getstr(ts); } } LUA_API const char *lua_pushvfstring (lua_State *L, const char *fmt, va_list argp) { const char *ret; lua_lock(L); luaC_checkGC(L); ret = luaO_pushvfstring(L, fmt, argp); lua_unlock(L); return ret; } LUA_API const char *lua_pushfstring (lua_State *L, const char *fmt, ...) { const char *ret; va_list argp; lua_lock(L); luaC_checkGC(L); va_start(argp, fmt); ret = luaO_pushvfstring(L, fmt, argp); va_end(argp); lua_unlock(L); return ret; } LUA_API void lua_pushcclosure (lua_State *L, lua_CFunction fn, int n) { lua_lock(L); if (n == 0) { setfvalue(L->top, fn); } else { Closure *cl; api_checknelems(L, n); api_check(L, n <= MAXUPVAL, "upvalue index too large"); luaC_checkGC(L); cl = luaF_newCclosure(L, n); cl->c.f = fn; L->top -= n; while (n--) setobj2n(L, &cl->c.upvalue[n], L->top + n); setclCvalue(L, L->top, cl); } api_incr_top(L); lua_unlock(L); } LUA_API void lua_pushboolean (lua_State *L, int b) { lua_lock(L); setbvalue(L->top, (b != 0)); /* ensure that true is 1 */ api_incr_top(L); lua_unlock(L); } LUA_API void lua_pushlightuserdata (lua_State *L, void *p) { lua_lock(L); setpvalue(L->top, p); api_incr_top(L); lua_unlock(L); } LUA_API int lua_pushthread (lua_State *L) { lua_lock(L); setthvalue(L, L->top, L); api_incr_top(L); lua_unlock(L); return (G(L)->mainthread == L); } /* ** get functions (Lua -> stack) */ LUA_API void lua_getglobal (lua_State *L, const char *var) { Table *reg = hvalue(&G(L)->l_registry); const TValue *gt; /* global table */ lua_lock(L); gt = luaH_getint(reg, LUA_RIDX_GLOBALS); setsvalue2s(L, L->top++, luaS_new(L, var)); luaV_gettable(L, gt, L->top - 1, L->top - 1); lua_unlock(L); } LUA_API void lua_gettable (lua_State *L, int idx) { StkId t; lua_lock(L); t = index2addr(L, idx); api_checkvalidindex(L, t); luaV_gettable(L, t, L->top - 1, L->top - 1); lua_unlock(L); } LUA_API void lua_getfield (lua_State *L, int idx, const char *k) { StkId t; lua_lock(L); t = index2addr(L, idx); api_checkvalidindex(L, t); setsvalue2s(L, L->top, luaS_new(L, k)); api_incr_top(L); luaV_gettable(L, t, L->top - 1, L->top - 1); lua_unlock(L); } LUA_API void lua_rawget (lua_State *L, int idx) { StkId t; lua_lock(L); t = index2addr(L, idx); api_check(L, ttistable(t), "table expected"); setobj2s(L, L->top - 1, luaH_get(hvalue(t), L->top - 1)); lua_unlock(L); } LUA_API void lua_rawgeti (lua_State *L, int idx, int n) { StkId t; lua_lock(L); t = index2addr(L, idx); api_check(L, ttistable(t), "table expected"); setobj2s(L, L->top, luaH_getint(hvalue(t), n)); api_incr_top(L); lua_unlock(L); } LUA_API void lua_rawgetp (lua_State *L, int idx, const void *p) { StkId t; TValue k; lua_lock(L); t = index2addr(L, idx); api_check(L, ttistable(t), "table expected"); setpvalue(&k, cast(void *, p)); setobj2s(L, L->top, luaH_get(hvalue(t), &k)); api_incr_top(L); lua_unlock(L); } LUA_API void lua_createtable (lua_State *L, int narray, int nrec) { Table *t; lua_lock(L); luaC_checkGC(L); t = luaH_new(L); sethvalue(L, L->top, t); api_incr_top(L); if (narray > 0 || nrec > 0) luaH_resize(L, t, narray, nrec); lua_unlock(L); } LUA_API int lua_getmetatable (lua_State *L, int objindex) { const TValue *obj; Table *mt = NULL; int res; lua_lock(L); obj = index2addr(L, objindex); switch (ttypenv(obj)) { case LUA_TTABLE: mt = hvalue(obj)->metatable; break; case LUA_TUSERDATA: mt = uvalue(obj)->metatable; break; default: mt = G(L)->mt[ttypenv(obj)]; break; } if (mt == NULL) res = 0; else { sethvalue(L, L->top, mt); api_incr_top(L); res = 1; } lua_unlock(L); return res; } LUA_API void lua_getuservalue (lua_State *L, int idx) { StkId o; lua_lock(L); o = index2addr(L, idx); api_checkvalidindex(L, o); api_check(L, ttisuserdata(o), "userdata expected"); if (uvalue(o)->env) { sethvalue(L, L->top, uvalue(o)->env); } else setnilvalue(L->top); api_incr_top(L); lua_unlock(L); } /* ** set functions (stack -> Lua) */ LUA_API void lua_setglobal (lua_State *L, const char *var) { Table *reg = hvalue(&G(L)->l_registry); const TValue *gt; /* global table */ lua_lock(L); api_checknelems(L, 1); gt = luaH_getint(reg, LUA_RIDX_GLOBALS); setsvalue2s(L, L->top++, luaS_new(L, var)); luaV_settable(L, gt, L->top - 1, L->top - 2); L->top -= 2; /* pop value and key */ lua_unlock(L); } LUA_API void lua_settable (lua_State *L, int idx) { StkId t; lua_lock(L); api_checknelems(L, 2); t = index2addr(L, idx); api_checkvalidindex(L, t); luaV_settable(L, t, L->top - 2, L->top - 1); L->top -= 2; /* pop index and value */ lua_unlock(L); } LUA_API void lua_setfield (lua_State *L, int idx, const char *k) { StkId t; lua_lock(L); api_checknelems(L, 1); t = index2addr(L, idx); api_checkvalidindex(L, t); setsvalue2s(L, L->top++, luaS_new(L, k)); luaV_settable(L, t, L->top - 1, L->top - 2); L->top -= 2; /* pop value and key */ lua_unlock(L); } LUA_API void lua_rawset (lua_State *L, int idx) { StkId t; lua_lock(L); api_checknelems(L, 2); t = index2addr(L, idx); api_check(L, ttistable(t), "table expected"); setobj2t(L, luaH_set(L, hvalue(t), L->top-2), L->top-1); invalidateTMcache(hvalue(t)); luaC_barrierback(L, gcvalue(t), L->top-1); L->top -= 2; lua_unlock(L); } LUA_API void lua_rawseti (lua_State *L, int idx, int n) { StkId t; lua_lock(L); api_checknelems(L, 1); t = index2addr(L, idx); api_check(L, ttistable(t), "table expected"); luaH_setint(L, hvalue(t), n, L->top - 1); luaC_barrierback(L, gcvalue(t), L->top-1); L->top--; lua_unlock(L); } LUA_API void lua_rawsetp (lua_State *L, int idx, const void *p) { StkId t; TValue k; lua_lock(L); api_checknelems(L, 1); t = index2addr(L, idx); api_check(L, ttistable(t), "table expected"); setpvalue(&k, cast(void *, p)); setobj2t(L, luaH_set(L, hvalue(t), &k), L->top - 1); luaC_barrierback(L, gcvalue(t), L->top - 1); L->top--; lua_unlock(L); } LUA_API int lua_setmetatable (lua_State *L, int objindex) { TValue *obj; Table *mt; lua_lock(L); api_checknelems(L, 1); obj = index2addr(L, objindex); api_checkvalidindex(L, obj); if (ttisnil(L->top - 1)) mt = NULL; else { api_check(L, ttistable(L->top - 1), "table expected"); mt = hvalue(L->top - 1); } switch (ttypenv(obj)) { case LUA_TTABLE: { hvalue(obj)->metatable = mt; if (mt) luaC_objbarrierback(L, gcvalue(obj), mt); luaC_checkfinalizer(L, gcvalue(obj), mt); break; } case LUA_TUSERDATA: { uvalue(obj)->metatable = mt; if (mt) { luaC_objbarrier(L, rawuvalue(obj), mt); luaC_checkfinalizer(L, gcvalue(obj), mt); } break; } default: { G(L)->mt[ttypenv(obj)] = mt; break; } } L->top--; lua_unlock(L); return 1; } LUA_API void lua_setuservalue (lua_State *L, int idx) { StkId o; lua_lock(L); api_checknelems(L, 1); o = index2addr(L, idx); api_checkvalidindex(L, o); api_check(L, ttisuserdata(o), "userdata expected"); if (ttisnil(L->top - 1)) uvalue(o)->env = NULL; else { api_check(L, ttistable(L->top - 1), "table expected"); uvalue(o)->env = hvalue(L->top - 1); luaC_objbarrier(L, gcvalue(o), hvalue(L->top - 1)); } L->top--; lua_unlock(L); } /* ** `load' and `call' functions (run Lua code) */ #define checkresults(L,na,nr) \ api_check(L, (nr) == LUA_MULTRET || (L->ci->top - L->top >= (nr) - (na)), \ "results from function overflow current stack size") LUA_API int lua_getctx (lua_State *L, int *ctx) { if (L->ci->callstatus & CIST_YIELDED) { if (ctx) *ctx = L->ci->u.c.ctx; return L->ci->u.c.status; } else return LUA_OK; } LUA_API void lua_callk (lua_State *L, int nargs, int nresults, int ctx, lua_CFunction k) { StkId func; lua_lock(L); api_check(L, k == NULL || !isLua(L->ci), "cannot use continuations inside hooks"); api_checknelems(L, nargs+1); api_check(L, L->status == LUA_OK, "cannot do calls on non-normal thread"); checkresults(L, nargs, nresults); func = L->top - (nargs+1); if (k != NULL && L->nny == 0) { /* need to prepare continuation? */ L->ci->u.c.k = k; /* save continuation */ L->ci->u.c.ctx = ctx; /* save context */ luaD_call(L, func, nresults, 1); /* do the call */ } else /* no continuation or no yieldable */ luaD_call(L, func, nresults, 0); /* just do the call */ adjustresults(L, nresults); lua_unlock(L); } /* ** Execute a protected call. */ struct CallS { /* data to `f_call' */ StkId func; int nresults; }; static void f_call (lua_State *L, void *ud) { struct CallS *c = cast(struct CallS *, ud); luaD_call(L, c->func, c->nresults, 0); } LUA_API int lua_pcallk (lua_State *L, int nargs, int nresults, int errfunc, int ctx, lua_CFunction k) { struct CallS c; int status; ptrdiff_t func; lua_lock(L); api_check(L, k == NULL || !isLua(L->ci), "cannot use continuations inside hooks"); api_checknelems(L, nargs+1); api_check(L, L->status == LUA_OK, "cannot do calls on non-normal thread"); checkresults(L, nargs, nresults); if (errfunc == 0) func = 0; else { StkId o = index2addr(L, errfunc); api_checkvalidindex(L, o); func = savestack(L, o); } c.func = L->top - (nargs+1); /* function to be called */ if (k == NULL || L->nny > 0) { /* no continuation or no yieldable? */ c.nresults = nresults; /* do a 'conventional' protected call */ status = luaD_pcall(L, f_call, &c, savestack(L, c.func), func); } else { /* prepare continuation (call is already protected by 'resume') */ CallInfo *ci = L->ci; ci->u.c.k = k; /* save continuation */ ci->u.c.ctx = ctx; /* save context */ /* save information for error recovery */ ci->extra = savestack(L, c.func); ci->u.c.old_allowhook = L->allowhook; ci->u.c.old_errfunc = L->errfunc; L->errfunc = func; /* mark that function may do error recovery */ ci->callstatus |= CIST_YPCALL; luaD_call(L, c.func, nresults, 1); /* do the call */ ci->callstatus &= ~CIST_YPCALL; L->errfunc = ci->u.c.old_errfunc; status = LUA_OK; /* if it is here, there were no errors */ } adjustresults(L, nresults); lua_unlock(L); return status; } LUA_API int lua_load (lua_State *L, lua_Reader reader, void *data, const char *chunkname, const char *mode) { ZIO z; int status; lua_lock(L); if (!chunkname) chunkname = "?"; luaZ_init(L, &z, reader, data); status = luaD_protectedparser(L, &z, chunkname, mode); if (status == LUA_OK) { /* no errors? */ LClosure *f = clLvalue(L->top - 1); /* get newly created function */ if (f->nupvalues == 1) { /* does it have one upvalue? */ /* get global table from registry */ Table *reg = hvalue(&G(L)->l_registry); const TValue *gt = luaH_getint(reg, LUA_RIDX_GLOBALS); /* set global table as 1st upvalue of 'f' (may be LUA_ENV) */ setobj(L, f->upvals[0]->v, gt); luaC_barrier(L, f->upvals[0], gt); } } lua_unlock(L); return status; } LUA_API int lua_dump (lua_State *L, lua_Writer writer, void *data) { int status; TValue *o; lua_lock(L); api_checknelems(L, 1); o = L->top - 1; if (isLfunction(o)) status = luaU_dump(L, getproto(o), writer, data, 0); else status = 1; lua_unlock(L); return status; } LUA_API int lua_status (lua_State *L) { return L->status; } /* ** Garbage-collection function */ LUA_API int lua_gc (lua_State *L, int what, int data) { int res = 0; global_State *g; lua_lock(L); g = G(L); switch (what) { case LUA_GCSTOP: { g->gcrunning = 0; break; } case LUA_GCRESTART: { luaE_setdebt(g, 0); g->gcrunning = 1; break; } case LUA_GCCOLLECT: { luaC_fullgc(L, 0); break; } case LUA_GCCOUNT: { /* GC values are expressed in Kbytes: #bytes/2^10 */ res = cast_int(gettotalbytes(g) >> 10); break; } case LUA_GCCOUNTB: { res = cast_int(gettotalbytes(g) & 0x3ff); break; } case LUA_GCSTEP: { if (g->gckind == KGC_GEN) { /* generational mode? */ res = (g->GCestimate == 0); /* true if it will do major collection */ luaC_forcestep(L); /* do a single step */ } else { lu_mem debt = cast(lu_mem, data) * 1024 - GCSTEPSIZE; if (g->gcrunning) debt += g->GCdebt; /* include current debt */ luaE_setdebt(g, debt); luaC_forcestep(L); if (g->gcstate == GCSpause) /* end of cycle? */ res = 1; /* signal it */ } break; } case LUA_GCSETPAUSE: { res = g->gcpause; g->gcpause = data; break; } case LUA_GCSETMAJORINC: { res = g->gcmajorinc; g->gcmajorinc = data; break; } case LUA_GCSETSTEPMUL: { res = g->gcstepmul; g->gcstepmul = data; break; } case LUA_GCISRUNNING: { res = g->gcrunning; break; } case LUA_GCGEN: { /* change collector to generational mode */ luaC_changemode(L, KGC_GEN); break; } case LUA_GCINC: { /* change collector to incremental mode */ luaC_changemode(L, KGC_NORMAL); break; } default: res = -1; /* invalid option */ } lua_unlock(L); return res; } /* ** miscellaneous functions */ LUA_API int lua_error (lua_State *L) { lua_lock(L); api_checknelems(L, 1); luaG_errormsg(L); lua_unlock(L); return 0; /* to avoid warnings */ } LUA_API int lua_next (lua_State *L, int idx) { StkId t; int more; lua_lock(L); t = index2addr(L, idx); api_check(L, ttistable(t), "table expected"); more = luaH_next(L, hvalue(t), L->top - 1); if (more) { api_incr_top(L); } else /* no more elements */ L->top -= 1; /* remove key */ lua_unlock(L); return more; } LUA_API void lua_concat (lua_State *L, int n) { lua_lock(L); api_checknelems(L, n); if (n >= 2) { luaC_checkGC(L); luaV_concat(L, n); } else if (n == 0) { /* push empty string */ setsvalue2s(L, L->top, luaS_newlstr(L, "", 0)); api_incr_top(L); } /* else n == 1; nothing to do */ lua_unlock(L); } LUA_API void lua_len (lua_State *L, int idx) { StkId t; lua_lock(L); t = index2addr(L, idx); luaV_objlen(L, L->top, t); api_incr_top(L); lua_unlock(L); } LUA_API lua_Alloc lua_getallocf (lua_State *L, void **ud) { lua_Alloc f; lua_lock(L); if (ud) *ud = G(L)->ud; f = G(L)->frealloc; lua_unlock(L); return f; } LUA_API void lua_setallocf (lua_State *L, lua_Alloc f, void *ud) { lua_lock(L); G(L)->ud = ud; G(L)->frealloc = f; lua_unlock(L); } LUA_API void *lua_newuserdata (lua_State *L, size_t size) { Udata *u; lua_lock(L); luaC_checkGC(L); u = luaS_newudata(L, size, NULL); setuvalue(L, L->top, u); api_incr_top(L); lua_unlock(L); return u + 1; } static const char *aux_upvalue (StkId fi, int n, TValue **val, GCObject **owner) { switch (ttype(fi)) { case LUA_TCCL: { /* C closure */ CClosure *f = clCvalue(fi); if (!(1 <= n && n <= f->nupvalues)) return NULL; *val = &f->upvalue[n-1]; if (owner) *owner = obj2gco(f); return ""; } case LUA_TLCL: { /* Lua closure */ LClosure *f = clLvalue(fi); TString *name; Proto *p = f->p; if (!(1 <= n && n <= p->sizeupvalues)) return NULL; *val = f->upvals[n-1]->v; if (owner) *owner = obj2gco(f->upvals[n - 1]); name = p->upvalues[n-1].name; return (name == NULL) ? "" : getstr(name); } default: return NULL; /* not a closure */ } } LUA_API const char *lua_getupvalue (lua_State *L, int funcindex, int n) { const char *name; TValue *val = NULL; /* to avoid warnings */ lua_lock(L); name = aux_upvalue(index2addr(L, funcindex), n, &val, NULL); if (name) { setobj2s(L, L->top, val); api_incr_top(L); } lua_unlock(L); return name; } LUA_API const char *lua_setupvalue (lua_State *L, int funcindex, int n) { const char *name; TValue *val = NULL; /* to avoid warnings */ GCObject *owner = NULL; /* to avoid warnings */ StkId fi; lua_lock(L); fi = index2addr(L, funcindex); api_checknelems(L, 1); name = aux_upvalue(fi, n, &val, &owner); if (name) { L->top--; setobj(L, val, L->top); luaC_barrier(L, owner, L->top); } lua_unlock(L); return name; } static UpVal **getupvalref (lua_State *L, int fidx, int n, LClosure **pf) { LClosure *f; StkId fi = index2addr(L, fidx); api_check(L, ttisLclosure(fi), "Lua function expected"); f = clLvalue(fi); api_check(L, (1 <= n && n <= f->p->sizeupvalues), "invalid upvalue index"); if (pf) *pf = f; return &f->upvals[n - 1]; /* get its upvalue pointer */ } LUA_API void *lua_upvalueid (lua_State *L, int fidx, int n) { StkId fi = index2addr(L, fidx); switch (ttype(fi)) { case LUA_TLCL: { /* lua closure */ return *getupvalref(L, fidx, n, NULL); } case LUA_TCCL: { /* C closure */ CClosure *f = clCvalue(fi); api_check(L, 1 <= n && n <= f->nupvalues, "invalid upvalue index"); return &f->upvalue[n - 1]; } default: { api_check(L, 0, "closure expected"); return NULL; } } } LUA_API void lua_upvaluejoin (lua_State *L, int fidx1, int n1, int fidx2, int n2) { LClosure *f1; UpVal **up1 = getupvalref(L, fidx1, n1, &f1); UpVal **up2 = getupvalref(L, fidx2, n2, NULL); *up1 = *up2; luaC_objbarrier(L, f1, *up2); } fs-uae-2.2.3+dfsg/libfsemu/src/lua/lgc.c0000644000175000017500000011040612162366654020145 0ustar glaubitzglaubitz/* ** $Id: lgc.c,v 2.133 2012/05/31 21:28:59 roberto Exp $ ** Garbage Collector ** See Copyright Notice in lua.h */ #include #define lgc_c #define LUA_CORE #include "lua.h" #include "ldebug.h" #include "ldo.h" #include "lfunc.h" #include "lgc.h" #include "lmem.h" #include "lobject.h" #include "lstate.h" #include "lstring.h" #include "ltable.h" #include "ltm.h" /* ** cost of sweeping one element (the size of a small object divided ** by some adjust for the sweep speed) */ #define GCSWEEPCOST ((sizeof(TString) + 4) / 4) /* maximum number of elements to sweep in each single step */ #define GCSWEEPMAX (cast_int((GCSTEPSIZE / GCSWEEPCOST) / 4)) /* maximum number of finalizers to call in each GC step */ #define GCFINALIZENUM 4 /* ** macro to adjust 'stepmul': 'stepmul' is actually used like ** 'stepmul / STEPMULADJ' (value chosen by tests) */ #define STEPMULADJ 200 /* ** macro to adjust 'pause': 'pause' is actually used like ** 'pause / PAUSEADJ' (value chosen by tests) */ #define PAUSEADJ 200 /* ** standard negative debt for GC; a reasonable "time" to wait before ** starting a new cycle */ #define stddebtest(g,e) (-cast(l_mem, (e)/PAUSEADJ) * g->gcpause) #define stddebt(g) stddebtest(g, gettotalbytes(g)) /* ** 'makewhite' erases all color bits plus the old bit and then ** sets only the current white bit */ #define maskcolors (~(bit2mask(BLACKBIT, OLDBIT) | WHITEBITS)) #define makewhite(g,x) \ (gch(x)->marked = cast_byte((gch(x)->marked & maskcolors) | luaC_white(g))) #define white2gray(x) resetbits(gch(x)->marked, WHITEBITS) #define black2gray(x) resetbit(gch(x)->marked, BLACKBIT) #define isfinalized(x) testbit(gch(x)->marked, FINALIZEDBIT) #define checkdeadkey(n) lua_assert(!ttisdeadkey(gkey(n)) || ttisnil(gval(n))) #define checkconsistency(obj) \ lua_longassert(!iscollectable(obj) || righttt(obj)) #define markvalue(g,o) { checkconsistency(o); \ if (valiswhite(o)) reallymarkobject(g,gcvalue(o)); } #define markobject(g,t) { if ((t) && iswhite(obj2gco(t))) \ reallymarkobject(g, obj2gco(t)); } static void reallymarkobject (global_State *g, GCObject *o); /* ** {====================================================== ** Generic functions ** ======================================================= */ /* ** one after last element in a hash array */ #define gnodelast(h) gnode(h, cast(size_t, sizenode(h))) /* ** link table 'h' into list pointed by 'p' */ #define linktable(h,p) ((h)->gclist = *(p), *(p) = obj2gco(h)) /* ** if key is not marked, mark its entry as dead (therefore removing it ** from the table) */ static void removeentry (Node *n) { lua_assert(ttisnil(gval(n))); if (valiswhite(gkey(n))) setdeadvalue(gkey(n)); /* unused and unmarked key; remove it */ } /* ** tells whether a key or value can be cleared from a weak ** table. Non-collectable objects are never removed from weak ** tables. Strings behave as `values', so are never removed too. for ** other objects: if really collected, cannot keep them; for objects ** being finalized, keep them in keys, but not in values */ static int iscleared (global_State *g, const TValue *o) { if (!iscollectable(o)) return 0; else if (ttisstring(o)) { markobject(g, rawtsvalue(o)); /* strings are `values', so are never weak */ return 0; } else return iswhite(gcvalue(o)); } /* ** barrier that moves collector forward, that is, mark the white object ** being pointed by a black object. */ void luaC_barrier_ (lua_State *L, GCObject *o, GCObject *v) { global_State *g = G(L); lua_assert(isblack(o) && iswhite(v) && !isdead(g, v) && !isdead(g, o)); lua_assert(isgenerational(g) || g->gcstate != GCSpause); lua_assert(gch(o)->tt != LUA_TTABLE); if (keepinvariant(g)) /* must keep invariant? */ reallymarkobject(g, v); /* restore invariant */ else { /* sweep phase */ lua_assert(issweepphase(g)); makewhite(g, o); /* mark main obj. as white to avoid other barriers */ } } /* ** barrier that moves collector backward, that is, mark the black object ** pointing to a white object as gray again. (Current implementation ** only works for tables; access to 'gclist' is not uniform across ** different types.) */ void luaC_barrierback_ (lua_State *L, GCObject *o) { global_State *g = G(L); lua_assert(isblack(o) && !isdead(g, o) && gch(o)->tt == LUA_TTABLE); black2gray(o); /* make object gray (again) */ gco2t(o)->gclist = g->grayagain; g->grayagain = o; } /* ** barrier for prototypes. When creating first closure (cache is ** NULL), use a forward barrier; this may be the only closure of the ** prototype (if it is a "regular" function, with a single instance) ** and the prototype may be big, so it is better to avoid traversing ** it again. Otherwise, use a backward barrier, to avoid marking all ** possible instances. */ LUAI_FUNC void luaC_barrierproto_ (lua_State *L, Proto *p, Closure *c) { global_State *g = G(L); lua_assert(isblack(obj2gco(p))); if (p->cache == NULL) { /* first time? */ luaC_objbarrier(L, p, c); } else { /* use a backward barrier */ black2gray(obj2gco(p)); /* make prototype gray (again) */ p->gclist = g->grayagain; g->grayagain = obj2gco(p); } } /* ** check color (and invariants) for an upvalue that was closed, ** i.e., moved into the 'allgc' list */ void luaC_checkupvalcolor (global_State *g, UpVal *uv) { GCObject *o = obj2gco(uv); lua_assert(!isblack(o)); /* open upvalues are never black */ if (isgray(o)) { if (keepinvariant(g)) { resetoldbit(o); /* see MOVE OLD rule */ gray2black(o); /* it is being visited now */ markvalue(g, uv->v); } else { lua_assert(issweepphase(g)); makewhite(g, o); } } } /* ** create a new collectable object (with given type and size) and link ** it to '*list'. 'offset' tells how many bytes to allocate before the ** object itself (used only by states). */ GCObject *luaC_newobj (lua_State *L, int tt, size_t sz, GCObject **list, int offset) { global_State *g = G(L); char *raw = cast(char *, luaM_newobject(L, novariant(tt), sz)); GCObject *o = obj2gco(raw + offset); if (list == NULL) list = &g->allgc; /* standard list for collectable objects */ gch(o)->marked = luaC_white(g); gch(o)->tt = tt; gch(o)->next = *list; *list = o; return o; } /* }====================================================== */ /* ** {====================================================== ** Mark functions ** ======================================================= */ /* ** mark an object. Userdata, strings, and closed upvalues are visited ** and turned black here. Other objects are marked gray and added ** to appropriate list to be visited (and turned black) later. (Open ** upvalues are already linked in 'headuv' list.) */ static void reallymarkobject (global_State *g, GCObject *o) { lu_mem size; white2gray(o); switch (gch(o)->tt) { case LUA_TSHRSTR: case LUA_TLNGSTR: { size = sizestring(gco2ts(o)); break; /* nothing else to mark; make it black */ } case LUA_TUSERDATA: { Table *mt = gco2u(o)->metatable; markobject(g, mt); markobject(g, gco2u(o)->env); size = sizeudata(gco2u(o)); break; } case LUA_TUPVAL: { UpVal *uv = gco2uv(o); markvalue(g, uv->v); if (uv->v != &uv->u.value) /* open? */ return; /* open upvalues remain gray */ size = sizeof(UpVal); break; } case LUA_TLCL: { gco2lcl(o)->gclist = g->gray; g->gray = o; return; } case LUA_TCCL: { gco2ccl(o)->gclist = g->gray; g->gray = o; return; } case LUA_TTABLE: { linktable(gco2t(o), &g->gray); return; } case LUA_TTHREAD: { gco2th(o)->gclist = g->gray; g->gray = o; return; } case LUA_TPROTO: { gco2p(o)->gclist = g->gray; g->gray = o; return; } default: lua_assert(0); return; } gray2black(o); g->GCmemtrav += size; } /* ** mark metamethods for basic types */ static void markmt (global_State *g) { int i; for (i=0; i < LUA_NUMTAGS; i++) markobject(g, g->mt[i]); } /* ** mark all objects in list of being-finalized */ static void markbeingfnz (global_State *g) { GCObject *o; for (o = g->tobefnz; o != NULL; o = gch(o)->next) { makewhite(g, o); reallymarkobject(g, o); } } /* ** mark all values stored in marked open upvalues. (See comment in ** 'lstate.h'.) */ static void remarkupvals (global_State *g) { UpVal *uv; for (uv = g->uvhead.u.l.next; uv != &g->uvhead; uv = uv->u.l.next) { if (isgray(obj2gco(uv))) markvalue(g, uv->v); } } /* ** mark root set and reset all gray lists, to start a new ** incremental (or full) collection */ static void markroot (global_State *g) { g->gray = g->grayagain = NULL; g->weak = g->allweak = g->ephemeron = NULL; markobject(g, g->mainthread); markvalue(g, &g->l_registry); markmt(g); markbeingfnz(g); /* mark any finalizing object left from previous cycle */ } /* }====================================================== */ /* ** {====================================================== ** Traverse functions ** ======================================================= */ static void traverseweakvalue (global_State *g, Table *h) { Node *n, *limit = gnodelast(h); /* if there is array part, assume it may have white values (do not traverse it just to check) */ int hasclears = (h->sizearray > 0); for (n = gnode(h, 0); n < limit; n++) { checkdeadkey(n); if (ttisnil(gval(n))) /* entry is empty? */ removeentry(n); /* remove it */ else { lua_assert(!ttisnil(gkey(n))); markvalue(g, gkey(n)); /* mark key */ if (!hasclears && iscleared(g, gval(n))) /* is there a white value? */ hasclears = 1; /* table will have to be cleared */ } } if (hasclears) linktable(h, &g->weak); /* has to be cleared later */ else /* no white values */ linktable(h, &g->grayagain); /* no need to clean */ } static int traverseephemeron (global_State *g, Table *h) { int marked = 0; /* true if an object is marked in this traversal */ int hasclears = 0; /* true if table has white keys */ int prop = 0; /* true if table has entry "white-key -> white-value" */ Node *n, *limit = gnodelast(h); int i; /* traverse array part (numeric keys are 'strong') */ for (i = 0; i < h->sizearray; i++) { if (valiswhite(&h->array[i])) { marked = 1; reallymarkobject(g, gcvalue(&h->array[i])); } } /* traverse hash part */ for (n = gnode(h, 0); n < limit; n++) { checkdeadkey(n); if (ttisnil(gval(n))) /* entry is empty? */ removeentry(n); /* remove it */ else if (iscleared(g, gkey(n))) { /* key is not marked (yet)? */ hasclears = 1; /* table must be cleared */ if (valiswhite(gval(n))) /* value not marked yet? */ prop = 1; /* must propagate again */ } else if (valiswhite(gval(n))) { /* value not marked yet? */ marked = 1; reallymarkobject(g, gcvalue(gval(n))); /* mark it now */ } } if (prop) linktable(h, &g->ephemeron); /* have to propagate again */ else if (hasclears) /* does table have white keys? */ linktable(h, &g->allweak); /* may have to clean white keys */ else /* no white keys */ linktable(h, &g->grayagain); /* no need to clean */ return marked; } static void traversestrongtable (global_State *g, Table *h) { Node *n, *limit = gnodelast(h); int i; for (i = 0; i < h->sizearray; i++) /* traverse array part */ markvalue(g, &h->array[i]); for (n = gnode(h, 0); n < limit; n++) { /* traverse hash part */ checkdeadkey(n); if (ttisnil(gval(n))) /* entry is empty? */ removeentry(n); /* remove it */ else { lua_assert(!ttisnil(gkey(n))); markvalue(g, gkey(n)); /* mark key */ markvalue(g, gval(n)); /* mark value */ } } } static lu_mem traversetable (global_State *g, Table *h) { const char *weakkey, *weakvalue; const TValue *mode = gfasttm(g, h->metatable, TM_MODE); markobject(g, h->metatable); if (mode && ttisstring(mode) && /* is there a weak mode? */ ((weakkey = strchr(svalue(mode), 'k')), (weakvalue = strchr(svalue(mode), 'v')), (weakkey || weakvalue))) { /* is really weak? */ black2gray(obj2gco(h)); /* keep table gray */ if (!weakkey) /* strong keys? */ traverseweakvalue(g, h); else if (!weakvalue) /* strong values? */ traverseephemeron(g, h); else /* all weak */ linktable(h, &g->allweak); /* nothing to traverse now */ } else /* not weak */ traversestrongtable(g, h); return sizeof(Table) + sizeof(TValue) * h->sizearray + sizeof(Node) * sizenode(h); } static int traverseproto (global_State *g, Proto *f) { int i; if (f->cache && iswhite(obj2gco(f->cache))) f->cache = NULL; /* allow cache to be collected */ markobject(g, f->source); for (i = 0; i < f->sizek; i++) /* mark literals */ markvalue(g, &f->k[i]); for (i = 0; i < f->sizeupvalues; i++) /* mark upvalue names */ markobject(g, f->upvalues[i].name); for (i = 0; i < f->sizep; i++) /* mark nested protos */ markobject(g, f->p[i]); for (i = 0; i < f->sizelocvars; i++) /* mark local-variable names */ markobject(g, f->locvars[i].varname); return sizeof(Proto) + sizeof(Instruction) * f->sizecode + sizeof(Proto *) * f->sizep + sizeof(TValue) * f->sizek + sizeof(int) * f->sizelineinfo + sizeof(LocVar) * f->sizelocvars + sizeof(Upvaldesc) * f->sizeupvalues; } static lu_mem traverseCclosure (global_State *g, CClosure *cl) { int i; for (i = 0; i < cl->nupvalues; i++) /* mark its upvalues */ markvalue(g, &cl->upvalue[i]); return sizeCclosure(cl->nupvalues); } static lu_mem traverseLclosure (global_State *g, LClosure *cl) { int i; markobject(g, cl->p); /* mark its prototype */ for (i = 0; i < cl->nupvalues; i++) /* mark its upvalues */ markobject(g, cl->upvals[i]); return sizeLclosure(cl->nupvalues); } static lu_mem traversestack (global_State *g, lua_State *th) { StkId o = th->stack; if (o == NULL) return 1; /* stack not completely built yet */ for (; o < th->top; o++) markvalue(g, o); if (g->gcstate == GCSatomic) { /* final traversal? */ StkId lim = th->stack + th->stacksize; /* real end of stack */ for (; o < lim; o++) /* clear not-marked stack slice */ setnilvalue(o); } return sizeof(lua_State) + sizeof(TValue) * th->stacksize; } /* ** traverse one gray object, turning it to black (except for threads, ** which are always gray). */ static void propagatemark (global_State *g) { lu_mem size; GCObject *o = g->gray; lua_assert(isgray(o)); gray2black(o); switch (gch(o)->tt) { case LUA_TTABLE: { Table *h = gco2t(o); g->gray = h->gclist; /* remove from 'gray' list */ size = traversetable(g, h); break; } case LUA_TLCL: { LClosure *cl = gco2lcl(o); g->gray = cl->gclist; /* remove from 'gray' list */ size = traverseLclosure(g, cl); break; } case LUA_TCCL: { CClosure *cl = gco2ccl(o); g->gray = cl->gclist; /* remove from 'gray' list */ size = traverseCclosure(g, cl); break; } case LUA_TTHREAD: { lua_State *th = gco2th(o); g->gray = th->gclist; /* remove from 'gray' list */ th->gclist = g->grayagain; g->grayagain = o; /* insert into 'grayagain' list */ black2gray(o); size = traversestack(g, th); break; } case LUA_TPROTO: { Proto *p = gco2p(o); g->gray = p->gclist; /* remove from 'gray' list */ size = traverseproto(g, p); break; } default: lua_assert(0); return; } g->GCmemtrav += size; } static void propagateall (global_State *g) { while (g->gray) propagatemark(g); } static void propagatelist (global_State *g, GCObject *l) { lua_assert(g->gray == NULL); /* no grays left */ g->gray = l; propagateall(g); /* traverse all elements from 'l' */ } /* ** retraverse all gray lists. Because tables may be reinserted in other ** lists when traversed, traverse the original lists to avoid traversing ** twice the same table (which is not wrong, but inefficient) */ static void retraversegrays (global_State *g) { GCObject *weak = g->weak; /* save original lists */ GCObject *grayagain = g->grayagain; GCObject *ephemeron = g->ephemeron; g->weak = g->grayagain = g->ephemeron = NULL; propagateall(g); /* traverse main gray list */ propagatelist(g, grayagain); propagatelist(g, weak); propagatelist(g, ephemeron); } static void convergeephemerons (global_State *g) { int changed; do { GCObject *w; GCObject *next = g->ephemeron; /* get ephemeron list */ g->ephemeron = NULL; /* tables will return to this list when traversed */ changed = 0; while ((w = next) != NULL) { next = gco2t(w)->gclist; if (traverseephemeron(g, gco2t(w))) { /* traverse marked some value? */ propagateall(g); /* propagate changes */ changed = 1; /* will have to revisit all ephemeron tables */ } } } while (changed); } /* }====================================================== */ /* ** {====================================================== ** Sweep Functions ** ======================================================= */ /* ** clear entries with unmarked keys from all weaktables in list 'l' up ** to element 'f' */ static void clearkeys (global_State *g, GCObject *l, GCObject *f) { for (; l != f; l = gco2t(l)->gclist) { Table *h = gco2t(l); Node *n, *limit = gnodelast(h); for (n = gnode(h, 0); n < limit; n++) { if (!ttisnil(gval(n)) && (iscleared(g, gkey(n)))) { setnilvalue(gval(n)); /* remove value ... */ removeentry(n); /* and remove entry from table */ } } } } /* ** clear entries with unmarked values from all weaktables in list 'l' up ** to element 'f' */ static void clearvalues (global_State *g, GCObject *l, GCObject *f) { for (; l != f; l = gco2t(l)->gclist) { Table *h = gco2t(l); Node *n, *limit = gnodelast(h); int i; for (i = 0; i < h->sizearray; i++) { TValue *o = &h->array[i]; if (iscleared(g, o)) /* value was collected? */ setnilvalue(o); /* remove value */ } for (n = gnode(h, 0); n < limit; n++) { if (!ttisnil(gval(n)) && iscleared(g, gval(n))) { setnilvalue(gval(n)); /* remove value ... */ removeentry(n); /* and remove entry from table */ } } } } static void freeobj (lua_State *L, GCObject *o) { switch (gch(o)->tt) { case LUA_TPROTO: luaF_freeproto(L, gco2p(o)); break; case LUA_TLCL: { luaM_freemem(L, o, sizeLclosure(gco2lcl(o)->nupvalues)); break; } case LUA_TCCL: { luaM_freemem(L, o, sizeCclosure(gco2ccl(o)->nupvalues)); break; } case LUA_TUPVAL: luaF_freeupval(L, gco2uv(o)); break; case LUA_TTABLE: luaH_free(L, gco2t(o)); break; case LUA_TTHREAD: luaE_freethread(L, gco2th(o)); break; case LUA_TUSERDATA: luaM_freemem(L, o, sizeudata(gco2u(o))); break; case LUA_TSHRSTR: G(L)->strt.nuse--; /* go through */ case LUA_TLNGSTR: { luaM_freemem(L, o, sizestring(gco2ts(o))); break; } default: lua_assert(0); } } #define sweepwholelist(L,p) sweeplist(L,p,MAX_LUMEM) static GCObject **sweeplist (lua_State *L, GCObject **p, lu_mem count); /* ** sweep the (open) upvalues of a thread and resize its stack and ** list of call-info structures. */ static void sweepthread (lua_State *L, lua_State *L1) { if (L1->stack == NULL) return; /* stack not completely built yet */ sweepwholelist(L, &L1->openupval); /* sweep open upvalues */ luaE_freeCI(L1); /* free extra CallInfo slots */ /* should not change the stack during an emergency gc cycle */ if (G(L)->gckind != KGC_EMERGENCY) luaD_shrinkstack(L1); } /* ** sweep at most 'count' elements from a list of GCObjects erasing dead ** objects, where a dead (not alive) object is one marked with the "old" ** (non current) white and not fixed. ** In non-generational mode, change all non-dead objects back to white, ** preparing for next collection cycle. ** In generational mode, keep black objects black, and also mark them as ** old; stop when hitting an old object, as all objects after that ** one will be old too. ** When object is a thread, sweep its list of open upvalues too. */ static GCObject **sweeplist (lua_State *L, GCObject **p, lu_mem count) { global_State *g = G(L); int ow = otherwhite(g); int toclear, toset; /* bits to clear and to set in all live objects */ int tostop; /* stop sweep when this is true */ if (isgenerational(g)) { /* generational mode? */ toclear = ~0; /* clear nothing */ toset = bitmask(OLDBIT); /* set the old bit of all surviving objects */ tostop = bitmask(OLDBIT); /* do not sweep old generation */ } else { /* normal mode */ toclear = maskcolors; /* clear all color bits + old bit */ toset = luaC_white(g); /* make object white */ tostop = 0; /* do not stop */ } while (*p != NULL && count-- > 0) { GCObject *curr = *p; int marked = gch(curr)->marked; if (isdeadm(ow, marked)) { /* is 'curr' dead? */ *p = gch(curr)->next; /* remove 'curr' from list */ freeobj(L, curr); /* erase 'curr' */ } else { if (testbits(marked, tostop)) return NULL; /* stop sweeping this list */ if (gch(curr)->tt == LUA_TTHREAD) sweepthread(L, gco2th(curr)); /* sweep thread's upvalues */ /* update marks */ gch(curr)->marked = cast_byte((marked & toclear) | toset); p = &gch(curr)->next; /* go to next element */ } } return (*p == NULL) ? NULL : p; } /* ** sweep a list until a live object (or end of list) */ static GCObject **sweeptolive (lua_State *L, GCObject **p, int *n) { GCObject ** old = p; int i = 0; do { i++; p = sweeplist(L, p, 1); } while (p == old); if (n) *n += i; return p; } /* }====================================================== */ /* ** {====================================================== ** Finalization ** ======================================================= */ static void checkSizes (lua_State *L) { global_State *g = G(L); if (g->gckind != KGC_EMERGENCY) { /* do not change sizes in emergency */ int hs = g->strt.size / 2; /* half the size of the string table */ if (g->strt.nuse < cast(lu_int32, hs)) /* using less than that half? */ luaS_resize(L, hs); /* halve its size */ luaZ_freebuffer(L, &g->buff); /* free concatenation buffer */ } } static GCObject *udata2finalize (global_State *g) { GCObject *o = g->tobefnz; /* get first element */ lua_assert(isfinalized(o)); g->tobefnz = gch(o)->next; /* remove it from 'tobefnz' list */ gch(o)->next = g->allgc; /* return it to 'allgc' list */ g->allgc = o; resetbit(gch(o)->marked, SEPARATED); /* mark that it is not in 'tobefnz' */ lua_assert(!isold(o)); /* see MOVE OLD rule */ if (!keepinvariant(g)) /* not keeping invariant? */ makewhite(g, o); /* "sweep" object */ return o; } static void dothecall (lua_State *L, void *ud) { UNUSED(ud); luaD_call(L, L->top - 2, 0, 0); } static void GCTM (lua_State *L, int propagateerrors) { global_State *g = G(L); const TValue *tm; TValue v; setgcovalue(L, &v, udata2finalize(g)); tm = luaT_gettmbyobj(L, &v, TM_GC); if (tm != NULL && ttisfunction(tm)) { /* is there a finalizer? */ int status; lu_byte oldah = L->allowhook; int running = g->gcrunning; L->allowhook = 0; /* stop debug hooks during GC metamethod */ g->gcrunning = 0; /* avoid GC steps */ setobj2s(L, L->top, tm); /* push finalizer... */ setobj2s(L, L->top + 1, &v); /* ... and its argument */ L->top += 2; /* and (next line) call the finalizer */ status = luaD_pcall(L, dothecall, NULL, savestack(L, L->top - 2), 0); L->allowhook = oldah; /* restore hooks */ g->gcrunning = running; /* restore state */ if (status != LUA_OK && propagateerrors) { /* error while running __gc? */ if (status == LUA_ERRRUN) { /* is there an error object? */ const char *msg = (ttisstring(L->top - 1)) ? svalue(L->top - 1) : "no message"; luaO_pushfstring(L, "error in __gc metamethod (%s)", msg); status = LUA_ERRGCMM; /* error in __gc metamethod */ } luaD_throw(L, status); /* re-throw error */ } } } /* ** move all unreachable objects (or 'all' objects) that need ** finalization from list 'finobj' to list 'tobefnz' (to be finalized) */ static void separatetobefnz (lua_State *L, int all) { global_State *g = G(L); GCObject **p = &g->finobj; GCObject *curr; GCObject **lastnext = &g->tobefnz; /* find last 'next' field in 'tobefnz' list (to add elements in its end) */ while (*lastnext != NULL) lastnext = &gch(*lastnext)->next; while ((curr = *p) != NULL) { /* traverse all finalizable objects */ lua_assert(!isfinalized(curr)); lua_assert(testbit(gch(curr)->marked, SEPARATED)); if (!(all || iswhite(curr))) /* not being collected? */ p = &gch(curr)->next; /* don't bother with it */ else { l_setbit(gch(curr)->marked, FINALIZEDBIT); /* won't be finalized again */ *p = gch(curr)->next; /* remove 'curr' from 'finobj' list */ gch(curr)->next = *lastnext; /* link at the end of 'tobefnz' list */ *lastnext = curr; lastnext = &gch(curr)->next; } } } /* ** if object 'o' has a finalizer, remove it from 'allgc' list (must ** search the list to find it) and link it in 'finobj' list. */ void luaC_checkfinalizer (lua_State *L, GCObject *o, Table *mt) { global_State *g = G(L); if (testbit(gch(o)->marked, SEPARATED) || /* obj. is already separated... */ isfinalized(o) || /* ... or is finalized... */ gfasttm(g, mt, TM_GC) == NULL) /* or has no finalizer? */ return; /* nothing to be done */ else { /* move 'o' to 'finobj' list */ GCObject **p; GCheader *ho = gch(o); if (g->sweepgc == &ho->next) { /* avoid removing current sweep object */ lua_assert(issweepphase(g)); g->sweepgc = sweeptolive(L, g->sweepgc, NULL); } /* search for pointer pointing to 'o' */ for (p = &g->allgc; *p != o; p = &gch(*p)->next) { /* empty */ } *p = ho->next; /* remove 'o' from root list */ ho->next = g->finobj; /* link it in list 'finobj' */ g->finobj = o; l_setbit(ho->marked, SEPARATED); /* mark it as such */ if (!keepinvariant(g)) /* not keeping invariant? */ makewhite(g, o); /* "sweep" object */ else resetoldbit(o); /* see MOVE OLD rule */ } } /* }====================================================== */ /* ** {====================================================== ** GC control ** ======================================================= */ #define sweepphases \ (bitmask(GCSsweepstring) | bitmask(GCSsweepudata) | bitmask(GCSsweep)) /* ** enter first sweep phase (strings) and prepare pointers for other ** sweep phases. The calls to 'sweeptolive' make pointers point to an ** object inside the list (instead of to the header), so that the real ** sweep do not need to skip objects created between "now" and the start ** of the real sweep. ** Returns how many objects it sweeped. */ static int entersweep (lua_State *L) { global_State *g = G(L); int n = 0; g->gcstate = GCSsweepstring; lua_assert(g->sweepgc == NULL && g->sweepfin == NULL); /* prepare to sweep strings, finalizable objects, and regular objects */ g->sweepstrgc = 0; g->sweepfin = sweeptolive(L, &g->finobj, &n); g->sweepgc = sweeptolive(L, &g->allgc, &n); return n; } /* ** change GC mode */ void luaC_changemode (lua_State *L, int mode) { global_State *g = G(L); if (mode == g->gckind) return; /* nothing to change */ if (mode == KGC_GEN) { /* change to generational mode */ /* make sure gray lists are consistent */ luaC_runtilstate(L, bitmask(GCSpropagate)); g->GCestimate = gettotalbytes(g); g->gckind = KGC_GEN; } else { /* change to incremental mode */ /* sweep all objects to turn them back to white (as white has not changed, nothing extra will be collected) */ g->gckind = KGC_NORMAL; entersweep(L); luaC_runtilstate(L, ~sweepphases); } } /* ** call all pending finalizers */ static void callallpendingfinalizers (lua_State *L, int propagateerrors) { global_State *g = G(L); while (g->tobefnz) { resetoldbit(g->tobefnz); GCTM(L, propagateerrors); } } void luaC_freeallobjects (lua_State *L) { global_State *g = G(L); int i; separatetobefnz(L, 1); /* separate all objects with finalizers */ lua_assert(g->finobj == NULL); callallpendingfinalizers(L, 0); g->currentwhite = WHITEBITS; /* this "white" makes all objects look dead */ g->gckind = KGC_NORMAL; sweepwholelist(L, &g->finobj); /* finalizers can create objs. in 'finobj' */ sweepwholelist(L, &g->allgc); for (i = 0; i < g->strt.size; i++) /* free all string lists */ sweepwholelist(L, &g->strt.hash[i]); lua_assert(g->strt.nuse == 0); } static l_mem atomic (lua_State *L) { global_State *g = G(L); l_mem work = -g->GCmemtrav; /* start counting work */ GCObject *origweak, *origall; lua_assert(!iswhite(obj2gco(g->mainthread))); markobject(g, L); /* mark running thread */ /* registry and global metatables may be changed by API */ markvalue(g, &g->l_registry); markmt(g); /* mark basic metatables */ /* remark occasional upvalues of (maybe) dead threads */ remarkupvals(g); propagateall(g); /* propagate changes */ work += g->GCmemtrav; /* stop counting (do not (re)count grays) */ /* traverse objects caught by write barrier and by 'remarkupvals' */ retraversegrays(g); work -= g->GCmemtrav; /* restart counting */ convergeephemerons(g); /* at this point, all strongly accessible objects are marked. */ /* clear values from weak tables, before checking finalizers */ clearvalues(g, g->weak, NULL); clearvalues(g, g->allweak, NULL); origweak = g->weak; origall = g->allweak; work += g->GCmemtrav; /* stop counting (objects being finalized) */ separatetobefnz(L, 0); /* separate objects to be finalized */ markbeingfnz(g); /* mark objects that will be finalized */ propagateall(g); /* remark, to propagate `preserveness' */ work -= g->GCmemtrav; /* restart counting */ convergeephemerons(g); /* at this point, all resurrected objects are marked. */ /* remove dead objects from weak tables */ clearkeys(g, g->ephemeron, NULL); /* clear keys from all ephemeron tables */ clearkeys(g, g->allweak, NULL); /* clear keys from all allweak tables */ /* clear values from resurrected weak tables */ clearvalues(g, g->weak, origweak); clearvalues(g, g->allweak, origall); g->currentwhite = cast_byte(otherwhite(g)); /* flip current white */ work += g->GCmemtrav; /* complete counting */ return work; /* estimate of memory marked by 'atomic' */ } static lu_mem singlestep (lua_State *L) { global_State *g = G(L); switch (g->gcstate) { case GCSpause: { g->GCmemtrav = 0; /* start to count memory traversed */ if (!isgenerational(g)) markroot(g); /* start a new collection */ /* in any case, root must be marked at this point */ lua_assert(!iswhite(obj2gco(g->mainthread)) && !iswhite(gcvalue(&g->l_registry))); g->gcstate = GCSpropagate; return g->GCmemtrav; } case GCSpropagate: { if (g->gray) { lu_mem oldtrav = g->GCmemtrav; propagatemark(g); return g->GCmemtrav - oldtrav; /* memory traversed in this step */ } else { /* no more `gray' objects */ lu_mem work; int sw; g->gcstate = GCSatomic; /* finish mark phase */ g->GCestimate = g->GCmemtrav; /* save what was counted */; work = atomic(L); /* add what was traversed by 'atomic' */ g->GCestimate += work; /* estimate of total memory traversed */ sw = entersweep(L); return work + sw * GCSWEEPCOST; } } case GCSsweepstring: { int i; for (i = 0; i < GCSWEEPMAX && g->sweepstrgc + i < g->strt.size; i++) sweepwholelist(L, &g->strt.hash[g->sweepstrgc + i]); g->sweepstrgc += i; if (g->sweepstrgc >= g->strt.size) /* no more strings to sweep? */ g->gcstate = GCSsweepudata; return i * GCSWEEPCOST; } case GCSsweepudata: { if (g->sweepfin) { g->sweepfin = sweeplist(L, g->sweepfin, GCSWEEPMAX); return GCSWEEPMAX*GCSWEEPCOST; } else { g->gcstate = GCSsweep; return 0; } } case GCSsweep: { if (g->sweepgc) { g->sweepgc = sweeplist(L, g->sweepgc, GCSWEEPMAX); return GCSWEEPMAX*GCSWEEPCOST; } else { /* sweep main thread */ GCObject *mt = obj2gco(g->mainthread); sweeplist(L, &mt, 1); checkSizes(L); g->gcstate = GCSpause; /* finish collection */ return GCSWEEPCOST; } } default: lua_assert(0); return 0; } } /* ** advances the garbage collector until it reaches a state allowed ** by 'statemask' */ void luaC_runtilstate (lua_State *L, int statesmask) { global_State *g = G(L); while (!testbit(statesmask, g->gcstate)) singlestep(L); } static void generationalcollection (lua_State *L) { global_State *g = G(L); if (g->GCestimate == 0) { /* signal for another major collection? */ luaC_fullgc(L, 0); /* perform a full regular collection */ g->GCestimate = gettotalbytes(g); /* update control */ } else { lu_mem estimate = g->GCestimate; luaC_runtilstate(L, ~bitmask(GCSpause)); /* run complete cycle */ luaC_runtilstate(L, bitmask(GCSpause)); if (gettotalbytes(g) > (estimate / 100) * g->gcmajorinc) g->GCestimate = 0; /* signal for a major collection */ } luaE_setdebt(g, stddebt(g)); } static void incstep (lua_State *L) { global_State *g = G(L); l_mem debt = g->GCdebt; int stepmul = g->gcstepmul; if (stepmul < 40) stepmul = 40; /* avoid ridiculous low values */ /* convert debt from Kb to 'work units' (avoid zero debt and overflows) */ debt = (debt / STEPMULADJ) + 1; debt = (debt < MAX_LMEM / stepmul) ? debt * stepmul : MAX_LMEM; do { /* always perform at least one single step */ lu_mem work = singlestep(L); /* do some work */ debt -= work; } while (debt > -GCSTEPSIZE && g->gcstate != GCSpause); if (g->gcstate == GCSpause) debt = stddebtest(g, g->GCestimate); /* pause until next cycle */ else debt = (debt / stepmul) * STEPMULADJ; /* convert 'work units' to Kb */ luaE_setdebt(g, debt); } /* ** performs a basic GC step */ void luaC_forcestep (lua_State *L) { global_State *g = G(L); int i; if (isgenerational(g)) generationalcollection(L); else incstep(L); /* run a few finalizers (or all of them at the end of a collect cycle) */ for (i = 0; g->tobefnz && (i < GCFINALIZENUM || g->gcstate == GCSpause); i++) GCTM(L, 1); /* call one finalizer */ } /* ** performs a basic GC step only if collector is running */ void luaC_step (lua_State *L) { global_State *g = G(L); if (g->gcrunning) luaC_forcestep(L); else luaE_setdebt(g, -GCSTEPSIZE); /* avoid being called too often */ } /* ** performs a full GC cycle; if "isemergency", does not call ** finalizers (which could change stack positions) */ void luaC_fullgc (lua_State *L, int isemergency) { global_State *g = G(L); int origkind = g->gckind; int someblack = keepinvariant(g); lua_assert(origkind != KGC_EMERGENCY); if (isemergency) /* do not run finalizers during emergency GC */ g->gckind = KGC_EMERGENCY; else { g->gckind = KGC_NORMAL; callallpendingfinalizers(L, 1); } if (someblack) { /* may there be some black objects? */ /* must sweep all objects to turn them back to white (as white has not changed, nothing will be collected) */ entersweep(L); } /* finish any pending sweep phase to start a new cycle */ luaC_runtilstate(L, bitmask(GCSpause)); /* run entire collector */ luaC_runtilstate(L, ~bitmask(GCSpause)); luaC_runtilstate(L, bitmask(GCSpause)); if (origkind == KGC_GEN) { /* generational mode? */ /* generational mode must always start in propagate phase */ luaC_runtilstate(L, bitmask(GCSpropagate)); } g->gckind = origkind; luaE_setdebt(g, stddebt(g)); if (!isemergency) /* do not run finalizers during emergency GC */ callallpendingfinalizers(L, 1); } /* }====================================================== */ fs-uae-2.2.3+dfsg/libfsemu/src/lua/lstring.c0000644000175000017500000001142012162366654021056 0ustar glaubitzglaubitz/* ** $Id: lstring.c,v 2.24 2012/05/11 14:14:42 roberto Exp $ ** String table (keeps all strings handled by Lua) ** See Copyright Notice in lua.h */ #include #define lstring_c #define LUA_CORE #include "lua.h" #include "lmem.h" #include "lobject.h" #include "lstate.h" #include "lstring.h" /* ** Lua will use at most ~(2^LUAI_HASHLIMIT) bytes from a string to ** compute its hash */ #if !defined(LUAI_HASHLIMIT) #define LUAI_HASHLIMIT 5 #endif /* ** equality for long strings */ int luaS_eqlngstr (TString *a, TString *b) { size_t len = a->tsv.len; lua_assert(a->tsv.tt == LUA_TLNGSTR && b->tsv.tt == LUA_TLNGSTR); return (a == b) || /* same instance or... */ ((len == b->tsv.len) && /* equal length and ... */ (memcmp(getstr(a), getstr(b), len) == 0)); /* equal contents */ } /* ** equality for strings */ int luaS_eqstr (TString *a, TString *b) { return (a->tsv.tt == b->tsv.tt) && (a->tsv.tt == LUA_TSHRSTR ? eqshrstr(a, b) : luaS_eqlngstr(a, b)); } unsigned int luaS_hash (const char *str, size_t l, unsigned int seed) { unsigned int h = seed ^ l; size_t l1; size_t step = (l >> LUAI_HASHLIMIT) + 1; for (l1 = l; l1 >= step; l1 -= step) h = h ^ ((h<<5) + (h>>2) + cast_byte(str[l1 - 1])); return h; } /* ** resizes the string table */ void luaS_resize (lua_State *L, int newsize) { int i; stringtable *tb = &G(L)->strt; /* cannot resize while GC is traversing strings */ luaC_runtilstate(L, ~bitmask(GCSsweepstring)); if (newsize > tb->size) { luaM_reallocvector(L, tb->hash, tb->size, newsize, GCObject *); for (i = tb->size; i < newsize; i++) tb->hash[i] = NULL; } /* rehash */ for (i=0; isize; i++) { GCObject *p = tb->hash[i]; tb->hash[i] = NULL; while (p) { /* for each node in the list */ GCObject *next = gch(p)->next; /* save next */ unsigned int h = lmod(gco2ts(p)->hash, newsize); /* new position */ gch(p)->next = tb->hash[h]; /* chain it */ tb->hash[h] = p; resetoldbit(p); /* see MOVE OLD rule */ p = next; } } if (newsize < tb->size) { /* shrinking slice must be empty */ lua_assert(tb->hash[newsize] == NULL && tb->hash[tb->size - 1] == NULL); luaM_reallocvector(L, tb->hash, tb->size, newsize, GCObject *); } tb->size = newsize; } /* ** creates a new string object */ static TString *createstrobj (lua_State *L, const char *str, size_t l, int tag, unsigned int h, GCObject **list) { TString *ts; size_t totalsize; /* total size of TString object */ totalsize = sizeof(TString) + ((l + 1) * sizeof(char)); ts = &luaC_newobj(L, tag, totalsize, list, 0)->ts; ts->tsv.len = l; ts->tsv.hash = h; ts->tsv.extra = 0; memcpy(ts+1, str, l*sizeof(char)); ((char *)(ts+1))[l] = '\0'; /* ending 0 */ return ts; } /* ** creates a new short string, inserting it into string table */ static TString *newshrstr (lua_State *L, const char *str, size_t l, unsigned int h) { GCObject **list; /* (pointer to) list where it will be inserted */ stringtable *tb = &G(L)->strt; TString *s; if (tb->nuse >= cast(lu_int32, tb->size) && tb->size <= MAX_INT/2) luaS_resize(L, tb->size*2); /* too crowded */ list = &tb->hash[lmod(h, tb->size)]; s = createstrobj(L, str, l, LUA_TSHRSTR, h, list); tb->nuse++; return s; } /* ** checks whether short string exists and reuses it or creates a new one */ static TString *internshrstr (lua_State *L, const char *str, size_t l) { GCObject *o; global_State *g = G(L); unsigned int h = luaS_hash(str, l, g->seed); for (o = g->strt.hash[lmod(h, g->strt.size)]; o != NULL; o = gch(o)->next) { TString *ts = rawgco2ts(o); if (h == ts->tsv.hash && ts->tsv.len == l && (memcmp(str, getstr(ts), l * sizeof(char)) == 0)) { if (isdead(G(L), o)) /* string is dead (but was not collected yet)? */ changewhite(o); /* resurrect it */ return ts; } } return newshrstr(L, str, l, h); /* not found; create a new string */ } /* ** new string (with explicit length) */ TString *luaS_newlstr (lua_State *L, const char *str, size_t l) { if (l <= LUAI_MAXSHORTLEN) /* short string? */ return internshrstr(L, str, l); else { if (l + 1 > (MAX_SIZET - sizeof(TString))/sizeof(char)) luaM_toobig(L); return createstrobj(L, str, l, LUA_TLNGSTR, G(L)->seed, NULL); } } /* ** new zero-terminated string */ TString *luaS_new (lua_State *L, const char *str) { return luaS_newlstr(L, str, strlen(str)); } Udata *luaS_newudata (lua_State *L, size_t s, Table *e) { Udata *u; if (s > MAX_SIZET - sizeof(Udata)) luaM_toobig(L); u = &luaC_newobj(L, LUA_TUSERDATA, sizeof(Udata) + s, NULL, 0)->u; u->uv.len = s; u->uv.metatable = NULL; u->uv.env = e; return u; } fs-uae-2.2.3+dfsg/libfsemu/src/lua/llimits.h0000644000175000017500000001644212162366654021067 0ustar glaubitzglaubitz/* ** $Id: llimits.h,v 1.99 2012/05/28 20:32:28 roberto Exp $ ** Limits, basic types, and some other `installation-dependent' definitions ** See Copyright Notice in lua.h */ #ifndef llimits_h #define llimits_h #include #include #include "lua.h" typedef unsigned LUA_INT32 lu_int32; typedef LUAI_UMEM lu_mem; typedef LUAI_MEM l_mem; /* chars used as small naturals (so that `char' is reserved for characters) */ typedef unsigned char lu_byte; #define MAX_SIZET ((size_t)(~(size_t)0)-2) #define MAX_LUMEM ((lu_mem)(~(lu_mem)0)-2) #define MAX_LMEM ((l_mem) ((MAX_LUMEM >> 1) - 2)) #define MAX_INT (INT_MAX-2) /* maximum value of an int (-2 for safety) */ /* ** conversion of pointer to integer ** this is for hashing only; there is no problem if the integer ** cannot hold the whole pointer value */ #define IntPoint(p) ((unsigned int)(lu_mem)(p)) /* type to ensure maximum alignment */ #if !defined(LUAI_USER_ALIGNMENT_T) #define LUAI_USER_ALIGNMENT_T union { double u; void *s; long l; } #endif typedef LUAI_USER_ALIGNMENT_T L_Umaxalign; /* result of a `usual argument conversion' over lua_Number */ typedef LUAI_UACNUMBER l_uacNumber; /* internal assertions for in-house debugging */ #if defined(lua_assert) #define check_exp(c,e) (lua_assert(c), (e)) /* to avoid problems with conditions too long */ #define lua_longassert(c) { if (!(c)) lua_assert(0); } #else #define lua_assert(c) ((void)0) #define check_exp(c,e) (e) #define lua_longassert(c) ((void)0) #endif /* ** assertion for checking API calls */ #if !defined(luai_apicheck) #if defined(LUA_USE_APICHECK) #include #define luai_apicheck(L,e) assert(e) #else #define luai_apicheck(L,e) lua_assert(e) #endif #endif #define api_check(l,e,msg) luai_apicheck(l,(e) && msg) #if !defined(UNUSED) #define UNUSED(x) ((void)(x)) /* to avoid warnings */ #endif #define cast(t, exp) ((t)(exp)) #define cast_byte(i) cast(lu_byte, (i)) #define cast_num(i) cast(lua_Number, (i)) #define cast_int(i) cast(int, (i)) #define cast_uchar(i) cast(unsigned char, (i)) /* ** non-return type */ #if defined(__GNUC__) #define l_noret void __attribute__((noreturn)) #elif defined(_MSC_VER) #define l_noret void __declspec(noreturn) #else #define l_noret void #endif /* ** maximum depth for nested C calls and syntactical nested non-terminals ** in a program. (Value must fit in an unsigned short int.) */ #if !defined(LUAI_MAXCCALLS) #define LUAI_MAXCCALLS 200 #endif /* ** maximum number of upvalues in a closure (both C and Lua). (Value ** must fit in an unsigned char.) */ #define MAXUPVAL UCHAR_MAX /* ** type for virtual-machine instructions ** must be an unsigned with (at least) 4 bytes (see details in lopcodes.h) */ typedef lu_int32 Instruction; /* maximum stack for a Lua function */ #define MAXSTACK 250 /* minimum size for the string table (must be power of 2) */ #if !defined(MINSTRTABSIZE) #define MINSTRTABSIZE 32 #endif /* minimum size for string buffer */ #if !defined(LUA_MINBUFFER) #define LUA_MINBUFFER 32 #endif #if !defined(lua_lock) #define lua_lock(L) ((void) 0) #define lua_unlock(L) ((void) 0) #endif #if !defined(luai_threadyield) #define luai_threadyield(L) {lua_unlock(L); lua_lock(L);} #endif /* ** these macros allow user-specific actions on threads when you defined ** LUAI_EXTRASPACE and need to do something extra when a thread is ** created/deleted/resumed/yielded. */ #if !defined(luai_userstateopen) #define luai_userstateopen(L) ((void)L) #endif #if !defined(luai_userstateclose) #define luai_userstateclose(L) ((void)L) #endif #if !defined(luai_userstatethread) #define luai_userstatethread(L,L1) ((void)L) #endif #if !defined(luai_userstatefree) #define luai_userstatefree(L,L1) ((void)L) #endif #if !defined(luai_userstateresume) #define luai_userstateresume(L,n) ((void)L) #endif #if !defined(luai_userstateyield) #define luai_userstateyield(L,n) ((void)L) #endif /* ** lua_number2int is a macro to convert lua_Number to int. ** lua_number2integer is a macro to convert lua_Number to lua_Integer. ** lua_number2unsigned is a macro to convert a lua_Number to a lua_Unsigned. ** lua_unsigned2number is a macro to convert a lua_Unsigned to a lua_Number. ** luai_hashnum is a macro to hash a lua_Number value into an integer. ** The hash must be deterministic and give reasonable values for ** both small and large values (outside the range of integers). */ #if defined(MS_ASMTRICK) /* { */ /* trick with Microsoft assembler for X86 */ #define lua_number2int(i,n) __asm {__asm fld n __asm fistp i} #define lua_number2integer(i,n) lua_number2int(i, n) #define lua_number2unsigned(i,n) \ {__int64 l; __asm {__asm fld n __asm fistp l} i = (unsigned int)l;} #elif defined(LUA_IEEE754TRICK) /* }{ */ /* the next trick should work on any machine using IEEE754 with a 32-bit int type */ union luai_Cast { double l_d; LUA_INT32 l_p[2]; }; #if !defined(LUA_IEEEENDIAN) /* { */ #define LUAI_EXTRAIEEE \ static const union luai_Cast ieeeendian = {-(33.0 + 6755399441055744.0)}; #define LUA_IEEEENDIANLOC (ieeeendian.l_p[1] == 33) #else #define LUA_IEEEENDIANLOC LUA_IEEEENDIAN #define LUAI_EXTRAIEEE /* empty */ #endif /* } */ #define lua_number2int32(i,n,t) \ { LUAI_EXTRAIEEE \ volatile union luai_Cast u; u.l_d = (n) + 6755399441055744.0; \ (i) = (t)u.l_p[LUA_IEEEENDIANLOC]; } #define luai_hashnum(i,n) \ { volatile union luai_Cast u; u.l_d = (n) + 1.0; /* avoid -0 */ \ (i) = u.l_p[0]; (i) += u.l_p[1]; } /* add double bits for his hash */ #define lua_number2int(i,n) lua_number2int32(i, n, int) #define lua_number2unsigned(i,n) lua_number2int32(i, n, lua_Unsigned) /* the trick can be expanded to lua_Integer when it is a 32-bit value */ #if defined(LUA_IEEELL) #define lua_number2integer(i,n) lua_number2int32(i, n, lua_Integer) #endif #endif /* } */ /* the following definitions always work, but may be slow */ #if !defined(lua_number2int) #define lua_number2int(i,n) ((i)=(int)(n)) #endif #if !defined(lua_number2integer) #define lua_number2integer(i,n) ((i)=(lua_Integer)(n)) #endif #if !defined(lua_number2unsigned) /* { */ /* the following definition assures proper modulo behavior */ #if defined(LUA_NUMBER_DOUBLE) #include #define SUPUNSIGNED ((lua_Number)(~(lua_Unsigned)0) + 1) #define lua_number2unsigned(i,n) \ ((i)=(lua_Unsigned)((n) - floor((n)/SUPUNSIGNED)*SUPUNSIGNED)) #else #define lua_number2unsigned(i,n) ((i)=(lua_Unsigned)(n)) #endif #endif /* } */ #if !defined(lua_unsigned2number) /* on several machines, coercion from unsigned to double is slow, so it may be worth to avoid */ #define lua_unsigned2number(u) \ (((u) <= (lua_Unsigned)INT_MAX) ? (lua_Number)(int)(u) : (lua_Number)(u)) #endif #if defined(ltable_c) && !defined(luai_hashnum) #include #include #define luai_hashnum(i,n) { int e; \ n = frexp(n, &e) * (lua_Number)(INT_MAX - DBL_MAX_EXP); \ lua_number2int(i, n); i += e; } #endif /* ** macro to control inclusion of some hard tests on stack reallocation */ #if !defined(HARDSTACKTESTS) #define condmovestack(L) ((void)0) #else /* realloc stack keeping its size */ #define condmovestack(L) luaD_reallocstack((L), (L)->stacksize) #endif #if !defined(HARDMEMTESTS) #define condchangemem(L) condmovestack(L) #else #define condchangemem(L) \ ((void)(!(G(L)->gcrunning) || (luaC_fullgc(L, 0), 1))) #endif #endif fs-uae-2.2.3+dfsg/libfsemu/src/lua/lctype.h0000644000175000017500000000345512162366654020712 0ustar glaubitzglaubitz/* ** $Id: lctype.h,v 1.12 2011/07/15 12:50:29 roberto Exp $ ** 'ctype' functions for Lua ** See Copyright Notice in lua.h */ #ifndef lctype_h #define lctype_h #include "lua.h" /* ** WARNING: the functions defined here do not necessarily correspond ** to the similar functions in the standard C ctype.h. They are ** optimized for the specific needs of Lua */ #if !defined(LUA_USE_CTYPE) #if 'A' == 65 && '0' == 48 /* ASCII case: can use its own tables; faster and fixed */ #define LUA_USE_CTYPE 0 #else /* must use standard C ctype */ #define LUA_USE_CTYPE 1 #endif #endif #if !LUA_USE_CTYPE /* { */ #include #include "llimits.h" #define ALPHABIT 0 #define DIGITBIT 1 #define PRINTBIT 2 #define SPACEBIT 3 #define XDIGITBIT 4 #define MASK(B) (1 << (B)) /* ** add 1 to char to allow index -1 (EOZ) */ #define testprop(c,p) (luai_ctype_[(c)+1] & (p)) /* ** 'lalpha' (Lua alphabetic) and 'lalnum' (Lua alphanumeric) both include '_' */ #define lislalpha(c) testprop(c, MASK(ALPHABIT)) #define lislalnum(c) testprop(c, (MASK(ALPHABIT) | MASK(DIGITBIT))) #define lisdigit(c) testprop(c, MASK(DIGITBIT)) #define lisspace(c) testprop(c, MASK(SPACEBIT)) #define lisprint(c) testprop(c, MASK(PRINTBIT)) #define lisxdigit(c) testprop(c, MASK(XDIGITBIT)) /* ** this 'ltolower' only works for alphabetic characters */ #define ltolower(c) ((c) | ('A' ^ 'a')) /* two more entries for 0 and -1 (EOZ) */ LUAI_DDEC const lu_byte luai_ctype_[UCHAR_MAX + 2]; #else /* }{ */ /* ** use standard C ctypes */ #include #define lislalpha(c) (isalpha(c) || (c) == '_') #define lislalnum(c) (isalnum(c) || (c) == '_') #define lisdigit(c) (isdigit(c)) #define lisspace(c) (isspace(c)) #define lisprint(c) (isprint(c)) #define lisxdigit(c) (isxdigit(c)) #define ltolower(c) (tolower(c)) #endif /* } */ #endif fs-uae-2.2.3+dfsg/libfsemu/src/lua/lzio.c0000644000175000017500000000312512162366654020354 0ustar glaubitzglaubitz/* ** $Id: lzio.c,v 1.35 2012/05/14 13:34:18 roberto Exp $ ** Buffered streams ** See Copyright Notice in lua.h */ #include #define lzio_c #define LUA_CORE #include "lua.h" #include "llimits.h" #include "lmem.h" #include "lstate.h" #include "lzio.h" int luaZ_fill (ZIO *z) { size_t size; lua_State *L = z->L; const char *buff; lua_unlock(L); buff = z->reader(L, z->data, &size); lua_lock(L); if (buff == NULL || size == 0) return EOZ; z->n = size - 1; /* discount char being returned */ z->p = buff; return cast_uchar(*(z->p++)); } void luaZ_init (lua_State *L, ZIO *z, lua_Reader reader, void *data) { z->L = L; z->reader = reader; z->data = data; z->n = 0; z->p = NULL; } /* --------------------------------------------------------------- read --- */ size_t luaZ_read (ZIO *z, void *b, size_t n) { while (n) { size_t m; if (z->n == 0) { /* no bytes in buffer? */ if (luaZ_fill(z) == EOZ) /* try to read more */ return n; /* no more input; return number of missing bytes */ else { z->n++; /* luaZ_fill consumed first byte; put it back */ z->p--; } } m = (n <= z->n) ? n : z->n; /* min. between n and z->n */ memcpy(b, z->p, m); z->n -= m; z->p += m; b = (char *)b + m; n -= m; } return 0; } /* ------------------------------------------------------------------------ */ char *luaZ_openspace (lua_State *L, Mbuffer *buff, size_t n) { if (n > buff->buffsize) { if (n < LUA_MINBUFFER) n = LUA_MINBUFFER; luaZ_resizebuffer(L, buff, n); } return buff->buffer; } fs-uae-2.2.3+dfsg/libfsemu/src/lua/lbitlib.c0000644000175000017500000001013612162366654021020 0ustar glaubitzglaubitz/* ** $Id: lbitlib.c,v 1.16 2011/06/20 16:35:23 roberto Exp $ ** Standard library for bitwise operations ** See Copyright Notice in lua.h */ #define lbitlib_c #define LUA_LIB #include "lua.h" #include "lauxlib.h" #include "lualib.h" /* number of bits to consider in a number */ #if !defined(LUA_NBITS) #define LUA_NBITS 32 #endif #define ALLONES (~(((~(lua_Unsigned)0) << (LUA_NBITS - 1)) << 1)) /* macro to trim extra bits */ #define trim(x) ((x) & ALLONES) /* builds a number with 'n' ones (1 <= n <= LUA_NBITS) */ #define mask(n) (~((ALLONES << 1) << ((n) - 1))) typedef lua_Unsigned b_uint; static b_uint andaux (lua_State *L) { int i, n = lua_gettop(L); b_uint r = ~(b_uint)0; for (i = 1; i <= n; i++) r &= luaL_checkunsigned(L, i); return trim(r); } static int b_and (lua_State *L) { b_uint r = andaux(L); lua_pushunsigned(L, r); return 1; } static int b_test (lua_State *L) { b_uint r = andaux(L); lua_pushboolean(L, r != 0); return 1; } static int b_or (lua_State *L) { int i, n = lua_gettop(L); b_uint r = 0; for (i = 1; i <= n; i++) r |= luaL_checkunsigned(L, i); lua_pushunsigned(L, trim(r)); return 1; } static int b_xor (lua_State *L) { int i, n = lua_gettop(L); b_uint r = 0; for (i = 1; i <= n; i++) r ^= luaL_checkunsigned(L, i); lua_pushunsigned(L, trim(r)); return 1; } static int b_not (lua_State *L) { b_uint r = ~luaL_checkunsigned(L, 1); lua_pushunsigned(L, trim(r)); return 1; } static int b_shift (lua_State *L, b_uint r, int i) { if (i < 0) { /* shift right? */ i = -i; r = trim(r); if (i >= LUA_NBITS) r = 0; else r >>= i; } else { /* shift left */ if (i >= LUA_NBITS) r = 0; else r <<= i; r = trim(r); } lua_pushunsigned(L, r); return 1; } static int b_lshift (lua_State *L) { return b_shift(L, luaL_checkunsigned(L, 1), luaL_checkint(L, 2)); } static int b_rshift (lua_State *L) { return b_shift(L, luaL_checkunsigned(L, 1), -luaL_checkint(L, 2)); } static int b_arshift (lua_State *L) { b_uint r = luaL_checkunsigned(L, 1); int i = luaL_checkint(L, 2); if (i < 0 || !(r & ((b_uint)1 << (LUA_NBITS - 1)))) return b_shift(L, r, -i); else { /* arithmetic shift for 'negative' number */ if (i >= LUA_NBITS) r = ALLONES; else r = trim((r >> i) | ~(~(b_uint)0 >> i)); /* add signal bit */ lua_pushunsigned(L, r); return 1; } } static int b_rot (lua_State *L, int i) { b_uint r = luaL_checkunsigned(L, 1); i &= (LUA_NBITS - 1); /* i = i % NBITS */ r = trim(r); r = (r << i) | (r >> (LUA_NBITS - i)); lua_pushunsigned(L, trim(r)); return 1; } static int b_lrot (lua_State *L) { return b_rot(L, luaL_checkint(L, 2)); } static int b_rrot (lua_State *L) { return b_rot(L, -luaL_checkint(L, 2)); } /* ** get field and width arguments for field-manipulation functions, ** checking whether they are valid */ static int fieldargs (lua_State *L, int farg, int *width) { int f = luaL_checkint(L, farg); int w = luaL_optint(L, farg + 1, 1); luaL_argcheck(L, 0 <= f, farg, "field cannot be negative"); luaL_argcheck(L, 0 < w, farg + 1, "width must be positive"); if (f + w > LUA_NBITS) luaL_error(L, "trying to access non-existent bits"); *width = w; return f; } static int b_extract (lua_State *L) { int w; b_uint r = luaL_checkunsigned(L, 1); int f = fieldargs(L, 2, &w); r = (r >> f) & mask(w); lua_pushunsigned(L, r); return 1; } static int b_replace (lua_State *L) { int w; b_uint r = luaL_checkunsigned(L, 1); b_uint v = luaL_checkunsigned(L, 2); int f = fieldargs(L, 3, &w); int m = mask(w); v &= m; /* erase bits outside given width */ r = (r & ~(m << f)) | (v << f); lua_pushunsigned(L, r); return 1; } static const luaL_Reg bitlib[] = { {"arshift", b_arshift}, {"band", b_and}, {"bnot", b_not}, {"bor", b_or}, {"bxor", b_xor}, {"btest", b_test}, {"extract", b_extract}, {"lrotate", b_lrot}, {"lshift", b_lshift}, {"replace", b_replace}, {"rrotate", b_rrot}, {"rshift", b_rshift}, {NULL, NULL} }; LUAMOD_API int luaopen_bit32 (lua_State *L) { luaL_newlib(L, bitlib); return 1; } fs-uae-2.2.3+dfsg/libfsemu/src/lua/lauxlib.h0000644000175000017500000001625412162366654021053 0ustar glaubitzglaubitz/* ** $Id: lauxlib.h,v 1.120 2011/11/29 15:55:08 roberto Exp $ ** Auxiliary functions for building Lua libraries ** See Copyright Notice in lua.h */ #ifndef lauxlib_h #define lauxlib_h #include #include #include "lua.h" /* extra error code for `luaL_load' */ #define LUA_ERRFILE (LUA_ERRERR+1) typedef struct luaL_Reg { const char *name; lua_CFunction func; } luaL_Reg; LUALIB_API void (luaL_checkversion_) (lua_State *L, lua_Number ver); #define luaL_checkversion(L) luaL_checkversion_(L, LUA_VERSION_NUM) LUALIB_API int (luaL_getmetafield) (lua_State *L, int obj, const char *e); LUALIB_API int (luaL_callmeta) (lua_State *L, int obj, const char *e); LUALIB_API const char *(luaL_tolstring) (lua_State *L, int idx, size_t *len); LUALIB_API int (luaL_argerror) (lua_State *L, int numarg, const char *extramsg); LUALIB_API const char *(luaL_checklstring) (lua_State *L, int numArg, size_t *l); LUALIB_API const char *(luaL_optlstring) (lua_State *L, int numArg, const char *def, size_t *l); LUALIB_API lua_Number (luaL_checknumber) (lua_State *L, int numArg); LUALIB_API lua_Number (luaL_optnumber) (lua_State *L, int nArg, lua_Number def); LUALIB_API lua_Integer (luaL_checkinteger) (lua_State *L, int numArg); LUALIB_API lua_Integer (luaL_optinteger) (lua_State *L, int nArg, lua_Integer def); LUALIB_API lua_Unsigned (luaL_checkunsigned) (lua_State *L, int numArg); LUALIB_API lua_Unsigned (luaL_optunsigned) (lua_State *L, int numArg, lua_Unsigned def); LUALIB_API void (luaL_checkstack) (lua_State *L, int sz, const char *msg); LUALIB_API void (luaL_checktype) (lua_State *L, int narg, int t); LUALIB_API void (luaL_checkany) (lua_State *L, int narg); LUALIB_API int (luaL_newmetatable) (lua_State *L, const char *tname); LUALIB_API void (luaL_setmetatable) (lua_State *L, const char *tname); LUALIB_API void *(luaL_testudata) (lua_State *L, int ud, const char *tname); LUALIB_API void *(luaL_checkudata) (lua_State *L, int ud, const char *tname); LUALIB_API void (luaL_where) (lua_State *L, int lvl); LUALIB_API int (luaL_error) (lua_State *L, const char *fmt, ...); LUALIB_API int (luaL_checkoption) (lua_State *L, int narg, const char *def, const char *const lst[]); LUALIB_API int (luaL_fileresult) (lua_State *L, int stat, const char *fname); LUALIB_API int (luaL_execresult) (lua_State *L, int stat); /* pre-defined references */ #define LUA_NOREF (-2) #define LUA_REFNIL (-1) LUALIB_API int (luaL_ref) (lua_State *L, int t); LUALIB_API void (luaL_unref) (lua_State *L, int t, int ref); LUALIB_API int (luaL_loadfilex) (lua_State *L, const char *filename, const char *mode); #define luaL_loadfile(L,f) luaL_loadfilex(L,f,NULL) LUALIB_API int (luaL_loadbufferx) (lua_State *L, const char *buff, size_t sz, const char *name, const char *mode); LUALIB_API int (luaL_loadstring) (lua_State *L, const char *s); LUALIB_API lua_State *(luaL_newstate) (void); LUALIB_API int (luaL_len) (lua_State *L, int idx); LUALIB_API const char *(luaL_gsub) (lua_State *L, const char *s, const char *p, const char *r); LUALIB_API void (luaL_setfuncs) (lua_State *L, const luaL_Reg *l, int nup); LUALIB_API int (luaL_getsubtable) (lua_State *L, int idx, const char *fname); LUALIB_API void (luaL_traceback) (lua_State *L, lua_State *L1, const char *msg, int level); LUALIB_API void (luaL_requiref) (lua_State *L, const char *modname, lua_CFunction openf, int glb); /* ** =============================================================== ** some useful macros ** =============================================================== */ #define luaL_newlibtable(L,l) \ lua_createtable(L, 0, sizeof(l)/sizeof((l)[0]) - 1) #define luaL_newlib(L,l) (luaL_newlibtable(L,l), luaL_setfuncs(L,l,0)) #define luaL_argcheck(L, cond,numarg,extramsg) \ ((void)((cond) || luaL_argerror(L, (numarg), (extramsg)))) #define luaL_checkstring(L,n) (luaL_checklstring(L, (n), NULL)) #define luaL_optstring(L,n,d) (luaL_optlstring(L, (n), (d), NULL)) #define luaL_checkint(L,n) ((int)luaL_checkinteger(L, (n))) #define luaL_optint(L,n,d) ((int)luaL_optinteger(L, (n), (d))) #define luaL_checklong(L,n) ((long)luaL_checkinteger(L, (n))) #define luaL_optlong(L,n,d) ((long)luaL_optinteger(L, (n), (d))) #define luaL_typename(L,i) lua_typename(L, lua_type(L,(i))) #define luaL_dofile(L, fn) \ (luaL_loadfile(L, fn) || lua_pcall(L, 0, LUA_MULTRET, 0)) #define luaL_dostring(L, s) \ (luaL_loadstring(L, s) || lua_pcall(L, 0, LUA_MULTRET, 0)) #define luaL_getmetatable(L,n) (lua_getfield(L, LUA_REGISTRYINDEX, (n))) #define luaL_opt(L,f,n,d) (lua_isnoneornil(L,(n)) ? (d) : f(L,(n))) #define luaL_loadbuffer(L,s,sz,n) luaL_loadbufferx(L,s,sz,n,NULL) /* ** {====================================================== ** Generic Buffer manipulation ** ======================================================= */ typedef struct luaL_Buffer { char *b; /* buffer address */ size_t size; /* buffer size */ size_t n; /* number of characters in buffer */ lua_State *L; char initb[LUAL_BUFFERSIZE]; /* initial buffer */ } luaL_Buffer; #define luaL_addchar(B,c) \ ((void)((B)->n < (B)->size || luaL_prepbuffsize((B), 1)), \ ((B)->b[(B)->n++] = (c))) #define luaL_addsize(B,s) ((B)->n += (s)) LUALIB_API void (luaL_buffinit) (lua_State *L, luaL_Buffer *B); LUALIB_API char *(luaL_prepbuffsize) (luaL_Buffer *B, size_t sz); LUALIB_API void (luaL_addlstring) (luaL_Buffer *B, const char *s, size_t l); LUALIB_API void (luaL_addstring) (luaL_Buffer *B, const char *s); LUALIB_API void (luaL_addvalue) (luaL_Buffer *B); LUALIB_API void (luaL_pushresult) (luaL_Buffer *B); LUALIB_API void (luaL_pushresultsize) (luaL_Buffer *B, size_t sz); LUALIB_API char *(luaL_buffinitsize) (lua_State *L, luaL_Buffer *B, size_t sz); #define luaL_prepbuffer(B) luaL_prepbuffsize(B, LUAL_BUFFERSIZE) /* }====================================================== */ /* ** {====================================================== ** File handles for IO library ** ======================================================= */ /* ** A file handle is a userdata with metatable 'LUA_FILEHANDLE' and ** initial structure 'luaL_Stream' (it may contain other fields ** after that initial structure). */ #define LUA_FILEHANDLE "FILE*" typedef struct luaL_Stream { FILE *f; /* stream (NULL for incompletely created streams) */ lua_CFunction closef; /* to close stream (NULL for closed streams) */ } luaL_Stream; /* }====================================================== */ /* compatibility with old module system */ #if defined(LUA_COMPAT_MODULE) LUALIB_API void (luaL_pushmodule) (lua_State *L, const char *modname, int sizehint); LUALIB_API void (luaL_openlib) (lua_State *L, const char *libname, const luaL_Reg *l, int nup); #define luaL_register(L,n,l) (luaL_openlib(L,(n),(l),0)) #endif #endif fs-uae-2.2.3+dfsg/libfsemu/src/lua/llex.h0000644000175000017500000000415612162366654020355 0ustar glaubitzglaubitz/* ** $Id: llex.h,v 1.72 2011/11/30 12:43:51 roberto Exp $ ** Lexical Analyzer ** See Copyright Notice in lua.h */ #ifndef llex_h #define llex_h #include "lobject.h" #include "lzio.h" #define FIRST_RESERVED 257 /* * WARNING: if you change the order of this enumeration, * grep "ORDER RESERVED" */ enum RESERVED { /* terminal symbols denoted by reserved words */ TK_AND = FIRST_RESERVED, TK_BREAK, TK_DO, TK_ELSE, TK_ELSEIF, TK_END, TK_FALSE, TK_FOR, TK_FUNCTION, TK_GOTO, TK_IF, TK_IN, TK_LOCAL, TK_NIL, TK_NOT, TK_OR, TK_REPEAT, TK_RETURN, TK_THEN, TK_TRUE, TK_UNTIL, TK_WHILE, /* other terminal symbols */ TK_CONCAT, TK_DOTS, TK_EQ, TK_GE, TK_LE, TK_NE, TK_DBCOLON, TK_EOS, TK_NUMBER, TK_NAME, TK_STRING }; /* number of reserved words */ #define NUM_RESERVED (cast(int, TK_WHILE-FIRST_RESERVED+1)) typedef union { lua_Number r; TString *ts; } SemInfo; /* semantics information */ typedef struct Token { int token; SemInfo seminfo; } Token; /* state of the lexer plus state of the parser when shared by all functions */ typedef struct LexState { int current; /* current character (charint) */ int linenumber; /* input line counter */ int lastline; /* line of last token `consumed' */ Token t; /* current token */ Token lookahead; /* look ahead token */ struct FuncState *fs; /* current function (parser) */ struct lua_State *L; ZIO *z; /* input stream */ Mbuffer *buff; /* buffer for tokens */ struct Dyndata *dyd; /* dynamic structures used by the parser */ TString *source; /* current source name */ TString *envn; /* environment variable name */ char decpoint; /* locale decimal point */ } LexState; LUAI_FUNC void luaX_init (lua_State *L); LUAI_FUNC void luaX_setinput (lua_State *L, LexState *ls, ZIO *z, TString *source, int firstchar); LUAI_FUNC TString *luaX_newstring (LexState *ls, const char *str, size_t l); LUAI_FUNC void luaX_next (LexState *ls); LUAI_FUNC int luaX_lookahead (LexState *ls); LUAI_FUNC l_noret luaX_syntaxerror (LexState *ls, const char *s); LUAI_FUNC const char *luaX_token2str (LexState *ls, int token); #endif fs-uae-2.2.3+dfsg/libfsemu/src/lua/lundump.c0000644000175000017500000001276312162366654021073 0ustar glaubitzglaubitz/* ** $Id: lundump.c,v 2.22 2012/05/08 13:53:33 roberto Exp $ ** load precompiled Lua chunks ** See Copyright Notice in lua.h */ #include #define lundump_c #define LUA_CORE #include "lua.h" #include "ldebug.h" #include "ldo.h" #include "lfunc.h" #include "lmem.h" #include "lobject.h" #include "lstring.h" #include "lundump.h" #include "lzio.h" typedef struct { lua_State* L; ZIO* Z; Mbuffer* b; const char* name; } LoadState; static l_noret error(LoadState* S, const char* why) { luaO_pushfstring(S->L,"%s: %s precompiled chunk",S->name,why); luaD_throw(S->L,LUA_ERRSYNTAX); } #define LoadMem(S,b,n,size) LoadBlock(S,b,(n)*(size)) #define LoadByte(S) (lu_byte)LoadChar(S) #define LoadVar(S,x) LoadMem(S,&x,1,sizeof(x)) #define LoadVector(S,b,n,size) LoadMem(S,b,n,size) #if !defined(luai_verifycode) #define luai_verifycode(L,b,f) /* empty */ #endif static void LoadBlock(LoadState* S, void* b, size_t size) { if (luaZ_read(S->Z,b,size)!=0) error(S,"truncated"); } static int LoadChar(LoadState* S) { char x; LoadVar(S,x); return x; } static int LoadInt(LoadState* S) { int x; LoadVar(S,x); if (x<0) error(S,"corrupted"); return x; } static lua_Number LoadNumber(LoadState* S) { lua_Number x; LoadVar(S,x); return x; } static TString* LoadString(LoadState* S) { size_t size; LoadVar(S,size); if (size==0) return NULL; else { char* s=luaZ_openspace(S->L,S->b,size); LoadBlock(S,s,size*sizeof(char)); return luaS_newlstr(S->L,s,size-1); /* remove trailing '\0' */ } } static void LoadCode(LoadState* S, Proto* f) { int n=LoadInt(S); f->code=luaM_newvector(S->L,n,Instruction); f->sizecode=n; LoadVector(S,f->code,n,sizeof(Instruction)); } static void LoadFunction(LoadState* S, Proto* f); static void LoadConstants(LoadState* S, Proto* f) { int i,n; n=LoadInt(S); f->k=luaM_newvector(S->L,n,TValue); f->sizek=n; for (i=0; ik[i]); for (i=0; ik[i]; int t=LoadChar(S); switch (t) { case LUA_TNIL: setnilvalue(o); break; case LUA_TBOOLEAN: setbvalue(o,LoadChar(S)); break; case LUA_TNUMBER: setnvalue(o,LoadNumber(S)); break; case LUA_TSTRING: setsvalue2n(S->L,o,LoadString(S)); break; default: lua_assert(0); } } n=LoadInt(S); f->p=luaM_newvector(S->L,n,Proto*); f->sizep=n; for (i=0; ip[i]=NULL; for (i=0; ip[i]=luaF_newproto(S->L); LoadFunction(S,f->p[i]); } } static void LoadUpvalues(LoadState* S, Proto* f) { int i,n; n=LoadInt(S); f->upvalues=luaM_newvector(S->L,n,Upvaldesc); f->sizeupvalues=n; for (i=0; iupvalues[i].name=NULL; for (i=0; iupvalues[i].instack=LoadByte(S); f->upvalues[i].idx=LoadByte(S); } } static void LoadDebug(LoadState* S, Proto* f) { int i,n; f->source=LoadString(S); n=LoadInt(S); f->lineinfo=luaM_newvector(S->L,n,int); f->sizelineinfo=n; LoadVector(S,f->lineinfo,n,sizeof(int)); n=LoadInt(S); f->locvars=luaM_newvector(S->L,n,LocVar); f->sizelocvars=n; for (i=0; ilocvars[i].varname=NULL; for (i=0; ilocvars[i].varname=LoadString(S); f->locvars[i].startpc=LoadInt(S); f->locvars[i].endpc=LoadInt(S); } n=LoadInt(S); for (i=0; iupvalues[i].name=LoadString(S); } static void LoadFunction(LoadState* S, Proto* f) { f->linedefined=LoadInt(S); f->lastlinedefined=LoadInt(S); f->numparams=LoadByte(S); f->is_vararg=LoadByte(S); f->maxstacksize=LoadByte(S); LoadCode(S,f); LoadConstants(S,f); LoadUpvalues(S,f); LoadDebug(S,f); } /* the code below must be consistent with the code in luaU_header */ #define N0 LUAC_HEADERSIZE #define N1 (sizeof(LUA_SIGNATURE)-sizeof(char)) #define N2 N1+2 #define N3 N2+6 static void LoadHeader(LoadState* S) { lu_byte h[LUAC_HEADERSIZE]; lu_byte s[LUAC_HEADERSIZE]; luaU_header(h); memcpy(s,h,sizeof(char)); /* first char already read */ LoadBlock(S,s+sizeof(char),LUAC_HEADERSIZE-sizeof(char)); if (memcmp(h,s,N0)==0) return; if (memcmp(h,s,N1)!=0) error(S,"not a"); if (memcmp(h,s,N2)!=0) error(S,"version mismatch in"); if (memcmp(h,s,N3)!=0) error(S,"incompatible"); else error(S,"corrupted"); } /* ** load precompiled chunk */ Closure* luaU_undump (lua_State* L, ZIO* Z, Mbuffer* buff, const char* name) { LoadState S; Closure* cl; if (*name=='@' || *name=='=') S.name=name+1; else if (*name==LUA_SIGNATURE[0]) S.name="binary string"; else S.name=name; S.L=L; S.Z=Z; S.b=buff; LoadHeader(&S); cl=luaF_newLclosure(L,1); setclLvalue(L,L->top,cl); incr_top(L); cl->l.p=luaF_newproto(L); LoadFunction(&S,cl->l.p); if (cl->l.p->sizeupvalues != 1) { Proto* p=cl->l.p; cl=luaF_newLclosure(L,cl->l.p->sizeupvalues); cl->l.p=p; setclLvalue(L,L->top-1,cl); } luai_verifycode(L,buff,cl->l.p); return cl; } #define MYINT(s) (s[0]-'0') #define VERSION MYINT(LUA_VERSION_MAJOR)*16+MYINT(LUA_VERSION_MINOR) #define FORMAT 0 /* this is the official format */ /* * make header for precompiled chunks * if you change the code below be sure to update LoadHeader and FORMAT above * and LUAC_HEADERSIZE in lundump.h */ void luaU_header (lu_byte* h) { int x=1; memcpy(h,LUA_SIGNATURE,sizeof(LUA_SIGNATURE)-sizeof(char)); h+=sizeof(LUA_SIGNATURE)-sizeof(char); *h++=cast_byte(VERSION); *h++=cast_byte(FORMAT); *h++=cast_byte(*(char*)&x); /* endianness */ *h++=cast_byte(sizeof(int)); *h++=cast_byte(sizeof(size_t)); *h++=cast_byte(sizeof(Instruction)); *h++=cast_byte(sizeof(lua_Number)); *h++=cast_byte(((lua_Number)0.5)==0); /* is lua_Number integral? */ memcpy(h,LUAC_TAIL,sizeof(LUAC_TAIL)-sizeof(char)); } fs-uae-2.2.3+dfsg/libfsemu/src/lua/linit.c0000644000175000017500000000334012162366654020515 0ustar glaubitzglaubitz/* ** $Id: linit.c,v 1.32 2011/04/08 19:17:36 roberto Exp $ ** Initialization of libraries for lua.c and other clients ** See Copyright Notice in lua.h */ /* ** If you embed Lua in your program and need to open the standard ** libraries, call luaL_openlibs in your program. If you need a ** different set of libraries, copy this file to your project and edit ** it to suit your needs. */ #define linit_c #define LUA_LIB #include "lua.h" #include "lualib.h" #include "lauxlib.h" /* ** these libs are loaded by lua.c and are readily available to any Lua ** program */ static const luaL_Reg loadedlibs[] = { {"_G", luaopen_base}, #ifdef LUA_UNSAFE {LUA_LOADLIBNAME, luaopen_package}, #endif {LUA_COLIBNAME, luaopen_coroutine}, {LUA_TABLIBNAME, luaopen_table}, #ifdef LUA_UNSAFE {LUA_IOLIBNAME, luaopen_io}, #endif #ifdef LUA_UNSAFE {LUA_OSLIBNAME, luaopen_os}, #endif {LUA_STRLIBNAME, luaopen_string}, {LUA_BITLIBNAME, luaopen_bit32}, {LUA_MATHLIBNAME, luaopen_math}, {LUA_DBLIBNAME, luaopen_debug}, {NULL, NULL} }; /* ** these libs are preloaded and must be required before used */ static const luaL_Reg preloadedlibs[] = { {NULL, NULL} }; LUALIB_API void luaL_openlibs (lua_State *L) { const luaL_Reg *lib; /* call open functions from 'loadedlibs' and set results to global table */ for (lib = loadedlibs; lib->func; lib++) { luaL_requiref(L, lib->name, lib->func, 1); lua_pop(L, 1); /* remove lib */ } /* add open functions from 'preloadedlibs' into 'package.preload' table */ luaL_getsubtable(L, LUA_REGISTRYINDEX, "_PRELOAD"); for (lib = preloadedlibs; lib->func; lib++) { lua_pushcfunction(L, lib->func); lua_setfield(L, -2, lib->name); } lua_pop(L, 1); /* remove _PRELOAD table */ } fs-uae-2.2.3+dfsg/libfsemu/src/lua/lfunc.h0000644000175000017500000000202112162366654020505 0ustar glaubitzglaubitz/* ** $Id: lfunc.h,v 2.8 2012/05/08 13:53:33 roberto Exp $ ** Auxiliary functions to manipulate prototypes and closures ** See Copyright Notice in lua.h */ #ifndef lfunc_h #define lfunc_h #include "lobject.h" #define sizeCclosure(n) (cast(int, sizeof(CClosure)) + \ cast(int, sizeof(TValue)*((n)-1))) #define sizeLclosure(n) (cast(int, sizeof(LClosure)) + \ cast(int, sizeof(TValue *)*((n)-1))) LUAI_FUNC Proto *luaF_newproto (lua_State *L); LUAI_FUNC Closure *luaF_newCclosure (lua_State *L, int nelems); LUAI_FUNC Closure *luaF_newLclosure (lua_State *L, int nelems); LUAI_FUNC UpVal *luaF_newupval (lua_State *L); LUAI_FUNC UpVal *luaF_findupval (lua_State *L, StkId level); LUAI_FUNC void luaF_close (lua_State *L, StkId level); LUAI_FUNC void luaF_freeproto (lua_State *L, Proto *f); LUAI_FUNC void luaF_freeupval (lua_State *L, UpVal *uv); LUAI_FUNC const char *luaF_getlocalname (const Proto *func, int local_number, int pc); #endif fs-uae-2.2.3+dfsg/libfsemu/src/lua/ldblib.c0000644000175000017500000002353512162366654020636 0ustar glaubitzglaubitz/* ** $Id: ldblib.c,v 1.132 2012/01/19 20:14:44 roberto Exp $ ** Interface from Lua to its debug API ** See Copyright Notice in lua.h */ #include #include #include #define ldblib_c #define LUA_LIB #include "lua.h" #include "lauxlib.h" #include "lualib.h" #define HOOKKEY "_HKEY" static int db_getregistry (lua_State *L) { lua_pushvalue(L, LUA_REGISTRYINDEX); return 1; } static int db_getmetatable (lua_State *L) { luaL_checkany(L, 1); if (!lua_getmetatable(L, 1)) { lua_pushnil(L); /* no metatable */ } return 1; } static int db_setmetatable (lua_State *L) { int t = lua_type(L, 2); luaL_argcheck(L, t == LUA_TNIL || t == LUA_TTABLE, 2, "nil or table expected"); lua_settop(L, 2); lua_setmetatable(L, 1); return 1; /* return 1st argument */ } static int db_getuservalue (lua_State *L) { if (lua_type(L, 1) != LUA_TUSERDATA) lua_pushnil(L); else lua_getuservalue(L, 1); return 1; } static int db_setuservalue (lua_State *L) { if (lua_type(L, 1) == LUA_TLIGHTUSERDATA) luaL_argerror(L, 1, "full userdata expected, got light userdata"); luaL_checktype(L, 1, LUA_TUSERDATA); if (!lua_isnoneornil(L, 2)) luaL_checktype(L, 2, LUA_TTABLE); lua_settop(L, 2); lua_setuservalue(L, 1); return 1; } static void settabss (lua_State *L, const char *i, const char *v) { lua_pushstring(L, v); lua_setfield(L, -2, i); } static void settabsi (lua_State *L, const char *i, int v) { lua_pushinteger(L, v); lua_setfield(L, -2, i); } static void settabsb (lua_State *L, const char *i, int v) { lua_pushboolean(L, v); lua_setfield(L, -2, i); } static lua_State *getthread (lua_State *L, int *arg) { if (lua_isthread(L, 1)) { *arg = 1; return lua_tothread(L, 1); } else { *arg = 0; return L; } } static void treatstackoption (lua_State *L, lua_State *L1, const char *fname) { if (L == L1) { lua_pushvalue(L, -2); lua_remove(L, -3); } else lua_xmove(L1, L, 1); lua_setfield(L, -2, fname); } static int db_getinfo (lua_State *L) { lua_Debug ar; int arg; lua_State *L1 = getthread(L, &arg); const char *options = luaL_optstring(L, arg+2, "flnStu"); if (lua_isnumber(L, arg+1)) { if (!lua_getstack(L1, (int)lua_tointeger(L, arg+1), &ar)) { lua_pushnil(L); /* level out of range */ return 1; } } else if (lua_isfunction(L, arg+1)) { lua_pushfstring(L, ">%s", options); options = lua_tostring(L, -1); lua_pushvalue(L, arg+1); lua_xmove(L, L1, 1); } else return luaL_argerror(L, arg+1, "function or level expected"); if (!lua_getinfo(L1, options, &ar)) return luaL_argerror(L, arg+2, "invalid option"); lua_createtable(L, 0, 2); if (strchr(options, 'S')) { settabss(L, "source", ar.source); settabss(L, "short_src", ar.short_src); settabsi(L, "linedefined", ar.linedefined); settabsi(L, "lastlinedefined", ar.lastlinedefined); settabss(L, "what", ar.what); } if (strchr(options, 'l')) settabsi(L, "currentline", ar.currentline); if (strchr(options, 'u')) { settabsi(L, "nups", ar.nups); settabsi(L, "nparams", ar.nparams); settabsb(L, "isvararg", ar.isvararg); } if (strchr(options, 'n')) { settabss(L, "name", ar.name); settabss(L, "namewhat", ar.namewhat); } if (strchr(options, 't')) settabsb(L, "istailcall", ar.istailcall); if (strchr(options, 'L')) treatstackoption(L, L1, "activelines"); if (strchr(options, 'f')) treatstackoption(L, L1, "func"); return 1; /* return table */ } static int db_getlocal (lua_State *L) { int arg; lua_State *L1 = getthread(L, &arg); lua_Debug ar; const char *name; int nvar = luaL_checkint(L, arg+2); /* local-variable index */ if (lua_isfunction(L, arg + 1)) { /* function argument? */ lua_pushvalue(L, arg + 1); /* push function */ lua_pushstring(L, lua_getlocal(L, NULL, nvar)); /* push local name */ return 1; } else { /* stack-level argument */ if (!lua_getstack(L1, luaL_checkint(L, arg+1), &ar)) /* out of range? */ return luaL_argerror(L, arg+1, "level out of range"); name = lua_getlocal(L1, &ar, nvar); if (name) { lua_xmove(L1, L, 1); /* push local value */ lua_pushstring(L, name); /* push name */ lua_pushvalue(L, -2); /* re-order */ return 2; } else { lua_pushnil(L); /* no name (nor value) */ return 1; } } } static int db_setlocal (lua_State *L) { int arg; lua_State *L1 = getthread(L, &arg); lua_Debug ar; if (!lua_getstack(L1, luaL_checkint(L, arg+1), &ar)) /* out of range? */ return luaL_argerror(L, arg+1, "level out of range"); luaL_checkany(L, arg+3); lua_settop(L, arg+3); lua_xmove(L, L1, 1); lua_pushstring(L, lua_setlocal(L1, &ar, luaL_checkint(L, arg+2))); return 1; } static int auxupvalue (lua_State *L, int get) { const char *name; int n = luaL_checkint(L, 2); luaL_checktype(L, 1, LUA_TFUNCTION); name = get ? lua_getupvalue(L, 1, n) : lua_setupvalue(L, 1, n); if (name == NULL) return 0; lua_pushstring(L, name); lua_insert(L, -(get+1)); return get + 1; } static int db_getupvalue (lua_State *L) { return auxupvalue(L, 1); } static int db_setupvalue (lua_State *L) { luaL_checkany(L, 3); return auxupvalue(L, 0); } static int checkupval (lua_State *L, int argf, int argnup) { lua_Debug ar; int nup = luaL_checkint(L, argnup); luaL_checktype(L, argf, LUA_TFUNCTION); lua_pushvalue(L, argf); lua_getinfo(L, ">u", &ar); luaL_argcheck(L, 1 <= nup && nup <= ar.nups, argnup, "invalid upvalue index"); return nup; } static int db_upvalueid (lua_State *L) { int n = checkupval(L, 1, 2); lua_pushlightuserdata(L, lua_upvalueid(L, 1, n)); return 1; } static int db_upvaluejoin (lua_State *L) { int n1 = checkupval(L, 1, 2); int n2 = checkupval(L, 3, 4); luaL_argcheck(L, !lua_iscfunction(L, 1), 1, "Lua function expected"); luaL_argcheck(L, !lua_iscfunction(L, 3), 3, "Lua function expected"); lua_upvaluejoin(L, 1, n1, 3, n2); return 0; } #define gethooktable(L) luaL_getsubtable(L, LUA_REGISTRYINDEX, HOOKKEY) static void hookf (lua_State *L, lua_Debug *ar) { static const char *const hooknames[] = {"call", "return", "line", "count", "tail call"}; gethooktable(L); lua_pushthread(L); lua_rawget(L, -2); if (lua_isfunction(L, -1)) { lua_pushstring(L, hooknames[(int)ar->event]); if (ar->currentline >= 0) lua_pushinteger(L, ar->currentline); else lua_pushnil(L); lua_assert(lua_getinfo(L, "lS", ar)); lua_call(L, 2, 0); } } static int makemask (const char *smask, int count) { int mask = 0; if (strchr(smask, 'c')) mask |= LUA_MASKCALL; if (strchr(smask, 'r')) mask |= LUA_MASKRET; if (strchr(smask, 'l')) mask |= LUA_MASKLINE; if (count > 0) mask |= LUA_MASKCOUNT; return mask; } static char *unmakemask (int mask, char *smask) { int i = 0; if (mask & LUA_MASKCALL) smask[i++] = 'c'; if (mask & LUA_MASKRET) smask[i++] = 'r'; if (mask & LUA_MASKLINE) smask[i++] = 'l'; smask[i] = '\0'; return smask; } static int db_sethook (lua_State *L) { int arg, mask, count; lua_Hook func; lua_State *L1 = getthread(L, &arg); if (lua_isnoneornil(L, arg+1)) { lua_settop(L, arg+1); func = NULL; mask = 0; count = 0; /* turn off hooks */ } else { const char *smask = luaL_checkstring(L, arg+2); luaL_checktype(L, arg+1, LUA_TFUNCTION); count = luaL_optint(L, arg+3, 0); func = hookf; mask = makemask(smask, count); } if (gethooktable(L) == 0) { /* creating hook table? */ lua_pushstring(L, "k"); lua_setfield(L, -2, "__mode"); /** hooktable.__mode = "k" */ lua_pushvalue(L, -1); lua_setmetatable(L, -2); /* setmetatable(hooktable) = hooktable */ } lua_pushthread(L1); lua_xmove(L1, L, 1); lua_pushvalue(L, arg+1); lua_rawset(L, -3); /* set new hook */ lua_sethook(L1, func, mask, count); /* set hooks */ return 0; } static int db_gethook (lua_State *L) { int arg; lua_State *L1 = getthread(L, &arg); char buff[5]; int mask = lua_gethookmask(L1); lua_Hook hook = lua_gethook(L1); if (hook != NULL && hook != hookf) /* external hook? */ lua_pushliteral(L, "external hook"); else { gethooktable(L); lua_pushthread(L1); lua_xmove(L1, L, 1); lua_rawget(L, -2); /* get hook */ lua_remove(L, -2); /* remove hook table */ } lua_pushstring(L, unmakemask(mask, buff)); lua_pushinteger(L, lua_gethookcount(L1)); return 3; } static int db_debug (lua_State *L) { for (;;) { char buffer[250]; luai_writestringerror("%s", "lua_debug> "); if (fgets(buffer, sizeof(buffer), stdin) == 0 || strcmp(buffer, "cont\n") == 0) return 0; if (luaL_loadbuffer(L, buffer, strlen(buffer), "=(debug command)") || lua_pcall(L, 0, 0, 0)) luai_writestringerror("%s\n", lua_tostring(L, -1)); lua_settop(L, 0); /* remove eventual returns */ } } static int db_traceback (lua_State *L) { int arg; lua_State *L1 = getthread(L, &arg); const char *msg = lua_tostring(L, arg + 1); if (msg == NULL && !lua_isnoneornil(L, arg + 1)) /* non-string 'msg'? */ lua_pushvalue(L, arg + 1); /* return it untouched */ else { int level = luaL_optint(L, arg + 2, (L == L1) ? 1 : 0); luaL_traceback(L, L1, msg, level); } return 1; } static const luaL_Reg dblib[] = { {"debug", db_debug}, {"getuservalue", db_getuservalue}, {"gethook", db_gethook}, {"getinfo", db_getinfo}, {"getlocal", db_getlocal}, {"getregistry", db_getregistry}, {"getmetatable", db_getmetatable}, {"getupvalue", db_getupvalue}, {"upvaluejoin", db_upvaluejoin}, {"upvalueid", db_upvalueid}, {"setuservalue", db_setuservalue}, {"sethook", db_sethook}, {"setlocal", db_setlocal}, {"setmetatable", db_setmetatable}, {"setupvalue", db_setupvalue}, {"traceback", db_traceback}, {NULL, NULL} }; LUAMOD_API int luaopen_debug (lua_State *L) { luaL_newlib(L, dblib); return 1; } fs-uae-2.2.3+dfsg/libfsemu/src/lua/llex.c0000644000175000017500000003537312162366654020355 0ustar glaubitzglaubitz/* ** $Id: llex.c,v 2.61 2012/01/23 23:05:51 roberto Exp $ ** Lexical Analyzer ** See Copyright Notice in lua.h */ #include #include #define llex_c #define LUA_CORE #include "lua.h" #include "lctype.h" #include "ldo.h" #include "llex.h" #include "lobject.h" #include "lparser.h" #include "lstate.h" #include "lstring.h" #include "ltable.h" #include "lzio.h" #define next(ls) (ls->current = zgetc(ls->z)) #define currIsNewline(ls) (ls->current == '\n' || ls->current == '\r') /* ORDER RESERVED */ static const char *const luaX_tokens [] = { "and", "break", "do", "else", "elseif", "end", "false", "for", "function", "goto", "if", "in", "local", "nil", "not", "or", "repeat", "return", "then", "true", "until", "while", "..", "...", "==", ">=", "<=", "~=", "::", "", "", "", "" }; #define save_and_next(ls) (save(ls, ls->current), next(ls)) static l_noret lexerror (LexState *ls, const char *msg, int token); static void save (LexState *ls, int c) { Mbuffer *b = ls->buff; if (luaZ_bufflen(b) + 1 > luaZ_sizebuffer(b)) { size_t newsize; if (luaZ_sizebuffer(b) >= MAX_SIZET/2) lexerror(ls, "lexical element too long", 0); newsize = luaZ_sizebuffer(b) * 2; luaZ_resizebuffer(ls->L, b, newsize); } b->buffer[luaZ_bufflen(b)++] = cast(char, c); } void luaX_init (lua_State *L) { int i; for (i=0; itsv.extra = cast_byte(i+1); /* reserved word */ } } const char *luaX_token2str (LexState *ls, int token) { if (token < FIRST_RESERVED) { lua_assert(token == cast(unsigned char, token)); return (lisprint(token)) ? luaO_pushfstring(ls->L, LUA_QL("%c"), token) : luaO_pushfstring(ls->L, "char(%d)", token); } else { const char *s = luaX_tokens[token - FIRST_RESERVED]; if (token < TK_EOS) return luaO_pushfstring(ls->L, LUA_QS, s); else return s; } } static const char *txtToken (LexState *ls, int token) { switch (token) { case TK_NAME: case TK_STRING: case TK_NUMBER: save(ls, '\0'); return luaO_pushfstring(ls->L, LUA_QS, luaZ_buffer(ls->buff)); default: return luaX_token2str(ls, token); } } static l_noret lexerror (LexState *ls, const char *msg, int token) { char buff[LUA_IDSIZE]; luaO_chunkid(buff, getstr(ls->source), LUA_IDSIZE); msg = luaO_pushfstring(ls->L, "%s:%d: %s", buff, ls->linenumber, msg); if (token) luaO_pushfstring(ls->L, "%s near %s", msg, txtToken(ls, token)); luaD_throw(ls->L, LUA_ERRSYNTAX); } l_noret luaX_syntaxerror (LexState *ls, const char *msg) { lexerror(ls, msg, ls->t.token); } /* ** creates a new string and anchors it in function's table so that ** it will not be collected until the end of the function's compilation ** (by that time it should be anchored in function's prototype) */ TString *luaX_newstring (LexState *ls, const char *str, size_t l) { lua_State *L = ls->L; TValue *o; /* entry for `str' */ TString *ts = luaS_newlstr(L, str, l); /* create new string */ setsvalue2s(L, L->top++, ts); /* temporarily anchor it in stack */ o = luaH_set(L, ls->fs->h, L->top - 1); if (ttisnil(o)) { /* not in use yet? (see 'addK') */ /* boolean value does not need GC barrier; table has no metatable, so it does not need to invalidate cache */ setbvalue(o, 1); /* t[string] = true */ luaC_checkGC(L); } L->top--; /* remove string from stack */ return ts; } /* ** increment line number and skips newline sequence (any of ** \n, \r, \n\r, or \r\n) */ static void inclinenumber (LexState *ls) { int old = ls->current; lua_assert(currIsNewline(ls)); next(ls); /* skip `\n' or `\r' */ if (currIsNewline(ls) && ls->current != old) next(ls); /* skip `\n\r' or `\r\n' */ if (++ls->linenumber >= MAX_INT) luaX_syntaxerror(ls, "chunk has too many lines"); } void luaX_setinput (lua_State *L, LexState *ls, ZIO *z, TString *source, int firstchar) { ls->decpoint = '.'; ls->L = L; ls->current = firstchar; ls->lookahead.token = TK_EOS; /* no look-ahead token */ ls->z = z; ls->fs = NULL; ls->linenumber = 1; ls->lastline = 1; ls->source = source; ls->envn = luaS_new(L, LUA_ENV); /* create env name */ luaS_fix(ls->envn); /* never collect this name */ luaZ_resizebuffer(ls->L, ls->buff, LUA_MINBUFFER); /* initialize buffer */ } /* ** ======================================================= ** LEXICAL ANALYZER ** ======================================================= */ static int check_next (LexState *ls, const char *set) { if (ls->current == '\0' || !strchr(set, ls->current)) return 0; save_and_next(ls); return 1; } /* ** change all characters 'from' in buffer to 'to' */ static void buffreplace (LexState *ls, char from, char to) { size_t n = luaZ_bufflen(ls->buff); char *p = luaZ_buffer(ls->buff); while (n--) if (p[n] == from) p[n] = to; } #if !defined(getlocaledecpoint) #define getlocaledecpoint() (localeconv()->decimal_point[0]) #endif #define buff2d(b,e) luaO_str2d(luaZ_buffer(b), luaZ_bufflen(b) - 1, e) /* ** in case of format error, try to change decimal point separator to ** the one defined in the current locale and check again */ static void trydecpoint (LexState *ls, SemInfo *seminfo) { char old = ls->decpoint; ls->decpoint = getlocaledecpoint(); buffreplace(ls, old, ls->decpoint); /* try new decimal separator */ if (!buff2d(ls->buff, &seminfo->r)) { /* format error with correct decimal point: no more options */ buffreplace(ls, ls->decpoint, '.'); /* undo change (for error message) */ lexerror(ls, "malformed number", TK_NUMBER); } } /* LUA_NUMBER */ /* ** this function is quite liberal in what it accepts, as 'luaO_str2d' ** will reject ill-formed numerals. */ static void read_numeral (LexState *ls, SemInfo *seminfo) { const char *expo = "Ee"; int first = ls->current; lua_assert(lisdigit(ls->current)); save_and_next(ls); if (first == '0' && check_next(ls, "Xx")) /* hexadecimal? */ expo = "Pp"; for (;;) { if (check_next(ls, expo)) /* exponent part? */ check_next(ls, "+-"); /* optional exponent sign */ if (lisxdigit(ls->current) || ls->current == '.') save_and_next(ls); else break; } save(ls, '\0'); buffreplace(ls, '.', ls->decpoint); /* follow locale for decimal point */ if (!buff2d(ls->buff, &seminfo->r)) /* format error? */ trydecpoint(ls, seminfo); /* try to update decimal point separator */ } /* ** skip a sequence '[=*[' or ']=*]' and return its number of '='s or ** -1 if sequence is malformed */ static int skip_sep (LexState *ls) { int count = 0; int s = ls->current; lua_assert(s == '[' || s == ']'); save_and_next(ls); while (ls->current == '=') { save_and_next(ls); count++; } return (ls->current == s) ? count : (-count) - 1; } static void read_long_string (LexState *ls, SemInfo *seminfo, int sep) { save_and_next(ls); /* skip 2nd `[' */ if (currIsNewline(ls)) /* string starts with a newline? */ inclinenumber(ls); /* skip it */ for (;;) { switch (ls->current) { case EOZ: lexerror(ls, (seminfo) ? "unfinished long string" : "unfinished long comment", TK_EOS); break; /* to avoid warnings */ case ']': { if (skip_sep(ls) == sep) { save_and_next(ls); /* skip 2nd `]' */ goto endloop; } break; } case '\n': case '\r': { save(ls, '\n'); inclinenumber(ls); if (!seminfo) luaZ_resetbuffer(ls->buff); /* avoid wasting space */ break; } default: { if (seminfo) save_and_next(ls); else next(ls); } } } endloop: if (seminfo) seminfo->ts = luaX_newstring(ls, luaZ_buffer(ls->buff) + (2 + sep), luaZ_bufflen(ls->buff) - 2*(2 + sep)); } static void escerror (LexState *ls, int *c, int n, const char *msg) { int i; luaZ_resetbuffer(ls->buff); /* prepare error message */ save(ls, '\\'); for (i = 0; i < n && c[i] != EOZ; i++) save(ls, c[i]); lexerror(ls, msg, TK_STRING); } static int readhexaesc (LexState *ls) { int c[3], i; /* keep input for error message */ int r = 0; /* result accumulator */ c[0] = 'x'; /* for error message */ for (i = 1; i < 3; i++) { /* read two hexa digits */ c[i] = next(ls); if (!lisxdigit(c[i])) escerror(ls, c, i + 1, "hexadecimal digit expected"); r = (r << 4) + luaO_hexavalue(c[i]); } return r; } static int readdecesc (LexState *ls) { int c[3], i; int r = 0; /* result accumulator */ for (i = 0; i < 3 && lisdigit(ls->current); i++) { /* read up to 3 digits */ c[i] = ls->current; r = 10*r + c[i] - '0'; next(ls); } if (r > UCHAR_MAX) escerror(ls, c, i, "decimal escape too large"); return r; } static void read_string (LexState *ls, int del, SemInfo *seminfo) { save_and_next(ls); /* keep delimiter (for error messages) */ while (ls->current != del) { switch (ls->current) { case EOZ: lexerror(ls, "unfinished string", TK_EOS); break; /* to avoid warnings */ case '\n': case '\r': lexerror(ls, "unfinished string", TK_STRING); break; /* to avoid warnings */ case '\\': { /* escape sequences */ int c; /* final character to be saved */ next(ls); /* do not save the `\' */ switch (ls->current) { case 'a': c = '\a'; goto read_save; case 'b': c = '\b'; goto read_save; case 'f': c = '\f'; goto read_save; case 'n': c = '\n'; goto read_save; case 'r': c = '\r'; goto read_save; case 't': c = '\t'; goto read_save; case 'v': c = '\v'; goto read_save; case 'x': c = readhexaesc(ls); goto read_save; case '\n': case '\r': inclinenumber(ls); c = '\n'; goto only_save; case '\\': case '\"': case '\'': c = ls->current; goto read_save; case EOZ: goto no_save; /* will raise an error next loop */ case 'z': { /* zap following span of spaces */ next(ls); /* skip the 'z' */ while (lisspace(ls->current)) { if (currIsNewline(ls)) inclinenumber(ls); else next(ls); } goto no_save; } default: { if (!lisdigit(ls->current)) escerror(ls, &ls->current, 1, "invalid escape sequence"); /* digital escape \ddd */ c = readdecesc(ls); goto only_save; } } read_save: next(ls); /* read next character */ only_save: save(ls, c); /* save 'c' */ no_save: break; } default: save_and_next(ls); } } save_and_next(ls); /* skip delimiter */ seminfo->ts = luaX_newstring(ls, luaZ_buffer(ls->buff) + 1, luaZ_bufflen(ls->buff) - 2); } static int llex (LexState *ls, SemInfo *seminfo) { luaZ_resetbuffer(ls->buff); for (;;) { switch (ls->current) { case '\n': case '\r': { /* line breaks */ inclinenumber(ls); break; } case ' ': case '\f': case '\t': case '\v': { /* spaces */ next(ls); break; } case '-': { /* '-' or '--' (comment) */ next(ls); if (ls->current != '-') return '-'; /* else is a comment */ next(ls); if (ls->current == '[') { /* long comment? */ int sep = skip_sep(ls); luaZ_resetbuffer(ls->buff); /* `skip_sep' may dirty the buffer */ if (sep >= 0) { read_long_string(ls, NULL, sep); /* skip long comment */ luaZ_resetbuffer(ls->buff); /* previous call may dirty the buff. */ break; } } /* else short comment */ while (!currIsNewline(ls) && ls->current != EOZ) next(ls); /* skip until end of line (or end of file) */ break; } case '[': { /* long string or simply '[' */ int sep = skip_sep(ls); if (sep >= 0) { read_long_string(ls, seminfo, sep); return TK_STRING; } else if (sep == -1) return '['; else lexerror(ls, "invalid long string delimiter", TK_STRING); } case '=': { next(ls); if (ls->current != '=') return '='; else { next(ls); return TK_EQ; } } case '<': { next(ls); if (ls->current != '=') return '<'; else { next(ls); return TK_LE; } } case '>': { next(ls); if (ls->current != '=') return '>'; else { next(ls); return TK_GE; } } case '~': { next(ls); if (ls->current != '=') return '~'; else { next(ls); return TK_NE; } } case ':': { next(ls); if (ls->current != ':') return ':'; else { next(ls); return TK_DBCOLON; } } case '"': case '\'': { /* short literal strings */ read_string(ls, ls->current, seminfo); return TK_STRING; } case '.': { /* '.', '..', '...', or number */ save_and_next(ls); if (check_next(ls, ".")) { if (check_next(ls, ".")) return TK_DOTS; /* '...' */ else return TK_CONCAT; /* '..' */ } else if (!lisdigit(ls->current)) return '.'; /* else go through */ } case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': { read_numeral(ls, seminfo); return TK_NUMBER; } case EOZ: { return TK_EOS; } default: { if (lislalpha(ls->current)) { /* identifier or reserved word? */ TString *ts; do { save_and_next(ls); } while (lislalnum(ls->current)); ts = luaX_newstring(ls, luaZ_buffer(ls->buff), luaZ_bufflen(ls->buff)); seminfo->ts = ts; if (isreserved(ts)) /* reserved word? */ return ts->tsv.extra - 1 + FIRST_RESERVED; else { return TK_NAME; } } else { /* single-char tokens (+ - / ...) */ int c = ls->current; next(ls); return c; } } } } } void luaX_next (LexState *ls) { ls->lastline = ls->linenumber; if (ls->lookahead.token != TK_EOS) { /* is there a look-ahead token? */ ls->t = ls->lookahead; /* use this one */ ls->lookahead.token = TK_EOS; /* and discharge it */ } else ls->t.token = llex(ls, &ls->t.seminfo); /* read next token */ } int luaX_lookahead (LexState *ls) { lua_assert(ls->lookahead.token == TK_EOS); ls->lookahead.token = llex(ls, &ls->lookahead.seminfo); return ls->lookahead.token; } fs-uae-2.2.3+dfsg/libfsemu/src/lua/ltablib.c0000644000175000017500000001670512162366654021020 0ustar glaubitzglaubitz/* ** $Id: ltablib.c,v 1.63 2011/11/28 17:26:30 roberto Exp $ ** Library for Table Manipulation ** See Copyright Notice in lua.h */ #include #define ltablib_c #define LUA_LIB #include "lua.h" #include "lauxlib.h" #include "lualib.h" #define aux_getn(L,n) \ (luaL_checktype(L, n, LUA_TTABLE), luaL_len(L, n)) #if defined(LUA_COMPAT_MAXN) static int maxn (lua_State *L) { lua_Number max = 0; luaL_checktype(L, 1, LUA_TTABLE); lua_pushnil(L); /* first key */ while (lua_next(L, 1)) { lua_pop(L, 1); /* remove value */ if (lua_type(L, -1) == LUA_TNUMBER) { lua_Number v = lua_tonumber(L, -1); if (v > max) max = v; } } lua_pushnumber(L, max); return 1; } #endif static int tinsert (lua_State *L) { int e = aux_getn(L, 1) + 1; /* first empty element */ int pos; /* where to insert new element */ switch (lua_gettop(L)) { case 2: { /* called with only 2 arguments */ pos = e; /* insert new element at the end */ break; } case 3: { int i; pos = luaL_checkint(L, 2); /* 2nd argument is the position */ if (pos > e) e = pos; /* `grow' array if necessary */ for (i = e; i > pos; i--) { /* move up elements */ lua_rawgeti(L, 1, i-1); lua_rawseti(L, 1, i); /* t[i] = t[i-1] */ } break; } default: { return luaL_error(L, "wrong number of arguments to " LUA_QL("insert")); } } lua_rawseti(L, 1, pos); /* t[pos] = v */ return 0; } static int tremove (lua_State *L) { int e = aux_getn(L, 1); int pos = luaL_optint(L, 2, e); if (!(1 <= pos && pos <= e)) /* position is outside bounds? */ return 0; /* nothing to remove */ lua_rawgeti(L, 1, pos); /* result = t[pos] */ for ( ;pos 0) { /* at least one element? */ int i; lua_pushvalue(L, 1); lua_rawseti(L, -2, 1); /* insert first element */ lua_replace(L, 1); /* move table into index 1 */ for (i = n; i >= 2; i--) /* assign other elements */ lua_rawseti(L, 1, i); } return 1; /* return table */ } static int unpack (lua_State *L) { int i, e, n; luaL_checktype(L, 1, LUA_TTABLE); i = luaL_optint(L, 2, 1); e = luaL_opt(L, luaL_checkint, 3, luaL_len(L, 1)); if (i > e) return 0; /* empty range */ n = e - i + 1; /* number of elements */ if (n <= 0 || !lua_checkstack(L, n)) /* n <= 0 means arith. overflow */ return luaL_error(L, "too many results to unpack"); lua_rawgeti(L, 1, i); /* push arg[i] (avoiding overflow problems) */ while (i++ < e) /* push arg[i + 1...e] */ lua_rawgeti(L, 1, i); return n; } /* }====================================================== */ /* ** {====================================================== ** Quicksort ** (based on `Algorithms in MODULA-3', Robert Sedgewick; ** Addison-Wesley, 1993.) ** ======================================================= */ static void set2 (lua_State *L, int i, int j) { lua_rawseti(L, 1, i); lua_rawseti(L, 1, j); } static int sort_comp (lua_State *L, int a, int b) { if (!lua_isnil(L, 2)) { /* function? */ int res; lua_pushvalue(L, 2); lua_pushvalue(L, a-1); /* -1 to compensate function */ lua_pushvalue(L, b-2); /* -2 to compensate function and `a' */ lua_call(L, 2, 1); res = lua_toboolean(L, -1); lua_pop(L, 1); return res; } else /* a < b? */ return lua_compare(L, a, b, LUA_OPLT); } static void auxsort (lua_State *L, int l, int u) { while (l < u) { /* for tail recursion */ int i, j; /* sort elements a[l], a[(l+u)/2] and a[u] */ lua_rawgeti(L, 1, l); lua_rawgeti(L, 1, u); if (sort_comp(L, -1, -2)) /* a[u] < a[l]? */ set2(L, l, u); /* swap a[l] - a[u] */ else lua_pop(L, 2); if (u-l == 1) break; /* only 2 elements */ i = (l+u)/2; lua_rawgeti(L, 1, i); lua_rawgeti(L, 1, l); if (sort_comp(L, -2, -1)) /* a[i]= P */ while (lua_rawgeti(L, 1, ++i), sort_comp(L, -1, -2)) { if (i>=u) luaL_error(L, "invalid order function for sorting"); lua_pop(L, 1); /* remove a[i] */ } /* repeat --j until a[j] <= P */ while (lua_rawgeti(L, 1, --j), sort_comp(L, -3, -1)) { if (j<=l) luaL_error(L, "invalid order function for sorting"); lua_pop(L, 1); /* remove a[j] */ } if (j #define ldump_c #define LUA_CORE #include "lua.h" #include "lobject.h" #include "lstate.h" #include "lundump.h" typedef struct { lua_State* L; lua_Writer writer; void* data; int strip; int status; } DumpState; #define DumpMem(b,n,size,D) DumpBlock(b,(n)*(size),D) #define DumpVar(x,D) DumpMem(&x,1,sizeof(x),D) static void DumpBlock(const void* b, size_t size, DumpState* D) { if (D->status==0) { lua_unlock(D->L); D->status=(*D->writer)(D->L,b,size,D->data); lua_lock(D->L); } } static void DumpChar(int y, DumpState* D) { char x=(char)y; DumpVar(x,D); } static void DumpInt(int x, DumpState* D) { DumpVar(x,D); } static void DumpNumber(lua_Number x, DumpState* D) { DumpVar(x,D); } static void DumpVector(const void* b, int n, size_t size, DumpState* D) { DumpInt(n,D); DumpMem(b,n,size,D); } static void DumpString(const TString* s, DumpState* D) { if (s==NULL) { size_t size=0; DumpVar(size,D); } else { size_t size=s->tsv.len+1; /* include trailing '\0' */ DumpVar(size,D); DumpBlock(getstr(s),size*sizeof(char),D); } } #define DumpCode(f,D) DumpVector(f->code,f->sizecode,sizeof(Instruction),D) static void DumpFunction(const Proto* f, DumpState* D); static void DumpConstants(const Proto* f, DumpState* D) { int i,n=f->sizek; DumpInt(n,D); for (i=0; ik[i]; DumpChar(ttypenv(o),D); switch (ttypenv(o)) { case LUA_TNIL: break; case LUA_TBOOLEAN: DumpChar(bvalue(o),D); break; case LUA_TNUMBER: DumpNumber(nvalue(o),D); break; case LUA_TSTRING: DumpString(rawtsvalue(o),D); break; default: lua_assert(0); } } n=f->sizep; DumpInt(n,D); for (i=0; ip[i],D); } static void DumpUpvalues(const Proto* f, DumpState* D) { int i,n=f->sizeupvalues; DumpInt(n,D); for (i=0; iupvalues[i].instack,D); DumpChar(f->upvalues[i].idx,D); } } static void DumpDebug(const Proto* f, DumpState* D) { int i,n; DumpString((D->strip) ? NULL : f->source,D); n= (D->strip) ? 0 : f->sizelineinfo; DumpVector(f->lineinfo,n,sizeof(int),D); n= (D->strip) ? 0 : f->sizelocvars; DumpInt(n,D); for (i=0; ilocvars[i].varname,D); DumpInt(f->locvars[i].startpc,D); DumpInt(f->locvars[i].endpc,D); } n= (D->strip) ? 0 : f->sizeupvalues; DumpInt(n,D); for (i=0; iupvalues[i].name,D); } static void DumpFunction(const Proto* f, DumpState* D) { DumpInt(f->linedefined,D); DumpInt(f->lastlinedefined,D); DumpChar(f->numparams,D); DumpChar(f->is_vararg,D); DumpChar(f->maxstacksize,D); DumpCode(f,D); DumpConstants(f,D); DumpUpvalues(f,D); DumpDebug(f,D); } static void DumpHeader(DumpState* D) { lu_byte h[LUAC_HEADERSIZE]; luaU_header(h); DumpBlock(h,LUAC_HEADERSIZE,D); } /* ** dump Lua function as precompiled chunk */ int luaU_dump (lua_State* L, const Proto* f, lua_Writer w, void* data, int strip) { DumpState D; D.L=L; D.writer=w; D.data=data; D.strip=strip; D.status=0; DumpHeader(&D); DumpFunction(f,&D); return D.status; } fs-uae-2.2.3+dfsg/libfsemu/src/lua/ldebug.h0000644000175000017500000000207312162366654020647 0ustar glaubitzglaubitz/* ** $Id: ldebug.h,v 2.7 2011/10/07 20:45:19 roberto Exp $ ** Auxiliary functions from Debug Interface module ** See Copyright Notice in lua.h */ #ifndef ldebug_h #define ldebug_h #include "lstate.h" #define pcRel(pc, p) (cast(int, (pc) - (p)->code) - 1) #define getfuncline(f,pc) (((f)->lineinfo) ? (f)->lineinfo[pc] : 0) #define resethookcount(L) (L->hookcount = L->basehookcount) /* Active Lua function (given call info) */ #define ci_func(ci) (clLvalue((ci)->func)) LUAI_FUNC l_noret luaG_typeerror (lua_State *L, const TValue *o, const char *opname); LUAI_FUNC l_noret luaG_concaterror (lua_State *L, StkId p1, StkId p2); LUAI_FUNC l_noret luaG_aritherror (lua_State *L, const TValue *p1, const TValue *p2); LUAI_FUNC l_noret luaG_ordererror (lua_State *L, const TValue *p1, const TValue *p2); LUAI_FUNC l_noret luaG_runerror (lua_State *L, const char *fmt, ...); LUAI_FUNC l_noret luaG_errormsg (lua_State *L); #endif fs-uae-2.2.3+dfsg/libfsemu/src/lua/lua.h0000644000175000017500000003234412162366654020172 0ustar glaubitzglaubitz/* ** $Id: lua.h,v 1.283 2012/04/20 13:18:26 roberto Exp $ ** Lua - A Scripting Language ** Lua.org, PUC-Rio, Brazil (http://www.lua.org) ** See Copyright Notice at the end of this file */ #ifndef lua_h #define lua_h #include #include #include "luaconf.h" #define LUA_VERSION_MAJOR "5" #define LUA_VERSION_MINOR "2" #define LUA_VERSION_NUM 502 #define LUA_VERSION_RELEASE "1" #define LUA_VERSION "Lua " LUA_VERSION_MAJOR "." LUA_VERSION_MINOR #define LUA_RELEASE LUA_VERSION "." LUA_VERSION_RELEASE #define LUA_COPYRIGHT LUA_RELEASE " Copyright (C) 1994-2012 Lua.org, PUC-Rio" #define LUA_AUTHORS "R. Ierusalimschy, L. H. de Figueiredo, W. Celes" /* mark for precompiled code ('Lua') */ #define LUA_SIGNATURE "\033Lua" /* option for multiple returns in 'lua_pcall' and 'lua_call' */ #define LUA_MULTRET (-1) /* ** pseudo-indices */ #define LUA_REGISTRYINDEX LUAI_FIRSTPSEUDOIDX #define lua_upvalueindex(i) (LUA_REGISTRYINDEX - (i)) /* thread status */ #define LUA_OK 0 #define LUA_YIELD 1 #define LUA_ERRRUN 2 #define LUA_ERRSYNTAX 3 #define LUA_ERRMEM 4 #define LUA_ERRGCMM 5 #define LUA_ERRERR 6 typedef struct lua_State lua_State; typedef int (*lua_CFunction) (lua_State *L); /* ** functions that read/write blocks when loading/dumping Lua chunks */ typedef const char * (*lua_Reader) (lua_State *L, void *ud, size_t *sz); typedef int (*lua_Writer) (lua_State *L, const void* p, size_t sz, void* ud); /* ** prototype for memory-allocation functions */ typedef void * (*lua_Alloc) (void *ud, void *ptr, size_t osize, size_t nsize); /* ** basic types */ #define LUA_TNONE (-1) #define LUA_TNIL 0 #define LUA_TBOOLEAN 1 #define LUA_TLIGHTUSERDATA 2 #define LUA_TNUMBER 3 #define LUA_TSTRING 4 #define LUA_TTABLE 5 #define LUA_TFUNCTION 6 #define LUA_TUSERDATA 7 #define LUA_TTHREAD 8 #define LUA_NUMTAGS 9 /* minimum Lua stack available to a C function */ #define LUA_MINSTACK 20 /* predefined values in the registry */ #define LUA_RIDX_MAINTHREAD 1 #define LUA_RIDX_GLOBALS 2 #define LUA_RIDX_LAST LUA_RIDX_GLOBALS /* type of numbers in Lua */ typedef LUA_NUMBER lua_Number; /* type for integer functions */ typedef LUA_INTEGER lua_Integer; /* unsigned integer type */ typedef LUA_UNSIGNED lua_Unsigned; /* ** generic extra include file */ #if defined(LUA_USER_H) #include LUA_USER_H #endif /* ** state manipulation */ LUA_API lua_State *(lua_newstate) (lua_Alloc f, void *ud); LUA_API void (lua_close) (lua_State *L); LUA_API lua_State *(lua_newthread) (lua_State *L); LUA_API lua_CFunction (lua_atpanic) (lua_State *L, lua_CFunction panicf); LUA_API const lua_Number *(lua_version) (lua_State *L); /* ** basic stack manipulation */ LUA_API int (lua_absindex) (lua_State *L, int idx); LUA_API int (lua_gettop) (lua_State *L); LUA_API void (lua_settop) (lua_State *L, int idx); LUA_API void (lua_pushvalue) (lua_State *L, int idx); LUA_API void (lua_remove) (lua_State *L, int idx); LUA_API void (lua_insert) (lua_State *L, int idx); LUA_API void (lua_replace) (lua_State *L, int idx); LUA_API void (lua_copy) (lua_State *L, int fromidx, int toidx); LUA_API int (lua_checkstack) (lua_State *L, int sz); LUA_API void (lua_xmove) (lua_State *from, lua_State *to, int n); /* ** access functions (stack -> C) */ LUA_API int (lua_isnumber) (lua_State *L, int idx); LUA_API int (lua_isstring) (lua_State *L, int idx); LUA_API int (lua_iscfunction) (lua_State *L, int idx); LUA_API int (lua_isuserdata) (lua_State *L, int idx); LUA_API int (lua_type) (lua_State *L, int idx); LUA_API const char *(lua_typename) (lua_State *L, int tp); LUA_API lua_Number (lua_tonumberx) (lua_State *L, int idx, int *isnum); LUA_API lua_Integer (lua_tointegerx) (lua_State *L, int idx, int *isnum); LUA_API lua_Unsigned (lua_tounsignedx) (lua_State *L, int idx, int *isnum); LUA_API int (lua_toboolean) (lua_State *L, int idx); LUA_API const char *(lua_tolstring) (lua_State *L, int idx, size_t *len); LUA_API size_t (lua_rawlen) (lua_State *L, int idx); LUA_API lua_CFunction (lua_tocfunction) (lua_State *L, int idx); LUA_API void *(lua_touserdata) (lua_State *L, int idx); LUA_API lua_State *(lua_tothread) (lua_State *L, int idx); LUA_API const void *(lua_topointer) (lua_State *L, int idx); /* ** Comparison and arithmetic functions */ #define LUA_OPADD 0 /* ORDER TM */ #define LUA_OPSUB 1 #define LUA_OPMUL 2 #define LUA_OPDIV 3 #define LUA_OPMOD 4 #define LUA_OPPOW 5 #define LUA_OPUNM 6 LUA_API void (lua_arith) (lua_State *L, int op); #define LUA_OPEQ 0 #define LUA_OPLT 1 #define LUA_OPLE 2 LUA_API int (lua_rawequal) (lua_State *L, int idx1, int idx2); LUA_API int (lua_compare) (lua_State *L, int idx1, int idx2, int op); /* ** push functions (C -> stack) */ LUA_API void (lua_pushnil) (lua_State *L); LUA_API void (lua_pushnumber) (lua_State *L, lua_Number n); LUA_API void (lua_pushinteger) (lua_State *L, lua_Integer n); LUA_API void (lua_pushunsigned) (lua_State *L, lua_Unsigned n); LUA_API const char *(lua_pushlstring) (lua_State *L, const char *s, size_t l); LUA_API const char *(lua_pushstring) (lua_State *L, const char *s); LUA_API const char *(lua_pushvfstring) (lua_State *L, const char *fmt, va_list argp); LUA_API const char *(lua_pushfstring) (lua_State *L, const char *fmt, ...); LUA_API void (lua_pushcclosure) (lua_State *L, lua_CFunction fn, int n); LUA_API void (lua_pushboolean) (lua_State *L, int b); LUA_API void (lua_pushlightuserdata) (lua_State *L, void *p); LUA_API int (lua_pushthread) (lua_State *L); /* ** get functions (Lua -> stack) */ LUA_API void (lua_getglobal) (lua_State *L, const char *var); LUA_API void (lua_gettable) (lua_State *L, int idx); LUA_API void (lua_getfield) (lua_State *L, int idx, const char *k); LUA_API void (lua_rawget) (lua_State *L, int idx); LUA_API void (lua_rawgeti) (lua_State *L, int idx, int n); LUA_API void (lua_rawgetp) (lua_State *L, int idx, const void *p); LUA_API void (lua_createtable) (lua_State *L, int narr, int nrec); LUA_API void *(lua_newuserdata) (lua_State *L, size_t sz); LUA_API int (lua_getmetatable) (lua_State *L, int objindex); LUA_API void (lua_getuservalue) (lua_State *L, int idx); /* ** set functions (stack -> Lua) */ LUA_API void (lua_setglobal) (lua_State *L, const char *var); LUA_API void (lua_settable) (lua_State *L, int idx); LUA_API void (lua_setfield) (lua_State *L, int idx, const char *k); LUA_API void (lua_rawset) (lua_State *L, int idx); LUA_API void (lua_rawseti) (lua_State *L, int idx, int n); LUA_API void (lua_rawsetp) (lua_State *L, int idx, const void *p); LUA_API int (lua_setmetatable) (lua_State *L, int objindex); LUA_API void (lua_setuservalue) (lua_State *L, int idx); /* ** 'load' and 'call' functions (load and run Lua code) */ LUA_API void (lua_callk) (lua_State *L, int nargs, int nresults, int ctx, lua_CFunction k); #define lua_call(L,n,r) lua_callk(L, (n), (r), 0, NULL) LUA_API int (lua_getctx) (lua_State *L, int *ctx); LUA_API int (lua_pcallk) (lua_State *L, int nargs, int nresults, int errfunc, int ctx, lua_CFunction k); #define lua_pcall(L,n,r,f) lua_pcallk(L, (n), (r), (f), 0, NULL) LUA_API int (lua_load) (lua_State *L, lua_Reader reader, void *dt, const char *chunkname, const char *mode); LUA_API int (lua_dump) (lua_State *L, lua_Writer writer, void *data); /* ** coroutine functions */ LUA_API int (lua_yieldk) (lua_State *L, int nresults, int ctx, lua_CFunction k); #define lua_yield(L,n) lua_yieldk(L, (n), 0, NULL) LUA_API int (lua_resume) (lua_State *L, lua_State *from, int narg); LUA_API int (lua_status) (lua_State *L); /* ** garbage-collection function and options */ #define LUA_GCSTOP 0 #define LUA_GCRESTART 1 #define LUA_GCCOLLECT 2 #define LUA_GCCOUNT 3 #define LUA_GCCOUNTB 4 #define LUA_GCSTEP 5 #define LUA_GCSETPAUSE 6 #define LUA_GCSETSTEPMUL 7 #define LUA_GCSETMAJORINC 8 #define LUA_GCISRUNNING 9 #define LUA_GCGEN 10 #define LUA_GCINC 11 LUA_API int (lua_gc) (lua_State *L, int what, int data); /* ** miscellaneous functions */ LUA_API int (lua_error) (lua_State *L); LUA_API int (lua_next) (lua_State *L, int idx); LUA_API void (lua_concat) (lua_State *L, int n); LUA_API void (lua_len) (lua_State *L, int idx); LUA_API lua_Alloc (lua_getallocf) (lua_State *L, void **ud); LUA_API void (lua_setallocf) (lua_State *L, lua_Alloc f, void *ud); /* ** =============================================================== ** some useful macros ** =============================================================== */ #define lua_tonumber(L,i) lua_tonumberx(L,i,NULL) #define lua_tointeger(L,i) lua_tointegerx(L,i,NULL) #define lua_tounsigned(L,i) lua_tounsignedx(L,i,NULL) #define lua_pop(L,n) lua_settop(L, -(n)-1) #define lua_newtable(L) lua_createtable(L, 0, 0) #define lua_register(L,n,f) (lua_pushcfunction(L, (f)), lua_setglobal(L, (n))) #define lua_pushcfunction(L,f) lua_pushcclosure(L, (f), 0) #define lua_isfunction(L,n) (lua_type(L, (n)) == LUA_TFUNCTION) #define lua_istable(L,n) (lua_type(L, (n)) == LUA_TTABLE) #define lua_islightuserdata(L,n) (lua_type(L, (n)) == LUA_TLIGHTUSERDATA) #define lua_isnil(L,n) (lua_type(L, (n)) == LUA_TNIL) #define lua_isboolean(L,n) (lua_type(L, (n)) == LUA_TBOOLEAN) #define lua_isthread(L,n) (lua_type(L, (n)) == LUA_TTHREAD) #define lua_isnone(L,n) (lua_type(L, (n)) == LUA_TNONE) #define lua_isnoneornil(L, n) (lua_type(L, (n)) <= 0) #define lua_pushliteral(L, s) \ lua_pushlstring(L, "" s, (sizeof(s)/sizeof(char))-1) #define lua_pushglobaltable(L) \ lua_rawgeti(L, LUA_REGISTRYINDEX, LUA_RIDX_GLOBALS) #define lua_tostring(L,i) lua_tolstring(L, (i), NULL) /* ** {====================================================================== ** Debug API ** ======================================================================= */ /* ** Event codes */ #define LUA_HOOKCALL 0 #define LUA_HOOKRET 1 #define LUA_HOOKLINE 2 #define LUA_HOOKCOUNT 3 #define LUA_HOOKTAILCALL 4 /* ** Event masks */ #define LUA_MASKCALL (1 << LUA_HOOKCALL) #define LUA_MASKRET (1 << LUA_HOOKRET) #define LUA_MASKLINE (1 << LUA_HOOKLINE) #define LUA_MASKCOUNT (1 << LUA_HOOKCOUNT) typedef struct lua_Debug lua_Debug; /* activation record */ /* Functions to be called by the debugger in specific events */ typedef void (*lua_Hook) (lua_State *L, lua_Debug *ar); LUA_API int (lua_getstack) (lua_State *L, int level, lua_Debug *ar); LUA_API int (lua_getinfo) (lua_State *L, const char *what, lua_Debug *ar); LUA_API const char *(lua_getlocal) (lua_State *L, const lua_Debug *ar, int n); LUA_API const char *(lua_setlocal) (lua_State *L, const lua_Debug *ar, int n); LUA_API const char *(lua_getupvalue) (lua_State *L, int funcindex, int n); LUA_API const char *(lua_setupvalue) (lua_State *L, int funcindex, int n); LUA_API void *(lua_upvalueid) (lua_State *L, int fidx, int n); LUA_API void (lua_upvaluejoin) (lua_State *L, int fidx1, int n1, int fidx2, int n2); LUA_API int (lua_sethook) (lua_State *L, lua_Hook func, int mask, int count); LUA_API lua_Hook (lua_gethook) (lua_State *L); LUA_API int (lua_gethookmask) (lua_State *L); LUA_API int (lua_gethookcount) (lua_State *L); struct lua_Debug { int event; const char *name; /* (n) */ const char *namewhat; /* (n) 'global', 'local', 'field', 'method' */ const char *what; /* (S) 'Lua', 'C', 'main', 'tail' */ const char *source; /* (S) */ int currentline; /* (l) */ int linedefined; /* (S) */ int lastlinedefined; /* (S) */ unsigned char nups; /* (u) number of upvalues */ unsigned char nparams;/* (u) number of parameters */ char isvararg; /* (u) */ char istailcall; /* (t) */ char short_src[LUA_IDSIZE]; /* (S) */ /* private part */ struct CallInfo *i_ci; /* active function */ }; /* }====================================================================== */ /****************************************************************************** * Copyright (C) 1994-2012 Lua.org, PUC-Rio. * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ******************************************************************************/ #endif fs-uae-2.2.3+dfsg/libfsemu/src/lua/ldebug.c0000644000175000017500000003632412162366654020650 0ustar glaubitzglaubitz/* ** $Id: ldebug.c,v 2.89 2012/01/20 22:05:50 roberto Exp $ ** Debug Interface ** See Copyright Notice in lua.h */ #include #include #include #define ldebug_c #define LUA_CORE #include "lua.h" #include "lapi.h" #include "lcode.h" #include "ldebug.h" #include "ldo.h" #include "lfunc.h" #include "lobject.h" #include "lopcodes.h" #include "lstate.h" #include "lstring.h" #include "ltable.h" #include "ltm.h" #include "lvm.h" #define noLuaClosure(f) ((f) == NULL || (f)->c.tt == LUA_TCCL) static const char *getfuncname (lua_State *L, CallInfo *ci, const char **name); static int currentpc (CallInfo *ci) { lua_assert(isLua(ci)); return pcRel(ci->u.l.savedpc, ci_func(ci)->p); } static int currentline (CallInfo *ci) { return getfuncline(ci_func(ci)->p, currentpc(ci)); } /* ** this function can be called asynchronous (e.g. during a signal) */ LUA_API int lua_sethook (lua_State *L, lua_Hook func, int mask, int count) { if (func == NULL || mask == 0) { /* turn off hooks? */ mask = 0; func = NULL; } if (isLua(L->ci)) L->oldpc = L->ci->u.l.savedpc; L->hook = func; L->basehookcount = count; resethookcount(L); L->hookmask = cast_byte(mask); return 1; } LUA_API lua_Hook lua_gethook (lua_State *L) { return L->hook; } LUA_API int lua_gethookmask (lua_State *L) { return L->hookmask; } LUA_API int lua_gethookcount (lua_State *L) { return L->basehookcount; } LUA_API int lua_getstack (lua_State *L, int level, lua_Debug *ar) { int status; CallInfo *ci; if (level < 0) return 0; /* invalid (negative) level */ lua_lock(L); for (ci = L->ci; level > 0 && ci != &L->base_ci; ci = ci->previous) level--; if (level == 0 && ci != &L->base_ci) { /* level found? */ status = 1; ar->i_ci = ci; } else status = 0; /* no such level */ lua_unlock(L); return status; } static const char *upvalname (Proto *p, int uv) { TString *s = check_exp(uv < p->sizeupvalues, p->upvalues[uv].name); if (s == NULL) return "?"; else return getstr(s); } static const char *findvararg (CallInfo *ci, int n, StkId *pos) { int nparams = clLvalue(ci->func)->p->numparams; if (n >= ci->u.l.base - ci->func - nparams) return NULL; /* no such vararg */ else { *pos = ci->func + nparams + n; return "(*vararg)"; /* generic name for any vararg */ } } static const char *findlocal (lua_State *L, CallInfo *ci, int n, StkId *pos) { const char *name = NULL; StkId base; if (isLua(ci)) { if (n < 0) /* access to vararg values? */ return findvararg(ci, -n, pos); else { base = ci->u.l.base; name = luaF_getlocalname(ci_func(ci)->p, n, currentpc(ci)); } } else base = ci->func + 1; if (name == NULL) { /* no 'standard' name? */ StkId limit = (ci == L->ci) ? L->top : ci->next->func; if (limit - base >= n && n > 0) /* is 'n' inside 'ci' stack? */ name = "(*temporary)"; /* generic name for any valid slot */ else return NULL; /* no name */ } *pos = base + (n - 1); return name; } LUA_API const char *lua_getlocal (lua_State *L, const lua_Debug *ar, int n) { const char *name; lua_lock(L); if (ar == NULL) { /* information about non-active function? */ if (!isLfunction(L->top - 1)) /* not a Lua function? */ name = NULL; else /* consider live variables at function start (parameters) */ name = luaF_getlocalname(clLvalue(L->top - 1)->p, n, 0); } else { /* active function; get information through 'ar' */ StkId pos = 0; /* to avoid warnings */ name = findlocal(L, ar->i_ci, n, &pos); if (name) { setobj2s(L, L->top, pos); api_incr_top(L); } } lua_unlock(L); return name; } LUA_API const char *lua_setlocal (lua_State *L, const lua_Debug *ar, int n) { StkId pos = 0; /* to avoid warnings */ const char *name = findlocal(L, ar->i_ci, n, &pos); lua_lock(L); if (name) setobjs2s(L, pos, L->top - 1); L->top--; /* pop value */ lua_unlock(L); return name; } static void funcinfo (lua_Debug *ar, Closure *cl) { if (noLuaClosure(cl)) { ar->source = "=[C]"; ar->linedefined = -1; ar->lastlinedefined = -1; ar->what = "C"; } else { Proto *p = cl->l.p; ar->source = p->source ? getstr(p->source) : "=?"; ar->linedefined = p->linedefined; ar->lastlinedefined = p->lastlinedefined; ar->what = (ar->linedefined == 0) ? "main" : "Lua"; } luaO_chunkid(ar->short_src, ar->source, LUA_IDSIZE); } static void collectvalidlines (lua_State *L, Closure *f) { if (noLuaClosure(f)) { setnilvalue(L->top); incr_top(L); } else { int i; TValue v; int *lineinfo = f->l.p->lineinfo; Table *t = luaH_new(L); /* new table to store active lines */ sethvalue(L, L->top, t); /* push it on stack */ incr_top(L); setbvalue(&v, 1); /* boolean 'true' to be the value of all indices */ for (i = 0; i < f->l.p->sizelineinfo; i++) /* for all lines with code */ luaH_setint(L, t, lineinfo[i], &v); /* table[line] = true */ } } static int auxgetinfo (lua_State *L, const char *what, lua_Debug *ar, Closure *f, CallInfo *ci) { int status = 1; for (; *what; what++) { switch (*what) { case 'S': { funcinfo(ar, f); break; } case 'l': { ar->currentline = (ci && isLua(ci)) ? currentline(ci) : -1; break; } case 'u': { ar->nups = (f == NULL) ? 0 : f->c.nupvalues; if (noLuaClosure(f)) { ar->isvararg = 1; ar->nparams = 0; } else { ar->isvararg = f->l.p->is_vararg; ar->nparams = f->l.p->numparams; } break; } case 't': { ar->istailcall = (ci) ? ci->callstatus & CIST_TAIL : 0; break; } case 'n': { /* calling function is a known Lua function? */ if (ci && !(ci->callstatus & CIST_TAIL) && isLua(ci->previous)) ar->namewhat = getfuncname(L, ci->previous, &ar->name); else ar->namewhat = NULL; if (ar->namewhat == NULL) { ar->namewhat = ""; /* not found */ ar->name = NULL; } break; } case 'L': case 'f': /* handled by lua_getinfo */ break; default: status = 0; /* invalid option */ } } return status; } LUA_API int lua_getinfo (lua_State *L, const char *what, lua_Debug *ar) { int status; Closure *cl; CallInfo *ci; StkId func; lua_lock(L); if (*what == '>') { ci = NULL; func = L->top - 1; api_check(L, ttisfunction(func), "function expected"); what++; /* skip the '>' */ L->top--; /* pop function */ } else { ci = ar->i_ci; func = ci->func; lua_assert(ttisfunction(ci->func)); } cl = ttisclosure(func) ? clvalue(func) : NULL; status = auxgetinfo(L, what, ar, cl, ci); if (strchr(what, 'f')) { setobjs2s(L, L->top, func); incr_top(L); } if (strchr(what, 'L')) collectvalidlines(L, cl); lua_unlock(L); return status; } /* ** {====================================================== ** Symbolic Execution ** ======================================================= */ static const char *getobjname (Proto *p, int lastpc, int reg, const char **name); /* ** find a "name" for the RK value 'c' */ static void kname (Proto *p, int pc, int c, const char **name) { if (ISK(c)) { /* is 'c' a constant? */ TValue *kvalue = &p->k[INDEXK(c)]; if (ttisstring(kvalue)) { /* literal constant? */ *name = svalue(kvalue); /* it is its own name */ return; } /* else no reasonable name found */ } else { /* 'c' is a register */ const char *what = getobjname(p, pc, c, name); /* search for 'c' */ if (what && *what == 'c') { /* found a constant name? */ return; /* 'name' already filled */ } /* else no reasonable name found */ } *name = "?"; /* no reasonable name found */ } /* ** try to find last instruction before 'lastpc' that modified register 'reg' */ static int findsetreg (Proto *p, int lastpc, int reg) { int pc; int setreg = -1; /* keep last instruction that changed 'reg' */ for (pc = 0; pc < lastpc; pc++) { Instruction i = p->code[pc]; OpCode op = GET_OPCODE(i); int a = GETARG_A(i); switch (op) { case OP_LOADNIL: { int b = GETARG_B(i); if (a <= reg && reg <= a + b) /* set registers from 'a' to 'a+b' */ setreg = pc; break; } case OP_TFORCALL: { if (reg >= a + 2) setreg = pc; /* affect all regs above its base */ break; } case OP_CALL: case OP_TAILCALL: { if (reg >= a) setreg = pc; /* affect all registers above base */ break; } case OP_JMP: { int b = GETARG_sBx(i); int dest = pc + 1 + b; /* jump is forward and do not skip `lastpc'? */ if (pc < dest && dest <= lastpc) pc += b; /* do the jump */ break; } case OP_TEST: { if (reg == a) setreg = pc; /* jumped code can change 'a' */ break; } default: if (testAMode(op) && reg == a) /* any instruction that set A */ setreg = pc; break; } } return setreg; } static const char *getobjname (Proto *p, int lastpc, int reg, const char **name) { int pc; *name = luaF_getlocalname(p, reg + 1, lastpc); if (*name) /* is a local? */ return "local"; /* else try symbolic execution */ pc = findsetreg(p, lastpc, reg); if (pc != -1) { /* could find instruction? */ Instruction i = p->code[pc]; OpCode op = GET_OPCODE(i); switch (op) { case OP_MOVE: { int b = GETARG_B(i); /* move from 'b' to 'a' */ if (b < GETARG_A(i)) return getobjname(p, pc, b, name); /* get name for 'b' */ break; } case OP_GETTABUP: case OP_GETTABLE: { int k = GETARG_C(i); /* key index */ int t = GETARG_B(i); /* table index */ const char *vn = (op == OP_GETTABLE) /* name of indexed variable */ ? luaF_getlocalname(p, t + 1, pc) : upvalname(p, t); kname(p, pc, k, name); return (vn && strcmp(vn, LUA_ENV) == 0) ? "global" : "field"; } case OP_GETUPVAL: { *name = upvalname(p, GETARG_B(i)); return "upvalue"; } case OP_LOADK: case OP_LOADKX: { int b = (op == OP_LOADK) ? GETARG_Bx(i) : GETARG_Ax(p->code[pc + 1]); if (ttisstring(&p->k[b])) { *name = svalue(&p->k[b]); return "constant"; } break; } case OP_SELF: { int k = GETARG_C(i); /* key index */ kname(p, pc, k, name); return "method"; } default: break; /* go through to return NULL */ } } return NULL; /* could not find reasonable name */ } static const char *getfuncname (lua_State *L, CallInfo *ci, const char **name) { TMS tm; Proto *p = ci_func(ci)->p; /* calling function */ int pc = currentpc(ci); /* calling instruction index */ Instruction i = p->code[pc]; /* calling instruction */ switch (GET_OPCODE(i)) { case OP_CALL: case OP_TAILCALL: /* get function name */ return getobjname(p, pc, GETARG_A(i), name); case OP_TFORCALL: { /* for iterator */ *name = "for iterator"; return "for iterator"; } /* all other instructions can call only through metamethods */ case OP_SELF: case OP_GETTABUP: case OP_GETTABLE: tm = TM_INDEX; break; case OP_SETTABUP: case OP_SETTABLE: tm = TM_NEWINDEX; break; case OP_EQ: tm = TM_EQ; break; case OP_ADD: tm = TM_ADD; break; case OP_SUB: tm = TM_SUB; break; case OP_MUL: tm = TM_MUL; break; case OP_DIV: tm = TM_DIV; break; case OP_MOD: tm = TM_MOD; break; case OP_POW: tm = TM_POW; break; case OP_UNM: tm = TM_UNM; break; case OP_LEN: tm = TM_LEN; break; case OP_LT: tm = TM_LT; break; case OP_LE: tm = TM_LE; break; case OP_CONCAT: tm = TM_CONCAT; break; default: return NULL; /* else no useful name can be found */ } *name = getstr(G(L)->tmname[tm]); return "metamethod"; } /* }====================================================== */ /* ** only ANSI way to check whether a pointer points to an array ** (used only for error messages, so efficiency is not a big concern) */ static int isinstack (CallInfo *ci, const TValue *o) { StkId p; for (p = ci->u.l.base; p < ci->top; p++) if (o == p) return 1; return 0; } static const char *getupvalname (CallInfo *ci, const TValue *o, const char **name) { LClosure *c = ci_func(ci); int i; for (i = 0; i < c->nupvalues; i++) { if (c->upvals[i]->v == o) { *name = upvalname(c->p, i); return "upvalue"; } } return NULL; } l_noret luaG_typeerror (lua_State *L, const TValue *o, const char *op) { CallInfo *ci = L->ci; const char *name = NULL; const char *t = objtypename(o); const char *kind = NULL; if (isLua(ci)) { kind = getupvalname(ci, o, &name); /* check whether 'o' is an upvalue */ if (!kind && isinstack(ci, o)) /* no? try a register */ kind = getobjname(ci_func(ci)->p, currentpc(ci), cast_int(o - ci->u.l.base), &name); } if (kind) luaG_runerror(L, "attempt to %s %s " LUA_QS " (a %s value)", op, kind, name, t); else luaG_runerror(L, "attempt to %s a %s value", op, t); } l_noret luaG_concaterror (lua_State *L, StkId p1, StkId p2) { if (ttisstring(p1) || ttisnumber(p1)) p1 = p2; lua_assert(!ttisstring(p1) && !ttisnumber(p2)); luaG_typeerror(L, p1, "concatenate"); } l_noret luaG_aritherror (lua_State *L, const TValue *p1, const TValue *p2) { TValue temp; if (luaV_tonumber(p1, &temp) == NULL) p2 = p1; /* first operand is wrong */ luaG_typeerror(L, p2, "perform arithmetic on"); } l_noret luaG_ordererror (lua_State *L, const TValue *p1, const TValue *p2) { const char *t1 = objtypename(p1); const char *t2 = objtypename(p2); if (t1 == t2) luaG_runerror(L, "attempt to compare two %s values", t1); else luaG_runerror(L, "attempt to compare %s with %s", t1, t2); } static void addinfo (lua_State *L, const char *msg) { CallInfo *ci = L->ci; if (isLua(ci)) { /* is Lua code? */ char buff[LUA_IDSIZE]; /* add file:line information */ int line = currentline(ci); TString *src = ci_func(ci)->p->source; if (src) luaO_chunkid(buff, getstr(src), LUA_IDSIZE); else { /* no source available; use "?" instead */ buff[0] = '?'; buff[1] = '\0'; } luaO_pushfstring(L, "%s:%d: %s", buff, line, msg); } } l_noret luaG_errormsg (lua_State *L) { if (L->errfunc != 0) { /* is there an error handling function? */ StkId errfunc = restorestack(L, L->errfunc); if (!ttisfunction(errfunc)) luaD_throw(L, LUA_ERRERR); setobjs2s(L, L->top, L->top - 1); /* move argument */ setobjs2s(L, L->top - 1, errfunc); /* push function */ incr_top(L); luaD_call(L, L->top - 2, 1, 0); /* call it */ } luaD_throw(L, LUA_ERRRUN); } l_noret luaG_runerror (lua_State *L, const char *fmt, ...) { va_list argp; va_start(argp, fmt); addinfo(L, luaO_pushvfstring(L, fmt, argp)); va_end(argp); luaG_errormsg(L); } fs-uae-2.2.3+dfsg/libfsemu/src/lua/lvm.c0000644000175000017500000007027712162366654020211 0ustar glaubitzglaubitz/* ** $Id: lvm.c,v 2.152 2012/06/08 15:14:04 roberto Exp $ ** Lua virtual machine ** See Copyright Notice in lua.h */ #include #include #include #define lvm_c #define LUA_CORE #include "lua.h" #include "ldebug.h" #include "ldo.h" #include "lfunc.h" #include "lgc.h" #include "lobject.h" #include "lopcodes.h" #include "lstate.h" #include "lstring.h" #include "ltable.h" #include "ltm.h" #include "lvm.h" /* limit for table tag-method chains (to avoid loops) */ #define MAXTAGLOOP 100 const TValue *luaV_tonumber (const TValue *obj, TValue *n) { lua_Number num; if (ttisnumber(obj)) return obj; if (ttisstring(obj) && luaO_str2d(svalue(obj), tsvalue(obj)->len, &num)) { setnvalue(n, num); return n; } else return NULL; } int luaV_tostring (lua_State *L, StkId obj) { if (!ttisnumber(obj)) return 0; else { char s[LUAI_MAXNUMBER2STR]; lua_Number n = nvalue(obj); int l = lua_number2str(s, n); setsvalue2s(L, obj, luaS_newlstr(L, s, l)); return 1; } } static void traceexec (lua_State *L) { CallInfo *ci = L->ci; lu_byte mask = L->hookmask; int counthook = ((mask & LUA_MASKCOUNT) && L->hookcount == 0); if (counthook) resethookcount(L); /* reset count */ if (ci->callstatus & CIST_HOOKYIELD) { /* called hook last time? */ ci->callstatus &= ~CIST_HOOKYIELD; /* erase mark */ return; /* do not call hook again (VM yielded, so it did not move) */ } if (counthook) luaD_hook(L, LUA_HOOKCOUNT, -1); /* call count hook */ if (mask & LUA_MASKLINE) { Proto *p = ci_func(ci)->p; int npc = pcRel(ci->u.l.savedpc, p); int newline = getfuncline(p, npc); if (npc == 0 || /* call linehook when enter a new function, */ ci->u.l.savedpc <= L->oldpc || /* when jump back (loop), or when */ newline != getfuncline(p, pcRel(L->oldpc, p))) /* enter a new line */ luaD_hook(L, LUA_HOOKLINE, newline); /* call line hook */ } L->oldpc = ci->u.l.savedpc; if (L->status == LUA_YIELD) { /* did hook yield? */ if (counthook) L->hookcount = 1; /* undo decrement to zero */ ci->u.l.savedpc--; /* undo increment (resume will increment it again) */ ci->callstatus |= CIST_HOOKYIELD; /* mark that it yieled */ ci->func = L->top - 1; /* protect stack below results */ luaD_throw(L, LUA_YIELD); } } static void callTM (lua_State *L, const TValue *f, const TValue *p1, const TValue *p2, TValue *p3, int hasres) { ptrdiff_t result = savestack(L, p3); setobj2s(L, L->top++, f); /* push function */ setobj2s(L, L->top++, p1); /* 1st argument */ setobj2s(L, L->top++, p2); /* 2nd argument */ if (!hasres) /* no result? 'p3' is third argument */ setobj2s(L, L->top++, p3); /* 3rd argument */ luaD_checkstack(L, 0); /* metamethod may yield only when called from Lua code */ luaD_call(L, L->top - (4 - hasres), hasres, isLua(L->ci)); if (hasres) { /* if has result, move it to its place */ p3 = restorestack(L, result); setobjs2s(L, p3, --L->top); } } void luaV_gettable (lua_State *L, const TValue *t, TValue *key, StkId val) { int loop; for (loop = 0; loop < MAXTAGLOOP; loop++) { const TValue *tm; if (ttistable(t)) { /* `t' is a table? */ Table *h = hvalue(t); const TValue *res = luaH_get(h, key); /* do a primitive get */ if (!ttisnil(res) || /* result is not nil? */ (tm = fasttm(L, h->metatable, TM_INDEX)) == NULL) { /* or no TM? */ setobj2s(L, val, res); return; } /* else will try the tag method */ } else if (ttisnil(tm = luaT_gettmbyobj(L, t, TM_INDEX))) luaG_typeerror(L, t, "index"); if (ttisfunction(tm)) { callTM(L, tm, t, key, val, 1); return; } t = tm; /* else repeat with 'tm' */ } luaG_runerror(L, "loop in gettable"); } void luaV_settable (lua_State *L, const TValue *t, TValue *key, StkId val) { int loop; for (loop = 0; loop < MAXTAGLOOP; loop++) { const TValue *tm; if (ttistable(t)) { /* `t' is a table? */ Table *h = hvalue(t); TValue *oldval = cast(TValue *, luaH_get(h, key)); /* if previous value is not nil, there must be a previous entry in the table; moreover, a metamethod has no relevance */ if (!ttisnil(oldval) || /* previous value is nil; must check the metamethod */ ((tm = fasttm(L, h->metatable, TM_NEWINDEX)) == NULL && /* no metamethod; is there a previous entry in the table? */ (oldval != luaO_nilobject || /* no previous entry; must create one. (The next test is always true; we only need the assignment.) */ (oldval = luaH_newkey(L, h, key), 1)))) { /* no metamethod and (now) there is an entry with given key */ setobj2t(L, oldval, val); /* assign new value to that entry */ invalidateTMcache(h); luaC_barrierback(L, obj2gco(h), val); return; } /* else will try the metamethod */ } else /* not a table; check metamethod */ if (ttisnil(tm = luaT_gettmbyobj(L, t, TM_NEWINDEX))) luaG_typeerror(L, t, "index"); /* there is a metamethod */ if (ttisfunction(tm)) { callTM(L, tm, t, key, val, 0); return; } t = tm; /* else repeat with 'tm' */ } luaG_runerror(L, "loop in settable"); } static int call_binTM (lua_State *L, const TValue *p1, const TValue *p2, StkId res, TMS event) { const TValue *tm = luaT_gettmbyobj(L, p1, event); /* try first operand */ if (ttisnil(tm)) tm = luaT_gettmbyobj(L, p2, event); /* try second operand */ if (ttisnil(tm)) return 0; callTM(L, tm, p1, p2, res, 1); return 1; } static const TValue *get_equalTM (lua_State *L, Table *mt1, Table *mt2, TMS event) { const TValue *tm1 = fasttm(L, mt1, event); const TValue *tm2; if (tm1 == NULL) return NULL; /* no metamethod */ if (mt1 == mt2) return tm1; /* same metatables => same metamethods */ tm2 = fasttm(L, mt2, event); if (tm2 == NULL) return NULL; /* no metamethod */ if (luaV_rawequalobj(tm1, tm2)) /* same metamethods? */ return tm1; return NULL; } static int call_orderTM (lua_State *L, const TValue *p1, const TValue *p2, TMS event) { if (!call_binTM(L, p1, p2, L->top, event)) return -1; /* no metamethod */ else return !l_isfalse(L->top); } static int l_strcmp (const TString *ls, const TString *rs) { const char *l = getstr(ls); size_t ll = ls->tsv.len; const char *r = getstr(rs); size_t lr = rs->tsv.len; for (;;) { int temp = strcoll(l, r); if (temp != 0) return temp; else { /* strings are equal up to a `\0' */ size_t len = strlen(l); /* index of first `\0' in both strings */ if (len == lr) /* r is finished? */ return (len == ll) ? 0 : 1; else if (len == ll) /* l is finished? */ return -1; /* l is smaller than r (because r is not finished) */ /* both strings longer than `len'; go on comparing (after the `\0') */ len++; l += len; ll -= len; r += len; lr -= len; } } } int luaV_lessthan (lua_State *L, const TValue *l, const TValue *r) { int res; if (ttisnumber(l) && ttisnumber(r)) return luai_numlt(L, nvalue(l), nvalue(r)); else if (ttisstring(l) && ttisstring(r)) return l_strcmp(rawtsvalue(l), rawtsvalue(r)) < 0; else if ((res = call_orderTM(L, l, r, TM_LT)) < 0) luaG_ordererror(L, l, r); return res; } int luaV_lessequal (lua_State *L, const TValue *l, const TValue *r) { int res; if (ttisnumber(l) && ttisnumber(r)) return luai_numle(L, nvalue(l), nvalue(r)); else if (ttisstring(l) && ttisstring(r)) return l_strcmp(rawtsvalue(l), rawtsvalue(r)) <= 0; else if ((res = call_orderTM(L, l, r, TM_LE)) >= 0) /* first try `le' */ return res; else if ((res = call_orderTM(L, r, l, TM_LT)) < 0) /* else try `lt' */ luaG_ordererror(L, l, r); return !res; } /* ** equality of Lua values. L == NULL means raw equality (no metamethods) */ int luaV_equalobj_ (lua_State *L, const TValue *t1, const TValue *t2) { const TValue *tm; lua_assert(ttisequal(t1, t2)); switch (ttype(t1)) { case LUA_TNIL: return 1; case LUA_TNUMBER: return luai_numeq(nvalue(t1), nvalue(t2)); case LUA_TBOOLEAN: return bvalue(t1) == bvalue(t2); /* true must be 1 !! */ case LUA_TLIGHTUSERDATA: return pvalue(t1) == pvalue(t2); case LUA_TLCF: return fvalue(t1) == fvalue(t2); case LUA_TSHRSTR: return eqshrstr(rawtsvalue(t1), rawtsvalue(t2)); case LUA_TLNGSTR: return luaS_eqlngstr(rawtsvalue(t1), rawtsvalue(t2)); case LUA_TUSERDATA: { if (uvalue(t1) == uvalue(t2)) return 1; else if (L == NULL) return 0; tm = get_equalTM(L, uvalue(t1)->metatable, uvalue(t2)->metatable, TM_EQ); break; /* will try TM */ } case LUA_TTABLE: { if (hvalue(t1) == hvalue(t2)) return 1; else if (L == NULL) return 0; tm = get_equalTM(L, hvalue(t1)->metatable, hvalue(t2)->metatable, TM_EQ); break; /* will try TM */ } default: lua_assert(iscollectable(t1)); return gcvalue(t1) == gcvalue(t2); } if (tm == NULL) return 0; /* no TM? */ callTM(L, tm, t1, t2, L->top, 1); /* call TM */ return !l_isfalse(L->top); } void luaV_concat (lua_State *L, int total) { lua_assert(total >= 2); do { StkId top = L->top; int n = 2; /* number of elements handled in this pass (at least 2) */ if (!(ttisstring(top-2) || ttisnumber(top-2)) || !tostring(L, top-1)) { if (!call_binTM(L, top-2, top-1, top-2, TM_CONCAT)) luaG_concaterror(L, top-2, top-1); } else if (tsvalue(top-1)->len == 0) /* second operand is empty? */ (void)tostring(L, top - 2); /* result is first operand */ else if (ttisstring(top-2) && tsvalue(top-2)->len == 0) { setobjs2s(L, top - 2, top - 1); /* result is second op. */ } else { /* at least two non-empty string values; get as many as possible */ size_t tl = tsvalue(top-1)->len; char *buffer; int i; /* collect total length */ for (i = 1; i < total && tostring(L, top-i-1); i++) { size_t l = tsvalue(top-i-1)->len; if (l >= (MAX_SIZET/sizeof(char)) - tl) luaG_runerror(L, "string length overflow"); tl += l; } buffer = luaZ_openspace(L, &G(L)->buff, tl); tl = 0; n = i; do { /* concat all strings */ size_t l = tsvalue(top-i)->len; memcpy(buffer+tl, svalue(top-i), l * sizeof(char)); tl += l; } while (--i > 0); setsvalue2s(L, top-n, luaS_newlstr(L, buffer, tl)); } total -= n-1; /* got 'n' strings to create 1 new */ L->top -= n-1; /* popped 'n' strings and pushed one */ } while (total > 1); /* repeat until only 1 result left */ } void luaV_objlen (lua_State *L, StkId ra, const TValue *rb) { const TValue *tm; switch (ttypenv(rb)) { case LUA_TTABLE: { Table *h = hvalue(rb); tm = fasttm(L, h->metatable, TM_LEN); if (tm) break; /* metamethod? break switch to call it */ setnvalue(ra, cast_num(luaH_getn(h))); /* else primitive len */ return; } case LUA_TSTRING: { setnvalue(ra, cast_num(tsvalue(rb)->len)); return; } default: { /* try metamethod */ tm = luaT_gettmbyobj(L, rb, TM_LEN); if (ttisnil(tm)) /* no metamethod? */ luaG_typeerror(L, rb, "get length of"); break; } } callTM(L, tm, rb, rb, ra, 1); } void luaV_arith (lua_State *L, StkId ra, const TValue *rb, const TValue *rc, TMS op) { TValue tempb, tempc; const TValue *b, *c; if ((b = luaV_tonumber(rb, &tempb)) != NULL && (c = luaV_tonumber(rc, &tempc)) != NULL) { lua_Number res = luaO_arith(op - TM_ADD + LUA_OPADD, nvalue(b), nvalue(c)); setnvalue(ra, res); } else if (!call_binTM(L, rb, rc, ra, op)) luaG_aritherror(L, rb, rc); } /* ** check whether cached closure in prototype 'p' may be reused, that is, ** whether there is a cached closure with the same upvalues needed by ** new closure to be created. */ static Closure *getcached (Proto *p, UpVal **encup, StkId base) { Closure *c = p->cache; if (c != NULL) { /* is there a cached closure? */ int nup = p->sizeupvalues; Upvaldesc *uv = p->upvalues; int i; for (i = 0; i < nup; i++) { /* check whether it has right upvalues */ TValue *v = uv[i].instack ? base + uv[i].idx : encup[uv[i].idx]->v; if (c->l.upvals[i]->v != v) return NULL; /* wrong upvalue; cannot reuse closure */ } } return c; /* return cached closure (or NULL if no cached closure) */ } /* ** create a new Lua closure, push it in the stack, and initialize ** its upvalues. Note that the call to 'luaC_barrierproto' must come ** before the assignment to 'p->cache', as the function needs the ** original value of that field. */ static void pushclosure (lua_State *L, Proto *p, UpVal **encup, StkId base, StkId ra) { int nup = p->sizeupvalues; Upvaldesc *uv = p->upvalues; int i; Closure *ncl = luaF_newLclosure(L, nup); ncl->l.p = p; setclLvalue(L, ra, ncl); /* anchor new closure in stack */ for (i = 0; i < nup; i++) { /* fill in its upvalues */ if (uv[i].instack) /* upvalue refers to local variable? */ ncl->l.upvals[i] = luaF_findupval(L, base + uv[i].idx); else /* get upvalue from enclosing function */ ncl->l.upvals[i] = encup[uv[i].idx]; } luaC_barrierproto(L, p, ncl); p->cache = ncl; /* save it on cache for reuse */ } /* ** finish execution of an opcode interrupted by an yield */ void luaV_finishOp (lua_State *L) { CallInfo *ci = L->ci; StkId base = ci->u.l.base; Instruction inst = *(ci->u.l.savedpc - 1); /* interrupted instruction */ OpCode op = GET_OPCODE(inst); switch (op) { /* finish its execution */ case OP_ADD: case OP_SUB: case OP_MUL: case OP_DIV: case OP_MOD: case OP_POW: case OP_UNM: case OP_LEN: case OP_GETTABUP: case OP_GETTABLE: case OP_SELF: { setobjs2s(L, base + GETARG_A(inst), --L->top); break; } case OP_LE: case OP_LT: case OP_EQ: { int res = !l_isfalse(L->top - 1); L->top--; /* metamethod should not be called when operand is K */ lua_assert(!ISK(GETARG_B(inst))); if (op == OP_LE && /* "<=" using "<" instead? */ ttisnil(luaT_gettmbyobj(L, base + GETARG_B(inst), TM_LE))) res = !res; /* invert result */ lua_assert(GET_OPCODE(*ci->u.l.savedpc) == OP_JMP); if (res != GETARG_A(inst)) /* condition failed? */ ci->u.l.savedpc++; /* skip jump instruction */ break; } case OP_CONCAT: { StkId top = L->top - 1; /* top when 'call_binTM' was called */ int b = GETARG_B(inst); /* first element to concatenate */ int total = cast_int(top - 1 - (base + b)); /* yet to concatenate */ setobj2s(L, top - 2, top); /* put TM result in proper position */ if (total > 1) { /* are there elements to concat? */ L->top = top - 1; /* top is one after last element (at top-2) */ luaV_concat(L, total); /* concat them (may yield again) */ } /* move final result to final position */ setobj2s(L, ci->u.l.base + GETARG_A(inst), L->top - 1); L->top = ci->top; /* restore top */ break; } case OP_TFORCALL: { lua_assert(GET_OPCODE(*ci->u.l.savedpc) == OP_TFORLOOP); L->top = ci->top; /* correct top */ break; } case OP_CALL: { if (GETARG_C(inst) - 1 >= 0) /* nresults >= 0? */ L->top = ci->top; /* adjust results */ break; } case OP_TAILCALL: case OP_SETTABUP: case OP_SETTABLE: break; default: lua_assert(0); } } /* ** some macros for common tasks in `luaV_execute' */ #if !defined luai_runtimecheck #define luai_runtimecheck(L, c) /* void */ #endif #define RA(i) (base+GETARG_A(i)) /* to be used after possible stack reallocation */ #define RB(i) check_exp(getBMode(GET_OPCODE(i)) == OpArgR, base+GETARG_B(i)) #define RC(i) check_exp(getCMode(GET_OPCODE(i)) == OpArgR, base+GETARG_C(i)) #define RKB(i) check_exp(getBMode(GET_OPCODE(i)) == OpArgK, \ ISK(GETARG_B(i)) ? k+INDEXK(GETARG_B(i)) : base+GETARG_B(i)) #define RKC(i) check_exp(getCMode(GET_OPCODE(i)) == OpArgK, \ ISK(GETARG_C(i)) ? k+INDEXK(GETARG_C(i)) : base+GETARG_C(i)) #define KBx(i) \ (k + (GETARG_Bx(i) != 0 ? GETARG_Bx(i) - 1 : GETARG_Ax(*ci->u.l.savedpc++))) /* execute a jump instruction */ #define dojump(ci,i,e) \ { int a = GETARG_A(i); \ if (a > 0) luaF_close(L, ci->u.l.base + a - 1); \ ci->u.l.savedpc += GETARG_sBx(i) + e; } /* for test instructions, execute the jump instruction that follows it */ #define donextjump(ci) { i = *ci->u.l.savedpc; dojump(ci, i, 1); } #define Protect(x) { {x;}; base = ci->u.l.base; } #define checkGC(L,c) \ Protect( luaC_condGC(L,{L->top = (c); /* limit of live values */ \ luaC_step(L); \ L->top = ci->top;}) /* restore top */ \ luai_threadyield(L); ) #define arith_op(op,tm) { \ TValue *rb = RKB(i); \ TValue *rc = RKC(i); \ if (ttisnumber(rb) && ttisnumber(rc)) { \ lua_Number nb = nvalue(rb), nc = nvalue(rc); \ setnvalue(ra, op(L, nb, nc)); \ } \ else { Protect(luaV_arith(L, ra, rb, rc, tm)); } } #define vmdispatch(o) switch(o) #define vmcase(l,b) case l: {b} break; #define vmcasenb(l,b) case l: {b} /* nb = no break */ void luaV_execute (lua_State *L) { CallInfo *ci = L->ci; LClosure *cl; TValue *k; StkId base; newframe: /* reentry point when frame changes (call/return) */ lua_assert(ci == L->ci); cl = clLvalue(ci->func); k = cl->p->k; base = ci->u.l.base; /* main loop of interpreter */ for (;;) { Instruction i = *(ci->u.l.savedpc++); StkId ra; if ((L->hookmask & (LUA_MASKLINE | LUA_MASKCOUNT)) && (--L->hookcount == 0 || L->hookmask & LUA_MASKLINE)) { Protect(traceexec(L)); } /* WARNING: several calls may realloc the stack and invalidate `ra' */ ra = RA(i); lua_assert(base == ci->u.l.base); lua_assert(base <= L->top && L->top < L->stack + L->stacksize); vmdispatch (GET_OPCODE(i)) { vmcase(OP_MOVE, setobjs2s(L, ra, RB(i)); ) vmcase(OP_LOADK, TValue *rb = k + GETARG_Bx(i); setobj2s(L, ra, rb); ) vmcase(OP_LOADKX, TValue *rb; lua_assert(GET_OPCODE(*ci->u.l.savedpc) == OP_EXTRAARG); rb = k + GETARG_Ax(*ci->u.l.savedpc++); setobj2s(L, ra, rb); ) vmcase(OP_LOADBOOL, setbvalue(ra, GETARG_B(i)); if (GETARG_C(i)) ci->u.l.savedpc++; /* skip next instruction (if C) */ ) vmcase(OP_LOADNIL, int b = GETARG_B(i); do { setnilvalue(ra++); } while (b--); ) vmcase(OP_GETUPVAL, int b = GETARG_B(i); setobj2s(L, ra, cl->upvals[b]->v); ) vmcase(OP_GETTABUP, int b = GETARG_B(i); Protect(luaV_gettable(L, cl->upvals[b]->v, RKC(i), ra)); ) vmcase(OP_GETTABLE, Protect(luaV_gettable(L, RB(i), RKC(i), ra)); ) vmcase(OP_SETTABUP, int a = GETARG_A(i); Protect(luaV_settable(L, cl->upvals[a]->v, RKB(i), RKC(i))); ) vmcase(OP_SETUPVAL, UpVal *uv = cl->upvals[GETARG_B(i)]; setobj(L, uv->v, ra); luaC_barrier(L, uv, ra); ) vmcase(OP_SETTABLE, Protect(luaV_settable(L, ra, RKB(i), RKC(i))); ) vmcase(OP_NEWTABLE, int b = GETARG_B(i); int c = GETARG_C(i); Table *t = luaH_new(L); sethvalue(L, ra, t); if (b != 0 || c != 0) luaH_resize(L, t, luaO_fb2int(b), luaO_fb2int(c)); checkGC(L, ra + 1); ) vmcase(OP_SELF, StkId rb = RB(i); setobjs2s(L, ra+1, rb); Protect(luaV_gettable(L, rb, RKC(i), ra)); ) vmcase(OP_ADD, arith_op(luai_numadd, TM_ADD); ) vmcase(OP_SUB, arith_op(luai_numsub, TM_SUB); ) vmcase(OP_MUL, arith_op(luai_nummul, TM_MUL); ) vmcase(OP_DIV, arith_op(luai_numdiv, TM_DIV); ) vmcase(OP_MOD, arith_op(luai_nummod, TM_MOD); ) vmcase(OP_POW, arith_op(luai_numpow, TM_POW); ) vmcase(OP_UNM, TValue *rb = RB(i); if (ttisnumber(rb)) { lua_Number nb = nvalue(rb); setnvalue(ra, luai_numunm(L, nb)); } else { Protect(luaV_arith(L, ra, rb, rb, TM_UNM)); } ) vmcase(OP_NOT, TValue *rb = RB(i); int res = l_isfalse(rb); /* next assignment may change this value */ setbvalue(ra, res); ) vmcase(OP_LEN, Protect(luaV_objlen(L, ra, RB(i))); ) vmcase(OP_CONCAT, int b = GETARG_B(i); int c = GETARG_C(i); StkId rb; L->top = base + c + 1; /* mark the end of concat operands */ Protect(luaV_concat(L, c - b + 1)); ra = RA(i); /* 'luav_concat' may invoke TMs and move the stack */ rb = b + base; setobjs2s(L, ra, rb); checkGC(L, (ra >= rb ? ra + 1 : rb)); L->top = ci->top; /* restore top */ ) vmcase(OP_JMP, dojump(ci, i, 0); ) vmcase(OP_EQ, TValue *rb = RKB(i); TValue *rc = RKC(i); Protect( if (cast_int(equalobj(L, rb, rc)) != GETARG_A(i)) ci->u.l.savedpc++; else donextjump(ci); ) ) vmcase(OP_LT, Protect( if (luaV_lessthan(L, RKB(i), RKC(i)) != GETARG_A(i)) ci->u.l.savedpc++; else donextjump(ci); ) ) vmcase(OP_LE, Protect( if (luaV_lessequal(L, RKB(i), RKC(i)) != GETARG_A(i)) ci->u.l.savedpc++; else donextjump(ci); ) ) vmcase(OP_TEST, if (GETARG_C(i) ? l_isfalse(ra) : !l_isfalse(ra)) ci->u.l.savedpc++; else donextjump(ci); ) vmcase(OP_TESTSET, TValue *rb = RB(i); if (GETARG_C(i) ? l_isfalse(rb) : !l_isfalse(rb)) ci->u.l.savedpc++; else { setobjs2s(L, ra, rb); donextjump(ci); } ) vmcase(OP_CALL, int b = GETARG_B(i); int nresults = GETARG_C(i) - 1; if (b != 0) L->top = ra+b; /* else previous instruction set top */ if (luaD_precall(L, ra, nresults)) { /* C function? */ if (nresults >= 0) L->top = ci->top; /* adjust results */ base = ci->u.l.base; } else { /* Lua function */ ci = L->ci; ci->callstatus |= CIST_REENTRY; goto newframe; /* restart luaV_execute over new Lua function */ } ) vmcase(OP_TAILCALL, int b = GETARG_B(i); if (b != 0) L->top = ra+b; /* else previous instruction set top */ lua_assert(GETARG_C(i) - 1 == LUA_MULTRET); if (luaD_precall(L, ra, LUA_MULTRET)) /* C function? */ base = ci->u.l.base; else { /* tail call: put called frame (n) in place of caller one (o) */ CallInfo *nci = L->ci; /* called frame */ CallInfo *oci = nci->previous; /* caller frame */ StkId nfunc = nci->func; /* called function */ StkId ofunc = oci->func; /* caller function */ /* last stack slot filled by 'precall' */ StkId lim = nci->u.l.base + getproto(nfunc)->numparams; int aux; /* close all upvalues from previous call */ if (cl->p->sizep > 0) luaF_close(L, oci->u.l.base); /* move new frame into old one */ for (aux = 0; nfunc + aux < lim; aux++) setobjs2s(L, ofunc + aux, nfunc + aux); oci->u.l.base = ofunc + (nci->u.l.base - nfunc); /* correct base */ oci->top = L->top = ofunc + (L->top - nfunc); /* correct top */ oci->u.l.savedpc = nci->u.l.savedpc; oci->callstatus |= CIST_TAIL; /* function was tail called */ ci = L->ci = oci; /* remove new frame */ lua_assert(L->top == oci->u.l.base + getproto(ofunc)->maxstacksize); goto newframe; /* restart luaV_execute over new Lua function */ } ) vmcasenb(OP_RETURN, int b = GETARG_B(i); if (b != 0) L->top = ra+b-1; if (cl->p->sizep > 0) luaF_close(L, base); b = luaD_poscall(L, ra); if (!(ci->callstatus & CIST_REENTRY)) /* 'ci' still the called one */ return; /* external invocation: return */ else { /* invocation via reentry: continue execution */ ci = L->ci; if (b) L->top = ci->top; lua_assert(isLua(ci)); lua_assert(GET_OPCODE(*((ci)->u.l.savedpc - 1)) == OP_CALL); goto newframe; /* restart luaV_execute over new Lua function */ } ) vmcase(OP_FORLOOP, lua_Number step = nvalue(ra+2); lua_Number idx = luai_numadd(L, nvalue(ra), step); /* increment index */ lua_Number limit = nvalue(ra+1); if (luai_numlt(L, 0, step) ? luai_numle(L, idx, limit) : luai_numle(L, limit, idx)) { ci->u.l.savedpc += GETARG_sBx(i); /* jump back */ setnvalue(ra, idx); /* update internal index... */ setnvalue(ra+3, idx); /* ...and external index */ } ) vmcase(OP_FORPREP, const TValue *init = ra; const TValue *plimit = ra+1; const TValue *pstep = ra+2; if (!tonumber(init, ra)) luaG_runerror(L, LUA_QL("for") " initial value must be a number"); else if (!tonumber(plimit, ra+1)) luaG_runerror(L, LUA_QL("for") " limit must be a number"); else if (!tonumber(pstep, ra+2)) luaG_runerror(L, LUA_QL("for") " step must be a number"); setnvalue(ra, luai_numsub(L, nvalue(ra), nvalue(pstep))); ci->u.l.savedpc += GETARG_sBx(i); ) vmcasenb(OP_TFORCALL, StkId cb = ra + 3; /* call base */ setobjs2s(L, cb+2, ra+2); setobjs2s(L, cb+1, ra+1); setobjs2s(L, cb, ra); L->top = cb + 3; /* func. + 2 args (state and index) */ Protect(luaD_call(L, cb, GETARG_C(i), 1)); L->top = ci->top; i = *(ci->u.l.savedpc++); /* go to next instruction */ ra = RA(i); lua_assert(GET_OPCODE(i) == OP_TFORLOOP); goto l_tforloop; ) vmcase(OP_TFORLOOP, l_tforloop: if (!ttisnil(ra + 1)) { /* continue loop? */ setobjs2s(L, ra, ra + 1); /* save control variable */ ci->u.l.savedpc += GETARG_sBx(i); /* jump back */ } ) vmcase(OP_SETLIST, int n = GETARG_B(i); int c = GETARG_C(i); int last; Table *h; if (n == 0) n = cast_int(L->top - ra) - 1; if (c == 0) { lua_assert(GET_OPCODE(*ci->u.l.savedpc) == OP_EXTRAARG); c = GETARG_Ax(*ci->u.l.savedpc++); } luai_runtimecheck(L, ttistable(ra)); h = hvalue(ra); last = ((c-1)*LFIELDS_PER_FLUSH) + n; if (last > h->sizearray) /* needs more space? */ luaH_resizearray(L, h, last); /* pre-allocate it at once */ for (; n > 0; n--) { TValue *val = ra+n; luaH_setint(L, h, last--, val); luaC_barrierback(L, obj2gco(h), val); } L->top = ci->top; /* correct top (in case of previous open call) */ ) vmcase(OP_CLOSURE, Proto *p = cl->p->p[GETARG_Bx(i)]; Closure *ncl = getcached(p, cl->upvals, base); /* cached closure */ if (ncl == NULL) /* no match? */ pushclosure(L, p, cl->upvals, base, ra); /* create a new one */ else setclLvalue(L, ra, ncl); /* push cashed closure */ checkGC(L, ra + 1); ) vmcase(OP_VARARG, int b = GETARG_B(i) - 1; int j; int n = cast_int(base - ci->func) - cl->p->numparams - 1; if (b < 0) { /* B == 0? */ b = n; /* get all var. arguments */ Protect(luaD_checkstack(L, n)); ra = RA(i); /* previous call may change the stack */ L->top = ra + n; } for (j = 0; j < b; j++) { if (j < n) { setobjs2s(L, ra + j, base - n + j); } else { setnilvalue(ra + j); } } ) vmcase(OP_EXTRAARG, lua_assert(0); ) } } } fs-uae-2.2.3+dfsg/libfsemu/src/lua/lparser.c0000644000175000017500000013134412162366654021054 0ustar glaubitzglaubitz/* ** $Id: lparser.c,v 2.128 2012/05/20 14:51:23 roberto Exp $ ** Lua Parser ** See Copyright Notice in lua.h */ #include #define lparser_c #define LUA_CORE #include "lua.h" #include "lcode.h" #include "ldebug.h" #include "ldo.h" #include "lfunc.h" #include "llex.h" #include "lmem.h" #include "lobject.h" #include "lopcodes.h" #include "lparser.h" #include "lstate.h" #include "lstring.h" #include "ltable.h" /* maximum number of local variables per function (must be smaller than 250, due to the bytecode format) */ #define MAXVARS 200 #define hasmultret(k) ((k) == VCALL || (k) == VVARARG) /* ** nodes for block list (list of active blocks) */ typedef struct BlockCnt { struct BlockCnt *previous; /* chain */ short firstlabel; /* index of first label in this block */ short firstgoto; /* index of first pending goto in this block */ lu_byte nactvar; /* # active locals outside the block */ lu_byte upval; /* true if some variable in the block is an upvalue */ lu_byte isloop; /* true if `block' is a loop */ } BlockCnt; /* ** prototypes for recursive non-terminal functions */ static void statement (LexState *ls); static void expr (LexState *ls, expdesc *v); static void anchor_token (LexState *ls) { /* last token from outer function must be EOS */ lua_assert(ls->fs != NULL || ls->t.token == TK_EOS); if (ls->t.token == TK_NAME || ls->t.token == TK_STRING) { TString *ts = ls->t.seminfo.ts; luaX_newstring(ls, getstr(ts), ts->tsv.len); } } /* semantic error */ static l_noret semerror (LexState *ls, const char *msg) { ls->t.token = 0; /* remove 'near to' from final message */ luaX_syntaxerror(ls, msg); } static l_noret error_expected (LexState *ls, int token) { luaX_syntaxerror(ls, luaO_pushfstring(ls->L, "%s expected", luaX_token2str(ls, token))); } static l_noret errorlimit (FuncState *fs, int limit, const char *what) { lua_State *L = fs->ls->L; const char *msg; int line = fs->f->linedefined; const char *where = (line == 0) ? "main function" : luaO_pushfstring(L, "function at line %d", line); msg = luaO_pushfstring(L, "too many %s (limit is %d) in %s", what, limit, where); luaX_syntaxerror(fs->ls, msg); } static void checklimit (FuncState *fs, int v, int l, const char *what) { if (v > l) errorlimit(fs, l, what); } static int testnext (LexState *ls, int c) { if (ls->t.token == c) { luaX_next(ls); return 1; } else return 0; } static void check (LexState *ls, int c) { if (ls->t.token != c) error_expected(ls, c); } static void checknext (LexState *ls, int c) { check(ls, c); luaX_next(ls); } #define check_condition(ls,c,msg) { if (!(c)) luaX_syntaxerror(ls, msg); } static void check_match (LexState *ls, int what, int who, int where) { if (!testnext(ls, what)) { if (where == ls->linenumber) error_expected(ls, what); else { luaX_syntaxerror(ls, luaO_pushfstring(ls->L, "%s expected (to close %s at line %d)", luaX_token2str(ls, what), luaX_token2str(ls, who), where)); } } } static TString *str_checkname (LexState *ls) { TString *ts; check(ls, TK_NAME); ts = ls->t.seminfo.ts; luaX_next(ls); return ts; } static void init_exp (expdesc *e, expkind k, int i) { e->f = e->t = NO_JUMP; e->k = k; e->u.info = i; } static void codestring (LexState *ls, expdesc *e, TString *s) { init_exp(e, VK, luaK_stringK(ls->fs, s)); } static void checkname (LexState *ls, expdesc *e) { codestring(ls, e, str_checkname(ls)); } static int registerlocalvar (LexState *ls, TString *varname) { FuncState *fs = ls->fs; Proto *f = fs->f; int oldsize = f->sizelocvars; luaM_growvector(ls->L, f->locvars, fs->nlocvars, f->sizelocvars, LocVar, SHRT_MAX, "local variables"); while (oldsize < f->sizelocvars) f->locvars[oldsize++].varname = NULL; f->locvars[fs->nlocvars].varname = varname; luaC_objbarrier(ls->L, f, varname); return fs->nlocvars++; } static void new_localvar (LexState *ls, TString *name) { FuncState *fs = ls->fs; Dyndata *dyd = ls->dyd; int reg = registerlocalvar(ls, name); checklimit(fs, dyd->actvar.n + 1 - fs->firstlocal, MAXVARS, "local variables"); luaM_growvector(ls->L, dyd->actvar.arr, dyd->actvar.n + 1, dyd->actvar.size, Vardesc, MAX_INT, "local variables"); dyd->actvar.arr[dyd->actvar.n++].idx = cast(short, reg); } static void new_localvarliteral_ (LexState *ls, const char *name, size_t sz) { new_localvar(ls, luaX_newstring(ls, name, sz)); } #define new_localvarliteral(ls,v) \ new_localvarliteral_(ls, "" v, (sizeof(v)/sizeof(char))-1) static LocVar *getlocvar (FuncState *fs, int i) { int idx = fs->ls->dyd->actvar.arr[fs->firstlocal + i].idx; lua_assert(idx < fs->nlocvars); return &fs->f->locvars[idx]; } static void adjustlocalvars (LexState *ls, int nvars) { FuncState *fs = ls->fs; fs->nactvar = cast_byte(fs->nactvar + nvars); for (; nvars; nvars--) { getlocvar(fs, fs->nactvar - nvars)->startpc = fs->pc; } } static void removevars (FuncState *fs, int tolevel) { fs->ls->dyd->actvar.n -= (fs->nactvar - tolevel); while (fs->nactvar > tolevel) getlocvar(fs, --fs->nactvar)->endpc = fs->pc; } static int searchupvalue (FuncState *fs, TString *name) { int i; Upvaldesc *up = fs->f->upvalues; for (i = 0; i < fs->nups; i++) { if (luaS_eqstr(up[i].name, name)) return i; } return -1; /* not found */ } static int newupvalue (FuncState *fs, TString *name, expdesc *v) { Proto *f = fs->f; int oldsize = f->sizeupvalues; checklimit(fs, fs->nups + 1, MAXUPVAL, "upvalues"); luaM_growvector(fs->ls->L, f->upvalues, fs->nups, f->sizeupvalues, Upvaldesc, MAXUPVAL, "upvalues"); while (oldsize < f->sizeupvalues) f->upvalues[oldsize++].name = NULL; f->upvalues[fs->nups].instack = (v->k == VLOCAL); f->upvalues[fs->nups].idx = cast_byte(v->u.info); f->upvalues[fs->nups].name = name; luaC_objbarrier(fs->ls->L, f, name); return fs->nups++; } static int searchvar (FuncState *fs, TString *n) { int i; for (i=fs->nactvar-1; i >= 0; i--) { if (luaS_eqstr(n, getlocvar(fs, i)->varname)) return i; } return -1; /* not found */ } /* Mark block where variable at given level was defined (to emit close instructions later). */ static void markupval (FuncState *fs, int level) { BlockCnt *bl = fs->bl; while (bl->nactvar > level) bl = bl->previous; bl->upval = 1; } /* Find variable with given name 'n'. If it is an upvalue, add this upvalue into all intermediate functions. */ static int singlevaraux (FuncState *fs, TString *n, expdesc *var, int base) { if (fs == NULL) /* no more levels? */ return VVOID; /* default is global */ else { int v = searchvar(fs, n); /* look up locals at current level */ if (v >= 0) { /* found? */ init_exp(var, VLOCAL, v); /* variable is local */ if (!base) markupval(fs, v); /* local will be used as an upval */ return VLOCAL; } else { /* not found as local at current level; try upvalues */ int idx = searchupvalue(fs, n); /* try existing upvalues */ if (idx < 0) { /* not found? */ if (singlevaraux(fs->prev, n, var, 0) == VVOID) /* try upper levels */ return VVOID; /* not found; is a global */ /* else was LOCAL or UPVAL */ idx = newupvalue(fs, n, var); /* will be a new upvalue */ } init_exp(var, VUPVAL, idx); return VUPVAL; } } } static void singlevar (LexState *ls, expdesc *var) { TString *varname = str_checkname(ls); FuncState *fs = ls->fs; if (singlevaraux(fs, varname, var, 1) == VVOID) { /* global name? */ expdesc key; singlevaraux(fs, ls->envn, var, 1); /* get environment variable */ lua_assert(var->k == VLOCAL || var->k == VUPVAL); codestring(ls, &key, varname); /* key is variable name */ luaK_indexed(fs, var, &key); /* env[varname] */ } } static void adjust_assign (LexState *ls, int nvars, int nexps, expdesc *e) { FuncState *fs = ls->fs; int extra = nvars - nexps; if (hasmultret(e->k)) { extra++; /* includes call itself */ if (extra < 0) extra = 0; luaK_setreturns(fs, e, extra); /* last exp. provides the difference */ if (extra > 1) luaK_reserveregs(fs, extra-1); } else { if (e->k != VVOID) luaK_exp2nextreg(fs, e); /* close last expression */ if (extra > 0) { int reg = fs->freereg; luaK_reserveregs(fs, extra); luaK_nil(fs, reg, extra); } } } static void enterlevel (LexState *ls) { lua_State *L = ls->L; ++L->nCcalls; checklimit(ls->fs, L->nCcalls, LUAI_MAXCCALLS, "C levels"); } #define leavelevel(ls) ((ls)->L->nCcalls--) static void closegoto (LexState *ls, int g, Labeldesc *label) { int i; FuncState *fs = ls->fs; Labellist *gl = &ls->dyd->gt; Labeldesc *gt = &gl->arr[g]; lua_assert(luaS_eqstr(gt->name, label->name)); if (gt->nactvar < label->nactvar) { TString *vname = getlocvar(fs, gt->nactvar)->varname; const char *msg = luaO_pushfstring(ls->L, " at line %d jumps into the scope of local " LUA_QS, getstr(gt->name), gt->line, getstr(vname)); semerror(ls, msg); } luaK_patchlist(fs, gt->pc, label->pc); /* remove goto from pending list */ for (i = g; i < gl->n - 1; i++) gl->arr[i] = gl->arr[i + 1]; gl->n--; } /* ** try to close a goto with existing labels; this solves backward jumps */ static int findlabel (LexState *ls, int g) { int i; BlockCnt *bl = ls->fs->bl; Dyndata *dyd = ls->dyd; Labeldesc *gt = &dyd->gt.arr[g]; /* check labels in current block for a match */ for (i = bl->firstlabel; i < dyd->label.n; i++) { Labeldesc *lb = &dyd->label.arr[i]; if (luaS_eqstr(lb->name, gt->name)) { /* correct label? */ if (gt->nactvar > lb->nactvar && (bl->upval || dyd->label.n > bl->firstlabel)) luaK_patchclose(ls->fs, gt->pc, lb->nactvar); closegoto(ls, g, lb); /* close it */ return 1; } } return 0; /* label not found; cannot close goto */ } static int newlabelentry (LexState *ls, Labellist *l, TString *name, int line, int pc) { int n = l->n; luaM_growvector(ls->L, l->arr, n, l->size, Labeldesc, SHRT_MAX, "labels/gotos"); l->arr[n].name = name; l->arr[n].line = line; l->arr[n].nactvar = ls->fs->nactvar; l->arr[n].pc = pc; l->n++; return n; } /* ** check whether new label 'lb' matches any pending gotos in current ** block; solves forward jumps */ static void findgotos (LexState *ls, Labeldesc *lb) { Labellist *gl = &ls->dyd->gt; int i = ls->fs->bl->firstgoto; while (i < gl->n) { if (luaS_eqstr(gl->arr[i].name, lb->name)) closegoto(ls, i, lb); else i++; } } /* ** "export" pending gotos to outer level, to check them against ** outer labels; if the block being exited has upvalues, and ** the goto exits the scope of any variable (which can be the ** upvalue), close those variables being exited. */ static void movegotosout (FuncState *fs, BlockCnt *bl) { int i = bl->firstgoto; Labellist *gl = &fs->ls->dyd->gt; /* correct pending gotos to current block and try to close it with visible labels */ while (i < gl->n) { Labeldesc *gt = &gl->arr[i]; if (gt->nactvar > bl->nactvar) { if (bl->upval) luaK_patchclose(fs, gt->pc, bl->nactvar); gt->nactvar = bl->nactvar; } if (!findlabel(fs->ls, i)) i++; /* move to next one */ } } static void enterblock (FuncState *fs, BlockCnt *bl, lu_byte isloop) { bl->isloop = isloop; bl->nactvar = fs->nactvar; bl->firstlabel = fs->ls->dyd->label.n; bl->firstgoto = fs->ls->dyd->gt.n; bl->upval = 0; bl->previous = fs->bl; fs->bl = bl; lua_assert(fs->freereg == fs->nactvar); } /* ** create a label named "break" to resolve break statements */ static void breaklabel (LexState *ls) { TString *n = luaS_new(ls->L, "break"); int l = newlabelentry(ls, &ls->dyd->label, n, 0, ls->fs->pc); findgotos(ls, &ls->dyd->label.arr[l]); } /* ** generates an error for an undefined 'goto'; choose appropriate ** message when label name is a reserved word (which can only be 'break') */ static l_noret undefgoto (LexState *ls, Labeldesc *gt) { const char *msg = isreserved(gt->name) ? "<%s> at line %d not inside a loop" : "no visible label " LUA_QS " for at line %d"; msg = luaO_pushfstring(ls->L, msg, getstr(gt->name), gt->line); semerror(ls, msg); } static void leaveblock (FuncState *fs) { BlockCnt *bl = fs->bl; LexState *ls = fs->ls; if (bl->previous && bl->upval) { /* create a 'jump to here' to close upvalues */ int j = luaK_jump(fs); luaK_patchclose(fs, j, bl->nactvar); luaK_patchtohere(fs, j); } if (bl->isloop) breaklabel(ls); /* close pending breaks */ fs->bl = bl->previous; removevars(fs, bl->nactvar); lua_assert(bl->nactvar == fs->nactvar); fs->freereg = fs->nactvar; /* free registers */ ls->dyd->label.n = bl->firstlabel; /* remove local labels */ if (bl->previous) /* inner block? */ movegotosout(fs, bl); /* update pending gotos to outer block */ else if (bl->firstgoto < ls->dyd->gt.n) /* pending gotos in outer block? */ undefgoto(ls, &ls->dyd->gt.arr[bl->firstgoto]); /* error */ } /* ** adds a new prototype into list of prototypes */ static Proto *addprototype (LexState *ls) { Proto *clp; lua_State *L = ls->L; FuncState *fs = ls->fs; Proto *f = fs->f; /* prototype of current function */ if (fs->np >= f->sizep) { int oldsize = f->sizep; luaM_growvector(L, f->p, fs->np, f->sizep, Proto *, MAXARG_Bx, "functions"); while (oldsize < f->sizep) f->p[oldsize++] = NULL; } f->p[fs->np++] = clp = luaF_newproto(L); luaC_objbarrier(L, f, clp); return clp; } /* ** codes instruction to create new closure in parent function */ static void codeclosure (LexState *ls, expdesc *v) { FuncState *fs = ls->fs->prev; init_exp(v, VRELOCABLE, luaK_codeABx(fs, OP_CLOSURE, 0, fs->np - 1)); luaK_exp2nextreg(fs, v); /* fix it at stack top (for GC) */ } static void open_func (LexState *ls, FuncState *fs, BlockCnt *bl) { lua_State *L = ls->L; Proto *f; fs->prev = ls->fs; /* linked list of funcstates */ fs->ls = ls; ls->fs = fs; fs->pc = 0; fs->lasttarget = 0; fs->jpc = NO_JUMP; fs->freereg = 0; fs->nk = 0; fs->np = 0; fs->nups = 0; fs->nlocvars = 0; fs->nactvar = 0; fs->firstlocal = ls->dyd->actvar.n; fs->bl = NULL; f = fs->f; f->source = ls->source; f->maxstacksize = 2; /* registers 0/1 are always valid */ fs->h = luaH_new(L); /* anchor table of constants (to avoid being collected) */ sethvalue2s(L, L->top, fs->h); incr_top(L); enterblock(fs, bl, 0); } static void close_func (LexState *ls) { lua_State *L = ls->L; FuncState *fs = ls->fs; Proto *f = fs->f; luaK_ret(fs, 0, 0); /* final return */ leaveblock(fs); luaM_reallocvector(L, f->code, f->sizecode, fs->pc, Instruction); f->sizecode = fs->pc; luaM_reallocvector(L, f->lineinfo, f->sizelineinfo, fs->pc, int); f->sizelineinfo = fs->pc; luaM_reallocvector(L, f->k, f->sizek, fs->nk, TValue); f->sizek = fs->nk; luaM_reallocvector(L, f->p, f->sizep, fs->np, Proto *); f->sizep = fs->np; luaM_reallocvector(L, f->locvars, f->sizelocvars, fs->nlocvars, LocVar); f->sizelocvars = fs->nlocvars; luaM_reallocvector(L, f->upvalues, f->sizeupvalues, fs->nups, Upvaldesc); f->sizeupvalues = fs->nups; lua_assert(fs->bl == NULL); ls->fs = fs->prev; /* last token read was anchored in defunct function; must re-anchor it */ anchor_token(ls); L->top--; /* pop table of constants */ luaC_checkGC(L); } /*============================================================*/ /* GRAMMAR RULES */ /*============================================================*/ /* ** check whether current token is in the follow set of a block. ** 'until' closes syntactical blocks, but do not close scope, ** so it handled in separate. */ static int block_follow (LexState *ls, int withuntil) { switch (ls->t.token) { case TK_ELSE: case TK_ELSEIF: case TK_END: case TK_EOS: return 1; case TK_UNTIL: return withuntil; default: return 0; } } static void statlist (LexState *ls) { /* statlist -> { stat [`;'] } */ while (!block_follow(ls, 1)) { if (ls->t.token == TK_RETURN) { statement(ls); return; /* 'return' must be last statement */ } statement(ls); } } static void fieldsel (LexState *ls, expdesc *v) { /* fieldsel -> ['.' | ':'] NAME */ FuncState *fs = ls->fs; expdesc key; luaK_exp2anyregup(fs, v); luaX_next(ls); /* skip the dot or colon */ checkname(ls, &key); luaK_indexed(fs, v, &key); } static void yindex (LexState *ls, expdesc *v) { /* index -> '[' expr ']' */ luaX_next(ls); /* skip the '[' */ expr(ls, v); luaK_exp2val(ls->fs, v); checknext(ls, ']'); } /* ** {====================================================================== ** Rules for Constructors ** ======================================================================= */ struct ConsControl { expdesc v; /* last list item read */ expdesc *t; /* table descriptor */ int nh; /* total number of `record' elements */ int na; /* total number of array elements */ int tostore; /* number of array elements pending to be stored */ }; static void recfield (LexState *ls, struct ConsControl *cc) { /* recfield -> (NAME | `['exp1`]') = exp1 */ FuncState *fs = ls->fs; int reg = ls->fs->freereg; expdesc key, val; int rkkey; if (ls->t.token == TK_NAME) { checklimit(fs, cc->nh, MAX_INT, "items in a constructor"); checkname(ls, &key); } else /* ls->t.token == '[' */ yindex(ls, &key); cc->nh++; checknext(ls, '='); rkkey = luaK_exp2RK(fs, &key); expr(ls, &val); luaK_codeABC(fs, OP_SETTABLE, cc->t->u.info, rkkey, luaK_exp2RK(fs, &val)); fs->freereg = reg; /* free registers */ } static void closelistfield (FuncState *fs, struct ConsControl *cc) { if (cc->v.k == VVOID) return; /* there is no list item */ luaK_exp2nextreg(fs, &cc->v); cc->v.k = VVOID; if (cc->tostore == LFIELDS_PER_FLUSH) { luaK_setlist(fs, cc->t->u.info, cc->na, cc->tostore); /* flush */ cc->tostore = 0; /* no more items pending */ } } static void lastlistfield (FuncState *fs, struct ConsControl *cc) { if (cc->tostore == 0) return; if (hasmultret(cc->v.k)) { luaK_setmultret(fs, &cc->v); luaK_setlist(fs, cc->t->u.info, cc->na, LUA_MULTRET); cc->na--; /* do not count last expression (unknown number of elements) */ } else { if (cc->v.k != VVOID) luaK_exp2nextreg(fs, &cc->v); luaK_setlist(fs, cc->t->u.info, cc->na, cc->tostore); } } static void listfield (LexState *ls, struct ConsControl *cc) { /* listfield -> exp */ expr(ls, &cc->v); checklimit(ls->fs, cc->na, MAX_INT, "items in a constructor"); cc->na++; cc->tostore++; } static void field (LexState *ls, struct ConsControl *cc) { /* field -> listfield | recfield */ switch(ls->t.token) { case TK_NAME: { /* may be 'listfield' or 'recfield' */ if (luaX_lookahead(ls) != '=') /* expression? */ listfield(ls, cc); else recfield(ls, cc); break; } case '[': { recfield(ls, cc); break; } default: { listfield(ls, cc); break; } } } static void constructor (LexState *ls, expdesc *t) { /* constructor -> '{' [ field { sep field } [sep] ] '}' sep -> ',' | ';' */ FuncState *fs = ls->fs; int line = ls->linenumber; int pc = luaK_codeABC(fs, OP_NEWTABLE, 0, 0, 0); struct ConsControl cc; cc.na = cc.nh = cc.tostore = 0; cc.t = t; init_exp(t, VRELOCABLE, pc); init_exp(&cc.v, VVOID, 0); /* no value (yet) */ luaK_exp2nextreg(ls->fs, t); /* fix it at stack top */ checknext(ls, '{'); do { lua_assert(cc.v.k == VVOID || cc.tostore > 0); if (ls->t.token == '}') break; closelistfield(fs, &cc); field(ls, &cc); } while (testnext(ls, ',') || testnext(ls, ';')); check_match(ls, '}', '{', line); lastlistfield(fs, &cc); SETARG_B(fs->f->code[pc], luaO_int2fb(cc.na)); /* set initial array size */ SETARG_C(fs->f->code[pc], luaO_int2fb(cc.nh)); /* set initial table size */ } /* }====================================================================== */ static void parlist (LexState *ls) { /* parlist -> [ param { `,' param } ] */ FuncState *fs = ls->fs; Proto *f = fs->f; int nparams = 0; f->is_vararg = 0; if (ls->t.token != ')') { /* is `parlist' not empty? */ do { switch (ls->t.token) { case TK_NAME: { /* param -> NAME */ new_localvar(ls, str_checkname(ls)); nparams++; break; } case TK_DOTS: { /* param -> `...' */ luaX_next(ls); f->is_vararg = 1; break; } default: luaX_syntaxerror(ls, " or " LUA_QL("...") " expected"); } } while (!f->is_vararg && testnext(ls, ',')); } adjustlocalvars(ls, nparams); f->numparams = cast_byte(fs->nactvar); luaK_reserveregs(fs, fs->nactvar); /* reserve register for parameters */ } static void body (LexState *ls, expdesc *e, int ismethod, int line) { /* body -> `(' parlist `)' block END */ FuncState new_fs; BlockCnt bl; new_fs.f = addprototype(ls); new_fs.f->linedefined = line; open_func(ls, &new_fs, &bl); checknext(ls, '('); if (ismethod) { new_localvarliteral(ls, "self"); /* create 'self' parameter */ adjustlocalvars(ls, 1); } parlist(ls); checknext(ls, ')'); statlist(ls); new_fs.f->lastlinedefined = ls->linenumber; check_match(ls, TK_END, TK_FUNCTION, line); codeclosure(ls, e); close_func(ls); } static int explist (LexState *ls, expdesc *v) { /* explist -> expr { `,' expr } */ int n = 1; /* at least one expression */ expr(ls, v); while (testnext(ls, ',')) { luaK_exp2nextreg(ls->fs, v); expr(ls, v); n++; } return n; } static void funcargs (LexState *ls, expdesc *f, int line) { FuncState *fs = ls->fs; expdesc args; int base, nparams; switch (ls->t.token) { case '(': { /* funcargs -> `(' [ explist ] `)' */ luaX_next(ls); if (ls->t.token == ')') /* arg list is empty? */ args.k = VVOID; else { explist(ls, &args); luaK_setmultret(fs, &args); } check_match(ls, ')', '(', line); break; } case '{': { /* funcargs -> constructor */ constructor(ls, &args); break; } case TK_STRING: { /* funcargs -> STRING */ codestring(ls, &args, ls->t.seminfo.ts); luaX_next(ls); /* must use `seminfo' before `next' */ break; } default: { luaX_syntaxerror(ls, "function arguments expected"); } } lua_assert(f->k == VNONRELOC); base = f->u.info; /* base register for call */ if (hasmultret(args.k)) nparams = LUA_MULTRET; /* open call */ else { if (args.k != VVOID) luaK_exp2nextreg(fs, &args); /* close last argument */ nparams = fs->freereg - (base+1); } init_exp(f, VCALL, luaK_codeABC(fs, OP_CALL, base, nparams+1, 2)); luaK_fixline(fs, line); fs->freereg = base+1; /* call remove function and arguments and leaves (unless changed) one result */ } /* ** {====================================================================== ** Expression parsing ** ======================================================================= */ static void primaryexp (LexState *ls, expdesc *v) { /* primaryexp -> NAME | '(' expr ')' */ switch (ls->t.token) { case '(': { int line = ls->linenumber; luaX_next(ls); expr(ls, v); check_match(ls, ')', '(', line); luaK_dischargevars(ls->fs, v); return; } case TK_NAME: { singlevar(ls, v); return; } default: { luaX_syntaxerror(ls, "unexpected symbol"); } } } static void suffixedexp (LexState *ls, expdesc *v) { /* suffixedexp -> primaryexp { '.' NAME | '[' exp ']' | ':' NAME funcargs | funcargs } */ FuncState *fs = ls->fs; int line = ls->linenumber; primaryexp(ls, v); for (;;) { switch (ls->t.token) { case '.': { /* fieldsel */ fieldsel(ls, v); break; } case '[': { /* `[' exp1 `]' */ expdesc key; luaK_exp2anyregup(fs, v); yindex(ls, &key); luaK_indexed(fs, v, &key); break; } case ':': { /* `:' NAME funcargs */ expdesc key; luaX_next(ls); checkname(ls, &key); luaK_self(fs, v, &key); funcargs(ls, v, line); break; } case '(': case TK_STRING: case '{': { /* funcargs */ luaK_exp2nextreg(fs, v); funcargs(ls, v, line); break; } default: return; } } } static void simpleexp (LexState *ls, expdesc *v) { /* simpleexp -> NUMBER | STRING | NIL | TRUE | FALSE | ... | constructor | FUNCTION body | suffixedexp */ switch (ls->t.token) { case TK_NUMBER: { init_exp(v, VKNUM, 0); v->u.nval = ls->t.seminfo.r; break; } case TK_STRING: { codestring(ls, v, ls->t.seminfo.ts); break; } case TK_NIL: { init_exp(v, VNIL, 0); break; } case TK_TRUE: { init_exp(v, VTRUE, 0); break; } case TK_FALSE: { init_exp(v, VFALSE, 0); break; } case TK_DOTS: { /* vararg */ FuncState *fs = ls->fs; check_condition(ls, fs->f->is_vararg, "cannot use " LUA_QL("...") " outside a vararg function"); init_exp(v, VVARARG, luaK_codeABC(fs, OP_VARARG, 0, 1, 0)); break; } case '{': { /* constructor */ constructor(ls, v); return; } case TK_FUNCTION: { luaX_next(ls); body(ls, v, 0, ls->linenumber); return; } default: { suffixedexp(ls, v); return; } } luaX_next(ls); } static UnOpr getunopr (int op) { switch (op) { case TK_NOT: return OPR_NOT; case '-': return OPR_MINUS; case '#': return OPR_LEN; default: return OPR_NOUNOPR; } } static BinOpr getbinopr (int op) { switch (op) { case '+': return OPR_ADD; case '-': return OPR_SUB; case '*': return OPR_MUL; case '/': return OPR_DIV; case '%': return OPR_MOD; case '^': return OPR_POW; case TK_CONCAT: return OPR_CONCAT; case TK_NE: return OPR_NE; case TK_EQ: return OPR_EQ; case '<': return OPR_LT; case TK_LE: return OPR_LE; case '>': return OPR_GT; case TK_GE: return OPR_GE; case TK_AND: return OPR_AND; case TK_OR: return OPR_OR; default: return OPR_NOBINOPR; } } static const struct { lu_byte left; /* left priority for each binary operator */ lu_byte right; /* right priority */ } priority[] = { /* ORDER OPR */ {6, 6}, {6, 6}, {7, 7}, {7, 7}, {7, 7}, /* `+' `-' `*' `/' `%' */ {10, 9}, {5, 4}, /* ^, .. (right associative) */ {3, 3}, {3, 3}, {3, 3}, /* ==, <, <= */ {3, 3}, {3, 3}, {3, 3}, /* ~=, >, >= */ {2, 2}, {1, 1} /* and, or */ }; #define UNARY_PRIORITY 8 /* priority for unary operators */ /* ** subexpr -> (simpleexp | unop subexpr) { binop subexpr } ** where `binop' is any binary operator with a priority higher than `limit' */ static BinOpr subexpr (LexState *ls, expdesc *v, int limit) { BinOpr op; UnOpr uop; enterlevel(ls); uop = getunopr(ls->t.token); if (uop != OPR_NOUNOPR) { int line = ls->linenumber; luaX_next(ls); subexpr(ls, v, UNARY_PRIORITY); luaK_prefix(ls->fs, uop, v, line); } else simpleexp(ls, v); /* expand while operators have priorities higher than `limit' */ op = getbinopr(ls->t.token); while (op != OPR_NOBINOPR && priority[op].left > limit) { expdesc v2; BinOpr nextop; int line = ls->linenumber; luaX_next(ls); luaK_infix(ls->fs, op, v); /* read sub-expression with higher priority */ nextop = subexpr(ls, &v2, priority[op].right); luaK_posfix(ls->fs, op, v, &v2, line); op = nextop; } leavelevel(ls); return op; /* return first untreated operator */ } static void expr (LexState *ls, expdesc *v) { subexpr(ls, v, 0); } /* }==================================================================== */ /* ** {====================================================================== ** Rules for Statements ** ======================================================================= */ static void block (LexState *ls) { /* block -> statlist */ FuncState *fs = ls->fs; BlockCnt bl; enterblock(fs, &bl, 0); statlist(ls); leaveblock(fs); } /* ** structure to chain all variables in the left-hand side of an ** assignment */ struct LHS_assign { struct LHS_assign *prev; expdesc v; /* variable (global, local, upvalue, or indexed) */ }; /* ** check whether, in an assignment to an upvalue/local variable, the ** upvalue/local variable is begin used in a previous assignment to a ** table. If so, save original upvalue/local value in a safe place and ** use this safe copy in the previous assignment. */ static void check_conflict (LexState *ls, struct LHS_assign *lh, expdesc *v) { FuncState *fs = ls->fs; int extra = fs->freereg; /* eventual position to save local variable */ int conflict = 0; for (; lh; lh = lh->prev) { /* check all previous assignments */ if (lh->v.k == VINDEXED) { /* assigning to a table? */ /* table is the upvalue/local being assigned now? */ if (lh->v.u.ind.vt == v->k && lh->v.u.ind.t == v->u.info) { conflict = 1; lh->v.u.ind.vt = VLOCAL; lh->v.u.ind.t = extra; /* previous assignment will use safe copy */ } /* index is the local being assigned? (index cannot be upvalue) */ if (v->k == VLOCAL && lh->v.u.ind.idx == v->u.info) { conflict = 1; lh->v.u.ind.idx = extra; /* previous assignment will use safe copy */ } } } if (conflict) { /* copy upvalue/local value to a temporary (in position 'extra') */ OpCode op = (v->k == VLOCAL) ? OP_MOVE : OP_GETUPVAL; luaK_codeABC(fs, op, extra, v->u.info, 0); luaK_reserveregs(fs, 1); } } static void assignment (LexState *ls, struct LHS_assign *lh, int nvars) { expdesc e; check_condition(ls, vkisvar(lh->v.k), "syntax error"); if (testnext(ls, ',')) { /* assignment -> ',' suffixedexp assignment */ struct LHS_assign nv; nv.prev = lh; suffixedexp(ls, &nv.v); if (nv.v.k != VINDEXED) check_conflict(ls, lh, &nv.v); checklimit(ls->fs, nvars + ls->L->nCcalls, LUAI_MAXCCALLS, "C levels"); assignment(ls, &nv, nvars+1); } else { /* assignment -> `=' explist */ int nexps; checknext(ls, '='); nexps = explist(ls, &e); if (nexps != nvars) { adjust_assign(ls, nvars, nexps, &e); if (nexps > nvars) ls->fs->freereg -= nexps - nvars; /* remove extra values */ } else { luaK_setoneret(ls->fs, &e); /* close last expression */ luaK_storevar(ls->fs, &lh->v, &e); return; /* avoid default */ } } init_exp(&e, VNONRELOC, ls->fs->freereg-1); /* default assignment */ luaK_storevar(ls->fs, &lh->v, &e); } static int cond (LexState *ls) { /* cond -> exp */ expdesc v; expr(ls, &v); /* read condition */ if (v.k == VNIL) v.k = VFALSE; /* `falses' are all equal here */ luaK_goiftrue(ls->fs, &v); return v.f; } static void gotostat (LexState *ls, int pc) { int line = ls->linenumber; TString *label; int g; if (testnext(ls, TK_GOTO)) label = str_checkname(ls); else { luaX_next(ls); /* skip break */ label = luaS_new(ls->L, "break"); } g = newlabelentry(ls, &ls->dyd->gt, label, line, pc); findlabel(ls, g); /* close it if label already defined */ } /* check for repeated labels on the same block */ static void checkrepeated (FuncState *fs, Labellist *ll, TString *label) { int i; for (i = fs->bl->firstlabel; i < ll->n; i++) { if (luaS_eqstr(label, ll->arr[i].name)) { const char *msg = luaO_pushfstring(fs->ls->L, "label " LUA_QS " already defined on line %d", getstr(label), ll->arr[i].line); semerror(fs->ls, msg); } } } /* skip no-op statements */ static void skipnoopstat (LexState *ls) { while (ls->t.token == ';' || ls->t.token == TK_DBCOLON) statement(ls); } static void labelstat (LexState *ls, TString *label, int line) { /* label -> '::' NAME '::' */ FuncState *fs = ls->fs; Labellist *ll = &ls->dyd->label; int l; /* index of new label being created */ checkrepeated(fs, ll, label); /* check for repeated labels */ checknext(ls, TK_DBCOLON); /* skip double colon */ /* create new entry for this label */ l = newlabelentry(ls, ll, label, line, fs->pc); skipnoopstat(ls); /* skip other no-op statements */ if (block_follow(ls, 0)) { /* label is last no-op statement in the block? */ /* assume that locals are already out of scope */ ll->arr[l].nactvar = fs->bl->nactvar; } findgotos(ls, &ll->arr[l]); } static void whilestat (LexState *ls, int line) { /* whilestat -> WHILE cond DO block END */ FuncState *fs = ls->fs; int whileinit; int condexit; BlockCnt bl; luaX_next(ls); /* skip WHILE */ whileinit = luaK_getlabel(fs); condexit = cond(ls); enterblock(fs, &bl, 1); checknext(ls, TK_DO); block(ls); luaK_jumpto(fs, whileinit); check_match(ls, TK_END, TK_WHILE, line); leaveblock(fs); luaK_patchtohere(fs, condexit); /* false conditions finish the loop */ } static void repeatstat (LexState *ls, int line) { /* repeatstat -> REPEAT block UNTIL cond */ int condexit; FuncState *fs = ls->fs; int repeat_init = luaK_getlabel(fs); BlockCnt bl1, bl2; enterblock(fs, &bl1, 1); /* loop block */ enterblock(fs, &bl2, 0); /* scope block */ luaX_next(ls); /* skip REPEAT */ statlist(ls); check_match(ls, TK_UNTIL, TK_REPEAT, line); condexit = cond(ls); /* read condition (inside scope block) */ if (bl2.upval) /* upvalues? */ luaK_patchclose(fs, condexit, bl2.nactvar); leaveblock(fs); /* finish scope */ luaK_patchlist(fs, condexit, repeat_init); /* close the loop */ leaveblock(fs); /* finish loop */ } static int exp1 (LexState *ls) { expdesc e; int reg; expr(ls, &e); luaK_exp2nextreg(ls->fs, &e); lua_assert(e.k == VNONRELOC); reg = e.u.info; return reg; } static void forbody (LexState *ls, int base, int line, int nvars, int isnum) { /* forbody -> DO block */ BlockCnt bl; FuncState *fs = ls->fs; int prep, endfor; adjustlocalvars(ls, 3); /* control variables */ checknext(ls, TK_DO); prep = isnum ? luaK_codeAsBx(fs, OP_FORPREP, base, NO_JUMP) : luaK_jump(fs); enterblock(fs, &bl, 0); /* scope for declared variables */ adjustlocalvars(ls, nvars); luaK_reserveregs(fs, nvars); block(ls); leaveblock(fs); /* end of scope for declared variables */ luaK_patchtohere(fs, prep); if (isnum) /* numeric for? */ endfor = luaK_codeAsBx(fs, OP_FORLOOP, base, NO_JUMP); else { /* generic for */ luaK_codeABC(fs, OP_TFORCALL, base, 0, nvars); luaK_fixline(fs, line); endfor = luaK_codeAsBx(fs, OP_TFORLOOP, base + 2, NO_JUMP); } luaK_patchlist(fs, endfor, prep + 1); luaK_fixline(fs, line); } static void fornum (LexState *ls, TString *varname, int line) { /* fornum -> NAME = exp1,exp1[,exp1] forbody */ FuncState *fs = ls->fs; int base = fs->freereg; new_localvarliteral(ls, "(for index)"); new_localvarliteral(ls, "(for limit)"); new_localvarliteral(ls, "(for step)"); new_localvar(ls, varname); checknext(ls, '='); exp1(ls); /* initial value */ checknext(ls, ','); exp1(ls); /* limit */ if (testnext(ls, ',')) exp1(ls); /* optional step */ else { /* default step = 1 */ luaK_codek(fs, fs->freereg, luaK_numberK(fs, 1)); luaK_reserveregs(fs, 1); } forbody(ls, base, line, 1, 1); } static void forlist (LexState *ls, TString *indexname) { /* forlist -> NAME {,NAME} IN explist forbody */ FuncState *fs = ls->fs; expdesc e; int nvars = 4; /* gen, state, control, plus at least one declared var */ int line; int base = fs->freereg; /* create control variables */ new_localvarliteral(ls, "(for generator)"); new_localvarliteral(ls, "(for state)"); new_localvarliteral(ls, "(for control)"); /* create declared variables */ new_localvar(ls, indexname); while (testnext(ls, ',')) { new_localvar(ls, str_checkname(ls)); nvars++; } checknext(ls, TK_IN); line = ls->linenumber; adjust_assign(ls, 3, explist(ls, &e), &e); luaK_checkstack(fs, 3); /* extra space to call generator */ forbody(ls, base, line, nvars - 3, 0); } static void forstat (LexState *ls, int line) { /* forstat -> FOR (fornum | forlist) END */ FuncState *fs = ls->fs; TString *varname; BlockCnt bl; enterblock(fs, &bl, 1); /* scope for loop and control variables */ luaX_next(ls); /* skip `for' */ varname = str_checkname(ls); /* first variable name */ switch (ls->t.token) { case '=': fornum(ls, varname, line); break; case ',': case TK_IN: forlist(ls, varname); break; default: luaX_syntaxerror(ls, LUA_QL("=") " or " LUA_QL("in") " expected"); } check_match(ls, TK_END, TK_FOR, line); leaveblock(fs); /* loop scope (`break' jumps to this point) */ } static void test_then_block (LexState *ls, int *escapelist) { /* test_then_block -> [IF | ELSEIF] cond THEN block */ BlockCnt bl; FuncState *fs = ls->fs; expdesc v; int jf; /* instruction to skip 'then' code (if condition is false) */ luaX_next(ls); /* skip IF or ELSEIF */ expr(ls, &v); /* read condition */ checknext(ls, TK_THEN); if (ls->t.token == TK_GOTO || ls->t.token == TK_BREAK) { luaK_goiffalse(ls->fs, &v); /* will jump to label if condition is true */ enterblock(fs, &bl, 0); /* must enter block before 'goto' */ gotostat(ls, v.t); /* handle goto/break */ skipnoopstat(ls); /* skip other no-op statements */ if (block_follow(ls, 0)) { /* 'goto' is the entire block? */ leaveblock(fs); return; /* and that is it */ } else /* must skip over 'then' part if condition is false */ jf = luaK_jump(fs); } else { /* regular case (not goto/break) */ luaK_goiftrue(ls->fs, &v); /* skip over block if condition is false */ enterblock(fs, &bl, 0); jf = v.f; } statlist(ls); /* `then' part */ leaveblock(fs); if (ls->t.token == TK_ELSE || ls->t.token == TK_ELSEIF) /* followed by 'else'/'elseif'? */ luaK_concat(fs, escapelist, luaK_jump(fs)); /* must jump over it */ luaK_patchtohere(fs, jf); } static void ifstat (LexState *ls, int line) { /* ifstat -> IF cond THEN block {ELSEIF cond THEN block} [ELSE block] END */ FuncState *fs = ls->fs; int escapelist = NO_JUMP; /* exit list for finished parts */ test_then_block(ls, &escapelist); /* IF cond THEN block */ while (ls->t.token == TK_ELSEIF) test_then_block(ls, &escapelist); /* ELSEIF cond THEN block */ if (testnext(ls, TK_ELSE)) block(ls); /* `else' part */ check_match(ls, TK_END, TK_IF, line); luaK_patchtohere(fs, escapelist); /* patch escape list to 'if' end */ } static void localfunc (LexState *ls) { expdesc b; FuncState *fs = ls->fs; new_localvar(ls, str_checkname(ls)); /* new local variable */ adjustlocalvars(ls, 1); /* enter its scope */ body(ls, &b, 0, ls->linenumber); /* function created in next register */ /* debug information will only see the variable after this point! */ getlocvar(fs, b.u.info)->startpc = fs->pc; } static void localstat (LexState *ls) { /* stat -> LOCAL NAME {`,' NAME} [`=' explist] */ int nvars = 0; int nexps; expdesc e; do { new_localvar(ls, str_checkname(ls)); nvars++; } while (testnext(ls, ',')); if (testnext(ls, '=')) nexps = explist(ls, &e); else { e.k = VVOID; nexps = 0; } adjust_assign(ls, nvars, nexps, &e); adjustlocalvars(ls, nvars); } static int funcname (LexState *ls, expdesc *v) { /* funcname -> NAME {fieldsel} [`:' NAME] */ int ismethod = 0; singlevar(ls, v); while (ls->t.token == '.') fieldsel(ls, v); if (ls->t.token == ':') { ismethod = 1; fieldsel(ls, v); } return ismethod; } static void funcstat (LexState *ls, int line) { /* funcstat -> FUNCTION funcname body */ int ismethod; expdesc v, b; luaX_next(ls); /* skip FUNCTION */ ismethod = funcname(ls, &v); body(ls, &b, ismethod, line); luaK_storevar(ls->fs, &v, &b); luaK_fixline(ls->fs, line); /* definition `happens' in the first line */ } static void exprstat (LexState *ls) { /* stat -> func | assignment */ FuncState *fs = ls->fs; struct LHS_assign v; suffixedexp(ls, &v.v); if (ls->t.token == '=' || ls->t.token == ',') { /* stat -> assignment ? */ v.prev = NULL; assignment(ls, &v, 1); } else { /* stat -> func */ check_condition(ls, v.v.k == VCALL, "syntax error"); SETARG_C(getcode(fs, &v.v), 1); /* call statement uses no results */ } } static void retstat (LexState *ls) { /* stat -> RETURN [explist] [';'] */ FuncState *fs = ls->fs; expdesc e; int first, nret; /* registers with returned values */ if (block_follow(ls, 1) || ls->t.token == ';') first = nret = 0; /* return no values */ else { nret = explist(ls, &e); /* optional return values */ if (hasmultret(e.k)) { luaK_setmultret(fs, &e); if (e.k == VCALL && nret == 1) { /* tail call? */ SET_OPCODE(getcode(fs,&e), OP_TAILCALL); lua_assert(GETARG_A(getcode(fs,&e)) == fs->nactvar); } first = fs->nactvar; nret = LUA_MULTRET; /* return all values */ } else { if (nret == 1) /* only one single value? */ first = luaK_exp2anyreg(fs, &e); else { luaK_exp2nextreg(fs, &e); /* values must go to the `stack' */ first = fs->nactvar; /* return all `active' values */ lua_assert(nret == fs->freereg - first); } } } luaK_ret(fs, first, nret); testnext(ls, ';'); /* skip optional semicolon */ } static void statement (LexState *ls) { int line = ls->linenumber; /* may be needed for error messages */ enterlevel(ls); switch (ls->t.token) { case ';': { /* stat -> ';' (empty statement) */ luaX_next(ls); /* skip ';' */ break; } case TK_IF: { /* stat -> ifstat */ ifstat(ls, line); break; } case TK_WHILE: { /* stat -> whilestat */ whilestat(ls, line); break; } case TK_DO: { /* stat -> DO block END */ luaX_next(ls); /* skip DO */ block(ls); check_match(ls, TK_END, TK_DO, line); break; } case TK_FOR: { /* stat -> forstat */ forstat(ls, line); break; } case TK_REPEAT: { /* stat -> repeatstat */ repeatstat(ls, line); break; } case TK_FUNCTION: { /* stat -> funcstat */ funcstat(ls, line); break; } case TK_LOCAL: { /* stat -> localstat */ luaX_next(ls); /* skip LOCAL */ if (testnext(ls, TK_FUNCTION)) /* local function? */ localfunc(ls); else localstat(ls); break; } case TK_DBCOLON: { /* stat -> label */ luaX_next(ls); /* skip double colon */ labelstat(ls, str_checkname(ls), line); break; } case TK_RETURN: { /* stat -> retstat */ luaX_next(ls); /* skip RETURN */ retstat(ls); break; } case TK_BREAK: /* stat -> breakstat */ case TK_GOTO: { /* stat -> 'goto' NAME */ gotostat(ls, luaK_jump(ls->fs)); break; } default: { /* stat -> func | assignment */ exprstat(ls); break; } } lua_assert(ls->fs->f->maxstacksize >= ls->fs->freereg && ls->fs->freereg >= ls->fs->nactvar); ls->fs->freereg = ls->fs->nactvar; /* free registers */ leavelevel(ls); } /* }====================================================================== */ /* ** compiles the main function, which is a regular vararg function with an ** upvalue named LUA_ENV */ static void mainfunc (LexState *ls, FuncState *fs) { BlockCnt bl; expdesc v; open_func(ls, fs, &bl); fs->f->is_vararg = 1; /* main function is always vararg */ init_exp(&v, VLOCAL, 0); /* create and... */ newupvalue(fs, ls->envn, &v); /* ...set environment upvalue */ luaX_next(ls); /* read first token */ statlist(ls); /* parse main body */ check(ls, TK_EOS); close_func(ls); } Closure *luaY_parser (lua_State *L, ZIO *z, Mbuffer *buff, Dyndata *dyd, const char *name, int firstchar) { LexState lexstate; FuncState funcstate; Closure *cl = luaF_newLclosure(L, 1); /* create main closure */ /* anchor closure (to avoid being collected) */ setclLvalue(L, L->top, cl); incr_top(L); funcstate.f = cl->l.p = luaF_newproto(L); funcstate.f->source = luaS_new(L, name); /* create and anchor TString */ lexstate.buff = buff; lexstate.dyd = dyd; dyd->actvar.n = dyd->gt.n = dyd->label.n = 0; luaX_setinput(L, &lexstate, z, funcstate.f->source, firstchar); mainfunc(&lexstate, &funcstate); lua_assert(!funcstate.prev && funcstate.nups == 1 && !lexstate.fs); /* all scopes should be correctly finished */ lua_assert(dyd->actvar.n == 0 && dyd->gt.n == 0 && dyd->label.n == 0); return cl; /* it's on the stack too */ } fs-uae-2.2.3+dfsg/libfsemu/src/glee.c0000644000175000017500000411371112162366654017541 0ustar glaubitzglaubitz#if !defined(USE_GLES) || defined(FAKE_GLES) /*************************************************************************** * * GLee.c * GLee (OpenGL Easy Extension library) * Version : 5.4 * * Copyright (c)2009 Ben Woodhouse All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer as * the first lines of this file unmodified. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY BEN WOODHOUSE ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL BEN WOODHOUSE BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * Web: http://elf-stone.com/glee.php * * [This file was automatically generated by GLeeGen 7.0 * ***************************************************************************/ #ifdef _MSC_VER #pragma optimize( "g", off ) #endif #include #include #include #include "GLee.h" #if defined(__APPLE__) || defined(__APPLE_CC__) #include #endif typedef GLuint(*GLEE_LINK_FUNCTION)(void); GLboolean __GLeeInited=GL_FALSE; #ifndef _WIN32 #define __stdcall /* nothing */ #endif void * __GLeeGetProcAddress(const char *extname) { #ifdef WIN32 return (void*)wglGetProcAddress(extname); #elif defined(__APPLE__) || defined(__APPLE_CC__) CFBundleRef bundle; CFURLRef bundleURL = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, CFSTR("/System/Library/Frameworks/OpenGL.framework"), kCFURLPOSIXPathStyle, true); CFStringRef functionName = CFStringCreateWithCString(kCFAllocatorDefault, extname, kCFStringEncodingASCII); void *function; bundle = CFBundleCreate(kCFAllocatorDefault, bundleURL); assert(bundle != NULL); function = CFBundleGetFunctionPointerForName(bundle, functionName); CFRelease(bundleURL); CFRelease(functionName); CFRelease(bundle); return function; #else return (void*)glXGetProcAddressARB((const GLubyte *)extname); #endif } /* Extension querying variables */ GLboolean _GLEE_VERSION_1_2 = GL_FALSE; GLboolean _GLEE_ARB_imaging = GL_FALSE; GLboolean _GLEE_VERSION_1_3 = GL_FALSE; GLboolean _GLEE_VERSION_1_4 = GL_FALSE; GLboolean _GLEE_VERSION_1_5 = GL_FALSE; GLboolean _GLEE_VERSION_2_0 = GL_FALSE; GLboolean _GLEE_VERSION_2_1 = GL_FALSE; GLboolean _GLEE_VERSION_3_0 = GL_FALSE; GLboolean _GLEE_ARB_multitexture = GL_FALSE; GLboolean _GLEE_ARB_transpose_matrix = GL_FALSE; GLboolean _GLEE_ARB_multisample = GL_FALSE; GLboolean _GLEE_ARB_texture_env_add = GL_FALSE; GLboolean _GLEE_ARB_texture_cube_map = GL_FALSE; GLboolean _GLEE_ARB_texture_compression = GL_FALSE; GLboolean _GLEE_ARB_texture_border_clamp = GL_FALSE; GLboolean _GLEE_ARB_point_parameters = GL_FALSE; GLboolean _GLEE_ARB_vertex_blend = GL_FALSE; GLboolean _GLEE_ARB_matrix_palette = GL_FALSE; GLboolean _GLEE_ARB_texture_env_combine = GL_FALSE; GLboolean _GLEE_ARB_texture_env_crossbar = GL_FALSE; GLboolean _GLEE_ARB_texture_env_dot3 = GL_FALSE; GLboolean _GLEE_ARB_texture_mirrored_repeat = GL_FALSE; GLboolean _GLEE_ARB_depth_texture = GL_FALSE; GLboolean _GLEE_ARB_shadow = GL_FALSE; GLboolean _GLEE_ARB_shadow_ambient = GL_FALSE; GLboolean _GLEE_ARB_window_pos = GL_FALSE; GLboolean _GLEE_ARB_vertex_program = GL_FALSE; GLboolean _GLEE_ARB_fragment_program = GL_FALSE; GLboolean _GLEE_ARB_vertex_buffer_object = GL_FALSE; GLboolean _GLEE_ARB_occlusion_query = GL_FALSE; GLboolean _GLEE_ARB_shader_objects = GL_FALSE; GLboolean _GLEE_ARB_vertex_shader = GL_FALSE; GLboolean _GLEE_ARB_fragment_shader = GL_FALSE; GLboolean _GLEE_ARB_shading_language_100 = GL_FALSE; GLboolean _GLEE_ARB_texture_non_power_of_two = GL_FALSE; GLboolean _GLEE_ARB_point_sprite = GL_FALSE; GLboolean _GLEE_ARB_fragment_program_shadow = GL_FALSE; GLboolean _GLEE_ARB_draw_buffers = GL_FALSE; GLboolean _GLEE_ARB_texture_rectangle = GL_FALSE; GLboolean _GLEE_ARB_color_buffer_float = GL_FALSE; GLboolean _GLEE_ARB_half_float_pixel = GL_FALSE; GLboolean _GLEE_ARB_texture_float = GL_FALSE; GLboolean _GLEE_ARB_pixel_buffer_object = GL_FALSE; GLboolean _GLEE_ARB_depth_buffer_float = GL_FALSE; GLboolean _GLEE_ARB_draw_instanced = GL_FALSE; GLboolean _GLEE_ARB_framebuffer_object = GL_FALSE; GLboolean _GLEE_ARB_framebuffer_sRGB = GL_FALSE; GLboolean _GLEE_ARB_geometry_shader4 = GL_FALSE; GLboolean _GLEE_ARB_half_float_vertex = GL_FALSE; GLboolean _GLEE_ARB_instanced_arrays = GL_FALSE; GLboolean _GLEE_ARB_map_buffer_range = GL_FALSE; GLboolean _GLEE_ARB_texture_buffer_object = GL_FALSE; GLboolean _GLEE_ARB_texture_compression_rgtc = GL_FALSE; GLboolean _GLEE_ARB_texture_rg = GL_FALSE; GLboolean _GLEE_ARB_vertex_array_object = GL_FALSE; GLboolean _GLEE_EXT_abgr = GL_FALSE; GLboolean _GLEE_EXT_blend_color = GL_FALSE; GLboolean _GLEE_EXT_polygon_offset = GL_FALSE; GLboolean _GLEE_EXT_texture = GL_FALSE; GLboolean _GLEE_EXT_texture3D = GL_FALSE; GLboolean _GLEE_SGIS_texture_filter4 = GL_FALSE; GLboolean _GLEE_EXT_subtexture = GL_FALSE; GLboolean _GLEE_EXT_copy_texture = GL_FALSE; GLboolean _GLEE_EXT_histogram = GL_FALSE; GLboolean _GLEE_EXT_convolution = GL_FALSE; GLboolean _GLEE_SGI_color_matrix = GL_FALSE; GLboolean _GLEE_SGI_color_table = GL_FALSE; GLboolean _GLEE_SGIS_pixel_texture = GL_FALSE; GLboolean _GLEE_SGIX_pixel_texture = GL_FALSE; GLboolean _GLEE_SGIS_texture4D = GL_FALSE; GLboolean _GLEE_SGI_texture_color_table = GL_FALSE; GLboolean _GLEE_EXT_cmyka = GL_FALSE; GLboolean _GLEE_EXT_texture_object = GL_FALSE; GLboolean _GLEE_SGIS_detail_texture = GL_FALSE; GLboolean _GLEE_SGIS_sharpen_texture = GL_FALSE; GLboolean _GLEE_EXT_packed_pixels = GL_FALSE; GLboolean _GLEE_SGIS_texture_lod = GL_FALSE; GLboolean _GLEE_SGIS_multisample = GL_FALSE; GLboolean _GLEE_EXT_rescale_normal = GL_FALSE; GLboolean _GLEE_EXT_vertex_array = GL_FALSE; GLboolean _GLEE_EXT_misc_attribute = GL_FALSE; GLboolean _GLEE_SGIS_generate_mipmap = GL_FALSE; GLboolean _GLEE_SGIX_clipmap = GL_FALSE; GLboolean _GLEE_SGIX_shadow = GL_FALSE; GLboolean _GLEE_SGIS_texture_edge_clamp = GL_FALSE; GLboolean _GLEE_SGIS_texture_border_clamp = GL_FALSE; GLboolean _GLEE_EXT_blend_minmax = GL_FALSE; GLboolean _GLEE_EXT_blend_subtract = GL_FALSE; GLboolean _GLEE_EXT_blend_logic_op = GL_FALSE; GLboolean _GLEE_SGIX_interlace = GL_FALSE; GLboolean _GLEE_SGIX_pixel_tiles = GL_FALSE; GLboolean _GLEE_SGIS_texture_select = GL_FALSE; GLboolean _GLEE_SGIX_sprite = GL_FALSE; GLboolean _GLEE_SGIX_texture_multi_buffer = GL_FALSE; GLboolean _GLEE_EXT_point_parameters = GL_FALSE; GLboolean _GLEE_SGIS_point_parameters = GL_FALSE; GLboolean _GLEE_SGIX_instruments = GL_FALSE; GLboolean _GLEE_SGIX_texture_scale_bias = GL_FALSE; GLboolean _GLEE_SGIX_framezoom = GL_FALSE; GLboolean _GLEE_SGIX_tag_sample_buffer = GL_FALSE; GLboolean _GLEE_FfdMaskSGIX = GL_FALSE; GLboolean _GLEE_SGIX_polynomial_ffd = GL_FALSE; GLboolean _GLEE_SGIX_reference_plane = GL_FALSE; GLboolean _GLEE_SGIX_flush_raster = GL_FALSE; GLboolean _GLEE_SGIX_depth_texture = GL_FALSE; GLboolean _GLEE_SGIS_fog_function = GL_FALSE; GLboolean _GLEE_SGIX_fog_offset = GL_FALSE; GLboolean _GLEE_HP_image_transform = GL_FALSE; GLboolean _GLEE_HP_convolution_border_modes = GL_FALSE; GLboolean _GLEE_INGR_palette_buffer = GL_FALSE; GLboolean _GLEE_SGIX_texture_add_env = GL_FALSE; GLboolean _GLEE_EXT_color_subtable = GL_FALSE; GLboolean _GLEE_PGI_vertex_hints = GL_FALSE; GLboolean _GLEE_PGI_misc_hints = GL_FALSE; GLboolean _GLEE_EXT_paletted_texture = GL_FALSE; GLboolean _GLEE_EXT_clip_volume_hint = GL_FALSE; GLboolean _GLEE_SGIX_list_priority = GL_FALSE; GLboolean _GLEE_SGIX_ir_instrument1 = GL_FALSE; GLboolean _GLEE_SGIX_calligraphic_fragment = GL_FALSE; GLboolean _GLEE_SGIX_texture_lod_bias = GL_FALSE; GLboolean _GLEE_SGIX_shadow_ambient = GL_FALSE; GLboolean _GLEE_EXT_index_texture = GL_FALSE; GLboolean _GLEE_EXT_index_material = GL_FALSE; GLboolean _GLEE_EXT_index_func = GL_FALSE; GLboolean _GLEE_EXT_index_array_formats = GL_FALSE; GLboolean _GLEE_EXT_compiled_vertex_array = GL_FALSE; GLboolean _GLEE_EXT_cull_vertex = GL_FALSE; GLboolean _GLEE_SGIX_ycrcb = GL_FALSE; GLboolean _GLEE_SGIX_fragment_lighting = GL_FALSE; GLboolean _GLEE_IBM_rasterpos_clip = GL_FALSE; GLboolean _GLEE_HP_texture_lighting = GL_FALSE; GLboolean _GLEE_EXT_draw_range_elements = GL_FALSE; GLboolean _GLEE_WIN_phong_shading = GL_FALSE; GLboolean _GLEE_WIN_specular_fog = GL_FALSE; GLboolean _GLEE_EXT_light_texture = GL_FALSE; GLboolean _GLEE_SGIX_blend_alpha_minmax = GL_FALSE; GLboolean _GLEE_SGIX_impact_pixel_texture = GL_FALSE; GLboolean _GLEE_EXT_bgra = GL_FALSE; GLboolean _GLEE_SGIX_async = GL_FALSE; GLboolean _GLEE_SGIX_async_pixel = GL_FALSE; GLboolean _GLEE_SGIX_async_histogram = GL_FALSE; GLboolean _GLEE_INTEL_texture_scissor = GL_FALSE; GLboolean _GLEE_INTEL_parallel_arrays = GL_FALSE; GLboolean _GLEE_HP_occlusion_test = GL_FALSE; GLboolean _GLEE_EXT_pixel_transform = GL_FALSE; GLboolean _GLEE_EXT_pixel_transform_color_table = GL_FALSE; GLboolean _GLEE_EXT_shared_texture_palette = GL_FALSE; GLboolean _GLEE_EXT_separate_specular_color = GL_FALSE; GLboolean _GLEE_EXT_secondary_color = GL_FALSE; GLboolean _GLEE_EXT_texture_perturb_normal = GL_FALSE; GLboolean _GLEE_EXT_multi_draw_arrays = GL_FALSE; GLboolean _GLEE_EXT_fog_coord = GL_FALSE; GLboolean _GLEE_REND_screen_coordinates = GL_FALSE; GLboolean _GLEE_EXT_coordinate_frame = GL_FALSE; GLboolean _GLEE_EXT_texture_env_combine = GL_FALSE; GLboolean _GLEE_APPLE_specular_vector = GL_FALSE; GLboolean _GLEE_APPLE_transform_hint = GL_FALSE; GLboolean _GLEE_SGIX_fog_scale = GL_FALSE; GLboolean _GLEE_SUNX_constant_data = GL_FALSE; GLboolean _GLEE_SUN_global_alpha = GL_FALSE; GLboolean _GLEE_SUN_triangle_list = GL_FALSE; GLboolean _GLEE_SUN_vertex = GL_FALSE; GLboolean _GLEE_EXT_blend_func_separate = GL_FALSE; GLboolean _GLEE_INGR_color_clamp = GL_FALSE; GLboolean _GLEE_INGR_interlace_read = GL_FALSE; GLboolean _GLEE_EXT_stencil_wrap = GL_FALSE; GLboolean _GLEE_EXT_422_pixels = GL_FALSE; GLboolean _GLEE_NV_texgen_reflection = GL_FALSE; GLboolean _GLEE_EXT_texture_cube_map = GL_FALSE; GLboolean _GLEE_SUN_convolution_border_modes = GL_FALSE; GLboolean _GLEE_EXT_texture_env_add = GL_FALSE; GLboolean _GLEE_EXT_texture_lod_bias = GL_FALSE; GLboolean _GLEE_EXT_texture_filter_anisotropic = GL_FALSE; GLboolean _GLEE_EXT_vertex_weighting = GL_FALSE; GLboolean _GLEE_NV_light_max_exponent = GL_FALSE; GLboolean _GLEE_NV_vertex_array_range = GL_FALSE; GLboolean _GLEE_NV_register_combiners = GL_FALSE; GLboolean _GLEE_NV_fog_distance = GL_FALSE; GLboolean _GLEE_NV_texgen_emboss = GL_FALSE; GLboolean _GLEE_NV_blend_square = GL_FALSE; GLboolean _GLEE_NV_texture_env_combine4 = GL_FALSE; GLboolean _GLEE_MESA_resize_buffers = GL_FALSE; GLboolean _GLEE_MESA_window_pos = GL_FALSE; GLboolean _GLEE_EXT_texture_compression_s3tc = GL_FALSE; GLboolean _GLEE_IBM_cull_vertex = GL_FALSE; GLboolean _GLEE_IBM_multimode_draw_arrays = GL_FALSE; GLboolean _GLEE_IBM_vertex_array_lists = GL_FALSE; GLboolean _GLEE_SGIX_subsample = GL_FALSE; GLboolean _GLEE_SGIX_ycrcb_subsample = GL_FALSE; GLboolean _GLEE_SGIX_ycrcba = GL_FALSE; GLboolean _GLEE_SGI_depth_pass_instrument = GL_FALSE; GLboolean _GLEE_3DFX_texture_compression_FXT1 = GL_FALSE; GLboolean _GLEE_3DFX_multisample = GL_FALSE; GLboolean _GLEE_3DFX_tbuffer = GL_FALSE; GLboolean _GLEE_EXT_multisample = GL_FALSE; GLboolean _GLEE_SGIX_vertex_preclip = GL_FALSE; GLboolean _GLEE_SGIX_convolution_accuracy = GL_FALSE; GLboolean _GLEE_SGIX_resample = GL_FALSE; GLboolean _GLEE_SGIS_point_line_texgen = GL_FALSE; GLboolean _GLEE_SGIS_texture_color_mask = GL_FALSE; GLboolean _GLEE_EXT_texture_env_dot3 = GL_FALSE; GLboolean _GLEE_ATI_texture_mirror_once = GL_FALSE; GLboolean _GLEE_NV_fence = GL_FALSE; GLboolean _GLEE_IBM_texture_mirrored_repeat = GL_FALSE; GLboolean _GLEE_NV_evaluators = GL_FALSE; GLboolean _GLEE_NV_packed_depth_stencil = GL_FALSE; GLboolean _GLEE_NV_register_combiners2 = GL_FALSE; GLboolean _GLEE_NV_texture_compression_vtc = GL_FALSE; GLboolean _GLEE_NV_texture_rectangle = GL_FALSE; GLboolean _GLEE_NV_texture_shader = GL_FALSE; GLboolean _GLEE_NV_texture_shader2 = GL_FALSE; GLboolean _GLEE_NV_vertex_array_range2 = GL_FALSE; GLboolean _GLEE_NV_vertex_program = GL_FALSE; GLboolean _GLEE_SGIX_texture_coordinate_clamp = GL_FALSE; GLboolean _GLEE_SGIX_scalebias_hint = GL_FALSE; GLboolean _GLEE_OML_interlace = GL_FALSE; GLboolean _GLEE_OML_subsample = GL_FALSE; GLboolean _GLEE_OML_resample = GL_FALSE; GLboolean _GLEE_NV_copy_depth_to_color = GL_FALSE; GLboolean _GLEE_ATI_envmap_bumpmap = GL_FALSE; GLboolean _GLEE_ATI_fragment_shader = GL_FALSE; GLboolean _GLEE_ATI_pn_triangles = GL_FALSE; GLboolean _GLEE_ATI_vertex_array_object = GL_FALSE; GLboolean _GLEE_EXT_vertex_shader = GL_FALSE; GLboolean _GLEE_ATI_vertex_streams = GL_FALSE; GLboolean _GLEE_ATI_element_array = GL_FALSE; GLboolean _GLEE_SUN_mesh_array = GL_FALSE; GLboolean _GLEE_SUN_slice_accum = GL_FALSE; GLboolean _GLEE_NV_multisample_filter_hint = GL_FALSE; GLboolean _GLEE_NV_depth_clamp = GL_FALSE; GLboolean _GLEE_NV_occlusion_query = GL_FALSE; GLboolean _GLEE_NV_point_sprite = GL_FALSE; GLboolean _GLEE_NV_texture_shader3 = GL_FALSE; GLboolean _GLEE_NV_vertex_program1_1 = GL_FALSE; GLboolean _GLEE_EXT_shadow_funcs = GL_FALSE; GLboolean _GLEE_EXT_stencil_two_side = GL_FALSE; GLboolean _GLEE_ATI_text_fragment_shader = GL_FALSE; GLboolean _GLEE_APPLE_client_storage = GL_FALSE; GLboolean _GLEE_APPLE_element_array = GL_FALSE; GLboolean _GLEE_APPLE_fence = GL_FALSE; GLboolean _GLEE_APPLE_vertex_array_object = GL_FALSE; GLboolean _GLEE_APPLE_vertex_array_range = GL_FALSE; GLboolean _GLEE_APPLE_ycbcr_422 = GL_FALSE; GLboolean _GLEE_S3_s3tc = GL_FALSE; GLboolean _GLEE_ATI_draw_buffers = GL_FALSE; GLboolean _GLEE_ATI_pixel_format_float = GL_FALSE; GLboolean _GLEE_ATI_texture_env_combine3 = GL_FALSE; GLboolean _GLEE_ATI_texture_float = GL_FALSE; GLboolean _GLEE_NV_float_buffer = GL_FALSE; GLboolean _GLEE_NV_fragment_program = GL_FALSE; GLboolean _GLEE_NV_half_float = GL_FALSE; GLboolean _GLEE_NV_pixel_data_range = GL_FALSE; GLboolean _GLEE_NV_primitive_restart = GL_FALSE; GLboolean _GLEE_NV_texture_expand_normal = GL_FALSE; GLboolean _GLEE_NV_vertex_program2 = GL_FALSE; GLboolean _GLEE_ATI_map_object_buffer = GL_FALSE; GLboolean _GLEE_ATI_separate_stencil = GL_FALSE; GLboolean _GLEE_ATI_vertex_attrib_array_object = GL_FALSE; GLboolean _GLEE_OES_read_format = GL_FALSE; GLboolean _GLEE_EXT_depth_bounds_test = GL_FALSE; GLboolean _GLEE_EXT_texture_mirror_clamp = GL_FALSE; GLboolean _GLEE_EXT_blend_equation_separate = GL_FALSE; GLboolean _GLEE_MESA_pack_invert = GL_FALSE; GLboolean _GLEE_MESA_ycbcr_texture = GL_FALSE; GLboolean _GLEE_EXT_pixel_buffer_object = GL_FALSE; GLboolean _GLEE_NV_fragment_program_option = GL_FALSE; GLboolean _GLEE_NV_fragment_program2 = GL_FALSE; GLboolean _GLEE_NV_vertex_program2_option = GL_FALSE; GLboolean _GLEE_NV_vertex_program3 = GL_FALSE; GLboolean _GLEE_EXT_framebuffer_object = GL_FALSE; GLboolean _GLEE_GREMEDY_string_marker = GL_FALSE; GLboolean _GLEE_EXT_packed_depth_stencil = GL_FALSE; GLboolean _GLEE_EXT_stencil_clear_tag = GL_FALSE; GLboolean _GLEE_EXT_texture_sRGB = GL_FALSE; GLboolean _GLEE_EXT_framebuffer_blit = GL_FALSE; GLboolean _GLEE_EXT_framebuffer_multisample = GL_FALSE; GLboolean _GLEE_MESAX_texture_stack = GL_FALSE; GLboolean _GLEE_EXT_timer_query = GL_FALSE; GLboolean _GLEE_EXT_gpu_program_parameters = GL_FALSE; GLboolean _GLEE_APPLE_flush_buffer_range = GL_FALSE; GLboolean _GLEE_EXT_gpu_shader4 = GL_FALSE; GLboolean _GLEE_EXT_draw_instanced = GL_FALSE; GLboolean _GLEE_EXT_packed_float = GL_FALSE; GLboolean _GLEE_EXT_texture_array = GL_FALSE; GLboolean _GLEE_EXT_texture_buffer_object = GL_FALSE; GLboolean _GLEE_EXT_texture_compression_latc = GL_FALSE; GLboolean _GLEE_EXT_texture_compression_rgtc = GL_FALSE; GLboolean _GLEE_EXT_texture_shared_exponent = GL_FALSE; GLboolean _GLEE_NV_depth_buffer_float = GL_FALSE; GLboolean _GLEE_NV_framebuffer_multisample_coverage = GL_FALSE; GLboolean _GLEE_EXT_framebuffer_sRGB = GL_FALSE; GLboolean _GLEE_NV_geometry_shader4 = GL_FALSE; GLboolean _GLEE_NV_parameter_buffer_object = GL_FALSE; GLboolean _GLEE_EXT_draw_buffers2 = GL_FALSE; GLboolean _GLEE_NV_transform_feedback = GL_FALSE; GLboolean _GLEE_EXT_bindable_uniform = GL_FALSE; GLboolean _GLEE_EXT_texture_integer = GL_FALSE; GLboolean _GLEE_GREMEDY_frame_terminator = GL_FALSE; GLboolean _GLEE_NV_conditional_render = GL_FALSE; GLboolean _GLEE_NV_present_video = GL_FALSE; GLboolean _GLEE_EXT_transform_feedback = GL_FALSE; GLboolean _GLEE_EXT_direct_state_access = GL_FALSE; GLboolean _GLEE_EXT_vertex_array_bgra = GL_FALSE; GLboolean _GLEE_EXT_texture_swizzle = GL_FALSE; GLboolean _GLEE_NV_explicit_multisample = GL_FALSE; GLboolean _GLEE_NV_transform_feedback2 = GL_FALSE; GLboolean _GLEE_SGIX_texture_select = GL_FALSE; GLboolean _GLEE_INGR_blend_func_separate = GL_FALSE; GLboolean _GLEE_SGIX_depth_pass_instrument = GL_FALSE; GLboolean _GLEE_SGIX_igloo_interface = GL_FALSE; GLboolean _GLEE_EXT_fragment_lighting = GL_FALSE; GLboolean _GLEE_EXT_geometry_shader4 = GL_FALSE; GLboolean _GLEE_EXT_scene_marker = GL_FALSE; GLboolean _GLEE_EXT_texture_compression_dxt1 = GL_FALSE; GLboolean _GLEE_EXT_texture_env = GL_FALSE; GLboolean _GLEE_IBM_static_data = GL_FALSE; GLboolean _GLEE_NV_gpu_program4 = GL_FALSE; GLboolean _GLEE_OES_byte_coordinates = GL_FALSE; GLboolean _GLEE_OES_compressed_paletted_texture = GL_FALSE; GLboolean _GLEE_OES_single_precision = GL_FALSE; GLboolean _GLEE_SGIX_pixel_texture_bits = GL_FALSE; GLboolean _GLEE_SGIX_texture_range = GL_FALSE; /* GL Extension names */ char __GLeeGLExtensionNames[322][39]={ "GL_VERSION_1_2", "GL_ARB_imaging", "GL_VERSION_1_3", "GL_VERSION_1_4", "GL_VERSION_1_5", "GL_VERSION_2_0", "GL_VERSION_2_1", "GL_VERSION_3_0", "GL_ARB_multitexture", "GL_ARB_transpose_matrix", "GL_ARB_multisample", "GL_ARB_texture_env_add", "GL_ARB_texture_cube_map", "GL_ARB_texture_compression", "GL_ARB_texture_border_clamp", "GL_ARB_point_parameters", "GL_ARB_vertex_blend", "GL_ARB_matrix_palette", "GL_ARB_texture_env_combine", "GL_ARB_texture_env_crossbar", "GL_ARB_texture_env_dot3", "GL_ARB_texture_mirrored_repeat", "GL_ARB_depth_texture", "GL_ARB_shadow", "GL_ARB_shadow_ambient", "GL_ARB_window_pos", "GL_ARB_vertex_program", "GL_ARB_fragment_program", "GL_ARB_vertex_buffer_object", "GL_ARB_occlusion_query", "GL_ARB_shader_objects", "GL_ARB_vertex_shader", "GL_ARB_fragment_shader", "GL_ARB_shading_language_100", "GL_ARB_texture_non_power_of_two", "GL_ARB_point_sprite", "GL_ARB_fragment_program_shadow", "GL_ARB_draw_buffers", "GL_ARB_texture_rectangle", "GL_ARB_color_buffer_float", "GL_ARB_half_float_pixel", "GL_ARB_texture_float", "GL_ARB_pixel_buffer_object", "GL_ARB_depth_buffer_float", "GL_ARB_draw_instanced", "GL_ARB_framebuffer_object", "GL_ARB_framebuffer_sRGB", "GL_ARB_geometry_shader4", "GL_ARB_half_float_vertex", "GL_ARB_instanced_arrays", "GL_ARB_map_buffer_range", "GL_ARB_texture_buffer_object", "GL_ARB_texture_compression_rgtc", "GL_ARB_texture_rg", "GL_ARB_vertex_array_object", "GL_EXT_abgr", "GL_EXT_blend_color", "GL_EXT_polygon_offset", "GL_EXT_texture", "GL_EXT_texture3D", "GL_SGIS_texture_filter4", "GL_EXT_subtexture", "GL_EXT_copy_texture", "GL_EXT_histogram", "GL_EXT_convolution", "GL_SGI_color_matrix", "GL_SGI_color_table", "GL_SGIS_pixel_texture", "GL_SGIX_pixel_texture", "GL_SGIS_texture4D", "GL_SGI_texture_color_table", "GL_EXT_cmyka", "GL_EXT_texture_object", "GL_SGIS_detail_texture", "GL_SGIS_sharpen_texture", "GL_EXT_packed_pixels", "GL_SGIS_texture_lod", "GL_SGIS_multisample", "GL_EXT_rescale_normal", "GL_EXT_vertex_array", "GL_EXT_misc_attribute", "GL_SGIS_generate_mipmap", "GL_SGIX_clipmap", "GL_SGIX_shadow", "GL_SGIS_texture_edge_clamp", "GL_SGIS_texture_border_clamp", "GL_EXT_blend_minmax", "GL_EXT_blend_subtract", "GL_EXT_blend_logic_op", "GL_SGIX_interlace", "GL_SGIX_pixel_tiles", "GL_SGIS_texture_select", "GL_SGIX_sprite", "GL_SGIX_texture_multi_buffer", "GL_EXT_point_parameters", "GL_SGIS_point_parameters", "GL_SGIX_instruments", "GL_SGIX_texture_scale_bias", "GL_SGIX_framezoom", "GL_SGIX_tag_sample_buffer", "GL_FfdMaskSGIX", "GL_SGIX_polynomial_ffd", "GL_SGIX_reference_plane", "GL_SGIX_flush_raster", "GL_SGIX_depth_texture", "GL_SGIS_fog_function", "GL_SGIX_fog_offset", "GL_HP_image_transform", "GL_HP_convolution_border_modes", "GL_INGR_palette_buffer", "GL_SGIX_texture_add_env", "GL_EXT_color_subtable", "GL_PGI_vertex_hints", "GL_PGI_misc_hints", "GL_EXT_paletted_texture", "GL_EXT_clip_volume_hint", "GL_SGIX_list_priority", "GL_SGIX_ir_instrument1", "GL_SGIX_calligraphic_fragment", "GL_SGIX_texture_lod_bias", "GL_SGIX_shadow_ambient", "GL_EXT_index_texture", "GL_EXT_index_material", "GL_EXT_index_func", "GL_EXT_index_array_formats", "GL_EXT_compiled_vertex_array", "GL_EXT_cull_vertex", "GL_SGIX_ycrcb", "GL_SGIX_fragment_lighting", "GL_IBM_rasterpos_clip", "GL_HP_texture_lighting", "GL_EXT_draw_range_elements", "GL_WIN_phong_shading", "GL_WIN_specular_fog", "GL_EXT_light_texture", "GL_SGIX_blend_alpha_minmax", "GL_SGIX_impact_pixel_texture", "GL_EXT_bgra", "GL_SGIX_async", "GL_SGIX_async_pixel", "GL_SGIX_async_histogram", "GL_INTEL_texture_scissor", "GL_INTEL_parallel_arrays", "GL_HP_occlusion_test", "GL_EXT_pixel_transform", "GL_EXT_pixel_transform_color_table", "GL_EXT_shared_texture_palette", "GL_EXT_separate_specular_color", "GL_EXT_secondary_color", "GL_EXT_texture_perturb_normal", "GL_EXT_multi_draw_arrays", "GL_EXT_fog_coord", "GL_REND_screen_coordinates", "GL_EXT_coordinate_frame", "GL_EXT_texture_env_combine", "GL_APPLE_specular_vector", "GL_APPLE_transform_hint", "GL_SGIX_fog_scale", "GL_SUNX_constant_data", "GL_SUN_global_alpha", "GL_SUN_triangle_list", "GL_SUN_vertex", "GL_EXT_blend_func_separate", "GL_INGR_color_clamp", "GL_INGR_interlace_read", "GL_EXT_stencil_wrap", "GL_EXT_422_pixels", "GL_NV_texgen_reflection", "GL_EXT_texture_cube_map", "GL_SUN_convolution_border_modes", "GL_EXT_texture_env_add", "GL_EXT_texture_lod_bias", "GL_EXT_texture_filter_anisotropic", "GL_EXT_vertex_weighting", "GL_NV_light_max_exponent", "GL_NV_vertex_array_range", "GL_NV_register_combiners", "GL_NV_fog_distance", "GL_NV_texgen_emboss", "GL_NV_blend_square", "GL_NV_texture_env_combine4", "GL_MESA_resize_buffers", "GL_MESA_window_pos", "GL_EXT_texture_compression_s3tc", "GL_IBM_cull_vertex", "GL_IBM_multimode_draw_arrays", "GL_IBM_vertex_array_lists", "GL_SGIX_subsample", "GL_SGIX_ycrcb_subsample", "GL_SGIX_ycrcba", "GL_SGI_depth_pass_instrument", "GL_3DFX_texture_compression_FXT1", "GL_3DFX_multisample", "GL_3DFX_tbuffer", "GL_EXT_multisample", "GL_SGIX_vertex_preclip", "GL_SGIX_convolution_accuracy", "GL_SGIX_resample", "GL_SGIS_point_line_texgen", "GL_SGIS_texture_color_mask", "GL_EXT_texture_env_dot3", "GL_ATI_texture_mirror_once", "GL_NV_fence", "GL_IBM_texture_mirrored_repeat", "GL_NV_evaluators", "GL_NV_packed_depth_stencil", "GL_NV_register_combiners2", "GL_NV_texture_compression_vtc", "GL_NV_texture_rectangle", "GL_NV_texture_shader", "GL_NV_texture_shader2", "GL_NV_vertex_array_range2", "GL_NV_vertex_program", "GL_SGIX_texture_coordinate_clamp", "GL_SGIX_scalebias_hint", "GL_OML_interlace", "GL_OML_subsample", "GL_OML_resample", "GL_NV_copy_depth_to_color", "GL_ATI_envmap_bumpmap", "GL_ATI_fragment_shader", "GL_ATI_pn_triangles", "GL_ATI_vertex_array_object", "GL_EXT_vertex_shader", "GL_ATI_vertex_streams", "GL_ATI_element_array", "GL_SUN_mesh_array", "GL_SUN_slice_accum", "GL_NV_multisample_filter_hint", "GL_NV_depth_clamp", "GL_NV_occlusion_query", "GL_NV_point_sprite", "GL_NV_texture_shader3", "GL_NV_vertex_program1_1", "GL_EXT_shadow_funcs", "GL_EXT_stencil_two_side", "GL_ATI_text_fragment_shader", "GL_APPLE_client_storage", "GL_APPLE_element_array", "GL_APPLE_fence", "GL_APPLE_vertex_array_object", "GL_APPLE_vertex_array_range", "GL_APPLE_ycbcr_422", "GL_S3_s3tc", "GL_ATI_draw_buffers", "GL_ATI_pixel_format_float", "GL_ATI_texture_env_combine3", "GL_ATI_texture_float", "GL_NV_float_buffer", "GL_NV_fragment_program", "GL_NV_half_float", "GL_NV_pixel_data_range", "GL_NV_primitive_restart", "GL_NV_texture_expand_normal", "GL_NV_vertex_program2", "GL_ATI_map_object_buffer", "GL_ATI_separate_stencil", "GL_ATI_vertex_attrib_array_object", "GL_OES_read_format", "GL_EXT_depth_bounds_test", "GL_EXT_texture_mirror_clamp", "GL_EXT_blend_equation_separate", "GL_MESA_pack_invert", "GL_MESA_ycbcr_texture", "GL_EXT_pixel_buffer_object", "GL_NV_fragment_program_option", "GL_NV_fragment_program2", "GL_NV_vertex_program2_option", "GL_NV_vertex_program3", "GL_EXT_framebuffer_object", "GL_GREMEDY_string_marker", "GL_EXT_packed_depth_stencil", "GL_EXT_stencil_clear_tag", "GL_EXT_texture_sRGB", "GL_EXT_framebuffer_blit", "GL_EXT_framebuffer_multisample", "GL_MESAX_texture_stack", "GL_EXT_timer_query", "GL_EXT_gpu_program_parameters", "GL_APPLE_flush_buffer_range", "GL_EXT_gpu_shader4", "GL_EXT_draw_instanced", "GL_EXT_packed_float", "GL_EXT_texture_array", "GL_EXT_texture_buffer_object", "GL_EXT_texture_compression_latc", "GL_EXT_texture_compression_rgtc", "GL_EXT_texture_shared_exponent", "GL_NV_depth_buffer_float", "GL_NV_framebuffer_multisample_coverage", "GL_EXT_framebuffer_sRGB", "GL_NV_geometry_shader4", "GL_NV_parameter_buffer_object", "GL_EXT_draw_buffers2", "GL_NV_transform_feedback", "GL_EXT_bindable_uniform", "GL_EXT_texture_integer", "GL_GREMEDY_frame_terminator", "GL_NV_conditional_render", "GL_NV_present_video", "GL_EXT_transform_feedback", "GL_EXT_direct_state_access", "GL_EXT_vertex_array_bgra", "GL_EXT_texture_swizzle", "GL_NV_explicit_multisample", "GL_NV_transform_feedback2", "GL_SGIX_texture_select", "GL_INGR_blend_func_separate", "GL_SGIX_depth_pass_instrument", "GL_SGIX_igloo_interface", "GL_EXT_fragment_lighting", "GL_EXT_geometry_shader4", "GL_EXT_scene_marker", "GL_EXT_texture_compression_dxt1", "GL_EXT_texture_env", "GL_IBM_static_data", "GL_NV_gpu_program4", "GL_OES_byte_coordinates", "GL_OES_compressed_paletted_texture", "GL_OES_single_precision", "GL_SGIX_pixel_texture_bits", "GL_SGIX_texture_range" }; int __GLeeGLNumExtensions=322; /* GL_VERSION_1_2 */ #ifdef __GLEE_GL_VERSION_1_2 #ifndef GLEE_C_DEFINED_glBlendColor #define GLEE_C_DEFINED_glBlendColor void __stdcall GLee_Lazy_glBlendColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) {if (GLeeInit()) glBlendColor(red, green, blue, alpha);} GLEEPFNGLBLENDCOLORPROC GLeeFuncPtr_glBlendColor=GLee_Lazy_glBlendColor; #endif #ifndef GLEE_C_DEFINED_glBlendEquation #define GLEE_C_DEFINED_glBlendEquation void __stdcall GLee_Lazy_glBlendEquation(GLenum mode) {if (GLeeInit()) glBlendEquation(mode);} GLEEPFNGLBLENDEQUATIONPROC GLeeFuncPtr_glBlendEquation=GLee_Lazy_glBlendEquation; #endif #ifndef GLEE_C_DEFINED_glDrawRangeElements #define GLEE_C_DEFINED_glDrawRangeElements void __stdcall GLee_Lazy_glDrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid * indices) {if (GLeeInit()) glDrawRangeElements(mode, start, end, count, type, indices);} GLEEPFNGLDRAWRANGEELEMENTSPROC GLeeFuncPtr_glDrawRangeElements=GLee_Lazy_glDrawRangeElements; #endif #ifndef GLEE_C_DEFINED_glColorTable #define GLEE_C_DEFINED_glColorTable void __stdcall GLee_Lazy_glColorTable(GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid * table) {if (GLeeInit()) glColorTable(target, internalformat, width, format, type, table);} GLEEPFNGLCOLORTABLEPROC GLeeFuncPtr_glColorTable=GLee_Lazy_glColorTable; #endif #ifndef GLEE_C_DEFINED_glColorTableParameterfv #define GLEE_C_DEFINED_glColorTableParameterfv void __stdcall GLee_Lazy_glColorTableParameterfv(GLenum target, GLenum pname, const GLfloat * params) {if (GLeeInit()) glColorTableParameterfv(target, pname, params);} GLEEPFNGLCOLORTABLEPARAMETERFVPROC GLeeFuncPtr_glColorTableParameterfv=GLee_Lazy_glColorTableParameterfv; #endif #ifndef GLEE_C_DEFINED_glColorTableParameteriv #define GLEE_C_DEFINED_glColorTableParameteriv void __stdcall GLee_Lazy_glColorTableParameteriv(GLenum target, GLenum pname, const GLint * params) {if (GLeeInit()) glColorTableParameteriv(target, pname, params);} GLEEPFNGLCOLORTABLEPARAMETERIVPROC GLeeFuncPtr_glColorTableParameteriv=GLee_Lazy_glColorTableParameteriv; #endif #ifndef GLEE_C_DEFINED_glCopyColorTable #define GLEE_C_DEFINED_glCopyColorTable void __stdcall GLee_Lazy_glCopyColorTable(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width) {if (GLeeInit()) glCopyColorTable(target, internalformat, x, y, width);} GLEEPFNGLCOPYCOLORTABLEPROC GLeeFuncPtr_glCopyColorTable=GLee_Lazy_glCopyColorTable; #endif #ifndef GLEE_C_DEFINED_glGetColorTable #define GLEE_C_DEFINED_glGetColorTable void __stdcall GLee_Lazy_glGetColorTable(GLenum target, GLenum format, GLenum type, GLvoid * table) {if (GLeeInit()) glGetColorTable(target, format, type, table);} GLEEPFNGLGETCOLORTABLEPROC GLeeFuncPtr_glGetColorTable=GLee_Lazy_glGetColorTable; #endif #ifndef GLEE_C_DEFINED_glGetColorTableParameterfv #define GLEE_C_DEFINED_glGetColorTableParameterfv void __stdcall GLee_Lazy_glGetColorTableParameterfv(GLenum target, GLenum pname, GLfloat * params) {if (GLeeInit()) glGetColorTableParameterfv(target, pname, params);} GLEEPFNGLGETCOLORTABLEPARAMETERFVPROC GLeeFuncPtr_glGetColorTableParameterfv=GLee_Lazy_glGetColorTableParameterfv; #endif #ifndef GLEE_C_DEFINED_glGetColorTableParameteriv #define GLEE_C_DEFINED_glGetColorTableParameteriv void __stdcall GLee_Lazy_glGetColorTableParameteriv(GLenum target, GLenum pname, GLint * params) {if (GLeeInit()) glGetColorTableParameteriv(target, pname, params);} GLEEPFNGLGETCOLORTABLEPARAMETERIVPROC GLeeFuncPtr_glGetColorTableParameteriv=GLee_Lazy_glGetColorTableParameteriv; #endif #ifndef GLEE_C_DEFINED_glColorSubTable #define GLEE_C_DEFINED_glColorSubTable void __stdcall GLee_Lazy_glColorSubTable(GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid * data) {if (GLeeInit()) glColorSubTable(target, start, count, format, type, data);} GLEEPFNGLCOLORSUBTABLEPROC GLeeFuncPtr_glColorSubTable=GLee_Lazy_glColorSubTable; #endif #ifndef GLEE_C_DEFINED_glCopyColorSubTable #define GLEE_C_DEFINED_glCopyColorSubTable void __stdcall GLee_Lazy_glCopyColorSubTable(GLenum target, GLsizei start, GLint x, GLint y, GLsizei width) {if (GLeeInit()) glCopyColorSubTable(target, start, x, y, width);} GLEEPFNGLCOPYCOLORSUBTABLEPROC GLeeFuncPtr_glCopyColorSubTable=GLee_Lazy_glCopyColorSubTable; #endif #ifndef GLEE_C_DEFINED_glConvolutionFilter1D #define GLEE_C_DEFINED_glConvolutionFilter1D void __stdcall GLee_Lazy_glConvolutionFilter1D(GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid * image) {if (GLeeInit()) glConvolutionFilter1D(target, internalformat, width, format, type, image);} GLEEPFNGLCONVOLUTIONFILTER1DPROC GLeeFuncPtr_glConvolutionFilter1D=GLee_Lazy_glConvolutionFilter1D; #endif #ifndef GLEE_C_DEFINED_glConvolutionFilter2D #define GLEE_C_DEFINED_glConvolutionFilter2D void __stdcall GLee_Lazy_glConvolutionFilter2D(GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * image) {if (GLeeInit()) glConvolutionFilter2D(target, internalformat, width, height, format, type, image);} GLEEPFNGLCONVOLUTIONFILTER2DPROC GLeeFuncPtr_glConvolutionFilter2D=GLee_Lazy_glConvolutionFilter2D; #endif #ifndef GLEE_C_DEFINED_glConvolutionParameterf #define GLEE_C_DEFINED_glConvolutionParameterf void __stdcall GLee_Lazy_glConvolutionParameterf(GLenum target, GLenum pname, GLfloat params) {if (GLeeInit()) glConvolutionParameterf(target, pname, params);} GLEEPFNGLCONVOLUTIONPARAMETERFPROC GLeeFuncPtr_glConvolutionParameterf=GLee_Lazy_glConvolutionParameterf; #endif #ifndef GLEE_C_DEFINED_glConvolutionParameterfv #define GLEE_C_DEFINED_glConvolutionParameterfv void __stdcall GLee_Lazy_glConvolutionParameterfv(GLenum target, GLenum pname, const GLfloat * params) {if (GLeeInit()) glConvolutionParameterfv(target, pname, params);} GLEEPFNGLCONVOLUTIONPARAMETERFVPROC GLeeFuncPtr_glConvolutionParameterfv=GLee_Lazy_glConvolutionParameterfv; #endif #ifndef GLEE_C_DEFINED_glConvolutionParameteri #define GLEE_C_DEFINED_glConvolutionParameteri void __stdcall GLee_Lazy_glConvolutionParameteri(GLenum target, GLenum pname, GLint params) {if (GLeeInit()) glConvolutionParameteri(target, pname, params);} GLEEPFNGLCONVOLUTIONPARAMETERIPROC GLeeFuncPtr_glConvolutionParameteri=GLee_Lazy_glConvolutionParameteri; #endif #ifndef GLEE_C_DEFINED_glConvolutionParameteriv #define GLEE_C_DEFINED_glConvolutionParameteriv void __stdcall GLee_Lazy_glConvolutionParameteriv(GLenum target, GLenum pname, const GLint * params) {if (GLeeInit()) glConvolutionParameteriv(target, pname, params);} GLEEPFNGLCONVOLUTIONPARAMETERIVPROC GLeeFuncPtr_glConvolutionParameteriv=GLee_Lazy_glConvolutionParameteriv; #endif #ifndef GLEE_C_DEFINED_glCopyConvolutionFilter1D #define GLEE_C_DEFINED_glCopyConvolutionFilter1D void __stdcall GLee_Lazy_glCopyConvolutionFilter1D(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width) {if (GLeeInit()) glCopyConvolutionFilter1D(target, internalformat, x, y, width);} GLEEPFNGLCOPYCONVOLUTIONFILTER1DPROC GLeeFuncPtr_glCopyConvolutionFilter1D=GLee_Lazy_glCopyConvolutionFilter1D; #endif #ifndef GLEE_C_DEFINED_glCopyConvolutionFilter2D #define GLEE_C_DEFINED_glCopyConvolutionFilter2D void __stdcall GLee_Lazy_glCopyConvolutionFilter2D(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height) {if (GLeeInit()) glCopyConvolutionFilter2D(target, internalformat, x, y, width, height);} GLEEPFNGLCOPYCONVOLUTIONFILTER2DPROC GLeeFuncPtr_glCopyConvolutionFilter2D=GLee_Lazy_glCopyConvolutionFilter2D; #endif #ifndef GLEE_C_DEFINED_glGetConvolutionFilter #define GLEE_C_DEFINED_glGetConvolutionFilter void __stdcall GLee_Lazy_glGetConvolutionFilter(GLenum target, GLenum format, GLenum type, GLvoid * image) {if (GLeeInit()) glGetConvolutionFilter(target, format, type, image);} GLEEPFNGLGETCONVOLUTIONFILTERPROC GLeeFuncPtr_glGetConvolutionFilter=GLee_Lazy_glGetConvolutionFilter; #endif #ifndef GLEE_C_DEFINED_glGetConvolutionParameterfv #define GLEE_C_DEFINED_glGetConvolutionParameterfv void __stdcall GLee_Lazy_glGetConvolutionParameterfv(GLenum target, GLenum pname, GLfloat * params) {if (GLeeInit()) glGetConvolutionParameterfv(target, pname, params);} GLEEPFNGLGETCONVOLUTIONPARAMETERFVPROC GLeeFuncPtr_glGetConvolutionParameterfv=GLee_Lazy_glGetConvolutionParameterfv; #endif #ifndef GLEE_C_DEFINED_glGetConvolutionParameteriv #define GLEE_C_DEFINED_glGetConvolutionParameteriv void __stdcall GLee_Lazy_glGetConvolutionParameteriv(GLenum target, GLenum pname, GLint * params) {if (GLeeInit()) glGetConvolutionParameteriv(target, pname, params);} GLEEPFNGLGETCONVOLUTIONPARAMETERIVPROC GLeeFuncPtr_glGetConvolutionParameteriv=GLee_Lazy_glGetConvolutionParameteriv; #endif #ifndef GLEE_C_DEFINED_glGetSeparableFilter #define GLEE_C_DEFINED_glGetSeparableFilter void __stdcall GLee_Lazy_glGetSeparableFilter(GLenum target, GLenum format, GLenum type, GLvoid * row, GLvoid * column, GLvoid * span) {if (GLeeInit()) glGetSeparableFilter(target, format, type, row, column, span);} GLEEPFNGLGETSEPARABLEFILTERPROC GLeeFuncPtr_glGetSeparableFilter=GLee_Lazy_glGetSeparableFilter; #endif #ifndef GLEE_C_DEFINED_glSeparableFilter2D #define GLEE_C_DEFINED_glSeparableFilter2D void __stdcall GLee_Lazy_glSeparableFilter2D(GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * row, const GLvoid * column) {if (GLeeInit()) glSeparableFilter2D(target, internalformat, width, height, format, type, row, column);} GLEEPFNGLSEPARABLEFILTER2DPROC GLeeFuncPtr_glSeparableFilter2D=GLee_Lazy_glSeparableFilter2D; #endif #ifndef GLEE_C_DEFINED_glGetHistogram #define GLEE_C_DEFINED_glGetHistogram void __stdcall GLee_Lazy_glGetHistogram(GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid * values) {if (GLeeInit()) glGetHistogram(target, reset, format, type, values);} GLEEPFNGLGETHISTOGRAMPROC GLeeFuncPtr_glGetHistogram=GLee_Lazy_glGetHistogram; #endif #ifndef GLEE_C_DEFINED_glGetHistogramParameterfv #define GLEE_C_DEFINED_glGetHistogramParameterfv void __stdcall GLee_Lazy_glGetHistogramParameterfv(GLenum target, GLenum pname, GLfloat * params) {if (GLeeInit()) glGetHistogramParameterfv(target, pname, params);} GLEEPFNGLGETHISTOGRAMPARAMETERFVPROC GLeeFuncPtr_glGetHistogramParameterfv=GLee_Lazy_glGetHistogramParameterfv; #endif #ifndef GLEE_C_DEFINED_glGetHistogramParameteriv #define GLEE_C_DEFINED_glGetHistogramParameteriv void __stdcall GLee_Lazy_glGetHistogramParameteriv(GLenum target, GLenum pname, GLint * params) {if (GLeeInit()) glGetHistogramParameteriv(target, pname, params);} GLEEPFNGLGETHISTOGRAMPARAMETERIVPROC GLeeFuncPtr_glGetHistogramParameteriv=GLee_Lazy_glGetHistogramParameteriv; #endif #ifndef GLEE_C_DEFINED_glGetMinmax #define GLEE_C_DEFINED_glGetMinmax void __stdcall GLee_Lazy_glGetMinmax(GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid * values) {if (GLeeInit()) glGetMinmax(target, reset, format, type, values);} GLEEPFNGLGETMINMAXPROC GLeeFuncPtr_glGetMinmax=GLee_Lazy_glGetMinmax; #endif #ifndef GLEE_C_DEFINED_glGetMinmaxParameterfv #define GLEE_C_DEFINED_glGetMinmaxParameterfv void __stdcall GLee_Lazy_glGetMinmaxParameterfv(GLenum target, GLenum pname, GLfloat * params) {if (GLeeInit()) glGetMinmaxParameterfv(target, pname, params);} GLEEPFNGLGETMINMAXPARAMETERFVPROC GLeeFuncPtr_glGetMinmaxParameterfv=GLee_Lazy_glGetMinmaxParameterfv; #endif #ifndef GLEE_C_DEFINED_glGetMinmaxParameteriv #define GLEE_C_DEFINED_glGetMinmaxParameteriv void __stdcall GLee_Lazy_glGetMinmaxParameteriv(GLenum target, GLenum pname, GLint * params) {if (GLeeInit()) glGetMinmaxParameteriv(target, pname, params);} GLEEPFNGLGETMINMAXPARAMETERIVPROC GLeeFuncPtr_glGetMinmaxParameteriv=GLee_Lazy_glGetMinmaxParameteriv; #endif #ifndef GLEE_C_DEFINED_glHistogram #define GLEE_C_DEFINED_glHistogram void __stdcall GLee_Lazy_glHistogram(GLenum target, GLsizei width, GLenum internalformat, GLboolean sink) {if (GLeeInit()) glHistogram(target, width, internalformat, sink);} GLEEPFNGLHISTOGRAMPROC GLeeFuncPtr_glHistogram=GLee_Lazy_glHistogram; #endif #ifndef GLEE_C_DEFINED_glMinmax #define GLEE_C_DEFINED_glMinmax void __stdcall GLee_Lazy_glMinmax(GLenum target, GLenum internalformat, GLboolean sink) {if (GLeeInit()) glMinmax(target, internalformat, sink);} GLEEPFNGLMINMAXPROC GLeeFuncPtr_glMinmax=GLee_Lazy_glMinmax; #endif #ifndef GLEE_C_DEFINED_glResetHistogram #define GLEE_C_DEFINED_glResetHistogram void __stdcall GLee_Lazy_glResetHistogram(GLenum target) {if (GLeeInit()) glResetHistogram(target);} GLEEPFNGLRESETHISTOGRAMPROC GLeeFuncPtr_glResetHistogram=GLee_Lazy_glResetHistogram; #endif #ifndef GLEE_C_DEFINED_glResetMinmax #define GLEE_C_DEFINED_glResetMinmax void __stdcall GLee_Lazy_glResetMinmax(GLenum target) {if (GLeeInit()) glResetMinmax(target);} GLEEPFNGLRESETMINMAXPROC GLeeFuncPtr_glResetMinmax=GLee_Lazy_glResetMinmax; #endif #ifndef GLEE_C_DEFINED_glTexImage3D #define GLEE_C_DEFINED_glTexImage3D void __stdcall GLee_Lazy_glTexImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid * pixels) {if (GLeeInit()) glTexImage3D(target, level, internalformat, width, height, depth, border, format, type, pixels);} GLEEPFNGLTEXIMAGE3DPROC GLeeFuncPtr_glTexImage3D=GLee_Lazy_glTexImage3D; #endif #ifndef GLEE_C_DEFINED_glTexSubImage3D #define GLEE_C_DEFINED_glTexSubImage3D void __stdcall GLee_Lazy_glTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid * pixels) {if (GLeeInit()) glTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels);} GLEEPFNGLTEXSUBIMAGE3DPROC GLeeFuncPtr_glTexSubImage3D=GLee_Lazy_glTexSubImage3D; #endif #ifndef GLEE_C_DEFINED_glCopyTexSubImage3D #define GLEE_C_DEFINED_glCopyTexSubImage3D void __stdcall GLee_Lazy_glCopyTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) {if (GLeeInit()) glCopyTexSubImage3D(target, level, xoffset, yoffset, zoffset, x, y, width, height);} GLEEPFNGLCOPYTEXSUBIMAGE3DPROC GLeeFuncPtr_glCopyTexSubImage3D=GLee_Lazy_glCopyTexSubImage3D; #endif #endif /* GL_ARB_imaging */ #ifdef __GLEE_GL_ARB_imaging #endif /* GL_VERSION_1_3 */ #ifdef __GLEE_GL_VERSION_1_3 #ifndef GLEE_C_DEFINED_glActiveTexture #define GLEE_C_DEFINED_glActiveTexture void __stdcall GLee_Lazy_glActiveTexture(GLenum texture) {if (GLeeInit()) glActiveTexture(texture);} GLEEPFNGLACTIVETEXTUREPROC GLeeFuncPtr_glActiveTexture=GLee_Lazy_glActiveTexture; #endif #ifndef GLEE_C_DEFINED_glClientActiveTexture #define GLEE_C_DEFINED_glClientActiveTexture void __stdcall GLee_Lazy_glClientActiveTexture(GLenum texture) {if (GLeeInit()) glClientActiveTexture(texture);} GLEEPFNGLCLIENTACTIVETEXTUREPROC GLeeFuncPtr_glClientActiveTexture=GLee_Lazy_glClientActiveTexture; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord1d #define GLEE_C_DEFINED_glMultiTexCoord1d void __stdcall GLee_Lazy_glMultiTexCoord1d(GLenum target, GLdouble s) {if (GLeeInit()) glMultiTexCoord1d(target, s);} GLEEPFNGLMULTITEXCOORD1DPROC GLeeFuncPtr_glMultiTexCoord1d=GLee_Lazy_glMultiTexCoord1d; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord1dv #define GLEE_C_DEFINED_glMultiTexCoord1dv void __stdcall GLee_Lazy_glMultiTexCoord1dv(GLenum target, const GLdouble * v) {if (GLeeInit()) glMultiTexCoord1dv(target, v);} GLEEPFNGLMULTITEXCOORD1DVPROC GLeeFuncPtr_glMultiTexCoord1dv=GLee_Lazy_glMultiTexCoord1dv; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord1f #define GLEE_C_DEFINED_glMultiTexCoord1f void __stdcall GLee_Lazy_glMultiTexCoord1f(GLenum target, GLfloat s) {if (GLeeInit()) glMultiTexCoord1f(target, s);} GLEEPFNGLMULTITEXCOORD1FPROC GLeeFuncPtr_glMultiTexCoord1f=GLee_Lazy_glMultiTexCoord1f; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord1fv #define GLEE_C_DEFINED_glMultiTexCoord1fv void __stdcall GLee_Lazy_glMultiTexCoord1fv(GLenum target, const GLfloat * v) {if (GLeeInit()) glMultiTexCoord1fv(target, v);} GLEEPFNGLMULTITEXCOORD1FVPROC GLeeFuncPtr_glMultiTexCoord1fv=GLee_Lazy_glMultiTexCoord1fv; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord1i #define GLEE_C_DEFINED_glMultiTexCoord1i void __stdcall GLee_Lazy_glMultiTexCoord1i(GLenum target, GLint s) {if (GLeeInit()) glMultiTexCoord1i(target, s);} GLEEPFNGLMULTITEXCOORD1IPROC GLeeFuncPtr_glMultiTexCoord1i=GLee_Lazy_glMultiTexCoord1i; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord1iv #define GLEE_C_DEFINED_glMultiTexCoord1iv void __stdcall GLee_Lazy_glMultiTexCoord1iv(GLenum target, const GLint * v) {if (GLeeInit()) glMultiTexCoord1iv(target, v);} GLEEPFNGLMULTITEXCOORD1IVPROC GLeeFuncPtr_glMultiTexCoord1iv=GLee_Lazy_glMultiTexCoord1iv; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord1s #define GLEE_C_DEFINED_glMultiTexCoord1s void __stdcall GLee_Lazy_glMultiTexCoord1s(GLenum target, GLshort s) {if (GLeeInit()) glMultiTexCoord1s(target, s);} GLEEPFNGLMULTITEXCOORD1SPROC GLeeFuncPtr_glMultiTexCoord1s=GLee_Lazy_glMultiTexCoord1s; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord1sv #define GLEE_C_DEFINED_glMultiTexCoord1sv void __stdcall GLee_Lazy_glMultiTexCoord1sv(GLenum target, const GLshort * v) {if (GLeeInit()) glMultiTexCoord1sv(target, v);} GLEEPFNGLMULTITEXCOORD1SVPROC GLeeFuncPtr_glMultiTexCoord1sv=GLee_Lazy_glMultiTexCoord1sv; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord2d #define GLEE_C_DEFINED_glMultiTexCoord2d void __stdcall GLee_Lazy_glMultiTexCoord2d(GLenum target, GLdouble s, GLdouble t) {if (GLeeInit()) glMultiTexCoord2d(target, s, t);} GLEEPFNGLMULTITEXCOORD2DPROC GLeeFuncPtr_glMultiTexCoord2d=GLee_Lazy_glMultiTexCoord2d; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord2dv #define GLEE_C_DEFINED_glMultiTexCoord2dv void __stdcall GLee_Lazy_glMultiTexCoord2dv(GLenum target, const GLdouble * v) {if (GLeeInit()) glMultiTexCoord2dv(target, v);} GLEEPFNGLMULTITEXCOORD2DVPROC GLeeFuncPtr_glMultiTexCoord2dv=GLee_Lazy_glMultiTexCoord2dv; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord2f #define GLEE_C_DEFINED_glMultiTexCoord2f void __stdcall GLee_Lazy_glMultiTexCoord2f(GLenum target, GLfloat s, GLfloat t) {if (GLeeInit()) glMultiTexCoord2f(target, s, t);} GLEEPFNGLMULTITEXCOORD2FPROC GLeeFuncPtr_glMultiTexCoord2f=GLee_Lazy_glMultiTexCoord2f; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord2fv #define GLEE_C_DEFINED_glMultiTexCoord2fv void __stdcall GLee_Lazy_glMultiTexCoord2fv(GLenum target, const GLfloat * v) {if (GLeeInit()) glMultiTexCoord2fv(target, v);} GLEEPFNGLMULTITEXCOORD2FVPROC GLeeFuncPtr_glMultiTexCoord2fv=GLee_Lazy_glMultiTexCoord2fv; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord2i #define GLEE_C_DEFINED_glMultiTexCoord2i void __stdcall GLee_Lazy_glMultiTexCoord2i(GLenum target, GLint s, GLint t) {if (GLeeInit()) glMultiTexCoord2i(target, s, t);} GLEEPFNGLMULTITEXCOORD2IPROC GLeeFuncPtr_glMultiTexCoord2i=GLee_Lazy_glMultiTexCoord2i; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord2iv #define GLEE_C_DEFINED_glMultiTexCoord2iv void __stdcall GLee_Lazy_glMultiTexCoord2iv(GLenum target, const GLint * v) {if (GLeeInit()) glMultiTexCoord2iv(target, v);} GLEEPFNGLMULTITEXCOORD2IVPROC GLeeFuncPtr_glMultiTexCoord2iv=GLee_Lazy_glMultiTexCoord2iv; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord2s #define GLEE_C_DEFINED_glMultiTexCoord2s void __stdcall GLee_Lazy_glMultiTexCoord2s(GLenum target, GLshort s, GLshort t) {if (GLeeInit()) glMultiTexCoord2s(target, s, t);} GLEEPFNGLMULTITEXCOORD2SPROC GLeeFuncPtr_glMultiTexCoord2s=GLee_Lazy_glMultiTexCoord2s; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord2sv #define GLEE_C_DEFINED_glMultiTexCoord2sv void __stdcall GLee_Lazy_glMultiTexCoord2sv(GLenum target, const GLshort * v) {if (GLeeInit()) glMultiTexCoord2sv(target, v);} GLEEPFNGLMULTITEXCOORD2SVPROC GLeeFuncPtr_glMultiTexCoord2sv=GLee_Lazy_glMultiTexCoord2sv; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord3d #define GLEE_C_DEFINED_glMultiTexCoord3d void __stdcall GLee_Lazy_glMultiTexCoord3d(GLenum target, GLdouble s, GLdouble t, GLdouble r) {if (GLeeInit()) glMultiTexCoord3d(target, s, t, r);} GLEEPFNGLMULTITEXCOORD3DPROC GLeeFuncPtr_glMultiTexCoord3d=GLee_Lazy_glMultiTexCoord3d; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord3dv #define GLEE_C_DEFINED_glMultiTexCoord3dv void __stdcall GLee_Lazy_glMultiTexCoord3dv(GLenum target, const GLdouble * v) {if (GLeeInit()) glMultiTexCoord3dv(target, v);} GLEEPFNGLMULTITEXCOORD3DVPROC GLeeFuncPtr_glMultiTexCoord3dv=GLee_Lazy_glMultiTexCoord3dv; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord3f #define GLEE_C_DEFINED_glMultiTexCoord3f void __stdcall GLee_Lazy_glMultiTexCoord3f(GLenum target, GLfloat s, GLfloat t, GLfloat r) {if (GLeeInit()) glMultiTexCoord3f(target, s, t, r);} GLEEPFNGLMULTITEXCOORD3FPROC GLeeFuncPtr_glMultiTexCoord3f=GLee_Lazy_glMultiTexCoord3f; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord3fv #define GLEE_C_DEFINED_glMultiTexCoord3fv void __stdcall GLee_Lazy_glMultiTexCoord3fv(GLenum target, const GLfloat * v) {if (GLeeInit()) glMultiTexCoord3fv(target, v);} GLEEPFNGLMULTITEXCOORD3FVPROC GLeeFuncPtr_glMultiTexCoord3fv=GLee_Lazy_glMultiTexCoord3fv; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord3i #define GLEE_C_DEFINED_glMultiTexCoord3i void __stdcall GLee_Lazy_glMultiTexCoord3i(GLenum target, GLint s, GLint t, GLint r) {if (GLeeInit()) glMultiTexCoord3i(target, s, t, r);} GLEEPFNGLMULTITEXCOORD3IPROC GLeeFuncPtr_glMultiTexCoord3i=GLee_Lazy_glMultiTexCoord3i; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord3iv #define GLEE_C_DEFINED_glMultiTexCoord3iv void __stdcall GLee_Lazy_glMultiTexCoord3iv(GLenum target, const GLint * v) {if (GLeeInit()) glMultiTexCoord3iv(target, v);} GLEEPFNGLMULTITEXCOORD3IVPROC GLeeFuncPtr_glMultiTexCoord3iv=GLee_Lazy_glMultiTexCoord3iv; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord3s #define GLEE_C_DEFINED_glMultiTexCoord3s void __stdcall GLee_Lazy_glMultiTexCoord3s(GLenum target, GLshort s, GLshort t, GLshort r) {if (GLeeInit()) glMultiTexCoord3s(target, s, t, r);} GLEEPFNGLMULTITEXCOORD3SPROC GLeeFuncPtr_glMultiTexCoord3s=GLee_Lazy_glMultiTexCoord3s; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord3sv #define GLEE_C_DEFINED_glMultiTexCoord3sv void __stdcall GLee_Lazy_glMultiTexCoord3sv(GLenum target, const GLshort * v) {if (GLeeInit()) glMultiTexCoord3sv(target, v);} GLEEPFNGLMULTITEXCOORD3SVPROC GLeeFuncPtr_glMultiTexCoord3sv=GLee_Lazy_glMultiTexCoord3sv; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord4d #define GLEE_C_DEFINED_glMultiTexCoord4d void __stdcall GLee_Lazy_glMultiTexCoord4d(GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q) {if (GLeeInit()) glMultiTexCoord4d(target, s, t, r, q);} GLEEPFNGLMULTITEXCOORD4DPROC GLeeFuncPtr_glMultiTexCoord4d=GLee_Lazy_glMultiTexCoord4d; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord4dv #define GLEE_C_DEFINED_glMultiTexCoord4dv void __stdcall GLee_Lazy_glMultiTexCoord4dv(GLenum target, const GLdouble * v) {if (GLeeInit()) glMultiTexCoord4dv(target, v);} GLEEPFNGLMULTITEXCOORD4DVPROC GLeeFuncPtr_glMultiTexCoord4dv=GLee_Lazy_glMultiTexCoord4dv; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord4f #define GLEE_C_DEFINED_glMultiTexCoord4f void __stdcall GLee_Lazy_glMultiTexCoord4f(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q) {if (GLeeInit()) glMultiTexCoord4f(target, s, t, r, q);} GLEEPFNGLMULTITEXCOORD4FPROC GLeeFuncPtr_glMultiTexCoord4f=GLee_Lazy_glMultiTexCoord4f; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord4fv #define GLEE_C_DEFINED_glMultiTexCoord4fv void __stdcall GLee_Lazy_glMultiTexCoord4fv(GLenum target, const GLfloat * v) {if (GLeeInit()) glMultiTexCoord4fv(target, v);} GLEEPFNGLMULTITEXCOORD4FVPROC GLeeFuncPtr_glMultiTexCoord4fv=GLee_Lazy_glMultiTexCoord4fv; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord4i #define GLEE_C_DEFINED_glMultiTexCoord4i void __stdcall GLee_Lazy_glMultiTexCoord4i(GLenum target, GLint s, GLint t, GLint r, GLint q) {if (GLeeInit()) glMultiTexCoord4i(target, s, t, r, q);} GLEEPFNGLMULTITEXCOORD4IPROC GLeeFuncPtr_glMultiTexCoord4i=GLee_Lazy_glMultiTexCoord4i; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord4iv #define GLEE_C_DEFINED_glMultiTexCoord4iv void __stdcall GLee_Lazy_glMultiTexCoord4iv(GLenum target, const GLint * v) {if (GLeeInit()) glMultiTexCoord4iv(target, v);} GLEEPFNGLMULTITEXCOORD4IVPROC GLeeFuncPtr_glMultiTexCoord4iv=GLee_Lazy_glMultiTexCoord4iv; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord4s #define GLEE_C_DEFINED_glMultiTexCoord4s void __stdcall GLee_Lazy_glMultiTexCoord4s(GLenum target, GLshort s, GLshort t, GLshort r, GLshort q) {if (GLeeInit()) glMultiTexCoord4s(target, s, t, r, q);} GLEEPFNGLMULTITEXCOORD4SPROC GLeeFuncPtr_glMultiTexCoord4s=GLee_Lazy_glMultiTexCoord4s; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord4sv #define GLEE_C_DEFINED_glMultiTexCoord4sv void __stdcall GLee_Lazy_glMultiTexCoord4sv(GLenum target, const GLshort * v) {if (GLeeInit()) glMultiTexCoord4sv(target, v);} GLEEPFNGLMULTITEXCOORD4SVPROC GLeeFuncPtr_glMultiTexCoord4sv=GLee_Lazy_glMultiTexCoord4sv; #endif #ifndef GLEE_C_DEFINED_glLoadTransposeMatrixf #define GLEE_C_DEFINED_glLoadTransposeMatrixf void __stdcall GLee_Lazy_glLoadTransposeMatrixf(const GLfloat * m) {if (GLeeInit()) glLoadTransposeMatrixf(m);} GLEEPFNGLLOADTRANSPOSEMATRIXFPROC GLeeFuncPtr_glLoadTransposeMatrixf=GLee_Lazy_glLoadTransposeMatrixf; #endif #ifndef GLEE_C_DEFINED_glLoadTransposeMatrixd #define GLEE_C_DEFINED_glLoadTransposeMatrixd void __stdcall GLee_Lazy_glLoadTransposeMatrixd(const GLdouble * m) {if (GLeeInit()) glLoadTransposeMatrixd(m);} GLEEPFNGLLOADTRANSPOSEMATRIXDPROC GLeeFuncPtr_glLoadTransposeMatrixd=GLee_Lazy_glLoadTransposeMatrixd; #endif #ifndef GLEE_C_DEFINED_glMultTransposeMatrixf #define GLEE_C_DEFINED_glMultTransposeMatrixf void __stdcall GLee_Lazy_glMultTransposeMatrixf(const GLfloat * m) {if (GLeeInit()) glMultTransposeMatrixf(m);} GLEEPFNGLMULTTRANSPOSEMATRIXFPROC GLeeFuncPtr_glMultTransposeMatrixf=GLee_Lazy_glMultTransposeMatrixf; #endif #ifndef GLEE_C_DEFINED_glMultTransposeMatrixd #define GLEE_C_DEFINED_glMultTransposeMatrixd void __stdcall GLee_Lazy_glMultTransposeMatrixd(const GLdouble * m) {if (GLeeInit()) glMultTransposeMatrixd(m);} GLEEPFNGLMULTTRANSPOSEMATRIXDPROC GLeeFuncPtr_glMultTransposeMatrixd=GLee_Lazy_glMultTransposeMatrixd; #endif #ifndef GLEE_C_DEFINED_glSampleCoverage #define GLEE_C_DEFINED_glSampleCoverage void __stdcall GLee_Lazy_glSampleCoverage(GLclampf value, GLboolean invert) {if (GLeeInit()) glSampleCoverage(value, invert);} GLEEPFNGLSAMPLECOVERAGEPROC GLeeFuncPtr_glSampleCoverage=GLee_Lazy_glSampleCoverage; #endif #ifndef GLEE_C_DEFINED_glCompressedTexImage3D #define GLEE_C_DEFINED_glCompressedTexImage3D void __stdcall GLee_Lazy_glCompressedTexImage3D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid * data) {if (GLeeInit()) glCompressedTexImage3D(target, level, internalformat, width, height, depth, border, imageSize, data);} GLEEPFNGLCOMPRESSEDTEXIMAGE3DPROC GLeeFuncPtr_glCompressedTexImage3D=GLee_Lazy_glCompressedTexImage3D; #endif #ifndef GLEE_C_DEFINED_glCompressedTexImage2D #define GLEE_C_DEFINED_glCompressedTexImage2D void __stdcall GLee_Lazy_glCompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid * data) {if (GLeeInit()) glCompressedTexImage2D(target, level, internalformat, width, height, border, imageSize, data);} GLEEPFNGLCOMPRESSEDTEXIMAGE2DPROC GLeeFuncPtr_glCompressedTexImage2D=GLee_Lazy_glCompressedTexImage2D; #endif #ifndef GLEE_C_DEFINED_glCompressedTexImage1D #define GLEE_C_DEFINED_glCompressedTexImage1D void __stdcall GLee_Lazy_glCompressedTexImage1D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid * data) {if (GLeeInit()) glCompressedTexImage1D(target, level, internalformat, width, border, imageSize, data);} GLEEPFNGLCOMPRESSEDTEXIMAGE1DPROC GLeeFuncPtr_glCompressedTexImage1D=GLee_Lazy_glCompressedTexImage1D; #endif #ifndef GLEE_C_DEFINED_glCompressedTexSubImage3D #define GLEE_C_DEFINED_glCompressedTexSubImage3D void __stdcall GLee_Lazy_glCompressedTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid * data) {if (GLeeInit()) glCompressedTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data);} GLEEPFNGLCOMPRESSEDTEXSUBIMAGE3DPROC GLeeFuncPtr_glCompressedTexSubImage3D=GLee_Lazy_glCompressedTexSubImage3D; #endif #ifndef GLEE_C_DEFINED_glCompressedTexSubImage2D #define GLEE_C_DEFINED_glCompressedTexSubImage2D void __stdcall GLee_Lazy_glCompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid * data) {if (GLeeInit()) glCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data);} GLEEPFNGLCOMPRESSEDTEXSUBIMAGE2DPROC GLeeFuncPtr_glCompressedTexSubImage2D=GLee_Lazy_glCompressedTexSubImage2D; #endif #ifndef GLEE_C_DEFINED_glCompressedTexSubImage1D #define GLEE_C_DEFINED_glCompressedTexSubImage1D void __stdcall GLee_Lazy_glCompressedTexSubImage1D(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid * data) {if (GLeeInit()) glCompressedTexSubImage1D(target, level, xoffset, width, format, imageSize, data);} GLEEPFNGLCOMPRESSEDTEXSUBIMAGE1DPROC GLeeFuncPtr_glCompressedTexSubImage1D=GLee_Lazy_glCompressedTexSubImage1D; #endif #ifndef GLEE_C_DEFINED_glGetCompressedTexImage #define GLEE_C_DEFINED_glGetCompressedTexImage void __stdcall GLee_Lazy_glGetCompressedTexImage(GLenum target, GLint level, GLvoid * img) {if (GLeeInit()) glGetCompressedTexImage(target, level, img);} GLEEPFNGLGETCOMPRESSEDTEXIMAGEPROC GLeeFuncPtr_glGetCompressedTexImage=GLee_Lazy_glGetCompressedTexImage; #endif #endif /* GL_VERSION_1_4 */ #ifdef __GLEE_GL_VERSION_1_4 #ifndef GLEE_C_DEFINED_glBlendFuncSeparate #define GLEE_C_DEFINED_glBlendFuncSeparate void __stdcall GLee_Lazy_glBlendFuncSeparate(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha) {if (GLeeInit()) glBlendFuncSeparate(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha);} GLEEPFNGLBLENDFUNCSEPARATEPROC GLeeFuncPtr_glBlendFuncSeparate=GLee_Lazy_glBlendFuncSeparate; #endif #ifndef GLEE_C_DEFINED_glFogCoordf #define GLEE_C_DEFINED_glFogCoordf void __stdcall GLee_Lazy_glFogCoordf(GLfloat coord) {if (GLeeInit()) glFogCoordf(coord);} GLEEPFNGLFOGCOORDFPROC GLeeFuncPtr_glFogCoordf=GLee_Lazy_glFogCoordf; #endif #ifndef GLEE_C_DEFINED_glFogCoordfv #define GLEE_C_DEFINED_glFogCoordfv void __stdcall GLee_Lazy_glFogCoordfv(const GLfloat * coord) {if (GLeeInit()) glFogCoordfv(coord);} GLEEPFNGLFOGCOORDFVPROC GLeeFuncPtr_glFogCoordfv=GLee_Lazy_glFogCoordfv; #endif #ifndef GLEE_C_DEFINED_glFogCoordd #define GLEE_C_DEFINED_glFogCoordd void __stdcall GLee_Lazy_glFogCoordd(GLdouble coord) {if (GLeeInit()) glFogCoordd(coord);} GLEEPFNGLFOGCOORDDPROC GLeeFuncPtr_glFogCoordd=GLee_Lazy_glFogCoordd; #endif #ifndef GLEE_C_DEFINED_glFogCoorddv #define GLEE_C_DEFINED_glFogCoorddv void __stdcall GLee_Lazy_glFogCoorddv(const GLdouble * coord) {if (GLeeInit()) glFogCoorddv(coord);} GLEEPFNGLFOGCOORDDVPROC GLeeFuncPtr_glFogCoorddv=GLee_Lazy_glFogCoorddv; #endif #ifndef GLEE_C_DEFINED_glFogCoordPointer #define GLEE_C_DEFINED_glFogCoordPointer void __stdcall GLee_Lazy_glFogCoordPointer(GLenum type, GLsizei stride, const GLvoid * pointer) {if (GLeeInit()) glFogCoordPointer(type, stride, pointer);} GLEEPFNGLFOGCOORDPOINTERPROC GLeeFuncPtr_glFogCoordPointer=GLee_Lazy_glFogCoordPointer; #endif #ifndef GLEE_C_DEFINED_glMultiDrawArrays #define GLEE_C_DEFINED_glMultiDrawArrays void __stdcall GLee_Lazy_glMultiDrawArrays(GLenum mode, GLint * first, GLsizei * count, GLsizei primcount) {if (GLeeInit()) glMultiDrawArrays(mode, first, count, primcount);} GLEEPFNGLMULTIDRAWARRAYSPROC GLeeFuncPtr_glMultiDrawArrays=GLee_Lazy_glMultiDrawArrays; #endif #ifndef GLEE_C_DEFINED_glMultiDrawElements #define GLEE_C_DEFINED_glMultiDrawElements void __stdcall GLee_Lazy_glMultiDrawElements(GLenum mode, const GLsizei * count, GLenum type, const GLvoid* * indices, GLsizei primcount) {if (GLeeInit()) glMultiDrawElements(mode, count, type, indices, primcount);} GLEEPFNGLMULTIDRAWELEMENTSPROC GLeeFuncPtr_glMultiDrawElements=GLee_Lazy_glMultiDrawElements; #endif #ifndef GLEE_C_DEFINED_glPointParameterf #define GLEE_C_DEFINED_glPointParameterf void __stdcall GLee_Lazy_glPointParameterf(GLenum pname, GLfloat param) {if (GLeeInit()) glPointParameterf(pname, param);} GLEEPFNGLPOINTPARAMETERFPROC GLeeFuncPtr_glPointParameterf=GLee_Lazy_glPointParameterf; #endif #ifndef GLEE_C_DEFINED_glPointParameterfv #define GLEE_C_DEFINED_glPointParameterfv void __stdcall GLee_Lazy_glPointParameterfv(GLenum pname, const GLfloat * params) {if (GLeeInit()) glPointParameterfv(pname, params);} GLEEPFNGLPOINTPARAMETERFVPROC GLeeFuncPtr_glPointParameterfv=GLee_Lazy_glPointParameterfv; #endif #ifndef GLEE_C_DEFINED_glPointParameteri #define GLEE_C_DEFINED_glPointParameteri void __stdcall GLee_Lazy_glPointParameteri(GLenum pname, GLint param) {if (GLeeInit()) glPointParameteri(pname, param);} GLEEPFNGLPOINTPARAMETERIPROC GLeeFuncPtr_glPointParameteri=GLee_Lazy_glPointParameteri; #endif #ifndef GLEE_C_DEFINED_glPointParameteriv #define GLEE_C_DEFINED_glPointParameteriv void __stdcall GLee_Lazy_glPointParameteriv(GLenum pname, const GLint * params) {if (GLeeInit()) glPointParameteriv(pname, params);} GLEEPFNGLPOINTPARAMETERIVPROC GLeeFuncPtr_glPointParameteriv=GLee_Lazy_glPointParameteriv; #endif #ifndef GLEE_C_DEFINED_glSecondaryColor3b #define GLEE_C_DEFINED_glSecondaryColor3b void __stdcall GLee_Lazy_glSecondaryColor3b(GLbyte red, GLbyte green, GLbyte blue) {if (GLeeInit()) glSecondaryColor3b(red, green, blue);} GLEEPFNGLSECONDARYCOLOR3BPROC GLeeFuncPtr_glSecondaryColor3b=GLee_Lazy_glSecondaryColor3b; #endif #ifndef GLEE_C_DEFINED_glSecondaryColor3bv #define GLEE_C_DEFINED_glSecondaryColor3bv void __stdcall GLee_Lazy_glSecondaryColor3bv(const GLbyte * v) {if (GLeeInit()) glSecondaryColor3bv(v);} GLEEPFNGLSECONDARYCOLOR3BVPROC GLeeFuncPtr_glSecondaryColor3bv=GLee_Lazy_glSecondaryColor3bv; #endif #ifndef GLEE_C_DEFINED_glSecondaryColor3d #define GLEE_C_DEFINED_glSecondaryColor3d void __stdcall GLee_Lazy_glSecondaryColor3d(GLdouble red, GLdouble green, GLdouble blue) {if (GLeeInit()) glSecondaryColor3d(red, green, blue);} GLEEPFNGLSECONDARYCOLOR3DPROC GLeeFuncPtr_glSecondaryColor3d=GLee_Lazy_glSecondaryColor3d; #endif #ifndef GLEE_C_DEFINED_glSecondaryColor3dv #define GLEE_C_DEFINED_glSecondaryColor3dv void __stdcall GLee_Lazy_glSecondaryColor3dv(const GLdouble * v) {if (GLeeInit()) glSecondaryColor3dv(v);} GLEEPFNGLSECONDARYCOLOR3DVPROC GLeeFuncPtr_glSecondaryColor3dv=GLee_Lazy_glSecondaryColor3dv; #endif #ifndef GLEE_C_DEFINED_glSecondaryColor3f #define GLEE_C_DEFINED_glSecondaryColor3f void __stdcall GLee_Lazy_glSecondaryColor3f(GLfloat red, GLfloat green, GLfloat blue) {if (GLeeInit()) glSecondaryColor3f(red, green, blue);} GLEEPFNGLSECONDARYCOLOR3FPROC GLeeFuncPtr_glSecondaryColor3f=GLee_Lazy_glSecondaryColor3f; #endif #ifndef GLEE_C_DEFINED_glSecondaryColor3fv #define GLEE_C_DEFINED_glSecondaryColor3fv void __stdcall GLee_Lazy_glSecondaryColor3fv(const GLfloat * v) {if (GLeeInit()) glSecondaryColor3fv(v);} GLEEPFNGLSECONDARYCOLOR3FVPROC GLeeFuncPtr_glSecondaryColor3fv=GLee_Lazy_glSecondaryColor3fv; #endif #ifndef GLEE_C_DEFINED_glSecondaryColor3i #define GLEE_C_DEFINED_glSecondaryColor3i void __stdcall GLee_Lazy_glSecondaryColor3i(GLint red, GLint green, GLint blue) {if (GLeeInit()) glSecondaryColor3i(red, green, blue);} GLEEPFNGLSECONDARYCOLOR3IPROC GLeeFuncPtr_glSecondaryColor3i=GLee_Lazy_glSecondaryColor3i; #endif #ifndef GLEE_C_DEFINED_glSecondaryColor3iv #define GLEE_C_DEFINED_glSecondaryColor3iv void __stdcall GLee_Lazy_glSecondaryColor3iv(const GLint * v) {if (GLeeInit()) glSecondaryColor3iv(v);} GLEEPFNGLSECONDARYCOLOR3IVPROC GLeeFuncPtr_glSecondaryColor3iv=GLee_Lazy_glSecondaryColor3iv; #endif #ifndef GLEE_C_DEFINED_glSecondaryColor3s #define GLEE_C_DEFINED_glSecondaryColor3s void __stdcall GLee_Lazy_glSecondaryColor3s(GLshort red, GLshort green, GLshort blue) {if (GLeeInit()) glSecondaryColor3s(red, green, blue);} GLEEPFNGLSECONDARYCOLOR3SPROC GLeeFuncPtr_glSecondaryColor3s=GLee_Lazy_glSecondaryColor3s; #endif #ifndef GLEE_C_DEFINED_glSecondaryColor3sv #define GLEE_C_DEFINED_glSecondaryColor3sv void __stdcall GLee_Lazy_glSecondaryColor3sv(const GLshort * v) {if (GLeeInit()) glSecondaryColor3sv(v);} GLEEPFNGLSECONDARYCOLOR3SVPROC GLeeFuncPtr_glSecondaryColor3sv=GLee_Lazy_glSecondaryColor3sv; #endif #ifndef GLEE_C_DEFINED_glSecondaryColor3ub #define GLEE_C_DEFINED_glSecondaryColor3ub void __stdcall GLee_Lazy_glSecondaryColor3ub(GLubyte red, GLubyte green, GLubyte blue) {if (GLeeInit()) glSecondaryColor3ub(red, green, blue);} GLEEPFNGLSECONDARYCOLOR3UBPROC GLeeFuncPtr_glSecondaryColor3ub=GLee_Lazy_glSecondaryColor3ub; #endif #ifndef GLEE_C_DEFINED_glSecondaryColor3ubv #define GLEE_C_DEFINED_glSecondaryColor3ubv void __stdcall GLee_Lazy_glSecondaryColor3ubv(const GLubyte * v) {if (GLeeInit()) glSecondaryColor3ubv(v);} GLEEPFNGLSECONDARYCOLOR3UBVPROC GLeeFuncPtr_glSecondaryColor3ubv=GLee_Lazy_glSecondaryColor3ubv; #endif #ifndef GLEE_C_DEFINED_glSecondaryColor3ui #define GLEE_C_DEFINED_glSecondaryColor3ui void __stdcall GLee_Lazy_glSecondaryColor3ui(GLuint red, GLuint green, GLuint blue) {if (GLeeInit()) glSecondaryColor3ui(red, green, blue);} GLEEPFNGLSECONDARYCOLOR3UIPROC GLeeFuncPtr_glSecondaryColor3ui=GLee_Lazy_glSecondaryColor3ui; #endif #ifndef GLEE_C_DEFINED_glSecondaryColor3uiv #define GLEE_C_DEFINED_glSecondaryColor3uiv void __stdcall GLee_Lazy_glSecondaryColor3uiv(const GLuint * v) {if (GLeeInit()) glSecondaryColor3uiv(v);} GLEEPFNGLSECONDARYCOLOR3UIVPROC GLeeFuncPtr_glSecondaryColor3uiv=GLee_Lazy_glSecondaryColor3uiv; #endif #ifndef GLEE_C_DEFINED_glSecondaryColor3us #define GLEE_C_DEFINED_glSecondaryColor3us void __stdcall GLee_Lazy_glSecondaryColor3us(GLushort red, GLushort green, GLushort blue) {if (GLeeInit()) glSecondaryColor3us(red, green, blue);} GLEEPFNGLSECONDARYCOLOR3USPROC GLeeFuncPtr_glSecondaryColor3us=GLee_Lazy_glSecondaryColor3us; #endif #ifndef GLEE_C_DEFINED_glSecondaryColor3usv #define GLEE_C_DEFINED_glSecondaryColor3usv void __stdcall GLee_Lazy_glSecondaryColor3usv(const GLushort * v) {if (GLeeInit()) glSecondaryColor3usv(v);} GLEEPFNGLSECONDARYCOLOR3USVPROC GLeeFuncPtr_glSecondaryColor3usv=GLee_Lazy_glSecondaryColor3usv; #endif #ifndef GLEE_C_DEFINED_glSecondaryColorPointer #define GLEE_C_DEFINED_glSecondaryColorPointer void __stdcall GLee_Lazy_glSecondaryColorPointer(GLint size, GLenum type, GLsizei stride, const GLvoid * pointer) {if (GLeeInit()) glSecondaryColorPointer(size, type, stride, pointer);} GLEEPFNGLSECONDARYCOLORPOINTERPROC GLeeFuncPtr_glSecondaryColorPointer=GLee_Lazy_glSecondaryColorPointer; #endif #ifndef GLEE_C_DEFINED_glWindowPos2d #define GLEE_C_DEFINED_glWindowPos2d void __stdcall GLee_Lazy_glWindowPos2d(GLdouble x, GLdouble y) {if (GLeeInit()) glWindowPos2d(x, y);} GLEEPFNGLWINDOWPOS2DPROC GLeeFuncPtr_glWindowPos2d=GLee_Lazy_glWindowPos2d; #endif #ifndef GLEE_C_DEFINED_glWindowPos2dv #define GLEE_C_DEFINED_glWindowPos2dv void __stdcall GLee_Lazy_glWindowPos2dv(const GLdouble * v) {if (GLeeInit()) glWindowPos2dv(v);} GLEEPFNGLWINDOWPOS2DVPROC GLeeFuncPtr_glWindowPos2dv=GLee_Lazy_glWindowPos2dv; #endif #ifndef GLEE_C_DEFINED_glWindowPos2f #define GLEE_C_DEFINED_glWindowPos2f void __stdcall GLee_Lazy_glWindowPos2f(GLfloat x, GLfloat y) {if (GLeeInit()) glWindowPos2f(x, y);} GLEEPFNGLWINDOWPOS2FPROC GLeeFuncPtr_glWindowPos2f=GLee_Lazy_glWindowPos2f; #endif #ifndef GLEE_C_DEFINED_glWindowPos2fv #define GLEE_C_DEFINED_glWindowPos2fv void __stdcall GLee_Lazy_glWindowPos2fv(const GLfloat * v) {if (GLeeInit()) glWindowPos2fv(v);} GLEEPFNGLWINDOWPOS2FVPROC GLeeFuncPtr_glWindowPos2fv=GLee_Lazy_glWindowPos2fv; #endif #ifndef GLEE_C_DEFINED_glWindowPos2i #define GLEE_C_DEFINED_glWindowPos2i void __stdcall GLee_Lazy_glWindowPos2i(GLint x, GLint y) {if (GLeeInit()) glWindowPos2i(x, y);} GLEEPFNGLWINDOWPOS2IPROC GLeeFuncPtr_glWindowPos2i=GLee_Lazy_glWindowPos2i; #endif #ifndef GLEE_C_DEFINED_glWindowPos2iv #define GLEE_C_DEFINED_glWindowPos2iv void __stdcall GLee_Lazy_glWindowPos2iv(const GLint * v) {if (GLeeInit()) glWindowPos2iv(v);} GLEEPFNGLWINDOWPOS2IVPROC GLeeFuncPtr_glWindowPos2iv=GLee_Lazy_glWindowPos2iv; #endif #ifndef GLEE_C_DEFINED_glWindowPos2s #define GLEE_C_DEFINED_glWindowPos2s void __stdcall GLee_Lazy_glWindowPos2s(GLshort x, GLshort y) {if (GLeeInit()) glWindowPos2s(x, y);} GLEEPFNGLWINDOWPOS2SPROC GLeeFuncPtr_glWindowPos2s=GLee_Lazy_glWindowPos2s; #endif #ifndef GLEE_C_DEFINED_glWindowPos2sv #define GLEE_C_DEFINED_glWindowPos2sv void __stdcall GLee_Lazy_glWindowPos2sv(const GLshort * v) {if (GLeeInit()) glWindowPos2sv(v);} GLEEPFNGLWINDOWPOS2SVPROC GLeeFuncPtr_glWindowPos2sv=GLee_Lazy_glWindowPos2sv; #endif #ifndef GLEE_C_DEFINED_glWindowPos3d #define GLEE_C_DEFINED_glWindowPos3d void __stdcall GLee_Lazy_glWindowPos3d(GLdouble x, GLdouble y, GLdouble z) {if (GLeeInit()) glWindowPos3d(x, y, z);} GLEEPFNGLWINDOWPOS3DPROC GLeeFuncPtr_glWindowPos3d=GLee_Lazy_glWindowPos3d; #endif #ifndef GLEE_C_DEFINED_glWindowPos3dv #define GLEE_C_DEFINED_glWindowPos3dv void __stdcall GLee_Lazy_glWindowPos3dv(const GLdouble * v) {if (GLeeInit()) glWindowPos3dv(v);} GLEEPFNGLWINDOWPOS3DVPROC GLeeFuncPtr_glWindowPos3dv=GLee_Lazy_glWindowPos3dv; #endif #ifndef GLEE_C_DEFINED_glWindowPos3f #define GLEE_C_DEFINED_glWindowPos3f void __stdcall GLee_Lazy_glWindowPos3f(GLfloat x, GLfloat y, GLfloat z) {if (GLeeInit()) glWindowPos3f(x, y, z);} GLEEPFNGLWINDOWPOS3FPROC GLeeFuncPtr_glWindowPos3f=GLee_Lazy_glWindowPos3f; #endif #ifndef GLEE_C_DEFINED_glWindowPos3fv #define GLEE_C_DEFINED_glWindowPos3fv void __stdcall GLee_Lazy_glWindowPos3fv(const GLfloat * v) {if (GLeeInit()) glWindowPos3fv(v);} GLEEPFNGLWINDOWPOS3FVPROC GLeeFuncPtr_glWindowPos3fv=GLee_Lazy_glWindowPos3fv; #endif #ifndef GLEE_C_DEFINED_glWindowPos3i #define GLEE_C_DEFINED_glWindowPos3i void __stdcall GLee_Lazy_glWindowPos3i(GLint x, GLint y, GLint z) {if (GLeeInit()) glWindowPos3i(x, y, z);} GLEEPFNGLWINDOWPOS3IPROC GLeeFuncPtr_glWindowPos3i=GLee_Lazy_glWindowPos3i; #endif #ifndef GLEE_C_DEFINED_glWindowPos3iv #define GLEE_C_DEFINED_glWindowPos3iv void __stdcall GLee_Lazy_glWindowPos3iv(const GLint * v) {if (GLeeInit()) glWindowPos3iv(v);} GLEEPFNGLWINDOWPOS3IVPROC GLeeFuncPtr_glWindowPos3iv=GLee_Lazy_glWindowPos3iv; #endif #ifndef GLEE_C_DEFINED_glWindowPos3s #define GLEE_C_DEFINED_glWindowPos3s void __stdcall GLee_Lazy_glWindowPos3s(GLshort x, GLshort y, GLshort z) {if (GLeeInit()) glWindowPos3s(x, y, z);} GLEEPFNGLWINDOWPOS3SPROC GLeeFuncPtr_glWindowPos3s=GLee_Lazy_glWindowPos3s; #endif #ifndef GLEE_C_DEFINED_glWindowPos3sv #define GLEE_C_DEFINED_glWindowPos3sv void __stdcall GLee_Lazy_glWindowPos3sv(const GLshort * v) {if (GLeeInit()) glWindowPos3sv(v);} GLEEPFNGLWINDOWPOS3SVPROC GLeeFuncPtr_glWindowPos3sv=GLee_Lazy_glWindowPos3sv; #endif #endif /* GL_VERSION_1_5 */ #ifdef __GLEE_GL_VERSION_1_5 #ifndef GLEE_C_DEFINED_glGenQueries #define GLEE_C_DEFINED_glGenQueries void __stdcall GLee_Lazy_glGenQueries(GLsizei n, GLuint * ids) {if (GLeeInit()) glGenQueries(n, ids);} GLEEPFNGLGENQUERIESPROC GLeeFuncPtr_glGenQueries=GLee_Lazy_glGenQueries; #endif #ifndef GLEE_C_DEFINED_glDeleteQueries #define GLEE_C_DEFINED_glDeleteQueries void __stdcall GLee_Lazy_glDeleteQueries(GLsizei n, const GLuint * ids) {if (GLeeInit()) glDeleteQueries(n, ids);} GLEEPFNGLDELETEQUERIESPROC GLeeFuncPtr_glDeleteQueries=GLee_Lazy_glDeleteQueries; #endif #ifndef GLEE_C_DEFINED_glIsQuery #define GLEE_C_DEFINED_glIsQuery GLboolean __stdcall GLee_Lazy_glIsQuery(GLuint id) {if (GLeeInit()) return glIsQuery(id); return (GLboolean)0;} GLEEPFNGLISQUERYPROC GLeeFuncPtr_glIsQuery=GLee_Lazy_glIsQuery; #endif #ifndef GLEE_C_DEFINED_glBeginQuery #define GLEE_C_DEFINED_glBeginQuery void __stdcall GLee_Lazy_glBeginQuery(GLenum target, GLuint id) {if (GLeeInit()) glBeginQuery(target, id);} GLEEPFNGLBEGINQUERYPROC GLeeFuncPtr_glBeginQuery=GLee_Lazy_glBeginQuery; #endif #ifndef GLEE_C_DEFINED_glEndQuery #define GLEE_C_DEFINED_glEndQuery void __stdcall GLee_Lazy_glEndQuery(GLenum target) {if (GLeeInit()) glEndQuery(target);} GLEEPFNGLENDQUERYPROC GLeeFuncPtr_glEndQuery=GLee_Lazy_glEndQuery; #endif #ifndef GLEE_C_DEFINED_glGetQueryiv #define GLEE_C_DEFINED_glGetQueryiv void __stdcall GLee_Lazy_glGetQueryiv(GLenum target, GLenum pname, GLint * params) {if (GLeeInit()) glGetQueryiv(target, pname, params);} GLEEPFNGLGETQUERYIVPROC GLeeFuncPtr_glGetQueryiv=GLee_Lazy_glGetQueryiv; #endif #ifndef GLEE_C_DEFINED_glGetQueryObjectiv #define GLEE_C_DEFINED_glGetQueryObjectiv void __stdcall GLee_Lazy_glGetQueryObjectiv(GLuint id, GLenum pname, GLint * params) {if (GLeeInit()) glGetQueryObjectiv(id, pname, params);} GLEEPFNGLGETQUERYOBJECTIVPROC GLeeFuncPtr_glGetQueryObjectiv=GLee_Lazy_glGetQueryObjectiv; #endif #ifndef GLEE_C_DEFINED_glGetQueryObjectuiv #define GLEE_C_DEFINED_glGetQueryObjectuiv void __stdcall GLee_Lazy_glGetQueryObjectuiv(GLuint id, GLenum pname, GLuint * params) {if (GLeeInit()) glGetQueryObjectuiv(id, pname, params);} GLEEPFNGLGETQUERYOBJECTUIVPROC GLeeFuncPtr_glGetQueryObjectuiv=GLee_Lazy_glGetQueryObjectuiv; #endif #ifndef GLEE_C_DEFINED_glBindBuffer #define GLEE_C_DEFINED_glBindBuffer void __stdcall GLee_Lazy_glBindBuffer(GLenum target, GLuint buffer) {if (GLeeInit()) glBindBuffer(target, buffer);} GLEEPFNGLBINDBUFFERPROC GLeeFuncPtr_glBindBuffer=GLee_Lazy_glBindBuffer; #endif #ifndef GLEE_C_DEFINED_glDeleteBuffers #define GLEE_C_DEFINED_glDeleteBuffers void __stdcall GLee_Lazy_glDeleteBuffers(GLsizei n, const GLuint * buffers) {if (GLeeInit()) glDeleteBuffers(n, buffers);} GLEEPFNGLDELETEBUFFERSPROC GLeeFuncPtr_glDeleteBuffers=GLee_Lazy_glDeleteBuffers; #endif #ifndef GLEE_C_DEFINED_glGenBuffers #define GLEE_C_DEFINED_glGenBuffers void __stdcall GLee_Lazy_glGenBuffers(GLsizei n, GLuint * buffers) {if (GLeeInit()) glGenBuffers(n, buffers);} GLEEPFNGLGENBUFFERSPROC GLeeFuncPtr_glGenBuffers=GLee_Lazy_glGenBuffers; #endif #ifndef GLEE_C_DEFINED_glIsBuffer #define GLEE_C_DEFINED_glIsBuffer GLboolean __stdcall GLee_Lazy_glIsBuffer(GLuint buffer) {if (GLeeInit()) return glIsBuffer(buffer); return (GLboolean)0;} GLEEPFNGLISBUFFERPROC GLeeFuncPtr_glIsBuffer=GLee_Lazy_glIsBuffer; #endif #ifndef GLEE_C_DEFINED_glBufferData #define GLEE_C_DEFINED_glBufferData void __stdcall GLee_Lazy_glBufferData(GLenum target, GLsizeiptr size, const GLvoid * data, GLenum usage) {if (GLeeInit()) glBufferData(target, size, data, usage);} GLEEPFNGLBUFFERDATAPROC GLeeFuncPtr_glBufferData=GLee_Lazy_glBufferData; #endif #ifndef GLEE_C_DEFINED_glBufferSubData #define GLEE_C_DEFINED_glBufferSubData void __stdcall GLee_Lazy_glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid * data) {if (GLeeInit()) glBufferSubData(target, offset, size, data);} GLEEPFNGLBUFFERSUBDATAPROC GLeeFuncPtr_glBufferSubData=GLee_Lazy_glBufferSubData; #endif #ifndef GLEE_C_DEFINED_glGetBufferSubData #define GLEE_C_DEFINED_glGetBufferSubData void __stdcall GLee_Lazy_glGetBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, GLvoid * data) {if (GLeeInit()) glGetBufferSubData(target, offset, size, data);} GLEEPFNGLGETBUFFERSUBDATAPROC GLeeFuncPtr_glGetBufferSubData=GLee_Lazy_glGetBufferSubData; #endif #ifndef GLEE_C_DEFINED_glMapBuffer #define GLEE_C_DEFINED_glMapBuffer GLvoid* __stdcall GLee_Lazy_glMapBuffer(GLenum target, GLenum access) {if (GLeeInit()) return glMapBuffer(target, access); return (GLvoid*)0;} GLEEPFNGLMAPBUFFERPROC GLeeFuncPtr_glMapBuffer=GLee_Lazy_glMapBuffer; #endif #ifndef GLEE_C_DEFINED_glUnmapBuffer #define GLEE_C_DEFINED_glUnmapBuffer GLboolean __stdcall GLee_Lazy_glUnmapBuffer(GLenum target) {if (GLeeInit()) return glUnmapBuffer(target); return (GLboolean)0;} GLEEPFNGLUNMAPBUFFERPROC GLeeFuncPtr_glUnmapBuffer=GLee_Lazy_glUnmapBuffer; #endif #ifndef GLEE_C_DEFINED_glGetBufferParameteriv #define GLEE_C_DEFINED_glGetBufferParameteriv void __stdcall GLee_Lazy_glGetBufferParameteriv(GLenum target, GLenum pname, GLint * params) {if (GLeeInit()) glGetBufferParameteriv(target, pname, params);} GLEEPFNGLGETBUFFERPARAMETERIVPROC GLeeFuncPtr_glGetBufferParameteriv=GLee_Lazy_glGetBufferParameteriv; #endif #ifndef GLEE_C_DEFINED_glGetBufferPointerv #define GLEE_C_DEFINED_glGetBufferPointerv void __stdcall GLee_Lazy_glGetBufferPointerv(GLenum target, GLenum pname, GLvoid* * params) {if (GLeeInit()) glGetBufferPointerv(target, pname, params);} GLEEPFNGLGETBUFFERPOINTERVPROC GLeeFuncPtr_glGetBufferPointerv=GLee_Lazy_glGetBufferPointerv; #endif #endif /* GL_VERSION_2_0 */ #ifdef __GLEE_GL_VERSION_2_0 #ifndef GLEE_C_DEFINED_glBlendEquationSeparate #define GLEE_C_DEFINED_glBlendEquationSeparate void __stdcall GLee_Lazy_glBlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha) {if (GLeeInit()) glBlendEquationSeparate(modeRGB, modeAlpha);} GLEEPFNGLBLENDEQUATIONSEPARATEPROC GLeeFuncPtr_glBlendEquationSeparate=GLee_Lazy_glBlendEquationSeparate; #endif #ifndef GLEE_C_DEFINED_glDrawBuffers #define GLEE_C_DEFINED_glDrawBuffers void __stdcall GLee_Lazy_glDrawBuffers(GLsizei n, const GLenum * bufs) {if (GLeeInit()) glDrawBuffers(n, bufs);} GLEEPFNGLDRAWBUFFERSPROC GLeeFuncPtr_glDrawBuffers=GLee_Lazy_glDrawBuffers; #endif #ifndef GLEE_C_DEFINED_glStencilOpSeparate #define GLEE_C_DEFINED_glStencilOpSeparate void __stdcall GLee_Lazy_glStencilOpSeparate(GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass) {if (GLeeInit()) glStencilOpSeparate(face, sfail, dpfail, dppass);} GLEEPFNGLSTENCILOPSEPARATEPROC GLeeFuncPtr_glStencilOpSeparate=GLee_Lazy_glStencilOpSeparate; #endif #ifndef GLEE_C_DEFINED_glStencilFuncSeparate #define GLEE_C_DEFINED_glStencilFuncSeparate void __stdcall GLee_Lazy_glStencilFuncSeparate(GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask) {if (GLeeInit()) glStencilFuncSeparate(frontfunc, backfunc, ref, mask);} GLEEPFNGLSTENCILFUNCSEPARATEPROC GLeeFuncPtr_glStencilFuncSeparate=GLee_Lazy_glStencilFuncSeparate; #endif #ifndef GLEE_C_DEFINED_glStencilMaskSeparate #define GLEE_C_DEFINED_glStencilMaskSeparate void __stdcall GLee_Lazy_glStencilMaskSeparate(GLenum face, GLuint mask) {if (GLeeInit()) glStencilMaskSeparate(face, mask);} GLEEPFNGLSTENCILMASKSEPARATEPROC GLeeFuncPtr_glStencilMaskSeparate=GLee_Lazy_glStencilMaskSeparate; #endif #ifndef GLEE_C_DEFINED_glAttachShader #define GLEE_C_DEFINED_glAttachShader void __stdcall GLee_Lazy_glAttachShader(GLuint program, GLuint shader) {if (GLeeInit()) glAttachShader(program, shader);} GLEEPFNGLATTACHSHADERPROC GLeeFuncPtr_glAttachShader=GLee_Lazy_glAttachShader; #endif #ifndef GLEE_C_DEFINED_glBindAttribLocation #define GLEE_C_DEFINED_glBindAttribLocation void __stdcall GLee_Lazy_glBindAttribLocation(GLuint program, GLuint index, const GLchar * name) {if (GLeeInit()) glBindAttribLocation(program, index, name);} GLEEPFNGLBINDATTRIBLOCATIONPROC GLeeFuncPtr_glBindAttribLocation=GLee_Lazy_glBindAttribLocation; #endif #ifndef GLEE_C_DEFINED_glCompileShader #define GLEE_C_DEFINED_glCompileShader void __stdcall GLee_Lazy_glCompileShader(GLuint shader) {if (GLeeInit()) glCompileShader(shader);} GLEEPFNGLCOMPILESHADERPROC GLeeFuncPtr_glCompileShader=GLee_Lazy_glCompileShader; #endif #ifndef GLEE_C_DEFINED_glCreateProgram #define GLEE_C_DEFINED_glCreateProgram GLuint __stdcall GLee_Lazy_glCreateProgram(void) {if (GLeeInit()) return glCreateProgram(); return (GLuint)0;} GLEEPFNGLCREATEPROGRAMPROC GLeeFuncPtr_glCreateProgram=GLee_Lazy_glCreateProgram; #endif #ifndef GLEE_C_DEFINED_glCreateShader #define GLEE_C_DEFINED_glCreateShader GLuint __stdcall GLee_Lazy_glCreateShader(GLenum type) {if (GLeeInit()) return glCreateShader(type); return (GLuint)0;} GLEEPFNGLCREATESHADERPROC GLeeFuncPtr_glCreateShader=GLee_Lazy_glCreateShader; #endif #ifndef GLEE_C_DEFINED_glDeleteProgram #define GLEE_C_DEFINED_glDeleteProgram void __stdcall GLee_Lazy_glDeleteProgram(GLuint program) {if (GLeeInit()) glDeleteProgram(program);} GLEEPFNGLDELETEPROGRAMPROC GLeeFuncPtr_glDeleteProgram=GLee_Lazy_glDeleteProgram; #endif #ifndef GLEE_C_DEFINED_glDeleteShader #define GLEE_C_DEFINED_glDeleteShader void __stdcall GLee_Lazy_glDeleteShader(GLuint shader) {if (GLeeInit()) glDeleteShader(shader);} GLEEPFNGLDELETESHADERPROC GLeeFuncPtr_glDeleteShader=GLee_Lazy_glDeleteShader; #endif #ifndef GLEE_C_DEFINED_glDetachShader #define GLEE_C_DEFINED_glDetachShader void __stdcall GLee_Lazy_glDetachShader(GLuint program, GLuint shader) {if (GLeeInit()) glDetachShader(program, shader);} GLEEPFNGLDETACHSHADERPROC GLeeFuncPtr_glDetachShader=GLee_Lazy_glDetachShader; #endif #ifndef GLEE_C_DEFINED_glDisableVertexAttribArray #define GLEE_C_DEFINED_glDisableVertexAttribArray void __stdcall GLee_Lazy_glDisableVertexAttribArray(GLuint index) {if (GLeeInit()) glDisableVertexAttribArray(index);} GLEEPFNGLDISABLEVERTEXATTRIBARRAYPROC GLeeFuncPtr_glDisableVertexAttribArray=GLee_Lazy_glDisableVertexAttribArray; #endif #ifndef GLEE_C_DEFINED_glEnableVertexAttribArray #define GLEE_C_DEFINED_glEnableVertexAttribArray void __stdcall GLee_Lazy_glEnableVertexAttribArray(GLuint index) {if (GLeeInit()) glEnableVertexAttribArray(index);} GLEEPFNGLENABLEVERTEXATTRIBARRAYPROC GLeeFuncPtr_glEnableVertexAttribArray=GLee_Lazy_glEnableVertexAttribArray; #endif #ifndef GLEE_C_DEFINED_glGetActiveAttrib #define GLEE_C_DEFINED_glGetActiveAttrib void __stdcall GLee_Lazy_glGetActiveAttrib(GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLint * size, GLenum * type, GLchar * name) {if (GLeeInit()) glGetActiveAttrib(program, index, bufSize, length, size, type, name);} GLEEPFNGLGETACTIVEATTRIBPROC GLeeFuncPtr_glGetActiveAttrib=GLee_Lazy_glGetActiveAttrib; #endif #ifndef GLEE_C_DEFINED_glGetActiveUniform #define GLEE_C_DEFINED_glGetActiveUniform void __stdcall GLee_Lazy_glGetActiveUniform(GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLint * size, GLenum * type, GLchar * name) {if (GLeeInit()) glGetActiveUniform(program, index, bufSize, length, size, type, name);} GLEEPFNGLGETACTIVEUNIFORMPROC GLeeFuncPtr_glGetActiveUniform=GLee_Lazy_glGetActiveUniform; #endif #ifndef GLEE_C_DEFINED_glGetAttachedShaders #define GLEE_C_DEFINED_glGetAttachedShaders void __stdcall GLee_Lazy_glGetAttachedShaders(GLuint program, GLsizei maxCount, GLsizei * count, GLuint * obj) {if (GLeeInit()) glGetAttachedShaders(program, maxCount, count, obj);} GLEEPFNGLGETATTACHEDSHADERSPROC GLeeFuncPtr_glGetAttachedShaders=GLee_Lazy_glGetAttachedShaders; #endif #ifndef GLEE_C_DEFINED_glGetAttribLocation #define GLEE_C_DEFINED_glGetAttribLocation GLint __stdcall GLee_Lazy_glGetAttribLocation(GLuint program, const GLchar * name) {if (GLeeInit()) return glGetAttribLocation(program, name); return (GLint)0;} GLEEPFNGLGETATTRIBLOCATIONPROC GLeeFuncPtr_glGetAttribLocation=GLee_Lazy_glGetAttribLocation; #endif #ifndef GLEE_C_DEFINED_glGetProgramiv #define GLEE_C_DEFINED_glGetProgramiv void __stdcall GLee_Lazy_glGetProgramiv(GLuint program, GLenum pname, GLint * params) {if (GLeeInit()) glGetProgramiv(program, pname, params);} GLEEPFNGLGETPROGRAMIVPROC GLeeFuncPtr_glGetProgramiv=GLee_Lazy_glGetProgramiv; #endif #ifndef GLEE_C_DEFINED_glGetProgramInfoLog #define GLEE_C_DEFINED_glGetProgramInfoLog void __stdcall GLee_Lazy_glGetProgramInfoLog(GLuint program, GLsizei bufSize, GLsizei * length, GLchar * infoLog) {if (GLeeInit()) glGetProgramInfoLog(program, bufSize, length, infoLog);} GLEEPFNGLGETPROGRAMINFOLOGPROC GLeeFuncPtr_glGetProgramInfoLog=GLee_Lazy_glGetProgramInfoLog; #endif #ifndef GLEE_C_DEFINED_glGetShaderiv #define GLEE_C_DEFINED_glGetShaderiv void __stdcall GLee_Lazy_glGetShaderiv(GLuint shader, GLenum pname, GLint * params) {if (GLeeInit()) glGetShaderiv(shader, pname, params);} GLEEPFNGLGETSHADERIVPROC GLeeFuncPtr_glGetShaderiv=GLee_Lazy_glGetShaderiv; #endif #ifndef GLEE_C_DEFINED_glGetShaderInfoLog #define GLEE_C_DEFINED_glGetShaderInfoLog void __stdcall GLee_Lazy_glGetShaderInfoLog(GLuint shader, GLsizei bufSize, GLsizei * length, GLchar * infoLog) {if (GLeeInit()) glGetShaderInfoLog(shader, bufSize, length, infoLog);} GLEEPFNGLGETSHADERINFOLOGPROC GLeeFuncPtr_glGetShaderInfoLog=GLee_Lazy_glGetShaderInfoLog; #endif #ifndef GLEE_C_DEFINED_glGetShaderSource #define GLEE_C_DEFINED_glGetShaderSource void __stdcall GLee_Lazy_glGetShaderSource(GLuint shader, GLsizei bufSize, GLsizei * length, GLchar * source) {if (GLeeInit()) glGetShaderSource(shader, bufSize, length, source);} GLEEPFNGLGETSHADERSOURCEPROC GLeeFuncPtr_glGetShaderSource=GLee_Lazy_glGetShaderSource; #endif #ifndef GLEE_C_DEFINED_glGetUniformLocation #define GLEE_C_DEFINED_glGetUniformLocation GLint __stdcall GLee_Lazy_glGetUniformLocation(GLuint program, const GLchar * name) {if (GLeeInit()) return glGetUniformLocation(program, name); return (GLint)0;} GLEEPFNGLGETUNIFORMLOCATIONPROC GLeeFuncPtr_glGetUniformLocation=GLee_Lazy_glGetUniformLocation; #endif #ifndef GLEE_C_DEFINED_glGetUniformfv #define GLEE_C_DEFINED_glGetUniformfv void __stdcall GLee_Lazy_glGetUniformfv(GLuint program, GLint location, GLfloat * params) {if (GLeeInit()) glGetUniformfv(program, location, params);} GLEEPFNGLGETUNIFORMFVPROC GLeeFuncPtr_glGetUniformfv=GLee_Lazy_glGetUniformfv; #endif #ifndef GLEE_C_DEFINED_glGetUniformiv #define GLEE_C_DEFINED_glGetUniformiv void __stdcall GLee_Lazy_glGetUniformiv(GLuint program, GLint location, GLint * params) {if (GLeeInit()) glGetUniformiv(program, location, params);} GLEEPFNGLGETUNIFORMIVPROC GLeeFuncPtr_glGetUniformiv=GLee_Lazy_glGetUniformiv; #endif #ifndef GLEE_C_DEFINED_glGetVertexAttribdv #define GLEE_C_DEFINED_glGetVertexAttribdv void __stdcall GLee_Lazy_glGetVertexAttribdv(GLuint index, GLenum pname, GLdouble * params) {if (GLeeInit()) glGetVertexAttribdv(index, pname, params);} GLEEPFNGLGETVERTEXATTRIBDVPROC GLeeFuncPtr_glGetVertexAttribdv=GLee_Lazy_glGetVertexAttribdv; #endif #ifndef GLEE_C_DEFINED_glGetVertexAttribfv #define GLEE_C_DEFINED_glGetVertexAttribfv void __stdcall GLee_Lazy_glGetVertexAttribfv(GLuint index, GLenum pname, GLfloat * params) {if (GLeeInit()) glGetVertexAttribfv(index, pname, params);} GLEEPFNGLGETVERTEXATTRIBFVPROC GLeeFuncPtr_glGetVertexAttribfv=GLee_Lazy_glGetVertexAttribfv; #endif #ifndef GLEE_C_DEFINED_glGetVertexAttribiv #define GLEE_C_DEFINED_glGetVertexAttribiv void __stdcall GLee_Lazy_glGetVertexAttribiv(GLuint index, GLenum pname, GLint * params) {if (GLeeInit()) glGetVertexAttribiv(index, pname, params);} GLEEPFNGLGETVERTEXATTRIBIVPROC GLeeFuncPtr_glGetVertexAttribiv=GLee_Lazy_glGetVertexAttribiv; #endif #ifndef GLEE_C_DEFINED_glGetVertexAttribPointerv #define GLEE_C_DEFINED_glGetVertexAttribPointerv void __stdcall GLee_Lazy_glGetVertexAttribPointerv(GLuint index, GLenum pname, GLvoid* * pointer) {if (GLeeInit()) glGetVertexAttribPointerv(index, pname, pointer);} GLEEPFNGLGETVERTEXATTRIBPOINTERVPROC GLeeFuncPtr_glGetVertexAttribPointerv=GLee_Lazy_glGetVertexAttribPointerv; #endif #ifndef GLEE_C_DEFINED_glIsProgram #define GLEE_C_DEFINED_glIsProgram GLboolean __stdcall GLee_Lazy_glIsProgram(GLuint program) {if (GLeeInit()) return glIsProgram(program); return (GLboolean)0;} GLEEPFNGLISPROGRAMPROC GLeeFuncPtr_glIsProgram=GLee_Lazy_glIsProgram; #endif #ifndef GLEE_C_DEFINED_glIsShader #define GLEE_C_DEFINED_glIsShader GLboolean __stdcall GLee_Lazy_glIsShader(GLuint shader) {if (GLeeInit()) return glIsShader(shader); return (GLboolean)0;} GLEEPFNGLISSHADERPROC GLeeFuncPtr_glIsShader=GLee_Lazy_glIsShader; #endif #ifndef GLEE_C_DEFINED_glLinkProgram #define GLEE_C_DEFINED_glLinkProgram void __stdcall GLee_Lazy_glLinkProgram(GLuint program) {if (GLeeInit()) glLinkProgram(program);} GLEEPFNGLLINKPROGRAMPROC GLeeFuncPtr_glLinkProgram=GLee_Lazy_glLinkProgram; #endif #ifndef GLEE_C_DEFINED_glShaderSource #define GLEE_C_DEFINED_glShaderSource void __stdcall GLee_Lazy_glShaderSource(GLuint shader, GLsizei count, const GLchar* * string, const GLint * length) {if (GLeeInit()) glShaderSource(shader, count, string, length);} GLEEPFNGLSHADERSOURCEPROC GLeeFuncPtr_glShaderSource=GLee_Lazy_glShaderSource; #endif #ifndef GLEE_C_DEFINED_glUseProgram #define GLEE_C_DEFINED_glUseProgram void __stdcall GLee_Lazy_glUseProgram(GLuint program) {if (GLeeInit()) glUseProgram(program);} GLEEPFNGLUSEPROGRAMPROC GLeeFuncPtr_glUseProgram=GLee_Lazy_glUseProgram; #endif #ifndef GLEE_C_DEFINED_glUniform1f #define GLEE_C_DEFINED_glUniform1f void __stdcall GLee_Lazy_glUniform1f(GLint location, GLfloat v0) {if (GLeeInit()) glUniform1f(location, v0);} GLEEPFNGLUNIFORM1FPROC GLeeFuncPtr_glUniform1f=GLee_Lazy_glUniform1f; #endif #ifndef GLEE_C_DEFINED_glUniform2f #define GLEE_C_DEFINED_glUniform2f void __stdcall GLee_Lazy_glUniform2f(GLint location, GLfloat v0, GLfloat v1) {if (GLeeInit()) glUniform2f(location, v0, v1);} GLEEPFNGLUNIFORM2FPROC GLeeFuncPtr_glUniform2f=GLee_Lazy_glUniform2f; #endif #ifndef GLEE_C_DEFINED_glUniform3f #define GLEE_C_DEFINED_glUniform3f void __stdcall GLee_Lazy_glUniform3f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2) {if (GLeeInit()) glUniform3f(location, v0, v1, v2);} GLEEPFNGLUNIFORM3FPROC GLeeFuncPtr_glUniform3f=GLee_Lazy_glUniform3f; #endif #ifndef GLEE_C_DEFINED_glUniform4f #define GLEE_C_DEFINED_glUniform4f void __stdcall GLee_Lazy_glUniform4f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) {if (GLeeInit()) glUniform4f(location, v0, v1, v2, v3);} GLEEPFNGLUNIFORM4FPROC GLeeFuncPtr_glUniform4f=GLee_Lazy_glUniform4f; #endif #ifndef GLEE_C_DEFINED_glUniform1i #define GLEE_C_DEFINED_glUniform1i void __stdcall GLee_Lazy_glUniform1i(GLint location, GLint v0) {if (GLeeInit()) glUniform1i(location, v0);} GLEEPFNGLUNIFORM1IPROC GLeeFuncPtr_glUniform1i=GLee_Lazy_glUniform1i; #endif #ifndef GLEE_C_DEFINED_glUniform2i #define GLEE_C_DEFINED_glUniform2i void __stdcall GLee_Lazy_glUniform2i(GLint location, GLint v0, GLint v1) {if (GLeeInit()) glUniform2i(location, v0, v1);} GLEEPFNGLUNIFORM2IPROC GLeeFuncPtr_glUniform2i=GLee_Lazy_glUniform2i; #endif #ifndef GLEE_C_DEFINED_glUniform3i #define GLEE_C_DEFINED_glUniform3i void __stdcall GLee_Lazy_glUniform3i(GLint location, GLint v0, GLint v1, GLint v2) {if (GLeeInit()) glUniform3i(location, v0, v1, v2);} GLEEPFNGLUNIFORM3IPROC GLeeFuncPtr_glUniform3i=GLee_Lazy_glUniform3i; #endif #ifndef GLEE_C_DEFINED_glUniform4i #define GLEE_C_DEFINED_glUniform4i void __stdcall GLee_Lazy_glUniform4i(GLint location, GLint v0, GLint v1, GLint v2, GLint v3) {if (GLeeInit()) glUniform4i(location, v0, v1, v2, v3);} GLEEPFNGLUNIFORM4IPROC GLeeFuncPtr_glUniform4i=GLee_Lazy_glUniform4i; #endif #ifndef GLEE_C_DEFINED_glUniform1fv #define GLEE_C_DEFINED_glUniform1fv void __stdcall GLee_Lazy_glUniform1fv(GLint location, GLsizei count, const GLfloat * value) {if (GLeeInit()) glUniform1fv(location, count, value);} GLEEPFNGLUNIFORM1FVPROC GLeeFuncPtr_glUniform1fv=GLee_Lazy_glUniform1fv; #endif #ifndef GLEE_C_DEFINED_glUniform2fv #define GLEE_C_DEFINED_glUniform2fv void __stdcall GLee_Lazy_glUniform2fv(GLint location, GLsizei count, const GLfloat * value) {if (GLeeInit()) glUniform2fv(location, count, value);} GLEEPFNGLUNIFORM2FVPROC GLeeFuncPtr_glUniform2fv=GLee_Lazy_glUniform2fv; #endif #ifndef GLEE_C_DEFINED_glUniform3fv #define GLEE_C_DEFINED_glUniform3fv void __stdcall GLee_Lazy_glUniform3fv(GLint location, GLsizei count, const GLfloat * value) {if (GLeeInit()) glUniform3fv(location, count, value);} GLEEPFNGLUNIFORM3FVPROC GLeeFuncPtr_glUniform3fv=GLee_Lazy_glUniform3fv; #endif #ifndef GLEE_C_DEFINED_glUniform4fv #define GLEE_C_DEFINED_glUniform4fv void __stdcall GLee_Lazy_glUniform4fv(GLint location, GLsizei count, const GLfloat * value) {if (GLeeInit()) glUniform4fv(location, count, value);} GLEEPFNGLUNIFORM4FVPROC GLeeFuncPtr_glUniform4fv=GLee_Lazy_glUniform4fv; #endif #ifndef GLEE_C_DEFINED_glUniform1iv #define GLEE_C_DEFINED_glUniform1iv void __stdcall GLee_Lazy_glUniform1iv(GLint location, GLsizei count, const GLint * value) {if (GLeeInit()) glUniform1iv(location, count, value);} GLEEPFNGLUNIFORM1IVPROC GLeeFuncPtr_glUniform1iv=GLee_Lazy_glUniform1iv; #endif #ifndef GLEE_C_DEFINED_glUniform2iv #define GLEE_C_DEFINED_glUniform2iv void __stdcall GLee_Lazy_glUniform2iv(GLint location, GLsizei count, const GLint * value) {if (GLeeInit()) glUniform2iv(location, count, value);} GLEEPFNGLUNIFORM2IVPROC GLeeFuncPtr_glUniform2iv=GLee_Lazy_glUniform2iv; #endif #ifndef GLEE_C_DEFINED_glUniform3iv #define GLEE_C_DEFINED_glUniform3iv void __stdcall GLee_Lazy_glUniform3iv(GLint location, GLsizei count, const GLint * value) {if (GLeeInit()) glUniform3iv(location, count, value);} GLEEPFNGLUNIFORM3IVPROC GLeeFuncPtr_glUniform3iv=GLee_Lazy_glUniform3iv; #endif #ifndef GLEE_C_DEFINED_glUniform4iv #define GLEE_C_DEFINED_glUniform4iv void __stdcall GLee_Lazy_glUniform4iv(GLint location, GLsizei count, const GLint * value) {if (GLeeInit()) glUniform4iv(location, count, value);} GLEEPFNGLUNIFORM4IVPROC GLeeFuncPtr_glUniform4iv=GLee_Lazy_glUniform4iv; #endif #ifndef GLEE_C_DEFINED_glUniformMatrix2fv #define GLEE_C_DEFINED_glUniformMatrix2fv void __stdcall GLee_Lazy_glUniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {if (GLeeInit()) glUniformMatrix2fv(location, count, transpose, value);} GLEEPFNGLUNIFORMMATRIX2FVPROC GLeeFuncPtr_glUniformMatrix2fv=GLee_Lazy_glUniformMatrix2fv; #endif #ifndef GLEE_C_DEFINED_glUniformMatrix3fv #define GLEE_C_DEFINED_glUniformMatrix3fv void __stdcall GLee_Lazy_glUniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {if (GLeeInit()) glUniformMatrix3fv(location, count, transpose, value);} GLEEPFNGLUNIFORMMATRIX3FVPROC GLeeFuncPtr_glUniformMatrix3fv=GLee_Lazy_glUniformMatrix3fv; #endif #ifndef GLEE_C_DEFINED_glUniformMatrix4fv #define GLEE_C_DEFINED_glUniformMatrix4fv void __stdcall GLee_Lazy_glUniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {if (GLeeInit()) glUniformMatrix4fv(location, count, transpose, value);} GLEEPFNGLUNIFORMMATRIX4FVPROC GLeeFuncPtr_glUniformMatrix4fv=GLee_Lazy_glUniformMatrix4fv; #endif #ifndef GLEE_C_DEFINED_glValidateProgram #define GLEE_C_DEFINED_glValidateProgram void __stdcall GLee_Lazy_glValidateProgram(GLuint program) {if (GLeeInit()) glValidateProgram(program);} GLEEPFNGLVALIDATEPROGRAMPROC GLeeFuncPtr_glValidateProgram=GLee_Lazy_glValidateProgram; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib1d #define GLEE_C_DEFINED_glVertexAttrib1d void __stdcall GLee_Lazy_glVertexAttrib1d(GLuint index, GLdouble x) {if (GLeeInit()) glVertexAttrib1d(index, x);} GLEEPFNGLVERTEXATTRIB1DPROC GLeeFuncPtr_glVertexAttrib1d=GLee_Lazy_glVertexAttrib1d; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib1dv #define GLEE_C_DEFINED_glVertexAttrib1dv void __stdcall GLee_Lazy_glVertexAttrib1dv(GLuint index, const GLdouble * v) {if (GLeeInit()) glVertexAttrib1dv(index, v);} GLEEPFNGLVERTEXATTRIB1DVPROC GLeeFuncPtr_glVertexAttrib1dv=GLee_Lazy_glVertexAttrib1dv; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib1f #define GLEE_C_DEFINED_glVertexAttrib1f void __stdcall GLee_Lazy_glVertexAttrib1f(GLuint index, GLfloat x) {if (GLeeInit()) glVertexAttrib1f(index, x);} GLEEPFNGLVERTEXATTRIB1FPROC GLeeFuncPtr_glVertexAttrib1f=GLee_Lazy_glVertexAttrib1f; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib1fv #define GLEE_C_DEFINED_glVertexAttrib1fv void __stdcall GLee_Lazy_glVertexAttrib1fv(GLuint index, const GLfloat * v) {if (GLeeInit()) glVertexAttrib1fv(index, v);} GLEEPFNGLVERTEXATTRIB1FVPROC GLeeFuncPtr_glVertexAttrib1fv=GLee_Lazy_glVertexAttrib1fv; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib1s #define GLEE_C_DEFINED_glVertexAttrib1s void __stdcall GLee_Lazy_glVertexAttrib1s(GLuint index, GLshort x) {if (GLeeInit()) glVertexAttrib1s(index, x);} GLEEPFNGLVERTEXATTRIB1SPROC GLeeFuncPtr_glVertexAttrib1s=GLee_Lazy_glVertexAttrib1s; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib1sv #define GLEE_C_DEFINED_glVertexAttrib1sv void __stdcall GLee_Lazy_glVertexAttrib1sv(GLuint index, const GLshort * v) {if (GLeeInit()) glVertexAttrib1sv(index, v);} GLEEPFNGLVERTEXATTRIB1SVPROC GLeeFuncPtr_glVertexAttrib1sv=GLee_Lazy_glVertexAttrib1sv; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib2d #define GLEE_C_DEFINED_glVertexAttrib2d void __stdcall GLee_Lazy_glVertexAttrib2d(GLuint index, GLdouble x, GLdouble y) {if (GLeeInit()) glVertexAttrib2d(index, x, y);} GLEEPFNGLVERTEXATTRIB2DPROC GLeeFuncPtr_glVertexAttrib2d=GLee_Lazy_glVertexAttrib2d; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib2dv #define GLEE_C_DEFINED_glVertexAttrib2dv void __stdcall GLee_Lazy_glVertexAttrib2dv(GLuint index, const GLdouble * v) {if (GLeeInit()) glVertexAttrib2dv(index, v);} GLEEPFNGLVERTEXATTRIB2DVPROC GLeeFuncPtr_glVertexAttrib2dv=GLee_Lazy_glVertexAttrib2dv; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib2f #define GLEE_C_DEFINED_glVertexAttrib2f void __stdcall GLee_Lazy_glVertexAttrib2f(GLuint index, GLfloat x, GLfloat y) {if (GLeeInit()) glVertexAttrib2f(index, x, y);} GLEEPFNGLVERTEXATTRIB2FPROC GLeeFuncPtr_glVertexAttrib2f=GLee_Lazy_glVertexAttrib2f; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib2fv #define GLEE_C_DEFINED_glVertexAttrib2fv void __stdcall GLee_Lazy_glVertexAttrib2fv(GLuint index, const GLfloat * v) {if (GLeeInit()) glVertexAttrib2fv(index, v);} GLEEPFNGLVERTEXATTRIB2FVPROC GLeeFuncPtr_glVertexAttrib2fv=GLee_Lazy_glVertexAttrib2fv; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib2s #define GLEE_C_DEFINED_glVertexAttrib2s void __stdcall GLee_Lazy_glVertexAttrib2s(GLuint index, GLshort x, GLshort y) {if (GLeeInit()) glVertexAttrib2s(index, x, y);} GLEEPFNGLVERTEXATTRIB2SPROC GLeeFuncPtr_glVertexAttrib2s=GLee_Lazy_glVertexAttrib2s; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib2sv #define GLEE_C_DEFINED_glVertexAttrib2sv void __stdcall GLee_Lazy_glVertexAttrib2sv(GLuint index, const GLshort * v) {if (GLeeInit()) glVertexAttrib2sv(index, v);} GLEEPFNGLVERTEXATTRIB2SVPROC GLeeFuncPtr_glVertexAttrib2sv=GLee_Lazy_glVertexAttrib2sv; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib3d #define GLEE_C_DEFINED_glVertexAttrib3d void __stdcall GLee_Lazy_glVertexAttrib3d(GLuint index, GLdouble x, GLdouble y, GLdouble z) {if (GLeeInit()) glVertexAttrib3d(index, x, y, z);} GLEEPFNGLVERTEXATTRIB3DPROC GLeeFuncPtr_glVertexAttrib3d=GLee_Lazy_glVertexAttrib3d; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib3dv #define GLEE_C_DEFINED_glVertexAttrib3dv void __stdcall GLee_Lazy_glVertexAttrib3dv(GLuint index, const GLdouble * v) {if (GLeeInit()) glVertexAttrib3dv(index, v);} GLEEPFNGLVERTEXATTRIB3DVPROC GLeeFuncPtr_glVertexAttrib3dv=GLee_Lazy_glVertexAttrib3dv; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib3f #define GLEE_C_DEFINED_glVertexAttrib3f void __stdcall GLee_Lazy_glVertexAttrib3f(GLuint index, GLfloat x, GLfloat y, GLfloat z) {if (GLeeInit()) glVertexAttrib3f(index, x, y, z);} GLEEPFNGLVERTEXATTRIB3FPROC GLeeFuncPtr_glVertexAttrib3f=GLee_Lazy_glVertexAttrib3f; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib3fv #define GLEE_C_DEFINED_glVertexAttrib3fv void __stdcall GLee_Lazy_glVertexAttrib3fv(GLuint index, const GLfloat * v) {if (GLeeInit()) glVertexAttrib3fv(index, v);} GLEEPFNGLVERTEXATTRIB3FVPROC GLeeFuncPtr_glVertexAttrib3fv=GLee_Lazy_glVertexAttrib3fv; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib3s #define GLEE_C_DEFINED_glVertexAttrib3s void __stdcall GLee_Lazy_glVertexAttrib3s(GLuint index, GLshort x, GLshort y, GLshort z) {if (GLeeInit()) glVertexAttrib3s(index, x, y, z);} GLEEPFNGLVERTEXATTRIB3SPROC GLeeFuncPtr_glVertexAttrib3s=GLee_Lazy_glVertexAttrib3s; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib3sv #define GLEE_C_DEFINED_glVertexAttrib3sv void __stdcall GLee_Lazy_glVertexAttrib3sv(GLuint index, const GLshort * v) {if (GLeeInit()) glVertexAttrib3sv(index, v);} GLEEPFNGLVERTEXATTRIB3SVPROC GLeeFuncPtr_glVertexAttrib3sv=GLee_Lazy_glVertexAttrib3sv; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4Nbv #define GLEE_C_DEFINED_glVertexAttrib4Nbv void __stdcall GLee_Lazy_glVertexAttrib4Nbv(GLuint index, const GLbyte * v) {if (GLeeInit()) glVertexAttrib4Nbv(index, v);} GLEEPFNGLVERTEXATTRIB4NBVPROC GLeeFuncPtr_glVertexAttrib4Nbv=GLee_Lazy_glVertexAttrib4Nbv; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4Niv #define GLEE_C_DEFINED_glVertexAttrib4Niv void __stdcall GLee_Lazy_glVertexAttrib4Niv(GLuint index, const GLint * v) {if (GLeeInit()) glVertexAttrib4Niv(index, v);} GLEEPFNGLVERTEXATTRIB4NIVPROC GLeeFuncPtr_glVertexAttrib4Niv=GLee_Lazy_glVertexAttrib4Niv; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4Nsv #define GLEE_C_DEFINED_glVertexAttrib4Nsv void __stdcall GLee_Lazy_glVertexAttrib4Nsv(GLuint index, const GLshort * v) {if (GLeeInit()) glVertexAttrib4Nsv(index, v);} GLEEPFNGLVERTEXATTRIB4NSVPROC GLeeFuncPtr_glVertexAttrib4Nsv=GLee_Lazy_glVertexAttrib4Nsv; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4Nub #define GLEE_C_DEFINED_glVertexAttrib4Nub void __stdcall GLee_Lazy_glVertexAttrib4Nub(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w) {if (GLeeInit()) glVertexAttrib4Nub(index, x, y, z, w);} GLEEPFNGLVERTEXATTRIB4NUBPROC GLeeFuncPtr_glVertexAttrib4Nub=GLee_Lazy_glVertexAttrib4Nub; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4Nubv #define GLEE_C_DEFINED_glVertexAttrib4Nubv void __stdcall GLee_Lazy_glVertexAttrib4Nubv(GLuint index, const GLubyte * v) {if (GLeeInit()) glVertexAttrib4Nubv(index, v);} GLEEPFNGLVERTEXATTRIB4NUBVPROC GLeeFuncPtr_glVertexAttrib4Nubv=GLee_Lazy_glVertexAttrib4Nubv; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4Nuiv #define GLEE_C_DEFINED_glVertexAttrib4Nuiv void __stdcall GLee_Lazy_glVertexAttrib4Nuiv(GLuint index, const GLuint * v) {if (GLeeInit()) glVertexAttrib4Nuiv(index, v);} GLEEPFNGLVERTEXATTRIB4NUIVPROC GLeeFuncPtr_glVertexAttrib4Nuiv=GLee_Lazy_glVertexAttrib4Nuiv; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4Nusv #define GLEE_C_DEFINED_glVertexAttrib4Nusv void __stdcall GLee_Lazy_glVertexAttrib4Nusv(GLuint index, const GLushort * v) {if (GLeeInit()) glVertexAttrib4Nusv(index, v);} GLEEPFNGLVERTEXATTRIB4NUSVPROC GLeeFuncPtr_glVertexAttrib4Nusv=GLee_Lazy_glVertexAttrib4Nusv; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4bv #define GLEE_C_DEFINED_glVertexAttrib4bv void __stdcall GLee_Lazy_glVertexAttrib4bv(GLuint index, const GLbyte * v) {if (GLeeInit()) glVertexAttrib4bv(index, v);} GLEEPFNGLVERTEXATTRIB4BVPROC GLeeFuncPtr_glVertexAttrib4bv=GLee_Lazy_glVertexAttrib4bv; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4d #define GLEE_C_DEFINED_glVertexAttrib4d void __stdcall GLee_Lazy_glVertexAttrib4d(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) {if (GLeeInit()) glVertexAttrib4d(index, x, y, z, w);} GLEEPFNGLVERTEXATTRIB4DPROC GLeeFuncPtr_glVertexAttrib4d=GLee_Lazy_glVertexAttrib4d; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4dv #define GLEE_C_DEFINED_glVertexAttrib4dv void __stdcall GLee_Lazy_glVertexAttrib4dv(GLuint index, const GLdouble * v) {if (GLeeInit()) glVertexAttrib4dv(index, v);} GLEEPFNGLVERTEXATTRIB4DVPROC GLeeFuncPtr_glVertexAttrib4dv=GLee_Lazy_glVertexAttrib4dv; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4f #define GLEE_C_DEFINED_glVertexAttrib4f void __stdcall GLee_Lazy_glVertexAttrib4f(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w) {if (GLeeInit()) glVertexAttrib4f(index, x, y, z, w);} GLEEPFNGLVERTEXATTRIB4FPROC GLeeFuncPtr_glVertexAttrib4f=GLee_Lazy_glVertexAttrib4f; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4fv #define GLEE_C_DEFINED_glVertexAttrib4fv void __stdcall GLee_Lazy_glVertexAttrib4fv(GLuint index, const GLfloat * v) {if (GLeeInit()) glVertexAttrib4fv(index, v);} GLEEPFNGLVERTEXATTRIB4FVPROC GLeeFuncPtr_glVertexAttrib4fv=GLee_Lazy_glVertexAttrib4fv; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4iv #define GLEE_C_DEFINED_glVertexAttrib4iv void __stdcall GLee_Lazy_glVertexAttrib4iv(GLuint index, const GLint * v) {if (GLeeInit()) glVertexAttrib4iv(index, v);} GLEEPFNGLVERTEXATTRIB4IVPROC GLeeFuncPtr_glVertexAttrib4iv=GLee_Lazy_glVertexAttrib4iv; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4s #define GLEE_C_DEFINED_glVertexAttrib4s void __stdcall GLee_Lazy_glVertexAttrib4s(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w) {if (GLeeInit()) glVertexAttrib4s(index, x, y, z, w);} GLEEPFNGLVERTEXATTRIB4SPROC GLeeFuncPtr_glVertexAttrib4s=GLee_Lazy_glVertexAttrib4s; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4sv #define GLEE_C_DEFINED_glVertexAttrib4sv void __stdcall GLee_Lazy_glVertexAttrib4sv(GLuint index, const GLshort * v) {if (GLeeInit()) glVertexAttrib4sv(index, v);} GLEEPFNGLVERTEXATTRIB4SVPROC GLeeFuncPtr_glVertexAttrib4sv=GLee_Lazy_glVertexAttrib4sv; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4ubv #define GLEE_C_DEFINED_glVertexAttrib4ubv void __stdcall GLee_Lazy_glVertexAttrib4ubv(GLuint index, const GLubyte * v) {if (GLeeInit()) glVertexAttrib4ubv(index, v);} GLEEPFNGLVERTEXATTRIB4UBVPROC GLeeFuncPtr_glVertexAttrib4ubv=GLee_Lazy_glVertexAttrib4ubv; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4uiv #define GLEE_C_DEFINED_glVertexAttrib4uiv void __stdcall GLee_Lazy_glVertexAttrib4uiv(GLuint index, const GLuint * v) {if (GLeeInit()) glVertexAttrib4uiv(index, v);} GLEEPFNGLVERTEXATTRIB4UIVPROC GLeeFuncPtr_glVertexAttrib4uiv=GLee_Lazy_glVertexAttrib4uiv; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4usv #define GLEE_C_DEFINED_glVertexAttrib4usv void __stdcall GLee_Lazy_glVertexAttrib4usv(GLuint index, const GLushort * v) {if (GLeeInit()) glVertexAttrib4usv(index, v);} GLEEPFNGLVERTEXATTRIB4USVPROC GLeeFuncPtr_glVertexAttrib4usv=GLee_Lazy_glVertexAttrib4usv; #endif #ifndef GLEE_C_DEFINED_glVertexAttribPointer #define GLEE_C_DEFINED_glVertexAttribPointer void __stdcall GLee_Lazy_glVertexAttribPointer(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid * pointer) {if (GLeeInit()) glVertexAttribPointer(index, size, type, normalized, stride, pointer);} GLEEPFNGLVERTEXATTRIBPOINTERPROC GLeeFuncPtr_glVertexAttribPointer=GLee_Lazy_glVertexAttribPointer; #endif #endif /* GL_VERSION_2_1 */ #ifdef __GLEE_GL_VERSION_2_1 #ifndef GLEE_C_DEFINED_glUniformMatrix2x3fv #define GLEE_C_DEFINED_glUniformMatrix2x3fv void __stdcall GLee_Lazy_glUniformMatrix2x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {if (GLeeInit()) glUniformMatrix2x3fv(location, count, transpose, value);} GLEEPFNGLUNIFORMMATRIX2X3FVPROC GLeeFuncPtr_glUniformMatrix2x3fv=GLee_Lazy_glUniformMatrix2x3fv; #endif #ifndef GLEE_C_DEFINED_glUniformMatrix3x2fv #define GLEE_C_DEFINED_glUniformMatrix3x2fv void __stdcall GLee_Lazy_glUniformMatrix3x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {if (GLeeInit()) glUniformMatrix3x2fv(location, count, transpose, value);} GLEEPFNGLUNIFORMMATRIX3X2FVPROC GLeeFuncPtr_glUniformMatrix3x2fv=GLee_Lazy_glUniformMatrix3x2fv; #endif #ifndef GLEE_C_DEFINED_glUniformMatrix2x4fv #define GLEE_C_DEFINED_glUniformMatrix2x4fv void __stdcall GLee_Lazy_glUniformMatrix2x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {if (GLeeInit()) glUniformMatrix2x4fv(location, count, transpose, value);} GLEEPFNGLUNIFORMMATRIX2X4FVPROC GLeeFuncPtr_glUniformMatrix2x4fv=GLee_Lazy_glUniformMatrix2x4fv; #endif #ifndef GLEE_C_DEFINED_glUniformMatrix4x2fv #define GLEE_C_DEFINED_glUniformMatrix4x2fv void __stdcall GLee_Lazy_glUniformMatrix4x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {if (GLeeInit()) glUniformMatrix4x2fv(location, count, transpose, value);} GLEEPFNGLUNIFORMMATRIX4X2FVPROC GLeeFuncPtr_glUniformMatrix4x2fv=GLee_Lazy_glUniformMatrix4x2fv; #endif #ifndef GLEE_C_DEFINED_glUniformMatrix3x4fv #define GLEE_C_DEFINED_glUniformMatrix3x4fv void __stdcall GLee_Lazy_glUniformMatrix3x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {if (GLeeInit()) glUniformMatrix3x4fv(location, count, transpose, value);} GLEEPFNGLUNIFORMMATRIX3X4FVPROC GLeeFuncPtr_glUniformMatrix3x4fv=GLee_Lazy_glUniformMatrix3x4fv; #endif #ifndef GLEE_C_DEFINED_glUniformMatrix4x3fv #define GLEE_C_DEFINED_glUniformMatrix4x3fv void __stdcall GLee_Lazy_glUniformMatrix4x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {if (GLeeInit()) glUniformMatrix4x3fv(location, count, transpose, value);} GLEEPFNGLUNIFORMMATRIX4X3FVPROC GLeeFuncPtr_glUniformMatrix4x3fv=GLee_Lazy_glUniformMatrix4x3fv; #endif #endif /* GL_VERSION_3_0 */ #ifdef __GLEE_GL_VERSION_3_0 #ifndef GLEE_C_DEFINED_glColorMaski #define GLEE_C_DEFINED_glColorMaski void __stdcall GLee_Lazy_glColorMaski(GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a) {if (GLeeInit()) glColorMaski(index, r, g, b, a);} GLEEPFNGLCOLORMASKIPROC GLeeFuncPtr_glColorMaski=GLee_Lazy_glColorMaski; #endif #ifndef GLEE_C_DEFINED_glGetBooleani_v #define GLEE_C_DEFINED_glGetBooleani_v void __stdcall GLee_Lazy_glGetBooleani_v(GLenum target, GLuint index, GLboolean * data) {if (GLeeInit()) glGetBooleani_v(target, index, data);} GLEEPFNGLGETBOOLEANI_VPROC GLeeFuncPtr_glGetBooleani_v=GLee_Lazy_glGetBooleani_v; #endif #ifndef GLEE_C_DEFINED_glGetIntegeri_v #define GLEE_C_DEFINED_glGetIntegeri_v void __stdcall GLee_Lazy_glGetIntegeri_v(GLenum target, GLuint index, GLint * data) {if (GLeeInit()) glGetIntegeri_v(target, index, data);} GLEEPFNGLGETINTEGERI_VPROC GLeeFuncPtr_glGetIntegeri_v=GLee_Lazy_glGetIntegeri_v; #endif #ifndef GLEE_C_DEFINED_glEnablei #define GLEE_C_DEFINED_glEnablei void __stdcall GLee_Lazy_glEnablei(GLenum target, GLuint index) {if (GLeeInit()) glEnablei(target, index);} GLEEPFNGLENABLEIPROC GLeeFuncPtr_glEnablei=GLee_Lazy_glEnablei; #endif #ifndef GLEE_C_DEFINED_glDisablei #define GLEE_C_DEFINED_glDisablei void __stdcall GLee_Lazy_glDisablei(GLenum target, GLuint index) {if (GLeeInit()) glDisablei(target, index);} GLEEPFNGLDISABLEIPROC GLeeFuncPtr_glDisablei=GLee_Lazy_glDisablei; #endif #ifndef GLEE_C_DEFINED_glIsEnabledi #define GLEE_C_DEFINED_glIsEnabledi GLboolean __stdcall GLee_Lazy_glIsEnabledi(GLenum target, GLuint index) {if (GLeeInit()) return glIsEnabledi(target, index); return (GLboolean)0;} GLEEPFNGLISENABLEDIPROC GLeeFuncPtr_glIsEnabledi=GLee_Lazy_glIsEnabledi; #endif #ifndef GLEE_C_DEFINED_glBeginTransformFeedback #define GLEE_C_DEFINED_glBeginTransformFeedback void __stdcall GLee_Lazy_glBeginTransformFeedback(GLenum primitiveMode) {if (GLeeInit()) glBeginTransformFeedback(primitiveMode);} GLEEPFNGLBEGINTRANSFORMFEEDBACKPROC GLeeFuncPtr_glBeginTransformFeedback=GLee_Lazy_glBeginTransformFeedback; #endif #ifndef GLEE_C_DEFINED_glEndTransformFeedback #define GLEE_C_DEFINED_glEndTransformFeedback void __stdcall GLee_Lazy_glEndTransformFeedback(void) {if (GLeeInit()) glEndTransformFeedback();} GLEEPFNGLENDTRANSFORMFEEDBACKPROC GLeeFuncPtr_glEndTransformFeedback=GLee_Lazy_glEndTransformFeedback; #endif #ifndef GLEE_C_DEFINED_glBindBufferRange #define GLEE_C_DEFINED_glBindBufferRange void __stdcall GLee_Lazy_glBindBufferRange(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size) {if (GLeeInit()) glBindBufferRange(target, index, buffer, offset, size);} GLEEPFNGLBINDBUFFERRANGEPROC GLeeFuncPtr_glBindBufferRange=GLee_Lazy_glBindBufferRange; #endif #ifndef GLEE_C_DEFINED_glBindBufferBase #define GLEE_C_DEFINED_glBindBufferBase void __stdcall GLee_Lazy_glBindBufferBase(GLenum target, GLuint index, GLuint buffer) {if (GLeeInit()) glBindBufferBase(target, index, buffer);} GLEEPFNGLBINDBUFFERBASEPROC GLeeFuncPtr_glBindBufferBase=GLee_Lazy_glBindBufferBase; #endif #ifndef GLEE_C_DEFINED_glTransformFeedbackVaryings #define GLEE_C_DEFINED_glTransformFeedbackVaryings void __stdcall GLee_Lazy_glTransformFeedbackVaryings(GLuint program, GLsizei count, const GLint * locations, GLenum bufferMode) {if (GLeeInit()) glTransformFeedbackVaryings(program, count, locations, bufferMode);} GLEEPFNGLTRANSFORMFEEDBACKVARYINGSPROC GLeeFuncPtr_glTransformFeedbackVaryings=GLee_Lazy_glTransformFeedbackVaryings; #endif #ifndef GLEE_C_DEFINED_glGetTransformFeedbackVarying #define GLEE_C_DEFINED_glGetTransformFeedbackVarying void __stdcall GLee_Lazy_glGetTransformFeedbackVarying(GLuint program, GLuint index, GLint * location) {if (GLeeInit()) glGetTransformFeedbackVarying(program, index, location);} GLEEPFNGLGETTRANSFORMFEEDBACKVARYINGPROC GLeeFuncPtr_glGetTransformFeedbackVarying=GLee_Lazy_glGetTransformFeedbackVarying; #endif #ifndef GLEE_C_DEFINED_glClampColor #define GLEE_C_DEFINED_glClampColor void __stdcall GLee_Lazy_glClampColor(GLenum target, GLenum clamp) {if (GLeeInit()) glClampColor(target, clamp);} GLEEPFNGLCLAMPCOLORPROC GLeeFuncPtr_glClampColor=GLee_Lazy_glClampColor; #endif #ifndef GLEE_C_DEFINED_glBeginConditionalRender #define GLEE_C_DEFINED_glBeginConditionalRender void __stdcall GLee_Lazy_glBeginConditionalRender(GLuint id, GLenum mode) {if (GLeeInit()) glBeginConditionalRender(id, mode);} GLEEPFNGLBEGINCONDITIONALRENDERPROC GLeeFuncPtr_glBeginConditionalRender=GLee_Lazy_glBeginConditionalRender; #endif #ifndef GLEE_C_DEFINED_glEndConditionalRender #define GLEE_C_DEFINED_glEndConditionalRender void __stdcall GLee_Lazy_glEndConditionalRender(void) {if (GLeeInit()) glEndConditionalRender();} GLEEPFNGLENDCONDITIONALRENDERPROC GLeeFuncPtr_glEndConditionalRender=GLee_Lazy_glEndConditionalRender; #endif #ifndef GLEE_C_DEFINED_glVertexAttribI1i #define GLEE_C_DEFINED_glVertexAttribI1i void __stdcall GLee_Lazy_glVertexAttribI1i(GLuint index, GLint x) {if (GLeeInit()) glVertexAttribI1i(index, x);} GLEEPFNGLVERTEXATTRIBI1IPROC GLeeFuncPtr_glVertexAttribI1i=GLee_Lazy_glVertexAttribI1i; #endif #ifndef GLEE_C_DEFINED_glVertexAttribI2i #define GLEE_C_DEFINED_glVertexAttribI2i void __stdcall GLee_Lazy_glVertexAttribI2i(GLuint index, GLint x, GLint y) {if (GLeeInit()) glVertexAttribI2i(index, x, y);} GLEEPFNGLVERTEXATTRIBI2IPROC GLeeFuncPtr_glVertexAttribI2i=GLee_Lazy_glVertexAttribI2i; #endif #ifndef GLEE_C_DEFINED_glVertexAttribI3i #define GLEE_C_DEFINED_glVertexAttribI3i void __stdcall GLee_Lazy_glVertexAttribI3i(GLuint index, GLint x, GLint y, GLint z) {if (GLeeInit()) glVertexAttribI3i(index, x, y, z);} GLEEPFNGLVERTEXATTRIBI3IPROC GLeeFuncPtr_glVertexAttribI3i=GLee_Lazy_glVertexAttribI3i; #endif #ifndef GLEE_C_DEFINED_glVertexAttribI4i #define GLEE_C_DEFINED_glVertexAttribI4i void __stdcall GLee_Lazy_glVertexAttribI4i(GLuint index, GLint x, GLint y, GLint z, GLint w) {if (GLeeInit()) glVertexAttribI4i(index, x, y, z, w);} GLEEPFNGLVERTEXATTRIBI4IPROC GLeeFuncPtr_glVertexAttribI4i=GLee_Lazy_glVertexAttribI4i; #endif #ifndef GLEE_C_DEFINED_glVertexAttribI1ui #define GLEE_C_DEFINED_glVertexAttribI1ui void __stdcall GLee_Lazy_glVertexAttribI1ui(GLuint index, GLuint x) {if (GLeeInit()) glVertexAttribI1ui(index, x);} GLEEPFNGLVERTEXATTRIBI1UIPROC GLeeFuncPtr_glVertexAttribI1ui=GLee_Lazy_glVertexAttribI1ui; #endif #ifndef GLEE_C_DEFINED_glVertexAttribI2ui #define GLEE_C_DEFINED_glVertexAttribI2ui void __stdcall GLee_Lazy_glVertexAttribI2ui(GLuint index, GLuint x, GLuint y) {if (GLeeInit()) glVertexAttribI2ui(index, x, y);} GLEEPFNGLVERTEXATTRIBI2UIPROC GLeeFuncPtr_glVertexAttribI2ui=GLee_Lazy_glVertexAttribI2ui; #endif #ifndef GLEE_C_DEFINED_glVertexAttribI3ui #define GLEE_C_DEFINED_glVertexAttribI3ui void __stdcall GLee_Lazy_glVertexAttribI3ui(GLuint index, GLuint x, GLuint y, GLuint z) {if (GLeeInit()) glVertexAttribI3ui(index, x, y, z);} GLEEPFNGLVERTEXATTRIBI3UIPROC GLeeFuncPtr_glVertexAttribI3ui=GLee_Lazy_glVertexAttribI3ui; #endif #ifndef GLEE_C_DEFINED_glVertexAttribI4ui #define GLEE_C_DEFINED_glVertexAttribI4ui void __stdcall GLee_Lazy_glVertexAttribI4ui(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w) {if (GLeeInit()) glVertexAttribI4ui(index, x, y, z, w);} GLEEPFNGLVERTEXATTRIBI4UIPROC GLeeFuncPtr_glVertexAttribI4ui=GLee_Lazy_glVertexAttribI4ui; #endif #ifndef GLEE_C_DEFINED_glVertexAttribI1iv #define GLEE_C_DEFINED_glVertexAttribI1iv void __stdcall GLee_Lazy_glVertexAttribI1iv(GLuint index, const GLint * v) {if (GLeeInit()) glVertexAttribI1iv(index, v);} GLEEPFNGLVERTEXATTRIBI1IVPROC GLeeFuncPtr_glVertexAttribI1iv=GLee_Lazy_glVertexAttribI1iv; #endif #ifndef GLEE_C_DEFINED_glVertexAttribI2iv #define GLEE_C_DEFINED_glVertexAttribI2iv void __stdcall GLee_Lazy_glVertexAttribI2iv(GLuint index, const GLint * v) {if (GLeeInit()) glVertexAttribI2iv(index, v);} GLEEPFNGLVERTEXATTRIBI2IVPROC GLeeFuncPtr_glVertexAttribI2iv=GLee_Lazy_glVertexAttribI2iv; #endif #ifndef GLEE_C_DEFINED_glVertexAttribI3iv #define GLEE_C_DEFINED_glVertexAttribI3iv void __stdcall GLee_Lazy_glVertexAttribI3iv(GLuint index, const GLint * v) {if (GLeeInit()) glVertexAttribI3iv(index, v);} GLEEPFNGLVERTEXATTRIBI3IVPROC GLeeFuncPtr_glVertexAttribI3iv=GLee_Lazy_glVertexAttribI3iv; #endif #ifndef GLEE_C_DEFINED_glVertexAttribI4iv #define GLEE_C_DEFINED_glVertexAttribI4iv void __stdcall GLee_Lazy_glVertexAttribI4iv(GLuint index, const GLint * v) {if (GLeeInit()) glVertexAttribI4iv(index, v);} GLEEPFNGLVERTEXATTRIBI4IVPROC GLeeFuncPtr_glVertexAttribI4iv=GLee_Lazy_glVertexAttribI4iv; #endif #ifndef GLEE_C_DEFINED_glVertexAttribI1uiv #define GLEE_C_DEFINED_glVertexAttribI1uiv void __stdcall GLee_Lazy_glVertexAttribI1uiv(GLuint index, const GLuint * v) {if (GLeeInit()) glVertexAttribI1uiv(index, v);} GLEEPFNGLVERTEXATTRIBI1UIVPROC GLeeFuncPtr_glVertexAttribI1uiv=GLee_Lazy_glVertexAttribI1uiv; #endif #ifndef GLEE_C_DEFINED_glVertexAttribI2uiv #define GLEE_C_DEFINED_glVertexAttribI2uiv void __stdcall GLee_Lazy_glVertexAttribI2uiv(GLuint index, const GLuint * v) {if (GLeeInit()) glVertexAttribI2uiv(index, v);} GLEEPFNGLVERTEXATTRIBI2UIVPROC GLeeFuncPtr_glVertexAttribI2uiv=GLee_Lazy_glVertexAttribI2uiv; #endif #ifndef GLEE_C_DEFINED_glVertexAttribI3uiv #define GLEE_C_DEFINED_glVertexAttribI3uiv void __stdcall GLee_Lazy_glVertexAttribI3uiv(GLuint index, const GLuint * v) {if (GLeeInit()) glVertexAttribI3uiv(index, v);} GLEEPFNGLVERTEXATTRIBI3UIVPROC GLeeFuncPtr_glVertexAttribI3uiv=GLee_Lazy_glVertexAttribI3uiv; #endif #ifndef GLEE_C_DEFINED_glVertexAttribI4uiv #define GLEE_C_DEFINED_glVertexAttribI4uiv void __stdcall GLee_Lazy_glVertexAttribI4uiv(GLuint index, const GLuint * v) {if (GLeeInit()) glVertexAttribI4uiv(index, v);} GLEEPFNGLVERTEXATTRIBI4UIVPROC GLeeFuncPtr_glVertexAttribI4uiv=GLee_Lazy_glVertexAttribI4uiv; #endif #ifndef GLEE_C_DEFINED_glVertexAttribI4bv #define GLEE_C_DEFINED_glVertexAttribI4bv void __stdcall GLee_Lazy_glVertexAttribI4bv(GLuint index, const GLbyte * v) {if (GLeeInit()) glVertexAttribI4bv(index, v);} GLEEPFNGLVERTEXATTRIBI4BVPROC GLeeFuncPtr_glVertexAttribI4bv=GLee_Lazy_glVertexAttribI4bv; #endif #ifndef GLEE_C_DEFINED_glVertexAttribI4sv #define GLEE_C_DEFINED_glVertexAttribI4sv void __stdcall GLee_Lazy_glVertexAttribI4sv(GLuint index, const GLshort * v) {if (GLeeInit()) glVertexAttribI4sv(index, v);} GLEEPFNGLVERTEXATTRIBI4SVPROC GLeeFuncPtr_glVertexAttribI4sv=GLee_Lazy_glVertexAttribI4sv; #endif #ifndef GLEE_C_DEFINED_glVertexAttribI4ubv #define GLEE_C_DEFINED_glVertexAttribI4ubv void __stdcall GLee_Lazy_glVertexAttribI4ubv(GLuint index, const GLubyte * v) {if (GLeeInit()) glVertexAttribI4ubv(index, v);} GLEEPFNGLVERTEXATTRIBI4UBVPROC GLeeFuncPtr_glVertexAttribI4ubv=GLee_Lazy_glVertexAttribI4ubv; #endif #ifndef GLEE_C_DEFINED_glVertexAttribI4usv #define GLEE_C_DEFINED_glVertexAttribI4usv void __stdcall GLee_Lazy_glVertexAttribI4usv(GLuint index, const GLushort * v) {if (GLeeInit()) glVertexAttribI4usv(index, v);} GLEEPFNGLVERTEXATTRIBI4USVPROC GLeeFuncPtr_glVertexAttribI4usv=GLee_Lazy_glVertexAttribI4usv; #endif #ifndef GLEE_C_DEFINED_glVertexAttribIPointer #define GLEE_C_DEFINED_glVertexAttribIPointer void __stdcall GLee_Lazy_glVertexAttribIPointer(GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid * pointer) {if (GLeeInit()) glVertexAttribIPointer(index, size, type, stride, pointer);} GLEEPFNGLVERTEXATTRIBIPOINTERPROC GLeeFuncPtr_glVertexAttribIPointer=GLee_Lazy_glVertexAttribIPointer; #endif #ifndef GLEE_C_DEFINED_glGetVertexAttribIiv #define GLEE_C_DEFINED_glGetVertexAttribIiv void __stdcall GLee_Lazy_glGetVertexAttribIiv(GLuint index, GLenum pname, GLint * params) {if (GLeeInit()) glGetVertexAttribIiv(index, pname, params);} GLEEPFNGLGETVERTEXATTRIBIIVPROC GLeeFuncPtr_glGetVertexAttribIiv=GLee_Lazy_glGetVertexAttribIiv; #endif #ifndef GLEE_C_DEFINED_glGetVertexAttribIuiv #define GLEE_C_DEFINED_glGetVertexAttribIuiv void __stdcall GLee_Lazy_glGetVertexAttribIuiv(GLuint index, GLenum pname, GLuint * params) {if (GLeeInit()) glGetVertexAttribIuiv(index, pname, params);} GLEEPFNGLGETVERTEXATTRIBIUIVPROC GLeeFuncPtr_glGetVertexAttribIuiv=GLee_Lazy_glGetVertexAttribIuiv; #endif #ifndef GLEE_C_DEFINED_glGetUniformuiv #define GLEE_C_DEFINED_glGetUniformuiv void __stdcall GLee_Lazy_glGetUniformuiv(GLuint program, GLint location, GLuint * params) {if (GLeeInit()) glGetUniformuiv(program, location, params);} GLEEPFNGLGETUNIFORMUIVPROC GLeeFuncPtr_glGetUniformuiv=GLee_Lazy_glGetUniformuiv; #endif #ifndef GLEE_C_DEFINED_glBindFragDataLocation #define GLEE_C_DEFINED_glBindFragDataLocation void __stdcall GLee_Lazy_glBindFragDataLocation(GLuint program, GLuint color, const GLchar * name) {if (GLeeInit()) glBindFragDataLocation(program, color, name);} GLEEPFNGLBINDFRAGDATALOCATIONPROC GLeeFuncPtr_glBindFragDataLocation=GLee_Lazy_glBindFragDataLocation; #endif #ifndef GLEE_C_DEFINED_glGetFragDataLocation #define GLEE_C_DEFINED_glGetFragDataLocation GLint __stdcall GLee_Lazy_glGetFragDataLocation(GLuint program, const GLchar * name) {if (GLeeInit()) return glGetFragDataLocation(program, name); return (GLint)0;} GLEEPFNGLGETFRAGDATALOCATIONPROC GLeeFuncPtr_glGetFragDataLocation=GLee_Lazy_glGetFragDataLocation; #endif #ifndef GLEE_C_DEFINED_glUniform1ui #define GLEE_C_DEFINED_glUniform1ui void __stdcall GLee_Lazy_glUniform1ui(GLint location, GLuint v0) {if (GLeeInit()) glUniform1ui(location, v0);} GLEEPFNGLUNIFORM1UIPROC GLeeFuncPtr_glUniform1ui=GLee_Lazy_glUniform1ui; #endif #ifndef GLEE_C_DEFINED_glUniform2ui #define GLEE_C_DEFINED_glUniform2ui void __stdcall GLee_Lazy_glUniform2ui(GLint location, GLuint v0, GLuint v1) {if (GLeeInit()) glUniform2ui(location, v0, v1);} GLEEPFNGLUNIFORM2UIPROC GLeeFuncPtr_glUniform2ui=GLee_Lazy_glUniform2ui; #endif #ifndef GLEE_C_DEFINED_glUniform3ui #define GLEE_C_DEFINED_glUniform3ui void __stdcall GLee_Lazy_glUniform3ui(GLint location, GLuint v0, GLuint v1, GLuint v2) {if (GLeeInit()) glUniform3ui(location, v0, v1, v2);} GLEEPFNGLUNIFORM3UIPROC GLeeFuncPtr_glUniform3ui=GLee_Lazy_glUniform3ui; #endif #ifndef GLEE_C_DEFINED_glUniform4ui #define GLEE_C_DEFINED_glUniform4ui void __stdcall GLee_Lazy_glUniform4ui(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3) {if (GLeeInit()) glUniform4ui(location, v0, v1, v2, v3);} GLEEPFNGLUNIFORM4UIPROC GLeeFuncPtr_glUniform4ui=GLee_Lazy_glUniform4ui; #endif #ifndef GLEE_C_DEFINED_glUniform1uiv #define GLEE_C_DEFINED_glUniform1uiv void __stdcall GLee_Lazy_glUniform1uiv(GLint location, GLsizei count, const GLuint * value) {if (GLeeInit()) glUniform1uiv(location, count, value);} GLEEPFNGLUNIFORM1UIVPROC GLeeFuncPtr_glUniform1uiv=GLee_Lazy_glUniform1uiv; #endif #ifndef GLEE_C_DEFINED_glUniform2uiv #define GLEE_C_DEFINED_glUniform2uiv void __stdcall GLee_Lazy_glUniform2uiv(GLint location, GLsizei count, const GLuint * value) {if (GLeeInit()) glUniform2uiv(location, count, value);} GLEEPFNGLUNIFORM2UIVPROC GLeeFuncPtr_glUniform2uiv=GLee_Lazy_glUniform2uiv; #endif #ifndef GLEE_C_DEFINED_glUniform3uiv #define GLEE_C_DEFINED_glUniform3uiv void __stdcall GLee_Lazy_glUniform3uiv(GLint location, GLsizei count, const GLuint * value) {if (GLeeInit()) glUniform3uiv(location, count, value);} GLEEPFNGLUNIFORM3UIVPROC GLeeFuncPtr_glUniform3uiv=GLee_Lazy_glUniform3uiv; #endif #ifndef GLEE_C_DEFINED_glUniform4uiv #define GLEE_C_DEFINED_glUniform4uiv void __stdcall GLee_Lazy_glUniform4uiv(GLint location, GLsizei count, const GLuint * value) {if (GLeeInit()) glUniform4uiv(location, count, value);} GLEEPFNGLUNIFORM4UIVPROC GLeeFuncPtr_glUniform4uiv=GLee_Lazy_glUniform4uiv; #endif #ifndef GLEE_C_DEFINED_glTexParameterIiv #define GLEE_C_DEFINED_glTexParameterIiv void __stdcall GLee_Lazy_glTexParameterIiv(GLenum target, GLenum pname, const GLint * params) {if (GLeeInit()) glTexParameterIiv(target, pname, params);} GLEEPFNGLTEXPARAMETERIIVPROC GLeeFuncPtr_glTexParameterIiv=GLee_Lazy_glTexParameterIiv; #endif #ifndef GLEE_C_DEFINED_glTexParameterIuiv #define GLEE_C_DEFINED_glTexParameterIuiv void __stdcall GLee_Lazy_glTexParameterIuiv(GLenum target, GLenum pname, const GLuint * params) {if (GLeeInit()) glTexParameterIuiv(target, pname, params);} GLEEPFNGLTEXPARAMETERIUIVPROC GLeeFuncPtr_glTexParameterIuiv=GLee_Lazy_glTexParameterIuiv; #endif #ifndef GLEE_C_DEFINED_glGetTexParameterIiv #define GLEE_C_DEFINED_glGetTexParameterIiv void __stdcall GLee_Lazy_glGetTexParameterIiv(GLenum target, GLenum pname, GLint * params) {if (GLeeInit()) glGetTexParameterIiv(target, pname, params);} GLEEPFNGLGETTEXPARAMETERIIVPROC GLeeFuncPtr_glGetTexParameterIiv=GLee_Lazy_glGetTexParameterIiv; #endif #ifndef GLEE_C_DEFINED_glGetTexParameterIuiv #define GLEE_C_DEFINED_glGetTexParameterIuiv void __stdcall GLee_Lazy_glGetTexParameterIuiv(GLenum target, GLenum pname, GLuint * params) {if (GLeeInit()) glGetTexParameterIuiv(target, pname, params);} GLEEPFNGLGETTEXPARAMETERIUIVPROC GLeeFuncPtr_glGetTexParameterIuiv=GLee_Lazy_glGetTexParameterIuiv; #endif #ifndef GLEE_C_DEFINED_glClearBufferiv #define GLEE_C_DEFINED_glClearBufferiv void __stdcall GLee_Lazy_glClearBufferiv(GLenum buffer, GLint drawbuffer, const GLint * value) {if (GLeeInit()) glClearBufferiv(buffer, drawbuffer, value);} GLEEPFNGLCLEARBUFFERIVPROC GLeeFuncPtr_glClearBufferiv=GLee_Lazy_glClearBufferiv; #endif #ifndef GLEE_C_DEFINED_glClearBufferuiv #define GLEE_C_DEFINED_glClearBufferuiv void __stdcall GLee_Lazy_glClearBufferuiv(GLenum buffer, GLint drawbuffer, const GLuint * value) {if (GLeeInit()) glClearBufferuiv(buffer, drawbuffer, value);} GLEEPFNGLCLEARBUFFERUIVPROC GLeeFuncPtr_glClearBufferuiv=GLee_Lazy_glClearBufferuiv; #endif #ifndef GLEE_C_DEFINED_glClearBufferfv #define GLEE_C_DEFINED_glClearBufferfv void __stdcall GLee_Lazy_glClearBufferfv(GLenum buffer, GLint drawbuffer, const GLfloat * value) {if (GLeeInit()) glClearBufferfv(buffer, drawbuffer, value);} GLEEPFNGLCLEARBUFFERFVPROC GLeeFuncPtr_glClearBufferfv=GLee_Lazy_glClearBufferfv; #endif #ifndef GLEE_C_DEFINED_glClearBufferfi #define GLEE_C_DEFINED_glClearBufferfi void __stdcall GLee_Lazy_glClearBufferfi(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil) {if (GLeeInit()) glClearBufferfi(buffer, drawbuffer, depth, stencil);} GLEEPFNGLCLEARBUFFERFIPROC GLeeFuncPtr_glClearBufferfi=GLee_Lazy_glClearBufferfi; #endif #ifndef GLEE_C_DEFINED_glGetStringi #define GLEE_C_DEFINED_glGetStringi const GLubyte * __stdcall GLee_Lazy_glGetStringi(GLenum name, GLuint index) {if (GLeeInit()) return glGetStringi(name, index); return (const GLubyte *)0;} GLEEPFNGLGETSTRINGIPROC GLeeFuncPtr_glGetStringi=GLee_Lazy_glGetStringi; #endif #endif /* GL_ARB_multitexture */ #ifdef __GLEE_GL_ARB_multitexture #ifndef GLEE_C_DEFINED_glActiveTextureARB #define GLEE_C_DEFINED_glActiveTextureARB void __stdcall GLee_Lazy_glActiveTextureARB(GLenum texture) {if (GLeeInit()) glActiveTextureARB(texture);} GLEEPFNGLACTIVETEXTUREARBPROC GLeeFuncPtr_glActiveTextureARB=GLee_Lazy_glActiveTextureARB; #endif #ifndef GLEE_C_DEFINED_glClientActiveTextureARB #define GLEE_C_DEFINED_glClientActiveTextureARB void __stdcall GLee_Lazy_glClientActiveTextureARB(GLenum texture) {if (GLeeInit()) glClientActiveTextureARB(texture);} GLEEPFNGLCLIENTACTIVETEXTUREARBPROC GLeeFuncPtr_glClientActiveTextureARB=GLee_Lazy_glClientActiveTextureARB; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord1dARB #define GLEE_C_DEFINED_glMultiTexCoord1dARB void __stdcall GLee_Lazy_glMultiTexCoord1dARB(GLenum target, GLdouble s) {if (GLeeInit()) glMultiTexCoord1dARB(target, s);} GLEEPFNGLMULTITEXCOORD1DARBPROC GLeeFuncPtr_glMultiTexCoord1dARB=GLee_Lazy_glMultiTexCoord1dARB; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord1dvARB #define GLEE_C_DEFINED_glMultiTexCoord1dvARB void __stdcall GLee_Lazy_glMultiTexCoord1dvARB(GLenum target, const GLdouble * v) {if (GLeeInit()) glMultiTexCoord1dvARB(target, v);} GLEEPFNGLMULTITEXCOORD1DVARBPROC GLeeFuncPtr_glMultiTexCoord1dvARB=GLee_Lazy_glMultiTexCoord1dvARB; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord1fARB #define GLEE_C_DEFINED_glMultiTexCoord1fARB void __stdcall GLee_Lazy_glMultiTexCoord1fARB(GLenum target, GLfloat s) {if (GLeeInit()) glMultiTexCoord1fARB(target, s);} GLEEPFNGLMULTITEXCOORD1FARBPROC GLeeFuncPtr_glMultiTexCoord1fARB=GLee_Lazy_glMultiTexCoord1fARB; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord1fvARB #define GLEE_C_DEFINED_glMultiTexCoord1fvARB void __stdcall GLee_Lazy_glMultiTexCoord1fvARB(GLenum target, const GLfloat * v) {if (GLeeInit()) glMultiTexCoord1fvARB(target, v);} GLEEPFNGLMULTITEXCOORD1FVARBPROC GLeeFuncPtr_glMultiTexCoord1fvARB=GLee_Lazy_glMultiTexCoord1fvARB; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord1iARB #define GLEE_C_DEFINED_glMultiTexCoord1iARB void __stdcall GLee_Lazy_glMultiTexCoord1iARB(GLenum target, GLint s) {if (GLeeInit()) glMultiTexCoord1iARB(target, s);} GLEEPFNGLMULTITEXCOORD1IARBPROC GLeeFuncPtr_glMultiTexCoord1iARB=GLee_Lazy_glMultiTexCoord1iARB; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord1ivARB #define GLEE_C_DEFINED_glMultiTexCoord1ivARB void __stdcall GLee_Lazy_glMultiTexCoord1ivARB(GLenum target, const GLint * v) {if (GLeeInit()) glMultiTexCoord1ivARB(target, v);} GLEEPFNGLMULTITEXCOORD1IVARBPROC GLeeFuncPtr_glMultiTexCoord1ivARB=GLee_Lazy_glMultiTexCoord1ivARB; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord1sARB #define GLEE_C_DEFINED_glMultiTexCoord1sARB void __stdcall GLee_Lazy_glMultiTexCoord1sARB(GLenum target, GLshort s) {if (GLeeInit()) glMultiTexCoord1sARB(target, s);} GLEEPFNGLMULTITEXCOORD1SARBPROC GLeeFuncPtr_glMultiTexCoord1sARB=GLee_Lazy_glMultiTexCoord1sARB; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord1svARB #define GLEE_C_DEFINED_glMultiTexCoord1svARB void __stdcall GLee_Lazy_glMultiTexCoord1svARB(GLenum target, const GLshort * v) {if (GLeeInit()) glMultiTexCoord1svARB(target, v);} GLEEPFNGLMULTITEXCOORD1SVARBPROC GLeeFuncPtr_glMultiTexCoord1svARB=GLee_Lazy_glMultiTexCoord1svARB; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord2dARB #define GLEE_C_DEFINED_glMultiTexCoord2dARB void __stdcall GLee_Lazy_glMultiTexCoord2dARB(GLenum target, GLdouble s, GLdouble t) {if (GLeeInit()) glMultiTexCoord2dARB(target, s, t);} GLEEPFNGLMULTITEXCOORD2DARBPROC GLeeFuncPtr_glMultiTexCoord2dARB=GLee_Lazy_glMultiTexCoord2dARB; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord2dvARB #define GLEE_C_DEFINED_glMultiTexCoord2dvARB void __stdcall GLee_Lazy_glMultiTexCoord2dvARB(GLenum target, const GLdouble * v) {if (GLeeInit()) glMultiTexCoord2dvARB(target, v);} GLEEPFNGLMULTITEXCOORD2DVARBPROC GLeeFuncPtr_glMultiTexCoord2dvARB=GLee_Lazy_glMultiTexCoord2dvARB; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord2fARB #define GLEE_C_DEFINED_glMultiTexCoord2fARB void __stdcall GLee_Lazy_glMultiTexCoord2fARB(GLenum target, GLfloat s, GLfloat t) {if (GLeeInit()) glMultiTexCoord2fARB(target, s, t);} GLEEPFNGLMULTITEXCOORD2FARBPROC GLeeFuncPtr_glMultiTexCoord2fARB=GLee_Lazy_glMultiTexCoord2fARB; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord2fvARB #define GLEE_C_DEFINED_glMultiTexCoord2fvARB void __stdcall GLee_Lazy_glMultiTexCoord2fvARB(GLenum target, const GLfloat * v) {if (GLeeInit()) glMultiTexCoord2fvARB(target, v);} GLEEPFNGLMULTITEXCOORD2FVARBPROC GLeeFuncPtr_glMultiTexCoord2fvARB=GLee_Lazy_glMultiTexCoord2fvARB; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord2iARB #define GLEE_C_DEFINED_glMultiTexCoord2iARB void __stdcall GLee_Lazy_glMultiTexCoord2iARB(GLenum target, GLint s, GLint t) {if (GLeeInit()) glMultiTexCoord2iARB(target, s, t);} GLEEPFNGLMULTITEXCOORD2IARBPROC GLeeFuncPtr_glMultiTexCoord2iARB=GLee_Lazy_glMultiTexCoord2iARB; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord2ivARB #define GLEE_C_DEFINED_glMultiTexCoord2ivARB void __stdcall GLee_Lazy_glMultiTexCoord2ivARB(GLenum target, const GLint * v) {if (GLeeInit()) glMultiTexCoord2ivARB(target, v);} GLEEPFNGLMULTITEXCOORD2IVARBPROC GLeeFuncPtr_glMultiTexCoord2ivARB=GLee_Lazy_glMultiTexCoord2ivARB; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord2sARB #define GLEE_C_DEFINED_glMultiTexCoord2sARB void __stdcall GLee_Lazy_glMultiTexCoord2sARB(GLenum target, GLshort s, GLshort t) {if (GLeeInit()) glMultiTexCoord2sARB(target, s, t);} GLEEPFNGLMULTITEXCOORD2SARBPROC GLeeFuncPtr_glMultiTexCoord2sARB=GLee_Lazy_glMultiTexCoord2sARB; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord2svARB #define GLEE_C_DEFINED_glMultiTexCoord2svARB void __stdcall GLee_Lazy_glMultiTexCoord2svARB(GLenum target, const GLshort * v) {if (GLeeInit()) glMultiTexCoord2svARB(target, v);} GLEEPFNGLMULTITEXCOORD2SVARBPROC GLeeFuncPtr_glMultiTexCoord2svARB=GLee_Lazy_glMultiTexCoord2svARB; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord3dARB #define GLEE_C_DEFINED_glMultiTexCoord3dARB void __stdcall GLee_Lazy_glMultiTexCoord3dARB(GLenum target, GLdouble s, GLdouble t, GLdouble r) {if (GLeeInit()) glMultiTexCoord3dARB(target, s, t, r);} GLEEPFNGLMULTITEXCOORD3DARBPROC GLeeFuncPtr_glMultiTexCoord3dARB=GLee_Lazy_glMultiTexCoord3dARB; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord3dvARB #define GLEE_C_DEFINED_glMultiTexCoord3dvARB void __stdcall GLee_Lazy_glMultiTexCoord3dvARB(GLenum target, const GLdouble * v) {if (GLeeInit()) glMultiTexCoord3dvARB(target, v);} GLEEPFNGLMULTITEXCOORD3DVARBPROC GLeeFuncPtr_glMultiTexCoord3dvARB=GLee_Lazy_glMultiTexCoord3dvARB; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord3fARB #define GLEE_C_DEFINED_glMultiTexCoord3fARB void __stdcall GLee_Lazy_glMultiTexCoord3fARB(GLenum target, GLfloat s, GLfloat t, GLfloat r) {if (GLeeInit()) glMultiTexCoord3fARB(target, s, t, r);} GLEEPFNGLMULTITEXCOORD3FARBPROC GLeeFuncPtr_glMultiTexCoord3fARB=GLee_Lazy_glMultiTexCoord3fARB; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord3fvARB #define GLEE_C_DEFINED_glMultiTexCoord3fvARB void __stdcall GLee_Lazy_glMultiTexCoord3fvARB(GLenum target, const GLfloat * v) {if (GLeeInit()) glMultiTexCoord3fvARB(target, v);} GLEEPFNGLMULTITEXCOORD3FVARBPROC GLeeFuncPtr_glMultiTexCoord3fvARB=GLee_Lazy_glMultiTexCoord3fvARB; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord3iARB #define GLEE_C_DEFINED_glMultiTexCoord3iARB void __stdcall GLee_Lazy_glMultiTexCoord3iARB(GLenum target, GLint s, GLint t, GLint r) {if (GLeeInit()) glMultiTexCoord3iARB(target, s, t, r);} GLEEPFNGLMULTITEXCOORD3IARBPROC GLeeFuncPtr_glMultiTexCoord3iARB=GLee_Lazy_glMultiTexCoord3iARB; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord3ivARB #define GLEE_C_DEFINED_glMultiTexCoord3ivARB void __stdcall GLee_Lazy_glMultiTexCoord3ivARB(GLenum target, const GLint * v) {if (GLeeInit()) glMultiTexCoord3ivARB(target, v);} GLEEPFNGLMULTITEXCOORD3IVARBPROC GLeeFuncPtr_glMultiTexCoord3ivARB=GLee_Lazy_glMultiTexCoord3ivARB; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord3sARB #define GLEE_C_DEFINED_glMultiTexCoord3sARB void __stdcall GLee_Lazy_glMultiTexCoord3sARB(GLenum target, GLshort s, GLshort t, GLshort r) {if (GLeeInit()) glMultiTexCoord3sARB(target, s, t, r);} GLEEPFNGLMULTITEXCOORD3SARBPROC GLeeFuncPtr_glMultiTexCoord3sARB=GLee_Lazy_glMultiTexCoord3sARB; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord3svARB #define GLEE_C_DEFINED_glMultiTexCoord3svARB void __stdcall GLee_Lazy_glMultiTexCoord3svARB(GLenum target, const GLshort * v) {if (GLeeInit()) glMultiTexCoord3svARB(target, v);} GLEEPFNGLMULTITEXCOORD3SVARBPROC GLeeFuncPtr_glMultiTexCoord3svARB=GLee_Lazy_glMultiTexCoord3svARB; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord4dARB #define GLEE_C_DEFINED_glMultiTexCoord4dARB void __stdcall GLee_Lazy_glMultiTexCoord4dARB(GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q) {if (GLeeInit()) glMultiTexCoord4dARB(target, s, t, r, q);} GLEEPFNGLMULTITEXCOORD4DARBPROC GLeeFuncPtr_glMultiTexCoord4dARB=GLee_Lazy_glMultiTexCoord4dARB; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord4dvARB #define GLEE_C_DEFINED_glMultiTexCoord4dvARB void __stdcall GLee_Lazy_glMultiTexCoord4dvARB(GLenum target, const GLdouble * v) {if (GLeeInit()) glMultiTexCoord4dvARB(target, v);} GLEEPFNGLMULTITEXCOORD4DVARBPROC GLeeFuncPtr_glMultiTexCoord4dvARB=GLee_Lazy_glMultiTexCoord4dvARB; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord4fARB #define GLEE_C_DEFINED_glMultiTexCoord4fARB void __stdcall GLee_Lazy_glMultiTexCoord4fARB(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q) {if (GLeeInit()) glMultiTexCoord4fARB(target, s, t, r, q);} GLEEPFNGLMULTITEXCOORD4FARBPROC GLeeFuncPtr_glMultiTexCoord4fARB=GLee_Lazy_glMultiTexCoord4fARB; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord4fvARB #define GLEE_C_DEFINED_glMultiTexCoord4fvARB void __stdcall GLee_Lazy_glMultiTexCoord4fvARB(GLenum target, const GLfloat * v) {if (GLeeInit()) glMultiTexCoord4fvARB(target, v);} GLEEPFNGLMULTITEXCOORD4FVARBPROC GLeeFuncPtr_glMultiTexCoord4fvARB=GLee_Lazy_glMultiTexCoord4fvARB; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord4iARB #define GLEE_C_DEFINED_glMultiTexCoord4iARB void __stdcall GLee_Lazy_glMultiTexCoord4iARB(GLenum target, GLint s, GLint t, GLint r, GLint q) {if (GLeeInit()) glMultiTexCoord4iARB(target, s, t, r, q);} GLEEPFNGLMULTITEXCOORD4IARBPROC GLeeFuncPtr_glMultiTexCoord4iARB=GLee_Lazy_glMultiTexCoord4iARB; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord4ivARB #define GLEE_C_DEFINED_glMultiTexCoord4ivARB void __stdcall GLee_Lazy_glMultiTexCoord4ivARB(GLenum target, const GLint * v) {if (GLeeInit()) glMultiTexCoord4ivARB(target, v);} GLEEPFNGLMULTITEXCOORD4IVARBPROC GLeeFuncPtr_glMultiTexCoord4ivARB=GLee_Lazy_glMultiTexCoord4ivARB; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord4sARB #define GLEE_C_DEFINED_glMultiTexCoord4sARB void __stdcall GLee_Lazy_glMultiTexCoord4sARB(GLenum target, GLshort s, GLshort t, GLshort r, GLshort q) {if (GLeeInit()) glMultiTexCoord4sARB(target, s, t, r, q);} GLEEPFNGLMULTITEXCOORD4SARBPROC GLeeFuncPtr_glMultiTexCoord4sARB=GLee_Lazy_glMultiTexCoord4sARB; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord4svARB #define GLEE_C_DEFINED_glMultiTexCoord4svARB void __stdcall GLee_Lazy_glMultiTexCoord4svARB(GLenum target, const GLshort * v) {if (GLeeInit()) glMultiTexCoord4svARB(target, v);} GLEEPFNGLMULTITEXCOORD4SVARBPROC GLeeFuncPtr_glMultiTexCoord4svARB=GLee_Lazy_glMultiTexCoord4svARB; #endif #endif /* GL_ARB_transpose_matrix */ #ifdef __GLEE_GL_ARB_transpose_matrix #ifndef GLEE_C_DEFINED_glLoadTransposeMatrixfARB #define GLEE_C_DEFINED_glLoadTransposeMatrixfARB void __stdcall GLee_Lazy_glLoadTransposeMatrixfARB(const GLfloat * m) {if (GLeeInit()) glLoadTransposeMatrixfARB(m);} GLEEPFNGLLOADTRANSPOSEMATRIXFARBPROC GLeeFuncPtr_glLoadTransposeMatrixfARB=GLee_Lazy_glLoadTransposeMatrixfARB; #endif #ifndef GLEE_C_DEFINED_glLoadTransposeMatrixdARB #define GLEE_C_DEFINED_glLoadTransposeMatrixdARB void __stdcall GLee_Lazy_glLoadTransposeMatrixdARB(const GLdouble * m) {if (GLeeInit()) glLoadTransposeMatrixdARB(m);} GLEEPFNGLLOADTRANSPOSEMATRIXDARBPROC GLeeFuncPtr_glLoadTransposeMatrixdARB=GLee_Lazy_glLoadTransposeMatrixdARB; #endif #ifndef GLEE_C_DEFINED_glMultTransposeMatrixfARB #define GLEE_C_DEFINED_glMultTransposeMatrixfARB void __stdcall GLee_Lazy_glMultTransposeMatrixfARB(const GLfloat * m) {if (GLeeInit()) glMultTransposeMatrixfARB(m);} GLEEPFNGLMULTTRANSPOSEMATRIXFARBPROC GLeeFuncPtr_glMultTransposeMatrixfARB=GLee_Lazy_glMultTransposeMatrixfARB; #endif #ifndef GLEE_C_DEFINED_glMultTransposeMatrixdARB #define GLEE_C_DEFINED_glMultTransposeMatrixdARB void __stdcall GLee_Lazy_glMultTransposeMatrixdARB(const GLdouble * m) {if (GLeeInit()) glMultTransposeMatrixdARB(m);} GLEEPFNGLMULTTRANSPOSEMATRIXDARBPROC GLeeFuncPtr_glMultTransposeMatrixdARB=GLee_Lazy_glMultTransposeMatrixdARB; #endif #endif /* GL_ARB_multisample */ #ifdef __GLEE_GL_ARB_multisample #ifndef GLEE_C_DEFINED_glSampleCoverageARB #define GLEE_C_DEFINED_glSampleCoverageARB void __stdcall GLee_Lazy_glSampleCoverageARB(GLclampf value, GLboolean invert) {if (GLeeInit()) glSampleCoverageARB(value, invert);} GLEEPFNGLSAMPLECOVERAGEARBPROC GLeeFuncPtr_glSampleCoverageARB=GLee_Lazy_glSampleCoverageARB; #endif #endif /* GL_ARB_texture_env_add */ #ifdef __GLEE_GL_ARB_texture_env_add #endif /* GL_ARB_texture_cube_map */ #ifdef __GLEE_GL_ARB_texture_cube_map #endif /* GL_ARB_texture_compression */ #ifdef __GLEE_GL_ARB_texture_compression #ifndef GLEE_C_DEFINED_glCompressedTexImage3DARB #define GLEE_C_DEFINED_glCompressedTexImage3DARB void __stdcall GLee_Lazy_glCompressedTexImage3DARB(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid * data) {if (GLeeInit()) glCompressedTexImage3DARB(target, level, internalformat, width, height, depth, border, imageSize, data);} GLEEPFNGLCOMPRESSEDTEXIMAGE3DARBPROC GLeeFuncPtr_glCompressedTexImage3DARB=GLee_Lazy_glCompressedTexImage3DARB; #endif #ifndef GLEE_C_DEFINED_glCompressedTexImage2DARB #define GLEE_C_DEFINED_glCompressedTexImage2DARB void __stdcall GLee_Lazy_glCompressedTexImage2DARB(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid * data) {if (GLeeInit()) glCompressedTexImage2DARB(target, level, internalformat, width, height, border, imageSize, data);} GLEEPFNGLCOMPRESSEDTEXIMAGE2DARBPROC GLeeFuncPtr_glCompressedTexImage2DARB=GLee_Lazy_glCompressedTexImage2DARB; #endif #ifndef GLEE_C_DEFINED_glCompressedTexImage1DARB #define GLEE_C_DEFINED_glCompressedTexImage1DARB void __stdcall GLee_Lazy_glCompressedTexImage1DARB(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid * data) {if (GLeeInit()) glCompressedTexImage1DARB(target, level, internalformat, width, border, imageSize, data);} GLEEPFNGLCOMPRESSEDTEXIMAGE1DARBPROC GLeeFuncPtr_glCompressedTexImage1DARB=GLee_Lazy_glCompressedTexImage1DARB; #endif #ifndef GLEE_C_DEFINED_glCompressedTexSubImage3DARB #define GLEE_C_DEFINED_glCompressedTexSubImage3DARB void __stdcall GLee_Lazy_glCompressedTexSubImage3DARB(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid * data) {if (GLeeInit()) glCompressedTexSubImage3DARB(target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data);} GLEEPFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC GLeeFuncPtr_glCompressedTexSubImage3DARB=GLee_Lazy_glCompressedTexSubImage3DARB; #endif #ifndef GLEE_C_DEFINED_glCompressedTexSubImage2DARB #define GLEE_C_DEFINED_glCompressedTexSubImage2DARB void __stdcall GLee_Lazy_glCompressedTexSubImage2DARB(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid * data) {if (GLeeInit()) glCompressedTexSubImage2DARB(target, level, xoffset, yoffset, width, height, format, imageSize, data);} GLEEPFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC GLeeFuncPtr_glCompressedTexSubImage2DARB=GLee_Lazy_glCompressedTexSubImage2DARB; #endif #ifndef GLEE_C_DEFINED_glCompressedTexSubImage1DARB #define GLEE_C_DEFINED_glCompressedTexSubImage1DARB void __stdcall GLee_Lazy_glCompressedTexSubImage1DARB(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid * data) {if (GLeeInit()) glCompressedTexSubImage1DARB(target, level, xoffset, width, format, imageSize, data);} GLEEPFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC GLeeFuncPtr_glCompressedTexSubImage1DARB=GLee_Lazy_glCompressedTexSubImage1DARB; #endif #ifndef GLEE_C_DEFINED_glGetCompressedTexImageARB #define GLEE_C_DEFINED_glGetCompressedTexImageARB void __stdcall GLee_Lazy_glGetCompressedTexImageARB(GLenum target, GLint level, GLvoid * img) {if (GLeeInit()) glGetCompressedTexImageARB(target, level, img);} GLEEPFNGLGETCOMPRESSEDTEXIMAGEARBPROC GLeeFuncPtr_glGetCompressedTexImageARB=GLee_Lazy_glGetCompressedTexImageARB; #endif #endif /* GL_ARB_texture_border_clamp */ #ifdef __GLEE_GL_ARB_texture_border_clamp #endif /* GL_ARB_point_parameters */ #ifdef __GLEE_GL_ARB_point_parameters #ifndef GLEE_C_DEFINED_glPointParameterfARB #define GLEE_C_DEFINED_glPointParameterfARB void __stdcall GLee_Lazy_glPointParameterfARB(GLenum pname, GLfloat param) {if (GLeeInit()) glPointParameterfARB(pname, param);} GLEEPFNGLPOINTPARAMETERFARBPROC GLeeFuncPtr_glPointParameterfARB=GLee_Lazy_glPointParameterfARB; #endif #ifndef GLEE_C_DEFINED_glPointParameterfvARB #define GLEE_C_DEFINED_glPointParameterfvARB void __stdcall GLee_Lazy_glPointParameterfvARB(GLenum pname, const GLfloat * params) {if (GLeeInit()) glPointParameterfvARB(pname, params);} GLEEPFNGLPOINTPARAMETERFVARBPROC GLeeFuncPtr_glPointParameterfvARB=GLee_Lazy_glPointParameterfvARB; #endif #endif /* GL_ARB_vertex_blend */ #ifdef __GLEE_GL_ARB_vertex_blend #ifndef GLEE_C_DEFINED_glWeightbvARB #define GLEE_C_DEFINED_glWeightbvARB void __stdcall GLee_Lazy_glWeightbvARB(GLint size, const GLbyte * weights) {if (GLeeInit()) glWeightbvARB(size, weights);} GLEEPFNGLWEIGHTBVARBPROC GLeeFuncPtr_glWeightbvARB=GLee_Lazy_glWeightbvARB; #endif #ifndef GLEE_C_DEFINED_glWeightsvARB #define GLEE_C_DEFINED_glWeightsvARB void __stdcall GLee_Lazy_glWeightsvARB(GLint size, const GLshort * weights) {if (GLeeInit()) glWeightsvARB(size, weights);} GLEEPFNGLWEIGHTSVARBPROC GLeeFuncPtr_glWeightsvARB=GLee_Lazy_glWeightsvARB; #endif #ifndef GLEE_C_DEFINED_glWeightivARB #define GLEE_C_DEFINED_glWeightivARB void __stdcall GLee_Lazy_glWeightivARB(GLint size, const GLint * weights) {if (GLeeInit()) glWeightivARB(size, weights);} GLEEPFNGLWEIGHTIVARBPROC GLeeFuncPtr_glWeightivARB=GLee_Lazy_glWeightivARB; #endif #ifndef GLEE_C_DEFINED_glWeightfvARB #define GLEE_C_DEFINED_glWeightfvARB void __stdcall GLee_Lazy_glWeightfvARB(GLint size, const GLfloat * weights) {if (GLeeInit()) glWeightfvARB(size, weights);} GLEEPFNGLWEIGHTFVARBPROC GLeeFuncPtr_glWeightfvARB=GLee_Lazy_glWeightfvARB; #endif #ifndef GLEE_C_DEFINED_glWeightdvARB #define GLEE_C_DEFINED_glWeightdvARB void __stdcall GLee_Lazy_glWeightdvARB(GLint size, const GLdouble * weights) {if (GLeeInit()) glWeightdvARB(size, weights);} GLEEPFNGLWEIGHTDVARBPROC GLeeFuncPtr_glWeightdvARB=GLee_Lazy_glWeightdvARB; #endif #ifndef GLEE_C_DEFINED_glWeightubvARB #define GLEE_C_DEFINED_glWeightubvARB void __stdcall GLee_Lazy_glWeightubvARB(GLint size, const GLubyte * weights) {if (GLeeInit()) glWeightubvARB(size, weights);} GLEEPFNGLWEIGHTUBVARBPROC GLeeFuncPtr_glWeightubvARB=GLee_Lazy_glWeightubvARB; #endif #ifndef GLEE_C_DEFINED_glWeightusvARB #define GLEE_C_DEFINED_glWeightusvARB void __stdcall GLee_Lazy_glWeightusvARB(GLint size, const GLushort * weights) {if (GLeeInit()) glWeightusvARB(size, weights);} GLEEPFNGLWEIGHTUSVARBPROC GLeeFuncPtr_glWeightusvARB=GLee_Lazy_glWeightusvARB; #endif #ifndef GLEE_C_DEFINED_glWeightuivARB #define GLEE_C_DEFINED_glWeightuivARB void __stdcall GLee_Lazy_glWeightuivARB(GLint size, const GLuint * weights) {if (GLeeInit()) glWeightuivARB(size, weights);} GLEEPFNGLWEIGHTUIVARBPROC GLeeFuncPtr_glWeightuivARB=GLee_Lazy_glWeightuivARB; #endif #ifndef GLEE_C_DEFINED_glWeightPointerARB #define GLEE_C_DEFINED_glWeightPointerARB void __stdcall GLee_Lazy_glWeightPointerARB(GLint size, GLenum type, GLsizei stride, const GLvoid * pointer) {if (GLeeInit()) glWeightPointerARB(size, type, stride, pointer);} GLEEPFNGLWEIGHTPOINTERARBPROC GLeeFuncPtr_glWeightPointerARB=GLee_Lazy_glWeightPointerARB; #endif #ifndef GLEE_C_DEFINED_glVertexBlendARB #define GLEE_C_DEFINED_glVertexBlendARB void __stdcall GLee_Lazy_glVertexBlendARB(GLint count) {if (GLeeInit()) glVertexBlendARB(count);} GLEEPFNGLVERTEXBLENDARBPROC GLeeFuncPtr_glVertexBlendARB=GLee_Lazy_glVertexBlendARB; #endif #endif /* GL_ARB_matrix_palette */ #ifdef __GLEE_GL_ARB_matrix_palette #ifndef GLEE_C_DEFINED_glCurrentPaletteMatrixARB #define GLEE_C_DEFINED_glCurrentPaletteMatrixARB void __stdcall GLee_Lazy_glCurrentPaletteMatrixARB(GLint index) {if (GLeeInit()) glCurrentPaletteMatrixARB(index);} GLEEPFNGLCURRENTPALETTEMATRIXARBPROC GLeeFuncPtr_glCurrentPaletteMatrixARB=GLee_Lazy_glCurrentPaletteMatrixARB; #endif #ifndef GLEE_C_DEFINED_glMatrixIndexubvARB #define GLEE_C_DEFINED_glMatrixIndexubvARB void __stdcall GLee_Lazy_glMatrixIndexubvARB(GLint size, const GLubyte * indices) {if (GLeeInit()) glMatrixIndexubvARB(size, indices);} GLEEPFNGLMATRIXINDEXUBVARBPROC GLeeFuncPtr_glMatrixIndexubvARB=GLee_Lazy_glMatrixIndexubvARB; #endif #ifndef GLEE_C_DEFINED_glMatrixIndexusvARB #define GLEE_C_DEFINED_glMatrixIndexusvARB void __stdcall GLee_Lazy_glMatrixIndexusvARB(GLint size, const GLushort * indices) {if (GLeeInit()) glMatrixIndexusvARB(size, indices);} GLEEPFNGLMATRIXINDEXUSVARBPROC GLeeFuncPtr_glMatrixIndexusvARB=GLee_Lazy_glMatrixIndexusvARB; #endif #ifndef GLEE_C_DEFINED_glMatrixIndexuivARB #define GLEE_C_DEFINED_glMatrixIndexuivARB void __stdcall GLee_Lazy_glMatrixIndexuivARB(GLint size, const GLuint * indices) {if (GLeeInit()) glMatrixIndexuivARB(size, indices);} GLEEPFNGLMATRIXINDEXUIVARBPROC GLeeFuncPtr_glMatrixIndexuivARB=GLee_Lazy_glMatrixIndexuivARB; #endif #ifndef GLEE_C_DEFINED_glMatrixIndexPointerARB #define GLEE_C_DEFINED_glMatrixIndexPointerARB void __stdcall GLee_Lazy_glMatrixIndexPointerARB(GLint size, GLenum type, GLsizei stride, const GLvoid * pointer) {if (GLeeInit()) glMatrixIndexPointerARB(size, type, stride, pointer);} GLEEPFNGLMATRIXINDEXPOINTERARBPROC GLeeFuncPtr_glMatrixIndexPointerARB=GLee_Lazy_glMatrixIndexPointerARB; #endif #endif /* GL_ARB_texture_env_combine */ #ifdef __GLEE_GL_ARB_texture_env_combine #endif /* GL_ARB_texture_env_crossbar */ #ifdef __GLEE_GL_ARB_texture_env_crossbar #endif /* GL_ARB_texture_env_dot3 */ #ifdef __GLEE_GL_ARB_texture_env_dot3 #endif /* GL_ARB_texture_mirrored_repeat */ #ifdef __GLEE_GL_ARB_texture_mirrored_repeat #endif /* GL_ARB_depth_texture */ #ifdef __GLEE_GL_ARB_depth_texture #endif /* GL_ARB_shadow */ #ifdef __GLEE_GL_ARB_shadow #endif /* GL_ARB_shadow_ambient */ #ifdef __GLEE_GL_ARB_shadow_ambient #endif /* GL_ARB_window_pos */ #ifdef __GLEE_GL_ARB_window_pos #ifndef GLEE_C_DEFINED_glWindowPos2dARB #define GLEE_C_DEFINED_glWindowPos2dARB void __stdcall GLee_Lazy_glWindowPos2dARB(GLdouble x, GLdouble y) {if (GLeeInit()) glWindowPos2dARB(x, y);} GLEEPFNGLWINDOWPOS2DARBPROC GLeeFuncPtr_glWindowPos2dARB=GLee_Lazy_glWindowPos2dARB; #endif #ifndef GLEE_C_DEFINED_glWindowPos2dvARB #define GLEE_C_DEFINED_glWindowPos2dvARB void __stdcall GLee_Lazy_glWindowPos2dvARB(const GLdouble * v) {if (GLeeInit()) glWindowPos2dvARB(v);} GLEEPFNGLWINDOWPOS2DVARBPROC GLeeFuncPtr_glWindowPos2dvARB=GLee_Lazy_glWindowPos2dvARB; #endif #ifndef GLEE_C_DEFINED_glWindowPos2fARB #define GLEE_C_DEFINED_glWindowPos2fARB void __stdcall GLee_Lazy_glWindowPos2fARB(GLfloat x, GLfloat y) {if (GLeeInit()) glWindowPos2fARB(x, y);} GLEEPFNGLWINDOWPOS2FARBPROC GLeeFuncPtr_glWindowPos2fARB=GLee_Lazy_glWindowPos2fARB; #endif #ifndef GLEE_C_DEFINED_glWindowPos2fvARB #define GLEE_C_DEFINED_glWindowPos2fvARB void __stdcall GLee_Lazy_glWindowPos2fvARB(const GLfloat * v) {if (GLeeInit()) glWindowPos2fvARB(v);} GLEEPFNGLWINDOWPOS2FVARBPROC GLeeFuncPtr_glWindowPos2fvARB=GLee_Lazy_glWindowPos2fvARB; #endif #ifndef GLEE_C_DEFINED_glWindowPos2iARB #define GLEE_C_DEFINED_glWindowPos2iARB void __stdcall GLee_Lazy_glWindowPos2iARB(GLint x, GLint y) {if (GLeeInit()) glWindowPos2iARB(x, y);} GLEEPFNGLWINDOWPOS2IARBPROC GLeeFuncPtr_glWindowPos2iARB=GLee_Lazy_glWindowPos2iARB; #endif #ifndef GLEE_C_DEFINED_glWindowPos2ivARB #define GLEE_C_DEFINED_glWindowPos2ivARB void __stdcall GLee_Lazy_glWindowPos2ivARB(const GLint * v) {if (GLeeInit()) glWindowPos2ivARB(v);} GLEEPFNGLWINDOWPOS2IVARBPROC GLeeFuncPtr_glWindowPos2ivARB=GLee_Lazy_glWindowPos2ivARB; #endif #ifndef GLEE_C_DEFINED_glWindowPos2sARB #define GLEE_C_DEFINED_glWindowPos2sARB void __stdcall GLee_Lazy_glWindowPos2sARB(GLshort x, GLshort y) {if (GLeeInit()) glWindowPos2sARB(x, y);} GLEEPFNGLWINDOWPOS2SARBPROC GLeeFuncPtr_glWindowPos2sARB=GLee_Lazy_glWindowPos2sARB; #endif #ifndef GLEE_C_DEFINED_glWindowPos2svARB #define GLEE_C_DEFINED_glWindowPos2svARB void __stdcall GLee_Lazy_glWindowPos2svARB(const GLshort * v) {if (GLeeInit()) glWindowPos2svARB(v);} GLEEPFNGLWINDOWPOS2SVARBPROC GLeeFuncPtr_glWindowPos2svARB=GLee_Lazy_glWindowPos2svARB; #endif #ifndef GLEE_C_DEFINED_glWindowPos3dARB #define GLEE_C_DEFINED_glWindowPos3dARB void __stdcall GLee_Lazy_glWindowPos3dARB(GLdouble x, GLdouble y, GLdouble z) {if (GLeeInit()) glWindowPos3dARB(x, y, z);} GLEEPFNGLWINDOWPOS3DARBPROC GLeeFuncPtr_glWindowPos3dARB=GLee_Lazy_glWindowPos3dARB; #endif #ifndef GLEE_C_DEFINED_glWindowPos3dvARB #define GLEE_C_DEFINED_glWindowPos3dvARB void __stdcall GLee_Lazy_glWindowPos3dvARB(const GLdouble * v) {if (GLeeInit()) glWindowPos3dvARB(v);} GLEEPFNGLWINDOWPOS3DVARBPROC GLeeFuncPtr_glWindowPos3dvARB=GLee_Lazy_glWindowPos3dvARB; #endif #ifndef GLEE_C_DEFINED_glWindowPos3fARB #define GLEE_C_DEFINED_glWindowPos3fARB void __stdcall GLee_Lazy_glWindowPos3fARB(GLfloat x, GLfloat y, GLfloat z) {if (GLeeInit()) glWindowPos3fARB(x, y, z);} GLEEPFNGLWINDOWPOS3FARBPROC GLeeFuncPtr_glWindowPos3fARB=GLee_Lazy_glWindowPos3fARB; #endif #ifndef GLEE_C_DEFINED_glWindowPos3fvARB #define GLEE_C_DEFINED_glWindowPos3fvARB void __stdcall GLee_Lazy_glWindowPos3fvARB(const GLfloat * v) {if (GLeeInit()) glWindowPos3fvARB(v);} GLEEPFNGLWINDOWPOS3FVARBPROC GLeeFuncPtr_glWindowPos3fvARB=GLee_Lazy_glWindowPos3fvARB; #endif #ifndef GLEE_C_DEFINED_glWindowPos3iARB #define GLEE_C_DEFINED_glWindowPos3iARB void __stdcall GLee_Lazy_glWindowPos3iARB(GLint x, GLint y, GLint z) {if (GLeeInit()) glWindowPos3iARB(x, y, z);} GLEEPFNGLWINDOWPOS3IARBPROC GLeeFuncPtr_glWindowPos3iARB=GLee_Lazy_glWindowPos3iARB; #endif #ifndef GLEE_C_DEFINED_glWindowPos3ivARB #define GLEE_C_DEFINED_glWindowPos3ivARB void __stdcall GLee_Lazy_glWindowPos3ivARB(const GLint * v) {if (GLeeInit()) glWindowPos3ivARB(v);} GLEEPFNGLWINDOWPOS3IVARBPROC GLeeFuncPtr_glWindowPos3ivARB=GLee_Lazy_glWindowPos3ivARB; #endif #ifndef GLEE_C_DEFINED_glWindowPos3sARB #define GLEE_C_DEFINED_glWindowPos3sARB void __stdcall GLee_Lazy_glWindowPos3sARB(GLshort x, GLshort y, GLshort z) {if (GLeeInit()) glWindowPos3sARB(x, y, z);} GLEEPFNGLWINDOWPOS3SARBPROC GLeeFuncPtr_glWindowPos3sARB=GLee_Lazy_glWindowPos3sARB; #endif #ifndef GLEE_C_DEFINED_glWindowPos3svARB #define GLEE_C_DEFINED_glWindowPos3svARB void __stdcall GLee_Lazy_glWindowPos3svARB(const GLshort * v) {if (GLeeInit()) glWindowPos3svARB(v);} GLEEPFNGLWINDOWPOS3SVARBPROC GLeeFuncPtr_glWindowPos3svARB=GLee_Lazy_glWindowPos3svARB; #endif #endif /* GL_ARB_vertex_program */ #ifdef __GLEE_GL_ARB_vertex_program #ifndef GLEE_C_DEFINED_glVertexAttrib1dARB #define GLEE_C_DEFINED_glVertexAttrib1dARB void __stdcall GLee_Lazy_glVertexAttrib1dARB(GLuint index, GLdouble x) {if (GLeeInit()) glVertexAttrib1dARB(index, x);} GLEEPFNGLVERTEXATTRIB1DARBPROC GLeeFuncPtr_glVertexAttrib1dARB=GLee_Lazy_glVertexAttrib1dARB; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib1dvARB #define GLEE_C_DEFINED_glVertexAttrib1dvARB void __stdcall GLee_Lazy_glVertexAttrib1dvARB(GLuint index, const GLdouble * v) {if (GLeeInit()) glVertexAttrib1dvARB(index, v);} GLEEPFNGLVERTEXATTRIB1DVARBPROC GLeeFuncPtr_glVertexAttrib1dvARB=GLee_Lazy_glVertexAttrib1dvARB; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib1fARB #define GLEE_C_DEFINED_glVertexAttrib1fARB void __stdcall GLee_Lazy_glVertexAttrib1fARB(GLuint index, GLfloat x) {if (GLeeInit()) glVertexAttrib1fARB(index, x);} GLEEPFNGLVERTEXATTRIB1FARBPROC GLeeFuncPtr_glVertexAttrib1fARB=GLee_Lazy_glVertexAttrib1fARB; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib1fvARB #define GLEE_C_DEFINED_glVertexAttrib1fvARB void __stdcall GLee_Lazy_glVertexAttrib1fvARB(GLuint index, const GLfloat * v) {if (GLeeInit()) glVertexAttrib1fvARB(index, v);} GLEEPFNGLVERTEXATTRIB1FVARBPROC GLeeFuncPtr_glVertexAttrib1fvARB=GLee_Lazy_glVertexAttrib1fvARB; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib1sARB #define GLEE_C_DEFINED_glVertexAttrib1sARB void __stdcall GLee_Lazy_glVertexAttrib1sARB(GLuint index, GLshort x) {if (GLeeInit()) glVertexAttrib1sARB(index, x);} GLEEPFNGLVERTEXATTRIB1SARBPROC GLeeFuncPtr_glVertexAttrib1sARB=GLee_Lazy_glVertexAttrib1sARB; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib1svARB #define GLEE_C_DEFINED_glVertexAttrib1svARB void __stdcall GLee_Lazy_glVertexAttrib1svARB(GLuint index, const GLshort * v) {if (GLeeInit()) glVertexAttrib1svARB(index, v);} GLEEPFNGLVERTEXATTRIB1SVARBPROC GLeeFuncPtr_glVertexAttrib1svARB=GLee_Lazy_glVertexAttrib1svARB; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib2dARB #define GLEE_C_DEFINED_glVertexAttrib2dARB void __stdcall GLee_Lazy_glVertexAttrib2dARB(GLuint index, GLdouble x, GLdouble y) {if (GLeeInit()) glVertexAttrib2dARB(index, x, y);} GLEEPFNGLVERTEXATTRIB2DARBPROC GLeeFuncPtr_glVertexAttrib2dARB=GLee_Lazy_glVertexAttrib2dARB; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib2dvARB #define GLEE_C_DEFINED_glVertexAttrib2dvARB void __stdcall GLee_Lazy_glVertexAttrib2dvARB(GLuint index, const GLdouble * v) {if (GLeeInit()) glVertexAttrib2dvARB(index, v);} GLEEPFNGLVERTEXATTRIB2DVARBPROC GLeeFuncPtr_glVertexAttrib2dvARB=GLee_Lazy_glVertexAttrib2dvARB; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib2fARB #define GLEE_C_DEFINED_glVertexAttrib2fARB void __stdcall GLee_Lazy_glVertexAttrib2fARB(GLuint index, GLfloat x, GLfloat y) {if (GLeeInit()) glVertexAttrib2fARB(index, x, y);} GLEEPFNGLVERTEXATTRIB2FARBPROC GLeeFuncPtr_glVertexAttrib2fARB=GLee_Lazy_glVertexAttrib2fARB; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib2fvARB #define GLEE_C_DEFINED_glVertexAttrib2fvARB void __stdcall GLee_Lazy_glVertexAttrib2fvARB(GLuint index, const GLfloat * v) {if (GLeeInit()) glVertexAttrib2fvARB(index, v);} GLEEPFNGLVERTEXATTRIB2FVARBPROC GLeeFuncPtr_glVertexAttrib2fvARB=GLee_Lazy_glVertexAttrib2fvARB; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib2sARB #define GLEE_C_DEFINED_glVertexAttrib2sARB void __stdcall GLee_Lazy_glVertexAttrib2sARB(GLuint index, GLshort x, GLshort y) {if (GLeeInit()) glVertexAttrib2sARB(index, x, y);} GLEEPFNGLVERTEXATTRIB2SARBPROC GLeeFuncPtr_glVertexAttrib2sARB=GLee_Lazy_glVertexAttrib2sARB; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib2svARB #define GLEE_C_DEFINED_glVertexAttrib2svARB void __stdcall GLee_Lazy_glVertexAttrib2svARB(GLuint index, const GLshort * v) {if (GLeeInit()) glVertexAttrib2svARB(index, v);} GLEEPFNGLVERTEXATTRIB2SVARBPROC GLeeFuncPtr_glVertexAttrib2svARB=GLee_Lazy_glVertexAttrib2svARB; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib3dARB #define GLEE_C_DEFINED_glVertexAttrib3dARB void __stdcall GLee_Lazy_glVertexAttrib3dARB(GLuint index, GLdouble x, GLdouble y, GLdouble z) {if (GLeeInit()) glVertexAttrib3dARB(index, x, y, z);} GLEEPFNGLVERTEXATTRIB3DARBPROC GLeeFuncPtr_glVertexAttrib3dARB=GLee_Lazy_glVertexAttrib3dARB; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib3dvARB #define GLEE_C_DEFINED_glVertexAttrib3dvARB void __stdcall GLee_Lazy_glVertexAttrib3dvARB(GLuint index, const GLdouble * v) {if (GLeeInit()) glVertexAttrib3dvARB(index, v);} GLEEPFNGLVERTEXATTRIB3DVARBPROC GLeeFuncPtr_glVertexAttrib3dvARB=GLee_Lazy_glVertexAttrib3dvARB; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib3fARB #define GLEE_C_DEFINED_glVertexAttrib3fARB void __stdcall GLee_Lazy_glVertexAttrib3fARB(GLuint index, GLfloat x, GLfloat y, GLfloat z) {if (GLeeInit()) glVertexAttrib3fARB(index, x, y, z);} GLEEPFNGLVERTEXATTRIB3FARBPROC GLeeFuncPtr_glVertexAttrib3fARB=GLee_Lazy_glVertexAttrib3fARB; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib3fvARB #define GLEE_C_DEFINED_glVertexAttrib3fvARB void __stdcall GLee_Lazy_glVertexAttrib3fvARB(GLuint index, const GLfloat * v) {if (GLeeInit()) glVertexAttrib3fvARB(index, v);} GLEEPFNGLVERTEXATTRIB3FVARBPROC GLeeFuncPtr_glVertexAttrib3fvARB=GLee_Lazy_glVertexAttrib3fvARB; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib3sARB #define GLEE_C_DEFINED_glVertexAttrib3sARB void __stdcall GLee_Lazy_glVertexAttrib3sARB(GLuint index, GLshort x, GLshort y, GLshort z) {if (GLeeInit()) glVertexAttrib3sARB(index, x, y, z);} GLEEPFNGLVERTEXATTRIB3SARBPROC GLeeFuncPtr_glVertexAttrib3sARB=GLee_Lazy_glVertexAttrib3sARB; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib3svARB #define GLEE_C_DEFINED_glVertexAttrib3svARB void __stdcall GLee_Lazy_glVertexAttrib3svARB(GLuint index, const GLshort * v) {if (GLeeInit()) glVertexAttrib3svARB(index, v);} GLEEPFNGLVERTEXATTRIB3SVARBPROC GLeeFuncPtr_glVertexAttrib3svARB=GLee_Lazy_glVertexAttrib3svARB; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4NbvARB #define GLEE_C_DEFINED_glVertexAttrib4NbvARB void __stdcall GLee_Lazy_glVertexAttrib4NbvARB(GLuint index, const GLbyte * v) {if (GLeeInit()) glVertexAttrib4NbvARB(index, v);} GLEEPFNGLVERTEXATTRIB4NBVARBPROC GLeeFuncPtr_glVertexAttrib4NbvARB=GLee_Lazy_glVertexAttrib4NbvARB; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4NivARB #define GLEE_C_DEFINED_glVertexAttrib4NivARB void __stdcall GLee_Lazy_glVertexAttrib4NivARB(GLuint index, const GLint * v) {if (GLeeInit()) glVertexAttrib4NivARB(index, v);} GLEEPFNGLVERTEXATTRIB4NIVARBPROC GLeeFuncPtr_glVertexAttrib4NivARB=GLee_Lazy_glVertexAttrib4NivARB; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4NsvARB #define GLEE_C_DEFINED_glVertexAttrib4NsvARB void __stdcall GLee_Lazy_glVertexAttrib4NsvARB(GLuint index, const GLshort * v) {if (GLeeInit()) glVertexAttrib4NsvARB(index, v);} GLEEPFNGLVERTEXATTRIB4NSVARBPROC GLeeFuncPtr_glVertexAttrib4NsvARB=GLee_Lazy_glVertexAttrib4NsvARB; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4NubARB #define GLEE_C_DEFINED_glVertexAttrib4NubARB void __stdcall GLee_Lazy_glVertexAttrib4NubARB(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w) {if (GLeeInit()) glVertexAttrib4NubARB(index, x, y, z, w);} GLEEPFNGLVERTEXATTRIB4NUBARBPROC GLeeFuncPtr_glVertexAttrib4NubARB=GLee_Lazy_glVertexAttrib4NubARB; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4NubvARB #define GLEE_C_DEFINED_glVertexAttrib4NubvARB void __stdcall GLee_Lazy_glVertexAttrib4NubvARB(GLuint index, const GLubyte * v) {if (GLeeInit()) glVertexAttrib4NubvARB(index, v);} GLEEPFNGLVERTEXATTRIB4NUBVARBPROC GLeeFuncPtr_glVertexAttrib4NubvARB=GLee_Lazy_glVertexAttrib4NubvARB; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4NuivARB #define GLEE_C_DEFINED_glVertexAttrib4NuivARB void __stdcall GLee_Lazy_glVertexAttrib4NuivARB(GLuint index, const GLuint * v) {if (GLeeInit()) glVertexAttrib4NuivARB(index, v);} GLEEPFNGLVERTEXATTRIB4NUIVARBPROC GLeeFuncPtr_glVertexAttrib4NuivARB=GLee_Lazy_glVertexAttrib4NuivARB; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4NusvARB #define GLEE_C_DEFINED_glVertexAttrib4NusvARB void __stdcall GLee_Lazy_glVertexAttrib4NusvARB(GLuint index, const GLushort * v) {if (GLeeInit()) glVertexAttrib4NusvARB(index, v);} GLEEPFNGLVERTEXATTRIB4NUSVARBPROC GLeeFuncPtr_glVertexAttrib4NusvARB=GLee_Lazy_glVertexAttrib4NusvARB; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4bvARB #define GLEE_C_DEFINED_glVertexAttrib4bvARB void __stdcall GLee_Lazy_glVertexAttrib4bvARB(GLuint index, const GLbyte * v) {if (GLeeInit()) glVertexAttrib4bvARB(index, v);} GLEEPFNGLVERTEXATTRIB4BVARBPROC GLeeFuncPtr_glVertexAttrib4bvARB=GLee_Lazy_glVertexAttrib4bvARB; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4dARB #define GLEE_C_DEFINED_glVertexAttrib4dARB void __stdcall GLee_Lazy_glVertexAttrib4dARB(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) {if (GLeeInit()) glVertexAttrib4dARB(index, x, y, z, w);} GLEEPFNGLVERTEXATTRIB4DARBPROC GLeeFuncPtr_glVertexAttrib4dARB=GLee_Lazy_glVertexAttrib4dARB; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4dvARB #define GLEE_C_DEFINED_glVertexAttrib4dvARB void __stdcall GLee_Lazy_glVertexAttrib4dvARB(GLuint index, const GLdouble * v) {if (GLeeInit()) glVertexAttrib4dvARB(index, v);} GLEEPFNGLVERTEXATTRIB4DVARBPROC GLeeFuncPtr_glVertexAttrib4dvARB=GLee_Lazy_glVertexAttrib4dvARB; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4fARB #define GLEE_C_DEFINED_glVertexAttrib4fARB void __stdcall GLee_Lazy_glVertexAttrib4fARB(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w) {if (GLeeInit()) glVertexAttrib4fARB(index, x, y, z, w);} GLEEPFNGLVERTEXATTRIB4FARBPROC GLeeFuncPtr_glVertexAttrib4fARB=GLee_Lazy_glVertexAttrib4fARB; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4fvARB #define GLEE_C_DEFINED_glVertexAttrib4fvARB void __stdcall GLee_Lazy_glVertexAttrib4fvARB(GLuint index, const GLfloat * v) {if (GLeeInit()) glVertexAttrib4fvARB(index, v);} GLEEPFNGLVERTEXATTRIB4FVARBPROC GLeeFuncPtr_glVertexAttrib4fvARB=GLee_Lazy_glVertexAttrib4fvARB; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4ivARB #define GLEE_C_DEFINED_glVertexAttrib4ivARB void __stdcall GLee_Lazy_glVertexAttrib4ivARB(GLuint index, const GLint * v) {if (GLeeInit()) glVertexAttrib4ivARB(index, v);} GLEEPFNGLVERTEXATTRIB4IVARBPROC GLeeFuncPtr_glVertexAttrib4ivARB=GLee_Lazy_glVertexAttrib4ivARB; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4sARB #define GLEE_C_DEFINED_glVertexAttrib4sARB void __stdcall GLee_Lazy_glVertexAttrib4sARB(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w) {if (GLeeInit()) glVertexAttrib4sARB(index, x, y, z, w);} GLEEPFNGLVERTEXATTRIB4SARBPROC GLeeFuncPtr_glVertexAttrib4sARB=GLee_Lazy_glVertexAttrib4sARB; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4svARB #define GLEE_C_DEFINED_glVertexAttrib4svARB void __stdcall GLee_Lazy_glVertexAttrib4svARB(GLuint index, const GLshort * v) {if (GLeeInit()) glVertexAttrib4svARB(index, v);} GLEEPFNGLVERTEXATTRIB4SVARBPROC GLeeFuncPtr_glVertexAttrib4svARB=GLee_Lazy_glVertexAttrib4svARB; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4ubvARB #define GLEE_C_DEFINED_glVertexAttrib4ubvARB void __stdcall GLee_Lazy_glVertexAttrib4ubvARB(GLuint index, const GLubyte * v) {if (GLeeInit()) glVertexAttrib4ubvARB(index, v);} GLEEPFNGLVERTEXATTRIB4UBVARBPROC GLeeFuncPtr_glVertexAttrib4ubvARB=GLee_Lazy_glVertexAttrib4ubvARB; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4uivARB #define GLEE_C_DEFINED_glVertexAttrib4uivARB void __stdcall GLee_Lazy_glVertexAttrib4uivARB(GLuint index, const GLuint * v) {if (GLeeInit()) glVertexAttrib4uivARB(index, v);} GLEEPFNGLVERTEXATTRIB4UIVARBPROC GLeeFuncPtr_glVertexAttrib4uivARB=GLee_Lazy_glVertexAttrib4uivARB; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4usvARB #define GLEE_C_DEFINED_glVertexAttrib4usvARB void __stdcall GLee_Lazy_glVertexAttrib4usvARB(GLuint index, const GLushort * v) {if (GLeeInit()) glVertexAttrib4usvARB(index, v);} GLEEPFNGLVERTEXATTRIB4USVARBPROC GLeeFuncPtr_glVertexAttrib4usvARB=GLee_Lazy_glVertexAttrib4usvARB; #endif #ifndef GLEE_C_DEFINED_glVertexAttribPointerARB #define GLEE_C_DEFINED_glVertexAttribPointerARB void __stdcall GLee_Lazy_glVertexAttribPointerARB(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid * pointer) {if (GLeeInit()) glVertexAttribPointerARB(index, size, type, normalized, stride, pointer);} GLEEPFNGLVERTEXATTRIBPOINTERARBPROC GLeeFuncPtr_glVertexAttribPointerARB=GLee_Lazy_glVertexAttribPointerARB; #endif #ifndef GLEE_C_DEFINED_glEnableVertexAttribArrayARB #define GLEE_C_DEFINED_glEnableVertexAttribArrayARB void __stdcall GLee_Lazy_glEnableVertexAttribArrayARB(GLuint index) {if (GLeeInit()) glEnableVertexAttribArrayARB(index);} GLEEPFNGLENABLEVERTEXATTRIBARRAYARBPROC GLeeFuncPtr_glEnableVertexAttribArrayARB=GLee_Lazy_glEnableVertexAttribArrayARB; #endif #ifndef GLEE_C_DEFINED_glDisableVertexAttribArrayARB #define GLEE_C_DEFINED_glDisableVertexAttribArrayARB void __stdcall GLee_Lazy_glDisableVertexAttribArrayARB(GLuint index) {if (GLeeInit()) glDisableVertexAttribArrayARB(index);} GLEEPFNGLDISABLEVERTEXATTRIBARRAYARBPROC GLeeFuncPtr_glDisableVertexAttribArrayARB=GLee_Lazy_glDisableVertexAttribArrayARB; #endif #ifndef GLEE_C_DEFINED_glProgramStringARB #define GLEE_C_DEFINED_glProgramStringARB void __stdcall GLee_Lazy_glProgramStringARB(GLenum target, GLenum format, GLsizei len, const GLvoid * string) {if (GLeeInit()) glProgramStringARB(target, format, len, string);} GLEEPFNGLPROGRAMSTRINGARBPROC GLeeFuncPtr_glProgramStringARB=GLee_Lazy_glProgramStringARB; #endif #ifndef GLEE_C_DEFINED_glBindProgramARB #define GLEE_C_DEFINED_glBindProgramARB void __stdcall GLee_Lazy_glBindProgramARB(GLenum target, GLuint program) {if (GLeeInit()) glBindProgramARB(target, program);} GLEEPFNGLBINDPROGRAMARBPROC GLeeFuncPtr_glBindProgramARB=GLee_Lazy_glBindProgramARB; #endif #ifndef GLEE_C_DEFINED_glDeleteProgramsARB #define GLEE_C_DEFINED_glDeleteProgramsARB void __stdcall GLee_Lazy_glDeleteProgramsARB(GLsizei n, const GLuint * programs) {if (GLeeInit()) glDeleteProgramsARB(n, programs);} GLEEPFNGLDELETEPROGRAMSARBPROC GLeeFuncPtr_glDeleteProgramsARB=GLee_Lazy_glDeleteProgramsARB; #endif #ifndef GLEE_C_DEFINED_glGenProgramsARB #define GLEE_C_DEFINED_glGenProgramsARB void __stdcall GLee_Lazy_glGenProgramsARB(GLsizei n, GLuint * programs) {if (GLeeInit()) glGenProgramsARB(n, programs);} GLEEPFNGLGENPROGRAMSARBPROC GLeeFuncPtr_glGenProgramsARB=GLee_Lazy_glGenProgramsARB; #endif #ifndef GLEE_C_DEFINED_glProgramEnvParameter4dARB #define GLEE_C_DEFINED_glProgramEnvParameter4dARB void __stdcall GLee_Lazy_glProgramEnvParameter4dARB(GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) {if (GLeeInit()) glProgramEnvParameter4dARB(target, index, x, y, z, w);} GLEEPFNGLPROGRAMENVPARAMETER4DARBPROC GLeeFuncPtr_glProgramEnvParameter4dARB=GLee_Lazy_glProgramEnvParameter4dARB; #endif #ifndef GLEE_C_DEFINED_glProgramEnvParameter4dvARB #define GLEE_C_DEFINED_glProgramEnvParameter4dvARB void __stdcall GLee_Lazy_glProgramEnvParameter4dvARB(GLenum target, GLuint index, const GLdouble * params) {if (GLeeInit()) glProgramEnvParameter4dvARB(target, index, params);} GLEEPFNGLPROGRAMENVPARAMETER4DVARBPROC GLeeFuncPtr_glProgramEnvParameter4dvARB=GLee_Lazy_glProgramEnvParameter4dvARB; #endif #ifndef GLEE_C_DEFINED_glProgramEnvParameter4fARB #define GLEE_C_DEFINED_glProgramEnvParameter4fARB void __stdcall GLee_Lazy_glProgramEnvParameter4fARB(GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w) {if (GLeeInit()) glProgramEnvParameter4fARB(target, index, x, y, z, w);} GLEEPFNGLPROGRAMENVPARAMETER4FARBPROC GLeeFuncPtr_glProgramEnvParameter4fARB=GLee_Lazy_glProgramEnvParameter4fARB; #endif #ifndef GLEE_C_DEFINED_glProgramEnvParameter4fvARB #define GLEE_C_DEFINED_glProgramEnvParameter4fvARB void __stdcall GLee_Lazy_glProgramEnvParameter4fvARB(GLenum target, GLuint index, const GLfloat * params) {if (GLeeInit()) glProgramEnvParameter4fvARB(target, index, params);} GLEEPFNGLPROGRAMENVPARAMETER4FVARBPROC GLeeFuncPtr_glProgramEnvParameter4fvARB=GLee_Lazy_glProgramEnvParameter4fvARB; #endif #ifndef GLEE_C_DEFINED_glProgramLocalParameter4dARB #define GLEE_C_DEFINED_glProgramLocalParameter4dARB void __stdcall GLee_Lazy_glProgramLocalParameter4dARB(GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) {if (GLeeInit()) glProgramLocalParameter4dARB(target, index, x, y, z, w);} GLEEPFNGLPROGRAMLOCALPARAMETER4DARBPROC GLeeFuncPtr_glProgramLocalParameter4dARB=GLee_Lazy_glProgramLocalParameter4dARB; #endif #ifndef GLEE_C_DEFINED_glProgramLocalParameter4dvARB #define GLEE_C_DEFINED_glProgramLocalParameter4dvARB void __stdcall GLee_Lazy_glProgramLocalParameter4dvARB(GLenum target, GLuint index, const GLdouble * params) {if (GLeeInit()) glProgramLocalParameter4dvARB(target, index, params);} GLEEPFNGLPROGRAMLOCALPARAMETER4DVARBPROC GLeeFuncPtr_glProgramLocalParameter4dvARB=GLee_Lazy_glProgramLocalParameter4dvARB; #endif #ifndef GLEE_C_DEFINED_glProgramLocalParameter4fARB #define GLEE_C_DEFINED_glProgramLocalParameter4fARB void __stdcall GLee_Lazy_glProgramLocalParameter4fARB(GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w) {if (GLeeInit()) glProgramLocalParameter4fARB(target, index, x, y, z, w);} GLEEPFNGLPROGRAMLOCALPARAMETER4FARBPROC GLeeFuncPtr_glProgramLocalParameter4fARB=GLee_Lazy_glProgramLocalParameter4fARB; #endif #ifndef GLEE_C_DEFINED_glProgramLocalParameter4fvARB #define GLEE_C_DEFINED_glProgramLocalParameter4fvARB void __stdcall GLee_Lazy_glProgramLocalParameter4fvARB(GLenum target, GLuint index, const GLfloat * params) {if (GLeeInit()) glProgramLocalParameter4fvARB(target, index, params);} GLEEPFNGLPROGRAMLOCALPARAMETER4FVARBPROC GLeeFuncPtr_glProgramLocalParameter4fvARB=GLee_Lazy_glProgramLocalParameter4fvARB; #endif #ifndef GLEE_C_DEFINED_glGetProgramEnvParameterdvARB #define GLEE_C_DEFINED_glGetProgramEnvParameterdvARB void __stdcall GLee_Lazy_glGetProgramEnvParameterdvARB(GLenum target, GLuint index, GLdouble * params) {if (GLeeInit()) glGetProgramEnvParameterdvARB(target, index, params);} GLEEPFNGLGETPROGRAMENVPARAMETERDVARBPROC GLeeFuncPtr_glGetProgramEnvParameterdvARB=GLee_Lazy_glGetProgramEnvParameterdvARB; #endif #ifndef GLEE_C_DEFINED_glGetProgramEnvParameterfvARB #define GLEE_C_DEFINED_glGetProgramEnvParameterfvARB void __stdcall GLee_Lazy_glGetProgramEnvParameterfvARB(GLenum target, GLuint index, GLfloat * params) {if (GLeeInit()) glGetProgramEnvParameterfvARB(target, index, params);} GLEEPFNGLGETPROGRAMENVPARAMETERFVARBPROC GLeeFuncPtr_glGetProgramEnvParameterfvARB=GLee_Lazy_glGetProgramEnvParameterfvARB; #endif #ifndef GLEE_C_DEFINED_glGetProgramLocalParameterdvARB #define GLEE_C_DEFINED_glGetProgramLocalParameterdvARB void __stdcall GLee_Lazy_glGetProgramLocalParameterdvARB(GLenum target, GLuint index, GLdouble * params) {if (GLeeInit()) glGetProgramLocalParameterdvARB(target, index, params);} GLEEPFNGLGETPROGRAMLOCALPARAMETERDVARBPROC GLeeFuncPtr_glGetProgramLocalParameterdvARB=GLee_Lazy_glGetProgramLocalParameterdvARB; #endif #ifndef GLEE_C_DEFINED_glGetProgramLocalParameterfvARB #define GLEE_C_DEFINED_glGetProgramLocalParameterfvARB void __stdcall GLee_Lazy_glGetProgramLocalParameterfvARB(GLenum target, GLuint index, GLfloat * params) {if (GLeeInit()) glGetProgramLocalParameterfvARB(target, index, params);} GLEEPFNGLGETPROGRAMLOCALPARAMETERFVARBPROC GLeeFuncPtr_glGetProgramLocalParameterfvARB=GLee_Lazy_glGetProgramLocalParameterfvARB; #endif #ifndef GLEE_C_DEFINED_glGetProgramivARB #define GLEE_C_DEFINED_glGetProgramivARB void __stdcall GLee_Lazy_glGetProgramivARB(GLenum target, GLenum pname, GLint * params) {if (GLeeInit()) glGetProgramivARB(target, pname, params);} GLEEPFNGLGETPROGRAMIVARBPROC GLeeFuncPtr_glGetProgramivARB=GLee_Lazy_glGetProgramivARB; #endif #ifndef GLEE_C_DEFINED_glGetProgramStringARB #define GLEE_C_DEFINED_glGetProgramStringARB void __stdcall GLee_Lazy_glGetProgramStringARB(GLenum target, GLenum pname, GLvoid * string) {if (GLeeInit()) glGetProgramStringARB(target, pname, string);} GLEEPFNGLGETPROGRAMSTRINGARBPROC GLeeFuncPtr_glGetProgramStringARB=GLee_Lazy_glGetProgramStringARB; #endif #ifndef GLEE_C_DEFINED_glGetVertexAttribdvARB #define GLEE_C_DEFINED_glGetVertexAttribdvARB void __stdcall GLee_Lazy_glGetVertexAttribdvARB(GLuint index, GLenum pname, GLdouble * params) {if (GLeeInit()) glGetVertexAttribdvARB(index, pname, params);} GLEEPFNGLGETVERTEXATTRIBDVARBPROC GLeeFuncPtr_glGetVertexAttribdvARB=GLee_Lazy_glGetVertexAttribdvARB; #endif #ifndef GLEE_C_DEFINED_glGetVertexAttribfvARB #define GLEE_C_DEFINED_glGetVertexAttribfvARB void __stdcall GLee_Lazy_glGetVertexAttribfvARB(GLuint index, GLenum pname, GLfloat * params) {if (GLeeInit()) glGetVertexAttribfvARB(index, pname, params);} GLEEPFNGLGETVERTEXATTRIBFVARBPROC GLeeFuncPtr_glGetVertexAttribfvARB=GLee_Lazy_glGetVertexAttribfvARB; #endif #ifndef GLEE_C_DEFINED_glGetVertexAttribivARB #define GLEE_C_DEFINED_glGetVertexAttribivARB void __stdcall GLee_Lazy_glGetVertexAttribivARB(GLuint index, GLenum pname, GLint * params) {if (GLeeInit()) glGetVertexAttribivARB(index, pname, params);} GLEEPFNGLGETVERTEXATTRIBIVARBPROC GLeeFuncPtr_glGetVertexAttribivARB=GLee_Lazy_glGetVertexAttribivARB; #endif #ifndef GLEE_C_DEFINED_glGetVertexAttribPointervARB #define GLEE_C_DEFINED_glGetVertexAttribPointervARB void __stdcall GLee_Lazy_glGetVertexAttribPointervARB(GLuint index, GLenum pname, GLvoid* * pointer) {if (GLeeInit()) glGetVertexAttribPointervARB(index, pname, pointer);} GLEEPFNGLGETVERTEXATTRIBPOINTERVARBPROC GLeeFuncPtr_glGetVertexAttribPointervARB=GLee_Lazy_glGetVertexAttribPointervARB; #endif #ifndef GLEE_C_DEFINED_glIsProgramARB #define GLEE_C_DEFINED_glIsProgramARB GLboolean __stdcall GLee_Lazy_glIsProgramARB(GLuint program) {if (GLeeInit()) return glIsProgramARB(program); return (GLboolean)0;} GLEEPFNGLISPROGRAMARBPROC GLeeFuncPtr_glIsProgramARB=GLee_Lazy_glIsProgramARB; #endif #endif /* GL_ARB_fragment_program */ #ifdef __GLEE_GL_ARB_fragment_program #endif /* GL_ARB_vertex_buffer_object */ #ifdef __GLEE_GL_ARB_vertex_buffer_object #ifndef GLEE_C_DEFINED_glBindBufferARB #define GLEE_C_DEFINED_glBindBufferARB void __stdcall GLee_Lazy_glBindBufferARB(GLenum target, GLuint buffer) {if (GLeeInit()) glBindBufferARB(target, buffer);} GLEEPFNGLBINDBUFFERARBPROC GLeeFuncPtr_glBindBufferARB=GLee_Lazy_glBindBufferARB; #endif #ifndef GLEE_C_DEFINED_glDeleteBuffersARB #define GLEE_C_DEFINED_glDeleteBuffersARB void __stdcall GLee_Lazy_glDeleteBuffersARB(GLsizei n, const GLuint * buffers) {if (GLeeInit()) glDeleteBuffersARB(n, buffers);} GLEEPFNGLDELETEBUFFERSARBPROC GLeeFuncPtr_glDeleteBuffersARB=GLee_Lazy_glDeleteBuffersARB; #endif #ifndef GLEE_C_DEFINED_glGenBuffersARB #define GLEE_C_DEFINED_glGenBuffersARB void __stdcall GLee_Lazy_glGenBuffersARB(GLsizei n, GLuint * buffers) {if (GLeeInit()) glGenBuffersARB(n, buffers);} GLEEPFNGLGENBUFFERSARBPROC GLeeFuncPtr_glGenBuffersARB=GLee_Lazy_glGenBuffersARB; #endif #ifndef GLEE_C_DEFINED_glIsBufferARB #define GLEE_C_DEFINED_glIsBufferARB GLboolean __stdcall GLee_Lazy_glIsBufferARB(GLuint buffer) {if (GLeeInit()) return glIsBufferARB(buffer); return (GLboolean)0;} GLEEPFNGLISBUFFERARBPROC GLeeFuncPtr_glIsBufferARB=GLee_Lazy_glIsBufferARB; #endif #ifndef GLEE_C_DEFINED_glBufferDataARB #define GLEE_C_DEFINED_glBufferDataARB void __stdcall GLee_Lazy_glBufferDataARB(GLenum target, GLsizeiptrARB size, const GLvoid * data, GLenum usage) {if (GLeeInit()) glBufferDataARB(target, size, data, usage);} GLEEPFNGLBUFFERDATAARBPROC GLeeFuncPtr_glBufferDataARB=GLee_Lazy_glBufferDataARB; #endif #ifndef GLEE_C_DEFINED_glBufferSubDataARB #define GLEE_C_DEFINED_glBufferSubDataARB void __stdcall GLee_Lazy_glBufferSubDataARB(GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid * data) {if (GLeeInit()) glBufferSubDataARB(target, offset, size, data);} GLEEPFNGLBUFFERSUBDATAARBPROC GLeeFuncPtr_glBufferSubDataARB=GLee_Lazy_glBufferSubDataARB; #endif #ifndef GLEE_C_DEFINED_glGetBufferSubDataARB #define GLEE_C_DEFINED_glGetBufferSubDataARB void __stdcall GLee_Lazy_glGetBufferSubDataARB(GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid * data) {if (GLeeInit()) glGetBufferSubDataARB(target, offset, size, data);} GLEEPFNGLGETBUFFERSUBDATAARBPROC GLeeFuncPtr_glGetBufferSubDataARB=GLee_Lazy_glGetBufferSubDataARB; #endif #ifndef GLEE_C_DEFINED_glMapBufferARB #define GLEE_C_DEFINED_glMapBufferARB GLvoid* __stdcall GLee_Lazy_glMapBufferARB(GLenum target, GLenum access) {if (GLeeInit()) return glMapBufferARB(target, access); return (GLvoid*)0;} GLEEPFNGLMAPBUFFERARBPROC GLeeFuncPtr_glMapBufferARB=GLee_Lazy_glMapBufferARB; #endif #ifndef GLEE_C_DEFINED_glUnmapBufferARB #define GLEE_C_DEFINED_glUnmapBufferARB GLboolean __stdcall GLee_Lazy_glUnmapBufferARB(GLenum target) {if (GLeeInit()) return glUnmapBufferARB(target); return (GLboolean)0;} GLEEPFNGLUNMAPBUFFERARBPROC GLeeFuncPtr_glUnmapBufferARB=GLee_Lazy_glUnmapBufferARB; #endif #ifndef GLEE_C_DEFINED_glGetBufferParameterivARB #define GLEE_C_DEFINED_glGetBufferParameterivARB void __stdcall GLee_Lazy_glGetBufferParameterivARB(GLenum target, GLenum pname, GLint * params) {if (GLeeInit()) glGetBufferParameterivARB(target, pname, params);} GLEEPFNGLGETBUFFERPARAMETERIVARBPROC GLeeFuncPtr_glGetBufferParameterivARB=GLee_Lazy_glGetBufferParameterivARB; #endif #ifndef GLEE_C_DEFINED_glGetBufferPointervARB #define GLEE_C_DEFINED_glGetBufferPointervARB void __stdcall GLee_Lazy_glGetBufferPointervARB(GLenum target, GLenum pname, GLvoid* * params) {if (GLeeInit()) glGetBufferPointervARB(target, pname, params);} GLEEPFNGLGETBUFFERPOINTERVARBPROC GLeeFuncPtr_glGetBufferPointervARB=GLee_Lazy_glGetBufferPointervARB; #endif #endif /* GL_ARB_occlusion_query */ #ifdef __GLEE_GL_ARB_occlusion_query #ifndef GLEE_C_DEFINED_glGenQueriesARB #define GLEE_C_DEFINED_glGenQueriesARB void __stdcall GLee_Lazy_glGenQueriesARB(GLsizei n, GLuint * ids) {if (GLeeInit()) glGenQueriesARB(n, ids);} GLEEPFNGLGENQUERIESARBPROC GLeeFuncPtr_glGenQueriesARB=GLee_Lazy_glGenQueriesARB; #endif #ifndef GLEE_C_DEFINED_glDeleteQueriesARB #define GLEE_C_DEFINED_glDeleteQueriesARB void __stdcall GLee_Lazy_glDeleteQueriesARB(GLsizei n, const GLuint * ids) {if (GLeeInit()) glDeleteQueriesARB(n, ids);} GLEEPFNGLDELETEQUERIESARBPROC GLeeFuncPtr_glDeleteQueriesARB=GLee_Lazy_glDeleteQueriesARB; #endif #ifndef GLEE_C_DEFINED_glIsQueryARB #define GLEE_C_DEFINED_glIsQueryARB GLboolean __stdcall GLee_Lazy_glIsQueryARB(GLuint id) {if (GLeeInit()) return glIsQueryARB(id); return (GLboolean)0;} GLEEPFNGLISQUERYARBPROC GLeeFuncPtr_glIsQueryARB=GLee_Lazy_glIsQueryARB; #endif #ifndef GLEE_C_DEFINED_glBeginQueryARB #define GLEE_C_DEFINED_glBeginQueryARB void __stdcall GLee_Lazy_glBeginQueryARB(GLenum target, GLuint id) {if (GLeeInit()) glBeginQueryARB(target, id);} GLEEPFNGLBEGINQUERYARBPROC GLeeFuncPtr_glBeginQueryARB=GLee_Lazy_glBeginQueryARB; #endif #ifndef GLEE_C_DEFINED_glEndQueryARB #define GLEE_C_DEFINED_glEndQueryARB void __stdcall GLee_Lazy_glEndQueryARB(GLenum target) {if (GLeeInit()) glEndQueryARB(target);} GLEEPFNGLENDQUERYARBPROC GLeeFuncPtr_glEndQueryARB=GLee_Lazy_glEndQueryARB; #endif #ifndef GLEE_C_DEFINED_glGetQueryivARB #define GLEE_C_DEFINED_glGetQueryivARB void __stdcall GLee_Lazy_glGetQueryivARB(GLenum target, GLenum pname, GLint * params) {if (GLeeInit()) glGetQueryivARB(target, pname, params);} GLEEPFNGLGETQUERYIVARBPROC GLeeFuncPtr_glGetQueryivARB=GLee_Lazy_glGetQueryivARB; #endif #ifndef GLEE_C_DEFINED_glGetQueryObjectivARB #define GLEE_C_DEFINED_glGetQueryObjectivARB void __stdcall GLee_Lazy_glGetQueryObjectivARB(GLuint id, GLenum pname, GLint * params) {if (GLeeInit()) glGetQueryObjectivARB(id, pname, params);} GLEEPFNGLGETQUERYOBJECTIVARBPROC GLeeFuncPtr_glGetQueryObjectivARB=GLee_Lazy_glGetQueryObjectivARB; #endif #ifndef GLEE_C_DEFINED_glGetQueryObjectuivARB #define GLEE_C_DEFINED_glGetQueryObjectuivARB void __stdcall GLee_Lazy_glGetQueryObjectuivARB(GLuint id, GLenum pname, GLuint * params) {if (GLeeInit()) glGetQueryObjectuivARB(id, pname, params);} GLEEPFNGLGETQUERYOBJECTUIVARBPROC GLeeFuncPtr_glGetQueryObjectuivARB=GLee_Lazy_glGetQueryObjectuivARB; #endif #endif /* GL_ARB_shader_objects */ #ifdef __GLEE_GL_ARB_shader_objects #ifndef GLEE_C_DEFINED_glDeleteObjectARB #define GLEE_C_DEFINED_glDeleteObjectARB void __stdcall GLee_Lazy_glDeleteObjectARB(GLhandleARB obj) {if (GLeeInit()) glDeleteObjectARB(obj);} GLEEPFNGLDELETEOBJECTARBPROC GLeeFuncPtr_glDeleteObjectARB=GLee_Lazy_glDeleteObjectARB; #endif #ifndef GLEE_C_DEFINED_glGetHandleARB #define GLEE_C_DEFINED_glGetHandleARB GLhandleARB __stdcall GLee_Lazy_glGetHandleARB(GLenum pname) {if (GLeeInit()) return glGetHandleARB(pname); return (GLhandleARB)0;} GLEEPFNGLGETHANDLEARBPROC GLeeFuncPtr_glGetHandleARB=GLee_Lazy_glGetHandleARB; #endif #ifndef GLEE_C_DEFINED_glDetachObjectARB #define GLEE_C_DEFINED_glDetachObjectARB void __stdcall GLee_Lazy_glDetachObjectARB(GLhandleARB containerObj, GLhandleARB attachedObj) {if (GLeeInit()) glDetachObjectARB(containerObj, attachedObj);} GLEEPFNGLDETACHOBJECTARBPROC GLeeFuncPtr_glDetachObjectARB=GLee_Lazy_glDetachObjectARB; #endif #ifndef GLEE_C_DEFINED_glCreateShaderObjectARB #define GLEE_C_DEFINED_glCreateShaderObjectARB GLhandleARB __stdcall GLee_Lazy_glCreateShaderObjectARB(GLenum shaderType) {if (GLeeInit()) return glCreateShaderObjectARB(shaderType); return (GLhandleARB)0;} GLEEPFNGLCREATESHADEROBJECTARBPROC GLeeFuncPtr_glCreateShaderObjectARB=GLee_Lazy_glCreateShaderObjectARB; #endif #ifndef GLEE_C_DEFINED_glShaderSourceARB #define GLEE_C_DEFINED_glShaderSourceARB void __stdcall GLee_Lazy_glShaderSourceARB(GLhandleARB shaderObj, GLsizei count, const GLcharARB* * string, const GLint * length) {if (GLeeInit()) glShaderSourceARB(shaderObj, count, string, length);} GLEEPFNGLSHADERSOURCEARBPROC GLeeFuncPtr_glShaderSourceARB=GLee_Lazy_glShaderSourceARB; #endif #ifndef GLEE_C_DEFINED_glCompileShaderARB #define GLEE_C_DEFINED_glCompileShaderARB void __stdcall GLee_Lazy_glCompileShaderARB(GLhandleARB shaderObj) {if (GLeeInit()) glCompileShaderARB(shaderObj);} GLEEPFNGLCOMPILESHADERARBPROC GLeeFuncPtr_glCompileShaderARB=GLee_Lazy_glCompileShaderARB; #endif #ifndef GLEE_C_DEFINED_glCreateProgramObjectARB #define GLEE_C_DEFINED_glCreateProgramObjectARB GLhandleARB __stdcall GLee_Lazy_glCreateProgramObjectARB(void) {if (GLeeInit()) return glCreateProgramObjectARB(); return (GLhandleARB)0;} GLEEPFNGLCREATEPROGRAMOBJECTARBPROC GLeeFuncPtr_glCreateProgramObjectARB=GLee_Lazy_glCreateProgramObjectARB; #endif #ifndef GLEE_C_DEFINED_glAttachObjectARB #define GLEE_C_DEFINED_glAttachObjectARB void __stdcall GLee_Lazy_glAttachObjectARB(GLhandleARB containerObj, GLhandleARB obj) {if (GLeeInit()) glAttachObjectARB(containerObj, obj);} GLEEPFNGLATTACHOBJECTARBPROC GLeeFuncPtr_glAttachObjectARB=GLee_Lazy_glAttachObjectARB; #endif #ifndef GLEE_C_DEFINED_glLinkProgramARB #define GLEE_C_DEFINED_glLinkProgramARB void __stdcall GLee_Lazy_glLinkProgramARB(GLhandleARB programObj) {if (GLeeInit()) glLinkProgramARB(programObj);} GLEEPFNGLLINKPROGRAMARBPROC GLeeFuncPtr_glLinkProgramARB=GLee_Lazy_glLinkProgramARB; #endif #ifndef GLEE_C_DEFINED_glUseProgramObjectARB #define GLEE_C_DEFINED_glUseProgramObjectARB void __stdcall GLee_Lazy_glUseProgramObjectARB(GLhandleARB programObj) {if (GLeeInit()) glUseProgramObjectARB(programObj);} GLEEPFNGLUSEPROGRAMOBJECTARBPROC GLeeFuncPtr_glUseProgramObjectARB=GLee_Lazy_glUseProgramObjectARB; #endif #ifndef GLEE_C_DEFINED_glValidateProgramARB #define GLEE_C_DEFINED_glValidateProgramARB void __stdcall GLee_Lazy_glValidateProgramARB(GLhandleARB programObj) {if (GLeeInit()) glValidateProgramARB(programObj);} GLEEPFNGLVALIDATEPROGRAMARBPROC GLeeFuncPtr_glValidateProgramARB=GLee_Lazy_glValidateProgramARB; #endif #ifndef GLEE_C_DEFINED_glUniform1fARB #define GLEE_C_DEFINED_glUniform1fARB void __stdcall GLee_Lazy_glUniform1fARB(GLint location, GLfloat v0) {if (GLeeInit()) glUniform1fARB(location, v0);} GLEEPFNGLUNIFORM1FARBPROC GLeeFuncPtr_glUniform1fARB=GLee_Lazy_glUniform1fARB; #endif #ifndef GLEE_C_DEFINED_glUniform2fARB #define GLEE_C_DEFINED_glUniform2fARB void __stdcall GLee_Lazy_glUniform2fARB(GLint location, GLfloat v0, GLfloat v1) {if (GLeeInit()) glUniform2fARB(location, v0, v1);} GLEEPFNGLUNIFORM2FARBPROC GLeeFuncPtr_glUniform2fARB=GLee_Lazy_glUniform2fARB; #endif #ifndef GLEE_C_DEFINED_glUniform3fARB #define GLEE_C_DEFINED_glUniform3fARB void __stdcall GLee_Lazy_glUniform3fARB(GLint location, GLfloat v0, GLfloat v1, GLfloat v2) {if (GLeeInit()) glUniform3fARB(location, v0, v1, v2);} GLEEPFNGLUNIFORM3FARBPROC GLeeFuncPtr_glUniform3fARB=GLee_Lazy_glUniform3fARB; #endif #ifndef GLEE_C_DEFINED_glUniform4fARB #define GLEE_C_DEFINED_glUniform4fARB void __stdcall GLee_Lazy_glUniform4fARB(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) {if (GLeeInit()) glUniform4fARB(location, v0, v1, v2, v3);} GLEEPFNGLUNIFORM4FARBPROC GLeeFuncPtr_glUniform4fARB=GLee_Lazy_glUniform4fARB; #endif #ifndef GLEE_C_DEFINED_glUniform1iARB #define GLEE_C_DEFINED_glUniform1iARB void __stdcall GLee_Lazy_glUniform1iARB(GLint location, GLint v0) {if (GLeeInit()) glUniform1iARB(location, v0);} GLEEPFNGLUNIFORM1IARBPROC GLeeFuncPtr_glUniform1iARB=GLee_Lazy_glUniform1iARB; #endif #ifndef GLEE_C_DEFINED_glUniform2iARB #define GLEE_C_DEFINED_glUniform2iARB void __stdcall GLee_Lazy_glUniform2iARB(GLint location, GLint v0, GLint v1) {if (GLeeInit()) glUniform2iARB(location, v0, v1);} GLEEPFNGLUNIFORM2IARBPROC GLeeFuncPtr_glUniform2iARB=GLee_Lazy_glUniform2iARB; #endif #ifndef GLEE_C_DEFINED_glUniform3iARB #define GLEE_C_DEFINED_glUniform3iARB void __stdcall GLee_Lazy_glUniform3iARB(GLint location, GLint v0, GLint v1, GLint v2) {if (GLeeInit()) glUniform3iARB(location, v0, v1, v2);} GLEEPFNGLUNIFORM3IARBPROC GLeeFuncPtr_glUniform3iARB=GLee_Lazy_glUniform3iARB; #endif #ifndef GLEE_C_DEFINED_glUniform4iARB #define GLEE_C_DEFINED_glUniform4iARB void __stdcall GLee_Lazy_glUniform4iARB(GLint location, GLint v0, GLint v1, GLint v2, GLint v3) {if (GLeeInit()) glUniform4iARB(location, v0, v1, v2, v3);} GLEEPFNGLUNIFORM4IARBPROC GLeeFuncPtr_glUniform4iARB=GLee_Lazy_glUniform4iARB; #endif #ifndef GLEE_C_DEFINED_glUniform1fvARB #define GLEE_C_DEFINED_glUniform1fvARB void __stdcall GLee_Lazy_glUniform1fvARB(GLint location, GLsizei count, const GLfloat * value) {if (GLeeInit()) glUniform1fvARB(location, count, value);} GLEEPFNGLUNIFORM1FVARBPROC GLeeFuncPtr_glUniform1fvARB=GLee_Lazy_glUniform1fvARB; #endif #ifndef GLEE_C_DEFINED_glUniform2fvARB #define GLEE_C_DEFINED_glUniform2fvARB void __stdcall GLee_Lazy_glUniform2fvARB(GLint location, GLsizei count, const GLfloat * value) {if (GLeeInit()) glUniform2fvARB(location, count, value);} GLEEPFNGLUNIFORM2FVARBPROC GLeeFuncPtr_glUniform2fvARB=GLee_Lazy_glUniform2fvARB; #endif #ifndef GLEE_C_DEFINED_glUniform3fvARB #define GLEE_C_DEFINED_glUniform3fvARB void __stdcall GLee_Lazy_glUniform3fvARB(GLint location, GLsizei count, const GLfloat * value) {if (GLeeInit()) glUniform3fvARB(location, count, value);} GLEEPFNGLUNIFORM3FVARBPROC GLeeFuncPtr_glUniform3fvARB=GLee_Lazy_glUniform3fvARB; #endif #ifndef GLEE_C_DEFINED_glUniform4fvARB #define GLEE_C_DEFINED_glUniform4fvARB void __stdcall GLee_Lazy_glUniform4fvARB(GLint location, GLsizei count, const GLfloat * value) {if (GLeeInit()) glUniform4fvARB(location, count, value);} GLEEPFNGLUNIFORM4FVARBPROC GLeeFuncPtr_glUniform4fvARB=GLee_Lazy_glUniform4fvARB; #endif #ifndef GLEE_C_DEFINED_glUniform1ivARB #define GLEE_C_DEFINED_glUniform1ivARB void __stdcall GLee_Lazy_glUniform1ivARB(GLint location, GLsizei count, const GLint * value) {if (GLeeInit()) glUniform1ivARB(location, count, value);} GLEEPFNGLUNIFORM1IVARBPROC GLeeFuncPtr_glUniform1ivARB=GLee_Lazy_glUniform1ivARB; #endif #ifndef GLEE_C_DEFINED_glUniform2ivARB #define GLEE_C_DEFINED_glUniform2ivARB void __stdcall GLee_Lazy_glUniform2ivARB(GLint location, GLsizei count, const GLint * value) {if (GLeeInit()) glUniform2ivARB(location, count, value);} GLEEPFNGLUNIFORM2IVARBPROC GLeeFuncPtr_glUniform2ivARB=GLee_Lazy_glUniform2ivARB; #endif #ifndef GLEE_C_DEFINED_glUniform3ivARB #define GLEE_C_DEFINED_glUniform3ivARB void __stdcall GLee_Lazy_glUniform3ivARB(GLint location, GLsizei count, const GLint * value) {if (GLeeInit()) glUniform3ivARB(location, count, value);} GLEEPFNGLUNIFORM3IVARBPROC GLeeFuncPtr_glUniform3ivARB=GLee_Lazy_glUniform3ivARB; #endif #ifndef GLEE_C_DEFINED_glUniform4ivARB #define GLEE_C_DEFINED_glUniform4ivARB void __stdcall GLee_Lazy_glUniform4ivARB(GLint location, GLsizei count, const GLint * value) {if (GLeeInit()) glUniform4ivARB(location, count, value);} GLEEPFNGLUNIFORM4IVARBPROC GLeeFuncPtr_glUniform4ivARB=GLee_Lazy_glUniform4ivARB; #endif #ifndef GLEE_C_DEFINED_glUniformMatrix2fvARB #define GLEE_C_DEFINED_glUniformMatrix2fvARB void __stdcall GLee_Lazy_glUniformMatrix2fvARB(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {if (GLeeInit()) glUniformMatrix2fvARB(location, count, transpose, value);} GLEEPFNGLUNIFORMMATRIX2FVARBPROC GLeeFuncPtr_glUniformMatrix2fvARB=GLee_Lazy_glUniformMatrix2fvARB; #endif #ifndef GLEE_C_DEFINED_glUniformMatrix3fvARB #define GLEE_C_DEFINED_glUniformMatrix3fvARB void __stdcall GLee_Lazy_glUniformMatrix3fvARB(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {if (GLeeInit()) glUniformMatrix3fvARB(location, count, transpose, value);} GLEEPFNGLUNIFORMMATRIX3FVARBPROC GLeeFuncPtr_glUniformMatrix3fvARB=GLee_Lazy_glUniformMatrix3fvARB; #endif #ifndef GLEE_C_DEFINED_glUniformMatrix4fvARB #define GLEE_C_DEFINED_glUniformMatrix4fvARB void __stdcall GLee_Lazy_glUniformMatrix4fvARB(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {if (GLeeInit()) glUniformMatrix4fvARB(location, count, transpose, value);} GLEEPFNGLUNIFORMMATRIX4FVARBPROC GLeeFuncPtr_glUniformMatrix4fvARB=GLee_Lazy_glUniformMatrix4fvARB; #endif #ifndef GLEE_C_DEFINED_glGetObjectParameterfvARB #define GLEE_C_DEFINED_glGetObjectParameterfvARB void __stdcall GLee_Lazy_glGetObjectParameterfvARB(GLhandleARB obj, GLenum pname, GLfloat * params) {if (GLeeInit()) glGetObjectParameterfvARB(obj, pname, params);} GLEEPFNGLGETOBJECTPARAMETERFVARBPROC GLeeFuncPtr_glGetObjectParameterfvARB=GLee_Lazy_glGetObjectParameterfvARB; #endif #ifndef GLEE_C_DEFINED_glGetObjectParameterivARB #define GLEE_C_DEFINED_glGetObjectParameterivARB void __stdcall GLee_Lazy_glGetObjectParameterivARB(GLhandleARB obj, GLenum pname, GLint * params) {if (GLeeInit()) glGetObjectParameterivARB(obj, pname, params);} GLEEPFNGLGETOBJECTPARAMETERIVARBPROC GLeeFuncPtr_glGetObjectParameterivARB=GLee_Lazy_glGetObjectParameterivARB; #endif #ifndef GLEE_C_DEFINED_glGetInfoLogARB #define GLEE_C_DEFINED_glGetInfoLogARB void __stdcall GLee_Lazy_glGetInfoLogARB(GLhandleARB obj, GLsizei maxLength, GLsizei * length, GLcharARB * infoLog) {if (GLeeInit()) glGetInfoLogARB(obj, maxLength, length, infoLog);} GLEEPFNGLGETINFOLOGARBPROC GLeeFuncPtr_glGetInfoLogARB=GLee_Lazy_glGetInfoLogARB; #endif #ifndef GLEE_C_DEFINED_glGetAttachedObjectsARB #define GLEE_C_DEFINED_glGetAttachedObjectsARB void __stdcall GLee_Lazy_glGetAttachedObjectsARB(GLhandleARB containerObj, GLsizei maxCount, GLsizei * count, GLhandleARB * obj) {if (GLeeInit()) glGetAttachedObjectsARB(containerObj, maxCount, count, obj);} GLEEPFNGLGETATTACHEDOBJECTSARBPROC GLeeFuncPtr_glGetAttachedObjectsARB=GLee_Lazy_glGetAttachedObjectsARB; #endif #ifndef GLEE_C_DEFINED_glGetUniformLocationARB #define GLEE_C_DEFINED_glGetUniformLocationARB GLint __stdcall GLee_Lazy_glGetUniformLocationARB(GLhandleARB programObj, const GLcharARB * name) {if (GLeeInit()) return glGetUniformLocationARB(programObj, name); return (GLint)0;} GLEEPFNGLGETUNIFORMLOCATIONARBPROC GLeeFuncPtr_glGetUniformLocationARB=GLee_Lazy_glGetUniformLocationARB; #endif #ifndef GLEE_C_DEFINED_glGetActiveUniformARB #define GLEE_C_DEFINED_glGetActiveUniformARB void __stdcall GLee_Lazy_glGetActiveUniformARB(GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei * length, GLint * size, GLenum * type, GLcharARB * name) {if (GLeeInit()) glGetActiveUniformARB(programObj, index, maxLength, length, size, type, name);} GLEEPFNGLGETACTIVEUNIFORMARBPROC GLeeFuncPtr_glGetActiveUniformARB=GLee_Lazy_glGetActiveUniformARB; #endif #ifndef GLEE_C_DEFINED_glGetUniformfvARB #define GLEE_C_DEFINED_glGetUniformfvARB void __stdcall GLee_Lazy_glGetUniformfvARB(GLhandleARB programObj, GLint location, GLfloat * params) {if (GLeeInit()) glGetUniformfvARB(programObj, location, params);} GLEEPFNGLGETUNIFORMFVARBPROC GLeeFuncPtr_glGetUniformfvARB=GLee_Lazy_glGetUniformfvARB; #endif #ifndef GLEE_C_DEFINED_glGetUniformivARB #define GLEE_C_DEFINED_glGetUniformivARB void __stdcall GLee_Lazy_glGetUniformivARB(GLhandleARB programObj, GLint location, GLint * params) {if (GLeeInit()) glGetUniformivARB(programObj, location, params);} GLEEPFNGLGETUNIFORMIVARBPROC GLeeFuncPtr_glGetUniformivARB=GLee_Lazy_glGetUniformivARB; #endif #ifndef GLEE_C_DEFINED_glGetShaderSourceARB #define GLEE_C_DEFINED_glGetShaderSourceARB void __stdcall GLee_Lazy_glGetShaderSourceARB(GLhandleARB obj, GLsizei maxLength, GLsizei * length, GLcharARB * source) {if (GLeeInit()) glGetShaderSourceARB(obj, maxLength, length, source);} GLEEPFNGLGETSHADERSOURCEARBPROC GLeeFuncPtr_glGetShaderSourceARB=GLee_Lazy_glGetShaderSourceARB; #endif #endif /* GL_ARB_vertex_shader */ #ifdef __GLEE_GL_ARB_vertex_shader #ifndef GLEE_C_DEFINED_glBindAttribLocationARB #define GLEE_C_DEFINED_glBindAttribLocationARB void __stdcall GLee_Lazy_glBindAttribLocationARB(GLhandleARB programObj, GLuint index, const GLcharARB * name) {if (GLeeInit()) glBindAttribLocationARB(programObj, index, name);} GLEEPFNGLBINDATTRIBLOCATIONARBPROC GLeeFuncPtr_glBindAttribLocationARB=GLee_Lazy_glBindAttribLocationARB; #endif #ifndef GLEE_C_DEFINED_glGetActiveAttribARB #define GLEE_C_DEFINED_glGetActiveAttribARB void __stdcall GLee_Lazy_glGetActiveAttribARB(GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei * length, GLint * size, GLenum * type, GLcharARB * name) {if (GLeeInit()) glGetActiveAttribARB(programObj, index, maxLength, length, size, type, name);} GLEEPFNGLGETACTIVEATTRIBARBPROC GLeeFuncPtr_glGetActiveAttribARB=GLee_Lazy_glGetActiveAttribARB; #endif #ifndef GLEE_C_DEFINED_glGetAttribLocationARB #define GLEE_C_DEFINED_glGetAttribLocationARB GLint __stdcall GLee_Lazy_glGetAttribLocationARB(GLhandleARB programObj, const GLcharARB * name) {if (GLeeInit()) return glGetAttribLocationARB(programObj, name); return (GLint)0;} GLEEPFNGLGETATTRIBLOCATIONARBPROC GLeeFuncPtr_glGetAttribLocationARB=GLee_Lazy_glGetAttribLocationARB; #endif #endif /* GL_ARB_fragment_shader */ #ifdef __GLEE_GL_ARB_fragment_shader #endif /* GL_ARB_shading_language_100 */ #ifdef __GLEE_GL_ARB_shading_language_100 #endif /* GL_ARB_texture_non_power_of_two */ #ifdef __GLEE_GL_ARB_texture_non_power_of_two #endif /* GL_ARB_point_sprite */ #ifdef __GLEE_GL_ARB_point_sprite #endif /* GL_ARB_fragment_program_shadow */ #ifdef __GLEE_GL_ARB_fragment_program_shadow #endif /* GL_ARB_draw_buffers */ #ifdef __GLEE_GL_ARB_draw_buffers #ifndef GLEE_C_DEFINED_glDrawBuffersARB #define GLEE_C_DEFINED_glDrawBuffersARB void __stdcall GLee_Lazy_glDrawBuffersARB(GLsizei n, const GLenum * bufs) {if (GLeeInit()) glDrawBuffersARB(n, bufs);} GLEEPFNGLDRAWBUFFERSARBPROC GLeeFuncPtr_glDrawBuffersARB=GLee_Lazy_glDrawBuffersARB; #endif #endif /* GL_ARB_texture_rectangle */ #ifdef __GLEE_GL_ARB_texture_rectangle #endif /* GL_ARB_color_buffer_float */ #ifdef __GLEE_GL_ARB_color_buffer_float #ifndef GLEE_C_DEFINED_glClampColorARB #define GLEE_C_DEFINED_glClampColorARB void __stdcall GLee_Lazy_glClampColorARB(GLenum target, GLenum clamp) {if (GLeeInit()) glClampColorARB(target, clamp);} GLEEPFNGLCLAMPCOLORARBPROC GLeeFuncPtr_glClampColorARB=GLee_Lazy_glClampColorARB; #endif #endif /* GL_ARB_half_float_pixel */ #ifdef __GLEE_GL_ARB_half_float_pixel #endif /* GL_ARB_texture_float */ #ifdef __GLEE_GL_ARB_texture_float #endif /* GL_ARB_pixel_buffer_object */ #ifdef __GLEE_GL_ARB_pixel_buffer_object #endif /* GL_ARB_depth_buffer_float */ #ifdef __GLEE_GL_ARB_depth_buffer_float #endif /* GL_ARB_draw_instanced */ #ifdef __GLEE_GL_ARB_draw_instanced #ifndef GLEE_C_DEFINED_glDrawArraysInstancedARB #define GLEE_C_DEFINED_glDrawArraysInstancedARB void __stdcall GLee_Lazy_glDrawArraysInstancedARB(GLenum mode, GLint first, GLsizei count, GLsizei primcount) {if (GLeeInit()) glDrawArraysInstancedARB(mode, first, count, primcount);} GLEEPFNGLDRAWARRAYSINSTANCEDARBPROC GLeeFuncPtr_glDrawArraysInstancedARB=GLee_Lazy_glDrawArraysInstancedARB; #endif #ifndef GLEE_C_DEFINED_glDrawElementsInstancedARB #define GLEE_C_DEFINED_glDrawElementsInstancedARB void __stdcall GLee_Lazy_glDrawElementsInstancedARB(GLenum mode, GLsizei count, GLenum type, const GLvoid * indices, GLsizei primcount) {if (GLeeInit()) glDrawElementsInstancedARB(mode, count, type, indices, primcount);} GLEEPFNGLDRAWELEMENTSINSTANCEDARBPROC GLeeFuncPtr_glDrawElementsInstancedARB=GLee_Lazy_glDrawElementsInstancedARB; #endif #endif /* GL_ARB_framebuffer_object */ #ifdef __GLEE_GL_ARB_framebuffer_object #ifndef GLEE_C_DEFINED_glIsRenderbuffer #define GLEE_C_DEFINED_glIsRenderbuffer GLboolean __stdcall GLee_Lazy_glIsRenderbuffer(GLuint renderbuffer) {if (GLeeInit()) return glIsRenderbuffer(renderbuffer); return (GLboolean)0;} GLEEPFNGLISRENDERBUFFERPROC GLeeFuncPtr_glIsRenderbuffer=GLee_Lazy_glIsRenderbuffer; #endif #ifndef GLEE_C_DEFINED_glBindRenderbuffer #define GLEE_C_DEFINED_glBindRenderbuffer void __stdcall GLee_Lazy_glBindRenderbuffer(GLenum target, GLuint renderbuffer) {if (GLeeInit()) glBindRenderbuffer(target, renderbuffer);} GLEEPFNGLBINDRENDERBUFFERPROC GLeeFuncPtr_glBindRenderbuffer=GLee_Lazy_glBindRenderbuffer; #endif #ifndef GLEE_C_DEFINED_glDeleteRenderbuffers #define GLEE_C_DEFINED_glDeleteRenderbuffers void __stdcall GLee_Lazy_glDeleteRenderbuffers(GLsizei n, const GLuint * renderbuffers) {if (GLeeInit()) glDeleteRenderbuffers(n, renderbuffers);} GLEEPFNGLDELETERENDERBUFFERSPROC GLeeFuncPtr_glDeleteRenderbuffers=GLee_Lazy_glDeleteRenderbuffers; #endif #ifndef GLEE_C_DEFINED_glGenRenderbuffers #define GLEE_C_DEFINED_glGenRenderbuffers void __stdcall GLee_Lazy_glGenRenderbuffers(GLsizei n, GLuint * renderbuffers) {if (GLeeInit()) glGenRenderbuffers(n, renderbuffers);} GLEEPFNGLGENRENDERBUFFERSPROC GLeeFuncPtr_glGenRenderbuffers=GLee_Lazy_glGenRenderbuffers; #endif #ifndef GLEE_C_DEFINED_glRenderbufferStorage #define GLEE_C_DEFINED_glRenderbufferStorage void __stdcall GLee_Lazy_glRenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height) {if (GLeeInit()) glRenderbufferStorage(target, internalformat, width, height);} GLEEPFNGLRENDERBUFFERSTORAGEPROC GLeeFuncPtr_glRenderbufferStorage=GLee_Lazy_glRenderbufferStorage; #endif #ifndef GLEE_C_DEFINED_glGetRenderbufferParameteriv #define GLEE_C_DEFINED_glGetRenderbufferParameteriv void __stdcall GLee_Lazy_glGetRenderbufferParameteriv(GLenum target, GLenum pname, GLint * params) {if (GLeeInit()) glGetRenderbufferParameteriv(target, pname, params);} GLEEPFNGLGETRENDERBUFFERPARAMETERIVPROC GLeeFuncPtr_glGetRenderbufferParameteriv=GLee_Lazy_glGetRenderbufferParameteriv; #endif #ifndef GLEE_C_DEFINED_glIsFramebuffer #define GLEE_C_DEFINED_glIsFramebuffer GLboolean __stdcall GLee_Lazy_glIsFramebuffer(GLuint framebuffer) {if (GLeeInit()) return glIsFramebuffer(framebuffer); return (GLboolean)0;} GLEEPFNGLISFRAMEBUFFERPROC GLeeFuncPtr_glIsFramebuffer=GLee_Lazy_glIsFramebuffer; #endif #ifndef GLEE_C_DEFINED_glBindFramebuffer #define GLEE_C_DEFINED_glBindFramebuffer void __stdcall GLee_Lazy_glBindFramebuffer(GLenum target, GLuint framebuffer) {if (GLeeInit()) glBindFramebuffer(target, framebuffer);} GLEEPFNGLBINDFRAMEBUFFERPROC GLeeFuncPtr_glBindFramebuffer=GLee_Lazy_glBindFramebuffer; #endif #ifndef GLEE_C_DEFINED_glDeleteFramebuffers #define GLEE_C_DEFINED_glDeleteFramebuffers void __stdcall GLee_Lazy_glDeleteFramebuffers(GLsizei n, const GLuint * framebuffers) {if (GLeeInit()) glDeleteFramebuffers(n, framebuffers);} GLEEPFNGLDELETEFRAMEBUFFERSPROC GLeeFuncPtr_glDeleteFramebuffers=GLee_Lazy_glDeleteFramebuffers; #endif #ifndef GLEE_C_DEFINED_glGenFramebuffers #define GLEE_C_DEFINED_glGenFramebuffers void __stdcall GLee_Lazy_glGenFramebuffers(GLsizei n, GLuint * framebuffers) {if (GLeeInit()) glGenFramebuffers(n, framebuffers);} GLEEPFNGLGENFRAMEBUFFERSPROC GLeeFuncPtr_glGenFramebuffers=GLee_Lazy_glGenFramebuffers; #endif #ifndef GLEE_C_DEFINED_glCheckFramebufferStatus #define GLEE_C_DEFINED_glCheckFramebufferStatus GLenum __stdcall GLee_Lazy_glCheckFramebufferStatus(GLenum target) {if (GLeeInit()) return glCheckFramebufferStatus(target); return (GLenum)0;} GLEEPFNGLCHECKFRAMEBUFFERSTATUSPROC GLeeFuncPtr_glCheckFramebufferStatus=GLee_Lazy_glCheckFramebufferStatus; #endif #ifndef GLEE_C_DEFINED_glFramebufferTexture1D #define GLEE_C_DEFINED_glFramebufferTexture1D void __stdcall GLee_Lazy_glFramebufferTexture1D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) {if (GLeeInit()) glFramebufferTexture1D(target, attachment, textarget, texture, level);} GLEEPFNGLFRAMEBUFFERTEXTURE1DPROC GLeeFuncPtr_glFramebufferTexture1D=GLee_Lazy_glFramebufferTexture1D; #endif #ifndef GLEE_C_DEFINED_glFramebufferTexture2D #define GLEE_C_DEFINED_glFramebufferTexture2D void __stdcall GLee_Lazy_glFramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) {if (GLeeInit()) glFramebufferTexture2D(target, attachment, textarget, texture, level);} GLEEPFNGLFRAMEBUFFERTEXTURE2DPROC GLeeFuncPtr_glFramebufferTexture2D=GLee_Lazy_glFramebufferTexture2D; #endif #ifndef GLEE_C_DEFINED_glFramebufferTexture3D #define GLEE_C_DEFINED_glFramebufferTexture3D void __stdcall GLee_Lazy_glFramebufferTexture3D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset) {if (GLeeInit()) glFramebufferTexture3D(target, attachment, textarget, texture, level, zoffset);} GLEEPFNGLFRAMEBUFFERTEXTURE3DPROC GLeeFuncPtr_glFramebufferTexture3D=GLee_Lazy_glFramebufferTexture3D; #endif #ifndef GLEE_C_DEFINED_glFramebufferRenderbuffer #define GLEE_C_DEFINED_glFramebufferRenderbuffer void __stdcall GLee_Lazy_glFramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) {if (GLeeInit()) glFramebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer);} GLEEPFNGLFRAMEBUFFERRENDERBUFFERPROC GLeeFuncPtr_glFramebufferRenderbuffer=GLee_Lazy_glFramebufferRenderbuffer; #endif #ifndef GLEE_C_DEFINED_glGetFramebufferAttachmentParameteriv #define GLEE_C_DEFINED_glGetFramebufferAttachmentParameteriv void __stdcall GLee_Lazy_glGetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenum pname, GLint * params) {if (GLeeInit()) glGetFramebufferAttachmentParameteriv(target, attachment, pname, params);} GLEEPFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC GLeeFuncPtr_glGetFramebufferAttachmentParameteriv=GLee_Lazy_glGetFramebufferAttachmentParameteriv; #endif #ifndef GLEE_C_DEFINED_glGenerateMipmap #define GLEE_C_DEFINED_glGenerateMipmap void __stdcall GLee_Lazy_glGenerateMipmap(GLenum target) {if (GLeeInit()) glGenerateMipmap(target);} GLEEPFNGLGENERATEMIPMAPPROC GLeeFuncPtr_glGenerateMipmap=GLee_Lazy_glGenerateMipmap; #endif #ifndef GLEE_C_DEFINED_glBlitFramebuffer #define GLEE_C_DEFINED_glBlitFramebuffer void __stdcall GLee_Lazy_glBlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) {if (GLeeInit()) glBlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);} GLEEPFNGLBLITFRAMEBUFFERPROC GLeeFuncPtr_glBlitFramebuffer=GLee_Lazy_glBlitFramebuffer; #endif #ifndef GLEE_C_DEFINED_glRenderbufferStorageMultisample #define GLEE_C_DEFINED_glRenderbufferStorageMultisample void __stdcall GLee_Lazy_glRenderbufferStorageMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) {if (GLeeInit()) glRenderbufferStorageMultisample(target, samples, internalformat, width, height);} GLEEPFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC GLeeFuncPtr_glRenderbufferStorageMultisample=GLee_Lazy_glRenderbufferStorageMultisample; #endif #ifndef GLEE_C_DEFINED_glFramebufferTextureLayer #define GLEE_C_DEFINED_glFramebufferTextureLayer void __stdcall GLee_Lazy_glFramebufferTextureLayer(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer) {if (GLeeInit()) glFramebufferTextureLayer(target, attachment, texture, level, layer);} GLEEPFNGLFRAMEBUFFERTEXTURELAYERPROC GLeeFuncPtr_glFramebufferTextureLayer=GLee_Lazy_glFramebufferTextureLayer; #endif #endif /* GL_ARB_framebuffer_sRGB */ #ifdef __GLEE_GL_ARB_framebuffer_sRGB #endif /* GL_ARB_geometry_shader4 */ #ifdef __GLEE_GL_ARB_geometry_shader4 #ifndef GLEE_C_DEFINED_glProgramParameteriARB #define GLEE_C_DEFINED_glProgramParameteriARB void __stdcall GLee_Lazy_glProgramParameteriARB(GLuint program, GLenum pname, GLint value) {if (GLeeInit()) glProgramParameteriARB(program, pname, value);} GLEEPFNGLPROGRAMPARAMETERIARBPROC GLeeFuncPtr_glProgramParameteriARB=GLee_Lazy_glProgramParameteriARB; #endif #ifndef GLEE_C_DEFINED_glFramebufferTextureARB #define GLEE_C_DEFINED_glFramebufferTextureARB void __stdcall GLee_Lazy_glFramebufferTextureARB(GLenum target, GLenum attachment, GLuint texture, GLint level) {if (GLeeInit()) glFramebufferTextureARB(target, attachment, texture, level);} GLEEPFNGLFRAMEBUFFERTEXTUREARBPROC GLeeFuncPtr_glFramebufferTextureARB=GLee_Lazy_glFramebufferTextureARB; #endif #ifndef GLEE_C_DEFINED_glFramebufferTextureLayerARB #define GLEE_C_DEFINED_glFramebufferTextureLayerARB void __stdcall GLee_Lazy_glFramebufferTextureLayerARB(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer) {if (GLeeInit()) glFramebufferTextureLayerARB(target, attachment, texture, level, layer);} GLEEPFNGLFRAMEBUFFERTEXTURELAYERARBPROC GLeeFuncPtr_glFramebufferTextureLayerARB=GLee_Lazy_glFramebufferTextureLayerARB; #endif #ifndef GLEE_C_DEFINED_glFramebufferTextureFaceARB #define GLEE_C_DEFINED_glFramebufferTextureFaceARB void __stdcall GLee_Lazy_glFramebufferTextureFaceARB(GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face) {if (GLeeInit()) glFramebufferTextureFaceARB(target, attachment, texture, level, face);} GLEEPFNGLFRAMEBUFFERTEXTUREFACEARBPROC GLeeFuncPtr_glFramebufferTextureFaceARB=GLee_Lazy_glFramebufferTextureFaceARB; #endif #endif /* GL_ARB_half_float_vertex */ #ifdef __GLEE_GL_ARB_half_float_vertex #endif /* GL_ARB_instanced_arrays */ #ifdef __GLEE_GL_ARB_instanced_arrays #ifndef GLEE_C_DEFINED_glVertexAttribDivisor #define GLEE_C_DEFINED_glVertexAttribDivisor void __stdcall GLee_Lazy_glVertexAttribDivisor(GLuint index, GLuint divisor) {if (GLeeInit()) glVertexAttribDivisor(index, divisor);} GLEEPFNGLVERTEXATTRIBDIVISORPROC GLeeFuncPtr_glVertexAttribDivisor=GLee_Lazy_glVertexAttribDivisor; #endif #endif /* GL_ARB_map_buffer_range */ #ifdef __GLEE_GL_ARB_map_buffer_range #ifndef GLEE_C_DEFINED_glMapBufferRange #define GLEE_C_DEFINED_glMapBufferRange void __stdcall GLee_Lazy_glMapBufferRange(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access) {if (GLeeInit()) glMapBufferRange(target, offset, length, access);} GLEEPFNGLMAPBUFFERRANGEPROC GLeeFuncPtr_glMapBufferRange=GLee_Lazy_glMapBufferRange; #endif #ifndef GLEE_C_DEFINED_glFlushMappedBufferRange #define GLEE_C_DEFINED_glFlushMappedBufferRange void __stdcall GLee_Lazy_glFlushMappedBufferRange(GLenum target, GLintptr offset, GLsizeiptr length) {if (GLeeInit()) glFlushMappedBufferRange(target, offset, length);} GLEEPFNGLFLUSHMAPPEDBUFFERRANGEPROC GLeeFuncPtr_glFlushMappedBufferRange=GLee_Lazy_glFlushMappedBufferRange; #endif #endif /* GL_ARB_texture_buffer_object */ #ifdef __GLEE_GL_ARB_texture_buffer_object #ifndef GLEE_C_DEFINED_glTexBufferARB #define GLEE_C_DEFINED_glTexBufferARB void __stdcall GLee_Lazy_glTexBufferARB(GLenum target, GLenum internalformat, GLuint buffer) {if (GLeeInit()) glTexBufferARB(target, internalformat, buffer);} GLEEPFNGLTEXBUFFERARBPROC GLeeFuncPtr_glTexBufferARB=GLee_Lazy_glTexBufferARB; #endif #endif /* GL_ARB_texture_compression_rgtc */ #ifdef __GLEE_GL_ARB_texture_compression_rgtc #endif /* GL_ARB_texture_rg */ #ifdef __GLEE_GL_ARB_texture_rg #endif /* GL_ARB_vertex_array_object */ #ifdef __GLEE_GL_ARB_vertex_array_object #ifndef GLEE_C_DEFINED_glBindVertexArray #define GLEE_C_DEFINED_glBindVertexArray void __stdcall GLee_Lazy_glBindVertexArray(GLuint array) {if (GLeeInit()) glBindVertexArray(array);} GLEEPFNGLBINDVERTEXARRAYPROC GLeeFuncPtr_glBindVertexArray=GLee_Lazy_glBindVertexArray; #endif #ifndef GLEE_C_DEFINED_glDeleteVertexArrays #define GLEE_C_DEFINED_glDeleteVertexArrays void __stdcall GLee_Lazy_glDeleteVertexArrays(GLsizei n, const GLuint * arrays) {if (GLeeInit()) glDeleteVertexArrays(n, arrays);} GLEEPFNGLDELETEVERTEXARRAYSPROC GLeeFuncPtr_glDeleteVertexArrays=GLee_Lazy_glDeleteVertexArrays; #endif #ifndef GLEE_C_DEFINED_glGenVertexArrays #define GLEE_C_DEFINED_glGenVertexArrays void __stdcall GLee_Lazy_glGenVertexArrays(GLsizei n, GLuint * arrays) {if (GLeeInit()) glGenVertexArrays(n, arrays);} GLEEPFNGLGENVERTEXARRAYSPROC GLeeFuncPtr_glGenVertexArrays=GLee_Lazy_glGenVertexArrays; #endif #ifndef GLEE_C_DEFINED_glIsVertexArray #define GLEE_C_DEFINED_glIsVertexArray GLboolean __stdcall GLee_Lazy_glIsVertexArray(GLuint array) {if (GLeeInit()) return glIsVertexArray(array); return (GLboolean)0;} GLEEPFNGLISVERTEXARRAYPROC GLeeFuncPtr_glIsVertexArray=GLee_Lazy_glIsVertexArray; #endif #endif /* GL_EXT_abgr */ #ifdef __GLEE_GL_EXT_abgr #endif /* GL_EXT_blend_color */ #ifdef __GLEE_GL_EXT_blend_color #ifndef GLEE_C_DEFINED_glBlendColorEXT #define GLEE_C_DEFINED_glBlendColorEXT void __stdcall GLee_Lazy_glBlendColorEXT(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) {if (GLeeInit()) glBlendColorEXT(red, green, blue, alpha);} GLEEPFNGLBLENDCOLOREXTPROC GLeeFuncPtr_glBlendColorEXT=GLee_Lazy_glBlendColorEXT; #endif #endif /* GL_EXT_polygon_offset */ #ifdef __GLEE_GL_EXT_polygon_offset #ifndef GLEE_C_DEFINED_glPolygonOffsetEXT #define GLEE_C_DEFINED_glPolygonOffsetEXT void __stdcall GLee_Lazy_glPolygonOffsetEXT(GLfloat factor, GLfloat bias) {if (GLeeInit()) glPolygonOffsetEXT(factor, bias);} GLEEPFNGLPOLYGONOFFSETEXTPROC GLeeFuncPtr_glPolygonOffsetEXT=GLee_Lazy_glPolygonOffsetEXT; #endif #endif /* GL_EXT_texture */ #ifdef __GLEE_GL_EXT_texture #endif /* GL_EXT_texture3D */ #ifdef __GLEE_GL_EXT_texture3D #ifndef GLEE_C_DEFINED_glTexImage3DEXT #define GLEE_C_DEFINED_glTexImage3DEXT void __stdcall GLee_Lazy_glTexImage3DEXT(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid * pixels) {if (GLeeInit()) glTexImage3DEXT(target, level, internalformat, width, height, depth, border, format, type, pixels);} GLEEPFNGLTEXIMAGE3DEXTPROC GLeeFuncPtr_glTexImage3DEXT=GLee_Lazy_glTexImage3DEXT; #endif #ifndef GLEE_C_DEFINED_glTexSubImage3DEXT #define GLEE_C_DEFINED_glTexSubImage3DEXT void __stdcall GLee_Lazy_glTexSubImage3DEXT(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid * pixels) {if (GLeeInit()) glTexSubImage3DEXT(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels);} GLEEPFNGLTEXSUBIMAGE3DEXTPROC GLeeFuncPtr_glTexSubImage3DEXT=GLee_Lazy_glTexSubImage3DEXT; #endif #endif /* GL_SGIS_texture_filter4 */ #ifdef __GLEE_GL_SGIS_texture_filter4 #ifndef GLEE_C_DEFINED_glGetTexFilterFuncSGIS #define GLEE_C_DEFINED_glGetTexFilterFuncSGIS void __stdcall GLee_Lazy_glGetTexFilterFuncSGIS(GLenum target, GLenum filter, GLfloat * weights) {if (GLeeInit()) glGetTexFilterFuncSGIS(target, filter, weights);} GLEEPFNGLGETTEXFILTERFUNCSGISPROC GLeeFuncPtr_glGetTexFilterFuncSGIS=GLee_Lazy_glGetTexFilterFuncSGIS; #endif #ifndef GLEE_C_DEFINED_glTexFilterFuncSGIS #define GLEE_C_DEFINED_glTexFilterFuncSGIS void __stdcall GLee_Lazy_glTexFilterFuncSGIS(GLenum target, GLenum filter, GLsizei n, const GLfloat * weights) {if (GLeeInit()) glTexFilterFuncSGIS(target, filter, n, weights);} GLEEPFNGLTEXFILTERFUNCSGISPROC GLeeFuncPtr_glTexFilterFuncSGIS=GLee_Lazy_glTexFilterFuncSGIS; #endif #endif /* GL_EXT_subtexture */ #ifdef __GLEE_GL_EXT_subtexture #ifndef GLEE_C_DEFINED_glTexSubImage1DEXT #define GLEE_C_DEFINED_glTexSubImage1DEXT void __stdcall GLee_Lazy_glTexSubImage1DEXT(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid * pixels) {if (GLeeInit()) glTexSubImage1DEXT(target, level, xoffset, width, format, type, pixels);} GLEEPFNGLTEXSUBIMAGE1DEXTPROC GLeeFuncPtr_glTexSubImage1DEXT=GLee_Lazy_glTexSubImage1DEXT; #endif #ifndef GLEE_C_DEFINED_glTexSubImage2DEXT #define GLEE_C_DEFINED_glTexSubImage2DEXT void __stdcall GLee_Lazy_glTexSubImage2DEXT(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * pixels) {if (GLeeInit()) glTexSubImage2DEXT(target, level, xoffset, yoffset, width, height, format, type, pixels);} GLEEPFNGLTEXSUBIMAGE2DEXTPROC GLeeFuncPtr_glTexSubImage2DEXT=GLee_Lazy_glTexSubImage2DEXT; #endif #endif /* GL_EXT_copy_texture */ #ifdef __GLEE_GL_EXT_copy_texture #ifndef GLEE_C_DEFINED_glCopyTexImage1DEXT #define GLEE_C_DEFINED_glCopyTexImage1DEXT void __stdcall GLee_Lazy_glCopyTexImage1DEXT(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border) {if (GLeeInit()) glCopyTexImage1DEXT(target, level, internalformat, x, y, width, border);} GLEEPFNGLCOPYTEXIMAGE1DEXTPROC GLeeFuncPtr_glCopyTexImage1DEXT=GLee_Lazy_glCopyTexImage1DEXT; #endif #ifndef GLEE_C_DEFINED_glCopyTexImage2DEXT #define GLEE_C_DEFINED_glCopyTexImage2DEXT void __stdcall GLee_Lazy_glCopyTexImage2DEXT(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) {if (GLeeInit()) glCopyTexImage2DEXT(target, level, internalformat, x, y, width, height, border);} GLEEPFNGLCOPYTEXIMAGE2DEXTPROC GLeeFuncPtr_glCopyTexImage2DEXT=GLee_Lazy_glCopyTexImage2DEXT; #endif #ifndef GLEE_C_DEFINED_glCopyTexSubImage1DEXT #define GLEE_C_DEFINED_glCopyTexSubImage1DEXT void __stdcall GLee_Lazy_glCopyTexSubImage1DEXT(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width) {if (GLeeInit()) glCopyTexSubImage1DEXT(target, level, xoffset, x, y, width);} GLEEPFNGLCOPYTEXSUBIMAGE1DEXTPROC GLeeFuncPtr_glCopyTexSubImage1DEXT=GLee_Lazy_glCopyTexSubImage1DEXT; #endif #ifndef GLEE_C_DEFINED_glCopyTexSubImage2DEXT #define GLEE_C_DEFINED_glCopyTexSubImage2DEXT void __stdcall GLee_Lazy_glCopyTexSubImage2DEXT(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height) {if (GLeeInit()) glCopyTexSubImage2DEXT(target, level, xoffset, yoffset, x, y, width, height);} GLEEPFNGLCOPYTEXSUBIMAGE2DEXTPROC GLeeFuncPtr_glCopyTexSubImage2DEXT=GLee_Lazy_glCopyTexSubImage2DEXT; #endif #ifndef GLEE_C_DEFINED_glCopyTexSubImage3DEXT #define GLEE_C_DEFINED_glCopyTexSubImage3DEXT void __stdcall GLee_Lazy_glCopyTexSubImage3DEXT(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) {if (GLeeInit()) glCopyTexSubImage3DEXT(target, level, xoffset, yoffset, zoffset, x, y, width, height);} GLEEPFNGLCOPYTEXSUBIMAGE3DEXTPROC GLeeFuncPtr_glCopyTexSubImage3DEXT=GLee_Lazy_glCopyTexSubImage3DEXT; #endif #endif /* GL_EXT_histogram */ #ifdef __GLEE_GL_EXT_histogram #ifndef GLEE_C_DEFINED_glGetHistogramEXT #define GLEE_C_DEFINED_glGetHistogramEXT void __stdcall GLee_Lazy_glGetHistogramEXT(GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid * values) {if (GLeeInit()) glGetHistogramEXT(target, reset, format, type, values);} GLEEPFNGLGETHISTOGRAMEXTPROC GLeeFuncPtr_glGetHistogramEXT=GLee_Lazy_glGetHistogramEXT; #endif #ifndef GLEE_C_DEFINED_glGetHistogramParameterfvEXT #define GLEE_C_DEFINED_glGetHistogramParameterfvEXT void __stdcall GLee_Lazy_glGetHistogramParameterfvEXT(GLenum target, GLenum pname, GLfloat * params) {if (GLeeInit()) glGetHistogramParameterfvEXT(target, pname, params);} GLEEPFNGLGETHISTOGRAMPARAMETERFVEXTPROC GLeeFuncPtr_glGetHistogramParameterfvEXT=GLee_Lazy_glGetHistogramParameterfvEXT; #endif #ifndef GLEE_C_DEFINED_glGetHistogramParameterivEXT #define GLEE_C_DEFINED_glGetHistogramParameterivEXT void __stdcall GLee_Lazy_glGetHistogramParameterivEXT(GLenum target, GLenum pname, GLint * params) {if (GLeeInit()) glGetHistogramParameterivEXT(target, pname, params);} GLEEPFNGLGETHISTOGRAMPARAMETERIVEXTPROC GLeeFuncPtr_glGetHistogramParameterivEXT=GLee_Lazy_glGetHistogramParameterivEXT; #endif #ifndef GLEE_C_DEFINED_glGetMinmaxEXT #define GLEE_C_DEFINED_glGetMinmaxEXT void __stdcall GLee_Lazy_glGetMinmaxEXT(GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid * values) {if (GLeeInit()) glGetMinmaxEXT(target, reset, format, type, values);} GLEEPFNGLGETMINMAXEXTPROC GLeeFuncPtr_glGetMinmaxEXT=GLee_Lazy_glGetMinmaxEXT; #endif #ifndef GLEE_C_DEFINED_glGetMinmaxParameterfvEXT #define GLEE_C_DEFINED_glGetMinmaxParameterfvEXT void __stdcall GLee_Lazy_glGetMinmaxParameterfvEXT(GLenum target, GLenum pname, GLfloat * params) {if (GLeeInit()) glGetMinmaxParameterfvEXT(target, pname, params);} GLEEPFNGLGETMINMAXPARAMETERFVEXTPROC GLeeFuncPtr_glGetMinmaxParameterfvEXT=GLee_Lazy_glGetMinmaxParameterfvEXT; #endif #ifndef GLEE_C_DEFINED_glGetMinmaxParameterivEXT #define GLEE_C_DEFINED_glGetMinmaxParameterivEXT void __stdcall GLee_Lazy_glGetMinmaxParameterivEXT(GLenum target, GLenum pname, GLint * params) {if (GLeeInit()) glGetMinmaxParameterivEXT(target, pname, params);} GLEEPFNGLGETMINMAXPARAMETERIVEXTPROC GLeeFuncPtr_glGetMinmaxParameterivEXT=GLee_Lazy_glGetMinmaxParameterivEXT; #endif #ifndef GLEE_C_DEFINED_glHistogramEXT #define GLEE_C_DEFINED_glHistogramEXT void __stdcall GLee_Lazy_glHistogramEXT(GLenum target, GLsizei width, GLenum internalformat, GLboolean sink) {if (GLeeInit()) glHistogramEXT(target, width, internalformat, sink);} GLEEPFNGLHISTOGRAMEXTPROC GLeeFuncPtr_glHistogramEXT=GLee_Lazy_glHistogramEXT; #endif #ifndef GLEE_C_DEFINED_glMinmaxEXT #define GLEE_C_DEFINED_glMinmaxEXT void __stdcall GLee_Lazy_glMinmaxEXT(GLenum target, GLenum internalformat, GLboolean sink) {if (GLeeInit()) glMinmaxEXT(target, internalformat, sink);} GLEEPFNGLMINMAXEXTPROC GLeeFuncPtr_glMinmaxEXT=GLee_Lazy_glMinmaxEXT; #endif #ifndef GLEE_C_DEFINED_glResetHistogramEXT #define GLEE_C_DEFINED_glResetHistogramEXT void __stdcall GLee_Lazy_glResetHistogramEXT(GLenum target) {if (GLeeInit()) glResetHistogramEXT(target);} GLEEPFNGLRESETHISTOGRAMEXTPROC GLeeFuncPtr_glResetHistogramEXT=GLee_Lazy_glResetHistogramEXT; #endif #ifndef GLEE_C_DEFINED_glResetMinmaxEXT #define GLEE_C_DEFINED_glResetMinmaxEXT void __stdcall GLee_Lazy_glResetMinmaxEXT(GLenum target) {if (GLeeInit()) glResetMinmaxEXT(target);} GLEEPFNGLRESETMINMAXEXTPROC GLeeFuncPtr_glResetMinmaxEXT=GLee_Lazy_glResetMinmaxEXT; #endif #endif /* GL_EXT_convolution */ #ifdef __GLEE_GL_EXT_convolution #ifndef GLEE_C_DEFINED_glConvolutionFilter1DEXT #define GLEE_C_DEFINED_glConvolutionFilter1DEXT void __stdcall GLee_Lazy_glConvolutionFilter1DEXT(GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid * image) {if (GLeeInit()) glConvolutionFilter1DEXT(target, internalformat, width, format, type, image);} GLEEPFNGLCONVOLUTIONFILTER1DEXTPROC GLeeFuncPtr_glConvolutionFilter1DEXT=GLee_Lazy_glConvolutionFilter1DEXT; #endif #ifndef GLEE_C_DEFINED_glConvolutionFilter2DEXT #define GLEE_C_DEFINED_glConvolutionFilter2DEXT void __stdcall GLee_Lazy_glConvolutionFilter2DEXT(GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * image) {if (GLeeInit()) glConvolutionFilter2DEXT(target, internalformat, width, height, format, type, image);} GLEEPFNGLCONVOLUTIONFILTER2DEXTPROC GLeeFuncPtr_glConvolutionFilter2DEXT=GLee_Lazy_glConvolutionFilter2DEXT; #endif #ifndef GLEE_C_DEFINED_glConvolutionParameterfEXT #define GLEE_C_DEFINED_glConvolutionParameterfEXT void __stdcall GLee_Lazy_glConvolutionParameterfEXT(GLenum target, GLenum pname, GLfloat params) {if (GLeeInit()) glConvolutionParameterfEXT(target, pname, params);} GLEEPFNGLCONVOLUTIONPARAMETERFEXTPROC GLeeFuncPtr_glConvolutionParameterfEXT=GLee_Lazy_glConvolutionParameterfEXT; #endif #ifndef GLEE_C_DEFINED_glConvolutionParameterfvEXT #define GLEE_C_DEFINED_glConvolutionParameterfvEXT void __stdcall GLee_Lazy_glConvolutionParameterfvEXT(GLenum target, GLenum pname, const GLfloat * params) {if (GLeeInit()) glConvolutionParameterfvEXT(target, pname, params);} GLEEPFNGLCONVOLUTIONPARAMETERFVEXTPROC GLeeFuncPtr_glConvolutionParameterfvEXT=GLee_Lazy_glConvolutionParameterfvEXT; #endif #ifndef GLEE_C_DEFINED_glConvolutionParameteriEXT #define GLEE_C_DEFINED_glConvolutionParameteriEXT void __stdcall GLee_Lazy_glConvolutionParameteriEXT(GLenum target, GLenum pname, GLint params) {if (GLeeInit()) glConvolutionParameteriEXT(target, pname, params);} GLEEPFNGLCONVOLUTIONPARAMETERIEXTPROC GLeeFuncPtr_glConvolutionParameteriEXT=GLee_Lazy_glConvolutionParameteriEXT; #endif #ifndef GLEE_C_DEFINED_glConvolutionParameterivEXT #define GLEE_C_DEFINED_glConvolutionParameterivEXT void __stdcall GLee_Lazy_glConvolutionParameterivEXT(GLenum target, GLenum pname, const GLint * params) {if (GLeeInit()) glConvolutionParameterivEXT(target, pname, params);} GLEEPFNGLCONVOLUTIONPARAMETERIVEXTPROC GLeeFuncPtr_glConvolutionParameterivEXT=GLee_Lazy_glConvolutionParameterivEXT; #endif #ifndef GLEE_C_DEFINED_glCopyConvolutionFilter1DEXT #define GLEE_C_DEFINED_glCopyConvolutionFilter1DEXT void __stdcall GLee_Lazy_glCopyConvolutionFilter1DEXT(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width) {if (GLeeInit()) glCopyConvolutionFilter1DEXT(target, internalformat, x, y, width);} GLEEPFNGLCOPYCONVOLUTIONFILTER1DEXTPROC GLeeFuncPtr_glCopyConvolutionFilter1DEXT=GLee_Lazy_glCopyConvolutionFilter1DEXT; #endif #ifndef GLEE_C_DEFINED_glCopyConvolutionFilter2DEXT #define GLEE_C_DEFINED_glCopyConvolutionFilter2DEXT void __stdcall GLee_Lazy_glCopyConvolutionFilter2DEXT(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height) {if (GLeeInit()) glCopyConvolutionFilter2DEXT(target, internalformat, x, y, width, height);} GLEEPFNGLCOPYCONVOLUTIONFILTER2DEXTPROC GLeeFuncPtr_glCopyConvolutionFilter2DEXT=GLee_Lazy_glCopyConvolutionFilter2DEXT; #endif #ifndef GLEE_C_DEFINED_glGetConvolutionFilterEXT #define GLEE_C_DEFINED_glGetConvolutionFilterEXT void __stdcall GLee_Lazy_glGetConvolutionFilterEXT(GLenum target, GLenum format, GLenum type, GLvoid * image) {if (GLeeInit()) glGetConvolutionFilterEXT(target, format, type, image);} GLEEPFNGLGETCONVOLUTIONFILTEREXTPROC GLeeFuncPtr_glGetConvolutionFilterEXT=GLee_Lazy_glGetConvolutionFilterEXT; #endif #ifndef GLEE_C_DEFINED_glGetConvolutionParameterfvEXT #define GLEE_C_DEFINED_glGetConvolutionParameterfvEXT void __stdcall GLee_Lazy_glGetConvolutionParameterfvEXT(GLenum target, GLenum pname, GLfloat * params) {if (GLeeInit()) glGetConvolutionParameterfvEXT(target, pname, params);} GLEEPFNGLGETCONVOLUTIONPARAMETERFVEXTPROC GLeeFuncPtr_glGetConvolutionParameterfvEXT=GLee_Lazy_glGetConvolutionParameterfvEXT; #endif #ifndef GLEE_C_DEFINED_glGetConvolutionParameterivEXT #define GLEE_C_DEFINED_glGetConvolutionParameterivEXT void __stdcall GLee_Lazy_glGetConvolutionParameterivEXT(GLenum target, GLenum pname, GLint * params) {if (GLeeInit()) glGetConvolutionParameterivEXT(target, pname, params);} GLEEPFNGLGETCONVOLUTIONPARAMETERIVEXTPROC GLeeFuncPtr_glGetConvolutionParameterivEXT=GLee_Lazy_glGetConvolutionParameterivEXT; #endif #ifndef GLEE_C_DEFINED_glGetSeparableFilterEXT #define GLEE_C_DEFINED_glGetSeparableFilterEXT void __stdcall GLee_Lazy_glGetSeparableFilterEXT(GLenum target, GLenum format, GLenum type, GLvoid * row, GLvoid * column, GLvoid * span) {if (GLeeInit()) glGetSeparableFilterEXT(target, format, type, row, column, span);} GLEEPFNGLGETSEPARABLEFILTEREXTPROC GLeeFuncPtr_glGetSeparableFilterEXT=GLee_Lazy_glGetSeparableFilterEXT; #endif #ifndef GLEE_C_DEFINED_glSeparableFilter2DEXT #define GLEE_C_DEFINED_glSeparableFilter2DEXT void __stdcall GLee_Lazy_glSeparableFilter2DEXT(GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * row, const GLvoid * column) {if (GLeeInit()) glSeparableFilter2DEXT(target, internalformat, width, height, format, type, row, column);} GLEEPFNGLSEPARABLEFILTER2DEXTPROC GLeeFuncPtr_glSeparableFilter2DEXT=GLee_Lazy_glSeparableFilter2DEXT; #endif #endif /* GL_SGI_color_matrix */ #ifdef __GLEE_GL_SGI_color_matrix #endif /* GL_SGI_color_table */ #ifdef __GLEE_GL_SGI_color_table #ifndef GLEE_C_DEFINED_glColorTableSGI #define GLEE_C_DEFINED_glColorTableSGI void __stdcall GLee_Lazy_glColorTableSGI(GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid * table) {if (GLeeInit()) glColorTableSGI(target, internalformat, width, format, type, table);} GLEEPFNGLCOLORTABLESGIPROC GLeeFuncPtr_glColorTableSGI=GLee_Lazy_glColorTableSGI; #endif #ifndef GLEE_C_DEFINED_glColorTableParameterfvSGI #define GLEE_C_DEFINED_glColorTableParameterfvSGI void __stdcall GLee_Lazy_glColorTableParameterfvSGI(GLenum target, GLenum pname, const GLfloat * params) {if (GLeeInit()) glColorTableParameterfvSGI(target, pname, params);} GLEEPFNGLCOLORTABLEPARAMETERFVSGIPROC GLeeFuncPtr_glColorTableParameterfvSGI=GLee_Lazy_glColorTableParameterfvSGI; #endif #ifndef GLEE_C_DEFINED_glColorTableParameterivSGI #define GLEE_C_DEFINED_glColorTableParameterivSGI void __stdcall GLee_Lazy_glColorTableParameterivSGI(GLenum target, GLenum pname, const GLint * params) {if (GLeeInit()) glColorTableParameterivSGI(target, pname, params);} GLEEPFNGLCOLORTABLEPARAMETERIVSGIPROC GLeeFuncPtr_glColorTableParameterivSGI=GLee_Lazy_glColorTableParameterivSGI; #endif #ifndef GLEE_C_DEFINED_glCopyColorTableSGI #define GLEE_C_DEFINED_glCopyColorTableSGI void __stdcall GLee_Lazy_glCopyColorTableSGI(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width) {if (GLeeInit()) glCopyColorTableSGI(target, internalformat, x, y, width);} GLEEPFNGLCOPYCOLORTABLESGIPROC GLeeFuncPtr_glCopyColorTableSGI=GLee_Lazy_glCopyColorTableSGI; #endif #ifndef GLEE_C_DEFINED_glGetColorTableSGI #define GLEE_C_DEFINED_glGetColorTableSGI void __stdcall GLee_Lazy_glGetColorTableSGI(GLenum target, GLenum format, GLenum type, GLvoid * table) {if (GLeeInit()) glGetColorTableSGI(target, format, type, table);} GLEEPFNGLGETCOLORTABLESGIPROC GLeeFuncPtr_glGetColorTableSGI=GLee_Lazy_glGetColorTableSGI; #endif #ifndef GLEE_C_DEFINED_glGetColorTableParameterfvSGI #define GLEE_C_DEFINED_glGetColorTableParameterfvSGI void __stdcall GLee_Lazy_glGetColorTableParameterfvSGI(GLenum target, GLenum pname, GLfloat * params) {if (GLeeInit()) glGetColorTableParameterfvSGI(target, pname, params);} GLEEPFNGLGETCOLORTABLEPARAMETERFVSGIPROC GLeeFuncPtr_glGetColorTableParameterfvSGI=GLee_Lazy_glGetColorTableParameterfvSGI; #endif #ifndef GLEE_C_DEFINED_glGetColorTableParameterivSGI #define GLEE_C_DEFINED_glGetColorTableParameterivSGI void __stdcall GLee_Lazy_glGetColorTableParameterivSGI(GLenum target, GLenum pname, GLint * params) {if (GLeeInit()) glGetColorTableParameterivSGI(target, pname, params);} GLEEPFNGLGETCOLORTABLEPARAMETERIVSGIPROC GLeeFuncPtr_glGetColorTableParameterivSGI=GLee_Lazy_glGetColorTableParameterivSGI; #endif #endif /* GL_SGIS_pixel_texture */ #ifdef __GLEE_GL_SGIS_pixel_texture #ifndef GLEE_C_DEFINED_glPixelTexGenParameteriSGIS #define GLEE_C_DEFINED_glPixelTexGenParameteriSGIS void __stdcall GLee_Lazy_glPixelTexGenParameteriSGIS(GLenum pname, GLint param) {if (GLeeInit()) glPixelTexGenParameteriSGIS(pname, param);} GLEEPFNGLPIXELTEXGENPARAMETERISGISPROC GLeeFuncPtr_glPixelTexGenParameteriSGIS=GLee_Lazy_glPixelTexGenParameteriSGIS; #endif #ifndef GLEE_C_DEFINED_glPixelTexGenParameterivSGIS #define GLEE_C_DEFINED_glPixelTexGenParameterivSGIS void __stdcall GLee_Lazy_glPixelTexGenParameterivSGIS(GLenum pname, const GLint * params) {if (GLeeInit()) glPixelTexGenParameterivSGIS(pname, params);} GLEEPFNGLPIXELTEXGENPARAMETERIVSGISPROC GLeeFuncPtr_glPixelTexGenParameterivSGIS=GLee_Lazy_glPixelTexGenParameterivSGIS; #endif #ifndef GLEE_C_DEFINED_glPixelTexGenParameterfSGIS #define GLEE_C_DEFINED_glPixelTexGenParameterfSGIS void __stdcall GLee_Lazy_glPixelTexGenParameterfSGIS(GLenum pname, GLfloat param) {if (GLeeInit()) glPixelTexGenParameterfSGIS(pname, param);} GLEEPFNGLPIXELTEXGENPARAMETERFSGISPROC GLeeFuncPtr_glPixelTexGenParameterfSGIS=GLee_Lazy_glPixelTexGenParameterfSGIS; #endif #ifndef GLEE_C_DEFINED_glPixelTexGenParameterfvSGIS #define GLEE_C_DEFINED_glPixelTexGenParameterfvSGIS void __stdcall GLee_Lazy_glPixelTexGenParameterfvSGIS(GLenum pname, const GLfloat * params) {if (GLeeInit()) glPixelTexGenParameterfvSGIS(pname, params);} GLEEPFNGLPIXELTEXGENPARAMETERFVSGISPROC GLeeFuncPtr_glPixelTexGenParameterfvSGIS=GLee_Lazy_glPixelTexGenParameterfvSGIS; #endif #ifndef GLEE_C_DEFINED_glGetPixelTexGenParameterivSGIS #define GLEE_C_DEFINED_glGetPixelTexGenParameterivSGIS void __stdcall GLee_Lazy_glGetPixelTexGenParameterivSGIS(GLenum pname, GLint * params) {if (GLeeInit()) glGetPixelTexGenParameterivSGIS(pname, params);} GLEEPFNGLGETPIXELTEXGENPARAMETERIVSGISPROC GLeeFuncPtr_glGetPixelTexGenParameterivSGIS=GLee_Lazy_glGetPixelTexGenParameterivSGIS; #endif #ifndef GLEE_C_DEFINED_glGetPixelTexGenParameterfvSGIS #define GLEE_C_DEFINED_glGetPixelTexGenParameterfvSGIS void __stdcall GLee_Lazy_glGetPixelTexGenParameterfvSGIS(GLenum pname, GLfloat * params) {if (GLeeInit()) glGetPixelTexGenParameterfvSGIS(pname, params);} GLEEPFNGLGETPIXELTEXGENPARAMETERFVSGISPROC GLeeFuncPtr_glGetPixelTexGenParameterfvSGIS=GLee_Lazy_glGetPixelTexGenParameterfvSGIS; #endif #endif /* GL_SGIX_pixel_texture */ #ifdef __GLEE_GL_SGIX_pixel_texture #ifndef GLEE_C_DEFINED_glPixelTexGenSGIX #define GLEE_C_DEFINED_glPixelTexGenSGIX void __stdcall GLee_Lazy_glPixelTexGenSGIX(GLenum mode) {if (GLeeInit()) glPixelTexGenSGIX(mode);} GLEEPFNGLPIXELTEXGENSGIXPROC GLeeFuncPtr_glPixelTexGenSGIX=GLee_Lazy_glPixelTexGenSGIX; #endif #endif /* GL_SGIS_texture4D */ #ifdef __GLEE_GL_SGIS_texture4D #ifndef GLEE_C_DEFINED_glTexImage4DSGIS #define GLEE_C_DEFINED_glTexImage4DSGIS void __stdcall GLee_Lazy_glTexImage4DSGIS(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const GLvoid * pixels) {if (GLeeInit()) glTexImage4DSGIS(target, level, internalformat, width, height, depth, size4d, border, format, type, pixels);} GLEEPFNGLTEXIMAGE4DSGISPROC GLeeFuncPtr_glTexImage4DSGIS=GLee_Lazy_glTexImage4DSGIS; #endif #ifndef GLEE_C_DEFINED_glTexSubImage4DSGIS #define GLEE_C_DEFINED_glTexSubImage4DSGIS void __stdcall GLee_Lazy_glTexSubImage4DSGIS(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLenum format, GLenum type, const GLvoid * pixels) {if (GLeeInit()) glTexSubImage4DSGIS(target, level, xoffset, yoffset, zoffset, woffset, width, height, depth, size4d, format, type, pixels);} GLEEPFNGLTEXSUBIMAGE4DSGISPROC GLeeFuncPtr_glTexSubImage4DSGIS=GLee_Lazy_glTexSubImage4DSGIS; #endif #endif /* GL_SGI_texture_color_table */ #ifdef __GLEE_GL_SGI_texture_color_table #endif /* GL_EXT_cmyka */ #ifdef __GLEE_GL_EXT_cmyka #endif /* GL_EXT_texture_object */ #ifdef __GLEE_GL_EXT_texture_object #ifndef GLEE_C_DEFINED_glAreTexturesResidentEXT #define GLEE_C_DEFINED_glAreTexturesResidentEXT GLboolean __stdcall GLee_Lazy_glAreTexturesResidentEXT(GLsizei n, const GLuint * textures, GLboolean * residences) {if (GLeeInit()) return glAreTexturesResidentEXT(n, textures, residences); return (GLboolean)0;} GLEEPFNGLARETEXTURESRESIDENTEXTPROC GLeeFuncPtr_glAreTexturesResidentEXT=GLee_Lazy_glAreTexturesResidentEXT; #endif #ifndef GLEE_C_DEFINED_glBindTextureEXT #define GLEE_C_DEFINED_glBindTextureEXT void __stdcall GLee_Lazy_glBindTextureEXT(GLenum target, GLuint texture) {if (GLeeInit()) glBindTextureEXT(target, texture);} GLEEPFNGLBINDTEXTUREEXTPROC GLeeFuncPtr_glBindTextureEXT=GLee_Lazy_glBindTextureEXT; #endif #ifndef GLEE_C_DEFINED_glDeleteTexturesEXT #define GLEE_C_DEFINED_glDeleteTexturesEXT void __stdcall GLee_Lazy_glDeleteTexturesEXT(GLsizei n, const GLuint * textures) {if (GLeeInit()) glDeleteTexturesEXT(n, textures);} GLEEPFNGLDELETETEXTURESEXTPROC GLeeFuncPtr_glDeleteTexturesEXT=GLee_Lazy_glDeleteTexturesEXT; #endif #ifndef GLEE_C_DEFINED_glGenTexturesEXT #define GLEE_C_DEFINED_glGenTexturesEXT void __stdcall GLee_Lazy_glGenTexturesEXT(GLsizei n, GLuint * textures) {if (GLeeInit()) glGenTexturesEXT(n, textures);} GLEEPFNGLGENTEXTURESEXTPROC GLeeFuncPtr_glGenTexturesEXT=GLee_Lazy_glGenTexturesEXT; #endif #ifndef GLEE_C_DEFINED_glIsTextureEXT #define GLEE_C_DEFINED_glIsTextureEXT GLboolean __stdcall GLee_Lazy_glIsTextureEXT(GLuint texture) {if (GLeeInit()) return glIsTextureEXT(texture); return (GLboolean)0;} GLEEPFNGLISTEXTUREEXTPROC GLeeFuncPtr_glIsTextureEXT=GLee_Lazy_glIsTextureEXT; #endif #ifndef GLEE_C_DEFINED_glPrioritizeTexturesEXT #define GLEE_C_DEFINED_glPrioritizeTexturesEXT void __stdcall GLee_Lazy_glPrioritizeTexturesEXT(GLsizei n, const GLuint * textures, const GLclampf * priorities) {if (GLeeInit()) glPrioritizeTexturesEXT(n, textures, priorities);} GLEEPFNGLPRIORITIZETEXTURESEXTPROC GLeeFuncPtr_glPrioritizeTexturesEXT=GLee_Lazy_glPrioritizeTexturesEXT; #endif #endif /* GL_SGIS_detail_texture */ #ifdef __GLEE_GL_SGIS_detail_texture #ifndef GLEE_C_DEFINED_glDetailTexFuncSGIS #define GLEE_C_DEFINED_glDetailTexFuncSGIS void __stdcall GLee_Lazy_glDetailTexFuncSGIS(GLenum target, GLsizei n, const GLfloat * points) {if (GLeeInit()) glDetailTexFuncSGIS(target, n, points);} GLEEPFNGLDETAILTEXFUNCSGISPROC GLeeFuncPtr_glDetailTexFuncSGIS=GLee_Lazy_glDetailTexFuncSGIS; #endif #ifndef GLEE_C_DEFINED_glGetDetailTexFuncSGIS #define GLEE_C_DEFINED_glGetDetailTexFuncSGIS void __stdcall GLee_Lazy_glGetDetailTexFuncSGIS(GLenum target, GLfloat * points) {if (GLeeInit()) glGetDetailTexFuncSGIS(target, points);} GLEEPFNGLGETDETAILTEXFUNCSGISPROC GLeeFuncPtr_glGetDetailTexFuncSGIS=GLee_Lazy_glGetDetailTexFuncSGIS; #endif #endif /* GL_SGIS_sharpen_texture */ #ifdef __GLEE_GL_SGIS_sharpen_texture #ifndef GLEE_C_DEFINED_glSharpenTexFuncSGIS #define GLEE_C_DEFINED_glSharpenTexFuncSGIS void __stdcall GLee_Lazy_glSharpenTexFuncSGIS(GLenum target, GLsizei n, const GLfloat * points) {if (GLeeInit()) glSharpenTexFuncSGIS(target, n, points);} GLEEPFNGLSHARPENTEXFUNCSGISPROC GLeeFuncPtr_glSharpenTexFuncSGIS=GLee_Lazy_glSharpenTexFuncSGIS; #endif #ifndef GLEE_C_DEFINED_glGetSharpenTexFuncSGIS #define GLEE_C_DEFINED_glGetSharpenTexFuncSGIS void __stdcall GLee_Lazy_glGetSharpenTexFuncSGIS(GLenum target, GLfloat * points) {if (GLeeInit()) glGetSharpenTexFuncSGIS(target, points);} GLEEPFNGLGETSHARPENTEXFUNCSGISPROC GLeeFuncPtr_glGetSharpenTexFuncSGIS=GLee_Lazy_glGetSharpenTexFuncSGIS; #endif #endif /* GL_EXT_packed_pixels */ #ifdef __GLEE_GL_EXT_packed_pixels #endif /* GL_SGIS_texture_lod */ #ifdef __GLEE_GL_SGIS_texture_lod #endif /* GL_SGIS_multisample */ #ifdef __GLEE_GL_SGIS_multisample #ifndef GLEE_C_DEFINED_glSampleMaskSGIS #define GLEE_C_DEFINED_glSampleMaskSGIS void __stdcall GLee_Lazy_glSampleMaskSGIS(GLclampf value, GLboolean invert) {if (GLeeInit()) glSampleMaskSGIS(value, invert);} GLEEPFNGLSAMPLEMASKSGISPROC GLeeFuncPtr_glSampleMaskSGIS=GLee_Lazy_glSampleMaskSGIS; #endif #ifndef GLEE_C_DEFINED_glSamplePatternSGIS #define GLEE_C_DEFINED_glSamplePatternSGIS void __stdcall GLee_Lazy_glSamplePatternSGIS(GLenum pattern) {if (GLeeInit()) glSamplePatternSGIS(pattern);} GLEEPFNGLSAMPLEPATTERNSGISPROC GLeeFuncPtr_glSamplePatternSGIS=GLee_Lazy_glSamplePatternSGIS; #endif #endif /* GL_EXT_rescale_normal */ #ifdef __GLEE_GL_EXT_rescale_normal #endif /* GL_EXT_vertex_array */ #ifdef __GLEE_GL_EXT_vertex_array #ifndef GLEE_C_DEFINED_glArrayElementEXT #define GLEE_C_DEFINED_glArrayElementEXT void __stdcall GLee_Lazy_glArrayElementEXT(GLint i) {if (GLeeInit()) glArrayElementEXT(i);} GLEEPFNGLARRAYELEMENTEXTPROC GLeeFuncPtr_glArrayElementEXT=GLee_Lazy_glArrayElementEXT; #endif #ifndef GLEE_C_DEFINED_glColorPointerEXT #define GLEE_C_DEFINED_glColorPointerEXT void __stdcall GLee_Lazy_glColorPointerEXT(GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer) {if (GLeeInit()) glColorPointerEXT(size, type, stride, count, pointer);} GLEEPFNGLCOLORPOINTEREXTPROC GLeeFuncPtr_glColorPointerEXT=GLee_Lazy_glColorPointerEXT; #endif #ifndef GLEE_C_DEFINED_glDrawArraysEXT #define GLEE_C_DEFINED_glDrawArraysEXT void __stdcall GLee_Lazy_glDrawArraysEXT(GLenum mode, GLint first, GLsizei count) {if (GLeeInit()) glDrawArraysEXT(mode, first, count);} GLEEPFNGLDRAWARRAYSEXTPROC GLeeFuncPtr_glDrawArraysEXT=GLee_Lazy_glDrawArraysEXT; #endif #ifndef GLEE_C_DEFINED_glEdgeFlagPointerEXT #define GLEE_C_DEFINED_glEdgeFlagPointerEXT void __stdcall GLee_Lazy_glEdgeFlagPointerEXT(GLsizei stride, GLsizei count, const GLboolean * pointer) {if (GLeeInit()) glEdgeFlagPointerEXT(stride, count, pointer);} GLEEPFNGLEDGEFLAGPOINTEREXTPROC GLeeFuncPtr_glEdgeFlagPointerEXT=GLee_Lazy_glEdgeFlagPointerEXT; #endif #ifndef GLEE_C_DEFINED_glGetPointervEXT #define GLEE_C_DEFINED_glGetPointervEXT void __stdcall GLee_Lazy_glGetPointervEXT(GLenum pname, GLvoid* * params) {if (GLeeInit()) glGetPointervEXT(pname, params);} GLEEPFNGLGETPOINTERVEXTPROC GLeeFuncPtr_glGetPointervEXT=GLee_Lazy_glGetPointervEXT; #endif #ifndef GLEE_C_DEFINED_glIndexPointerEXT #define GLEE_C_DEFINED_glIndexPointerEXT void __stdcall GLee_Lazy_glIndexPointerEXT(GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer) {if (GLeeInit()) glIndexPointerEXT(type, stride, count, pointer);} GLEEPFNGLINDEXPOINTEREXTPROC GLeeFuncPtr_glIndexPointerEXT=GLee_Lazy_glIndexPointerEXT; #endif #ifndef GLEE_C_DEFINED_glNormalPointerEXT #define GLEE_C_DEFINED_glNormalPointerEXT void __stdcall GLee_Lazy_glNormalPointerEXT(GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer) {if (GLeeInit()) glNormalPointerEXT(type, stride, count, pointer);} GLEEPFNGLNORMALPOINTEREXTPROC GLeeFuncPtr_glNormalPointerEXT=GLee_Lazy_glNormalPointerEXT; #endif #ifndef GLEE_C_DEFINED_glTexCoordPointerEXT #define GLEE_C_DEFINED_glTexCoordPointerEXT void __stdcall GLee_Lazy_glTexCoordPointerEXT(GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer) {if (GLeeInit()) glTexCoordPointerEXT(size, type, stride, count, pointer);} GLEEPFNGLTEXCOORDPOINTEREXTPROC GLeeFuncPtr_glTexCoordPointerEXT=GLee_Lazy_glTexCoordPointerEXT; #endif #ifndef GLEE_C_DEFINED_glVertexPointerEXT #define GLEE_C_DEFINED_glVertexPointerEXT void __stdcall GLee_Lazy_glVertexPointerEXT(GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer) {if (GLeeInit()) glVertexPointerEXT(size, type, stride, count, pointer);} GLEEPFNGLVERTEXPOINTEREXTPROC GLeeFuncPtr_glVertexPointerEXT=GLee_Lazy_glVertexPointerEXT; #endif #endif /* GL_EXT_misc_attribute */ #ifdef __GLEE_GL_EXT_misc_attribute #endif /* GL_SGIS_generate_mipmap */ #ifdef __GLEE_GL_SGIS_generate_mipmap #endif /* GL_SGIX_clipmap */ #ifdef __GLEE_GL_SGIX_clipmap #endif /* GL_SGIX_shadow */ #ifdef __GLEE_GL_SGIX_shadow #endif /* GL_SGIS_texture_edge_clamp */ #ifdef __GLEE_GL_SGIS_texture_edge_clamp #endif /* GL_SGIS_texture_border_clamp */ #ifdef __GLEE_GL_SGIS_texture_border_clamp #endif /* GL_EXT_blend_minmax */ #ifdef __GLEE_GL_EXT_blend_minmax #ifndef GLEE_C_DEFINED_glBlendEquationEXT #define GLEE_C_DEFINED_glBlendEquationEXT void __stdcall GLee_Lazy_glBlendEquationEXT(GLenum mode) {if (GLeeInit()) glBlendEquationEXT(mode);} GLEEPFNGLBLENDEQUATIONEXTPROC GLeeFuncPtr_glBlendEquationEXT=GLee_Lazy_glBlendEquationEXT; #endif #endif /* GL_EXT_blend_subtract */ #ifdef __GLEE_GL_EXT_blend_subtract #endif /* GL_EXT_blend_logic_op */ #ifdef __GLEE_GL_EXT_blend_logic_op #endif /* GL_SGIX_interlace */ #ifdef __GLEE_GL_SGIX_interlace #endif /* GL_SGIX_pixel_tiles */ #ifdef __GLEE_GL_SGIX_pixel_tiles #endif /* GL_SGIS_texture_select */ #ifdef __GLEE_GL_SGIS_texture_select #endif /* GL_SGIX_sprite */ #ifdef __GLEE_GL_SGIX_sprite #ifndef GLEE_C_DEFINED_glSpriteParameterfSGIX #define GLEE_C_DEFINED_glSpriteParameterfSGIX void __stdcall GLee_Lazy_glSpriteParameterfSGIX(GLenum pname, GLfloat param) {if (GLeeInit()) glSpriteParameterfSGIX(pname, param);} GLEEPFNGLSPRITEPARAMETERFSGIXPROC GLeeFuncPtr_glSpriteParameterfSGIX=GLee_Lazy_glSpriteParameterfSGIX; #endif #ifndef GLEE_C_DEFINED_glSpriteParameterfvSGIX #define GLEE_C_DEFINED_glSpriteParameterfvSGIX void __stdcall GLee_Lazy_glSpriteParameterfvSGIX(GLenum pname, const GLfloat * params) {if (GLeeInit()) glSpriteParameterfvSGIX(pname, params);} GLEEPFNGLSPRITEPARAMETERFVSGIXPROC GLeeFuncPtr_glSpriteParameterfvSGIX=GLee_Lazy_glSpriteParameterfvSGIX; #endif #ifndef GLEE_C_DEFINED_glSpriteParameteriSGIX #define GLEE_C_DEFINED_glSpriteParameteriSGIX void __stdcall GLee_Lazy_glSpriteParameteriSGIX(GLenum pname, GLint param) {if (GLeeInit()) glSpriteParameteriSGIX(pname, param);} GLEEPFNGLSPRITEPARAMETERISGIXPROC GLeeFuncPtr_glSpriteParameteriSGIX=GLee_Lazy_glSpriteParameteriSGIX; #endif #ifndef GLEE_C_DEFINED_glSpriteParameterivSGIX #define GLEE_C_DEFINED_glSpriteParameterivSGIX void __stdcall GLee_Lazy_glSpriteParameterivSGIX(GLenum pname, const GLint * params) {if (GLeeInit()) glSpriteParameterivSGIX(pname, params);} GLEEPFNGLSPRITEPARAMETERIVSGIXPROC GLeeFuncPtr_glSpriteParameterivSGIX=GLee_Lazy_glSpriteParameterivSGIX; #endif #endif /* GL_SGIX_texture_multi_buffer */ #ifdef __GLEE_GL_SGIX_texture_multi_buffer #endif /* GL_EXT_point_parameters */ #ifdef __GLEE_GL_EXT_point_parameters #ifndef GLEE_C_DEFINED_glPointParameterfEXT #define GLEE_C_DEFINED_glPointParameterfEXT void __stdcall GLee_Lazy_glPointParameterfEXT(GLenum pname, GLfloat param) {if (GLeeInit()) glPointParameterfEXT(pname, param);} GLEEPFNGLPOINTPARAMETERFEXTPROC GLeeFuncPtr_glPointParameterfEXT=GLee_Lazy_glPointParameterfEXT; #endif #ifndef GLEE_C_DEFINED_glPointParameterfvEXT #define GLEE_C_DEFINED_glPointParameterfvEXT void __stdcall GLee_Lazy_glPointParameterfvEXT(GLenum pname, const GLfloat * params) {if (GLeeInit()) glPointParameterfvEXT(pname, params);} GLEEPFNGLPOINTPARAMETERFVEXTPROC GLeeFuncPtr_glPointParameterfvEXT=GLee_Lazy_glPointParameterfvEXT; #endif #endif /* GL_SGIS_point_parameters */ #ifdef __GLEE_GL_SGIS_point_parameters #ifndef GLEE_C_DEFINED_glPointParameterfSGIS #define GLEE_C_DEFINED_glPointParameterfSGIS void __stdcall GLee_Lazy_glPointParameterfSGIS(GLenum pname, GLfloat param) {if (GLeeInit()) glPointParameterfSGIS(pname, param);} GLEEPFNGLPOINTPARAMETERFSGISPROC GLeeFuncPtr_glPointParameterfSGIS=GLee_Lazy_glPointParameterfSGIS; #endif #ifndef GLEE_C_DEFINED_glPointParameterfvSGIS #define GLEE_C_DEFINED_glPointParameterfvSGIS void __stdcall GLee_Lazy_glPointParameterfvSGIS(GLenum pname, const GLfloat * params) {if (GLeeInit()) glPointParameterfvSGIS(pname, params);} GLEEPFNGLPOINTPARAMETERFVSGISPROC GLeeFuncPtr_glPointParameterfvSGIS=GLee_Lazy_glPointParameterfvSGIS; #endif #endif /* GL_SGIX_instruments */ #ifdef __GLEE_GL_SGIX_instruments #ifndef GLEE_C_DEFINED_glGetInstrumentsSGIX #define GLEE_C_DEFINED_glGetInstrumentsSGIX GLint __stdcall GLee_Lazy_glGetInstrumentsSGIX(void) {if (GLeeInit()) return glGetInstrumentsSGIX(); return (GLint)0;} GLEEPFNGLGETINSTRUMENTSSGIXPROC GLeeFuncPtr_glGetInstrumentsSGIX=GLee_Lazy_glGetInstrumentsSGIX; #endif #ifndef GLEE_C_DEFINED_glInstrumentsBufferSGIX #define GLEE_C_DEFINED_glInstrumentsBufferSGIX void __stdcall GLee_Lazy_glInstrumentsBufferSGIX(GLsizei size, GLint * buffer) {if (GLeeInit()) glInstrumentsBufferSGIX(size, buffer);} GLEEPFNGLINSTRUMENTSBUFFERSGIXPROC GLeeFuncPtr_glInstrumentsBufferSGIX=GLee_Lazy_glInstrumentsBufferSGIX; #endif #ifndef GLEE_C_DEFINED_glPollInstrumentsSGIX #define GLEE_C_DEFINED_glPollInstrumentsSGIX GLint __stdcall GLee_Lazy_glPollInstrumentsSGIX(GLint * marker_p) {if (GLeeInit()) return glPollInstrumentsSGIX(marker_p); return (GLint)0;} GLEEPFNGLPOLLINSTRUMENTSSGIXPROC GLeeFuncPtr_glPollInstrumentsSGIX=GLee_Lazy_glPollInstrumentsSGIX; #endif #ifndef GLEE_C_DEFINED_glReadInstrumentsSGIX #define GLEE_C_DEFINED_glReadInstrumentsSGIX void __stdcall GLee_Lazy_glReadInstrumentsSGIX(GLint marker) {if (GLeeInit()) glReadInstrumentsSGIX(marker);} GLEEPFNGLREADINSTRUMENTSSGIXPROC GLeeFuncPtr_glReadInstrumentsSGIX=GLee_Lazy_glReadInstrumentsSGIX; #endif #ifndef GLEE_C_DEFINED_glStartInstrumentsSGIX #define GLEE_C_DEFINED_glStartInstrumentsSGIX void __stdcall GLee_Lazy_glStartInstrumentsSGIX(void) {if (GLeeInit()) glStartInstrumentsSGIX();} GLEEPFNGLSTARTINSTRUMENTSSGIXPROC GLeeFuncPtr_glStartInstrumentsSGIX=GLee_Lazy_glStartInstrumentsSGIX; #endif #ifndef GLEE_C_DEFINED_glStopInstrumentsSGIX #define GLEE_C_DEFINED_glStopInstrumentsSGIX void __stdcall GLee_Lazy_glStopInstrumentsSGIX(GLint marker) {if (GLeeInit()) glStopInstrumentsSGIX(marker);} GLEEPFNGLSTOPINSTRUMENTSSGIXPROC GLeeFuncPtr_glStopInstrumentsSGIX=GLee_Lazy_glStopInstrumentsSGIX; #endif #endif /* GL_SGIX_texture_scale_bias */ #ifdef __GLEE_GL_SGIX_texture_scale_bias #endif /* GL_SGIX_framezoom */ #ifdef __GLEE_GL_SGIX_framezoom #ifndef GLEE_C_DEFINED_glFrameZoomSGIX #define GLEE_C_DEFINED_glFrameZoomSGIX void __stdcall GLee_Lazy_glFrameZoomSGIX(GLint factor) {if (GLeeInit()) glFrameZoomSGIX(factor);} GLEEPFNGLFRAMEZOOMSGIXPROC GLeeFuncPtr_glFrameZoomSGIX=GLee_Lazy_glFrameZoomSGIX; #endif #endif /* GL_SGIX_tag_sample_buffer */ #ifdef __GLEE_GL_SGIX_tag_sample_buffer #ifndef GLEE_C_DEFINED_glTagSampleBufferSGIX #define GLEE_C_DEFINED_glTagSampleBufferSGIX void __stdcall GLee_Lazy_glTagSampleBufferSGIX(void) {if (GLeeInit()) glTagSampleBufferSGIX();} GLEEPFNGLTAGSAMPLEBUFFERSGIXPROC GLeeFuncPtr_glTagSampleBufferSGIX=GLee_Lazy_glTagSampleBufferSGIX; #endif #endif /* GL_FfdMaskSGIX */ #ifdef __GLEE_GL_FfdMaskSGIX #endif /* GL_SGIX_polynomial_ffd */ #ifdef __GLEE_GL_SGIX_polynomial_ffd #ifndef GLEE_C_DEFINED_glDeformationMap3dSGIX #define GLEE_C_DEFINED_glDeformationMap3dSGIX void __stdcall GLee_Lazy_glDeformationMap3dSGIX(GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, GLdouble w1, GLdouble w2, GLint wstride, GLint worder, const GLdouble * points) {if (GLeeInit()) glDeformationMap3dSGIX(target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, w1, w2, wstride, worder, points);} GLEEPFNGLDEFORMATIONMAP3DSGIXPROC GLeeFuncPtr_glDeformationMap3dSGIX=GLee_Lazy_glDeformationMap3dSGIX; #endif #ifndef GLEE_C_DEFINED_glDeformationMap3fSGIX #define GLEE_C_DEFINED_glDeformationMap3fSGIX void __stdcall GLee_Lazy_glDeformationMap3fSGIX(GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, GLfloat w1, GLfloat w2, GLint wstride, GLint worder, const GLfloat * points) {if (GLeeInit()) glDeformationMap3fSGIX(target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, w1, w2, wstride, worder, points);} GLEEPFNGLDEFORMATIONMAP3FSGIXPROC GLeeFuncPtr_glDeformationMap3fSGIX=GLee_Lazy_glDeformationMap3fSGIX; #endif #ifndef GLEE_C_DEFINED_glDeformSGIX #define GLEE_C_DEFINED_glDeformSGIX void __stdcall GLee_Lazy_glDeformSGIX(GLbitfield mask) {if (GLeeInit()) glDeformSGIX(mask);} GLEEPFNGLDEFORMSGIXPROC GLeeFuncPtr_glDeformSGIX=GLee_Lazy_glDeformSGIX; #endif #ifndef GLEE_C_DEFINED_glLoadIdentityDeformationMapSGIX #define GLEE_C_DEFINED_glLoadIdentityDeformationMapSGIX void __stdcall GLee_Lazy_glLoadIdentityDeformationMapSGIX(GLbitfield mask) {if (GLeeInit()) glLoadIdentityDeformationMapSGIX(mask);} GLEEPFNGLLOADIDENTITYDEFORMATIONMAPSGIXPROC GLeeFuncPtr_glLoadIdentityDeformationMapSGIX=GLee_Lazy_glLoadIdentityDeformationMapSGIX; #endif #endif /* GL_SGIX_reference_plane */ #ifdef __GLEE_GL_SGIX_reference_plane #ifndef GLEE_C_DEFINED_glReferencePlaneSGIX #define GLEE_C_DEFINED_glReferencePlaneSGIX void __stdcall GLee_Lazy_glReferencePlaneSGIX(const GLdouble * equation) {if (GLeeInit()) glReferencePlaneSGIX(equation);} GLEEPFNGLREFERENCEPLANESGIXPROC GLeeFuncPtr_glReferencePlaneSGIX=GLee_Lazy_glReferencePlaneSGIX; #endif #endif /* GL_SGIX_flush_raster */ #ifdef __GLEE_GL_SGIX_flush_raster #ifndef GLEE_C_DEFINED_glFlushRasterSGIX #define GLEE_C_DEFINED_glFlushRasterSGIX void __stdcall GLee_Lazy_glFlushRasterSGIX(void) {if (GLeeInit()) glFlushRasterSGIX();} GLEEPFNGLFLUSHRASTERSGIXPROC GLeeFuncPtr_glFlushRasterSGIX=GLee_Lazy_glFlushRasterSGIX; #endif #endif /* GL_SGIX_depth_texture */ #ifdef __GLEE_GL_SGIX_depth_texture #endif /* GL_SGIS_fog_function */ #ifdef __GLEE_GL_SGIS_fog_function #ifndef GLEE_C_DEFINED_glFogFuncSGIS #define GLEE_C_DEFINED_glFogFuncSGIS void __stdcall GLee_Lazy_glFogFuncSGIS(GLsizei n, const GLfloat * points) {if (GLeeInit()) glFogFuncSGIS(n, points);} GLEEPFNGLFOGFUNCSGISPROC GLeeFuncPtr_glFogFuncSGIS=GLee_Lazy_glFogFuncSGIS; #endif #ifndef GLEE_C_DEFINED_glGetFogFuncSGIS #define GLEE_C_DEFINED_glGetFogFuncSGIS void __stdcall GLee_Lazy_glGetFogFuncSGIS(GLfloat * points) {if (GLeeInit()) glGetFogFuncSGIS(points);} GLEEPFNGLGETFOGFUNCSGISPROC GLeeFuncPtr_glGetFogFuncSGIS=GLee_Lazy_glGetFogFuncSGIS; #endif #endif /* GL_SGIX_fog_offset */ #ifdef __GLEE_GL_SGIX_fog_offset #endif /* GL_HP_image_transform */ #ifdef __GLEE_GL_HP_image_transform #ifndef GLEE_C_DEFINED_glImageTransformParameteriHP #define GLEE_C_DEFINED_glImageTransformParameteriHP void __stdcall GLee_Lazy_glImageTransformParameteriHP(GLenum target, GLenum pname, GLint param) {if (GLeeInit()) glImageTransformParameteriHP(target, pname, param);} GLEEPFNGLIMAGETRANSFORMPARAMETERIHPPROC GLeeFuncPtr_glImageTransformParameteriHP=GLee_Lazy_glImageTransformParameteriHP; #endif #ifndef GLEE_C_DEFINED_glImageTransformParameterfHP #define GLEE_C_DEFINED_glImageTransformParameterfHP void __stdcall GLee_Lazy_glImageTransformParameterfHP(GLenum target, GLenum pname, GLfloat param) {if (GLeeInit()) glImageTransformParameterfHP(target, pname, param);} GLEEPFNGLIMAGETRANSFORMPARAMETERFHPPROC GLeeFuncPtr_glImageTransformParameterfHP=GLee_Lazy_glImageTransformParameterfHP; #endif #ifndef GLEE_C_DEFINED_glImageTransformParameterivHP #define GLEE_C_DEFINED_glImageTransformParameterivHP void __stdcall GLee_Lazy_glImageTransformParameterivHP(GLenum target, GLenum pname, const GLint * params) {if (GLeeInit()) glImageTransformParameterivHP(target, pname, params);} GLEEPFNGLIMAGETRANSFORMPARAMETERIVHPPROC GLeeFuncPtr_glImageTransformParameterivHP=GLee_Lazy_glImageTransformParameterivHP; #endif #ifndef GLEE_C_DEFINED_glImageTransformParameterfvHP #define GLEE_C_DEFINED_glImageTransformParameterfvHP void __stdcall GLee_Lazy_glImageTransformParameterfvHP(GLenum target, GLenum pname, const GLfloat * params) {if (GLeeInit()) glImageTransformParameterfvHP(target, pname, params);} GLEEPFNGLIMAGETRANSFORMPARAMETERFVHPPROC GLeeFuncPtr_glImageTransformParameterfvHP=GLee_Lazy_glImageTransformParameterfvHP; #endif #ifndef GLEE_C_DEFINED_glGetImageTransformParameterivHP #define GLEE_C_DEFINED_glGetImageTransformParameterivHP void __stdcall GLee_Lazy_glGetImageTransformParameterivHP(GLenum target, GLenum pname, GLint * params) {if (GLeeInit()) glGetImageTransformParameterivHP(target, pname, params);} GLEEPFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC GLeeFuncPtr_glGetImageTransformParameterivHP=GLee_Lazy_glGetImageTransformParameterivHP; #endif #ifndef GLEE_C_DEFINED_glGetImageTransformParameterfvHP #define GLEE_C_DEFINED_glGetImageTransformParameterfvHP void __stdcall GLee_Lazy_glGetImageTransformParameterfvHP(GLenum target, GLenum pname, GLfloat * params) {if (GLeeInit()) glGetImageTransformParameterfvHP(target, pname, params);} GLEEPFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC GLeeFuncPtr_glGetImageTransformParameterfvHP=GLee_Lazy_glGetImageTransformParameterfvHP; #endif #endif /* GL_HP_convolution_border_modes */ #ifdef __GLEE_GL_HP_convolution_border_modes #endif /* GL_INGR_palette_buffer */ #ifdef __GLEE_GL_INGR_palette_buffer #endif /* GL_SGIX_texture_add_env */ #ifdef __GLEE_GL_SGIX_texture_add_env #endif /* GL_EXT_color_subtable */ #ifdef __GLEE_GL_EXT_color_subtable #ifndef GLEE_C_DEFINED_glColorSubTableEXT #define GLEE_C_DEFINED_glColorSubTableEXT void __stdcall GLee_Lazy_glColorSubTableEXT(GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid * data) {if (GLeeInit()) glColorSubTableEXT(target, start, count, format, type, data);} GLEEPFNGLCOLORSUBTABLEEXTPROC GLeeFuncPtr_glColorSubTableEXT=GLee_Lazy_glColorSubTableEXT; #endif #ifndef GLEE_C_DEFINED_glCopyColorSubTableEXT #define GLEE_C_DEFINED_glCopyColorSubTableEXT void __stdcall GLee_Lazy_glCopyColorSubTableEXT(GLenum target, GLsizei start, GLint x, GLint y, GLsizei width) {if (GLeeInit()) glCopyColorSubTableEXT(target, start, x, y, width);} GLEEPFNGLCOPYCOLORSUBTABLEEXTPROC GLeeFuncPtr_glCopyColorSubTableEXT=GLee_Lazy_glCopyColorSubTableEXT; #endif #endif /* GL_PGI_vertex_hints */ #ifdef __GLEE_GL_PGI_vertex_hints #endif /* GL_PGI_misc_hints */ #ifdef __GLEE_GL_PGI_misc_hints #ifndef GLEE_C_DEFINED_glHintPGI #define GLEE_C_DEFINED_glHintPGI void __stdcall GLee_Lazy_glHintPGI(GLenum target, GLint mode) {if (GLeeInit()) glHintPGI(target, mode);} GLEEPFNGLHINTPGIPROC GLeeFuncPtr_glHintPGI=GLee_Lazy_glHintPGI; #endif #endif /* GL_EXT_paletted_texture */ #ifdef __GLEE_GL_EXT_paletted_texture #ifndef GLEE_C_DEFINED_glColorTableEXT #define GLEE_C_DEFINED_glColorTableEXT void __stdcall GLee_Lazy_glColorTableEXT(GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const GLvoid * table) {if (GLeeInit()) glColorTableEXT(target, internalFormat, width, format, type, table);} GLEEPFNGLCOLORTABLEEXTPROC GLeeFuncPtr_glColorTableEXT=GLee_Lazy_glColorTableEXT; #endif #ifndef GLEE_C_DEFINED_glGetColorTableEXT #define GLEE_C_DEFINED_glGetColorTableEXT void __stdcall GLee_Lazy_glGetColorTableEXT(GLenum target, GLenum format, GLenum type, GLvoid * data) {if (GLeeInit()) glGetColorTableEXT(target, format, type, data);} GLEEPFNGLGETCOLORTABLEEXTPROC GLeeFuncPtr_glGetColorTableEXT=GLee_Lazy_glGetColorTableEXT; #endif #ifndef GLEE_C_DEFINED_glGetColorTableParameterivEXT #define GLEE_C_DEFINED_glGetColorTableParameterivEXT void __stdcall GLee_Lazy_glGetColorTableParameterivEXT(GLenum target, GLenum pname, GLint * params) {if (GLeeInit()) glGetColorTableParameterivEXT(target, pname, params);} GLEEPFNGLGETCOLORTABLEPARAMETERIVEXTPROC GLeeFuncPtr_glGetColorTableParameterivEXT=GLee_Lazy_glGetColorTableParameterivEXT; #endif #ifndef GLEE_C_DEFINED_glGetColorTableParameterfvEXT #define GLEE_C_DEFINED_glGetColorTableParameterfvEXT void __stdcall GLee_Lazy_glGetColorTableParameterfvEXT(GLenum target, GLenum pname, GLfloat * params) {if (GLeeInit()) glGetColorTableParameterfvEXT(target, pname, params);} GLEEPFNGLGETCOLORTABLEPARAMETERFVEXTPROC GLeeFuncPtr_glGetColorTableParameterfvEXT=GLee_Lazy_glGetColorTableParameterfvEXT; #endif #endif /* GL_EXT_clip_volume_hint */ #ifdef __GLEE_GL_EXT_clip_volume_hint #endif /* GL_SGIX_list_priority */ #ifdef __GLEE_GL_SGIX_list_priority #ifndef GLEE_C_DEFINED_glGetListParameterfvSGIX #define GLEE_C_DEFINED_glGetListParameterfvSGIX void __stdcall GLee_Lazy_glGetListParameterfvSGIX(GLuint list, GLenum pname, GLfloat * params) {if (GLeeInit()) glGetListParameterfvSGIX(list, pname, params);} GLEEPFNGLGETLISTPARAMETERFVSGIXPROC GLeeFuncPtr_glGetListParameterfvSGIX=GLee_Lazy_glGetListParameterfvSGIX; #endif #ifndef GLEE_C_DEFINED_glGetListParameterivSGIX #define GLEE_C_DEFINED_glGetListParameterivSGIX void __stdcall GLee_Lazy_glGetListParameterivSGIX(GLuint list, GLenum pname, GLint * params) {if (GLeeInit()) glGetListParameterivSGIX(list, pname, params);} GLEEPFNGLGETLISTPARAMETERIVSGIXPROC GLeeFuncPtr_glGetListParameterivSGIX=GLee_Lazy_glGetListParameterivSGIX; #endif #ifndef GLEE_C_DEFINED_glListParameterfSGIX #define GLEE_C_DEFINED_glListParameterfSGIX void __stdcall GLee_Lazy_glListParameterfSGIX(GLuint list, GLenum pname, GLfloat param) {if (GLeeInit()) glListParameterfSGIX(list, pname, param);} GLEEPFNGLLISTPARAMETERFSGIXPROC GLeeFuncPtr_glListParameterfSGIX=GLee_Lazy_glListParameterfSGIX; #endif #ifndef GLEE_C_DEFINED_glListParameterfvSGIX #define GLEE_C_DEFINED_glListParameterfvSGIX void __stdcall GLee_Lazy_glListParameterfvSGIX(GLuint list, GLenum pname, const GLfloat * params) {if (GLeeInit()) glListParameterfvSGIX(list, pname, params);} GLEEPFNGLLISTPARAMETERFVSGIXPROC GLeeFuncPtr_glListParameterfvSGIX=GLee_Lazy_glListParameterfvSGIX; #endif #ifndef GLEE_C_DEFINED_glListParameteriSGIX #define GLEE_C_DEFINED_glListParameteriSGIX void __stdcall GLee_Lazy_glListParameteriSGIX(GLuint list, GLenum pname, GLint param) {if (GLeeInit()) glListParameteriSGIX(list, pname, param);} GLEEPFNGLLISTPARAMETERISGIXPROC GLeeFuncPtr_glListParameteriSGIX=GLee_Lazy_glListParameteriSGIX; #endif #ifndef GLEE_C_DEFINED_glListParameterivSGIX #define GLEE_C_DEFINED_glListParameterivSGIX void __stdcall GLee_Lazy_glListParameterivSGIX(GLuint list, GLenum pname, const GLint * params) {if (GLeeInit()) glListParameterivSGIX(list, pname, params);} GLEEPFNGLLISTPARAMETERIVSGIXPROC GLeeFuncPtr_glListParameterivSGIX=GLee_Lazy_glListParameterivSGIX; #endif #endif /* GL_SGIX_ir_instrument1 */ #ifdef __GLEE_GL_SGIX_ir_instrument1 #endif /* GL_SGIX_calligraphic_fragment */ #ifdef __GLEE_GL_SGIX_calligraphic_fragment #endif /* GL_SGIX_texture_lod_bias */ #ifdef __GLEE_GL_SGIX_texture_lod_bias #endif /* GL_SGIX_shadow_ambient */ #ifdef __GLEE_GL_SGIX_shadow_ambient #endif /* GL_EXT_index_texture */ #ifdef __GLEE_GL_EXT_index_texture #endif /* GL_EXT_index_material */ #ifdef __GLEE_GL_EXT_index_material #ifndef GLEE_C_DEFINED_glIndexMaterialEXT #define GLEE_C_DEFINED_glIndexMaterialEXT void __stdcall GLee_Lazy_glIndexMaterialEXT(GLenum face, GLenum mode) {if (GLeeInit()) glIndexMaterialEXT(face, mode);} GLEEPFNGLINDEXMATERIALEXTPROC GLeeFuncPtr_glIndexMaterialEXT=GLee_Lazy_glIndexMaterialEXT; #endif #endif /* GL_EXT_index_func */ #ifdef __GLEE_GL_EXT_index_func #ifndef GLEE_C_DEFINED_glIndexFuncEXT #define GLEE_C_DEFINED_glIndexFuncEXT void __stdcall GLee_Lazy_glIndexFuncEXT(GLenum func, GLclampf ref) {if (GLeeInit()) glIndexFuncEXT(func, ref);} GLEEPFNGLINDEXFUNCEXTPROC GLeeFuncPtr_glIndexFuncEXT=GLee_Lazy_glIndexFuncEXT; #endif #endif /* GL_EXT_index_array_formats */ #ifdef __GLEE_GL_EXT_index_array_formats #endif /* GL_EXT_compiled_vertex_array */ #ifdef __GLEE_GL_EXT_compiled_vertex_array #ifndef GLEE_C_DEFINED_glLockArraysEXT #define GLEE_C_DEFINED_glLockArraysEXT void __stdcall GLee_Lazy_glLockArraysEXT(GLint first, GLsizei count) {if (GLeeInit()) glLockArraysEXT(first, count);} GLEEPFNGLLOCKARRAYSEXTPROC GLeeFuncPtr_glLockArraysEXT=GLee_Lazy_glLockArraysEXT; #endif #ifndef GLEE_C_DEFINED_glUnlockArraysEXT #define GLEE_C_DEFINED_glUnlockArraysEXT void __stdcall GLee_Lazy_glUnlockArraysEXT(void) {if (GLeeInit()) glUnlockArraysEXT();} GLEEPFNGLUNLOCKARRAYSEXTPROC GLeeFuncPtr_glUnlockArraysEXT=GLee_Lazy_glUnlockArraysEXT; #endif #endif /* GL_EXT_cull_vertex */ #ifdef __GLEE_GL_EXT_cull_vertex #ifndef GLEE_C_DEFINED_glCullParameterdvEXT #define GLEE_C_DEFINED_glCullParameterdvEXT void __stdcall GLee_Lazy_glCullParameterdvEXT(GLenum pname, GLdouble * params) {if (GLeeInit()) glCullParameterdvEXT(pname, params);} GLEEPFNGLCULLPARAMETERDVEXTPROC GLeeFuncPtr_glCullParameterdvEXT=GLee_Lazy_glCullParameterdvEXT; #endif #ifndef GLEE_C_DEFINED_glCullParameterfvEXT #define GLEE_C_DEFINED_glCullParameterfvEXT void __stdcall GLee_Lazy_glCullParameterfvEXT(GLenum pname, GLfloat * params) {if (GLeeInit()) glCullParameterfvEXT(pname, params);} GLEEPFNGLCULLPARAMETERFVEXTPROC GLeeFuncPtr_glCullParameterfvEXT=GLee_Lazy_glCullParameterfvEXT; #endif #endif /* GL_SGIX_ycrcb */ #ifdef __GLEE_GL_SGIX_ycrcb #endif /* GL_SGIX_fragment_lighting */ #ifdef __GLEE_GL_SGIX_fragment_lighting #ifndef GLEE_C_DEFINED_glFragmentColorMaterialSGIX #define GLEE_C_DEFINED_glFragmentColorMaterialSGIX void __stdcall GLee_Lazy_glFragmentColorMaterialSGIX(GLenum face, GLenum mode) {if (GLeeInit()) glFragmentColorMaterialSGIX(face, mode);} GLEEPFNGLFRAGMENTCOLORMATERIALSGIXPROC GLeeFuncPtr_glFragmentColorMaterialSGIX=GLee_Lazy_glFragmentColorMaterialSGIX; #endif #ifndef GLEE_C_DEFINED_glFragmentLightfSGIX #define GLEE_C_DEFINED_glFragmentLightfSGIX void __stdcall GLee_Lazy_glFragmentLightfSGIX(GLenum light, GLenum pname, GLfloat param) {if (GLeeInit()) glFragmentLightfSGIX(light, pname, param);} GLEEPFNGLFRAGMENTLIGHTFSGIXPROC GLeeFuncPtr_glFragmentLightfSGIX=GLee_Lazy_glFragmentLightfSGIX; #endif #ifndef GLEE_C_DEFINED_glFragmentLightfvSGIX #define GLEE_C_DEFINED_glFragmentLightfvSGIX void __stdcall GLee_Lazy_glFragmentLightfvSGIX(GLenum light, GLenum pname, const GLfloat * params) {if (GLeeInit()) glFragmentLightfvSGIX(light, pname, params);} GLEEPFNGLFRAGMENTLIGHTFVSGIXPROC GLeeFuncPtr_glFragmentLightfvSGIX=GLee_Lazy_glFragmentLightfvSGIX; #endif #ifndef GLEE_C_DEFINED_glFragmentLightiSGIX #define GLEE_C_DEFINED_glFragmentLightiSGIX void __stdcall GLee_Lazy_glFragmentLightiSGIX(GLenum light, GLenum pname, GLint param) {if (GLeeInit()) glFragmentLightiSGIX(light, pname, param);} GLEEPFNGLFRAGMENTLIGHTISGIXPROC GLeeFuncPtr_glFragmentLightiSGIX=GLee_Lazy_glFragmentLightiSGIX; #endif #ifndef GLEE_C_DEFINED_glFragmentLightivSGIX #define GLEE_C_DEFINED_glFragmentLightivSGIX void __stdcall GLee_Lazy_glFragmentLightivSGIX(GLenum light, GLenum pname, const GLint * params) {if (GLeeInit()) glFragmentLightivSGIX(light, pname, params);} GLEEPFNGLFRAGMENTLIGHTIVSGIXPROC GLeeFuncPtr_glFragmentLightivSGIX=GLee_Lazy_glFragmentLightivSGIX; #endif #ifndef GLEE_C_DEFINED_glFragmentLightModelfSGIX #define GLEE_C_DEFINED_glFragmentLightModelfSGIX void __stdcall GLee_Lazy_glFragmentLightModelfSGIX(GLenum pname, GLfloat param) {if (GLeeInit()) glFragmentLightModelfSGIX(pname, param);} GLEEPFNGLFRAGMENTLIGHTMODELFSGIXPROC GLeeFuncPtr_glFragmentLightModelfSGIX=GLee_Lazy_glFragmentLightModelfSGIX; #endif #ifndef GLEE_C_DEFINED_glFragmentLightModelfvSGIX #define GLEE_C_DEFINED_glFragmentLightModelfvSGIX void __stdcall GLee_Lazy_glFragmentLightModelfvSGIX(GLenum pname, const GLfloat * params) {if (GLeeInit()) glFragmentLightModelfvSGIX(pname, params);} GLEEPFNGLFRAGMENTLIGHTMODELFVSGIXPROC GLeeFuncPtr_glFragmentLightModelfvSGIX=GLee_Lazy_glFragmentLightModelfvSGIX; #endif #ifndef GLEE_C_DEFINED_glFragmentLightModeliSGIX #define GLEE_C_DEFINED_glFragmentLightModeliSGIX void __stdcall GLee_Lazy_glFragmentLightModeliSGIX(GLenum pname, GLint param) {if (GLeeInit()) glFragmentLightModeliSGIX(pname, param);} GLEEPFNGLFRAGMENTLIGHTMODELISGIXPROC GLeeFuncPtr_glFragmentLightModeliSGIX=GLee_Lazy_glFragmentLightModeliSGIX; #endif #ifndef GLEE_C_DEFINED_glFragmentLightModelivSGIX #define GLEE_C_DEFINED_glFragmentLightModelivSGIX void __stdcall GLee_Lazy_glFragmentLightModelivSGIX(GLenum pname, const GLint * params) {if (GLeeInit()) glFragmentLightModelivSGIX(pname, params);} GLEEPFNGLFRAGMENTLIGHTMODELIVSGIXPROC GLeeFuncPtr_glFragmentLightModelivSGIX=GLee_Lazy_glFragmentLightModelivSGIX; #endif #ifndef GLEE_C_DEFINED_glFragmentMaterialfSGIX #define GLEE_C_DEFINED_glFragmentMaterialfSGIX void __stdcall GLee_Lazy_glFragmentMaterialfSGIX(GLenum face, GLenum pname, GLfloat param) {if (GLeeInit()) glFragmentMaterialfSGIX(face, pname, param);} GLEEPFNGLFRAGMENTMATERIALFSGIXPROC GLeeFuncPtr_glFragmentMaterialfSGIX=GLee_Lazy_glFragmentMaterialfSGIX; #endif #ifndef GLEE_C_DEFINED_glFragmentMaterialfvSGIX #define GLEE_C_DEFINED_glFragmentMaterialfvSGIX void __stdcall GLee_Lazy_glFragmentMaterialfvSGIX(GLenum face, GLenum pname, const GLfloat * params) {if (GLeeInit()) glFragmentMaterialfvSGIX(face, pname, params);} GLEEPFNGLFRAGMENTMATERIALFVSGIXPROC GLeeFuncPtr_glFragmentMaterialfvSGIX=GLee_Lazy_glFragmentMaterialfvSGIX; #endif #ifndef GLEE_C_DEFINED_glFragmentMaterialiSGIX #define GLEE_C_DEFINED_glFragmentMaterialiSGIX void __stdcall GLee_Lazy_glFragmentMaterialiSGIX(GLenum face, GLenum pname, GLint param) {if (GLeeInit()) glFragmentMaterialiSGIX(face, pname, param);} GLEEPFNGLFRAGMENTMATERIALISGIXPROC GLeeFuncPtr_glFragmentMaterialiSGIX=GLee_Lazy_glFragmentMaterialiSGIX; #endif #ifndef GLEE_C_DEFINED_glFragmentMaterialivSGIX #define GLEE_C_DEFINED_glFragmentMaterialivSGIX void __stdcall GLee_Lazy_glFragmentMaterialivSGIX(GLenum face, GLenum pname, const GLint * params) {if (GLeeInit()) glFragmentMaterialivSGIX(face, pname, params);} GLEEPFNGLFRAGMENTMATERIALIVSGIXPROC GLeeFuncPtr_glFragmentMaterialivSGIX=GLee_Lazy_glFragmentMaterialivSGIX; #endif #ifndef GLEE_C_DEFINED_glGetFragmentLightfvSGIX #define GLEE_C_DEFINED_glGetFragmentLightfvSGIX void __stdcall GLee_Lazy_glGetFragmentLightfvSGIX(GLenum light, GLenum pname, GLfloat * params) {if (GLeeInit()) glGetFragmentLightfvSGIX(light, pname, params);} GLEEPFNGLGETFRAGMENTLIGHTFVSGIXPROC GLeeFuncPtr_glGetFragmentLightfvSGIX=GLee_Lazy_glGetFragmentLightfvSGIX; #endif #ifndef GLEE_C_DEFINED_glGetFragmentLightivSGIX #define GLEE_C_DEFINED_glGetFragmentLightivSGIX void __stdcall GLee_Lazy_glGetFragmentLightivSGIX(GLenum light, GLenum pname, GLint * params) {if (GLeeInit()) glGetFragmentLightivSGIX(light, pname, params);} GLEEPFNGLGETFRAGMENTLIGHTIVSGIXPROC GLeeFuncPtr_glGetFragmentLightivSGIX=GLee_Lazy_glGetFragmentLightivSGIX; #endif #ifndef GLEE_C_DEFINED_glGetFragmentMaterialfvSGIX #define GLEE_C_DEFINED_glGetFragmentMaterialfvSGIX void __stdcall GLee_Lazy_glGetFragmentMaterialfvSGIX(GLenum face, GLenum pname, GLfloat * params) {if (GLeeInit()) glGetFragmentMaterialfvSGIX(face, pname, params);} GLEEPFNGLGETFRAGMENTMATERIALFVSGIXPROC GLeeFuncPtr_glGetFragmentMaterialfvSGIX=GLee_Lazy_glGetFragmentMaterialfvSGIX; #endif #ifndef GLEE_C_DEFINED_glGetFragmentMaterialivSGIX #define GLEE_C_DEFINED_glGetFragmentMaterialivSGIX void __stdcall GLee_Lazy_glGetFragmentMaterialivSGIX(GLenum face, GLenum pname, GLint * params) {if (GLeeInit()) glGetFragmentMaterialivSGIX(face, pname, params);} GLEEPFNGLGETFRAGMENTMATERIALIVSGIXPROC GLeeFuncPtr_glGetFragmentMaterialivSGIX=GLee_Lazy_glGetFragmentMaterialivSGIX; #endif #ifndef GLEE_C_DEFINED_glLightEnviSGIX #define GLEE_C_DEFINED_glLightEnviSGIX void __stdcall GLee_Lazy_glLightEnviSGIX(GLenum pname, GLint param) {if (GLeeInit()) glLightEnviSGIX(pname, param);} GLEEPFNGLLIGHTENVISGIXPROC GLeeFuncPtr_glLightEnviSGIX=GLee_Lazy_glLightEnviSGIX; #endif #endif /* GL_IBM_rasterpos_clip */ #ifdef __GLEE_GL_IBM_rasterpos_clip #endif /* GL_HP_texture_lighting */ #ifdef __GLEE_GL_HP_texture_lighting #endif /* GL_EXT_draw_range_elements */ #ifdef __GLEE_GL_EXT_draw_range_elements #ifndef GLEE_C_DEFINED_glDrawRangeElementsEXT #define GLEE_C_DEFINED_glDrawRangeElementsEXT void __stdcall GLee_Lazy_glDrawRangeElementsEXT(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid * indices) {if (GLeeInit()) glDrawRangeElementsEXT(mode, start, end, count, type, indices);} GLEEPFNGLDRAWRANGEELEMENTSEXTPROC GLeeFuncPtr_glDrawRangeElementsEXT=GLee_Lazy_glDrawRangeElementsEXT; #endif #endif /* GL_WIN_phong_shading */ #ifdef __GLEE_GL_WIN_phong_shading #endif /* GL_WIN_specular_fog */ #ifdef __GLEE_GL_WIN_specular_fog #endif /* GL_EXT_light_texture */ #ifdef __GLEE_GL_EXT_light_texture #ifndef GLEE_C_DEFINED_glApplyTextureEXT #define GLEE_C_DEFINED_glApplyTextureEXT void __stdcall GLee_Lazy_glApplyTextureEXT(GLenum mode) {if (GLeeInit()) glApplyTextureEXT(mode);} GLEEPFNGLAPPLYTEXTUREEXTPROC GLeeFuncPtr_glApplyTextureEXT=GLee_Lazy_glApplyTextureEXT; #endif #ifndef GLEE_C_DEFINED_glTextureLightEXT #define GLEE_C_DEFINED_glTextureLightEXT void __stdcall GLee_Lazy_glTextureLightEXT(GLenum pname) {if (GLeeInit()) glTextureLightEXT(pname);} GLEEPFNGLTEXTURELIGHTEXTPROC GLeeFuncPtr_glTextureLightEXT=GLee_Lazy_glTextureLightEXT; #endif #ifndef GLEE_C_DEFINED_glTextureMaterialEXT #define GLEE_C_DEFINED_glTextureMaterialEXT void __stdcall GLee_Lazy_glTextureMaterialEXT(GLenum face, GLenum mode) {if (GLeeInit()) glTextureMaterialEXT(face, mode);} GLEEPFNGLTEXTUREMATERIALEXTPROC GLeeFuncPtr_glTextureMaterialEXT=GLee_Lazy_glTextureMaterialEXT; #endif #endif /* GL_SGIX_blend_alpha_minmax */ #ifdef __GLEE_GL_SGIX_blend_alpha_minmax #endif /* GL_SGIX_impact_pixel_texture */ #ifdef __GLEE_GL_SGIX_impact_pixel_texture #endif /* GL_EXT_bgra */ #ifdef __GLEE_GL_EXT_bgra #endif /* GL_SGIX_async */ #ifdef __GLEE_GL_SGIX_async #ifndef GLEE_C_DEFINED_glAsyncMarkerSGIX #define GLEE_C_DEFINED_glAsyncMarkerSGIX void __stdcall GLee_Lazy_glAsyncMarkerSGIX(GLuint marker) {if (GLeeInit()) glAsyncMarkerSGIX(marker);} GLEEPFNGLASYNCMARKERSGIXPROC GLeeFuncPtr_glAsyncMarkerSGIX=GLee_Lazy_glAsyncMarkerSGIX; #endif #ifndef GLEE_C_DEFINED_glFinishAsyncSGIX #define GLEE_C_DEFINED_glFinishAsyncSGIX GLint __stdcall GLee_Lazy_glFinishAsyncSGIX(GLuint * markerp) {if (GLeeInit()) return glFinishAsyncSGIX(markerp); return (GLint)0;} GLEEPFNGLFINISHASYNCSGIXPROC GLeeFuncPtr_glFinishAsyncSGIX=GLee_Lazy_glFinishAsyncSGIX; #endif #ifndef GLEE_C_DEFINED_glPollAsyncSGIX #define GLEE_C_DEFINED_glPollAsyncSGIX GLint __stdcall GLee_Lazy_glPollAsyncSGIX(GLuint * markerp) {if (GLeeInit()) return glPollAsyncSGIX(markerp); return (GLint)0;} GLEEPFNGLPOLLASYNCSGIXPROC GLeeFuncPtr_glPollAsyncSGIX=GLee_Lazy_glPollAsyncSGIX; #endif #ifndef GLEE_C_DEFINED_glGenAsyncMarkersSGIX #define GLEE_C_DEFINED_glGenAsyncMarkersSGIX GLuint __stdcall GLee_Lazy_glGenAsyncMarkersSGIX(GLsizei range) {if (GLeeInit()) return glGenAsyncMarkersSGIX(range); return (GLuint)0;} GLEEPFNGLGENASYNCMARKERSSGIXPROC GLeeFuncPtr_glGenAsyncMarkersSGIX=GLee_Lazy_glGenAsyncMarkersSGIX; #endif #ifndef GLEE_C_DEFINED_glDeleteAsyncMarkersSGIX #define GLEE_C_DEFINED_glDeleteAsyncMarkersSGIX void __stdcall GLee_Lazy_glDeleteAsyncMarkersSGIX(GLuint marker, GLsizei range) {if (GLeeInit()) glDeleteAsyncMarkersSGIX(marker, range);} GLEEPFNGLDELETEASYNCMARKERSSGIXPROC GLeeFuncPtr_glDeleteAsyncMarkersSGIX=GLee_Lazy_glDeleteAsyncMarkersSGIX; #endif #ifndef GLEE_C_DEFINED_glIsAsyncMarkerSGIX #define GLEE_C_DEFINED_glIsAsyncMarkerSGIX GLboolean __stdcall GLee_Lazy_glIsAsyncMarkerSGIX(GLuint marker) {if (GLeeInit()) return glIsAsyncMarkerSGIX(marker); return (GLboolean)0;} GLEEPFNGLISASYNCMARKERSGIXPROC GLeeFuncPtr_glIsAsyncMarkerSGIX=GLee_Lazy_glIsAsyncMarkerSGIX; #endif #endif /* GL_SGIX_async_pixel */ #ifdef __GLEE_GL_SGIX_async_pixel #endif /* GL_SGIX_async_histogram */ #ifdef __GLEE_GL_SGIX_async_histogram #endif /* GL_INTEL_texture_scissor */ #ifdef __GLEE_GL_INTEL_texture_scissor #endif /* GL_INTEL_parallel_arrays */ #ifdef __GLEE_GL_INTEL_parallel_arrays #ifndef GLEE_C_DEFINED_glVertexPointervINTEL #define GLEE_C_DEFINED_glVertexPointervINTEL void __stdcall GLee_Lazy_glVertexPointervINTEL(GLint size, GLenum type, const GLvoid* * pointer) {if (GLeeInit()) glVertexPointervINTEL(size, type, pointer);} GLEEPFNGLVERTEXPOINTERVINTELPROC GLeeFuncPtr_glVertexPointervINTEL=GLee_Lazy_glVertexPointervINTEL; #endif #ifndef GLEE_C_DEFINED_glNormalPointervINTEL #define GLEE_C_DEFINED_glNormalPointervINTEL void __stdcall GLee_Lazy_glNormalPointervINTEL(GLenum type, const GLvoid* * pointer) {if (GLeeInit()) glNormalPointervINTEL(type, pointer);} GLEEPFNGLNORMALPOINTERVINTELPROC GLeeFuncPtr_glNormalPointervINTEL=GLee_Lazy_glNormalPointervINTEL; #endif #ifndef GLEE_C_DEFINED_glColorPointervINTEL #define GLEE_C_DEFINED_glColorPointervINTEL void __stdcall GLee_Lazy_glColorPointervINTEL(GLint size, GLenum type, const GLvoid* * pointer) {if (GLeeInit()) glColorPointervINTEL(size, type, pointer);} GLEEPFNGLCOLORPOINTERVINTELPROC GLeeFuncPtr_glColorPointervINTEL=GLee_Lazy_glColorPointervINTEL; #endif #ifndef GLEE_C_DEFINED_glTexCoordPointervINTEL #define GLEE_C_DEFINED_glTexCoordPointervINTEL void __stdcall GLee_Lazy_glTexCoordPointervINTEL(GLint size, GLenum type, const GLvoid* * pointer) {if (GLeeInit()) glTexCoordPointervINTEL(size, type, pointer);} GLEEPFNGLTEXCOORDPOINTERVINTELPROC GLeeFuncPtr_glTexCoordPointervINTEL=GLee_Lazy_glTexCoordPointervINTEL; #endif #endif /* GL_HP_occlusion_test */ #ifdef __GLEE_GL_HP_occlusion_test #endif /* GL_EXT_pixel_transform */ #ifdef __GLEE_GL_EXT_pixel_transform #ifndef GLEE_C_DEFINED_glPixelTransformParameteriEXT #define GLEE_C_DEFINED_glPixelTransformParameteriEXT void __stdcall GLee_Lazy_glPixelTransformParameteriEXT(GLenum target, GLenum pname, GLint param) {if (GLeeInit()) glPixelTransformParameteriEXT(target, pname, param);} GLEEPFNGLPIXELTRANSFORMPARAMETERIEXTPROC GLeeFuncPtr_glPixelTransformParameteriEXT=GLee_Lazy_glPixelTransformParameteriEXT; #endif #ifndef GLEE_C_DEFINED_glPixelTransformParameterfEXT #define GLEE_C_DEFINED_glPixelTransformParameterfEXT void __stdcall GLee_Lazy_glPixelTransformParameterfEXT(GLenum target, GLenum pname, GLfloat param) {if (GLeeInit()) glPixelTransformParameterfEXT(target, pname, param);} GLEEPFNGLPIXELTRANSFORMPARAMETERFEXTPROC GLeeFuncPtr_glPixelTransformParameterfEXT=GLee_Lazy_glPixelTransformParameterfEXT; #endif #ifndef GLEE_C_DEFINED_glPixelTransformParameterivEXT #define GLEE_C_DEFINED_glPixelTransformParameterivEXT void __stdcall GLee_Lazy_glPixelTransformParameterivEXT(GLenum target, GLenum pname, const GLint * params) {if (GLeeInit()) glPixelTransformParameterivEXT(target, pname, params);} GLEEPFNGLPIXELTRANSFORMPARAMETERIVEXTPROC GLeeFuncPtr_glPixelTransformParameterivEXT=GLee_Lazy_glPixelTransformParameterivEXT; #endif #ifndef GLEE_C_DEFINED_glPixelTransformParameterfvEXT #define GLEE_C_DEFINED_glPixelTransformParameterfvEXT void __stdcall GLee_Lazy_glPixelTransformParameterfvEXT(GLenum target, GLenum pname, const GLfloat * params) {if (GLeeInit()) glPixelTransformParameterfvEXT(target, pname, params);} GLEEPFNGLPIXELTRANSFORMPARAMETERFVEXTPROC GLeeFuncPtr_glPixelTransformParameterfvEXT=GLee_Lazy_glPixelTransformParameterfvEXT; #endif #endif /* GL_EXT_pixel_transform_color_table */ #ifdef __GLEE_GL_EXT_pixel_transform_color_table #endif /* GL_EXT_shared_texture_palette */ #ifdef __GLEE_GL_EXT_shared_texture_palette #endif /* GL_EXT_separate_specular_color */ #ifdef __GLEE_GL_EXT_separate_specular_color #endif /* GL_EXT_secondary_color */ #ifdef __GLEE_GL_EXT_secondary_color #ifndef GLEE_C_DEFINED_glSecondaryColor3bEXT #define GLEE_C_DEFINED_glSecondaryColor3bEXT void __stdcall GLee_Lazy_glSecondaryColor3bEXT(GLbyte red, GLbyte green, GLbyte blue) {if (GLeeInit()) glSecondaryColor3bEXT(red, green, blue);} GLEEPFNGLSECONDARYCOLOR3BEXTPROC GLeeFuncPtr_glSecondaryColor3bEXT=GLee_Lazy_glSecondaryColor3bEXT; #endif #ifndef GLEE_C_DEFINED_glSecondaryColor3bvEXT #define GLEE_C_DEFINED_glSecondaryColor3bvEXT void __stdcall GLee_Lazy_glSecondaryColor3bvEXT(const GLbyte * v) {if (GLeeInit()) glSecondaryColor3bvEXT(v);} GLEEPFNGLSECONDARYCOLOR3BVEXTPROC GLeeFuncPtr_glSecondaryColor3bvEXT=GLee_Lazy_glSecondaryColor3bvEXT; #endif #ifndef GLEE_C_DEFINED_glSecondaryColor3dEXT #define GLEE_C_DEFINED_glSecondaryColor3dEXT void __stdcall GLee_Lazy_glSecondaryColor3dEXT(GLdouble red, GLdouble green, GLdouble blue) {if (GLeeInit()) glSecondaryColor3dEXT(red, green, blue);} GLEEPFNGLSECONDARYCOLOR3DEXTPROC GLeeFuncPtr_glSecondaryColor3dEXT=GLee_Lazy_glSecondaryColor3dEXT; #endif #ifndef GLEE_C_DEFINED_glSecondaryColor3dvEXT #define GLEE_C_DEFINED_glSecondaryColor3dvEXT void __stdcall GLee_Lazy_glSecondaryColor3dvEXT(const GLdouble * v) {if (GLeeInit()) glSecondaryColor3dvEXT(v);} GLEEPFNGLSECONDARYCOLOR3DVEXTPROC GLeeFuncPtr_glSecondaryColor3dvEXT=GLee_Lazy_glSecondaryColor3dvEXT; #endif #ifndef GLEE_C_DEFINED_glSecondaryColor3fEXT #define GLEE_C_DEFINED_glSecondaryColor3fEXT void __stdcall GLee_Lazy_glSecondaryColor3fEXT(GLfloat red, GLfloat green, GLfloat blue) {if (GLeeInit()) glSecondaryColor3fEXT(red, green, blue);} GLEEPFNGLSECONDARYCOLOR3FEXTPROC GLeeFuncPtr_glSecondaryColor3fEXT=GLee_Lazy_glSecondaryColor3fEXT; #endif #ifndef GLEE_C_DEFINED_glSecondaryColor3fvEXT #define GLEE_C_DEFINED_glSecondaryColor3fvEXT void __stdcall GLee_Lazy_glSecondaryColor3fvEXT(const GLfloat * v) {if (GLeeInit()) glSecondaryColor3fvEXT(v);} GLEEPFNGLSECONDARYCOLOR3FVEXTPROC GLeeFuncPtr_glSecondaryColor3fvEXT=GLee_Lazy_glSecondaryColor3fvEXT; #endif #ifndef GLEE_C_DEFINED_glSecondaryColor3iEXT #define GLEE_C_DEFINED_glSecondaryColor3iEXT void __stdcall GLee_Lazy_glSecondaryColor3iEXT(GLint red, GLint green, GLint blue) {if (GLeeInit()) glSecondaryColor3iEXT(red, green, blue);} GLEEPFNGLSECONDARYCOLOR3IEXTPROC GLeeFuncPtr_glSecondaryColor3iEXT=GLee_Lazy_glSecondaryColor3iEXT; #endif #ifndef GLEE_C_DEFINED_glSecondaryColor3ivEXT #define GLEE_C_DEFINED_glSecondaryColor3ivEXT void __stdcall GLee_Lazy_glSecondaryColor3ivEXT(const GLint * v) {if (GLeeInit()) glSecondaryColor3ivEXT(v);} GLEEPFNGLSECONDARYCOLOR3IVEXTPROC GLeeFuncPtr_glSecondaryColor3ivEXT=GLee_Lazy_glSecondaryColor3ivEXT; #endif #ifndef GLEE_C_DEFINED_glSecondaryColor3sEXT #define GLEE_C_DEFINED_glSecondaryColor3sEXT void __stdcall GLee_Lazy_glSecondaryColor3sEXT(GLshort red, GLshort green, GLshort blue) {if (GLeeInit()) glSecondaryColor3sEXT(red, green, blue);} GLEEPFNGLSECONDARYCOLOR3SEXTPROC GLeeFuncPtr_glSecondaryColor3sEXT=GLee_Lazy_glSecondaryColor3sEXT; #endif #ifndef GLEE_C_DEFINED_glSecondaryColor3svEXT #define GLEE_C_DEFINED_glSecondaryColor3svEXT void __stdcall GLee_Lazy_glSecondaryColor3svEXT(const GLshort * v) {if (GLeeInit()) glSecondaryColor3svEXT(v);} GLEEPFNGLSECONDARYCOLOR3SVEXTPROC GLeeFuncPtr_glSecondaryColor3svEXT=GLee_Lazy_glSecondaryColor3svEXT; #endif #ifndef GLEE_C_DEFINED_glSecondaryColor3ubEXT #define GLEE_C_DEFINED_glSecondaryColor3ubEXT void __stdcall GLee_Lazy_glSecondaryColor3ubEXT(GLubyte red, GLubyte green, GLubyte blue) {if (GLeeInit()) glSecondaryColor3ubEXT(red, green, blue);} GLEEPFNGLSECONDARYCOLOR3UBEXTPROC GLeeFuncPtr_glSecondaryColor3ubEXT=GLee_Lazy_glSecondaryColor3ubEXT; #endif #ifndef GLEE_C_DEFINED_glSecondaryColor3ubvEXT #define GLEE_C_DEFINED_glSecondaryColor3ubvEXT void __stdcall GLee_Lazy_glSecondaryColor3ubvEXT(const GLubyte * v) {if (GLeeInit()) glSecondaryColor3ubvEXT(v);} GLEEPFNGLSECONDARYCOLOR3UBVEXTPROC GLeeFuncPtr_glSecondaryColor3ubvEXT=GLee_Lazy_glSecondaryColor3ubvEXT; #endif #ifndef GLEE_C_DEFINED_glSecondaryColor3uiEXT #define GLEE_C_DEFINED_glSecondaryColor3uiEXT void __stdcall GLee_Lazy_glSecondaryColor3uiEXT(GLuint red, GLuint green, GLuint blue) {if (GLeeInit()) glSecondaryColor3uiEXT(red, green, blue);} GLEEPFNGLSECONDARYCOLOR3UIEXTPROC GLeeFuncPtr_glSecondaryColor3uiEXT=GLee_Lazy_glSecondaryColor3uiEXT; #endif #ifndef GLEE_C_DEFINED_glSecondaryColor3uivEXT #define GLEE_C_DEFINED_glSecondaryColor3uivEXT void __stdcall GLee_Lazy_glSecondaryColor3uivEXT(const GLuint * v) {if (GLeeInit()) glSecondaryColor3uivEXT(v);} GLEEPFNGLSECONDARYCOLOR3UIVEXTPROC GLeeFuncPtr_glSecondaryColor3uivEXT=GLee_Lazy_glSecondaryColor3uivEXT; #endif #ifndef GLEE_C_DEFINED_glSecondaryColor3usEXT #define GLEE_C_DEFINED_glSecondaryColor3usEXT void __stdcall GLee_Lazy_glSecondaryColor3usEXT(GLushort red, GLushort green, GLushort blue) {if (GLeeInit()) glSecondaryColor3usEXT(red, green, blue);} GLEEPFNGLSECONDARYCOLOR3USEXTPROC GLeeFuncPtr_glSecondaryColor3usEXT=GLee_Lazy_glSecondaryColor3usEXT; #endif #ifndef GLEE_C_DEFINED_glSecondaryColor3usvEXT #define GLEE_C_DEFINED_glSecondaryColor3usvEXT void __stdcall GLee_Lazy_glSecondaryColor3usvEXT(const GLushort * v) {if (GLeeInit()) glSecondaryColor3usvEXT(v);} GLEEPFNGLSECONDARYCOLOR3USVEXTPROC GLeeFuncPtr_glSecondaryColor3usvEXT=GLee_Lazy_glSecondaryColor3usvEXT; #endif #ifndef GLEE_C_DEFINED_glSecondaryColorPointerEXT #define GLEE_C_DEFINED_glSecondaryColorPointerEXT void __stdcall GLee_Lazy_glSecondaryColorPointerEXT(GLint size, GLenum type, GLsizei stride, const GLvoid * pointer) {if (GLeeInit()) glSecondaryColorPointerEXT(size, type, stride, pointer);} GLEEPFNGLSECONDARYCOLORPOINTEREXTPROC GLeeFuncPtr_glSecondaryColorPointerEXT=GLee_Lazy_glSecondaryColorPointerEXT; #endif #endif /* GL_EXT_texture_perturb_normal */ #ifdef __GLEE_GL_EXT_texture_perturb_normal #ifndef GLEE_C_DEFINED_glTextureNormalEXT #define GLEE_C_DEFINED_glTextureNormalEXT void __stdcall GLee_Lazy_glTextureNormalEXT(GLenum mode) {if (GLeeInit()) glTextureNormalEXT(mode);} GLEEPFNGLTEXTURENORMALEXTPROC GLeeFuncPtr_glTextureNormalEXT=GLee_Lazy_glTextureNormalEXT; #endif #endif /* GL_EXT_multi_draw_arrays */ #ifdef __GLEE_GL_EXT_multi_draw_arrays #ifndef GLEE_C_DEFINED_glMultiDrawArraysEXT #define GLEE_C_DEFINED_glMultiDrawArraysEXT void __stdcall GLee_Lazy_glMultiDrawArraysEXT(GLenum mode, GLint * first, GLsizei * count, GLsizei primcount) {if (GLeeInit()) glMultiDrawArraysEXT(mode, first, count, primcount);} GLEEPFNGLMULTIDRAWARRAYSEXTPROC GLeeFuncPtr_glMultiDrawArraysEXT=GLee_Lazy_glMultiDrawArraysEXT; #endif #ifndef GLEE_C_DEFINED_glMultiDrawElementsEXT #define GLEE_C_DEFINED_glMultiDrawElementsEXT void __stdcall GLee_Lazy_glMultiDrawElementsEXT(GLenum mode, const GLsizei * count, GLenum type, const GLvoid* * indices, GLsizei primcount) {if (GLeeInit()) glMultiDrawElementsEXT(mode, count, type, indices, primcount);} GLEEPFNGLMULTIDRAWELEMENTSEXTPROC GLeeFuncPtr_glMultiDrawElementsEXT=GLee_Lazy_glMultiDrawElementsEXT; #endif #endif /* GL_EXT_fog_coord */ #ifdef __GLEE_GL_EXT_fog_coord #ifndef GLEE_C_DEFINED_glFogCoordfEXT #define GLEE_C_DEFINED_glFogCoordfEXT void __stdcall GLee_Lazy_glFogCoordfEXT(GLfloat coord) {if (GLeeInit()) glFogCoordfEXT(coord);} GLEEPFNGLFOGCOORDFEXTPROC GLeeFuncPtr_glFogCoordfEXT=GLee_Lazy_glFogCoordfEXT; #endif #ifndef GLEE_C_DEFINED_glFogCoordfvEXT #define GLEE_C_DEFINED_glFogCoordfvEXT void __stdcall GLee_Lazy_glFogCoordfvEXT(const GLfloat * coord) {if (GLeeInit()) glFogCoordfvEXT(coord);} GLEEPFNGLFOGCOORDFVEXTPROC GLeeFuncPtr_glFogCoordfvEXT=GLee_Lazy_glFogCoordfvEXT; #endif #ifndef GLEE_C_DEFINED_glFogCoorddEXT #define GLEE_C_DEFINED_glFogCoorddEXT void __stdcall GLee_Lazy_glFogCoorddEXT(GLdouble coord) {if (GLeeInit()) glFogCoorddEXT(coord);} GLEEPFNGLFOGCOORDDEXTPROC GLeeFuncPtr_glFogCoorddEXT=GLee_Lazy_glFogCoorddEXT; #endif #ifndef GLEE_C_DEFINED_glFogCoorddvEXT #define GLEE_C_DEFINED_glFogCoorddvEXT void __stdcall GLee_Lazy_glFogCoorddvEXT(const GLdouble * coord) {if (GLeeInit()) glFogCoorddvEXT(coord);} GLEEPFNGLFOGCOORDDVEXTPROC GLeeFuncPtr_glFogCoorddvEXT=GLee_Lazy_glFogCoorddvEXT; #endif #ifndef GLEE_C_DEFINED_glFogCoordPointerEXT #define GLEE_C_DEFINED_glFogCoordPointerEXT void __stdcall GLee_Lazy_glFogCoordPointerEXT(GLenum type, GLsizei stride, const GLvoid * pointer) {if (GLeeInit()) glFogCoordPointerEXT(type, stride, pointer);} GLEEPFNGLFOGCOORDPOINTEREXTPROC GLeeFuncPtr_glFogCoordPointerEXT=GLee_Lazy_glFogCoordPointerEXT; #endif #endif /* GL_REND_screen_coordinates */ #ifdef __GLEE_GL_REND_screen_coordinates #endif /* GL_EXT_coordinate_frame */ #ifdef __GLEE_GL_EXT_coordinate_frame #ifndef GLEE_C_DEFINED_glTangent3bEXT #define GLEE_C_DEFINED_glTangent3bEXT void __stdcall GLee_Lazy_glTangent3bEXT(GLbyte tx, GLbyte ty, GLbyte tz) {if (GLeeInit()) glTangent3bEXT(tx, ty, tz);} GLEEPFNGLTANGENT3BEXTPROC GLeeFuncPtr_glTangent3bEXT=GLee_Lazy_glTangent3bEXT; #endif #ifndef GLEE_C_DEFINED_glTangent3bvEXT #define GLEE_C_DEFINED_glTangent3bvEXT void __stdcall GLee_Lazy_glTangent3bvEXT(const GLbyte * v) {if (GLeeInit()) glTangent3bvEXT(v);} GLEEPFNGLTANGENT3BVEXTPROC GLeeFuncPtr_glTangent3bvEXT=GLee_Lazy_glTangent3bvEXT; #endif #ifndef GLEE_C_DEFINED_glTangent3dEXT #define GLEE_C_DEFINED_glTangent3dEXT void __stdcall GLee_Lazy_glTangent3dEXT(GLdouble tx, GLdouble ty, GLdouble tz) {if (GLeeInit()) glTangent3dEXT(tx, ty, tz);} GLEEPFNGLTANGENT3DEXTPROC GLeeFuncPtr_glTangent3dEXT=GLee_Lazy_glTangent3dEXT; #endif #ifndef GLEE_C_DEFINED_glTangent3dvEXT #define GLEE_C_DEFINED_glTangent3dvEXT void __stdcall GLee_Lazy_glTangent3dvEXT(const GLdouble * v) {if (GLeeInit()) glTangent3dvEXT(v);} GLEEPFNGLTANGENT3DVEXTPROC GLeeFuncPtr_glTangent3dvEXT=GLee_Lazy_glTangent3dvEXT; #endif #ifndef GLEE_C_DEFINED_glTangent3fEXT #define GLEE_C_DEFINED_glTangent3fEXT void __stdcall GLee_Lazy_glTangent3fEXT(GLfloat tx, GLfloat ty, GLfloat tz) {if (GLeeInit()) glTangent3fEXT(tx, ty, tz);} GLEEPFNGLTANGENT3FEXTPROC GLeeFuncPtr_glTangent3fEXT=GLee_Lazy_glTangent3fEXT; #endif #ifndef GLEE_C_DEFINED_glTangent3fvEXT #define GLEE_C_DEFINED_glTangent3fvEXT void __stdcall GLee_Lazy_glTangent3fvEXT(const GLfloat * v) {if (GLeeInit()) glTangent3fvEXT(v);} GLEEPFNGLTANGENT3FVEXTPROC GLeeFuncPtr_glTangent3fvEXT=GLee_Lazy_glTangent3fvEXT; #endif #ifndef GLEE_C_DEFINED_glTangent3iEXT #define GLEE_C_DEFINED_glTangent3iEXT void __stdcall GLee_Lazy_glTangent3iEXT(GLint tx, GLint ty, GLint tz) {if (GLeeInit()) glTangent3iEXT(tx, ty, tz);} GLEEPFNGLTANGENT3IEXTPROC GLeeFuncPtr_glTangent3iEXT=GLee_Lazy_glTangent3iEXT; #endif #ifndef GLEE_C_DEFINED_glTangent3ivEXT #define GLEE_C_DEFINED_glTangent3ivEXT void __stdcall GLee_Lazy_glTangent3ivEXT(const GLint * v) {if (GLeeInit()) glTangent3ivEXT(v);} GLEEPFNGLTANGENT3IVEXTPROC GLeeFuncPtr_glTangent3ivEXT=GLee_Lazy_glTangent3ivEXT; #endif #ifndef GLEE_C_DEFINED_glTangent3sEXT #define GLEE_C_DEFINED_glTangent3sEXT void __stdcall GLee_Lazy_glTangent3sEXT(GLshort tx, GLshort ty, GLshort tz) {if (GLeeInit()) glTangent3sEXT(tx, ty, tz);} GLEEPFNGLTANGENT3SEXTPROC GLeeFuncPtr_glTangent3sEXT=GLee_Lazy_glTangent3sEXT; #endif #ifndef GLEE_C_DEFINED_glTangent3svEXT #define GLEE_C_DEFINED_glTangent3svEXT void __stdcall GLee_Lazy_glTangent3svEXT(const GLshort * v) {if (GLeeInit()) glTangent3svEXT(v);} GLEEPFNGLTANGENT3SVEXTPROC GLeeFuncPtr_glTangent3svEXT=GLee_Lazy_glTangent3svEXT; #endif #ifndef GLEE_C_DEFINED_glBinormal3bEXT #define GLEE_C_DEFINED_glBinormal3bEXT void __stdcall GLee_Lazy_glBinormal3bEXT(GLbyte bx, GLbyte by, GLbyte bz) {if (GLeeInit()) glBinormal3bEXT(bx, by, bz);} GLEEPFNGLBINORMAL3BEXTPROC GLeeFuncPtr_glBinormal3bEXT=GLee_Lazy_glBinormal3bEXT; #endif #ifndef GLEE_C_DEFINED_glBinormal3bvEXT #define GLEE_C_DEFINED_glBinormal3bvEXT void __stdcall GLee_Lazy_glBinormal3bvEXT(const GLbyte * v) {if (GLeeInit()) glBinormal3bvEXT(v);} GLEEPFNGLBINORMAL3BVEXTPROC GLeeFuncPtr_glBinormal3bvEXT=GLee_Lazy_glBinormal3bvEXT; #endif #ifndef GLEE_C_DEFINED_glBinormal3dEXT #define GLEE_C_DEFINED_glBinormal3dEXT void __stdcall GLee_Lazy_glBinormal3dEXT(GLdouble bx, GLdouble by, GLdouble bz) {if (GLeeInit()) glBinormal3dEXT(bx, by, bz);} GLEEPFNGLBINORMAL3DEXTPROC GLeeFuncPtr_glBinormal3dEXT=GLee_Lazy_glBinormal3dEXT; #endif #ifndef GLEE_C_DEFINED_glBinormal3dvEXT #define GLEE_C_DEFINED_glBinormal3dvEXT void __stdcall GLee_Lazy_glBinormal3dvEXT(const GLdouble * v) {if (GLeeInit()) glBinormal3dvEXT(v);} GLEEPFNGLBINORMAL3DVEXTPROC GLeeFuncPtr_glBinormal3dvEXT=GLee_Lazy_glBinormal3dvEXT; #endif #ifndef GLEE_C_DEFINED_glBinormal3fEXT #define GLEE_C_DEFINED_glBinormal3fEXT void __stdcall GLee_Lazy_glBinormal3fEXT(GLfloat bx, GLfloat by, GLfloat bz) {if (GLeeInit()) glBinormal3fEXT(bx, by, bz);} GLEEPFNGLBINORMAL3FEXTPROC GLeeFuncPtr_glBinormal3fEXT=GLee_Lazy_glBinormal3fEXT; #endif #ifndef GLEE_C_DEFINED_glBinormal3fvEXT #define GLEE_C_DEFINED_glBinormal3fvEXT void __stdcall GLee_Lazy_glBinormal3fvEXT(const GLfloat * v) {if (GLeeInit()) glBinormal3fvEXT(v);} GLEEPFNGLBINORMAL3FVEXTPROC GLeeFuncPtr_glBinormal3fvEXT=GLee_Lazy_glBinormal3fvEXT; #endif #ifndef GLEE_C_DEFINED_glBinormal3iEXT #define GLEE_C_DEFINED_glBinormal3iEXT void __stdcall GLee_Lazy_glBinormal3iEXT(GLint bx, GLint by, GLint bz) {if (GLeeInit()) glBinormal3iEXT(bx, by, bz);} GLEEPFNGLBINORMAL3IEXTPROC GLeeFuncPtr_glBinormal3iEXT=GLee_Lazy_glBinormal3iEXT; #endif #ifndef GLEE_C_DEFINED_glBinormal3ivEXT #define GLEE_C_DEFINED_glBinormal3ivEXT void __stdcall GLee_Lazy_glBinormal3ivEXT(const GLint * v) {if (GLeeInit()) glBinormal3ivEXT(v);} GLEEPFNGLBINORMAL3IVEXTPROC GLeeFuncPtr_glBinormal3ivEXT=GLee_Lazy_glBinormal3ivEXT; #endif #ifndef GLEE_C_DEFINED_glBinormal3sEXT #define GLEE_C_DEFINED_glBinormal3sEXT void __stdcall GLee_Lazy_glBinormal3sEXT(GLshort bx, GLshort by, GLshort bz) {if (GLeeInit()) glBinormal3sEXT(bx, by, bz);} GLEEPFNGLBINORMAL3SEXTPROC GLeeFuncPtr_glBinormal3sEXT=GLee_Lazy_glBinormal3sEXT; #endif #ifndef GLEE_C_DEFINED_glBinormal3svEXT #define GLEE_C_DEFINED_glBinormal3svEXT void __stdcall GLee_Lazy_glBinormal3svEXT(const GLshort * v) {if (GLeeInit()) glBinormal3svEXT(v);} GLEEPFNGLBINORMAL3SVEXTPROC GLeeFuncPtr_glBinormal3svEXT=GLee_Lazy_glBinormal3svEXT; #endif #ifndef GLEE_C_DEFINED_glTangentPointerEXT #define GLEE_C_DEFINED_glTangentPointerEXT void __stdcall GLee_Lazy_glTangentPointerEXT(GLenum type, GLsizei stride, const GLvoid * pointer) {if (GLeeInit()) glTangentPointerEXT(type, stride, pointer);} GLEEPFNGLTANGENTPOINTEREXTPROC GLeeFuncPtr_glTangentPointerEXT=GLee_Lazy_glTangentPointerEXT; #endif #ifndef GLEE_C_DEFINED_glBinormalPointerEXT #define GLEE_C_DEFINED_glBinormalPointerEXT void __stdcall GLee_Lazy_glBinormalPointerEXT(GLenum type, GLsizei stride, const GLvoid * pointer) {if (GLeeInit()) glBinormalPointerEXT(type, stride, pointer);} GLEEPFNGLBINORMALPOINTEREXTPROC GLeeFuncPtr_glBinormalPointerEXT=GLee_Lazy_glBinormalPointerEXT; #endif #endif /* GL_EXT_texture_env_combine */ #ifdef __GLEE_GL_EXT_texture_env_combine #endif /* GL_APPLE_specular_vector */ #ifdef __GLEE_GL_APPLE_specular_vector #endif /* GL_APPLE_transform_hint */ #ifdef __GLEE_GL_APPLE_transform_hint #endif /* GL_SGIX_fog_scale */ #ifdef __GLEE_GL_SGIX_fog_scale #endif /* GL_SUNX_constant_data */ #ifdef __GLEE_GL_SUNX_constant_data #ifndef GLEE_C_DEFINED_glFinishTextureSUNX #define GLEE_C_DEFINED_glFinishTextureSUNX void __stdcall GLee_Lazy_glFinishTextureSUNX(void) {if (GLeeInit()) glFinishTextureSUNX();} GLEEPFNGLFINISHTEXTURESUNXPROC GLeeFuncPtr_glFinishTextureSUNX=GLee_Lazy_glFinishTextureSUNX; #endif #endif /* GL_SUN_global_alpha */ #ifdef __GLEE_GL_SUN_global_alpha #ifndef GLEE_C_DEFINED_glGlobalAlphaFactorbSUN #define GLEE_C_DEFINED_glGlobalAlphaFactorbSUN void __stdcall GLee_Lazy_glGlobalAlphaFactorbSUN(GLbyte factor) {if (GLeeInit()) glGlobalAlphaFactorbSUN(factor);} GLEEPFNGLGLOBALALPHAFACTORBSUNPROC GLeeFuncPtr_glGlobalAlphaFactorbSUN=GLee_Lazy_glGlobalAlphaFactorbSUN; #endif #ifndef GLEE_C_DEFINED_glGlobalAlphaFactorsSUN #define GLEE_C_DEFINED_glGlobalAlphaFactorsSUN void __stdcall GLee_Lazy_glGlobalAlphaFactorsSUN(GLshort factor) {if (GLeeInit()) glGlobalAlphaFactorsSUN(factor);} GLEEPFNGLGLOBALALPHAFACTORSSUNPROC GLeeFuncPtr_glGlobalAlphaFactorsSUN=GLee_Lazy_glGlobalAlphaFactorsSUN; #endif #ifndef GLEE_C_DEFINED_glGlobalAlphaFactoriSUN #define GLEE_C_DEFINED_glGlobalAlphaFactoriSUN void __stdcall GLee_Lazy_glGlobalAlphaFactoriSUN(GLint factor) {if (GLeeInit()) glGlobalAlphaFactoriSUN(factor);} GLEEPFNGLGLOBALALPHAFACTORISUNPROC GLeeFuncPtr_glGlobalAlphaFactoriSUN=GLee_Lazy_glGlobalAlphaFactoriSUN; #endif #ifndef GLEE_C_DEFINED_glGlobalAlphaFactorfSUN #define GLEE_C_DEFINED_glGlobalAlphaFactorfSUN void __stdcall GLee_Lazy_glGlobalAlphaFactorfSUN(GLfloat factor) {if (GLeeInit()) glGlobalAlphaFactorfSUN(factor);} GLEEPFNGLGLOBALALPHAFACTORFSUNPROC GLeeFuncPtr_glGlobalAlphaFactorfSUN=GLee_Lazy_glGlobalAlphaFactorfSUN; #endif #ifndef GLEE_C_DEFINED_glGlobalAlphaFactordSUN #define GLEE_C_DEFINED_glGlobalAlphaFactordSUN void __stdcall GLee_Lazy_glGlobalAlphaFactordSUN(GLdouble factor) {if (GLeeInit()) glGlobalAlphaFactordSUN(factor);} GLEEPFNGLGLOBALALPHAFACTORDSUNPROC GLeeFuncPtr_glGlobalAlphaFactordSUN=GLee_Lazy_glGlobalAlphaFactordSUN; #endif #ifndef GLEE_C_DEFINED_glGlobalAlphaFactorubSUN #define GLEE_C_DEFINED_glGlobalAlphaFactorubSUN void __stdcall GLee_Lazy_glGlobalAlphaFactorubSUN(GLubyte factor) {if (GLeeInit()) glGlobalAlphaFactorubSUN(factor);} GLEEPFNGLGLOBALALPHAFACTORUBSUNPROC GLeeFuncPtr_glGlobalAlphaFactorubSUN=GLee_Lazy_glGlobalAlphaFactorubSUN; #endif #ifndef GLEE_C_DEFINED_glGlobalAlphaFactorusSUN #define GLEE_C_DEFINED_glGlobalAlphaFactorusSUN void __stdcall GLee_Lazy_glGlobalAlphaFactorusSUN(GLushort factor) {if (GLeeInit()) glGlobalAlphaFactorusSUN(factor);} GLEEPFNGLGLOBALALPHAFACTORUSSUNPROC GLeeFuncPtr_glGlobalAlphaFactorusSUN=GLee_Lazy_glGlobalAlphaFactorusSUN; #endif #ifndef GLEE_C_DEFINED_glGlobalAlphaFactoruiSUN #define GLEE_C_DEFINED_glGlobalAlphaFactoruiSUN void __stdcall GLee_Lazy_glGlobalAlphaFactoruiSUN(GLuint factor) {if (GLeeInit()) glGlobalAlphaFactoruiSUN(factor);} GLEEPFNGLGLOBALALPHAFACTORUISUNPROC GLeeFuncPtr_glGlobalAlphaFactoruiSUN=GLee_Lazy_glGlobalAlphaFactoruiSUN; #endif #endif /* GL_SUN_triangle_list */ #ifdef __GLEE_GL_SUN_triangle_list #ifndef GLEE_C_DEFINED_glReplacementCodeuiSUN #define GLEE_C_DEFINED_glReplacementCodeuiSUN void __stdcall GLee_Lazy_glReplacementCodeuiSUN(GLuint code) {if (GLeeInit()) glReplacementCodeuiSUN(code);} GLEEPFNGLREPLACEMENTCODEUISUNPROC GLeeFuncPtr_glReplacementCodeuiSUN=GLee_Lazy_glReplacementCodeuiSUN; #endif #ifndef GLEE_C_DEFINED_glReplacementCodeusSUN #define GLEE_C_DEFINED_glReplacementCodeusSUN void __stdcall GLee_Lazy_glReplacementCodeusSUN(GLushort code) {if (GLeeInit()) glReplacementCodeusSUN(code);} GLEEPFNGLREPLACEMENTCODEUSSUNPROC GLeeFuncPtr_glReplacementCodeusSUN=GLee_Lazy_glReplacementCodeusSUN; #endif #ifndef GLEE_C_DEFINED_glReplacementCodeubSUN #define GLEE_C_DEFINED_glReplacementCodeubSUN void __stdcall GLee_Lazy_glReplacementCodeubSUN(GLubyte code) {if (GLeeInit()) glReplacementCodeubSUN(code);} GLEEPFNGLREPLACEMENTCODEUBSUNPROC GLeeFuncPtr_glReplacementCodeubSUN=GLee_Lazy_glReplacementCodeubSUN; #endif #ifndef GLEE_C_DEFINED_glReplacementCodeuivSUN #define GLEE_C_DEFINED_glReplacementCodeuivSUN void __stdcall GLee_Lazy_glReplacementCodeuivSUN(const GLuint * code) {if (GLeeInit()) glReplacementCodeuivSUN(code);} GLEEPFNGLREPLACEMENTCODEUIVSUNPROC GLeeFuncPtr_glReplacementCodeuivSUN=GLee_Lazy_glReplacementCodeuivSUN; #endif #ifndef GLEE_C_DEFINED_glReplacementCodeusvSUN #define GLEE_C_DEFINED_glReplacementCodeusvSUN void __stdcall GLee_Lazy_glReplacementCodeusvSUN(const GLushort * code) {if (GLeeInit()) glReplacementCodeusvSUN(code);} GLEEPFNGLREPLACEMENTCODEUSVSUNPROC GLeeFuncPtr_glReplacementCodeusvSUN=GLee_Lazy_glReplacementCodeusvSUN; #endif #ifndef GLEE_C_DEFINED_glReplacementCodeubvSUN #define GLEE_C_DEFINED_glReplacementCodeubvSUN void __stdcall GLee_Lazy_glReplacementCodeubvSUN(const GLubyte * code) {if (GLeeInit()) glReplacementCodeubvSUN(code);} GLEEPFNGLREPLACEMENTCODEUBVSUNPROC GLeeFuncPtr_glReplacementCodeubvSUN=GLee_Lazy_glReplacementCodeubvSUN; #endif #ifndef GLEE_C_DEFINED_glReplacementCodePointerSUN #define GLEE_C_DEFINED_glReplacementCodePointerSUN void __stdcall GLee_Lazy_glReplacementCodePointerSUN(GLenum type, GLsizei stride, const GLvoid* * pointer) {if (GLeeInit()) glReplacementCodePointerSUN(type, stride, pointer);} GLEEPFNGLREPLACEMENTCODEPOINTERSUNPROC GLeeFuncPtr_glReplacementCodePointerSUN=GLee_Lazy_glReplacementCodePointerSUN; #endif #endif /* GL_SUN_vertex */ #ifdef __GLEE_GL_SUN_vertex #ifndef GLEE_C_DEFINED_glColor4ubVertex2fSUN #define GLEE_C_DEFINED_glColor4ubVertex2fSUN void __stdcall GLee_Lazy_glColor4ubVertex2fSUN(GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y) {if (GLeeInit()) glColor4ubVertex2fSUN(r, g, b, a, x, y);} GLEEPFNGLCOLOR4UBVERTEX2FSUNPROC GLeeFuncPtr_glColor4ubVertex2fSUN=GLee_Lazy_glColor4ubVertex2fSUN; #endif #ifndef GLEE_C_DEFINED_glColor4ubVertex2fvSUN #define GLEE_C_DEFINED_glColor4ubVertex2fvSUN void __stdcall GLee_Lazy_glColor4ubVertex2fvSUN(const GLubyte * c, const GLfloat * v) {if (GLeeInit()) glColor4ubVertex2fvSUN(c, v);} GLEEPFNGLCOLOR4UBVERTEX2FVSUNPROC GLeeFuncPtr_glColor4ubVertex2fvSUN=GLee_Lazy_glColor4ubVertex2fvSUN; #endif #ifndef GLEE_C_DEFINED_glColor4ubVertex3fSUN #define GLEE_C_DEFINED_glColor4ubVertex3fSUN void __stdcall GLee_Lazy_glColor4ubVertex3fSUN(GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z) {if (GLeeInit()) glColor4ubVertex3fSUN(r, g, b, a, x, y, z);} GLEEPFNGLCOLOR4UBVERTEX3FSUNPROC GLeeFuncPtr_glColor4ubVertex3fSUN=GLee_Lazy_glColor4ubVertex3fSUN; #endif #ifndef GLEE_C_DEFINED_glColor4ubVertex3fvSUN #define GLEE_C_DEFINED_glColor4ubVertex3fvSUN void __stdcall GLee_Lazy_glColor4ubVertex3fvSUN(const GLubyte * c, const GLfloat * v) {if (GLeeInit()) glColor4ubVertex3fvSUN(c, v);} GLEEPFNGLCOLOR4UBVERTEX3FVSUNPROC GLeeFuncPtr_glColor4ubVertex3fvSUN=GLee_Lazy_glColor4ubVertex3fvSUN; #endif #ifndef GLEE_C_DEFINED_glColor3fVertex3fSUN #define GLEE_C_DEFINED_glColor3fVertex3fSUN void __stdcall GLee_Lazy_glColor3fVertex3fSUN(GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z) {if (GLeeInit()) glColor3fVertex3fSUN(r, g, b, x, y, z);} GLEEPFNGLCOLOR3FVERTEX3FSUNPROC GLeeFuncPtr_glColor3fVertex3fSUN=GLee_Lazy_glColor3fVertex3fSUN; #endif #ifndef GLEE_C_DEFINED_glColor3fVertex3fvSUN #define GLEE_C_DEFINED_glColor3fVertex3fvSUN void __stdcall GLee_Lazy_glColor3fVertex3fvSUN(const GLfloat * c, const GLfloat * v) {if (GLeeInit()) glColor3fVertex3fvSUN(c, v);} GLEEPFNGLCOLOR3FVERTEX3FVSUNPROC GLeeFuncPtr_glColor3fVertex3fvSUN=GLee_Lazy_glColor3fVertex3fvSUN; #endif #ifndef GLEE_C_DEFINED_glNormal3fVertex3fSUN #define GLEE_C_DEFINED_glNormal3fVertex3fSUN void __stdcall GLee_Lazy_glNormal3fVertex3fSUN(GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z) {if (GLeeInit()) glNormal3fVertex3fSUN(nx, ny, nz, x, y, z);} GLEEPFNGLNORMAL3FVERTEX3FSUNPROC GLeeFuncPtr_glNormal3fVertex3fSUN=GLee_Lazy_glNormal3fVertex3fSUN; #endif #ifndef GLEE_C_DEFINED_glNormal3fVertex3fvSUN #define GLEE_C_DEFINED_glNormal3fVertex3fvSUN void __stdcall GLee_Lazy_glNormal3fVertex3fvSUN(const GLfloat * n, const GLfloat * v) {if (GLeeInit()) glNormal3fVertex3fvSUN(n, v);} GLEEPFNGLNORMAL3FVERTEX3FVSUNPROC GLeeFuncPtr_glNormal3fVertex3fvSUN=GLee_Lazy_glNormal3fVertex3fvSUN; #endif #ifndef GLEE_C_DEFINED_glColor4fNormal3fVertex3fSUN #define GLEE_C_DEFINED_glColor4fNormal3fVertex3fSUN void __stdcall GLee_Lazy_glColor4fNormal3fVertex3fSUN(GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z) {if (GLeeInit()) glColor4fNormal3fVertex3fSUN(r, g, b, a, nx, ny, nz, x, y, z);} GLEEPFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC GLeeFuncPtr_glColor4fNormal3fVertex3fSUN=GLee_Lazy_glColor4fNormal3fVertex3fSUN; #endif #ifndef GLEE_C_DEFINED_glColor4fNormal3fVertex3fvSUN #define GLEE_C_DEFINED_glColor4fNormal3fVertex3fvSUN void __stdcall GLee_Lazy_glColor4fNormal3fVertex3fvSUN(const GLfloat * c, const GLfloat * n, const GLfloat * v) {if (GLeeInit()) glColor4fNormal3fVertex3fvSUN(c, n, v);} GLEEPFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC GLeeFuncPtr_glColor4fNormal3fVertex3fvSUN=GLee_Lazy_glColor4fNormal3fVertex3fvSUN; #endif #ifndef GLEE_C_DEFINED_glTexCoord2fVertex3fSUN #define GLEE_C_DEFINED_glTexCoord2fVertex3fSUN void __stdcall GLee_Lazy_glTexCoord2fVertex3fSUN(GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z) {if (GLeeInit()) glTexCoord2fVertex3fSUN(s, t, x, y, z);} GLEEPFNGLTEXCOORD2FVERTEX3FSUNPROC GLeeFuncPtr_glTexCoord2fVertex3fSUN=GLee_Lazy_glTexCoord2fVertex3fSUN; #endif #ifndef GLEE_C_DEFINED_glTexCoord2fVertex3fvSUN #define GLEE_C_DEFINED_glTexCoord2fVertex3fvSUN void __stdcall GLee_Lazy_glTexCoord2fVertex3fvSUN(const GLfloat * tc, const GLfloat * v) {if (GLeeInit()) glTexCoord2fVertex3fvSUN(tc, v);} GLEEPFNGLTEXCOORD2FVERTEX3FVSUNPROC GLeeFuncPtr_glTexCoord2fVertex3fvSUN=GLee_Lazy_glTexCoord2fVertex3fvSUN; #endif #ifndef GLEE_C_DEFINED_glTexCoord4fVertex4fSUN #define GLEE_C_DEFINED_glTexCoord4fVertex4fSUN void __stdcall GLee_Lazy_glTexCoord4fVertex4fSUN(GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w) {if (GLeeInit()) glTexCoord4fVertex4fSUN(s, t, p, q, x, y, z, w);} GLEEPFNGLTEXCOORD4FVERTEX4FSUNPROC GLeeFuncPtr_glTexCoord4fVertex4fSUN=GLee_Lazy_glTexCoord4fVertex4fSUN; #endif #ifndef GLEE_C_DEFINED_glTexCoord4fVertex4fvSUN #define GLEE_C_DEFINED_glTexCoord4fVertex4fvSUN void __stdcall GLee_Lazy_glTexCoord4fVertex4fvSUN(const GLfloat * tc, const GLfloat * v) {if (GLeeInit()) glTexCoord4fVertex4fvSUN(tc, v);} GLEEPFNGLTEXCOORD4FVERTEX4FVSUNPROC GLeeFuncPtr_glTexCoord4fVertex4fvSUN=GLee_Lazy_glTexCoord4fVertex4fvSUN; #endif #ifndef GLEE_C_DEFINED_glTexCoord2fColor4ubVertex3fSUN #define GLEE_C_DEFINED_glTexCoord2fColor4ubVertex3fSUN void __stdcall GLee_Lazy_glTexCoord2fColor4ubVertex3fSUN(GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z) {if (GLeeInit()) glTexCoord2fColor4ubVertex3fSUN(s, t, r, g, b, a, x, y, z);} GLEEPFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC GLeeFuncPtr_glTexCoord2fColor4ubVertex3fSUN=GLee_Lazy_glTexCoord2fColor4ubVertex3fSUN; #endif #ifndef GLEE_C_DEFINED_glTexCoord2fColor4ubVertex3fvSUN #define GLEE_C_DEFINED_glTexCoord2fColor4ubVertex3fvSUN void __stdcall GLee_Lazy_glTexCoord2fColor4ubVertex3fvSUN(const GLfloat * tc, const GLubyte * c, const GLfloat * v) {if (GLeeInit()) glTexCoord2fColor4ubVertex3fvSUN(tc, c, v);} GLEEPFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC GLeeFuncPtr_glTexCoord2fColor4ubVertex3fvSUN=GLee_Lazy_glTexCoord2fColor4ubVertex3fvSUN; #endif #ifndef GLEE_C_DEFINED_glTexCoord2fColor3fVertex3fSUN #define GLEE_C_DEFINED_glTexCoord2fColor3fVertex3fSUN void __stdcall GLee_Lazy_glTexCoord2fColor3fVertex3fSUN(GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z) {if (GLeeInit()) glTexCoord2fColor3fVertex3fSUN(s, t, r, g, b, x, y, z);} GLEEPFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC GLeeFuncPtr_glTexCoord2fColor3fVertex3fSUN=GLee_Lazy_glTexCoord2fColor3fVertex3fSUN; #endif #ifndef GLEE_C_DEFINED_glTexCoord2fColor3fVertex3fvSUN #define GLEE_C_DEFINED_glTexCoord2fColor3fVertex3fvSUN void __stdcall GLee_Lazy_glTexCoord2fColor3fVertex3fvSUN(const GLfloat * tc, const GLfloat * c, const GLfloat * v) {if (GLeeInit()) glTexCoord2fColor3fVertex3fvSUN(tc, c, v);} GLEEPFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC GLeeFuncPtr_glTexCoord2fColor3fVertex3fvSUN=GLee_Lazy_glTexCoord2fColor3fVertex3fvSUN; #endif #ifndef GLEE_C_DEFINED_glTexCoord2fNormal3fVertex3fSUN #define GLEE_C_DEFINED_glTexCoord2fNormal3fVertex3fSUN void __stdcall GLee_Lazy_glTexCoord2fNormal3fVertex3fSUN(GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z) {if (GLeeInit()) glTexCoord2fNormal3fVertex3fSUN(s, t, nx, ny, nz, x, y, z);} GLEEPFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC GLeeFuncPtr_glTexCoord2fNormal3fVertex3fSUN=GLee_Lazy_glTexCoord2fNormal3fVertex3fSUN; #endif #ifndef GLEE_C_DEFINED_glTexCoord2fNormal3fVertex3fvSUN #define GLEE_C_DEFINED_glTexCoord2fNormal3fVertex3fvSUN void __stdcall GLee_Lazy_glTexCoord2fNormal3fVertex3fvSUN(const GLfloat * tc, const GLfloat * n, const GLfloat * v) {if (GLeeInit()) glTexCoord2fNormal3fVertex3fvSUN(tc, n, v);} GLEEPFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC GLeeFuncPtr_glTexCoord2fNormal3fVertex3fvSUN=GLee_Lazy_glTexCoord2fNormal3fVertex3fvSUN; #endif #ifndef GLEE_C_DEFINED_glTexCoord2fColor4fNormal3fVertex3fSUN #define GLEE_C_DEFINED_glTexCoord2fColor4fNormal3fVertex3fSUN void __stdcall GLee_Lazy_glTexCoord2fColor4fNormal3fVertex3fSUN(GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z) {if (GLeeInit()) glTexCoord2fColor4fNormal3fVertex3fSUN(s, t, r, g, b, a, nx, ny, nz, x, y, z);} GLEEPFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC GLeeFuncPtr_glTexCoord2fColor4fNormal3fVertex3fSUN=GLee_Lazy_glTexCoord2fColor4fNormal3fVertex3fSUN; #endif #ifndef GLEE_C_DEFINED_glTexCoord2fColor4fNormal3fVertex3fvSUN #define GLEE_C_DEFINED_glTexCoord2fColor4fNormal3fVertex3fvSUN void __stdcall GLee_Lazy_glTexCoord2fColor4fNormal3fVertex3fvSUN(const GLfloat * tc, const GLfloat * c, const GLfloat * n, const GLfloat * v) {if (GLeeInit()) glTexCoord2fColor4fNormal3fVertex3fvSUN(tc, c, n, v);} GLEEPFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC GLeeFuncPtr_glTexCoord2fColor4fNormal3fVertex3fvSUN=GLee_Lazy_glTexCoord2fColor4fNormal3fVertex3fvSUN; #endif #ifndef GLEE_C_DEFINED_glTexCoord4fColor4fNormal3fVertex4fSUN #define GLEE_C_DEFINED_glTexCoord4fColor4fNormal3fVertex4fSUN void __stdcall GLee_Lazy_glTexCoord4fColor4fNormal3fVertex4fSUN(GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w) {if (GLeeInit()) glTexCoord4fColor4fNormal3fVertex4fSUN(s, t, p, q, r, g, b, a, nx, ny, nz, x, y, z, w);} GLEEPFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC GLeeFuncPtr_glTexCoord4fColor4fNormal3fVertex4fSUN=GLee_Lazy_glTexCoord4fColor4fNormal3fVertex4fSUN; #endif #ifndef GLEE_C_DEFINED_glTexCoord4fColor4fNormal3fVertex4fvSUN #define GLEE_C_DEFINED_glTexCoord4fColor4fNormal3fVertex4fvSUN void __stdcall GLee_Lazy_glTexCoord4fColor4fNormal3fVertex4fvSUN(const GLfloat * tc, const GLfloat * c, const GLfloat * n, const GLfloat * v) {if (GLeeInit()) glTexCoord4fColor4fNormal3fVertex4fvSUN(tc, c, n, v);} GLEEPFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC GLeeFuncPtr_glTexCoord4fColor4fNormal3fVertex4fvSUN=GLee_Lazy_glTexCoord4fColor4fNormal3fVertex4fvSUN; #endif #ifndef GLEE_C_DEFINED_glReplacementCodeuiVertex3fSUN #define GLEE_C_DEFINED_glReplacementCodeuiVertex3fSUN void __stdcall GLee_Lazy_glReplacementCodeuiVertex3fSUN(GLuint rc, GLfloat x, GLfloat y, GLfloat z) {if (GLeeInit()) glReplacementCodeuiVertex3fSUN(rc, x, y, z);} GLEEPFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC GLeeFuncPtr_glReplacementCodeuiVertex3fSUN=GLee_Lazy_glReplacementCodeuiVertex3fSUN; #endif #ifndef GLEE_C_DEFINED_glReplacementCodeuiVertex3fvSUN #define GLEE_C_DEFINED_glReplacementCodeuiVertex3fvSUN void __stdcall GLee_Lazy_glReplacementCodeuiVertex3fvSUN(const GLuint * rc, const GLfloat * v) {if (GLeeInit()) glReplacementCodeuiVertex3fvSUN(rc, v);} GLEEPFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC GLeeFuncPtr_glReplacementCodeuiVertex3fvSUN=GLee_Lazy_glReplacementCodeuiVertex3fvSUN; #endif #ifndef GLEE_C_DEFINED_glReplacementCodeuiColor4ubVertex3fSUN #define GLEE_C_DEFINED_glReplacementCodeuiColor4ubVertex3fSUN void __stdcall GLee_Lazy_glReplacementCodeuiColor4ubVertex3fSUN(GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z) {if (GLeeInit()) glReplacementCodeuiColor4ubVertex3fSUN(rc, r, g, b, a, x, y, z);} GLEEPFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC GLeeFuncPtr_glReplacementCodeuiColor4ubVertex3fSUN=GLee_Lazy_glReplacementCodeuiColor4ubVertex3fSUN; #endif #ifndef GLEE_C_DEFINED_glReplacementCodeuiColor4ubVertex3fvSUN #define GLEE_C_DEFINED_glReplacementCodeuiColor4ubVertex3fvSUN void __stdcall GLee_Lazy_glReplacementCodeuiColor4ubVertex3fvSUN(const GLuint * rc, const GLubyte * c, const GLfloat * v) {if (GLeeInit()) glReplacementCodeuiColor4ubVertex3fvSUN(rc, c, v);} GLEEPFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC GLeeFuncPtr_glReplacementCodeuiColor4ubVertex3fvSUN=GLee_Lazy_glReplacementCodeuiColor4ubVertex3fvSUN; #endif #ifndef GLEE_C_DEFINED_glReplacementCodeuiColor3fVertex3fSUN #define GLEE_C_DEFINED_glReplacementCodeuiColor3fVertex3fSUN void __stdcall GLee_Lazy_glReplacementCodeuiColor3fVertex3fSUN(GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z) {if (GLeeInit()) glReplacementCodeuiColor3fVertex3fSUN(rc, r, g, b, x, y, z);} GLEEPFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC GLeeFuncPtr_glReplacementCodeuiColor3fVertex3fSUN=GLee_Lazy_glReplacementCodeuiColor3fVertex3fSUN; #endif #ifndef GLEE_C_DEFINED_glReplacementCodeuiColor3fVertex3fvSUN #define GLEE_C_DEFINED_glReplacementCodeuiColor3fVertex3fvSUN void __stdcall GLee_Lazy_glReplacementCodeuiColor3fVertex3fvSUN(const GLuint * rc, const GLfloat * c, const GLfloat * v) {if (GLeeInit()) glReplacementCodeuiColor3fVertex3fvSUN(rc, c, v);} GLEEPFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC GLeeFuncPtr_glReplacementCodeuiColor3fVertex3fvSUN=GLee_Lazy_glReplacementCodeuiColor3fVertex3fvSUN; #endif #ifndef GLEE_C_DEFINED_glReplacementCodeuiNormal3fVertex3fSUN #define GLEE_C_DEFINED_glReplacementCodeuiNormal3fVertex3fSUN void __stdcall GLee_Lazy_glReplacementCodeuiNormal3fVertex3fSUN(GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z) {if (GLeeInit()) glReplacementCodeuiNormal3fVertex3fSUN(rc, nx, ny, nz, x, y, z);} GLEEPFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC GLeeFuncPtr_glReplacementCodeuiNormal3fVertex3fSUN=GLee_Lazy_glReplacementCodeuiNormal3fVertex3fSUN; #endif #ifndef GLEE_C_DEFINED_glReplacementCodeuiNormal3fVertex3fvSUN #define GLEE_C_DEFINED_glReplacementCodeuiNormal3fVertex3fvSUN void __stdcall GLee_Lazy_glReplacementCodeuiNormal3fVertex3fvSUN(const GLuint * rc, const GLfloat * n, const GLfloat * v) {if (GLeeInit()) glReplacementCodeuiNormal3fVertex3fvSUN(rc, n, v);} GLEEPFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC GLeeFuncPtr_glReplacementCodeuiNormal3fVertex3fvSUN=GLee_Lazy_glReplacementCodeuiNormal3fVertex3fvSUN; #endif #ifndef GLEE_C_DEFINED_glReplacementCodeuiColor4fNormal3fVertex3fSUN #define GLEE_C_DEFINED_glReplacementCodeuiColor4fNormal3fVertex3fSUN void __stdcall GLee_Lazy_glReplacementCodeuiColor4fNormal3fVertex3fSUN(GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z) {if (GLeeInit()) glReplacementCodeuiColor4fNormal3fVertex3fSUN(rc, r, g, b, a, nx, ny, nz, x, y, z);} GLEEPFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC GLeeFuncPtr_glReplacementCodeuiColor4fNormal3fVertex3fSUN=GLee_Lazy_glReplacementCodeuiColor4fNormal3fVertex3fSUN; #endif #ifndef GLEE_C_DEFINED_glReplacementCodeuiColor4fNormal3fVertex3fvSUN #define GLEE_C_DEFINED_glReplacementCodeuiColor4fNormal3fVertex3fvSUN void __stdcall GLee_Lazy_glReplacementCodeuiColor4fNormal3fVertex3fvSUN(const GLuint * rc, const GLfloat * c, const GLfloat * n, const GLfloat * v) {if (GLeeInit()) glReplacementCodeuiColor4fNormal3fVertex3fvSUN(rc, c, n, v);} GLEEPFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC GLeeFuncPtr_glReplacementCodeuiColor4fNormal3fVertex3fvSUN=GLee_Lazy_glReplacementCodeuiColor4fNormal3fVertex3fvSUN; #endif #ifndef GLEE_C_DEFINED_glReplacementCodeuiTexCoord2fVertex3fSUN #define GLEE_C_DEFINED_glReplacementCodeuiTexCoord2fVertex3fSUN void __stdcall GLee_Lazy_glReplacementCodeuiTexCoord2fVertex3fSUN(GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z) {if (GLeeInit()) glReplacementCodeuiTexCoord2fVertex3fSUN(rc, s, t, x, y, z);} GLEEPFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC GLeeFuncPtr_glReplacementCodeuiTexCoord2fVertex3fSUN=GLee_Lazy_glReplacementCodeuiTexCoord2fVertex3fSUN; #endif #ifndef GLEE_C_DEFINED_glReplacementCodeuiTexCoord2fVertex3fvSUN #define GLEE_C_DEFINED_glReplacementCodeuiTexCoord2fVertex3fvSUN void __stdcall GLee_Lazy_glReplacementCodeuiTexCoord2fVertex3fvSUN(const GLuint * rc, const GLfloat * tc, const GLfloat * v) {if (GLeeInit()) glReplacementCodeuiTexCoord2fVertex3fvSUN(rc, tc, v);} GLEEPFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC GLeeFuncPtr_glReplacementCodeuiTexCoord2fVertex3fvSUN=GLee_Lazy_glReplacementCodeuiTexCoord2fVertex3fvSUN; #endif #ifndef GLEE_C_DEFINED_glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN #define GLEE_C_DEFINED_glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN void __stdcall GLee_Lazy_glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN(GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z) {if (GLeeInit()) glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN(rc, s, t, nx, ny, nz, x, y, z);} GLEEPFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC GLeeFuncPtr_glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN=GLee_Lazy_glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN; #endif #ifndef GLEE_C_DEFINED_glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN #define GLEE_C_DEFINED_glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN void __stdcall GLee_Lazy_glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN(const GLuint * rc, const GLfloat * tc, const GLfloat * n, const GLfloat * v) {if (GLeeInit()) glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN(rc, tc, n, v);} GLEEPFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC GLeeFuncPtr_glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN=GLee_Lazy_glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN; #endif #ifndef GLEE_C_DEFINED_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN #define GLEE_C_DEFINED_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN void __stdcall GLee_Lazy_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN(GLuint rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z) {if (GLeeInit()) glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN(rc, s, t, r, g, b, a, nx, ny, nz, x, y, z);} GLEEPFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC GLeeFuncPtr_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN=GLee_Lazy_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN; #endif #ifndef GLEE_C_DEFINED_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN #define GLEE_C_DEFINED_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN void __stdcall GLee_Lazy_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN(const GLuint * rc, const GLfloat * tc, const GLfloat * c, const GLfloat * n, const GLfloat * v) {if (GLeeInit()) glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN(rc, tc, c, n, v);} GLEEPFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC GLeeFuncPtr_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN=GLee_Lazy_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN; #endif #endif /* GL_EXT_blend_func_separate */ #ifdef __GLEE_GL_EXT_blend_func_separate #ifndef GLEE_C_DEFINED_glBlendFuncSeparateEXT #define GLEE_C_DEFINED_glBlendFuncSeparateEXT void __stdcall GLee_Lazy_glBlendFuncSeparateEXT(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha) {if (GLeeInit()) glBlendFuncSeparateEXT(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha);} GLEEPFNGLBLENDFUNCSEPARATEEXTPROC GLeeFuncPtr_glBlendFuncSeparateEXT=GLee_Lazy_glBlendFuncSeparateEXT; #endif #endif /* GL_INGR_color_clamp */ #ifdef __GLEE_GL_INGR_color_clamp #endif /* GL_INGR_interlace_read */ #ifdef __GLEE_GL_INGR_interlace_read #endif /* GL_EXT_stencil_wrap */ #ifdef __GLEE_GL_EXT_stencil_wrap #endif /* GL_EXT_422_pixels */ #ifdef __GLEE_GL_EXT_422_pixels #endif /* GL_NV_texgen_reflection */ #ifdef __GLEE_GL_NV_texgen_reflection #endif /* GL_EXT_texture_cube_map */ #ifdef __GLEE_GL_EXT_texture_cube_map #endif /* GL_SUN_convolution_border_modes */ #ifdef __GLEE_GL_SUN_convolution_border_modes #endif /* GL_EXT_texture_env_add */ #ifdef __GLEE_GL_EXT_texture_env_add #endif /* GL_EXT_texture_lod_bias */ #ifdef __GLEE_GL_EXT_texture_lod_bias #endif /* GL_EXT_texture_filter_anisotropic */ #ifdef __GLEE_GL_EXT_texture_filter_anisotropic #endif /* GL_EXT_vertex_weighting */ #ifdef __GLEE_GL_EXT_vertex_weighting #ifndef GLEE_C_DEFINED_glVertexWeightfEXT #define GLEE_C_DEFINED_glVertexWeightfEXT void __stdcall GLee_Lazy_glVertexWeightfEXT(GLfloat weight) {if (GLeeInit()) glVertexWeightfEXT(weight);} GLEEPFNGLVERTEXWEIGHTFEXTPROC GLeeFuncPtr_glVertexWeightfEXT=GLee_Lazy_glVertexWeightfEXT; #endif #ifndef GLEE_C_DEFINED_glVertexWeightfvEXT #define GLEE_C_DEFINED_glVertexWeightfvEXT void __stdcall GLee_Lazy_glVertexWeightfvEXT(const GLfloat * weight) {if (GLeeInit()) glVertexWeightfvEXT(weight);} GLEEPFNGLVERTEXWEIGHTFVEXTPROC GLeeFuncPtr_glVertexWeightfvEXT=GLee_Lazy_glVertexWeightfvEXT; #endif #ifndef GLEE_C_DEFINED_glVertexWeightPointerEXT #define GLEE_C_DEFINED_glVertexWeightPointerEXT void __stdcall GLee_Lazy_glVertexWeightPointerEXT(GLsizei size, GLenum type, GLsizei stride, const GLvoid * pointer) {if (GLeeInit()) glVertexWeightPointerEXT(size, type, stride, pointer);} GLEEPFNGLVERTEXWEIGHTPOINTEREXTPROC GLeeFuncPtr_glVertexWeightPointerEXT=GLee_Lazy_glVertexWeightPointerEXT; #endif #endif /* GL_NV_light_max_exponent */ #ifdef __GLEE_GL_NV_light_max_exponent #endif /* GL_NV_vertex_array_range */ #ifdef __GLEE_GL_NV_vertex_array_range #ifndef GLEE_C_DEFINED_glFlushVertexArrayRangeNV #define GLEE_C_DEFINED_glFlushVertexArrayRangeNV void __stdcall GLee_Lazy_glFlushVertexArrayRangeNV(void) {if (GLeeInit()) glFlushVertexArrayRangeNV();} GLEEPFNGLFLUSHVERTEXARRAYRANGENVPROC GLeeFuncPtr_glFlushVertexArrayRangeNV=GLee_Lazy_glFlushVertexArrayRangeNV; #endif #ifndef GLEE_C_DEFINED_glVertexArrayRangeNV #define GLEE_C_DEFINED_glVertexArrayRangeNV void __stdcall GLee_Lazy_glVertexArrayRangeNV(GLsizei length, const GLvoid * pointer) {if (GLeeInit()) glVertexArrayRangeNV(length, pointer);} GLEEPFNGLVERTEXARRAYRANGENVPROC GLeeFuncPtr_glVertexArrayRangeNV=GLee_Lazy_glVertexArrayRangeNV; #endif #endif /* GL_NV_register_combiners */ #ifdef __GLEE_GL_NV_register_combiners #ifndef GLEE_C_DEFINED_glCombinerParameterfvNV #define GLEE_C_DEFINED_glCombinerParameterfvNV void __stdcall GLee_Lazy_glCombinerParameterfvNV(GLenum pname, const GLfloat * params) {if (GLeeInit()) glCombinerParameterfvNV(pname, params);} GLEEPFNGLCOMBINERPARAMETERFVNVPROC GLeeFuncPtr_glCombinerParameterfvNV=GLee_Lazy_glCombinerParameterfvNV; #endif #ifndef GLEE_C_DEFINED_glCombinerParameterfNV #define GLEE_C_DEFINED_glCombinerParameterfNV void __stdcall GLee_Lazy_glCombinerParameterfNV(GLenum pname, GLfloat param) {if (GLeeInit()) glCombinerParameterfNV(pname, param);} GLEEPFNGLCOMBINERPARAMETERFNVPROC GLeeFuncPtr_glCombinerParameterfNV=GLee_Lazy_glCombinerParameterfNV; #endif #ifndef GLEE_C_DEFINED_glCombinerParameterivNV #define GLEE_C_DEFINED_glCombinerParameterivNV void __stdcall GLee_Lazy_glCombinerParameterivNV(GLenum pname, const GLint * params) {if (GLeeInit()) glCombinerParameterivNV(pname, params);} GLEEPFNGLCOMBINERPARAMETERIVNVPROC GLeeFuncPtr_glCombinerParameterivNV=GLee_Lazy_glCombinerParameterivNV; #endif #ifndef GLEE_C_DEFINED_glCombinerParameteriNV #define GLEE_C_DEFINED_glCombinerParameteriNV void __stdcall GLee_Lazy_glCombinerParameteriNV(GLenum pname, GLint param) {if (GLeeInit()) glCombinerParameteriNV(pname, param);} GLEEPFNGLCOMBINERPARAMETERINVPROC GLeeFuncPtr_glCombinerParameteriNV=GLee_Lazy_glCombinerParameteriNV; #endif #ifndef GLEE_C_DEFINED_glCombinerInputNV #define GLEE_C_DEFINED_glCombinerInputNV void __stdcall GLee_Lazy_glCombinerInputNV(GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage) {if (GLeeInit()) glCombinerInputNV(stage, portion, variable, input, mapping, componentUsage);} GLEEPFNGLCOMBINERINPUTNVPROC GLeeFuncPtr_glCombinerInputNV=GLee_Lazy_glCombinerInputNV; #endif #ifndef GLEE_C_DEFINED_glCombinerOutputNV #define GLEE_C_DEFINED_glCombinerOutputNV void __stdcall GLee_Lazy_glCombinerOutputNV(GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum) {if (GLeeInit()) glCombinerOutputNV(stage, portion, abOutput, cdOutput, sumOutput, scale, bias, abDotProduct, cdDotProduct, muxSum);} GLEEPFNGLCOMBINEROUTPUTNVPROC GLeeFuncPtr_glCombinerOutputNV=GLee_Lazy_glCombinerOutputNV; #endif #ifndef GLEE_C_DEFINED_glFinalCombinerInputNV #define GLEE_C_DEFINED_glFinalCombinerInputNV void __stdcall GLee_Lazy_glFinalCombinerInputNV(GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage) {if (GLeeInit()) glFinalCombinerInputNV(variable, input, mapping, componentUsage);} GLEEPFNGLFINALCOMBINERINPUTNVPROC GLeeFuncPtr_glFinalCombinerInputNV=GLee_Lazy_glFinalCombinerInputNV; #endif #ifndef GLEE_C_DEFINED_glGetCombinerInputParameterfvNV #define GLEE_C_DEFINED_glGetCombinerInputParameterfvNV void __stdcall GLee_Lazy_glGetCombinerInputParameterfvNV(GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat * params) {if (GLeeInit()) glGetCombinerInputParameterfvNV(stage, portion, variable, pname, params);} GLEEPFNGLGETCOMBINERINPUTPARAMETERFVNVPROC GLeeFuncPtr_glGetCombinerInputParameterfvNV=GLee_Lazy_glGetCombinerInputParameterfvNV; #endif #ifndef GLEE_C_DEFINED_glGetCombinerInputParameterivNV #define GLEE_C_DEFINED_glGetCombinerInputParameterivNV void __stdcall GLee_Lazy_glGetCombinerInputParameterivNV(GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint * params) {if (GLeeInit()) glGetCombinerInputParameterivNV(stage, portion, variable, pname, params);} GLEEPFNGLGETCOMBINERINPUTPARAMETERIVNVPROC GLeeFuncPtr_glGetCombinerInputParameterivNV=GLee_Lazy_glGetCombinerInputParameterivNV; #endif #ifndef GLEE_C_DEFINED_glGetCombinerOutputParameterfvNV #define GLEE_C_DEFINED_glGetCombinerOutputParameterfvNV void __stdcall GLee_Lazy_glGetCombinerOutputParameterfvNV(GLenum stage, GLenum portion, GLenum pname, GLfloat * params) {if (GLeeInit()) glGetCombinerOutputParameterfvNV(stage, portion, pname, params);} GLEEPFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC GLeeFuncPtr_glGetCombinerOutputParameterfvNV=GLee_Lazy_glGetCombinerOutputParameterfvNV; #endif #ifndef GLEE_C_DEFINED_glGetCombinerOutputParameterivNV #define GLEE_C_DEFINED_glGetCombinerOutputParameterivNV void __stdcall GLee_Lazy_glGetCombinerOutputParameterivNV(GLenum stage, GLenum portion, GLenum pname, GLint * params) {if (GLeeInit()) glGetCombinerOutputParameterivNV(stage, portion, pname, params);} GLEEPFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC GLeeFuncPtr_glGetCombinerOutputParameterivNV=GLee_Lazy_glGetCombinerOutputParameterivNV; #endif #ifndef GLEE_C_DEFINED_glGetFinalCombinerInputParameterfvNV #define GLEE_C_DEFINED_glGetFinalCombinerInputParameterfvNV void __stdcall GLee_Lazy_glGetFinalCombinerInputParameterfvNV(GLenum variable, GLenum pname, GLfloat * params) {if (GLeeInit()) glGetFinalCombinerInputParameterfvNV(variable, pname, params);} GLEEPFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC GLeeFuncPtr_glGetFinalCombinerInputParameterfvNV=GLee_Lazy_glGetFinalCombinerInputParameterfvNV; #endif #ifndef GLEE_C_DEFINED_glGetFinalCombinerInputParameterivNV #define GLEE_C_DEFINED_glGetFinalCombinerInputParameterivNV void __stdcall GLee_Lazy_glGetFinalCombinerInputParameterivNV(GLenum variable, GLenum pname, GLint * params) {if (GLeeInit()) glGetFinalCombinerInputParameterivNV(variable, pname, params);} GLEEPFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC GLeeFuncPtr_glGetFinalCombinerInputParameterivNV=GLee_Lazy_glGetFinalCombinerInputParameterivNV; #endif #endif /* GL_NV_fog_distance */ #ifdef __GLEE_GL_NV_fog_distance #endif /* GL_NV_texgen_emboss */ #ifdef __GLEE_GL_NV_texgen_emboss #endif /* GL_NV_blend_square */ #ifdef __GLEE_GL_NV_blend_square #endif /* GL_NV_texture_env_combine4 */ #ifdef __GLEE_GL_NV_texture_env_combine4 #endif /* GL_MESA_resize_buffers */ #ifdef __GLEE_GL_MESA_resize_buffers #ifndef GLEE_C_DEFINED_glResizeBuffersMESA #define GLEE_C_DEFINED_glResizeBuffersMESA void __stdcall GLee_Lazy_glResizeBuffersMESA(void) {if (GLeeInit()) glResizeBuffersMESA();} GLEEPFNGLRESIZEBUFFERSMESAPROC GLeeFuncPtr_glResizeBuffersMESA=GLee_Lazy_glResizeBuffersMESA; #endif #endif /* GL_MESA_window_pos */ #ifdef __GLEE_GL_MESA_window_pos #ifndef GLEE_C_DEFINED_glWindowPos2dMESA #define GLEE_C_DEFINED_glWindowPos2dMESA void __stdcall GLee_Lazy_glWindowPos2dMESA(GLdouble x, GLdouble y) {if (GLeeInit()) glWindowPos2dMESA(x, y);} GLEEPFNGLWINDOWPOS2DMESAPROC GLeeFuncPtr_glWindowPos2dMESA=GLee_Lazy_glWindowPos2dMESA; #endif #ifndef GLEE_C_DEFINED_glWindowPos2dvMESA #define GLEE_C_DEFINED_glWindowPos2dvMESA void __stdcall GLee_Lazy_glWindowPos2dvMESA(const GLdouble * v) {if (GLeeInit()) glWindowPos2dvMESA(v);} GLEEPFNGLWINDOWPOS2DVMESAPROC GLeeFuncPtr_glWindowPos2dvMESA=GLee_Lazy_glWindowPos2dvMESA; #endif #ifndef GLEE_C_DEFINED_glWindowPos2fMESA #define GLEE_C_DEFINED_glWindowPos2fMESA void __stdcall GLee_Lazy_glWindowPos2fMESA(GLfloat x, GLfloat y) {if (GLeeInit()) glWindowPos2fMESA(x, y);} GLEEPFNGLWINDOWPOS2FMESAPROC GLeeFuncPtr_glWindowPos2fMESA=GLee_Lazy_glWindowPos2fMESA; #endif #ifndef GLEE_C_DEFINED_glWindowPos2fvMESA #define GLEE_C_DEFINED_glWindowPos2fvMESA void __stdcall GLee_Lazy_glWindowPos2fvMESA(const GLfloat * v) {if (GLeeInit()) glWindowPos2fvMESA(v);} GLEEPFNGLWINDOWPOS2FVMESAPROC GLeeFuncPtr_glWindowPos2fvMESA=GLee_Lazy_glWindowPos2fvMESA; #endif #ifndef GLEE_C_DEFINED_glWindowPos2iMESA #define GLEE_C_DEFINED_glWindowPos2iMESA void __stdcall GLee_Lazy_glWindowPos2iMESA(GLint x, GLint y) {if (GLeeInit()) glWindowPos2iMESA(x, y);} GLEEPFNGLWINDOWPOS2IMESAPROC GLeeFuncPtr_glWindowPos2iMESA=GLee_Lazy_glWindowPos2iMESA; #endif #ifndef GLEE_C_DEFINED_glWindowPos2ivMESA #define GLEE_C_DEFINED_glWindowPos2ivMESA void __stdcall GLee_Lazy_glWindowPos2ivMESA(const GLint * v) {if (GLeeInit()) glWindowPos2ivMESA(v);} GLEEPFNGLWINDOWPOS2IVMESAPROC GLeeFuncPtr_glWindowPos2ivMESA=GLee_Lazy_glWindowPos2ivMESA; #endif #ifndef GLEE_C_DEFINED_glWindowPos2sMESA #define GLEE_C_DEFINED_glWindowPos2sMESA void __stdcall GLee_Lazy_glWindowPos2sMESA(GLshort x, GLshort y) {if (GLeeInit()) glWindowPos2sMESA(x, y);} GLEEPFNGLWINDOWPOS2SMESAPROC GLeeFuncPtr_glWindowPos2sMESA=GLee_Lazy_glWindowPos2sMESA; #endif #ifndef GLEE_C_DEFINED_glWindowPos2svMESA #define GLEE_C_DEFINED_glWindowPos2svMESA void __stdcall GLee_Lazy_glWindowPos2svMESA(const GLshort * v) {if (GLeeInit()) glWindowPos2svMESA(v);} GLEEPFNGLWINDOWPOS2SVMESAPROC GLeeFuncPtr_glWindowPos2svMESA=GLee_Lazy_glWindowPos2svMESA; #endif #ifndef GLEE_C_DEFINED_glWindowPos3dMESA #define GLEE_C_DEFINED_glWindowPos3dMESA void __stdcall GLee_Lazy_glWindowPos3dMESA(GLdouble x, GLdouble y, GLdouble z) {if (GLeeInit()) glWindowPos3dMESA(x, y, z);} GLEEPFNGLWINDOWPOS3DMESAPROC GLeeFuncPtr_glWindowPos3dMESA=GLee_Lazy_glWindowPos3dMESA; #endif #ifndef GLEE_C_DEFINED_glWindowPos3dvMESA #define GLEE_C_DEFINED_glWindowPos3dvMESA void __stdcall GLee_Lazy_glWindowPos3dvMESA(const GLdouble * v) {if (GLeeInit()) glWindowPos3dvMESA(v);} GLEEPFNGLWINDOWPOS3DVMESAPROC GLeeFuncPtr_glWindowPos3dvMESA=GLee_Lazy_glWindowPos3dvMESA; #endif #ifndef GLEE_C_DEFINED_glWindowPos3fMESA #define GLEE_C_DEFINED_glWindowPos3fMESA void __stdcall GLee_Lazy_glWindowPos3fMESA(GLfloat x, GLfloat y, GLfloat z) {if (GLeeInit()) glWindowPos3fMESA(x, y, z);} GLEEPFNGLWINDOWPOS3FMESAPROC GLeeFuncPtr_glWindowPos3fMESA=GLee_Lazy_glWindowPos3fMESA; #endif #ifndef GLEE_C_DEFINED_glWindowPos3fvMESA #define GLEE_C_DEFINED_glWindowPos3fvMESA void __stdcall GLee_Lazy_glWindowPos3fvMESA(const GLfloat * v) {if (GLeeInit()) glWindowPos3fvMESA(v);} GLEEPFNGLWINDOWPOS3FVMESAPROC GLeeFuncPtr_glWindowPos3fvMESA=GLee_Lazy_glWindowPos3fvMESA; #endif #ifndef GLEE_C_DEFINED_glWindowPos3iMESA #define GLEE_C_DEFINED_glWindowPos3iMESA void __stdcall GLee_Lazy_glWindowPos3iMESA(GLint x, GLint y, GLint z) {if (GLeeInit()) glWindowPos3iMESA(x, y, z);} GLEEPFNGLWINDOWPOS3IMESAPROC GLeeFuncPtr_glWindowPos3iMESA=GLee_Lazy_glWindowPos3iMESA; #endif #ifndef GLEE_C_DEFINED_glWindowPos3ivMESA #define GLEE_C_DEFINED_glWindowPos3ivMESA void __stdcall GLee_Lazy_glWindowPos3ivMESA(const GLint * v) {if (GLeeInit()) glWindowPos3ivMESA(v);} GLEEPFNGLWINDOWPOS3IVMESAPROC GLeeFuncPtr_glWindowPos3ivMESA=GLee_Lazy_glWindowPos3ivMESA; #endif #ifndef GLEE_C_DEFINED_glWindowPos3sMESA #define GLEE_C_DEFINED_glWindowPos3sMESA void __stdcall GLee_Lazy_glWindowPos3sMESA(GLshort x, GLshort y, GLshort z) {if (GLeeInit()) glWindowPos3sMESA(x, y, z);} GLEEPFNGLWINDOWPOS3SMESAPROC GLeeFuncPtr_glWindowPos3sMESA=GLee_Lazy_glWindowPos3sMESA; #endif #ifndef GLEE_C_DEFINED_glWindowPos3svMESA #define GLEE_C_DEFINED_glWindowPos3svMESA void __stdcall GLee_Lazy_glWindowPos3svMESA(const GLshort * v) {if (GLeeInit()) glWindowPos3svMESA(v);} GLEEPFNGLWINDOWPOS3SVMESAPROC GLeeFuncPtr_glWindowPos3svMESA=GLee_Lazy_glWindowPos3svMESA; #endif #ifndef GLEE_C_DEFINED_glWindowPos4dMESA #define GLEE_C_DEFINED_glWindowPos4dMESA void __stdcall GLee_Lazy_glWindowPos4dMESA(GLdouble x, GLdouble y, GLdouble z, GLdouble w) {if (GLeeInit()) glWindowPos4dMESA(x, y, z, w);} GLEEPFNGLWINDOWPOS4DMESAPROC GLeeFuncPtr_glWindowPos4dMESA=GLee_Lazy_glWindowPos4dMESA; #endif #ifndef GLEE_C_DEFINED_glWindowPos4dvMESA #define GLEE_C_DEFINED_glWindowPos4dvMESA void __stdcall GLee_Lazy_glWindowPos4dvMESA(const GLdouble * v) {if (GLeeInit()) glWindowPos4dvMESA(v);} GLEEPFNGLWINDOWPOS4DVMESAPROC GLeeFuncPtr_glWindowPos4dvMESA=GLee_Lazy_glWindowPos4dvMESA; #endif #ifndef GLEE_C_DEFINED_glWindowPos4fMESA #define GLEE_C_DEFINED_glWindowPos4fMESA void __stdcall GLee_Lazy_glWindowPos4fMESA(GLfloat x, GLfloat y, GLfloat z, GLfloat w) {if (GLeeInit()) glWindowPos4fMESA(x, y, z, w);} GLEEPFNGLWINDOWPOS4FMESAPROC GLeeFuncPtr_glWindowPos4fMESA=GLee_Lazy_glWindowPos4fMESA; #endif #ifndef GLEE_C_DEFINED_glWindowPos4fvMESA #define GLEE_C_DEFINED_glWindowPos4fvMESA void __stdcall GLee_Lazy_glWindowPos4fvMESA(const GLfloat * v) {if (GLeeInit()) glWindowPos4fvMESA(v);} GLEEPFNGLWINDOWPOS4FVMESAPROC GLeeFuncPtr_glWindowPos4fvMESA=GLee_Lazy_glWindowPos4fvMESA; #endif #ifndef GLEE_C_DEFINED_glWindowPos4iMESA #define GLEE_C_DEFINED_glWindowPos4iMESA void __stdcall GLee_Lazy_glWindowPos4iMESA(GLint x, GLint y, GLint z, GLint w) {if (GLeeInit()) glWindowPos4iMESA(x, y, z, w);} GLEEPFNGLWINDOWPOS4IMESAPROC GLeeFuncPtr_glWindowPos4iMESA=GLee_Lazy_glWindowPos4iMESA; #endif #ifndef GLEE_C_DEFINED_glWindowPos4ivMESA #define GLEE_C_DEFINED_glWindowPos4ivMESA void __stdcall GLee_Lazy_glWindowPos4ivMESA(const GLint * v) {if (GLeeInit()) glWindowPos4ivMESA(v);} GLEEPFNGLWINDOWPOS4IVMESAPROC GLeeFuncPtr_glWindowPos4ivMESA=GLee_Lazy_glWindowPos4ivMESA; #endif #ifndef GLEE_C_DEFINED_glWindowPos4sMESA #define GLEE_C_DEFINED_glWindowPos4sMESA void __stdcall GLee_Lazy_glWindowPos4sMESA(GLshort x, GLshort y, GLshort z, GLshort w) {if (GLeeInit()) glWindowPos4sMESA(x, y, z, w);} GLEEPFNGLWINDOWPOS4SMESAPROC GLeeFuncPtr_glWindowPos4sMESA=GLee_Lazy_glWindowPos4sMESA; #endif #ifndef GLEE_C_DEFINED_glWindowPos4svMESA #define GLEE_C_DEFINED_glWindowPos4svMESA void __stdcall GLee_Lazy_glWindowPos4svMESA(const GLshort * v) {if (GLeeInit()) glWindowPos4svMESA(v);} GLEEPFNGLWINDOWPOS4SVMESAPROC GLeeFuncPtr_glWindowPos4svMESA=GLee_Lazy_glWindowPos4svMESA; #endif #endif /* GL_EXT_texture_compression_s3tc */ #ifdef __GLEE_GL_EXT_texture_compression_s3tc #endif /* GL_IBM_cull_vertex */ #ifdef __GLEE_GL_IBM_cull_vertex #endif /* GL_IBM_multimode_draw_arrays */ #ifdef __GLEE_GL_IBM_multimode_draw_arrays #ifndef GLEE_C_DEFINED_glMultiModeDrawArraysIBM #define GLEE_C_DEFINED_glMultiModeDrawArraysIBM void __stdcall GLee_Lazy_glMultiModeDrawArraysIBM(const GLenum * mode, const GLint * first, const GLsizei * count, GLsizei primcount, GLint modestride) {if (GLeeInit()) glMultiModeDrawArraysIBM(mode, first, count, primcount, modestride);} GLEEPFNGLMULTIMODEDRAWARRAYSIBMPROC GLeeFuncPtr_glMultiModeDrawArraysIBM=GLee_Lazy_glMultiModeDrawArraysIBM; #endif #ifndef GLEE_C_DEFINED_glMultiModeDrawElementsIBM #define GLEE_C_DEFINED_glMultiModeDrawElementsIBM void __stdcall GLee_Lazy_glMultiModeDrawElementsIBM(const GLenum * mode, const GLsizei * count, GLenum type, const GLvoid* const * indices, GLsizei primcount, GLint modestride) {if (GLeeInit()) glMultiModeDrawElementsIBM(mode, count, type, indices, primcount, modestride);} GLEEPFNGLMULTIMODEDRAWELEMENTSIBMPROC GLeeFuncPtr_glMultiModeDrawElementsIBM=GLee_Lazy_glMultiModeDrawElementsIBM; #endif #endif /* GL_IBM_vertex_array_lists */ #ifdef __GLEE_GL_IBM_vertex_array_lists #ifndef GLEE_C_DEFINED_glColorPointerListIBM #define GLEE_C_DEFINED_glColorPointerListIBM void __stdcall GLee_Lazy_glColorPointerListIBM(GLint size, GLenum type, GLint stride, const GLvoid* * pointer, GLint ptrstride) {if (GLeeInit()) glColorPointerListIBM(size, type, stride, pointer, ptrstride);} GLEEPFNGLCOLORPOINTERLISTIBMPROC GLeeFuncPtr_glColorPointerListIBM=GLee_Lazy_glColorPointerListIBM; #endif #ifndef GLEE_C_DEFINED_glSecondaryColorPointerListIBM #define GLEE_C_DEFINED_glSecondaryColorPointerListIBM void __stdcall GLee_Lazy_glSecondaryColorPointerListIBM(GLint size, GLenum type, GLint stride, const GLvoid* * pointer, GLint ptrstride) {if (GLeeInit()) glSecondaryColorPointerListIBM(size, type, stride, pointer, ptrstride);} GLEEPFNGLSECONDARYCOLORPOINTERLISTIBMPROC GLeeFuncPtr_glSecondaryColorPointerListIBM=GLee_Lazy_glSecondaryColorPointerListIBM; #endif #ifndef GLEE_C_DEFINED_glEdgeFlagPointerListIBM #define GLEE_C_DEFINED_glEdgeFlagPointerListIBM void __stdcall GLee_Lazy_glEdgeFlagPointerListIBM(GLint stride, const GLboolean* * pointer, GLint ptrstride) {if (GLeeInit()) glEdgeFlagPointerListIBM(stride, pointer, ptrstride);} GLEEPFNGLEDGEFLAGPOINTERLISTIBMPROC GLeeFuncPtr_glEdgeFlagPointerListIBM=GLee_Lazy_glEdgeFlagPointerListIBM; #endif #ifndef GLEE_C_DEFINED_glFogCoordPointerListIBM #define GLEE_C_DEFINED_glFogCoordPointerListIBM void __stdcall GLee_Lazy_glFogCoordPointerListIBM(GLenum type, GLint stride, const GLvoid* * pointer, GLint ptrstride) {if (GLeeInit()) glFogCoordPointerListIBM(type, stride, pointer, ptrstride);} GLEEPFNGLFOGCOORDPOINTERLISTIBMPROC GLeeFuncPtr_glFogCoordPointerListIBM=GLee_Lazy_glFogCoordPointerListIBM; #endif #ifndef GLEE_C_DEFINED_glIndexPointerListIBM #define GLEE_C_DEFINED_glIndexPointerListIBM void __stdcall GLee_Lazy_glIndexPointerListIBM(GLenum type, GLint stride, const GLvoid* * pointer, GLint ptrstride) {if (GLeeInit()) glIndexPointerListIBM(type, stride, pointer, ptrstride);} GLEEPFNGLINDEXPOINTERLISTIBMPROC GLeeFuncPtr_glIndexPointerListIBM=GLee_Lazy_glIndexPointerListIBM; #endif #ifndef GLEE_C_DEFINED_glNormalPointerListIBM #define GLEE_C_DEFINED_glNormalPointerListIBM void __stdcall GLee_Lazy_glNormalPointerListIBM(GLenum type, GLint stride, const GLvoid* * pointer, GLint ptrstride) {if (GLeeInit()) glNormalPointerListIBM(type, stride, pointer, ptrstride);} GLEEPFNGLNORMALPOINTERLISTIBMPROC GLeeFuncPtr_glNormalPointerListIBM=GLee_Lazy_glNormalPointerListIBM; #endif #ifndef GLEE_C_DEFINED_glTexCoordPointerListIBM #define GLEE_C_DEFINED_glTexCoordPointerListIBM void __stdcall GLee_Lazy_glTexCoordPointerListIBM(GLint size, GLenum type, GLint stride, const GLvoid* * pointer, GLint ptrstride) {if (GLeeInit()) glTexCoordPointerListIBM(size, type, stride, pointer, ptrstride);} GLEEPFNGLTEXCOORDPOINTERLISTIBMPROC GLeeFuncPtr_glTexCoordPointerListIBM=GLee_Lazy_glTexCoordPointerListIBM; #endif #ifndef GLEE_C_DEFINED_glVertexPointerListIBM #define GLEE_C_DEFINED_glVertexPointerListIBM void __stdcall GLee_Lazy_glVertexPointerListIBM(GLint size, GLenum type, GLint stride, const GLvoid* * pointer, GLint ptrstride) {if (GLeeInit()) glVertexPointerListIBM(size, type, stride, pointer, ptrstride);} GLEEPFNGLVERTEXPOINTERLISTIBMPROC GLeeFuncPtr_glVertexPointerListIBM=GLee_Lazy_glVertexPointerListIBM; #endif #endif /* GL_SGIX_subsample */ #ifdef __GLEE_GL_SGIX_subsample #endif /* GL_SGIX_ycrcb_subsample */ #ifdef __GLEE_GL_SGIX_ycrcb_subsample #endif /* GL_SGIX_ycrcba */ #ifdef __GLEE_GL_SGIX_ycrcba #endif /* GL_SGI_depth_pass_instrument */ #ifdef __GLEE_GL_SGI_depth_pass_instrument #endif /* GL_3DFX_texture_compression_FXT1 */ #ifdef __GLEE_GL_3DFX_texture_compression_FXT1 #endif /* GL_3DFX_multisample */ #ifdef __GLEE_GL_3DFX_multisample #endif /* GL_3DFX_tbuffer */ #ifdef __GLEE_GL_3DFX_tbuffer #ifndef GLEE_C_DEFINED_glTbufferMask3DFX #define GLEE_C_DEFINED_glTbufferMask3DFX void __stdcall GLee_Lazy_glTbufferMask3DFX(GLuint mask) {if (GLeeInit()) glTbufferMask3DFX(mask);} GLEEPFNGLTBUFFERMASK3DFXPROC GLeeFuncPtr_glTbufferMask3DFX=GLee_Lazy_glTbufferMask3DFX; #endif #endif /* GL_EXT_multisample */ #ifdef __GLEE_GL_EXT_multisample #ifndef GLEE_C_DEFINED_glSampleMaskEXT #define GLEE_C_DEFINED_glSampleMaskEXT void __stdcall GLee_Lazy_glSampleMaskEXT(GLclampf value, GLboolean invert) {if (GLeeInit()) glSampleMaskEXT(value, invert);} GLEEPFNGLSAMPLEMASKEXTPROC GLeeFuncPtr_glSampleMaskEXT=GLee_Lazy_glSampleMaskEXT; #endif #ifndef GLEE_C_DEFINED_glSamplePatternEXT #define GLEE_C_DEFINED_glSamplePatternEXT void __stdcall GLee_Lazy_glSamplePatternEXT(GLenum pattern) {if (GLeeInit()) glSamplePatternEXT(pattern);} GLEEPFNGLSAMPLEPATTERNEXTPROC GLeeFuncPtr_glSamplePatternEXT=GLee_Lazy_glSamplePatternEXT; #endif #endif /* GL_SGIX_vertex_preclip */ #ifdef __GLEE_GL_SGIX_vertex_preclip #endif /* GL_SGIX_convolution_accuracy */ #ifdef __GLEE_GL_SGIX_convolution_accuracy #endif /* GL_SGIX_resample */ #ifdef __GLEE_GL_SGIX_resample #endif /* GL_SGIS_point_line_texgen */ #ifdef __GLEE_GL_SGIS_point_line_texgen #endif /* GL_SGIS_texture_color_mask */ #ifdef __GLEE_GL_SGIS_texture_color_mask #ifndef GLEE_C_DEFINED_glTextureColorMaskSGIS #define GLEE_C_DEFINED_glTextureColorMaskSGIS void __stdcall GLee_Lazy_glTextureColorMaskSGIS(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha) {if (GLeeInit()) glTextureColorMaskSGIS(red, green, blue, alpha);} GLEEPFNGLTEXTURECOLORMASKSGISPROC GLeeFuncPtr_glTextureColorMaskSGIS=GLee_Lazy_glTextureColorMaskSGIS; #endif #endif /* GL_EXT_texture_env_dot3 */ #ifdef __GLEE_GL_EXT_texture_env_dot3 #endif /* GL_ATI_texture_mirror_once */ #ifdef __GLEE_GL_ATI_texture_mirror_once #endif /* GL_NV_fence */ #ifdef __GLEE_GL_NV_fence #ifndef GLEE_C_DEFINED_glDeleteFencesNV #define GLEE_C_DEFINED_glDeleteFencesNV void __stdcall GLee_Lazy_glDeleteFencesNV(GLsizei n, const GLuint * fences) {if (GLeeInit()) glDeleteFencesNV(n, fences);} GLEEPFNGLDELETEFENCESNVPROC GLeeFuncPtr_glDeleteFencesNV=GLee_Lazy_glDeleteFencesNV; #endif #ifndef GLEE_C_DEFINED_glGenFencesNV #define GLEE_C_DEFINED_glGenFencesNV void __stdcall GLee_Lazy_glGenFencesNV(GLsizei n, GLuint * fences) {if (GLeeInit()) glGenFencesNV(n, fences);} GLEEPFNGLGENFENCESNVPROC GLeeFuncPtr_glGenFencesNV=GLee_Lazy_glGenFencesNV; #endif #ifndef GLEE_C_DEFINED_glIsFenceNV #define GLEE_C_DEFINED_glIsFenceNV GLboolean __stdcall GLee_Lazy_glIsFenceNV(GLuint fence) {if (GLeeInit()) return glIsFenceNV(fence); return (GLboolean)0;} GLEEPFNGLISFENCENVPROC GLeeFuncPtr_glIsFenceNV=GLee_Lazy_glIsFenceNV; #endif #ifndef GLEE_C_DEFINED_glTestFenceNV #define GLEE_C_DEFINED_glTestFenceNV GLboolean __stdcall GLee_Lazy_glTestFenceNV(GLuint fence) {if (GLeeInit()) return glTestFenceNV(fence); return (GLboolean)0;} GLEEPFNGLTESTFENCENVPROC GLeeFuncPtr_glTestFenceNV=GLee_Lazy_glTestFenceNV; #endif #ifndef GLEE_C_DEFINED_glGetFenceivNV #define GLEE_C_DEFINED_glGetFenceivNV void __stdcall GLee_Lazy_glGetFenceivNV(GLuint fence, GLenum pname, GLint * params) {if (GLeeInit()) glGetFenceivNV(fence, pname, params);} GLEEPFNGLGETFENCEIVNVPROC GLeeFuncPtr_glGetFenceivNV=GLee_Lazy_glGetFenceivNV; #endif #ifndef GLEE_C_DEFINED_glFinishFenceNV #define GLEE_C_DEFINED_glFinishFenceNV void __stdcall GLee_Lazy_glFinishFenceNV(GLuint fence) {if (GLeeInit()) glFinishFenceNV(fence);} GLEEPFNGLFINISHFENCENVPROC GLeeFuncPtr_glFinishFenceNV=GLee_Lazy_glFinishFenceNV; #endif #ifndef GLEE_C_DEFINED_glSetFenceNV #define GLEE_C_DEFINED_glSetFenceNV void __stdcall GLee_Lazy_glSetFenceNV(GLuint fence, GLenum condition) {if (GLeeInit()) glSetFenceNV(fence, condition);} GLEEPFNGLSETFENCENVPROC GLeeFuncPtr_glSetFenceNV=GLee_Lazy_glSetFenceNV; #endif #endif /* GL_IBM_texture_mirrored_repeat */ #ifdef __GLEE_GL_IBM_texture_mirrored_repeat #endif /* GL_NV_evaluators */ #ifdef __GLEE_GL_NV_evaluators #ifndef GLEE_C_DEFINED_glMapControlPointsNV #define GLEE_C_DEFINED_glMapControlPointsNV void __stdcall GLee_Lazy_glMapControlPointsNV(GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const GLvoid * points) {if (GLeeInit()) glMapControlPointsNV(target, index, type, ustride, vstride, uorder, vorder, packed, points);} GLEEPFNGLMAPCONTROLPOINTSNVPROC GLeeFuncPtr_glMapControlPointsNV=GLee_Lazy_glMapControlPointsNV; #endif #ifndef GLEE_C_DEFINED_glMapParameterivNV #define GLEE_C_DEFINED_glMapParameterivNV void __stdcall GLee_Lazy_glMapParameterivNV(GLenum target, GLenum pname, const GLint * params) {if (GLeeInit()) glMapParameterivNV(target, pname, params);} GLEEPFNGLMAPPARAMETERIVNVPROC GLeeFuncPtr_glMapParameterivNV=GLee_Lazy_glMapParameterivNV; #endif #ifndef GLEE_C_DEFINED_glMapParameterfvNV #define GLEE_C_DEFINED_glMapParameterfvNV void __stdcall GLee_Lazy_glMapParameterfvNV(GLenum target, GLenum pname, const GLfloat * params) {if (GLeeInit()) glMapParameterfvNV(target, pname, params);} GLEEPFNGLMAPPARAMETERFVNVPROC GLeeFuncPtr_glMapParameterfvNV=GLee_Lazy_glMapParameterfvNV; #endif #ifndef GLEE_C_DEFINED_glGetMapControlPointsNV #define GLEE_C_DEFINED_glGetMapControlPointsNV void __stdcall GLee_Lazy_glGetMapControlPointsNV(GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, GLvoid * points) {if (GLeeInit()) glGetMapControlPointsNV(target, index, type, ustride, vstride, packed, points);} GLEEPFNGLGETMAPCONTROLPOINTSNVPROC GLeeFuncPtr_glGetMapControlPointsNV=GLee_Lazy_glGetMapControlPointsNV; #endif #ifndef GLEE_C_DEFINED_glGetMapParameterivNV #define GLEE_C_DEFINED_glGetMapParameterivNV void __stdcall GLee_Lazy_glGetMapParameterivNV(GLenum target, GLenum pname, GLint * params) {if (GLeeInit()) glGetMapParameterivNV(target, pname, params);} GLEEPFNGLGETMAPPARAMETERIVNVPROC GLeeFuncPtr_glGetMapParameterivNV=GLee_Lazy_glGetMapParameterivNV; #endif #ifndef GLEE_C_DEFINED_glGetMapParameterfvNV #define GLEE_C_DEFINED_glGetMapParameterfvNV void __stdcall GLee_Lazy_glGetMapParameterfvNV(GLenum target, GLenum pname, GLfloat * params) {if (GLeeInit()) glGetMapParameterfvNV(target, pname, params);} GLEEPFNGLGETMAPPARAMETERFVNVPROC GLeeFuncPtr_glGetMapParameterfvNV=GLee_Lazy_glGetMapParameterfvNV; #endif #ifndef GLEE_C_DEFINED_glGetMapAttribParameterivNV #define GLEE_C_DEFINED_glGetMapAttribParameterivNV void __stdcall GLee_Lazy_glGetMapAttribParameterivNV(GLenum target, GLuint index, GLenum pname, GLint * params) {if (GLeeInit()) glGetMapAttribParameterivNV(target, index, pname, params);} GLEEPFNGLGETMAPATTRIBPARAMETERIVNVPROC GLeeFuncPtr_glGetMapAttribParameterivNV=GLee_Lazy_glGetMapAttribParameterivNV; #endif #ifndef GLEE_C_DEFINED_glGetMapAttribParameterfvNV #define GLEE_C_DEFINED_glGetMapAttribParameterfvNV void __stdcall GLee_Lazy_glGetMapAttribParameterfvNV(GLenum target, GLuint index, GLenum pname, GLfloat * params) {if (GLeeInit()) glGetMapAttribParameterfvNV(target, index, pname, params);} GLEEPFNGLGETMAPATTRIBPARAMETERFVNVPROC GLeeFuncPtr_glGetMapAttribParameterfvNV=GLee_Lazy_glGetMapAttribParameterfvNV; #endif #ifndef GLEE_C_DEFINED_glEvalMapsNV #define GLEE_C_DEFINED_glEvalMapsNV void __stdcall GLee_Lazy_glEvalMapsNV(GLenum target, GLenum mode) {if (GLeeInit()) glEvalMapsNV(target, mode);} GLEEPFNGLEVALMAPSNVPROC GLeeFuncPtr_glEvalMapsNV=GLee_Lazy_glEvalMapsNV; #endif #endif /* GL_NV_packed_depth_stencil */ #ifdef __GLEE_GL_NV_packed_depth_stencil #endif /* GL_NV_register_combiners2 */ #ifdef __GLEE_GL_NV_register_combiners2 #ifndef GLEE_C_DEFINED_glCombinerStageParameterfvNV #define GLEE_C_DEFINED_glCombinerStageParameterfvNV void __stdcall GLee_Lazy_glCombinerStageParameterfvNV(GLenum stage, GLenum pname, const GLfloat * params) {if (GLeeInit()) glCombinerStageParameterfvNV(stage, pname, params);} GLEEPFNGLCOMBINERSTAGEPARAMETERFVNVPROC GLeeFuncPtr_glCombinerStageParameterfvNV=GLee_Lazy_glCombinerStageParameterfvNV; #endif #ifndef GLEE_C_DEFINED_glGetCombinerStageParameterfvNV #define GLEE_C_DEFINED_glGetCombinerStageParameterfvNV void __stdcall GLee_Lazy_glGetCombinerStageParameterfvNV(GLenum stage, GLenum pname, GLfloat * params) {if (GLeeInit()) glGetCombinerStageParameterfvNV(stage, pname, params);} GLEEPFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC GLeeFuncPtr_glGetCombinerStageParameterfvNV=GLee_Lazy_glGetCombinerStageParameterfvNV; #endif #endif /* GL_NV_texture_compression_vtc */ #ifdef __GLEE_GL_NV_texture_compression_vtc #endif /* GL_NV_texture_rectangle */ #ifdef __GLEE_GL_NV_texture_rectangle #endif /* GL_NV_texture_shader */ #ifdef __GLEE_GL_NV_texture_shader #endif /* GL_NV_texture_shader2 */ #ifdef __GLEE_GL_NV_texture_shader2 #endif /* GL_NV_vertex_array_range2 */ #ifdef __GLEE_GL_NV_vertex_array_range2 #endif /* GL_NV_vertex_program */ #ifdef __GLEE_GL_NV_vertex_program #ifndef GLEE_C_DEFINED_glAreProgramsResidentNV #define GLEE_C_DEFINED_glAreProgramsResidentNV GLboolean __stdcall GLee_Lazy_glAreProgramsResidentNV(GLsizei n, const GLuint * programs, GLboolean * residences) {if (GLeeInit()) return glAreProgramsResidentNV(n, programs, residences); return (GLboolean)0;} GLEEPFNGLAREPROGRAMSRESIDENTNVPROC GLeeFuncPtr_glAreProgramsResidentNV=GLee_Lazy_glAreProgramsResidentNV; #endif #ifndef GLEE_C_DEFINED_glBindProgramNV #define GLEE_C_DEFINED_glBindProgramNV void __stdcall GLee_Lazy_glBindProgramNV(GLenum target, GLuint id) {if (GLeeInit()) glBindProgramNV(target, id);} GLEEPFNGLBINDPROGRAMNVPROC GLeeFuncPtr_glBindProgramNV=GLee_Lazy_glBindProgramNV; #endif #ifndef GLEE_C_DEFINED_glDeleteProgramsNV #define GLEE_C_DEFINED_glDeleteProgramsNV void __stdcall GLee_Lazy_glDeleteProgramsNV(GLsizei n, const GLuint * programs) {if (GLeeInit()) glDeleteProgramsNV(n, programs);} GLEEPFNGLDELETEPROGRAMSNVPROC GLeeFuncPtr_glDeleteProgramsNV=GLee_Lazy_glDeleteProgramsNV; #endif #ifndef GLEE_C_DEFINED_glExecuteProgramNV #define GLEE_C_DEFINED_glExecuteProgramNV void __stdcall GLee_Lazy_glExecuteProgramNV(GLenum target, GLuint id, const GLfloat * params) {if (GLeeInit()) glExecuteProgramNV(target, id, params);} GLEEPFNGLEXECUTEPROGRAMNVPROC GLeeFuncPtr_glExecuteProgramNV=GLee_Lazy_glExecuteProgramNV; #endif #ifndef GLEE_C_DEFINED_glGenProgramsNV #define GLEE_C_DEFINED_glGenProgramsNV void __stdcall GLee_Lazy_glGenProgramsNV(GLsizei n, GLuint * programs) {if (GLeeInit()) glGenProgramsNV(n, programs);} GLEEPFNGLGENPROGRAMSNVPROC GLeeFuncPtr_glGenProgramsNV=GLee_Lazy_glGenProgramsNV; #endif #ifndef GLEE_C_DEFINED_glGetProgramParameterdvNV #define GLEE_C_DEFINED_glGetProgramParameterdvNV void __stdcall GLee_Lazy_glGetProgramParameterdvNV(GLenum target, GLuint index, GLenum pname, GLdouble * params) {if (GLeeInit()) glGetProgramParameterdvNV(target, index, pname, params);} GLEEPFNGLGETPROGRAMPARAMETERDVNVPROC GLeeFuncPtr_glGetProgramParameterdvNV=GLee_Lazy_glGetProgramParameterdvNV; #endif #ifndef GLEE_C_DEFINED_glGetProgramParameterfvNV #define GLEE_C_DEFINED_glGetProgramParameterfvNV void __stdcall GLee_Lazy_glGetProgramParameterfvNV(GLenum target, GLuint index, GLenum pname, GLfloat * params) {if (GLeeInit()) glGetProgramParameterfvNV(target, index, pname, params);} GLEEPFNGLGETPROGRAMPARAMETERFVNVPROC GLeeFuncPtr_glGetProgramParameterfvNV=GLee_Lazy_glGetProgramParameterfvNV; #endif #ifndef GLEE_C_DEFINED_glGetProgramivNV #define GLEE_C_DEFINED_glGetProgramivNV void __stdcall GLee_Lazy_glGetProgramivNV(GLuint id, GLenum pname, GLint * params) {if (GLeeInit()) glGetProgramivNV(id, pname, params);} GLEEPFNGLGETPROGRAMIVNVPROC GLeeFuncPtr_glGetProgramivNV=GLee_Lazy_glGetProgramivNV; #endif #ifndef GLEE_C_DEFINED_glGetProgramStringNV #define GLEE_C_DEFINED_glGetProgramStringNV void __stdcall GLee_Lazy_glGetProgramStringNV(GLuint id, GLenum pname, GLubyte * program) {if (GLeeInit()) glGetProgramStringNV(id, pname, program);} GLEEPFNGLGETPROGRAMSTRINGNVPROC GLeeFuncPtr_glGetProgramStringNV=GLee_Lazy_glGetProgramStringNV; #endif #ifndef GLEE_C_DEFINED_glGetTrackMatrixivNV #define GLEE_C_DEFINED_glGetTrackMatrixivNV void __stdcall GLee_Lazy_glGetTrackMatrixivNV(GLenum target, GLuint address, GLenum pname, GLint * params) {if (GLeeInit()) glGetTrackMatrixivNV(target, address, pname, params);} GLEEPFNGLGETTRACKMATRIXIVNVPROC GLeeFuncPtr_glGetTrackMatrixivNV=GLee_Lazy_glGetTrackMatrixivNV; #endif #ifndef GLEE_C_DEFINED_glGetVertexAttribdvNV #define GLEE_C_DEFINED_glGetVertexAttribdvNV void __stdcall GLee_Lazy_glGetVertexAttribdvNV(GLuint index, GLenum pname, GLdouble * params) {if (GLeeInit()) glGetVertexAttribdvNV(index, pname, params);} GLEEPFNGLGETVERTEXATTRIBDVNVPROC GLeeFuncPtr_glGetVertexAttribdvNV=GLee_Lazy_glGetVertexAttribdvNV; #endif #ifndef GLEE_C_DEFINED_glGetVertexAttribfvNV #define GLEE_C_DEFINED_glGetVertexAttribfvNV void __stdcall GLee_Lazy_glGetVertexAttribfvNV(GLuint index, GLenum pname, GLfloat * params) {if (GLeeInit()) glGetVertexAttribfvNV(index, pname, params);} GLEEPFNGLGETVERTEXATTRIBFVNVPROC GLeeFuncPtr_glGetVertexAttribfvNV=GLee_Lazy_glGetVertexAttribfvNV; #endif #ifndef GLEE_C_DEFINED_glGetVertexAttribivNV #define GLEE_C_DEFINED_glGetVertexAttribivNV void __stdcall GLee_Lazy_glGetVertexAttribivNV(GLuint index, GLenum pname, GLint * params) {if (GLeeInit()) glGetVertexAttribivNV(index, pname, params);} GLEEPFNGLGETVERTEXATTRIBIVNVPROC GLeeFuncPtr_glGetVertexAttribivNV=GLee_Lazy_glGetVertexAttribivNV; #endif #ifndef GLEE_C_DEFINED_glGetVertexAttribPointervNV #define GLEE_C_DEFINED_glGetVertexAttribPointervNV void __stdcall GLee_Lazy_glGetVertexAttribPointervNV(GLuint index, GLenum pname, GLvoid* * pointer) {if (GLeeInit()) glGetVertexAttribPointervNV(index, pname, pointer);} GLEEPFNGLGETVERTEXATTRIBPOINTERVNVPROC GLeeFuncPtr_glGetVertexAttribPointervNV=GLee_Lazy_glGetVertexAttribPointervNV; #endif #ifndef GLEE_C_DEFINED_glIsProgramNV #define GLEE_C_DEFINED_glIsProgramNV GLboolean __stdcall GLee_Lazy_glIsProgramNV(GLuint id) {if (GLeeInit()) return glIsProgramNV(id); return (GLboolean)0;} GLEEPFNGLISPROGRAMNVPROC GLeeFuncPtr_glIsProgramNV=GLee_Lazy_glIsProgramNV; #endif #ifndef GLEE_C_DEFINED_glLoadProgramNV #define GLEE_C_DEFINED_glLoadProgramNV void __stdcall GLee_Lazy_glLoadProgramNV(GLenum target, GLuint id, GLsizei len, const GLubyte * program) {if (GLeeInit()) glLoadProgramNV(target, id, len, program);} GLEEPFNGLLOADPROGRAMNVPROC GLeeFuncPtr_glLoadProgramNV=GLee_Lazy_glLoadProgramNV; #endif #ifndef GLEE_C_DEFINED_glProgramParameter4dNV #define GLEE_C_DEFINED_glProgramParameter4dNV void __stdcall GLee_Lazy_glProgramParameter4dNV(GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) {if (GLeeInit()) glProgramParameter4dNV(target, index, x, y, z, w);} GLEEPFNGLPROGRAMPARAMETER4DNVPROC GLeeFuncPtr_glProgramParameter4dNV=GLee_Lazy_glProgramParameter4dNV; #endif #ifndef GLEE_C_DEFINED_glProgramParameter4dvNV #define GLEE_C_DEFINED_glProgramParameter4dvNV void __stdcall GLee_Lazy_glProgramParameter4dvNV(GLenum target, GLuint index, const GLdouble * v) {if (GLeeInit()) glProgramParameter4dvNV(target, index, v);} GLEEPFNGLPROGRAMPARAMETER4DVNVPROC GLeeFuncPtr_glProgramParameter4dvNV=GLee_Lazy_glProgramParameter4dvNV; #endif #ifndef GLEE_C_DEFINED_glProgramParameter4fNV #define GLEE_C_DEFINED_glProgramParameter4fNV void __stdcall GLee_Lazy_glProgramParameter4fNV(GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w) {if (GLeeInit()) glProgramParameter4fNV(target, index, x, y, z, w);} GLEEPFNGLPROGRAMPARAMETER4FNVPROC GLeeFuncPtr_glProgramParameter4fNV=GLee_Lazy_glProgramParameter4fNV; #endif #ifndef GLEE_C_DEFINED_glProgramParameter4fvNV #define GLEE_C_DEFINED_glProgramParameter4fvNV void __stdcall GLee_Lazy_glProgramParameter4fvNV(GLenum target, GLuint index, const GLfloat * v) {if (GLeeInit()) glProgramParameter4fvNV(target, index, v);} GLEEPFNGLPROGRAMPARAMETER4FVNVPROC GLeeFuncPtr_glProgramParameter4fvNV=GLee_Lazy_glProgramParameter4fvNV; #endif #ifndef GLEE_C_DEFINED_glProgramParameters4dvNV #define GLEE_C_DEFINED_glProgramParameters4dvNV void __stdcall GLee_Lazy_glProgramParameters4dvNV(GLenum target, GLuint index, GLuint count, const GLdouble * v) {if (GLeeInit()) glProgramParameters4dvNV(target, index, count, v);} GLEEPFNGLPROGRAMPARAMETERS4DVNVPROC GLeeFuncPtr_glProgramParameters4dvNV=GLee_Lazy_glProgramParameters4dvNV; #endif #ifndef GLEE_C_DEFINED_glProgramParameters4fvNV #define GLEE_C_DEFINED_glProgramParameters4fvNV void __stdcall GLee_Lazy_glProgramParameters4fvNV(GLenum target, GLuint index, GLuint count, const GLfloat * v) {if (GLeeInit()) glProgramParameters4fvNV(target, index, count, v);} GLEEPFNGLPROGRAMPARAMETERS4FVNVPROC GLeeFuncPtr_glProgramParameters4fvNV=GLee_Lazy_glProgramParameters4fvNV; #endif #ifndef GLEE_C_DEFINED_glRequestResidentProgramsNV #define GLEE_C_DEFINED_glRequestResidentProgramsNV void __stdcall GLee_Lazy_glRequestResidentProgramsNV(GLsizei n, const GLuint * programs) {if (GLeeInit()) glRequestResidentProgramsNV(n, programs);} GLEEPFNGLREQUESTRESIDENTPROGRAMSNVPROC GLeeFuncPtr_glRequestResidentProgramsNV=GLee_Lazy_glRequestResidentProgramsNV; #endif #ifndef GLEE_C_DEFINED_glTrackMatrixNV #define GLEE_C_DEFINED_glTrackMatrixNV void __stdcall GLee_Lazy_glTrackMatrixNV(GLenum target, GLuint address, GLenum matrix, GLenum transform) {if (GLeeInit()) glTrackMatrixNV(target, address, matrix, transform);} GLEEPFNGLTRACKMATRIXNVPROC GLeeFuncPtr_glTrackMatrixNV=GLee_Lazy_glTrackMatrixNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttribPointerNV #define GLEE_C_DEFINED_glVertexAttribPointerNV void __stdcall GLee_Lazy_glVertexAttribPointerNV(GLuint index, GLint fsize, GLenum type, GLsizei stride, const GLvoid * pointer) {if (GLeeInit()) glVertexAttribPointerNV(index, fsize, type, stride, pointer);} GLEEPFNGLVERTEXATTRIBPOINTERNVPROC GLeeFuncPtr_glVertexAttribPointerNV=GLee_Lazy_glVertexAttribPointerNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib1dNV #define GLEE_C_DEFINED_glVertexAttrib1dNV void __stdcall GLee_Lazy_glVertexAttrib1dNV(GLuint index, GLdouble x) {if (GLeeInit()) glVertexAttrib1dNV(index, x);} GLEEPFNGLVERTEXATTRIB1DNVPROC GLeeFuncPtr_glVertexAttrib1dNV=GLee_Lazy_glVertexAttrib1dNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib1dvNV #define GLEE_C_DEFINED_glVertexAttrib1dvNV void __stdcall GLee_Lazy_glVertexAttrib1dvNV(GLuint index, const GLdouble * v) {if (GLeeInit()) glVertexAttrib1dvNV(index, v);} GLEEPFNGLVERTEXATTRIB1DVNVPROC GLeeFuncPtr_glVertexAttrib1dvNV=GLee_Lazy_glVertexAttrib1dvNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib1fNV #define GLEE_C_DEFINED_glVertexAttrib1fNV void __stdcall GLee_Lazy_glVertexAttrib1fNV(GLuint index, GLfloat x) {if (GLeeInit()) glVertexAttrib1fNV(index, x);} GLEEPFNGLVERTEXATTRIB1FNVPROC GLeeFuncPtr_glVertexAttrib1fNV=GLee_Lazy_glVertexAttrib1fNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib1fvNV #define GLEE_C_DEFINED_glVertexAttrib1fvNV void __stdcall GLee_Lazy_glVertexAttrib1fvNV(GLuint index, const GLfloat * v) {if (GLeeInit()) glVertexAttrib1fvNV(index, v);} GLEEPFNGLVERTEXATTRIB1FVNVPROC GLeeFuncPtr_glVertexAttrib1fvNV=GLee_Lazy_glVertexAttrib1fvNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib1sNV #define GLEE_C_DEFINED_glVertexAttrib1sNV void __stdcall GLee_Lazy_glVertexAttrib1sNV(GLuint index, GLshort x) {if (GLeeInit()) glVertexAttrib1sNV(index, x);} GLEEPFNGLVERTEXATTRIB1SNVPROC GLeeFuncPtr_glVertexAttrib1sNV=GLee_Lazy_glVertexAttrib1sNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib1svNV #define GLEE_C_DEFINED_glVertexAttrib1svNV void __stdcall GLee_Lazy_glVertexAttrib1svNV(GLuint index, const GLshort * v) {if (GLeeInit()) glVertexAttrib1svNV(index, v);} GLEEPFNGLVERTEXATTRIB1SVNVPROC GLeeFuncPtr_glVertexAttrib1svNV=GLee_Lazy_glVertexAttrib1svNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib2dNV #define GLEE_C_DEFINED_glVertexAttrib2dNV void __stdcall GLee_Lazy_glVertexAttrib2dNV(GLuint index, GLdouble x, GLdouble y) {if (GLeeInit()) glVertexAttrib2dNV(index, x, y);} GLEEPFNGLVERTEXATTRIB2DNVPROC GLeeFuncPtr_glVertexAttrib2dNV=GLee_Lazy_glVertexAttrib2dNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib2dvNV #define GLEE_C_DEFINED_glVertexAttrib2dvNV void __stdcall GLee_Lazy_glVertexAttrib2dvNV(GLuint index, const GLdouble * v) {if (GLeeInit()) glVertexAttrib2dvNV(index, v);} GLEEPFNGLVERTEXATTRIB2DVNVPROC GLeeFuncPtr_glVertexAttrib2dvNV=GLee_Lazy_glVertexAttrib2dvNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib2fNV #define GLEE_C_DEFINED_glVertexAttrib2fNV void __stdcall GLee_Lazy_glVertexAttrib2fNV(GLuint index, GLfloat x, GLfloat y) {if (GLeeInit()) glVertexAttrib2fNV(index, x, y);} GLEEPFNGLVERTEXATTRIB2FNVPROC GLeeFuncPtr_glVertexAttrib2fNV=GLee_Lazy_glVertexAttrib2fNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib2fvNV #define GLEE_C_DEFINED_glVertexAttrib2fvNV void __stdcall GLee_Lazy_glVertexAttrib2fvNV(GLuint index, const GLfloat * v) {if (GLeeInit()) glVertexAttrib2fvNV(index, v);} GLEEPFNGLVERTEXATTRIB2FVNVPROC GLeeFuncPtr_glVertexAttrib2fvNV=GLee_Lazy_glVertexAttrib2fvNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib2sNV #define GLEE_C_DEFINED_glVertexAttrib2sNV void __stdcall GLee_Lazy_glVertexAttrib2sNV(GLuint index, GLshort x, GLshort y) {if (GLeeInit()) glVertexAttrib2sNV(index, x, y);} GLEEPFNGLVERTEXATTRIB2SNVPROC GLeeFuncPtr_glVertexAttrib2sNV=GLee_Lazy_glVertexAttrib2sNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib2svNV #define GLEE_C_DEFINED_glVertexAttrib2svNV void __stdcall GLee_Lazy_glVertexAttrib2svNV(GLuint index, const GLshort * v) {if (GLeeInit()) glVertexAttrib2svNV(index, v);} GLEEPFNGLVERTEXATTRIB2SVNVPROC GLeeFuncPtr_glVertexAttrib2svNV=GLee_Lazy_glVertexAttrib2svNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib3dNV #define GLEE_C_DEFINED_glVertexAttrib3dNV void __stdcall GLee_Lazy_glVertexAttrib3dNV(GLuint index, GLdouble x, GLdouble y, GLdouble z) {if (GLeeInit()) glVertexAttrib3dNV(index, x, y, z);} GLEEPFNGLVERTEXATTRIB3DNVPROC GLeeFuncPtr_glVertexAttrib3dNV=GLee_Lazy_glVertexAttrib3dNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib3dvNV #define GLEE_C_DEFINED_glVertexAttrib3dvNV void __stdcall GLee_Lazy_glVertexAttrib3dvNV(GLuint index, const GLdouble * v) {if (GLeeInit()) glVertexAttrib3dvNV(index, v);} GLEEPFNGLVERTEXATTRIB3DVNVPROC GLeeFuncPtr_glVertexAttrib3dvNV=GLee_Lazy_glVertexAttrib3dvNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib3fNV #define GLEE_C_DEFINED_glVertexAttrib3fNV void __stdcall GLee_Lazy_glVertexAttrib3fNV(GLuint index, GLfloat x, GLfloat y, GLfloat z) {if (GLeeInit()) glVertexAttrib3fNV(index, x, y, z);} GLEEPFNGLVERTEXATTRIB3FNVPROC GLeeFuncPtr_glVertexAttrib3fNV=GLee_Lazy_glVertexAttrib3fNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib3fvNV #define GLEE_C_DEFINED_glVertexAttrib3fvNV void __stdcall GLee_Lazy_glVertexAttrib3fvNV(GLuint index, const GLfloat * v) {if (GLeeInit()) glVertexAttrib3fvNV(index, v);} GLEEPFNGLVERTEXATTRIB3FVNVPROC GLeeFuncPtr_glVertexAttrib3fvNV=GLee_Lazy_glVertexAttrib3fvNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib3sNV #define GLEE_C_DEFINED_glVertexAttrib3sNV void __stdcall GLee_Lazy_glVertexAttrib3sNV(GLuint index, GLshort x, GLshort y, GLshort z) {if (GLeeInit()) glVertexAttrib3sNV(index, x, y, z);} GLEEPFNGLVERTEXATTRIB3SNVPROC GLeeFuncPtr_glVertexAttrib3sNV=GLee_Lazy_glVertexAttrib3sNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib3svNV #define GLEE_C_DEFINED_glVertexAttrib3svNV void __stdcall GLee_Lazy_glVertexAttrib3svNV(GLuint index, const GLshort * v) {if (GLeeInit()) glVertexAttrib3svNV(index, v);} GLEEPFNGLVERTEXATTRIB3SVNVPROC GLeeFuncPtr_glVertexAttrib3svNV=GLee_Lazy_glVertexAttrib3svNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4dNV #define GLEE_C_DEFINED_glVertexAttrib4dNV void __stdcall GLee_Lazy_glVertexAttrib4dNV(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) {if (GLeeInit()) glVertexAttrib4dNV(index, x, y, z, w);} GLEEPFNGLVERTEXATTRIB4DNVPROC GLeeFuncPtr_glVertexAttrib4dNV=GLee_Lazy_glVertexAttrib4dNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4dvNV #define GLEE_C_DEFINED_glVertexAttrib4dvNV void __stdcall GLee_Lazy_glVertexAttrib4dvNV(GLuint index, const GLdouble * v) {if (GLeeInit()) glVertexAttrib4dvNV(index, v);} GLEEPFNGLVERTEXATTRIB4DVNVPROC GLeeFuncPtr_glVertexAttrib4dvNV=GLee_Lazy_glVertexAttrib4dvNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4fNV #define GLEE_C_DEFINED_glVertexAttrib4fNV void __stdcall GLee_Lazy_glVertexAttrib4fNV(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w) {if (GLeeInit()) glVertexAttrib4fNV(index, x, y, z, w);} GLEEPFNGLVERTEXATTRIB4FNVPROC GLeeFuncPtr_glVertexAttrib4fNV=GLee_Lazy_glVertexAttrib4fNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4fvNV #define GLEE_C_DEFINED_glVertexAttrib4fvNV void __stdcall GLee_Lazy_glVertexAttrib4fvNV(GLuint index, const GLfloat * v) {if (GLeeInit()) glVertexAttrib4fvNV(index, v);} GLEEPFNGLVERTEXATTRIB4FVNVPROC GLeeFuncPtr_glVertexAttrib4fvNV=GLee_Lazy_glVertexAttrib4fvNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4sNV #define GLEE_C_DEFINED_glVertexAttrib4sNV void __stdcall GLee_Lazy_glVertexAttrib4sNV(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w) {if (GLeeInit()) glVertexAttrib4sNV(index, x, y, z, w);} GLEEPFNGLVERTEXATTRIB4SNVPROC GLeeFuncPtr_glVertexAttrib4sNV=GLee_Lazy_glVertexAttrib4sNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4svNV #define GLEE_C_DEFINED_glVertexAttrib4svNV void __stdcall GLee_Lazy_glVertexAttrib4svNV(GLuint index, const GLshort * v) {if (GLeeInit()) glVertexAttrib4svNV(index, v);} GLEEPFNGLVERTEXATTRIB4SVNVPROC GLeeFuncPtr_glVertexAttrib4svNV=GLee_Lazy_glVertexAttrib4svNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4ubNV #define GLEE_C_DEFINED_glVertexAttrib4ubNV void __stdcall GLee_Lazy_glVertexAttrib4ubNV(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w) {if (GLeeInit()) glVertexAttrib4ubNV(index, x, y, z, w);} GLEEPFNGLVERTEXATTRIB4UBNVPROC GLeeFuncPtr_glVertexAttrib4ubNV=GLee_Lazy_glVertexAttrib4ubNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4ubvNV #define GLEE_C_DEFINED_glVertexAttrib4ubvNV void __stdcall GLee_Lazy_glVertexAttrib4ubvNV(GLuint index, const GLubyte * v) {if (GLeeInit()) glVertexAttrib4ubvNV(index, v);} GLEEPFNGLVERTEXATTRIB4UBVNVPROC GLeeFuncPtr_glVertexAttrib4ubvNV=GLee_Lazy_glVertexAttrib4ubvNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttribs1dvNV #define GLEE_C_DEFINED_glVertexAttribs1dvNV void __stdcall GLee_Lazy_glVertexAttribs1dvNV(GLuint index, GLsizei count, const GLdouble * v) {if (GLeeInit()) glVertexAttribs1dvNV(index, count, v);} GLEEPFNGLVERTEXATTRIBS1DVNVPROC GLeeFuncPtr_glVertexAttribs1dvNV=GLee_Lazy_glVertexAttribs1dvNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttribs1fvNV #define GLEE_C_DEFINED_glVertexAttribs1fvNV void __stdcall GLee_Lazy_glVertexAttribs1fvNV(GLuint index, GLsizei count, const GLfloat * v) {if (GLeeInit()) glVertexAttribs1fvNV(index, count, v);} GLEEPFNGLVERTEXATTRIBS1FVNVPROC GLeeFuncPtr_glVertexAttribs1fvNV=GLee_Lazy_glVertexAttribs1fvNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttribs1svNV #define GLEE_C_DEFINED_glVertexAttribs1svNV void __stdcall GLee_Lazy_glVertexAttribs1svNV(GLuint index, GLsizei count, const GLshort * v) {if (GLeeInit()) glVertexAttribs1svNV(index, count, v);} GLEEPFNGLVERTEXATTRIBS1SVNVPROC GLeeFuncPtr_glVertexAttribs1svNV=GLee_Lazy_glVertexAttribs1svNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttribs2dvNV #define GLEE_C_DEFINED_glVertexAttribs2dvNV void __stdcall GLee_Lazy_glVertexAttribs2dvNV(GLuint index, GLsizei count, const GLdouble * v) {if (GLeeInit()) glVertexAttribs2dvNV(index, count, v);} GLEEPFNGLVERTEXATTRIBS2DVNVPROC GLeeFuncPtr_glVertexAttribs2dvNV=GLee_Lazy_glVertexAttribs2dvNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttribs2fvNV #define GLEE_C_DEFINED_glVertexAttribs2fvNV void __stdcall GLee_Lazy_glVertexAttribs2fvNV(GLuint index, GLsizei count, const GLfloat * v) {if (GLeeInit()) glVertexAttribs2fvNV(index, count, v);} GLEEPFNGLVERTEXATTRIBS2FVNVPROC GLeeFuncPtr_glVertexAttribs2fvNV=GLee_Lazy_glVertexAttribs2fvNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttribs2svNV #define GLEE_C_DEFINED_glVertexAttribs2svNV void __stdcall GLee_Lazy_glVertexAttribs2svNV(GLuint index, GLsizei count, const GLshort * v) {if (GLeeInit()) glVertexAttribs2svNV(index, count, v);} GLEEPFNGLVERTEXATTRIBS2SVNVPROC GLeeFuncPtr_glVertexAttribs2svNV=GLee_Lazy_glVertexAttribs2svNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttribs3dvNV #define GLEE_C_DEFINED_glVertexAttribs3dvNV void __stdcall GLee_Lazy_glVertexAttribs3dvNV(GLuint index, GLsizei count, const GLdouble * v) {if (GLeeInit()) glVertexAttribs3dvNV(index, count, v);} GLEEPFNGLVERTEXATTRIBS3DVNVPROC GLeeFuncPtr_glVertexAttribs3dvNV=GLee_Lazy_glVertexAttribs3dvNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttribs3fvNV #define GLEE_C_DEFINED_glVertexAttribs3fvNV void __stdcall GLee_Lazy_glVertexAttribs3fvNV(GLuint index, GLsizei count, const GLfloat * v) {if (GLeeInit()) glVertexAttribs3fvNV(index, count, v);} GLEEPFNGLVERTEXATTRIBS3FVNVPROC GLeeFuncPtr_glVertexAttribs3fvNV=GLee_Lazy_glVertexAttribs3fvNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttribs3svNV #define GLEE_C_DEFINED_glVertexAttribs3svNV void __stdcall GLee_Lazy_glVertexAttribs3svNV(GLuint index, GLsizei count, const GLshort * v) {if (GLeeInit()) glVertexAttribs3svNV(index, count, v);} GLEEPFNGLVERTEXATTRIBS3SVNVPROC GLeeFuncPtr_glVertexAttribs3svNV=GLee_Lazy_glVertexAttribs3svNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttribs4dvNV #define GLEE_C_DEFINED_glVertexAttribs4dvNV void __stdcall GLee_Lazy_glVertexAttribs4dvNV(GLuint index, GLsizei count, const GLdouble * v) {if (GLeeInit()) glVertexAttribs4dvNV(index, count, v);} GLEEPFNGLVERTEXATTRIBS4DVNVPROC GLeeFuncPtr_glVertexAttribs4dvNV=GLee_Lazy_glVertexAttribs4dvNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttribs4fvNV #define GLEE_C_DEFINED_glVertexAttribs4fvNV void __stdcall GLee_Lazy_glVertexAttribs4fvNV(GLuint index, GLsizei count, const GLfloat * v) {if (GLeeInit()) glVertexAttribs4fvNV(index, count, v);} GLEEPFNGLVERTEXATTRIBS4FVNVPROC GLeeFuncPtr_glVertexAttribs4fvNV=GLee_Lazy_glVertexAttribs4fvNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttribs4svNV #define GLEE_C_DEFINED_glVertexAttribs4svNV void __stdcall GLee_Lazy_glVertexAttribs4svNV(GLuint index, GLsizei count, const GLshort * v) {if (GLeeInit()) glVertexAttribs4svNV(index, count, v);} GLEEPFNGLVERTEXATTRIBS4SVNVPROC GLeeFuncPtr_glVertexAttribs4svNV=GLee_Lazy_glVertexAttribs4svNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttribs4ubvNV #define GLEE_C_DEFINED_glVertexAttribs4ubvNV void __stdcall GLee_Lazy_glVertexAttribs4ubvNV(GLuint index, GLsizei count, const GLubyte * v) {if (GLeeInit()) glVertexAttribs4ubvNV(index, count, v);} GLEEPFNGLVERTEXATTRIBS4UBVNVPROC GLeeFuncPtr_glVertexAttribs4ubvNV=GLee_Lazy_glVertexAttribs4ubvNV; #endif #endif /* GL_SGIX_texture_coordinate_clamp */ #ifdef __GLEE_GL_SGIX_texture_coordinate_clamp #endif /* GL_SGIX_scalebias_hint */ #ifdef __GLEE_GL_SGIX_scalebias_hint #endif /* GL_OML_interlace */ #ifdef __GLEE_GL_OML_interlace #endif /* GL_OML_subsample */ #ifdef __GLEE_GL_OML_subsample #endif /* GL_OML_resample */ #ifdef __GLEE_GL_OML_resample #endif /* GL_NV_copy_depth_to_color */ #ifdef __GLEE_GL_NV_copy_depth_to_color #endif /* GL_ATI_envmap_bumpmap */ #ifdef __GLEE_GL_ATI_envmap_bumpmap #ifndef GLEE_C_DEFINED_glTexBumpParameterivATI #define GLEE_C_DEFINED_glTexBumpParameterivATI void __stdcall GLee_Lazy_glTexBumpParameterivATI(GLenum pname, const GLint * param) {if (GLeeInit()) glTexBumpParameterivATI(pname, param);} GLEEPFNGLTEXBUMPPARAMETERIVATIPROC GLeeFuncPtr_glTexBumpParameterivATI=GLee_Lazy_glTexBumpParameterivATI; #endif #ifndef GLEE_C_DEFINED_glTexBumpParameterfvATI #define GLEE_C_DEFINED_glTexBumpParameterfvATI void __stdcall GLee_Lazy_glTexBumpParameterfvATI(GLenum pname, const GLfloat * param) {if (GLeeInit()) glTexBumpParameterfvATI(pname, param);} GLEEPFNGLTEXBUMPPARAMETERFVATIPROC GLeeFuncPtr_glTexBumpParameterfvATI=GLee_Lazy_glTexBumpParameterfvATI; #endif #ifndef GLEE_C_DEFINED_glGetTexBumpParameterivATI #define GLEE_C_DEFINED_glGetTexBumpParameterivATI void __stdcall GLee_Lazy_glGetTexBumpParameterivATI(GLenum pname, GLint * param) {if (GLeeInit()) glGetTexBumpParameterivATI(pname, param);} GLEEPFNGLGETTEXBUMPPARAMETERIVATIPROC GLeeFuncPtr_glGetTexBumpParameterivATI=GLee_Lazy_glGetTexBumpParameterivATI; #endif #ifndef GLEE_C_DEFINED_glGetTexBumpParameterfvATI #define GLEE_C_DEFINED_glGetTexBumpParameterfvATI void __stdcall GLee_Lazy_glGetTexBumpParameterfvATI(GLenum pname, GLfloat * param) {if (GLeeInit()) glGetTexBumpParameterfvATI(pname, param);} GLEEPFNGLGETTEXBUMPPARAMETERFVATIPROC GLeeFuncPtr_glGetTexBumpParameterfvATI=GLee_Lazy_glGetTexBumpParameterfvATI; #endif #endif /* GL_ATI_fragment_shader */ #ifdef __GLEE_GL_ATI_fragment_shader #ifndef GLEE_C_DEFINED_glGenFragmentShadersATI #define GLEE_C_DEFINED_glGenFragmentShadersATI GLuint __stdcall GLee_Lazy_glGenFragmentShadersATI(GLuint range) {if (GLeeInit()) return glGenFragmentShadersATI(range); return (GLuint)0;} GLEEPFNGLGENFRAGMENTSHADERSATIPROC GLeeFuncPtr_glGenFragmentShadersATI=GLee_Lazy_glGenFragmentShadersATI; #endif #ifndef GLEE_C_DEFINED_glBindFragmentShaderATI #define GLEE_C_DEFINED_glBindFragmentShaderATI void __stdcall GLee_Lazy_glBindFragmentShaderATI(GLuint id) {if (GLeeInit()) glBindFragmentShaderATI(id);} GLEEPFNGLBINDFRAGMENTSHADERATIPROC GLeeFuncPtr_glBindFragmentShaderATI=GLee_Lazy_glBindFragmentShaderATI; #endif #ifndef GLEE_C_DEFINED_glDeleteFragmentShaderATI #define GLEE_C_DEFINED_glDeleteFragmentShaderATI void __stdcall GLee_Lazy_glDeleteFragmentShaderATI(GLuint id) {if (GLeeInit()) glDeleteFragmentShaderATI(id);} GLEEPFNGLDELETEFRAGMENTSHADERATIPROC GLeeFuncPtr_glDeleteFragmentShaderATI=GLee_Lazy_glDeleteFragmentShaderATI; #endif #ifndef GLEE_C_DEFINED_glBeginFragmentShaderATI #define GLEE_C_DEFINED_glBeginFragmentShaderATI void __stdcall GLee_Lazy_glBeginFragmentShaderATI(void) {if (GLeeInit()) glBeginFragmentShaderATI();} GLEEPFNGLBEGINFRAGMENTSHADERATIPROC GLeeFuncPtr_glBeginFragmentShaderATI=GLee_Lazy_glBeginFragmentShaderATI; #endif #ifndef GLEE_C_DEFINED_glEndFragmentShaderATI #define GLEE_C_DEFINED_glEndFragmentShaderATI void __stdcall GLee_Lazy_glEndFragmentShaderATI(void) {if (GLeeInit()) glEndFragmentShaderATI();} GLEEPFNGLENDFRAGMENTSHADERATIPROC GLeeFuncPtr_glEndFragmentShaderATI=GLee_Lazy_glEndFragmentShaderATI; #endif #ifndef GLEE_C_DEFINED_glPassTexCoordATI #define GLEE_C_DEFINED_glPassTexCoordATI void __stdcall GLee_Lazy_glPassTexCoordATI(GLuint dst, GLuint coord, GLenum swizzle) {if (GLeeInit()) glPassTexCoordATI(dst, coord, swizzle);} GLEEPFNGLPASSTEXCOORDATIPROC GLeeFuncPtr_glPassTexCoordATI=GLee_Lazy_glPassTexCoordATI; #endif #ifndef GLEE_C_DEFINED_glSampleMapATI #define GLEE_C_DEFINED_glSampleMapATI void __stdcall GLee_Lazy_glSampleMapATI(GLuint dst, GLuint interp, GLenum swizzle) {if (GLeeInit()) glSampleMapATI(dst, interp, swizzle);} GLEEPFNGLSAMPLEMAPATIPROC GLeeFuncPtr_glSampleMapATI=GLee_Lazy_glSampleMapATI; #endif #ifndef GLEE_C_DEFINED_glColorFragmentOp1ATI #define GLEE_C_DEFINED_glColorFragmentOp1ATI void __stdcall GLee_Lazy_glColorFragmentOp1ATI(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod) {if (GLeeInit()) glColorFragmentOp1ATI(op, dst, dstMask, dstMod, arg1, arg1Rep, arg1Mod);} GLEEPFNGLCOLORFRAGMENTOP1ATIPROC GLeeFuncPtr_glColorFragmentOp1ATI=GLee_Lazy_glColorFragmentOp1ATI; #endif #ifndef GLEE_C_DEFINED_glColorFragmentOp2ATI #define GLEE_C_DEFINED_glColorFragmentOp2ATI void __stdcall GLee_Lazy_glColorFragmentOp2ATI(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod) {if (GLeeInit()) glColorFragmentOp2ATI(op, dst, dstMask, dstMod, arg1, arg1Rep, arg1Mod, arg2, arg2Rep, arg2Mod);} GLEEPFNGLCOLORFRAGMENTOP2ATIPROC GLeeFuncPtr_glColorFragmentOp2ATI=GLee_Lazy_glColorFragmentOp2ATI; #endif #ifndef GLEE_C_DEFINED_glColorFragmentOp3ATI #define GLEE_C_DEFINED_glColorFragmentOp3ATI void __stdcall GLee_Lazy_glColorFragmentOp3ATI(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod) {if (GLeeInit()) glColorFragmentOp3ATI(op, dst, dstMask, dstMod, arg1, arg1Rep, arg1Mod, arg2, arg2Rep, arg2Mod, arg3, arg3Rep, arg3Mod);} GLEEPFNGLCOLORFRAGMENTOP3ATIPROC GLeeFuncPtr_glColorFragmentOp3ATI=GLee_Lazy_glColorFragmentOp3ATI; #endif #ifndef GLEE_C_DEFINED_glAlphaFragmentOp1ATI #define GLEE_C_DEFINED_glAlphaFragmentOp1ATI void __stdcall GLee_Lazy_glAlphaFragmentOp1ATI(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod) {if (GLeeInit()) glAlphaFragmentOp1ATI(op, dst, dstMod, arg1, arg1Rep, arg1Mod);} GLEEPFNGLALPHAFRAGMENTOP1ATIPROC GLeeFuncPtr_glAlphaFragmentOp1ATI=GLee_Lazy_glAlphaFragmentOp1ATI; #endif #ifndef GLEE_C_DEFINED_glAlphaFragmentOp2ATI #define GLEE_C_DEFINED_glAlphaFragmentOp2ATI void __stdcall GLee_Lazy_glAlphaFragmentOp2ATI(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod) {if (GLeeInit()) glAlphaFragmentOp2ATI(op, dst, dstMod, arg1, arg1Rep, arg1Mod, arg2, arg2Rep, arg2Mod);} GLEEPFNGLALPHAFRAGMENTOP2ATIPROC GLeeFuncPtr_glAlphaFragmentOp2ATI=GLee_Lazy_glAlphaFragmentOp2ATI; #endif #ifndef GLEE_C_DEFINED_glAlphaFragmentOp3ATI #define GLEE_C_DEFINED_glAlphaFragmentOp3ATI void __stdcall GLee_Lazy_glAlphaFragmentOp3ATI(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod) {if (GLeeInit()) glAlphaFragmentOp3ATI(op, dst, dstMod, arg1, arg1Rep, arg1Mod, arg2, arg2Rep, arg2Mod, arg3, arg3Rep, arg3Mod);} GLEEPFNGLALPHAFRAGMENTOP3ATIPROC GLeeFuncPtr_glAlphaFragmentOp3ATI=GLee_Lazy_glAlphaFragmentOp3ATI; #endif #ifndef GLEE_C_DEFINED_glSetFragmentShaderConstantATI #define GLEE_C_DEFINED_glSetFragmentShaderConstantATI void __stdcall GLee_Lazy_glSetFragmentShaderConstantATI(GLuint dst, const GLfloat * value) {if (GLeeInit()) glSetFragmentShaderConstantATI(dst, value);} GLEEPFNGLSETFRAGMENTSHADERCONSTANTATIPROC GLeeFuncPtr_glSetFragmentShaderConstantATI=GLee_Lazy_glSetFragmentShaderConstantATI; #endif #endif /* GL_ATI_pn_triangles */ #ifdef __GLEE_GL_ATI_pn_triangles #ifndef GLEE_C_DEFINED_glPNTrianglesiATI #define GLEE_C_DEFINED_glPNTrianglesiATI void __stdcall GLee_Lazy_glPNTrianglesiATI(GLenum pname, GLint param) {if (GLeeInit()) glPNTrianglesiATI(pname, param);} GLEEPFNGLPNTRIANGLESIATIPROC GLeeFuncPtr_glPNTrianglesiATI=GLee_Lazy_glPNTrianglesiATI; #endif #ifndef GLEE_C_DEFINED_glPNTrianglesfATI #define GLEE_C_DEFINED_glPNTrianglesfATI void __stdcall GLee_Lazy_glPNTrianglesfATI(GLenum pname, GLfloat param) {if (GLeeInit()) glPNTrianglesfATI(pname, param);} GLEEPFNGLPNTRIANGLESFATIPROC GLeeFuncPtr_glPNTrianglesfATI=GLee_Lazy_glPNTrianglesfATI; #endif #endif /* GL_ATI_vertex_array_object */ #ifdef __GLEE_GL_ATI_vertex_array_object #ifndef GLEE_C_DEFINED_glNewObjectBufferATI #define GLEE_C_DEFINED_glNewObjectBufferATI GLuint __stdcall GLee_Lazy_glNewObjectBufferATI(GLsizei size, const GLvoid * pointer, GLenum usage) {if (GLeeInit()) return glNewObjectBufferATI(size, pointer, usage); return (GLuint)0;} GLEEPFNGLNEWOBJECTBUFFERATIPROC GLeeFuncPtr_glNewObjectBufferATI=GLee_Lazy_glNewObjectBufferATI; #endif #ifndef GLEE_C_DEFINED_glIsObjectBufferATI #define GLEE_C_DEFINED_glIsObjectBufferATI GLboolean __stdcall GLee_Lazy_glIsObjectBufferATI(GLuint buffer) {if (GLeeInit()) return glIsObjectBufferATI(buffer); return (GLboolean)0;} GLEEPFNGLISOBJECTBUFFERATIPROC GLeeFuncPtr_glIsObjectBufferATI=GLee_Lazy_glIsObjectBufferATI; #endif #ifndef GLEE_C_DEFINED_glUpdateObjectBufferATI #define GLEE_C_DEFINED_glUpdateObjectBufferATI void __stdcall GLee_Lazy_glUpdateObjectBufferATI(GLuint buffer, GLuint offset, GLsizei size, const GLvoid * pointer, GLenum preserve) {if (GLeeInit()) glUpdateObjectBufferATI(buffer, offset, size, pointer, preserve);} GLEEPFNGLUPDATEOBJECTBUFFERATIPROC GLeeFuncPtr_glUpdateObjectBufferATI=GLee_Lazy_glUpdateObjectBufferATI; #endif #ifndef GLEE_C_DEFINED_glGetObjectBufferfvATI #define GLEE_C_DEFINED_glGetObjectBufferfvATI void __stdcall GLee_Lazy_glGetObjectBufferfvATI(GLuint buffer, GLenum pname, GLfloat * params) {if (GLeeInit()) glGetObjectBufferfvATI(buffer, pname, params);} GLEEPFNGLGETOBJECTBUFFERFVATIPROC GLeeFuncPtr_glGetObjectBufferfvATI=GLee_Lazy_glGetObjectBufferfvATI; #endif #ifndef GLEE_C_DEFINED_glGetObjectBufferivATI #define GLEE_C_DEFINED_glGetObjectBufferivATI void __stdcall GLee_Lazy_glGetObjectBufferivATI(GLuint buffer, GLenum pname, GLint * params) {if (GLeeInit()) glGetObjectBufferivATI(buffer, pname, params);} GLEEPFNGLGETOBJECTBUFFERIVATIPROC GLeeFuncPtr_glGetObjectBufferivATI=GLee_Lazy_glGetObjectBufferivATI; #endif #ifndef GLEE_C_DEFINED_glFreeObjectBufferATI #define GLEE_C_DEFINED_glFreeObjectBufferATI void __stdcall GLee_Lazy_glFreeObjectBufferATI(GLuint buffer) {if (GLeeInit()) glFreeObjectBufferATI(buffer);} GLEEPFNGLFREEOBJECTBUFFERATIPROC GLeeFuncPtr_glFreeObjectBufferATI=GLee_Lazy_glFreeObjectBufferATI; #endif #ifndef GLEE_C_DEFINED_glArrayObjectATI #define GLEE_C_DEFINED_glArrayObjectATI void __stdcall GLee_Lazy_glArrayObjectATI(GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset) {if (GLeeInit()) glArrayObjectATI(array, size, type, stride, buffer, offset);} GLEEPFNGLARRAYOBJECTATIPROC GLeeFuncPtr_glArrayObjectATI=GLee_Lazy_glArrayObjectATI; #endif #ifndef GLEE_C_DEFINED_glGetArrayObjectfvATI #define GLEE_C_DEFINED_glGetArrayObjectfvATI void __stdcall GLee_Lazy_glGetArrayObjectfvATI(GLenum array, GLenum pname, GLfloat * params) {if (GLeeInit()) glGetArrayObjectfvATI(array, pname, params);} GLEEPFNGLGETARRAYOBJECTFVATIPROC GLeeFuncPtr_glGetArrayObjectfvATI=GLee_Lazy_glGetArrayObjectfvATI; #endif #ifndef GLEE_C_DEFINED_glGetArrayObjectivATI #define GLEE_C_DEFINED_glGetArrayObjectivATI void __stdcall GLee_Lazy_glGetArrayObjectivATI(GLenum array, GLenum pname, GLint * params) {if (GLeeInit()) glGetArrayObjectivATI(array, pname, params);} GLEEPFNGLGETARRAYOBJECTIVATIPROC GLeeFuncPtr_glGetArrayObjectivATI=GLee_Lazy_glGetArrayObjectivATI; #endif #ifndef GLEE_C_DEFINED_glVariantArrayObjectATI #define GLEE_C_DEFINED_glVariantArrayObjectATI void __stdcall GLee_Lazy_glVariantArrayObjectATI(GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset) {if (GLeeInit()) glVariantArrayObjectATI(id, type, stride, buffer, offset);} GLEEPFNGLVARIANTARRAYOBJECTATIPROC GLeeFuncPtr_glVariantArrayObjectATI=GLee_Lazy_glVariantArrayObjectATI; #endif #ifndef GLEE_C_DEFINED_glGetVariantArrayObjectfvATI #define GLEE_C_DEFINED_glGetVariantArrayObjectfvATI void __stdcall GLee_Lazy_glGetVariantArrayObjectfvATI(GLuint id, GLenum pname, GLfloat * params) {if (GLeeInit()) glGetVariantArrayObjectfvATI(id, pname, params);} GLEEPFNGLGETVARIANTARRAYOBJECTFVATIPROC GLeeFuncPtr_glGetVariantArrayObjectfvATI=GLee_Lazy_glGetVariantArrayObjectfvATI; #endif #ifndef GLEE_C_DEFINED_glGetVariantArrayObjectivATI #define GLEE_C_DEFINED_glGetVariantArrayObjectivATI void __stdcall GLee_Lazy_glGetVariantArrayObjectivATI(GLuint id, GLenum pname, GLint * params) {if (GLeeInit()) glGetVariantArrayObjectivATI(id, pname, params);} GLEEPFNGLGETVARIANTARRAYOBJECTIVATIPROC GLeeFuncPtr_glGetVariantArrayObjectivATI=GLee_Lazy_glGetVariantArrayObjectivATI; #endif #endif /* GL_EXT_vertex_shader */ #ifdef __GLEE_GL_EXT_vertex_shader #ifndef GLEE_C_DEFINED_glBeginVertexShaderEXT #define GLEE_C_DEFINED_glBeginVertexShaderEXT void __stdcall GLee_Lazy_glBeginVertexShaderEXT(void) {if (GLeeInit()) glBeginVertexShaderEXT();} GLEEPFNGLBEGINVERTEXSHADEREXTPROC GLeeFuncPtr_glBeginVertexShaderEXT=GLee_Lazy_glBeginVertexShaderEXT; #endif #ifndef GLEE_C_DEFINED_glEndVertexShaderEXT #define GLEE_C_DEFINED_glEndVertexShaderEXT void __stdcall GLee_Lazy_glEndVertexShaderEXT(void) {if (GLeeInit()) glEndVertexShaderEXT();} GLEEPFNGLENDVERTEXSHADEREXTPROC GLeeFuncPtr_glEndVertexShaderEXT=GLee_Lazy_glEndVertexShaderEXT; #endif #ifndef GLEE_C_DEFINED_glBindVertexShaderEXT #define GLEE_C_DEFINED_glBindVertexShaderEXT void __stdcall GLee_Lazy_glBindVertexShaderEXT(GLuint id) {if (GLeeInit()) glBindVertexShaderEXT(id);} GLEEPFNGLBINDVERTEXSHADEREXTPROC GLeeFuncPtr_glBindVertexShaderEXT=GLee_Lazy_glBindVertexShaderEXT; #endif #ifndef GLEE_C_DEFINED_glGenVertexShadersEXT #define GLEE_C_DEFINED_glGenVertexShadersEXT GLuint __stdcall GLee_Lazy_glGenVertexShadersEXT(GLuint range) {if (GLeeInit()) return glGenVertexShadersEXT(range); return (GLuint)0;} GLEEPFNGLGENVERTEXSHADERSEXTPROC GLeeFuncPtr_glGenVertexShadersEXT=GLee_Lazy_glGenVertexShadersEXT; #endif #ifndef GLEE_C_DEFINED_glDeleteVertexShaderEXT #define GLEE_C_DEFINED_glDeleteVertexShaderEXT void __stdcall GLee_Lazy_glDeleteVertexShaderEXT(GLuint id) {if (GLeeInit()) glDeleteVertexShaderEXT(id);} GLEEPFNGLDELETEVERTEXSHADEREXTPROC GLeeFuncPtr_glDeleteVertexShaderEXT=GLee_Lazy_glDeleteVertexShaderEXT; #endif #ifndef GLEE_C_DEFINED_glShaderOp1EXT #define GLEE_C_DEFINED_glShaderOp1EXT void __stdcall GLee_Lazy_glShaderOp1EXT(GLenum op, GLuint res, GLuint arg1) {if (GLeeInit()) glShaderOp1EXT(op, res, arg1);} GLEEPFNGLSHADEROP1EXTPROC GLeeFuncPtr_glShaderOp1EXT=GLee_Lazy_glShaderOp1EXT; #endif #ifndef GLEE_C_DEFINED_glShaderOp2EXT #define GLEE_C_DEFINED_glShaderOp2EXT void __stdcall GLee_Lazy_glShaderOp2EXT(GLenum op, GLuint res, GLuint arg1, GLuint arg2) {if (GLeeInit()) glShaderOp2EXT(op, res, arg1, arg2);} GLEEPFNGLSHADEROP2EXTPROC GLeeFuncPtr_glShaderOp2EXT=GLee_Lazy_glShaderOp2EXT; #endif #ifndef GLEE_C_DEFINED_glShaderOp3EXT #define GLEE_C_DEFINED_glShaderOp3EXT void __stdcall GLee_Lazy_glShaderOp3EXT(GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3) {if (GLeeInit()) glShaderOp3EXT(op, res, arg1, arg2, arg3);} GLEEPFNGLSHADEROP3EXTPROC GLeeFuncPtr_glShaderOp3EXT=GLee_Lazy_glShaderOp3EXT; #endif #ifndef GLEE_C_DEFINED_glSwizzleEXT #define GLEE_C_DEFINED_glSwizzleEXT void __stdcall GLee_Lazy_glSwizzleEXT(GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW) {if (GLeeInit()) glSwizzleEXT(res, in, outX, outY, outZ, outW);} GLEEPFNGLSWIZZLEEXTPROC GLeeFuncPtr_glSwizzleEXT=GLee_Lazy_glSwizzleEXT; #endif #ifndef GLEE_C_DEFINED_glWriteMaskEXT #define GLEE_C_DEFINED_glWriteMaskEXT void __stdcall GLee_Lazy_glWriteMaskEXT(GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW) {if (GLeeInit()) glWriteMaskEXT(res, in, outX, outY, outZ, outW);} GLEEPFNGLWRITEMASKEXTPROC GLeeFuncPtr_glWriteMaskEXT=GLee_Lazy_glWriteMaskEXT; #endif #ifndef GLEE_C_DEFINED_glInsertComponentEXT #define GLEE_C_DEFINED_glInsertComponentEXT void __stdcall GLee_Lazy_glInsertComponentEXT(GLuint res, GLuint src, GLuint num) {if (GLeeInit()) glInsertComponentEXT(res, src, num);} GLEEPFNGLINSERTCOMPONENTEXTPROC GLeeFuncPtr_glInsertComponentEXT=GLee_Lazy_glInsertComponentEXT; #endif #ifndef GLEE_C_DEFINED_glExtractComponentEXT #define GLEE_C_DEFINED_glExtractComponentEXT void __stdcall GLee_Lazy_glExtractComponentEXT(GLuint res, GLuint src, GLuint num) {if (GLeeInit()) glExtractComponentEXT(res, src, num);} GLEEPFNGLEXTRACTCOMPONENTEXTPROC GLeeFuncPtr_glExtractComponentEXT=GLee_Lazy_glExtractComponentEXT; #endif #ifndef GLEE_C_DEFINED_glGenSymbolsEXT #define GLEE_C_DEFINED_glGenSymbolsEXT GLuint __stdcall GLee_Lazy_glGenSymbolsEXT(GLenum datatype, GLenum storagetype, GLenum range, GLuint components) {if (GLeeInit()) return glGenSymbolsEXT(datatype, storagetype, range, components); return (GLuint)0;} GLEEPFNGLGENSYMBOLSEXTPROC GLeeFuncPtr_glGenSymbolsEXT=GLee_Lazy_glGenSymbolsEXT; #endif #ifndef GLEE_C_DEFINED_glSetInvariantEXT #define GLEE_C_DEFINED_glSetInvariantEXT void __stdcall GLee_Lazy_glSetInvariantEXT(GLuint id, GLenum type, const GLvoid * addr) {if (GLeeInit()) glSetInvariantEXT(id, type, addr);} GLEEPFNGLSETINVARIANTEXTPROC GLeeFuncPtr_glSetInvariantEXT=GLee_Lazy_glSetInvariantEXT; #endif #ifndef GLEE_C_DEFINED_glSetLocalConstantEXT #define GLEE_C_DEFINED_glSetLocalConstantEXT void __stdcall GLee_Lazy_glSetLocalConstantEXT(GLuint id, GLenum type, const GLvoid * addr) {if (GLeeInit()) glSetLocalConstantEXT(id, type, addr);} GLEEPFNGLSETLOCALCONSTANTEXTPROC GLeeFuncPtr_glSetLocalConstantEXT=GLee_Lazy_glSetLocalConstantEXT; #endif #ifndef GLEE_C_DEFINED_glVariantbvEXT #define GLEE_C_DEFINED_glVariantbvEXT void __stdcall GLee_Lazy_glVariantbvEXT(GLuint id, const GLbyte * addr) {if (GLeeInit()) glVariantbvEXT(id, addr);} GLEEPFNGLVARIANTBVEXTPROC GLeeFuncPtr_glVariantbvEXT=GLee_Lazy_glVariantbvEXT; #endif #ifndef GLEE_C_DEFINED_glVariantsvEXT #define GLEE_C_DEFINED_glVariantsvEXT void __stdcall GLee_Lazy_glVariantsvEXT(GLuint id, const GLshort * addr) {if (GLeeInit()) glVariantsvEXT(id, addr);} GLEEPFNGLVARIANTSVEXTPROC GLeeFuncPtr_glVariantsvEXT=GLee_Lazy_glVariantsvEXT; #endif #ifndef GLEE_C_DEFINED_glVariantivEXT #define GLEE_C_DEFINED_glVariantivEXT void __stdcall GLee_Lazy_glVariantivEXT(GLuint id, const GLint * addr) {if (GLeeInit()) glVariantivEXT(id, addr);} GLEEPFNGLVARIANTIVEXTPROC GLeeFuncPtr_glVariantivEXT=GLee_Lazy_glVariantivEXT; #endif #ifndef GLEE_C_DEFINED_glVariantfvEXT #define GLEE_C_DEFINED_glVariantfvEXT void __stdcall GLee_Lazy_glVariantfvEXT(GLuint id, const GLfloat * addr) {if (GLeeInit()) glVariantfvEXT(id, addr);} GLEEPFNGLVARIANTFVEXTPROC GLeeFuncPtr_glVariantfvEXT=GLee_Lazy_glVariantfvEXT; #endif #ifndef GLEE_C_DEFINED_glVariantdvEXT #define GLEE_C_DEFINED_glVariantdvEXT void __stdcall GLee_Lazy_glVariantdvEXT(GLuint id, const GLdouble * addr) {if (GLeeInit()) glVariantdvEXT(id, addr);} GLEEPFNGLVARIANTDVEXTPROC GLeeFuncPtr_glVariantdvEXT=GLee_Lazy_glVariantdvEXT; #endif #ifndef GLEE_C_DEFINED_glVariantubvEXT #define GLEE_C_DEFINED_glVariantubvEXT void __stdcall GLee_Lazy_glVariantubvEXT(GLuint id, const GLubyte * addr) {if (GLeeInit()) glVariantubvEXT(id, addr);} GLEEPFNGLVARIANTUBVEXTPROC GLeeFuncPtr_glVariantubvEXT=GLee_Lazy_glVariantubvEXT; #endif #ifndef GLEE_C_DEFINED_glVariantusvEXT #define GLEE_C_DEFINED_glVariantusvEXT void __stdcall GLee_Lazy_glVariantusvEXT(GLuint id, const GLushort * addr) {if (GLeeInit()) glVariantusvEXT(id, addr);} GLEEPFNGLVARIANTUSVEXTPROC GLeeFuncPtr_glVariantusvEXT=GLee_Lazy_glVariantusvEXT; #endif #ifndef GLEE_C_DEFINED_glVariantuivEXT #define GLEE_C_DEFINED_glVariantuivEXT void __stdcall GLee_Lazy_glVariantuivEXT(GLuint id, const GLuint * addr) {if (GLeeInit()) glVariantuivEXT(id, addr);} GLEEPFNGLVARIANTUIVEXTPROC GLeeFuncPtr_glVariantuivEXT=GLee_Lazy_glVariantuivEXT; #endif #ifndef GLEE_C_DEFINED_glVariantPointerEXT #define GLEE_C_DEFINED_glVariantPointerEXT void __stdcall GLee_Lazy_glVariantPointerEXT(GLuint id, GLenum type, GLuint stride, const GLvoid * addr) {if (GLeeInit()) glVariantPointerEXT(id, type, stride, addr);} GLEEPFNGLVARIANTPOINTEREXTPROC GLeeFuncPtr_glVariantPointerEXT=GLee_Lazy_glVariantPointerEXT; #endif #ifndef GLEE_C_DEFINED_glEnableVariantClientStateEXT #define GLEE_C_DEFINED_glEnableVariantClientStateEXT void __stdcall GLee_Lazy_glEnableVariantClientStateEXT(GLuint id) {if (GLeeInit()) glEnableVariantClientStateEXT(id);} GLEEPFNGLENABLEVARIANTCLIENTSTATEEXTPROC GLeeFuncPtr_glEnableVariantClientStateEXT=GLee_Lazy_glEnableVariantClientStateEXT; #endif #ifndef GLEE_C_DEFINED_glDisableVariantClientStateEXT #define GLEE_C_DEFINED_glDisableVariantClientStateEXT void __stdcall GLee_Lazy_glDisableVariantClientStateEXT(GLuint id) {if (GLeeInit()) glDisableVariantClientStateEXT(id);} GLEEPFNGLDISABLEVARIANTCLIENTSTATEEXTPROC GLeeFuncPtr_glDisableVariantClientStateEXT=GLee_Lazy_glDisableVariantClientStateEXT; #endif #ifndef GLEE_C_DEFINED_glBindLightParameterEXT #define GLEE_C_DEFINED_glBindLightParameterEXT GLuint __stdcall GLee_Lazy_glBindLightParameterEXT(GLenum light, GLenum value) {if (GLeeInit()) return glBindLightParameterEXT(light, value); return (GLuint)0;} GLEEPFNGLBINDLIGHTPARAMETEREXTPROC GLeeFuncPtr_glBindLightParameterEXT=GLee_Lazy_glBindLightParameterEXT; #endif #ifndef GLEE_C_DEFINED_glBindMaterialParameterEXT #define GLEE_C_DEFINED_glBindMaterialParameterEXT GLuint __stdcall GLee_Lazy_glBindMaterialParameterEXT(GLenum face, GLenum value) {if (GLeeInit()) return glBindMaterialParameterEXT(face, value); return (GLuint)0;} GLEEPFNGLBINDMATERIALPARAMETEREXTPROC GLeeFuncPtr_glBindMaterialParameterEXT=GLee_Lazy_glBindMaterialParameterEXT; #endif #ifndef GLEE_C_DEFINED_glBindTexGenParameterEXT #define GLEE_C_DEFINED_glBindTexGenParameterEXT GLuint __stdcall GLee_Lazy_glBindTexGenParameterEXT(GLenum unit, GLenum coord, GLenum value) {if (GLeeInit()) return glBindTexGenParameterEXT(unit, coord, value); return (GLuint)0;} GLEEPFNGLBINDTEXGENPARAMETEREXTPROC GLeeFuncPtr_glBindTexGenParameterEXT=GLee_Lazy_glBindTexGenParameterEXT; #endif #ifndef GLEE_C_DEFINED_glBindTextureUnitParameterEXT #define GLEE_C_DEFINED_glBindTextureUnitParameterEXT GLuint __stdcall GLee_Lazy_glBindTextureUnitParameterEXT(GLenum unit, GLenum value) {if (GLeeInit()) return glBindTextureUnitParameterEXT(unit, value); return (GLuint)0;} GLEEPFNGLBINDTEXTUREUNITPARAMETEREXTPROC GLeeFuncPtr_glBindTextureUnitParameterEXT=GLee_Lazy_glBindTextureUnitParameterEXT; #endif #ifndef GLEE_C_DEFINED_glBindParameterEXT #define GLEE_C_DEFINED_glBindParameterEXT GLuint __stdcall GLee_Lazy_glBindParameterEXT(GLenum value) {if (GLeeInit()) return glBindParameterEXT(value); return (GLuint)0;} GLEEPFNGLBINDPARAMETEREXTPROC GLeeFuncPtr_glBindParameterEXT=GLee_Lazy_glBindParameterEXT; #endif #ifndef GLEE_C_DEFINED_glIsVariantEnabledEXT #define GLEE_C_DEFINED_glIsVariantEnabledEXT GLboolean __stdcall GLee_Lazy_glIsVariantEnabledEXT(GLuint id, GLenum cap) {if (GLeeInit()) return glIsVariantEnabledEXT(id, cap); return (GLboolean)0;} GLEEPFNGLISVARIANTENABLEDEXTPROC GLeeFuncPtr_glIsVariantEnabledEXT=GLee_Lazy_glIsVariantEnabledEXT; #endif #ifndef GLEE_C_DEFINED_glGetVariantBooleanvEXT #define GLEE_C_DEFINED_glGetVariantBooleanvEXT void __stdcall GLee_Lazy_glGetVariantBooleanvEXT(GLuint id, GLenum value, GLboolean * data) {if (GLeeInit()) glGetVariantBooleanvEXT(id, value, data);} GLEEPFNGLGETVARIANTBOOLEANVEXTPROC GLeeFuncPtr_glGetVariantBooleanvEXT=GLee_Lazy_glGetVariantBooleanvEXT; #endif #ifndef GLEE_C_DEFINED_glGetVariantIntegervEXT #define GLEE_C_DEFINED_glGetVariantIntegervEXT void __stdcall GLee_Lazy_glGetVariantIntegervEXT(GLuint id, GLenum value, GLint * data) {if (GLeeInit()) glGetVariantIntegervEXT(id, value, data);} GLEEPFNGLGETVARIANTINTEGERVEXTPROC GLeeFuncPtr_glGetVariantIntegervEXT=GLee_Lazy_glGetVariantIntegervEXT; #endif #ifndef GLEE_C_DEFINED_glGetVariantFloatvEXT #define GLEE_C_DEFINED_glGetVariantFloatvEXT void __stdcall GLee_Lazy_glGetVariantFloatvEXT(GLuint id, GLenum value, GLfloat * data) {if (GLeeInit()) glGetVariantFloatvEXT(id, value, data);} GLEEPFNGLGETVARIANTFLOATVEXTPROC GLeeFuncPtr_glGetVariantFloatvEXT=GLee_Lazy_glGetVariantFloatvEXT; #endif #ifndef GLEE_C_DEFINED_glGetVariantPointervEXT #define GLEE_C_DEFINED_glGetVariantPointervEXT void __stdcall GLee_Lazy_glGetVariantPointervEXT(GLuint id, GLenum value, GLvoid* * data) {if (GLeeInit()) glGetVariantPointervEXT(id, value, data);} GLEEPFNGLGETVARIANTPOINTERVEXTPROC GLeeFuncPtr_glGetVariantPointervEXT=GLee_Lazy_glGetVariantPointervEXT; #endif #ifndef GLEE_C_DEFINED_glGetInvariantBooleanvEXT #define GLEE_C_DEFINED_glGetInvariantBooleanvEXT void __stdcall GLee_Lazy_glGetInvariantBooleanvEXT(GLuint id, GLenum value, GLboolean * data) {if (GLeeInit()) glGetInvariantBooleanvEXT(id, value, data);} GLEEPFNGLGETINVARIANTBOOLEANVEXTPROC GLeeFuncPtr_glGetInvariantBooleanvEXT=GLee_Lazy_glGetInvariantBooleanvEXT; #endif #ifndef GLEE_C_DEFINED_glGetInvariantIntegervEXT #define GLEE_C_DEFINED_glGetInvariantIntegervEXT void __stdcall GLee_Lazy_glGetInvariantIntegervEXT(GLuint id, GLenum value, GLint * data) {if (GLeeInit()) glGetInvariantIntegervEXT(id, value, data);} GLEEPFNGLGETINVARIANTINTEGERVEXTPROC GLeeFuncPtr_glGetInvariantIntegervEXT=GLee_Lazy_glGetInvariantIntegervEXT; #endif #ifndef GLEE_C_DEFINED_glGetInvariantFloatvEXT #define GLEE_C_DEFINED_glGetInvariantFloatvEXT void __stdcall GLee_Lazy_glGetInvariantFloatvEXT(GLuint id, GLenum value, GLfloat * data) {if (GLeeInit()) glGetInvariantFloatvEXT(id, value, data);} GLEEPFNGLGETINVARIANTFLOATVEXTPROC GLeeFuncPtr_glGetInvariantFloatvEXT=GLee_Lazy_glGetInvariantFloatvEXT; #endif #ifndef GLEE_C_DEFINED_glGetLocalConstantBooleanvEXT #define GLEE_C_DEFINED_glGetLocalConstantBooleanvEXT void __stdcall GLee_Lazy_glGetLocalConstantBooleanvEXT(GLuint id, GLenum value, GLboolean * data) {if (GLeeInit()) glGetLocalConstantBooleanvEXT(id, value, data);} GLEEPFNGLGETLOCALCONSTANTBOOLEANVEXTPROC GLeeFuncPtr_glGetLocalConstantBooleanvEXT=GLee_Lazy_glGetLocalConstantBooleanvEXT; #endif #ifndef GLEE_C_DEFINED_glGetLocalConstantIntegervEXT #define GLEE_C_DEFINED_glGetLocalConstantIntegervEXT void __stdcall GLee_Lazy_glGetLocalConstantIntegervEXT(GLuint id, GLenum value, GLint * data) {if (GLeeInit()) glGetLocalConstantIntegervEXT(id, value, data);} GLEEPFNGLGETLOCALCONSTANTINTEGERVEXTPROC GLeeFuncPtr_glGetLocalConstantIntegervEXT=GLee_Lazy_glGetLocalConstantIntegervEXT; #endif #ifndef GLEE_C_DEFINED_glGetLocalConstantFloatvEXT #define GLEE_C_DEFINED_glGetLocalConstantFloatvEXT void __stdcall GLee_Lazy_glGetLocalConstantFloatvEXT(GLuint id, GLenum value, GLfloat * data) {if (GLeeInit()) glGetLocalConstantFloatvEXT(id, value, data);} GLEEPFNGLGETLOCALCONSTANTFLOATVEXTPROC GLeeFuncPtr_glGetLocalConstantFloatvEXT=GLee_Lazy_glGetLocalConstantFloatvEXT; #endif #endif /* GL_ATI_vertex_streams */ #ifdef __GLEE_GL_ATI_vertex_streams #ifndef GLEE_C_DEFINED_glVertexStream1sATI #define GLEE_C_DEFINED_glVertexStream1sATI void __stdcall GLee_Lazy_glVertexStream1sATI(GLenum stream, GLshort x) {if (GLeeInit()) glVertexStream1sATI(stream, x);} GLEEPFNGLVERTEXSTREAM1SATIPROC GLeeFuncPtr_glVertexStream1sATI=GLee_Lazy_glVertexStream1sATI; #endif #ifndef GLEE_C_DEFINED_glVertexStream1svATI #define GLEE_C_DEFINED_glVertexStream1svATI void __stdcall GLee_Lazy_glVertexStream1svATI(GLenum stream, const GLshort * coords) {if (GLeeInit()) glVertexStream1svATI(stream, coords);} GLEEPFNGLVERTEXSTREAM1SVATIPROC GLeeFuncPtr_glVertexStream1svATI=GLee_Lazy_glVertexStream1svATI; #endif #ifndef GLEE_C_DEFINED_glVertexStream1iATI #define GLEE_C_DEFINED_glVertexStream1iATI void __stdcall GLee_Lazy_glVertexStream1iATI(GLenum stream, GLint x) {if (GLeeInit()) glVertexStream1iATI(stream, x);} GLEEPFNGLVERTEXSTREAM1IATIPROC GLeeFuncPtr_glVertexStream1iATI=GLee_Lazy_glVertexStream1iATI; #endif #ifndef GLEE_C_DEFINED_glVertexStream1ivATI #define GLEE_C_DEFINED_glVertexStream1ivATI void __stdcall GLee_Lazy_glVertexStream1ivATI(GLenum stream, const GLint * coords) {if (GLeeInit()) glVertexStream1ivATI(stream, coords);} GLEEPFNGLVERTEXSTREAM1IVATIPROC GLeeFuncPtr_glVertexStream1ivATI=GLee_Lazy_glVertexStream1ivATI; #endif #ifndef GLEE_C_DEFINED_glVertexStream1fATI #define GLEE_C_DEFINED_glVertexStream1fATI void __stdcall GLee_Lazy_glVertexStream1fATI(GLenum stream, GLfloat x) {if (GLeeInit()) glVertexStream1fATI(stream, x);} GLEEPFNGLVERTEXSTREAM1FATIPROC GLeeFuncPtr_glVertexStream1fATI=GLee_Lazy_glVertexStream1fATI; #endif #ifndef GLEE_C_DEFINED_glVertexStream1fvATI #define GLEE_C_DEFINED_glVertexStream1fvATI void __stdcall GLee_Lazy_glVertexStream1fvATI(GLenum stream, const GLfloat * coords) {if (GLeeInit()) glVertexStream1fvATI(stream, coords);} GLEEPFNGLVERTEXSTREAM1FVATIPROC GLeeFuncPtr_glVertexStream1fvATI=GLee_Lazy_glVertexStream1fvATI; #endif #ifndef GLEE_C_DEFINED_glVertexStream1dATI #define GLEE_C_DEFINED_glVertexStream1dATI void __stdcall GLee_Lazy_glVertexStream1dATI(GLenum stream, GLdouble x) {if (GLeeInit()) glVertexStream1dATI(stream, x);} GLEEPFNGLVERTEXSTREAM1DATIPROC GLeeFuncPtr_glVertexStream1dATI=GLee_Lazy_glVertexStream1dATI; #endif #ifndef GLEE_C_DEFINED_glVertexStream1dvATI #define GLEE_C_DEFINED_glVertexStream1dvATI void __stdcall GLee_Lazy_glVertexStream1dvATI(GLenum stream, const GLdouble * coords) {if (GLeeInit()) glVertexStream1dvATI(stream, coords);} GLEEPFNGLVERTEXSTREAM1DVATIPROC GLeeFuncPtr_glVertexStream1dvATI=GLee_Lazy_glVertexStream1dvATI; #endif #ifndef GLEE_C_DEFINED_glVertexStream2sATI #define GLEE_C_DEFINED_glVertexStream2sATI void __stdcall GLee_Lazy_glVertexStream2sATI(GLenum stream, GLshort x, GLshort y) {if (GLeeInit()) glVertexStream2sATI(stream, x, y);} GLEEPFNGLVERTEXSTREAM2SATIPROC GLeeFuncPtr_glVertexStream2sATI=GLee_Lazy_glVertexStream2sATI; #endif #ifndef GLEE_C_DEFINED_glVertexStream2svATI #define GLEE_C_DEFINED_glVertexStream2svATI void __stdcall GLee_Lazy_glVertexStream2svATI(GLenum stream, const GLshort * coords) {if (GLeeInit()) glVertexStream2svATI(stream, coords);} GLEEPFNGLVERTEXSTREAM2SVATIPROC GLeeFuncPtr_glVertexStream2svATI=GLee_Lazy_glVertexStream2svATI; #endif #ifndef GLEE_C_DEFINED_glVertexStream2iATI #define GLEE_C_DEFINED_glVertexStream2iATI void __stdcall GLee_Lazy_glVertexStream2iATI(GLenum stream, GLint x, GLint y) {if (GLeeInit()) glVertexStream2iATI(stream, x, y);} GLEEPFNGLVERTEXSTREAM2IATIPROC GLeeFuncPtr_glVertexStream2iATI=GLee_Lazy_glVertexStream2iATI; #endif #ifndef GLEE_C_DEFINED_glVertexStream2ivATI #define GLEE_C_DEFINED_glVertexStream2ivATI void __stdcall GLee_Lazy_glVertexStream2ivATI(GLenum stream, const GLint * coords) {if (GLeeInit()) glVertexStream2ivATI(stream, coords);} GLEEPFNGLVERTEXSTREAM2IVATIPROC GLeeFuncPtr_glVertexStream2ivATI=GLee_Lazy_glVertexStream2ivATI; #endif #ifndef GLEE_C_DEFINED_glVertexStream2fATI #define GLEE_C_DEFINED_glVertexStream2fATI void __stdcall GLee_Lazy_glVertexStream2fATI(GLenum stream, GLfloat x, GLfloat y) {if (GLeeInit()) glVertexStream2fATI(stream, x, y);} GLEEPFNGLVERTEXSTREAM2FATIPROC GLeeFuncPtr_glVertexStream2fATI=GLee_Lazy_glVertexStream2fATI; #endif #ifndef GLEE_C_DEFINED_glVertexStream2fvATI #define GLEE_C_DEFINED_glVertexStream2fvATI void __stdcall GLee_Lazy_glVertexStream2fvATI(GLenum stream, const GLfloat * coords) {if (GLeeInit()) glVertexStream2fvATI(stream, coords);} GLEEPFNGLVERTEXSTREAM2FVATIPROC GLeeFuncPtr_glVertexStream2fvATI=GLee_Lazy_glVertexStream2fvATI; #endif #ifndef GLEE_C_DEFINED_glVertexStream2dATI #define GLEE_C_DEFINED_glVertexStream2dATI void __stdcall GLee_Lazy_glVertexStream2dATI(GLenum stream, GLdouble x, GLdouble y) {if (GLeeInit()) glVertexStream2dATI(stream, x, y);} GLEEPFNGLVERTEXSTREAM2DATIPROC GLeeFuncPtr_glVertexStream2dATI=GLee_Lazy_glVertexStream2dATI; #endif #ifndef GLEE_C_DEFINED_glVertexStream2dvATI #define GLEE_C_DEFINED_glVertexStream2dvATI void __stdcall GLee_Lazy_glVertexStream2dvATI(GLenum stream, const GLdouble * coords) {if (GLeeInit()) glVertexStream2dvATI(stream, coords);} GLEEPFNGLVERTEXSTREAM2DVATIPROC GLeeFuncPtr_glVertexStream2dvATI=GLee_Lazy_glVertexStream2dvATI; #endif #ifndef GLEE_C_DEFINED_glVertexStream3sATI #define GLEE_C_DEFINED_glVertexStream3sATI void __stdcall GLee_Lazy_glVertexStream3sATI(GLenum stream, GLshort x, GLshort y, GLshort z) {if (GLeeInit()) glVertexStream3sATI(stream, x, y, z);} GLEEPFNGLVERTEXSTREAM3SATIPROC GLeeFuncPtr_glVertexStream3sATI=GLee_Lazy_glVertexStream3sATI; #endif #ifndef GLEE_C_DEFINED_glVertexStream3svATI #define GLEE_C_DEFINED_glVertexStream3svATI void __stdcall GLee_Lazy_glVertexStream3svATI(GLenum stream, const GLshort * coords) {if (GLeeInit()) glVertexStream3svATI(stream, coords);} GLEEPFNGLVERTEXSTREAM3SVATIPROC GLeeFuncPtr_glVertexStream3svATI=GLee_Lazy_glVertexStream3svATI; #endif #ifndef GLEE_C_DEFINED_glVertexStream3iATI #define GLEE_C_DEFINED_glVertexStream3iATI void __stdcall GLee_Lazy_glVertexStream3iATI(GLenum stream, GLint x, GLint y, GLint z) {if (GLeeInit()) glVertexStream3iATI(stream, x, y, z);} GLEEPFNGLVERTEXSTREAM3IATIPROC GLeeFuncPtr_glVertexStream3iATI=GLee_Lazy_glVertexStream3iATI; #endif #ifndef GLEE_C_DEFINED_glVertexStream3ivATI #define GLEE_C_DEFINED_glVertexStream3ivATI void __stdcall GLee_Lazy_glVertexStream3ivATI(GLenum stream, const GLint * coords) {if (GLeeInit()) glVertexStream3ivATI(stream, coords);} GLEEPFNGLVERTEXSTREAM3IVATIPROC GLeeFuncPtr_glVertexStream3ivATI=GLee_Lazy_glVertexStream3ivATI; #endif #ifndef GLEE_C_DEFINED_glVertexStream3fATI #define GLEE_C_DEFINED_glVertexStream3fATI void __stdcall GLee_Lazy_glVertexStream3fATI(GLenum stream, GLfloat x, GLfloat y, GLfloat z) {if (GLeeInit()) glVertexStream3fATI(stream, x, y, z);} GLEEPFNGLVERTEXSTREAM3FATIPROC GLeeFuncPtr_glVertexStream3fATI=GLee_Lazy_glVertexStream3fATI; #endif #ifndef GLEE_C_DEFINED_glVertexStream3fvATI #define GLEE_C_DEFINED_glVertexStream3fvATI void __stdcall GLee_Lazy_glVertexStream3fvATI(GLenum stream, const GLfloat * coords) {if (GLeeInit()) glVertexStream3fvATI(stream, coords);} GLEEPFNGLVERTEXSTREAM3FVATIPROC GLeeFuncPtr_glVertexStream3fvATI=GLee_Lazy_glVertexStream3fvATI; #endif #ifndef GLEE_C_DEFINED_glVertexStream3dATI #define GLEE_C_DEFINED_glVertexStream3dATI void __stdcall GLee_Lazy_glVertexStream3dATI(GLenum stream, GLdouble x, GLdouble y, GLdouble z) {if (GLeeInit()) glVertexStream3dATI(stream, x, y, z);} GLEEPFNGLVERTEXSTREAM3DATIPROC GLeeFuncPtr_glVertexStream3dATI=GLee_Lazy_glVertexStream3dATI; #endif #ifndef GLEE_C_DEFINED_glVertexStream3dvATI #define GLEE_C_DEFINED_glVertexStream3dvATI void __stdcall GLee_Lazy_glVertexStream3dvATI(GLenum stream, const GLdouble * coords) {if (GLeeInit()) glVertexStream3dvATI(stream, coords);} GLEEPFNGLVERTEXSTREAM3DVATIPROC GLeeFuncPtr_glVertexStream3dvATI=GLee_Lazy_glVertexStream3dvATI; #endif #ifndef GLEE_C_DEFINED_glVertexStream4sATI #define GLEE_C_DEFINED_glVertexStream4sATI void __stdcall GLee_Lazy_glVertexStream4sATI(GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w) {if (GLeeInit()) glVertexStream4sATI(stream, x, y, z, w);} GLEEPFNGLVERTEXSTREAM4SATIPROC GLeeFuncPtr_glVertexStream4sATI=GLee_Lazy_glVertexStream4sATI; #endif #ifndef GLEE_C_DEFINED_glVertexStream4svATI #define GLEE_C_DEFINED_glVertexStream4svATI void __stdcall GLee_Lazy_glVertexStream4svATI(GLenum stream, const GLshort * coords) {if (GLeeInit()) glVertexStream4svATI(stream, coords);} GLEEPFNGLVERTEXSTREAM4SVATIPROC GLeeFuncPtr_glVertexStream4svATI=GLee_Lazy_glVertexStream4svATI; #endif #ifndef GLEE_C_DEFINED_glVertexStream4iATI #define GLEE_C_DEFINED_glVertexStream4iATI void __stdcall GLee_Lazy_glVertexStream4iATI(GLenum stream, GLint x, GLint y, GLint z, GLint w) {if (GLeeInit()) glVertexStream4iATI(stream, x, y, z, w);} GLEEPFNGLVERTEXSTREAM4IATIPROC GLeeFuncPtr_glVertexStream4iATI=GLee_Lazy_glVertexStream4iATI; #endif #ifndef GLEE_C_DEFINED_glVertexStream4ivATI #define GLEE_C_DEFINED_glVertexStream4ivATI void __stdcall GLee_Lazy_glVertexStream4ivATI(GLenum stream, const GLint * coords) {if (GLeeInit()) glVertexStream4ivATI(stream, coords);} GLEEPFNGLVERTEXSTREAM4IVATIPROC GLeeFuncPtr_glVertexStream4ivATI=GLee_Lazy_glVertexStream4ivATI; #endif #ifndef GLEE_C_DEFINED_glVertexStream4fATI #define GLEE_C_DEFINED_glVertexStream4fATI void __stdcall GLee_Lazy_glVertexStream4fATI(GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w) {if (GLeeInit()) glVertexStream4fATI(stream, x, y, z, w);} GLEEPFNGLVERTEXSTREAM4FATIPROC GLeeFuncPtr_glVertexStream4fATI=GLee_Lazy_glVertexStream4fATI; #endif #ifndef GLEE_C_DEFINED_glVertexStream4fvATI #define GLEE_C_DEFINED_glVertexStream4fvATI void __stdcall GLee_Lazy_glVertexStream4fvATI(GLenum stream, const GLfloat * coords) {if (GLeeInit()) glVertexStream4fvATI(stream, coords);} GLEEPFNGLVERTEXSTREAM4FVATIPROC GLeeFuncPtr_glVertexStream4fvATI=GLee_Lazy_glVertexStream4fvATI; #endif #ifndef GLEE_C_DEFINED_glVertexStream4dATI #define GLEE_C_DEFINED_glVertexStream4dATI void __stdcall GLee_Lazy_glVertexStream4dATI(GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w) {if (GLeeInit()) glVertexStream4dATI(stream, x, y, z, w);} GLEEPFNGLVERTEXSTREAM4DATIPROC GLeeFuncPtr_glVertexStream4dATI=GLee_Lazy_glVertexStream4dATI; #endif #ifndef GLEE_C_DEFINED_glVertexStream4dvATI #define GLEE_C_DEFINED_glVertexStream4dvATI void __stdcall GLee_Lazy_glVertexStream4dvATI(GLenum stream, const GLdouble * coords) {if (GLeeInit()) glVertexStream4dvATI(stream, coords);} GLEEPFNGLVERTEXSTREAM4DVATIPROC GLeeFuncPtr_glVertexStream4dvATI=GLee_Lazy_glVertexStream4dvATI; #endif #ifndef GLEE_C_DEFINED_glNormalStream3bATI #define GLEE_C_DEFINED_glNormalStream3bATI void __stdcall GLee_Lazy_glNormalStream3bATI(GLenum stream, GLbyte nx, GLbyte ny, GLbyte nz) {if (GLeeInit()) glNormalStream3bATI(stream, nx, ny, nz);} GLEEPFNGLNORMALSTREAM3BATIPROC GLeeFuncPtr_glNormalStream3bATI=GLee_Lazy_glNormalStream3bATI; #endif #ifndef GLEE_C_DEFINED_glNormalStream3bvATI #define GLEE_C_DEFINED_glNormalStream3bvATI void __stdcall GLee_Lazy_glNormalStream3bvATI(GLenum stream, const GLbyte * coords) {if (GLeeInit()) glNormalStream3bvATI(stream, coords);} GLEEPFNGLNORMALSTREAM3BVATIPROC GLeeFuncPtr_glNormalStream3bvATI=GLee_Lazy_glNormalStream3bvATI; #endif #ifndef GLEE_C_DEFINED_glNormalStream3sATI #define GLEE_C_DEFINED_glNormalStream3sATI void __stdcall GLee_Lazy_glNormalStream3sATI(GLenum stream, GLshort nx, GLshort ny, GLshort nz) {if (GLeeInit()) glNormalStream3sATI(stream, nx, ny, nz);} GLEEPFNGLNORMALSTREAM3SATIPROC GLeeFuncPtr_glNormalStream3sATI=GLee_Lazy_glNormalStream3sATI; #endif #ifndef GLEE_C_DEFINED_glNormalStream3svATI #define GLEE_C_DEFINED_glNormalStream3svATI void __stdcall GLee_Lazy_glNormalStream3svATI(GLenum stream, const GLshort * coords) {if (GLeeInit()) glNormalStream3svATI(stream, coords);} GLEEPFNGLNORMALSTREAM3SVATIPROC GLeeFuncPtr_glNormalStream3svATI=GLee_Lazy_glNormalStream3svATI; #endif #ifndef GLEE_C_DEFINED_glNormalStream3iATI #define GLEE_C_DEFINED_glNormalStream3iATI void __stdcall GLee_Lazy_glNormalStream3iATI(GLenum stream, GLint nx, GLint ny, GLint nz) {if (GLeeInit()) glNormalStream3iATI(stream, nx, ny, nz);} GLEEPFNGLNORMALSTREAM3IATIPROC GLeeFuncPtr_glNormalStream3iATI=GLee_Lazy_glNormalStream3iATI; #endif #ifndef GLEE_C_DEFINED_glNormalStream3ivATI #define GLEE_C_DEFINED_glNormalStream3ivATI void __stdcall GLee_Lazy_glNormalStream3ivATI(GLenum stream, const GLint * coords) {if (GLeeInit()) glNormalStream3ivATI(stream, coords);} GLEEPFNGLNORMALSTREAM3IVATIPROC GLeeFuncPtr_glNormalStream3ivATI=GLee_Lazy_glNormalStream3ivATI; #endif #ifndef GLEE_C_DEFINED_glNormalStream3fATI #define GLEE_C_DEFINED_glNormalStream3fATI void __stdcall GLee_Lazy_glNormalStream3fATI(GLenum stream, GLfloat nx, GLfloat ny, GLfloat nz) {if (GLeeInit()) glNormalStream3fATI(stream, nx, ny, nz);} GLEEPFNGLNORMALSTREAM3FATIPROC GLeeFuncPtr_glNormalStream3fATI=GLee_Lazy_glNormalStream3fATI; #endif #ifndef GLEE_C_DEFINED_glNormalStream3fvATI #define GLEE_C_DEFINED_glNormalStream3fvATI void __stdcall GLee_Lazy_glNormalStream3fvATI(GLenum stream, const GLfloat * coords) {if (GLeeInit()) glNormalStream3fvATI(stream, coords);} GLEEPFNGLNORMALSTREAM3FVATIPROC GLeeFuncPtr_glNormalStream3fvATI=GLee_Lazy_glNormalStream3fvATI; #endif #ifndef GLEE_C_DEFINED_glNormalStream3dATI #define GLEE_C_DEFINED_glNormalStream3dATI void __stdcall GLee_Lazy_glNormalStream3dATI(GLenum stream, GLdouble nx, GLdouble ny, GLdouble nz) {if (GLeeInit()) glNormalStream3dATI(stream, nx, ny, nz);} GLEEPFNGLNORMALSTREAM3DATIPROC GLeeFuncPtr_glNormalStream3dATI=GLee_Lazy_glNormalStream3dATI; #endif #ifndef GLEE_C_DEFINED_glNormalStream3dvATI #define GLEE_C_DEFINED_glNormalStream3dvATI void __stdcall GLee_Lazy_glNormalStream3dvATI(GLenum stream, const GLdouble * coords) {if (GLeeInit()) glNormalStream3dvATI(stream, coords);} GLEEPFNGLNORMALSTREAM3DVATIPROC GLeeFuncPtr_glNormalStream3dvATI=GLee_Lazy_glNormalStream3dvATI; #endif #ifndef GLEE_C_DEFINED_glClientActiveVertexStreamATI #define GLEE_C_DEFINED_glClientActiveVertexStreamATI void __stdcall GLee_Lazy_glClientActiveVertexStreamATI(GLenum stream) {if (GLeeInit()) glClientActiveVertexStreamATI(stream);} GLEEPFNGLCLIENTACTIVEVERTEXSTREAMATIPROC GLeeFuncPtr_glClientActiveVertexStreamATI=GLee_Lazy_glClientActiveVertexStreamATI; #endif #ifndef GLEE_C_DEFINED_glVertexBlendEnviATI #define GLEE_C_DEFINED_glVertexBlendEnviATI void __stdcall GLee_Lazy_glVertexBlendEnviATI(GLenum pname, GLint param) {if (GLeeInit()) glVertexBlendEnviATI(pname, param);} GLEEPFNGLVERTEXBLENDENVIATIPROC GLeeFuncPtr_glVertexBlendEnviATI=GLee_Lazy_glVertexBlendEnviATI; #endif #ifndef GLEE_C_DEFINED_glVertexBlendEnvfATI #define GLEE_C_DEFINED_glVertexBlendEnvfATI void __stdcall GLee_Lazy_glVertexBlendEnvfATI(GLenum pname, GLfloat param) {if (GLeeInit()) glVertexBlendEnvfATI(pname, param);} GLEEPFNGLVERTEXBLENDENVFATIPROC GLeeFuncPtr_glVertexBlendEnvfATI=GLee_Lazy_glVertexBlendEnvfATI; #endif #endif /* GL_ATI_element_array */ #ifdef __GLEE_GL_ATI_element_array #ifndef GLEE_C_DEFINED_glElementPointerATI #define GLEE_C_DEFINED_glElementPointerATI void __stdcall GLee_Lazy_glElementPointerATI(GLenum type, const GLvoid * pointer) {if (GLeeInit()) glElementPointerATI(type, pointer);} GLEEPFNGLELEMENTPOINTERATIPROC GLeeFuncPtr_glElementPointerATI=GLee_Lazy_glElementPointerATI; #endif #ifndef GLEE_C_DEFINED_glDrawElementArrayATI #define GLEE_C_DEFINED_glDrawElementArrayATI void __stdcall GLee_Lazy_glDrawElementArrayATI(GLenum mode, GLsizei count) {if (GLeeInit()) glDrawElementArrayATI(mode, count);} GLEEPFNGLDRAWELEMENTARRAYATIPROC GLeeFuncPtr_glDrawElementArrayATI=GLee_Lazy_glDrawElementArrayATI; #endif #ifndef GLEE_C_DEFINED_glDrawRangeElementArrayATI #define GLEE_C_DEFINED_glDrawRangeElementArrayATI void __stdcall GLee_Lazy_glDrawRangeElementArrayATI(GLenum mode, GLuint start, GLuint end, GLsizei count) {if (GLeeInit()) glDrawRangeElementArrayATI(mode, start, end, count);} GLEEPFNGLDRAWRANGEELEMENTARRAYATIPROC GLeeFuncPtr_glDrawRangeElementArrayATI=GLee_Lazy_glDrawRangeElementArrayATI; #endif #endif /* GL_SUN_mesh_array */ #ifdef __GLEE_GL_SUN_mesh_array #ifndef GLEE_C_DEFINED_glDrawMeshArraysSUN #define GLEE_C_DEFINED_glDrawMeshArraysSUN void __stdcall GLee_Lazy_glDrawMeshArraysSUN(GLenum mode, GLint first, GLsizei count, GLsizei width) {if (GLeeInit()) glDrawMeshArraysSUN(mode, first, count, width);} GLEEPFNGLDRAWMESHARRAYSSUNPROC GLeeFuncPtr_glDrawMeshArraysSUN=GLee_Lazy_glDrawMeshArraysSUN; #endif #endif /* GL_SUN_slice_accum */ #ifdef __GLEE_GL_SUN_slice_accum #endif /* GL_NV_multisample_filter_hint */ #ifdef __GLEE_GL_NV_multisample_filter_hint #endif /* GL_NV_depth_clamp */ #ifdef __GLEE_GL_NV_depth_clamp #endif /* GL_NV_occlusion_query */ #ifdef __GLEE_GL_NV_occlusion_query #ifndef GLEE_C_DEFINED_glGenOcclusionQueriesNV #define GLEE_C_DEFINED_glGenOcclusionQueriesNV void __stdcall GLee_Lazy_glGenOcclusionQueriesNV(GLsizei n, GLuint * ids) {if (GLeeInit()) glGenOcclusionQueriesNV(n, ids);} GLEEPFNGLGENOCCLUSIONQUERIESNVPROC GLeeFuncPtr_glGenOcclusionQueriesNV=GLee_Lazy_glGenOcclusionQueriesNV; #endif #ifndef GLEE_C_DEFINED_glDeleteOcclusionQueriesNV #define GLEE_C_DEFINED_glDeleteOcclusionQueriesNV void __stdcall GLee_Lazy_glDeleteOcclusionQueriesNV(GLsizei n, const GLuint * ids) {if (GLeeInit()) glDeleteOcclusionQueriesNV(n, ids);} GLEEPFNGLDELETEOCCLUSIONQUERIESNVPROC GLeeFuncPtr_glDeleteOcclusionQueriesNV=GLee_Lazy_glDeleteOcclusionQueriesNV; #endif #ifndef GLEE_C_DEFINED_glIsOcclusionQueryNV #define GLEE_C_DEFINED_glIsOcclusionQueryNV GLboolean __stdcall GLee_Lazy_glIsOcclusionQueryNV(GLuint id) {if (GLeeInit()) return glIsOcclusionQueryNV(id); return (GLboolean)0;} GLEEPFNGLISOCCLUSIONQUERYNVPROC GLeeFuncPtr_glIsOcclusionQueryNV=GLee_Lazy_glIsOcclusionQueryNV; #endif #ifndef GLEE_C_DEFINED_glBeginOcclusionQueryNV #define GLEE_C_DEFINED_glBeginOcclusionQueryNV void __stdcall GLee_Lazy_glBeginOcclusionQueryNV(GLuint id) {if (GLeeInit()) glBeginOcclusionQueryNV(id);} GLEEPFNGLBEGINOCCLUSIONQUERYNVPROC GLeeFuncPtr_glBeginOcclusionQueryNV=GLee_Lazy_glBeginOcclusionQueryNV; #endif #ifndef GLEE_C_DEFINED_glEndOcclusionQueryNV #define GLEE_C_DEFINED_glEndOcclusionQueryNV void __stdcall GLee_Lazy_glEndOcclusionQueryNV(void) {if (GLeeInit()) glEndOcclusionQueryNV();} GLEEPFNGLENDOCCLUSIONQUERYNVPROC GLeeFuncPtr_glEndOcclusionQueryNV=GLee_Lazy_glEndOcclusionQueryNV; #endif #ifndef GLEE_C_DEFINED_glGetOcclusionQueryivNV #define GLEE_C_DEFINED_glGetOcclusionQueryivNV void __stdcall GLee_Lazy_glGetOcclusionQueryivNV(GLuint id, GLenum pname, GLint * params) {if (GLeeInit()) glGetOcclusionQueryivNV(id, pname, params);} GLEEPFNGLGETOCCLUSIONQUERYIVNVPROC GLeeFuncPtr_glGetOcclusionQueryivNV=GLee_Lazy_glGetOcclusionQueryivNV; #endif #ifndef GLEE_C_DEFINED_glGetOcclusionQueryuivNV #define GLEE_C_DEFINED_glGetOcclusionQueryuivNV void __stdcall GLee_Lazy_glGetOcclusionQueryuivNV(GLuint id, GLenum pname, GLuint * params) {if (GLeeInit()) glGetOcclusionQueryuivNV(id, pname, params);} GLEEPFNGLGETOCCLUSIONQUERYUIVNVPROC GLeeFuncPtr_glGetOcclusionQueryuivNV=GLee_Lazy_glGetOcclusionQueryuivNV; #endif #endif /* GL_NV_point_sprite */ #ifdef __GLEE_GL_NV_point_sprite #ifndef GLEE_C_DEFINED_glPointParameteriNV #define GLEE_C_DEFINED_glPointParameteriNV void __stdcall GLee_Lazy_glPointParameteriNV(GLenum pname, GLint param) {if (GLeeInit()) glPointParameteriNV(pname, param);} GLEEPFNGLPOINTPARAMETERINVPROC GLeeFuncPtr_glPointParameteriNV=GLee_Lazy_glPointParameteriNV; #endif #ifndef GLEE_C_DEFINED_glPointParameterivNV #define GLEE_C_DEFINED_glPointParameterivNV void __stdcall GLee_Lazy_glPointParameterivNV(GLenum pname, const GLint * params) {if (GLeeInit()) glPointParameterivNV(pname, params);} GLEEPFNGLPOINTPARAMETERIVNVPROC GLeeFuncPtr_glPointParameterivNV=GLee_Lazy_glPointParameterivNV; #endif #endif /* GL_NV_texture_shader3 */ #ifdef __GLEE_GL_NV_texture_shader3 #endif /* GL_NV_vertex_program1_1 */ #ifdef __GLEE_GL_NV_vertex_program1_1 #endif /* GL_EXT_shadow_funcs */ #ifdef __GLEE_GL_EXT_shadow_funcs #endif /* GL_EXT_stencil_two_side */ #ifdef __GLEE_GL_EXT_stencil_two_side #ifndef GLEE_C_DEFINED_glActiveStencilFaceEXT #define GLEE_C_DEFINED_glActiveStencilFaceEXT void __stdcall GLee_Lazy_glActiveStencilFaceEXT(GLenum face) {if (GLeeInit()) glActiveStencilFaceEXT(face);} GLEEPFNGLACTIVESTENCILFACEEXTPROC GLeeFuncPtr_glActiveStencilFaceEXT=GLee_Lazy_glActiveStencilFaceEXT; #endif #endif /* GL_ATI_text_fragment_shader */ #ifdef __GLEE_GL_ATI_text_fragment_shader #endif /* GL_APPLE_client_storage */ #ifdef __GLEE_GL_APPLE_client_storage #endif /* GL_APPLE_element_array */ #ifdef __GLEE_GL_APPLE_element_array #ifndef GLEE_C_DEFINED_glElementPointerAPPLE #define GLEE_C_DEFINED_glElementPointerAPPLE void __stdcall GLee_Lazy_glElementPointerAPPLE(GLenum type, const GLvoid * pointer) {if (GLeeInit()) glElementPointerAPPLE(type, pointer);} GLEEPFNGLELEMENTPOINTERAPPLEPROC GLeeFuncPtr_glElementPointerAPPLE=GLee_Lazy_glElementPointerAPPLE; #endif #ifndef GLEE_C_DEFINED_glDrawElementArrayAPPLE #define GLEE_C_DEFINED_glDrawElementArrayAPPLE void __stdcall GLee_Lazy_glDrawElementArrayAPPLE(GLenum mode, GLint first, GLsizei count) {if (GLeeInit()) glDrawElementArrayAPPLE(mode, first, count);} GLEEPFNGLDRAWELEMENTARRAYAPPLEPROC GLeeFuncPtr_glDrawElementArrayAPPLE=GLee_Lazy_glDrawElementArrayAPPLE; #endif #ifndef GLEE_C_DEFINED_glDrawRangeElementArrayAPPLE #define GLEE_C_DEFINED_glDrawRangeElementArrayAPPLE void __stdcall GLee_Lazy_glDrawRangeElementArrayAPPLE(GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count) {if (GLeeInit()) glDrawRangeElementArrayAPPLE(mode, start, end, first, count);} GLEEPFNGLDRAWRANGEELEMENTARRAYAPPLEPROC GLeeFuncPtr_glDrawRangeElementArrayAPPLE=GLee_Lazy_glDrawRangeElementArrayAPPLE; #endif #ifndef GLEE_C_DEFINED_glMultiDrawElementArrayAPPLE #define GLEE_C_DEFINED_glMultiDrawElementArrayAPPLE void __stdcall GLee_Lazy_glMultiDrawElementArrayAPPLE(GLenum mode, const GLint * first, const GLsizei * count, GLsizei primcount) {if (GLeeInit()) glMultiDrawElementArrayAPPLE(mode, first, count, primcount);} GLEEPFNGLMULTIDRAWELEMENTARRAYAPPLEPROC GLeeFuncPtr_glMultiDrawElementArrayAPPLE=GLee_Lazy_glMultiDrawElementArrayAPPLE; #endif #ifndef GLEE_C_DEFINED_glMultiDrawRangeElementArrayAPPLE #define GLEE_C_DEFINED_glMultiDrawRangeElementArrayAPPLE void __stdcall GLee_Lazy_glMultiDrawRangeElementArrayAPPLE(GLenum mode, GLuint start, GLuint end, const GLint * first, const GLsizei * count, GLsizei primcount) {if (GLeeInit()) glMultiDrawRangeElementArrayAPPLE(mode, start, end, first, count, primcount);} GLEEPFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC GLeeFuncPtr_glMultiDrawRangeElementArrayAPPLE=GLee_Lazy_glMultiDrawRangeElementArrayAPPLE; #endif #endif /* GL_APPLE_fence */ #ifdef __GLEE_GL_APPLE_fence #ifndef GLEE_C_DEFINED_glGenFencesAPPLE #define GLEE_C_DEFINED_glGenFencesAPPLE void __stdcall GLee_Lazy_glGenFencesAPPLE(GLsizei n, GLuint * fences) {if (GLeeInit()) glGenFencesAPPLE(n, fences);} GLEEPFNGLGENFENCESAPPLEPROC GLeeFuncPtr_glGenFencesAPPLE=GLee_Lazy_glGenFencesAPPLE; #endif #ifndef GLEE_C_DEFINED_glDeleteFencesAPPLE #define GLEE_C_DEFINED_glDeleteFencesAPPLE void __stdcall GLee_Lazy_glDeleteFencesAPPLE(GLsizei n, const GLuint * fences) {if (GLeeInit()) glDeleteFencesAPPLE(n, fences);} GLEEPFNGLDELETEFENCESAPPLEPROC GLeeFuncPtr_glDeleteFencesAPPLE=GLee_Lazy_glDeleteFencesAPPLE; #endif #ifndef GLEE_C_DEFINED_glSetFenceAPPLE #define GLEE_C_DEFINED_glSetFenceAPPLE void __stdcall GLee_Lazy_glSetFenceAPPLE(GLuint fence) {if (GLeeInit()) glSetFenceAPPLE(fence);} GLEEPFNGLSETFENCEAPPLEPROC GLeeFuncPtr_glSetFenceAPPLE=GLee_Lazy_glSetFenceAPPLE; #endif #ifndef GLEE_C_DEFINED_glIsFenceAPPLE #define GLEE_C_DEFINED_glIsFenceAPPLE GLboolean __stdcall GLee_Lazy_glIsFenceAPPLE(GLuint fence) {if (GLeeInit()) return glIsFenceAPPLE(fence); return (GLboolean)0;} GLEEPFNGLISFENCEAPPLEPROC GLeeFuncPtr_glIsFenceAPPLE=GLee_Lazy_glIsFenceAPPLE; #endif #ifndef GLEE_C_DEFINED_glTestFenceAPPLE #define GLEE_C_DEFINED_glTestFenceAPPLE GLboolean __stdcall GLee_Lazy_glTestFenceAPPLE(GLuint fence) {if (GLeeInit()) return glTestFenceAPPLE(fence); return (GLboolean)0;} GLEEPFNGLTESTFENCEAPPLEPROC GLeeFuncPtr_glTestFenceAPPLE=GLee_Lazy_glTestFenceAPPLE; #endif #ifndef GLEE_C_DEFINED_glFinishFenceAPPLE #define GLEE_C_DEFINED_glFinishFenceAPPLE void __stdcall GLee_Lazy_glFinishFenceAPPLE(GLuint fence) {if (GLeeInit()) glFinishFenceAPPLE(fence);} GLEEPFNGLFINISHFENCEAPPLEPROC GLeeFuncPtr_glFinishFenceAPPLE=GLee_Lazy_glFinishFenceAPPLE; #endif #ifndef GLEE_C_DEFINED_glTestObjectAPPLE #define GLEE_C_DEFINED_glTestObjectAPPLE GLboolean __stdcall GLee_Lazy_glTestObjectAPPLE(GLenum object, GLuint name) {if (GLeeInit()) return glTestObjectAPPLE(object, name); return (GLboolean)0;} GLEEPFNGLTESTOBJECTAPPLEPROC GLeeFuncPtr_glTestObjectAPPLE=GLee_Lazy_glTestObjectAPPLE; #endif #ifndef GLEE_C_DEFINED_glFinishObjectAPPLE #define GLEE_C_DEFINED_glFinishObjectAPPLE void __stdcall GLee_Lazy_glFinishObjectAPPLE(GLenum object, GLint name) {if (GLeeInit()) glFinishObjectAPPLE(object, name);} GLEEPFNGLFINISHOBJECTAPPLEPROC GLeeFuncPtr_glFinishObjectAPPLE=GLee_Lazy_glFinishObjectAPPLE; #endif #endif /* GL_APPLE_vertex_array_object */ #ifdef __GLEE_GL_APPLE_vertex_array_object #ifndef GLEE_C_DEFINED_glBindVertexArrayAPPLE #define GLEE_C_DEFINED_glBindVertexArrayAPPLE void __stdcall GLee_Lazy_glBindVertexArrayAPPLE(GLuint array) {if (GLeeInit()) glBindVertexArrayAPPLE(array);} GLEEPFNGLBINDVERTEXARRAYAPPLEPROC GLeeFuncPtr_glBindVertexArrayAPPLE=GLee_Lazy_glBindVertexArrayAPPLE; #endif #ifndef GLEE_C_DEFINED_glDeleteVertexArraysAPPLE #define GLEE_C_DEFINED_glDeleteVertexArraysAPPLE void __stdcall GLee_Lazy_glDeleteVertexArraysAPPLE(GLsizei n, const GLuint * arrays) {if (GLeeInit()) glDeleteVertexArraysAPPLE(n, arrays);} GLEEPFNGLDELETEVERTEXARRAYSAPPLEPROC GLeeFuncPtr_glDeleteVertexArraysAPPLE=GLee_Lazy_glDeleteVertexArraysAPPLE; #endif #ifndef GLEE_C_DEFINED_glGenVertexArraysAPPLE #define GLEE_C_DEFINED_glGenVertexArraysAPPLE void __stdcall GLee_Lazy_glGenVertexArraysAPPLE(GLsizei n, GLuint * arrays) {if (GLeeInit()) glGenVertexArraysAPPLE(n, arrays);} GLEEPFNGLGENVERTEXARRAYSAPPLEPROC GLeeFuncPtr_glGenVertexArraysAPPLE=GLee_Lazy_glGenVertexArraysAPPLE; #endif #ifndef GLEE_C_DEFINED_glIsVertexArrayAPPLE #define GLEE_C_DEFINED_glIsVertexArrayAPPLE GLboolean __stdcall GLee_Lazy_glIsVertexArrayAPPLE(GLuint array) {if (GLeeInit()) return glIsVertexArrayAPPLE(array); return (GLboolean)0;} GLEEPFNGLISVERTEXARRAYAPPLEPROC GLeeFuncPtr_glIsVertexArrayAPPLE=GLee_Lazy_glIsVertexArrayAPPLE; #endif #endif /* GL_APPLE_vertex_array_range */ #ifdef __GLEE_GL_APPLE_vertex_array_range #ifndef GLEE_C_DEFINED_glVertexArrayRangeAPPLE #define GLEE_C_DEFINED_glVertexArrayRangeAPPLE void __stdcall GLee_Lazy_glVertexArrayRangeAPPLE(GLsizei length, GLvoid * pointer) {if (GLeeInit()) glVertexArrayRangeAPPLE(length, pointer);} GLEEPFNGLVERTEXARRAYRANGEAPPLEPROC GLeeFuncPtr_glVertexArrayRangeAPPLE=GLee_Lazy_glVertexArrayRangeAPPLE; #endif #ifndef GLEE_C_DEFINED_glFlushVertexArrayRangeAPPLE #define GLEE_C_DEFINED_glFlushVertexArrayRangeAPPLE void __stdcall GLee_Lazy_glFlushVertexArrayRangeAPPLE(GLsizei length, GLvoid * pointer) {if (GLeeInit()) glFlushVertexArrayRangeAPPLE(length, pointer);} GLEEPFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC GLeeFuncPtr_glFlushVertexArrayRangeAPPLE=GLee_Lazy_glFlushVertexArrayRangeAPPLE; #endif #ifndef GLEE_C_DEFINED_glVertexArrayParameteriAPPLE #define GLEE_C_DEFINED_glVertexArrayParameteriAPPLE void __stdcall GLee_Lazy_glVertexArrayParameteriAPPLE(GLenum pname, GLint param) {if (GLeeInit()) glVertexArrayParameteriAPPLE(pname, param);} GLEEPFNGLVERTEXARRAYPARAMETERIAPPLEPROC GLeeFuncPtr_glVertexArrayParameteriAPPLE=GLee_Lazy_glVertexArrayParameteriAPPLE; #endif #endif /* GL_APPLE_ycbcr_422 */ #ifdef __GLEE_GL_APPLE_ycbcr_422 #endif /* GL_S3_s3tc */ #ifdef __GLEE_GL_S3_s3tc #endif /* GL_ATI_draw_buffers */ #ifdef __GLEE_GL_ATI_draw_buffers #ifndef GLEE_C_DEFINED_glDrawBuffersATI #define GLEE_C_DEFINED_glDrawBuffersATI void __stdcall GLee_Lazy_glDrawBuffersATI(GLsizei n, const GLenum * bufs) {if (GLeeInit()) glDrawBuffersATI(n, bufs);} GLEEPFNGLDRAWBUFFERSATIPROC GLeeFuncPtr_glDrawBuffersATI=GLee_Lazy_glDrawBuffersATI; #endif #endif /* GL_ATI_pixel_format_float */ #ifdef __GLEE_GL_ATI_pixel_format_float #endif /* GL_ATI_texture_env_combine3 */ #ifdef __GLEE_GL_ATI_texture_env_combine3 #endif /* GL_ATI_texture_float */ #ifdef __GLEE_GL_ATI_texture_float #endif /* GL_NV_float_buffer */ #ifdef __GLEE_GL_NV_float_buffer #endif /* GL_NV_fragment_program */ #ifdef __GLEE_GL_NV_fragment_program #ifndef GLEE_C_DEFINED_glProgramNamedParameter4fNV #define GLEE_C_DEFINED_glProgramNamedParameter4fNV void __stdcall GLee_Lazy_glProgramNamedParameter4fNV(GLuint id, GLsizei len, const GLubyte * name, GLfloat x, GLfloat y, GLfloat z, GLfloat w) {if (GLeeInit()) glProgramNamedParameter4fNV(id, len, name, x, y, z, w);} GLEEPFNGLPROGRAMNAMEDPARAMETER4FNVPROC GLeeFuncPtr_glProgramNamedParameter4fNV=GLee_Lazy_glProgramNamedParameter4fNV; #endif #ifndef GLEE_C_DEFINED_glProgramNamedParameter4dNV #define GLEE_C_DEFINED_glProgramNamedParameter4dNV void __stdcall GLee_Lazy_glProgramNamedParameter4dNV(GLuint id, GLsizei len, const GLubyte * name, GLdouble x, GLdouble y, GLdouble z, GLdouble w) {if (GLeeInit()) glProgramNamedParameter4dNV(id, len, name, x, y, z, w);} GLEEPFNGLPROGRAMNAMEDPARAMETER4DNVPROC GLeeFuncPtr_glProgramNamedParameter4dNV=GLee_Lazy_glProgramNamedParameter4dNV; #endif #ifndef GLEE_C_DEFINED_glProgramNamedParameter4fvNV #define GLEE_C_DEFINED_glProgramNamedParameter4fvNV void __stdcall GLee_Lazy_glProgramNamedParameter4fvNV(GLuint id, GLsizei len, const GLubyte * name, const GLfloat * v) {if (GLeeInit()) glProgramNamedParameter4fvNV(id, len, name, v);} GLEEPFNGLPROGRAMNAMEDPARAMETER4FVNVPROC GLeeFuncPtr_glProgramNamedParameter4fvNV=GLee_Lazy_glProgramNamedParameter4fvNV; #endif #ifndef GLEE_C_DEFINED_glProgramNamedParameter4dvNV #define GLEE_C_DEFINED_glProgramNamedParameter4dvNV void __stdcall GLee_Lazy_glProgramNamedParameter4dvNV(GLuint id, GLsizei len, const GLubyte * name, const GLdouble * v) {if (GLeeInit()) glProgramNamedParameter4dvNV(id, len, name, v);} GLEEPFNGLPROGRAMNAMEDPARAMETER4DVNVPROC GLeeFuncPtr_glProgramNamedParameter4dvNV=GLee_Lazy_glProgramNamedParameter4dvNV; #endif #ifndef GLEE_C_DEFINED_glGetProgramNamedParameterfvNV #define GLEE_C_DEFINED_glGetProgramNamedParameterfvNV void __stdcall GLee_Lazy_glGetProgramNamedParameterfvNV(GLuint id, GLsizei len, const GLubyte * name, GLfloat * params) {if (GLeeInit()) glGetProgramNamedParameterfvNV(id, len, name, params);} GLEEPFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC GLeeFuncPtr_glGetProgramNamedParameterfvNV=GLee_Lazy_glGetProgramNamedParameterfvNV; #endif #ifndef GLEE_C_DEFINED_glGetProgramNamedParameterdvNV #define GLEE_C_DEFINED_glGetProgramNamedParameterdvNV void __stdcall GLee_Lazy_glGetProgramNamedParameterdvNV(GLuint id, GLsizei len, const GLubyte * name, GLdouble * params) {if (GLeeInit()) glGetProgramNamedParameterdvNV(id, len, name, params);} GLEEPFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC GLeeFuncPtr_glGetProgramNamedParameterdvNV=GLee_Lazy_glGetProgramNamedParameterdvNV; #endif #endif /* GL_NV_half_float */ #ifdef __GLEE_GL_NV_half_float #ifndef GLEE_C_DEFINED_glVertex2hNV #define GLEE_C_DEFINED_glVertex2hNV void __stdcall GLee_Lazy_glVertex2hNV(GLhalfNV x, GLhalfNV y) {if (GLeeInit()) glVertex2hNV(x, y);} GLEEPFNGLVERTEX2HNVPROC GLeeFuncPtr_glVertex2hNV=GLee_Lazy_glVertex2hNV; #endif #ifndef GLEE_C_DEFINED_glVertex2hvNV #define GLEE_C_DEFINED_glVertex2hvNV void __stdcall GLee_Lazy_glVertex2hvNV(const GLhalfNV * v) {if (GLeeInit()) glVertex2hvNV(v);} GLEEPFNGLVERTEX2HVNVPROC GLeeFuncPtr_glVertex2hvNV=GLee_Lazy_glVertex2hvNV; #endif #ifndef GLEE_C_DEFINED_glVertex3hNV #define GLEE_C_DEFINED_glVertex3hNV void __stdcall GLee_Lazy_glVertex3hNV(GLhalfNV x, GLhalfNV y, GLhalfNV z) {if (GLeeInit()) glVertex3hNV(x, y, z);} GLEEPFNGLVERTEX3HNVPROC GLeeFuncPtr_glVertex3hNV=GLee_Lazy_glVertex3hNV; #endif #ifndef GLEE_C_DEFINED_glVertex3hvNV #define GLEE_C_DEFINED_glVertex3hvNV void __stdcall GLee_Lazy_glVertex3hvNV(const GLhalfNV * v) {if (GLeeInit()) glVertex3hvNV(v);} GLEEPFNGLVERTEX3HVNVPROC GLeeFuncPtr_glVertex3hvNV=GLee_Lazy_glVertex3hvNV; #endif #ifndef GLEE_C_DEFINED_glVertex4hNV #define GLEE_C_DEFINED_glVertex4hNV void __stdcall GLee_Lazy_glVertex4hNV(GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w) {if (GLeeInit()) glVertex4hNV(x, y, z, w);} GLEEPFNGLVERTEX4HNVPROC GLeeFuncPtr_glVertex4hNV=GLee_Lazy_glVertex4hNV; #endif #ifndef GLEE_C_DEFINED_glVertex4hvNV #define GLEE_C_DEFINED_glVertex4hvNV void __stdcall GLee_Lazy_glVertex4hvNV(const GLhalfNV * v) {if (GLeeInit()) glVertex4hvNV(v);} GLEEPFNGLVERTEX4HVNVPROC GLeeFuncPtr_glVertex4hvNV=GLee_Lazy_glVertex4hvNV; #endif #ifndef GLEE_C_DEFINED_glNormal3hNV #define GLEE_C_DEFINED_glNormal3hNV void __stdcall GLee_Lazy_glNormal3hNV(GLhalfNV nx, GLhalfNV ny, GLhalfNV nz) {if (GLeeInit()) glNormal3hNV(nx, ny, nz);} GLEEPFNGLNORMAL3HNVPROC GLeeFuncPtr_glNormal3hNV=GLee_Lazy_glNormal3hNV; #endif #ifndef GLEE_C_DEFINED_glNormal3hvNV #define GLEE_C_DEFINED_glNormal3hvNV void __stdcall GLee_Lazy_glNormal3hvNV(const GLhalfNV * v) {if (GLeeInit()) glNormal3hvNV(v);} GLEEPFNGLNORMAL3HVNVPROC GLeeFuncPtr_glNormal3hvNV=GLee_Lazy_glNormal3hvNV; #endif #ifndef GLEE_C_DEFINED_glColor3hNV #define GLEE_C_DEFINED_glColor3hNV void __stdcall GLee_Lazy_glColor3hNV(GLhalfNV red, GLhalfNV green, GLhalfNV blue) {if (GLeeInit()) glColor3hNV(red, green, blue);} GLEEPFNGLCOLOR3HNVPROC GLeeFuncPtr_glColor3hNV=GLee_Lazy_glColor3hNV; #endif #ifndef GLEE_C_DEFINED_glColor3hvNV #define GLEE_C_DEFINED_glColor3hvNV void __stdcall GLee_Lazy_glColor3hvNV(const GLhalfNV * v) {if (GLeeInit()) glColor3hvNV(v);} GLEEPFNGLCOLOR3HVNVPROC GLeeFuncPtr_glColor3hvNV=GLee_Lazy_glColor3hvNV; #endif #ifndef GLEE_C_DEFINED_glColor4hNV #define GLEE_C_DEFINED_glColor4hNV void __stdcall GLee_Lazy_glColor4hNV(GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha) {if (GLeeInit()) glColor4hNV(red, green, blue, alpha);} GLEEPFNGLCOLOR4HNVPROC GLeeFuncPtr_glColor4hNV=GLee_Lazy_glColor4hNV; #endif #ifndef GLEE_C_DEFINED_glColor4hvNV #define GLEE_C_DEFINED_glColor4hvNV void __stdcall GLee_Lazy_glColor4hvNV(const GLhalfNV * v) {if (GLeeInit()) glColor4hvNV(v);} GLEEPFNGLCOLOR4HVNVPROC GLeeFuncPtr_glColor4hvNV=GLee_Lazy_glColor4hvNV; #endif #ifndef GLEE_C_DEFINED_glTexCoord1hNV #define GLEE_C_DEFINED_glTexCoord1hNV void __stdcall GLee_Lazy_glTexCoord1hNV(GLhalfNV s) {if (GLeeInit()) glTexCoord1hNV(s);} GLEEPFNGLTEXCOORD1HNVPROC GLeeFuncPtr_glTexCoord1hNV=GLee_Lazy_glTexCoord1hNV; #endif #ifndef GLEE_C_DEFINED_glTexCoord1hvNV #define GLEE_C_DEFINED_glTexCoord1hvNV void __stdcall GLee_Lazy_glTexCoord1hvNV(const GLhalfNV * v) {if (GLeeInit()) glTexCoord1hvNV(v);} GLEEPFNGLTEXCOORD1HVNVPROC GLeeFuncPtr_glTexCoord1hvNV=GLee_Lazy_glTexCoord1hvNV; #endif #ifndef GLEE_C_DEFINED_glTexCoord2hNV #define GLEE_C_DEFINED_glTexCoord2hNV void __stdcall GLee_Lazy_glTexCoord2hNV(GLhalfNV s, GLhalfNV t) {if (GLeeInit()) glTexCoord2hNV(s, t);} GLEEPFNGLTEXCOORD2HNVPROC GLeeFuncPtr_glTexCoord2hNV=GLee_Lazy_glTexCoord2hNV; #endif #ifndef GLEE_C_DEFINED_glTexCoord2hvNV #define GLEE_C_DEFINED_glTexCoord2hvNV void __stdcall GLee_Lazy_glTexCoord2hvNV(const GLhalfNV * v) {if (GLeeInit()) glTexCoord2hvNV(v);} GLEEPFNGLTEXCOORD2HVNVPROC GLeeFuncPtr_glTexCoord2hvNV=GLee_Lazy_glTexCoord2hvNV; #endif #ifndef GLEE_C_DEFINED_glTexCoord3hNV #define GLEE_C_DEFINED_glTexCoord3hNV void __stdcall GLee_Lazy_glTexCoord3hNV(GLhalfNV s, GLhalfNV t, GLhalfNV r) {if (GLeeInit()) glTexCoord3hNV(s, t, r);} GLEEPFNGLTEXCOORD3HNVPROC GLeeFuncPtr_glTexCoord3hNV=GLee_Lazy_glTexCoord3hNV; #endif #ifndef GLEE_C_DEFINED_glTexCoord3hvNV #define GLEE_C_DEFINED_glTexCoord3hvNV void __stdcall GLee_Lazy_glTexCoord3hvNV(const GLhalfNV * v) {if (GLeeInit()) glTexCoord3hvNV(v);} GLEEPFNGLTEXCOORD3HVNVPROC GLeeFuncPtr_glTexCoord3hvNV=GLee_Lazy_glTexCoord3hvNV; #endif #ifndef GLEE_C_DEFINED_glTexCoord4hNV #define GLEE_C_DEFINED_glTexCoord4hNV void __stdcall GLee_Lazy_glTexCoord4hNV(GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q) {if (GLeeInit()) glTexCoord4hNV(s, t, r, q);} GLEEPFNGLTEXCOORD4HNVPROC GLeeFuncPtr_glTexCoord4hNV=GLee_Lazy_glTexCoord4hNV; #endif #ifndef GLEE_C_DEFINED_glTexCoord4hvNV #define GLEE_C_DEFINED_glTexCoord4hvNV void __stdcall GLee_Lazy_glTexCoord4hvNV(const GLhalfNV * v) {if (GLeeInit()) glTexCoord4hvNV(v);} GLEEPFNGLTEXCOORD4HVNVPROC GLeeFuncPtr_glTexCoord4hvNV=GLee_Lazy_glTexCoord4hvNV; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord1hNV #define GLEE_C_DEFINED_glMultiTexCoord1hNV void __stdcall GLee_Lazy_glMultiTexCoord1hNV(GLenum target, GLhalfNV s) {if (GLeeInit()) glMultiTexCoord1hNV(target, s);} GLEEPFNGLMULTITEXCOORD1HNVPROC GLeeFuncPtr_glMultiTexCoord1hNV=GLee_Lazy_glMultiTexCoord1hNV; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord1hvNV #define GLEE_C_DEFINED_glMultiTexCoord1hvNV void __stdcall GLee_Lazy_glMultiTexCoord1hvNV(GLenum target, const GLhalfNV * v) {if (GLeeInit()) glMultiTexCoord1hvNV(target, v);} GLEEPFNGLMULTITEXCOORD1HVNVPROC GLeeFuncPtr_glMultiTexCoord1hvNV=GLee_Lazy_glMultiTexCoord1hvNV; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord2hNV #define GLEE_C_DEFINED_glMultiTexCoord2hNV void __stdcall GLee_Lazy_glMultiTexCoord2hNV(GLenum target, GLhalfNV s, GLhalfNV t) {if (GLeeInit()) glMultiTexCoord2hNV(target, s, t);} GLEEPFNGLMULTITEXCOORD2HNVPROC GLeeFuncPtr_glMultiTexCoord2hNV=GLee_Lazy_glMultiTexCoord2hNV; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord2hvNV #define GLEE_C_DEFINED_glMultiTexCoord2hvNV void __stdcall GLee_Lazy_glMultiTexCoord2hvNV(GLenum target, const GLhalfNV * v) {if (GLeeInit()) glMultiTexCoord2hvNV(target, v);} GLEEPFNGLMULTITEXCOORD2HVNVPROC GLeeFuncPtr_glMultiTexCoord2hvNV=GLee_Lazy_glMultiTexCoord2hvNV; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord3hNV #define GLEE_C_DEFINED_glMultiTexCoord3hNV void __stdcall GLee_Lazy_glMultiTexCoord3hNV(GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r) {if (GLeeInit()) glMultiTexCoord3hNV(target, s, t, r);} GLEEPFNGLMULTITEXCOORD3HNVPROC GLeeFuncPtr_glMultiTexCoord3hNV=GLee_Lazy_glMultiTexCoord3hNV; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord3hvNV #define GLEE_C_DEFINED_glMultiTexCoord3hvNV void __stdcall GLee_Lazy_glMultiTexCoord3hvNV(GLenum target, const GLhalfNV * v) {if (GLeeInit()) glMultiTexCoord3hvNV(target, v);} GLEEPFNGLMULTITEXCOORD3HVNVPROC GLeeFuncPtr_glMultiTexCoord3hvNV=GLee_Lazy_glMultiTexCoord3hvNV; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord4hNV #define GLEE_C_DEFINED_glMultiTexCoord4hNV void __stdcall GLee_Lazy_glMultiTexCoord4hNV(GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q) {if (GLeeInit()) glMultiTexCoord4hNV(target, s, t, r, q);} GLEEPFNGLMULTITEXCOORD4HNVPROC GLeeFuncPtr_glMultiTexCoord4hNV=GLee_Lazy_glMultiTexCoord4hNV; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoord4hvNV #define GLEE_C_DEFINED_glMultiTexCoord4hvNV void __stdcall GLee_Lazy_glMultiTexCoord4hvNV(GLenum target, const GLhalfNV * v) {if (GLeeInit()) glMultiTexCoord4hvNV(target, v);} GLEEPFNGLMULTITEXCOORD4HVNVPROC GLeeFuncPtr_glMultiTexCoord4hvNV=GLee_Lazy_glMultiTexCoord4hvNV; #endif #ifndef GLEE_C_DEFINED_glFogCoordhNV #define GLEE_C_DEFINED_glFogCoordhNV void __stdcall GLee_Lazy_glFogCoordhNV(GLhalfNV fog) {if (GLeeInit()) glFogCoordhNV(fog);} GLEEPFNGLFOGCOORDHNVPROC GLeeFuncPtr_glFogCoordhNV=GLee_Lazy_glFogCoordhNV; #endif #ifndef GLEE_C_DEFINED_glFogCoordhvNV #define GLEE_C_DEFINED_glFogCoordhvNV void __stdcall GLee_Lazy_glFogCoordhvNV(const GLhalfNV * fog) {if (GLeeInit()) glFogCoordhvNV(fog);} GLEEPFNGLFOGCOORDHVNVPROC GLeeFuncPtr_glFogCoordhvNV=GLee_Lazy_glFogCoordhvNV; #endif #ifndef GLEE_C_DEFINED_glSecondaryColor3hNV #define GLEE_C_DEFINED_glSecondaryColor3hNV void __stdcall GLee_Lazy_glSecondaryColor3hNV(GLhalfNV red, GLhalfNV green, GLhalfNV blue) {if (GLeeInit()) glSecondaryColor3hNV(red, green, blue);} GLEEPFNGLSECONDARYCOLOR3HNVPROC GLeeFuncPtr_glSecondaryColor3hNV=GLee_Lazy_glSecondaryColor3hNV; #endif #ifndef GLEE_C_DEFINED_glSecondaryColor3hvNV #define GLEE_C_DEFINED_glSecondaryColor3hvNV void __stdcall GLee_Lazy_glSecondaryColor3hvNV(const GLhalfNV * v) {if (GLeeInit()) glSecondaryColor3hvNV(v);} GLEEPFNGLSECONDARYCOLOR3HVNVPROC GLeeFuncPtr_glSecondaryColor3hvNV=GLee_Lazy_glSecondaryColor3hvNV; #endif #ifndef GLEE_C_DEFINED_glVertexWeighthNV #define GLEE_C_DEFINED_glVertexWeighthNV void __stdcall GLee_Lazy_glVertexWeighthNV(GLhalfNV weight) {if (GLeeInit()) glVertexWeighthNV(weight);} GLEEPFNGLVERTEXWEIGHTHNVPROC GLeeFuncPtr_glVertexWeighthNV=GLee_Lazy_glVertexWeighthNV; #endif #ifndef GLEE_C_DEFINED_glVertexWeighthvNV #define GLEE_C_DEFINED_glVertexWeighthvNV void __stdcall GLee_Lazy_glVertexWeighthvNV(const GLhalfNV * weight) {if (GLeeInit()) glVertexWeighthvNV(weight);} GLEEPFNGLVERTEXWEIGHTHVNVPROC GLeeFuncPtr_glVertexWeighthvNV=GLee_Lazy_glVertexWeighthvNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib1hNV #define GLEE_C_DEFINED_glVertexAttrib1hNV void __stdcall GLee_Lazy_glVertexAttrib1hNV(GLuint index, GLhalfNV x) {if (GLeeInit()) glVertexAttrib1hNV(index, x);} GLEEPFNGLVERTEXATTRIB1HNVPROC GLeeFuncPtr_glVertexAttrib1hNV=GLee_Lazy_glVertexAttrib1hNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib1hvNV #define GLEE_C_DEFINED_glVertexAttrib1hvNV void __stdcall GLee_Lazy_glVertexAttrib1hvNV(GLuint index, const GLhalfNV * v) {if (GLeeInit()) glVertexAttrib1hvNV(index, v);} GLEEPFNGLVERTEXATTRIB1HVNVPROC GLeeFuncPtr_glVertexAttrib1hvNV=GLee_Lazy_glVertexAttrib1hvNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib2hNV #define GLEE_C_DEFINED_glVertexAttrib2hNV void __stdcall GLee_Lazy_glVertexAttrib2hNV(GLuint index, GLhalfNV x, GLhalfNV y) {if (GLeeInit()) glVertexAttrib2hNV(index, x, y);} GLEEPFNGLVERTEXATTRIB2HNVPROC GLeeFuncPtr_glVertexAttrib2hNV=GLee_Lazy_glVertexAttrib2hNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib2hvNV #define GLEE_C_DEFINED_glVertexAttrib2hvNV void __stdcall GLee_Lazy_glVertexAttrib2hvNV(GLuint index, const GLhalfNV * v) {if (GLeeInit()) glVertexAttrib2hvNV(index, v);} GLEEPFNGLVERTEXATTRIB2HVNVPROC GLeeFuncPtr_glVertexAttrib2hvNV=GLee_Lazy_glVertexAttrib2hvNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib3hNV #define GLEE_C_DEFINED_glVertexAttrib3hNV void __stdcall GLee_Lazy_glVertexAttrib3hNV(GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z) {if (GLeeInit()) glVertexAttrib3hNV(index, x, y, z);} GLEEPFNGLVERTEXATTRIB3HNVPROC GLeeFuncPtr_glVertexAttrib3hNV=GLee_Lazy_glVertexAttrib3hNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib3hvNV #define GLEE_C_DEFINED_glVertexAttrib3hvNV void __stdcall GLee_Lazy_glVertexAttrib3hvNV(GLuint index, const GLhalfNV * v) {if (GLeeInit()) glVertexAttrib3hvNV(index, v);} GLEEPFNGLVERTEXATTRIB3HVNVPROC GLeeFuncPtr_glVertexAttrib3hvNV=GLee_Lazy_glVertexAttrib3hvNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4hNV #define GLEE_C_DEFINED_glVertexAttrib4hNV void __stdcall GLee_Lazy_glVertexAttrib4hNV(GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w) {if (GLeeInit()) glVertexAttrib4hNV(index, x, y, z, w);} GLEEPFNGLVERTEXATTRIB4HNVPROC GLeeFuncPtr_glVertexAttrib4hNV=GLee_Lazy_glVertexAttrib4hNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttrib4hvNV #define GLEE_C_DEFINED_glVertexAttrib4hvNV void __stdcall GLee_Lazy_glVertexAttrib4hvNV(GLuint index, const GLhalfNV * v) {if (GLeeInit()) glVertexAttrib4hvNV(index, v);} GLEEPFNGLVERTEXATTRIB4HVNVPROC GLeeFuncPtr_glVertexAttrib4hvNV=GLee_Lazy_glVertexAttrib4hvNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttribs1hvNV #define GLEE_C_DEFINED_glVertexAttribs1hvNV void __stdcall GLee_Lazy_glVertexAttribs1hvNV(GLuint index, GLsizei n, const GLhalfNV * v) {if (GLeeInit()) glVertexAttribs1hvNV(index, n, v);} GLEEPFNGLVERTEXATTRIBS1HVNVPROC GLeeFuncPtr_glVertexAttribs1hvNV=GLee_Lazy_glVertexAttribs1hvNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttribs2hvNV #define GLEE_C_DEFINED_glVertexAttribs2hvNV void __stdcall GLee_Lazy_glVertexAttribs2hvNV(GLuint index, GLsizei n, const GLhalfNV * v) {if (GLeeInit()) glVertexAttribs2hvNV(index, n, v);} GLEEPFNGLVERTEXATTRIBS2HVNVPROC GLeeFuncPtr_glVertexAttribs2hvNV=GLee_Lazy_glVertexAttribs2hvNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttribs3hvNV #define GLEE_C_DEFINED_glVertexAttribs3hvNV void __stdcall GLee_Lazy_glVertexAttribs3hvNV(GLuint index, GLsizei n, const GLhalfNV * v) {if (GLeeInit()) glVertexAttribs3hvNV(index, n, v);} GLEEPFNGLVERTEXATTRIBS3HVNVPROC GLeeFuncPtr_glVertexAttribs3hvNV=GLee_Lazy_glVertexAttribs3hvNV; #endif #ifndef GLEE_C_DEFINED_glVertexAttribs4hvNV #define GLEE_C_DEFINED_glVertexAttribs4hvNV void __stdcall GLee_Lazy_glVertexAttribs4hvNV(GLuint index, GLsizei n, const GLhalfNV * v) {if (GLeeInit()) glVertexAttribs4hvNV(index, n, v);} GLEEPFNGLVERTEXATTRIBS4HVNVPROC GLeeFuncPtr_glVertexAttribs4hvNV=GLee_Lazy_glVertexAttribs4hvNV; #endif #endif /* GL_NV_pixel_data_range */ #ifdef __GLEE_GL_NV_pixel_data_range #ifndef GLEE_C_DEFINED_glPixelDataRangeNV #define GLEE_C_DEFINED_glPixelDataRangeNV void __stdcall GLee_Lazy_glPixelDataRangeNV(GLenum target, GLsizei length, GLvoid * pointer) {if (GLeeInit()) glPixelDataRangeNV(target, length, pointer);} GLEEPFNGLPIXELDATARANGENVPROC GLeeFuncPtr_glPixelDataRangeNV=GLee_Lazy_glPixelDataRangeNV; #endif #ifndef GLEE_C_DEFINED_glFlushPixelDataRangeNV #define GLEE_C_DEFINED_glFlushPixelDataRangeNV void __stdcall GLee_Lazy_glFlushPixelDataRangeNV(GLenum target) {if (GLeeInit()) glFlushPixelDataRangeNV(target);} GLEEPFNGLFLUSHPIXELDATARANGENVPROC GLeeFuncPtr_glFlushPixelDataRangeNV=GLee_Lazy_glFlushPixelDataRangeNV; #endif #endif /* GL_NV_primitive_restart */ #ifdef __GLEE_GL_NV_primitive_restart #ifndef GLEE_C_DEFINED_glPrimitiveRestartNV #define GLEE_C_DEFINED_glPrimitiveRestartNV void __stdcall GLee_Lazy_glPrimitiveRestartNV(void) {if (GLeeInit()) glPrimitiveRestartNV();} GLEEPFNGLPRIMITIVERESTARTNVPROC GLeeFuncPtr_glPrimitiveRestartNV=GLee_Lazy_glPrimitiveRestartNV; #endif #ifndef GLEE_C_DEFINED_glPrimitiveRestartIndexNV #define GLEE_C_DEFINED_glPrimitiveRestartIndexNV void __stdcall GLee_Lazy_glPrimitiveRestartIndexNV(GLuint index) {if (GLeeInit()) glPrimitiveRestartIndexNV(index);} GLEEPFNGLPRIMITIVERESTARTINDEXNVPROC GLeeFuncPtr_glPrimitiveRestartIndexNV=GLee_Lazy_glPrimitiveRestartIndexNV; #endif #endif /* GL_NV_texture_expand_normal */ #ifdef __GLEE_GL_NV_texture_expand_normal #endif /* GL_NV_vertex_program2 */ #ifdef __GLEE_GL_NV_vertex_program2 #endif /* GL_ATI_map_object_buffer */ #ifdef __GLEE_GL_ATI_map_object_buffer #ifndef GLEE_C_DEFINED_glMapObjectBufferATI #define GLEE_C_DEFINED_glMapObjectBufferATI GLvoid* __stdcall GLee_Lazy_glMapObjectBufferATI(GLuint buffer) {if (GLeeInit()) return glMapObjectBufferATI(buffer); return (GLvoid*)0;} GLEEPFNGLMAPOBJECTBUFFERATIPROC GLeeFuncPtr_glMapObjectBufferATI=GLee_Lazy_glMapObjectBufferATI; #endif #ifndef GLEE_C_DEFINED_glUnmapObjectBufferATI #define GLEE_C_DEFINED_glUnmapObjectBufferATI void __stdcall GLee_Lazy_glUnmapObjectBufferATI(GLuint buffer) {if (GLeeInit()) glUnmapObjectBufferATI(buffer);} GLEEPFNGLUNMAPOBJECTBUFFERATIPROC GLeeFuncPtr_glUnmapObjectBufferATI=GLee_Lazy_glUnmapObjectBufferATI; #endif #endif /* GL_ATI_separate_stencil */ #ifdef __GLEE_GL_ATI_separate_stencil #ifndef GLEE_C_DEFINED_glStencilOpSeparateATI #define GLEE_C_DEFINED_glStencilOpSeparateATI void __stdcall GLee_Lazy_glStencilOpSeparateATI(GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass) {if (GLeeInit()) glStencilOpSeparateATI(face, sfail, dpfail, dppass);} GLEEPFNGLSTENCILOPSEPARATEATIPROC GLeeFuncPtr_glStencilOpSeparateATI=GLee_Lazy_glStencilOpSeparateATI; #endif #ifndef GLEE_C_DEFINED_glStencilFuncSeparateATI #define GLEE_C_DEFINED_glStencilFuncSeparateATI void __stdcall GLee_Lazy_glStencilFuncSeparateATI(GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask) {if (GLeeInit()) glStencilFuncSeparateATI(frontfunc, backfunc, ref, mask);} GLEEPFNGLSTENCILFUNCSEPARATEATIPROC GLeeFuncPtr_glStencilFuncSeparateATI=GLee_Lazy_glStencilFuncSeparateATI; #endif #endif /* GL_ATI_vertex_attrib_array_object */ #ifdef __GLEE_GL_ATI_vertex_attrib_array_object #ifndef GLEE_C_DEFINED_glVertexAttribArrayObjectATI #define GLEE_C_DEFINED_glVertexAttribArrayObjectATI void __stdcall GLee_Lazy_glVertexAttribArrayObjectATI(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset) {if (GLeeInit()) glVertexAttribArrayObjectATI(index, size, type, normalized, stride, buffer, offset);} GLEEPFNGLVERTEXATTRIBARRAYOBJECTATIPROC GLeeFuncPtr_glVertexAttribArrayObjectATI=GLee_Lazy_glVertexAttribArrayObjectATI; #endif #ifndef GLEE_C_DEFINED_glGetVertexAttribArrayObjectfvATI #define GLEE_C_DEFINED_glGetVertexAttribArrayObjectfvATI void __stdcall GLee_Lazy_glGetVertexAttribArrayObjectfvATI(GLuint index, GLenum pname, GLfloat * params) {if (GLeeInit()) glGetVertexAttribArrayObjectfvATI(index, pname, params);} GLEEPFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC GLeeFuncPtr_glGetVertexAttribArrayObjectfvATI=GLee_Lazy_glGetVertexAttribArrayObjectfvATI; #endif #ifndef GLEE_C_DEFINED_glGetVertexAttribArrayObjectivATI #define GLEE_C_DEFINED_glGetVertexAttribArrayObjectivATI void __stdcall GLee_Lazy_glGetVertexAttribArrayObjectivATI(GLuint index, GLenum pname, GLint * params) {if (GLeeInit()) glGetVertexAttribArrayObjectivATI(index, pname, params);} GLEEPFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC GLeeFuncPtr_glGetVertexAttribArrayObjectivATI=GLee_Lazy_glGetVertexAttribArrayObjectivATI; #endif #endif /* GL_OES_read_format */ #ifdef __GLEE_GL_OES_read_format #endif /* GL_EXT_depth_bounds_test */ #ifdef __GLEE_GL_EXT_depth_bounds_test #ifndef GLEE_C_DEFINED_glDepthBoundsEXT #define GLEE_C_DEFINED_glDepthBoundsEXT void __stdcall GLee_Lazy_glDepthBoundsEXT(GLclampd zmin, GLclampd zmax) {if (GLeeInit()) glDepthBoundsEXT(zmin, zmax);} GLEEPFNGLDEPTHBOUNDSEXTPROC GLeeFuncPtr_glDepthBoundsEXT=GLee_Lazy_glDepthBoundsEXT; #endif #endif /* GL_EXT_texture_mirror_clamp */ #ifdef __GLEE_GL_EXT_texture_mirror_clamp #endif /* GL_EXT_blend_equation_separate */ #ifdef __GLEE_GL_EXT_blend_equation_separate #ifndef GLEE_C_DEFINED_glBlendEquationSeparateEXT #define GLEE_C_DEFINED_glBlendEquationSeparateEXT void __stdcall GLee_Lazy_glBlendEquationSeparateEXT(GLenum modeRGB, GLenum modeAlpha) {if (GLeeInit()) glBlendEquationSeparateEXT(modeRGB, modeAlpha);} GLEEPFNGLBLENDEQUATIONSEPARATEEXTPROC GLeeFuncPtr_glBlendEquationSeparateEXT=GLee_Lazy_glBlendEquationSeparateEXT; #endif #endif /* GL_MESA_pack_invert */ #ifdef __GLEE_GL_MESA_pack_invert #endif /* GL_MESA_ycbcr_texture */ #ifdef __GLEE_GL_MESA_ycbcr_texture #endif /* GL_EXT_pixel_buffer_object */ #ifdef __GLEE_GL_EXT_pixel_buffer_object #endif /* GL_NV_fragment_program_option */ #ifdef __GLEE_GL_NV_fragment_program_option #endif /* GL_NV_fragment_program2 */ #ifdef __GLEE_GL_NV_fragment_program2 #endif /* GL_NV_vertex_program2_option */ #ifdef __GLEE_GL_NV_vertex_program2_option #endif /* GL_NV_vertex_program3 */ #ifdef __GLEE_GL_NV_vertex_program3 #endif /* GL_EXT_framebuffer_object */ #ifdef __GLEE_GL_EXT_framebuffer_object #ifndef GLEE_C_DEFINED_glIsRenderbufferEXT #define GLEE_C_DEFINED_glIsRenderbufferEXT GLboolean __stdcall GLee_Lazy_glIsRenderbufferEXT(GLuint renderbuffer) {if (GLeeInit()) return glIsRenderbufferEXT(renderbuffer); return (GLboolean)0;} GLEEPFNGLISRENDERBUFFEREXTPROC GLeeFuncPtr_glIsRenderbufferEXT=GLee_Lazy_glIsRenderbufferEXT; #endif #ifndef GLEE_C_DEFINED_glBindRenderbufferEXT #define GLEE_C_DEFINED_glBindRenderbufferEXT void __stdcall GLee_Lazy_glBindRenderbufferEXT(GLenum target, GLuint renderbuffer) {if (GLeeInit()) glBindRenderbufferEXT(target, renderbuffer);} GLEEPFNGLBINDRENDERBUFFEREXTPROC GLeeFuncPtr_glBindRenderbufferEXT=GLee_Lazy_glBindRenderbufferEXT; #endif #ifndef GLEE_C_DEFINED_glDeleteRenderbuffersEXT #define GLEE_C_DEFINED_glDeleteRenderbuffersEXT void __stdcall GLee_Lazy_glDeleteRenderbuffersEXT(GLsizei n, const GLuint * renderbuffers) {if (GLeeInit()) glDeleteRenderbuffersEXT(n, renderbuffers);} GLEEPFNGLDELETERENDERBUFFERSEXTPROC GLeeFuncPtr_glDeleteRenderbuffersEXT=GLee_Lazy_glDeleteRenderbuffersEXT; #endif #ifndef GLEE_C_DEFINED_glGenRenderbuffersEXT #define GLEE_C_DEFINED_glGenRenderbuffersEXT void __stdcall GLee_Lazy_glGenRenderbuffersEXT(GLsizei n, GLuint * renderbuffers) {if (GLeeInit()) glGenRenderbuffersEXT(n, renderbuffers);} GLEEPFNGLGENRENDERBUFFERSEXTPROC GLeeFuncPtr_glGenRenderbuffersEXT=GLee_Lazy_glGenRenderbuffersEXT; #endif #ifndef GLEE_C_DEFINED_glRenderbufferStorageEXT #define GLEE_C_DEFINED_glRenderbufferStorageEXT void __stdcall GLee_Lazy_glRenderbufferStorageEXT(GLenum target, GLenum internalformat, GLsizei width, GLsizei height) {if (GLeeInit()) glRenderbufferStorageEXT(target, internalformat, width, height);} GLEEPFNGLRENDERBUFFERSTORAGEEXTPROC GLeeFuncPtr_glRenderbufferStorageEXT=GLee_Lazy_glRenderbufferStorageEXT; #endif #ifndef GLEE_C_DEFINED_glGetRenderbufferParameterivEXT #define GLEE_C_DEFINED_glGetRenderbufferParameterivEXT void __stdcall GLee_Lazy_glGetRenderbufferParameterivEXT(GLenum target, GLenum pname, GLint * params) {if (GLeeInit()) glGetRenderbufferParameterivEXT(target, pname, params);} GLEEPFNGLGETRENDERBUFFERPARAMETERIVEXTPROC GLeeFuncPtr_glGetRenderbufferParameterivEXT=GLee_Lazy_glGetRenderbufferParameterivEXT; #endif #ifndef GLEE_C_DEFINED_glIsFramebufferEXT #define GLEE_C_DEFINED_glIsFramebufferEXT GLboolean __stdcall GLee_Lazy_glIsFramebufferEXT(GLuint framebuffer) {if (GLeeInit()) return glIsFramebufferEXT(framebuffer); return (GLboolean)0;} GLEEPFNGLISFRAMEBUFFEREXTPROC GLeeFuncPtr_glIsFramebufferEXT=GLee_Lazy_glIsFramebufferEXT; #endif #ifndef GLEE_C_DEFINED_glBindFramebufferEXT #define GLEE_C_DEFINED_glBindFramebufferEXT void __stdcall GLee_Lazy_glBindFramebufferEXT(GLenum target, GLuint framebuffer) {if (GLeeInit()) glBindFramebufferEXT(target, framebuffer);} GLEEPFNGLBINDFRAMEBUFFEREXTPROC GLeeFuncPtr_glBindFramebufferEXT=GLee_Lazy_glBindFramebufferEXT; #endif #ifndef GLEE_C_DEFINED_glDeleteFramebuffersEXT #define GLEE_C_DEFINED_glDeleteFramebuffersEXT void __stdcall GLee_Lazy_glDeleteFramebuffersEXT(GLsizei n, const GLuint * framebuffers) {if (GLeeInit()) glDeleteFramebuffersEXT(n, framebuffers);} GLEEPFNGLDELETEFRAMEBUFFERSEXTPROC GLeeFuncPtr_glDeleteFramebuffersEXT=GLee_Lazy_glDeleteFramebuffersEXT; #endif #ifndef GLEE_C_DEFINED_glGenFramebuffersEXT #define GLEE_C_DEFINED_glGenFramebuffersEXT void __stdcall GLee_Lazy_glGenFramebuffersEXT(GLsizei n, GLuint * framebuffers) {if (GLeeInit()) glGenFramebuffersEXT(n, framebuffers);} GLEEPFNGLGENFRAMEBUFFERSEXTPROC GLeeFuncPtr_glGenFramebuffersEXT=GLee_Lazy_glGenFramebuffersEXT; #endif #ifndef GLEE_C_DEFINED_glCheckFramebufferStatusEXT #define GLEE_C_DEFINED_glCheckFramebufferStatusEXT GLenum __stdcall GLee_Lazy_glCheckFramebufferStatusEXT(GLenum target) {if (GLeeInit()) return glCheckFramebufferStatusEXT(target); return (GLenum)0;} GLEEPFNGLCHECKFRAMEBUFFERSTATUSEXTPROC GLeeFuncPtr_glCheckFramebufferStatusEXT=GLee_Lazy_glCheckFramebufferStatusEXT; #endif #ifndef GLEE_C_DEFINED_glFramebufferTexture1DEXT #define GLEE_C_DEFINED_glFramebufferTexture1DEXT void __stdcall GLee_Lazy_glFramebufferTexture1DEXT(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) {if (GLeeInit()) glFramebufferTexture1DEXT(target, attachment, textarget, texture, level);} GLEEPFNGLFRAMEBUFFERTEXTURE1DEXTPROC GLeeFuncPtr_glFramebufferTexture1DEXT=GLee_Lazy_glFramebufferTexture1DEXT; #endif #ifndef GLEE_C_DEFINED_glFramebufferTexture2DEXT #define GLEE_C_DEFINED_glFramebufferTexture2DEXT void __stdcall GLee_Lazy_glFramebufferTexture2DEXT(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) {if (GLeeInit()) glFramebufferTexture2DEXT(target, attachment, textarget, texture, level);} GLEEPFNGLFRAMEBUFFERTEXTURE2DEXTPROC GLeeFuncPtr_glFramebufferTexture2DEXT=GLee_Lazy_glFramebufferTexture2DEXT; #endif #ifndef GLEE_C_DEFINED_glFramebufferTexture3DEXT #define GLEE_C_DEFINED_glFramebufferTexture3DEXT void __stdcall GLee_Lazy_glFramebufferTexture3DEXT(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset) {if (GLeeInit()) glFramebufferTexture3DEXT(target, attachment, textarget, texture, level, zoffset);} GLEEPFNGLFRAMEBUFFERTEXTURE3DEXTPROC GLeeFuncPtr_glFramebufferTexture3DEXT=GLee_Lazy_glFramebufferTexture3DEXT; #endif #ifndef GLEE_C_DEFINED_glFramebufferRenderbufferEXT #define GLEE_C_DEFINED_glFramebufferRenderbufferEXT void __stdcall GLee_Lazy_glFramebufferRenderbufferEXT(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) {if (GLeeInit()) glFramebufferRenderbufferEXT(target, attachment, renderbuffertarget, renderbuffer);} GLEEPFNGLFRAMEBUFFERRENDERBUFFEREXTPROC GLeeFuncPtr_glFramebufferRenderbufferEXT=GLee_Lazy_glFramebufferRenderbufferEXT; #endif #ifndef GLEE_C_DEFINED_glGetFramebufferAttachmentParameterivEXT #define GLEE_C_DEFINED_glGetFramebufferAttachmentParameterivEXT void __stdcall GLee_Lazy_glGetFramebufferAttachmentParameterivEXT(GLenum target, GLenum attachment, GLenum pname, GLint * params) {if (GLeeInit()) glGetFramebufferAttachmentParameterivEXT(target, attachment, pname, params);} GLEEPFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC GLeeFuncPtr_glGetFramebufferAttachmentParameterivEXT=GLee_Lazy_glGetFramebufferAttachmentParameterivEXT; #endif #ifndef GLEE_C_DEFINED_glGenerateMipmapEXT #define GLEE_C_DEFINED_glGenerateMipmapEXT void __stdcall GLee_Lazy_glGenerateMipmapEXT(GLenum target) {if (GLeeInit()) glGenerateMipmapEXT(target);} GLEEPFNGLGENERATEMIPMAPEXTPROC GLeeFuncPtr_glGenerateMipmapEXT=GLee_Lazy_glGenerateMipmapEXT; #endif #endif /* GL_GREMEDY_string_marker */ #ifdef __GLEE_GL_GREMEDY_string_marker #ifndef GLEE_C_DEFINED_glStringMarkerGREMEDY #define GLEE_C_DEFINED_glStringMarkerGREMEDY void __stdcall GLee_Lazy_glStringMarkerGREMEDY(GLsizei len, const GLvoid * string) {if (GLeeInit()) glStringMarkerGREMEDY(len, string);} GLEEPFNGLSTRINGMARKERGREMEDYPROC GLeeFuncPtr_glStringMarkerGREMEDY=GLee_Lazy_glStringMarkerGREMEDY; #endif #endif /* GL_EXT_packed_depth_stencil */ #ifdef __GLEE_GL_EXT_packed_depth_stencil #endif /* GL_EXT_stencil_clear_tag */ #ifdef __GLEE_GL_EXT_stencil_clear_tag #ifndef GLEE_C_DEFINED_glStencilClearTagEXT #define GLEE_C_DEFINED_glStencilClearTagEXT void __stdcall GLee_Lazy_glStencilClearTagEXT(GLsizei stencilTagBits, GLuint stencilClearTag) {if (GLeeInit()) glStencilClearTagEXT(stencilTagBits, stencilClearTag);} GLEEPFNGLSTENCILCLEARTAGEXTPROC GLeeFuncPtr_glStencilClearTagEXT=GLee_Lazy_glStencilClearTagEXT; #endif #endif /* GL_EXT_texture_sRGB */ #ifdef __GLEE_GL_EXT_texture_sRGB #endif /* GL_EXT_framebuffer_blit */ #ifdef __GLEE_GL_EXT_framebuffer_blit #ifndef GLEE_C_DEFINED_glBlitFramebufferEXT #define GLEE_C_DEFINED_glBlitFramebufferEXT void __stdcall GLee_Lazy_glBlitFramebufferEXT(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) {if (GLeeInit()) glBlitFramebufferEXT(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);} GLEEPFNGLBLITFRAMEBUFFEREXTPROC GLeeFuncPtr_glBlitFramebufferEXT=GLee_Lazy_glBlitFramebufferEXT; #endif #endif /* GL_EXT_framebuffer_multisample */ #ifdef __GLEE_GL_EXT_framebuffer_multisample #ifndef GLEE_C_DEFINED_glRenderbufferStorageMultisampleEXT #define GLEE_C_DEFINED_glRenderbufferStorageMultisampleEXT void __stdcall GLee_Lazy_glRenderbufferStorageMultisampleEXT(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) {if (GLeeInit()) glRenderbufferStorageMultisampleEXT(target, samples, internalformat, width, height);} GLEEPFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC GLeeFuncPtr_glRenderbufferStorageMultisampleEXT=GLee_Lazy_glRenderbufferStorageMultisampleEXT; #endif #endif /* GL_MESAX_texture_stack */ #ifdef __GLEE_GL_MESAX_texture_stack #endif /* GL_EXT_timer_query */ #ifdef __GLEE_GL_EXT_timer_query #ifndef GLEE_C_DEFINED_glGetQueryObjecti64vEXT #define GLEE_C_DEFINED_glGetQueryObjecti64vEXT void __stdcall GLee_Lazy_glGetQueryObjecti64vEXT(GLuint id, GLenum pname, GLint64EXT * params) {if (GLeeInit()) glGetQueryObjecti64vEXT(id, pname, params);} GLEEPFNGLGETQUERYOBJECTI64VEXTPROC GLeeFuncPtr_glGetQueryObjecti64vEXT=GLee_Lazy_glGetQueryObjecti64vEXT; #endif #ifndef GLEE_C_DEFINED_glGetQueryObjectui64vEXT #define GLEE_C_DEFINED_glGetQueryObjectui64vEXT void __stdcall GLee_Lazy_glGetQueryObjectui64vEXT(GLuint id, GLenum pname, GLuint64EXT * params) {if (GLeeInit()) glGetQueryObjectui64vEXT(id, pname, params);} GLEEPFNGLGETQUERYOBJECTUI64VEXTPROC GLeeFuncPtr_glGetQueryObjectui64vEXT=GLee_Lazy_glGetQueryObjectui64vEXT; #endif #endif /* GL_EXT_gpu_program_parameters */ #ifdef __GLEE_GL_EXT_gpu_program_parameters #ifndef GLEE_C_DEFINED_glProgramEnvParameters4fvEXT #define GLEE_C_DEFINED_glProgramEnvParameters4fvEXT void __stdcall GLee_Lazy_glProgramEnvParameters4fvEXT(GLenum target, GLuint index, GLsizei count, const GLfloat * params) {if (GLeeInit()) glProgramEnvParameters4fvEXT(target, index, count, params);} GLEEPFNGLPROGRAMENVPARAMETERS4FVEXTPROC GLeeFuncPtr_glProgramEnvParameters4fvEXT=GLee_Lazy_glProgramEnvParameters4fvEXT; #endif #ifndef GLEE_C_DEFINED_glProgramLocalParameters4fvEXT #define GLEE_C_DEFINED_glProgramLocalParameters4fvEXT void __stdcall GLee_Lazy_glProgramLocalParameters4fvEXT(GLenum target, GLuint index, GLsizei count, const GLfloat * params) {if (GLeeInit()) glProgramLocalParameters4fvEXT(target, index, count, params);} GLEEPFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC GLeeFuncPtr_glProgramLocalParameters4fvEXT=GLee_Lazy_glProgramLocalParameters4fvEXT; #endif #endif /* GL_APPLE_flush_buffer_range */ #ifdef __GLEE_GL_APPLE_flush_buffer_range #ifndef GLEE_C_DEFINED_glBufferParameteriAPPLE #define GLEE_C_DEFINED_glBufferParameteriAPPLE void __stdcall GLee_Lazy_glBufferParameteriAPPLE(GLenum target, GLenum pname, GLint param) {if (GLeeInit()) glBufferParameteriAPPLE(target, pname, param);} GLEEPFNGLBUFFERPARAMETERIAPPLEPROC GLeeFuncPtr_glBufferParameteriAPPLE=GLee_Lazy_glBufferParameteriAPPLE; #endif #ifndef GLEE_C_DEFINED_glFlushMappedBufferRangeAPPLE #define GLEE_C_DEFINED_glFlushMappedBufferRangeAPPLE void __stdcall GLee_Lazy_glFlushMappedBufferRangeAPPLE(GLenum target, GLintptr offset, GLsizeiptr size) {if (GLeeInit()) glFlushMappedBufferRangeAPPLE(target, offset, size);} GLEEPFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC GLeeFuncPtr_glFlushMappedBufferRangeAPPLE=GLee_Lazy_glFlushMappedBufferRangeAPPLE; #endif #endif /* GL_EXT_gpu_shader4 */ #ifdef __GLEE_GL_EXT_gpu_shader4 #ifndef GLEE_C_DEFINED_glGetUniformuivEXT #define GLEE_C_DEFINED_glGetUniformuivEXT void __stdcall GLee_Lazy_glGetUniformuivEXT(GLuint program, GLint location, GLuint * params) {if (GLeeInit()) glGetUniformuivEXT(program, location, params);} GLEEPFNGLGETUNIFORMUIVEXTPROC GLeeFuncPtr_glGetUniformuivEXT=GLee_Lazy_glGetUniformuivEXT; #endif #ifndef GLEE_C_DEFINED_glBindFragDataLocationEXT #define GLEE_C_DEFINED_glBindFragDataLocationEXT void __stdcall GLee_Lazy_glBindFragDataLocationEXT(GLuint program, GLuint color, const GLchar * name) {if (GLeeInit()) glBindFragDataLocationEXT(program, color, name);} GLEEPFNGLBINDFRAGDATALOCATIONEXTPROC GLeeFuncPtr_glBindFragDataLocationEXT=GLee_Lazy_glBindFragDataLocationEXT; #endif #ifndef GLEE_C_DEFINED_glGetFragDataLocationEXT #define GLEE_C_DEFINED_glGetFragDataLocationEXT GLint __stdcall GLee_Lazy_glGetFragDataLocationEXT(GLuint program, const GLchar * name) {if (GLeeInit()) return glGetFragDataLocationEXT(program, name); return (GLint)0;} GLEEPFNGLGETFRAGDATALOCATIONEXTPROC GLeeFuncPtr_glGetFragDataLocationEXT=GLee_Lazy_glGetFragDataLocationEXT; #endif #ifndef GLEE_C_DEFINED_glUniform1uiEXT #define GLEE_C_DEFINED_glUniform1uiEXT void __stdcall GLee_Lazy_glUniform1uiEXT(GLint location, GLuint v0) {if (GLeeInit()) glUniform1uiEXT(location, v0);} GLEEPFNGLUNIFORM1UIEXTPROC GLeeFuncPtr_glUniform1uiEXT=GLee_Lazy_glUniform1uiEXT; #endif #ifndef GLEE_C_DEFINED_glUniform2uiEXT #define GLEE_C_DEFINED_glUniform2uiEXT void __stdcall GLee_Lazy_glUniform2uiEXT(GLint location, GLuint v0, GLuint v1) {if (GLeeInit()) glUniform2uiEXT(location, v0, v1);} GLEEPFNGLUNIFORM2UIEXTPROC GLeeFuncPtr_glUniform2uiEXT=GLee_Lazy_glUniform2uiEXT; #endif #ifndef GLEE_C_DEFINED_glUniform3uiEXT #define GLEE_C_DEFINED_glUniform3uiEXT void __stdcall GLee_Lazy_glUniform3uiEXT(GLint location, GLuint v0, GLuint v1, GLuint v2) {if (GLeeInit()) glUniform3uiEXT(location, v0, v1, v2);} GLEEPFNGLUNIFORM3UIEXTPROC GLeeFuncPtr_glUniform3uiEXT=GLee_Lazy_glUniform3uiEXT; #endif #ifndef GLEE_C_DEFINED_glUniform4uiEXT #define GLEE_C_DEFINED_glUniform4uiEXT void __stdcall GLee_Lazy_glUniform4uiEXT(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3) {if (GLeeInit()) glUniform4uiEXT(location, v0, v1, v2, v3);} GLEEPFNGLUNIFORM4UIEXTPROC GLeeFuncPtr_glUniform4uiEXT=GLee_Lazy_glUniform4uiEXT; #endif #ifndef GLEE_C_DEFINED_glUniform1uivEXT #define GLEE_C_DEFINED_glUniform1uivEXT void __stdcall GLee_Lazy_glUniform1uivEXT(GLint location, GLsizei count, const GLuint * value) {if (GLeeInit()) glUniform1uivEXT(location, count, value);} GLEEPFNGLUNIFORM1UIVEXTPROC GLeeFuncPtr_glUniform1uivEXT=GLee_Lazy_glUniform1uivEXT; #endif #ifndef GLEE_C_DEFINED_glUniform2uivEXT #define GLEE_C_DEFINED_glUniform2uivEXT void __stdcall GLee_Lazy_glUniform2uivEXT(GLint location, GLsizei count, const GLuint * value) {if (GLeeInit()) glUniform2uivEXT(location, count, value);} GLEEPFNGLUNIFORM2UIVEXTPROC GLeeFuncPtr_glUniform2uivEXT=GLee_Lazy_glUniform2uivEXT; #endif #ifndef GLEE_C_DEFINED_glUniform3uivEXT #define GLEE_C_DEFINED_glUniform3uivEXT void __stdcall GLee_Lazy_glUniform3uivEXT(GLint location, GLsizei count, const GLuint * value) {if (GLeeInit()) glUniform3uivEXT(location, count, value);} GLEEPFNGLUNIFORM3UIVEXTPROC GLeeFuncPtr_glUniform3uivEXT=GLee_Lazy_glUniform3uivEXT; #endif #ifndef GLEE_C_DEFINED_glUniform4uivEXT #define GLEE_C_DEFINED_glUniform4uivEXT void __stdcall GLee_Lazy_glUniform4uivEXT(GLint location, GLsizei count, const GLuint * value) {if (GLeeInit()) glUniform4uivEXT(location, count, value);} GLEEPFNGLUNIFORM4UIVEXTPROC GLeeFuncPtr_glUniform4uivEXT=GLee_Lazy_glUniform4uivEXT; #endif #endif /* GL_EXT_draw_instanced */ #ifdef __GLEE_GL_EXT_draw_instanced #ifndef GLEE_C_DEFINED_glDrawArraysInstancedEXT #define GLEE_C_DEFINED_glDrawArraysInstancedEXT void __stdcall GLee_Lazy_glDrawArraysInstancedEXT(GLenum mode, GLint start, GLsizei count, GLsizei primcount) {if (GLeeInit()) glDrawArraysInstancedEXT(mode, start, count, primcount);} GLEEPFNGLDRAWARRAYSINSTANCEDEXTPROC GLeeFuncPtr_glDrawArraysInstancedEXT=GLee_Lazy_glDrawArraysInstancedEXT; #endif #ifndef GLEE_C_DEFINED_glDrawElementsInstancedEXT #define GLEE_C_DEFINED_glDrawElementsInstancedEXT void __stdcall GLee_Lazy_glDrawElementsInstancedEXT(GLenum mode, GLsizei count, GLenum type, const GLvoid * indices, GLsizei primcount) {if (GLeeInit()) glDrawElementsInstancedEXT(mode, count, type, indices, primcount);} GLEEPFNGLDRAWELEMENTSINSTANCEDEXTPROC GLeeFuncPtr_glDrawElementsInstancedEXT=GLee_Lazy_glDrawElementsInstancedEXT; #endif #endif /* GL_EXT_packed_float */ #ifdef __GLEE_GL_EXT_packed_float #endif /* GL_EXT_texture_array */ #ifdef __GLEE_GL_EXT_texture_array #endif /* GL_EXT_texture_buffer_object */ #ifdef __GLEE_GL_EXT_texture_buffer_object #ifndef GLEE_C_DEFINED_glTexBufferEXT #define GLEE_C_DEFINED_glTexBufferEXT void __stdcall GLee_Lazy_glTexBufferEXT(GLenum target, GLenum internalformat, GLuint buffer) {if (GLeeInit()) glTexBufferEXT(target, internalformat, buffer);} GLEEPFNGLTEXBUFFEREXTPROC GLeeFuncPtr_glTexBufferEXT=GLee_Lazy_glTexBufferEXT; #endif #endif /* GL_EXT_texture_compression_latc */ #ifdef __GLEE_GL_EXT_texture_compression_latc #endif /* GL_EXT_texture_compression_rgtc */ #ifdef __GLEE_GL_EXT_texture_compression_rgtc #endif /* GL_EXT_texture_shared_exponent */ #ifdef __GLEE_GL_EXT_texture_shared_exponent #endif /* GL_NV_depth_buffer_float */ #ifdef __GLEE_GL_NV_depth_buffer_float #ifndef GLEE_C_DEFINED_glDepthRangedNV #define GLEE_C_DEFINED_glDepthRangedNV void __stdcall GLee_Lazy_glDepthRangedNV(GLdouble zNear, GLdouble zFar) {if (GLeeInit()) glDepthRangedNV(zNear, zFar);} GLEEPFNGLDEPTHRANGEDNVPROC GLeeFuncPtr_glDepthRangedNV=GLee_Lazy_glDepthRangedNV; #endif #ifndef GLEE_C_DEFINED_glClearDepthdNV #define GLEE_C_DEFINED_glClearDepthdNV void __stdcall GLee_Lazy_glClearDepthdNV(GLdouble depth) {if (GLeeInit()) glClearDepthdNV(depth);} GLEEPFNGLCLEARDEPTHDNVPROC GLeeFuncPtr_glClearDepthdNV=GLee_Lazy_glClearDepthdNV; #endif #ifndef GLEE_C_DEFINED_glDepthBoundsdNV #define GLEE_C_DEFINED_glDepthBoundsdNV void __stdcall GLee_Lazy_glDepthBoundsdNV(GLdouble zmin, GLdouble zmax) {if (GLeeInit()) glDepthBoundsdNV(zmin, zmax);} GLEEPFNGLDEPTHBOUNDSDNVPROC GLeeFuncPtr_glDepthBoundsdNV=GLee_Lazy_glDepthBoundsdNV; #endif #endif /* GL_NV_framebuffer_multisample_coverage */ #ifdef __GLEE_GL_NV_framebuffer_multisample_coverage #ifndef GLEE_C_DEFINED_glRenderbufferStorageMultisampleCoverageNV #define GLEE_C_DEFINED_glRenderbufferStorageMultisampleCoverageNV void __stdcall GLee_Lazy_glRenderbufferStorageMultisampleCoverageNV(GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height) {if (GLeeInit()) glRenderbufferStorageMultisampleCoverageNV(target, coverageSamples, colorSamples, internalformat, width, height);} GLEEPFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC GLeeFuncPtr_glRenderbufferStorageMultisampleCoverageNV=GLee_Lazy_glRenderbufferStorageMultisampleCoverageNV; #endif #endif /* GL_EXT_framebuffer_sRGB */ #ifdef __GLEE_GL_EXT_framebuffer_sRGB #endif /* GL_NV_geometry_shader4 */ #ifdef __GLEE_GL_NV_geometry_shader4 #endif /* GL_NV_parameter_buffer_object */ #ifdef __GLEE_GL_NV_parameter_buffer_object #ifndef GLEE_C_DEFINED_glProgramBufferParametersfvNV #define GLEE_C_DEFINED_glProgramBufferParametersfvNV void __stdcall GLee_Lazy_glProgramBufferParametersfvNV(GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLfloat * params) {if (GLeeInit()) glProgramBufferParametersfvNV(target, buffer, index, count, params);} GLEEPFNGLPROGRAMBUFFERPARAMETERSFVNVPROC GLeeFuncPtr_glProgramBufferParametersfvNV=GLee_Lazy_glProgramBufferParametersfvNV; #endif #ifndef GLEE_C_DEFINED_glProgramBufferParametersIivNV #define GLEE_C_DEFINED_glProgramBufferParametersIivNV void __stdcall GLee_Lazy_glProgramBufferParametersIivNV(GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLint * params) {if (GLeeInit()) glProgramBufferParametersIivNV(target, buffer, index, count, params);} GLEEPFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC GLeeFuncPtr_glProgramBufferParametersIivNV=GLee_Lazy_glProgramBufferParametersIivNV; #endif #ifndef GLEE_C_DEFINED_glProgramBufferParametersIuivNV #define GLEE_C_DEFINED_glProgramBufferParametersIuivNV void __stdcall GLee_Lazy_glProgramBufferParametersIuivNV(GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLuint * params) {if (GLeeInit()) glProgramBufferParametersIuivNV(target, buffer, index, count, params);} GLEEPFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC GLeeFuncPtr_glProgramBufferParametersIuivNV=GLee_Lazy_glProgramBufferParametersIuivNV; #endif #endif /* GL_EXT_draw_buffers2 */ #ifdef __GLEE_GL_EXT_draw_buffers2 #ifndef GLEE_C_DEFINED_glColorMaskIndexedEXT #define GLEE_C_DEFINED_glColorMaskIndexedEXT void __stdcall GLee_Lazy_glColorMaskIndexedEXT(GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a) {if (GLeeInit()) glColorMaskIndexedEXT(index, r, g, b, a);} GLEEPFNGLCOLORMASKINDEXEDEXTPROC GLeeFuncPtr_glColorMaskIndexedEXT=GLee_Lazy_glColorMaskIndexedEXT; #endif #ifndef GLEE_C_DEFINED_glGetBooleanIndexedvEXT #define GLEE_C_DEFINED_glGetBooleanIndexedvEXT void __stdcall GLee_Lazy_glGetBooleanIndexedvEXT(GLenum target, GLuint index, GLboolean * data) {if (GLeeInit()) glGetBooleanIndexedvEXT(target, index, data);} GLEEPFNGLGETBOOLEANINDEXEDVEXTPROC GLeeFuncPtr_glGetBooleanIndexedvEXT=GLee_Lazy_glGetBooleanIndexedvEXT; #endif #ifndef GLEE_C_DEFINED_glGetIntegerIndexedvEXT #define GLEE_C_DEFINED_glGetIntegerIndexedvEXT void __stdcall GLee_Lazy_glGetIntegerIndexedvEXT(GLenum target, GLuint index, GLint * data) {if (GLeeInit()) glGetIntegerIndexedvEXT(target, index, data);} GLEEPFNGLGETINTEGERINDEXEDVEXTPROC GLeeFuncPtr_glGetIntegerIndexedvEXT=GLee_Lazy_glGetIntegerIndexedvEXT; #endif #ifndef GLEE_C_DEFINED_glEnableIndexedEXT #define GLEE_C_DEFINED_glEnableIndexedEXT void __stdcall GLee_Lazy_glEnableIndexedEXT(GLenum target, GLuint index) {if (GLeeInit()) glEnableIndexedEXT(target, index);} GLEEPFNGLENABLEINDEXEDEXTPROC GLeeFuncPtr_glEnableIndexedEXT=GLee_Lazy_glEnableIndexedEXT; #endif #ifndef GLEE_C_DEFINED_glDisableIndexedEXT #define GLEE_C_DEFINED_glDisableIndexedEXT void __stdcall GLee_Lazy_glDisableIndexedEXT(GLenum target, GLuint index) {if (GLeeInit()) glDisableIndexedEXT(target, index);} GLEEPFNGLDISABLEINDEXEDEXTPROC GLeeFuncPtr_glDisableIndexedEXT=GLee_Lazy_glDisableIndexedEXT; #endif #ifndef GLEE_C_DEFINED_glIsEnabledIndexedEXT #define GLEE_C_DEFINED_glIsEnabledIndexedEXT GLboolean __stdcall GLee_Lazy_glIsEnabledIndexedEXT(GLenum target, GLuint index) {if (GLeeInit()) return glIsEnabledIndexedEXT(target, index); return (GLboolean)0;} GLEEPFNGLISENABLEDINDEXEDEXTPROC GLeeFuncPtr_glIsEnabledIndexedEXT=GLee_Lazy_glIsEnabledIndexedEXT; #endif #endif /* GL_NV_transform_feedback */ #ifdef __GLEE_GL_NV_transform_feedback #ifndef GLEE_C_DEFINED_glBeginTransformFeedbackNV #define GLEE_C_DEFINED_glBeginTransformFeedbackNV void __stdcall GLee_Lazy_glBeginTransformFeedbackNV(GLenum primitiveMode) {if (GLeeInit()) glBeginTransformFeedbackNV(primitiveMode);} GLEEPFNGLBEGINTRANSFORMFEEDBACKNVPROC GLeeFuncPtr_glBeginTransformFeedbackNV=GLee_Lazy_glBeginTransformFeedbackNV; #endif #ifndef GLEE_C_DEFINED_glEndTransformFeedbackNV #define GLEE_C_DEFINED_glEndTransformFeedbackNV void __stdcall GLee_Lazy_glEndTransformFeedbackNV(void) {if (GLeeInit()) glEndTransformFeedbackNV();} GLEEPFNGLENDTRANSFORMFEEDBACKNVPROC GLeeFuncPtr_glEndTransformFeedbackNV=GLee_Lazy_glEndTransformFeedbackNV; #endif #ifndef GLEE_C_DEFINED_glTransformFeedbackAttribsNV #define GLEE_C_DEFINED_glTransformFeedbackAttribsNV void __stdcall GLee_Lazy_glTransformFeedbackAttribsNV(GLuint count, const GLint * attribs, GLenum bufferMode) {if (GLeeInit()) glTransformFeedbackAttribsNV(count, attribs, bufferMode);} GLEEPFNGLTRANSFORMFEEDBACKATTRIBSNVPROC GLeeFuncPtr_glTransformFeedbackAttribsNV=GLee_Lazy_glTransformFeedbackAttribsNV; #endif #ifndef GLEE_C_DEFINED_glBindBufferRangeNV #define GLEE_C_DEFINED_glBindBufferRangeNV void __stdcall GLee_Lazy_glBindBufferRangeNV(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size) {if (GLeeInit()) glBindBufferRangeNV(target, index, buffer, offset, size);} GLEEPFNGLBINDBUFFERRANGENVPROC GLeeFuncPtr_glBindBufferRangeNV=GLee_Lazy_glBindBufferRangeNV; #endif #ifndef GLEE_C_DEFINED_glBindBufferOffsetNV #define GLEE_C_DEFINED_glBindBufferOffsetNV void __stdcall GLee_Lazy_glBindBufferOffsetNV(GLenum target, GLuint index, GLuint buffer, GLintptr offset) {if (GLeeInit()) glBindBufferOffsetNV(target, index, buffer, offset);} GLEEPFNGLBINDBUFFEROFFSETNVPROC GLeeFuncPtr_glBindBufferOffsetNV=GLee_Lazy_glBindBufferOffsetNV; #endif #ifndef GLEE_C_DEFINED_glBindBufferBaseNV #define GLEE_C_DEFINED_glBindBufferBaseNV void __stdcall GLee_Lazy_glBindBufferBaseNV(GLenum target, GLuint index, GLuint buffer) {if (GLeeInit()) glBindBufferBaseNV(target, index, buffer);} GLEEPFNGLBINDBUFFERBASENVPROC GLeeFuncPtr_glBindBufferBaseNV=GLee_Lazy_glBindBufferBaseNV; #endif #ifndef GLEE_C_DEFINED_glTransformFeedbackVaryingsNV #define GLEE_C_DEFINED_glTransformFeedbackVaryingsNV void __stdcall GLee_Lazy_glTransformFeedbackVaryingsNV(GLuint program, GLsizei count, const GLint * locations, GLenum bufferMode) {if (GLeeInit()) glTransformFeedbackVaryingsNV(program, count, locations, bufferMode);} GLEEPFNGLTRANSFORMFEEDBACKVARYINGSNVPROC GLeeFuncPtr_glTransformFeedbackVaryingsNV=GLee_Lazy_glTransformFeedbackVaryingsNV; #endif #ifndef GLEE_C_DEFINED_glActiveVaryingNV #define GLEE_C_DEFINED_glActiveVaryingNV void __stdcall GLee_Lazy_glActiveVaryingNV(GLuint program, const GLchar * name) {if (GLeeInit()) glActiveVaryingNV(program, name);} GLEEPFNGLACTIVEVARYINGNVPROC GLeeFuncPtr_glActiveVaryingNV=GLee_Lazy_glActiveVaryingNV; #endif #ifndef GLEE_C_DEFINED_glGetVaryingLocationNV #define GLEE_C_DEFINED_glGetVaryingLocationNV GLint __stdcall GLee_Lazy_glGetVaryingLocationNV(GLuint program, const GLchar * name) {if (GLeeInit()) return glGetVaryingLocationNV(program, name); return (GLint)0;} GLEEPFNGLGETVARYINGLOCATIONNVPROC GLeeFuncPtr_glGetVaryingLocationNV=GLee_Lazy_glGetVaryingLocationNV; #endif #ifndef GLEE_C_DEFINED_glGetActiveVaryingNV #define GLEE_C_DEFINED_glGetActiveVaryingNV void __stdcall GLee_Lazy_glGetActiveVaryingNV(GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLsizei * size, GLenum * type, GLchar * name) {if (GLeeInit()) glGetActiveVaryingNV(program, index, bufSize, length, size, type, name);} GLEEPFNGLGETACTIVEVARYINGNVPROC GLeeFuncPtr_glGetActiveVaryingNV=GLee_Lazy_glGetActiveVaryingNV; #endif #ifndef GLEE_C_DEFINED_glGetTransformFeedbackVaryingNV #define GLEE_C_DEFINED_glGetTransformFeedbackVaryingNV void __stdcall GLee_Lazy_glGetTransformFeedbackVaryingNV(GLuint program, GLuint index, GLint * location) {if (GLeeInit()) glGetTransformFeedbackVaryingNV(program, index, location);} GLEEPFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC GLeeFuncPtr_glGetTransformFeedbackVaryingNV=GLee_Lazy_glGetTransformFeedbackVaryingNV; #endif #endif /* GL_EXT_bindable_uniform */ #ifdef __GLEE_GL_EXT_bindable_uniform #ifndef GLEE_C_DEFINED_glUniformBufferEXT #define GLEE_C_DEFINED_glUniformBufferEXT void __stdcall GLee_Lazy_glUniformBufferEXT(GLuint program, GLint location, GLuint buffer) {if (GLeeInit()) glUniformBufferEXT(program, location, buffer);} GLEEPFNGLUNIFORMBUFFEREXTPROC GLeeFuncPtr_glUniformBufferEXT=GLee_Lazy_glUniformBufferEXT; #endif #ifndef GLEE_C_DEFINED_glGetUniformBufferSizeEXT #define GLEE_C_DEFINED_glGetUniformBufferSizeEXT GLint __stdcall GLee_Lazy_glGetUniformBufferSizeEXT(GLuint program, GLint location) {if (GLeeInit()) return glGetUniformBufferSizeEXT(program, location); return (GLint)0;} GLEEPFNGLGETUNIFORMBUFFERSIZEEXTPROC GLeeFuncPtr_glGetUniformBufferSizeEXT=GLee_Lazy_glGetUniformBufferSizeEXT; #endif #ifndef GLEE_C_DEFINED_glGetUniformOffsetEXT #define GLEE_C_DEFINED_glGetUniformOffsetEXT GLintptr __stdcall GLee_Lazy_glGetUniformOffsetEXT(GLuint program, GLint location) {if (GLeeInit()) return glGetUniformOffsetEXT(program, location); return (GLintptr)0;} GLEEPFNGLGETUNIFORMOFFSETEXTPROC GLeeFuncPtr_glGetUniformOffsetEXT=GLee_Lazy_glGetUniformOffsetEXT; #endif #endif /* GL_EXT_texture_integer */ #ifdef __GLEE_GL_EXT_texture_integer #ifndef GLEE_C_DEFINED_glTexParameterIivEXT #define GLEE_C_DEFINED_glTexParameterIivEXT void __stdcall GLee_Lazy_glTexParameterIivEXT(GLenum target, GLenum pname, const GLint * params) {if (GLeeInit()) glTexParameterIivEXT(target, pname, params);} GLEEPFNGLTEXPARAMETERIIVEXTPROC GLeeFuncPtr_glTexParameterIivEXT=GLee_Lazy_glTexParameterIivEXT; #endif #ifndef GLEE_C_DEFINED_glTexParameterIuivEXT #define GLEE_C_DEFINED_glTexParameterIuivEXT void __stdcall GLee_Lazy_glTexParameterIuivEXT(GLenum target, GLenum pname, const GLuint * params) {if (GLeeInit()) glTexParameterIuivEXT(target, pname, params);} GLEEPFNGLTEXPARAMETERIUIVEXTPROC GLeeFuncPtr_glTexParameterIuivEXT=GLee_Lazy_glTexParameterIuivEXT; #endif #ifndef GLEE_C_DEFINED_glGetTexParameterIivEXT #define GLEE_C_DEFINED_glGetTexParameterIivEXT void __stdcall GLee_Lazy_glGetTexParameterIivEXT(GLenum target, GLenum pname, GLint * params) {if (GLeeInit()) glGetTexParameterIivEXT(target, pname, params);} GLEEPFNGLGETTEXPARAMETERIIVEXTPROC GLeeFuncPtr_glGetTexParameterIivEXT=GLee_Lazy_glGetTexParameterIivEXT; #endif #ifndef GLEE_C_DEFINED_glGetTexParameterIuivEXT #define GLEE_C_DEFINED_glGetTexParameterIuivEXT void __stdcall GLee_Lazy_glGetTexParameterIuivEXT(GLenum target, GLenum pname, GLuint * params) {if (GLeeInit()) glGetTexParameterIuivEXT(target, pname, params);} GLEEPFNGLGETTEXPARAMETERIUIVEXTPROC GLeeFuncPtr_glGetTexParameterIuivEXT=GLee_Lazy_glGetTexParameterIuivEXT; #endif #ifndef GLEE_C_DEFINED_glClearColorIiEXT #define GLEE_C_DEFINED_glClearColorIiEXT void __stdcall GLee_Lazy_glClearColorIiEXT(GLint red, GLint green, GLint blue, GLint alpha) {if (GLeeInit()) glClearColorIiEXT(red, green, blue, alpha);} GLEEPFNGLCLEARCOLORIIEXTPROC GLeeFuncPtr_glClearColorIiEXT=GLee_Lazy_glClearColorIiEXT; #endif #ifndef GLEE_C_DEFINED_glClearColorIuiEXT #define GLEE_C_DEFINED_glClearColorIuiEXT void __stdcall GLee_Lazy_glClearColorIuiEXT(GLuint red, GLuint green, GLuint blue, GLuint alpha) {if (GLeeInit()) glClearColorIuiEXT(red, green, blue, alpha);} GLEEPFNGLCLEARCOLORIUIEXTPROC GLeeFuncPtr_glClearColorIuiEXT=GLee_Lazy_glClearColorIuiEXT; #endif #endif /* GL_GREMEDY_frame_terminator */ #ifdef __GLEE_GL_GREMEDY_frame_terminator #ifndef GLEE_C_DEFINED_glFrameTerminatorGREMEDY #define GLEE_C_DEFINED_glFrameTerminatorGREMEDY void __stdcall GLee_Lazy_glFrameTerminatorGREMEDY(void) {if (GLeeInit()) glFrameTerminatorGREMEDY();} GLEEPFNGLFRAMETERMINATORGREMEDYPROC GLeeFuncPtr_glFrameTerminatorGREMEDY=GLee_Lazy_glFrameTerminatorGREMEDY; #endif #endif /* GL_NV_conditional_render */ #ifdef __GLEE_GL_NV_conditional_render #ifndef GLEE_C_DEFINED_glBeginConditionalRenderNV #define GLEE_C_DEFINED_glBeginConditionalRenderNV void __stdcall GLee_Lazy_glBeginConditionalRenderNV(GLuint id, GLenum mode) {if (GLeeInit()) glBeginConditionalRenderNV(id, mode);} GLEEPFNGLBEGINCONDITIONALRENDERNVPROC GLeeFuncPtr_glBeginConditionalRenderNV=GLee_Lazy_glBeginConditionalRenderNV; #endif #ifndef GLEE_C_DEFINED_glEndConditionalRenderNV #define GLEE_C_DEFINED_glEndConditionalRenderNV void __stdcall GLee_Lazy_glEndConditionalRenderNV(void) {if (GLeeInit()) glEndConditionalRenderNV();} GLEEPFNGLENDCONDITIONALRENDERNVPROC GLeeFuncPtr_glEndConditionalRenderNV=GLee_Lazy_glEndConditionalRenderNV; #endif #endif /* GL_NV_present_video */ #ifdef __GLEE_GL_NV_present_video #endif /* GL_EXT_transform_feedback */ #ifdef __GLEE_GL_EXT_transform_feedback #ifndef GLEE_C_DEFINED_glBeginTransformFeedbackEXT #define GLEE_C_DEFINED_glBeginTransformFeedbackEXT void __stdcall GLee_Lazy_glBeginTransformFeedbackEXT(GLenum primitiveMode) {if (GLeeInit()) glBeginTransformFeedbackEXT(primitiveMode);} GLEEPFNGLBEGINTRANSFORMFEEDBACKEXTPROC GLeeFuncPtr_glBeginTransformFeedbackEXT=GLee_Lazy_glBeginTransformFeedbackEXT; #endif #ifndef GLEE_C_DEFINED_glEndTransformFeedbackEXT #define GLEE_C_DEFINED_glEndTransformFeedbackEXT void __stdcall GLee_Lazy_glEndTransformFeedbackEXT(void) {if (GLeeInit()) glEndTransformFeedbackEXT();} GLEEPFNGLENDTRANSFORMFEEDBACKEXTPROC GLeeFuncPtr_glEndTransformFeedbackEXT=GLee_Lazy_glEndTransformFeedbackEXT; #endif #ifndef GLEE_C_DEFINED_glBindBufferRangeEXT #define GLEE_C_DEFINED_glBindBufferRangeEXT void __stdcall GLee_Lazy_glBindBufferRangeEXT(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size) {if (GLeeInit()) glBindBufferRangeEXT(target, index, buffer, offset, size);} GLEEPFNGLBINDBUFFERRANGEEXTPROC GLeeFuncPtr_glBindBufferRangeEXT=GLee_Lazy_glBindBufferRangeEXT; #endif #ifndef GLEE_C_DEFINED_glBindBufferOffsetEXT #define GLEE_C_DEFINED_glBindBufferOffsetEXT void __stdcall GLee_Lazy_glBindBufferOffsetEXT(GLenum target, GLuint index, GLuint buffer, GLintptr offset) {if (GLeeInit()) glBindBufferOffsetEXT(target, index, buffer, offset);} GLEEPFNGLBINDBUFFEROFFSETEXTPROC GLeeFuncPtr_glBindBufferOffsetEXT=GLee_Lazy_glBindBufferOffsetEXT; #endif #ifndef GLEE_C_DEFINED_glBindBufferBaseEXT #define GLEE_C_DEFINED_glBindBufferBaseEXT void __stdcall GLee_Lazy_glBindBufferBaseEXT(GLenum target, GLuint index, GLuint buffer) {if (GLeeInit()) glBindBufferBaseEXT(target, index, buffer);} GLEEPFNGLBINDBUFFERBASEEXTPROC GLeeFuncPtr_glBindBufferBaseEXT=GLee_Lazy_glBindBufferBaseEXT; #endif #ifndef GLEE_C_DEFINED_glTransformFeedbackVaryingsEXT #define GLEE_C_DEFINED_glTransformFeedbackVaryingsEXT void __stdcall GLee_Lazy_glTransformFeedbackVaryingsEXT(GLuint program, GLsizei count, const GLint * locations, GLenum bufferMode) {if (GLeeInit()) glTransformFeedbackVaryingsEXT(program, count, locations, bufferMode);} GLEEPFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC GLeeFuncPtr_glTransformFeedbackVaryingsEXT=GLee_Lazy_glTransformFeedbackVaryingsEXT; #endif #ifndef GLEE_C_DEFINED_glGetTransformFeedbackVaryingEXT #define GLEE_C_DEFINED_glGetTransformFeedbackVaryingEXT void __stdcall GLee_Lazy_glGetTransformFeedbackVaryingEXT(GLuint program, GLuint index, GLint * location) {if (GLeeInit()) glGetTransformFeedbackVaryingEXT(program, index, location);} GLEEPFNGLGETTRANSFORMFEEDBACKVARYINGEXTPROC GLeeFuncPtr_glGetTransformFeedbackVaryingEXT=GLee_Lazy_glGetTransformFeedbackVaryingEXT; #endif #endif /* GL_EXT_direct_state_access */ #ifdef __GLEE_GL_EXT_direct_state_access #ifndef GLEE_C_DEFINED_glClientAttribDefaultEXT #define GLEE_C_DEFINED_glClientAttribDefaultEXT void __stdcall GLee_Lazy_glClientAttribDefaultEXT(GLbitfield mask) {if (GLeeInit()) glClientAttribDefaultEXT(mask);} GLEEPFNGLCLIENTATTRIBDEFAULTEXTPROC GLeeFuncPtr_glClientAttribDefaultEXT=GLee_Lazy_glClientAttribDefaultEXT; #endif #ifndef GLEE_C_DEFINED_glPushClientAttribDefaultEXT #define GLEE_C_DEFINED_glPushClientAttribDefaultEXT void __stdcall GLee_Lazy_glPushClientAttribDefaultEXT(GLbitfield mask) {if (GLeeInit()) glPushClientAttribDefaultEXT(mask);} GLEEPFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC GLeeFuncPtr_glPushClientAttribDefaultEXT=GLee_Lazy_glPushClientAttribDefaultEXT; #endif #ifndef GLEE_C_DEFINED_glMatrixLoadfEXT #define GLEE_C_DEFINED_glMatrixLoadfEXT void __stdcall GLee_Lazy_glMatrixLoadfEXT(GLenum mode, const GLfloat * m) {if (GLeeInit()) glMatrixLoadfEXT(mode, m);} GLEEPFNGLMATRIXLOADFEXTPROC GLeeFuncPtr_glMatrixLoadfEXT=GLee_Lazy_glMatrixLoadfEXT; #endif #ifndef GLEE_C_DEFINED_glMatrixLoaddEXT #define GLEE_C_DEFINED_glMatrixLoaddEXT void __stdcall GLee_Lazy_glMatrixLoaddEXT(GLenum mode, const GLdouble * m) {if (GLeeInit()) glMatrixLoaddEXT(mode, m);} GLEEPFNGLMATRIXLOADDEXTPROC GLeeFuncPtr_glMatrixLoaddEXT=GLee_Lazy_glMatrixLoaddEXT; #endif #ifndef GLEE_C_DEFINED_glMatrixMultfEXT #define GLEE_C_DEFINED_glMatrixMultfEXT void __stdcall GLee_Lazy_glMatrixMultfEXT(GLenum mode, const GLfloat * m) {if (GLeeInit()) glMatrixMultfEXT(mode, m);} GLEEPFNGLMATRIXMULTFEXTPROC GLeeFuncPtr_glMatrixMultfEXT=GLee_Lazy_glMatrixMultfEXT; #endif #ifndef GLEE_C_DEFINED_glMatrixMultdEXT #define GLEE_C_DEFINED_glMatrixMultdEXT void __stdcall GLee_Lazy_glMatrixMultdEXT(GLenum mode, const GLdouble * m) {if (GLeeInit()) glMatrixMultdEXT(mode, m);} GLEEPFNGLMATRIXMULTDEXTPROC GLeeFuncPtr_glMatrixMultdEXT=GLee_Lazy_glMatrixMultdEXT; #endif #ifndef GLEE_C_DEFINED_glMatrixLoadIdentityEXT #define GLEE_C_DEFINED_glMatrixLoadIdentityEXT void __stdcall GLee_Lazy_glMatrixLoadIdentityEXT(GLenum mode) {if (GLeeInit()) glMatrixLoadIdentityEXT(mode);} GLEEPFNGLMATRIXLOADIDENTITYEXTPROC GLeeFuncPtr_glMatrixLoadIdentityEXT=GLee_Lazy_glMatrixLoadIdentityEXT; #endif #ifndef GLEE_C_DEFINED_glMatrixRotatefEXT #define GLEE_C_DEFINED_glMatrixRotatefEXT void __stdcall GLee_Lazy_glMatrixRotatefEXT(GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z) {if (GLeeInit()) glMatrixRotatefEXT(mode, angle, x, y, z);} GLEEPFNGLMATRIXROTATEFEXTPROC GLeeFuncPtr_glMatrixRotatefEXT=GLee_Lazy_glMatrixRotatefEXT; #endif #ifndef GLEE_C_DEFINED_glMatrixRotatedEXT #define GLEE_C_DEFINED_glMatrixRotatedEXT void __stdcall GLee_Lazy_glMatrixRotatedEXT(GLenum mode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z) {if (GLeeInit()) glMatrixRotatedEXT(mode, angle, x, y, z);} GLEEPFNGLMATRIXROTATEDEXTPROC GLeeFuncPtr_glMatrixRotatedEXT=GLee_Lazy_glMatrixRotatedEXT; #endif #ifndef GLEE_C_DEFINED_glMatrixScalefEXT #define GLEE_C_DEFINED_glMatrixScalefEXT void __stdcall GLee_Lazy_glMatrixScalefEXT(GLenum mode, GLfloat x, GLfloat y, GLfloat z) {if (GLeeInit()) glMatrixScalefEXT(mode, x, y, z);} GLEEPFNGLMATRIXSCALEFEXTPROC GLeeFuncPtr_glMatrixScalefEXT=GLee_Lazy_glMatrixScalefEXT; #endif #ifndef GLEE_C_DEFINED_glMatrixScaledEXT #define GLEE_C_DEFINED_glMatrixScaledEXT void __stdcall GLee_Lazy_glMatrixScaledEXT(GLenum mode, GLdouble x, GLdouble y, GLdouble z) {if (GLeeInit()) glMatrixScaledEXT(mode, x, y, z);} GLEEPFNGLMATRIXSCALEDEXTPROC GLeeFuncPtr_glMatrixScaledEXT=GLee_Lazy_glMatrixScaledEXT; #endif #ifndef GLEE_C_DEFINED_glMatrixTranslatefEXT #define GLEE_C_DEFINED_glMatrixTranslatefEXT void __stdcall GLee_Lazy_glMatrixTranslatefEXT(GLenum mode, GLfloat x, GLfloat y, GLfloat z) {if (GLeeInit()) glMatrixTranslatefEXT(mode, x, y, z);} GLEEPFNGLMATRIXTRANSLATEFEXTPROC GLeeFuncPtr_glMatrixTranslatefEXT=GLee_Lazy_glMatrixTranslatefEXT; #endif #ifndef GLEE_C_DEFINED_glMatrixTranslatedEXT #define GLEE_C_DEFINED_glMatrixTranslatedEXT void __stdcall GLee_Lazy_glMatrixTranslatedEXT(GLenum mode, GLdouble x, GLdouble y, GLdouble z) {if (GLeeInit()) glMatrixTranslatedEXT(mode, x, y, z);} GLEEPFNGLMATRIXTRANSLATEDEXTPROC GLeeFuncPtr_glMatrixTranslatedEXT=GLee_Lazy_glMatrixTranslatedEXT; #endif #ifndef GLEE_C_DEFINED_glMatrixFrustumEXT #define GLEE_C_DEFINED_glMatrixFrustumEXT void __stdcall GLee_Lazy_glMatrixFrustumEXT(GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar) {if (GLeeInit()) glMatrixFrustumEXT(mode, left, right, bottom, top, zNear, zFar);} GLEEPFNGLMATRIXFRUSTUMEXTPROC GLeeFuncPtr_glMatrixFrustumEXT=GLee_Lazy_glMatrixFrustumEXT; #endif #ifndef GLEE_C_DEFINED_glMatrixOrthoEXT #define GLEE_C_DEFINED_glMatrixOrthoEXT void __stdcall GLee_Lazy_glMatrixOrthoEXT(GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar) {if (GLeeInit()) glMatrixOrthoEXT(mode, left, right, bottom, top, zNear, zFar);} GLEEPFNGLMATRIXORTHOEXTPROC GLeeFuncPtr_glMatrixOrthoEXT=GLee_Lazy_glMatrixOrthoEXT; #endif #ifndef GLEE_C_DEFINED_glMatrixPopEXT #define GLEE_C_DEFINED_glMatrixPopEXT void __stdcall GLee_Lazy_glMatrixPopEXT(GLenum mode) {if (GLeeInit()) glMatrixPopEXT(mode);} GLEEPFNGLMATRIXPOPEXTPROC GLeeFuncPtr_glMatrixPopEXT=GLee_Lazy_glMatrixPopEXT; #endif #ifndef GLEE_C_DEFINED_glMatrixPushEXT #define GLEE_C_DEFINED_glMatrixPushEXT void __stdcall GLee_Lazy_glMatrixPushEXT(GLenum mode) {if (GLeeInit()) glMatrixPushEXT(mode);} GLEEPFNGLMATRIXPUSHEXTPROC GLeeFuncPtr_glMatrixPushEXT=GLee_Lazy_glMatrixPushEXT; #endif #ifndef GLEE_C_DEFINED_glMatrixLoadTransposefEXT #define GLEE_C_DEFINED_glMatrixLoadTransposefEXT void __stdcall GLee_Lazy_glMatrixLoadTransposefEXT(GLenum mode, const GLfloat * m) {if (GLeeInit()) glMatrixLoadTransposefEXT(mode, m);} GLEEPFNGLMATRIXLOADTRANSPOSEFEXTPROC GLeeFuncPtr_glMatrixLoadTransposefEXT=GLee_Lazy_glMatrixLoadTransposefEXT; #endif #ifndef GLEE_C_DEFINED_glMatrixLoadTransposedEXT #define GLEE_C_DEFINED_glMatrixLoadTransposedEXT void __stdcall GLee_Lazy_glMatrixLoadTransposedEXT(GLenum mode, const GLdouble * m) {if (GLeeInit()) glMatrixLoadTransposedEXT(mode, m);} GLEEPFNGLMATRIXLOADTRANSPOSEDEXTPROC GLeeFuncPtr_glMatrixLoadTransposedEXT=GLee_Lazy_glMatrixLoadTransposedEXT; #endif #ifndef GLEE_C_DEFINED_glMatrixMultTransposefEXT #define GLEE_C_DEFINED_glMatrixMultTransposefEXT void __stdcall GLee_Lazy_glMatrixMultTransposefEXT(GLenum mode, const GLfloat * m) {if (GLeeInit()) glMatrixMultTransposefEXT(mode, m);} GLEEPFNGLMATRIXMULTTRANSPOSEFEXTPROC GLeeFuncPtr_glMatrixMultTransposefEXT=GLee_Lazy_glMatrixMultTransposefEXT; #endif #ifndef GLEE_C_DEFINED_glMatrixMultTransposedEXT #define GLEE_C_DEFINED_glMatrixMultTransposedEXT void __stdcall GLee_Lazy_glMatrixMultTransposedEXT(GLenum mode, const GLdouble * m) {if (GLeeInit()) glMatrixMultTransposedEXT(mode, m);} GLEEPFNGLMATRIXMULTTRANSPOSEDEXTPROC GLeeFuncPtr_glMatrixMultTransposedEXT=GLee_Lazy_glMatrixMultTransposedEXT; #endif #ifndef GLEE_C_DEFINED_glTextureParameterfEXT #define GLEE_C_DEFINED_glTextureParameterfEXT void __stdcall GLee_Lazy_glTextureParameterfEXT(GLuint texture, GLenum target, GLenum pname, GLfloat param) {if (GLeeInit()) glTextureParameterfEXT(texture, target, pname, param);} GLEEPFNGLTEXTUREPARAMETERFEXTPROC GLeeFuncPtr_glTextureParameterfEXT=GLee_Lazy_glTextureParameterfEXT; #endif #ifndef GLEE_C_DEFINED_glTextureParameterfvEXT #define GLEE_C_DEFINED_glTextureParameterfvEXT void __stdcall GLee_Lazy_glTextureParameterfvEXT(GLuint texture, GLenum target, GLenum pname, const GLfloat * params) {if (GLeeInit()) glTextureParameterfvEXT(texture, target, pname, params);} GLEEPFNGLTEXTUREPARAMETERFVEXTPROC GLeeFuncPtr_glTextureParameterfvEXT=GLee_Lazy_glTextureParameterfvEXT; #endif #ifndef GLEE_C_DEFINED_glTextureParameteriEXT #define GLEE_C_DEFINED_glTextureParameteriEXT void __stdcall GLee_Lazy_glTextureParameteriEXT(GLuint texture, GLenum target, GLenum pname, GLint param) {if (GLeeInit()) glTextureParameteriEXT(texture, target, pname, param);} GLEEPFNGLTEXTUREPARAMETERIEXTPROC GLeeFuncPtr_glTextureParameteriEXT=GLee_Lazy_glTextureParameteriEXT; #endif #ifndef GLEE_C_DEFINED_glTextureParameterivEXT #define GLEE_C_DEFINED_glTextureParameterivEXT void __stdcall GLee_Lazy_glTextureParameterivEXT(GLuint texture, GLenum target, GLenum pname, const GLint * params) {if (GLeeInit()) glTextureParameterivEXT(texture, target, pname, params);} GLEEPFNGLTEXTUREPARAMETERIVEXTPROC GLeeFuncPtr_glTextureParameterivEXT=GLee_Lazy_glTextureParameterivEXT; #endif #ifndef GLEE_C_DEFINED_glTextureImage1DEXT #define GLEE_C_DEFINED_glTextureImage1DEXT void __stdcall GLee_Lazy_glTextureImage1DEXT(GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid * pixels) {if (GLeeInit()) glTextureImage1DEXT(texture, target, level, internalformat, width, border, format, type, pixels);} GLEEPFNGLTEXTUREIMAGE1DEXTPROC GLeeFuncPtr_glTextureImage1DEXT=GLee_Lazy_glTextureImage1DEXT; #endif #ifndef GLEE_C_DEFINED_glTextureImage2DEXT #define GLEE_C_DEFINED_glTextureImage2DEXT void __stdcall GLee_Lazy_glTextureImage2DEXT(GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid * pixels) {if (GLeeInit()) glTextureImage2DEXT(texture, target, level, internalformat, width, height, border, format, type, pixels);} GLEEPFNGLTEXTUREIMAGE2DEXTPROC GLeeFuncPtr_glTextureImage2DEXT=GLee_Lazy_glTextureImage2DEXT; #endif #ifndef GLEE_C_DEFINED_glTextureSubImage1DEXT #define GLEE_C_DEFINED_glTextureSubImage1DEXT void __stdcall GLee_Lazy_glTextureSubImage1DEXT(GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid * pixels) {if (GLeeInit()) glTextureSubImage1DEXT(texture, target, level, xoffset, width, format, type, pixels);} GLEEPFNGLTEXTURESUBIMAGE1DEXTPROC GLeeFuncPtr_glTextureSubImage1DEXT=GLee_Lazy_glTextureSubImage1DEXT; #endif #ifndef GLEE_C_DEFINED_glTextureSubImage2DEXT #define GLEE_C_DEFINED_glTextureSubImage2DEXT void __stdcall GLee_Lazy_glTextureSubImage2DEXT(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * pixels) {if (GLeeInit()) glTextureSubImage2DEXT(texture, target, level, xoffset, yoffset, width, height, format, type, pixels);} GLEEPFNGLTEXTURESUBIMAGE2DEXTPROC GLeeFuncPtr_glTextureSubImage2DEXT=GLee_Lazy_glTextureSubImage2DEXT; #endif #ifndef GLEE_C_DEFINED_glCopyTextureImage1DEXT #define GLEE_C_DEFINED_glCopyTextureImage1DEXT void __stdcall GLee_Lazy_glCopyTextureImage1DEXT(GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border) {if (GLeeInit()) glCopyTextureImage1DEXT(texture, target, level, internalformat, x, y, width, border);} GLEEPFNGLCOPYTEXTUREIMAGE1DEXTPROC GLeeFuncPtr_glCopyTextureImage1DEXT=GLee_Lazy_glCopyTextureImage1DEXT; #endif #ifndef GLEE_C_DEFINED_glCopyTextureImage2DEXT #define GLEE_C_DEFINED_glCopyTextureImage2DEXT void __stdcall GLee_Lazy_glCopyTextureImage2DEXT(GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) {if (GLeeInit()) glCopyTextureImage2DEXT(texture, target, level, internalformat, x, y, width, height, border);} GLEEPFNGLCOPYTEXTUREIMAGE2DEXTPROC GLeeFuncPtr_glCopyTextureImage2DEXT=GLee_Lazy_glCopyTextureImage2DEXT; #endif #ifndef GLEE_C_DEFINED_glCopyTextureSubImage1DEXT #define GLEE_C_DEFINED_glCopyTextureSubImage1DEXT void __stdcall GLee_Lazy_glCopyTextureSubImage1DEXT(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width) {if (GLeeInit()) glCopyTextureSubImage1DEXT(texture, target, level, xoffset, x, y, width);} GLEEPFNGLCOPYTEXTURESUBIMAGE1DEXTPROC GLeeFuncPtr_glCopyTextureSubImage1DEXT=GLee_Lazy_glCopyTextureSubImage1DEXT; #endif #ifndef GLEE_C_DEFINED_glCopyTextureSubImage2DEXT #define GLEE_C_DEFINED_glCopyTextureSubImage2DEXT void __stdcall GLee_Lazy_glCopyTextureSubImage2DEXT(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height) {if (GLeeInit()) glCopyTextureSubImage2DEXT(texture, target, level, xoffset, yoffset, x, y, width, height);} GLEEPFNGLCOPYTEXTURESUBIMAGE2DEXTPROC GLeeFuncPtr_glCopyTextureSubImage2DEXT=GLee_Lazy_glCopyTextureSubImage2DEXT; #endif #ifndef GLEE_C_DEFINED_glGetTextureImageEXT #define GLEE_C_DEFINED_glGetTextureImageEXT void __stdcall GLee_Lazy_glGetTextureImageEXT(GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, GLvoid * pixels) {if (GLeeInit()) glGetTextureImageEXT(texture, target, level, format, type, pixels);} GLEEPFNGLGETTEXTUREIMAGEEXTPROC GLeeFuncPtr_glGetTextureImageEXT=GLee_Lazy_glGetTextureImageEXT; #endif #ifndef GLEE_C_DEFINED_glGetTextureParameterfvEXT #define GLEE_C_DEFINED_glGetTextureParameterfvEXT void __stdcall GLee_Lazy_glGetTextureParameterfvEXT(GLuint texture, GLenum target, GLenum pname, GLfloat * params) {if (GLeeInit()) glGetTextureParameterfvEXT(texture, target, pname, params);} GLEEPFNGLGETTEXTUREPARAMETERFVEXTPROC GLeeFuncPtr_glGetTextureParameterfvEXT=GLee_Lazy_glGetTextureParameterfvEXT; #endif #ifndef GLEE_C_DEFINED_glGetTextureParameterivEXT #define GLEE_C_DEFINED_glGetTextureParameterivEXT void __stdcall GLee_Lazy_glGetTextureParameterivEXT(GLuint texture, GLenum target, GLenum pname, GLint * params) {if (GLeeInit()) glGetTextureParameterivEXT(texture, target, pname, params);} GLEEPFNGLGETTEXTUREPARAMETERIVEXTPROC GLeeFuncPtr_glGetTextureParameterivEXT=GLee_Lazy_glGetTextureParameterivEXT; #endif #ifndef GLEE_C_DEFINED_glGetTextureLevelParameterfvEXT #define GLEE_C_DEFINED_glGetTextureLevelParameterfvEXT void __stdcall GLee_Lazy_glGetTextureLevelParameterfvEXT(GLuint texture, GLenum target, GLint level, GLenum pname, GLfloat * params) {if (GLeeInit()) glGetTextureLevelParameterfvEXT(texture, target, level, pname, params);} GLEEPFNGLGETTEXTURELEVELPARAMETERFVEXTPROC GLeeFuncPtr_glGetTextureLevelParameterfvEXT=GLee_Lazy_glGetTextureLevelParameterfvEXT; #endif #ifndef GLEE_C_DEFINED_glGetTextureLevelParameterivEXT #define GLEE_C_DEFINED_glGetTextureLevelParameterivEXT void __stdcall GLee_Lazy_glGetTextureLevelParameterivEXT(GLuint texture, GLenum target, GLint level, GLenum pname, GLint * params) {if (GLeeInit()) glGetTextureLevelParameterivEXT(texture, target, level, pname, params);} GLEEPFNGLGETTEXTURELEVELPARAMETERIVEXTPROC GLeeFuncPtr_glGetTextureLevelParameterivEXT=GLee_Lazy_glGetTextureLevelParameterivEXT; #endif #ifndef GLEE_C_DEFINED_glTextureImage3DEXT #define GLEE_C_DEFINED_glTextureImage3DEXT void __stdcall GLee_Lazy_glTextureImage3DEXT(GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid * pixels) {if (GLeeInit()) glTextureImage3DEXT(texture, target, level, internalformat, width, height, depth, border, format, type, pixels);} GLEEPFNGLTEXTUREIMAGE3DEXTPROC GLeeFuncPtr_glTextureImage3DEXT=GLee_Lazy_glTextureImage3DEXT; #endif #ifndef GLEE_C_DEFINED_glTextureSubImage3DEXT #define GLEE_C_DEFINED_glTextureSubImage3DEXT void __stdcall GLee_Lazy_glTextureSubImage3DEXT(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid * pixels) {if (GLeeInit()) glTextureSubImage3DEXT(texture, target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels);} GLEEPFNGLTEXTURESUBIMAGE3DEXTPROC GLeeFuncPtr_glTextureSubImage3DEXT=GLee_Lazy_glTextureSubImage3DEXT; #endif #ifndef GLEE_C_DEFINED_glCopyTextureSubImage3DEXT #define GLEE_C_DEFINED_glCopyTextureSubImage3DEXT void __stdcall GLee_Lazy_glCopyTextureSubImage3DEXT(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) {if (GLeeInit()) glCopyTextureSubImage3DEXT(texture, target, level, xoffset, yoffset, zoffset, x, y, width, height);} GLEEPFNGLCOPYTEXTURESUBIMAGE3DEXTPROC GLeeFuncPtr_glCopyTextureSubImage3DEXT=GLee_Lazy_glCopyTextureSubImage3DEXT; #endif #ifndef GLEE_C_DEFINED_glMultiTexParameterfEXT #define GLEE_C_DEFINED_glMultiTexParameterfEXT void __stdcall GLee_Lazy_glMultiTexParameterfEXT(GLenum texunit, GLenum target, GLenum pname, GLfloat param) {if (GLeeInit()) glMultiTexParameterfEXT(texunit, target, pname, param);} GLEEPFNGLMULTITEXPARAMETERFEXTPROC GLeeFuncPtr_glMultiTexParameterfEXT=GLee_Lazy_glMultiTexParameterfEXT; #endif #ifndef GLEE_C_DEFINED_glMultiTexParameterfvEXT #define GLEE_C_DEFINED_glMultiTexParameterfvEXT void __stdcall GLee_Lazy_glMultiTexParameterfvEXT(GLenum texunit, GLenum target, GLenum pname, const GLfloat * params) {if (GLeeInit()) glMultiTexParameterfvEXT(texunit, target, pname, params);} GLEEPFNGLMULTITEXPARAMETERFVEXTPROC GLeeFuncPtr_glMultiTexParameterfvEXT=GLee_Lazy_glMultiTexParameterfvEXT; #endif #ifndef GLEE_C_DEFINED_glMultiTexParameteriEXT #define GLEE_C_DEFINED_glMultiTexParameteriEXT void __stdcall GLee_Lazy_glMultiTexParameteriEXT(GLenum texunit, GLenum target, GLenum pname, GLint param) {if (GLeeInit()) glMultiTexParameteriEXT(texunit, target, pname, param);} GLEEPFNGLMULTITEXPARAMETERIEXTPROC GLeeFuncPtr_glMultiTexParameteriEXT=GLee_Lazy_glMultiTexParameteriEXT; #endif #ifndef GLEE_C_DEFINED_glMultiTexParameterivEXT #define GLEE_C_DEFINED_glMultiTexParameterivEXT void __stdcall GLee_Lazy_glMultiTexParameterivEXT(GLenum texunit, GLenum target, GLenum pname, const GLint * params) {if (GLeeInit()) glMultiTexParameterivEXT(texunit, target, pname, params);} GLEEPFNGLMULTITEXPARAMETERIVEXTPROC GLeeFuncPtr_glMultiTexParameterivEXT=GLee_Lazy_glMultiTexParameterivEXT; #endif #ifndef GLEE_C_DEFINED_glMultiTexImage1DEXT #define GLEE_C_DEFINED_glMultiTexImage1DEXT void __stdcall GLee_Lazy_glMultiTexImage1DEXT(GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid * pixels) {if (GLeeInit()) glMultiTexImage1DEXT(texunit, target, level, internalformat, width, border, format, type, pixels);} GLEEPFNGLMULTITEXIMAGE1DEXTPROC GLeeFuncPtr_glMultiTexImage1DEXT=GLee_Lazy_glMultiTexImage1DEXT; #endif #ifndef GLEE_C_DEFINED_glMultiTexImage2DEXT #define GLEE_C_DEFINED_glMultiTexImage2DEXT void __stdcall GLee_Lazy_glMultiTexImage2DEXT(GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid * pixels) {if (GLeeInit()) glMultiTexImage2DEXT(texunit, target, level, internalformat, width, height, border, format, type, pixels);} GLEEPFNGLMULTITEXIMAGE2DEXTPROC GLeeFuncPtr_glMultiTexImage2DEXT=GLee_Lazy_glMultiTexImage2DEXT; #endif #ifndef GLEE_C_DEFINED_glMultiTexSubImage1DEXT #define GLEE_C_DEFINED_glMultiTexSubImage1DEXT void __stdcall GLee_Lazy_glMultiTexSubImage1DEXT(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid * pixels) {if (GLeeInit()) glMultiTexSubImage1DEXT(texunit, target, level, xoffset, width, format, type, pixels);} GLEEPFNGLMULTITEXSUBIMAGE1DEXTPROC GLeeFuncPtr_glMultiTexSubImage1DEXT=GLee_Lazy_glMultiTexSubImage1DEXT; #endif #ifndef GLEE_C_DEFINED_glMultiTexSubImage2DEXT #define GLEE_C_DEFINED_glMultiTexSubImage2DEXT void __stdcall GLee_Lazy_glMultiTexSubImage2DEXT(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * pixels) {if (GLeeInit()) glMultiTexSubImage2DEXT(texunit, target, level, xoffset, yoffset, width, height, format, type, pixels);} GLEEPFNGLMULTITEXSUBIMAGE2DEXTPROC GLeeFuncPtr_glMultiTexSubImage2DEXT=GLee_Lazy_glMultiTexSubImage2DEXT; #endif #ifndef GLEE_C_DEFINED_glCopyMultiTexImage1DEXT #define GLEE_C_DEFINED_glCopyMultiTexImage1DEXT void __stdcall GLee_Lazy_glCopyMultiTexImage1DEXT(GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border) {if (GLeeInit()) glCopyMultiTexImage1DEXT(texunit, target, level, internalformat, x, y, width, border);} GLEEPFNGLCOPYMULTITEXIMAGE1DEXTPROC GLeeFuncPtr_glCopyMultiTexImage1DEXT=GLee_Lazy_glCopyMultiTexImage1DEXT; #endif #ifndef GLEE_C_DEFINED_glCopyMultiTexImage2DEXT #define GLEE_C_DEFINED_glCopyMultiTexImage2DEXT void __stdcall GLee_Lazy_glCopyMultiTexImage2DEXT(GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) {if (GLeeInit()) glCopyMultiTexImage2DEXT(texunit, target, level, internalformat, x, y, width, height, border);} GLEEPFNGLCOPYMULTITEXIMAGE2DEXTPROC GLeeFuncPtr_glCopyMultiTexImage2DEXT=GLee_Lazy_glCopyMultiTexImage2DEXT; #endif #ifndef GLEE_C_DEFINED_glCopyMultiTexSubImage1DEXT #define GLEE_C_DEFINED_glCopyMultiTexSubImage1DEXT void __stdcall GLee_Lazy_glCopyMultiTexSubImage1DEXT(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width) {if (GLeeInit()) glCopyMultiTexSubImage1DEXT(texunit, target, level, xoffset, x, y, width);} GLEEPFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC GLeeFuncPtr_glCopyMultiTexSubImage1DEXT=GLee_Lazy_glCopyMultiTexSubImage1DEXT; #endif #ifndef GLEE_C_DEFINED_glCopyMultiTexSubImage2DEXT #define GLEE_C_DEFINED_glCopyMultiTexSubImage2DEXT void __stdcall GLee_Lazy_glCopyMultiTexSubImage2DEXT(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height) {if (GLeeInit()) glCopyMultiTexSubImage2DEXT(texunit, target, level, xoffset, yoffset, x, y, width, height);} GLEEPFNGLCOPYMULTITEXSUBIMAGE2DEXTPROC GLeeFuncPtr_glCopyMultiTexSubImage2DEXT=GLee_Lazy_glCopyMultiTexSubImage2DEXT; #endif #ifndef GLEE_C_DEFINED_glGetMultiTexImageEXT #define GLEE_C_DEFINED_glGetMultiTexImageEXT void __stdcall GLee_Lazy_glGetMultiTexImageEXT(GLenum texunit, GLenum target, GLint level, GLenum format, GLenum type, GLvoid * pixels) {if (GLeeInit()) glGetMultiTexImageEXT(texunit, target, level, format, type, pixels);} GLEEPFNGLGETMULTITEXIMAGEEXTPROC GLeeFuncPtr_glGetMultiTexImageEXT=GLee_Lazy_glGetMultiTexImageEXT; #endif #ifndef GLEE_C_DEFINED_glGetMultiTexParameterfvEXT #define GLEE_C_DEFINED_glGetMultiTexParameterfvEXT void __stdcall GLee_Lazy_glGetMultiTexParameterfvEXT(GLenum texunit, GLenum target, GLenum pname, GLfloat * params) {if (GLeeInit()) glGetMultiTexParameterfvEXT(texunit, target, pname, params);} GLEEPFNGLGETMULTITEXPARAMETERFVEXTPROC GLeeFuncPtr_glGetMultiTexParameterfvEXT=GLee_Lazy_glGetMultiTexParameterfvEXT; #endif #ifndef GLEE_C_DEFINED_glGetMultiTexParameterivEXT #define GLEE_C_DEFINED_glGetMultiTexParameterivEXT void __stdcall GLee_Lazy_glGetMultiTexParameterivEXT(GLenum texunit, GLenum target, GLenum pname, GLint * params) {if (GLeeInit()) glGetMultiTexParameterivEXT(texunit, target, pname, params);} GLEEPFNGLGETMULTITEXPARAMETERIVEXTPROC GLeeFuncPtr_glGetMultiTexParameterivEXT=GLee_Lazy_glGetMultiTexParameterivEXT; #endif #ifndef GLEE_C_DEFINED_glGetMultiTexLevelParameterfvEXT #define GLEE_C_DEFINED_glGetMultiTexLevelParameterfvEXT void __stdcall GLee_Lazy_glGetMultiTexLevelParameterfvEXT(GLenum texunit, GLenum target, GLint level, GLenum pname, GLfloat * params) {if (GLeeInit()) glGetMultiTexLevelParameterfvEXT(texunit, target, level, pname, params);} GLEEPFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC GLeeFuncPtr_glGetMultiTexLevelParameterfvEXT=GLee_Lazy_glGetMultiTexLevelParameterfvEXT; #endif #ifndef GLEE_C_DEFINED_glGetMultiTexLevelParameterivEXT #define GLEE_C_DEFINED_glGetMultiTexLevelParameterivEXT void __stdcall GLee_Lazy_glGetMultiTexLevelParameterivEXT(GLenum texunit, GLenum target, GLint level, GLenum pname, GLint * params) {if (GLeeInit()) glGetMultiTexLevelParameterivEXT(texunit, target, level, pname, params);} GLEEPFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC GLeeFuncPtr_glGetMultiTexLevelParameterivEXT=GLee_Lazy_glGetMultiTexLevelParameterivEXT; #endif #ifndef GLEE_C_DEFINED_glMultiTexImage3DEXT #define GLEE_C_DEFINED_glMultiTexImage3DEXT void __stdcall GLee_Lazy_glMultiTexImage3DEXT(GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid * pixels) {if (GLeeInit()) glMultiTexImage3DEXT(texunit, target, level, internalformat, width, height, depth, border, format, type, pixels);} GLEEPFNGLMULTITEXIMAGE3DEXTPROC GLeeFuncPtr_glMultiTexImage3DEXT=GLee_Lazy_glMultiTexImage3DEXT; #endif #ifndef GLEE_C_DEFINED_glMultiTexSubImage3DEXT #define GLEE_C_DEFINED_glMultiTexSubImage3DEXT void __stdcall GLee_Lazy_glMultiTexSubImage3DEXT(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid * pixels) {if (GLeeInit()) glMultiTexSubImage3DEXT(texunit, target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels);} GLEEPFNGLMULTITEXSUBIMAGE3DEXTPROC GLeeFuncPtr_glMultiTexSubImage3DEXT=GLee_Lazy_glMultiTexSubImage3DEXT; #endif #ifndef GLEE_C_DEFINED_glCopyMultiTexSubImage3DEXT #define GLEE_C_DEFINED_glCopyMultiTexSubImage3DEXT void __stdcall GLee_Lazy_glCopyMultiTexSubImage3DEXT(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) {if (GLeeInit()) glCopyMultiTexSubImage3DEXT(texunit, target, level, xoffset, yoffset, zoffset, x, y, width, height);} GLEEPFNGLCOPYMULTITEXSUBIMAGE3DEXTPROC GLeeFuncPtr_glCopyMultiTexSubImage3DEXT=GLee_Lazy_glCopyMultiTexSubImage3DEXT; #endif #ifndef GLEE_C_DEFINED_glBindMultiTextureEXT #define GLEE_C_DEFINED_glBindMultiTextureEXT void __stdcall GLee_Lazy_glBindMultiTextureEXT(GLenum texunit, GLenum target, GLuint texture) {if (GLeeInit()) glBindMultiTextureEXT(texunit, target, texture);} GLEEPFNGLBINDMULTITEXTUREEXTPROC GLeeFuncPtr_glBindMultiTextureEXT=GLee_Lazy_glBindMultiTextureEXT; #endif #ifndef GLEE_C_DEFINED_glEnableClientStateIndexedEXT #define GLEE_C_DEFINED_glEnableClientStateIndexedEXT void __stdcall GLee_Lazy_glEnableClientStateIndexedEXT(GLenum array, GLuint index) {if (GLeeInit()) glEnableClientStateIndexedEXT(array, index);} GLEEPFNGLENABLECLIENTSTATEINDEXEDEXTPROC GLeeFuncPtr_glEnableClientStateIndexedEXT=GLee_Lazy_glEnableClientStateIndexedEXT; #endif #ifndef GLEE_C_DEFINED_glDisableClientStateIndexedEXT #define GLEE_C_DEFINED_glDisableClientStateIndexedEXT void __stdcall GLee_Lazy_glDisableClientStateIndexedEXT(GLenum array, GLuint index) {if (GLeeInit()) glDisableClientStateIndexedEXT(array, index);} GLEEPFNGLDISABLECLIENTSTATEINDEXEDEXTPROC GLeeFuncPtr_glDisableClientStateIndexedEXT=GLee_Lazy_glDisableClientStateIndexedEXT; #endif #ifndef GLEE_C_DEFINED_glMultiTexCoordPointerEXT #define GLEE_C_DEFINED_glMultiTexCoordPointerEXT void __stdcall GLee_Lazy_glMultiTexCoordPointerEXT(GLenum texunit, GLint size, GLenum type, GLsizei stride, const GLvoid * pointer) {if (GLeeInit()) glMultiTexCoordPointerEXT(texunit, size, type, stride, pointer);} GLEEPFNGLMULTITEXCOORDPOINTEREXTPROC GLeeFuncPtr_glMultiTexCoordPointerEXT=GLee_Lazy_glMultiTexCoordPointerEXT; #endif #ifndef GLEE_C_DEFINED_glMultiTexEnvfEXT #define GLEE_C_DEFINED_glMultiTexEnvfEXT void __stdcall GLee_Lazy_glMultiTexEnvfEXT(GLenum texunit, GLenum target, GLenum pname, GLfloat param) {if (GLeeInit()) glMultiTexEnvfEXT(texunit, target, pname, param);} GLEEPFNGLMULTITEXENVFEXTPROC GLeeFuncPtr_glMultiTexEnvfEXT=GLee_Lazy_glMultiTexEnvfEXT; #endif #ifndef GLEE_C_DEFINED_glMultiTexEnvfvEXT #define GLEE_C_DEFINED_glMultiTexEnvfvEXT void __stdcall GLee_Lazy_glMultiTexEnvfvEXT(GLenum texunit, GLenum target, GLenum pname, const GLfloat * params) {if (GLeeInit()) glMultiTexEnvfvEXT(texunit, target, pname, params);} GLEEPFNGLMULTITEXENVFVEXTPROC GLeeFuncPtr_glMultiTexEnvfvEXT=GLee_Lazy_glMultiTexEnvfvEXT; #endif #ifndef GLEE_C_DEFINED_glMultiTexEnviEXT #define GLEE_C_DEFINED_glMultiTexEnviEXT void __stdcall GLee_Lazy_glMultiTexEnviEXT(GLenum texunit, GLenum target, GLenum pname, GLint param) {if (GLeeInit()) glMultiTexEnviEXT(texunit, target, pname, param);} GLEEPFNGLMULTITEXENVIEXTPROC GLeeFuncPtr_glMultiTexEnviEXT=GLee_Lazy_glMultiTexEnviEXT; #endif #ifndef GLEE_C_DEFINED_glMultiTexEnvivEXT #define GLEE_C_DEFINED_glMultiTexEnvivEXT void __stdcall GLee_Lazy_glMultiTexEnvivEXT(GLenum texunit, GLenum target, GLenum pname, const GLint * params) {if (GLeeInit()) glMultiTexEnvivEXT(texunit, target, pname, params);} GLEEPFNGLMULTITEXENVIVEXTPROC GLeeFuncPtr_glMultiTexEnvivEXT=GLee_Lazy_glMultiTexEnvivEXT; #endif #ifndef GLEE_C_DEFINED_glMultiTexGendEXT #define GLEE_C_DEFINED_glMultiTexGendEXT void __stdcall GLee_Lazy_glMultiTexGendEXT(GLenum texunit, GLenum coord, GLenum pname, GLdouble param) {if (GLeeInit()) glMultiTexGendEXT(texunit, coord, pname, param);} GLEEPFNGLMULTITEXGENDEXTPROC GLeeFuncPtr_glMultiTexGendEXT=GLee_Lazy_glMultiTexGendEXT; #endif #ifndef GLEE_C_DEFINED_glMultiTexGendvEXT #define GLEE_C_DEFINED_glMultiTexGendvEXT void __stdcall GLee_Lazy_glMultiTexGendvEXT(GLenum texunit, GLenum coord, GLenum pname, const GLdouble * params) {if (GLeeInit()) glMultiTexGendvEXT(texunit, coord, pname, params);} GLEEPFNGLMULTITEXGENDVEXTPROC GLeeFuncPtr_glMultiTexGendvEXT=GLee_Lazy_glMultiTexGendvEXT; #endif #ifndef GLEE_C_DEFINED_glMultiTexGenfEXT #define GLEE_C_DEFINED_glMultiTexGenfEXT void __stdcall GLee_Lazy_glMultiTexGenfEXT(GLenum texunit, GLenum coord, GLenum pname, GLfloat param) {if (GLeeInit()) glMultiTexGenfEXT(texunit, coord, pname, param);} GLEEPFNGLMULTITEXGENFEXTPROC GLeeFuncPtr_glMultiTexGenfEXT=GLee_Lazy_glMultiTexGenfEXT; #endif #ifndef GLEE_C_DEFINED_glMultiTexGenfvEXT #define GLEE_C_DEFINED_glMultiTexGenfvEXT void __stdcall GLee_Lazy_glMultiTexGenfvEXT(GLenum texunit, GLenum coord, GLenum pname, const GLfloat * params) {if (GLeeInit()) glMultiTexGenfvEXT(texunit, coord, pname, params);} GLEEPFNGLMULTITEXGENFVEXTPROC GLeeFuncPtr_glMultiTexGenfvEXT=GLee_Lazy_glMultiTexGenfvEXT; #endif #ifndef GLEE_C_DEFINED_glMultiTexGeniEXT #define GLEE_C_DEFINED_glMultiTexGeniEXT void __stdcall GLee_Lazy_glMultiTexGeniEXT(GLenum texunit, GLenum coord, GLenum pname, GLint param) {if (GLeeInit()) glMultiTexGeniEXT(texunit, coord, pname, param);} GLEEPFNGLMULTITEXGENIEXTPROC GLeeFuncPtr_glMultiTexGeniEXT=GLee_Lazy_glMultiTexGeniEXT; #endif #ifndef GLEE_C_DEFINED_glMultiTexGenivEXT #define GLEE_C_DEFINED_glMultiTexGenivEXT void __stdcall GLee_Lazy_glMultiTexGenivEXT(GLenum texunit, GLenum coord, GLenum pname, const GLint * params) {if (GLeeInit()) glMultiTexGenivEXT(texunit, coord, pname, params);} GLEEPFNGLMULTITEXGENIVEXTPROC GLeeFuncPtr_glMultiTexGenivEXT=GLee_Lazy_glMultiTexGenivEXT; #endif #ifndef GLEE_C_DEFINED_glGetMultiTexEnvfvEXT #define GLEE_C_DEFINED_glGetMultiTexEnvfvEXT void __stdcall GLee_Lazy_glGetMultiTexEnvfvEXT(GLenum texunit, GLenum target, GLenum pname, GLfloat * params) {if (GLeeInit()) glGetMultiTexEnvfvEXT(texunit, target, pname, params);} GLEEPFNGLGETMULTITEXENVFVEXTPROC GLeeFuncPtr_glGetMultiTexEnvfvEXT=GLee_Lazy_glGetMultiTexEnvfvEXT; #endif #ifndef GLEE_C_DEFINED_glGetMultiTexEnvivEXT #define GLEE_C_DEFINED_glGetMultiTexEnvivEXT void __stdcall GLee_Lazy_glGetMultiTexEnvivEXT(GLenum texunit, GLenum target, GLenum pname, GLint * params) {if (GLeeInit()) glGetMultiTexEnvivEXT(texunit, target, pname, params);} GLEEPFNGLGETMULTITEXENVIVEXTPROC GLeeFuncPtr_glGetMultiTexEnvivEXT=GLee_Lazy_glGetMultiTexEnvivEXT; #endif #ifndef GLEE_C_DEFINED_glGetMultiTexGendvEXT #define GLEE_C_DEFINED_glGetMultiTexGendvEXT void __stdcall GLee_Lazy_glGetMultiTexGendvEXT(GLenum texunit, GLenum coord, GLenum pname, GLdouble * params) {if (GLeeInit()) glGetMultiTexGendvEXT(texunit, coord, pname, params);} GLEEPFNGLGETMULTITEXGENDVEXTPROC GLeeFuncPtr_glGetMultiTexGendvEXT=GLee_Lazy_glGetMultiTexGendvEXT; #endif #ifndef GLEE_C_DEFINED_glGetMultiTexGenfvEXT #define GLEE_C_DEFINED_glGetMultiTexGenfvEXT void __stdcall GLee_Lazy_glGetMultiTexGenfvEXT(GLenum texunit, GLenum coord, GLenum pname, GLfloat * params) {if (GLeeInit()) glGetMultiTexGenfvEXT(texunit, coord, pname, params);} GLEEPFNGLGETMULTITEXGENFVEXTPROC GLeeFuncPtr_glGetMultiTexGenfvEXT=GLee_Lazy_glGetMultiTexGenfvEXT; #endif #ifndef GLEE_C_DEFINED_glGetMultiTexGenivEXT #define GLEE_C_DEFINED_glGetMultiTexGenivEXT void __stdcall GLee_Lazy_glGetMultiTexGenivEXT(GLenum texunit, GLenum coord, GLenum pname, GLint * params) {if (GLeeInit()) glGetMultiTexGenivEXT(texunit, coord, pname, params);} GLEEPFNGLGETMULTITEXGENIVEXTPROC GLeeFuncPtr_glGetMultiTexGenivEXT=GLee_Lazy_glGetMultiTexGenivEXT; #endif #ifndef GLEE_C_DEFINED_glGetFloatIndexedvEXT #define GLEE_C_DEFINED_glGetFloatIndexedvEXT void __stdcall GLee_Lazy_glGetFloatIndexedvEXT(GLenum target, GLuint index, GLfloat * data) {if (GLeeInit()) glGetFloatIndexedvEXT(target, index, data);} GLEEPFNGLGETFLOATINDEXEDVEXTPROC GLeeFuncPtr_glGetFloatIndexedvEXT=GLee_Lazy_glGetFloatIndexedvEXT; #endif #ifndef GLEE_C_DEFINED_glGetDoubleIndexedvEXT #define GLEE_C_DEFINED_glGetDoubleIndexedvEXT void __stdcall GLee_Lazy_glGetDoubleIndexedvEXT(GLenum target, GLuint index, GLdouble * data) {if (GLeeInit()) glGetDoubleIndexedvEXT(target, index, data);} GLEEPFNGLGETDOUBLEINDEXEDVEXTPROC GLeeFuncPtr_glGetDoubleIndexedvEXT=GLee_Lazy_glGetDoubleIndexedvEXT; #endif #ifndef GLEE_C_DEFINED_glGetPointerIndexedvEXT #define GLEE_C_DEFINED_glGetPointerIndexedvEXT void __stdcall GLee_Lazy_glGetPointerIndexedvEXT(GLenum target, GLuint index, GLvoid* * data) {if (GLeeInit()) glGetPointerIndexedvEXT(target, index, data);} GLEEPFNGLGETPOINTERINDEXEDVEXTPROC GLeeFuncPtr_glGetPointerIndexedvEXT=GLee_Lazy_glGetPointerIndexedvEXT; #endif #ifndef GLEE_C_DEFINED_glCompressedTextureImage3DEXT #define GLEE_C_DEFINED_glCompressedTextureImage3DEXT void __stdcall GLee_Lazy_glCompressedTextureImage3DEXT(GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid * bits) {if (GLeeInit()) glCompressedTextureImage3DEXT(texture, target, level, internalformat, width, height, depth, border, imageSize, bits);} GLEEPFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC GLeeFuncPtr_glCompressedTextureImage3DEXT=GLee_Lazy_glCompressedTextureImage3DEXT; #endif #ifndef GLEE_C_DEFINED_glCompressedTextureImage2DEXT #define GLEE_C_DEFINED_glCompressedTextureImage2DEXT void __stdcall GLee_Lazy_glCompressedTextureImage2DEXT(GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid * bits) {if (GLeeInit()) glCompressedTextureImage2DEXT(texture, target, level, internalformat, width, height, border, imageSize, bits);} GLEEPFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC GLeeFuncPtr_glCompressedTextureImage2DEXT=GLee_Lazy_glCompressedTextureImage2DEXT; #endif #ifndef GLEE_C_DEFINED_glCompressedTextureImage1DEXT #define GLEE_C_DEFINED_glCompressedTextureImage1DEXT void __stdcall GLee_Lazy_glCompressedTextureImage1DEXT(GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid * bits) {if (GLeeInit()) glCompressedTextureImage1DEXT(texture, target, level, internalformat, width, border, imageSize, bits);} GLEEPFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC GLeeFuncPtr_glCompressedTextureImage1DEXT=GLee_Lazy_glCompressedTextureImage1DEXT; #endif #ifndef GLEE_C_DEFINED_glCompressedTextureSubImage3DEXT #define GLEE_C_DEFINED_glCompressedTextureSubImage3DEXT void __stdcall GLee_Lazy_glCompressedTextureSubImage3DEXT(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid * bits) {if (GLeeInit()) glCompressedTextureSubImage3DEXT(texture, target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, bits);} GLEEPFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC GLeeFuncPtr_glCompressedTextureSubImage3DEXT=GLee_Lazy_glCompressedTextureSubImage3DEXT; #endif #ifndef GLEE_C_DEFINED_glCompressedTextureSubImage2DEXT #define GLEE_C_DEFINED_glCompressedTextureSubImage2DEXT void __stdcall GLee_Lazy_glCompressedTextureSubImage2DEXT(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid * bits) {if (GLeeInit()) glCompressedTextureSubImage2DEXT(texture, target, level, xoffset, yoffset, width, height, format, imageSize, bits);} GLEEPFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC GLeeFuncPtr_glCompressedTextureSubImage2DEXT=GLee_Lazy_glCompressedTextureSubImage2DEXT; #endif #ifndef GLEE_C_DEFINED_glCompressedTextureSubImage1DEXT #define GLEE_C_DEFINED_glCompressedTextureSubImage1DEXT void __stdcall GLee_Lazy_glCompressedTextureSubImage1DEXT(GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid * bits) {if (GLeeInit()) glCompressedTextureSubImage1DEXT(texture, target, level, xoffset, width, format, imageSize, bits);} GLEEPFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC GLeeFuncPtr_glCompressedTextureSubImage1DEXT=GLee_Lazy_glCompressedTextureSubImage1DEXT; #endif #ifndef GLEE_C_DEFINED_glGetCompressedTextureImageEXT #define GLEE_C_DEFINED_glGetCompressedTextureImageEXT void __stdcall GLee_Lazy_glGetCompressedTextureImageEXT(GLuint texture, GLenum target, GLint lod, GLvoid * img) {if (GLeeInit()) glGetCompressedTextureImageEXT(texture, target, lod, img);} GLEEPFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC GLeeFuncPtr_glGetCompressedTextureImageEXT=GLee_Lazy_glGetCompressedTextureImageEXT; #endif #ifndef GLEE_C_DEFINED_glCompressedMultiTexImage3DEXT #define GLEE_C_DEFINED_glCompressedMultiTexImage3DEXT void __stdcall GLee_Lazy_glCompressedMultiTexImage3DEXT(GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid * bits) {if (GLeeInit()) glCompressedMultiTexImage3DEXT(texunit, target, level, internalformat, width, height, depth, border, imageSize, bits);} GLEEPFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC GLeeFuncPtr_glCompressedMultiTexImage3DEXT=GLee_Lazy_glCompressedMultiTexImage3DEXT; #endif #ifndef GLEE_C_DEFINED_glCompressedMultiTexImage2DEXT #define GLEE_C_DEFINED_glCompressedMultiTexImage2DEXT void __stdcall GLee_Lazy_glCompressedMultiTexImage2DEXT(GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid * bits) {if (GLeeInit()) glCompressedMultiTexImage2DEXT(texunit, target, level, internalformat, width, height, border, imageSize, bits);} GLEEPFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC GLeeFuncPtr_glCompressedMultiTexImage2DEXT=GLee_Lazy_glCompressedMultiTexImage2DEXT; #endif #ifndef GLEE_C_DEFINED_glCompressedMultiTexImage1DEXT #define GLEE_C_DEFINED_glCompressedMultiTexImage1DEXT void __stdcall GLee_Lazy_glCompressedMultiTexImage1DEXT(GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid * bits) {if (GLeeInit()) glCompressedMultiTexImage1DEXT(texunit, target, level, internalformat, width, border, imageSize, bits);} GLEEPFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC GLeeFuncPtr_glCompressedMultiTexImage1DEXT=GLee_Lazy_glCompressedMultiTexImage1DEXT; #endif #ifndef GLEE_C_DEFINED_glCompressedMultiTexSubImage3DEXT #define GLEE_C_DEFINED_glCompressedMultiTexSubImage3DEXT void __stdcall GLee_Lazy_glCompressedMultiTexSubImage3DEXT(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid * bits) {if (GLeeInit()) glCompressedMultiTexSubImage3DEXT(texunit, target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, bits);} GLEEPFNGLCOMPRESSEDMULTITEXSUBIMAGE3DEXTPROC GLeeFuncPtr_glCompressedMultiTexSubImage3DEXT=GLee_Lazy_glCompressedMultiTexSubImage3DEXT; #endif #ifndef GLEE_C_DEFINED_glCompressedMultiTexSubImage2DEXT #define GLEE_C_DEFINED_glCompressedMultiTexSubImage2DEXT void __stdcall GLee_Lazy_glCompressedMultiTexSubImage2DEXT(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid * bits) {if (GLeeInit()) glCompressedMultiTexSubImage2DEXT(texunit, target, level, xoffset, yoffset, width, height, format, imageSize, bits);} GLEEPFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC GLeeFuncPtr_glCompressedMultiTexSubImage2DEXT=GLee_Lazy_glCompressedMultiTexSubImage2DEXT; #endif #ifndef GLEE_C_DEFINED_glCompressedMultiTexSubImage1DEXT #define GLEE_C_DEFINED_glCompressedMultiTexSubImage1DEXT void __stdcall GLee_Lazy_glCompressedMultiTexSubImage1DEXT(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid * bits) {if (GLeeInit()) glCompressedMultiTexSubImage1DEXT(texunit, target, level, xoffset, width, format, imageSize, bits);} GLEEPFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC GLeeFuncPtr_glCompressedMultiTexSubImage1DEXT=GLee_Lazy_glCompressedMultiTexSubImage1DEXT; #endif #ifndef GLEE_C_DEFINED_glGetCompressedMultiTexImageEXT #define GLEE_C_DEFINED_glGetCompressedMultiTexImageEXT void __stdcall GLee_Lazy_glGetCompressedMultiTexImageEXT(GLenum texunit, GLenum target, GLint lod, GLvoid * img) {if (GLeeInit()) glGetCompressedMultiTexImageEXT(texunit, target, lod, img);} GLEEPFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC GLeeFuncPtr_glGetCompressedMultiTexImageEXT=GLee_Lazy_glGetCompressedMultiTexImageEXT; #endif #ifndef GLEE_C_DEFINED_glNamedProgramStringEXT #define GLEE_C_DEFINED_glNamedProgramStringEXT void __stdcall GLee_Lazy_glNamedProgramStringEXT(GLuint program, GLenum target, GLenum format, GLsizei len, const GLvoid * string) {if (GLeeInit()) glNamedProgramStringEXT(program, target, format, len, string);} GLEEPFNGLNAMEDPROGRAMSTRINGEXTPROC GLeeFuncPtr_glNamedProgramStringEXT=GLee_Lazy_glNamedProgramStringEXT; #endif #ifndef GLEE_C_DEFINED_glNamedProgramLocalParameter4dEXT #define GLEE_C_DEFINED_glNamedProgramLocalParameter4dEXT void __stdcall GLee_Lazy_glNamedProgramLocalParameter4dEXT(GLuint program, GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) {if (GLeeInit()) glNamedProgramLocalParameter4dEXT(program, target, index, x, y, z, w);} GLEEPFNGLNAMEDPROGRAMLOCALPARAMETER4DEXTPROC GLeeFuncPtr_glNamedProgramLocalParameter4dEXT=GLee_Lazy_glNamedProgramLocalParameter4dEXT; #endif #ifndef GLEE_C_DEFINED_glNamedProgramLocalParameter4dvEXT #define GLEE_C_DEFINED_glNamedProgramLocalParameter4dvEXT void __stdcall GLee_Lazy_glNamedProgramLocalParameter4dvEXT(GLuint program, GLenum target, GLuint index, const GLdouble * params) {if (GLeeInit()) glNamedProgramLocalParameter4dvEXT(program, target, index, params);} GLEEPFNGLNAMEDPROGRAMLOCALPARAMETER4DVEXTPROC GLeeFuncPtr_glNamedProgramLocalParameter4dvEXT=GLee_Lazy_glNamedProgramLocalParameter4dvEXT; #endif #ifndef GLEE_C_DEFINED_glNamedProgramLocalParameter4fEXT #define GLEE_C_DEFINED_glNamedProgramLocalParameter4fEXT void __stdcall GLee_Lazy_glNamedProgramLocalParameter4fEXT(GLuint program, GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w) {if (GLeeInit()) glNamedProgramLocalParameter4fEXT(program, target, index, x, y, z, w);} GLEEPFNGLNAMEDPROGRAMLOCALPARAMETER4FEXTPROC GLeeFuncPtr_glNamedProgramLocalParameter4fEXT=GLee_Lazy_glNamedProgramLocalParameter4fEXT; #endif #ifndef GLEE_C_DEFINED_glNamedProgramLocalParameter4fvEXT #define GLEE_C_DEFINED_glNamedProgramLocalParameter4fvEXT void __stdcall GLee_Lazy_glNamedProgramLocalParameter4fvEXT(GLuint program, GLenum target, GLuint index, const GLfloat * params) {if (GLeeInit()) glNamedProgramLocalParameter4fvEXT(program, target, index, params);} GLEEPFNGLNAMEDPROGRAMLOCALPARAMETER4FVEXTPROC GLeeFuncPtr_glNamedProgramLocalParameter4fvEXT=GLee_Lazy_glNamedProgramLocalParameter4fvEXT; #endif #ifndef GLEE_C_DEFINED_glGetNamedProgramLocalParameterdvEXT #define GLEE_C_DEFINED_glGetNamedProgramLocalParameterdvEXT void __stdcall GLee_Lazy_glGetNamedProgramLocalParameterdvEXT(GLuint program, GLenum target, GLuint index, GLdouble * params) {if (GLeeInit()) glGetNamedProgramLocalParameterdvEXT(program, target, index, params);} GLEEPFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC GLeeFuncPtr_glGetNamedProgramLocalParameterdvEXT=GLee_Lazy_glGetNamedProgramLocalParameterdvEXT; #endif #ifndef GLEE_C_DEFINED_glGetNamedProgramLocalParameterfvEXT #define GLEE_C_DEFINED_glGetNamedProgramLocalParameterfvEXT void __stdcall GLee_Lazy_glGetNamedProgramLocalParameterfvEXT(GLuint program, GLenum target, GLuint index, GLfloat * params) {if (GLeeInit()) glGetNamedProgramLocalParameterfvEXT(program, target, index, params);} GLEEPFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC GLeeFuncPtr_glGetNamedProgramLocalParameterfvEXT=GLee_Lazy_glGetNamedProgramLocalParameterfvEXT; #endif #ifndef GLEE_C_DEFINED_glGetNamedProgramivEXT #define GLEE_C_DEFINED_glGetNamedProgramivEXT void __stdcall GLee_Lazy_glGetNamedProgramivEXT(GLuint program, GLenum target, GLenum pname, GLint * params) {if (GLeeInit()) glGetNamedProgramivEXT(program, target, pname, params);} GLEEPFNGLGETNAMEDPROGRAMIVEXTPROC GLeeFuncPtr_glGetNamedProgramivEXT=GLee_Lazy_glGetNamedProgramivEXT; #endif #ifndef GLEE_C_DEFINED_glGetNamedProgramStringEXT #define GLEE_C_DEFINED_glGetNamedProgramStringEXT void __stdcall GLee_Lazy_glGetNamedProgramStringEXT(GLuint program, GLenum target, GLenum pname, GLvoid * string) {if (GLeeInit()) glGetNamedProgramStringEXT(program, target, pname, string);} GLEEPFNGLGETNAMEDPROGRAMSTRINGEXTPROC GLeeFuncPtr_glGetNamedProgramStringEXT=GLee_Lazy_glGetNamedProgramStringEXT; #endif #ifndef GLEE_C_DEFINED_glNamedProgramLocalParameters4fvEXT #define GLEE_C_DEFINED_glNamedProgramLocalParameters4fvEXT void __stdcall GLee_Lazy_glNamedProgramLocalParameters4fvEXT(GLuint program, GLenum target, GLuint index, GLsizei count, const GLfloat * params) {if (GLeeInit()) glNamedProgramLocalParameters4fvEXT(program, target, index, count, params);} GLEEPFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC GLeeFuncPtr_glNamedProgramLocalParameters4fvEXT=GLee_Lazy_glNamedProgramLocalParameters4fvEXT; #endif #ifndef GLEE_C_DEFINED_glNamedProgramLocalParameterI4iEXT #define GLEE_C_DEFINED_glNamedProgramLocalParameterI4iEXT void __stdcall GLee_Lazy_glNamedProgramLocalParameterI4iEXT(GLuint program, GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w) {if (GLeeInit()) glNamedProgramLocalParameterI4iEXT(program, target, index, x, y, z, w);} GLEEPFNGLNAMEDPROGRAMLOCALPARAMETERI4IEXTPROC GLeeFuncPtr_glNamedProgramLocalParameterI4iEXT=GLee_Lazy_glNamedProgramLocalParameterI4iEXT; #endif #ifndef GLEE_C_DEFINED_glNamedProgramLocalParameterI4ivEXT #define GLEE_C_DEFINED_glNamedProgramLocalParameterI4ivEXT void __stdcall GLee_Lazy_glNamedProgramLocalParameterI4ivEXT(GLuint program, GLenum target, GLuint index, const GLint * params) {if (GLeeInit()) glNamedProgramLocalParameterI4ivEXT(program, target, index, params);} GLEEPFNGLNAMEDPROGRAMLOCALPARAMETERI4IVEXTPROC GLeeFuncPtr_glNamedProgramLocalParameterI4ivEXT=GLee_Lazy_glNamedProgramLocalParameterI4ivEXT; #endif #ifndef GLEE_C_DEFINED_glNamedProgramLocalParametersI4ivEXT #define GLEE_C_DEFINED_glNamedProgramLocalParametersI4ivEXT void __stdcall GLee_Lazy_glNamedProgramLocalParametersI4ivEXT(GLuint program, GLenum target, GLuint index, GLsizei count, const GLint * params) {if (GLeeInit()) glNamedProgramLocalParametersI4ivEXT(program, target, index, count, params);} GLEEPFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC GLeeFuncPtr_glNamedProgramLocalParametersI4ivEXT=GLee_Lazy_glNamedProgramLocalParametersI4ivEXT; #endif #ifndef GLEE_C_DEFINED_glNamedProgramLocalParameterI4uiEXT #define GLEE_C_DEFINED_glNamedProgramLocalParameterI4uiEXT void __stdcall GLee_Lazy_glNamedProgramLocalParameterI4uiEXT(GLuint program, GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w) {if (GLeeInit()) glNamedProgramLocalParameterI4uiEXT(program, target, index, x, y, z, w);} GLEEPFNGLNAMEDPROGRAMLOCALPARAMETERI4UIEXTPROC GLeeFuncPtr_glNamedProgramLocalParameterI4uiEXT=GLee_Lazy_glNamedProgramLocalParameterI4uiEXT; #endif #ifndef GLEE_C_DEFINED_glNamedProgramLocalParameterI4uivEXT #define GLEE_C_DEFINED_glNamedProgramLocalParameterI4uivEXT void __stdcall GLee_Lazy_glNamedProgramLocalParameterI4uivEXT(GLuint program, GLenum target, GLuint index, const GLuint * params) {if (GLeeInit()) glNamedProgramLocalParameterI4uivEXT(program, target, index, params);} GLEEPFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC GLeeFuncPtr_glNamedProgramLocalParameterI4uivEXT=GLee_Lazy_glNamedProgramLocalParameterI4uivEXT; #endif #ifndef GLEE_C_DEFINED_glNamedProgramLocalParametersI4uivEXT #define GLEE_C_DEFINED_glNamedProgramLocalParametersI4uivEXT void __stdcall GLee_Lazy_glNamedProgramLocalParametersI4uivEXT(GLuint program, GLenum target, GLuint index, GLsizei count, const GLuint * params) {if (GLeeInit()) glNamedProgramLocalParametersI4uivEXT(program, target, index, count, params);} GLEEPFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC GLeeFuncPtr_glNamedProgramLocalParametersI4uivEXT=GLee_Lazy_glNamedProgramLocalParametersI4uivEXT; #endif #ifndef GLEE_C_DEFINED_glGetNamedProgramLocalParameterIivEXT #define GLEE_C_DEFINED_glGetNamedProgramLocalParameterIivEXT void __stdcall GLee_Lazy_glGetNamedProgramLocalParameterIivEXT(GLuint program, GLenum target, GLuint index, GLint * params) {if (GLeeInit()) glGetNamedProgramLocalParameterIivEXT(program, target, index, params);} GLEEPFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC GLeeFuncPtr_glGetNamedProgramLocalParameterIivEXT=GLee_Lazy_glGetNamedProgramLocalParameterIivEXT; #endif #ifndef GLEE_C_DEFINED_glGetNamedProgramLocalParameterIuivEXT #define GLEE_C_DEFINED_glGetNamedProgramLocalParameterIuivEXT void __stdcall GLee_Lazy_glGetNamedProgramLocalParameterIuivEXT(GLuint program, GLenum target, GLuint index, GLuint * params) {if (GLeeInit()) glGetNamedProgramLocalParameterIuivEXT(program, target, index, params);} GLEEPFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC GLeeFuncPtr_glGetNamedProgramLocalParameterIuivEXT=GLee_Lazy_glGetNamedProgramLocalParameterIuivEXT; #endif #ifndef GLEE_C_DEFINED_glTextureParameterIivEXT #define GLEE_C_DEFINED_glTextureParameterIivEXT void __stdcall GLee_Lazy_glTextureParameterIivEXT(GLuint texture, GLenum target, GLenum pname, const GLint * params) {if (GLeeInit()) glTextureParameterIivEXT(texture, target, pname, params);} GLEEPFNGLTEXTUREPARAMETERIIVEXTPROC GLeeFuncPtr_glTextureParameterIivEXT=GLee_Lazy_glTextureParameterIivEXT; #endif #ifndef GLEE_C_DEFINED_glTextureParameterIuivEXT #define GLEE_C_DEFINED_glTextureParameterIuivEXT void __stdcall GLee_Lazy_glTextureParameterIuivEXT(GLuint texture, GLenum target, GLenum pname, const GLuint * params) {if (GLeeInit()) glTextureParameterIuivEXT(texture, target, pname, params);} GLEEPFNGLTEXTUREPARAMETERIUIVEXTPROC GLeeFuncPtr_glTextureParameterIuivEXT=GLee_Lazy_glTextureParameterIuivEXT; #endif #ifndef GLEE_C_DEFINED_glGetTextureParameterIivEXT #define GLEE_C_DEFINED_glGetTextureParameterIivEXT void __stdcall GLee_Lazy_glGetTextureParameterIivEXT(GLuint texture, GLenum target, GLenum pname, GLint * params) {if (GLeeInit()) glGetTextureParameterIivEXT(texture, target, pname, params);} GLEEPFNGLGETTEXTUREPARAMETERIIVEXTPROC GLeeFuncPtr_glGetTextureParameterIivEXT=GLee_Lazy_glGetTextureParameterIivEXT; #endif #ifndef GLEE_C_DEFINED_glGetTextureParameterIuivEXT #define GLEE_C_DEFINED_glGetTextureParameterIuivEXT void __stdcall GLee_Lazy_glGetTextureParameterIuivEXT(GLuint texture, GLenum target, GLenum pname, GLuint * params) {if (GLeeInit()) glGetTextureParameterIuivEXT(texture, target, pname, params);} GLEEPFNGLGETTEXTUREPARAMETERIUIVEXTPROC GLeeFuncPtr_glGetTextureParameterIuivEXT=GLee_Lazy_glGetTextureParameterIuivEXT; #endif #ifndef GLEE_C_DEFINED_glMultiTexParameterIivEXT #define GLEE_C_DEFINED_glMultiTexParameterIivEXT void __stdcall GLee_Lazy_glMultiTexParameterIivEXT(GLenum texunit, GLenum target, GLenum pname, const GLint * params) {if (GLeeInit()) glMultiTexParameterIivEXT(texunit, target, pname, params);} GLEEPFNGLMULTITEXPARAMETERIIVEXTPROC GLeeFuncPtr_glMultiTexParameterIivEXT=GLee_Lazy_glMultiTexParameterIivEXT; #endif #ifndef GLEE_C_DEFINED_glMultiTexParameterIuivEXT #define GLEE_C_DEFINED_glMultiTexParameterIuivEXT void __stdcall GLee_Lazy_glMultiTexParameterIuivEXT(GLenum texunit, GLenum target, GLenum pname, const GLuint * params) {if (GLeeInit()) glMultiTexParameterIuivEXT(texunit, target, pname, params);} GLEEPFNGLMULTITEXPARAMETERIUIVEXTPROC GLeeFuncPtr_glMultiTexParameterIuivEXT=GLee_Lazy_glMultiTexParameterIuivEXT; #endif #ifndef GLEE_C_DEFINED_glGetMultiTexParameterIivEXT #define GLEE_C_DEFINED_glGetMultiTexParameterIivEXT void __stdcall GLee_Lazy_glGetMultiTexParameterIivEXT(GLenum texunit, GLenum target, GLenum pname, GLint * params) {if (GLeeInit()) glGetMultiTexParameterIivEXT(texunit, target, pname, params);} GLEEPFNGLGETMULTITEXPARAMETERIIVEXTPROC GLeeFuncPtr_glGetMultiTexParameterIivEXT=GLee_Lazy_glGetMultiTexParameterIivEXT; #endif #ifndef GLEE_C_DEFINED_glGetMultiTexParameterIuivEXT #define GLEE_C_DEFINED_glGetMultiTexParameterIuivEXT void __stdcall GLee_Lazy_glGetMultiTexParameterIuivEXT(GLenum texunit, GLenum target, GLenum pname, GLuint * params) {if (GLeeInit()) glGetMultiTexParameterIuivEXT(texunit, target, pname, params);} GLEEPFNGLGETMULTITEXPARAMETERIUIVEXTPROC GLeeFuncPtr_glGetMultiTexParameterIuivEXT=GLee_Lazy_glGetMultiTexParameterIuivEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniform1fEXT #define GLEE_C_DEFINED_glProgramUniform1fEXT void __stdcall GLee_Lazy_glProgramUniform1fEXT(GLuint program, GLint location, GLfloat v0) {if (GLeeInit()) glProgramUniform1fEXT(program, location, v0);} GLEEPFNGLPROGRAMUNIFORM1FEXTPROC GLeeFuncPtr_glProgramUniform1fEXT=GLee_Lazy_glProgramUniform1fEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniform2fEXT #define GLEE_C_DEFINED_glProgramUniform2fEXT void __stdcall GLee_Lazy_glProgramUniform2fEXT(GLuint program, GLint location, GLfloat v0, GLfloat v1) {if (GLeeInit()) glProgramUniform2fEXT(program, location, v0, v1);} GLEEPFNGLPROGRAMUNIFORM2FEXTPROC GLeeFuncPtr_glProgramUniform2fEXT=GLee_Lazy_glProgramUniform2fEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniform3fEXT #define GLEE_C_DEFINED_glProgramUniform3fEXT void __stdcall GLee_Lazy_glProgramUniform3fEXT(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2) {if (GLeeInit()) glProgramUniform3fEXT(program, location, v0, v1, v2);} GLEEPFNGLPROGRAMUNIFORM3FEXTPROC GLeeFuncPtr_glProgramUniform3fEXT=GLee_Lazy_glProgramUniform3fEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniform4fEXT #define GLEE_C_DEFINED_glProgramUniform4fEXT void __stdcall GLee_Lazy_glProgramUniform4fEXT(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) {if (GLeeInit()) glProgramUniform4fEXT(program, location, v0, v1, v2, v3);} GLEEPFNGLPROGRAMUNIFORM4FEXTPROC GLeeFuncPtr_glProgramUniform4fEXT=GLee_Lazy_glProgramUniform4fEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniform1iEXT #define GLEE_C_DEFINED_glProgramUniform1iEXT void __stdcall GLee_Lazy_glProgramUniform1iEXT(GLuint program, GLint location, GLint v0) {if (GLeeInit()) glProgramUniform1iEXT(program, location, v0);} GLEEPFNGLPROGRAMUNIFORM1IEXTPROC GLeeFuncPtr_glProgramUniform1iEXT=GLee_Lazy_glProgramUniform1iEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniform2iEXT #define GLEE_C_DEFINED_glProgramUniform2iEXT void __stdcall GLee_Lazy_glProgramUniform2iEXT(GLuint program, GLint location, GLint v0, GLint v1) {if (GLeeInit()) glProgramUniform2iEXT(program, location, v0, v1);} GLEEPFNGLPROGRAMUNIFORM2IEXTPROC GLeeFuncPtr_glProgramUniform2iEXT=GLee_Lazy_glProgramUniform2iEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniform3iEXT #define GLEE_C_DEFINED_glProgramUniform3iEXT void __stdcall GLee_Lazy_glProgramUniform3iEXT(GLuint program, GLint location, GLint v0, GLint v1, GLint v2) {if (GLeeInit()) glProgramUniform3iEXT(program, location, v0, v1, v2);} GLEEPFNGLPROGRAMUNIFORM3IEXTPROC GLeeFuncPtr_glProgramUniform3iEXT=GLee_Lazy_glProgramUniform3iEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniform4iEXT #define GLEE_C_DEFINED_glProgramUniform4iEXT void __stdcall GLee_Lazy_glProgramUniform4iEXT(GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3) {if (GLeeInit()) glProgramUniform4iEXT(program, location, v0, v1, v2, v3);} GLEEPFNGLPROGRAMUNIFORM4IEXTPROC GLeeFuncPtr_glProgramUniform4iEXT=GLee_Lazy_glProgramUniform4iEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniform1fvEXT #define GLEE_C_DEFINED_glProgramUniform1fvEXT void __stdcall GLee_Lazy_glProgramUniform1fvEXT(GLuint program, GLint location, GLsizei count, const GLfloat * value) {if (GLeeInit()) glProgramUniform1fvEXT(program, location, count, value);} GLEEPFNGLPROGRAMUNIFORM1FVEXTPROC GLeeFuncPtr_glProgramUniform1fvEXT=GLee_Lazy_glProgramUniform1fvEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniform2fvEXT #define GLEE_C_DEFINED_glProgramUniform2fvEXT void __stdcall GLee_Lazy_glProgramUniform2fvEXT(GLuint program, GLint location, GLsizei count, const GLfloat * value) {if (GLeeInit()) glProgramUniform2fvEXT(program, location, count, value);} GLEEPFNGLPROGRAMUNIFORM2FVEXTPROC GLeeFuncPtr_glProgramUniform2fvEXT=GLee_Lazy_glProgramUniform2fvEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniform3fvEXT #define GLEE_C_DEFINED_glProgramUniform3fvEXT void __stdcall GLee_Lazy_glProgramUniform3fvEXT(GLuint program, GLint location, GLsizei count, const GLfloat * value) {if (GLeeInit()) glProgramUniform3fvEXT(program, location, count, value);} GLEEPFNGLPROGRAMUNIFORM3FVEXTPROC GLeeFuncPtr_glProgramUniform3fvEXT=GLee_Lazy_glProgramUniform3fvEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniform4fvEXT #define GLEE_C_DEFINED_glProgramUniform4fvEXT void __stdcall GLee_Lazy_glProgramUniform4fvEXT(GLuint program, GLint location, GLsizei count, const GLfloat * value) {if (GLeeInit()) glProgramUniform4fvEXT(program, location, count, value);} GLEEPFNGLPROGRAMUNIFORM4FVEXTPROC GLeeFuncPtr_glProgramUniform4fvEXT=GLee_Lazy_glProgramUniform4fvEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniform1ivEXT #define GLEE_C_DEFINED_glProgramUniform1ivEXT void __stdcall GLee_Lazy_glProgramUniform1ivEXT(GLuint program, GLint location, GLsizei count, const GLint * value) {if (GLeeInit()) glProgramUniform1ivEXT(program, location, count, value);} GLEEPFNGLPROGRAMUNIFORM1IVEXTPROC GLeeFuncPtr_glProgramUniform1ivEXT=GLee_Lazy_glProgramUniform1ivEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniform2ivEXT #define GLEE_C_DEFINED_glProgramUniform2ivEXT void __stdcall GLee_Lazy_glProgramUniform2ivEXT(GLuint program, GLint location, GLsizei count, const GLint * value) {if (GLeeInit()) glProgramUniform2ivEXT(program, location, count, value);} GLEEPFNGLPROGRAMUNIFORM2IVEXTPROC GLeeFuncPtr_glProgramUniform2ivEXT=GLee_Lazy_glProgramUniform2ivEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniform3ivEXT #define GLEE_C_DEFINED_glProgramUniform3ivEXT void __stdcall GLee_Lazy_glProgramUniform3ivEXT(GLuint program, GLint location, GLsizei count, const GLint * value) {if (GLeeInit()) glProgramUniform3ivEXT(program, location, count, value);} GLEEPFNGLPROGRAMUNIFORM3IVEXTPROC GLeeFuncPtr_glProgramUniform3ivEXT=GLee_Lazy_glProgramUniform3ivEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniform4ivEXT #define GLEE_C_DEFINED_glProgramUniform4ivEXT void __stdcall GLee_Lazy_glProgramUniform4ivEXT(GLuint program, GLint location, GLsizei count, const GLint * value) {if (GLeeInit()) glProgramUniform4ivEXT(program, location, count, value);} GLEEPFNGLPROGRAMUNIFORM4IVEXTPROC GLeeFuncPtr_glProgramUniform4ivEXT=GLee_Lazy_glProgramUniform4ivEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniformMatrix2fvEXT #define GLEE_C_DEFINED_glProgramUniformMatrix2fvEXT void __stdcall GLee_Lazy_glProgramUniformMatrix2fvEXT(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {if (GLeeInit()) glProgramUniformMatrix2fvEXT(program, location, count, transpose, value);} GLEEPFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC GLeeFuncPtr_glProgramUniformMatrix2fvEXT=GLee_Lazy_glProgramUniformMatrix2fvEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniformMatrix3fvEXT #define GLEE_C_DEFINED_glProgramUniformMatrix3fvEXT void __stdcall GLee_Lazy_glProgramUniformMatrix3fvEXT(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {if (GLeeInit()) glProgramUniformMatrix3fvEXT(program, location, count, transpose, value);} GLEEPFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC GLeeFuncPtr_glProgramUniformMatrix3fvEXT=GLee_Lazy_glProgramUniformMatrix3fvEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniformMatrix4fvEXT #define GLEE_C_DEFINED_glProgramUniformMatrix4fvEXT void __stdcall GLee_Lazy_glProgramUniformMatrix4fvEXT(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {if (GLeeInit()) glProgramUniformMatrix4fvEXT(program, location, count, transpose, value);} GLEEPFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC GLeeFuncPtr_glProgramUniformMatrix4fvEXT=GLee_Lazy_glProgramUniformMatrix4fvEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniformMatrix2x3fvEXT #define GLEE_C_DEFINED_glProgramUniformMatrix2x3fvEXT void __stdcall GLee_Lazy_glProgramUniformMatrix2x3fvEXT(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {if (GLeeInit()) glProgramUniformMatrix2x3fvEXT(program, location, count, transpose, value);} GLEEPFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC GLeeFuncPtr_glProgramUniformMatrix2x3fvEXT=GLee_Lazy_glProgramUniformMatrix2x3fvEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniformMatrix3x2fvEXT #define GLEE_C_DEFINED_glProgramUniformMatrix3x2fvEXT void __stdcall GLee_Lazy_glProgramUniformMatrix3x2fvEXT(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {if (GLeeInit()) glProgramUniformMatrix3x2fvEXT(program, location, count, transpose, value);} GLEEPFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC GLeeFuncPtr_glProgramUniformMatrix3x2fvEXT=GLee_Lazy_glProgramUniformMatrix3x2fvEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniformMatrix2x4fvEXT #define GLEE_C_DEFINED_glProgramUniformMatrix2x4fvEXT void __stdcall GLee_Lazy_glProgramUniformMatrix2x4fvEXT(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {if (GLeeInit()) glProgramUniformMatrix2x4fvEXT(program, location, count, transpose, value);} GLEEPFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC GLeeFuncPtr_glProgramUniformMatrix2x4fvEXT=GLee_Lazy_glProgramUniformMatrix2x4fvEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniformMatrix4x2fvEXT #define GLEE_C_DEFINED_glProgramUniformMatrix4x2fvEXT void __stdcall GLee_Lazy_glProgramUniformMatrix4x2fvEXT(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {if (GLeeInit()) glProgramUniformMatrix4x2fvEXT(program, location, count, transpose, value);} GLEEPFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC GLeeFuncPtr_glProgramUniformMatrix4x2fvEXT=GLee_Lazy_glProgramUniformMatrix4x2fvEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniformMatrix3x4fvEXT #define GLEE_C_DEFINED_glProgramUniformMatrix3x4fvEXT void __stdcall GLee_Lazy_glProgramUniformMatrix3x4fvEXT(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {if (GLeeInit()) glProgramUniformMatrix3x4fvEXT(program, location, count, transpose, value);} GLEEPFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC GLeeFuncPtr_glProgramUniformMatrix3x4fvEXT=GLee_Lazy_glProgramUniformMatrix3x4fvEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniformMatrix4x3fvEXT #define GLEE_C_DEFINED_glProgramUniformMatrix4x3fvEXT void __stdcall GLee_Lazy_glProgramUniformMatrix4x3fvEXT(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value) {if (GLeeInit()) glProgramUniformMatrix4x3fvEXT(program, location, count, transpose, value);} GLEEPFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC GLeeFuncPtr_glProgramUniformMatrix4x3fvEXT=GLee_Lazy_glProgramUniformMatrix4x3fvEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniform1uiEXT #define GLEE_C_DEFINED_glProgramUniform1uiEXT void __stdcall GLee_Lazy_glProgramUniform1uiEXT(GLuint program, GLint location, GLuint v0) {if (GLeeInit()) glProgramUniform1uiEXT(program, location, v0);} GLEEPFNGLPROGRAMUNIFORM1UIEXTPROC GLeeFuncPtr_glProgramUniform1uiEXT=GLee_Lazy_glProgramUniform1uiEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniform2uiEXT #define GLEE_C_DEFINED_glProgramUniform2uiEXT void __stdcall GLee_Lazy_glProgramUniform2uiEXT(GLuint program, GLint location, GLuint v0, GLuint v1) {if (GLeeInit()) glProgramUniform2uiEXT(program, location, v0, v1);} GLEEPFNGLPROGRAMUNIFORM2UIEXTPROC GLeeFuncPtr_glProgramUniform2uiEXT=GLee_Lazy_glProgramUniform2uiEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniform3uiEXT #define GLEE_C_DEFINED_glProgramUniform3uiEXT void __stdcall GLee_Lazy_glProgramUniform3uiEXT(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2) {if (GLeeInit()) glProgramUniform3uiEXT(program, location, v0, v1, v2);} GLEEPFNGLPROGRAMUNIFORM3UIEXTPROC GLeeFuncPtr_glProgramUniform3uiEXT=GLee_Lazy_glProgramUniform3uiEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniform4uiEXT #define GLEE_C_DEFINED_glProgramUniform4uiEXT void __stdcall GLee_Lazy_glProgramUniform4uiEXT(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3) {if (GLeeInit()) glProgramUniform4uiEXT(program, location, v0, v1, v2, v3);} GLEEPFNGLPROGRAMUNIFORM4UIEXTPROC GLeeFuncPtr_glProgramUniform4uiEXT=GLee_Lazy_glProgramUniform4uiEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniform1uivEXT #define GLEE_C_DEFINED_glProgramUniform1uivEXT void __stdcall GLee_Lazy_glProgramUniform1uivEXT(GLuint program, GLint location, GLsizei count, const GLuint * value) {if (GLeeInit()) glProgramUniform1uivEXT(program, location, count, value);} GLEEPFNGLPROGRAMUNIFORM1UIVEXTPROC GLeeFuncPtr_glProgramUniform1uivEXT=GLee_Lazy_glProgramUniform1uivEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniform2uivEXT #define GLEE_C_DEFINED_glProgramUniform2uivEXT void __stdcall GLee_Lazy_glProgramUniform2uivEXT(GLuint program, GLint location, GLsizei count, const GLuint * value) {if (GLeeInit()) glProgramUniform2uivEXT(program, location, count, value);} GLEEPFNGLPROGRAMUNIFORM2UIVEXTPROC GLeeFuncPtr_glProgramUniform2uivEXT=GLee_Lazy_glProgramUniform2uivEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniform3uivEXT #define GLEE_C_DEFINED_glProgramUniform3uivEXT void __stdcall GLee_Lazy_glProgramUniform3uivEXT(GLuint program, GLint location, GLsizei count, const GLuint * value) {if (GLeeInit()) glProgramUniform3uivEXT(program, location, count, value);} GLEEPFNGLPROGRAMUNIFORM3UIVEXTPROC GLeeFuncPtr_glProgramUniform3uivEXT=GLee_Lazy_glProgramUniform3uivEXT; #endif #ifndef GLEE_C_DEFINED_glProgramUniform4uivEXT #define GLEE_C_DEFINED_glProgramUniform4uivEXT void __stdcall GLee_Lazy_glProgramUniform4uivEXT(GLuint program, GLint location, GLsizei count, const GLuint * value) {if (GLeeInit()) glProgramUniform4uivEXT(program, location, count, value);} GLEEPFNGLPROGRAMUNIFORM4UIVEXTPROC GLeeFuncPtr_glProgramUniform4uivEXT=GLee_Lazy_glProgramUniform4uivEXT; #endif #ifndef GLEE_C_DEFINED_glNamedBufferDataEXT #define GLEE_C_DEFINED_glNamedBufferDataEXT void __stdcall GLee_Lazy_glNamedBufferDataEXT(GLuint buffer, GLsizeiptr size, const GLvoid * data, GLenum usage) {if (GLeeInit()) glNamedBufferDataEXT(buffer, size, data, usage);} GLEEPFNGLNAMEDBUFFERDATAEXTPROC GLeeFuncPtr_glNamedBufferDataEXT=GLee_Lazy_glNamedBufferDataEXT; #endif #ifndef GLEE_C_DEFINED_glNamedBufferSubDataEXT #define GLEE_C_DEFINED_glNamedBufferSubDataEXT void __stdcall GLee_Lazy_glNamedBufferSubDataEXT(GLuint buffer, GLintptr offset, GLsizeiptr size, const GLvoid * data) {if (GLeeInit()) glNamedBufferSubDataEXT(buffer, offset, size, data);} GLEEPFNGLNAMEDBUFFERSUBDATAEXTPROC GLeeFuncPtr_glNamedBufferSubDataEXT=GLee_Lazy_glNamedBufferSubDataEXT; #endif #ifndef GLEE_C_DEFINED_glMapNamedBufferEXT #define GLEE_C_DEFINED_glMapNamedBufferEXT GLvoid* __stdcall GLee_Lazy_glMapNamedBufferEXT(GLuint buffer, GLenum access) {if (GLeeInit()) return glMapNamedBufferEXT(buffer, access); return (GLvoid*)0;} GLEEPFNGLMAPNAMEDBUFFEREXTPROC GLeeFuncPtr_glMapNamedBufferEXT=GLee_Lazy_glMapNamedBufferEXT; #endif #ifndef GLEE_C_DEFINED_glUnmapNamedBufferEXT #define GLEE_C_DEFINED_glUnmapNamedBufferEXT GLboolean __stdcall GLee_Lazy_glUnmapNamedBufferEXT(GLuint buffer) {if (GLeeInit()) return glUnmapNamedBufferEXT(buffer); return (GLboolean)0;} GLEEPFNGLUNMAPNAMEDBUFFEREXTPROC GLeeFuncPtr_glUnmapNamedBufferEXT=GLee_Lazy_glUnmapNamedBufferEXT; #endif #ifndef GLEE_C_DEFINED_glGetNamedBufferParameterivEXT #define GLEE_C_DEFINED_glGetNamedBufferParameterivEXT void __stdcall GLee_Lazy_glGetNamedBufferParameterivEXT(GLuint buffer, GLenum pname, GLint * params) {if (GLeeInit()) glGetNamedBufferParameterivEXT(buffer, pname, params);} GLEEPFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC GLeeFuncPtr_glGetNamedBufferParameterivEXT=GLee_Lazy_glGetNamedBufferParameterivEXT; #endif #ifndef GLEE_C_DEFINED_glGetNamedBufferPointervEXT #define GLEE_C_DEFINED_glGetNamedBufferPointervEXT void __stdcall GLee_Lazy_glGetNamedBufferPointervEXT(GLuint buffer, GLenum pname, GLvoid* * params) {if (GLeeInit()) glGetNamedBufferPointervEXT(buffer, pname, params);} GLEEPFNGLGETNAMEDBUFFERPOINTERVEXTPROC GLeeFuncPtr_glGetNamedBufferPointervEXT=GLee_Lazy_glGetNamedBufferPointervEXT; #endif #ifndef GLEE_C_DEFINED_glGetNamedBufferSubDataEXT #define GLEE_C_DEFINED_glGetNamedBufferSubDataEXT void __stdcall GLee_Lazy_glGetNamedBufferSubDataEXT(GLuint buffer, GLintptr offset, GLsizeiptr size, GLvoid * data) {if (GLeeInit()) glGetNamedBufferSubDataEXT(buffer, offset, size, data);} GLEEPFNGLGETNAMEDBUFFERSUBDATAEXTPROC GLeeFuncPtr_glGetNamedBufferSubDataEXT=GLee_Lazy_glGetNamedBufferSubDataEXT; #endif #ifndef GLEE_C_DEFINED_glTextureBufferEXT #define GLEE_C_DEFINED_glTextureBufferEXT void __stdcall GLee_Lazy_glTextureBufferEXT(GLuint texture, GLenum target, GLenum internalformat, GLuint buffer) {if (GLeeInit()) glTextureBufferEXT(texture, target, internalformat, buffer);} GLEEPFNGLTEXTUREBUFFEREXTPROC GLeeFuncPtr_glTextureBufferEXT=GLee_Lazy_glTextureBufferEXT; #endif #ifndef GLEE_C_DEFINED_glMultiTexBufferEXT #define GLEE_C_DEFINED_glMultiTexBufferEXT void __stdcall GLee_Lazy_glMultiTexBufferEXT(GLenum texunit, GLenum target, GLenum internalformat, GLuint buffer) {if (GLeeInit()) glMultiTexBufferEXT(texunit, target, internalformat, buffer);} GLEEPFNGLMULTITEXBUFFEREXTPROC GLeeFuncPtr_glMultiTexBufferEXT=GLee_Lazy_glMultiTexBufferEXT; #endif #ifndef GLEE_C_DEFINED_glNamedRenderbufferStorageEXT #define GLEE_C_DEFINED_glNamedRenderbufferStorageEXT void __stdcall GLee_Lazy_glNamedRenderbufferStorageEXT(GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height) {if (GLeeInit()) glNamedRenderbufferStorageEXT(renderbuffer, internalformat, width, height);} GLEEPFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC GLeeFuncPtr_glNamedRenderbufferStorageEXT=GLee_Lazy_glNamedRenderbufferStorageEXT; #endif #ifndef GLEE_C_DEFINED_glGetNamedRenderbufferParameterivEXT #define GLEE_C_DEFINED_glGetNamedRenderbufferParameterivEXT void __stdcall GLee_Lazy_glGetNamedRenderbufferParameterivEXT(GLuint renderbuffer, GLenum pname, GLint * params) {if (GLeeInit()) glGetNamedRenderbufferParameterivEXT(renderbuffer, pname, params);} GLEEPFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC GLeeFuncPtr_glGetNamedRenderbufferParameterivEXT=GLee_Lazy_glGetNamedRenderbufferParameterivEXT; #endif #ifndef GLEE_C_DEFINED_glCheckNamedFramebufferStatusEXT #define GLEE_C_DEFINED_glCheckNamedFramebufferStatusEXT GLenum __stdcall GLee_Lazy_glCheckNamedFramebufferStatusEXT(GLuint framebuffer, GLenum target) {if (GLeeInit()) return glCheckNamedFramebufferStatusEXT(framebuffer, target); return (GLenum)0;} GLEEPFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC GLeeFuncPtr_glCheckNamedFramebufferStatusEXT=GLee_Lazy_glCheckNamedFramebufferStatusEXT; #endif #ifndef GLEE_C_DEFINED_glNamedFramebufferTexture1DEXT #define GLEE_C_DEFINED_glNamedFramebufferTexture1DEXT void __stdcall GLee_Lazy_glNamedFramebufferTexture1DEXT(GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level) {if (GLeeInit()) glNamedFramebufferTexture1DEXT(framebuffer, attachment, textarget, texture, level);} GLEEPFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC GLeeFuncPtr_glNamedFramebufferTexture1DEXT=GLee_Lazy_glNamedFramebufferTexture1DEXT; #endif #ifndef GLEE_C_DEFINED_glNamedFramebufferTexture2DEXT #define GLEE_C_DEFINED_glNamedFramebufferTexture2DEXT void __stdcall GLee_Lazy_glNamedFramebufferTexture2DEXT(GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level) {if (GLeeInit()) glNamedFramebufferTexture2DEXT(framebuffer, attachment, textarget, texture, level);} GLEEPFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC GLeeFuncPtr_glNamedFramebufferTexture2DEXT=GLee_Lazy_glNamedFramebufferTexture2DEXT; #endif #ifndef GLEE_C_DEFINED_glNamedFramebufferTexture3DEXT #define GLEE_C_DEFINED_glNamedFramebufferTexture3DEXT void __stdcall GLee_Lazy_glNamedFramebufferTexture3DEXT(GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset) {if (GLeeInit()) glNamedFramebufferTexture3DEXT(framebuffer, attachment, textarget, texture, level, zoffset);} GLEEPFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC GLeeFuncPtr_glNamedFramebufferTexture3DEXT=GLee_Lazy_glNamedFramebufferTexture3DEXT; #endif #ifndef GLEE_C_DEFINED_glNamedFramebufferRenderbufferEXT #define GLEE_C_DEFINED_glNamedFramebufferRenderbufferEXT void __stdcall GLee_Lazy_glNamedFramebufferRenderbufferEXT(GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) {if (GLeeInit()) glNamedFramebufferRenderbufferEXT(framebuffer, attachment, renderbuffertarget, renderbuffer);} GLEEPFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC GLeeFuncPtr_glNamedFramebufferRenderbufferEXT=GLee_Lazy_glNamedFramebufferRenderbufferEXT; #endif #ifndef GLEE_C_DEFINED_glGetNamedFramebufferAttachmentParameterivEXT #define GLEE_C_DEFINED_glGetNamedFramebufferAttachmentParameterivEXT void __stdcall GLee_Lazy_glGetNamedFramebufferAttachmentParameterivEXT(GLuint framebuffer, GLenum attachment, GLenum pname, GLint * params) {if (GLeeInit()) glGetNamedFramebufferAttachmentParameterivEXT(framebuffer, attachment, pname, params);} GLEEPFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC GLeeFuncPtr_glGetNamedFramebufferAttachmentParameterivEXT=GLee_Lazy_glGetNamedFramebufferAttachmentParameterivEXT; #endif #ifndef GLEE_C_DEFINED_glGenerateTextureMipmapEXT #define GLEE_C_DEFINED_glGenerateTextureMipmapEXT void __stdcall GLee_Lazy_glGenerateTextureMipmapEXT(GLuint texture, GLenum target) {if (GLeeInit()) glGenerateTextureMipmapEXT(texture, target);} GLEEPFNGLGENERATETEXTUREMIPMAPEXTPROC GLeeFuncPtr_glGenerateTextureMipmapEXT=GLee_Lazy_glGenerateTextureMipmapEXT; #endif #ifndef GLEE_C_DEFINED_glGenerateMultiTexMipmapEXT #define GLEE_C_DEFINED_glGenerateMultiTexMipmapEXT void __stdcall GLee_Lazy_glGenerateMultiTexMipmapEXT(GLenum texunit, GLenum target) {if (GLeeInit()) glGenerateMultiTexMipmapEXT(texunit, target);} GLEEPFNGLGENERATEMULTITEXMIPMAPEXTPROC GLeeFuncPtr_glGenerateMultiTexMipmapEXT=GLee_Lazy_glGenerateMultiTexMipmapEXT; #endif #ifndef GLEE_C_DEFINED_glFramebufferDrawBufferEXT #define GLEE_C_DEFINED_glFramebufferDrawBufferEXT void __stdcall GLee_Lazy_glFramebufferDrawBufferEXT(GLuint framebuffer, GLenum mode) {if (GLeeInit()) glFramebufferDrawBufferEXT(framebuffer, mode);} GLEEPFNGLFRAMEBUFFERDRAWBUFFEREXTPROC GLeeFuncPtr_glFramebufferDrawBufferEXT=GLee_Lazy_glFramebufferDrawBufferEXT; #endif #ifndef GLEE_C_DEFINED_glFramebufferDrawBuffersEXT #define GLEE_C_DEFINED_glFramebufferDrawBuffersEXT void __stdcall GLee_Lazy_glFramebufferDrawBuffersEXT(GLuint framebuffer, GLsizei n, const GLenum * bufs) {if (GLeeInit()) glFramebufferDrawBuffersEXT(framebuffer, n, bufs);} GLEEPFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC GLeeFuncPtr_glFramebufferDrawBuffersEXT=GLee_Lazy_glFramebufferDrawBuffersEXT; #endif #ifndef GLEE_C_DEFINED_glFramebufferReadBufferEXT #define GLEE_C_DEFINED_glFramebufferReadBufferEXT void __stdcall GLee_Lazy_glFramebufferReadBufferEXT(GLuint framebuffer, GLenum mode) {if (GLeeInit()) glFramebufferReadBufferEXT(framebuffer, mode);} GLEEPFNGLFRAMEBUFFERREADBUFFEREXTPROC GLeeFuncPtr_glFramebufferReadBufferEXT=GLee_Lazy_glFramebufferReadBufferEXT; #endif #ifndef GLEE_C_DEFINED_glGetFramebufferParameterivEXT #define GLEE_C_DEFINED_glGetFramebufferParameterivEXT void __stdcall GLee_Lazy_glGetFramebufferParameterivEXT(GLuint framebuffer, GLenum pname, GLint * params) {if (GLeeInit()) glGetFramebufferParameterivEXT(framebuffer, pname, params);} GLEEPFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC GLeeFuncPtr_glGetFramebufferParameterivEXT=GLee_Lazy_glGetFramebufferParameterivEXT; #endif #ifndef GLEE_C_DEFINED_glNamedRenderbufferStorageMultisampleEXT #define GLEE_C_DEFINED_glNamedRenderbufferStorageMultisampleEXT void __stdcall GLee_Lazy_glNamedRenderbufferStorageMultisampleEXT(GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) {if (GLeeInit()) glNamedRenderbufferStorageMultisampleEXT(renderbuffer, samples, internalformat, width, height);} GLEEPFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC GLeeFuncPtr_glNamedRenderbufferStorageMultisampleEXT=GLee_Lazy_glNamedRenderbufferStorageMultisampleEXT; #endif #ifndef GLEE_C_DEFINED_glNamedRenderbufferStorageMultisampleCoverageEXT #define GLEE_C_DEFINED_glNamedRenderbufferStorageMultisampleCoverageEXT void __stdcall GLee_Lazy_glNamedRenderbufferStorageMultisampleCoverageEXT(GLuint renderbuffer, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height) {if (GLeeInit()) glNamedRenderbufferStorageMultisampleCoverageEXT(renderbuffer, coverageSamples, colorSamples, internalformat, width, height);} GLEEPFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC GLeeFuncPtr_glNamedRenderbufferStorageMultisampleCoverageEXT=GLee_Lazy_glNamedRenderbufferStorageMultisampleCoverageEXT; #endif #ifndef GLEE_C_DEFINED_glNamedFramebufferTextureEXT #define GLEE_C_DEFINED_glNamedFramebufferTextureEXT void __stdcall GLee_Lazy_glNamedFramebufferTextureEXT(GLuint framebuffer, GLenum attachment, GLuint texture, GLint level) {if (GLeeInit()) glNamedFramebufferTextureEXT(framebuffer, attachment, texture, level);} GLEEPFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC GLeeFuncPtr_glNamedFramebufferTextureEXT=GLee_Lazy_glNamedFramebufferTextureEXT; #endif #ifndef GLEE_C_DEFINED_glNamedFramebufferTextureLayerEXT #define GLEE_C_DEFINED_glNamedFramebufferTextureLayerEXT void __stdcall GLee_Lazy_glNamedFramebufferTextureLayerEXT(GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer) {if (GLeeInit()) glNamedFramebufferTextureLayerEXT(framebuffer, attachment, texture, level, layer);} GLEEPFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC GLeeFuncPtr_glNamedFramebufferTextureLayerEXT=GLee_Lazy_glNamedFramebufferTextureLayerEXT; #endif #ifndef GLEE_C_DEFINED_glNamedFramebufferTextureFaceEXT #define GLEE_C_DEFINED_glNamedFramebufferTextureFaceEXT void __stdcall GLee_Lazy_glNamedFramebufferTextureFaceEXT(GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLenum face) {if (GLeeInit()) glNamedFramebufferTextureFaceEXT(framebuffer, attachment, texture, level, face);} GLEEPFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC GLeeFuncPtr_glNamedFramebufferTextureFaceEXT=GLee_Lazy_glNamedFramebufferTextureFaceEXT; #endif #ifndef GLEE_C_DEFINED_glTextureRenderbufferEXT #define GLEE_C_DEFINED_glTextureRenderbufferEXT void __stdcall GLee_Lazy_glTextureRenderbufferEXT(GLuint texture, GLenum target, GLuint renderbuffer) {if (GLeeInit()) glTextureRenderbufferEXT(texture, target, renderbuffer);} GLEEPFNGLTEXTURERENDERBUFFEREXTPROC GLeeFuncPtr_glTextureRenderbufferEXT=GLee_Lazy_glTextureRenderbufferEXT; #endif #ifndef GLEE_C_DEFINED_glMultiTexRenderbufferEXT #define GLEE_C_DEFINED_glMultiTexRenderbufferEXT void __stdcall GLee_Lazy_glMultiTexRenderbufferEXT(GLenum texunit, GLenum target, GLuint renderbuffer) {if (GLeeInit()) glMultiTexRenderbufferEXT(texunit, target, renderbuffer);} GLEEPFNGLMULTITEXRENDERBUFFEREXTPROC GLeeFuncPtr_glMultiTexRenderbufferEXT=GLee_Lazy_glMultiTexRenderbufferEXT; #endif #endif /* GL_EXT_vertex_array_bgra */ #ifdef __GLEE_GL_EXT_vertex_array_bgra #endif /* GL_EXT_texture_swizzle */ #ifdef __GLEE_GL_EXT_texture_swizzle #endif /* GL_NV_explicit_multisample */ #ifdef __GLEE_GL_NV_explicit_multisample #ifndef GLEE_C_DEFINED_glGetMultisamplefvNV #define GLEE_C_DEFINED_glGetMultisamplefvNV void __stdcall GLee_Lazy_glGetMultisamplefvNV(GLenum pname, GLuint index, GLfloat * val) {if (GLeeInit()) glGetMultisamplefvNV(pname, index, val);} GLEEPFNGLGETMULTISAMPLEFVNVPROC GLeeFuncPtr_glGetMultisamplefvNV=GLee_Lazy_glGetMultisamplefvNV; #endif #ifndef GLEE_C_DEFINED_glSampleMaskIndexedNV #define GLEE_C_DEFINED_glSampleMaskIndexedNV void __stdcall GLee_Lazy_glSampleMaskIndexedNV(GLuint index, GLbitfield mask) {if (GLeeInit()) glSampleMaskIndexedNV(index, mask);} GLEEPFNGLSAMPLEMASKINDEXEDNVPROC GLeeFuncPtr_glSampleMaskIndexedNV=GLee_Lazy_glSampleMaskIndexedNV; #endif #ifndef GLEE_C_DEFINED_glTexRenderbufferNV #define GLEE_C_DEFINED_glTexRenderbufferNV void __stdcall GLee_Lazy_glTexRenderbufferNV(GLenum target, GLuint renderbuffer) {if (GLeeInit()) glTexRenderbufferNV(target, renderbuffer);} GLEEPFNGLTEXRENDERBUFFERNVPROC GLeeFuncPtr_glTexRenderbufferNV=GLee_Lazy_glTexRenderbufferNV; #endif #endif /* GL_NV_transform_feedback2 */ #ifdef __GLEE_GL_NV_transform_feedback2 #ifndef GLEE_C_DEFINED_glBindTransformFeedbackNV #define GLEE_C_DEFINED_glBindTransformFeedbackNV void __stdcall GLee_Lazy_glBindTransformFeedbackNV(GLenum target, GLuint id) {if (GLeeInit()) glBindTransformFeedbackNV(target, id);} GLEEPFNGLBINDTRANSFORMFEEDBACKNVPROC GLeeFuncPtr_glBindTransformFeedbackNV=GLee_Lazy_glBindTransformFeedbackNV; #endif #ifndef GLEE_C_DEFINED_glDeleteTransformFeedbacksNV #define GLEE_C_DEFINED_glDeleteTransformFeedbacksNV void __stdcall GLee_Lazy_glDeleteTransformFeedbacksNV(GLsizei n, const GLuint * ids) {if (GLeeInit()) glDeleteTransformFeedbacksNV(n, ids);} GLEEPFNGLDELETETRANSFORMFEEDBACKSNVPROC GLeeFuncPtr_glDeleteTransformFeedbacksNV=GLee_Lazy_glDeleteTransformFeedbacksNV; #endif #ifndef GLEE_C_DEFINED_glGenTransformFeedbacksNV #define GLEE_C_DEFINED_glGenTransformFeedbacksNV void __stdcall GLee_Lazy_glGenTransformFeedbacksNV(GLsizei n, GLuint * ids) {if (GLeeInit()) glGenTransformFeedbacksNV(n, ids);} GLEEPFNGLGENTRANSFORMFEEDBACKSNVPROC GLeeFuncPtr_glGenTransformFeedbacksNV=GLee_Lazy_glGenTransformFeedbacksNV; #endif #ifndef GLEE_C_DEFINED_glIsTransformFeedbackNV #define GLEE_C_DEFINED_glIsTransformFeedbackNV GLboolean __stdcall GLee_Lazy_glIsTransformFeedbackNV(GLuint id) {if (GLeeInit()) return glIsTransformFeedbackNV(id); return (GLboolean)0;} GLEEPFNGLISTRANSFORMFEEDBACKNVPROC GLeeFuncPtr_glIsTransformFeedbackNV=GLee_Lazy_glIsTransformFeedbackNV; #endif #ifndef GLEE_C_DEFINED_glPauseTransformFeedbackNV #define GLEE_C_DEFINED_glPauseTransformFeedbackNV void __stdcall GLee_Lazy_glPauseTransformFeedbackNV(void) {if (GLeeInit()) glPauseTransformFeedbackNV();} GLEEPFNGLPAUSETRANSFORMFEEDBACKNVPROC GLeeFuncPtr_glPauseTransformFeedbackNV=GLee_Lazy_glPauseTransformFeedbackNV; #endif #ifndef GLEE_C_DEFINED_glResumeTransformFeedbackNV #define GLEE_C_DEFINED_glResumeTransformFeedbackNV void __stdcall GLee_Lazy_glResumeTransformFeedbackNV(void) {if (GLeeInit()) glResumeTransformFeedbackNV();} GLEEPFNGLRESUMETRANSFORMFEEDBACKNVPROC GLeeFuncPtr_glResumeTransformFeedbackNV=GLee_Lazy_glResumeTransformFeedbackNV; #endif #ifndef GLEE_C_DEFINED_glDrawTransformFeedbackNV #define GLEE_C_DEFINED_glDrawTransformFeedbackNV void __stdcall GLee_Lazy_glDrawTransformFeedbackNV(GLenum mode, GLuint id) {if (GLeeInit()) glDrawTransformFeedbackNV(mode, id);} GLEEPFNGLDRAWTRANSFORMFEEDBACKNVPROC GLeeFuncPtr_glDrawTransformFeedbackNV=GLee_Lazy_glDrawTransformFeedbackNV; #endif #endif /* GL_SGIX_texture_select */ #ifdef __GLEE_GL_SGIX_texture_select #endif /* GL_INGR_blend_func_separate */ #ifdef __GLEE_GL_INGR_blend_func_separate #ifndef GLEE_C_DEFINED_glBlendFuncSeparateINGR #define GLEE_C_DEFINED_glBlendFuncSeparateINGR void __stdcall GLee_Lazy_glBlendFuncSeparateINGR(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha) {if (GLeeInit()) glBlendFuncSeparateINGR(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha);} GLEEPFNGLBLENDFUNCSEPARATEINGRPROC GLeeFuncPtr_glBlendFuncSeparateINGR=GLee_Lazy_glBlendFuncSeparateINGR; #endif #endif /* GL_SGIX_depth_pass_instrument */ #ifdef __GLEE_GL_SGIX_depth_pass_instrument #endif /* GL_SGIX_igloo_interface */ #ifdef __GLEE_GL_SGIX_igloo_interface #ifndef GLEE_C_DEFINED_glIglooInterfaceSGIX #define GLEE_C_DEFINED_glIglooInterfaceSGIX void __stdcall GLee_Lazy_glIglooInterfaceSGIX(GLenum pname, const GLvoid * params) {if (GLeeInit()) glIglooInterfaceSGIX(pname, params);} GLEEPFNGLIGLOOINTERFACESGIXPROC GLeeFuncPtr_glIglooInterfaceSGIX=GLee_Lazy_glIglooInterfaceSGIX; #endif #endif /* GL_EXT_fragment_lighting */ #ifdef __GLEE_GL_EXT_fragment_lighting #ifndef GLEE_C_DEFINED_glFragmentLightModeliEXT #define GLEE_C_DEFINED_glFragmentLightModeliEXT GLvoid __stdcall GLee_Lazy_glFragmentLightModeliEXT(GLenum pname, GLint param) {if (GLeeInit()) glFragmentLightModeliEXT(pname, param);} GLEEPFNGLFRAGMENTLIGHTMODELIEXTPROC GLeeFuncPtr_glFragmentLightModeliEXT=GLee_Lazy_glFragmentLightModeliEXT; #endif #ifndef GLEE_C_DEFINED_glFragmentLightModelfEXT #define GLEE_C_DEFINED_glFragmentLightModelfEXT GLvoid __stdcall GLee_Lazy_glFragmentLightModelfEXT(GLenum pname, GLfloat param) {if (GLeeInit()) glFragmentLightModelfEXT(pname, param);} GLEEPFNGLFRAGMENTLIGHTMODELFEXTPROC GLeeFuncPtr_glFragmentLightModelfEXT=GLee_Lazy_glFragmentLightModelfEXT; #endif #ifndef GLEE_C_DEFINED_glFragmentLightModelivEXT #define GLEE_C_DEFINED_glFragmentLightModelivEXT GLvoid __stdcall GLee_Lazy_glFragmentLightModelivEXT(GLenum pname, GLint * params) {if (GLeeInit()) glFragmentLightModelivEXT(pname, params);} GLEEPFNGLFRAGMENTLIGHTMODELIVEXTPROC GLeeFuncPtr_glFragmentLightModelivEXT=GLee_Lazy_glFragmentLightModelivEXT; #endif #ifndef GLEE_C_DEFINED_glFragmentLightModelfvEXT #define GLEE_C_DEFINED_glFragmentLightModelfvEXT GLvoid __stdcall GLee_Lazy_glFragmentLightModelfvEXT(GLenum pname, GLfloat * params) {if (GLeeInit()) glFragmentLightModelfvEXT(pname, params);} GLEEPFNGLFRAGMENTLIGHTMODELFVEXTPROC GLeeFuncPtr_glFragmentLightModelfvEXT=GLee_Lazy_glFragmentLightModelfvEXT; #endif #ifndef GLEE_C_DEFINED_glFragmentLightiEXT #define GLEE_C_DEFINED_glFragmentLightiEXT GLvoid __stdcall GLee_Lazy_glFragmentLightiEXT(GLenum light, GLenum pname, GLint param) {if (GLeeInit()) glFragmentLightiEXT(light, pname, param);} GLEEPFNGLFRAGMENTLIGHTIEXTPROC GLeeFuncPtr_glFragmentLightiEXT=GLee_Lazy_glFragmentLightiEXT; #endif #ifndef GLEE_C_DEFINED_glFragmentLightfEXT #define GLEE_C_DEFINED_glFragmentLightfEXT GLvoid __stdcall GLee_Lazy_glFragmentLightfEXT(GLenum light, GLenum pname, GLfloat param) {if (GLeeInit()) glFragmentLightfEXT(light, pname, param);} GLEEPFNGLFRAGMENTLIGHTFEXTPROC GLeeFuncPtr_glFragmentLightfEXT=GLee_Lazy_glFragmentLightfEXT; #endif #ifndef GLEE_C_DEFINED_glFragmentLightivEXT #define GLEE_C_DEFINED_glFragmentLightivEXT GLvoid __stdcall GLee_Lazy_glFragmentLightivEXT(GLenum light, GLenum pname, GLint * params) {if (GLeeInit()) glFragmentLightivEXT(light, pname, params);} GLEEPFNGLFRAGMENTLIGHTIVEXTPROC GLeeFuncPtr_glFragmentLightivEXT=GLee_Lazy_glFragmentLightivEXT; #endif #ifndef GLEE_C_DEFINED_glFragmentLightfvEXT #define GLEE_C_DEFINED_glFragmentLightfvEXT GLvoid __stdcall GLee_Lazy_glFragmentLightfvEXT(GLenum light, GLenum pname, GLfloat * params) {if (GLeeInit()) glFragmentLightfvEXT(light, pname, params);} GLEEPFNGLFRAGMENTLIGHTFVEXTPROC GLeeFuncPtr_glFragmentLightfvEXT=GLee_Lazy_glFragmentLightfvEXT; #endif #ifndef GLEE_C_DEFINED_glGetFragmentLightivEXT #define GLEE_C_DEFINED_glGetFragmentLightivEXT GLvoid __stdcall GLee_Lazy_glGetFragmentLightivEXT(GLenum light, GLenum pname, GLint * params) {if (GLeeInit()) glGetFragmentLightivEXT(light, pname, params);} GLEEPFNGLGETFRAGMENTLIGHTIVEXTPROC GLeeFuncPtr_glGetFragmentLightivEXT=GLee_Lazy_glGetFragmentLightivEXT; #endif #ifndef GLEE_C_DEFINED_glGetFragmentLightfvEXT #define GLEE_C_DEFINED_glGetFragmentLightfvEXT GLvoid __stdcall GLee_Lazy_glGetFragmentLightfvEXT(GLenum light, GLenum pname, GLfloat * params) {if (GLeeInit()) glGetFragmentLightfvEXT(light, pname, params);} GLEEPFNGLGETFRAGMENTLIGHTFVEXTPROC GLeeFuncPtr_glGetFragmentLightfvEXT=GLee_Lazy_glGetFragmentLightfvEXT; #endif #ifndef GLEE_C_DEFINED_glFragmentMaterialfEXT #define GLEE_C_DEFINED_glFragmentMaterialfEXT GLvoid __stdcall GLee_Lazy_glFragmentMaterialfEXT(GLenum face, GLenum pname, const GLfloat param) {if (GLeeInit()) glFragmentMaterialfEXT(face, pname, param);} GLEEPFNGLFRAGMENTMATERIALFEXTPROC GLeeFuncPtr_glFragmentMaterialfEXT=GLee_Lazy_glFragmentMaterialfEXT; #endif #ifndef GLEE_C_DEFINED_glFragmentMaterialiEXT #define GLEE_C_DEFINED_glFragmentMaterialiEXT GLvoid __stdcall GLee_Lazy_glFragmentMaterialiEXT(GLenum face, GLenum pname, const GLint param) {if (GLeeInit()) glFragmentMaterialiEXT(face, pname, param);} GLEEPFNGLFRAGMENTMATERIALIEXTPROC GLeeFuncPtr_glFragmentMaterialiEXT=GLee_Lazy_glFragmentMaterialiEXT; #endif #ifndef GLEE_C_DEFINED_glFragmentMaterialfvEXT #define GLEE_C_DEFINED_glFragmentMaterialfvEXT GLvoid __stdcall GLee_Lazy_glFragmentMaterialfvEXT(GLenum face, GLenum pname, const GLfloat * params) {if (GLeeInit()) glFragmentMaterialfvEXT(face, pname, params);} GLEEPFNGLFRAGMENTMATERIALFVEXTPROC GLeeFuncPtr_glFragmentMaterialfvEXT=GLee_Lazy_glFragmentMaterialfvEXT; #endif #ifndef GLEE_C_DEFINED_glFragmentMaterialivEXT #define GLEE_C_DEFINED_glFragmentMaterialivEXT GLvoid __stdcall GLee_Lazy_glFragmentMaterialivEXT(GLenum face, GLenum pname, const GLint * params) {if (GLeeInit()) glFragmentMaterialivEXT(face, pname, params);} GLEEPFNGLFRAGMENTMATERIALIVEXTPROC GLeeFuncPtr_glFragmentMaterialivEXT=GLee_Lazy_glFragmentMaterialivEXT; #endif #ifndef GLEE_C_DEFINED_glFragmentColorMaterialEXT #define GLEE_C_DEFINED_glFragmentColorMaterialEXT GLvoid __stdcall GLee_Lazy_glFragmentColorMaterialEXT(GLenum face, GLenum mode) {if (GLeeInit()) glFragmentColorMaterialEXT(face, mode);} GLEEPFNGLFRAGMENTCOLORMATERIALEXTPROC GLeeFuncPtr_glFragmentColorMaterialEXT=GLee_Lazy_glFragmentColorMaterialEXT; #endif #ifndef GLEE_C_DEFINED_glGetFragmentMaterialfvEXT #define GLEE_C_DEFINED_glGetFragmentMaterialfvEXT GLvoid __stdcall GLee_Lazy_glGetFragmentMaterialfvEXT(GLenum face, GLenum pname, const GLfloat * params) {if (GLeeInit()) glGetFragmentMaterialfvEXT(face, pname, params);} GLEEPFNGLGETFRAGMENTMATERIALFVEXTPROC GLeeFuncPtr_glGetFragmentMaterialfvEXT=GLee_Lazy_glGetFragmentMaterialfvEXT; #endif #ifndef GLEE_C_DEFINED_glGetFragmentMaterialivEXT #define GLEE_C_DEFINED_glGetFragmentMaterialivEXT GLvoid __stdcall GLee_Lazy_glGetFragmentMaterialivEXT(GLenum face, GLenum pname, const GLint * params) {if (GLeeInit()) glGetFragmentMaterialivEXT(face, pname, params);} GLEEPFNGLGETFRAGMENTMATERIALIVEXTPROC GLeeFuncPtr_glGetFragmentMaterialivEXT=GLee_Lazy_glGetFragmentMaterialivEXT; #endif #ifndef GLEE_C_DEFINED_glLightEnviEXT #define GLEE_C_DEFINED_glLightEnviEXT GLvoid __stdcall GLee_Lazy_glLightEnviEXT(GLenum pname, GLint param) {if (GLeeInit()) glLightEnviEXT(pname, param);} GLEEPFNGLLIGHTENVIEXTPROC GLeeFuncPtr_glLightEnviEXT=GLee_Lazy_glLightEnviEXT; #endif #endif /* GL_EXT_geometry_shader4 */ #ifdef __GLEE_GL_EXT_geometry_shader4 #ifndef GLEE_C_DEFINED_glProgramParameteriEXT #define GLEE_C_DEFINED_glProgramParameteriEXT GLvoid __stdcall GLee_Lazy_glProgramParameteriEXT(GLuint program, GLenum pname, GLint value) {if (GLeeInit()) glProgramParameteriEXT(program, pname, value);} GLEEPFNGLPROGRAMPARAMETERIEXTPROC GLeeFuncPtr_glProgramParameteriEXT=GLee_Lazy_glProgramParameteriEXT; #endif #ifndef GLEE_C_DEFINED_glFramebufferTextureEXT #define GLEE_C_DEFINED_glFramebufferTextureEXT GLvoid __stdcall GLee_Lazy_glFramebufferTextureEXT(GLenum target, GLenum attachment, GLuint texture, GLint level) {if (GLeeInit()) glFramebufferTextureEXT(target, attachment, texture, level);} GLEEPFNGLFRAMEBUFFERTEXTUREEXTPROC GLeeFuncPtr_glFramebufferTextureEXT=GLee_Lazy_glFramebufferTextureEXT; #endif #ifndef GLEE_C_DEFINED_glFramebufferTextureLayerEXT #define GLEE_C_DEFINED_glFramebufferTextureLayerEXT GLvoid __stdcall GLee_Lazy_glFramebufferTextureLayerEXT(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer) {if (GLeeInit()) glFramebufferTextureLayerEXT(target, attachment, texture, level, layer);} GLEEPFNGLFRAMEBUFFERTEXTURELAYEREXTPROC GLeeFuncPtr_glFramebufferTextureLayerEXT=GLee_Lazy_glFramebufferTextureLayerEXT; #endif #ifndef GLEE_C_DEFINED_glFramebufferTextureFaceEXT #define GLEE_C_DEFINED_glFramebufferTextureFaceEXT GLvoid __stdcall GLee_Lazy_glFramebufferTextureFaceEXT(GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face) {if (GLeeInit()) glFramebufferTextureFaceEXT(target, attachment, texture, level, face);} GLEEPFNGLFRAMEBUFFERTEXTUREFACEEXTPROC GLeeFuncPtr_glFramebufferTextureFaceEXT=GLee_Lazy_glFramebufferTextureFaceEXT; #endif #endif /* GL_EXT_scene_marker */ #ifdef __GLEE_GL_EXT_scene_marker #ifndef GLEE_C_DEFINED_glBeginSceneEXT #define GLEE_C_DEFINED_glBeginSceneEXT GLvoid __stdcall GLee_Lazy_glBeginSceneEXT(void) {if (GLeeInit()) glBeginSceneEXT();} GLEEPFNGLBEGINSCENEEXTPROC GLeeFuncPtr_glBeginSceneEXT=GLee_Lazy_glBeginSceneEXT; #endif #ifndef GLEE_C_DEFINED_glEndSceneEXT #define GLEE_C_DEFINED_glEndSceneEXT GLvoid __stdcall GLee_Lazy_glEndSceneEXT(void) {if (GLeeInit()) glEndSceneEXT();} GLEEPFNGLENDSCENEEXTPROC GLeeFuncPtr_glEndSceneEXT=GLee_Lazy_glEndSceneEXT; #endif #endif /* GL_EXT_texture_compression_dxt1 */ #ifdef __GLEE_GL_EXT_texture_compression_dxt1 #endif /* GL_EXT_texture_env */ #ifdef __GLEE_GL_EXT_texture_env #endif /* GL_IBM_static_data */ #ifdef __GLEE_GL_IBM_static_data #endif /* GL_NV_gpu_program4 */ #ifdef __GLEE_GL_NV_gpu_program4 #ifndef GLEE_C_DEFINED_glProgramLocalParameterI4iNV #define GLEE_C_DEFINED_glProgramLocalParameterI4iNV GLvoid __stdcall GLee_Lazy_glProgramLocalParameterI4iNV(GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w) {if (GLeeInit()) glProgramLocalParameterI4iNV(target, index, x, y, z, w);} GLEEPFNGLPROGRAMLOCALPARAMETERI4INVPROC GLeeFuncPtr_glProgramLocalParameterI4iNV=GLee_Lazy_glProgramLocalParameterI4iNV; #endif #ifndef GLEE_C_DEFINED_glProgramLocalParameterI4ivNV #define GLEE_C_DEFINED_glProgramLocalParameterI4ivNV GLvoid __stdcall GLee_Lazy_glProgramLocalParameterI4ivNV(GLenum target, GLuint index, const GLint * params) {if (GLeeInit()) glProgramLocalParameterI4ivNV(target, index, params);} GLEEPFNGLPROGRAMLOCALPARAMETERI4IVNVPROC GLeeFuncPtr_glProgramLocalParameterI4ivNV=GLee_Lazy_glProgramLocalParameterI4ivNV; #endif #ifndef GLEE_C_DEFINED_glProgramLocalParametersI4ivNV #define GLEE_C_DEFINED_glProgramLocalParametersI4ivNV GLvoid __stdcall GLee_Lazy_glProgramLocalParametersI4ivNV(GLenum target, GLuint index, GLsizei count, const GLint * params) {if (GLeeInit()) glProgramLocalParametersI4ivNV(target, index, count, params);} GLEEPFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC GLeeFuncPtr_glProgramLocalParametersI4ivNV=GLee_Lazy_glProgramLocalParametersI4ivNV; #endif #ifndef GLEE_C_DEFINED_glProgramLocalParameterI4uiNV #define GLEE_C_DEFINED_glProgramLocalParameterI4uiNV GLvoid __stdcall GLee_Lazy_glProgramLocalParameterI4uiNV(GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w) {if (GLeeInit()) glProgramLocalParameterI4uiNV(target, index, x, y, z, w);} GLEEPFNGLPROGRAMLOCALPARAMETERI4UINVPROC GLeeFuncPtr_glProgramLocalParameterI4uiNV=GLee_Lazy_glProgramLocalParameterI4uiNV; #endif #ifndef GLEE_C_DEFINED_glProgramLocalParameterI4uivNV #define GLEE_C_DEFINED_glProgramLocalParameterI4uivNV GLvoid __stdcall GLee_Lazy_glProgramLocalParameterI4uivNV(GLenum target, GLuint index, const GLuint * params) {if (GLeeInit()) glProgramLocalParameterI4uivNV(target, index, params);} GLEEPFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC GLeeFuncPtr_glProgramLocalParameterI4uivNV=GLee_Lazy_glProgramLocalParameterI4uivNV; #endif #ifndef GLEE_C_DEFINED_glProgramLocalParametersI4uivNV #define GLEE_C_DEFINED_glProgramLocalParametersI4uivNV GLvoid __stdcall GLee_Lazy_glProgramLocalParametersI4uivNV(GLenum target, GLuint index, GLsizei count, const GLuint * params) {if (GLeeInit()) glProgramLocalParametersI4uivNV(target, index, count, params);} GLEEPFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC GLeeFuncPtr_glProgramLocalParametersI4uivNV=GLee_Lazy_glProgramLocalParametersI4uivNV; #endif #ifndef GLEE_C_DEFINED_glProgramEnvParameterI4iNV #define GLEE_C_DEFINED_glProgramEnvParameterI4iNV GLvoid __stdcall GLee_Lazy_glProgramEnvParameterI4iNV(GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w) {if (GLeeInit()) glProgramEnvParameterI4iNV(target, index, x, y, z, w);} GLEEPFNGLPROGRAMENVPARAMETERI4INVPROC GLeeFuncPtr_glProgramEnvParameterI4iNV=GLee_Lazy_glProgramEnvParameterI4iNV; #endif #ifndef GLEE_C_DEFINED_glProgramEnvParameterI4ivNV #define GLEE_C_DEFINED_glProgramEnvParameterI4ivNV GLvoid __stdcall GLee_Lazy_glProgramEnvParameterI4ivNV(GLenum target, GLuint index, const GLint * params) {if (GLeeInit()) glProgramEnvParameterI4ivNV(target, index, params);} GLEEPFNGLPROGRAMENVPARAMETERI4IVNVPROC GLeeFuncPtr_glProgramEnvParameterI4ivNV=GLee_Lazy_glProgramEnvParameterI4ivNV; #endif #ifndef GLEE_C_DEFINED_glProgramEnvParametersI4ivNV #define GLEE_C_DEFINED_glProgramEnvParametersI4ivNV GLvoid __stdcall GLee_Lazy_glProgramEnvParametersI4ivNV(GLenum target, GLuint index, GLsizei count, const GLint * params) {if (GLeeInit()) glProgramEnvParametersI4ivNV(target, index, count, params);} GLEEPFNGLPROGRAMENVPARAMETERSI4IVNVPROC GLeeFuncPtr_glProgramEnvParametersI4ivNV=GLee_Lazy_glProgramEnvParametersI4ivNV; #endif #ifndef GLEE_C_DEFINED_glProgramEnvParameterI4uiNV #define GLEE_C_DEFINED_glProgramEnvParameterI4uiNV GLvoid __stdcall GLee_Lazy_glProgramEnvParameterI4uiNV(GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w) {if (GLeeInit()) glProgramEnvParameterI4uiNV(target, index, x, y, z, w);} GLEEPFNGLPROGRAMENVPARAMETERI4UINVPROC GLeeFuncPtr_glProgramEnvParameterI4uiNV=GLee_Lazy_glProgramEnvParameterI4uiNV; #endif #ifndef GLEE_C_DEFINED_glProgramEnvParameterI4uivNV #define GLEE_C_DEFINED_glProgramEnvParameterI4uivNV GLvoid __stdcall GLee_Lazy_glProgramEnvParameterI4uivNV(GLenum target, GLuint index, const GLuint * params) {if (GLeeInit()) glProgramEnvParameterI4uivNV(target, index, params);} GLEEPFNGLPROGRAMENVPARAMETERI4UIVNVPROC GLeeFuncPtr_glProgramEnvParameterI4uivNV=GLee_Lazy_glProgramEnvParameterI4uivNV; #endif #ifndef GLEE_C_DEFINED_glProgramEnvParametersI4uivNV #define GLEE_C_DEFINED_glProgramEnvParametersI4uivNV GLvoid __stdcall GLee_Lazy_glProgramEnvParametersI4uivNV(GLenum target, GLuint index, GLsizei count, const GLuint * params) {if (GLeeInit()) glProgramEnvParametersI4uivNV(target, index, count, params);} GLEEPFNGLPROGRAMENVPARAMETERSI4UIVNVPROC GLeeFuncPtr_glProgramEnvParametersI4uivNV=GLee_Lazy_glProgramEnvParametersI4uivNV; #endif #ifndef GLEE_C_DEFINED_glGetProgramLocalParameterIivNV #define GLEE_C_DEFINED_glGetProgramLocalParameterIivNV GLvoid __stdcall GLee_Lazy_glGetProgramLocalParameterIivNV(GLenum target, GLuint index, GLint * params) {if (GLeeInit()) glGetProgramLocalParameterIivNV(target, index, params);} GLEEPFNGLGETPROGRAMLOCALPARAMETERIIVNVPROC GLeeFuncPtr_glGetProgramLocalParameterIivNV=GLee_Lazy_glGetProgramLocalParameterIivNV; #endif #ifndef GLEE_C_DEFINED_glGetProgramLocalParameterIuivNV #define GLEE_C_DEFINED_glGetProgramLocalParameterIuivNV GLvoid __stdcall GLee_Lazy_glGetProgramLocalParameterIuivNV(GLenum target, GLuint index, GLuint * params) {if (GLeeInit()) glGetProgramLocalParameterIuivNV(target, index, params);} GLEEPFNGLGETPROGRAMLOCALPARAMETERIUIVNVPROC GLeeFuncPtr_glGetProgramLocalParameterIuivNV=GLee_Lazy_glGetProgramLocalParameterIuivNV; #endif #ifndef GLEE_C_DEFINED_glGetProgramEnvParameterIivNV #define GLEE_C_DEFINED_glGetProgramEnvParameterIivNV GLvoid __stdcall GLee_Lazy_glGetProgramEnvParameterIivNV(GLenum target, GLuint index, GLint * params) {if (GLeeInit()) glGetProgramEnvParameterIivNV(target, index, params);} GLEEPFNGLGETPROGRAMENVPARAMETERIIVNVPROC GLeeFuncPtr_glGetProgramEnvParameterIivNV=GLee_Lazy_glGetProgramEnvParameterIivNV; #endif #ifndef GLEE_C_DEFINED_glGetProgramEnvParameterIuivNV #define GLEE_C_DEFINED_glGetProgramEnvParameterIuivNV GLvoid __stdcall GLee_Lazy_glGetProgramEnvParameterIuivNV(GLenum target, GLuint index, GLuint * params) {if (GLeeInit()) glGetProgramEnvParameterIuivNV(target, index, params);} GLEEPFNGLGETPROGRAMENVPARAMETERIUIVNVPROC GLeeFuncPtr_glGetProgramEnvParameterIuivNV=GLee_Lazy_glGetProgramEnvParameterIuivNV; #endif #ifndef GLEE_C_DEFINED_glFramebufferTextureEXT #define GLEE_C_DEFINED_glFramebufferTextureEXT GLvoid __stdcall GLee_Lazy_glFramebufferTextureEXT(GLenum target, GLenum attachment, GLuint texture, GLint level) {if (GLeeInit()) glFramebufferTextureEXT(target, attachment, texture, level);} GLEEPFNGLFRAMEBUFFERTEXTUREEXTPROC GLeeFuncPtr_glFramebufferTextureEXT=GLee_Lazy_glFramebufferTextureEXT; #endif #ifndef GLEE_C_DEFINED_glFramebufferTextureLayerEXT #define GLEE_C_DEFINED_glFramebufferTextureLayerEXT GLvoid __stdcall GLee_Lazy_glFramebufferTextureLayerEXT(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer) {if (GLeeInit()) glFramebufferTextureLayerEXT(target, attachment, texture, level, layer);} GLEEPFNGLFRAMEBUFFERTEXTURELAYEREXTPROC GLeeFuncPtr_glFramebufferTextureLayerEXT=GLee_Lazy_glFramebufferTextureLayerEXT; #endif #ifndef GLEE_C_DEFINED_glFramebufferTextureFaceEXT #define GLEE_C_DEFINED_glFramebufferTextureFaceEXT GLvoid __stdcall GLee_Lazy_glFramebufferTextureFaceEXT(GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face) {if (GLeeInit()) glFramebufferTextureFaceEXT(target, attachment, texture, level, face);} GLEEPFNGLFRAMEBUFFERTEXTUREFACEEXTPROC GLeeFuncPtr_glFramebufferTextureFaceEXT=GLee_Lazy_glFramebufferTextureFaceEXT; #endif #ifndef GLEE_C_DEFINED_glVertexAttribI2iEXT #define GLEE_C_DEFINED_glVertexAttribI2iEXT GLvoid __stdcall GLee_Lazy_glVertexAttribI2iEXT(GLuint index, GLint x, GLint y) {if (GLeeInit()) glVertexAttribI2iEXT(index, x, y);} GLEEPFNGLVERTEXATTRIBI2IEXTPROC GLeeFuncPtr_glVertexAttribI2iEXT=GLee_Lazy_glVertexAttribI2iEXT; #endif #ifndef GLEE_C_DEFINED_glVertexAttribI3iEXT #define GLEE_C_DEFINED_glVertexAttribI3iEXT GLvoid __stdcall GLee_Lazy_glVertexAttribI3iEXT(GLuint index, GLint x, GLint y, GLint z) {if (GLeeInit()) glVertexAttribI3iEXT(index, x, y, z);} GLEEPFNGLVERTEXATTRIBI3IEXTPROC GLeeFuncPtr_glVertexAttribI3iEXT=GLee_Lazy_glVertexAttribI3iEXT; #endif #ifndef GLEE_C_DEFINED_glVertexAttribI4iEXT #define GLEE_C_DEFINED_glVertexAttribI4iEXT GLvoid __stdcall GLee_Lazy_glVertexAttribI4iEXT(GLuint index, GLint x, GLint y, GLint z, GLint w) {if (GLeeInit()) glVertexAttribI4iEXT(index, x, y, z, w);} GLEEPFNGLVERTEXATTRIBI4IEXTPROC GLeeFuncPtr_glVertexAttribI4iEXT=GLee_Lazy_glVertexAttribI4iEXT; #endif #ifndef GLEE_C_DEFINED_glVertexAttribI1uiEXT #define GLEE_C_DEFINED_glVertexAttribI1uiEXT GLvoid __stdcall GLee_Lazy_glVertexAttribI1uiEXT(GLuint index, GLuint x) {if (GLeeInit()) glVertexAttribI1uiEXT(index, x);} GLEEPFNGLVERTEXATTRIBI1UIEXTPROC GLeeFuncPtr_glVertexAttribI1uiEXT=GLee_Lazy_glVertexAttribI1uiEXT; #endif #ifndef GLEE_C_DEFINED_glVertexAttribI2uiEXT #define GLEE_C_DEFINED_glVertexAttribI2uiEXT GLvoid __stdcall GLee_Lazy_glVertexAttribI2uiEXT(GLuint index, GLuint x, GLuint y) {if (GLeeInit()) glVertexAttribI2uiEXT(index, x, y);} GLEEPFNGLVERTEXATTRIBI2UIEXTPROC GLeeFuncPtr_glVertexAttribI2uiEXT=GLee_Lazy_glVertexAttribI2uiEXT; #endif #ifndef GLEE_C_DEFINED_glVertexAttribI3uiEXT #define GLEE_C_DEFINED_glVertexAttribI3uiEXT GLvoid __stdcall GLee_Lazy_glVertexAttribI3uiEXT(GLuint index, GLuint x, GLuint y, GLuint z) {if (GLeeInit()) glVertexAttribI3uiEXT(index, x, y, z);} GLEEPFNGLVERTEXATTRIBI3UIEXTPROC GLeeFuncPtr_glVertexAttribI3uiEXT=GLee_Lazy_glVertexAttribI3uiEXT; #endif #ifndef GLEE_C_DEFINED_glVertexAttribI4uiEXT #define GLEE_C_DEFINED_glVertexAttribI4uiEXT GLvoid __stdcall GLee_Lazy_glVertexAttribI4uiEXT(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w) {if (GLeeInit()) glVertexAttribI4uiEXT(index, x, y, z, w);} GLEEPFNGLVERTEXATTRIBI4UIEXTPROC GLeeFuncPtr_glVertexAttribI4uiEXT=GLee_Lazy_glVertexAttribI4uiEXT; #endif #ifndef GLEE_C_DEFINED_glVertexAttribI1ivEXT #define GLEE_C_DEFINED_glVertexAttribI1ivEXT GLvoid __stdcall GLee_Lazy_glVertexAttribI1ivEXT(GLuint index, const GLint * v) {if (GLeeInit()) glVertexAttribI1ivEXT(index, v);} GLEEPFNGLVERTEXATTRIBI1IVEXTPROC GLeeFuncPtr_glVertexAttribI1ivEXT=GLee_Lazy_glVertexAttribI1ivEXT; #endif #ifndef GLEE_C_DEFINED_glVertexAttribI2ivEXT #define GLEE_C_DEFINED_glVertexAttribI2ivEXT GLvoid __stdcall GLee_Lazy_glVertexAttribI2ivEXT(GLuint index, const GLint * v) {if (GLeeInit()) glVertexAttribI2ivEXT(index, v);} GLEEPFNGLVERTEXATTRIBI2IVEXTPROC GLeeFuncPtr_glVertexAttribI2ivEXT=GLee_Lazy_glVertexAttribI2ivEXT; #endif #ifndef GLEE_C_DEFINED_glVertexAttribI3ivEXT #define GLEE_C_DEFINED_glVertexAttribI3ivEXT GLvoid __stdcall GLee_Lazy_glVertexAttribI3ivEXT(GLuint index, const GLint * v) {if (GLeeInit()) glVertexAttribI3ivEXT(index, v);} GLEEPFNGLVERTEXATTRIBI3IVEXTPROC GLeeFuncPtr_glVertexAttribI3ivEXT=GLee_Lazy_glVertexAttribI3ivEXT; #endif #ifndef GLEE_C_DEFINED_glVertexAttribI4ivEXT #define GLEE_C_DEFINED_glVertexAttribI4ivEXT GLvoid __stdcall GLee_Lazy_glVertexAttribI4ivEXT(GLuint index, const GLint * v) {if (GLeeInit()) glVertexAttribI4ivEXT(index, v);} GLEEPFNGLVERTEXATTRIBI4IVEXTPROC GLeeFuncPtr_glVertexAttribI4ivEXT=GLee_Lazy_glVertexAttribI4ivEXT; #endif #ifndef GLEE_C_DEFINED_glVertexAttribI1uivEXT #define GLEE_C_DEFINED_glVertexAttribI1uivEXT GLvoid __stdcall GLee_Lazy_glVertexAttribI1uivEXT(GLuint index, const GLuint * v) {if (GLeeInit()) glVertexAttribI1uivEXT(index, v);} GLEEPFNGLVERTEXATTRIBI1UIVEXTPROC GLeeFuncPtr_glVertexAttribI1uivEXT=GLee_Lazy_glVertexAttribI1uivEXT; #endif #ifndef GLEE_C_DEFINED_glVertexAttribI2uivEXT #define GLEE_C_DEFINED_glVertexAttribI2uivEXT GLvoid __stdcall GLee_Lazy_glVertexAttribI2uivEXT(GLuint index, const GLuint * v) {if (GLeeInit()) glVertexAttribI2uivEXT(index, v);} GLEEPFNGLVERTEXATTRIBI2UIVEXTPROC GLeeFuncPtr_glVertexAttribI2uivEXT=GLee_Lazy_glVertexAttribI2uivEXT; #endif #ifndef GLEE_C_DEFINED_glVertexAttribI3uivEXT #define GLEE_C_DEFINED_glVertexAttribI3uivEXT GLvoid __stdcall GLee_Lazy_glVertexAttribI3uivEXT(GLuint index, const GLuint * v) {if (GLeeInit()) glVertexAttribI3uivEXT(index, v);} GLEEPFNGLVERTEXATTRIBI3UIVEXTPROC GLeeFuncPtr_glVertexAttribI3uivEXT=GLee_Lazy_glVertexAttribI3uivEXT; #endif #ifndef GLEE_C_DEFINED_glVertexAttribI4uivEXT #define GLEE_C_DEFINED_glVertexAttribI4uivEXT GLvoid __stdcall GLee_Lazy_glVertexAttribI4uivEXT(GLuint index, const GLuint * v) {if (GLeeInit()) glVertexAttribI4uivEXT(index, v);} GLEEPFNGLVERTEXATTRIBI4UIVEXTPROC GLeeFuncPtr_glVertexAttribI4uivEXT=GLee_Lazy_glVertexAttribI4uivEXT; #endif #ifndef GLEE_C_DEFINED_glVertexAttribI4bvEXT #define GLEE_C_DEFINED_glVertexAttribI4bvEXT GLvoid __stdcall GLee_Lazy_glVertexAttribI4bvEXT(GLuint index, const GLbyte * v) {if (GLeeInit()) glVertexAttribI4bvEXT(index, v);} GLEEPFNGLVERTEXATTRIBI4BVEXTPROC GLeeFuncPtr_glVertexAttribI4bvEXT=GLee_Lazy_glVertexAttribI4bvEXT; #endif #ifndef GLEE_C_DEFINED_glVertexAttribI4svEXT #define GLEE_C_DEFINED_glVertexAttribI4svEXT GLvoid __stdcall GLee_Lazy_glVertexAttribI4svEXT(GLuint index, const GLshort * v) {if (GLeeInit()) glVertexAttribI4svEXT(index, v);} GLEEPFNGLVERTEXATTRIBI4SVEXTPROC GLeeFuncPtr_glVertexAttribI4svEXT=GLee_Lazy_glVertexAttribI4svEXT; #endif #ifndef GLEE_C_DEFINED_glVertexAttribI4ubvEXT #define GLEE_C_DEFINED_glVertexAttribI4ubvEXT GLvoid __stdcall GLee_Lazy_glVertexAttribI4ubvEXT(GLuint index, const GLubyte * v) {if (GLeeInit()) glVertexAttribI4ubvEXT(index, v);} GLEEPFNGLVERTEXATTRIBI4UBVEXTPROC GLeeFuncPtr_glVertexAttribI4ubvEXT=GLee_Lazy_glVertexAttribI4ubvEXT; #endif #ifndef GLEE_C_DEFINED_glVertexAttribI4usvEXT #define GLEE_C_DEFINED_glVertexAttribI4usvEXT GLvoid __stdcall GLee_Lazy_glVertexAttribI4usvEXT(GLuint index, const GLushort * v) {if (GLeeInit()) glVertexAttribI4usvEXT(index, v);} GLEEPFNGLVERTEXATTRIBI4USVEXTPROC GLeeFuncPtr_glVertexAttribI4usvEXT=GLee_Lazy_glVertexAttribI4usvEXT; #endif #ifndef GLEE_C_DEFINED_glVertexAttribIPointerEXT #define GLEE_C_DEFINED_glVertexAttribIPointerEXT GLvoid __stdcall GLee_Lazy_glVertexAttribIPointerEXT(GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid * pointer) {if (GLeeInit()) glVertexAttribIPointerEXT(index, size, type, stride, pointer);} GLEEPFNGLVERTEXATTRIBIPOINTEREXTPROC GLeeFuncPtr_glVertexAttribIPointerEXT=GLee_Lazy_glVertexAttribIPointerEXT; #endif #ifndef GLEE_C_DEFINED_glGetVertexAttribIivEXT #define GLEE_C_DEFINED_glGetVertexAttribIivEXT GLvoid __stdcall GLee_Lazy_glGetVertexAttribIivEXT(GLuint index, GLenum pname, GLint * params) {if (GLeeInit()) glGetVertexAttribIivEXT(index, pname, params);} GLEEPFNGLGETVERTEXATTRIBIIVEXTPROC GLeeFuncPtr_glGetVertexAttribIivEXT=GLee_Lazy_glGetVertexAttribIivEXT; #endif #ifndef GLEE_C_DEFINED_glGetVertexAttribIuivEXT #define GLEE_C_DEFINED_glGetVertexAttribIuivEXT GLvoid __stdcall GLee_Lazy_glGetVertexAttribIuivEXT(GLuint index, GLenum pname, GLuint * params) {if (GLeeInit()) glGetVertexAttribIuivEXT(index, pname, params);} GLEEPFNGLGETVERTEXATTRIBIUIVEXTPROC GLeeFuncPtr_glGetVertexAttribIuivEXT=GLee_Lazy_glGetVertexAttribIuivEXT; #endif #endif /* GL_OES_byte_coordinates */ #ifdef __GLEE_GL_OES_byte_coordinates #endif /* GL_OES_compressed_paletted_texture */ #ifdef __GLEE_GL_OES_compressed_paletted_texture #endif /* GL_OES_single_precision */ #ifdef __GLEE_GL_OES_single_precision #ifndef GLEE_C_DEFINED_glDepthRangefOES #define GLEE_C_DEFINED_glDepthRangefOES GLvoid __stdcall GLee_Lazy_glDepthRangefOES(GLclampf n, GLclampf f) {if (GLeeInit()) glDepthRangefOES(n, f);} GLEEPFNGLDEPTHRANGEFOESPROC GLeeFuncPtr_glDepthRangefOES=GLee_Lazy_glDepthRangefOES; #endif #ifndef GLEE_C_DEFINED_glFrustumfOES #define GLEE_C_DEFINED_glFrustumfOES GLvoid __stdcall GLee_Lazy_glFrustumfOES(GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f) {if (GLeeInit()) glFrustumfOES(l, r, b, t, n, f);} GLEEPFNGLFRUSTUMFOESPROC GLeeFuncPtr_glFrustumfOES=GLee_Lazy_glFrustumfOES; #endif #ifndef GLEE_C_DEFINED_glOrthofOES #define GLEE_C_DEFINED_glOrthofOES GLvoid __stdcall GLee_Lazy_glOrthofOES(GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f) {if (GLeeInit()) glOrthofOES(l, r, b, t, n, f);} GLEEPFNGLORTHOFOESPROC GLeeFuncPtr_glOrthofOES=GLee_Lazy_glOrthofOES; #endif #ifndef GLEE_C_DEFINED_glClipPlanefOES #define GLEE_C_DEFINED_glClipPlanefOES GLvoid __stdcall GLee_Lazy_glClipPlanefOES(GLenum plane, const GLfloat* equation) {if (GLeeInit()) glClipPlanefOES(plane, equation);} GLEEPFNGLCLIPPLANEFOESPROC GLeeFuncPtr_glClipPlanefOES=GLee_Lazy_glClipPlanefOES; #endif #ifndef GLEE_C_DEFINED_glGetClipPlanefOES #define GLEE_C_DEFINED_glGetClipPlanefOES GLvoid __stdcall GLee_Lazy_glGetClipPlanefOES(GLenum plane, GLfloat* equation) {if (GLeeInit()) glGetClipPlanefOES(plane, equation);} GLEEPFNGLGETCLIPPLANEFOESPROC GLeeFuncPtr_glGetClipPlanefOES=GLee_Lazy_glGetClipPlanefOES; #endif #ifndef GLEE_C_DEFINED_glClearDepthfOES #define GLEE_C_DEFINED_glClearDepthfOES GLvoid __stdcall GLee_Lazy_glClearDepthfOES(GLclampd depth) {if (GLeeInit()) glClearDepthfOES(depth);} GLEEPFNGLCLEARDEPTHFOESPROC GLeeFuncPtr_glClearDepthfOES=GLee_Lazy_glClearDepthfOES; #endif #endif /* GL_SGIX_pixel_texture_bits */ #ifdef __GLEE_GL_SGIX_pixel_texture_bits #endif /* GL_SGIX_texture_range */ #ifdef __GLEE_GL_SGIX_texture_range #endif /* WGL */ #ifdef WIN32 /* Extension querying variables */ GLboolean _GLEE_WGL_ARB_buffer_region = GL_FALSE; GLboolean _GLEE_WGL_ARB_multisample = GL_FALSE; GLboolean _GLEE_WGL_ARB_extensions_string = GL_FALSE; GLboolean _GLEE_WGL_ARB_pixel_format = GL_FALSE; GLboolean _GLEE_WGL_ARB_make_current_read = GL_FALSE; GLboolean _GLEE_WGL_ARB_pbuffer = GL_FALSE; GLboolean _GLEE_WGL_ARB_render_texture = GL_FALSE; GLboolean _GLEE_WGL_ARB_pixel_format_float = GL_FALSE; GLboolean _GLEE_WGL_ARB_create_context = GL_FALSE; GLboolean _GLEE_WGL_EXT_make_current_read = GL_FALSE; GLboolean _GLEE_WGL_EXT_pixel_format = GL_FALSE; GLboolean _GLEE_WGL_EXT_pbuffer = GL_FALSE; GLboolean _GLEE_WGL_EXT_depth_float = GL_FALSE; GLboolean _GLEE_WGL_3DFX_multisample = GL_FALSE; GLboolean _GLEE_WGL_EXT_multisample = GL_FALSE; GLboolean _GLEE_WGL_I3D_digital_video_control = GL_FALSE; GLboolean _GLEE_WGL_I3D_gamma = GL_FALSE; GLboolean _GLEE_WGL_I3D_genlock = GL_FALSE; GLboolean _GLEE_WGL_I3D_image_buffer = GL_FALSE; GLboolean _GLEE_WGL_I3D_swap_frame_lock = GL_FALSE; GLboolean _GLEE_WGL_NV_render_depth_texture = GL_FALSE; GLboolean _GLEE_WGL_NV_render_texture_rectangle = GL_FALSE; GLboolean _GLEE_WGL_ATI_pixel_format_float = GL_FALSE; GLboolean _GLEE_WGL_NV_float_buffer = GL_FALSE; GLboolean _GLEE_WGL_3DL_stereo_control = GL_FALSE; GLboolean _GLEE_WGL_EXT_pixel_format_packed_float = GL_FALSE; GLboolean _GLEE_WGL_EXT_framebuffer_sRGB = GL_FALSE; GLboolean _GLEE_WGL_NV_present_video = GL_FALSE; GLboolean _GLEE_WGL_NV_swap_group = GL_FALSE; GLboolean _GLEE_WGL_NV_gpu_affinity = GL_FALSE; GLboolean _GLEE_WGL_EXT_display_color_table = GL_FALSE; GLboolean _GLEE_WGL_EXT_extensions_string = GL_FALSE; GLboolean _GLEE_WGL_EXT_swap_control = GL_FALSE; GLboolean _GLEE_WGL_NV_vertex_array_range = GL_FALSE; GLboolean _GLEE_WGL_OML_sync_control = GL_FALSE; GLboolean _GLEE_WGL_I3D_swap_frame_usage = GL_FALSE; GLboolean _GLEE_WGL_NV_video_output = GL_FALSE; /* WGL Extension names */ char __GLeeWGLExtensionNames[37][34]={ "WGL_ARB_buffer_region", "WGL_ARB_multisample", "WGL_ARB_extensions_string", "WGL_ARB_pixel_format", "WGL_ARB_make_current_read", "WGL_ARB_pbuffer", "WGL_ARB_render_texture", "WGL_ARB_pixel_format_float", "WGL_ARB_create_context", "WGL_EXT_make_current_read", "WGL_EXT_pixel_format", "WGL_EXT_pbuffer", "WGL_EXT_depth_float", "WGL_3DFX_multisample", "WGL_EXT_multisample", "WGL_I3D_digital_video_control", "WGL_I3D_gamma", "WGL_I3D_genlock", "WGL_I3D_image_buffer", "WGL_I3D_swap_frame_lock", "WGL_NV_render_depth_texture", "WGL_NV_render_texture_rectangle", "WGL_ATI_pixel_format_float", "WGL_NV_float_buffer", "WGL_3DL_stereo_control", "WGL_EXT_pixel_format_packed_float", "WGL_EXT_framebuffer_sRGB", "WGL_NV_present_video", "WGL_NV_swap_group", "WGL_NV_gpu_affinity", "WGL_EXT_display_color_table", "WGL_EXT_extensions_string", "WGL_EXT_swap_control", "WGL_NV_vertex_array_range", "WGL_OML_sync_control", "WGL_I3D_swap_frame_usage", "WGL_NV_video_output" }; int __GLeeWGLNumExtensions=37; /* WGL_ARB_buffer_region */ #ifdef __GLEE_WGL_ARB_buffer_region #ifndef GLEE_C_DEFINED_wglCreateBufferRegionARB #define GLEE_C_DEFINED_wglCreateBufferRegionARB HANDLE __stdcall GLee_Lazy_wglCreateBufferRegionARB(HDC hDC, int iLayerPlane, UINT uType) {if (GLeeInit()) return wglCreateBufferRegionARB(hDC, iLayerPlane, uType); return (HANDLE)0;} GLEEPFNWGLCREATEBUFFERREGIONARBPROC GLeeFuncPtr_wglCreateBufferRegionARB=GLee_Lazy_wglCreateBufferRegionARB; #endif #ifndef GLEE_C_DEFINED_wglDeleteBufferRegionARB #define GLEE_C_DEFINED_wglDeleteBufferRegionARB VOID __stdcall GLee_Lazy_wglDeleteBufferRegionARB(HANDLE hRegion) {if (GLeeInit()) wglDeleteBufferRegionARB(hRegion);} GLEEPFNWGLDELETEBUFFERREGIONARBPROC GLeeFuncPtr_wglDeleteBufferRegionARB=GLee_Lazy_wglDeleteBufferRegionARB; #endif #ifndef GLEE_C_DEFINED_wglSaveBufferRegionARB #define GLEE_C_DEFINED_wglSaveBufferRegionARB BOOL __stdcall GLee_Lazy_wglSaveBufferRegionARB(HANDLE hRegion, int x, int y, int width, int height) {if (GLeeInit()) return wglSaveBufferRegionARB(hRegion, x, y, width, height); return (BOOL)0;} GLEEPFNWGLSAVEBUFFERREGIONARBPROC GLeeFuncPtr_wglSaveBufferRegionARB=GLee_Lazy_wglSaveBufferRegionARB; #endif #ifndef GLEE_C_DEFINED_wglRestoreBufferRegionARB #define GLEE_C_DEFINED_wglRestoreBufferRegionARB BOOL __stdcall GLee_Lazy_wglRestoreBufferRegionARB(HANDLE hRegion, int x, int y, int width, int height, int xSrc, int ySrc) {if (GLeeInit()) return wglRestoreBufferRegionARB(hRegion, x, y, width, height, xSrc, ySrc); return (BOOL)0;} GLEEPFNWGLRESTOREBUFFERREGIONARBPROC GLeeFuncPtr_wglRestoreBufferRegionARB=GLee_Lazy_wglRestoreBufferRegionARB; #endif #endif /* WGL_ARB_multisample */ #ifdef __GLEE_WGL_ARB_multisample #endif /* WGL_ARB_extensions_string */ #ifdef __GLEE_WGL_ARB_extensions_string #ifndef GLEE_C_DEFINED_wglGetExtensionsStringARB #define GLEE_C_DEFINED_wglGetExtensionsStringARB const char * __stdcall GLee_Lazy_wglGetExtensionsStringARB(HDC hdc) {if (GLeeInit()) return wglGetExtensionsStringARB(hdc); return (const char *)0;} GLEEPFNWGLGETEXTENSIONSSTRINGARBPROC GLeeFuncPtr_wglGetExtensionsStringARB=GLee_Lazy_wglGetExtensionsStringARB; #endif #endif /* WGL_ARB_pixel_format */ #ifdef __GLEE_WGL_ARB_pixel_format #ifndef GLEE_C_DEFINED_wglGetPixelFormatAttribivARB #define GLEE_C_DEFINED_wglGetPixelFormatAttribivARB BOOL __stdcall GLee_Lazy_wglGetPixelFormatAttribivARB(HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int * piAttributes, int * piValues) {if (GLeeInit()) return wglGetPixelFormatAttribivARB(hdc, iPixelFormat, iLayerPlane, nAttributes, piAttributes, piValues); return (BOOL)0;} GLEEPFNWGLGETPIXELFORMATATTRIBIVARBPROC GLeeFuncPtr_wglGetPixelFormatAttribivARB=GLee_Lazy_wglGetPixelFormatAttribivARB; #endif #ifndef GLEE_C_DEFINED_wglGetPixelFormatAttribfvARB #define GLEE_C_DEFINED_wglGetPixelFormatAttribfvARB BOOL __stdcall GLee_Lazy_wglGetPixelFormatAttribfvARB(HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int * piAttributes, FLOAT * pfValues) {if (GLeeInit()) return wglGetPixelFormatAttribfvARB(hdc, iPixelFormat, iLayerPlane, nAttributes, piAttributes, pfValues); return (BOOL)0;} GLEEPFNWGLGETPIXELFORMATATTRIBFVARBPROC GLeeFuncPtr_wglGetPixelFormatAttribfvARB=GLee_Lazy_wglGetPixelFormatAttribfvARB; #endif #ifndef GLEE_C_DEFINED_wglChoosePixelFormatARB #define GLEE_C_DEFINED_wglChoosePixelFormatARB BOOL __stdcall GLee_Lazy_wglChoosePixelFormatARB(HDC hdc, const int * piAttribIList, const FLOAT * pfAttribFList, UINT nMaxFormats, int * piFormats, UINT * nNumFormats) {if (GLeeInit()) return wglChoosePixelFormatARB(hdc, piAttribIList, pfAttribFList, nMaxFormats, piFormats, nNumFormats); return (BOOL)0;} GLEEPFNWGLCHOOSEPIXELFORMATARBPROC GLeeFuncPtr_wglChoosePixelFormatARB=GLee_Lazy_wglChoosePixelFormatARB; #endif #endif /* WGL_ARB_make_current_read */ #ifdef __GLEE_WGL_ARB_make_current_read #ifndef GLEE_C_DEFINED_wglMakeContextCurrentARB #define GLEE_C_DEFINED_wglMakeContextCurrentARB BOOL __stdcall GLee_Lazy_wglMakeContextCurrentARB(HDC hDrawDC, HDC hReadDC, HGLRC hglrc) {if (GLeeInit()) return wglMakeContextCurrentARB(hDrawDC, hReadDC, hglrc); return (BOOL)0;} GLEEPFNWGLMAKECONTEXTCURRENTARBPROC GLeeFuncPtr_wglMakeContextCurrentARB=GLee_Lazy_wglMakeContextCurrentARB; #endif #ifndef GLEE_C_DEFINED_wglGetCurrentReadDCARB #define GLEE_C_DEFINED_wglGetCurrentReadDCARB HDC __stdcall GLee_Lazy_wglGetCurrentReadDCARB(void) {if (GLeeInit()) return wglGetCurrentReadDCARB(); return (HDC)0;} GLEEPFNWGLGETCURRENTREADDCARBPROC GLeeFuncPtr_wglGetCurrentReadDCARB=GLee_Lazy_wglGetCurrentReadDCARB; #endif #endif /* WGL_ARB_pbuffer */ #ifdef __GLEE_WGL_ARB_pbuffer #ifndef GLEE_C_DEFINED_wglCreatePbufferARB #define GLEE_C_DEFINED_wglCreatePbufferARB HPBUFFERARB __stdcall GLee_Lazy_wglCreatePbufferARB(HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int * piAttribList) {if (GLeeInit()) return wglCreatePbufferARB(hDC, iPixelFormat, iWidth, iHeight, piAttribList); return (HPBUFFERARB)0;} GLEEPFNWGLCREATEPBUFFERARBPROC GLeeFuncPtr_wglCreatePbufferARB=GLee_Lazy_wglCreatePbufferARB; #endif #ifndef GLEE_C_DEFINED_wglGetPbufferDCARB #define GLEE_C_DEFINED_wglGetPbufferDCARB HDC __stdcall GLee_Lazy_wglGetPbufferDCARB(HPBUFFERARB hPbuffer) {if (GLeeInit()) return wglGetPbufferDCARB(hPbuffer); return (HDC)0;} GLEEPFNWGLGETPBUFFERDCARBPROC GLeeFuncPtr_wglGetPbufferDCARB=GLee_Lazy_wglGetPbufferDCARB; #endif #ifndef GLEE_C_DEFINED_wglReleasePbufferDCARB #define GLEE_C_DEFINED_wglReleasePbufferDCARB int __stdcall GLee_Lazy_wglReleasePbufferDCARB(HPBUFFERARB hPbuffer, HDC hDC) {if (GLeeInit()) return wglReleasePbufferDCARB(hPbuffer, hDC); return (int)0;} GLEEPFNWGLRELEASEPBUFFERDCARBPROC GLeeFuncPtr_wglReleasePbufferDCARB=GLee_Lazy_wglReleasePbufferDCARB; #endif #ifndef GLEE_C_DEFINED_wglDestroyPbufferARB #define GLEE_C_DEFINED_wglDestroyPbufferARB BOOL __stdcall GLee_Lazy_wglDestroyPbufferARB(HPBUFFERARB hPbuffer) {if (GLeeInit()) return wglDestroyPbufferARB(hPbuffer); return (BOOL)0;} GLEEPFNWGLDESTROYPBUFFERARBPROC GLeeFuncPtr_wglDestroyPbufferARB=GLee_Lazy_wglDestroyPbufferARB; #endif #ifndef GLEE_C_DEFINED_wglQueryPbufferARB #define GLEE_C_DEFINED_wglQueryPbufferARB BOOL __stdcall GLee_Lazy_wglQueryPbufferARB(HPBUFFERARB hPbuffer, int iAttribute, int * piValue) {if (GLeeInit()) return wglQueryPbufferARB(hPbuffer, iAttribute, piValue); return (BOOL)0;} GLEEPFNWGLQUERYPBUFFERARBPROC GLeeFuncPtr_wglQueryPbufferARB=GLee_Lazy_wglQueryPbufferARB; #endif #endif /* WGL_ARB_render_texture */ #ifdef __GLEE_WGL_ARB_render_texture #ifndef GLEE_C_DEFINED_wglBindTexImageARB #define GLEE_C_DEFINED_wglBindTexImageARB BOOL __stdcall GLee_Lazy_wglBindTexImageARB(HPBUFFERARB hPbuffer, int iBuffer) {if (GLeeInit()) return wglBindTexImageARB(hPbuffer, iBuffer); return (BOOL)0;} GLEEPFNWGLBINDTEXIMAGEARBPROC GLeeFuncPtr_wglBindTexImageARB=GLee_Lazy_wglBindTexImageARB; #endif #ifndef GLEE_C_DEFINED_wglReleaseTexImageARB #define GLEE_C_DEFINED_wglReleaseTexImageARB BOOL __stdcall GLee_Lazy_wglReleaseTexImageARB(HPBUFFERARB hPbuffer, int iBuffer) {if (GLeeInit()) return wglReleaseTexImageARB(hPbuffer, iBuffer); return (BOOL)0;} GLEEPFNWGLRELEASETEXIMAGEARBPROC GLeeFuncPtr_wglReleaseTexImageARB=GLee_Lazy_wglReleaseTexImageARB; #endif #ifndef GLEE_C_DEFINED_wglSetPbufferAttribARB #define GLEE_C_DEFINED_wglSetPbufferAttribARB BOOL __stdcall GLee_Lazy_wglSetPbufferAttribARB(HPBUFFERARB hPbuffer, const int * piAttribList) {if (GLeeInit()) return wglSetPbufferAttribARB(hPbuffer, piAttribList); return (BOOL)0;} GLEEPFNWGLSETPBUFFERATTRIBARBPROC GLeeFuncPtr_wglSetPbufferAttribARB=GLee_Lazy_wglSetPbufferAttribARB; #endif #endif /* WGL_ARB_pixel_format_float */ #ifdef __GLEE_WGL_ARB_pixel_format_float #endif /* WGL_ARB_create_context */ #ifdef __GLEE_WGL_ARB_create_context #ifndef GLEE_C_DEFINED_wglCreateContextAttribsARB #define GLEE_C_DEFINED_wglCreateContextAttribsARB HGLRC __stdcall GLee_Lazy_wglCreateContextAttribsARB(HDC hDC, HGLRC hShareContext, const int * attribList) {if (GLeeInit()) return wglCreateContextAttribsARB(hDC, hShareContext, attribList); return (HGLRC)0;} GLEEPFNWGLCREATECONTEXTATTRIBSARBPROC GLeeFuncPtr_wglCreateContextAttribsARB=GLee_Lazy_wglCreateContextAttribsARB; #endif #endif /* WGL_EXT_make_current_read */ #ifdef __GLEE_WGL_EXT_make_current_read #ifndef GLEE_C_DEFINED_wglMakeContextCurrentEXT #define GLEE_C_DEFINED_wglMakeContextCurrentEXT BOOL __stdcall GLee_Lazy_wglMakeContextCurrentEXT(HDC hDrawDC, HDC hReadDC, HGLRC hglrc) {if (GLeeInit()) return wglMakeContextCurrentEXT(hDrawDC, hReadDC, hglrc); return (BOOL)0;} GLEEPFNWGLMAKECONTEXTCURRENTEXTPROC GLeeFuncPtr_wglMakeContextCurrentEXT=GLee_Lazy_wglMakeContextCurrentEXT; #endif #ifndef GLEE_C_DEFINED_wglGetCurrentReadDCEXT #define GLEE_C_DEFINED_wglGetCurrentReadDCEXT HDC __stdcall GLee_Lazy_wglGetCurrentReadDCEXT(void) {if (GLeeInit()) return wglGetCurrentReadDCEXT(); return (HDC)0;} GLEEPFNWGLGETCURRENTREADDCEXTPROC GLeeFuncPtr_wglGetCurrentReadDCEXT=GLee_Lazy_wglGetCurrentReadDCEXT; #endif #endif /* WGL_EXT_pixel_format */ #ifdef __GLEE_WGL_EXT_pixel_format #ifndef GLEE_C_DEFINED_wglGetPixelFormatAttribivEXT #define GLEE_C_DEFINED_wglGetPixelFormatAttribivEXT BOOL __stdcall GLee_Lazy_wglGetPixelFormatAttribivEXT(HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int * piAttributes, int * piValues) {if (GLeeInit()) return wglGetPixelFormatAttribivEXT(hdc, iPixelFormat, iLayerPlane, nAttributes, piAttributes, piValues); return (BOOL)0;} GLEEPFNWGLGETPIXELFORMATATTRIBIVEXTPROC GLeeFuncPtr_wglGetPixelFormatAttribivEXT=GLee_Lazy_wglGetPixelFormatAttribivEXT; #endif #ifndef GLEE_C_DEFINED_wglGetPixelFormatAttribfvEXT #define GLEE_C_DEFINED_wglGetPixelFormatAttribfvEXT BOOL __stdcall GLee_Lazy_wglGetPixelFormatAttribfvEXT(HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int * piAttributes, FLOAT * pfValues) {if (GLeeInit()) return wglGetPixelFormatAttribfvEXT(hdc, iPixelFormat, iLayerPlane, nAttributes, piAttributes, pfValues); return (BOOL)0;} GLEEPFNWGLGETPIXELFORMATATTRIBFVEXTPROC GLeeFuncPtr_wglGetPixelFormatAttribfvEXT=GLee_Lazy_wglGetPixelFormatAttribfvEXT; #endif #ifndef GLEE_C_DEFINED_wglChoosePixelFormatEXT #define GLEE_C_DEFINED_wglChoosePixelFormatEXT BOOL __stdcall GLee_Lazy_wglChoosePixelFormatEXT(HDC hdc, const int * piAttribIList, const FLOAT * pfAttribFList, UINT nMaxFormats, int * piFormats, UINT * nNumFormats) {if (GLeeInit()) return wglChoosePixelFormatEXT(hdc, piAttribIList, pfAttribFList, nMaxFormats, piFormats, nNumFormats); return (BOOL)0;} GLEEPFNWGLCHOOSEPIXELFORMATEXTPROC GLeeFuncPtr_wglChoosePixelFormatEXT=GLee_Lazy_wglChoosePixelFormatEXT; #endif #endif /* WGL_EXT_pbuffer */ #ifdef __GLEE_WGL_EXT_pbuffer #ifndef GLEE_C_DEFINED_wglCreatePbufferEXT #define GLEE_C_DEFINED_wglCreatePbufferEXT HPBUFFEREXT __stdcall GLee_Lazy_wglCreatePbufferEXT(HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int * piAttribList) {if (GLeeInit()) return wglCreatePbufferEXT(hDC, iPixelFormat, iWidth, iHeight, piAttribList); return (HPBUFFEREXT)0;} GLEEPFNWGLCREATEPBUFFEREXTPROC GLeeFuncPtr_wglCreatePbufferEXT=GLee_Lazy_wglCreatePbufferEXT; #endif #ifndef GLEE_C_DEFINED_wglGetPbufferDCEXT #define GLEE_C_DEFINED_wglGetPbufferDCEXT HDC __stdcall GLee_Lazy_wglGetPbufferDCEXT(HPBUFFEREXT hPbuffer) {if (GLeeInit()) return wglGetPbufferDCEXT(hPbuffer); return (HDC)0;} GLEEPFNWGLGETPBUFFERDCEXTPROC GLeeFuncPtr_wglGetPbufferDCEXT=GLee_Lazy_wglGetPbufferDCEXT; #endif #ifndef GLEE_C_DEFINED_wglReleasePbufferDCEXT #define GLEE_C_DEFINED_wglReleasePbufferDCEXT int __stdcall GLee_Lazy_wglReleasePbufferDCEXT(HPBUFFEREXT hPbuffer, HDC hDC) {if (GLeeInit()) return wglReleasePbufferDCEXT(hPbuffer, hDC); return (int)0;} GLEEPFNWGLRELEASEPBUFFERDCEXTPROC GLeeFuncPtr_wglReleasePbufferDCEXT=GLee_Lazy_wglReleasePbufferDCEXT; #endif #ifndef GLEE_C_DEFINED_wglDestroyPbufferEXT #define GLEE_C_DEFINED_wglDestroyPbufferEXT BOOL __stdcall GLee_Lazy_wglDestroyPbufferEXT(HPBUFFEREXT hPbuffer) {if (GLeeInit()) return wglDestroyPbufferEXT(hPbuffer); return (BOOL)0;} GLEEPFNWGLDESTROYPBUFFEREXTPROC GLeeFuncPtr_wglDestroyPbufferEXT=GLee_Lazy_wglDestroyPbufferEXT; #endif #ifndef GLEE_C_DEFINED_wglQueryPbufferEXT #define GLEE_C_DEFINED_wglQueryPbufferEXT BOOL __stdcall GLee_Lazy_wglQueryPbufferEXT(HPBUFFEREXT hPbuffer, int iAttribute, int * piValue) {if (GLeeInit()) return wglQueryPbufferEXT(hPbuffer, iAttribute, piValue); return (BOOL)0;} GLEEPFNWGLQUERYPBUFFEREXTPROC GLeeFuncPtr_wglQueryPbufferEXT=GLee_Lazy_wglQueryPbufferEXT; #endif #endif /* WGL_EXT_depth_float */ #ifdef __GLEE_WGL_EXT_depth_float #endif /* WGL_3DFX_multisample */ #ifdef __GLEE_WGL_3DFX_multisample #endif /* WGL_EXT_multisample */ #ifdef __GLEE_WGL_EXT_multisample #endif /* WGL_I3D_digital_video_control */ #ifdef __GLEE_WGL_I3D_digital_video_control #ifndef GLEE_C_DEFINED_wglGetDigitalVideoParametersI3D #define GLEE_C_DEFINED_wglGetDigitalVideoParametersI3D BOOL __stdcall GLee_Lazy_wglGetDigitalVideoParametersI3D(HDC hDC, int iAttribute, int * piValue) {if (GLeeInit()) return wglGetDigitalVideoParametersI3D(hDC, iAttribute, piValue); return (BOOL)0;} GLEEPFNWGLGETDIGITALVIDEOPARAMETERSI3DPROC GLeeFuncPtr_wglGetDigitalVideoParametersI3D=GLee_Lazy_wglGetDigitalVideoParametersI3D; #endif #ifndef GLEE_C_DEFINED_wglSetDigitalVideoParametersI3D #define GLEE_C_DEFINED_wglSetDigitalVideoParametersI3D BOOL __stdcall GLee_Lazy_wglSetDigitalVideoParametersI3D(HDC hDC, int iAttribute, const int * piValue) {if (GLeeInit()) return wglSetDigitalVideoParametersI3D(hDC, iAttribute, piValue); return (BOOL)0;} GLEEPFNWGLSETDIGITALVIDEOPARAMETERSI3DPROC GLeeFuncPtr_wglSetDigitalVideoParametersI3D=GLee_Lazy_wglSetDigitalVideoParametersI3D; #endif #endif /* WGL_I3D_gamma */ #ifdef __GLEE_WGL_I3D_gamma #ifndef GLEE_C_DEFINED_wglGetGammaTableParametersI3D #define GLEE_C_DEFINED_wglGetGammaTableParametersI3D BOOL __stdcall GLee_Lazy_wglGetGammaTableParametersI3D(HDC hDC, int iAttribute, int * piValue) {if (GLeeInit()) return wglGetGammaTableParametersI3D(hDC, iAttribute, piValue); return (BOOL)0;} GLEEPFNWGLGETGAMMATABLEPARAMETERSI3DPROC GLeeFuncPtr_wglGetGammaTableParametersI3D=GLee_Lazy_wglGetGammaTableParametersI3D; #endif #ifndef GLEE_C_DEFINED_wglSetGammaTableParametersI3D #define GLEE_C_DEFINED_wglSetGammaTableParametersI3D BOOL __stdcall GLee_Lazy_wglSetGammaTableParametersI3D(HDC hDC, int iAttribute, const int * piValue) {if (GLeeInit()) return wglSetGammaTableParametersI3D(hDC, iAttribute, piValue); return (BOOL)0;} GLEEPFNWGLSETGAMMATABLEPARAMETERSI3DPROC GLeeFuncPtr_wglSetGammaTableParametersI3D=GLee_Lazy_wglSetGammaTableParametersI3D; #endif #ifndef GLEE_C_DEFINED_wglGetGammaTableI3D #define GLEE_C_DEFINED_wglGetGammaTableI3D BOOL __stdcall GLee_Lazy_wglGetGammaTableI3D(HDC hDC, int iEntries, USHORT * puRed, USHORT * puGreen, USHORT * puBlue) {if (GLeeInit()) return wglGetGammaTableI3D(hDC, iEntries, puRed, puGreen, puBlue); return (BOOL)0;} GLEEPFNWGLGETGAMMATABLEI3DPROC GLeeFuncPtr_wglGetGammaTableI3D=GLee_Lazy_wglGetGammaTableI3D; #endif #ifndef GLEE_C_DEFINED_wglSetGammaTableI3D #define GLEE_C_DEFINED_wglSetGammaTableI3D BOOL __stdcall GLee_Lazy_wglSetGammaTableI3D(HDC hDC, int iEntries, const USHORT * puRed, const USHORT * puGreen, const USHORT * puBlue) {if (GLeeInit()) return wglSetGammaTableI3D(hDC, iEntries, puRed, puGreen, puBlue); return (BOOL)0;} GLEEPFNWGLSETGAMMATABLEI3DPROC GLeeFuncPtr_wglSetGammaTableI3D=GLee_Lazy_wglSetGammaTableI3D; #endif #endif /* WGL_I3D_genlock */ #ifdef __GLEE_WGL_I3D_genlock #ifndef GLEE_C_DEFINED_wglEnableGenlockI3D #define GLEE_C_DEFINED_wglEnableGenlockI3D BOOL __stdcall GLee_Lazy_wglEnableGenlockI3D(HDC hDC) {if (GLeeInit()) return wglEnableGenlockI3D(hDC); return (BOOL)0;} GLEEPFNWGLENABLEGENLOCKI3DPROC GLeeFuncPtr_wglEnableGenlockI3D=GLee_Lazy_wglEnableGenlockI3D; #endif #ifndef GLEE_C_DEFINED_wglDisableGenlockI3D #define GLEE_C_DEFINED_wglDisableGenlockI3D BOOL __stdcall GLee_Lazy_wglDisableGenlockI3D(HDC hDC) {if (GLeeInit()) return wglDisableGenlockI3D(hDC); return (BOOL)0;} GLEEPFNWGLDISABLEGENLOCKI3DPROC GLeeFuncPtr_wglDisableGenlockI3D=GLee_Lazy_wglDisableGenlockI3D; #endif #ifndef GLEE_C_DEFINED_wglIsEnabledGenlockI3D #define GLEE_C_DEFINED_wglIsEnabledGenlockI3D BOOL __stdcall GLee_Lazy_wglIsEnabledGenlockI3D(HDC hDC, BOOL * pFlag) {if (GLeeInit()) return wglIsEnabledGenlockI3D(hDC, pFlag); return (BOOL)0;} GLEEPFNWGLISENABLEDGENLOCKI3DPROC GLeeFuncPtr_wglIsEnabledGenlockI3D=GLee_Lazy_wglIsEnabledGenlockI3D; #endif #ifndef GLEE_C_DEFINED_wglGenlockSourceI3D #define GLEE_C_DEFINED_wglGenlockSourceI3D BOOL __stdcall GLee_Lazy_wglGenlockSourceI3D(HDC hDC, UINT uSource) {if (GLeeInit()) return wglGenlockSourceI3D(hDC, uSource); return (BOOL)0;} GLEEPFNWGLGENLOCKSOURCEI3DPROC GLeeFuncPtr_wglGenlockSourceI3D=GLee_Lazy_wglGenlockSourceI3D; #endif #ifndef GLEE_C_DEFINED_wglGetGenlockSourceI3D #define GLEE_C_DEFINED_wglGetGenlockSourceI3D BOOL __stdcall GLee_Lazy_wglGetGenlockSourceI3D(HDC hDC, UINT * uSource) {if (GLeeInit()) return wglGetGenlockSourceI3D(hDC, uSource); return (BOOL)0;} GLEEPFNWGLGETGENLOCKSOURCEI3DPROC GLeeFuncPtr_wglGetGenlockSourceI3D=GLee_Lazy_wglGetGenlockSourceI3D; #endif #ifndef GLEE_C_DEFINED_wglGenlockSourceEdgeI3D #define GLEE_C_DEFINED_wglGenlockSourceEdgeI3D BOOL __stdcall GLee_Lazy_wglGenlockSourceEdgeI3D(HDC hDC, UINT uEdge) {if (GLeeInit()) return wglGenlockSourceEdgeI3D(hDC, uEdge); return (BOOL)0;} GLEEPFNWGLGENLOCKSOURCEEDGEI3DPROC GLeeFuncPtr_wglGenlockSourceEdgeI3D=GLee_Lazy_wglGenlockSourceEdgeI3D; #endif #ifndef GLEE_C_DEFINED_wglGetGenlockSourceEdgeI3D #define GLEE_C_DEFINED_wglGetGenlockSourceEdgeI3D BOOL __stdcall GLee_Lazy_wglGetGenlockSourceEdgeI3D(HDC hDC, UINT * uEdge) {if (GLeeInit()) return wglGetGenlockSourceEdgeI3D(hDC, uEdge); return (BOOL)0;} GLEEPFNWGLGETGENLOCKSOURCEEDGEI3DPROC GLeeFuncPtr_wglGetGenlockSourceEdgeI3D=GLee_Lazy_wglGetGenlockSourceEdgeI3D; #endif #ifndef GLEE_C_DEFINED_wglGenlockSampleRateI3D #define GLEE_C_DEFINED_wglGenlockSampleRateI3D BOOL __stdcall GLee_Lazy_wglGenlockSampleRateI3D(HDC hDC, UINT uRate) {if (GLeeInit()) return wglGenlockSampleRateI3D(hDC, uRate); return (BOOL)0;} GLEEPFNWGLGENLOCKSAMPLERATEI3DPROC GLeeFuncPtr_wglGenlockSampleRateI3D=GLee_Lazy_wglGenlockSampleRateI3D; #endif #ifndef GLEE_C_DEFINED_wglGetGenlockSampleRateI3D #define GLEE_C_DEFINED_wglGetGenlockSampleRateI3D BOOL __stdcall GLee_Lazy_wglGetGenlockSampleRateI3D(HDC hDC, UINT * uRate) {if (GLeeInit()) return wglGetGenlockSampleRateI3D(hDC, uRate); return (BOOL)0;} GLEEPFNWGLGETGENLOCKSAMPLERATEI3DPROC GLeeFuncPtr_wglGetGenlockSampleRateI3D=GLee_Lazy_wglGetGenlockSampleRateI3D; #endif #ifndef GLEE_C_DEFINED_wglGenlockSourceDelayI3D #define GLEE_C_DEFINED_wglGenlockSourceDelayI3D BOOL __stdcall GLee_Lazy_wglGenlockSourceDelayI3D(HDC hDC, UINT uDelay) {if (GLeeInit()) return wglGenlockSourceDelayI3D(hDC, uDelay); return (BOOL)0;} GLEEPFNWGLGENLOCKSOURCEDELAYI3DPROC GLeeFuncPtr_wglGenlockSourceDelayI3D=GLee_Lazy_wglGenlockSourceDelayI3D; #endif #ifndef GLEE_C_DEFINED_wglGetGenlockSourceDelayI3D #define GLEE_C_DEFINED_wglGetGenlockSourceDelayI3D BOOL __stdcall GLee_Lazy_wglGetGenlockSourceDelayI3D(HDC hDC, UINT * uDelay) {if (GLeeInit()) return wglGetGenlockSourceDelayI3D(hDC, uDelay); return (BOOL)0;} GLEEPFNWGLGETGENLOCKSOURCEDELAYI3DPROC GLeeFuncPtr_wglGetGenlockSourceDelayI3D=GLee_Lazy_wglGetGenlockSourceDelayI3D; #endif #ifndef GLEE_C_DEFINED_wglQueryGenlockMaxSourceDelayI3D #define GLEE_C_DEFINED_wglQueryGenlockMaxSourceDelayI3D BOOL __stdcall GLee_Lazy_wglQueryGenlockMaxSourceDelayI3D(HDC hDC, UINT * uMaxLineDelay, UINT * uMaxPixelDelay) {if (GLeeInit()) return wglQueryGenlockMaxSourceDelayI3D(hDC, uMaxLineDelay, uMaxPixelDelay); return (BOOL)0;} GLEEPFNWGLQUERYGENLOCKMAXSOURCEDELAYI3DPROC GLeeFuncPtr_wglQueryGenlockMaxSourceDelayI3D=GLee_Lazy_wglQueryGenlockMaxSourceDelayI3D; #endif #endif /* WGL_I3D_image_buffer */ #ifdef __GLEE_WGL_I3D_image_buffer #ifndef GLEE_C_DEFINED_wglCreateImageBufferI3D #define GLEE_C_DEFINED_wglCreateImageBufferI3D LPVOID __stdcall GLee_Lazy_wglCreateImageBufferI3D(HDC hDC, DWORD dwSize, UINT uFlags) {if (GLeeInit()) return wglCreateImageBufferI3D(hDC, dwSize, uFlags); return (LPVOID)0;} GLEEPFNWGLCREATEIMAGEBUFFERI3DPROC GLeeFuncPtr_wglCreateImageBufferI3D=GLee_Lazy_wglCreateImageBufferI3D; #endif #ifndef GLEE_C_DEFINED_wglDestroyImageBufferI3D #define GLEE_C_DEFINED_wglDestroyImageBufferI3D BOOL __stdcall GLee_Lazy_wglDestroyImageBufferI3D(HDC hDC, LPVOID pAddress) {if (GLeeInit()) return wglDestroyImageBufferI3D(hDC, pAddress); return (BOOL)0;} GLEEPFNWGLDESTROYIMAGEBUFFERI3DPROC GLeeFuncPtr_wglDestroyImageBufferI3D=GLee_Lazy_wglDestroyImageBufferI3D; #endif #ifndef GLEE_C_DEFINED_wglAssociateImageBufferEventsI3D #define GLEE_C_DEFINED_wglAssociateImageBufferEventsI3D BOOL __stdcall GLee_Lazy_wglAssociateImageBufferEventsI3D(HDC hDC, const HANDLE * pEvent, const LPVOID * pAddress, const DWORD * pSize, UINT count) {if (GLeeInit()) return wglAssociateImageBufferEventsI3D(hDC, pEvent, pAddress, pSize, count); return (BOOL)0;} GLEEPFNWGLASSOCIATEIMAGEBUFFEREVENTSI3DPROC GLeeFuncPtr_wglAssociateImageBufferEventsI3D=GLee_Lazy_wglAssociateImageBufferEventsI3D; #endif #ifndef GLEE_C_DEFINED_wglReleaseImageBufferEventsI3D #define GLEE_C_DEFINED_wglReleaseImageBufferEventsI3D BOOL __stdcall GLee_Lazy_wglReleaseImageBufferEventsI3D(HDC hDC, const LPVOID * pAddress, UINT count) {if (GLeeInit()) return wglReleaseImageBufferEventsI3D(hDC, pAddress, count); return (BOOL)0;} GLEEPFNWGLRELEASEIMAGEBUFFEREVENTSI3DPROC GLeeFuncPtr_wglReleaseImageBufferEventsI3D=GLee_Lazy_wglReleaseImageBufferEventsI3D; #endif #endif /* WGL_I3D_swap_frame_lock */ #ifdef __GLEE_WGL_I3D_swap_frame_lock #ifndef GLEE_C_DEFINED_wglEnableFrameLockI3D #define GLEE_C_DEFINED_wglEnableFrameLockI3D BOOL __stdcall GLee_Lazy_wglEnableFrameLockI3D(void) {if (GLeeInit()) return wglEnableFrameLockI3D(); return (BOOL)0;} GLEEPFNWGLENABLEFRAMELOCKI3DPROC GLeeFuncPtr_wglEnableFrameLockI3D=GLee_Lazy_wglEnableFrameLockI3D; #endif #ifndef GLEE_C_DEFINED_wglDisableFrameLockI3D #define GLEE_C_DEFINED_wglDisableFrameLockI3D BOOL __stdcall GLee_Lazy_wglDisableFrameLockI3D(void) {if (GLeeInit()) return wglDisableFrameLockI3D(); return (BOOL)0;} GLEEPFNWGLDISABLEFRAMELOCKI3DPROC GLeeFuncPtr_wglDisableFrameLockI3D=GLee_Lazy_wglDisableFrameLockI3D; #endif #ifndef GLEE_C_DEFINED_wglIsEnabledFrameLockI3D #define GLEE_C_DEFINED_wglIsEnabledFrameLockI3D BOOL __stdcall GLee_Lazy_wglIsEnabledFrameLockI3D(BOOL * pFlag) {if (GLeeInit()) return wglIsEnabledFrameLockI3D(pFlag); return (BOOL)0;} GLEEPFNWGLISENABLEDFRAMELOCKI3DPROC GLeeFuncPtr_wglIsEnabledFrameLockI3D=GLee_Lazy_wglIsEnabledFrameLockI3D; #endif #ifndef GLEE_C_DEFINED_wglQueryFrameLockMasterI3D #define GLEE_C_DEFINED_wglQueryFrameLockMasterI3D BOOL __stdcall GLee_Lazy_wglQueryFrameLockMasterI3D(BOOL * pFlag) {if (GLeeInit()) return wglQueryFrameLockMasterI3D(pFlag); return (BOOL)0;} GLEEPFNWGLQUERYFRAMELOCKMASTERI3DPROC GLeeFuncPtr_wglQueryFrameLockMasterI3D=GLee_Lazy_wglQueryFrameLockMasterI3D; #endif #endif /* WGL_NV_render_depth_texture */ #ifdef __GLEE_WGL_NV_render_depth_texture #endif /* WGL_NV_render_texture_rectangle */ #ifdef __GLEE_WGL_NV_render_texture_rectangle #endif /* WGL_ATI_pixel_format_float */ #ifdef __GLEE_WGL_ATI_pixel_format_float #endif /* WGL_NV_float_buffer */ #ifdef __GLEE_WGL_NV_float_buffer #endif /* WGL_3DL_stereo_control */ #ifdef __GLEE_WGL_3DL_stereo_control #endif /* WGL_EXT_pixel_format_packed_float */ #ifdef __GLEE_WGL_EXT_pixel_format_packed_float #endif /* WGL_EXT_framebuffer_sRGB */ #ifdef __GLEE_WGL_EXT_framebuffer_sRGB #endif /* WGL_NV_present_video */ #ifdef __GLEE_WGL_NV_present_video #ifndef GLEE_C_DEFINED_wglEnumerateVideoDevicesNV #define GLEE_C_DEFINED_wglEnumerateVideoDevicesNV int __stdcall GLee_Lazy_wglEnumerateVideoDevicesNV(HDC hDC, HVIDEOOUTPUTDEVICENV * phDeviceList) {if (GLeeInit()) return wglEnumerateVideoDevicesNV(hDC, phDeviceList); return (int)0;} GLEEPFNWGLENUMERATEVIDEODEVICESNVPROC GLeeFuncPtr_wglEnumerateVideoDevicesNV=GLee_Lazy_wglEnumerateVideoDevicesNV; #endif #ifndef GLEE_C_DEFINED_wglBindVideoDeviceNV #define GLEE_C_DEFINED_wglBindVideoDeviceNV BOOL __stdcall GLee_Lazy_wglBindVideoDeviceNV(HDC hDC, unsigned int uVideoSlot, HVIDEOOUTPUTDEVICENV hVideoDevice, const int * piAttribList) {if (GLeeInit()) return wglBindVideoDeviceNV(hDC, uVideoSlot, hVideoDevice, piAttribList); return (BOOL)0;} GLEEPFNWGLBINDVIDEODEVICENVPROC GLeeFuncPtr_wglBindVideoDeviceNV=GLee_Lazy_wglBindVideoDeviceNV; #endif #ifndef GLEE_C_DEFINED_wglQueryCurrentContextNV #define GLEE_C_DEFINED_wglQueryCurrentContextNV BOOL __stdcall GLee_Lazy_wglQueryCurrentContextNV(int iAttribute, int * piValue) {if (GLeeInit()) return wglQueryCurrentContextNV(iAttribute, piValue); return (BOOL)0;} GLEEPFNWGLQUERYCURRENTCONTEXTNVPROC GLeeFuncPtr_wglQueryCurrentContextNV=GLee_Lazy_wglQueryCurrentContextNV; #endif #endif /* WGL_NV_swap_group */ #ifdef __GLEE_WGL_NV_swap_group #ifndef GLEE_C_DEFINED_wglJoinSwapGroupNV #define GLEE_C_DEFINED_wglJoinSwapGroupNV BOOL __stdcall GLee_Lazy_wglJoinSwapGroupNV(HDC hDC, GLuint group) {if (GLeeInit()) return wglJoinSwapGroupNV(hDC, group); return (BOOL)0;} GLEEPFNWGLJOINSWAPGROUPNVPROC GLeeFuncPtr_wglJoinSwapGroupNV=GLee_Lazy_wglJoinSwapGroupNV; #endif #ifndef GLEE_C_DEFINED_wglBindSwapBarrierNV #define GLEE_C_DEFINED_wglBindSwapBarrierNV BOOL __stdcall GLee_Lazy_wglBindSwapBarrierNV(GLuint group, GLuint barrier) {if (GLeeInit()) return wglBindSwapBarrierNV(group, barrier); return (BOOL)0;} GLEEPFNWGLBINDSWAPBARRIERNVPROC GLeeFuncPtr_wglBindSwapBarrierNV=GLee_Lazy_wglBindSwapBarrierNV; #endif #ifndef GLEE_C_DEFINED_wglQuerySwapGroupNV #define GLEE_C_DEFINED_wglQuerySwapGroupNV BOOL __stdcall GLee_Lazy_wglQuerySwapGroupNV(HDC hDC, GLuint * group, GLuint * barrier) {if (GLeeInit()) return wglQuerySwapGroupNV(hDC, group, barrier); return (BOOL)0;} GLEEPFNWGLQUERYSWAPGROUPNVPROC GLeeFuncPtr_wglQuerySwapGroupNV=GLee_Lazy_wglQuerySwapGroupNV; #endif #ifndef GLEE_C_DEFINED_wglQueryMaxSwapGroupsNV #define GLEE_C_DEFINED_wglQueryMaxSwapGroupsNV BOOL __stdcall GLee_Lazy_wglQueryMaxSwapGroupsNV(HDC hDC, GLuint * maxGroups, GLuint * maxBarriers) {if (GLeeInit()) return wglQueryMaxSwapGroupsNV(hDC, maxGroups, maxBarriers); return (BOOL)0;} GLEEPFNWGLQUERYMAXSWAPGROUPSNVPROC GLeeFuncPtr_wglQueryMaxSwapGroupsNV=GLee_Lazy_wglQueryMaxSwapGroupsNV; #endif #ifndef GLEE_C_DEFINED_wglQueryFrameCountNV #define GLEE_C_DEFINED_wglQueryFrameCountNV BOOL __stdcall GLee_Lazy_wglQueryFrameCountNV(HDC hDC, GLuint * count) {if (GLeeInit()) return wglQueryFrameCountNV(hDC, count); return (BOOL)0;} GLEEPFNWGLQUERYFRAMECOUNTNVPROC GLeeFuncPtr_wglQueryFrameCountNV=GLee_Lazy_wglQueryFrameCountNV; #endif #ifndef GLEE_C_DEFINED_wglResetFrameCountNV #define GLEE_C_DEFINED_wglResetFrameCountNV BOOL __stdcall GLee_Lazy_wglResetFrameCountNV(HDC hDC) {if (GLeeInit()) return wglResetFrameCountNV(hDC); return (BOOL)0;} GLEEPFNWGLRESETFRAMECOUNTNVPROC GLeeFuncPtr_wglResetFrameCountNV=GLee_Lazy_wglResetFrameCountNV; #endif #endif /* WGL_NV_gpu_affinity */ #ifdef __GLEE_WGL_NV_gpu_affinity #ifndef GLEE_C_DEFINED_wglEnumGpusNV #define GLEE_C_DEFINED_wglEnumGpusNV BOOL __stdcall GLee_Lazy_wglEnumGpusNV(UINT iGpuIndex, HGPUNV * phGpu) {if (GLeeInit()) return wglEnumGpusNV(iGpuIndex, phGpu); return (BOOL)0;} GLEEPFNWGLENUMGPUSNVPROC GLeeFuncPtr_wglEnumGpusNV=GLee_Lazy_wglEnumGpusNV; #endif #ifndef GLEE_C_DEFINED_wglEnumGpuDevicesNV #define GLEE_C_DEFINED_wglEnumGpuDevicesNV BOOL __stdcall GLee_Lazy_wglEnumGpuDevicesNV(HGPUNV hGpu, UINT iDeviceIndex, PGPU_DEVICE lpGpuDevice) {if (GLeeInit()) return wglEnumGpuDevicesNV(hGpu, iDeviceIndex, lpGpuDevice); return (BOOL)0;} GLEEPFNWGLENUMGPUDEVICESNVPROC GLeeFuncPtr_wglEnumGpuDevicesNV=GLee_Lazy_wglEnumGpuDevicesNV; #endif #ifndef GLEE_C_DEFINED_wglCreateAffinityDCNV #define GLEE_C_DEFINED_wglCreateAffinityDCNV HDC __stdcall GLee_Lazy_wglCreateAffinityDCNV(const HGPUNV * phGpuList) {if (GLeeInit()) return wglCreateAffinityDCNV(phGpuList); return (HDC)0;} GLEEPFNWGLCREATEAFFINITYDCNVPROC GLeeFuncPtr_wglCreateAffinityDCNV=GLee_Lazy_wglCreateAffinityDCNV; #endif #ifndef GLEE_C_DEFINED_wglEnumGpusFromAffinityDCNV #define GLEE_C_DEFINED_wglEnumGpusFromAffinityDCNV BOOL __stdcall GLee_Lazy_wglEnumGpusFromAffinityDCNV(HDC hAffinityDC, UINT iGpuIndex, HGPUNV * hGpu) {if (GLeeInit()) return wglEnumGpusFromAffinityDCNV(hAffinityDC, iGpuIndex, hGpu); return (BOOL)0;} GLEEPFNWGLENUMGPUSFROMAFFINITYDCNVPROC GLeeFuncPtr_wglEnumGpusFromAffinityDCNV=GLee_Lazy_wglEnumGpusFromAffinityDCNV; #endif #ifndef GLEE_C_DEFINED_wglDeleteDCNV #define GLEE_C_DEFINED_wglDeleteDCNV BOOL __stdcall GLee_Lazy_wglDeleteDCNV(HDC hdc) {if (GLeeInit()) return wglDeleteDCNV(hdc); return (BOOL)0;} GLEEPFNWGLDELETEDCNVPROC GLeeFuncPtr_wglDeleteDCNV=GLee_Lazy_wglDeleteDCNV; #endif #endif /* WGL_EXT_display_color_table */ #ifdef __GLEE_WGL_EXT_display_color_table #ifndef GLEE_C_DEFINED_wglCreateDisplayColorTableEXT #define GLEE_C_DEFINED_wglCreateDisplayColorTableEXT GLboolean __stdcall GLee_Lazy_wglCreateDisplayColorTableEXT(GLushort id) {if (GLeeInit()) return wglCreateDisplayColorTableEXT(id); return (GLboolean)0;} GLEEPFNWGLCREATEDISPLAYCOLORTABLEEXTPROC GLeeFuncPtr_wglCreateDisplayColorTableEXT=GLee_Lazy_wglCreateDisplayColorTableEXT; #endif #ifndef GLEE_C_DEFINED_wglLoadDisplayColorTableEXT #define GLEE_C_DEFINED_wglLoadDisplayColorTableEXT GLboolean __stdcall GLee_Lazy_wglLoadDisplayColorTableEXT(const GLushort * table, GLuint length) {if (GLeeInit()) return wglLoadDisplayColorTableEXT(table, length); return (GLboolean)0;} GLEEPFNWGLLOADDISPLAYCOLORTABLEEXTPROC GLeeFuncPtr_wglLoadDisplayColorTableEXT=GLee_Lazy_wglLoadDisplayColorTableEXT; #endif #ifndef GLEE_C_DEFINED_wglBindDisplayColorTableEXT #define GLEE_C_DEFINED_wglBindDisplayColorTableEXT GLboolean __stdcall GLee_Lazy_wglBindDisplayColorTableEXT(GLushort id) {if (GLeeInit()) return wglBindDisplayColorTableEXT(id); return (GLboolean)0;} GLEEPFNWGLBINDDISPLAYCOLORTABLEEXTPROC GLeeFuncPtr_wglBindDisplayColorTableEXT=GLee_Lazy_wglBindDisplayColorTableEXT; #endif #ifndef GLEE_C_DEFINED_wglDestroyDisplayColorTableEXT #define GLEE_C_DEFINED_wglDestroyDisplayColorTableEXT VOID __stdcall GLee_Lazy_wglDestroyDisplayColorTableEXT(GLushort id) {if (GLeeInit()) wglDestroyDisplayColorTableEXT(id);} GLEEPFNWGLDESTROYDISPLAYCOLORTABLEEXTPROC GLeeFuncPtr_wglDestroyDisplayColorTableEXT=GLee_Lazy_wglDestroyDisplayColorTableEXT; #endif #endif /* WGL_EXT_extensions_string */ #ifdef __GLEE_WGL_EXT_extensions_string #ifndef GLEE_C_DEFINED_wglGetExtensionsStringEXT #define GLEE_C_DEFINED_wglGetExtensionsStringEXT const char * __stdcall GLee_Lazy_wglGetExtensionsStringEXT(void) {if (GLeeInit()) return wglGetExtensionsStringEXT(); return (const char *)0;} GLEEPFNWGLGETEXTENSIONSSTRINGEXTPROC GLeeFuncPtr_wglGetExtensionsStringEXT=GLee_Lazy_wglGetExtensionsStringEXT; #endif #endif /* WGL_EXT_swap_control */ #ifdef __GLEE_WGL_EXT_swap_control #ifndef GLEE_C_DEFINED_wglSwapIntervalEXT #define GLEE_C_DEFINED_wglSwapIntervalEXT BOOL __stdcall GLee_Lazy_wglSwapIntervalEXT(int interval) {if (GLeeInit()) return wglSwapIntervalEXT(interval); return (BOOL)0;} GLEEPFNWGLSWAPINTERVALEXTPROC GLeeFuncPtr_wglSwapIntervalEXT=GLee_Lazy_wglSwapIntervalEXT; #endif #ifndef GLEE_C_DEFINED_wglGetSwapIntervalEXT #define GLEE_C_DEFINED_wglGetSwapIntervalEXT int __stdcall GLee_Lazy_wglGetSwapIntervalEXT(void) {if (GLeeInit()) return wglGetSwapIntervalEXT(); return (int)0;} GLEEPFNWGLGETSWAPINTERVALEXTPROC GLeeFuncPtr_wglGetSwapIntervalEXT=GLee_Lazy_wglGetSwapIntervalEXT; #endif #endif /* WGL_NV_vertex_array_range */ #ifdef __GLEE_WGL_NV_vertex_array_range #ifndef GLEE_C_DEFINED_wglAllocateMemoryNV #define GLEE_C_DEFINED_wglAllocateMemoryNV void* __stdcall GLee_Lazy_wglAllocateMemoryNV(GLsizei size, GLfloat readfreq, GLfloat writefreq, GLfloat priority) {if (GLeeInit()) return wglAllocateMemoryNV(size, readfreq, writefreq, priority); return (void*)0;} GLEEPFNWGLALLOCATEMEMORYNVPROC GLeeFuncPtr_wglAllocateMemoryNV=GLee_Lazy_wglAllocateMemoryNV; #endif #ifndef GLEE_C_DEFINED_wglFreeMemoryNV #define GLEE_C_DEFINED_wglFreeMemoryNV void __stdcall GLee_Lazy_wglFreeMemoryNV(void * pointer) {if (GLeeInit()) wglFreeMemoryNV(pointer);} GLEEPFNWGLFREEMEMORYNVPROC GLeeFuncPtr_wglFreeMemoryNV=GLee_Lazy_wglFreeMemoryNV; #endif #endif /* WGL_OML_sync_control */ #ifdef __GLEE_WGL_OML_sync_control #ifndef GLEE_C_DEFINED_wglGetSyncValuesOML #define GLEE_C_DEFINED_wglGetSyncValuesOML BOOL __stdcall GLee_Lazy_wglGetSyncValuesOML(HDC hdc, INT64 * ust, INT64 * msc, INT64 * sbc) {if (GLeeInit()) return wglGetSyncValuesOML(hdc, ust, msc, sbc); return (BOOL)0;} GLEEPFNWGLGETSYNCVALUESOMLPROC GLeeFuncPtr_wglGetSyncValuesOML=GLee_Lazy_wglGetSyncValuesOML; #endif #ifndef GLEE_C_DEFINED_wglGetMscRateOML #define GLEE_C_DEFINED_wglGetMscRateOML BOOL __stdcall GLee_Lazy_wglGetMscRateOML(HDC hdc, INT32 * numerator, INT32 * denominator) {if (GLeeInit()) return wglGetMscRateOML(hdc, numerator, denominator); return (BOOL)0;} GLEEPFNWGLGETMSCRATEOMLPROC GLeeFuncPtr_wglGetMscRateOML=GLee_Lazy_wglGetMscRateOML; #endif #ifndef GLEE_C_DEFINED_wglSwapBuffersMscOML #define GLEE_C_DEFINED_wglSwapBuffersMscOML INT64 __stdcall GLee_Lazy_wglSwapBuffersMscOML(HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder) {if (GLeeInit()) return wglSwapBuffersMscOML(hdc, target_msc, divisor, remainder); return (INT64)0;} GLEEPFNWGLSWAPBUFFERSMSCOMLPROC GLeeFuncPtr_wglSwapBuffersMscOML=GLee_Lazy_wglSwapBuffersMscOML; #endif #ifndef GLEE_C_DEFINED_wglSwapLayerBuffersMscOML #define GLEE_C_DEFINED_wglSwapLayerBuffersMscOML INT64 __stdcall GLee_Lazy_wglSwapLayerBuffersMscOML(HDC hdc, int fuPlanes, INT64 target_msc, INT64 divisor, INT64 remainder) {if (GLeeInit()) return wglSwapLayerBuffersMscOML(hdc, fuPlanes, target_msc, divisor, remainder); return (INT64)0;} GLEEPFNWGLSWAPLAYERBUFFERSMSCOMLPROC GLeeFuncPtr_wglSwapLayerBuffersMscOML=GLee_Lazy_wglSwapLayerBuffersMscOML; #endif #ifndef GLEE_C_DEFINED_wglWaitForMscOML #define GLEE_C_DEFINED_wglWaitForMscOML BOOL __stdcall GLee_Lazy_wglWaitForMscOML(HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder, INT64 * ust, INT64 * msc, INT64 * sbc) {if (GLeeInit()) return wglWaitForMscOML(hdc, target_msc, divisor, remainder, ust, msc, sbc); return (BOOL)0;} GLEEPFNWGLWAITFORMSCOMLPROC GLeeFuncPtr_wglWaitForMscOML=GLee_Lazy_wglWaitForMscOML; #endif #ifndef GLEE_C_DEFINED_wglWaitForSbcOML #define GLEE_C_DEFINED_wglWaitForSbcOML BOOL __stdcall GLee_Lazy_wglWaitForSbcOML(HDC hdc, INT64 target_sbc, INT64 * ust, INT64 * msc, INT64 * sbc) {if (GLeeInit()) return wglWaitForSbcOML(hdc, target_sbc, ust, msc, sbc); return (BOOL)0;} GLEEPFNWGLWAITFORSBCOMLPROC GLeeFuncPtr_wglWaitForSbcOML=GLee_Lazy_wglWaitForSbcOML; #endif #endif /* WGL_I3D_swap_frame_usage */ #ifdef __GLEE_WGL_I3D_swap_frame_usage #ifndef GLEE_C_DEFINED_wglGetFrameUsageI3D #define GLEE_C_DEFINED_wglGetFrameUsageI3D BOOL __stdcall GLee_Lazy_wglGetFrameUsageI3D(float * pUsage) {if (GLeeInit()) return wglGetFrameUsageI3D(pUsage); return (BOOL)0;} GLEEPFNWGLGETFRAMEUSAGEI3DPROC GLeeFuncPtr_wglGetFrameUsageI3D=GLee_Lazy_wglGetFrameUsageI3D; #endif #ifndef GLEE_C_DEFINED_wglBeginFrameTrackingI3D #define GLEE_C_DEFINED_wglBeginFrameTrackingI3D BOOL __stdcall GLee_Lazy_wglBeginFrameTrackingI3D(void) {if (GLeeInit()) return wglBeginFrameTrackingI3D(); return (BOOL)0;} GLEEPFNWGLBEGINFRAMETRACKINGI3DPROC GLeeFuncPtr_wglBeginFrameTrackingI3D=GLee_Lazy_wglBeginFrameTrackingI3D; #endif #ifndef GLEE_C_DEFINED_wglEndFrameTrackingI3D #define GLEE_C_DEFINED_wglEndFrameTrackingI3D BOOL __stdcall GLee_Lazy_wglEndFrameTrackingI3D(void) {if (GLeeInit()) return wglEndFrameTrackingI3D(); return (BOOL)0;} GLEEPFNWGLENDFRAMETRACKINGI3DPROC GLeeFuncPtr_wglEndFrameTrackingI3D=GLee_Lazy_wglEndFrameTrackingI3D; #endif #ifndef GLEE_C_DEFINED_wglQueryFrameTrackingI3D #define GLEE_C_DEFINED_wglQueryFrameTrackingI3D BOOL __stdcall GLee_Lazy_wglQueryFrameTrackingI3D(DWORD * pFrameCount, DWORD * pMissedFrames, float * pLastMissedUsage) {if (GLeeInit()) return wglQueryFrameTrackingI3D(pFrameCount, pMissedFrames, pLastMissedUsage); return (BOOL)0;} GLEEPFNWGLQUERYFRAMETRACKINGI3DPROC GLeeFuncPtr_wglQueryFrameTrackingI3D=GLee_Lazy_wglQueryFrameTrackingI3D; #endif #endif /* WGL_NV_video_output */ #ifdef __GLEE_WGL_NV_video_output #ifndef GLEE_C_DEFINED_wglGetVideoDeviceNV #define GLEE_C_DEFINED_wglGetVideoDeviceNV BOOL __stdcall GLee_Lazy_wglGetVideoDeviceNV(HDC hDC, int numDevices, HPVIDEODEV * hVideoDevice) {if (GLeeInit()) return wglGetVideoDeviceNV(hDC, numDevices, hVideoDevice); return (BOOL)0;} GLEEPFNWGLGETVIDEODEVICENVPROC GLeeFuncPtr_wglGetVideoDeviceNV=GLee_Lazy_wglGetVideoDeviceNV; #endif #ifndef GLEE_C_DEFINED_wglReleaseVideoDeviceNV #define GLEE_C_DEFINED_wglReleaseVideoDeviceNV BOOL __stdcall GLee_Lazy_wglReleaseVideoDeviceNV(HPVIDEODEV hVideoDevice) {if (GLeeInit()) return wglReleaseVideoDeviceNV(hVideoDevice); return (BOOL)0;} GLEEPFNWGLRELEASEVIDEODEVICENVPROC GLeeFuncPtr_wglReleaseVideoDeviceNV=GLee_Lazy_wglReleaseVideoDeviceNV; #endif #ifndef GLEE_C_DEFINED_wglBindVideoImageNV #define GLEE_C_DEFINED_wglBindVideoImageNV BOOL __stdcall GLee_Lazy_wglBindVideoImageNV(HPVIDEODEV hVideoDevice, HPBUFFERARB hPbuffer, int iVideoBuffer) {if (GLeeInit()) return wglBindVideoImageNV(hVideoDevice, hPbuffer, iVideoBuffer); return (BOOL)0;} GLEEPFNWGLBINDVIDEOIMAGENVPROC GLeeFuncPtr_wglBindVideoImageNV=GLee_Lazy_wglBindVideoImageNV; #endif #ifndef GLEE_C_DEFINED_wglReleaseVideoImageNV #define GLEE_C_DEFINED_wglReleaseVideoImageNV BOOL __stdcall GLee_Lazy_wglReleaseVideoImageNV(HPBUFFERARB hPbuffer, int iVideoBuffer) {if (GLeeInit()) return wglReleaseVideoImageNV(hPbuffer, iVideoBuffer); return (BOOL)0;} GLEEPFNWGLRELEASEVIDEOIMAGENVPROC GLeeFuncPtr_wglReleaseVideoImageNV=GLee_Lazy_wglReleaseVideoImageNV; #endif #ifndef GLEE_C_DEFINED_wglSendPbufferToVideoNV #define GLEE_C_DEFINED_wglSendPbufferToVideoNV BOOL __stdcall GLee_Lazy_wglSendPbufferToVideoNV(HPBUFFERARB hPbuffer, int iBufferType, unsigned long * pulCounterPbuffer, BOOL bBlock) {if (GLeeInit()) return wglSendPbufferToVideoNV(hPbuffer, iBufferType, pulCounterPbuffer, bBlock); return (BOOL)0;} GLEEPFNWGLSENDPBUFFERTOVIDEONVPROC GLeeFuncPtr_wglSendPbufferToVideoNV=GLee_Lazy_wglSendPbufferToVideoNV; #endif #ifndef GLEE_C_DEFINED_wglGetVideoInfoNV #define GLEE_C_DEFINED_wglGetVideoInfoNV BOOL __stdcall GLee_Lazy_wglGetVideoInfoNV(HPVIDEODEV hpVideoDevice, unsigned long * pulCounterOutputPbuffer, unsigned long * pulCounterOutputVideo) {if (GLeeInit()) return wglGetVideoInfoNV(hpVideoDevice, pulCounterOutputPbuffer, pulCounterOutputVideo); return (BOOL)0;} GLEEPFNWGLGETVIDEOINFONVPROC GLeeFuncPtr_wglGetVideoInfoNV=GLee_Lazy_wglGetVideoInfoNV; #endif #endif #elif defined(__APPLE__) || defined(__APPLE_CC__) #else /* GLX */ /* Extension querying variables */ GLboolean _GLEE_GLX_VERSION_1_3 = GL_FALSE; GLboolean _GLEE_GLX_VERSION_1_4 = GL_FALSE; GLboolean _GLEE_GLX_ARB_multisample = GL_FALSE; GLboolean _GLEE_GLX_ARB_fbconfig_float = GL_FALSE; GLboolean _GLEE_GLX_ARB_create_context = GL_FALSE; GLboolean _GLEE_GLX_SGIS_multisample = GL_FALSE; GLboolean _GLEE_GLX_EXT_visual_info = GL_FALSE; GLboolean _GLEE_GLX_SGI_swap_control = GL_FALSE; GLboolean _GLEE_GLX_SGI_video_sync = GL_FALSE; GLboolean _GLEE_GLX_SGI_make_current_read = GL_FALSE; GLboolean _GLEE_GLX_EXT_visual_rating = GL_FALSE; GLboolean _GLEE_GLX_EXT_import_context = GL_FALSE; GLboolean _GLEE_GLX_SGIX_fbconfig = GL_FALSE; GLboolean _GLEE_GLX_SGIX_pbuffer = GL_FALSE; GLboolean _GLEE_GLX_SGI_cushion = GL_FALSE; GLboolean _GLEE_GLX_SGIX_video_resize = GL_FALSE; GLboolean _GLEE_GLX_SGIX_swap_group = GL_FALSE; GLboolean _GLEE_GLX_SGIX_swap_barrier = GL_FALSE; GLboolean _GLEE_GLX_SGIS_blended_overlay = GL_FALSE; GLboolean _GLEE_GLX_SGIS_shared_multisample = GL_FALSE; GLboolean _GLEE_GLX_SUN_get_transparent_index = GL_FALSE; GLboolean _GLEE_GLX_3DFX_multisample = GL_FALSE; GLboolean _GLEE_GLX_MESA_copy_sub_buffer = GL_FALSE; GLboolean _GLEE_GLX_MESA_pixmap_colormap = GL_FALSE; GLboolean _GLEE_GLX_MESA_release_buffers = GL_FALSE; GLboolean _GLEE_GLX_MESA_set_3dfx_mode = GL_FALSE; GLboolean _GLEE_GLX_SGIX_visual_select_group = GL_FALSE; GLboolean _GLEE_GLX_OML_swap_method = GL_FALSE; GLboolean _GLEE_GLX_OML_sync_control = GL_FALSE; GLboolean _GLEE_GLX_NV_float_buffer = GL_FALSE; GLboolean _GLEE_GLX_SGIX_hyperpipe = GL_FALSE; GLboolean _GLEE_GLX_MESA_agp_offset = GL_FALSE; GLboolean _GLEE_GLX_EXT_fbconfig_packed_float = GL_FALSE; GLboolean _GLEE_GLX_EXT_framebuffer_sRGB = GL_FALSE; GLboolean _GLEE_GLX_EXT_texture_from_pixmap = GL_FALSE; GLboolean _GLEE_GLX_NV_present_video = GL_FALSE; GLboolean _GLEE_GLX_NV_video_out = GL_FALSE; GLboolean _GLEE_GLX_NV_swap_group = GL_FALSE; GLboolean _GLEE_GLX_EXT_scene_marker = GL_FALSE; GLboolean _GLEE_GLX_NV_video_output = GL_FALSE; /* GLX Extension names */ char __GLeeGLXExtensionNames[40][30]={ "GLX_VERSION_1_3", "GLX_VERSION_1_4", "GLX_ARB_multisample", "GLX_ARB_fbconfig_float", "GLX_ARB_create_context", "GLX_SGIS_multisample", "GLX_EXT_visual_info", "GLX_SGI_swap_control", "GLX_SGI_video_sync", "GLX_SGI_make_current_read", "GLX_EXT_visual_rating", "GLX_EXT_import_context", "GLX_SGIX_fbconfig", "GLX_SGIX_pbuffer", "GLX_SGI_cushion", "GLX_SGIX_video_resize", "GLX_SGIX_swap_group", "GLX_SGIX_swap_barrier", "GLX_SGIS_blended_overlay", "GLX_SGIS_shared_multisample", "GLX_SUN_get_transparent_index", "GLX_3DFX_multisample", "GLX_MESA_copy_sub_buffer", "GLX_MESA_pixmap_colormap", "GLX_MESA_release_buffers", "GLX_MESA_set_3dfx_mode", "GLX_SGIX_visual_select_group", "GLX_OML_swap_method", "GLX_OML_sync_control", "GLX_NV_float_buffer", "GLX_SGIX_hyperpipe", "GLX_MESA_agp_offset", "GLX_EXT_fbconfig_packed_float", "GLX_EXT_framebuffer_sRGB", "GLX_EXT_texture_from_pixmap", "GLX_NV_present_video", "GLX_NV_video_out", "GLX_NV_swap_group", "GLX_EXT_scene_marker", "GLX_NV_video_output" }; int __GLeeGLXNumExtensions=40; /* GLX_VERSION_1_3 */ #ifdef __GLEE_GLX_VERSION_1_3 #ifndef GLEE_C_DEFINED_glXGetFBConfigs #define GLEE_C_DEFINED_glXGetFBConfigs GLXFBConfig * __stdcall GLee_Lazy_glXGetFBConfigs(Display * dpy, int screen, int * nelements) {if (GLeeInit()) return glXGetFBConfigs(dpy, screen, nelements); return (GLXFBConfig *)0;} GLEEPFNGLXGETFBCONFIGSPROC GLeeFuncPtr_glXGetFBConfigs=GLee_Lazy_glXGetFBConfigs; #endif #ifndef GLEE_C_DEFINED_glXChooseFBConfig #define GLEE_C_DEFINED_glXChooseFBConfig GLXFBConfig * __stdcall GLee_Lazy_glXChooseFBConfig(Display * dpy, int screen, const int * attrib_list, int * nelements) {if (GLeeInit()) return glXChooseFBConfig(dpy, screen, attrib_list, nelements); return (GLXFBConfig *)0;} GLEEPFNGLXCHOOSEFBCONFIGPROC GLeeFuncPtr_glXChooseFBConfig=GLee_Lazy_glXChooseFBConfig; #endif #ifndef GLEE_C_DEFINED_glXGetFBConfigAttrib #define GLEE_C_DEFINED_glXGetFBConfigAttrib int __stdcall GLee_Lazy_glXGetFBConfigAttrib(Display * dpy, GLXFBConfig config, int attribute, int * value) {if (GLeeInit()) return glXGetFBConfigAttrib(dpy, config, attribute, value); return (int)0;} GLEEPFNGLXGETFBCONFIGATTRIBPROC GLeeFuncPtr_glXGetFBConfigAttrib=GLee_Lazy_glXGetFBConfigAttrib; #endif #ifndef GLEE_C_DEFINED_glXGetVisualFromFBConfig #define GLEE_C_DEFINED_glXGetVisualFromFBConfig XVisualInfo * __stdcall GLee_Lazy_glXGetVisualFromFBConfig(Display * dpy, GLXFBConfig config) {if (GLeeInit()) return glXGetVisualFromFBConfig(dpy, config); return (XVisualInfo *)0;} GLEEPFNGLXGETVISUALFROMFBCONFIGPROC GLeeFuncPtr_glXGetVisualFromFBConfig=GLee_Lazy_glXGetVisualFromFBConfig; #endif #ifndef GLEE_C_DEFINED_glXCreateWindow #define GLEE_C_DEFINED_glXCreateWindow GLXWindow __stdcall GLee_Lazy_glXCreateWindow(Display * dpy, GLXFBConfig config, Window win, const int * attrib_list) {if (GLeeInit()) return glXCreateWindow(dpy, config, win, attrib_list); return (GLXWindow)0;} GLEEPFNGLXCREATEWINDOWPROC GLeeFuncPtr_glXCreateWindow=GLee_Lazy_glXCreateWindow; #endif #ifndef GLEE_C_DEFINED_glXDestroyWindow #define GLEE_C_DEFINED_glXDestroyWindow void __stdcall GLee_Lazy_glXDestroyWindow(Display * dpy, GLXWindow win) {if (GLeeInit()) glXDestroyWindow(dpy, win);} GLEEPFNGLXDESTROYWINDOWPROC GLeeFuncPtr_glXDestroyWindow=GLee_Lazy_glXDestroyWindow; #endif #ifndef GLEE_C_DEFINED_glXCreatePixmap #define GLEE_C_DEFINED_glXCreatePixmap GLXPixmap __stdcall GLee_Lazy_glXCreatePixmap(Display * dpy, GLXFBConfig config, Pixmap pixmap, const int * attrib_list) {if (GLeeInit()) return glXCreatePixmap(dpy, config, pixmap, attrib_list); return (GLXPixmap)0;} GLEEPFNGLXCREATEPIXMAPPROC GLeeFuncPtr_glXCreatePixmap=GLee_Lazy_glXCreatePixmap; #endif #ifndef GLEE_C_DEFINED_glXDestroyPixmap #define GLEE_C_DEFINED_glXDestroyPixmap void __stdcall GLee_Lazy_glXDestroyPixmap(Display * dpy, GLXPixmap pixmap) {if (GLeeInit()) glXDestroyPixmap(dpy, pixmap);} GLEEPFNGLXDESTROYPIXMAPPROC GLeeFuncPtr_glXDestroyPixmap=GLee_Lazy_glXDestroyPixmap; #endif #ifndef GLEE_C_DEFINED_glXCreatePbuffer #define GLEE_C_DEFINED_glXCreatePbuffer GLXPbuffer __stdcall GLee_Lazy_glXCreatePbuffer(Display * dpy, GLXFBConfig config, const int * attrib_list) {if (GLeeInit()) return glXCreatePbuffer(dpy, config, attrib_list); return (GLXPbuffer)0;} GLEEPFNGLXCREATEPBUFFERPROC GLeeFuncPtr_glXCreatePbuffer=GLee_Lazy_glXCreatePbuffer; #endif #ifndef GLEE_C_DEFINED_glXDestroyPbuffer #define GLEE_C_DEFINED_glXDestroyPbuffer void __stdcall GLee_Lazy_glXDestroyPbuffer(Display * dpy, GLXPbuffer pbuf) {if (GLeeInit()) glXDestroyPbuffer(dpy, pbuf);} GLEEPFNGLXDESTROYPBUFFERPROC GLeeFuncPtr_glXDestroyPbuffer=GLee_Lazy_glXDestroyPbuffer; #endif #ifndef GLEE_C_DEFINED_glXQueryDrawable #define GLEE_C_DEFINED_glXQueryDrawable void __stdcall GLee_Lazy_glXQueryDrawable(Display * dpy, GLXDrawable draw, int attribute, unsigned int * value) {if (GLeeInit()) glXQueryDrawable(dpy, draw, attribute, value);} GLEEPFNGLXQUERYDRAWABLEPROC GLeeFuncPtr_glXQueryDrawable=GLee_Lazy_glXQueryDrawable; #endif #ifndef GLEE_C_DEFINED_glXCreateNewContext #define GLEE_C_DEFINED_glXCreateNewContext GLXContext __stdcall GLee_Lazy_glXCreateNewContext(Display * dpy, GLXFBConfig config, int render_type, GLXContext share_list, Bool direct) {if (GLeeInit()) return glXCreateNewContext(dpy, config, render_type, share_list, direct); return (GLXContext)0;} GLEEPFNGLXCREATENEWCONTEXTPROC GLeeFuncPtr_glXCreateNewContext=GLee_Lazy_glXCreateNewContext; #endif #ifndef GLEE_C_DEFINED_glXMakeContextCurrent #define GLEE_C_DEFINED_glXMakeContextCurrent Bool __stdcall GLee_Lazy_glXMakeContextCurrent(Display * dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx) {if (GLeeInit()) return glXMakeContextCurrent(dpy, draw, read, ctx); return (Bool)0;} GLEEPFNGLXMAKECONTEXTCURRENTPROC GLeeFuncPtr_glXMakeContextCurrent=GLee_Lazy_glXMakeContextCurrent; #endif #ifndef GLEE_C_DEFINED_glXGetCurrentReadDrawable #define GLEE_C_DEFINED_glXGetCurrentReadDrawable GLXDrawable __stdcall GLee_Lazy_glXGetCurrentReadDrawable(void) {if (GLeeInit()) return glXGetCurrentReadDrawable(); return (GLXDrawable)0;} GLEEPFNGLXGETCURRENTREADDRAWABLEPROC GLeeFuncPtr_glXGetCurrentReadDrawable=GLee_Lazy_glXGetCurrentReadDrawable; #endif #ifndef GLEE_C_DEFINED_glXGetCurrentDisplay #define GLEE_C_DEFINED_glXGetCurrentDisplay Display * __stdcall GLee_Lazy_glXGetCurrentDisplay(void) {if (GLeeInit()) return glXGetCurrentDisplay(); return (Display *)0;} GLEEPFNGLXGETCURRENTDISPLAYPROC GLeeFuncPtr_glXGetCurrentDisplay=GLee_Lazy_glXGetCurrentDisplay; #endif #ifndef GLEE_C_DEFINED_glXQueryContext #define GLEE_C_DEFINED_glXQueryContext int __stdcall GLee_Lazy_glXQueryContext(Display * dpy, GLXContext ctx, int attribute, int * value) {if (GLeeInit()) return glXQueryContext(dpy, ctx, attribute, value); return (int)0;} GLEEPFNGLXQUERYCONTEXTPROC GLeeFuncPtr_glXQueryContext=GLee_Lazy_glXQueryContext; #endif #ifndef GLEE_C_DEFINED_glXSelectEvent #define GLEE_C_DEFINED_glXSelectEvent void __stdcall GLee_Lazy_glXSelectEvent(Display * dpy, GLXDrawable draw, unsigned long event_mask) {if (GLeeInit()) glXSelectEvent(dpy, draw, event_mask);} GLEEPFNGLXSELECTEVENTPROC GLeeFuncPtr_glXSelectEvent=GLee_Lazy_glXSelectEvent; #endif #ifndef GLEE_C_DEFINED_glXGetSelectedEvent #define GLEE_C_DEFINED_glXGetSelectedEvent void __stdcall GLee_Lazy_glXGetSelectedEvent(Display * dpy, GLXDrawable draw, unsigned long * event_mask) {if (GLeeInit()) glXGetSelectedEvent(dpy, draw, event_mask);} GLEEPFNGLXGETSELECTEDEVENTPROC GLeeFuncPtr_glXGetSelectedEvent=GLee_Lazy_glXGetSelectedEvent; #endif #endif /* GLX_VERSION_1_4 */ #ifdef __GLEE_GLX_VERSION_1_4 #ifndef GLEE_C_DEFINED_glXGetProcAddress #define GLEE_C_DEFINED_glXGetProcAddress __GLXextFuncPtr __stdcall GLee_Lazy_glXGetProcAddress(const GLubyte * procName) {if (GLeeInit()) return glXGetProcAddress(procName); return (__GLXextFuncPtr)0;} GLEEPFNGLXGETPROCADDRESSPROC GLeeFuncPtr_glXGetProcAddress=GLee_Lazy_glXGetProcAddress; #endif #endif /* GLX_ARB_multisample */ #ifdef __GLEE_GLX_ARB_multisample #endif /* GLX_ARB_fbconfig_float */ #ifdef __GLEE_GLX_ARB_fbconfig_float #endif /* GLX_ARB_create_context */ #ifdef __GLEE_GLX_ARB_create_context #ifndef GLEE_C_DEFINED_glXCreateContextAttribsARB #define GLEE_C_DEFINED_glXCreateContextAttribsARB GLXContext __stdcall GLee_Lazy_glXCreateContextAttribsARB(Display * dpy, GLXFBConfig config, GLXContext share_context, Bool direct, const int * attrib_list) {if (GLeeInit()) return glXCreateContextAttribsARB(dpy, config, share_context, direct, attrib_list); return (GLXContext)0;} GLEEPFNGLXCREATECONTEXTATTRIBSARBPROC GLeeFuncPtr_glXCreateContextAttribsARB=GLee_Lazy_glXCreateContextAttribsARB; #endif #endif /* GLX_SGIS_multisample */ #ifdef __GLEE_GLX_SGIS_multisample #endif /* GLX_EXT_visual_info */ #ifdef __GLEE_GLX_EXT_visual_info #endif /* GLX_SGI_swap_control */ #ifdef __GLEE_GLX_SGI_swap_control #ifndef GLEE_C_DEFINED_glXSwapIntervalSGI #define GLEE_C_DEFINED_glXSwapIntervalSGI int __stdcall GLee_Lazy_glXSwapIntervalSGI(int interval) {if (GLeeInit()) return glXSwapIntervalSGI(interval); return (int)0;} GLEEPFNGLXSWAPINTERVALSGIPROC GLeeFuncPtr_glXSwapIntervalSGI=GLee_Lazy_glXSwapIntervalSGI; #endif #endif /* GLX_SGI_video_sync */ #ifdef __GLEE_GLX_SGI_video_sync #ifndef GLEE_C_DEFINED_glXGetVideoSyncSGI #define GLEE_C_DEFINED_glXGetVideoSyncSGI int __stdcall GLee_Lazy_glXGetVideoSyncSGI(unsigned int * count) {if (GLeeInit()) return glXGetVideoSyncSGI(count); return (int)0;} GLEEPFNGLXGETVIDEOSYNCSGIPROC GLeeFuncPtr_glXGetVideoSyncSGI=GLee_Lazy_glXGetVideoSyncSGI; #endif #ifndef GLEE_C_DEFINED_glXWaitVideoSyncSGI #define GLEE_C_DEFINED_glXWaitVideoSyncSGI int __stdcall GLee_Lazy_glXWaitVideoSyncSGI(int divisor, int remainder, unsigned int * count) {if (GLeeInit()) return glXWaitVideoSyncSGI(divisor, remainder, count); return (int)0;} GLEEPFNGLXWAITVIDEOSYNCSGIPROC GLeeFuncPtr_glXWaitVideoSyncSGI=GLee_Lazy_glXWaitVideoSyncSGI; #endif #endif /* GLX_SGI_make_current_read */ #ifdef __GLEE_GLX_SGI_make_current_read #ifndef GLEE_C_DEFINED_glXMakeCurrentReadSGI #define GLEE_C_DEFINED_glXMakeCurrentReadSGI Bool __stdcall GLee_Lazy_glXMakeCurrentReadSGI(Display * dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx) {if (GLeeInit()) return glXMakeCurrentReadSGI(dpy, draw, read, ctx); return (Bool)0;} GLEEPFNGLXMAKECURRENTREADSGIPROC GLeeFuncPtr_glXMakeCurrentReadSGI=GLee_Lazy_glXMakeCurrentReadSGI; #endif #ifndef GLEE_C_DEFINED_glXGetCurrentReadDrawableSGI #define GLEE_C_DEFINED_glXGetCurrentReadDrawableSGI GLXDrawable __stdcall GLee_Lazy_glXGetCurrentReadDrawableSGI(void) {if (GLeeInit()) return glXGetCurrentReadDrawableSGI(); return (GLXDrawable)0;} GLEEPFNGLXGETCURRENTREADDRAWABLESGIPROC GLeeFuncPtr_glXGetCurrentReadDrawableSGI=GLee_Lazy_glXGetCurrentReadDrawableSGI; #endif #endif /* GLX_EXT_visual_rating */ #ifdef __GLEE_GLX_EXT_visual_rating #endif /* GLX_EXT_import_context */ #ifdef __GLEE_GLX_EXT_import_context #ifndef GLEE_C_DEFINED_glXGetCurrentDisplayEXT #define GLEE_C_DEFINED_glXGetCurrentDisplayEXT Display * __stdcall GLee_Lazy_glXGetCurrentDisplayEXT(void) {if (GLeeInit()) return glXGetCurrentDisplayEXT(); return (Display *)0;} GLEEPFNGLXGETCURRENTDISPLAYEXTPROC GLeeFuncPtr_glXGetCurrentDisplayEXT=GLee_Lazy_glXGetCurrentDisplayEXT; #endif #ifndef GLEE_C_DEFINED_glXQueryContextInfoEXT #define GLEE_C_DEFINED_glXQueryContextInfoEXT int __stdcall GLee_Lazy_glXQueryContextInfoEXT(Display * dpy, GLXContext context, int attribute, int * value) {if (GLeeInit()) return glXQueryContextInfoEXT(dpy, context, attribute, value); return (int)0;} GLEEPFNGLXQUERYCONTEXTINFOEXTPROC GLeeFuncPtr_glXQueryContextInfoEXT=GLee_Lazy_glXQueryContextInfoEXT; #endif #ifndef GLEE_C_DEFINED_glXGetContextIDEXT #define GLEE_C_DEFINED_glXGetContextIDEXT GLXContextID __stdcall GLee_Lazy_glXGetContextIDEXT(const GLXContext context) {if (GLeeInit()) return glXGetContextIDEXT(context); return (GLXContextID)0;} GLEEPFNGLXGETCONTEXTIDEXTPROC GLeeFuncPtr_glXGetContextIDEXT=GLee_Lazy_glXGetContextIDEXT; #endif #ifndef GLEE_C_DEFINED_glXImportContextEXT #define GLEE_C_DEFINED_glXImportContextEXT GLXContext __stdcall GLee_Lazy_glXImportContextEXT(Display * dpy, GLXContextID contextID) {if (GLeeInit()) return glXImportContextEXT(dpy, contextID); return (GLXContext)0;} GLEEPFNGLXIMPORTCONTEXTEXTPROC GLeeFuncPtr_glXImportContextEXT=GLee_Lazy_glXImportContextEXT; #endif #ifndef GLEE_C_DEFINED_glXFreeContextEXT #define GLEE_C_DEFINED_glXFreeContextEXT void __stdcall GLee_Lazy_glXFreeContextEXT(Display * dpy, GLXContext context) {if (GLeeInit()) glXFreeContextEXT(dpy, context);} GLEEPFNGLXFREECONTEXTEXTPROC GLeeFuncPtr_glXFreeContextEXT=GLee_Lazy_glXFreeContextEXT; #endif #endif /* GLX_SGIX_fbconfig */ #ifdef __GLEE_GLX_SGIX_fbconfig #ifndef GLEE_C_DEFINED_glXGetFBConfigAttribSGIX #define GLEE_C_DEFINED_glXGetFBConfigAttribSGIX int __stdcall GLee_Lazy_glXGetFBConfigAttribSGIX(Display * dpy, GLXFBConfigSGIX config, int attribute, int * value) {if (GLeeInit()) return glXGetFBConfigAttribSGIX(dpy, config, attribute, value); return (int)0;} GLEEPFNGLXGETFBCONFIGATTRIBSGIXPROC GLeeFuncPtr_glXGetFBConfigAttribSGIX=GLee_Lazy_glXGetFBConfigAttribSGIX; #endif #ifndef GLEE_C_DEFINED_glXChooseFBConfigSGIX #define GLEE_C_DEFINED_glXChooseFBConfigSGIX GLXFBConfigSGIX * __stdcall GLee_Lazy_glXChooseFBConfigSGIX(Display * dpy, int screen, int * attrib_list, int * nelements) {if (GLeeInit()) return glXChooseFBConfigSGIX(dpy, screen, attrib_list, nelements); return (GLXFBConfigSGIX *)0;} GLEEPFNGLXCHOOSEFBCONFIGSGIXPROC GLeeFuncPtr_glXChooseFBConfigSGIX=GLee_Lazy_glXChooseFBConfigSGIX; #endif #ifndef GLEE_C_DEFINED_glXCreateGLXPixmapWithConfigSGIX #define GLEE_C_DEFINED_glXCreateGLXPixmapWithConfigSGIX GLXPixmap __stdcall GLee_Lazy_glXCreateGLXPixmapWithConfigSGIX(Display * dpy, GLXFBConfigSGIX config, Pixmap pixmap) {if (GLeeInit()) return glXCreateGLXPixmapWithConfigSGIX(dpy, config, pixmap); return (GLXPixmap)0;} GLEEPFNGLXCREATEGLXPIXMAPWITHCONFIGSGIXPROC GLeeFuncPtr_glXCreateGLXPixmapWithConfigSGIX=GLee_Lazy_glXCreateGLXPixmapWithConfigSGIX; #endif #ifndef GLEE_C_DEFINED_glXCreateContextWithConfigSGIX #define GLEE_C_DEFINED_glXCreateContextWithConfigSGIX GLXContext __stdcall GLee_Lazy_glXCreateContextWithConfigSGIX(Display * dpy, GLXFBConfigSGIX config, int render_type, GLXContext share_list, Bool direct) {if (GLeeInit()) return glXCreateContextWithConfigSGIX(dpy, config, render_type, share_list, direct); return (GLXContext)0;} GLEEPFNGLXCREATECONTEXTWITHCONFIGSGIXPROC GLeeFuncPtr_glXCreateContextWithConfigSGIX=GLee_Lazy_glXCreateContextWithConfigSGIX; #endif #ifndef GLEE_C_DEFINED_glXGetVisualFromFBConfigSGIX #define GLEE_C_DEFINED_glXGetVisualFromFBConfigSGIX XVisualInfo * __stdcall GLee_Lazy_glXGetVisualFromFBConfigSGIX(Display * dpy, GLXFBConfigSGIX config) {if (GLeeInit()) return glXGetVisualFromFBConfigSGIX(dpy, config); return (XVisualInfo *)0;} GLEEPFNGLXGETVISUALFROMFBCONFIGSGIXPROC GLeeFuncPtr_glXGetVisualFromFBConfigSGIX=GLee_Lazy_glXGetVisualFromFBConfigSGIX; #endif #ifndef GLEE_C_DEFINED_glXGetFBConfigFromVisualSGIX #define GLEE_C_DEFINED_glXGetFBConfigFromVisualSGIX GLXFBConfigSGIX __stdcall GLee_Lazy_glXGetFBConfigFromVisualSGIX(Display * dpy, XVisualInfo * vis) {if (GLeeInit()) return glXGetFBConfigFromVisualSGIX(dpy, vis); return (GLXFBConfigSGIX)0;} GLEEPFNGLXGETFBCONFIGFROMVISUALSGIXPROC GLeeFuncPtr_glXGetFBConfigFromVisualSGIX=GLee_Lazy_glXGetFBConfigFromVisualSGIX; #endif #endif /* GLX_SGIX_pbuffer */ #ifdef __GLEE_GLX_SGIX_pbuffer #ifndef GLEE_C_DEFINED_glXCreateGLXPbufferSGIX #define GLEE_C_DEFINED_glXCreateGLXPbufferSGIX GLXPbufferSGIX __stdcall GLee_Lazy_glXCreateGLXPbufferSGIX(Display * dpy, GLXFBConfigSGIX config, unsigned int width, unsigned int height, int * attrib_list) {if (GLeeInit()) return glXCreateGLXPbufferSGIX(dpy, config, width, height, attrib_list); return (GLXPbufferSGIX)0;} GLEEPFNGLXCREATEGLXPBUFFERSGIXPROC GLeeFuncPtr_glXCreateGLXPbufferSGIX=GLee_Lazy_glXCreateGLXPbufferSGIX; #endif #ifndef GLEE_C_DEFINED_glXDestroyGLXPbufferSGIX #define GLEE_C_DEFINED_glXDestroyGLXPbufferSGIX void __stdcall GLee_Lazy_glXDestroyGLXPbufferSGIX(Display * dpy, GLXPbufferSGIX pbuf) {if (GLeeInit()) glXDestroyGLXPbufferSGIX(dpy, pbuf);} GLEEPFNGLXDESTROYGLXPBUFFERSGIXPROC GLeeFuncPtr_glXDestroyGLXPbufferSGIX=GLee_Lazy_glXDestroyGLXPbufferSGIX; #endif #ifndef GLEE_C_DEFINED_glXQueryGLXPbufferSGIX #define GLEE_C_DEFINED_glXQueryGLXPbufferSGIX int __stdcall GLee_Lazy_glXQueryGLXPbufferSGIX(Display * dpy, GLXPbufferSGIX pbuf, int attribute, unsigned int * value) {if (GLeeInit()) return glXQueryGLXPbufferSGIX(dpy, pbuf, attribute, value); return (int)0;} GLEEPFNGLXQUERYGLXPBUFFERSGIXPROC GLeeFuncPtr_glXQueryGLXPbufferSGIX=GLee_Lazy_glXQueryGLXPbufferSGIX; #endif #ifndef GLEE_C_DEFINED_glXSelectEventSGIX #define GLEE_C_DEFINED_glXSelectEventSGIX void __stdcall GLee_Lazy_glXSelectEventSGIX(Display * dpy, GLXDrawable drawable, unsigned long mask) {if (GLeeInit()) glXSelectEventSGIX(dpy, drawable, mask);} GLEEPFNGLXSELECTEVENTSGIXPROC GLeeFuncPtr_glXSelectEventSGIX=GLee_Lazy_glXSelectEventSGIX; #endif #ifndef GLEE_C_DEFINED_glXGetSelectedEventSGIX #define GLEE_C_DEFINED_glXGetSelectedEventSGIX void __stdcall GLee_Lazy_glXGetSelectedEventSGIX(Display * dpy, GLXDrawable drawable, unsigned long * mask) {if (GLeeInit()) glXGetSelectedEventSGIX(dpy, drawable, mask);} GLEEPFNGLXGETSELECTEDEVENTSGIXPROC GLeeFuncPtr_glXGetSelectedEventSGIX=GLee_Lazy_glXGetSelectedEventSGIX; #endif #endif /* GLX_SGI_cushion */ #ifdef __GLEE_GLX_SGI_cushion #ifndef GLEE_C_DEFINED_glXCushionSGI #define GLEE_C_DEFINED_glXCushionSGI void __stdcall GLee_Lazy_glXCushionSGI(Display * dpy, Window window, float cushion) {if (GLeeInit()) glXCushionSGI(dpy, window, cushion);} GLEEPFNGLXCUSHIONSGIPROC GLeeFuncPtr_glXCushionSGI=GLee_Lazy_glXCushionSGI; #endif #endif /* GLX_SGIX_video_resize */ #ifdef __GLEE_GLX_SGIX_video_resize #ifndef GLEE_C_DEFINED_glXBindChannelToWindowSGIX #define GLEE_C_DEFINED_glXBindChannelToWindowSGIX int __stdcall GLee_Lazy_glXBindChannelToWindowSGIX(Display * display, int screen, int channel, Window window) {if (GLeeInit()) return glXBindChannelToWindowSGIX(display, screen, channel, window); return (int)0;} GLEEPFNGLXBINDCHANNELTOWINDOWSGIXPROC GLeeFuncPtr_glXBindChannelToWindowSGIX=GLee_Lazy_glXBindChannelToWindowSGIX; #endif #ifndef GLEE_C_DEFINED_glXChannelRectSGIX #define GLEE_C_DEFINED_glXChannelRectSGIX int __stdcall GLee_Lazy_glXChannelRectSGIX(Display * display, int screen, int channel, int x, int y, int w, int h) {if (GLeeInit()) return glXChannelRectSGIX(display, screen, channel, x, y, w, h); return (int)0;} GLEEPFNGLXCHANNELRECTSGIXPROC GLeeFuncPtr_glXChannelRectSGIX=GLee_Lazy_glXChannelRectSGIX; #endif #ifndef GLEE_C_DEFINED_glXQueryChannelRectSGIX #define GLEE_C_DEFINED_glXQueryChannelRectSGIX int __stdcall GLee_Lazy_glXQueryChannelRectSGIX(Display * display, int screen, int channel, int * dx, int * dy, int * dw, int * dh) {if (GLeeInit()) return glXQueryChannelRectSGIX(display, screen, channel, dx, dy, dw, dh); return (int)0;} GLEEPFNGLXQUERYCHANNELRECTSGIXPROC GLeeFuncPtr_glXQueryChannelRectSGIX=GLee_Lazy_glXQueryChannelRectSGIX; #endif #ifndef GLEE_C_DEFINED_glXQueryChannelDeltasSGIX #define GLEE_C_DEFINED_glXQueryChannelDeltasSGIX int __stdcall GLee_Lazy_glXQueryChannelDeltasSGIX(Display * display, int screen, int channel, int * x, int * y, int * w, int * h) {if (GLeeInit()) return glXQueryChannelDeltasSGIX(display, screen, channel, x, y, w, h); return (int)0;} GLEEPFNGLXQUERYCHANNELDELTASSGIXPROC GLeeFuncPtr_glXQueryChannelDeltasSGIX=GLee_Lazy_glXQueryChannelDeltasSGIX; #endif #ifndef GLEE_C_DEFINED_glXChannelRectSyncSGIX #define GLEE_C_DEFINED_glXChannelRectSyncSGIX int __stdcall GLee_Lazy_glXChannelRectSyncSGIX(Display * display, int screen, int channel, GLenum synctype) {if (GLeeInit()) return glXChannelRectSyncSGIX(display, screen, channel, synctype); return (int)0;} GLEEPFNGLXCHANNELRECTSYNCSGIXPROC GLeeFuncPtr_glXChannelRectSyncSGIX=GLee_Lazy_glXChannelRectSyncSGIX; #endif #endif /* GLX_SGIX_swap_group */ #ifdef __GLEE_GLX_SGIX_swap_group #ifndef GLEE_C_DEFINED_glXJoinSwapGroupSGIX #define GLEE_C_DEFINED_glXJoinSwapGroupSGIX void __stdcall GLee_Lazy_glXJoinSwapGroupSGIX(Display * dpy, GLXDrawable drawable, GLXDrawable member) {if (GLeeInit()) glXJoinSwapGroupSGIX(dpy, drawable, member);} GLEEPFNGLXJOINSWAPGROUPSGIXPROC GLeeFuncPtr_glXJoinSwapGroupSGIX=GLee_Lazy_glXJoinSwapGroupSGIX; #endif #endif /* GLX_SGIX_swap_barrier */ #ifdef __GLEE_GLX_SGIX_swap_barrier #ifndef GLEE_C_DEFINED_glXBindSwapBarrierSGIX #define GLEE_C_DEFINED_glXBindSwapBarrierSGIX void __stdcall GLee_Lazy_glXBindSwapBarrierSGIX(Display * dpy, GLXDrawable drawable, int barrier) {if (GLeeInit()) glXBindSwapBarrierSGIX(dpy, drawable, barrier);} GLEEPFNGLXBINDSWAPBARRIERSGIXPROC GLeeFuncPtr_glXBindSwapBarrierSGIX=GLee_Lazy_glXBindSwapBarrierSGIX; #endif #ifndef GLEE_C_DEFINED_glXQueryMaxSwapBarriersSGIX #define GLEE_C_DEFINED_glXQueryMaxSwapBarriersSGIX Bool __stdcall GLee_Lazy_glXQueryMaxSwapBarriersSGIX(Display * dpy, int screen, int * max) {if (GLeeInit()) return glXQueryMaxSwapBarriersSGIX(dpy, screen, max); return (Bool)0;} GLEEPFNGLXQUERYMAXSWAPBARRIERSSGIXPROC GLeeFuncPtr_glXQueryMaxSwapBarriersSGIX=GLee_Lazy_glXQueryMaxSwapBarriersSGIX; #endif #endif /* GLX_SGIS_blended_overlay */ #ifdef __GLEE_GLX_SGIS_blended_overlay #endif /* GLX_SGIS_shared_multisample */ #ifdef __GLEE_GLX_SGIS_shared_multisample #endif /* GLX_SUN_get_transparent_index */ #ifdef __GLEE_GLX_SUN_get_transparent_index #ifndef GLEE_C_DEFINED_glXGetTransparentIndexSUN #define GLEE_C_DEFINED_glXGetTransparentIndexSUN Status __stdcall GLee_Lazy_glXGetTransparentIndexSUN(Display * dpy, Window overlay, Window underlay, long * pTransparentIndex) {if (GLeeInit()) return glXGetTransparentIndexSUN(dpy, overlay, underlay, pTransparentIndex); return (Status)0;} GLEEPFNGLXGETTRANSPARENTINDEXSUNPROC GLeeFuncPtr_glXGetTransparentIndexSUN=GLee_Lazy_glXGetTransparentIndexSUN; #endif #endif /* GLX_3DFX_multisample */ #ifdef __GLEE_GLX_3DFX_multisample #endif /* GLX_MESA_copy_sub_buffer */ #ifdef __GLEE_GLX_MESA_copy_sub_buffer #ifndef GLEE_C_DEFINED_glXCopySubBufferMESA #define GLEE_C_DEFINED_glXCopySubBufferMESA void __stdcall GLee_Lazy_glXCopySubBufferMESA(Display * dpy, GLXDrawable drawable, int x, int y, int width, int height) {if (GLeeInit()) glXCopySubBufferMESA(dpy, drawable, x, y, width, height);} GLEEPFNGLXCOPYSUBBUFFERMESAPROC GLeeFuncPtr_glXCopySubBufferMESA=GLee_Lazy_glXCopySubBufferMESA; #endif #endif /* GLX_MESA_pixmap_colormap */ #ifdef __GLEE_GLX_MESA_pixmap_colormap #ifndef GLEE_C_DEFINED_glXCreateGLXPixmapMESA #define GLEE_C_DEFINED_glXCreateGLXPixmapMESA GLXPixmap __stdcall GLee_Lazy_glXCreateGLXPixmapMESA(Display * dpy, XVisualInfo * visual, Pixmap pixmap, Colormap cmap) {if (GLeeInit()) return glXCreateGLXPixmapMESA(dpy, visual, pixmap, cmap); return (GLXPixmap)0;} GLEEPFNGLXCREATEGLXPIXMAPMESAPROC GLeeFuncPtr_glXCreateGLXPixmapMESA=GLee_Lazy_glXCreateGLXPixmapMESA; #endif #endif /* GLX_MESA_release_buffers */ #ifdef __GLEE_GLX_MESA_release_buffers #ifndef GLEE_C_DEFINED_glXReleaseBuffersMESA #define GLEE_C_DEFINED_glXReleaseBuffersMESA Bool __stdcall GLee_Lazy_glXReleaseBuffersMESA(Display * dpy, GLXDrawable drawable) {if (GLeeInit()) return glXReleaseBuffersMESA(dpy, drawable); return (Bool)0;} GLEEPFNGLXRELEASEBUFFERSMESAPROC GLeeFuncPtr_glXReleaseBuffersMESA=GLee_Lazy_glXReleaseBuffersMESA; #endif #endif /* GLX_MESA_set_3dfx_mode */ #ifdef __GLEE_GLX_MESA_set_3dfx_mode #ifndef GLEE_C_DEFINED_glXSet3DfxModeMESA #define GLEE_C_DEFINED_glXSet3DfxModeMESA Bool __stdcall GLee_Lazy_glXSet3DfxModeMESA(int mode) {if (GLeeInit()) return glXSet3DfxModeMESA(mode); return (Bool)0;} GLEEPFNGLXSET3DFXMODEMESAPROC GLeeFuncPtr_glXSet3DfxModeMESA=GLee_Lazy_glXSet3DfxModeMESA; #endif #endif /* GLX_SGIX_visual_select_group */ #ifdef __GLEE_GLX_SGIX_visual_select_group #endif /* GLX_OML_swap_method */ #ifdef __GLEE_GLX_OML_swap_method #endif /* GLX_OML_sync_control */ #ifdef __GLEE_GLX_OML_sync_control #ifndef GLEE_C_DEFINED_glXGetSyncValuesOML #define GLEE_C_DEFINED_glXGetSyncValuesOML Bool __stdcall GLee_Lazy_glXGetSyncValuesOML(Display * dpy, GLXDrawable drawable, int64_t * ust, int64_t * msc, int64_t * sbc) {if (GLeeInit()) return glXGetSyncValuesOML(dpy, drawable, ust, msc, sbc); return (Bool)0;} GLEEPFNGLXGETSYNCVALUESOMLPROC GLeeFuncPtr_glXGetSyncValuesOML=GLee_Lazy_glXGetSyncValuesOML; #endif #ifndef GLEE_C_DEFINED_glXGetMscRateOML #define GLEE_C_DEFINED_glXGetMscRateOML Bool __stdcall GLee_Lazy_glXGetMscRateOML(Display * dpy, GLXDrawable drawable, int32_t * numerator, int32_t * denominator) {if (GLeeInit()) return glXGetMscRateOML(dpy, drawable, numerator, denominator); return (Bool)0;} GLEEPFNGLXGETMSCRATEOMLPROC GLeeFuncPtr_glXGetMscRateOML=GLee_Lazy_glXGetMscRateOML; #endif #ifndef GLEE_C_DEFINED_glXSwapBuffersMscOML #define GLEE_C_DEFINED_glXSwapBuffersMscOML int64_t __stdcall GLee_Lazy_glXSwapBuffersMscOML(Display * dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder) {if (GLeeInit()) return glXSwapBuffersMscOML(dpy, drawable, target_msc, divisor, remainder); return (int64_t)0;} GLEEPFNGLXSWAPBUFFERSMSCOMLPROC GLeeFuncPtr_glXSwapBuffersMscOML=GLee_Lazy_glXSwapBuffersMscOML; #endif #ifndef GLEE_C_DEFINED_glXWaitForMscOML #define GLEE_C_DEFINED_glXWaitForMscOML Bool __stdcall GLee_Lazy_glXWaitForMscOML(Display * dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder, int64_t * ust, int64_t * msc, int64_t * sbc) {if (GLeeInit()) return glXWaitForMscOML(dpy, drawable, target_msc, divisor, remainder, ust, msc, sbc); return (Bool)0;} GLEEPFNGLXWAITFORMSCOMLPROC GLeeFuncPtr_glXWaitForMscOML=GLee_Lazy_glXWaitForMscOML; #endif #ifndef GLEE_C_DEFINED_glXWaitForSbcOML #define GLEE_C_DEFINED_glXWaitForSbcOML Bool __stdcall GLee_Lazy_glXWaitForSbcOML(Display * dpy, GLXDrawable drawable, int64_t target_sbc, int64_t * ust, int64_t * msc, int64_t * sbc) {if (GLeeInit()) return glXWaitForSbcOML(dpy, drawable, target_sbc, ust, msc, sbc); return (Bool)0;} GLEEPFNGLXWAITFORSBCOMLPROC GLeeFuncPtr_glXWaitForSbcOML=GLee_Lazy_glXWaitForSbcOML; #endif #endif /* GLX_NV_float_buffer */ #ifdef __GLEE_GLX_NV_float_buffer #endif /* GLX_SGIX_hyperpipe */ #ifdef __GLEE_GLX_SGIX_hyperpipe #ifndef GLEE_C_DEFINED_glXQueryHyperpipeNetworkSGIX #define GLEE_C_DEFINED_glXQueryHyperpipeNetworkSGIX GLXHyperpipeNetworkSGIX * __stdcall GLee_Lazy_glXQueryHyperpipeNetworkSGIX(Display * dpy, int * npipes) {if (GLeeInit()) return glXQueryHyperpipeNetworkSGIX(dpy, npipes); return (GLXHyperpipeNetworkSGIX *)0;} GLEEPFNGLXQUERYHYPERPIPENETWORKSGIXPROC GLeeFuncPtr_glXQueryHyperpipeNetworkSGIX=GLee_Lazy_glXQueryHyperpipeNetworkSGIX; #endif #ifndef GLEE_C_DEFINED_glXHyperpipeConfigSGIX #define GLEE_C_DEFINED_glXHyperpipeConfigSGIX int __stdcall GLee_Lazy_glXHyperpipeConfigSGIX(Display * dpy, int networkId, int npipes, GLXHyperpipeConfigSGIX * cfg, int * hpId) {if (GLeeInit()) return glXHyperpipeConfigSGIX(dpy, networkId, npipes, cfg, hpId); return (int)0;} GLEEPFNGLXHYPERPIPECONFIGSGIXPROC GLeeFuncPtr_glXHyperpipeConfigSGIX=GLee_Lazy_glXHyperpipeConfigSGIX; #endif #ifndef GLEE_C_DEFINED_glXQueryHyperpipeConfigSGIX #define GLEE_C_DEFINED_glXQueryHyperpipeConfigSGIX GLXHyperpipeConfigSGIX * __stdcall GLee_Lazy_glXQueryHyperpipeConfigSGIX(Display * dpy, int hpId, int * npipes) {if (GLeeInit()) return glXQueryHyperpipeConfigSGIX(dpy, hpId, npipes); return (GLXHyperpipeConfigSGIX *)0;} GLEEPFNGLXQUERYHYPERPIPECONFIGSGIXPROC GLeeFuncPtr_glXQueryHyperpipeConfigSGIX=GLee_Lazy_glXQueryHyperpipeConfigSGIX; #endif #ifndef GLEE_C_DEFINED_glXDestroyHyperpipeConfigSGIX #define GLEE_C_DEFINED_glXDestroyHyperpipeConfigSGIX int __stdcall GLee_Lazy_glXDestroyHyperpipeConfigSGIX(Display * dpy, int hpId) {if (GLeeInit()) return glXDestroyHyperpipeConfigSGIX(dpy, hpId); return (int)0;} GLEEPFNGLXDESTROYHYPERPIPECONFIGSGIXPROC GLeeFuncPtr_glXDestroyHyperpipeConfigSGIX=GLee_Lazy_glXDestroyHyperpipeConfigSGIX; #endif #ifndef GLEE_C_DEFINED_glXBindHyperpipeSGIX #define GLEE_C_DEFINED_glXBindHyperpipeSGIX int __stdcall GLee_Lazy_glXBindHyperpipeSGIX(Display * dpy, int hpId) {if (GLeeInit()) return glXBindHyperpipeSGIX(dpy, hpId); return (int)0;} GLEEPFNGLXBINDHYPERPIPESGIXPROC GLeeFuncPtr_glXBindHyperpipeSGIX=GLee_Lazy_glXBindHyperpipeSGIX; #endif #ifndef GLEE_C_DEFINED_glXQueryHyperpipeBestAttribSGIX #define GLEE_C_DEFINED_glXQueryHyperpipeBestAttribSGIX int __stdcall GLee_Lazy_glXQueryHyperpipeBestAttribSGIX(Display * dpy, int timeSlice, int attrib, int size, void * attribList, void * returnAttribList) {if (GLeeInit()) return glXQueryHyperpipeBestAttribSGIX(dpy, timeSlice, attrib, size, attribList, returnAttribList); return (int)0;} GLEEPFNGLXQUERYHYPERPIPEBESTATTRIBSGIXPROC GLeeFuncPtr_glXQueryHyperpipeBestAttribSGIX=GLee_Lazy_glXQueryHyperpipeBestAttribSGIX; #endif #ifndef GLEE_C_DEFINED_glXHyperpipeAttribSGIX #define GLEE_C_DEFINED_glXHyperpipeAttribSGIX int __stdcall GLee_Lazy_glXHyperpipeAttribSGIX(Display * dpy, int timeSlice, int attrib, int size, void * attribList) {if (GLeeInit()) return glXHyperpipeAttribSGIX(dpy, timeSlice, attrib, size, attribList); return (int)0;} GLEEPFNGLXHYPERPIPEATTRIBSGIXPROC GLeeFuncPtr_glXHyperpipeAttribSGIX=GLee_Lazy_glXHyperpipeAttribSGIX; #endif #ifndef GLEE_C_DEFINED_glXQueryHyperpipeAttribSGIX #define GLEE_C_DEFINED_glXQueryHyperpipeAttribSGIX int __stdcall GLee_Lazy_glXQueryHyperpipeAttribSGIX(Display * dpy, int timeSlice, int attrib, int size, void * returnAttribList) {if (GLeeInit()) return glXQueryHyperpipeAttribSGIX(dpy, timeSlice, attrib, size, returnAttribList); return (int)0;} GLEEPFNGLXQUERYHYPERPIPEATTRIBSGIXPROC GLeeFuncPtr_glXQueryHyperpipeAttribSGIX=GLee_Lazy_glXQueryHyperpipeAttribSGIX; #endif #endif /* GLX_MESA_agp_offset */ #ifdef __GLEE_GLX_MESA_agp_offset #ifndef GLEE_C_DEFINED_glXGetAGPOffsetMESA #define GLEE_C_DEFINED_glXGetAGPOffsetMESA unsigned int __stdcall GLee_Lazy_glXGetAGPOffsetMESA(const void * pointer) {if (GLeeInit()) return glXGetAGPOffsetMESA(pointer); return (unsigned int)0;} GLEEPFNGLXGETAGPOFFSETMESAPROC GLeeFuncPtr_glXGetAGPOffsetMESA=GLee_Lazy_glXGetAGPOffsetMESA; #endif #endif /* GLX_EXT_fbconfig_packed_float */ #ifdef __GLEE_GLX_EXT_fbconfig_packed_float #endif /* GLX_EXT_framebuffer_sRGB */ #ifdef __GLEE_GLX_EXT_framebuffer_sRGB #endif /* GLX_EXT_texture_from_pixmap */ #ifdef __GLEE_GLX_EXT_texture_from_pixmap #ifndef GLEE_C_DEFINED_glXBindTexImageEXT #define GLEE_C_DEFINED_glXBindTexImageEXT void __stdcall GLee_Lazy_glXBindTexImageEXT(Display * dpy, GLXDrawable drawable, int buffer, const int * attrib_list) {if (GLeeInit()) glXBindTexImageEXT(dpy, drawable, buffer, attrib_list);} GLEEPFNGLXBINDTEXIMAGEEXTPROC GLeeFuncPtr_glXBindTexImageEXT=GLee_Lazy_glXBindTexImageEXT; #endif #ifndef GLEE_C_DEFINED_glXReleaseTexImageEXT #define GLEE_C_DEFINED_glXReleaseTexImageEXT void __stdcall GLee_Lazy_glXReleaseTexImageEXT(Display * dpy, GLXDrawable drawable, int buffer) {if (GLeeInit()) glXReleaseTexImageEXT(dpy, drawable, buffer);} GLEEPFNGLXRELEASETEXIMAGEEXTPROC GLeeFuncPtr_glXReleaseTexImageEXT=GLee_Lazy_glXReleaseTexImageEXT; #endif #endif /* GLX_NV_present_video */ #ifdef __GLEE_GLX_NV_present_video #endif /* GLX_NV_video_out */ #ifdef __GLEE_GLX_NV_video_out #endif /* GLX_NV_swap_group */ #ifdef __GLEE_GLX_NV_swap_group #endif /* GLX_EXT_scene_marker */ #ifdef __GLEE_GLX_EXT_scene_marker #endif /* GLX_NV_video_output */ #ifdef __GLEE_GLX_NV_video_output #ifndef GLEE_C_DEFINED_glXGetVideoDeviceNV #define GLEE_C_DEFINED_glXGetVideoDeviceNV int __stdcall GLee_Lazy_glXGetVideoDeviceNV(Display * dpy, int screen, int numVideoDevices, GLXVideoDeviceNV * pVideoDevice) {if (GLeeInit()) return glXGetVideoDeviceNV(dpy, screen, numVideoDevices, pVideoDevice); return (int)0;} GLEEPFNGLXGETVIDEODEVICENVPROC GLeeFuncPtr_glXGetVideoDeviceNV=GLee_Lazy_glXGetVideoDeviceNV; #endif #ifndef GLEE_C_DEFINED_glXReleaseVideoDeviceNV #define GLEE_C_DEFINED_glXReleaseVideoDeviceNV int __stdcall GLee_Lazy_glXReleaseVideoDeviceNV(Display * dpy, int screen, GLXVideoDeviceNV VideoDevice) {if (GLeeInit()) return glXReleaseVideoDeviceNV(dpy, screen, VideoDevice); return (int)0;} GLEEPFNGLXRELEASEVIDEODEVICENVPROC GLeeFuncPtr_glXReleaseVideoDeviceNV=GLee_Lazy_glXReleaseVideoDeviceNV; #endif #ifndef GLEE_C_DEFINED_glXBindVideoImageNV #define GLEE_C_DEFINED_glXBindVideoImageNV int __stdcall GLee_Lazy_glXBindVideoImageNV(Display * dpy, GLXVideoDeviceNV VideoDevice, GLXPbuffer pbuf, int iVideoBuffer) {if (GLeeInit()) return glXBindVideoImageNV(dpy, VideoDevice, pbuf, iVideoBuffer); return (int)0;} GLEEPFNGLXBINDVIDEOIMAGENVPROC GLeeFuncPtr_glXBindVideoImageNV=GLee_Lazy_glXBindVideoImageNV; #endif #ifndef GLEE_C_DEFINED_glXReleaseVideoImageNV #define GLEE_C_DEFINED_glXReleaseVideoImageNV int __stdcall GLee_Lazy_glXReleaseVideoImageNV(Display * dpy, GLXPbuffer pbuf) {if (GLeeInit()) return glXReleaseVideoImageNV(dpy, pbuf); return (int)0;} GLEEPFNGLXRELEASEVIDEOIMAGENVPROC GLeeFuncPtr_glXReleaseVideoImageNV=GLee_Lazy_glXReleaseVideoImageNV; #endif #ifndef GLEE_C_DEFINED_glXSendPbufferToVideoNV #define GLEE_C_DEFINED_glXSendPbufferToVideoNV int __stdcall GLee_Lazy_glXSendPbufferToVideoNV(Display * dpy, GLXPbuffer pbuf, int iBufferType, unsigned long * pulCounterPbuffer, GLboolean bBlock) {if (GLeeInit()) return glXSendPbufferToVideoNV(dpy, pbuf, iBufferType, pulCounterPbuffer, bBlock); return (int)0;} GLEEPFNGLXSENDPBUFFERTOVIDEONVPROC GLeeFuncPtr_glXSendPbufferToVideoNV=GLee_Lazy_glXSendPbufferToVideoNV; #endif #ifndef GLEE_C_DEFINED_glXGetVideoInfoNV #define GLEE_C_DEFINED_glXGetVideoInfoNV int __stdcall GLee_Lazy_glXGetVideoInfoNV(Display * dpy, int screen, GLXVideoDeviceNV VideoDevice, unsigned long * pulCounterOutputPbuffer, unsigned long * pulCounterOutputVideo) {if (GLeeInit()) return glXGetVideoInfoNV(dpy, screen, VideoDevice, pulCounterOutputPbuffer, pulCounterOutputVideo); return (int)0;} GLEEPFNGLXGETVIDEOINFONVPROC GLeeFuncPtr_glXGetVideoInfoNV=GLee_Lazy_glXGetVideoInfoNV; #endif #endif #endif /* end GLX */ /***************************************************************** * Extension link functions *****************************************************************/ GLuint __GLeeLink_GL_VERSION_1_2(void) { GLint nLinked=0; #ifdef __GLEE_GL_VERSION_1_2 if ((GLeeFuncPtr_glBlendColor = (GLEEPFNGLBLENDCOLORPROC) __GLeeGetProcAddress("glBlendColor"))!=0) nLinked++; if ((GLeeFuncPtr_glBlendEquation = (GLEEPFNGLBLENDEQUATIONPROC) __GLeeGetProcAddress("glBlendEquation"))!=0) nLinked++; if ((GLeeFuncPtr_glDrawRangeElements = (GLEEPFNGLDRAWRANGEELEMENTSPROC) __GLeeGetProcAddress("glDrawRangeElements"))!=0) nLinked++; if ((GLeeFuncPtr_glColorTable = (GLEEPFNGLCOLORTABLEPROC) __GLeeGetProcAddress("glColorTable"))!=0) nLinked++; if ((GLeeFuncPtr_glColorTableParameterfv = (GLEEPFNGLCOLORTABLEPARAMETERFVPROC) __GLeeGetProcAddress("glColorTableParameterfv"))!=0) nLinked++; if ((GLeeFuncPtr_glColorTableParameteriv = (GLEEPFNGLCOLORTABLEPARAMETERIVPROC) __GLeeGetProcAddress("glColorTableParameteriv"))!=0) nLinked++; if ((GLeeFuncPtr_glCopyColorTable = (GLEEPFNGLCOPYCOLORTABLEPROC) __GLeeGetProcAddress("glCopyColorTable"))!=0) nLinked++; if ((GLeeFuncPtr_glGetColorTable = (GLEEPFNGLGETCOLORTABLEPROC) __GLeeGetProcAddress("glGetColorTable"))!=0) nLinked++; if ((GLeeFuncPtr_glGetColorTableParameterfv = (GLEEPFNGLGETCOLORTABLEPARAMETERFVPROC) __GLeeGetProcAddress("glGetColorTableParameterfv"))!=0) nLinked++; if ((GLeeFuncPtr_glGetColorTableParameteriv = (GLEEPFNGLGETCOLORTABLEPARAMETERIVPROC) __GLeeGetProcAddress("glGetColorTableParameteriv"))!=0) nLinked++; if ((GLeeFuncPtr_glColorSubTable = (GLEEPFNGLCOLORSUBTABLEPROC) __GLeeGetProcAddress("glColorSubTable"))!=0) nLinked++; if ((GLeeFuncPtr_glCopyColorSubTable = (GLEEPFNGLCOPYCOLORSUBTABLEPROC) __GLeeGetProcAddress("glCopyColorSubTable"))!=0) nLinked++; if ((GLeeFuncPtr_glConvolutionFilter1D = (GLEEPFNGLCONVOLUTIONFILTER1DPROC) __GLeeGetProcAddress("glConvolutionFilter1D"))!=0) nLinked++; if ((GLeeFuncPtr_glConvolutionFilter2D = (GLEEPFNGLCONVOLUTIONFILTER2DPROC) __GLeeGetProcAddress("glConvolutionFilter2D"))!=0) nLinked++; if ((GLeeFuncPtr_glConvolutionParameterf = (GLEEPFNGLCONVOLUTIONPARAMETERFPROC) __GLeeGetProcAddress("glConvolutionParameterf"))!=0) nLinked++; if ((GLeeFuncPtr_glConvolutionParameterfv = (GLEEPFNGLCONVOLUTIONPARAMETERFVPROC) __GLeeGetProcAddress("glConvolutionParameterfv"))!=0) nLinked++; if ((GLeeFuncPtr_glConvolutionParameteri = (GLEEPFNGLCONVOLUTIONPARAMETERIPROC) __GLeeGetProcAddress("glConvolutionParameteri"))!=0) nLinked++; if ((GLeeFuncPtr_glConvolutionParameteriv = (GLEEPFNGLCONVOLUTIONPARAMETERIVPROC) __GLeeGetProcAddress("glConvolutionParameteriv"))!=0) nLinked++; if ((GLeeFuncPtr_glCopyConvolutionFilter1D = (GLEEPFNGLCOPYCONVOLUTIONFILTER1DPROC) __GLeeGetProcAddress("glCopyConvolutionFilter1D"))!=0) nLinked++; if ((GLeeFuncPtr_glCopyConvolutionFilter2D = (GLEEPFNGLCOPYCONVOLUTIONFILTER2DPROC) __GLeeGetProcAddress("glCopyConvolutionFilter2D"))!=0) nLinked++; if ((GLeeFuncPtr_glGetConvolutionFilter = (GLEEPFNGLGETCONVOLUTIONFILTERPROC) __GLeeGetProcAddress("glGetConvolutionFilter"))!=0) nLinked++; if ((GLeeFuncPtr_glGetConvolutionParameterfv = (GLEEPFNGLGETCONVOLUTIONPARAMETERFVPROC) __GLeeGetProcAddress("glGetConvolutionParameterfv"))!=0) nLinked++; if ((GLeeFuncPtr_glGetConvolutionParameteriv = (GLEEPFNGLGETCONVOLUTIONPARAMETERIVPROC) __GLeeGetProcAddress("glGetConvolutionParameteriv"))!=0) nLinked++; if ((GLeeFuncPtr_glGetSeparableFilter = (GLEEPFNGLGETSEPARABLEFILTERPROC) __GLeeGetProcAddress("glGetSeparableFilter"))!=0) nLinked++; if ((GLeeFuncPtr_glSeparableFilter2D = (GLEEPFNGLSEPARABLEFILTER2DPROC) __GLeeGetProcAddress("glSeparableFilter2D"))!=0) nLinked++; if ((GLeeFuncPtr_glGetHistogram = (GLEEPFNGLGETHISTOGRAMPROC) __GLeeGetProcAddress("glGetHistogram"))!=0) nLinked++; if ((GLeeFuncPtr_glGetHistogramParameterfv = (GLEEPFNGLGETHISTOGRAMPARAMETERFVPROC) __GLeeGetProcAddress("glGetHistogramParameterfv"))!=0) nLinked++; if ((GLeeFuncPtr_glGetHistogramParameteriv = (GLEEPFNGLGETHISTOGRAMPARAMETERIVPROC) __GLeeGetProcAddress("glGetHistogramParameteriv"))!=0) nLinked++; if ((GLeeFuncPtr_glGetMinmax = (GLEEPFNGLGETMINMAXPROC) __GLeeGetProcAddress("glGetMinmax"))!=0) nLinked++; if ((GLeeFuncPtr_glGetMinmaxParameterfv = (GLEEPFNGLGETMINMAXPARAMETERFVPROC) __GLeeGetProcAddress("glGetMinmaxParameterfv"))!=0) nLinked++; if ((GLeeFuncPtr_glGetMinmaxParameteriv = (GLEEPFNGLGETMINMAXPARAMETERIVPROC) __GLeeGetProcAddress("glGetMinmaxParameteriv"))!=0) nLinked++; if ((GLeeFuncPtr_glHistogram = (GLEEPFNGLHISTOGRAMPROC) __GLeeGetProcAddress("glHistogram"))!=0) nLinked++; if ((GLeeFuncPtr_glMinmax = (GLEEPFNGLMINMAXPROC) __GLeeGetProcAddress("glMinmax"))!=0) nLinked++; if ((GLeeFuncPtr_glResetHistogram = (GLEEPFNGLRESETHISTOGRAMPROC) __GLeeGetProcAddress("glResetHistogram"))!=0) nLinked++; if ((GLeeFuncPtr_glResetMinmax = (GLEEPFNGLRESETMINMAXPROC) __GLeeGetProcAddress("glResetMinmax"))!=0) nLinked++; if ((GLeeFuncPtr_glTexImage3D = (GLEEPFNGLTEXIMAGE3DPROC) __GLeeGetProcAddress("glTexImage3D"))!=0) nLinked++; if ((GLeeFuncPtr_glTexSubImage3D = (GLEEPFNGLTEXSUBIMAGE3DPROC) __GLeeGetProcAddress("glTexSubImage3D"))!=0) nLinked++; if ((GLeeFuncPtr_glCopyTexSubImage3D = (GLEEPFNGLCOPYTEXSUBIMAGE3DPROC) __GLeeGetProcAddress("glCopyTexSubImage3D"))!=0) nLinked++; #endif if (nLinked==38) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_imaging(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_VERSION_1_3(void) { GLint nLinked=0; #ifdef __GLEE_GL_VERSION_1_3 if ((GLeeFuncPtr_glActiveTexture = (GLEEPFNGLACTIVETEXTUREPROC) __GLeeGetProcAddress("glActiveTexture"))!=0) nLinked++; if ((GLeeFuncPtr_glClientActiveTexture = (GLEEPFNGLCLIENTACTIVETEXTUREPROC) __GLeeGetProcAddress("glClientActiveTexture"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord1d = (GLEEPFNGLMULTITEXCOORD1DPROC) __GLeeGetProcAddress("glMultiTexCoord1d"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord1dv = (GLEEPFNGLMULTITEXCOORD1DVPROC) __GLeeGetProcAddress("glMultiTexCoord1dv"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord1f = (GLEEPFNGLMULTITEXCOORD1FPROC) __GLeeGetProcAddress("glMultiTexCoord1f"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord1fv = (GLEEPFNGLMULTITEXCOORD1FVPROC) __GLeeGetProcAddress("glMultiTexCoord1fv"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord1i = (GLEEPFNGLMULTITEXCOORD1IPROC) __GLeeGetProcAddress("glMultiTexCoord1i"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord1iv = (GLEEPFNGLMULTITEXCOORD1IVPROC) __GLeeGetProcAddress("glMultiTexCoord1iv"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord1s = (GLEEPFNGLMULTITEXCOORD1SPROC) __GLeeGetProcAddress("glMultiTexCoord1s"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord1sv = (GLEEPFNGLMULTITEXCOORD1SVPROC) __GLeeGetProcAddress("glMultiTexCoord1sv"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord2d = (GLEEPFNGLMULTITEXCOORD2DPROC) __GLeeGetProcAddress("glMultiTexCoord2d"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord2dv = (GLEEPFNGLMULTITEXCOORD2DVPROC) __GLeeGetProcAddress("glMultiTexCoord2dv"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord2f = (GLEEPFNGLMULTITEXCOORD2FPROC) __GLeeGetProcAddress("glMultiTexCoord2f"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord2fv = (GLEEPFNGLMULTITEXCOORD2FVPROC) __GLeeGetProcAddress("glMultiTexCoord2fv"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord2i = (GLEEPFNGLMULTITEXCOORD2IPROC) __GLeeGetProcAddress("glMultiTexCoord2i"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord2iv = (GLEEPFNGLMULTITEXCOORD2IVPROC) __GLeeGetProcAddress("glMultiTexCoord2iv"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord2s = (GLEEPFNGLMULTITEXCOORD2SPROC) __GLeeGetProcAddress("glMultiTexCoord2s"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord2sv = (GLEEPFNGLMULTITEXCOORD2SVPROC) __GLeeGetProcAddress("glMultiTexCoord2sv"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord3d = (GLEEPFNGLMULTITEXCOORD3DPROC) __GLeeGetProcAddress("glMultiTexCoord3d"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord3dv = (GLEEPFNGLMULTITEXCOORD3DVPROC) __GLeeGetProcAddress("glMultiTexCoord3dv"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord3f = (GLEEPFNGLMULTITEXCOORD3FPROC) __GLeeGetProcAddress("glMultiTexCoord3f"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord3fv = (GLEEPFNGLMULTITEXCOORD3FVPROC) __GLeeGetProcAddress("glMultiTexCoord3fv"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord3i = (GLEEPFNGLMULTITEXCOORD3IPROC) __GLeeGetProcAddress("glMultiTexCoord3i"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord3iv = (GLEEPFNGLMULTITEXCOORD3IVPROC) __GLeeGetProcAddress("glMultiTexCoord3iv"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord3s = (GLEEPFNGLMULTITEXCOORD3SPROC) __GLeeGetProcAddress("glMultiTexCoord3s"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord3sv = (GLEEPFNGLMULTITEXCOORD3SVPROC) __GLeeGetProcAddress("glMultiTexCoord3sv"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord4d = (GLEEPFNGLMULTITEXCOORD4DPROC) __GLeeGetProcAddress("glMultiTexCoord4d"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord4dv = (GLEEPFNGLMULTITEXCOORD4DVPROC) __GLeeGetProcAddress("glMultiTexCoord4dv"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord4f = (GLEEPFNGLMULTITEXCOORD4FPROC) __GLeeGetProcAddress("glMultiTexCoord4f"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord4fv = (GLEEPFNGLMULTITEXCOORD4FVPROC) __GLeeGetProcAddress("glMultiTexCoord4fv"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord4i = (GLEEPFNGLMULTITEXCOORD4IPROC) __GLeeGetProcAddress("glMultiTexCoord4i"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord4iv = (GLEEPFNGLMULTITEXCOORD4IVPROC) __GLeeGetProcAddress("glMultiTexCoord4iv"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord4s = (GLEEPFNGLMULTITEXCOORD4SPROC) __GLeeGetProcAddress("glMultiTexCoord4s"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord4sv = (GLEEPFNGLMULTITEXCOORD4SVPROC) __GLeeGetProcAddress("glMultiTexCoord4sv"))!=0) nLinked++; if ((GLeeFuncPtr_glLoadTransposeMatrixf = (GLEEPFNGLLOADTRANSPOSEMATRIXFPROC) __GLeeGetProcAddress("glLoadTransposeMatrixf"))!=0) nLinked++; if ((GLeeFuncPtr_glLoadTransposeMatrixd = (GLEEPFNGLLOADTRANSPOSEMATRIXDPROC) __GLeeGetProcAddress("glLoadTransposeMatrixd"))!=0) nLinked++; if ((GLeeFuncPtr_glMultTransposeMatrixf = (GLEEPFNGLMULTTRANSPOSEMATRIXFPROC) __GLeeGetProcAddress("glMultTransposeMatrixf"))!=0) nLinked++; if ((GLeeFuncPtr_glMultTransposeMatrixd = (GLEEPFNGLMULTTRANSPOSEMATRIXDPROC) __GLeeGetProcAddress("glMultTransposeMatrixd"))!=0) nLinked++; if ((GLeeFuncPtr_glSampleCoverage = (GLEEPFNGLSAMPLECOVERAGEPROC) __GLeeGetProcAddress("glSampleCoverage"))!=0) nLinked++; if ((GLeeFuncPtr_glCompressedTexImage3D = (GLEEPFNGLCOMPRESSEDTEXIMAGE3DPROC) __GLeeGetProcAddress("glCompressedTexImage3D"))!=0) nLinked++; if ((GLeeFuncPtr_glCompressedTexImage2D = (GLEEPFNGLCOMPRESSEDTEXIMAGE2DPROC) __GLeeGetProcAddress("glCompressedTexImage2D"))!=0) nLinked++; if ((GLeeFuncPtr_glCompressedTexImage1D = (GLEEPFNGLCOMPRESSEDTEXIMAGE1DPROC) __GLeeGetProcAddress("glCompressedTexImage1D"))!=0) nLinked++; if ((GLeeFuncPtr_glCompressedTexSubImage3D = (GLEEPFNGLCOMPRESSEDTEXSUBIMAGE3DPROC) __GLeeGetProcAddress("glCompressedTexSubImage3D"))!=0) nLinked++; if ((GLeeFuncPtr_glCompressedTexSubImage2D = (GLEEPFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) __GLeeGetProcAddress("glCompressedTexSubImage2D"))!=0) nLinked++; if ((GLeeFuncPtr_glCompressedTexSubImage1D = (GLEEPFNGLCOMPRESSEDTEXSUBIMAGE1DPROC) __GLeeGetProcAddress("glCompressedTexSubImage1D"))!=0) nLinked++; if ((GLeeFuncPtr_glGetCompressedTexImage = (GLEEPFNGLGETCOMPRESSEDTEXIMAGEPROC) __GLeeGetProcAddress("glGetCompressedTexImage"))!=0) nLinked++; #endif if (nLinked==46) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_VERSION_1_4(void) { GLint nLinked=0; #ifdef __GLEE_GL_VERSION_1_4 if ((GLeeFuncPtr_glBlendFuncSeparate = (GLEEPFNGLBLENDFUNCSEPARATEPROC) __GLeeGetProcAddress("glBlendFuncSeparate"))!=0) nLinked++; if ((GLeeFuncPtr_glFogCoordf = (GLEEPFNGLFOGCOORDFPROC) __GLeeGetProcAddress("glFogCoordf"))!=0) nLinked++; if ((GLeeFuncPtr_glFogCoordfv = (GLEEPFNGLFOGCOORDFVPROC) __GLeeGetProcAddress("glFogCoordfv"))!=0) nLinked++; if ((GLeeFuncPtr_glFogCoordd = (GLEEPFNGLFOGCOORDDPROC) __GLeeGetProcAddress("glFogCoordd"))!=0) nLinked++; if ((GLeeFuncPtr_glFogCoorddv = (GLEEPFNGLFOGCOORDDVPROC) __GLeeGetProcAddress("glFogCoorddv"))!=0) nLinked++; if ((GLeeFuncPtr_glFogCoordPointer = (GLEEPFNGLFOGCOORDPOINTERPROC) __GLeeGetProcAddress("glFogCoordPointer"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiDrawArrays = (GLEEPFNGLMULTIDRAWARRAYSPROC) __GLeeGetProcAddress("glMultiDrawArrays"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiDrawElements = (GLEEPFNGLMULTIDRAWELEMENTSPROC) __GLeeGetProcAddress("glMultiDrawElements"))!=0) nLinked++; if ((GLeeFuncPtr_glPointParameterf = (GLEEPFNGLPOINTPARAMETERFPROC) __GLeeGetProcAddress("glPointParameterf"))!=0) nLinked++; if ((GLeeFuncPtr_glPointParameterfv = (GLEEPFNGLPOINTPARAMETERFVPROC) __GLeeGetProcAddress("glPointParameterfv"))!=0) nLinked++; if ((GLeeFuncPtr_glPointParameteri = (GLEEPFNGLPOINTPARAMETERIPROC) __GLeeGetProcAddress("glPointParameteri"))!=0) nLinked++; if ((GLeeFuncPtr_glPointParameteriv = (GLEEPFNGLPOINTPARAMETERIVPROC) __GLeeGetProcAddress("glPointParameteriv"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColor3b = (GLEEPFNGLSECONDARYCOLOR3BPROC) __GLeeGetProcAddress("glSecondaryColor3b"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColor3bv = (GLEEPFNGLSECONDARYCOLOR3BVPROC) __GLeeGetProcAddress("glSecondaryColor3bv"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColor3d = (GLEEPFNGLSECONDARYCOLOR3DPROC) __GLeeGetProcAddress("glSecondaryColor3d"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColor3dv = (GLEEPFNGLSECONDARYCOLOR3DVPROC) __GLeeGetProcAddress("glSecondaryColor3dv"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColor3f = (GLEEPFNGLSECONDARYCOLOR3FPROC) __GLeeGetProcAddress("glSecondaryColor3f"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColor3fv = (GLEEPFNGLSECONDARYCOLOR3FVPROC) __GLeeGetProcAddress("glSecondaryColor3fv"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColor3i = (GLEEPFNGLSECONDARYCOLOR3IPROC) __GLeeGetProcAddress("glSecondaryColor3i"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColor3iv = (GLEEPFNGLSECONDARYCOLOR3IVPROC) __GLeeGetProcAddress("glSecondaryColor3iv"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColor3s = (GLEEPFNGLSECONDARYCOLOR3SPROC) __GLeeGetProcAddress("glSecondaryColor3s"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColor3sv = (GLEEPFNGLSECONDARYCOLOR3SVPROC) __GLeeGetProcAddress("glSecondaryColor3sv"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColor3ub = (GLEEPFNGLSECONDARYCOLOR3UBPROC) __GLeeGetProcAddress("glSecondaryColor3ub"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColor3ubv = (GLEEPFNGLSECONDARYCOLOR3UBVPROC) __GLeeGetProcAddress("glSecondaryColor3ubv"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColor3ui = (GLEEPFNGLSECONDARYCOLOR3UIPROC) __GLeeGetProcAddress("glSecondaryColor3ui"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColor3uiv = (GLEEPFNGLSECONDARYCOLOR3UIVPROC) __GLeeGetProcAddress("glSecondaryColor3uiv"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColor3us = (GLEEPFNGLSECONDARYCOLOR3USPROC) __GLeeGetProcAddress("glSecondaryColor3us"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColor3usv = (GLEEPFNGLSECONDARYCOLOR3USVPROC) __GLeeGetProcAddress("glSecondaryColor3usv"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColorPointer = (GLEEPFNGLSECONDARYCOLORPOINTERPROC) __GLeeGetProcAddress("glSecondaryColorPointer"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos2d = (GLEEPFNGLWINDOWPOS2DPROC) __GLeeGetProcAddress("glWindowPos2d"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos2dv = (GLEEPFNGLWINDOWPOS2DVPROC) __GLeeGetProcAddress("glWindowPos2dv"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos2f = (GLEEPFNGLWINDOWPOS2FPROC) __GLeeGetProcAddress("glWindowPos2f"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos2fv = (GLEEPFNGLWINDOWPOS2FVPROC) __GLeeGetProcAddress("glWindowPos2fv"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos2i = (GLEEPFNGLWINDOWPOS2IPROC) __GLeeGetProcAddress("glWindowPos2i"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos2iv = (GLEEPFNGLWINDOWPOS2IVPROC) __GLeeGetProcAddress("glWindowPos2iv"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos2s = (GLEEPFNGLWINDOWPOS2SPROC) __GLeeGetProcAddress("glWindowPos2s"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos2sv = (GLEEPFNGLWINDOWPOS2SVPROC) __GLeeGetProcAddress("glWindowPos2sv"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos3d = (GLEEPFNGLWINDOWPOS3DPROC) __GLeeGetProcAddress("glWindowPos3d"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos3dv = (GLEEPFNGLWINDOWPOS3DVPROC) __GLeeGetProcAddress("glWindowPos3dv"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos3f = (GLEEPFNGLWINDOWPOS3FPROC) __GLeeGetProcAddress("glWindowPos3f"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos3fv = (GLEEPFNGLWINDOWPOS3FVPROC) __GLeeGetProcAddress("glWindowPos3fv"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos3i = (GLEEPFNGLWINDOWPOS3IPROC) __GLeeGetProcAddress("glWindowPos3i"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos3iv = (GLEEPFNGLWINDOWPOS3IVPROC) __GLeeGetProcAddress("glWindowPos3iv"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos3s = (GLEEPFNGLWINDOWPOS3SPROC) __GLeeGetProcAddress("glWindowPos3s"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos3sv = (GLEEPFNGLWINDOWPOS3SVPROC) __GLeeGetProcAddress("glWindowPos3sv"))!=0) nLinked++; #endif if (nLinked==45) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_VERSION_1_5(void) { GLint nLinked=0; #ifdef __GLEE_GL_VERSION_1_5 if ((GLeeFuncPtr_glGenQueries = (GLEEPFNGLGENQUERIESPROC) __GLeeGetProcAddress("glGenQueries"))!=0) nLinked++; if ((GLeeFuncPtr_glDeleteQueries = (GLEEPFNGLDELETEQUERIESPROC) __GLeeGetProcAddress("glDeleteQueries"))!=0) nLinked++; if ((GLeeFuncPtr_glIsQuery = (GLEEPFNGLISQUERYPROC) __GLeeGetProcAddress("glIsQuery"))!=0) nLinked++; if ((GLeeFuncPtr_glBeginQuery = (GLEEPFNGLBEGINQUERYPROC) __GLeeGetProcAddress("glBeginQuery"))!=0) nLinked++; if ((GLeeFuncPtr_glEndQuery = (GLEEPFNGLENDQUERYPROC) __GLeeGetProcAddress("glEndQuery"))!=0) nLinked++; if ((GLeeFuncPtr_glGetQueryiv = (GLEEPFNGLGETQUERYIVPROC) __GLeeGetProcAddress("glGetQueryiv"))!=0) nLinked++; if ((GLeeFuncPtr_glGetQueryObjectiv = (GLEEPFNGLGETQUERYOBJECTIVPROC) __GLeeGetProcAddress("glGetQueryObjectiv"))!=0) nLinked++; if ((GLeeFuncPtr_glGetQueryObjectuiv = (GLEEPFNGLGETQUERYOBJECTUIVPROC) __GLeeGetProcAddress("glGetQueryObjectuiv"))!=0) nLinked++; if ((GLeeFuncPtr_glBindBuffer = (GLEEPFNGLBINDBUFFERPROC) __GLeeGetProcAddress("glBindBuffer"))!=0) nLinked++; if ((GLeeFuncPtr_glDeleteBuffers = (GLEEPFNGLDELETEBUFFERSPROC) __GLeeGetProcAddress("glDeleteBuffers"))!=0) nLinked++; if ((GLeeFuncPtr_glGenBuffers = (GLEEPFNGLGENBUFFERSPROC) __GLeeGetProcAddress("glGenBuffers"))!=0) nLinked++; if ((GLeeFuncPtr_glIsBuffer = (GLEEPFNGLISBUFFERPROC) __GLeeGetProcAddress("glIsBuffer"))!=0) nLinked++; if ((GLeeFuncPtr_glBufferData = (GLEEPFNGLBUFFERDATAPROC) __GLeeGetProcAddress("glBufferData"))!=0) nLinked++; if ((GLeeFuncPtr_glBufferSubData = (GLEEPFNGLBUFFERSUBDATAPROC) __GLeeGetProcAddress("glBufferSubData"))!=0) nLinked++; if ((GLeeFuncPtr_glGetBufferSubData = (GLEEPFNGLGETBUFFERSUBDATAPROC) __GLeeGetProcAddress("glGetBufferSubData"))!=0) nLinked++; if ((GLeeFuncPtr_glMapBuffer = (GLEEPFNGLMAPBUFFERPROC) __GLeeGetProcAddress("glMapBuffer"))!=0) nLinked++; if ((GLeeFuncPtr_glUnmapBuffer = (GLEEPFNGLUNMAPBUFFERPROC) __GLeeGetProcAddress("glUnmapBuffer"))!=0) nLinked++; if ((GLeeFuncPtr_glGetBufferParameteriv = (GLEEPFNGLGETBUFFERPARAMETERIVPROC) __GLeeGetProcAddress("glGetBufferParameteriv"))!=0) nLinked++; if ((GLeeFuncPtr_glGetBufferPointerv = (GLEEPFNGLGETBUFFERPOINTERVPROC) __GLeeGetProcAddress("glGetBufferPointerv"))!=0) nLinked++; #endif if (nLinked==19) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_VERSION_2_0(void) { GLint nLinked=0; #ifdef __GLEE_GL_VERSION_2_0 if ((GLeeFuncPtr_glBlendEquationSeparate = (GLEEPFNGLBLENDEQUATIONSEPARATEPROC) __GLeeGetProcAddress("glBlendEquationSeparate"))!=0) nLinked++; if ((GLeeFuncPtr_glDrawBuffers = (GLEEPFNGLDRAWBUFFERSPROC) __GLeeGetProcAddress("glDrawBuffers"))!=0) nLinked++; if ((GLeeFuncPtr_glStencilOpSeparate = (GLEEPFNGLSTENCILOPSEPARATEPROC) __GLeeGetProcAddress("glStencilOpSeparate"))!=0) nLinked++; if ((GLeeFuncPtr_glStencilFuncSeparate = (GLEEPFNGLSTENCILFUNCSEPARATEPROC) __GLeeGetProcAddress("glStencilFuncSeparate"))!=0) nLinked++; if ((GLeeFuncPtr_glStencilMaskSeparate = (GLEEPFNGLSTENCILMASKSEPARATEPROC) __GLeeGetProcAddress("glStencilMaskSeparate"))!=0) nLinked++; if ((GLeeFuncPtr_glAttachShader = (GLEEPFNGLATTACHSHADERPROC) __GLeeGetProcAddress("glAttachShader"))!=0) nLinked++; if ((GLeeFuncPtr_glBindAttribLocation = (GLEEPFNGLBINDATTRIBLOCATIONPROC) __GLeeGetProcAddress("glBindAttribLocation"))!=0) nLinked++; if ((GLeeFuncPtr_glCompileShader = (GLEEPFNGLCOMPILESHADERPROC) __GLeeGetProcAddress("glCompileShader"))!=0) nLinked++; if ((GLeeFuncPtr_glCreateProgram = (GLEEPFNGLCREATEPROGRAMPROC) __GLeeGetProcAddress("glCreateProgram"))!=0) nLinked++; if ((GLeeFuncPtr_glCreateShader = (GLEEPFNGLCREATESHADERPROC) __GLeeGetProcAddress("glCreateShader"))!=0) nLinked++; if ((GLeeFuncPtr_glDeleteProgram = (GLEEPFNGLDELETEPROGRAMPROC) __GLeeGetProcAddress("glDeleteProgram"))!=0) nLinked++; if ((GLeeFuncPtr_glDeleteShader = (GLEEPFNGLDELETESHADERPROC) __GLeeGetProcAddress("glDeleteShader"))!=0) nLinked++; if ((GLeeFuncPtr_glDetachShader = (GLEEPFNGLDETACHSHADERPROC) __GLeeGetProcAddress("glDetachShader"))!=0) nLinked++; if ((GLeeFuncPtr_glDisableVertexAttribArray = (GLEEPFNGLDISABLEVERTEXATTRIBARRAYPROC) __GLeeGetProcAddress("glDisableVertexAttribArray"))!=0) nLinked++; if ((GLeeFuncPtr_glEnableVertexAttribArray = (GLEEPFNGLENABLEVERTEXATTRIBARRAYPROC) __GLeeGetProcAddress("glEnableVertexAttribArray"))!=0) nLinked++; if ((GLeeFuncPtr_glGetActiveAttrib = (GLEEPFNGLGETACTIVEATTRIBPROC) __GLeeGetProcAddress("glGetActiveAttrib"))!=0) nLinked++; if ((GLeeFuncPtr_glGetActiveUniform = (GLEEPFNGLGETACTIVEUNIFORMPROC) __GLeeGetProcAddress("glGetActiveUniform"))!=0) nLinked++; if ((GLeeFuncPtr_glGetAttachedShaders = (GLEEPFNGLGETATTACHEDSHADERSPROC) __GLeeGetProcAddress("glGetAttachedShaders"))!=0) nLinked++; if ((GLeeFuncPtr_glGetAttribLocation = (GLEEPFNGLGETATTRIBLOCATIONPROC) __GLeeGetProcAddress("glGetAttribLocation"))!=0) nLinked++; if ((GLeeFuncPtr_glGetProgramiv = (GLEEPFNGLGETPROGRAMIVPROC) __GLeeGetProcAddress("glGetProgramiv"))!=0) nLinked++; if ((GLeeFuncPtr_glGetProgramInfoLog = (GLEEPFNGLGETPROGRAMINFOLOGPROC) __GLeeGetProcAddress("glGetProgramInfoLog"))!=0) nLinked++; if ((GLeeFuncPtr_glGetShaderiv = (GLEEPFNGLGETSHADERIVPROC) __GLeeGetProcAddress("glGetShaderiv"))!=0) nLinked++; if ((GLeeFuncPtr_glGetShaderInfoLog = (GLEEPFNGLGETSHADERINFOLOGPROC) __GLeeGetProcAddress("glGetShaderInfoLog"))!=0) nLinked++; if ((GLeeFuncPtr_glGetShaderSource = (GLEEPFNGLGETSHADERSOURCEPROC) __GLeeGetProcAddress("glGetShaderSource"))!=0) nLinked++; if ((GLeeFuncPtr_glGetUniformLocation = (GLEEPFNGLGETUNIFORMLOCATIONPROC) __GLeeGetProcAddress("glGetUniformLocation"))!=0) nLinked++; if ((GLeeFuncPtr_glGetUniformfv = (GLEEPFNGLGETUNIFORMFVPROC) __GLeeGetProcAddress("glGetUniformfv"))!=0) nLinked++; if ((GLeeFuncPtr_glGetUniformiv = (GLEEPFNGLGETUNIFORMIVPROC) __GLeeGetProcAddress("glGetUniformiv"))!=0) nLinked++; if ((GLeeFuncPtr_glGetVertexAttribdv = (GLEEPFNGLGETVERTEXATTRIBDVPROC) __GLeeGetProcAddress("glGetVertexAttribdv"))!=0) nLinked++; if ((GLeeFuncPtr_glGetVertexAttribfv = (GLEEPFNGLGETVERTEXATTRIBFVPROC) __GLeeGetProcAddress("glGetVertexAttribfv"))!=0) nLinked++; if ((GLeeFuncPtr_glGetVertexAttribiv = (GLEEPFNGLGETVERTEXATTRIBIVPROC) __GLeeGetProcAddress("glGetVertexAttribiv"))!=0) nLinked++; if ((GLeeFuncPtr_glGetVertexAttribPointerv = (GLEEPFNGLGETVERTEXATTRIBPOINTERVPROC) __GLeeGetProcAddress("glGetVertexAttribPointerv"))!=0) nLinked++; if ((GLeeFuncPtr_glIsProgram = (GLEEPFNGLISPROGRAMPROC) __GLeeGetProcAddress("glIsProgram"))!=0) nLinked++; if ((GLeeFuncPtr_glIsShader = (GLEEPFNGLISSHADERPROC) __GLeeGetProcAddress("glIsShader"))!=0) nLinked++; if ((GLeeFuncPtr_glLinkProgram = (GLEEPFNGLLINKPROGRAMPROC) __GLeeGetProcAddress("glLinkProgram"))!=0) nLinked++; if ((GLeeFuncPtr_glShaderSource = (GLEEPFNGLSHADERSOURCEPROC) __GLeeGetProcAddress("glShaderSource"))!=0) nLinked++; if ((GLeeFuncPtr_glUseProgram = (GLEEPFNGLUSEPROGRAMPROC) __GLeeGetProcAddress("glUseProgram"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform1f = (GLEEPFNGLUNIFORM1FPROC) __GLeeGetProcAddress("glUniform1f"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform2f = (GLEEPFNGLUNIFORM2FPROC) __GLeeGetProcAddress("glUniform2f"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform3f = (GLEEPFNGLUNIFORM3FPROC) __GLeeGetProcAddress("glUniform3f"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform4f = (GLEEPFNGLUNIFORM4FPROC) __GLeeGetProcAddress("glUniform4f"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform1i = (GLEEPFNGLUNIFORM1IPROC) __GLeeGetProcAddress("glUniform1i"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform2i = (GLEEPFNGLUNIFORM2IPROC) __GLeeGetProcAddress("glUniform2i"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform3i = (GLEEPFNGLUNIFORM3IPROC) __GLeeGetProcAddress("glUniform3i"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform4i = (GLEEPFNGLUNIFORM4IPROC) __GLeeGetProcAddress("glUniform4i"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform1fv = (GLEEPFNGLUNIFORM1FVPROC) __GLeeGetProcAddress("glUniform1fv"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform2fv = (GLEEPFNGLUNIFORM2FVPROC) __GLeeGetProcAddress("glUniform2fv"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform3fv = (GLEEPFNGLUNIFORM3FVPROC) __GLeeGetProcAddress("glUniform3fv"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform4fv = (GLEEPFNGLUNIFORM4FVPROC) __GLeeGetProcAddress("glUniform4fv"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform1iv = (GLEEPFNGLUNIFORM1IVPROC) __GLeeGetProcAddress("glUniform1iv"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform2iv = (GLEEPFNGLUNIFORM2IVPROC) __GLeeGetProcAddress("glUniform2iv"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform3iv = (GLEEPFNGLUNIFORM3IVPROC) __GLeeGetProcAddress("glUniform3iv"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform4iv = (GLEEPFNGLUNIFORM4IVPROC) __GLeeGetProcAddress("glUniform4iv"))!=0) nLinked++; if ((GLeeFuncPtr_glUniformMatrix2fv = (GLEEPFNGLUNIFORMMATRIX2FVPROC) __GLeeGetProcAddress("glUniformMatrix2fv"))!=0) nLinked++; if ((GLeeFuncPtr_glUniformMatrix3fv = (GLEEPFNGLUNIFORMMATRIX3FVPROC) __GLeeGetProcAddress("glUniformMatrix3fv"))!=0) nLinked++; if ((GLeeFuncPtr_glUniformMatrix4fv = (GLEEPFNGLUNIFORMMATRIX4FVPROC) __GLeeGetProcAddress("glUniformMatrix4fv"))!=0) nLinked++; if ((GLeeFuncPtr_glValidateProgram = (GLEEPFNGLVALIDATEPROGRAMPROC) __GLeeGetProcAddress("glValidateProgram"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib1d = (GLEEPFNGLVERTEXATTRIB1DPROC) __GLeeGetProcAddress("glVertexAttrib1d"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib1dv = (GLEEPFNGLVERTEXATTRIB1DVPROC) __GLeeGetProcAddress("glVertexAttrib1dv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib1f = (GLEEPFNGLVERTEXATTRIB1FPROC) __GLeeGetProcAddress("glVertexAttrib1f"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib1fv = (GLEEPFNGLVERTEXATTRIB1FVPROC) __GLeeGetProcAddress("glVertexAttrib1fv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib1s = (GLEEPFNGLVERTEXATTRIB1SPROC) __GLeeGetProcAddress("glVertexAttrib1s"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib1sv = (GLEEPFNGLVERTEXATTRIB1SVPROC) __GLeeGetProcAddress("glVertexAttrib1sv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib2d = (GLEEPFNGLVERTEXATTRIB2DPROC) __GLeeGetProcAddress("glVertexAttrib2d"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib2dv = (GLEEPFNGLVERTEXATTRIB2DVPROC) __GLeeGetProcAddress("glVertexAttrib2dv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib2f = (GLEEPFNGLVERTEXATTRIB2FPROC) __GLeeGetProcAddress("glVertexAttrib2f"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib2fv = (GLEEPFNGLVERTEXATTRIB2FVPROC) __GLeeGetProcAddress("glVertexAttrib2fv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib2s = (GLEEPFNGLVERTEXATTRIB2SPROC) __GLeeGetProcAddress("glVertexAttrib2s"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib2sv = (GLEEPFNGLVERTEXATTRIB2SVPROC) __GLeeGetProcAddress("glVertexAttrib2sv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib3d = (GLEEPFNGLVERTEXATTRIB3DPROC) __GLeeGetProcAddress("glVertexAttrib3d"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib3dv = (GLEEPFNGLVERTEXATTRIB3DVPROC) __GLeeGetProcAddress("glVertexAttrib3dv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib3f = (GLEEPFNGLVERTEXATTRIB3FPROC) __GLeeGetProcAddress("glVertexAttrib3f"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib3fv = (GLEEPFNGLVERTEXATTRIB3FVPROC) __GLeeGetProcAddress("glVertexAttrib3fv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib3s = (GLEEPFNGLVERTEXATTRIB3SPROC) __GLeeGetProcAddress("glVertexAttrib3s"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib3sv = (GLEEPFNGLVERTEXATTRIB3SVPROC) __GLeeGetProcAddress("glVertexAttrib3sv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4Nbv = (GLEEPFNGLVERTEXATTRIB4NBVPROC) __GLeeGetProcAddress("glVertexAttrib4Nbv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4Niv = (GLEEPFNGLVERTEXATTRIB4NIVPROC) __GLeeGetProcAddress("glVertexAttrib4Niv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4Nsv = (GLEEPFNGLVERTEXATTRIB4NSVPROC) __GLeeGetProcAddress("glVertexAttrib4Nsv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4Nub = (GLEEPFNGLVERTEXATTRIB4NUBPROC) __GLeeGetProcAddress("glVertexAttrib4Nub"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4Nubv = (GLEEPFNGLVERTEXATTRIB4NUBVPROC) __GLeeGetProcAddress("glVertexAttrib4Nubv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4Nuiv = (GLEEPFNGLVERTEXATTRIB4NUIVPROC) __GLeeGetProcAddress("glVertexAttrib4Nuiv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4Nusv = (GLEEPFNGLVERTEXATTRIB4NUSVPROC) __GLeeGetProcAddress("glVertexAttrib4Nusv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4bv = (GLEEPFNGLVERTEXATTRIB4BVPROC) __GLeeGetProcAddress("glVertexAttrib4bv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4d = (GLEEPFNGLVERTEXATTRIB4DPROC) __GLeeGetProcAddress("glVertexAttrib4d"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4dv = (GLEEPFNGLVERTEXATTRIB4DVPROC) __GLeeGetProcAddress("glVertexAttrib4dv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4f = (GLEEPFNGLVERTEXATTRIB4FPROC) __GLeeGetProcAddress("glVertexAttrib4f"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4fv = (GLEEPFNGLVERTEXATTRIB4FVPROC) __GLeeGetProcAddress("glVertexAttrib4fv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4iv = (GLEEPFNGLVERTEXATTRIB4IVPROC) __GLeeGetProcAddress("glVertexAttrib4iv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4s = (GLEEPFNGLVERTEXATTRIB4SPROC) __GLeeGetProcAddress("glVertexAttrib4s"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4sv = (GLEEPFNGLVERTEXATTRIB4SVPROC) __GLeeGetProcAddress("glVertexAttrib4sv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4ubv = (GLEEPFNGLVERTEXATTRIB4UBVPROC) __GLeeGetProcAddress("glVertexAttrib4ubv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4uiv = (GLEEPFNGLVERTEXATTRIB4UIVPROC) __GLeeGetProcAddress("glVertexAttrib4uiv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4usv = (GLEEPFNGLVERTEXATTRIB4USVPROC) __GLeeGetProcAddress("glVertexAttrib4usv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribPointer = (GLEEPFNGLVERTEXATTRIBPOINTERPROC) __GLeeGetProcAddress("glVertexAttribPointer"))!=0) nLinked++; #endif if (nLinked==93) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_VERSION_2_1(void) { GLint nLinked=0; #ifdef __GLEE_GL_VERSION_2_1 if ((GLeeFuncPtr_glUniformMatrix2x3fv = (GLEEPFNGLUNIFORMMATRIX2X3FVPROC) __GLeeGetProcAddress("glUniformMatrix2x3fv"))!=0) nLinked++; if ((GLeeFuncPtr_glUniformMatrix3x2fv = (GLEEPFNGLUNIFORMMATRIX3X2FVPROC) __GLeeGetProcAddress("glUniformMatrix3x2fv"))!=0) nLinked++; if ((GLeeFuncPtr_glUniformMatrix2x4fv = (GLEEPFNGLUNIFORMMATRIX2X4FVPROC) __GLeeGetProcAddress("glUniformMatrix2x4fv"))!=0) nLinked++; if ((GLeeFuncPtr_glUniformMatrix4x2fv = (GLEEPFNGLUNIFORMMATRIX4X2FVPROC) __GLeeGetProcAddress("glUniformMatrix4x2fv"))!=0) nLinked++; if ((GLeeFuncPtr_glUniformMatrix3x4fv = (GLEEPFNGLUNIFORMMATRIX3X4FVPROC) __GLeeGetProcAddress("glUniformMatrix3x4fv"))!=0) nLinked++; if ((GLeeFuncPtr_glUniformMatrix4x3fv = (GLEEPFNGLUNIFORMMATRIX4X3FVPROC) __GLeeGetProcAddress("glUniformMatrix4x3fv"))!=0) nLinked++; #endif if (nLinked==6) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_VERSION_3_0(void) { GLint nLinked=0; #ifdef __GLEE_GL_VERSION_3_0 if ((GLeeFuncPtr_glColorMaski = (GLEEPFNGLCOLORMASKIPROC) __GLeeGetProcAddress("glColorMaski"))!=0) nLinked++; if ((GLeeFuncPtr_glGetBooleani_v = (GLEEPFNGLGETBOOLEANI_VPROC) __GLeeGetProcAddress("glGetBooleani_v"))!=0) nLinked++; if ((GLeeFuncPtr_glGetIntegeri_v = (GLEEPFNGLGETINTEGERI_VPROC) __GLeeGetProcAddress("glGetIntegeri_v"))!=0) nLinked++; if ((GLeeFuncPtr_glEnablei = (GLEEPFNGLENABLEIPROC) __GLeeGetProcAddress("glEnablei"))!=0) nLinked++; if ((GLeeFuncPtr_glDisablei = (GLEEPFNGLDISABLEIPROC) __GLeeGetProcAddress("glDisablei"))!=0) nLinked++; if ((GLeeFuncPtr_glIsEnabledi = (GLEEPFNGLISENABLEDIPROC) __GLeeGetProcAddress("glIsEnabledi"))!=0) nLinked++; if ((GLeeFuncPtr_glBeginTransformFeedback = (GLEEPFNGLBEGINTRANSFORMFEEDBACKPROC) __GLeeGetProcAddress("glBeginTransformFeedback"))!=0) nLinked++; if ((GLeeFuncPtr_glEndTransformFeedback = (GLEEPFNGLENDTRANSFORMFEEDBACKPROC) __GLeeGetProcAddress("glEndTransformFeedback"))!=0) nLinked++; if ((GLeeFuncPtr_glBindBufferRange = (GLEEPFNGLBINDBUFFERRANGEPROC) __GLeeGetProcAddress("glBindBufferRange"))!=0) nLinked++; if ((GLeeFuncPtr_glBindBufferBase = (GLEEPFNGLBINDBUFFERBASEPROC) __GLeeGetProcAddress("glBindBufferBase"))!=0) nLinked++; if ((GLeeFuncPtr_glTransformFeedbackVaryings = (GLEEPFNGLTRANSFORMFEEDBACKVARYINGSPROC) __GLeeGetProcAddress("glTransformFeedbackVaryings"))!=0) nLinked++; if ((GLeeFuncPtr_glGetTransformFeedbackVarying = (GLEEPFNGLGETTRANSFORMFEEDBACKVARYINGPROC) __GLeeGetProcAddress("glGetTransformFeedbackVarying"))!=0) nLinked++; if ((GLeeFuncPtr_glClampColor = (GLEEPFNGLCLAMPCOLORPROC) __GLeeGetProcAddress("glClampColor"))!=0) nLinked++; if ((GLeeFuncPtr_glBeginConditionalRender = (GLEEPFNGLBEGINCONDITIONALRENDERPROC) __GLeeGetProcAddress("glBeginConditionalRender"))!=0) nLinked++; if ((GLeeFuncPtr_glEndConditionalRender = (GLEEPFNGLENDCONDITIONALRENDERPROC) __GLeeGetProcAddress("glEndConditionalRender"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribI1i = (GLEEPFNGLVERTEXATTRIBI1IPROC) __GLeeGetProcAddress("glVertexAttribI1i"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribI2i = (GLEEPFNGLVERTEXATTRIBI2IPROC) __GLeeGetProcAddress("glVertexAttribI2i"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribI3i = (GLEEPFNGLVERTEXATTRIBI3IPROC) __GLeeGetProcAddress("glVertexAttribI3i"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribI4i = (GLEEPFNGLVERTEXATTRIBI4IPROC) __GLeeGetProcAddress("glVertexAttribI4i"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribI1ui = (GLEEPFNGLVERTEXATTRIBI1UIPROC) __GLeeGetProcAddress("glVertexAttribI1ui"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribI2ui = (GLEEPFNGLVERTEXATTRIBI2UIPROC) __GLeeGetProcAddress("glVertexAttribI2ui"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribI3ui = (GLEEPFNGLVERTEXATTRIBI3UIPROC) __GLeeGetProcAddress("glVertexAttribI3ui"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribI4ui = (GLEEPFNGLVERTEXATTRIBI4UIPROC) __GLeeGetProcAddress("glVertexAttribI4ui"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribI1iv = (GLEEPFNGLVERTEXATTRIBI1IVPROC) __GLeeGetProcAddress("glVertexAttribI1iv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribI2iv = (GLEEPFNGLVERTEXATTRIBI2IVPROC) __GLeeGetProcAddress("glVertexAttribI2iv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribI3iv = (GLEEPFNGLVERTEXATTRIBI3IVPROC) __GLeeGetProcAddress("glVertexAttribI3iv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribI4iv = (GLEEPFNGLVERTEXATTRIBI4IVPROC) __GLeeGetProcAddress("glVertexAttribI4iv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribI1uiv = (GLEEPFNGLVERTEXATTRIBI1UIVPROC) __GLeeGetProcAddress("glVertexAttribI1uiv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribI2uiv = (GLEEPFNGLVERTEXATTRIBI2UIVPROC) __GLeeGetProcAddress("glVertexAttribI2uiv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribI3uiv = (GLEEPFNGLVERTEXATTRIBI3UIVPROC) __GLeeGetProcAddress("glVertexAttribI3uiv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribI4uiv = (GLEEPFNGLVERTEXATTRIBI4UIVPROC) __GLeeGetProcAddress("glVertexAttribI4uiv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribI4bv = (GLEEPFNGLVERTEXATTRIBI4BVPROC) __GLeeGetProcAddress("glVertexAttribI4bv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribI4sv = (GLEEPFNGLVERTEXATTRIBI4SVPROC) __GLeeGetProcAddress("glVertexAttribI4sv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribI4ubv = (GLEEPFNGLVERTEXATTRIBI4UBVPROC) __GLeeGetProcAddress("glVertexAttribI4ubv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribI4usv = (GLEEPFNGLVERTEXATTRIBI4USVPROC) __GLeeGetProcAddress("glVertexAttribI4usv"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribIPointer = (GLEEPFNGLVERTEXATTRIBIPOINTERPROC) __GLeeGetProcAddress("glVertexAttribIPointer"))!=0) nLinked++; if ((GLeeFuncPtr_glGetVertexAttribIiv = (GLEEPFNGLGETVERTEXATTRIBIIVPROC) __GLeeGetProcAddress("glGetVertexAttribIiv"))!=0) nLinked++; if ((GLeeFuncPtr_glGetVertexAttribIuiv = (GLEEPFNGLGETVERTEXATTRIBIUIVPROC) __GLeeGetProcAddress("glGetVertexAttribIuiv"))!=0) nLinked++; if ((GLeeFuncPtr_glGetUniformuiv = (GLEEPFNGLGETUNIFORMUIVPROC) __GLeeGetProcAddress("glGetUniformuiv"))!=0) nLinked++; if ((GLeeFuncPtr_glBindFragDataLocation = (GLEEPFNGLBINDFRAGDATALOCATIONPROC) __GLeeGetProcAddress("glBindFragDataLocation"))!=0) nLinked++; if ((GLeeFuncPtr_glGetFragDataLocation = (GLEEPFNGLGETFRAGDATALOCATIONPROC) __GLeeGetProcAddress("glGetFragDataLocation"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform1ui = (GLEEPFNGLUNIFORM1UIPROC) __GLeeGetProcAddress("glUniform1ui"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform2ui = (GLEEPFNGLUNIFORM2UIPROC) __GLeeGetProcAddress("glUniform2ui"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform3ui = (GLEEPFNGLUNIFORM3UIPROC) __GLeeGetProcAddress("glUniform3ui"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform4ui = (GLEEPFNGLUNIFORM4UIPROC) __GLeeGetProcAddress("glUniform4ui"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform1uiv = (GLEEPFNGLUNIFORM1UIVPROC) __GLeeGetProcAddress("glUniform1uiv"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform2uiv = (GLEEPFNGLUNIFORM2UIVPROC) __GLeeGetProcAddress("glUniform2uiv"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform3uiv = (GLEEPFNGLUNIFORM3UIVPROC) __GLeeGetProcAddress("glUniform3uiv"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform4uiv = (GLEEPFNGLUNIFORM4UIVPROC) __GLeeGetProcAddress("glUniform4uiv"))!=0) nLinked++; if ((GLeeFuncPtr_glTexParameterIiv = (GLEEPFNGLTEXPARAMETERIIVPROC) __GLeeGetProcAddress("glTexParameterIiv"))!=0) nLinked++; if ((GLeeFuncPtr_glTexParameterIuiv = (GLEEPFNGLTEXPARAMETERIUIVPROC) __GLeeGetProcAddress("glTexParameterIuiv"))!=0) nLinked++; if ((GLeeFuncPtr_glGetTexParameterIiv = (GLEEPFNGLGETTEXPARAMETERIIVPROC) __GLeeGetProcAddress("glGetTexParameterIiv"))!=0) nLinked++; if ((GLeeFuncPtr_glGetTexParameterIuiv = (GLEEPFNGLGETTEXPARAMETERIUIVPROC) __GLeeGetProcAddress("glGetTexParameterIuiv"))!=0) nLinked++; if ((GLeeFuncPtr_glClearBufferiv = (GLEEPFNGLCLEARBUFFERIVPROC) __GLeeGetProcAddress("glClearBufferiv"))!=0) nLinked++; if ((GLeeFuncPtr_glClearBufferuiv = (GLEEPFNGLCLEARBUFFERUIVPROC) __GLeeGetProcAddress("glClearBufferuiv"))!=0) nLinked++; if ((GLeeFuncPtr_glClearBufferfv = (GLEEPFNGLCLEARBUFFERFVPROC) __GLeeGetProcAddress("glClearBufferfv"))!=0) nLinked++; if ((GLeeFuncPtr_glClearBufferfi = (GLEEPFNGLCLEARBUFFERFIPROC) __GLeeGetProcAddress("glClearBufferfi"))!=0) nLinked++; if ((GLeeFuncPtr_glGetStringi = (GLEEPFNGLGETSTRINGIPROC) __GLeeGetProcAddress("glGetStringi"))!=0) nLinked++; #endif if (nLinked==58) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_multitexture(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_multitexture if ((GLeeFuncPtr_glActiveTextureARB = (GLEEPFNGLACTIVETEXTUREARBPROC) __GLeeGetProcAddress("glActiveTextureARB"))!=0) nLinked++; if ((GLeeFuncPtr_glClientActiveTextureARB = (GLEEPFNGLCLIENTACTIVETEXTUREARBPROC) __GLeeGetProcAddress("glClientActiveTextureARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord1dARB = (GLEEPFNGLMULTITEXCOORD1DARBPROC) __GLeeGetProcAddress("glMultiTexCoord1dARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord1dvARB = (GLEEPFNGLMULTITEXCOORD1DVARBPROC) __GLeeGetProcAddress("glMultiTexCoord1dvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord1fARB = (GLEEPFNGLMULTITEXCOORD1FARBPROC) __GLeeGetProcAddress("glMultiTexCoord1fARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord1fvARB = (GLEEPFNGLMULTITEXCOORD1FVARBPROC) __GLeeGetProcAddress("glMultiTexCoord1fvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord1iARB = (GLEEPFNGLMULTITEXCOORD1IARBPROC) __GLeeGetProcAddress("glMultiTexCoord1iARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord1ivARB = (GLEEPFNGLMULTITEXCOORD1IVARBPROC) __GLeeGetProcAddress("glMultiTexCoord1ivARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord1sARB = (GLEEPFNGLMULTITEXCOORD1SARBPROC) __GLeeGetProcAddress("glMultiTexCoord1sARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord1svARB = (GLEEPFNGLMULTITEXCOORD1SVARBPROC) __GLeeGetProcAddress("glMultiTexCoord1svARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord2dARB = (GLEEPFNGLMULTITEXCOORD2DARBPROC) __GLeeGetProcAddress("glMultiTexCoord2dARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord2dvARB = (GLEEPFNGLMULTITEXCOORD2DVARBPROC) __GLeeGetProcAddress("glMultiTexCoord2dvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord2fARB = (GLEEPFNGLMULTITEXCOORD2FARBPROC) __GLeeGetProcAddress("glMultiTexCoord2fARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord2fvARB = (GLEEPFNGLMULTITEXCOORD2FVARBPROC) __GLeeGetProcAddress("glMultiTexCoord2fvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord2iARB = (GLEEPFNGLMULTITEXCOORD2IARBPROC) __GLeeGetProcAddress("glMultiTexCoord2iARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord2ivARB = (GLEEPFNGLMULTITEXCOORD2IVARBPROC) __GLeeGetProcAddress("glMultiTexCoord2ivARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord2sARB = (GLEEPFNGLMULTITEXCOORD2SARBPROC) __GLeeGetProcAddress("glMultiTexCoord2sARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord2svARB = (GLEEPFNGLMULTITEXCOORD2SVARBPROC) __GLeeGetProcAddress("glMultiTexCoord2svARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord3dARB = (GLEEPFNGLMULTITEXCOORD3DARBPROC) __GLeeGetProcAddress("glMultiTexCoord3dARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord3dvARB = (GLEEPFNGLMULTITEXCOORD3DVARBPROC) __GLeeGetProcAddress("glMultiTexCoord3dvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord3fARB = (GLEEPFNGLMULTITEXCOORD3FARBPROC) __GLeeGetProcAddress("glMultiTexCoord3fARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord3fvARB = (GLEEPFNGLMULTITEXCOORD3FVARBPROC) __GLeeGetProcAddress("glMultiTexCoord3fvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord3iARB = (GLEEPFNGLMULTITEXCOORD3IARBPROC) __GLeeGetProcAddress("glMultiTexCoord3iARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord3ivARB = (GLEEPFNGLMULTITEXCOORD3IVARBPROC) __GLeeGetProcAddress("glMultiTexCoord3ivARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord3sARB = (GLEEPFNGLMULTITEXCOORD3SARBPROC) __GLeeGetProcAddress("glMultiTexCoord3sARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord3svARB = (GLEEPFNGLMULTITEXCOORD3SVARBPROC) __GLeeGetProcAddress("glMultiTexCoord3svARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord4dARB = (GLEEPFNGLMULTITEXCOORD4DARBPROC) __GLeeGetProcAddress("glMultiTexCoord4dARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord4dvARB = (GLEEPFNGLMULTITEXCOORD4DVARBPROC) __GLeeGetProcAddress("glMultiTexCoord4dvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord4fARB = (GLEEPFNGLMULTITEXCOORD4FARBPROC) __GLeeGetProcAddress("glMultiTexCoord4fARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord4fvARB = (GLEEPFNGLMULTITEXCOORD4FVARBPROC) __GLeeGetProcAddress("glMultiTexCoord4fvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord4iARB = (GLEEPFNGLMULTITEXCOORD4IARBPROC) __GLeeGetProcAddress("glMultiTexCoord4iARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord4ivARB = (GLEEPFNGLMULTITEXCOORD4IVARBPROC) __GLeeGetProcAddress("glMultiTexCoord4ivARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord4sARB = (GLEEPFNGLMULTITEXCOORD4SARBPROC) __GLeeGetProcAddress("glMultiTexCoord4sARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord4svARB = (GLEEPFNGLMULTITEXCOORD4SVARBPROC) __GLeeGetProcAddress("glMultiTexCoord4svARB"))!=0) nLinked++; #endif if (nLinked==34) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_transpose_matrix(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_transpose_matrix if ((GLeeFuncPtr_glLoadTransposeMatrixfARB = (GLEEPFNGLLOADTRANSPOSEMATRIXFARBPROC) __GLeeGetProcAddress("glLoadTransposeMatrixfARB"))!=0) nLinked++; if ((GLeeFuncPtr_glLoadTransposeMatrixdARB = (GLEEPFNGLLOADTRANSPOSEMATRIXDARBPROC) __GLeeGetProcAddress("glLoadTransposeMatrixdARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMultTransposeMatrixfARB = (GLEEPFNGLMULTTRANSPOSEMATRIXFARBPROC) __GLeeGetProcAddress("glMultTransposeMatrixfARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMultTransposeMatrixdARB = (GLEEPFNGLMULTTRANSPOSEMATRIXDARBPROC) __GLeeGetProcAddress("glMultTransposeMatrixdARB"))!=0) nLinked++; #endif if (nLinked==4) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_multisample(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_multisample if ((GLeeFuncPtr_glSampleCoverageARB = (GLEEPFNGLSAMPLECOVERAGEARBPROC) __GLeeGetProcAddress("glSampleCoverageARB"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_texture_env_add(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_texture_cube_map(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_texture_compression(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_texture_compression if ((GLeeFuncPtr_glCompressedTexImage3DARB = (GLEEPFNGLCOMPRESSEDTEXIMAGE3DARBPROC) __GLeeGetProcAddress("glCompressedTexImage3DARB"))!=0) nLinked++; if ((GLeeFuncPtr_glCompressedTexImage2DARB = (GLEEPFNGLCOMPRESSEDTEXIMAGE2DARBPROC) __GLeeGetProcAddress("glCompressedTexImage2DARB"))!=0) nLinked++; if ((GLeeFuncPtr_glCompressedTexImage1DARB = (GLEEPFNGLCOMPRESSEDTEXIMAGE1DARBPROC) __GLeeGetProcAddress("glCompressedTexImage1DARB"))!=0) nLinked++; if ((GLeeFuncPtr_glCompressedTexSubImage3DARB = (GLEEPFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC) __GLeeGetProcAddress("glCompressedTexSubImage3DARB"))!=0) nLinked++; if ((GLeeFuncPtr_glCompressedTexSubImage2DARB = (GLEEPFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC) __GLeeGetProcAddress("glCompressedTexSubImage2DARB"))!=0) nLinked++; if ((GLeeFuncPtr_glCompressedTexSubImage1DARB = (GLEEPFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC) __GLeeGetProcAddress("glCompressedTexSubImage1DARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetCompressedTexImageARB = (GLEEPFNGLGETCOMPRESSEDTEXIMAGEARBPROC) __GLeeGetProcAddress("glGetCompressedTexImageARB"))!=0) nLinked++; #endif if (nLinked==7) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_texture_border_clamp(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_point_parameters(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_point_parameters if ((GLeeFuncPtr_glPointParameterfARB = (GLEEPFNGLPOINTPARAMETERFARBPROC) __GLeeGetProcAddress("glPointParameterfARB"))!=0) nLinked++; if ((GLeeFuncPtr_glPointParameterfvARB = (GLEEPFNGLPOINTPARAMETERFVARBPROC) __GLeeGetProcAddress("glPointParameterfvARB"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_vertex_blend(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_vertex_blend if ((GLeeFuncPtr_glWeightbvARB = (GLEEPFNGLWEIGHTBVARBPROC) __GLeeGetProcAddress("glWeightbvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glWeightsvARB = (GLEEPFNGLWEIGHTSVARBPROC) __GLeeGetProcAddress("glWeightsvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glWeightivARB = (GLEEPFNGLWEIGHTIVARBPROC) __GLeeGetProcAddress("glWeightivARB"))!=0) nLinked++; if ((GLeeFuncPtr_glWeightfvARB = (GLEEPFNGLWEIGHTFVARBPROC) __GLeeGetProcAddress("glWeightfvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glWeightdvARB = (GLEEPFNGLWEIGHTDVARBPROC) __GLeeGetProcAddress("glWeightdvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glWeightubvARB = (GLEEPFNGLWEIGHTUBVARBPROC) __GLeeGetProcAddress("glWeightubvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glWeightusvARB = (GLEEPFNGLWEIGHTUSVARBPROC) __GLeeGetProcAddress("glWeightusvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glWeightuivARB = (GLEEPFNGLWEIGHTUIVARBPROC) __GLeeGetProcAddress("glWeightuivARB"))!=0) nLinked++; if ((GLeeFuncPtr_glWeightPointerARB = (GLEEPFNGLWEIGHTPOINTERARBPROC) __GLeeGetProcAddress("glWeightPointerARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexBlendARB = (GLEEPFNGLVERTEXBLENDARBPROC) __GLeeGetProcAddress("glVertexBlendARB"))!=0) nLinked++; #endif if (nLinked==10) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_matrix_palette(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_matrix_palette if ((GLeeFuncPtr_glCurrentPaletteMatrixARB = (GLEEPFNGLCURRENTPALETTEMATRIXARBPROC) __GLeeGetProcAddress("glCurrentPaletteMatrixARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMatrixIndexubvARB = (GLEEPFNGLMATRIXINDEXUBVARBPROC) __GLeeGetProcAddress("glMatrixIndexubvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMatrixIndexusvARB = (GLEEPFNGLMATRIXINDEXUSVARBPROC) __GLeeGetProcAddress("glMatrixIndexusvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMatrixIndexuivARB = (GLEEPFNGLMATRIXINDEXUIVARBPROC) __GLeeGetProcAddress("glMatrixIndexuivARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMatrixIndexPointerARB = (GLEEPFNGLMATRIXINDEXPOINTERARBPROC) __GLeeGetProcAddress("glMatrixIndexPointerARB"))!=0) nLinked++; #endif if (nLinked==5) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_texture_env_combine(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_texture_env_crossbar(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_texture_env_dot3(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_texture_mirrored_repeat(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_depth_texture(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_shadow(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_shadow_ambient(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_window_pos(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_window_pos if ((GLeeFuncPtr_glWindowPos2dARB = (GLEEPFNGLWINDOWPOS2DARBPROC) __GLeeGetProcAddress("glWindowPos2dARB"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos2dvARB = (GLEEPFNGLWINDOWPOS2DVARBPROC) __GLeeGetProcAddress("glWindowPos2dvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos2fARB = (GLEEPFNGLWINDOWPOS2FARBPROC) __GLeeGetProcAddress("glWindowPos2fARB"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos2fvARB = (GLEEPFNGLWINDOWPOS2FVARBPROC) __GLeeGetProcAddress("glWindowPos2fvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos2iARB = (GLEEPFNGLWINDOWPOS2IARBPROC) __GLeeGetProcAddress("glWindowPos2iARB"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos2ivARB = (GLEEPFNGLWINDOWPOS2IVARBPROC) __GLeeGetProcAddress("glWindowPos2ivARB"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos2sARB = (GLEEPFNGLWINDOWPOS2SARBPROC) __GLeeGetProcAddress("glWindowPos2sARB"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos2svARB = (GLEEPFNGLWINDOWPOS2SVARBPROC) __GLeeGetProcAddress("glWindowPos2svARB"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos3dARB = (GLEEPFNGLWINDOWPOS3DARBPROC) __GLeeGetProcAddress("glWindowPos3dARB"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos3dvARB = (GLEEPFNGLWINDOWPOS3DVARBPROC) __GLeeGetProcAddress("glWindowPos3dvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos3fARB = (GLEEPFNGLWINDOWPOS3FARBPROC) __GLeeGetProcAddress("glWindowPos3fARB"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos3fvARB = (GLEEPFNGLWINDOWPOS3FVARBPROC) __GLeeGetProcAddress("glWindowPos3fvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos3iARB = (GLEEPFNGLWINDOWPOS3IARBPROC) __GLeeGetProcAddress("glWindowPos3iARB"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos3ivARB = (GLEEPFNGLWINDOWPOS3IVARBPROC) __GLeeGetProcAddress("glWindowPos3ivARB"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos3sARB = (GLEEPFNGLWINDOWPOS3SARBPROC) __GLeeGetProcAddress("glWindowPos3sARB"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos3svARB = (GLEEPFNGLWINDOWPOS3SVARBPROC) __GLeeGetProcAddress("glWindowPos3svARB"))!=0) nLinked++; #endif if (nLinked==16) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_vertex_program(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_vertex_program if ((GLeeFuncPtr_glVertexAttrib1dARB = (GLEEPFNGLVERTEXATTRIB1DARBPROC) __GLeeGetProcAddress("glVertexAttrib1dARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib1dvARB = (GLEEPFNGLVERTEXATTRIB1DVARBPROC) __GLeeGetProcAddress("glVertexAttrib1dvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib1fARB = (GLEEPFNGLVERTEXATTRIB1FARBPROC) __GLeeGetProcAddress("glVertexAttrib1fARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib1fvARB = (GLEEPFNGLVERTEXATTRIB1FVARBPROC) __GLeeGetProcAddress("glVertexAttrib1fvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib1sARB = (GLEEPFNGLVERTEXATTRIB1SARBPROC) __GLeeGetProcAddress("glVertexAttrib1sARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib1svARB = (GLEEPFNGLVERTEXATTRIB1SVARBPROC) __GLeeGetProcAddress("glVertexAttrib1svARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib2dARB = (GLEEPFNGLVERTEXATTRIB2DARBPROC) __GLeeGetProcAddress("glVertexAttrib2dARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib2dvARB = (GLEEPFNGLVERTEXATTRIB2DVARBPROC) __GLeeGetProcAddress("glVertexAttrib2dvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib2fARB = (GLEEPFNGLVERTEXATTRIB2FARBPROC) __GLeeGetProcAddress("glVertexAttrib2fARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib2fvARB = (GLEEPFNGLVERTEXATTRIB2FVARBPROC) __GLeeGetProcAddress("glVertexAttrib2fvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib2sARB = (GLEEPFNGLVERTEXATTRIB2SARBPROC) __GLeeGetProcAddress("glVertexAttrib2sARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib2svARB = (GLEEPFNGLVERTEXATTRIB2SVARBPROC) __GLeeGetProcAddress("glVertexAttrib2svARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib3dARB = (GLEEPFNGLVERTEXATTRIB3DARBPROC) __GLeeGetProcAddress("glVertexAttrib3dARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib3dvARB = (GLEEPFNGLVERTEXATTRIB3DVARBPROC) __GLeeGetProcAddress("glVertexAttrib3dvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib3fARB = (GLEEPFNGLVERTEXATTRIB3FARBPROC) __GLeeGetProcAddress("glVertexAttrib3fARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib3fvARB = (GLEEPFNGLVERTEXATTRIB3FVARBPROC) __GLeeGetProcAddress("glVertexAttrib3fvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib3sARB = (GLEEPFNGLVERTEXATTRIB3SARBPROC) __GLeeGetProcAddress("glVertexAttrib3sARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib3svARB = (GLEEPFNGLVERTEXATTRIB3SVARBPROC) __GLeeGetProcAddress("glVertexAttrib3svARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4NbvARB = (GLEEPFNGLVERTEXATTRIB4NBVARBPROC) __GLeeGetProcAddress("glVertexAttrib4NbvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4NivARB = (GLEEPFNGLVERTEXATTRIB4NIVARBPROC) __GLeeGetProcAddress("glVertexAttrib4NivARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4NsvARB = (GLEEPFNGLVERTEXATTRIB4NSVARBPROC) __GLeeGetProcAddress("glVertexAttrib4NsvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4NubARB = (GLEEPFNGLVERTEXATTRIB4NUBARBPROC) __GLeeGetProcAddress("glVertexAttrib4NubARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4NubvARB = (GLEEPFNGLVERTEXATTRIB4NUBVARBPROC) __GLeeGetProcAddress("glVertexAttrib4NubvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4NuivARB = (GLEEPFNGLVERTEXATTRIB4NUIVARBPROC) __GLeeGetProcAddress("glVertexAttrib4NuivARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4NusvARB = (GLEEPFNGLVERTEXATTRIB4NUSVARBPROC) __GLeeGetProcAddress("glVertexAttrib4NusvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4bvARB = (GLEEPFNGLVERTEXATTRIB4BVARBPROC) __GLeeGetProcAddress("glVertexAttrib4bvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4dARB = (GLEEPFNGLVERTEXATTRIB4DARBPROC) __GLeeGetProcAddress("glVertexAttrib4dARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4dvARB = (GLEEPFNGLVERTEXATTRIB4DVARBPROC) __GLeeGetProcAddress("glVertexAttrib4dvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4fARB = (GLEEPFNGLVERTEXATTRIB4FARBPROC) __GLeeGetProcAddress("glVertexAttrib4fARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4fvARB = (GLEEPFNGLVERTEXATTRIB4FVARBPROC) __GLeeGetProcAddress("glVertexAttrib4fvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4ivARB = (GLEEPFNGLVERTEXATTRIB4IVARBPROC) __GLeeGetProcAddress("glVertexAttrib4ivARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4sARB = (GLEEPFNGLVERTEXATTRIB4SARBPROC) __GLeeGetProcAddress("glVertexAttrib4sARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4svARB = (GLEEPFNGLVERTEXATTRIB4SVARBPROC) __GLeeGetProcAddress("glVertexAttrib4svARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4ubvARB = (GLEEPFNGLVERTEXATTRIB4UBVARBPROC) __GLeeGetProcAddress("glVertexAttrib4ubvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4uivARB = (GLEEPFNGLVERTEXATTRIB4UIVARBPROC) __GLeeGetProcAddress("glVertexAttrib4uivARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4usvARB = (GLEEPFNGLVERTEXATTRIB4USVARBPROC) __GLeeGetProcAddress("glVertexAttrib4usvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribPointerARB = (GLEEPFNGLVERTEXATTRIBPOINTERARBPROC) __GLeeGetProcAddress("glVertexAttribPointerARB"))!=0) nLinked++; if ((GLeeFuncPtr_glEnableVertexAttribArrayARB = (GLEEPFNGLENABLEVERTEXATTRIBARRAYARBPROC) __GLeeGetProcAddress("glEnableVertexAttribArrayARB"))!=0) nLinked++; if ((GLeeFuncPtr_glDisableVertexAttribArrayARB = (GLEEPFNGLDISABLEVERTEXATTRIBARRAYARBPROC) __GLeeGetProcAddress("glDisableVertexAttribArrayARB"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramStringARB = (GLEEPFNGLPROGRAMSTRINGARBPROC) __GLeeGetProcAddress("glProgramStringARB"))!=0) nLinked++; if ((GLeeFuncPtr_glBindProgramARB = (GLEEPFNGLBINDPROGRAMARBPROC) __GLeeGetProcAddress("glBindProgramARB"))!=0) nLinked++; if ((GLeeFuncPtr_glDeleteProgramsARB = (GLEEPFNGLDELETEPROGRAMSARBPROC) __GLeeGetProcAddress("glDeleteProgramsARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGenProgramsARB = (GLEEPFNGLGENPROGRAMSARBPROC) __GLeeGetProcAddress("glGenProgramsARB"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramEnvParameter4dARB = (GLEEPFNGLPROGRAMENVPARAMETER4DARBPROC) __GLeeGetProcAddress("glProgramEnvParameter4dARB"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramEnvParameter4dvARB = (GLEEPFNGLPROGRAMENVPARAMETER4DVARBPROC) __GLeeGetProcAddress("glProgramEnvParameter4dvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramEnvParameter4fARB = (GLEEPFNGLPROGRAMENVPARAMETER4FARBPROC) __GLeeGetProcAddress("glProgramEnvParameter4fARB"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramEnvParameter4fvARB = (GLEEPFNGLPROGRAMENVPARAMETER4FVARBPROC) __GLeeGetProcAddress("glProgramEnvParameter4fvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramLocalParameter4dARB = (GLEEPFNGLPROGRAMLOCALPARAMETER4DARBPROC) __GLeeGetProcAddress("glProgramLocalParameter4dARB"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramLocalParameter4dvARB = (GLEEPFNGLPROGRAMLOCALPARAMETER4DVARBPROC) __GLeeGetProcAddress("glProgramLocalParameter4dvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramLocalParameter4fARB = (GLEEPFNGLPROGRAMLOCALPARAMETER4FARBPROC) __GLeeGetProcAddress("glProgramLocalParameter4fARB"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramLocalParameter4fvARB = (GLEEPFNGLPROGRAMLOCALPARAMETER4FVARBPROC) __GLeeGetProcAddress("glProgramLocalParameter4fvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetProgramEnvParameterdvARB = (GLEEPFNGLGETPROGRAMENVPARAMETERDVARBPROC) __GLeeGetProcAddress("glGetProgramEnvParameterdvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetProgramEnvParameterfvARB = (GLEEPFNGLGETPROGRAMENVPARAMETERFVARBPROC) __GLeeGetProcAddress("glGetProgramEnvParameterfvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetProgramLocalParameterdvARB = (GLEEPFNGLGETPROGRAMLOCALPARAMETERDVARBPROC) __GLeeGetProcAddress("glGetProgramLocalParameterdvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetProgramLocalParameterfvARB = (GLEEPFNGLGETPROGRAMLOCALPARAMETERFVARBPROC) __GLeeGetProcAddress("glGetProgramLocalParameterfvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetProgramivARB = (GLEEPFNGLGETPROGRAMIVARBPROC) __GLeeGetProcAddress("glGetProgramivARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetProgramStringARB = (GLEEPFNGLGETPROGRAMSTRINGARBPROC) __GLeeGetProcAddress("glGetProgramStringARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetVertexAttribdvARB = (GLEEPFNGLGETVERTEXATTRIBDVARBPROC) __GLeeGetProcAddress("glGetVertexAttribdvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetVertexAttribfvARB = (GLEEPFNGLGETVERTEXATTRIBFVARBPROC) __GLeeGetProcAddress("glGetVertexAttribfvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetVertexAttribivARB = (GLEEPFNGLGETVERTEXATTRIBIVARBPROC) __GLeeGetProcAddress("glGetVertexAttribivARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetVertexAttribPointervARB = (GLEEPFNGLGETVERTEXATTRIBPOINTERVARBPROC) __GLeeGetProcAddress("glGetVertexAttribPointervARB"))!=0) nLinked++; if ((GLeeFuncPtr_glIsProgramARB = (GLEEPFNGLISPROGRAMARBPROC) __GLeeGetProcAddress("glIsProgramARB"))!=0) nLinked++; #endif if (nLinked==62) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_fragment_program(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_vertex_buffer_object(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_vertex_buffer_object if ((GLeeFuncPtr_glBindBufferARB = (GLEEPFNGLBINDBUFFERARBPROC) __GLeeGetProcAddress("glBindBufferARB"))!=0) nLinked++; if ((GLeeFuncPtr_glDeleteBuffersARB = (GLEEPFNGLDELETEBUFFERSARBPROC) __GLeeGetProcAddress("glDeleteBuffersARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGenBuffersARB = (GLEEPFNGLGENBUFFERSARBPROC) __GLeeGetProcAddress("glGenBuffersARB"))!=0) nLinked++; if ((GLeeFuncPtr_glIsBufferARB = (GLEEPFNGLISBUFFERARBPROC) __GLeeGetProcAddress("glIsBufferARB"))!=0) nLinked++; if ((GLeeFuncPtr_glBufferDataARB = (GLEEPFNGLBUFFERDATAARBPROC) __GLeeGetProcAddress("glBufferDataARB"))!=0) nLinked++; if ((GLeeFuncPtr_glBufferSubDataARB = (GLEEPFNGLBUFFERSUBDATAARBPROC) __GLeeGetProcAddress("glBufferSubDataARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetBufferSubDataARB = (GLEEPFNGLGETBUFFERSUBDATAARBPROC) __GLeeGetProcAddress("glGetBufferSubDataARB"))!=0) nLinked++; if ((GLeeFuncPtr_glMapBufferARB = (GLEEPFNGLMAPBUFFERARBPROC) __GLeeGetProcAddress("glMapBufferARB"))!=0) nLinked++; if ((GLeeFuncPtr_glUnmapBufferARB = (GLEEPFNGLUNMAPBUFFERARBPROC) __GLeeGetProcAddress("glUnmapBufferARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetBufferParameterivARB = (GLEEPFNGLGETBUFFERPARAMETERIVARBPROC) __GLeeGetProcAddress("glGetBufferParameterivARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetBufferPointervARB = (GLEEPFNGLGETBUFFERPOINTERVARBPROC) __GLeeGetProcAddress("glGetBufferPointervARB"))!=0) nLinked++; #endif if (nLinked==11) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_occlusion_query(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_occlusion_query if ((GLeeFuncPtr_glGenQueriesARB = (GLEEPFNGLGENQUERIESARBPROC) __GLeeGetProcAddress("glGenQueriesARB"))!=0) nLinked++; if ((GLeeFuncPtr_glDeleteQueriesARB = (GLEEPFNGLDELETEQUERIESARBPROC) __GLeeGetProcAddress("glDeleteQueriesARB"))!=0) nLinked++; if ((GLeeFuncPtr_glIsQueryARB = (GLEEPFNGLISQUERYARBPROC) __GLeeGetProcAddress("glIsQueryARB"))!=0) nLinked++; if ((GLeeFuncPtr_glBeginQueryARB = (GLEEPFNGLBEGINQUERYARBPROC) __GLeeGetProcAddress("glBeginQueryARB"))!=0) nLinked++; if ((GLeeFuncPtr_glEndQueryARB = (GLEEPFNGLENDQUERYARBPROC) __GLeeGetProcAddress("glEndQueryARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetQueryivARB = (GLEEPFNGLGETQUERYIVARBPROC) __GLeeGetProcAddress("glGetQueryivARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetQueryObjectivARB = (GLEEPFNGLGETQUERYOBJECTIVARBPROC) __GLeeGetProcAddress("glGetQueryObjectivARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetQueryObjectuivARB = (GLEEPFNGLGETQUERYOBJECTUIVARBPROC) __GLeeGetProcAddress("glGetQueryObjectuivARB"))!=0) nLinked++; #endif if (nLinked==8) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_shader_objects(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_shader_objects if ((GLeeFuncPtr_glDeleteObjectARB = (GLEEPFNGLDELETEOBJECTARBPROC) __GLeeGetProcAddress("glDeleteObjectARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetHandleARB = (GLEEPFNGLGETHANDLEARBPROC) __GLeeGetProcAddress("glGetHandleARB"))!=0) nLinked++; if ((GLeeFuncPtr_glDetachObjectARB = (GLEEPFNGLDETACHOBJECTARBPROC) __GLeeGetProcAddress("glDetachObjectARB"))!=0) nLinked++; if ((GLeeFuncPtr_glCreateShaderObjectARB = (GLEEPFNGLCREATESHADEROBJECTARBPROC) __GLeeGetProcAddress("glCreateShaderObjectARB"))!=0) nLinked++; if ((GLeeFuncPtr_glShaderSourceARB = (GLEEPFNGLSHADERSOURCEARBPROC) __GLeeGetProcAddress("glShaderSourceARB"))!=0) nLinked++; if ((GLeeFuncPtr_glCompileShaderARB = (GLEEPFNGLCOMPILESHADERARBPROC) __GLeeGetProcAddress("glCompileShaderARB"))!=0) nLinked++; if ((GLeeFuncPtr_glCreateProgramObjectARB = (GLEEPFNGLCREATEPROGRAMOBJECTARBPROC) __GLeeGetProcAddress("glCreateProgramObjectARB"))!=0) nLinked++; if ((GLeeFuncPtr_glAttachObjectARB = (GLEEPFNGLATTACHOBJECTARBPROC) __GLeeGetProcAddress("glAttachObjectARB"))!=0) nLinked++; if ((GLeeFuncPtr_glLinkProgramARB = (GLEEPFNGLLINKPROGRAMARBPROC) __GLeeGetProcAddress("glLinkProgramARB"))!=0) nLinked++; if ((GLeeFuncPtr_glUseProgramObjectARB = (GLEEPFNGLUSEPROGRAMOBJECTARBPROC) __GLeeGetProcAddress("glUseProgramObjectARB"))!=0) nLinked++; if ((GLeeFuncPtr_glValidateProgramARB = (GLEEPFNGLVALIDATEPROGRAMARBPROC) __GLeeGetProcAddress("glValidateProgramARB"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform1fARB = (GLEEPFNGLUNIFORM1FARBPROC) __GLeeGetProcAddress("glUniform1fARB"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform2fARB = (GLEEPFNGLUNIFORM2FARBPROC) __GLeeGetProcAddress("glUniform2fARB"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform3fARB = (GLEEPFNGLUNIFORM3FARBPROC) __GLeeGetProcAddress("glUniform3fARB"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform4fARB = (GLEEPFNGLUNIFORM4FARBPROC) __GLeeGetProcAddress("glUniform4fARB"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform1iARB = (GLEEPFNGLUNIFORM1IARBPROC) __GLeeGetProcAddress("glUniform1iARB"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform2iARB = (GLEEPFNGLUNIFORM2IARBPROC) __GLeeGetProcAddress("glUniform2iARB"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform3iARB = (GLEEPFNGLUNIFORM3IARBPROC) __GLeeGetProcAddress("glUniform3iARB"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform4iARB = (GLEEPFNGLUNIFORM4IARBPROC) __GLeeGetProcAddress("glUniform4iARB"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform1fvARB = (GLEEPFNGLUNIFORM1FVARBPROC) __GLeeGetProcAddress("glUniform1fvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform2fvARB = (GLEEPFNGLUNIFORM2FVARBPROC) __GLeeGetProcAddress("glUniform2fvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform3fvARB = (GLEEPFNGLUNIFORM3FVARBPROC) __GLeeGetProcAddress("glUniform3fvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform4fvARB = (GLEEPFNGLUNIFORM4FVARBPROC) __GLeeGetProcAddress("glUniform4fvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform1ivARB = (GLEEPFNGLUNIFORM1IVARBPROC) __GLeeGetProcAddress("glUniform1ivARB"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform2ivARB = (GLEEPFNGLUNIFORM2IVARBPROC) __GLeeGetProcAddress("glUniform2ivARB"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform3ivARB = (GLEEPFNGLUNIFORM3IVARBPROC) __GLeeGetProcAddress("glUniform3ivARB"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform4ivARB = (GLEEPFNGLUNIFORM4IVARBPROC) __GLeeGetProcAddress("glUniform4ivARB"))!=0) nLinked++; if ((GLeeFuncPtr_glUniformMatrix2fvARB = (GLEEPFNGLUNIFORMMATRIX2FVARBPROC) __GLeeGetProcAddress("glUniformMatrix2fvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glUniformMatrix3fvARB = (GLEEPFNGLUNIFORMMATRIX3FVARBPROC) __GLeeGetProcAddress("glUniformMatrix3fvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glUniformMatrix4fvARB = (GLEEPFNGLUNIFORMMATRIX4FVARBPROC) __GLeeGetProcAddress("glUniformMatrix4fvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetObjectParameterfvARB = (GLEEPFNGLGETOBJECTPARAMETERFVARBPROC) __GLeeGetProcAddress("glGetObjectParameterfvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetObjectParameterivARB = (GLEEPFNGLGETOBJECTPARAMETERIVARBPROC) __GLeeGetProcAddress("glGetObjectParameterivARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetInfoLogARB = (GLEEPFNGLGETINFOLOGARBPROC) __GLeeGetProcAddress("glGetInfoLogARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetAttachedObjectsARB = (GLEEPFNGLGETATTACHEDOBJECTSARBPROC) __GLeeGetProcAddress("glGetAttachedObjectsARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetUniformLocationARB = (GLEEPFNGLGETUNIFORMLOCATIONARBPROC) __GLeeGetProcAddress("glGetUniformLocationARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetActiveUniformARB = (GLEEPFNGLGETACTIVEUNIFORMARBPROC) __GLeeGetProcAddress("glGetActiveUniformARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetUniformfvARB = (GLEEPFNGLGETUNIFORMFVARBPROC) __GLeeGetProcAddress("glGetUniformfvARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetUniformivARB = (GLEEPFNGLGETUNIFORMIVARBPROC) __GLeeGetProcAddress("glGetUniformivARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetShaderSourceARB = (GLEEPFNGLGETSHADERSOURCEARBPROC) __GLeeGetProcAddress("glGetShaderSourceARB"))!=0) nLinked++; #endif if (nLinked==39) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_vertex_shader(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_vertex_shader if ((GLeeFuncPtr_glBindAttribLocationARB = (GLEEPFNGLBINDATTRIBLOCATIONARBPROC) __GLeeGetProcAddress("glBindAttribLocationARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetActiveAttribARB = (GLEEPFNGLGETACTIVEATTRIBARBPROC) __GLeeGetProcAddress("glGetActiveAttribARB"))!=0) nLinked++; if ((GLeeFuncPtr_glGetAttribLocationARB = (GLEEPFNGLGETATTRIBLOCATIONARBPROC) __GLeeGetProcAddress("glGetAttribLocationARB"))!=0) nLinked++; #endif if (nLinked==3) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_fragment_shader(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_shading_language_100(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_texture_non_power_of_two(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_point_sprite(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_fragment_program_shadow(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_draw_buffers(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_draw_buffers if ((GLeeFuncPtr_glDrawBuffersARB = (GLEEPFNGLDRAWBUFFERSARBPROC) __GLeeGetProcAddress("glDrawBuffersARB"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_texture_rectangle(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_color_buffer_float(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_color_buffer_float if ((GLeeFuncPtr_glClampColorARB = (GLEEPFNGLCLAMPCOLORARBPROC) __GLeeGetProcAddress("glClampColorARB"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_half_float_pixel(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_texture_float(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_pixel_buffer_object(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_depth_buffer_float(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_draw_instanced(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_draw_instanced if ((GLeeFuncPtr_glDrawArraysInstancedARB = (GLEEPFNGLDRAWARRAYSINSTANCEDARBPROC) __GLeeGetProcAddress("glDrawArraysInstancedARB"))!=0) nLinked++; if ((GLeeFuncPtr_glDrawElementsInstancedARB = (GLEEPFNGLDRAWELEMENTSINSTANCEDARBPROC) __GLeeGetProcAddress("glDrawElementsInstancedARB"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_framebuffer_object(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_framebuffer_object if ((GLeeFuncPtr_glIsRenderbuffer = (GLEEPFNGLISRENDERBUFFERPROC) __GLeeGetProcAddress("glIsRenderbuffer"))!=0) nLinked++; if ((GLeeFuncPtr_glBindRenderbuffer = (GLEEPFNGLBINDRENDERBUFFERPROC) __GLeeGetProcAddress("glBindRenderbuffer"))!=0) nLinked++; if ((GLeeFuncPtr_glDeleteRenderbuffers = (GLEEPFNGLDELETERENDERBUFFERSPROC) __GLeeGetProcAddress("glDeleteRenderbuffers"))!=0) nLinked++; if ((GLeeFuncPtr_glGenRenderbuffers = (GLEEPFNGLGENRENDERBUFFERSPROC) __GLeeGetProcAddress("glGenRenderbuffers"))!=0) nLinked++; if ((GLeeFuncPtr_glRenderbufferStorage = (GLEEPFNGLRENDERBUFFERSTORAGEPROC) __GLeeGetProcAddress("glRenderbufferStorage"))!=0) nLinked++; if ((GLeeFuncPtr_glGetRenderbufferParameteriv = (GLEEPFNGLGETRENDERBUFFERPARAMETERIVPROC) __GLeeGetProcAddress("glGetRenderbufferParameteriv"))!=0) nLinked++; if ((GLeeFuncPtr_glIsFramebuffer = (GLEEPFNGLISFRAMEBUFFERPROC) __GLeeGetProcAddress("glIsFramebuffer"))!=0) nLinked++; if ((GLeeFuncPtr_glBindFramebuffer = (GLEEPFNGLBINDFRAMEBUFFERPROC) __GLeeGetProcAddress("glBindFramebuffer"))!=0) nLinked++; if ((GLeeFuncPtr_glDeleteFramebuffers = (GLEEPFNGLDELETEFRAMEBUFFERSPROC) __GLeeGetProcAddress("glDeleteFramebuffers"))!=0) nLinked++; if ((GLeeFuncPtr_glGenFramebuffers = (GLEEPFNGLGENFRAMEBUFFERSPROC) __GLeeGetProcAddress("glGenFramebuffers"))!=0) nLinked++; if ((GLeeFuncPtr_glCheckFramebufferStatus = (GLEEPFNGLCHECKFRAMEBUFFERSTATUSPROC) __GLeeGetProcAddress("glCheckFramebufferStatus"))!=0) nLinked++; if ((GLeeFuncPtr_glFramebufferTexture1D = (GLEEPFNGLFRAMEBUFFERTEXTURE1DPROC) __GLeeGetProcAddress("glFramebufferTexture1D"))!=0) nLinked++; if ((GLeeFuncPtr_glFramebufferTexture2D = (GLEEPFNGLFRAMEBUFFERTEXTURE2DPROC) __GLeeGetProcAddress("glFramebufferTexture2D"))!=0) nLinked++; if ((GLeeFuncPtr_glFramebufferTexture3D = (GLEEPFNGLFRAMEBUFFERTEXTURE3DPROC) __GLeeGetProcAddress("glFramebufferTexture3D"))!=0) nLinked++; if ((GLeeFuncPtr_glFramebufferRenderbuffer = (GLEEPFNGLFRAMEBUFFERRENDERBUFFERPROC) __GLeeGetProcAddress("glFramebufferRenderbuffer"))!=0) nLinked++; if ((GLeeFuncPtr_glGetFramebufferAttachmentParameteriv = (GLEEPFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC) __GLeeGetProcAddress("glGetFramebufferAttachmentParameteriv"))!=0) nLinked++; if ((GLeeFuncPtr_glGenerateMipmap = (GLEEPFNGLGENERATEMIPMAPPROC) __GLeeGetProcAddress("glGenerateMipmap"))!=0) nLinked++; if ((GLeeFuncPtr_glBlitFramebuffer = (GLEEPFNGLBLITFRAMEBUFFERPROC) __GLeeGetProcAddress("glBlitFramebuffer"))!=0) nLinked++; if ((GLeeFuncPtr_glRenderbufferStorageMultisample = (GLEEPFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC) __GLeeGetProcAddress("glRenderbufferStorageMultisample"))!=0) nLinked++; if ((GLeeFuncPtr_glFramebufferTextureLayer = (GLEEPFNGLFRAMEBUFFERTEXTURELAYERPROC) __GLeeGetProcAddress("glFramebufferTextureLayer"))!=0) nLinked++; #endif if (nLinked==20) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_framebuffer_sRGB(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_geometry_shader4(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_geometry_shader4 if ((GLeeFuncPtr_glProgramParameteriARB = (GLEEPFNGLPROGRAMPARAMETERIARBPROC) __GLeeGetProcAddress("glProgramParameteriARB"))!=0) nLinked++; if ((GLeeFuncPtr_glFramebufferTextureARB = (GLEEPFNGLFRAMEBUFFERTEXTUREARBPROC) __GLeeGetProcAddress("glFramebufferTextureARB"))!=0) nLinked++; if ((GLeeFuncPtr_glFramebufferTextureLayerARB = (GLEEPFNGLFRAMEBUFFERTEXTURELAYERARBPROC) __GLeeGetProcAddress("glFramebufferTextureLayerARB"))!=0) nLinked++; if ((GLeeFuncPtr_glFramebufferTextureFaceARB = (GLEEPFNGLFRAMEBUFFERTEXTUREFACEARBPROC) __GLeeGetProcAddress("glFramebufferTextureFaceARB"))!=0) nLinked++; #endif if (nLinked==4) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_half_float_vertex(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_instanced_arrays(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_instanced_arrays if ((GLeeFuncPtr_glVertexAttribDivisor = (GLEEPFNGLVERTEXATTRIBDIVISORPROC) __GLeeGetProcAddress("glVertexAttribDivisor"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_map_buffer_range(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_map_buffer_range if ((GLeeFuncPtr_glMapBufferRange = (GLEEPFNGLMAPBUFFERRANGEPROC) __GLeeGetProcAddress("glMapBufferRange"))!=0) nLinked++; if ((GLeeFuncPtr_glFlushMappedBufferRange = (GLEEPFNGLFLUSHMAPPEDBUFFERRANGEPROC) __GLeeGetProcAddress("glFlushMappedBufferRange"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_texture_buffer_object(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_texture_buffer_object if ((GLeeFuncPtr_glTexBufferARB = (GLEEPFNGLTEXBUFFERARBPROC) __GLeeGetProcAddress("glTexBufferARB"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ARB_texture_compression_rgtc(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_texture_rg(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ARB_vertex_array_object(void) { GLint nLinked=0; #ifdef __GLEE_GL_ARB_vertex_array_object if ((GLeeFuncPtr_glBindVertexArray = (GLEEPFNGLBINDVERTEXARRAYPROC) __GLeeGetProcAddress("glBindVertexArray"))!=0) nLinked++; if ((GLeeFuncPtr_glDeleteVertexArrays = (GLEEPFNGLDELETEVERTEXARRAYSPROC) __GLeeGetProcAddress("glDeleteVertexArrays"))!=0) nLinked++; if ((GLeeFuncPtr_glGenVertexArrays = (GLEEPFNGLGENVERTEXARRAYSPROC) __GLeeGetProcAddress("glGenVertexArrays"))!=0) nLinked++; if ((GLeeFuncPtr_glIsVertexArray = (GLEEPFNGLISVERTEXARRAYPROC) __GLeeGetProcAddress("glIsVertexArray"))!=0) nLinked++; #endif if (nLinked==4) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_abgr(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_blend_color(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_blend_color if ((GLeeFuncPtr_glBlendColorEXT = (GLEEPFNGLBLENDCOLOREXTPROC) __GLeeGetProcAddress("glBlendColorEXT"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_polygon_offset(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_polygon_offset if ((GLeeFuncPtr_glPolygonOffsetEXT = (GLEEPFNGLPOLYGONOFFSETEXTPROC) __GLeeGetProcAddress("glPolygonOffsetEXT"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_texture(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_texture3D(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_texture3D if ((GLeeFuncPtr_glTexImage3DEXT = (GLEEPFNGLTEXIMAGE3DEXTPROC) __GLeeGetProcAddress("glTexImage3DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glTexSubImage3DEXT = (GLEEPFNGLTEXSUBIMAGE3DEXTPROC) __GLeeGetProcAddress("glTexSubImage3DEXT"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_SGIS_texture_filter4(void) { GLint nLinked=0; #ifdef __GLEE_GL_SGIS_texture_filter4 if ((GLeeFuncPtr_glGetTexFilterFuncSGIS = (GLEEPFNGLGETTEXFILTERFUNCSGISPROC) __GLeeGetProcAddress("glGetTexFilterFuncSGIS"))!=0) nLinked++; if ((GLeeFuncPtr_glTexFilterFuncSGIS = (GLEEPFNGLTEXFILTERFUNCSGISPROC) __GLeeGetProcAddress("glTexFilterFuncSGIS"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_subtexture(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_subtexture if ((GLeeFuncPtr_glTexSubImage1DEXT = (GLEEPFNGLTEXSUBIMAGE1DEXTPROC) __GLeeGetProcAddress("glTexSubImage1DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glTexSubImage2DEXT = (GLEEPFNGLTEXSUBIMAGE2DEXTPROC) __GLeeGetProcAddress("glTexSubImage2DEXT"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_copy_texture(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_copy_texture if ((GLeeFuncPtr_glCopyTexImage1DEXT = (GLEEPFNGLCOPYTEXIMAGE1DEXTPROC) __GLeeGetProcAddress("glCopyTexImage1DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glCopyTexImage2DEXT = (GLEEPFNGLCOPYTEXIMAGE2DEXTPROC) __GLeeGetProcAddress("glCopyTexImage2DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glCopyTexSubImage1DEXT = (GLEEPFNGLCOPYTEXSUBIMAGE1DEXTPROC) __GLeeGetProcAddress("glCopyTexSubImage1DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glCopyTexSubImage2DEXT = (GLEEPFNGLCOPYTEXSUBIMAGE2DEXTPROC) __GLeeGetProcAddress("glCopyTexSubImage2DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glCopyTexSubImage3DEXT = (GLEEPFNGLCOPYTEXSUBIMAGE3DEXTPROC) __GLeeGetProcAddress("glCopyTexSubImage3DEXT"))!=0) nLinked++; #endif if (nLinked==5) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_histogram(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_histogram if ((GLeeFuncPtr_glGetHistogramEXT = (GLEEPFNGLGETHISTOGRAMEXTPROC) __GLeeGetProcAddress("glGetHistogramEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetHistogramParameterfvEXT = (GLEEPFNGLGETHISTOGRAMPARAMETERFVEXTPROC) __GLeeGetProcAddress("glGetHistogramParameterfvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetHistogramParameterivEXT = (GLEEPFNGLGETHISTOGRAMPARAMETERIVEXTPROC) __GLeeGetProcAddress("glGetHistogramParameterivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetMinmaxEXT = (GLEEPFNGLGETMINMAXEXTPROC) __GLeeGetProcAddress("glGetMinmaxEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetMinmaxParameterfvEXT = (GLEEPFNGLGETMINMAXPARAMETERFVEXTPROC) __GLeeGetProcAddress("glGetMinmaxParameterfvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetMinmaxParameterivEXT = (GLEEPFNGLGETMINMAXPARAMETERIVEXTPROC) __GLeeGetProcAddress("glGetMinmaxParameterivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glHistogramEXT = (GLEEPFNGLHISTOGRAMEXTPROC) __GLeeGetProcAddress("glHistogramEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMinmaxEXT = (GLEEPFNGLMINMAXEXTPROC) __GLeeGetProcAddress("glMinmaxEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glResetHistogramEXT = (GLEEPFNGLRESETHISTOGRAMEXTPROC) __GLeeGetProcAddress("glResetHistogramEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glResetMinmaxEXT = (GLEEPFNGLRESETMINMAXEXTPROC) __GLeeGetProcAddress("glResetMinmaxEXT"))!=0) nLinked++; #endif if (nLinked==10) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_convolution(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_convolution if ((GLeeFuncPtr_glConvolutionFilter1DEXT = (GLEEPFNGLCONVOLUTIONFILTER1DEXTPROC) __GLeeGetProcAddress("glConvolutionFilter1DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glConvolutionFilter2DEXT = (GLEEPFNGLCONVOLUTIONFILTER2DEXTPROC) __GLeeGetProcAddress("glConvolutionFilter2DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glConvolutionParameterfEXT = (GLEEPFNGLCONVOLUTIONPARAMETERFEXTPROC) __GLeeGetProcAddress("glConvolutionParameterfEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glConvolutionParameterfvEXT = (GLEEPFNGLCONVOLUTIONPARAMETERFVEXTPROC) __GLeeGetProcAddress("glConvolutionParameterfvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glConvolutionParameteriEXT = (GLEEPFNGLCONVOLUTIONPARAMETERIEXTPROC) __GLeeGetProcAddress("glConvolutionParameteriEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glConvolutionParameterivEXT = (GLEEPFNGLCONVOLUTIONPARAMETERIVEXTPROC) __GLeeGetProcAddress("glConvolutionParameterivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glCopyConvolutionFilter1DEXT = (GLEEPFNGLCOPYCONVOLUTIONFILTER1DEXTPROC) __GLeeGetProcAddress("glCopyConvolutionFilter1DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glCopyConvolutionFilter2DEXT = (GLEEPFNGLCOPYCONVOLUTIONFILTER2DEXTPROC) __GLeeGetProcAddress("glCopyConvolutionFilter2DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetConvolutionFilterEXT = (GLEEPFNGLGETCONVOLUTIONFILTEREXTPROC) __GLeeGetProcAddress("glGetConvolutionFilterEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetConvolutionParameterfvEXT = (GLEEPFNGLGETCONVOLUTIONPARAMETERFVEXTPROC) __GLeeGetProcAddress("glGetConvolutionParameterfvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetConvolutionParameterivEXT = (GLEEPFNGLGETCONVOLUTIONPARAMETERIVEXTPROC) __GLeeGetProcAddress("glGetConvolutionParameterivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetSeparableFilterEXT = (GLEEPFNGLGETSEPARABLEFILTEREXTPROC) __GLeeGetProcAddress("glGetSeparableFilterEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glSeparableFilter2DEXT = (GLEEPFNGLSEPARABLEFILTER2DEXTPROC) __GLeeGetProcAddress("glSeparableFilter2DEXT"))!=0) nLinked++; #endif if (nLinked==13) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_SGI_color_matrix(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_SGI_color_table(void) { GLint nLinked=0; #ifdef __GLEE_GL_SGI_color_table if ((GLeeFuncPtr_glColorTableSGI = (GLEEPFNGLCOLORTABLESGIPROC) __GLeeGetProcAddress("glColorTableSGI"))!=0) nLinked++; if ((GLeeFuncPtr_glColorTableParameterfvSGI = (GLEEPFNGLCOLORTABLEPARAMETERFVSGIPROC) __GLeeGetProcAddress("glColorTableParameterfvSGI"))!=0) nLinked++; if ((GLeeFuncPtr_glColorTableParameterivSGI = (GLEEPFNGLCOLORTABLEPARAMETERIVSGIPROC) __GLeeGetProcAddress("glColorTableParameterivSGI"))!=0) nLinked++; if ((GLeeFuncPtr_glCopyColorTableSGI = (GLEEPFNGLCOPYCOLORTABLESGIPROC) __GLeeGetProcAddress("glCopyColorTableSGI"))!=0) nLinked++; if ((GLeeFuncPtr_glGetColorTableSGI = (GLEEPFNGLGETCOLORTABLESGIPROC) __GLeeGetProcAddress("glGetColorTableSGI"))!=0) nLinked++; if ((GLeeFuncPtr_glGetColorTableParameterfvSGI = (GLEEPFNGLGETCOLORTABLEPARAMETERFVSGIPROC) __GLeeGetProcAddress("glGetColorTableParameterfvSGI"))!=0) nLinked++; if ((GLeeFuncPtr_glGetColorTableParameterivSGI = (GLEEPFNGLGETCOLORTABLEPARAMETERIVSGIPROC) __GLeeGetProcAddress("glGetColorTableParameterivSGI"))!=0) nLinked++; #endif if (nLinked==7) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_SGIS_pixel_texture(void) { GLint nLinked=0; #ifdef __GLEE_GL_SGIS_pixel_texture if ((GLeeFuncPtr_glPixelTexGenParameteriSGIS = (GLEEPFNGLPIXELTEXGENPARAMETERISGISPROC) __GLeeGetProcAddress("glPixelTexGenParameteriSGIS"))!=0) nLinked++; if ((GLeeFuncPtr_glPixelTexGenParameterivSGIS = (GLEEPFNGLPIXELTEXGENPARAMETERIVSGISPROC) __GLeeGetProcAddress("glPixelTexGenParameterivSGIS"))!=0) nLinked++; if ((GLeeFuncPtr_glPixelTexGenParameterfSGIS = (GLEEPFNGLPIXELTEXGENPARAMETERFSGISPROC) __GLeeGetProcAddress("glPixelTexGenParameterfSGIS"))!=0) nLinked++; if ((GLeeFuncPtr_glPixelTexGenParameterfvSGIS = (GLEEPFNGLPIXELTEXGENPARAMETERFVSGISPROC) __GLeeGetProcAddress("glPixelTexGenParameterfvSGIS"))!=0) nLinked++; if ((GLeeFuncPtr_glGetPixelTexGenParameterivSGIS = (GLEEPFNGLGETPIXELTEXGENPARAMETERIVSGISPROC) __GLeeGetProcAddress("glGetPixelTexGenParameterivSGIS"))!=0) nLinked++; if ((GLeeFuncPtr_glGetPixelTexGenParameterfvSGIS = (GLEEPFNGLGETPIXELTEXGENPARAMETERFVSGISPROC) __GLeeGetProcAddress("glGetPixelTexGenParameterfvSGIS"))!=0) nLinked++; #endif if (nLinked==6) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_SGIX_pixel_texture(void) { GLint nLinked=0; #ifdef __GLEE_GL_SGIX_pixel_texture if ((GLeeFuncPtr_glPixelTexGenSGIX = (GLEEPFNGLPIXELTEXGENSGIXPROC) __GLeeGetProcAddress("glPixelTexGenSGIX"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_SGIS_texture4D(void) { GLint nLinked=0; #ifdef __GLEE_GL_SGIS_texture4D if ((GLeeFuncPtr_glTexImage4DSGIS = (GLEEPFNGLTEXIMAGE4DSGISPROC) __GLeeGetProcAddress("glTexImage4DSGIS"))!=0) nLinked++; if ((GLeeFuncPtr_glTexSubImage4DSGIS = (GLEEPFNGLTEXSUBIMAGE4DSGISPROC) __GLeeGetProcAddress("glTexSubImage4DSGIS"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_SGI_texture_color_table(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_cmyka(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_texture_object(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_texture_object if ((GLeeFuncPtr_glAreTexturesResidentEXT = (GLEEPFNGLARETEXTURESRESIDENTEXTPROC) __GLeeGetProcAddress("glAreTexturesResidentEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glBindTextureEXT = (GLEEPFNGLBINDTEXTUREEXTPROC) __GLeeGetProcAddress("glBindTextureEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glDeleteTexturesEXT = (GLEEPFNGLDELETETEXTURESEXTPROC) __GLeeGetProcAddress("glDeleteTexturesEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGenTexturesEXT = (GLEEPFNGLGENTEXTURESEXTPROC) __GLeeGetProcAddress("glGenTexturesEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glIsTextureEXT = (GLEEPFNGLISTEXTUREEXTPROC) __GLeeGetProcAddress("glIsTextureEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glPrioritizeTexturesEXT = (GLEEPFNGLPRIORITIZETEXTURESEXTPROC) __GLeeGetProcAddress("glPrioritizeTexturesEXT"))!=0) nLinked++; #endif if (nLinked==6) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_SGIS_detail_texture(void) { GLint nLinked=0; #ifdef __GLEE_GL_SGIS_detail_texture if ((GLeeFuncPtr_glDetailTexFuncSGIS = (GLEEPFNGLDETAILTEXFUNCSGISPROC) __GLeeGetProcAddress("glDetailTexFuncSGIS"))!=0) nLinked++; if ((GLeeFuncPtr_glGetDetailTexFuncSGIS = (GLEEPFNGLGETDETAILTEXFUNCSGISPROC) __GLeeGetProcAddress("glGetDetailTexFuncSGIS"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_SGIS_sharpen_texture(void) { GLint nLinked=0; #ifdef __GLEE_GL_SGIS_sharpen_texture if ((GLeeFuncPtr_glSharpenTexFuncSGIS = (GLEEPFNGLSHARPENTEXFUNCSGISPROC) __GLeeGetProcAddress("glSharpenTexFuncSGIS"))!=0) nLinked++; if ((GLeeFuncPtr_glGetSharpenTexFuncSGIS = (GLEEPFNGLGETSHARPENTEXFUNCSGISPROC) __GLeeGetProcAddress("glGetSharpenTexFuncSGIS"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_packed_pixels(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_SGIS_texture_lod(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_SGIS_multisample(void) { GLint nLinked=0; #ifdef __GLEE_GL_SGIS_multisample if ((GLeeFuncPtr_glSampleMaskSGIS = (GLEEPFNGLSAMPLEMASKSGISPROC) __GLeeGetProcAddress("glSampleMaskSGIS"))!=0) nLinked++; if ((GLeeFuncPtr_glSamplePatternSGIS = (GLEEPFNGLSAMPLEPATTERNSGISPROC) __GLeeGetProcAddress("glSamplePatternSGIS"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_rescale_normal(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_vertex_array(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_vertex_array if ((GLeeFuncPtr_glArrayElementEXT = (GLEEPFNGLARRAYELEMENTEXTPROC) __GLeeGetProcAddress("glArrayElementEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glColorPointerEXT = (GLEEPFNGLCOLORPOINTEREXTPROC) __GLeeGetProcAddress("glColorPointerEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glDrawArraysEXT = (GLEEPFNGLDRAWARRAYSEXTPROC) __GLeeGetProcAddress("glDrawArraysEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glEdgeFlagPointerEXT = (GLEEPFNGLEDGEFLAGPOINTEREXTPROC) __GLeeGetProcAddress("glEdgeFlagPointerEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetPointervEXT = (GLEEPFNGLGETPOINTERVEXTPROC) __GLeeGetProcAddress("glGetPointervEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glIndexPointerEXT = (GLEEPFNGLINDEXPOINTEREXTPROC) __GLeeGetProcAddress("glIndexPointerEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glNormalPointerEXT = (GLEEPFNGLNORMALPOINTEREXTPROC) __GLeeGetProcAddress("glNormalPointerEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoordPointerEXT = (GLEEPFNGLTEXCOORDPOINTEREXTPROC) __GLeeGetProcAddress("glTexCoordPointerEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexPointerEXT = (GLEEPFNGLVERTEXPOINTEREXTPROC) __GLeeGetProcAddress("glVertexPointerEXT"))!=0) nLinked++; #endif if (nLinked==9) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_misc_attribute(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_SGIS_generate_mipmap(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_SGIX_clipmap(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_SGIX_shadow(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_SGIS_texture_edge_clamp(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_SGIS_texture_border_clamp(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_blend_minmax(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_blend_minmax if ((GLeeFuncPtr_glBlendEquationEXT = (GLEEPFNGLBLENDEQUATIONEXTPROC) __GLeeGetProcAddress("glBlendEquationEXT"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_blend_subtract(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_blend_logic_op(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_SGIX_interlace(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_SGIX_pixel_tiles(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_SGIS_texture_select(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_SGIX_sprite(void) { GLint nLinked=0; #ifdef __GLEE_GL_SGIX_sprite if ((GLeeFuncPtr_glSpriteParameterfSGIX = (GLEEPFNGLSPRITEPARAMETERFSGIXPROC) __GLeeGetProcAddress("glSpriteParameterfSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glSpriteParameterfvSGIX = (GLEEPFNGLSPRITEPARAMETERFVSGIXPROC) __GLeeGetProcAddress("glSpriteParameterfvSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glSpriteParameteriSGIX = (GLEEPFNGLSPRITEPARAMETERISGIXPROC) __GLeeGetProcAddress("glSpriteParameteriSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glSpriteParameterivSGIX = (GLEEPFNGLSPRITEPARAMETERIVSGIXPROC) __GLeeGetProcAddress("glSpriteParameterivSGIX"))!=0) nLinked++; #endif if (nLinked==4) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_SGIX_texture_multi_buffer(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_point_parameters(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_point_parameters if ((GLeeFuncPtr_glPointParameterfEXT = (GLEEPFNGLPOINTPARAMETERFEXTPROC) __GLeeGetProcAddress("glPointParameterfEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glPointParameterfvEXT = (GLEEPFNGLPOINTPARAMETERFVEXTPROC) __GLeeGetProcAddress("glPointParameterfvEXT"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_SGIS_point_parameters(void) { GLint nLinked=0; #ifdef __GLEE_GL_SGIS_point_parameters if ((GLeeFuncPtr_glPointParameterfSGIS = (GLEEPFNGLPOINTPARAMETERFSGISPROC) __GLeeGetProcAddress("glPointParameterfSGIS"))!=0) nLinked++; if ((GLeeFuncPtr_glPointParameterfvSGIS = (GLEEPFNGLPOINTPARAMETERFVSGISPROC) __GLeeGetProcAddress("glPointParameterfvSGIS"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_SGIX_instruments(void) { GLint nLinked=0; #ifdef __GLEE_GL_SGIX_instruments if ((GLeeFuncPtr_glGetInstrumentsSGIX = (GLEEPFNGLGETINSTRUMENTSSGIXPROC) __GLeeGetProcAddress("glGetInstrumentsSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glInstrumentsBufferSGIX = (GLEEPFNGLINSTRUMENTSBUFFERSGIXPROC) __GLeeGetProcAddress("glInstrumentsBufferSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glPollInstrumentsSGIX = (GLEEPFNGLPOLLINSTRUMENTSSGIXPROC) __GLeeGetProcAddress("glPollInstrumentsSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glReadInstrumentsSGIX = (GLEEPFNGLREADINSTRUMENTSSGIXPROC) __GLeeGetProcAddress("glReadInstrumentsSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glStartInstrumentsSGIX = (GLEEPFNGLSTARTINSTRUMENTSSGIXPROC) __GLeeGetProcAddress("glStartInstrumentsSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glStopInstrumentsSGIX = (GLEEPFNGLSTOPINSTRUMENTSSGIXPROC) __GLeeGetProcAddress("glStopInstrumentsSGIX"))!=0) nLinked++; #endif if (nLinked==6) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_SGIX_texture_scale_bias(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_SGIX_framezoom(void) { GLint nLinked=0; #ifdef __GLEE_GL_SGIX_framezoom if ((GLeeFuncPtr_glFrameZoomSGIX = (GLEEPFNGLFRAMEZOOMSGIXPROC) __GLeeGetProcAddress("glFrameZoomSGIX"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_SGIX_tag_sample_buffer(void) { GLint nLinked=0; #ifdef __GLEE_GL_SGIX_tag_sample_buffer if ((GLeeFuncPtr_glTagSampleBufferSGIX = (GLEEPFNGLTAGSAMPLEBUFFERSGIXPROC) __GLeeGetProcAddress("glTagSampleBufferSGIX"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_FfdMaskSGIX(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_SGIX_polynomial_ffd(void) { GLint nLinked=0; #ifdef __GLEE_GL_SGIX_polynomial_ffd if ((GLeeFuncPtr_glDeformationMap3dSGIX = (GLEEPFNGLDEFORMATIONMAP3DSGIXPROC) __GLeeGetProcAddress("glDeformationMap3dSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glDeformationMap3fSGIX = (GLEEPFNGLDEFORMATIONMAP3FSGIXPROC) __GLeeGetProcAddress("glDeformationMap3fSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glDeformSGIX = (GLEEPFNGLDEFORMSGIXPROC) __GLeeGetProcAddress("glDeformSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glLoadIdentityDeformationMapSGIX = (GLEEPFNGLLOADIDENTITYDEFORMATIONMAPSGIXPROC) __GLeeGetProcAddress("glLoadIdentityDeformationMapSGIX"))!=0) nLinked++; #endif if (nLinked==4) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_SGIX_reference_plane(void) { GLint nLinked=0; #ifdef __GLEE_GL_SGIX_reference_plane if ((GLeeFuncPtr_glReferencePlaneSGIX = (GLEEPFNGLREFERENCEPLANESGIXPROC) __GLeeGetProcAddress("glReferencePlaneSGIX"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_SGIX_flush_raster(void) { GLint nLinked=0; #ifdef __GLEE_GL_SGIX_flush_raster if ((GLeeFuncPtr_glFlushRasterSGIX = (GLEEPFNGLFLUSHRASTERSGIXPROC) __GLeeGetProcAddress("glFlushRasterSGIX"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_SGIX_depth_texture(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_SGIS_fog_function(void) { GLint nLinked=0; #ifdef __GLEE_GL_SGIS_fog_function if ((GLeeFuncPtr_glFogFuncSGIS = (GLEEPFNGLFOGFUNCSGISPROC) __GLeeGetProcAddress("glFogFuncSGIS"))!=0) nLinked++; if ((GLeeFuncPtr_glGetFogFuncSGIS = (GLEEPFNGLGETFOGFUNCSGISPROC) __GLeeGetProcAddress("glGetFogFuncSGIS"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_SGIX_fog_offset(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_HP_image_transform(void) { GLint nLinked=0; #ifdef __GLEE_GL_HP_image_transform if ((GLeeFuncPtr_glImageTransformParameteriHP = (GLEEPFNGLIMAGETRANSFORMPARAMETERIHPPROC) __GLeeGetProcAddress("glImageTransformParameteriHP"))!=0) nLinked++; if ((GLeeFuncPtr_glImageTransformParameterfHP = (GLEEPFNGLIMAGETRANSFORMPARAMETERFHPPROC) __GLeeGetProcAddress("glImageTransformParameterfHP"))!=0) nLinked++; if ((GLeeFuncPtr_glImageTransformParameterivHP = (GLEEPFNGLIMAGETRANSFORMPARAMETERIVHPPROC) __GLeeGetProcAddress("glImageTransformParameterivHP"))!=0) nLinked++; if ((GLeeFuncPtr_glImageTransformParameterfvHP = (GLEEPFNGLIMAGETRANSFORMPARAMETERFVHPPROC) __GLeeGetProcAddress("glImageTransformParameterfvHP"))!=0) nLinked++; if ((GLeeFuncPtr_glGetImageTransformParameterivHP = (GLEEPFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC) __GLeeGetProcAddress("glGetImageTransformParameterivHP"))!=0) nLinked++; if ((GLeeFuncPtr_glGetImageTransformParameterfvHP = (GLEEPFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC) __GLeeGetProcAddress("glGetImageTransformParameterfvHP"))!=0) nLinked++; #endif if (nLinked==6) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_HP_convolution_border_modes(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_INGR_palette_buffer(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_SGIX_texture_add_env(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_color_subtable(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_color_subtable if ((GLeeFuncPtr_glColorSubTableEXT = (GLEEPFNGLCOLORSUBTABLEEXTPROC) __GLeeGetProcAddress("glColorSubTableEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glCopyColorSubTableEXT = (GLEEPFNGLCOPYCOLORSUBTABLEEXTPROC) __GLeeGetProcAddress("glCopyColorSubTableEXT"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_PGI_vertex_hints(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_PGI_misc_hints(void) { GLint nLinked=0; #ifdef __GLEE_GL_PGI_misc_hints if ((GLeeFuncPtr_glHintPGI = (GLEEPFNGLHINTPGIPROC) __GLeeGetProcAddress("glHintPGI"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_paletted_texture(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_paletted_texture if ((GLeeFuncPtr_glColorTableEXT = (GLEEPFNGLCOLORTABLEEXTPROC) __GLeeGetProcAddress("glColorTableEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetColorTableEXT = (GLEEPFNGLGETCOLORTABLEEXTPROC) __GLeeGetProcAddress("glGetColorTableEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetColorTableParameterivEXT = (GLEEPFNGLGETCOLORTABLEPARAMETERIVEXTPROC) __GLeeGetProcAddress("glGetColorTableParameterivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetColorTableParameterfvEXT = (GLEEPFNGLGETCOLORTABLEPARAMETERFVEXTPROC) __GLeeGetProcAddress("glGetColorTableParameterfvEXT"))!=0) nLinked++; #endif if (nLinked==4) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_clip_volume_hint(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_SGIX_list_priority(void) { GLint nLinked=0; #ifdef __GLEE_GL_SGIX_list_priority if ((GLeeFuncPtr_glGetListParameterfvSGIX = (GLEEPFNGLGETLISTPARAMETERFVSGIXPROC) __GLeeGetProcAddress("glGetListParameterfvSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glGetListParameterivSGIX = (GLEEPFNGLGETLISTPARAMETERIVSGIXPROC) __GLeeGetProcAddress("glGetListParameterivSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glListParameterfSGIX = (GLEEPFNGLLISTPARAMETERFSGIXPROC) __GLeeGetProcAddress("glListParameterfSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glListParameterfvSGIX = (GLEEPFNGLLISTPARAMETERFVSGIXPROC) __GLeeGetProcAddress("glListParameterfvSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glListParameteriSGIX = (GLEEPFNGLLISTPARAMETERISGIXPROC) __GLeeGetProcAddress("glListParameteriSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glListParameterivSGIX = (GLEEPFNGLLISTPARAMETERIVSGIXPROC) __GLeeGetProcAddress("glListParameterivSGIX"))!=0) nLinked++; #endif if (nLinked==6) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_SGIX_ir_instrument1(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_SGIX_calligraphic_fragment(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_SGIX_texture_lod_bias(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_SGIX_shadow_ambient(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_index_texture(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_index_material(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_index_material if ((GLeeFuncPtr_glIndexMaterialEXT = (GLEEPFNGLINDEXMATERIALEXTPROC) __GLeeGetProcAddress("glIndexMaterialEXT"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_index_func(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_index_func if ((GLeeFuncPtr_glIndexFuncEXT = (GLEEPFNGLINDEXFUNCEXTPROC) __GLeeGetProcAddress("glIndexFuncEXT"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_index_array_formats(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_compiled_vertex_array(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_compiled_vertex_array if ((GLeeFuncPtr_glLockArraysEXT = (GLEEPFNGLLOCKARRAYSEXTPROC) __GLeeGetProcAddress("glLockArraysEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glUnlockArraysEXT = (GLEEPFNGLUNLOCKARRAYSEXTPROC) __GLeeGetProcAddress("glUnlockArraysEXT"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_cull_vertex(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_cull_vertex if ((GLeeFuncPtr_glCullParameterdvEXT = (GLEEPFNGLCULLPARAMETERDVEXTPROC) __GLeeGetProcAddress("glCullParameterdvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glCullParameterfvEXT = (GLEEPFNGLCULLPARAMETERFVEXTPROC) __GLeeGetProcAddress("glCullParameterfvEXT"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_SGIX_ycrcb(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_SGIX_fragment_lighting(void) { GLint nLinked=0; #ifdef __GLEE_GL_SGIX_fragment_lighting if ((GLeeFuncPtr_glFragmentColorMaterialSGIX = (GLEEPFNGLFRAGMENTCOLORMATERIALSGIXPROC) __GLeeGetProcAddress("glFragmentColorMaterialSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glFragmentLightfSGIX = (GLEEPFNGLFRAGMENTLIGHTFSGIXPROC) __GLeeGetProcAddress("glFragmentLightfSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glFragmentLightfvSGIX = (GLEEPFNGLFRAGMENTLIGHTFVSGIXPROC) __GLeeGetProcAddress("glFragmentLightfvSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glFragmentLightiSGIX = (GLEEPFNGLFRAGMENTLIGHTISGIXPROC) __GLeeGetProcAddress("glFragmentLightiSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glFragmentLightivSGIX = (GLEEPFNGLFRAGMENTLIGHTIVSGIXPROC) __GLeeGetProcAddress("glFragmentLightivSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glFragmentLightModelfSGIX = (GLEEPFNGLFRAGMENTLIGHTMODELFSGIXPROC) __GLeeGetProcAddress("glFragmentLightModelfSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glFragmentLightModelfvSGIX = (GLEEPFNGLFRAGMENTLIGHTMODELFVSGIXPROC) __GLeeGetProcAddress("glFragmentLightModelfvSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glFragmentLightModeliSGIX = (GLEEPFNGLFRAGMENTLIGHTMODELISGIXPROC) __GLeeGetProcAddress("glFragmentLightModeliSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glFragmentLightModelivSGIX = (GLEEPFNGLFRAGMENTLIGHTMODELIVSGIXPROC) __GLeeGetProcAddress("glFragmentLightModelivSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glFragmentMaterialfSGIX = (GLEEPFNGLFRAGMENTMATERIALFSGIXPROC) __GLeeGetProcAddress("glFragmentMaterialfSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glFragmentMaterialfvSGIX = (GLEEPFNGLFRAGMENTMATERIALFVSGIXPROC) __GLeeGetProcAddress("glFragmentMaterialfvSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glFragmentMaterialiSGIX = (GLEEPFNGLFRAGMENTMATERIALISGIXPROC) __GLeeGetProcAddress("glFragmentMaterialiSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glFragmentMaterialivSGIX = (GLEEPFNGLFRAGMENTMATERIALIVSGIXPROC) __GLeeGetProcAddress("glFragmentMaterialivSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glGetFragmentLightfvSGIX = (GLEEPFNGLGETFRAGMENTLIGHTFVSGIXPROC) __GLeeGetProcAddress("glGetFragmentLightfvSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glGetFragmentLightivSGIX = (GLEEPFNGLGETFRAGMENTLIGHTIVSGIXPROC) __GLeeGetProcAddress("glGetFragmentLightivSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glGetFragmentMaterialfvSGIX = (GLEEPFNGLGETFRAGMENTMATERIALFVSGIXPROC) __GLeeGetProcAddress("glGetFragmentMaterialfvSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glGetFragmentMaterialivSGIX = (GLEEPFNGLGETFRAGMENTMATERIALIVSGIXPROC) __GLeeGetProcAddress("glGetFragmentMaterialivSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glLightEnviSGIX = (GLEEPFNGLLIGHTENVISGIXPROC) __GLeeGetProcAddress("glLightEnviSGIX"))!=0) nLinked++; #endif if (nLinked==18) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_IBM_rasterpos_clip(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_HP_texture_lighting(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_draw_range_elements(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_draw_range_elements if ((GLeeFuncPtr_glDrawRangeElementsEXT = (GLEEPFNGLDRAWRANGEELEMENTSEXTPROC) __GLeeGetProcAddress("glDrawRangeElementsEXT"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_WIN_phong_shading(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_WIN_specular_fog(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_light_texture(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_light_texture if ((GLeeFuncPtr_glApplyTextureEXT = (GLEEPFNGLAPPLYTEXTUREEXTPROC) __GLeeGetProcAddress("glApplyTextureEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glTextureLightEXT = (GLEEPFNGLTEXTURELIGHTEXTPROC) __GLeeGetProcAddress("glTextureLightEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glTextureMaterialEXT = (GLEEPFNGLTEXTUREMATERIALEXTPROC) __GLeeGetProcAddress("glTextureMaterialEXT"))!=0) nLinked++; #endif if (nLinked==3) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_SGIX_blend_alpha_minmax(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_SGIX_impact_pixel_texture(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_bgra(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_SGIX_async(void) { GLint nLinked=0; #ifdef __GLEE_GL_SGIX_async if ((GLeeFuncPtr_glAsyncMarkerSGIX = (GLEEPFNGLASYNCMARKERSGIXPROC) __GLeeGetProcAddress("glAsyncMarkerSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glFinishAsyncSGIX = (GLEEPFNGLFINISHASYNCSGIXPROC) __GLeeGetProcAddress("glFinishAsyncSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glPollAsyncSGIX = (GLEEPFNGLPOLLASYNCSGIXPROC) __GLeeGetProcAddress("glPollAsyncSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glGenAsyncMarkersSGIX = (GLEEPFNGLGENASYNCMARKERSSGIXPROC) __GLeeGetProcAddress("glGenAsyncMarkersSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glDeleteAsyncMarkersSGIX = (GLEEPFNGLDELETEASYNCMARKERSSGIXPROC) __GLeeGetProcAddress("glDeleteAsyncMarkersSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glIsAsyncMarkerSGIX = (GLEEPFNGLISASYNCMARKERSGIXPROC) __GLeeGetProcAddress("glIsAsyncMarkerSGIX"))!=0) nLinked++; #endif if (nLinked==6) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_SGIX_async_pixel(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_SGIX_async_histogram(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_INTEL_texture_scissor(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_INTEL_parallel_arrays(void) { GLint nLinked=0; #ifdef __GLEE_GL_INTEL_parallel_arrays if ((GLeeFuncPtr_glVertexPointervINTEL = (GLEEPFNGLVERTEXPOINTERVINTELPROC) __GLeeGetProcAddress("glVertexPointervINTEL"))!=0) nLinked++; if ((GLeeFuncPtr_glNormalPointervINTEL = (GLEEPFNGLNORMALPOINTERVINTELPROC) __GLeeGetProcAddress("glNormalPointervINTEL"))!=0) nLinked++; if ((GLeeFuncPtr_glColorPointervINTEL = (GLEEPFNGLCOLORPOINTERVINTELPROC) __GLeeGetProcAddress("glColorPointervINTEL"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoordPointervINTEL = (GLEEPFNGLTEXCOORDPOINTERVINTELPROC) __GLeeGetProcAddress("glTexCoordPointervINTEL"))!=0) nLinked++; #endif if (nLinked==4) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_HP_occlusion_test(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_pixel_transform(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_pixel_transform if ((GLeeFuncPtr_glPixelTransformParameteriEXT = (GLEEPFNGLPIXELTRANSFORMPARAMETERIEXTPROC) __GLeeGetProcAddress("glPixelTransformParameteriEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glPixelTransformParameterfEXT = (GLEEPFNGLPIXELTRANSFORMPARAMETERFEXTPROC) __GLeeGetProcAddress("glPixelTransformParameterfEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glPixelTransformParameterivEXT = (GLEEPFNGLPIXELTRANSFORMPARAMETERIVEXTPROC) __GLeeGetProcAddress("glPixelTransformParameterivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glPixelTransformParameterfvEXT = (GLEEPFNGLPIXELTRANSFORMPARAMETERFVEXTPROC) __GLeeGetProcAddress("glPixelTransformParameterfvEXT"))!=0) nLinked++; #endif if (nLinked==4) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_pixel_transform_color_table(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_shared_texture_palette(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_separate_specular_color(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_secondary_color(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_secondary_color if ((GLeeFuncPtr_glSecondaryColor3bEXT = (GLEEPFNGLSECONDARYCOLOR3BEXTPROC) __GLeeGetProcAddress("glSecondaryColor3bEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColor3bvEXT = (GLEEPFNGLSECONDARYCOLOR3BVEXTPROC) __GLeeGetProcAddress("glSecondaryColor3bvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColor3dEXT = (GLEEPFNGLSECONDARYCOLOR3DEXTPROC) __GLeeGetProcAddress("glSecondaryColor3dEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColor3dvEXT = (GLEEPFNGLSECONDARYCOLOR3DVEXTPROC) __GLeeGetProcAddress("glSecondaryColor3dvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColor3fEXT = (GLEEPFNGLSECONDARYCOLOR3FEXTPROC) __GLeeGetProcAddress("glSecondaryColor3fEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColor3fvEXT = (GLEEPFNGLSECONDARYCOLOR3FVEXTPROC) __GLeeGetProcAddress("glSecondaryColor3fvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColor3iEXT = (GLEEPFNGLSECONDARYCOLOR3IEXTPROC) __GLeeGetProcAddress("glSecondaryColor3iEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColor3ivEXT = (GLEEPFNGLSECONDARYCOLOR3IVEXTPROC) __GLeeGetProcAddress("glSecondaryColor3ivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColor3sEXT = (GLEEPFNGLSECONDARYCOLOR3SEXTPROC) __GLeeGetProcAddress("glSecondaryColor3sEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColor3svEXT = (GLEEPFNGLSECONDARYCOLOR3SVEXTPROC) __GLeeGetProcAddress("glSecondaryColor3svEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColor3ubEXT = (GLEEPFNGLSECONDARYCOLOR3UBEXTPROC) __GLeeGetProcAddress("glSecondaryColor3ubEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColor3ubvEXT = (GLEEPFNGLSECONDARYCOLOR3UBVEXTPROC) __GLeeGetProcAddress("glSecondaryColor3ubvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColor3uiEXT = (GLEEPFNGLSECONDARYCOLOR3UIEXTPROC) __GLeeGetProcAddress("glSecondaryColor3uiEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColor3uivEXT = (GLEEPFNGLSECONDARYCOLOR3UIVEXTPROC) __GLeeGetProcAddress("glSecondaryColor3uivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColor3usEXT = (GLEEPFNGLSECONDARYCOLOR3USEXTPROC) __GLeeGetProcAddress("glSecondaryColor3usEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColor3usvEXT = (GLEEPFNGLSECONDARYCOLOR3USVEXTPROC) __GLeeGetProcAddress("glSecondaryColor3usvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColorPointerEXT = (GLEEPFNGLSECONDARYCOLORPOINTEREXTPROC) __GLeeGetProcAddress("glSecondaryColorPointerEXT"))!=0) nLinked++; #endif if (nLinked==17) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_texture_perturb_normal(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_texture_perturb_normal if ((GLeeFuncPtr_glTextureNormalEXT = (GLEEPFNGLTEXTURENORMALEXTPROC) __GLeeGetProcAddress("glTextureNormalEXT"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_multi_draw_arrays(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_multi_draw_arrays if ((GLeeFuncPtr_glMultiDrawArraysEXT = (GLEEPFNGLMULTIDRAWARRAYSEXTPROC) __GLeeGetProcAddress("glMultiDrawArraysEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiDrawElementsEXT = (GLEEPFNGLMULTIDRAWELEMENTSEXTPROC) __GLeeGetProcAddress("glMultiDrawElementsEXT"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_fog_coord(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_fog_coord if ((GLeeFuncPtr_glFogCoordfEXT = (GLEEPFNGLFOGCOORDFEXTPROC) __GLeeGetProcAddress("glFogCoordfEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glFogCoordfvEXT = (GLEEPFNGLFOGCOORDFVEXTPROC) __GLeeGetProcAddress("glFogCoordfvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glFogCoorddEXT = (GLEEPFNGLFOGCOORDDEXTPROC) __GLeeGetProcAddress("glFogCoorddEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glFogCoorddvEXT = (GLEEPFNGLFOGCOORDDVEXTPROC) __GLeeGetProcAddress("glFogCoorddvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glFogCoordPointerEXT = (GLEEPFNGLFOGCOORDPOINTEREXTPROC) __GLeeGetProcAddress("glFogCoordPointerEXT"))!=0) nLinked++; #endif if (nLinked==5) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_REND_screen_coordinates(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_coordinate_frame(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_coordinate_frame if ((GLeeFuncPtr_glTangent3bEXT = (GLEEPFNGLTANGENT3BEXTPROC) __GLeeGetProcAddress("glTangent3bEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glTangent3bvEXT = (GLEEPFNGLTANGENT3BVEXTPROC) __GLeeGetProcAddress("glTangent3bvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glTangent3dEXT = (GLEEPFNGLTANGENT3DEXTPROC) __GLeeGetProcAddress("glTangent3dEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glTangent3dvEXT = (GLEEPFNGLTANGENT3DVEXTPROC) __GLeeGetProcAddress("glTangent3dvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glTangent3fEXT = (GLEEPFNGLTANGENT3FEXTPROC) __GLeeGetProcAddress("glTangent3fEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glTangent3fvEXT = (GLEEPFNGLTANGENT3FVEXTPROC) __GLeeGetProcAddress("glTangent3fvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glTangent3iEXT = (GLEEPFNGLTANGENT3IEXTPROC) __GLeeGetProcAddress("glTangent3iEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glTangent3ivEXT = (GLEEPFNGLTANGENT3IVEXTPROC) __GLeeGetProcAddress("glTangent3ivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glTangent3sEXT = (GLEEPFNGLTANGENT3SEXTPROC) __GLeeGetProcAddress("glTangent3sEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glTangent3svEXT = (GLEEPFNGLTANGENT3SVEXTPROC) __GLeeGetProcAddress("glTangent3svEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glBinormal3bEXT = (GLEEPFNGLBINORMAL3BEXTPROC) __GLeeGetProcAddress("glBinormal3bEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glBinormal3bvEXT = (GLEEPFNGLBINORMAL3BVEXTPROC) __GLeeGetProcAddress("glBinormal3bvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glBinormal3dEXT = (GLEEPFNGLBINORMAL3DEXTPROC) __GLeeGetProcAddress("glBinormal3dEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glBinormal3dvEXT = (GLEEPFNGLBINORMAL3DVEXTPROC) __GLeeGetProcAddress("glBinormal3dvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glBinormal3fEXT = (GLEEPFNGLBINORMAL3FEXTPROC) __GLeeGetProcAddress("glBinormal3fEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glBinormal3fvEXT = (GLEEPFNGLBINORMAL3FVEXTPROC) __GLeeGetProcAddress("glBinormal3fvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glBinormal3iEXT = (GLEEPFNGLBINORMAL3IEXTPROC) __GLeeGetProcAddress("glBinormal3iEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glBinormal3ivEXT = (GLEEPFNGLBINORMAL3IVEXTPROC) __GLeeGetProcAddress("glBinormal3ivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glBinormal3sEXT = (GLEEPFNGLBINORMAL3SEXTPROC) __GLeeGetProcAddress("glBinormal3sEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glBinormal3svEXT = (GLEEPFNGLBINORMAL3SVEXTPROC) __GLeeGetProcAddress("glBinormal3svEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glTangentPointerEXT = (GLEEPFNGLTANGENTPOINTEREXTPROC) __GLeeGetProcAddress("glTangentPointerEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glBinormalPointerEXT = (GLEEPFNGLBINORMALPOINTEREXTPROC) __GLeeGetProcAddress("glBinormalPointerEXT"))!=0) nLinked++; #endif if (nLinked==22) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_texture_env_combine(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_APPLE_specular_vector(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_APPLE_transform_hint(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_SGIX_fog_scale(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_SUNX_constant_data(void) { GLint nLinked=0; #ifdef __GLEE_GL_SUNX_constant_data if ((GLeeFuncPtr_glFinishTextureSUNX = (GLEEPFNGLFINISHTEXTURESUNXPROC) __GLeeGetProcAddress("glFinishTextureSUNX"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_SUN_global_alpha(void) { GLint nLinked=0; #ifdef __GLEE_GL_SUN_global_alpha if ((GLeeFuncPtr_glGlobalAlphaFactorbSUN = (GLEEPFNGLGLOBALALPHAFACTORBSUNPROC) __GLeeGetProcAddress("glGlobalAlphaFactorbSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glGlobalAlphaFactorsSUN = (GLEEPFNGLGLOBALALPHAFACTORSSUNPROC) __GLeeGetProcAddress("glGlobalAlphaFactorsSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glGlobalAlphaFactoriSUN = (GLEEPFNGLGLOBALALPHAFACTORISUNPROC) __GLeeGetProcAddress("glGlobalAlphaFactoriSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glGlobalAlphaFactorfSUN = (GLEEPFNGLGLOBALALPHAFACTORFSUNPROC) __GLeeGetProcAddress("glGlobalAlphaFactorfSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glGlobalAlphaFactordSUN = (GLEEPFNGLGLOBALALPHAFACTORDSUNPROC) __GLeeGetProcAddress("glGlobalAlphaFactordSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glGlobalAlphaFactorubSUN = (GLEEPFNGLGLOBALALPHAFACTORUBSUNPROC) __GLeeGetProcAddress("glGlobalAlphaFactorubSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glGlobalAlphaFactorusSUN = (GLEEPFNGLGLOBALALPHAFACTORUSSUNPROC) __GLeeGetProcAddress("glGlobalAlphaFactorusSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glGlobalAlphaFactoruiSUN = (GLEEPFNGLGLOBALALPHAFACTORUISUNPROC) __GLeeGetProcAddress("glGlobalAlphaFactoruiSUN"))!=0) nLinked++; #endif if (nLinked==8) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_SUN_triangle_list(void) { GLint nLinked=0; #ifdef __GLEE_GL_SUN_triangle_list if ((GLeeFuncPtr_glReplacementCodeuiSUN = (GLEEPFNGLREPLACEMENTCODEUISUNPROC) __GLeeGetProcAddress("glReplacementCodeuiSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glReplacementCodeusSUN = (GLEEPFNGLREPLACEMENTCODEUSSUNPROC) __GLeeGetProcAddress("glReplacementCodeusSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glReplacementCodeubSUN = (GLEEPFNGLREPLACEMENTCODEUBSUNPROC) __GLeeGetProcAddress("glReplacementCodeubSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glReplacementCodeuivSUN = (GLEEPFNGLREPLACEMENTCODEUIVSUNPROC) __GLeeGetProcAddress("glReplacementCodeuivSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glReplacementCodeusvSUN = (GLEEPFNGLREPLACEMENTCODEUSVSUNPROC) __GLeeGetProcAddress("glReplacementCodeusvSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glReplacementCodeubvSUN = (GLEEPFNGLREPLACEMENTCODEUBVSUNPROC) __GLeeGetProcAddress("glReplacementCodeubvSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glReplacementCodePointerSUN = (GLEEPFNGLREPLACEMENTCODEPOINTERSUNPROC) __GLeeGetProcAddress("glReplacementCodePointerSUN"))!=0) nLinked++; #endif if (nLinked==7) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_SUN_vertex(void) { GLint nLinked=0; #ifdef __GLEE_GL_SUN_vertex if ((GLeeFuncPtr_glColor4ubVertex2fSUN = (GLEEPFNGLCOLOR4UBVERTEX2FSUNPROC) __GLeeGetProcAddress("glColor4ubVertex2fSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glColor4ubVertex2fvSUN = (GLEEPFNGLCOLOR4UBVERTEX2FVSUNPROC) __GLeeGetProcAddress("glColor4ubVertex2fvSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glColor4ubVertex3fSUN = (GLEEPFNGLCOLOR4UBVERTEX3FSUNPROC) __GLeeGetProcAddress("glColor4ubVertex3fSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glColor4ubVertex3fvSUN = (GLEEPFNGLCOLOR4UBVERTEX3FVSUNPROC) __GLeeGetProcAddress("glColor4ubVertex3fvSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glColor3fVertex3fSUN = (GLEEPFNGLCOLOR3FVERTEX3FSUNPROC) __GLeeGetProcAddress("glColor3fVertex3fSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glColor3fVertex3fvSUN = (GLEEPFNGLCOLOR3FVERTEX3FVSUNPROC) __GLeeGetProcAddress("glColor3fVertex3fvSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glNormal3fVertex3fSUN = (GLEEPFNGLNORMAL3FVERTEX3FSUNPROC) __GLeeGetProcAddress("glNormal3fVertex3fSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glNormal3fVertex3fvSUN = (GLEEPFNGLNORMAL3FVERTEX3FVSUNPROC) __GLeeGetProcAddress("glNormal3fVertex3fvSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glColor4fNormal3fVertex3fSUN = (GLEEPFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC) __GLeeGetProcAddress("glColor4fNormal3fVertex3fSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glColor4fNormal3fVertex3fvSUN = (GLEEPFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC) __GLeeGetProcAddress("glColor4fNormal3fVertex3fvSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoord2fVertex3fSUN = (GLEEPFNGLTEXCOORD2FVERTEX3FSUNPROC) __GLeeGetProcAddress("glTexCoord2fVertex3fSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoord2fVertex3fvSUN = (GLEEPFNGLTEXCOORD2FVERTEX3FVSUNPROC) __GLeeGetProcAddress("glTexCoord2fVertex3fvSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoord4fVertex4fSUN = (GLEEPFNGLTEXCOORD4FVERTEX4FSUNPROC) __GLeeGetProcAddress("glTexCoord4fVertex4fSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoord4fVertex4fvSUN = (GLEEPFNGLTEXCOORD4FVERTEX4FVSUNPROC) __GLeeGetProcAddress("glTexCoord4fVertex4fvSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoord2fColor4ubVertex3fSUN = (GLEEPFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC) __GLeeGetProcAddress("glTexCoord2fColor4ubVertex3fSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoord2fColor4ubVertex3fvSUN = (GLEEPFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC) __GLeeGetProcAddress("glTexCoord2fColor4ubVertex3fvSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoord2fColor3fVertex3fSUN = (GLEEPFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC) __GLeeGetProcAddress("glTexCoord2fColor3fVertex3fSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoord2fColor3fVertex3fvSUN = (GLEEPFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC) __GLeeGetProcAddress("glTexCoord2fColor3fVertex3fvSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoord2fNormal3fVertex3fSUN = (GLEEPFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC) __GLeeGetProcAddress("glTexCoord2fNormal3fVertex3fSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoord2fNormal3fVertex3fvSUN = (GLEEPFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) __GLeeGetProcAddress("glTexCoord2fNormal3fVertex3fvSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoord2fColor4fNormal3fVertex3fSUN = (GLEEPFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) __GLeeGetProcAddress("glTexCoord2fColor4fNormal3fVertex3fSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoord2fColor4fNormal3fVertex3fvSUN = (GLEEPFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) __GLeeGetProcAddress("glTexCoord2fColor4fNormal3fVertex3fvSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoord4fColor4fNormal3fVertex4fSUN = (GLEEPFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC) __GLeeGetProcAddress("glTexCoord4fColor4fNormal3fVertex4fSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoord4fColor4fNormal3fVertex4fvSUN = (GLEEPFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC) __GLeeGetProcAddress("glTexCoord4fColor4fNormal3fVertex4fvSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glReplacementCodeuiVertex3fSUN = (GLEEPFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC) __GLeeGetProcAddress("glReplacementCodeuiVertex3fSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glReplacementCodeuiVertex3fvSUN = (GLEEPFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC) __GLeeGetProcAddress("glReplacementCodeuiVertex3fvSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glReplacementCodeuiColor4ubVertex3fSUN = (GLEEPFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC) __GLeeGetProcAddress("glReplacementCodeuiColor4ubVertex3fSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glReplacementCodeuiColor4ubVertex3fvSUN = (GLEEPFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC) __GLeeGetProcAddress("glReplacementCodeuiColor4ubVertex3fvSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glReplacementCodeuiColor3fVertex3fSUN = (GLEEPFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC) __GLeeGetProcAddress("glReplacementCodeuiColor3fVertex3fSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glReplacementCodeuiColor3fVertex3fvSUN = (GLEEPFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC) __GLeeGetProcAddress("glReplacementCodeuiColor3fVertex3fvSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glReplacementCodeuiNormal3fVertex3fSUN = (GLEEPFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC) __GLeeGetProcAddress("glReplacementCodeuiNormal3fVertex3fSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glReplacementCodeuiNormal3fVertex3fvSUN = (GLEEPFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC) __GLeeGetProcAddress("glReplacementCodeuiNormal3fVertex3fvSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glReplacementCodeuiColor4fNormal3fVertex3fSUN = (GLEEPFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC) __GLeeGetProcAddress("glReplacementCodeuiColor4fNormal3fVertex3fSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glReplacementCodeuiColor4fNormal3fVertex3fvSUN = (GLEEPFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC) __GLeeGetProcAddress("glReplacementCodeuiColor4fNormal3fVertex3fvSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glReplacementCodeuiTexCoord2fVertex3fSUN = (GLEEPFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC) __GLeeGetProcAddress("glReplacementCodeuiTexCoord2fVertex3fSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glReplacementCodeuiTexCoord2fVertex3fvSUN = (GLEEPFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC) __GLeeGetProcAddress("glReplacementCodeuiTexCoord2fVertex3fvSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN = (GLEEPFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC) __GLeeGetProcAddress("glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN = (GLEEPFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) __GLeeGetProcAddress("glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN = (GLEEPFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) __GLeeGetProcAddress("glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN"))!=0) nLinked++; if ((GLeeFuncPtr_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN = (GLEEPFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) __GLeeGetProcAddress("glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN"))!=0) nLinked++; #endif if (nLinked==40) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_blend_func_separate(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_blend_func_separate if ((GLeeFuncPtr_glBlendFuncSeparateEXT = (GLEEPFNGLBLENDFUNCSEPARATEEXTPROC) __GLeeGetProcAddress("glBlendFuncSeparateEXT"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_INGR_color_clamp(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_INGR_interlace_read(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_stencil_wrap(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_422_pixels(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_NV_texgen_reflection(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_texture_cube_map(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_SUN_convolution_border_modes(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_texture_env_add(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_texture_lod_bias(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_texture_filter_anisotropic(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_vertex_weighting(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_vertex_weighting if ((GLeeFuncPtr_glVertexWeightfEXT = (GLEEPFNGLVERTEXWEIGHTFEXTPROC) __GLeeGetProcAddress("glVertexWeightfEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexWeightfvEXT = (GLEEPFNGLVERTEXWEIGHTFVEXTPROC) __GLeeGetProcAddress("glVertexWeightfvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexWeightPointerEXT = (GLEEPFNGLVERTEXWEIGHTPOINTEREXTPROC) __GLeeGetProcAddress("glVertexWeightPointerEXT"))!=0) nLinked++; #endif if (nLinked==3) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_NV_light_max_exponent(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_NV_vertex_array_range(void) { GLint nLinked=0; #ifdef __GLEE_GL_NV_vertex_array_range if ((GLeeFuncPtr_glFlushVertexArrayRangeNV = (GLEEPFNGLFLUSHVERTEXARRAYRANGENVPROC) __GLeeGetProcAddress("glFlushVertexArrayRangeNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexArrayRangeNV = (GLEEPFNGLVERTEXARRAYRANGENVPROC) __GLeeGetProcAddress("glVertexArrayRangeNV"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_NV_register_combiners(void) { GLint nLinked=0; #ifdef __GLEE_GL_NV_register_combiners if ((GLeeFuncPtr_glCombinerParameterfvNV = (GLEEPFNGLCOMBINERPARAMETERFVNVPROC) __GLeeGetProcAddress("glCombinerParameterfvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glCombinerParameterfNV = (GLEEPFNGLCOMBINERPARAMETERFNVPROC) __GLeeGetProcAddress("glCombinerParameterfNV"))!=0) nLinked++; if ((GLeeFuncPtr_glCombinerParameterivNV = (GLEEPFNGLCOMBINERPARAMETERIVNVPROC) __GLeeGetProcAddress("glCombinerParameterivNV"))!=0) nLinked++; if ((GLeeFuncPtr_glCombinerParameteriNV = (GLEEPFNGLCOMBINERPARAMETERINVPROC) __GLeeGetProcAddress("glCombinerParameteriNV"))!=0) nLinked++; if ((GLeeFuncPtr_glCombinerInputNV = (GLEEPFNGLCOMBINERINPUTNVPROC) __GLeeGetProcAddress("glCombinerInputNV"))!=0) nLinked++; if ((GLeeFuncPtr_glCombinerOutputNV = (GLEEPFNGLCOMBINEROUTPUTNVPROC) __GLeeGetProcAddress("glCombinerOutputNV"))!=0) nLinked++; if ((GLeeFuncPtr_glFinalCombinerInputNV = (GLEEPFNGLFINALCOMBINERINPUTNVPROC) __GLeeGetProcAddress("glFinalCombinerInputNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetCombinerInputParameterfvNV = (GLEEPFNGLGETCOMBINERINPUTPARAMETERFVNVPROC) __GLeeGetProcAddress("glGetCombinerInputParameterfvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetCombinerInputParameterivNV = (GLEEPFNGLGETCOMBINERINPUTPARAMETERIVNVPROC) __GLeeGetProcAddress("glGetCombinerInputParameterivNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetCombinerOutputParameterfvNV = (GLEEPFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC) __GLeeGetProcAddress("glGetCombinerOutputParameterfvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetCombinerOutputParameterivNV = (GLEEPFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC) __GLeeGetProcAddress("glGetCombinerOutputParameterivNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetFinalCombinerInputParameterfvNV = (GLEEPFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC) __GLeeGetProcAddress("glGetFinalCombinerInputParameterfvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetFinalCombinerInputParameterivNV = (GLEEPFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC) __GLeeGetProcAddress("glGetFinalCombinerInputParameterivNV"))!=0) nLinked++; #endif if (nLinked==13) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_NV_fog_distance(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_NV_texgen_emboss(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_NV_blend_square(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_NV_texture_env_combine4(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_MESA_resize_buffers(void) { GLint nLinked=0; #ifdef __GLEE_GL_MESA_resize_buffers if ((GLeeFuncPtr_glResizeBuffersMESA = (GLEEPFNGLRESIZEBUFFERSMESAPROC) __GLeeGetProcAddress("glResizeBuffersMESA"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_MESA_window_pos(void) { GLint nLinked=0; #ifdef __GLEE_GL_MESA_window_pos if ((GLeeFuncPtr_glWindowPos2dMESA = (GLEEPFNGLWINDOWPOS2DMESAPROC) __GLeeGetProcAddress("glWindowPos2dMESA"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos2dvMESA = (GLEEPFNGLWINDOWPOS2DVMESAPROC) __GLeeGetProcAddress("glWindowPos2dvMESA"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos2fMESA = (GLEEPFNGLWINDOWPOS2FMESAPROC) __GLeeGetProcAddress("glWindowPos2fMESA"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos2fvMESA = (GLEEPFNGLWINDOWPOS2FVMESAPROC) __GLeeGetProcAddress("glWindowPos2fvMESA"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos2iMESA = (GLEEPFNGLWINDOWPOS2IMESAPROC) __GLeeGetProcAddress("glWindowPos2iMESA"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos2ivMESA = (GLEEPFNGLWINDOWPOS2IVMESAPROC) __GLeeGetProcAddress("glWindowPos2ivMESA"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos2sMESA = (GLEEPFNGLWINDOWPOS2SMESAPROC) __GLeeGetProcAddress("glWindowPos2sMESA"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos2svMESA = (GLEEPFNGLWINDOWPOS2SVMESAPROC) __GLeeGetProcAddress("glWindowPos2svMESA"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos3dMESA = (GLEEPFNGLWINDOWPOS3DMESAPROC) __GLeeGetProcAddress("glWindowPos3dMESA"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos3dvMESA = (GLEEPFNGLWINDOWPOS3DVMESAPROC) __GLeeGetProcAddress("glWindowPos3dvMESA"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos3fMESA = (GLEEPFNGLWINDOWPOS3FMESAPROC) __GLeeGetProcAddress("glWindowPos3fMESA"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos3fvMESA = (GLEEPFNGLWINDOWPOS3FVMESAPROC) __GLeeGetProcAddress("glWindowPos3fvMESA"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos3iMESA = (GLEEPFNGLWINDOWPOS3IMESAPROC) __GLeeGetProcAddress("glWindowPos3iMESA"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos3ivMESA = (GLEEPFNGLWINDOWPOS3IVMESAPROC) __GLeeGetProcAddress("glWindowPos3ivMESA"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos3sMESA = (GLEEPFNGLWINDOWPOS3SMESAPROC) __GLeeGetProcAddress("glWindowPos3sMESA"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos3svMESA = (GLEEPFNGLWINDOWPOS3SVMESAPROC) __GLeeGetProcAddress("glWindowPos3svMESA"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos4dMESA = (GLEEPFNGLWINDOWPOS4DMESAPROC) __GLeeGetProcAddress("glWindowPos4dMESA"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos4dvMESA = (GLEEPFNGLWINDOWPOS4DVMESAPROC) __GLeeGetProcAddress("glWindowPos4dvMESA"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos4fMESA = (GLEEPFNGLWINDOWPOS4FMESAPROC) __GLeeGetProcAddress("glWindowPos4fMESA"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos4fvMESA = (GLEEPFNGLWINDOWPOS4FVMESAPROC) __GLeeGetProcAddress("glWindowPos4fvMESA"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos4iMESA = (GLEEPFNGLWINDOWPOS4IMESAPROC) __GLeeGetProcAddress("glWindowPos4iMESA"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos4ivMESA = (GLEEPFNGLWINDOWPOS4IVMESAPROC) __GLeeGetProcAddress("glWindowPos4ivMESA"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos4sMESA = (GLEEPFNGLWINDOWPOS4SMESAPROC) __GLeeGetProcAddress("glWindowPos4sMESA"))!=0) nLinked++; if ((GLeeFuncPtr_glWindowPos4svMESA = (GLEEPFNGLWINDOWPOS4SVMESAPROC) __GLeeGetProcAddress("glWindowPos4svMESA"))!=0) nLinked++; #endif if (nLinked==24) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_texture_compression_s3tc(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_IBM_cull_vertex(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_IBM_multimode_draw_arrays(void) { GLint nLinked=0; #ifdef __GLEE_GL_IBM_multimode_draw_arrays if ((GLeeFuncPtr_glMultiModeDrawArraysIBM = (GLEEPFNGLMULTIMODEDRAWARRAYSIBMPROC) __GLeeGetProcAddress("glMultiModeDrawArraysIBM"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiModeDrawElementsIBM = (GLEEPFNGLMULTIMODEDRAWELEMENTSIBMPROC) __GLeeGetProcAddress("glMultiModeDrawElementsIBM"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_IBM_vertex_array_lists(void) { GLint nLinked=0; #ifdef __GLEE_GL_IBM_vertex_array_lists if ((GLeeFuncPtr_glColorPointerListIBM = (GLEEPFNGLCOLORPOINTERLISTIBMPROC) __GLeeGetProcAddress("glColorPointerListIBM"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColorPointerListIBM = (GLEEPFNGLSECONDARYCOLORPOINTERLISTIBMPROC) __GLeeGetProcAddress("glSecondaryColorPointerListIBM"))!=0) nLinked++; if ((GLeeFuncPtr_glEdgeFlagPointerListIBM = (GLEEPFNGLEDGEFLAGPOINTERLISTIBMPROC) __GLeeGetProcAddress("glEdgeFlagPointerListIBM"))!=0) nLinked++; if ((GLeeFuncPtr_glFogCoordPointerListIBM = (GLEEPFNGLFOGCOORDPOINTERLISTIBMPROC) __GLeeGetProcAddress("glFogCoordPointerListIBM"))!=0) nLinked++; if ((GLeeFuncPtr_glIndexPointerListIBM = (GLEEPFNGLINDEXPOINTERLISTIBMPROC) __GLeeGetProcAddress("glIndexPointerListIBM"))!=0) nLinked++; if ((GLeeFuncPtr_glNormalPointerListIBM = (GLEEPFNGLNORMALPOINTERLISTIBMPROC) __GLeeGetProcAddress("glNormalPointerListIBM"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoordPointerListIBM = (GLEEPFNGLTEXCOORDPOINTERLISTIBMPROC) __GLeeGetProcAddress("glTexCoordPointerListIBM"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexPointerListIBM = (GLEEPFNGLVERTEXPOINTERLISTIBMPROC) __GLeeGetProcAddress("glVertexPointerListIBM"))!=0) nLinked++; #endif if (nLinked==8) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_SGIX_subsample(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_SGIX_ycrcb_subsample(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_SGIX_ycrcba(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_SGI_depth_pass_instrument(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_3DFX_texture_compression_FXT1(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_3DFX_multisample(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_3DFX_tbuffer(void) { GLint nLinked=0; #ifdef __GLEE_GL_3DFX_tbuffer if ((GLeeFuncPtr_glTbufferMask3DFX = (GLEEPFNGLTBUFFERMASK3DFXPROC) __GLeeGetProcAddress("glTbufferMask3DFX"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_multisample(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_multisample if ((GLeeFuncPtr_glSampleMaskEXT = (GLEEPFNGLSAMPLEMASKEXTPROC) __GLeeGetProcAddress("glSampleMaskEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glSamplePatternEXT = (GLEEPFNGLSAMPLEPATTERNEXTPROC) __GLeeGetProcAddress("glSamplePatternEXT"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_SGIX_vertex_preclip(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_SGIX_convolution_accuracy(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_SGIX_resample(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_SGIS_point_line_texgen(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_SGIS_texture_color_mask(void) { GLint nLinked=0; #ifdef __GLEE_GL_SGIS_texture_color_mask if ((GLeeFuncPtr_glTextureColorMaskSGIS = (GLEEPFNGLTEXTURECOLORMASKSGISPROC) __GLeeGetProcAddress("glTextureColorMaskSGIS"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_texture_env_dot3(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ATI_texture_mirror_once(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_NV_fence(void) { GLint nLinked=0; #ifdef __GLEE_GL_NV_fence if ((GLeeFuncPtr_glDeleteFencesNV = (GLEEPFNGLDELETEFENCESNVPROC) __GLeeGetProcAddress("glDeleteFencesNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGenFencesNV = (GLEEPFNGLGENFENCESNVPROC) __GLeeGetProcAddress("glGenFencesNV"))!=0) nLinked++; if ((GLeeFuncPtr_glIsFenceNV = (GLEEPFNGLISFENCENVPROC) __GLeeGetProcAddress("glIsFenceNV"))!=0) nLinked++; if ((GLeeFuncPtr_glTestFenceNV = (GLEEPFNGLTESTFENCENVPROC) __GLeeGetProcAddress("glTestFenceNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetFenceivNV = (GLEEPFNGLGETFENCEIVNVPROC) __GLeeGetProcAddress("glGetFenceivNV"))!=0) nLinked++; if ((GLeeFuncPtr_glFinishFenceNV = (GLEEPFNGLFINISHFENCENVPROC) __GLeeGetProcAddress("glFinishFenceNV"))!=0) nLinked++; if ((GLeeFuncPtr_glSetFenceNV = (GLEEPFNGLSETFENCENVPROC) __GLeeGetProcAddress("glSetFenceNV"))!=0) nLinked++; #endif if (nLinked==7) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_IBM_texture_mirrored_repeat(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_NV_evaluators(void) { GLint nLinked=0; #ifdef __GLEE_GL_NV_evaluators if ((GLeeFuncPtr_glMapControlPointsNV = (GLEEPFNGLMAPCONTROLPOINTSNVPROC) __GLeeGetProcAddress("glMapControlPointsNV"))!=0) nLinked++; if ((GLeeFuncPtr_glMapParameterivNV = (GLEEPFNGLMAPPARAMETERIVNVPROC) __GLeeGetProcAddress("glMapParameterivNV"))!=0) nLinked++; if ((GLeeFuncPtr_glMapParameterfvNV = (GLEEPFNGLMAPPARAMETERFVNVPROC) __GLeeGetProcAddress("glMapParameterfvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetMapControlPointsNV = (GLEEPFNGLGETMAPCONTROLPOINTSNVPROC) __GLeeGetProcAddress("glGetMapControlPointsNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetMapParameterivNV = (GLEEPFNGLGETMAPPARAMETERIVNVPROC) __GLeeGetProcAddress("glGetMapParameterivNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetMapParameterfvNV = (GLEEPFNGLGETMAPPARAMETERFVNVPROC) __GLeeGetProcAddress("glGetMapParameterfvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetMapAttribParameterivNV = (GLEEPFNGLGETMAPATTRIBPARAMETERIVNVPROC) __GLeeGetProcAddress("glGetMapAttribParameterivNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetMapAttribParameterfvNV = (GLEEPFNGLGETMAPATTRIBPARAMETERFVNVPROC) __GLeeGetProcAddress("glGetMapAttribParameterfvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glEvalMapsNV = (GLEEPFNGLEVALMAPSNVPROC) __GLeeGetProcAddress("glEvalMapsNV"))!=0) nLinked++; #endif if (nLinked==9) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_NV_packed_depth_stencil(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_NV_register_combiners2(void) { GLint nLinked=0; #ifdef __GLEE_GL_NV_register_combiners2 if ((GLeeFuncPtr_glCombinerStageParameterfvNV = (GLEEPFNGLCOMBINERSTAGEPARAMETERFVNVPROC) __GLeeGetProcAddress("glCombinerStageParameterfvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetCombinerStageParameterfvNV = (GLEEPFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC) __GLeeGetProcAddress("glGetCombinerStageParameterfvNV"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_NV_texture_compression_vtc(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_NV_texture_rectangle(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_NV_texture_shader(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_NV_texture_shader2(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_NV_vertex_array_range2(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_NV_vertex_program(void) { GLint nLinked=0; #ifdef __GLEE_GL_NV_vertex_program if ((GLeeFuncPtr_glAreProgramsResidentNV = (GLEEPFNGLAREPROGRAMSRESIDENTNVPROC) __GLeeGetProcAddress("glAreProgramsResidentNV"))!=0) nLinked++; if ((GLeeFuncPtr_glBindProgramNV = (GLEEPFNGLBINDPROGRAMNVPROC) __GLeeGetProcAddress("glBindProgramNV"))!=0) nLinked++; if ((GLeeFuncPtr_glDeleteProgramsNV = (GLEEPFNGLDELETEPROGRAMSNVPROC) __GLeeGetProcAddress("glDeleteProgramsNV"))!=0) nLinked++; if ((GLeeFuncPtr_glExecuteProgramNV = (GLEEPFNGLEXECUTEPROGRAMNVPROC) __GLeeGetProcAddress("glExecuteProgramNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGenProgramsNV = (GLEEPFNGLGENPROGRAMSNVPROC) __GLeeGetProcAddress("glGenProgramsNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetProgramParameterdvNV = (GLEEPFNGLGETPROGRAMPARAMETERDVNVPROC) __GLeeGetProcAddress("glGetProgramParameterdvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetProgramParameterfvNV = (GLEEPFNGLGETPROGRAMPARAMETERFVNVPROC) __GLeeGetProcAddress("glGetProgramParameterfvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetProgramivNV = (GLEEPFNGLGETPROGRAMIVNVPROC) __GLeeGetProcAddress("glGetProgramivNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetProgramStringNV = (GLEEPFNGLGETPROGRAMSTRINGNVPROC) __GLeeGetProcAddress("glGetProgramStringNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetTrackMatrixivNV = (GLEEPFNGLGETTRACKMATRIXIVNVPROC) __GLeeGetProcAddress("glGetTrackMatrixivNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetVertexAttribdvNV = (GLEEPFNGLGETVERTEXATTRIBDVNVPROC) __GLeeGetProcAddress("glGetVertexAttribdvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetVertexAttribfvNV = (GLEEPFNGLGETVERTEXATTRIBFVNVPROC) __GLeeGetProcAddress("glGetVertexAttribfvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetVertexAttribivNV = (GLEEPFNGLGETVERTEXATTRIBIVNVPROC) __GLeeGetProcAddress("glGetVertexAttribivNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetVertexAttribPointervNV = (GLEEPFNGLGETVERTEXATTRIBPOINTERVNVPROC) __GLeeGetProcAddress("glGetVertexAttribPointervNV"))!=0) nLinked++; if ((GLeeFuncPtr_glIsProgramNV = (GLEEPFNGLISPROGRAMNVPROC) __GLeeGetProcAddress("glIsProgramNV"))!=0) nLinked++; if ((GLeeFuncPtr_glLoadProgramNV = (GLEEPFNGLLOADPROGRAMNVPROC) __GLeeGetProcAddress("glLoadProgramNV"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramParameter4dNV = (GLEEPFNGLPROGRAMPARAMETER4DNVPROC) __GLeeGetProcAddress("glProgramParameter4dNV"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramParameter4dvNV = (GLEEPFNGLPROGRAMPARAMETER4DVNVPROC) __GLeeGetProcAddress("glProgramParameter4dvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramParameter4fNV = (GLEEPFNGLPROGRAMPARAMETER4FNVPROC) __GLeeGetProcAddress("glProgramParameter4fNV"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramParameter4fvNV = (GLEEPFNGLPROGRAMPARAMETER4FVNVPROC) __GLeeGetProcAddress("glProgramParameter4fvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramParameters4dvNV = (GLEEPFNGLPROGRAMPARAMETERS4DVNVPROC) __GLeeGetProcAddress("glProgramParameters4dvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramParameters4fvNV = (GLEEPFNGLPROGRAMPARAMETERS4FVNVPROC) __GLeeGetProcAddress("glProgramParameters4fvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glRequestResidentProgramsNV = (GLEEPFNGLREQUESTRESIDENTPROGRAMSNVPROC) __GLeeGetProcAddress("glRequestResidentProgramsNV"))!=0) nLinked++; if ((GLeeFuncPtr_glTrackMatrixNV = (GLEEPFNGLTRACKMATRIXNVPROC) __GLeeGetProcAddress("glTrackMatrixNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribPointerNV = (GLEEPFNGLVERTEXATTRIBPOINTERNVPROC) __GLeeGetProcAddress("glVertexAttribPointerNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib1dNV = (GLEEPFNGLVERTEXATTRIB1DNVPROC) __GLeeGetProcAddress("glVertexAttrib1dNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib1dvNV = (GLEEPFNGLVERTEXATTRIB1DVNVPROC) __GLeeGetProcAddress("glVertexAttrib1dvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib1fNV = (GLEEPFNGLVERTEXATTRIB1FNVPROC) __GLeeGetProcAddress("glVertexAttrib1fNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib1fvNV = (GLEEPFNGLVERTEXATTRIB1FVNVPROC) __GLeeGetProcAddress("glVertexAttrib1fvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib1sNV = (GLEEPFNGLVERTEXATTRIB1SNVPROC) __GLeeGetProcAddress("glVertexAttrib1sNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib1svNV = (GLEEPFNGLVERTEXATTRIB1SVNVPROC) __GLeeGetProcAddress("glVertexAttrib1svNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib2dNV = (GLEEPFNGLVERTEXATTRIB2DNVPROC) __GLeeGetProcAddress("glVertexAttrib2dNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib2dvNV = (GLEEPFNGLVERTEXATTRIB2DVNVPROC) __GLeeGetProcAddress("glVertexAttrib2dvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib2fNV = (GLEEPFNGLVERTEXATTRIB2FNVPROC) __GLeeGetProcAddress("glVertexAttrib2fNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib2fvNV = (GLEEPFNGLVERTEXATTRIB2FVNVPROC) __GLeeGetProcAddress("glVertexAttrib2fvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib2sNV = (GLEEPFNGLVERTEXATTRIB2SNVPROC) __GLeeGetProcAddress("glVertexAttrib2sNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib2svNV = (GLEEPFNGLVERTEXATTRIB2SVNVPROC) __GLeeGetProcAddress("glVertexAttrib2svNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib3dNV = (GLEEPFNGLVERTEXATTRIB3DNVPROC) __GLeeGetProcAddress("glVertexAttrib3dNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib3dvNV = (GLEEPFNGLVERTEXATTRIB3DVNVPROC) __GLeeGetProcAddress("glVertexAttrib3dvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib3fNV = (GLEEPFNGLVERTEXATTRIB3FNVPROC) __GLeeGetProcAddress("glVertexAttrib3fNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib3fvNV = (GLEEPFNGLVERTEXATTRIB3FVNVPROC) __GLeeGetProcAddress("glVertexAttrib3fvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib3sNV = (GLEEPFNGLVERTEXATTRIB3SNVPROC) __GLeeGetProcAddress("glVertexAttrib3sNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib3svNV = (GLEEPFNGLVERTEXATTRIB3SVNVPROC) __GLeeGetProcAddress("glVertexAttrib3svNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4dNV = (GLEEPFNGLVERTEXATTRIB4DNVPROC) __GLeeGetProcAddress("glVertexAttrib4dNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4dvNV = (GLEEPFNGLVERTEXATTRIB4DVNVPROC) __GLeeGetProcAddress("glVertexAttrib4dvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4fNV = (GLEEPFNGLVERTEXATTRIB4FNVPROC) __GLeeGetProcAddress("glVertexAttrib4fNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4fvNV = (GLEEPFNGLVERTEXATTRIB4FVNVPROC) __GLeeGetProcAddress("glVertexAttrib4fvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4sNV = (GLEEPFNGLVERTEXATTRIB4SNVPROC) __GLeeGetProcAddress("glVertexAttrib4sNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4svNV = (GLEEPFNGLVERTEXATTRIB4SVNVPROC) __GLeeGetProcAddress("glVertexAttrib4svNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4ubNV = (GLEEPFNGLVERTEXATTRIB4UBNVPROC) __GLeeGetProcAddress("glVertexAttrib4ubNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4ubvNV = (GLEEPFNGLVERTEXATTRIB4UBVNVPROC) __GLeeGetProcAddress("glVertexAttrib4ubvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribs1dvNV = (GLEEPFNGLVERTEXATTRIBS1DVNVPROC) __GLeeGetProcAddress("glVertexAttribs1dvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribs1fvNV = (GLEEPFNGLVERTEXATTRIBS1FVNVPROC) __GLeeGetProcAddress("glVertexAttribs1fvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribs1svNV = (GLEEPFNGLVERTEXATTRIBS1SVNVPROC) __GLeeGetProcAddress("glVertexAttribs1svNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribs2dvNV = (GLEEPFNGLVERTEXATTRIBS2DVNVPROC) __GLeeGetProcAddress("glVertexAttribs2dvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribs2fvNV = (GLEEPFNGLVERTEXATTRIBS2FVNVPROC) __GLeeGetProcAddress("glVertexAttribs2fvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribs2svNV = (GLEEPFNGLVERTEXATTRIBS2SVNVPROC) __GLeeGetProcAddress("glVertexAttribs2svNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribs3dvNV = (GLEEPFNGLVERTEXATTRIBS3DVNVPROC) __GLeeGetProcAddress("glVertexAttribs3dvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribs3fvNV = (GLEEPFNGLVERTEXATTRIBS3FVNVPROC) __GLeeGetProcAddress("glVertexAttribs3fvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribs3svNV = (GLEEPFNGLVERTEXATTRIBS3SVNVPROC) __GLeeGetProcAddress("glVertexAttribs3svNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribs4dvNV = (GLEEPFNGLVERTEXATTRIBS4DVNVPROC) __GLeeGetProcAddress("glVertexAttribs4dvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribs4fvNV = (GLEEPFNGLVERTEXATTRIBS4FVNVPROC) __GLeeGetProcAddress("glVertexAttribs4fvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribs4svNV = (GLEEPFNGLVERTEXATTRIBS4SVNVPROC) __GLeeGetProcAddress("glVertexAttribs4svNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribs4ubvNV = (GLEEPFNGLVERTEXATTRIBS4UBVNVPROC) __GLeeGetProcAddress("glVertexAttribs4ubvNV"))!=0) nLinked++; #endif if (nLinked==64) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_SGIX_texture_coordinate_clamp(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_SGIX_scalebias_hint(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_OML_interlace(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_OML_subsample(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_OML_resample(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_NV_copy_depth_to_color(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ATI_envmap_bumpmap(void) { GLint nLinked=0; #ifdef __GLEE_GL_ATI_envmap_bumpmap if ((GLeeFuncPtr_glTexBumpParameterivATI = (GLEEPFNGLTEXBUMPPARAMETERIVATIPROC) __GLeeGetProcAddress("glTexBumpParameterivATI"))!=0) nLinked++; if ((GLeeFuncPtr_glTexBumpParameterfvATI = (GLEEPFNGLTEXBUMPPARAMETERFVATIPROC) __GLeeGetProcAddress("glTexBumpParameterfvATI"))!=0) nLinked++; if ((GLeeFuncPtr_glGetTexBumpParameterivATI = (GLEEPFNGLGETTEXBUMPPARAMETERIVATIPROC) __GLeeGetProcAddress("glGetTexBumpParameterivATI"))!=0) nLinked++; if ((GLeeFuncPtr_glGetTexBumpParameterfvATI = (GLEEPFNGLGETTEXBUMPPARAMETERFVATIPROC) __GLeeGetProcAddress("glGetTexBumpParameterfvATI"))!=0) nLinked++; #endif if (nLinked==4) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ATI_fragment_shader(void) { GLint nLinked=0; #ifdef __GLEE_GL_ATI_fragment_shader if ((GLeeFuncPtr_glGenFragmentShadersATI = (GLEEPFNGLGENFRAGMENTSHADERSATIPROC) __GLeeGetProcAddress("glGenFragmentShadersATI"))!=0) nLinked++; if ((GLeeFuncPtr_glBindFragmentShaderATI = (GLEEPFNGLBINDFRAGMENTSHADERATIPROC) __GLeeGetProcAddress("glBindFragmentShaderATI"))!=0) nLinked++; if ((GLeeFuncPtr_glDeleteFragmentShaderATI = (GLEEPFNGLDELETEFRAGMENTSHADERATIPROC) __GLeeGetProcAddress("glDeleteFragmentShaderATI"))!=0) nLinked++; if ((GLeeFuncPtr_glBeginFragmentShaderATI = (GLEEPFNGLBEGINFRAGMENTSHADERATIPROC) __GLeeGetProcAddress("glBeginFragmentShaderATI"))!=0) nLinked++; if ((GLeeFuncPtr_glEndFragmentShaderATI = (GLEEPFNGLENDFRAGMENTSHADERATIPROC) __GLeeGetProcAddress("glEndFragmentShaderATI"))!=0) nLinked++; if ((GLeeFuncPtr_glPassTexCoordATI = (GLEEPFNGLPASSTEXCOORDATIPROC) __GLeeGetProcAddress("glPassTexCoordATI"))!=0) nLinked++; if ((GLeeFuncPtr_glSampleMapATI = (GLEEPFNGLSAMPLEMAPATIPROC) __GLeeGetProcAddress("glSampleMapATI"))!=0) nLinked++; if ((GLeeFuncPtr_glColorFragmentOp1ATI = (GLEEPFNGLCOLORFRAGMENTOP1ATIPROC) __GLeeGetProcAddress("glColorFragmentOp1ATI"))!=0) nLinked++; if ((GLeeFuncPtr_glColorFragmentOp2ATI = (GLEEPFNGLCOLORFRAGMENTOP2ATIPROC) __GLeeGetProcAddress("glColorFragmentOp2ATI"))!=0) nLinked++; if ((GLeeFuncPtr_glColorFragmentOp3ATI = (GLEEPFNGLCOLORFRAGMENTOP3ATIPROC) __GLeeGetProcAddress("glColorFragmentOp3ATI"))!=0) nLinked++; if ((GLeeFuncPtr_glAlphaFragmentOp1ATI = (GLEEPFNGLALPHAFRAGMENTOP1ATIPROC) __GLeeGetProcAddress("glAlphaFragmentOp1ATI"))!=0) nLinked++; if ((GLeeFuncPtr_glAlphaFragmentOp2ATI = (GLEEPFNGLALPHAFRAGMENTOP2ATIPROC) __GLeeGetProcAddress("glAlphaFragmentOp2ATI"))!=0) nLinked++; if ((GLeeFuncPtr_glAlphaFragmentOp3ATI = (GLEEPFNGLALPHAFRAGMENTOP3ATIPROC) __GLeeGetProcAddress("glAlphaFragmentOp3ATI"))!=0) nLinked++; if ((GLeeFuncPtr_glSetFragmentShaderConstantATI = (GLEEPFNGLSETFRAGMENTSHADERCONSTANTATIPROC) __GLeeGetProcAddress("glSetFragmentShaderConstantATI"))!=0) nLinked++; #endif if (nLinked==14) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ATI_pn_triangles(void) { GLint nLinked=0; #ifdef __GLEE_GL_ATI_pn_triangles if ((GLeeFuncPtr_glPNTrianglesiATI = (GLEEPFNGLPNTRIANGLESIATIPROC) __GLeeGetProcAddress("glPNTrianglesiATI"))!=0) nLinked++; if ((GLeeFuncPtr_glPNTrianglesfATI = (GLEEPFNGLPNTRIANGLESFATIPROC) __GLeeGetProcAddress("glPNTrianglesfATI"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ATI_vertex_array_object(void) { GLint nLinked=0; #ifdef __GLEE_GL_ATI_vertex_array_object if ((GLeeFuncPtr_glNewObjectBufferATI = (GLEEPFNGLNEWOBJECTBUFFERATIPROC) __GLeeGetProcAddress("glNewObjectBufferATI"))!=0) nLinked++; if ((GLeeFuncPtr_glIsObjectBufferATI = (GLEEPFNGLISOBJECTBUFFERATIPROC) __GLeeGetProcAddress("glIsObjectBufferATI"))!=0) nLinked++; if ((GLeeFuncPtr_glUpdateObjectBufferATI = (GLEEPFNGLUPDATEOBJECTBUFFERATIPROC) __GLeeGetProcAddress("glUpdateObjectBufferATI"))!=0) nLinked++; if ((GLeeFuncPtr_glGetObjectBufferfvATI = (GLEEPFNGLGETOBJECTBUFFERFVATIPROC) __GLeeGetProcAddress("glGetObjectBufferfvATI"))!=0) nLinked++; if ((GLeeFuncPtr_glGetObjectBufferivATI = (GLEEPFNGLGETOBJECTBUFFERIVATIPROC) __GLeeGetProcAddress("glGetObjectBufferivATI"))!=0) nLinked++; if ((GLeeFuncPtr_glFreeObjectBufferATI = (GLEEPFNGLFREEOBJECTBUFFERATIPROC) __GLeeGetProcAddress("glFreeObjectBufferATI"))!=0) nLinked++; if ((GLeeFuncPtr_glArrayObjectATI = (GLEEPFNGLARRAYOBJECTATIPROC) __GLeeGetProcAddress("glArrayObjectATI"))!=0) nLinked++; if ((GLeeFuncPtr_glGetArrayObjectfvATI = (GLEEPFNGLGETARRAYOBJECTFVATIPROC) __GLeeGetProcAddress("glGetArrayObjectfvATI"))!=0) nLinked++; if ((GLeeFuncPtr_glGetArrayObjectivATI = (GLEEPFNGLGETARRAYOBJECTIVATIPROC) __GLeeGetProcAddress("glGetArrayObjectivATI"))!=0) nLinked++; if ((GLeeFuncPtr_glVariantArrayObjectATI = (GLEEPFNGLVARIANTARRAYOBJECTATIPROC) __GLeeGetProcAddress("glVariantArrayObjectATI"))!=0) nLinked++; if ((GLeeFuncPtr_glGetVariantArrayObjectfvATI = (GLEEPFNGLGETVARIANTARRAYOBJECTFVATIPROC) __GLeeGetProcAddress("glGetVariantArrayObjectfvATI"))!=0) nLinked++; if ((GLeeFuncPtr_glGetVariantArrayObjectivATI = (GLEEPFNGLGETVARIANTARRAYOBJECTIVATIPROC) __GLeeGetProcAddress("glGetVariantArrayObjectivATI"))!=0) nLinked++; #endif if (nLinked==12) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_vertex_shader(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_vertex_shader if ((GLeeFuncPtr_glBeginVertexShaderEXT = (GLEEPFNGLBEGINVERTEXSHADEREXTPROC) __GLeeGetProcAddress("glBeginVertexShaderEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glEndVertexShaderEXT = (GLEEPFNGLENDVERTEXSHADEREXTPROC) __GLeeGetProcAddress("glEndVertexShaderEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glBindVertexShaderEXT = (GLEEPFNGLBINDVERTEXSHADEREXTPROC) __GLeeGetProcAddress("glBindVertexShaderEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGenVertexShadersEXT = (GLEEPFNGLGENVERTEXSHADERSEXTPROC) __GLeeGetProcAddress("glGenVertexShadersEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glDeleteVertexShaderEXT = (GLEEPFNGLDELETEVERTEXSHADEREXTPROC) __GLeeGetProcAddress("glDeleteVertexShaderEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glShaderOp1EXT = (GLEEPFNGLSHADEROP1EXTPROC) __GLeeGetProcAddress("glShaderOp1EXT"))!=0) nLinked++; if ((GLeeFuncPtr_glShaderOp2EXT = (GLEEPFNGLSHADEROP2EXTPROC) __GLeeGetProcAddress("glShaderOp2EXT"))!=0) nLinked++; if ((GLeeFuncPtr_glShaderOp3EXT = (GLEEPFNGLSHADEROP3EXTPROC) __GLeeGetProcAddress("glShaderOp3EXT"))!=0) nLinked++; if ((GLeeFuncPtr_glSwizzleEXT = (GLEEPFNGLSWIZZLEEXTPROC) __GLeeGetProcAddress("glSwizzleEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glWriteMaskEXT = (GLEEPFNGLWRITEMASKEXTPROC) __GLeeGetProcAddress("glWriteMaskEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glInsertComponentEXT = (GLEEPFNGLINSERTCOMPONENTEXTPROC) __GLeeGetProcAddress("glInsertComponentEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glExtractComponentEXT = (GLEEPFNGLEXTRACTCOMPONENTEXTPROC) __GLeeGetProcAddress("glExtractComponentEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGenSymbolsEXT = (GLEEPFNGLGENSYMBOLSEXTPROC) __GLeeGetProcAddress("glGenSymbolsEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glSetInvariantEXT = (GLEEPFNGLSETINVARIANTEXTPROC) __GLeeGetProcAddress("glSetInvariantEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glSetLocalConstantEXT = (GLEEPFNGLSETLOCALCONSTANTEXTPROC) __GLeeGetProcAddress("glSetLocalConstantEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glVariantbvEXT = (GLEEPFNGLVARIANTBVEXTPROC) __GLeeGetProcAddress("glVariantbvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glVariantsvEXT = (GLEEPFNGLVARIANTSVEXTPROC) __GLeeGetProcAddress("glVariantsvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glVariantivEXT = (GLEEPFNGLVARIANTIVEXTPROC) __GLeeGetProcAddress("glVariantivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glVariantfvEXT = (GLEEPFNGLVARIANTFVEXTPROC) __GLeeGetProcAddress("glVariantfvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glVariantdvEXT = (GLEEPFNGLVARIANTDVEXTPROC) __GLeeGetProcAddress("glVariantdvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glVariantubvEXT = (GLEEPFNGLVARIANTUBVEXTPROC) __GLeeGetProcAddress("glVariantubvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glVariantusvEXT = (GLEEPFNGLVARIANTUSVEXTPROC) __GLeeGetProcAddress("glVariantusvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glVariantuivEXT = (GLEEPFNGLVARIANTUIVEXTPROC) __GLeeGetProcAddress("glVariantuivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glVariantPointerEXT = (GLEEPFNGLVARIANTPOINTEREXTPROC) __GLeeGetProcAddress("glVariantPointerEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glEnableVariantClientStateEXT = (GLEEPFNGLENABLEVARIANTCLIENTSTATEEXTPROC) __GLeeGetProcAddress("glEnableVariantClientStateEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glDisableVariantClientStateEXT = (GLEEPFNGLDISABLEVARIANTCLIENTSTATEEXTPROC) __GLeeGetProcAddress("glDisableVariantClientStateEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glBindLightParameterEXT = (GLEEPFNGLBINDLIGHTPARAMETEREXTPROC) __GLeeGetProcAddress("glBindLightParameterEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glBindMaterialParameterEXT = (GLEEPFNGLBINDMATERIALPARAMETEREXTPROC) __GLeeGetProcAddress("glBindMaterialParameterEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glBindTexGenParameterEXT = (GLEEPFNGLBINDTEXGENPARAMETEREXTPROC) __GLeeGetProcAddress("glBindTexGenParameterEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glBindTextureUnitParameterEXT = (GLEEPFNGLBINDTEXTUREUNITPARAMETEREXTPROC) __GLeeGetProcAddress("glBindTextureUnitParameterEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glBindParameterEXT = (GLEEPFNGLBINDPARAMETEREXTPROC) __GLeeGetProcAddress("glBindParameterEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glIsVariantEnabledEXT = (GLEEPFNGLISVARIANTENABLEDEXTPROC) __GLeeGetProcAddress("glIsVariantEnabledEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetVariantBooleanvEXT = (GLEEPFNGLGETVARIANTBOOLEANVEXTPROC) __GLeeGetProcAddress("glGetVariantBooleanvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetVariantIntegervEXT = (GLEEPFNGLGETVARIANTINTEGERVEXTPROC) __GLeeGetProcAddress("glGetVariantIntegervEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetVariantFloatvEXT = (GLEEPFNGLGETVARIANTFLOATVEXTPROC) __GLeeGetProcAddress("glGetVariantFloatvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetVariantPointervEXT = (GLEEPFNGLGETVARIANTPOINTERVEXTPROC) __GLeeGetProcAddress("glGetVariantPointervEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetInvariantBooleanvEXT = (GLEEPFNGLGETINVARIANTBOOLEANVEXTPROC) __GLeeGetProcAddress("glGetInvariantBooleanvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetInvariantIntegervEXT = (GLEEPFNGLGETINVARIANTINTEGERVEXTPROC) __GLeeGetProcAddress("glGetInvariantIntegervEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetInvariantFloatvEXT = (GLEEPFNGLGETINVARIANTFLOATVEXTPROC) __GLeeGetProcAddress("glGetInvariantFloatvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetLocalConstantBooleanvEXT = (GLEEPFNGLGETLOCALCONSTANTBOOLEANVEXTPROC) __GLeeGetProcAddress("glGetLocalConstantBooleanvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetLocalConstantIntegervEXT = (GLEEPFNGLGETLOCALCONSTANTINTEGERVEXTPROC) __GLeeGetProcAddress("glGetLocalConstantIntegervEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetLocalConstantFloatvEXT = (GLEEPFNGLGETLOCALCONSTANTFLOATVEXTPROC) __GLeeGetProcAddress("glGetLocalConstantFloatvEXT"))!=0) nLinked++; #endif if (nLinked==42) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ATI_vertex_streams(void) { GLint nLinked=0; #ifdef __GLEE_GL_ATI_vertex_streams if ((GLeeFuncPtr_glVertexStream1sATI = (GLEEPFNGLVERTEXSTREAM1SATIPROC) __GLeeGetProcAddress("glVertexStream1sATI"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexStream1svATI = (GLEEPFNGLVERTEXSTREAM1SVATIPROC) __GLeeGetProcAddress("glVertexStream1svATI"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexStream1iATI = (GLEEPFNGLVERTEXSTREAM1IATIPROC) __GLeeGetProcAddress("glVertexStream1iATI"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexStream1ivATI = (GLEEPFNGLVERTEXSTREAM1IVATIPROC) __GLeeGetProcAddress("glVertexStream1ivATI"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexStream1fATI = (GLEEPFNGLVERTEXSTREAM1FATIPROC) __GLeeGetProcAddress("glVertexStream1fATI"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexStream1fvATI = (GLEEPFNGLVERTEXSTREAM1FVATIPROC) __GLeeGetProcAddress("glVertexStream1fvATI"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexStream1dATI = (GLEEPFNGLVERTEXSTREAM1DATIPROC) __GLeeGetProcAddress("glVertexStream1dATI"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexStream1dvATI = (GLEEPFNGLVERTEXSTREAM1DVATIPROC) __GLeeGetProcAddress("glVertexStream1dvATI"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexStream2sATI = (GLEEPFNGLVERTEXSTREAM2SATIPROC) __GLeeGetProcAddress("glVertexStream2sATI"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexStream2svATI = (GLEEPFNGLVERTEXSTREAM2SVATIPROC) __GLeeGetProcAddress("glVertexStream2svATI"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexStream2iATI = (GLEEPFNGLVERTEXSTREAM2IATIPROC) __GLeeGetProcAddress("glVertexStream2iATI"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexStream2ivATI = (GLEEPFNGLVERTEXSTREAM2IVATIPROC) __GLeeGetProcAddress("glVertexStream2ivATI"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexStream2fATI = (GLEEPFNGLVERTEXSTREAM2FATIPROC) __GLeeGetProcAddress("glVertexStream2fATI"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexStream2fvATI = (GLEEPFNGLVERTEXSTREAM2FVATIPROC) __GLeeGetProcAddress("glVertexStream2fvATI"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexStream2dATI = (GLEEPFNGLVERTEXSTREAM2DATIPROC) __GLeeGetProcAddress("glVertexStream2dATI"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexStream2dvATI = (GLEEPFNGLVERTEXSTREAM2DVATIPROC) __GLeeGetProcAddress("glVertexStream2dvATI"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexStream3sATI = (GLEEPFNGLVERTEXSTREAM3SATIPROC) __GLeeGetProcAddress("glVertexStream3sATI"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexStream3svATI = (GLEEPFNGLVERTEXSTREAM3SVATIPROC) __GLeeGetProcAddress("glVertexStream3svATI"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexStream3iATI = (GLEEPFNGLVERTEXSTREAM3IATIPROC) __GLeeGetProcAddress("glVertexStream3iATI"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexStream3ivATI = (GLEEPFNGLVERTEXSTREAM3IVATIPROC) __GLeeGetProcAddress("glVertexStream3ivATI"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexStream3fATI = (GLEEPFNGLVERTEXSTREAM3FATIPROC) __GLeeGetProcAddress("glVertexStream3fATI"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexStream3fvATI = (GLEEPFNGLVERTEXSTREAM3FVATIPROC) __GLeeGetProcAddress("glVertexStream3fvATI"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexStream3dATI = (GLEEPFNGLVERTEXSTREAM3DATIPROC) __GLeeGetProcAddress("glVertexStream3dATI"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexStream3dvATI = (GLEEPFNGLVERTEXSTREAM3DVATIPROC) __GLeeGetProcAddress("glVertexStream3dvATI"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexStream4sATI = (GLEEPFNGLVERTEXSTREAM4SATIPROC) __GLeeGetProcAddress("glVertexStream4sATI"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexStream4svATI = (GLEEPFNGLVERTEXSTREAM4SVATIPROC) __GLeeGetProcAddress("glVertexStream4svATI"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexStream4iATI = (GLEEPFNGLVERTEXSTREAM4IATIPROC) __GLeeGetProcAddress("glVertexStream4iATI"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexStream4ivATI = (GLEEPFNGLVERTEXSTREAM4IVATIPROC) __GLeeGetProcAddress("glVertexStream4ivATI"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexStream4fATI = (GLEEPFNGLVERTEXSTREAM4FATIPROC) __GLeeGetProcAddress("glVertexStream4fATI"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexStream4fvATI = (GLEEPFNGLVERTEXSTREAM4FVATIPROC) __GLeeGetProcAddress("glVertexStream4fvATI"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexStream4dATI = (GLEEPFNGLVERTEXSTREAM4DATIPROC) __GLeeGetProcAddress("glVertexStream4dATI"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexStream4dvATI = (GLEEPFNGLVERTEXSTREAM4DVATIPROC) __GLeeGetProcAddress("glVertexStream4dvATI"))!=0) nLinked++; if ((GLeeFuncPtr_glNormalStream3bATI = (GLEEPFNGLNORMALSTREAM3BATIPROC) __GLeeGetProcAddress("glNormalStream3bATI"))!=0) nLinked++; if ((GLeeFuncPtr_glNormalStream3bvATI = (GLEEPFNGLNORMALSTREAM3BVATIPROC) __GLeeGetProcAddress("glNormalStream3bvATI"))!=0) nLinked++; if ((GLeeFuncPtr_glNormalStream3sATI = (GLEEPFNGLNORMALSTREAM3SATIPROC) __GLeeGetProcAddress("glNormalStream3sATI"))!=0) nLinked++; if ((GLeeFuncPtr_glNormalStream3svATI = (GLEEPFNGLNORMALSTREAM3SVATIPROC) __GLeeGetProcAddress("glNormalStream3svATI"))!=0) nLinked++; if ((GLeeFuncPtr_glNormalStream3iATI = (GLEEPFNGLNORMALSTREAM3IATIPROC) __GLeeGetProcAddress("glNormalStream3iATI"))!=0) nLinked++; if ((GLeeFuncPtr_glNormalStream3ivATI = (GLEEPFNGLNORMALSTREAM3IVATIPROC) __GLeeGetProcAddress("glNormalStream3ivATI"))!=0) nLinked++; if ((GLeeFuncPtr_glNormalStream3fATI = (GLEEPFNGLNORMALSTREAM3FATIPROC) __GLeeGetProcAddress("glNormalStream3fATI"))!=0) nLinked++; if ((GLeeFuncPtr_glNormalStream3fvATI = (GLEEPFNGLNORMALSTREAM3FVATIPROC) __GLeeGetProcAddress("glNormalStream3fvATI"))!=0) nLinked++; if ((GLeeFuncPtr_glNormalStream3dATI = (GLEEPFNGLNORMALSTREAM3DATIPROC) __GLeeGetProcAddress("glNormalStream3dATI"))!=0) nLinked++; if ((GLeeFuncPtr_glNormalStream3dvATI = (GLEEPFNGLNORMALSTREAM3DVATIPROC) __GLeeGetProcAddress("glNormalStream3dvATI"))!=0) nLinked++; if ((GLeeFuncPtr_glClientActiveVertexStreamATI = (GLEEPFNGLCLIENTACTIVEVERTEXSTREAMATIPROC) __GLeeGetProcAddress("glClientActiveVertexStreamATI"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexBlendEnviATI = (GLEEPFNGLVERTEXBLENDENVIATIPROC) __GLeeGetProcAddress("glVertexBlendEnviATI"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexBlendEnvfATI = (GLEEPFNGLVERTEXBLENDENVFATIPROC) __GLeeGetProcAddress("glVertexBlendEnvfATI"))!=0) nLinked++; #endif if (nLinked==45) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ATI_element_array(void) { GLint nLinked=0; #ifdef __GLEE_GL_ATI_element_array if ((GLeeFuncPtr_glElementPointerATI = (GLEEPFNGLELEMENTPOINTERATIPROC) __GLeeGetProcAddress("glElementPointerATI"))!=0) nLinked++; if ((GLeeFuncPtr_glDrawElementArrayATI = (GLEEPFNGLDRAWELEMENTARRAYATIPROC) __GLeeGetProcAddress("glDrawElementArrayATI"))!=0) nLinked++; if ((GLeeFuncPtr_glDrawRangeElementArrayATI = (GLEEPFNGLDRAWRANGEELEMENTARRAYATIPROC) __GLeeGetProcAddress("glDrawRangeElementArrayATI"))!=0) nLinked++; #endif if (nLinked==3) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_SUN_mesh_array(void) { GLint nLinked=0; #ifdef __GLEE_GL_SUN_mesh_array if ((GLeeFuncPtr_glDrawMeshArraysSUN = (GLEEPFNGLDRAWMESHARRAYSSUNPROC) __GLeeGetProcAddress("glDrawMeshArraysSUN"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_SUN_slice_accum(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_NV_multisample_filter_hint(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_NV_depth_clamp(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_NV_occlusion_query(void) { GLint nLinked=0; #ifdef __GLEE_GL_NV_occlusion_query if ((GLeeFuncPtr_glGenOcclusionQueriesNV = (GLEEPFNGLGENOCCLUSIONQUERIESNVPROC) __GLeeGetProcAddress("glGenOcclusionQueriesNV"))!=0) nLinked++; if ((GLeeFuncPtr_glDeleteOcclusionQueriesNV = (GLEEPFNGLDELETEOCCLUSIONQUERIESNVPROC) __GLeeGetProcAddress("glDeleteOcclusionQueriesNV"))!=0) nLinked++; if ((GLeeFuncPtr_glIsOcclusionQueryNV = (GLEEPFNGLISOCCLUSIONQUERYNVPROC) __GLeeGetProcAddress("glIsOcclusionQueryNV"))!=0) nLinked++; if ((GLeeFuncPtr_glBeginOcclusionQueryNV = (GLEEPFNGLBEGINOCCLUSIONQUERYNVPROC) __GLeeGetProcAddress("glBeginOcclusionQueryNV"))!=0) nLinked++; if ((GLeeFuncPtr_glEndOcclusionQueryNV = (GLEEPFNGLENDOCCLUSIONQUERYNVPROC) __GLeeGetProcAddress("glEndOcclusionQueryNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetOcclusionQueryivNV = (GLEEPFNGLGETOCCLUSIONQUERYIVNVPROC) __GLeeGetProcAddress("glGetOcclusionQueryivNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetOcclusionQueryuivNV = (GLEEPFNGLGETOCCLUSIONQUERYUIVNVPROC) __GLeeGetProcAddress("glGetOcclusionQueryuivNV"))!=0) nLinked++; #endif if (nLinked==7) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_NV_point_sprite(void) { GLint nLinked=0; #ifdef __GLEE_GL_NV_point_sprite if ((GLeeFuncPtr_glPointParameteriNV = (GLEEPFNGLPOINTPARAMETERINVPROC) __GLeeGetProcAddress("glPointParameteriNV"))!=0) nLinked++; if ((GLeeFuncPtr_glPointParameterivNV = (GLEEPFNGLPOINTPARAMETERIVNVPROC) __GLeeGetProcAddress("glPointParameterivNV"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_NV_texture_shader3(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_NV_vertex_program1_1(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_shadow_funcs(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_stencil_two_side(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_stencil_two_side if ((GLeeFuncPtr_glActiveStencilFaceEXT = (GLEEPFNGLACTIVESTENCILFACEEXTPROC) __GLeeGetProcAddress("glActiveStencilFaceEXT"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ATI_text_fragment_shader(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_APPLE_client_storage(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_APPLE_element_array(void) { GLint nLinked=0; #ifdef __GLEE_GL_APPLE_element_array if ((GLeeFuncPtr_glElementPointerAPPLE = (GLEEPFNGLELEMENTPOINTERAPPLEPROC) __GLeeGetProcAddress("glElementPointerAPPLE"))!=0) nLinked++; if ((GLeeFuncPtr_glDrawElementArrayAPPLE = (GLEEPFNGLDRAWELEMENTARRAYAPPLEPROC) __GLeeGetProcAddress("glDrawElementArrayAPPLE"))!=0) nLinked++; if ((GLeeFuncPtr_glDrawRangeElementArrayAPPLE = (GLEEPFNGLDRAWRANGEELEMENTARRAYAPPLEPROC) __GLeeGetProcAddress("glDrawRangeElementArrayAPPLE"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiDrawElementArrayAPPLE = (GLEEPFNGLMULTIDRAWELEMENTARRAYAPPLEPROC) __GLeeGetProcAddress("glMultiDrawElementArrayAPPLE"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiDrawRangeElementArrayAPPLE = (GLEEPFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC) __GLeeGetProcAddress("glMultiDrawRangeElementArrayAPPLE"))!=0) nLinked++; #endif if (nLinked==5) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_APPLE_fence(void) { GLint nLinked=0; #ifdef __GLEE_GL_APPLE_fence if ((GLeeFuncPtr_glGenFencesAPPLE = (GLEEPFNGLGENFENCESAPPLEPROC) __GLeeGetProcAddress("glGenFencesAPPLE"))!=0) nLinked++; if ((GLeeFuncPtr_glDeleteFencesAPPLE = (GLEEPFNGLDELETEFENCESAPPLEPROC) __GLeeGetProcAddress("glDeleteFencesAPPLE"))!=0) nLinked++; if ((GLeeFuncPtr_glSetFenceAPPLE = (GLEEPFNGLSETFENCEAPPLEPROC) __GLeeGetProcAddress("glSetFenceAPPLE"))!=0) nLinked++; if ((GLeeFuncPtr_glIsFenceAPPLE = (GLEEPFNGLISFENCEAPPLEPROC) __GLeeGetProcAddress("glIsFenceAPPLE"))!=0) nLinked++; if ((GLeeFuncPtr_glTestFenceAPPLE = (GLEEPFNGLTESTFENCEAPPLEPROC) __GLeeGetProcAddress("glTestFenceAPPLE"))!=0) nLinked++; if ((GLeeFuncPtr_glFinishFenceAPPLE = (GLEEPFNGLFINISHFENCEAPPLEPROC) __GLeeGetProcAddress("glFinishFenceAPPLE"))!=0) nLinked++; if ((GLeeFuncPtr_glTestObjectAPPLE = (GLEEPFNGLTESTOBJECTAPPLEPROC) __GLeeGetProcAddress("glTestObjectAPPLE"))!=0) nLinked++; if ((GLeeFuncPtr_glFinishObjectAPPLE = (GLEEPFNGLFINISHOBJECTAPPLEPROC) __GLeeGetProcAddress("glFinishObjectAPPLE"))!=0) nLinked++; #endif if (nLinked==8) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_APPLE_vertex_array_object(void) { GLint nLinked=0; #ifdef __GLEE_GL_APPLE_vertex_array_object if ((GLeeFuncPtr_glBindVertexArrayAPPLE = (GLEEPFNGLBINDVERTEXARRAYAPPLEPROC) __GLeeGetProcAddress("glBindVertexArrayAPPLE"))!=0) nLinked++; if ((GLeeFuncPtr_glDeleteVertexArraysAPPLE = (GLEEPFNGLDELETEVERTEXARRAYSAPPLEPROC) __GLeeGetProcAddress("glDeleteVertexArraysAPPLE"))!=0) nLinked++; if ((GLeeFuncPtr_glGenVertexArraysAPPLE = (GLEEPFNGLGENVERTEXARRAYSAPPLEPROC) __GLeeGetProcAddress("glGenVertexArraysAPPLE"))!=0) nLinked++; if ((GLeeFuncPtr_glIsVertexArrayAPPLE = (GLEEPFNGLISVERTEXARRAYAPPLEPROC) __GLeeGetProcAddress("glIsVertexArrayAPPLE"))!=0) nLinked++; #endif if (nLinked==4) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_APPLE_vertex_array_range(void) { GLint nLinked=0; #ifdef __GLEE_GL_APPLE_vertex_array_range if ((GLeeFuncPtr_glVertexArrayRangeAPPLE = (GLEEPFNGLVERTEXARRAYRANGEAPPLEPROC) __GLeeGetProcAddress("glVertexArrayRangeAPPLE"))!=0) nLinked++; if ((GLeeFuncPtr_glFlushVertexArrayRangeAPPLE = (GLEEPFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC) __GLeeGetProcAddress("glFlushVertexArrayRangeAPPLE"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexArrayParameteriAPPLE = (GLEEPFNGLVERTEXARRAYPARAMETERIAPPLEPROC) __GLeeGetProcAddress("glVertexArrayParameteriAPPLE"))!=0) nLinked++; #endif if (nLinked==3) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_APPLE_ycbcr_422(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_S3_s3tc(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ATI_draw_buffers(void) { GLint nLinked=0; #ifdef __GLEE_GL_ATI_draw_buffers if ((GLeeFuncPtr_glDrawBuffersATI = (GLEEPFNGLDRAWBUFFERSATIPROC) __GLeeGetProcAddress("glDrawBuffersATI"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ATI_pixel_format_float(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ATI_texture_env_combine3(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ATI_texture_float(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_NV_float_buffer(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_NV_fragment_program(void) { GLint nLinked=0; #ifdef __GLEE_GL_NV_fragment_program if ((GLeeFuncPtr_glProgramNamedParameter4fNV = (GLEEPFNGLPROGRAMNAMEDPARAMETER4FNVPROC) __GLeeGetProcAddress("glProgramNamedParameter4fNV"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramNamedParameter4dNV = (GLEEPFNGLPROGRAMNAMEDPARAMETER4DNVPROC) __GLeeGetProcAddress("glProgramNamedParameter4dNV"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramNamedParameter4fvNV = (GLEEPFNGLPROGRAMNAMEDPARAMETER4FVNVPROC) __GLeeGetProcAddress("glProgramNamedParameter4fvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramNamedParameter4dvNV = (GLEEPFNGLPROGRAMNAMEDPARAMETER4DVNVPROC) __GLeeGetProcAddress("glProgramNamedParameter4dvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetProgramNamedParameterfvNV = (GLEEPFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC) __GLeeGetProcAddress("glGetProgramNamedParameterfvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetProgramNamedParameterdvNV = (GLEEPFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC) __GLeeGetProcAddress("glGetProgramNamedParameterdvNV"))!=0) nLinked++; #endif if (nLinked==6) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_NV_half_float(void) { GLint nLinked=0; #ifdef __GLEE_GL_NV_half_float if ((GLeeFuncPtr_glVertex2hNV = (GLEEPFNGLVERTEX2HNVPROC) __GLeeGetProcAddress("glVertex2hNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertex2hvNV = (GLEEPFNGLVERTEX2HVNVPROC) __GLeeGetProcAddress("glVertex2hvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertex3hNV = (GLEEPFNGLVERTEX3HNVPROC) __GLeeGetProcAddress("glVertex3hNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertex3hvNV = (GLEEPFNGLVERTEX3HVNVPROC) __GLeeGetProcAddress("glVertex3hvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertex4hNV = (GLEEPFNGLVERTEX4HNVPROC) __GLeeGetProcAddress("glVertex4hNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertex4hvNV = (GLEEPFNGLVERTEX4HVNVPROC) __GLeeGetProcAddress("glVertex4hvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glNormal3hNV = (GLEEPFNGLNORMAL3HNVPROC) __GLeeGetProcAddress("glNormal3hNV"))!=0) nLinked++; if ((GLeeFuncPtr_glNormal3hvNV = (GLEEPFNGLNORMAL3HVNVPROC) __GLeeGetProcAddress("glNormal3hvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glColor3hNV = (GLEEPFNGLCOLOR3HNVPROC) __GLeeGetProcAddress("glColor3hNV"))!=0) nLinked++; if ((GLeeFuncPtr_glColor3hvNV = (GLEEPFNGLCOLOR3HVNVPROC) __GLeeGetProcAddress("glColor3hvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glColor4hNV = (GLEEPFNGLCOLOR4HNVPROC) __GLeeGetProcAddress("glColor4hNV"))!=0) nLinked++; if ((GLeeFuncPtr_glColor4hvNV = (GLEEPFNGLCOLOR4HVNVPROC) __GLeeGetProcAddress("glColor4hvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoord1hNV = (GLEEPFNGLTEXCOORD1HNVPROC) __GLeeGetProcAddress("glTexCoord1hNV"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoord1hvNV = (GLEEPFNGLTEXCOORD1HVNVPROC) __GLeeGetProcAddress("glTexCoord1hvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoord2hNV = (GLEEPFNGLTEXCOORD2HNVPROC) __GLeeGetProcAddress("glTexCoord2hNV"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoord2hvNV = (GLEEPFNGLTEXCOORD2HVNVPROC) __GLeeGetProcAddress("glTexCoord2hvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoord3hNV = (GLEEPFNGLTEXCOORD3HNVPROC) __GLeeGetProcAddress("glTexCoord3hNV"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoord3hvNV = (GLEEPFNGLTEXCOORD3HVNVPROC) __GLeeGetProcAddress("glTexCoord3hvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoord4hNV = (GLEEPFNGLTEXCOORD4HNVPROC) __GLeeGetProcAddress("glTexCoord4hNV"))!=0) nLinked++; if ((GLeeFuncPtr_glTexCoord4hvNV = (GLEEPFNGLTEXCOORD4HVNVPROC) __GLeeGetProcAddress("glTexCoord4hvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord1hNV = (GLEEPFNGLMULTITEXCOORD1HNVPROC) __GLeeGetProcAddress("glMultiTexCoord1hNV"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord1hvNV = (GLEEPFNGLMULTITEXCOORD1HVNVPROC) __GLeeGetProcAddress("glMultiTexCoord1hvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord2hNV = (GLEEPFNGLMULTITEXCOORD2HNVPROC) __GLeeGetProcAddress("glMultiTexCoord2hNV"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord2hvNV = (GLEEPFNGLMULTITEXCOORD2HVNVPROC) __GLeeGetProcAddress("glMultiTexCoord2hvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord3hNV = (GLEEPFNGLMULTITEXCOORD3HNVPROC) __GLeeGetProcAddress("glMultiTexCoord3hNV"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord3hvNV = (GLEEPFNGLMULTITEXCOORD3HVNVPROC) __GLeeGetProcAddress("glMultiTexCoord3hvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord4hNV = (GLEEPFNGLMULTITEXCOORD4HNVPROC) __GLeeGetProcAddress("glMultiTexCoord4hNV"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoord4hvNV = (GLEEPFNGLMULTITEXCOORD4HVNVPROC) __GLeeGetProcAddress("glMultiTexCoord4hvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glFogCoordhNV = (GLEEPFNGLFOGCOORDHNVPROC) __GLeeGetProcAddress("glFogCoordhNV"))!=0) nLinked++; if ((GLeeFuncPtr_glFogCoordhvNV = (GLEEPFNGLFOGCOORDHVNVPROC) __GLeeGetProcAddress("glFogCoordhvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColor3hNV = (GLEEPFNGLSECONDARYCOLOR3HNVPROC) __GLeeGetProcAddress("glSecondaryColor3hNV"))!=0) nLinked++; if ((GLeeFuncPtr_glSecondaryColor3hvNV = (GLEEPFNGLSECONDARYCOLOR3HVNVPROC) __GLeeGetProcAddress("glSecondaryColor3hvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexWeighthNV = (GLEEPFNGLVERTEXWEIGHTHNVPROC) __GLeeGetProcAddress("glVertexWeighthNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexWeighthvNV = (GLEEPFNGLVERTEXWEIGHTHVNVPROC) __GLeeGetProcAddress("glVertexWeighthvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib1hNV = (GLEEPFNGLVERTEXATTRIB1HNVPROC) __GLeeGetProcAddress("glVertexAttrib1hNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib1hvNV = (GLEEPFNGLVERTEXATTRIB1HVNVPROC) __GLeeGetProcAddress("glVertexAttrib1hvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib2hNV = (GLEEPFNGLVERTEXATTRIB2HNVPROC) __GLeeGetProcAddress("glVertexAttrib2hNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib2hvNV = (GLEEPFNGLVERTEXATTRIB2HVNVPROC) __GLeeGetProcAddress("glVertexAttrib2hvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib3hNV = (GLEEPFNGLVERTEXATTRIB3HNVPROC) __GLeeGetProcAddress("glVertexAttrib3hNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib3hvNV = (GLEEPFNGLVERTEXATTRIB3HVNVPROC) __GLeeGetProcAddress("glVertexAttrib3hvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4hNV = (GLEEPFNGLVERTEXATTRIB4HNVPROC) __GLeeGetProcAddress("glVertexAttrib4hNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttrib4hvNV = (GLEEPFNGLVERTEXATTRIB4HVNVPROC) __GLeeGetProcAddress("glVertexAttrib4hvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribs1hvNV = (GLEEPFNGLVERTEXATTRIBS1HVNVPROC) __GLeeGetProcAddress("glVertexAttribs1hvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribs2hvNV = (GLEEPFNGLVERTEXATTRIBS2HVNVPROC) __GLeeGetProcAddress("glVertexAttribs2hvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribs3hvNV = (GLEEPFNGLVERTEXATTRIBS3HVNVPROC) __GLeeGetProcAddress("glVertexAttribs3hvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribs4hvNV = (GLEEPFNGLVERTEXATTRIBS4HVNVPROC) __GLeeGetProcAddress("glVertexAttribs4hvNV"))!=0) nLinked++; #endif if (nLinked==46) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_NV_pixel_data_range(void) { GLint nLinked=0; #ifdef __GLEE_GL_NV_pixel_data_range if ((GLeeFuncPtr_glPixelDataRangeNV = (GLEEPFNGLPIXELDATARANGENVPROC) __GLeeGetProcAddress("glPixelDataRangeNV"))!=0) nLinked++; if ((GLeeFuncPtr_glFlushPixelDataRangeNV = (GLEEPFNGLFLUSHPIXELDATARANGENVPROC) __GLeeGetProcAddress("glFlushPixelDataRangeNV"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_NV_primitive_restart(void) { GLint nLinked=0; #ifdef __GLEE_GL_NV_primitive_restart if ((GLeeFuncPtr_glPrimitiveRestartNV = (GLEEPFNGLPRIMITIVERESTARTNVPROC) __GLeeGetProcAddress("glPrimitiveRestartNV"))!=0) nLinked++; if ((GLeeFuncPtr_glPrimitiveRestartIndexNV = (GLEEPFNGLPRIMITIVERESTARTINDEXNVPROC) __GLeeGetProcAddress("glPrimitiveRestartIndexNV"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_NV_texture_expand_normal(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_NV_vertex_program2(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_ATI_map_object_buffer(void) { GLint nLinked=0; #ifdef __GLEE_GL_ATI_map_object_buffer if ((GLeeFuncPtr_glMapObjectBufferATI = (GLEEPFNGLMAPOBJECTBUFFERATIPROC) __GLeeGetProcAddress("glMapObjectBufferATI"))!=0) nLinked++; if ((GLeeFuncPtr_glUnmapObjectBufferATI = (GLEEPFNGLUNMAPOBJECTBUFFERATIPROC) __GLeeGetProcAddress("glUnmapObjectBufferATI"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ATI_separate_stencil(void) { GLint nLinked=0; #ifdef __GLEE_GL_ATI_separate_stencil if ((GLeeFuncPtr_glStencilOpSeparateATI = (GLEEPFNGLSTENCILOPSEPARATEATIPROC) __GLeeGetProcAddress("glStencilOpSeparateATI"))!=0) nLinked++; if ((GLeeFuncPtr_glStencilFuncSeparateATI = (GLEEPFNGLSTENCILFUNCSEPARATEATIPROC) __GLeeGetProcAddress("glStencilFuncSeparateATI"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_ATI_vertex_attrib_array_object(void) { GLint nLinked=0; #ifdef __GLEE_GL_ATI_vertex_attrib_array_object if ((GLeeFuncPtr_glVertexAttribArrayObjectATI = (GLEEPFNGLVERTEXATTRIBARRAYOBJECTATIPROC) __GLeeGetProcAddress("glVertexAttribArrayObjectATI"))!=0) nLinked++; if ((GLeeFuncPtr_glGetVertexAttribArrayObjectfvATI = (GLEEPFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC) __GLeeGetProcAddress("glGetVertexAttribArrayObjectfvATI"))!=0) nLinked++; if ((GLeeFuncPtr_glGetVertexAttribArrayObjectivATI = (GLEEPFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC) __GLeeGetProcAddress("glGetVertexAttribArrayObjectivATI"))!=0) nLinked++; #endif if (nLinked==3) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_OES_read_format(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_depth_bounds_test(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_depth_bounds_test if ((GLeeFuncPtr_glDepthBoundsEXT = (GLEEPFNGLDEPTHBOUNDSEXTPROC) __GLeeGetProcAddress("glDepthBoundsEXT"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_texture_mirror_clamp(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_blend_equation_separate(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_blend_equation_separate if ((GLeeFuncPtr_glBlendEquationSeparateEXT = (GLEEPFNGLBLENDEQUATIONSEPARATEEXTPROC) __GLeeGetProcAddress("glBlendEquationSeparateEXT"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_MESA_pack_invert(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_MESA_ycbcr_texture(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_pixel_buffer_object(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_NV_fragment_program_option(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_NV_fragment_program2(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_NV_vertex_program2_option(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_NV_vertex_program3(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_framebuffer_object(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_framebuffer_object if ((GLeeFuncPtr_glIsRenderbufferEXT = (GLEEPFNGLISRENDERBUFFEREXTPROC) __GLeeGetProcAddress("glIsRenderbufferEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glBindRenderbufferEXT = (GLEEPFNGLBINDRENDERBUFFEREXTPROC) __GLeeGetProcAddress("glBindRenderbufferEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glDeleteRenderbuffersEXT = (GLEEPFNGLDELETERENDERBUFFERSEXTPROC) __GLeeGetProcAddress("glDeleteRenderbuffersEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGenRenderbuffersEXT = (GLEEPFNGLGENRENDERBUFFERSEXTPROC) __GLeeGetProcAddress("glGenRenderbuffersEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glRenderbufferStorageEXT = (GLEEPFNGLRENDERBUFFERSTORAGEEXTPROC) __GLeeGetProcAddress("glRenderbufferStorageEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetRenderbufferParameterivEXT = (GLEEPFNGLGETRENDERBUFFERPARAMETERIVEXTPROC) __GLeeGetProcAddress("glGetRenderbufferParameterivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glIsFramebufferEXT = (GLEEPFNGLISFRAMEBUFFEREXTPROC) __GLeeGetProcAddress("glIsFramebufferEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glBindFramebufferEXT = (GLEEPFNGLBINDFRAMEBUFFEREXTPROC) __GLeeGetProcAddress("glBindFramebufferEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glDeleteFramebuffersEXT = (GLEEPFNGLDELETEFRAMEBUFFERSEXTPROC) __GLeeGetProcAddress("glDeleteFramebuffersEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGenFramebuffersEXT = (GLEEPFNGLGENFRAMEBUFFERSEXTPROC) __GLeeGetProcAddress("glGenFramebuffersEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glCheckFramebufferStatusEXT = (GLEEPFNGLCHECKFRAMEBUFFERSTATUSEXTPROC) __GLeeGetProcAddress("glCheckFramebufferStatusEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glFramebufferTexture1DEXT = (GLEEPFNGLFRAMEBUFFERTEXTURE1DEXTPROC) __GLeeGetProcAddress("glFramebufferTexture1DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glFramebufferTexture2DEXT = (GLEEPFNGLFRAMEBUFFERTEXTURE2DEXTPROC) __GLeeGetProcAddress("glFramebufferTexture2DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glFramebufferTexture3DEXT = (GLEEPFNGLFRAMEBUFFERTEXTURE3DEXTPROC) __GLeeGetProcAddress("glFramebufferTexture3DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glFramebufferRenderbufferEXT = (GLEEPFNGLFRAMEBUFFERRENDERBUFFEREXTPROC) __GLeeGetProcAddress("glFramebufferRenderbufferEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetFramebufferAttachmentParameterivEXT = (GLEEPFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) __GLeeGetProcAddress("glGetFramebufferAttachmentParameterivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGenerateMipmapEXT = (GLEEPFNGLGENERATEMIPMAPEXTPROC) __GLeeGetProcAddress("glGenerateMipmapEXT"))!=0) nLinked++; #endif if (nLinked==17) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_GREMEDY_string_marker(void) { GLint nLinked=0; #ifdef __GLEE_GL_GREMEDY_string_marker if ((GLeeFuncPtr_glStringMarkerGREMEDY = (GLEEPFNGLSTRINGMARKERGREMEDYPROC) __GLeeGetProcAddress("glStringMarkerGREMEDY"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_packed_depth_stencil(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_stencil_clear_tag(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_stencil_clear_tag if ((GLeeFuncPtr_glStencilClearTagEXT = (GLEEPFNGLSTENCILCLEARTAGEXTPROC) __GLeeGetProcAddress("glStencilClearTagEXT"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_texture_sRGB(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_framebuffer_blit(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_framebuffer_blit if ((GLeeFuncPtr_glBlitFramebufferEXT = (GLEEPFNGLBLITFRAMEBUFFEREXTPROC) __GLeeGetProcAddress("glBlitFramebufferEXT"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_framebuffer_multisample(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_framebuffer_multisample if ((GLeeFuncPtr_glRenderbufferStorageMultisampleEXT = (GLEEPFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) __GLeeGetProcAddress("glRenderbufferStorageMultisampleEXT"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_MESAX_texture_stack(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_timer_query(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_timer_query if ((GLeeFuncPtr_glGetQueryObjecti64vEXT = (GLEEPFNGLGETQUERYOBJECTI64VEXTPROC) __GLeeGetProcAddress("glGetQueryObjecti64vEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetQueryObjectui64vEXT = (GLEEPFNGLGETQUERYOBJECTUI64VEXTPROC) __GLeeGetProcAddress("glGetQueryObjectui64vEXT"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_gpu_program_parameters(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_gpu_program_parameters if ((GLeeFuncPtr_glProgramEnvParameters4fvEXT = (GLEEPFNGLPROGRAMENVPARAMETERS4FVEXTPROC) __GLeeGetProcAddress("glProgramEnvParameters4fvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramLocalParameters4fvEXT = (GLEEPFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC) __GLeeGetProcAddress("glProgramLocalParameters4fvEXT"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_APPLE_flush_buffer_range(void) { GLint nLinked=0; #ifdef __GLEE_GL_APPLE_flush_buffer_range if ((GLeeFuncPtr_glBufferParameteriAPPLE = (GLEEPFNGLBUFFERPARAMETERIAPPLEPROC) __GLeeGetProcAddress("glBufferParameteriAPPLE"))!=0) nLinked++; if ((GLeeFuncPtr_glFlushMappedBufferRangeAPPLE = (GLEEPFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC) __GLeeGetProcAddress("glFlushMappedBufferRangeAPPLE"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_gpu_shader4(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_gpu_shader4 if ((GLeeFuncPtr_glGetUniformuivEXT = (GLEEPFNGLGETUNIFORMUIVEXTPROC) __GLeeGetProcAddress("glGetUniformuivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glBindFragDataLocationEXT = (GLEEPFNGLBINDFRAGDATALOCATIONEXTPROC) __GLeeGetProcAddress("glBindFragDataLocationEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetFragDataLocationEXT = (GLEEPFNGLGETFRAGDATALOCATIONEXTPROC) __GLeeGetProcAddress("glGetFragDataLocationEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform1uiEXT = (GLEEPFNGLUNIFORM1UIEXTPROC) __GLeeGetProcAddress("glUniform1uiEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform2uiEXT = (GLEEPFNGLUNIFORM2UIEXTPROC) __GLeeGetProcAddress("glUniform2uiEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform3uiEXT = (GLEEPFNGLUNIFORM3UIEXTPROC) __GLeeGetProcAddress("glUniform3uiEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform4uiEXT = (GLEEPFNGLUNIFORM4UIEXTPROC) __GLeeGetProcAddress("glUniform4uiEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform1uivEXT = (GLEEPFNGLUNIFORM1UIVEXTPROC) __GLeeGetProcAddress("glUniform1uivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform2uivEXT = (GLEEPFNGLUNIFORM2UIVEXTPROC) __GLeeGetProcAddress("glUniform2uivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform3uivEXT = (GLEEPFNGLUNIFORM3UIVEXTPROC) __GLeeGetProcAddress("glUniform3uivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glUniform4uivEXT = (GLEEPFNGLUNIFORM4UIVEXTPROC) __GLeeGetProcAddress("glUniform4uivEXT"))!=0) nLinked++; #endif if (nLinked==11) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_draw_instanced(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_draw_instanced if ((GLeeFuncPtr_glDrawArraysInstancedEXT = (GLEEPFNGLDRAWARRAYSINSTANCEDEXTPROC) __GLeeGetProcAddress("glDrawArraysInstancedEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glDrawElementsInstancedEXT = (GLEEPFNGLDRAWELEMENTSINSTANCEDEXTPROC) __GLeeGetProcAddress("glDrawElementsInstancedEXT"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_packed_float(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_texture_array(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_texture_buffer_object(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_texture_buffer_object if ((GLeeFuncPtr_glTexBufferEXT = (GLEEPFNGLTEXBUFFEREXTPROC) __GLeeGetProcAddress("glTexBufferEXT"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_texture_compression_latc(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_texture_compression_rgtc(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_texture_shared_exponent(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_NV_depth_buffer_float(void) { GLint nLinked=0; #ifdef __GLEE_GL_NV_depth_buffer_float if ((GLeeFuncPtr_glDepthRangedNV = (GLEEPFNGLDEPTHRANGEDNVPROC) __GLeeGetProcAddress("glDepthRangedNV"))!=0) nLinked++; if ((GLeeFuncPtr_glClearDepthdNV = (GLEEPFNGLCLEARDEPTHDNVPROC) __GLeeGetProcAddress("glClearDepthdNV"))!=0) nLinked++; if ((GLeeFuncPtr_glDepthBoundsdNV = (GLEEPFNGLDEPTHBOUNDSDNVPROC) __GLeeGetProcAddress("glDepthBoundsdNV"))!=0) nLinked++; #endif if (nLinked==3) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_NV_framebuffer_multisample_coverage(void) { GLint nLinked=0; #ifdef __GLEE_GL_NV_framebuffer_multisample_coverage if ((GLeeFuncPtr_glRenderbufferStorageMultisampleCoverageNV = (GLEEPFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC) __GLeeGetProcAddress("glRenderbufferStorageMultisampleCoverageNV"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_framebuffer_sRGB(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_NV_geometry_shader4(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_NV_parameter_buffer_object(void) { GLint nLinked=0; #ifdef __GLEE_GL_NV_parameter_buffer_object if ((GLeeFuncPtr_glProgramBufferParametersfvNV = (GLEEPFNGLPROGRAMBUFFERPARAMETERSFVNVPROC) __GLeeGetProcAddress("glProgramBufferParametersfvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramBufferParametersIivNV = (GLEEPFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC) __GLeeGetProcAddress("glProgramBufferParametersIivNV"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramBufferParametersIuivNV = (GLEEPFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC) __GLeeGetProcAddress("glProgramBufferParametersIuivNV"))!=0) nLinked++; #endif if (nLinked==3) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_draw_buffers2(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_draw_buffers2 if ((GLeeFuncPtr_glColorMaskIndexedEXT = (GLEEPFNGLCOLORMASKINDEXEDEXTPROC) __GLeeGetProcAddress("glColorMaskIndexedEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetBooleanIndexedvEXT = (GLEEPFNGLGETBOOLEANINDEXEDVEXTPROC) __GLeeGetProcAddress("glGetBooleanIndexedvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetIntegerIndexedvEXT = (GLEEPFNGLGETINTEGERINDEXEDVEXTPROC) __GLeeGetProcAddress("glGetIntegerIndexedvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glEnableIndexedEXT = (GLEEPFNGLENABLEINDEXEDEXTPROC) __GLeeGetProcAddress("glEnableIndexedEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glDisableIndexedEXT = (GLEEPFNGLDISABLEINDEXEDEXTPROC) __GLeeGetProcAddress("glDisableIndexedEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glIsEnabledIndexedEXT = (GLEEPFNGLISENABLEDINDEXEDEXTPROC) __GLeeGetProcAddress("glIsEnabledIndexedEXT"))!=0) nLinked++; #endif if (nLinked==6) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_NV_transform_feedback(void) { GLint nLinked=0; #ifdef __GLEE_GL_NV_transform_feedback if ((GLeeFuncPtr_glBeginTransformFeedbackNV = (GLEEPFNGLBEGINTRANSFORMFEEDBACKNVPROC) __GLeeGetProcAddress("glBeginTransformFeedbackNV"))!=0) nLinked++; if ((GLeeFuncPtr_glEndTransformFeedbackNV = (GLEEPFNGLENDTRANSFORMFEEDBACKNVPROC) __GLeeGetProcAddress("glEndTransformFeedbackNV"))!=0) nLinked++; if ((GLeeFuncPtr_glTransformFeedbackAttribsNV = (GLEEPFNGLTRANSFORMFEEDBACKATTRIBSNVPROC) __GLeeGetProcAddress("glTransformFeedbackAttribsNV"))!=0) nLinked++; if ((GLeeFuncPtr_glBindBufferRangeNV = (GLEEPFNGLBINDBUFFERRANGENVPROC) __GLeeGetProcAddress("glBindBufferRangeNV"))!=0) nLinked++; if ((GLeeFuncPtr_glBindBufferOffsetNV = (GLEEPFNGLBINDBUFFEROFFSETNVPROC) __GLeeGetProcAddress("glBindBufferOffsetNV"))!=0) nLinked++; if ((GLeeFuncPtr_glBindBufferBaseNV = (GLEEPFNGLBINDBUFFERBASENVPROC) __GLeeGetProcAddress("glBindBufferBaseNV"))!=0) nLinked++; if ((GLeeFuncPtr_glTransformFeedbackVaryingsNV = (GLEEPFNGLTRANSFORMFEEDBACKVARYINGSNVPROC) __GLeeGetProcAddress("glTransformFeedbackVaryingsNV"))!=0) nLinked++; if ((GLeeFuncPtr_glActiveVaryingNV = (GLEEPFNGLACTIVEVARYINGNVPROC) __GLeeGetProcAddress("glActiveVaryingNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetVaryingLocationNV = (GLEEPFNGLGETVARYINGLOCATIONNVPROC) __GLeeGetProcAddress("glGetVaryingLocationNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetActiveVaryingNV = (GLEEPFNGLGETACTIVEVARYINGNVPROC) __GLeeGetProcAddress("glGetActiveVaryingNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetTransformFeedbackVaryingNV = (GLEEPFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC) __GLeeGetProcAddress("glGetTransformFeedbackVaryingNV"))!=0) nLinked++; #endif if (nLinked==11) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_bindable_uniform(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_bindable_uniform if ((GLeeFuncPtr_glUniformBufferEXT = (GLEEPFNGLUNIFORMBUFFEREXTPROC) __GLeeGetProcAddress("glUniformBufferEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetUniformBufferSizeEXT = (GLEEPFNGLGETUNIFORMBUFFERSIZEEXTPROC) __GLeeGetProcAddress("glGetUniformBufferSizeEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetUniformOffsetEXT = (GLEEPFNGLGETUNIFORMOFFSETEXTPROC) __GLeeGetProcAddress("glGetUniformOffsetEXT"))!=0) nLinked++; #endif if (nLinked==3) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_texture_integer(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_texture_integer if ((GLeeFuncPtr_glTexParameterIivEXT = (GLEEPFNGLTEXPARAMETERIIVEXTPROC) __GLeeGetProcAddress("glTexParameterIivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glTexParameterIuivEXT = (GLEEPFNGLTEXPARAMETERIUIVEXTPROC) __GLeeGetProcAddress("glTexParameterIuivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetTexParameterIivEXT = (GLEEPFNGLGETTEXPARAMETERIIVEXTPROC) __GLeeGetProcAddress("glGetTexParameterIivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetTexParameterIuivEXT = (GLEEPFNGLGETTEXPARAMETERIUIVEXTPROC) __GLeeGetProcAddress("glGetTexParameterIuivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glClearColorIiEXT = (GLEEPFNGLCLEARCOLORIIEXTPROC) __GLeeGetProcAddress("glClearColorIiEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glClearColorIuiEXT = (GLEEPFNGLCLEARCOLORIUIEXTPROC) __GLeeGetProcAddress("glClearColorIuiEXT"))!=0) nLinked++; #endif if (nLinked==6) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_GREMEDY_frame_terminator(void) { GLint nLinked=0; #ifdef __GLEE_GL_GREMEDY_frame_terminator if ((GLeeFuncPtr_glFrameTerminatorGREMEDY = (GLEEPFNGLFRAMETERMINATORGREMEDYPROC) __GLeeGetProcAddress("glFrameTerminatorGREMEDY"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_NV_conditional_render(void) { GLint nLinked=0; #ifdef __GLEE_GL_NV_conditional_render if ((GLeeFuncPtr_glBeginConditionalRenderNV = (GLEEPFNGLBEGINCONDITIONALRENDERNVPROC) __GLeeGetProcAddress("glBeginConditionalRenderNV"))!=0) nLinked++; if ((GLeeFuncPtr_glEndConditionalRenderNV = (GLEEPFNGLENDCONDITIONALRENDERNVPROC) __GLeeGetProcAddress("glEndConditionalRenderNV"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_NV_present_video(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_transform_feedback(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_transform_feedback if ((GLeeFuncPtr_glBeginTransformFeedbackEXT = (GLEEPFNGLBEGINTRANSFORMFEEDBACKEXTPROC) __GLeeGetProcAddress("glBeginTransformFeedbackEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glEndTransformFeedbackEXT = (GLEEPFNGLENDTRANSFORMFEEDBACKEXTPROC) __GLeeGetProcAddress("glEndTransformFeedbackEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glBindBufferRangeEXT = (GLEEPFNGLBINDBUFFERRANGEEXTPROC) __GLeeGetProcAddress("glBindBufferRangeEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glBindBufferOffsetEXT = (GLEEPFNGLBINDBUFFEROFFSETEXTPROC) __GLeeGetProcAddress("glBindBufferOffsetEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glBindBufferBaseEXT = (GLEEPFNGLBINDBUFFERBASEEXTPROC) __GLeeGetProcAddress("glBindBufferBaseEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glTransformFeedbackVaryingsEXT = (GLEEPFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC) __GLeeGetProcAddress("glTransformFeedbackVaryingsEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetTransformFeedbackVaryingEXT = (GLEEPFNGLGETTRANSFORMFEEDBACKVARYINGEXTPROC) __GLeeGetProcAddress("glGetTransformFeedbackVaryingEXT"))!=0) nLinked++; #endif if (nLinked==7) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_direct_state_access(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_direct_state_access if ((GLeeFuncPtr_glClientAttribDefaultEXT = (GLEEPFNGLCLIENTATTRIBDEFAULTEXTPROC) __GLeeGetProcAddress("glClientAttribDefaultEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glPushClientAttribDefaultEXT = (GLEEPFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC) __GLeeGetProcAddress("glPushClientAttribDefaultEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMatrixLoadfEXT = (GLEEPFNGLMATRIXLOADFEXTPROC) __GLeeGetProcAddress("glMatrixLoadfEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMatrixLoaddEXT = (GLEEPFNGLMATRIXLOADDEXTPROC) __GLeeGetProcAddress("glMatrixLoaddEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMatrixMultfEXT = (GLEEPFNGLMATRIXMULTFEXTPROC) __GLeeGetProcAddress("glMatrixMultfEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMatrixMultdEXT = (GLEEPFNGLMATRIXMULTDEXTPROC) __GLeeGetProcAddress("glMatrixMultdEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMatrixLoadIdentityEXT = (GLEEPFNGLMATRIXLOADIDENTITYEXTPROC) __GLeeGetProcAddress("glMatrixLoadIdentityEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMatrixRotatefEXT = (GLEEPFNGLMATRIXROTATEFEXTPROC) __GLeeGetProcAddress("glMatrixRotatefEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMatrixRotatedEXT = (GLEEPFNGLMATRIXROTATEDEXTPROC) __GLeeGetProcAddress("glMatrixRotatedEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMatrixScalefEXT = (GLEEPFNGLMATRIXSCALEFEXTPROC) __GLeeGetProcAddress("glMatrixScalefEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMatrixScaledEXT = (GLEEPFNGLMATRIXSCALEDEXTPROC) __GLeeGetProcAddress("glMatrixScaledEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMatrixTranslatefEXT = (GLEEPFNGLMATRIXTRANSLATEFEXTPROC) __GLeeGetProcAddress("glMatrixTranslatefEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMatrixTranslatedEXT = (GLEEPFNGLMATRIXTRANSLATEDEXTPROC) __GLeeGetProcAddress("glMatrixTranslatedEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMatrixFrustumEXT = (GLEEPFNGLMATRIXFRUSTUMEXTPROC) __GLeeGetProcAddress("glMatrixFrustumEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMatrixOrthoEXT = (GLEEPFNGLMATRIXORTHOEXTPROC) __GLeeGetProcAddress("glMatrixOrthoEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMatrixPopEXT = (GLEEPFNGLMATRIXPOPEXTPROC) __GLeeGetProcAddress("glMatrixPopEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMatrixPushEXT = (GLEEPFNGLMATRIXPUSHEXTPROC) __GLeeGetProcAddress("glMatrixPushEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMatrixLoadTransposefEXT = (GLEEPFNGLMATRIXLOADTRANSPOSEFEXTPROC) __GLeeGetProcAddress("glMatrixLoadTransposefEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMatrixLoadTransposedEXT = (GLEEPFNGLMATRIXLOADTRANSPOSEDEXTPROC) __GLeeGetProcAddress("glMatrixLoadTransposedEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMatrixMultTransposefEXT = (GLEEPFNGLMATRIXMULTTRANSPOSEFEXTPROC) __GLeeGetProcAddress("glMatrixMultTransposefEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMatrixMultTransposedEXT = (GLEEPFNGLMATRIXMULTTRANSPOSEDEXTPROC) __GLeeGetProcAddress("glMatrixMultTransposedEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glTextureParameterfEXT = (GLEEPFNGLTEXTUREPARAMETERFEXTPROC) __GLeeGetProcAddress("glTextureParameterfEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glTextureParameterfvEXT = (GLEEPFNGLTEXTUREPARAMETERFVEXTPROC) __GLeeGetProcAddress("glTextureParameterfvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glTextureParameteriEXT = (GLEEPFNGLTEXTUREPARAMETERIEXTPROC) __GLeeGetProcAddress("glTextureParameteriEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glTextureParameterivEXT = (GLEEPFNGLTEXTUREPARAMETERIVEXTPROC) __GLeeGetProcAddress("glTextureParameterivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glTextureImage1DEXT = (GLEEPFNGLTEXTUREIMAGE1DEXTPROC) __GLeeGetProcAddress("glTextureImage1DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glTextureImage2DEXT = (GLEEPFNGLTEXTUREIMAGE2DEXTPROC) __GLeeGetProcAddress("glTextureImage2DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glTextureSubImage1DEXT = (GLEEPFNGLTEXTURESUBIMAGE1DEXTPROC) __GLeeGetProcAddress("glTextureSubImage1DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glTextureSubImage2DEXT = (GLEEPFNGLTEXTURESUBIMAGE2DEXTPROC) __GLeeGetProcAddress("glTextureSubImage2DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glCopyTextureImage1DEXT = (GLEEPFNGLCOPYTEXTUREIMAGE1DEXTPROC) __GLeeGetProcAddress("glCopyTextureImage1DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glCopyTextureImage2DEXT = (GLEEPFNGLCOPYTEXTUREIMAGE2DEXTPROC) __GLeeGetProcAddress("glCopyTextureImage2DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glCopyTextureSubImage1DEXT = (GLEEPFNGLCOPYTEXTURESUBIMAGE1DEXTPROC) __GLeeGetProcAddress("glCopyTextureSubImage1DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glCopyTextureSubImage2DEXT = (GLEEPFNGLCOPYTEXTURESUBIMAGE2DEXTPROC) __GLeeGetProcAddress("glCopyTextureSubImage2DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetTextureImageEXT = (GLEEPFNGLGETTEXTUREIMAGEEXTPROC) __GLeeGetProcAddress("glGetTextureImageEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetTextureParameterfvEXT = (GLEEPFNGLGETTEXTUREPARAMETERFVEXTPROC) __GLeeGetProcAddress("glGetTextureParameterfvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetTextureParameterivEXT = (GLEEPFNGLGETTEXTUREPARAMETERIVEXTPROC) __GLeeGetProcAddress("glGetTextureParameterivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetTextureLevelParameterfvEXT = (GLEEPFNGLGETTEXTURELEVELPARAMETERFVEXTPROC) __GLeeGetProcAddress("glGetTextureLevelParameterfvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetTextureLevelParameterivEXT = (GLEEPFNGLGETTEXTURELEVELPARAMETERIVEXTPROC) __GLeeGetProcAddress("glGetTextureLevelParameterivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glTextureImage3DEXT = (GLEEPFNGLTEXTUREIMAGE3DEXTPROC) __GLeeGetProcAddress("glTextureImage3DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glTextureSubImage3DEXT = (GLEEPFNGLTEXTURESUBIMAGE3DEXTPROC) __GLeeGetProcAddress("glTextureSubImage3DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glCopyTextureSubImage3DEXT = (GLEEPFNGLCOPYTEXTURESUBIMAGE3DEXTPROC) __GLeeGetProcAddress("glCopyTextureSubImage3DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexParameterfEXT = (GLEEPFNGLMULTITEXPARAMETERFEXTPROC) __GLeeGetProcAddress("glMultiTexParameterfEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexParameterfvEXT = (GLEEPFNGLMULTITEXPARAMETERFVEXTPROC) __GLeeGetProcAddress("glMultiTexParameterfvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexParameteriEXT = (GLEEPFNGLMULTITEXPARAMETERIEXTPROC) __GLeeGetProcAddress("glMultiTexParameteriEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexParameterivEXT = (GLEEPFNGLMULTITEXPARAMETERIVEXTPROC) __GLeeGetProcAddress("glMultiTexParameterivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexImage1DEXT = (GLEEPFNGLMULTITEXIMAGE1DEXTPROC) __GLeeGetProcAddress("glMultiTexImage1DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexImage2DEXT = (GLEEPFNGLMULTITEXIMAGE2DEXTPROC) __GLeeGetProcAddress("glMultiTexImage2DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexSubImage1DEXT = (GLEEPFNGLMULTITEXSUBIMAGE1DEXTPROC) __GLeeGetProcAddress("glMultiTexSubImage1DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexSubImage2DEXT = (GLEEPFNGLMULTITEXSUBIMAGE2DEXTPROC) __GLeeGetProcAddress("glMultiTexSubImage2DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glCopyMultiTexImage1DEXT = (GLEEPFNGLCOPYMULTITEXIMAGE1DEXTPROC) __GLeeGetProcAddress("glCopyMultiTexImage1DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glCopyMultiTexImage2DEXT = (GLEEPFNGLCOPYMULTITEXIMAGE2DEXTPROC) __GLeeGetProcAddress("glCopyMultiTexImage2DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glCopyMultiTexSubImage1DEXT = (GLEEPFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC) __GLeeGetProcAddress("glCopyMultiTexSubImage1DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glCopyMultiTexSubImage2DEXT = (GLEEPFNGLCOPYMULTITEXSUBIMAGE2DEXTPROC) __GLeeGetProcAddress("glCopyMultiTexSubImage2DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetMultiTexImageEXT = (GLEEPFNGLGETMULTITEXIMAGEEXTPROC) __GLeeGetProcAddress("glGetMultiTexImageEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetMultiTexParameterfvEXT = (GLEEPFNGLGETMULTITEXPARAMETERFVEXTPROC) __GLeeGetProcAddress("glGetMultiTexParameterfvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetMultiTexParameterivEXT = (GLEEPFNGLGETMULTITEXPARAMETERIVEXTPROC) __GLeeGetProcAddress("glGetMultiTexParameterivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetMultiTexLevelParameterfvEXT = (GLEEPFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC) __GLeeGetProcAddress("glGetMultiTexLevelParameterfvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetMultiTexLevelParameterivEXT = (GLEEPFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC) __GLeeGetProcAddress("glGetMultiTexLevelParameterivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexImage3DEXT = (GLEEPFNGLMULTITEXIMAGE3DEXTPROC) __GLeeGetProcAddress("glMultiTexImage3DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexSubImage3DEXT = (GLEEPFNGLMULTITEXSUBIMAGE3DEXTPROC) __GLeeGetProcAddress("glMultiTexSubImage3DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glCopyMultiTexSubImage3DEXT = (GLEEPFNGLCOPYMULTITEXSUBIMAGE3DEXTPROC) __GLeeGetProcAddress("glCopyMultiTexSubImage3DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glBindMultiTextureEXT = (GLEEPFNGLBINDMULTITEXTUREEXTPROC) __GLeeGetProcAddress("glBindMultiTextureEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glEnableClientStateIndexedEXT = (GLEEPFNGLENABLECLIENTSTATEINDEXEDEXTPROC) __GLeeGetProcAddress("glEnableClientStateIndexedEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glDisableClientStateIndexedEXT = (GLEEPFNGLDISABLECLIENTSTATEINDEXEDEXTPROC) __GLeeGetProcAddress("glDisableClientStateIndexedEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexCoordPointerEXT = (GLEEPFNGLMULTITEXCOORDPOINTEREXTPROC) __GLeeGetProcAddress("glMultiTexCoordPointerEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexEnvfEXT = (GLEEPFNGLMULTITEXENVFEXTPROC) __GLeeGetProcAddress("glMultiTexEnvfEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexEnvfvEXT = (GLEEPFNGLMULTITEXENVFVEXTPROC) __GLeeGetProcAddress("glMultiTexEnvfvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexEnviEXT = (GLEEPFNGLMULTITEXENVIEXTPROC) __GLeeGetProcAddress("glMultiTexEnviEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexEnvivEXT = (GLEEPFNGLMULTITEXENVIVEXTPROC) __GLeeGetProcAddress("glMultiTexEnvivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexGendEXT = (GLEEPFNGLMULTITEXGENDEXTPROC) __GLeeGetProcAddress("glMultiTexGendEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexGendvEXT = (GLEEPFNGLMULTITEXGENDVEXTPROC) __GLeeGetProcAddress("glMultiTexGendvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexGenfEXT = (GLEEPFNGLMULTITEXGENFEXTPROC) __GLeeGetProcAddress("glMultiTexGenfEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexGenfvEXT = (GLEEPFNGLMULTITEXGENFVEXTPROC) __GLeeGetProcAddress("glMultiTexGenfvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexGeniEXT = (GLEEPFNGLMULTITEXGENIEXTPROC) __GLeeGetProcAddress("glMultiTexGeniEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexGenivEXT = (GLEEPFNGLMULTITEXGENIVEXTPROC) __GLeeGetProcAddress("glMultiTexGenivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetMultiTexEnvfvEXT = (GLEEPFNGLGETMULTITEXENVFVEXTPROC) __GLeeGetProcAddress("glGetMultiTexEnvfvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetMultiTexEnvivEXT = (GLEEPFNGLGETMULTITEXENVIVEXTPROC) __GLeeGetProcAddress("glGetMultiTexEnvivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetMultiTexGendvEXT = (GLEEPFNGLGETMULTITEXGENDVEXTPROC) __GLeeGetProcAddress("glGetMultiTexGendvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetMultiTexGenfvEXT = (GLEEPFNGLGETMULTITEXGENFVEXTPROC) __GLeeGetProcAddress("glGetMultiTexGenfvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetMultiTexGenivEXT = (GLEEPFNGLGETMULTITEXGENIVEXTPROC) __GLeeGetProcAddress("glGetMultiTexGenivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetFloatIndexedvEXT = (GLEEPFNGLGETFLOATINDEXEDVEXTPROC) __GLeeGetProcAddress("glGetFloatIndexedvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetDoubleIndexedvEXT = (GLEEPFNGLGETDOUBLEINDEXEDVEXTPROC) __GLeeGetProcAddress("glGetDoubleIndexedvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetPointerIndexedvEXT = (GLEEPFNGLGETPOINTERINDEXEDVEXTPROC) __GLeeGetProcAddress("glGetPointerIndexedvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glCompressedTextureImage3DEXT = (GLEEPFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC) __GLeeGetProcAddress("glCompressedTextureImage3DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glCompressedTextureImage2DEXT = (GLEEPFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC) __GLeeGetProcAddress("glCompressedTextureImage2DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glCompressedTextureImage1DEXT = (GLEEPFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC) __GLeeGetProcAddress("glCompressedTextureImage1DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glCompressedTextureSubImage3DEXT = (GLEEPFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC) __GLeeGetProcAddress("glCompressedTextureSubImage3DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glCompressedTextureSubImage2DEXT = (GLEEPFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC) __GLeeGetProcAddress("glCompressedTextureSubImage2DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glCompressedTextureSubImage1DEXT = (GLEEPFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC) __GLeeGetProcAddress("glCompressedTextureSubImage1DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetCompressedTextureImageEXT = (GLEEPFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC) __GLeeGetProcAddress("glGetCompressedTextureImageEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glCompressedMultiTexImage3DEXT = (GLEEPFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC) __GLeeGetProcAddress("glCompressedMultiTexImage3DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glCompressedMultiTexImage2DEXT = (GLEEPFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC) __GLeeGetProcAddress("glCompressedMultiTexImage2DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glCompressedMultiTexImage1DEXT = (GLEEPFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC) __GLeeGetProcAddress("glCompressedMultiTexImage1DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glCompressedMultiTexSubImage3DEXT = (GLEEPFNGLCOMPRESSEDMULTITEXSUBIMAGE3DEXTPROC) __GLeeGetProcAddress("glCompressedMultiTexSubImage3DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glCompressedMultiTexSubImage2DEXT = (GLEEPFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC) __GLeeGetProcAddress("glCompressedMultiTexSubImage2DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glCompressedMultiTexSubImage1DEXT = (GLEEPFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC) __GLeeGetProcAddress("glCompressedMultiTexSubImage1DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetCompressedMultiTexImageEXT = (GLEEPFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC) __GLeeGetProcAddress("glGetCompressedMultiTexImageEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glNamedProgramStringEXT = (GLEEPFNGLNAMEDPROGRAMSTRINGEXTPROC) __GLeeGetProcAddress("glNamedProgramStringEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glNamedProgramLocalParameter4dEXT = (GLEEPFNGLNAMEDPROGRAMLOCALPARAMETER4DEXTPROC) __GLeeGetProcAddress("glNamedProgramLocalParameter4dEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glNamedProgramLocalParameter4dvEXT = (GLEEPFNGLNAMEDPROGRAMLOCALPARAMETER4DVEXTPROC) __GLeeGetProcAddress("glNamedProgramLocalParameter4dvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glNamedProgramLocalParameter4fEXT = (GLEEPFNGLNAMEDPROGRAMLOCALPARAMETER4FEXTPROC) __GLeeGetProcAddress("glNamedProgramLocalParameter4fEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glNamedProgramLocalParameter4fvEXT = (GLEEPFNGLNAMEDPROGRAMLOCALPARAMETER4FVEXTPROC) __GLeeGetProcAddress("glNamedProgramLocalParameter4fvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetNamedProgramLocalParameterdvEXT = (GLEEPFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC) __GLeeGetProcAddress("glGetNamedProgramLocalParameterdvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetNamedProgramLocalParameterfvEXT = (GLEEPFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC) __GLeeGetProcAddress("glGetNamedProgramLocalParameterfvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetNamedProgramivEXT = (GLEEPFNGLGETNAMEDPROGRAMIVEXTPROC) __GLeeGetProcAddress("glGetNamedProgramivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetNamedProgramStringEXT = (GLEEPFNGLGETNAMEDPROGRAMSTRINGEXTPROC) __GLeeGetProcAddress("glGetNamedProgramStringEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glNamedProgramLocalParameters4fvEXT = (GLEEPFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC) __GLeeGetProcAddress("glNamedProgramLocalParameters4fvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glNamedProgramLocalParameterI4iEXT = (GLEEPFNGLNAMEDPROGRAMLOCALPARAMETERI4IEXTPROC) __GLeeGetProcAddress("glNamedProgramLocalParameterI4iEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glNamedProgramLocalParameterI4ivEXT = (GLEEPFNGLNAMEDPROGRAMLOCALPARAMETERI4IVEXTPROC) __GLeeGetProcAddress("glNamedProgramLocalParameterI4ivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glNamedProgramLocalParametersI4ivEXT = (GLEEPFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC) __GLeeGetProcAddress("glNamedProgramLocalParametersI4ivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glNamedProgramLocalParameterI4uiEXT = (GLEEPFNGLNAMEDPROGRAMLOCALPARAMETERI4UIEXTPROC) __GLeeGetProcAddress("glNamedProgramLocalParameterI4uiEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glNamedProgramLocalParameterI4uivEXT = (GLEEPFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC) __GLeeGetProcAddress("glNamedProgramLocalParameterI4uivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glNamedProgramLocalParametersI4uivEXT = (GLEEPFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC) __GLeeGetProcAddress("glNamedProgramLocalParametersI4uivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetNamedProgramLocalParameterIivEXT = (GLEEPFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC) __GLeeGetProcAddress("glGetNamedProgramLocalParameterIivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetNamedProgramLocalParameterIuivEXT = (GLEEPFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC) __GLeeGetProcAddress("glGetNamedProgramLocalParameterIuivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glTextureParameterIivEXT = (GLEEPFNGLTEXTUREPARAMETERIIVEXTPROC) __GLeeGetProcAddress("glTextureParameterIivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glTextureParameterIuivEXT = (GLEEPFNGLTEXTUREPARAMETERIUIVEXTPROC) __GLeeGetProcAddress("glTextureParameterIuivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetTextureParameterIivEXT = (GLEEPFNGLGETTEXTUREPARAMETERIIVEXTPROC) __GLeeGetProcAddress("glGetTextureParameterIivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetTextureParameterIuivEXT = (GLEEPFNGLGETTEXTUREPARAMETERIUIVEXTPROC) __GLeeGetProcAddress("glGetTextureParameterIuivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexParameterIivEXT = (GLEEPFNGLMULTITEXPARAMETERIIVEXTPROC) __GLeeGetProcAddress("glMultiTexParameterIivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexParameterIuivEXT = (GLEEPFNGLMULTITEXPARAMETERIUIVEXTPROC) __GLeeGetProcAddress("glMultiTexParameterIuivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetMultiTexParameterIivEXT = (GLEEPFNGLGETMULTITEXPARAMETERIIVEXTPROC) __GLeeGetProcAddress("glGetMultiTexParameterIivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetMultiTexParameterIuivEXT = (GLEEPFNGLGETMULTITEXPARAMETERIUIVEXTPROC) __GLeeGetProcAddress("glGetMultiTexParameterIuivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform1fEXT = (GLEEPFNGLPROGRAMUNIFORM1FEXTPROC) __GLeeGetProcAddress("glProgramUniform1fEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform2fEXT = (GLEEPFNGLPROGRAMUNIFORM2FEXTPROC) __GLeeGetProcAddress("glProgramUniform2fEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform3fEXT = (GLEEPFNGLPROGRAMUNIFORM3FEXTPROC) __GLeeGetProcAddress("glProgramUniform3fEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform4fEXT = (GLEEPFNGLPROGRAMUNIFORM4FEXTPROC) __GLeeGetProcAddress("glProgramUniform4fEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform1iEXT = (GLEEPFNGLPROGRAMUNIFORM1IEXTPROC) __GLeeGetProcAddress("glProgramUniform1iEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform2iEXT = (GLEEPFNGLPROGRAMUNIFORM2IEXTPROC) __GLeeGetProcAddress("glProgramUniform2iEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform3iEXT = (GLEEPFNGLPROGRAMUNIFORM3IEXTPROC) __GLeeGetProcAddress("glProgramUniform3iEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform4iEXT = (GLEEPFNGLPROGRAMUNIFORM4IEXTPROC) __GLeeGetProcAddress("glProgramUniform4iEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform1fvEXT = (GLEEPFNGLPROGRAMUNIFORM1FVEXTPROC) __GLeeGetProcAddress("glProgramUniform1fvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform2fvEXT = (GLEEPFNGLPROGRAMUNIFORM2FVEXTPROC) __GLeeGetProcAddress("glProgramUniform2fvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform3fvEXT = (GLEEPFNGLPROGRAMUNIFORM3FVEXTPROC) __GLeeGetProcAddress("glProgramUniform3fvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform4fvEXT = (GLEEPFNGLPROGRAMUNIFORM4FVEXTPROC) __GLeeGetProcAddress("glProgramUniform4fvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform1ivEXT = (GLEEPFNGLPROGRAMUNIFORM1IVEXTPROC) __GLeeGetProcAddress("glProgramUniform1ivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform2ivEXT = (GLEEPFNGLPROGRAMUNIFORM2IVEXTPROC) __GLeeGetProcAddress("glProgramUniform2ivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform3ivEXT = (GLEEPFNGLPROGRAMUNIFORM3IVEXTPROC) __GLeeGetProcAddress("glProgramUniform3ivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform4ivEXT = (GLEEPFNGLPROGRAMUNIFORM4IVEXTPROC) __GLeeGetProcAddress("glProgramUniform4ivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniformMatrix2fvEXT = (GLEEPFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC) __GLeeGetProcAddress("glProgramUniformMatrix2fvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniformMatrix3fvEXT = (GLEEPFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC) __GLeeGetProcAddress("glProgramUniformMatrix3fvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniformMatrix4fvEXT = (GLEEPFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC) __GLeeGetProcAddress("glProgramUniformMatrix4fvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniformMatrix2x3fvEXT = (GLEEPFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC) __GLeeGetProcAddress("glProgramUniformMatrix2x3fvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniformMatrix3x2fvEXT = (GLEEPFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC) __GLeeGetProcAddress("glProgramUniformMatrix3x2fvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniformMatrix2x4fvEXT = (GLEEPFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC) __GLeeGetProcAddress("glProgramUniformMatrix2x4fvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniformMatrix4x2fvEXT = (GLEEPFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC) __GLeeGetProcAddress("glProgramUniformMatrix4x2fvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniformMatrix3x4fvEXT = (GLEEPFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC) __GLeeGetProcAddress("glProgramUniformMatrix3x4fvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniformMatrix4x3fvEXT = (GLEEPFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC) __GLeeGetProcAddress("glProgramUniformMatrix4x3fvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform1uiEXT = (GLEEPFNGLPROGRAMUNIFORM1UIEXTPROC) __GLeeGetProcAddress("glProgramUniform1uiEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform2uiEXT = (GLEEPFNGLPROGRAMUNIFORM2UIEXTPROC) __GLeeGetProcAddress("glProgramUniform2uiEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform3uiEXT = (GLEEPFNGLPROGRAMUNIFORM3UIEXTPROC) __GLeeGetProcAddress("glProgramUniform3uiEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform4uiEXT = (GLEEPFNGLPROGRAMUNIFORM4UIEXTPROC) __GLeeGetProcAddress("glProgramUniform4uiEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform1uivEXT = (GLEEPFNGLPROGRAMUNIFORM1UIVEXTPROC) __GLeeGetProcAddress("glProgramUniform1uivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform2uivEXT = (GLEEPFNGLPROGRAMUNIFORM2UIVEXTPROC) __GLeeGetProcAddress("glProgramUniform2uivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform3uivEXT = (GLEEPFNGLPROGRAMUNIFORM3UIVEXTPROC) __GLeeGetProcAddress("glProgramUniform3uivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramUniform4uivEXT = (GLEEPFNGLPROGRAMUNIFORM4UIVEXTPROC) __GLeeGetProcAddress("glProgramUniform4uivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glNamedBufferDataEXT = (GLEEPFNGLNAMEDBUFFERDATAEXTPROC) __GLeeGetProcAddress("glNamedBufferDataEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glNamedBufferSubDataEXT = (GLEEPFNGLNAMEDBUFFERSUBDATAEXTPROC) __GLeeGetProcAddress("glNamedBufferSubDataEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMapNamedBufferEXT = (GLEEPFNGLMAPNAMEDBUFFEREXTPROC) __GLeeGetProcAddress("glMapNamedBufferEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glUnmapNamedBufferEXT = (GLEEPFNGLUNMAPNAMEDBUFFEREXTPROC) __GLeeGetProcAddress("glUnmapNamedBufferEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetNamedBufferParameterivEXT = (GLEEPFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC) __GLeeGetProcAddress("glGetNamedBufferParameterivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetNamedBufferPointervEXT = (GLEEPFNGLGETNAMEDBUFFERPOINTERVEXTPROC) __GLeeGetProcAddress("glGetNamedBufferPointervEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetNamedBufferSubDataEXT = (GLEEPFNGLGETNAMEDBUFFERSUBDATAEXTPROC) __GLeeGetProcAddress("glGetNamedBufferSubDataEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glTextureBufferEXT = (GLEEPFNGLTEXTUREBUFFEREXTPROC) __GLeeGetProcAddress("glTextureBufferEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexBufferEXT = (GLEEPFNGLMULTITEXBUFFEREXTPROC) __GLeeGetProcAddress("glMultiTexBufferEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glNamedRenderbufferStorageEXT = (GLEEPFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC) __GLeeGetProcAddress("glNamedRenderbufferStorageEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetNamedRenderbufferParameterivEXT = (GLEEPFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC) __GLeeGetProcAddress("glGetNamedRenderbufferParameterivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glCheckNamedFramebufferStatusEXT = (GLEEPFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC) __GLeeGetProcAddress("glCheckNamedFramebufferStatusEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glNamedFramebufferTexture1DEXT = (GLEEPFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC) __GLeeGetProcAddress("glNamedFramebufferTexture1DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glNamedFramebufferTexture2DEXT = (GLEEPFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC) __GLeeGetProcAddress("glNamedFramebufferTexture2DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glNamedFramebufferTexture3DEXT = (GLEEPFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC) __GLeeGetProcAddress("glNamedFramebufferTexture3DEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glNamedFramebufferRenderbufferEXT = (GLEEPFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC) __GLeeGetProcAddress("glNamedFramebufferRenderbufferEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetNamedFramebufferAttachmentParameterivEXT = (GLEEPFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) __GLeeGetProcAddress("glGetNamedFramebufferAttachmentParameterivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGenerateTextureMipmapEXT = (GLEEPFNGLGENERATETEXTUREMIPMAPEXTPROC) __GLeeGetProcAddress("glGenerateTextureMipmapEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGenerateMultiTexMipmapEXT = (GLEEPFNGLGENERATEMULTITEXMIPMAPEXTPROC) __GLeeGetProcAddress("glGenerateMultiTexMipmapEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glFramebufferDrawBufferEXT = (GLEEPFNGLFRAMEBUFFERDRAWBUFFEREXTPROC) __GLeeGetProcAddress("glFramebufferDrawBufferEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glFramebufferDrawBuffersEXT = (GLEEPFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC) __GLeeGetProcAddress("glFramebufferDrawBuffersEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glFramebufferReadBufferEXT = (GLEEPFNGLFRAMEBUFFERREADBUFFEREXTPROC) __GLeeGetProcAddress("glFramebufferReadBufferEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetFramebufferParameterivEXT = (GLEEPFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC) __GLeeGetProcAddress("glGetFramebufferParameterivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glNamedRenderbufferStorageMultisampleEXT = (GLEEPFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) __GLeeGetProcAddress("glNamedRenderbufferStorageMultisampleEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glNamedRenderbufferStorageMultisampleCoverageEXT = (GLEEPFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC) __GLeeGetProcAddress("glNamedRenderbufferStorageMultisampleCoverageEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glNamedFramebufferTextureEXT = (GLEEPFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC) __GLeeGetProcAddress("glNamedFramebufferTextureEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glNamedFramebufferTextureLayerEXT = (GLEEPFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC) __GLeeGetProcAddress("glNamedFramebufferTextureLayerEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glNamedFramebufferTextureFaceEXT = (GLEEPFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC) __GLeeGetProcAddress("glNamedFramebufferTextureFaceEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glTextureRenderbufferEXT = (GLEEPFNGLTEXTURERENDERBUFFEREXTPROC) __GLeeGetProcAddress("glTextureRenderbufferEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glMultiTexRenderbufferEXT = (GLEEPFNGLMULTITEXRENDERBUFFEREXTPROC) __GLeeGetProcAddress("glMultiTexRenderbufferEXT"))!=0) nLinked++; #endif if (nLinked==186) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_vertex_array_bgra(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_texture_swizzle(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_NV_explicit_multisample(void) { GLint nLinked=0; #ifdef __GLEE_GL_NV_explicit_multisample if ((GLeeFuncPtr_glGetMultisamplefvNV = (GLEEPFNGLGETMULTISAMPLEFVNVPROC) __GLeeGetProcAddress("glGetMultisamplefvNV"))!=0) nLinked++; if ((GLeeFuncPtr_glSampleMaskIndexedNV = (GLEEPFNGLSAMPLEMASKINDEXEDNVPROC) __GLeeGetProcAddress("glSampleMaskIndexedNV"))!=0) nLinked++; if ((GLeeFuncPtr_glTexRenderbufferNV = (GLEEPFNGLTEXRENDERBUFFERNVPROC) __GLeeGetProcAddress("glTexRenderbufferNV"))!=0) nLinked++; #endif if (nLinked==3) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_NV_transform_feedback2(void) { GLint nLinked=0; #ifdef __GLEE_GL_NV_transform_feedback2 if ((GLeeFuncPtr_glBindTransformFeedbackNV = (GLEEPFNGLBINDTRANSFORMFEEDBACKNVPROC) __GLeeGetProcAddress("glBindTransformFeedbackNV"))!=0) nLinked++; if ((GLeeFuncPtr_glDeleteTransformFeedbacksNV = (GLEEPFNGLDELETETRANSFORMFEEDBACKSNVPROC) __GLeeGetProcAddress("glDeleteTransformFeedbacksNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGenTransformFeedbacksNV = (GLEEPFNGLGENTRANSFORMFEEDBACKSNVPROC) __GLeeGetProcAddress("glGenTransformFeedbacksNV"))!=0) nLinked++; if ((GLeeFuncPtr_glIsTransformFeedbackNV = (GLEEPFNGLISTRANSFORMFEEDBACKNVPROC) __GLeeGetProcAddress("glIsTransformFeedbackNV"))!=0) nLinked++; if ((GLeeFuncPtr_glPauseTransformFeedbackNV = (GLEEPFNGLPAUSETRANSFORMFEEDBACKNVPROC) __GLeeGetProcAddress("glPauseTransformFeedbackNV"))!=0) nLinked++; if ((GLeeFuncPtr_glResumeTransformFeedbackNV = (GLEEPFNGLRESUMETRANSFORMFEEDBACKNVPROC) __GLeeGetProcAddress("glResumeTransformFeedbackNV"))!=0) nLinked++; if ((GLeeFuncPtr_glDrawTransformFeedbackNV = (GLEEPFNGLDRAWTRANSFORMFEEDBACKNVPROC) __GLeeGetProcAddress("glDrawTransformFeedbackNV"))!=0) nLinked++; #endif if (nLinked==7) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_SGIX_texture_select(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_INGR_blend_func_separate(void) { GLint nLinked=0; #ifdef __GLEE_GL_INGR_blend_func_separate if ((GLeeFuncPtr_glBlendFuncSeparateINGR = (GLEEPFNGLBLENDFUNCSEPARATEINGRPROC) __GLeeGetProcAddress("glBlendFuncSeparateINGR"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_SGIX_depth_pass_instrument(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_SGIX_igloo_interface(void) { GLint nLinked=0; #ifdef __GLEE_GL_SGIX_igloo_interface if ((GLeeFuncPtr_glIglooInterfaceSGIX = (GLEEPFNGLIGLOOINTERFACESGIXPROC) __GLeeGetProcAddress("glIglooInterfaceSGIX"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_fragment_lighting(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_fragment_lighting if ((GLeeFuncPtr_glFragmentLightModeliEXT = (GLEEPFNGLFRAGMENTLIGHTMODELIEXTPROC) __GLeeGetProcAddress("glFragmentLightModeliEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glFragmentLightModelfEXT = (GLEEPFNGLFRAGMENTLIGHTMODELFEXTPROC) __GLeeGetProcAddress("glFragmentLightModelfEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glFragmentLightModelivEXT = (GLEEPFNGLFRAGMENTLIGHTMODELIVEXTPROC) __GLeeGetProcAddress("glFragmentLightModelivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glFragmentLightModelfvEXT = (GLEEPFNGLFRAGMENTLIGHTMODELFVEXTPROC) __GLeeGetProcAddress("glFragmentLightModelfvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glFragmentLightiEXT = (GLEEPFNGLFRAGMENTLIGHTIEXTPROC) __GLeeGetProcAddress("glFragmentLightiEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glFragmentLightfEXT = (GLEEPFNGLFRAGMENTLIGHTFEXTPROC) __GLeeGetProcAddress("glFragmentLightfEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glFragmentLightivEXT = (GLEEPFNGLFRAGMENTLIGHTIVEXTPROC) __GLeeGetProcAddress("glFragmentLightivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glFragmentLightfvEXT = (GLEEPFNGLFRAGMENTLIGHTFVEXTPROC) __GLeeGetProcAddress("glFragmentLightfvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetFragmentLightivEXT = (GLEEPFNGLGETFRAGMENTLIGHTIVEXTPROC) __GLeeGetProcAddress("glGetFragmentLightivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetFragmentLightfvEXT = (GLEEPFNGLGETFRAGMENTLIGHTFVEXTPROC) __GLeeGetProcAddress("glGetFragmentLightfvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glFragmentMaterialfEXT = (GLEEPFNGLFRAGMENTMATERIALFEXTPROC) __GLeeGetProcAddress("glFragmentMaterialfEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glFragmentMaterialiEXT = (GLEEPFNGLFRAGMENTMATERIALIEXTPROC) __GLeeGetProcAddress("glFragmentMaterialiEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glFragmentMaterialfvEXT = (GLEEPFNGLFRAGMENTMATERIALFVEXTPROC) __GLeeGetProcAddress("glFragmentMaterialfvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glFragmentMaterialivEXT = (GLEEPFNGLFRAGMENTMATERIALIVEXTPROC) __GLeeGetProcAddress("glFragmentMaterialivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glFragmentColorMaterialEXT = (GLEEPFNGLFRAGMENTCOLORMATERIALEXTPROC) __GLeeGetProcAddress("glFragmentColorMaterialEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetFragmentMaterialfvEXT = (GLEEPFNGLGETFRAGMENTMATERIALFVEXTPROC) __GLeeGetProcAddress("glGetFragmentMaterialfvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetFragmentMaterialivEXT = (GLEEPFNGLGETFRAGMENTMATERIALIVEXTPROC) __GLeeGetProcAddress("glGetFragmentMaterialivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glLightEnviEXT = (GLEEPFNGLLIGHTENVIEXTPROC) __GLeeGetProcAddress("glLightEnviEXT"))!=0) nLinked++; #endif if (nLinked==18) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_geometry_shader4(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_geometry_shader4 if ((GLeeFuncPtr_glProgramParameteriEXT = (GLEEPFNGLPROGRAMPARAMETERIEXTPROC) __GLeeGetProcAddress("glProgramParameteriEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glFramebufferTextureEXT = (GLEEPFNGLFRAMEBUFFERTEXTUREEXTPROC) __GLeeGetProcAddress("glFramebufferTextureEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glFramebufferTextureLayerEXT = (GLEEPFNGLFRAMEBUFFERTEXTURELAYEREXTPROC) __GLeeGetProcAddress("glFramebufferTextureLayerEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glFramebufferTextureFaceEXT = (GLEEPFNGLFRAMEBUFFERTEXTUREFACEEXTPROC) __GLeeGetProcAddress("glFramebufferTextureFaceEXT"))!=0) nLinked++; #endif if (nLinked==4) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_scene_marker(void) { GLint nLinked=0; #ifdef __GLEE_GL_EXT_scene_marker if ((GLeeFuncPtr_glBeginSceneEXT = (GLEEPFNGLBEGINSCENEEXTPROC) __GLeeGetProcAddress("glBeginSceneEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glEndSceneEXT = (GLEEPFNGLENDSCENEEXTPROC) __GLeeGetProcAddress("glEndSceneEXT"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_EXT_texture_compression_dxt1(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_EXT_texture_env(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_IBM_static_data(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_NV_gpu_program4(void) { GLint nLinked=0; #ifdef __GLEE_GL_NV_gpu_program4 if ((GLeeFuncPtr_glProgramLocalParameterI4iNV = (GLEEPFNGLPROGRAMLOCALPARAMETERI4INVPROC) __GLeeGetProcAddress("glProgramLocalParameterI4iNV"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramLocalParameterI4ivNV = (GLEEPFNGLPROGRAMLOCALPARAMETERI4IVNVPROC) __GLeeGetProcAddress("glProgramLocalParameterI4ivNV"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramLocalParametersI4ivNV = (GLEEPFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC) __GLeeGetProcAddress("glProgramLocalParametersI4ivNV"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramLocalParameterI4uiNV = (GLEEPFNGLPROGRAMLOCALPARAMETERI4UINVPROC) __GLeeGetProcAddress("glProgramLocalParameterI4uiNV"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramLocalParameterI4uivNV = (GLEEPFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC) __GLeeGetProcAddress("glProgramLocalParameterI4uivNV"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramLocalParametersI4uivNV = (GLEEPFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC) __GLeeGetProcAddress("glProgramLocalParametersI4uivNV"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramEnvParameterI4iNV = (GLEEPFNGLPROGRAMENVPARAMETERI4INVPROC) __GLeeGetProcAddress("glProgramEnvParameterI4iNV"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramEnvParameterI4ivNV = (GLEEPFNGLPROGRAMENVPARAMETERI4IVNVPROC) __GLeeGetProcAddress("glProgramEnvParameterI4ivNV"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramEnvParametersI4ivNV = (GLEEPFNGLPROGRAMENVPARAMETERSI4IVNVPROC) __GLeeGetProcAddress("glProgramEnvParametersI4ivNV"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramEnvParameterI4uiNV = (GLEEPFNGLPROGRAMENVPARAMETERI4UINVPROC) __GLeeGetProcAddress("glProgramEnvParameterI4uiNV"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramEnvParameterI4uivNV = (GLEEPFNGLPROGRAMENVPARAMETERI4UIVNVPROC) __GLeeGetProcAddress("glProgramEnvParameterI4uivNV"))!=0) nLinked++; if ((GLeeFuncPtr_glProgramEnvParametersI4uivNV = (GLEEPFNGLPROGRAMENVPARAMETERSI4UIVNVPROC) __GLeeGetProcAddress("glProgramEnvParametersI4uivNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetProgramLocalParameterIivNV = (GLEEPFNGLGETPROGRAMLOCALPARAMETERIIVNVPROC) __GLeeGetProcAddress("glGetProgramLocalParameterIivNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetProgramLocalParameterIuivNV = (GLEEPFNGLGETPROGRAMLOCALPARAMETERIUIVNVPROC) __GLeeGetProcAddress("glGetProgramLocalParameterIuivNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetProgramEnvParameterIivNV = (GLEEPFNGLGETPROGRAMENVPARAMETERIIVNVPROC) __GLeeGetProcAddress("glGetProgramEnvParameterIivNV"))!=0) nLinked++; if ((GLeeFuncPtr_glGetProgramEnvParameterIuivNV = (GLEEPFNGLGETPROGRAMENVPARAMETERIUIVNVPROC) __GLeeGetProcAddress("glGetProgramEnvParameterIuivNV"))!=0) nLinked++; if ((GLeeFuncPtr_glFramebufferTextureEXT = (GLEEPFNGLFRAMEBUFFERTEXTUREEXTPROC) __GLeeGetProcAddress("glFramebufferTextureEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glFramebufferTextureLayerEXT = (GLEEPFNGLFRAMEBUFFERTEXTURELAYEREXTPROC) __GLeeGetProcAddress("glFramebufferTextureLayerEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glFramebufferTextureFaceEXT = (GLEEPFNGLFRAMEBUFFERTEXTUREFACEEXTPROC) __GLeeGetProcAddress("glFramebufferTextureFaceEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribI2iEXT = (GLEEPFNGLVERTEXATTRIBI2IEXTPROC) __GLeeGetProcAddress("glVertexAttribI2iEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribI3iEXT = (GLEEPFNGLVERTEXATTRIBI3IEXTPROC) __GLeeGetProcAddress("glVertexAttribI3iEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribI4iEXT = (GLEEPFNGLVERTEXATTRIBI4IEXTPROC) __GLeeGetProcAddress("glVertexAttribI4iEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribI1uiEXT = (GLEEPFNGLVERTEXATTRIBI1UIEXTPROC) __GLeeGetProcAddress("glVertexAttribI1uiEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribI2uiEXT = (GLEEPFNGLVERTEXATTRIBI2UIEXTPROC) __GLeeGetProcAddress("glVertexAttribI2uiEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribI3uiEXT = (GLEEPFNGLVERTEXATTRIBI3UIEXTPROC) __GLeeGetProcAddress("glVertexAttribI3uiEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribI4uiEXT = (GLEEPFNGLVERTEXATTRIBI4UIEXTPROC) __GLeeGetProcAddress("glVertexAttribI4uiEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribI1ivEXT = (GLEEPFNGLVERTEXATTRIBI1IVEXTPROC) __GLeeGetProcAddress("glVertexAttribI1ivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribI2ivEXT = (GLEEPFNGLVERTEXATTRIBI2IVEXTPROC) __GLeeGetProcAddress("glVertexAttribI2ivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribI3ivEXT = (GLEEPFNGLVERTEXATTRIBI3IVEXTPROC) __GLeeGetProcAddress("glVertexAttribI3ivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribI4ivEXT = (GLEEPFNGLVERTEXATTRIBI4IVEXTPROC) __GLeeGetProcAddress("glVertexAttribI4ivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribI1uivEXT = (GLEEPFNGLVERTEXATTRIBI1UIVEXTPROC) __GLeeGetProcAddress("glVertexAttribI1uivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribI2uivEXT = (GLEEPFNGLVERTEXATTRIBI2UIVEXTPROC) __GLeeGetProcAddress("glVertexAttribI2uivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribI3uivEXT = (GLEEPFNGLVERTEXATTRIBI3UIVEXTPROC) __GLeeGetProcAddress("glVertexAttribI3uivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribI4uivEXT = (GLEEPFNGLVERTEXATTRIBI4UIVEXTPROC) __GLeeGetProcAddress("glVertexAttribI4uivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribI4bvEXT = (GLEEPFNGLVERTEXATTRIBI4BVEXTPROC) __GLeeGetProcAddress("glVertexAttribI4bvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribI4svEXT = (GLEEPFNGLVERTEXATTRIBI4SVEXTPROC) __GLeeGetProcAddress("glVertexAttribI4svEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribI4ubvEXT = (GLEEPFNGLVERTEXATTRIBI4UBVEXTPROC) __GLeeGetProcAddress("glVertexAttribI4ubvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribI4usvEXT = (GLEEPFNGLVERTEXATTRIBI4USVEXTPROC) __GLeeGetProcAddress("glVertexAttribI4usvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glVertexAttribIPointerEXT = (GLEEPFNGLVERTEXATTRIBIPOINTEREXTPROC) __GLeeGetProcAddress("glVertexAttribIPointerEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetVertexAttribIivEXT = (GLEEPFNGLGETVERTEXATTRIBIIVEXTPROC) __GLeeGetProcAddress("glGetVertexAttribIivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glGetVertexAttribIuivEXT = (GLEEPFNGLGETVERTEXATTRIBIUIVEXTPROC) __GLeeGetProcAddress("glGetVertexAttribIuivEXT"))!=0) nLinked++; #endif if (nLinked==41) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_OES_byte_coordinates(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_OES_compressed_paletted_texture(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_OES_single_precision(void) { GLint nLinked=0; #ifdef __GLEE_GL_OES_single_precision if ((GLeeFuncPtr_glDepthRangefOES = (GLEEPFNGLDEPTHRANGEFOESPROC) __GLeeGetProcAddress("glDepthRangefOES"))!=0) nLinked++; if ((GLeeFuncPtr_glFrustumfOES = (GLEEPFNGLFRUSTUMFOESPROC) __GLeeGetProcAddress("glFrustumfOES"))!=0) nLinked++; if ((GLeeFuncPtr_glOrthofOES = (GLEEPFNGLORTHOFOESPROC) __GLeeGetProcAddress("glOrthofOES"))!=0) nLinked++; if ((GLeeFuncPtr_glClipPlanefOES = (GLEEPFNGLCLIPPLANEFOESPROC) __GLeeGetProcAddress("glClipPlanefOES"))!=0) nLinked++; if ((GLeeFuncPtr_glGetClipPlanefOES = (GLEEPFNGLGETCLIPPLANEFOESPROC) __GLeeGetProcAddress("glGetClipPlanefOES"))!=0) nLinked++; if ((GLeeFuncPtr_glClearDepthfOES = (GLEEPFNGLCLEARDEPTHFOESPROC) __GLeeGetProcAddress("glClearDepthfOES"))!=0) nLinked++; #endif if (nLinked==6) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GL_SGIX_pixel_texture_bits(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GL_SGIX_texture_range(void) {return GLEE_LINK_COMPLETE;} GLEE_LINK_FUNCTION __GLeeGLLoadFunction[322]; void initGLLoadFunctions(void) { __GLeeGLLoadFunction[0]=__GLeeLink_GL_VERSION_1_2; __GLeeGLLoadFunction[1]=__GLeeLink_GL_ARB_imaging; __GLeeGLLoadFunction[2]=__GLeeLink_GL_VERSION_1_3; __GLeeGLLoadFunction[3]=__GLeeLink_GL_VERSION_1_4; __GLeeGLLoadFunction[4]=__GLeeLink_GL_VERSION_1_5; __GLeeGLLoadFunction[5]=__GLeeLink_GL_VERSION_2_0; __GLeeGLLoadFunction[6]=__GLeeLink_GL_VERSION_2_1; __GLeeGLLoadFunction[7]=__GLeeLink_GL_VERSION_3_0; __GLeeGLLoadFunction[8]=__GLeeLink_GL_ARB_multitexture; __GLeeGLLoadFunction[9]=__GLeeLink_GL_ARB_transpose_matrix; __GLeeGLLoadFunction[10]=__GLeeLink_GL_ARB_multisample; __GLeeGLLoadFunction[11]=__GLeeLink_GL_ARB_texture_env_add; __GLeeGLLoadFunction[12]=__GLeeLink_GL_ARB_texture_cube_map; __GLeeGLLoadFunction[13]=__GLeeLink_GL_ARB_texture_compression; __GLeeGLLoadFunction[14]=__GLeeLink_GL_ARB_texture_border_clamp; __GLeeGLLoadFunction[15]=__GLeeLink_GL_ARB_point_parameters; __GLeeGLLoadFunction[16]=__GLeeLink_GL_ARB_vertex_blend; __GLeeGLLoadFunction[17]=__GLeeLink_GL_ARB_matrix_palette; __GLeeGLLoadFunction[18]=__GLeeLink_GL_ARB_texture_env_combine; __GLeeGLLoadFunction[19]=__GLeeLink_GL_ARB_texture_env_crossbar; __GLeeGLLoadFunction[20]=__GLeeLink_GL_ARB_texture_env_dot3; __GLeeGLLoadFunction[21]=__GLeeLink_GL_ARB_texture_mirrored_repeat; __GLeeGLLoadFunction[22]=__GLeeLink_GL_ARB_depth_texture; __GLeeGLLoadFunction[23]=__GLeeLink_GL_ARB_shadow; __GLeeGLLoadFunction[24]=__GLeeLink_GL_ARB_shadow_ambient; __GLeeGLLoadFunction[25]=__GLeeLink_GL_ARB_window_pos; __GLeeGLLoadFunction[26]=__GLeeLink_GL_ARB_vertex_program; __GLeeGLLoadFunction[27]=__GLeeLink_GL_ARB_fragment_program; __GLeeGLLoadFunction[28]=__GLeeLink_GL_ARB_vertex_buffer_object; __GLeeGLLoadFunction[29]=__GLeeLink_GL_ARB_occlusion_query; __GLeeGLLoadFunction[30]=__GLeeLink_GL_ARB_shader_objects; __GLeeGLLoadFunction[31]=__GLeeLink_GL_ARB_vertex_shader; __GLeeGLLoadFunction[32]=__GLeeLink_GL_ARB_fragment_shader; __GLeeGLLoadFunction[33]=__GLeeLink_GL_ARB_shading_language_100; __GLeeGLLoadFunction[34]=__GLeeLink_GL_ARB_texture_non_power_of_two; __GLeeGLLoadFunction[35]=__GLeeLink_GL_ARB_point_sprite; __GLeeGLLoadFunction[36]=__GLeeLink_GL_ARB_fragment_program_shadow; __GLeeGLLoadFunction[37]=__GLeeLink_GL_ARB_draw_buffers; __GLeeGLLoadFunction[38]=__GLeeLink_GL_ARB_texture_rectangle; __GLeeGLLoadFunction[39]=__GLeeLink_GL_ARB_color_buffer_float; __GLeeGLLoadFunction[40]=__GLeeLink_GL_ARB_half_float_pixel; __GLeeGLLoadFunction[41]=__GLeeLink_GL_ARB_texture_float; __GLeeGLLoadFunction[42]=__GLeeLink_GL_ARB_pixel_buffer_object; __GLeeGLLoadFunction[43]=__GLeeLink_GL_ARB_depth_buffer_float; __GLeeGLLoadFunction[44]=__GLeeLink_GL_ARB_draw_instanced; __GLeeGLLoadFunction[45]=__GLeeLink_GL_ARB_framebuffer_object; __GLeeGLLoadFunction[46]=__GLeeLink_GL_ARB_framebuffer_sRGB; __GLeeGLLoadFunction[47]=__GLeeLink_GL_ARB_geometry_shader4; __GLeeGLLoadFunction[48]=__GLeeLink_GL_ARB_half_float_vertex; __GLeeGLLoadFunction[49]=__GLeeLink_GL_ARB_instanced_arrays; __GLeeGLLoadFunction[50]=__GLeeLink_GL_ARB_map_buffer_range; __GLeeGLLoadFunction[51]=__GLeeLink_GL_ARB_texture_buffer_object; __GLeeGLLoadFunction[52]=__GLeeLink_GL_ARB_texture_compression_rgtc; __GLeeGLLoadFunction[53]=__GLeeLink_GL_ARB_texture_rg; __GLeeGLLoadFunction[54]=__GLeeLink_GL_ARB_vertex_array_object; __GLeeGLLoadFunction[55]=__GLeeLink_GL_EXT_abgr; __GLeeGLLoadFunction[56]=__GLeeLink_GL_EXT_blend_color; __GLeeGLLoadFunction[57]=__GLeeLink_GL_EXT_polygon_offset; __GLeeGLLoadFunction[58]=__GLeeLink_GL_EXT_texture; __GLeeGLLoadFunction[59]=__GLeeLink_GL_EXT_texture3D; __GLeeGLLoadFunction[60]=__GLeeLink_GL_SGIS_texture_filter4; __GLeeGLLoadFunction[61]=__GLeeLink_GL_EXT_subtexture; __GLeeGLLoadFunction[62]=__GLeeLink_GL_EXT_copy_texture; __GLeeGLLoadFunction[63]=__GLeeLink_GL_EXT_histogram; __GLeeGLLoadFunction[64]=__GLeeLink_GL_EXT_convolution; __GLeeGLLoadFunction[65]=__GLeeLink_GL_SGI_color_matrix; __GLeeGLLoadFunction[66]=__GLeeLink_GL_SGI_color_table; __GLeeGLLoadFunction[67]=__GLeeLink_GL_SGIS_pixel_texture; __GLeeGLLoadFunction[68]=__GLeeLink_GL_SGIX_pixel_texture; __GLeeGLLoadFunction[69]=__GLeeLink_GL_SGIS_texture4D; __GLeeGLLoadFunction[70]=__GLeeLink_GL_SGI_texture_color_table; __GLeeGLLoadFunction[71]=__GLeeLink_GL_EXT_cmyka; __GLeeGLLoadFunction[72]=__GLeeLink_GL_EXT_texture_object; __GLeeGLLoadFunction[73]=__GLeeLink_GL_SGIS_detail_texture; __GLeeGLLoadFunction[74]=__GLeeLink_GL_SGIS_sharpen_texture; __GLeeGLLoadFunction[75]=__GLeeLink_GL_EXT_packed_pixels; __GLeeGLLoadFunction[76]=__GLeeLink_GL_SGIS_texture_lod; __GLeeGLLoadFunction[77]=__GLeeLink_GL_SGIS_multisample; __GLeeGLLoadFunction[78]=__GLeeLink_GL_EXT_rescale_normal; __GLeeGLLoadFunction[79]=__GLeeLink_GL_EXT_vertex_array; __GLeeGLLoadFunction[80]=__GLeeLink_GL_EXT_misc_attribute; __GLeeGLLoadFunction[81]=__GLeeLink_GL_SGIS_generate_mipmap; __GLeeGLLoadFunction[82]=__GLeeLink_GL_SGIX_clipmap; __GLeeGLLoadFunction[83]=__GLeeLink_GL_SGIX_shadow; __GLeeGLLoadFunction[84]=__GLeeLink_GL_SGIS_texture_edge_clamp; __GLeeGLLoadFunction[85]=__GLeeLink_GL_SGIS_texture_border_clamp; __GLeeGLLoadFunction[86]=__GLeeLink_GL_EXT_blend_minmax; __GLeeGLLoadFunction[87]=__GLeeLink_GL_EXT_blend_subtract; __GLeeGLLoadFunction[88]=__GLeeLink_GL_EXT_blend_logic_op; __GLeeGLLoadFunction[89]=__GLeeLink_GL_SGIX_interlace; __GLeeGLLoadFunction[90]=__GLeeLink_GL_SGIX_pixel_tiles; __GLeeGLLoadFunction[91]=__GLeeLink_GL_SGIS_texture_select; __GLeeGLLoadFunction[92]=__GLeeLink_GL_SGIX_sprite; __GLeeGLLoadFunction[93]=__GLeeLink_GL_SGIX_texture_multi_buffer; __GLeeGLLoadFunction[94]=__GLeeLink_GL_EXT_point_parameters; __GLeeGLLoadFunction[95]=__GLeeLink_GL_SGIS_point_parameters; __GLeeGLLoadFunction[96]=__GLeeLink_GL_SGIX_instruments; __GLeeGLLoadFunction[97]=__GLeeLink_GL_SGIX_texture_scale_bias; __GLeeGLLoadFunction[98]=__GLeeLink_GL_SGIX_framezoom; __GLeeGLLoadFunction[99]=__GLeeLink_GL_SGIX_tag_sample_buffer; __GLeeGLLoadFunction[100]=__GLeeLink_GL_FfdMaskSGIX; __GLeeGLLoadFunction[101]=__GLeeLink_GL_SGIX_polynomial_ffd; __GLeeGLLoadFunction[102]=__GLeeLink_GL_SGIX_reference_plane; __GLeeGLLoadFunction[103]=__GLeeLink_GL_SGIX_flush_raster; __GLeeGLLoadFunction[104]=__GLeeLink_GL_SGIX_depth_texture; __GLeeGLLoadFunction[105]=__GLeeLink_GL_SGIS_fog_function; __GLeeGLLoadFunction[106]=__GLeeLink_GL_SGIX_fog_offset; __GLeeGLLoadFunction[107]=__GLeeLink_GL_HP_image_transform; __GLeeGLLoadFunction[108]=__GLeeLink_GL_HP_convolution_border_modes; __GLeeGLLoadFunction[109]=__GLeeLink_GL_INGR_palette_buffer; __GLeeGLLoadFunction[110]=__GLeeLink_GL_SGIX_texture_add_env; __GLeeGLLoadFunction[111]=__GLeeLink_GL_EXT_color_subtable; __GLeeGLLoadFunction[112]=__GLeeLink_GL_PGI_vertex_hints; __GLeeGLLoadFunction[113]=__GLeeLink_GL_PGI_misc_hints; __GLeeGLLoadFunction[114]=__GLeeLink_GL_EXT_paletted_texture; __GLeeGLLoadFunction[115]=__GLeeLink_GL_EXT_clip_volume_hint; __GLeeGLLoadFunction[116]=__GLeeLink_GL_SGIX_list_priority; __GLeeGLLoadFunction[117]=__GLeeLink_GL_SGIX_ir_instrument1; __GLeeGLLoadFunction[118]=__GLeeLink_GL_SGIX_calligraphic_fragment; __GLeeGLLoadFunction[119]=__GLeeLink_GL_SGIX_texture_lod_bias; __GLeeGLLoadFunction[120]=__GLeeLink_GL_SGIX_shadow_ambient; __GLeeGLLoadFunction[121]=__GLeeLink_GL_EXT_index_texture; __GLeeGLLoadFunction[122]=__GLeeLink_GL_EXT_index_material; __GLeeGLLoadFunction[123]=__GLeeLink_GL_EXT_index_func; __GLeeGLLoadFunction[124]=__GLeeLink_GL_EXT_index_array_formats; __GLeeGLLoadFunction[125]=__GLeeLink_GL_EXT_compiled_vertex_array; __GLeeGLLoadFunction[126]=__GLeeLink_GL_EXT_cull_vertex; __GLeeGLLoadFunction[127]=__GLeeLink_GL_SGIX_ycrcb; __GLeeGLLoadFunction[128]=__GLeeLink_GL_SGIX_fragment_lighting; __GLeeGLLoadFunction[129]=__GLeeLink_GL_IBM_rasterpos_clip; __GLeeGLLoadFunction[130]=__GLeeLink_GL_HP_texture_lighting; __GLeeGLLoadFunction[131]=__GLeeLink_GL_EXT_draw_range_elements; __GLeeGLLoadFunction[132]=__GLeeLink_GL_WIN_phong_shading; __GLeeGLLoadFunction[133]=__GLeeLink_GL_WIN_specular_fog; __GLeeGLLoadFunction[134]=__GLeeLink_GL_EXT_light_texture; __GLeeGLLoadFunction[135]=__GLeeLink_GL_SGIX_blend_alpha_minmax; __GLeeGLLoadFunction[136]=__GLeeLink_GL_SGIX_impact_pixel_texture; __GLeeGLLoadFunction[137]=__GLeeLink_GL_EXT_bgra; __GLeeGLLoadFunction[138]=__GLeeLink_GL_SGIX_async; __GLeeGLLoadFunction[139]=__GLeeLink_GL_SGIX_async_pixel; __GLeeGLLoadFunction[140]=__GLeeLink_GL_SGIX_async_histogram; __GLeeGLLoadFunction[141]=__GLeeLink_GL_INTEL_texture_scissor; __GLeeGLLoadFunction[142]=__GLeeLink_GL_INTEL_parallel_arrays; __GLeeGLLoadFunction[143]=__GLeeLink_GL_HP_occlusion_test; __GLeeGLLoadFunction[144]=__GLeeLink_GL_EXT_pixel_transform; __GLeeGLLoadFunction[145]=__GLeeLink_GL_EXT_pixel_transform_color_table; __GLeeGLLoadFunction[146]=__GLeeLink_GL_EXT_shared_texture_palette; __GLeeGLLoadFunction[147]=__GLeeLink_GL_EXT_separate_specular_color; __GLeeGLLoadFunction[148]=__GLeeLink_GL_EXT_secondary_color; __GLeeGLLoadFunction[149]=__GLeeLink_GL_EXT_texture_perturb_normal; __GLeeGLLoadFunction[150]=__GLeeLink_GL_EXT_multi_draw_arrays; __GLeeGLLoadFunction[151]=__GLeeLink_GL_EXT_fog_coord; __GLeeGLLoadFunction[152]=__GLeeLink_GL_REND_screen_coordinates; __GLeeGLLoadFunction[153]=__GLeeLink_GL_EXT_coordinate_frame; __GLeeGLLoadFunction[154]=__GLeeLink_GL_EXT_texture_env_combine; __GLeeGLLoadFunction[155]=__GLeeLink_GL_APPLE_specular_vector; __GLeeGLLoadFunction[156]=__GLeeLink_GL_APPLE_transform_hint; __GLeeGLLoadFunction[157]=__GLeeLink_GL_SGIX_fog_scale; __GLeeGLLoadFunction[158]=__GLeeLink_GL_SUNX_constant_data; __GLeeGLLoadFunction[159]=__GLeeLink_GL_SUN_global_alpha; __GLeeGLLoadFunction[160]=__GLeeLink_GL_SUN_triangle_list; __GLeeGLLoadFunction[161]=__GLeeLink_GL_SUN_vertex; __GLeeGLLoadFunction[162]=__GLeeLink_GL_EXT_blend_func_separate; __GLeeGLLoadFunction[163]=__GLeeLink_GL_INGR_color_clamp; __GLeeGLLoadFunction[164]=__GLeeLink_GL_INGR_interlace_read; __GLeeGLLoadFunction[165]=__GLeeLink_GL_EXT_stencil_wrap; __GLeeGLLoadFunction[166]=__GLeeLink_GL_EXT_422_pixels; __GLeeGLLoadFunction[167]=__GLeeLink_GL_NV_texgen_reflection; __GLeeGLLoadFunction[168]=__GLeeLink_GL_EXT_texture_cube_map; __GLeeGLLoadFunction[169]=__GLeeLink_GL_SUN_convolution_border_modes; __GLeeGLLoadFunction[170]=__GLeeLink_GL_EXT_texture_env_add; __GLeeGLLoadFunction[171]=__GLeeLink_GL_EXT_texture_lod_bias; __GLeeGLLoadFunction[172]=__GLeeLink_GL_EXT_texture_filter_anisotropic; __GLeeGLLoadFunction[173]=__GLeeLink_GL_EXT_vertex_weighting; __GLeeGLLoadFunction[174]=__GLeeLink_GL_NV_light_max_exponent; __GLeeGLLoadFunction[175]=__GLeeLink_GL_NV_vertex_array_range; __GLeeGLLoadFunction[176]=__GLeeLink_GL_NV_register_combiners; __GLeeGLLoadFunction[177]=__GLeeLink_GL_NV_fog_distance; __GLeeGLLoadFunction[178]=__GLeeLink_GL_NV_texgen_emboss; __GLeeGLLoadFunction[179]=__GLeeLink_GL_NV_blend_square; __GLeeGLLoadFunction[180]=__GLeeLink_GL_NV_texture_env_combine4; __GLeeGLLoadFunction[181]=__GLeeLink_GL_MESA_resize_buffers; __GLeeGLLoadFunction[182]=__GLeeLink_GL_MESA_window_pos; __GLeeGLLoadFunction[183]=__GLeeLink_GL_EXT_texture_compression_s3tc; __GLeeGLLoadFunction[184]=__GLeeLink_GL_IBM_cull_vertex; __GLeeGLLoadFunction[185]=__GLeeLink_GL_IBM_multimode_draw_arrays; __GLeeGLLoadFunction[186]=__GLeeLink_GL_IBM_vertex_array_lists; __GLeeGLLoadFunction[187]=__GLeeLink_GL_SGIX_subsample; __GLeeGLLoadFunction[188]=__GLeeLink_GL_SGIX_ycrcb_subsample; __GLeeGLLoadFunction[189]=__GLeeLink_GL_SGIX_ycrcba; __GLeeGLLoadFunction[190]=__GLeeLink_GL_SGI_depth_pass_instrument; __GLeeGLLoadFunction[191]=__GLeeLink_GL_3DFX_texture_compression_FXT1; __GLeeGLLoadFunction[192]=__GLeeLink_GL_3DFX_multisample; __GLeeGLLoadFunction[193]=__GLeeLink_GL_3DFX_tbuffer; __GLeeGLLoadFunction[194]=__GLeeLink_GL_EXT_multisample; __GLeeGLLoadFunction[195]=__GLeeLink_GL_SGIX_vertex_preclip; __GLeeGLLoadFunction[196]=__GLeeLink_GL_SGIX_convolution_accuracy; __GLeeGLLoadFunction[197]=__GLeeLink_GL_SGIX_resample; __GLeeGLLoadFunction[198]=__GLeeLink_GL_SGIS_point_line_texgen; __GLeeGLLoadFunction[199]=__GLeeLink_GL_SGIS_texture_color_mask; __GLeeGLLoadFunction[200]=__GLeeLink_GL_EXT_texture_env_dot3; __GLeeGLLoadFunction[201]=__GLeeLink_GL_ATI_texture_mirror_once; __GLeeGLLoadFunction[202]=__GLeeLink_GL_NV_fence; __GLeeGLLoadFunction[203]=__GLeeLink_GL_IBM_texture_mirrored_repeat; __GLeeGLLoadFunction[204]=__GLeeLink_GL_NV_evaluators; __GLeeGLLoadFunction[205]=__GLeeLink_GL_NV_packed_depth_stencil; __GLeeGLLoadFunction[206]=__GLeeLink_GL_NV_register_combiners2; __GLeeGLLoadFunction[207]=__GLeeLink_GL_NV_texture_compression_vtc; __GLeeGLLoadFunction[208]=__GLeeLink_GL_NV_texture_rectangle; __GLeeGLLoadFunction[209]=__GLeeLink_GL_NV_texture_shader; __GLeeGLLoadFunction[210]=__GLeeLink_GL_NV_texture_shader2; __GLeeGLLoadFunction[211]=__GLeeLink_GL_NV_vertex_array_range2; __GLeeGLLoadFunction[212]=__GLeeLink_GL_NV_vertex_program; __GLeeGLLoadFunction[213]=__GLeeLink_GL_SGIX_texture_coordinate_clamp; __GLeeGLLoadFunction[214]=__GLeeLink_GL_SGIX_scalebias_hint; __GLeeGLLoadFunction[215]=__GLeeLink_GL_OML_interlace; __GLeeGLLoadFunction[216]=__GLeeLink_GL_OML_subsample; __GLeeGLLoadFunction[217]=__GLeeLink_GL_OML_resample; __GLeeGLLoadFunction[218]=__GLeeLink_GL_NV_copy_depth_to_color; __GLeeGLLoadFunction[219]=__GLeeLink_GL_ATI_envmap_bumpmap; __GLeeGLLoadFunction[220]=__GLeeLink_GL_ATI_fragment_shader; __GLeeGLLoadFunction[221]=__GLeeLink_GL_ATI_pn_triangles; __GLeeGLLoadFunction[222]=__GLeeLink_GL_ATI_vertex_array_object; __GLeeGLLoadFunction[223]=__GLeeLink_GL_EXT_vertex_shader; __GLeeGLLoadFunction[224]=__GLeeLink_GL_ATI_vertex_streams; __GLeeGLLoadFunction[225]=__GLeeLink_GL_ATI_element_array; __GLeeGLLoadFunction[226]=__GLeeLink_GL_SUN_mesh_array; __GLeeGLLoadFunction[227]=__GLeeLink_GL_SUN_slice_accum; __GLeeGLLoadFunction[228]=__GLeeLink_GL_NV_multisample_filter_hint; __GLeeGLLoadFunction[229]=__GLeeLink_GL_NV_depth_clamp; __GLeeGLLoadFunction[230]=__GLeeLink_GL_NV_occlusion_query; __GLeeGLLoadFunction[231]=__GLeeLink_GL_NV_point_sprite; __GLeeGLLoadFunction[232]=__GLeeLink_GL_NV_texture_shader3; __GLeeGLLoadFunction[233]=__GLeeLink_GL_NV_vertex_program1_1; __GLeeGLLoadFunction[234]=__GLeeLink_GL_EXT_shadow_funcs; __GLeeGLLoadFunction[235]=__GLeeLink_GL_EXT_stencil_two_side; __GLeeGLLoadFunction[236]=__GLeeLink_GL_ATI_text_fragment_shader; __GLeeGLLoadFunction[237]=__GLeeLink_GL_APPLE_client_storage; __GLeeGLLoadFunction[238]=__GLeeLink_GL_APPLE_element_array; __GLeeGLLoadFunction[239]=__GLeeLink_GL_APPLE_fence; __GLeeGLLoadFunction[240]=__GLeeLink_GL_APPLE_vertex_array_object; __GLeeGLLoadFunction[241]=__GLeeLink_GL_APPLE_vertex_array_range; __GLeeGLLoadFunction[242]=__GLeeLink_GL_APPLE_ycbcr_422; __GLeeGLLoadFunction[243]=__GLeeLink_GL_S3_s3tc; __GLeeGLLoadFunction[244]=__GLeeLink_GL_ATI_draw_buffers; __GLeeGLLoadFunction[245]=__GLeeLink_GL_ATI_pixel_format_float; __GLeeGLLoadFunction[246]=__GLeeLink_GL_ATI_texture_env_combine3; __GLeeGLLoadFunction[247]=__GLeeLink_GL_ATI_texture_float; __GLeeGLLoadFunction[248]=__GLeeLink_GL_NV_float_buffer; __GLeeGLLoadFunction[249]=__GLeeLink_GL_NV_fragment_program; __GLeeGLLoadFunction[250]=__GLeeLink_GL_NV_half_float; __GLeeGLLoadFunction[251]=__GLeeLink_GL_NV_pixel_data_range; __GLeeGLLoadFunction[252]=__GLeeLink_GL_NV_primitive_restart; __GLeeGLLoadFunction[253]=__GLeeLink_GL_NV_texture_expand_normal; __GLeeGLLoadFunction[254]=__GLeeLink_GL_NV_vertex_program2; __GLeeGLLoadFunction[255]=__GLeeLink_GL_ATI_map_object_buffer; __GLeeGLLoadFunction[256]=__GLeeLink_GL_ATI_separate_stencil; __GLeeGLLoadFunction[257]=__GLeeLink_GL_ATI_vertex_attrib_array_object; __GLeeGLLoadFunction[258]=__GLeeLink_GL_OES_read_format; __GLeeGLLoadFunction[259]=__GLeeLink_GL_EXT_depth_bounds_test; __GLeeGLLoadFunction[260]=__GLeeLink_GL_EXT_texture_mirror_clamp; __GLeeGLLoadFunction[261]=__GLeeLink_GL_EXT_blend_equation_separate; __GLeeGLLoadFunction[262]=__GLeeLink_GL_MESA_pack_invert; __GLeeGLLoadFunction[263]=__GLeeLink_GL_MESA_ycbcr_texture; __GLeeGLLoadFunction[264]=__GLeeLink_GL_EXT_pixel_buffer_object; __GLeeGLLoadFunction[265]=__GLeeLink_GL_NV_fragment_program_option; __GLeeGLLoadFunction[266]=__GLeeLink_GL_NV_fragment_program2; __GLeeGLLoadFunction[267]=__GLeeLink_GL_NV_vertex_program2_option; __GLeeGLLoadFunction[268]=__GLeeLink_GL_NV_vertex_program3; __GLeeGLLoadFunction[269]=__GLeeLink_GL_EXT_framebuffer_object; __GLeeGLLoadFunction[270]=__GLeeLink_GL_GREMEDY_string_marker; __GLeeGLLoadFunction[271]=__GLeeLink_GL_EXT_packed_depth_stencil; __GLeeGLLoadFunction[272]=__GLeeLink_GL_EXT_stencil_clear_tag; __GLeeGLLoadFunction[273]=__GLeeLink_GL_EXT_texture_sRGB; __GLeeGLLoadFunction[274]=__GLeeLink_GL_EXT_framebuffer_blit; __GLeeGLLoadFunction[275]=__GLeeLink_GL_EXT_framebuffer_multisample; __GLeeGLLoadFunction[276]=__GLeeLink_GL_MESAX_texture_stack; __GLeeGLLoadFunction[277]=__GLeeLink_GL_EXT_timer_query; __GLeeGLLoadFunction[278]=__GLeeLink_GL_EXT_gpu_program_parameters; __GLeeGLLoadFunction[279]=__GLeeLink_GL_APPLE_flush_buffer_range; __GLeeGLLoadFunction[280]=__GLeeLink_GL_EXT_gpu_shader4; __GLeeGLLoadFunction[281]=__GLeeLink_GL_EXT_draw_instanced; __GLeeGLLoadFunction[282]=__GLeeLink_GL_EXT_packed_float; __GLeeGLLoadFunction[283]=__GLeeLink_GL_EXT_texture_array; __GLeeGLLoadFunction[284]=__GLeeLink_GL_EXT_texture_buffer_object; __GLeeGLLoadFunction[285]=__GLeeLink_GL_EXT_texture_compression_latc; __GLeeGLLoadFunction[286]=__GLeeLink_GL_EXT_texture_compression_rgtc; __GLeeGLLoadFunction[287]=__GLeeLink_GL_EXT_texture_shared_exponent; __GLeeGLLoadFunction[288]=__GLeeLink_GL_NV_depth_buffer_float; __GLeeGLLoadFunction[289]=__GLeeLink_GL_NV_framebuffer_multisample_coverage; __GLeeGLLoadFunction[290]=__GLeeLink_GL_EXT_framebuffer_sRGB; __GLeeGLLoadFunction[291]=__GLeeLink_GL_NV_geometry_shader4; __GLeeGLLoadFunction[292]=__GLeeLink_GL_NV_parameter_buffer_object; __GLeeGLLoadFunction[293]=__GLeeLink_GL_EXT_draw_buffers2; __GLeeGLLoadFunction[294]=__GLeeLink_GL_NV_transform_feedback; __GLeeGLLoadFunction[295]=__GLeeLink_GL_EXT_bindable_uniform; __GLeeGLLoadFunction[296]=__GLeeLink_GL_EXT_texture_integer; __GLeeGLLoadFunction[297]=__GLeeLink_GL_GREMEDY_frame_terminator; __GLeeGLLoadFunction[298]=__GLeeLink_GL_NV_conditional_render; __GLeeGLLoadFunction[299]=__GLeeLink_GL_NV_present_video; __GLeeGLLoadFunction[300]=__GLeeLink_GL_EXT_transform_feedback; __GLeeGLLoadFunction[301]=__GLeeLink_GL_EXT_direct_state_access; __GLeeGLLoadFunction[302]=__GLeeLink_GL_EXT_vertex_array_bgra; __GLeeGLLoadFunction[303]=__GLeeLink_GL_EXT_texture_swizzle; __GLeeGLLoadFunction[304]=__GLeeLink_GL_NV_explicit_multisample; __GLeeGLLoadFunction[305]=__GLeeLink_GL_NV_transform_feedback2; __GLeeGLLoadFunction[306]=__GLeeLink_GL_SGIX_texture_select; __GLeeGLLoadFunction[307]=__GLeeLink_GL_INGR_blend_func_separate; __GLeeGLLoadFunction[308]=__GLeeLink_GL_SGIX_depth_pass_instrument; __GLeeGLLoadFunction[309]=__GLeeLink_GL_SGIX_igloo_interface; __GLeeGLLoadFunction[310]=__GLeeLink_GL_EXT_fragment_lighting; __GLeeGLLoadFunction[311]=__GLeeLink_GL_EXT_geometry_shader4; __GLeeGLLoadFunction[312]=__GLeeLink_GL_EXT_scene_marker; __GLeeGLLoadFunction[313]=__GLeeLink_GL_EXT_texture_compression_dxt1; __GLeeGLLoadFunction[314]=__GLeeLink_GL_EXT_texture_env; __GLeeGLLoadFunction[315]=__GLeeLink_GL_IBM_static_data; __GLeeGLLoadFunction[316]=__GLeeLink_GL_NV_gpu_program4; __GLeeGLLoadFunction[317]=__GLeeLink_GL_OES_byte_coordinates; __GLeeGLLoadFunction[318]=__GLeeLink_GL_OES_compressed_paletted_texture; __GLeeGLLoadFunction[319]=__GLeeLink_GL_OES_single_precision; __GLeeGLLoadFunction[320]=__GLeeLink_GL_SGIX_pixel_texture_bits; __GLeeGLLoadFunction[321]=__GLeeLink_GL_SGIX_texture_range; } #ifdef WIN32 GLuint __GLeeLink_WGL_ARB_buffer_region(void) { GLint nLinked=0; #ifdef __GLEE_WGL_ARB_buffer_region if ((GLeeFuncPtr_wglCreateBufferRegionARB = (GLEEPFNWGLCREATEBUFFERREGIONARBPROC) __GLeeGetProcAddress("wglCreateBufferRegionARB"))!=0) nLinked++; if ((GLeeFuncPtr_wglDeleteBufferRegionARB = (GLEEPFNWGLDELETEBUFFERREGIONARBPROC) __GLeeGetProcAddress("wglDeleteBufferRegionARB"))!=0) nLinked++; if ((GLeeFuncPtr_wglSaveBufferRegionARB = (GLEEPFNWGLSAVEBUFFERREGIONARBPROC) __GLeeGetProcAddress("wglSaveBufferRegionARB"))!=0) nLinked++; if ((GLeeFuncPtr_wglRestoreBufferRegionARB = (GLEEPFNWGLRESTOREBUFFERREGIONARBPROC) __GLeeGetProcAddress("wglRestoreBufferRegionARB"))!=0) nLinked++; #endif if (nLinked==4) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_WGL_ARB_multisample(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_WGL_ARB_extensions_string(void) { GLint nLinked=0; #ifdef __GLEE_WGL_ARB_extensions_string if ((GLeeFuncPtr_wglGetExtensionsStringARB = (GLEEPFNWGLGETEXTENSIONSSTRINGARBPROC) __GLeeGetProcAddress("wglGetExtensionsStringARB"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_WGL_ARB_pixel_format(void) { GLint nLinked=0; #ifdef __GLEE_WGL_ARB_pixel_format if ((GLeeFuncPtr_wglGetPixelFormatAttribivARB = (GLEEPFNWGLGETPIXELFORMATATTRIBIVARBPROC) __GLeeGetProcAddress("wglGetPixelFormatAttribivARB"))!=0) nLinked++; if ((GLeeFuncPtr_wglGetPixelFormatAttribfvARB = (GLEEPFNWGLGETPIXELFORMATATTRIBFVARBPROC) __GLeeGetProcAddress("wglGetPixelFormatAttribfvARB"))!=0) nLinked++; if ((GLeeFuncPtr_wglChoosePixelFormatARB = (GLEEPFNWGLCHOOSEPIXELFORMATARBPROC) __GLeeGetProcAddress("wglChoosePixelFormatARB"))!=0) nLinked++; #endif if (nLinked==3) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_WGL_ARB_make_current_read(void) { GLint nLinked=0; #ifdef __GLEE_WGL_ARB_make_current_read if ((GLeeFuncPtr_wglMakeContextCurrentARB = (GLEEPFNWGLMAKECONTEXTCURRENTARBPROC) __GLeeGetProcAddress("wglMakeContextCurrentARB"))!=0) nLinked++; if ((GLeeFuncPtr_wglGetCurrentReadDCARB = (GLEEPFNWGLGETCURRENTREADDCARBPROC) __GLeeGetProcAddress("wglGetCurrentReadDCARB"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_WGL_ARB_pbuffer(void) { GLint nLinked=0; #ifdef __GLEE_WGL_ARB_pbuffer if ((GLeeFuncPtr_wglCreatePbufferARB = (GLEEPFNWGLCREATEPBUFFERARBPROC) __GLeeGetProcAddress("wglCreatePbufferARB"))!=0) nLinked++; if ((GLeeFuncPtr_wglGetPbufferDCARB = (GLEEPFNWGLGETPBUFFERDCARBPROC) __GLeeGetProcAddress("wglGetPbufferDCARB"))!=0) nLinked++; if ((GLeeFuncPtr_wglReleasePbufferDCARB = (GLEEPFNWGLRELEASEPBUFFERDCARBPROC) __GLeeGetProcAddress("wglReleasePbufferDCARB"))!=0) nLinked++; if ((GLeeFuncPtr_wglDestroyPbufferARB = (GLEEPFNWGLDESTROYPBUFFERARBPROC) __GLeeGetProcAddress("wglDestroyPbufferARB"))!=0) nLinked++; if ((GLeeFuncPtr_wglQueryPbufferARB = (GLEEPFNWGLQUERYPBUFFERARBPROC) __GLeeGetProcAddress("wglQueryPbufferARB"))!=0) nLinked++; #endif if (nLinked==5) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_WGL_ARB_render_texture(void) { GLint nLinked=0; #ifdef __GLEE_WGL_ARB_render_texture if ((GLeeFuncPtr_wglBindTexImageARB = (GLEEPFNWGLBINDTEXIMAGEARBPROC) __GLeeGetProcAddress("wglBindTexImageARB"))!=0) nLinked++; if ((GLeeFuncPtr_wglReleaseTexImageARB = (GLEEPFNWGLRELEASETEXIMAGEARBPROC) __GLeeGetProcAddress("wglReleaseTexImageARB"))!=0) nLinked++; if ((GLeeFuncPtr_wglSetPbufferAttribARB = (GLEEPFNWGLSETPBUFFERATTRIBARBPROC) __GLeeGetProcAddress("wglSetPbufferAttribARB"))!=0) nLinked++; #endif if (nLinked==3) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_WGL_ARB_pixel_format_float(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_WGL_ARB_create_context(void) { GLint nLinked=0; #ifdef __GLEE_WGL_ARB_create_context if ((GLeeFuncPtr_wglCreateContextAttribsARB = (GLEEPFNWGLCREATECONTEXTATTRIBSARBPROC) __GLeeGetProcAddress("wglCreateContextAttribsARB"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_WGL_EXT_make_current_read(void) { GLint nLinked=0; #ifdef __GLEE_WGL_EXT_make_current_read if ((GLeeFuncPtr_wglMakeContextCurrentEXT = (GLEEPFNWGLMAKECONTEXTCURRENTEXTPROC) __GLeeGetProcAddress("wglMakeContextCurrentEXT"))!=0) nLinked++; if ((GLeeFuncPtr_wglGetCurrentReadDCEXT = (GLEEPFNWGLGETCURRENTREADDCEXTPROC) __GLeeGetProcAddress("wglGetCurrentReadDCEXT"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_WGL_EXT_pixel_format(void) { GLint nLinked=0; #ifdef __GLEE_WGL_EXT_pixel_format if ((GLeeFuncPtr_wglGetPixelFormatAttribivEXT = (GLEEPFNWGLGETPIXELFORMATATTRIBIVEXTPROC) __GLeeGetProcAddress("wglGetPixelFormatAttribivEXT"))!=0) nLinked++; if ((GLeeFuncPtr_wglGetPixelFormatAttribfvEXT = (GLEEPFNWGLGETPIXELFORMATATTRIBFVEXTPROC) __GLeeGetProcAddress("wglGetPixelFormatAttribfvEXT"))!=0) nLinked++; if ((GLeeFuncPtr_wglChoosePixelFormatEXT = (GLEEPFNWGLCHOOSEPIXELFORMATEXTPROC) __GLeeGetProcAddress("wglChoosePixelFormatEXT"))!=0) nLinked++; #endif if (nLinked==3) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_WGL_EXT_pbuffer(void) { GLint nLinked=0; #ifdef __GLEE_WGL_EXT_pbuffer if ((GLeeFuncPtr_wglCreatePbufferEXT = (GLEEPFNWGLCREATEPBUFFEREXTPROC) __GLeeGetProcAddress("wglCreatePbufferEXT"))!=0) nLinked++; if ((GLeeFuncPtr_wglGetPbufferDCEXT = (GLEEPFNWGLGETPBUFFERDCEXTPROC) __GLeeGetProcAddress("wglGetPbufferDCEXT"))!=0) nLinked++; if ((GLeeFuncPtr_wglReleasePbufferDCEXT = (GLEEPFNWGLRELEASEPBUFFERDCEXTPROC) __GLeeGetProcAddress("wglReleasePbufferDCEXT"))!=0) nLinked++; if ((GLeeFuncPtr_wglDestroyPbufferEXT = (GLEEPFNWGLDESTROYPBUFFEREXTPROC) __GLeeGetProcAddress("wglDestroyPbufferEXT"))!=0) nLinked++; if ((GLeeFuncPtr_wglQueryPbufferEXT = (GLEEPFNWGLQUERYPBUFFEREXTPROC) __GLeeGetProcAddress("wglQueryPbufferEXT"))!=0) nLinked++; #endif if (nLinked==5) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_WGL_EXT_depth_float(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_WGL_3DFX_multisample(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_WGL_EXT_multisample(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_WGL_I3D_digital_video_control(void) { GLint nLinked=0; #ifdef __GLEE_WGL_I3D_digital_video_control if ((GLeeFuncPtr_wglGetDigitalVideoParametersI3D = (GLEEPFNWGLGETDIGITALVIDEOPARAMETERSI3DPROC) __GLeeGetProcAddress("wglGetDigitalVideoParametersI3D"))!=0) nLinked++; if ((GLeeFuncPtr_wglSetDigitalVideoParametersI3D = (GLEEPFNWGLSETDIGITALVIDEOPARAMETERSI3DPROC) __GLeeGetProcAddress("wglSetDigitalVideoParametersI3D"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_WGL_I3D_gamma(void) { GLint nLinked=0; #ifdef __GLEE_WGL_I3D_gamma if ((GLeeFuncPtr_wglGetGammaTableParametersI3D = (GLEEPFNWGLGETGAMMATABLEPARAMETERSI3DPROC) __GLeeGetProcAddress("wglGetGammaTableParametersI3D"))!=0) nLinked++; if ((GLeeFuncPtr_wglSetGammaTableParametersI3D = (GLEEPFNWGLSETGAMMATABLEPARAMETERSI3DPROC) __GLeeGetProcAddress("wglSetGammaTableParametersI3D"))!=0) nLinked++; if ((GLeeFuncPtr_wglGetGammaTableI3D = (GLEEPFNWGLGETGAMMATABLEI3DPROC) __GLeeGetProcAddress("wglGetGammaTableI3D"))!=0) nLinked++; if ((GLeeFuncPtr_wglSetGammaTableI3D = (GLEEPFNWGLSETGAMMATABLEI3DPROC) __GLeeGetProcAddress("wglSetGammaTableI3D"))!=0) nLinked++; #endif if (nLinked==4) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_WGL_I3D_genlock(void) { GLint nLinked=0; #ifdef __GLEE_WGL_I3D_genlock if ((GLeeFuncPtr_wglEnableGenlockI3D = (GLEEPFNWGLENABLEGENLOCKI3DPROC) __GLeeGetProcAddress("wglEnableGenlockI3D"))!=0) nLinked++; if ((GLeeFuncPtr_wglDisableGenlockI3D = (GLEEPFNWGLDISABLEGENLOCKI3DPROC) __GLeeGetProcAddress("wglDisableGenlockI3D"))!=0) nLinked++; if ((GLeeFuncPtr_wglIsEnabledGenlockI3D = (GLEEPFNWGLISENABLEDGENLOCKI3DPROC) __GLeeGetProcAddress("wglIsEnabledGenlockI3D"))!=0) nLinked++; if ((GLeeFuncPtr_wglGenlockSourceI3D = (GLEEPFNWGLGENLOCKSOURCEI3DPROC) __GLeeGetProcAddress("wglGenlockSourceI3D"))!=0) nLinked++; if ((GLeeFuncPtr_wglGetGenlockSourceI3D = (GLEEPFNWGLGETGENLOCKSOURCEI3DPROC) __GLeeGetProcAddress("wglGetGenlockSourceI3D"))!=0) nLinked++; if ((GLeeFuncPtr_wglGenlockSourceEdgeI3D = (GLEEPFNWGLGENLOCKSOURCEEDGEI3DPROC) __GLeeGetProcAddress("wglGenlockSourceEdgeI3D"))!=0) nLinked++; if ((GLeeFuncPtr_wglGetGenlockSourceEdgeI3D = (GLEEPFNWGLGETGENLOCKSOURCEEDGEI3DPROC) __GLeeGetProcAddress("wglGetGenlockSourceEdgeI3D"))!=0) nLinked++; if ((GLeeFuncPtr_wglGenlockSampleRateI3D = (GLEEPFNWGLGENLOCKSAMPLERATEI3DPROC) __GLeeGetProcAddress("wglGenlockSampleRateI3D"))!=0) nLinked++; if ((GLeeFuncPtr_wglGetGenlockSampleRateI3D = (GLEEPFNWGLGETGENLOCKSAMPLERATEI3DPROC) __GLeeGetProcAddress("wglGetGenlockSampleRateI3D"))!=0) nLinked++; if ((GLeeFuncPtr_wglGenlockSourceDelayI3D = (GLEEPFNWGLGENLOCKSOURCEDELAYI3DPROC) __GLeeGetProcAddress("wglGenlockSourceDelayI3D"))!=0) nLinked++; if ((GLeeFuncPtr_wglGetGenlockSourceDelayI3D = (GLEEPFNWGLGETGENLOCKSOURCEDELAYI3DPROC) __GLeeGetProcAddress("wglGetGenlockSourceDelayI3D"))!=0) nLinked++; if ((GLeeFuncPtr_wglQueryGenlockMaxSourceDelayI3D = (GLEEPFNWGLQUERYGENLOCKMAXSOURCEDELAYI3DPROC) __GLeeGetProcAddress("wglQueryGenlockMaxSourceDelayI3D"))!=0) nLinked++; #endif if (nLinked==12) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_WGL_I3D_image_buffer(void) { GLint nLinked=0; #ifdef __GLEE_WGL_I3D_image_buffer if ((GLeeFuncPtr_wglCreateImageBufferI3D = (GLEEPFNWGLCREATEIMAGEBUFFERI3DPROC) __GLeeGetProcAddress("wglCreateImageBufferI3D"))!=0) nLinked++; if ((GLeeFuncPtr_wglDestroyImageBufferI3D = (GLEEPFNWGLDESTROYIMAGEBUFFERI3DPROC) __GLeeGetProcAddress("wglDestroyImageBufferI3D"))!=0) nLinked++; if ((GLeeFuncPtr_wglAssociateImageBufferEventsI3D = (GLEEPFNWGLASSOCIATEIMAGEBUFFEREVENTSI3DPROC) __GLeeGetProcAddress("wglAssociateImageBufferEventsI3D"))!=0) nLinked++; if ((GLeeFuncPtr_wglReleaseImageBufferEventsI3D = (GLEEPFNWGLRELEASEIMAGEBUFFEREVENTSI3DPROC) __GLeeGetProcAddress("wglReleaseImageBufferEventsI3D"))!=0) nLinked++; #endif if (nLinked==4) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_WGL_I3D_swap_frame_lock(void) { GLint nLinked=0; #ifdef __GLEE_WGL_I3D_swap_frame_lock if ((GLeeFuncPtr_wglEnableFrameLockI3D = (GLEEPFNWGLENABLEFRAMELOCKI3DPROC) __GLeeGetProcAddress("wglEnableFrameLockI3D"))!=0) nLinked++; if ((GLeeFuncPtr_wglDisableFrameLockI3D = (GLEEPFNWGLDISABLEFRAMELOCKI3DPROC) __GLeeGetProcAddress("wglDisableFrameLockI3D"))!=0) nLinked++; if ((GLeeFuncPtr_wglIsEnabledFrameLockI3D = (GLEEPFNWGLISENABLEDFRAMELOCKI3DPROC) __GLeeGetProcAddress("wglIsEnabledFrameLockI3D"))!=0) nLinked++; if ((GLeeFuncPtr_wglQueryFrameLockMasterI3D = (GLEEPFNWGLQUERYFRAMELOCKMASTERI3DPROC) __GLeeGetProcAddress("wglQueryFrameLockMasterI3D"))!=0) nLinked++; #endif if (nLinked==4) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_WGL_NV_render_depth_texture(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_WGL_NV_render_texture_rectangle(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_WGL_ATI_pixel_format_float(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_WGL_NV_float_buffer(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_WGL_3DL_stereo_control(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_WGL_EXT_pixel_format_packed_float(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_WGL_EXT_framebuffer_sRGB(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_WGL_NV_present_video(void) { GLint nLinked=0; #ifdef __GLEE_WGL_NV_present_video if ((GLeeFuncPtr_wglEnumerateVideoDevicesNV = (GLEEPFNWGLENUMERATEVIDEODEVICESNVPROC) __GLeeGetProcAddress("wglEnumerateVideoDevicesNV"))!=0) nLinked++; if ((GLeeFuncPtr_wglBindVideoDeviceNV = (GLEEPFNWGLBINDVIDEODEVICENVPROC) __GLeeGetProcAddress("wglBindVideoDeviceNV"))!=0) nLinked++; if ((GLeeFuncPtr_wglQueryCurrentContextNV = (GLEEPFNWGLQUERYCURRENTCONTEXTNVPROC) __GLeeGetProcAddress("wglQueryCurrentContextNV"))!=0) nLinked++; #endif if (nLinked==3) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_WGL_NV_swap_group(void) { GLint nLinked=0; #ifdef __GLEE_WGL_NV_swap_group if ((GLeeFuncPtr_wglJoinSwapGroupNV = (GLEEPFNWGLJOINSWAPGROUPNVPROC) __GLeeGetProcAddress("wglJoinSwapGroupNV"))!=0) nLinked++; if ((GLeeFuncPtr_wglBindSwapBarrierNV = (GLEEPFNWGLBINDSWAPBARRIERNVPROC) __GLeeGetProcAddress("wglBindSwapBarrierNV"))!=0) nLinked++; if ((GLeeFuncPtr_wglQuerySwapGroupNV = (GLEEPFNWGLQUERYSWAPGROUPNVPROC) __GLeeGetProcAddress("wglQuerySwapGroupNV"))!=0) nLinked++; if ((GLeeFuncPtr_wglQueryMaxSwapGroupsNV = (GLEEPFNWGLQUERYMAXSWAPGROUPSNVPROC) __GLeeGetProcAddress("wglQueryMaxSwapGroupsNV"))!=0) nLinked++; if ((GLeeFuncPtr_wglQueryFrameCountNV = (GLEEPFNWGLQUERYFRAMECOUNTNVPROC) __GLeeGetProcAddress("wglQueryFrameCountNV"))!=0) nLinked++; if ((GLeeFuncPtr_wglResetFrameCountNV = (GLEEPFNWGLRESETFRAMECOUNTNVPROC) __GLeeGetProcAddress("wglResetFrameCountNV"))!=0) nLinked++; #endif if (nLinked==6) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_WGL_NV_gpu_affinity(void) { GLint nLinked=0; #ifdef __GLEE_WGL_NV_gpu_affinity if ((GLeeFuncPtr_wglEnumGpusNV = (GLEEPFNWGLENUMGPUSNVPROC) __GLeeGetProcAddress("wglEnumGpusNV"))!=0) nLinked++; if ((GLeeFuncPtr_wglEnumGpuDevicesNV = (GLEEPFNWGLENUMGPUDEVICESNVPROC) __GLeeGetProcAddress("wglEnumGpuDevicesNV"))!=0) nLinked++; if ((GLeeFuncPtr_wglCreateAffinityDCNV = (GLEEPFNWGLCREATEAFFINITYDCNVPROC) __GLeeGetProcAddress("wglCreateAffinityDCNV"))!=0) nLinked++; if ((GLeeFuncPtr_wglEnumGpusFromAffinityDCNV = (GLEEPFNWGLENUMGPUSFROMAFFINITYDCNVPROC) __GLeeGetProcAddress("wglEnumGpusFromAffinityDCNV"))!=0) nLinked++; if ((GLeeFuncPtr_wglDeleteDCNV = (GLEEPFNWGLDELETEDCNVPROC) __GLeeGetProcAddress("wglDeleteDCNV"))!=0) nLinked++; #endif if (nLinked==5) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_WGL_EXT_display_color_table(void) { GLint nLinked=0; #ifdef __GLEE_WGL_EXT_display_color_table if ((GLeeFuncPtr_wglCreateDisplayColorTableEXT = (GLEEPFNWGLCREATEDISPLAYCOLORTABLEEXTPROC) __GLeeGetProcAddress("wglCreateDisplayColorTableEXT"))!=0) nLinked++; if ((GLeeFuncPtr_wglLoadDisplayColorTableEXT = (GLEEPFNWGLLOADDISPLAYCOLORTABLEEXTPROC) __GLeeGetProcAddress("wglLoadDisplayColorTableEXT"))!=0) nLinked++; if ((GLeeFuncPtr_wglBindDisplayColorTableEXT = (GLEEPFNWGLBINDDISPLAYCOLORTABLEEXTPROC) __GLeeGetProcAddress("wglBindDisplayColorTableEXT"))!=0) nLinked++; if ((GLeeFuncPtr_wglDestroyDisplayColorTableEXT = (GLEEPFNWGLDESTROYDISPLAYCOLORTABLEEXTPROC) __GLeeGetProcAddress("wglDestroyDisplayColorTableEXT"))!=0) nLinked++; #endif if (nLinked==4) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_WGL_EXT_extensions_string(void) { GLint nLinked=0; #ifdef __GLEE_WGL_EXT_extensions_string if ((GLeeFuncPtr_wglGetExtensionsStringEXT = (GLEEPFNWGLGETEXTENSIONSSTRINGEXTPROC) __GLeeGetProcAddress("wglGetExtensionsStringEXT"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_WGL_EXT_swap_control(void) { GLint nLinked=0; #ifdef __GLEE_WGL_EXT_swap_control if ((GLeeFuncPtr_wglSwapIntervalEXT = (GLEEPFNWGLSWAPINTERVALEXTPROC) __GLeeGetProcAddress("wglSwapIntervalEXT"))!=0) nLinked++; if ((GLeeFuncPtr_wglGetSwapIntervalEXT = (GLEEPFNWGLGETSWAPINTERVALEXTPROC) __GLeeGetProcAddress("wglGetSwapIntervalEXT"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_WGL_NV_vertex_array_range(void) { GLint nLinked=0; #ifdef __GLEE_WGL_NV_vertex_array_range if ((GLeeFuncPtr_wglAllocateMemoryNV = (GLEEPFNWGLALLOCATEMEMORYNVPROC) __GLeeGetProcAddress("wglAllocateMemoryNV"))!=0) nLinked++; if ((GLeeFuncPtr_wglFreeMemoryNV = (GLEEPFNWGLFREEMEMORYNVPROC) __GLeeGetProcAddress("wglFreeMemoryNV"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_WGL_OML_sync_control(void) { GLint nLinked=0; #ifdef __GLEE_WGL_OML_sync_control if ((GLeeFuncPtr_wglGetSyncValuesOML = (GLEEPFNWGLGETSYNCVALUESOMLPROC) __GLeeGetProcAddress("wglGetSyncValuesOML"))!=0) nLinked++; if ((GLeeFuncPtr_wglGetMscRateOML = (GLEEPFNWGLGETMSCRATEOMLPROC) __GLeeGetProcAddress("wglGetMscRateOML"))!=0) nLinked++; if ((GLeeFuncPtr_wglSwapBuffersMscOML = (GLEEPFNWGLSWAPBUFFERSMSCOMLPROC) __GLeeGetProcAddress("wglSwapBuffersMscOML"))!=0) nLinked++; if ((GLeeFuncPtr_wglSwapLayerBuffersMscOML = (GLEEPFNWGLSWAPLAYERBUFFERSMSCOMLPROC) __GLeeGetProcAddress("wglSwapLayerBuffersMscOML"))!=0) nLinked++; if ((GLeeFuncPtr_wglWaitForMscOML = (GLEEPFNWGLWAITFORMSCOMLPROC) __GLeeGetProcAddress("wglWaitForMscOML"))!=0) nLinked++; if ((GLeeFuncPtr_wglWaitForSbcOML = (GLEEPFNWGLWAITFORSBCOMLPROC) __GLeeGetProcAddress("wglWaitForSbcOML"))!=0) nLinked++; #endif if (nLinked==6) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_WGL_I3D_swap_frame_usage(void) { GLint nLinked=0; #ifdef __GLEE_WGL_I3D_swap_frame_usage if ((GLeeFuncPtr_wglGetFrameUsageI3D = (GLEEPFNWGLGETFRAMEUSAGEI3DPROC) __GLeeGetProcAddress("wglGetFrameUsageI3D"))!=0) nLinked++; if ((GLeeFuncPtr_wglBeginFrameTrackingI3D = (GLEEPFNWGLBEGINFRAMETRACKINGI3DPROC) __GLeeGetProcAddress("wglBeginFrameTrackingI3D"))!=0) nLinked++; if ((GLeeFuncPtr_wglEndFrameTrackingI3D = (GLEEPFNWGLENDFRAMETRACKINGI3DPROC) __GLeeGetProcAddress("wglEndFrameTrackingI3D"))!=0) nLinked++; if ((GLeeFuncPtr_wglQueryFrameTrackingI3D = (GLEEPFNWGLQUERYFRAMETRACKINGI3DPROC) __GLeeGetProcAddress("wglQueryFrameTrackingI3D"))!=0) nLinked++; #endif if (nLinked==4) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_WGL_NV_video_output(void) { GLint nLinked=0; #ifdef __GLEE_WGL_NV_video_output if ((GLeeFuncPtr_wglGetVideoDeviceNV = (GLEEPFNWGLGETVIDEODEVICENVPROC) __GLeeGetProcAddress("wglGetVideoDeviceNV"))!=0) nLinked++; if ((GLeeFuncPtr_wglReleaseVideoDeviceNV = (GLEEPFNWGLRELEASEVIDEODEVICENVPROC) __GLeeGetProcAddress("wglReleaseVideoDeviceNV"))!=0) nLinked++; if ((GLeeFuncPtr_wglBindVideoImageNV = (GLEEPFNWGLBINDVIDEOIMAGENVPROC) __GLeeGetProcAddress("wglBindVideoImageNV"))!=0) nLinked++; if ((GLeeFuncPtr_wglReleaseVideoImageNV = (GLEEPFNWGLRELEASEVIDEOIMAGENVPROC) __GLeeGetProcAddress("wglReleaseVideoImageNV"))!=0) nLinked++; if ((GLeeFuncPtr_wglSendPbufferToVideoNV = (GLEEPFNWGLSENDPBUFFERTOVIDEONVPROC) __GLeeGetProcAddress("wglSendPbufferToVideoNV"))!=0) nLinked++; if ((GLeeFuncPtr_wglGetVideoInfoNV = (GLEEPFNWGLGETVIDEOINFONVPROC) __GLeeGetProcAddress("wglGetVideoInfoNV"))!=0) nLinked++; #endif if (nLinked==6) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLEE_LINK_FUNCTION __GLeeWGLLoadFunction[37]; void initWGLLoadFunctions(void) { __GLeeWGLLoadFunction[0]=__GLeeLink_WGL_ARB_buffer_region; __GLeeWGLLoadFunction[1]=__GLeeLink_WGL_ARB_multisample; __GLeeWGLLoadFunction[2]=__GLeeLink_WGL_ARB_extensions_string; __GLeeWGLLoadFunction[3]=__GLeeLink_WGL_ARB_pixel_format; __GLeeWGLLoadFunction[4]=__GLeeLink_WGL_ARB_make_current_read; __GLeeWGLLoadFunction[5]=__GLeeLink_WGL_ARB_pbuffer; __GLeeWGLLoadFunction[6]=__GLeeLink_WGL_ARB_render_texture; __GLeeWGLLoadFunction[7]=__GLeeLink_WGL_ARB_pixel_format_float; __GLeeWGLLoadFunction[8]=__GLeeLink_WGL_ARB_create_context; __GLeeWGLLoadFunction[9]=__GLeeLink_WGL_EXT_make_current_read; __GLeeWGLLoadFunction[10]=__GLeeLink_WGL_EXT_pixel_format; __GLeeWGLLoadFunction[11]=__GLeeLink_WGL_EXT_pbuffer; __GLeeWGLLoadFunction[12]=__GLeeLink_WGL_EXT_depth_float; __GLeeWGLLoadFunction[13]=__GLeeLink_WGL_3DFX_multisample; __GLeeWGLLoadFunction[14]=__GLeeLink_WGL_EXT_multisample; __GLeeWGLLoadFunction[15]=__GLeeLink_WGL_I3D_digital_video_control; __GLeeWGLLoadFunction[16]=__GLeeLink_WGL_I3D_gamma; __GLeeWGLLoadFunction[17]=__GLeeLink_WGL_I3D_genlock; __GLeeWGLLoadFunction[18]=__GLeeLink_WGL_I3D_image_buffer; __GLeeWGLLoadFunction[19]=__GLeeLink_WGL_I3D_swap_frame_lock; __GLeeWGLLoadFunction[20]=__GLeeLink_WGL_NV_render_depth_texture; __GLeeWGLLoadFunction[21]=__GLeeLink_WGL_NV_render_texture_rectangle; __GLeeWGLLoadFunction[22]=__GLeeLink_WGL_ATI_pixel_format_float; __GLeeWGLLoadFunction[23]=__GLeeLink_WGL_NV_float_buffer; __GLeeWGLLoadFunction[24]=__GLeeLink_WGL_3DL_stereo_control; __GLeeWGLLoadFunction[25]=__GLeeLink_WGL_EXT_pixel_format_packed_float; __GLeeWGLLoadFunction[26]=__GLeeLink_WGL_EXT_framebuffer_sRGB; __GLeeWGLLoadFunction[27]=__GLeeLink_WGL_NV_present_video; __GLeeWGLLoadFunction[28]=__GLeeLink_WGL_NV_swap_group; __GLeeWGLLoadFunction[29]=__GLeeLink_WGL_NV_gpu_affinity; __GLeeWGLLoadFunction[30]=__GLeeLink_WGL_EXT_display_color_table; __GLeeWGLLoadFunction[31]=__GLeeLink_WGL_EXT_extensions_string; __GLeeWGLLoadFunction[32]=__GLeeLink_WGL_EXT_swap_control; __GLeeWGLLoadFunction[33]=__GLeeLink_WGL_NV_vertex_array_range; __GLeeWGLLoadFunction[34]=__GLeeLink_WGL_OML_sync_control; __GLeeWGLLoadFunction[35]=__GLeeLink_WGL_I3D_swap_frame_usage; __GLeeWGLLoadFunction[36]=__GLeeLink_WGL_NV_video_output; } #elif defined(__APPLE__) || defined(__APPLE_CC__) #else /* Linux */ GLuint __GLeeLink_GLX_VERSION_1_3(void) { GLint nLinked=0; #ifdef __GLEE_GLX_VERSION_1_3 if ((GLeeFuncPtr_glXGetFBConfigs = (GLEEPFNGLXGETFBCONFIGSPROC) __GLeeGetProcAddress("glXGetFBConfigs"))!=0) nLinked++; if ((GLeeFuncPtr_glXChooseFBConfig = (GLEEPFNGLXCHOOSEFBCONFIGPROC) __GLeeGetProcAddress("glXChooseFBConfig"))!=0) nLinked++; if ((GLeeFuncPtr_glXGetFBConfigAttrib = (GLEEPFNGLXGETFBCONFIGATTRIBPROC) __GLeeGetProcAddress("glXGetFBConfigAttrib"))!=0) nLinked++; if ((GLeeFuncPtr_glXGetVisualFromFBConfig = (GLEEPFNGLXGETVISUALFROMFBCONFIGPROC) __GLeeGetProcAddress("glXGetVisualFromFBConfig"))!=0) nLinked++; if ((GLeeFuncPtr_glXCreateWindow = (GLEEPFNGLXCREATEWINDOWPROC) __GLeeGetProcAddress("glXCreateWindow"))!=0) nLinked++; if ((GLeeFuncPtr_glXDestroyWindow = (GLEEPFNGLXDESTROYWINDOWPROC) __GLeeGetProcAddress("glXDestroyWindow"))!=0) nLinked++; if ((GLeeFuncPtr_glXCreatePixmap = (GLEEPFNGLXCREATEPIXMAPPROC) __GLeeGetProcAddress("glXCreatePixmap"))!=0) nLinked++; if ((GLeeFuncPtr_glXDestroyPixmap = (GLEEPFNGLXDESTROYPIXMAPPROC) __GLeeGetProcAddress("glXDestroyPixmap"))!=0) nLinked++; if ((GLeeFuncPtr_glXCreatePbuffer = (GLEEPFNGLXCREATEPBUFFERPROC) __GLeeGetProcAddress("glXCreatePbuffer"))!=0) nLinked++; if ((GLeeFuncPtr_glXDestroyPbuffer = (GLEEPFNGLXDESTROYPBUFFERPROC) __GLeeGetProcAddress("glXDestroyPbuffer"))!=0) nLinked++; if ((GLeeFuncPtr_glXQueryDrawable = (GLEEPFNGLXQUERYDRAWABLEPROC) __GLeeGetProcAddress("glXQueryDrawable"))!=0) nLinked++; if ((GLeeFuncPtr_glXCreateNewContext = (GLEEPFNGLXCREATENEWCONTEXTPROC) __GLeeGetProcAddress("glXCreateNewContext"))!=0) nLinked++; if ((GLeeFuncPtr_glXMakeContextCurrent = (GLEEPFNGLXMAKECONTEXTCURRENTPROC) __GLeeGetProcAddress("glXMakeContextCurrent"))!=0) nLinked++; if ((GLeeFuncPtr_glXGetCurrentReadDrawable = (GLEEPFNGLXGETCURRENTREADDRAWABLEPROC) __GLeeGetProcAddress("glXGetCurrentReadDrawable"))!=0) nLinked++; if ((GLeeFuncPtr_glXGetCurrentDisplay = (GLEEPFNGLXGETCURRENTDISPLAYPROC) __GLeeGetProcAddress("glXGetCurrentDisplay"))!=0) nLinked++; if ((GLeeFuncPtr_glXQueryContext = (GLEEPFNGLXQUERYCONTEXTPROC) __GLeeGetProcAddress("glXQueryContext"))!=0) nLinked++; if ((GLeeFuncPtr_glXSelectEvent = (GLEEPFNGLXSELECTEVENTPROC) __GLeeGetProcAddress("glXSelectEvent"))!=0) nLinked++; if ((GLeeFuncPtr_glXGetSelectedEvent = (GLEEPFNGLXGETSELECTEDEVENTPROC) __GLeeGetProcAddress("glXGetSelectedEvent"))!=0) nLinked++; #endif if (nLinked==18) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GLX_VERSION_1_4(void) { GLint nLinked=0; #ifdef __GLEE_GLX_VERSION_1_4 if ((GLeeFuncPtr_glXGetProcAddress = (GLEEPFNGLXGETPROCADDRESSPROC) __GLeeGetProcAddress("glXGetProcAddress"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GLX_ARB_multisample(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GLX_ARB_fbconfig_float(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GLX_ARB_create_context(void) { GLint nLinked=0; #ifdef __GLEE_GLX_ARB_create_context if ((GLeeFuncPtr_glXCreateContextAttribsARB = (GLEEPFNGLXCREATECONTEXTATTRIBSARBPROC) __GLeeGetProcAddress("glXCreateContextAttribsARB"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GLX_SGIS_multisample(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GLX_EXT_visual_info(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GLX_SGI_swap_control(void) { GLint nLinked=0; #ifdef __GLEE_GLX_SGI_swap_control if ((GLeeFuncPtr_glXSwapIntervalSGI = (GLEEPFNGLXSWAPINTERVALSGIPROC) __GLeeGetProcAddress("glXSwapIntervalSGI"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GLX_SGI_video_sync(void) { GLint nLinked=0; #ifdef __GLEE_GLX_SGI_video_sync if ((GLeeFuncPtr_glXGetVideoSyncSGI = (GLEEPFNGLXGETVIDEOSYNCSGIPROC) __GLeeGetProcAddress("glXGetVideoSyncSGI"))!=0) nLinked++; if ((GLeeFuncPtr_glXWaitVideoSyncSGI = (GLEEPFNGLXWAITVIDEOSYNCSGIPROC) __GLeeGetProcAddress("glXWaitVideoSyncSGI"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GLX_SGI_make_current_read(void) { GLint nLinked=0; #ifdef __GLEE_GLX_SGI_make_current_read if ((GLeeFuncPtr_glXMakeCurrentReadSGI = (GLEEPFNGLXMAKECURRENTREADSGIPROC) __GLeeGetProcAddress("glXMakeCurrentReadSGI"))!=0) nLinked++; if ((GLeeFuncPtr_glXGetCurrentReadDrawableSGI = (GLEEPFNGLXGETCURRENTREADDRAWABLESGIPROC) __GLeeGetProcAddress("glXGetCurrentReadDrawableSGI"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GLX_EXT_visual_rating(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GLX_EXT_import_context(void) { GLint nLinked=0; #ifdef __GLEE_GLX_EXT_import_context if ((GLeeFuncPtr_glXGetCurrentDisplayEXT = (GLEEPFNGLXGETCURRENTDISPLAYEXTPROC) __GLeeGetProcAddress("glXGetCurrentDisplayEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glXQueryContextInfoEXT = (GLEEPFNGLXQUERYCONTEXTINFOEXTPROC) __GLeeGetProcAddress("glXQueryContextInfoEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glXGetContextIDEXT = (GLEEPFNGLXGETCONTEXTIDEXTPROC) __GLeeGetProcAddress("glXGetContextIDEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glXImportContextEXT = (GLEEPFNGLXIMPORTCONTEXTEXTPROC) __GLeeGetProcAddress("glXImportContextEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glXFreeContextEXT = (GLEEPFNGLXFREECONTEXTEXTPROC) __GLeeGetProcAddress("glXFreeContextEXT"))!=0) nLinked++; #endif if (nLinked==5) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GLX_SGIX_fbconfig(void) { GLint nLinked=0; #ifdef __GLEE_GLX_SGIX_fbconfig if ((GLeeFuncPtr_glXGetFBConfigAttribSGIX = (GLEEPFNGLXGETFBCONFIGATTRIBSGIXPROC) __GLeeGetProcAddress("glXGetFBConfigAttribSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glXChooseFBConfigSGIX = (GLEEPFNGLXCHOOSEFBCONFIGSGIXPROC) __GLeeGetProcAddress("glXChooseFBConfigSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glXCreateGLXPixmapWithConfigSGIX = (GLEEPFNGLXCREATEGLXPIXMAPWITHCONFIGSGIXPROC) __GLeeGetProcAddress("glXCreateGLXPixmapWithConfigSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glXCreateContextWithConfigSGIX = (GLEEPFNGLXCREATECONTEXTWITHCONFIGSGIXPROC) __GLeeGetProcAddress("glXCreateContextWithConfigSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glXGetVisualFromFBConfigSGIX = (GLEEPFNGLXGETVISUALFROMFBCONFIGSGIXPROC) __GLeeGetProcAddress("glXGetVisualFromFBConfigSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glXGetFBConfigFromVisualSGIX = (GLEEPFNGLXGETFBCONFIGFROMVISUALSGIXPROC) __GLeeGetProcAddress("glXGetFBConfigFromVisualSGIX"))!=0) nLinked++; #endif if (nLinked==6) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GLX_SGIX_pbuffer(void) { GLint nLinked=0; #ifdef __GLEE_GLX_SGIX_pbuffer if ((GLeeFuncPtr_glXCreateGLXPbufferSGIX = (GLEEPFNGLXCREATEGLXPBUFFERSGIXPROC) __GLeeGetProcAddress("glXCreateGLXPbufferSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glXDestroyGLXPbufferSGIX = (GLEEPFNGLXDESTROYGLXPBUFFERSGIXPROC) __GLeeGetProcAddress("glXDestroyGLXPbufferSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glXQueryGLXPbufferSGIX = (GLEEPFNGLXQUERYGLXPBUFFERSGIXPROC) __GLeeGetProcAddress("glXQueryGLXPbufferSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glXSelectEventSGIX = (GLEEPFNGLXSELECTEVENTSGIXPROC) __GLeeGetProcAddress("glXSelectEventSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glXGetSelectedEventSGIX = (GLEEPFNGLXGETSELECTEDEVENTSGIXPROC) __GLeeGetProcAddress("glXGetSelectedEventSGIX"))!=0) nLinked++; #endif if (nLinked==5) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GLX_SGI_cushion(void) { GLint nLinked=0; #ifdef __GLEE_GLX_SGI_cushion if ((GLeeFuncPtr_glXCushionSGI = (GLEEPFNGLXCUSHIONSGIPROC) __GLeeGetProcAddress("glXCushionSGI"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GLX_SGIX_video_resize(void) { GLint nLinked=0; #ifdef __GLEE_GLX_SGIX_video_resize if ((GLeeFuncPtr_glXBindChannelToWindowSGIX = (GLEEPFNGLXBINDCHANNELTOWINDOWSGIXPROC) __GLeeGetProcAddress("glXBindChannelToWindowSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glXChannelRectSGIX = (GLEEPFNGLXCHANNELRECTSGIXPROC) __GLeeGetProcAddress("glXChannelRectSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glXQueryChannelRectSGIX = (GLEEPFNGLXQUERYCHANNELRECTSGIXPROC) __GLeeGetProcAddress("glXQueryChannelRectSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glXQueryChannelDeltasSGIX = (GLEEPFNGLXQUERYCHANNELDELTASSGIXPROC) __GLeeGetProcAddress("glXQueryChannelDeltasSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glXChannelRectSyncSGIX = (GLEEPFNGLXCHANNELRECTSYNCSGIXPROC) __GLeeGetProcAddress("glXChannelRectSyncSGIX"))!=0) nLinked++; #endif if (nLinked==5) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GLX_SGIX_swap_group(void) { GLint nLinked=0; #ifdef __GLEE_GLX_SGIX_swap_group if ((GLeeFuncPtr_glXJoinSwapGroupSGIX = (GLEEPFNGLXJOINSWAPGROUPSGIXPROC) __GLeeGetProcAddress("glXJoinSwapGroupSGIX"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GLX_SGIX_swap_barrier(void) { GLint nLinked=0; #ifdef __GLEE_GLX_SGIX_swap_barrier if ((GLeeFuncPtr_glXBindSwapBarrierSGIX = (GLEEPFNGLXBINDSWAPBARRIERSGIXPROC) __GLeeGetProcAddress("glXBindSwapBarrierSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glXQueryMaxSwapBarriersSGIX = (GLEEPFNGLXQUERYMAXSWAPBARRIERSSGIXPROC) __GLeeGetProcAddress("glXQueryMaxSwapBarriersSGIX"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GLX_SGIS_blended_overlay(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GLX_SGIS_shared_multisample(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GLX_SUN_get_transparent_index(void) { GLint nLinked=0; #ifdef __GLEE_GLX_SUN_get_transparent_index if ((GLeeFuncPtr_glXGetTransparentIndexSUN = (GLEEPFNGLXGETTRANSPARENTINDEXSUNPROC) __GLeeGetProcAddress("glXGetTransparentIndexSUN"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GLX_3DFX_multisample(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GLX_MESA_copy_sub_buffer(void) { GLint nLinked=0; #ifdef __GLEE_GLX_MESA_copy_sub_buffer if ((GLeeFuncPtr_glXCopySubBufferMESA = (GLEEPFNGLXCOPYSUBBUFFERMESAPROC) __GLeeGetProcAddress("glXCopySubBufferMESA"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GLX_MESA_pixmap_colormap(void) { GLint nLinked=0; #ifdef __GLEE_GLX_MESA_pixmap_colormap if ((GLeeFuncPtr_glXCreateGLXPixmapMESA = (GLEEPFNGLXCREATEGLXPIXMAPMESAPROC) __GLeeGetProcAddress("glXCreateGLXPixmapMESA"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GLX_MESA_release_buffers(void) { GLint nLinked=0; #ifdef __GLEE_GLX_MESA_release_buffers if ((GLeeFuncPtr_glXReleaseBuffersMESA = (GLEEPFNGLXRELEASEBUFFERSMESAPROC) __GLeeGetProcAddress("glXReleaseBuffersMESA"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GLX_MESA_set_3dfx_mode(void) { GLint nLinked=0; #ifdef __GLEE_GLX_MESA_set_3dfx_mode if ((GLeeFuncPtr_glXSet3DfxModeMESA = (GLEEPFNGLXSET3DFXMODEMESAPROC) __GLeeGetProcAddress("glXSet3DfxModeMESA"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GLX_SGIX_visual_select_group(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GLX_OML_swap_method(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GLX_OML_sync_control(void) { GLint nLinked=0; #ifdef __GLEE_GLX_OML_sync_control if ((GLeeFuncPtr_glXGetSyncValuesOML = (GLEEPFNGLXGETSYNCVALUESOMLPROC) __GLeeGetProcAddress("glXGetSyncValuesOML"))!=0) nLinked++; if ((GLeeFuncPtr_glXGetMscRateOML = (GLEEPFNGLXGETMSCRATEOMLPROC) __GLeeGetProcAddress("glXGetMscRateOML"))!=0) nLinked++; if ((GLeeFuncPtr_glXSwapBuffersMscOML = (GLEEPFNGLXSWAPBUFFERSMSCOMLPROC) __GLeeGetProcAddress("glXSwapBuffersMscOML"))!=0) nLinked++; if ((GLeeFuncPtr_glXWaitForMscOML = (GLEEPFNGLXWAITFORMSCOMLPROC) __GLeeGetProcAddress("glXWaitForMscOML"))!=0) nLinked++; if ((GLeeFuncPtr_glXWaitForSbcOML = (GLEEPFNGLXWAITFORSBCOMLPROC) __GLeeGetProcAddress("glXWaitForSbcOML"))!=0) nLinked++; #endif if (nLinked==5) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GLX_NV_float_buffer(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GLX_SGIX_hyperpipe(void) { GLint nLinked=0; #ifdef __GLEE_GLX_SGIX_hyperpipe if ((GLeeFuncPtr_glXQueryHyperpipeNetworkSGIX = (GLEEPFNGLXQUERYHYPERPIPENETWORKSGIXPROC) __GLeeGetProcAddress("glXQueryHyperpipeNetworkSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glXHyperpipeConfigSGIX = (GLEEPFNGLXHYPERPIPECONFIGSGIXPROC) __GLeeGetProcAddress("glXHyperpipeConfigSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glXQueryHyperpipeConfigSGIX = (GLEEPFNGLXQUERYHYPERPIPECONFIGSGIXPROC) __GLeeGetProcAddress("glXQueryHyperpipeConfigSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glXDestroyHyperpipeConfigSGIX = (GLEEPFNGLXDESTROYHYPERPIPECONFIGSGIXPROC) __GLeeGetProcAddress("glXDestroyHyperpipeConfigSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glXBindHyperpipeSGIX = (GLEEPFNGLXBINDHYPERPIPESGIXPROC) __GLeeGetProcAddress("glXBindHyperpipeSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glXQueryHyperpipeBestAttribSGIX = (GLEEPFNGLXQUERYHYPERPIPEBESTATTRIBSGIXPROC) __GLeeGetProcAddress("glXQueryHyperpipeBestAttribSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glXHyperpipeAttribSGIX = (GLEEPFNGLXHYPERPIPEATTRIBSGIXPROC) __GLeeGetProcAddress("glXHyperpipeAttribSGIX"))!=0) nLinked++; if ((GLeeFuncPtr_glXQueryHyperpipeAttribSGIX = (GLEEPFNGLXQUERYHYPERPIPEATTRIBSGIXPROC) __GLeeGetProcAddress("glXQueryHyperpipeAttribSGIX"))!=0) nLinked++; #endif if (nLinked==8) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GLX_MESA_agp_offset(void) { GLint nLinked=0; #ifdef __GLEE_GLX_MESA_agp_offset if ((GLeeFuncPtr_glXGetAGPOffsetMESA = (GLEEPFNGLXGETAGPOFFSETMESAPROC) __GLeeGetProcAddress("glXGetAGPOffsetMESA"))!=0) nLinked++; #endif if (nLinked==1) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GLX_EXT_fbconfig_packed_float(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GLX_EXT_framebuffer_sRGB(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GLX_EXT_texture_from_pixmap(void) { GLint nLinked=0; #ifdef __GLEE_GLX_EXT_texture_from_pixmap if ((GLeeFuncPtr_glXBindTexImageEXT = (GLEEPFNGLXBINDTEXIMAGEEXTPROC) __GLeeGetProcAddress("glXBindTexImageEXT"))!=0) nLinked++; if ((GLeeFuncPtr_glXReleaseTexImageEXT = (GLEEPFNGLXRELEASETEXIMAGEEXTPROC) __GLeeGetProcAddress("glXReleaseTexImageEXT"))!=0) nLinked++; #endif if (nLinked==2) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLuint __GLeeLink_GLX_NV_present_video(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GLX_NV_video_out(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GLX_NV_swap_group(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GLX_EXT_scene_marker(void) {return GLEE_LINK_COMPLETE;} GLuint __GLeeLink_GLX_NV_video_output(void) { GLint nLinked=0; #ifdef __GLEE_GLX_NV_video_output if ((GLeeFuncPtr_glXGetVideoDeviceNV = (GLEEPFNGLXGETVIDEODEVICENVPROC) __GLeeGetProcAddress("glXGetVideoDeviceNV"))!=0) nLinked++; if ((GLeeFuncPtr_glXReleaseVideoDeviceNV = (GLEEPFNGLXRELEASEVIDEODEVICENVPROC) __GLeeGetProcAddress("glXReleaseVideoDeviceNV"))!=0) nLinked++; if ((GLeeFuncPtr_glXBindVideoImageNV = (GLEEPFNGLXBINDVIDEOIMAGENVPROC) __GLeeGetProcAddress("glXBindVideoImageNV"))!=0) nLinked++; if ((GLeeFuncPtr_glXReleaseVideoImageNV = (GLEEPFNGLXRELEASEVIDEOIMAGENVPROC) __GLeeGetProcAddress("glXReleaseVideoImageNV"))!=0) nLinked++; if ((GLeeFuncPtr_glXSendPbufferToVideoNV = (GLEEPFNGLXSENDPBUFFERTOVIDEONVPROC) __GLeeGetProcAddress("glXSendPbufferToVideoNV"))!=0) nLinked++; if ((GLeeFuncPtr_glXGetVideoInfoNV = (GLEEPFNGLXGETVIDEOINFONVPROC) __GLeeGetProcAddress("glXGetVideoInfoNV"))!=0) nLinked++; #endif if (nLinked==6) return GLEE_LINK_COMPLETE; if (nLinked==0) return GLEE_LINK_FAIL; return GLEE_LINK_PARTIAL; } GLEE_LINK_FUNCTION __GLeeGLXLoadFunction[40]; void initGLXLoadFunctions(void) { __GLeeGLXLoadFunction[0]=__GLeeLink_GLX_VERSION_1_3; __GLeeGLXLoadFunction[1]=__GLeeLink_GLX_VERSION_1_4; __GLeeGLXLoadFunction[2]=__GLeeLink_GLX_ARB_multisample; __GLeeGLXLoadFunction[3]=__GLeeLink_GLX_ARB_fbconfig_float; __GLeeGLXLoadFunction[4]=__GLeeLink_GLX_ARB_create_context; __GLeeGLXLoadFunction[5]=__GLeeLink_GLX_SGIS_multisample; __GLeeGLXLoadFunction[6]=__GLeeLink_GLX_EXT_visual_info; __GLeeGLXLoadFunction[7]=__GLeeLink_GLX_SGI_swap_control; __GLeeGLXLoadFunction[8]=__GLeeLink_GLX_SGI_video_sync; __GLeeGLXLoadFunction[9]=__GLeeLink_GLX_SGI_make_current_read; __GLeeGLXLoadFunction[10]=__GLeeLink_GLX_EXT_visual_rating; __GLeeGLXLoadFunction[11]=__GLeeLink_GLX_EXT_import_context; __GLeeGLXLoadFunction[12]=__GLeeLink_GLX_SGIX_fbconfig; __GLeeGLXLoadFunction[13]=__GLeeLink_GLX_SGIX_pbuffer; __GLeeGLXLoadFunction[14]=__GLeeLink_GLX_SGI_cushion; __GLeeGLXLoadFunction[15]=__GLeeLink_GLX_SGIX_video_resize; __GLeeGLXLoadFunction[16]=__GLeeLink_GLX_SGIX_swap_group; __GLeeGLXLoadFunction[17]=__GLeeLink_GLX_SGIX_swap_barrier; __GLeeGLXLoadFunction[18]=__GLeeLink_GLX_SGIS_blended_overlay; __GLeeGLXLoadFunction[19]=__GLeeLink_GLX_SGIS_shared_multisample; __GLeeGLXLoadFunction[20]=__GLeeLink_GLX_SUN_get_transparent_index; __GLeeGLXLoadFunction[21]=__GLeeLink_GLX_3DFX_multisample; __GLeeGLXLoadFunction[22]=__GLeeLink_GLX_MESA_copy_sub_buffer; __GLeeGLXLoadFunction[23]=__GLeeLink_GLX_MESA_pixmap_colormap; __GLeeGLXLoadFunction[24]=__GLeeLink_GLX_MESA_release_buffers; __GLeeGLXLoadFunction[25]=__GLeeLink_GLX_MESA_set_3dfx_mode; __GLeeGLXLoadFunction[26]=__GLeeLink_GLX_SGIX_visual_select_group; __GLeeGLXLoadFunction[27]=__GLeeLink_GLX_OML_swap_method; __GLeeGLXLoadFunction[28]=__GLeeLink_GLX_OML_sync_control; __GLeeGLXLoadFunction[29]=__GLeeLink_GLX_NV_float_buffer; __GLeeGLXLoadFunction[30]=__GLeeLink_GLX_SGIX_hyperpipe; __GLeeGLXLoadFunction[31]=__GLeeLink_GLX_MESA_agp_offset; __GLeeGLXLoadFunction[32]=__GLeeLink_GLX_EXT_fbconfig_packed_float; __GLeeGLXLoadFunction[33]=__GLeeLink_GLX_EXT_framebuffer_sRGB; __GLeeGLXLoadFunction[34]=__GLeeLink_GLX_EXT_texture_from_pixmap; __GLeeGLXLoadFunction[35]=__GLeeLink_GLX_NV_present_video; __GLeeGLXLoadFunction[36]=__GLeeLink_GLX_NV_video_out; __GLeeGLXLoadFunction[37]=__GLeeLink_GLX_NV_swap_group; __GLeeGLXLoadFunction[38]=__GLeeLink_GLX_EXT_scene_marker; __GLeeGLXLoadFunction[39]=__GLeeLink_GLX_NV_video_output; } #endif /* end Linux */ /***************************************************************** * GLee internal types *****************************************************************/ typedef struct { char ** names; int * lengths; int numNames; }ExtensionList; /***************************************************************** * GLee internal variables *****************************************************************/ char GLeeErrorString[256]=""; /***************************************************************** * GLee internal functions *****************************************************************/ void __GLeeExtList_init(ExtensionList *extList) { extList->names=0; extList->lengths=0; extList->numNames=0; } void __GLeeExtList_clean(ExtensionList *extList) { int a; for (a=0;anumNames;a++) { if (extList->names[a]!=0) free((void *)extList->names[a]); } if (extList->names!=0) free((void *)extList->names); if (extList->lengths!=0) free((void *)extList->lengths); extList->names=0; extList->lengths=0; extList->numNames=0; } void __GLeeExtList_add(ExtensionList *extList, const char * extName) { int length=strlen(extName)+1; int i=extList->numNames; int n=i+1; if (i==0) { extList->lengths=(int *)malloc(sizeof(int)); extList->names=(char **)malloc(sizeof(char *)); }else { extList->lengths=(int *)realloc((void *)extList->lengths, n*sizeof(int)); extList->names=(char **)realloc((void *)extList->names, n*sizeof(char *)); } extList->names[i]=(char *)malloc(length*sizeof(char)); strcpy(extList->names[i],extName); extList->lengths[i]=length; extList->numNames++; } const char *__GLeeGetExtStrPlat( void ) { #ifdef WIN32 if (!_GLEE_WGL_ARB_extensions_string) wglGetExtensionsStringARB = (GLEEPFNWGLGETEXTENSIONSSTRINGARBPROC) wglGetProcAddress("wglGetExtensionsStringARB"); if (wglGetExtensionsStringARB) return (const char *)wglGetExtensionsStringARB(wglGetCurrentDC()); #elif defined(__APPLE__) || defined(__APPLE_CC__) #else Display *dpy=glXGetCurrentDisplay(); if(dpy) { int dpynr=DefaultScreen(dpy); return (const char*)glXQueryExtensionsString(dpy,dpynr); } #endif return 0; } void __GLeeWriteError(const char * errorStr) { int a=0; for (a=0;a<256;a++) { GLeeErrorString[a]=errorStr[a]; } GLeeErrorString[255]='\0'; } int __GLeeGetVersionNumber(char *versionStr) { int major=(int)versionStr[0]-(int)'0'; int minor=(int)versionStr[2]-(int)'0'; return major<<8 | minor; } GLboolean __GLeeGetExtensions(ExtensionList* extList) { const char * platExtStr; const char * glExtStr; char * extStr; char emptyString[1] = ""; char extensionName[1024]; int a,b; int totalExtStrLen; int platExtStrLen; int addASpace; /* read the platform specific extension string */ platExtStr=__GLeeGetExtStrPlat(); if (!platExtStr) platExtStr=emptyString; glExtStr=(const char *)glGetString(GL_EXTENSIONS); if (glExtStr==0) { __GLeeWriteError("glGetString(GL_EXTENSIONS) failed."); return GL_FALSE; } /* allocate the extension string */ platExtStrLen = strlen(platExtStr); totalExtStrLen = platExtStrLen + strlen(glExtStr); extStr=(char *)malloc( (totalExtStrLen+2) * sizeof(char) ); /* we add 2 to allow for an extra space and a null terminator */ /* If the last character of platExtStr is not a space, we need to add one when we concatenate the extension strings*/ addASpace = 0; if ( platExtStrLen > 2 ) { if ( platExtStr[ platExtStrLen-1 ] != ' ') { addASpace = 1; } } /* concatenate the two extension strings */ if ( addASpace ) { sprintf(extStr,"%s %s",platExtStr,glExtStr); } else { sprintf(extStr,"%s%s",platExtStr,glExtStr); } /* extract the extensions */ for ( a=0;anumNames; int a; for (a=0;anames[a],name)==0) return GL_TRUE; } return GL_FALSE; } GLEE_EXTERN GLint __GLeeGetExtensionNumber(const char *extensionName, int type) { int a; switch (type) { case 0: for (a=0;a<__GLeeGLNumExtensions;a++) if (strcmp(extensionName,__GLeeGLExtensionNames[a])==0) return a; return -1; #ifdef WIN32 case 1: for (a=0;a<__GLeeWGLNumExtensions;a++) if (strcmp(extensionName,__GLeeWGLExtensionNames[a])==0) return a; return -1; #elif defined(__APPLE__) || defined(__APPLE_CC__) #else case 2: for (a=0;a<__GLeeGLXNumExtensions;a++) if (strcmp(extensionName,__GLeeGLXExtensionNames[a])==0) return a; return -1; #endif } return -1; } /***************************************************************** * GLee external functions *****************************************************************/ #ifdef WIN32 GLEE_EXTERN const char * GLeeGetExtStrWGL( void ) { return __GLeeGetExtStrPlat(); } #elif defined(__APPLE__) || defined(__APPLE_CC__) #else GLEE_EXTERN const char * GLeeGetExtStrGLX( void ) { return __GLeeGetExtStrPlat(); } #endif GLEE_EXTERN const char * GLeeGetExtStrGL( void ) { return (const char *)glGetString(GL_EXTENSIONS); } GLEE_EXTERN const char * GLeeGetErrorString( void ) { return GLeeErrorString; } GLboolean __GLeeInitedLoadFunctions=GL_FALSE; GLEE_EXTERN GLint GLeeForceLink(const char * extensionName) { int type=0; int extNum; int len=strlen(extensionName); if (len<5) return GLEE_LINK_FAIL; if (!__GLeeInitedLoadFunctions) { if (!__GLeeInited) GLeeInit(); initGLLoadFunctions(); #ifdef WIN32 initWGLLoadFunctions(); #elif defined(__APPLE__) || defined(__APPLE_CC__) #else initGLXLoadFunctions(); #endif __GLeeInitedLoadFunctions=GL_TRUE; } if (extensionName[0]=='W') type=1; else if (extensionName[2]=='X') type=2; extNum=__GLeeGetExtensionNumber(extensionName,type); if (extNum==-1) return GLEE_LINK_FAIL; if (type==0) return __GLeeGLLoadFunction[extNum](); #ifdef WIN32 if (type==1) return __GLeeWGLLoadFunction[extNum](); #elif defined(__APPLE__) || defined(__APPLE_CC__) #else if (type==2) return __GLeeGLXLoadFunction[extNum](); #endif return GLEE_LINK_FAIL; } GLEE_EXTERN GLboolean GLeeEnabled(GLboolean * extensionQueryingVariable) { if (!__GLeeInited) GLeeInit(); return *extensionQueryingVariable; } GLEE_EXTERN GLboolean GLeeInit( void ) { int version; ExtensionList extensionNames; if (__GLeeInited) { return GL_FALSE; } __GLeeExtList_init(&extensionNames); if (!__GLeeGetExtensions(&extensionNames)) { __GLeeWriteError("GL extension querying failed."); __GLeeExtList_clean(&extensionNames); return GL_FALSE; } version=__GLeeGetVersionNumber((char *)glGetString(GL_VERSION)); __GLeeInited = GL_TRUE; /***************************************************************** * Autogenerated linking functions *****************************************************************/ if (version>=258) { _GLEE_VERSION_1_2 = GL_TRUE; __GLeeLink_GL_VERSION_1_2(); } if (__GLeeCheckExtension("GL_ARB_imaging", &extensionNames) ) { _GLEE_ARB_imaging = GL_TRUE; __GLeeLink_GL_ARB_imaging(); } if (version>=259) { _GLEE_VERSION_1_3 = GL_TRUE; __GLeeLink_GL_VERSION_1_3(); } if (version>=260) { _GLEE_VERSION_1_4 = GL_TRUE; __GLeeLink_GL_VERSION_1_4(); } if (version>=261) { _GLEE_VERSION_1_5 = GL_TRUE; __GLeeLink_GL_VERSION_1_5(); } if (version>=512) { _GLEE_VERSION_2_0 = GL_TRUE; __GLeeLink_GL_VERSION_2_0(); } if (version>=513) { _GLEE_VERSION_2_1 = GL_TRUE; __GLeeLink_GL_VERSION_2_1(); } if (version>=768) { _GLEE_VERSION_3_0 = GL_TRUE; __GLeeLink_GL_VERSION_3_0(); } if (__GLeeCheckExtension("GL_ARB_multitexture", &extensionNames) ) { _GLEE_ARB_multitexture = GL_TRUE; __GLeeLink_GL_ARB_multitexture(); } if (__GLeeCheckExtension("GL_ARB_transpose_matrix", &extensionNames) ) { _GLEE_ARB_transpose_matrix = GL_TRUE; __GLeeLink_GL_ARB_transpose_matrix(); } if (__GLeeCheckExtension("GL_ARB_multisample", &extensionNames) ) { _GLEE_ARB_multisample = GL_TRUE; __GLeeLink_GL_ARB_multisample(); } if (__GLeeCheckExtension("GL_ARB_texture_env_add", &extensionNames) ) { _GLEE_ARB_texture_env_add = GL_TRUE; __GLeeLink_GL_ARB_texture_env_add(); } if (__GLeeCheckExtension("GL_ARB_texture_cube_map", &extensionNames) ) { _GLEE_ARB_texture_cube_map = GL_TRUE; __GLeeLink_GL_ARB_texture_cube_map(); } if (__GLeeCheckExtension("GL_ARB_texture_compression", &extensionNames) ) { _GLEE_ARB_texture_compression = GL_TRUE; __GLeeLink_GL_ARB_texture_compression(); } if (__GLeeCheckExtension("GL_ARB_texture_border_clamp", &extensionNames) ) { _GLEE_ARB_texture_border_clamp = GL_TRUE; __GLeeLink_GL_ARB_texture_border_clamp(); } if (__GLeeCheckExtension("GL_ARB_point_parameters", &extensionNames) ) { _GLEE_ARB_point_parameters = GL_TRUE; __GLeeLink_GL_ARB_point_parameters(); } if (__GLeeCheckExtension("GL_ARB_vertex_blend", &extensionNames) ) { _GLEE_ARB_vertex_blend = GL_TRUE; __GLeeLink_GL_ARB_vertex_blend(); } if (__GLeeCheckExtension("GL_ARB_matrix_palette", &extensionNames) ) { _GLEE_ARB_matrix_palette = GL_TRUE; __GLeeLink_GL_ARB_matrix_palette(); } if (__GLeeCheckExtension("GL_ARB_texture_env_combine", &extensionNames) ) { _GLEE_ARB_texture_env_combine = GL_TRUE; __GLeeLink_GL_ARB_texture_env_combine(); } if (__GLeeCheckExtension("GL_ARB_texture_env_crossbar", &extensionNames) ) { _GLEE_ARB_texture_env_crossbar = GL_TRUE; __GLeeLink_GL_ARB_texture_env_crossbar(); } if (__GLeeCheckExtension("GL_ARB_texture_env_dot3", &extensionNames) ) { _GLEE_ARB_texture_env_dot3 = GL_TRUE; __GLeeLink_GL_ARB_texture_env_dot3(); } if (__GLeeCheckExtension("GL_ARB_texture_mirrored_repeat", &extensionNames) ) { _GLEE_ARB_texture_mirrored_repeat = GL_TRUE; __GLeeLink_GL_ARB_texture_mirrored_repeat(); } if (__GLeeCheckExtension("GL_ARB_depth_texture", &extensionNames) ) { _GLEE_ARB_depth_texture = GL_TRUE; __GLeeLink_GL_ARB_depth_texture(); } if (__GLeeCheckExtension("GL_ARB_shadow", &extensionNames) ) { _GLEE_ARB_shadow = GL_TRUE; __GLeeLink_GL_ARB_shadow(); } if (__GLeeCheckExtension("GL_ARB_shadow_ambient", &extensionNames) ) { _GLEE_ARB_shadow_ambient = GL_TRUE; __GLeeLink_GL_ARB_shadow_ambient(); } if (__GLeeCheckExtension("GL_ARB_window_pos", &extensionNames) ) { _GLEE_ARB_window_pos = GL_TRUE; __GLeeLink_GL_ARB_window_pos(); } if (__GLeeCheckExtension("GL_ARB_vertex_program", &extensionNames) ) { _GLEE_ARB_vertex_program = GL_TRUE; __GLeeLink_GL_ARB_vertex_program(); } if (__GLeeCheckExtension("GL_ARB_fragment_program", &extensionNames) ) { _GLEE_ARB_fragment_program = GL_TRUE; __GLeeLink_GL_ARB_fragment_program(); } if (__GLeeCheckExtension("GL_ARB_vertex_buffer_object", &extensionNames) ) { _GLEE_ARB_vertex_buffer_object = GL_TRUE; __GLeeLink_GL_ARB_vertex_buffer_object(); } if (__GLeeCheckExtension("GL_ARB_occlusion_query", &extensionNames) ) { _GLEE_ARB_occlusion_query = GL_TRUE; __GLeeLink_GL_ARB_occlusion_query(); } if (__GLeeCheckExtension("GL_ARB_shader_objects", &extensionNames) ) { _GLEE_ARB_shader_objects = GL_TRUE; __GLeeLink_GL_ARB_shader_objects(); } if (__GLeeCheckExtension("GL_ARB_vertex_shader", &extensionNames) ) { _GLEE_ARB_vertex_shader = GL_TRUE; __GLeeLink_GL_ARB_vertex_shader(); } if (__GLeeCheckExtension("GL_ARB_fragment_shader", &extensionNames) ) { _GLEE_ARB_fragment_shader = GL_TRUE; __GLeeLink_GL_ARB_fragment_shader(); } if (__GLeeCheckExtension("GL_ARB_shading_language_100", &extensionNames) ) { _GLEE_ARB_shading_language_100 = GL_TRUE; __GLeeLink_GL_ARB_shading_language_100(); } if (__GLeeCheckExtension("GL_ARB_texture_non_power_of_two", &extensionNames) ) { _GLEE_ARB_texture_non_power_of_two = GL_TRUE; __GLeeLink_GL_ARB_texture_non_power_of_two(); } if (__GLeeCheckExtension("GL_ARB_point_sprite", &extensionNames) ) { _GLEE_ARB_point_sprite = GL_TRUE; __GLeeLink_GL_ARB_point_sprite(); } if (__GLeeCheckExtension("GL_ARB_fragment_program_shadow", &extensionNames) ) { _GLEE_ARB_fragment_program_shadow = GL_TRUE; __GLeeLink_GL_ARB_fragment_program_shadow(); } if (__GLeeCheckExtension("GL_ARB_draw_buffers", &extensionNames) ) { _GLEE_ARB_draw_buffers = GL_TRUE; __GLeeLink_GL_ARB_draw_buffers(); } if (__GLeeCheckExtension("GL_ARB_texture_rectangle", &extensionNames) ) { _GLEE_ARB_texture_rectangle = GL_TRUE; __GLeeLink_GL_ARB_texture_rectangle(); } if (__GLeeCheckExtension("GL_ARB_color_buffer_float", &extensionNames) ) { _GLEE_ARB_color_buffer_float = GL_TRUE; __GLeeLink_GL_ARB_color_buffer_float(); } if (__GLeeCheckExtension("GL_ARB_half_float_pixel", &extensionNames) ) { _GLEE_ARB_half_float_pixel = GL_TRUE; __GLeeLink_GL_ARB_half_float_pixel(); } if (__GLeeCheckExtension("GL_ARB_texture_float", &extensionNames) ) { _GLEE_ARB_texture_float = GL_TRUE; __GLeeLink_GL_ARB_texture_float(); } if (__GLeeCheckExtension("GL_ARB_pixel_buffer_object", &extensionNames) ) { _GLEE_ARB_pixel_buffer_object = GL_TRUE; __GLeeLink_GL_ARB_pixel_buffer_object(); } if (__GLeeCheckExtension("GL_ARB_depth_buffer_float", &extensionNames) ) { _GLEE_ARB_depth_buffer_float = GL_TRUE; __GLeeLink_GL_ARB_depth_buffer_float(); } if (__GLeeCheckExtension("GL_ARB_draw_instanced", &extensionNames) ) { _GLEE_ARB_draw_instanced = GL_TRUE; __GLeeLink_GL_ARB_draw_instanced(); } if (__GLeeCheckExtension("GL_ARB_framebuffer_object", &extensionNames) ) { _GLEE_ARB_framebuffer_object = GL_TRUE; __GLeeLink_GL_ARB_framebuffer_object(); } if (__GLeeCheckExtension("GL_ARB_framebuffer_sRGB", &extensionNames) ) { _GLEE_ARB_framebuffer_sRGB = GL_TRUE; __GLeeLink_GL_ARB_framebuffer_sRGB(); } if (__GLeeCheckExtension("GL_ARB_geometry_shader4", &extensionNames) ) { _GLEE_ARB_geometry_shader4 = GL_TRUE; __GLeeLink_GL_ARB_geometry_shader4(); } if (__GLeeCheckExtension("GL_ARB_half_float_vertex", &extensionNames) ) { _GLEE_ARB_half_float_vertex = GL_TRUE; __GLeeLink_GL_ARB_half_float_vertex(); } if (__GLeeCheckExtension("GL_ARB_instanced_arrays", &extensionNames) ) { _GLEE_ARB_instanced_arrays = GL_TRUE; __GLeeLink_GL_ARB_instanced_arrays(); } if (__GLeeCheckExtension("GL_ARB_map_buffer_range", &extensionNames) ) { _GLEE_ARB_map_buffer_range = GL_TRUE; __GLeeLink_GL_ARB_map_buffer_range(); } if (__GLeeCheckExtension("GL_ARB_texture_buffer_object", &extensionNames) ) { _GLEE_ARB_texture_buffer_object = GL_TRUE; __GLeeLink_GL_ARB_texture_buffer_object(); } if (__GLeeCheckExtension("GL_ARB_texture_compression_rgtc", &extensionNames) ) { _GLEE_ARB_texture_compression_rgtc = GL_TRUE; __GLeeLink_GL_ARB_texture_compression_rgtc(); } if (__GLeeCheckExtension("GL_ARB_texture_rg", &extensionNames) ) { _GLEE_ARB_texture_rg = GL_TRUE; __GLeeLink_GL_ARB_texture_rg(); } if (__GLeeCheckExtension("GL_ARB_vertex_array_object", &extensionNames) ) { _GLEE_ARB_vertex_array_object = GL_TRUE; __GLeeLink_GL_ARB_vertex_array_object(); } if (__GLeeCheckExtension("GL_EXT_abgr", &extensionNames) ) { _GLEE_EXT_abgr = GL_TRUE; __GLeeLink_GL_EXT_abgr(); } if (__GLeeCheckExtension("GL_EXT_blend_color", &extensionNames) ) { _GLEE_EXT_blend_color = GL_TRUE; __GLeeLink_GL_EXT_blend_color(); } if (__GLeeCheckExtension("GL_EXT_polygon_offset", &extensionNames) ) { _GLEE_EXT_polygon_offset = GL_TRUE; __GLeeLink_GL_EXT_polygon_offset(); } if (__GLeeCheckExtension("GL_EXT_texture", &extensionNames) ) { _GLEE_EXT_texture = GL_TRUE; __GLeeLink_GL_EXT_texture(); } if (__GLeeCheckExtension("GL_EXT_texture3D", &extensionNames) ) { _GLEE_EXT_texture3D = GL_TRUE; __GLeeLink_GL_EXT_texture3D(); } if (__GLeeCheckExtension("GL_SGIS_texture_filter4", &extensionNames) ) { _GLEE_SGIS_texture_filter4 = GL_TRUE; __GLeeLink_GL_SGIS_texture_filter4(); } if (__GLeeCheckExtension("GL_EXT_subtexture", &extensionNames) ) { _GLEE_EXT_subtexture = GL_TRUE; __GLeeLink_GL_EXT_subtexture(); } if (__GLeeCheckExtension("GL_EXT_copy_texture", &extensionNames) ) { _GLEE_EXT_copy_texture = GL_TRUE; __GLeeLink_GL_EXT_copy_texture(); } if (__GLeeCheckExtension("GL_EXT_histogram", &extensionNames) ) { _GLEE_EXT_histogram = GL_TRUE; __GLeeLink_GL_EXT_histogram(); } if (__GLeeCheckExtension("GL_EXT_convolution", &extensionNames) ) { _GLEE_EXT_convolution = GL_TRUE; __GLeeLink_GL_EXT_convolution(); } if (__GLeeCheckExtension("GL_SGI_color_matrix", &extensionNames) ) { _GLEE_SGI_color_matrix = GL_TRUE; __GLeeLink_GL_SGI_color_matrix(); } if (__GLeeCheckExtension("GL_SGI_color_table", &extensionNames) ) { _GLEE_SGI_color_table = GL_TRUE; __GLeeLink_GL_SGI_color_table(); } if (__GLeeCheckExtension("GL_SGIS_pixel_texture", &extensionNames) ) { _GLEE_SGIS_pixel_texture = GL_TRUE; __GLeeLink_GL_SGIS_pixel_texture(); } if (__GLeeCheckExtension("GL_SGIX_pixel_texture", &extensionNames) ) { _GLEE_SGIX_pixel_texture = GL_TRUE; __GLeeLink_GL_SGIX_pixel_texture(); } if (__GLeeCheckExtension("GL_SGIS_texture4D", &extensionNames) ) { _GLEE_SGIS_texture4D = GL_TRUE; __GLeeLink_GL_SGIS_texture4D(); } if (__GLeeCheckExtension("GL_SGI_texture_color_table", &extensionNames) ) { _GLEE_SGI_texture_color_table = GL_TRUE; __GLeeLink_GL_SGI_texture_color_table(); } if (__GLeeCheckExtension("GL_EXT_cmyka", &extensionNames) ) { _GLEE_EXT_cmyka = GL_TRUE; __GLeeLink_GL_EXT_cmyka(); } if (__GLeeCheckExtension("GL_EXT_texture_object", &extensionNames) ) { _GLEE_EXT_texture_object = GL_TRUE; __GLeeLink_GL_EXT_texture_object(); } if (__GLeeCheckExtension("GL_SGIS_detail_texture", &extensionNames) ) { _GLEE_SGIS_detail_texture = GL_TRUE; __GLeeLink_GL_SGIS_detail_texture(); } if (__GLeeCheckExtension("GL_SGIS_sharpen_texture", &extensionNames) ) { _GLEE_SGIS_sharpen_texture = GL_TRUE; __GLeeLink_GL_SGIS_sharpen_texture(); } if (__GLeeCheckExtension("GL_EXT_packed_pixels", &extensionNames) ) { _GLEE_EXT_packed_pixels = GL_TRUE; __GLeeLink_GL_EXT_packed_pixels(); } if (__GLeeCheckExtension("GL_SGIS_texture_lod", &extensionNames) ) { _GLEE_SGIS_texture_lod = GL_TRUE; __GLeeLink_GL_SGIS_texture_lod(); } if (__GLeeCheckExtension("GL_SGIS_multisample", &extensionNames) ) { _GLEE_SGIS_multisample = GL_TRUE; __GLeeLink_GL_SGIS_multisample(); } if (__GLeeCheckExtension("GL_EXT_rescale_normal", &extensionNames) ) { _GLEE_EXT_rescale_normal = GL_TRUE; __GLeeLink_GL_EXT_rescale_normal(); } if (__GLeeCheckExtension("GL_EXT_vertex_array", &extensionNames) ) { _GLEE_EXT_vertex_array = GL_TRUE; __GLeeLink_GL_EXT_vertex_array(); } if (__GLeeCheckExtension("GL_EXT_misc_attribute", &extensionNames) ) { _GLEE_EXT_misc_attribute = GL_TRUE; __GLeeLink_GL_EXT_misc_attribute(); } if (__GLeeCheckExtension("GL_SGIS_generate_mipmap", &extensionNames) ) { _GLEE_SGIS_generate_mipmap = GL_TRUE; __GLeeLink_GL_SGIS_generate_mipmap(); } if (__GLeeCheckExtension("GL_SGIX_clipmap", &extensionNames) ) { _GLEE_SGIX_clipmap = GL_TRUE; __GLeeLink_GL_SGIX_clipmap(); } if (__GLeeCheckExtension("GL_SGIX_shadow", &extensionNames) ) { _GLEE_SGIX_shadow = GL_TRUE; __GLeeLink_GL_SGIX_shadow(); } if (__GLeeCheckExtension("GL_SGIS_texture_edge_clamp", &extensionNames) ) { _GLEE_SGIS_texture_edge_clamp = GL_TRUE; __GLeeLink_GL_SGIS_texture_edge_clamp(); } if (__GLeeCheckExtension("GL_SGIS_texture_border_clamp", &extensionNames) ) { _GLEE_SGIS_texture_border_clamp = GL_TRUE; __GLeeLink_GL_SGIS_texture_border_clamp(); } if (__GLeeCheckExtension("GL_EXT_blend_minmax", &extensionNames) ) { _GLEE_EXT_blend_minmax = GL_TRUE; __GLeeLink_GL_EXT_blend_minmax(); } if (__GLeeCheckExtension("GL_EXT_blend_subtract", &extensionNames) ) { _GLEE_EXT_blend_subtract = GL_TRUE; __GLeeLink_GL_EXT_blend_subtract(); } if (__GLeeCheckExtension("GL_EXT_blend_logic_op", &extensionNames) ) { _GLEE_EXT_blend_logic_op = GL_TRUE; __GLeeLink_GL_EXT_blend_logic_op(); } if (__GLeeCheckExtension("GL_SGIX_interlace", &extensionNames) ) { _GLEE_SGIX_interlace = GL_TRUE; __GLeeLink_GL_SGIX_interlace(); } if (__GLeeCheckExtension("GL_SGIX_pixel_tiles", &extensionNames) ) { _GLEE_SGIX_pixel_tiles = GL_TRUE; __GLeeLink_GL_SGIX_pixel_tiles(); } if (__GLeeCheckExtension("GL_SGIS_texture_select", &extensionNames) ) { _GLEE_SGIS_texture_select = GL_TRUE; __GLeeLink_GL_SGIS_texture_select(); } if (__GLeeCheckExtension("GL_SGIX_sprite", &extensionNames) ) { _GLEE_SGIX_sprite = GL_TRUE; __GLeeLink_GL_SGIX_sprite(); } if (__GLeeCheckExtension("GL_SGIX_texture_multi_buffer", &extensionNames) ) { _GLEE_SGIX_texture_multi_buffer = GL_TRUE; __GLeeLink_GL_SGIX_texture_multi_buffer(); } if (__GLeeCheckExtension("GL_EXT_point_parameters", &extensionNames) ) { _GLEE_EXT_point_parameters = GL_TRUE; __GLeeLink_GL_EXT_point_parameters(); } if (__GLeeCheckExtension("GL_SGIS_point_parameters", &extensionNames) ) { _GLEE_SGIS_point_parameters = GL_TRUE; __GLeeLink_GL_SGIS_point_parameters(); } if (__GLeeCheckExtension("GL_SGIX_instruments", &extensionNames) ) { _GLEE_SGIX_instruments = GL_TRUE; __GLeeLink_GL_SGIX_instruments(); } if (__GLeeCheckExtension("GL_SGIX_texture_scale_bias", &extensionNames) ) { _GLEE_SGIX_texture_scale_bias = GL_TRUE; __GLeeLink_GL_SGIX_texture_scale_bias(); } if (__GLeeCheckExtension("GL_SGIX_framezoom", &extensionNames) ) { _GLEE_SGIX_framezoom = GL_TRUE; __GLeeLink_GL_SGIX_framezoom(); } if (__GLeeCheckExtension("GL_SGIX_tag_sample_buffer", &extensionNames) ) { _GLEE_SGIX_tag_sample_buffer = GL_TRUE; __GLeeLink_GL_SGIX_tag_sample_buffer(); } if (__GLeeCheckExtension("GL_FfdMaskSGIX", &extensionNames) ) { _GLEE_FfdMaskSGIX = GL_TRUE; __GLeeLink_GL_FfdMaskSGIX(); } if (__GLeeCheckExtension("GL_SGIX_polynomial_ffd", &extensionNames) ) { _GLEE_SGIX_polynomial_ffd = GL_TRUE; __GLeeLink_GL_SGIX_polynomial_ffd(); } if (__GLeeCheckExtension("GL_SGIX_reference_plane", &extensionNames) ) { _GLEE_SGIX_reference_plane = GL_TRUE; __GLeeLink_GL_SGIX_reference_plane(); } if (__GLeeCheckExtension("GL_SGIX_flush_raster", &extensionNames) ) { _GLEE_SGIX_flush_raster = GL_TRUE; __GLeeLink_GL_SGIX_flush_raster(); } if (__GLeeCheckExtension("GL_SGIX_depth_texture", &extensionNames) ) { _GLEE_SGIX_depth_texture = GL_TRUE; __GLeeLink_GL_SGIX_depth_texture(); } if (__GLeeCheckExtension("GL_SGIS_fog_function", &extensionNames) ) { _GLEE_SGIS_fog_function = GL_TRUE; __GLeeLink_GL_SGIS_fog_function(); } if (__GLeeCheckExtension("GL_SGIX_fog_offset", &extensionNames) ) { _GLEE_SGIX_fog_offset = GL_TRUE; __GLeeLink_GL_SGIX_fog_offset(); } if (__GLeeCheckExtension("GL_HP_image_transform", &extensionNames) ) { _GLEE_HP_image_transform = GL_TRUE; __GLeeLink_GL_HP_image_transform(); } if (__GLeeCheckExtension("GL_HP_convolution_border_modes", &extensionNames) ) { _GLEE_HP_convolution_border_modes = GL_TRUE; __GLeeLink_GL_HP_convolution_border_modes(); } if (__GLeeCheckExtension("GL_INGR_palette_buffer", &extensionNames) ) { _GLEE_INGR_palette_buffer = GL_TRUE; __GLeeLink_GL_INGR_palette_buffer(); } if (__GLeeCheckExtension("GL_SGIX_texture_add_env", &extensionNames) ) { _GLEE_SGIX_texture_add_env = GL_TRUE; __GLeeLink_GL_SGIX_texture_add_env(); } if (__GLeeCheckExtension("GL_EXT_color_subtable", &extensionNames) ) { _GLEE_EXT_color_subtable = GL_TRUE; __GLeeLink_GL_EXT_color_subtable(); } if (__GLeeCheckExtension("GL_PGI_vertex_hints", &extensionNames) ) { _GLEE_PGI_vertex_hints = GL_TRUE; __GLeeLink_GL_PGI_vertex_hints(); } if (__GLeeCheckExtension("GL_PGI_misc_hints", &extensionNames) ) { _GLEE_PGI_misc_hints = GL_TRUE; __GLeeLink_GL_PGI_misc_hints(); } if (__GLeeCheckExtension("GL_EXT_paletted_texture", &extensionNames) ) { _GLEE_EXT_paletted_texture = GL_TRUE; __GLeeLink_GL_EXT_paletted_texture(); } if (__GLeeCheckExtension("GL_EXT_clip_volume_hint", &extensionNames) ) { _GLEE_EXT_clip_volume_hint = GL_TRUE; __GLeeLink_GL_EXT_clip_volume_hint(); } if (__GLeeCheckExtension("GL_SGIX_list_priority", &extensionNames) ) { _GLEE_SGIX_list_priority = GL_TRUE; __GLeeLink_GL_SGIX_list_priority(); } if (__GLeeCheckExtension("GL_SGIX_ir_instrument1", &extensionNames) ) { _GLEE_SGIX_ir_instrument1 = GL_TRUE; __GLeeLink_GL_SGIX_ir_instrument1(); } if (__GLeeCheckExtension("GL_SGIX_calligraphic_fragment", &extensionNames) ) { _GLEE_SGIX_calligraphic_fragment = GL_TRUE; __GLeeLink_GL_SGIX_calligraphic_fragment(); } if (__GLeeCheckExtension("GL_SGIX_texture_lod_bias", &extensionNames) ) { _GLEE_SGIX_texture_lod_bias = GL_TRUE; __GLeeLink_GL_SGIX_texture_lod_bias(); } if (__GLeeCheckExtension("GL_SGIX_shadow_ambient", &extensionNames) ) { _GLEE_SGIX_shadow_ambient = GL_TRUE; __GLeeLink_GL_SGIX_shadow_ambient(); } if (__GLeeCheckExtension("GL_EXT_index_texture", &extensionNames) ) { _GLEE_EXT_index_texture = GL_TRUE; __GLeeLink_GL_EXT_index_texture(); } if (__GLeeCheckExtension("GL_EXT_index_material", &extensionNames) ) { _GLEE_EXT_index_material = GL_TRUE; __GLeeLink_GL_EXT_index_material(); } if (__GLeeCheckExtension("GL_EXT_index_func", &extensionNames) ) { _GLEE_EXT_index_func = GL_TRUE; __GLeeLink_GL_EXT_index_func(); } if (__GLeeCheckExtension("GL_EXT_index_array_formats", &extensionNames) ) { _GLEE_EXT_index_array_formats = GL_TRUE; __GLeeLink_GL_EXT_index_array_formats(); } if (__GLeeCheckExtension("GL_EXT_compiled_vertex_array", &extensionNames) ) { _GLEE_EXT_compiled_vertex_array = GL_TRUE; __GLeeLink_GL_EXT_compiled_vertex_array(); } if (__GLeeCheckExtension("GL_EXT_cull_vertex", &extensionNames) ) { _GLEE_EXT_cull_vertex = GL_TRUE; __GLeeLink_GL_EXT_cull_vertex(); } if (__GLeeCheckExtension("GL_SGIX_ycrcb", &extensionNames) ) { _GLEE_SGIX_ycrcb = GL_TRUE; __GLeeLink_GL_SGIX_ycrcb(); } if (__GLeeCheckExtension("GL_SGIX_fragment_lighting", &extensionNames) ) { _GLEE_SGIX_fragment_lighting = GL_TRUE; __GLeeLink_GL_SGIX_fragment_lighting(); } if (__GLeeCheckExtension("GL_IBM_rasterpos_clip", &extensionNames) ) { _GLEE_IBM_rasterpos_clip = GL_TRUE; __GLeeLink_GL_IBM_rasterpos_clip(); } if (__GLeeCheckExtension("GL_HP_texture_lighting", &extensionNames) ) { _GLEE_HP_texture_lighting = GL_TRUE; __GLeeLink_GL_HP_texture_lighting(); } if (__GLeeCheckExtension("GL_EXT_draw_range_elements", &extensionNames) ) { _GLEE_EXT_draw_range_elements = GL_TRUE; __GLeeLink_GL_EXT_draw_range_elements(); } if (__GLeeCheckExtension("GL_WIN_phong_shading", &extensionNames) ) { _GLEE_WIN_phong_shading = GL_TRUE; __GLeeLink_GL_WIN_phong_shading(); } if (__GLeeCheckExtension("GL_WIN_specular_fog", &extensionNames) ) { _GLEE_WIN_specular_fog = GL_TRUE; __GLeeLink_GL_WIN_specular_fog(); } if (__GLeeCheckExtension("GL_EXT_light_texture", &extensionNames) ) { _GLEE_EXT_light_texture = GL_TRUE; __GLeeLink_GL_EXT_light_texture(); } if (__GLeeCheckExtension("GL_SGIX_blend_alpha_minmax", &extensionNames) ) { _GLEE_SGIX_blend_alpha_minmax = GL_TRUE; __GLeeLink_GL_SGIX_blend_alpha_minmax(); } if (__GLeeCheckExtension("GL_SGIX_impact_pixel_texture", &extensionNames) ) { _GLEE_SGIX_impact_pixel_texture = GL_TRUE; __GLeeLink_GL_SGIX_impact_pixel_texture(); } if (__GLeeCheckExtension("GL_EXT_bgra", &extensionNames) ) { _GLEE_EXT_bgra = GL_TRUE; __GLeeLink_GL_EXT_bgra(); } if (__GLeeCheckExtension("GL_SGIX_async", &extensionNames) ) { _GLEE_SGIX_async = GL_TRUE; __GLeeLink_GL_SGIX_async(); } if (__GLeeCheckExtension("GL_SGIX_async_pixel", &extensionNames) ) { _GLEE_SGIX_async_pixel = GL_TRUE; __GLeeLink_GL_SGIX_async_pixel(); } if (__GLeeCheckExtension("GL_SGIX_async_histogram", &extensionNames) ) { _GLEE_SGIX_async_histogram = GL_TRUE; __GLeeLink_GL_SGIX_async_histogram(); } if (__GLeeCheckExtension("GL_INTEL_texture_scissor", &extensionNames) ) { _GLEE_INTEL_texture_scissor = GL_TRUE; __GLeeLink_GL_INTEL_texture_scissor(); } if (__GLeeCheckExtension("GL_INTEL_parallel_arrays", &extensionNames) ) { _GLEE_INTEL_parallel_arrays = GL_TRUE; __GLeeLink_GL_INTEL_parallel_arrays(); } if (__GLeeCheckExtension("GL_HP_occlusion_test", &extensionNames) ) { _GLEE_HP_occlusion_test = GL_TRUE; __GLeeLink_GL_HP_occlusion_test(); } if (__GLeeCheckExtension("GL_EXT_pixel_transform", &extensionNames) ) { _GLEE_EXT_pixel_transform = GL_TRUE; __GLeeLink_GL_EXT_pixel_transform(); } if (__GLeeCheckExtension("GL_EXT_pixel_transform_color_table", &extensionNames) ) { _GLEE_EXT_pixel_transform_color_table = GL_TRUE; __GLeeLink_GL_EXT_pixel_transform_color_table(); } if (__GLeeCheckExtension("GL_EXT_shared_texture_palette", &extensionNames) ) { _GLEE_EXT_shared_texture_palette = GL_TRUE; __GLeeLink_GL_EXT_shared_texture_palette(); } if (__GLeeCheckExtension("GL_EXT_separate_specular_color", &extensionNames) ) { _GLEE_EXT_separate_specular_color = GL_TRUE; __GLeeLink_GL_EXT_separate_specular_color(); } if (__GLeeCheckExtension("GL_EXT_secondary_color", &extensionNames) ) { _GLEE_EXT_secondary_color = GL_TRUE; __GLeeLink_GL_EXT_secondary_color(); } if (__GLeeCheckExtension("GL_EXT_texture_perturb_normal", &extensionNames) ) { _GLEE_EXT_texture_perturb_normal = GL_TRUE; __GLeeLink_GL_EXT_texture_perturb_normal(); } if (__GLeeCheckExtension("GL_EXT_multi_draw_arrays", &extensionNames) ) { _GLEE_EXT_multi_draw_arrays = GL_TRUE; __GLeeLink_GL_EXT_multi_draw_arrays(); } if (__GLeeCheckExtension("GL_EXT_fog_coord", &extensionNames) ) { _GLEE_EXT_fog_coord = GL_TRUE; __GLeeLink_GL_EXT_fog_coord(); } if (__GLeeCheckExtension("GL_REND_screen_coordinates", &extensionNames) ) { _GLEE_REND_screen_coordinates = GL_TRUE; __GLeeLink_GL_REND_screen_coordinates(); } if (__GLeeCheckExtension("GL_EXT_coordinate_frame", &extensionNames) ) { _GLEE_EXT_coordinate_frame = GL_TRUE; __GLeeLink_GL_EXT_coordinate_frame(); } if (__GLeeCheckExtension("GL_EXT_texture_env_combine", &extensionNames) ) { _GLEE_EXT_texture_env_combine = GL_TRUE; __GLeeLink_GL_EXT_texture_env_combine(); } if (__GLeeCheckExtension("GL_APPLE_specular_vector", &extensionNames) ) { _GLEE_APPLE_specular_vector = GL_TRUE; __GLeeLink_GL_APPLE_specular_vector(); } if (__GLeeCheckExtension("GL_APPLE_transform_hint", &extensionNames) ) { _GLEE_APPLE_transform_hint = GL_TRUE; __GLeeLink_GL_APPLE_transform_hint(); } if (__GLeeCheckExtension("GL_SGIX_fog_scale", &extensionNames) ) { _GLEE_SGIX_fog_scale = GL_TRUE; __GLeeLink_GL_SGIX_fog_scale(); } if (__GLeeCheckExtension("GL_SUNX_constant_data", &extensionNames) ) { _GLEE_SUNX_constant_data = GL_TRUE; __GLeeLink_GL_SUNX_constant_data(); } if (__GLeeCheckExtension("GL_SUN_global_alpha", &extensionNames) ) { _GLEE_SUN_global_alpha = GL_TRUE; __GLeeLink_GL_SUN_global_alpha(); } if (__GLeeCheckExtension("GL_SUN_triangle_list", &extensionNames) ) { _GLEE_SUN_triangle_list = GL_TRUE; __GLeeLink_GL_SUN_triangle_list(); } if (__GLeeCheckExtension("GL_SUN_vertex", &extensionNames) ) { _GLEE_SUN_vertex = GL_TRUE; __GLeeLink_GL_SUN_vertex(); } if (__GLeeCheckExtension("GL_EXT_blend_func_separate", &extensionNames) ) { _GLEE_EXT_blend_func_separate = GL_TRUE; __GLeeLink_GL_EXT_blend_func_separate(); } if (__GLeeCheckExtension("GL_INGR_color_clamp", &extensionNames) ) { _GLEE_INGR_color_clamp = GL_TRUE; __GLeeLink_GL_INGR_color_clamp(); } if (__GLeeCheckExtension("GL_INGR_interlace_read", &extensionNames) ) { _GLEE_INGR_interlace_read = GL_TRUE; __GLeeLink_GL_INGR_interlace_read(); } if (__GLeeCheckExtension("GL_EXT_stencil_wrap", &extensionNames) ) { _GLEE_EXT_stencil_wrap = GL_TRUE; __GLeeLink_GL_EXT_stencil_wrap(); } if (__GLeeCheckExtension("GL_EXT_422_pixels", &extensionNames) ) { _GLEE_EXT_422_pixels = GL_TRUE; __GLeeLink_GL_EXT_422_pixels(); } if (__GLeeCheckExtension("GL_NV_texgen_reflection", &extensionNames) ) { _GLEE_NV_texgen_reflection = GL_TRUE; __GLeeLink_GL_NV_texgen_reflection(); } if (__GLeeCheckExtension("GL_EXT_texture_cube_map", &extensionNames) ) { _GLEE_EXT_texture_cube_map = GL_TRUE; __GLeeLink_GL_EXT_texture_cube_map(); } if (__GLeeCheckExtension("GL_SUN_convolution_border_modes", &extensionNames) ) { _GLEE_SUN_convolution_border_modes = GL_TRUE; __GLeeLink_GL_SUN_convolution_border_modes(); } if (__GLeeCheckExtension("GL_EXT_texture_env_add", &extensionNames) ) { _GLEE_EXT_texture_env_add = GL_TRUE; __GLeeLink_GL_EXT_texture_env_add(); } if (__GLeeCheckExtension("GL_EXT_texture_lod_bias", &extensionNames) ) { _GLEE_EXT_texture_lod_bias = GL_TRUE; __GLeeLink_GL_EXT_texture_lod_bias(); } if (__GLeeCheckExtension("GL_EXT_texture_filter_anisotropic", &extensionNames) ) { _GLEE_EXT_texture_filter_anisotropic = GL_TRUE; __GLeeLink_GL_EXT_texture_filter_anisotropic(); } if (__GLeeCheckExtension("GL_EXT_vertex_weighting", &extensionNames) ) { _GLEE_EXT_vertex_weighting = GL_TRUE; __GLeeLink_GL_EXT_vertex_weighting(); } if (__GLeeCheckExtension("GL_NV_light_max_exponent", &extensionNames) ) { _GLEE_NV_light_max_exponent = GL_TRUE; __GLeeLink_GL_NV_light_max_exponent(); } if (__GLeeCheckExtension("GL_NV_vertex_array_range", &extensionNames) ) { _GLEE_NV_vertex_array_range = GL_TRUE; __GLeeLink_GL_NV_vertex_array_range(); } if (__GLeeCheckExtension("GL_NV_register_combiners", &extensionNames) ) { _GLEE_NV_register_combiners = GL_TRUE; __GLeeLink_GL_NV_register_combiners(); } if (__GLeeCheckExtension("GL_NV_fog_distance", &extensionNames) ) { _GLEE_NV_fog_distance = GL_TRUE; __GLeeLink_GL_NV_fog_distance(); } if (__GLeeCheckExtension("GL_NV_texgen_emboss", &extensionNames) ) { _GLEE_NV_texgen_emboss = GL_TRUE; __GLeeLink_GL_NV_texgen_emboss(); } if (__GLeeCheckExtension("GL_NV_blend_square", &extensionNames) ) { _GLEE_NV_blend_square = GL_TRUE; __GLeeLink_GL_NV_blend_square(); } if (__GLeeCheckExtension("GL_NV_texture_env_combine4", &extensionNames) ) { _GLEE_NV_texture_env_combine4 = GL_TRUE; __GLeeLink_GL_NV_texture_env_combine4(); } if (__GLeeCheckExtension("GL_MESA_resize_buffers", &extensionNames) ) { _GLEE_MESA_resize_buffers = GL_TRUE; __GLeeLink_GL_MESA_resize_buffers(); } if (__GLeeCheckExtension("GL_MESA_window_pos", &extensionNames) ) { _GLEE_MESA_window_pos = GL_TRUE; __GLeeLink_GL_MESA_window_pos(); } if (__GLeeCheckExtension("GL_EXT_texture_compression_s3tc", &extensionNames) ) { _GLEE_EXT_texture_compression_s3tc = GL_TRUE; __GLeeLink_GL_EXT_texture_compression_s3tc(); } if (__GLeeCheckExtension("GL_IBM_cull_vertex", &extensionNames) ) { _GLEE_IBM_cull_vertex = GL_TRUE; __GLeeLink_GL_IBM_cull_vertex(); } if (__GLeeCheckExtension("GL_IBM_multimode_draw_arrays", &extensionNames) ) { _GLEE_IBM_multimode_draw_arrays = GL_TRUE; __GLeeLink_GL_IBM_multimode_draw_arrays(); } if (__GLeeCheckExtension("GL_IBM_vertex_array_lists", &extensionNames) ) { _GLEE_IBM_vertex_array_lists = GL_TRUE; __GLeeLink_GL_IBM_vertex_array_lists(); } if (__GLeeCheckExtension("GL_SGIX_subsample", &extensionNames) ) { _GLEE_SGIX_subsample = GL_TRUE; __GLeeLink_GL_SGIX_subsample(); } if (__GLeeCheckExtension("GL_SGIX_ycrcb_subsample", &extensionNames) ) { _GLEE_SGIX_ycrcb_subsample = GL_TRUE; __GLeeLink_GL_SGIX_ycrcb_subsample(); } if (__GLeeCheckExtension("GL_SGIX_ycrcba", &extensionNames) ) { _GLEE_SGIX_ycrcba = GL_TRUE; __GLeeLink_GL_SGIX_ycrcba(); } if (__GLeeCheckExtension("GL_SGI_depth_pass_instrument", &extensionNames) ) { _GLEE_SGI_depth_pass_instrument = GL_TRUE; __GLeeLink_GL_SGI_depth_pass_instrument(); } if (__GLeeCheckExtension("GL_3DFX_texture_compression_FXT1", &extensionNames) ) { _GLEE_3DFX_texture_compression_FXT1 = GL_TRUE; __GLeeLink_GL_3DFX_texture_compression_FXT1(); } if (__GLeeCheckExtension("GL_3DFX_multisample", &extensionNames) ) { _GLEE_3DFX_multisample = GL_TRUE; __GLeeLink_GL_3DFX_multisample(); } if (__GLeeCheckExtension("GL_3DFX_tbuffer", &extensionNames) ) { _GLEE_3DFX_tbuffer = GL_TRUE; __GLeeLink_GL_3DFX_tbuffer(); } if (__GLeeCheckExtension("GL_EXT_multisample", &extensionNames) ) { _GLEE_EXT_multisample = GL_TRUE; __GLeeLink_GL_EXT_multisample(); } if (__GLeeCheckExtension("GL_SGIX_vertex_preclip", &extensionNames) ) { _GLEE_SGIX_vertex_preclip = GL_TRUE; __GLeeLink_GL_SGIX_vertex_preclip(); } if (__GLeeCheckExtension("GL_SGIX_convolution_accuracy", &extensionNames) ) { _GLEE_SGIX_convolution_accuracy = GL_TRUE; __GLeeLink_GL_SGIX_convolution_accuracy(); } if (__GLeeCheckExtension("GL_SGIX_resample", &extensionNames) ) { _GLEE_SGIX_resample = GL_TRUE; __GLeeLink_GL_SGIX_resample(); } if (__GLeeCheckExtension("GL_SGIS_point_line_texgen", &extensionNames) ) { _GLEE_SGIS_point_line_texgen = GL_TRUE; __GLeeLink_GL_SGIS_point_line_texgen(); } if (__GLeeCheckExtension("GL_SGIS_texture_color_mask", &extensionNames) ) { _GLEE_SGIS_texture_color_mask = GL_TRUE; __GLeeLink_GL_SGIS_texture_color_mask(); } if (__GLeeCheckExtension("GL_EXT_texture_env_dot3", &extensionNames) ) { _GLEE_EXT_texture_env_dot3 = GL_TRUE; __GLeeLink_GL_EXT_texture_env_dot3(); } if (__GLeeCheckExtension("GL_ATI_texture_mirror_once", &extensionNames) ) { _GLEE_ATI_texture_mirror_once = GL_TRUE; __GLeeLink_GL_ATI_texture_mirror_once(); } if (__GLeeCheckExtension("GL_NV_fence", &extensionNames) ) { _GLEE_NV_fence = GL_TRUE; __GLeeLink_GL_NV_fence(); } if (__GLeeCheckExtension("GL_IBM_texture_mirrored_repeat", &extensionNames) ) { _GLEE_IBM_texture_mirrored_repeat = GL_TRUE; __GLeeLink_GL_IBM_texture_mirrored_repeat(); } if (__GLeeCheckExtension("GL_NV_evaluators", &extensionNames) ) { _GLEE_NV_evaluators = GL_TRUE; __GLeeLink_GL_NV_evaluators(); } if (__GLeeCheckExtension("GL_NV_packed_depth_stencil", &extensionNames) ) { _GLEE_NV_packed_depth_stencil = GL_TRUE; __GLeeLink_GL_NV_packed_depth_stencil(); } if (__GLeeCheckExtension("GL_NV_register_combiners2", &extensionNames) ) { _GLEE_NV_register_combiners2 = GL_TRUE; __GLeeLink_GL_NV_register_combiners2(); } if (__GLeeCheckExtension("GL_NV_texture_compression_vtc", &extensionNames) ) { _GLEE_NV_texture_compression_vtc = GL_TRUE; __GLeeLink_GL_NV_texture_compression_vtc(); } if (__GLeeCheckExtension("GL_NV_texture_rectangle", &extensionNames) ) { _GLEE_NV_texture_rectangle = GL_TRUE; __GLeeLink_GL_NV_texture_rectangle(); } if (__GLeeCheckExtension("GL_NV_texture_shader", &extensionNames) ) { _GLEE_NV_texture_shader = GL_TRUE; __GLeeLink_GL_NV_texture_shader(); } if (__GLeeCheckExtension("GL_NV_texture_shader2", &extensionNames) ) { _GLEE_NV_texture_shader2 = GL_TRUE; __GLeeLink_GL_NV_texture_shader2(); } if (__GLeeCheckExtension("GL_NV_vertex_array_range2", &extensionNames) ) { _GLEE_NV_vertex_array_range2 = GL_TRUE; __GLeeLink_GL_NV_vertex_array_range2(); } if (__GLeeCheckExtension("GL_NV_vertex_program", &extensionNames) ) { _GLEE_NV_vertex_program = GL_TRUE; __GLeeLink_GL_NV_vertex_program(); } if (__GLeeCheckExtension("GL_SGIX_texture_coordinate_clamp", &extensionNames) ) { _GLEE_SGIX_texture_coordinate_clamp = GL_TRUE; __GLeeLink_GL_SGIX_texture_coordinate_clamp(); } if (__GLeeCheckExtension("GL_SGIX_scalebias_hint", &extensionNames) ) { _GLEE_SGIX_scalebias_hint = GL_TRUE; __GLeeLink_GL_SGIX_scalebias_hint(); } if (__GLeeCheckExtension("GL_OML_interlace", &extensionNames) ) { _GLEE_OML_interlace = GL_TRUE; __GLeeLink_GL_OML_interlace(); } if (__GLeeCheckExtension("GL_OML_subsample", &extensionNames) ) { _GLEE_OML_subsample = GL_TRUE; __GLeeLink_GL_OML_subsample(); } if (__GLeeCheckExtension("GL_OML_resample", &extensionNames) ) { _GLEE_OML_resample = GL_TRUE; __GLeeLink_GL_OML_resample(); } if (__GLeeCheckExtension("GL_NV_copy_depth_to_color", &extensionNames) ) { _GLEE_NV_copy_depth_to_color = GL_TRUE; __GLeeLink_GL_NV_copy_depth_to_color(); } if (__GLeeCheckExtension("GL_ATI_envmap_bumpmap", &extensionNames) ) { _GLEE_ATI_envmap_bumpmap = GL_TRUE; __GLeeLink_GL_ATI_envmap_bumpmap(); } if (__GLeeCheckExtension("GL_ATI_fragment_shader", &extensionNames) ) { _GLEE_ATI_fragment_shader = GL_TRUE; __GLeeLink_GL_ATI_fragment_shader(); } if (__GLeeCheckExtension("GL_ATI_pn_triangles", &extensionNames) ) { _GLEE_ATI_pn_triangles = GL_TRUE; __GLeeLink_GL_ATI_pn_triangles(); } if (__GLeeCheckExtension("GL_ATI_vertex_array_object", &extensionNames) ) { _GLEE_ATI_vertex_array_object = GL_TRUE; __GLeeLink_GL_ATI_vertex_array_object(); } if (__GLeeCheckExtension("GL_EXT_vertex_shader", &extensionNames) ) { _GLEE_EXT_vertex_shader = GL_TRUE; __GLeeLink_GL_EXT_vertex_shader(); } if (__GLeeCheckExtension("GL_ATI_vertex_streams", &extensionNames) ) { _GLEE_ATI_vertex_streams = GL_TRUE; __GLeeLink_GL_ATI_vertex_streams(); } if (__GLeeCheckExtension("GL_ATI_element_array", &extensionNames) ) { _GLEE_ATI_element_array = GL_TRUE; __GLeeLink_GL_ATI_element_array(); } if (__GLeeCheckExtension("GL_SUN_mesh_array", &extensionNames) ) { _GLEE_SUN_mesh_array = GL_TRUE; __GLeeLink_GL_SUN_mesh_array(); } if (__GLeeCheckExtension("GL_SUN_slice_accum", &extensionNames) ) { _GLEE_SUN_slice_accum = GL_TRUE; __GLeeLink_GL_SUN_slice_accum(); } if (__GLeeCheckExtension("GL_NV_multisample_filter_hint", &extensionNames) ) { _GLEE_NV_multisample_filter_hint = GL_TRUE; __GLeeLink_GL_NV_multisample_filter_hint(); } if (__GLeeCheckExtension("GL_NV_depth_clamp", &extensionNames) ) { _GLEE_NV_depth_clamp = GL_TRUE; __GLeeLink_GL_NV_depth_clamp(); } if (__GLeeCheckExtension("GL_NV_occlusion_query", &extensionNames) ) { _GLEE_NV_occlusion_query = GL_TRUE; __GLeeLink_GL_NV_occlusion_query(); } if (__GLeeCheckExtension("GL_NV_point_sprite", &extensionNames) ) { _GLEE_NV_point_sprite = GL_TRUE; __GLeeLink_GL_NV_point_sprite(); } if (__GLeeCheckExtension("GL_NV_texture_shader3", &extensionNames) ) { _GLEE_NV_texture_shader3 = GL_TRUE; __GLeeLink_GL_NV_texture_shader3(); } if (__GLeeCheckExtension("GL_NV_vertex_program1_1", &extensionNames) ) { _GLEE_NV_vertex_program1_1 = GL_TRUE; __GLeeLink_GL_NV_vertex_program1_1(); } if (__GLeeCheckExtension("GL_EXT_shadow_funcs", &extensionNames) ) { _GLEE_EXT_shadow_funcs = GL_TRUE; __GLeeLink_GL_EXT_shadow_funcs(); } if (__GLeeCheckExtension("GL_EXT_stencil_two_side", &extensionNames) ) { _GLEE_EXT_stencil_two_side = GL_TRUE; __GLeeLink_GL_EXT_stencil_two_side(); } if (__GLeeCheckExtension("GL_ATI_text_fragment_shader", &extensionNames) ) { _GLEE_ATI_text_fragment_shader = GL_TRUE; __GLeeLink_GL_ATI_text_fragment_shader(); } if (__GLeeCheckExtension("GL_APPLE_client_storage", &extensionNames) ) { _GLEE_APPLE_client_storage = GL_TRUE; __GLeeLink_GL_APPLE_client_storage(); } if (__GLeeCheckExtension("GL_APPLE_element_array", &extensionNames) ) { _GLEE_APPLE_element_array = GL_TRUE; __GLeeLink_GL_APPLE_element_array(); } if (__GLeeCheckExtension("GL_APPLE_fence", &extensionNames) ) { _GLEE_APPLE_fence = GL_TRUE; __GLeeLink_GL_APPLE_fence(); } if (__GLeeCheckExtension("GL_APPLE_vertex_array_object", &extensionNames) ) { _GLEE_APPLE_vertex_array_object = GL_TRUE; __GLeeLink_GL_APPLE_vertex_array_object(); } if (__GLeeCheckExtension("GL_APPLE_vertex_array_range", &extensionNames) ) { _GLEE_APPLE_vertex_array_range = GL_TRUE; __GLeeLink_GL_APPLE_vertex_array_range(); } if (__GLeeCheckExtension("GL_APPLE_ycbcr_422", &extensionNames) ) { _GLEE_APPLE_ycbcr_422 = GL_TRUE; __GLeeLink_GL_APPLE_ycbcr_422(); } if (__GLeeCheckExtension("GL_S3_s3tc", &extensionNames) ) { _GLEE_S3_s3tc = GL_TRUE; __GLeeLink_GL_S3_s3tc(); } if (__GLeeCheckExtension("GL_ATI_draw_buffers", &extensionNames) ) { _GLEE_ATI_draw_buffers = GL_TRUE; __GLeeLink_GL_ATI_draw_buffers(); } if (__GLeeCheckExtension("GL_ATI_pixel_format_float", &extensionNames) ) { _GLEE_ATI_pixel_format_float = GL_TRUE; __GLeeLink_GL_ATI_pixel_format_float(); } if (__GLeeCheckExtension("GL_ATI_texture_env_combine3", &extensionNames) ) { _GLEE_ATI_texture_env_combine3 = GL_TRUE; __GLeeLink_GL_ATI_texture_env_combine3(); } if (__GLeeCheckExtension("GL_ATI_texture_float", &extensionNames) ) { _GLEE_ATI_texture_float = GL_TRUE; __GLeeLink_GL_ATI_texture_float(); } if (__GLeeCheckExtension("GL_NV_float_buffer", &extensionNames) ) { _GLEE_NV_float_buffer = GL_TRUE; __GLeeLink_GL_NV_float_buffer(); } if (__GLeeCheckExtension("GL_NV_fragment_program", &extensionNames) ) { _GLEE_NV_fragment_program = GL_TRUE; __GLeeLink_GL_NV_fragment_program(); } if (__GLeeCheckExtension("GL_NV_half_float", &extensionNames) ) { _GLEE_NV_half_float = GL_TRUE; __GLeeLink_GL_NV_half_float(); } if (__GLeeCheckExtension("GL_NV_pixel_data_range", &extensionNames) ) { _GLEE_NV_pixel_data_range = GL_TRUE; __GLeeLink_GL_NV_pixel_data_range(); } if (__GLeeCheckExtension("GL_NV_primitive_restart", &extensionNames) ) { _GLEE_NV_primitive_restart = GL_TRUE; __GLeeLink_GL_NV_primitive_restart(); } if (__GLeeCheckExtension("GL_NV_texture_expand_normal", &extensionNames) ) { _GLEE_NV_texture_expand_normal = GL_TRUE; __GLeeLink_GL_NV_texture_expand_normal(); } if (__GLeeCheckExtension("GL_NV_vertex_program2", &extensionNames) ) { _GLEE_NV_vertex_program2 = GL_TRUE; __GLeeLink_GL_NV_vertex_program2(); } if (__GLeeCheckExtension("GL_ATI_map_object_buffer", &extensionNames) ) { _GLEE_ATI_map_object_buffer = GL_TRUE; __GLeeLink_GL_ATI_map_object_buffer(); } if (__GLeeCheckExtension("GL_ATI_separate_stencil", &extensionNames) ) { _GLEE_ATI_separate_stencil = GL_TRUE; __GLeeLink_GL_ATI_separate_stencil(); } if (__GLeeCheckExtension("GL_ATI_vertex_attrib_array_object", &extensionNames) ) { _GLEE_ATI_vertex_attrib_array_object = GL_TRUE; __GLeeLink_GL_ATI_vertex_attrib_array_object(); } if (__GLeeCheckExtension("GL_OES_read_format", &extensionNames) ) { _GLEE_OES_read_format = GL_TRUE; __GLeeLink_GL_OES_read_format(); } if (__GLeeCheckExtension("GL_EXT_depth_bounds_test", &extensionNames) ) { _GLEE_EXT_depth_bounds_test = GL_TRUE; __GLeeLink_GL_EXT_depth_bounds_test(); } if (__GLeeCheckExtension("GL_EXT_texture_mirror_clamp", &extensionNames) ) { _GLEE_EXT_texture_mirror_clamp = GL_TRUE; __GLeeLink_GL_EXT_texture_mirror_clamp(); } if (__GLeeCheckExtension("GL_EXT_blend_equation_separate", &extensionNames) ) { _GLEE_EXT_blend_equation_separate = GL_TRUE; __GLeeLink_GL_EXT_blend_equation_separate(); } if (__GLeeCheckExtension("GL_MESA_pack_invert", &extensionNames) ) { _GLEE_MESA_pack_invert = GL_TRUE; __GLeeLink_GL_MESA_pack_invert(); } if (__GLeeCheckExtension("GL_MESA_ycbcr_texture", &extensionNames) ) { _GLEE_MESA_ycbcr_texture = GL_TRUE; __GLeeLink_GL_MESA_ycbcr_texture(); } if (__GLeeCheckExtension("GL_EXT_pixel_buffer_object", &extensionNames) ) { _GLEE_EXT_pixel_buffer_object = GL_TRUE; __GLeeLink_GL_EXT_pixel_buffer_object(); } if (__GLeeCheckExtension("GL_NV_fragment_program_option", &extensionNames) ) { _GLEE_NV_fragment_program_option = GL_TRUE; __GLeeLink_GL_NV_fragment_program_option(); } if (__GLeeCheckExtension("GL_NV_fragment_program2", &extensionNames) ) { _GLEE_NV_fragment_program2 = GL_TRUE; __GLeeLink_GL_NV_fragment_program2(); } if (__GLeeCheckExtension("GL_NV_vertex_program2_option", &extensionNames) ) { _GLEE_NV_vertex_program2_option = GL_TRUE; __GLeeLink_GL_NV_vertex_program2_option(); } if (__GLeeCheckExtension("GL_NV_vertex_program3", &extensionNames) ) { _GLEE_NV_vertex_program3 = GL_TRUE; __GLeeLink_GL_NV_vertex_program3(); } if (__GLeeCheckExtension("GL_EXT_framebuffer_object", &extensionNames) ) { _GLEE_EXT_framebuffer_object = GL_TRUE; __GLeeLink_GL_EXT_framebuffer_object(); } if (__GLeeCheckExtension("GL_GREMEDY_string_marker", &extensionNames) ) { _GLEE_GREMEDY_string_marker = GL_TRUE; __GLeeLink_GL_GREMEDY_string_marker(); } if (__GLeeCheckExtension("GL_EXT_packed_depth_stencil", &extensionNames) ) { _GLEE_EXT_packed_depth_stencil = GL_TRUE; __GLeeLink_GL_EXT_packed_depth_stencil(); } if (__GLeeCheckExtension("GL_EXT_stencil_clear_tag", &extensionNames) ) { _GLEE_EXT_stencil_clear_tag = GL_TRUE; __GLeeLink_GL_EXT_stencil_clear_tag(); } if (__GLeeCheckExtension("GL_EXT_texture_sRGB", &extensionNames) ) { _GLEE_EXT_texture_sRGB = GL_TRUE; __GLeeLink_GL_EXT_texture_sRGB(); } if (__GLeeCheckExtension("GL_EXT_framebuffer_blit", &extensionNames) ) { _GLEE_EXT_framebuffer_blit = GL_TRUE; __GLeeLink_GL_EXT_framebuffer_blit(); } if (__GLeeCheckExtension("GL_EXT_framebuffer_multisample", &extensionNames) ) { _GLEE_EXT_framebuffer_multisample = GL_TRUE; __GLeeLink_GL_EXT_framebuffer_multisample(); } if (__GLeeCheckExtension("GL_MESAX_texture_stack", &extensionNames) ) { _GLEE_MESAX_texture_stack = GL_TRUE; __GLeeLink_GL_MESAX_texture_stack(); } if (__GLeeCheckExtension("GL_EXT_timer_query", &extensionNames) ) { _GLEE_EXT_timer_query = GL_TRUE; __GLeeLink_GL_EXT_timer_query(); } if (__GLeeCheckExtension("GL_EXT_gpu_program_parameters", &extensionNames) ) { _GLEE_EXT_gpu_program_parameters = GL_TRUE; __GLeeLink_GL_EXT_gpu_program_parameters(); } if (__GLeeCheckExtension("GL_APPLE_flush_buffer_range", &extensionNames) ) { _GLEE_APPLE_flush_buffer_range = GL_TRUE; __GLeeLink_GL_APPLE_flush_buffer_range(); } if (__GLeeCheckExtension("GL_EXT_gpu_shader4", &extensionNames) ) { _GLEE_EXT_gpu_shader4 = GL_TRUE; __GLeeLink_GL_EXT_gpu_shader4(); } if (__GLeeCheckExtension("GL_EXT_draw_instanced", &extensionNames) ) { _GLEE_EXT_draw_instanced = GL_TRUE; __GLeeLink_GL_EXT_draw_instanced(); } if (__GLeeCheckExtension("GL_EXT_packed_float", &extensionNames) ) { _GLEE_EXT_packed_float = GL_TRUE; __GLeeLink_GL_EXT_packed_float(); } if (__GLeeCheckExtension("GL_EXT_texture_array", &extensionNames) ) { _GLEE_EXT_texture_array = GL_TRUE; __GLeeLink_GL_EXT_texture_array(); } if (__GLeeCheckExtension("GL_EXT_texture_buffer_object", &extensionNames) ) { _GLEE_EXT_texture_buffer_object = GL_TRUE; __GLeeLink_GL_EXT_texture_buffer_object(); } if (__GLeeCheckExtension("GL_EXT_texture_compression_latc", &extensionNames) ) { _GLEE_EXT_texture_compression_latc = GL_TRUE; __GLeeLink_GL_EXT_texture_compression_latc(); } if (__GLeeCheckExtension("GL_EXT_texture_compression_rgtc", &extensionNames) ) { _GLEE_EXT_texture_compression_rgtc = GL_TRUE; __GLeeLink_GL_EXT_texture_compression_rgtc(); } if (__GLeeCheckExtension("GL_EXT_texture_shared_exponent", &extensionNames) ) { _GLEE_EXT_texture_shared_exponent = GL_TRUE; __GLeeLink_GL_EXT_texture_shared_exponent(); } if (__GLeeCheckExtension("GL_NV_depth_buffer_float", &extensionNames) ) { _GLEE_NV_depth_buffer_float = GL_TRUE; __GLeeLink_GL_NV_depth_buffer_float(); } if (__GLeeCheckExtension("GL_NV_framebuffer_multisample_coverage", &extensionNames) ) { _GLEE_NV_framebuffer_multisample_coverage = GL_TRUE; __GLeeLink_GL_NV_framebuffer_multisample_coverage(); } if (__GLeeCheckExtension("GL_EXT_framebuffer_sRGB", &extensionNames) ) { _GLEE_EXT_framebuffer_sRGB = GL_TRUE; __GLeeLink_GL_EXT_framebuffer_sRGB(); } if (__GLeeCheckExtension("GL_NV_geometry_shader4", &extensionNames) ) { _GLEE_NV_geometry_shader4 = GL_TRUE; __GLeeLink_GL_NV_geometry_shader4(); } if (__GLeeCheckExtension("GL_NV_parameter_buffer_object", &extensionNames) ) { _GLEE_NV_parameter_buffer_object = GL_TRUE; __GLeeLink_GL_NV_parameter_buffer_object(); } if (__GLeeCheckExtension("GL_EXT_draw_buffers2", &extensionNames) ) { _GLEE_EXT_draw_buffers2 = GL_TRUE; __GLeeLink_GL_EXT_draw_buffers2(); } if (__GLeeCheckExtension("GL_NV_transform_feedback", &extensionNames) ) { _GLEE_NV_transform_feedback = GL_TRUE; __GLeeLink_GL_NV_transform_feedback(); } if (__GLeeCheckExtension("GL_EXT_bindable_uniform", &extensionNames) ) { _GLEE_EXT_bindable_uniform = GL_TRUE; __GLeeLink_GL_EXT_bindable_uniform(); } if (__GLeeCheckExtension("GL_EXT_texture_integer", &extensionNames) ) { _GLEE_EXT_texture_integer = GL_TRUE; __GLeeLink_GL_EXT_texture_integer(); } if (__GLeeCheckExtension("GL_GREMEDY_frame_terminator", &extensionNames) ) { _GLEE_GREMEDY_frame_terminator = GL_TRUE; __GLeeLink_GL_GREMEDY_frame_terminator(); } if (__GLeeCheckExtension("GL_NV_conditional_render", &extensionNames) ) { _GLEE_NV_conditional_render = GL_TRUE; __GLeeLink_GL_NV_conditional_render(); } if (__GLeeCheckExtension("GL_NV_present_video", &extensionNames) ) { _GLEE_NV_present_video = GL_TRUE; __GLeeLink_GL_NV_present_video(); } if (__GLeeCheckExtension("GL_EXT_transform_feedback", &extensionNames) ) { _GLEE_EXT_transform_feedback = GL_TRUE; __GLeeLink_GL_EXT_transform_feedback(); } if (__GLeeCheckExtension("GL_EXT_direct_state_access", &extensionNames) ) { _GLEE_EXT_direct_state_access = GL_TRUE; __GLeeLink_GL_EXT_direct_state_access(); } if (__GLeeCheckExtension("GL_EXT_vertex_array_bgra", &extensionNames) ) { _GLEE_EXT_vertex_array_bgra = GL_TRUE; __GLeeLink_GL_EXT_vertex_array_bgra(); } if (__GLeeCheckExtension("GL_EXT_texture_swizzle", &extensionNames) ) { _GLEE_EXT_texture_swizzle = GL_TRUE; __GLeeLink_GL_EXT_texture_swizzle(); } if (__GLeeCheckExtension("GL_NV_explicit_multisample", &extensionNames) ) { _GLEE_NV_explicit_multisample = GL_TRUE; __GLeeLink_GL_NV_explicit_multisample(); } if (__GLeeCheckExtension("GL_NV_transform_feedback2", &extensionNames) ) { _GLEE_NV_transform_feedback2 = GL_TRUE; __GLeeLink_GL_NV_transform_feedback2(); } if (__GLeeCheckExtension("GL_SGIX_texture_select", &extensionNames) ) { _GLEE_SGIX_texture_select = GL_TRUE; __GLeeLink_GL_SGIX_texture_select(); } if (__GLeeCheckExtension("GL_INGR_blend_func_separate", &extensionNames) ) { _GLEE_INGR_blend_func_separate = GL_TRUE; __GLeeLink_GL_INGR_blend_func_separate(); } if (__GLeeCheckExtension("GL_SGIX_depth_pass_instrument", &extensionNames) ) { _GLEE_SGIX_depth_pass_instrument = GL_TRUE; __GLeeLink_GL_SGIX_depth_pass_instrument(); } if (__GLeeCheckExtension("GL_SGIX_igloo_interface", &extensionNames) ) { _GLEE_SGIX_igloo_interface = GL_TRUE; __GLeeLink_GL_SGIX_igloo_interface(); } if (__GLeeCheckExtension("GL_EXT_fragment_lighting", &extensionNames) ) { _GLEE_EXT_fragment_lighting = GL_TRUE; __GLeeLink_GL_EXT_fragment_lighting(); } if (__GLeeCheckExtension("GL_EXT_geometry_shader4", &extensionNames) ) { _GLEE_EXT_geometry_shader4 = GL_TRUE; __GLeeLink_GL_EXT_geometry_shader4(); } if (__GLeeCheckExtension("GL_EXT_scene_marker", &extensionNames) ) { _GLEE_EXT_scene_marker = GL_TRUE; __GLeeLink_GL_EXT_scene_marker(); } if (__GLeeCheckExtension("GL_EXT_texture_compression_dxt1", &extensionNames) ) { _GLEE_EXT_texture_compression_dxt1 = GL_TRUE; __GLeeLink_GL_EXT_texture_compression_dxt1(); } if (__GLeeCheckExtension("GL_EXT_texture_env", &extensionNames) ) { _GLEE_EXT_texture_env = GL_TRUE; __GLeeLink_GL_EXT_texture_env(); } if (__GLeeCheckExtension("GL_IBM_static_data", &extensionNames) ) { _GLEE_IBM_static_data = GL_TRUE; __GLeeLink_GL_IBM_static_data(); } if (__GLeeCheckExtension("GL_NV_gpu_program4", &extensionNames) ) { _GLEE_NV_gpu_program4 = GL_TRUE; __GLeeLink_GL_NV_gpu_program4(); } if (__GLeeCheckExtension("GL_OES_byte_coordinates", &extensionNames) ) { _GLEE_OES_byte_coordinates = GL_TRUE; __GLeeLink_GL_OES_byte_coordinates(); } if (__GLeeCheckExtension("GL_OES_compressed_paletted_texture", &extensionNames) ) { _GLEE_OES_compressed_paletted_texture = GL_TRUE; __GLeeLink_GL_OES_compressed_paletted_texture(); } if (__GLeeCheckExtension("GL_OES_single_precision", &extensionNames) ) { _GLEE_OES_single_precision = GL_TRUE; __GLeeLink_GL_OES_single_precision(); } if (__GLeeCheckExtension("GL_SGIX_pixel_texture_bits", &extensionNames) ) { _GLEE_SGIX_pixel_texture_bits = GL_TRUE; __GLeeLink_GL_SGIX_pixel_texture_bits(); } if (__GLeeCheckExtension("GL_SGIX_texture_range", &extensionNames) ) { _GLEE_SGIX_texture_range = GL_TRUE; __GLeeLink_GL_SGIX_texture_range(); } #ifdef WIN32 if (__GLeeCheckExtension("WGL_ARB_buffer_region", &extensionNames) ) { _GLEE_WGL_ARB_buffer_region = GL_TRUE; __GLeeLink_WGL_ARB_buffer_region(); } if (__GLeeCheckExtension("WGL_ARB_multisample", &extensionNames) ) { _GLEE_WGL_ARB_multisample = GL_TRUE; __GLeeLink_WGL_ARB_multisample(); } if (__GLeeCheckExtension("WGL_ARB_extensions_string", &extensionNames) ) { _GLEE_WGL_ARB_extensions_string = GL_TRUE; __GLeeLink_WGL_ARB_extensions_string(); } if (__GLeeCheckExtension("WGL_ARB_pixel_format", &extensionNames) ) { _GLEE_WGL_ARB_pixel_format = GL_TRUE; __GLeeLink_WGL_ARB_pixel_format(); } if (__GLeeCheckExtension("WGL_ARB_make_current_read", &extensionNames) ) { _GLEE_WGL_ARB_make_current_read = GL_TRUE; __GLeeLink_WGL_ARB_make_current_read(); } if (__GLeeCheckExtension("WGL_ARB_pbuffer", &extensionNames) ) { _GLEE_WGL_ARB_pbuffer = GL_TRUE; __GLeeLink_WGL_ARB_pbuffer(); } if (__GLeeCheckExtension("WGL_ARB_render_texture", &extensionNames) ) { _GLEE_WGL_ARB_render_texture = GL_TRUE; __GLeeLink_WGL_ARB_render_texture(); } if (__GLeeCheckExtension("WGL_ARB_pixel_format_float", &extensionNames) ) { _GLEE_WGL_ARB_pixel_format_float = GL_TRUE; __GLeeLink_WGL_ARB_pixel_format_float(); } if (__GLeeCheckExtension("WGL_ARB_create_context", &extensionNames) ) { _GLEE_WGL_ARB_create_context = GL_TRUE; __GLeeLink_WGL_ARB_create_context(); } if (__GLeeCheckExtension("WGL_EXT_make_current_read", &extensionNames) ) { _GLEE_WGL_EXT_make_current_read = GL_TRUE; __GLeeLink_WGL_EXT_make_current_read(); } if (__GLeeCheckExtension("WGL_EXT_pixel_format", &extensionNames) ) { _GLEE_WGL_EXT_pixel_format = GL_TRUE; __GLeeLink_WGL_EXT_pixel_format(); } if (__GLeeCheckExtension("WGL_EXT_pbuffer", &extensionNames) ) { _GLEE_WGL_EXT_pbuffer = GL_TRUE; __GLeeLink_WGL_EXT_pbuffer(); } if (__GLeeCheckExtension("WGL_EXT_depth_float", &extensionNames) ) { _GLEE_WGL_EXT_depth_float = GL_TRUE; __GLeeLink_WGL_EXT_depth_float(); } if (__GLeeCheckExtension("WGL_3DFX_multisample", &extensionNames) ) { _GLEE_WGL_3DFX_multisample = GL_TRUE; __GLeeLink_WGL_3DFX_multisample(); } if (__GLeeCheckExtension("WGL_EXT_multisample", &extensionNames) ) { _GLEE_WGL_EXT_multisample = GL_TRUE; __GLeeLink_WGL_EXT_multisample(); } if (__GLeeCheckExtension("WGL_I3D_digital_video_control", &extensionNames) ) { _GLEE_WGL_I3D_digital_video_control = GL_TRUE; __GLeeLink_WGL_I3D_digital_video_control(); } if (__GLeeCheckExtension("WGL_I3D_gamma", &extensionNames) ) { _GLEE_WGL_I3D_gamma = GL_TRUE; __GLeeLink_WGL_I3D_gamma(); } if (__GLeeCheckExtension("WGL_I3D_genlock", &extensionNames) ) { _GLEE_WGL_I3D_genlock = GL_TRUE; __GLeeLink_WGL_I3D_genlock(); } if (__GLeeCheckExtension("WGL_I3D_image_buffer", &extensionNames) ) { _GLEE_WGL_I3D_image_buffer = GL_TRUE; __GLeeLink_WGL_I3D_image_buffer(); } if (__GLeeCheckExtension("WGL_I3D_swap_frame_lock", &extensionNames) ) { _GLEE_WGL_I3D_swap_frame_lock = GL_TRUE; __GLeeLink_WGL_I3D_swap_frame_lock(); } if (__GLeeCheckExtension("WGL_NV_render_depth_texture", &extensionNames) ) { _GLEE_WGL_NV_render_depth_texture = GL_TRUE; __GLeeLink_WGL_NV_render_depth_texture(); } if (__GLeeCheckExtension("WGL_NV_render_texture_rectangle", &extensionNames) ) { _GLEE_WGL_NV_render_texture_rectangle = GL_TRUE; __GLeeLink_WGL_NV_render_texture_rectangle(); } if (__GLeeCheckExtension("WGL_ATI_pixel_format_float", &extensionNames) ) { _GLEE_WGL_ATI_pixel_format_float = GL_TRUE; __GLeeLink_WGL_ATI_pixel_format_float(); } if (__GLeeCheckExtension("WGL_NV_float_buffer", &extensionNames) ) { _GLEE_WGL_NV_float_buffer = GL_TRUE; __GLeeLink_WGL_NV_float_buffer(); } if (__GLeeCheckExtension("WGL_3DL_stereo_control", &extensionNames) ) { _GLEE_WGL_3DL_stereo_control = GL_TRUE; __GLeeLink_WGL_3DL_stereo_control(); } if (__GLeeCheckExtension("WGL_EXT_pixel_format_packed_float", &extensionNames) ) { _GLEE_WGL_EXT_pixel_format_packed_float = GL_TRUE; __GLeeLink_WGL_EXT_pixel_format_packed_float(); } if (__GLeeCheckExtension("WGL_EXT_framebuffer_sRGB", &extensionNames) ) { _GLEE_WGL_EXT_framebuffer_sRGB = GL_TRUE; __GLeeLink_WGL_EXT_framebuffer_sRGB(); } if (__GLeeCheckExtension("WGL_NV_present_video", &extensionNames) ) { _GLEE_WGL_NV_present_video = GL_TRUE; __GLeeLink_WGL_NV_present_video(); } if (__GLeeCheckExtension("WGL_NV_swap_group", &extensionNames) ) { _GLEE_WGL_NV_swap_group = GL_TRUE; __GLeeLink_WGL_NV_swap_group(); } if (__GLeeCheckExtension("WGL_NV_gpu_affinity", &extensionNames) ) { _GLEE_WGL_NV_gpu_affinity = GL_TRUE; __GLeeLink_WGL_NV_gpu_affinity(); } if (__GLeeCheckExtension("WGL_EXT_display_color_table", &extensionNames) ) { _GLEE_WGL_EXT_display_color_table = GL_TRUE; __GLeeLink_WGL_EXT_display_color_table(); } if (__GLeeCheckExtension("WGL_EXT_extensions_string", &extensionNames) ) { _GLEE_WGL_EXT_extensions_string = GL_TRUE; __GLeeLink_WGL_EXT_extensions_string(); } if (__GLeeCheckExtension("WGL_EXT_swap_control", &extensionNames) ) { _GLEE_WGL_EXT_swap_control = GL_TRUE; __GLeeLink_WGL_EXT_swap_control(); } if (__GLeeCheckExtension("WGL_NV_vertex_array_range", &extensionNames) ) { _GLEE_WGL_NV_vertex_array_range = GL_TRUE; __GLeeLink_WGL_NV_vertex_array_range(); } if (__GLeeCheckExtension("WGL_OML_sync_control", &extensionNames) ) { _GLEE_WGL_OML_sync_control = GL_TRUE; __GLeeLink_WGL_OML_sync_control(); } if (__GLeeCheckExtension("WGL_I3D_swap_frame_usage", &extensionNames) ) { _GLEE_WGL_I3D_swap_frame_usage = GL_TRUE; __GLeeLink_WGL_I3D_swap_frame_usage(); } if (__GLeeCheckExtension("WGL_NV_video_output", &extensionNames) ) { _GLEE_WGL_NV_video_output = GL_TRUE; __GLeeLink_WGL_NV_video_output(); } #elif defined(__APPLE__) || defined(__APPLE_CC__) #else /* GLX */ if (__GLeeCheckExtension("GLX_VERSION_1_3", &extensionNames) ) { _GLEE_GLX_VERSION_1_3 = GL_TRUE; __GLeeLink_GLX_VERSION_1_3(); } if (__GLeeCheckExtension("GLX_VERSION_1_4", &extensionNames) ) { _GLEE_GLX_VERSION_1_4 = GL_TRUE; __GLeeLink_GLX_VERSION_1_4(); } if (__GLeeCheckExtension("GLX_ARB_multisample", &extensionNames) ) { _GLEE_GLX_ARB_multisample = GL_TRUE; __GLeeLink_GLX_ARB_multisample(); } if (__GLeeCheckExtension("GLX_ARB_fbconfig_float", &extensionNames) ) { _GLEE_GLX_ARB_fbconfig_float = GL_TRUE; __GLeeLink_GLX_ARB_fbconfig_float(); } if (__GLeeCheckExtension("GLX_ARB_create_context", &extensionNames) ) { _GLEE_GLX_ARB_create_context = GL_TRUE; __GLeeLink_GLX_ARB_create_context(); } if (__GLeeCheckExtension("GLX_SGIS_multisample", &extensionNames) ) { _GLEE_GLX_SGIS_multisample = GL_TRUE; __GLeeLink_GLX_SGIS_multisample(); } if (__GLeeCheckExtension("GLX_EXT_visual_info", &extensionNames) ) { _GLEE_GLX_EXT_visual_info = GL_TRUE; __GLeeLink_GLX_EXT_visual_info(); } if (__GLeeCheckExtension("GLX_SGI_swap_control", &extensionNames) ) { _GLEE_GLX_SGI_swap_control = GL_TRUE; __GLeeLink_GLX_SGI_swap_control(); } if (__GLeeCheckExtension("GLX_SGI_video_sync", &extensionNames) ) { _GLEE_GLX_SGI_video_sync = GL_TRUE; __GLeeLink_GLX_SGI_video_sync(); } if (__GLeeCheckExtension("GLX_SGI_make_current_read", &extensionNames) ) { _GLEE_GLX_SGI_make_current_read = GL_TRUE; __GLeeLink_GLX_SGI_make_current_read(); } if (__GLeeCheckExtension("GLX_EXT_visual_rating", &extensionNames) ) { _GLEE_GLX_EXT_visual_rating = GL_TRUE; __GLeeLink_GLX_EXT_visual_rating(); } if (__GLeeCheckExtension("GLX_EXT_import_context", &extensionNames) ) { _GLEE_GLX_EXT_import_context = GL_TRUE; __GLeeLink_GLX_EXT_import_context(); } if (__GLeeCheckExtension("GLX_SGIX_fbconfig", &extensionNames) ) { _GLEE_GLX_SGIX_fbconfig = GL_TRUE; __GLeeLink_GLX_SGIX_fbconfig(); } if (__GLeeCheckExtension("GLX_SGIX_pbuffer", &extensionNames) ) { _GLEE_GLX_SGIX_pbuffer = GL_TRUE; __GLeeLink_GLX_SGIX_pbuffer(); } if (__GLeeCheckExtension("GLX_SGI_cushion", &extensionNames) ) { _GLEE_GLX_SGI_cushion = GL_TRUE; __GLeeLink_GLX_SGI_cushion(); } if (__GLeeCheckExtension("GLX_SGIX_video_resize", &extensionNames) ) { _GLEE_GLX_SGIX_video_resize = GL_TRUE; __GLeeLink_GLX_SGIX_video_resize(); } if (__GLeeCheckExtension("GLX_SGIX_swap_group", &extensionNames) ) { _GLEE_GLX_SGIX_swap_group = GL_TRUE; __GLeeLink_GLX_SGIX_swap_group(); } if (__GLeeCheckExtension("GLX_SGIX_swap_barrier", &extensionNames) ) { _GLEE_GLX_SGIX_swap_barrier = GL_TRUE; __GLeeLink_GLX_SGIX_swap_barrier(); } if (__GLeeCheckExtension("GLX_SGIS_blended_overlay", &extensionNames) ) { _GLEE_GLX_SGIS_blended_overlay = GL_TRUE; __GLeeLink_GLX_SGIS_blended_overlay(); } if (__GLeeCheckExtension("GLX_SGIS_shared_multisample", &extensionNames) ) { _GLEE_GLX_SGIS_shared_multisample = GL_TRUE; __GLeeLink_GLX_SGIS_shared_multisample(); } if (__GLeeCheckExtension("GLX_SUN_get_transparent_index", &extensionNames) ) { _GLEE_GLX_SUN_get_transparent_index = GL_TRUE; __GLeeLink_GLX_SUN_get_transparent_index(); } if (__GLeeCheckExtension("GLX_3DFX_multisample", &extensionNames) ) { _GLEE_GLX_3DFX_multisample = GL_TRUE; __GLeeLink_GLX_3DFX_multisample(); } if (__GLeeCheckExtension("GLX_MESA_copy_sub_buffer", &extensionNames) ) { _GLEE_GLX_MESA_copy_sub_buffer = GL_TRUE; __GLeeLink_GLX_MESA_copy_sub_buffer(); } if (__GLeeCheckExtension("GLX_MESA_pixmap_colormap", &extensionNames) ) { _GLEE_GLX_MESA_pixmap_colormap = GL_TRUE; __GLeeLink_GLX_MESA_pixmap_colormap(); } if (__GLeeCheckExtension("GLX_MESA_release_buffers", &extensionNames) ) { _GLEE_GLX_MESA_release_buffers = GL_TRUE; __GLeeLink_GLX_MESA_release_buffers(); } if (__GLeeCheckExtension("GLX_MESA_set_3dfx_mode", &extensionNames) ) { _GLEE_GLX_MESA_set_3dfx_mode = GL_TRUE; __GLeeLink_GLX_MESA_set_3dfx_mode(); } if (__GLeeCheckExtension("GLX_SGIX_visual_select_group", &extensionNames) ) { _GLEE_GLX_SGIX_visual_select_group = GL_TRUE; __GLeeLink_GLX_SGIX_visual_select_group(); } if (__GLeeCheckExtension("GLX_OML_swap_method", &extensionNames) ) { _GLEE_GLX_OML_swap_method = GL_TRUE; __GLeeLink_GLX_OML_swap_method(); } if (__GLeeCheckExtension("GLX_OML_sync_control", &extensionNames) ) { _GLEE_GLX_OML_sync_control = GL_TRUE; __GLeeLink_GLX_OML_sync_control(); } if (__GLeeCheckExtension("GLX_NV_float_buffer", &extensionNames) ) { _GLEE_GLX_NV_float_buffer = GL_TRUE; __GLeeLink_GLX_NV_float_buffer(); } if (__GLeeCheckExtension("GLX_SGIX_hyperpipe", &extensionNames) ) { _GLEE_GLX_SGIX_hyperpipe = GL_TRUE; __GLeeLink_GLX_SGIX_hyperpipe(); } if (__GLeeCheckExtension("GLX_MESA_agp_offset", &extensionNames) ) { _GLEE_GLX_MESA_agp_offset = GL_TRUE; __GLeeLink_GLX_MESA_agp_offset(); } if (__GLeeCheckExtension("GLX_EXT_fbconfig_packed_float", &extensionNames) ) { _GLEE_GLX_EXT_fbconfig_packed_float = GL_TRUE; __GLeeLink_GLX_EXT_fbconfig_packed_float(); } if (__GLeeCheckExtension("GLX_EXT_framebuffer_sRGB", &extensionNames) ) { _GLEE_GLX_EXT_framebuffer_sRGB = GL_TRUE; __GLeeLink_GLX_EXT_framebuffer_sRGB(); } if (__GLeeCheckExtension("GLX_EXT_texture_from_pixmap", &extensionNames) ) { _GLEE_GLX_EXT_texture_from_pixmap = GL_TRUE; __GLeeLink_GLX_EXT_texture_from_pixmap(); } if (__GLeeCheckExtension("GLX_NV_present_video", &extensionNames) ) { _GLEE_GLX_NV_present_video = GL_TRUE; __GLeeLink_GLX_NV_present_video(); } if (__GLeeCheckExtension("GLX_NV_video_out", &extensionNames) ) { _GLEE_GLX_NV_video_out = GL_TRUE; __GLeeLink_GLX_NV_video_out(); } if (__GLeeCheckExtension("GLX_NV_swap_group", &extensionNames) ) { _GLEE_GLX_NV_swap_group = GL_TRUE; __GLeeLink_GLX_NV_swap_group(); } if (__GLeeCheckExtension("GLX_EXT_scene_marker", &extensionNames) ) { _GLEE_GLX_EXT_scene_marker = GL_TRUE; __GLeeLink_GLX_EXT_scene_marker(); } if (__GLeeCheckExtension("GLX_NV_video_output", &extensionNames) ) { _GLEE_GLX_NV_video_output = GL_TRUE; __GLeeLink_GLX_NV_video_output(); } #endif /* end GLX */ __GLeeExtList_clean(&extensionNames); return GL_TRUE; } #endif fs-uae-2.2.3+dfsg/libfsemu/src/string.c0000644000175000017500000003143512162366654020131 0ustar glaubitzglaubitz // some code adapted from glib #include #include #include #include #include #include #include #include #include #include #include #include #include /* For tolower() */ #define FS_STR_DELIMITERS "_-|> <." #define ISSPACE(c) ((c) == ' ' || (c) == '\f' || (c) == '\n' || \ (c) == '\r' || (c) == '\t' || (c) == '\v') #define ISUPPER(c) ((c) >= 'A' && (c) <= 'Z') #define ISLOWER(c) ((c) >= 'a' && (c) <= 'z') #define ISALPHA(c) (ISUPPER (c) || ISLOWER (c)) #define TOUPPER(c) (ISLOWER (c) ? (c) - 'a' + 'A' : (c)) #define TOLOWER(c) (ISUPPER (c) ? (c) - 'A' + 'a' : (c)) static const uint16_t ascii_table_data[256] = { 0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x104, 0x104, 0x004, 0x104, 0x104, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x140, 0x0d0, 0x0d0, 0x0d0, 0x0d0, 0x0d0, 0x0d0, 0x0d0, 0x0d0, 0x0d0, 0x0d0, 0x0d0, 0x0d0, 0x0d0, 0x0d0, 0x0d0, 0x459, 0x459, 0x459, 0x459, 0x459, 0x459, 0x459, 0x459, 0x459, 0x459, 0x0d0, 0x0d0, 0x0d0, 0x0d0, 0x0d0, 0x0d0, 0x0d0, 0x653, 0x653, 0x653, 0x653, 0x653, 0x653, 0x253, 0x253, 0x253, 0x253, 0x253, 0x253, 0x253, 0x253, 0x253, 0x253, 0x253, 0x253, 0x253, 0x253, 0x253, 0x253, 0x253, 0x253, 0x253, 0x253, 0x0d0, 0x0d0, 0x0d0, 0x0d0, 0x0d0, 0x0d0, 0x473, 0x473, 0x473, 0x473, 0x473, 0x473, 0x073, 0x073, 0x073, 0x073, 0x073, 0x073, 0x073, 0x073, 0x073, 0x073, 0x073, 0x073, 0x073, 0x073, 0x073, 0x073, 0x073, 0x073, 0x073, 0x073, 0x0d0, 0x0d0, 0x0d0, 0x0d0, 0x004 /* the upper 128 are all zeroes */ }; const uint16_t * const fs_ascii_table = ascii_table_data; int fs_str_equal (const void *v1, const void *v2) { const char *string1 = v1; const char *string2 = v2; return strcmp (string1, string2) == 0; } unsigned int fs_str_hash (const void *v) { const signed char *p; uint32_t h = 5381; for (p = v; *p != '\0'; p++) { h = (h << 5) + h + *p; } return h; } int fs_ascii_strcasecmp(const char *s1, const char *s2) { int c1, c2; if (s1 == NULL) { return 0; } if (s2 == NULL) { return 0; } while (*s1 && *s2) { c1 = (int) (unsigned char) TOLOWER (*s1); c2 = (int) (unsigned char) TOLOWER (*s2); if (c1 != c2) return (c1 - c2); s1++; s2++; } return (((int) (unsigned char) *s1) - ((int) (unsigned char) *s2)); } char* fs_strdup(const char *str) { char *new_str; size_t length; if (str) { length = strlen(str) + 1; new_str = fs_new(char, length); memcpy(new_str, str, length); } else { new_str = NULL; } return new_str; } void * fs_memdup(const void * mem, unsigned int byte_size) { void * new_mem; if (mem) { new_mem = malloc(byte_size); memcpy(new_mem, mem, byte_size); } else { new_mem = NULL; } return new_mem; } char* fs_strndup(const char *str, size_t n) { char *new_str; if (str) { new_str = fs_new (char, n + 1); strncpy(new_str, str, n); new_str[n] = '\0'; } else new_str = NULL; return new_str; } char *fs_strnfill(size_t length, char fill_char) { char *str; str = fs_new (char, length + 1); memset(str, (unsigned char) fill_char, length); str[length] = '\0'; return str; } char *fs_stpcpy(char *dest, const char *src) { #ifdef HAVE_STPCPY g_return_val_if_fail (dest != NULL, NULL); g_return_val_if_fail (src != NULL, NULL); return stpcpy (dest, src); #else register char *d = dest; register const char *s = src; if (src == NULL) { return NULL; } if (dest == NULL) { return NULL; } do *d++ = *s; while (*s++ != '\0'); return d - 1; #endif } char *fs_strdup_vprintf(const char *format, va_list args) { int n; int size = 100; /* Guess we need no more than 100 bytes. */ char *p, *np; va_list ap; if ((p = malloc(size)) == NULL) return NULL; while (1) { va_copy(ap, args); n = vsnprintf(p, size, format, ap); va_end(ap); // If that worked, return the string. if (n > -1 && n < size) return p; // Else try again with more space. if (n > -1) // glibc 2.1 size = n+1; // precisely what is needed else // glibc 2.0 size *= 2; // twice the old size if ((np = realloc (p, size)) == NULL) { free(p); return NULL; } else { p = np; } } } char* fs_strdup_printf(const char *format, ...) { char *buffer; va_list args; va_start(args, format); buffer = fs_strdup_vprintf(format, args); va_end(args); return buffer; } char* fs_strconcat(const char *string1, ...) { size_t l; va_list args; char *s; char *concat; char *ptr; if (!string1) return NULL; l = 1 + strlen(string1); va_start(args, string1); s = va_arg (args, char*); while (s) { l += strlen(s); s = va_arg (args, char*); } va_end(args); concat = fs_new (char, l); ptr = concat; ptr = fs_stpcpy(ptr, string1); va_start(args, string1); s = va_arg (args, char*); while (s) { ptr = fs_stpcpy(ptr, s); s = va_arg (args, char*); } va_end(args); return concat; } int fs_str_has_suffix(const char *str, const char *suffix) { int str_len; int suffix_len; if (str == NULL) { return 0; } if (suffix == NULL) { return 0; } str_len = strlen(str); suffix_len = strlen(suffix); if (str_len < suffix_len) return FALSE; return strcmp(str + str_len - suffix_len, suffix) == 0; } int fs_str_has_prefix(const char *str, const char *prefix) { int str_len; int prefix_len; if (str == NULL) { return 0; } if (prefix == NULL) { return 0; } str_len = strlen(str); prefix_len = strlen(prefix); if (str_len < prefix_len) return FALSE; return strncmp(str, prefix, prefix_len) == 0; } char *fs_strdelimit(char *string, const char *delimiters, char new_delim) { register char *c; if (string == NULL) { return NULL; } if (!delimiters) delimiters = FS_STR_DELIMITERS; for (c = string; *c; c++) { if (strchr(delimiters, *c)) *c = new_delim; } return string; } char *fs_strchug(char *string) { unsigned char *start; if (string == NULL) { return NULL; } for (start = (unsigned char*) string; *start && fs_ascii_isspace(*start); start++) ; memmove(string, start, strlen((char *) start) + 1); return string; } char *fs_strchomp(char *string) { size_t len; if (string == NULL) { return NULL; } len = strlen(string); while (len--) { if (fs_ascii_isspace((unsigned char) string[len])) string[len] = '\0'; else break; } return string; } char fs_ascii_tolower(char c) { return fs_ascii_isupper(c) ? c - 'A' + 'a' : c; } char fs_ascii_toupper(char c) { return fs_ascii_islower(c) ? c - 'a' + 'A' : c; } char *fs_ascii_strdown(const char *str, ssize_t len) { char *result, *s; if (str == NULL) { return NULL; } if (len < 0) len = strlen(str); result = fs_strndup(str, len); for (s = result; *s; s++) *s = fs_ascii_tolower(*s); return result; } char *fs_ascii_strup(const char *str, ssize_t len) { char *result, *s; if (str == NULL) { return NULL; } if (len < 0) len = strlen(str); result = fs_strndup(str, len); for (s = result; *s; s++) *s = fs_ascii_toupper(*s); return result; } double fs_ascii_strtod(const char *nptr, char **endptr) { char *fail_pos; double val; //struct lconv *locale_data; const char *decimal_point; int decimal_point_len; const char *p, *decimal_point_pos; const char *end = NULL; /* Silence gcc */ int strtod_errno; if (nptr == NULL) { return 0; } fail_pos = NULL; //locale_data = localeconv(); //decimal_point = locale_data->decimal_point; decimal_point = "."; decimal_point_len = strlen(decimal_point); //g_assert(decimal_point_len != 0); decimal_point_pos = NULL; end = NULL; if (decimal_point[0] != '.' || decimal_point[1] != 0) { p = nptr; /* Skip leading space */ while (fs_ascii_isspace (*p)) p++; /* Skip leading optional sign */ if (*p == '+' || *p == '-') p++; if (p[0] == '0' && (p[1] == 'x' || p[1] == 'X')) { p += 2; /* HEX - find the (optional) decimal point */ while (fs_ascii_isxdigit (*p)) p++; if (*p == '.') decimal_point_pos = p++; while (fs_ascii_isxdigit (*p)) p++; if (*p == 'p' || *p == 'P') p++; if (*p == '+' || *p == '-') p++; while (fs_ascii_isdigit (*p)) p++; end = p; } else if (fs_ascii_isdigit (*p) || *p == '.') { while (fs_ascii_isdigit (*p)) p++; if (*p == '.') decimal_point_pos = p++; while (fs_ascii_isdigit (*p)) p++; if (*p == 'e' || *p == 'E') p++; if (*p == '+' || *p == '-') p++; while (fs_ascii_isdigit (*p)) p++; end = p; } /* For the other cases, we need not convert the decimal point */ } if (decimal_point_pos) { char *copy, *c; /* We need to convert the '.' to the locale specific decimal point */ copy = malloc(end - nptr + 1 + decimal_point_len); c = copy; memcpy(c, nptr, decimal_point_pos - nptr); c += decimal_point_pos - nptr; memcpy(c, decimal_point, decimal_point_len); c += decimal_point_len; memcpy(c, decimal_point_pos + 1, end - (decimal_point_pos + 1)); c += end - (decimal_point_pos + 1); *c = 0; errno = 0; val = strtod(copy, &fail_pos); strtod_errno = errno; if (fail_pos) { if (fail_pos - copy > decimal_point_pos - nptr) fail_pos = (char *) nptr + (fail_pos - copy) - (decimal_point_len - 1); else fail_pos = (char *) nptr + (fail_pos - copy); } free(copy); } else if (end) { char *copy; copy = malloc(end - (char *) nptr + 1); memcpy(copy, nptr, end - nptr); *(copy + (end - (char *) nptr)) = 0; errno = 0; val = strtod(copy, &fail_pos); strtod_errno = errno; if (fail_pos) { fail_pos = (char *) nptr + (fail_pos - copy); } free(copy); } else { errno = 0; val = strtod(nptr, &fail_pos); strtod_errno = errno; } if (endptr) *endptr = fail_pos; errno = strtod_errno; return val; } void fs_strfreev(char **str_array) { if (str_array) { int i; for (i = 0; str_array[i] != NULL ; i++) { free(str_array[i]); } free(str_array); } } char** fs_strsplit(const char *string, const char *delimiter, int max_tokens) { fs_list *string_list = NULL, *slist; char **str_array, *s; unsigned int n = 0; const char *remainder; if (string == NULL) { return NULL; } if (delimiter == NULL) { return NULL; } if (delimiter[0] == '\0') { return NULL; } if (max_tokens < 1) { max_tokens = INT_MAX; } remainder = string; s = strstr(remainder, delimiter); if (s) { size_t delimiter_len = strlen(delimiter); while (--max_tokens && s) { size_t len; len = s - remainder; string_list = fs_list_prepend(string_list, fs_strndup(remainder, len)); n++; remainder = s + delimiter_len; s = strstr(remainder, delimiter); } } if (*string) { n++; string_list = fs_list_prepend(string_list, fs_strdup(remainder)); } str_array = fs_new(char*, n + 1); str_array[n--] = NULL; for (slist = string_list; slist; slist = slist->next) str_array[n--] = slist->data; fs_list_free(string_list); return str_array; } fs-uae-2.2.3+dfsg/libfsemu/src/config.c0000644000175000017500000001372212162366654020067 0ustar glaubitzglaubitz#include #include #include #include #include #include #include #include #include #if 0 #ifdef USE_GLIB #include #endif #endif static int g_initialized = 0; fs_hash_table *g_hash_table = NULL; #define LOG_LINE "---------------------------------------------------------" \ "-------------------\n" static void initialize() { g_hash_table = fs_hash_table_new_full(fs_str_hash, fs_str_equal, free, free); g_initialized = 1; } const char *fs_config_get_const_string(const char *key) { if (!g_initialized) { initialize(); } const char *value = (const char *) fs_hash_table_lookup(g_hash_table, key); if (value && !value[0]) { // an empty string is treated as non-existing (unset value) return NULL; } return value; } char *fs_config_get_string(const char *key) { const char* value = fs_config_get_const_string(key); if (value) { return fs_strdup(value); } return NULL; } static void process_key_value(const char *key, char *value, int force) { char *key_lower = fs_ascii_strdown(key, -1); fs_strdelimit (key_lower, "-", '_'); // using fs_config_get_const_string here instead of just // fs_hash_table_lookup, since that also checks for empty strings, which // should be treated as non-existing keys if (!force && fs_config_get_const_string(key_lower)) { fs_log("%s = %s (ignored)\n", key_lower, value); free(key_lower); free(value); } else { fs_strstrip(value); fs_log("%s = %s\n", key_lower, value); // hash table now owns both key_lower and value fs_hash_table_insert(g_hash_table, key_lower, value); } } void fs_config_set_string(const char *key, const char *value) { process_key_value(key, fs_strdup(value), 1); } void fs_config_set_string_if_unset(const char *key, const char *value) { if (fs_config_get_const_string(key) == NULL) { fs_config_set_string(key, value); } } int fs_config_read_file(const char *path, int force) { if (!g_initialized) { initialize(); } fs_log("\n"); fs_log(LOG_LINE); fs_log("config (%s)\n", path); fs_log(LOG_LINE); fs_log("\n"); // FIXME: support checking a config key "end_config", which causes // later calls to fs_config_read_config_file to be ignored if (!force && fs_config_get_boolean("end_config") == 1) { fs_log("end_config is set, ignoring this config file\n"); return 1; } if (!fs_path_is_file(path)) { fs_log("config file %s does not exist\n", path); return 0; } fs_ini_file *ini_file = fs_ini_file_open(path); if (ini_file == NULL) { fs_log("error loading config file\n"); return 0; } char **groups = fs_ini_file_get_groups(ini_file, NULL); for (char **group = groups; *group; group++) { const char *prefix = ""; if (strcmp(*group, "theme") == 0) { prefix = "theme_"; } char **keys = fs_ini_file_get_keys(ini_file, *group, NULL); for (char **key = keys; *key; key++) { char *value = fs_ini_file_get_value(ini_file, *group, *key); if (value) { char *key2 = fs_strconcat(prefix, *key, NULL); process_key_value(key2, value, 0); free(key2); } } fs_strfreev(keys); } fs_strfreev(groups); fs_ini_file_destroy(ini_file); return 1; } int fs_config_get_boolean(const char *key) { return fs_config_get_int(key); } int fs_config_get_int(const char *key) { const char *value = fs_config_get_const_string(key); if (value == NULL) { return FS_CONFIG_NONE; } return atoi(value); } int fs_config_get_int_clamped(const char *key, int min, int max) { int value = fs_config_get_int(key); if (value == FS_CONFIG_NONE) { return value; } if (value < min) { fs_log("clamping value %d for key %s to %d\n", value, key, min); return min; } if (value > max) { fs_log("clamping value %d for key %s to %d\n", value, key, max); return max; } return value; } double fs_config_get_double(const char *key) { const char *value = fs_config_get_const_string(key); if (value == NULL) { return FS_CONFIG_NONE; } return fs_ascii_strtod(value, NULL); } double fs_config_get_double_clamped(const char *key, double min, double max) { double value = fs_config_get_double(key); if (value == FS_CONFIG_NONE) { return value; } if (value < min) { fs_log("clamping value %d for key %s to %d\n", value, key, min); return min; } if (value > max) { fs_log("clamping value %d for key %s to %d\n", value, key, max); return max; } return value; } void fs_config_parse_options(int argc, char **argv) { if (!g_initialized) { initialize(); } int first = 1; for (int i = 0; i < argc; i++) { char *arg = argv[i]; if (!fs_str_has_prefix(arg, "--")) { continue; } char *key = arg + 2; char *value = strchr(arg, '='); char *k, *v; if (value) { k = fs_strndup(key, value - key); v = fs_strdup(value + 1); } else { if (fs_str_has_prefix(key, "no-")) { k = fs_strdup(key + 3); v = fs_strdup("0"); } else { k = fs_strdup(key); v = fs_strdup("1"); } } //if (value) { if (first) { fs_log("\n"); fs_log(LOG_LINE); fs_log("config (command line arguments)\n"); fs_log(LOG_LINE); fs_log("\n"); first = 0; } process_key_value(k, v, 0); free(k); // v is owned by process_key_file, do not free here } } fs-uae-2.2.3+dfsg/libfsemu/src/list.c0000644000175000017500000002704212162366654017575 0ustar glaubitzglaubitz/* GLIB - Library of useful routines for C programming * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ /* * Modified by the GLib Team and others 1997-2000. See the AUTHORS * file for a list of people on the GLib Team. See the ChangeLog * files for a list of changes. These files are distributed with * GLib at ftp://ftp.gtk.org/pub/gtk/. */ /* * MT safe */ #include #include #include static inline fs_list* _fs_list_alloc(void) { return fs_new(fs_list, 1); } static inline fs_list* _fs_list_alloc0(void) { return fs_new0(fs_list, 1); } fs_list* fs_list_alloc(void) { #if 0 return _fs_list_alloc0 (); #endif return fs_new0(fs_list, 1); } void fs_list_free(fs_list *list) { #if 0 g_slice_free_chain(fs_list, list, next); #endif fs_list *link = list; while (link) { fs_list *next = link->next; free(link); link = next; } } void fs_list_free_1(fs_list *list) { #if 0 _fs_list_free_1(list); #endif free(list); } void fs_list_free_full(fs_list *list, fs_destroy_notify free_func) { fs_list_foreach(list, (fs_func) free_func, NULL); fs_list_free(list); } fs_list *fs_list_append(fs_list *list, void * data) { fs_list *new_list; fs_list *last; new_list = _fs_list_alloc(); new_list->data = data; new_list->next = NULL; if (list) { last = fs_list_last(list); /* g_assert (last != NULL); */ last->next = new_list; new_list->prev = last; return list; } else { new_list->prev = NULL; return new_list; } } fs_list *fs_list_prepend(fs_list *list, void *data) { fs_list *new_list; new_list = _fs_list_alloc(); new_list->data = data; new_list->next = list; if (list) { new_list->prev = list->prev; if (list->prev) list->prev->next = new_list; list->prev = new_list; } else new_list->prev = NULL; return new_list; } fs_list *fs_list_insert(fs_list *list, void *data, int position) { fs_list *new_list; fs_list *tmp_list; if (position < 0) return fs_list_append(list, data); else if (position == 0) return fs_list_prepend(list, data); tmp_list = fs_list_nth(list, position); if (!tmp_list) return fs_list_append(list, data); new_list = _fs_list_alloc(); new_list->data = data; new_list->prev = tmp_list->prev; tmp_list->prev->next = new_list; new_list->next = tmp_list; tmp_list->prev = new_list; return list; } fs_list *fs_list_insert_before(fs_list *list, fs_list *sibling, void * data) { if (!list) { list = fs_list_alloc(); list->data = data; //g_return_val_if_fail(sibling == NULL, list); if (sibling != NULL) { return list; } return list; } else if (sibling) { fs_list *node; node = _fs_list_alloc(); node->data = data; node->prev = sibling->prev; node->next = sibling; sibling->prev = node; if (node->prev) { node->prev->next = node; return list; } else { //g_return_val_if_fail(sibling == list, node); if (sibling != list) { return node; } return node; } } else { fs_list *last; last = list; while (last->next) last = last->next; last->next = _fs_list_alloc(); last->next->data = data; last->next->prev = last; last->next->next = NULL; return list; } } fs_list *fs_list_concat(fs_list *list1, fs_list *list2) { fs_list *tmp_list; if (list2) { tmp_list = fs_list_last(list1); if (tmp_list) tmp_list->next = list2; else list1 = list2; list2->prev = tmp_list; } return list1; } fs_list *fs_list_remove(fs_list *list, const void * data) { fs_list *tmp; tmp = list; while (tmp) { if (tmp->data != data) tmp = tmp->next; else { if (tmp->prev) tmp->prev->next = tmp->next; if (tmp->next) tmp->next->prev = tmp->prev; if (list == tmp) list = list->next; fs_list_free_1(tmp); break; } } return list; } fs_list *fs_list_remove_all(fs_list *list, const void * data) { fs_list *tmp = list; while (tmp) { if (tmp->data != data) tmp = tmp->next; else { fs_list *next = tmp->next; if (tmp->prev) tmp->prev->next = next; else list = next; if (next) next->prev = tmp->prev; fs_list_free_1(tmp); tmp = next; } } return list; } static inline fs_list *_fs_list_remove_link(fs_list *list, fs_list *link) { if (link) { if (link->prev) link->prev->next = link->next; if (link->next) link->next->prev = link->prev; if (link == list) list = list->next; link->next = NULL; link->prev = NULL; } return list; } fs_list *fs_list_remove_link(fs_list *list, fs_list *llink) { return _fs_list_remove_link(list, llink); } fs_list *fs_list_delete_link(fs_list *list, fs_list *link_) { list = _fs_list_remove_link(list, link_); fs_list_free_1(link_); return list; } fs_list *fs_list_copy(fs_list *list) { fs_list *new_list = NULL; if (list) { fs_list *last; new_list = _fs_list_alloc0(); new_list->data = list->data; new_list->prev = NULL; last = new_list; list = list->next; while (list) { last->next = _fs_list_alloc0(); last->next->prev = last; last = last->next; last->data = list->data; list = list->next; } last->next = NULL; } return new_list; } fs_list *fs_list_reverse(fs_list *list) { fs_list *last; last = NULL; while (list) { last = list; list = last->next; last->next = last->prev; last->prev = list; } return last; } fs_list *fs_list_nth(fs_list *list, unsigned int n) { while ((n-- > 0) && list) list = list->next; return list; } fs_list *fs_list_nth_prev(fs_list *list, unsigned int n) { while ((n-- > 0) && list) list = list->prev; return list; } void * fs_list_nth_data(fs_list *list, unsigned int n) { while ((n-- > 0) && list) list = list->next; return list ? list->data : NULL; } fs_list *fs_list_find(fs_list *list, const void * data) { while (list) { if (list->data == data) break; list = list->next; } return list; } fs_list *fs_list_find_custom(fs_list *list, const void * data, fs_compare_func func) { //g_return_val_if_fail(func != NULL, list); if (func == NULL) { return list; } while (list) { if (!func(list->data, data)) return list; list = list->next; } return NULL; } int fs_list_position(fs_list *list, fs_list *llink) { int i; i = 0; while (list) { if (list == llink) return i; i++; list = list->next; } return -1; } int fs_list_index(fs_list *list, const void *data) { int i; i = 0; while (list) { if (list->data == data) return i; i++; list = list->next; } return -1; } fs_list *fs_list_last(fs_list *list) { if (list) { while (list->next) list = list->next; } return list; } fs_list *fs_list_first(fs_list *list) { if (list) { while (list->prev) list = list->prev; } return list; } unsigned int fs_list_length(fs_list *list) { unsigned int length; length = 0; while (list) { length++; list = list->next; } return length; } void fs_list_foreach(fs_list *list, fs_func func, void *user_data) { while (list) { fs_list *next = list->next; (*func)(list->data, user_data); list = next; } } static fs_list *fs_list_insert_sorted_real(fs_list *list, void * data, fs_func func, void * user_data) { fs_list *tmp_list = list; fs_list *new_list; int cmp; //g_return_val_if_fail(func != NULL, list); if (func == NULL) { return list; } if (!list) { new_list = _fs_list_alloc0(); new_list->data = data; return new_list; } cmp = ((fs_compare_data_func) func)(data, tmp_list->data, user_data); while ((tmp_list->next) && (cmp > 0)) { tmp_list = tmp_list->next; cmp = ((fs_compare_data_func) func)(data, tmp_list->data, user_data); } new_list = _fs_list_alloc0(); new_list->data = data; if ((!tmp_list->next) && (cmp > 0)) { tmp_list->next = new_list; new_list->prev = tmp_list; return list; } if (tmp_list->prev) { tmp_list->prev->next = new_list; new_list->prev = tmp_list->prev; } new_list->next = tmp_list; tmp_list->prev = new_list; if (tmp_list == list) return new_list; else return list; } fs_list *fs_list_insert_sorted(fs_list *list, void * data, fs_compare_func func) { return fs_list_insert_sorted_real(list, data, (fs_func) func, NULL); } fs_list *fs_list_insert_sorted_with_data(fs_list *list, void * data, fs_compare_data_func func, void * user_data) { return fs_list_insert_sorted_real(list, data, (fs_func) func, user_data); } static fs_list *fs_list_sort_merge(fs_list *l1, fs_list *l2, fs_func compare_func, void * user_data) { fs_list list, *l, *lprev; int cmp; l = &list; lprev = NULL; while (l1 && l2) { cmp = ((fs_compare_data_func) compare_func)(l1->data, l2->data, user_data); if (cmp <= 0) { l->next = l1; l1 = l1->next; } else { l->next = l2; l2 = l2->next; } l = l->next; l->prev = lprev; lprev = l; } l->next = l1 ? l1 : l2; l->next->prev = l; return list.next; } static fs_list *fs_list_sort_real(fs_list *list, fs_func compare_func, void * user_data) { fs_list *l1, *l2; if (!list) return NULL; if (!list->next) return list; l1 = list; l2 = list->next; while ((l2 = l2->next) != NULL) { if ((l2 = l2->next) == NULL) break; l1 = l1->next; } l2 = l1->next; l1->next = NULL; return fs_list_sort_merge(fs_list_sort_real(list, compare_func, user_data), fs_list_sort_real(l2, compare_func, user_data), compare_func, user_data); } fs_list *fs_list_sort(fs_list *list, fs_compare_func compare_func) { return fs_list_sort_real(list, (fs_func) compare_func, NULL); } fs_list *fs_list_sort_with_data(fs_list *list, fs_compare_data_func compare_func, void * user_data) { return fs_list_sort_real(list, (fs_func) compare_func, user_data); } fs-uae-2.2.3+dfsg/libfsemu/src/queue.c0000644000175000017500000003007412162366654017745 0ustar glaubitzglaubitz/* GLIB - Library of useful routines for C programming * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald * * fs_queue: Double ended queue implementation, piggy backed on fs_list. * Copyright (C) 1998 Tim Janik * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ /* * MT safe */ #include #include #include #include fs_queue *fs_queue_new(void) { return fs_new0(fs_queue, 1); } void fs_queue_free(fs_queue *queue) { if (queue == NULL) { return; } fs_list_free(queue->head); //fs_slice_free(fs_queue, queue); free(queue); } void fs_queue_init(fs_queue *queue) { if (queue == NULL) { return; } queue->head = queue->tail = NULL; queue->length = 0; } void fs_queue_clear(fs_queue *queue) { if (queue == NULL) { return; } fs_list_free(queue->head); fs_queue_init(queue); } int fs_queue_is_empty(fs_queue *queue) { if (queue == NULL) { return 1; } return queue->head == NULL ; } unsigned int fs_queue_get_length(fs_queue *queue) { if (queue == NULL) { return 0; } return queue->length; } void fs_queue_reverse(fs_queue *queue) { if (queue == NULL) { return; } queue->tail = queue->head; queue->head = fs_list_reverse(queue->head); } fs_queue *fs_queue_copy(fs_queue *queue) { fs_queue *result; fs_list *list; if (queue == NULL ) { return NULL ; } result = fs_queue_new(); for (list = queue->head; list != NULL ; list = list->next) { fs_queue_push_tail(result, list->data); } return result; } #if 0 void fs_queue_foreach (fs_queue *queue, GFunc func, void * user_data) { fs_list *list; g_return_if_fail (queue != NULL); g_return_if_fail (func != NULL); list = queue->head; while (list) { fs_list *next = list->next; func (list->data, user_data); list = next; } } fs_list *fs_queue_find(fs_queue *queue, const void * data) { g_return_val_if_fail(queue != NULL, NULL ); return g_list_find(queue->head, data); } fs_list * fs_queue_find_custom(fs_queue *queue, const void * data, GCompareFunc func) { g_return_val_if_fail(queue != NULL, NULL ); g_return_val_if_fail(func != NULL, NULL ); return g_list_find_custom(queue->head, data, func); } void fs_queue_sort(fs_queue *queue, GCompareDataFunc compare_func, void * user_data) { g_return_if_fail(queue != NULL ); g_return_if_fail(compare_func != NULL ); queue->head = g_list_sort_with_data(queue->head, compare_func, user_data); queue->tail = g_list_last(queue->head); } #endif void fs_queue_push_head(fs_queue *queue, void * data) { if (queue == NULL) { return; } queue->head = fs_list_prepend(queue->head, data); if (!queue->tail) queue->tail = queue->head; queue->length++; } /** * fs_queue_push_nth: * @queue: a #fs_queue * @data: the data for the new element * @n: the position to insert the new element. If @n is negative or * larger than the number of elements in the @queue, the element is * added to the end of the queue. * * Inserts a new element into @queue at the given position * * Since: 2.4 **/ void fs_queue_push_nth(fs_queue *queue, void * data, int n) { if (queue == NULL) { return; } if (n < 0 || n >= queue->length) { fs_queue_push_tail(queue, data); return; } fs_queue_insert_before(queue, fs_queue_peek_nth_link(queue, n), data); } /** * fs_queue_push_head_link: * @queue: a #fs_queue. * @link_: a single #fs_list element, not a list with * more than one element. * * Adds a new element at the head of the queue. **/ void fs_queue_push_head_link(fs_queue *queue, fs_list *link) { if (queue == NULL || link == NULL) { return; } if (link->prev != NULL || link->next != NULL) { return; } link->next = queue->head; if (queue->head) queue->head->prev = link; else queue->tail = link; queue->head = link; queue->length++; } void fs_queue_push_tail(fs_queue *queue, void * data) { if (queue == NULL) { return; } queue->tail = fs_list_append(queue->tail, data); if (queue->tail->next) queue->tail = queue->tail->next; else queue->head = queue->tail; queue->length++; } void fs_queue_push_tail_link(fs_queue *queue, fs_list *link) { if (queue == NULL || link == NULL) { return; } if (link->prev != NULL || link->next != NULL) { return; } link->prev = queue->tail; if (queue->tail) queue->tail->next = link; else queue->head = link; queue->tail = link; queue->length++; } #if 0 void fs_queue_push_nth_link(fs_queue *queue, int n, fs_list *link_) { fs_list *next; fs_list *prev; g_return_if_fail(queue != NULL ); g_return_if_fail(link_ != NULL ); if (n < 0 || n >= queue->length) { fs_queue_push_tail_link(queue, link_); return; } g_assert(queue->head); g_assert(queue->tail); next = fs_queue_peek_nth_link(queue, n); prev = next->prev; if (prev) prev->next = link_; next->prev = link_; link_->next = next; link_->prev = prev; if (queue->head->prev) queue->head = queue->head->prev; if (queue->tail->next) queue->tail = queue->tail->next; queue->length++; } #endif void *fs_queue_pop_head(fs_queue *queue) { if (queue == NULL) { return NULL; } if (queue->head) { fs_list *node = queue->head; void * data = node->data; queue->head = node->next; if (queue->head) queue->head->prev = NULL; else queue->tail = NULL; fs_list_free_1(node); queue->length--; return data; } return NULL ; } fs_list *fs_queue_pop_head_link(fs_queue *queue) { if (queue == NULL) { return NULL; } if (queue->head) { fs_list *node = queue->head; queue->head = node->next; if (queue->head) { queue->head->prev = NULL; node->next = NULL; } else queue->tail = NULL; queue->length--; return node; } return NULL ; } fs_list *fs_queue_peek_head_link(fs_queue *queue) { if (queue == NULL) { return NULL; } return queue->head; } fs_list *fs_queue_peek_tail_link(fs_queue *queue) { if (queue == NULL) { return NULL; } return queue->tail; } void *fs_queue_pop_tail(fs_queue *queue) { if (queue == NULL) { return NULL; } if (queue->tail) { fs_list *node = queue->tail; void * data = node->data; queue->tail = node->prev; if (queue->tail) queue->tail->next = NULL; else queue->head = NULL; queue->length--; fs_list_free_1(node); return data; } return NULL ; } void *fs_queue_pop_nth(fs_queue *queue, unsigned int n) { fs_list *nth_link; void * result; if (queue == NULL) { return NULL; } if (n >= queue->length) return NULL ; nth_link = fs_queue_peek_nth_link(queue, n); result = nth_link->data; fs_queue_delete_link(queue, nth_link); return result; } fs_list *fs_queue_pop_tail_link(fs_queue *queue) { if (queue == NULL) { return NULL; } if (queue->tail) { fs_list *node = queue->tail; queue->tail = node->prev; if (queue->tail) { queue->tail->next = NULL; node->prev = NULL; } else queue->head = NULL; queue->length--; return node; } return NULL ; } fs_list* fs_queue_pop_nth_link(fs_queue *queue, unsigned int n) { fs_list *link; if (queue == NULL) { return NULL; } if (n >= queue->length) return NULL ; link = fs_queue_peek_nth_link(queue, n); fs_queue_unlink(queue, link); return link; } fs_list *fs_queue_peek_nth_link(fs_queue *queue, unsigned int n) { fs_list *link; int i; if (queue == NULL) { return NULL; } if (n >= queue->length) return NULL ; if (n > queue->length / 2) { n = queue->length - n - 1; link = queue->tail; for (i = 0; i < n; ++i) link = link->prev; } else { link = queue->head; for (i = 0; i < n; ++i) link = link->next; } return link; } int fs_queue_link_index(fs_queue *queue, fs_list *link_) { if (queue == NULL) { return -1; } return fs_list_position(queue->head, link_); } void fs_queue_unlink(fs_queue *queue, fs_list *link_) { if (queue == NULL || link_ == NULL) { return; } if (link_ == queue->tail) queue->tail = queue->tail->prev; queue->head = fs_list_remove_link(queue->head, link_); queue->length--; } void fs_queue_delete_link(fs_queue *queue, fs_list *link_) { if (queue == NULL || link_ == NULL) { return; } fs_queue_unlink(queue, link_); fs_list_free(link_); } void *fs_queue_peek_head(fs_queue *queue) { if (queue == NULL) { return NULL; } return queue->head ? queue->head->data : NULL; } void *fs_queue_peek_tail(fs_queue *queue) { if (queue == NULL) { return NULL; } return queue->tail ? queue->tail->data : NULL; } void *fs_queue_peek_nth(fs_queue *queue, unsigned int n) { fs_list *link; if (queue == NULL) { return NULL; } link = fs_queue_peek_nth_link(queue, n); if (link) return link->data; return NULL ; } int fs_queue_index(fs_queue *queue, const void * data) { if (queue == NULL) { return -1; } return fs_list_index(queue->head, data); } #if 0 int fs_queue_remove(fs_queue *queue, const void * data) { fs_list *link; if (queue == NULL) { return 0; } link = fs_list_find(queue->head, data); if (link) fs_queue_delete_link(queue, link); return (link != NULL); } #endif unsigned int fs_queue_remove_all(fs_queue *queue, const void * data) { fs_list *list; unsigned int old_length; if (queue == NULL) { return 0; } old_length = queue->length; list = queue->head; while (list) { fs_list *next = list->next; if (list->data == data) fs_queue_delete_link(queue, list); list = next; } return (old_length - queue->length); } void fs_queue_insert_before(fs_queue *queue, fs_list *sibling, void * data) { if (queue == NULL || sibling == NULL) { return; } queue->head = fs_list_insert_before(queue->head, sibling, data); queue->length++; } void fs_queue_insert_after(fs_queue *queue, fs_list *sibling, void * data) { if (queue == NULL || sibling == NULL) { return; } if (sibling == queue->tail) { fs_queue_push_tail(queue, data); } else { fs_queue_insert_before(queue, sibling->next, data); } } #if 0 void fs_queue_insert_sorted(fs_queue *queue, void * data, GCompareDataFunc func, void * user_data) { fs_list *list; if (queue == NULL) { return; } list = queue->head; while (list && func(list->data, data, user_data) < 0) list = list->next; if (list) fs_queue_insert_before(queue, list, data); else fs_queue_push_tail(queue, data); } #endif fs-uae-2.2.3+dfsg/libfsemu/src/thread.c0000644000175000017500000001405512162366654020071 0ustar glaubitzglaubitz#include #include #ifdef USE_GLIB #include #endif #ifdef USE_SDL #include #include #endif #ifdef USE_PTHREADS #include #define USE_PSEM #endif #ifdef USE_PSEM #include #endif struct fs_thread { #if defined(USE_PTHREADS) pthread_t thread; pthread_attr_t attr; #elif defined(USE_GLIB) GThread *thread; #endif }; struct fs_mutex { #if defined(USE_PTHREADS) pthread_mutex_t mutex; #elif defined(USE_GLIB) GMutex* mutex; #elif defined(USE_SDL) SDL_mutex* mutex; #endif }; struct fs_condition { #if defined(USE_PTHREADS) pthread_cond_t condition; #elif defined(USE_GLIB) GCond* condition; #elif defined(USE_SDL) SDL_cond* condition; #endif }; struct fs_semaphore { #if defined(USE_PSEM) sem_t semaphore; #elif defined(USE_SDL) SDL_sem* semaphore; #endif }; fs_thread *fs_thread_create(fs_thread_function fn, void *data) { fs_thread *thread = (fs_thread *) malloc(sizeof(fs_thread)); #if defined(USE_PTHREADS) pthread_attr_init(&thread->attr); pthread_attr_setdetachstate(&thread->attr, PTHREAD_CREATE_JOINABLE); pthread_create(&thread->thread, &thread->attr, fn, data); #elif defined(USE_GLIB) thread->thread = g_thread_create(fn, data, TRUE, NULL); #endif /* #ifdef USE_SDL thread->thread = SDL_CreateThread(fn, data); #endif */ return thread; } void *fs_thread_wait(fs_thread *thread) { void *result; #if defined(USE_PTHREADS) pthread_join(thread->thread, &result); pthread_attr_destroy(&thread->attr); #elif defined(USE_GLIB) // FIXME: can use g_thread_ref if we want to keep a reference, // and implemented fs_thread_destroy separately //g_thread_ref(thread->thread); result = g_thread_join(thread->thread); #endif /* #ifdef USE_SDL return SDL_WaitThread(thread->thread, NULL); #endif */ return result; } void fs_thread_destroy(fs_thread *thread) { #ifdef USE_GLIB //g_thread_unref(thread->thread); #endif free(thread); } fs_mutex *fs_mutex_create() { fs_mutex *mutex = (fs_mutex *) malloc(sizeof(fs_mutex)); #if defined(USE_PTHREADS) pthread_mutex_init(&mutex->mutex, NULL); //#elif defined(USE_GLIB) #elif defined(USE_GLIB) mutex->mutex = g_mutex_new(); #elif defined(USE_SDL) mutex->mutex = SDL_CreateMutex(); #endif return mutex; } void fs_mutex_destroy(fs_mutex *mutex) { #if defined(USE_PTHREADS) pthread_mutex_destroy(&mutex->mutex); #elif defined(USE_GLIB) g_mutex_free(mutex->mutex); #elif defined(USE_SDL) SDL_DestroyMutex(mutex->mutex); #endif free(mutex); } int fs_mutex_lock(fs_mutex *mutex) { #if defined(USE_PTHREADS) return pthread_mutex_lock(&mutex->mutex); #elif defined(USE_GLIB) g_mutex_lock(mutex->mutex); return 0; #elif defined(USE_SDL) return SDL_mutexP(mutex->mutex); #endif } int fs_mutex_unlock(fs_mutex *mutex) { #if defined(USE_PTHREADS) return pthread_mutex_unlock(&mutex->mutex); #elif defined(USE_GLIB) g_mutex_unlock(mutex->mutex); return 0; #elif defined(USE_SDL) return SDL_mutexV(mutex->mutex); #endif } fs_condition *fs_condition_create(void) { fs_condition *condition = (fs_condition *) malloc(sizeof(fs_condition)); #if defined(USE_PTHREADS) pthread_cond_init(&condition->condition, NULL); #elif defined(USE_GLIB) condition->condition = g_cond_new(); #elif defined(USE_SDL) condition->condition = SDL_CreateCond(); #endif return condition; } void fs_condition_destroy(fs_condition *condition) { #if defined(USE_PTHREADS) pthread_cond_destroy(&condition->condition); #elif defined(USE_GLIB) g_cond_free(condition->condition); #elif defined(USE_SDL) SDL_DestroyCond(condition->condition); #endif free(condition); } int fs_condition_wait (fs_condition *condition, fs_mutex *mutex) { #if defined(USE_PTHREADS) return pthread_cond_wait(&condition->condition, &mutex->mutex); #elif defined(USE_GLIB) g_cond_wait(condition->condition, mutex->mutex); return 0; #elif defined(USE_SDL) return SDL_CondWait(condition->condition, mutex->mutex); #endif } int fs_condition_timed_wait (fs_condition *condition, fs_mutex *mutex, int64_t real_time) { #if defined(USE_PTHREADS) struct timespec tv; tv.tv_sec = real_time / 1000000; tv.tv_nsec = (real_time % 1000000) * 1000; return pthread_cond_timedwait(&condition->condition, &mutex->mutex, &tv); #elif defined(USE_GLIB) GTimeVal tv; tv.tv_sec = real_time / 1000000; tv.tv_usec = real_time % 1000000; gboolean result = g_cond_timed_wait(condition->condition, mutex->mutex, &tv); return !result; #elif defined(USE_SDL) // FIXME: no timed wait... return SDL_CondWait(condition->condition, mutex->mutex); #endif } int fs_condition_signal(fs_condition *condition) { #if defined(USE_PTHREADS) return pthread_cond_signal(&condition->condition); #elif defined(USE_GLIB) g_cond_signal(condition->condition); return 0; #elif defined(USE_SDL) return SDL_CondSignal(condition->condition); #endif } fs_semaphore *fs_semaphore_create(int value) { fs_semaphore *semaphore = (fs_semaphore *) malloc(sizeof(fs_semaphore)); #if defined(USE_PSEM) sem_init(&semaphore->semaphore, 1, value); #elif defined(USE_SDL) semaphore->semaphore = SDL_CreateSemaphore(value); #endif return semaphore; } void fs_semaphore_destroy(fs_semaphore *semaphore) { #if defined(USE_PSEM) sem_destroy(&semaphore->semaphore); #elif defined(USE_SDL) SDL_DestroySemaphore(semaphore->semaphore); #endif free(semaphore); } int fs_semaphore_post(fs_semaphore *semaphore) { #if defined(USE_PSEM) return sem_post(&semaphore->semaphore); #elif defined(USE_SDL) return SDL_SemPost(semaphore->semaphore); #endif } int fs_semaphore_wait(fs_semaphore *semaphore) { #if defined(USE_PSEM) return sem_wait(&semaphore->semaphore); #elif defined(USE_SDL) return SDL_SemWait(semaphore->semaphore); #endif } int fs_semaphore_try_wait(fs_semaphore *semaphore) { #if defined(USE_PSEM) return sem_trywait(&semaphore->semaphore); #elif defined(USE_SDL) return SDL_SemTryWait(semaphore->semaphore); #endif } fs-uae-2.2.3+dfsg/libfsemu/src/inifile.c0000644000175000017500000002425612162366654020245 0ustar glaubitzglaubitz#include #include #include #include struct fs_ini_file { fs_hash_table *groups; }; static int ini_parse(const char* filename, int (*handler)(void* user, const char* section, const char* name, const char* value), void* user); static void free_group(void *data) { fs_hash_table_destroy((fs_hash_table*) data); } fs_ini_file* fs_ini_file_create() { fs_ini_file *ini_file = malloc(sizeof(ini_file)); // FIXME: use full ini_file->groups = fs_hash_table_new_full(fs_str_hash, fs_str_equal, free, free_group); return ini_file; } static int handler(void *user_data, const char *section, const char *name, const char *value) { fs_ini_file *ini_file = (fs_ini_file*) user_data; fs_hash_table *group = fs_hash_table_lookup(ini_file->groups, section); if (group == NULL) { group = fs_hash_table_new_full(fs_str_hash, fs_str_equal, free, free); fs_hash_table_insert(ini_file->groups, fs_strdup(section), group); } fs_hash_table_insert(group, fs_strdup(name), fs_strdup(value)); return 1; } fs_ini_file* fs_ini_file_open(const char *path) { fs_ini_file *ini_file = fs_ini_file_create(); int result = ini_parse(path, handler, ini_file); if (result == -1) { // could not open file fs_ini_file_destroy(ini_file); return NULL; } return ini_file; } void fs_ini_file_destroy(fs_ini_file *ini_file) { fs_hash_table_destroy(ini_file->groups); free(ini_file); } static char **retrieve_keys(fs_hash_table *hash_table, int *length) { int size = fs_hash_table_size(hash_table); char **result = malloc(sizeof(char*) * (size + 1)); if (length != NULL) { *length = size; } result[size] = NULL; fs_list *key_list = fs_hash_table_get_keys(hash_table); fs_list *item = key_list; int k = 0; while (item) { result[k++] = fs_strdup(item->data); item = item->next; } fs_list_free(key_list); return result; } char **fs_ini_file_get_groups(fs_ini_file *ini_file, int *length) { return retrieve_keys(ini_file->groups, length); } char **fs_ini_file_get_keys(fs_ini_file *ini_file, const char *group_name, int *length) { fs_hash_table *group = fs_hash_table_lookup(ini_file->groups, group_name); if (group == NULL) { return NULL; } return retrieve_keys(group, length); } int fs_ini_file_has_group(fs_ini_file *ini_file, const char *group_name) { return fs_hash_table_lookup(ini_file->groups, group_name) != NULL; } char *fs_ini_file_get_value(fs_ini_file *ini_file, const char *group_name, const char *key) { fs_hash_table *group = fs_hash_table_lookup(ini_file->groups, group_name); if (group == NULL) { return NULL; } char *value = fs_hash_table_lookup(group, key); if (value == NULL) { return NULL; } return fs_strdup(value); } char *fs_ini_file_get_string(fs_ini_file *ini_file, const char *group_name, const char *key) { char *value = fs_ini_file_get_value(ini_file, group_name, key); // FIXME: fix escape sequences return value; } /* inih -- simple .INI file parser inih is released under the New BSD license (see LICENSE.txt). Go to the project home page for more info: http://code.google.com/p/inih/ */ #include #include #include /* inih -- simple .INI file parser inih is released under the New BSD license (see LICENSE.txt). Go to the project home page for more info: http://code.google.com/p/inih/ */ #ifndef __INI_H__ #define __INI_H__ /* Make this header file easier to include in C++ code */ #ifdef __cplusplus extern "C" { #endif #include /* Parse given INI-style file. May have [section]s, name=value pairs (whitespace stripped), and comments starting with ';' (semicolon). Section is "" if name=value pair parsed before any section heading. name:value pairs are also supported as a concession to Python's ConfigParser. For each name=value pair parsed, call handler function with given user pointer as well as section, name, and value (data only valid for duration of handler call). Handler should return nonzero on success, zero on error. Returns 0 on success, line number of first error on parse error (doesn't stop on first error), -1 on file open error, or -2 on memory allocation error (only when INI_USE_STACK is zero). */ static int ini_parse(const char* filename, int (*handler)(void* user, const char* section, const char* name, const char* value), void* user); /* Same as ini_parse(), but takes a FILE* instead of filename. This doesn't close the file when it's finished -- the caller must do that. */ static int ini_parse_file(FILE* file, int (*handler)(void* user, const char* section, const char* name, const char* value), void* user); /* Nonzero to allow multi-line value parsing, in the style of Python's ConfigParser. If allowed, ini_parse() will call the handler with the same name for each subsequent line parsed. */ #ifndef INI_ALLOW_MULTILINE #define INI_ALLOW_MULTILINE 1 #endif /* Nonzero to allow a UTF-8 BOM sequence (0xEF 0xBB 0xBF) at the start of the file. See http://code.google.com/p/inih/issues/detail?id=21 */ #ifndef INI_ALLOW_BOM #define INI_ALLOW_BOM 1 #endif /* Nonzero to use stack, zero to use heap (malloc/free). */ #ifndef INI_USE_STACK #define INI_USE_STACK 0 #endif /* Maximum line length for any line in INI file. */ #ifndef INI_MAX_LINE #define INI_MAX_LINE 4096 #endif #ifdef __cplusplus } #endif #endif /* __INI_H__ */ #if !INI_USE_STACK #include #endif #define MAX_SECTION 64 #define MAX_NAME 64 /* Strip whitespace chars off end of given string, in place. Return s. */ static char* rstrip(char* s) { char* p = s + strlen(s); while (p > s && isspace((unsigned char)(*--p))) *p = '\0'; return s; } /* Return pointer to first non-whitespace char in given string. */ static char* lskip(const char* s) { while (*s && isspace((unsigned char)(*s))) s++; return (char*)s; } /* Return pointer to first char c or ';' comment in given string, or pointer to null at end of string if neither found. ';' must be prefixed by a whitespace character to register as a comment. */ static char* find_char_or_comment(const char* s, char c) { int was_whitespace = 0; while (*s && *s != c && !(was_whitespace && *s == ';')) { was_whitespace = isspace((unsigned char)(*s)); s++; } return (char*)s; } /* Version of strncpy that ensures dest (size bytes) is null-terminated. */ static char* strncpy0(char* dest, const char* src, size_t size) { strncpy(dest, src, size); dest[size - 1] = '\0'; return dest; } /* See documentation in header file. */ static int ini_parse_file(FILE* file, int (*handler)(void*, const char*, const char*, const char*), void* user) { /* Uses a fair bit of stack (use heap instead if you need to) */ #if INI_USE_STACK char line[INI_MAX_LINE]; #else char* line; #endif char section[MAX_SECTION] = ""; char prev_name[MAX_NAME] = ""; char* start; char* end; char* name; char* value; int lineno = 0; int error = 0; #if !INI_USE_STACK line = (char*)malloc(INI_MAX_LINE); if (!line) { return -2; } #endif /* Scan through file line by line */ while (fgets(line, INI_MAX_LINE, file) != NULL) { lineno++; start = line; #if INI_ALLOW_BOM if (lineno == 1 && (unsigned char)start[0] == 0xEF && (unsigned char)start[1] == 0xBB && (unsigned char)start[2] == 0xBF) { start += 3; } #endif start = lskip(rstrip(start)); if (*start == ';' || *start == '#') { /* Per Python ConfigParser, allow '#' comments at start of line */ } #if INI_ALLOW_MULTILINE else if (*prev_name && *start && start > line) { /* Non-black line with leading whitespace, treat as continuation of previous name's value (as per Python ConfigParser). */ if (!handler(user, section, prev_name, start) && !error) error = lineno; } #endif else if (*start == '[') { /* A "[section]" line */ end = find_char_or_comment(start + 1, ']'); if (*end == ']') { *end = '\0'; strncpy0(section, start + 1, sizeof(section)); *prev_name = '\0'; } else if (!error) { /* No ']' found on section line */ error = lineno; } } else if (*start && *start != ';') { /* Not a comment, must be a name[=:]value pair */ end = find_char_or_comment(start, '='); if (*end != '=') { end = find_char_or_comment(start, ':'); } if (*end == '=' || *end == ':') { *end = '\0'; name = rstrip(start); value = lskip(end + 1); end = find_char_or_comment(value, '\0'); if (*end == ';') *end = '\0'; rstrip(value); /* Valid name[=:]value pair found, call handler */ strncpy0(prev_name, name, sizeof(prev_name)); if (!handler(user, section, name, value) && !error) error = lineno; } else if (!error) { /* No '=' or ':' found on name[=:]value line */ error = lineno; } } } #if !INI_USE_STACK free(line); #endif return error; } /* See documentation in header file. */ static int ini_parse(const char* filename, int (*handler)(void*, const char*, const char*, const char*), void* user) { FILE* file; int error; file = fs_fopen(filename, "r"); if (!file) return -1; error = ini_parse_file(file, handler, user); fclose(file); return error; } fs-uae-2.2.3+dfsg/libfsemu/Makefile0000644000175000017500000001257112162366654017330 0ustar glaubitzglaubitzuname := $(shell uname -a) ifneq ($(findstring Msys,$(uname)),) os = windows else ifneq ($(findstring Darwin,$(uname)),) os = macosx else ifneq ($(findstring FreeBSD,$(uname)),) os = freebsd else ifneq ($(findstring OpenBSD,$(uname)),) os = openbsd else os = linux endif android := 0 ifeq ($(android), 1) os = android cc = arm-linux-androideabi-gcc cxx = arm-linux-androideabi-g++ ar = arm-linux-androideabi-ar else ifeq ($(os), windows) cc = gcc cxx = g++ ar = ar else ifeq ($(os), macosx) cc = gcc cxx = g++ ar = ar else cc = $(CC) cxx = $(CXX) ar = $(AR) endif arch := debug := 0 noflags := 0 cppflags = $(CXXFLAGS) cflags = -std=c99 -Iinclude -Isrc/lua `sdl-config --cflags` \ `pkg-config --cflags glib-2.0 gthread-2.0 libpng` \ `pkg-config --cflags freetype2` \ $(CFLAGS) -D_FILE_OFFSET_BITS=64 objects = obj/emu_emu.o obj/emu_video.o obj/emu_audio_openal.o \ obj/emu_audio_common.o obj/emu_audio_dummy.o obj/emu_audio_sdl.o \ obj/emu_audio_debug.o obj/emu_input.o \ obj/emu_menu.o obj/emu_texture.o obj/emu_font.o \ obj/emu_render.o obj/emu_dialog.o obj/emu_hud.o obj/emu_actions.o \ obj/emu_xml_shader.o obj/emu_util.o obj/emu_netplay.o \ obj/emu_scanlines.o obj/emu_theme.o obj/emu_video_buffer.o \ obj/emu_video_options.o obj/emu_audio_dummy.o \ obj/emu_emu_lua.o \ \ obj/ml_ml.o obj/ml_windows.o obj/ml_render.o \ obj/ml_sdl.o obj/ml_rawinput.o obj/ml_macosx.o obj/ml_x11.o \ \ obj/base.o obj/log.o obj/config.o obj/image.o obj/ref.o \ obj/glee.o obj/opengl.o obj/thread.o obj/string.o obj/filesys.o \ obj/unicode.o obj/init.o obj/random.o obj/list.o obj/eventlog.o \ obj/queue.o obj/hashtable.o obj/inifile.o obj/time.o \ obj/lua_lapi.o \ obj/lua_lauxlib.o \ obj/lua_lbaselib.o \ obj/lua_lbitlib.o \ obj/lua_lcode.o \ obj/lua_lcorolib.o \ obj/lua_lctype.o \ obj/lua_ldblib.o \ obj/lua_ldebug.o \ obj/lua_ldo.o \ obj/lua_ldump.o \ obj/lua_lfunc.o \ obj/lua_lgc.o \ obj/lua_linit.o \ obj/lua_liolib.o \ obj/lua_llex.o \ obj/lua_lmathlib.o \ obj/lua_lmem.o \ obj/lua_loadlib.o \ obj/lua_lobject.o \ obj/lua_lopcodes.o \ obj/lua_loslib.o \ obj/lua_lparser.o \ obj/lua_lstate.o \ obj/lua_lstring.o \ obj/lua_lstrlib.o \ obj/lua_ltable.o \ obj/lua_ltablib.o \ obj/lua_ltm.o \ obj/lua_lundump.o \ obj/lua_lvm.o \ obj/lua_lzio.o ldflags = $(LDFLAGS) libs = ifeq ($(force_32bit),1) cflags += -m32 ldflags += -m32 endif ifeq ($(devel), 1) cflags += -Wall -Wno-deprecated-declarations cflags += -Werror -Wno-error=unused-function #-Werror=implicit-function-declaration endif ifeq ($(debug), 1) cflags += -g -O0 -fno-inline else ifneq ($(noflags), 1) cflags += -g -O2 endif ifeq ($(os), windows) cppflags += -DWINDOWS -DWIN32 cppflags += -DUSE_SDL cppflags += -DUSE_PNG cppflags += -DUSE_GLIB cppflags += -DUSE_SDL_VIDEO cppflags += -DUSE_OPENGL #cppflags += -DUSE_SDL_INPUT cppflags += -DUSE_OPENAL cppflags += -DUSE_FREETYPE library = libfsemu.a else ifeq ($(android), 1) cppflags += -DANDROID cppflags += -DUSE_OPENGL cppflags += -DUSE_GLES cppflags += -DUSE_PTHREADS library = libfsemu.a else ifeq ($(os), macosx) uname_m := $(shell uname -m) ifneq ($(arch),) else ifneq ($(findstring i386,$(uname_m)),) arch = i386 else ifneq ($(findstring Power,$(uname_m)),) arch = ppc else arch = x86_64 endif cflags += -arch $(arch) cxxflags += -arch $(arch) ldflags += -arch $(arch) cppflags += -DMACOSX cppflags += -I/System/Library/Frameworks/OpenAL.framework/Headers cppflags += -DUSE_SDL cppflags += -DUSE_PNG cppflags += -DUSE_GLIB cppflags += -DUSE_SDL_VIDEO cppflags += -DUSE_OPENGL cppflags += -DUSE_SDL_INPUT cppflags += -DUSE_OPENAL cppflags += -DUSE_FREETYPE library = libfsemu.a else ifeq ($(os), linux) cppflags += -DLINUX else ifeq ($(os), freebsd) cppflags += -DFREEBSD else ifeq ($(os), openbsd) cppflags += -DOPENBSD endif cppflags += -DUSE_SDL cppflags += -DUSE_PNG cppflags += -DUSE_GLIB cppflags += -DUSE_X11 cppflags += -DUSE_SDL_VIDEO cppflags += -DUSE_OPENGL cppflags += -DUSE_SDL_INPUT cppflags += -DUSE_OPENAL cppflags += -DUSE_FREETYPE library = libfsemu.a shared = libfsemu.so.1.0 shared_soname = libfsemu.so.1 shared_linkname = libfsemu.so shared_ldflags += -shared -Wl,--as-needed -Wl,-soname=$(library_soname) endif ifeq ($(os), android) else cppflags += -DWITH_NETPLAY -DWITH_XML_SHADER -DWITH_LUA #cppflags += -DWITH_NETPLAY -DUSE_GLES -DFAKE_GLES endif all: libfsemu libfsemu: out/$(library) obj/%.o: src/%.c $(cc) $(cppflags) $(cflags) -c $< -o $@ obj/emu_%.o: src/emu/%.c $(cc) $(cppflags) $(cflags) -c $< -o $@ obj/ml_%.o: src/ml/%.c $(cc) $(cppflags) $(cflags) -c $< -o $@ obj/lua_%.o: src/lua/%.c $(cc) $(cppflags) $(cflags) -c $< -o $@ out/$(library): $(objects) ifeq ($(os), macosx) rm -f $@ endif $(ar) cru $@ $(objects) ifeq ($(os), macosx) ranlib $@ endif out/$(shared): $(objects) $(cc) $(shared_ldflags) $(objects) $(libs) -o $@ fs-test: make -C test clean: rm -f obj/*.o rm -f out/*.a rm -f out/*.so* #make -C test clean prefix := /usr install: mkdir -p $(DESTDIR)$(prefix)/include cp -a include/* $(DESTDIR)$(prefix)/include/ mkdir -p $(DESTDIR)$(prefix)/lib cp -a out/$(shared) $(DESTDIR)$(prefix)/lib/ cp -a out/$(library) $(DESTDIR)$(prefix)/lib/ ln -s $(shared) $(DESTDIR)$(prefix)/lib/$(shared_linkname) mkdir -p $(DESTDIR)$(prefix)/lib/pkgconfig/ cp -a *.pc $(DESTDIR)$(prefix)/lib/pkgconfig/ fs-uae-2.2.3+dfsg/libfsemu/README0000644000175000017500000000532712162366654016551 0ustar glaubitzglaubitzlibfsemu is Copyright (c) 2011-2013, Frode Solheim, licensed under the terms of the GNU Lesser General Public License (See COPYING). Portions of the code are copied from the GLib project, Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald, and GLib Team and others 1997-2000. The code is licensed under the terms of the GNU Lesser General Public License version 2 or later. Lua is Copyright (c) 1994–2013 Lua.org, PUC-Rio. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Glee is Copyright (c)2009 Ben Woodhouse All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer as the first lines of this file unmodified. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY BEN WOODHOUSE ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BEN WOODHOUSE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. fs-uae-2.2.3+dfsg/libfsemu/obj/0000755000175000017500000000000012162366653016433 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/libfsemu/obj/.dummy0000644000175000017500000000000012162366653017555 0ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/libfsemu/COPYING0000644000175000017500000006364212162366654016730 0ustar glaubitzglaubitz GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! fs-uae-2.2.3+dfsg/share/0000755000175000017500000000000012162366653015155 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/share/fs-uae/0000755000175000017500000000000012162366653016335 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/share/fs-uae/menu_fade_item.png0000644000175000017500000000057312162366653022011 0ustar glaubitzglaubitz‰PNG  IHDRÈdÆ sRGB®ÎébKGD€£¯ÕòV­ pHYs  šœtIMEÜ :P4E³iTXtCommentCreated with GIMPd.eÒIDATxÚíÕ 01˜¥÷„ ³A¶V\èZff ¶8V€@@ €@@ ëm%q|€@@ ±€@@  €@@  €@@ @ €@@ @ xË’joŽ€¦IEND®B`‚fs-uae-2.2.3+dfsg/share/fs-uae/sidebar_edge.png0000644000175000017500000004577712162366653021464 0ustar glaubitzglaubitz‰PNG  IHDR<üüÝ[sRGB®ÎébKGDži…M¡¥ pHYs × ×B(›xtIMEÜ 34ƒ¼etEXtCommentCreated with GIMPW IDATxÚí½Ý®dK#&&Ê60ížy ¿ÿ›y_ñѹ"‚”´²Ns¡p»ß©¹sWïXñ'Q‰øûŸ|ýGÞûÿëóõÿÿ%"þ·çÿÿ{Düûó¿ÿÿõùûߟ¯ÿýùÌ¿EÄù·ÿúßþDŸÿ߯ÿ¯ÿþÆÿÌ?ŸøOöçÏœ_éïüõÿ?Ãÿß0€¾þ# çùâ3u°ÞÏ4"ü-ýÛŸ©ƒíƃvòøcâùü`Dà‚=Ìçׯú•#ðü—ÏA2üKèUÇ9þ|>{fóßßßõ̃ϓÐ9þ¾µ†yþ÷ßïcú3m·ƒ•åúT]¬ß7ñL÷÷o<{˜ûÓ¯¥5Ð5ðÀ^Îõ5β^³ÊgmËÌ‰×Ò3˜<èï8¾³FrO eŸ2ËA‡g|gÓ"­÷S‹0H9¨‚Až“š<'±œ÷ߟ^¸aÀßé"¿ƒÖS{bïèï—ÜÉσaœ3`¬%MúÆšá3Œó±uö2¸>qn]yo^¤¥ûWN® K™Åg&±³µŒ±öísy=kûzæKš) [W×à×éü<}ºŸÕ}n+Ì -»Øy½õ=¡Ï=KÀ‚~2¯Ñb=ÈÙ¡åÚƒûì}Öí¹(ûù;2îSzÝ_~5ý9Èz)=¿;Ÿ=~ªà:О«)ÍzpÝуïaß³r<¯ÙÅÚ²°Ó[/$9ʾ³þìå?Sgv½fNwÑA|‰¡ÉÇØRZX>¿CfËý×ÊË(!Ÿý [Ë?áè/?lï^ZæÄ¡›á²ˆß?†•B§-p jÉéq½XÂ0;Œæb  ‘åR„dð€ñÀ“ì3AuØF{½Žv—’/GÏÌlG·v²$ 3à>6oÀqºY 6Ç›ÓNï°iÙZD=ÇQúrë³A?ãWàÒ+‚Ê3¹2§óìxs£x`}Xã`Úµw •¢.mŸ½ Åîœö\¾ óNé|hí y­^AÉ7ê†n}gŸi_Ï„x"ŸÏs­ètñà\i[ŸÊÄw¹—sÏJ›ð’ŒîI¿«^"ünmŸñ/È7ùÐÒ‹<ËœPà õr`- |ª5çWüÂþå¹[H2AXh= gYÿ™8³ÈË32¼Ì]; rïY ö³¯«çûÏ©þ™6Á5%æ)&â!q3m+ØÑÍ<ÏÍÀ`žV{]Å;%‹‘®/™á¨107ypÏ9”vБ;ýì)…Ÿ‡ð&&9°ªþ7&F|@jÄÌP¬ûy@| +û¹DÁH˜°Ô£{fA¼ •›¹s%–J íÇÉ©&ò¥kà¡÷/wÅ!¶Î2Sub$Ï~}Ò¡õ“1Ø>öü^ ¾èÈSWZîˆË®¦!¢ÞCºË©“ÏKPK=Ä”‚¤ý*h¦¡ 硌gñìp‘Þíbñ£Áx!èËQ÷gØ<ö,ÚA;÷Ù»~àcCŠEŸíÀ_:w»YW`Kµç[$,_yŠç4O ~R¦ñnkÁp$$cÓ ùÁ7‘òðOâú¶Ýo§bš+ë_jiÂé8‰Óiɳokr±f˜³f¸måÙl;=°Ã{%Ÿ‡¡þ¯’Ë)È]Dj©ÜgKø¿~ö8à .Woˆ]Ôâ?ý(аcbÃ’¿bÄ*Ÿ´ CV³Úìt‚êÏÄÁÚkøL±Ðv½ÿÐ:¬ur ÅɃ®OäWy ȱ;ÕžËiܵôù|ì=(õ)ŧŠ>ñ™;=-[zmÃCž©Ø­9Ü%RIò=ƒ¥1ø”ÆçJÎPЩSz9 –LÀI¯«OÊ–zê°lRV.´O*œ „óx4þšOyœžr5Ã)³ÄW˜ =×z˜xDÆ ½ùÎmýdß Åäñ·¾áàõ¤OëÇØ‡9››k"ײm–Îóö0z(yÒßÙáÕ1o†!$4Èÿñ4óWð’5äUC‡öŸ9ÞpL¿¤¿W©¬#Í“)ålꟵ‡wçÞDÙ˜N5´yk«õnó‘÷ði“Ms-%2N£ÖÁ¸´J|¢µ‘¥–Mÿ—kA< Ä´·êê~“¶±Gö<øþÓêƒD!å½7°ÏÙ/óµx@X47RjˆtŠKïÃÈÐÒùYj¦xÓÍvÈ‚zLî=ÜäË´lóF·Œp öxуn€dRnñöÚÚQØ-µ¥£ÒàüÏ©Í*8-ÒÂj ážçoä1(z,×5úi&x”YÖß8§ïÉXZhÏ6•<$=-Á¸vA"ZÎ.Í÷¢ K›À<ŽøDˆ|’¦Ȳ$ ‰ÂQeÓÞQ†Ãw$Q]wb¢EH¶uE1­ wû}¶yEL <ê},EpK–ø:§*êYËpú0à’Buþ(PDNŽìØÖÄ´z‡‡Éò®Ïë b®è["ªxƒC8r+?ÿ=$l¾éœ{øóÀ¯dR=L$oïÙ¨À½æË‘¤m8­zˆ÷bÚ~™÷Ý€{ÈðW ºÑoð^À¦ysþ¡Õ©£¡~æíħ7º ÔH`^[Q‡s¼áÃ;2Ur”ÊšV<{YP 6KšQƒý9cÓFß·ä= *MCÓ÷€vVªÊ’–\¦)—æ‚øŸQÅ›õ=&^WÈÆç U9k£iŸ|Å|´cÅZÅ3&}§q-_}¡Î©J¹êçÖÅ•FŽÎ‡S.«WY5|g“Œ­Ÿ¿ ð`Xs¥À8¹nDžd02ÂqÕ×: J éôœB'Þí·I…üyXs–ô£¨DQV àY–ÉÀB‘Ê$~ïj5¿”-}zôRK QfYÊir6­¾cÀÐK‡²i™×*ídfÒÆóš9ÏO]ä{h¡3raÏÜ“ˆ"Žà§xÏ+ôê´,wA»¾× Çĵ5§i–wL2u¾thæú3fÀ}Nû-ºMÞ´&H BܳfxÑá\H[޽;…ñN$—æL©ìJmÜ’x™lÈx ’2ùìr)pàUÕôÃËɆTL#=›$opH§,"eƒtW»q¦risgDVëÄëTKÆf£Æq¶¯&GéP +'üxðE+‡cÍÁlZ“]¶D‰Vù·S¸Ø˜`û/ÅÃõÉ—öÁ3IÐ`K)/`Îú‹_‘"G~uÔÒJ›.¥zÈpÛ¡çHWRÚâaÎ=´t¦U=Ù[}‰5‘5pá0õáŸ1'œþ¯f-Òñí:¥r–Ÿªò€®72oEõŸ²ä!­œ0 ãù-ç,ŽtÏ‚Oz[xÔ‰ÃqŸâ iü”µnaVž,N½2̪-eÚa6,÷D.ÜáDŸÜÕRÒð¡ÊC9 Öt .qòØ%"‰¬°—lÓÛ“d¦ôÖ/Æ‹t=1æC«™òê8¥–õhƆ–u’Sóä®Ñûs&Ó’~ʸFÀÁYZun¤ÆóâãàÀ£—Ù ö7‹Ù²…àó€M&ݵ¥¾Ñ £Ê¨˜w‰W=Ä¡3ŒŸ‡¶Î\É£Cô°±ë‹*D5vTMøvQsè ÷'wcHÈs@.°6¦bj+Þ»¹EwPÑv-ÙQƒ³Y¤Ô#Ü6ÄsXÄþÐD¦"@5—Æ{Àea4æR"]!³÷ðRâPîÆæ\Ñ0€NRøY[¼±[€®Ð—>vB§SÍtÑÄýû}Z¾LUt‰©ŽZòÞº‚È%'6DKʆéhSrÚFvµÄbcRҩ•8Ô$AOl$¥^<zwtµ°–ÏiM-ÂìDÿ{‚(˜ìŠw¬‡ÃÎ^¼[ö~_Bž\ûÝבּb$ŸîR8cx銃r²òÝæM[ƒ@<ðÔÁŸÐð¹–臖!W,ÏÅCK^  ~\8’ØA áZr_]¡³/¡Ø=Ú´…Ͷ§g7u=õï×jW+7+5Â*ñ0Qš¦¥ÿg,'òL´ï Fx§%eä!þÒó决›rss¯¬Ši/ŒO$Žð‚ÙϤùÈ»Üñàåë¶0Þÿñ´%žt(Æ‘ŒÅÞ°ÿÎØžørVñÕx /S=Kª5ixd+Ï£ð6²­j3ŸU Ôs%{Ÿ³ŠEí°n‚Ém<ð¶ØBúè{}ÕZ÷0ND-±»[Π«ôÿií‘….qsîˆ®Ú úÒ˽#“ø"9E1ºXù´Ô˜.ˆ¥)-9ýØÍ<š)5…XpçÉ8­íqz7(O9¹!rSðe¿Î€A-½–Ÿ^ÅPøÆÐHÚCÑFi‚¦«õgîÌæ0‚"`p iMó6K$;1Îñ°ð«r5ñDå„£ÆÄGe(¨ÇM<¥‹¡…S–•Ø&׊|ëí*Ħj † Œ-¼"˜­œ8k¤ú¾ÖÎ| ±M|§±äÏ)íO|OgÝÙ¿eZ‘J¢dgÕC­V¸wí8Ï´¶˜Æ4´‡vØ!q$/ÆÄ}é¾_ÎLƒ3€NzQœ`\ïáŸÇVÍ+úÃíX8.Œ”¯hÅÿ[Dóõù¸/ñgâþ] ÿðÒz{´ÞÚq¾‡(Îiìî ô J×4fC<~ùN;ï)¦½à½‘TF0@ô™9°w ¢|ÄU¿­·ŸšFjéX´¨]éï*ŽKi¦ÆKÞàŠç'NÇY#׊@5þfêKöpmíÈ…ðÍÜ-Ôkf™¹‘]-F,ãõÀ—R)Å&Ap¤Ù0íÂrøWý? Å0YŒ¥¦a¾‡Y¯&ÃS} …ê¡*Kzê9HŒmãÁËy”»vïl„µÏ.>6ö5PײÍTŸb/m!@éi0 +P2§ùN‘šåº#Æè«X¾]Ì‘½‰ÜLú°A<‡å~LÓ|'"<ß`ºÂ0²/,œ4Ï å°¦éÜãå\˜‹`ZÕp‘KÃ$—ki5×N3z\3÷¯ýËÌ¥”µôNéX/àù~Å·†ª-³V"% I4+þÊIÕàe΀ÍCÝ5ì7oÓ4 Iê â!~HL% UÛ)nî¢^ñtPªaX8»ç3z ›«’¼Ng2S¼ubO‹Ê“ú3q6•y–ˆ ºy_½MÌ€¦ÉKÉ—i¶BcU¼LÄÓ*T’è‹j!–gŒžED-8±ž\ö`Î%=‹ðùœæ õ(Í)c<œ±óbd2µlbé×ûü9/ȇ:y”÷Þ4†õÞJÞmäqAK<âø.êƒJ7Fɘ¼nîò³´xߌá })ÊÕ§Ä”GÍ€nàh} ¡RÄŒD#>ºL\• pž‚ø›¾4£QB#<‰ ÷Ã{ÄàbVzøc©ƒÉTÇK,%¦#š ‰[,ĸš-“רi[?"“žá}-iŒAY÷KÊ‚:îH2Çá Lâ‹“G9¯ÎÉ®&\ùŸÅôdL›­ÄŠ643^®'=šŽÛÏìÓJòõyh ÂÜûœºŽñ ˆ‡ÜªLx¦Æ‚#©%Ó¼ÖFZÍ’TÏ<¸*iA¹NyžÌãë slM­÷Òñ/í7U˜‡ï×lY®)=˜ü žš±:ï¨ ó,åJW[*¦$~'‹–~š[<G3^ñÍù.ÂáXU}=ŒTué(ÕŠ5äaµ%•€S¥ØJ6Káèlò‰J^=®\ÚI7ü¾/áâ×Ñj×®Ÿ¡Ìù`ÄCc˜&mÀãå3ÀLBt“ˆ{”Zàafå­˜h‘ML¼‡ßËh Ÿ˜ïÖíô¾Æ~è]j»W+>;Û#­kÈ¥Ñh;Ô$0[ž~=Œ=øëY†lgdÈÚ›ç[bt£iy`¶¿ÈÔZ€¹òRy/»^m"`elZh‡­öòXë’ÔlYýÃxÓX~"Ò*O+|¼riJ{a´¨Ý>ÞY:pÀHÿ×üþ)Êó Ò9V¶–Ÿ.iV÷fµàÍM¤r«ýç¼C+ûp¦V÷ÍŠ9°Jé)µuÙaU*ý_ÅycÙÞ4ÑùÓ.ð —xXé„n³$žiœ4Ïqg›ÎÒñˆ¬¥¥Ë]|L¥ž²õã7—Z“†³1Q`KKAIàÜà˜7R4£Õe§JxŒ¯H˜Ò‡ý@Ôzš$íåT`½Dæq¡—K=<³À­cR:<­x˜HLËp)].$S" -(Ièô{Ø"ˆ¿Â:t+’#½Ìœùžö;|Õ•,ûÂP—xïÊ;0ë·‡fÈ*ˆo©£­cf+^´èaíÉÕ3©W‚/ Þ÷ÏxqO ªYkgu S³¥ßxÖ9ÆÂf”2ÿUð@¿·:Úæ‰åF£ðBŠVøJ8õ+ëT ¦ÊK5gµ‚îh2·Gp•F|KO üȶÙ;o¤øÐºB>É;¬é‰Ö÷O]äçzœF|Žh¥ÈûïwݳOi ÛÂéPóP³Hîä–‡„ZÎïy`³‰ÕdÍ  úŽC«'Ë× Ÿ>—ôÚñº¯mbMÙÂO½ÑM‚%³Å=òYk@;Þgñ´â‡€B®d’uŒÞøP-[8 ÄKwð~/-OhN0;Ñ–µ?H­c歊Űž¾„UÞOT?Ëm°Zñ |˧ú60†-ïñ«ZÃ%B,^áYó>š˜fêd¢âˆmGŸ¹à]ð™Çcm@Á»\óŽ›=Z!d…œªùþò4‘3Eèw˜t>bÛ÷*?V}Xó{Š5 ,à°àSÏ?ÖÁЮ–$€Ø"¿ò}°ã»Rf!Ì9,_ë¼,ƒÇ‰a÷0^ÞãKB´ŸÀ;oíWZšÁú~ý…çàE˜–K!°ê±yA˜/ñ8뤈È^æ]ZA¾b|z„Í´,\KöÇ•5\fxSœøúŠ%M[ÓtCe&=®åVX£d-ì`ÚÌ:X‡øA,™.á"[šþññhƒ¹cA·|QK«´€³†·Äë1}0i¨*þÎèû9‹Í+µ *À¬<,ORåV–Rp9ÁyKàQÁÂ'*$‹,=…ÄUj9Û©u˜²¿a'÷†ýÈí¯¶pí5éF­h¦äý“‚FcºT)äP¯/zž<Œ>ŒvI›þ{xû;á4I]l®&¼Åv>O+ÛÛ[t‰cãk‡¼£M2ä+øÒ…¯áN&¥úp(Š5‹Z•‡cFÜse1õ:y¤Ém8A|U(RÌúï¦þÀÔ"[Ðd=¼q‚ÚoD3„÷SFo;jâö#I-»›4¹‚­ZkñoàžY÷ðPš/ŸÏy gmൔÛh_g ïß³ŠRdŽÁ*/ôaÝ™,7ÄŒ¹Í æŸÒš1!²–GÞ³*I“¯§ó˜Æº¨œÐÞ› ”°¬WWOxmjT¶T|¬–tdßhá¤&'w—VÇ]K¦‡°¶Xy_pI:^ýÒb·ú»“§–ŒÁñ,"†€)¦‘ù̦iQg¿%<ôÄ™¸t’¶`g¾öð3ó´®ò#éjüC\ašN× è ß²Ô3{µÏ»ÏEÒ4!é]lÉøµö½°1_m‰‡ÛÚñ¸÷äùLrmðé˜êN›£þ¥maÖe¿Î”È2׫¥4˜CS> ·Éúyã’‡hû`űD&}ŸÒ÷´{Š}ïáÏèC R–EÐ5))¸µJ3ÂïºB".kYs"x€úÕ7œYò¶ªqQï!±h) œu„EmÝ×!ž~ Çly“‚½èP•ß§$ÏZÒÔT]3&­8à(µä6&öоþL<°L®QØÊd5$7¼Ö|èŠ%sý0aºLÕú€|i\»¥÷Ð»éØ”OPäá~YT]Q[rMá|{© ÆËêWÜÃhƒOÅ/Y”jU®Ux\,­µþ®ÌÀäÈò“y«ÂÇ8ÕÃîõ!‡#ÉÔøcâF8ÞHŠãâýƒ`@’€I˜¤2MÊf‰‡aS¸Æ›¦"Iƒ¦»Ê yÞ½ŽbªíA™NŠÄTvì ¶Ë„Ç⎂ø…û Œd©Íçë#ûú¦¸Ãœ&²†µäˆ8ŸX´¥ô6Ò¬õó´â}·–6¶IióÑ“ØøŸîüQMÖ|C~-v%§RR‰âÑâœqÇkž¼TúšOÆÄÎeqìFiylËéV¾wAò»v–så›AÔD­p%¦jä›Fû%M¥Xé<ç¢bãYL S[*ƒ~Iò»ïU¥ñN¯.Ó™º–XeRô4¥u®! °óP‡X"æ×‡Û¤ ”,3¯‡ÛHQüŒz¼ Ñ&ÍåÏó’ítÿ~) ­ç3òÐÊ¥„/õâ´Ä#‰%Œ]Òobvн‚íô;¢&r,ßEÊ¥/tLeÓJß¼ŠwŽÜÃ*IcîxM¢¶»‹­‡º Žº‡]“£“[˜ŽE; ú­ÛÊú(íWîšmaC:è¬k;ó”îâéÒÓÐÑM± "a=€î%õa%‘v\Y˜[^d‘my@ð´~u¤å.7®¹È#Õ9´C<©—¼•YÐCrÿŸç–E‚j0%“/æR{B¢e=>8Å4%©“yÔDªnúúšèáµÚª™IS׬fËvŽßxƒ§Ól5aòüì1ò€7g bnOzŸªË#ÛÓË¦Ò MŠüÔyF—Z”èb¬êW2eU›qˆGÒÕуñÍ––¡Ö˜N{\ÒR’‡Md›\jùjÄ ½² #}½I´la®‘6€¾ÉÚ$Y4œHhºÀc"Ä“üÃ#›[fOm†ô{Ú~«ñ&žÒÍßæžOo1‰;O'ŗ-1jý€Bé›ïDõnA-ÓA´¦sÖôÿ¦¢6µ|õjQÄÒceèæE¶Do 8«%þcnKw"åÈÑx¶|ÿŒ0ƒÅœµ­)µ?ð¦z‰a¨%Þ†ê‡T ÷Pë?¸÷°?qˆҰpéŽ~?Àƪ-E‚gté¯9e)4ùƒÂ–£: ÏX'¥í;Í>F0°¯¸‡Uá*ÂÑXn#}Eéùɫȥ|ûxSx¡´Ò®Ød F|•´0F%¨(×Í)­¸»´¡:0ß xTŠzØȇvÕ?³Nöa¡e†l–…`Ï«2¨ÊÃt½Úk)Kï‰Ö>WGð@õ…¥ÄЦòû±Îì‡Ü7iA³(w&ÆÐRa@Žòìk&uÝÞÎO/<Ûs󭦃Ǘµù4² 맃~. ¦å¹‘1e^Êðª]²‡ééR#ã¯3;Um)Þ(ÄLë<•úÍäâ'U~Ö€³…gÀ)Ä)XßüÐ¥g¹Ï­òt„»¬=ÿ20Dw| ¥< ÜOÄKÓR;³’A•ùÅ,À_‡4ÔŠJ¾|² S ñ~Í\¯#Ý_`!(È '‡žÒû¹Yä Ýùeì½p-õÙ3\¡šèÎèÚ"áhõîP[jÎdåhQÎ9¼=,ŒÛýL<ÑtÊ ÉÒˆgáŽ%fK6Íèxüó¢µ0€kÆ»%"`߸XºgT -…[IT-&<Ô[ÈwfÕ–R žM¢:âIjŒD"50~Q#D·èZnµÃU]_¯}Ì'¤°qyx_ÔÙm<€-ɃAs9ƒ=}Š,’®K’æ‰8ˆ‡û˜îƒ×z ³~–÷ÏÇštɧ§&vJ§Ù’{”vž=»!Êá”×)v›O–ò!g¥óq¬]"¥J»¢Ô|˜“‡]Ö?šÓ ˜ü»w…¯²Ä&ÄðÿLlÿÍZ?¥àÍ‘UjÔ GEo®ÙØÅw*%‘,NX»Ã¹‘Éq éà2ÔŸOÃü2ºF"îˆÓâ—“5ñv"ŽHþeâ=^é^gL€Þ@6íbÑV$äïpJ"\wã2u IDAT?5—~…þéb@»îÅÿ@c?ÖÂçŠ=‹ ýõ#Ÿ¹ƒÚwS-ÌÁþáƒè!þ¶Jál‡¼åƬab€Õá–=¼8Çû¼öd¥Š Àöñ}&.äHɃeCQ ˜3ƒGy\Ùik\¶T ¢8h_õ|Á¬aÙÓ&˜?¡è¸%NŸ•¬KZÌÑ™e•Ñt¤/VûÏl}isÄ{†@'ˆ¯ìˆR']º´‡¬÷àˆKÌiB’øc;„¦eëPù¤ƒ ²Å¼®–ß§ÙÁ§YD²]Â2h±ãމ|i¤®ÑG|„ð²i4ši'cÔe!/Ÿš ÓfʤH¤b—«?‰GaüØ8„ÏÏü¹cï3w“L·õ)­ÁŸ*·oÚ÷aŒo¶x&|WÙ.h« 5ó»-8K°#¥á©00…Z:„`X†B—‰þï9“ìÇèñY¾<^.A&ùZlGq±tã]Y4UÁâpG4›²Ü?3/´l_³PêÖ¡Ñ%´´túˆŸ?Wô-u­˜°“)¥†é[Ê¢+z%WÕ©„ë¸6^Ì=°“»hg÷ ÝJ2u âÁŒò¼NîoX÷ŽS‘‹¿­e¾Ìû4¯–œ8¼Ç˜ÍÏòÇÇ´5ubzü¿^=aÜ?sײö0$/ÏÎÉBßoàx„f N ìžŒË2yÈÆk ùš¹iË?t™T>î¯ã]ö¡´1étA¦Úª¯A®æË‘}K:p¨~²jX“ÑrJ=íT‰íÏ+ú Öt)4ŸÏBK£|m††–§ïé3u)ëPàY¾Ã{ÐåŸ2¦[­]Ý7e—ߥ~–ïÀɬBœî«K è,‡‚®(¦y¤ñõ%vtIogÇׂ‚,èú’êaIwB€V­¥Ñ¼ÆPÕüVíÓ}†_R5Úç$ñçüžJº—æâ[¢×Wâ<©Õ8ÔR»Z6Ñ”LcAÙÞ¦ŒVÐ̘‡i½Ît–àá -²Wù”->æÐú¿ÿÇÿèÏ­Ò"KHwp­ÅüRË—’äÆá Ï Ñ[_–zÛU‘V§jV• ƒ™bð®ŸÃ ̳Ȫ>,‡–J¬“L_¶$`NqêE%˜4¹t'd]㟉ƒÕ÷°+&â0œ9ÝÁ½´*šxChyÐI¼Oéºe!›êßW´d0n5ny Xø Î*_;Oåáç Ñl)›¤:$ê亂qKå!LAIðè]¢…$4¶*ÓL¾ÜÀZCâî2½t±Bˆ9HØgÔ`wíPÌÑw_¡¡ÔÒ­¶äÿÅ­Gµ¶æÎ0€ƒHzS€ÇZ¥H~îéõX>÷ìà\ã‡$R*?”ú˜äq0-›=Ìuv›8È@‘Ú(•ãï§GÞÃ:pK½µh¦: ¢y(1m†»Ð2d¦|‰÷žçÊQ&oÚÃ]wK’HçW&΄ÿu3éÛƒ­ÏíIdùÑìzqýx¾7v†ã˜ù´†7ê,›@%GEZL»3Ï`n[˜ˆÄF:2öÃÁ{ØÎbXóKù‘ëpÔsŽÿðk¯Ã¯†äîxQ[è?üBÎ\+² gÒbgÛ—Óöý”ÝêÕsÞ¯ÒãŸñ³úKKŒ/+žoÃ$r©‘½_~õ`‰¾=Á¹¸tNÕûì«$õ§£ðp¾§Îy×´âiC ^bO3ÞNù¸ñ]&U 5& ¶:S2y©¶”¡HËÓK*_’8ª¯šƒê°gšÚ’bZélq"µC\ j™3LùzeGb¸Ma„9ˆ³Ü½!=#-Ç7”*3·}º úÆCÒ鮕©?“Ú}½™í›Û‚½  K©¼ª…T1®h§¥œÐ”×pýxBö:vý )îž_= m×Ñþ•t C½´ÎÆð-ÁiöCõµ+g;Ú®¶àÐ ®wheÜã©"qfr–oð­ÊÉ]Ð!zï‹5á˜è ã`ý÷èx,¡°bµçñ°ŠþåYóîáÄñàºoW8ϨpÒ\÷gˆ+0ôj“G}­å1mÛ~H®qCû–eéÌtE>¶/KNuŒÞ²x*Sêp•jmYH·3U¡‡ù˜ÃÊ(½È%¼ÑGíÔÏu.(Éÿ·hV’¥È—² > ­Šy ^ä;°.ù§íò%`ÃÀ=Ì·×C,#ªGàŠÌ,ÊC›&&5–®@#‘n§7¶˜f¯öþm¦;‡Ðd£2…¹=ýè±a[ f±Î°Õ’§)¦½bª Ψ}Lˆ²™í¿KgVX³Ÿ½Ó°ã'~ÖfÄc7yÌ»–^02E]š/§û‰ðpTµ=®jòP< ™S¬õQ È:¶W8jŠé™M"äÎÓ¢x—*Ž7Š˜ö»¹Ã ‘Ø;”ý‹M+'óØ}ާÖî ´wdÔ—%Âþ ¢Ç}KdD#©Óã6ä®[bâQÓ`E¬ÐB²x•´8°Æ™“™x‰¸ãZÞÙ¸5°3)"‹./Q.Åi ß§B’áÓw¨-ôcaÚÚ>i´+“N‡{ÄÊ覟™ƒõ׿ájoÀ·Ä¸ŠëÏ´úãÇôGáwsW} søHa8/‘µ@º{²˜ ³>Äd=-ò½Y4å²ëù!¨­ÖóPKeÂ1 ÖrG:í’9 xCñefzÈf= }HþËì¼bÛAN­±]-;‘ÀàU:¡»lCØ;R,‡ÐÖž‡6¾QëàYH¥P7ŽBÙÞ\Å D˜—ôcfzÒ»ÚØìªæƒxr:ˆ—ïhÓæh°j§2ð'‡Ágâ™e¯3KMG±1h¡2çh&|ðÓ4ºZÚb»BRõu€’£Kø2Ø$޹¸¤àzy?‡ pÑä¾¥6®Tc›9šü–9ekü*‚ø9šáò>«º²âs›,ÕH]KþåulàN= ßÝ–òâI=ô#Ùá;Ä#Uá÷SODÄ4'’@ü˜ãóM”<¹ešS-ò!DMïÙÈ´ž¾Ã̵4 /¹ó|&ÏnðP†½ã_—ªgÃÃʯ.@-Q‡³w)8  #\t-Á¨*_A#†Ÿ.Ò¯ÐAÕªþ3| û‚eOб sëm}NjrÏC!×0ì³’èJkß~PwTàÅf—iI‰h¸•S\àó»YJL•‹p x¬},PÏÌúðiŠýŽê•4k}_>Ñ–ÐFz¦Ñˆ Ò%ñQHß<ø}6¤™Ë~£òa›Ø.&q¸p}-E5`Š\JÿÌ:žrá±T¦ò¹ˆY]ÆŸ>b¸‘:G7j=³­PáÝâ Í8hMQ¡¢;Ši™ƒ…—½°Rƒ5âá‚6žµ4w±ÛîíÔq=$]ΘZòeÐìÝÅÊr…5V2VÛüâl]$äiEáåqh¸]M¡eC±»‚zX¬ñB9:Ømz'¾\'¡i†}½Q€¢L؞ěšø†Ø¢¡‹G€ûáp MþµO£Ý´aza*Ϫ<ˆ"´µ UyhTˆVC–]UYOÖÈa·…xÌÕÄcR:Üâ`4²é6W6}Q1Y su<"Oä–7£Š¯V_lÄihóù-†M¹ªÖÞ›nqy.”ÆÌÖóð·Li‰ü¹]vjàzÊ+_Ü[R¯±q-ñšÌccV§¯Ÿ2“ª›Eä=0£PˆGö-é×Dí5ÜÄѤ>l¢ÃÉP}âñ×},üJ|m€³»tôvLûfå™Xþç=À¡êpö!RKÛHRËkNL§Tj˜™EY‚IfÊ.¦QÀªÁ¯€¤Ÿ¯. v)3.!ˆÇ.pKznuàˆ2x#¦ɈÓ.l;J‘k’ƒ‰i1gQ¼<dÜCÓ'ïkJ=ôAá?ðóˆl›nwÚ< úÑyðæì›™Ðj KÞlƒ«X§Ï˜YϾ®…þÌçK³#œò/pØ›\Í5}K…uV©Eƒ€#eQ|î˜Ù<€¼‚ˆÓ²ýœ6à\Ýy¢z몪¿Ne%(-Ñ•Š1´ç/þAú 4Mbv‘\ÃÔ!ÆZ€4IÛäfËè™ïqʲé¼Û˜yGd–H8ßxTÿðßé#{NÉ –qŸýíZòˆŒYl˜^tCò8YrEÍBÌ zEñûA>5­ºŽÍ‡É˜"õ n©e¥?ì³d—ççkâÉ2Þ¿0ŒtǼ­ÅÞ³høÌ4\þK€(ˆëìi€|‹Ëo(µˆÄò¦þoéJ´)!3ü#3=¾Éã-ïYZ;Ì1ÇK†i:™>x"Møuª Þš0¥Tj3ŒyMüÕ Þà{œf½½¼síŠV<‹ª‹XËÑ¢=?B€ñpCb&ˆ÷ ©Ê7¼«¥–º†ÇîhFmÞ‘`Žo·mWôÔ”Uì0Ê5–VtšÜòO¼#Õø³€É"¡ bçÁB¥½$Ò¢ð…³K=®µC|¯–upßÓb»Íú,«²’ •@„‰•‚ÁBžRD#½gÓýsr  ÜÛÖbðÙZ¢ùTÊYhŸYEæÆ]J-Ø-²ÒgHá¾'[^{-ì[jogJFDWB“äAM¸ïcî^â%@v…´ç”6S™/ڗϬϬ#EüqDÅ–ûJIAJ/zZÁˆäÓ¼KX“*rñ…©2, Ç€¢NÓLGΚ=w‹;‰Ö(o¸<¬i Ó¯=Kúˆ¢ËÑ#˜ëZrÙ‹[®%DÉè‹q®:؇ÃÚÀ‡ª•ìMž#=ÄOH|„°©¤<¯ÆLÉ5åü~ot¹ôû 3‘EqjM”B¸8~‚’+“¶ æ7yЋ-‹¨ÖåC‡§‰Ã®03õ+dñ–EIMi¾cÄ^îÛà&FZˆ9ÀüZ‚’'¯Cŧö¢nˆˆs­< 8¸{ô±2ëéšà9ígÒê„Å4•B"…´ÑîòhqµÊˆMSœÕÕÒéFCN[m‰OèÆéy@´†¼¤QkHmÒ¥ü¢Äxœd˜Œü4ö«+ì‡4IR}luxĪêЉ»ÜÓê}½Ó@‚]Në?{!"<¸Øgä`×k¡ —Jƒ)>á{f¯C˜ØÕ’ ¡T„ƒŽp¨%IîŠ?¼m£Dñ;®åž¹îŠHSWnh˜1­¿ßÌoKš€uÅ·Ž ¸Ä~(7Z~·£!ȆSžýmž÷Û¥åh7/¨C¬ª ŽŒ œL¬ž±ù0 Ä4x]XNeeeé“Y‰Öjx~`ü c7r¨AXl %¡á„˜;s¡!^õüFP¨:Šwd¢ÛúŒž^’’•Ð>ÖE«"ÙÎCN€ÏÐé|É’Ùø•ä‡Ä}’û-?ÙØ"õ †*'µ><%Ž,ôD¢^5LÐéHí,P@ìí”v±“šŽ³®wƒ‡%GÜ2ê_™æÁéá¾v6›V„ êŸLls޳É/°ãebÔ>õ¦&|<ºñGó#D­yÜ)ÝæÁZá!ЧIdka÷4pBÒ;"-}¨¹‘ßÙ4ÖéÞÃSµßBKXö›[l[Öê]ʪK!•È?ƒ§u÷vÊÃ}ï¨êÔfu ÛÃLÿÛ¿µjUv{<‰ó>wÒ‘‰ÙR§‹‡lÊjíÑtº{$!HÙ0¹åì—¶»Ô,×¥))up}®®À"¼EÈ3é5U”ÄÚÚÞ)ÅWµh×7KLrÌ{‘¯>`þõt³ ¼ÿü0r)â? ÇòRÍZ™øÜ2£í©„î›””©öC\×F'Öê*ÃNè˜à’Ðo+ži¢›U¼#jù¹±-ñ¿~é²;µ‘…?VÄ̾%¥4¿pj¢›¨‰ÑTkbÄó¯ñµ•ÇúžÕ_I#,„õ åS‘&bä’ö"Êú¥™š½A‘ŠÓ§5`ô¡¥c3’öUBû‡!KÛM©–Sü=§t šZPÒÃ%IÓéÔ>žK—èKÿ¦;´wb(åV(Mƒ<ž+Ï>ñ¤ÛÅY´´‘‡œŽ»‡{Û6Ĝ슷 vXuÔŒ­G‚—ZNKL}[݆xLå ~â…K~ ÚÚâÏ¢>Å´ç8ßLÚ"ærM³eVò@x: ßëK8YÏQΖ ¶ézù³˜Ô#¿baY¼ÁòT§íá7gKÎÆ ÔêÞ»óNƒmG>½B1í\/ì­K xH*/”ˆ[ŠÜ‹‚åÁC‹ þ¨{¸>=jÉËT$vAhûPÆõ÷¤ßLýÏ^ÿŽq9ÒBÌíÄ*·=âšuf³‡GC<á¿¶ÃôÇë@ï¬}jÉ_iãËL³ÿÎ5>ø9ºîCé>Š¡á<L?°ê~¢°ù|iÃzò1ürd))3׺œA' BIDATÆÓµÅÛ¹›ÆÜÒï"7ía‘k8yl"ás8Ï8æµñ¼XyžŠPv!Ig &©n&ߘØúÐ¥!LÚ¡&r"ëÑ{?|d¬dú:¤ÁÜf#ÛŠTý/½½Ü!Mƒï@(êI&BÄ0UDmßbJI.¦¡ÑÞ±›§éM[0_ùÃ8L>^âÏÍËâò=?KuC´+Ѐl(S|›ÊÝA728Mêïô6¨Ž-„_VºKL[cÁ® ¤Úz–J¸)Wqí±ÔÃ=è5ƒ8R~G v¸í&Ke–x =´ÞÔK‘†©:ñýµ{riQW»¢÷P³mé9g7›¼Íø¯q§õiÕ›³h‡ÂÐt5.L=È Ó}Buîä’2+ î:·3M^gá“’|EwVÊ81ý{}mÍ’áðí ÜUò'p“-™7VV|p…6{üoƒ_GÜØF­`žá¢Ç ¤s̻ĎWÇÖ´ÈsÊzÂÏ,¦e¢{ì¬G’kaLðìôþŒ¨…á¼þ®ˆS?4+@Áµf7jE˜Ë!”+¼m9¿2ÛY×,¡°u|©-o‚f‘–ŠiÊó¢®–Ó¥Æ(½×£€óâÖ?üš--ˆ5Òò݃ÃËýÄô°b–6m— ï¬ÛìåËb—D-Å‹ ûYÍ“[NK’Èa…ºÄÑ”Ýoˆ.­>¦}‘—2Ú¹YÖ¸Yên"­MçZ¤¤ñâwø ‘‰€h)¡u}¤Ãí1ÞU<£[ó†èuœ-¬šØp A\ÝtÊNZj(žb˜GLûÑ þ=xVsÒråiƒï¤¦ gò’V^tÇxNŒÝ휤á,ùù{" ´õxÎ L R>,Ûú ‚¸ÇH"ÚÑb_%¾¼ÆèQf¯9ó+f`ï0b¶‡¸-iE¾à¢`Àј>¹åL1ûÐ곊š4gÎ's¿¼ö-ùnÌÔ•º’<íïêv9Ì«å.Š—ý ADÜq ¡e7Ìá~Sæ˜6 ¤W}œü b°9Ì´Þ«jîS.ʦ‰h¼ßI=l i»]Xdw7]&¦î€”_sè)ä–ÕÐÑä߬GX¼â[¶ò0n -#ÕAÍþ …eaYÕZ w)ˆ7¡âW‚깚èg8Ì•k˜WKF®üœM·)i1µmôЏ‹œÛ·¤Dà¢N©Díûü/8Æ7*–Fçà¡B»Zbn±ÿ–^ùù†ËZV±ëJ3$ÙeYÚðºéõá<®ƒ‰bs¢ìp9È€›òaÕŤ¥ßOÄÙPib©ÂÌï6I8ÍÑP{P¥R…fV, ”0óÎx_òéK”­[¶ùÏôfsI#T©¤dW2ã.mZ$’û¹•žÈ:ÓïÂJKea\Ò!ž XM6È#:³¢é×’dxÇô^$î´üWýJ3˜2WŒ×TÏà–é©B˜IˆŠjJ$:ë.LÇXwÚTZÒŽê¹» LɘtOb93MWƒK…˜µn„ÒáIü­&þóþø6â†1iK(å…BôØØ5Ý¥Y;š?¼Û××Жª"§‡Í¹ Õ9nc &Þ[JhÚ:¹3:'¾Ù­W ÜõÖ|RK8ìÒ ;™Û¬ƒú<yIu-Ò²F'Ïc\'\¦¶ôø+måpâhÅ…ÖãTªõÇß ð4om1¦D#RÄñdW£t›xÙ0`Üc©MÀ®!¬í&ZV O©ežêa½>»nYófQàJ;Õž.>ßÿ3n° ÚƒyýÕŽ˜Wˆ¢×¸üzH™Õ¤½NL-zW`ZDr‹oZËŽÛ³à‚qld2·Öj`¹<\L{KøjœhÇ›ÃK7Ù›ÏÔñ8x|ÒÄ/3GÇÒÌ¡áâA ŒÃt#E™[zmÞ<Óªrœ`Ë’ˆ;ÊÎ6Kú£c!žÍ×¢`U‰u¨½ï[GÙ‰b`ƒ‰•‡–‰‡%—̽Ww¥é!ÕF;ÅâW `òÚâº=8𿳦áùP=­hB- %ùâ|Àd`‘=?£›ºE}‰& „.E¤£"1« þeEÖÁCky@RNîÜqzçS¤Éª¿)ÕÅžÔA9.ãÕT鳦<””EÁ„ã9W^ èútR‚ˆ”?v*-ñq‘ÄŽSIÞ¿÷<~~¥?4Œã¡ñC%D9Šøš(ó/'ÂgæžåAômñ(Eµþ_¸NåAó\ÿ^1k—÷5¨åï5Ð%½àèW•‡t@&?ˉFÕ¤¯zˆ·ˆ3Pȧ‹Ð²š;L8×``¿*¡|d.a3m´\x "\€ZzJ˜­ˆØ†Ì›«•=]b°ÿp{ 0W´¶x¸LQ¨iqMkÅ{Ë–°œá÷ëÓžs`XîÚSÙÿ8ºç·”iâ´þ/›¡U\&éûGøØ˜ð4gíå.ÂL“8:رX:.oq–ª­zÀ+ ÿ1}-™¦ö\KßÁAœðöE…“ëîŸç$;L0€74y,Ü™Eè¡…3ˆÞ–º`žÎÓŒxþ… ÌìÓÁôlwÉžâ°†åÃB|ȲÂè„°u6n9ôFžÒݽävº*` L<ªûåª>Ä1àšúðž6*×}¶Ÿ ÝVÑHU±óüÊQ>>ϲÑQËfÇ;à=>;¯ÁÈZ2™qV?c·›³Aõñ:´ÖŽ!/õ¬6Ы«žÜô[œ•—zV¾áRJéB¨Öïk}÷¤|ÏKöu0¨ÖÕýYÚ/äsUï³÷Ò k}FÎ"§ºñ„3ýŒ,j{¾ß’Öê„õÇI):š™H,#NBxÊ‘±Mȵ¥‰äß¿÷³”.à´¾}òÒAmË’Óã Òã7𭹎²FAÏôu§¦‰°#_ïÖµèóñd=Ýßøä§“4:dÂñÐÙ/ýÜâábêv‡A³øYëè>+0­ïaco¹Ô:Èu¿M=uïÊTS“x˜Ö÷k|³à`‚íOü”™ñKX:4*8,]]0A[Ń'Oگ˞îÊ·šÕIÈ×»u͉h¾eæ¤îC×èù$å<_Î.²4ãèê g(#20?iy A½NPÙ¤»WÚBz 7 —¾rÐJCšÖJ™d%#o®±sR·gü=; ”“Ib3 -ƒÀ2þÂO!–«銾CÈQ¤žÒk4›øªA«övI«Á2M—WìßÈ .PIè‡J@]&‚’¶-M&æ„I>Lòb‘ÛÒºâÔŠ@#n-C=9}m½2èYrÐÙ0i±µßxtœeßh#Ì;úå=dCžyä»[|§Èw«éyüì8ãÁê~f9â,qÆðô ÿZ:9dH€ÕAglþm˜´ÖŒ˜B´eA³…hK‚·}mµˆÆ´lX[4T»¹À<ÿ^Ù½²}‚´kš< æÈÔ6¨,`¹–Ú¥ £¾ô¦åa¦Cå›÷/ *5õ[ vϹeª–·¾‚»ò0[‚e¹ªè3gíGS…X×ëTöe6‚eÿ@#6•¥é¢Þu8»l¼hЛ'-ošáª²Û˜Q¢ ø1®<œe3f·?d×x†×¢Öao7ïY˜¨ —´/ t…I+“Lžt„‰¯àõwÒ*¥•“ FŽ£Üäd{\ßæÉùx_ÛÐgfliÝCý†m2iö Ñµî×çÌØì=Gg»Oú gÙÓظó¦IEND®B`‚fs-uae-2.2.3+dfsg/share/fs-uae/volume.png0000644000175000017500000000055012162366653020352 0ustar glaubitzglaubitz‰PNG  IHDR@@ªiqÞsRGB®ÎébKGDži…M¡¥ pHYs × ×B(›xtIMEÜ *‹ë`ÖtEXtCommentCreated with GIMPWÃIDATxÚíØAƒ P!½ÿ•ÛM›˜Æ6ë{kI˜ï à²Ð×ýéè3êŒâ£Ã:¢Ì,¾”R~³çù´Ðú×E÷脚­ø­–ïBÍúæ[–KºZŠ/O߯GvA.8jr[!œú#8{»KÀ,€®í–e"½:Cˆ,âµ%žú.ÐÈú<ði|dÐ5kk¿ëuH¶î¶ ØNÏãpê"#n„C·Á#ËaÖ.ñW€Ë{ãaúv¨èIEND®B`‚fs-uae-2.2.3+dfsg/share/fs-uae/title_font.png0000644000175000017500000003661112162366653021221 0ustar glaubitzglaubitz‰PNG  IHDRA†ÖºÿsRGB®ÎébKGD˜5×® pHYs × ×B(›xtIMEÜ ÃÙ IDATxÚíÝy¸U™ïñwe2‹Hhim¥ÅVœé´ôíÛí ¢Ò&EPƒŠ‚ B/“  €¢´ÃÕÛí€t‹Ø" â€Œ*‚a 3 SBrNrÎùÝ?²¶½-V³÷®UUkW}?Ï“gÞλßZUõÛUµ«œ™I’•É9××ó©‡z¨‡z¨‡z¨‡zÊ®§ü i´‚A„ B!€@ ‚A„ B!€@ ‚A„ @ ‚A„ B!€@ ‚ªæÌL’Êý#Îõõ|ê¡ê¡ê¡ꡞ²ë)?$ˆÝa€@ ‚A„ B!€@ ‚A„ B!€@ B!€@ ‚A„ B!€P9gf’÷M+ôú©ê)úþ±ë©º¾ØÓ«èçˆYOŒÞUÕŸ^믢ž~úÆüÕÞù=Åù«í닲ëlBJ­Qu®1jÂî0@ ‚ :’þ[ë-÷·?ªøï_šùû?fªÍ\Øp`4J_Ýèz3{ûá2áoÇ%m_q /êúûÛw0u€Rç»ù~^»Óß.nmR@j+óÔWð’~ìK{Àß^àïw’ò÷=áo51Iz›¤«$HóÿÖHú¹¤=¦x­ó¯•¤ûüí"Õµ‡¤Å¾ž¬ I+%ýTÒ[Ú0uÕ5GÒ]™±ù5Õò½LwHšÍ—  ´ñ|†Ê÷úÛ«A„ AëÕµðõ·ðíhï«+šŽ®Â¯©=ÉëòÏy´kÆÜ$B]¨- A‡JÛ¡¦Zv Ôr(!(m<ß™ùÒù2B!hÐz_há üc‡ûÿñ·+%ÍŒôw·öáãZ¿Å%´•ãIWHúX§¦>ÿ+üßïº=Ú×6Ñõo<4£IÚRÒþæUþöíêZ¤>µ%IšÝõ p´²o‚“×tu¦ž»bÍ+„ à/ÆòŽ™=Ë*ùÒLjl:Ö—õxg+F×c—øû:»Ä.‰ô7÷ê u¯ä¿îßþ{N×c_ñ÷-ñ·_ ¼þ›þ±{"÷葜`ø-Io”t¤¤k$­“ô3I#- A eXsMï ÔôŽê8TÒw$äo·d¹´­¤ïJ:Ñß~¨­Ëm U:Ñ™ßúÛÏW6h A A—û²î÷·ßò÷Ïì *o·ð÷^™s|K]!è6ÿöwûÛ—v=¶Sæ±¥™×î–ÙR¶ZÒ³#Õ5hÁmŸ¿|M?͈<&é©5×ôt¿µ°»®Kk¨ãT?Ç}_ÖI:+0ÏöùçŽH:•„!A7u{'I¯%‚îUÖpaà­Ü·‡¤sü¾ßS$ÝTROF2Af“®Ç6Í<¶¦ë±Ù][ˆ:?>*RM›ç´|Sæ/mÑ6:nHdYtm&­“´Y ul-és>”¯õÿ²:÷¯–ôYI[·=\c(Ðó2Ç_®4ƒD¦´"'ðÔÒ£@Ú¸ë±M:á'‚>áï{ÐßÞó®_u{¨†Ÿ€§6í(鋉,‹N Ôööëyš¤Oúcù²VúÇžÆrC‚ŽôÃåš¼CÊÂÉËFû.«±žÎ1PËýísºëü÷ŠîçJz¾™}ÌÌdf›úÛƒsë"ÖuFà¾-ÌìJI¯jñøÙ9p߯©íúÀ}¯®¹& ø¢Ý3ë‘ *Mîl jT¢þ^fKÆe]ÝžÙäxJÄ¿»4t¬K[‚¾áÿäÍÙƒìüî¸îƒ¦¿îïÿiæ_)¡®‹'Ù÷„¤×µtÜþ,ÐW$R[è§òWÔPÇÖ~W¯»ÃN—4å6Ÿ÷·ö»šWûÛ'$Í%13 Ò3×µ[ju÷yp$ýM ¥ÿ+âß>¥Ç½m›VÔ‹We~"?æ’ÿñÌÏæ'üÏé÷ÍÇô ?†gOI¿ð»Î:'[ñ'QܳϚöî¡?ë$íxíöç.oÐØ½+ðùž›Hm[j»³âBFŸ¨ëœÀÑŸ©bùœÂ"R^åx”õ–Þï{q½¿=¿ò‰EjÌ`zI m¯ò½»k%Û9VfnÄ¿½Q×þÜÉLHú½¤£Ê>¸´ë'—“9·3!hßO¶xLµlÒuþ‹n«rztXæõŸ <ï‡ »O>ßæ‰Ô¶AhºU\áþçî'ùÛÉ~"ÿ<¿EøDû¡*–Ï„ BЀ½ê\'ðþv!ÈþâÀÖŽQbΔ=ËžññÎöþ<4Ý?™¿¼„¿?×Xüp €‡%½¾äžì%é—]ߢǻ¶ä¼Í?ç¼Ìn°Ÿæœlñ²ÃîûÆ%íÔCG>ÿm’^ÜõSý¬Oû­{›äôôÀÝЖ m©m^Ý[‚z]Ù&¸’'‚&ëÓfþ‹ùÚ®ÛM+ŸX‰6geæg©« Sõì’Ìñ@ÿÕõؽ™-‹J¬c¦?×N/[RF%½¤Æž½Æ±µþvÄ“þÆ$'[<7óØW{ø;×>û¾þ±çt.>ëk’ÎÌùEÙ »W$|LÐËR8&(¥ÔÏÊŸ%3&/ûøaò{ûãZm¢Íy(‚V0dâ~«éò ÷îûnM=œÙu‚®Np<Þ?6ðÉsþVè"v=þÌœƒËó,lØx½[Pwû!ˆ„Âãåû™ãÞGBÓCÐüÀ}ÔÔÃg.rKç*პlq’¿µvªÝ=’þªkëÒd®”4­aãy¯ÀçüR"µ%už a[.Ñ䌕¹þXÀî_†m]Ë er‚* A†~UCÿžÝõ ºN˜Ù­ëñØ!èæÀçþdày[ål-S×Ö§y Ï›w]v¥³õ÷ÆDjKâŒÑ„ 4l¬¼%sXA-çãd‰CÊe˜ÙûýC@1bfsücÿæïëü¤ú·. ¢Òÿ1pßc5´ðl3›këO”8Û̾éœë>¹ãd'[|næ±{{ø{¡_r&i÷Ì}/3³­&yŸ¹f¶qÇóÃföÓÌÝÛKÚ¢æõÓÍl‡ÌÝ?uÎ=ÂR(¤³ì[éo/¨k&ç'òÍHÕµœ$±ëoÜä’{§¿¾Ñ?åœ_%t=± +îÕ;2?OXÒ–™çôs`ô×zø›ÛLòsøoJÚÝŸ f]í–fëmÈþ×Àg=¨æšBW‘ß‹%Ëm'3ºÎi÷h­¿%5b@Õv’ÄɦWÆ$½²Â^mÒµ»©3ó½'ð¼Wõøù I/ïñoïٵ˧Wksîÿu¥gU­fÚÌê:Ø|Ôßþ²æš®ÎÔ³,æµäÀú¢ýñ¿V×ô?ÔÚ&ÚÐðÚN’X0­ªú[µ¤³üß¾Ïß^%Éå<÷„^N¶Øçßÿ¿"íÅ=>Œ]‘óø÷8–?øœ/©©–µ|˜%ë úS¸ž/ø2~ëoO 1¨‹ôªÖ“$ú¿ó\úó ü.±5]’f¯uµ¤ck¸®ÑË».;0îƒá §xÍÛ}PÊžlñ—ƒþBHÒlIïò×{¸k‹Rçò7ù“NnæŸÿ”¼ ÔÀ±<§ëĉ³H»¦Z¾›©ãŽÎ¯Áú‚þ \‹ëÚâû@ö$„ 4iƛ΂ Œ›½3¿ÆŸ*¬–PÃßù¿Û]Ç ÏJþAº’ì´JgW!%­i„ 8v:×ZîoTñß¿4ó÷ÌTªô ºBê[Ž ‚eÍýþG [Nÿ‚ž8Iªð1hyÈf¬’]I´+; òŪzªÞ˜PvNì÷óPõ¤XÏ ó%Ó«YËæ,ŸSÏÔSÒcKh#„ B!€Ь$i?IKr.|Ù‹å’Å(,Å âI:DÒÒýéôè¨µ× ›‚$yz`Z¶èº*|,‚Ê A‘ç/]±F¬ã¼A¨„þ,,XÏÛSªhXÚÓïÅ¥^¼¸+-Ž8Ã/i`º7òBñjy_ ëøÅ„ RCÐâÈåÜ›HF#… ØýYR°žß¥TJ_¾oÓ}Ëç+½žA¶<¿¼ì4øÃÓü@cM A%|ž±&Õ3$!hFýO©ž?ô¼|!êO ãy,¥zPÊxÞTÒ’~áwÁ\!i¢¡ŸuBÒåþöçþsoZóú§3ûC;Þ"é%þ¸£yè²CÐÀ+¡’ŽŸhzR“ê†Äô/í\ŒÔ¨ñÓ´åWƒÂÀlI{øãPÖ¶e:åÌ·k}ö4»âz.–ôœÎmàñ}CÇוQËŸ¯"šø½^ñ»Èk«|ϺaJŸ'v=Eß/µzš>ýc~[ ÂB×óiÚøa<'5f§™Ù®f¶ÀÌÞafNòô5ι ‚V›ÙÜIž²ÊÌþÃ̾efW:çêþÒ8×ÌVgî^眛ûoñy@·~¼HÒ§Ìì^3»ÜÌÞ€ä?ÀÌž^â–—Z~•êmå?ßþófmhfú>Ü'éS’^TãäÛ:pßË(ì«è›»Ã†§ž¦OÿÈ wv‡1ž•ÈøükIGJº¹‡|ñ;I‘4¯¢ù¤ÎÔ]Û<ÿ¹{9ø±ïç6Oǯjyoiƒ™TËBc¬ÆZfêYSð=×F^iÕ:~J˜¿A“×óžÎÍS¬Ô—I:QÒv5Ì'I„ LÛù~,›¢ŒÎãï©`ZþŸÀß¿¤è¹ÑAÅë™&éxIEÛ×§6ìá÷‰ý$ýÆHe<ä­àY(>(éè¢õ Cb<#ÒøyTÒÙ’v¦S“öðÕ¾OÖÊ>ø“WIÚ¨ÔÁC꩞##/÷mX: ±•ØÛ"—sXb+ùC A¥ŽŸ% }ºKÒ'üA¶è½—ø¾ÝUÕ8–ä$}9ðç.•ô”Ò!¨§z,¼_Ò‡RÜô¡ŽCcžT2B=åÍȸ=±•üŸA“Zá³¾¿‡Ý½ZÍêµ¶-AH:KÒ«èÔ¤=ÜÙ÷©ò-AZIª¬_HšSÉà!õTÏDS¾ÙIšÎ1}×3^çç í£ozjØøaKP¹ý>HÒ•=t—¤$=¿ÆP–Ú1A'ôxLЕ’*©Ž›sÇ*Æç Òzšöy8Òpô§-ç by1´Ëµ¿6³½Íl3›*èüÎ̾ffÿ¿‚ùd°•täqã ·—ïÑT?ƒ¿Å÷è[ιe/Wf9çÖ‚X¨:A„ Æ3úŸ/6³wšÙ¾6ùù&ÌìJ3ûº™}ß9·²¤ù¤¶ä,ÞÃÌö3³¿·ÉÏø€™}ß›>¿‚Aô—DbyÑä04ͯø˜ÙÛ3F‡¬2³oÛú3F_Q÷£«D"Ñ_B!ˆåE[Ñl3{ƒ™ícf¯3³™m˜N9óí:3û¡™ý_3ûOçÜh[W‘°ž^û“êtOé*×C0½' ¾ßx‘ñÓ‚£c÷g¬Ió~—ò6õ'Y¼ªëÀß&_E¾s2É_øÏ½iBõÕ6žºÏ€ºÄ̲gѰ–ÛZ’!ÇŠL«A¿qHzŸ™ù³ÜÚ°™þ>[½œXŠsþŠQOjb÷ç¶ÄÆO[–‰CÃ9÷¨™}Ù̾,içܲª/Q¡gv>_™8£îƒ£NŽø¾gÐÚR}ÏÌŠüžŸnXÎŒü~g|ýɉՓšØý9#±ñÓ˜ebι[ò@´¬û¶¯ÑŸ¯è€V×ï/éÖεg…¤E±ê‚ÝaužÑöy’.–´º`wù-K–Z ¾Ÿó ¼½Àx–¤‡ýµubüB£èüµžˆóŘ=#õ'Ê2(âø‰UO2ËCy…¬O±6ÅPŽoNâècqxç¢þv]ƒw#¡á¦Ñ@^éoïõ·ç³›ÜêÙèuq·ßô ¿}%]!`ˆ°; ´’³š7…N•Sv=ýžž‡z¨‡z¨gÐ÷+ª¬þ ú9Ú2~RíO¿u3¿O]»Ã@ë°; ‚ÚbF¯O”4ÏÌþÅÌv7³Ìl 3›Ýõ”q3[af×Úú+ӞŸ€$MuL¤çKú9WyžÌ˜Ýsé2š$iš¤“|˜)bDÒGè4H>IÚTÒ¥9¡fBÒ¯%}XÒN~KÑË$ãïÏ»Øày’¦õYÛ~’–¼€áò².`Xg=¾¦C%-+PËJIßqÝŸÈý9&‘þÄîQjõĘ¿‘tº¤™±ÇO•¯/ûýê\¾—qÁÛ"ý‘tnà壒¶kÒô’t ¤Ûúœ¿ÖõñÜ IK%í?lëÓ¤êÉI3$ý$çþXÒöS¼ßK%]‘óúÏõQ×>‘/Ú¾0‘•|¬zŽXË’6¦?åõ(ÁzbÏ_§‚A=¼nל•ÞÉMš^’öTµv²õi:õBÐrþÈ'{Ý’#ÉIú|Îû¼¡Ç÷X¹IK[É­gIäzПòz”`=±ç¯GA„ )^3[ÒÍ—Þ.inÃBÐõ‡ ë†l}šN=݃ÅïÞ ¥ô#|ï3süô^:{F™b¬„…IõŒ'6Ó‡L§?qÆsõ¤6~A A'äÔó¦ºÇO }íuyè¿ ™–óüé¡Ý‰,’Z>×VO&]xóK%9ÿø$ýLÒIkýþˇ$}-g"ÎÊùüö¶-›¾¦?ÔÃø!MòüúuFÖEŒçôžß¦õé´®7ÝÁÌ^›y|ÔÌÞ圓¤™ÙÅfö3›cf3mýy†¶0³ýBoîœ[kfgz³ÏoÑøŠ_gt[mf¤C¨S÷æ¶·ÿŽsîI/4³Süÿ¸ï•´Za¡™½"pÿIι;hR A¯ <þûA{òÙ¥WšÙ‡ÍìPÿßyî Ü·­€fó§rýòë–_¬RBÐó_ëoÿ!ðءιÏ9çÎða(Oè`§ñj[˜¡¦ø¬k ö*v=#±ë©YìzF›^ÖôzR?©Íï ±¦âéu–™m¸¡?\¢©ãC¢{ëÎSw®ýõŒÀcåüwVèX÷öP[è'“cŽš[°W±ë™SB=uŠ]Ïœ¦×¨snN‰ýI­žìJí ¶þ8ÀÉg†ÝÙÌ ÌçU4£%Å–Ôc‰Õ3J†ªž…Ì_¥†ŸÙ’¾if÷unkêKÑþllf§·`þÂ}³¿ýyÞù|$}9çšA ý¿GrÎG±:pßg{­+òÉ”¢Ÿ× µzêG©Ÿ‡¢Îcp†¡ž‚¯Ÿ`þ*uz}fÀËTTvž Ðô’tQÎswKi<×=qž ÎdfWïœÏçóö䃙75³/ø›ö¸Éì«fvØ Å:çÆ-!©ÕÆO‡þ”jß!¿Úú〲Β4‹ÉŠºu‡ ßCÒ3s¿³bûüï4³½œsïrÎMÐvèË–CúÅc™™}<ðÐóÍìp&+R A¿6³?fŸcfŸòƒùt[¿eè*[¼Æ:3³õ¿ù¦¿ï[ÌÏ*ÿ^g˜Ù?›Ù³sߦÝÐ:g™Ùo÷-éY´µuIrÎu® ¶‡™xÞáιӪ,,´¯Sg¯oz=L¯áêÓ‹ñ3H=9ÇJ8ÿúÊêñW¸Îžü‹ã‹sojûü•ÚóÛ4¿O˼É÷-|™‹OKbÓå“'D‘[‹ï0¹úÓ.±û#Z:óW-ÇY9çþ`~¯BÆc\E>g<;FIk–?ëiûÞaf <ï3’~ éùS̘;IºBÒ>þvÇOÈ1õ(ðÚÛ þí¥Eê X@jéQ]–Dž^w³\/Õ}ƒL¯æ«"N´õ—ËÈ:CÒÜæ÷‰çs‹ñ :Tºüx\O $öGÌì_AÈlý1A”t™¤C%½XÒó$í"é8I7™ÙoÍìïÍìþö ¦wPѾÄÜ=¹Ì&?ëwÛû“jŠ89òûÃ,]ªÏ&2_Ù4jfÙ“·>ËÌ%6¿c¸–?ƒë¼ß×KÚLÒ ~s~\ÒƒÖ5çÄ I‹bLuDï.PË*IçKzf„Zböç˜Dú­G©ÇÄ×´¿¤[%MèÏÃ’N’4­Îþ4ýã|)¿õ·'‚rë9*gWé{ýmVw¡>)±Ò(ùýbÖ”êæÕTêe<_ò¯û·ÀK×fƒÍ$éÔ&ŽŸÔæ¿DCÐn¾”ÛýíAÁZŽ”s«¤mýãÛJúSà9'±Ò ‚A冠§ùƒõ³~Ý9x_ÒÌœÝÓË$mHjmšÑ5võ·Û‚þ¢Žc¥üRÒùðWçCb¥A"‚J AþµïÍÙ}úIä’´gSÇ!¨çº¾î˹&¥{Sè—¤ce|o’cîæJ:?æhA„ B!ˆ4umÓ$]x‹Ç%í*i$ðØ%M?„ žëz‹/çû+B™¤ã%œ6Õü¼xzàµÇ5%9IrÎ9I«Ílnæñιñ~ÂT—qçÜŒíIõôs†Í@=£Î¹91ëé§?±{$iÌ̦©§Ž°=èô¬úïÅ®7Ázúš¿úýûç¯vÎ=¥úv4³«íÉ't]nf[dî1³:ç–F?ã¿=Ý971àôqÎÍMhþ[眛5,ósuÍõcd®sÌìι{k®+É~á/gòÐ ÚóI¯ýSÁÚb/0f—PO_'MŒÜ£¥Eëéú9éÌ ¥ }ËêuËHàî‘Äæ¯©lÐ×·3ç®5³-íN‚ב @·›Ùæ1wKà¾ñóúœ¢IÚKÒõàd­=~¾áÿVïÜ3»ÔÌœÿŒÎÌÞÌ⽄ Ø>O{KíÑç"Õ°¥™}JÒ!LŽRý4p_¯¸ïg-èÙ„ÿ7™ñž3ˆ“Rj„?ùã¿›Ùöä-ÀƒølƒÇÍþ¶³•}w?˜læê´:ÒI¸VÄ8p*TO¿Ÿ+»Å#v= ôèc9çtÄÒ²ÇYÅÇ­Nìœm%­Ì¼å¸¤Ý¦xÝ?Îáõ„¤TÙŸÇ=1@g÷8v+i -ÐúkRMD˜¿Ö¬åöHóùƒŠp9„”I”´™?_ÔÚ®ÛMë^ÏÓ1œm AJéä{Ãp i¨?’^ägºW§4ݳ+䆅 äl•ôΜݑóržÿ I^ó®ªûSåÑþõ;æœÀ5Ô5’ž“Úr5òò'Ä\S>_ õýwç\AþvA“Æ* AÃgЛéAÖ£ÿ¹ _ÖQ)LwBP}õJúNÎó¯é:å·e¶DBýIDATÔÙŸ CP×#5"™9{ô×è†)žŠ|!h#¿å'tlÖ‰-Ä&š´È9¨¶Èø‹\ß&’nË9È7ë.I›×5Išžæûyþh5%sùÆûXÁ÷›(2ž[‚žçK{´ëKÆ ú…a A×+®åu bI¯Ë©ç‹ë¹/rîjXZ¹?KJ¨ñå“ü’ðÏ+Ï2~UXÂü5•릨gº¤B}Wþµ6‘tOà5?/ú„æ¯%ë¹#r=÷µa¥.é&_^§¯%¡Û´„k‹}²² êøιšÙ·(iûo}fäRÏiØØ>9òûQÂØ¸Ú̦Ú5z¬sîª!˜¿¦rÂbf/Üsn$§™Yè8©]Ìlÿ‚õž™Øø‰½›ïË-YÇu–ûù[NœˆáØäk:Ðï2(z²²$mVW’—´…?IYÖ Ôã$}ÄŸD­H–tR¯—p¦oB’ö—tkÁþD9±åÓñ¿rþöOÊœ.’Þ3Àøéç’ ~þ=`Š:¶’ôXàõçõø9.Ì9)àæ Ì_ÑÆÿÙ÷Ò‚õ<"éÔ¢»ÒzùC‰¬ßvì:WçàyWÁߊþÔ™;ŠŠ‚ÔÜËýúqÚ·’¯c—!hxBП¯"ß æîjfWfî1³8çngñåynóUÒéOñþTÖ¿&&RI—‚ãÅ,º@£CÀT¦ÑÐFÎØTö®Ì²7Nõ[?õPõPOUË¿ªú3èçhËøIµ?ýÖÍü>uAì­Ãî0@ ´!I:·ëT÷òWáÞ™€FêºvØ,I¿öh¿ý“¤§Ð%ÐØäÿû¯$ÝïÐjûÅkÛOÒ’‚ \ㆊgyÄ *ê/8¨•’¾+i›ÄúsL"ý‰Ý£Ôê‰1="étI3cŸ*__öûÕ¹|}”¢§à¥Ï ¼|TÒvMš^^|]Ÿ(^*iÿa[Ÿ&UOv°HzMׄè\1úŸk@û(®…‰¬äcÕspÄZî´1ý)¯G Ö{þ:Dêáu»æ¬ôNnÒô’´§ªµû­OÓ©'4X$}À¿ñ£þöI›W<ˆGnÒ’ÄVòEëY¹žô§¼%XOìùëB!hŠ×Ì–tsॷKšÛ°t}Å!èº![Ÿ¦SOÞ`‘ô®*IÿQñ |Ðfб&uÖ3žØL2þÄÏUÔ“Úø!5.SÏ›ê?%ô}´×塤i9}™–óüé¡Ý‰,’Z>×U“$Wõyà gýÔYôõM¯‡é5\ý¡žvŸÈ_rÿ<•M/I/4³ëÌ,{ìØÅι7µ}<§öü6­O9O Ì@0Í̾@«Íìƒtu"Ê´ÐÌ^¸ÿ$çÜ´„ @ãøS9„~ùu‹™J‡@Ê·&0CMù~5×3»žÔ¦WA#‰M/kz=ÌïI÷'µéÞëô:ËÌ6 Ü¿Ð9·¶ÁãCb¨Œ.üa#È•Z=Ø}z:çæ$4žK­'ÛoIo0³‹§x«‡Íìl3;Ö9'毡XŽ–r`tV™Ùvι{RZþ”Ð÷Õf6·×z"è¼Ú9÷”Xõôð÷Ö8ç6(П5f6'b=#ιN³Àî0ElnfǘÙ´¢’•ëÓ»o‡Ð„ÿ×ts+þ{T\OÑ÷›¹žßo¨v‡4B=C5½FéÏPÕ³ù«Ôð3[Ò7Íì¾ÎmM})ÚŸÍìôÌ_ö;l†sn|Ð×—°{%©zØoz¥6ž‡`zÉ97ù«´éõ3;¼ßz*Þö¤é%é"3{cà¹ÿ蜻,•ñ\÷üÅy‚8OPo‰­¦ưÔÆO‡þ”jß!¿Úú〲Β4‹ÉŠºqL¤oË!ýâ±ÌÌ>xèù–Ù²‚Ms–™ý&pÿÑ’žE{@4’snÂÌ4³u™‡60³3éACªàÉÜŠï0¹úÓ.±û#Z:óW-ÇY9çþ`fŸ <ôÆW‘ÏÏŽQÒšåÏÀãšT̘zxímÿöÒ"õ, ?µô¨.K"O¯»Y”ê¾A¦W óU'ÚúËed!in óûÄ 39Cm(—?kBP}Î(øúÓ"Ö²ÌÌ.¢?C×£"NŽü~ç0K—곉ÌWsΚÙAöä­†Ï2³E‰Íï®åÏàã:Õä[4¡ÇNøŠg…¤E‘zt¨¤» Ô²JÒù’žYÆô*ПcéO´¥øSÒþ’n•4Q ?K:IÒ´¦Ïï L¯JºmÀéµBÒ"Iã£é¤s/•´]ó»êX¥öü*æ‡HËŸâëS6ÿ€6bw ‚AÍ⬂c£û½¸kÛêé·&¦õ¤>žû©—éÕ¾zb^à}ªzª¾˜ü°õ§íã™_‡€Vbwh¥´0ÌB{4\ÕûÁ0”؈F¶”t‚¤ßú³­û3ûŽ´éЋîÏì{ð„ïÉ ’žÎHIŠëÀ#¦ëy«â;°@=o‹\Ë¢µÌW9A-AþùÊóœ/hØô:,¥åsNþÎsªZ¥´;,SÛså=BúH/-Ž<“ÝT°®ë"×s}ÁzþPÂJþ¦õܹ–{ A„ Ÿ?]Ò —-‘4'ç5›Hº'ðšŸKr ›^÷¦´|Ω1´…|:!H3å‘>Ò A¡Ý3 Âuë-2C^;R >£àŒº®@=ëŠÖSᛕ³ ž^æ¸& Oò¯Ù9gWÏI9Ï?'4OIú»¦Ÿ>ÏºÔæ¹–… ~”ˆi9ÿmffι"iµè yV žñï7»`=Ó#÷§hf”PO)œsksîgD×xø¥™}-ðÐG³ÁFÒÎfvpà¹g8ç~O7K_>£÷qÍVŸ! AP·#Í,{¼ÄL3ûrçà}I3Íì\[íÃnw›Ùñ´!À0~k~ÈÌ>xèf¶°+(mx·s«èbõ$m¸{”ÎüÙÚ@Ï6¡-„ È:×Ì~¸ÿ$I»šÙ1Ç~äœû­«MèçñwÓ–I{±Û†Ý§uß6-­ |à"®=ÞcMäÏ:»žöŽÇ|mU¿Ä@#¬©øï­îõ‰Î¹ 3{Ÿ™MdÚÈÌη'ß7bf‡D®w"0ùÒ8’Øô/|`´¤™’ž!éÝföÅP0e6›´_’ônßÙ˜Y’ö—t±¤Gü¡ÆýžôKIGHzFÎëÿ·™ÝعmÌ”éúuXl7­+õ_ÓÔÙ#’ÄtDã¬Ê_G$8~Fo9­Ç×N ¼vM•ý©â×a÷xª?¹ßdn“4·„ñóÇØ3{„šö’t}„“µJÒïK^^'i‹*×c)ÿúJÒ½œö¥Ä¿¿»¤;{þ4ï‘´£¤7Kº´±¿n+1-$•×#Iï‹\Ë!MZH%8~~xËc{|íñ×^Ú‚´™?óódn•4»„ñóΔB¤"—ó®’–‡ë$}¦ê­ÒÃðt.¬OKZ›ÂµÕêõ)† Õ‘z³¢ÈÙ‡»êZy%ö@ìzèÑÇzø¦Ü«¥ A« AÛJZ¸„ÈnS¼îŸçðzBÒ ªìO„ôÄ5žÝãØ=®¤1´@ÒÍ/SkËÝí‘æó%^ÁJõGel¡â-As%]Rã– ¬‹$½QÒNþ õ¯úçË$½µ-[‚fÔY×l šxÞ‹&Iú¯NiºgWÈl *·Þœ­ (çŠÒþX‡b‹†-A~3|计~¬©êò 5.B+(Wógœí/ qLÎÉm'Mº5wDÒÑ’žSÆÖÌÌß¿KÒ®ÛI–7GøcƒVû1×9fèQ¿5ûÝeךTæ…HgØ•tbNúMÝ ®a %MAþ} ¼õ•ÙÝþ,³Wžûxý©2ùc ®}v¿ _uIÃCPê+ù#%Þ@ús}¡Ë^áßj÷-Ae‡ ÙÊ¿ÛÞ„ V‡ —ù-Y§džwZà9£’viAzoμóÿø19ïIªíó>;PâJBПë[(ñoH „ F† ÿüWçl¾S9„$5?ù÷>8ç¯÷ïž³’ÿ`]ý©*Izš¤‡/ÿu÷£¾ ñ2I‚jù¼³¸vXõUñ³x‚j]IúBÎà?ŠÔÞäßÿ;9Ì¿ÆïÏúAý©0ý[à¥k¸vXΗŒS AíX¦ {"}‚¦ª+öUäëA圛áqI[&6SN4,G?c‘ëÛÄŸã&toÖ]’6¯kþò?íUÁçöPS2W‘/a¼|¿‰"ã¹¢ÏúAÈìšúÒUäg2?€t}äÓ,¯c&“ôºœz¾X°žû"÷箆… Å‘û³¤„_>Ù9C:+Ï2~UXÂü5•릨gº¤B}ÏÛ}ìƒä=×ü¼èJ˜¿–¬çŽÈõÜW˜ ýrï…„ m:Ué# )_;ì¤ÈïwAÂ9÷C3ûVà¡%m_à­ÏŒ\ê9 Û'G~¿3JW›ÙT»FuÎ]5ó×TN˜âñCÌìÅûrÎäôï13 'µ‹™í_°Þ3?±wó}¹„i z§ú0«…fJú[3ût½[‚žTÛ~—AÑ“•Ý i³º¾ihý)ÓCg¾ýQzœ¤ø“¨éÏÃ’NR±ë"%ùMM믓skÁþD9±åÓñ¿rþöOÊœ.ZZü~ÇO?—l˜ðóïSÔ±•¤Ç¯?¯ÇÏqaÎI7O`þŠ6~$½_ÒÒ‚õ<"éÔ2v¥åœ §®“&wLkƱ†´BPƒ>Ïe÷ ¦4”ºì}êT»íA’ïÑæŒBPYŸgלƒM9'”»üÝ\Ò"†U][­F[‚F»¶ˆ®ò§yXD"Uñ™.Ì3µ ™ë1~‚B@¦ÑÐFÎ*Øä\§ì ê¡ê¡ê¡ê)»v‡€Vbw ‚A„ B!€@ ‚A„ B!€@ ‚A€@ ‚A„ B!€@ TΙ™$•ûGœëëùÔC=ÔC=ÔC=ÔC=e×S~H»Ã!€@ ‚A„ B!€@ ‚A„ B!€@„ B!€@ ‚A„ B! rÎÌ$©Ü?â\_ϧê¡ê¡ê¡ê)»žò@‚ØA„ B!€@ ‚A„ B!€@ ‚A„ B ‚A„ B!€@ ‚A•sf&Iåþçúz>õPõPõPõPOÙõ”Ÿ€Äî0@ ‚A„ B!€@ ‚A„ B!€@ ‚!€@ ‚A„ B!€@¨œ33I*÷8××ó©‡z¨§¼ú˜^ÔC=ÔC=þù’äú}T ô -¥åUêõ !±DÝ+ŽÉ6}2/„@@{pLZ¿BíçqÔðM-,êžN € }Jq‹´ƒhŽ´U®¸Xa öxjkŠcK EHÚOÒIÜrI‹Ê¨'ç9¹÷—]O$+%}WÒ6 ?‡JZ–J?R«@9 Ž@Œq´âZH=}¹CÒÆC<~N©©Õ€„´ÇÑâÈ+%ÔÓ·C<~–¤ÔÔêP΄X+±q{òîՙι±Ãø¸snF›êió¯ŽBý©ó³§V€rpLJK½ŽÓ©‡eõ`F ‚A¨Õšì’¦Ç|¿6ÖS°æ6Ÿ¦Õ ü: Q”qª…"ã² õ˜Ù¨snã'~?R«@9ØA@k"¿ßõ0~¨@™Ø†(rvÌpÎúúv?%]OÑšÛ<~š^€r°%å%ìÄVÃXO›WºŒ„ B!€4Q‹NÐ7‘ØgŸhñ´A’0¦Þ-âϹ´àgÝÔê@c™™]4ÄõŸ–X?Ncú-PÒéüÑÂq”Uåë›PÏ€[VI:_Ò30†•twÁ­-Ñú‘Z=AQ°; ‚A„ €fqVÁ±Ñý^|›z¨‡z¨‡z¨‡z¨§ÌZÌÌœ$¹A^ ô7ð°Œ;@mfÐÔ€:÷·9åC#Àü…jpLj @½>!ù&F Å7uH|6_ÒãKV¼”î hêòkž¤kèIóèBªKûIZ"i¢À'—KZDèO£’æ3G¶k=–Ò“Ñ×üþ¨¤1Iãò·’VJú‰¤Ý AHq@ÒúC@b}p2!© êÅ‘WbKèý¡? ±¾È± !) êñÀ ^`!4FèÏ$ÏÿÒ È1æJB!(Ùéµ6Ðò•’^'ɺþm$iIž)!,„èOëúã 6%æJ–?Ì_C‚Žô…þí M1jáÑ’þm:dçÛ1ÿ€“¤ÐE-~“ý“WãªèëéOsûãÏþ|yàeÿàœ»¢ ýóWÓ§—…ûYk™ƒ¨cO¶Hya9ß̾xèŠNÌl -h¤ËË„/JzjÙ‰ è{±OžþÄî¤ËÝž½6Çt°üaþjÄüžý÷×’–žþ¨¤…’\”b˜$`!DRëOÞ¯¾BGe%Æò‡ù«9Ó+„6“ô…œeÁJšK !úÓÄôxà¾/±óW«BPçß=9ˉÏ©…c‚¤*{ÄkmýÉ4XαÏ/6³›÷úÉ 6Î,Éò‡ùkè]lfof—˜Ù;Íì£ç„ $¶‚¨{Å1Ù¦Oæ‚hŽ BëW¨ý<޾©‚EÝÓ‰‚€¡@)®`‘v"Í1ƒ Ê+ ÄOm­@ql „  IûIZRð†Ëc]À0[OÎsrï/»žHVJú®¤m0~•´,•~¤V€r<ÿ€ãhŵzúr‡¤‡xüœR?R«!i£Å‘WK¨§o †xü,I©©Õ œ'±VbãöäÝ«3sc†ñqçÜŒ6ÕÓæ_…úSçgO­åà˜ ”6–z 9¦SË"êÀŒ@ ‚P«5Ù;$Mù~m¬§`Ím?M«@ øu¢(ãT EÆeê1³QçÜÆOü~¤V€r°%‚€ÖD~¿êaüP€2±; Qäì>˜áœôõ%ì~Jºž¢5·yü4½å`KÊK؉­0†±ž6¯t?A„ B!h¢ o"±Ï>Ñâi‚$aL½[0ÄŸsiÁÏ»©Õ€ Ç23»hˆë?-±~œÆôZ ¤Óù£…ã(«Ê×7¡ž·.¬’t¾¤g6` *éî‚[[¢õ#µz‚¢`w ‚AÍ⬂c£û½ø6õPõPõPõPOÙõ8Irý¾ èS(i3îušA PGêÜßæ ” ŒóªÁ1A¨%õú8„ 4æ›A0ßÔ ñeØ|I.YñRº€ ©Ë¯y’®  k$Í£CA¨j,í'i‰¤‰œ\.iý¡?ŒJšÏÙ®õXJL!íGû(®…ô‡þЂP&΄X ¡Åf¶]Ä·¼Õ9÷<úCèù2ßÏzŸÍ3x€¢ãh<ðejzobcô‡þLòü/M±%hŒ¹²]ë1¶al ßÄèÏPõÇïsù” 7–k,˜¿0Î`˜VvóÌìT:€ mŽ7³3÷­¤-AËï;(ðÐGéB€& ¯ºÂ9÷%:€„:$þ~ôg¸ûsœ™=+sßfö‰–ô@Iß°ø) ¢Œ#~¢JÊè¿6XÈü¶ôÌ_([‚¤¼r›où»Á® CðÖЂ4M¿»ÁÐNsiACÒÁf6?ðÐl@ÐdŸ Üw.!@Óm”ùÿkmýÉ€ UwÎÝG‚š‰ìý\%=`œþ´»?ýîg–dùÃüBª²$pߘzxímô§õýévPËûæ/‚°“#¿ßô‡þÐ0~P*ÎŒ‰ˆciI·JšÐàVHZDÚÕVè5*®±ãÌ_ hÞ2hIVH×HšG‡‚4u´w u_ A‘p`4 ´ÅÿdÔLÅ‚P@óIEND®B`‚fs-uae-2.2.3+dfsg/share/fs-uae/share-dir0000644000175000017500000000000012162366653020124 0ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/share/fs-uae/theme.conf0000644000175000017500000000000012162366653020274 0ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/share/fs-uae/gloss.png0000644000175000017500000020752512162366653020205 0ustar glaubitzglaubitz‰PNG  IHDRôxÔúsRGB®ÎébKGDži…M¡¥ pHYs × ×B(›xtIMEÜ ;÷ªÄtEXtCommentCreated with GIMPW IDATxÚ¼ý]²$ÉŽƒ‘i³ =èAû_£¨©ívWø@z©ÌƦoýœÌðp'A8 dUý¿âÏ_ùñ{ñ?¿_ÿý¿§b÷뿟Óýü¯óßï÷¿ßÅýNÝg–øn¯~Mßú¼üXõŒ_køõœÓ¯ï<šwÿò½ªý\Í3eó=ËÜK¹Üëõ`?¥Ø³)Þ‹óÓó×ð>_í'÷¼¾:ÃßYãG·§byfï@òƒŠe4Ö‘½"V]÷V·ÉÚo÷Z·N ãg‘çþ‰Í9½Øÿnòiãç°Pä×´È%~¯Ì„Ãw/pˆºïžàsïšÍ;)ãsøyùŸµüúóÏFž9ÿóÕÿ  «x¹-š&Wj.cVCœš®$Ý ]1Ä9€=[P17Tû”Ô ä*üÉ Ö.µšY¿¨þ¿‚IƽIk ²d'd}h²¦T» °œ VÁ)b•˜¶\×÷š¢Úí€nA°³ý>9PŸ„]séÝ)8–¨R]0§*Mú,N#iÄ|·«š;)Ó@Al±”kô¿h6§…CŠóE’mš±jʇªù’\1Ôÿ€‰ S `›NV’6Á§Œ&»K9Ÿ|¸ SP¨±<Ì%ªÇÝ­»yÐ#k·í”žþèz¢Þ6‡ú †P{äìdèfòð®Cì×éntûn;qºƒÞž[÷^™T´),¢úÜÞ'Ýß'×µnÑTÍû¾ìåøˆMÛ¡æ&^¨¾º Ø×²¿¢£Ínnp¦c î!y•t)ýHh5ç9Õ},":Ans`êaê5¨ãûT•… N×r –аU/îßUóÕtÏîV¥ù€.×9ÏϦánS1ª‘énÍþß&ÃÓ5œQ¦É)H¼ûêÛ ó=‡(.¿^×0ž±»*œX+zV®SÓ³ª<Šßóÿ שl_ͰN× Ów籸¹Öذ 7åYfÌ÷ö%*× eªÿñ_(ËÈ™ÿŸ™ùß2eÎ3^XœÍxešÑiSú$6¨ï—FEG«ôézÅiJËAšõ¥Q–4_À9Í L_“0¯‹Ðz×upÇ(‰–ǸŸ‚Zê(ËkpV£: Š’™*_RÁ¼œIV•iø¹&Éút+æ<ª/J–Œ¾ª%+P±›õŸhÄÎ×å,}½ßkC®JV)X¦„©Ìïò•&}ÚçËýHšÐ®ïWíQ $<7Ó:8g.Ÿ»Ûoµd6·,×¶ètö ajèÁ׿ò)uP¢¢C±jv—&Áˆ½;ø¯î•”¦‚šÃѼó·›fHÕ¦:⯿¦÷|¡æÈPÝå¤\«5F' H¥G® ¯ 'Då«®èä#âHü¥ý<œ4Î=ÕŒè@n†žÚ iNŒTàsóNœAD»6ï•öGäÀލ ‰Ï?ÿ &‡j-ÂoxHa*IÖmr"S/û Òfß‚)bUó¶5°+ hç ÁZtKÔ5ˆ^¯¶&Iì¯?ߎ«Ñ*­B m>wbÇ&±®4c­Ê‰8W.ÎûçäŠ0Ĭ¯˜˜Æ÷Û~Þ×»­Gkç°S1JÙŸM¬Žæù‚¥—ïD)'ª³Õ®ÏP ·îü.˜tË!"‹Gš%»mz¤ sJ‚õ¨§ê˜ˆòPšŽ09×v¢£bž9V ò"Y=uã’;»4Þ³²ÝUƒR§ ¸®S³ Œ ƒíû™%·û‡þ õó¶z†~Eßs@™¸é¼gè~†kãÛf”8Z.â^-âb§Œ¹½2N¸r`[Ê–òýb¥ØlL¦ûBÏ; uîaWc%.™îè¦Yé èQ3þu» i:ÔDêõ‚w¥T𜽭²ãpiZJÀPl•ÃPåô¶É¢KNÒ„çQÅ R‘mÙr‡™½˜ee̲ƗŸ?ÅÕÜF4è¿ÀTåÑdt¯»Fã…ô øE/²q¸s¦ä`N”=ljž;øØ"w"ßKõ÷]P3r—V‡ƒà;DP^ÝL4,Õ­pö™jÀŠÐ½.EÚ%Ä.9QFÌÝS޲߫ÄHcT-Ÿszÿ]‘´aìœ}=¥)Fâz¾Ô¨á‹FÖ‰¡#@Ö¡ý©¼³ê-¹2•ó8nw¾–Rê>ü‚¹½¹ˆÃ•Q­†®Ý6ÚMµª¶â7]b#’¬äîÛËJ$&¦a3ªFD”&a·êwÿ]™ÏW‚•QAù¥ªÞD?:àú¸¨ÐPš{ˆ26”¿áµD"#£œÆn»þª7k;É÷Ÿ~.™·/w6ï󕞃‹ºôh¹À¸â&û®@jDDý† ‘»d¯èþW3¦ÓõF AŒRsйØTînE˜Ã¡TU[Ê0Á^!, m,uÖôŠÒ)ò&jd[ÿi½•mï5(Ò‰•¤/Ÿí²N›œK–“î÷‹“£Ãn¾ˆ%]¼$Ô|…§†øßء䬕Cªû|c6éx8}Ý»ý*Ô&&ö³Òíßü5AŽÌmo¨¬éÀN¦ /Æ”|œŽwõÂ+îü\J+}%?e?ê&zH ýlÕl8UßÊâÖ‘±uƒûÔ€çý‚ó$qü¢âŒ¨) i`¦¬i×K¡öæUŠ=šP)F^¤à©Ä±ºr# >†sRfÌqžM}‚o{ŽÛ¢üïY\éEenà$Åí¨±~ÝR¥!X†k°Vw(;לH©`Ñ™xÇ=QQߪ"s%Ñi˜úG^©„Mcšêºåb‘LèvÌÔ9ŸöŸêÕ™¾ÿ+a˜lÞ­êgÙ~~ Fïâ¦7Ý©OöfÄ͹/שׁX«~f{q[ˆ*‹æ)N]µ^ãñ`ûaƒ(3tödFC¹JNÎbÑùp‘—™\^0µyqmœ, é=í‹çLqÀ¶Ó ÖtÿüÕ± ø8ã…ÄBV1J¹ÎauÑ¿r´Sìtt7–Uñd|õ•ˆ¨Þ 9ۛƹ­€”rˆ$UþELkbVêA,T¹P7 Œ`ëê (€ô¯¿û .ýÛi+«Deòà$±î!eMôè©q„SU_P&©L¦Ñ’mUñu/íÞy_DަÙ\Ü\w@pÊØ¯tÿN:)ÀmÀÒœNlOÄ’­¡Úš®îœNq—ÕÉÐ= û@¨ä¯þ'•Î>9§Ýx5‘ë&ÏDÎDgûKÊz;©£úÊÜñó xî¼!B0µ›Þ™)&‘ñNy€F!•®[9‘MHÍ16U‚N*.÷´ IªuÏØ_¥LUØdºóR¿šÈJo]àˆ•0U3t:²; ¨CçHý[Òc0%!i+Þâ4š¥|ßÝÎ|G« ¶ì›i$—°b`¦®ô컟ïžñí«zÖ@û…ÕüOQHÅá½$(˜ˆ˜ß¿Ö‰xLãTn³ÛÆËœÜ]eÜ$+;TžàïÊtºw•Êôœ;&ç`{.jd!¥3æè"•¸§ÊðªtÕ?qV¤ùJA|gÏ Œªé) p;17êY¿€¹²™u«Â)†( ¼‘¼:ÚÓX·8œcÂØ¸]î´ÿﳪKåkáÄ,µ“öÌæZ§…íøÎÂs^ÞFšÕ©)õ¹E´éKÒ E6­2;on§÷‚Þ7’Ãýªòw˜•ËxÔ´s 6븷º³•Æ{¨å¹s4ÇêvºÈþÛœ¥é½¼_¥rÆ “^-ÞŸóÔ5Q®bcÔÚxÇÄ;`Ê% j£'v®‹Î9&…ó4)¥XC Ôˆ[ ÔáÖ¹©£2-çl¢X‡¾q$B‰4¦ÃÎÐ@£*«éÚYG”(Ißëè½²êr˜¨p×Û0}ö•uØZ½R¦B5Ñë½0ßS Ô2Þ‘}MÁÚ¤(6¶ÓŠ…øJî™.3¦Q§ZUýj¿mKe=®\/·aް=ËŸ?ï·@œ]`Þ öîÔ¡Ž`j.Òw6öåÓMO7kO<ÎzL»tÈ}±kµKÚV?^ˆj‹ÐüLï‚U\ID.÷ÏD¹ÒæÖ-`'Õª£Ê¹¡Î'eÐ/]‹íÌ¿ò±už¦Gz±Â`®^ªçlã"X ø¼ ¢M ±+ˆ…÷øy¿˜¨:ä8ݯ¸c2]õéš] ñ+ z—Ïûúü‰î¿næ¯$Y¡GóœjŒV¦5T¿—_m*nDØ¢)ÑF¼ÿJÞ)’l˜ŒíÚ§XûL7­hö‡î¡izb² O3^Ràµý·Û÷JGÚ2vWÈSFšXƒã>ã4ê¸0.š<íɨÿ(†ŒjЗðõo&éOer1¨P"3S5¼­FÊëP<©®¶n%É&ȾЫž~ïÒà¨>×56z6¾öv!Iœðr5s¼ˆ9KáoΡ¶Õ8åvÿÒsÚ½“k £1íUìQ 1êWìd,γ“TQóÊŸÂipßNŒ÷*Ô­¨¦„ß-6iÛ Z²)©òß…møb@íF>»ÀÁɘǼ^8ûM‰þ«*z°•˜½_>øºö[Ð@ßçDUNWxªÂÞíPVæ:ÉAâM.Ï;ÙÇÓ<øÄH^ Áºj³»*¬Ç{mš«Ï˜iù4ÏIfŒ »m˜2Æ8°@÷/f‹LBnLPÜM÷µÐCµŒgrj1ìÎ}c·;†2 }>GÔ‚ú\*Ĉù>m}Ù²,Ak`t­”b8Ãʰ_AJÝfðfÐé;tk[Ãßq¡“̨{Ÿû^¬[„¾ÖÙLV(©˪ Œj¯Lj|ʇ€½Sg‘¼ûI?ƒí;ý žTk/h½éž™ºnCФ\¡EPéEŠú <÷Ë»´)ÙnfL©ƒ›šÞvFÇh¦j©È$lNŠª˜ìƒ ³‚-Sú÷WõÆ1b2«rÀeñjò pA´Jh#á+öqZ7åð·©œ4ýÕzÁ8 ÆæPPºŒ%MèJ7¢DñrÍ‹DäË)Æÿø7¿Ðr ê‡nµJúŽ–óëF±„¯ÌàE‚–’&%‰Êw’»vG³zrdt6î¦ Nxx(ÓA÷5fJlfë.6­×k'Lb Kkgh(‘ Âæ©æ+¥ѱG0¼`’¢a^ˆ›£ÃŒvk@Lq¶…Dc+˜ÇÀ¥©R¼HØŒ"VÌÚ N1‰@å/´G3ªÉÁK¹G¹ A’1=t” UA.55ñäâ;9›qR®Š` KÚ— ŵ¥¤iÂÍù¹&e¸®Ï§$¯§³6.‘Ͻö‡P7B•8rx×Ýy+36Mg^m›ÔÔU ªªS|oõü4ñ_YX 4¿Þ{Å·(š#nfL-Á*º C]ÃmØ@wÍ“ÚO³»9BçnêpºŸ1UÝ$_gV3f©åËKWTY5(z£ÕMlŸ•‰Æ–U"Õf§;àör¸ûú+Xm«ï M‰*mÓ04$Åz¼¨À\pë^Wª}WÍÏU³áî3SúXÅŠZ|žb=èÄÔ‹_ÄÈç¢H«€†b»Ü"Q±”T4ŽñãóÿÂëR¥ÉÊAD å‹HºÓ4pG0J"‡ß&Ã.x–`(¶Tå$ UæGÜ„¤ˆZ–+˜Ò%ùîŽNцôžÆßQbDÛñ?úºŽmçüÒ+¼!¥ˆy"&CËìÒâAôN²‹•.àR½1Óù"‚Nä;PÉ®`™®©)ãAÝóaþ™®¯.ÆkÙØ_ÌÖ¹S#Ñ¥£JPº«u‹§E¹ Ÿħ6Úeƒ‘Q¨®[z/D­bn&¨ÜÍda ˆAËô¨O~þæ¢@฀G÷,wßå"À¢F•Ê¡ûìŽ$òDߦyv([ù °;ïV™W9×Jεj®ÜÚû:{ÓaÜüDû:ÖòE^Êÿ@¨WøÀéŒ%ÝÛä@îS|¦‹®UOÅTMRD?š‚ˆ›:Í•yØÔ]Ù¥kšVæj ­–ÄYóª7Z…gp‡9êÐèô“LŠ ÝøWÆ®WÈaÖE}“5TÇ!˜*ó»•ñý#/ĹŠšŒ`:ÌQsâÆÊL…‘ë^i:å@Aâ:7ý%ZRýª»ÈuK}¼3Ý\w¨D¬fgËü™è« Ñ_›º"t·¶ë GY"-{•Ü¥º dÞŸ&݉՚ÞÔÄÙG\îÚñ®ØTà!Öä*”¥ì¸; A›¤é9ݲNѠØe’Å9Cc°MÐSÃäßêqˆðc»—¸Rñ?^ûnÆk"UhûZ%*72uïânúÉIŽÈ¦'9¥³®(â«ú]ƒmd¢ˆVU÷Ž’ j Vª›*eú¾‚‹;®¥>«;«—ûI'P~̯«-w„SM,Ãö¹Ucô¡£”îdÓd5«®÷œ<ÐõUÀV©DpšeÝSr· G‰¼úÇùkÒIs±·U“Ϧê'b>ä ¹¼¨¯‹Œ±úniü‹£”²ޏ{¼Wx /Òß±ÙcªJ%˜Ë•–bËH"%Ï×1H1î<¬«Ãâm2z~k¨D©W=a1*zÝ)a:3éÔ Gþ¾hÖ%ñ)EnØÆæ‰±üz'TëÂ-Ž"zã·ˆù:NÊeôRïÿüú…×-;UÒĈb¢º+öw³)ÔéÅ^•Ðhpx])©ä‰Î$þÝê}“„÷¢eª~6êˆÀÁ-/ôh:&õ»8$c"jøùtbæj´ôJ.zbüÜñ³‹ .¹Ú¸Y$<+4énÇ•ßl’­>ˆê}™&D¾Ø,êWâìí}¯<@D¦û}ÕÕOƒè&°;ªwq “z-óö»MÔ¬Û}:RÕã þIÆ @ÎVÙÏ©*+XSå…]H3ˆ’±Îí„…RýSTªû¬ÈTžó¶RíCBÉçr©Bgµ/ÁÎôçW™è\ÄóéêòÒŸDtûÿ†À‘2ÁSwcËM´þõg?ƒ*r“b§£LÈ«_%h½<¼àOtžqž§DÒ'ÆB.ª$rÁD*6Bq){bååðÂPG5{EÌ=—ï¡îœ3¸Æƒ[):†([½Á )RZʈJ]nÓåôw(À £Sa*±þôçN W©vn?ùžnq)»k›M9e;”’dÄÿ·€ŒìlÐâÚP+ªj%“¹¥§¦*7bn’yxÈ ´ºRÙŒI)=ô¿u­¡˜r~MÄ_ÏÚÍ»_¥²»*¾b¦ø+<Á*§£ÒMx Þé]7eº5$`•L¹ûÈaÆœŸIÞ³êAê $z¥¥¤ÑiÞ&cåc³½tÞE·nd\ò2 úX>sào™ü:´­î×1õb»«,ݱ0¢M b¼¢ÈNÚ5à&v+¸©¡„ô|8àÏa]2˜bd×¾£éT5”qSý#•ù²UΤæ9j:ç…)W æi+2”ÍÏRÅ‹CºŸ•SD÷k.bE—TS°‰›4íWÔ‰.ÞM>8»SEžÃÙ‘gº}KíÎ w’~ Àç;ü-6xÈU\a²c¤ca.-6!æî¹§ÏÎÅÏt‘†¥Š»:[„n~£•Ž‹d»gPI÷o\·L¬G=ø,Ô¦ ² ”_ÀO12¾zäfVÿEŒ¢Œµ¡`ˆ:‡¾¯j®ü‹Y ?Ý&Û øLŸûbü»ÆSõÝ^àÕ´“Œ·¢h9ìe4Õõ‹N,F•C—ºÝÚT*ù*†$:¹‚)Mmwâ¢DòUæßµPïqÛt–"˜N}$/¦ ¼?š¸/Õ¯rͼˆ‚LI}§ÜÌ0à½dÒR0êª€Ž£ÀðuïÞõ9,‘ZSgܸIt1‘³SY%€í‹ÏUϬöpbF>‚Úü)±Ñ±EP:IUä/îAö “×¥} ÉRGªÎs7­<)8˜X…òk³9P¤ùêð×­{‚ª”T› *bwo{eV¨MwÄ~äVzŽb,ÙMÕȺ±žb‚«ÄéjGLʘbÔÕ DcÇqqóÝTsîKÆÄeY$ü|.hL‡aKûw(y¢ñœ?ñçĘƒÎ“ t þ“,n¡A©«È;á&W,CUùÚc¶¸D­ù%h7½¯JÜMòªÚNc}]¹ZeO¬ +˜u ‘‘vz–hå®$®]Ya‡Ø|çMÑ">]šïŒ —qŽ&zúRÛÏïÿË—ÜQ…jQÍj7Ybó|ynÕêv8èQÙS’q¤8~r»é§r˜‚O¨z»ÏºJ¯Ëq3œ@eÂ÷ጠM•½+Ý8­MïS¿z@»³yR„74Ñ÷Ó¹zm‚æ°nÛ_IÜ×–çιêÖ Œ¿"F¤ñ ®©S<É}û[¦éº–/ÅyZ^ÐV™ßë:'½­V©÷8ý\µiK4§S8Aò ûëB%*ñ—nÌp³¾i0dê„« y“^h|Ò­1α‹©¤ IDATìºgwÜþÔÚ_¬¡/6è@Æ4þR”LxÚïâî!Ú­þ½³_;vÎe½·½4н’ÒÁ¿ÅB'L<“s âîlce{ªé«ûWbX£FN6N¡_g$æZ9(!šnïEóß?Cuþnä‡'m)˜MŒÉõ[–8pçÚ§)‹ëœbG2ú»q÷z…j|ÅÄn½_4ë~í*!©EÊž»}µõ¨Ð×±J§ãÓ11mÝ> ûÇÕΡ&vÿüûßâÁé8ÙEa‰4 ’Z祧ù ”&Íå! €"·ZŠ à_)Ä!Ðu¾^uj«)—óý—ɇm›ÁÄM]ó›g z¶•ŸèsïJ<øÓø0e Ó|Ÿ!˜³)n¼Bg3܉;gÌ™F¡S=„YèÖ½»úÚÚ'“~µíÚýóë· ^]¥´¹ &‰¿“ºþU.ÓEcôç«ëBɾîžu‚ùµúîä™U zuW© ­ˆü¥2 /ã6®4]%86§µ¤×TïÂÔ =!ügÄa_6¡‰>ùö<•ñ}HÕçöñ”]jÜîâ+ ¾ûÔ3õÊÌhêÙ™4\c.ÅtGÔK|&JõdmÞ3íË"yƒ²EXšg®Àßû×sþ‚uµ«F¸W´Ò¦ñ­AÉ¡¶79‡v¡ŒWAš|\)`*úI† ë$Ä•},?Ó—!ïýâÛFR$ã²µxÏê9HRpDpÀU‰êb‘yóݦYëŒYFTUJ$ÙÅ€äº`}Ñïî×3y'$|¿tŽ_mÌWºÑPuv£[ G‰è”_ò‹äì/‡nu§g °)aLΆÓg§È»³{­šUëÔ,»íoHã'¼m¯HgéEŽRɘ(–n>Ÿ\3lš:UoÙgqúHp¢FTµ9©ª¥8Œ›„H;®+ü{Ú€¦šìR€r ‰e ÌKÔ)­mÞÜk–îŽV–]Õ»rØ×êPnò0»‘¿W;S¥’p?=`¿o—Œ5/¸†j|[gxã«/Å£ºùz:.|ÙO|„ò»SCìèþì5¨žÂ‚Ž®owU¿`Ò»›™huøJ˜.65\é6CÁ :-zŠ€ÔÑWNrpFÇÊ8tŠRK8)êÝ4²(S |¨¾ªŸ mš“ÒÛ‚Žßéµø P¯4ةҨzŽV{ б ú”ѸTSÀIù­¨*S}žšl M¼.“5ձ̉UÔ·£B_½\t:ZÓª_x ´ÛqêlTã)Ãîu¢1³Ùux¹êë…ZWÆ­ùÒPÔ‡|RìR`hÛl1»²¥H y êY¶`]à!v½W ô.lŽë9&nT~ÖÝï]EHL£è{ÝŒ\¾¸ÓLnÿ‡z>Ŭ¼þ5M4\Á{×Ë¡”WbäG*þÓèzK;‡¸“éìЖ»ðJ¹iƒr§ ®4çCT¥Tì‡$˜´h‡lÊfÒT/# \FàˆHÄl¾3ÝÓD¦|Å·kd½:eNµ./\ަĸ¹^¡š“'G·6/Ô Õ„ÎÕ}“°uâÙe©Þ 2fê²Ôêû5˜œ~n{éz–&mŠ„ï¦챈ˆü¿GI>`ùõà[e²‰º¡w8ž!ƒj"r(K:Æ¢*íÆvÅR¡ùvcKÊ{V Ö@)£M@éBOw—pm‚&IÒ ƒ^ˆ`GìòAÜ"ÏLß/©jUÜ,z¶ ¨êzˆ°,_Lé6OL¬èßz·„%"àÀivœ š²\4n¨¾«vÄÿ÷q¥)wÜ!޶i®r‘µj`ÌŸÑ¡q¥*UÁú\ŠO5u:ÕŸ«r•¢JÙÐu® Z4å´×©Fz·®Jž9Â3Ó¡Ak`QvÚÛªIÝùV—m UóÚì=ª°GÄŽhòslm3¸±’Jþ]ŒTÀs£ÙÑÅ_g”îbÖ… ÝÛSL …Qk´¥”.‡ß©„HSˆ}sh7&8؈Ш+e˜±}6bE*6Gæù2s«(SÂü8bS[£ÉPÆqÏ$äΚ©Sèær-œ÷OŠâ…ñ•ì¦ÑÏ­ðN ?3‚Ý¿b=R$ç\0%€å”¸°DV2 äÆÐnä<‚©Tº¼Ó¨±b"þ3°Ñ­&]ŽÎKúnªÐ”ž¸S‘R”[")nçþ;zi ,Ûu­ $}n#)IDÞ³ºWth[zWwٻʵ¯cÓòpVÐå^¯©ý­®þ^^o¹o5?ýÂpçëÝ)m’\œrŽ#´FË f^gE0£8’Ü'±¬i½§ÆOw¯)}’މqYR7_üó{?qà¶/š<Ü¥BQXä_¬sw5Ýw9ó¦5v•Oî‚ÓmM¬_·ÖÂÓºº,Cš3E0uÖ¹–{î«+ÿ%€&,Ö+öLÙçÈQV+†êûÅçÐ&à)æQŽ©¸ ~÷®¢^çŒLª\bÄÜüL*7=;÷5œÛŒUZýt?ó@“†rg»=\Šr¤óª|¨´û©Cà%pí ÞÈ꣨v;ÖWÁœ³ÜäCÑßdD&ü¯Jå% Üщ1TÆ×)‡‰Ýùjü¼ª!và™L"ăóÍ>VÕ7½~Hp~¦Hz{ȵo§øZ‚y¡ÅŸZ#÷g^<#¦ŠÎÍîcªŽèÑÿצ°'Â3†qªÛtM¼ìnvêØ$F…–;5)§r¦Ó Su¼©+˜rUD6,AÔLÕ÷ܱ(÷îôåþÝT®<¬Jèêßf覨ZìÝ•Q¿|*˜×)2ÈîÔã2õø8®~´atÛ¼ÛŪ ¼tÌ’S´Lñ¸»vH²ëáSNÙ1nEåŒ'(¤å:”‘¸/ÚìoÉ¢:²Âd“MM}*`'–@M›ˆÊ®^“ÚÈ0©öQ'hD|É m$sùYTà)â6ŠÖJ‘ŠŠ0Cw¼o\D»ªyºîz¥hØIîVðùsšŒST¨ÊûÃè¡WsÌr~ˆ`ëJ “«ä Ì”“þ†öÁÈlþÊ+ð"'ìiŒEm°Ë¸‡R.™è:¿¬R¢9,Ô˽C«Ät•ËÆ <`…?©9n6‘ &Þ”íR{Þ{ÚêÎOúÚÓaËTÕFÙʦYl°ÿFÕï°}NU:]•¨‘± ÞÛ¤ö¾Úʦ{“ÈL°ÿ/}d9WÇ`nÐO| §±Ìÿ_Œ:ª)¢'\°é^]UW«Õ^HÙ’ÄÐÉ9wÏJ‚°šùU"(—À­tÎÃh´Zpš½þV"Ú…šÒ® ûæ•2i5ŒÎsv±ÈV.§ùx»àÒmŽuU£ðÔýN*mZhu±_‰´½ÒϘ«ÅÒTô.˜â+ÖpܶT½ÐžJ`Åñ5 ô*½ÛvÅ_(šŒ¸Ýn+ñî +4½ÙÐÝA&?ûbƒê^MciSuNœÞŠ+mJÇv/ý+TV{ª^¶=®ÒœÛl8ÉsOk~yÝw ×:Êú–æƒé{|ÞÑ«¬Íôš{W¹ââGâ÷Ê})ÀöxÕð3¨¶ˆ¹3ù í\ïÏ&·¯2ÀÈ…¯ðG.”²IL‰Ò–=qhįçèz^ßi»â<—»Y²W_ݽo蓳Uê:½§Æ0‡iš€™÷®`Æ4ïÙWb.»Þâ#ï°g„i!gfó¼Ëÿ+ã»VbbUCÞ¶Ñ3‡J[õär­§³š‚ ‘lõÏ X_/5ãýLr„gÏIK'~Ý©9•ÙëJÝ1òØ$"'1Q«PgÕïç!HvÏ h÷4Ÿ[qO #!ȼ;õþ^Y Ó÷¦@gâ”:›/§„¦ÏuÎë6n(f’°ø,ãݪ«`÷9'yùmsòü¤Ø»d4p“§:6 »fJ ˆÆ´Ð³Šé3&´÷Emm,µ'¦‚8ô^¯D° ô4¥A»¤ÞÝ]uMw•µyçyØü[PIl¡#滵AºÏÛž•Uˆº£|™ð $‚”'9ÛÔÍòÅZ™qlª¯šÓ•¡3n¹}·Jc`k˜Db41’zì&f+ÅYTЇøRýÈú-6;yÙŽ9 mºš’¢RaÚì Ý-ë6:N\j6ž^UP‘›¯w»mvTM1ÚÒy,c 'ƒK%1I"+A$ç=O£eÄ^tºrsÖ¸SätÔ@]Q¯iT¶‚ùc\*ÓÎD¹?)Q‡M•s‘R&”›»®Nò˜fr]ÚPUŠ*uÀÊÑÿ7Y^d‹)x¢Ó0nî ZóÂ:|aÅ æ_`#º¥Ä­6B4Jø†Zžo@4ÕôPû¹îbo …Âkv‰œ7çŠ"†¥zXÈÔËܪëšé½áÂìÙm$!Á'`@ì'ÙIZ‰Æ@ñd𦡋5)•ļh@ÒÑ kúN7ÀCUv§é‘öU\5ˆ:W‚ï@+2Z·$˜d ©ÕÖžÚ Ü.èÝV¢)X¦û§[ý«i—·wßäšCy;мàTÑ„]†jjtØi\²QuÆÏ¿ót¤r6Ú&𤻠§îU6àCQ./fF»g ‘Œ]&Æ5Âéî“2ôÌ/­‰0Ç&!Ѓ¡ö9aŸœç쪱4Àn-Þ%e 6=Ô)QM¯¸^! àÓkÁŽMÊÅÙ͆Y˜,`¯Æ LºMy䳦iŠ.ÁoL…œ$Lü6lµS˜: ckþÍúnå¿~æïcãvšÎñ^-+)å6%Šœ»CÑ|¸ÏE}E’NRÇÝ.‚»v]™ªp-šUýõù; a•ô;`šâ=¼”m©žÓeЦó9}¯)XÓ@AÕ´¸<§R¤¤Õ4M„Êq®–ï’0³š«bÕpK§…&éôà™*b^\$ 0Gýh<½Òùcý~¢ú!÷Î#i«ñ¯ u—"itò¶ªjqϤH¥&\À¡ u*ôdÇ¥Z¡LN·>ÛÑί¹Ü‚•hk®FU§9å×÷[ðI­©7F®hXqƒ0ek·Õ„'M`±\[¤è8™ÛðX€K?®¯ÊS!xÁVã…®£!=7Dzßé+@f@ ÝdÌÝÑ/‚QG“Õðç®8•É$´šÛ<¤Ô¶H÷õÖžtºÎ &C«Í¬I®8>ëz"æNy¤Ë¬_òÆWU¸{º;3ι&>“yÏó²¹JŠÐ(!X»‹^Éä”Iõð/ïWeøÎ–•ü:Cã‘1;w^€#Á¾D\ˆ,ò¼Óü¾ê",´”ÿª…ª½muïS$Ù4¾ m:rçE_Qÿ ͦ8ð/„–” •­t«–éïl»±•(Édϼ±‘&I¡KJ*ùÔ!˜e³WM¬4×@[nõ”ÐËÆ½xVeFAíæJMéwlµ.!G¤3vMjÓžLqvTÑ4_u} 5WÏV”_@š?¯]ó_ðùÚÿ†L¶± UÁšÐ˜pL£>dd„Dl*b5;ê4·¹Ÿ›°:Ý$§²Q†;!èNg-ãâTHÎs…8KÃh¨–p³ feêâZ•«"b8 Y\y_GXd ”WÆc’UÿÎ}·äî¾%tŒ’N)Q›.Y;ô(q_›»N«Æ’ŽvÞÛ–­¥Ÿ³ñ&ÀgúL"´¶iÄ›®'‹å.¾¹à=Aœ®ØËV·ÖÛ?ÜêsåTk™&Aˆè!£‡Í1¯PÌõ¿Î`ý[w°éê¡èÝÏìÖFUY—»R§©•°dïLRm91ÄšNÝß×ø¡î×§=Få„]?U€e–gz6gzˆMeÕ±Kƒô»I¯ 9ê\Ôp®ž3ÈOÍ”µ‘Š ÌÿeHeüª‰…80MúîC*›ÎiF×Us‹à‰Ê!ŒvÖ:öÇÎLðöývQ5¾)Ú•ÌåniçMÃÒ´~uè²×k°+‹– L#XqŒÓûÙª¸r“Ñ)^“î”D'¯þ-Môe€eÂjnÞq×ó•b•Š-dÆõ©ˆ¡0ëæûIA’ÇØÖ Ñ`í¾ÐtF?æ³~‡hþò¦ÈÑIJªƒwªØÝªõ‹ÆRžÛ±ŠiTå2–äR•_Áÿ•ý¾SEã¼;L¦w—ñFa°ÄA¦úþ/'YÔ¹rÎ4±~¦,ÈeOEê¼Hô×$è°OíNj\YÜ»¢ÂÝSZ¸hb^¼{Ò|> …mÏ©b:&&Øu2잣YÊ߬r±yÝäDî·³×±`7.UK ´ ÔÎçOÕçTá¼x¿Êl§}£;‚MŸE*[ ®ˆBä–*t›•ÓYÅ¢%ßñÒ Dª^G-ŽkNmu‰%õUÄÊqÓÛ²†ÝÝ{…?s• ¼©÷<5¸ªþ²§Ô„ašiáó\3´|ü†—½1cùBˆ¥BÕŽÜÏ'èÚÝâXüÌÆ ºS}^馟q±zžö–šTy}•rU7s_°Ë½ö‹wLÞ–*%=°Ý<íQÚî;»Ü—‚N„Ù¨! ©bX&±¡Í¹%šRr¼ºdª88‰[m¶º¶þã‚zØÎb§ /"ê0»É»ß)Ck4“*´ØÝ’1Â\~Fˆ*mÛ-;%ç»ošH)«´y¯µ Š#° šdƼcš\Õÿã6à¾9PÕò “±Hå±Ŧº!T™’Œú¹€™^OÒ=A®§ÙþÜ:1U"½ ® )Íw9R?uS÷-BCªšm²¨àÓ /IÔÑuž“jÒ1:ÙÓª«ûT?‚LJÐwöJUP%€h;—U)*IãîÚº¶ÈŠU똯i¯&ØKÎ5ŽšåV –#ã0æL°‚{ \ÀlÄl§ëŠÏ(Í‹©ˆJ(ÃC"T–ØNvú5¦>§i’˜M•xöŠÿô\sÊ7NE½9@ÚÙmjÄsfôÕºvTRWIeì(rW°FU6èm%‰7žëdÑFÒWëzñ¿peu#_i<ÖEíi%G}M¶•O’DB®(“¹Úÿ¿+M’9«yˆá4:W„!£Ï@ÁÔÕ¹!^ÿüÞ¢–ns*a ‡æt*­ÉnuãŒ7%=B·zÚõ‰ðȶ”ñ©Ï‚è¿“6¥¡ðJ#{Zÿé:`²îÜ€U"ëJ½3Èó:êg”Q¡ç“žsÀ·´÷We]æ¹r™«NÞµD±ä\~Çí&¹Nûú÷ÛïÒM—(‡Û¿©DèÄiÒDêŒCw£¤Ÿ€àg$_å,G&jqhc8È]%µ­–ˆÅn—¼l‡BSB3ŠÚbµ&SâvŸ±ŒêôE ÌåáÖÞ-ÜÈ”º«@b$ý±Ù IDAT" ŽjòÁ ÊÑ$ˆøÖM‹Gû…E›Š*<æŠý8±tJ/‹¥äçÌÈS਒ì•á¡©;ºì<·3zìX×Ï –“k·‰œC¬ªõ¨³MW¼ƒÆTÒÛŽß½£ÖӬ꺊KÑpšÞwu~0 ÛàþÒ•Ðô߆j@l ‰Ríê°—¨ˆ§ŠÁI(” Rãu›JM™¬|¾meHÔ2»þ$¥fbo¨ä[á+ :ªzKVÍ9wDÁÈ»î@69cîç*¿„WBVª9q#»üÇ¿ùfÇ \ó¶Š›f{ñ Õ`GœÊ\=uOwLTŒˆ6ޤ¶3É*èWø×E†G%N·Ú¤Aõ’”(ƒÐ‰9Áh…íÎKÂJ…º¬Rs° ¨Ö¨ †ñònUå7‰ƒm®ˆ–}DOÃoeUdªÏï®>§Q¢xŽð¯Ú:]Û§á¬3R²A¯J!Øzôâ‰ÖÅcÝMTÓ3;M'N‚¾LG( •¢ÒËÍ¿ÚKÐné@ÊŽ‘ ê¾0ÎpŠµÞˆ“L`rÒCeèãØqWÌ-›BèK³¡›à¹ô·úŸ°¢uü¬®êWç}ó¬%ž±Ûë »Þ½V•XØyã|.%ø6þü_p%¾N„Òn ¥héo° “Gs‰`—‡=Ó­(¥³¦C²in$,ͤn§T¹6wúl¦žTÏ$™w‰Ð¡|ÝwLÃ$I{î4Hv1#göKV· èÙ¼‡ ¨nÇYÝs¤@ùõª’ŠmUèq<ºŸ§»õç8Äwš®@ÐtGþœÂYìê!œØò37]· Nðp$q'%8µÀ®=#Ý ¤£—Vc5Ѳyá p¨ñ‘À˹^è„c\ÚÞ1oßh"üÚk¤JÚPµ €F…VPÜTÄjˆ2)d“ë3Ó6 Ĺ²z5ÑÒX×ûàeÑD̓HÅ=5°vl¡3E÷Ù«Éø,ñ¨©¿´/§üXPÍ_: óБf Œ7t¥Ú˜…¹ôœ|_«)Ö H3Ø6©OþÛŠx[1Õ@!¦š$Ù+ŠôëϨ;â‹çȸŸMä·UÙ2 ÔiÚúÒêl”Y…Eƒ¿º*¶›®H˜ˆÂü<µÞ[D»ök8CÎøù•i#^Û‰Œ›æ_f@e>¬¯p¦è ~ Äyýåv™_ﳦ£¦0\¶…(Êv8ÕiAåeuâTËU¦C×v*ŒÍHšüòÑsðzí~ïâC×~ùiÄ·2töKÄìöIÎZ.Ε«¯¯M»{óû|{.U"§EÃÅUp‡ÚRzSœ(àâï[¿~Ñ7‰¨*&Ç­ÉLJéUsT šHNn*· ¥îl8Õ<ý~ß[UVä^4ÅwÛ2!óÕT‡j¯.~´aT©¢mzX¦}5õ|t}5/šg§îôþSÌTsðN<ÌC, š&—"©9)öÞµ¾ø_„øîŽ6ÇÄ’¾’AŸÖΙjsçïãP‡íÁ¢ F)ùå£ ¡F'^ r$ܼ]wüæ€ÒâHSN•Ñö¾—ŠäP¶£ŒÊºqf²É8”Úë.Õ:¹vS% š»çœ°>/}ßiî÷nÆR#™"Ñ–ù|´Šœd3´Ú‹uN‘„¦JÕMÊôªÌN_ç_ Š‡‹ •bé¹m ¢f%ª_÷ð:OnB¡Éë«Iƒ²[t7•Pi…šÆ&Š`÷HîýYŠ ¡éõk׿úSâÚ˜ò¨¾™‚ì m  Qm…¨ /NÊd…hý» "©J¥j•˜O4,9Îù$ÅÁuRFgÌúBG«XO€µ 8 °aÝ8eÄÎ[@± Î1C…éoI¿\*NåŒw[ |ÔõÔ.Š*€Qé- Ïïüle3ѱ:ØæÝOLÎÔð§´èézOâ„l~Ñ;çN&!5]Ï©døª‡Æa\™Z§PÉ`’Ю*©S¤×F—k´4þ{Rù«ð'±ÄëÞ!ͽòý›}Lnã;9Ÿÿüú—åÒPªT€K•KCÇztT׆ÆR 4$ñ^Ø•ª\âEØjxÔõT8›œ0 ÀàÕ¬­JZ¹Ìµ›ÞE7²—b TÁ¶…XrÓsL§bJ0gã£Ã+"ú^†+à!Îzd×áóU"R2ì~ÔÄš½Ö@ ‘‹H#:½²,QõO9,h}€ˆÙý.LÚCHо_Úð/Zí¸h#ÆqDé’E‡Ö_PîÓÏé’î½O>éèwË(%ÛUk.‹¤tÛ¿æ¡iE®ÎXªˆ„±ºãߨWv{–8 Æ1†L ïZvûpºëMG_ôIMàýR•“~©XÀ‚Ðu!Ú ³Ò¤«Hì ÷®óæ'ãùû r"æÙèzÊ5ÐiN3—Cª¤©Xát¢oÞmw^ˆ§A˜ïuk/öÙSN½ØqOÂU ÌÅ:…âOTB)ªhwÞSuO ûŠd¿*ဟï|‡‚Ákªf2nwÑS:%ß ¨›¾7•'uƒ´ÓÀõÚÐ'‡ª_õÌ\¶”èFÈH­ñÔX>KŽîœ¼øü DLï½ÅBbT5]»¼¶ÝwéÜ@·WwS žš‰cÉ":öÖ/Å×”­½smÃ~usá @·).sîeTSjºR¦DUË5`¡¦ Ù$Jr YTÒ8XѰl¨3ë‚íEI‘ÊåR¦‡ò.U÷Å}²ÇvÞksŒë’> œ¸]ã!X‚çzEŽÓß+—p¿æ1>N1ž6ï]ㆊÅ]’Þôdu•÷×½“4¾<+e7¦DèùdÊ~ á(ºÇ¡,\±g1STjÌ ×MP.-œpÐÆ”©ÎõŽTQ ´Ye³Jì-§³wS%%¨U¹Táäûm½º³¯¤—ªœ!ªÍzGH妺ÿ„GÌM¹<3Äžö‹±"ž/eÄ å’9í=¢ÌI 5ÂÜ}í‹«ÊäŒúÊ!Rõ„ý#L_¨‹„(ÕÜ!_¢€´I^dεÌñõg“Û]ˆ5w¤@•¹M™‡ÓEî¤êVMmî&WUK‚ ÂD.Yé‘Sº8]ªÎ•¯¤S ޼VPŒèuì©× wÊôÒ»£®Hgù¥Q—6ÔM‚R/zL:¡ÕàêYò÷”®Æ%ñ«ë%R˜nöó4šœ¿˜=«iELl ˤ(§œÕT³ÊUŠSé Lì•ÌelÒ¡N§æAG&x+B¨Ê2‚AšïVUåSâ¥×#´jÌÐ+uØGeƒ•ZÓ‰ ú4¦\'&®ÕÚÄb‘±0úN¿ö£z‡[•TòÝj/ÆÁæ@±P›}¬´ ”-û–í!¬Ç¿• ™Î¨À ÏeЊÐÍDö˜ WE+u›¼«2rTÕGÁŸ{ Ìdî>EåáÈ_*ðVà;”eŠ`ÕÑš›æ¨KSÓ”®?wzFµ—·¿È¸¤z¿Äþyºvëf¾•Æ}Ÿ‘Œø†KR®˜'˜^  L‡æW¿¯ÆGC|8$(P>+òØK7“¦É?¾Ëo8ä©ÝËUAžS Èý)J,Í'Uc…Ö¨vüB½×bC“ÙÔ«žB‰Wâ϶ñÓÞTf6êo„.ñÔ2øq?CРWÀaöĦ¹ äÊêÚ˜¥œæ¶àÜÕ½”ôW’"Ï[Æž™¦µ.Öä“951Ûî«éùˆÛë %÷æï€ð&*®×QÍL¹8¸tì‰tž^'T£ÙƤfK#Ò*n“€U…?­ñ¦JIc UeDAæ4²šÁà(•0ø*Æ%Œ@ã€Pç \«ÿ2A̦R¤¦1S#åUn’f~ýk³>)Øò3¦«­O‚“ü.MÉFuD.¾:Óu];¶û‹½ ê4¾0u8*ŠÕI J¼ãmU¢2vžÓ¡¯ˆpµÆ¶E5xX—«I Mœ¤#›ÙÎ)ŽÞ÷¿¢Ls¨x©Xé.¯`ã„/Ôï^5ïºkìØ™x”!%I¿õèÜtça²Ÿ 7RÑ«=H}7¶ã~³ÿFÁ÷r±ç&lý;¤8‹˜…Ï:–üÅ^ÑI¡ ‡Ö 3×e¨/úh‹Ú'03!]uo¼Eš)*ÁÉôÆ $ ¾C7®³ !@H '¹WXjL2Ä^ñlvÀ•ôW8 µKjdí·2Δ'`õ®¿Ô•º—¯$æòÜLÌ“»Ÿ®*¬ŽLøfo]%¼'vƒî=ríö²I–²£S÷¯ü˜Uõÿ—“,Î ¡ˆþþWÝqOêeês:$Mgx ~>}†é_ª4¢(H«ì\RkêÎó.Ég©Ÿý·š¢àt„ÓÍ®ìßúU€Ûîúާ€¼5½¢ç©‹ñb¤Š›Ä6vê—Ø<5ƒ{ÍÞN纜£€ù!c×Ecη¿ðÔˆb%]׺¿ô P9K—R"³ÇÓ\+9t)~ší¼LyL5_ªB—eìûI¦µ'ÄÀÄ©HÅ5iÇS@¦zR$Ë—V§Ä£CÝM%ª®6c„›XFÕ+ÝŸ_"y¥8¿ÊP«ûþÊÆ]é;¸ †äQÓ‚Ên:¢o œ¦¶6L9‘ìÿŒ¿™L+ºíšIzêë3\•%ç~X!Þîàlö$õë<ËV¨%Apêìf·÷þSàØt}SõÊ =‹;½Sõwè^qD¯^ÑO€ ˜e¼+:û}ÕÉP¶ºŠrÝÎfÓŸ‹3K»Îú‹Ó#˜5Ý[oâ2ën|¶l‹ê; ±°Àù ¦}_{úVà·Ñ(õòÈâºêd}÷ìdyëR,SU¨Æ _P¸N«!ao¿G5§’Y&÷þ´‰-—ÎÙ?!X¢P´C ’wí´\Œ@”ÕëöyÒHìŠy¬ðõýF…²– ß$Š©Ÿ)ÄɉsºŠ|Ùs1 w©8à²G„­©Ðãn."ñùeS°³·'‘§ú/ …J"pÁÆ÷;šŸS5õBœ„Š„`<6ªbv]Û¨©Š#¨-ºLCÂÿ½™m&þÞT¸Ôl~O%—ùèÀ” L݈V>5UA~¶ÔjM+æ†/·×Ám0ÜjüO1Vz/ïêpP0ä00jmèôÂF×_ÙOàÇq;¥ûek•¼}Sßí¥IV pª¦Úbò·HŠê!/ÔÇ$ŽAe3/Ëjª@M;\¯R¦1(Z5o*%Šp á$N26Q~îXÔDÿMªw³°}çôÊÆÕ$§žÞÛºïkúÙ ªÐMrrr&a+Z‘N´/±Š¦{?a¬TëžÎÉ ªÿÍÙ!Ï«šäœ8]fL‰`J¬[0¢®ÊÔô{ígV„‚Rlóð“|#¹wÞP–]7§Ò¿Þ¨Êj²!Ý ø©?#!+á ]¢Ê¥xœŸ¯ÏWC ÄÙ€[zõÒ5ùLÄ—½þÅåboR Aåa)pŒ˜ª»öî‘¢‹/ŠÓ豯Ìc`-_Xq+–%bîóxa{Kµ&ù_×pH,ÕLº58"ÀÙ9?ƒjp‹’(T‹Iæ‰JÚÆæØµ’$hª':«s~ Xźº6>x‹ÐTª£F¸¡òˆj7ABö概™À›s­q¡+iõD“w`5À¢Õ7‘á&Ï´™àpu^7~Ô?¡á {¢š4Ó8ûÐ(¯•oœøNÇt$ï6:N δq¼øAÚÉ‘×u*'Q¹6ŪbUA«ëz/€;#2EànÆëºóT&L¬™j¢´62Ç$°(8G·áeR~¥9ï6޽ù¥ ƒªI¸«Þ6ZD=òÚ+Dïß;p½]ó fèÑÛíºl¥jz˘}C¶ñ‘4M–8¿×ø@ü[‡W7^&Ò)ÿùy“ Mœq<°û’{ÝRïJ”ZÉ~5Çm¼Öà¥J[ ôM-iÜ#k°ugìÞk|º€V mßk·W¶l‘<¾Gw ó"v Œ]þÍ=*ÜyÑK£@ýT½Æáóhõ¨â†«ÿ’¸NW©[–eÚ· –ÍgNÀnþ¡@ñ Vã³Yþ¦¢á¶¶˜ŠÖOJ6UYGóäð¹×nÒ‚ŸÓ¾‹A†JÒêts½AÔU“˜«Ù%w…ò;sž! Wõr¼Atª:ç̸àï*¨£ž%‡34E¾”>N°¯®ç–²3¦‚gæÕĈ ®'ÆèìÔ˜sGÉ¿ŠËªð}µô îIM’åf\gBš%è­­Ò¥*ãA…Ð=ÒÝÝU¬=_ÒW*N=i|®ºUÉÿåiÖHR9£ÀyrײEÄÌGyb¸w´e)5^踦¹/ÿ†®=ØYCE)wÌë$#½=5§Iɰ{îMÒŠpFU¯6Æ*n:WÁÿúÞ?pÔŒ§Kítÿ¾Û\ÕüÿÍü¹BÒ 9½0ž!®£™ˆòݤVXbÍs$èóuýÛ³\]å²ÕÐw¿ËT¥8×j›‰Š)¤`W¨0T ŒF`KŒÆ6´çüÕ;”4I!D\ØÜ}4h+öWh„-ÚV²ä½©wçô¸¼¸bÉ!®¾` x­Ãw– ÿú^½k„KóÀNU]6I`:[û)@Uèþ‡‹áËFÚvSUÌMn“”òÅË›‰`=ÛÆÆ ­‹½Ù»ô ’^‚kà °ªquÛ€6±;óHí¶2 ‘  ;¡±&FÆäè:+†¦ë†§g‰‘âðR w ‚²h& ƶpPJ·[}%$U‹xk_ãý>6½)lhpV”€Œ¿¡[^¡ïY\)Wîsëž‚BR¯2 ûëb6¾öbJ.UƒS(àCR£ýN p¤œÉU–ê¢jw¤É–êÿ¿<pžÔC/1*‡ÂiÚ[iî¯s;Í™¿ê£ ö»äŽÜ=Ïs‰¥”éTK¼ÛNtseø©8É÷v:Ö®0¥¹&•®OÅù þØNÅ;%Â)Av éâ-ðE]•Ø Ä(ƒÎ…OÊku¤-i7ûej$@Úùt«MM•Ê•v&Ì­ÂTüNŸÊtnT…¨ì™/Ànb”VÈ—kÊL]—įöŪQ…ØßvMÜ*fæ(q:³à‘ý¥ ˆmÜø§¶§« š¬Zˆ ʜлB™¤ñ„²“ÚÛ¦ÿ€è¸»ÉV÷¼£R;@p1RŠ&0»=.y’êQßúç¤"úpÂ<¼Réì@ò y=šüug«‚ó†q ¿§FN7ße*ȾŽ*× CYÆó©s–FìÜL ÕÿT¿ÔÖ ìŸ?SvÀ¹ NÄP(ªÖ©"7ô­Ðb¨ŒUPUU'm&rfSÝê삨+¸N{Aºöo8“HôÙUó£–G]Âj$ÃkFûM³Ý^»è¿+°¦@Í Å»‚qêEǤW@=96@rûÄÜ ã2Å›m³œÃ–(Ž‹ «»ÿ.ïsœ¨ûÅÜ}±#¦$Š6Jq(.IÌј§Ò’êVwxÉý(#š,'ÕÕB,ªG*:Cßû%ç‹:YÆýZáå/çóëø³§&Ï eùµ¶ªÙîBù;{î‹É{5EBÇJsØoêóÓØ/W/ '±“=5UÓdo«ž¯N+E5µ¾`yˆ{.»Cßu>8;ÿг?¸0n÷;¡;'A…­_5Õo'T­;CÚþÿÃ!SW) ßÑWu8·JUàŒˆÅ¸Éµ®J¯bsßH4#ÊüžæhÁW.仾¨Š§½^€v-‡ tbüjªaÑM0“_ÅuB‰€Å®¼Ðêˆ õpöñüHóûЂwêá¸6WMŸø_€(þ9Ô)u¦"ÊmÊ¿ûWÙ ¢¬áåO.][w¿é]ЄÿŠY‰è'*¶Ýت éªAꆶ™ìP€Õ•nØ©™‘»É«Jæ5Ú1îYS,dÄlæteS 0cÊ2ÚIÂŽÉQ礗Ç}¼™®º ÞÐëSª P‹¸c: ½`Yºé‘ÜRÁ,²þx÷?±èŽÕ®3c?mÒ©NÆ„V7ÉMPT˜á¢Í]ô|½×--îô…\nè¿¡#w×¹óh(ʯ âªcÄ^à,m{z"´YO·¯ ìÅX¬½Ócqï$Ñ(-ýKÏÁ4=Q\mÒ€1ò¥–=­ªs:/F 3v“d›}Mt T®Üö HÐÔMÔâå×"ÐL•y-7©~ïA¾ýû_×NSQ°6U$ÊFt{¨”zÖ%ÉS1•kÆwÈ!ñ*úù«Jv:“Ý «ô\!' òº ÆI:_ï+EQ@÷¦`˜ H»&EÒØ¦„•œê°;¯*.\;ɽú4[¿Õ$¡ Çi¼[×û…°žöŠº>MÅ,þ-â$$R¹»‡&›:Ä3ehuÃ\l,uµÑ ?LH[)‘&IºþîÕΤá äQ ˜¢BýZO¥c@û?¦}è܃֣½®‚D zsS-©j4á~½Ë Þ9»Tîºû¼ ¨mæÞkHRiîO’:PQôD°|ÊÜNMÑîØêvL:BK,oG:‰~N PívâLûÏÏýEO¢‚ 4a—$ÔáÍÊ­¶ÊQDqCÙlûˆ½±›˜œëTapúŽk¤Ñì…¦@7ŽäŽ?¹q#½¨¢ïlJf/®²&¡¬7ɪg"A¼ÓÑP†Eô=}1[ú=EõA6gzÊSªépZ·-(ã{nÏðt…Þ1•ÿêphÑ©b)4i­î9€›ÆÁ½T&)‚ÅKëÓA°ÀÆw?‡d%dô¢*V® Hn&ªIQ¦ƒìÒù½QQœtõ³ùûµÜCDªWU¾Äño“¨¾ ‰M\›bVŠŠº»¶Ú\‘N10B_ŸJž$¨Ž%œÆ—ÃüBõ_ôó‰Î‡jv&çõ²·ºïô™·~±»ïŸ¾ÈD‘NžÍŽjUBK%*—¾›´°ÊðFíÜ*F­éDYº÷ˆÛ»×+КÀ#yîl/q/ @eekâs¯{iÓ¸ûLO÷ÏŽ¥ô¦š"“/Ô §;|5mµaKIñ¦Ø„\V°À¦ŠÓà˜®¤&Pûª—ƒŽ`wàý¢ž¨$Å[¥Ùߤ7›{ºWW›m;gÙ8ä>jȦŸQ\]íe$ò2x;—•Á¸ÈþuΦ?K°¦×gžö¬®€R ÌÛdl³­¼'IÛ‰R r¹¢«ñj”2`¡}VôLwÂHôíEC´JÄe¬É…Ý)ÀHÕî‚JÒÛue°6³Õ¥øs”"è_ݹoÇÚ:H9‹<5u3þ¯pJ™N †/$u'Jü 2Û‘‡Ãû•üˆ˜Ñ6¸ŒNÁ±bž‘.38ªg¾ „PêšÁ§¼=\—çV€’²WŽ%uFߤ<)•n+ãNמTÃ…CÇmóë ¿ˆ—žÓÉO›œÃûûü³NhãˆGæ RZdTÜîÔiSŒZpÚeêd„•e±jàSëšp^%{Ê€¼ºÿUՇÌՃ5)Ô.g ¢7³‰˜Õ+_0Žâ#UÕsõ”„”ØÏÄn5O\í÷n¸Kö] ©Ggw;nL ÆI Z S±á°X”­t:-Zœ‚ø_ùá· œ®ÒTþNÆAÙÛNˆz“„º±ÂÉåB+‘CKç¾Õ±¢&¥ÆŠ7ê‰.Ò¡Ü-…ÖèˆLî.»êk#Ï| Ð_ûçUÏ ­Œ·c¹j_¥x§Ô{ãåó×bÏ;ìN U9™öÚ~.a®TáçúÉùw"iL*|UNïa îB°;}/Ég\ÿ Þ”î¾PÍI; ƒèoOÎæàMÁRiăê¡ëJž6÷¦1è»'@Éeü\Â(MÕàŠˆDªêúÿºÂ¡‡ž‚‚¿§:ã/M€êÞ=†uÝX©§½Ðˆ`÷ûEGªb6UO›ªAÍ“Nû­—A'†¥4öóѻ܂ "gNDµºÊ>3´MÌ)@ùó-{HÙÒS¿Ç+pEc—z—³T"Ù+á(Ê—hý¿@³DŽ4!ýB“]éè5Gq”I5J:Á1†µv“ˆe!Àã¥æ€ÎéhèëHÒ™DIœ;]0Õã 9É3¹¿MÀße’™ÖeJ\nŒ™bÄ6Axß ö’û®çÌcÃ:£’êªò U\Ù0-¤žTn§„/›Æ")©D¯PìUv³»)hÎ-’¦7צƮWi£—œTp&ܤªwÀ´ÜÉ 7`&|^Õ‰½e‹HSé¤à¬wæ$­qSÁxàÖÐ}5 å®ç¼ßÉå”°e/zLbˆ'ªxÉÃç*³™>DYűô•€‰“üü%‘éªç_L‡¬KJ¯Ç8j8 ]5üð6*NÓ=ôæp\*R‡¶#hTm˜ -<ô·…` 0./lv pyçi|™üˆ‡ŸÙM꼨’¸è…©«™\s¨”Õì6Ý#i<·“ôÝDIfÕëp>jx–â÷†5sìÇãð|”¹K±§(c—"V;#ïÊ|O>ãoX¦.íËâOÔïWG| /Á¹oš6ÜÍFª…îy·6¯yVD2ò w« ÿͶA©›é€à–'㳎PÎl¦Ü·IlÎ4¾Y×®’%1b£$·ã#áMlÆEß`{]±ÝGJí3ᾺŒƒO § Ý~†*®È¨»c¥<]›TÜÇêG @5ævõ^*³0hÐŒ]w§²,V Õµ.&¿a& ÚàGÇEr 8·îsÙ0<›Æ¶‹#˜R¡»ˆ£¸Ö¶×*Ô¡»*bû>UU¢þÞë)¡ëÿ7Ø«é A¹W¦¹¯È¸îËÎ÷ñ1‡|ÑiÁÔâ¹/7QõI8·lƒÓHY¢¨±ûI~b¥ }®Õ "ŠnŽw|D?eàVÓ ÐÝ÷SÙÑW¾¯Ô¯È ZÔc〧VcD×¹÷L_«{’Ü3¸ß˜OÀf’äl‘5Rôª’|¦ J9›vÿ]âÏœˆŒ6¾nÈÎÅ9ëœP#üÑGÒLw­Š)ÃM™K'fty€ŒE bì~Š jkWJ˜ÌA²©Hã]„<Ú:=¥Ø¸ÕÖU”4hvŒHU:šè*9AëHéYó<Ézt¦QD.ÛyÞ.ÑxžkU"9 ã•’dEo”²é­ –¶п°8”Uè€ÇE$¬ûì‰?ÍKŠ6¾pnüЇÓ8ü¤/¢bÑäm’C•?]³9Ó õ3é(Ï¥eiòŠàº ¦K‡…ŒrsÄ28]¼%ª‘Hmðmu®öP-ÕÞ¦ÿÛôÔ’¾Æ7·Ž` O [£&·:ŽøžÚ¡co¹x÷ݬ=m†uÞs$ãÁg‘˜Ñí» x¸Ý÷Ñ$$ç]½ŠÓ4K vm«R1÷98c³ŠÆO¸Ÿ¦xYFÌúãïþš ¢Ú+Q…NQ‰6d©$P úR‰­ hÛ*Ñ1ôyÕ ¥´ È†ÚØ–– Õh@½ó—ÓÓUÒô÷^(9{Œ‚êmòÿ›‰oJÀµËëO´í$QÒ30é¢üþ·cs@­b{gÒ•‡wºI殎±jŸÌ‹VwýM®Ë_ƒ¢ÈÜýÍ~QuÝo¯ˆ‚1†ØHV§¸n$ÊMNÔˆCÝ_]iøëwW{Á¡ÊЊl!ö¢°¨Òôù—Öwjú»¼k%´rQBS o¤òTÕ±Ën|ýoWºœ2U[ ›ñŽWñˆÚo»ÏÓ9'*–áªD› VL T;¥©ŠàFoôJV­]~1ÓrЦò!•ï ‡%Uwß¡Z¾6ô…âÞˆ€Ð ðJÆ™ÒU]`W”Þ|)/ç=Ægb6æ‰ðöh†¶­¾Vå”qŸ5¸˜ª©«·ªÄ§QÒLa iÁÍÞÚ˜Þ”ø™ÜÕÒ ¹ˆyq`j±ï§¤ŸÁè2<3£k@Üë>$4ñOï6íÖ¬e:ìóØÊ%ù‘ÍãV›Î}õÂÝûà‹ /­DÔš8Êb·¸+ TsåSÐÞ#2Cª#šhß ù¹¯® ¬Aë£â‹šqWf`t?©ñ/2ƒ¿“”éRÏïÆSÕà÷òÊ™0vTŽ0Kà)ÉäW÷ŸßíÜw|ëEN1¡/¶ão³¾rÅ;Å;Ú-ûµÖ[Eà ̨q¨î{ºkMhS$A)*ˆ¢&EÜõVÒ¨äÆ?›öØÄnlîhÉèéÄ:½ê8§Œ aq6cwÓ{Mã3/C×ÑOÔø®IqJÈ.sF@¸2D£±1—ûû2»½žSWÐt’`Ã|ük йç§ÝûjÔ¬ Ì Q9HÓv‚ W‡MM“鷺·Eò5l´/C!ר£Û¼Öüé!@… %Ž`2—MñW°ræï§ÀDæœ;‡¿n‘dÄP5Ðnؘ‰9ìDɶ„DMwÅÛJMiHÐ=àö;¨æµ t©‚‚ _@vêC#Ú0e<_ {&ƒë”lc™Ó`IÏœ­.ú ­9ÿŠFrG+jñ”^r76ÝÕnƒæ¶º£pwŸLº7ß›TêSð'jp®KY‚¤~¶³× §Àï&pt“1þ}-Ý#˜ï„^h?µ#îì°)“C ]èRnî¼c¶C%„k+Õ'J|$L½ ÎþÆã…€õ)qR•~/%ì€U„`+>tœà»¡x"ø<¼Ë<ÐKÜ–¶»)tgtCÄr&M|¥ëþòmÛèSÆ¡#I\\m›Ü(xKcdµ œ§iv¸†=Eõ T@ä{R†€øÛUEgdV öФÃùsÁV'{ûòþ;D¤{ìe,)«è9UÆb¨ë¼”ïCÀ=>9AÖð6ìiÒ3÷kp?&Š©³–ºYm^yº«.u‡ÆSºNÀpú,º^R9ŒJ$ŠRTôÚ$D@Þ:ÔÙ!ÀW½Û©»{²B¥ëžb_¤¨à2˜ué„…¹ì±òN±o2ØX¢[fó /dmiìÈáìnñHJøŽ]‘œ)æRߊxxF3D ¾F] ?ã…¹“ÓjðÉÃF#Ûvîž‚5SÊNùÕç@Ï^>[9&^å~ËØSνºs¥C«ÕÔwi&M ™Y—©éîg§;H2­A”ºf˜2õÝ»XEÚCÁDw&ÏûMœÞ€‡MœL(cãŒg0¬Š™§ŒP Œa@#æÆð× ÏûúiAÅzÌÑšv6m×UY¾¸jè‚F>z©$ø¨‘)l‘N{b{LÍ*b`¢”¶û«åUn lÒF±kb…R€»~ûŽ» ]IUÙÔ»ûï¯ç'bn £ÁuÃt„Ø÷Su¹øDV<Ƭg\½÷WfhÿÍ ãŠejPU>8õöQvÅéïø „bI˜/‹Mu ²¼2wQT•íDÃw”Ôö³Õ´B VÇ‘VêoŽ­K‹  èô“¤  ¸Ò„ž½DÐVÌýžî¸åµ™vó=.³ÿŽí÷¦(s€–º6l1ëq0c¹æSÜT¬%ýl5eÖùè¼x§]s»|?€p¯f ”Þ×ýÓYNêL´É‡ƒiVXÝ;Õ·XÓÜô{*vEÒ«4(™Á:¸ƒêÌý¢‰¸“«~IÌ£^X<“w<í—in£—Ãyš+­7`—îËK•Á½ß·gK‰ÝTÌ}J/žÝU„üz¯TËdjÀv ƒíù™€‡ûŒî~ê ‘?Öêw|¹¤¤ÉaëÌGTéáÚ$C%ÀÒ5ölj²"b4[«Òÿ¬é³6tüÔ=>uÐæÔÈ*¬"xg;™IW÷¤ò¢FK— âv‡Që4ûST5ÓÞ• *ækK“^4Ï]âül$«Õ¹qÓí^*ÁX)ýÊ"¹šÊ.y›#R°g_Àïµetôø²j`Prˆ®™é°vËåŽÖuõÛ$Ü)¹ThªßáJ# L#ñx3+€çŠ_l¨Í<üzÏ;5‘@u "LªôÞ»`916¯ï~#ؘT îrm8ÑÄd)“—I *ƒB_ÖÙÕHQ¸E¡R#Ôî9ïÀ\šgmó¼Ûïñÿm|áðGÆŸÔ,¦SP•'ài Ì˜ÍU ´M‚_ÁË‘î}¥ÂG¼Ïâža‚`L«f7˜m5 JÓ€¹Šû8g¸†óuÑÔ$%@2 “éHã=»ì-õNÔ)PRIZwÔÿåÓ<3Ê”ê8ëJfúéþ èrȉ3¹-XhÙ§Fȶ 0òœ’üeFØÑÍÏ¸ß RïlÇæ‘,JÛ9‰ÒúÝü°R¤•s7¾éØ®:{ªK@ª >–%š€7íïñ9|– Xˆtø¤SбJ\$'µ¯g[]\+rú¿/W5Tâd2æò¼´²ž¦Ã”Ãd4L…²vwD¿^ô—¨kÁ?ÖçwXäA˜J}’$¬ÔÌ5|1FéžíjÄá0Ìlèòym8}~‰ëtjO²Í*Qo¬Ò1  ¤ä0; ƒÓUéBWàsb^øLÕ˜ÚwÊ;ýJ›*’ôÚ\>Oõ…\ vHÌ&ïÎÈn?ó¤<¾×i¼và»×’5œ™8ìŸ0÷HFï|ÛþúÅ®á‡èº“*Õá ¶¨[å¹M’ìªßWŸÕ "‘š>³@×U/ªeªÐ੆©xP¥¤“4Y¹ý9Óxj }égÆyþ“W¡›Š§Ú§÷º¤Ý(j)Æm#¿ë€Û.!¹=c4髸BXÌKaHsÍKírU7ÆåߣC¥œzðÍ=¸Zä4ƒ7•çUpu|ÙjäJ¡É‹®íKøœÃ‘‚x5IBºc3fVªSàЉi+Ãúu&vŒ8©¹M³%ΘrÎt¯¶jC^ŽT~é98ž/Gÿ¾ØIšÓü¹£D¨øZ>£JŠ Øú2cé¤8èD]2W9U2g?ã¡• ™’P¬å í’oÄ,p£\ȦÀà²"ÛÑ$Rgs #nÔødiª\Ò^PZ®¸Æ%hO]ÝÍ¢2¼öwLŒR„o»ì|fÀ™zR¦FYœÊœŒ·)¦kcqK€wg´C÷¦ªamºuÞTàÊÊ\Ù­ÉMÀ½­,t·¾9¼Szíôð$È „ihÏíÿ™•Äth»jéµ€D„nÄ¢ÔbDߨ1Ý£¨ÿ‚ÂëNÅluYÇÏRXš¨ö«r˜üås¨Š_ëe+ö­ÄkĬ²6õt×/—óDÀ±[‘QçBªÙí¯ŽýJQñ’D>53ÓÂÅ™q{’ ž©©Ð™ðÕe•€ÕSó¢ñO â'A,×;ƃ²—˜Ez8È4EQ ƒu㪹ÊK7¯ \ÊŒ{(‰H÷Ž’ÒQƒ1ÑZ[æ‚V×D\¡_0YšÞÜswv¬—5îæøU¿FÅþjg«LX0¸‘Š˜**Á¦M".ÀБé„mò!ÛÑ;Çæ¸’7¾@îuŒÏÙçäb^±•ž‚ðDw¹›ÎI²D,„°ÓûûêŠí¬…_‰V(z-!AUÕU€r»0,ªiÖlº€5ãîT±DtŠÒ©›ç¦Ïé‘q¤iŒÐQãs¿ÃEkÀ]c*½ÛÙñn½@¡ï¡â6÷e™’uä¼ùNÊPGYW: -ï&§nšˆ:]*ÐI¾˜Ðá¹ØÏ ¤;êkn²Q@U óè(<*àN“ëÖ§À~'} ×>D<¤Ì4“ôy€ääÄ z=4­*«ŠÑdߺù‘F]ìÖåßù…–:$$/š6.L/ÛSâ%ªk/;:°AšÈ6•™¿%Ò°4O´äfÔV?(JrÒ8ôÝW°Í‹ëÔáï܇o\2Õ ¢[æ²ij´™jŃJg…§Ü¸mâ›z¡”‚åH9½eÝMâôtÅ75¤Ò½æÁ*/Eøý,+†þ³¨AÆÜqOÑ qS^ 5ƒ M3[‡° X¸2/_:Õ¤}£ôG<ÏiSã†ÈгûÓ|¿¨¿Æ¿¨Â)PDh}r×Ó<šu¾Ž~9.c  ¶”Ý4ÛVfê*£+\@7%JÒ½©H¿XW¶ ‰(6’ ‘­P•Œžz.>£Ò1hWûóýœ_°{†M•Dés·Ym{·D+Ðzð9)¨GwÜls½’ÍáÎàšnEÚ!õI%,Ÿ==G :3Ø¡S¿ÀÐ ÑŸÝ´êÌÙÜGôQ†2eSÓ1Ñáw¤[§F³®?†2(D…îKkEíÓíJ·Î$^\mÖã›èjWLŸÝMDuöÅÓÏØœ-5RîÚÌ;º-õ ß™‰J9*ëOuOz±µ¥Ofm•ਭãè_íˆÙ`‡ÐœÛD1ÿ¹3à lñ‘ Ý´ãHÙÒ«”—ãYÐUQ¥ 6ß¡¯™.g‰LÓLÖÒÊmÐaAT¯R¦GU° ü½Ð5˜ô]6EÎLoD×&ðã4>Ò.ÿgwkWÝu7¿nŠþîPPÉÝ• †+ß´iŸoJìÓÒöçÆñßÖP f0ýt§úŽè»ß/w‡¤ŠS÷hT;¿ûYê v²œ/%gé;r¥W£©vÕ;®ÐB7—*I5O¾ëŽ1ƒ™*5W¢œŒg~²iÿ%ŒSS±@“T.÷ù(¯¡øÙhGl…ª¨+ª4ä'U½»"[êÚ=#¾½º;ÍìêtGS0à8÷„50 ª:§B®ÙDÅÜìA)*Z±©*Œ¸6’;Pb¯©¤šûw²—hg¾ 'YY5›í‚›î€Rs…ræT+×+‡Àa DEÉ’¤ï¬e6³în2Tc¡êšŠ‚‘-¸‹ðœ"Cä–®‰ê\|‚µ%?û¢Å2±zLl6ƒCeu@c#ùuh•ö8Õq¾Þ¹;¾K.ê%vëZàÐ_Ì”…^Cå‹€Q1Ïã~Uº'à’‰2˜BÿjmË;˜uï‚#ôÂÄB¼˜p U©Œ6`!D2ºöŒ8ìHwçzÎO€\±`Ê"ݽªí(÷®±•z¿„`§3µÖÓ7ö²* Ü¼¢òHÇÚýóá© 05^lER¦äB+ÎëV6˜êy^!K‚ž7÷~[”«øæ3TàP mwg!¥cF›w7{)0·¸ "Z®m°[5« –íùR^“Ü1éiÚ$Cô§ñ΋ñ$ ø. ž<îUßǦjîL}"X_XΑjìì&ñ\8Äóü+.ý­é¼ä 6Dª ÜYÌËœ½:Àû¹ý­vµBø.Õ´E¶dÖÓüF“|ªJÉAÑÓ½è+§¹Ir9ô{çY‚Mr˜«aïâÑZGôÓ9ScÚ¥aù빿\NÝž!÷z©‹Õ)âö&1M{¨K†ªÉÓa²œçT äæ‘<è8±N¬¤çú×óÿâ£îÚ N4£³ê³¶I°‚'«Ë”I6J«ú•yS76Tq×?§ÔdÀ ¯¨QÈ °­úY„žš 3Ë×Ê› Õ"nhRU©¾”ê»û i>ëÄr¤`Ô^WÕ'õ*`ìÈxõË5˜âEÇ4ÖÃ5¦Ï8>ço‘©ºC‡’ê°òÊ¡Šº4·Lh•Vg/(qÅ´CâTjÿ}ß}ÆeswU€zß{툮ZÚ4·¹ªh_~]å_`ϹnMž¨™Tõr¨ÈÈ^pb q6œd¼7’¬„ÁÚÒß5°9SEÿJtë¼r÷ÛŽ€‘DGû ºÙÊË\<õ™'?_ýŒ‰šuÝß¶Ô¡c¥L+'yf츜CÝÍßR“¤‹L¶º×¦I•*E÷*@é0ӾʡÚèMªjCº³ ^]¦”¸º—…gÕ5õ¢ÝïÛ|0%ìNÿÀm*U½BdÝ7ï5@¯˜¥¹ãQ%6 IDATq8Åqïà|!g¦ñ•ŠQUg /ß©Éü¯“ä(³Ñm¤\†8®.×h[¥u£Q„^|q˜Ôýg>\_%xã(cÒÀÛ;5¢õê×”„)0º€ Hvëâ°?`Ÿ„Ð^ÅHª¶G$ »)ŒTC›Û¦ÄVÆ¿‰ã¹ê€Äk]Âè­#qS·šÆÃ¶Êp´ûãÿ"íŠ7BŽþ¤Ô¨Ûkd9ÑX—FæoÿFßH7~§Æ‹TSæ¶2TUº+iLm½ÿ„ÓTÚtR±Ü4Àuâ/¸úúïX TF¼{ÖW4¼²ýâ\]qÔ‘‰åt™‰‚ûŒHÕo@§ÍCJö¶r7%–Éù_±ïb/±!6TiÄìÊEœç6ÕD‡9¼dJ¥Ó„qIŠêt÷Ö—9ÿ©ûžTÞ7¯€T‰ãEMPm“RñÒŽe2½áà0XÂËžVâ-Jó~n¬Š`¼lbUçH%ÛM¢+q¦ÒÜ¿ôó‰µm÷î' ¢r×TDª¦sµ?h>UWc)Ø€Iŵ¾@ÕýDÁçá¥UÜî8˜K™R·³=a@‚n„gØ39w9Õá|B‡—¨ÀIŸ„YHÕª U|¹¶D†ËhI þõ:o)98Ü䉱ÙtÛ++dHC–£…@$‚ST9e<3ÙßS³lÆ]HÊÝWÊK€tzÀ`]‹Ê* mwýbùóf‡2K%X‘ £B ‰®ÛŸ[Ñ„OÏùëâ*&Œyíçü ÚÇ9 ·ñ!Rý©qZnî®âx¥6ØiÎ~[*}mU}¹v•]KãOûgã¦öõÔœ=¥å(W¶ÂÛ öUÂ÷«X*œŠÝµÛH(IáŠ7Í^*M¬ í£WDN˜Äè+ð¡S^ÎÂWŒ¥±²[«\Ä0r¦¶•÷µ›ŒnFVÿú?ˆbI@tïÒ(âÊàNa›dOL(¦ €<|ö´æêïš8&‡2ZùRð6!h’” ¸™*ç¹hOÁtL욻ıٿ*é¿«RTò«I§z¥ciùð{‘+”K~7/?©Ýu’ÊZ|Šy[í)mŽÅËÓÑ,nu8œ¡·Žºñ-”Z½tΪ áøo03ª-üºné’t/V½ŸÎ6XUôŽN»2‡RŸlfgD1á¿ÙÒ¢t/© œ-ŘL eVغa±KN/›*©°N7šU±ëŸQÉ«K—Sr­¦Üûh2c®úe6T4Ѭ Œ¨;±CTËŒýî=}Ós^Y¶ú‰$=%'냆MÁÔíºMv¡YR¾taGhq Úh¹@„*Râ$ŤLlTœªh‚f•ˆ’£*y©§`@ú¹Ói¯¹?; Vâ];w×´ÚO¢)÷iZ$¬š:Øî§. “ïwÝÃa¼'œØ¬€ yfõî*v ·0IÕ Ý+»ÿ.´]‰¢Ö-yYp±VœS7º6¤ Ó€è^ÙGN¶KñÍal^9¿¹ïàÕèÑV§óàÕ+wÀ¨xÍvßMVÜ„rX‰âÝëtô÷ëyTµ8 Uq»vÝT¦Ý¹%)ײµJ&~ )Þm·'6fG]qCí«·W†ŸÏö o\ãB™*1† ¯‘ÆMÊóEâ!ÊrÝs¿Ç¢*0p«dzåŒßmžoj¼‡Ÿ—ÑÛ&«¾ÒHGöÇWœ4ÉÛi¼mzÇÝß¿L ¥(XÜsàÌm“ûÙísN±*ÀØÎüÓT’R00*9}]Y¥ØÛ/ú£& íXV»ê•®Cä°·“#¿˜}Þ»ßÛ¢ŽÁűVÕ¹—%ôKÄ›9å©"{ÑÞA5·¦ ®xd À½Z¢WHSE˜±ë .QQ¨ý£DET%åœ#"½Æ9)üÉsÅŸº€ùJÄÉÑ¡Ï`þöo4è¨êf„sºTqK¿üzŠ [õ\=éMêÌÄbyž·Ó#i¼×v¿üB7l¬f©¤C+…ñóÈÂVè¢-:Uh“×|Gíº(7CÏ ;I„(²FSÿÁÅgÌÝÑÎ=pä@‚€2‡¹Þá…ʪ2Ìå:ÓÄ¿=CÝZÑfÐ+s¦(â2ÖŠúÀ—` K°/žub ÔyÞÆí©?¨stY±Í/‘S¶€ƒÄ ¨¤ñÙŸç'>DFï+H¥®°«ùN‘Vˆ¶=L)ž³3÷Qt‘‹¦#æNaÕõ› :)#N ‘·œÝt笮~.ïXݧqè]Ê0D¥@Í„¨uµjÆ#2ØÛÆUòg.“â°g1rÕËàMêh¸}~õJ완kæ÷SŒ(as¤>»@”ÁBµàzex,^Á8ò¯&@º§ßË`î ª*œä¤õ‰FlIÖ6¡Ú„eªª(èPB>Ž—‚îLïšv½¿0÷¡ÌÅå¾0BëÉwUþߨ•b#éNwÖu}ëÞã"7* 5å9ïV„kaU}Á¬§3zvØG t”±6/üÄÀäƒxA´JTL}Õ°üù^~qÈP]ºJ%+Õ·º›*¥5piËŸPgIg4K½ó‚IÄù\5B8Ú.Àm¨Â€+­L®”åäD÷jäqºnPïó…ììÄLM>›å dŠ)WPY|ÄÀ0ºŸ[à=½˜,˜Ä¹”`R‰j9͵tbÅýÚN™CVÆÍÏ)Öà_þ =ß阺äppcØTǽ[  ."Dì„kyˆ£ Z)6 ñ&ß$<Ú+¡úIÜGÕÕÜýJyœÙù)й•_™ç®;{e´,+ Ü-›Æ;ºÒà°$ÆdOæ±C û¨bçˆü:kÛ‚ˆø}d2ncp ö¹Ö~9j9Å­kQŽ{ö~C`wÇäܹ]E;JNNÿ@wsï¶Iá*fÔ” vO}“KðŒc¤qr•ÛVId4ljÒ$®`Û~U­’»ø€ÏãPÎc„õ‹¡™ª©ëž›%Kìë˸_ˆâe«&§þÜiþÛ&¾I!qZû­XVB‡TòŽE¼Ã’"â…i‘Õ‘¾¡H'$é 0÷@Ø|—ÎU8Ôç^(A²ÑˆÎètÈÝqÈ¢÷æ“Ì«+EÙu‡´sÓûÿôöo;{d96F¾˜°¾ÿ+¥O<.U’ñ¹4]¥’¾Ì\n‚d„B-\èTIwsÓNv¦ŒVAãµ=ç!uæ·Ý—1Üy´]iÛ¬¥SRTèÙÄvúd/‰œ²Òéz®–cW*þN°Lïè¿üÖ¾k¤D•¤¶Î(†Í¬n©àM†µ0‚«hN¿.Ó5©TK5j0žD£Ýé„OõwYø§ÖÂNª¤ âR—–€ñH)d«ÂI©¦’^-)™x×K–úÕ7Q"ÁpÖýÒÀ|ž]4áR.RwŠ0pvÁnšë˜™›ÆÐ/½9 ­LÃÖ: ¢Bv¾ìXþŒƒBàœœ+aSºvâ+­õŒ]CGW"¡2¥ÊX½d #™§Á^€à¼0ΟqЧöèBƒ›Y]%q§æŽ`Úõª úü¥"÷K!?„K!HW©qE—x/zFÈŸUýVž Çv©iÒÓå@SÌ5˜$DqTl‰ØJªÆ9Þßp,Ô`Ñ‹®Œù&UY#a¸Úl6‡¸ 8P–¨ˆox~Ó@Cꇴæ Ú¨à!L¹åŽ˜Ê&““!| ÛøIÄèR+œš”&u¶/84œº(YWÀ ô](v:³“ÆÉê7„C·Á6°$v€Àüjï§&Iʵ°ç,±*)pG‰®&!üÇýú- mzûÊÈIdïd£)¼Dàò‚8Â{\É䛸ý™ŽsTû1ÿ¹ð!•ªÍçMdD÷JñºSxxÛ;£²¡ ¯a·;óT:™ðJ\<2Þøªûz ”•~„c³RìŸ È¦}½L¨‰…Ĩ —¨Ÿ’dÍ ”Õ7Mïá0…ºGßj¥ÛÒNwQ¥ÿYJ„{éà·M"ˆ^ö Y}9>*7º… _@†'w»íj-¢üùüð™Êö¿šƒ¶ãAÝžz/6Ô°ÛLØÍ‚h À¨:Ðú6i ‰ ’L´ã„ âÛ³M“†WëþÈNö8 {VÆ~4æ*Ú¥ºÿÕýr{µ(Ûlרëú(ZNœ‚Ù!J¿åaš²Õíø‚uZTuÙ#ö#4:œàðmGø)ghf-טLóåd_F"g,I©À‘ñUB\ãplW7S _0éV\•9.Œ~dm(GÈ&èÙP×*†Î <\9ürʯ*'$1ÄŸÝ8#Õ”ëØ2NN¾iÍÝrÀ(æL7Ä£õˆðWQà’Ó¨è7‡Z êX6‹¬²ˆ^GÊ4…á$ϤHAWçRp8ÍörB Ù4¾U5ΚÙÑe¬–¬ <ûZÄ&Á4Њømœ#Qg›P® r™À>^Èv(Õõ4ç$H깎˜Í—+¸_ÄF܉ÏÈþªi²­|±ƒNþrL~‹ìLÉË*òŽ-qí ½26m¤h·Èe¡ëŒP‚ËþòЫŒ½–WÑ»R~î« YˆŒmÛØ—àg+ƒ¸Éø©xP´-ŽwÊ™Š‰Ð„ajo|ç…tGýEzóB¾V×ògÂõÝ¢x4{+JûÞ .°!Ê¡Û3üUríFu_P “$pjÄníóÏ„w"´z^ ¥Šø§Á»e_ ß‹‹Lºg'­Æ4º•3½¬ëÄŠFêfŽª Ótu xTÖCš¯;µ•ˆî~îÔ ý‚FÕ{i&CÑׄJ' ”±Ø©è‚BØÆî›_ÚNÈ:ûH‚¢»ùF8+–Fuï·HVg‹4ñGS/T3‡•-‘¨Q1¤m¡3j¶uL*ˆ!µ–ˈ]RZïþ(‰£c º…¯F*Âk¢z 18:UÃyšîÕÆ¸(Ü…púž ðô­sÌÙm(Mx/+´Ô­ØNMalV—)oPˆ)øºž£ÝQCà7ݱ ñÍôL¢³?WaiœÅ-ÊDÆ­­‰¯¼LÊñe°‹mÖÔE‘´³‰ôR ›Ê68…\ŸCö:¡tFg6 u“øÌËŒˆÔž_ŸãiÏÉŸw„²YWgOÞm’”UN8r*Y>­×DëÀànO¤ƒ¢ŽA›Ê. åu ¥re4œP!½AG”‰¯£ÿ Iq"#ʱA*ðÒЈÍ.)1‰Ž/ÝöᆪÉnœiF"õœ }³Ê´ËÜkò稸ÍfÿÜï8*¥»£&p`GWêfÿ! ¿Bë\§àsq¼KÎØWçìÓØKå(Uã/[ÜrìOA¥Ø…ÍP—±Ê?¿íu™’4óÔ¡ ó>t#ß ›Ÿ‘­tó•†4Q…"Í$Û -AĨ8ï/Ù E^.5=2¯úÙwë»g™ý:ÇèÖ¤K6%‚½m0Áøþ|Ÿ¿ÑK34ðw›–H°A»½7kÜÝ¥Š¹‘îÖ‡ ÑšM€é~]ξîfØ_kð|Ф$ã]í½ûþìÙkŸèΕP‡N CÇ@w™‹º`Û.áK6Ù5S¹½ ˜2C÷{IÃTg`ó|§Ã}"f!U›¥:ëßÖY(o›*TÇubnO…Ð)„k™GñûçƒguHœâ¹¯ã7WxcxŽúéÏ‘r_›»wÇÇø’MrâÇÈè'+6ãÂG2é€~ý@¤¥“Lqi\£¸¹ÀpËr¡1’Á×™¾à6 úÔ**­ðK> ~Þä86†SÕÆˆAÝžµ ½RwÎYÛiä6‡Ò­Ïº¥Ûí•.aÑ+‚.+e;›N›:©-ÎåwæÓæ`5‰ã4h:S#ô];èd³® ÄS å+вQ»N 8ç©{•ÎÆ;“/³ù=u/Ó>„ ‚¬Ð$$ê@m•ÓÍà«fHÕh¨`:‡æw«aNX7µëŠYIR‘–¸uM*5ªÊ!®ž Òî¦oˆðé+¾‡°øõûS‘èlŠŽ{²Ûz R8B÷LOâLЦù¬+?¡mWZX)Zá€ç{ Ò0"/œ1W, \ YeD¦¹dãÒ%¬¸Ê¿’q¯ *@¾{#¼ ìTãÞ4µÉ»¦+%éë oÎ"lš›uWÍs î®a½h¦2m%­KQ´ ÍŠÙÙ&h\ø#H-:çéÚo§tò’6šœµ-“á6©Lˆ¸ÕüÇàËœÉ*’ÉLsû"dA~Ž;7›ðât ~‘õu·\ìtdnjB#*`NÇ>‘@ý:gš°H9ÓɈxƦä’FБ&ªCÇñÔÛL\¤@ʾ~¿CÀ®õñ®'Á=/þ(D’4¯ª&5eU0—Ðæl%f'U¹ UD‘B¹Ë{š²ïÉe·%èªcQàFá¼K^Ä©ÿ;cP*ëT®SÚs¡Y‚l8t¶t%”¡œì‘•r“ š"AR™šZ'²naÀ¦%Ö7Ev£:“ ÷˱BnÌåßSè›bz«ÐÔ¿ôcânPL“sJM”ÿäÊÐIÇ%3˜º£ƒ²)´•’”mìó$¿ÒO £Øa 9«€ç'`L ÓDÜgF#´ í¥²‰4êv3]Õ<’à"¹NÉ)œÓtçŒ>E“ýnge Ú1×äiÌP© ôot„OèO³ð+zp‡?`ÓèRµ}†ƒÚ95Ý-B8Ý#eG2zªãÍYêìÑkµW…Rl„ƒ62ÑŽÄ}{¿AT‚s¥·ÿ×:‘À ¨Ñ¥ þ2f›lizB^ã6“Vªi³²B ê:±µÞN¦¤f®7äöÐw¤×&¸i¯®Y¶ÊX”ñWðô5c Hf2Gy"´yu^œÀ>;‚~tLq@8jp4ÏëÎfòÐ5Šn2`¥¯B%²ò·ùfEè£~öÆ?Ä/´Ö{-!õâSˆ8lT¤( ¸™\˜ ÂËô›dÈ“Ós `•±Î¼ÔÒà4tª¬ê ÐsK µó®îsHC’RÂ#Š{®¦Á”•^ ]VSõ^šÕÄCõ¿»»Íàp-Pµf] k"nºN„©çDW\ÊóÎÇþ&Ë=û'2§IÎA ¾H!îEžxÈë—½€õT–ºË&Ž8.רCMˆ`Ò\SBJqïãØ¬ýÅSö;5‚û…ðPt”"Y§@ê¯Õd¯Û©ê0§lðWE6rrTt²Ê¹g´gÜ’qëW*«› ¬Û÷ZÚ-59ðuž·¢h¡ìÅ/XÍò‚tQ<Í8¶â S†òEÕX‹CL;í‰ö+Ø0‡lñª Œ¿êŸ·KF£/Êg[ÇÜéw`2ä™÷¿k¹fËjŸ·mA;A¨¹·Y©s‡HÒDk×S×û×<:U‰#%ÇjМiÝ/×Ô˜¼éeÙÜcb“¶ˆÊdû ¢ç TQ´â¿z nªÃ¶Õý½éÅ^b)!ãÆÅM„’àtºIi¤]â=”xA¼”1‹*m²CŠ>)R”«Ã£ª~ —K,5ýÝ©_FuÂ<¿J5ñ•æ9Ùã2ÞkôÕÏ #­5ùr¶ŠÒ8‚—Z”ãï"8¨sLJ?Í$ ›2è¦ÜY±CÂU0@xI¶wg,?þ¢WR°«ÊÀ§†3µ Š]úÞJ„e“9ɈK=Ôá3—:¼ÜÎA¯ð n¨öûUÙñU àL@¼fûS´Ä.íj Ôðv4ǯj•Ýüu.““ÈU†žô˜2ä«á&½îþ+„iÒkÈ#“ð¢Éü·HƒB®ÕšâI¡þIí!-a9Ü_ëù/ßö ¯Ž3ÁK®þqÆÌ©ì^âÆ3ƒ‘̸#wdTűRÎÀ‰0'@„ODÁ:þ¿ðF)kCJÏ yž VÈ%Þ|3¡sÝV¹ì´I÷újìr—6èÁÖÞ‘l—¿´´°QæT#ˆQ¹¢jSÃ&1 hªŒâ~»"‚R(Þ•1U!£ÿxæÏ€ÝŸêêô°ºBÑ\–­ñßÀ³|Ôp{™&†³É¸Y,u`d¼†—Är½º‰‹ú ËÍ6ÆWVוÊ.ý3 ¹ gjtX٠©@³òí7Wè¾ ¢¨HŸÎÑÈÜ¶ÍØ!2ÞÎ^gs&òxÈ;l²_´’DÓ:sìh ëþ¢ÓŸPeü10-0íöï¨6§1ÃiSœîÙ©I…,òvDiвÕ¬s‰U'é—A£ÎÖ‘çíœrTÛàn:34 seè ŒsyŽÂØ3‡[aóî¿3·LF1ópivØ!x$Ø»ŒG«ýPTéÎzw¨d ;"r—6sjà.hHâ’`_ÝEè~’ M…ì&)êçÖ¯‰®3ÿStÓ9â«áry¸_06©ñ3'zݲWM$W*ÎÉÀP>k×9a TÎ~£N9õK¨îìW窛Qhy–2rJ@ª†s@Ο[GýJ0¦À‡N²(5K%ɽeªŒ`d>D…ÓM˜&§OׄžçA_™w™d¼Ù$CôDé¼½¿]@ኄ¹„B¹þÑHaHõÂ)‚""DXÁ‹EÅ‹èŽB¡n§gŽPq½¿Š^•#U²¨Û€§Ó Pëã®5d#ò’1+„9ιsnÓi*$½8a h´‘×Éz»é®±…dRXg¨k±¯Ó™S—àmcÔï»|‡ ‘2‚+ë­ 2"NÞa‹tl¾ã‚.Ĭüã»~ÀPÔâ’ˆZ]8µÀ3§òö œ@~ΥܪüM¤ES–p¥TNŠÔi€DÁÌ´Æê7ÔГ¦<7CSR·zÄð:£ì-W£85@ ÕÑÜfuJ}/‡€I·5¼Û«~‡~9!Šæ £ê;ÜÞªmÒ9|Úè&ÔgL= W6C×Çü£àR'#)N]†FòlEh¯Q×—ÁR™Ñ ÝjUSs÷yjrg˜Ý ¬‡è XÑÀ’d f/.pD¯8·í™q²§Ÿg“º÷/Á}pCÅÜ/"ààåS%y~‘ýulÕ×;;ý+Í—ÍÙsú)1¢S&›RÚ„tt¿ç’C¹—Züó/ü)uXKr¸6]û)"ÙmFCHvT¶º³ÛLñØêÁçpà¶Ýþ!²B% û•9oa»©g¥ÓC¿8à?ײ›,©Ø#¦°®Í• ¢üs/º ßMº`¹ûç‹þ†J‚&­GÀE˜ºà6aÀp=Õ˜¦ vÕL‡%Ðáïß6œ^ûsâ`¯¾Ù‘á÷'½ê²T£~“Sx¡ÞÔ!Sç½ÛYìgÛFáM ² jWÂäëpž¾d •®K‰³u‘h :Ê÷OŸõ‹6ŒéR‹«–ûs\ht’å|™“™` ‰9 (1)J ²£%™ýTs¼p„«Ÿ£—–…%2óí=êP<Ô]4Õ+Ã3ëÁýqt¦^­œ:þ•óRŽÆA(^$d u˜Îo…ÇNê8È–îÜ7²ÇŠq³ÀYÞ¬yŠ$%E`4~×Ï4"StL»q©¡p¨>_ξ“¹]∷Ï$ÖãFö´K~¢5uú¨Ñu ö4&ôŠî—©†01ÆdL—õrŽ/cLÎv“1¦0œ[â(u¾§nè‰LëBÓ]ðŽäÁVqàÎ~½*Ûp„J\éÕùVˆO _⪜RÔŽ°7n“Ñn_&ζ@ˆ€C•‘Rg£>öE­IÑÌÒ±ÃÍEš¨nßiÆ!]¿Ó:gð9tå8T§j€3¹©½‚¡¿ÕÇât)_Å”Ùîxøís“°k · ˆƒ&¡'v÷We›Š\ÊIP¾»©WËEÏTP¬š,_IÝN÷ôª9² zËf²dZש´‚Q«ŒJ™jÜÙv+ø¦£±t.0e"‡yÓèÒuý'ÌúÑAcN½z,¥ IDATÓȶaã¤òá3bȲ§liºðÊ S E;Kåœ I=2ŽZ‚›(¯]Q¼`SJi¬Ö»g@;Ò/Á)a¸Ù%±yÎCDä$.$¨žºà¤ì‘V/séZYÿŸ¿þ8’.3œÈ^id;Qªº ÎwÊ,§ »2°ÝçnT5…MªÐHµ”LöI©fÒ=VTç׆ʬío€1*89á w·àŹ@<).QoÌHó™jŒŒ8L§)æ Ám»îñŠk€(5l—#±/ÕDȵ¹mR¬”1œ÷É™’EŬ‘ñ‚3D¦M‘Ä ±Ó|ä`?6c²Ô¹lÆ si3'4éUïWç{H/Öµü‘Æù¾0Cªó¥D¨HbÛîáïãÐNäÛ:¿cä¨ Û Ø0Øn㘩3U lóhã+­i/¦‰Š<\âé”õ;FŠ4!åã½¥{ßxlÄJºÌÚÞº,¥ ˜¦£°JÍÍåÏxõ+{I•êiw77³íS@àž^üˆmžt BdÆnsnw™F-ÝóLì— äi2ÔžÓ_0ILù^ Ëî å£Ìªd)å·0‚ÖÑÓ9£ít““¬OŠG¡‚Å ½m`·Ñ˜ÎÚ¶[¹k°SFV -‘ §b†¡®ˆ­ÁžÎ[—Õ8¨Ž[–¹’ÏÐ3Y1× i·ÄšÊìKs²)ëfì·~aò3$!+Ól‚—Òw“$«¾ è{žÿP–¬-l¤¾p+‰KË“{‰ÎwÄ®›Ì—w°ð”µEìUþ÷w æµ_¡e¨£A:.gLe›SÓ–;OHcHÀóŠÒØ•H.,gNÐÒŒH»ë7¸¨œzw‚–¼b1,h³Ü»3­á =*e¬÷—® Œ.>*bGzæØå6€þ5v3^à’ßL°»š¹vä" þ÷ !I.î´±5@|›å45”2/b÷%.hW#upd#5dÈ›àNqfDã%Û\·çÓ™wÇÑ”:_…nvá×î|)f´‹K-î@Sj{Á5ÐÙë Ù}ç4Nyµ¹ sðî$ÉVÄËr¥ÔEΤ 0~1ÏeJ¹ü`åð'È+cn®R”šÅ¥Žß…_¾j‚j‚âÒØHàe·CuÛ]Cp ´ƒ\žkÉÆ(w¶ãªx©i0 õØØ=cŽ\pc°Ü †Ñ¬3ÉŽ\r.¨L¬s›`NÙ¥)ÈÜ8=r ª!| @@4xœl†“D©àÖÙû‰3a z*vZºY¿ÐÍW\¤Æ…ñRdpŠŽv)w$!ê@¤ÈøˆaÎÁÉwÞf†tªé«õ¨ÃÅÍæÀNM¥´F¯2Y7p¹ö°Lý %ÛqG]« 'Á§K3/ §»çdaŽxÏ á™ÎÈO*[™f%–tM‘ç„6Un¨ØK$KÓ]rÇèôÑfzаõug9?ƒøÜVûåŒ`!Âïþ,ãb+¯YÒ×!SÑ܆ú•Ò¡¾‚©"´ 0ÉÒÝ(Yu++¿¥!¦ß’Ášß6zëªYSI‘’f#5Â×Íü{×A`¬†ÀÒ5ªngºË^¹ tbØÓW(‡‹8ÑûêPtOHÊu´®Œ{8•Ö6I¨²IZÖU2 x>:©d’`a*þ‡ EtBÇÆÉR…­ºßGè46ŠÐÓ¯µºÕ8X Î#bÇ(H.ÉIw<…òT#ÐF¨Š ;\ÊɘHc#åTPS-Ê0O”ÑŽÑV}úoüê–¯T—RÎÖál¹›3{_!ÍÐÓD— ª* |Y¦Ü¨}nÁÿ– i˜l6-ñ}Þí_ôJzÛMî"eàÜ Ï}¶ê&òÃîeÞÀINÔÜmôSª‹O÷Úi†"5ÇKÏÅ„¼$ ñ—2 5ôùà,‘€ž NÛ󯨯ÝlôB‘­n¦÷»fý„…tSמlJÌ^$ Ý»gÌuñ«— ¢:_‘±C@hE‡~&üÉ]omæÏ8 îC‰á¤—Æ™ÿ$õ§[Ø‘+VÐ3ß© ÓÆFh¾mêÜÉ…rµ\ÇV†ÁP”¼®qhoiÔîÀ†= ÓÓùWÍŽ×ij8I)ízgº¬^ÝGO¢„SPÁ+ èÔùýZ»izÁ™ÝvÛdç"°£ÖcBx^:^ãggs¶wé_D@ø‰f£”ø¤–†QÕj”@„‚dœÌRuÙuhO*µ0VSTÿŠ ­D±åüw‚+:Æxc•C"YÁ¶vª¨œéX èÃ4þGg6N—èÎuÏ¿šþHw:u¤2b7½ãÚ åè\„”öMâI¯Fù¦É‘x€Ô¹h“ÂrüU€»Þ„å-üe siª :óôP»ÝÑ -a87²™Ñ<³r1tI¾ø&+ h  Ý"Œ½p£¬à ¥ç¶ôâÐð*Êp2’æœå‹úµ3DPjÓßàho¸6Ù ê‹!í'rQ•„¾ HÖ4ý¥PiG讌=ŸlÛ¥ÑR)oþË.ý cC3¤ &¼! ¥‘&­WTÆŽ‘~E£t†žØ2'ÃÎÇÆ²ësxÁ’å )$*?+t…†ˆ;£9 §\‚=ÝhP(åsv'pí‚ü+Ê@ÄsHàå²@v]çz9•Í^M¶Ö o|•ìÄ`ŸCÜG*¥NKsÕ—{;%ÿYŸ_èYmw›ÐE¾Ò➘O*O»…x&VÁò“VÆ?\X’Áî„ëHgE¿ùÚp§öÆÉÖæÂ}pÏ/eýÜL]ÎZ]NQ<¿ÒR ʪÊÉ\FβA±œä€¢Âjré•!ÎXÛ[Wb£qî“~ĵé\õäü‹ øköµS]¹µIæRQr,d‚ƒ”F¤¿qþ)‚ÿnø¦Ú,­‡;uƒB8ïì*ãWëèÈvvÝæŠþ–:$2VbÍT_ Õ¯¯ÐŠ×—d|3¡;JéÜ㯻£l.i.Ý "~ÞðSw{ ÁÇ%)œ’±/û½…õ)/µµŽÖƒú»=ß?ÖüwŒà |n·#ãfÂS½S•:hÓßôž]à±e ÜÒÜ*NƒnlìBH“ vkÍ”W`2ò9Эr” ¹#ç›~'-1l¦ &'«z9çK£'µL´m2ðΦÐ$óòÍ4ðÿœPK)RÝ”ˆ è´¶c¤QFq„;Ì‚_F—FÎ[f¶²{Jµúj6xba#5\.ºhU†¨ºwœ+"_Ýeð›õ qWË4‚ éP«»O*¥¢QS8"'ÈT¼ö]HÐÂ-ê5ÙL×V…8O!‚Œ]/œFi#fétÇV¨RáKþçnwwì_ÉUVÕÿ÷h(›±Ÿñœ +uø6ÙÉÜÜÃZæz^Öã¥#Nóù´ëßiÚ›~.=sÓzOò›ÄÈÑf*ÕÌFÎx Ö½»„ýlj.º>3‡¬qú®KÏņëÅxòôÝ.:·=“J‰ó²¯.ªùŠõnsöò±m¬ep¾i¼Löàóõ3 Í ¡G)dH £›%¸î.mï•HFEð—µÝ^Þmf؃›cÇeMê[4£#ç5‚ub—¹~ÒQÆúoÙð(%÷ë™ì.£§¨CRDYób9ÝÇn· †ËF7šÛoujþÚóÊf¹v×Íü)òp-y«±y•éKÔäw\PÏ]7–4œ½Ùqj’/ÅuJ8Õ8r¡Ü6 ØÔuµ»¯ïÛ’6¹Î±S?sTϨótÇ:]] lN‹jÀt²×NäÅá%Hó›ºï¡ŽñÒç¡„|(ä.G¹š{òÒ©n˜ï±c¸,¸ÏÎùÚr¡”¾~¼î4 .Lº´ùÏÉÂ"˜2!¥8%†jê,Nh”®›úÕ¨RÆ;]h#@Šd·Á¡â¬ðRÈ2‡lp †è8Ôºµüyn°7©Û©š55¤Ýx5ž[Ù[r§ºkS§U£©'ŠB-¶"\¡ÒÕ©»XÆpɯ•ø›Ë´Bç>õ/QŸuA lÔî'²À43CG [-¶ª­ÐlàU”ëtj»<)2b§Éce)„¿Áïî^„K೩£N³Ó̘æw¾±SŽý aš;©#$Áj‚ïÞ(‘ªÎþM¶Dϳ¢¸¦KˆMqƆ3øè$ t&î„îtRg«àÝ­{»Mj¾þy‹"Pûב½¡€iœÂ]Óa¼.ìÅ_¾ÜXzAþyrU·¹-º”ž*[¾’Ñ(zâî½ÉßéöNe•%2Ùmæfd®úÜ ¯3Èêl9S3”ºv3±9«.4úÑú €6ΊÐeœën¿ÀnrbSãÝ þŠ^)KË%VWœj£@yPÁG‚÷- CÄ—‘á =¸°–ªÙ©šÓp˜Æ!vH|È7NlenôKÖº‚•>Ê8wÓ8àUuìŠbDÌä7ªI˹;Šì…–a>SUêîàÆåþåÝ$ÁôD–Ë3¢î uÄ“¤ïö¬ÓÄ…d¥®³îQ—2ÙA±‚2ùÊKpšCðñU>R|m 6d‚ ”çÑŠ™û}ŠÝC^‹w£³æ›nEýZ CJH(_÷Â0`DdÈuÐÓtÁ]«(œiµ·!™ŒgÆ”9Ôá—ù½.J¡ÈªBPM¡M­ÎÝpp'èpÑ32òœb}_"/µp–×yøN“¢C»È4Iž”2äÆNÒ@]ƒ‚-¹ž¿!É`—²É"rÈRb·áCÁ.krÊW‰Ýα(Zã+KÚc’ümÊ芹VùŠ|Ê´;øÝɆ¿ ÑÇØÞWÚ D' Ü)Âå?ý …»¥5%ÄòJ½0Ef¨´ ®¥†ˆY SX¾Db©]¼Lð„° ”ãeSŽPÁqÅ#nƒß{TôJV$c|Ùp¡f•iÄ<]ˆYô‹²‚›q^»ý§‹0ã]è^•ƒr2ÇÙe$hŠ‹8Q*á !Ô%+íœá¥¬7éWP¨Ü "Ë8³ež •ÑBë·ªçOÁí5!ë£ 6YóÂ(‘Œ§Y¿¢(V´ÍSPë¢CÓ™UA¬u~¦!UPü–mOAxŠÃ9M£A£»51»(GT€\€Ëž•‘½BUºèœdŸôçO²¾³ÀÎåQ%• ¦·É¢$%ªDòšTkÛiýÊY]Ö™ê¼OÖ%xžì¦+»½YwÂÐÙ"—ïTçqê“r4Xrð±SI䣭³õ.$ÑáÞ8:çÞ5ûü­q?'àPÆ–@iÑdF*“«£QúŠ*)l|1´ùÎ5 ®0‰ãt^>9d-/aRŠ(l¬”Ä)=wÇ1ó L™o‚`å…P2Ý×_9$)ÞçÔ(Tƒ89·¿Âáýy_§„‘ª R¤°†ÄIVhå/tmR5S¹/°!Fx¥ÐÁ›ð¬¥Ê!²K:2re7ì Ó¯IŠzóÕÀuJ-ò’*G¸CÛ8Þ Y Ã9Mç  §³©¸\'<‚„]Cwdâ!¸()ûQ$Ë ŠJ8W®{²‘¢”ðœGØí¡š 8Õ.ìž0‰œjÿ% çîÔ# œ-eÎrAeA9dS[{“Ñš¨“}©¼ˆyŽ:ŠÔ¨òM™Ï ø¬\^"õì™Xüm1’IÜÉ•tHÒ«oWllÛQ¿ Ï™1¿”J|{ AÉ¥¬¥È]&-ƒë(§²/dÖUœÀg(ۻх!âuÉuõíE{€ÿgmÆÇnGKTÆMàIm3Re·dä[Rtçùj„DQ¢¾¨«g«Ÿs#qš*©  ûÎJ<ŠfBÛ;5eÛ/h~i=X"ΙªÁ1’òàE’<‡ ›ÊöæánMµÞ©—èò‹L[÷Y„Yö:[ 0ž‚0‚h9ïD ã6ÿ%þ?â1@SoaÿIyjnPæ2T$ õ ™¯Š€©SRãT‘Ä«Î59²ï¨„)éya8ØEgÝÉÀ§ zLªµ&ëHÇ€ží³UÍõ«ìòZ÷½kê|Á¹R‹;ædÒÛžÅ4ª© ÂÓ©t8s®ÈØ•%3<žõþñ¿@7êw‰žÉaéô‹¯]¤$Óê"é?k.r2cUǹÔ+IdJæî¯5ÒÍ &E-Bh“`6™E焦 f£.HK¬Çv>Ù)¾fãì²™WÁý„’u&²ßaÓv…*iÓÉ+ãç8z®/¢è¥£ŠIʨï¼ÍóìDü€y‘!] @¦&ÝšÎÆ‘ƒUbã À:úʈ~žrXúd—=±;”öøÅü²ÓyO¥¯k¸ÄGë’ÆtèZŠŒëÂ4¡G¢È¹*ãÎ%xþ¥‰Õi v‚YRïÆªIö÷²WÉ Â^þ|‘«9ÓUÛ¾R>T{WðÛ¦ +cF„_N+ýë=~ƒCxQ“ _ÉW¾¸¼\UÊÉt2fyHËlÞ…´çµbÖUWèîéú:;³Þò\Ø6ÙÕ”*Ö¿P´“áFôtÕÛÀ‰!púþΑº0mF\©ùmgôöåUgå+èØ”uδ£ïˆ}®¨t`n‚)WÅp „ ’ãªËŸñÿ'šÔ&ŽgׇȂ£"»I±Ø/gÝ•1«è)„¯DZÄ'AF¸‰–t—ÑS‡*4"Dð1ÏÙÓL'á{¹góÂFG U}›,ñ{N†ë>÷šÉ¾hªLxö¯ü$S_R™h™s&§±ìn`ºý«áÎ’yù­ÜüT»wõS^XÄ—‘ûŸæšýçÏÿŒËáh7ޏ1ÞÑ()̓ìŸitÇ¡uQŽŽû{ ûÆâB(qâ¼èrûRçi#4¤²K5NtÍŠ‰Á¹ôŽb(j4”aZ Åñæè·¹¶‘:´ÈÏö|¨€}º‡eÚ’¯ó8³ ©ÕÀFôe‹ÉÙ¾/V‰!A]¶Á Øês·ò… ]%4´©Q9z¼‘&†÷›jŸ)²uç€OÜ „wÀ%óØdL“\³TD(—Á«¦´®”Ü…—Ù FÂ4&S6O³šåLè…B´®ktöÐYׄ÷×+sO¿îC7eqE2¼ž˜k@î@ qK N ·‡ê¢)Åë~C·‰nTN™å<›Ô!»¬|Ó¤èÎño¨ÁQ0Ó¦6®ÈTk£‚H_ô@¨‹õb’å«”ñ’€eƒþ â›]Šcm~Î…´sFŽ$÷´ÚVìÖnLâ6“ yU¦$zö—3íHW¼ão òéÅï‹`}ÏU£é[’!u^>ïÊïá!+Å:F\5»¨®û‹ööF DeܨSŸ²¢‡Â©NP³|"›²Fu_üJÈ]\÷M†DæÊ'(ñE3Ò„j)TE¡‹i|ó„ì©wÙ–[r±&[Ä(@r°æÊåß Ÿèº=|¡¥0õ{Es¶®ÈtWÛòàï°à$ë$¥…zh¸6óèNt13“Ù˜‰p¤ÈÎÜè^] -ÝKX¾{2zõ¢6çžë/”‰üŒ4þŒš”˜Æìþ† P4Ï#|— ðÏo•ïTH #úâl•ÈDÉ>lœ±²9h’ ª 7gÚL)¤kñ\J˽áÖ(àHpð*àíOäñÈH]2Š­x…óHÄ17W½€Ù”.6i¦ŠáR’ž %ÿº™› ˆ2¼’N°Æ_ïºiP#ßÑA…Û5 #G]FNd¹·¬tê»^ :t¢á…b£w¡öˆr…8œ…´Âïu ¶ù:EB¬ã•Ï [+¥³ÕµÙìGN€ó±ÓøJ†®ñl2cU¤jR×L©DF$~_¨ßusÒþ¼½"]ùZÿ©yæ:†æ8’Íq´&&èùU×n5k©öΠ쨢™¦qË?ŠûuGÑÄŠ*ÝŽáÑQ9¥ZyÑ™§?G¡‰¶O±ÏÍèÎçë‘Çzx–ÜòöÔËBï-åùPl¤ÿR¼vzR§rÅ¢³åy8LelfDßvÍòÕœq6YÅÆ©(œÌî:]ß›=Pe‰W­ê£ÝÓ6šuíŒæ‹QÆ)Ë·3ˆ¥³U™á^Ø¢•ŠW¢@pøJÓ Û$%G¬û¦±ók´/áÏzE24¡&/©íUY¬ÒôBµÓ^A%áߣ—Ftÿâ¨n]’õ8Q{g4œZ0Ýd2"¨L.˳gÖÿ"ó:RmhŒÉÞw™x†æ¯pP‡ÙZšV Í”¶$R2Ò©‰Ë .‘…‘{ŸF6¿¹S]Vw±Ï¿jÛ—´áNñ§lËÉ‘#ÜD‚5CØ7e1‹cæw4ÖFyW¨Gš°”]²o·–5ՆĄ®–8•]\;¥Ö˜Ã÷Sã¥aH'ö— Ì~Ô9Nac$iãÝ¥)i2RSPüHÖÑF”@k0ÒN6C÷®t$4_tÒn6ꈺºþ–´[¯IÿãZr)‘Ätð:ëï®åÒ6‘`u*çl‰ßz Hþõ>?¸éİNñW¡™Ü8îpÌLÕ;TìçI7ÄE%`§X~‚ýW£XŠ%Ïá×ï.–’p¾\¬.ýy)=ôâ¢õ@²4ÒU®ÖÞ=»ÝìóWBá¬ÕL°®S_6BÑ_õÔTSWRªÐÏ® QÎpÅI,¸(ë¤)P~>A´6v¹K¤T”bí”c€Ô †ˆ4¶ðT.Œ&å¾w6uL»SÛ¹@Ê[¸ÐéÛxÁCÞíM‚CZ†“¸òï«2Šj<ÝB¥dÚ9µË^PŽq2Þºù6b/™±³ÇÔþ\¹àÉY©ã9R+¥Ö~,Mz'ΔK9Lœ óíz<·+UnX,é6!þ‘?÷·„ÛàH,&4XŽ@G#¤ºl/”¢›ìÙ͎vUNˆæ«CJ‘ ¨ ƒ‚çj½R3»®¦ŽK1Âåƒ32½Ó«æÍ«ƒ1&¬Æsi{œ u~®£×Ð5Õa¿E¢ 26ªwî~’I, mE›EƇ·|3¤Up÷?&\ØA>]—øËìè+3Ëà3²¾ú3 ™fê¯Ýý ¡Î¶‡yŠ^§Cý·ú,úh¢5 7;ì¦9è%×4Uòr|•Ê­v¥;G{šL¡ÚêWf´¿IE8‡pëb§ Ã͆É"g¼;ÏœPË &VÎË휮²‡WžÂ"Kú{ºýh·IÍ‘†¤ŽŠ4'½ÐmV‹“…«ý""ž`^É&+´€DÕ®sšÆ_‰N²†Äª@Ní±sÙ\Wfë Ô:—¹Î®ržÿbN1V¾øEh‚ œ7y!’¶*€ÛN3OX: IDAT¯t{«Î|ÖŸ46Wh:éËw*ØŒWn“¤®yÓåh{.Ýé›®s*›Ð½¼Äì\Áh‡I=š85³¼1N]CÔìÀÆ› F.— ¹nfvjVzù½ª!ìÂ?~ɯchÐ:…x¸ïítÝÿW6ƒˆ)eÌê™S£jÐ\Ük{¾:r·\Ú¿WÁm7µ25oÏ–Ò ˜Ð‰|ð}[ …öÏÿ´0fçð9ƒ‚AHE-¶"&!P©Ë ¯œžÓ•JÎ4<^·Ô ê“ê[Ü&4¢¾ØÁtnã›kHcã6°‹&pö3㦑A3¢ŽxƒÒRÑå9›oWwu˧jÚ“ü¸jJt¢jˆÛdô4ƒu81&VBrG$ ýEaÝÙkºE€ Ú …¼ªSæpi‰°{©U&ÜNgÆßi†!õn·›z„•¹>.„"¨$Ò¨tí»Nè Ö‡ öÝÑ7PÆ« œÖ¤b±)ñŦž™-dªê±W;âî§ùޱ´W$8žT87e‡)q ý4[DÀ™ÀÙNÑ+‚ ƒ½äCQ?S•µ"ø¯»ûƒÐuÆt£:CâÖù·™\·É.},.j\#b°SÎimé’º¡FÄÒ0’Êà(8¿–F1†o*`¨ÉxV™ß§‹6£`S¿]Ï«æ{)Ìðc:-õM„¦õ⤦ò˜R ¥wã® ³›€2Àþ*ßBÎ5ijWïwEí(ŠæÍ–’êo8¼ó;fTÐȽÐßW,h¤F<©Wm£ÆÎÁøo×H:Aäê Cd§ó:5—N‘¾û^á}ÉçŸ"Óí”È\qªÍ}™‚·GQœ.èq›8Ýie·”ÍsÑ´¯@lbÍ$<)#NÊv[$ìªñä8œë^§ÈÚTæsQÒ)Q BM„`î_ßø ]w'°&mt£0JÄ®¶£"Zšé)„`{°§FWÎbB-:ÊNÒi» ¶&&87Ó%ÁFgú{'¥¬gê:Á¡¹Ð_ ‘{ï4•Ò3Ôõ'Lâ>jlŒVóˆo‰µÝPº.ó¥3ê›3¦4çÿÖdØF-ñÂé˜Æâ'„Ãî”v7g© ®ê×D“jœ–ÀÉÒR‹,Å= ׬¸4 ¸N—05ª~¨ zε>ÂPGs‰ˆÜ-5ŠÓz‘&ËKµAO.ˆË„}9k‡ †¬Œ™™-cVÜ?ïH‚ÿæÚ4‡ÀÇ)o‘Æ[¥ôçîí„h( jÿ¶%é.ûŸt¶w¯³—d"í…è[ü7@èBA;A']„ý¢Ácš=.D1"ò­³6Â4ÞGšª#W°KW¸Éé'ÙšÓL3]RL8 p„—"S"õÊ£h*Ø.q¶õN¢+0Ù—%­Ž÷•UÊ“*éÕXO¤3¯¦¯¦À’(vnö¶Óa lGßHà¯î­CæDJª|IÕ7ÿ+1ü=8TŽž½úgÂ$µ½T)²"ÃHaÄNª›‡ÞuŽ­›&¤<ÛKA‘Š2Óa‘sµ¶šçª1qI"°u'àÙø†mSqg?ÜÆð‰çÄÕ‰ (V»Æ¿G†j³Sš{¨ÕRìy×,tÓò7yÉÕw¿Ì”ÈôHÄ»&8µÞ_ÐÞ~WÍ_„Çà5 Þ]ðWë" ͽ/Û)s™È~œ»˜âûÔ3éüø¤¨Î )MºÔ· ­²oÛ^–\ܵ­vÐGPÎík™&¬¦uw×Ñ™ÒùÇ¿ÿš¹:£ép;ÜÆÔ€Ö`¬.nÇA8]´Swé&ð*óð¼ñ›ø–t¡ÒYWÁ5bt~ž"h/×~bOÜŽÖbò/ ;9rhÄ…|œ,wc´§ž ¥—áÞФLª°Û>"ʬX‹o%\ú§jŽ[4+†dåb '?úéSñŽä+ 'c„“áØ”¼qרr©]RÞ„Ò‰~_9ŸÎ’kÓࢌ¢#õJ8ëé»lf¯7\ê{^eݪ¿Ac7˜UB,œœ‰dÊ™²{†¢§Þ8…qÁÀ’œ¹Ï$ç †5qm¢B·ì«WÚ`Z¾8ë„ý»ç|¾ûÏÈjø£½!Qß²ü3‚ÍÐÂn-˜ŠÑÃyÉþKÀ‹4z鯘J9j?‰(‰#Š"‹{ÑhH8û¯‚ “ýêåH#ƒ¼dˆ_mÆ7QI, ãWÂCæ{Eš¦ŸAû¶”èêÛ²¦§mFJ“ %.èÄàðÕ=¿L…@U0è”*vÍ¿[¤‰Yÿ ˆ~¡ù¬ö¬ fúóß_g¤_‡¢ãݨd©±Ž Í&æ *S=Åå|áükâ(Lª8 ¶(‹{è7Ž0b®ãÑ‹»é QPiŠŒb Ov •/¦VTV>¡Û>ƒ‚ßÝ)*[rq¾ÓqJwÛ{•ÁFt7ÁªëÙ`EÛ¼å¨ÐüîÈ¡JzÔ¢zß×Ið¿îØïQFªà2G&ò®Šb=¬ k)² ê@;Ç•1—.¦ŸÃR]È_‡Œ4ß]g–#<-y‡T-ºwœ÷¤¨G©»¬” ¤³;„QMMÆtët©À Õô ¨Êr UõFžzƒÕbYoêlݾ¢ ©t2^”‚sØ×ŠyJkD@´þ±>YUÿÏÃÌ{šÕ GŸ¡ùÖ7‹M¨|7åõÔ…"'©ÃϤϣ„'uÿï¦ýl¯×QÝWeCZàJ< Ôþ¶|ÿn½d7ªãåq«Ò¿Â¦_£,]6XÆ:wå‘Ó}ÝÖ¿hi££|¾À¡ žS’Ê®1ìΟ vÝÌáËh@’6<íjl¶BOlGÆ_5]óâÞ~Ý· 6§e®é>+[©îÕ+g¯îüTzrÙï2æé ‡˜Îù®©.h‰ºÃS¢2ú›_ìšü¦Æ%a¨.ºº¼[¶&:N¨9¥Ï%ê~&ŸÿGàò{eШKevä¿«Æǘl¡ëͤĖ~xêLÞžmÆÒÉ„û¦. ­sþº¤ t;ö¶øKkï"k¯žSCÐyªÁpMÈUBHSÁ¹D QÉ7‡¸¾`ftÖ˜fñJ UÝ= dÜø*®_½ßì#UȦJvˆ%ý#htñgr¦Ú)ØÑ‰ ñÂé®ÁD+,9g €tA+ƒêÀ…T,ãů.ü«®oò.4ÒÞv…«os£}²nÔ†/[•”ƒ":Þá\¶àÝöʉ9ßJ¿C±9¾è:ŸÖ¾þîõ`ŃóJ” (Ù~ë´÷ÛÑ3÷.¿:Gô®8+W;¹ùÙĦÒÞ­Á9þ¶Ÿ­FÌĪóz£Ã]ñŽÙm›±v³¥/ e·–Ê l %’®ÜmðäªòÑê„ç×a—ˉqf38%뗸̅^Õž ,ºÍT¦ü²Ÿaº¯¤ÿâÛ•¾Ç¤ß@Â%ÐQ“Q@Çvtâ:Ó£Ï+Ã~¤y'.Âg_wk æR Tí©!Ûo¥~›F@›™ÁdW7$!êPw?;@Jt8b–ôÜÊ4.ÁDÔ²Þ¸Ûëxôýu35šŽÜj€ìZÓíêÜ‘xUvé„^¦€k ûÇ`ÕtÀõWŠç+™[R²t¤{_ŠA‘€® -Ý$h®Û6ðªæXõØ8]'1„±&-'Øš(Þ#fúðöÌþÌM¥#ÎB27Š>¼4–*[UÙëæ\ÃóÑM`¯Óø³Ê0ä1]²•yM» ±m$\§<ÑqØì\ô@ÈŠ™‘íË8½l’sû~\EÕÙ­~¾#?K¿£KЍlõVÓ^õçLHÐÅFt’”ûˆRö'C7®ndȉ.±>ò<ÿ SS™èu¼ƒÎæ}ºhÃFR3Däú½Œ3‰X\›Y”®ÁoFDË›†*ºï_{¦Ê]䊠 ùaHနàŒOÛÌc ù­ —Úk’ÙOë²å›W™°²9£"cž‚pF7jŠÊ™9¤_!‚L5šás’(d£[ËK)\¶¿ >Å€¦ƒëdi¾,mS)…è„é L3ÒªQ¡›}ùKÅ@qôÁŠZ(.n¨åá|}½‡£ÊKøN„ùíÅó³™4pŒ Ѷ¿î§B–¦àƒ¨XªçuåÈZÚµ R—‹àâ:úFU› HÖ`ò[Ž¢à„:÷Û©©’pJ[Mö}l  µ‰e\>JP4=+ƒ±X%¸tÄh+¡š ưx §¨:â}†²1®ærÊ'ŠâôÅhÝô~Só—;w~ 6&¤í¼öånè­¦A|8tç®”c0Á÷üù~Šªu‹r|Ù²¿/ÆYCdÞ]ÂVÂöN{ôUzPëúøS?CeŠ;Tö;çLŒtüB34)­êî÷·‹!"· ±ÏäÈi¿Ã‹æ7ÚD2œ‰.»Žé‹ÁÈa'çt™h辑pýo"wr¾Rí.ÐÍÅZ.}rsq®rpÌ› R9&B^’ÏL}*(p¾™Âó…Ì º"xÎð85œ G»Ëùš’Œ^²8‚M‰‘³ì R}yز—?tŒª›ø’-8ôÚ8¤‚ ¸ÍG$`*ñNꢜâò&¼ìäû^IàºçÆ10)¢ð4þ~çœÈ’z" hIÆJ)D7úª9© éùÈÁÙ«LõUG~>°3Ž˜À¦{t-]•°/‘+×é©3ï6±Ò¢Ÿ›.!êJ… §IrýÄ_HÙÖÃ…™„nòÑÆ”*”‘$|sØ*xøuÔÏ©øâ’w—{Õ~GìÔ×Èï¹Y]=XWufþ/gîI Ó%uØ×ŠŽ•‹nÅ$A­æÿ/ E2® ’C~¥C_¨¯ªÒΓ¬˜NÄÅ·œ¾7›`àl;~ +˜2™\‹ Š˜Uª.upÕ>"®zÙð«Äªóç¦.àé"(å §lsš Fš4]ú6‚“Zc†$ ÉÅ9xu†){c—ÍmáÒÐ9ºnn°®ä‚ÚïZÚ͉ç¾âÆy™_§Îì |N?„ºŽì*¸ºS¤çm’aWè^ÅžÛ #"ÿG8Ü+Ý­% DW#=ÁStGä)Ë0 úyÑxç°%R ÉËÜ®¢¶²Gw´pz¡2¾f) œ€wÌEw¾ýî»]a'Òt–±S„+p®Õ¼ó‹òdã!Æ{wÔ½ÊÐÓt$³ÓfØÒÛFÌp>É®S §y¸O”ÝtÒpô*H2zEÖIb]‘¿&›:Ï œ43ÐnË8\¬©»žŠÌlkáÝÏP †›ou;™;(õ:—íðYG¼ë‰­¡ÈEÖºD 7u…_©º¨CÒåLùd0æ¹Í¾:¢^4Æ·IÑt__åœM;åÂ'k“CR6Ù¯r!AVA¬³T ÂÝùRkàôþèªJm‘̈2æNÅ2/Ó—£pé7sàš]î:rÁº£)7¼{€¾v-Ö6Í D‚ Å…ý¢‡drrªtmîq84.%mþùÁ†ÊÖ¨£IãÞªæ>’5¹ÎÉužŽ Ù[ʲGøàï™ÎØë> W¤fùh­;—Ë3ì”>&þµ>®¼ðžók I‚Hô ½y×Àr‚ЦŒß¡íšØˆ(I‡FH"ü‚Ñ1ÁšwõÓF¥ 0HЇÿ¦¢ý‚jçç<¯×Q(Š,žõ ]ó—ýè20Jd”‹=¬ÐrØ ux1-@ôB\a!§ñ•Œœ¹eìz‘òñùV£¦[¨¾-cîŠ`eEgàÀÔpGÐ×9¨,›ÖŸœh§‹Ðƒ—ƒJP½vÕñOË)ªË_ue+”‚¢ÓÌ÷Ķɔ¦¦uñÔ(“Z{ªÀVÿ_:¿ÝÚê&óv{i Oçç§qîU_q%k“b¿'a,7è+ãn“ÌÏeØìœœš ŠÅû$¸»—ækeç蟂ÂK‚¤úc¶=aN¹,~Ž|i)½Ýäq…{” éÆ9UõLÂ4Ë¿«.c¬]1üÀŽ&Ówº$Sê;6ª…$kpË}´ºëNpúb¢… *3&J ØU5ÁÕ#[•¦-Û¬E¾Jwj%µ1%lcç.~ˆÒ8û´'Ž"\µxçßk§X~ÃnÉÊø˜›£ÑE³S§ÿæÛ:O5ѵ3sO´Ý©“¼, M¥q¶Ä?!Pn­6L{³Ôgg ¯zëSfô²Æï.Š‚ö’¡NgCÁòn–°QÒ;Di–iÏ)¡^‘©¡³#@»2ƒÆ€”M5o§ï̵›ô ÕòyJ|«KŒ/Z] ø?Ïù ª"‘,²ƒ~MëV;y‚kHOÁk²”îÒÓ±%'{&Êp›ìb$"KjfÖý5‰8MèD6ïvU¼S£ÓÍÃY&¨ÇFÜgÊt:GPM€ýê.uö@ÊK3^ ÙS‚{ì"tóȱ²§µ´?ÙØ}GAµ–{¹E©x˜ã¬ ê­"(I<ò¸Vã½þ…/rm¤Ruém™4ïMQ.qH„¦µ ¨ÈE]èXÔÔl¸mªÜÌ·N£`¯²VUËt È%ü2  ·™DóS&^ÆsI¶˜ÑCµ0ZŽÎÛÉ÷ïº(âߘ– €¢å!ˆ¥ŽïO´L|î÷'ü÷|t6C¬§Z§k*[‘ è?=¯:*Uð [.\Á[A• ³³AGÀLµþ¢áºÀw. é5XœÖczFgH.\åREÆï®Z“lpgzc´è3_;(•ÁLã:7ýû¥‡C•¤Hp›‹÷!: ¤¯`3*K¦œ:iõ ÊpmÌ#Áå9Q~‡¢BŒ~â‡hmùO¨‹ÑìÖ¡÷Œã†NªlרÌß+¸çRâ˜h!KdLé¸D÷¯nTÔî #m‚Ž-‰=q¡»šªQ*UGK£ãÖÿêox©8—ð>MwwÛxHµ7.óæêgw]áW†PÊ¡ú)\úlU Ql¬5Y'˜ýsT_Õ® }]uô¾îm{Ÿ~ÃA{AŒÒÕ´&Ï‹óPc&DK™^æF‚p 8—I•jÛ Ó_‘ðr¿€9àÜÐf+7ÂÏm˜w’DiË“²Ñ¢¦å›îœmz À˜Nw¼k#”¡¯G¶ðË©éƒéž» C×[@Ô]͉nº©{Eµ¼E ʺõ!÷mêÀ'²Í¹8óJ4éÿ³žö&«úŠhÕÈÈvì®@¦ ¬+£`ó™³xW÷@ç´U ÜDñ_Yhw‘_Õ¤§lˆÁ”ùÍS³VwG_+üQ&EçÌMçÈ!£tÚîwvõ ²Ã©DõEÇ~)Ü ×$¼K[:øÐg阮“Õ;¬¥-s‚õqgbòU"û æ~.Úl¸SóßfÅ!€Ò ¿ ‘šÜ¥›Té_«C°ÑxŸ¸Ð»Šr¸—:†6ñ°oJ-JÈÊAB_¸¢}Á+ 2çœoÄ’sD;ÖÔOøå_èÜ“ž¢n¢Â½»Ôv9eõà.)ïŽå†@7bàœ}uˆƒ¥£¿Ò7SÒºm ZšýÒ‘+·?ÀQNê"¤ká¬[>¸¨Á˜F¹ÜK50 _¹Ü ÉßãœÆTÃpÎNð¬xÀUô¿u]¦Ò•*Þð„¨rc×h¹%5"g]©‚ª,ždhJK`j.}ÉÝAÎãå9ŠàmrÆ/l×ô³Sœã+Sf—4‘ ²àÏá>'x§ÿüÞÏÌ »t¢ýÍeš«hÃÓ”G¢`—úuÊ*R¢2„ 1Ρã&±4’.ö+CVÁçü·ˆ ;TcËÖGÓ${zíÕ™ŒÔµqY'S  “ØŽ[nœžfbDËmWÔãX„@ËB¬mAô’¢Z$ùtKh]ç=m>ü¢\êœgã·È¦âØB-j´OÊ.³¤ Ö§µÃ/ö¹F’:íIPÂ9lTª˜ÌÕ4®Ê!v³îäÀoÎ^7‚”FÖ¾qZ™Xu$1àºAlë:f9Ú ç “áVŽØi‚»"§´DBQN'›’‹Íy¦Yӈ獵¨“²ŸzÑ®z¤œÜCâHÂBƒÿüú0ÍÙŒs¨ P]²Š»{› 㢢Ó(9WùÓiÜ©£ŸMӀрKu o!º)8!5 ©º1ÅݺP GÌ,lJiO!SÔp¹TµD»c t ü'Øx…–9]ïn€±Q¬Øú©ÄA50ªRÒfäˆCý­l¼+oLý –pOô%Ò2§¬ùÏü0wœ°)_ÌÝçÅ~ƒSž$µ!ÇYäàUÙaK¿ºI·¸"٘ƖhûÒDJ:©6¸c(S 7Ô ´ êß§z°Û—CC²²eLT{9Ý—K­[_6±â}cá”°¨&ÎxôíDÕP}ÿÅ铬¾‚“hMß@¦õHsá?xHT¥ê–¯9¦L‚@í— ®!#QÎd˽N¡ºõÈ€mˆ8^ª„‡_=‡ì?É:h6”GƒA½ ¿þ NÓ9JeSŸuÇe¯t§ï:&wm§`.!ª‘ÎX»±é­ÁVv£ÒÓž8ûªÎXšûtñK´ô’˜E“ˆÒQÃö×ÏX¨šŒ¶{]…ÁQ¸˜Dï„*UÁpîÁîšXÈÌôæ`‘±‡§ûtéf”Âá6'¾(%}S&þjo•ž;© W¼©}od¢/$A • Aå fy]ÏÐTÕƒ{œ¦Í£A]×ÝNèšäcbKìPÚi?7ç¹»;שg:J •ðÇ¥Å?9HÚ„·‰–º:Šb¶zÁêçBì›ÌŸ¨~Mb/t|Ìurôßè‚Ox 7Á!RŽw‹tÐ"'ptà?:UpQ} ‘ ’àm˯°ÉniÝ\Ñýs ï@ÔÚ.—3ª|e«TÙw-~¦‚À•ã‹&8Ù h]MÙ¾Kpôuž&–QÕ˜* ‰f)®ØCTñÊQéË:ôK¦“M„}„ÉtÃ+H’ÂY3!Ì–$CÍrw™Ä‹óEË—³Ø:^WpkÉn‚Û Õ"(“Ì\Ëú?:׎ýr‚wê$ãø%lúÔ´»ÊÕ»~é&t´ÜD:a0Õ}·»î  }PêßWS¶»ˆˆF¨ý"OI³ÌŒ’âZ¦5mu0•¡Ü8¦l.Pg„_5:NÆ6…ÃWÏ%4»y4¨ Ï3iÔ$B7×Ú`˜Æ§†óî|/%®Ê¸³+ư?S©êÄäeºßox*žîû•q¯³¿à¶™= IDAT“ò©“´‘IR®ƒCVÔ¾%P‰Mò0õ„b2¥€Z$˜.‘cØ ub ‘ ^!h×7ßs£YGÝŒÂ>Äwüß`!ëÙ0¥¾½À—ʹˆ ž§:馇æ"ÖÒñ…SÇNçÊ'{¢ìÕQŸÊIŽÂâö~Oc”Ú² ô¢9Kôn¼’Ú˜"§sàhc¤°}ä¨u/Õ˜šã·ˆ©biTº2Ýý’AÖÏÜà/xâE7x‹\bÃ6BSI§•}[í6=˜´Ç£9ÁûÊò˜™Æ` +×ëq¡)³9µ¢‚iÕ·ñ¢àÞRÎzgJätš+nŠM4À›l˜ >¯´Oȳ;‰ C.[«ÚgE-½MÐ6(ùó™ÉYè‚{*½®îŽCbBrÑûÅÜÝ?Á—®så•i /3þÓ¼¿âè~ ç•€t6NMt±'ÝnwÍ+a™¼:áðõ4Kqk>t³»\ž“ š"kS]în<1ÚÊf¹Ê‚SF?IC¿"ù!öƒ¨°’uVûFTNk±¯%Ð4gÕ€éý§6X9׉+fÛ@Üݹbitm ͲÃDZ0êj'¸±¾ÿ·€òº¨¤„Áá)Ì£H%ÔaHÝußt5ÖS¶ o2ƒ©–iÉ¥¡Ú 0/zƒž*ß ‡‰Éñ‘ vëdjiž{’9u†9A¶mú ±¶¤iÓ½Çö®#ÌÚ6v{›*AP¿­3$*zj.Ÿ>¿ÿv(É]„N%¬¤™t£ÕÑMx©¦ÜK/Çz±Ch†:¦éç(²é¤WS  8™OuÒDWZá”Lß–`]r€ž6„º@š>š"„L‰"+nðVpωŠß5k‰˜Ë4Š¥Îuº“óŸšî^À°!ɆµW‰UŽ£ß\%HÝï÷©b. l)¥Ê‰]ðz—R v[¢7’ w¥gmÓ±‰¿ÐsªCrÃ:Gº¯§è“©3˜’ƒ8ãß „Sææ:‰k00a¤vH×|íR™:ÍzkØ×°Z ¨“)Mi‚l×Ñ{ô:ªÆA HJ)UÅ ÊCÆO¿g³þSO‡»Fô»IïUÂ$­ÌïTÓî~´¥û!]rmËz͇2ÉT_K8Ä~å,ø åªiFs2Ô[˜Ôq“8ŒRTŽÄ™Ÿv.[Áï ý:{óbÍ»®ê )Ê3eŠ)"q';ŸÀÜÎå\+iª3C`ŠŒ¬û}g”ÓE9ˆ£xa,KF 7¬†tž[;»÷I}«Ji°‘Ð~tpƒ¦%Øç…&1[›ÙÌ!£±!õ'2Be¼¶œóJ”¤«)¾VpŠ`jw—&¸"M#G gQæf¶Ýä)?û%Øû‚̈0K=8GS0ìvèn¥ ®®õçél©½½³Š.7ƒ•¶kªÞõ•*(9“$«ß !Óº“$eÚŠé~Fðßå¹!thË;IšZó`Ÿ¦Ÿ¿Ðs¬{f8õç ~¨û,¥9ÐÝF›š6çM<á›1® ÖP§ØɺґME¢ñâpq$LÌéA¨ÅŸ½”̃›àž¹wŠê¤6©ËJx­Ï:ˆ)ªRª ªÊÓ}δ•óÛ€Š0ä—ó…ÊKOãÐSo ±Õ$ ©¸3 :ùxºƒª ׿%p@Žór~O5×eÜà:5q°2gFsøh´®ÆA¿ž—û×Rè5:½ •ÅmD›T`L0È$A¡x”î\9ãn2d"‘z‰ž8¶lk°Õ>ÅÐHš—/ëÒÙQŠúLß\"ár4b %¨6!±¸Ë„ÈЋÅ9ûǯŸˆæ_KsˆÀÈ<ºÛìS1+êÑȘÂ^Z”®mŠKˆLŠp¯F“ H7hKAÁaüÞæru»K| !Ð`À Ðqž*뢥žc¹äÛ”r! uù¤Å¡àwB|娬®©˜ò85 ì žyš,ºóô“à“#;?ÙÎ ÍÈJËniQ²áñ߀«¥(t …£k4”³V% Zv ²›ID_hã“2’› G¾ýO8½ ¡Û6øL⋹îM`ûe Uä6 Mzò)‡Š¸ûžntó«.¼åÎP® ^FHçL¨QÝf‚óÌ)ˆWünóC#¾E–¨^D7fî*c†@ˆ¯Ù”•VÈäïˆ׆²XÙ_ÄLú‹¥£šµžˆg¶Î!dárj¤¦Š{[9N·nÍ7»â;äNð?}žë¼·R§NæÐg"3\ðÈ@kpLŠ?ƒªØ©l¬D&êîé”i‘>Š8œ)ɤF”ž_‚:ªæ^WžvôGìš-Ó\‡<œaå”ÕÙRwØßˆU×ÃDPÓÍzÓäºîøÅnÌDu™OÍK²g$x¾2„3ïï÷ÊéuÑâ$•¹å Ÿ¼)ZVk½9äÒrà¾Ý·ð•urÆÓ £­,4-mm#‰óHðœŒ7¤,ªþ›Ëo›²£‚ßÿŠnuZó !!Îh  bÈÄ©LñÁT÷¦iuÓ{0Q*“ 8S’T(¢¤4Övòmüã¿þ&´K4Ø"’Ð9ÙªÉqƒê¨÷"Z".âª|äIºø78^J﫲¯Í̪jйP(’ƒÝAëSPCeJi0²S™± (^»Ïú2d]б*óÜM¤KXVqKÐye×A’ú°­nœÔd;jq®)”Më¶µÿÖÝÔy·#4sIÈ~§@X¶"USðF(ÇÉ5¾®Ð” ýý,«s¥'Û»ÿ‘Å4îdNôŒïö”H¿ jˆ^D„¯0»-›}MÂ)Á£ë»PUÝßû ¢gËê`ñMc én좜)«p"¬ï¯:´/³¤›‹éÂïqQ,[±¥èÍs§nômäN×îÉ«’ÂÖi:΃öT| F]kÄ]Cð¨Cn¢Cãíd¢mPôÈ—Nun§€“ò“lkßW´’ TaÕ•| P7ãîµ¶4èS³ðÖ&Ò=žX‰ÀÐæÙÊfÔÁ†8wíë;34Ë}~©*뽤rþ‡þ ι¢¯™nÖä_lªrz¯êÑn$¼¡lÜÌáSb¡ëz+"7ŠÞ0Õa<W·“]õXtþE³!u—638•y^Ðuc«Iœ AÊò/Üšµ¹ã^êŽR=y嬶ç«ËhUIxD«û¤f×RÍ–MiÈ „2Ѥ_s”dæÅÁt5ÄÍlå:%#YW:ÂÕü‚~UA•—ŸI/mdŠ#lH¿É‘t¦è˱8WÄ›±».WJ‚¤ 4 &µÆ¯÷¹Ö­§`KõѼ‚¿#ØtK';ÝÛg½TÈÑÙPDUµ8®=;-t éwA¬šž"öƒ”8H‡3Úúgò" ¢0BR".4{.s±² ²±ë|©Åy•AÄ`”^"4t-äR{'—]Q”nŠ8ã-ZãP"«;½­áOßXbxÙׄ4EBrí§lz”“£ç8†Lt“»ç%EPpA“&éÏgvj¨iž)J[=ù±k’¦™m¯Cšûñ¯À ˜2¢¯™¨¼¥D*¦:ê5[΂ìÞíâSd*¡³×ª"k+á”6ódüQÕ¶y‰ÈÒ A¡Rd$JÕ¾_ Ä©]žíT¹Ó¹üæîÜ^ú’&{õ5Â8Õ£/6ÚÑ£pF]eίo*$¹èRÇÍPЖ(Ò¸Wˆå ºó‰Õt´¡¿ÐwÔ.KTli›¹÷/g3s! QãAs¸vµÒnôkCZ½WlÚVÃŬÅwnë–ݺ\Æ:)Iaut„Rû2Œ¯”æÖɲÝôÓ$!` è–&e¼k‘‰—ÈäÉtÖFÉ2„-¬¸x9‰Kg9cֳɨ#~ ‚v`›¶åœŸpVy¸ÈÎ%Úddm]c0Ò¯…Q*æùë è“9Îær¿rHFhœ¯£œÓóœ’@s]ÖrUä#è•ÊŽ·¶‘R°6‘z¥õËÐw½”6î‰"§QçÈ*3îU—¤KJ”35fX±“Ÿv¨²9+”­Ø’/ÇßíµÓ 8­eŠ„ó{û[Ò©aGAßĵBTó†"B¹Bi³ÜëTÓq›ÙêpÀ'd‚BðÓø¤å¾ººl•v{+þ€mŦó~⊨é!èŽÓA<ÕK š–† !àH- fçcÛWA‚0%XtEFUP— ª2©£^CUÖ¢£®Óï“©‚iúÚS•Câç Wâ+%Ôõ‰l3(JÌ29D—b—d*Jm›‰NÝ×j†ö’å«:w ¡£aMÄD­î®'¾ R‡Ÿ à´äܽ"(™Ê¯P2Ö—0ˆNã+H…ü›õðí;}(Ñ8ÞŽvV%ŽÃ(‘¥Çb\„`Ø„y÷_޲DΙ¶¡{¦PŽöùÓ¿þN²C'[Ý(JÑF…ÑT­…@C›¬‚<§Àf ShT‰,]J.¤Ö]Ð ©àB½NÁÕ( ºŽÎ™2©!ðI”Ä28)p®+z¶ÆŠŠϩɕ&Žð—£JG bC¢¤œ[glZó—AÝ×™!]@ºt˜:ø 8ïKÐN}Õ¿¦^p+Oóš ¢®ºt©3ÎãwNªM¹È²)¡+‰³/Ó0È \2w»I‚È9ÚRÒÜ4VÒÌmêÄÞÀÑSVé@‹§›0 ÁÌe‚ƒ& Î9™éÏ`ôæ]cÞKtcBG/k¼Ê¹Ê Ow6¡_ú "\r°ˆï¦ÁŠyÔѵ•”7á«„óüÇï°Éu<„WÉ×éð9ïâ~‡bË¢Æ~§¨V)Tmš•ºl‚%+Xw+1Ϊ»všÕ-pvȸ[ŠàÄm~£™ñ4Õ⬭ûgáßwí†SÒ)±7äw-¡©`T•<¦¹¿Ž\yÂ÷w“B殿ÒxWB÷2ã¯F7Á.ÝÈÒçzüŒ&MCD\e»› ñËA’…ßdá“¡¿l&ÉH§ÆIê<¬ªDf£ LW…NuŒ§áà/V‡¬wQAo„Ö¨˜ŒêÕ`*dGŸN0NÈ|ºîv:í@³ò®)‹Ü ·“¼k*ûÊÈHÉ͵Íjr¢Bk9P»­‚îŽR¾C@^ÌĉŒ¾i|c£¿ÎØÔïæÚ®ËTFKR÷3Œ‹C­èFStaÿܨ‚†.‚Ñ»¼»ìs=iËö×Á;Wò% DزÜ([•²1œL»ÛYÛ‚—‡P¨:YAŽÜ&R •NN˜òW8†˜Â쓼6ºeÈÎ' ¼š z 6  ºi“ „ŽDñ…1~+m,~^Â{ÀF~¡.ª$° æI‰ËWð¯&À äAev·Î¶sæþ\+M(¨ò*mz•¦C™C©æŸ/e’O«Jµp3§?Í[“ ã¤îÄ‹’Ê„"æ¾RÒÚŒ[u7µö„6®n%7ÁÉÅ™UgYéØ+tÏ%­Re©Š7Ü Ô>* _…68H%+"<Û³Sæ»§±¬<uÁ F·¯ï*4Ä­øÁ·L{*ƒÈ˜éu7A1ÎT&Ž\e-4kºvÓ¾hm!Ü®ŒF¾³Ì³Ý!)¯JY ‘S5ãmFIE|TÙð…£ŸÎêv²É¹wtj…"-48¢Îõ27õé(;ò2Èsl⫞ˆ®AÜa…Í|ÍP®)…‘"²¨—Œ”°¢uŒen3:E G6¢Ĉ¦@œšÿô­¯½;†jªíOèCgì(¥¶¥Á¨{6ˆ³¦˜LF8¥†-Ò¤‚ˆ ÞŒè]SÁ¦IÆ5¸þ³\8MrXk=¤Q©ÑT&¤=QÄajºTAôÖ7M¾6¢g¥™ú‹à^Œ×ZÄ<'±ïb¥¥€i>y‚„œÎÏ‚—B]Ü4×2˜áºˆL76Ú9 ÕH59sGG;Í3B2:U^äWÕþ»ü/žéŽ‘^²þ)™ }Zá E4Q^ .e£¢\„ÖYÙÎ-Zªö³ëA{Á?ò…RMöRW¼›4SZíys{º(òkaÜË»iþèÄ*öüàà;W™‹P˜*zánc·Æz2š_Q½KÏêÀeJRv ú"ÑÏŒ&š¨V Ùö†*ÚÉP•(Ë«gºë‘êäœqJi®4.³÷ªÁ˜¾—,qr\ZxL’ÑUJ Fǽ_ñl·É-‘ǰ^_AVg/Ó ¦À R)YÒE J5Mfð7Úô_AÌÔØç6ϨƒãDÄ[C] xÚ¾Ó2œbÄŽVAç%gÌS'ôÙn‰b£èç@‡]`” g ÙˆšrêªÔdF1‚rehšóWA–¼åƒû<9¸ImóŽ’gÇ ¤R 7ê¼oFþ?I„ÐøffÖDåÊáÓûph„ž~UsÞrÔ_%P»¬º›ÁÈu\™Òà;w”oëT`¡d<‰S- S! ‘Fô3·$»WãBTÀæ *TÁ€ÊÝÊþøöPIDAT,m£ƒ¾åŸïB^¥î‡tD““òÑ+¨ÚI°òÑÏŸá®Ö†‡!Ï#Áå—|\¹gd¨UUþ«mN.‚5uŠ ÒvÙtW±ê’©‘q¤@ÂK¯"XÒç|ã«.bQ«ïvY· …¦/ ?¼—$Ë$£x›ožÈvœ=WAÎ]ëÎü §Ú%'Ø»:ýKÄ­IvJæJì5%%£ú1ϳK¿NδrøNIü‘«ú‰ž“™ÿê HŽ!¸Ì½0SÿÁFPh2lnûÒô¨J_ïré ëKÖ¹†À…—Úa T«»t›‰ämö’8CÂŽI4Ê_¡=!î*A¨ã Áø‹ÑFbká$Û0•@»ÒâFn]‘uuûœ† "N“E);çì1¹C5dç$gbQ­²’_Yÿ¿Áh-èât¡º5ŸÿBÂS9°‹2VçØI°£.£ó­ÊèwéÊ€”i'úe’Œ!˜M`L¯4Ã3üÿ’\Ý©.Ãχϥ™Ü«&7ÇqtšöÛ{Üiø3äÌS[ÔÕ)ärk·:jÛ¯²ag¥ï£í:[EѲmMØQ/¿¨¿H¬ÇŸ@QjÇkìt“ª›Óä >3†¬Œ:¹¦ço‘4ß@{~ó”j8»ŒÕNwIõ”l9<”CRãŠ5dI䩆ÀéÏ;¢„Á܉'Ò@85Ý]õI>˜fWA²iÝ&5ËÉö:=Dlë€÷‰`ÓõuÂÿ ÿóêh4‰¨“¥¦€P#fÎì \ÙmâK5.÷ÈÌÕUâ9tùj¤qÊ IæEx*h9Ã-Elžÿ•õÒ=Øžj¼ |3éa˜Øݲ•“™*tÌÍ'vq‚¢» ãª@ZËu¨ålÖè‚z’à…–; ÿPðçZÝû““Ÿ†ÿFþTÜt Ó̪`ìVšÅ]”õ¯(ÛUÌÚ^, Ó‘Å/ø*EÀqAO¦ -D†¹m’RMmõèÔ¬FJ+JM0¿]§7Jü·z˜‰ÒBJãžëˆY°G¡"[>âÔ‰,÷eäm£Úøªi7ƒiƒläÃ1!’Cu>kiǦoÊrú/Gÿ§³ÿoÇþçŸýéÏÇŸÿÁl;ÄKSå$RóS¦ŠÚÕ\ôö)ö522ærÊãòj&[9„élàçÉiNå¤M6tÅSœ ) ÿd”§à&ßàpœ3Ѳ§ëq ö ¢w—sí (mÎ’ƒt8hÎf ¨gÜnHݺ3B‘:RzÜ®9}_*äåôÕLÚ/5eüÄÙý?ÿ :ǸLè«ÖAœà¦­ 3×it™Q/+iRl…¸\É“d˜Ý·j^ê” fŠÏû’µt sTšÐèNçëÑÌ] JÑužFw#x7³Ê¢TO1Ï]e¹¿îÖF'dÃ(:uŸ×à¬/(Ï—sïDmܦBbG÷K„Ç)¡úM µŠ\Ì=Wªÿ-›*3þ/HŸ@þÿýwÿ»GàÏÀà÷àr€¿5ϪêP&ƒ™1³°)Õ?çb•€%¿.™ÊÞöªkÖ±E&oå_tð’ì'—†bº3N¦ì@NæÚɺ«”©qZSu×h dÃbùŠq.ÁRÊ«×@¾†O¡uˆ¾î†s =Gí£›‰9Q­¤”LD´ßïWóùüE{TÑ;æ"{´q·¦°“Û\!Äã©`×½B¾ïË8Žß4Už nó9¡–°““v•p "|ºPÏó¾ !î‡Ã!m·Û7Cç 5©3fUŽ#„ <ÏûVA¼Ê °"Ìš6ìŽÇã $q‰8—ÈqW„³*}_áÂL⦘N´a]„ŠÂg2™¸Jn*HsׄO”K`§™µý®JnïûÇñ¯¶ ÎW÷éY?múí`0–ËåétúP’ج Wæ#él_¿ßŒ¢hÕô¹­ÛÄŠ03KSûÌö¥iú4™Lš>w¯ÉšZW–ˆ(I’u†k"z7Œ°j%¯^M4k9­èn·[…aø¢ùM¾¨F$I²^,¯*¢:Ù£!ÊV…/‰@QôXATÚnò0CD$™YªnEúʳ6jÕIJÃܘµW¼DeIÕmT¶®pÅìbÏUö¡’Ñkî8+¢MFø4e“«Ò”¦éS§xz5Û/èp8üœÍfϦ›b{öòæ¦ion"¾‰~X—`®r©…èÆÓ.-ã*–KËÊëÜ‚8ø4xÙ²Å2ð²åÿ&Œ—- /[ž vâ_<3ÆeÈi^ÈIEND®B`‚fs-uae-2.2.3+dfsg/share/fs-uae/2x_1920_1080_bezel/0000755000175000017500000000000012162366653021172 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/share/fs-uae/2x_1920_1080_bezel/overlay.png0000644000175000017500000005416312162366653023372 0ustar glaubitzglaubitz‰PNG  IHDR€8èÓÁCsRGB®ÎébKGDÿÿÿ ½§“ pHYs  šœtIMEÜ ,QƒøstEXtCommentCreated with GIMPW IDATxÚìÝÍ’ë¸v&PÉÑOÔƒöÀýþö éìTåI‰$€´µÖà–RAyœ ñ Àóÿþׯ€÷n@`€$ÀIü/·Ža{íOÿý=ŸÏÙïré=àÏç³8÷3VÇgÿ~ñÀ|•ŸP¯îQ¿÷nߦ£º®÷¨{ñxü<ëôâ§ðsòÞ³ù:ø&?ãF?cH¥±¤¾`îulkd¦·6W«{6]ÏQm?ä·—,0=j¼uš¼žKèÌ7óuÄOÙ¬ÁïkÈ}]ß=é<Çœ«¿ ýmÙ÷+‹I=Wýþ—þ‡éví3€OÓ(­…ýëv1{ý|F¥\C­±üzë={>G²Ñt=¿ãY¯mŸ>‹×Ú~ŸÇŽŸe C×r€Ú=“˜[ÿqfÛ=ÙsÿF‡·G„Á?~ïunã¾v÷ÿ öÿ›sO×PùÚöÿG |‰é—ßK_ŽãO_íEë'‹æ“®ål?ãkïãlm-ìÏïâ¤±ØÆþ±Äç€kþ9wßÉ¿!uOÈ@ÌÇÿqu½µúÇ<ÐÌ븶Õõßÿóÿô¤À%þóÿüïÆAÑ÷aÌ¥ÖíÃÂÓº¥ñÔõúÎŒ¿).5 w †;ãê~ûiDZýÇo=O0mB8pµ?~–Ì.•XžéÛ»$ö{ýï—ëZ Š—ëX®§tþmJãá‚R8‡:"ä±ÏíÖ€¸÷¸ÖP·¹\“ñw_ÙžG™óOÊû?gÇþ”kÍÛ×Þ(»ßâ¥{¸\§pF³»³sb`]ëoû±{fÇîöÕfGñ4{–B8Îß±àCÝùÐåË à×íÃØù~Àµàuºüs)äí xççªÍþ§ŽqËJÏîïãóÂà£ò¡8[ €á¢?äW„½-ǵ´k­žhûaõ\B_àn^dž_Ç0ÿÉè&IïÏÌßx‹z?|ù1¢4Ïöµþ×s–Û˜µ­miçÒøo[ ü{Üq{ B¡::™ýõ­wõãbCùç£=ìæÏ—›ÔqüÂgk—Ö.ô'þ<žÅ…Ÿã'.ý}?ÖÐ笎—wž1ýð1 Û‚á¥1Ù×éÉõ`¸-~?×ï9Çì-¼4V/†20¬t cê]ïËå·,ã ô¼þþ ·íøâ ßBSÿ†¼qÞï Eü)LÕý›¥Î'ã¼Ä¬é²Ïþ¼Î~<Þ‚Ý—Ðõm´öùRº)^ …çïz¦ZžaÜ ƒë C‰˜aXy½?Ë\Û1=å——U~>Ëmh {ß~X;öŸÏ{‚Þx_ó¤úïj­<ÀY"âŸ1Ìçc>ø7é½ÏùG×nŒÒ Ž“å¢Ó%¥ç³…߃á¶Pxºßï4Ü­ç©?¡p-~¿–ÑapæsBm¶Ãc ÝønÙû·%~­w/µ¯¶WoûŒáÊŒÞÆÙ¼Ó²19‘ ¸ÒßqÍøw<óùœ,ã‹KD?Ïùwñ˜Nõý)<k1¼Î~NVŠž†Â¯ërûz®¿WÔ<Û7ÚXª÷ñ˜7[*Z` `¾¹“ÞUG¹³ª—³÷oO@ûöªcfðÞ™½›ƒÞÅã®ó'&soãß±ÒŸ ¸3žy>Ïx.Máy”fÿ¸•壟Qœ!üš—Öá×2c÷n ¥ë, `¾Ì§,]}Hð»ü¢1øí[ÎyzŸk¡oÏ{—ˆ—hö5äÁ/ó}ŸÏÇ3¿3€_–þGýNËýûáóu?áß÷_÷þN}ßë÷ùw)ê—’?+3«ïïÿûY˲ÏwùÕ™Ìwù·vwCËöí\ÛŸ··™Ñ|àÖð·xÖJø+®ô>ÿ&æc–Kï-T2-µ8qi¡\¡%+ïõé_ɲ´àc[û6•–€éïäÌÈì¼_×>ŠDgÛ ÏÃúÜ–%Ÿ—Ëø·\(6„À-¡ðÖóÿž¢é½—jŠ?rõvÞ/7Œ~`ØÕ9ÅAuÇØs7wüìß}á¯N¸RŒ OŸõ"•ãÊdÏ,àÑçJÀ|O×|y/^[¡cìì4÷Ìþݲï/ÀWØÏêÙ: xmÞïYak\ü+0>Í÷ñ}úõumnCßìßMµ›ý |”³€w®gp[›»Ãx7ÐD ›;¥±›Ö×–.Õ7föo4ÍþâÒÔÇ/ýìy¸ÒÛèå™KA?&åVgÇÂ{ó+Xû©¼gèmãêcè#¦¯ƒûп²Ÿ¾´Ã±³£ü8ѰÄi᯸R\ÇZ[zöî+²x؇ÓÊ8ø`8ìòOƒÛÕ¶µ„à*ѵÒäú{½g>äz 9ÃaÀpxg4zùçR›–fÐÖê¾ÇˆKgÿz®÷šüØ2 xm)é=K.µ ôcG›à{ €akGÖ™:÷[ˆÎ2šžbÌ% €¶=sêé œ…b³€£õä/¥ë¢n`òwÇ|-hÛ)ÇÌþÝWoûBÏ›fÿöÞi p‘ÕзëøÇ¶YÀ«õÆÖ–”¯2{®°íˆ ~í§Ë7áPìª{óy›¾á§Íþݲô³ð¸›iüúº{)è hŸ ï/¨¯»Çµ- GÓñ‡Õ_Ö]=âí[›ÿ-Ôfÿ6Yà |˜]³‚Ξ¶fûuÜû.õ¿5 À0üð–²-•–Þˆ•¾°<ÅwqˆÉ!›gÿÎfö®Ïþ}mk1 Ö·WŠ·ÿ<÷~+ß0 xK¨·0 xqrïÂ,àÇR[£üYûV„ïe¶“£€ážKbd] ³{Ÿ™¢ò[j)Bàb‘žZ'Çï™\9—aVø `rwÇz³#÷ÿm?oý[ZÑ|þå†e¬³gûΧ!?„¿À=ÄRb[ž|Ô,àb³z6ú柖Þo9jÄí’„“œN膶 ö7¯¥o[Zþyïìß¶½í ÜßÚôœ÷‚Ñ6vúòCuðB™Â©{/f{'Ým N #» Ãöÿ=²MçÍþu׋³——~Ö½WšÎò}{omðbegÏ{ª–;e`¸Ž˜Æ?¾þún}Øv¿ Q|ܘE¬Ð®Ófÿ®,ý_þnšð¸(ŒaN^•ßéû|WC×>M?öÝR‡gòàó>unhAìkzÛrÏÑ~~©/p{Ëipqd³¶ðlYè1MºìÞ|D“Fu=ƒö3h«gËwÊ/ÿ¼Ö²Ž½×öù}ÏuîÀ•~Ç4WgO6î }gõž¼ tå§rÝýŸí) ¬Ã'¹÷÷‡ÇA³€cÃ,àÕóEçû;oØÐr³Û€ÉÙÿË?ð;WqM«Žè ™ý;}­î$Þþ3{]~ëßΜüVmïž~Þs[vD–÷ †u`¥%4V—ÖØ¸üóífÿf›ý ÜF¼bNgýÞoðˆe ëcÕÇŒ‘[ €iøƒë/nWïÿ]ÿ8ÖïDÃìßh¾þWŠî·öÌþú{Kំ{EÒwqÜòÏÝÔ}b퀫EcÈ;-ݧßôÕAWƒ±…Šà‘õÆÆsÆû«;/ÿQzÌ™o‘Kíz_"Å£p¥·%•'ñþby˜ó1b]S½Ó2бpõÝõü´àð1wà•»õs;˜8¸þ­‹h¿cÕÙ¿óŸ£ù7pŽù¸e}¬óíu¬—~ÿðžcJûSí·,“¯þ‚¯üDs‡7fùçãgÿ®eÄ¡O®·6f+8 xÓet,ý òöÔ%#0Œïý•;¦‹}{ŒëðÆÎþµô3p/Qøßi‰åŸ;g×ÚQ=uì>˘;6®P#†³º¸ØöY±ó‹­õL«‰Îòí'ŠÚ­ë<ë÷€;hǬMÂi>_ÿ$™-ÓjJû÷¶zÿ880‚n× ÝpÿߨÃZŸ}¢ëéàBÑ9öÙTg¬žï—÷i”`æÀTþp~û_θ]Dz}ÿߨô;GÛþ¾Ž—Ef›þƴ𤢘Ÿ9 í8Q¼ŒgΗU®lü;Ý$øíÇXŸ0\³mÇŸN>ºï>ÀõKúîñbÙ 5`Hó¿±{ɃBG?±µKÙ2û7Vh®ð:VYÊz‡Ì^©£¥pL&ã´/S„<Àäê|/롎ÞÄ>ÆT3ðÒ÷Žè¸Þ#ƒÎÔ±ñïÚg c­Ñxèi—·ëäG¡ï¼Lé7É€á”Σõ³Þý[—ÞÖÉEí!dí1g¶òsÌ ÇÚë_ÄÒ”`€³½nW·¶âsv½›-ýÜ1-fØ2ÐÓ*Û–®7©ml[Î ç×<™\µüs[fÿŸª>¾yìøêráåe ¿Â7ÃkŸíÝéßTŠ³Û²uùçXyè)oôÛûÌp®î1͘Ï~>»Á2ЧžnS[–Zef1¼Ã'?`zšØÔ¤Ö-!¢éµ^¸Ÿ×±Ë–±ÎÉÁÅcc¾XàÀá%Îè«{DlÙC¢©U•R.€;‰Ú›õe 7 {FmÕÊyAËgÃ1½}S¹Ò’Ó{—«½ÜEtŸ ú>‹–"*€ëÄÆ±ÍîñÒ·£§tÿ5 ‹®qoKú€ÉÓùÞt‘ÿQÍŠåtKÞ˜í;±pDã^¯û϶÷ÉcÑÚg“vÎÚ Ï®4Û¾7^^ÿˆ—7ÇF>û}m™ò´ -ŸOÚÙwÁã†hïº_oØH˜DÀðéÏñI'Ù¸<µô¸íc•£f ?V*…Ï'få||ÙõÞ±ŒÎg„ñûÿV—޵ï£ÅêÛ³û¢Îó¾Æá½9y½¶üae vuAé£öŽÎò£îï-ÇíoòoORÏ 0léìnýG¿á$ÆÜ•Õ>¿º„t¥°åŸ€»©Ž[ΠĆºš—nhomÂÍgçˆa‰Né\¢Ò©Fgg»}ÿߦ#bߨœÝFñ n!jZªÇ×_÷T'ß³ðb‰®±îqçÊÀpäƒ@¸ˆY‡µ·tìÀç(-½þæž~þªÕ‹áX`øˆˆã:É3÷ÿ]þ´üm¹×ÙÈ‚aàJñ2ÐKƒž/%§-gÀwÛ¸|ú–ó÷!†Ïyº¸Õég&•™½Õ‹ñä|²Ž%K3…×–„Ž[^pG`rô«)׋ˆîòµÛд¿oÑêh|ËðyÚ÷޶b}'¯~^{ØÒ’|ã¹amj’CwðaÑ}Ä€§ŒX}{í[l–îªeèêÒÏ­Ë@oiW[á…Eªo|Ï C70Ì:ѽI4wXmÙ9½]ÔÑõŒk…ã6— °¬ks>-õ¾½^Ÿ]xߘ÷qcðÂbø‡>â©¡½Cí«#60ZžMºï‚žø\½cœÝã¬ã¹#–2Þ^…±^¸švtçÇtŽ÷ë*cÄÑ-ËxXî#öº[_úyÏRÏw¸þAõÄ'\-|&0|ÆEý‘#Jbûçí œ/ ½üiyùçXÛ4à*³¡ËX)3_úy9°pT&ÓD}²Í?cÌÑuýÀ= €áž"6{«¸ÿo­@Ë,_ÏÀ•Ú¶ŽmGoÜxÏÅDóUí½+ÀÙÀî〳öÿ­?Ÿ”¿ý °ü3pGÑ0й¾âóÊìàR=Ç,ô¯ø`€$ÀpgŸ¯í„±ñ³¥‚m3ƒKûÿú†p¥åY¿ë³'3}£ëLÝŸ½•;yÐ9 áÂm€¹EÇð)mí?UTꈓڱó‰bK%¡ï)MØ)v\ ƒãÄÆuTû±¿±gFò2£ÃÝÉ^ñ0Q­'*{QÄþVÆŽ¶-V‡?¼4kœùÛK—OÔUÅú¦Ä1h 5nüË‘‰‚éÞ†v0Q/0 ±coüZáôbbm–oë2Ï¥÷-ÿ ÜYß2ÐëCœ1ûh±üêm캔i ¢epyàpmDãýº€’ÃíÄmÎŸÕ Fùß €wýû¯ìýmçÙh-Ø…ñÀI€ùh{¿¹4]>¹ñ¨#¯è‚›¸ó˜ÙÚb½Þè8E\x_f~Ç?£óòû±ôãú±[ÎwÆ}¹´îé2Ö;ÎhZ2N ŸôP1¼Öé:$±ÖãmjU´”.-ýý÷²¼tebÌˇ±ñ=ã·qØÈª[ø`€$Àp±ž•$zWˆŽuHbådÍ+Ž”–ƒ^j×Âë÷C¢ñ¤'YÚVp6Ĺ2þ99¶e¼âøìlÖoû5ôÎ>rO „n(.;¸µŠh/]Úú"ZÏïëbÀÔÖ@\þ0ššˆGÇ)ö^Ι‡$!f&,ÐÐ}}ûiD³:OÿÍEëÕÔ –÷¸¡•½ËegôÆ—ò2³9F5bZ'Ãwn, ÀI€áq‹*fUÆÆY¶¯Ç­Næj™Õ™¾“¯·Eõ|çx¾œí¼²mïÒÌà(¿x¬~Ô:ÛsÚ†#f‰Æm*&ÀI€¡AÆ%ôç3q›wò]ý0ZJG¡ ß÷>ËêJˆ ƒª-ûþ6›NÆx#áh«ín¡ 0 ´ïÛGÑùþŽ*kÅ"«ˆ¦Šcs»cÌ}Øma¼26Ö=çZùd6ëwÃ¥ìºc*5³Æ$!†.ñA-ƒ®°÷›m+å÷ŽYq_þî`yÜòõU}<´éÆ]ë4®zç0@`€$À|­÷MåãmØW6θŒX{+–þ3)]u[¸Úxåêðg”‹O^Ä£¯îQ×V;ÅÈñì3~IaL™/&HB „˜I×oˆÆR½KXo¾_õ6Ζ}®/õ¼ºäÉì'kuw°;ßOxýý–¶Å¨ ºÍz €’$!HB ·ï×j‹óšØS0*í[ÜÏÂþÀ,Œ_‡<×?oø°»XߕĀ{pp#n`€$ÀI€’CEÄØr‡µ!Î9qÞˆAM²û/pw{Ç1WÇS£^öé†*/?¸ … 0@`€$ÀI€’C³[[loÇû±QmYLO{¯<Úˆòçñˆ—Ï£ýx€«Ç/ÿ|þŽÚFÏñµ“m. W¦crÐ?Å· ÒFyã5`€$ÀI€’$!HB „n$N9Çä,‹¯c÷5Dùœ«×³×1m'ÀÙ"Ë#¨íãªQÿÜÒœIÛ_?êã³Cnp+`€$ÀI€’$!HB „ 0@`€$ÀI€ùJo?yæ!EŽhM´–Žiùh«ào±¸üº†+}ö¡þ¼ˆÂû-§\÷†BÃÆùR`€$ÀI€’$!HB „ 0@`€$ÀI€’$!HB „ 0@`€$Àp°ˆ+NzL}Q}?:ªŒåÓÄü5À­ÄËðe,eF×g¼üïcVaéý×qú­3î ‡$!HB „ 0@`€$ÀI€’$!HB „ 0@`€$ÀI€’$!HB „ 0@`€$ÀI€’$!HB „ 0@`€$ÀI€’$!HB „ 0@`€$ÀI€’$!HB „ 0@`€$ÀI€’$!HB „ 0@`€$ÀI€’$!HB „ 0@`€$ÀI€’$!HB „ 0@`€$ÀI€’$!HB „ 0@`€$ÀI€’$!HB „ 0@`€$ÀI€4¶Tò IDAT’$!HB „ 0@`€$ÀI€’$!HB „ 0@`€$ÀI€’$!HB „ 0@`€$ÀI€’$!HB „ 0@`€$ÀI€’$!HB „ 0@`€$ÀI€’$!HB „ 0@`€$ÀI€’$!HB „ 0@`€$ÀI€’$!HB „ 0@`€$ÀI€’$!HB „ 0@`€$ÀI€’$!HB „ 0@`€$ÀI€’$!HB „ 0@`€$ÀI€’$!HB „ 0@`€$ÀI€’$!HB „ 0@`€$ÀI€’$!HB „ 0@`€$ÀI€’$!HB „ 0@`€$ÀI€’$!HB „ 0@`€$ÀI€’$!HB „ 0@`€$ÀI€’$!HB „ 0@`€$ÀI€’$!HB „ 0@`€$ÀI€’$!HB „ 0@`€$ÀI€’$!HB „ 0@`€$ÀI€’$!HB „ 0@`€$ÀI€’$!HB „ 0@`€$ÀI€’$!HB „ 0@`€$ÀI€’$!HB „ 0@`€$ÀI€’$!HB „ 0@`€$ÀI€’$!HB „ 0@`àÿ³woÛ©#WE½ÿÿ§ó¤Û I .^žó!AHÎ8xÔB%"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€áÉfÞqÐçìo6œåÃÌõm€2ߦ/gy*sMpηÿýºÚáÚýg¼Ž—¿uæ}áé`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€ Bˆ€"`€˜?iæÇO¯<ò)›Š !DÀ0@„ !DÀ°Ûœ»·¹?Ÿ;›#›ËƒÍ£¯|ö?aÖŸ¯ùöøì>À»¬Î_þ3ñùï¬íyþÖÁî˜.½œÞ˜˜ž‹'ýwóû&igžùÆ·À0@„ !DÀ0l˜9w»§a^sàY¹cNÒ<ù%<êÑy̛󩳽íS&¤wìòíóàOTÀ0@„ !ÃG˜ƒ÷oíí=רÜp6Æ·x‘ t>ÉÂüåê”çíÇwºº¾Ãì¾úïÍw;<+cørž/ð»,_îwÏÂós“9vŒëfy ¥÷Ú2ì"DÀðó»¸Úåå×£f÷¯ž3·}c›ë3—nûæÛ<ííØíûôåÕJˆ‹óœÿÿqnîkñIkí=öjÈyâòö`€˜+cý'½¯?~:cWû|ùon÷Ù¹ÛÞ<3àÓì8Ó÷zÛÙ·ËyÇKùv^óœ5ˆË}rúïÎË B†4o{òÞ]Ìþ­×Nþ½Ç÷í%à“Ì­››ýüqöï÷Ã缜W>x" B†7;²<ÿÑ¥üçkvknl÷÷Í®Îöõq-Üþù”ÙyP€™…n\ xýºÀWÝݹbâÏÃß¹–âl\¯xé)OœÇÎ'DÀð+Ì“özùÕ´[_3›»Fµëj³2ž/'ÿŸeï›õ/ž9wãÈüí<çÁç¬-û<o~lë Ìét¶IDATàü;ÿ9Ÿ²~ÿå ¿}õûòÖ}›¥~p8ck~9 B†“}úƒÎûæÒÞtVïŸí]ûÂðN;æ-×–‚¾o±Ãs&E?ýlV'ÛÂù`øä¡ÙÞàrë9éï‚ypë­kÿ®EßYXßÄç?ð fñÖZô½½öólaÿX{A—£™=“Ì︚¡‰bØMˆ€áiΊÛïôÈ(øÆØ,ŸÇ;7Ÿs}{Öï80(_ïÞéñùÍÅéÎWÈ[ÝìâtØcCš3ß][,Ÿ½kΞE†Oø³až³ížÏÑ류gßÁçæÇùþ¡Ì#@¼ÞxpÏ©@›}tï¼í×Fà½cÒõéó×Àé`€xàTÛKžÌÖÃk_‹›Ç†p‚­KÝÍö$èƒÌ£ƒþ0~áŸïé)ëpÌöD_ÍíûÞj-úîŽÁ·Nx9"ôܹ`µð[ÀðéA¼ñèsà±­ ·¾çO à7˜ÃÎÒ›;;e®ö³ÞàE`€îrûM¯]Uc.Ž÷¿ÅEÃ÷^¾˜]ñæ²Ïk'ÿn.ýìdÀ'ØXòùÐçõrÐËg ßš£‡^ÊåfÏäò‰Óµ3;ßoà×ó¹&sÚ~fc)‘y|”óÀØwç:ÀÀyøú¿{÷? ñöšÒsÒDë|ð/gÌ%ƒÌÊ?•¿è_ÈWŽõø¡fcó¢q¼êûÖÙÁs÷1}^Ÿ`ÚðÆµ€Ï˜}ÂDêýsÑ[Av^4Ž{^³>Âï'ÃÇüCý™ sâ;û–‡¶ 4ð‰Ž-ÿüýΣӜgÌ˾:j‘ð9`€~•yÏQf6G0‹·oé»=€qÖ/ÿiïî–å€ÒUy™Tåý_\ìîŒ úGlŸs±ñÁø)jw n(&:ËY¿±ÛÕ2÷ºM³}á‰~éðF€á¦Ã‡)Ã#§)ÕëˆH75Æî«%Ðkx\)šŽ‰±wçæY[çin&šïêèS^M>bdÕ¾>~{ô¡ýC£“(íÍC.¿0À…rëÿ&)dùFî¤1Ü®¨¤#×q¢%«È\-¼`˜ÕÓ';˳¯r‡;m|w”7å1¢î#Ê™/Ï?Ö£¿×¾ÃýO:O¼ÃÝÂ{†7í.g˜£ç$™u€[^w šÞPïg÷pÜòþ€;†w7,sJ_”¾Ñµ F5,üô2½7 V¸‹–òÏ«¥ KáÞÊ\li¶tFkvM_x Àpæ€ ÜÄnhP]Øx‘Jw©G\ðýçPUZ†s ÃÁ®}ô¸È|Ó«­ãk¿nïÒ MëWZ-Í, ÜI\ânÊ\êÛ¢óâÑuµúq}sÝó® ä Çu.µòh€7õT¢uä’îþËÇGü:€OR·Üçš¶þoC€ø½³qMCŠ0…?úñe÷{αS;¯è<~Âïzö:À¯cûúg·N¸¿\ùçr)è⎋ÖÿÎݯ™Ã½ç¼ýM>{êhS oÿGþ.2 n`|®ò}ÖÿW„÷'Ìçt¼7í•f5+† ûu€ke Kû“ù¾ñPÊd—Ý»o»%÷mÚ¹kƒAp¥Í|e{އɹÑľß×Ñ^þ¹VÞy»ÿàú¿ÓÒ„n:×+£–O" S{ý¾ã"Sòãh?3»ŸŠî Dß¾h9Dç \'ç6»çKŸvŸ„ÍœþàûksÜãsé@`xƒaŹÇÿëû½-‰Ñ£ôõÀTƒ›±ŒQ»nTv¿ª<µI[¸;`øˆÁÅ—‰¡&Ec{£éµp?Ï‹Û-Õ×›7gŒÁ6œ|³À›†Ç~,Ú{µ+–ˆW·¥¼Ý^4b{@úD»…‚3ײþ/p7Ýsš±9n·ðÃû9×Ö ò´Û‹—^n¨-©VY¾ž ׌J¶1ÙØ <ÚÇ53ÆFí£&€;ë+ÿ<ã*-Ç&1'¦µ¸;`xE÷­ûz¿±”Í úÆÓvˆÝ÷Ë¢#„Û×±;8J¯·ƒãàJ?S•‘™ËL¿~:A䓃‹S •¹Û‘õ#JWÆ÷ïoŸÎ"Ìgõ¿—õ1ù¸Êûâú[«–®6TÍgàݵք^ÊûnPþ¹íZ1ëD7¸¹ÇÇmNšÏ" Ÿ2Ìh蟮*ݵ,Fry`/p½Ç¹ÊÖLÞ©/sÊ?WÞf>†0•?øßþ?n×!Fs#[‚£çw^*ÈÄÃJ¹ÏÉ}û¡Ðó!FÀu—«Û¯§[ª ½ýy[ :ʹÃÓÊ?oË4·•¾bf¶~Kß=_,vC0tw,ç#îÓ–†¾´±‘#YÀ·vFöoqÝ›ÜvܧQb¡°' 7è„Ú:¨ú:À#]ofmt\¨º—0Lï”bòq3®]ÂÞ) xÙüév¼Ü>©÷÷‡åŽÙ¿™vm?øÀ¦·{l@†0Ü}DÑÒ™ –žÖÂéYÀ±Û¨/®”.©7ÎþQþ9w¼[¸3`˜Õ•ÆœcÛÎ…n6ÿ ®–s7g—Zv8 x·Ë€¸Øïœf¤÷,S³—ìßüe–ÖìßÒOùs÷ï;r,P& ½ûíÏ9Ђ8ÖôÃYÀ1«Q¯­ Á÷ufÿÆœ&]ölÞâœð™€ùÜ®wÂ×…ÞýG¯*Ý{ÖRAh±`à¶jÙ¿Ù}ÙÓ×ÐÒÞŸûn9‡‰g>—0þ^йöu^Qß¾»ä‹Ê@Gኑ(»´áÍËÚ~€‹D®ÔóïÏÙý©ìß([Ž Ê?G¾üsÛœõàC¥ýi‰ÕÐH¦þñ96.nSÌ °Æ6(ݾðnYàÔ~€‹¤‚»±ß´ ­ý;%¥µm6õübt_G\æ†Á.þ²Äñæ½, 8Õ¼h+z¢¿î¬TúùùÀè+==û·ëfÆÏñ¢§ Ô óÙð¥ëŸSº}ˆíz]ðã¶|pº4ÀµÚJ?ÿf§K?¿6û·m®8:ßsUùgëÿB0|Ã$fžëXp²‹J÷/ \.Qú9HÏY7ï¯dÿ¹Ó¬ð€aöà´u€s߬Šòh!s®T;÷É·1wíÈÞ¶5™ÜúˆÎ² þ&²ŸŽ?)ûw$ÎLãF1±¦”ÕÓ8]8¯õáZÀtüöW¸½“{Ç–Åðg!™ÜñyÉ}n, nysLÎþ ÷qï§üÕŸ51:C[?|ZÇT:÷ðu£å\‘?ÿŒ,àíé*YÀ»õ„€›Ù|_o3{«Ù¿ƒ ˆ†5ùRٿѳ¹ž»÷Š€®LZ¾0ìêÏïŒú®髲€S«eﲂ.•X÷·1ûwÎ¥[³Û/ßfžu+]7 t†Önæ%e çdïc¦ÑѶBpl¯?, ¼¥ñàïáìßȶhÉÍó–ÞñÐüä¾Ñì_åŸá€á¬¡ÀiQLoWK[Cà2Ñ•lTÞÖ{åSîÇ”3œF˜Î?ȡݗ´ÿÌ~¹Üðű×f\äNÙ¿1’ýÛwHòmo>O+ÆÁ·†áέçîì2ÐQmS4¿çϾä7Ã6'Ê}ÃìeA`€‹\üý9´TºùçôË®¨saN»­üsû|õüòÏW­; ïOÎÄ Î5yíâÈ.FÎÞ¸Ö`ð÷ÐåÖóí<çÐÛî0ß 4æ{ºåË{”8ñÞÒ×éË^š²€[Ÿo- àkÈþ]vïKž¾²m$ûwúC¸øW`~šï! ýýôiV­ ôðµ›Þ×¾VD. ø¥ ®ñâÒÏÝÙ¿ ÇFçýþÞBñ˜ù±UåŸá`úÿìúkÛù¼.ˆ4ôç³³€›[6¸ÈŒàïÌëÿ^¢iÛÃi²?½ä1šëí|^ý€aF¯;ñØZpî|Õ> FÛ77 8{Õ– 0ÀE¦¬ûûòìßöCú+PödÿÎGÊ€ù®ú¾)3ç¢ûq`\±=ÎzÀÀÇK”~n{_z[köoýdÝ·ñ¿ óÑ|`xA‡wnß’ËNdÏ6•©DyŸ^FSgš:n¤4Àå”~nÊþÝW"oÏ™?$Wþ9†"ÕCîÔã?€aN·5õØZèöN¯TB¹T>:ÒÛr‘ÁRЂÀÀ[ þ,ýÿ>\f)K«ýFëíæöTö÷_«ÿX G˜Á>.¾¾í¯û¦Ò™k÷–‚Žd)hA`àã]üRð·ØØäËÌm-Í7S»ÎüãóçÏàûÃ5¶wns²€Kç‹“î<Çñ‚Ö´I[Þ§Ín¶…çfÿ¶ß¾™]¸†0œ×ývˆÇ¯?šÜU z0 8Õ†T°¬_à¶þfú³sS£S²K?OÏþ~\-Gù\Á$À|iß|MèÞÎìÈZÀ¹Ž;¦Üç„RЩqˆÒÏÀÝ5•‚þ÷?¯.ýœ<}ò§öùåýûÏè*ÿ ÇÃg<-gŸÓÒH7I‡ ¼“Hy¾¦ôs{öoéœÀ{æ@Ÿ¦Cé$Ǻ?! 8FÚ±¾(:6UZP¸…]¦o*8“óÊìß}ÆåµÙ¿½í6ÜôyFÀøãy¼¿?òî3î¬i_”öEkÇ. |‰[³+?-Íû†Ö‘Ç<é×eN™ïõÎèØÖj¶®}ÞŸãÓç.¯z­§S–Ú^¹¯ÔîĶˆXÖTƒNÿ¿ÿýwMÝ̺,»›\Ÿÿ)o+û»eݽi³}³o}þ!Ñîµ¾¯øþÍ«â1»Æ5[¶ôœoàðÊÉVv€¹&ŽbÊbüœµ*ÉÝÑÚ”t™ã¨ïÛíß½ŒÄùöÛwO&—ù-Û–l9çìö†_L.øÛÿai âÆøÇ[ö/|`˜4AÕÆsÏù»¯xTæžöÛc‰áʇþlmÿ:­±>¼YÖ£ƒu}Þ¶iXjûŸmÿþY–eYóÛ~ÆñùÝüøØÊÇ·?o«¬›=c˜u3À}0x;œ\cÞ×ÚõðÀcM¤ÖXö ZÒˆ¨lY³c´Ì§k;¤[}“˜,^v˜wýž@oæøá€ïÃqµ ïî˜ÉßäÝGmÛ¿]Á߈ä#ìÉüÍ=‡žÒÏÅ@nó'ê3³áÛ sìÏx.›óëÛÿ>YÀ¿AÑ}ÛSÁÞeYËAàÔÖÆLàXb^–çàn*0üslÄS6ðs÷oÛsÛ–“Á˲ÄC´u$¼ ®©j* üÔŽ5sìsc×Ý«ž‰½µ:ˆëûo2$³ÅÜ7Ä)mêÈ Ê~Üt^Ð÷÷Ç™ßß}G³~÷ïxÙçÜ3›Rú9*áÞ/Éþ}÷òÏÊWs”0ÜfDyMðÌ÷îƒÉ¹ÐðÉO+ñN7îiÛþ¼›}›@y*óùßöeIWÖÞ=Tpü1#z)ìßžgÙßÞò³ù)"ý¸#;ÜZ“£ñz@øèníôT€÷ןô5Mˆ¾ëÊþ·i ð›8W9ã7½±)ø[ú)¥M´5^þ»Í¯û;ÒŠ8ðéŒwùè$ ³ºµ8)Òþ,àR6ïæ¨LT5ý¾X"Ötvð’ ?döþž»¼,må ¶=/¶YÃËòXþyMl[öۗľL6ðvûï¿cÁOÁH¯'œ`¯‘^Ÿ·-ãwó»Xë¸|6ïÚµùØqþ r5N€·oßÐe  AâèlKq…Ûh8îHÆïßsáäÜVn­ßÜ{&dþî·åŸI.û7Zïûç’‘k^æü…_cäa³³‡þ1'Óc€x›2Ðs²€ÛKA'SOKAÿÖd‚À©Ó÷—ei*½ÝöÔ’dÐøï«d‰çÜÚÀK5üóo<„j·Aâeé /K:Ø› ç›k´®Å˦ééÆdß_ÿ¿(³Ë?Ÿ•©k¬ Ü¢ ôÔ,àÇÍÑ|ÝÖ€ïîØÈÞ¶îm-ð›Ññé)eðfŸÙ¡O«ì_xWÀLøÃ|Ví'ÜÃݳ€­íjB* øßoͯÜΕƒ^–¾Là%þ®Ê›- ýç©làxhèoöê&ƒxÙ‚¥¡wûþlØeÚ®ûóZXw7õ­Ê\vpià¾V©-å n1£òÁZoRþùÔÿãœ!Þ¦!qüªÉ»Ñ}žžŒàìñÝAß]#ïˆB’k!ð›Ü¾äK>çöe2sÏ üÍ—~ÎeùF×箽ôsû¾Ñ¿ì_÷Àõþm\à8ÂIEND®B`‚fs-uae-2.2.3+dfsg/share/fs-uae/2x_1920_1080_bezel/theme.conf0000644000175000017500000000120712162366653023143 0ustar glaubitzglaubitz[config] # when the viewport is scaled 2x, the resulting size will be # 1336 * 1080, and will be (implicitly) be centered in a 1920 * 1080 # screen with 1:2 pixel mapping. #viewport = * * * * => 60 22 668 540 #scale_x = 2 #scale_y = 2 # this should have the same effect as scale_x / scale_y = 2 with the # above viewport, but this will also scale to other resolutions (but # not with 1:2 pixel mapping #viewport = * * * * => 60 22 668 540 # scale_x = -0.6958333333333333 viewport = * * * * => 64 26 660 532 scale_x = -0.6875 scale_y = -0.9851851851851852 texture_filter = nearest inhibit_aspect_correction = 1 theme_overlay_image = overlay.png fs-uae-2.2.3+dfsg/share/fs-uae/ubuntu_12_04/0000755000175000017500000000000012162366653020464 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/share/fs-uae/ubuntu_12_04/sidebar_edge.png0000644000175000017500000004376012162366653023601 0ustar glaubitzglaubitz‰PNG  IHDR<üüÝ[sRGB®ÎébKGD<;7 A† pHYs × ×B(›xtIMEÜ ÍÞó¡tEXtCommentCreated with GIMPW IDATxÚåQ–Ü:¤yjOý0³ÿeMôCŠd J*_§ åñéþm®k—’ ‚Z‘ÿ÷ÿüŸøw^íÿ³_ÿ{Hÿ•Æñ0úsö5xò_zP؈"eüÄ”~=8Ï>üÆ)››ò¯i„ñÍßÿšÆÍQÍ~'Wê¯Fö΂õkÞa|ã}½Ã~õ;Œ‹ûGÞá'·¥³-êWLiÜdeF÷o0n>~ëÿ—H럊¥ïî½?²-½>ü íb*¿þ•m ›‡ÌFùWÄÒxhV”áï¬Æ>ºÿÔi©Lí×oŒ¥ÿÖÃÿÊEëNµ{Ø_õÀW‡„«í<-í¢­WõÐÿñÏýƒþu¡%¾ñu8™âÿÌ”Æ_œe·¥«PGÿ3#|÷œü+Wi´{9¬Ï|<Çž]µ¼~ëgúê»üO‡<ºz:ãq;ÿ3ïœþÉ$ÞÕžü+F7OKgSûWGZøæ;ßxÜ @¾{5ókwÿä*½{§Õ”¾›ÇòŸ_ÿÚ¶ô' Ø?•ÀElýϽÃw?„j[ºŠ¯Ýß¡ùƒþwKggà=*>ñh?V>õÀw¤ÿÌ߬~õeÚúÉÒßáï(ßw¡æ?¹hùÍá«ýc)ž;{ï¯Ø–þä0ÿ£‹Õ“§¥;¹¬_wþ“}÷Ÿ=-áÆ‡ð«OKwûÿô—8~"´<› ¿"ðÀÍ•ù*ÅóëGø;W¤ÿÜñðLj¸,ZOl̯ê·Fyÿ‹¿ÿØ_ùaqóȸ¼×hh ­±qVX“¿nJß=bþ!æÏøï0.FUÿÝùïƒm-2ůá«i|èû£ËöOÞ--+8xŒ1ú¢Uûÿ4v†.Z hüÈÃþD,½ÿ0 Ÿ>“|ýáûw÷÷­]+ñŽlHBßxÈ>¤×܆ø+­ï'Ð)Œˆ ئ^~?϶¤øul|?ô)uåÂ%6'öT,}]ù ²±p3“?Úqc?q·ÔÿÝ4½3ç7/wsø?‘qc?ÄÖ.ø£¯ó3 6Ϲ±×ƒ†ÓLH¥Ç<ä˜Üý·¸õמŸD_Lã›_÷McኑµÃ4åüÿŒûtíáüÖkLعjÉWS"0ÞøëÏ“-Oê¥ÏüžO¢-pžg$öÞ¿Ø|¾'ÜØO¥i“Á7JÆ ;Þñþ!Ìw}ø0wGw,Âìß `ï"ÆlîS›á+°åΞº=¼qd<–¤ãPüŒT¡“t%À4äÊydO奯„ãèO$;ïXÃ4™‡~^î±6õ{Ã=±߉¥1ÿËßtšÌOœ.xdŸŽ¥ïÚIa†Ô1¼è 3!15b4…3nìõὛݿc’í‹ÙüP8ŽHh<>Œœ;û´­EvK˜.bïâ «ûCïÓcÉczsŽúûñRÞRüÇÃïàùJý^!ˆ2Ô¤ÀøŸc‡ª7öõÐ*}™$@ø#†‡í+í{?f˜ <Þ_ݳW>Ù×{³@3 à'&Ä1gIØ|.LÙÆ%wVï$1‹9KŽu‡²\ïs¤vÜØ“Æ%§v4yÄÌÞGþR÷ô4WÆ=U{¸Û_ãç¾Í× >•‰wÔ5öåãAŽ »åÊ^?°híø1nKЃ2³DfÆ#{êxx–º}Í7ãì„UJý§cº·SîìõáÕùn¸)Ó8¾êýDȲQâ ÍÒ%ÜØ“îÃçâ$ád8ë÷ŽyðÞ+ð–Göé}ø~±ôZïC{8Æ´ÜŒþÌâo¸±ŸPd?^3üà8ë• “›¦½7·ìiSüí¹yDCãX8—ZHç6’D|àÆžPì¾f©!ža£¾ysZÿµ¥Žr´tîìSñ;)Z{§1££¾ÏØò¸˜@L¿ÒßÐŒGö•iùÃcBBZGº<ö_$ÜÙOÅÒëŠMHªq9@ͤ^̬ûØÂ=‘ñ¸µ'‡Ó Zº&·3uÞÍ,ùßvjÁŽöHÁ¾/Ñèo`\†ù_{=0ªgÛÓRFyá€~ ¢ÅÓ!ÑyÎ}²“Ç7ˆg .#ûóO»<¸KZK¯wçï07%?üÀøætA‡</Çÿ’â´tç gxð»oÊÏMé»%ï§âðù¼¿CÇ΢٠ýšrLÑïÍïLé§eK¾`Íï‹ï«ˆ®c•Ø¥©ÎuíF²à¹¾÷CuÉÒ•ñ’“áÕqøÑË´Ó­ é‚•lLh!ñÍY%œˆìõÀ4¾ó^#ýc,¢î]ú5 N¸±'öá;I¼xª×Nj!DŽA û0áÎ^yäþtÅFã;Ë8ªåÕφA»6Åk+wö «TûÿFâW&ó®}M›)ùëTÿ‘qgOHïlj‰<` ’x(ôÁß7Zò³rgŸnÖzõ¯x¨ÃæÓ’©,Ò•œíx³Éþ67KêNyX͈PzEfÜØO[n’Ç4 Ó¦[¢i˜Ž'ÜØ'D-WF¼çšK‰0Æ LY’è‘Ȇ;{}pê¶v?9Bƒ¹ÒìN_Ú—ºvÂ=xœõh¡e¡,ÇCÌ*q;qÈQÅ{Ëýdq«,ÅБe{DPŒ‚š`¥_Ì$ÜÙOijú5‚+ÄC4ëH¹Ïw=VÂ=qóp%h±½¶…b÷”äZ²s,Êl\Nƒïìëƒïì˜Z¾^̆FËo÷Ûˆ·ûŽÓ·0bŽ…·Èž´µ¸hæ…Y^Šºª”Uáø–GöDïZ bJÈÞ;o"Æy~}ò¾wöõð íµ‡ž°<ž¢RâÐKOå$—÷ýç+'ÿnNëOÜd6}–¤M3–œI`9^åI>.©îÁ¾>ôþ~§qÅQ™ÆpK8o)Å[š×’ü§˜máÆžÒK_ß-õC~”a|³8Ò¸©¬ s_¸}CŸ>ßÉ`JÎQlMÊIýtÍËJ¬¯Aàv›ñd‡éݯÇá¦ÉÞ2—–šäØž,Ï—p¶È^?4ªëiŠX¦bÔë!A©Ãîìɼô™û¿~_¢¦ÕÃá.”7[¡vê˜6— Æ8 ”Û Ñ o¸³ŸÒZæ¹q{üp>¦TÊÑ#˹³O´¼³H-¨*ö¡SáQœÑú‹âêÛ&ì'®Kó?Ž3ï²$ƃƒ%Ó= ËSÙ×C‹ÖÕû;%ÏP•Lí¢5jòž†¿Öydu¶¥%@Z&©ÍU—ÐîxdOë¥/CmGÿ qµãÇçM/#¬fâ„"êì`oòšõÉxd?eŠÿjIía¤ñÄK ›¸;ã‘ýDía–Ÿ~©A ­ïò¸ý Ï €]e)v–âqþq6ño?ðß›Xϳ‰öýÌþéþNo–m,d‡M¼äÎ^zÐï#"Ó˜•(ÏÁž!º+ɵ7ç>EêqåÎ^Žî.àxWŠ÷ÂHÌÕy¾ŸGAe7Õ…ZRÏ;þŒ;ûyé?m¢_)ÉßÀ¯H©òù¤›1󆇣ÉÇ-Ó¯âèñà°k‘· E|iÙ’RwzǦ…;{=´:ßHÕÂúêðÈ`A%ÂŒI;ãÎêØK%ÿåLÌA\ÂEhÌžÛsg¯.VW#œ¬Ô3Q§#£^ÛÁcÑK/ãÎ>y<ܽùó°T¤ø±T~³9ÙrgO‰ZÚÅ€èpˆ¸ý6“2 H'ÜØ“J<ܘ !A3¸â|Jášûí©'65±F|_fµµgØŽ;{ÚªµÛQгT¶dÙK\íx³=üÉ^-§f¼ñ<úâÉ¿Àk.ì)»e\ŽðºænÞ€]/DÞú–žv¿ºYl–{ß<Ì÷MxÛC‹ÖU»ûj„Óq¨ˆûü¹é6_ût…øn«z…ÄÛx~$c?\ðÈ>í>|•âyI]nYæÕ¨ìRx$èwÜÙSâR\¾ÃÌÔ–§G#¼8Ž’9wöäñðüg=ðSRbÁzc 8[!Ÿl!v|`šecÞ–å‹'ÜÙ'ÛÝO‡ÃÁ¬ÿÏ4àÜìÊ;îì©R¼ËÅrsð~W¹Övà¿OéŸ*‰_¾'mõuf#ý_GùoJ®ê”ÚéôæÅ¿{¯.Ui;î쉺¥[V³~£t‘ÃÐxÅ%‹»ãÎ~²ÑãÒY™R‰°…ñ‚üÎâ&{™C -Aû@fÃR“o½þÃâówG_ª¶¥¢LÚÛwí%EmÛUz wöõïç݃A»<gæC¾Œ‰ërÙÖ²&é‘;{*ãqy‹ˆ°÷D—°¹‡»‡}ãŸfÜÙׇ· ;ïóÌxÈ™xLQ¯UŽˆ®…ÎytÛãã⯋¤ü¬W:t’½*X3™KߢŒû x:­1xîfìˆc„$õãÜÙ“ÝxNl«èRÎ2:«£©^ðo¸³§â§áoÇaޱŒU ѹ¥„ŒcÅŽ{ªÏà { M¥ËÍî^ µr\¹³'݇Ïò[q‰5ž‚Ô§ÜÙO)’¼ô±w†Nq.>ó|=ÇV¶ãÎ>±ã¦º[¨Ù‡™›v;×Q_¬•q­E~Pòp§HóÂF-‰8ýB%ãˆnŸrj¹×(Ýk%Ñò½æ²[oóŸº=\܈_#¤yKßißyß`êÓûðíwš­ [Ò•z·‚çüÙ¾åS;Gàt’~_ôÓ¡Ÿê!þÝíj©_ŠÛðæò»s™*ù³æCw$†XWi‹?’/ÕRhußqg¯ŽìÙù7ß’krf!4=‡±\︳Ÿèl©W,㪅j2Ò{-§Û8Àô³Î8>hw7úJVM–¬Ò1XÄ%wö”ïʉéÓQÒW]m?Ôô.ŠaUwîìN-wz;lWèwº–yæ"Q"Ž\÷\Ù“ €sÇ4Ohå÷;Ów¥â?íòŒ²·;ØõAxŸÿ´ËCbˆÏ%X`¶ÈÑ'ÜÙ×#yK‘Çt¥å´Êêyu´ÜUyÇíÝÿ¤­Ú7œ‰‘m?•°Q6mÍ™I漟“?”¦ÅÍ)¸¾¯£2¼­•.Œfø;îì'Kñ–‚ý›<€^5uçÄÌÇŽ;{¢;-®ÞßfZËåÓ‘nY £+Óp5̹+óž(Å»“à‹ú_ÀÀØ”C³l«;¦Y¥)ûú‹Sôî4>iÍ‹%á ÌIya%’UÜ9l%ûÉ^-Ét×f=4¤\BrוNÛrg¯¦Ós4€XÀ„a%&n óƉÚpÜ ¯ÜÙÓJ<°ÖD4š—ûíykDi±áCãÅ¿¿h}§ï©G|žÌ`hšLë Ž=7öúЂuG:¼N}$I:½øÕ:&HË=-LkíÌŒˆó®·»¢»&Á:{ô•›ñ~xáÆ~²uÉ2º³í®U§…„€8B=/w<²ŸpOcj5íÖ2£Õ®ÔCpv<]ù°˜û éÁŸ æ·MÑÆ~Z‹¤Ýãw¼} §u'ßný¾P³ï”Ss9í+ºg|ÿ@¸á-°§Ü–®bjŒhI=âÅ|H§ºFd°„sg_XîÜ>$«4–+Äl¡<•g@ÝÂ|ÞqaO÷.ÝÆÒšt‡¡I=QËc(Â9¬£2îìõ˜µæmš”ÑŸÓdô„0ä6ÜØS½Z.Wð4?©y›¡Œ ejmÎýWqü‡<Ñxè:5[4S!†Ÿ×·Ê=™Ä;?HÈ |Ó×°æ–]GðHn¹³¯>äw¦<°Ln«4uË([€]£ˆDøóÉbËSG‡äë^}/eH£[©w/ãÑ8 ²}%ÜÙ'ÎÃß½5œBC‰¤»#iº0E±!N¸³ŸPdïò4RÓÎå‡wnhrºã‘=í¶tâ/­c¢ÏÌ“=ûp2>Ù×C£x)[n‹^Z᎛÷⟿¥âùN*ç<)¯¥pcÎ]¼«_?ÿ_õÍZ÷Ë^6¸™æ„L-x+HåÎ~R/½$âƒ6Kýàõ1üØüÅØ²Ÿv. ‰x„‘a[ЍÍñq­ÚreO•âÝY±ÃTîga¬2Óåo?åÆž°µ¸JÒ/¢9]yi>Óñ ÕdL wöT¯–{´I£&ã[§õ¯åL í¸³Ou§ýn2^úrˆ$ÞÐHREk;nìõá‘= 6^¾h;D)°%_¼&ÚK?VwöôÝÒõûŽu·â‘þ¡Uéy«¿Œ;{z[ÊFþÕ’(xt»CÌůÛLìmù<âÿÖÞ<¿YL)“f³bñ¬Wñ† û)ñõSN,Ç?¤ bÁ;°á•yàpÔÕ‡ðýÙD=ãíÝqc¥Ø›LÍy,J€Ðȵ÷BkCà~¨?òß|½ßÙjÊH÷Ž=£ÃÎñ3ŽfËwöªó¨vÎbÓF x{@NP$N¹²2Sšm5ºæ;,A6-¨½Á—|’ÛÒÈJÆÒLÿ$˜.Çt0Ìm¢†ó½>1rËZ¥g•þÍO÷/·÷Y1ÃíhÆ}Õz‡1,´F7ZšÂgºýÅ$ìŽÛ‰ó«Ú*MË8R\Z {ê4_ºà‘ÕRñ0ŠDǃbÞÿÎt8> Ù»*ÜX&â7ÝÕ-@ ìA—>â» àa.-¢j±ãSÿ08¦2v¼¯ +wZÒ¦ps1›ÚJTAiJµãÎ -Zâigñ5%ò@‹¦»CvØZÊKÓê˜êt )ª±êŽæË8áÆ^Õft¿FŒ…Ðel [CyHÂÕyàpègtÂ&÷¹kZ+ã¯Z`õúÁ„3+úà!B„whN¸°bÛÒ< 1:’Â4Z›÷}å‘•[´ØTI‹Y³ ¥9žm‡+g•«uë#H¤¸J:+ç°^90Ipav…÷GÆ…\¥ý (›©j* 5N¸°b¡e\€ Ð¥pÂ#+i©Þ’¤FÔkR+‹Tnü(w{Ø}ÝûÂeÇZ¸uÅ3B”>hçøå8pÕÿ&?B -w3ö\{yΫ饹öÄ鯴!íÂÕ2=赎e»žxuA“j˜”«ÕœFœÑ¦g ¬ªEã*Ê©‘Y±UZÍìÕ&9Œg¬–6v\­ZË%â¼Êbï$ûpÂ;<ÀŠ=æqÉçnKwV/ÒjiÝU¾AË jå‘}•{‡ÛùàKuŒ¬ÆŽ++ô3Ý{UZ•‰ÝÔD¦mÂÕ‹¥S_Ù6º\z…-âÜYÁ ñ$.Ñ;$ÇÅpÙsgåì–£°Te…Gë!öS•ë츱ZW-–‘}aG7%± Ð Isî¬\íaаæâðÅj¾Zñf¬œ'$JŠrI¬[W1œpg¥â”æn‹EëÈÇiS8JînÃ+èÇC—ߨ~]oówÉÕˆƒk¢fS®ÉJžpgÅ-¬§'ïݤ‰²ÅÚwVp•†t—5u°™CÔu¬â)É€Vó´Ô²kâ]ÙoùiÖ¦+X!ÎX,ͨ´ WN⤴ãÎJ­ÒÄ܉‡9¯‹L5rCO–Œ;+µ¿ä‘<ýNÓM®rÛ 7V(M‹E; ñÝe¼û—mxåÎjuŃ‹ÂeWÑ“´ÚzÌC¸–qcµtZ‰€ÙÊóX®¢²Cƒ¹áÎ ®ÒÓ§6+Ñ Ç ¥YkÂë?¬ª:4KV-m¶ÕC§z´Æh+¶d|gmñ™ý<¦K“±wVªW C¶¶™pÎPõ§EL掋™…GVËÖBÄ7âž< M°lºsºbÃÕ—ZÉÞKVÜøyP[LV®¥öÓö®fÜY±S˜ÊJ´dÑqÝtˆs³ÇÛ‡µH ˜]ìV+OÎ.¼«{®¬Ö*ݺ½‡Øtk¤5ú3se¥Ü‡Ù…hè½Uä ` Ñ4JäI•;-#æJkï–#1Úqeµ¶¥ä”Kh["Ú׫_Ú ¬œ0m)òJSžÄͼà“Õòµ §mº,µÀÇÂa[î¬TU ÆðÎ:šWcÏuQVvœpg¥ê–<6žJZf¼Íz•JºáÎÊ5M¿‹m“¢ÑÿÈacfe® €rÛ’JÁÇ~›u=h¦¥äžÓRÓÅ µ C‰ 9 W.X:“¤ÜY½U°&‘h¬x €î¬Þ>¬ItÈðXSâŠÆS®¬˜N ›ƒÀ¼` QgEÛŽ;«×÷°©t‰±õ§Øu”;î¬f¿%I]ºôy È–;«w{˜XÑ,Ÿ¦£x»âÆŠ)⥩£è¥Ñ{š¾úâš++Zê- œ'zÿ“4‘«fÆ•½Šo‹*ó&ÑZ[-¶ÜY­E qIÖø"­gîv^Y‹aIößOVª…XLí䣉Ðk¸…;åŒ;«ÕØB»a'»5C<éJžÈcÒèUsB¯RësÖ=ŽºÇ:¢ù^»Ûo'¯iµ¸6!µ‹ê;œòÈjEZ~rà~¯RAÃú¶FŽŠça$*+È ¢¶kl‹r'<†že[—L¬©ŽÇrpNVç…Göª·bÅkn]qØçal¹³z¢K¥z«jóðåÜY9›Gÿõû{6õŽV¨‰;IÆ•¬. Œ£j)›¦²°{¯¥i28Õ³Z›Øí¦ºmE<GÞŒaoT7­-³Ë™öÜY½6À¦­Â;9{³í¹³R%8.z‰X0|j‡×{ }IßBÔœ;+Öè16ÎæâDúÎM3mùöœ;«W€ ëì®…VÕ±åΊ¦x<ò’´M“fÊzD RîìUmµŠ-R8@fÆ".¥ wVNÅCrÊ•B»%nSàž;«ZªÔ_lˆßÛB⾟;î¬Ô« žî»Ñ‚9¹äž;+góزÔ]?åÑËåC;–”;«·J[SšÑ=l¹òjw¯WÞŒ•òÓŠ½ÃciäÁ½/\ç3s)Ö÷¥Ã4ã;¾ãÎjˆuå•í”ûÿä'ZMã’d½Zo}±&n3î¬æU‹}·=£úRÍî±çÆŠUˆ7iË« ã$ÒIñô à–;+7¥û‰‰Œ-C™,,¬äž;{Õ{…§µ¿ßäÒz›8ãûp…hÚ†{ã‰;V¬3ñTVN‰Ïb^¢âéÍõsÞÕjNãÝûšÜ1©è™',):^¹±2±ôÎ!*ʰ«îSY­)Íù´\üf±Ln1ÅäÃf3â‡_ü¦dI¼Y\uÌû•œuâÁÕGÄ»|²ZµÀà¾îÑØ$ Ú5?X¹º¥&†%KÑFPìøY)çuÅ¥v­’¶Úm1 ¨rÛOÇËÏÉw¸²R#ÌaŒíÇHÏÑ1ö—¬<²R&€8ÂÇÑÊ€.%äâ:Ťv¸ùG!¬\sXŽ&_"òkÇ•´ˆÓh‹îfhžY9É­Øù}Ä›®¤Aá€Y¶ãÎÊÅÒò…Ùâ`Cë½SèB½çÎ %â»¶0^¯pýf¤9=L.Sn¬Þ”>}ßL)ïFžqn¬\ÍÃû²K³’e%o‰MIÆ\´l[öVžšqf¹œ5((j‰µ¥‹³…$’jù…{UZ³dŽ&ºv¦ òH4ãΊ–f]¡7Ë[—4Ëk®ÜYA3^ëG*Dì>4mä¢gIÂ…Õò—^Ül‰]ækv÷ñÉê¼Ã˜ùIWÍ®*l>„ŒGVÐ^Ê|£N‹aÏeââ°òÈj½ÃŒ·Gð;4—mPKiÏyg…Ò´ uË X®gœ¼ç‘\´ <Ô¹!éÖAwvÈxd5«K¹º"XÐdÌ;YÁš¦g¶ì…v¯å„«é¶„å´¤l—ìæŽ+¶J7“.Ì£ÂÍ¿?,·ÜYMxIÊad”Õœ&kÔÊËF­Å:[¶xD"CFÒ¯Êé·ÂÕ²L'6žGúœ1†µb¦9!fÜY¡€é¦CÒ¬j\Žú}ˆŽ#ã‘•ëÆ3l„ØÒôýu$ê½uïà‘Kñ ¡ä…¸/׋ µ€#~}ÆÕ4=;NP}f1Fq-ëȹ³W½ -E;íagÏŠÐî2®¬”Ї&=$9Š=qj%Øsg…ĥ݃’±# ÕØScfUÒRT> VL>Ùßk+¸Œ<²‚‘–ÉþÑ·›C«’rÉ—8wöªø°:Öý’ ` T}ÇޤΕˆsÙ›CSÃYÁ¢'¨Æ-wVK/­á¥ÞêCÚš~RͲ2î¬T¤E˜œXJ½…gî—ö>!QºQg\Y½êRÙ‡GW¬cK‚îÏ–Õ8ãÊjˆµx/ $¢´ÉJe¯Ú»ÔS5¼•ù("O•|`mæ@†„åÉ£Žíçn[Óz-$ ùãå¯)¶¼ðÛDæn<³W”·8Xì´ÄÐüÖ\fóßà.G±~KÒYzÊœïB;yqÆËõL #ÛNj$óA½9<áÊ ñp{ľµ;^Ú1œ«3l•FØn¸Ù†xÊÊ•Óêˆ2[Ã1Ó·žÎʸ³WµéRSf@2“jr0÷ïŒ;ûªøS½ñO‰ý~É wÜO•µú-©QIH¤Ç% ²š_qg_%‡lÝw|±¨ ?y¶ÜXÉD|oÃ;ƨ÷YB R–J‡Œ+çò0.Í(ÞÃD˜¢yU6Ço¸+s¨§Â]Ó°{î¬ù4•i™è6ªé263" Ÿõ›Õz‡é™™òIØ\Œ[V+k‰¬¶E5ëêhÑËÒ_-²Z-™$ãõ„¿„bÜ(ã¹ýÚb ‰¸˜dâ ¾Ç~Ç#+j>”œMFŠcšÍÑsî¬V±¥yÌì+|]k‰3Y=êQ˜b¨e…—˜;ðžLÎ…rL›Z,„0Ûœˆ~cÇÕ²yìpê&Äqßêæw«n¬PW<©Qêq°T´P´aþY(7VªW˶ž\»õ`Évʕի7éƒzdM©†t”ž½ÑS0-îKÛeö톱™|/Óʸ³r^ÞYöX\9¥ô;Y©E @X·øð³7?ã(8£Nš±}ÁÆ9ÞNX¸æ,êòpjŠ…‹8寕ˆ†Ò8ÿÎwˆŒ «•—†œÜ5ãùOO\oJ‡f˶I‡éõœœòÈ mKˆ¢A;-ð~69wVê< -Æòìå¦;¯ÆLÓ¾‘ -Ôþaô°å3éáÂ…Jâ1ÆÔYâÃOW›VÚäž•ts»Gþ…m©hÆ#ÿþñ‡ÁFMqé’ˆËÙs}Ç­õUo<×w—'#˜.\-w>­§âÑ=³<ôÙÿ•[´~‹pïfG ´X{»s)©—Ž¥w!=¿³dMµYùx+ã‰nJ¤±lWÝÉDÊõ Õî–´so‰xbî©Ó<㬸J³7W§–ÞúOµ0Ç8j7ø„;+–âa>B°ãc¼-ä)wV¯ŒÇFJ¥ Þ"˜RˆwVNzèîß YÙQmÇÕŒ¥³VáœÒ†0…‡3MΕ4ÔÖŠž‚êÚaé({óŽ;+i1X¶‡U /5rË5ŸRÒªU·!½6ê†žÚ 1øÝ1çÍ|ôÊ]—S])ö HÞ‹%o#3#áÎJ Ó˜}è+í|ÝŽµ[î¬X¡Ž´ækÔ$͉Â_²pcõ¶%¶Ð78äZ‡#Æh¢ïX¹³zïðìç6A,:ÜlpÂ#«iéž,A©½˜ô×ó*ãÎÊ¥ic]™¼ž0÷RŽ÷+ç-°WŇ¥&h8k—úJ¦mÿ8œNrî¬ThÉ$™­I¢E^`lj‘pgµŠ-Å7hT/±&ìª0ᨪâù =A·q\»O»‹VÊ1 ž¸ GŒmþ:Aˆ–òÈêT¦…ކT± z~1ÖƒoÆ•ôˆÉvqGôªl!ºÊ¹³R €åºLj5%âŽGVPß¿A&Ìg±µ9H¸³R‰øEÈ{cÛ¤£qÂ[Íw8h†=Ù)Wšeø2n¬Ö…xw¥ÇÕ›Õm­Ù[¹±Rµ‡$NÚÿa}7—‘ÝpaŪK)9Ævn ßsO¸°ZµÈ¥ár[„ÀC¿6VkJ÷£!¸¸ë0ÉSe¯)Î^oTë0½Ø£Ï²öƤÑ7o9÷¬Ð;¬ÆØl³ç´¥ñ kí¾»rgE»Óê‘ïBi–œ‘âïªö‘òôJÚ6ƒOÓC›œ ü(d\Âmt­qÓwÚ‡g?J ÄãB…<änrÔM´èuЕG[ML‘4yŒ}1Yn„ÅTZ­¡ÔÆÍÄÕúmÇJˆ€Œ¾µ4ió¶^·î¬Ðy8ögY-¹”jS©wV(k9ßBr=Õ -o–ÀX­ŒÇ²j”èqã^šqí?¬ë+™>ã¬+‹¶ÜYA±¾ÄpYéW«&Ú¹²r#Ýqgµ¶%éUºT´ ÏÍqéj¹³bíx=zbº7ÁÒ@‰‘Ëàº-HVXjü©1¶5²¼EV°È±yr’Ø€Åß팫uxP;Çp„Š^ð±­'ÇTÆ•ËZzžT›E«e"÷ÜX9z¤¥Õ]ôºë¿ ­{DVÎ"މ+d#™ÛÞØq„£Lycd5›µZ€®€åÇõ÷ÜÙW¥‹ê‡'MXš¥#T¬ÍGÎiˆj)Zô•~ “ÚÂL¶Y½UÚÃÜ€…Ã3IDATî÷°ƒB_à©(ãÆŠÉ–4õƘ‘Å:ìÑRÁ‘qg¥bé0¥õ^‰SÇD‰ŽšçáyM:G‡êK9bXÂËœ–Ö¶ÕS⹃ØôP?.Õ™”Sþ:\2”(+t·d®gÜ,eòPD?l`ÏÕj!ÖZRäÐÃI½§$ûÔÄ3á!1X­K|ÛE[*ãàlþ¨ÝÅwÜX½šnÒ?ý µuTæŽ{Õ{^.šéžˆ‡1Ó…jÇ…ôˆ·|2máZ”y°z;ãÆjyâÑËÜWí CRöÜX¡»%÷¾Ã|gâfiYSË.¼EÛÈR«ô»ñù‘ñÐbøžŒµänË#«uZ¢…ƒî„&fÛ®’ßóÈŠ™zdµÚ)ÍÑÂ}^R˜Ö¸œwýâiÕ?“Ƨ–òVÌoËTî0©ñ@h”Ž ¬T¤[]yf)ôÛûê2C½ëõŠñ,§É=wV0Òâºf%Ò¤ð6ƒ[î¬tí!OÓ|~ƒ¼ã‘4Å_Ý•‚í¹ùm­Ú«æCY¡ÚØðöqíÙ Ö2^ÔOË»J3©7<3Ûqg¥rZÄ~ø{>/vCô³Ðʲ—jKiìHFvU[2Yc²`å‘•:NÀU 0F^2ßóÞJö†zY¶õàÇ{¯˜ÝqgµZ—ÀO°X=À™Øò²G¦ S; Œ¾X±3ØìŠ·áÆJI´¯¦¨x\›xz«ÅÄdÊ›±‚bëå~¡€¬ô4ž²vÜX¹ ñ0½¹Ìõ°d/Æù7VÔmi†Íá î—¤ÍæzàÆjÝ-éÐJ)í²¿ê)2É·/œm-†ûÓ‘Ù¾“„ÍTPTðEî¬fhÜ–8/Ó[‚¯ž3.¬–0MßÑîãLCN­O#)7VJ˜–­_P§ÌMšãϤqgÊ#+çk’p–£d÷ Wû8çÊŠuÔâ^‚Ô¥m_€ Ýá÷ÜY9·¥™ë¡•îÈ™XEß :ãÆÊɇCô¨euGˆ9G SÊëõç\XÉ>£/«ÄÁ£/bØ~D¾²áÎ Þ<¸·6bê³"(ÞwÜX9ÉCkÖM,´ºŒ9›y»z”-1LáéÙÚZ裖u L¸³Z«ôðñ`œÂzzreÀ1vÜY¡Æ-VVRJòDe7¥S|ÇÕRñ,¾X~Qæžð掘ðp/U©ol™D 2FR+9ÜŽßsϺ[êá/-I‹X¿3Á¾tEXtCommentCreated with GIMPWŸIDATxÚí]KºÜ:#ôyO=èÞÿ¶ð,‘)WÒƒuîà&9Çå²õà)üÏÿã/þ[ñ—ÿý»ðß…ÿ.üwá¿ ÿ]øïÂþ»ðß…ÿ.üÿ|!þâB "è×¢~Urg+š´°~uFèïÿì«Ûäÿ‹òK\_Xõ Ã_yGÆ °~^†ißD}%±¯a Àxòàù–@ Ì—Á;àŒä·žG =%b½Ÿ~¿µ9DØO³ÞPfä~…÷q|¿šúÂöÖî‰XçE ™sø¬äW¿w¬»`Ïù;±öKçŒ0Î01(o¿ä{höÿð~?öŒ¾Ã³ß²Æ³•ˆ Ïy먙³ï #ÆzÇûÙ)¯ÿÞ û9y¦ ùæï·Ã¶Ñ“ÿ8‹g?/Q3txȨ……zÞóÖµWöG÷:ÜSgѯ³ZˆÈ±³áÙ æÁÜvïÂÝ 6€=Ž ™ß+”Ù_gu꫌ O@çX~z„½(Î*Û_Äï2Û·mõ†|:ðnÛç{çîç-ÃÔ­Ûóý²¸FwÏÌÍÞùß[9ßÝš¦ÙCL»ÿûgäßúü{.üñ«ñíä`/Ëo™£5žÐG޲x®~FšwšáVBŸ€'S 1\ÇKä\ê&áÛ‡ñš½t×Çž“µ¿·¹YúµØÏòç!Ö±ß÷EÜw>owܰù6_²Ý3ަ¼‘oôdK]4qî cCðmœ ÆÛÓLqk¹·ÈÕ tÇ©Cä›#àžˆ··U¶]#âaúf¤o ]Ιڅãâ·C‚xTuø¯CÊy@PÆ5Ïy¾cê ‹ º˜FÑl}­:l|­-|ßPÍ Ó4o/ncPŸ|ÔÊRSÕ׆c†ƒÜñAnÝò h‹æ¨ûš²ó(!"ËÅÑw (QUùᕳB àÔ¤ì±\<žÈ0ÁŒBw¡oxߟ=hSy®¿¦…B³¢8öQ‚"|EùjF’àóøÜ|[ožTüv Ëã‘?x.æÛ}¯¾ÐƒgÙ…ø•q±ÜÇï»ÉüìÍu¹#ÎjªK×e¶‚c=žgdÅ”L"sHÎÍ É 2!éæhX̉Z¸µ r‹²>ÈrÑjÿœœ«>%éëE¦>N|¿ñ%Ö\=4•†7( jð‘Á¦sHdŸéž—ls½òSè°ßyÕHQrhöØÙ‡FÇŠ¡îY©}¹Bä÷ç;m&Å‚±²Ëwu#WÖ£™/Äûgèp‚n“îõx(ëyã¸á׸ÓR5GÙ£GRpƒ@½u­È½ºyòÂtqÇ£Ö>9CÈý" ìíJusfò‘y+}A4”ãìk¹» Þžë„XȰFûž5¤C’5EqÓK¬kÊè?Ù¹kT¨UþÆaÜâ~Y·uK Í}p¿ |ÃTÇß«†ôòåýwä=Ÿ© :¡¦³aŸùy´{n&)wÏ̆¹S§ ;þ~K÷Ð/6ﵺ+ãǨ.[Ìø‹¯þ5Ü4_H4Ù2çÕŸ\ŒC9$䀣!HU;è—†c/¼ÚÓ”»1ZöñNaeFeJêÏóœK=?• ÿhhaÞÍwŸm›Öl›aJLXϾ†¬eè›2÷è Ž€GÙ§ì(3æ>ãÄôºûOˆ€àN¥ê5ÌRpÛG¢~I[ÎÇÖ\PÖ¶­š+@&ˆ«{_"v LªFU'€_Qq%mÀvH몊ß^9+¼X÷Ú ØëyÐÖ!l‹d^xô#w!_Žáüd;$àfs)¶‘HÜvj œ˜Bv<û¡{tÏzæ§æýù²J={x¦Yº§Ï´ˆw¯¸æE¼ú™çÛ·¹q^?QB—×—§:È{{½ (ˆî]qùf~¿5.~0 Ûk)àí¹;ä`¿Ghì¿þKïÊ™UKÈ¥°bÅ™W›™¦@Pm™bPWÂÐ4 ÛlhÁkk_é+Œí)ÌŒá¶}ÓAëÚÖñ` ݃ÙÛ0DâûA@ÕÊñ€9{_ƒúÕ ×ÏÄtî(€M&œµ¿ÙŠXLh1½m=kñ$o·gc¶2 %qP3³-ßËîQ§íù ƒÙÖù4Ú”éžÁÁö $ „×4 +“ l¡_þ¨Ó01Eö]ˆ[ÈTo#­9Žà¾>%k*³—ù¼¤Í¤@È{.-9³?%îÉ…Fa#)‰8Õ>âJ‡{§»>·…|€ Gã´¨_NÓÌ)#>¼<@«P¡YQÜýÎâÈ naûÈâðéÁ¦//.nRç5ц꠮mN£ÅeºtÚœ¯€æç똨åXüK÷0†}¯tk/RÔ9's…¹TÂßšDªW;8)£TL€oŠ;.v­‡ÐHoxÒÒrD…íöœ/õ¦à ©‘½ÃüÇE»ñL6Uùá&j¸  !fgšÍ³')•o¦‰Œ˜°¹£DgöŸ_ƧyZRš¨)áô¾*sÞ;)]̤þx'7Ïeƒ ³Ø[b§(Ç Ýcªƒ*ò¨§3Mñ¬LršpN&ÃXt×x…wHp‰¤× þ8­…8¤¦›é¸0z0L BÚf[†ñ SfÑ®Š·Ñçµìy0yŠc•žß˜™füò3"»Ò%>¸}“rüâAâXêBÖ7#Ã[>ãiS®Ø2cY‡‹G.ôšH¬ö&Ö8C¾B2Ôhñ£æÜÏpÌXªÆòÖÄhìAÄ«Ka•‘k#•\«°2Ý“­&¾™‡B‘AÆMm‡[ Ðbæ&â}œ‘U¶Îµ Ϙ»árø!ž»b\~©3²Ç%ךŽtñËo4Ømaý#ÿâ›ø(QçħDôÅ¥|SfBÜ0éî‚´Ó»ÒÒ11õm®OžÅ¡»á÷¹1ø¤óÑ}£ÆGóHx‚¾×ðôL©Ø=ÜuÒs÷ÅÓÀiˆ 5/òaK!r=~á”+â d‹5xŽ8šaùªf ú”•H®Y©Û[_xD!jU”„XÇÈcÿFÃõ#PC™fñð`é8¨eh«n8bP4 `3ÓÍ˃ˆ‰J–[z3!rØ””ªxY'Ó;ǵ‡êg†“ÝÉš²Y•ç•Ù.c/1Ã%·ØÁGÃÑÕv„ˆ;Ð"Kç…>»N–T1œ22ë¥ù˜› öŠ¿æE¨Wb–ä↨'cÿÏÆÕrÐí–¦|0Ï̈ºúnq§*îCìΉïä JÙ8º0¶\H¤þÕðG6D“é¨ÒÊᦧ8QŠ‚§¼Èí€*é®:¦dÅá7 ËI‰sÐ¥mZ¼U9‹±3§²„Ñ”©Œ^B ¬½.Q‡iüIGŽ>JdË¡ôÕÞm™¹y™BÉñ˜Æˆ&b”c'C³¸&ZrmUð­Y€N£ëHcP¿jX× ‡6(¡xN Cû–*/c³©gNx¬-Zh]#ñÏ]ÊÕu,…ì`¥ßañòl4[ÛmD*ˆNЧØÝ§iH‘Jôu5säGø$šB¨z–Í"¤9`Sº@QLÍ_¡ íÑ¥@d13:œ8œÝÒšNtgq×RªÄ*~“5ûÏ4P;ÉýÕlÂñ‘V Õ³_ÛÕìO6-¦ÊŽW§„‰ Á2ÍÏ,N|Kú :5dj/« ^Áè‹øË…iÑa¶+Ïõ‘6ÈæÁÒ,ÞyƧJ9gFªIžÚü°É¬äB¶‚@fí•XÕ©„êß8¢*òHX3wâ ¸ý5ÄÖ×›y‚ Xèr‚Dd”TMl*Òf_ƧtG’TVÉYCº‘rGË_z”ø"qœÜÊ-Ÿ‰0nØ´G%–ÆÞ­ò@‰Ó}°¹¸cüÙµÕ]Ü Ñ õ×R8|£].i€¥È†¼Â<.¬0‡gt¸U~BŒûÐî06´ä"¾*]ƒÒÅ÷ŸˆkgjÁò3=7èd }Îð¼¦Thތ̹*€õr“è„JÀM'.‘þòÁ£©].„Ø+aKê±Ð°3|@ñ‰w”ú娧Âö…Ÿ%@ŒV¦õåaP‘›êFUúï5ù\ÀT™+Ìo; ©#µÇçXE’4ù؈P$‡ÔÅÔ^Ž—õ®”Ï«©ƒß«‹ià:³˜eYé\!­¥“«rÕ¼_Y—,uA y·‚¡ÖÝ6–¶ùØìÇ|©Q¡•6>] ȶ¯˜úGv@d.eT9G¯%m;ûpHg2dÊ}ZVäã¹ÌýBmìß&½ôòÚF÷"S¥CÚNPØÝk"¹#‡5œRÌäÐ r²¬º±3zu7$‹C“‚¢Ã?Œ‹®™t6ã+ç‚CríU\€Oë· à ½F\]òsýJpèé–Ãþø|Þ'À¿’_¯»ƒþºð êšx6˜¶ð ÚL4nu:ˆ-A³ÄŸºŒöŒììÞQΊg\=óê¦ÉsŠ}ód‹=kk9ƒð…=·„ýíØ¥+/u&Ûizäûò”‚*7ìjTßã^3ÛH'–a#…dÆÔ¹;’è><5Ín§ò÷0£²/¦&aihÍÏ*›R‰KÚv?„V~Öí+îFöW8Côóši‰Šüª¾ä{8²%ÞqÄOw<0~S²ôϬœ!%Š2D <ú7­™29ÅáXÁåè#ÆÂ{`¹.,ö´ÐìO yÏÍ×5š¿IXd§1$‡in¿‹ë†3uXV]Z¹-Je‡¦WË?œ¸bˆÊ]y3Ë0¾pRUZ-4`ÞL8«ÃÖònJ³¾ñÌùS«ä"KeEЫ׫ Ùäg>Ø©”^Þ°B\ÐB Qt&w/o¾!¤º­Í†KŽŽmé\U-€‹pðGŒlÆ»S‘,#õ¥Ïà¶K‹­ú/z½/^1R¯?{ãéDlIBO§.N3`ô,®•i%B!Шñh]Ãu*í°ž7UŠJßV-ÙÔ@z I°y*.—©£¥Ʊ¸çSžÞKìÚn"Áa ˆÑÜ„¦åƒèÃ%A\ïHÏà´|PÂUŒý$+¥•X 4#-/D®p‘ß"‰ô²K_ßVgMj·gRT ]2v¶’j¶Òås“7²¹ãáÔ¢ªš-(°â(uSP'W¸Hñìæ×¾3Œ«‡õ÷âæ”£Y—J“K¬F)‰#¬ZWç—[‰ë¨_šèð„‘ŸüHð§Äç3CúJ§.i ¾¤ß¹¹Ü|õlÀÐÉ1ÑÜP88+ÅÆK9®ë{H$`L^6ÆÅâ>=[לÆü5-` 9ÃuDmšƒ–3¬:UäÅžg€¨>Ó€VLFéyÅ w2ìq/¬hD÷lz‡­—z EЉ„|µ <ÊÎø‚YKZ6Â@R"ùþ§—ÁV‘ô® ŒŠm_ÙÏUƒcËÕ[Û¹0dœØöÓ~Ê¥0´7Š"Œ¾‚•,CÒ(t˜;í«ëN6½K¯xVuk¢cõ ©‡S{ñ…6\€€j‰ƒãcø€–ôÖ½Áõ îßy®®-]ѨŽ^ÕízНNc¶Ïf–¼ OèuHøf‰Ö]Çõyáµ·Ñí¦»æÏ;þþú5äÔ—êàˆK=—ê0f3ËXV'ìŽ1z‡Ž׿/Ýñh[ +cõ¼WICSô PÚ³®Á4\G¥ËÁÐžÓØ Øôrå4{Ô"-ÚƒÑMéD¦ ­×g§ 8õ ià“E„‘DLù“ívÎSÚm…ˆ´n›Rl}eµ´ÔFùvÇî-]Ð{>@„U`ã­ ÎÁ³SCx¿6l/"íË}–sþ:»“g†ÔD{†(ê°Çcd°)‘è ÒËÁ!ÉŽH÷ÞŸIµ†«Ç‰V#E[¸®µvઢ—§ëõp­ÜMA;´¤à_Åf=ëèHDºŽ>­×øgç×üŽÛ™è ¦-æ4†ËŠžã›‰XW½î%X¿|‹ŽÕúLxõ…7?‡IÚÍ·eôùË•u_bÀK[ž>Ç·œëÖÒúÚ0 ÞÀ0ì 1+–[Ó»VH6@‘ŸàÕ˜ê:GWJx³ÒQöÓè+.kÐÊç V¼)[Ø5j;Þ•1Ö|:ÝGï·KÏ ‹æQõØlM"L4›â =×0BW MÀ¤wµfr½»IÚ°ØfSR5%R¹ÿŒÆ!ðÌÑûÄy²[Éì0·—QN˜ˆ’ÙÂfÍàè'6h×™‚k™½Sµ”£n.gÅb»ØÈ¥­…Ò›6¹r5#"ÓÍU*J/üjŒK퟉fS'ÇO§ÉXFUêògøvuî£qCÐ÷b•h ¨wDß.ò˜Ùƒ;M"WíÕ‡¸¤£wÎ5M¹5Ǿü}]% ü[eø·„ÙÔeá÷%5<îmjHh h~æ[*á½Ã¾/û³ð¦€TÚÅM.ðì­1 0h ŸâêFsƒÞDW•ÈIðBÔsćÒhìL5 %í8šÜÇ¥eU±œ‹z/¿‡¦ú› j¹a-"[K}4_pä°y„óŽ.ä¬&9SCëSçÕ>âÒ ‚šÅM¥˜'a¤€Å͉Vº´Œ]ý†ºé † Ç•e©N›wR »[ÏGéw–­þ41 ´’W{‡U‰P“±7­üNªƒ~tü¨‚š­5öÁPto¬§g¸æ×`ô~}ÏŸ„vH?pHjjÏ^,…rçx³f½—¾ ‘Ÿ‘×à*{ïØ^\¨’õÓÜÈ&|$f£9?oýJ©è?ÿÓéEÒø­/°mÆ£,’ 7ÕÐòôáäõ«/Ÿò qévÁ|֯ƀšVWd bàq,Í^cï¶ÃÞ_øÜá5yp\T½Å¢iôèmÌ¥Ûcõ<¼ki0^ðJì ³f“ ÆáPXï{¸·Éó}ô8½Z ÏŠJ‹ãÇÕ̉yçê xÃH6ЏÃk-iì ni–V/i“lmEèâq*£‹øã£ç”\Ḏ֗C“»y`å.e¶a-ÿJôu–Àê^y@ŸŸ ”‚Ä<¨ïõ°OÒT!‘³¦²{èèA6Ô ¥aÇUU™Ü›ÚcžÝÓ•l+¨=fž"ñÏ3O¼¼Tjëacw#Ï{$õÝkäÖŠàÃVÿÀön´ .íEϲc'›è)~šlô¯ÆÁÂßÀЏ¹¸HþÁ!]‡çÚOúò8ëÅܲÒu$®ÑúSL·\>>I8ÖV Õ§á#í{ì%ˆ‹r‡U‰ éµÏ[ê§ô>Z¤å„ŽõÛ»(cd/4©·³gvÈj™-k؆µÕVC o‰:ûΜÏ””OÆöé[†¹¥ÏMFFg÷Ük%R¨:84¹XˆC‚<Ó¨bj>0ìÂ…£ËÒ‘,–,Uü9Îu¤{æ0Só‡s ÅéJÎÐÆhé'!‹–mŠÃî Z¨ÊRq´íÈ.½¹¸¤WÅ“­!hó )L;¢»·àSZY‰¨³’})L= Œƒ€€wÍbcu¼;Þ-¥y¼ãdªˆÁà…éÃû³~†óŠÞ¡ájvoá5>…i6—¿Ò½‘úµtÑLp¨¸a‹£03¦:üŽ˜OË‹`Àü_FþÈ"E üYåÚ™?®Š }w….Š^̈‹du¶G“wM§–i¢Æq1OÀ‚ô/¨vÖœúU ø•‰3îÝñz®ê/…ïÚf;Õp\ÙXf,(U§„*C®¿?€·q:qÚbdPoV‘uÊ€.š•pZãøATÓ;¶#æ1ôRËήA©³Ðó˜fŒ|ægàèFBE¢u=€/3ñáÜ9âq÷YçtœRÝ¤Ö 7ûÑ„Õ2ð^Vr¶bÒWZ>v¥(2@ºàÓ$c4\í›ëz Ài—€^>¦I¦1»¯ («OþdzjŽ.¬³<¥aèTr?½iÝs þyኒ!ú#­6<¾ ¿¾&ΗŲþ4Ž‹ËA ãD®KÃ’¢ý`|§UuzÑ­‡˜lùÕÕDýd?jÙ ¾úó,Ÿíx𛈆°h¯Y|;pÍpž¼2wÑXÞ?ã=Öõ¹:õ»5QhP’ž:œ¨îü°s±ÇЧ-Ó¿Á9/ÜåÓ"ŒýæfhÇdR‹¨8BCØÙ›ý°R–U]•8‚Ž+»IœÓ-LñÙ´Š¯è)Ÿ÷¦#.7Û_$þZþKÎã˜W•º‰|CNw÷†í–QÎZ,½í²hmôN”\AÊïzßàqá"(¡dï!‹è?øúÒ¼­ÉB1ÆñVTD-l^à1ƒ– Ô¸ì"6†ÖOÔæ‡Á‡ê¡ò´AÀ²=pÝ5Ž fÇIßgþ‚Ù±QHG†]IEND®B`‚fs-uae-2.2.3+dfsg/share/fs-uae/ubuntu_12_04/item_background.png0000644000175000017500000001136512162366653024335 0ustar glaubitzglaubitz‰PNG  IHDR`V«ïsRGB®ÎébKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEÜ 0)λtEXtCommentCreated with GIMPWPIDATxÚíM²#;…•9û`@0b'ì“U° ¦Œ^ðíàm_•*%¥TåŸ{ýG»}K?G*•N¥R©”@öEÊÀ›{pyØÎ±úª‚Ã&òEx÷ÓõÊ•;Zh¢xN‘ñÂÃJgÎï(уo™¸Ð«‰Že§Ø¨ Þ5ˆàXœ¡W¶ãzsFë{­L°¿*„ÆK‰Ž GÍŠaŧ÷B¸Ÿà#8ž.:¢‚#*6NÎo5ñÑ*cøuJé\ˆŒ—Áѧâû) @<àæñÓEp(½ ¥cï’Ê©§BtœÀC𛋈8gÂãìˆ ½¢àðgÍøVˆorM—ÒÖ§ÁÌãw™Ø8;â£#>µO)2¾eŸSCx`åŽÃo/ââ»#:¼å•—Ö'G`Ô>×ë¬":Àñ‚Ã¥Ðxˆèqõv£”Ë(Köï’êÖŽriÁìÃÏ)¥ÿ‚ã{z+‡ýõ/Ú¤Ë쯊 PGäé=%!GÍôò¬•“:uõʃדxéGNf–$%3k^×»¶•Gþ÷¼ÜV9‘<áàÅø‚¼àå¤_þüÇ?$¼Á ¼_ðz,/Û\å%çÅþó÷—uúKÏ?ë¿xaáÀÂ…ƒç¼.r——vð²¼Ì¹Vv`i²¿¬/8þóË/xaáX8xnŒñ² ^ÚÃKs¼V_îÑ_ö€þZ[%êýea^§@ûEÚªÏë#‡%Ù‰'$x㩱¾H©1A»½ ,z‰êI­>Y6g±fî[aR-š¨¨ ñ±´|!à]5GùÚ%Úeê1I»½c÷G·jòѽe­Êÿªú:2Ú8Šª5 æ¬zI²JJùŽÔ±pD+§01¥Eª¬ÉÇÊLú#nÄè­¯çðzé'¨ìö°1ÞÔwY?__ƒW”ÏvbVuÓŽö‹*Š”õL{×™¯ÒkMå*$mj¡ª$°R£8=—`·2߯E:#8àõ¦‚Ã×ýâM}×]Ëøú:¼l„—êßø¦X|*ÍG¨“º²ŠœwÈŠ½óߨcOvÑe…øÊ!ÜÔ»35µè,¼ÞXp|=6°bÌ´&ã ^ã·“ãè)ÊSÐÒÑ*Ú‚¼ºÓ°¿vD€Z«*„UHØX¨¿¬ÑÞã/_Ö½ kjƺ;u:ÃY‹g^óÖííš±JzUÊ€×syÕotÍT“×ø^᪻ÏÍk,}Œ—¼_ïËË«5æâ]¯øëWéÝï 9–KÙê¢æ µU€ŸƒëIc~*ãoåO‹•kÄñ§¶¶×Ë7¢øH3ã ¯ûóÚûÆuÔ5íº©ù&ñyyÍö—\‰Æøúâ¼,ÈKuŽQËË.Ë3Ñ[Ç’±[ô´¬6l 6Ro“Çœtˆlí;¾––¦íõ‹YÜÂ1B+z*Û§·Æ¯çózèã½ÝØ¥Òxc?nñõÙyYŒW6s·^¬·¼ÆÇص,k±É® 9bVÌ…6ÛèwÅ5¼Vmñ®³lºV–ñZþb— ¼ðá÷;ÑqÀ匯ÏÄKY¼É/MðŠ‡“ÊRÕH.Mö—Úýe#o;:®i‹x‘Ì暦dî–Ù…'-xë—wš€û*͹T]:N ¶[æª}¥‹Ó¨"/CxšÎ ’R3 X™ó»TàõÖäöãÚ”ñõj¼ÊÅ íäewçÕoG hÃBÈ]ª±¢üQ’fci4PÙ mäc9Ì&¢j ’‡÷H G@>$¿=1¤Ò UR(ž¥·$ãÖˬ+ -¥ã×sm¬a›2Qm>½v-7-•]Æ@¿}h§·Áì)d3"FÝu³cu”n7E6šWжzµj;£”.²yÇÙ¦zŽ«kg×"¥‘­¶VYR1–Tàõ^¯û‚'æÒ¦Þ[Õf|}%^Öçeê¾·ËRŒ—µ}V&úËÖój8}sE¤ÿ—Û¤oñþ²@ž]‹Ä¨P²œÈuò]XĄ̈†3G÷Á„…ã;ÿ€4-§B;ðUFå«û~KÅn‹‡u/ñc†¨y½—› Z$êdŽ8çÖn¼®ÆN‹µA;ûÝV™ýõÅï9õ§umŽŽW·ê–—öÞ\UtˆNMRÞ®²ÿ&w\•±K^Äá™_oÊK•éÔîÌKOì/ë§ÔzN>püxí²·26w®ÖŠD÷†³µ{ºÛpè-}°¨Š?K/ÌÙ¨‡÷Ÿ|{²RÀàDnÝ–õáØRå`ñõ«eæ¼=¼© ¼â鵞ÀÅkh%g]ÇÚ^Ï^³Z=±Éþu“:ÈÝEq ¶Â!µSñJ݈ÃÜy~/Å‹îZSëW \Ó^;8‘<Ì¿–%wÆàY OYR™‘šJîqŸzáÍCÛ}­z<ýJ†lÂ¥×dŠüØ'á-µkR‹„Ó(¼à ¼÷› ã ^š`³›—îÉË ¨~ˆ#èfWI(¤¹­Û¶¶rÍDý~q¯p¢ ,½ã–9f^Góïó>Ëø‚×Ç;ôoå¥Q^¨£¶õôÃh¹B䆊!ú¡ì7æ[?l|Œ§UÛkåóÓ(¼°p,<7Ä+2#ëɼ”6N’úCuÛК<ößS‡µ_wjÃu­Ói}m¢À%éÞk÷&?*âiy¬{ì˜z÷J•“·¦…Të:s¯±Ê‚ш´Z˶EN¤Q,ðÂÂf{ñõ†¼"ÛO¯kúz’…£··_X8䇯| ¯®…c=a“æ†ëœ?já퇚…ãfU°1 GV§uJkìöñËùHòQ³…³Û±Ç>>à@%j³ ï‘Ìö»mäÿ±*„·»þY®Ž…E“Ew#Š®"Ä.†’–йÛìfÈÊÎR!¼°p€#ŸàŒ¯/ÈËü i˜×„_æ8¯Âi3‡CÇô—­'ÛHÐð”ÔÔ+júghušÊ¶ìš…£í¦Qøq˜¿gEêY8.N£__Œ—Žâ¥ÀY¬:†—ö´¡vôÃȉ³Û´y›+pCdù¹>–/æXûÞ®¬Gù>Û¿aá€uÃÂ/—FxùqÎ+"µÝ%j½Ù«2ãÚªAÂ>ÖÍý¢>,Ø3õðñ~аöAs·Sa. ¸÷*Ï–D¨QðÎs(æšÌý9®;ÍjvÞáÖ>׆ùþ ¾P®º¬nÝ9ÌdÛ\­´r¨ëv+OÃ4ÅÁ:‡|ì*6ìæ¸žê?SÙ¥¯÷µp0Þ¥_ðZÿ^|Ó¼¬6éñRýKkÞì/ù¾*…XEM©ë?‡¦³Ïu#¡z @×ú™¿ÆS‹#¢¬Î´˜æÖËX‹…×—2 >áe|}V^6ÁK;yi¬®šé…tóc°Éû·ÅÅz|ª~0Öl¿<¬†ub—ö‘NO·¶©d5tƒY©3û‰ei/Js‘ŽQä(zxÀø‚×/ÛÃË6F ÔÛvÞßn Smfò /'hEÍ1sì|Åf•yª™{Tª@Ï‘OÏã¼ṏïmŽyØuڪ͙fòsª»·ˆÍ0m‹Ž@ÉchH決X+½@ìæ›áËV)©`¬m»˜s-x½·…SÍámÄøúä¼l—îÌKiWô;@ì&|o’( ¯a¤¿díÆ i7«šgj"¨²¤Rþv«ïv÷ËÂÀ§á¶ŸWOjO³ÜB‘Ôà6B|Îv³#bå–ßü°·Í.¶‘qõýð55âpÀ ð˜ùŠñõ¼T_æ_}· n6pæ‡Æùîz°™óCwÞ8åMñ Ö"•þ°ÎX#ð—ïñqæÖÅ6~vÛ\Ï.x=œøú`|Á+ÿÝŠÉÍO¥¦ØQ&SºA;¢<ó€ãã`ŽËfî RnÁÑ@Å=±¹ÒqyíøiYQÿH5¬rŸ,ÕLòE«Öß÷þÞ*«÷ÿV>©“'¼àU+ƒþ‚×;ðŠž8v¤5`S¦îP–\ËË^#FX¾i´$ÅûtwÿøñA¤ºpQKÔ87‘2•âDàMÁºP¬0eÖÜ¥ŒA &Ö‘Äú±ºÄ©Š9–E,¶¿þ)éf1ó-;ÍêoÖÏÌ·¡¨Á!SÕ„U3e©c?sMRÖ¸'jeuþ_‹ß^Úù) ^wçUÈcÔækƒOŒVYŸ‘W:ˆ—ób|}^Ý(a›H¼[˜DÂwe†Éÿ2°\3¹O¶ÊJÊ¿2¦­s½­åCZ-S¹¼ü-µ*œ]ÓØ3jô™} ¸ÁºÂ ¬Ïyùe|½//ÍÜ “·th<’WŸ•µ/µ=̶!âÕC·0]]-#2M=eÛÈì´ÚÄrÙk•­; 0x}yÁÁr‚ƒçÆ¡¼î¥ßÍÆxõgóz r5ô‚kd²ýeÇõ×öÚõ¶!«Kµ"ÈH~‰¢j{”=b/ZΪ?‡güÊô=åk;žý-¯Vyðz/,ïÆ×æes¼®?Ì.pH3¼l®¿> åœlöÁËø5Ÿ“æ¶1{¿[cy«œ×͵Ÿ8÷á-¼©…¿¼ó|—ßþô‚^áu cIRªY×òŒ[×¶òÈÿž—Û*'’'¼¼_ï+84Ç+²±£ËËì/Mö—Ü_¶÷>4§¿äZKîqž Ñ·üûlx=È‘{©Yì$§æµÖ_(®º‚{åDò„Wã ^=^šäÕšÓ¥^ºO5<ˆ5Ù_éðþ²ÉûP÷á:œØò·¿ÿÁ/,X8°pðÜ€¼îÊkd3Ýéòý”}¾eŸåò)¿_?yºk>á €>~ŸRú_Jé{Jé|ù|¿ÌýçôáVQº‚<Ä›-ø«F׊[ö¯]H¥ŒÌ¹ß2¡ai»‘ÁÌ㟙È8Ÿ\t”"ãé‚£çßs®üM…èøž¶Ö\lŒ†UÀÿvÇKX7z‚#uÔO.*ÌçŠÐÈ—RÀ±‚£¥eãáÖˆàðŽ ºâ\ˆ„ÒºaÉ·j`ÝŽÇ¿‘qv„ÆÃ­ÁQù²Ê)mÍ5çäûk 6€ûà?Î|\ §X7F&ùÒ¹ÓŠïÖ=±àöá7ikÑx ±‘Ò˜GiÝðâ·œ+B¤* àXœÒ Z6f'ýÚaÕ‘ïµ2À~üª"2ž.6f'ûšèHŽÐ¨]ƒàŽÅ7GX¼„ØØ3Ù׬Ö&ˆ à~‚£u ìSa§Y.AlÇá”êq³ž»Sö€rPŸ[õÊ•»w^ à¾sº^¹rŸ½ àÝņ^½‚øœ"#‡^¹ž'ú øÔbÃ; õåê¹ÐgbãÞõü?"ý¤@[“IEND®B`‚fs-uae-2.2.3+dfsg/share/fs-uae/ubuntu_12_04/heading_strip.png0000644000175000017500000000033212162366653024010 0ustar glaubitzglaubitz‰PNG  IHDR szzôsRGB®ÎébKGD™Ì™S¶› pHYs × ×B(›xtIMEÜ-5Dn0#tEXtCommentCreated with GIMPW5IDATXÃíÐA ±ch«>¨EÆ=È*Èl•ô{}Ïì$`¥ÄR¼¨/¡®ÆüIEND®B`‚fs-uae-2.2.3+dfsg/share/fs-uae/glow_top.png0000644000175000017500000000066212162366653020701 0ustar glaubitzglaubitz‰PNG  IHDR€€Ã>aËsRGB®ÎébKGDži…M¡¥ pHYs × ×B(›xtIMEÜ .ÚÜItEXtCommentCreated with GIMPW IDATxÚíØ D! DÁØ˱ AÉL Çcãýêî c-?@€av-@@, €p°X,à`@ €ø1_-À À`°X, €@o, €ÞX, €À`°' €@ À|´@8X, €p°' €ÞX€@øˆ@ €@ €@ €@ €¸ê¯ÏxÃV°IEND®B`‚fs-uae-2.2.3+dfsg/share/fs-uae/glow_top_left.png0000644000175000017500000000277212162366653021717 0ustar glaubitzglaubitz‰PNG  IHDR€€Ã>aËsRGB®ÎébKGDži…M¡¥ pHYs × ×B(›xtIMEÜ 6âÈÜtEXtCommentCreated with GIMPWUIDATxÚí]Ùn1 3ÿÿ/§ï2uø¤€ÍÆYì iŠ’=^üþþ¶MÑZkíG·@P<]r.Pˆ ¥I½ Àß#ŸR€àÉY¯t²  •*žñö¸y¨ç‹ÞRƒõÀ俇Ô``sàŸ­úÀcCŠnxð¬?xl2^&EŸI 0áF£ˆ"G2²o¤çw³RÈ5DY٠θJETLvÙ À3 t- ú¡³¾j¬l¼L‚…*r ú!à{‡H°>T€ÿ5f ž"@Õ²ndFGH5ˆÇ’ ƒŸ%Ý_€"e¸‚+ƒ*À¯$ÁÕ© ±»Â´eŽÏh¹î'ª€À÷_e¯Øq´jGõg$¿V]1§ }Òì÷ã TËï˜÷Ý3¸Òz¤?>äÈ"‚ð+V3·vÍIÈ( ñ‚ üÿÇb!"à»át‡‡C­yÕ²W2 áÑ €âÙoøë5˘L%ÈVë€i¾°àG^«"ÂQAŸ0û›t¨à­Êp]*è‹fø_ÿgSEfyxe#({ö[¡¨ÉÈz¯ý(À‚ÙŸ5ÛYõøJUé`‚¬èZg½üLuÈð^0"‚d`f= þH<¥k+‚¾àGK/8ÀfR@DŽ["®h{[«ÌŒÇ€X½çZŽV€J–ZsþÀ/àÙôàU€+Ò@å£aììg ûÏK‚!Žïô9Ì’ã#`[SgÍ rÙø¹(³ßl €Ÿ½€t¤XyDÌhö[þÒd—‡G÷2õ‚ž‘ã­Í"¶q”éž^ ²ÖöÌû}ûãL 3*‚­Ñ Ükäâ­¦­ äœmyM¡ Ûàh¨0`ŽT€YHº¶ÌZF`Œ^  F­ñ³êhMRçn1m™ý‚ Á1•@_:ã'`$>Le´[ø| @‘BXäý«î·ìóñ®1‚½øƒ1>ÁJv·PÖšA 4…¶}š¨[qÜ kØZ«ñ™ý좳Ë?kÞÿºÉ¼ÎŒ«2‚OÀÓÇ·. :‹L¾g~ïí f¥‚kA g|kþ§‡™M¤–Ê#“O¥€ŠÇÊ={ú½ÆQïŒÇ+ ÀÖþ#ðYbT÷®ö³ÎÏ·<Æ%†w3©·`¹æ£À+{pÞ˜èyBð2ß XuR( SþªÆx«€« Pí <^ÁSŒR„ü£W{Û+¬äø‘4C_Áë¶6‚•‡Dͺ@ö ÏÞ¶ <*`ÃÙŸµ-‹ÙJöe³|À3)“Þ—=ŒŠ}ÁZa<Ÿ¢„@xv, çë»™@«Œ²@0ý‹BO–3r"HÐ-}ˆlx2x¥7K¶3ªIÔÜtãÙC¨‚DMàöeàNŸˆO`Žež.ö”¥Ç”‚?Mñtô…3ºbl¶Ì²­éÌòïøPqÁÂÒDÊq5‚T ^óøeô¬Ä;úyy€mg¿§äcS‡åAU¶òð¦‚'ËÀ*âXò~”<¬qÜÒ(<"€<À´2Ïû^;|}›çË(U(”‡§€¾øÈê²=GÓ3¥ä‘e @)@!(D… Pp¤»·¸~‹›ÿklÆrï¶›D¥J @!(D… "€BPˆ @!(D… "€BPˆ @!(D… "€BPÿ™v ¨; n0IEND®B`‚fs-uae-2.2.3+dfsg/share/fs-uae/stretch.png0000644000175000017500000000075612162366653020527 0ustar glaubitzglaubitz‰PNG  IHDR@@ªiqÞsRGB®ÎébKGDži…M¡¥ pHYs × ×B(›xtIMEÜ 1•˜{tEXtCommentCreated with GIMPWIIDATxÚí˜Qrà D%OîMnÖ£©uRì °§8 ä½™üd³k‹E> 2Q»HÀ­ë$ͬ鸪þw iŒq†eÈÛ4“#:_±|—âgÚ»¯0à®+GæýlûÓþªpY™ôXöù¯VðÖ>.Ä€Ô2á„øÎ) )PÿeÎØQ ð¹د[ÃüÕÊ€Üw ØÖÉÅ?Ú]e€v6`“SO4Ï5NŸ<÷ìŸ2ÍÄmØ“uŽÓ|ùdñc Øï÷|ϨîóÔ€AG[ožGùîÿä^éUETEתžUv[ûü9b+Ÿ‚¡Ý¹ßŠÓ<%/ÙÕ^£×G"Fá–øâeÈÏ)¢Uñ-ïp®Š?¢£dB×S¹·gžéåùV¹ Œ¸ œY—:QÖ« P€‰øµ~íÊ17†IEND®B`‚fs-uae-2.2.3+dfsg/share/fs-uae/floppy_sounds/0000755000175000017500000000000012162366653021241 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/share/fs-uae/floppy_sounds/drive_snatch.wav0000644000175000017500000011562412162366653024442 0ustar glaubitzglaubitzRIFFŒ›WAVEfmt D¬ˆXdatah›ÓýUû_öið«ìýé èè-éóæÌã<ášá:åðéjí,ñŒøq¾ œp¹˜³UYõté½ß—×"ÕÍÛ7ð÷ÞS‡cod`dîe§elX'!èì-ÓÞÊBÉÏÃè¾ÄÀÿÈÐÇÕ®Þ˜ë„ú´ uëdbÎc[c×c\c•d7dCcædŒ]…B93é.º0ì.b.o8`IFLÁ9Á(2ûVÒecÐdßb©Q-±ۄÖ¶˜¸ÀÄ¢ç–N]If"d0e eºeIfNf1e­f/CÈôoÀ૪䩪«^ªÙ²ÕÂðå7]MhýgofÕh f¤o«D¼òjÖ.Ãý½|µà°©«ü«;ªøª¹©e²åªåâÉ\fhÌgÑhåcˆP_žf?g_dAf)d7_( áÓ×`éÓÕ]¯e\i­fwh&f{fT1>ö2ê\þÕ#kB$EÜ3®Oxæ‘Î.ÄMÆYÐ#ÝJçïjøžjÂ*½0Ø$"ôûòBñ¿÷sÿr ± œÒ"‰5¨KT\[ÿ?Mì¤ÍX¸xªj¤P£’¡ù æŸžuž§Ÿø¤Î¶Ò"ùt1þ`Í^ô`m^í_Û]9^0]#^E_3`œ_ ^‡]Ê[ú[O[Ó\…Kí.€÷ù¬óôô¢ýzë…î„Òô»Ï¯Á«­D´œÂÛÃc2XØ_!`^`$`‘^Ä^ê^;_-^8^Ê\@\¾BÈTäœÄH±H§â¢Ý¤ó©Z°-±þ­§Ñ >Ÿ­£¸«»ÎÎåõÅ÷Ûì4à¬Ù€à­òô_DÌa.]‰`}]Á_7?wý iõýµîÒÙÏÃ/²B¥ž$œ‘œ ž~žf¡ù§ ³©Â‹×òNü3îSíY@YBY¯ZZ[3ZÆXdW½X ZTZï¸ð”òô7÷'üÒrdôÆ‚ýù/õ#òð‚î±ísíÕìøêè{å\âÝߢÞÌÞàJásãyæê*íùîÆï”ïðí¾ëÛééÝè¼èçé8íÈðœó§ôô!ò_ï9ìœéÂçZæräóáàQß à>áEâÞã+æèPé;ê/ëìºì îÀðôt÷[úçümç_ í ‚ Ì  J¶À u 8 ŠÐôýÐü§ü”ûµù)øÈ÷øÓøÎúÿ‰Ç) p T¼wßIg”[ ˆ Öû¥ñeC t  7ÇÀâø× ò!g ­qÁí\Ž ÓÊ™ºåûÃý”SÉÖI D ‹ æ &À¥’z <  I  аÏé#ç Õʱ ¸#» ä À¯Í æ … N-}Û'«/Ÿ.s(}%®'z**¨(¶)M-E/X-º+.f1Æ.æ$Y釖l•  ·í‹} ©õ¤&Ý/ù1²,ü%b!~‹* ^jÓÿÂúú¼üTýù}ô@óþõöøÀúaüêý¶ý=û5ùLúîûÃú÷+õ÷³úªüáü üšû=úÿø£ø ú&ûõùG÷Œõ•õÍõœô¢òññ~ò õoøñüÇ+}ž _ ô ˆ ¶mÜÿàÇ>¤}+‡ÿÊÿã8 ž c6šx‡ýQ«HSL†ïþÈ÷§óò–ñòð‰ïFí¨ê!é™è)è~çæåyäÞãNäâåƒç–è¹èdè†è·è”è€çAæ¼åÝæ£è“é é°ç¦åPâGßÄÝnÝUÝïÜòÜtÝ^ީ߃à÷ßrßPßåßâ‚æ¼êVïáóø÷=üEª ›Å š~çóülÿêî ïܺ -òÌå;â¥ã«â ßYàè&ñ¯ønûüùCúëú¤ùøò÷žù ýäúlòtì#ðkõnûÍþGÿçÿ:û(óhìÊåá…Ü Ö¨Ò¢ÔRÚæÝîÜfÚ Ú²ÜÚާߤܜÖ1ÒdÎúÌaÒ„Ûäeèëií î0ìsç'åIé|î îìò+þ¼³Êü+ý³úóëBæ ãUß>ÚâÕÓÔ‰×>ÝÀæ¸ó8þ¾ýà÷õôUôó¨ò¾óø¨ÿ "Íúu³œ· *Heþ±ø³óSîçbá¿Ý1Û)ÙŽ×ÕøÒ&ÓÕvØÛ)ÛHÝõäð û' ` Ÿ´úú"ú®õkîDêïêNí7ïsðïîDéúàæÙ÷Ö²ØŽÜØÞ$ávåÈê}ì…èÇã™á²ß­Ý@à™èjñ³ô–õõú/ñg¦Ö7窽  a²ûbô­ñöïMí1ì†ínî=í¼ëÔì–ï¯ñ¡ñÞðAòö^úûüü8ù€÷€övõ/õÝ÷@ü(þ'þ= W£ì ‰ {zýNþ üâúóøüôð•íSíHíèë‘ë£î ó¨ô^ó‰ñ°ï„íëÐé¹ë ð(öàúHÿ¹m à F dn\* 9_ ø øöåïVî›ñŸöbú•û±ú‘÷íñÖíeîµòù8ÿQmb,PGø8!P"íN!; hU3÷Õ Vmx ê  4`$ìw¥]z¼Ð›¨¾w$­!žì¾ %S!ߣºÚÿ6ŒñBš  8 … 3TÿÅüWþ¦þ6úkõþóêöEüßÿ¡ÑÅ  ö ýçº Yv_)/q-“( %6 `š :ê¦  !ã!ˆò ú4ç ¦’  L ®:ûuùþ* $ó0ù9D6]-j)d*T+,k,*å q• ô þÑö´ô™öMù$ý3\ yàËýûí û À«„ü!öšïjì:î†ñÃódöœúÿ)ìˆ 1ã × “q)þö>ð,í¦ê6ç!ä‰ä&éëï®õùúh"KnÉ ¿Àƒúhrþ#ü’ý‰þqþ¨þþIûÜ÷böbøìüz§å ^ ®ÿÚúžúXü›ýÃÿÂüÿZúùó/ðÞï'óíùÃ× f  %»ËdèUfáø¬í—åÆàµÞ¥ßÇã¤é7í×ëBç‡âZÞèÚcÛãxïXû†z‡ùôðôzú3qß C…>þÅý2þéüÚúoúÔúkûüeüúˆö(òÞï$ñMóFõØöÉö'õáòZñ«ò?õ>õ±õõùÔýØÿsË_ù2¿¨ž–ÿÿþøÿÈÿü&úø¼ñàëÄëõð¨÷¡ûýxþÑýýøèóVòRóÔôÜô(õdùþ%þßú8øûöõ:òÙñöPüŽ›¬¾ÿ úŠóNñsô‘öÔô"ò•ï8ëÒåãæ2íÊñéñ@ñöòûô‰ó»ðÇðBòðïìí`ðlòyó]öûŠý®øó“òüô*öp÷‘üc®Æ éü’õ'îë„ë)êÕçÕèèëìrèåVã“âˆávàñâ­éðñÒøJüÙûšøNõ«ôÓöúüeýü™ø7ô(ðïÂñvõø6ø^ö€óï†ë$èä_àܵÙÛ¢Þ9áåá´âå²çúé[íøò\ù+üwúú÷Hö0ô"ñ-îFí¾îöï…ð ó³öè÷Òöõãó^ñlëlæ1ç‰ë‘îlòGüQ n¡ü™÷žñBæß3â;ëêò*öê÷•úAø×îŒè¡ëPôûüØþuÕ oÃÿ–ùö÷>üÔJ Q¾ ŒxøfïÑìhólæ š ïÛ&ˆ£1 .ú$õîø¤ú÷öòÅôÿ=ò‚#Ü#µÄ “5á9ï &{ ÈqûšýÜÿÆýûýA †qJ¹G õ ¾:ÎÆDFýüþ [ øyó€´9 ü £Ø[“ QÿÝøòùHbÜé'…)¶"p=•<‡ Ý"qä õ n¶b"%&Æ!׺ T£Ð_U9 Q l‘€fdŸiâüžûÿ²\ ú?š{ iÞ‚ÿÇò#—#ñ0j ãv>v  ó¥÷‚ñOíôë©î*ô?øÜøq÷Ëô+òìñYõÛúLþ¡þÖ… :‰­ •øÇñŸñoô+ú霜­NtýrøWööö¶õ÷ò ì ã²ÛIٶܱäï›ù^Ölü<ñaç"ämçþî´úÆ<Ô$P¯ûOö\ô7ö¼û´ÿþø!òï.ï´ñ öŠûªþÛûÚò=æ‰ÛÂÖÙlâgï0ü{ú2ë²ÞÔØïÛèáøïYÀ3Mñ…ågä˜î/a÷ä>ôêå Þߤèjö,Ú÷ÖêÌÝfÖÌÖ…ÝDéÔö72ôöÅëhåØåÂëBóùkûIùûñPèIâ½ãUëö`’â0úòøn<”—!Ÿþ†ï,çNèqò‡/ ÑHý‘í5àÿ؉Ùá,ð#3  ¸þ$ôqîÉîJõîÿ` 1ÐÀ‡ñ˜ç1èÆðRþ‡ ‚ô#i!º˜ÿñò¼ñ»ù‰ _:ø@éÞM݇äïéø|þ þù{ó&ð¸ïxó•ù¤ýèüõƒêEáxÝïÞšäQî÷ùÐSÿ¹óEç»à¸àUä¯êèôR+åEZ½þ{þÖÿUáÕ ‰ü1ù{÷/÷öóîþègå7ã!ä0é$ñøÞùñø¡ø#ùjø†õôõ÷cøÿø?úRüíþ ö $E!v$$‚·ö@ñ±òA÷Wü*䟦ûŸõbñ–î¿ëévç³å³â¬ßpÝåݯá5èðñ÷Žû$úÀõjòÌòIøñ—ú#_Ú ÇËýú1úþãÆþçö‘ïuê–èÈêüðcøéùåòÑçÞÃÙ^Û2âíTø8ÿÇþ÷ïë[ä(äë=÷br]ò´ƒ÷õþÚü />3£)æcü¸ìÝç‹ì¦õýý…ÿíü-õ¶î^íÙòü)8©üø÷ö¦üÖ  0q3¾(1æ B"}"(/ 0Ù#à -ö þ»%"Dø“åÇÜùÜîåìöè ®êO òúDï‡ìçðüŒ Õm@c Ò¢ T/BÄ6 ¼J%I'æ"REñ„#š€ 7â”7üyòªí—ðoú§°n_úÊõ/ø©¯[´&@+–,*"ëéÝ W ˜È)Ó%X(À 脞ýNúÕøý d úú¥óéðeñ÷œà)•®:ûÿ‡ýþõÿÅTÔÿï™ Gþ ¡ÿ²ö“ñ2îÀíZô9žjö ÐÿûÒùãùÃüUR hôõÿAú¤ùÑû‘ÿ7œ FpøØò'÷TßÚëžùPøÛøG÷ õßô~õ8õ×ôz÷ÿƒ ±Êï¨ ÏûùJ÷úæzå ÛÉ-üBúú~ùPùùVõ&íWä^á;æîýõ"ý/ w CøTïøìtïDóÐöÂûátÜ V M @•1ÿOþ‰ÿ‘üýõ÷Kò\ï›ísìí ïµð˜ïðëèoæsè9í´óùúSR º Dœðáüðú¦;; ~gÿvýûøáôjñîÓíNðëòòÊîÎè“ä®ä­èüîö/ü±þ‚÷ˆñøñøŠÿûù ‡ … Å?úõÂøÿ8Ô!l Oeãô|ìÞìï­íné‚ç5é›ëí3îªð'ôÇõcòì†èÔçöæ5åµäŽèUï]õWúM £?'¾þ<ù øø@øølú´þþ ù/ô ò7ðuíëäêpíñïSðKðð€ïÛï—ï¤ì›èúæÔê€ófü”@fÈ:vüZïgëÙçGåÃìKü˜ WYùÝïLëìñAùÊ©ñþêØSÔhÛÕäjîYù$‘ùéuÜÖÛãåÕó ‚¯ ñÔö çrÞmÞaæÁó~ý¦üOórè§àwÞŽæ›úé úð'âÍÛ àDï2$ e¾ûcì•àÍÜûáí9úõÐÜ–ø®ì±æàéçòdû_ÿ2ýÀôÞêåäƒé°ù~3‚!4Yçò¾ëKïbùY`}6øÐñtó¬öÓû2 ç“ð ¶ÌDäó…÷ÑéMå)èîí¤ô¸úûœò èûá¿à*ãèíÐïáîªëÒé|ëÌñƒý= Ê T³õÌí7íWö„ ÔL%} \ý{ý4 3[8xKÉI$1ÒPò˜â_ÞÙàæ?íAô=ø[ùüx't$y+Þ&ÇÚ—þþ° ù+ÛPxfØa#Iª,· 23J·VGÊ Ÿúêå,âúå—íÙú >ª ÛühïvçÌáÒÛb׎ÕÖ€ÙmÜ4åÒû/3f;·.®è  ’ q¶3>MXÚG)ð• ì®É"H&'–ôOé×å3ë óæöøa÷eôó!ó ÷£L À ÎËüýÝç&Ï@”RbSYJ^<à,ø&60Ž@9L,JÖ:$qUï“äêæpëÎî#ò&ôõÙöíúVrñ&Ž&ék; w÷'êN; x üü²ûþõ H"G)¸%qÌÌ+)ݺHœoòÈåCÝÛà™ê ø‚ T¾ ûÄúûù¢öôÒò;õÚýt ÷—!®"nÿïêlðª=$ ÛT< ‚T_úaêáèÙ2×6ÜèqöL è*þºõ~ñGòùdš@` ¬ø÷^ó0÷hË!õ'«%ô I u$Î)¦,* õsô¯ì»ëÂñUûoÓGˆ5A$ ="NqK5Ùñó9âŠÞ-êŒB;-Ø4l)1$ÐübÝ2jG)NÎG;8Ô#d£$Vj†éåÕGÌ͋׶êeÿ™ölî€_ÆÑQÅ PúHê”ã‡áàC߈àEä8çÇêòÁ© â&i*/+_&¹­¾œèùçë¬ß›Ú´Û}Þ5ã)ì~öü¡þ:dÊM($,"&š{ï·çé´ì%ïdð|ðüñ®öJ[Ì!;4x@d=Ó2,³)$7Mný%ó•èòâ’ßYÛ6Ú¹àøî°‚Z0Ç;Î?SAc<²,õDS Õ±ûkó°íôèÑÞpØ[áæúŒ»8­D¬;ß"ô ò ùüüöñ„ðâí>é"ãÝNÜ[âqêFõ~[{ J$¨#ì(Ã4Æ7¬*™ ä§üú*ýÌW °dQ1Ùý±i‚ F-].u÷çæààÛà¶îç¡D&ž \§÷úñ%ùš 6"©/Ú.ø'}h¿ <:3ýË PùJíì¼ôRþE2 •>G!Û½ Yø-ìã—Ü^Øg×nÙãßí÷ùº ¡øëâ¢Þ¤à»æÞó… R,ËNO^gO",kÂìâÃâhêÜñóhë£ßÉØÍØÝ;æ2î•ñÞîÍçF߆ÙìÚ^äšõ ($,3ð-W¼èÛÁÛ åWñ“ÿ!Û£é³ °7ÿîýûœò˜êîëeõrýö ¼ Åcö8íæéémísøÄÏÐ$ó ~½ Õ P²üåíñà‡×GÒ$ÒýÕýÙ ÜÓß§ç÷ïùù)Ur ·Ëù™ò-òäùš´ÚüÄðiã ØOÔæÛqêöQý°@ÿÕôê‡èeî,óô÷ƒþ…zýÓø]øDü+æÆ·I 0ùøðÀñûù‰¦Š"fàÒíß¿Úrà[ñ $$8BC|?T+[1©TÜ »vìxÔZÉõْ̃é.ùµA Ú á {§àö'‹"e Ë ¾ùÚôšôÞò1êIà¾Ø‰ÒÒYÚ‡êçˆ"Û7½7&&úÿžýhû"õ™ñåó"øyò„êÅê íëÇåÉæ)î·úÒî¿.)á-Ø'^ ì³üŒô,étè ó(ø!ô9óû™þ¾ùùù-ø öYõÿ÷«úùÀñ«ä©ØîÒÀÔÜEê¡)'Û?K>”(Úšj½f&E@M&9åBí ßîܼã1òV> Ñø©îwò¡Ùˆ 'º&kô©Øý̰Ì(ÓZßéºë7çòÜqÔ2Ôªà;û#Ë;NÆSŸTN>*DãÆèžÓ5ÊÉ©ÌñÓãƒùu‘$Ð2×1•†f÷DëDåDï€pîLïøcñŒò½ü¥Ï( % ƒ‡ š!%Ì2E;Ó5š(Öo J8û ûþ(ýÇõ[î|èiáÞ-çPüèF¶$«"Ö% ?J ™ gô*ë¨îmò®÷HW Ä 6ù„÷ò³ì«ð—0C¿[à\^ÍK=œøÛä‰Ú1Ýué„ñ îLáåÑ:ÇÄ¡ËÁÝâø«;ÃLëKE>FR_YQY‘Tl:’ ;Ý¥Æ[ÇñÓç6ÿùú ©½½Î-Ü<”4ò€ù>áÖ^×ãõ€ž—ö ëç3êþùßê42NhSÎFÄ1g Yµï„îøÜFÑÐÎÖQãïAÿK$Ý)ž&ä•Aì Õú]ï=èõá›ßÒáJæ¹éFð`"˜H^€^W`jNh'× ÷Ëì‚êíìî?øë í)3Ò5-*ãI’÷ñFñÜ÷%I = hüÈänÒYÌJÔ&âkðÙ±‘UÙØ™@g@ lù›éG޾ܿáyèxð0ùÅøjï¿ì‹õTÐÐAÜ^úcõCo •ã\Ô›Ó ÜdëoõÙòÎæÐØ;ÒéÚ‘öõ*_]´aa†d½JàÒ ÒØÕŒÞµæÍævâ€ßìÞ.âÖé9ó1ûïþrf9&®5Ô6ª/Y&º!3õÞí-äÏÖzÌ™ÊòÌLÐÚáð8;vX²Z E#ƒþ5åŠÛ&Û§ÚÚÚÈÛÖØÒªÏxÙ•ìÉöC×÷çõßýC÷,ÓOYŸCp¹îžË¸À<Ç·Õ~âëîí»ë-í)øHvO˜bs_Å^Ù% àr¹{²Á¹÷ÈÛ¤ð§üüöhäåØAÚ£é(-*O:S»3#éÙá ëã¸$è0KQíuÆÔ²:³MÂ<Ý-è0RSzN,K çðQàRÚ à<íüùŸiÇëü»ðÇåÛàFãÊèIñì ë7¶øàóéðÚòû•ÿMùéæÖôË¥Ê4ÏôÛ·ùB$"HBTGFf'+òçÏäåiä†ÜÿÎÛÇ5ÏßóÔ P Ã'‘›‚ù›õÀõÙøt¹ù:éíÜóÙ´ÞÏç‹úûÆ"”¦x $ô˜Ü×Õ"ß½ìrý]R4 9y @ÿRâcË£¾¶¾4ÍAæ.UX/­EŽEp0^‘Bó¤åÂß}ߥáûáÐã çíç«êpôêýVýÿ#â GûÝéäwæè|èèñyù`ö î¹éËê4ì鼿óÜFÐøÉ#ÎËÝZÿ 3û[X*Ÿó ÔBÊ5ÍzÖæ¦üƒ ”døµó“ñvï£ò‹ì sÔ X: i&þ&µ&ùgÜͤÈÍÍøÞÙúBK,,1$]#1+O0V+¯˜ì×xͼÐÙDßáæ‹ô…•(á<«Fù:ƒ$à UíÒÒ ÉÐ Úøâ‰ì÷ÅîÞ³ wJyCÆïÀæëîõÂýæ+)Îï]ÞTÙíÜCí Ã%"6N;f2ãDñàÕÈЫ֤ßè›öa¤þwòåÎÝÚßíÚŸW#£)à&.Œlú!÷@ö’ðJëRðä2,Þ¿û,ì¶Üì×Ôâ¾ú«$!©$E—ófêäÝkÖsѨÐ+ׯãüø 9p$› 7÷DïGõîËb ÷yëôê)ïÌö'Ö<éqñêèòé>êBìB F3À"žÿtéíÛWЕÊnÑà?ñb+'oð ðöàâGÑàÊÑËÄÎÃÒØ;ÝßÞà‹èù'Ü&@B.SÜKq/„4,úòKëíòî ä-â‡è÷ù:Z.Þ;p3ãˆÿ¨í äããÿò= ¿%…ý)÷2÷Ëý„cÿÞûçû@ÍCY%WY W­>_÷ÝÖñá¥B4nU…6ÚöTÇZ²[­iµ­Î‚úå-²O™PW6²CòíGó¬ö ðXìæºØÊÕÈÛÔqò¦PƒY`WíWôGquúèä#à¤â,èÍßeÌÂ-˜ÆOÏøæˆ 6&7½åê{ضÏGÕúéøD%*7Ê48+ñØÔÛÚUæ?ò¦ù.ù5ïmäiߤàIîH/CW;X’Hó¬ä¿Ä¼¶0ºCÊÒÞdòÄ þ"ß/!-"0…<žNeT7TàFú!xú´ÜdÎ6ÍÙ¶ðÞƒ ¡ûÄæùÖÑÉÊháu ÉX’TÉW»TŽF( ·ÞÙ ízÖ‰ûå½ÒöÍÙõø¼J~RÝ'ñïÉÌ9ÂXÆØEóÄk•í¥ÙÍÐLÓoÞ@ò µ· ßò€Ý8Õ Ùåâôò j­"£`f ûýCøñÙç¼âvä«èþïü|ûåýÌÎPp 5tõçݦÔ9ÑoÖ³å¼ûNÞ:mã³– ×8:þfå>Ö-Ñø×uè| )/U/Ø4 íõxï¥õ8g _ €jþéógä€×0ÓI×äøùãÔ-CA™F”+½ý×Ú€Í Î9ÕÞåÕÀÀu{ìhÚºÔÞבÞAçñ\ð%æóܳá°õ é Ûþlí^ÛVÍÉÒœéÙ!´-ò„ñøé°î2üÊ¡"’#o3ùQë™äBáæ^ñsøæóë¡æ´ç7êqñÓýÞ qíWöÕó>ý*µ¨/€;¥-ó7uýÒïtä‘çÝ÷×ë*CERwM1.[î¯ä$âáÍâáé—ï'ê‚ÜÕ5Ûaï éí·þ†äPÞíÆþü§ÈÿZøŒæÞZì  8cSõV DÀ#Ãlî¼îŽÿ€²{ YñßóÔ'Ô}àAü±‚*¬a÷™à ÖÀÓøàÍÙAÇd1Oúeú™è0æiò‚«Hw_©<<ÛÇË*ͯä"NUhŸh.Kcæ.ÚgáDði† ’åšÏëËÖáæ‡öY M"ÿ%𤸛îøO’tE& + õÄ(¥% P ýFêÉÛYÕÖ0ÝÈç†ð·ñnð¦òíùÔÿ7ð# $¥üåç{ßlÛIÙîÛ ãÊéAê?éËéfì,î&í‡ì–ðÆûŠ y.0‚/% þQðwèîã|ëÐý4  rúëäæ\êzò“ûŠ ¯tð.×,ÒÞ¹öý M„húbå,ðˆÎ˜ÆÝÍÑÜ'òÖ Í;ëç5Ù±ß@ðÝ#€ãPÿßãÂÛWêöw«e]‡â Ì\Тìþ‰HJdWd"6JöZÑÍsÝø51:ˆBx&Îû?ßÔÛâë¾ýÁ}Lö›å-Ö€ÐÕåã–õµh¦"Ç2À7Š,JÅ÷åá™ÏnÉJÎÑÜò* ¡$a3:" QéhݘۿÞßãTê"ñ^õ[ó×ójóQðKïóoøyúÌûÌ ‘à&\œeù¤ì`ä$ë#Ï$=BI,Je3Õ ðƒå'ë²ö‹? : ùêûÞeÚàÞ«ã›ã¸ãÌêq÷ùÿY\ Ê ]ú¶æóÚ/׬ÚeäÚöÊ!Ü•áOÍ>Æ´ÉÜÚþ|-NMëF^ ïúªàÍÑzÓ«á†òÂûÏó÷ãúÕÕÍàÎ(ÙíÀK Ž%ö™ðJõ T»>šVY­9ø ‡èDØžÒƒÓ£Ô‡Û²âsç£ñãvÐqÑŽÜdð‡ú¹ìäëÜîÝûåõý‹û‘èÂÜ2Ýêoþ#èCÃK²-|üºÛ4ÐyÒà ñTùñð4à”ΒƨÎîæ *'/…]ð˺H»ØÊ5ê+µ5)§ÝõeåEàHãÒà;ÖkРΗÑÛóçký-M'–+i#ÉCØð®àCÛYãŽô¶t0E<¸0OBìFÚÖåá0÷C)¬;´ú„|ñJè:á£á(æ»ï ©® Øï>Þ¹ÓuÐ1Òüâ4ç'Ê/øì Qý;ú¹üÜP¡§Vq%i+ô(F!º€øIî¤ìæðÓ÷ÂúnòËèyÝïÔÒÕòâkôåûHûªñ ì"ädßïðË9c^;[-[ý(„üÌÍêµi¿²Üjê}çþûú/CðpçÕúLšÅèæýÙûgä>çC ãäñÔÅ£¼ò¾ÂÆ ÍÆ"Y­\!]Q]ð["\ÉW…_Aº÷ÐR£Eœ9šiœ›8¤9Ê–)Ñ`[]J]l[˜\˦нÀÓ»E»Û»ï¶›¿‡Å Ü¢HÆ]3^b]/a\e,·Ë‹¯[ª:Ãê[w\n_G^ObRK*ùoξËåËRÆRÇÍ›Í<Ʊ˿ùtKjaü_Èb²b«a¡5ÖÖ6²¡¢¿¡±Ÿs­^Âõæv/[]W_[£^©VeK(PäUÕÔØãÚ-ÎÅ`ÅÓÅßÕïÿˆLbü\á\þZª2´”,"“BrKH3/#L°üâÞºÉ&Áœ¸°pª¬î´r¾Jɶ×ñfC+·5Ù>8Oy\E]C^^Ñ]£Bãè‘ÔÑÐÉ׬äEöG ¸—0:<8=Ç1w*²%w%À,lOŽ]Ì[ñ;Sí^¸‰¡w›—­#Ñh*o_§`ay] ÇàÓÑ$×ûçT .ôYŒaöa»TE5>–ü~‹ MùÉåý×ðмÉåũɓÕæ^øo aÌù/èüߣÛCÞ™äèæÝ#ÐâÄÕ¿ÀÇó×öó"NSf™ceÛc³cÂ`b50]éÉÙÕÙOå¸óàü©ú ï+áäÑÊoÌ\Ý ù£c$2—ö#ÛìÉÆŒÉÜÐ|ØŒÞ~à¬à_ásèUû¢ Gg6hdòA;(Iüý·6¿¼… åüpõ­ø@XP[îLÛËÐÒ;Þíû¥ Y þÂé¢Ù)Ì´¾[³¯­e­ˆ´)¿ðÙîÔHWcÐb±c¤cÒd7d-dèb¤d^;£ùJÚÛÐÆÖÌÞ%ê‹ìäÐ>¿y¸n¼˜ÃúÅÆëÅ]Ä;¿3½"Ëáê§V?é`eò9Ì÷òÌ9ÅZÕ|ðhB*Ô?âG°B“2K+ý./¼!€ pöÑä?ÖÈÏ÷×+ðEôþæðâ"ÒöÂ,¿¾ËNèã)ú1m ³ù ÝÒsÑ^Ï ÔXä}ýM¥Á4 âéôÑÌ”Úo=Ò_e\2LÔæ©æ…þn(×NnL+eßß¼@µÛÀ àÿ0Sêcb P¿!Gþ’ïïëpè@â`ÖÙÉnÅÌ/ߎüS;7n3 ußxÊ@ÉŸÓèÞ^/Z?>2<ƒÂQÒ¬îšÒÞ»8±ÍµŠÇˆè® %r"ÈüûëÅéãö ѹ Óñ¦Ù«ËõÉÖ'ï âàèv×=Ò5Ö“äðûi aùíVì§ð6úæv Äð°ØvÏúÕÚëÚ à-X6OåÀ޲ ¹÷Ð;þÜ6­W[·O“"ñ³à$ãxéîíïêŸå5ßËá„ñr;R&ïôÅÚËË/Øaè¸ñ/òçð¢ï"îëë\ìþîì¹ä‰Ü}Õ Ñ1Öóæ“ûö ÊÕvñÚã¯å:÷ü ¹Ñ$r-þ&“ òÓîbú­_qü·Õâ( GµôûêÝÙ¹ÖÛ\Þ]äîß÷ÕößèQßÄáyê.ôùQ!6oE«<…%ÿhß÷ õnüŸ ¡¡!¬"M$('Þ& ® ìñç0ßÛÚÈÚ@áë[ðÈðŠö†6“8t ™"Rù8_`3Ÿ9x2 1C/M9ìþçý=«ù)÷^õbì¹åéÙôÚÇ 4Ì šýÍî|æŠèåò•áÙ +ž„a#õú2þöÿÓÖ Ð ‹ zþuÿÉ Vîr,rEþ[ªXD>5"Œ Ïö[çnæÑó h • ²çþ>ï‡âÛáiì§ù]6"Ž&ÿ¦SúøÆ"{=á[Èkud]K”*® kïÉázÜõÞ…ê•5.j÷tLsà[ã¹ëVÒ‹ÍžÖ;ç¢÷ÈÐÄ ",ú¸ù~ö;ñ’ò¹ÿ"¥!{1`<¹;L+a8ûcñÏî÷îbòö÷ú5õDíé9ð)`é#ö0?'t,áOÒÓuà¼ûý'M\$s4S·OëÒºÇÎÈ.Ì¥Ð×èå¼øL™9—c½s?rDwú ÓLÅâÁ÷ÅÝÙjýú!N-ë*ß /üµñ[ò4úpþzöìÚéðJõ}ü…à+§,ÝÀ³ñç“â‘äøÎÆ<ƒA´5±$„ Qú%íòòÕ @(Ï$~é'ñkãèâáèDôzüÖþœÎ ¦Û ï ûÛ 1ûÀñÈñôÇï+ê°êGïõJ÷Ïüp ªœ dûçÙRÕçÚ§æsÿ>ÎìúKãœÖÕáÚ»åõòdúg÷ó±ð²ò‡÷(X økøÝÝéÏ Ï=×9ä#öÒ —ª¥þáê}âÕê(ø%÷Ûó/ö"ÿ{“ü1ú> …&@1®&m=pøøÝwÖ›ÜÐãuëqü•,]ÕýÁâ!ÔËwʙڃùŠ7>KUžCvpðÍÜôÖwÒ*ÐöÖõëØÅv³ ë¹ü]ßÏŸÌ Ó¤àw÷¦Ò%E)ò ñ¶éééÅå“Ý•Õ Î5È)ÉÑÜŒå:íUòuî¡äÙ*ØÙÞöå†ïBýl 5D …ÿjò9ä9ÔÉèÆ`ÎEÞ ñÉö4h ÍòBÛàÏøÏïÔé×ïܶëvùÂüHúAûW‰LõÊæ$ÞþØ7Ó¶ÒúÚï§óî¦ÿ4ï¤äææôVW-Å?ë9Nó_Õ™ÆÁÃÓÊ!Ûüì¦ùaþÄýú_ñ9çôæ…ð1ýþõ¢íÏæÄàÞ@áŠçKêóæ’è{ô – Å Á N½òˆãˆÛÁØïÙùÝyç÷UvH©ü€öèÖ%ÊJÆ ÅwÇ«Ð?é; e*:åEjLG=4 OöÖ j&ýVþ†ñhæ‹ä|åUãá êŸû„ êàð€½ÛþäëèãÜÞ[ÕUÎÐâÚ¤åHîý×6+c' ùïƒç|ëGÿM>.0Ä-Ë(á AùÉñóî¯äâÓ€ÉòÇOÌŠÓRÝ<ì2þæš ñÍë-ï³óøýûÕÿŒûƒì½ÜÄÕ¨Ú$ç‹ôRýZ%~ÿiù&÷OX_"E% öHå°ÕºÉËÚ¡êïØéšäºájÜ…×Ývõxd$Xv =ûJì7Þ-ÚáãçûñË"„#á@ìòè#îæø²÷ò\õD âìD$öuäÔß*è{ñTó_ôôý¦u‡ó!ç»æóêæìõð•÷Xýüû.ó&ììïó†õ±õ2öüdþþ’ bî–üëoàUÝ2àoçUù… ¬ãþéfÚéÖ××vÜXéùGýÖñXë2íäó7úy ü9ë=ÛCÓáÖ¥åâþ T6Fž:Ú„ñÝØ#ÛÀåZ÷Ò (–ëÕêpžÙïùkê<Û±Ð#Ï4Ù†è+ôçý   &XýiÿVA¸‘ÿfÿ·ÿ ù²ëØã$á{ß³Þ äJõ ¼[$–W 'ñ„Û¯ÓKÚ!ìµÒn#Ó .ýùP¦,5œ)¿ æèjÙJÚ1êZ(=p3´óìßâBôžBHæW<¶gñXãþá”ðX14AÐ÷žéjèoïyý[Ÿì8ÿ?íÂé(ð-Kœ&î%¨?÷Äæ;äºëªúÞ£C _ú*æÙÕ=Û«çròîúÞJì Àš «0¥7‡,_€ÿ$õ÷ò›ø„UTó:òì¦ò…û×*Á4ž&$ð2ëÍõZHÿ&¥'3‡ÿàî·ó: ‚*¯GÄUQN/5 õmõl„/¼/Ý ]öÓëí+ùD $d ”ÿ ùeûûÁ *Û V:àëÖåêï:Ï-ç7L'P¤é˜â¼íìÊQ!æñsÅû_0 =õ[Z¶4â îaàˆß»ìé#N.¤! Àö2(BQŠB·ú•ë-ëòãþW “& @É #Y7RAy8ݯýYí¿ïDà 7D‹>³%¡„ê6ã*é)õšÿ U > r B#æ–$ü592p#zc­;r Œ Qñ]î–ôîÿh¹kÜ$)}'ª)4"9Õ-K5˜ò«ê©æyëœõ]ä:þñóÝíÍíTö„ Z.T$eñO|%u#øøÐ Ý-˜1V!@oíñââá9å¶îüú' ²÷ûËú ì«Vú•ôÆö÷ýVt .Xxò´è©æwïèÿ.õ,/ö"p›ÿ«õöŠ ) ôÿ‡ñAéÚè‚òØÖ=2J@Ô;’&Z Ïõ¯çXãíã§éð)ñ¸éäá‚à_âýéwñ-ýT5,ý8€ ìÏú óêgßÚÑÑÆ®ÅÕʘÖäæû4 DWáñ0álØ6ØïáÕïËý’üçîäÞÏõÅjÇÒäòæõjí¥â.ÖÎUÑw㪯1–MßK´4ÚIŠþõY lÁ éôiÓöº±²®¸[È,à‡:/ø!×ÐÃaÆØõ_%Ïœù"Îú³ã«å¶œÔ ‰%Ž* ËØ$¶[§Ž£ï¯ýÈäì~ã °óoØÅ½nçÛ&ú‰pdâÄp³½­²è¼ŽÑíë© ‚üÞåŽ×JÓ—ÒcÒ¿Ó?ÑЉÉ9Á¸¿zÇØžîäûFû-óìÉâCÖqËÊ*ϧӃÐaÅ%ºá»6Æé×Jî¿–mä…Æ¶Fµ¼Ã6ÔKíÅøùwãÃÑ8ÀZ¸½;ÊDÝfú”þôŒéã9ÙÆË¬Ëâ×–ç&óNó|è7ã!Òï¹mªn©G¼¡æ5É ¿.4GGg$ªåsͤͽەÖËÆºÏeòi>pAWøÇéÓØ½°$¸ÀÞÅ5×OýJFLmL~*w×S¬Š§ô¹—àŠ ³ç YðÊF­Š¤º¦ÆºèÛµ/LzVqVx=𽋪§ë­BÀãöMNé^.9‘ü Ø×ÎÑZÖØæÝÿ5 ·Èè ËýZï*ùP Ï µÿ†ìä Ø›Ï´Ì(Цßï«üâ aG ”ûô‚ôfôkøÍ E*92&þ!¯a]ý1ðÎìIö” %#NŒjäoÆLusþ¨û6?cÆnesšm”vj“y.fH|¸äu«¡´¢¬#Òü2mÿˆmÿpÿEàÿ³»–¶½t~Mt‡èy•‚}ÿÎRkÀ¾O½ Àä¼§Åȧ٢üÍSøÿÍÿÿÿñ}ÿ 9Ìó»Ã]Æ7Mÿÿÿÿd`ä.ÂÈÄqSÿÿÿÿÿÿÿÿÿ‡iÿÿú£É’ЪËåÐt̗ЕÌ_ÑeÐ÷Lÿÿÿÿÿÿq2ÇóÎòSÿÿÿÿÿÿü_ïÆÀžJÿÿÿÿÿÿÿØH•ÈÓÙóÄ1kÿÿÿÿŒT¢ÕÈ'Bÿÿÿÿÿÿÿÿÿÿÿæ:ÇÛÖüÏÕÒÔ„ÓåÓÓ«ÓèÑaÔûϳ(ÿÿÿÿÿÿ¦<;ÉQÑBÍuÌàVÿÿÿÿ`Kë¾vÕúÅë)ÿÿÿÿÿÿÿÿi7…Ì!Æ<2ÿÿ”çÆÂÆøÈÈìÊDÌÖ8ÿÿÿÿÿÿˆy¦Û¶nÆS¿UÂTÀ Á†ÁsÀåȾÊ@½¥¿Ö¹©î7iÿè{}¤zÿÂ_ÒÙe¸¶¶˜¹…¶]¸Lµ<·®³µo±F³Æ®é°±¯Ó?ì`‰n¡l+khmh rAÆÃû¤\ǘ÷‘ ¢ØK¢6ž™¨¯áE@-fO_è`_Å^ã9GΩô— šè›ûÆ ` ÅßϨõ“.–±ŸüåUSN÷SÃNÜPôN,PlNÉO²'‡¾.™v‰q¥Š²€™_Џ‰Ø‰‰8‰Íˆúˆšˆ‰›²èŽ:^Då@\EFEŠç‰8ŠÁ‰5‰ ˆq–ߨ›¢Ý´ùõã56G82•< U+6£3X3÷2â0Šû‰‰†ˆ!ˆžˆéˆü‰ö‰‹Š Ñ°Š¯’œÖ©&í,œ--+ß,¬(E/˜‰x‰‹ŠvŠàŠˆŠ°Š Š'ŠO“IŒhŠàŠVŠFŠx–_± ¿5¥ЦŠ-Š`Ц‰g‰µˆìˆ‰±½Ïm¸&4#–(É Ý®–¨;¦ «¶ÒÓjÀlŠò‰VŠEŠÄжŠ‹™Š»ŠyЧHÝËîz²³Š)Š1ŠI‰‰‰˜–Ò‰€‰TЂЋôŠH‹‹€‹%‹‹…Š"œb¥ñ¢Š«*ÂÉî?6ï6¦ã‰úŠ‹j‹ÚŠŠ ‰ˆ‰4‰³‰„‰Ä‰ˆ‰Ù‰P‰t‰‰`Œ[ÀÙi‹¬ŠŠá‰Ì‰‰è‰°‰šãf; )F3Ñ-ò1:0²1cÄð‰7Š›‰y‰ñˆk‰R‰ç‰²‰û‰_‰1‰LŽá×|Míý¡ý‰¹‰ŠJ‰?‰êˆÓgÜï*XEY<,IéÞÓ‰­‰‰ ‰ˆˆx¬Z™¼½¯³ ŠЉy‰ÏˆÃˆJ‰ªžír3L9½pòÄôqpP°MRS6KÖ\ÑZ›?‘b‘±“Œ”g•ñµFæB+†^#Xí\Å[ÐK?£ýó$v_}a8bïcžf TìÜü¢¨s¦m¨o©Ÿª&º:Ç/³ì®z¯°ä°±R³²–¶È4%!{‘xK}}0b9À=¼r½%¾ç½6¿M¿—ÀÇÐÓîÈ7ÿÿÿÿÃÚ$×ÎwÊëÉ@ÌíËÍ"ÎÞΤëM‡pö×TÑùê*ÿÿÿÿ‹_Òí˜Õ•Ò(×JÔ>×5ÿÿÿÿÿÿÿ*d_ð/ØÙÙXûVlÿÿÿÿÿÿÿÿ‘úûÚÞß:à™ÞáÉòÝxÿÿÿÿSlÜqç6Øþ ÿÿÿÿÿÿÿ-gþçß«ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÑÝíè®èûì:à×ÿÿÿÿÿÿÿÿÿGlíiÿÿÿÿ"4äµêÑç:ðßXÿÿÿÿÿÿÿGüLç?åïJؼ,ÿÿÿÿÿÿgñSæœÜÜÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¡þ±Ü!ã…ÝïÿÿÿÿÿÿÿÿûZ»â§Ýoß_Ý‹ßÛ•ßjØ‚Þä×ïÜüÜÿÿÿÿÿÿÿÿ$TNà×£ÕöÖ)Ö¸Õ ÖXÓòÔ\Ð[Ò ÏÏŸÐ\tÿÿÿÿÿÿÿ/CvÛôÆ*ÂÅ(ÄÓ"ÿ{ÿã}ÿ_~ÿ‚~¦v~ß}+}Ô{Ö|N{|h}Ä{Ö)JN¶i¸Éµ»´/¸t±ÊºÚµ›\–{Êu€tw´r}eçÞ­Z¯Ñ³¬FY-ok!kvlhzm]eƒlÕd“R‚ºP£š¦c¦d¤A¦\¢§µ¡Ì¦„¡ûÎWåÓЫҜš¥o‘ÿã\gÇY5h.¦O™êÛ˜Ÿë•¦”–unS ^PWüWO\‚ÿ‘IšŽ§é/vT¶X9ü•”[•”×””1”§“®“³“Ž”,•Š ÈО­F–P–´•Û•x• •)••l”´”—”íüðZìDQ"H*K(Jª>'”i”t•@•;••ëú¸YÞ;ìLc–Ë–h—(—I—1–ו-•ƒ•yüEŸAæCÅAÄAà@Æ@³@¥AÇ?CoË|ç1ÑA1D/AÔHJ=NÚ.•Å”s•â•\—ˆ—+˜˜¬˜ü—“—'—‡—\—w—™—§¸÷Y}=(T¬BQOVGRM•Kc>n™a˜n˜™—Ž—å––¢–©—+˜â˜;™š©™…o …\ÿH`ZÃëB™™Û˜B˜a˜˜¿˜˜±˜¶˜¿˜™à™ó›£ 4YX¸X*XÉXfW–X˜WÊW‚Öá˜v™þ˜á™Zš&›:›²›ÆœâœG ® £»›wövnWyf²]ádÁ`hdÌb'_—#äÎw¢›¨‚¥˜¨y¨ «!ª_¬ÿ«†®@®1À/Û…É1²]¯>°[°D°^±À±²³µ³´‹´_´¶´¸í¶6Ñz:xàu…z…Ü´<¼$¸ˆ¼Íº~¼¼F¼¼½o¼¾ü½ß¿E¿_À»¾G¿y¾Ø¿P¿›ÀÀŽÂJÂCÃØÁuÁ ÁòÁAÁ‘ÉŽ}vÿÿÿÿÿÿ[9LÞˆÃÎÅeÅ3Æ3ÆËDzɦȭɭÈ/ÉHÈ|È È5Ê+ËÀÌÌZÌrÌýÌ Ì ÌÈË?ÌÉËÌ2Ê.ËOÉ’Î*ü~[ÿÿÿÿÿŠz¬âÆ)̘ˮ˰ÍÌ7РÍfпÍçÎÍJÍZÍÊhÚ…'‰bÿÿÿÿÿÿ®c\ŸÔ…ÐZÏ:ÐvÏÐÌÏRÏÐÐÑ+ÑØÑáÐ\ÓÒâ×sÕ[ÒáуÒLÒÒ²ÑbғѸÑÑ~Ð ÏÏ&Ï*ÐhâÒ&uÿÿÿÿÿÿJ)ÐÑYÐÐxÑíÐÉÒ4ÒžÒbÒҖѱЇÐ|ÐrÑœÑÓ4ÓûÓºÒžÒ»ÑpÒÒÒXуÑöЬÑâÐÝÑëÐèÝOÿñ 67Ò3 jÚÉΠÐ9ÏÌϢνÎþÍÐÎ(ÏöχÏâÏwΊÎÎÎXÍ̧͋ÌkÌUÍ:ÌÌGËÂËòÊŒË÷Ê"Ë†Ê ËóÊÂËËËlÉIɽÇLÇjÆØÆ,ÇÈVÇEÇÉÅCÅÓÃ{Ä÷ÃŒÄAĜijÃ}ÃÕÂøÂ}Â/ÂÄÍ"ØVç&üpu ¯íMÊ›¼|½X¼½¥¼+½¾¼(½l¼&¼»Fº ¹¡¹ú¸³¸¢·¸¸p¸à·ö·u·&¸·)·óµ{µÍ´§´®´³É¸:È­Û ÷Ýá"ùìÿŒÑa³ù°ƒ°Ž°¹°I°;°Â¯Q°•¯¯i­’­¬÷«e«î«)«Š«“«ë«0«ß«€«p¬'¬Ö¬Œ«d«Rªà©œ¨©†¨©›¨Ñ¨=§$§C¦§§t§©¦l§¦ ¥o¤n¤®£²¤Š¤¤/£È¢ý¡‰¢½¡^¢|¡Å¡:¡É¡þ p ;¡¬“³®´g« ¢éžFŸNž9ž³ñžmžCž'R”[–HW›œGœ¥šš­™ø™}™ì™H™Àža¨²e¶ ·±i©\Ÿ¥›=›ÐšAšŽ™»˜ä˜F˜¦˜ç—î—s—1˜Ý—U˜l˜Ë˜ì—T˜Ã—›˜m˜Ä˜#˜"˜Y——J–c–2–Å–—ž—Á—æ—×—˜ö—S˜¢˜µ˜À˜U˜¡—’—¡—ù—'˜˜Ï—ß—˜j˜Ð—Ê—%˜¾˜Ä˜¬˜#˜<˜˜Q˜˜ ˜M—®˜'©F¾Ó#ã¼å¯Ú›Å°wò˜¸˜R˜A˜™R™Õ™º™5™;˜Y˜`¤«¯v·˜¸‘²‚¨lœ[˜b˜Ü˜#™B™U™’™E™B™È˜W˜˜UštŸ­£Ó¦¨‡¨§£¡ŸÚ›çšï›ÙŸª¤jªg®º±b±¯³ªj¦â¡2ž*šš š†š„š^›+›è›Ê›÷››.œ˜›æ›Õ›!œª›Ñ›[›œœœªœQy2žžSž5žjžžVžÙÆVžžvž žìdä¸%žþŸË§ ®Í³ú´Þ³£¯,«·¥¢%Ÿ°žŸž¢Ö§ °G·f¾+ÂXÃHÁ¼¾º|·¯´³Ð±°z¬Ì©µ¦¦o¦¨æ©!­V¯p±'²¨³c´íµ!·íºˆ¾³ÃÇsÈ7Å“¿j·±<­f¬¬w¯Å±²´‹µÿµµµà³'´â³¡´£µì·r¹8»»iºì¶´Á°}®#«`©¾¦D¥Ø¤±¥@§ƒ«°ÜµÍº¾”¾s¼ñ¸¶$µÍµæ·à»³¿1ÄÅǥʇËË—ÈûÄÿ¾2¹K³;¯¬¢ª ªø«„¯É´‰º'ÂßÉ‹ÒÜÙxà¶äòçÌèÙèÄåýáêÜÏ×FÒVÍuÇÂ?¼q·Y³$±Z¯f¯›¯‹°ˆ±ã³þ¶c»‚¿LÄÂÇzÊpÌ/ËÀǧÁÖº·,³³ö²Œ´·M»>¿`ÅßËVÓÛÖáÃæ¢êê.çzáÓÚsÓñÌCÆ Áó»ì·¿´W³–²´àµ¹”¼ ÁMÅË7ÐíÕÛ&á.æñé¯é-æ®Þ{Ö²ÎÉ’ÅôٟÂJÂÍÂ]ÃÖÄ÷ÅÈ´É€ËAËÊÙÆÄUÁÌ¿¾ú½q¾#Á¯ÃÕÆ±ÊÔ΢Ò(ÖTر٠Ú?ÚÄÙ÷ÙüÙHÛpÜgދ߇àà0ß ÝûÚKØpÖeÔðÒDÑ]ЋÎåÌçÊ{É®ÇèÆ@ÆÚÆñnjʶÍ[ÑÙÔÙ_Ý9ãFêËòJû‹¿ôIrú$õæñAðÆð=ò÷óëóÜñÔìRæôÞÓØÔÖÑÑ Ò&ÕÙÖÜÅàSã'åûäwã‡àÞ«Û˜ÚüÙ®Ú‡Û)ÝèÞKá'ä(èÆë¸î¯ïKï íBìêÈééÛèéçç å!ãkàÄÝøÚAÙØØ×Ì×ÙÇÚ+Ýdßœâüåˆê=ïTô¡øSü1þ"ÿÑþ:þýlü±û¡û1ûJú<øVöÈóhñïÊí!í“í&îíîïîÀîþí­ímíVîïKñÁòúóô­ó´òyò`òcó¼ôMök÷‡ø*ùùøø‚÷“ôwñiîàìì ìúëÌë»ê”é»ç£åãÔàûÞÞnÝŸÝÞ߲ߕà›ášãæ°èëdí ïTðàðpñ€ñÖñòÂògó@ôÚôZõ(õÊô ôMó0òCñdðîïðï­ð òôúõö÷„ù¦ú¨ú&úù*ø«÷û÷ªø úûÓüÄýLþâý˜üÅú¨ø[öRôYògñ"ñ°ñ¶òÙógô\ôšó„ò ñ³ïî¢ì#ë¼é~èÎç¶çrè¡é ëCì4í_ííVìÀë«ë¥ìÒîMò„öèú¹þ‡ÜÐQÿuügùÛõ§òÒïöííTíyî7ð–ò õ‹÷¼ùûŒûýúÛù}ød÷aöÉõ#õßôôõô†õö«÷ÿøcúü²ýeÿÁ¸„[šÿòþ[þÚýýïûúº÷<õðò)ñ×ïæîfî&î-îwî!ïáï‰ðÎðUñ%òióõúö›øYú°û°ü.ýçüÊû&úú÷Áõ©óññðáïxïïÐïð,ðÔïï'î_í÷ì0íÜíð›ò“õžøÌúãûû7ú¦ø_÷áõ¬ôæóæó õ÷pùüþAÿñÿÃÿ ÿ”ýˆûùœöˆôùò’ñžð²ïðî îøì¯ëxê:é@è«ç¿ç{èŸéíêFìQíUîï™ïð˜ðÝðñèðð3ððçïìïÒïÓï«ï•ïZïJïøî¹îî<íì?ë¢ê_êmêÏê}ë¡ìÝí÷î¯ïððäï’ïï¸ïƒðñó²ôöí÷ïøXù9ù^øéöÞô¨ò•ðÜîKí6ìuëëëJë³ëMìÕìCíWí-íìoëæéQè çqæ~æKçáèFë îúðµóöë÷%ù©ùÀùaùgø±ö]ô§ñôîsì€êðèèåçšè±éëãífðŒòýóô_ôNó¹ñ¨ïSíë3éÇç5çNç:èÂéÃë¶í¸ïTñƒò%ó‚óó²óÓóôtôéô=õ\õùôZôlóqòñÒð6ðõïÃïÖï×ïûïóïíï±ïaïÃî8î‡íèìIìþëóëžìÍí•ï¯ñ£óèôcõßô{ó“ñžï®íì ë¤êÌêvë[ì™íÒîÇïNð°ðñpñ½ñ"òžò@óÙóVô¿ô!õKõKõõ©ôHôôiôEõ ö¥øðú>ýÿOS-ÿóüaúë÷@öhõWõ•õœõõœó„ñcï‡í9ìë‘ëaìîð*òGôcösø]ú­û<üŸûãùV÷´ô~ò9ññËñøòôæôuõ©õÁõºõØõö=ö@öCööôõøõKöæö¥÷0øføøv÷¸ö3ööÍöøåùü+þóÿ9ÔýׇæÖÿkþÒü û˜ù3øþö÷õ]õHõùõa÷lùÐûAþRݺꌷÃÕÿÙþ«ýRüû>úú¤úgüÿ_“3© É µ}z„üèøjõhò6ðÝîQî«îlïšðŽñWòëòqóô©ôKõñõ„ö ÷u÷¼÷í÷økø÷ønù¸ù¾ù¼ù‹ù~ù¥ù+úûbü¥ý‘þÿ ÿTþNýüúúõùùVøú÷ã÷ƒøÅùƒûƒý°ÿ¸¥@mX%ú) V 0 j Ä  Èà :ÿÌüëúÔùLùqùúú´ûqüýÒý:þ•þ„þ(þ­ýýKüþûÂûüý¾þ»9ˆk æ 0 I~V¬² ~  ¦ ëMÐh1%=Ðÿ²ÿ >˜æíl»¼³Ã:òß²m þ T à X 6 r ±‚ºDš Á  –Aþ£Qçÿ×þþ©ý½ý.þÿ$† ¶’Vâ Í  µ  X Ön!ßjÅø;œ,  !#Ô!1õïÿ7ÿâþÿlÿ¨G³IW]•ǘÀ¢½× § Ï ? ³ 7 ‰ w % ϼÚFòî:à·¡^ÞZ ÷ ê  ? EþUMúGE ô ˆ X ’M®S 0 ? C  z … ! Œ ¤ o ²¨´óÁùx.FÏoE;,~Ï v ¡  í F W 5  Q¹k@2Xš ü P m \ ý A % ¾ ; ¹  s î v   4 ä % ¦ ;¦áÝ^pîI©8R0 Ô  j4°õÇè  Î >n;ÌZóªˆmq…–¡ºÂ¯{d—ìÛ•"2׿=d H :_ÅÃc¯¬*ïÑ — Û ² É M ¬ ù S ²  x ÷„ £fz¶iÏ òœzél"D²7ëÙÞ ë Ö £ = ¤ µ w ÿ Z ¥ ù „ Z † Ç Â 2 e rŒèŒ€šÔíÕˆ'èì:Ù¯£¡ J ú „ æ  8 [ € ¨ Ò þ +Ú { î + 3  à·ÍOG°uee C ê L m ^ @   2 J A ü s Ì C ÝÉîG ¶  d † o > Õ y Ðé»@²:‹Â©,é¢ò Ü t ã H à C ¸  ¹   æ — N!;zÙb-B§J¶5qgßu øJúéþé£@ Æ 8 ™ Ù þ å › M l©ïZÛs¯pc ¸_òR’ºùZØaÓ! F G -   . 5  ÓT±ûTØ~F¯.„Äs7µ|ƒÂ ‡Ôð ¸ ' 6 ü “ „ ½¥Ìçí¸WÑA½GßuümÍnÚwg§= üh é | ï ¡«5hk € Á C  î Þ Â ‹ ? ø + ‰ ý a “ ˆ J þ Å Ã ÷ S Æ 3 “ Ø  Y À RìÈŠI(¯ø ö Ö ¨ o + 緯뇑A’à ° L   Ì  ` þ Ø ÔàßÍ^ì åj½áøA†åM· ' › 9   |   t³W Ô¤dy±´%®,·YÕŠtªÐö > À ‰ › Ü 5 r r $ „ Æ  ¥ ¡ á  Rµ(¢'±!["ZئÙÁ¨Ü”Ñ Ž “ ª ¢ a ñ } 1 : ® ~ Žœuöã†Ç£®Þ&ƒý®–Ï:À,2®ƒÊ IìËìVø²zG'%aæ¼ÔCV:âX®ð&øˆÞ1v÷Îñ@‡•K¤ÁÏ¢ÃZ‹§Ä „/ò¯VÏ7—Hÿ‘âå³O÷¢sox™£ Výñ8iŒVéY¶1ãÖxûƒýqð‹T/“·F8¢ÀÛ)×ïpHfÁ\AeÇ?²õØL8°ÒȾÒ-ÒÝ9íêr¸Çx¸o»žLïŸË-©)·P0žEë¹[ÍþôµJÍ[ö©b¯4»Q 3u¼-IOE=432/!òÙÑ×ù"TØDÌ‚BŸ÷ü¯.‘ù€6ñÁ‹Y?_Á[ÈW®×Üèÿ5{¶ÞÒ”# ;/\ePáºàf¢ñ¤à¬ìq¡„ø…0Ûn½ª/bs•ò—ƒ‘¯·¨„œÙ@»C¶ùýµ:§"ÕÜ<ìÁ“DÀ 1;;3(ò‹P 2]jBÓ-8[ÉqYc€§ÛjÓQêŽ ŒÀ®`ÎqÔMÆO븰åCÐ`Åã§5ŒÌÿFÁrg…Ì'•­[ ¤ H[YVSYSDèš6Ä=·1¶OìœcB/Âv3 ú"g°Y¼)ôjŸ[r^ m{jG6SÖÅ"¾_à¼`ù—S0$àÅÇßù'rÞM©ï#XÜ;¬úÜ’Mª*Ÿt»øMé Ó ¿Àêö²XŽÚ9:åŒWŸî™zre?<^˜ÀпœMºü0u Ò 2 š # ë  d ð • W , »B=AD>/)*œ±–~,¸  ¤ ø 4a‘¾ÒÈÓëýþ^JþpÐÿÅaéo é“N­ZYã4$ñÇÛUçŠ qÄëãêBæçYe^¬8ÀVÎaÂà4Yr4*Ðø_2B(À*ƒÚ8Ml”|ðå«…º!ébš»Ä³€Q]‰{œY6ë’´ždˆŸƒå¯;ýý@“Æ„±À`­9vDù¶Z02I¡C6Ýös4 ë°ÉV';¦¸kð¿ à/ášóßÎíòz—Þ–¤©–kL8EˆàQÞ´¶ž&{Ð9¨{åÏ1Y„øóWÕCÖŸYžj58g—úÀ¾‹qè:, Kß:ø]Œ… ž°=þ [‰ï@x4@ˆH$)$^0Và%MeyÌ”ÐK°Ó»µüw´3!TÝNá>‰%¬ÔÚé{¡Å*`…váí%W†Qî˜:ÅZC‚ÀŒ¯xØahÿjÜ5N _—"LïÉÉÜ­¸1¸‚6Ø®™«:4OíH– ¶¹ã“—ˆ…ñ‚ñÿ T¾óÚ™u®<­WâݤÝ?'e`„ØjÿêíÔÊää¼2a—÷TY“dˆ×)i¯a¤Ãßdx-†Ì"`Qû°E5öG_ˆÉ„˜8Ø(£“ûÆé06¿Ê$ŽÝ3‚¨Š9îºh?®Gãd½:F¨aÏäh²õHéávŒ Rþ‡aA Ö ˜Ù{)ËÎT"Òž3ӾП;Õ¡³ã“2¹²FNl`%-‡†G ALkçú‡_GÜІ„éâ¨âÐð´.²V !p"Ö#R$z#ð!¸ 2 ºv.¥ã==Rn>ù_S<’—>5éUóéÛ2("@’ ž!,!D ÚLWæXÏ›6‹‡Œ>·7ü\7Ó–Œ‡°,Þ‘B ã!#*#8"ò  ¿(Ÿ.¯Ý¤{íNì…UC È ] æ I Õ # ²  äÖÀìVšnÞ9A !¢!±!€!r!x!!Á•.$¡:vF`> œ l “ ò ‚ \^:Îzœõ8 hM!¯#ï%(Û)È*å*(*·('å%S%»$m#l!GCq· Om¤u#<lä´w`ΑÀÛä™]Œ!$Ñ%w'o),+×+7+ß)‰(q'?&i$Ý!%å y°ïW×t€,-@böàÍ]ìúLB!K$Ê&¤(*›+Õ,X-ø,Þ+ÿ){'—$¦!©UäbP ”ú ' q é ¶  ê  )CyÍ-¯0z…9E‡×‘2N÷…rlç c – àÁXfkõä¬ 8 © Õ˜Cûµ/}³äɉ«Î¥˜ÓÂþÙpì¢è “ Ÿ W Ö Â  Ñ ì #ÿƒäfÿp„"„û¶qèó ¦ Ø { U ^ m ¨b› } ¹ í Ÿ  É nïcž¢cÃ*£]&!#¹$»%x%$©"V"t"!^wµOêF4Cèä¡»¢äñº³Yƒ}£A].ú(˜QH¸ð(ƒËŽ®uŸ(l ¼ o t NÁ^@6°Yv˜m>·Ò– !B!!˜ í#gJuÔ1Keµ0ÏöÞ^úýC·.—?p¯JVøÌÒ“§`¢"û vsWl€z J ë ’ æ 8-ê’ãÏ–£åëˆóŒx¿[LgsW÷Z’‘DÕûA= 4½—¹`ƒá«³÷•çž&S³ÐžàÇY©2 ‘ Ý ˜ )þ š Ñ   Š  T Ö p à ÿ Ç ’ Õ „ “ *y]x¬Ssd^†I—¬ï á<?ÙÝ wUÌD˜‹v€¢äâF‚ C#J$õ"2 …qÿÑ[ÊË!""7 Ílå•ß$ô á §ë„`•{ ™ ¾BKÙ1Çúè þÂO6á'¬¼Î  #(& '7(7(>'©$ï T‰ËóâÓˆÄ`žë¤_ÙÊ M#¯%Í(±,g0_3Ú57%7Ã4a2á13¡4ò5 7"75Ô0g+ˆ%MåÑ© | /›itÿºý{üÉûÞûÞüÁþíêëú›G £ Î ö A<4|΢Åë¨"+gá] < ä/¥/úõëãFó± q ‚ 3r¼˜ .ëç !¹  çâh‚ÉíÊq¥èjP \ù ’ O Û y % ¥ ´ ’  d D ¸ À %  ± V GTï 81g”+ø9Ï Ð Í"–m!÷ ” 9  $ 1  = & ¢W…V.–— ë­`I'`½‚Û †§Y)Ù~N!Úõ˜ÊCË„¡×°P(B!Ý"q#:#p"!K™wºÊ‡6Ìñ`´ã†™ÆSžôB y(æ$b³ÜG<Oóó?Ü(§¡þª–¬ê  [ ˜ Ó  ¶ U Ó>^á? ‰ " 7 k F Ó vbDÈw:5#Ú@ ýcÕÎ%š9W%û.¤a®  Z   †pWAQ°ŠäR"T$x%£%´$È"ˆ mŠŠzˆÁâ }ö ' 0åïYHèâ¼Dnkgw·Xa € 6 T  ´ D ÷  [ J µ '$ö À Ì F¥Ã¹„ WiFÔ!A’7êtk#¶&lXµµ^ö»˜iCQ~ƒÂ>³² pÙ¤Íà­KÑXöâ=Ã;®TçÔå«ú š~y7æ «  f › } å % å \ / ™  © 0 u a ù ³ Õ $ R B 3 C Z . Ì R © ¾ Ó~ ˤQ"ÕŸFÿºßh«èFm)“="”" !•aÈ·A  Ð ƒ"‘!nG S'v›Õ ´ >@~FomÜ”üòz ~ €Î…Å €ðƾj Ì¢jÀ¬O Þ n Ï A 6 > ² ‡ F ‰ {—Wõe Q - Zžcö l ~ ` É L S µ¤8[­^0ŸèÂ`•|8Ù¨¤0e×tC õñwïO¦Õ×á®ù£Ôôq ]!)"("õ ¢“Ï^ †Gí‘ñOá>þ'ýzý"ÿZK´¿£ƒ'• ; • «I‚„+­g~îË ¡ ­®Š¢ªÊ€’ÇG_ ƒ ¹ ý Sa¼Çîb!Æ#6%ï%&u%©#Î ®?Þ áæ°y i ÍQîÿ½ÿ† /°j * ÑYºãǪÍXÞ Ê"Ê#$Õ#n#…"Ÿ }Uá«å f ,çDÿ%þtýý2ý™ýþ›þOÿrÎá' bÂ|¾wŸ[Õ9pr ,Öí © ÖàËúûð6üÿ?íÞbB ÿ v‘Bvg½ážw L"Þ#t$Ø#4"Ò3ȸýŠFÍ…‘+']wa b– Ù c 9 d «  i “ ; à Q r ÿ t R é ¥ ` ü Y y ¿ kçy2 q-ê{ ¨ { Ü †ÀÝ.°µ.æ¡R¥PGðžsGäIT&õèôñÔÉü T Æ # Y ˆ é ¯ Þ Q î À µ Í Û¸YÚ« Xm4–`j"Á:”Ö û û ñ`GР¬ ²^ÀÀˆH;‡9-$#  š ¦ W  : ­   ¤ î * dÄDÓi1jô†×œª ‚ ö…vëélé³ÏgÈÁ ¹ †¬ãkA5CL7é^¢»ß * î I  "   ) W j d T V T  ²=0œ Å Î Ó ³ ò / † ¶ Ç3Hœ¢Eÿ2Ö¢ p < é M Y P ‡ ù F : + ® ×)+Ë ˜ÎÔ»¹ 4 d Õ"½‘ å d Ž / ´ì3D帲 ± ª Ä JúÙ䀳j]>µ—Ë\>‚v’<_›Àß ÿ  Ü Í „ç,yNÃÌ; M ! c õ 9 ­ ‚ m . e ° j } B  å ¸ c É Ó ˆ BPÒ§ ¯Ôô û ¿ • ˜ ßptdß¼{õ8dygI§ú^ÖfÎÕ}×½ ² £ º ‘ 6 ( Š ü H ” ( { µ _¶#vû†®LŸúV–Ä*ˉ c ôjmTLè¡z†ð… ï  ô ” aîÅØ&ÂwÕ{A±¢l?éTKßS ¢ æ ]2›aLhöç k ¸  yÁû''ów¶ÀŸQÙ†c%|JÞj÷ ‡ D Q ¹ [ ñlÈ(¾œÉ7È`âJ · = Í } G  ß v¡ QQ:#Ö(Hv à q ‚ Û  + zâ÷Aά ´ Ê ¼ – ^ŇW/ ÍJyUÕ %?:ÌZÉ 1 ­ I ÷Pÿðçßð<ãè1 „ ã S ãn¼ÕɧP‘;KéWÒ\ ï Ü ¦ 0«P07}4^Úaô›CúÜn Ú 5 ƒ Çíë«.na#ŸÓ°`#   þ Τ§›\Ó|¿Õø~r z C¼ 0ÓfèfÑíE2æšq†Ë R L /   öº‡šüžƒ³¢O<`wZ - . X _ ‹óT¶õñ„¡| E < ` — Åþ]æyá<ªcuÎSê–jw º Ç Ð Ô ­G³ãݲÏ)S VL ¨ @  =Уh,øë´…a ! ã þ u xÄ"¹TdîÿƒJ% D ® wÝ%LROU…#óÖàp=Õb Ä õ  ; v Å  ( ! ý Í “ / °  @yâ„n¼BúÌ}  ½ ¬ Ü =©GAš‚¦në<p àJ×J~Z ' é § …¥÷pøŽD ÿ2ªS Àaós  ® s V * ì ‚Í΄¤ | ƒ ¯ „ è    3 Œ)جN4 cÏLºÿ  äÑÌÐç " M g  „ z i ] t ¸ % ‰ Ó á Î ³ — — ² ô U Ô W ç u ö ™8ÐR¿Ox€Ž•£TñlÜaò«€t…o8ÓE©  q è ^ Ú ^ ù À Œ u 9 餂•Å a · X ¯  – # Ê ‘ E½îõ`òËż>O<%$;z³ÕÌ¥sF!ôÓ˜QâTÈJì¼É~ÐóÕ-¯&µlI</!ø´^&8d‚œ hw è p &   8 O ` € µ ó 1 w Ù Q 0;;2-(Ë„BÇ … ?  Î ¦ † o _ [ ] b c \ P C D _ Ÿ ö ^  v»ò$[–Ïõ ü͉M5Iy¼:L'ë´¯áLà|û;Bé¬_MB&ë}íB–ð a ü · m H # õ ¯ V ó ¬ … { ƒ š ­ ½ ¿ à á P … ¯ À ¼ ¡ { _ K O P B ¢ ; yæ«Ç+¨ S g f h ù ¡ { X  ‹ £ v 1  C  ˆ_pcö;Qm » A ÿ Ð œ W ë e Þ v E W è 3 Y Z 3  å ë  ] ˜ » ° m ” 8   E v z ? ÂL§2õÚÛÖ¹w#Ò±ßgKUS „ § ‚ v › Ü 2 | œ G Ï N ׆W2¶HÀ@ʉq~ÀèVŠâDè ] ( Ö k Ñ " 7 9 5 '  Ò w ì < x ¼$¹zqAâ€&ðúCÓˆ;Ð= { ’ “ Š ˜ ¹ å ß v Ó >×>Ÿ h¼ `Ñj;?wµõ)`ÃSêÌ^ëP‘¶Ûý/kš‹4ˆµÜ aã‘dC赑ŽÁ?ÿܹ„9î“4 × Œ N ¦  K > ù ~ é O ´  ‹ nÊø @ˆëiþ«i;0H’ú{œYk_MDOi„¢ª¥‰T ¬NâàíþõççïL¥Ÿ'ª.¹Só¤R ÿ Ÿ / µ / ¥  T x 6 Ñ Y Ü f þ ¨ o D  å ¤ ` % úâßíýýà¦Vÿ²‡Š¼Dg\*⡆ãL¶ &  Ôƒ2øÞ×ââÙ¸8èžVà¶‘|‰¢°ÇÞ.X«Ýséz © 5 ®  .  ï ± y O % ò ­ N ÓWÚz(Þ£lEüçñ&~övøj» P µ , © # › b § Ñ ü    Î t ç . P s ¡òh¶r ¿VùÉÄø_õ–+Š»¾˜f:4IfdK $žB 3:-ì<6<õ®HÎCÀc  Ø Œ  … ´ ª € \ Y † à ö ÿ ¯ ÿ ö Ì »Ý2³]ÀL¼1¸w}ÇHÔE˜Ú‚˜Iù© 4 … š { 7 × ! è¡Kë]Ç J§?-WjÅ ¢Hˈ ƒ Ù = Ì u 0 â P ~ ^  ˆ ò Z Ì V ó ¥ @ ¸ÿ*kÖyLQe|p`0úÊÄû\Ì:£öN¦·^  · O É * ^ ˆ § Ñ  R ‚ ‚ J Ø L ° < þ õ  ; N = ÷ …  „ " פŠqF¦@ë±§³Å¾’8½0™ž?÷³m ˆëO¾ÿTÿÿæþØþÑþêþÿWÿŸÿáÿ"Z¯ª_Øtüi¶Þ÷ù  Øzö`ÐUî Tܼ Ž}z¢âOÇNÌB¦‚ôjÇ+†× ô©FÓa÷—=áz ™'ÃyDïÐÀÆâ^².;2$"8Z†¨ÁÏà÷6gÒóðÌ”`FVŒß2€¸ÝðñøüMð'3ä¢eè«m5ý+eÄ<Á8~‘{R?A[‡¬Â´‡Dö–G ÿÿ©3ª$¿†‰¡¿Ã°ˆG×ê?ÇN¾ Ý·¤¥©§¢wC Õ°¥±Åãûÿñ×xmt„”­¶±²¾ï/v»ú Ö“b;.((ç—Bìš`-$B\eE¶c7)=f’¿âøûøìê#\”Ï P”Ø-=6;Tx¬áP°Üøúݪi)Ò0ñ߆ulNA öÔÎÐ \Àh‘¢š}pa`i¥ÈØÎ¹ŒS «Kì—cEPÁ Tœã.rËFå \ËcÇý öЀ&¿\ó˜(žM›ìC¶M=tÌ'öhý¨^òJ†¸ã Ùxê/Zt§®k(Í^Öÿ3ÿ‘þþ¥ý‚ý ý÷ý|þÿkÿªÿ¾ÿÔÿúÿC¹Ié€n²Èñ—‹}{lR*ïé'[—Êò    >i›Îêùüþ$=WinQ½\ñƒ´n4Òd0ãò%€Ü>ªŽðN¬„ïX»3CNe‚œ®¹´‘5ŸÖð 6йJëÈ¥\W‚ÜZú©VÝ)MWO?.5V}“™‰j1ê¡b: "7Z˜ù|"Èqþr¶Ôç OœÞïÆQš½ØÿBš±Uùÿƒ.>Žø[ªúF³=晴MÉå´Oè©™¥¥wVlkvœý‹WJK9åÿÏÿðÿHÙˆ8Ê;†ÂQÅSÂsí)æ£[(á°cý«hB+ òÃ’h^kžü`µÉ¢Xͪ•‰‚cK5*%*1²OõÆÈZÅ&…æA”ÀÛD›ò1^nhW=¿? ¿“rJä²j; ãµµÙ@«"”#®,­!­< Ä 0 h Z  Ä h  ³8³‹ü_É%€õ—uyk=î¡b>;IxËQò+„²­Ÿ‹nA÷›Cý°^ÝM¿Aíÿ·ÿ’ÿdÿ+ÿëþßþÿzÿ‹!Äz/×O¤Ý&²{g F J  Ð=cfu Ú)@8EÿŒþCþDþOþ1þþýèýöýCþÂþ™ÿÈ;Ùyéá>ƹ)  ò m f Í ¯ :–|$ðÒÿ®þZýæû•ú²ùiù´ùXú(ûçûjü®üÔü'ýÞýêþ?Åh8ßÕW‹Æ)ÂwÿWt“ÀÿÿQþ™ýèüBüÊûtû^ûpûµû5ü ýLþðÿÍœ2}™Ÿ¤ š _ Ó ø ñ Ô ‹ à à KÄQÈ…1Êþiý0ü8ûzúàùXùñøÝø%ù¸ùTúáú\ûßû{ü?ý-þ+ÿÝ„™Ñ«7£„¥ÿ"ÿTþZýSü{ûïú˜ú‚ú‘úÝúQûëûüýtýÿýÈþ«ÿ¤{-£Ü:˜üBU? ¦FjšÑÿÿ.þDýhü‹ûÀú#úßùôù_ú ûßû³üý@ý=ýkýØýdþ'ÿ: Š® BŽõÁNwmmm^TGF'Þvþÿ{ÿôþmþÿýáý'þÄþcÿ·ÿœÿ@ÿ¼þ@þÛýý~ý‘ý±ý©ýzý/ýýáüÃüºüÂüýmý¤ý±ýÊýþ[þÄþ>ÿÖÿBƒsB×ÿÿNþ£ý ý•ü*üüZü·üãüõüý/ýVýIý_ý¥ý0þ½þAÿéÿ¼wáAͳ–?È8|?åoÓ:ä¥X¾ù?•óÿtÿÿÿþþÿÿSÿ¥ÿg¶(½‹aå ;~†ž§–oîAVEÛþÖýýaü„ûºúú©ùAùèøçøwùIúûüFýÅþ¤×èùÁ„TÞî¼Yè<ÖÖé° BŠîw90^ïÇÜÏ™Ië¡•ç \ Ÿ d õ V^Õ ñ  N Z # 9Qò]ÿaþþ)þúýÇýðý‡þÿIÿZÿÅÿ¡r]Ölý{ÿjªµ´À·ˆ5ßt—TC/$Iy²èQ½Rñ`¡ôS»S õ 3 # P µ ÿ ² ( õ K ‘ M ´ E  ƒ¢òÕÝlef¢çü'Ĥ¡¬‡–2áhßfAÑ.ûÕ|åW¯°:{¯ð\$n˜äó/Åw­‘ÒZºÑ¨}ÐKâªeÞÿ?v~C:ͤB nÝá¶OÛ‘h: 0d¯÷=QS‘ †¢®¹:8*{<ªžYTva ¡tgmn§ËÚ¸z4ØÉÖa˜}Yh7?t`õTÂi ”úÿ¸ÿáÿ@s[?2Dp橉A±6I(è®}F÷§^µS²ÿcÿ_ÿ\ÿÿ°þLþGþ†þÑþéþÿ‰ÿfU ³\&Ô”‘ÎÓ<  Ì,ª%Ӈ义tÿ×þ½þ÷þ$ÿ2ÿÿÌþ§þ£þËþâþîþ ÿ^ÿÎÿ&[„Àâú"nÇèÚ½¡p(׃"ÿÿŸþUþúý~ýý°ü€üyüü¾üàüòüÿü2ýŒýºý²ýsý\ýzýšý™ý…ý¶ýþ§þîþLÿÌÿvK‚Ù>eNýŸaÀÿbÿ?ÿÿþþý­ýƒýYýýïü ýlý­ýÃýºý¬ýÍýþ¦þJÿßÿs,û–ßðDÖV‰\ä›#„ψÃÿÞþÎýòü\üðû€û3û:û‡ûÍû¤ûNûûû ûßúÅú(û¿ûïû©û_ûµûüÐûÜúú[ûÂüzýjý¢ýJþ·þ.þ1ýŽüXüüûšûáûùû…û ûãúÔúÃú"ûü÷ü!ýÎüèütý©ý%ý•ü–üæüðüëü“ýˆþäþKþÔýoþ•ÿàÿëþîýïýÞþeÿâþ¦ýjü­û4û·úàù ù°ø'ùØùõù™ùsùòùAúÌù<ùåù§ûýñüiüÃü£ý›ýiüTûZûÑû…û»úzú÷ú-ûkú|ùuùeú!û$û¤úbú~ú£úªúwú4úþùZú^û‰üøü„ü/ü‡üJý‡ý]ý„ý5þþáýµüéû„ûºú’ùèø9ùÔùñù¼ùÎù/úJú'úGú ûùû¥üíüýýêüÁü¡üRü£ûû5ûÉû üÂûûÄûüÄûûÀúûBû÷úú·úhûÑûŒû ûæúû_û°ûeütýHþ‰þ{þ–þ¹þþÔýBý$ýaýÃýþ>þûýLý¥ü„üËüÑü†ünü?ýpþ:ÿ6ÿ ÿ>ÿ“ÿŠÿÿõþ ÿáþÙýMüû?úÍùwùmùÏùvúøú9û"ûÆú3úÄù®ù úšú5û¾ûêû«û3û+û°ûoüýŸý¼þ+]«e"?‰¤4Ô(+ÿ÷ýóütüeü¡üáü!ý\ý†ýtýý´üžüýÃýCþzþ®þÿZÿOÿÿ%ÿ”ÿ\u­!߉­;œoÁ!”ÿÈþ_ý¿ûuúÖùùyùeùƒùÉùóùïùÎùçùAúÉúVûÛû„ünýnþ ÿYÿLÿ{ÿôÿžGð—!uœ¢sÞýu ÿÀþ¬ý¤üÓû>û¢úùùhùFù•ù$úÉújû"üâü¨ýOþÿÐÿì Ün½Ckn_] ¯òð¨+Äÿ]þ9ýâûÀú¿ùùÄø¥øÄøùŒù úæú¯û‰üý¡þÖÿòåÁ€ñÆ|4ï¡wX/Ë?°*‘ÿìþJþÔý‘ý\ý@ýKý†ýÒýþgþõþ¸ÿv/ÒYÌ*™Ùß—AìUJò§ÿ þòýsý?ý;ý\ýýšýÎý&þ þÿ‡ÿúÿ$‚…<óÈÆÉæ&7( Ív÷ÿyÿÿÔþ²þˆþ=þÎý€ýLý$ýóüìüý|ýãýMþºþÿ/ÿ*ÿ:ÿiÿÊÿ AV[KÖÿ~ÿ0ÿõþùþÿEÿsÿÿËÿxýkÂ~íK˜à?•íRÅ.çíÝ©DýÄuïM§þ@ŠÊÿÿLÿ*ÿ0ÿYÿkÿpÿwÿuÿdÿ3ÿÿÛþÁþ™þŠþ‘þ¾þàþåþÇþ“þTþøý‹ýý¶üaüüûû~úéù^ùÏøyø^ø£øù¸ù^úûÛû½ü¦ý‚þuÿkc…ÁÁióz(ÔuÒ¦sÄÿ‹ÿ{ÿÿÁÿ.ÉpóV¾'‘îq˃:ðk‰f:#írÊ v“‰“¤¦ÿÀþ þ»ýaýüü¡ü‰üüÍüõüýNýjýlýOý0ý ýÚüœüpüTüQüGü1üüïûÏûºûÏûÝûáûÁû´ûºûÈû´ûˆûtûˆû·ûÁûÒûäû üü:ü{üöüzýöý—þ7ÿëÿU¯ûeÖ`½\É4—ø>_¨Ñ¿…,Å;Á…³þMƒ¹éúìÿCÄ[§þýÖ nD1AV]J¼5€äq#á†lŽŒ—·ÿôþ8þšý"ýÍüvüü¤ûCûû×úÍúäúûúøúÕúúqúNúúñù×ùÿùQú´úû¡û3üÉü`ýùý°þ\ÿ•Ng]C/#Vnhw‰¥å/»:ªî&FYl¡ a«ÔøöóæÜÙàñà” ‚øf³Ûùúÿæþëýýeü±ûûÂú¥ú|ú*úÃùxù]ùXùfùùçù*úRúrúµúñúûDû†ûöûgüÈü ý4ý"ýÝüzü-üãû”û6û÷úåúßúÔúºúºúÉúòú?û½ûaüýÃýkþÿ´ÿHÈi"ÜÀ”JÆø·p<ÃGÇIÄ#JDB>;]ƒ{\8<942=&ÏJ¿IÄÿ/ÿ¢þHþþÊýrý1ýýýý@ý®ý2þþ¼þ þbþüýtýÛüjü&üýûÕû¥ûkû(ûÅúHúÓùvùSùAùAù>ù9ù?ùhùªùøùFú«ú@ûîû˜ü0ýÓý~þ:ÿÞÿoòaœ“Sù•}ÿÖþDþ¸ý<ý±üEüíûÄûÆûÿûvüíü]ý¶ý&þ—þÿ¤ÿfI)ÍM¶Ç|fs-uae-2.2.3+dfsg/share/fs-uae/floppy_sounds/drive_spin.wav0000644000175000017500000004732412162366653024134 0ustar glaubitzglaubitzRIFFÌNWAVEfmt D¬ˆXdata¨N*ÿÍþuþCþþ¬ý4ýýý¯üü®ûøûÅüýXþRÿßD Sy©¦É…êÉ”ÐìÕ"Ëþ¨ý€üûûûþúXú†ùù@ù‚ù¨ù úÚú¥û/ü‹üý±ýþ3þÓþšÿíÿJë<ž~µèâíAɾÿOþ!ýaüüêû#ü©üPýçý`þþÙþMÿ÷ÿê¡w`Ê/:AR¸Šƒt—ÿ“þþü°û|ú5ù ùqù,ùóøø=÷b÷Ù÷ªø&ú®û•ý·ÿ2¤ýÖœŽJã8õfºŒ¶|MÀ߬A™þñüÍû[û„ûünü«üéüéü¨üeüIü³üZýþ¬þÿÿ™Iè lb¥5oŸ•AâFìºÌÇ÷^ðP&þ™üüeüýþ&ÿÿÿiÓÿ%ÿõþGÿúÿ³ù öÿ)ÿ‹þ(þôýÙýëýWþÉþêþ¸þqþ&þÚýöý¶þýÿ,½`‹GÑÌë +ð‘’0çÿÿÿl*ù<ð³ +ÿeþþvþ¶þÖþ¦þ>þ¢ýøü—üñüéý_ÿ ©Œé·WÊióJíðñ«>¸÷Óšÿ3þÒü÷û˜ûqûAûÿúïúÝúû¡ûrüYýYþ8ÿïÿ¡f:§KÞ:޳• û'ñ='(ÿ÷ý¡ü…ûòúóúUûÿûêüðýÿöμÌÝQ6, ¢ ; _ ÿ G –   dÁÔï`ÿŽý§ûþùâø‡øŸø¹øæøBùÝù~úÍú"ûMûSû‰ûü8ý¬þ1ö²-u€[ ÷ Z a  q lòÞÁÿ@þ–ü8û¿ù]ø÷ìõØôSôƒô õ÷¼ø_úÿû‰ýwþ³þ˜þ¥þñþ!ÿmÿÿ¢ÿmÿ‘þ”ýÅü*üüüQü“ü½ü×ü¨üWüðû¯ûpû÷úHú—ùåø:øÀ÷Ö÷¾øDúðû8ý3þÿ+~áeŒH…s,²¼‘Ï”q&÷ÿý`µ^—µqï©KåmðW¡ÿªþþþwþ4ÿÙÿw#ÕcCv6øþ.þ´ýŽýˆýÊýþhþ´þ´þþPý•üöûVûÂú“ú–ú”úúŒùù<ùdùõù ûçû7ý9ýBüÿØýÇÿ,î»ÉQ #  Î   ¹ñ˜hžZñ‹ý*ÿáý¶üÍû¯û•ûaûDû§úõùˆùãø¨ø ù§ùû•üþ’ÿ’ /(†m€0V¯£NÿíýüÙû;üÍüäümüˆû3ú"øºõ¿ó®ònòócôö‘÷àøÍùUúKúeúíú¹ûý€þb¸÷âˆxæ5zt='¶èðÿ(þÆüþû¼û·ûoûêú‚úzú½úJûüýþýëþ·ÿ„_îÞ¢æßÖN\7»T¡€R‘ÿrÿ)ÿþŸüjûÃú£ú¥úÄú)ûÉû-ü™ü'ýÑýhþÙþ›ÿù÷&/! ÿ © » F ¥ å ; × / 7¥°Ï„¡üÿ‘ÿhÿxÿÿ þzüûú~ùBùcùEú ûýQþïþÿ ÿCÿ¼ÿ—ê6”<4Îdÿpþ?þnþþˆþ$þ•ý-ýýý+ýý/ýyýïý:þþ¨ýCýæüÈüäüºý"ÿÍfÜ8\ÓÂtÉWµ[==ÒÁÅ•Fr½cwÁùÒAÏÿÂÿ*ÒqÁŸ$Y?ÿ=þý¾û•úìùÛù$ú†úñúûüIü'ü²û?ûû‡ûÊûüWüµüý¦ýnþ×ÿ£á{þ…>üefO´Q°¸•ÿãþ<þ þ/þèþ ì^²é<Û¹À.û÷ y * 3 ü h s d – í?P_œõâM¯©ÿØþ¤ýðûEúáø¤÷`ö•õzõ ö)÷Öøàú=ý*ÿ("Y¢j¸Öã—¬šj®ÕxN÷÷ÿçþøý-ý6üäútùbø„÷©ö·õ/õPõíõÁöî÷ùZû ý•þýÿfºrö V y ú ¿ ÚØ}2÷ÿ»þ±ýÖüü‡ûçúúPú¹ùÎøB÷«ösõaôÛôØò+ô’ó õ¨ö‰ø ûýŸþwî'"¢> þ 8 Š Ü – Bªz¼™–]ãÿ™þBýüîûaüZý³þÊÿT’?Åÿ8ÿlþÂýoýyýõý±þ¢ÿ§wU³!R:|ØÈþ@ý!üFû³úõùùFøµ÷|÷^÷d÷Y÷e÷`÷e÷{÷£÷ø&ù¯ú;ümýþ!þãý™ýÅýYþ!ÿþÿû ãZQí3M[kwÿµþÚý"ý{üüñûîû¼ûmûû˜ú9ú´ùÎøà÷J÷<÷R÷e÷¥÷løaùBúçúZûÉû&üüžûdû¬û”ü·ý±þ¢ÿ1êÿáþ°ýÏüAüíûíû;ü£üý9ýÙüŸû¤ù¤÷:öpõgõ÷õ†ö÷e÷~÷>÷ÚöQöáõzõYõ¬õmö;÷Â÷¡÷v÷‹÷%ø5ù(úÌú}ûbümýmþ)ÿ ÿJþQýâü ýný“ýdýìülüÇûûqúøùØù úEúÕúêû6ý"þ>þ¥ýý„üBü(üLüwü±üTý)þÁþÉþjþåý?ýnü¹û_ûqûƒû#û‹úWúŽúÝú+ûƒûüü˜üþûû­ùIø0÷÷Å÷/ù•ú±ûŠüýÂüÉû ûHû üGý”þÞÿÏÞ’þ ýÛû&ûûUû9üIýþLþ.þØý?ýÍüáüJý“ýKý¼übü–üÑü±üåüÆüý2ýƒý½ýþÙýAý¦üüdûƒú¦ù ùøø‹ùÃú×ûDü üOûPúRù’ø\ø¹ø«ùûúŽü7þIÿ}ÿíþïý)ýªü»üqýTþûþ…ÿÇÿÅÿXÿÐþ3þ‘ýþü³üâüýÚümü¿û ûNú¯ù„ùÛùtúýúfû-ü@ý°ý•ý4ý1ýŽýçýSþåþŽÿ!Àÿ?ÿÅþ‡þnþsþ³þ"ÿfÿ3ÿ¥þ þýõüöû²útù™øRøµø€ù}úUû4ü#ýéýAþeþiþuþ þVÿoŒVæTe±¢oLÿöýoüû¿ùšøa÷möö‘ö÷;øløeøoøtøgøFø4ø'øøÛ÷Ä÷ ø…ø ùú»û¼ý—ÿöŒËoþ ö¹Zìÿ1Mþ¤þý"ü$üqüYü­ý8þ6ÿv4ïüîZZä€ îm-ìÌãZw-¶#ÿý>üpûÚúwúCú¼ù9ù¼øá÷÷ºö,÷{øqú˜üÌþsu¶\›ªÿÿÿ{ÿpÿðþßý ü<ûíùäøJøcøGù¬úoü þBÿ/ ½Âwçz9 š¿Èð]Ls‰/ 0 Gz8öàÿOþcýýýäüYüŠûzú8ùÉ÷ö¦õiõnõ§õö˜öW÷Nø:ùßù=únúú¥ú~úYú,ú4ú—ú'ûãûŽüøü;ýdýÂý^þ]ÿwƒeGüS {ß JÒAàÉæí,?R1-7éFÿöþÌþ,ÿÃÿ|œêþ®z Èÿ|ÿ;ÿÿ ÿ ÿ-ÿSÿ®ÿ4ðÿÿþÓü…ûrúÔùÚù‚úÂûIýþOÿzÿ)ÿ­þ8þöýþ–þ~ÿcÖÊnÁÿþþ8þ¨ý‰ýÄýMþÒþÿÿ¿þ+þýðüˆüüÝüðü²üjü‡üýÌý<þyþªþöþ5ÿ7ÿóþÄþëþ6ÿwÿ­ÿÚÿøÿòÿ*ƒ*ÎJÿIþËü*ûúyùDù2ùAùµùKúiúáù3ù¸øtøiøªø6ùú$û„üþøÿ 6å ß + Ú N Â_g¾a  ³ + À Æ ? ¸ K òV3>s[¦¼±°Éÿ;ÿÿGÿ„ÿmÿ<ÿöþeþ“ýÆü+ü·ûhûCûCûû_ú…ù¹ø×÷@÷úö÷œ÷—øùNúûÔû8ü†ü/ýcþ«ÿÊ…Óפÿ‡þþ´þòÿo ߎžÓ–`„¦ ÓŠ Æ ‡  ÒŠ(äf{ H £ • J Æ 2 § ¤  Ó Ì À K B  ½ ª á ýÜm€¬Èà³.mJ²!èþþýëüü<û ú¢ø'÷Bövöþö¦÷ãøKú–ü§ýEý1þ˜ûYüûØûýÿþãÿjÛ /¬n 2  ¥ ? ä‘äÜ|€SU7¦‹Žs:cÍ4 ÍOIñ)JI ›X ³2!‹Èm!—üÆY\ÜFÎr¿Íå„®V”ýjœ‚ÅrAhûÿîÿÕÿÌÿðÿ‰]ºe+þÄh ÐÔÌjŨj ¦lóCYøF‡ÿ¿þþ!þ«þžÿÐ0Ÿ ¢ë m 0 D " 7 M€È É t  ) ã Ëô'D 9ä¡Íx4hC`G"%o’Þ‰™mH`ŸjFä·ÙºM£MD™“0º˜>25ž¨±ÿ-ÿÞþhþ“ýØüŒü”ü¸ü+ý þjÿN²™;×w|‘ È£úÿôþíýý`üôûýûÀûû+ú¶ùÞùYúçú¨ûLüCü,ûWù¼÷÷èö÷¨÷÷øú×ûsü¼üýký…ýÃý”þ!¯©ü,6Ù QrCB ™î߃$ú*BN^<ô} ˜‘±crMjÿ=þfý’ý)þêþªÿ•."ÿ|þ!þãýþwþÿ…ÿ­ÿšÿEÿèþêýAüAúPùµøÙ÷mö2õ õö÷m÷ ø*úSüþû¹ùVø¢ùSü7þãþÓÿ®¸b®Š‰ê.gmL2\¯oÓN99 ð °Úáó~ÿ–ý—û˜úûÉûlûçúSûoüìü¤ü%ü?üïü[ýºü…ûúžúû:ûûûÆû'ýYþ‘þ{þ×þ,ÿ#ÿÌþ÷þÙÿ´ÜvtÿÛýhûù´÷çö ö>õJõ«ö½ø¤ú&üÕýšÿÀCÖ_7è(ÿ¿ý ýDü1ûtú¥úû±úÏù úÂû5ýzþhýný'‰þ`ÿýJûBú[ùAøÚøŽøéøúîú7üCþpÿV_SÖóÕþ¯û ûáü}þ+ü˜øŒø}ûíü×ú¹øIûï”|ÿYö%mqÑ@ÿ—ý ýzýŠþ1ßûÖë¢cÅ vuÿÒþ˜þ'þfþâÿ^ríþüÿõ‚þÓþX ¦Úªÿþ9ýkûëù|ùÝùþúýÂMyÿùý·üßúåøÅ÷c÷mö‡ôZòñáðZñò»ó ÷û<ÿ”´bÓprx»¬;³Æë Å¶€¾³YhÿWþËýÔü:û…ù™ø!ùûƒý¼ÿp§ÿ¼þ©þžÿîSß×8 ¾s=Ä•Pø=ÙþSýŒûåùùø¸ùÁû:þGžŠXKìÏÿÊýþûûðú©úÒùùDùú+û%üýíýEþþcý—üü¿ûÄû üîü¼þÓ¡ uZP£×[ª·™óÐÿ‚ÿ›ÿtÿÈþ/þþþêý/ýïû¢ú£ùùùÐûeþ Ž„Üf|0R ¼lV€Ä"Žtÿxý ûgúØùîøª÷|ö†õHõtõ–õƒõVõÎõ÷ùZûýPÿµxgKômP‰„zg÷. oËžõ‚þœú÷œôçò ñ˜ð;ðcðœð¢ð¦ð›ðiðBð¤ðkñ4òÁò}ó}ô²õ¤ö÷™öwõ\ôô&ôâô–ö7ùHüÿ;œç÷ôÿÿýý’ýoþæþÿÿþ[þïüØúù0ø6øùHû>þÆß*ØPÂç½=†1"Íÿ8ÿŒÿ}3‹Š—ö§ r¦åþEý®ûéù¥÷"õåò¼ñòåò“óªóÆótôö¯÷“ø°ø øùú–ü¡þÏÿúÿ&ÿ}rw. 9pSÿ©ý·ü2üìû—ûû²ù øö8õ:ô¸óXòjô•óHõõnõƒöÌö÷{øùtúÁûRü±ýrÿa£m÷à˜¬l/ЋòYcÿNý¤úøàõ™ôÝóVóGóóÃò¦òòDñ,ðdï•ïßðñòMõP÷°ø‘ùú ú°ùÿø‡øÆø’ù‘úyû,üºüÛüºü·üùüOý¨ýþtþ–þþ/þ½ýý/üWûîúõúû‹ú‹ù—øTøÝøÂùú0û¾ûüüIüOüü û.û9ûÝû³üýýmýýý°þFÿÚÿ?T÷ÿÒÿ8ɦËÿÖþBþïý'ýÏû·ú/úXúÜúíû\ý\þþý!ü«û+ûbú®ù™ù-úçúOûSûèúúCúµú×ûˆýøþ¤ÿˆÿEÿÌþèýmü´úiù×øùåù²úýúû!ûiûÖûnüýuýÖý4þÏþ|ÿ+Ú¡‘ªŸU˜-átð_êp"Ù­xþJ[ÿ{þiýùû”úµùù=úû÷û ý(þâþ0ÿ/ÿÿûþ¹þžþòþƒÿ`~‘h8óÿáÿ@ï–F}~jP‰Û•^'ÇÅ ?ɦÁåòªÈ„,ÄþZý2ü©û®ûôûDü{üŸüdüñû8ûùú6û!ü—ý+ÿÜb5‘†o ¨¥­fK6¢ËþPýKüÕûÞû8üŒüæüÿüý9ýzýþÿy˽»h ) ý € V6׫ 6  j ÔÎX¡ÿcÿjÿsÿAÿÿÙþ¡þkþxþèþ¿ÿíH[ãÖÔ3jYh/°Btµë¢D½8Ï~¦;º|²ÿCÿÿÿ:ÿÿyþ~ýŽüÀûû¯úâú¼ûÿüDþÿ6ˆ÷Ë(Òo@ \ óW™¿ 1p4 ±ÀþËü¸ûëúvúÊúºûqüUüúûñûüIüwüFý½þ\ï‰hïù}à º Ø  Uö~:Ñ€Ùy´] ÿþ¶üBûÀûòûý¦þ|ÿXY Êxÿeÿ†ÿ˜ÿ^9 cñìí†3=Ù8¾{þ©üûÒù€ùmù|ù)úSûýÙþnxŒãÀlŪTÈO±Œ p ¤  æ dZ#;jc<ñÿ~þ;ý ü ûvú8ú\úèúcû¦û‚ûû³ú¹úúú†û”üGþ3Y # ô0š_e,ˆI_(QýøäU^9×ÿBþ±ükû¯úçú´û«üÊýÅþÿËþ6þˆý-ý}ýÞý]þóþˆÿ¶ÿQÿÒþþþjÿÈÿ uߤ{69M¨h¬7aÿ"ÿöþ´þ‡þ²þ3ÿšÿÈÿÁÿßÿCâh™G»­ÿ"ã½3=ˆâŒºÝãÿû¦ifJùøyÿËþÿˆÿ+¤ kvÿÝþ£þéþ”ÿžÃdtD$&7¢ ¾’]ö|ÿ@þTýAýþý ÿæ»ÙÀÆ’fu«eŠ4Ùs¢ ùöÕwc/ ôû‚Μ3¨}ó;¾¥Ï]붨ÿÛÌ ‘ 5 Û > Ý ¾ — ²¨ Y =T3<½þþý¾ýÒýKþ"ÿºÿÎÿ…ÿaÿdÿ{ÿ&ÿÅþ¥þTÿ—º9+zºÄÿvÿ*ÿÿlÿBX› C)õ"Õíö„¥Š=mQþv6ö — Î \ q E 6 © ’ t Ó d h šwÚÿÂþ<þþþ þþýþ'þ7þ"þ$þ„þ/ÿ¹%Å´Á¾¤š´ãí É ø  = ¨ ó  Á õåäÔ$ÿðþEÿˆÿ»ÿO ôW<í q [  Ÿ@2˜Å & < Ý º Ê »  ‚ b ø B m ¾kI˜ý”üþûÞûýZþ°þ;ÿõþ}þÙþ5ÿ2V—ภC$°¸)ãšÇ¤íTø€ˆàÿ ÿ"ÿòÿ¢¼mÀÿÿãþ8ÿvÀûû¤ ò š Y ½ Ñ º Š  ü šitjbaŸö ëÿ"ÿŸþ1þ9ýüû6úãùñùJú9ûVü7ýÁý'þQþCþÀý<ýýJýPþÂÿ2Xú(üð/ãj¿¡3ħì‡U,w2mY)ìÓÿòþ@þ²ýVýÿü¾üüüÊü'ýËýÑþìÿý‰~ÏÏÿ¾þ¼ýòügüìûWûÇúVú¹ùÍø÷XöYõõ2õ õ2öáöv÷¯÷Î÷Ú÷Ó÷Ï÷ñ÷¿øbú£üöþÍÙ"98k¾lly=Hiý*Iÿ1þ-ýkü‹û¨úú˜ù)ùšøøÃ÷&ø$ù^ú›ûpüý—ýzþTÿ ÎΫ3˜ÒxäMìxÀ™ÿ>þýãûµúšùøÚ÷3÷döõ×ôô1óIòÆñ©ñÉñòWòâòÌóÈô¤õGöçöý÷zù÷úwü“ýaþÁþÿpÿŸÿeÿÿãþ¸þ”þ£þßþÿÉþþ8ýíüýýkü·û†ûÓûêûûëúnúú/ú¢ùˆù¡ùDúú®ú\ú1ú4ú˜úûìû¢üý<ý'ý˜ü±û†ú»ùFùÛøuø„øù¯ù×ù¸ù¡ù±ù×ùæùÆùÈù[ú@ûüNü(ü]üÈü:ý€ýrýOýEýqýÅý6þ¨þ¾þ€þ þÜýÍýàýHþÃþæþþÓýýüÓûáúæù•ùúû¾ûüýû»û3û¾ú½úûÂûhü(ýþ~þBþŠýÃüü0û€úLú™úû\û–û¢ûSû›úÛùÄùjúMûÐû(ü†üý“ýþpþ1ÿìÿš@°d=5X  ~âûºf"¥÷ÿ)ÿ‰þ*þþúý½ý6ý³ü!üPû@ú\ù(ù±ùÏúäû!ýYþÚÿöqáÈúäÂqG`l;¦dÿXþÖý†ü ûú©ø¹÷Ùöžõ?õ7õ5õUõ;õõMõ@õ#õmõö÷´øMú?ü’þ,[À¶ 2 ɕۉà ù Ó w ÿg®¦þóü"üöû6üØüýÑýëýþfþâþQÿ€Üßµñä= o }jýVš7 .ï £ 1 ,‡LÿðûÔøïõ óýñ'ñýðTñ/òIó"ôÇôZõFö†÷éø0úÁû²ý¦ÿK´ýêä ß [ ´ 7 ¤ ÷   ® ë Ü ·Xñ¢šÕð³ˆÿ.ÿÆÿÄÅí‹;Ý8 T ( Ë × ˆ Ù {  Á L ÜQ×<¡’•Ô¡Ãvq«äïÿÿ^þñýÍý,þÚþˆÿÏÓüø“¡z+﹡ÅÖ¹9'騜àÿiÿKÿŽÿŠV»ÿ÷þ`þîý—ýMý ýïüMý5þdÿs>÷˜*ÄËàâb?§ý8‹ÏÚÿÿ`þEþ“þÓþÿ[ÿÍÿ:¥øaôiµ!²q"²4ä¼ÂØ 9 ô âüó188.ç  j÷i¿äÿøý#üóúÄúwû´üÏýÄþZÿ¤ÒšCáÿÿÏÿ|øSÌtK"G’ÿ»®gÿRþý$ýÀücü×ûŒûtû†ûLûûû“û“üÝý>ÿ’ºkÂÁãM ˜ 0 y  Y û T U “4Ýf°!œ{n…ÊLƒÁÿŸÿ{Âö®@¢nßÅ9 W µ°!rhx’*áÖOÿaÿßÿs©­^Èÿúþ þiýýFýîýÞþ¯ÿ£ÿIÿ ÿMÿ’ÿˆÿ6ÿÿ7ÿkÿ¡ÿƒÿÿ…þ„þ²þ‘ÿˆiÄÙ_“\ÐÍÜoªü"ˆS£‚Ãm~·ëSî\ _l‰¨U¯ÿ=S20²Æ¬n6KB`ß‚&›"{PÊv€®K0ÇÚm&63ð̶F`«ãCÈ+6 5ûömÃ÷^ Ü  Å ÕÑñ%8+)“@-A°Ã{ÿþÔüÍû ûˆú+ú.ú–úûú ûEû©û!ü™übýfþñÿöK²Ä ð  ' ^(s B  ¥ óFÕ¯¾÷j·Çÿ”þ5ý üªûÔû×ûEûòúÑúÞúUûÌûŠü½ý¿ÿž¶¯D \ ½Œ"…¸ìÔq®M Uuçÿºý±ü±û¢úuùPøh÷ÏöŽöÈöî÷ÖùðûËýuÿz¼×mß; ´ . _Ÿ< A  r ¤¯^ÿ»ü¹ú,ù(øÝ÷â÷ì÷ÿ÷(øZøÞøkù'úNûïü¼þsÓ>clrD½ì ÓŒÞ=îoCñÚ‘¯ÿþý,ü,ûSúîùÝù ú!ú>ú¨úÑûýôþ'%ùÈQì…ú5×§PxÞ’òÿšÿ/ÿÀþ×ýÑü‘ûÑúäú\ûDûiúðø³÷ëöqöÆõ¡õLö´÷iù¯ú•ûbüý|ýþÿ-#©±rcû;|ÿFÿ½þ~þÏýíüÊûµú÷ùÑùú£úûmûìûÒüÙý³þ5ÿ&ÿÀþKþ/þpþ÷þÎÿ ãsŸ¦«ÍA@¬@+Êþ½üû ù8øýö;öÅõVõõõÿôõ5õ[õ’õ­õöÔöÉ÷Öø1ú üþýxÿW¶:GÀGT²íõ˜ÙÆÿXþ¬üÿúyù9ø&÷Söaõgôyó½òOò(òZò$óZô†õ³öø­ù¦ûšýÿîÿÈüÌT`¡?0Wýþ]ûVü2üü&üü"û[ûHúoùZù8ùöøGù ùqùyúûëû«üýöýÿ·ÿ³»»þhý“ü²ûÙú ú}ù^ùÝø©÷xöˆõõÌôõYõÃõîõßõäõÚõÜõýõöŽö­÷ù¾ú4üýºý¬ýgýjý‘ý¦ýLý¤üüÊûüœü%ý•ýªýýüãúìù,ù–ø9ø:ø%øÔ÷%÷Xöüõ[öN÷êøÚúØüþNþÌý=ý™üÉûXûÃûéüœþµ¦!{ÿâþ£þÃþÿzÿðÿÖÿìþjý?û%ùÉ÷÷÷x÷þ÷©øùù£øÇ÷÷&÷ü÷'ùŠúÝû½üýüîüðü.ý]ýLýZýÐýÄþ¹ÿ)ïÿRÿxþºý9ý!ýýêü7ýÖý8þ*þpýqü|û•úÙùùªù=ú¨úèú|û’ü"þñÿ‡p—›é¡ïàÕƒèeͨÔ0ÅB¨îÿ^ÿ/ÿ°ÿHÊ!M)†‡ÿþþÛýëýŠþrÿ^î Zg×$"½«ˆv5ó~ gZŒQ­¸ >BWÿšþþßý¯ý‡ýïüãûÙúuúoú-úúùú†ú?ûü7ý¦þ]r€ý6&éV­Y#ŒÿFþþ!þÂýåüüšû‚û¼ûQüý²ýHþºþ0ÿÒÿd5cøN!b¹ U Å  Cä g ª w À í%ôþÿvþýƒû0úùWùCù¦øí÷¹÷uø ùúÃúµúÍú,ûÄûwü™ýÿÛÿ08õ;u ¾  ( ¼NB‹6îl?yÿðþaþ(þµþ‡ÿôÿy Ê<cp‘ªgZá×úàoá'1Þlèx!œÏ¹pÏÿLþKýÞü!ý*þoÿ-Öÿ™þ1ýGüüüøýÙÿ臲lß­ÿÿ8srƒÒÿÿþþJýãü·ü<ýöýþQý½ûIûûûÿüoû‹üßûRüeý—þs£`ÿqþSþßþ©ÿÂyg z(¤žÿ þpýæüªü‹üïûJû¸úúÌù~ù’ù}úðû{ýÞþrÿŽÿÄÿ t ž^?nÅë[ £ v ® š „ H ~ f kNÒ?¢AÔÿCþÈüsû^ú¬ùDù ùÐø«øÒøù¯ùúDûhü(þBáÀ0*_"ã'"áð#oÝÿ²ÿ®ÿ[ÿ‹þý¶üÅû¹ú´ùãøjøøÃ÷Ø÷Vøëø“ù¢ú×û:ýåþÀ“Éà4¯¬nv)2Ó– ÞÍæ[›€þ9ýÑüÆü9ýÁý>þµþîþ†þ}ýîüçýÛÿh:f—ý MxþÌnµ:/`¤þDýþû&ú øLöHõÇô6ô¬óó±ó±óxó²ó”ôÚõ`÷ßø úêú„û=ü7ýÛþï0H‹E – ×ù‘Zû.ðšðm}³Ðg¯¦Œ¶]ƒúà =<¾Ÿ«‚´‡ Æ þ q 2ÏÙË-2dÿ¦ý5üÍúFùö÷H÷úöãöÙößöÕö»öˆöpö€öºö÷ù€úˆûüÇühþuÞ¨zÛ\Ò°G™È ‡ Ž   eW X:äùŒûñ–€¼nšáUMÕ/¹…ÿ£Ü1ÿNþ(ýŒüúû8û6úQùƒø‚÷mö/öÕö)øWùúŒúVûüŒüãü}ý/ÿÑ\FÇ ‰  óÐi»å¾’Ñÿs7Ljþÿåþfýüðúú¦ùøùûŽü°ý»þüÿ\Í›‘¶ î › tñQe#,²  ç ö›¦âƒ)}ÿÏýÌü€ü üûúªù2úüú$ûÓú¶ú8û&üký þˆÿ…Ô€a5ªØ ‚ ç L b 4Å øÕý ÿiü3ý>üWûûûaú¤û4ü®üFý5ýÑüýÓüýþôþ.W D^N}›¾4‘µÔSmf<-9ÿþ þ©ý¨ý‚ýý¥üîü_ý þÿEW“û©Bbš2‚‹EØ XÛUÓlkšíeo×þýûÓú¯úÚúDûÓû-üøûaûÙúâú@û¦ûAüÈýáÿ²«÷#P1Û›] °b¿ÿIþ™ýýöý­þ´ÿqµ3ÿ·ýü”ûûõúoûöû&üÁûMûãúJú”ùùú4ûü‘üýŸý¢ýíü½û ûûÊûšü‚ý0þ”þÀþ”þñý*ýhüíûÎû"ü‚üüeüüýŸýõýwþ$ÿçÿ:>!ýÿRß­Ò´vtaϪLú­bÌ;qH òÿ[ÿ ÿ]þ+ý.ü“û9ûêú¤ú©úû‰ûûbûdûµû|ü¹ý%ÿ²Å)ñЇÆA²hJ«n›B·‰ÿ.ÿ+ÿ+ÿíþ¦þiþ*þ­ýìüÎûòúRú:úFú0ú1úúùúTû1û¹úGúú#úsú ûñû!ýoþvÿ ¼ÿqÿ@ÿçþžþ°þYÿDïæV·ÿfÿhÿôÿ¿…&¨‡LW) ±.ôMÍîÓÝ¢]ë¿G,íÿJ¶· ±þký‘üüÕûËûüÔü•ýþéýýYü0üÁüþ@ÿ'À3•äRý‹AÌÿ¥ÿ¬ÿˆÿXÿ ÿn€ytïù¹ÿÚþšþ€þªþÞþHÿÐÿ= ÿÿÃþ#ÿS¡·R°"‚—,gkƒ' ÍÿGþéýþºþšÿr–f*ƒ– ÿ>ÿÓÿ(bµÇ±´$Åf» Åz®B:ßÄÍÔìÞÿÚþ?þÖýxýý»üÌüýòü¥üçûÁúTù˜ø±øaù@úƒúüúÊû[ûýÇú,ûúîùwú·ú–ûTýýbþmÿò¥µ•ydLär5Ðõä,‡žÎpjàäƒÝ.ø0ØrWQ0`g Ã*ÚH·`P?kù+ðŠ h.Eqý- þ‹}æ’©—þýgü)üüÉûlû ûÅú˜úú}úØú ûTüûüaýÞývþ3ÿ5¹ë]oõLh,­Žô¿KÿÿþÕþbþ¾ýýtüüøûüþü0þ:ÿ¬ÿÇÿæÿ‡d+2í6Q Ý × ™ r ­Õ¦°  ‡ C ´S‹á#MáþdýÔûIúúøøë÷JøùMúÓûYýAþhþWþ¬þ›ÿÉø¶ð[%â’«/h‰7ðáÍÌHÝþ×ý;ýïü¬ü–üÒü¤ý“þ ÿêþwþÅý?ýýÒý½þRÿ®ÿßÿ+(_ÿþ ý&ýKþæÿ¾OwÿÀþ þRý!ü7û)ûÞûƒü­üßüóü üúAø÷÷ÖøÂù¾ùþø‰øsùÿúKüŸüÎûzú6úûkü|ýôýþyþ›ÿ¤'xô/»B]ΉÌYíƒâ@=ÿÛÛ´ö.SX©HÿÎýüüü0üÖû¥û%üŒýÿ?$ÿÿ”Äóy×BÅý̃†Á/Êlÿ¶ýügû²úmúNú3úØù&ù!ø2÷Ðö÷³÷WøÂøiùLú>û0ü2ýlþíÿ‚ê(B¿G'ŒEâO+Ôìÿ¬þ?ýÙûcúFùÞøùûøMøš÷Y÷f÷?÷ßöØö­÷ùúhú£úêú(ûÎûÔü+þ†ÿ¾a‹©ÎäŠu[Ðñä3wéK™ÿ.ÿkÿwriÇ>jƒò¦1&‰'sýK*Òÿžýäÿ£þùÿxMÿ1þ¢üúùøU÷Þ÷ø¸÷õ÷¡÷÷ßöJöeö~÷[ø~ùúÈú-ûoûZûòû¹üQý1þÿ)Q“áþWþ[þZþsþœþ’þ|þnþ‚þþ1þþwþÿ¥ÿS¡H!A3ÑE7 Œ,™ðn †  ]#ü)ÿþþžþ5ÿ?ÿÆþ‚ýñûiúÍùÅùMú‰û’ý|ÿMðÿ$ÿRþ‡ýÉüüœüý_ýˆý¼ýøýþÇýý%üzûìúGúƒùíøøõ÷W÷êöñö<÷À÷kø"ùìùÊúiû®ûáû+üÙü÷ýµÿož‡6ä¤ã ›~y2ÃÈZÂ4…ë¯Ö§ïÿ‹Ž >ûÿ»K*ã<Ñ S ‰ œ  ½ Î ±®"7ùñH©—ƒÿñþ5ÿ2VŽjòBà3Ë›¾Õ_dd“]Ðþ‰ýVý]ý}üûôùiùÐø·÷Êöaö©öÂ÷Öø…ùæù*úÝúü¤ýÿrC›B ô á þ P › ) W âpÀX:kábEþãüïüaýýsü|üæýøÿâigóçdŠ ® à 0 hDÊÒzLG6®Œ J flÿÌýäýþ!ýïú÷øLøTøü÷÷‘ö&÷Ãø§ú3ü%ýïýCÿZ6{í ð E ¼BøÛÿƒý:ü¾û‰ûû?úùø©÷¨÷šø­ù+ûÛü8þˆþÐý«üÝûºû(üý¿þú^zff R ö J ³ M ë^.{S‡êw3 1ÔÞ’g Î 2 ¥ Ð § k  § œ ­ Ø ° c 8 „ ( é  È *  º «]ÁA{Ñ~ô¡y$ Ñ S Iþ“Aƒsa³Õÿ*ÿ(ÿ-ÿÚþkþ2þ½þÓÿâþæÿ ý´üóú´ùùùúûüýþ¹þI{c/ð A™Žã\Ž~4¹ ã ù § Û‹¥™\e|& j2aŒíjî•”».gÁ¯ Z ! ! v / :  ï Œ ² I £WdT¬ÄPÿ‚þøýpýýßüü‚üoü½ü1ýgýsýý¸ýýÖü(üü£ü=ý«ý¸ýÜýCþÝþ†ÿ,¾cv{i3Ø9ÝemgxÏ6}ƒqi×Q[X=áI„íÉ\NDx!vÎ"³Ù$ ( éHú©ÈÏ—Aù¼RæšÄ)3ñ¯’ E QŽ(Õ uÿ›GôqhI^>¿ÔþÿÇþhþÿdÿðþpþ‰þ›þŽþþ¬ýŽý>ýqü¦ûVûRû=ûšûÖü³þ{Øb<c'BÿËþ‹þcþˆþÿªÿ-Rúÿ[ÿ¶þXþÁþ™ÿ÷=9átçL¿{ž±Ï¯„%›¼î Ço_jæMV+{¥Ë?òàÍ0{ÿŽþúü ûÂù€ùúŠú…ú“ú ûÙû¹üaýàýËý,ý5ý¤ý{þ½ÿþÿ 7²v6Þ\Fÿ¯þ2ÿ5CÇ€ì€æÿüþþÆý[ý)ý7ýíü…üü¬ûœûü üñüµüŽü]ýÍþ‰z»§¾}Éu²4¾°TåÿÞþCþþþÝýýŸýµý?ýJüûìùFù*ùñøTø“÷‹÷Zø€ùjúûÀûý×þÑŽüŠÚÔZ¸p›`óÞ®"ÿ|ýòûúŒùéøjøø÷îö†ö‚ö¿öG÷ô÷¸ø/ù”ù6ú©úŽúBúžúáû}ýMÿLY 3Ã?Ëu-à0Ð=ÏþÜý ý³û©ù÷ðõÃôíóüò<ò€ñZñ¹ñ&ó\ôïö ÷yû¼ûƒü‚üŠû2ûwûgûNýLÿ ð,¶©æÿ¨ÿ—þiýýõü’ý'þ®ýõüüûìúú¨ø÷üõõëôÒõd÷1ùúÜúðúyûîûÏû<û¬úû×ûëüvþ RîÎ3dÿjþzý%ü¥ú‹ùHùÓùàúÄû|üýZý9ýýý€ýþáþZÿÜÿÀúö€Çx’SÖ êEýª±=},³þ¾ü™úÀø[÷Söõ³ó¥ò@òJòAòUò…òÄòñòÛòøò”ó‰ôðõç÷üù½ûñüÂýZþËþBÿßÿžwQø;ß2ž0ÐwVIÿ&ÿ­þþŽýýÍüÊü8ýÇýlþïþ?ÿxÿÄÿYˆä ÿÅ'- gÿýþþ”ýXüûÍùHøÈö²õ$õºôïóóònò´ò¤òoòKò…ò×òèò$ó ô&õÜõäõZöË÷üùòû¤üpüüéû¬üÒý#ÿVǾ­c³ks*øN f Õ @Üß5Ë ûŠ×Rð-w.=5ÿŠþðýMýý;ýYý÷ü[üåûÞûü‡ü;ýXý„üCûoú"ú!úúSúû@ü ý„ýzý™ýþ@þ¾þ¾ÿ ]<ÅÏ—Âÿ±ÿ¡(ÞL{cYqð1·¬Â!þO ÑnÁ­„@.)ÖÿæÿT¿`qx{^å ÿTþùýúý þÚý|ýKý‚ýIþ'ÿrÿþþYþ%þoþÿxÿ]ÿöþÍþÿ:ÿºþÁýý°üàü”ý4þYþõý‹ý<ýÐüzü@üvüý±ýþ'þý9ü¿úÙù‘ùú7û¸ü*þ‰ÿïrUtQ/ïžVlѯȘ¡z˜VŒÿ þpý8üûVûPûû§úáùù ø…÷Œ÷À÷¬÷L÷÷c÷î÷_øŸø.ùNú(ü<þùÿÎU¾Zõ;D4+u6´ }h¢Àù1ï›0ÿ„ÿw#"oÁ£½€cÂ’ü¶ÁÂ7Z‰óýFûýø÷ÍõÝôÞóýò`òêñ±ñMñ­ððrï‰ïNð“ñEó õ$ö¤öÞö%÷÷1ø4ùÞúãü=ÿ†*ôœTgH ÷Ubtÿöþÿ¼ÿ{À5êþKýÀûÁúú ù©ùMúIû&üáü¥ý_þ©þ1þaýÅü üºübüûÔú;úùK÷Úõmõjõõ1ô;óëò`ó'ô¡ôÌô\õ‰ö°÷@ø„ø]ù”úÚûüüÞý]þ“þ¯þÿNÿJÿÿþöþZÿ®ÿ¬ÿUÿ±þþ~ýßü»ûaúJù¤øøM÷,öàôÌóÚòhòÞòôÇõý÷8ú-üÊý#ÿœ!g`‰t|)ÖÖdÿhþÉýFýŠüvûú~øàö^õôCóó^ó(ôÇôÜôœô«ôDõuö øëù…û>ýKÿsQÛ¹f@sׄ£âXÅÿ½ýiû=ù!øøtø®ø{ø@ø}øóøVù¬ùDúôúEûyû+ü_ýùþ©itóNN ¬ * ÐôÿÈdÿýûpùð÷¢ö†õ½ôCôô ôíóŒóÍòøñmñ—ñšò:ôJö\øúDûâûüû¶û²ûü&ýÐþ ÏÈÿ®’³ÿ/ÿ2ÿXÿAÿãþñý[ühú¾øÄ÷÷Õ÷ÏøHú ücýQþõþyÿAm•n Vx^ùÿ‰þÿ{‰YÝŽ~®¨cÍßÿ8þøüü_û§úúvùùÍø©øËø-ùúSûÞüvþsdÍÙà/ªØÑË‚¬pB9ÿ¯þÐþMÿ ˆtfÿÿÂþAþ°ýwýÒýAþ‚þ•þ°þãþKÿüÿDôPìF±j ’ Æ {   , e]”[ \H&ä¨3Ɖ…ìH%y_ÿ³þNþsþ·þ ÿæþ§þ•ýGþ^üYÿ;ÿNþ\þ.ýþüýüÃû’û=ûÐû¼üýý;ûãøù÷¾÷Í÷€ødùùúýþ)þ:þˆýØü%ü†û%üŽý•ÿïeÌïõÛ˜Z¦hÜÚì@’¸á)¡MÙÑFr(¥6¨ªø:tû¦îðà +»ÇËòîsË=^÷þÏÿÅþøýBý^üðûGü4ý0þÒþ!ÿÿþþþuþÿ°ÿšù]©™^ém¶` ¹ n |1'Áë\ôɤR&oÕùoüþNþþ¯üú÷÷÷Cø°ø¸øù»û³ýoþÕþ4ÓK—EÓþVqG]žÿ¢þþã£EûÍÆdÿDþ‡ý¾üçû†ûãû\ürübüãü÷ýäþbÿ‡ÿ¾ÿA"8“7ó¿ Á  ä @  w×âà­ì}½ÿJþÖüüüLücüÝü×ýkþ þ¼üûúúÿú:übýþÍÿ|ªÜW2745L³˜]TOìxÕøŒ0=ÿ!þý?üéûñûü@ü^ühü¢ü3ýÙýþÕýeý1ý,ýeý¬ýUþ(ÿÒÿHŒ½'Fò=¢ÿßþ!þõüÞûû½úlú*úúCúÔúèûúüðýµþoÿ$*¡Nô‹V ( P ” 8 o ‚ s  {  + Ö … I ; Hö%öÓ°ÿ8ÿŸþyþþÏý½ý+þ‡þáþ5ÿ¼ÿGéÂå7r|Zåtjs ±Ê³|Ž+þÞûOúmùâøjø#øÈ÷V÷®ö*öáõö½öº÷ÓøÆù.ú`ú¶ú6ûûQû=ûóû£ýšÿ`‡Úw9×ºŽ s½éûˆµæc'Fo×i/× ¥-u$2sÝ Ü Ç×›`WP¹RJË$™ºr¯þí0%ÔìRt@âˆß‡óýÿÿÙýßüüÂúËùÂù0ú!ûü…üýzýhýAýõüýýìý[þôþ©ÿžÆ6·* L Í ¥  ’ ‹ Ÿ È í é µ 0 §ƒYÿqÌ…ÏU\)MØ9¶íÇÜy¯ ¦(Z*æ‘ÿý@üoû ûúúØúiú­ù ùøgø³ø‡ù½úü^ý£þ–ÿ#E§•—0ß(  #|¤t'ü¼.™Z*Æ\øi>ÿÅýüòûDüëü~ýþÐþ›ÿCÃo\<#ŽV1 Ø ü ƒ ¢ » å S Û )csû e ¦ ùb°‹.qÿÎý?üÄúšùüøåøUù$úYûÆüqþ aE¿I¦ñ/ß5Ž®•:ËÜD  ÿ$þ­üïúùs÷÷º÷êø&ú+ûüëüÊý‚þHÿXÇ^T© Ò ¾ ] ª Ò Ý  ò ” > ­­3µþûüäûñúîùAùæø¸ø“øNø9ø,øí÷Þ÷%øTùpûøýdžeá° W “ € ¬4&÷’>~ÍŒ1ÿjþ˜ýüûŸù1ø÷öÇör÷?øýøóù$ûüÈü3ýˆýþ¸þØÿBtR‘kœS.—å3lÿŽþ_ýüÌú{ùFøœ÷I÷B÷ýö×öb÷–øúûžûÒû*ü¿üOýÀýkþÿ‡ÿÉÿ×ÿ§ÿOÿÕþoþ‘þ‹ÿñ7K h8„Ïj2üŸZ>`*yŸÿÿûþ>ÿ£ÿPR‰ÿ6ÿMÿÆÿ öÿÿÿBþ¯ýoýPýPý…ýþŸþÿ+ÿÒþrþþšýKý2ý'ýµüºûrúùŽ÷5ö.õ¢ôžôæôbõçõLöœö÷Ú÷àø_úÿûùý ÿ¶â¹·|O’mKÇQìÖóÿþäüÄûwú(ú§ùÝøøß÷¨÷øø ø&øÕ÷®÷‹÷/÷=÷u÷²÷xøpùqúâû;ýaþÿÿZþýoü|ûšúÈù[ùpùú ûÕûÒûnûû‘úú„ùPùŠù×ùGú±úèú5ûyûkûíúXú=ú†úû‘ûüuüúüœýøýþôýÇýÖý7þëþçÿ™åšãÿÁþ–ýüºû~û×û^üyüïûnûOûdûÊû™üÕý!ÿqy(Sÿþý›üÊû¹ûNüý£ýéýÍýMý‡ü®ûûˆúóù;ùÔøù†ù‡ùùWøø]øÃøEùþùûü8ýkþ¨ÿ¶' ¼Ò3û«ôUGŽ/†ˆRNiŠuÿ@þýöû+ûªúWúLúúöúiû±ûöûYüËüþüý'ýÞý,ÿµþ¦à'íÒ»˜uc­öòŠÇÄÍÿÆþ¿ý¾ü¼ûìúgú7úeúÈú+ûûºúŠúËúkûYüpý£þ½ÿ¥f^’±Ticm1^`êþæýný¬ý<þÏþðþ½þwþ/þóýçý5þÌþWÿÄÿ1Ã3COôj[î¾åÁW€ÂØŸf\«ÿ%ÿ–þøýnýÀüéûçú2ú"úÄú¾û"ýîþÛÕ²*0 l © Ÿ $  Í í·²ñ.ú†ÏÿŒþ4ý&üzûgûÒûŒüVý7þoÿÍS§ZQ 3 w ¥ [ í/lé9ÀÿW ž 3 ®ÁcTÑþ?ýÔû/úGù8ùúæú¿û\üXýàþhß‹s!æ¢!ÏPpٽإF+N~Wÿ¿ýâü`üçû“û’ûæûüñû’ûdûcû«ûjü·ýeÿ— ×E & ™ ¾Ñ“Ø€á 4 Ó Ç ìDÉwY¾0Nò[ÑŽÿàþmþJþCþcþgþœþþûÿ9ÿ.ˆ J8¬ FðÏ”¯wö÷xÿVþDý…û#úùÈ÷j÷¢÷-øGùDú!ûAüýóýÉþðþÇþ‘þ=þ³þÛÿ%žßj‘ùùá a Û N ] í . ÍlóáUï—ŒC`Ì„×DÎ$ w ’ E ÃGÚ~kb ~쌷˿†$~ŸhÑWÿ)þ7ýnü—û¶úýù€ùqù›ùiùùîø^ù)úãú/ûiû«û”ûIûû9ûøûäüÂýìþ\ô‚õÞ}½š#‡¥ÿÜþBþ¼ýCý ýUýðý™þÿ,ÿ´þ¶ýÓüjüAüoüÖüýýˆüðûzûûÑúÉúû¸ûßügþ‘ÿ(+3b‘¿ÏÝ!~Ñó¾|TVkjwµÿ ÿ þÏþ@ÿàiÃÞè…¬¤ÿÅþ—þÖþíþ¦þþ«ý–ýŠý™ýÑýFþ‡þ$þLý~üÜûgûÕúƒúUú&úÀù$ù¥ø5ø¤÷F÷¦÷ÝøWú¬ûõü&þ5ÿéÿ!…@&ö/ÌAÊ`õØ,‹ÙæÅΜv¤fs-uae-2.2.3+dfsg/share/fs-uae/floppy_sounds/drive_spinnd.wav0000644000175000017500000004732412162366653024456 0ustar glaubitzglaubitzRIFFÌNWAVEfmt D¬ˆXdata¨N*ÿÍþuþCþþ¬ý4ýýý¯üü®ûøûÅüýXþRÿßD Sy©¦É…êÉ”ÐìÕ"Ëþ¨ý€üûûûþúXú†ùù@ù‚ù¨ù úÚú¥û/ü‹üý±ýþ3þÓþšÿíÿJë<ž~µèâíAɾÿOþ!ýaüüêû#ü©üPýçý`þþÙþMÿ÷ÿê¡w`Ê/:AR¸Šƒt—ÿ“þþü°û|ú5ù ùqù,ùóøø=÷b÷Ù÷ªø&ú®û•ý·ÿ2¤ýÖœŽJã8õfºŒ¶|MÀ߬A™þñüÍû[û„ûünü«üéüéü¨üeüIü³üZýþ¬þÿÿ™Iè lb¥5oŸ•AâFìºÌÇ÷^ðP&þ™üüeüýþ&ÿÿÿiÓÿ%ÿõþGÿúÿ³ù öÿ)ÿ‹þ(þôýÙýëýWþÉþêþ¸þqþ&þÚýöý¶þýÿ,½`‹GÑÌë +ð‘’0çÿÿÿl*ù<ð³ +ÿeþþvþ¶þÖþ¦þ>þ¢ýøü—üñüéý_ÿ ©Œé·WÊióJíðñ«>¸÷Óšÿ3þÒü÷û˜ûqûAûÿúïúÝúû¡ûrüYýYþ8ÿïÿ¡f:§KÞ:޳• û'ñ='(ÿ÷ý¡ü…ûòúóúUûÿûêüðýÿöμÌÝQ6, ¢ ; _ ÿ G –   dÁÔï`ÿŽý§ûþùâø‡øŸø¹øæøBùÝù~úÍú"ûMûSû‰ûü8ý¬þ1ö²-u€[ ÷ Z a  q lòÞÁÿ@þ–ü8û¿ù]ø÷ìõØôSôƒô õ÷¼ø_úÿû‰ýwþ³þ˜þ¥þñþ!ÿmÿÿ¢ÿmÿ‘þ”ýÅü*üüüQü“ü½ü×ü¨üWüðû¯ûpû÷úHú—ùåø:øÀ÷Ö÷¾øDúðû8ý3þÿ+~áeŒH…s,²¼‘Ï”q&÷ÿý`µ^—µqï©KåmðW¡ÿªþþþwþ4ÿÙÿw#ÕcCv6øþ.þ´ýŽýˆýÊýþhþ´þ´þþPý•üöûVûÂú“ú–ú”úúŒùù<ùdùõù ûçû7ý9ýBüÿØýÇÿ,î»ÉQ #  Î   ¹ñ˜hžZñ‹ý*ÿáý¶üÍû¯û•ûaûDû§úõùˆùãø¨ø ù§ùû•üþ’ÿ’ /(†m€0V¯£NÿíýüÙû;üÍüäümüˆû3ú"øºõ¿ó®ònòócôö‘÷àøÍùUúKúeúíú¹ûý€þb¸÷âˆxæ5zt='¶èðÿ(þÆüþû¼û·ûoûêú‚úzú½úJûüýþýëþ·ÿ„_îÞ¢æßÖN\7»T¡€R‘ÿrÿ)ÿþŸüjûÃú£ú¥úÄú)ûÉû-ü™ü'ýÑýhþÙþ›ÿù÷&/! ÿ © » F ¥ å ; × / 7¥°Ï„¡üÿ‘ÿhÿxÿÿ þzüûú~ùBùcùEú ûýQþïþÿ ÿCÿ¼ÿ—ê6”<4Îdÿpþ?þnþþˆþ$þ•ý-ýýý+ýý/ýyýïý:þþ¨ýCýæüÈüäüºý"ÿÍfÜ8\ÓÂtÉWµ[==ÒÁÅ•Fr½cwÁùÒAÏÿÂÿ*ÒqÁŸ$Y?ÿ=þý¾û•úìùÛù$ú†úñúûüIü'ü²û?ûû‡ûÊûüWüµüý¦ýnþ×ÿ£á{þ…>üefO´Q°¸•ÿãþ<þ þ/þèþ ì^²é<Û¹À.û÷ y * 3 ü h s d – í?P_œõâM¯©ÿØþ¤ýðûEúáø¤÷`ö•õzõ ö)÷Öøàú=ý*ÿ("Y¢j¸Öã—¬šj®ÕxN÷÷ÿçþøý-ý6üäútùbø„÷©ö·õ/õPõíõÁöî÷ùZû ý•þýÿfºrö V y ú ¿ ÚØ}2÷ÿ»þ±ýÖüü‡ûçúúPú¹ùÎøB÷«ösõaôÛôØò+ô’ó õ¨ö‰ø ûýŸþwî'"¢> þ 8 Š Ü – Bªz¼™–]ãÿ™þBýüîûaüZý³þÊÿT’?Åÿ8ÿlþÂýoýyýõý±þ¢ÿ§wU³!R:|ØÈþ@ý!üFû³úõùùFøµ÷|÷^÷d÷Y÷e÷`÷e÷{÷£÷ø&ù¯ú;ümýþ!þãý™ýÅýYþ!ÿþÿû ãZQí3M[kwÿµþÚý"ý{üüñûîû¼ûmûû˜ú9ú´ùÎøà÷J÷<÷R÷e÷¥÷løaùBúçúZûÉû&üüžûdû¬û”ü·ý±þ¢ÿ1êÿáþ°ýÏüAüíûíû;ü£üý9ýÙüŸû¤ù¤÷:öpõgõ÷õ†ö÷e÷~÷>÷ÚöQöáõzõYõ¬õmö;÷Â÷¡÷v÷‹÷%ø5ù(úÌú}ûbümýmþ)ÿ ÿJþQýâü ýný“ýdýìülüÇûûqúøùØù úEúÕúêû6ý"þ>þ¥ýý„üBü(üLüwü±üTý)þÁþÉþjþåý?ýnü¹û_ûqûƒû#û‹úWúŽúÝú+ûƒûüü˜üþûû­ùIø0÷÷Å÷/ù•ú±ûŠüýÂüÉû ûHû üGý”þÞÿÏÞ’þ ýÛû&ûûUû9üIýþLþ.þØý?ýÍüáüJý“ýKý¼übü–üÑü±üåüÆüý2ýƒý½ýþÙýAý¦üüdûƒú¦ù ùøø‹ùÃú×ûDü üOûPúRù’ø\ø¹ø«ùûúŽü7þIÿ}ÿíþïý)ýªü»üqýTþûþ…ÿÇÿÅÿXÿÐþ3þ‘ýþü³üâüýÚümü¿û ûNú¯ù„ùÛùtúýúfû-ü@ý°ý•ý4ý1ýŽýçýSþåþŽÿ!Àÿ?ÿÅþ‡þnþsþ³þ"ÿfÿ3ÿ¥þ þýõüöû²útù™øRøµø€ù}úUû4ü#ýéýAþeþiþuþ þVÿoŒVæTe±¢oLÿöýoüû¿ùšøa÷möö‘ö÷;øløeøoøtøgøFø4ø'øøÛ÷Ä÷ ø…ø ùú»û¼ý—ÿöŒËoþ ö¹Zìÿ1Mþ¤þý"ü$üqüYü­ý8þ6ÿv4ïüîZZä€ îm-ìÌãZw-¶#ÿý>üpûÚúwúCú¼ù9ù¼øá÷÷ºö,÷{øqú˜üÌþsu¶\›ªÿÿÿ{ÿpÿðþßý ü<ûíùäøJøcøGù¬úoü þBÿ/ ½Âwçz9 š¿Èð]Ls‰/ 0 Gz8öàÿOþcýýýäüYüŠûzú8ùÉ÷ö¦õiõnõ§õö˜öW÷Nø:ùßù=únúú¥ú~úYú,ú4ú—ú'ûãûŽüøü;ýdýÂý^þ]ÿwƒeGüS {ß JÒAàÉæí,?R1-7éFÿöþÌþ,ÿÃÿ|œêþ®z Èÿ|ÿ;ÿÿ ÿ ÿ-ÿSÿ®ÿ4ðÿÿþÓü…ûrúÔùÚù‚úÂûIýþOÿzÿ)ÿ­þ8þöýþ–þ~ÿcÖÊnÁÿþþ8þ¨ý‰ýÄýMþÒþÿÿ¿þ+þýðüˆüüÝüðü²üjü‡üýÌý<þyþªþöþ5ÿ7ÿóþÄþëþ6ÿwÿ­ÿÚÿøÿòÿ*ƒ*ÎJÿIþËü*ûúyùDù2ùAùµùKúiúáù3ù¸øtøiøªø6ùú$û„üþøÿ 6å ß + Ú N Â_g¾a  ³ + À Æ ? ¸ K òV3>s[¦¼±°Éÿ;ÿÿGÿ„ÿmÿ<ÿöþeþ“ýÆü+ü·ûhûCûCûû_ú…ù¹ø×÷@÷úö÷œ÷—øùNúûÔû8ü†ü/ýcþ«ÿÊ…Óפÿ‡þþ´þòÿo ߎžÓ–`„¦ ÓŠ Æ ‡  ÒŠ(äf{ H £ • J Æ 2 § ¤  Ó Ì À K B  ½ ª á ýÜm€¬Èà³.mJ²!èþþýëüü<û ú¢ø'÷Bövöþö¦÷ãøKú–ü§ýEý1þ˜ûYüûØûýÿþãÿjÛ /¬n 2  ¥ ? ä‘äÜ|€SU7¦‹Žs:cÍ4 ÍOIñ)JI ›X ³2!‹Èm!—üÆY\ÜFÎr¿Íå„®V”ýjœ‚ÅrAhûÿîÿÕÿÌÿðÿ‰]ºe+þÄh ÐÔÌjŨj ¦lóCYøF‡ÿ¿þþ!þ«þžÿÐ0Ÿ ¢ë m 0 D " 7 M€È É t  ) ã Ëô'D 9ä¡Íx4hC`G"%o’Þ‰™mH`ŸjFä·ÙºM£MD™“0º˜>25ž¨±ÿ-ÿÞþhþ“ýØüŒü”ü¸ü+ý þjÿN²™;×w|‘ È£úÿôþíýý`üôûýûÀûû+ú¶ùÞùYúçú¨ûLüCü,ûWù¼÷÷èö÷¨÷÷øú×ûsü¼üýký…ýÃý”þ!¯©ü,6Ù QrCB ™î߃$ú*BN^<ô} ˜‘±crMjÿ=þfý’ý)þêþªÿ•."ÿ|þ!þãýþwþÿ…ÿ­ÿšÿEÿèþêýAüAúPùµøÙ÷mö2õ õö÷m÷ ø*úSüþû¹ùVø¢ùSü7þãþÓÿ®¸b®Š‰ê.gmL2\¯oÓN99 ð °Úáó~ÿ–ý—û˜úûÉûlûçúSûoüìü¤ü%ü?üïü[ýºü…ûúžúû:ûûûÆû'ýYþ‘þ{þ×þ,ÿ#ÿÌþ÷þÙÿ´ÜvtÿÛýhûù´÷çö ö>õJõ«ö½ø¤ú&üÕýšÿÀCÖ_7è(ÿ¿ý ýDü1ûtú¥úû±úÏù úÂû5ýzþhýný'‰þ`ÿýJûBú[ùAøÚøŽøéøúîú7üCþpÿV_SÖóÕþ¯û ûáü}þ+ü˜øŒø}ûíü×ú¹øIûï”|ÿYö%mqÑ@ÿ—ý ýzýŠþ1ßûÖë¢cÅ vuÿÒþ˜þ'þfþâÿ^ríþüÿõ‚þÓþX ¦Úªÿþ9ýkûëù|ùÝùþúýÂMyÿùý·üßúåøÅ÷c÷mö‡ôZòñáðZñò»ó ÷û<ÿ”´bÓprx»¬;³Æë Å¶€¾³YhÿWþËýÔü:û…ù™ø!ùûƒý¼ÿp§ÿ¼þ©þžÿîSß×8 ¾s=Ä•Pø=ÙþSýŒûåùùø¸ùÁû:þGžŠXKìÏÿÊýþûûðú©úÒùùDùú+û%üýíýEþþcý—üü¿ûÄû üîü¼þÓ¡ uZP£×[ª·™óÐÿ‚ÿ›ÿtÿÈþ/þþþêý/ýïû¢ú£ùùùÐûeþ Ž„Üf|0R ¼lV€Ä"Žtÿxý ûgúØùîøª÷|ö†õHõtõ–õƒõVõÎõ÷ùZûýPÿµxgKômP‰„zg÷. oËžõ‚þœú÷œôçò ñ˜ð;ðcðœð¢ð¦ð›ðiðBð¤ðkñ4òÁò}ó}ô²õ¤ö÷™öwõ\ôô&ôâô–ö7ùHüÿ;œç÷ôÿÿýý’ýoþæþÿÿþ[þïüØúù0ø6øùHû>þÆß*ØPÂç½=†1"Íÿ8ÿŒÿ}3‹Š—ö§ r¦åþEý®ûéù¥÷"õåò¼ñòåò“óªóÆótôö¯÷“ø°ø øùú–ü¡þÏÿúÿ&ÿ}rw. 9pSÿ©ý·ü2üìû—ûû²ù øö8õ:ô¸óXòjô•óHõõnõƒöÌö÷{øùtúÁûRü±ýrÿa£m÷à˜¬l/ЋòYcÿNý¤úøàõ™ôÝóVóGóóÃò¦òòDñ,ðdï•ïßðñòMõP÷°ø‘ùú ú°ùÿø‡øÆø’ù‘úyû,üºüÛüºü·üùüOý¨ýþtþ–þþ/þ½ýý/üWûîúõúû‹ú‹ù—øTøÝøÂùú0û¾ûüüIüOüü û.û9ûÝû³üýýmýýý°þFÿÚÿ?T÷ÿÒÿ8ɦËÿÖþBþïý'ýÏû·ú/úXúÜúíû\ý\þþý!ü«û+ûbú®ù™ù-úçúOûSûèúúCúµú×ûˆýøþ¤ÿˆÿEÿÌþèýmü´úiù×øùåù²úýúû!ûiûÖûnüýuýÖý4þÏþ|ÿ+Ú¡‘ªŸU˜-átð_êp"Ù­xþJ[ÿ{þiýùû”úµùù=úû÷û ý(þâþ0ÿ/ÿÿûþ¹þžþòþƒÿ`~‘h8óÿáÿ@ï–F}~jP‰Û•^'ÇÅ ?ɦÁåòªÈ„,ÄþZý2ü©û®ûôûDü{üŸüdüñû8ûùú6û!ü—ý+ÿÜb5‘†o ¨¥­fK6¢ËþPýKüÕûÞû8üŒüæüÿüý9ýzýþÿy˽»h ) ý € V6׫ 6  j ÔÎX¡ÿcÿjÿsÿAÿÿÙþ¡þkþxþèþ¿ÿíH[ãÖÔ3jYh/°Btµë¢D½8Ï~¦;º|²ÿCÿÿÿ:ÿÿyþ~ýŽüÀûû¯úâú¼ûÿüDþÿ6ˆ÷Ë(Òo@ \ óW™¿ 1p4 ±ÀþËü¸ûëúvúÊúºûqüUüúûñûüIüwüFý½þ\ï‰hïù}à º Ø  Uö~:Ñ€Ùy´] ÿþ¶üBûÀûòûý¦þ|ÿXY Êxÿeÿ†ÿ˜ÿ^9 cñìí†3=Ù8¾{þ©üûÒù€ùmù|ù)úSûýÙþnxŒãÀlŪTÈO±Œ p ¤  æ dZ#;jc<ñÿ~þ;ý ü ûvú8ú\úèúcû¦û‚ûû³ú¹úúú†û”üGþ3Y # ô0š_e,ˆI_(QýøäU^9×ÿBþ±ükû¯úçú´û«üÊýÅþÿËþ6þˆý-ý}ýÞý]þóþˆÿ¶ÿQÿÒþþþjÿÈÿ uߤ{69M¨h¬7aÿ"ÿöþ´þ‡þ²þ3ÿšÿÈÿÁÿßÿCâh™G»­ÿ"ã½3=ˆâŒºÝãÿû¦ifJùøyÿËþÿˆÿ+¤ kvÿÝþ£þéþ”ÿžÃdtD$&7¢ ¾’]ö|ÿ@þTýAýþý ÿæ»ÙÀÆ’fu«eŠ4Ùs¢ ùöÕwc/ ôû‚Μ3¨}ó;¾¥Ï]붨ÿÛÌ ‘ 5 Û > Ý ¾ — ²¨ Y =T3<½þþý¾ýÒýKþ"ÿºÿÎÿ…ÿaÿdÿ{ÿ&ÿÅþ¥þTÿ—º9+zºÄÿvÿ*ÿÿlÿBX› C)õ"Õíö„¥Š=mQþv6ö — Î \ q E 6 © ’ t Ó d h šwÚÿÂþ<þþþ þþýþ'þ7þ"þ$þ„þ/ÿ¹%Å´Á¾¤š´ãí É ø  = ¨ ó  Á õåäÔ$ÿðþEÿˆÿ»ÿO ôW<í q [  Ÿ@2˜Å & < Ý º Ê »  ‚ b ø B m ¾kI˜ý”üþûÞûýZþ°þ;ÿõþ}þÙþ5ÿ2V—ภC$°¸)ãšÇ¤íTø€ˆàÿ ÿ"ÿòÿ¢¼mÀÿÿãþ8ÿvÀûû¤ ò š Y ½ Ñ º Š  ü šitjbaŸö ëÿ"ÿŸþ1þ9ýüû6úãùñùJú9ûVü7ýÁý'þQþCþÀý<ýýJýPþÂÿ2Xú(üð/ãj¿¡3ħì‡U,w2mY)ìÓÿòþ@þ²ýVýÿü¾üüüÊü'ýËýÑþìÿý‰~ÏÏÿ¾þ¼ýòügüìûWûÇúVú¹ùÍø÷XöYõõ2õ õ2öáöv÷¯÷Î÷Ú÷Ó÷Ï÷ñ÷¿øbú£üöþÍÙ"98k¾lly=Hiý*Iÿ1þ-ýkü‹û¨úú˜ù)ùšøøÃ÷&ø$ù^ú›ûpüý—ýzþTÿ ÎΫ3˜ÒxäMìxÀ™ÿ>þýãûµúšùøÚ÷3÷döõ×ôô1óIòÆñ©ñÉñòWòâòÌóÈô¤õGöçöý÷zù÷úwü“ýaþÁþÿpÿŸÿeÿÿãþ¸þ”þ£þßþÿÉþþ8ýíüýýkü·û†ûÓûêûûëúnúú/ú¢ùˆù¡ùDúú®ú\ú1ú4ú˜úûìû¢üý<ý'ý˜ü±û†ú»ùFùÛøuø„øù¯ù×ù¸ù¡ù±ù×ùæùÆùÈù[ú@ûüNü(ü]üÈü:ý€ýrýOýEýqýÅý6þ¨þ¾þ€þ þÜýÍýàýHþÃþæþþÓýýüÓûáúæù•ùúû¾ûüýû»û3û¾ú½úûÂûhü(ýþ~þBþŠýÃüü0û€úLú™úû\û–û¢ûSû›úÛùÄùjúMûÐû(ü†üý“ýþpþ1ÿìÿš@°d=5X  ~âûºf"¥÷ÿ)ÿ‰þ*þþúý½ý6ý³ü!üPû@ú\ù(ù±ùÏúäû!ýYþÚÿöqáÈúäÂqG`l;¦dÿXþÖý†ü ûú©ø¹÷Ùöžõ?õ7õ5õUõ;õõMõ@õ#õmõö÷´øMú?ü’þ,[À¶ 2 ɕۉà ù Ó w ÿg®¦þóü"üöû6üØüýÑýëýþfþâþQÿ€Üßµñä= o }jýVš7 .ï £ 1 ,‡LÿðûÔøïõ óýñ'ñýðTñ/òIó"ôÇôZõFö†÷éø0úÁû²ý¦ÿK´ýêä ß [ ´ 7 ¤ ÷   ® ë Ü ·Xñ¢šÕð³ˆÿ.ÿÆÿÄÅí‹;Ý8 T ( Ë × ˆ Ù {  Á L ÜQ×<¡’•Ô¡Ãvq«äïÿÿ^þñýÍý,þÚþˆÿÏÓüø“¡z+﹡ÅÖ¹9'騜àÿiÿKÿŽÿŠV»ÿ÷þ`þîý—ýMý ýïüMý5þdÿs>÷˜*ÄËàâb?§ý8‹ÏÚÿÿ`þEþ“þÓþÿ[ÿÍÿ:¥øaôiµ!²q"²4ä¼ÂØ 9 ô âüó188.ç  j÷i¿äÿøý#üóúÄúwû´üÏýÄþZÿ¤ÒšCáÿÿÏÿ|øSÌtK"G’ÿ»®gÿRþý$ýÀücü×ûŒûtû†ûLûûû“û“üÝý>ÿ’ºkÂÁãM ˜ 0 y  Y û T U “4Ýf°!œ{n…ÊLƒÁÿŸÿ{Âö®@¢nßÅ9 W µ°!rhx’*áÖOÿaÿßÿs©­^Èÿúþ þiýýFýîýÞþ¯ÿ£ÿIÿ ÿMÿ’ÿˆÿ6ÿÿ7ÿkÿ¡ÿƒÿÿ…þ„þ²þ‘ÿˆiÄÙ_“\ÐÍÜoªü"ˆS£‚Ãm~·ëSî\ _l‰¨U¯ÿ=S20²Æ¬n6KB`ß‚&›"{PÊv€®K0ÇÚm&63ð̶F`«ãCÈ+6 5ûömÃ÷^ Ü  Å ÕÑñ%8+)“@-A°Ã{ÿþÔüÍû ûˆú+ú.ú–úûú ûEû©û!ü™übýfþñÿöK²Ä ð  ' ^(s B  ¥ óFÕ¯¾÷j·Çÿ”þ5ý üªûÔû×ûEûòúÑúÞúUûÌûŠü½ý¿ÿž¶¯D \ ½Œ"…¸ìÔq®M Uuçÿºý±ü±û¢úuùPøh÷ÏöŽöÈöî÷ÖùðûËýuÿz¼×mß; ´ . _Ÿ< A  r ¤¯^ÿ»ü¹ú,ù(øÝ÷â÷ì÷ÿ÷(øZøÞøkù'úNûïü¼þsÓ>clrD½ì ÓŒÞ=îoCñÚ‘¯ÿþý,ü,ûSúîùÝù ú!ú>ú¨úÑûýôþ'%ùÈQì…ú5×§PxÞ’òÿšÿ/ÿÀþ×ýÑü‘ûÑúäú\ûDûiúðø³÷ëöqöÆõ¡õLö´÷iù¯ú•ûbüý|ýþÿ-#©±rcû;|ÿFÿ½þ~þÏýíüÊûµú÷ùÑùú£úûmûìûÒüÙý³þ5ÿ&ÿÀþKþ/þpþ÷þÎÿ ãsŸ¦«ÍA@¬@+Êþ½üû ù8øýö;öÅõVõõõÿôõ5õ[õ’õ­õöÔöÉ÷Öø1ú üþýxÿW¶:GÀGT²íõ˜ÙÆÿXþ¬üÿúyù9ø&÷Söaõgôyó½òOò(òZò$óZô†õ³öø­ù¦ûšýÿîÿÈüÌT`¡?0Wýþ]ûVü2üü&üü"û[ûHúoùZù8ùöøGù ùqùyúûëû«üýöýÿ·ÿ³»»þhý“ü²ûÙú ú}ù^ùÝø©÷xöˆõõÌôõYõÃõîõßõäõÚõÜõýõöŽö­÷ù¾ú4üýºý¬ýgýjý‘ý¦ýLý¤üüÊûüœü%ý•ýªýýüãúìù,ù–ø9ø:ø%øÔ÷%÷Xöüõ[öN÷êøÚúØüþNþÌý=ý™üÉûXûÃûéüœþµ¦!{ÿâþ£þÃþÿzÿðÿÖÿìþjý?û%ùÉ÷÷÷x÷þ÷©øùù£øÇ÷÷&÷ü÷'ùŠúÝû½üýüîüðü.ý]ýLýZýÐýÄþ¹ÿ)ïÿRÿxþºý9ý!ýýêü7ýÖý8þ*þpýqü|û•úÙùùªù=ú¨úèú|û’ü"þñÿ‡p—›é¡ïàÕƒèeͨÔ0ÅB¨îÿ^ÿ/ÿ°ÿHÊ!M)†‡ÿþþÛýëýŠþrÿ^î Zg×$"½«ˆv5ó~ gZŒQ­¸ >BWÿšþþßý¯ý‡ýïüãûÙúuúoú-úúùú†ú?ûü7ý¦þ]r€ý6&éV­Y#ŒÿFþþ!þÂýåüüšû‚û¼ûQüý²ýHþºþ0ÿÒÿd5cøN!b¹ U Å  Cä g ª w À í%ôþÿvþýƒû0úùWùCù¦øí÷¹÷uø ùúÃúµúÍú,ûÄûwü™ýÿÛÿ08õ;u ¾  ( ¼NB‹6îl?yÿðþaþ(þµþ‡ÿôÿy Ê<cp‘ªgZá×úàoá'1Þlèx!œÏ¹pÏÿLþKýÞü!ý*þoÿ-Öÿ™þ1ýGüüüøýÙÿ臲lß­ÿÿ8srƒÒÿÿþþJýãü·ü<ýöýþQý½ûIûûûÿüoû‹üßûRüeý—þs£`ÿqþSþßþ©ÿÂyg z(¤žÿ þpýæüªü‹üïûJû¸úúÌù~ù’ù}úðû{ýÞþrÿŽÿÄÿ t ž^?nÅë[ £ v ® š „ H ~ f kNÒ?¢AÔÿCþÈüsû^ú¬ùDù ùÐø«øÒøù¯ùúDûhü(þBáÀ0*_"ã'"áð#oÝÿ²ÿ®ÿ[ÿ‹þý¶üÅû¹ú´ùãøjøøÃ÷Ø÷Vøëø“ù¢ú×û:ýåþÀ“Éà4¯¬nv)2Ó– ÞÍæ[›€þ9ýÑüÆü9ýÁý>þµþîþ†þ}ýîüçýÛÿh:f—ý MxþÌnµ:/`¤þDýþû&ú øLöHõÇô6ô¬óó±ó±óxó²ó”ôÚõ`÷ßø úêú„û=ü7ýÛþï0H‹E – ×ù‘Zû.ðšðm}³Ðg¯¦Œ¶]ƒúà =<¾Ÿ«‚´‡ Æ þ q 2ÏÙË-2dÿ¦ý5üÍúFùö÷H÷úöãöÙößöÕö»öˆöpö€öºö÷ù€úˆûüÇühþuÞ¨zÛ\Ò°G™È ‡ Ž   eW X:äùŒûñ–€¼nšáUMÕ/¹…ÿ£Ü1ÿNþ(ýŒüúû8û6úQùƒø‚÷mö/öÕö)øWùúŒúVûüŒüãü}ý/ÿÑ\FÇ ‰  óÐi»å¾’Ñÿs7Ljþÿåþfýüðúú¦ùøùûŽü°ý»þüÿ\Í›‘¶ î › tñQe#,²  ç ö›¦âƒ)}ÿÏýÌü€ü üûúªù2úüú$ûÓú¶ú8û&üký þˆÿ…Ô€a5ªØ ‚ ç L b 4Å øÕý ÿiü3ý>üWûûûaú¤û4ü®üFý5ýÑüýÓüýþôþ.W D^N}›¾4‘µÔSmf<-9ÿþ þ©ý¨ý‚ýý¥üîü_ý þÿEW“û©Bbš2‚‹EØ XÛUÓlkšíeo×þýûÓú¯úÚúDûÓû-üøûaûÙúâú@û¦ûAüÈýáÿ²«÷#P1Û›] °b¿ÿIþ™ýýöý­þ´ÿqµ3ÿ·ýü”ûûõúoûöû&üÁûMûãúJú”ùùú4ûü‘üýŸý¢ýíü½û ûûÊûšü‚ý0þ”þÀþ”þñý*ýhüíûÎû"ü‚üüeüüýŸýõýwþ$ÿçÿ:>!ýÿRß­Ò´vtaϪLú­bÌ;qH òÿ[ÿ ÿ]þ+ý.ü“û9ûêú¤ú©úû‰ûûbûdûµû|ü¹ý%ÿ²Å)ñЇÆA²hJ«n›B·‰ÿ.ÿ+ÿ+ÿíþ¦þiþ*þ­ýìüÎûòúRú:úFú0ú1úúùúTû1û¹úGúú#úsú ûñû!ýoþvÿ ¼ÿqÿ@ÿçþžþ°þYÿDïæV·ÿfÿhÿôÿ¿…&¨‡LW) ±.ôMÍîÓÝ¢]ë¿G,íÿJ¶· ±þký‘üüÕûËûüÔü•ýþéýýYü0üÁüþ@ÿ'À3•äRý‹AÌÿ¥ÿ¬ÿˆÿXÿ ÿn€ytïù¹ÿÚþšþ€þªþÞþHÿÐÿ= ÿÿÃþ#ÿS¡·R°"‚—,gkƒ' ÍÿGþéýþºþšÿr–f*ƒ– ÿ>ÿÓÿ(bµÇ±´$Åf» Åz®B:ßÄÍÔìÞÿÚþ?þÖýxýý»üÌüýòü¥üçûÁúTù˜ø±øaù@úƒúüúÊû[ûýÇú,ûúîùwú·ú–ûTýýbþmÿò¥µ•ydLär5Ðõä,‡žÎpjàäƒÝ.ø0ØrWQ0`g Ã*ÚH·`P?kù+ðŠ h.Eqý- þ‹}æ’©—þýgü)üüÉûlû ûÅú˜úú}úØú ûTüûüaýÞývþ3ÿ5¹ë]oõLh,­Žô¿KÿÿþÕþbþ¾ýýtüüøûüþü0þ:ÿ¬ÿÇÿæÿ‡d+2í6Q Ý × ™ r ­Õ¦°  ‡ C ´S‹á#MáþdýÔûIúúøøë÷JøùMúÓûYýAþhþWþ¬þ›ÿÉø¶ð[%â’«/h‰7ðáÍÌHÝþ×ý;ýïü¬ü–üÒü¤ý“þ ÿêþwþÅý?ýýÒý½þRÿ®ÿßÿ+(_ÿþ ý&ýKþæÿ¾OwÿÀþ þRý!ü7û)ûÞûƒü­üßüóü üúAø÷÷ÖøÂù¾ùþø‰øsùÿúKüŸüÎûzú6úûkü|ýôýþyþ›ÿ¤'xô/»B]ΉÌYíƒâ@=ÿÛÛ´ö.SX©HÿÎýüüü0üÖû¥û%üŒýÿ?$ÿÿ”Äóy×BÅý̃†Á/Êlÿ¶ýügû²úmúNú3úØù&ù!ø2÷Ðö÷³÷WøÂøiùLú>û0ü2ýlþíÿ‚ê(B¿G'ŒEâO+Ôìÿ¬þ?ýÙûcúFùÞøùûøMøš÷Y÷f÷?÷ßöØö­÷ùúhú£úêú(ûÎûÔü+þ†ÿ¾a‹©ÎäŠu[Ðñä3wéK™ÿ.ÿkÿwriÇ>jƒò¦1&‰'sýK*Òÿžýäÿ£þùÿxMÿ1þ¢üúùøU÷Þ÷ø¸÷õ÷¡÷÷ßöJöeö~÷[ø~ùúÈú-ûoûZûòû¹üQý1þÿ)Q“áþWþ[þZþsþœþ’þ|þnþ‚þþ1þþwþÿ¥ÿS¡H!A3ÑE7 Œ,™ðn †  ]#ü)ÿþþžþ5ÿ?ÿÆþ‚ýñûiúÍùÅùMú‰û’ý|ÿMðÿ$ÿRþ‡ýÉüüœüý_ýˆý¼ýøýþÇýý%üzûìúGúƒùíøøõ÷W÷êöñö<÷À÷kø"ùìùÊúiû®ûáû+üÙü÷ýµÿož‡6ä¤ã ›~y2ÃÈZÂ4…ë¯Ö§ïÿ‹Ž >ûÿ»K*ã<Ñ S ‰ œ  ½ Î ±®"7ùñH©—ƒÿñþ5ÿ2VŽjòBà3Ë›¾Õ_dd“]Ðþ‰ýVý]ý}üûôùiùÐø·÷Êöaö©öÂ÷Öø…ùæù*úÝúü¤ýÿrC›B ô á þ P › ) W âpÀX:kábEþãüïüaýýsü|üæýøÿâigóçdŠ ® à 0 hDÊÒzLG6®Œ J flÿÌýäýþ!ýïú÷øLøTøü÷÷‘ö&÷Ãø§ú3ü%ýïýCÿZ6{í ð E ¼BøÛÿƒý:ü¾û‰ûû?úùø©÷¨÷šø­ù+ûÛü8þˆþÐý«üÝûºû(üý¿þú^zff R ö J ³ M ë^.{S‡êw3 1ÔÞ’g Î 2 ¥ Ð § k  § œ ­ Ø ° c 8 „ ( é  È *  º «]ÁA{Ñ~ô¡y$ Ñ S Iþ“Aƒsa³Õÿ*ÿ(ÿ-ÿÚþkþ2þ½þÓÿâþæÿ ý´üóú´ùùùúûüýþ¹þI{c/ð A™Žã\Ž~4¹ ã ù § Û‹¥™\e|& j2aŒíjî•”».gÁ¯ Z ! ! v / :  ï Œ ² I £WdT¬ÄPÿ‚þøýpýýßüü‚üoü½ü1ýgýsýý¸ýýÖü(üü£ü=ý«ý¸ýÜýCþÝþ†ÿ,¾cv{i3Ø9ÝemgxÏ6}ƒqi×Q[X=áI„íÉ\NDx!vÎ"³Ù$ ( éHú©ÈÏ—Aù¼RæšÄ)3ñ¯’ E QŽ(Õ uÿ›GôqhI^>¿ÔþÿÇþhþÿdÿðþpþ‰þ›þŽþþ¬ýŽý>ýqü¦ûVûRû=ûšûÖü³þ{Øb<c'BÿËþ‹þcþˆþÿªÿ-Rúÿ[ÿ¶þXþÁþ™ÿ÷=9átçL¿{ž±Ï¯„%›¼î Ço_jæMV+{¥Ë?òàÍ0{ÿŽþúü ûÂù€ùúŠú…ú“ú ûÙû¹üaýàýËý,ý5ý¤ý{þ½ÿþÿ 7²v6Þ\Fÿ¯þ2ÿ5CÇ€ì€æÿüþþÆý[ý)ý7ýíü…üü¬ûœûü üñüµüŽü]ýÍþ‰z»§¾}Éu²4¾°TåÿÞþCþþþÝýýŸýµý?ýJüûìùFù*ùñøTø“÷‹÷Zø€ùjúûÀûý×þÑŽüŠÚÔZ¸p›`óÞ®"ÿ|ýòûúŒùéøjøø÷îö†ö‚ö¿öG÷ô÷¸ø/ù”ù6ú©úŽúBúžúáû}ýMÿLY 3Ã?Ëu-à0Ð=ÏþÜý ý³û©ù÷ðõÃôíóüò<ò€ñZñ¹ñ&ó\ôïö ÷yû¼ûƒü‚üŠû2ûwûgûNýLÿ ð,¶©æÿ¨ÿ—þiýýõü’ý'þ®ýõüüûìúú¨ø÷üõõëôÒõd÷1ùúÜúðúyûîûÏû<û¬úû×ûëüvþ RîÎ3dÿjþzý%ü¥ú‹ùHùÓùàúÄû|üýZý9ýýý€ýþáþZÿÜÿÀúö€Çx’SÖ êEýª±=},³þ¾ü™úÀø[÷Söõ³ó¥ò@òJòAòUò…òÄòñòÛòøò”ó‰ôðõç÷üù½ûñüÂýZþËþBÿßÿžwQø;ß2ž0ÐwVIÿ&ÿ­þþŽýýÍüÊü8ýÇýlþïþ?ÿxÿÄÿYˆä ÿÅ'- gÿýþþ”ýXüûÍùHøÈö²õ$õºôïóóònò´ò¤òoòKò…ò×òèò$ó ô&õÜõäõZöË÷üùòû¤üpüüéû¬üÒý#ÿVǾ­c³ks*øN f Õ @Üß5Ë ûŠ×Rð-w.=5ÿŠþðýMýý;ýYý÷ü[üåûÞûü‡ü;ýXý„üCûoú"ú!úúSúû@ü ý„ýzý™ýþ@þ¾þ¾ÿ ]<ÅÏ—Âÿ±ÿ¡(ÞL{cYqð1·¬Â!þO ÑnÁ­„@.)ÖÿæÿT¿`qx{^å ÿTþùýúý þÚý|ýKý‚ýIþ'ÿrÿþþYþ%þoþÿxÿ]ÿöþÍþÿ:ÿºþÁýý°üàü”ý4þYþõý‹ý<ýÐüzü@üvüý±ýþ'þý9ü¿úÙù‘ùú7û¸ü*þ‰ÿïrUtQ/ïžVlѯȘ¡z˜VŒÿ þpý8üûVûPûû§úáùù ø…÷Œ÷À÷¬÷L÷÷c÷î÷_øŸø.ùNú(ü<þùÿÎU¾Zõ;D4+u6´ }h¢Àù1ï›0ÿ„ÿw#"oÁ£½€cÂ’ü¶ÁÂ7Z‰óýFûýø÷ÍõÝôÞóýò`òêñ±ñMñ­ððrï‰ïNð“ñEó õ$ö¤öÞö%÷÷1ø4ùÞúãü=ÿ†*ôœTgH ÷Ubtÿöþÿ¼ÿ{À5êþKýÀûÁúú ù©ùMúIû&üáü¥ý_þ©þ1þaýÅü üºübüûÔú;úùK÷Úõmõjõõ1ô;óëò`ó'ô¡ôÌô\õ‰ö°÷@ø„ø]ù”úÚûüüÞý]þ“þ¯þÿNÿJÿÿþöþZÿ®ÿ¬ÿUÿ±þþ~ýßü»ûaúJù¤øøM÷,öàôÌóÚòhòÞòôÇõý÷8ú-üÊý#ÿœ!g`‰t|)ÖÖdÿhþÉýFýŠüvûú~øàö^õôCóó^ó(ôÇôÜôœô«ôDõuö øëù…û>ýKÿsQÛ¹f@sׄ£âXÅÿ½ýiû=ù!øøtø®ø{ø@ø}øóøVù¬ùDúôúEûyû+ü_ýùþ©itóNN ¬ * ÐôÿÈdÿýûpùð÷¢ö†õ½ôCôô ôíóŒóÍòøñmñ—ñšò:ôJö\øúDûâûüû¶û²ûü&ýÐþ ÏÈÿ®’³ÿ/ÿ2ÿXÿAÿãþñý[ühú¾øÄ÷÷Õ÷ÏøHú ücýQþõþyÿAm•n Vx^ùÿ‰þÿ{‰YÝŽ~®¨cÍßÿ8þøüü_û§úúvùùÍø©øËø-ùúSûÞüvþsdÍÙà/ªØÑË‚¬pB9ÿ¯þÐþMÿ ˆtfÿÿÂþAþ°ýwýÒýAþ‚þ•þ°þãþKÿüÿDôPìF±j ’ Æ {   , e]”[ \H&ä¨3Ɖ…ìH%y_ÿ³þNþsþ·þ ÿæþ§þ•ýGþ^üYÿ;ÿNþ\þ.ýþüýüÃû’û=ûÐû¼üýý;ûãøù÷¾÷Í÷€ødùùúýþ)þ:þˆýØü%ü†û%üŽý•ÿïeÌïõÛ˜Z¦hÜÚì@’¸á)¡MÙÑFr(¥6¨ªø:tû¦îðà +»ÇËòîsË=^÷þÏÿÅþøýBý^üðûGü4ý0þÒþ!ÿÿþþþuþÿ°ÿšù]©™^ém¶` ¹ n |1'Áë\ôɤR&oÕùoüþNþþ¯üú÷÷÷Cø°ø¸øù»û³ýoþÕþ4ÓK—EÓþVqG]žÿ¢þþã£EûÍÆdÿDþ‡ý¾üçû†ûãû\ürübüãü÷ýäþbÿ‡ÿ¾ÿA"8“7ó¿ Á  ä @  w×âà­ì}½ÿJþÖüüüLücüÝü×ýkþ þ¼üûúúÿú:übýþÍÿ|ªÜW2745L³˜]TOìxÕøŒ0=ÿ!þý?üéûñûü@ü^ühü¢ü3ýÙýþÕýeý1ý,ýeý¬ýUþ(ÿÒÿHŒ½'Fò=¢ÿßþ!þõüÞûû½úlú*úúCúÔúèûúüðýµþoÿ$*¡Nô‹V ( P ” 8 o ‚ s  {  + Ö … I ; Hö%öÓ°ÿ8ÿŸþyþþÏý½ý+þ‡þáþ5ÿ¼ÿGéÂå7r|Zåtjs ±Ê³|Ž+þÞûOúmùâøjø#øÈ÷V÷®ö*öáõö½öº÷ÓøÆù.ú`ú¶ú6ûûQû=ûóû£ýšÿ`‡Úw9×ºŽ s½éûˆµæc'Fo×i/× ¥-u$2sÝ Ü Ç×›`WP¹RJË$™ºr¯þí0%ÔìRt@âˆß‡óýÿÿÙýßüüÂúËùÂù0ú!ûü…üýzýhýAýõüýýìý[þôþ©ÿžÆ6·* L Í ¥  ’ ‹ Ÿ È í é µ 0 §ƒYÿqÌ…ÏU\)MØ9¶íÇÜy¯ ¦(Z*æ‘ÿý@üoû ûúúØúiú­ù ùøgø³ø‡ù½úü^ý£þ–ÿ#E§•—0ß(  #|¤t'ü¼.™Z*Æ\øi>ÿÅýüòûDüëü~ýþÐþ›ÿCÃo\<#ŽV1 Ø ü ƒ ¢ » å S Û )csû e ¦ ùb°‹.qÿÎý?üÄúšùüøåøUù$úYûÆüqþ aE¿I¦ñ/ß5Ž®•:ËÜD  ÿ$þ­üïúùs÷÷º÷êø&ú+ûüëüÊý‚þHÿXÇ^T© Ò ¾ ] ª Ò Ý  ò ” > ­­3µþûüäûñúîùAùæø¸ø“øNø9ø,øí÷Þ÷%øTùpûøýdžeá° W “ € ¬4&÷’>~ÍŒ1ÿjþ˜ýüûŸù1ø÷öÇör÷?øýøóù$ûüÈü3ýˆýþ¸þØÿBtR‘kœS.—å3lÿŽþ_ýüÌú{ùFøœ÷I÷B÷ýö×öb÷–øúûžûÒû*ü¿üOýÀýkþÿ‡ÿÉÿ×ÿ§ÿOÿÕþoþ‘þ‹ÿñ7K h8„Ïj2üŸZ>`*yŸÿÿûþ>ÿ£ÿPR‰ÿ6ÿMÿÆÿ öÿÿÿBþ¯ýoýPýPý…ýþŸþÿ+ÿÒþrþþšýKý2ý'ýµüºûrúùŽ÷5ö.õ¢ôžôæôbõçõLöœö÷Ú÷àø_úÿûùý ÿ¶â¹·|O’mKÇQìÖóÿþäüÄûwú(ú§ùÝøøß÷¨÷øø ø&øÕ÷®÷‹÷/÷=÷u÷²÷xøpùqúâû;ýaþÿÿZþýoü|ûšúÈù[ùpùú ûÕûÒûnûû‘úú„ùPùŠù×ùGú±úèú5ûyûkûíúXú=ú†úû‘ûüuüúüœýøýþôýÇýÖý7þëþçÿ™åšãÿÁþ–ýüºû~û×û^üyüïûnûOûdûÊû™üÕý!ÿqy(Sÿþý›üÊû¹ûNüý£ýéýÍýMý‡ü®ûûˆúóù;ùÔøù†ù‡ùùWøø]øÃøEùþùûü8ýkþ¨ÿ¶' ¼Ò3û«ôUGŽ/†ˆRNiŠuÿ@þýöû+ûªúWúLúúöúiû±ûöûYüËüþüý'ýÞý,ÿµþ¦à'íÒ»˜uc­öòŠÇÄÍÿÆþ¿ý¾ü¼ûìúgú7úeúÈú+ûûºúŠúËúkûYüpý£þ½ÿ¥f^’±Ticm1^`êþæýný¬ý<þÏþðþ½þwþ/þóýçý5þÌþWÿÄÿ1Ã3COôj[î¾åÁW€ÂØŸf\«ÿ%ÿ–þøýnýÀüéûçú2ú"úÄú¾û"ýîþÛÕ²*0 l © Ÿ $  Í í·²ñ.ú†ÏÿŒþ4ý&üzûgûÒûŒüVý7þoÿÍS§ZQ 3 w ¥ [ í/lé9ÀÿW ž 3 ®ÁcTÑþ?ýÔû/úGù8ùúæú¿û\üXýàþhß‹s!æ¢!ÏPpٽإF+N~Wÿ¿ýâü`üçû“û’ûæûüñû’ûdûcû«ûjü·ýeÿ— ×E & ™ ¾Ñ“Ø€á 4 Ó Ç ìDÉwY¾0Nò[ÑŽÿàþmþJþCþcþgþœþþûÿ9ÿ.ˆ J8¬ FðÏ”¯wö÷xÿVþDý…û#úùÈ÷j÷¢÷-øGùDú!ûAüýóýÉþðþÇþ‘þ=þ³þÛÿ%žßj‘ùùá a Û N ] í . ÍlóáUï—ŒC`Ì„×DÎ$ w ’ E ÃGÚ~kb ~쌷˿†$~ŸhÑWÿ)þ7ýnü—û¶úýù€ùqù›ùiùùîø^ù)úãú/ûiû«û”ûIûû9ûøûäüÂýìþ\ô‚õÞ}½š#‡¥ÿÜþBþ¼ýCý ýUýðý™þÿ,ÿ´þ¶ýÓüjüAüoüÖüýýˆüðûzûûÑúÉúû¸ûßügþ‘ÿ(+3b‘¿ÏÝ!~Ñó¾|TVkjwµÿ ÿ þÏþ@ÿàiÃÞè…¬¤ÿÅþ—þÖþíþ¦þþ«ý–ýŠý™ýÑýFþ‡þ$þLý~üÜûgûÕúƒúUú&úÀù$ù¥ø5ø¤÷F÷¦÷ÝøWú¬ûõü&þ5ÿéÿ!…@&ö/ÌAÊ`õØ,‹ÙæÅΜv¤fs-uae-2.2.3+dfsg/share/fs-uae/floppy_sounds/drive_startup.wav0000644000175000017500000012474412162366653024667 0ustar glaubitzglaubitzRIFFÜ©WAVEfmt D¬ˆXdata¸©Lø³‰¨{ ³ % = < X ® » |  Ä ¥ ¶ â + ó u ÕTß ¼L. % Ø " ñ X ›  ó° ñ o Ë Ù{‘JÕ¡µ÷0‰ª ¥ º  ˜ D í m Å6S‡Ð9´!‰Ñâ5º9Ð!Pÿðéxžà&°rBüÜví yÃ܃»’PÅp|ôL˜þ×ÅÛÑ&¤ûÑ¥"—a°.±BâSÜ] o¶yÿ´þþZý¨ü7üôûGüýþIÿvHÈðÍËäVºˆJç‘JctVÄëÈ)½xR•ìÿ1ÿþþøý/þËþÿ[ði¶ã6Ù£o!wzžFÕ`ÕB¸V(Ãÿ%ÿlþåýSýÆüIü×û²ûþûoüâüWýzýeý&ý¿ügüKüLüƒüµüÃü¿ü›ü™üËüíüÌüŒü„üéü§ýèý”ýðüüÎúŽùiøœ÷€÷ø…ù¶ûñýªÿŽŸÿýáûÍú«ú„ûêü þÿàÿ1ÙÿÏþ²ýýiüûgúéùKú û~ûû_ûcûûÖûØû6úãøûƒþTü4ù™øAúáûHø´ôcö‡÷ŒöÇøý멊yÿ7ýù õnô…öh÷Íövöo÷þú²ûÆö³ðZïó²ùøÿy/þoÿeæDÿÂ÷KöxöTôñð!ñ©óãóåò6ôønû¤ûuý…Y+ü¶òïî–ñlõ^÷”ö“öBúêüxüËúÕùVü$‰‘©j O  ™¾WËý`ü³ú‰øgöQõö¥÷ºõúòtò÷ôøúýøÿ5.Oüùg÷¬÷…÷ öôóôlöÐøùùaùîø3ù/û¢þ•‹Éܺû÷„ôÙóôô­ö>û€j è2!qU>ý¦þz®úœ j{:åüØùëö0ôßòóDô²õÙõZô¾ò7ñVð·ïšïòðèò˜ôeõcõªôò îxëìQïó÷öûÉ qT=„vó =&Œ#˜ 6·ü÷´òöî€ê çîçÿîöúþß°ã „ 0!Áý5ý™| „jˆº ,Ób¡Ã È „¤þ ûSù'÷¼ôáòÅònó–ô7÷sû ÿŸÿ’üqý>ûÅû–ú†úåüÜÿé—ÿgþ«ýfüüþý__ ’ * ¥ÒüoùCø°ùËý[¹ n ²¾Úû¹õ&ñ‡ïñ¦ô-ùVýRþ­ú°øeùÚüJ9r –‚ , ð % ê ˆ )ÕýnûCûuüÃþ‘Û¢iõµ®ì¾þ üTù÷&öö§öb÷Høiùú-úIú“ûJþ@» o¦ï¾ßk ° Ñèüùz÷B÷Kù)ýcI ÛdåR£ s Õ : à["þ*ú(÷¶õþõ,øüæ$x / Ê ‰ Ù Ü ì31¨Áþ8ýzü•üPý@þYÿ‰ÓÙ› ½¬ ýGÊ{ [MBËHö”–s¼`8 ² °  ± ‘Ò 5ÿjü`úù¬ù­ùVù«økøßø³ùœûxþ"õtñÓo«…ìbçþÁœõX7oš…Dõñÿÿ>þ§ýþüêû%úñ÷Øõ"ôøòZòpòwóõ¥øÍüž? Ï á ö ¦Ùƒ]V¶….åÔ•ÊõþöüÚúðøÅ÷‘÷qøòù5ûnû‘úqù»ø˜øùVú<ü&þøÿ ¾,Íç[õþ#þ þMþþIý—üKü—üdý°þ,Ûínÿ¯ýIü‹û\ûeûaûOûÜú4ú•ù2ùcù?ú¯ûÉý"™2I}è¬ëy‰Ä$Íÿ ÿîþ"ÿXÿÿsþ`ýFüœû”ûÇûQüóüýþ}þŠþ;þSý.ünûmûüý\þÖÿõq©ÐÓ¼‘ˆ6…ÿ$þ:ü×ùÏ÷¶öaö¿öþ÷ßùdûãûµû'û£úiúBújúþú9ü½ýéþÜÿ€Ô´ÏÅz EÏÍï°vÿäýÝü6üßû©ûqû<ûû$ûnûçûVüŒü“ü“üLüfûúéø)ø¾÷’÷ä÷Møyøžø†øÙù‡ù‡û¹ü.ý‰ÿ£ÿ’Ò;ÊõÿÈþ„þÐý ýýmü ü„ýéý9þ»þŒþ—þþ÷ý¹ýBýMüÞû©ûÊû5ü üoû+ûû5û‹ûÌû=üŒüSüsü­üý<ý&ý'ýEý#ýËü—ü¢ü‰ýöþE¤ ñ2ã+O¸©þ˜üûøùõø\ørø=ù4ú&ûüŸü¸üSüÚû9û„úîù’ùÁùlúûzû–û«ûáû<üuü¹üýOý”ýûýwþÿ„ÿ™ÿÇÿþÿ¨ÿ½þôýzýý­üTüOü†ü¨üÝü#ýbý‚ýIýÛüœü«üÞüýüýNý¾ýHþÄþÿùþ¢þ6þäý¨ý†ý–ýÙýþþëþÿ€þ”ý§üúû‚ûû û[ûèûüý‚ýûýUþþ‹þÖþzÿ³NÈ/ ×Cšÿmÿcÿ3ÿ,ÿ5ÿTÿ°ÿ1™ßeµ¹„R4<9*I ¿~Ï$Çÿ™ÿCÿÿfÿ¤ÿäÿNöwÀ+ÐL_+ムJë!{ÿjþ½ý0ýåü÷ü3ýŠýþÄþZÿ¶ÿ…kr4?¿tCØfµ~ÿ>wøö‡Kÿ™û j–ÂÕÐÉÿÜþ%þ’ýýØüüü5ý|ý}ý\ý}ý®ý®ýSý®üöûUûÊúú€ú/ú—ùù<øÆ÷I÷žööûõiö*÷Ô÷£ø³ùúÿúMû§ûöûü ü8üºüyýþOþ^þWþ9þþþùýéýôý>þÕþÿãÿ<`oøÿ?ÿkþÂýaýFýRý‹ý€ýýÄüªü©üdü°ûîúGúÐùiùùúø&ùTùMùmùÓùúúúúnú¹ú×úûgûØûðûðûFü–üÂü×üðü ý!ýýóüäü@ý³ýñý(þZþaþ5þØýpý,ýý4ý¢ýPþÔþ»þðýý~üëûHûÙúÊú ûgû‘û¤û¬ûzûûÁú¨úêú=ûUû\û^û~û‘û1ûúú«ùUùùCùnùnùCù ùüøù%ù.ù„ù¿ùmúçúbû¿ûÒû.ü²ûúùüûŽü#ýŒý7þÓþ¬þ|ÿ<ÿ¶þ7ÿÀÿ-ª`þÿ¤ÿ'þˆücûgú?ú+úËùñùëùùùŽøøó÷Ø÷Þ÷,øWø•øÊø½øçøXùÏù ú‘ûuü|ý<þÎþ[ÿpÿGÿØþ3þ×ý¦ý¦ýéýþ+þ þ‡ý ý¤ü?üÚûŽûûéûWü üÂü¾üxüü¶û]ûôúžúZú:úEúOúgú„úÅú%û]û{ûÚûjüïücýÌýKþÉþûþÞþ›þdþúýýû;ú ùø:÷¦ö\öCö+ö5öoö—ö³ö¤ö‘ö‰ö—ö}ö%öÁõõÎõö*öxöþö‰÷÷÷2øføåø”ùúDú~úœú|úú‡ùÌø4øÜ÷¸÷g÷÷µö€ö=öö"ö¢öV÷ç÷køÆøùŒùíù:úxú¸ú6û™û¿ûÿûJüoüüñü‡ýúý þCþïþ‡ÿ‘ÿ5ÿ°þ&þvýºüAü1üNüZüIü^ü»üýýÏü¤üåügýÉý*þ†þ ÿ¹ÿàÿòÿ`%{ÿÊþ*þ•ýýtü+ü0üüÔûšûûŠû}ûpûgû·ûühü™üÌüRýþ½þ6ÿÿÿ¬ÿ¨ÿ°ÿ Íâ(г š¼qÜÎ 4L¹–晘ïªÉf—â6‘¾4A-çÔ<ÀÇcç`ÿxý›üBý¬þæÿ ‹ÿ«þ£ýgüQûaûvýa€úaÑ_þzûƒùˆùMûªþ Øí É t ;ºÿýzüjýþ÷ýžþÆ!óWÂÿºP›•;Oµn i Á é ¢ Ê ÞG ¬ A Í V ¯ º A f e ìp^Ú ž¿WÔœ¸ë_ Ø \ VbÕæMpU""ö –þªýBýŠýiþIÿCÿþÛüaüüæüWýUþeÿÓÿHÿZþÇýþÿ[ <£°ƒ F Ô²ˆ4ï/½Õò© Á¹ñŽZí<' gÿ;ýHþÈþ3aàÖÆ¸@Ôz?ÂDfÛ& À ¾ è ¶ò<éjöM 8–IFXé¥-A  ï Á ” ÊÙE¿d“½èö Í  4 0  È 6 ? ôf†¶ù:®=ߎFêX€áØÈ€Âx•ñ“…ôA / ½  M L 5 u ¾ ”  ¤ d 9 ˆ “˜u½GÀLýûk@ `ŒX¿¼‡'+âÔv‘D.ÚlžWyðÿ©þÏýsýºýrþZÿhgúÿ‡ÿYÿ¦ÿ‰žÂ¥¿Vó”VCZ¡±Ewu]ÿBþNýÕü(ýÖý¤þ~ÿHÄésÖÿCÿÊþŽþ¼þ%ÿÏÿ¤yÇï⛯Hˆ1~Z%b-Ö{Ý *bԣ꘤!—MÇÆšu’ió@¬rr U À ¶ E  È v ºÄbØÌ»w/ÿþúü3üÔûûfûLûäúúþùwù7ùJùúûqüÍýÿ×ÿRŵïrÞP ' 5 Ë  z²3Ûæ©BÃ3„ô¥ºjg¢­kþ;  Ó³2  0 £ (E Š%eT Û ô : O E/é«§þ“?ô¦ XÿùþîþHÿ É2)Þc8n£ªÊïêk…”Èÿ1ÿyþ£ýý¦üü'ûrúúúú(úú%ûüýþÿ$Nƒ·´]¡•W^š‘cbh‹ÀN„M×4*(rý®f1P™óWÐuMå)[`OJ+ø¿[ÁgxÝÿÛþnÿÄý0þêÿIþ‹ÿ™þ þ•ý·üªûÔû|ûñûöüýYý™ýLýsý˜ýúüÙüÆümüìüCý„ý7þ:þ±ý\ýéüóüýüÿû¤ûJûPû;ûîúÚúÊúÝú…ûHüûü»ýCþóþóÿ :<_Ÿß´ ê…^“zͿάˆFÿÿÿþÿÿØþ¶þ¸þÖþÿÿÿEÿ¯ÿ0Ì=l˜â3^ÊK”áÍÊ8¬ÿÌþAþÝý}ýLýý ü]üTüVüü¢ûtû­ûüûüäû£û£ûsû^ûÆû‚ü=ýáýTþãþ‘ÿÔÿ'ÿþlý'ý$ýLýrý€ý6ýpüLû:ú_ùÇøø•÷€÷á÷^ø­ø¾ø‚ø{øùüù6û}ü}ýpþ\ÿWìîÔu#²>”ç¸Û Vÿjþ2ý÷ûJûbûûOûšú6úRú¿úû­ü´ýþ­ýðülüXüRüšûVû×ûqüÌüÁüpüTüˆü„üWü9üü“ûºú½ùù÷øùÁøGøØ÷ª÷™÷m÷-÷ ÷X÷²÷‡÷×öbö5ö ö õaõ¨õwöl÷~øJùÁùú>újú¦úåúûßú†úwú\ú>úúCú‘úùú“û…üWý¤ýyý ýqü üÂû´ûñûüåûÙûàû†ûÒú úùÚùÜúüÇüÄüüKü ü°û|ûAûûûéú¹ú;ú úúú úOúûBüý¢ýeþZÿ“’,("X§ö%-&êy…eþ¯üIûú`ùKùÑù_úû”ûfû¬ú½ùÚø6øµ÷v÷÷Ý÷døÿøqùÛù?ú™úÇúìúKû÷û“üúüPýöýÑþSÿLÿÙþ$þýüvû¢ûüÔýÑþ’ÿV)µ—-Ê”¯MMþ”àœÙ- ¨ ! # Ì V ˆxS”uœ·?Ó#G2•¦þ¹ü5ûZúÙùù‹øYø;øô÷¼÷ ÷³÷M÷Ãöœö÷¯÷cøÔø]ùÏù¶ùkùÈù<ú¦úÊú"ûÐûÖüøü¦ýüNýˆûˆû¡ûòû”ýŸý:ýmýLý¬ý©þçþuÿ‡-,ÉŒ/‚{…r¼Œ(Qv€…‡ë·yAbŽ+¯þ þËý²ý²ý¯ýþ±þ9ÿ€ÿeÿÿêþ¡þWþ0þ¨ý~üFûƒúqúþú‹ûïûNücüŠüžü{ü#ü\ûjúÎùÀù½ùqùù¤ø8øù÷øsøPù:úÙú6ûûÇûÎû|ûû>ûüý¡ý¬ýRýý¯ü³üVýTþÿ·ÿB³üóiÑÿmÿjÿ #+štK®rDË"jAkQ,«l^lWfñþ©ýäüÂü>ý#þ ÿÍÿO¶;5~kÉ0Q}±Ó>rmôòôAs•*£VÑÿêþÚÿ§ˆFÿ–ýoÿ’?<…ý!ûýü²ÿBÿLý£þÑ©¨JbÿßÿéÿèþÄþv± Ñ$,áü|ùõ÷•ù§ü‡þc®å 8 Oõ{þýŒýýÿõúi z âßæýûèúçü%åŠ"3ü÷‚ô öDû„0 Õ Ö •«üŠõ´ñ+ðšð­óWùgU  :¯Êè {ê # ¨ l lÀn2Šóáÿwÿvþ?ü(ú:ùèù³üÊöHfÍÿqý\úW÷õôiõŽöØ÷#ú%ýÇÿ˜“ÿ¥þÔþ9ÿÿ‰þ|þ%ÿEÿHþüúd÷èô+óáòbóôÉô‹õ6ö¨öÌö„öuö8÷ùÆûþCÿDÿjþ£ýzýæýÿœhô  ®qÖý—ýGÿëû!ãDÿPýtüŸüÀýdÿ¥#Ø´ÿôý(ü(û…û.ýÆÿ»ÒF>^Š(ÿ^þ?þìþ;ºØÖ¼ÿŒý‡ûbúúPúÍúaûzüœý²þg·‰žF]þ½ÿ[ÿðÿìÌ·ÈÄô Â$&9åËàÏ7~–•"‚F0tèв¸Yó ™–«'õ¾šiH JÐ&A‰”öT.1§<3Š2Wïª † LÿåþÉþ­þyþþ,þ·þåþµþ+þýŽûXúÒùRú%û¾ûEü²ü ý•ýïý‡þrÿoËŸä㽜¹l÷~0=°ŒŸã"öæþ-þãýØýíýòý°ýýRüæûXûåúÝú>û üsýÕþÆÿAžg™º¹Õ0~³—ûüáÿîþ3þþýüýŽý´ü­û[û©û×ûÅûvû]ûÅû‡üºýýþÎÿU­*Ìý¹ W9§8 #ꈭă.<+ebžßÊ`WÿúÿW€4Ør¡> Z xÅ·kUâÛË_9,îÞ–ÿmÿ»¦¢¶¯›{Ž;iüšøÅ÷ÇùîüŠÿ¶äh^Èü•ùõùŽý«N{oEÂþØùÔö†öùËþ%Kb  ]Æ]ýçýŸ#0ðI¥ o.QÜÁ ñ «³3ÈIsƒÄ Ý ø t<¦gì z u>cTñ$zË ü2g I  g™8ÿqþÙþ¤ÿ gÿ¶ýDû|ø?ö—ôgóxòœò[ô,÷¼ùOûÎû»û|û+ûYû ýÄÿ™[ë­J?ŽED þ…û‰ùzø6øøñ÷+øÛø úúúâúÿùáøì÷C÷7÷øÙùÑûæüêü¡ü¥üýÅýÃþúÿ½îú©U±Œþý®üåýwá8. Ê¿>¶2ÿýÙûöû'ýÏþv±d@X£þyý{ügûbú]ùøžöÍõ:öp÷ÕøÚùhú¶ú§ú_ú=úíúýËÿgM¯þ£ûÛùáø»ø&ùùšø5÷õNóTñÞïñÏôøðø¦øÓùÃú&ùÝôÚñ(óÈ÷ úÈøK÷À÷ö¢÷eõ‡ùyþ­L, v$ (Ïî1 Ë·E Ù Œ<Œ€²þŒöGó:ôôòðFítë5êÃé×êîvòõªõŸõq÷©ù$ùÛ÷¶÷dùtýWE ÂHS&á.¯5È7I4·-/&, EË¢tûR ì|¯úHõò›ð±ïï@ï­ðÇól÷öùúúúÙûËþäd Èž¥Ÿ¼| ! ƒi4!þ‹û<ø¯ó…îšéÕääßzÛtØÔÖ‹Öp×÷ØUÚ™Û’Ýúà–åûê¶ð1ö úIþuôé ¡ ~Ñwü*S!®#í#ì ¶( -×û0øÕõ¡ôÑóÏò€ñð­î°íí-íî>ñÝô$øOûÿg9mÜò† 1¹ØÄŠCÞ º¡ÏÿòÿËIûföŽòmï1ì­è@æ åŠääAãYâNáãàÎáÁãØå§çléqë>îñó!ô*õ…öù÷óùhüÏý-ýàûöûný ÿD&Úzù‹x’p‘ ˉžïý{—¶ÿÿplZ ‰+- Ñ%)q)‚'u%Z$t#•!:£•y rý˜ü¯ýÝþDÿÿ¾þ’ýàûrú*úVûaýhÿTàÿÓþ{ýÐü.ýcþǹ` — uh © ôs+Ñýiüáû´ûðú‘ùÏ÷)öúôèó@ó*ó„óÓôïöòøúƒû ügüåü£ý½þ"ݦûy­¿MΛvŽžþøü·ûúúûTû¿ûÏûûÝùzøÊ÷&øûøiùeùùÆùÄù ùø:÷©öÏöê÷«ùü8ÿ"H Š kܦw rz † Ê  ûÕþûøõûòæñœñ!ò<óŽôÃõ}öhö ö\ö:÷¨ø7ú”ûÍü·ý#þþiýýrý^þoÿß¿dÛÙ ïþiü@úøãõäódòNñ£ð>ð0ðšð¢ñ$óšôÊõ÷CøÀùžû þ!tO> © “ ‚ ö z 9 l C 3  Á ÞšòéS”K¡„/·¢9 þ6[@ Ü| Ú{~Á160*‹üÿ)ÿ¿ýü>ú;øšö¬õrõ öùö©÷øã÷}÷H÷ ÷?÷å÷Íøîùûüžüü1ü¸û]ûRû³ûPünýƒþiþüü0ûWú3üoþÂþäýÿ|Ð {ó I@&° Ú “ q"ïV…§ !v jûüÇöóóó?ó#öùü…µü÷Åó{òó½õúžþ5Îcñýrùæö½öEø®ú1ý$þÃûÝõpîsè æFèîZõ”û·þ–ýNø#ñÌëéÖçTèÕë³òdûÀÛŸœ@ôþÙü¯üPþg]a¹ ª V Ñ Ì  ˆ»¯|ÿçüûPûÒýħB B  ðíOçþÚûÎù»øÉø_úqý.)}~ýåùøØöÑõ|õ¸öjù¹û~ýªþ°þÉý—ü\ü¶ýàÿb0¯Æ´>C  õ ú=ˆýúò÷`÷ùøíûNþºþÁüÔù”ö‚óòQó—÷(ý¿ŽÉŠ,þæü ýBþÊÿ-ÕF"ÿü§ùÃ÷øYúºýoš_uý“ùÌõ•òpð–ï¦ðSóíöúæû—ûëù<øñ÷ùûúü{ÿDÒîDöF »fÅî€Nþ>ûéùyú&üFþ3sÕX =þ‚üGû‚úºúÏüNÎFåaù 3 c I ß 7^( $ ä j _ wx›· ®“K·ýqû¥ù²øqøYølø·øéø†ø£÷Èö@ößõ3õô<ôèôáöÊùüü#ˆ6g~»b·ÿVÿÞþ¥þöþnÿÏÿóÿúÿ¥ÿ¯þý ý–ýMÿOQ [Åüèj@ÕÊŒàãÔ¢œ&è¬W,³ kY¬  Ë ›yÿþÜþ6“È胡üúû7þjÿüý0ü$û>ý‚û5üõùø÷Øöù÷\øŸôeðêìÑêžê‰êééué=é<è¼åw俯èGëíòíÝíìïèÈæ®æÂè‡í8õÀþ[ƒ Wb ‘ Ø ¤©º % ˜ù0Žì’eI¾Azª,SÉé‚ ) ÑoïÿÌÿ§³ûß:ÿ#ÿ(ŠëuwýQùÉõ?óìñ¿ñfò?ó÷ó2ôôeô‚õ]÷¤ù‰üqÿ/TZÅþäüÁúUùhùuúôû¤þy\ºùäÖ¿hÙÓW2̤ÔFÓþ±üIû÷ùá÷°õäó ó#óÇó õ÷nùŠüïÿǺ‘º¬ÚY ; Õ²­iÉ¡üºIÑÓ§Ë XüúÚ)/™•—ÿòüîù_÷’ö}÷{ùþûHþÿuÿúýŸûùæöØõö÷ˆø›ùZúÂúƒúÎùªù(úfú¥ù6øööùööøÜûýýÿÒþgýûêølõíñšïÒî'ïìï„ðæðÖð•ð¼ð4ññëñËòÑóKôô!ôsôkô"ôCô£õ$øãú)ýÌþPÿÁþÌý'ýoý}þ»göo³ ÿVüTû€ûü÷üþ#ÿHªû–wà õÄÒf=ÕªS[Óÿ+ýûùJ÷’õGô`óÈò7óôâô2õ'õÿô#õjõ¤õõ¹ôùòñ²ïLï`ïýï"ñdò<óƒóÆó–ôõ3ôiòÁñÐò:õ¤øËü ’V?Ú7²°ÁÞ° Ó Z …n•#ÌZbÿÆþèýý‚üàûÄúùë÷;ø£ùpûŒýÐÿš!PSRV ·¸ŒÝ$È$| › ~ Ú‚_=:Tþ½ü¯ûFû¥û®üëý÷þÿœÿ_ÿùþ¶þáþ“ÿ¹ù!äÊ$çñì«ä m ‹ ¤ÓR‰}Å{ÿý ú×øø°ø*ú¤ûºüýXüÈúùh÷ ÷Ò÷•ùÌûêýrþÿ”üþôû+üïü6þëG ¶ ¼ ý ¹[ZÛmPª ô Y  ª n<3Ó Ì0ì[o ª  á ! ª    ¼ û â òâ18” ’ ' ¥, ?ÿƒýÔüý©ýºý¦ügú ø€öâõö•ö1÷øÆø ù6ù–ùdúVû'üðüVýóü ü1ûÄúŸúºúnûýüÿPpìÌZˆ_Ö`Ô]Ìúd  Or‚+  ‚ ! † Ö 3ÚHZ % µ ² ÂlO ” ç  è  ¬«¿)ߪ0 ²e¬þý0ýlývþ×ÿo¡ÿ§þTÿìb5ïÿÊün u Ú¾Âÿ)?IÿÖûÂý`šòýÌûsüqJŸ¼ Ð qc¯ ëu ³ Û G ÈÝ™ÉLA , baù^ Æ£ ® Š©þ•ýcÂ, Î › bCûˆõ«ôùÅ NZ VÿÏôÁíyémç2è6ìZóÊûIVÎ «äûãä‹ U ãÒ7  ­ Èδ}=: ’HoŠø 5b šÇþGú÷¬õÍõ±ö†øzû‘þÿ[üdø1öÜõ}õôqò…ñäð:ðíïÝïˆïäî î×ï>ò­ô´öÅøòúý²ÿé4̡РÞÙ{ c‘+¸g?I P qQþÿ7ü?úØú{ýËN86Úÿ`’K4 Þ T ¢Ûrþ¬üOüdýªÿîM~)×q#5c|x±áêü9‡ÿþ þLÿ“?ÂUªE·ÅÖþÅû ù÷øöÄöŽö’ö[÷¢øíùûTü!þÛÿË÷ö·Ôa+' Ø  h JR’˜iNº|Z°R/TH  OhÈ@þíüïú5úMü3ýŒnšÿiõ„h¨¯±Éêÿ°€qŽ K x ÊWÿöÿ®P‚ü”ú$úaú3ûŠûûŠú÷úºü¤ýÑûòø÷ ÷€ø#ú±ûGýþÑý}ûˆøù~ýM×——rþùñó{ð¯ï4òáøZÖø å x9Éý²û¤ú¿øS÷ù;þö£& Á  J „ ë ºfÁ-2¾uA}9Î b›0†ÚþÙþþ1ÿØ0…XþïùÊõ­òªñWó¶÷Gý×þúõõ©ú¿þ(ÿ×2Ÿ…É` Dö~` æ * z K†2&R vAh&þ”ûõùkõ³î¡ë,îßð‹îSéªæJç¿æmãá¤âÏä›åzçmí{õrúìûýÑþÈûÿTþ ÿPx 5)t=WÇ  @ Æ ˜ J R Ö²€ùËõ¾ô öSú2~ É < Íð4rê ê½Õ—™J' u  ± e ZLoþÊú°ù]ù÷™óñð ï$ìHéNè'éëBíÔíìGéèDé5ë>ìeì™ìQîüñBöú‚üCý ýoýhÿC2üÍùlúïüÏþìþ”ý:ûiøyöõèôqôäô÷úù°üKþeþÒýçýäÿÙnQ y“ cw W Ò ëkë C ³ [5ùü¸õTò~òèòåñPñ¥ò%õuö=õ³òŒðmï¾ï&ñJóÇõý÷Wù­ø4öóóHóZôoöø•ø„øBøs÷Tõ&òòî€ì¸ê1êŒë9íÖì®ê&éÇéûëÑíîíwìí˜ïqñ9ó[õøèú}ý1ÿ¾ÿ”ÿªÿ²T“ÀsÇã=,Wš-üÿrý“ûÓùóøxøM÷Ñõ´ôèógócó,ôÅõŠ÷ÔøÛøª÷ööôªôõ ö‰÷ãøYùÈø÷ ö¨ô‘óó•óõ¥öv÷,÷<öiõÒôšôÄôßôìô÷ô_õêõ¯ö÷'÷ÈöÁö¨ö%÷ø¬ùûÓýqýìåÞ¤,ÿÁüÊû?ûçüãýýküéùÎöºôyòåð?ððWñ’ó\õböBö®ô–ò]ð¥îZîïªðyóžöbùÅúËùòö²óGñÐð,òkô=÷îù®û>ü@û)ùÖöîôéóôáô^ö/ørùú%úSù øâöØöxøÙú8ýIÿþ¢;ÿéûùÁ÷¢÷'øªøùœù>úûü³üUüÐú×ø4÷yö†ö…öˆö•ö1÷³÷Ø÷ø¾ø0ú/ü þÊ9yb k ©$Ù?†™ïµ6Äý]úö™ñëí¹ëùê÷êëëSëÊë›ì€íJî¸î1ïÏïäðjòô+õ{õôõËöŸ÷Røoù\ûýDÿýI²t ª  Á}|µàÿ]ÿ]ÿT;õò Öˆêþ¤ýqþ,ÿ­ÿ£8Ôã , Ù jçæ:)-‡'õÔ£M¼ç!=įË?Ø#`Å[/Yñ7ðvnÿ`þûýTþ·þþÇý&üçùF÷êô{óóSó–ó3ôlõ3÷«øƒùHúUû·ü&þdÿ]ñ»Ýÿrþ+ýÅü9ýVþw>ÃRñ ?ÈjóLZ'Ô¼Ryè Ùõ  ¼B%=ÐPÝÏëÚ;Ñ § üÿÉž•":Œ×‘ ]  H‚ü9 û[Ã#È…W­t£·£,\þýBü²ûTûçúhú’ùuø=÷·öx÷0ù\ûÓýPálNKz*¶  Í S Ž ƒ j  ? qõbݺ<M=Q8‘_F/Ç ù ˆ q ÞŠoë`›}>ÆæFªÿ9ÿÿÅþBþˆý´üü)üÿüþý;þøý;ý?ü”ûcûwûŒû’ûÐû(ü üûóú\úìùßùaúû•ûÙûü#üÔûû¸ú›ú}ú‡úûÐûqü=ýüýèÿb¿}‡þNþžýÔýQÿ‰‚)A$¿Ÿ×N=ƒ¨Å¢ó°¯¢3—5€Ž ‡ \ Ç ‘ ò (  ÀeÙcZ@RÍS’Pîü~îÝÿýúŒø-÷½öE÷Nø:ùeùù•øVøHøƒø2ùúÄúøúÅú­úºú0û§û‘ûû úùøëöö”õjõxõÔõAöpö¢ö¯ö’ö±öI÷_øÒù=û‹ü¢ýõýâýôý¥þâÿyAýQ~îö8 ‹  ­ 6 ’ “  -  ú‚5õ«;õC~#KÁJÂÿzþ¢ýDýHý4ý´üëû ûçù“ø¬÷]÷¨÷å÷Â÷ ÷©÷ž÷{÷`÷÷¬ö;öëõÔõ¾õiõÇô6ô1ôÝô öP÷jøù6ù ùàø±ø¨øÌø$ùÀùúú·üµþsÆ˻fPb…®û³‚h…3\²Êmþ>üÕúú%úÓúÍû¥ü*ývýNýtüûù“øø÷ß÷ø øù{ù“ùÂùYúXûkü&ýmýZý/ýMýËý#þâýzýOý¤ýfþNÿ¾ÿ°ÿ¤ÿÞÿ.©ÿÿJþ5ýüåúxúuúñúªû¿üÖýôþÑÿðÿ[ÿwþ®ý>ýÓüjüEüBü“ü<ýÀýþ¬þ!ÿžÿùÿ]—ý ÿõþ ÿŸÿsaü&™ĦáyZ·uiØ+à:úƹŽ$n#^‰”Ñfée¬Ùþþàýøü}ü§ü†ý þþaý üúûûdûIûû¾úÕú û3ûƒû×ûüßûmûôú¥ú}úú¸úû®ûoüBýØýÙýOýüïûXûâúœúEúÝùÇùôù#ú!úÐùù{ùùÈùú¢ú=û¶ûOüïüZýbý.ýòüýUýíý°þvÿjõVÚ6Áxu_Þõÿ±þMý(üVûçú¦ú‰ú[úFúEú«úüú²ûƒürý_þIÿ1ÔÿåýÜÿ}ýDþôýPýQýÞýµý›ÿÚ2¤¡BÀŠ1˜ÿÿ“þÞý°ýJý'ü@û@úöøø ÷xö‰öûö¶÷”øùYù®ù ùoùšùûùõú>üSýþyþhþ$þ>þ´þTÿ*3FuÁ;6ƒ7:J9Cÿ8þýü6û ûYûüûÝüªýÛý¾ý»ýÞýÿýkþ3ÿ&“Œܨÿäýü¸ú0ú|ú5ûÓûüÅû-û§ú}ú’úúLúYú–úæúýú¿úúnùáø®ø¶ø6ùúûÆûHüíüµý3þnþÿ;œ˜&IöN”Óy e§ÑÛÒÏ |˜MýGQl¸6i&¤… %«|Ôÿÿ4þ—ýèüÈûcú ù+øu÷~ölõ5ôZóóóóËò òIñ±ðÕð”ñŒò€ó-ô-õ†öø?ùjúœûžüeýÁýÇý™ý`ýXý¦ýþÚþUÿ¦ÿßÿ¾ÿuÿ/ÿ½þjþÉþ»ÿ£y¾¾vÚgýL7äxÿ®Á\4ág›+Hc‹ðÿYþ•ü1ûSúÍù`ùúø ù¤ùSúšúÌú=ûçûžü ýCý¨ý@þÍþ_ÿÎÿHËäó&xÐÃgœ*ÙÿéÿQÐ6Wƒ†½&ٛʙ9SÎÕ‰w Ò Ç Ž  Alnb~"3‰çQ; šLÿ÷þnþÐý@ýÊüaü$ü!üYü®üÓüòüDýâýžþmÿþÿ~æL«°o?ø®”¢Î ÝJÖ=QüæîÿÎý_üÈûáû>üïüùý ÿ ÎR|ŠäÌS¿ Š 4 i¥ë'yÇuR]U™baÁ:Јu´´ÐN4²HÈJN/FŒØi¤Af7ßPÿ•þqýWý*û–ûdú°ù úšùÚúzû"ü¨ýiþÕþtÿÿ”þ°þZþ³þjÿ¥ÿ§ÏSñ‹qúY~á * ¼ ) 7 Ì H ¶ $ Í ) Ùˆr·*‡|¥íq Æb*œ*TÏ Xÿ|þÁý'ý¯üPüü3üØü·ý%þªý€üàú=ùø÷*ö±õ¾õ8ö÷-øŒù¢úêúØú>û€ü¦þˆCG » ¦ ü " ž œ $ ¢šîgJÕ]`{ ^ q ®  > !®†q*Ív2ÿÁý]ý'ýý€ýìýºýÝüÖû%ûÕúÀúèú¨ûÃüýàýÙýÔýÖý«ýýÖýþ4þëý‚ýMý2ý×ü[üü3ü½ü&ýtýÀýþþ¶ýœýéý•þÿ²ôãÚÔX\²%ŸÕ ¹   | a úá2é]ˆ‘¯Öøâ·ÿ»þÖý,ýsüû˜ùxø\÷~öðõ½õºõ®õö÷§øàùwú|úKúáù•ùkùŸùú™úûúLû­ûülü»ü2ýÍýNþïþºÿÑ–OÓ—‡‰ª)#œ¶‡‘.˜Ñÿõÿ±¹$§ý,“` 0ûUѱÊ~óÿŠÿƒÿ–ÿ ½W®ûNÈØ­ñh´b~(Œ¾À¯ðªÇ«Rê˜h"Ûÿ{ÿ†þ&ýðû_û^ûvû³ûûû ü¨ûÈú½ùÑø?øú÷føoù‰úGû€ûFû ûû‰û]ü€ý þyÿ¸ÿnÿîþ}þ>þLþ þÿyÿõÿNsª§á1(:Žò"òk¢Ñ/”ÿÿöþ/ÿ©ÿdº¡øÿ ÿ=þ¡ý`ýý4þ³þüþÿÇþ/þ˜ý1ý!ýFýPý?ý6ý<ý/ýÄüRüàûpûûûRû¤û¹û¢û¨ûÏûwüýÆþØÿ˜ò¼Jíÿ2à·Ý´¯Ö”o¬l“> ±¥ÌËÖøV 6 º š w º˜`‹AÞt£=ÇÀõÛÖ‰Œ«ÿŠþœýõüvüsü‹üü…ü1ü«ûƒûžûüÎüKýðý¹þ:ÿ^ÿÿãþkÿR\6ÕogÙý >Я*VÉeÀ­3† ïïâ:>ÿ5þ‡ýýýdýþÍþ`ÿÁÿ/‰¡ª¬åIüAþ­Çè¤Òð+"°N¿Îf±1êÏ~,ßPEºƒàÿDÿ¢þ1þñýâý³ýPýÃüNü¤ûÏú_ú'ú6úSúfúÅúYû¡û¶û~ûyû²ûûû™ü“ýwþiÿ<äƒÙÔØ³£€Gî(–\•n¥´:8Ï&jÞÂú.Q†ÔíÖR"Ë6™ðÿwÿ_ÿªÿ °ÿÿÞý)ýãüýýáü›üŠüxügü›ü!ý«ýþbþ›þðþ!ÿÿÚþÈþUÿñ×r63ttíÿðþ¨þÛþ]ÿõÿèÿôþcýÙû(û6û’ûâû³ûCûcúCù<ø¯÷š÷â÷gø`ùúÔûÌü-ý4ý†ý9þûþmÿçÿ§Ù÷þþ®ý¢ý þ8ÿZ|y6S½ I«Ïÿ¨ÿ’ÿ¤ÿ½ÿ¾ÿÚÿ|ßLØ“Z*áP˜¾,è˜Ýá‘ P[zÔi¬[8ÿƒþ<þ¢þaÿÍÿÙÿjÿ´þÿýãüÁûÞúIúÝùyù-ùùôø¤øGøï÷‡÷@÷X÷Ë÷ˆø%ùuù-ù3ø÷NöÔõ~õ”õçõlöâöS÷Ê÷ù÷È÷>÷ ÷u÷Zøùàúÿû~üÖü5ý‹ýóýeþ¨þ¢þ þÿ´ÿC™åG³ IåS¦úÿ‰ÿˆÿÍÿ*uFfÿøýoüûúãùmú}û·üîý ÿÁÿ¾ÿhÿaþ6ýüZû÷úøúÕúîûªúxûRùØøùÍøBúûVü.þhÿx˜–‚VjÕ ã2u8¡² ÿÿ‹þiþ§þšþ~þþ ýÎûmúùø2÷éöo÷ ø¾øjù úµú’úðù‰ùžù'úOûzüñý›ÿ0+ÈÜžuÝwR6ã·å‘P8釽ô,Lï%§ÑòãþÐü¤XpøÎǽ‘ÔŒ¦ bþýüOû‚ú.úúYûü°üBýËý;þsþÉþ3ÿxÿkÿÜþ9þ ýñüJü;üìüþ6ÿñÚ`rG,êéŽß}ƒÜí²ÿþ(ý¾üëü—ý‚þDÿ¼ÿ7ÕlùdabPØ"_äÿŸÿOÿ,ÿIÿÜÿò&M:¨Œãø\![È-§Õþ/ýü¸û.üEý´þ)J­Mš+mjNÒ.ÿLþàýþQþ¼þ4ÿ¡ÿÍÿÀÿÈÿTh·À3ï_g¼˜þÑüÚû¥ûñû¥üxýùýøýý;ý=ýÇýãþ$ie_‚RC44Ab¡ý$0pìÂKŒ‹pök³fÎ?GE]צc5–æC·8Õbôœ°áÿDÿVÿßÿL> YÇå˦Äò´;­ÿÿ^þ“ý¶üßû^ûbû¸ûnü1ýÎýþLþ¹þ:ÿ[ÿ?ÿcÿëÿ~é‚xcë# ’ª\Cªÿ„ÿ…ÿ"ÿ¸þêþ¯ÿ¼ÿùþÀþÿRÿuÿ~ÿ#ÿþ*þ^þYþþÓývþÛÿ2A¸ò˜¤¤/RiýýÖÖâPÝÿrÿÜþ*þ•ýkýþØþÿGþYý?ýžý‡ýÔüàûmûiûüýîý*þ¬ý2ý ý¸ý¼þSÿŽÿÜÿwH ÒWbÿWþ¹ýDý±üãûûPúúùËùxúfú"ûRùÐùú…øúKùoùúÞùíùÜúÌú/ûÿû÷ûàüþúþmbšæÇ¤RJ‚TÍ.XÜÿžÿZÿtÿÑÿ\§`Åÿ<ÿ¼þ<þøýžýeýbýŠý+þZÿÉKyQÿþ;ýÓü[ýþ³ÿqâωþÊü”ûáúúù0øg÷uöõõõ–õNö@÷^øšù„úÛú:ûãûËü•ýeþrÿv)Ì–÷·ŽWÀÑøfÛó½µHô{ÅÓ0 „ > [˜Q­&ð1zþÚÌ…èbò­/i\3ÿáþ¦þSþ†ý€üØû]ûÑúéùŒø/÷;öìõiö`÷ø{øÓø|ù`úûRû~ûwûBûUûØû5üìûQûûCûÿûïü&þ´ÿ/d6›4gJæˆ×ñÇ\À:öPHkVÉØ¨=JèsÔQÜ.Çsê“^ÒAXå ÿUþý•ý:þ8ÿÃvñàSºbuÍÍ,óþÅý.ý{ü¼û%û«ú}úJúúúÜù½ùëùú½û4ýsþùþÿ'ÿAÿÿ‘þ+þÞýÒýþØþçÿ(L~l/æ“{ ò‚¶8Oiôþ¸ýýUüüAüÃüdýMþwÿ vkïDª)ø VXñûÈ0+)Ñåv ò r R : ² ; µ  ‡üÅ ÿ W ºËò×yÎÿ_þÂýÖý;þ¯þJÿÐq¥8 ìÿKÿÀþhþhþ™þÿìÿ¡9lCìO‰¥é”} Í å{ ²ÿdýYü]üýUþPÙºtñžyè©ÿ\þ.ýŒükü§ü÷ü5ýnýüýÞþf¡ #÷M 6 ” õ f ¶’OzˆŽÓx!d¬XBX3r n ² 3 ão¯Ä€üþQü÷úøúù'úmú«ùú¹ù™ùvùø÷ ÷Qö7õ ôcò.ò]òò.òÑò"ô/öé÷6ùûÑü¦ý–ý˜üü4üûúÓøKø øùRù=ú+üŸþ?düÈ3 / > j 1 X  D ­ÎÆÿÏÿާm ÷5ö‚¥ÿ¯ü*úÐ÷ñõøôNõö ø¢ù'ûxüfýôý«þ—ÿ{f$V†ùþáþ÷þ½þkþþ-þƒþÿY0röX s  ? ` *  & U’âüJ/…Ìÿýÿ+@@ßÿùþQýâúø§öõ*ôôóxô]õ6ö÷gø1ú‰üÿ-£ èAÿH±×µI…¦ÿâþ\þùý×ýÿýûýµýÊýöýµý4ý?ýþiÿk0¹‘/»b4ÜØ0`µ»ˆXÿÿùþ$ÿ¡ÿN‹DËÿ\ÿ¶þ´ý²üüôû!ü]ü”üwü×û`û?ûëúcúhùuøÔ÷h÷Ñö,ö§õÊõöUö}öÙö[÷Œ÷X÷÷ëöÎö¨ö—öëöž÷øœùæú‰üþLÿõÿêÿeÿ€þ½ý4ý«ü8üüïûüÅüÞýÿ8K˜pMú ¢  ! £ ¢)ÍűBÊQPäΘÜh¾ã§éÿeýƒú¡÷üôŒò¿ð¾ïnï±ïdðCñòÂòZóûó–ôHõöþö(ø„ùÄú¬û<üŠüÈüýAý•ýúýVþ*þoýŒüØûûÂû>üýàýÁþHÿ"ÿRþŸü›úåø|÷röaõˆôCô}ôèôÐõ ÷`øÄù&ûŠüWþ,ß#\‚pÊÈÆÇ¬ªá/›1Zð9ÍÕÄ©€6«µÿtþpýøüþüBýÀý+þqþ!þnýýýÜüßü2ý¤ýþýþüýÐýÎý þ[þfþLþJþYþ¤þóþèþ¢þ,þý£û5úÏø3÷ÚõXõºõBöæö‚÷Õ÷ø&øjø/ø7ømøù²ùÞú_ú©ú‘÷“ø ø1ø×ùóùûürü‘ý‘þìýˆüúúù{øl÷Šö‘ö³ö ÷â÷é÷¸÷]÷óõ(ô|òÓñúò«ôžõ[öË÷vúŽý“ÿfêÞïA÷7˜Pÿ€þ|þoþ«ýÖüŽü-ýþÊýŠüèú¤ù3ùëøeøÚ÷8÷¤öOöNöœöÆöSö•õOõâõªö#÷R÷Ð÷Vø™øtøÉ÷Jö<ôròšñòó5ôóô—õ'öŽöÕö÷èöZö¦õ[õÐõÐöt÷¡÷*÷Ïöãö÷Êööœöc÷×øtúü¨ýãþ ·¶8ÿLþ‚ýìüÄüúü%ýýýýóü­ü ü;ý{þÁÿÂRImáþ-ý–û‹úWúùúÍûeü×üý8þuþ3þsþÿêóÛÃ.£æþÑü ûúÓù#úbúGú÷ùMù6øèööòõeö÷Þ÷ºøAùù]øY÷AöjõþôõÚõêö#ø!ù ù‹ùþø#ø]÷ëöâöy÷”øïùKû\ü$ýüýóþèÿÕBÅ9ˆâBVmEãÀÛNlÓ–o²ÿ ÿ(þ?ýòüFýUý¼ü9û>ù•÷ŠöïõÐõ öáö.ø9ùuùùÉøÔøÙø«ø®ø4ù6úTû6üËüýeüüúvùxøøø{øùÆùú`ûüŸü3ý—ýbý+ý’ý"þþ;þßýàýSþ.ÿÛÿÍâ ¡ÎûÃYŽ—ùÍ^~ §#iµÿSÿ|ÿ«ÿúÿN\Vÿ^þ“ýÛünüÚüþÖÿ5¤v.ÿ±ýõû7ú÷ø5øøø øgøúøêùûþûHüü“ûCû0û7ûPû@û(û2ûGû üýÓÿDbõûy=t›MÔϹe¹¥=g„¯aËÀœÆ‡Tÿ¢ý]üÙûŸûû:ú¯ùÄùPúûÙûZüäü¥ýhþéþ=ÿoÿœÿžÿÉÿ`Wd“·–ç%™>¾!°\‚âá…8ÏT4ØK s ž j ý § Á ã š ’ = é ^¼Ý‰ÑBùІÓÎ;€z[ï‹…‹@þ-Š‚Ãû™™¡øñäêG¬U Î ¤ ÂyH=˯™izçŠû©6/go•ƒÈ/¨…ª_* “¬T~1ììUÎe€žÚ¹RFS¸ýªOjÛѽá_Ñ ê„)Kà2äi˜]Hž"…°]^\eÿ—þ8þ£þÍÏÝ6~òL‹””ÌBJ®h`ÆÎÖ>;™:{”åb 1Çj±•%¶J±aÜéîÄ’A\Ý‹¨Í½p+Ìå:⬠&  u E ~ Z   PâŠâJÅZAаWI×nŸ®LÎCts,bízíɰJ“ÁWè.Goá[Ãtú¿¼¦y†·=×7žú¨ÃÝÑ9náÏyãÝO!²ƒ'š„o 3I+•Ä Óò8Í\®ÐÅÒ ›…W}]ƒ¦Ô1Üy·ÿ½þôýRý½ürü\ü}ü¨üý‘ýþ]þjþ`þjþ þúþ ÿh3’ ‚¥ú„! ˜ |  Þà ¡ à ¹ L—Ý,Tw¹ZyæY“XàIã¡#›ó#Éÿ'ìexz˜ª‰ÜêÿÿTþ¤ýsýµýþlþ°þÿþPÿiÿ[ÿ ÿ‹þ%þáý ý€ýKý1ýFý]ýÙýKþ±þÛþ[ÿÿ´ÿ“ÿÌÿÎÿ6 ÿ‹ 2ëE›»`Ÿr|µê¬óa«¸ý[~ÓåeEaŸ*+¦+pÃz*&dÓl¸-j#ß1Î5~­ùw:5%AŒ,Êà@r‘ÿýþÍþÕþèþâþ—þjþ/þ$þöý”ý3ýýdý!þÔþnÿ¢ÿ2ÿþæýdýýþüýWýtýýÈýþ\þ’þ»þ.ÿñÿ;bižpÒ¸9ƒÂY6¬Vç±¶–à“Ó «k)/Lh“‰wŒ–‡h4^­¤N×/xÖÿrÿCÿ2ÿBÿ”ÿ ”ÇŠI^“¶É¸PpÿŠþBþþíþÿ ÿÿ€ÿèÿRªnêÿ^ÿþÜýíüÇûûêúUûü8üÕû^ûéúZúÍù8ù½ø{ønøù6úkûFü°ü£üÄüqýþóýÝý-þåþËÿqwQ„ô%:00U™°:1TS&R…¨¸ŸåôTQzÿ(ÿÿÛþvþ&þhþÔþðþÛþ»þÍþ7ÿÿwÿòþþXýìüýgý›ýrýöüÅüýŒýÑýýý˜ü2üÐû¬ûrûoûû5üýþ¯þ±þLþ<þþæþÿ¾þ£þçþ’ÿ<=Æÿ[ÿ“ÿ…9[µ¡‚ˆ éNÞ8g³br­gN y – M ¡“nqã_¤±Ï¡¡ZÕÿ;ÿ¨þ@þþÈý0ýhüüDü•üÕü(ý°ý.þZþDþ;þ8þ&þþFþ±þdÿÛÿ¬ÿÿ:þý«üºûPûoû°û¶ûÈûcüÐü[üAû;úµùù›ùÓùpúXûüiüüjüJüoüñü¡ýþåÿŒÏ^3ê©n^]rƒs5 lg%çhºÿ¦þ–ý‘üûú—ùâùû¼ùöúÜùÝú‚ûÊûUüÆüÔü|ýõü<ü¶ü$ý¾ü—üaüžü‹ýòýóýØýbýÐýÊþ^ÿÁÿ‡ÿ¯þØýUýký%þUþþ¨ýýÏüìüVýÜýlþ­þ&ÿCŸŒŒ$UéšèAN«Èøî´–¿jL<¸Zš¾'Δ•‡Bè1<ÿ+þÚü´û÷úÏúbûnüý"ý(ýÎýÉþƒÿ·ÿïÿéÿÿiÿ´ÿ<¦Ÿ_ÿÖþuþPþbþ¥þÿˆÿs¸ìxC¿1‹þùl¬Zx¨´‡D\»Þ¼(4çþyýaüüvü ýýŒüÆûâúøùù’øøÇø]ù}ú¸ûküˆüEüÀû”û©ûæûzüáüý£ýOþÿ«ÿ¥ÿÿJþqýßüjüÐûØúÑù†ùú$û;üàüôümü½ûfû™ûüûüàûEû¢ú¤úAûjüÛýÿò‚jË™ÿþõýóý—þtÿ­ÿlÿœþ¸ýþü‰üüäü.ýdýºýbþÁþ@þMýÇüuüüêû;üÉüfýýJýØülüöûñûSüæü£ý6þ—þûþ=ÿ’ÿ×ÿ8÷îtN©– ÿ`ýü[ûÑú9úúQúóú¥û_üý´ýþ"þoþ¨þcþþÞý2þÿ÷C®˜ÿhÿgÿ…ÿ¯ÿ%IÇÎþàýKý0ý^ýMýÉü,üµûdû>ûûµú?úøùþùKúõú±ûXüÓüpý#þÁþ$ÿÿ”þæý-ý–üdü€üªüïüQýÔýNþÀþ¨þ¾ýYüû6úúùVúKûÐû€û÷útúõù€ùêø}øHøMøQø[ø†øëø7ù[ù±ùœú‹û7ü§üýëý±þ ÿ1ÿ@ÿ9ÿåþÆþñþ2ÿ³ÿüÿ-ma`ÿËþ§þ˜þUþþ þëýŠýýˆü.üöû­û7ûìúû«ûŠü†ýNþÍþÊþ‡þSþvþôþÿ$îÅi¥¿ž}*ûÝÍßve;ÞOz­ì#Zm~O‹~Èè76qxyzwºü I>]¯ŘÿZÿÿIÿ@Â…9Öd™ÿàýýpüxüÏü›ý¶þFÿ#ÿžþµýòü@ü^ûåúûEûNûãúXú#úúûù"ú½úüEþ4c«Yú!ZÉ•‚ÙCQ˜)A@ÐÂ[Zå$ð²{oW‹4Ô¸å öJ(g9|Ðýîuð½v4m×CµÊEž½ÿÆÿÚÿæÿòÿóÿÔÿoÿÿÿãþ·þ­þÇþ‘þîýýAüuûûîúáú&û©ûöûdü+ýûýÆþ.ÿ§ÿ†Êf R@uÿ —¾3ä¿O I ð/þÒ}Gî š  L 3 •  M6Pû*õKí_U ŸXE!žÉľ $ë®Co[ãì˜P#£¼h5û? €ÆÝÿ:=ûõµ'þžßÂ<< ÷À^ÿqþbþ&ÿøÿ†Òôò™¯‚rÆUé|µ}C[™ï`µVj5Hï€\0Ûk¿z [(£ê;Í}PŠ1äo¼Çÿ¯þ¹ýJýeý¬ý®ý”ýuýÓýcþªþ¹þÉþiþÒý•ýþ°þóþµþuþqþÄþ9ÿ}ÿ§ÿÀÿrÿàþ`þ*þþŠýü[û+úùò÷®ö™õõOõ3ö3÷øžøûøMùîùxú û¥ûëûóûóûOüýÜýYþ#ÿŸzC¾¸9PDe¢ï=ëø Ä  ­ ž 6¶ƒÑi°¹±Ÿ9õÿîÿ0ê·^ ƒ.·bšLÓ\»¨ 5Wƒ¦Ò“v˜›ÿÿŠþ:þþãýGý¢ü[û§ûêú÷ûÁü>üþƒýþXýÎü×ü>ýPýxþÿ¨ÿwLÔÿÿ¥þþûý6þÿl¨Dþ /1ÍÿzTî_F8XµN›l4¼0ÖL‚ÔzJä¾Jœÿûþ<þœý9ýHýUýhýšýiýýåü6ý§ýÑýþCþcþ-þáý‡ý ý¿üjü0üüüüøû ûbûÂû^üÓü–üüÂûüYü‹üºüý<ýþüEügûèúú;úçùùù]úúûú†û:ü³üý‚ýþ¶þšþaþ“þ‹þØýÉü>ü”üLý¬ýsýiý7þÿ‰ÿ´ÿèÿUƒ ºÿ+ÿ®þ~þ°þjÿEÒ¶ ÿæýý0ýþ,ÿ ÖBeŠaKÿÉþÿ£ÿEä58©ìÿÿZþþiÿ×ÅsL&­ÿyÿóÿÑÖaK>Õp¥lµÖ^ÆØø’§ÿ¥ÿkµµÿ :-ƒDUü¯Â$¢8ÆÉ^ïàQö²&&»}¾ç->"ñ²Vóù{©ÂÜ~_Ûƒ+ßÿ”ÿ‡ÿŽÿPÿªþ|ý^üÄûÓûNü¡üpüêû?ûÃú‹úßú2ûÚúRú+ú†ú;ûÂû©ûûÇû[ü£ü‡ü‚ûnúÇùUù\ùÖù_úÊúçúùúGû˜û³û›ûHûíú%ûêû£ü“üèû0ûúúlû)üfý²þjÿ¬ÿ¡ÿ«ÿæÿ/`—AÝÎSò¾ לÊ04azÿ}þîýøý®þÿ¼ÿÿÿwþëýzýbý¤ý¹ýRýØüöüjý¼ý—ýuýþUÿÕº«À†ÿ¯þqþŒþÚþ@ÿ ÿùÿlÆÿ#þ/ý"ýýþNþGþÚýzýhýlývý ýCüËûIüÄýAÿøÿH¢<ܘ3rXͿǡ@ÍåìèxVN€ë™ôO#Ú™@ÿ¿%ÿ¾ÿ©þµýŒý×ýªýQÿÀÿàÿgG™ÿOÿþüüYüuû‰ûüÀýÌþ­þ‡ýòüýýñü+ü?ûûöúëúûÍúmúpú•ú$û–ûsûîúéùæø_ø]ø÷øæùQú/úäù§ù¡ùsùø•÷þöÌöD÷–÷ð÷¬øDùÃùWúaû†ü.ý ýý]ýDþîþ7ÿÿÿ¡ÿäk´;¨o–Øë2½„|kÖ>ùÈ 4îþþÄý®ý°ý~ýý‹üüÍûuûÙúSúæù¦ùÄù ú8úôùÚøW÷åõïôËô0õÅõ™öŽ÷jøWùúlúúÓøƒ÷Óö¼ö)÷Û÷ù¯úü ýóý¦þWÿýÿ“V‰1°¸v×ìäåu š L O â A : ë Æ j s R Ý Ø 2 [ U Ÿ “ z êð"_T½§…":8¥aœÿ:ÿƒþûü©û†ûñû`ü¥üÜüTýßý*þöýEýOü8ûú¥ùßùNúzúZúúÐùùFøö÷ø8øcøòøÏùû}üþšÿ\ ¡Q‚ _    Þ K 2 Û — ° ö ê  × Õ v é¿­L•?]…ÿ)þ|üýúôùCùæø5ù<úsûƒü:ýÜýUþÎþ%ÿƒÿÝÿ/i\òÿFÿ¦þþÈýÎý"þtþ½þ¶þËþÉþ_þ±ýòü`üüªûûúúÑùÍùú­úUû>üqý¸þÓÿËš(†Þp ˜&Åœš•> ° Û « A ®&ÙÆ0 ¾ ã ‰ ­·’œnõjÿEþ€ýÙüü®ûÃû2üîüÔýÿ¡ÿ-è% .©J·í.2ãRòñÀJ¤r¶8Çÿ§ÿ!:º¸Úþ Œ ´ æ™É‰ð-J+å³oý-LŽ § € z D ¤ ã Û Œ±vl’)ÿÿ“þÌÿ,Žÿ>ãNÞÿÔr>)˜Áÿ>ýÈý|þ þñügüêý†ÿqx6,µ4†A00ta{òÜ8æþ\ý¼üÜüý:ýºüTüÞü™þ×Ðð°ÿCýLýŽþÚþ¨ývüü~ûÂù÷@õõQöëø1üEÿ}²S}ÌþàþÎÛÔÜW˜ÛÊþÉüjý·þDÿÿAÿ¬ÿÆÿ_ÿÿþþfþ¼üðú«ú«ûÎü(ýFüvûûûþ³?“\Ö½Ä Ë  ‡ ¨ û 9 ù5<‡ëÿÑþäýôü_ü£ü‚ý^þ¥þëýýéüþâÈmAŠîõ¬ ^ å „ n S » ­ #i ç ï Öy'èÿ`ÿpÿÀÿ•ÿúþYþþþÖýÔý´þV¡w’;U~Q+…®¨ý - q n ð / æ G>NaÇ=¢’) þ™üOúíøø>øø½÷Ë÷â÷Ð÷u÷O÷Û÷Iù6ûMý ÿ ÌhÔÊ]}3Yÿ¶ýµüü#ûÓùøRöËôîóþó¾ôïõ÷!ø{ùëú¤ûkûÈúû·ü£þðÿ• ºÏ0±½Xü¾ï ¼ : GéB ƒ½ÿ&þÅüÂú5øËõ0ô÷òšñ¬ðñˆò ôÙô“ôLôÈôìõ÷ ø¶øLùéù´úÕûÊüý¬ü<ü=üÄü“ý¡þ@ˆqó ì—0[î›òã±±bÿÚý»ü[üžü[ýÈþ°gu+þzçþÄýKüDûgýøÃï Ø & U` ¡›­ IAýü¹ø8÷—÷#ù„û·ýÃþë3U $þpøIõ;ôyôÖõ{úÞÿÕÙä"¸ÿQûtû…ýÎûÎöúñ®îîê èÍç˜é ëšëæêñè‘æ2åçãŒâná\á¾âºæ„íõ®úTþwVdO œ ² +ò±ç£$8 ûÂðÑa t¼q ‡ ìCpÿ¤ÿÌÐ{ æ ï"/. M †œ   % ï Œ”™þ™øÉó±ïŽì˜éŽæ)åIåæÃæ{æpåläÄãyäeæœèEê¦ëwìììeíSîQðHóVöWùü˜þ:”ûÌüNú·ø®÷Ööeö/öÁõ,õõêôUô·ó‰óGô€õböÝ÷zùWúÚúýxO 0¥Ð°°¾$ZaÕ%"õ&˜'¨"’b OrÿrûÉú üþüþ|üÓõvî-ê‚éHé¾èíèëwîúðŠñ\ðOîŽìïëdíJï¼ï¦îÓíÁíî<ïBñŒò_ò”ñÑñóìô)÷fùñù ø÷þö|÷Òöõ“óîò{ò½ñpð(ïï€ðÅóÆø6þÆÚÏHP=c ¯ ¦TÃV ðHÂæ; ¾ ¥& á aHBþýÿÖ‘Ë3þø$óÓðÿïèð ôçøºý’ao¥}ý'ü©ý¿§ÃfˆôýºüæüþÞÿ<Æúp”ù½Òÿ‚üúkøœ÷½÷¼øÜù7ú„ùøŸöÿõØöøéùmúàú‰û¤ûoúæø‡ø›ù²ûøý§Ý ¥N'ÿ)üðùøøùºú¡ûˆúk÷5ó ï†ëpéé§é´êì îBðò=óQôsõ÷OùiûFýÆÿ…pè›ìº_þ€û3úšù¡ù‚úyüSÿ¸E¦>ýÌù÷ìö_øûžÿb$#~ëËPòl ²5‡»¨ÌºìgÍ ± ( ¥ ´ ]£ñpþuúêö-ôÓòNóÍõù…û4üŠú÷4ó’ððYñYóhõûöõ÷Kø øh÷•ö>ö÷ùøÌû›þ\´ÿ½þËýÍüÛû&ûèú6ûÆûlüýÑý3þŠþÏÿØb  :  § n„´„YQu¤ÐB3ÍÛ Í ÙËSk¸þÎü¦û„ûÁûüû üûÙúú‰ùÎùôú ü¥þŠÿ ÍÐ!ˆfEà  éF½Ïá¯Mþ"û"ø¾õÒó òMññXðªï ïïPïÃîJîœînïæðÌòôÅôõôôØõ…÷zøMø±÷Ñ÷\ùúúÄûûûªûûÿúû£ú~ùlø2øÿ÷ìöÇõ`õ©õŽõ‘ôtóZóÜô»÷åú“üsü=ü„ýPk}‘ô<¼€ÉEu_Û±ÿ³üsû©ûªü¥ýâýGýºügýºþÿ'þtý]þ ~P•<a(}A['÷8îÿ%ÿ þoüïú‰ù°÷Oõó ò,ò#òòñòÒòšó¤óòò-òÒñÀò$õøøúKý:ÿØçšçèŽ(ƒ –S4þþVÿ•BûÈ«r–ú .H+ K æDÛø *s“ð« =‚Ì ˆ °€PÆÿýFúËöaôDó¤ò.ñ{ï„îuîtîäíãì\ì”ìðìðì+íÌíÓî¦ï’ï©î÷íãí¥î ðbñ›òÞóÏôÀôšóìñ8ð¹î_íùëLëjëìiìMììOìcíÒîÿïïðÐñãò:ô_õEöJ÷ñø¥û)ÿ w 0 `µž{hR£`,Ë·Y¢x‡ D ­òîÿBþý'üäûÝûüØû¼ûü‡üýlý®ýàý¿ýˆý«ýþþßý$þQþþ<ý·ûú øõõôuòéðSï«íæëê«èÅççëç\è›èµèé êkë íïÎñŒõú­þé(œV | ã Ì Þ˜6¶Í Ñ 3 l Ä 9 s Åq@²—ëúŒK ¡ Ê ¨ —_"pôü=z  Ñ mŠ;í¹ÿŸþ ý^ü½úûø÷]ö‹õ$õçôˆô+ôáó ó]óèòaò4ò ò9òæòøóõ³õdöÚ÷rùuúùúûrúáùÚùþúØükþ ÿ4ÿœÿg2ëÿØ(eʰ°!m ¼ ² 5z’z£ £î ¸ û ˜ B¢ z K Ö¿þürúaùFùœù€úçú«ùWø¸øýú“ý}þDþEþÆþeÿÞÿõÿÙÿud‘  g D胵Äÿ ÿùþÝþ‡þ'ý¬úø÷ßøŒû•ü¯ûXúÃù¦ùNùÐø]ø«÷n÷eøú'ûÆú²ù*ùŠùäú/ýÿ¨ÿ’ÿ 8¿*L°Öþ«ý»ý×ýÄý0ý\üÔû·û¾û¬û}û‚ûü’ýÒÿ“‘®kÕŸº °ëÔ~hm1"ªó¢6i ù„ò·dîÿËý¶û ùý÷ìöDöTöE÷°øú·úxûýMÿBžsò>õP ¥ ~ ³ q ê x ϸdþVüTûgúXùHø÷võ5óvð¦í·êVèTç°çÓè"êQë4ìí*îqïÙðzòuô}ö£øhû"þ8ÿþ™üLý ÿÏ™ñgZþ¹ºžK† ¹2+ S - ª=aN 0 ‰ € ² í µo 9 Û @ ÙœšÁ«w9ÿIþûýôü²úøØõ”ô ô>ôiôÎóåòŠò’òäò×òÈñ•ïyì÷éAéÙéÌê?ìWîåð&óbôoôÓóˆóQôzö‡ùÀü ÿ‚ÿÔþUýrûŠú1û+ýçþÿqþƒý¢üeüÉüýÅþW–é-‹¦­ÖÅÏ Ý Ï D Ù / šÍ5µw Ñ ²   è K›0þ=û^ùÃø¯øwø²÷åöFö.ö÷ö|øQúËû™üý_ý¦ýúý[þéþ¶ÿ±U!öÿ„þ©ý“ýËý®ýšü£ú‡øõööõõ»ôØôõXö{öoõô‰ó/ô=õ9ö\÷åøíúý:ÿ9ÍœRk‹G€°îòý©û…û»ü þµÿ˜ „R[Nüôø«ö·õÑõ_öÚög÷)øø?øÅ÷f÷x÷LøúBüçý©þÉþñþ)ÿÊþæýý,ýïývÿ{Åäa$åïzHî‘XẠè©ì& è Í 5 b €Ü~ U » R ƒ ò Å"Åþgw˜îV¡þºüü’üÐý7ÿDkÿôü÷ú ù1ù–ùúüÏýÿêÿeÚÇücÖ = d °D·ëÿ¸ÿìÿ9ÿþ=ýýfý7þ?ÿEGWi_1±ÖÄÅìh( é ô ¡ 5 é ¯8ê…î¥iË-Íþ–ü#ûèúÉûLýÿœì¹ $^ÿBÿ¥ÿ_DåüæÎÇæÓä¼ÿ¬þ”ýsüMûdúíù úáúü ýªýÖýóýFþþïþeÿýÿý,<Ùí¦¤à¾èžä©gd(“U¾`ˆöγ/ê¥ ÿ3þ!þ2þTþ[þtþÄþ"ÿpÿëÿÔ×Í`Øv%bDúÑ8»êßyZÉÈþJÆLí›)xc³uލ†¤Ö oË*2Ù!aSä¸Z T ×BIvA½Í©¸VÐ6¤ÿ¥þzþÝþ9ÿ‚ÿÿðÿ øÿHÿ±þÚþfÿPLúÿ&ÿ þüþÖÿ…mE›D™ƒûÿÛþÿ‡¥€¤ËäÌJ£:ÿlþþ²þ*NSp=ÿbþ,þ†þBÿºÿ±ÿ4ÿ¡þ þ5ýýûŽúùø×÷røùù‰øøŠøþùÌûžýoÿÏ›·²ë ÉfH¸ÉÒa^Õ‘®Í—X~Y8ÿ\þ þ.þÉþ‰ÿ>©€éÿÿ™þfþòþ$^™¨g®póÓ1±»ˆU¹Î6lçåO‰®Ãÿ”þVýeüüüˆüý¸ý;þnþþéþ~ÿ–ÿtÿ•ÿL鈛]þ‡ÿ·ÿ"Y€À¾^ÿqþˆýDýý’üŸüüÊünþIÿoî9,võ5¤vDh æÕ£HBn¼f&  [ê‘OòV¾b:)ñ±È±•%U;Ç@¦ÏÚxfc%h,Žú³r ?¡‘é‰XBÈ5ƒ‚AHÅX’|Æ#¡†ôÒ ½ T r ã Ù ¸¾ŽØ¾&?>#埼hÀÕBfåz ä & å ÿ 1 ”Û,Ý - †HÜcoËT ›ã±w_ÿ‰ÿ*ž¡‹tÇ3¡Ÿ~µ"0eÕ„ž½’تRÓ+'ŽÿaÿqÿRHTéÕ»¢‡–> å Ð ¾ Ò Ó ¦  Æ J ¥ % Ÿ ¯ ê ’ _ ™Õ0 A ƒ ¬ b Awôw%/WÝk˜×cÿiþ þ…þƒÿ­®1wÌ8/x”Ì N¬5KNÍ—¶º  w U & t ´ Ñ U  ­ §Î yË‹ƒs,Ê¢ßØ[2 í » ˆ P ³    ° ù Ð „ ß DÆÁß 6 ¬  ÒK&¤Çÿ þgýüôû`ûûû¯û¦ümýšýiýýÜü!ý»ýÃþ,±C‰GŠƒcw~:Îÿ2ŽÛLçÿ›ÿEÿøþmþ«ý ýý•ý!þ·þ@ÿ§ÿA^ÆhÿÛýÚü üöüˆýþMþŽþÒþ>ÿ_ÿ&ÿõþÿlÿvÿ/ÿÜþSþý˜üüÝû©ûaûTûîûèü´ý(þGþþ°ýhý@ýnýÄýþEþóýmýýÀü{ü”üÝüZýÑý!þ`þ™þ›ý!ÿÖüèý ýæüâü\üü£ü$ürüšüEü†ü?ý®ýÙþpÿbÿ«ÿÊÿ» jäÔÒ·Ž)#¬¨þÖýFý±üü$û6úFù‹ø‡øùVù|ùFù×øpøù÷›÷ ÷É÷Hø}ùû³ü©ýÑýªýYý®üü±ûôû üOýÆý(þ4þÖý0ýÎüºü½ü®ü³üèü*ýFýýü{ûú—øÅ÷·÷0øÙø¨ù¨ú¸û|üÙüçüžü üSû¦útú£ú×úÛú]úKù%øM÷Ìökö&öLöáöÚ÷ù¢ùœùpùù úåú§û-üIüÙû*ûÓúÔúøúÐúoúQú´úiûƒüàý%ÿ0§¥€<ˆÿ‚þýýÍü¦ühü,üüüÙû‹ûýúŠúúÝùÙùú:ú1ú!úúãù™ù(ùæø×øóøCùÊùˆú(û`ûûãú#ûÔûüTý þõþuÿ}ÿdÿyÿ°ÿËÿ"І©$— Aÿ=þŽý»ýŸþÃÿƒ‘,Lÿþ8ýÉüÄüÚüÙüºüOüÑûMû û4û³û›ü±ýãþ±ÿ¸ÿ ÿßýÁüüÌûüüóüÈü0üWû¨úKú3úWúûáû€üíü ýÛü‚ü×ûbûqûÆûYü ý˜ýúýþ}ý4ýsý9þÿ¦ÿ…uâ´<æ¼§ÛTžpÐLÿÏþ›þ¥þÃþÌþîþÿHÿÿ³þ6þwýíü­üYüÞûdûôútúóù£ù¦ù ù…ùDùõøÂø¡ø¯øXù¯úüøürýÆýþCþPþTþþŽýúü<ü§ûkûsû’ûþû­üƒýþGþ2þíý´ýµý×ý þJþXþ‹þ—þRþ›ýæüªü’ü”üäü¨ýwþÓþžþÏýµüÿû¼ûüóü:þ³ÿØÜ…%éåçäž½ÿšÿ¨ÿÜÿ>Þˆä³VæF·ÿAÿÿ:ÿ€ÿrÿÏþ7þÌýxý5ýÂüKüõûêû6üü×üý4ý[ýhýTýý¢üöû@û©úTúTúÒú÷ûTý@þÌþ?ÿÿÂÿèÿDÆö|ŠáîÿaÿßþNÿ‰ÿÖ«þ2l&²ÿÜþþWý°ü:üû¥úXúEùÜøAøo÷š÷i÷ÿö!÷ùöÙöåöªöÓö[÷¶÷žø½ù-ú=ú®ùäøvøâ÷÷Ñöãö”÷Ûø-úšû¿üKý¨ýüý;þpþFþÁý:ýmü³ûMû4û~ûàû.üsüDü»ûvûû#üýáý-þCþOþsþ¼þêþÿÿõþÿMÿhÿùþáýÉüüöûüÑûjû/ûûû&ûiûŸûVûXúYùÐø©øÂøßø÷øùIùµùúAúVú¡úzûÁü1þIÿ¹ÿSÿ:þü ûÄù&ù5ù¶ù~úPûÒûÖûcû¢úðùøùÒúJü¯ýþ·þ‰þ^þ!þ þ1þƒþÄþÍþZþ–ý›ü›û“úÌùsù“ùýùZú¦ú û‹û üZü—ü¡ü–üiüeüÀü%ý|ý¶ýçýþcþ¤þþQþNþÔþÔÿíôëPÇslÿkýžû3ú–ùàù¨ú—ûü¢û¾ú¹ù«øøÐ÷+øúøíùßú£ûü€üÛüþüŸü7ü«ûÓúìùù-øK÷³övö’öîö7÷j÷f÷.÷ÁöŒöwöžöéö^÷%øGù·úØûaü‘üÆüýtýþ ÿýÇqì ºNÀìfÿòþþªþ ÿ„ÿÖÿŸÿ×þÔýÝüBüüôûÒû¸û·ûéûdü ýêýþ)ÿyÿáÿC¯ùÄynÇ‹œŽ¦´«\îc³éÿoÿÿÓþ¤þ¿þ®þ9þvýöüâü ý+ýÐü`ü#üüùû™ûjûßûîüþQÿ|"CÔSøÜ(GѬ ¤¿¼_Ï×ÁáiO-‡Ôös?ÝÓÿpÿ'ÿ[þ¦ýlýšý–ýDý÷üíü(ýæýâþºÿÔÿ7ÿ¬þDþþrþ`ÿµ$h™µWƒ|)8£0°èk„‡VR÷wÃt⮣›–ñ2ÁÏ ¯½OgO†yGS5”È<…ZXÑþ¿<],>ò„oÅ´G4¨éåÇ‹?eå‘—Yk›Õ‰•Îw¾¼™-åZ鸤Lê)ßÃˈ4A _mFüÁžÿöþÎþÿ¤ÿpO¦î Ä^À¥¨¿QcB¶Ì‹s÷+»{5ÍëçÃÿ*芾šbš­QQ´¡ ™Äó2¥7Éf½9X}6f…i*Ô6Hÿrþûý¶ýŽýTý+ýýýUýõý®þPÿìÿñò’&øÿ×ÿŠÿ~ÿoÿ$ÿßþÿþ’ÿ€£œ_¨g÷AUh‚ÿÜþ›þªþ¯þþ ý7üìû·ûgûûÑúµú¬ú¨úÇúûûèû;ü|üäüƒýÿýUþ~þ¼þ;ÿ¤ÿŠ#ÖežYÈéôÿRÿÿûþþþ ÿôþ‹þÎýý»üšü³ü¾üäüGý½ý,þ~þÿþÐÿw°¦ƒ~ƒ€¡í+<E®ñ¢Q^9ÿIþtý“üwûiú_ùsøz÷öÇõ\õ"õLõõ¶õÿõfö"÷aøçùfûžüyýYþ+ÿÞÿµÿÿãþáþÿQÿñ£@¬mþÒüSûúÝøÇ÷çöö,õ ôäò"òòñ0ò óZôöÝ÷ÏùÄû°ýÿ7$óÜÝݰ‹4I—m>¾]:ÿOþxý•ü£ûZúøeöZôµò¥ñóðaðõïËïøïCð±ðJñòóaôÇõ)÷søzù<úíúûIüBý7þÿþ|ÿuÿ>ÿÿñþÇþrþýý‰ýôüJü—ûçúWúßùwù5ù4ùbù²ù7ú½ú0û§ûMüÜüSý¸ýeþQÿp[ýZÄ/s™’Cà•Tô.ƒöÿÙÿ‰ÿ*ÿÁþþ/ýüaüjüdü\üùû¥ûûxü§ý„ÿtIµ_¹ùfç„É®¢ {_Ë­9ÿ¼þžý±üGü„û+ûû_úìù°ùYùù¹ù­ù-ú·ú3ûéûzüéü¥ý6þéþ”ÿ¢ÿjÿ*ÿÛþßþâþ þ©þœþ–þlþ÷ý“ý+ýLüûßù0ùÈø«øøÐøYù%ú!ûFüšýÚþÞÿÁö?“Å©Gûð÷ švy4vó$tÛ˜y²á9I–Ð Ctÿ5ÿnÿšÿ˜ÿ¬ÿÝÿ"Œø("ìÓùPÆõ3wÿcý–ûOú®ù­ùJúEûKüBýëýþßýnýGý½ýÀþ@ëí˳û “) ` á ˆ í z  Ù"îç€S®Ä§¨zຓœ‰° ´ A j  d i â‰PÙ+×ÕpÿÏý5üû©ú¦úßú0û©û.üü“û…ûêû›ü¼ýüþIÖRfï^âzÊÑÎÃi{ Kgÿ·þ¥þîþ'ÿÿÚþ¨þŸþÿÅÿˆc›¨-™¡‹@µ:Á f¸ÿWÿUÿ<ÿ(ÿÞþ(þ!ý'ü©ûmûkûwû^û&ûúúû4û#ûjûüúü þàþ£ÿ!|ã)T›ß/.€wˆþRý„ü†ü ý ýÊý™ýôü8üYûúâùÌùEúûÿû:ü4ü¤ûsú1ùŒø›øîø{ùú:üwý×ý£ýYý;ýZýÞý­þºÿðÇ0r­èþA ]  yèW°D*Yg¨9N|þÝüüTüvý]þÔþ ÿÿLÿ¾ÿ9œ8ø'¤Òw‘–Þ"•¿,"ÿbý:üPûzúÓùçùfú›úpú¤ùjøB÷döÅõõ õáõaöE÷žø;úÆû+ý™þÊÿ®ˆkP0ë›ñ›9+7]ñqÿýýªüHûÿù¯øø_øÊø£únû~ýÍþþýtÿbþ^ÿ¼ÿ €MYwvMé % P 1 G  ç5¹Z6þUüûýùýø$ø÷V÷|÷X÷V÷á÷ÑøCúFü§þ4òØy!Õyö£ D  ÑOè¤Z¹ä÷²)ÿ ýGüHû¦ú¼úqûGü$ý&þ.ÿ‚…Û“FG]R_±âžÞîÿEÿÍþ þøüÓûøú?ú«ùqù¢ùúüúüý#þ¼þ÷þ ÿOÿyÿLÿKÿ9w¦üeq¶lE2ó²«ü2ò«y…±õÚà Ûíï—AÈ}_W%OuíO2ËiÊŽwRØè€N›7Óÿbÿwÿk„Zîÿ ÿžýVü‹û ûˆúúãùèùFúQûý)ÿ:ïV»wïä’Yˈš!ÒÑ-•H/–D´¤AÞîs<Ôb £ à + ì,¨>®ôåù(ÀþýÞüUüþû;üýûý¼þ#ÿKÿ¼ÿR¥lñÿÓÿH íç°(&þÈ?[_yàÿRÿ þšý¯üÉûKûû~ûIüØüýQýxýÅýæý|þ–ÿúM¹w>ƒð´iüÅØ)…$`¤%ßÿþþ£þÄþýþ'ÿMÿ‡ÿžÿyÿRÿ¢ÿöÿûÿMUæ{2Æ ä L . ³ þ  ;¨W&ÿë”ՃݑX1ÿ þîüæûÃúcùøôörööèöã÷Gùú)û,ûžú1úöùú­úšû[ü÷ü”ý/þþaþþõý2þ_þŽþ›þoþæýýBüŽûðúpúú˜ùMù(ùþø©ø>øú÷ø*ø¦ø©ùòú&üýÞýÃþ¢ÿ„]&÷Þ½.‘¸_Ãÿïá°· ÷ÎXÿúþ;ý‘üƒù™ûÿùIúFúùÀùÜùùÒùFúÍú@ü•ý•þEÚß·Ïÿúþ…þ¶ýcý{ýNý—ýðýÓýÀýêüAûÆù8øØöEöäõ¸õ¼õŸõÆõãõÛõötö ÷ú÷ù-ú–ûýFþGÿgÊTšËò™¦+’>:…Ê3Ÿ´Q\ï>¡8ÿ6þ·ýsýý»üHü™ûÝú*úÓù'ú(ûrüþ“ÿŠ´®µÎ‹Ÿ$Ʋó!.òã-oTÜ1t•ÿKþ¿ü[û²úûµûüQüÉüXýÆý0þÀþVÿ¿ÿi~:[ÆÁìaáÓš¢ÒÅ÷shý3¬Ñ®‡Sk«îKV÷ÿy¯!¿—Á – ? «Ú(]Iã6­giùf×±ÿ™þkýhüÙûíûŠüLý'þEÿÎQ[“Ѝÿü³‰´e"2Õ˜ò«×Wò+ÿÒþXsI= gi.£³Š›s™_Ú±ž+V˧ì* ß  o ÖèÊ߼ХY’‚š<X,)Î C ë  ý L Ì =   z : |B5Nç?‡2 & ð · »LèX ‘ ™´ ó¶jžo«Áy| w `Òô^Á)‡— g + Ç ( „   ÷ë;oêÐü¨Úì¨&Hv{©T l qmc©¹== w  k ó ß Ç ÷ :  –Ìÿ÷žsEo= $ yGî ‰ ' { ; ‹ V‚d`U¤¦Å½µzü æ Ïö+¬W=Œ°ÿ˜þ|ý†üñûSûÌúåúžû±üCþ©ícôAA¾2Ÿ~ x!Š|°?õL(AöBõ2™Ö½ÚŠç8EWgËñ m ì W …  ½ ÿÌ$ÑÄþ4ýÄûÊúú†úOúØùâø÷ïõ‚ôÁóÿó@õÕö+ø'ùHú7ûõûIü.ü:üRüÃüÊý ÿ*¦§ÅmNù>î&]”E“·jv©(µÖÿnÌw}Åãu©ô€í€*ÿZþ!þúý~ýÊüìûHûû ûûFûzûÁûRüEý%þ-þEýüKû:ûžû@ü2ýhþ{ÉÅŽÿñþ#ÿÓÿZ$Pÿ£þuþîþšÿÈÿÂÿøÿ_$¶m{¦ÿdÿ¬ÿ:½bëë¼ç‰‘:KfÅS¢DMÿ«þPþþ¶ýüGûrúüùùJù‘ùwúƒûcüªü¯üåüNýÔýTþéþ.ZÅ7‘ýÍú§ø)÷SöñõÂõÃõïõ6öˆödöëõuõ‰õíõÑõõÞóóÛòáò8óBôöcøÝú”ýC¤R7—Ї8U òJ¿yBÿÿÂþøýþàþÒÿóÿ ÿ’ýüûGúGùÉ÷jöNõ<ô5ó òañõðèð±ñBóiõ–÷ƒùIû»ü¨ýßýhý¢üôûSû…ú+ú6úiúúmú[úÚúYûpûû³ú˜úçúmûÛûÿûßûäû7üÙü?ýýtüü´û0û‰úéùßùfúûåû%ýoþCÿ[ÿÿçþÿVÿñÿ„ÌïÖúÿ-þÞûåù³ø”÷Pö=õÛôGõêõwöX÷úøqûþE}ä  e DÜäßþHýü@ûú¶ùsùÄù&ú]ú‰úáú2ûƒûžûfûèúkúúªù(ù²ø¤øùÇùÉúüIýšþu·N  "  vGŸ þÙüpüšüñü4ýUý ýÊüý×ýÿ/ï¹]TVœÿµý"ü•úYùfø"øø øBù8ú”ûŠý’ÿâÊ­Âi;g ÿ#ý<ý´üü‘û©ú±ù‰ù¿øqøÈø?ù[úü ýÊýÙýýØûú&øåöRö¡öø—ùßúüíüUýìü»ûbú4ù ø&÷÷é÷yùïúÿûõü±ý þ¾ýÐütûúÆøî÷Í÷ê÷ø'øIøAùÉúwüøýgÿaÑðÎ…?3ƒÛ²Ð\ÿ”ýŸû¼ùKø]÷úöG÷Vø’ù¸úfûÊûßûûÏùfø$÷*ökõ(õõ…öŠ÷§ø¼ùŸú'ûTûJûDû*ûàú}úúÏù²ù©ùù•ù¶ùËùœù…ùÜùDúzú¢ú¥úÜúðúÆú‘ú;úúMúáúéû_ý·þ¬ÿ¨ÿ.þÅûùÌöõÀó6ógó ô õö3÷–øÄùæúüðü]ýëüÎû˜úsùLøw÷f÷#ø|ùû¬üþÿÚÿŽ$¾_ÅôØav6þYüúùŒ÷ö£ôoóeò­ñXñ5ñ|ñíñ;ò‹òêòdóìógôÇôœõs÷ù)ûâû û­ú}ù¶øøäøŒù`ú^ûEüßüÎü¼ûúÚøø½÷÷Oöqõ ô©óóõòEóùó)õßöhùìû=þE¥y; ÜáAÔ$ª0Ìþûý«ýºýâý þÚýzýÐüîûû‚ú7úüùù ùÇøjø¨÷+÷Q÷°÷ý÷8ø¿øÜù\ûýáþ}Ǘ㺳Iˆþ¤ü¡ú÷øã÷ ÷ö1õ„ôàóôòEòçñòŠòó.óìò8òãð‡ï®îmîï„ð/ò´óÐô¯õ*ö ö%ö„ö%÷Ñ÷ºøÝùû;üýêüüûçúIû~ûTûÐúÇù\øÇö+õ·óÓò°òýòcó*ôõžõØõö×öøbù¹ú6üý°þbÿH’ °Èኊ©E& íuG×üú^øq÷ ö£õUõIöÒ÷ù´ù¤ùùúcû¯üƒý#þÿ*Ñ1ý1ñu9b[€þIûâ÷“õ†ô8ôÁóêò@òGò!óUôõõ ôô1ô©ôÕõb÷×øìù¸ú‡û¿ü¶ýZÿ£þeUB‰|DP³Ðªxù” YÆÎ‰ƒ¿ýÒ ¾¬ þ È ã õ † ò I ^Ö¤çKV ¨QK" ÿbþóýßýçýþªþHÿ¦²ªÁGK:tHòˆcð_ÈÁ  ÿþêü+üöûühüUý¬þ²ÿÿÿÏÿ‚ÿÿ¡þ@þ þ6þ]þ¼þÿÿ½þBþØý‰ý†ýõýðþ#ÉŠA¨†õKfWPço°7£N|8éI%tWÛeÿ€þªý^ýYý}ýÀýÏýäý þþZþÑþuÿûÿwGŽÿ—þâý÷ýªþšÿ—¤³\`ÌNyŸ™:X ûÿ>ÿ±þŒþ¶þdÿ5ùÿÿ)ÿÕþåþ‘ÿ†âÐ×4Ï×ÿÿlþþÊý‹ý’ýïýwþ.ÿ?t;ºí-â%PÜ¢}#”j2¬ÊåT 9%Ëþ—ýêüµü—ü§ü¯üßü:ýFýýlüßû¼ûürüýý&þØþIÿ¹ÿùÿëÿ®ÿ*ÿ¤þþ™þºþºþ•þ’þÛþlÿdaIÚÈžîRÍUâQ7IèRï[uÿTþþü½ûÛú_úBú.úáùŸùdùAù ùÈø·øòøBù§ùLúûªûfürý°þóÿö³(;=î8¶1ÿOþ›ýáü!ü†û7ûTû£ûü}ü¿ü§üuü[üGüVü³üýZýýùýºþqÿõÿMW+"pÊ4¥ ˜VÆþQýü3ûÈú›ú¦úÖúùúûûÐúUúú‰úÎûxýÿ)Ÿj‹ÿ@þýsüIüüLýFþãþöþŠþÕýáüÀûúµùÕù‚ú*ûrûJûûúŽù[øp÷ùö÷A÷r÷‹÷è÷Føùùùù^úÈú¹û!üºûhÿpþ¥ÿ×þêý‹ýŽý÷üüýUþ¬þ‚ÿŽÿÊþþ—ü¬û{ûCûûüÊûSüêübütûúûø¦ø”øüøÅùúkúÕúJû"üýÕýzþ"ÿôÿÎ!ÒKÒÿjÿìþ(þþÊþ·ÿ-hz9~ÿþ6þAþgþ<þ™ýü´ûÿúeú-úuúvû¢üqýÖý þ<þPþxþåþdÿèÿBsŸ¨Ñ$y™RÆ6¾ÿ¤ÿâ²ðþö-ÔžPI®óÛYÚÿåþþ”þëþ=ÿpÿgÿ/ÿÐþ’þþ#ÿO£Ñ|Õ»]ÿ÷ýýü‡üyüZüWüküü ü9ýþÎþWÿÛÿdµ¡a íÿ«\Â…ãf"×ÿ˜ÿŒÿÛÿf7žbãÎ +ë­†Ýw „¸ oZɹ f è ² x Ó ‡ Ç x ;ÝþUþþ¸ý}ý ý•ýiý[ývý þðþõÿÉ’ -îªÞ¯Ñ×VóÔq:;4z®Y=ë®ÿXþ|ýºüüÂûüÔüþ˜ÿrÚŽ!&´n Œ † Y C %›¶¯¹Š­ t 5 Í 3ÛðsK8ðf_)-ˆÿOÿÿsÿ-6*AtÔ7¯ Î å1„ÕÇ.$ W  {kÑ@ + yeìTYÇÿÿæÿÓÐ’=M5m† m à ÈU_78‚¶ŒØü«`¾  k qùÊuÞ# i°Yyÿ:ÿmÿ#R½`Ùv ¾ ¹ ¯ q šñü¼PL–Ÿ|DÜ L c ÿ z Ûzc“oIÊëŽ6üþ7þ4þÌþ›ÿ°ìçµ&L¸«Î & ì a x Ž Õ ª È=߀¼Ðÿoþöÿ ³×ã¡-ce3=Ä ‡ @ Ö 4ˆÏx÷ Ð ™ k `ã Ó  ôË,óˆ×ÿôÿ‚ÿN*»L6†3f½±îøSŠ | ] ¿ — 4 άÙÒ~,)*ÿPþÓý·ýGýËü¥üÚütýþ`þ©þÿîÿ?…:Þ…HUnTå ½DŒàc$d¿¹£;/Üð¤éоFzÔc€Ôº†Ý°Ôå;¢ÉµHv¼k—_¹ÿ§þWý.üfûDû‘ûüŸüý±ýXþÝþÿ.ÿuÿP¾‘ïhñnŒ* <á©Ñ3˜°âI~ŠÃ•ÿ[ÿ¢ÿA‡lúÿzi1¨®ÈMÕ7}I~l¦J^4 ¼"|ÿÿçþÿnÿ‡ÿjÿgÿ­ÿJ×>f®¢6¿c”ê“—oò3}ÿÿŠþúýKýÃüCü/ü<ü,üü‚ûpúOù†øHø‡øËøWùú ûþûáüàýüþ2›A0ºƒ i ”VÛQÒ”ÌÿÿÞÿtÿ1þ ü½ù,øR÷ìö÷ª÷Øøÿù£úþú#ûûÐúû)ü7þxyý/XJ( p ² Ç  Ï È ø 1  %Ï5|½þýMû~ùï÷¢ö~õqôÑóÚóJô‡ô[ô”ôPõö÷7øiù±úütýÿ|â þÜKGïo÷ƒëÈ(èÿÝþ°ýAü“ú›ø?ö¹óòñòfóîôö øžù<û£üëýlÿ&ô«Ì = î ûoG®º R Ý + Qf¼ÿÿíýëû0ú¥øG÷NöÌõõ‡õ¢õ÷õ™ö~÷šøâùóú­ûXüýØýçþ§km)D*Im]g×ÿ–ÿØý)ü¢ú!ùŠö€õôŠóÃóŸóÆóõ²õöyöåõtõµõnö&øzú³üùþ÷Ðð)r¥â•ŒûøR0;!ƒ3ÿÐüéú·ùÅø¶÷Yöjõ õ‚õöäõ½õàõcöi÷Eøùú¬úòúMûïûaüŸürü~üþüÀý}þÉþ þVþþóýþ÷ý¦ýßüÂû¦ú«ù`øÛö]õ_ôûóéóüóqôõÈõ\öÆö9÷Í÷]øCù6úþú“ûçûôûü…ü[ýþÏþ³ÿžÝebÿMþ~ýý¹ülüñûoûîúúÈø}÷òõ~ôhóáò"óüó/õŒöø{ù¤úeû3üAý^þ´ÿpFÆ•‘1ªÕýRGåþ¹ý°ü‡ûvú”ù½ø´÷—öiõMôdóÕòòRòHò[òñòãóÝôãõ"÷vø§ù¼úæû:ýÔþŸ*Oç´åÌÓDõÿÒÿ`ÿgþýôûÛúûùùù—ù™ù¨ù®ùtùø^÷•ö¦öM÷øuø©øóøùQù’ù’ùjù_ùPù*ù&ùOùyùxùŽùûùiú¡úeúøùwùöø·øÜø3ùIùëø”ø€ønø'øâ÷æ÷,øHø“øûøù,ùðøiø¸÷÷‰ö¤ö¦öZöõõŠõ õÂôêô„õ/öÆöj÷Ó÷6øYøiø=ø×÷†÷ ÷9÷°÷†øêù{ûëüÄýÆý€ýý©üàüQý3þIÿkküÿ‘ÿ#ÿÅþuþþ”ýý=üûòùûø#ø£÷ã÷¶øbùúôúÌû…ü÷ü ýƒüºû]ûÁû“üqý.þ þ™þwþÀþ<ÿŽÿ¹ÿÈÿÌÿÒÿçÿ"ÿÿfÿ þœý¢üéûÛúzùbøÑ÷ñ÷›ørù úmú˜úãúgûü¯ü ý1ý©ýmþ£ÿ8è*pIÜÚ2ȳ=¶[\²ÿ“ÿoÿ€ÿÖÿ.w”OñÿÊÿµÿEÿkþ­ý9ýíü|ü3üPü¨ü ý;ýTý“ýêýþ-ÿ%+ÒW”9–g,»®Šìz‹9ÿbþˆþ ÿWÿjÿVÿøþºþËýpþÌýyÿ!ÿ¶þßþ×ýpýJþÖÿ8VÕS,"Ò43ï7 ! ø  m£Îþþtþ½ÿxœÿ%þÖüQü>üñü„þ¯ÙjÔ´®/B…ž­ l È " p ³   à ý  k »í&góuþ0üJúíøøR÷™ö%ö%ö÷Æø›úêûpü¶ühýÍþeî’p… [  !¥õ+m«|¾z Û ‡ § š]Õ>› 8ÿbþØý¦ýñý³þÓÿM¯,¥)¨ Ù ’ Ô î   » 2 ä  4 ë ? T Dóy%ë¿™ÿÀþþ¬ýŽýÆý?þÚþpÿÏÿùÿM!C6–.ˆ6õôíÎG¡›ÿ ÿÚþôþ[ÿvÿ0ÿàþ¿þÂþîþHÿ¯ÿéÿ”ÿ½ÿy–œ˜çfÏ&  N õ }  æ%Õ@‹Sÿ×ýQü;ûÌúbú˜ù,ùVùÕù$úúú<ú©úbûÃüÍþ®] Eò ( Þ x 9 `  A ^ ÷Ñ(U8YþÞü¾ûîúú_ùáøù¥ù@úòúØûÊüœýhþNÿÕÿÛÿ %qŠn  2´Z~ßô¸ ä  üT¸Å`桉ÿgþUýŒüáû`û¬úÒù2ù—ø ø_øWùzúÐûýþ¼þâþÿÿüÿpÝžyrr²ÿþÿýÃþ“ÿ;¡euÿýývüÿúŸùßø(ù/úû[ûPû3û*ûSûû ütüÆüný]þxÿ•r6èЗ>» ë¤Z„ÿ1ÿÿìþÙþÁþVþ¾ý5ý°ü8üÀû­û;ü;ý…þñÿ€ "R¶\¥JؘXʹ/…­îk [GZÿ–þèýyý!ýºü<ü¨ûÆûrüxýcþÿóÿGF‰.Õ÷ÿkþƒývÿ¦ý4ÿÞþ§ÿ@lÿtÿ8þØü@ü]û*û”ûæûýªýýý*ýý–ýNþÿW>f]ˆ‚”ÿoþAþÉþŸÿ9®ísV€ÿ3ÿ…ÿÌÿ:ªÓò·°HôôCÝØÕ:¹»X¥¾ÕàxôLÿùýjü×ú—ùÙø¤øÍø×ø¶øÄøøø ùÐøø¦øAù#ú"û>ü°ý‹ÿTΞ2´æ ß Ô ¼ T × I ê` ËUÿeýüû²ùú÷ö–ô–óó·òòò*ó³ó ôRô»ôxõ€öÁ÷–ùüõþªÉ<¤(± 0  [ ˜ ª Á ( Î ÿÖ@§õþüSù÷Mõ?ô¾óïó¦ôõJõ¼õhöd÷²ø'úýûCþ©û›™7#¥ƒ¤õÊÌÈôê`SþIü±ú)ù[÷œõÁó ò_ðñîîäí÷íRîÈîÄï^ñ0óèô÷Zùû–ýaÿÛ2N Y½ƒy²Ý8àþÿýQýþüÄü;ü]ûŒúÇùTùùùFùôù½úZûÀûüÍüõýHÿF¼ôc  X _ ¶ Ñä6µ¤€Ëþœü¨ú8ùaø–÷tö;õ‡ô8ôèóóóôNôþóòó]ôòô2õ¦õ“öÆ÷Ñø«ùú9ûÍûWüý@þ¯ÿëŒWÈâÿùþ!þ€ýý`ü‹û»ú‡ù¾÷ öEõõ|ö=÷ø­øÌø>øœ÷~÷Ï÷;øwøÆøUùúûÄû¿üþÈÿ –Ô!L¶|$*ÐÆ`‹^®þ.ýžûÉùøÅö ö ö}ö'÷Å÷~ø•ùÒúPüþªÿ©ˆÖð§LñšÞ§$lº-ÛÿZþ+ý4üMû$úÓø°÷¾öõdô¡óyó…óîóõÖö9ù²ûsý˜þnÿïÿ6~X£¬bªtð?û6ŠÿcþÏýÝý‹þ6ÿgÿÿüþüþæþeþ›ýþüCý¦ýÃÿéÿ’ Øty×8,‚ k á " Œ M ™£G&÷÷š3 ¥%eïÿ×ÿóÿ»ÿuÿzÿ<ÿäþ®þ»þSÿcÔ+˥߾ŒyoŸ§ræ"T`¤ÄÖÿèþ^þAþ?þ2þ@þNþäþòÿcý3RmgRø&<pJ”tÏü|in~gñ1G÷&;ËóÉÐÂn•'{ïá%…é{/ ž  + ´´-Ð'&ZßmÂ.#‚õtw©zpÇü=PPœÿÿëÿ3ÒÿOÿ¼þCþíýÌý±ý’ý¡ý·ýðýÑýcýùü†üÇû¿úùºøø®÷¦÷ZøùÂúÃû¡üˆýoþ¬þ}þxþÉþDÿ¼ÿÓÿÎÿ—ÿ]ÿeÿáÿ8ežÿ_ÿ,ÿ½þMþÔýˆý.ýÀüYü%ü ü@ü­üqý6þîþ-ÿUÿÿ€þíýƒýIý{ýÝýjþ ÿ®ÿ*ÇÿRÿðþ£þKþþËý6ý2üýú°ùŸøå÷h÷Öötö-ö*öSö²ö&÷Ä÷6ø‚ø¶øîøìø¶øEø øÙ÷µ÷œ÷ã÷,ø)øË÷a÷ÒölöGöWö›ö/÷ç÷ø÷øùøøù%ùeùnù/ù»øRøÕ÷Å÷û÷ˆø1ùú‡úûÈû‰ü¬üüôúÊù—øj÷Dö<õôeóó&óóùòíò÷òÜòÃòƒòlòòüòióÄó&ôÆô\õÄõ!öáön÷}÷D÷i÷øãø¼ùnúßúOûûäû[ü”ü<üwû»úmúú?ùø÷Eö öÄõÒô¾ó¾òò˜ñCñ]ñ[ñæð†ðÉðŒñòÜñ?ñàðÖðÅð×ð1ñüñ·ò=óûó²ôÁôqô­óÛòzò£òÁò óùóxõðöÖ÷å÷Y÷`ö…õáôyô/ôô ôKô®ôõ õ‡ôÀóóƒò7òúñò"òþñÙñò-òéñ3ñ‹ððñ ólôÈôdô/ôÐôõÅõ›õÎõgö÷"÷÷êöö‰õ3ôÞó„ô õ²ôHôqñëñóò´ñ—ò~ðïÛîäîÐïçð$ðýïwðQñBóÞôúô­ôËóDó¯óÐóºóIô•ôþôö®÷!ùxù2ø<÷U÷&ørù˜úºú7úù(øÈ÷i÷åöYö×õö÷"ø.ùÍùÑùfs-uae-2.2.3+dfsg/share/fs-uae/floppy_sounds/drive_click.wav0000644000175000017500000004311612162366653024243 0ustar glaubitzglaubitzRIFFFFWAVEfmt D¬ˆXdata"F 7 s hjY"* t ø­þ¸þøýü/úùïøšù úçúØúü¦ý»;  ¡x n ¸\…£ óÔº ¿ˆÿ4ûÆùBùòù'ýäLýí,È4Õ30.Ï'&•)4GDoR£S˜C/'i CóêØéhéMäÁß”ß;ã¾å=èí/ö2W 5(8â>G9I3Þ4i8f/= 5 ý 6úé s!ê<^õ T‚ü4ü^ølí<åä-ê†ðÆ÷×JA83Z¨`R%2¼¯^ ~ õ9æÙbÎtÇýÂ[ÃÿÇ<ÒkÞ—êÿö û–:/TIYÚYYV1A?,1ãWª_È|%µSYk —ìüCôáç&ÞˆÙÚÜßâIéô7ÿ)Ð}ý:ö¬õ‰úþûyö½÷qO–¡ 7$©JO`Ë]K_‚^%_(_û^&_Ç]A^é\R_\:ÖùÒÙßÉ<À¶Á‚ÈÊîÇQÆÌÑAô2 võƒØ{ߎ e0' àEÝÒù:ù Ôu¾%Î4æfïÛže)hAk†hŒj4iNjkUfˆEr;£û ÀLÃÑØ´r­°®3¯Í¬ù­B©¬Å©`çl¤d;hQeee fdág|c:m|aˆyEÂZ *¸´±Ì®kÿÿÉ|¯\¯Œ¬Ó¸å¹\­­©­Öº‘ÂR»ý´æ¾úØt!Jik!k•iËji‡ki~m lÓn¬n/oTñÈœÔ5õôäF§Æ:¯~±k°?²Þ²]³”³|³­³î²|²h±h±­¯°T­¥²Ì²­?§ «B¬90gúf;hjf¸fšeˆd«ddFdcRd¨dg¼4Îü©‡¦L¨¨¹¨à§Û§Û¦g¦ ¥’¤f¤×£µ©×¶ ¯’¯I¯¶Â¼ðÑ«fb7[[^ZÚ]ßZØ]ò\E_Ý\î^J[ ]XØ\rV¦`¶X‰hÒßBžš£b£_¤ž¥Ñ£ ¥£…¤j¢A¢µ¡YŸº ñœÝíbV7^¦U>YŽU¼W¨U,WVbVñUºUUÉTfTÎSTÇS VÎTZV¾fº*Þª)žµžÓ ; 8¡ì ¡Í¡…¡“¢z¡Æ¡Ï¦ù¹§õù^Ã`z`¾_\aA`¤a¾`ÁaCaLbáadÆbkàL ÏØ¦Ø¨R«NªÔÀû㌠7-‡:Ö!ìS»—¯h²²´²š²y²4²Ý±Ô±s±Ý±J±½±± ±9¶øÏrþ±UÕpKoÍm³m5mFm¯lXm€mõn^®ô±’¯B´å²õº¶Ïµ9¶¸ƒ¸"ºº¼Ù»X¼Åº`º¢·+¶(³äÊ¡ú6MîrÍpŒpÔrrÓvÓE)ýó\G uÆvŠuvÙ3Öí àŒé¢Ê«Z>ä`Äd¼ð½¡½ñ½æ½ÿ½E¾Í½ê½H½X½ö»Â»Î¹`¸µµ}ÅÒÏuýq²sq²rßo%pnƒnYno6p®qxkƧ¹è¶¥µ‹¸Þ¶·r¶c·â¶ö·Ê·â¸–¸h¹ç¸W¹4¸üÄ1åßbOÀsãlõn kÕmm=op…Z$ ìý .M[LyéoIx©@Ûë²Eµ¾µÔ·}¸®¹ºxºð¹±¹ü¸ ¸ÿ·ÝÏÉùT*>]/tgmÅn…lm=l^l§k¿jij0i[jÉgl*P>&Ò7òèíáðÙCÐ2¾p²W´Œ³e´´³™´Î³hµµd·U¶ý¸T¶a¸ä³Ë ÊrIq¨q1o^qòn­q0pGrrtKtDtF‚òc¿…ºa»S½·½p¾·¾U¿ÿ¾A¿ì¾K¿þ¿6ÁCÂfñÃÊÃ&ÃÁ¿ç¾Üü²NËÕǼÁ¸¯]¦Ì¥x¦ô¦_§Z§§ó¦¸¦›¦X¦Z¦?¨¤¬O¯’±Œ²~³´´á¶¸¸o¶!´”±?¯Ñ­h®ö°¶Ž½9ÇxÒó݉æEéCä™ÙÎÌ]Áš¸ß²“®«C¨[¦¦»¦h§­¨«S¯Iµ!½ÅíÊtÌÉÄþܹ€·A¶E¶:·ò¸ü¹a¹íµÉ°o«Œ§p¥”¥8§é©™¬Ó¯³´¾¼íÇÝÕàãî*ñtìµá£ÔîÈþÀ—¼-»¼îÀ¬ÆLÌŸÎÌVÅý¼ µ5°¶¬õ«j­y±¯·J¿•Ç7ÐÙöá_é¶îqò ÷¸ýæ@ù$–4÷>•>´2ÍÌ“í±ÛHϿǪØ ÄÑDzÌÑÑuÕ9׿ջÒHÐÙÏÑ˜Ô Ø´Ü;ãAìÄöI£ Òf ŒVý9ø–÷Cûo¯‡  Ä[ýüó£ëçäGß'Û´Øõ×dØ•ØÓ×ÓÖjÖÔ×¾ÚaÞýá=ådçÓçEæeã¬àaß ßbápãöå•è]ë:íùí§ì‡éå5àÇÛ—Ø<Ö$Õ)Õ×àÚRàkæ_ìãðó*ò¾îÀéãä,áßVß+àÓáÚäˆéZðøæÿ¡a$sÊÈþƒ?~4ŸÂû"÷ò ïì˜éwçßå$å åáäUäþâAáÏßýÞß­ßiàááeâZã‰äå¦ä€ãpâ—â.䋿KéÂë]íÛí í×ê6èˆåîãñãJånçŸéIëììîòîÓï•ñOô;øü5Âq<üµöxñ2îzí±îÇñÅöÉüÃ[ ) c´ Ê ‚Èÿ5ú]òëîßéòæ?æDæˆè·ëCîÆðÄññGð·ï¸ïÿñ,ö~üÌ_ O¯n‰-éÄúŸñ êKåÒâuâ™ã€å“ç5êÞì9ïFñó@õ]øbûõýãþþëûfùs÷¢öãöAø]û‡Õ› *édH žÁþ¿ùtö¤õJ÷TûÖKÄ ^±FŠ0© ’ýÆ÷Ñócññï”ï%ð[ð;ï¿í§íßïqó€÷lüt ´S þÖÌø‡ñì èä á}ÝœÙÐÕÒƒÎzËÏÉÊÌœÏáÔLÜ~æÞò>à "ðpp ƒSü@öÅò{ñòÍô…ø=üÂþ©ÿþþý=û.ø6ôðîëÂç*ãüÞêÛ—ÚiÚHÚtÙWØ×ðÕ<Õ-ÕCÖ7ØöÚ˜Þnâmæ ê0íÅïùñöóÔõ~öÿô ñžëtåÆßÅÚöÖÔlÒÂѰÑlÑ´ÐcÏþÍuÌÜÊGɾDŽƺÅXÅ„ÅSÆùÇ:ÊÃÌ-ÏxÑ{ÓRÕ×/ÙCÛÄÜÿÜxÜOÛbÙ¤Ö`ÓÑPÐØÐ”ÒIÕ%ÙÊÝåáDä¾åèåŒäÑáÀÞ±ÜÆÛˆÛuÛrÛ‰Ü0Þßàyß¸Ý¼Ú§Ö ÓÒÐeТÑûÓ×Û¢ßÁãóå'æ†å8å<ååÅä’ä¹äåëäÕã?âÀàJß-ÞûÜ ÜêÚCÙl×cÕLÓlÑVÏbÍÚËË<Ë:ÌšÍPÐ+ÔDÙ‡Þ¥ã«èyíšñÉô¶÷;û²ÿ@p2 s9>h ,»güÿöòèí’ê¿ç^åä¯ãäxäþäæGç˜èµé±ê¼ë“ìeíÈíþí/îÊîðéñô¼öÛù]ýËó.·výý4ù„ôÚïëâæ<ä5ãTãïã§ä•å æŽåßãnáËÞÓÜÏÛMÜaÞ×áéåêî òõõ úÎýTQ\ ÙÑ%Ì7[GjÅ<8ò¹î _ Ù t$cHÿ•üÎúZùŸ÷©õXôûóÛó¾óôTõ†÷áùÔûÄýD#Šâ1ËÑ‚N4TÐu ’ ä ã ‡?•äüHùÜõ²òßï4í¿êÈè çIçèqéë îMðÆò½ô!÷™ú“ýM; FufÈ}àN ­ o I uý*GIÿ×ýÜüÏü±ýoÿá$äZ{ P Á¯„¼´ : # {29Ôë k ž –Y >øþý5ûú4ù{ø³÷èöMöööÆöä÷0ùúëûný(ÿîf ºé(,ÌìœJt6 Œ g Ρ›'õÄYßðîŠ+5§ ‚ z — þ ’)™¼Òþc3–O\OiZ|ß±”LÌù?‘¢0 ÷0©ŸYÓ/ T „ ò É Í ª ò } ý X u S (S:Çö¨ v b’Ú¢AZ,!V#Ì$H%%\$§#Õ"œ!—ýBs§$@  Œ g ¯ T » j  þlu'íüEúÈø{øùéùÝú®û!üBühü¨ü!ý³ýLþ&ÿ"EžcÿÀý ü`úÒø~÷Bö)õoô:ôvôÂô±ô6ôÃó¡ó¾óíó9ôéôöR÷¥øßù7û„ü‘ýQþòþÓÿß׫ݳÆÙ ° ï gñ P sVÜüúø~ö*õÙóŒòiñvð·ïaïƒïð%ñcòµó½ô<õBõõÂô\ôÿó±ówó*óÊòqò+òò@òŒòïòRóœó¦óvóóƒòÁñ½ð ïîsíìäëcëëëQëóëðìYîùï·ñ”óõN÷†øùYù¬ùú‹úëúCûÉûqü'ýïý¬þÿÿÄþ¥þÌþÈþ=þkývüŒûfúåøG÷Éõ‚ô¨ófóúó õGö÷Ì÷øùMùèøQøé÷¨÷e÷"÷¶ö5öŒõËô<ô ôíóÓóƒó:ó,ó„ó:ôAõ‚öÓ÷þøÇù úú[ù øgöµôróµòfòròªò5óüóÝôðõ+÷`ø|ù—úðû«ýoÿ7×%I–ëæ M P ê \ QÒÌÁx‡þÇü:û÷ø‡ö5ó˜ñËïýî+îqííDíwíRî;ïiðËñmóFõÒ÷\úžü|þõÿx%Âü¥yîö·VŸuþüÒùøªöŠõÄôfôzôÑôõ-õõËôtô\ô–ô5õö#÷øjú·üÿ;òRª› 2  a  É u}&½þ”ûÝø¬ö¬ôÉò#ñðRïµîî„íúì…ì'ì ìjìíî'ïðLòôÙõœ÷—ùûBý¶þý…¬ÁòŽrÜþüüÝúyøöáóò»ð¸ïï îQîîõí:îëî ð¢ñ^óPõ|÷Úù"üþ­ÿôZµ(¢ó  ó ˆ ® j ç D \ * Švÿq3þfüöú“ùaø”÷]÷‚÷î÷«øÇù/ûØüÃþýjóJ )Ÿr]ð¸ÌN ­ Íã<ÙœÿÁþRþþâý«ý¾ýPþÿ kA< Ä ‹ bèRåɼ§‘RÃÐË™ Ù O ªd¥x r" = ¬ O¬žþ Ü %óͨ» G"Ô#-%&–'æ'''c&j%8$ó"‰!£#( íÚ @ C ¥ˆ ÒÂþÿ©êyeÓ¸ ® MÀW*Àåžê˜ ž ÝsiÏ)óGîtæt  K WuÂ%¡uÑÿÿgÿPÿ±ÿ¹‚é$§óT¢rÓ×ˤR­Úÿëýþûú‡ø;÷6ö-õ(ô[óàò›òyòŠòéòêóeõ$÷ßøTúqûðûÑû>û…úÉù ù‚øløÇø\ùØù)úzú¾úðúôúÝú›úáùâøÑ÷ ÷röïõiõ'õõáôqôÉó ótòöñÅñò˜ò\ó/ôõ<öt÷yøùˆùÛù;úiú–ú†úùùùø—÷@ö(õ&ôó òWñMñ“ñ§ñ{ññððÉðÐðððRñ–ñ¤ñ ñéñ{òÛòàò¨ò»òßò2óVó¦óæó ôWôâôJõö‡õ¹õ›õ\öûö0÷÷âöPöÖõõô)ó*ò/ñÀð©ðëðjñßñrò óÊó ôÐõ÷:øNùPú^ûGü»üçüËü³üèüWýþ»þÿÿªþ<þÎývý$ýý_ýÑýYþÞþ8ÿ)ÿ½þ6þþIþûþÕÿîC¼ ëS^ÿr %¢=KÏcÕjèpœòÿÿÿ¤þ¦þÿÏÿÛ‚³íáÅ0¾;Çáÿ*ÿÓþ¢þ†þXþþþJþ˜þãþÿbÿ+ X RI:Gÿ}þÆý9ýŸü#üÄûƒûoûˆû¾û3ü•üåüÿüÝü·üœüžüÄüíüýÿüÀünüü’û+ûÖú ú=ú¥ùûø{øø¯÷^÷0÷%÷R÷x÷¼÷3ø¾øHù½ùçùøùéùÁù¯ùšùƒù|ùbùGù<ù(ùùòøÂø²øÁøçøù?ùnù¼ùú…úÖúÜú¹úŠúfúLúRúTúhúpúúsúRú+úúçùáùCúßú£ûiüý¢ýþ]þ›þ·þºþ˜þ>þ©ýýcü–û¼úúŠùeù‹ùãùOú¶ú#û€ûÌûü[üŒü¡üÊüØüíüìüªü|ü0üãûžûCûýúÜúæú+û¶ûzüqývþUÿ9ö̤"@(°P& z$Þš,¸#…Ð# ‰ % ½ W È ñ Ì ; n ‹ âl>Up£èO à  ( e æ Ä » *}z-§ ô ? U q ¶ / Ì\¼òD›8:1N˜.%JO$ïÿÀÿ¦ÿ±ÿÝÿ!ª‹¶¾¥RÎV×c¸È†tÇÆpÀÎ8îÿÆÿ¼ÿ±ÿ–ÿvÿUÿ9ÿÿ)ÿ}ÿ)ê½z­··”qflfÏ^ÅáÌÿµþ²ý¼üðûMû¿ú;úšùÌøø¨÷_÷ ÷Éö¢öçö#÷÷È÷"ølø×øù€ùöùPú(ú6ú=ùmùù”ø~ø%øø øÕ÷¥÷d÷­öéõ õ(ô§óZóïòÃòŽò]ò4òçñ‹ñMñîðÜðMñùñó ô¶ô`õïõLö¥öÛö÷y÷Ö÷?ø±øùHùnùWù7ù%ùùù ùùZù°ùìùúúú úúTúÃúDûÜûZü½üýýüüâüÏüÑüývýþâþ’ÿirJÛÿ)ÿmþ©ýèü;ü§ûTûûÓú³ú“ú…úqúQú3ú@ú~úÍú"ûbû£ûüû5ü<ü,üüüÚûzûûØú úhú-úãùÃù ù‰ùhù}ùþùÄúŠû*üÀüTý×ý$þ?þRþ€þ¼þÿVÿÆÿXÜjç¿i ¾Ÿe¿Ó­m |¸^D1ù`rMnÈ@Äÿÿ°ÿ H:ûÿ»ÿ…ÿZÿ4ÿ2ÿRÿmÿŠÿ¤ÿµÿ·ÿÁÿÜÿ*”úcÁÖ¼bênúÿ—ÿÿŒþôý=ý;üûåù¿ø¯÷Ïö1öö ö#öAööDööÛö ÷÷7÷—÷>ø)ùúùŠúØúýúüúäúÊú|úûùxùïø‹ø/øÕ÷‚÷3÷ÎöŠö7öÚõpõõ ôrô„ôÖô8õwõ¹õûõgö÷À÷ŠøVùú¦ú!ûû¼ûýû=ü–ü ýýHþÕþ0ÿNÿÿ¯þ:þÔýœý_ý-ýýêü¬üGüÃû5û­ú;ú±ùVùùüø ùcùÓùZúÝúWûËû4üü ý{ýõýþÿ§ÿA3àÿuÿÿºþfþ&þþEþŽþ±þ¨þ€þQþ?þJþaþÅþVÿúÿ˜vÃ!ŒM]¤í>“ È ¯ c  ôך4§ÙÊV¿#<û  f ¬   é Y ¯ µ ¡ ´  p Û v ) à Š*‚¥nónø § | a u “ ’ •   ~ R     ç ” V * ( `  5 € ™ ƒ v ‘ Ì Lëž’—aìï–)ʈj0À1mëgð c - 7 + 5      ƒ - ? j f ! Ú  Í ³ `  Ÿ r Û — E à  à õ z ² q Ý  8©#¾‚?'ÖwÝ*æìhI*ýÄ/[.šçAć{sRöQ’¶dâš…˜Õ!“.Æ6˜æþ;Lksf&í±„”Ë\9Ð.€æTØ£¼e¤ð6R™¹t0·\¼  ¿9¦1ØŽyÉ3@*?ÆÿmÿTÿ^ÿwÿ“ÿ»ÿñÿ;6;gÁgA Çx¨7Â5ŠÃõýê¢DÕ¥Ã/± þ¿}´z†Í#cŸ­EîÖ+§HÎ} 2 © ç Û › Q Ý Û Ì  gž¹·¿k´DÿøDŸú5d±H-ÆOÆF̉v³¼eÜ ûΑN%蹋)£ûc&W°Qq’ªÙ(Bvz8”æ;¡ÿ!ÿÛþÂþÁþ¼þ­þþsþsþþ×þÿYÿ‚ÿeÿ$ÿËþHþ²ý8ýéüÁü§ütü6üèûˆû>û%ûMûjû‚û¸ûÿû8üüwû°úúpù ùÍøÀø´ø“øNøý÷Ì÷™÷|÷„÷Ì÷6ø¨øùPùaùMùù³øvø9ø!ø#øAø‡øêø,ùWù^ùNùVùXùdù“ùÁùÚùÌù¤ù‘ùtùQùùÛø˜øhøYøZø`øUøeøUøMø^ø»ø>ùÎùYúÙú]ûü}üõüuýÛý.þ~þ¯þÏþÒþÓþÏþôþ/ÿxÿŠÿRÿâþ†þCþ þÜý”ýBý ýíüïüöüõüÕüÒüþüLý”ýÝýJþóþ®ÿrN3ów¼øÔ}kž¾äÜÈ•;½>¾QÚ»?=†ÿ[ÿìþ%ÿ|ÿ¾ÿ;O"71ñ²pÎ3­/”a;餋kÏ7Ë™rlC5‹ðH}u:1[°~á<ŠÙòèó;åÍ v ¤ K Ö  *A~ãF½±pCP}²ý6e²+ÜŒößšFÀã¼ÆFIòV³1ë²7½ÿÿ\ÿ(ÿÑþSþÒý€ýQýiý™ýìýmþþþ‰ÿóÿ8QB;3Iv•{OÛÿÿHÿÿÿëþæþúþ1ÿoÿŸÿ«ÿ›ÿ¶ÿêÿðÿÀÿ‰ÿÿ¼ÿ¤*ÒL‚‹¬™dyþ­#6ôŠQ–ì^Ùÿnÿ5ÿ8ÿ ÿœþ þý7ýîü½ü³üðü\ý™ýœýŠý¦ý¦ýý¬ýêý_þÌþÿÿ°W%6U6t`7ÉEbp®&êÓ¦cÿÿ¡ÿÿ¯ÿùÿD™ýsU„s{ø ¤cµó ^° ”  O ¢ ¾ÜE\y—¦³évgW„# øãÛ :@  ² Ö º • œ d Ú Öæ<®(‚½ú/ÞKtyÿžþþšýUýÿü½üšü¤üÁüûü]ýöýºþÆÿ$¡ïö§*VO'ëˆüGŒ°|]kÿÚþþJþ&þþ¦ýKýý(ýý/þµþSÿ&³&t’°õZ³Ïë?^=|2æòÿÿPþxý~ü‹ûÂúú¹ùNùáøkøù÷Î÷ú÷Oø•øíø{ù$úûÒûWü‘üÊü@ýþÊþsÿ«ÿÿâþMþÓýšýqýwýeý2ýæüŠüüXû…ú®ù/ù(ù[ùjù]ùYùrùØùiú4ûòû”üJýóý¯þ`ÿëÿ=“¡EàvS)à uÇX] nÿªþ,þ\ý1ýóüÙüõüWýªýþkþµþ7ÿÇÿleSGT,èœ!crA¨E-'ÜSÄ>¿Fµ5Õ‹WG0ó›^Ik–³òAè§>¸ f†±¡J Ö  § ûìÌÍnÆ y¯Òäï÷ %sòB ä WžÞ#¦) Œ £ ‰ s o ( œ¢|Q*;ŽfÛVïÿtÿÄþþÈýÙýpþ?ÿõÿ¦EÍWù¡MÙ?¬D>닇òhéEs»}ÿÙþJþ¶ýIýíüÀü©ü»üÆüÛüý’ýEþÿìÿŠ÷XÊ=wŽ©¾ÑÍg°Ú†ÿRÿ>ÿ>ÿ ÿ­þ:þÆý_ýöüƒü5ü2üyüÛüýRý°ý8þÚþŒÿ$«5Œ 1© gÁ÷ùÅXµà&¬dC 6Œ³“i_cY]¤öAPf®ú$z ž M4𵟆A௫µ®XÖVÜD¸v]Sb¡Tot‰£ë(b° H),Dê7›+©(î`ÄþD”Èzá —:”$¼b&òÈ´Âà$r¹ó泈zƒµà,s·;:$àÛïùîˆôb§Š1ß”.Ç~L‘ÿÿÿÿBÿjÿ¢ÿýÿ•)›Ðé Dj—­‰CægFzdJ—€ÿ%ÿåþ¡þQþÿý°ýrýBý:ýtýÏýEþÀþ(ÿqÿ®ÿôÿBz®ê<¥¤=÷Õšib£ £%•ª¿]-âædÈÆÛÿ’ÿ>ÿaÿkÿ+@k—ÿÿàþŒþ˜þ¥þàþÿ ÿŒþ þjýßüšüyü©üëüýýýìüÙüÇüÞü$ý{ý½ýþ/þGþ#þÊý“ý™ý¼ýþJþ®þ!ÿ‡ÿ¢ÿÌÿ—:²_Nü²}`s‚yDäkßÿÌÿÝÿøÿÿÿéÿ»ÿ¢ÿŒÿhÿWÿoÿ¶ÿÐÿ¢ÿ“ÿÐÿBÚ‡<+øÃ^¡Òÿ1ÿ´þPþÙýRýæü†ü3üüü"üGü~üžüÙü)ý{ý®ýðý¤þ»ÿæûÏ‚ýF‹õiÈâôó¢õ;’³8¸CÿQþœý$ý¦üFü&ü<ütüºüý\ýòý¹þ˜ÿR ΙXmÀÛ¬o Ò? íÝ–2ó¨<žÿIÿKÿœÿóÿ`Ú^Âþaø¿nðU´ìùË›-øáðåŸ=»U´RÇmG-áÿÁÿöÿu¦Oc][GU†¼À’\+׎„­øMu9Ðl!â~.L£øáÝï MÍ‚1˜í):‰Âl9 Ð’e[Eû4“íâÇv|Kjý—Fo‡¡¡¥ªÌóHx•¥ÃÍ›.•8ËD¹5î$n²ñ^õ“íóãõEPo¼PÜ* ÛÒú÷òHƒI© DÚf$d€E÷Ëñ$b¡µa wËkÏúM ™ ® ” C  ½|ýI{©oÌM ïî"^€|}Û{PŽö¹i€ x é ê Ð d  aaâ¹g©[¨§x¤ÿƒÿ¢ÿfÿeÿdÿãÿ¢=ªcºCWfr–ùlšª‚AÅ9£CAFɤLá¸ðr½Û„¡1Þ”Tém º   Ú ñ"/VjŒ»ö8¾!¹ÿ™ÿiÿÿóþ'ÿSÿIÿßþ™þŸþÿcÿÐÿƒ•Óãø:Y_ižïýÇ[Ö2 ëWÙtÉa×ÿ@ÿüþ.ÿÿÓÿ0œ7ÖC•ˆñ*€m¨µ‹^H9í½„LõVRT²OÎÿÿeÿCÿÿöþÿoÿ…ßÃ|óV×uôY€~UþøÏi,¢ú-Œ‡íFÃÿOÿÏþRþþïýùýþYþÎþfÿîÿgÁ@ìÆgÕFÆAÓW¥¶ iK™s qºvÍ²ÍØ¦dFa¸fÃB¯l¡ÃÖ%æ©!7.»*˜·A°6àRzxÿ¨þ-þñýâý$þþüþ>ÿ‚ÿÐÿVï˜G†Ý,MRSJøewuBå_ÏnAûÿÚÿ“ÿ;ÿ ÿÿÿ÷þÿ‰ÿ?v¤¬²¤˜‡˜`þ¯[(áÿÁÿ²ZÑøæ¸‡”³÷$0 üä¼qAM²8¯Û»>µA&8B9J]OéO¬ÿVÿgÿ§ÿïÿWÅ cÌ3u®’{/ U‘°Š˜)Èÿˆÿ”ÿäÿc¢ÁĹŸ²ø>­ ²?þ 9¹Ûþ6•084žVÄ[}<ŸÿLÿ0ÿƒÿºÿùÿfÿëþ¥þzþ(þóýÙý6þ¨þáþÿÿôþùþþþÿ„ÿv×BŽüÿ”ÿ{ÿ‚ÿÑÿZøH%— šÿ@ÿæþËþÿOÿbÿ0ÿúþïþÌþ¶þÆþÿ”ÿU¬ó0(ót!üÿàÿÿTÿ"ÿþþÿ`ÿ®ÿ³ÿ‘ÿBÿÖþfþ!þáýÃýäý/þ•þñþ)ÿ[ÿoÿƒÿ„ÿŠÿ¯ÿf›ÆóíḎRàÿ¥ÿeÿÿ¡þ2þåýËýÏýïýþtþÚþQÿ»ÿ#EZYS0P‚ŨzCýÿ´ÿtÿ4ÿñþˆþúýeý ý¾ü§üÁüý5ýAýýýý@ýrý™ýþ ÿ?vVøBX4íòîÉdà.Z~ÿÁþBþþñýÖý£ý†ýsýOýýóüÞüÏüâü ýJýžýîýXþãþ»ÿ¨Qzµ1Ê/^„®¦›h'ÃB†áŒqûÿ1ÿþý•üQü*üùûÙûü­ütýþWþ+þ®ýQýoýþÿÉÿ.Lju=¿ÿ^ÿFÿÿ8ÌêÓIU©•”§½o—ÿ_ÿ|ÿ@T’€ïƘƒç‡qPÁi~zÂ;ŒÿQÿ~ÿÂÿÊÿ˜ÿXÿ/ÿjÿÙ€à&Ä=¶€ÿ9ÿ’ÿa6gÞ->ÙÿMÿÝþàþ/ÿ’ÿÍÿŸÿ)ÿáþ)ÿ’ƒ3&ŸIÂöã÷C彪"Ƴ¡/µ•òÿÄÿÞÿ¡ÿùþâýÃü üàû'üü’ü@ü"ü\ü—üü(üûûOüý7þbÿ)zhRhÇ êȱvʶq¥þ0 ÷þþ|ýýïüµü}üUüQüŒüîüFýWýbý`ý´ý þ¸þÿÅÿc\ŸÙÞ#Ѿ>Ù»ÖÚQRÿ ÿ‰þ þÔýþþ4þþþùýÈýWý<ý®ýrþRÿÐÿ\ÈüW· gÐÝšûL²cÿêþ¯þßþÿ:ÿGÿ:ÿÿþ¤þzþäþpÿïÿBXŠÉÌ©¥ÁÒó(„­\£¯ÿyÿ&ÿ¬þlþ[þ_þ„þ‘þþQþþý€ý&ýý.ýý ý7ý¸ýJþÙþZÿÚÿz8 ç—H)ÅAà±U•þK½ÿNÿêþtþþïýþ`þþœþ´þöþEÿŠÿÌÿ  $pÌîìô;}–…q:ÏKÂÿÿ_þ‡ýÙüXüüîûÐû¸ûßû(üuüŽü¬üÊüêü&ý‰ýÿý®þ5ÿ¸ÿpNy}bKA3÷~ xúÿžÿ#ÿ“þþ†ý(ý±ü_üüÈû`ûûäúûSûˆû²û üüþüuýþ­þjÿ+gxrhE7#-ejÉÿ„ÿaÿ\ÿuÿ^ÿÎþ þjýýÿü.ý†ý7þÿúÿ§ãÙ§m+…öå‚üÿ?ÿzþÙýrý/ýýøüÕü…ü7ü,üˆüëüjýéýþÿ_ÿ‚ÿ¹ÿïÿH›²pà5B7äƒ Æ§—VúžB‰ÿ¤þçýkýûü¡üü ý†ýêý#þ‘þCÿÿÿd}Õeš÷[‹†gC4ô øÿUÿâþSþý±üéûŠûTûYûIûøúúMú~úïúfûÓû2ü™üýäýÿ`D¤ÎZE"ra;SpqDß!߃¾ÿfÿÿQþVý©ü¨üÈü—üOü)ü5üOüüýÎýRþ_þ„þ5ÿ‹Ïb•Üÿ¹ßÎÞÿ4ÿªþlþ—þ0ÿ‘ÿkÿìþ„þXþ'þ¾ý5ý«üAü ü4ü¤üPýÔý0þþÿÇÿE»(–»¸a+™x'#'ºÿäþ|ý†ý"üümûMû/ûEûÖúûû„ûTüDýòýòþÁÿáõšº @î×åÝÃÉÌÎí¢%zÀÿ ÿ€þÙýIý¿ü[üZüüÏüýDýzýÀýCþÿþ÷ÿÛ¯Iª< ï¢.HJþ#Îk;Q¢ÿ*ÿ¥þ<þÜýýhýAýöü¡ü üñû:üÉü)ýwý¾ý5þÇþŽÿ_‘òaßy{Ê ÜóÄI˜ÛE~¬pÿcþmýÁü&ü ûQûLû™ûþûqüËüý`ý¸ýbþAÿ%Ô@toB)2e¶ †%ØCb¶¨l¹ÂÎÿ.ÿŸþ9þþ+þgþ þŽþ„þtþŽþ„þ¶þÿ ÿfà\ ¿ŠN/÷ÅÉÿJÿÈþEþÏýYý#ýÿüþüUýïýyþÛþôþÔþþþ•ý ý±üöü‹ý<þÀþ(ÿzÿïÿPÙA༣c½ˆþ]Ýl’°¯lúM­$HÀFRQ~¾3óÿ Ï>ÿ¹þdþ-þNþ¹þXÿàÿ9zŠG©ÿèþ}þoþ­þÖþÿ>ÿ5ÿ(ÿÿ6ÿ„ÿÔÿAèÏpÑ#bj @Bϧ‰4ÉtncŠSÑ@æáó7q„˜¸Ô¶w&ÌhZ¡ ¥rCçð_•½3WÑ­jô jI,Éÿ^ÿ³þÒýAý7ýÉý£þpÿ¨ÿ‹ÿ8ÿíþÄþ³þµþ¹þëþºÿØå{½n|ÊF”¡”˜•8n~[­ÿgÿ>ÿÿÙþ{þçýaýýýýòüûüKý þµþÿÿæþèþ;ÿ86èþê!b‘O4$]q@=Úÿÿ²þXþ°ý/ý»üÙü)ýóý=þhþóý6þ þ¢ÿÇÿŒ¤G”çǼ~÷€w„í‡E÷ç¶K´^÷ÿ ÿÿþìüüØûÊûÌûüdüóüAý“ýþþåþ?ÿ°ÿ’Ñ-[&P¶œïON¦¥<Í™´R+ެ¢ÑŽ˜ÚF£ßžýCÃÿ†ÿ¶ÿJ1 š£M£öXÛÿ;ÿŠþ×ýPýýõüÍü…ü[üüûüRý•ýÖý þ‚þ!ÿÿÿÎ64å­«šPõÿ¨ÿ¤ÿ ÿÉÿ6Th#“ÿóþaþíý}ý ý£ülügüÂü%ý„ý·ý²ýÎý!þ”þOÿ;d—˜Ná ˜çò¹8y«ÝXùÜßè×EŽ©Ìÿàþþ&ý_üŸûûñúûû&û$û8û\û£ûöûüQý2þ!ÿ÷Ïp¿íÝz¶—O÷ÿ»ÿ˜ÿ—ÿ™ÿ†ÿ_ÿ<ÿ?ÿ;ÿIÿdÿxÿŒÿœÿ­ÿ£ÿsÿLÿEÿLÿaÿÿéÿˆbFå-"ùœ9×aÅÿÿnþ¬ýìü@ü+üœüùüýý"ýZýý¢ýºýÓý0þÁþGÿíÿtðÿÿjþ{þäþ}ÿÌ‚  ÅYÍ9„UÙøNöÿ¬ÿNÿÔþ‡þlþ†þøþ”ÿ1§ø9ó+Á#··ƒ×ÿ4ÿ ÿ›ÿE!ÞÿËÿ§ÿ„ÿ8ÿÿãþÅþ¼þ÷þ\ÿËÿåÿ²ÿeÿ.ÿÿ¿þJþ÷ýúý”þTÿÞÿAA>6E= |ÿÓþAþÛý“ýPý#ýBýkýŽý±ýéýþþðýìýþyþ³þŒþGþEþ…þðþGÿfÿUÿ<ÿ8ÿ`ÿŸÿÐÿÛÿÑÿ°ÿœÿÿ…ÿdÿDÿüþ©þcþPþ5þ)þ&þMþ©þúþ5ÿOÿMÿ9ÿ)ÿ0ÿSÿÐÿXÝ6¦î!9Iv޶¬¿‡‚|ïw‹ÿÿ¿ýþƒügüäû²û¨ûÙûtû«û[û@û=ûZû9ûÑû3üÑü‘ýSþÃþ+ÿDÿÿ”-}f_dr«ÒúUÉ/@ŽZÞÿhþRý ýýýVý¤ýßýßý|ýðüDüÑûÞûZü-ý þ˜þ¨þfþ:þeþÂþ%ÿ¨ÿ>ãƒXQ¾ŒŒït0{ínïÿ=ÿ­þ$þÚý®ý¬ýqýýºüü¾üQýäý:þþîýâý%þ•þAÿíÿ´P¸Ó¶X w ˜þùflW‚ÿÏþ0þœýdýpýyý8ý®üü>ûeú¥ùCùùú¡úû¨ûžü´ý¾þ¡ÿiú?ŒùjÙ;‹¹IW ´x;™JS4ÿ(þyýýýGý_ý;ý÷ü•üüûiûûOû¼û0üÌürý%þ×þ]ÿ¯ÿÏÿôÿîÿ»ÿAÿäþçþðþÚþ§þÉþÿtÿÃÿ­ÿ¢ÿÎÿÇÿ¨ÿvÿ©ÿúÿ_Õ‰âÿ:žàjÙÅ\ õà«tùÿNÿ{þÛý]ýýÛüµü¥üÆüýWýˆý¸ýÝý‰þ‚ÿ¥ŽPÛµŒ|-2xÀ¾\óÿ«ÿmÿPÿ=ÿ'ÿ×þ¯þŒþhþQþ&þàýœýzý—ý²ý§ýŒý—ýÿý‹þVÿ_4Ù8|¼ÁŒ0æŠ0Ì?¬ÿ)ÿØþÍþ$ÿ²ÿ.ïÿíÿÞÿüÿB°ë&¢óm10-0Q¦ mª¤1½DÇÿCÿÈþ9þ­ýý˜üfühürücüpüÓülýþ¤þ!ÿ˜ÿz¨®®½ú .LGEQg¾ØÝÙÇäøDr€nW5WbN;3HT/ñèÚø '^™ò îízÜ/ξÃŶԷÄ ùÿøÿçÿàÿÜÿ×ÿÊÿÅÿÄÿÇÿÊÿÈÿÍÿÑÿÎÿÜÿðÿ(0DVjŠ£«¼ÑÙâåÛÜ×Ë¿¥›ŒweP:+1FJG?7,%'6I\s‡š­ÁÌÖØÑÌ¿»°©ª©¡•†iN/ÿÿþÿþÿ4H`nqhkbXB,ÿÿìÿÛÿÄÿµÿ¥ÿŸÿÿ”ÿˆÿÿuÿfÿdÿaÿ`ÿXÿQÿ=ÿ4ÿ@ÿ0ÿXÿOÿgÿ‡ÿ†ÿ¤ÿ¬ÿÒÿðÿ8\q}p^ND3"öÿÖÿ½ÿ«ÿ¢ÿÿÿ ÿ¾ÿÜÿòÿCk}wiW@1*1<HNJ3! ïÿàÿâÿíÿöÿûÿõÿâÿÊÿ¥ÿsÿ?ÿ!ÿ$ÿ9ÿGÿQÿYÿgÿqÿŒÿ¬ÿáÿi·àçÒ©šxiQZnƒ†zN/öÿÝÿÕÿÓÿÖÿåÿöÿ6Xt{_NVbc?ÛÿÒÿÉÿÆÿÊÿäÿLo†~Z#íÿÎÿÍÿÛÿìÿùÿùÿôÿëÿôÿ%>YƒÇÿ(N_X]_„mE% þà¿ Ž„‰n?üÿÒÿ×ÿðÿDP\j€†zb?+-h¶ uÕ"D4ð˜&âÅÝ,s|bÖPóÿÛÿÚÿÞÿÔÿ®ÿaÿÿþ¼þ¹þúþTÿ¬ÿ»ÿ¢ÿiÿ0ÿ ÿòþçþñþÿaÿÓÿD‚ž|l^t«ÏØæÛÛÜdž4Æÿ’ÿ•ÿšÿ›ÿ“ÿqÿ9ÿ ÿþþÿ/ÿ"ÿ!ÿ*ÿtÿ·ÿîÿñÿÛÿÌÿÔÿr¶ÜÂ’x‹›©€uix°¿ÐL×ÿLÿ ÿÞþ¾þhþDþþUþ–þÿFÿrÿ5ÿ^ÿdÿ2RÇ×+ÁS—ð Pþý¨n&ñç÷âÈ—ZAÇÿ:ÿ~þôýÇý½ýÔýþhþ¾þãþüþ1ÿWÿ}ÿÿÊÿ:î¯Hª¬:"E|†lÅKîfëO–GÁ&—`ELSrŒ®¼ÿfÿ9ÿMÿŒÿýÿYšu"ÓÿŽÿ^ÿÿÔþŽþdþjþqþkþEþ'þNþ†þÑþÿVÿ£ÿåÿ;¸-`Zäήv< óÿÿÿ"NLU\zŽ€6ÕÿmÿÿÌþ þþ„þŠþ¶þÑþñþüþäþÒþæþÿ\ÿ×ÿ{!šÜ^žÛßÉ-·>È€KI[u«Ãªz*åÿƒÿ#ÿ²þDþÛý—ýxý‡ýŸý¬ý¤ý¡ý•ý¶ýÜý)þþþþuÿòÿcÞ;[el]@Å~3ûÿûÿçÿáÿàÿàÿçÿïÿöÿøÿïÿûÿüÿ øÿÛÿ¡ÿSÿÿ ÿ ÿÿÿFÿ™ÿ£14*äåß¶}8úÿÇÿnÿýþ•þ=þMþ¸þÿ2ÿOÿbÿ…ÿœÿ‘ÿˆÿˆÿ¬ÿùÿ,dxaäÿKÿíþöþ/ÿÿèÿgØ*"ì®s>< `Mì~'ÌÿqÿÿèþÚþéþÿdÿµÿõÿ(MoŸ¥Dßÿ‘ÿ|ÿÿŠÿCÿ ÿ&ÿÿQ^]q{†ga\UNzÁþü¸nGØÿsÿÿñþ8ÿ•ÿÕÿõÿþÿùÿòÿÿÿõÿµÿ_ÿÿýþâþÍþªþ»þÙþòþÿ5ÿSÿhÿdÿlÿÿÃÿ×ÿ²ÿqÿMÿWÿrÿ‰ÿŠÿlÿPÿBÿIÿXÿXÿLÿ.ÿÿÿÿ+ÿ7ÿ@ÿ)ÿÿóþ÷þÚþÉþ¸þØþÿHÿhÿtÿ`ÿHÿ*ÿ1ÿPÿ®ÿnµü7EE,8'3(E9K"0úú®_Ðÿ“ÿâþÿdþvþTþhþdþƒþ)þ/þÎý¢ýhýiý8ý‹ý¸ýþþùþÿPÿUÿˆÿêÿG«ÚÆÃÓßü-sÏAäK‚¼ÿ)ÿÿÿ4ÿbÿ¦ÿÛÿêÿ°ÿLÿÎþ^þ:þQþþÜþ ÿýþÑþ½þìþ'ÿUÿÿÇÿþÿ6sƒyH$€ðó¤uL°ÿZÿ ÿõþùþÿÿûþÐþ±þâþEÿ ÿÍÿ¦ÿnÿ@ÿMÿjÿ§ÿØÿW™´Ç³´À}á7O „ÜrÐÿ…ÿtÿ†ÿ”ÿÿ4ÿÔþ\þÄý;ýëüý[ýý¸ýñýaþäþfÿÃÿIKU~fs-uae-2.2.3+dfsg/share/fs-uae/menu_fade_selected_item.png0000644000175000017500000000060012162366653023650 0ustar glaubitzglaubitz‰PNG  IHDRÈdÆ sRGB®ÎébKGD€£¯ÕòV­ pHYs  šœtIMEÜ :D5üiTXtCommentCreated with GIMPd.e×IDATxÚíÕ1 0EA¨%<á_B téö‡;òB¼uÚ@»ë*Ä8V€@@ €@@ €@@ €@@ €@@ €@@ üè´fÆUðA@ €@@ Ä @ 2\ßàj0à2ÕIEND®B`‚fs-uae-2.2.3+dfsg/share/fs-uae/pause_indicator.png0000644000175000017500000000044212162366653022214 0ustar glaubitzglaubitz‰PNG  IHDR@@ªiqÞsRGB®ÎébKGDùC» pHYs  šœtIMEÜ:æÐïtEXtCommentCreated with GIMPW}IDATxÚíÛ± €0 EÁoÄŠ0$Kš’ á{½éd—©$Wwdx¦vî u÷³:SU÷×Þ°àçUür&öQÀ +#¬,áIEND®B`‚fs-uae-2.2.3+dfsg/share/fs-uae/shaders/0000755000175000017500000000000012162366653017766 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/share/fs-uae/shaders/edge-detection.shader0000644000175000017500000000352012162366653024036 0ustar glaubitzglaubitz fs-uae-2.2.3+dfsg/share/fs-uae/shaders/hq2x.shader0000644000175000017500000000553212162366653022045 0ustar glaubitzglaubitz fs-uae-2.2.3+dfsg/share/fs-uae/shaders/scanline-3x.shader0000644000175000017500000000274412162366653023311 0ustar glaubitzglaubitz 0.5) intens = vec4(0); else intens = smoothstep(0.2,0.8,rgb) + normalize(vec4(rgb.xyz, 1.0)); float level = (4.0-gl_TexCoord[0].z) * 0.19; gl_FragColor = intens * (0.5-level) + rgb * 1.1 ; } ]]> fs-uae-2.2.3+dfsg/share/fs-uae/shaders/scanlines-nonlinear-blur.shader0000644000175000017500000000172312162366653026065 0ustar glaubitzglaubitz fs-uae-2.2.3+dfsg/share/fs-uae/shaders/scanlines-nonlinear.shader0000644000175000017500000000133212162366653025117 0ustar glaubitzglaubitz fs-uae-2.2.3+dfsg/share/fs-uae/shaders/scanline-4x.shader0000644000175000017500000000273312162366653023310 0ustar glaubitzglaubitz 0.5) intens = vec4(0); else intens = smoothstep(0.2,0.8,rgb) + normalize(vec4(rgb.xyz, 1.0)); float level = (4.0-gl_TexCoord[0].z) * 0.19; gl_FragColor = intens * (0.5-level) + rgb * 1.1 ; } ]]> fs-uae-2.2.3+dfsg/share/fs-uae/shaders/lanczos-6tap.shader0000644000175000017500000001001212162366653023471 0ustar glaubitzglaubitz fs-uae-2.2.3+dfsg/share/fs-uae/shaders/scale2x.shader0000644000175000017500000000347512162366653022530 0ustar glaubitzglaubitz = 0.5) { tmp = colB; colB = colH; colH = tmp; } //E1 (or E3): swap B and H if(sel.x >= 0.5) { tmp = colF; colF = colD; colD = tmp; } //E2 (or E3): swap D and F if(colB == colD && colB != colF && colD != colH) { //do the Scale2x rule col = colD; } gl_FragColor = col; } ]]> fs-uae-2.2.3+dfsg/share/fs-uae/shaders/scanlines-classic.shader0000644000175000017500000000111612162366653024553 0ustar glaubitzglaubitz fs-uae-2.2.3+dfsg/share/fs-uae/shaders/heavybloom.shader0000644000175000017500000000362312162366653023327 0ustar glaubitzglaubitz fs-uae-2.2.3+dfsg/share/fs-uae/shaders/simplebloom.shader0000644000175000017500000000362412162366653023505 0ustar glaubitzglaubitz fs-uae-2.2.3+dfsg/share/fs-uae/shaders/curvature.shader0000644000175000017500000000125212162366653023176 0ustar glaubitzglaubitz fs-uae-2.2.3+dfsg/share/fs-uae/shaders/scale4xhq.shader0000644000175000017500000001126012162366653023052 0ustar glaubitzglaubitz fs-uae-2.2.3+dfsg/share/fs-uae/shaders/crt.shader0000644000175000017500000003402112162366653021746 0ustar glaubitzglaubitz fs-uae-2.2.3+dfsg/share/fs-uae/glow_left.png0000644000175000017500000000066612162366653021035 0ustar glaubitzglaubitz‰PNG  IHDR€€Ã>aËsRGB®ÎébKGDži…M¡¥ pHYs × ×B(›xtIMEÜ  /P°tEXtCommentCreated with GIMPWIDATxÚíÒA À A“ÿÿ9½—ð"…΀rS6ª*Ö^ »vÑÌÓÉfžî<Üw÷{žN÷¦ÝtÿvúÇ×äâ× €@ €@ €@ €@ €@ €@ €@ €@ €@ €@ €@@ €@ €@ €@ €@ €øŽÜyOçЗºIEND®B`‚fs-uae-2.2.3+dfsg/share/fs-uae/close.png0000644000175000017500000000051312162366653020147 0ustar glaubitzglaubitz‰PNG  IHDR@@ªiqÞsRGB®ÎébKGDži…M¡¥ pHYs × ×B(›xtIMEÜ 66pÜÖ±tEXtCommentCreated with GIMPW¦IDATxÚíØA ƒ0ÐP\xÿÓHŽ6ÚméÂF…b?ïí Î`b’Ö8î¹#É–d+ÉšdÛóv|{áÙfÂ'Ùnù\-á¯Ã·ÖÚc9[Âlø1Ærëµ`6È{ gž)SB¹ðKèIz¹ðGJ(þj %Ÿ-¡TøúDøþËð›xSÀ"è7h#d+ì0ä8ìBÄ•˜KQ€ò^%°ÜÎ+™ØIEND®B`‚fs-uae-2.2.3+dfsg/share/fs-uae/menu_font.png0000644000175000017500000006432012162366653021042 0ustar glaubitzglaubitz‰PNG  IHDRA á|ˆh pHYs × ×B(›xtIMEÝ®l÷ IDATxÚì½y¸&Uyîý¬Ý›¡ŒN`DMpàcŒSŒÆóåœ$&'8d ˜ hš('=N`„¨8ÄÄøÅïK4hÔÄ1 Ƙc"AZP„÷}þèµÛÕÕïTU«ªžªúý®«/6ïûV½÷û¬g­u×Z«V3“$k‚B¥ãrꩪ¡)=Þâƒô =èAÏXõ4瀳D€ À`‚úβw‹Þ¼–ãVx®G‚ÊܽÏþ0TÅÔ`„`Q–û$6òÂð@z³0º¸æ'„À: ¾ š£A0:„€Á› E§½˜€A™ `‚0A;`Fi‚$±PÆg‚0C04k #ƒ5AëFˆõ@0:0jÄh”e¹¯ÂY÷u`: 0A˜ Ã!˜‹X\#„é0À`‚0AÃ"Xƒk£«Þ¥…ô =èAzÐÓ´î€QÂt`‚0A˜ L&€ À`‚0A˜ L&€ À`‚0A˜ À`‚0A˜ L&€ À`‚0A­ÌL’òœ,„,癦'×ùsééJ_®òÊõ;rèÉ»¦ãSV“zªÄú5¾úî±~½¿hK'ñ™/H02˜L&Ð’LÒ§´ƒwôýŸˆßÿIJ`¸ £¡éÎDä”Ì™£bÚ¬J:¼# •´uü%ÐJ½;B?æ’Ñš ´óô qRgú>%~°ðzôƒøÞiC5AñûŸ.éó’~$éVIŸ“ô” ñXIzsf]O‘t‰¤;’T_‘tƒ¤ÏHú­±Ô¯‚®½%}7Jû뎵ümÔq…¤½¸Èh<ŸÏMš¦Ïc‚0Auôî)é¶(ñ ï=, ïãZ*ÇÐA ^©é¼|ãOˆŸ½ZÒ~u}P 0RôÂDÚÃ:ÖòÈDËɘ €Æóù;I{&TGï/%!ü™Â{/Нß*iÌß{ïh>þUÒM‰†;c‚ÿ½¤—¤šúý¿§3V%=_Ò~’Œß½þú£fOI7Fí¿Q×iZ1™ ¨i¯h8Û¹ \LÓ£žïæ¬+˜ €ÝrùI³te+Θ A› W¬bLxïcñ½eþÎßÓN:ù¿Œ_sþ„÷þ,¾÷îÇÿUC1Jᚤ÷HzHœ:,Ž„ü“¤m#4AG'²Žw¢é9‰¦ßéPÇÉ’Þ'é ´K”ô~IÏs» ½3A¯NÒçOÛúbLÐpMÐ…QÞ{ ¯ï‘•ÿ•ñû״ȉ º,~ÍÃ'¼·>ͱeʱOŠïß.é§3ëZKBp õkMŸIÖFÝ͉¦{ÅQCIúD‡:Ζ´-ލ¾%êJËq]ë[ãg¶I:=2A'éó˘ LP¥XÕ¡¦†%§ú¡¤“âÔØ:w‘ôÓ’~]Òk$]ÜpL¶ÅïÝoÂ{ûÇ÷¶Nxo/I›ãû/ͬéÀBÈ÷§~íÔs÷Äl|ÍY[ôådJ÷€uÜ[Ò›âZ¿[%½*)ÆWÅ×n“ô'’ %©sƒ¤eL&¨o&è†äTOé2F´ï„÷ö›a‚Ö;–‹s¯)Üq¤x‡ÞáÔ¯]n‹—¤·9k‹ÎI´ý¶=÷ôZI·$ºn‰¯Ýƒvzh‚^œ¤Î»Ûún6K„œì“üýizÖ×B:á½C ŸYºñƒÍì%f&3;1„pgºÎMþ¾»™}VÒ/’>öØäïu¦í«Éßs¢I ¾ÐŽLþþ`›Œ‘ á9êõ‘†OOxïòøÞkøÞ-ŵ.½gÒ»øÞùñ½¿,¼¾¾&åÏÔõ‘ ƒp·Iúµ‘çí?%ñøgÚÒ[å/êPǽãT×mq]_q:ìGñ½7J:˜vzR÷ﬕ¼MÒFL•©jÌB2-õòÂ{?•„ôÿià»_SèØ/‰ëZ_ÿõüb¬X+’ž§Àö—ô‚¸ödm½³ŸFÔy¤“ן&éŸãz‹ÅÍŸVQS:å³Z˜B¼SÒ13Ž=<ùìõÌÝï&¿ïδ”hûNGÒ…Ño²0ú hð×F¿¡ö¹­i÷žåó<~H¯µ3V”Äå‚¶`‚†•L?Ÿ„í ïýa|}[n§Ï¿¤/ͨôk’¾&é¥m,.pËe‘Ó“ÏÍ$=#y}Öf‹§–Ô²Ÿ¤k“ãÏŽÆæšBŒ^8åø×&Ÿûès÷¶ä÷èLÛ]m?êHÃÉñ¶÷En‘P~^ƒz0A˜ \±úT—£1A¶ÛÂÖí¤ÊÂ1{Q²Hr¹ðÞ{ã{6øýã°ü s€%ýzK1ù]Iÿ’L!|^ÒÓ ŸyWÔõ™äµt³ÅJ: Ž$½(¾¶*é‘%t¼<ùý—ÅX™¤KºªŸ×¯o–¨=í¡ÓðHÐi;¸Ë‘ E:[‡<&´Hœˆ#—ŠÚ¿mžMЭ]]yõ8¡Ö7Aü‡ ï]Ýô³Â’ïÚ#­Ðl—ôóböKÑìl“ô äõ÷ÌØlññ½¿(ñ=_I~û3 ïZØ.^’Þ-i9¾ÿ¦Âew`î^äxMУº^äÉ-ÚùÓ*ÃùrL’2ŸìB„g´þ€ÏH—¼Wb=žá.’~OÒ÷’×Þßq ÷H6èzeá½J›-Îø®­Éï¾ë„÷ïWX\®øˆ‘§6XÜ4Ð|>/ùÏtÜP¿ „ ‚lùò$ežƒ ‚Áš äÿH¾úÚŽcø²¨ãÒô)áU7[œó]w̚ùɨeŸ•´4Ð|þÝäw¾Ý™67ûõ©]""0'W6&k׺Øà„ êÂÝ5½#ªÃøýt|,†$=iÂû¹MÐ7“ßýÚŸ;(™ºL¹ª‹Ûž[,“Ç®|Ý™¶ÎwŒÆÁså·’tédo06Kì)! fÌìâÛÛÌlïÂ{ßû?a-ËÿoÉß7wÆ·šÙF3û«¤Ígm¶ø€Âg!½£ë…’Žœò¹G™ÙA^ßhfû5ŸÍìF3ûL|épIw÷ÐP›Ù½Ììañ¥Ï„n¢ÈB7$*9·ÈÇU·¾Ibá;.Ž·¤ÿФƒ&”ã}ãm¾?L^ûPG±úä.µ{NùÌ" £ß]â;I\»>üû’GÇ~RÒY…i³âbò-“ô(‡/ù­'8Ñ”>Eþwimh·!Kž,î"~`Wb0AÃH¨N6IœV^I~ÝŒY¸Ié Vû%ÓMÏšñ¹_,Ü"¿áù5I.ùÝOK¦|æq]¼}þÂÂë_huGÕvËfÏd»€q¢é‹QÏ•¹Ÿ%ôcŒOÔó¤DÒ7ºƒ F‚w²Iâ4‹uqUu¾%jøüú^<3>{ƼÍ+|ÿc‡:‹ïÅ2]ߨï¢Âûp.??ù?ß±–G$ZžOkC'O|²éys"é LI]7Vm’˜|Ïâöçï‰;G_W˜Ú¹>>~â>×èÑqçNIYð˜ßކiý¹LÿRç¡xν$ý¤EC´5šÔ›MPøüOЀsyïdãÄ¿éXËû£Ž+Ò»þ‚øÔÒ Ä>C­xh˜ BÞ•<_í!iøÙøý¬êW'q_V>¦Â0AÐB²/a‚ bî¬?Oèã}ÿ':ÛÅ꘠WÀ—†)`‚ …¶æûñ1=lý˜ ðw…F4Ð1!§ʵñð4=íol<[OWñBz<é©[/)¯a´‡CiŸ½å3zÎ1F‚`Œ°€ 0A˜ L&`X&(nlw¬¤ÍÉ3sfq}Ü¡sýØlÂ<>/j:IÒ–ã3)^/ͨåñœ·ªß‘ôlå•»¼+<Õ~&cT¦~¹QÒkrìˆ[3>+’þÿÜÕ2C|®—tZf=GIºÔƒ€!ëמ±Ž]$}g|Põ7$½IÒOµ!D‰ c*6Š›r!o&(êya¦>õø Zî·‰ÏÁ31AÍš šõ«ÈiNâó®Ìõ=W|6eÒóÛ^ô Ð=-^ˆÏâ¶Æ^\0A—T¬ä›Gb‚®ÎÔ(þg-ÏÉØÇ_‚ jÅ]’IÎÕNâ³=s}ÏŸÍ™ôü»=ÐJû~¿¯U=eFžÝ– J‡|7,rl"rÐ&(óïYšž˜ eñ^õ¢§ÆoXj`¦°v|Êç/z ±|Þ_Òñ’.’´6ðߺ&éÂø{÷wÒÿ¬HzŸ¤ßˆ³Ë’î'éå’¶%uèCm™ R-[±1Äõnd«1ÓÑw=C/ÿŒæÒE|†žÏ5÷’ô”¸eÛÊiB½ÝÿS$íÕ‘žH:tÆûÏH××5¥%HR!¬{¡o,ðŽBÒ„äØ,A*«Ç{zú=¹õÔ=Ÿ7=C/ÿ\¿#×OZþÏîrvÉÌž`f¿ofO3³I#![Cwª 2³ÛÍlã„·hfkfï5³Ï†äDïÆ¨ÙÌìΞŒ1ÄHñf$ˆ|&Ÿ×øPI¯‹wMbUÒ§$'iŸëIgw¥&zö¿óS3îv¼2Æë¡ÊîÐD×ךü2L&ˆNƒND>÷>Ÿ£®ûJz±¤ÿ˜á/¾,é’n©žtj‚&h;8þþ/Ïøúq<¤£rüËD˳›ü2LPûÆŠ-ˉž­™ÎyG¦Nã¶Lz*/lÅõÚuž?=[‡–?Nõ"éGe|WÒs¼4¬ Ä'ć^>cïYÜŸ©2þÆ2õ«Q=™êAîs×‰Ï ’N˨¥nþäÖã¢=L¯°ÎëèI¡·ùÍ¢=(Ùa½(öWwvñ”q€\,(Écâ/`šúîê €Eû “tU z L@Ï`: FI°Žƒfm“Ó”žª[ó §]=5¶P¢¼ÐÓ˜žºyé%Ÿ©_ýŒOU½Ô÷ù‚˜€ÑÁt`‚ÆÂò¢Œ³f›Ù¯Æ2³{™ÙÝÌl«™]mf›ÙglÇÞß'¼à–yk‚âž–ôÿ•ØÊþÎøùaè• ŠægIÒ™’V*>›j›¤eè… ŠhIŸ(˜šUIŸ’t¢¤‡I:@Ò’’ôó’žß/>lð]’–*h3IÇJÚ\ñŠ×7õÊdÓ“h:YÒ•´Ü,éý¹žûS3>×K:µ¡‡ðVOS1ò¦§NýºIÒ%í‘;Ú>¾éóuؾ7òÀÛ:ñ‰Ç¾#9|»¤Ã†V^QÓñ’.›óÞµøààõÏûì–äó½ìO]é)&L¶,é _øII‡/øÃ.é¢Âñoª c2=´}“”[ω´\!i_'ñÙ”ËeŒO–9Õ“«~½„ *qÜ ýYC+¯¨çij–#m/ö§>ôL1Ao.|ÉkËŒäÄsIZ8Ï“Kžã’LAÚìÌåÒ³9“ž£Ägsf´9c™=@=¹ê×M˜ LЂÇì%é›É¡—KÚ8PôÕ†MÐWJš oý©=iÂDa,¸ô×ü¡ç~C‰cÓ!²å•b¥ÆÄƒžUg•>eC™\Kfä->•ó¹i=Þò4XtFAÏozÈŸ†â¾}‘ö0®½MYšö$m(L#–1A«UÚç6ú¯NõL0AŸNNþ I¡ðþ“%ý“¤IºVÒ»%Ý{RÆ×ö,\ÿöÅ¡7Ò5×ìrhF¤¡tòèÁõÙÅÏ?DÒÉa&Ÿ'·¹ÛKúÓLP<éà wvýdáKŸ7e8êÛqqôn¢âq›’·Þ‹ Âa‚ÐCý‡ Jî4þBrÈm’îO>c‚ºÖS\çóÔäï÷…¾·þ…fö3;{Êy5³sg|ϧ’¿c0&6™Ù/$ÿfá Â]S4A¿”üýw…÷žk?Þaú3ûC3»‡íØ5úx3û3¾ç»Éßv€á/ 1³ô°Kg\Ptj‚œüýåÂ{OLþ~~áÏCׇ®3³w™Ù¬MÓEO«%ômM*Ó†¿sk¦xåÒ³-·'ÔÕ³­)=5Ëkðz¼å·ú>¶vT^o1³»&ÿ¿)„pÇòz@ñ•»%ŸýuŸäïI Úf-rK7ºº„¾ôÖÉ•S3Å+—ž½ÐãºzönPOÙòÚB“žiWñO6³LùÈföV3{EAŽêׯÖ/o¿§lyýÈÌ[_fуߗÔ5©éöŽôä2›Û2µùµ.ž‹#A©;/» ì¬pTò÷§ñžƒà@3;ÕÌN!í„Þ«§ò×⿱д)»KÏ/ööpž¢ º6ù»¸vçªäï_›p®_Ÿr%ùX3;)©ïêÈqæröCÔcNôlw¦Çг›¨_­˜Ÿ½Ìì¯Ì욎ãR5>ûšÙGT¿ 'Wé-òŸ›´ŸO|ïÉ{7Æg~Ü]ÒÝ$=#¾–rˆ¤—Å[!×ù“’•^™6SÊ~KŸ7=Ni··Èw½Ç»žšÇ¯Q¿Z)¯7T|LEã·ÈO+¯ø¹>û$oùܵn‘ïPOÁ½zÒ~>ñ½‡ÎyšüßÌÙÚúÏ+>=0AÔ¯vÊëZ¯&hÎç‘tkòñoJÚ“ú… ò¸OÐG“¿Ÿ"é~ff!3³·ésÿ—›ÙÉSÞûŽ™ýnáBcšÈÉ=û&8öWšÙË’—lf/¢8Á…‘ %I'ë¯'¸¯ß”ôÏqšë’þ_I÷‰ïm•t•¤ÏKúIÿ½ÌèΕ‘ F‚ ¢~åÓÃŽÑŒQß4AɉŸRò i¤i¤1Aè¡~a‚jtò<; äRÏ.£4qèò¶ëc.^/‰¡ËÝ ¡ÎÂÖÕL2Ö2éñŸÕÌ2ÜÆÇ ¹â#B9Êúµ0±où†™½.yù7r=E~B>²d4íO­¼ž6Uõ;föíä3oôw’¼ C{¤¤‹$=bÀ¸¢:ŠË2iØRUO£»ŒOqÉŸ¦bÔ5›3åóU´ç­pMÙòj¨Ý©Ã«mÇc3Ö9WÒÆêûZÅznž¾gíO­¼^šâØo2³_MŒ™Ùÿ4³‹£z–¤Ã%(iI÷ô˜8uöoföÌì¿Úì‡ªŽ™\q9'Ã9®´Ù»}÷1.9ãã-F99+ÓyΧJ·ÂŸ8«_UFƒ¶›Ù I'v3;ÍY}‡~µ?õòzÚ|ZtÄHúxEG}‹¤ãkèr=‡Y‘$åªðëšNŽ‹Ñ«”ÏëwvŸ$šû*¬f|²ÆÈÛš…DÓq’¾%iµB|n”tfÕ›úTß•×s%]&i­l»Ó@ݪºÐ$½#9|»¤ÃÔ÷ÎÖ$ŽmMP¦ö'OºàÊþ§HúÏ…m—ô®\+@I qœr–²SgµÇx‚™ý¤íØ·bÅÌ®³‹Þ>ef !\MhÀ5bŒ%B˜ €‘¬Á±9K¦2=U5Q^èñšÏUtR^ÃÔSõümħImCˆOò9[üXc„é0À`‚Ì2!€2Ä¥¤Sד†¶Vý¨ #AÐ{Ó!é›É㛎 *PÚÅD:VÒæŠ4»^ÒK3'¶7=GJúº¤;+> /›¦¨ç(I—Öxækê>3ê8bï»:þ÷Ú>ûÈ šó@ήõ4ù€Çø™ƒ$Ýœ÷®’¿åCɱ×I:pH啜ó$I[*Ö÷ÛâOhvCò÷oѽ—Ê«ÿUÈ•)JqŒòp|¦‚92“ž£3éyªòq|=OÏ¤å´ ZŽP^0A#1A‰žçŽ=¢b½|æ@Ëë…¹*W×ñi¨#t"é ‡FÃM¼ ºN™’&§ŒÑ]’©Ž]œ©p¾’IÏW3éùFÆNþâ z¾žIËÕ´`‚0AuMÐI_KŽÝ,iï9Çì'é{É1Ÿ“Z^Wc‚fê ’®Jd=4WÓKY[%ÿ»Î‹Çf‚Ò!Öå…|g¦ÚžœsC =Û2éY©ŸÜ1Šçº³Žž–+Ûž…vxƒçFÔ® J4=VÒZrü™s>~Z§$ýìó§æo¹°P&¸Ss"ë LÐL=/-,Óxl|ýqñÿ×y© ™‚ ¢Óhð|95y^õ¢—|îŸ Jtýyrü“ŒÍÃtöPó'§Ê!DZ zR"똠©Z^žÈù–¤Þ ¤o'Ÿy&ˆN„ µc‚îí¯ó…tñ~üÌ…éé+%Ý4ß Ü-r瘠ÝtœšHùIwŸQÿ5ù쩘 : L&Ô  J´=»pž?žÑKÒÓ†œ?9 ÐPMP¢ë/½-îubŠMÒ+»Àš»’.Èu &„ Âa‚Ó¶$é‹Éyn‘tŸøÞƒ$mKÞûØÐó'§ ú­DÚ¿b‚v~ÿ鉄s¹ ©‹oLŽÖ t{¦…È+™ íöLжÜzª,ìÍ£ µ78Ï3L?=·7l‚n«ÚéÆãQ¸YãÃñõÏîh9´¡üI¿{©FymíÒ%zÆb‚6&{"­Iº7#APz$¨&ßz'ÖuŒ¢žKkj¸¶­ábL¬0z±TòØ¥œªç‘ ‚Æ»îTI¹LÒÆóç?½Ü’>ÉÈLø7whè&(ÑöDÞs0A0¦›ñ§„¶•½©æñ÷4³×I:‰âh…Ï$—]døŠäïQÌÖâ¿I¬Îx/gzêØçp¡™‘üÿEföÄ×µ&IÓ‹ŽÝ^ó‚ç†\ §2O‡]›[£½dÆ•ò¢lèHÐíÎF‚(éÖxÊUIOZð¸_I¦fn“ô3mǧíé°Dã[çäîé çÐÑÚñLªÕõ+×È]í \U¯#A$û¨Ý!iF‚`$/›ïõ`:lyÆç+^Êã6ë¬Ô¹ZØÏùû…éȃç|þ>’~ó]ħíé°®×yË÷if¦‰‡Ð©G}ŸÊùè$LÐÈLPß‘.¶ÆÏ¾ºÐ8ý[ŽíüÇjJ†`‚’óÞ”œú³“µ'{ž|>½Cª«øŒíî0ï&¨KÔ#ôG‰Ä 0A€ j×í5áYlGa‚0A’Ux>Ïk¦|îœä3Û%=~D&¨Ó}‚z0Ô™ê‘ ºw²£ømM-¢Ça‚0AÓ?ÿ¸Â¶þß™µ9&hø&(9÷‰Éé×$ýzáý# Üs»ŒÏØvŒvn‚:5@}éÔ£Æ/$2ÿ'&0A-ê™ð@?7£Ãu«7žÿ}…ó÷¯*é‡É{×u|Æöì0Ç&¨sÔ3ôâDæ»1AÐ7”ë)ò]š }âPº¶ážÎ鵡56»ëtóÏ)çß/îu³ÎWãZ²ÿH^û®¤»¬_’6:Þ ÓŠ°ðÙí}}Š|æ|ϵy¬ Ô3ô = ‘× IDATÂ…Æ2ñ‚>™ ¯fÚ«ìú®’8÷k=oˤçšLñùî@MÐ%™â³¹Ažp'áÎγ©» 3ׯi|eQ?·AÒ×Ò¸/ðl£ý$}/9æs9n@È\¿6ç®?5¹f,zÔyq"õ—1A²ä\_®ÍÊ>ØÕ!˜™}ÔÌÞ›¼|¼¤Ã3œþ¼L2Ïh~Ÿ•é<ç6˜_4³iS¤¯!|¾õkg”üüIfösÉÿŸBØ6'~7›Yº^êñfv\&ýçyΟ¼sdý'BÿF‚MÇÇ)ƒµŠW=_“t@—N>{wI×%§øx=AÒ $]^1>7J:³ìs‘úr%¿ó8Iߪ¸Ù]¶-(Ç(|÷?6].ñ»Ÿµ`þ<+ùü,Öb}}fÉQ ƒ$Ýœœç]%LJ’c¯«;…˜©~eÍŸÂ0«è¹IÒÙ9ž38odÊÙHÐ# èCÛí×øt\.>†f74°à~:‰×«°ºãì付ÃõÇI q\y(Á5³'˜ÙgãKÛÌìgB—Ótdkg§vFCêSˆOûñ™k\rÆoˆ®t¡ـÁ› €y,#ÁJ µ5ÙÔàTUýèiWOÝ<£¼ÐÓ„ž®–qP¿ˆO½Ô÷ù‚˜€ÑÁt`‚0Ac0AqowÄ}uV%=–ðÀ`)<;lOI_ˆFèÛ’~‚À MPb„~RÒ÷£z[ÇÚLÒ±’6W|æõ¹`X÷Y'¹õ$šNŽ,ËÍ’Þ/éñ¹^Ò©‹>p³¥ø4#ozêÔ¯›$½QÒ¹ó§íã›>_ÇmhöŸ’áÒïHß.é°¡•W‰€¯Å=¯?ðyÞg·$ŸïeêJO1a¢°_’tgü¢ÿÑa£›r¡ŒñÉ#§zrÕ¯7b‚0A%Ž{B¡£?khåõ·Ñu©'HRèj?ø9?ÒÌv–nYuºOåUh´B<Þˆz¨_yãšë§”OüüCÌì+f¶¾†ì#!„ß$Ÿwog}¼J{I:ö €¦ Á’™ýYb€n7³çèL4Í&3û…äÿÏ !\AXƒ$Žbfé`—šÙÙD0AóÙšT¦ 9ÎãD϶Üz¼•WÇqÉ]^ƒ×C}ïE|¼ýžEËë-fv×äÿ7…îA>CèÍÂèÚ?4óB.ozX½¼¶‡öv”Ïê™T^ñ3O6³L9ÍföV3{EAÔ/´µ0zA~df‡…¾ç©ýi0î·›ÙÆEôT\}»™ýÄ"íeY=sâ»5„p— ñÙjf{gг-„Py›¦Ã *šÙ©fv ¡h¯s•t¯žÊ_‹ÿÆÂƆÏ—Žôä:ÏÞÎӛ鰚lCO/Êk»ÓüAÏl6Q¿Z1?{™Ù_™Ù5Ç¥j|ö5³7ލ~AO®,äTWåÍ÷&?t=ÞÊ«l¦‡fÜ,±ryyËgOå5áø5êW+åõ†Š©h|³Äiå?÷áÂgŸä-Ÿ»ÖS¦Œª´—CÛŒ4§žÞL‡…VÑäÏðŸVxFOë×&Û±h·HÚ“â°& ܳ‡ffWšÙË’—lf/¢8cà-föoÉÿ¿\Òý `‚`°ÄÑ 53;ÞÌîŒ/ßÅÌÎ#:€ ê)5¶æZï°–I—øä^â6>NÈÊQÖ¯²FèföºäåßÈõù ùÈ’Ñ´?µòT• ÐQ\–IÖªz Ýe|ˆKîø4£®Ùœ)Ÿ¯¢9h…kÊ–WCíN^m;›±Î¹’66Pß×*ÖsszôÑþ4“ט n87ÓyÎÉpŽ+ÍìËKÎøx‹QNÎÊtžó©Ò­ð'ÎêW•Ñ ífvBÒ‰ÝßÌNsVß¡_íO½¼îË>Am?ï|¹AÒi™ct²¤«*h¹EÒ’î×DyUˆË©¹¯ÂjÆ'kŒ¼íc’h:NÒ·$­VˆÏ’Δ´4ôúž+é2IkeÛêVÕ}ÁLÒ;’÷K:ÌA}olŸ²Eúá1픩ýÉÓŸŠ±?!L‡&€ Á\o‰,ÍXôTÕDy¡Çk>WÑIyGOÕﬢ§‰ïR|Èç âî0L‡À(Y&Ðgâ„ÆÎYÐÕ\ôF‚ ›‘tOIgHúI×JÚ6¶eÉËÛ$]cq†¤{‘%þ ‹5A£ã¿·¤ïÏyPr“¦ÃÅcNf²Ë+CoäìZO“xŒŸ9HÒÍÉqï*ù[>”{¤‡T^É9O’´¥b}¿-þ÷ôû”'%ÐÌþ‹™í5¶5:ñç3ÛËÌ3³$oÿ2ÖÃë4V°c”‡ã3ŽIÏS•ã3èyz&-§eÐr„ò‚ ‰ Jô<¯pìëå3Z^/ÌU¹êKLÒ“¯9´Å~ÌÕtØmHäÝ„óðk‚.ÉTÇ.Δ8_ɤ站ô|#c'q=_ϤåjL&È Ú ékɱ›%í=ç˜ý$}/9æs’Â@Ëë꘠•äk6`‚vj[Nä­à<üš tˆu¹FÞ™)q¶W­P=Û¨àË5+êôÜYGOËÀž…vxC ߉ ê‰ J4=VÒZrü™s>~Z§$ýìó§æï¸°P&͈ôÌq3’cD§Ñàùrjò\é=è%Ÿûg‚]žÇ$c3Å0=Ôü©ñ;v3@MÉÁ §½ÆÑi`‚0Aäsw&èqÑþ:_HïÇÏìQ˜ž¾RÒ]1Aó &?†[äÀ ñ®š˜ÙË’—ÁÌ6>úb3;<ùÿç‡~Dl€Ììˆä¥‹Ìì‰Mvòf¶òÒvJa7îHâµá`$ˆ‘ F‚ b$hš¶%I_LÎs‹¤ûÄ÷´¾ qäcCÏŸ\#@MM¸KïÛŒ´ì¦oK"ñ)=õ &éC6A·gZˆ¼’)Ø·gj„¶åÖSeaoÎuy'&h0znoØÝVµÓÇ=¢p³Æ‡ãëŸI^ÛÚÄ­ØnYªQ^[»4@‰ž¬&(™–¼¤ã û½´›¾·$¯1»¤=ZÔ°güÞÅ» ïtCÌ›S$ÝgÎñÿ½îÝĽ ªÉ7‡Þ‰u£¨çÒš®•t &¨µüÙV¥SMFF²uªžG‚ ï7Äe’66˜?ÿéé–ô¢‘™ðoîP.4§=üФ»c‚vÓw÷YÛ¾´ðýGJúΜT]•ô I÷6Z–t€¤'KúûA®ijÈmÂ5£¨ç9™´œ„ j%>šœò%}erì'Fd‚ˆ;@Oâ[’öj0~ß‹ Êi€4AwJzC£Ò}Xì…õú8Ó¶ ’'SïÕÝ^367ÔÝ}¸êpýœB¿6·G1zÉŒ+åEÙ2Pt»3ô@I·&W\OZð¸_I¦fn“ô3mǧíé°Dã[çäîé çÐÑ’¾©j©È=rçÂ-Щ~¼©ºžm”ô±G‚Ö¹@Ò¯Æ Œ=b»t‚¤O/çWJzêXF‚–$ç‘ åŸ{è§ÿ8‡•rç(#AÍë0ºp­f’~ó]ħ푠®×yË÷if¦­ghÚ+N›¼¤0ÝûJLÐÌÑÜ­’^,éЦF3'|ÿw%=aö攘W7Æ~ìš8ö‡mhuc‚úÞˆt¹°5~öÕ…Æéßrlç?VS2”œ÷¦äÔŸ4}ì2ûùô©®â3¶»Ã¼› ® Ð}/N´| ´›¾ô1G/êàûïf€ jÑí¥ÝŸÅv&$éQñJp×LùÜ9Ég¶KzüˆLг çùãÂû§ÞÚÈF‚Ü DßO'znÅí¦ïG‰ÄŸÂ}`‚k‚’Ï?®°­ÿwf=4|”œûÄäôk’~½ðþ‘…Nî¹]Ægl;F;7A® P¢oOvŒ^L_[·Å&¨Ó}^â1o.$ÿK1Aã6AÉùßWX0ßøú¡’~˜¼÷w]ÇglÏsl‚Ü F„ÇfÀPMP®§Èwi‚ö)ìÍp‹¤{:«”k5A«^6ÿœrþýâ^7ë|5®%ûäµïJ:°ËúoëMÙ0­ ŸÝ®ž>E>s¾çÚ<Ö­J4¦7„ìÕQ¼=>E~¯´^à<0A‹&ÎW3mkp}W•,÷k=oˤçšLñùî@MÐ%™â³¹Až´gÈzçÙÔ]…™ë׬Mó2AÉ*_Kã>kú81’ßKŽù\Ž2ׯ͹ëOM®i0§Ò;‚ Ú©íðDÞu8?x€ê™™ÎóÁ®~@| äGÍì½ÉËÇK:<ÃéÏË$óüæ÷Y™Îsnƒ¹ñE3›6EúŠÂç{P¿¦qFÉÏŸdf?—üÿ !„msâw³™¥ë¥ofÇeÒžçü©Á;ðͤJHÚ¸.+·õÛ»¾‘äˆÛþ)Í ÒÃ'sMPR »$Zшt˜h4@›QóÚj4¦u]v“ò†üÁa€0BMæéá—2k‚¼ζU÷ûS2l~™¤ïy(;á*Cè¼®»j0@îr$8«Ç š bIvšh…Dc•>DŠŸ™ô¹±(Äxk@Á±Âa„ÊôMI΀ǼYdMôÇÍšú³šÔy¥*ÀøX&úÂì”]à* `¤,M¸Z>VÒfI«*Ïõ’NË|õîJ7<ÅG’k=V˜ÂM¦'¾î0>En–ô~I‡ÔÐt²¤+»øî)ñ©ª'»&oz`nyiÒ´?z`nA%£±Ã@O;zŠ\!iß šNìê»§ÄçÄ.ãáY`‚ tI¦J¿9“6Wz–›øÄN=íè™ÄÑ4mîê»§Ägs—ñð¬0AÐ »,ŒŽSëSd{„V*ªÕÂr†$r¥Ça¥wŸxªÊz ‹–G©§í»ŽÒüézíX1>è:ôNö âf‹°4íÿËv¨6äÖçDÛò£¼F¥§©úßz€J€ ÀT5A[×ÿTgÄÖLú¼éñå5`=55÷±^lmñ·÷Qô4ŸÁ/ŻòÝÊ—c5¼7=Þ🠤@OƒzÌl{aï\ùãän,uÏz _ùìQL†é0ÀY¾á»m™ÎãM7(¯qê1ôŒR?™YÓaË!„Õ2'Ë=üçM7<ÅgÂôA)=¹7 죞ºšëäÃé°F{ßô@ÿÚ{¦ÃúÁÔé0ož¨_ñAO}=cÎyò:5A˜ L&¢… úÖZü.ô&fE‹st…óo©ø]9¾»I=¹4yÓ˜ (p¥™}¸ÂqçtøÝMéɩɛÈMº—AzÙRõ\uŽÏ}¾Üz<–—øHªu¾ºÇAOñ3 p‹¤ $ݯ†®“%]Uad£öwOùýUõd×äMô«½zÿ3vÙ,`Ò’¾Àð`: &_!az0<– aŒF‚`®bj †Hhò¢¯j»‰ô =èAzÐÓ¤3îË~åì-–QZçú¼èR}Ÿ¶ÛõŒ|LÐèÙ«¢ÂÏ. #õ½†"ozT¿0@ÝÚ \n2I`‹J WqB}Ça¤DÃèÜ…`„€úž·ŽM½Ð ”( €¶a&éˆø˜ŠuNdC7@KúRb€¾$é`¢˜ üñ:VÒfI«¨x½¤Ó2wèéW‡M|š‹$m—tD®¶‘÷*w\Ň€—ªï×Ìøw‡¤%ý£¤#1AÝÚ1ÊæL „ž~UxâÓ£ø`‚0A˜ —õý,LPwwI¦Fzs¦$BO¿*=ñéQ|0A˜ LÛúþxLP7—Ño¨‘Ô+™’¨²žB¥œ§•žødŠOüüÛ“Ïß’;>˜ L&¨Ñòº#ù‰·Júµä½ôß>’/éºäóŸÀuSp4Š4Òħãø$wƒ¥œ8äNŒüÁ ܽ¸ðޤǥ¦ „ ÂÑH.>Sî»pèùƒ ryIºÿtt¼1dµ\Z–±6Ð3^ifˆßjf¯"$½æª^ï¿™Ù{l×M@OÊ:ºAü¹2äJu|Wª}‹Ï´i°1\É“?ý‹#Aåâ=cèËÉGo—ôGÙ;vì "4&Ès|ty: 6–NŒüé¥ Jú/ÕÈŸ­#7AéÚ¡rkáÙa娯yzuògXñ9ÝÌîÿ¾Â¦Oƒ 5>Ð/.Mþ.½ùgrìÞ#cºlço0Aݲ7çéÕyÈŸÄ'öGÄë<3„pÑÈâýâLB…[^„nÆÀhH Ð_$/_4ÃåÄÛ4ÄV2¢?ñ !¼×ÌŽ±#BuîfûÈæ§“öàm’î–»‘aMP‰X±F za=­è!z3K‡¹ßQòn0êõkHñjyMd}ê+á#fö_mǨðÍìÉ{µo™çÙaåØlf‡Å¿WjLÕ^†žVô?ýÏ>Éë'”Ü)–úEþtIטÙAN5ÔòÚÍüLáÉñß$jožÈHP9ÎÊtžsÑÓŠò‡ø ‡üé*>çQ^ò3{y÷ÅÝaåâuœ¤ož ³(7H:-§sFO¿®tˆÏÌØ!i«ª“=>Ô/êW =AÒ âÞVk”×neµè³Ã/éï$Ý,i»¤Í’Îɶi"&4ˆ“ôƒ¤]ü’¤ƒ‰4Ýa‚ ktTb€V¦mŠ€ ¨ £0‚58#6cëë™ =èiNå…ž1è©z¾ºôEù“¤0çèÔ%…®JrJCîôo&UBÒÆuY©páæ¦ÌŠúh:)·ñ§oòÏB&ȹ"É&wi +1›ÖAtÙqLÊò§FÞͨ,¼&(-Dw”­÷§$™MíÔ§”wN‰wJ:½RÛQµƒ§ƹËWýh€&È[¢¾?Œ¹ÿšP¡Ði¬7Ø“>7Ú…˜Ï»Ä #ä¶ÜÌK9a€0B åÍ¢ÓaÐT,ËiÁË|Öú:5€ñÁSäv„Ù)7cà`¼,M¸Z>6> ¬Êè®oà†®ôxÃS|âãÜê±Ât`%Ӥׯ§ÈÍ’Þ/éÜí_AÓÉ’®¬óÝ™ãSUOvMÞôÀÜòÚåœè… *ùûåaS&m®ô8,;7ñ‰zÚÑSä Iû–5B’NÌõÝ™âsbÎx I`‚ tI¦J¿9“6Wz–›øÄN=íè™ÄÑLÐæ\ß)>›sÆcHzͰËÂè8e°>E¶Ga¥¢¡Z !,gH"WzVz7ñ‰§ª¬§°hyzÌl’ž‰ ´‹„æÎŸ®×Žãƒ¨sAïd/;n¶èKÓþ¿l‡Z`Cn}Nô¸-?Ê«_z¦ ®ë?z|ë*9&PÕm]ÿCRu[3éó¦Ç”WOõØ댦iÎx³ÉÖæóPõ@OóüR¼;,[ëšc5¼7=ÞðŸYO±GO~=f¶ÝÌö.¡fþ8¹«N|¶‡öª(×rw, Óa€ ²|ÃwÛ2Ç›oP^ãÔcè¥  3³¦Ã–C«eN–{øÏ›oxŠÏ„éƒRzŠÇAíØŒo·NÒ\œùÌ‘ÎΧÃJçóõ@ÿÚ{¦ÃúÁÔé0ož¨_ñAÏ\V«jC{Jþ@§&€ À@C´°YâÚ¼ïjô&ÌÌlEÛq§ÒÎ8Z’-ú/²eÒwUàèL¿7—ž\š¼éL¸ÒÌ>\á¸s:üî¦ôäÔäMä&ÝË ½l©z®:Çç>_n=ËÎK|âCåóÕ=¾ozfŒÒ”áIHº_…Q u]'KºªÂÈÆÎïΘÏuôd×äMô«½zÿ3vÙ,`Ò’¾Àð`: &_!az0<– aŒF‚`®bj †Hhò¢¯j»‰ô =èAzÐÓ´îË|åBi!wÚB¢©ë+ú¨§s¹ë»3mÔ³~ååÕ1˜ FÛ1†šRÑ©ð³@FŒêðëååÖår“»&°¼ ucæÀ…)Æ —õÝCÓ¡à&¨ïIÝiÃ8ϵ-iREu#!:T åå¢@脠׊¤#âc*Öy8‘L Ý,éK‰ú’¤ƒ‰`‚òÇëXI›%­Vx âõ’NËÜ §_6ñi.>’´]Ò¹ÚFPÜ«ÜqŽ b¬ŽQ6eªôèéW#M|zL&4|¸E¾\R^bf‡e8Õ·Bª[éÍ ==j¤‰O¿âS÷6øœ·Ñ×]L;ôŸãã)€‘ \±J‡è7Ôpö+HžÂ IDAT™®|*ë)\ù NÓ+Uâ“)>ñóoO>Kîø0ÄH#AÇ[ä+Æ+„°Zã<ÐÓŠòg€ñ‰}ÂfvBòòÿA|c% ƒÍììäå‹ÌìíD0A0t^ifˆßjf¯"$€ €Á2m,„pÑL ÝýEòòE!¦ÁÀ+kIþÖék·JL¶qž^‡üV|N7³ûÇ¿¯°éÓ`tàK“¿Koþ™»7¡ÄyaoÎÓ«ó?ˆO2 tDòò3gLƒÑi€Î$˜ €Ê̘»¨…¯ßê,[ɈþÄ'„ð^3;ÆvŒ­Õ8#› 72lÄT"VlžÖ=;sâSþ÷Å×/LÞº|Ò³Á†¾Ùù3¾ø°Yb;0n;63;ÑŸÀÀ Ðfö†äåw`€càt3Û'þýeÛ±I"&MqìE!„k `‚º#ÝüªÎCWÑÓŠò§§ñ±zÓ`Ô/ê×â3ÔòÂõÍÉß+56¿º¬k=f6=ƒÉŸÆgŸäïú–Ï#©ïÔ¯HºF5Aya‚zÈY™Îs.zZÑCþô?]Åç<Ê«°Aéx'é[’V+˜û$–Q zú•;ÄgvlŽ´µÆÅsöøP¿¨_5ôI/ˆ{[­Q^˜ €i×Ã$ý é¾$é`¢˜ º :*1@+“v…Àd€…Ñ€  Áœ !T:.§žªšÒã->èAzЃôŒUO¤Ã)@.í¤b‡¾g£âM@Õº/úw¾ÝvNO«K]×±±ƒ ^¥ŸëéX0@%òÈ•ò2¡®M½=Àš Á â{Ü ˆš{eôã¯ö¦‡ü…J)äÅÔǯt£0Aƒ4@!„‰£?“> ¯V»íÅ0BP¯],æpè*&! P—m Óaê쳦¾0@»v’\VÀè`:¬ÿ&¶ö¿ÌZŽ•´¹â ¯oà“Þôœ,éÊ Zn–ô~I‡ \›|†^¶…Ô/`$Ô~ÇÏsŒò°i zNÌ å IûTF¨_ èL&¨tI&Ó±y z6gÒsô@õ`‚€úÕ€˜ £{^ñw)̒Řsÿ•x®Uûñë!„•’ǯ Z !,Y“;À¼éÉ’‹0Ú¶ú¥aMÐPܬ:¶”èY©qž C×Cý|>S¿HL&µqrGÌÖDφçª'l%—a@P¿ 4܆ñÙ‘yîSF=aÈzêžïmföì¼ñ mæKî\¦ £-4ÇÏߣõ #A=åm„nÈ5ü» =³yv#Äp=ÐþŒGL`™ ‡:›%fbcš[!„Õ’ZÖí== ÓàˆÏƪ¹ã-—ªÖ¯éIm k‚úKÝ]vØ1ºòxî9ô!è)c~žÝr|¼å2Ðk‚ Œ8çÙL`‚zm~0>˜ Ô‚5A=†5A½Ó“>Õ¾ÔBí†rÇ›žlù£l ©_Pn‘h-Éß+ªÎÑÕ³K'RçP¿¨_€ ðÅ9Îq¥™}x z¨_Ô¯v—M}.»ZW¾9¯œãyvÒöñÞõ$ç6=0¿œ¦•É"Ÿ‚¦Ã`bÇîa=sõìf4º4ÞôÀüršd0Ú4@]ëa$ú0âžWÒ]oz`ñrê²ÜºÐƒ ŒÇÀŒ‡6 ~›¡Ñ˜hîz€1š · *>0²$×K:5ç ½éÞXšmékº=-û;rèÉ».ú›Yú›ÒS5fè_}÷X¿ÆÞ_´¥“ú>ç8î&‹˜Ž¢˜uLva‘ì›Úåžé0€²ˆYH FÛhÖäc~ U§¢Œ&æ4æUÞJ_f#°¦cP·nÍËÇ.§:YPÞÿ>ÁÃG›1A#¿Úºòþ[è( j~Ö5÷€ E§½èr÷‹¡‰»¯\ô2%6éJyÞ.¿ÔgàÂv³®ZÇ“I±*ujÞçúžëmÀÝaS®Fúô”p(#A5œ©§!ûIê¬5\-ú¹Y/›6¿“òï¿IŸ÷9ÊD#Y²mJK—Ó>‹Þ._æõ*¿e‘µ[mß²ý­ÛéôjÛS­uêÔr·ëÍP›6ÚMjŸµ±oz˜ƒV+Øú¿¦Y¤RL[c±ÈÚ‹²¿¡ìU<À¬¼629ÀA.¾ì9»6BÓÞ+ó”庿a֨ϼ;`œÆgQs!X ¦Ã0:Ù¿³Ì¨GÓ:Ël,·è9r˜’õsNšÆh3>¹ |—mИÛߦuwqáÚ†LPOɵ7P¶Êœ®‡zyXç¼rÄäÁ­ ¢¡æ•S;åí$@3°&F‰Ç»­Ê,æÀÐׇé°$̬Nyz•õ>»—Ç'¶³5À°qk‚è¸ûש—1iž:¶>éÀ<@ß/Â<õŒ $¡½%›×õ-U®ìsÝ –+&!àŒ‹æºí±·6º+=¬ ‚Ñ5˜¹´•Õßô燖]7ÒL… L¦c4ZÊvjU6[Ìõ»Ó}„†‚·¨ I–NvR š2«CÕ´5ÔïæaMøº2s¶g*Àpë&h(1>££¹¢L3&hœ€>ÊÌ4íjÝÞžõteЃOzêÖKÊkíáPÚgoùŒž†sLÌWÀYžfˆ¸m† ›%&`4°&Æ#A0J¦.Œ¶·Ï—"çZê(ÅÕBíƒf¹~F®¼&ôT9gîgÿäàb™ÕÕÒDuôT¿<ê‹Ô¯6êÏRÎ ?䙵\¿Í[œ™ íWþ õ÷xª_Ï0Æö£úÃtÐ)óûF©}êc3Ê CájÇÓ®Þ¦‹ÆP~CÓSwÊÒ›¾¦µyÓŸ:¿—iÚLhzÊèn£ã ¼ã3C4í»Û,'LV¯õ`|úU–žrƒîÜûøÝ]…uÝcýÄÀ(ÏX:ûôw.£1­*Þ¶Õ™¾­Tëa]!ñ{ü&ÊhÑr !ìü7FÊþþ2±íc}+ŽmtV^=U2éþÆªŽ¦Ü¥Ç ÉßšX,Þ/½}‰OÙ¢.êYÓ±d:  wö•UfhÚw¶ºct„é0*%Wª@‡@þ ‚¶§rˆUÿê Óa#ìð›Jô:qiB“7=ut©!÷¯ùõÊ£ö»/w‡yÍÓ6ûX¦ÃFz•K# C3ÎÜù”ßø =F˜ ”Âõ×ø´ýݘ ¬!êbÔ»ÏÆÓ÷b‚`f¨+C„ññ &¨’¸{ÈâÓjLu ™²éŒ(Cßñ¡|ÆeÆPÞ\XLf‰À˜ âÐ h”#Hº M™Ñ )>lÚ ¥ê¨$j*,@q$ˆîú ÓaPí*˜ €þÁ-ò°0ŒþÀ`$ÆiêÍLÞ¶Ï­ÇÛ¾<^÷ ªª =胞®F@hˆOÝÔ÷9Çqwذ‰ §$Qz˜Ãa€ Œ‡…ï+3Gÿ†Â€wæ® êòA¡M±4ËüÔ]ÅÍ“˜À+ËM›—õs•*N¡ØŽÛùK“k4Ê©3³cÍìåfv¨•_ãuƒ™B8chzræqe†žZªœ¯îñMŸ¯+šúuÎ;)ïrޖÚ(ó[sèi*‡ºÔ³ÛtØ,a‹|a®=6r™ŽÌ¢7=ǘÙ{2äãI!„· PO'ÍØô`‚0A] åÕæ,H~ÙC}ïZÏÂ&(‡ã¬pLÐl=—˜Ùaòè[!„ P&„ rb‚šÜ„„ Êb‚r»ô:ç«{GQC¢7=«öã)§åÂjÅß³BX ·bך<Ç4ÔÄÔnßê{Ù¸TiKê¶?MÖ¯®õ,מŠJ£Q6ÿÖ¥$æ«5γa z\Â]“06š4@}¯ïeûÏâçûÞþt­giÑ$ô6Ÿµ#'·œ­Ë·À”î<°´ˆ;ó’Ä µ gWÿsMë @`i‚B»ü? ާFÇ‹o 1ñsyÑg€'–ëÛjf‹u¨íF2ù¾NõLøžzjjØš;>]êéCC݇ŽcQ ­ý£u Â7¼O‡íf8ƪgJ#³1S#³±¡øt­`”fcÙq…•3äMë+,®ø0?ƒ4Aó*dÝ[æ'-‚Îñ|šŒ¨U=éó×h 1‰46‡×wÈT^Årq°·À.,‚~40ë ‡ÇÅèÞ5â…a +@)”shî"À ôÆ•IæªïÍûJoõ™t¨£Aà…åԬ̛¿mÈì`€ kÁ3KóŒLÉ›èXKt„.+±'=ÀU'ñ¡¼úf„Úúä3ù\†å2"íÉü4ù-föÀuR1X9ÍŠ7=n+þÐô }måÕÕïð²Ù&ë—Æ™ÏKeaý1³þeægeué À… ƒ%çÉúv3{¾™}o(zhú×à±ÌÈÃq•——ònjZŒ|gû“ãÞô|ÝÌšAË5!„{gÈoz²·û9MP׺$¹)/Oz¦š ²Õd#==¹5õi¼‹ Ô/Y1³ ñ÷0³•YÇN1ßë/®„ö¨Ÿ]ô„V*Ä7§ž;íÇë8«êÉ™?•õ´ÑÎ`‚vÓ°KyÅüÞEW›muQOWù³ÔÔȉ§QôøÒÇ¢E˜Â†äï•Fg‘Æz9§ž t=ËõØõÀâ9¸2©îLj›œÂs‘?,H×ak>ÀÞ@õ‹Ô!ǃkÈ€ê1“Â@o®ê½/€ð\ÊÔ›±¡¥E~ãCyÁ@Øšü½¡æ¹Vsê‘äAÏjF=6@=´³ ÍjÙúBØíßÐògiVòtµ)a_Œ§yØLši˜GTN“¿W,n¾gÉ&|Å׬°9_rü·së)³qI¢/§ž-5õ\kf§d,¯Êz"×JÊ©‡QÁ~•— =L‡Ñ!":@=oªyü=Íìu’NÊô›¼éò§R'˜uÇè&F6º8>×HË›ÑEy !š<.÷ïkúóñ˜Û3ì{CÆmÝèIâù’ø(Ž:lšž6êLŸÚ¿:\•— =ÓLPß“¦éN¬¬1ñ8„ jWoÙ¼ðt‘Ñ’ JYžôÛãß•tGáók ‡vÑ3ãsõtÑþÌ9~U'õ+›žÜñª ÊTV‡¤§›%zcV|¦½Ç´”¹Û‚» lÖæiÿnf¯/¼öFI¡Á²[™ñÞD=fÚÊ£í~‡°,£_ +& a¤¢Ëéƒ>Œ1ÔÞEó¢éüéÁHÐÔsÄ×ö’tIᘣš Zà³õ8{ï¿§ozÚ®?# ÒôàÀ[¼Rc4 bh!¶›Ùñ¶ëX¯‘´wGå:Q™íMQùiƒ0ATBpl„0@óã•üÿçÍì­É[÷5³çw¨Ó•X ÞNzм‡F×óSäK<Û­Aj»¼»ü>ù³hn´•/eâSÖ˜U}aX;,ø=û˜Ù7¢á03»ÕÌB¸.CŒ”ü†°à1èÉ”Ïë'Qa©Ëúœ[O޼Rû×Ðoh´¼ºÒ³Ô£èÝ&€M&{n‹'êçF[ fÙXäŽ]˜ßjfÏIþ3ûß¹;ÐyÓˆžÈ56aƒÈ›%®sUN=UhH»‹Mgmà5uîCÏ]^^ô0ÖAgÇÚ X¤‘fláø|ÔÌÞ›¼u¼¤Ã;”Þ”žó2é;?Óy¼éò§ú’ÇQO›fØ£#«&›76¿.cämÆcýªû’ÏWºÛ#{wI×%§øx†ØL½[mMè ’^ érIk.žo”t¦¤¥L¹ãFO›m¯÷z=Cù3ébj}MЀ†ü¸šh±õÜævÑ'ô)>½¥×ÁåŽOñ£i蚈ßò*+F`œÐþèLP57 âÓãø´5‚·LŒM2!n)Кî«û™CŽ‘'=©–*ç«{|Óç늦~GóNÊ»œ·¥{)¯6ÊüVOý…'=Åé°§›Ùû2ü¾W„ÎÈ oz\vèi¾ò¶wˆ'=˜ LP—Ècyµ9“RåôÓMÐ×Íì¡t]B¸w† yÓCa‚Ѓ ÂU8o“›Pb‚è/ªR|vØÏ$ïaf+'Õ.zB+^*EŽ!`OII||Çg,Z`\Œ%÷fýβ£c]L#5mêºÔ³4Í…VB]'é.z¨¸4lÄ 45 6„ú^|¿ìçûÞþt­‡¨@«À ˜ ÕÕ?&…Q è› ZM’wƒ}ÞôP±iˆÉâ5Ê‹Q ðl‚¶$¯¨<×J:%£¾ÊzlǃU¯5³SšªøeþA÷ µ§òêCþt©ú5Œú…‚¾™ 7Õ<ß=Íìu’Nʤϛ€ÞŒºÀ‚&(:ôóÍì¥fvCÍó>?“>oz:1? €üìÜ1:ÓÊz-] !lÈp>+˜´¾ë©tlçëZO“ññ#Ïz†P^Ô¯vÇ¢åÕÖ”XßËËÛç½×¯œzšº;,ëy3Ý›hÓé³9ånÊ‹-ð·È†0AMÃh`‚`ð0c4AÞl~V=l¾‡®Êòªg„šÜc ÈçEY.¹ÆÌÊpÞ«2黯Ìʤ«†^Ñêèiún!T´¡_ÍÒqP^]ý/í#VãÌçâHÐy™Î{~¦óxÓ\HÀ@X.üÿkÍl»™ý±™ÝÏÌÊfíMÑp¼.“>ozÜ4!„,îy¨·çŠÏPïœñÿåå%‡'ýŽ£Aäó8ÛŸ,y-2Fw‡&€ Á\]uåöXôTÕDy¡Çk>WÑKy¡=èéJO¤ÀUt% q@”)›®ÊÌ›ž®À`€ˆM:,ÎÆt¥Ë›ž.`M|ïËcýŸëQ‡Å’–M§eæMO,Óœ`€2j!G¦Ä!„°¾[²›oz0AýºšGÏäŽß[G’xu£u#Da‚Úêävc©èRëþË횇¦'§&/zréhJSÇMO“Ÿ¯[þ çÏI’¶HZUyn‹ÿ==c™¹Õc;¦S&þkCOÄE|Óu’™m1³Õ9±]þ¸1Èëw‡åìœs¸î!ëÉ¡ÉS|šXSSݽ˜rçOõ´ùù6Ž[ð¼/4³³3ås@zЃ Âa‚0A˜ …shÖ±UŽ)Ÿ«Íì`GzÐ3=®Xß.ºîpr“ÃõCГ[S“Ó~ äXëz™Ë{¾¦?_%OÚšj®pì……i„ ;®­è)QnÙõx.¯²9:Öüqe‚è4š9Ÿ§5/]¡>|ùܾ *clÚ\ÿW·Ã貎¶©g‘˜5¥Ç{yÕ1ˆcÉL&„ Â-°P¾í› êv]ÕѶõ,`\Óã½¼êıä&„ ÂÞ-2ÊÓÆôj…ß;µÃ袎¶­g^y4­Ç{yuïùƒ Âa‚0A˜ FzÚZ_Vw G—köºÐ3Ç´6®Ç{yuïùãÎy[ˆì­Ó`a4&ÔÞïíÚ•Âè²~¶©g‘}¾ÚÒSwQvÛ&(ù碼ºÐãÞu½ w4” 1AþM´‡úÕ¶ ú¿íÝQŽÛ6P1˜Mt·íº‚n°ŸÝÁëOb8ƒŒ"Ó$õHžÌG°sMÉâ5%y®îã#öŸW&ŒQÇÄ»ódÛk¾ñQ‚” 4y” %H ê7 z¿Ë#Ï4y–.A»Lbþl†ôî¶êù8%¨ë{kø„!<+噢%È5å'ùYv%h|Þ™¿ p÷k‚žþÿK_7ªDßõEv¯^SrGãS7>[ ¯JÐ “ôŸœgØ” {òÎúe€;ßV3¡Žøvç7ùfšàÏ|ã£)AJ¤UŽÑèï ª™À¬Ý:É#¤M]„” ûòNúe€Û~cẗ́ѹÝ>É#¤5ûÔ¯íU‚ÎöŒ_xw ºy¥¬jÂèxüI1ýî¢ÚLy²?mÅãÿ;ŽãïÿK8’KIDATã8þj4ŽòL²½ì? œ[å}>*Sã½#Ã3]ÎaNÊåÛÎoL}¢6¹£ }¬¸“)>&yãÀo…ÆlÈÝaÀ–ÊÑq1¨vIPyä‘Gyä‘§w§Ã€-9(AJ€ (AJ€ (AJ€ (AJ€ (AJ€(AJ€ (AJ€ (AJ€0\9Ž#"¢Ï“—Rõ8yä‘Gyä‘GžÞyú5 €Äœ” %@ P‚” %@ P‚” %@ P‚” %@ P‚” %@ ” %@ P‚” %@ P‚” %@ ®ÇÑçÉK©zœ<òÈ#<òÈ#Oï<ý@bN‡J€ (AJ€ (AJ€ (AJ€ (AJ€ J€ (AJ€ (AJ€  WŽãˆˆèóä¥T=Nyä‘Gyä‘§wž~  1§Ã%@ P‚” %@ P‚” %@ P‚” %@ P‚” %@ P‚%@ P‚” %@ P‚” %@ P‚†+ÇqDDôyòRª'<òôËg{É#<ò|\DD©}4@GÏÌŒ‡©ìù€s†€ÑÄÝǯ>‰˜Àr*¥<¶WD¤ÚN ÌÏ5Al[Ì®üžE(ÛvR€@ ‚i P)åñ£)B ìÉé0†L\W~5ûÓ®9€÷Y ¶d%ˆfZœ¦hù)û,ÏÕkƒFåÉ2f³ï?-Ç#[ =+A¤š0ï•#Xÿ=?â}n%ˆÛ'xãƒÞó¿ú}ïã¥LÃíðà=¯ ìz@´ s{õ=Üú=¯ °\aR‚” `FV€^ïy%P€€ôÇß (CJ°úÁî3«@°³÷{«"¤ ¶õ|ï+AÀ–” «@À¨c€ÄI ã“íà‡÷ù·åóO†"ãc¬°Ï°#+A€µZ²XõÔ‡ñ™kœñþb“mQlyà&_ºpXz³,û)àŒ £…Ø’• @ ØE9Ž#z}§Bí2·<òÈÓ/Ÿí%<òÈóýqî²z>`f+AÀ–¬ÑL‹Ó-?eŸå¹zmШï•# +AÜ>Á @ x±)•€ «± (A€¤J€,È*  (AJ° «@€(@  (AÀ‚¬JKMbŸZ Þ_ôòap 2>Æ û ;²(AP«Õ)‹UO}Ÿ¹Æï/6Ùw""Š-Üä«SK@oV‚€e?Ùœqa4 ð[²(A»ø ̈´óåiâIEND®B`‚fs-uae-2.2.3+dfsg/share/fs-uae/input/0000755000175000017500000000000012162366653017474 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/share/fs-uae/input/gamtec_ltd/0000755000175000017500000000000012162366653021577 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/share/fs-uae/input/gamtec_ltd/smartjoy_plus_adapter.ini0000644000175000017500000000022612162366653026713 0ustar glaubitzglaubitz[device] name = GAMTEC.,LTD SMARTJOY PLUS ADAPTER type = joystick/gamepad [default] include = wisegroup_ltd/tigergame_ps_ps2_game_controller_adapter fs-uae-2.2.3+dfsg/share/fs-uae/input/controller_wireless_gamepad_f710_10_5_1_0_windows.conf0000644000175000017500000000122512162366653031613 0ustar glaubitzglaubitz# Controller (Wireless Gamepad F710) [default] include = universal_gamepad hat_0_left = dpad_left hat_0_right = dpad_right hat_0_up = dpad_up hat_0_down = dpad_down axis_0_neg = lstick_left axis_0_pos = lstick_right axis_1_neg = lstick_up axis_1_pos = lstick_down button_8 = lstick_button axis_4_neg = rstick_left axis_4_pos = rstick_right axis_3_neg = rstick_up axis_3_pos = rstick_down button_9 = rstick_button button_2 = west_button button_3 = north_button button_1 = east_button button_0 = south_button button_6 = select_button button_7 = start_button button_4 = left_shoulder axis_2_pos = left_trigger button_5 = right_shoulder axis_2_neg = right_trigger fs-uae-2.2.3+dfsg/share/fs-uae/input/controller_gamepad_f310_10_5_1_0_windows.conf0000644000175000017500000000121412162366653027670 0ustar glaubitzglaubitz# Controller (Gamepad F310) [default] include = universal_gamepad hat_0_left = dpad_left hat_0_right = dpad_right hat_0_up = dpad_up hat_0_down = dpad_down axis_0_neg = lstick_left axis_0_pos = lstick_right axis_1_neg = lstick_up axis_1_pos = lstick_down button_8 = lstick_button axis_4_neg = rstick_left axis_4_pos = rstick_right axis_3_neg = rstick_up axis_3_pos = rstick_down button_9 = rstick_button button_2 = west_button button_3 = north_button button_1 = east_button button_0 = south_button button_6 = select_button button_7 = start_button button_4 = left_shoulder axis_2_pos = left_trigger button_5 = right_shoulder axis_2_neg = right_trigger fs-uae-2.2.3+dfsg/share/fs-uae/input/mad_catz/0000755000175000017500000000000012162366653021256 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/share/fs-uae/input/mad_catz/wired_xbox_360_controller_sfiv.ini0000644000175000017500000000025012162366653030010 0ustar glaubitzglaubitz# Device: Mad Catz Wired Xbox 360 Controller (Linux) [device] name = Mad Catz Xbox 360 Controller type = joystick/gamepad [default] include = microsoft/x_box_360_pad fs-uae-2.2.3+dfsg/share/fs-uae/input/speed_link_competition_pro_4_2_0_0_windows.conf0000644000175000017500000000041112162366653030622 0ustar glaubitzglaubitz# name: SPEED-LINK Competition Pro [default] include = universal_gamepad axis_0_neg = d_pad_left axis_0_pos = d_pad_right axis_1_neg = d_pad_up axis_1_pos = d_pad_down button_1 = east_button button_0 = south_button button_2 = select_button button_3 = start_button fs-uae-2.2.3+dfsg/share/fs-uae/input/microsoft/0000755000175000017500000000000012162366653021501 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/share/fs-uae/input/microsoft/wireless_360_controller.ini0000644000175000017500000000152512162366653026675 0ustar glaubitzglaubitz# Device: Xbox 360 Wireless Controller (Mac OS X) # Requires driver found at # http://tattiebogle.net/index.php/ProjectRoot/Xbox360Controller/OsxDriver [device] name = Xbox 360 Controller type = joystick/gamepad [default] include = common/gamepad axis_0_neg = lstick_left axis_0_pos = lstick_right axis_1_neg = lstick_up axis_1_pos = lstick_down axis_2_neg = rstick_left axis_2_pos = rstick_right axis_3_neg = rstick_up axis_3_pos = rstick_down axis_4_pos = left_trigger axis_5_pos = right_trigger button_0 = dpad_up button_1 = dpad_down button_2 = dpad_left button_3 = dpad_right button_4 = start_menu button_5 = select_button button_6 = lstick_button button_7 = rstick_button button_8 = left_shoulder button_9 = right_shoulder button_10 = menu_button button_11 = south_button button_12 = east_button button_13 = west_button button_14 = north_button fs-uae-2.2.3+dfsg/share/fs-uae/input/microsoft/controller_xbox_360_wireless_receiver_for_windows.ini0000644000175000017500000000036212162366653034237 0ustar glaubitzglaubitz# Device: Xbox 360 Wireless Controller (Windows) # (with Wireless Receiver) # May require wireless receiver drivers to be installed first [device] name = Xbox 360 Controller type = joystick/gamepad [default] include = common/xinput_gamepad fs-uae-2.2.3+dfsg/share/fs-uae/input/microsoft/xbox_360_wireless_receiver_for_windows_controller.ini0000644000175000017500000000036212162366653034237 0ustar glaubitzglaubitz# Device: Xbox 360 Wireless Controller (Windows) # (with Wireless Receiver) # May require wireless receiver drivers to be installed first [device] name = Xbox 360 Controller type = joystick/gamepad [default] include = common/xinput_gamepad fs-uae-2.2.3+dfsg/share/fs-uae/input/microsoft/controller.ini0000644000175000017500000000135712162366653024373 0ustar glaubitzglaubitz# Device: Xbox 360 Wired Controller (Mac OS X) [device] name = Xbox 360 Controller type = joystick/gamepad [default] include = common/gamepad axis_0_neg = lstick_left axis_0_pos = lstick_right axis_1_neg = lstick_up axis_1_pos = lstick_down axis_2_neg = rstick_left axis_2_pos = rstick_right axis_3_neg = rstick_up axis_3_pos = rstick_down axis_4_pos = left_trigger axis_5_pos = right_trigger button_0 = dpad_up button_1 = dpad_down button_2 = dpad_left button_3 = dpad_right button_8 = left_shoulder button_9 = right_shoulder button_5 = select_button button_4 = start_button button_10 = menu_button button_6 = lstick_button button_7 = rstick_button button_11 = south_button button_12 = east_button button_13Å = west_button button_14 = north_button fs-uae-2.2.3+dfsg/share/fs-uae/input/microsoft/x_box_360_pad.ini0000644000175000017500000000155312162366653024541 0ustar glaubitzglaubitz# Device: Xbox 360 Wired Controller (Linux) # Button mapping works with recent Linux versions. Older # versions need another mapping (you must create a custom # config) [device] name = Xbox 360 Controller type = joystick/gamepad [default] include = common/gamepad axis_0_neg = lstick_left axis_0_pos = lstick_right axis_1_neg = lstick_up axis_1_pos = lstick_down axis_2_pos = left_trigger axis_3_neg = rstick_up axis_3_pos = rstick_down axis_4_neg = rstick_left axis_4_pos = rstick_right axis_5_pos = right_trigger button_0 = south_button button_1 = east_button button_2 = west_button button_3 = north_button button_4 = left_shoulder button_5 = right_shoulder button_6 = select_button button_7 = start_button button_8 = menu_button button_9 = lstick_button button_10 = rstick_button hat_0_left = dpad_left hat_0_right = dpad_right hat_0_up = dpad_up hat_0_down = dpad_down fs-uae-2.2.3+dfsg/share/fs-uae/input/microsoft/controller_xbox_360_for_windows.ini0000644000175000017500000000030212162366653030430 0ustar glaubitzglaubitz# Device: Xbox 360 Wired Controller (Windows) # May require drivers to be installed first [device] name = Xbox 360 Controller type = joystick/gamepad [default] include = common/xinput_gamepad fs-uae-2.2.3+dfsg/share/fs-uae/input/microsoft/xbox_360_for_windows_controller.ini0000644000175000017500000000030212162366653030430 0ustar glaubitzglaubitz# Device: Xbox 360 Wired Controller (Windows) # May require drivers to be installed first [device] name = Xbox 360 Controller type = joystick/gamepad [default] include = common/xinput_gamepad fs-uae-2.2.3+dfsg/share/fs-uae/input/microsoft/xbox_360_wireless_receiver.ini0000644000175000017500000000155312162366653027357 0ustar glaubitzglaubitz# Device: Xbox 360 Wireless Controller (Linux) # Button mapping works with recent Linux versions. Older # versions need another mapping (you must create a custom # config) [device] name = Xbox 360 Controller type = joystick/gamepad [default] include = common/gamepad axis_0_neg = lstick_left axis_0_pos = lstick_right axis_1_neg = lstick_up axis_1_pos = lstick_down axis_2_pos = left_trigger axis_3_neg = rstick_up axis_3_pos = rstick_down axis_4_neg = rstick_left axis_4_pos = rstick_right axis_5_pos = right_trigger button_0 = south_button button_1 = east_button button_2 = west_button button_3 = north_button button_4 = left_shoulder button_5 = right_shoulder button_6 = select_button button_7 = start_button button_8 = menu_button button_9 = lstick_button button_10 = rstick_button button_11 = dpad_left button_12 = dpad_right button_13 = dpad_up button_14 = dpad_down fs-uae-2.2.3+dfsg/share/fs-uae/input/logitech_dual_action_12_4_1_0_macosx.conf0000644000175000017500000000120512162366653027237 0ustar glaubitzglaubitz# Logitech Dual Action [default] include = universal_gamepad hat_0_left = dpad_left hat_0_right = dpad_right hat_0_up = dpad_up hat_0_down = dpad_down axis_0_neg = lstick_left axis_0_pos = lstick_right axis_1_neg = lstick_up axis_1_pos = lstick_down button_10 = lstick_button axis_2_neg = rstick_left axis_2_pos = rstick_right axis_3_neg = rstick_up axis_3_pos = rstick_down button_11 = rstick_button button_0 = west_button button_3 = north_button button_2 = east_button button_1 = south_button button_8 = select_button button_9 = start_button button_4 = left_shoulder button_6 = left_trigger button_5 = right_shoulder button_7 = right_trigger fs-uae-2.2.3+dfsg/share/fs-uae/input/dual_analog_pad_12_4_1_0_windows.conf0000644000175000017500000000120012162366653026364 0ustar glaubitzglaubitz# Dual Analog Pad [default] include = universal_gamepad hat_0_left = dpad_left hat_0_right = dpad_right hat_0_up = dpad_up hat_0_down = dpad_down axis_0_neg = lstick_left axis_0_pos = lstick_right axis_1_neg = lstick_up axis_1_pos = lstick_down button_10 = lstick_button axis_3_neg = rstick_left axis_3_pos = rstick_right axis_2_neg = rstick_up axis_2_pos = rstick_down button_11 = rstick_button button_0 = west_button button_1 = north_button button_3 = east_button button_2 = south_button button_8 = select_button button_9 = start_button button_4 = left_shoulder button_5 = left_trigger button_6 = right_shoulder button_7 = right_trigger fs-uae-2.2.3+dfsg/share/fs-uae/input/mosic/0000755000175000017500000000000012162366653020606 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/share/fs-uae/input/mosic/usb_2a4k_gamepad.ini0000644000175000017500000000054312162366653024401 0ustar glaubitzglaubitz# Speed-Link Competition Pro [device] name = Competition Pro type = joystick/joystick [menu] axis_0_neg = left axis_0_pos = right axis_1_neg = up axis_1_pos = down button_0 = primary button_1 = back button_2 = select button_3 = start [amiga] axis_0_neg = left axis_0_pos = right axis_1_neg = up axis_1_pos = down button_0 = 1 button_1 = 2 button_2 = 3 fs-uae-2.2.3+dfsg/share/fs-uae/input/mosic/speed_link_competition_pro.ini0000644000175000017500000000054312162366653026720 0ustar glaubitzglaubitz# Speed-Link Competition Pro [device] name = Competition Pro type = joystick/joystick [menu] axis_0_neg = left axis_0_pos = right axis_1_neg = up axis_1_pos = down button_0 = primary button_1 = back button_2 = select button_3 = start [amiga] axis_0_neg = left axis_0_pos = right axis_1_neg = up axis_1_pos = down button_0 = 1 button_1 = 2 button_2 = 3 fs-uae-2.2.3+dfsg/share/fs-uae/input/mosic/a_speed_link_competition_pro.ini0000644000175000017500000000054312162366653027220 0ustar glaubitzglaubitz# Speed-Link Competition Pro [device] name = Competition Pro type = joystick/joystick [menu] axis_0_neg = left axis_0_pos = right axis_1_neg = up axis_1_pos = down button_0 = primary button_1 = back button_2 = select button_3 = start [amiga] axis_0_neg = left axis_0_pos = right axis_1_neg = up axis_1_pos = down button_0 = 1 button_1 = 2 button_2 = 3 fs-uae-2.2.3+dfsg/share/fs-uae/input/logitech_rumblepad_2_usb_12_4_1_0_windows.conf0000644000175000017500000000121112162366653030217 0ustar glaubitzglaubitz# Logitech RumblePad 2 USB [default] include = universal_gamepad hat_0_left = dpad_left hat_0_right = dpad_right hat_0_up = dpad_up hat_0_down = dpad_down axis_0_neg = lstick_left axis_0_pos = lstick_right axis_1_neg = lstick_up axis_1_pos = lstick_down button_10 = lstick_button axis_2_neg = rstick_left axis_2_pos = rstick_right axis_3_neg = rstick_up axis_3_pos = rstick_down button_11 = rstick_button button_0 = west_button button_3 = north_button button_2 = east_button button_1 = south_button button_8 = select_button button_9 = start_button button_4 = left_shoulder button_6 = left_trigger button_5 = right_shoulder button_7 = right_trigger fs-uae-2.2.3+dfsg/share/fs-uae/input/p880_12_4_1_0_windows.conf0000644000175000017500000000110212162366653023772 0ustar glaubitzglaubitz# P880 [default] include = universal_gamepad hat_0_left = dpad_left hat_0_right = dpad_right hat_0_up = dpad_up hat_0_down = dpad_down axis_0_neg = lstick_left axis_0_pos = lstick_right axis_1_neg = lstick_up axis_1_pos = lstick_down button_8 = lstick_button axis_3_neg = rstick_left axis_3_pos = rstick_right axis_2_neg = rstick_up axis_2_pos = rstick_down button_9 = rstick_button button_0 = west_button button_1 = north_button button_3 = east_button button_2 = south_button button_4 = select_button button_5 = start_button button_6 = left_shoulder button_7 = right_shoulder fs-uae-2.2.3+dfsg/share/fs-uae/input/2_in_1_dt_12_4_1_0_macosx.conf0000644000175000017500000000117212162366653024640 0ustar glaubitzglaubitz# 2 in 1 DT [default] include = universal_gamepad hat_0_left = dpad_left hat_0_right = dpad_right hat_0_up = dpad_up hat_0_down = dpad_down axis_0_neg = lstick_left axis_0_pos = lstick_right axis_1_neg = lstick_up axis_1_pos = lstick_down button_10 = lstick_button axis_2_neg = rstick_left axis_2_pos = rstick_right axis_3_neg = rstick_up axis_3_pos = rstick_down button_11 = rstick_button button_1 = west_button button_3 = north_button button_2 = east_button button_0 = south_button button_8 = select_button button_9 = start_button button_4 = left_shoulder button_5 = left_trigger button_6 = right_shoulder button_7 = right_trigger fs-uae-2.2.3+dfsg/share/fs-uae/input/custom/0000755000175000017500000000000012162366653021006 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/share/fs-uae/input/custom/custom_x_arcade_right.ini0000644000175000017500000000064112162366653026045 0ustar glaubitzglaubitz[device] name = X-Arcade (Right) type = keyboard/xarcade [default] include = common/xarcade key_up = xarcade_up key_down = xarcade_down key_left = xarcade_left key_right = xarcade_right key_lctrl = xarcade_1 key_insert = xarcade_2 key_space = xarcade_3 key_home = xarcade_4 key_end = xarcade_5 key_delete = xarcade_6 key_pageup = xarcade_7 key_pagedown = xarcade_8 key_return = xarcade_top key_rshift = xarcade_side fs-uae-2.2.3+dfsg/share/fs-uae/input/custom/custom_x_arcade.ini0000644000175000017500000000061512162366653024651 0ustar glaubitzglaubitz[device] name = X-Arcade type = keyboard/xarcade [default] include = common/xarcade key_kp8 = xarcade_up key_kp2 = xarcade_down key_kp4 = xarcade_left key_kp6 = xarcade_right key_rctrl = xarcade_1 key_kp0 = xarcade_2 key_kp_period = xarcade_3 key_kp1 = xarcade_4 key_kp3 = xarcade_5 key_kp5 = xarcade_6 key_kp7 = xarcade_7 key_kp9 = xarcade_8 key_kp_enter = xarcade_top key_lshift = xarcade_side fs-uae-2.2.3+dfsg/share/fs-uae/input/ps3_usb_cordless_gamepad_13_4_1_0_windows.conf0000644000175000017500000000124112162366653030232 0ustar glaubitzglaubitz# PS3/USB Cordless Gamepad [default] include = universal_gamepad hat_0_left = dpad_left hat_0_right = dpad_right hat_0_up = dpad_up hat_0_down = dpad_down axis_0_neg = lstick_left axis_0_pos = lstick_right axis_1_neg = lstick_up axis_1_pos = lstick_down button_10 = lstick_button axis_2_neg = rstick_left axis_2_pos = rstick_right axis_3_neg = rstick_up axis_3_pos = rstick_down button_11 = rstick_button button_0 = west_button button_3 = north_button button_2 = east_button button_1 = south_button button_8 = select_button button_9 = start_button button_12 = menu_button button_4 = left_shoulder button_6 = left_trigger button_5 = right_shoulder button_7 = right_trigger fs-uae-2.2.3+dfsg/share/fs-uae/input/unknown.ini0000644000175000017500000000101112162366653021665 0ustar glaubitzglaubitz[amiga] hat_0_left = left hat_0_right = right hat_0_up = up hat_0_down = down axis_0_neg = left axis_0_pos = right axis_1_neg = up axis_1_pos = down axis_2_neg = left axis_2_pos = right axis_3_neg = up axis_3_pos = down button_0 = 1 button_1 = 1 button_2 = 1 button_3 = 1 button_4 = 1 button_5 = 1 button_6 = 1 button_7 = 1 button_8 = 1 button_9 = 1 button_10 = 1 button_11 = 1 button_12 = 1 button_13 = 1 button_14 = 1 button_15 = 1 button_16 = 1 button_17 = 1 button_18 = 1 button_19 = 1 button_20 = 1 button_21 = 1 fs-uae-2.2.3+dfsg/share/fs-uae/input/logitech/0000755000175000017500000000000012162366653021272 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/share/fs-uae/input/logitech/g27_racing_wheel.ini0000644000175000017500000000123212162366653025077 0ustar glaubitzglaubitz# Logitech G27 Racing Wheel [device] name = G27 Racing Wheel type = joystick/wheel [menu] hat_0_left = left hat_0_right = right hat_0_up = up hat_0_down = down button_15 = tertiary button_16 = secondary button_17 = primary button_18 = back button_0 = skip_left button_1 = select button_2 = start button_3 = skip_right [amiga] axis_0_neg = left axis_0_pos = right axis_1_neg = 1 axis_2_neg = down [x] hat_0_left = left hat_0_right = right hat_0_up = up hat_0_down = down button_0 = 1 button_1 = 1 button_2 = 1 button_3 = 1 button_4 = up button_5 = down button_17 = 1 button_16 = 2 button_6 = 1 button_7 = 1 button_19 = 2 button_20 = 2 button_21 = 3 button_22 = 3 fs-uae-2.2.3+dfsg/share/fs-uae/input/logitech/logitech_cordless_rumblepad_2.ini0000644000175000017500000000026712162366653027750 0ustar glaubitzglaubitz# Logitech Cordless Rumblepad 2 # Logitech Wireless Gamepad F710 (DInput mode) [device] name = Cordless Rumblepad 2 type = joystick/gamepad [default] include = logitech/dual_action fs-uae-2.2.3+dfsg/share/fs-uae/input/logitech/logitech_rumblepad_2.ini0000644000175000017500000000025412162366653026046 0ustar glaubitzglaubitz# Logitech Rumblepad 2 # Logitech Rumble Gamepad F510 (DInput mode) [device] name = Cordless Rumblepad 2 type = joystick/gamepad [default] include = logitech/dual_action fs-uae-2.2.3+dfsg/share/fs-uae/input/logitech/controller_rumble_gamepad_f510.ini0000644000175000017500000000022712162366653027736 0ustar glaubitzglaubitz# Logitech Rumble Gamepad F510 (XInput mode) [device] name = Logitech Gamepad F510 type = joystick/gamepad [default] include = common/xinput_gamepad fs-uae-2.2.3+dfsg/share/fs-uae/input/logitech/ps3_usb_cordless_gamepad.ini0000644000175000017500000000022012162366653026717 0ustar glaubitzglaubitz# Logitech PS3/USB Cordless Gamepad [device] name = PS3/USB Cordless Gamepad type = joystick/gamepad [default] include = logitech/dual_action fs-uae-2.2.3+dfsg/share/fs-uae/input/logitech/logitech_extreme_3d.ini0000644000175000017500000000023212162366653025705 0ustar glaubitzglaubitz# Logitech Extreme 3D Pro (Linux / Mac) [device] name = Extreme 3D Pro type = joystick/flightstick [default] include = logitech/logitech_extreme_3d_pro fs-uae-2.2.3+dfsg/share/fs-uae/input/logitech/controller_wireless_gamepad_f710.ini0000644000175000017500000000023112162366653030302 0ustar glaubitzglaubitz# Logitech Wireless Gamepad F710 (XInput mode) [device] name = Wireless Gamepad F710 type = joystick/gamepad [default] include = common/xinput_gamepad fs-uae-2.2.3+dfsg/share/fs-uae/input/logitech/logitech_dual_action.ini0000644000175000017500000000140612162366653026134 0ustar glaubitzglaubitz# Logitech Dual Action Gamepad # Logitech Gamepad F310 (DInput mode) [device] name = Logitech Dual Action type = joystick/gamepad [default] include = common/gamepad axis_0_neg = lstick_left axis_0_pos = lstick_right axis_1_neg = lstick_up axis_1_pos = lstick_down axis_2_neg = rstick_left axis_2_pos = rstick_right axis_3_neg = rstick_up axis_3_pos = rstick_down button_0 = west_button button_1 = south_button button_2 = east_button button_3 = north_button button_4 = left_shoulder button_5 = right_shoulder button_6 = left_trigger button_7 = right_trigger button_8 = select_button button_9 = start_button button_10 = lstick_button button_11 = rstick_button button_12 = menu_button hat_0_left = dpad_left hat_0_right = dpad_right hat_0_up = dpad_up hat_0_down = dpad_down fs-uae-2.2.3+dfsg/share/fs-uae/input/logitech/gamepad_f310_controller.ini0000644000175000017500000000020712162366653026364 0ustar glaubitzglaubitz# Logitech Gamepad F310 (XInput mode) [device] name = Gamepad F310 type = joystick/gamepad [default] include = common/xinput_gamepad fs-uae-2.2.3+dfsg/share/fs-uae/input/logitech/logitech_extreme_3d_pro.ini0000644000175000017500000000052412162366653026571 0ustar glaubitzglaubitz# Logitech Extreme 3D Pro [device] name = Extreme 3D Pro type = joystick/flightstick [menu] hat_0_left = left hat_0_right = right hat_0_up = up hat_0_down = down button_0 = primary button_1 = back button_2 = select button_3 = start [amiga] axis_0_neg = left axis_0_pos = right axis_1_neg = up axis_1_pos = down button_0 = 1 button_1 = 2 fs-uae-2.2.3+dfsg/share/fs-uae/input/universal_gamepad.ini0000644000175000017500000001630412162366653023667 0ustar glaubitzglaubitz[universal] lstick_left = lstick_left lstick_right = lstick_right lstick_up = lstick_up lstick_down = lstick_down left_trigger = left_trigger right_trigger = right_trigger rstick_up = rstick_up rstick_down = rstick_down rstick_left = rstick_left rstick_right = rstick_right south_button = south_button east_button = east_button west_button = west_button north_button = north_button left_shoulder = left_shoulder right_shoulder = right_shoulder select_button = select_button menu_button = menu_button start_button = start_button lstick_button = lstick_button rstick_button = rstick_button dpad_left = dpad_left dpad_right = dpad_right dpad_up = dpad_up dpad_down = dpad_down [amiga] dpad_left = left dpad_right = right dpad_up = up dpad_down = down south_button = 1 west_button = 2 lstick_left = left lstick_right = right lstick_up = up lstick_down = down east_button = up north_button = 1 right_shoulder = up left_shoulder = down [amigacd32] dpad_left = left dpad_right = right dpad_up = up dpad_down = down south_button = red west_button = green north_button = yellow east_button = blue start_button = play left_shoulder = rewind right_shoulder = forward lstick_left = left lstick_right = right lstick_up = up lstick_down = down [arcade] dpad_left = left dpad_right = right dpad_up = up dpad_down = down start_button = start select_button = select south_button = 1 west_button = 2 east_button = 3 north_button = 4 left_shoulder = 5 right_shoulder = 6 left_trigger = 7 right_trigger = 8 [atari2600] dpad_left = left dpad_right = right dpad_up = up dpad_down = down start_button = reset select_button = select south_button = 1 west_button = 2 north_button = 3 lstick_left = (left) lstick_right = (right) lstick_up = (up) lstick_down = (down) east_button = (2) [atari5200] lstick_left = left lstick_right = right lstick_up = up lstick_down = down dpad_left = left dpad_right = right dpad_up = up dpad_down = down start_button = start select_button = pause south_button = 1 west_button = 2 left_shoulder = pad* right_shoulder = pad# lstick_left = (left) lstick_right = (right) lstick_up = (up) lstick_down = (down) north_button = (1) east_button = (2) [atari7800] lstick_left = left lstick_right = right lstick_up = up lstick_down = down dpad_left = left dpad_right = right dpad_up = up dpad_down = down south_button = 1 west_button = 2 lstick_left = (left) lstick_right = (right) lstick_up = (up) lstick_down = (down) north_button = (1) east_button = (2) [atarilynx] dpad_left = left dpad_right = right dpad_up = up dpad_down = down start_button = pause south_button = a west_button = b left_shoulder = option_1 right_shoulder = option_2 lstick_left = (left) lstick_right = (right) lstick_up = (up) lstick_down = (down) north_button = (a) east_button = (b) [gameboy] dpad_left = left dpad_right = right dpad_up = up dpad_down = down select_button = select start_button = start south_button = a west_button = b lstick_left = (left) lstick_right = (right) lstick_up = (up) lstick_down = (down) north_button = (a) east_button = (b) [gameboycolor] dpad_left = left dpad_right = right dpad_up = up dpad_down = down select_button = select start_button = start south_button = a west_button = b lstick_left = (left) lstick_right = (right) lstick_up = (up) lstick_down = (down) north_button = (a) east_button = (b) [gameboyadvance] dpad_left = left dpad_right = right dpad_up = up dpad_down = down select_button = select start_button = start south_button = a west_button = b left_shoulder = l right_shoulder = r lstick_left = (left) lstick_right = (right) lstick_up = (up) lstick_down = (down) north_button = (a) east_button = (b) [gamecube] start_button = start lstick_left = stick_left lstick_right = stick_right lstick_up = stick_up lstick_down = stick_down left_shoulder = l left_trigger = l_analog right_shoulder = r right_trigger = r_analog dpad_left = dpad_left dpad_right = dpad_right dpad_up = dpad_up dpad_down = dpad_down south_button = a west_button = b north_button = y east_button = x rstick_left = c_left rstick_right = c_right rstick_up = c_up rstick_down = c_down select_button = z [gamegear] dpad_left = left dpad_right = right dpad_up = up dpad_down = down start_button = start south_button = 2 west_button = 1 lstick_left = (left) lstick_right = (right) lstick_up = (up) lstick_down = (down) north_button = (2) east_button = (1) [mastersystem] dpad_left = left dpad_right = right dpad_up = up dpad_down = down south_button = 1 west_button = 2 lstick_left = (left) lstick_right = (right) lstick_up = (up) lstick_down = (down) start_button = (1) north_button = (1) east_button = (2) [megadrive] select_button = mode start_button = start dpad_left = left dpad_right = right dpad_up = up dpad_down = down south_button = a west_button = b east_button = c north_button = x left_shoulder = y right_shoulder = z lstick_left = (left) lstick_right = (right) lstick_up = (up) lstick_down = (down) [menu] dpad_left = left dpad_right = right dpad_up = up dpad_down = down lstick_left = left lstick_right = right lstick_up = up lstick_down = down start_button = start select_button = select south_button = primary west_button = secondary north_button = tertiary east_button = back left_shoulder = skip_left right_shoulder = skip_right menu_button = menu [nintendo] dpad_left = left dpad_right = right dpad_up = up dpad_down = down select_button = select start_button = start south_button = a west_button = b lstick_left = (left) lstick_right = (right) lstick_up = (up) lstick_down = (down) north_button = (a) east_button = (b) [nintendo64] dpad_left = dpad_left dpad_right = dpad_right dpad_up = dpad_up dpad_down = dpad_down lstick_left = stick_left lstick_right = stick_right lstick_up = stick_up lstick_down = stick_down rstick_left = c_left rstick_right = c_right rstick_up = c_up rstick_down = c_down select_button = rumblepak start_button = start south_button = a west_button = b left_shoulder = l right_shoulder = r rstick_button = mempak right_trigger = z [playstation] dpad_left = left dpad_right = right dpad_up = up dpad_down = down start_button = start select_button = select left_shoulder = l1 left_trigger = l2 right_shoulder = r1 right_trigger = r2 north_button = triangle south_button = cross east_button = circle west_button = square [supernintendo] dpad_left = left dpad_right = right dpad_up = up dpad_down = down select_button = select start_button = start east_button = a south_button = b north_button = x west_button = y left_shoulder = l right_shoulder = r lstick_left = (left) lstick_right = (right) lstick_up = (up) lstick_down = (down) [turbografx16] dpad_left = left dpad_right = right dpad_up = up dpad_down = down select_button = select start_button = run south_button = 1 west_button = 2 lstick_left = (left) lstick_right = (right) lstick_up = (up) lstick_down = (down) north_button = (1) east_button = (2) [wii] menu_button = home start_button = + select_button = - lstick_left = nunchuk_left lstick_right = nunchuk_right lstick_up = nunchuk_up lstick_down = nunchuk_down north_button = nunchuk_shake east_button = shake left_shoulder = nunchuk_c left_trigger = nunchuk_z dpad_left = dpad_left dpad_right = dpad_right dpad_up = dpad_up dpad_down = dpad_down right_shoulder = a right_trigger = b west_button = 1 south_button = 2 rstick_left = ir_left rstick_right = ir_right rstick_up = ir_up rstick_down = ir_down fs-uae-2.2.3+dfsg/share/fs-uae/input/logitech_rumblepad_2_usb_12_4_1_0_macosx.conf0000644000175000017500000000121112162366653030017 0ustar glaubitzglaubitz# Logitech Rumblepad 2 USB [default] include = universal_gamepad hat_0_left = dpad_left hat_0_right = dpad_right hat_0_up = dpad_up hat_0_down = dpad_down axis_0_neg = lstick_left axis_0_pos = lstick_right axis_1_neg = lstick_up axis_1_pos = lstick_down button_10 = lstick_button axis_2_neg = rstick_left axis_2_pos = rstick_right axis_3_neg = rstick_up axis_3_pos = rstick_down button_11 = rstick_button button_0 = west_button button_3 = north_button button_2 = east_button button_1 = south_button button_8 = select_button button_9 = start_button button_4 = left_shoulder button_6 = left_trigger button_5 = right_shoulder button_7 = right_trigger fs-uae-2.2.3+dfsg/share/fs-uae/input/sony/0000755000175000017500000000000012162366653020464 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/share/fs-uae/input/sony/computer_entertainment_wireless_inputdevice.ini0000644000175000017500000000024212162366653032272 0ustar glaubitzglaubitz# Sony PlayStation 3 Controller (Wireless) [device] name = PlayStation 3 Controller type = joystick/gamepad [default] include = sony/playstation_r_3_controller fs-uae-2.2.3+dfsg/share/fs-uae/input/sony/playstation_r_3_controller.ini0000644000175000017500000000136012162366653026542 0ustar glaubitzglaubitz# Sony PlayStation 3 Controller (Wired) [device] name = PlayStation 3 Controller type = joystick/gamepad [default] include = common/gamepad axis_0_neg = lstick_left axis_0_pos = lstick_right axis_1_neg = lstick_up axis_1_pos = lstick_down axis_3_neg = rstick_up axis_3_pos = rstick_down axis_4_neg = rstick_left axis_4_pos = rstick_right axis_12_pos = left_trigger axis_13_pos = right_trigger button_14 = south_button button_13 = east_button button_15 = west_button button_12 = north_button button_10 = left_shoulder button_11 = right_shoulder button_0 = select_button button_3 = start_button button_16 = menu_button button_1 = lstick_button button_2 = rstick_button button_7 = dpad_left button_5 = dpad_right button_4 = dpad_up button_6 = dpad_down fs-uae-2.2.3+dfsg/share/fs-uae/input/sony/playstation_r_3_inputdevice.ini0000644000175000017500000000016712162366653026702 0ustar glaubitzglaubitz[device] name = PlayStation 3 Controller type = joystick/gamepad [default] include = sony/playstation_r_3_controller fs-uae-2.2.3+dfsg/share/fs-uae/input/dual_analog_pad_12_4_1_0_macosx.conf0000644000175000017500000000120012162366653026164 0ustar glaubitzglaubitz# Dual Analog Pad [default] include = universal_gamepad hat_0_left = dpad_left hat_0_right = dpad_right hat_0_up = dpad_up hat_0_down = dpad_down axis_0_neg = lstick_left axis_0_pos = lstick_right axis_1_neg = lstick_up axis_1_pos = lstick_down button_10 = lstick_button axis_3_neg = rstick_left axis_3_pos = rstick_right axis_2_neg = rstick_up axis_2_pos = rstick_down button_11 = rstick_button button_0 = west_button button_1 = north_button button_3 = east_button button_2 = south_button button_8 = select_button button_9 = start_button button_4 = left_shoulder button_5 = left_trigger button_6 = right_shoulder button_7 = right_trigger fs-uae-2.2.3+dfsg/share/fs-uae/input/p880_12_4_1_0_macosx.conf0000644000175000017500000000110212162366653023572 0ustar glaubitzglaubitz# P880 [default] include = universal_gamepad hat_0_left = dpad_left hat_0_right = dpad_right hat_0_up = dpad_up hat_0_down = dpad_down axis_0_neg = lstick_left axis_0_pos = lstick_right axis_1_neg = lstick_up axis_1_pos = lstick_down button_8 = lstick_button axis_3_neg = rstick_left axis_3_pos = rstick_right axis_2_neg = rstick_up axis_2_pos = rstick_down button_9 = rstick_button button_0 = west_button button_1 = north_button button_3 = east_button button_2 = south_button button_4 = select_button button_5 = start_button button_6 = left_shoulder button_7 = right_shoulder fs-uae-2.2.3+dfsg/share/fs-uae/input/2_in_1_dt_12_4_1_0_windows.conf0000644000175000017500000000117212162366653025040 0ustar glaubitzglaubitz# 2 in 1 DT [default] include = universal_gamepad hat_0_left = dpad_left hat_0_right = dpad_right hat_0_up = dpad_up hat_0_down = dpad_down axis_0_neg = lstick_left axis_0_pos = lstick_right axis_1_neg = lstick_up axis_1_pos = lstick_down button_10 = lstick_button axis_3_neg = rstick_left axis_3_pos = rstick_right axis_2_neg = rstick_up axis_2_pos = rstick_down button_11 = rstick_button button_1 = west_button button_3 = north_button button_2 = east_button button_0 = south_button button_8 = select_button button_9 = start_button button_4 = left_shoulder button_5 = left_trigger button_6 = right_shoulder button_7 = right_trigger ././@LongLink0000644000000000000000000000015512234726255011653 Lustar rootrootfs-uae-2.2.3+dfsg/share/fs-uae/input/controller_xbox_360_wireless_receiver_for_windows_10_5_1_0_windows.conffs-uae-2.2.3+dfsg/share/fs-uae/input/controller_xbox_360_wireless_receiver_for_windows_10_5_1_0_wind0000644000175000017500000000124612162366653033662 0ustar glaubitzglaubitz# Controller (Xbox 360 Wireless Receiver for Windows) [default] include = universal_gamepad hat_0_left = dpad_left hat_0_right = dpad_right hat_0_up = dpad_up hat_0_down = dpad_down axis_0_neg = lstick_left axis_0_pos = lstick_right axis_1_neg = lstick_up axis_1_pos = lstick_down button_8 = lstick_button axis_4_neg = rstick_left axis_4_pos = rstick_right axis_3_neg = rstick_up axis_3_pos = rstick_down button_9 = rstick_button button_2 = west_button button_3 = north_button button_1 = east_button button_0 = south_button button_6 = select_button button_7 = start_button button_4 = left_shoulder axis_2_pos = left_trigger button_5 = right_shoulder axis_2_neg = right_trigger fs-uae-2.2.3+dfsg/share/fs-uae/input/logitech_cordless_rumblepad_2_usb_12_4_1_0_windows.conf0000644000175000017500000000122212162366653032117 0ustar glaubitzglaubitz# Logitech Cordless RumblePad 2 USB [default] include = universal_gamepad hat_0_left = dpad_left hat_0_right = dpad_right hat_0_up = dpad_up hat_0_down = dpad_down axis_0_neg = lstick_left axis_0_pos = lstick_right axis_1_neg = lstick_up axis_1_pos = lstick_down button_10 = lstick_button axis_2_neg = rstick_left axis_2_pos = rstick_right axis_3_neg = rstick_up axis_3_pos = rstick_down button_11 = rstick_button button_0 = west_button button_3 = north_button button_2 = east_button button_1 = south_button button_8 = select_button button_9 = start_button button_4 = left_shoulder button_6 = left_trigger button_5 = right_shoulder button_7 = right_trigger fs-uae-2.2.3+dfsg/share/fs-uae/input/logitech_dual_action_usb_12_4_1_0_windows.conf0000644000175000017500000000121712162366653030313 0ustar glaubitzglaubitz# name: Logitech Dual Action USB [default] include = universal_gamepad hat_0_left = dpad_left hat_0_right = dpad_right hat_0_up = dpad_up hat_0_down = dpad_down axis_0_neg = lstick_left axis_0_pos = lstick_right axis_1_neg = lstick_up axis_1_pos = lstick_down button_10 = lstick_button axis_2_neg = rstick_left axis_2_pos = rstick_right axis_3_neg = rstick_up axis_3_pos = rstick_down button_11 = rstick_button button_0 = west_button button_3 = north_button button_2 = east_button button_1 = south_button button_8 = select_button button_9 = start_button button_4 = left_shoulder button_6 = left_trigger button_5 = right_shoulder button_7 = right_trigger fs-uae-2.2.3+dfsg/share/fs-uae/input/saitek/0000755000175000017500000000000012162366653020754 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/share/fs-uae/input/saitek/dual_analog_gamepad.ini0000644000175000017500000000131612162366653025402 0ustar glaubitzglaubitz# Saitek P380 Gamepad [device] name = Saitek P380 type = joystick/gamepad [default] include = common/gamepad axis_0_neg = lstick_left axis_0_pos = lstick_right axis_1_neg = lstick_up axis_1_pos = lstick_down axis_2_neg = rstick_left axis_2_pos = rstick_right axis_3_neg = rstick_up axis_3_pos = rstick_down button_0 = west_button button_1 = north_button button_2 = south_button button_3 = east_button button_4 = left_shoulder button_5 = left_trigger button_6 = right_shoulder button_7 = right_trigger button_8 = select_button button_9 = start_button button_10 = lstick_button button_11 = rstick_button button_12 = menu_button hat_0_left = dpad_left hat_0_right = dpad_right hat_0_up = dpad_up hat_0_down = dpad_down fs-uae-2.2.3+dfsg/share/fs-uae/input/saitek/p880.ini0000644000175000017500000000120212162366653022147 0ustar glaubitzglaubitz# Saitek P880 Gamepad [device] name = Saitek P880 type = joystick/gamepad [default] include = common/gamepad axis_0_neg = lstick_left axis_0_pos = lstick_right axis_1_neg = lstick_up axis_1_pos = lstick_down axis_2_neg = rstick_left axis_2_pos = rstick_right axis_3_neg = rstick_up axis_3_pos = rstick_down button_0 = west_button button_1 = north_button button_2 = south_button button_3 = east_button button_4 = select_button button_5 = start_button button_6 = left_trigger button_7 = right_shoulder button_8 = lstick_button button_9 = rstick_button hat_0_left = dpad_left hat_0_right = dpad_right hat_0_up = dpad_up hat_0_down = dpad_down fs-uae-2.2.3+dfsg/share/fs-uae/input/common/0000755000175000017500000000000012162366653020764 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/share/fs-uae/input/common/xinput_gamepad.ini0000644000175000017500000000115412162366653024473 0ustar glaubitzglaubitz[default] include = common/gamepad axis_0_neg = lstick_left axis_0_pos = lstick_right axis_1_neg = lstick_up axis_1_pos = lstick_down axis_2_pos = left_trigger axis_2_neg = right_trigger axis_3_neg = rstick_up axis_3_pos = rstick_down axis_4_neg = rstick_left axis_4_pos = rstick_right button_0 = south_button button_1 = east_button button_2 = west_button button_3 = north_button button_4 = left_shoulder button_5 = right_shoulder button_6 = select_button button_7 = start_button button_8 = lstick_button button_9 = rstick_button hat_0_left = dpad_left hat_0_right = dpad_right hat_0_up = dpad_up hat_0_down = dpad_down fs-uae-2.2.3+dfsg/share/fs-uae/input/common/xarcade.ini0000644000175000017500000000517012162366653023077 0ustar glaubitzglaubitz[arcade] xarcade_up = up xarcade_down = down xarcade_left = left xarcade_right = right xarcade_1 = 1 xarcade_2 = 2 xarcade_3 = 3 xarcade_4 = 4 xarcade_5 = 5 xarcade_6 = 6 xarcade_7 = 7 xarcade_8 = 8 xarcade_top = start xarcade_side = select [amiga] xarcade_up = up xarcade_down = down xarcade_left = left xarcade_right = right xarcade_1 = (up) xarcade_2 = 1 xarcade_4 = 2 [atari2600] xarcade_left = left xarcade_right = right xarcade_up = up xarcade_down = down xarcade_top = reset xarcade_side = select xarcade_1 = 1 xarcade_2 = 2 xarcade_3 = 3 [atari7800] xarcade_left = left xarcade_right = right xarcade_up = up xarcade_down = down xarcade_1 = 1 xarcade_2 = 2 [gameboy] xarcade_side = select xarcade_top = start xarcade_left = left xarcade_right = right xarcade_up = up xarcade_down = down xarcade_1 = a xarcade_2 = b [gameboycolor] xarcade_side = select xarcade_top = start xarcade_left = left xarcade_right = right xarcade_up = up xarcade_down = down xarcade_1 = a xarcade_2 = b [gameboyadvance] xarcade_side = select xarcade_top = start xarcade_left = left xarcade_right = right xarcade_up = up xarcade_down = down xarcade_1 = a xarcade_2 = b xarcade_7 = l xarcade_8 = r [gamegear] xarcade_top = start xarcade_left = left xarcade_right = right xarcade_up = up xarcade_down = down xarcade_1 = 2 xarcade_2 = 1 [mastersystem] xarcade_left = left xarcade_right = right xarcade_up = up xarcade_down = down xarcade_1 = 1 xarcade_2 = 2 xarcade_top = (1) [megadrive] xarcade_side = mode xarcade_top = start xarcade_left = left xarcade_right = right xarcade_up = up xarcade_down = down xarcade_1 = a xarcade_2 = b xarcade_3 = c xarcade_4 = x xarcade_5 = y xarcade_6 = z [menu] xarcade_up = up xarcade_down = down xarcade_left = left xarcade_right = right xarcade_1 = primary xarcade_2 = back xarcade_top = start xarcade_7 = skip_left xarcade_8 = skip_right [nintendo] xarcade_side = select xarcade_top = start xarcade_left = left xarcade_right = right xarcade_up = up xarcade_down = down xarcade_1 = a xarcade_2 = b [playstation] xarcade_side = select xarcade_top = start xarcade_left = left xarcade_right = right xarcade_up = up xarcade_down = down xarcade_1 = cross xarcade_2 = square xarcade_3 = circle xarcade_6 = triangle xarcade_4 = l1 xarcade_5 = r1 xarcade_7 = l2 xarcade_8 = r2 [supernintendo] xarcade_side = select xarcade_top = start xarcade_left = left xarcade_right = right xarcade_up = up xarcade_down = down xarcade_1 = b xarcade_2 = y xarcade_4 = a xarcade_5 = x xarcade_7 = l xarcade_8 = r [turbografx16] xarcade_side = select xarcade_top = run xarcade_left = left xarcade_right = right xarcade_up = up xarcade_down = down xarcade_1 = 1 xarcade_2 = 2 fs-uae-2.2.3+dfsg/share/fs-uae/input/common/gamepad.ini0000644000175000017500000001634212162366653023071 0ustar glaubitzglaubitz[universal] lstick_left = lstick_left lstick_right = lstick_right lstick_up = lstick_up lstick_down = lstick_down left_trigger = left_trigger right_trigger = right_trigger rstick_up = rstick_up rstick_down = rstick_down rstick_left = rstick_left rstick_right = rstick_right south_button = south_button east_button = east_button west_button = west_button north_button = north_button left_shoulder = left_shoulder right_shoulder = right_shoulder select_button = select_button menu_button = menu_button start_button = start_button lstick_button = lstick_button rstick_button = rstick_button dpad_left = dpad_left dpad_right = dpad_right dpad_up = dpad_up dpad_down = dpad_down [amiga] dpad_left = left dpad_right = right dpad_up = up dpad_down = down south_button = 1 west_button = 2 left_trigger = toggle_autofire lstick_left = left lstick_right = right lstick_up = up lstick_down = down east_button = up north_button = 1 right_shoulder = up left_shoulder = down [amigacd32] dpad_left = left dpad_right = right dpad_up = up dpad_down = down south_button = red west_button = green north_button = yellow east_button = blue start_button = play left_shoulder = rewind right_shoulder = forward lstick_left = left lstick_right = right lstick_up = up lstick_down = down [arcade] dpad_left = left dpad_right = right dpad_up = up dpad_down = down start_button = start select_button = select south_button = 1 west_button = 2 east_button = 3 north_button = 4 left_shoulder = 5 right_shoulder = 6 left_trigger = 7 right_trigger = 8 [atari2600] dpad_left = left dpad_right = right dpad_up = up dpad_down = down start_button = reset select_button = select south_button = 1 west_button = 2 north_button = 3 lstick_left = (left) lstick_right = (right) lstick_up = (up) lstick_down = (down) east_button = (2) [atari5200] lstick_left = left lstick_right = right lstick_up = up lstick_down = down dpad_left = left dpad_right = right dpad_up = up dpad_down = down start_button = start select_button = pause south_button = 1 west_button = 2 left_shoulder = pad* right_shoulder = pad# lstick_left = (left) lstick_right = (right) lstick_up = (up) lstick_down = (down) north_button = (1) east_button = (2) [atari7800] lstick_left = left lstick_right = right lstick_up = up lstick_down = down dpad_left = left dpad_right = right dpad_up = up dpad_down = down south_button = 1 west_button = 2 lstick_left = (left) lstick_right = (right) lstick_up = (up) lstick_down = (down) north_button = (1) east_button = (2) [atarilynx] dpad_left = left dpad_right = right dpad_up = up dpad_down = down start_button = pause south_button = a west_button = b left_shoulder = option_1 right_shoulder = option_2 lstick_left = (left) lstick_right = (right) lstick_up = (up) lstick_down = (down) north_button = (a) east_button = (b) [gameboy] dpad_left = left dpad_right = right dpad_up = up dpad_down = down select_button = select start_button = start south_button = a west_button = b lstick_left = (left) lstick_right = (right) lstick_up = (up) lstick_down = (down) north_button = (a) east_button = (b) [gameboycolor] dpad_left = left dpad_right = right dpad_up = up dpad_down = down select_button = select start_button = start south_button = a west_button = b lstick_left = (left) lstick_right = (right) lstick_up = (up) lstick_down = (down) north_button = (a) east_button = (b) [gameboyadvance] dpad_left = left dpad_right = right dpad_up = up dpad_down = down select_button = select start_button = start south_button = a west_button = b left_shoulder = l right_shoulder = r lstick_left = (left) lstick_right = (right) lstick_up = (up) lstick_down = (down) north_button = (a) east_button = (b) [gamecube] start_button = start lstick_left = stick_left lstick_right = stick_right lstick_up = stick_up lstick_down = stick_down left_shoulder = l left_trigger = l_analog right_shoulder = r right_trigger = r_analog dpad_left = dpad_left dpad_right = dpad_right dpad_up = dpad_up dpad_down = dpad_down south_button = a west_button = b north_button = y east_button = x rstick_left = c_left rstick_right = c_right rstick_up = c_up rstick_down = c_down select_button = z [gamegear] dpad_left = left dpad_right = right dpad_up = up dpad_down = down start_button = start south_button = 2 west_button = 1 lstick_left = (left) lstick_right = (right) lstick_up = (up) lstick_down = (down) north_button = (2) east_button = (1) [mastersystem] dpad_left = left dpad_right = right dpad_up = up dpad_down = down south_button = 1 west_button = 2 lstick_left = (left) lstick_right = (right) lstick_up = (up) lstick_down = (down) start_button = (1) north_button = (1) east_button = (2) [megadrive] select_button = mode start_button = start dpad_left = left dpad_right = right dpad_up = up dpad_down = down south_button = a west_button = b east_button = c north_button = x left_shoulder = y right_shoulder = z lstick_left = (left) lstick_right = (right) lstick_up = (up) lstick_down = (down) [menu] dpad_left = left dpad_right = right dpad_up = up dpad_down = down lstick_left = left lstick_right = right lstick_up = up lstick_down = down start_button = start select_button = select south_button = primary west_button = secondary north_button = tertiary east_button = back left_shoulder = skip_left right_shoulder = skip_right menu_button = menu [nintendo] dpad_left = left dpad_right = right dpad_up = up dpad_down = down select_button = select start_button = start south_button = a west_button = b lstick_left = (left) lstick_right = (right) lstick_up = (up) lstick_down = (down) north_button = (a) east_button = (b) [nintendo64] dpad_left = dpad_left dpad_right = dpad_right dpad_up = dpad_up dpad_down = dpad_down lstick_left = stick_left lstick_right = stick_right lstick_up = stick_up lstick_down = stick_down rstick_left = c_left rstick_right = c_right rstick_up = c_up rstick_down = c_down select_button = rumblepak start_button = start south_button = a west_button = b left_shoulder = l right_shoulder = r rstick_button = mempak right_trigger = z [playstation] dpad_left = left dpad_right = right dpad_up = up dpad_down = down start_button = start select_button = select left_shoulder = l1 left_trigger = l2 right_shoulder = r1 right_trigger = r2 north_button = triangle south_button = cross east_button = circle west_button = square [supernintendo] dpad_left = left dpad_right = right dpad_up = up dpad_down = down select_button = select start_button = start east_button = a south_button = b north_button = x west_button = y left_shoulder = l right_shoulder = r lstick_left = (left) lstick_right = (right) lstick_up = (up) lstick_down = (down) [turbografx16] dpad_left = left dpad_right = right dpad_up = up dpad_down = down select_button = select start_button = run south_button = 1 west_button = 2 lstick_left = (left) lstick_right = (right) lstick_up = (up) lstick_down = (down) north_button = (1) east_button = (2) [wii] menu_button = home start_button = + select_button = - lstick_left = nunchuk_left lstick_right = nunchuk_right lstick_up = nunchuk_up lstick_down = nunchuk_down north_button = nunchuk_shake east_button = shake left_shoulder = nunchuk_c left_trigger = nunchuk_z dpad_left = dpad_left dpad_right = dpad_right dpad_up = dpad_up dpad_down = dpad_down right_shoulder = a right_trigger = b west_button = 1 south_button = 2 rstick_left = ir_left rstick_right = ir_right rstick_up = ir_up rstick_down = ir_down fs-uae-2.2.3+dfsg/share/fs-uae/input/wisegroup_ltd/0000755000175000017500000000000012162366653022363 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/share/fs-uae/input/wisegroup_ltd/mp_8866_dual_usb_joypad.ini0000644000175000017500000000023212162366653027414 0ustar glaubitzglaubitz[device] name = wisegroup_ltd_mp_8866_dual_usb_joypad type = joystick/gamepad [default] include = wisegroup_ltd/tigergame_ps_ps2_game_controller_adapter fs-uae-2.2.3+dfsg/share/fs-uae/input/wisegroup_ltd/tigergame_ps_ps2_game_controller_adapter.ini0000644000175000017500000000140312162366653033250 0ustar glaubitzglaubitz# SmartJoyPlus / TigerGame PS/PS2 Game Controller Adapter [device] name = WISEGROUP.,LTD TIGERGAME PS/PS2 GAME CONTROLLER ADAPTER type = joystick/gamepad [default] include = common/gamepad axis_0_neg = lstick_left axis_0_pos = lstick_right axis_1_neg = lstick_up axis_1_pos = lstick_down axis_2_neg = rstick_left axis_2_pos = rstick_right axis_3_neg = rstick_up axis_3_pos = rstick_down button_0 = north_button button_1 = east_button button_2 = south_button button_3 = west_button button_4 = left_trigger button_5 = right_trigger button_6 = left_shoulder button_7 = right_shoulder button_8 = start_button button_9 = select_button button_10 = lstick_button button_11 = rstick_button button_12 = dpad_up button_13 = dpad_right button_14 = dpad_down button_15 = dpad_left fs-uae-2.2.3+dfsg/share/fs-uae/input/logitech_r_precision_tm_gamepad_10_2_0_0_windows.conf0000644000175000017500000000065012162366653031645 0ustar glaubitzglaubitz# Logitech Precision Gamepad USB [default] include = universal_gamepad axis_0_neg = dpad_left axis_0_pos = dpad_right axis_1_neg = dpad_up axis_1_pos = dpad_down button_0 = west_button button_3 = north_button button_2 = east_button button_1 = south_button button_8 = select_button button_9 = start_button button_4 = left_shoulder button_6 = left_trigger button_5 = right_shoulder button_7 = right_trigger fs-uae-2.2.3+dfsg/share/fs-uae/input/generic/0000755000175000017500000000000012162366653021110 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/share/fs-uae/input/generic/mouse.ini0000644000175000017500000000007012162366653022736 0ustar glaubitzglaubitz[device] name = Mouse type = mouse/mouse [amiga_mouse] fs-uae-2.2.3+dfsg/share/fs-uae/input/generic/keyboard.ini0000644000175000017500000001062112162366653023411 0ustar glaubitzglaubitz[device] name = Keyboard type = keyboard/keyboard [amiga] key_left = left key_right = right key_up = up key_down = down key_rctrl = 1 key_ralt = 1 [amigacd32] key_left = left key_right = right key_up = up key_down = down key_rctrl = red key_ralt = red key_c = red key_x = blue key_d = green key_s = yellow key_return = play key_z = rewind key_a = forward [arcade] key_up = up key_down = down key_left = left key_right = right key_return = start key_space = select key_c = 1 key_x = 2 key_z = 3 key_d = 4 key_s = 5 key_a = 6 key_lshift = 7 key_lctrl = 8 [atari2600] key_left = left key_right = right key_up = up key_down = down key_return = reset key_space = select key_c = 1 key_x = 2 key_z = 3 [atari5200] key_left = left key_right = right key_up = up key_down = down key_return = start key_space = pause key_r = reset key_c = 1 key_x = 2 key_kp0 = pad0 key_kp1 = pad1 key_kp2 = pad2 key_kp3 = pad3 key_kp4 = pad4 key_kp5 = pad5 key_kp6 = pad6 key_kp7 = pad7 key_kp8 = pad8 key_kp9 = pad9 key_kp_plus = pad* key_kp_enter = pad# [atari7800] key_left = left key_right = right key_up = up key_down = down key_c = 1 key_x = 2 [atarilynx] key_left = left key_right = right key_up = up key_down = down key_return = pause key_space = option_1 key_c = a key_x = b key_z = option_2 [commodore64] [gameboy] key_space = select key_return = start key_left = left key_right = right key_up = up key_down = down key_c = a key_x = b [gameboycolor] key_space = select key_return = start key_left = left key_right = right key_up = up key_down = down key_c = a key_x = b [gameboyadvance] key_space = select key_return = start key_left = left key_right = right key_up = up key_down = down key_c = a key_x = b key_a = l key_z = r [gamegear] key_return = start key_left = left key_right = right key_up = up key_down = down key_c = 2 key_x = 1 [mastersystem] key_left = left key_right = right key_up = up key_down = down key_c = 1 key_x = 2 key_return = (1) [megadrive] key_left = left key_right = right key_up = up key_down = down key_return = start key_space = mode key_c = a key_x = b key_z = c key_d = x key_s = y key_a = z [menu] key_left = left key_right = right key_up = up key_down = down key_return = primary key_space = secondary key_backspace = back key_pageup = skip_left key_pagedown = skip_right key_escape = escape key_c = (primary) key_x = (back) [nintendo] key_space = select key_return = start key_left = left key_right = right key_up = up key_down = down key_c = a key_x = b [nintendo64] key_a = dpad_left key_d = dpad_right key_w = dpad_up key_s = dpad_down key_left = stick_left key_right = stick_right key_up = stick_up key_down = stick_down key_j = c_left key_l = c_right key_i = c_up key_k = c_down key_r = rumblepak key_return = start key_c = a key_x = b key_a = l key_z = r key_m = mempak key_space = z [playstation] key_left = left key_right = right key_up = up key_down = down key_return = start key_space = select key_c = cross key_d = circle key_x = square key_s = triangle key_a = l1 key_z = r1 key_lshift = l2 key_lctrl = r2 [supernintendo] key_left = left key_right = right key_up = up key_down = down key_c = b key_d = a key_x = y key_s = x key_a = l key_z = r key_space = select key_return = start [turbografx16] key_space = select key_return = run key_left = left key_right = right key_up = up key_down = down key_c = 1 key_x = 2 [wii] key_home = home key_return = + key_space = - key_a = nunchuk_left key_d = nunchuk_right key_w = nunchuk_up key_s = nunchuk_down key_r = nunchuk_shake key_lshift = nunchuk_c key_lctrl = nunchuk_z key_left = dpad_left key_right = dpad_right key_up = dpad_up key_down = dpad_down key_x = 1 key_c = 2 mouse_left = a mouse_right = b mouse_middle = shake mouse_0_neg = ir_left mouse_0_pos = ir_right mouse_1_neg = ir_up mouse_1_pos = ir_down [wii_sideways] key_home = home key_return = + key_space = - key_left = dpad_left key_right = dpad_right key_up = dpad_up key_down = dpad_down key_x = 1 key_c = 2 key_d = a key_s = b key_lshift = shake key_a = tilt_left key_z = tilt_right mouse_0_neg = ir_left mouse_0_pos = ir_right mouse_1_neg = ir_up mouse_1_pos = ir_down [wii_gamepad] key_home = home key_return = + key_space = - key_left = nunchuk_left key_right = nunchuk_right key_up = nunchuk_up key_down = nunchuk_down key_x = b key_c = a key_d = nunchuk_c key_s = nunchuk_z key_lshift = nunchuk_shake key_rshift = shake key_a = 1 key_z = 2 mouse_0_neg = ir_left mouse_0_pos = ir_right mouse_1_neg = ir_up mouse_1_pos = ir_down fs-uae-2.2.3+dfsg/share/fs-uae/input/playstation_r_3_controller_19_4_0_0_macosx.conf0000644000175000017500000000124012162366653030461 0ustar glaubitzglaubitz# PLAYSTATION(R)3 Controller [default] include = universal_gamepad button_7 = dpad_left button_5 = dpad_right button_4 = dpad_up button_6 = dpad_down axis_0_neg = lstick_left axis_0_pos = lstick_right axis_1_neg = lstick_up axis_1_pos = lstick_down button_1 = lstick_button axis_2_neg = rstick_left axis_2_pos = rstick_right axis_3_neg = rstick_up axis_3_pos = rstick_down button_2 = rstick_button button_15 = west_button button_12 = north_button button_13 = east_button button_14 = south_button button_0 = select_button button_3 = start_button button_16 = menu_button button_10 = left_shoulder button_8 = left_trigger button_11 = right_shoulder button_9 = right_trigger fs-uae-2.2.3+dfsg/share/fs-uae/input/other/0000755000175000017500000000000012162366653020615 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/share/fs-uae/input/other/usb_2_axis_8_button_gamepad.ini0000644000175000017500000000072512162366653026660 0ustar glaubitzglaubitz[menu] axis_0_neg = left axis_0_pos = right axis_1_neg = up axis_1_pos = down button_1 = primary button_3 = back button_6 = select button_7 = start [amiga] axis_0_neg = left axis_0_pos = right axis_1_neg = up axis_1_pos = down button_0 = 1 button_1 = 2 button_2 = 3 [amigacd32] axis_0_neg = left axis_0_pos = right axis_1_neg = up axis_1_pos = down button_0 = blue button_1 = red button_2 = yellow button_3 = green button_4 = rewind button_5 = forward button_7 = playfs-uae-2.2.3+dfsg/share/fs-uae/input/other/retro_joystick_interface_v1_2.ini0000644000175000017500000000044712162366653027244 0ustar glaubitzglaubitz# Retro Joystick interface v1.2 [device] name = Retro Joystick interface v1.2 type = joystick/joystick [menu] axis_0_neg = left axis_0_pos = right axis_1_neg = up axis_1_pos = down button_0 = primary [amiga] axis_0_neg = left axis_0_pos = right axis_1_neg = up axis_1_pos = down button_0 = 1 fs-uae-2.2.3+dfsg/share/fs-uae/input/xgaming/0000755000175000017500000000000012162366653021126 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/share/fs-uae/input/xgaming/x_arcade.ini0000644000175000017500000000057112162366653023400 0ustar glaubitzglaubitz[device] name = X-Arcade type = keyboard/xarcade [default] include = common/xarcade key_kp8 = xarcade_up key_kp2 = xarcade_down key_kp4 = xarcade_left key_kp6 = xarcade_right key_lctrl = xarcade_1 key_lalt = xarcade_2 key_space = xarcade_3 key_lshift = xarcade_4 key_z = xarcade_5 key_x = xarcade_6 key_c = xarcade_7 key_5 = xarcade_8 key_1 = xarcade_top key_3 = xarcade_side fs-uae-2.2.3+dfsg/share/fs-uae/input/xgaming/x_arcade_right.ini0000644000175000017500000000057612162366653024602 0ustar glaubitzglaubitz[device] name = X-Arcade (Right) type = keyboard/xarcade [default] include = common/xarcade key_r = xarcade_up key_f = xarcade_down key_d = xarcade_left key_g = xarcade_right key_a = xarcade_1 key_s = xarcade_2 key_q = xarcade_3 key_w = xarcade_4 key_e = xarcade_5 key_leftbracket = xarcade_6 key_rightbracket = xarcade_7 key_6 = xarcade_8 key_2 = xarcade_top key_4 = xarcade_side fs-uae-2.2.3+dfsg/share/fs-uae/input/ps3_usb_cordless_gamepad_13_4_1_0_macosx.conf0000644000175000017500000000124112162366653030032 0ustar glaubitzglaubitz# PS3/USB Cordless Gamepad [default] include = universal_gamepad hat_0_left = dpad_left hat_0_right = dpad_right hat_0_up = dpad_up hat_0_down = dpad_down axis_0_neg = lstick_left axis_0_pos = lstick_right axis_1_neg = lstick_up axis_1_pos = lstick_down button_10 = lstick_button axis_2_neg = rstick_left axis_2_pos = rstick_right axis_3_neg = rstick_up axis_3_pos = rstick_down button_11 = rstick_button button_0 = west_button button_3 = north_button button_2 = east_button button_1 = south_button button_8 = select_button button_9 = start_button button_12 = menu_button button_4 = left_shoulder button_6 = left_trigger button_5 = right_shoulder button_7 = right_trigger fs-uae-2.2.3+dfsg/share/fs-uae/input/controller_rumble_gamepad_f510_10_5_1_0_windows.conf0000644000175000017500000000122312162366653031240 0ustar glaubitzglaubitz# Controller (Rumble Gamepad F510) [default] include = universal_gamepad hat_0_left = dpad_left hat_0_right = dpad_right hat_0_up = dpad_up hat_0_down = dpad_down axis_0_neg = lstick_left axis_0_pos = lstick_right axis_1_neg = lstick_up axis_1_pos = lstick_down button_8 = lstick_button axis_4_neg = rstick_left axis_4_pos = rstick_right axis_3_neg = rstick_up axis_3_pos = rstick_down button_9 = rstick_button button_2 = west_button button_3 = north_button button_1 = east_button button_0 = south_button button_6 = select_button button_7 = start_button button_4 = left_shoulder axis_2_pos = left_trigger button_5 = right_shoulder axis_2_neg = right_trigger fs-uae-2.2.3+dfsg/share/fs-uae/input/controller_xbox_360_for_windows_10_5_1_0_windows.conf0000644000175000017500000000122412162366653031532 0ustar glaubitzglaubitz# Controller (XBOX 360 For Windows) [default] include = universal_gamepad hat_0_left = dpad_left hat_0_right = dpad_right hat_0_up = dpad_up hat_0_down = dpad_down axis_0_neg = lstick_left axis_0_pos = lstick_right axis_1_neg = lstick_up axis_1_pos = lstick_down button_8 = lstick_button axis_4_neg = rstick_left axis_4_pos = rstick_right axis_3_neg = rstick_up axis_3_pos = rstick_down button_9 = rstick_button button_2 = west_button button_3 = north_button button_1 = east_button button_0 = south_button button_6 = select_button button_7 = start_button button_4 = left_shoulder axis_2_pos = left_trigger button_5 = right_shoulder axis_2_neg = right_trigger fs-uae-2.2.3+dfsg/share/fs-uae/input/thrustmaster/0000755000175000017500000000000012162366653022241 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/share/fs-uae/input/thrustmaster/2_in_1_dt.ini0000644000175000017500000000130412162366653024476 0ustar glaubitzglaubitz# Thrustmaster 2 in 1 DT [device] name = Thrustmaster 2 in 1 DT type = joystick/gamepad [default] include = common/gamepad axis_0_neg = lstick_left axis_0_pos = lstick_right axis_1_neg = lstick_up axis_1_pos = lstick_down axis_2_neg = rstick_left axis_2_pos = rstick_right axis_3_neg = rstick_up axis_3_pos = rstick_down button_0 = south_button button_1 = west_button button_2 = east_button button_3 = north_button button_4 = left_shoulder button_5 = left_trigger button_6 = right_shoulder button_7 = right_trigger button_8 = select_button button_9 = start_button button_10 = lstick_button button_11 = rstick_button hat_0_left = dpad_left hat_0_right = dpad_right hat_0_up = dpad_up hat_0_down = dpad_down fs-uae-2.2.3+dfsg/share/fs-uae/input/thrustmaster/t_mini_wireless.ini0000644000175000017500000000143612162366653026142 0ustar glaubitzglaubitz# Thrustmaster T-Wireless 3-in-1 / T-Mini 2-in-1 Wireless [device] name = Thrustmaster T-Wireless 3-in-1 / T-Mini 2-in-1 Wireless type = joystick/gamepad [default] include = common/gamepad axis_0_neg = lstick_left axis_0_pos = lstick_right axis_1_neg = lstick_up axis_1_pos = lstick_down axis_2_neg = rstick_left axis_2_pos = rstick_right axis_3_neg = rstick_up axis_3_pos = rstick_down button_0 = west_button button_1 = south_button button_2 = east_button button_3 = north_button button_4 = left_shoulder button_5 = right_shoulder button_6 = left_trigger button_7 = right_trigger button_8 = select_button button_9 = start_button button_10 = lstick_button button_11 = rstick_button button_12 = menu_button hat_0_left = dpad_left hat_0_right = dpad_right hat_0_up = dpad_up hat_0_down = dpad_down fs-uae-2.2.3+dfsg/share/fs-uae/sidebar.png0000644000175000017500000001752412162366653020465 0ustar glaubitzglaubitz‰PNG  IHDR ü/$sRGB®ÎébKGDži…M¡¥ pHYs × ×B(›xtIMEÜ 2+uðÁ5tEXtCommentCreated with GIMPW¯IDATxÚ½]Ë–ä¶#tüÿ¿Œ»(K@º3«›ÅdÒ©vٲǍ*Ö?ü³êÿù~þ—õù)Êg÷Ñ>È÷OŠU…zü{è_IžŸ£ |ÿR„®*jÿ'е~W@é¿ý!ž?×ïWXïϪ(w(7¿Ú⪰ï¨ýiTûÉ~ß·ïÊì}˜ýàTÅZû'|÷޹ܣQUõØ×±Šôo ~ϰÎýqoæ×Œ@üYŠ»Þ|Wñý~;UµÎMã}”{Ü»èw|}§÷ªÇ~ál\ž¯ q>´¿ <¥·@yí,Q?“â–Yö¦Xç,ËufZö‘xtõ)aÛó}øž¯“ÝÃ?“➃â XÛü±Ö6÷þöþóÓ´f«KQ¼ž nyŠr¼Ç•v>6 Uõt—¹ÝÝk´ß²|=î½z¶øû Õ²§‡=G¡tãâl`OUë·`×çWbV ¿+ÚšÑ?pŒ}³3ÇËö=O-!÷õ. ¡Ë} ž#»Hu½§ì+²ÎÙEðÚ Ÿ¥7ßþ¢˜å»ÃcËëG{ûuÚñ ß—þó…ÇlÓ½ìyÐcÃkˆ¼x¾›êg »hò bJ¢± ê–Y½·øÙ£×ã¶^uß="Õ8ñ ·,dão?ö/Ú«r¯ÅûæÌñÞ=þûsA‚_Ñî¹âlØIÕ˜‚ÿ²¦pä ~–æ†g¸·ñn»‡uNÉ:«û¾÷÷xìr€m[€.á]¿eûÁ¶ïÆemCúñõbVžô+ï¢.äù=¨€.8Óm¡ÝÎ:_‘N‘0«½ æWƒ|ØÅ‘±™º^Êš³¡-p?Ö ‘eõ”êçJÖïÖ`‘áN®œMñ\ãîŽb‰?Û#Ûô<;ö¾D­mcâº}‡ûÿNkY[B¶eÝ嘪_#…jÀþïe‰‘ä–vKÐ|æýåWÝܲhqÓ¥Ÿ™ìæ[šÂ’©ýÎ2gýš½0ðPßMü‚8$2 ¾{ÿ¢ÛºQ„aùKåµÜÞõ½bZ„cɰý5"ÈÅæ/ÞææéaÛ{•פœ£P–Ò^ÑïCiÍNÆŒûö¹Þ©TOñôm-  ~Ÿqj~»~ÙyÁû¤E{¼_6ܼµo]jº‡8‰ˆ¨—êâòAr¬ÉUþ2j²°Õâòõf^ß+†‘"*¹©z×)x­/w6Ð{¶WIɰŽûžîW#­ î¼"^€Š‘×–óÍeùÚð³f¯“Tg´ýäÂ{L) Ô ý÷ƒgGÆ@âM4Ül™×}7®¥-œÚŒ›Á™\{÷£q™=‡åJrÐ|h‚Ê.APê òvÖ½ ¼îdØI|Η¿‡‰bà ªÙ»V ZhcR„n ZìWG>˜^ÝF‡€à#îŒ=¡™›+ qâ5@µK-–åËðÈ}Ù#R’ÖàÜ–¡Ñ%@”’Ú›Cr¡—hš˜ZªtHa‰Ï”‰·l5úŠÀ1¾•{•M·WÎ6ヵ¯¦È9&_Câþ¢T,¡…]˜Ã_šÿ#¢fý¶þJŸð5$׫)4TãsÓ—n-“DŠÂŽÊ¦¶§•B ¡^ϥᡊiêÓ£&¶ø©}Ý$üBáÒ³ +‰›»êÆ¥œ›_,I Øqêj€*;Ç—3o ÆÍé¾wTÈ5ìT S†„ØÝ˜ O|'^«³7¨É‹®j =ãûK˜Š¤D¹&4 l3tæîp¤8ífí7`G™y3ºjiV¤;Þ@j—f)úµ î,lܲFÀ°`$è ^Á«“¿?â›Ò2Ñò2G‰ÃÐ_ ¦ !ZZ¬rÂ@±XQ|¡:v1×^-fŒo¤ º_.t¾®ã&“û©#滼ޕžr`pË|ºV…ÚèñýÅîÓùŽ*|g\*Iº ß|T”åtO ÎçH’/tco\â“úÜ÷ó0¥ Qî3=êfêo¾mqÙ˜‰f{RëÊ–ËL cRK=™08ÌQ ÅÝN홆`z¯äÅž×–0Pk#ë^hÿ4þå5ëxüجИ»6%¼•Ù 7ºÊTŠŽ á·©U~öúÓ›øà#"È õl. ¢/ƒlˆ½øËÔ-ˆ šra+^:¢²Ã ²¡Öþî}!Žäšà!éÓ„U Mº‹CПr ýõ§M­TSøÔç•2û(çyŒð }à¸m‚ªá9B§÷h¸JtÌJFÜ‚79W‚¨U¢ºÉ{dT E‘ìRqäD#Õ‘¦gqC?·6­Sh (Ûƒˆ)°Ý°ØË»<&ìøI²ãß‚¿€ÏõÛê«o1ØbÐO¿rt\%òûë0=¤;ñhÔ?Àý„˜g»Þ•Š ê‰ÄE_- B#­¼ví¹Êöhô¨@qÙ¯@ÖÂ/jQ¾ø\Zö"‰”:ͺ.Mcˆ¡÷ø·ñ¿œûZ.||ðjè:vü÷§Ãx±ðÎ 1óÏZÏàv½u"K%ðv\7ä¤õ…­* ÇÍŠE Hñ‰·>`·Ø¡Æ.¥·Õ>ºèÆòáòÚ€ßÃܪ??^½Žp…—U Ø?r ª´vFáäƒKý.²ªÂš)Ê+ƒ[R¡+rvœ±ÎÚ‘rÁ’‹udw«ïudìžAH‚Á&Bô’Ìëϵ‡Æ×ŽöÜ«fx6]’òýëЬ9üïPÖúæ…hª•‘ŸM9—žŒãZœC ¦RZãÖ€C]ßÃÔ¤H1¹¾ee¶ªMY¢¥*ÉlKKÓ±\³u¾žn°–#¯øùÔ—RÁÔ—bi8Åꡱ^$X¥i®”.©‰Ãå¨Ô** xÊêcÑ6`œ«uIÉ*¸ÃÂBÿ$Ï¢2ÖºàV-YÛ5ˆ‹j;׆Ê}ØIÅ[MгÑô=ÄHÝ2tÒŠƒhàéevw›ñîM*¢Q{²jB÷}† Kµ€·¿ÑJb[hû²¥ÑR‡’lýO:PTLÓŒþ´7c´"šˆP6E³I¾ˆû ¢A®í°bõ%"à•Œo®+TžIÿýØÉËúf9™K9îƒÕ[i®H›¶b_Èîq.7¦À¥_ÖE‹n£$EÂÒ:$PTB‰c‹bÈyRØO¤ÈÁË0›‚‰Â×>Ì£Ì(ãgÀ<–ª—­òtPÖèqƒ-<Š}·<ÿd”!0ÁÔ«ãi½ÍXã"øÁè^ÛÑNö¹e)Öªìm6*‚¨µ¢|~G('jF¨šmÕ ¬êAÓVíOa-ˆ²œ–}àà{½XŽ÷“7¸¢ÞåVë‹þ¤j0*]Î~ÔB/ˆ5p´;©ƒKYíÔþ‚€Û„\§IiÃóhŠ käÀÛJ.Å?D¯Œï+Þ³-m аȑ7dx_QÕ™Úî®Èƒ TAmŒÈÁÍ=’cTÆ[÷š”w5¼B>çåÜ\ %Òå§µŽb×UªAª‹4Q¸l†P£š@ËYƒ5™DkZm¡V?Z—o×€nµöZ;ü?0;’b»zákf¢W“Ú‘ÃÆ±]?CÁö ³§l ÔULoiƒZK™[Š ²ªˆj•ñÕܰ¡×lù¬¯JXDÍr*Ë–—TC¢¨»ø?E%/×—u¯‡Oðv+q@Pçü`ïÉ©ªòC³Â“M&!š8JŒÛ=É’bØŒ§)W!Šs“`Á•NÖ¡JóAhïZd&žcˆÐâ`€µI-„ÃΕÎìœl¹pš#çÑ:éA6ÅÕ×T:½Ú%Þ–uZ°‰‘ª0ÞVhÁoŠ%–Æ£ŒR@㩱˜ ­Y*¯HE2ºif7}S]‰ÛZ™ #WJçÉe‚»S‡¤yµQ‘"¶²ê ”ÆîOW©³9ltAÕi ¦üª`RϦ|·F‚éj~ýXe"'b ºŽºÑ„ƒ¸¥ÆŸÊ¸‚›w8;a0±¸nd6בÞq%ÆÃC˜P ð…mö4MÜðXÊ+ BšðL¿Ý‹m( ÞÒöŠËÿ*ú0ž+?ËÈkDZĈðLÀÄ)ø@þðù‹šõ ³,$³«hLm>.®:ŠœÞš·°2­Âw¨á”þ kHÊW (™Tÿí(¹]JZ@a.NxC­OyëÝÖ¥ûx D¬ýí{Åç”Yr¼}3ÿ’ ƒC¼‹¦AÏi·´S*•AÑÄœ]~'Ÿh¯ÊSh›é_Ÿa‰ŒMTG`× HI@ëØ»Ì?c’Õñ“Ö3@Œý‡ÆT`NO’wéT%æãÖêâ¾`ˆ^âCPZšä²ƒ•“ž¦'L¯5kWêb×›­S.&F ƒìëÁ0€Ì(õCëiŠìòõAͤ4Ò€ªóº"DaÈFä/G·ÜVü‘o­+¦tE¢‚•]uÎ-ÈÆi® A\Ï=ÒØ‹S"š­j<}FE^´µ]쉶^VÙè ˜1B5öåðWþÝ"RDL„VKÆ®kÆp¾?“jTFŠ©´•UVÙ»#ªÎ»l,Œœ0ºD õ%‚Z@V*Ì`‘=3¸:“¼)3ÅËSìÑ\ÐiÛã§[ùÕøPºáG5¥1g!kZ5€óì]?/÷A8Oj(öÍ(1ÐÖP:J¢ãBឬuäÇ+_¶pt[¯ü|o™¬\ „³<@eEûjRzrQéd[ÇL8·°®¾ßuH$Žû5Úµ.cÃ\€ *èÇua¢Njy¨5ôm>ëÅ÷¸âŸ¾‡ø…hY· sM Á.ÖHµT¢Ã“è‹C°’¤Ý…ÐØ ož©˜‰Rл­ÊM|òûßá ûÊ¢²Wã׿Sï‘®¶6óf¤¢»dó™5´¥¿pB´ \g¬éùu$7?ÚBöä h4¾"»ÏCûPôÈp»½uêêCR´ƒè8”IrÂãqJoFÌd]e Ë&a•ˆ”Ïm£öùÊÞå‹…?ˆè:©R³‡×õgïÇàâÈbõ} §/Ì!Ø1òHv~$%£…L/5—’!ö »±§m¾‰Q´ƒv§R¥|BŸILk!ÓkhMœ vQ-ëÿùº8fuuRô‰È·O;B­†ÿjÎqÅÅ"ÚÝOz;ñ®£®äüž}Ŷ¼ÂäÞ~RÚ Ý`n©°„{~„@žš)àÍU|%èNÑÅÔp|1`¡ÚÉlPƒÏ¸y©âæ 0hgÆTPáÑÖ«›”‚9 /¹W”U²¬\ÖSÜ+ƪ%y®k ãù‚ݧ³“D¶å†ÖÜ噺]€Ö˜ÿ}ÅÐ éOÁ£mÞ-˜è2 h­ó«Yy8À³ ¹ÖÅ{Š‘e†X‹)ü¢SlSâHã?ŠÉ#ß„,Eê„êI.=÷sdúžï¤¢ÍÒøbr“ŒGà¬V«¤ºf:e˜Ú]ËgàØ "l_WœÍ–ê œÑ‰©®ÏŸxlu·B ]2„ÝlœV†0Oú’€ÝŒHNs÷Ð`Ö}dW›èýð íWh8´_=›ò”¯.öÖÚÇ•hIƒfqÚá[–N¯¬6Öl|©T§ayaôÚc×'©£1åÃÐv"uΑ䎜s4àÝ=g$.3Ö/Fĸ§G•Ï$qF%c¶u*ôm¦¤"šÔ±ÃæGÌ©SÐFoAÚ‚Û1ÉXü|½Q©ËÔq„_kÆxl¼¿åɹ‚×u ¶çe0]­ ¥|1ࢲèP’NˆÞ<ÀËÓ(¯a“êŠÏli5DÄÞ‡>áˆsÝ÷âíUMâv%ýå•V!çnߺj˜—›–÷xg׆C¶ Zš¿²ÎJP.ïhºæku9Œ¸,Ť¤|Ðè$$ï*,7dKyx˜Ó3.Õš Mù5¯¹|ÕB‚@Fyìþá‚¥0@c!©e¬Qä•LÖl¢Ì+ ˆéGÁH íqΚ¶302«[ºº`®ffdni?lÉìµF.lªviCe‚P½ÝopKàœÉeJ¦¯v5§÷!DXßíóFAU ,ÃК•S4ReǵÃÒyÖuSøìPC¥x¤À–Ó ;/KZ9F–\–´nÿ5L ï š;pj’s°ö´ÁÀGÄ‹2fƒOËÖ) å,²Û¬Õóhœ^¿#–ß§ŽÂ™àª>Y1«6Ù0uˆ6äÿ)ËQ_f[QÛNP&•@…¹’¡mV…óÚ!9C‹ ŠWš{hÿáåëÈì­œCša`xÎL„þä4=Ô4ßÓÔÙÓ|)|¶¨&!¢”>_=±›Z·Áƒc!3‘9<ˆVÝ/…7›4½Å=!wnøJ ­1È«²?c¸•À‘•ñÕD³‚*Ðc²h ì “Ü0É1³ÝY{#.í-òOë³SºÛ•[J¦³‘U º×ên£î¬xÒA@ú¸ÁëH¼Ýÿ%š˜ŽÝ’i詨hã‚VÃ0a¹a÷ª†Úw}y`ÄøšÕØMî†ÿhåJià;\&ùÍó%\¹‡îæ&Ü&¦´¦4Ý8/&Ǫ̈&ÛcfÏÜà ðR×"aØ=÷£‘ö–‡«<;ášp´¸n·t ”fŒŸãä%6ædƦþ’Æ¥´ß(×XïKå:§“Þ]Öd ÒOÛxîWxMÈQ ͱxŽõ†7{ù.ylüÉJöï‘MÛ:Ùm8 1&ÙôçM)æChq0‚.3ì‹ô®ßƒÉ†éé_òšLò„€.ÔWªÐÚÉà»?…$#«WdÀy”·ð¼.‹† mÁù‘½‰w–iUÐ>!#;͉Uïñú/l˜’ wc=•íY*pñ=Ng_e¤DgßÙ0ÈÄe«Þ?Í_Dì!Sm)´4-ðÎf GF2º=³µ/°ª¡¾³ŽÛƒ¸N.&Œ|ÐÂìˆgí± ?ájxÐÞNáPõß!ä¿:?õÁŠ6d¸ùÒ±û³ï Œ! ÷U @•@©>œj…œ.}n”DÝz »¤Á'M,Óàá##îi,”í­1ÄÅéï=I@èÓjW–;6!ˆ0nš1Ë—C©†vе¾F[ Umêm$¤zÕ@ûÙô‘:OÖWº-=M*ƒa¤0b„ù_ ÉÖ—ÑËÏòPƒô\ø³ óÕI©½Mtu&Aû8/´\ÛšówLžFx…Ú½wÞ°FLDJ÷Tëm±õqpŽý7f¸±´ÉÅ/9 vCǯÇûÌD-"¿'óènÝ.ƒ©~Èž Þ´Ô¹ oDͼ6ÁDÆ?–/B¿‹SÑÝ<\>踙6®pH™!}w½ü¹ážIõɰ :!DÃMvgÛò#îérŽ@®£×¨ôÜK¿‡×{™ÿ0έkñ;×à7Õ»Ó•ƒS(h¬Sò ZòNíƒD~j1¢}¯s,Ó¡÷ÃÉŒè*©+»Ro6ÍÔ2_yÄ÷ßûXܶà '¶<)›, |å§ÅG}ôÜÔõ×SØœñS_M´áZŸç³8“NiÀiÙõŸ¹•$aþ˜!Ýb%͘GƒL÷ØUIÈÅyl;Âx…§¯r9Âéé¢#t¼ÂÀ¹šÕ‰ÙÞ;#s&@–b~ +ÝYš:WãíQ)%1hðœ¥gÓ@Sˈ¿Y¥äìGf JÑÀ×XkªÀïxÁ‡+Ÿ0¯ @¯öæ¶z¶×ãö+ž;óRÑ%ŸuÔäOqG-„ûRíŒfëZø ת¬+ŽY>Ñ­fÝ1©D¤±ºë3V…}b¶Ñ›òýÕÌ$*ÒÈíÍ8JçŠÆà²7Ó]œGýöy½ëáÜØùñÀipµ·âxXýÚÀ{þÇ }`òm% ‘­6?ÇßvHÌqJSf£ñÕã•ïrÂíÕ}Û–Ñú¾$O }צ+VtL‡ùTa‡yLð§ÿ¸¸êŸþÁ¿~°þýƒÿÛâÏ k2ã¸IEND®B`‚fs-uae-2.2.3+dfsg/share/fs-uae/item_background.png0000644000175000017500000001206512162366653022204 0ustar glaubitzglaubitz‰PNG  IHDR`V«ïsRGB®ÎébKGDži…M¡¥ pHYs × ×B(›xtIMEÜ P·-tEXtCommentCreated with GIMPWIDATxÚíߪ,;‡Ó½çèQï}[EQQTEÑGPDDDQÄ AÄWñÏ…»Ç‹³†Ý';Uõ«tÒÓ{ŸïƒaÍšI'•ªJR“©I—Ë{Ò|BŽåäöàí5öþ¾KG½s×ôû•…h,§°AÆ%eÐuKãõEh‡ ` ¯vÁÅýjAÇí`°aQ‚€±¬ã~• c9P~iÞs«M€ã|P— :2;Ö.ÆR=¢×4æ÷FÀñô C 8Ô`cm¼f^ãS¥”­ 2.t(Gl¬ÕóU@Z@?Ÿ~ 8îå‚;G¿RY«@c­‚Ž• à>| "¶]à±5‚ûŽV@ÐÚÍxU¯Œäq])oçtpôóÙ]°±5‚:ð85èÈäpX:Èxµ{¬NàÁ.À8>ó\¼n­¯W.p,Að±6 ëñ(·AÀø€£xÔÆ)AG&i´õk”úk”Ûîï­Ø»õW+Çø\)åUÀñº\d—c)?ùçÀLVT@À0>à¸o}-)×õÖ}ôÚ³ÚØ_ßS×}ì•áhßFÉ–m{¦¬gØX±Ç³|¤%ÃÙrE2\aL]e¾;{­Û»‚oÌö·³ä=²ÞN´ÃMª|YßhYuÁ×÷(!ÓNVQºë¿žÜVyë¹×—Œ¼µ,‘^2z¥gµoYÙT¹ÏÝÏ`ªÏ·äòä·Ê«õ(í°tÔ~ì{U–¬}Õq4zìd}Y‡£dÈŽýxöÈ®-Gmb•é™?{‚ožèÓŠDóÓÈ9a7–—òãð+˜ÊÇÏáØ¶RÖõÍóëúæëýýkVùýëû÷jêzVç›OŽ«ýV_£>Õý©_³d¯ënõMÕuÝŸVê÷•:-Z:i½ž±§çwV½½ò[~©øMËÞ–­ÿ•þ´ôéGä§ÞØ´dñìݲY4Ž”±é]«ŒÍH½öõlé(3F]FsŒõž7¯DíXå<Ô92š“£ùÑÓ‡7Ÿyý´ì¡Œ1Õ罵˫;š7½µ#ò_¥£ÿKùÑßÙဩØá§ú=ýÈdÐÑI1ûrÑwÊÑu£å?SW£È&|ÍÎ8£Ÿj™™ ]£ûßãcÞ53scz¯8~Î×£Æa&ä _ýϰë•ûkŒÝ›4‘DI?^‚I&atfС$¡íËÔ žšÄÖclO¿^2ÒŒ¯ÑAGFN/IJIî‘`¨øt¶ÿV{žt(cس}&Á9£«_ß_sv²hvÌÎG|­Gæ(iµ•¨Ø“Dm­GÞœÜ3/eÆÚÍI™ s¦D»Ý†”3&Ê™Ÿ–•ŸóýiëJ?óÙ·ŸÄf~Šý ë]ú9æìOg½óųZ>Û†ïRÿµ®ìZ?c ºúÏzŸ}À}ÛÛ½”uyó|Ϻ|üµÇÿÞëûzê×ë6½¶k9ö×zíÖe[×®Îýâ¬:ê>íë±êUu[Ëß*kéÈ“A©§eKO_µí¬k[~`É۪ӒÓՒËò]Ïo£v£:<_V|Øw^›Q}‘Í<¿·üÊëÊø³Êxc%ûÜêŸ:EãU/Ñ8Qe÷|¾w>ìךǭ±n]ÛÒ5æ2zŽÖ›ÈŸ=}EöPÆ{vnW^‹|,²E´&ªë¶·¶íÊ,å‡#i¦¢Ÿ4:ú´´Ìö÷‘¯32IgG¿çìmç*§/Öº²úÕÒé3¾¦a×3“¹fÖ™ùÚæ §fÊ=c¼x¾?K®ž„ü+Únö¸ÚÛæ,¿WçÞ¶#{G}VËΜ …uî6ĉÔd Þº¾&sŠcïD—Mxtœ™ü©  :‘íè)x#œ|Ô)´ÙDÓQ‰y£O?1ùÎò;5Y³.gõ‘2Föl%qfä:ê§³í¡”;2—žœ¶æñ½ÍŽÊØïI´m’ìý˜àH^”·ÖŒ>½¶ÒÙmˆóξOÊHG<]öÓÄ3äz~jväÓç9®hãY2]y÷oôÏ„Ïúd}fŸ¯4îϰÙÙkÊ3Ëgï„îê¹¹÷iEôÊ'”V4¨Dš­2ÙûD÷9ñÚôÊ*÷M‰î9ÓúT”½FiÛû©˜WÆòìî‹ÕŽÕÞ²úÑqæÓ†çsÑ' Ež_zòGòªº‰~ù©'²s¨úp´Ó¨êš,ÿòl«ô1êK46,ÿêSvR<Qå°æueþSæ)ËÎ=s_ä;ÞÜï½®îFeüMõ]u.öú®^¿•õ<š3¢µ²Qv)?ø+I£0•µyú¶½9#½þ»/S?÷î=°Û3[ÇöÍ^ÎH¶l½=²Yò¥·Në:ONÅ–Öû-¿Õ—ž~m«Çž½ýVÚ9:¾Ž¶1Ê_³ãkoÏzl÷ê¤UWT‡*wϼt–mή+ÒŨñÕSÿ(_oÙRY7èY™¿£9ú ߨ7?Ê÷ÿ’ßáˆnl4ëÚ×O Ý.*×Ù}ÏܨH¹ÉØ'úãÀD(u{7W›Ý¾Úæ,å³ÛUÿ³íñ ŸËöåêsšrS¾É¾µv >*J{vd~…]ˆ÷h·+ú´‡>Ï×Aæõ3ví²ŸdßÕñ<»Qõ?ÛÏð¹Ñ»/ÏÖÍèÝžŽk>ú•JϽ.¼¤—(±ÄJÜŠ"£d%9t]]§Òöþ}5©°%k«–-Z:òz{“ô2 ^^[žy:méÂKü´ìùeÕ_=[yÉaŠŽ<xmeÚéñÃÈï"[Ô:ÏÜëBõ %y/ò{EßJò¡%»jOuü(ÉÝÊ_¥/ʱæå–¼­9*;FÉÄ­ù*J W敬ü™yAIÞ|ß[Ôq”µÐÿ¥|ïÏ$ÀTÖSZyœ±¾ÿ»Ý]T–žr=í>úªÊ¾ßzî•oéÖë‹W6Û_¯üvïO#®Sôz–<½ãã¨­ŽŒ+Ï¿­~Xe¬²VÝ3}Èó‹Ÿé÷£ÆZ¤cµlFîQú=œ±~D¶è]Ó"[ô£l9¡ÌR¾û§~í·nÃAôû=XíEr\Õ^ê åÞ›­w¦ {êönȸfî{Ç8vÒ(Î2ôû=ô~ººª½®(×,™fï|œ]wf×€qÍÜwù€#“0ZJœ\èÕѪk_ÖKX³Úñ®W“«¼:3º©eTOWÍÞF9A1JSu^£ž«&G}ôäVOT“¢²IŠOF¾jõ¹Õ÷ŸQ'½¶,zº‹üWñoÅ·3¾¤œVé[M~U|_ÑÏ ½j¢¬5fÔy*Ò{äÓ™$W…쩞Ñ:£ÌÑiÍ^ŸæuÍÉþ#úQFæÒª½¥|ç„™0;iT=GA=w!º¦U6ó;ß™gƒxòZýöN|‹ÞëùÍû‘S1ë“ñ¢“òfüfÛ;ù±G–ìé°½'ufìßsòk¦­Ìø­ÇžëZ>éèì³ ²z´üôèåÕ{ÔÆ=rx§XFóÒ¨“8g^}d=ÌÚëÈøyŠé¨54ÐßR¾ýv8àI;ƒ¸I·"~ œ’ø(—9ÍOM°Ëžè¦Ü2ÜBMØÊ$¡eníÛ’_9©±ç¶ß^Ù(!Ô룥‹( ЫW¹ý³š¸¥ú±%«ç7^=žÜ-[[c3saf\ycËÓ·šLn‘=SI€ÌøiæÐÌ<©Ì'Y[2*ô$Ðö$k[u9ÍÒòÇÌõÑi›ªÝ•õ,Û§y•“¯£zT•þ:óóR¾õ{¾R€©¬nœ‰Ì¢¶£×ï›/O$k«}E­÷z_óþ¯eÙ÷7ª§×£í:Â>½6ìñ½¬Z×{v;j—l-Y¢òž.[í™;¢±g]¥Gý3«×þ¥è 3õúfÖÿFÍ+žÌÙ9àèü®¾Ÿ±Ó9èA»‚z—òÍß±ÃOÚáÄͼgÄžíþæLwåïã«Þú½ýyñV=Þ™ò­÷¬×ê~µd«e¨åˆúg½_ËÖºO‚'›U·rïëž Ù³ú36´Ê·lëéÔ{=ꇢ»ÈfʽH<Îè+Ò}4æzÆ‚7öÙêòV– –_*>ÙWÕoö~3­~©º·Æ@tÏ”Þ96š,ÛõŽÅ–EóF4¿güQѧ7ß+óIfþî™·º·¿ôì`Í–Ü^yCïKùÆoùJ¦òñ¯T”D75™SM¤Q'3×·ÞïIàTôÑJÒQ“„2 =JBX&Y1kçlÒYOBpV™D.OΑɫQÝÊØéµwOÿ3c¡§ÿÙ±¤ŽçQõflá­sbäç=É´YnÉ©&º« ®™ua†­øöˆdýL=k¨•¸~Ä'"?©Ú_Ê×ܸÃ0[)åí®¬kû&,õëë.^±êh]óø¿õ¼Õ¶ZG}Í^¶HžGyEK¶Ö5ÊsOo{¹V#>Túßzo/K].#kds¯Åg,•zÕvk{þÜÒ«ÒNÔVmßHçV]‘þ=Y•k-Ù"›¶tæù²5†øKäïÞxmÍ%žÎ•ëŽêܳkÔNk®ñ®÷ìVÛOÕ£5?+sR¤CÕTß°ìéé2wʸðl¤Ê_×¥Öë­½êܼ»f)_û5_©ÀTÞ„>ÑI–ÙK5ÙÉ*ãÕÕs¢žòZ$»Â‘dU/¹4›¸”M¼=¢«»ªvÌ$]ö$ç*É”½ oªÿŒ:Q=åt´ï÷øQæÔÑÈgFܨŒ•LBüˆñÕó~¯ž{ÇHvÈŽ 5a]9Q6ë?;øQ@fmQtdlôØüþØáøê¯Øá€“v8&q oŸ®Ü:¼u}«¼rKvëõè–ážL­÷”Û=Gò(·ßŽn­Üv=ÒaT¯UWÔÇÈ^yÕ>‘ßEm[z‰|J‘[ñï6ÑŠ>ßé±¹"óÑq¡´£ÜÚÛòUµý¨þìØVË«cÉ›²Dþké£åת¯)úiõU¹¹2W¨c5#KÆ”¾{z´ÖEEŸ™uHYëZcÓYß接|å—|¥SyÆ<~Ò²mñOÞöeë×"êúëë¬ÿ#¹¬÷jYë¶-YöïµêÎô×ÓC«ÍVŸ½~ôèγaK6φQ¿[ýŠúéØê«n«}¯/ªßôØE‘?òåŒ Gô;¢®žñÍ1Š|ÖøRÆK4®”¾dõ›™ƒ{æ4e^ËÌáÊÉö%ÛßhÞ‰þZ~§Ì«=ë²~ª¾¤ú~d§#6ÈÌÑÛV–òå_°Ã'ípLâ&%<µ’{ê²”䘥ç( b^ûVâ '“š`f%e“½\5YÏkGM|ëMÈ‹Þë¹FAm/JšòüFµEt2&¢„¯L’mþFúLdƒ¬OxzÍ$°G2{vQæ—Lq4Õúj½¦&D+ýòÚPß«}Õò]5Q^™7}*þ‘±ÿ‘y+êk=Õ52“0›M€îM¶_Ö²”/ýœ¯T`*…&VRa”T¥&Õ×·þWÚ÷ähÕ‘yÍ’©'É,êC6‰SÕYË6™$YµÞŒ½$\EÉ=I§QR™*sVoJ=Jâ¤2>2>©Œñ^_P•$Q«lÖwÔÄÆ¨\6ñ9›Têͳª¬žÎzdzÚ%Ñ1J¾UæË¾Ù„Xe‘~-?뛊ͬ>«}ÆRv.SÆ|Ïú£øK´^©vͬ)­ùDñ—ÌZlùpuíR¾ðS¾R€©ð• LgÞ[vÁÉòò÷ñxµ{Ü^õóÇcݲ vAðù|)奔ץ”íåñº”ry~ß=JãïTnB™ûK0°l{yíñwyéTÙuf«‚W»@cÙ=”à|þµ 2¶ê±:ê ãéÇÝ‚mÆ{÷*èx]ÞÞÝØuyþÓ8.±»%ˆ~öAÅÒ86#ÐØ•B°06ਃzgãôÝ %à¨w9ö‚mUPïn,¥½«ÁîÀxþÝ2¶F qúî†pXÁÇþk•µ¼½]³•v¾ÁÀþÛXë@ã)»™E¾Nî\ªçK`DÁÀ1>,oïh\"Ø(%—ÃQïn, 7#© €±¬å‚;½‹~+`XÄçV›ÇùÀ2žlô.öVÐQ†U†€`,¯Å%‚#‹½µK± ÁÀ¼€ÃúÊÓï›¶ ¾6óu ÁÀ8ÖbŸ›õt–Iu,'´ öÚz¿²p³ë"И»¦ß¯,Ü»ÞÀ'=ظ_]@x7ƒŒ=÷+˹b/€w:ØhÝ õrrÞ°ÁÆl9ÿ)l*<ßYËeIEND®B`‚fs-uae-2.2.3+dfsg/share/fs-uae/heading_strip.png0000644000175000017500000000033012162366653021657 0ustar glaubitzglaubitz‰PNG  IHDR szzôsRGB®ÎébKGDži…M¡¥ pHYs × ×B(›xtIMEÜ /|ˆ–tEXtCommentCreated with GIMPW3IDATXÃíÐA ±‚ó'D!£² 2›H¿·rî4»} ê=!!­ö2¹IEND®B`‚fs-uae-2.2.3+dfsg/share/fs-uae/volume_muted.png0000644000175000017500000000065512162366653021556 0ustar glaubitzglaubitz‰PNG  IHDR@@ªiqÞsRGB®ÎébKGDži…M¡¥ pHYs × ×B(›xtIMEÜ §EùmtEXtCommentCreated with GIMPWIDATxÚí™Áà DÁÉÿÿ2½µLMM"“÷βë‚hD…VùP±Ž€[Zeñe`f&"¢ªúoô—ÜÞý% x Ú_ñádjÀñG5¯“˶U/fçR”Á€¬;b€—ø™)h³_ù¸±ÿôEÕR ˜)Þ‹–U¼ ië :çsDüŽúX@ͯ5 ™x‘-MìUëÐ=§/Ôü¯+óì18ä=àìQ÷-roèÈ;B®QøÆÓ_&#âGwò()›à¬ñv¿ëw-ºæ¯ 60 22 668 540 scale_x = -0.6958333333333333 scale_y = -1.0 texture_filter = nearest inhibit_aspect_correction = 1 fs-uae-2.2.3+dfsg/share/fs-uae/aspect.png0000644000175000017500000000070112162366653020320 0ustar glaubitzglaubitz‰PNG  IHDR@@ªiqÞsRGB®ÎébKGDži…M¡¥ pHYs × ×B(›xtIMEÜ ]JÄtEXtCommentCreated with GIMPWIDATxÚí˜Û„ DÂÿÿr÷a/q ^ˆj<çY‘iK™šÀ£Ð]6jNJ×MšÙaÄ%]]#¬ÑBž’M³tFçˆòÍ3ÄG:»ÅKh­ÔOV·ªg~ñrÏÆ•#fÞVd~²ø!ˆ,Þ=½ÄË©‘º6Á}Ú¿T')™¥$?¿Ö;jñ)?Ó³õÂ,Ô;ûÓŒP$Ê´/¿:}ÉŇ O¿ ÌR ïÎ=À¾‰Õ™«@‹Fðy|«Ë¯ÆdE @óü®­aèà†¼E$59¼šrþâl…/œy º)J4ñ5áæØ Ç¡–iÀÍP…¶ÿZ·¸û,Ð’6²Âò€âåÔo3 ®|IEND®B`‚fs-uae-2.2.3+dfsg/share/applications/0000755000175000017500000000000012162366653017643 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/share/applications/fs-uae.desktop0000644000175000017500000000026312162366653022417 0ustar glaubitzglaubitz[Desktop Entry] Name=FS-UAE Comment=FS-UAE Amiga Emulator TryExec=fs-uae Exec=fs-uae %f StartupNotify=true Terminal=false Type=Application Icon=fs-uae Categories=System;Emulator; fs-uae-2.2.3+dfsg/share/icons/0000755000175000017500000000000012162366653016270 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/share/icons/hicolor/0000755000175000017500000000000012162366653017727 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/share/icons/hicolor/48x48/0000755000175000017500000000000012162366653020526 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/share/icons/hicolor/48x48/apps/0000755000175000017500000000000012162366653021471 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/share/icons/hicolor/48x48/apps/fs-uae.png0000644000175000017500000000527212162366653023365 0ustar glaubitzglaubitz‰PNG  IHDR00Wù‡sRGB®ÎébKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEÜ éh·Ú :IDAThÞÍšipTUÇïuwÒK: IȘ„eÂ&‹ 8ÃbjÊrdF¥tkf”q,­Â-G‹Ê *ƒ:,£3Z ‹`@ $„@ ˜…lÝ!Ýé%î~ýÞ|èNH‡„Èv_ÝêzÝ÷{þ÷üϹçÝÓ¡›ÐÇçÍnJŸ½íy/ ,ÐÕ€x @(î<=ºÜˆp…ò*@ÿÂ#/Œ›s÷œg#t zC†JTioÅòûd_—Ýi¯¶:¬•¹Gr7oÛ»­°õrET@Ä–×·<Ÿ–œöŠZ¥Öq5I’ºŽVÝôò{/¿´]€Ü @ (¿:sDæàÇ'Y%d§ŒâUn‰Ò‚F@4ˆ¨j¿†@^qÞ¯}ðÚzààVws~Í£kƦ%§½ 9%gÈ]òm±ú¢V$btjƒš9“æ<9?k~Q~qþ>ÀÜ lÖÄYÏ©Uj"+X*,ø\¾Û‡?^ðVxš5ZþÐü‡~_œ°©CÂ"t:MtvtrÛ5_7Ã0 1 é@ÐÐ @mÐ2\¯‡Û±¹,. à ÄÇĆÚn ‰Ý¡Òåtáö¸o¸2SÏïB«2! p1.™S) I¨kdlëA?h›¶ˆ®¶¤`Ôw9]hÔ  4ê+÷I’ðxn¬R­åLnÍ N½sît|?z™]û ŽêR3±Ѩܞž¡´§ ªCÄÛJ!µâe®íKˆñßWŒžÂËH&^|øú BH7’B3|‰ŠhÀ­Ñ‘?j1ªb ³…\ˆö)¾k-ç£P®Ð#zðÝ8 ňíÌRäô‘Ñ‹h/S“ö5ZƒŸß6­‘#ú{qŸé½ˆ’OêmÑ›I¡Å#rQiýJ˜ôÉÚ&ïªfÒˆÁ1ù#¥Àì•C¥ýðJÞB¡ñCÏ‘‘T´þþè±î¶òÄ佬«V'Ç«Gà²;Cïg’w€¸Î SK<˜õ-„ûï˧RvØÀ´äB’’LþÌ5{ä%XÊ,!²þk°€ä“p{¯¯–N-Â8Ì@:ö6ÌÃ×ÔDöÊ£A Ž1Ó_\ÝúòŸì 9p°-1¶ƒ…óN³É#Î%œ?håñû¢ó+k“cØ÷ÃdÍæþÞú   +×/ }ìW…¨cýòZÝÃùfo*#cË™9÷\p̆l·õ;¯‚[½ÈŠŒO¹>™èôéuܕ՘\`Ïñ0oá…¿ ÆüšŽ»(ØcÄãºØ¯¼P{[@¹>Ðê$[]Æ€ã6Nçè× W’2Öâç´¬&§àç´•›Q”þ_šBémäë`ÙS§0¦úáˣ'çÀ,°çá5åxÃ>Vq¥_ÙBr;¤¸IHÉè`ño«üépøÐNç˜xf])á‰þÝa‹%ç‹q8Z/ ü˜b ¸žx÷ŠQÆ´´Œ`Ï'ɤ+eú#uÁÔlßî¨Ékº¦¹L¡ŸâÄ3–7<Í„ Pœÿ.¥©¸ž§ÀS~,ùÿÔávÙ®Iö€($+ƒ÷m¤ÄÒ7*°î«OÍäûO;™óT†4vÀ'iøfûZÊêä¸×…PB"H[°ö4ĺ°WùŸLÅç©döŸÎA+\@ÉNó ¬< }`°>?ÆÆ¸UµAE«-¦bWÙïUÐ¥•è\–¡þ([kÍàίÅÚåñ4G>ŽF«AeúoK8-¾ˆ*:€Q)g1¶~†½ÕƼõ•ØE?ðΦ‘|¿1†¸»KHZÚäþ¹Ülªþ8h»&"–Q•¢Ãªñ+­”Ñ£ê‰n-¤4ñg~gTÒxf~ ñ|ŒaÊEÿê+"ÕÿYBCI5w&h‘Îsã)úHÆÓ5øL73ľ(¤È™æõY dAqÂ8´ ïüŽøä"Èi²Šoãç3áoÕØ;`.Iɧíd>[wر6¯†êm÷ÒXÖ\ ÁôP{Ÿ·_º†´%ަ€2v^JúÜÑd{ÕDLÌ_n¤#ÊEÐÖÁ[¦à’šHúC­ÿ;àbáý”moB@@­V£7èƒ]«Ó^š/f:½î2®¼ú¥ ˆÂ%\»·`z|6î¨(ZJCÄrÊÞ'íävl«Ç“>ü#º“`CÞÎìª%yÓ9Ú¯Žªö8œ›RqšÏ# "fN`ÅK+pwúSé–ú6®ÝȪ×W1òΑ(²Â™ãgØöî6BéÖ?€+†ÙœdnÙDÙ?ÖðÍSxúÄ4웿$rÝzÌ‚Ÿ—úÆT<;’f¦kQ ]ç“v?@u^mP¦€€Õlå­UoçˆKŽ#cRo>ù&²OfùóË‰ŠŽÂn±÷Ò­_¡¦ì8Dóo²h›–Ž[‡VÎf\äÿ°ëOaE$µx%î{¢Q²7-W5‘ÆÍ ²G¾L¦!ÒÀ²g—p²à$5å5Ô”Õ°öãµT•TQ| ‡ÅRákòž×˜?C”fNg8¨_]Š0CNÌ"gò=¬,¡u¸3`ñ†3ôó{1U˜zÉ’¼Í5Í4×4ÓiëD@`ë[Ùòú¬&++^ZÁ¨ £äb_>pe:ÛFÚ¦mÀbä¿ÐîÄ8œ‘ÈÍ ©¾WÄvL€ ùÝBêþÝR–·ËKѾ"Šöan0“6.W·¾Š­ÍFÞŽ<œNbbz=w5Púòž-óïu4?Z@gl9Ýð\JUáQ´‹ 1©üŽמ@ì‡iÔ¶Õö)«ç÷uu”ä—ðܻϮ§¦¬†Ê*{={5P|²¯K%ª´‘Q‘}Nªî˜57UZ ‚J@”DÜ•>*¢Š&f@ת£¾¦>¤œò#å”)ïõÛîw“óq¢JÄçõ…T82*²û|È‹¿z©¨«ï³;íÕÆHãØÄá‰!MÕÝt&Ÿ#ÁºƒC©áÒñRŸa¯Ÿl Y’û|.qx¢?ô^l1ùKøº-à±:¬•ÆHãØô1éÄÄÆ`½h½­ŠÆX#écÒ¸Ðz¡p’°€'÷HîfI’º4 Ù+²‰Ž¾êŽx3¯èØh²Wd£Ñhp{ÜÞÏs??´.¡G± öíÕoÿyÖÄY¿¼Õ•Õ´^hÅasÜ’UˆŠ !%ô1騵˜ûwälعaPÔö,t‡Ië~·îs&ÍyR£Ö„ßNr{ÜÞ¯}µÃÎ _ÀyÀ¢º,݆®üâüòú–ú2c¤qˆ,Ë*]¸N¯Uª[¡´Wòz›ÌM-•5•gÞÙúοvìÊ倄[þÐ0ü¥Lc  ¦âæÿáCDG€ó­Í¿ðŠrñïá€.Ðoå?V|€¸€ÎîðÙ½ùþxÏÍðcü|IEND®B`‚fs-uae-2.2.3+dfsg/share/icons/hicolor/16x16/0000755000175000017500000000000012162366653020514 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/share/icons/hicolor/16x16/apps/0000755000175000017500000000000012162366653021457 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/share/icons/hicolor/16x16/apps/fs-uae.png0000644000175000017500000000126312162366653023347 0ustar glaubitzglaubitz‰PNG  IHDRóÿasRGB®ÎébKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEÜ ¥]cé3IDAT8Ë¥“KHTQÆçÜ;ãÕ’Þ T,\”ºR à 2mcé2Ú„¸kWË ‚ŠVæÆ([H‹Ù¢¤6–C$8E™™ë8#“sîÌÜs[Œ36=ÀèÀ·9ü¿Çù8Â#aþõ8"<&ãfZ¥)ÇØbû8:§»‚eÁi0uw*671W¥•ãha |Ä´|¿æpÍRû™ö „°f0‚ÆÜ|‚^š£_î𦮛*«ò>Q+jm€‚Ñx”@0ð?çœÞã}S'¢·¶p¾Î#D E)$1'FÀ*@½½HÝ¡o|ü¼ƒ·mÍÌŒÎÅB “‰T‚d*Y‚h5ÉÐÄ~Rj™D*‘W/>ë¹ *MCßÙw|ØÞHûñIF#Äg“H#?+Öd ´ÂõÜ5(ŒÊïô\™áE¸š-Ý>£7«È’Áõ\”VE£b‰ ]ÍÖÍÛH®XTÊEú†14ØAË¥ç\;ÝKŽ$ž—wus.Bü’9ÏÓëCÄoô ¸,‡×áf"c+d½,/“‡Î”&(sWiX½sa»;:y9xïü>5öRQ™F{ë™Â\÷-^ö\~ÌJýERÏšxr.BâêÒ‹i La– $ÖÚ Ù¡ªå¥e±w×&´QA[Nâ•y`jtV—üòµÖKÅeRiÕjUXãBŠ -“¯}G­ª.«Üšæ×ùK(ý-T²{ÿIEND®B`‚fs-uae-2.2.3+dfsg/share/icons/hicolor/64x64/0000755000175000017500000000000012162366653020522 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/share/icons/hicolor/64x64/apps/0000755000175000017500000000000012162366653021465 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/share/icons/hicolor/64x64/apps/fs-uae.png0000644000175000017500000000624112162366653023356 0ustar glaubitzglaubitz‰PNG  IHDR@@ªiqÞsRGB®ÎébKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEÜ 'Ï¶ê² !IDATxÚí›{p×½Ç?»ZI–-Ûã'Æ5Æv0ÂÃ@À@¤4;™¦É„ú 7ö¶3ÜÎmÒ¦·é›fÚ&ÓÎt<¦!MZBIu)†’B 0?0Ørâ·eëaɲ´Ú½èaË’mpýœö윑´ß]s¾ç÷ûžßÙ=þ“þ½“0Žk…;¼o:’êÏ ù\Hþ¬ÄJD á àdV†‘r[€¦dS‰qσ{öètºua™^§ÏAš‘Ý®ªr¿«ÿ–Õi½n¶˜+÷ÿ~ÿk­=€pûIQo‡st¶LXF%`"Ll´´yó ² ºÅM•8~c'mgÚØX|ƒì®ˆØDÖkÚ\À;À£û*}&üé¼i ÕÇ]è%í»ä›¹Ã<®‰Õ¥i#à±§.aLTq«s.§Îa®¾Å¾q cª+"6ÑV9-Shfóc7CÅíb å-dæw±å‰†ˆØóüÙa‚¨ò…\DˆÄât-¬[õ=,CîÕÛFÝ¡4ñý$?{3"æu{Ðêµlع!¬>•§*±š­¤d¥°¤h :½ŽÚ‹µ4Õ4¡x•I @ïåoÓºïlùÙ¾gtyOÚÎâ‹·Pý؆åÏÒ§qïÑö$¡=T@GÍeRS-VŽˆÊÓGéypïƒØ-vì–Á!u•u$$%ðÔž¢ÏÒ‡ÕleÓ#›¸òÎ^ýÅ«“o‚Wåî¾Ä¹òŸ€è“3Åù¬¸±Cí[¬>úMî*>ÒÃYPwºÝú^”Ï´†` ÿñ0׎5„”ø~öí³T¼^:™Ú½Qùå×~‰Ë颸´˜üÕùè£ôã:űˆt$\l ãºnÁÌ‘OÝÃâ9Äü×?è…`–ê–SoÜJúšt„j°ž?ëpšae$g&³|ãr–o\NöÒlªÞ­BÔˆƒÊÌÎSfú‘™l\S[S7¾EÒÃ,Àk¶˜+ƒJ]¼Š„Ä„YÛø„ÄV¯ 6°ÞTߊo¡tÀ †[€¼ÿ÷û_³;í&I+±s÷ÎYIBBb;wïDÒú¼¼­»Íz°üàÀÌàΆ/—Çb·¨†(ÃÇ…‹ w ‚ ÆÄŰtÍR$IB@ÀÕïuÈ™ÎC¥'-3‚Õìx|±sb}½ê•Õç<ÌÔfºÜÚü T!B\$ÿôk?}z}áú§DQÔ0‹“ì•Õƒå?xù——ëø–Ë»EytÇ{âü‰:KŸÅ”›™»,:*Ú8ßÖÝf}þÀóÇÞ<ýæ;@­¿÷;ý Í>,þð q@r¼1>g_é¾G3’3–¤ÍKKKJLšë_u=ã’Wñ*íÝíÖ¦¶&s½©¾å`ùÁ ýýÍ@£?·6†ìmÛœˆæâÛe1ßfƒX|KÎ%fæÆIÙßÃv¿àuøØ?8ê®±á$hð­­ö7<†Áõöš±æÓ;FÝ~~"îxãäP<°¼|øÖYq†º¾Âmtp‡÷M§+Dú Kÿª³š¢ÃæüpIEND®B`‚fs-uae-2.2.3+dfsg/share/icons/hicolor/32x32/0000755000175000017500000000000012162366653020510 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/share/icons/hicolor/32x32/apps/0000755000175000017500000000000012162366653021453 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/share/icons/hicolor/32x32/apps/fs-uae.png0000644000175000017500000000245212162366653023344 0ustar glaubitzglaubitz‰PNG  IHDR szzôsRGB®ÎébKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEÜ#(0b; ªIDATXÃÍ—}LUeÇ?Ïá\^ôÆ›hˆ"Š–/„Fš]¤ñbÎZ”s©­?œTø‡›-,ÛŒ6–/É\knοš "K©Y°–˜¶• a¼+׋нÜ˹÷<ýq¹zoBõœí9ç<¿ß÷óû>Ï9;üÇM w*Un …H]Žz2IMz(n6e›ŠF.+UnBRè‰4Eí.ÈfS¶©H½sYˆç Í¢¡uiS¢mˆ4`3 ©nMp!RbëµáhsLYñŽfÆyFÔ !ÜV«ÀÈœ[ê-S¾èlµ6b£bÝšÃÃón´=ØŠ–:Ñ·«ÐU]3b4`äƒAÁ˜ý܃\žË_õ ³?@â­ŸHm=A÷¬(Š#âÙØP€qÐBÉÚ­Øz7Æà˜®ÿÉ*ý4Ì|¿â%–ןÆn¡uö"êú!'È=ië#J ±såádÌÍ [B+q…«|±ku¸I˜ÜÁ²è*ì~A”YRÙý%J ‹óÁé4—+HÍ6uŠÐÙð|9ÁÚZf6]!þéVúE8%ç—bí·Þ3ÞÀ>d÷`]ÊïDÎïá¦+šŽÏæ½—C ”µ=KWÍíûÆ{8u§Oâ¡!ƒdm¹ˆT_Wd²ö©sÇÐÔÿ(§Œ8u»o.éò àÕ—ˆ¢êÚJÚ~µðÆ¡Zœ¨Ÿ4aíµz•ã;°deOnhbÐ1¼D¶½_Š­sîBUeèºî;€·øt¶¾Œ#ÎœÈ 2²š˜57èî›Aá¡X´¡>¯ ñt@zç@úöfDŒ…úÎJ ¦óVI5=@ÙçtT÷ú4žè÷w $ÊÎoÖÓ-ßI%ùµ ØBm´5,¡¼@z•cBíÎÏB‹11-˜ÄY'h©5Ðñ³Âºï¿ÆºîþPç4R¿ —1ŒÅ½ïR—ÇUñ8;6–ñPæ)ºmFÎíOòÇg0+’[©TuÓë…çñ!ïfÔÅ„­i§1#å•,˜?ÅoÃaÙ'¹´”¤áˆ®f`i7í–™üòÁLt§[<÷@.¹rÇô½P„‚"ütIÂÉxQR¾ã9–úuðLÒNºB®ÓÕ1—ºO ìm¤èþ,žº[øûû£wº¼œ¼1ýÑçÄ£ŽðóuÌ=UH¿±–¼dÔÙGi‘ í­ÛÑ>l¥)؆õê2Zkq{öïÓÿû˜{:0|.xç ­§éZx&ÀK«)_ÞCuÊE®kþìKÂÑçS]þ®|¡¿+ܼ^9  hv±xO1â†ã•DBrã¯ùÿ†ÇXX´ŽÞÒ¾»UéŒT7|o÷¾Ýãæ³19{ô¬&¡î{ÿ¿²Êù(©KgÊë)@ñSjÒ³ÒÇ%žÌcD㎦ ¥4Ä%Ä‘‘•1e•§e¥—ÇhÍáQ¦ÔåµÐ¡jÒê$’V'MÝÎLJ¤.B™#˜²MB1BˆZ!Äe©Kç¤ ëÒ)u)…µB1¦lS'ÿ‡öÅ+âãùÓ1âIEND®B`‚fs-uae-2.2.3+dfsg/share/icons/hicolor/128x128/0000755000175000017500000000000012162366653020664 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/share/icons/hicolor/128x128/apps/0000755000175000017500000000000012162366653021627 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/share/icons/hicolor/128x128/apps/fs-uae.png0000644000175000017500000001455712162366653023531 0ustar glaubitzglaubitz‰PNG  IHDR€€Ã>aËsRGB®ÎébKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEÜ ¯Ÿm6ïIDATxÚí]itוþªºº[½hE I$$@€@2Ø`Yì`°A^°=ñÂd“Ø™ÉØ9qìLBfâ‰33qf¼pLNÂØcbO¼ B2b—íhA{ki õ޵ΕÚ-Q]’ºYZRÝ:ï¨Ôý¾ê®ºßûÞ½·–SL1Å›¢FLðíO5nö©[ìpB!Ã-uº éd©¦ p-`27Éñ¤ø¿Jl¤WSyõQˆ0~Çóâ_N\jœØ¯>ã& ó½¬E @#®5RB‚—ƒY¯F`Äuf9ÆEÊOç¢S½oüþŽïß;wæÜÕúý\­F«Qk¢U¤J§øsüÆr¬‹fè^íê±Ø,M Å»?Û}ºßÒoàà›7!Æ¥„Ÿ£^%:?€î¹‡žËØt÷¦ˆ ‹¼OEª Šën!)XÖi2›J÷Þ·gÑþ6/B°^Š0* ?œO‰#^·eÕ–™Ïl}楸¨¸‡ ‚ ÷Ü>ãyžklo<ôÖ¾·Þ/«-k`Éà T~8_ À¸ë¹]ùoxüãpcxA¤â’Û\À!2*<*mMΚ͔Šj+«-3{9›CÀÛù†w_y÷éÜù¹¿¥T”"÷wØ(¥ÍJËZ—è>yñd³èpN‚~`(àóŒüw_y÷é…sþA*åð‡‘IΙ9ç®øèxGqYñµi"/GjÒ¯ÛõÜ®¼ù³çÿB~rØÜÎÁA`¬p Š˜“]ã‚"@¨ ¨ô*¨ÂU Â©oª)¶~Åúçš:šº>:ôщ"1’ £nCÎÙ²jËÌ{³ï}‡$Iµ¯¬•î¥ánsC`oßã¸ÖÆÝ¡& MÔB­‘œÕU¤ŠÚùÀÎ]¬¹ØZs­†ñJ ¥ F²Sáõ¾€ñõï¿þópcxޤï9öZ;\.ð,A”v Ïò`úp6ê(5òF¨)µ&9!9â@Ér1 G`ÌSÀP¾¯ùÎöïdÆEÅ=ìËù—À98eÄÞ&s÷¹Á^fžBu# ¤.Xµrñʃ%å%v±FàòJ Ç<b•/dóÊÍ?Ìó` z´V¼r»g‡êD̸a: IRµsëÎGJÊKêÄú€}DmÀ P2‘¿ oŒ ‹¼OêK8L¸Ì.ÅwÈ\f&ôñúÞK™‘’¥ÑG9\Ž~¢#AJfô«¨_|ìÅURå]`i´€ãé¿“fi´@§»!Ш5Ú‚ü‚ì¿üÐ@'ª¹Ê+;•$MjbêIöõºÀ8ÅwØx'W¯ ºØÏ·åÌÏYòá—aðœIäh ô!ú¹Rì=veô‰Ù{ì’ˆ‰Œ‰G¿Vôµ Ã/Ð(ç“(­F+‰¸Áó¼rôƒ!+pK¾ª ¯§rd@ùÈÿ‡j”F­‰–Ú8í¤£ÒY˜Agór¾jìrört%Ì„ú žáÂHŸæ÷u|S9бv¬èúË`‚åÜ:Jò7ƒ0:pàüÆÝJóŸS8¸»w?´”CöèÌ¿.­ÄÙoŽ•¿¸ $ÀTèf,pŸ“ÅqI¨ÈÌÞÊ„ ZLE Àc­ý3@+À‘(\õà$ÀÖ²ï?.¨ 0`)[ŠXU‡ì¥´åi+Еöë àüÅ·L± Ðòˆ#²îІâë¬Màº80­L@¸ 'ÀTS€5šÃЪä/~)Zt?ܪÐeNÏññü 0…b€$ªYúrÙ>m)¨J\w•Œ… §(@ ÷‡<ŸæëX$ 3 ÀÛy¸*]xÁoÜ„!ÀT‰–GœCœ±[¶OÙô{Ðkˆ‡½È –fÂ) DJÙ°6¾Xön»: §7€n§ájq„›P˜ 1Àæ™Ç Õ¹å¸[á†gz=ÇÄ_œ¢Ad©­X’P-Û§U—Šê°%°•YÁ 0á"S< 2 eÏØñ„ …Ñ`­,. @à¿q’<7y îELŸÖ'Ûç‚~Ìê8ôvƒ£¹€pŠ‘EèíØ¸è¬ì‘±á(Õ¯ƒýš¶k¶€p–“5(È-Ö ?/ŸP?šÓ §¸ÓsüÅ) D–1³KÓdû4c.j‰E0Ÿíõ\ï/NQ€ 2JÅãñ5_Ëž´á Â1¦t?Þ ½xÁoÜÄ'€0¹°î®Ë˜? Ûç<‡>!Ç›Á±\@¸ O€ÉtSÈ´;¶®¹$[··ð8c[K½¶f[@¸IAa1à±OCc”¯ÅŸèÛ7­BgQ§gßýÅ)"[˜ÑŽ¥Ù-²}®9çáªsºÏ˜@[é€p“‡ÂÄ'EqøÖãgä8Baû6¸ûÜè¹ÐAüÆM.Lؼ¹q‰VÙ>çºòqŽFÛñOæã/N!@YtŒ [ *dëöwÎô¬ÆõÚë°¶XÂM>Lð)àÉoŸƒ&T>%;Ö° ´[…¶¢6Ïþú‹S ˆlIn;²W¶ËöiìÍDC_&:Oµ{ƒç/N!@™ZÃáé.ÈJ8ËS8V· N³]e] ø›´˜¨ðà·ª“$_9[³Î(´­ƒÀ á"‹K´aëÎ*ÙQ|Ý6 gëòa®6ÃÒf § Èì™W.@*Ÿ’+ÙÚE µ¨Õ³þâ&7&X³¶‹×tÊö©¿¶MíóÐ^Òâ àüÅ) D¦Õqxúçe²ΰj?ý =˜ÊL ø›˜@ °ýÅ*ÄÌvÈö9s~-,ÖH4©ôTîüÅ) DŸjÃæïÕ•yRN Ο¿==°´[Â)2{òõ2ðjr3ó±Âíp;\+ºæÙ/qS†a—mmGz^7ä.ÕlªËB[sZŠÁØ™€pŠSà§çðð/.Ë:‘e4(=ñ l]6t–u„Sd¶éŸªaLpÊ:²¼tÖp4¹ä jýÅM=ñŽÇ¥Y±ê¹Y'ZúâPsá^˜.™<œ¿8E‚-íûÕepj^ö‹ŽníÐTÔäÙq ‚ÈmoGÒÊ^ÙQÜQ³½­sÐXTçyÔº¿¸©K€ œ´FvUÉp´ÕEÀÚiEgy'Að7µ „ ÷£:覻dÙpj=\ÖPԾ๹Å_Ü”&@°YL†ÙÏ6Én½ÓÑV¶ å°š¬á¦<‚M×¾QŽd¸†ÂÐvEžïï/N!€ÄÐÍ䢛ÉEhl(TZéç¢.wáúnÔ«÷›­'×ËîFë…VXº,á‚y <æu¿"Zb Ù,¡Fj»ÓR¦!.#NDòÈèþ-ˆhÎ'ΦǗm«q™qXþf5X• 3Š ô-mcqõäÕÁÏ!ÿp“”·$ µÔ!ñúŸÑ:÷AŸ}¾f³‘ã®Ä¼uóÐSß–fa°6bfÿçhI{Ø'®”ÍBŽë –¾dGdîuÙ9ÜU± tG2j ¯x~èzÎ~á&«‘·jé•¿‡ÆÐïSÎùi>¥×BcÐbNÞ/Üÿ@«ëõ‰¢ |Iå¸þ+Ùù›vé`=y?ú[ûÑ~e0€ÓD0ÈúYý¸q $ŒeQÓ¤ß-;§7G$à,¹IË’(Æ…ôsïÉâ²7ýn .Àg³•lo7 úPµç;e¾Ö!š7n",A§å¢ú/ùœÓˆY¥Gæ¦LÄàŽÄUÄ4óÉþ‰é°lánY'ººÁ^^–ó-°vVîÂ[0ý™öqã&»Q(ÀX,ãÓÿBé理?ʨïÅ£üaÌÈšáÉ·3>{§ÞØ ^­öúL[–.‚—ýfšÂ0V '¿'Ìy³.RnäÁRSH˜0¦ý¾Þs–¾á× ˆ˜Ä'Ç#*. ¶úL}èhêËL°ÇÅUu ­H:ñ'4=ö˜Ï>ç¢ ×zsWÓè¾Ú ÆÉ@ojGJá'høÖßxú-ŽÞƒèð3{¸ºær.ÈÎY¨+¼2ø ~ˆyª ê¥ãÆ´°iaxá×/Œi¿î=ˆãŸ÷üŸ4/ Oýø)„E…Ýз¿»‡ÿ÷0.¿0ybï%õ£}Ð1Ý2ðé]kAC–ŸæÁÍþãÇй:h@kÆŠ™¯À øln§!%÷£¿¹¦JÓ`LÅ"æ§WÇ»sòÐzÖÝYxþõç.Ù7*6 ÿããÈ]›{Ûc€Ûr6Pår#ã7ïàâï~î³Ogt Š»–à^ŽCû¥v ´€¤idþç;¸°÷_°\û Ò,;Š£Kîaסúð7¿Ó3í§u`¢Ù´O 7–:Ègï|æóýæÚfÏzÞöÙóõÓ/¯€¾+í±‘HY™S… üŽz°‹,`Ç€«8ZžæGݧ‘ïåÐNmum˜•>(óß-À–¿Ý‚ŠÒ ”•£þr=êËë>¶B`öۇбc liÓ}öù|ÍB¼ÔÚ…ÙÛg öÕƒ²ÎW;˜U² W“bñ§uKðòŽŽ ××Ô‡®ê.¿À®?î’|ïË?|‰Ó‡N{þÿä7Ÿà…ÿxZÝàƒ5!dçg#;?N›•g*qö«³h®nžœY€÷B2<æ¿üG™˜Ü‰ÞÇrgÃüì9¸"ÙâMÊÉûA0|¶:æp…wGÚµ¨ûªÎïh;D"Ù(55 ÓÛÞ‹·~ð*Oßx±Î¨Ã²5Ëðü¯žGîºIšŒ´i% Hø¿Óèx$ËgŸ³wõ Cu^~;ÉH¬X†c¹3ÐEpà\n72ȱášÏ¶Àavø½Ug«$_7wšox­ÏÔ‡^ÿúP=æ/Ÿôe阓5!†O‘è¡‚ÙdFã•ÆàŸ†Ê¶þZæ?F÷†°aZ uá1]õ\2!XTX€ëaZYÀ:ˆ#džsYÜhþºy\ûA„§¿ øà—ŒùøÄ`EÒisâüÑó8ô<’@FN¶>»‘±‘€´%ihªhš¼1Ài{˜÷ËC¨xcñ ïEâ(Ô˦o™åw#²;{ЀQ·ŽWq´sëŸÝ¿áÉ È^ c„G><‚Ÿžø& áT©BXT¶=¿ÍS1œ´YÀHKú}#ZŸÐb`‘þ›¢ì0âS_—fŽP,ýz#j’Y\™Û9n\_czk{ǽþdý¦~„O ä¬ÏÁ郧ávÿɘ9‹æ ›>&u0ìòÀ—®âëÃÄpÔˆbÐÿMÕE[@95ØŸ_ˆWôçÐàêW—nÛ>Ö\¨í¢¡ Ñ`Zü4<ûú³(ÜW³ÉŒ„”Ì]2óWÌ÷ô¯=_;u"Ë8$ííĵ (\Ð ;Šgµ¥ ³j)šK›aˆnFÏxq§›áêwÝ”ï?–mØúløâ/ðèÌH§^{J²¯©É„ú²ú R€ÛrļU¡sk„èk²ó7É“ØXX×€ -§Z0ï’¸Ûmå'ÊÁs<6<µ‘q‘’}*OUbÿ{ûoÅyÁ_ÈI’¼i¿~¥ õrÚ‰F¤1 Ù/þêt¨JÕ¨9SüÆù;Âlý6ìùÉÏÑÏv®_AÕé*ÌJ›…¨ø(DÄD€vѰ˜-hªl‚Ålñ[Y ’‚—?…ÑàÝA`9ÖE©¨‘ Fl–›÷#Hñ™Žø¿L=÷FÕMÁùc,Í”¢q ‡¦Ê&4UÞÜ4Ï`”&>ÍÐÌcU€fè^JE%Žì` 3ÂnµC±;oÆ0£äëV‡Õ€›¤ £Hï¢]’§§bãc•#$æË»Å €/¥¤ŒüsX‹Í"©W©©êªÙɼ¤f¤J ËÜÕ%æÉŒ GÏÈÿ² ÅROIO!Ô  ¿;l†PRÒS$ß+½\ZÀíEïé@v †`÷g»O³,{CŠM©)ܳþeüÝáåžõ÷€Rßʹi7} ä@5Ä˰¢O‡ÅràÐý–~«Él*•ê´pÙB$§'+ÃðYrz2.[(]¼VSï¢]v ž§Ç:x+Àµïð¾=<ãïÅ$-OlAÌôe,Þæ%fz ¶<±E²Àñ¿ç‹=GXE8}ŤL ȉ²áÚ_´¿¶±½ñS´!Zìx~‡¢·yäïx~´!Ò?]z¶ò쥲ڲ&l¢°#çPù,ssk €jîlnY“³f3¥¢nøTŠ¢0oÑ<„F„¢»­ Í(cô,ÆP#ò¶æ!osžä¼v§ÝùêÛ¯~h±[Út0‹J0 Kå x4™M ¥¢Ú²Ò²V“yƒr¸qX´bâfÄA­U{ä‰eÙá´RÚ¨P0„‰äôd,_³ùæ#~V¼Ï‹XXŽåÞÜû澋µ«˜ô¸Àá+ dOv Ž~5=€±¯ýÝkOl\±ñEˆƒÏöþuï_ßÿüý£Ú´‹ 0Df:Þ1;qv¶”(vûåX|ÿó÷‰#ß$J¿Å+”¼£V5Ú‰&©óÅeÅÍ4C7/˜³ GM©5Š îœÙvç›{ßÜ÷ÉÑONy9¿W ‡¤Ÿ“¨ôމRµ¥þJ×¹Ês§“’#b"cf¡¨Ám4Žçø3gÊ_}ûÕÅ9¿ÓËùýbúG{„ÑFøh*@bðì¡€@€HÓV.^™¹sëÎGRf¤diÔ­âž[gnÚM×\«©ßóÅž#bª×/ʽY\*þ¸½R?B)hèE"D×‡è£ ò ²sæç,‰‰Œ‰Õ‡†t†0Z£V\7~£š±:¬6‹Ýbí2wu•^.­9Pr Z¬ðYE™=‹˜ó;½F>'çüñ`$ T"BD"D2ÅuƒøºVÌ"(¯é†ççNEó–ì¡‚#Žj§8Âí¢Ãm^Õ¾¡‚7ÚÈ÷‡Þý /5P‹ŠâEˆÑùñ}•ØŸðós§2 x¯²<-’Àååð¡:?#QíÆêPøIÒKÔ#AI8_ýã'ÀH°#î]ãçÇêxÜ„‘HŒto2xÿ%G8^!ÀØ 0R x/g{;]Ϩ¿YÚÆ¤ÖçFŒ÷‘U=!PçÝL"@qü-%u ½Bõ†ŠÕ«%Ë’P‰l—´Í&û^vÓœÞ^²±c'y/mŸÓ^v½g8±—uBHH¨½ÃИÞçÞ÷ÇÀÌeæ0œ:ßùœ\˜9ß™9ç÷=¿ó½çž PPPPPPPPPPPPPPPPPPPPPPPPPPP,20ôsPPD < úž)(Œ(0‹$Ø©(P,¤`ç©Ìì=1a~RPÌG!à§ð<€ðï…™$è‘×04+ ¸ £=/ò?~1àç‹0 è™ ¿IÂüŸŠÅÝ~^$ø9‘ÿÍ1`æQð‡ tFð{ðO&ŒHP ˜Ë¹>¦pa~††9fž~p +ø;… P ¸Áè^Á±wì§°‹Âœ 3Ï?8àÕàç¿“E´…@°Â ¹w’"&s*Ì] ~‰Hà¶tìwáOéúåëcŸ8ñÄ®mBŽJ¡JUÈ)r™I1Wðx=f—Û5ât9‡n§Þæ° Û¶!½AßûüëÏ¿ßÜÝlº'¨xƒ~gÁÓ„YfŽƒ_8:³AÁ/YÉž’ôc»ÎNÉ> Õh·J$ízóǹGÍ£×[{Z+^9÷JùÅ›¸Ç‚Ý5öÓ-ø›P„™ƒX6À/$~᜾lüçɽ'3>ôð‡RRhTš54•§XèS£ÅØØÝß}éù7ŸíJÍ•1·@%˜M3ùü#>ùs_{îE¹EŸ—ËäÙ´[PÜk°9l7+þý{¿ýÞ;ìcÅ1V‚31“XØ9 þñÀWPd$gÄüáûx&?3ÿó,ËÆÒ®@q/B&•ÅdìÚW¼/óìÕ³5.· ‚˜ÆÑd£=3_`ZÁÿàγøÙþ>^ˆv !6¡àl¼Ýv»fpdЉ†9?›"ÀF9ø… & JùO>öäÆ'Ž?ñŸ*…ªˆ6;Ej¥:eÿæý{,6KSCGƒ9(®&[Ä“ˆ; ÁψÌ÷•?òç%{7íýTJ> 1ÈerõÖ5[÷'Ä& UÖVêDž"váC"lƒ?ø4Ÿ?íÿù“?/Ù´bÓφ‘Óf¦ ‰D"]™·rG\L\¿@øIF~žd:-žóKǃÿÉǞܸwÓÞßÐà§ ˜fP1 S˜[X¬7èï4u5ƒFü¨žFqôg‚Fùƒ;Ì:ºóè¯$‰*Z_ïáá5xÁÙ8pn¼‹ïö•…·%#ÅÂŒP€‘1¾"g ‘I QKÀƳ`¤Ñ9³.e¥ŠÏ~è³_nénùzCGC7Â_j,œ @dZ0í ž©çý~Ã/#9Cûïßý÷?jTšbâ wñðŒxàõÀkñÒH1oÁư&H!M”‚‘“‹ÁÀð@óãß~ü;V‡u€ €e¬ØXA8¾`(â%à að§þò±¢zõ'¯þ89>ù!ÒÑÞ©sÂ5ࢣ;Å‚Ëäir(2ÄYACGÃ…O~ÿ“¿`ñCÁˆ§%,Að¡«üäÏ}í¹‡ó3ó??ãÀçx¸t.ØZlð˜<4ø)xÀkñÂ5è¼Ø 33!HŽOÎׯ\©½ÒÐ=&[È̦0]â«ÈHÎÐ~ȩ̂ž›é ?ÎÅÁZo…KïÏÑȧXà:Àñð˜<ð<%ÈÀ°3œ´œ¼—Ë^.w{ÜÁ …éMYçþBPPþâÉ_|<51õØL>¤ÇìùŽœƒ£=‡bQsqpé]j¥($¿^.“«Ó’Òå×ËÛ‚`ªk&Ué ƒŸɤ›VlŠÏÏÊÿôL¾ §Þ K³…¦û‹.ÀXgDÌò(’¿|÷ÆÝÇSSËGƒ÷¿|X(Ó:ÀÎPDçþ?ùüO>››°7Òæ6¹aª7Ñ৸'¼׈ ²8XEdá'“ÊäY©Y’³WÏ6 tÏ€àK†m›û³cÁ/?¹÷dΑíGþ„‰lÛ.ÎÉÁXgï¥ÑOqo‰€2Eñ‚ŒäŒ%•µ•¿X°ÀDS‚/ö‘P~ë“ßúdblâîH C­^»7üÎê´Ð² ïåá2º LSFtv€•°Òø˜x×¹kçE âS3] r %!å@¤•X»­p™]tD ¸7-³ Ön+brc"zÝŠ¼ë¼ß:ÅØ <¾Ë+àÕºüL@ìV\þi@Éž’ô± <§Ÿú»9Xº,àyšúSÜ»°tY ÎTC"›þ™´¤´œÂÜ”¦Î&«@¤˜xß f²Àt 0©ù÷…G¿ðPjBjD柩Í—Žþ÷¸Àñà9Ê$eD8Ïó£—k.·Ã· X¸ÕxDfàL¦Á€,;%;¢ôßëðÂÒKG °ôZ“V9}KnCᆵÎ"°ü~|1ž0˜Ò\Î ð'\ù·~ùz­V£Ýɶ ÚÀyéb ÀgÚmÐ.™þÍ­rÒs ’㓵zƒÞ2ø2LÜy;8^E×°Ó üà‘ßÍÿW>ú•ÃÙiÙ­ü34àqxhËSPD &súf „‘Hl›îFãnˆßW@l*@<¹»O‚6!'¢ôßå…Ãà ‹~((pðº¼`åÓŸd¤d$cⵂG gøhL4ÿ—¨ªÔH>¨}ÈN/ò¡ I|±“5ý, .&.>(ø¥˜x£Ý¨z¢Ó…\‘‘Òà8:ÿ§ ‹H V‹‰7Õ Î€(^ l*HHä2yDàqx¨ûOA&6"V­Õb¢ñ'œžK‚â5*@°°r©<™ ÅÜ @Œ:FüA<ú‹ž ˆt% ‚2F&“%Eò¦Ý78žN((Äb#hTš˜ Àg1Ѩ'ö˜)þ.‘²Rm¤’fä ”+•"é¾d:sÿ™N‚MÀˆAQPˆc†—ÄK‚F} ôZ€¨ ±ÐÑŸ‚"ê6ü¦ü3ÿS‘×ñæ~ßàÀòà´3ëíyk0’˜á똲>ñ}i– Ô Ñä»ã/áÁÅÎ.ß@ìJÝiC%ršPDŒ8ë^ÿ-XŽlY¸)!WK¶Ã#sÍ Ñ~¦µàÐõß@êuó]+Ù÷|s(3ýI`Æw: @1Ž /‚•x¶Õ Qvò<2ß,1K ÕIEûÙŽ†?Aʸ‰‡½²“§àžß ÀŒbUe²©€.¦°tè&rFoßž¶½p%ZV­öËå¢fÚ’á:ä ßš3¾»<˜ö@-ëwH= )çÂŽ¶—ˆƒÑ#•âܱSþc¶—Œ‡‰}ŒåÜØÕúçèóéÄù’H£HB§ÓÂæî· õŽ?×ö€!Ñ·q3`[XÑþµ©÷=ÄyôQåƒ`›Ùߟç< po#Á1ˆ ƒçˆGcc|®îlDÅ6³€ àƒ®zs£xཨóI[¤¢|ódħ@1?±·÷%°,ù-ÞÏ9Ô×}#¦‡ Æ=½+q¢|‹ /S€bÎPh¼‰[#ñhÜR°mKWŽ(s‡íWæ:äYÉÆV1¾ErI;Í(æ2Ή=C¯FÁˆ“¡lÿÉ@îÛÍÆÐT\Ê»±wð•¨ð›*“ྑw#q«Üv¦ØDß @“xŸÚ:òbùb¾÷§ÉG€ E$¹°Érx4KFÕÆ}?4¼+´?%xôØl9¾kÓࣉ@·»çpÐð2$,y»ŸÛ}^v¬ËŽ\—xû /ûVΚP„Á*çMäp­Ä=­9o:²‹Æ:ÀÕp¢}©ÐY‹|o9_îÚiñQ @ Þ‰}Ž7ˆSq·T޲­%,²g e¼ ¯G‡o[Àøã:Äù¨Ìd @OÞ3Øéz13ñ9øÊ ÷ì‰÷ Nžè.÷;\¥ˆ•£Àwh"_½gÑÞÇ‚f³‚T¾›¹+Ä£ñHl*ªVìñ{ë¼¢F\?„­\ETøªWì’ Šð­Œ#Ük`¢`ü•Ÿ'ñE5§çàé7÷Žp¯A…†¥Å§áçÏG€ E¬cn ‡í$®§1kºR—k Ü7Å7”]ÅÔ"m‹ßòßÅ¿-ЍB Jß!Ü5pI8¿6`üyZ<ðCGx9œ¸_ú1Ÿ[ªÀùµ'¦ä£@j.n앟…Ff%®çʊð(c}ƒ†‡ó¶StðØ#/ƒVf&滼â~X”q>>Gx>*¤ÝhÑ"ƒíÇfå5âzô1鸞·Ûì¸åç 8RÙAlSVó Ǥãz^ÀhtÞtŠòQ SŠ0`‹y–¼}KWÇøÎåyOÌçdU¸q|J>*T(&ÁÑœr¨äió¥´£°Kc^‹–[Ñ>r$û"4 r£±"íØÆù¬^Xj,÷tŸ¤[‚QDŒ\m¶dÔ×3 ÈÆ­„íþcãûFxÝ¡ëï³c°=ë1ß "+”Ïå½§Û’fax| ¨ K\JSÏ€»ŠÇÑ〽Ó.ò,àLaitŒÆÔ3àÇ+8z°wØïùö¤@vfßBVü q=5š­èS,ñõ /Ãeƒh߸/»¹‰ýÄ|µš-èSäø®h_¤@ bä6¶¢¹Ñx1ö(ìÍ”|Th@K“ú°%¿ž¸ž~éÔ¨¶ú‡/ ƒó„ ¹‰Ø^p; |9¨UÝç?¹Olüñ`p6æ Æ·ï±uØ`ë =µÇD™oÜh´uÚ`í°Ò¥@ öÕ +y˜¸žÙv °Ù¾~àá¡¿¤í»–×aIÊ1_­ì> °9¾ =íÔ ˆ±*ŽoºJnü11¨ ¤â×Gà2…n¼£´£¤øý(ðipQÀ7z}T” À\gtK°…l½¥’£Ñmtcäúí{t @ 3û°uE3q=:ä¡N²ÙK«– mPêPD‚Cj‘™:J\Ï n†øL_Û»9ßè/Òöo¸ì4r£ñ·ƒ|–ÏáÿB?ís4 ˆ ZNî¾AÜ;l¼—=øõWõ¢F\¬ÆŽS{®G/Þ©ù(î¢PÌ|ðàûP¨È—Êžw‡J€sÔ‰áëÃaø®B¥Ž‚Ñè<'ï3]£®°|w3Íæ3Vå÷aëºvâzz‹'—‡|ýWúá¶RãoadÔ ™7øÈG®B®"ß¿LW7'؇ìa¿G>| ¹Ñx^W77f4êÃ4 ƒ ë{±©¸‡¸žs!šëüǽçzESñ5ktزµ‹˜¯Ë¼Æõþãžs=Ôø£E$ɼxô ò]~¼<‹s=#·G`Ñ…®À“J9<þÑèð•öŒ¿‘úXzéŠ?šPD„'o#5“)Î ùj‡DF šPL‚3Ÿ¼¤,q=•wÂdKð§ÝƒžŠÑv<õ‰ÛHÎ&Ô«õ`´&ø.öÐ~C3ŠH™g±Ç‰GãQs2ªê÷û»/tÃã½¢/}‰'>Ú@Ìg0'áZ}Àhì¹Ø#ÊG±P€ ùœà߸VãïÚx9_T[tèkÅ¿ýztŒÆêSðxÇŒÆ>«Ïø£ SŠécǃ]X½s€¸žæŽuèÐúÚçÑñ^‡hûm;܃u{¢`4v®A{OÀhì8ÛAû PD•ƃǿ~‹8w{ä({¿Ä{I9äFãûÕa²$øùº.vѾB3ŠHSdăŸh&GFSQukÿ¸ë|¼ÎÐ…=Yfÿ‡&r£Ñ‚ª›F1> šPL‚OB§‘@¥uã#ß®éXìr)p¾<`üõ_ï‡M:¿WÅxðèwÉùÜn9Ο7`´Ñ¥SŠHðÐWnC›êé¬ùÊåðZb}b`q…5þÎ|é6bÓíä|Wî‡Åç«]Ôø£EDX²ÚˆCk%Gôé¸uc·ÿ¸³¬^Whˆg¯0áþO¶óޤáfuÀhì<ßI?šPD†úx–'Ï—žÇIÆ.#†Ä¿Çx’ó•—žž`4Þ¡ÆÍ("ÂÎvbéÖaâ`l©/F_ÏRŸ@s<ÚÞk}Þö‡º°ì>=1_kÃôv-›’b1fôšî¨@çÆCß®#7þœJTž?î?î½Ö Û°ˆñëÆ¿SKnü¹¨}Õ}°Ñ4 ˆ§¿vê$'ñh\uùØmZ€ÓìDÏeñ]|O~¹šr¾êˇa]—ºhcR€",YgÀî'Úɸ¡L4ÜØá?n/m‡Çzémöj#ö~¼˜Ï OÇÑØ^Ö‹^êK3Šiƒa€¿{æ8 ©2¨<{<ï3þ è›ô¢|~æVTŒÆÊÒ3àÇŒFC§CõôR_*aû#X²i”8Ûë6cH—çËʼŠ{! &àŒ°d£Ûí$7â²Ñ^³ÝÜr¶^Ohˆç¬7à¾Ç;ˆùŒC™h­çZEF šP„#áqú™š¨7ÏžÏ3€‘Ö 7‡>‹N?SE>Ÿñ7Ú> }#½«/Í("¶Ç:‘¹Á@œŠwÕlÅhÿçáÐ|¶Y´=¶>Ú…¬(=·7cD`4†ã£ Eh]8òzr#ήFCEÀøëªì‚Ãàyž:Á…#ߌŸS…úò_÷ÕnØGì´Aïy @D8òízÈãÝÄ£qCÅ1¸íj€Ãà@we·h[þf=Q0+ŽÂ5f4:Œt^ê¤mO€N"Á’-£Øðá.âÑØÔ¿=5[ýÇÍï5‹Ù› Øô(9Ÿy =·¦6)è€" $,cÏÖ‚c—gPö _Eúf=†[EŒ?Itøõ¥ðíÃÐ7Sã Í"BñÇ:²ÆDœŠënm‡y ÀäÆßæv"m½‘˜¯¿v+L}£ñ=jüQ ˆš'ö}­1 Æ_ :.õw\î€Ã(bü%¹¢Â籫Ñvq¢Ñh7Pã Í"ÂïÔCë!ÛÊÁãPl£6t½/¾çÞïÖC£±½âAxÆŒF»ÁŽŽJzk/*¡ @1 rîÁêõ’qº< ÝÞì?nz§ œ'´Öì­£Xó¡b>Kÿ Ôn ð½×ÎÍÑ¥@3€éB"åqèÙÛÄ#1ÏKÐ!0þ1Ü.bü±<ý¨^RãgÐ~ö ÀŒF} 5þ¨ÀË+áàRüÇr­,ù=¨Ô²A°ŒÛ7Guyà4;çŸ6þ}'W™‰`èÆ؆2}ŸËíEóÙfq¾Ot!i59Ÿ¾f;l£±ñ½FYTHÁàªã)8ø$ßá ½¤=;«Qòày_0¸¼¸ò›+a‚r®ù&B“æÄö¯4“qV-ú.? ˜—·Ãa 5þ4©NlÿjSŒ¿è*¦6)æiÖy7¦ÓyHV¨ ¨AT*nmDß odgå,–Z>»|77M‹/ø±ûûõ`c|ÆIé-?¯S °[ÑyµS”o×ÿjð$Ewá¼ãFãˆÍoüÑÇÌ‹^"A:sÉÊëDÉ)%økÙ!ÿW›¶" IùI“ðU“ñ©˜P¾¥I“~Îì#X~¦@T,=Ka¨/ö×ÛøN#x.´SemAáÃ:b>«.£u£±ñ½Fp^jüÑ `RƒŠ¨¬ôü•›((; ™¸Ö°ÆÿŠŽ‘0aøþ5J|k|‡Ãó1R»Ÿ½C<{8 úJÏø9ûïôc¸c8”Ÿ——@Wú F£¾UqûÒ2±Ð ØTóêïýqjþFÍØœ¾TU FÞŽ¼YæÛ=-¾õŸî@|‘…x4¹±N}ºß|l:Û$Ê·öSHX¾›;à Ôø£@T=á#ßô'¨e}DicUxóv`KêüíùP%¨Âð½µTGÌ÷F€oG(Ÿ:ÃO¶Æ.K,F.ösµ^l…Ãâù\êtŠ¿>›×Fc[Eì&;ܦ]@ÇIDATÁS`–Þ$ï ý/‰Gå«kÑiðZ©+ެÃçÆÊá%æ»6¸£c|¬+¬œÀsß Ñx‰R_^Î¥X†,èº&¾çÞ¶ï7B£Q_~œÀhìx¿ƒ¥4˜]$›ªf¯4˜qá5À_Û‚[°’¼4i+ÒDù’LUH³_$æ{¹íŸ/ii’Ÿ/sï0òN§â¶®e°6lð¿ïúwêE¿ÌÝ#È?ÓOÌgïɇõNñ”|  j[ðÂöÿ }V1¼¬jÆuè¸T\܈Ýi×}Ý¡" µ‰Þ »¨ý9è³6“ññ)¨Ü„=iÕ¾:ï/Âp×¶=Û@¾âc1*0þtu:ŒtŽ„ª¼ŒÇ¶Õó“Làë¿Ó/ºÂ‚f³¥C‚Î?§æïŒî„É£ñիIJÝËDù= :þ# |;`òøvÇQj•Øý¬ÚeVòÓ~U{àIõNÏŠq«þ±Úåä|æ»àÖgøŒ?—7,€¨š€ÂGNË_ãê H‡RŽ×F÷ûßSîÖ\hR4â|­¯ ÆÕFÄçTÊñ·Ñ}¾/<Ö€Œ‡ªˆçáns<,•÷û?Csy3œVg¨ñ—eÇš'ÛÈù¬±°\>âçk¹Ø»™Ôœc0¼+ª¨y¢ ¼É¡Ù•ë«SÂ`õÑÕáùª~NÌw‹/B“+ê}¯‚“¹‰Ò\VÞ-˜Ìèª7þ6=ÕFMn4šÏŸ/0;®Rãfw ñýuÈìx85Ùs^ø.øIÈI@Öº,q¾ÛÈl‡˜¯.—»¼Ž8…p5¯ó¿¿ÛoßõVÒ÷#óÄ 9_÷2¸6úë½óöjüQp†#8˜¨Ô³üÒo1´fÜʘ×1„”ñ[pˆ©ôt‹0Ô4·Ãj@^úZ³n•vf_4ëÄG¿â{âx¥°Ÿ q½·zaì1†|¯‡õÏ6’óq,쥧ý‡}u}íZ;RÐ `FÛŒXVñÿˆNÓA”ª·a„‰óÕ©–cùþå¢|2»Ë+~7cžC»žEBB <QqVí7š p;Üh:'¾âoÙÿ섲ÀFÎW½ÜpZÀh,¥Æ€y‚¬ªÿFœ¾‘(-w«¥x%怿Îìوˌç«~qƒw"æHLmÇþâ§áÈŠ)žÊƒãï|3\6WÈûT-±#ï‹mä|æ8x®ŒÆ– -pZœ4j¨ÌCÇŠ—Fɉ@}üRÔ©|#?Ã0XutF$Ååy¬|ùçó•ìøg0¬x4ö–<2€©Ï„žë=¢ßKÑSà•9ßùÀí3þ̃æ°+ )¨0çÀ8âºZ‘sùutÝ’¨žW3ö¡°£rÎØôX,Ù¼D´ÃÇö´cIÅßÐyäô´ê]‘ö 3_'ž‹KÚVBÚ8SQÿv=À‡~ŸI‡‡ðà9_g!¤Më§ä[0#DUŒ jíØÝ‘lØ­vx\* Ë^~ûöÀŸ0ã: ˆÅ{éÛqLwÁWçÞe¨My ^yýûöÀ™8ùuþR‰G×þ¹ç‘Buî”ÿ°çFŒ:ch'WpÈÿaCŒFÊsÓÕè`è6D\MF^Ž9~Êç&¥'!)= ëv­Ã©8…s>‡²¿–Ý•kóï €™’Q^†ÄÆ›D^€W#ÁË«F°ÕHÌOåK¿Xޤ;áw+JˆoÁ¶¬gˆçáœ1 òk“²¹¬Ùwš2èý(òíHý\;9Ÿ)ò÷'®0tÙ\3o›9ìCŒ„Á#_z~åÑiˆð©8úÄQüÃSÿ…J1k}uο¯ù$Ì,>Výü_!‘yˆD 5+Õ9«üïwå‘•`Y6<ŸT|÷ ƒKþ ã$vâU¥§Àx|‰šQgDïÍ^Ñ÷’õÃx9ßùS`Ü>£Ñ<`FïõÞ·Çl´÷du–|¢›ön"æX¶f>ö­AÊJgµ¿†û|‹;˜Eh:º‘÷Ò_‰Wì½¾y/ìrŸû­IÒ w[®(Ÿº»ùz)äõË_Áõ[Ä+ðd-«¡h÷í!Àó<Þn}Ú£ƒPß?DÌ'm_Eóš ÆßBI… Ö`wÉî)Ÿ7ÝõöËÖ.ÃŽc;¨°Ð°ô7Dß™}°g§Í¸‹Z·6ïÆ™Ëgù;óÑ»vcè^áKû"tí‡=Çw•œ”±a—ösp“fJbËÆßõ˜úM¡ÏSz‘üt9ŸWŠTÑØ{«Æ^㬴¯WÌèµ.»¸IwèC‡DÿÎñê®Ô¡òíJèuz˜†M°Ä%Ç!U>ö}`R³RÅëüð!\yûÊ¢>S°è€µ;±òÏáúóß%ªçʦuØÒR‹œÁ°2E‡‹p󥛡)”Ó…Ußû¿¨~áû€bö_ ’tq‰•!5ùÎj¸l.´–·Š>/á‹m`rÈ¿„«û!5$Oi4FE8¯ýöµ¨ÕƒeëB/éöz½øÝw‡–[-!×ëôÐëô¸~þ:>óôg[šå©5jm,Âí÷oSp!xãÔwßGê¹+€œ›qá<^>|üØ‚ ”å)H]ž*Ê—r® iïV NÞ€5ìOˆ8Éh â«—+·œkÇá á•Ø ùŸÄ|Œ1 WFcËùxlžYÓF³½“3’E9ÚêÚÐz«uÒ×rxæà8ñíÌ—­[F=€…ˆ•_}¬ÝBd‰u§%âÊzÁv⇋ÀÊÄo¶òë¿Æ}Þ„.b#.åÜi0^±×]N|îÿL=Ó‚kçîßMO‚®ß`YŸú—Oáúùë8÷çsÐëÂß±¸£¾õ¸×°(=€ñ‡ÄÍaõ—~O˜ »Q½*­cg ƒ¬˜À#²\¦ƒx.ž~å~È;+½¬d¾Ö¨ð¥½ c¢Ïø³¹Ñz¾uÎæ´Ñä°ŒZÐV+>ÊK$l>°_þÕ—ñÅ_~'>qE‹ “Ëæüÿ|ô¤‹]á’*ê‘ùRtßGTÏˇŠñ…ÿx,Ç!!7ékÒÑ_×¦ÐæÓÄ.¼z$ Õ{Sõ8Zq ¬—C|N<2Öe ¯¦ÏÇ÷òåÅJC22® ŒÆ²¸íî9k—HçÖÇÁ¨ZòÝ?¾‹Ï¬ṳ̂u¤-ICÚ’4ì>¹·mumhºÑ„æÍèïìǽé½ð!W|ûÏ<² žØ™oï=¤Æ…Í˱ÿªoCŒå—C߬÷£;ðÈÈçÌù¥§Áp>ã¯-;ç7@étàPe½o>{`†š†À=¾¥¥§ ñJFã­¹3þ$ ¾ú»È®Û0˜ðƒþ | §—^¿„'vN¯ãˤ(ÜXˆÂ>¿Eß§GåW¢ª´*¬§@§ ŠA ð*ñTàÝû–Ã0&"r)_óÀ»k˜8OjØ€„.ßylNÂàåƒk¸Qº­#q¾ËWåj9R¿î…w79_bó$v¬ðo/Ž]~^ÿÝë¸úîÕ½69#Ç?qßø÷oàÀà ‘H¨,t@øÈý}âj:ˆÀ-ãðê~Ÿcî‘;1ðñKÄÁ—…å%þïçâ¦<ô'«||R¯\íç뢂˜wËPx^°âïz/,–1§’‹^þåËøí7‹ÁîÁqÈä2yì>ýÃOC£ÕÐk ŽÇê/þ ç"ºe‰¨_šŒÆïÀ¢1Ÿƒ_zù0ßylSŒïnÏ›ðŒúüxÔ-OEãŽwa‰!çË{ÿ~(M¾+å\VÚÊÛ][·Ö´â§ÿôS¼ô³—Ðt£ œ—‹¸ŽÜ¹øÈW> »¸CDŠ{ñ×»‘ó|%º>¶…¨žÿ¾_‚uñmbõéÈ¿¸€åµ}Ëà”c<7‚%X®ºHÌ3’‚‚ª½@9× cq®s缪K«Q]Z UŒ «ï[5;Ö`éÚ¥+äÓª£`]ö=´çþtŽ ÀbAÑ¿¼‹þ…p%«g\GBÌÿ†ñ{YWz çaZ–ÄãfQÂØ8=IšŸD‡ïÜHÆVº è«í»+mÀs<žúØS‘47óÏo·ØQu¶ Ug«ÀJYä®ÌÅòõ˱lã2d/Ëßÿq ÛmGù_Êáõz©D%gîîžrr£+¿û.nýòØŒ^Ÿ„w ÂMâÓpywŠ‘Ò³à•0xùàñàÇ;Pá1ß’¦õHë\î7þšßmžõ¶`F”ƒgxX –»Òw8/‡öºv´×µãÝÞElR,üèƒØ°wƒx––‹•[Wâvåm*‹Ù/Ö¢ûÑe¹/#¢×±°"¿$F™S‰åÇýÇ6'b0Ñ"Ñ⓺Øx>`4öTõÀ2hYTm*a%ˆ‰‹6Q m‚N»íuíS¾Î4l‹?y·.ÞÂß|Bô9)Ù)t °Ø°æÉ2\,{¼tú£J žñÜâK@ióÝaÈ eñÞ}rÆYãÛpå~¨ÇVº¬.t\ìX4í¸n×:œøÔ hb5NÝ ŒàÙ¿vÚõÔ_­Ç`÷ RsB÷ˆO‰§°Ø ­7 ÿ×7Ðö?–Nëù ô ï_|“4”‰•7;ͼ¶_ —Ì8k| ÃiX]0[J[àq.ãϨ7Bz»¶Ä´DdægB×>ýNºv¨L×4¤0yÜ<ÚW¾è™fèNkáÈœªy$áQ0âì8{ ï©óxÔ,·„á{!*ÆßöÒÓŒ­04t0x{p^´A´ÞCG?¼/XièeÚ»NîÂK?}iú>IáÑ¿ô,Ú{!Þ3ëDçô6/Ö|½q,ý_4¨€]Ä‹p ë6#]—ð°<^9`˜„¯“˜oiÃFduûVòæwš]º.4V‹¯dÜt`ŠO«ž}íCbz¢èÿ†z‡h°X‘þ† ©gû1xHF!ТŒü⇠;/Î<œßl€>axÖøä.vŸ?á?î¹Ö«~q^Û^]ZUÛV‰þïô?žFjN*ÊÿR.zOMœû>°;OŠ_C`·ØÑp­ ÀbÆš¯Žàü% 8EèÿÔ¨‚vâ¹øþŠ£PÙcÆ:•ç×µ"K{¢Å·ûòh¬¾†N³‹¶ýê߯Gg}'rW†îëÇJYì9½[lEoK/ô½zX Ä&Å">%¹+s!W†Ÿ^yóÊ¢¾[Ð=íøGËjFãW¸ /Ç9Zˆƒ1} j¶ûÛÞnE>cBý·g‡/UŸâ»üÇ­¥­à\Üœ÷Sí5ðÀßžû>ó£Ï@¦‰g`j% Ö `]Á´«Ö ãÒß.-Úùÿ=ï±ìg€¦Í Àà/ Ü‚<á\œÁ‘³gÀð¾N4Ü2 }³KŸc mœ >àpéHÆVŽvŒb¨~hÑ·_G?þøÌg´î_ V£ÿöÝ[(—ówCÕÍÓ$.k¿"÷£íà`!¾øf}ÍVdõûÜeÎáå=ß~‚7°öIEÔùVßÙŒ%=ù¾òòhy·åžñƪFüþÛ¿‡aÐ@TOWC~÷Íßa¤dÑgÔ ¥LÌW%Ѓò]~ìjÜ_0þº®tÁapø“.«ýg=ÔG…OéTâHy€¯ûj7lö{ª ÛjÛð³Ïþ ÛoÇÖ#[Ÿ:½E<<Ï£¯½—_»Œe7úÍAùÙžtäŸïó©5ßÌÂÈŽN¸ã,$ ‹X[LÄï›á¼r*‹ ÇÁ2`AOeOH=«¿ýÞ¸Èùö^Ý 9ÏÁ:hE÷¥î»ú}ëZtøÝ7~'Ú‹fó}¹ì.”¿TŽ ¹€¬eYÈZž…Œü hãµPÆ(!“Ë`3Û`3Ù`3ÛÐ×Þ‡¦ê&˜GÍ ¦ŸN3ðù©A:Û  VÊÂ뙿WV)û8¼jTê²ÁŽ‹¸8ész9¯ŽŸ î)ùæ«íµíw/x=Í=èiîYÑ+¶˜) ƒ2?[ð¯ÇÉ 4Z kPPD!6.‡C |Lk&5y—Û‘S£¡-MA…ذØ,Ö €xŠ.aàûwºœÃj¥:wÚ26fQŸW¥ ˜±ÄF,ã’p3ͤ3 ~~ŒN·Sñ‡¤ñOAA,&«É"~NŸÜtE@2Í€÷wÎæ° Gò¦Ó²ÒhKSPD!6Œã¸3n6<>xî?NjsØ"ZfV°ªà®o FA1ßÀ0 VDôšQÓ¨Y ޱ ¬xãÅ«7è{#y±Z£FVnz;zi«SPŒ!+7 jMdÕêôºAà …€3p‡d’þ¸ÊpÏ¿þüûÇE´kÕòÕËi‹SPÄ„Çëñ¾Yñf‹@¼A~@°1H4S×ÜÝl5^¤’¢uE`Y–¶:|·1/ZWÑkÚuí]£¦Q;&^&œDÅ üœ@q<­=­‘¼ym¼ë·¯§-OA`ýöõ¢ûN†êúê&®~OPlNéÌ$à‚DÀûʹWÊá„í¶C¡PÌË{´Ó}ÌÕC¡P`ûí‘!Ïã‹o4F~w˜ `J3P2Í ÆxÅ^ž‹7/-ƈn1«Ò¨°eï*ÿ÷4¶ìÝ•&²ÛÖë†t}ºŽQÁ7ºô‚S‚ÄšîîþîK‘~øÍ{6#53•öŠ{©™©Ø¼gsį»Õt«e,ø]A"àÉ&õfr-4pð<ÿæó¯y¼žˆ¶O‘ʤ8õÄ)¨cÔ´7PÜSPǨqê‰SÊ";ïr»\/¼ýBu¸‚ŒÀi¯?'0\Wj® 4t4ü%Ò/B¯EÉc%ô¬Å=–eQòXIÄÆ”U•UuöuŽp Š0N¦HWò"€_žþ·§_t¹]ÆH?TV^øà²Rj ÑÇ¢~HY)øàÈÊËŠ8ø­v«ýúÅå± wŒ§ ðŠœ˜T"vÁOa‘ŒÕÃ-F¬]¶V’–ñÄ&9=K – ­¡ n—›‹2í?óñ3È_‘?£×¿VþÚÅóÕ盘NJ€€M î0Ó>Zé•Ú+]göŸ¹_&•E|á¿6^‹¢õEèiëÕl¥=†bQ~êa$§'Ïèõ£¦QÓ—öåW½œ78ø…0~&€Ã4×D:ñfÂd~p¹]L~V¾½ »`×L>¨B©ÀªâUJ¥ìçåhâH ú<ÿ}ïÃá‡G|ºOˆÞzá½êúêö±ÀŠ€-h*ÑjÀ™ @pðOòëå=ûŠ÷e&Ä&ÌäÃJX ²—fcíÖµðz½êZè»´R܃F߆pâ±È+ʃ„ùæ[×n_«{æùgÊÆ‚Þ$’þûÓýƒ:Rx)%€Z­Z›ôŸßÿÏ%Ç'¯$ý2ÍF3šjšÐz»ºNŠy †a™›‰‚Õ(\Wmœ–¸ÎξNÝÇÿ×ÇÿÃévî ã+FØÃL0U@"BP @>&ê1ˆ]»lí’îÇ?Õ¨4ÉÑú’íV;ÚêÛ0Ð;«É «9PæónËht—²Ðh5«AZV–®\J”æÃ`6˜?ýÔ§Ÿïìé xa𛂦á2~¶2€à,@ @1&Z±§öZ÷¹G>÷C)+UЮCA1=¸=n÷×~ùµ?VÖV¶»ð^òãÁoÌÿ=‘Žþ3ñ&óIJ¦¡£Á”› _™·rC·¢ ˜<Ïó¿úë¯ÞxûòÛõcA.œ÷›ÇFýpi??Ýà'€à`çƒÄ@è0•µ•º¸˜¸þÂÜÂb‰DBoGFA1ÉÈÿ«¿þêÿzç¿n ~\ƃ_xÚOxPÄÛ‚GC¦Ê ¨¬­Ôé ú;‹6n’Ëätñ?…Èœÿ;¿þΟEFþñ”º‹~0]! ]€Ï„É‚3@SW“±êNÕµmk¶­ˆQÇ$Ñ&§ ð¡³¯S÷¹îÅ;íwz1ñ\pðÛXû¼`Dwж„ûß„7¥7èo^|³rËê-)Éñɹ´é)îu\»}­î³Ï~ö¥Qóèˆ`ä7a¢Ù' ~÷£?æJIJ€©nTÈ»=nîµ ¯ÝŒ×Æä¤åäÑ)ŽˆQӨ酷^xï™çŸ),ñÎ÷ƒG~'&^õ'Ü<¢Ô:#øLë‘ t‘¾S„*øÖ Œ¯Ш•êØ/=ö¥voÜ}\¥PÑR,zXíVû[—ÞºòÜ_ž»êt;ÇÜTÆG}±àºþ3þh @ðÜŸ #ò1/š11Ф&¦&|á#_8±mͶƒ2©Œ® Xtp¹]®²ª²ª_üé— fƒy,°í‚Q^øÓ.(®0ÁñÝ€gS¦©@AB0ž¨‹r‹Ò?öø¾y+Ö§%¥å€ÞIbƒçyè†t}·šnµ¼ðö Õ‚Í<„n ííA£¾pÇŸ¨ÿl €˜°"S¥ˆ¨Æþ®*Ì-L)ÙS²iCᆵ9é9¬„¥k(æ=<^·]×ÞU]_ÝôÆÅ7xº8…7¾Ç.ô‘”?øÆŸò› '̘Œ™ # R¤(ȓ㓵%{JVg¤d$ÇÅÄÅÇjbcµj­6F£Õ¨41J¹RI»Å\Áár8,6‹Õb³XLV“Åh1ZFM£f^7òfÅ›-c7í^áÞ}ÂÝ|„EøÂ~ÃmôIü³%bu /fÙ@°? SÆÿ/¼F*¨Kh< EÔ3û @rÂmòÜ‚ŸB+Áó|±-¾8‘÷ù*bÙ@8!‰ˆAp‘ Š4Œ0""*Q |ˆ?F?7\àS! ˜­, X‚OÓ —ê† ø»øw;8Â]JÌL!L˜€§ÁO1_D@Lø)>ÜÅ<üÝÄù$bÇ’Iþ:÷§¸ ^@¸ip/ö¿»øó1@& ü= @ƒŸb‰ ¾LWìâ] úùž"3ÓøûtÎïS ˜Ëi€Øÿ¦súŽŸÁ6Ÿ…€:ÅB†yø 5xh°S,fQ E‚<Ŭàÿ–8ã!j5ìIEND®B`‚fs-uae-2.2.3+dfsg/share/locale/0000755000175000017500000000000012162366653016414 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/share/locale/sr/0000755000175000017500000000000012162366653017040 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/share/locale/sr/LC_MESSAGES/0000755000175000017500000000000012162366653020625 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/share/locale/fi/0000755000175000017500000000000012162366653017012 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/share/locale/fi/LC_MESSAGES/0000755000175000017500000000000012162366653020577 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/share/locale/cs/0000755000175000017500000000000012162366653017021 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/share/locale/cs/LC_MESSAGES/0000755000175000017500000000000012162366653020606 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/share/locale/it/0000755000175000017500000000000012162366653017030 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/share/locale/it/LC_MESSAGES/0000755000175000017500000000000012162366653020615 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/share/locale/tr/0000755000175000017500000000000012162366653017041 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/share/locale/tr/LC_MESSAGES/0000755000175000017500000000000012162366653020626 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/share/locale/pt/0000755000175000017500000000000012162366653017037 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/share/locale/pt/LC_MESSAGES/0000755000175000017500000000000012162366653020624 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/share/locale/pl/0000755000175000017500000000000012162366653017027 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/share/locale/pl/LC_MESSAGES/0000755000175000017500000000000012162366653020614 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/share/locale/es/0000755000175000017500000000000012162366653017023 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/share/locale/es/LC_MESSAGES/0000755000175000017500000000000012162366653020610 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/share/locale/nb/0000755000175000017500000000000012162366653017013 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/share/locale/nb/LC_MESSAGES/0000755000175000017500000000000012162366653020600 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/share/locale/fr/0000755000175000017500000000000012162366653017023 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/share/locale/fr/LC_MESSAGES/0000755000175000017500000000000012162366653020610 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/share/locale/de/0000755000175000017500000000000012162366653017004 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/share/locale/de/LC_MESSAGES/0000755000175000017500000000000012162366653020571 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/out/0000755000175000017500000000000012162366653014662 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/out/.dummy0000644000175000017500000000000012162366653016004 0ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/targets.mk0000644000175000017500000000032612162366655016060 0ustar glaubitzglaubitzpubfiles: mkdir -p dist pubfiles-source: mkdir -p dist cp -a ChangeLog example.conf dist/ cp -a fs-uae-$(version)/README dist/ chmod 0644 dist/README chmod 0644 dist/ChangeLog chmod 0644 dist/example.conf fs-uae-2.2.3+dfsg/doc/0000755000175000017500000000000012162366653014620 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/doc/Default.fs-uae0000644000175000017500000000006712162366653017311 0ustar glaubitzglaubitz[config] amiga_model = A500 floppy_drive_0 = Disk1.adf fs-uae-2.2.3+dfsg/src/0000755000175000017500000000000012234725762014642 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/src/gencpu.cpp0000644000175000017500000036322612162366655016645 0ustar glaubitzglaubitz/* * UAE - The Un*x Amiga Emulator * * MC68000 emulation generator * * This is a fairly stupid program that generates a lot of case labels that * can be #included in a switch statement. * As an alternative, it can generate functions that handle specific * MC68000 instructions, plus a prototype header file and a function pointer * array to look up the function for an opcode. * Error checking is bad, an illegal table68k file will cause the program to * call abort(). * The generated code is sometimes sub-optimal, an optimizing compiler should * take care of this. * * The source for the insn timings is Markt & Technik's Amiga Magazin 8/1992. * * Copyright 1995, 1996, 1997, 1998, 1999, 2000 Bernd Schmidt */ #include "sysconfig.h" #include "sysdeps.h" #include #ifdef FSUAE char *ua (const char *s) { return strdup(s); } #endif #include "readcpu.h" #define BOOL_TYPE "int" /* Define the minimal 680x0 where NV flags are not affected by xBCD instructions. */ #define xBCD_KEEPS_NV_FLAGS 4 static FILE *headerfile; static FILE *stblfile; static int using_prefetch, using_indirect, using_mmu; static int using_prefetch_020, using_ce020; static int using_exception_3; static int using_ce; static int using_tracer; static int cpu_level; static int count_read, count_write, count_cycles, count_ncycles; static int count_read_ea, count_write_ea, count_cycles_ea; static int optimized_flags; #define GF_APDI 1 #define GF_AD8R 2 #define GF_PC8R 4 #define GF_AA 7 #define GF_NOREFILL 8 #define GF_PREFETCH 16 #define GF_FC 32 #define GF_MOVE 64 #define GF_IR2IRC 128 /* For the current opcode, the next lower level that will have different code. * Initialized to -1 for each opcode. If it remains unchanged, indicates we * are done with that opcode. */ static int next_cpu_level; static int *opcode_map; static int *opcode_next_clev; static int *opcode_last_postfix; static unsigned long *counts; static int generate_stbl; static int fixupcnt; #define GENA_GETV_NO_FETCH 0 #define GENA_GETV_FETCH 1 #define GENA_GETV_FETCH_ALIGN 2 #define GENA_MOVEM_DO_INC 0 #define GENA_MOVEM_NO_INC 1 #define GENA_MOVEM_MOVE16 2 static char *srcl, *dstl; static char *srcw, *dstw; static char *srcb, *dstb; static char *prefetch_long, *prefetch_word; static char *srcli, *srcwi, *srcbi, *nextl, *nextw, *nextb; static char *do_cycles, *disp000, *disp020; static void read_counts (void) { FILE *file; unsigned long opcode, count, total; char name[20]; int nr = 0; memset (counts, 0, 65536 * sizeof *counts); count = 0; file = fopen ("frequent.68k", "r"); if (file) { fscanf (file, "Total: %lu\n", &total); while (fscanf (file, "%lx: %lu %s\n", &opcode, &count, name) == 3) { opcode_next_clev[nr] = 5; opcode_last_postfix[nr] = -1; opcode_map[nr++] = opcode; counts[opcode] = count; } fclose (file); } if (nr == nr_cpuop_funcs) return; for (opcode = 0; opcode < 0x10000; opcode++) { if (table68k[opcode].handler == -1 && table68k[opcode].mnemo != i_ILLG && counts[opcode] == 0) { opcode_next_clev[nr] = 5; opcode_last_postfix[nr] = -1; opcode_map[nr++] = opcode; counts[opcode] = count; } } if (nr != nr_cpuop_funcs) abort (); } static char endlabelstr[80]; static int endlabelno = 0; static int need_endlabel; static int n_braces, limit_braces; static int m68k_pc_offset; static int insn_n_cycles, insn_n_cycles020; static int ir2irc; static void fpulimit (void) { if (limit_braces) return; printf ("\n#ifdef FPUEMU\n"); limit_braces = n_braces; n_braces = 0; } static void cpulimit (void) { printf ("#ifndef CPUEMU_68000_ONLY\n"); } static void returncycles (char *s, int cycles) { if (using_ce) return; if (using_ce020) printf ("%sreturn;\n", s); else printf ("%sreturn %d * CYCLE_UNIT / 2;\n", s, cycles); } static void addcycles_ce020 (int cycles) { if (!using_ce020) return; if (cycles > 0) printf ("\tregs.ce020memcycles += %d * cpucycleunit;\n", cycles); count_cycles += cycles; } static void addcycles000 (int cycles) { if (!using_ce) return; printf ("\t%s (%d);\n", do_cycles, cycles); count_cycles += cycles; } static void addcycles000_2 (char *s, int cycles) { if (!using_ce) return; printf ("%s%s (%d);\n", s, do_cycles, cycles); count_cycles += cycles; } static void addcycles000_3 (char *s) { if (!using_ce) return; printf ("%sif (cycles > 0) %s (cycles);\n", s, do_cycles); count_ncycles++; } static int isreg (amodes mode) { if (mode == Dreg || mode == Areg) return 1; return 0; } static void start_brace (void) { n_braces++; printf ("{"); } static void close_brace (void) { assert (n_braces > 0); n_braces--; printf ("}"); } static void finish_braces (void) { while (n_braces > 0) close_brace (); } static void pop_braces (int to) { while (n_braces > to) close_brace (); } static int bit_size (int size) { switch (size) { case sz_byte: return 8; case sz_word: return 16; case sz_long: return 32; default: abort (); } return 0; } static const char *bit_mask (int size) { switch (size) { case sz_byte: return "0xff"; case sz_word: return "0xffff"; case sz_long: return "0xffffffff"; default: abort (); } return 0; } static void gen_nextilong (char *type, char *name, int flags) { int r = m68k_pc_offset; m68k_pc_offset += 4; if (using_ce020) { printf ("\t%s %s = %s (%d);\n", type, name, prefetch_long, r); count_read += 2; } else if (using_ce) { printf ("\t%s %s;\n", type, name); /* we must do this because execution order of (something | something2) is not defined */ if (flags & GF_NOREFILL) { printf ("\t%s = %s (%d) << 16;\n", name, prefetch_word, r + 2); count_read++; printf ("\t%s |= regs.irc;\n", name); } else { printf ("\t%s = %s (%d) << 16;\n", name, prefetch_word, r + 2); count_read++; printf ("\t%s |= %s (%d);\n", name, prefetch_word, r + 4); count_read++; } } else { if (using_prefetch) { if (flags & GF_NOREFILL) { printf ("\t%s %s;\n", type, name); printf ("\t%s = %s (%d) << 16;\n", name, prefetch_word, r + 2); count_read++; printf ("\t%s |= regs.irc;\n", name); insn_n_cycles += 4; } else { printf ("\t%s %s = %s (%d);\n", type, name, prefetch_long, r + 2); count_read++; count_read++; insn_n_cycles += 8; } } else { insn_n_cycles += 8; printf ("\t%s %s = %s (%d);\n", type, name, prefetch_long, r); } } } static const char *gen_nextiword (int flags) { static char buffer[80]; int r = m68k_pc_offset; m68k_pc_offset += 2; if (using_ce020) { sprintf (buffer, "%s (%d)", prefetch_word, r); count_read++; } else if (using_ce) { if (flags & GF_NOREFILL) { strcpy (buffer, "regs.irc"); } else { sprintf (buffer, "%s (%d)", prefetch_word, r + 2); count_read++; } } else { if (using_prefetch) { if (flags & GF_NOREFILL) { sprintf (buffer, "regs.irc", r); } else { sprintf (buffer, "%s (%d)", prefetch_word, r + 2); count_read++; insn_n_cycles += 4; } } else { sprintf (buffer, "%s (%d)", prefetch_word, r); insn_n_cycles += 4; } } return buffer; } static const char *gen_nextibyte (int flags) { static char buffer[80]; int r = m68k_pc_offset; m68k_pc_offset += 2; if (using_ce020) { sprintf (buffer, "(uae_u8)%s (%d)", prefetch_word, r); count_read++; } else if (using_ce) { if (flags & GF_NOREFILL) { strcpy (buffer, "(uae_u8)regs.irc"); } else { sprintf (buffer, "(uae_u8)%s (%d)", prefetch_word, r + 2); count_read++; } } else { insn_n_cycles += 4; if (using_prefetch) { if (flags & GF_NOREFILL) { sprintf (buffer, "(uae_u8)regs.irc", r); } else { sprintf (buffer, "(uae_u8)%s (%d)", prefetch_word, r + 2); insn_n_cycles += 4; count_read++; } } else { sprintf (buffer, "%s (%d)", srcbi, r); insn_n_cycles += 4; } } return buffer; } static void irc2ir (bool dozero) { if (!using_prefetch) return; if (ir2irc) return; ir2irc = 1; printf ("\tregs.ir = regs.irc;\n"); if (dozero) printf ("\tregs.irc = 0;\n"); if (using_ce) printf ("\tipl_fetch ();\n"); } static void irc2ir (void) { irc2ir (false); } static int did_prefetch; static void fill_prefetch_2 (void) { if (!using_prefetch) return; printf ("\t%s (%d);\n", prefetch_word, m68k_pc_offset + 2); did_prefetch = 1; ir2irc = 0; count_read++; insn_n_cycles += 4; } static void fill_prefetch_1 (int o) { if (!using_prefetch) return; printf ("\t%s (%d);\n", prefetch_word, o); did_prefetch = 1; ir2irc = 0; count_read++; insn_n_cycles += 4; } static void fill_prefetch_full (void) { fill_prefetch_1 (0); irc2ir (); fill_prefetch_1 (2); } static void fill_prefetch_0 (void) { if (!using_prefetch) return; printf ("\t%s (0);\n", prefetch_word); did_prefetch = 1; ir2irc = 0; count_read++; insn_n_cycles += 4; } static void dummy_prefetch (void) { int o = m68k_pc_offset + 2; if (!using_prefetch) return; printf ("\t%s (%d);\n", srcwi, o); count_read++; insn_n_cycles += 4; } static void fill_prefetch_next_1 (void) { irc2ir (); fill_prefetch_1 (m68k_pc_offset + 2); } static void fill_prefetch_next (void) { fill_prefetch_next_1 (); } static void fill_prefetch_finish (void) { if (did_prefetch || !using_prefetch) return; fill_prefetch_1 (m68k_pc_offset); } static void setpc (const char *format, ...) { va_list parms; char buffer[1000]; va_start (parms, format); _vsnprintf (buffer, 1000 - 1, format, parms); va_end (parms); if (using_mmu) printf ("\tm68k_setpc_mmu (%s);\n", buffer); else printf ("\tm68k_setpc (%s);\n", buffer); } static void incpc (const char *format, ...) { va_list parms; char buffer[1000]; va_start (parms, format); _vsnprintf (buffer, 1000 - 1, format, parms); va_end (parms); if (using_mmu) printf ("\tm68k_incpci (%s);\n", buffer); else printf ("\tm68k_incpc (%s);\n", buffer); } static void sync_m68k_pc (void) { if (m68k_pc_offset == 0) return; incpc ("%d", m68k_pc_offset); m68k_pc_offset = 0; } static void gen_set_fault_pc (void) { if (!using_mmu) return; sync_m68k_pc (); printf ("\tregs.instruction_pc = m68k_getpci ();\n"); m68k_pc_offset = 0; } static void syncmovepc (int getv, int flags) { #if 0 if (!(flags & GF_MOVE)) return; if (getv == 1) { sync_m68k_pc (); //fill_prefetch_next (); } #endif } /* getv == 1: fetch data; getv != 0: check for odd address. If movem != 0, * the calling routine handles Apdi and Aipi modes. * gb-- movem == 2 means the same thing but for a MOVE16 instruction */ /* fixup indicates if we want to fix up adress registers in pre decrement * or post increment mode now (0) or later (1). A value of 2 will then be * used to do the actual fix up. This allows to do all memory readings * before any register is modified, and so to rerun operation without * side effect in case a bus fault is generated by any memory access. * XJ - 2006/11/13 */ static void genamode2 (amodes mode, char *reg, wordsizes size, char *name, int getv, int movem, int flags, int fixup) { char namea[100]; int m68k_pc_offset_last = m68k_pc_offset; sprintf (namea, "%sa", name); start_brace (); switch (mode) { case Dreg: if (movem) abort (); if (getv == 1) switch (size) { case sz_byte: #ifdef USE_DUBIOUS_BIGENDIAN_OPTIMIZATION /* This causes the target compiler to generate better code on few systems */ printf ("\tuae_s8 %s = ((uae_u8*)&m68k_dreg (regs, %s))[3];\n", name, reg); #else printf ("\tuae_s8 %s = m68k_dreg (regs, %s);\n", name, reg); #endif break; case sz_word: #ifdef USE_DUBIOUS_BIGENDIAN_OPTIMIZATION printf ("\tuae_s16 %s = ((uae_s16*)&m68k_dreg (regs, %s))[1];\n", name, reg); #else printf ("\tuae_s16 %s = m68k_dreg (regs, %s);\n", name, reg); #endif break; case sz_long: printf ("\tuae_s32 %s = m68k_dreg (regs, %s);\n", name, reg); break; default: abort (); } syncmovepc (getv, flags); return; case Areg: if (movem) abort (); if (getv == 1) switch (size) { case sz_word: printf ("\tuae_s16 %s = m68k_areg (regs, %s);\n", name, reg); break; case sz_long: printf ("\tuae_s32 %s = m68k_areg (regs, %s);\n", name, reg); break; default: abort (); } syncmovepc (getv, flags); return; case Aind: // (An) printf ("\tuaecptr %sa = m68k_areg (regs, %s);\n", name, reg); break; case Aipi: // (An)+ printf ("\tuaecptr %sa = m68k_areg (regs, %s);\n", name, reg); break; case Apdi: // -(An) printf ("\tuaecptr %sa;\n", name); switch (size) { case sz_byte: if (movem) printf ("\t%sa = m68k_areg (regs, %s);\n", name, reg); else printf ("\t%sa = m68k_areg (regs, %s) - areg_byteinc[%s];\n", name, reg, reg); break; case sz_word: printf ("\t%sa = m68k_areg (regs, %s) - %d;\n", name, reg, movem ? 0 : 2); break; case sz_long: printf ("\t%sa = m68k_areg (regs, %s) - %d;\n", name, reg, movem ? 0 : 4); break; default: abort (); } if (!(flags & GF_APDI)) { addcycles000 (2); insn_n_cycles += 2; count_cycles_ea += 2; } break; case Ad16: // (d16,An) printf ("\tuaecptr %sa = m68k_areg (regs, %s) + (uae_s32)(uae_s16)%s;\n", name, reg, gen_nextiword (flags)); count_read_ea++; break; case Ad8r: // (d8,An,Xn) printf ("\tuaecptr %sa;\n", name); if (cpu_level > 1) { if (next_cpu_level < 1) next_cpu_level = 1; sync_m68k_pc (); start_brace (); /* This would ordinarily be done in gen_nextiword, which we bypass. */ insn_n_cycles += 4; printf ("\t%sa = %s (m68k_areg (regs, %s), %s ());\n", name, disp020, reg, nextw); } else { if (!(flags & GF_AD8R)) { addcycles000 (2); insn_n_cycles += 2; count_cycles_ea += 2; } printf ("\t%sa = %s (m68k_areg (regs, %s), %s);\n", name, disp000, reg, gen_nextiword (flags)); count_read_ea++; } break; case PC16: // (d16,PC,Xn) printf ("\tuaecptr %sa = m68k_getpc () + %d;\n", name, m68k_pc_offset); printf ("\t%sa += (uae_s32)(uae_s16)%s;\n", name, gen_nextiword (flags)); break; case PC8r: // (d8,PC,Xn) printf ("\tuaecptr tmppc;\n"); printf ("\tuaecptr %sa;\n", name); if (cpu_level > 1) { if (next_cpu_level < 1) next_cpu_level = 1; sync_m68k_pc (); start_brace (); /* This would ordinarily be done in gen_nextiword, which we bypass. */ insn_n_cycles += 4; printf ("\ttmppc = m68k_getpc ();\n"); printf ("\t%sa = %s (tmppc, %s ());\n", name, disp020, nextw); } else { printf ("\ttmppc = m68k_getpc () + %d;\n", m68k_pc_offset); if (!(flags & GF_PC8R)) { addcycles000 (2); insn_n_cycles += 2; count_cycles_ea += 2; } printf ("\t%sa = %s (tmppc, %s);\n", name, disp000, gen_nextiword (flags)); } break; case absw: printf ("\tuaecptr %sa = (uae_s32)(uae_s16)%s;\n", name, gen_nextiword (flags)); break; case absl: gen_nextilong ("uaecptr", namea, flags); count_read_ea += 2; break; case imm: if (getv != 1) abort (); insn_n_cycles020++; switch (size) { case sz_byte: printf ("\tuae_s8 %s = %s;\n", name, gen_nextibyte (flags)); count_read_ea++; break; case sz_word: printf ("\tuae_s16 %s = %s;\n", name, gen_nextiword (flags)); count_read_ea++; break; case sz_long: gen_nextilong ("uae_s32", name, flags); count_read_ea += 2; break; default: abort (); } syncmovepc (getv, flags); return; case imm0: if (getv != 1) abort (); printf ("\tuae_s8 %s = %s;\n", name, gen_nextibyte (flags)); count_read_ea++; syncmovepc (getv, flags); return; case imm1: if (getv != 1) abort (); printf ("\tuae_s16 %s = %s;\n", name, gen_nextiword (flags)); count_read_ea++; syncmovepc (getv, flags); return; case imm2: if (getv != 1) abort (); gen_nextilong ("uae_s32", name, flags); count_read_ea += 2; syncmovepc (getv, flags); return; case immi: if (getv != 1) abort (); printf ("\tuae_u32 %s = %s;\n", name, reg); syncmovepc (getv, flags); return; default: abort (); } syncmovepc (getv, flags); /* We get here for all non-reg non-immediate addressing modes to * actually fetch the value. */ if ((using_prefetch || using_ce) && using_exception_3 && getv != 0 && size != sz_byte) { int offset = 0; if (flags & GF_MOVE) { offset = m68k_pc_offset; if (getv == 2) offset += 2; } else { offset = m68k_pc_offset_last; } printf ("\tif (%sa & 1) {\n", name); if (offset > 2) incpc ("%d", offset - 2); printf ("\t\texception3 (opcode, %sa);\n", name); printf ("\t\tgoto %s;\n", endlabelstr); printf ("\t}\n"); need_endlabel = 1; start_brace (); } if (flags & GF_PREFETCH) fill_prefetch_next (); else if (flags & GF_IR2IRC) irc2ir (true); if (getv == 1) { start_brace (); if (using_ce020) { switch (size) { case sz_byte: insn_n_cycles += 4; printf ("\tuae_s8 %s = %s (%sa);\n", name, srcb, name); count_read++; break; case sz_word: insn_n_cycles += 4; printf ("\tuae_s16 %s = %s (%sa);\n", name, srcw, name); count_read++; break; case sz_long: insn_n_cycles += 8; printf ("\tuae_s32 %s = %s (%sa);\n", name, srcl, name); count_read += 2; break; default: abort (); } } else if (using_ce) { switch (size) { case sz_byte: printf ("\tuae_s8 %s = %s (%sa);\n", name, srcb, name); count_read++; break; case sz_word: printf ("\tuae_s16 %s = %s (%sa);\n", name, srcw, name); count_read++; break; case sz_long: printf ("\tuae_s32 %s = %s (%sa) << 16; %s |= %s (%sa + 2);\n", name, srcw, name, name, srcw, name); count_read += 2; break; default: abort (); } } else if (using_mmu) { if (flags & GF_FC) { switch (size) { case sz_byte: insn_n_cycles += 4; printf ("\tuae_s8 %s = sfc_get_byte (%sa);\n", name, name); break; case sz_word: insn_n_cycles += 4; printf ("\tuae_s16 %s = sfc_get_word (%sa);\n", name, name); break; case sz_long: insn_n_cycles += 8; printf ("\tuae_s32 %s = sfc_get_long (%sa);\n", name, name); break; default: abort (); } } else { switch (size) { case sz_byte: insn_n_cycles += 4; printf ("\tuae_s8 %s = %s (%sa);\n", name, srcb, name); break; case sz_word: insn_n_cycles += 4; printf ("\tuae_s16 %s = %s (%sa);\n", name, srcw, name); break; case sz_long: insn_n_cycles += 8; printf ("\tuae_s32 %s = %s (%sa);\n", name, srcl, name); break; default: abort (); } } } else { switch (size) { case sz_byte: insn_n_cycles += 4; printf ("\tuae_s8 %s = %s (%sa);\n", name, srcb, name); count_read++; break; case sz_word: insn_n_cycles += 4; printf ("\tuae_s16 %s = %s (%sa);\n", name, srcw, name); count_read++; break; case sz_long: insn_n_cycles += 8; printf ("\tuae_s32 %s = %s (%sa);\n", name, srcl, name); count_read += 2; break; default: abort (); } } } /* We now might have to fix up the register for pre-dec or post-inc * addressing modes. */ if (!movem) switch (mode) { case Aipi: if (fixup == 1) { printf ("\tmmufixup[%d].reg = %s;\n", fixupcnt, reg); printf ("\tmmufixup[%d].value = m68k_areg (regs, %s);\n", fixupcnt, reg); } switch (size) { case sz_byte: printf ("\tm68k_areg (regs, %s) += areg_byteinc[%s];\n", reg, reg); break; case sz_word: printf ("\tm68k_areg (regs, %s) += 2;\n", reg); break; case sz_long: printf ("\tm68k_areg (regs, %s) += 4;\n", reg); break; default: abort (); } break; case Apdi: if (fixup == 1) { printf ("\tmmufixup[%d].reg = %s;\n", fixupcnt, reg); printf ("\tmmufixup[%d].value = m68k_areg (regs, %s);\n", fixupcnt, reg); } printf ("\tm68k_areg (regs, %s) = %sa;\n", reg, name); break; default: break; } } static void genamode_fixup (amodes mode, char *reg, wordsizes size, char *name, int getv, int movem, int flags, int fixup) { if (fixup != 2) { genamode2 (mode, reg, size, name, getv, movem, flags, fixup); } else { if (!movem) { switch (mode) { case Aipi: case Apdi: printf ("\tmmufixup[0].reg = -1;\n", fixupcnt); break; } } } } static void genamode (amodes mode, char *reg, wordsizes size, char *name, int getv, int movem, int flags) { genamode2 (mode, reg, size, name, getv, movem, flags, 0); } static void genamode_pre (amodes mode, char *reg, wordsizes size, char *name, int getv, int movem, int flags) { genamode_fixup (mode, reg, size, name, getv, movem, flags, using_mmu ? 1 : 0); } static void genamode_post (amodes mode, char *reg, wordsizes size, char *name, int getv, int movem, int flags) { if (using_mmu) genamode_fixup (mode, reg, size, name, getv, movem, flags, 2); } static void genastore_2 (char *from, amodes mode, char *reg, wordsizes size, char *to, int store_dir, int flags) { switch (mode) { case Dreg: switch (size) { case sz_byte: printf ("\tm68k_dreg (regs, %s) = (m68k_dreg (regs, %s) & ~0xff) | ((%s) & 0xff);\n", reg, reg, from); break; case sz_word: printf ("\tm68k_dreg (regs, %s) = (m68k_dreg (regs, %s) & ~0xffff) | ((%s) & 0xffff);\n", reg, reg, from); break; case sz_long: printf ("\tm68k_dreg (regs, %s) = (%s);\n", reg, from); break; default: abort (); } break; case Areg: switch (size) { case sz_word: printf ("\tm68k_areg (regs, %s) = (uae_s32)(uae_s16)(%s);\n", reg, from); break; case sz_long: printf ("\tm68k_areg (regs, %s) = (%s);\n", reg, from); break; default: abort (); } break; case Aind: case Aipi: case Apdi: case Ad16: case Ad8r: case absw: case absl: case PC16: case PC8r: gen_set_fault_pc (); if (using_ce020) { switch (size) { case sz_byte: printf ("\t%s (%sa, %s);\n", dstb, to, from); count_write++; break; case sz_word: if (cpu_level < 2 && (mode == PC16 || mode == PC8r)) abort (); printf ("\t%s (%sa, %s);\n", dstw, to, from); count_write++; break; case sz_long: if (cpu_level < 2 && (mode == PC16 || mode == PC8r)) abort (); printf ("\t%s (%sa, %s);\n", dstl, to, from); count_write += 2; break; default: abort (); } } else if (using_ce) { switch (size) { case sz_byte: printf ("\tx_put_byte (%sa, %s);\n", to, from); count_write++; break; case sz_word: if (cpu_level < 2 && (mode == PC16 || mode == PC8r)) abort (); printf ("\tx_put_word (%sa, %s);\n", to, from); count_write++; break; case sz_long: if (cpu_level < 2 && (mode == PC16 || mode == PC8r)) abort (); if (store_dir) printf ("\t%s (%sa + 2, %s); %s (%sa, %s >> 16);\n", dstw, to, from, dstw, to, from); else printf ("\t%s (%sa, %s >> 16); %s (%sa + 2, %s);\n", dstw, to, from, dstw, to, from); count_write += 2; break; default: abort (); } } else if (using_mmu) { switch (size) { case sz_byte: insn_n_cycles += 4; if (flags & GF_FC) printf ("\tdfc_put_byte (%sa, %s);\n", to, from); else printf ("\t%s (%sa, %s);\n", dstb, to, from); break; case sz_word: insn_n_cycles += 4; if (cpu_level < 2 && (mode == PC16 || mode == PC8r)) abort (); if (flags & GF_FC) printf ("\tdfc_put_word (%sa, %s);\n", to, from); else printf ("\t%s (%sa, %s);\n", dstw, to, from); break; case sz_long: insn_n_cycles += 8; if (cpu_level < 2 && (mode == PC16 || mode == PC8r)) abort (); if (flags & GF_FC) printf ("\tdfc_put_long (%sa, %s);\n", to, from); else printf ("\t%s (%sa, %s);\n", dstl, to, from); break; default: abort (); } } else { switch (size) { case sz_byte: insn_n_cycles += 4; printf ("\t%s (%sa, %s);\n", dstb, to, from); count_write++; break; case sz_word: insn_n_cycles += 4; if (cpu_level < 2 && (mode == PC16 || mode == PC8r)) abort (); printf ("\t%s (%sa, %s);\n", dstw, to, from); count_write++; break; case sz_long: insn_n_cycles += 8; if (cpu_level < 2 && (mode == PC16 || mode == PC8r)) abort (); printf ("\t%s (%sa, %s);\n", dstl, to, from); count_write += 2; break; default: abort (); } } break; case imm: case imm0: case imm1: case imm2: case immi: abort (); break; default: abort (); } } static void genastore (char *from, amodes mode, char *reg, wordsizes size, char *to) { genastore_2 (from, mode, reg, size, to, 0, 0); } static void genastore_rev (char *from, amodes mode, char *reg, wordsizes size, char *to) { genastore_2 (from, mode, reg, size, to, 1, 0); } static void genastore_fc (char *from, amodes mode, char *reg, wordsizes size, char *to) { genastore_2 (from, mode, reg, size, to, 1, GF_FC); } static void genmovemel (uae_u16 opcode) { char getcode[100]; int size = table68k[opcode].size == sz_long ? 4 : 2; if (table68k[opcode].size == sz_long) { sprintf (getcode, "%s (srca)", srcl); } else { sprintf (getcode, "(uae_s32)(uae_s16)%s (srca)", srcw); } count_read += table68k[opcode].size == sz_long ? 2 : 1; printf ("\tuae_u16 mask = %s;\n", gen_nextiword (0)); printf ("\tuae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff;\n"); genamode (table68k[opcode].dmode, "dstreg", table68k[opcode].size, "src", 2, 1, 0); start_brace (); printf ("\twhile (dmask) { m68k_dreg (regs, movem_index1[dmask]) = %s; srca += %d; dmask = movem_next[dmask]; }\n", getcode, size); printf ("\twhile (amask) { m68k_areg (regs, movem_index1[amask]) = %s; srca += %d; amask = movem_next[amask]; }\n", getcode, size); if (table68k[opcode].dmode == Aipi) { printf ("\tm68k_areg (regs, dstreg) = srca;\n"); count_read++; } count_ncycles++; fill_prefetch_next (); } static void genmovemel_ce (uae_u16 opcode) { int size = table68k[opcode].size == sz_long ? 4 : 2; printf ("\tuae_u16 mask = %s;\n", gen_nextiword (0)); printf ("\tuae_u32 dmask = mask & 0xff, amask = (mask >> 8) & 0xff;\n"); printf ("\tuae_u32 v;\n"); genamode (table68k[opcode].dmode, "dstreg", table68k[opcode].size, "src", 2, 1, GF_AA); if (table68k[opcode].dmode == Ad8r || table68k[opcode].dmode == PC8r) addcycles000 (2); start_brace (); if (table68k[opcode].size == sz_long) { printf ("\twhile (dmask) { v = %s (srca) << 16; v |= %s (srca + 2); m68k_dreg (regs, movem_index1[dmask]) = v; srca += %d; dmask = movem_next[dmask]; }\n", srcw, srcw, size); printf ("\twhile (amask) { v = %s (srca) << 16; v |= %s (srca + 2); m68k_areg (regs, movem_index1[amask]) = v; srca += %d; amask = movem_next[amask]; }\n", srcw, srcw, size); } else { printf ("\twhile (dmask) { m68k_dreg (regs, movem_index1[dmask]) = (uae_s32)(uae_s16)%s (srca); srca += %d; dmask = movem_next[dmask]; }\n", srcw, size); printf ("\twhile (amask) { m68k_areg (regs, movem_index1[amask]) = (uae_s32)(uae_s16)%s (srca); srca += %d; amask = movem_next[amask]; }\n", srcw, size); } printf ("\t%s (srca);\n", srcw); // and final extra word fetch that goes nowhere.. count_read++; if (table68k[opcode].dmode == Aipi) printf ("\tm68k_areg (regs, dstreg) = srca;\n"); count_ncycles++; fill_prefetch_next (); } static void genmovemle (uae_u16 opcode) { char putcode[100]; int size = table68k[opcode].size == sz_long ? 4 : 2; if (table68k[opcode].size == sz_long) { sprintf (putcode, "%s (srca", dstl); } else { sprintf (putcode, "%s (srca", dstw); } count_write += table68k[opcode].size == sz_long ? 2 : 1; printf ("\tuae_u16 mask = %s;\n", gen_nextiword (0)); genamode (table68k[opcode].dmode, "dstreg", table68k[opcode].size, "src", 2, 1, 0); start_brace (); if (table68k[opcode].dmode == Apdi) { printf ("\tuae_u16 amask = mask & 0xff, dmask = (mask >> 8) & 0xff;\n"); if (!using_mmu) printf ("\tint type = get_cpu_model () >= 68020;\n"); printf ("\twhile (amask) {\n"); printf ("\t\tsrca -= %d;\n", size); if (!using_mmu) printf ("\t\tif (type) m68k_areg (regs, dstreg) = srca;\n"); printf ("\t\t%s, m68k_areg (regs, movem_index2[amask]));\n", putcode); printf ("\t\tamask = movem_next[amask];\n"); printf ("\t}\n"); printf ("\twhile (dmask) { srca -= %d; %s, m68k_dreg (regs, movem_index2[dmask])); dmask = movem_next[dmask]; }\n", size, putcode); printf ("\tm68k_areg (regs, dstreg) = srca;\n"); } else { printf ("\tuae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff;\n"); printf ("\twhile (dmask) { %s, m68k_dreg (regs, movem_index1[dmask])); srca += %d; dmask = movem_next[dmask]; }\n", putcode, size); printf ("\twhile (amask) { %s, m68k_areg (regs, movem_index1[amask])); srca += %d; amask = movem_next[amask]; }\n", putcode, size); } count_ncycles++; fill_prefetch_next (); } static void genmovemle_ce (uae_u16 opcode) { int size = table68k[opcode].size == sz_long ? 4 : 2; printf ("\tuae_u16 mask = %s;\n", gen_nextiword (0)); genamode (table68k[opcode].dmode, "dstreg", table68k[opcode].size, "src", 2, 1, GF_AA); if (table68k[opcode].dmode == Ad8r || table68k[opcode].dmode == PC8r) { addcycles000 (2); } start_brace (); if (table68k[opcode].size == sz_long) { if (table68k[opcode].dmode == Apdi) { printf ("\tuae_u16 amask = mask & 0xff, dmask = (mask >> 8) & 0xff;\n"); printf ("\twhile (amask) { srca -= %d; %s (srca, m68k_areg (regs, movem_index2[amask]) >> 16); %s (srca + 2, m68k_areg (regs, movem_index2[amask])); amask = movem_next[amask]; }\n", size, dstw, dstw); printf ("\twhile (dmask) { srca -= %d; %s (srca, m68k_dreg (regs, movem_index2[dmask]) >> 16); %s (srca + 2, m68k_dreg (regs, movem_index2[dmask])); dmask = movem_next[dmask]; }\n", size, dstw, dstw); printf ("\tm68k_areg (regs, dstreg) = srca;\n"); } else { printf ("\tuae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff;\n"); printf ("\twhile (dmask) { %s (srca, m68k_dreg (regs, movem_index1[dmask]) >> 16); %s (srca + 2, m68k_dreg (regs, movem_index1[dmask])); srca += %d; dmask = movem_next[dmask]; }\n", dstw, dstw, size); printf ("\twhile (amask) { %s (srca, m68k_areg (regs, movem_index1[amask]) >> 16); %s (srca + 2, m68k_areg (regs, movem_index1[amask])); srca += %d; amask = movem_next[amask]; }\n", dstw, dstw, size); } } else { if (table68k[opcode].dmode == Apdi) { printf ("\tuae_u16 amask = mask & 0xff, dmask = (mask >> 8) & 0xff;\n"); printf ("\twhile (amask) { srca -= %d; %s (srca, m68k_areg (regs, movem_index2[amask])); amask = movem_next[amask]; }\n", size, dstw); printf ("\twhile (dmask) { srca -= %d; %s (srca, m68k_dreg (regs, movem_index2[dmask])); dmask = movem_next[dmask]; }\n", size, dstw); printf ("\tm68k_areg (regs, dstreg) = srca;\n"); } else { printf ("\tuae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff;\n"); printf ("\twhile (dmask) { %s (srca, m68k_dreg (regs, movem_index1[dmask])); srca += %d; dmask = movem_next[dmask]; }\n", dstw, size); printf ("\twhile (amask) { %s (srca, m68k_areg (regs, movem_index1[amask])); srca += %d; amask = movem_next[amask]; }\n", dstw, size); } } count_ncycles++; fill_prefetch_next (); } static void duplicate_carry (int n) { int i; for (i = 0; i <= n; i++) printf ("\t"); printf ("COPY_CARRY ();\n"); } typedef enum { flag_logical_noclobber, flag_logical, flag_add, flag_sub, flag_cmp, flag_addx, flag_subx, flag_z, flag_zn, flag_av, flag_sv } flagtypes; static void genflags_normal (flagtypes type, wordsizes size, char *value, char *src, char *dst) { char vstr[100], sstr[100], dstr[100]; char usstr[100], udstr[100]; char unsstr[100], undstr[100]; switch (size) { case sz_byte: strcpy (vstr, "((uae_s8)("); strcpy (usstr, "((uae_u8)("); break; case sz_word: strcpy (vstr, "((uae_s16)("); strcpy (usstr, "((uae_u16)("); break; case sz_long: strcpy (vstr, "((uae_s32)("); strcpy (usstr, "((uae_u32)("); break; default: abort (); } strcpy (unsstr, usstr); strcpy (sstr, vstr); strcpy (dstr, vstr); strcat (vstr, value); strcat (vstr, "))"); strcat (dstr, dst); strcat (dstr, "))"); strcat (sstr, src); strcat (sstr, "))"); strcpy (udstr, usstr); strcat (udstr, dst); strcat (udstr, "))"); strcat (usstr, src); strcat (usstr, "))"); strcpy (undstr, unsstr); strcat (unsstr, "-"); strcat (undstr, "~"); strcat (undstr, dst); strcat (undstr, "))"); strcat (unsstr, src); strcat (unsstr, "))"); switch (type) { case flag_logical_noclobber: case flag_logical: case flag_z: case flag_zn: case flag_av: case flag_sv: case flag_addx: case flag_subx: break; case flag_add: start_brace (); printf ("uae_u32 %s = %s + %s;\n", value, dstr, sstr); break; case flag_sub: case flag_cmp: start_brace (); printf ("uae_u32 %s = %s - %s;\n", value, dstr, sstr); break; } switch (type) { case flag_logical_noclobber: case flag_logical: case flag_zn: break; case flag_add: case flag_sub: case flag_addx: case flag_subx: case flag_cmp: case flag_av: case flag_sv: start_brace (); printf ("\t" BOOL_TYPE " flgs = %s < 0;\n", sstr); printf ("\t" BOOL_TYPE " flgo = %s < 0;\n", dstr); printf ("\t" BOOL_TYPE " flgn = %s < 0;\n", vstr); break; } switch (type) { case flag_logical: printf ("\tCLEAR_CZNV ();\n"); printf ("\tSET_ZFLG (%s == 0);\n", vstr); printf ("\tSET_NFLG (%s < 0);\n", vstr); break; case flag_logical_noclobber: printf ("\tSET_ZFLG (%s == 0);\n", vstr); printf ("\tSET_NFLG (%s < 0);\n", vstr); break; case flag_av: printf ("\tSET_VFLG ((flgs ^ flgn) & (flgo ^ flgn));\n"); break; case flag_sv: printf ("\tSET_VFLG ((flgs ^ flgo) & (flgn ^ flgo));\n"); break; case flag_z: printf ("\tSET_ZFLG (GET_ZFLG () & (%s == 0));\n", vstr); break; case flag_zn: printf ("\tSET_ZFLG (GET_ZFLG () & (%s == 0));\n", vstr); printf ("\tSET_NFLG (%s < 0);\n", vstr); break; case flag_add: printf ("\tSET_ZFLG (%s == 0);\n", vstr); printf ("\tSET_VFLG ((flgs ^ flgn) & (flgo ^ flgn));\n"); printf ("\tSET_CFLG (%s < %s);\n", undstr, usstr); duplicate_carry (0); printf ("\tSET_NFLG (flgn != 0);\n"); break; case flag_sub: printf ("\tSET_ZFLG (%s == 0);\n", vstr); printf ("\tSET_VFLG ((flgs ^ flgo) & (flgn ^ flgo));\n"); printf ("\tSET_CFLG (%s > %s);\n", usstr, udstr); duplicate_carry (0); printf ("\tSET_NFLG (flgn != 0);\n"); break; case flag_addx: printf ("\tSET_VFLG ((flgs ^ flgn) & (flgo ^ flgn));\n"); /* minterm SON: 0x42 */ printf ("\tSET_CFLG (flgs ^ ((flgs ^ flgo) & (flgo ^ flgn)));\n"); /* minterm SON: 0xD4 */ duplicate_carry (0); break; case flag_subx: printf ("\tSET_VFLG ((flgs ^ flgo) & (flgo ^ flgn));\n"); /* minterm SON: 0x24 */ printf ("\tSET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn)));\n"); /* minterm SON: 0xB2 */ duplicate_carry (0); break; case flag_cmp: printf ("\tSET_ZFLG (%s == 0);\n", vstr); printf ("\tSET_VFLG ((flgs != flgo) && (flgn != flgo));\n"); printf ("\tSET_CFLG (%s > %s);\n", usstr, udstr); printf ("\tSET_NFLG (flgn != 0);\n"); break; } } static void genflags (flagtypes type, wordsizes size, char *value, char *src, char *dst) { /* Temporarily deleted 68k/ARM flag optimizations. I'd prefer to have them in the appropriate m68k.h files and use just one copy of this code here. The API can be changed if necessary. */ if (optimized_flags) { switch (type) { case flag_add: case flag_sub: start_brace (); printf ("\tuae_u32 %s;\n", value); break; default: break; } /* At least some of those casts are fairly important! */ switch (type) { case flag_logical_noclobber: printf ("\t{uae_u32 oldcznv = GET_CZNV & ~(FLAGVAL_Z | FLAGVAL_N);\n"); if (strcmp (value, "0") == 0) { printf ("\tSET_CZNV (olcznv | FLAGVAL_Z);\n"); } else { switch (size) { case sz_byte: printf ("\toptflag_testb (regs, (uae_s8)(%s));\n", value); break; case sz_word: printf ("\toptflag_testw (regs, (uae_s16)(%s));\n", value); break; case sz_long: printf ("\toptflag_testl (regs, (uae_s32)(%s));\n", value); break; } printf ("\tIOR_CZNV (oldcznv);\n"); } printf ("\t}\n"); return; case flag_logical: if (strcmp (value, "0") == 0) { printf ("\tSET_CZNV (FLAGVAL_Z);\n"); } else { switch (size) { case sz_byte: printf ("\toptflag_testb (regs, (uae_s8)(%s));\n", value); break; case sz_word: printf ("\toptflag_testw (regs, (uae_s16)(%s));\n", value); break; case sz_long: printf ("\toptflag_testl (regs, (uae_s32)(%s));\n", value); break; } } return; case flag_add: switch (size) { case sz_byte: printf ("\toptflag_addb (regs, %s, (uae_s8)(%s), (uae_s8)(%s));\n", value, src, dst); break; case sz_word: printf ("\toptflag_addw (regs, %s, (uae_s16)(%s), (uae_s16)(%s));\n", value, src, dst); break; case sz_long: printf ("\toptflag_addl (regs, %s, (uae_s32)(%s), (uae_s32)(%s));\n", value, src, dst); break; } return; case flag_sub: switch (size) { case sz_byte: printf ("\toptflag_subb (regs, %s, (uae_s8)(%s), (uae_s8)(%s));\n", value, src, dst); break; case sz_word: printf ("\toptflag_subw (regs, %s, (uae_s16)(%s), (uae_s16)(%s));\n", value, src, dst); break; case sz_long: printf ("\toptflag_subl (regs, %s, (uae_s32)(%s), (uae_s32)(%s));\n", value, src, dst); break; } return; case flag_cmp: switch (size) { case sz_byte: printf ("\toptflag_cmpb (regs, (uae_s8)(%s), (uae_s8)(%s));\n", src, dst); break; case sz_word: printf ("\toptflag_cmpw (regs, (uae_s16)(%s), (uae_s16)(%s));\n", src, dst); break; case sz_long: printf ("\toptflag_cmpl (regs, (uae_s32)(%s), (uae_s32)(%s));\n", src, dst); break; } return; default: break; } } genflags_normal (type, size, value, src, dst); } static void force_range_for_rox (const char *var, wordsizes size) { /* Could do a modulo operation here... which one is faster? */ switch (size) { case sz_long: printf ("\tif (%s >= 33) %s -= 33;\n", var, var); break; case sz_word: printf ("\tif (%s >= 34) %s -= 34;\n", var, var); printf ("\tif (%s >= 17) %s -= 17;\n", var, var); break; case sz_byte: printf ("\tif (%s >= 36) %s -= 36;\n", var, var); printf ("\tif (%s >= 18) %s -= 18;\n", var, var); printf ("\tif (%s >= 9) %s -= 9;\n", var, var); break; } } static const char *cmask (wordsizes size) { switch (size) { case sz_byte: return "0x80"; case sz_word: return "0x8000"; case sz_long: return "0x80000000"; default: abort (); } } static int source_is_imm1_8 (struct instr *i) { return i->stype == 3; } static void shift_ce (amodes dmode, int size) { if (using_ce && isreg (dmode)) { int c = size == sz_long ? 4 : 2; printf ("\t{\n"); printf ("\t\tint cycles = %d;\n", c); printf ("\t\tcycles += 2 * ccnt;\n"); addcycles000_3 ("\t\t"); printf ("\t}\n"); count_cycles += c; } } // BCHG/BSET/BCLR Dx,Dx or #xx,Dx adds 2 cycles if bit number > 15 static void bsetcycles (struct instr *curi) { if (curi->size == sz_byte) { printf ("\tsrc &= 7;\n"); } else { printf ("\tsrc &= 31;\n"); if (isreg (curi->dmode)) { addcycles000 (2); if (curi->mnemo != i_BTST && using_ce) { printf ("\tif (src > 15) %s (2);\n", do_cycles); count_ncycles++; } } } } static int islongimm (struct instr *curi) { return (curi->size == sz_long && (curi->smode == Dreg || curi->smode == imm)); } static void gen_opcode (unsigned long int opcode) { struct instr *curi = table68k + opcode; insn_n_cycles = using_prefetch ? 0 : 4; ir2irc = 0; prefetch_long = NULL; srcli = NULL; srcbi = NULL; disp000 = "get_disp_ea_000"; disp020 = "get_disp_ea_020"; nextw = NULL; nextl = NULL; do_cycles = "do_cycles"; if (using_indirect) { // tracer if (!using_ce020 && !using_prefetch_020) { prefetch_word = "get_word_ce000_prefetch"; srcli = "x_get_ilong"; srcwi = "x_get_iword"; srcbi = "x_get_ibyte"; srcl = "x_get_long"; dstl = "x_put_long"; srcw = "x_get_word"; dstw = "x_put_word"; srcb = "x_get_byte"; dstb = "x_put_byte"; do_cycles = "do_cycles_ce000"; } else if (using_ce020) { /* x_ not used if it redirects to * get_word_ce020_prefetch() */ disp020 = "x_get_disp_ea_ce020"; prefetch_word = "get_word_ce020_prefetch"; prefetch_long = "get_long_ce020_prefetch"; srcli = "x_get_ilong"; srcwi = "x_get_iword"; srcbi = "x_get_ibyte"; srcl = "x_get_long"; dstl = "x_put_long"; srcw = "x_get_word"; dstw = "x_put_word"; srcb = "x_get_byte"; dstb = "x_put_byte"; do_cycles = "do_cycles_ce020"; nextw = "next_iword_020ce"; nextl = "next_ilong_020ce"; } else if (using_prefetch_020) { prefetch_word = "get_word_020_prefetch"; prefetch_long = "get_long_020_prefetch"; srcli = "x_get_ilong"; srcwi = "x_get_iword"; srcbi = "x_get_ibyte"; srcl = "x_get_long"; dstl = "x_put_long"; srcw = "x_get_word"; dstw = "x_put_word"; srcb = "x_get_byte"; dstb = "x_put_byte"; nextw = "next_iword_020"; nextl = "next_ilong_020"; } } else if (using_ce020) { disp020 = "x_get_disp_ea_020"; do_cycles = "do_cycles_ce020"; if (using_ce020 == 2) { // 68030 CE prefetch_long = "get_long_ce030_prefetch"; prefetch_word = "get_word_ce030_prefetch"; nextw = "next_iword_030ce"; nextl = "next_ilong_030ce"; srcli = "get_word_ce030_prefetch"; srcwi = "get_long_ce030_prefetch"; srcl = "get_long_ce030"; dstl = "put_long_ce030"; srcw = "get_word_ce030"; dstw = "put_word_ce030"; srcb = "get_byte_ce030"; dstb = "put_byte_ce030"; } else { // 68020 CE prefetch_long = "get_long_ce020_prefetch"; prefetch_word = "get_word_ce020_prefetch"; nextw = "next_iword_020ce"; nextl = "next_ilong_020ce"; srcli = "get_word_ce020_prefetch"; srcwi = "get_long_ce020_prefetch"; srcl = "get_long_ce020"; dstl = "put_long_ce020"; srcw = "get_word_ce020"; dstw = "put_word_ce020"; srcb = "get_byte_ce020"; dstb = "put_byte_ce020"; } } else if (using_mmu) { // 68040 MMU disp020 = "x_get_disp_ea_020"; prefetch_long = "get_ilong_mmu"; prefetch_word = "get_iword_mmu"; nextw = "next_iword_mmu"; nextl = "next_ilong_mmu"; srcli = "get_ilong_mmu"; srcwi = "get_iword_muu"; srcbi = "get_ibyte_mmu"; srcl = "get_long_mmu"; dstl = "put_long_mmu"; srcw = "get_word_mmu"; dstw = "put_word_mmu"; srcb = "get_byte_mmu"; dstb = "put_byte_mmu"; } else if (using_ce) { // 68000 ce prefetch_word = "get_word_ce000_prefetch"; srcwi = "get_wordi_ce000"; srcl = "get_long_ce000"; dstl = "put_long_ce000"; srcw = "get_word_ce000"; dstw = "put_word_ce000"; srcb = "get_byte_ce000"; dstb = "put_byte_ce000"; do_cycles = "do_cycles_ce000"; } else if (using_prefetch) { prefetch_word = "get_word_prefetch"; prefetch_long = "get_long_prefetch"; srcwi = "get_wordi"; srcl = "get_long"; dstl = "put_long"; srcw = "get_word"; dstw = "put_word"; srcb = "get_byte"; dstb = "put_byte"; } else { // generic prefetch_long = "get_ilong"; prefetch_word = "get_iword"; nextw = "next_iword"; nextl = "next_ilong"; srcli = "get_ilong"; srcwi = "get_iword"; srcbi = "get_ibyte"; srcl = "get_long"; dstl = "put_long"; srcw = "get_word"; dstw = "put_word"; srcb = "get_byte"; dstb = "put_byte"; } insn_n_cycles020 = 0; start_brace (); m68k_pc_offset = 2; switch (curi->plev) { case 0: /* not privileged */ break; case 1: /* unprivileged only on 68000 */ if (cpu_level == 0) break; if (next_cpu_level < 0) next_cpu_level = 0; /* fall through */ case 2: /* priviledged */ printf ("if (!regs.s) { Exception (8); goto %s; }\n", endlabelstr); need_endlabel = 1; start_brace (); break; case 3: /* privileged if size == word */ if (curi->size == sz_byte) break; printf ("if (!regs.s) { Exception (8); goto %s; }\n", endlabelstr); need_endlabel = 1; start_brace (); break; } switch (curi->mnemo) { case i_OR: case i_AND: case i_EOR: { int c = 0; genamode (curi->smode, "srcreg", curi->size, "src", 1, 0, 0); genamode (curi->dmode, "dstreg", curi->size, "dst", 1, 0, 0); printf ("\tsrc %c= dst;\n", curi->mnemo == i_OR ? '|' : curi->mnemo == i_AND ? '&' : '^'); genflags (flag_logical, curi->size, "src", "", ""); if (curi->dmode == Dreg && curi->size == sz_long) { c += 2; if (curi->smode == imm || curi->smode == Dreg) c += 2; } fill_prefetch_next (); if (c > 0) addcycles000 (c); genastore_rev ("src", curi->dmode, "dstreg", curi->size, "dst"); break; } // all SR/CCR modifications have dummy read access case i_ORSR: case i_EORSR: printf ("\tMakeSR ();\n"); genamode (curi->smode, "srcreg", curi->size, "src", 1, 0, 0); dummy_prefetch (); if (curi->size == sz_byte) { printf ("\tsrc &= 0xFF;\n"); } addcycles000 (8); fill_prefetch_next (); printf ("\tregs.sr %c= src;\n", curi->mnemo == i_EORSR ? '^' : '|'); printf ("\tMakeFromSR ();\n"); break; case i_ANDSR: printf ("\tMakeSR ();\n"); genamode (curi->smode, "srcreg", curi->size, "src", 1, 0, 0); dummy_prefetch (); if (curi->size == sz_byte) { printf ("\tsrc |= 0xFF00;\n"); } addcycles000 (8); fill_prefetch_next (); printf ("\tregs.sr &= src;\n"); printf ("\tMakeFromSR ();\n"); break; case i_SUB: { int c = 0; genamode (curi->smode, "srcreg", curi->size, "src", 1, 0, 0); genamode (curi->dmode, "dstreg", curi->size, "dst", 1, 0, 0); if (curi->dmode == Dreg) { if (curi->size == sz_long) { c += 2; if (curi->smode == imm || curi->smode == immi || curi->smode == Dreg) c += 2; } } fill_prefetch_next (); if (c > 0) addcycles000 (c); start_brace (); genflags (flag_sub, curi->size, "newv", "src", "dst"); genastore_rev ("newv", curi->dmode, "dstreg", curi->size, "dst"); break; } case i_SUBA: { int c = 0; genamode (curi->smode, "srcreg", curi->size, "src", 1, 0, 0); genamode (curi->dmode, "dstreg", sz_long, "dst", 1, 0, 0); if (curi->smode == immi) { // SUBAQ.x is always 8 cycles c += 4; } else { c = curi->size == sz_long ? 2 : 4; if (islongimm (curi)) c += 2; } fill_prefetch_next (); if (c > 0) addcycles000 (c); start_brace (); printf ("\tuae_u32 newv = dst - src;\n"); genastore ("newv", curi->dmode, "dstreg", sz_long, "dst"); break; } case i_SUBX: if (!isreg (curi->smode)) addcycles000 (2); genamode_pre (curi->smode, "srcreg", curi->size, "src", 1, 0, GF_AA); genamode (curi->dmode, "dstreg", curi->size, "dst", 1, 0, GF_AA); genamode_post (curi->smode, "srcreg", curi->size, "src", 1, 0, GF_AA); fill_prefetch_next (); if (curi->size == sz_long && isreg (curi->smode)) addcycles000 (4); start_brace (); printf ("\tuae_u32 newv = dst - src - (GET_XFLG () ? 1 : 0);\n"); genflags (flag_subx, curi->size, "newv", "src", "dst"); genflags (flag_zn, curi->size, "newv", "", ""); genastore ("newv", curi->dmode, "dstreg", curi->size, "dst"); break; case i_SBCD: if (!isreg (curi->smode)) addcycles000 (2); genamode_pre (curi->smode, "srcreg", curi->size, "src", 1, 0, GF_AA); genamode (curi->dmode, "dstreg", curi->size, "dst", 1, 0, GF_AA); genamode_post (curi->smode, "srcreg", curi->size, "src", 1, 0, GF_AA); fill_prefetch_next (); start_brace (); printf ("\tuae_u16 newv_lo = (dst & 0xF) - (src & 0xF) - (GET_XFLG () ? 1 : 0);\n"); printf ("\tuae_u16 newv_hi = (dst & 0xF0) - (src & 0xF0);\n"); printf ("\tuae_u16 newv, tmp_newv;\n"); printf ("\tint bcd = 0;\n"); printf ("\tnewv = tmp_newv = newv_hi + newv_lo;\n"); printf ("\tif (newv_lo & 0xF0) { newv -= 6; bcd = 6; };\n"); printf ("\tif ((((dst & 0xFF) - (src & 0xFF) - (GET_XFLG () ? 1 : 0)) & 0x100) > 0xFF) { newv -= 0x60; }\n"); printf ("\tSET_CFLG ((((dst & 0xFF) - (src & 0xFF) - bcd - (GET_XFLG () ? 1 : 0)) & 0x300) > 0xFF);\n"); duplicate_carry (0); /* Manual says bits NV are undefined though a real 68040/060 don't change them */ if (cpu_level >= xBCD_KEEPS_NV_FLAGS) { if (next_cpu_level < xBCD_KEEPS_NV_FLAGS) next_cpu_level = xBCD_KEEPS_NV_FLAGS - 1; genflags (flag_z, curi->size, "newv", "", ""); } else { genflags (flag_zn, curi->size, "newv", "", ""); printf ("\tSET_VFLG ((tmp_newv & 0x80) != 0 && (newv & 0x80) == 0);\n"); } if (isreg (curi->smode)) addcycles000 (2); genastore ("newv", curi->dmode, "dstreg", curi->size, "dst"); break; case i_ADD: { int c = 0; genamode (curi->smode, "srcreg", curi->size, "src", 1, 0, 0); genamode (curi->dmode, "dstreg", curi->size, "dst", 1, 0, 0); if (curi->dmode == Dreg) { if (curi->size == sz_long) { c += 2; if (curi->smode == imm || curi->smode == immi || curi->smode == Dreg) c += 2; } } fill_prefetch_next (); if (c > 0) addcycles000 (c); start_brace (); genflags (flag_add, curi->size, "newv", "src", "dst"); genastore_rev ("newv", curi->dmode, "dstreg", curi->size, "dst"); break; } case i_ADDA: { int c = 0; genamode (curi->smode, "srcreg", curi->size, "src", 1, 0, 0); genamode (curi->dmode, "dstreg", sz_long, "dst", 1, 0, 0); if (curi->smode == immi) { // ADDAQ.x is always 8 cycles c += 4; } else { c = curi->size == sz_long ? 2 : 4; if (islongimm (curi)) c += 2; } fill_prefetch_next (); if (c > 0) addcycles000 (c); start_brace (); printf ("\tuae_u32 newv = dst + src;\n"); genastore ("newv", curi->dmode, "dstreg", sz_long, "dst"); break; } case i_ADDX: if (!isreg (curi->smode)) addcycles000 (2); genamode_pre (curi->smode, "srcreg", curi->size, "src", 1, 0, GF_AA); genamode (curi->dmode, "dstreg", curi->size, "dst", 1, 0, GF_AA); genamode_post (curi->smode, "srcreg", curi->size, "src", 1, 0, GF_AA); fill_prefetch_next (); if (curi->size == sz_long && isreg (curi->smode)) addcycles000 (4); start_brace (); printf ("\tuae_u32 newv = dst + src + (GET_XFLG () ? 1 : 0);\n"); genflags (flag_addx, curi->size, "newv", "src", "dst"); genflags (flag_zn, curi->size, "newv", "", ""); genastore ("newv", curi->dmode, "dstreg", curi->size, "dst"); break; case i_ABCD: if (!isreg (curi->smode)) addcycles000 (2); genamode_pre (curi->smode, "srcreg", curi->size, "src", 1, 0, GF_AA); genamode (curi->dmode, "dstreg", curi->size, "dst", 1, 0, GF_AA); genamode_post (curi->smode, "srcreg", curi->size, "src", 1, 0, GF_AA); fill_prefetch_next (); start_brace (); printf ("\tuae_u16 newv_lo = (src & 0xF) + (dst & 0xF) + (GET_XFLG () ? 1 : 0);\n"); printf ("\tuae_u16 newv_hi = (src & 0xF0) + (dst & 0xF0);\n"); printf ("\tuae_u16 newv, tmp_newv;\n"); printf ("\tint cflg;\n"); printf ("\tnewv = tmp_newv = newv_hi + newv_lo;"); printf ("\tif (newv_lo > 9) { newv += 6; }\n"); printf ("\tcflg = (newv & 0x3F0) > 0x90;\n"); printf ("\tif (cflg) newv += 0x60;\n"); printf ("\tSET_CFLG (cflg);\n"); duplicate_carry (0); /* Manual says bits NV are undefined though a real 68040 don't change them */ if (cpu_level >= xBCD_KEEPS_NV_FLAGS) { if (next_cpu_level < xBCD_KEEPS_NV_FLAGS) next_cpu_level = xBCD_KEEPS_NV_FLAGS - 1; genflags (flag_z, curi->size, "newv", "", ""); } else { genflags (flag_zn, curi->size, "newv", "", ""); printf ("\tSET_VFLG ((tmp_newv & 0x80) == 0 && (newv & 0x80) != 0);\n"); } if (isreg (curi->smode)) addcycles000 (2); genastore ("newv", curi->dmode, "dstreg", curi->size, "dst"); break; case i_NEG: genamode (curi->smode, "srcreg", curi->size, "src", 1, 0, 0); fill_prefetch_next (); if (isreg (curi->smode) && curi->size == sz_long) addcycles000 (2); start_brace (); genflags (flag_sub, curi->size, "dst", "src", "0"); genastore_rev ("dst", curi->smode, "srcreg", curi->size, "src"); break; case i_NEGX: genamode (curi->smode, "srcreg", curi->size, "src", 1, 0, 0); fill_prefetch_next (); if (isreg (curi->smode) && curi->size == sz_long) addcycles000 (2); start_brace (); printf ("\tuae_u32 newv = 0 - src - (GET_XFLG () ? 1 : 0);\n"); genflags (flag_subx, curi->size, "newv", "src", "0"); genflags (flag_zn, curi->size, "newv", "", ""); genastore_rev ("newv", curi->smode, "srcreg", curi->size, "src"); break; case i_NBCD: genamode (curi->smode, "srcreg", curi->size, "src", 1, 0, 0); if (isreg (curi->smode)) addcycles000 (2); fill_prefetch_next (); start_brace (); printf ("\tuae_u16 newv_lo = - (src & 0xF) - (GET_XFLG () ? 1 : 0);\n"); printf ("\tuae_u16 newv_hi = - (src & 0xF0);\n"); printf ("\tuae_u16 newv;\n"); printf ("\tint cflg;\n"); printf ("\tif (newv_lo > 9) { newv_lo -= 6; }\n"); printf ("\tnewv = newv_hi + newv_lo;"); printf ("\tcflg = (newv & 0x1F0) > 0x90;\n"); printf ("\tif (cflg) newv -= 0x60;\n"); printf ("\tSET_CFLG (cflg);\n"); duplicate_carry(0); /* Manual says bits NV are undefined though a real 68040 don't change them */ if (cpu_level >= xBCD_KEEPS_NV_FLAGS) { if (next_cpu_level < xBCD_KEEPS_NV_FLAGS) next_cpu_level = xBCD_KEEPS_NV_FLAGS - 1; genflags (flag_z, curi->size, "newv", "", ""); } else { genflags (flag_zn, curi->size, "newv", "", ""); } genastore ("newv", curi->smode, "srcreg", curi->size, "src"); break; case i_CLR: genamode (curi->smode, "srcreg", curi->size, "src", cpu_level == 0 ? 1 : 2, 0, 0); fill_prefetch_next (); if (isreg (curi->smode) && curi->size == sz_long) addcycles000 (2); genflags (flag_logical, curi->size, "0", "", ""); genastore_rev ("0", curi->smode, "srcreg", curi->size, "src"); break; case i_NOT: genamode (curi->smode, "srcreg", curi->size, "src", 1, 0, 0); fill_prefetch_next (); if (isreg (curi->smode) && curi->size == sz_long) addcycles000 (2); start_brace (); printf ("\tuae_u32 dst = ~src;\n"); genflags (flag_logical, curi->size, "dst", "", ""); genastore_rev ("dst", curi->smode, "srcreg", curi->size, "src"); break; case i_TST: genamode (curi->smode, "srcreg", curi->size, "src", 1, 0, 0); fill_prefetch_next (); genflags (flag_logical, curi->size, "src", "", ""); break; case i_BTST: genamode (curi->smode, "srcreg", curi->size, "src", 1, 0, 0); genamode (curi->dmode, "dstreg", curi->size, "dst", 1, 0, GF_IR2IRC); fill_prefetch_next (); bsetcycles (curi); printf ("\tSET_ZFLG (1 ^ ((dst >> src) & 1));\n"); break; case i_BCHG: case i_BCLR: case i_BSET: genamode (curi->smode, "srcreg", curi->size, "src", 1, 0, 0); genamode (curi->dmode, "dstreg", curi->size, "dst", 1, 0, GF_IR2IRC); fill_prefetch_next (); bsetcycles (curi); // bclr needs 1 extra cycle if (curi->mnemo == i_BCLR && curi->dmode == Dreg) addcycles000 (2); if (curi->mnemo == i_BCHG) { printf ("\tdst ^= (1 << src);\n"); printf ("\tSET_ZFLG (((uae_u32)dst & (1 << src)) >> src);\n"); } else if (curi->mnemo == i_BCLR) { printf ("\tSET_ZFLG (1 ^ ((dst >> src) & 1));\n"); printf ("\tdst &= ~(1 << src);\n"); } else if (curi->mnemo == i_BSET) { printf ("\tSET_ZFLG (1 ^ ((dst >> src) & 1));\n"); printf ("\tdst |= (1 << src);\n"); } genastore ("dst", curi->dmode, "dstreg", curi->size, "dst"); break; case i_CMPM: // confirmed genamode_pre (curi->smode, "srcreg", curi->size, "src", 1, 0, GF_AA); genamode (curi->dmode, "dstreg", curi->size, "dst", 1, 0, GF_AA); genamode_post (curi->smode, "srcreg", curi->size, "src", 1, 0, GF_AA); fill_prefetch_next (); start_brace (); genflags (flag_cmp, curi->size, "newv", "src", "dst"); break; case i_CMP: genamode (curi->smode, "srcreg", curi->size, "src", 1, 0, 0); genamode (curi->dmode, "dstreg", curi->size, "dst", 1, 0, 0); fill_prefetch_next (); if (curi->dmode == Dreg && curi->size == sz_long) addcycles000 (2); start_brace (); genflags (flag_cmp, curi->size, "newv", "src", "dst"); break; case i_CMPA: genamode (curi->smode, "srcreg", curi->size, "src", 1, 0, 0); genamode (curi->dmode, "dstreg", sz_long, "dst", 1, 0, 0); fill_prefetch_next (); addcycles000 (2); start_brace (); genflags (flag_cmp, sz_long, "newv", "src", "dst"); break; /* The next two are coded a little unconventional, but they are doing * weird things... */ case i_MVPRM: // MOVEP R->M genamode (curi->smode, "srcreg", curi->size, "src", 1, 0, 0); printf ("\tuaecptr memp = m68k_areg (regs, dstreg) + (uae_s32)(uae_s16)%s;\n", gen_nextiword (0)); if (curi->size == sz_word) { printf ("\t%s (memp, src >> 8); %s (memp + 2, src);\n", dstb, dstb); count_write += 2; } else { printf ("\t%s (memp, src >> 24); %s (memp + 2, src >> 16);\n", dstb, dstb); printf ("\t%s (memp + 4, src >> 8); %s (memp + 6, src);\n", dstb, dstb); count_write += 4; } fill_prefetch_next (); break; case i_MVPMR: // MOVEP M->R printf ("\tuaecptr memp = m68k_areg (regs, srcreg) + (uae_s32)(uae_s16)%s;\n", gen_nextiword (0)); genamode (curi->dmode, "dstreg", curi->size, "dst", 2, 0, 0); if (curi->size == sz_word) { printf ("\tuae_u16 val = (%s (memp) << 8) + %s (memp + 2);\n", srcb, srcb); count_read += 2; } else { printf ("\tuae_u32 val = (%s (memp) << 24) + (%s (memp + 2) << 16)\n", srcb, srcb); printf (" + (%s (memp + 4) << 8) + %s (memp + 6);\n", srcb, srcb); count_read += 4; } fill_prefetch_next (); genastore ("val", curi->dmode, "dstreg", curi->size, "dst"); break; case i_MOVE: case i_MOVEA: { /* 2 MOVE instruction variants have special prefetch sequence: * - MOVE ,-(An) = prefetch is before writes (Apdi) * - MOVE memory,(xxx).L = 2 prefetches after write * - all others = prefetch is done after writes * * - move.x xxx,[at least 1 extension word here] = fetch 1 extension word before (xxx) * */ int prefetch_done = 0, flags; int dualprefetch = curi->dmode == absl && (curi->smode != Dreg && curi->smode != Areg && curi->smode != imm); genamode_pre (curi->smode, "srcreg", curi->size, "src", 1, 0, GF_MOVE); flags = 1 | (dualprefetch ? GF_NOREFILL : 0); genamode2 (curi->dmode, "dstreg", curi->size, "dst", 2, 0, flags | GF_MOVE, 0); genamode_post (curi->smode, "srcreg", curi->size, "src", 1, 0, 0); if (curi->mnemo == i_MOVEA && curi->size == sz_word) printf ("\tsrc = (uae_s32)(uae_s16)src;\n"); if (curi->dmode == Apdi) { fill_prefetch_next (); prefetch_done = 1; } if (curi->mnemo == i_MOVE) genflags (flag_logical, curi->size, "src", "", ""); genastore ("src", curi->dmode, "dstreg", curi->size, "dst"); sync_m68k_pc (); if (dualprefetch) { fill_prefetch_full (); prefetch_done = 1; } if (!prefetch_done) fill_prefetch_next (); } break; case i_MVSR2: // MOVE FROM SR genamode (curi->smode, "srcreg", sz_word, "src", 2, 0, 0); fill_prefetch_next (); if (isreg (curi->smode)) addcycles000 (2); printf ("\tMakeSR ();\n"); if (curi->size == sz_byte) genastore ("regs.sr & 0xff", curi->smode, "srcreg", sz_word, "src"); else genastore ("regs.sr", curi->smode, "srcreg", sz_word, "src"); break; case i_MV2SR: // MOVE TO SR genamode (curi->smode, "srcreg", sz_word, "src", 1, 0, 0); if (curi->size == sz_byte) { // MOVE TO CCR dummy_prefetch (); addcycles000 (4); printf ("\tMakeSR ();\n\tregs.sr &= 0xFF00;\n\tregs.sr |= src & 0xFF;\n"); } else { // MOVE TO SR dummy_prefetch (); addcycles000 (4); printf ("\tregs.sr = src;\n"); } printf ("\tMakeFromSR ();\n"); fill_prefetch_next (); break; case i_SWAP: genamode (curi->smode, "srcreg", sz_long, "src", 1, 0, 0); fill_prefetch_next (); start_brace (); printf ("\tuae_u32 dst = ((src >> 16)&0xFFFF) | ((src&0xFFFF)<<16);\n"); genflags (flag_logical, sz_long, "dst", "", ""); genastore ("dst", curi->smode, "srcreg", sz_long, "src"); break; case i_EXG: // confirmed genamode (curi->smode, "srcreg", curi->size, "src", 1, 0, 0); genamode (curi->dmode, "dstreg", curi->size, "dst", 1, 0, 0); fill_prefetch_next (); addcycles000 (2); genastore ("dst", curi->smode, "srcreg", curi->size, "src"); genastore ("src", curi->dmode, "dstreg", curi->size, "dst"); break; case i_EXT: // confirmed genamode (curi->smode, "srcreg", sz_long, "src", 1, 0, 0); fill_prefetch_next (); start_brace (); switch (curi->size) { case sz_byte: printf ("\tuae_u32 dst = (uae_s32)(uae_s8)src;\n"); break; case sz_word: printf ("\tuae_u16 dst = (uae_s16)(uae_s8)src;\n"); break; case sz_long: printf ("\tuae_u32 dst = (uae_s32)(uae_s16)src;\n"); break; default: abort (); } genflags (flag_logical, curi->size == sz_word ? sz_word : sz_long, "dst", "", ""); genastore ("dst", curi->smode, "srcreg", curi->size == sz_word ? sz_word : sz_long, "src"); break; case i_MVMEL: // confirmed if (using_ce) genmovemel_ce (opcode); else genmovemel (opcode); break; case i_MVMLE: // confirmed if (using_ce) genmovemle_ce (opcode); else genmovemle (opcode); break; case i_TRAP: genamode (curi->smode, "srcreg", curi->size, "src", 1, 0, 0); gen_set_fault_pc (); sync_m68k_pc (); printf ("\tException (src + 32);\n"); did_prefetch = 1; m68k_pc_offset = 0; break; case i_MVR2USP: genamode (curi->smode, "srcreg", curi->size, "src", 1, 0, 0); fill_prefetch_next (); printf ("\tregs.usp = src;\n"); break; case i_MVUSP2R: genamode (curi->smode, "srcreg", curi->size, "src", 2, 0, 0); fill_prefetch_next (); genastore ("regs.usp", curi->smode, "srcreg", curi->size, "src"); break; case i_RESET: fill_prefetch_next (); printf ("\tcpureset ();\n"); sync_m68k_pc (); addcycles000 (128); if (using_prefetch) { printf ("\t%s (2);\n", prefetch_word); m68k_pc_offset = 0; } break; case i_NOP: fill_prefetch_next (); if (using_ce020) printf ("\t%s (6);\n", do_cycles); break; case i_STOP: if (using_prefetch) { printf ("\tregs.sr = regs.irc;\n"); m68k_pc_offset += 2; } else { genamode (curi->smode, "srcreg", curi->size, "src", 1, 0, 0); printf ("\tregs.sr = src;\n"); } printf ("\tMakeFromSR ();\n"); printf ("\tm68k_setstopped ();\n"); sync_m68k_pc (); // STOP does not prefetch anything did_prefetch = -1; break; case i_LPSTOP: /* 68060 */ printf ("\tuae_u16 sw = x_get_iword (2);\n"); printf ("\tuae_u16 sr;\n"); printf ("\tif (sw != (0x100|0x80|0x40)) { Exception (4); goto %s; }\n", endlabelstr); printf ("\tsr = x_get_iword (4);\n"); printf ("\tif (!(sr & 0x8000)) { Exception (8); goto %s; }\n", endlabelstr); printf ("\tregs.sr = sr;\n"); printf ("\tMakeFromSR ();\n"); printf ("\tm68k_setstopped();\n"); m68k_pc_offset += 4; sync_m68k_pc (); fill_prefetch_full (); break; case i_RTE: if (cpu_level == 0) { genamode (Aipi, "7", sz_word, "sr", 1, 0, GF_NOREFILL); genamode (Aipi, "7", sz_long, "pc", 1, 0, GF_NOREFILL); printf ("\tregs.sr = sr;\n"); setpc ("pc"); printf ("\tMakeFromSR ();\n"); } else { int old_brace_level = n_braces; if (next_cpu_level < 0) next_cpu_level = 0; printf ("\tuae_u16 newsr; uae_u32 newpc;\n"); printf ("\tfor (;;) {\n"); printf ("\t\tuaecptr a = m68k_areg (regs, 7);\n"); printf ("\t\tuae_s16 sr = %s (a);\n", srcw); printf ("\t\tuae_s32 pc = %s (a + 2);\n", srcl); printf ("\t\tuae_s16 format = %s (a + 2 + 4);\n", srcw); printf ("\t\tint frame = format >> 12;\n"); printf ("\t\tint offset = 8;\n"); printf ("\t\tnewsr = sr; newpc = pc;\n"); printf ("\t\tif (frame == 0x0) { m68k_areg (regs, 7) += offset; break; }\n"); printf ("\t\telse if (frame == 0x1) { m68k_areg (regs, 7) += offset; }\n"); printf ("\t\telse if (frame == 0x2) { m68k_areg (regs, 7) += offset + 4; break; }\n"); printf ("\t\telse if (frame == 0x4) { m68k_areg (regs, 7) += offset + 8; break; }\n"); if (using_mmu) printf ("\t\telse if (frame == 0x7) { m68k_do_rte_mmu (a); m68k_areg (regs, 7) += offset + 52; break; }\n"); printf ("\t\telse if (frame == 0x8) { m68k_areg (regs, 7) += offset + 50; break; }\n"); printf ("\t\telse if (frame == 0x9) { m68k_areg (regs, 7) += offset + 12; break; }\n"); printf ("\t\telse if (frame == 0xa) { m68k_areg (regs, 7) += offset + 24; break; }\n"); printf ("\t\telse if (frame == 0xb) { m68k_areg (regs, 7) += offset + 84; break; }\n"); printf ("\t\telse { m68k_areg (regs, 7) += offset; Exception (14); goto %s; }\n", endlabelstr); printf ("\t\tregs.sr = newsr; MakeFromSR ();\n}\n"); pop_braces (old_brace_level); printf ("\tregs.sr = newsr; MakeFromSR ();\n"); printf ("\tif (newpc & 1) {\n"); printf ("\t\texception3i (0x%04X, newpc);\n", opcode); printf ("\t\tgoto %s;\n", endlabelstr); printf ("\t}\n"); printf ("\t\tm68k_setpc (newpc);\n"); printf ("\tipl_fetch ();\n"); need_endlabel = 1; } /* PC is set and prefetch filled. */ m68k_pc_offset = 0; fill_prefetch_full (); break; case i_RTD: if (using_mmu) { genamode (curi->smode, "srcreg", curi->size, "offs", GENA_GETV_FETCH, GENA_MOVEM_DO_INC, 0); genamode (Aipi, "7", sz_long, "pc", GENA_GETV_FETCH, GENA_MOVEM_DO_INC, 0); printf ("\tm68k_areg(regs, 7) += offs;\n"); } else { genamode (Aipi, "7", sz_long, "pc", 1, 0, 0); genamode (curi->smode, "srcreg", curi->size, "offs", 1, 0, 0); printf ("\tm68k_areg (regs, 7) += offs;\n"); printf ("\tif (pc & 1) {\n"); printf ("\t\texception3i (0x%04X, pc);\n", opcode); printf ("\t\tgoto %s;\n", endlabelstr); printf ("\t}\n"); } printf ("\tif (pc & 1) {\n"); printf ("\t\texception3i (0x%04X, pc);\n", opcode); printf ("\t\tgoto %s;\n", endlabelstr); printf ("\t}\n"); setpc ("pc"); /* PC is set and prefetch filled. */ m68k_pc_offset = 0; fill_prefetch_full (); need_endlabel = 1; break; case i_LINK: // ce confirmed if (using_mmu) { genamode (curi->dmode, "dstreg", curi->size, "offs", GENA_GETV_FETCH, GENA_MOVEM_DO_INC, 0); genamode (Apdi, "7", sz_long, "old", GENA_GETV_FETCH_ALIGN, GENA_MOVEM_DO_INC, 0); genamode (curi->smode, "srcreg", sz_long, "src", GENA_GETV_FETCH, GENA_MOVEM_DO_INC, 0); genastore ("m68k_areg(regs, 7)", curi->smode, "srcreg", sz_long, "src"); printf ("\tm68k_areg(regs, 7) += offs;\n"); genastore ("src", Apdi, "7", sz_long, "old"); } else { genamode (Apdi, "7", sz_long, "old", 2, 0, GF_AA); genamode (curi->smode, "srcreg", sz_long, "src", 1, 0, GF_AA); genamode (curi->dmode, "dstreg", curi->size, "offs", 1, 0, 0); genastore ("src", Apdi, "7", sz_long, "old"); genastore ("m68k_areg (regs, 7)", curi->smode, "srcreg", sz_long, "src"); printf ("\tm68k_areg (regs, 7) += offs;\n"); fill_prefetch_next (); } break; case i_UNLK: // ce confirmed if (using_mmu) { genamode (curi->smode, "srcreg", curi->size, "src", 1, 0, 0); printf ("\tuae_s32 old = get_long_mmu (src);\n"); printf ("\tm68k_areg (regs, 7) = src + 4;\n"); printf ("\tm68k_areg (regs, srcreg) = old;\n"); } else { genamode (curi->smode, "srcreg", curi->size, "src", 1, 0, 0); printf ("\tm68k_areg (regs, 7) = src;\n"); genamode (Aipi, "7", sz_long, "old", 1, 0, 0); fill_prefetch_next (); genastore ("old", curi->smode, "srcreg", curi->size, "src"); } break; case i_RTS: printf ("\tuaecptr pc = m68k_getpc ();\n"); if (using_ce020 == 1) printf ("\tm68k_do_rts_ce020 ();\n"); else if (using_ce020 == 2) printf ("\tm68k_do_rts_ce030 ();\n"); else if (using_ce) printf ("\tm68k_do_rts_ce ();\n"); else if (using_mmu) printf ("\tm68k_do_rts_mmu ();\n"); else printf ("\tm68k_do_rts ();\n"); printf ("\tif (m68k_getpc () & 1) {\n"); printf ("\t\tuaecptr faultpc = m68k_getpc ();\n"); printf ("\t\tm68k_setpc (pc);\n"); printf ("\t\texception3i (0x%04X, faultpc);\n", opcode); printf ("\t}\n"); count_read += 2; m68k_pc_offset = 0; fill_prefetch_full (); break; case i_TRAPV: sync_m68k_pc (); fill_prefetch_next (); printf ("\tif (GET_VFLG ()) {\n"); printf ("\t\tException (7);\n"); printf ("\t\tgoto %s;\n", endlabelstr); printf ("\t}\n"); need_endlabel = 1; break; case i_RTR: printf ("\tuaecptr oldpc = m68k_getpc ();\n"); printf ("\tMakeSR ();\n"); genamode_pre (Aipi, "7", sz_word, "sr", 1, 0, 0); genamode (Aipi, "7", sz_long, "pc", 1, 0, 0); genamode_post (Aipi, "7", sz_word, "sr", 1, 0, 0); printf ("\tregs.sr &= 0xFF00; sr &= 0xFF;\n"); printf ("\tregs.sr |= sr;\n"); setpc ("pc"); printf ("\tMakeFromSR ();\n"); printf ("\tif (m68k_getpc () & 1) {\n"); printf ("\t\tuaecptr faultpc = m68k_getpc ();\n"); printf ("\t\tm68k_setpc (oldpc);\n"); printf ("\t\texception3i (0x%04X, faultpc);\n", opcode); printf ("\t}\n"); m68k_pc_offset = 0; fill_prefetch_full (); break; case i_JSR: // TODO: check stack write order genamode (curi->smode, "srcreg", curi->size, "src", 0, 0, GF_AA|GF_NOREFILL); start_brace (); printf ("\tuaecptr oldpc = m68k_getpc () + %d;\n", m68k_pc_offset); if (using_exception_3) { printf ("\tif (srca & 1) {\n"); printf ("\t\texception3i (opcode, srca);\n"); printf ("\t\tgoto %s;\n", endlabelstr); printf ("\t}\n"); need_endlabel = 1; } if (using_mmu) { printf ("\t%s (m68k_areg (regs, 7) - 4, oldpc);\n", dstl); printf ("\tm68k_areg (regs, 7) -= 4;\n"); setpc ("srca"); m68k_pc_offset = 0; } else { if (curi->smode == Ad16 || curi->smode == absw || curi->smode == PC16) addcycles000 (2); setpc ("srca"); m68k_pc_offset = 0; fill_prefetch_1 (0); if (curi->smode == Ad8r || curi->smode == PC8r) addcycles000 (6); printf ("\tm68k_areg (regs, 7) -= 4;\n"); if (using_ce) { printf ("\tx_put_word (m68k_areg (regs, 7), oldpc >> 16);\n"); printf ("\tx_put_word (m68k_areg (regs, 7) + 2, oldpc);\n"); } else { printf ("\t%s (m68k_areg (regs, 7), oldpc);\n", dstl); } } count_write += 2; fill_prefetch_next (); break; case i_JMP: genamode (curi->smode, "srcreg", curi->size, "src", 0, 0, GF_AA | ((curi->smode == Ad8r || curi->smode == PC8r) ? 0 : GF_NOREFILL)); if (using_exception_3) { printf ("\tif (srca & 1) {\n"); printf ("\t\texception3i (opcode, srca);\n"); printf ("\t\tgoto %s;\n", endlabelstr); printf ("\t}\n"); need_endlabel = 1; } if (curi->smode == Ad16 || curi->smode == Ad8r || curi->smode == absw || curi->smode == PC16 || curi->smode == PC8r) addcycles000 (2); setpc ("srca"); m68k_pc_offset = 0; fill_prefetch_full (); break; case i_BSR: // .b and .w confirmed printf ("\tuae_s32 s;\n"); if (curi->size == sz_long) { if (next_cpu_level < 1) next_cpu_level = 1; } if (curi->size == sz_long && cpu_level < 2) { printf ("\tuae_u32 src = 0xffffffff;\n"); } else { genamode (curi->smode, "srcreg", curi->size, "src", 1, 0, GF_AA|GF_NOREFILL); } printf ("\ts = (uae_s32)src + 2;\n"); if (using_exception_3) { printf ("\tif (src & 1) {\n"); printf ("\t\texception3 (opcode, m68k_getpc () + s, 0, 1, m68k_getpc () + s);\n"); printf ("\t\tgoto %s;\n", endlabelstr); printf ("\t}\n"); need_endlabel = 1; } addcycles000 (2); if (using_ce020 == 1) { printf ("\tm68k_do_bsr_ce020 (m68k_getpc () + %d, s);\n", m68k_pc_offset); } else if (using_ce020 == 2) { printf ("\tm68k_do_bsr_ce030 (m68k_getpc () + %d, s);\n", m68k_pc_offset); } else if (using_ce) { printf ("\tm68k_do_bsr_ce (m68k_getpc () + %d, s);\n", m68k_pc_offset); } else if (using_mmu) { printf ("\tm68k_do_bsr_mmu (m68k_getpc () + %d, s);\n", m68k_pc_offset); } else { printf ("\tm68k_do_bsr (m68k_getpc () + %d, s);\n", m68k_pc_offset); } count_write += 2; m68k_pc_offset = 0; fill_prefetch_full (); break; case i_Bcc: // bcc.b branch: idle cycle, prefetch, prefetch // bcc.b not branch: 2 idle cycles, prefetch if (curi->size == sz_long) { if (cpu_level < 2) { addcycles000 (2); printf ("\tif (cctrue (%d)) {\n", curi->cc); printf ("\t\texception3i (opcode, m68k_getpc () + 1);\n"); printf ("\t\tgoto %s;\n", endlabelstr); printf ("\t}\n"); sync_m68k_pc (); irc2ir (); fill_prefetch_2 (); printf ("\tgoto %s;\n", endlabelstr); need_endlabel = 1; } else { if (next_cpu_level < 1) next_cpu_level = 1; } } genamode (curi->smode, "srcreg", curi->size, "src", 1, 0, GF_AA | GF_NOREFILL); addcycles000 (2); printf ("\tif (!cctrue (%d)) goto didnt_jump;\n", curi->cc); if (using_exception_3) { printf ("\tif (src & 1) {\n"); printf ("\t\texception3i (opcode, m68k_getpc () + 2 + (uae_s32)src);\n"); printf ("\t\tgoto %s;\n", endlabelstr); printf ("\t}\n"); need_endlabel = 1; } if (using_prefetch) { incpc ("(uae_s32)src + 2"); fill_prefetch_full (); if (using_ce) printf ("\treturn;\n"); else printf ("\treturn 10 * CYCLE_UNIT / 2;\n"); } else { incpc ("(uae_s32)src + 2"); returncycles ("\t", 10); } printf ("didnt_jump:;\n"); need_endlabel = 1; sync_m68k_pc (); if (curi->size == sz_byte) { addcycles000 (2); irc2ir (); fill_prefetch_2 (); } else if (curi->size == sz_word) { addcycles000 (2); fill_prefetch_full (); } else { fill_prefetch_full (); } insn_n_cycles = curi->size == sz_byte ? 8 : 12; break; case i_LEA: genamode (curi->smode, "srcreg", curi->size, "src", 0, 0, GF_AA); genamode (curi->dmode, "dstreg", curi->size, "dst", 2, 0, GF_AA); if (curi->smode == Ad8r || curi->smode == PC8r) addcycles000 (2); fill_prefetch_next (); if (curi->smode == Ad8r || curi->smode == PC8r) addcycles000 (2); genastore ("srca", curi->dmode, "dstreg", curi->size, "dst"); break; case i_PEA: genamode (curi->smode, "srcreg", curi->size, "src", 0, 0, GF_AA); genamode (Apdi, "7", sz_long, "dst", 2, 0, GF_AA); if (curi->smode == Ad8r || curi->smode == PC8r) addcycles000 (2); if (!(curi->smode == absw || curi->smode == absl)) fill_prefetch_next (); if (curi->smode == Ad8r || curi->smode == PC8r) addcycles000 (2); genastore ("srca", Apdi, "7", sz_long, "dst"); if ((curi->smode == absw || curi->smode == absl)) fill_prefetch_next (); break; case i_DBcc: genamode (curi->smode, "srcreg", curi->size, "src", 1, 0, GF_AA | GF_NOREFILL); genamode (curi->dmode, "dstreg", curi->size, "offs", 1, 0, GF_AA | GF_NOREFILL); printf ("\tuaecptr oldpc = m68k_getpc ();\n"); addcycles000 (2); printf ("\tif (!cctrue (%d)) {\n", curi->cc); incpc ("(uae_s32)offs + 2"); printf ("\t"); fill_prefetch_1 (0); printf ("\t"); genastore ("(src - 1)", curi->smode, "srcreg", curi->size, "src"); printf ("\t\tif (src) {\n"); addcycles_ce020 (4); if (using_exception_3) { printf ("\t\t\tif (offs & 1) {\n"); printf ("\t\t\t\texception3i (opcode, m68k_getpc () + 2 + (uae_s32)offs + 2);\n"); printf ("\t\t\t\tgoto %s;\n", endlabelstr); printf ("\t\t\t}\n"); need_endlabel = 1; } irc2ir (); fill_prefetch_1 (2); returncycles ("\t\t\t", 12); if (using_ce) printf ("\t\t\treturn;\n"); printf ("\t\t}\n"); addcycles_ce020 (8); printf ("\t} else {\n"); addcycles000_2 ("\t\t", 2); addcycles_ce020 (4); printf ("\t}\n"); setpc ("oldpc + %d", m68k_pc_offset); m68k_pc_offset = 0; fill_prefetch_full (); insn_n_cycles = 12; need_endlabel = 1; break; case i_Scc: // confirmed genamode (curi->smode, "srcreg", curi->size, "src", cpu_level == 0 ? 1 : 2, 0, 0); start_brace (); fill_prefetch_next(); start_brace (); printf ("\tint val = cctrue (%d) ? 0xff : 0;\n", curi->cc); if (using_ce) { printf ("\tint cycles = 0;\n"); if (isreg (curi->smode)) printf ("\tif (val) cycles += 2;\n"); addcycles000_3 ("\t"); } genastore ("val", curi->smode, "srcreg", curi->size, "src"); break; case i_DIVU: genamode (curi->smode, "srcreg", sz_word, "src", 1, 0, 0); genamode (curi->dmode, "dstreg", sz_long, "dst", 1, 0, 0); printf ("\tCLEAR_CZNV ();\n"); printf ("\tif (src == 0) {\n"); if (cpu_level > 0) { /* 68020 sets V when dividing by zero and N if dst is negative * 68000 clears both */ printf("\t\tSET_VFLG (1);\n"); printf("\t\tif (dst < 0) SET_NFLG (1);\n"); } incpc ("%d", m68k_pc_offset); printf ("\t\tException (5);\n"); printf ("\t\tgoto %s;\n", endlabelstr); printf ("\t} else {\n"); printf ("\t\tuae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src;\n"); printf ("\t\tuae_u32 rem = (uae_u32)dst %% (uae_u32)(uae_u16)src;\n"); fill_prefetch_next (); if (using_ce) { start_brace (); printf ("\t\tint cycles = (getDivu68kCycles((uae_u32)dst, (uae_u16)src));\n"); addcycles000_3 ("\t\t"); } else if (using_ce020) { addcycles_ce020 (36); } /* The N flag appears to be set each time there is an overflow. * Weird. but 68020 only sets N when dst is negative.. */ printf ("\t\tif (newv > 0xffff) {\n"); printf ("\t\t\tSET_VFLG (1);\n"); #ifdef UNDEF68020 if (cpu_level >= 2) printf ("\t\t\tif (currprefs.cpu_level == 0 || dst < 0) SET_NFLG (®s, 1);\n"); else /* ??? some 68000 revisions may not set NFLG when overflow happens.. */ #endif printf ("\t\t\tSET_NFLG (1);\n"); printf ("\t\t} else {\n"); printf ("\t\t"); genflags (flag_logical, sz_word, "newv", "", ""); printf ("\t\t\tnewv = (newv & 0xffff) | ((uae_u32)rem << 16);\n"); printf ("\t\t"); genastore ("newv", curi->dmode, "dstreg", sz_long, "dst"); printf ("\t\t}\n"); sync_m68k_pc (); printf ("\t}\n"); count_ncycles++; insn_n_cycles += 136 - (136 - 76) / 2; /* average */ need_endlabel = 1; break; case i_DIVS: genamode (curi->smode, "srcreg", sz_word, "src", 1, 0, 0); genamode (curi->dmode, "dstreg", sz_long, "dst", 1, 0, 0); printf ("\tCLEAR_CZNV ();\n"); printf ("\tif (src == 0) {\n"); if (cpu_level > 0) { /* 68020 sets V when dividing by zero. Z is also set. * 68000 clears both */ printf("\t\tSET_VFLG (1);\n"); printf("\t\tSET_ZFLG (1);\n"); } incpc ("%d", m68k_pc_offset); printf ("\t\tException (5);\n"); printf ("\t\tgoto %s;\n", endlabelstr); printf ("\t} else {\n"); printf ("\t\tuae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src;\n"); printf ("\t\tuae_u16 rem = (uae_s32)dst %% (uae_s32)(uae_s16)src;\n"); fill_prefetch_next (); if (using_ce) { start_brace (); printf ("\t\tint cycles = (getDivs68kCycles((uae_s32)dst, (uae_s16)src));\n"); addcycles000_3 ("\t\t"); } else if (using_ce020) { addcycles_ce020 (46); } printf ("\t\tif ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) {\n"); printf ("\t\t\tSET_VFLG (1);\n"); #ifdef UNDEF68020 if (cpu_level > 0) printf ("\t\t\tif (currprefs.cpu_level == 0) SET_NFLG (®s, 1);\n"); else #endif printf ("\t\t\tSET_NFLG (1);\n"); printf ("\t\t} else {\n"); printf ("\t\t\tif (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem;\n"); genflags (flag_logical, sz_word, "newv", "", ""); printf ("\t\t\tnewv = (newv & 0xffff) | ((uae_u32)rem << 16);\n"); printf ("\t\t"); genastore ("newv", curi->dmode, "dstreg", sz_long, "dst"); printf ("\t\t}\n"); sync_m68k_pc (); printf ("\t}\n"); count_ncycles++; insn_n_cycles += 156 - (156 - 120) / 2; /* average */ need_endlabel = 1; break; case i_MULU: genamode (curi->smode, "srcreg", sz_word, "src", 1, 0, 0); genamode (curi->dmode, "dstreg", sz_word, "dst", 1, 0, 0); fill_prefetch_next(); start_brace (); printf ("\tuae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src;\n"); if (using_ce) printf ("\tint cycles = 38 - 4, bits;\n"); genflags (flag_logical, sz_long, "newv", "", ""); if (using_ce) { printf ("\tfor(bits = 0; bits < 16 && src; bits++, src >>= 1)\n"); printf ("\t\tif (src & 1) cycles += 2;\n"); addcycles000_3 ("\t"); } else if (using_ce020) { addcycles_ce020 (20); } genastore ("newv", curi->dmode, "dstreg", sz_long, "dst"); sync_m68k_pc (); count_cycles += 38 - 4; count_ncycles++; insn_n_cycles += (70 - 38) / 2 + 38; /* average */ break; case i_MULS: genamode (curi->smode, "srcreg", sz_word, "src", 1, 0, 0); genamode (curi->dmode, "dstreg", sz_word, "dst", 1, 0, 0); fill_prefetch_next(); start_brace (); printf ("\tuae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src;\n"); if (using_ce) { printf ("\tint cycles = 38 - 4, bits;\n"); printf ("\tuae_u32 usrc;\n"); } genflags (flag_logical, sz_long, "newv", "", ""); if (using_ce) { printf ("\tusrc = ((uae_u32)src) << 1;\n"); printf ("\tfor(bits = 0; bits < 16 && usrc; bits++, usrc >>= 1)\n"); printf ("\t\tif ((usrc & 3) == 1 || (usrc & 3) == 2) cycles += 2;\n"); addcycles000_3 ("\t"); } else if (using_ce020) { addcycles_ce020 (20); } genastore ("newv", curi->dmode, "dstreg", sz_long, "dst"); count_cycles += 38 - 4; count_ncycles++; insn_n_cycles += (70 - 38) / 2 + 38; /* average */ break; case i_CHK: genamode (curi->smode, "srcreg", curi->size, "src", 1, 0, 0); genamode (curi->dmode, "dstreg", curi->size, "dst", 1, 0, 0); sync_m68k_pc (); addcycles000 (4); printf ("\tif (dst > src) {\n"); printf ("\t\tSET_NFLG (0);\n"); printf ("\t\tException (6);\n"); printf ("\t\tgoto %s;\n", endlabelstr); printf ("\t}\n"); addcycles000 (2); printf ("\tif ((uae_s32)dst < 0) {\n"); printf ("\t\tSET_NFLG (1);\n"); printf ("\t\tException (6);\n"); printf ("\t\tgoto %s;\n", endlabelstr); printf ("\t}\n"); fill_prefetch_next (); need_endlabel = 1; break; case i_CHK2: genamode (curi->smode, "srcreg", curi->size, "extra", 1, 0, 0); genamode (curi->dmode, "dstreg", curi->size, "dst", 2, 0, 0); fill_prefetch_0 (); printf ("\t{uae_s32 upper,lower,reg = regs.regs[(extra >> 12) & 15];\n"); switch (curi->size) { case sz_byte: printf ("\tlower = (uae_s32)(uae_s8)%s (dsta); upper = (uae_s32)(uae_s8)%s (dsta + 1);\n", srcb, srcb); printf ("\tif ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s8)reg;\n"); break; case sz_word: printf ("\tlower = (uae_s32)(uae_s16)%s (dsta); upper = (uae_s32)(uae_s16)%s (dsta + 2);\n", srcw, srcw); printf ("\tif ((extra & 0x8000) == 0) reg = (uae_s32)(uae_s16)reg;\n"); break; case sz_long: printf ("\tlower = %s (dsta); upper = %s (dsta + 4);\n", srcl, srcl); break; default: abort (); } printf ("\tSET_ZFLG (upper == reg || lower == reg);\n"); printf ("\tSET_CFLG_ALWAYS (lower <= upper ? reg < lower || reg > upper : reg > upper || reg < lower);\n"); printf ("\tif ((extra & 0x800) && GET_CFLG ()) { Exception (6); goto %s; }\n}\n", endlabelstr); need_endlabel = 1; break; case i_ASR: genamode (curi->smode, "srcreg", curi->size, "cnt", 1, 0, 0); genamode (curi->dmode, "dstreg", curi->size, "data", 1, 0, 0); fill_prefetch_next(); start_brace (); switch (curi->size) { case sz_byte: printf ("\tuae_u32 val = (uae_u8)data;\n"); break; case sz_word: printf ("\tuae_u32 val = (uae_u16)data;\n"); break; case sz_long: printf ("\tuae_u32 val = data;\n"); break; default: abort (); } printf ("\tuae_u32 sign = (%s & val) >> %d;\n", cmask (curi->size), bit_size (curi->size) - 1); printf ("\tint ccnt = cnt & 63;\n"); printf ("\tcnt &= 63;\n"); printf ("\tCLEAR_CZNV ();\n"); printf ("\tif (cnt >= %d) {\n", bit_size (curi->size)); printf ("\t\tval = %s & (uae_u32)-sign;\n", bit_mask (curi->size)); printf ("\t\tSET_CFLG (sign);\n"); duplicate_carry (1); if (source_is_imm1_8 (curi)) printf ("\t} else {\n"); else printf ("\t} else if (cnt > 0) {\n"); printf ("\t\tval >>= cnt - 1;\n"); printf ("\t\tSET_CFLG (val & 1);\n"); duplicate_carry (1); printf ("\t\tval >>= 1;\n"); printf ("\t\tval |= (%s << (%d - cnt)) & (uae_u32)-sign;\n", bit_mask (curi->size), bit_size (curi->size)); printf ("\t\tval &= %s;\n", bit_mask (curi->size)); printf ("\t}\n"); genflags (flag_logical_noclobber, curi->size, "val", "", ""); shift_ce (curi->dmode, curi->size); genastore ("val", curi->dmode, "dstreg", curi->size, "data"); break; case i_ASL: genamode (curi->smode, "srcreg", curi->size, "cnt", 1, 0, 0); genamode (curi->dmode, "dstreg", curi->size, "data", 1, 0, 0); fill_prefetch_next(); start_brace (); switch (curi->size) { case sz_byte: printf ("\tuae_u32 val = (uae_u8)data;\n"); break; case sz_word: printf ("\tuae_u32 val = (uae_u16)data;\n"); break; case sz_long: printf ("\tuae_u32 val = data;\n"); break; default: abort (); } printf ("\tint ccnt = cnt & 63;\n"); printf ("\tcnt &= 63;\n"); printf ("\tCLEAR_CZNV ();\n"); printf ("\tif (cnt >= %d) {\n", bit_size (curi->size)); printf ("\t\tSET_VFLG (val != 0);\n"); printf ("\t\tSET_CFLG (cnt == %d ? val & 1 : 0);\n", bit_size (curi->size)); duplicate_carry (1); printf ("\t\tval = 0;\n"); if (source_is_imm1_8 (curi)) printf ("\t} else {\n"); else printf ("\t} else if (cnt > 0) {\n"); printf ("\t\tuae_u32 mask = (%s << (%d - cnt)) & %s;\n", bit_mask (curi->size), bit_size (curi->size) - 1, bit_mask (curi->size)); printf ("\t\tSET_VFLG ((val & mask) != mask && (val & mask) != 0);\n"); printf ("\t\tval <<= cnt - 1;\n"); printf ("\t\tSET_CFLG ((val & %s) >> %d);\n", cmask (curi->size), bit_size (curi->size) - 1); duplicate_carry (1); printf ("\t\tval <<= 1;\n"); printf ("\t\tval &= %s;\n", bit_mask (curi->size)); printf ("\t}\n"); genflags (flag_logical_noclobber, curi->size, "val", "", ""); shift_ce (curi->dmode, curi->size); genastore ("val", curi->dmode, "dstreg", curi->size, "data"); break; case i_LSR: genamode (curi->smode, "srcreg", curi->size, "cnt", 1, 0, 0); genamode (curi->dmode, "dstreg", curi->size, "data", 1, 0, 0); fill_prefetch_next(); start_brace (); switch (curi->size) { case sz_byte: printf ("\tuae_u32 val = (uae_u8)data;\n"); break; case sz_word: printf ("\tuae_u32 val = (uae_u16)data;\n"); break; case sz_long: printf ("\tuae_u32 val = data;\n"); break; default: abort (); } printf ("\tint ccnt = cnt & 63;\n"); printf ("\tcnt &= 63;\n"); printf ("\tCLEAR_CZNV ();\n"); printf ("\tif (cnt >= %d) {\n", bit_size (curi->size)); printf ("\t\tSET_CFLG ((cnt == %d) & (val >> %d));\n", bit_size (curi->size), bit_size (curi->size) - 1); duplicate_carry (1); printf ("\t\tval = 0;\n"); if (source_is_imm1_8 (curi)) printf ("\t} else {\n"); else printf ("\t} else if (cnt > 0) {\n"); printf ("\t\tval >>= cnt - 1;\n"); printf ("\t\tSET_CFLG (val & 1);\n"); duplicate_carry (1); printf ("\t\tval >>= 1;\n"); printf ("\t}\n"); genflags (flag_logical_noclobber, curi->size, "val", "", ""); shift_ce (curi->dmode, curi->size); genastore ("val", curi->dmode, "dstreg", curi->size, "data"); break; case i_LSL: genamode (curi->smode, "srcreg", curi->size, "cnt", 1, 0, 0); genamode (curi->dmode, "dstreg", curi->size, "data", 1, 0, 0); fill_prefetch_next(); start_brace (); switch (curi->size) { case sz_byte: printf ("\tuae_u32 val = (uae_u8)data;\n"); break; case sz_word: printf ("\tuae_u32 val = (uae_u16)data;\n"); break; case sz_long: printf ("\tuae_u32 val = data;\n"); break; default: abort (); } printf ("\tint ccnt = cnt & 63;\n"); printf ("\tcnt &= 63;\n"); printf ("\tCLEAR_CZNV ();\n"); printf ("\tif (cnt >= %d) {\n", bit_size (curi->size)); printf ("\t\tSET_CFLG (cnt == %d ? val & 1 : 0);\n", bit_size (curi->size)); duplicate_carry (1); printf ("\t\tval = 0;\n"); if (source_is_imm1_8 (curi)) printf ("\t} else {\n"); else printf ("\t} else if (cnt > 0) {\n"); printf ("\t\tval <<= (cnt - 1);\n"); printf ("\t\tSET_CFLG ((val & %s) >> %d);\n", cmask (curi->size), bit_size (curi->size) - 1); duplicate_carry (1); printf ("\t\tval <<= 1;\n"); printf ("\tval &= %s;\n", bit_mask (curi->size)); printf ("\t}\n"); genflags (flag_logical_noclobber, curi->size, "val", "", ""); shift_ce (curi->dmode, curi->size); genastore ("val", curi->dmode, "dstreg", curi->size, "data"); break; case i_ROL: genamode (curi->smode, "srcreg", curi->size, "cnt", 1, 0, 0); genamode (curi->dmode, "dstreg", curi->size, "data", 1, 0, 0); fill_prefetch_next (); start_brace (); switch (curi->size) { case sz_byte: printf ("\tuae_u32 val = (uae_u8)data;\n"); break; case sz_word: printf ("\tuae_u32 val = (uae_u16)data;\n"); break; case sz_long: printf ("\tuae_u32 val = data;\n"); break; default: abort (); } printf ("\tint ccnt = cnt & 63;\n"); printf ("\tcnt &= 63;\n"); printf ("\tCLEAR_CZNV ();\n"); if (source_is_imm1_8 (curi)) printf ("{"); else printf ("\tif (cnt > 0) {\n"); printf ("\tuae_u32 loval;\n"); printf ("\tcnt &= %d;\n", bit_size (curi->size) - 1); printf ("\tloval = val >> (%d - cnt);\n", bit_size (curi->size)); printf ("\tval <<= cnt;\n"); printf ("\tval |= loval;\n"); printf ("\tval &= %s;\n", bit_mask (curi->size)); printf ("\tSET_CFLG (val & 1);\n"); printf ("}\n"); genflags (flag_logical_noclobber, curi->size, "val", "", ""); shift_ce (curi->dmode, curi->size); genastore ("val", curi->dmode, "dstreg", curi->size, "data"); break; case i_ROR: genamode (curi->smode, "srcreg", curi->size, "cnt", 1, 0, 0); genamode (curi->dmode, "dstreg", curi->size, "data", 1, 0, 0); fill_prefetch_next (); start_brace (); switch (curi->size) { case sz_byte: printf ("\tuae_u32 val = (uae_u8)data;\n"); break; case sz_word: printf ("\tuae_u32 val = (uae_u16)data;\n"); break; case sz_long: printf ("\tuae_u32 val = data;\n"); break; default: abort (); } printf ("\tint ccnt = cnt & 63;\n"); printf ("\tcnt &= 63;\n"); printf ("\tCLEAR_CZNV ();\n"); if (source_is_imm1_8 (curi)) printf ("{"); else printf ("\tif (cnt > 0) {"); printf ("\tuae_u32 hival;\n"); printf ("\tcnt &= %d;\n", bit_size (curi->size) - 1); printf ("\thival = val << (%d - cnt);\n", bit_size (curi->size)); printf ("\tval >>= cnt;\n"); printf ("\tval |= hival;\n"); printf ("\tval &= %s;\n", bit_mask (curi->size)); printf ("\tSET_CFLG ((val & %s) >> %d);\n", cmask (curi->size), bit_size (curi->size) - 1); printf ("\t}\n"); genflags (flag_logical_noclobber, curi->size, "val", "", ""); shift_ce (curi->dmode, curi->size); genastore ("val", curi->dmode, "dstreg", curi->size, "data"); break; case i_ROXL: genamode (curi->smode, "srcreg", curi->size, "cnt", 1, 0, 0); genamode (curi->dmode, "dstreg", curi->size, "data", 1, 0, 0); fill_prefetch_next (); start_brace (); switch (curi->size) { case sz_byte: printf ("\tuae_u32 val = (uae_u8)data;\n"); break; case sz_word: printf ("\tuae_u32 val = (uae_u16)data;\n"); break; case sz_long: printf ("\tuae_u32 val = data;\n"); break; default: abort (); } printf ("\tint ccnt = cnt & 63;\n"); printf ("\tcnt &= 63;\n"); printf ("\tCLEAR_CZNV ();\n"); if (source_is_imm1_8 (curi)) printf ("{"); else { force_range_for_rox ("cnt", curi->size); printf ("\tif (cnt > 0) {\n"); } printf ("\tcnt--;\n"); printf ("\t{\n\tuae_u32 carry;\n"); printf ("\tuae_u32 loval = val >> (%d - cnt);\n", bit_size (curi->size) - 1); printf ("\tcarry = loval & 1;\n"); printf ("\tval = (((val << 1) | GET_XFLG ()) << cnt) | (loval >> 1);\n"); printf ("\tSET_XFLG (carry);\n"); printf ("\tval &= %s;\n", bit_mask (curi->size)); printf ("\t} }\n"); printf ("\tSET_CFLG (GET_XFLG ());\n"); genflags (flag_logical_noclobber, curi->size, "val", "", ""); shift_ce (curi->dmode, curi->size); genastore ("val", curi->dmode, "dstreg", curi->size, "data"); break; case i_ROXR: genamode (curi->smode, "srcreg", curi->size, "cnt", 1, 0, 0); genamode (curi->dmode, "dstreg", curi->size, "data", 1, 0, 0); fill_prefetch_next (); start_brace (); switch (curi->size) { case sz_byte: printf ("\tuae_u32 val = (uae_u8)data;\n"); break; case sz_word: printf ("\tuae_u32 val = (uae_u16)data;\n"); break; case sz_long: printf ("\tuae_u32 val = data;\n"); break; default: abort (); } printf ("\tint ccnt = cnt & 63;\n"); printf ("\tcnt &= 63;\n"); printf ("\tCLEAR_CZNV ();\n"); if (source_is_imm1_8 (curi)) printf ("{"); else { force_range_for_rox ("cnt", curi->size); printf ("\tif (cnt > 0) {\n"); } printf ("\tcnt--;\n"); printf ("\t{\n\tuae_u32 carry;\n"); printf ("\tuae_u32 hival = (val << 1) | GET_XFLG ();\n"); printf ("\thival <<= (%d - cnt);\n", bit_size (curi->size) - 1); printf ("\tval >>= cnt;\n"); printf ("\tcarry = val & 1;\n"); printf ("\tval >>= 1;\n"); printf ("\tval |= hival;\n"); printf ("\tSET_XFLG (carry);\n"); printf ("\tval &= %s;\n", bit_mask (curi->size)); printf ("\t} }\n"); printf ("\tSET_CFLG (GET_XFLG ());\n"); genflags (flag_logical_noclobber, curi->size, "val", "", ""); shift_ce (curi->dmode, curi->size); genastore ("val", curi->dmode, "dstreg", curi->size, "data"); break; case i_ASRW: genamode (curi->smode, "srcreg", curi->size, "data", 1, 0, 0); fill_prefetch_next (); start_brace (); switch (curi->size) { case sz_byte: printf ("\tuae_u32 val = (uae_u8)data;\n"); break; case sz_word: printf ("\tuae_u32 val = (uae_u16)data;\n"); break; case sz_long: printf ("\tuae_u32 val = data;\n"); break; default: abort (); } printf ("\tuae_u32 sign = %s & val;\n", cmask (curi->size)); printf ("\tuae_u32 cflg = val & 1;\n"); printf ("\tval = (val >> 1) | sign;\n"); genflags (flag_logical, curi->size, "val", "", ""); printf ("\tSET_CFLG (cflg);\n"); duplicate_carry (0); genastore ("val", curi->smode, "srcreg", curi->size, "data"); break; case i_ASLW: genamode (curi->smode, "srcreg", curi->size, "data", 1, 0, 0); fill_prefetch_next (); start_brace (); switch (curi->size) { case sz_byte: printf ("\tuae_u32 val = (uae_u8)data;\n"); break; case sz_word: printf ("\tuae_u32 val = (uae_u16)data;\n"); break; case sz_long: printf ("\tuae_u32 val = data;\n"); break; default: abort (); } printf ("\tuae_u32 sign = %s & val;\n", cmask (curi->size)); printf ("\tuae_u32 sign2;\n"); printf ("\tval <<= 1;\n"); genflags (flag_logical, curi->size, "val", "", ""); printf ("\tsign2 = %s & val;\n", cmask (curi->size)); printf ("\tSET_CFLG (sign != 0);\n"); duplicate_carry (0); printf ("\tSET_VFLG (GET_VFLG () | (sign2 != sign));\n"); genastore ("val", curi->smode, "srcreg", curi->size, "data"); break; case i_LSRW: genamode (curi->smode, "srcreg", curi->size, "data", 1, 0, 0); fill_prefetch_next (); start_brace (); switch (curi->size) { case sz_byte: printf ("\tuae_u32 val = (uae_u8)data;\n"); break; case sz_word: printf ("\tuae_u32 val = (uae_u16)data;\n"); break; case sz_long: printf ("\tuae_u32 val = data;\n"); break; default: abort (); } printf ("\tuae_u32 carry = val & 1;\n"); printf ("\tval >>= 1;\n"); genflags (flag_logical, curi->size, "val", "", ""); printf ("\tSET_CFLG (carry);\n"); duplicate_carry (0); genastore ("val", curi->smode, "srcreg", curi->size, "data"); break; case i_LSLW: genamode (curi->smode, "srcreg", curi->size, "data", 1, 0, 0); fill_prefetch_next (); start_brace (); switch (curi->size) { case sz_byte: printf ("\tuae_u8 val = data;\n"); break; case sz_word: printf ("\tuae_u16 val = data;\n"); break; case sz_long: printf ("\tuae_u32 val = data;\n"); break; default: abort (); } printf ("\tuae_u32 carry = val & %s;\n", cmask (curi->size)); printf ("\tval <<= 1;\n"); genflags (flag_logical, curi->size, "val", "", ""); printf ("\tSET_CFLG (carry >> %d);\n", bit_size (curi->size) - 1); duplicate_carry (0); genastore ("val", curi->smode, "srcreg", curi->size, "data"); break; case i_ROLW: genamode (curi->smode, "srcreg", curi->size, "data", 1, 0, 0); fill_prefetch_next (); start_brace (); switch (curi->size) { case sz_byte: printf ("\tuae_u8 val = data;\n"); break; case sz_word: printf ("\tuae_u16 val = data;\n"); break; case sz_long: printf ("\tuae_u32 val = data;\n"); break; default: abort (); } printf ("\tuae_u32 carry = val & %s;\n", cmask (curi->size)); printf ("\tval <<= 1;\n"); printf ("\tif (carry) val |= 1;\n"); genflags (flag_logical, curi->size, "val", "", ""); printf ("\tSET_CFLG (carry >> %d);\n", bit_size (curi->size) - 1); genastore ("val", curi->smode, "srcreg", curi->size, "data"); break; case i_RORW: genamode (curi->smode, "srcreg", curi->size, "data", 1, 0, 0); fill_prefetch_next (); start_brace (); switch (curi->size) { case sz_byte: printf ("\tuae_u8 val = data;\n"); break; case sz_word: printf ("\tuae_u16 val = data;\n"); break; case sz_long: printf ("\tuae_u32 val = data;\n"); break; default: abort (); } printf ("\tuae_u32 carry = val & 1;\n"); printf ("\tval >>= 1;\n"); printf ("\tif (carry) val |= %s;\n", cmask (curi->size)); genflags (flag_logical, curi->size, "val", "", ""); printf ("\tSET_CFLG (carry);\n"); genastore ("val", curi->smode, "srcreg", curi->size, "data"); break; case i_ROXLW: genamode (curi->smode, "srcreg", curi->size, "data", 1, 0, 0); fill_prefetch_next (); start_brace (); switch (curi->size) { case sz_byte: printf ("\tuae_u8 val = data;\n"); break; case sz_word: printf ("\tuae_u16 val = data;\n"); break; case sz_long: printf ("\tuae_u32 val = data;\n"); break; default: abort (); } printf ("\tuae_u32 carry = val & %s;\n", cmask (curi->size)); printf ("\tval <<= 1;\n"); printf ("\tif (GET_XFLG ()) val |= 1;\n"); genflags (flag_logical, curi->size, "val", "", ""); printf ("\tSET_CFLG (carry >> %d);\n", bit_size (curi->size) - 1); duplicate_carry (0); genastore ("val", curi->smode, "srcreg", curi->size, "data"); break; case i_ROXRW: genamode (curi->smode, "srcreg", curi->size, "data", 1, 0, 0); fill_prefetch_next (); start_brace (); switch (curi->size) { case sz_byte: printf ("\tuae_u8 val = data;\n"); break; case sz_word: printf ("\tuae_u16 val = data;\n"); break; case sz_long: printf ("\tuae_u32 val = data;\n"); break; default: abort (); } printf ("\tuae_u32 carry = val & 1;\n"); printf ("\tval >>= 1;\n"); printf ("\tif (GET_XFLG ()) val |= %s;\n", cmask (curi->size)); genflags (flag_logical, curi->size, "val", "", ""); printf ("\tSET_CFLG (carry);\n"); duplicate_carry (0); genastore ("val", curi->smode, "srcreg", curi->size, "data"); break; case i_MOVEC2: genamode (curi->smode, "srcreg", curi->size, "src", 1, 0, 0); fill_prefetch_next (); start_brace (); printf ("\tint regno = (src >> 12) & 15;\n"); printf ("\tuae_u32 *regp = regs.regs + regno;\n"); printf ("\tif (! m68k_movec2(src & 0xFFF, regp)) goto %s;\n", endlabelstr); break; case i_MOVE2C: genamode (curi->smode, "srcreg", curi->size, "src", 1, 0, 0); fill_prefetch_next (); start_brace (); printf ("\tint regno = (src >> 12) & 15;\n"); printf ("\tuae_u32 *regp = regs.regs + regno;\n"); printf ("\tif (! m68k_move2c(src & 0xFFF, regp)) goto %s;\n", endlabelstr); break; case i_CAS: { int old_brace_level; genamode (curi->smode, "srcreg", curi->size, "src", 1, 0, 0); genamode (curi->dmode, "dstreg", curi->size, "dst", 1, 0, 0); if (cpu_level == 5 && curi->size > 0) { printf ("\tif ((dsta & %d) && currprefs.cpu_compatible && get_cpu_model () == 68060) {\n", curi->size == 1 ? 1 : 3); printf ("\t\top_unimpl ();\n"); printf ("\t\tgoto %s;\n", endlabelstr); printf ("\t}\n"); need_endlabel = 1; } fill_prefetch_0 (); start_brace (); printf ("\tint ru = (src >> 6) & 7;\n"); printf ("\tint rc = src & 7;\n"); genflags (flag_cmp, curi->size, "newv", "m68k_dreg (regs, rc)", "dst"); sync_m68k_pc (); printf ("\tif (GET_ZFLG ())"); old_brace_level = n_braces; start_brace (); genastore ("(m68k_dreg (regs, ru))", curi->dmode, "dstreg", curi->size, "dst"); pop_braces (old_brace_level); printf ("else"); start_brace (); switch (curi->size) { case sz_byte: printf ("\tm68k_dreg(regs, rc) = (m68k_dreg(regs, rc) & ~0xff) | (dst & 0xff);\n"); break; case sz_word: printf ("\tm68k_dreg(regs, rc) = (m68k_dreg(regs, rc) & ~0xffff) | (dst & 0xffff);\n"); break; default: printf ("\tm68k_dreg(regs, rc) = dst;\n"); break; } pop_braces (old_brace_level); } break; case i_CAS2: genamode (curi->smode, "srcreg", curi->size, "extra", 1, 0, 0); printf ("\tuae_u32 rn1 = regs.regs[(extra >> 28) & 15];\n"); printf ("\tuae_u32 rn2 = regs.regs[(extra >> 12) & 15];\n"); if (curi->size == sz_word) { int old_brace_level = n_braces; printf ("\tuae_u16 dst1 = %s (rn1), dst2 = %s (rn2);\n", srcw, srcw); genflags (flag_cmp, curi->size, "newv", "m68k_dreg (regs, (extra >> 16) & 7)", "dst1"); printf ("\tif (GET_ZFLG ()) {\n"); genflags (flag_cmp, curi->size, "newv", "m68k_dreg (regs, extra & 7)", "dst2"); printf ("\tif (GET_ZFLG ()) {\n"); printf ("\t%s (rn1, m68k_dreg (regs, (extra >> 22) & 7));\n", dstw); printf ("\t%s (rn2, m68k_dreg (regs, (extra >> 6) & 7));\n", dstw); printf ("\t}}\n"); pop_braces (old_brace_level); printf ("\tif (! GET_ZFLG ()) {\n"); printf ("\tm68k_dreg (regs, (extra >> 6) & 7) = (m68k_dreg (regs, (extra >> 6) & 7) & ~0xffff) | (dst2 & 0xffff);\n"); printf ("\tm68k_dreg (regs, (extra >> 22) & 7) = (m68k_dreg (regs, (extra >> 22) & 7) & ~0xffff) | (dst1 & 0xffff);\n"); printf ("\t}\n"); } else { int old_brace_level = n_braces; printf ("\tuae_u32 dst1 = %s (rn1), dst2 = %s (rn2);\n", srcl, srcl); genflags (flag_cmp, curi->size, "newv", "m68k_dreg (regs, (extra >> 16) & 7)", "dst1"); printf ("\tif (GET_ZFLG ()) {\n"); genflags (flag_cmp, curi->size, "newv", "m68k_dreg (regs, extra & 7)", "dst2"); printf ("\tif (GET_ZFLG ()) {\n"); printf ("\t%s (rn1, m68k_dreg (regs, (extra >> 22) & 7));\n", dstl); printf ("\t%s (rn2, m68k_dreg (regs, (extra >> 6) & 7));\n", dstl); printf ("\t}}\n"); pop_braces (old_brace_level); printf ("\tif (! GET_ZFLG ()) {\n"); printf ("\tm68k_dreg (regs, (extra >> 6) & 7) = dst2;\n"); printf ("\tm68k_dreg (regs, (extra >> 22) & 7) = dst1;\n"); printf ("\t}\n"); } break; case i_MOVES: /* ignore DFC and SFC when using_mmu == false */ { int old_brace_level; genamode (curi->smode, "srcreg", curi->size, "extra", 1, 0, 0); printf ("\tif (extra & 0x800)\n"); { int old_m68k_pc_offset = m68k_pc_offset; old_brace_level = n_braces; start_brace (); printf ("\tuae_u32 src = regs.regs[(extra >> 12) & 15];\n"); genamode (curi->dmode, "dstreg", curi->size, "dst", 2, 0, 0); genastore_fc ("src", curi->dmode, "dstreg", curi->size, "dst"); pop_braces (old_brace_level); m68k_pc_offset = old_m68k_pc_offset; } printf ("else"); { start_brace (); genamode (curi->dmode, "dstreg", curi->size, "src", 1, 0, GF_FC); printf ("\tif (extra & 0x8000) {\n"); switch (curi->size) { case sz_byte: printf ("\tm68k_areg (regs, (extra >> 12) & 7) = (uae_s32)(uae_s8)src;\n"); break; case sz_word: printf ("\tm68k_areg (regs, (extra >> 12) & 7) = (uae_s32)(uae_s16)src;\n"); break; case sz_long: printf ("\tm68k_areg (regs, (extra >> 12) & 7) = src;\n"); break; default: abort (); } printf ("\t} else {\n"); genastore ("src", Dreg, "(extra >> 12) & 7", curi->size, ""); printf ("\t}\n"); pop_braces (old_brace_level); } sync_m68k_pc (); } break; case i_BKPT: /* only needed for hardware emulators */ sync_m68k_pc (); printf ("\top_illg (opcode);\n"); break; case i_CALLM: /* not present in 68030 */ sync_m68k_pc (); printf ("\top_illg (opcode);\n"); break; case i_RTM: /* not present in 68030 */ sync_m68k_pc (); printf ("\top_illg (opcode);\n"); break; case i_TRAPcc: if (curi->smode != am_unknown && curi->smode != am_illg) genamode (curi->smode, "srcreg", curi->size, "dummy", 1, 0, 0); fill_prefetch_0 (); printf ("\tif (cctrue (%d)) { Exception (7); goto %s; }\n", curi->cc, endlabelstr); need_endlabel = 1; break; case i_DIVL: genamode (curi->smode, "srcreg", curi->size, "extra", 1, 0, 0); genamode (curi->dmode, "dstreg", curi->size, "dst", 1, 0, 0); if (using_ce020) { addcycles_ce020 (70); } sync_m68k_pc (); printf ("\tm68k_divl(opcode, dst, extra);\n"); break; case i_MULL: genamode (curi->smode, "srcreg", curi->size, "extra", 1, 0, 0); genamode (curi->dmode, "dstreg", curi->size, "dst", 1, 0, 0); if (using_ce020) { addcycles_ce020 (40); } sync_m68k_pc (); printf ("\tm68k_mull(opcode, dst, extra);\n"); break; case i_BFTST: case i_BFEXTU: case i_BFCHG: case i_BFEXTS: case i_BFCLR: case i_BFFFO: case i_BFSET: case i_BFINS: { char *getb, *putb; if (using_mmu || using_ce020) { getb = "x_get_bitfield"; putb = "x_put_bitfield"; } else { getb = "get_bitfield"; putb = "put_bitfield"; } genamode (curi->smode, "srcreg", curi->size, "extra", 1, 0, 0); genamode (curi->dmode, "dstreg", sz_long, "dst", 2, 0, 0); start_brace (); printf ("\tuae_u32 bdata[2];\n"); printf ("\tuae_s32 offset = extra & 0x800 ? m68k_dreg(regs, (extra >> 6) & 7) : (extra >> 6) & 0x1f;\n"); printf ("\tint width = (((extra & 0x20 ? m68k_dreg(regs, extra & 7) : extra) -1) & 0x1f) +1;\n"); if (curi->dmode == Dreg) { printf ("\tuae_u32 tmp = m68k_dreg(regs, dstreg);\n"); printf ("\toffset &= 0x1f;\n"); printf ("\ttmp = (tmp << offset) | (tmp >> (32 - offset));\n"); printf ("\tbdata[0] = tmp & ((1 << (32 - width)) - 1);\n"); } else { printf ("\tuae_u32 tmp;\n"); printf ("\tdsta += offset >> 3;\n"); printf ("\ttmp = %s (dsta, bdata, offset, width);\n", getb); } printf ("\tSET_NFLG_ALWAYS (((uae_s32)tmp) < 0 ? 1 : 0);\n"); if (curi->mnemo == i_BFEXTS) printf ("\ttmp = (uae_s32)tmp >> (32 - width);\n"); else printf ("\ttmp >>= (32 - width);\n"); printf ("\tSET_ZFLG (tmp == 0); SET_VFLG (0); SET_CFLG (0);\n"); switch (curi->mnemo) { case i_BFTST: break; case i_BFEXTU: case i_BFEXTS: printf ("\tm68k_dreg (regs, (extra >> 12) & 7) = tmp;\n"); break; case i_BFCHG: printf ("\ttmp = tmp ^ (0xffffffffu >> (32 - width));\n"); break; case i_BFCLR: printf ("\ttmp = 0;\n"); break; case i_BFFFO: printf ("\t{ uae_u32 mask = 1 << (width - 1);\n"); printf ("\twhile (mask) { if (tmp & mask) break; mask >>= 1; offset++; }}\n"); printf ("\tm68k_dreg (regs, (extra >> 12) & 7) = offset;\n"); break; case i_BFSET: printf ("\ttmp = 0xffffffffu >> (32 - width);\n"); break; case i_BFINS: printf ("\ttmp = m68k_dreg (regs, (extra >> 12) & 7);\n"); printf ("\ttmp = tmp & (0xffffffffu >> (32 - width));\n"); printf ("\tSET_NFLG (tmp & (1 << (width - 1)) ? 1 : 0);\n"); printf ("\tSET_ZFLG (tmp == 0);\n"); break; default: break; } if (curi->mnemo == i_BFCHG || curi->mnemo == i_BFCLR || curi->mnemo == i_BFSET || curi->mnemo == i_BFINS) { if (curi->dmode == Dreg) { printf ("\ttmp = bdata[0] | (tmp << (32 - width));\n"); printf ("\tm68k_dreg(regs, dstreg) = (tmp >> offset) | (tmp << (32 - offset));\n"); } else { printf ("\t%s(dsta, bdata, tmp, offset, width);\n", putb); } } } break; case i_PACK: if (curi->smode == Dreg) { printf ("\tuae_u16 val = m68k_dreg (regs, srcreg) + %s;\n", gen_nextiword (0)); printf ("\tm68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & 0xffffff00) | ((val >> 4) & 0xf0) | (val & 0xf);\n"); } else { printf ("\tuae_u16 val;\n"); printf ("\tm68k_areg (regs, srcreg) -= areg_byteinc[srcreg];\n"); printf ("\tval = (uae_u16)%s (m68k_areg (regs, srcreg));\n", srcb); printf ("\tm68k_areg (regs, srcreg) -= areg_byteinc[srcreg];\n"); printf ("\tval = (val | ((uae_u16)%s (m68k_areg (regs, srcreg)) << 8)) + %s;\n", srcb, gen_nextiword (0)); printf ("\tm68k_areg (regs, dstreg) -= areg_byteinc[dstreg];\n"); gen_set_fault_pc (); printf ("\t%s (m68k_areg (regs, dstreg),((val >> 4) & 0xf0) | (val & 0xf));\n", dstb); } break; case i_UNPK: if (curi->smode == Dreg) { printf ("\tuae_u16 val = m68k_dreg (regs, srcreg);\n"); printf ("\tval = (((val << 4) & 0xf00) | (val & 0xf)) + %s;\n", gen_nextiword (0)); printf ("\tm68k_dreg (regs, dstreg) = (m68k_dreg (regs, dstreg) & 0xffff0000) | (val & 0xffff);\n"); } else { printf ("\tuae_u16 val;\n"); printf ("\tm68k_areg (regs, srcreg) -= areg_byteinc[srcreg];\n"); printf ("\tval = (uae_u16)%s (m68k_areg (regs, srcreg));\n", srcb); printf ("\tval = (((val << 4) & 0xf00) | (val & 0xf)) + %s;\n", gen_nextiword (0)); if (cpu_level >= 2) { printf ("\tm68k_areg (regs, dstreg) -= 2 * areg_byteinc[dstreg];\n"); printf ("\t%s (m68k_areg (regs, dstreg) + areg_byteinc[dstreg], val);\n", dstb); printf ("\t%s (m68k_areg (regs, dstreg), val >> 8);\n", dstb); } else { printf ("\tm68k_areg (regs, dstreg) -= areg_byteinc[dstreg];\n"); printf ("\t%s (m68k_areg (regs, dstreg),val);\n", dstb); printf ("\tm68k_areg (regs, dstreg) -= areg_byteinc[dstreg];\n"); gen_set_fault_pc (); printf ("\t%s (m68k_areg (regs, dstreg),val >> 8);\n", dstb); } } break; case i_TAS: genamode (curi->smode, "srcreg", curi->size, "src", 1, 0, 0); genflags (flag_logical, curi->size, "src", "", ""); if (!isreg (curi->smode)) addcycles000 (2); fill_prefetch_next (); printf ("\tsrc |= 0x80;\n"); if (cpu_level >= 2 || curi->smode == Dreg || !using_ce) { if (next_cpu_level < 2) next_cpu_level = 2 - 1; genastore ("src", curi->smode, "srcreg", curi->size, "src"); } else { printf ("\tif (!is_cycle_ce ()) {\n"); genastore ("src", curi->smode, "srcreg", curi->size, "src"); printf ("\t} else {\n"); printf ("\t\t%s (4);\n", do_cycles); printf ("\t}\n"); } break; case i_FPP: fpulimit(); genamode (curi->smode, "srcreg", curi->size, "extra", 1, 0, 0); sync_m68k_pc (); printf ("\tfpuop_arithmetic(opcode, extra);\n"); break; case i_FDBcc: fpulimit(); genamode (curi->smode, "srcreg", curi->size, "extra", 1, 0, 0); sync_m68k_pc (); printf ("\tfpuop_dbcc (opcode, extra);\n"); break; case i_FScc: fpulimit(); genamode (curi->smode, "srcreg", curi->size, "extra", 1, 0, 0); sync_m68k_pc (); printf ("\tfpuop_scc (opcode, extra);\n"); break; case i_FTRAPcc: fpulimit(); printf ("\tuaecptr oldpc = m68k_getpc ();\n"); printf ("\tuae_u16 extra = %s;\n", gen_nextiword (0)); if (curi->smode != am_unknown && curi->smode != am_illg) genamode (curi->smode, "srcreg", curi->size, "dummy", 1, 0, 0); sync_m68k_pc (); printf ("\tfpuop_trapcc (opcode, oldpc, extra);\n"); break; case i_FBcc: fpulimit(); sync_m68k_pc (); start_brace (); printf ("\tuaecptr pc = m68k_getpc ();\n"); genamode (curi->dmode, "srcreg", curi->size, "extra", 1, 0, 0); sync_m68k_pc (); printf ("\tfpuop_bcc (opcode, pc,extra);\n"); break; case i_FSAVE: fpulimit(); sync_m68k_pc (); printf ("\tfpuop_save (opcode);\n"); break; case i_FRESTORE: fpulimit(); sync_m68k_pc (); printf ("\tfpuop_restore (opcode);\n"); break; case i_CINVL: case i_CINVP: case i_CINVA: case i_CPUSHL: case i_CPUSHP: case i_CPUSHA: if (using_mmu) printf ("\tflush_mmu(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3);\n"); printf ("\tif (opcode & 0x80)\n"); printf ("\t\tflush_icache(m68k_areg (regs, opcode & 3), (opcode >> 6) & 3);\n"); break; case i_MOVE16: { if ((opcode & 0xfff8) == 0xf620) { /* MOVE16 (Ax)+,(Ay)+ */ printf ("\tuae_u32 v1, v2, v3, v4;\n"); printf ("\tuaecptr mems = m68k_areg (regs, srcreg) & ~15, memd;\n"); printf ("\tdstreg = (%s >> 12) & 7;\n", gen_nextiword (0)); printf ("\tmemd = m68k_areg (regs, dstreg) & ~15;\n"); printf ("\tv1 = %s (mems);\n", srcl); printf ("\tv2 = %s (mems + 4);\n", srcl); printf ("\tv3 = %s (mems + 8);\n", srcl); printf ("\tv4 = %s (mems + 12);\n", srcl); printf ("\t%s (memd , v1);\n", dstl); printf ("\t%s (memd + 4, v2);\n", dstl); printf ("\t%s (memd + 8, v3);\n", dstl); printf ("\t%s (memd + 12, v4);\n", dstl); printf ("\tif (srcreg != dstreg)\n"); printf ("\t\tm68k_areg (regs, srcreg) += 16;\n"); printf ("\tm68k_areg (regs, dstreg) += 16;\n"); } else { /* Other variants */ printf ("\tuae_u32 v1, v2, v3, v4;\n"); genamode (curi->smode, "srcreg", curi->size, "mems", 0, 2, 0); genamode (curi->dmode, "dstreg", curi->size, "memd", 0, 2, 0); printf ("\tmemsa &= ~15;\n"); printf ("\tmemda &= ~15;\n"); printf ("\tv1 = %s (memsa);\n", srcl); printf ("\tv2 = %s (memsa + 4);\n", srcl); printf ("\tv3 = %s (memsa + 8);\n", srcl); printf ("\tv4 = %s (memsa + 12);\n", srcl); printf ("\t%s (memda , v1);\n", dstl); printf ("\t%s (memda + 4, v2);\n", dstl); printf ("\t%s (memda + 8, v3);\n", dstl); printf ("\t%s (memda + 12, v4);\n", dstl); if ((opcode & 0xfff8) == 0xf600) printf ("\tm68k_areg (regs, srcreg) += 16;\n"); else if ((opcode & 0xfff8) == 0xf608) printf ("\tm68k_areg (regs, dstreg) += 16;\n"); } } break; case i_PFLUSHN: case i_PFLUSH: case i_PFLUSHAN: case i_PFLUSHA: case i_PLPAR: case i_PLPAW: case i_PTESTR: case i_PTESTW: sync_m68k_pc (); printf ("\tmmu_op (opcode, 0);\n"); break; case i_MMUOP030: printf ("\tuaecptr pc = m68k_getpc ();\n"); printf ("\tuae_u16 extra = x_get_word (pc + 2);\n"); m68k_pc_offset += 2; sync_m68k_pc (); if (curi->smode == Areg || curi->smode == Dreg) printf("\tuae_u16 extraa = 0;\n"); else genamode (curi->smode, "srcreg", curi->size, "extra", 0, 0, 0); sync_m68k_pc (); printf ("\tmmu_op30 (pc, opcode, extra, extraa);\n"); break; default: abort (); break; } finish_braces (); if (limit_braces) { printf ("\n#endif\n"); n_braces = limit_braces; limit_braces = 0; finish_braces (); } if (did_prefetch >= 0) fill_prefetch_finish (); if (!count_cycles) addcycles_ce020 (2); sync_m68k_pc (); did_prefetch = 0; } static void generate_includes (FILE * f) { fprintf (f, "#include \"sysconfig.h\"\n"); fprintf (f, "#include \"sysdeps.h\"\n"); fprintf (f, "#include \"options.h\"\n"); fprintf (f, "#include \"uae/memory.h\"\n"); fprintf (f, "#include \"custom.h\"\n"); fprintf (f, "#include \"events.h\"\n"); fprintf (f, "#include \"newcpu.h\"\n"); fprintf (f, "#include \"cpu_prefetch.h\"\n"); fprintf (f, "#include \"cputbl.h\"\n"); fprintf (f, "#include \"cpummu.h\"\n"); fprintf (f, "#define CPUFUNC(x) x##_ff\n" "#define SET_CFLG_ALWAYS(x) SET_CFLG(x)\n" "#define SET_NFLG_ALWAYS(x) SET_NFLG(x)\n" "#ifdef NOFLAGS\n" "#include \"noflags.h\"\n" "#endif\n"); } static int postfix; static char *decodeEA (amodes mode, wordsizes size) { static char buffer[80]; buffer[0] = 0; switch (mode){ case Dreg: strcpy (buffer,"Dn"); break; case Areg: strcpy (buffer,"An"); break; case Aind: strcpy (buffer,"(An)"); break; case Aipi: strcpy (buffer,"(An)+"); break; case Apdi: strcpy (buffer,"-(An)"); break; case Ad16: strcpy (buffer,"(d16,An)"); break; case Ad8r: strcpy (buffer,"(d8,An,Xn)"); break; case PC16: strcpy (buffer,"(d16,PC)"); break; case PC8r: strcpy (buffer,"(d8,PC,Xn)"); break; case absw: strcpy (buffer,"(xxx).W"); break; case absl: strcpy (buffer,"(xxx).L"); break; case imm: switch (size){ case sz_byte: strcpy (buffer,"#.B"); break; case sz_word: strcpy (buffer,"#.W"); break; case sz_long: strcpy (buffer,"#.L"); break; default: break; } break; case imm0: strcpy (buffer,"#.B"); break; case imm1: strcpy (buffer,"#.W"); break; case imm2: strcpy (buffer,"#.L"); break; case immi: strcpy (buffer,"#"); break; default: break; } return buffer; } static char *outopcode (int opcode) { static char out[100]; struct instr *ins; int i; ins = &table68k[opcode]; for (i = 0; lookuptab[i].name[0]; i++) { if (ins->mnemo == lookuptab[i].mnemo) break; } { char *s = ua (lookuptab[i].name); strcpy (out, s); xfree (s); } if (ins->smode == immi) strcat (out, "Q"); if (ins->size == sz_byte) strcat (out,".B"); if (ins->size == sz_word) strcat (out,".W"); if (ins->size == sz_long) strcat (out,".L"); strcat (out," "); if (ins->suse) strcat (out, decodeEA (ins->smode, ins->size)); if (ins->duse) { if (ins->suse) strcat (out,","); strcat (out, decodeEA (ins->dmode, ins->size)); } return out; } static void generate_one_opcode (int rp, char *extra) { int idx; uae_u16 smsk, dmsk; long int opcode = opcode_map[rp]; int i68000 = table68k[opcode].clev > 0; if (table68k[opcode].mnemo == i_ILLG || table68k[opcode].clev > cpu_level) return; for (idx = 0; lookuptab[idx].name[0]; idx++) { if (table68k[opcode].mnemo == lookuptab[idx].mnemo) break; } if (table68k[opcode].handler != -1) return; if (opcode_next_clev[rp] != cpu_level) { char *name = ua (lookuptab[idx].name); if (generate_stbl) fprintf (stblfile, "{ %sCPUFUNC(op_%04x_%d%s), %d }, /* %s */\n", (using_ce || using_ce020) ? "(cpuop_func*)" : "", opcode, opcode_last_postfix[rp], extra, opcode, name); xfree (name); return; } fprintf (headerfile, "extern %s op_%04lx_%d%s_nf;\n", (using_ce || using_ce020) ? "cpuop_func_ce" : "cpuop_func", opcode, postfix, extra); fprintf (headerfile, "extern %s op_%04lx_%d%s_ff;\n", (using_ce || using_ce020) ? "cpuop_func_ce" : "cpuop_func", opcode, postfix, extra); printf ("/* %s */\n", outopcode (opcode)); if (i68000) printf("#ifndef CPUEMU_68000_ONLY\n"); printf ("%s REGPARAM2 CPUFUNC(op_%04lx_%d%s)(uae_u32 opcode)\n{\n", (using_ce || using_ce020) ? "void" : "uae_u32", opcode, postfix, extra); switch (table68k[opcode].stype) { case 0: smsk = 7; break; case 1: smsk = 255; break; case 2: smsk = 15; break; case 3: smsk = 7; break; case 4: smsk = 7; break; case 5: smsk = 63; break; case 7: smsk = 3; break; default: abort (); } dmsk = 7; next_cpu_level = -1; if (table68k[opcode].suse && table68k[opcode].smode != imm && table68k[opcode].smode != imm0 && table68k[opcode].smode != imm1 && table68k[opcode].smode != imm2 && table68k[opcode].smode != absw && table68k[opcode].smode != absl && table68k[opcode].smode != PC8r && table68k[opcode].smode != PC16) { if (table68k[opcode].spos == -1) { if (((int) table68k[opcode].sreg) >= 128) printf ("\tuae_u32 srcreg = (uae_s32)(uae_s8)%d;\n", (int) table68k[opcode].sreg); else printf ("\tuae_u32 srcreg = %d;\n", (int) table68k[opcode].sreg); } else { char source[100]; int pos = table68k[opcode].spos; if (pos) sprintf (source, "((opcode >> %d) & %d)", pos, smsk); else sprintf (source, "(opcode & %d)", smsk); if (table68k[opcode].stype == 3) printf ("\tuae_u32 srcreg = imm8_table[%s];\n", source); else if (table68k[opcode].stype == 1) printf ("\tuae_u32 srcreg = (uae_s32)(uae_s8)%s;\n", source); else printf ("\tuae_u32 srcreg = %s;\n", source); } } if (table68k[opcode].duse /* Yes, the dmode can be imm, in case of LINK or DBcc */ && table68k[opcode].dmode != imm && table68k[opcode].dmode != imm0 && table68k[opcode].dmode != imm1 && table68k[opcode].dmode != imm2 && table68k[opcode].dmode != absw && table68k[opcode].dmode != absl) { if (table68k[opcode].dpos == -1) { if (((int) table68k[opcode].dreg) >= 128) printf ("\tuae_u32 dstreg = (uae_s32)(uae_s8)%d;\n", (int) table68k[opcode].dreg); else printf ("\tuae_u32 dstreg = %d;\n", (int) table68k[opcode].dreg); } else { int pos = table68k[opcode].dpos; if (pos) printf ("\tuae_u32 dstreg = (opcode >> %d) & %d;\n", pos, dmsk); else printf ("\tuae_u32 dstreg = opcode & %d;\n", dmsk); } } need_endlabel = 0; endlabelno++; sprintf (endlabelstr, "endlabel%d", endlabelno); count_read = count_write = count_ncycles = count_cycles = 0; count_read_ea = count_write_ea = count_cycles_ea = 0; gen_opcode (opcode); if (need_endlabel) printf ("%s: ;\n", endlabelstr); returncycles ("", insn_n_cycles); printf ("}"); if (using_ce || using_prefetch) { if (count_read + count_write + count_cycles == 0) count_cycles = 4; printf (" /* %d%s (%d/%d)", (count_read + count_write) * 4 + count_cycles, count_ncycles ? "+" : "", count_read, count_write); printf (" */\n"); } else { printf("\n"); } printf ("\n"); if (i68000) printf("#endif\n"); opcode_next_clev[rp] = next_cpu_level; opcode_last_postfix[rp] = postfix; if (generate_stbl) { char *name = ua (lookuptab[idx].name); if (i68000) fprintf (stblfile, "#ifndef CPUEMU_68000_ONLY\n"); fprintf (stblfile, "{ %sCPUFUNC(op_%04x_%d%s), %d }, /* %s */\n", (using_ce || using_ce020) ? "(cpuop_func*)" : "", opcode, postfix, extra, opcode, name); if (i68000) fprintf (stblfile, "#endif\n"); xfree (name); } } static void generate_func (char *extra) { int j, rp; /* sam: this is for people with low memory (eg. me :)) */ printf ("\n" "#if !defined(PART_1) && !defined(PART_2) && " "!defined(PART_3) && !defined(PART_4) && " "!defined(PART_5) && !defined(PART_6) && " "!defined(PART_7) && !defined(PART_8)" "\n" "#define PART_1 1\n" "#define PART_2 1\n" "#define PART_3 1\n" "#define PART_4 1\n" "#define PART_5 1\n" "#define PART_6 1\n" "#define PART_7 1\n" "#define PART_8 1\n" "#endif\n\n"); rp = 0; for(j = 1; j <= 8; ++j) { int k = (j * nr_cpuop_funcs) / 8; printf ("#ifdef PART_%d\n",j); for (; rp < k; rp++) generate_one_opcode (rp, extra); printf ("#endif\n\n"); } if (generate_stbl) fprintf (stblfile, "{ 0, 0 }};\n"); } static void generate_cpu (int id, int mode) { char fname[100]; char *extra, *extraup; static int postfix2 = -1; int rp; using_tracer = mode; extra = ""; extraup = ""; if (using_tracer) { extra = "_t"; extraup = "_T"; } postfix = id; if (id == 0 || id == 11 || id == 12 || id == 20 || id == 21 || id == 22 || id == 31) { if (generate_stbl) fprintf (stblfile, "#ifdef CPUEMU_%d%s\n", postfix, extraup); postfix2 = postfix; sprintf (fname, "cpuemu_%d%s.cpp", postfix, extra); freopen (fname, "wb", stdout); generate_includes (stdout); } using_mmu = 0; using_prefetch = 0; using_prefetch_020 = 0; using_ce = 0; using_ce020 = 0; using_mmu = 0; if (id == 11 || id == 12) { // 11 = 68000 prefetch, 12 = 68000 cycle-exact cpu_level = 0; using_prefetch = 1; using_exception_3 = 1; if (id == 12) using_ce = 1; for (rp = 0; rp < nr_cpuop_funcs; rp++) opcode_next_clev[rp] = 0; } else if (id == 20) { // 68020 prefetch cpu_level = 2; using_prefetch_020 = 2; read_counts (); for (rp = 0; rp < nr_cpuop_funcs; rp++) opcode_next_clev[rp] = cpu_level; } else if (id == 21) { // 68020 cycle-exact cpu_level = 2; using_ce020 = 1; read_counts (); for (rp = 0; rp < nr_cpuop_funcs; rp++) opcode_next_clev[rp] = cpu_level; } else if (id == 22 || id == 23 || id == 24) { // 68030+ "cycle-exact" cpu_level = 3 + (24 - id); using_ce020 = 2; if (id == 22) { read_counts (); for (rp = 0; rp < nr_cpuop_funcs; rp++) opcode_next_clev[rp] = cpu_level; } } else if (id >= 31 && id < 40) { // 31 = 68040 MMU cpu_level = 4; using_mmu = 1; if (id == 31) read_counts (); for (rp = 0; rp < nr_cpuop_funcs; rp++) opcode_next_clev[rp] = cpu_level; } else { cpu_level = 5 - id; // "generic" } using_indirect = using_ce || using_ce020 || using_prefetch_020; if (generate_stbl) { if ((id > 0 && id < 10) || (id >= 20)) fprintf (stblfile, "#ifndef CPUEMU_68000_ONLY\n"); fprintf (stblfile, "const struct cputbl CPUFUNC(op_smalltbl_%d%s)[] = {\n", postfix, extra); } generate_func (extra); if (generate_stbl) { if ((id > 0 && id < 10) || (id >= 20)) fprintf (stblfile, "#endif /* CPUEMU_68000_ONLY */\n"); if (postfix2 >= 0) fprintf (stblfile, "#endif /* CPUEMU_%d%s */\n", postfix2, extraup); } postfix2 = -1; } int main (int argc, char **argv) { int i; read_table68k (); do_merges (); opcode_map = xmalloc (int, nr_cpuop_funcs); opcode_last_postfix = xmalloc (int, nr_cpuop_funcs); opcode_next_clev = xmalloc (int, nr_cpuop_funcs); counts = xmalloc (unsigned long, 65536); read_counts (); /* It would be a lot nicer to put all in one file (we'd also get rid of * cputbl.h that way), but cpuopti can't cope. That could be fixed, but * I don't dare to touch the 68k version. */ headerfile = fopen ("cputbl.h", "wb"); stblfile = fopen ("cpustbl.cpp", "wb"); generate_includes (stblfile); using_prefetch = 0; using_indirect = 0; using_exception_3 = 1; using_ce = 0; for (i = 0; i < 32; i++) { if ((i >= 6 && i < 11) || (i > 12 && i < 20) || (i > 24 && i < 31)) continue; generate_stbl = 1; generate_cpu (i, 0); } free (table68k); return 0; } void write_log (const TCHAR *format,...) { } fs-uae-2.2.3+dfsg/src/nogui.cpp0000644000175000017500000000166212162366655016476 0ustar glaubitzglaubitz /* * UAE - The Un*x Amiga Emulator * * Interface to the Tcl/Tk GUI * * Copyright 1996 Bernd Schmidt */ #include "sysconfig.h" #include "sysdeps.h" #include "config.h" #include "options.h" #include "gui.h" static void sigchldhandler(int foo) { } int gui_init (void) { return 0; } int gui_update (void) { return 0; } void gui_exit (void) { } void gui_fps (int x) { } void gui_led (int led, int on) { } void gui_hd_led (int led) { } void gui_cd_led (int led) { } void gui_filename (int num, const char *name) { } static void getline (char *p) { } void gui_handle_events (void) { } void gui_changesettings (void) { } void gui_update_gfx (void) { } void gui_lock (void) { } void gui_unlock (void) { } void gui_message (const char *format,...) { char msg[2048]; va_list parms; va_start (parms,format); vsprintf ( msg, format, parms); va_end (parms); write_log (msg); } fs-uae-2.2.3+dfsg/src/filesys_bootrom.cpp0000644000175000017500000017733712162366654020610 0ustar glaubitzglaubitz db(0x00); db(0x00); db(0x00); db(0x10); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x09); db(0x60); db(0x00); db(0x0a); db(0xfe); db(0x00); db(0x00); db(0x08); db(0xac); db(0x00); db(0x00); db(0x00); db(0xe0); db(0x00); db(0x00); db(0x02); db(0x74); db(0x00); db(0x00); db(0x00); db(0x24); db(0x00); db(0x00); db(0x03); db(0x82); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x13); db(0x8c); db(0x43); db(0xfa); db(0x18); db(0x95); db(0x4e); db(0xae); db(0xff); db(0xa0); db(0x20); db(0x40); db(0x20); db(0x28); db(0x00); db(0x16); db(0x20); db(0x40); db(0x4e); db(0x90); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0xe0); db(0xe2); db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x11); db(0x61); db(0x00); db(0x17); db(0x7e); db(0x4e); db(0x90); db(0x4a); db(0x80); db(0x67); db(0x4c); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x0c); db(0x6e); db(0x00); db(0x25); db(0x00); db(0x14); db(0x65); db(0x40); db(0x70); db(0x14); db(0x24); db(0x00); db(0x72); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x4a); db(0x80); db(0x67); db(0x32); db(0x24); db(0x40); db(0x20); db(0x4a); db(0x43); db(0xfa); db(0x00); db(0x60); db(0x20); db(0xd9); db(0x59); db(0x82); db(0x66); db(0xfa); db(0x4e); db(0xae); db(0xff); db(0x88); db(0x22); db(0x4e); db(0x30); db(0x7c); db(0xff); db(0xb8); db(0x20); db(0x0a); db(0x4e); db(0xae); db(0xfe); db(0x5c); db(0x25); db(0x40); db(0x00); db(0x0e); db(0x41); db(0xfa); db(0x00); db(0x14); db(0x25); db(0x48); db(0x00); db(0x08); db(0x4e); db(0xae); db(0xfd); db(0x84); db(0x4e); db(0xae); db(0xff); db(0x82); db(0x4c); db(0xdf); db(0x47); db(0x07); db(0x4e); db(0x75); db(0x20); db(0x57); db(0x20); db(0x68); db(0x00); db(0x02); db(0x2f); db(0x08); db(0x4e); db(0x90); db(0x20); db(0x5f); db(0x58); db(0x8f); db(0x48); db(0xe7); db(0xff); db(0x7e); db(0x22); db(0x4e); db(0x20); db(0x08); db(0x30); db(0x7c); db(0xff); db(0xb8); db(0x4e); db(0xae); db(0xfe); db(0x5c); db(0x61); db(0x00); db(0x12); db(0xce); db(0x61); db(0x00); db(0x16); db(0x94); db(0x4c); db(0xdf); db(0x7e); db(0xff); db(0x4e); db(0x75); db(0x00); db(0x00); db(0x08); db(0x00); db(0x00); db(0x02); db(0x67); db(0x06); db(0x4e); db(0xb9); db(0x00); db(0xf0); db(0x00); db(0x00); db(0x4e); db(0xf9); db(0x00); db(0xf0); db(0x00); db(0x00); db(0x00); db(0x00); 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(0x16); db(0xd4); db(0x2a); db(0x50); db(0x43); db(0xfa); db(0x17); db(0xf6); 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(0x17); db(0xe6); db(0x70); db(0x00); db(0x7a); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x28); db(0x40); db(0x4a); db(0xad); db(0x01); db(0x0c); db(0x67); db(0x00); db(0x00); db(0x5c); db(0x20); db(0x3c); db(0x00); db(0x00); db(0x02); db(0x2c); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x26); db(0x40); db(0x27); db(0x4c); db(0x01); db(0x9c); db(0x7c); db(0x00); db(0xbc); db(0x6d); db(0x01); db(0x0e); db(0x64); db(0x2c); db(0x2f); db(0x06); db(0x7e); db(0x01); db(0x4a); db(0x45); db(0x67); db(0x04); db(0x08); db(0xc7); db(0x00); db(0x02); db(0x2f); db(0x0b); db(0x20); db(0x4b); db(0x61); db(0x00); db(0x07); db(0x64); db(0x26); db(0x5f); db(0x0c); db(0x80); db(0xff); db(0xff); db(0xff); db(0xfe); db(0x67); db(0x08); db(0x48); db(0x46); db(0x52); db(0x46); db(0x48); db(0x46); db(0x60); db(0xdc); db(0x2c); db(0x1f); db(0x52); db(0x46); db(0x60); db(0xce); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x22); db(0x4b); db(0x20); db(0x3c); db(0x00); db(0x00); db(0x02); db(0x2c); db(0x4e); db(0xae); db(0xff); db(0x2e); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x22); db(0x4c); db(0x4e); db(0xae); db(0xfe); db(0x62); db(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(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(0x20); db(0x30); db(0x3c); db(0xff); db(0x80); db(0x61); db(0x00); db(0x16); db(0x24); db(0x4e); db(0x90); db(0x22); db(0x04); db(0x74); db(0xf6); db(0x20); db(0x7c); db(0x00); db(0x20); db(0x00); db(0x00); 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(0x30); db(0x3c); db(0xff); db(0x80); db(0x61); db(0x00); db(0x16); db(0x04); db(0x4e); db(0x90); 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(0x17); db(0x42); db(0x4e); db(0xae); db(0xfd); db(0x96); db(0x41); db(0xfa); db(0x16); db(0xb9); db(0x43); db(0xfa); db(0x00); db(0x54); db(0x70); db(0x0a); db(0x61); db(0x00); db(0x0c); db(0x62); db(0x22); db(0x40); db(0x72); db(0x01); db(0x30); db(0x3c); db(0xff); db(0x48); db(0x61); db(0x00); db(0x15); db(0xd6); db(0x4e); db(0x90); db(0x4c); db(0xdf); db(0x7f); db(0xff); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x38); db(0x22); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x24); db(0x00); db(0x28); db(0x01); db(0x26); db(0x09); db(0x24); db(0x48); db(0x43); db(0xfa); db(0x16); db(0xb3); db(0x70); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x4a); db(0x80); db(0x67); db(0x14); db(0x2c); db(0x40); db(0x22); db(0x0a); db(0xe4); db(0x8b); db(0x4e); db(0xae); db(0xff); db(0x76); db(0x22); db(0x4e); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x4e); db(0xae); db(0xfe); db(0x62); db(0x4c); db(0xdf); db(0x44); db(0x1c); db(0x4e); db(0x75); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x70); db(0x00); db(0x08); db(0xc0); db(0x00); db(0x0d); db(0x4e); db(0xae); db(0xfe); db(0xc2); db(0x41); db(0xfa); db(0x16); db(0x64); db(0x43); db(0xfa); db(0x00); db(0x16); db(0x70); db(0x0f); db(0x22); db(0x3c); db(0x00); db(0x00); db(0x1f); db(0x40); db(0x61); db(0x00); db(0xff); db(0xa8); db(0x60); db(0xdc); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x10); db(0x00); db(0x00); db(0x00); db(0x00); db(0x72); db(0x02); db(0x30); db(0x3c); db(0xff); db(0x48); db(0x61); db(0x00); db(0x15); db(0x5e); db(0x4e); db(0x90); db(0x22); db(0x00); db(0x6b); db(0x04); db(0x61); db(0x00); db(0x07); db(0xf0); db(0x70); db(0x00); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x00); db(0x20); db(0x30); db(0x3c); db(0xff); db(0x50); db(0x61); db(0x00); db(0x15); db(0x44); db(0x70); db(0x00); db(0x4e); db(0x90); db(0x4a); db(0x80); db(0x67); db(0x00); db(0x00); db(0xa2); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x30); db(0x3c); db(0xff); db(0x50); db(0x61); db(0x00); db(0x15); db(0x2e); db(0x70); db(0x02); db(0x4e); db(0x90); db(0x0c); db(0x40); db(0x00); db(0x01); db(0x6d); db(0x00); db(0x00); db(0x7c); db(0x6e); db(0x06); db(0x4e); db(0xae); db(0xfe); db(0x92); db(0x60); db(0xe4); db(0x0c); db(0x40); db(0x00); db(0x02); db(0x6e); db(0x08); db(0x20); db(0x01); db(0x4e); db(0xae); db(0xfe); db(0xbc); db(0x60); db(0xd6); db(0x0c); db(0x40); db(0x00); db(0x03); db(0x6e); db(0x06); db(0x4e); db(0xae); db(0xfe); db(0x86); db(0x60); db(0xca); db(0x0c); db(0x40); db(0x00); db(0x04); db(0x6e); db(0x06); db(0x4e); db(0xae); db(0xff); db(0x4c); db(0x60); db(0xbe); db(0x0c); db(0x40); db(0x00); db(0x05); db(0x6e); db(0x46); db(0x48); db(0xe7); db(0x00); db(0xc0); db(0x70); db(0x26); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x4c); db(0xdf); db(0x03); db(0x00); db(0x24); db(0x40); db(0x15); db(0x7c); db(0x00); db(0x08); db(0x00); db(0x08); db(0x25); db(0x48); db(0x00); db(0x0e); db(0x35); db(0x7c); db(0x00); db(0x26); db(0x00); db(0x12); db(0x25); db(0x7c); db(0x40); db(0x00); db(0x00); db(0x00); db(0x00); db(0x14); db(0x35); db(0x7c); db(0x12); db(0x34); db(0x00); db(0x18); db(0x25); db(0x49); db(0x00); db(0x1a); db(0x20); db(0x69); db(0x00); db(0x10); db(0x22); db(0x4a); db(0x4e); db(0xae); db(0xfe); db(0x92); db(0x60); db(0x00); db(0xff); db(0x74); db(0x30); db(0x3c); db(0xff); db(0x50); db(0x61); db(0x00); db(0x14); db(0xa0); db(0x70); db(0x04); db(0x4e); db(0x90); db(0x70); db(0x01); db(0x4c); db(0xdf); db(0x04); db(0x00); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0xc0); db(0xe0); db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x12); db(0x61); db(0x00); db(0x14); db(0x86); db(0x4e); db(0x90); db(0x24); db(0x40); db(0x70); db(0x16); 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(0x13); db(0x7c); db(0x00); db(0x02); db(0x00); db(0x08); db(0x13); db(0x7c); db(0x00); db(0xf6); db(0x00); db(0x09); db(0x41); db(0xfa); db(0x15); db(0x13); db(0x23); db(0x48); db(0x00); db(0x0a); db(0x41); db(0xfa); db(0x00); db(0x16); db(0x23); db(0x48); db(0x00); db(0x12); db(0x23); db(0x4a); db(0x00); db(0x0e); db(0x70); db(0x05); db(0x4e); db(0xae); db(0xff); db(0x58); db(0x4c); db(0xdf); db(0x07); db(0x03); db(0x4e); db(0x75); db(0x52); db(0x91); db(0x70); db(0x00); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0xc0); db(0xc0); db(0x61); db(0x00); db(0xfc); db(0xb0); 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(0x14); db(0xe6); db(0x23); db(0x48); db(0x00); db(0x0a); db(0x41); db(0xfa); db(0xfe); db(0xd2); db(0x23); db(0x48); db(0x00); db(0x0e); db(0x41); db(0xfa); db(0xfe); db(0xca); 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(0x61); db(0x00); db(0xff); db(0x72); db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x04); db(0x61); db(0x00); db(0x13); db(0xfa); db(0x4e); db(0x90); db(0x4a); db(0x80); db(0x67); db(0x04); db(0x61); db(0x00); db(0x0a); db(0xcc); db(0x4c); db(0xdf); db(0x03); db(0x03); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0xc0); db(0xf2); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x24); db(0x48); db(0x26); db(0x49); db(0x20); db(0x3c); db(0x00); db(0x00); db(0x00); db(0xbe); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x20); db(0x40); db(0x70); db(0x00); db(0x43); db(0xeb); db(0x01); db(0xa0); db(0x11); db(0xb1); db(0x00); db(0x00); db(0x00); db(0x0e); db(0x52); db(0x40); db(0x0c); db(0x40); db(0x00); db(0x8c); db(0x66); db(0xf2); db(0x20); db(0x0a); db(0xe4); db(0x88); db(0x21); db(0x40); db(0x00); db(0x36); db(0x22); db(0x48); db(0x41); db(0xfa); db(0x14); db(0x68); db(0x23); db(0x48); db(0x00); db(0x0a); db(0x20); db(0x6b); db(0x01); db(0x98); db(0x41); db(0xe8); db(0x00); db(0x12); db(0x4e); db(0xae); db(0xff); db(0x10); db(0x4c); db(0xdf); db(0x4f); db(0x03); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x7f); db(0x7e); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x24); db(0x48); db(0x0c); db(0x9a); db(0x00); db(0x00); db(0x03); db(0xf3); db(0x66); db(0x00); db(0x00); db(0xe4); db(0x50); db(0x8a); db(0x2e); db(0x2a); db(0x00); db(0x04); db(0x9e); db(0x92); db(0x50); db(0x8a); db(0x52); db(0x87); db(0x26); db(0x4a); db(0x20); db(0x07); db(0xd0); db(0x80); db(0xd0); db(0x80); db(0xd7); db(0xc0); db(0x28); db(0x4a); db(0x9b); db(0xcd); db(0x7c); db(0x00); db(0x24); db(0x12); db(0x72); db(0x01); db(0x08); db(0x02); db(0x00); db(0x1e); db(0x67); db(0x04); db(0x08); db(0xc1); db(0x00); db(0x01); db(0x08); db(0xc1); db(0x00); db(0x10); db(0xe5); db(0x8a); db(0x66); db(0x04); db(0x42); db(0x9a); db(0x60); db(0x20); db(0x50); db(0x82); db(0x20); db(0x02); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x4a); db(0x80); db(0x67); db(0x00); db(0x00); db(0xa0); db(0x20); db(0x40); db(0x20); db(0xc2); db(0x24); db(0xc8); db(0x22); db(0x0d); db(0x67); db(0x06); db(0x20); db(0x08); db(0xe4); db(0x88); db(0x2a); db(0x80); db(0x2a); db(0x48); db(0x52); db(0x86); db(0xbe); db(0x86); db(0x66); db(0xc0); db(0x7c); db(0x00); db(0x22); db(0x06); db(0xd2); db(0x81); db(0xd2); db(0x81); db(0x20); db(0x74); db(0x18); db(0x00); db(0x58); db(0x88); db(0x26); db(0x1b); db(0x28); db(0x1b); db(0xe5); db(0x8c); db(0x0c); db(0x83); db(0x00); db(0x00); db(0x03); db(0xe9); db(0x67); db(0x08); db(0x0c); db(0x83); db(0x00); db(0x00); db(0x03); db(0xea); db(0x66); db(0x0c); db(0x20); db(0x04); db(0x4a); db(0x80); db(0x67); db(0x0e); db(0x10); db(0xdb); db(0x53); db(0x80); db(0x60); db(0xf6); db(0x0c); db(0x83); db(0x00); db(0x00); db(0x03); db(0xeb); db(0x66); db(0x4e); db(0x26); db(0x1b); db(0x0c); db(0x83); db(0x00); db(0x00); db(0x03); db(0xec); db(0x66); db(0x28); db(0x22); db(0x06); db(0xd2); db(0x81); db(0xd2); db(0x81); db(0x20); db(0x74); db(0x18); db(0x00); db(0x58); db(0x88); db(0x20); db(0x1b); db(0x67); db(0xe6); db(0x22); db(0x1b); db(0xd2); db(0x81); db(0xd2); db(0x81); db(0x26); db(0x34); db(0x18); db(0x00); db(0x58); db(0x83); db(0x24); db(0x1b); db(0xd7); db(0xb0); db(0x28); db(0x00); db(0x53); db(0x80); db(0x66); db(0xf6); db(0x60); db(0xe4); db(0x0c); db(0x83); db(0x00); db(0x00); db(0x03); db(0xf2); db(0x66); db(0x14); db(0x52); db(0x86); db(0xbe); db(0x86); db(0x66); db(0x00); db(0xff); db(0x8a); db(0x7e); db(0x01); db(0x20); db(0x54); db(0x20); db(0x07); db(0x4c); db(0xdf); db(0x7e); db(0xfe); db(0x4e); db(0x75); db(0x7e); db(0x00); db(0x60); db(0xf4); db(0x48); db(0xe7); db(0x40); db(0xe2); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x41); db(0xee); db(0x01); db(0x50); db(0x20); db(0x50); db(0x4a); db(0x90); db(0x67); db(0x1a); db(0x22); db(0x68); db(0x00); db(0x0a); db(0x45); db(0xfa); db(0x13); db(0xba); db(0x10); db(0x19); db(0x12); db(0x1a); db(0xb0); db(0x01); db(0x66); db(0x06); db(0x4a); db(0x00); db(0x67); db(0x42); db(0x60); db(0xf2); db(0x20); db(0x50); db(0x60); db(0xe2); db(0x70); db(0x20); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x24); db(0x40); db(0x15); db(0x7c); db(0x00); db(0x08); db(0x00); db(0x08); db(0x41); db(0xfa); db(0x13); db(0x90); db(0x25); db(0x48); db(0x00); db(0x0a); db(0x41); db(0xfa); db(0x13); db(0x0c); db(0x25); db(0x48); db(0x00); db(0x0e); db(0x41); db(0xea); db(0x00); db(0x12); db(0x20); db(0x88); db(0x58); db(0x90); db(0x21); db(0x48); db(0x00); db(0x08); db(0x41); db(0xee); db(0x01); db(0x50); db(0x22); db(0x4a); db(0x4e); db(0xae); db(0xff); db(0x0a); db(0x20); db(0x4a); db(0x20); db(0x08); db(0x4c); db(0xdf); db(0x47); db(0x02); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x01); db(0x02); db(0x2e); db(0x00); db(0x4a); db(0x2b); db(0x00); db(0x4c); db(0x67); db(0x7c); db(0x2c); db(0x6b); db(0x00); db(0xa0); db(0x0c); db(0x6e); db(0x00); db(0x25); db(0x00); db(0x14); db(0x65); db(0x3e); db(0x72); db(0x0e); db(0x4e); db(0xae); db(0xfd); db(0x66); db(0x02); db(0x80); db(0xff); db(0xff); db(0xff); db(0xfe); db(0x67); db(0x62); db(0x08); db(0x07); db(0x00); db(0x00); db(0x67); db(0x0a); db(0x41); db(0xeb); db(0x00); db(0x20); db(0x22); db(0x08); db(0x4e); db(0xae); db(0xfd); db(0x5a); db(0x08); db(0x07); db(0x00); db(0x01); db(0x67); db(0x12); db(0x4a); db(0x2b); db(0x00); db(0x9e); db(0x66); db(0x0c); db(0x50); db(0xeb); db(0x00); db(0x9e); db(0x22); db(0x2b); db(0x00); db(0xb4); db(0x4e); db(0xae); db(0xfd); db(0x5a); db(0x72); db(0x0e); db(0x4e); db(0xae); db(0xfd); db(0x6c); db(0x60); db(0x32); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x4e); db(0xae); db(0xff); db(0x7c); db(0x08); db(0x07); db(0x00); db(0x00); db(0x67); db(0x08); db(0x41); db(0xeb); db(0x00); db(0x20); db(0x61); db(0x00); db(0x00); db(0xac); db(0x08); db(0x07); db(0x00); db(0x01); db(0x67); db(0x12); db(0x4a); db(0x2b); db(0x00); db(0x9e); db(0x66); db(0x0c); db(0x50); db(0xeb); db(0x00); db(0x9e); db(0x20); db(0x6b); db(0x00); db(0xb4); db(0x61); db(0x00); db(0x00); db(0x94); db(0x4e); db(0xae); db(0xff); db(0x76); db(0x4c); db(0xdf); db(0x40); db(0x80); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x01); db(0x22); db(0x2e); db(0x00); db(0x2c); db(0x6b); db(0x00); db(0xa0); db(0x0c); db(0x6e); db(0x00); db(0x25); db(0x00); db(0x14); db(0x65); db(0x3e); db(0x72); db(0x0e); db(0x4e); db(0xae); db(0xfd); db(0x66); db(0x02); db(0x80); db(0xff); db(0xff); db(0xff); db(0xfe); db(0x67); db(0x62); db(0x08); db(0x07); db(0x00); db(0x00); db(0x67); db(0x0a); db(0x41); db(0xeb); db(0x00); db(0x20); db(0x22); db(0x08); db(0x4e); db(0xae); db(0xfd); db(0x60); db(0x08); db(0x07); db(0x00); db(0x01); db(0x67); db(0x12); db(0x4a); db(0x2b); db(0x00); db(0x9e); db(0x67); db(0x0c); db(0x42); db(0x2b); db(0x00); db(0x9e); db(0x22); db(0x2b); db(0x00); db(0xb4); db(0x4e); db(0xae); db(0xfd); db(0x60); db(0x72); db(0x0e); db(0x4e); db(0xae); db(0xfd); db(0x6c); db(0x60); db(0x32); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x4e); db(0xae); db(0xff); db(0x7c); db(0x08); db(0x07); db(0x00); db(0x00); db(0x67); db(0x08); db(0x41); db(0xeb); db(0x00); db(0x20); db(0x61); db(0x00); db(0x00); db(0x44); db(0x08); db(0x07); db(0x00); db(0x01); db(0x67); db(0x12); db(0x4a); db(0x2b); db(0x00); db(0x9e); db(0x67); db(0x0c); db(0x42); db(0x2b); db(0x00); db(0x9e); db(0x20); db(0x6b); db(0x00); db(0xb4); db(0x61); db(0x00); db(0x00); db(0x2c); db(0x4e); db(0xae); db(0xff); db(0x76); db(0x4c); db(0xdf); db(0x44); db(0x80); db(0x4e); db(0x75); db(0x22); db(0x48); db(0x20); db(0x6b); db(0x00); db(0xa0); db(0x20); db(0x68); db(0x00); db(0x22); db(0x20); db(0x68); db(0x00); db(0x18); db(0xd1); db(0xc8); db(0xd1); db(0xc8); db(0x22); db(0xa8); db(0x00); db(0x04); db(0x20); db(0x09); db(0xe4); db(0x88); db(0x21); db(0x40); db(0x00); db(0x04); db(0x4e); db(0x75); db(0x24); db(0x48); db(0x20); db(0x6b); db(0x00); db(0xa0); db(0x20); db(0x68); db(0x00); db(0x22); db(0x20); db(0x68); db(0x00); db(0x18); db(0xd1); db(0xc8); db(0xd1); db(0xc8); db(0x22); db(0x68); db(0x00); db(0x04); db(0xd3); db(0xc9); db(0xd3); db(0xc9); db(0xb3); db(0xca); db(0x66); db(0x06); db(0x21); db(0x52); db(0x00); db(0x04); db(0x60); db(0x18); db(0x20); db(0x09); db(0x67); db(0x0e); db(0x20); db(0x11); db(0xd0); db(0x80); db(0xd0); db(0x80); db(0xb5); db(0xc0); db(0x67); db(0x04); db(0x22); db(0x40); db(0x60); db(0xee); db(0x20); db(0x09); db(0x67); db(0x02); db(0x22); db(0x92); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x20); db(0x22); db(0x74); db(0x16); db(0x9f); db(0xc2); db(0x24); db(0x4f); db(0x32); db(0x02); db(0x42); db(0x32); db(0x10); db(0xff); db(0x53); db(0x41); db(0x66); db(0xf8); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x72); db(0x0f); db(0x4a); db(0x80); db(0x67); db(0x02); db(0x72); db(0x10); db(0x15); db(0x41); db(0x00); db(0x04); db(0x35); db(0x7c); db(0x08); db(0x00); db(0x00); db(0x08); db(0x22); db(0x6b); db(0x00); db(0xa4); db(0x33); db(0x7c); db(0x00); db(0x0b); db(0x00); db(0x1c); db(0x23); db(0x7c); db(0x00); db(0x00); db(0x00); db(0x16); db(0x00); db(0x24); db(0x23); db(0x4a); db(0x00); db(0x28); db(0x13); db(0x7c); db(0x00); db(0x01); db(0x00); db(0x1e); db(0x22); db(0x6b); db(0x00); db(0xa8); db(0x33); db(0x7c); db(0x00); db(0x0a); db(0x00); db(0x1c); db(0x13); db(0x7c); db(0x00); db(0x01); db(0x00); db(0x1e); db(0x4e); db(0xae); db(0xfe); db(0x38); db(0x22); db(0x6b); db(0x00); db(0xa8); db(0x25); db(0x69); db(0x00); db(0x20); db(0x00); db(0x0e); db(0x25); db(0x69); db(0x00); db(0x24); db(0x00); db(0x12); db(0x22); db(0x6b); db(0x00); db(0xa4); db(0x4e); db(0xae); db(0xfe); db(0x38); db(0xdf); db(0xc2); db(0x4c); db(0xdf); db(0x44); db(0x04); db(0x4e); db(0x75); db(0x4a); db(0x00); db(0x67); db(0x26); db(0x4a); db(0x2b); db(0x00); db(0x4c); db(0x66); db(0x36); db(0x70); db(0x00); db(0x4a); db(0x33); db(0x00); db(0x4d); db(0x67); db(0x04); db(0x52); db(0x00); db(0x60); db(0xf6); db(0x17); db(0x40); db(0x00); db(0x4c); db(0x67); db(0x24); db(0x20); db(0x01); db(0x61); db(0x00); db(0xfd); db(0xf2); db(0x70); db(0x01); db(0x61); db(0x00); db(0xff); db(0x60); db(0x60); db(0x16); db(0x4a); db(0x2b); db(0x00); db(0x4c); db(0x67); db(0x10); db(0x42); db(0x2b); db(0x00); db(0x4c); db(0x20); db(0x01); db(0x61); db(0x00); db(0xfe); db(0x68); db(0x70); db(0x00); db(0x61); db(0x00); db(0xff); db(0x48); db(0x4e); db(0x75); db(0x4a); db(0xac); db(0x00); db(0x14); db(0x67); db(0x0a); db(0x70); db(0x00); db(0x72); db(0x01); db(0x61); db(0x00); db(0xff); db(0xb2); db(0x4e); db(0x75); db(0x70); db(0x01); db(0x72); db(0x03); db(0x61); db(0x00); db(0xff); db(0xa8); db(0x4e); db(0x75); db(0x10); db(0x2b); db(0x00); db(0xac); db(0x6b); db(0x0a); db(0x70); db(0x01); db(0x72); db(0x03); db(0x61); db(0x00); db(0xff); db(0x98); db(0x4e); db(0x75); db(0x72); db(0x01); db(0x0c); db(0x00); db(0x00); db(0xfe); db(0x66); db(0x02); db(0x72); db(0x03); db(0x70); db(0x00); db(0x61); db(0x00); db(0xff); db(0x86); db(0x4e); db(0x75); db(0x20); db(0x6c); db(0x00); db(0x24); db(0x4a); db(0x90); db(0x67); db(0x0c); db(0x4a); db(0xa8); db(0x00); db(0x08); db(0x66); db(0x0a); db(0x4a); db(0xa8); db(0x00); db(0x0c); db(0x66); db(0x04); db(0x70); db(0x01); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x3f); db(0x3e); db(0x2a); db(0x48); db(0x24); db(0x6c); db(0x00); db(0x18); db(0x2e); db(0x15); db(0x7a); db(0x00); db(0x4a); db(0x87); db(0x67); db(0x70); db(0x20); db(0x0a); db(0x67); db(0x6c); db(0x7c); db(0x00); db(0x22); db(0x2d); db(0x00); db(0x08); db(0x67); db(0x12); db(0x24); db(0x2a); db(0x00); db(0x04); db(0x2c); db(0x6b); db(0x00); db(0xa0); db(0x4e); db(0xae); db(0xfc); db(0x34); db(0x4a); db(0x80); db(0x66); db(0x02); db(0x50); db(0xc6); db(0x22); db(0x2d); db(0x00); db(0x0c); db(0x67); db(0x1c); db(0x20); db(0x41); db(0x22); db(0x4a); db(0x2f); db(0x0a); db(0x45); db(0xec); db(0x00); db(0x20); db(0x48); db(0x7a); db(0x00); db(0x08); db(0x2f); db(0x28); db(0x00); db(0x08); db(0x4e); db(0x75); db(0x24); db(0x5f); db(0x4a); db(0x80); db(0x66); db(0x02); db(0x50); db(0xc6); db(0x4a); db(0x06); db(0x67); db(0x24); db(0x20); db(0x2a); db(0x00); db(0x04); db(0x90); db(0x8a); db(0x4a); db(0x92); db(0x66); db(0x0a); db(0x20); db(0x05); db(0x67); db(0x10); db(0x20); db(0x40); db(0x42); db(0x90); db(0x60); db(0x0a); db(0x20); db(0x52); db(0x22); db(0x4a); db(0x22); db(0xd8); db(0x59); db(0x80); db(0x6a); db(0xfa); db(0x53); db(0x95); db(0x53); db(0x87); db(0x60); db(0x94); db(0x2a); db(0x0a); db(0x24); db(0x52); db(0x53); db(0x87); db(0x60); db(0x8c); db(0x4c); db(0xdf); db(0x7c); db(0xfc); db(0x20); db(0x6c); db(0x00); db(0x24); db(0x4a); db(0x90); db(0x4e); db(0x75); db(0x61); db(0x00); db(0xfc); db(0x7c); db(0x21); db(0x40); db(0x01); db(0x98); db(0x2f); db(0x08); db(0x30); db(0x3c); db(0xff); db(0xec); db(0x61); db(0x00); db(0x0f); db(0x06); db(0x2a); db(0x50); db(0x30); db(0x3c); db(0xff); db(0x28); db(0x61); db(0x00); db(0x0e); db(0xfc); db(0x22); db(0x48); db(0x20); db(0x5f); db(0x42); db(0xa8); db(0x01); db(0x90); db(0x42); db(0xa8); db(0x01); db(0x94); db(0x4e); db(0x91); db(0x26); db(0x00); db(0x0c); db(0x43); db(0xff); db(0xfe); db(0x67); db(0x00); db(0xf9); db(0x16); db(0x20); db(0x28); db(0x01); db(0x90); db(0x67); db(0x14); db(0x6b); db(0x12); db(0x2f); db(0x08); db(0x72); db(0x01); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x20); db(0x5f); db(0x21); db(0x40); db(0x01); db(0x94); db(0x4a); db(0x83); db(0x6a); db(0x0e); db(0x22); db(0x48); db(0x30); db(0x3c); db(0xff); db(0x20); db(0x61); db(0x00); db(0x0e); db(0xbc); db(0x4e); db(0x90); db(0x60); db(0x26); db(0x2c); db(0x4c); db(0x2f); db(0x08); db(0x4e); db(0xae); db(0xff); db(0x70); db(0x20); db(0x5f); db(0x22); db(0x48); db(0x26); db(0x40); db(0x30); db(0x3c); db(0xff); db(0x20); db(0x61); db(0x00); db(0x0e); db(0xa2); db(0x4e); db(0x90); db(0x70); db(0x00); db(0x27); db(0x40); db(0x00); db(0x08); db(0x27); db(0x40); db(0x00); db(0x10); db(0x27); db(0x40); db(0x00); db(0x20); db(0x4a); db(0xa9); db(0x01); db(0x94); db(0x67); db(0x28); db(0x20); db(0x69); db(0x01); db(0x94); db(0x61); db(0x00); db(0xfa); db(0xf2); db(0x48); db(0xe7); db(0x80); db(0xc0); db(0x20); db(0x29); db(0x01); db(0x90); db(0x22); db(0x69); db(0x01); db(0x94); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x4e); db(0xae); db(0xff); db(0x2e); db(0x4c); db(0xdf); db(0x03); db(0x01); db(0x4a); db(0x80); db(0x67); db(0x04); db(0x61); db(0x00); db(0xfa); db(0x7c); db(0x4a); db(0x83); db(0x6b); db(0x00); db(0xf8); db(0x90); db(0x30); db(0x3c); db(0xff); db(0x18); db(0x61); db(0x00); db(0x0e); db(0x56); db(0x4e); db(0x90); db(0x20); db(0x03); db(0x16); db(0x29); db(0x00); db(0x4f); db(0x4a); db(0x80); db(0x66); db(0x1a); db(0x27); db(0x7c); db(0x00); db(0x00); db(0x17); db(0x70); db(0x00); db(0x14); db(0x41); db(0xfa); db(0xf6); db(0x78); db(0x20); db(0x08); db(0xe4); db(0x88); db(0x27); db(0x40); db(0x00); db(0x20); db(0x70); db(0xff); db(0x27); db(0x40); db(0x00); db(0x24); db(0x08); db(0x07); db(0x00); db(0x00); db(0x67); db(0x40); db(0x0c); db(0x03); db(0x00); db(0x80); db(0x67); db(0x3a); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x70); db(0x14); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x22); db(0x40); db(0x30); db(0x3c); db(0x10); db(0x00); db(0x80); db(0x03); db(0x33); db(0x40); db(0x00); db(0x08); db(0x23); db(0x6d); db(0x01); db(0x04); db(0x00); db(0x0a); db(0x23); db(0x4b); db(0x00); db(0x10); db(0x41); db(0xec); db(0x00); db(0x4a); db(0x4e); db(0xae); db(0xff); db(0x7c); db(0x4e); db(0xae); db(0xfe); db(0xf2); db(0x4e); db(0xae); db(0xff); db(0x76); db(0x70); db(0x00); db(0x4e); db(0x75); db(0x24); db(0x49); db(0x20); db(0x4b); db(0x72); db(0x00); db(0x22); db(0x41); db(0x08); db(0x07); db(0x00); db(0x01); db(0x67); db(0x08); db(0x08); db(0x07); db(0x00); db(0x02); db(0x67); db(0x02); db(0x72); db(0x01); db(0x70); db(0x80); db(0x2c); db(0x4c); db(0x4e); db(0xae); db(0xff); db(0x6a); db(0x08); db(0x07); db(0x00); db(0x01); db(0x67); db(0x5c); db(0x08); db(0x07); db(0x00); db(0x02); db(0x66); db(0x56); db(0x20); db(0x52); db(0x74); db(0x02); db(0x52); db(0x82); db(0x4a); db(0x30); db(0x28); db(0xfd); db(0x66); db(0xf8); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x20); db(0x02); db(0x72); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x4a); db(0x80); db(0x67); db(0x3a); db(0x20); db(0x52); db(0x24); db(0x40); db(0x22); db(0x4a); db(0x12); db(0xd8); db(0x66); db(0xfc); db(0x13); db(0x7c); db(0x00); db(0x3a); db(0xff); db(0xff); db(0x42); db(0x11); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x43); db(0xfa); db(0x0e); db(0x83); db(0x70); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x2c); db(0x40); db(0x22); db(0x0a); db(0x4e); db(0xae); db(0xff); db(0x52); db(0x22); db(0x4e); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x4e); db(0xae); db(0xfe); db(0x62); db(0x22); db(0x4a); db(0x20); db(0x02); db(0x4e); db(0xae); db(0xff); db(0x2e); db(0x70); db(0x00); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x3f); db(0x3e); db(0x2c); db(0x01); db(0x7e); db(0x06); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x43); db(0xfa); db(0x0e); db(0x7e); 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(0x0e); db(0x6c); db(0x70); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x28); db(0x40); db(0x20); db(0x3c); db(0x00); db(0x00); db(0x02); db(0x2c); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x20); db(0x40); db(0x4a); db(0x80); db(0x67); db(0x2c); db(0x21); db(0x4c); db(0x01); db(0x9c); db(0x48); db(0xe7); db(0x00); db(0x8a); db(0x61); db(0x00); db(0xfe); db(0x04); db(0x4c); db(0xdf); db(0x51); db(0x00); db(0x0c); db(0x80); db(0xff); db(0xff); db(0xff); db(0xfe); db(0x67); db(0x08); db(0x48); db(0x46); db(0x52); db(0x46); db(0x48); db(0x46); db(0x60); db(0xe4); db(0x22); db(0x48); db(0x20); db(0x3c); db(0x00); db(0x00); db(0x02); db(0x2c); db(0x4e); db(0xae); db(0xff); db(0x2e); db(0x22); db(0x4c); db(0x4e); db(0xae); db(0xfe); db(0x62); db(0x4c); db(0xdf); db(0x7c); db(0xfc); db(0x4e); db(0x75); db(0x30); db(0x3c); db(0xff); db(0x58); db(0x61); db(0x00); db(0x0c); db(0xe6); db(0x70); db(0x03); db(0x4e); db(0x90); db(0x22); db(0x6b); db(0x00); db(0xa8); db(0x23); db(0x40); db(0x00); db(0x20); db(0x67); db(0x16); db(0x70); db(0x00); db(0x23); db(0x40); db(0x00); db(0x24); db(0x33); db(0x7c); db(0x00); db(0x0b); db(0x00); db(0x1c); db(0x13); db(0x7c); db(0x00); db(0x01); db(0x00); db(0x1e); db(0x4e); db(0xae); db(0xfe); db(0x38); db(0x4e); db(0x75); db(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(0x0d); db(0xa5); db(0x70); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x24); db(0x40); db(0x20); db(0x3c); db(0x00); db(0x00); db(0x00); db(0xb9); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x26); db(0x40); db(0x7c); db(0x00); db(0x26); db(0x86); db(0x27); db(0x46); db(0x00); db(0x04); db(0x27); db(0x46); db(0x00); db(0x08); db(0x27); db(0x4a); db(0x00); db(0xa0); db(0x50); db(0xeb); db(0x00); db(0x9e); db(0x93); db(0xc9); db(0x4e); db(0xae); db(0xfe); db(0xda); db(0x27); db(0x40); db(0x00); db(0xb0); db(0x41); db(0xfa); db(0x0c); db(0x7e); db(0x70); db(0x00); db(0x72); db(0x00); db(0x61); db(0x00); db(0x02); db(0xae); db(0x27); db(0x40); db(0x00); db(0xa4); db(0x41); db(0xfa); db(0x0c); db(0x7b); db(0x70); db(0x00); db(0x72); db(0x00); db(0x61); db(0x00); db(0x02); db(0x9e); db(0x27); db(0x40); db(0x00); db(0xa8); db(0x7a); db(0x00); db(0x20); db(0x4d); db(0x4e); db(0xae); db(0xfe); db(0x80); db(0x20); db(0x4d); db(0x4e); db(0xae); db(0xfe); db(0x8c); db(0x28); db(0x40); db(0x26); db(0x2c); db(0x00); db(0x0a); db(0x30); db(0x3c); db(0xff); db(0x40); db(0x61); db(0x00); db(0x0c); db(0x38); db(0x70); db(0x00); db(0x4e); db(0x90); db(0x24); db(0x00); db(0x70); db(0x01); db(0x61); db(0x00); db(0xfa); db(0x04); db(0x08); db(0x02); db(0x00); db(0x01); db(0x67); db(0x06); db(0x70); db(0x01); db(0x61); db(0x00); db(0xfb); db(0x6c); db(0x60); db(0x00); db(0x01); db(0x2e); db(0x20); db(0x4d); db(0x4e); db(0xae); db(0xfe); db(0x8c); db(0x28); db(0x40); db(0x4a); db(0x80); db(0x66); db(0x10); db(0x70); db(0x00); db(0x12); db(0x2d); db(0x00); db(0x0f); db(0x03); db(0xc0); db(0x08); db(0xc0); db(0x00); db(0x0d); db(0x4e); db(0xae); db(0xfe); db(0xc2); db(0x4a); db(0x2b); db(0x00); db(0xad); db(0x67); db(0x08); db(0x61); db(0x00); db(0xff); db(0x0a); db(0x42); db(0x2b); 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(0x0b); db(0xe4); db(0x70); db(0x01); db(0x4e); db(0x90); db(0x4a); db(0x80); db(0x67); db(0x04); db(0x61); db(0x00); db(0xfb); db(0xfa); db(0x42); db(0x2b); db(0x00); db(0xac); db(0x30); db(0x3c); db(0xff); db(0x58); db(0x61); db(0x00); db(0x0b); db(0xcc); db(0x70); db(0x02); db(0x4e); db(0x90); db(0x20); db(0x0c); db(0x67); db(0x56); db(0x0c); db(0x6c); db(0x00); db(0x26); db(0x00); db(0x12); db(0x66); db(0x4e); db(0x0c); db(0xac); db(0x40); db(0x00); db(0x00); db(0x00); db(0x00); db(0x14); db(0x66); db(0x44); db(0x0c); db(0x6c); db(0x12); db(0x34); db(0x00); db(0x18); db(0x66); db(0x3c); db(0x20); db(0x6c); db(0x00); db(0x1a); db(0x20); db(0x28); db(0x00); db(0x0c); db(0x02); db(0x80); db(0x80); db(0x00); db(0x00); db(0x08); db(0x0c); db(0x80); db(0x80); db(0x00); db(0x00); db(0x08); db(0x66); db(0x1a); db(0x02); db(0xa8); db(0x7f); db(0xff); db(0xff); db(0xff); db(0x00); db(0x0c); db(0x20); db(0x68); db(0x00); db(0x10); db(0x22); db(0x4c); db(0x12); db(0xbc); db(0x00); db(0x08); db(0x4e); db(0xae); db(0xfe); db(0x92); db(0x60); db(0x00); db(0xff); db(0x60); db(0x22); db(0x4c); db(0x70); db(0x26); db(0x4e); db(0xae); db(0xff); db(0x2e); db(0x60); db(0x00); db(0xff); db(0x54); 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(0x0b); db(0x58); 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(0x2e); db(0x22); db(0x50); db(0x20); db(0x40); db(0x20); db(0x28); db(0x00); db(0x04); db(0xb4); db(0x80); db(0x66); db(0x16); db(0x48); db(0xe7); db(0x00); db(0xc0); db(0x28); db(0x68); db(0x00); db(0x0a); db(0x61); db(0x4a); db(0x53); db(0x85); db(0x4c); db(0xdf); db(0x03); db(0x00); db(0x24); db(0x89); db(0x20); db(0x49); db(0x60); db(0xd8); db(0x24); db(0x48); db(0x20); db(0x49); db(0x60); db(0xd2); db(0x0c); db(0x85); db(0x00); db(0x00); db(0x00); db(0x14); db(0x65); db(0x00); db(0x00); db(0x0a); db(0x70); db(0x01); db(0x29); db(0x40); db(0x00); db(0x04); db(0x60); db(0x12); db(0x61); db(0x5e); db(0x30); db(0x3c); db(0xff); db(0x30); db(0x61); db(0x00); db(0x0b); db(0x04); 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(0xd6); db(0x28); db(0x43); db(0x61); db(0x04); db(0x60); db(0x00); db(0xfe); db(0xce); db(0x0c); db(0xac); db(0x00); db(0x00); db(0x00); db(0x1f); db(0x00); db(0x08); db(0x66); db(0x04); db(0x61); db(0x00); db(0xfa); db(0xe2); 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(0xfb); db(0x10); db(0x66); db(0x0e); db(0x30); db(0x3c); db(0xff); db(0x58); db(0x61); db(0x00); db(0x0a); db(0xc2); db(0x70); db(0x00); db(0x4e); db(0x90); db(0x60); db(0xec); db(0x22); db(0x54); db(0x20); db(0x6c); db(0x00); db(0x04); db(0x29); db(0x4d); db(0x00); db(0x04); db(0x4e); db(0xee); db(0xfe); db(0x92); db(0x2f); db(0x05); db(0x7a); db(0xfc); db(0x24); db(0x53); db(0x2e); db(0x0a); db(0x22); db(0x0a); db(0x67); db(0x00); db(0x00); db(0x0c); db(0x52); db(0x85); db(0x67); db(0x1e); db(0x22); db(0x4a); db(0x24); db(0x52); db(0x60); db(0xf0); db(0x52); db(0x85); db(0x67); db(0x3c); db(0x24); db(0x47); db(0x70); db(0x18); db(0x72); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x52); db(0x46); db(0x24); db(0x40); db(0x24); db(0x87); db(0x2e); db(0x0a); db(0x60); db(0xe8); db(0x20); db(0x12); db(0x67); db(0x24); db(0x20); db(0x40); db(0x20); db(0x10); db(0x67); db(0x1e); db(0x20); db(0x40); db(0x20); db(0x10); db(0x67); db(0x18); db(0x70); db(0x00); db(0x22); db(0x80); db(0x22); db(0x4a); db(0x24); db(0x51); db(0x70); db(0x18); db(0x4e); db(0xae); db(0xff); db(0x2e); db(0x06); db(0x86); db(0x00); db(0x01); db(0x00); db(0x00); db(0x20); db(0x0a); db(0x66); db(0xec); db(0x26); db(0x87); db(0x2a); db(0x1f); db(0x4e); db(0x75); db(0x20); db(0x88); db(0x58); db(0x90); db(0x42); db(0xa8); db(0x00); db(0x04); db(0x21); db(0x48); db(0x00); db(0x08); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x20); db(0x22); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x70); db(0xff); db(0x4e); db(0xae); db(0xfe); db(0xb6); db(0x91); db(0xc8); db(0x24); db(0x00); db(0x6b); db(0x32); db(0x70); db(0x22); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x91); db(0xc8); db(0x24); db(0x40); db(0x4a); db(0x80); db(0x67); db(0x1e); db(0x15); db(0x7c); db(0x00); db(0x04); db(0x00); db(0x08); db(0x15); db(0x42); db(0x00); db(0x0f); db(0x93); db(0xc9); db(0x4e); db(0xae); db(0xfe); db(0xda); db(0x25); db(0x40); db(0x00); db(0x10); db(0x41); db(0xea); db(0x00); db(0x14); db(0x61); db(0x00); db(0xff); db(0xb0); db(0x20); db(0x4a); db(0x20); db(0x08); db(0x4c); db(0xdf); db(0x44); db(0x04); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x20); db(0x22); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x4a); db(0x80); db(0x67); db(0x24); db(0x24); db(0x40); db(0x24); db(0x01); db(0x66); db(0x02); db(0x74); db(0x30); db(0x20); db(0x02); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x20); db(0x40); db(0x11); db(0x7c); db(0x00); db(0x0a); db(0x00); db(0x08); db(0x31); db(0x42); db(0x00); db(0x12); db(0x21); db(0x4a); db(0x00); db(0x0e); db(0x4a); db(0x80); db(0x4c); db(0xdf); db(0x44); db(0x04); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x30); db(0x22); db(0x24); db(0x48); db(0x24); db(0x00); db(0x26); db(0x01); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x61); db(0x00); db(0xff); db(0x6a); db(0x22); db(0x03); db(0x61); db(0x00); db(0xff); db(0xb2); db(0x67); db(0x18); db(0x20); db(0x4a); db(0x22); db(0x40); db(0x24); db(0x40); db(0x20); db(0x02); db(0x72); db(0x00); db(0x4e); db(0xae); db(0xfe); db(0x44); db(0x22); db(0x00); db(0x70); db(0x00); db(0x4a); db(0x81); db(0x66); db(0x02); db(0x20); db(0x0a); db(0x4a); db(0x80); db(0x4c); db(0xdf); db(0x44); db(0x0c); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x38); db(0x32); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x28); db(0x00); db(0x24); db(0x08); db(0x26); db(0x09); db(0x20); db(0x3c); db(0x00); db(0x00); db(0x08); db(0x5c); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x4a); db(0x80); db(0x67); db(0x00); db(0x00); db(0x34); db(0x24); db(0x40); db(0x15); db(0x7c); db(0x00); db(0x01); db(0x00); db(0x08); db(0x15); db(0x44); db(0x00); db(0x09); db(0x25); db(0x42); db(0x00); db(0x0a); db(0x47); db(0xea); db(0x00); db(0x5c); db(0x25); db(0x4b); db(0x00); db(0x3a); db(0x47); db(0xeb); db(0x08); db(0x00); db(0x25); db(0x4b); db(0x00); db(0x3e); db(0x25); db(0x4b); db(0x00); db(0x36); db(0x22); db(0x4a); db(0x24); db(0x43); db(0x97); db(0xcb); db(0x24); db(0x09); db(0x4e); db(0xae); db(0xfe); db(0xe6); db(0x20); db(0x02); db(0x4c); db(0xdf); db(0x4c); db(0x1c); db(0x4e); db(0x75); db(0x41); db(0xfa); db(0x09); db(0xc0); db(0x43); db(0xfa); db(0x01); db(0x30); db(0x70); db(0x13); db(0x61); db(0x00); db(0xff); db(0x98); db(0x4e); db(0x75); db(0x22); db(0x6d); db(0x02); db(0x0c); db(0x33); db(0x7c); db(0x00); db(0x0a); db(0x00); db(0x1c); db(0x13); db(0x7c); db(0x00); db(0x01); db(0x00); db(0x1e); db(0x4e); db(0xae); db(0xfe); db(0x38); db(0x22); db(0x6d); db(0x02); db(0x0c); db(0x25); db(0x69); db(0x00); db(0x20); db(0x00); db(0x0e); db(0x25); db(0x69); db(0x00); db(0x24); db(0x00); db(0x12); db(0x22); db(0x6d); db(0x02); db(0x08); db(0x13); db(0x7c); db(0x00); db(0x01); db(0x00); db(0x1e); db(0x4e); db(0xae); db(0xfe); db(0x38); db(0x4e); db(0x75); db(0x42); db(0xaa); db(0x00); db(0x0e); db(0x42); db(0xaa); db(0x00); db(0x12); db(0x22); db(0x6d); db(0x02); db(0x08); db(0x13); db(0x7c); db(0x00); db(0x01); db(0x00); db(0x1e); db(0x4e); db(0xae); db(0xfe); db(0x38); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0xf8); db(0xfe); db(0x2a); db(0x48); db(0x95); db(0xca); db(0x97); db(0xcb); db(0x99); db(0xcc); db(0x78); db(0x00); db(0x2c); db(0x6d); db(0x00); db(0x18); db(0x20); db(0x6d); db(0x00); db(0x14); db(0x20); db(0x28); db(0x00); db(0x3c); db(0x67); db(0x5c); db(0x20); db(0x40); db(0x41); db(0xe8); db(0x00); db(0x2c); db(0x28); db(0x48); db(0x4e); db(0xae); db(0xfc); db(0xe8); db(0x72); db(0xff); db(0x74); db(0xff); db(0xb2); db(0x80); db(0x67); db(0x48); db(0x26); db(0x00); db(0x2c); db(0x6d); db(0x00); db(0x14); db(0x41); db(0xed); db(0x00); db(0xc0); db(0x70); db(0x66); db(0x4e); db(0xae); db(0xff); db(0x7c); db(0x41); db(0xed); db(0x00); db(0xc0); db(0x38); db(0x28); db(0x00); db(0x64); db(0x2c); db(0x6d); db(0x00); db(0x18); db(0x91); db(0xc8); db(0x43); db(0xed); db(0x00); db(0x38); db(0x70); db(0x00); db(0x30); db(0x3c); db(0x00); db(0x58); db(0x22); db(0x3c); db(0x80); db(0x00); db(0x10); db(0x00); db(0x24); db(0x03); db(0x4e); db(0xae); db(0xfd); db(0x0c); db(0x72); db(0xff); db(0x74); db(0xff); db(0x4a); db(0x80); db(0x6b); db(0x0c); db(0x45); db(0xed); db(0x00); db(0x38); db(0x22); db(0x2a); db(0x00); db(0x32); db(0x24); db(0x2a); db(0x00); db(0x36); db(0x20); db(0x2c); db(0x00); db(0x1c); db(0xb8); db(0x6d); db(0x00); db(0x2c); db(0x66); db(0x12); db(0xb0); db(0xad); db(0x00); db(0x28); db(0x66); db(0x0c); db(0xb2); db(0xad); db(0x00); db(0x20); db(0x66); db(0x06); db(0xb4); db(0xad); db(0x00); db(0x24); db(0x67); db(0x40); db(0x2b); db(0x40); db(0x00); db(0x28); db(0x2b); db(0x41); db(0x00); db(0x20); db(0x2b); db(0x42); db(0x00); db(0x24); db(0x3b); db(0x44); db(0x00); db(0x2c); db(0x91); db(0xc8); db(0x43); db(0xed); db(0x00); db(0x90); db(0x70); db(0x00); db(0x30); db(0x3c); db(0x00); db(0x58); db(0x22); db(0x3c); db(0x80); db(0x00); db(0x00); db(0x00); db(0x24); db(0x03); db(0x4e); db(0xae); db(0xfd); db(0x0c); db(0x4a); db(0x80); db(0x6b); db(0x04); db(0x47); db(0xed); db(0x00); db(0x90); db(0x34); db(0x2d); db(0x00); db(0x2c); db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x01); db(0x61); db(0x00); db(0x07); db(0xf8); db(0x4e); db(0x90); db(0x4c); db(0xdf); db(0x7f); db(0x1f); db(0x4e); db(0x75); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x3e); db(0x2e); db(0x00); db(0x14); db(0x70); db(0xff); db(0x4e); db(0xae); db(0xfe); db(0xb6); db(0x7c); db(0x00); db(0x01); db(0xc6); db(0x93); db(0xc9); db(0x4e); db(0xae); db(0xfe); db(0xda); db(0x28); db(0x40); db(0x70); db(0x14); db(0x22); db(0x4c); db(0x4e); db(0xae); db(0xfe); db(0xd4); db(0x70); db(0x00); db(0x30); db(0x3c); db(0x02); db(0x3c); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x2a); db(0x40); db(0x47); db(0xed); db(0x00); db(0x16); db(0x27); db(0x4e); db(0x00); db(0x10); db(0x27); db(0x4c); db(0x00); db(0x08); db(0x27); db(0x46); db(0x00); db(0x0c); db(0x70); db(0xff); db(0x37); db(0x40); db(0x00); db(0x00); db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x05); db(0x61); db(0x00); db(0x07); db(0x9c); db(0x20); db(0x0d); db(0x06); db(0x80); db(0x00); db(0x00); db(0x02); db(0x10); 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(0x08); db(0x1c); db(0x23); db(0x48); db(0x00); db(0x0a); db(0x41); db(0xfa); db(0x02); db(0xf4); db(0x23); db(0x48); db(0x00); db(0x12); db(0x23); db(0x4d); db(0x00); db(0x0e); db(0x70); db(0x05); db(0x4e); db(0xae); db(0xff); db(0x58); db(0x20); db(0x06); db(0x4e); db(0xae); db(0xfe); db(0xc2); db(0x70); db(0x00); db(0x53); db(0xab); db(0x00); db(0x1c); db(0x6a); db(0x06); db(0x70); db(0x0a); db(0x27); db(0x40); db(0x00); db(0x1c); db(0x4a); db(0xab); db(0x00); db(0x14); db(0x66); db(0x16); db(0x4a); db(0xab); db(0x00); db(0x1c); db(0x66); db(0xe0); db(0x43); db(0xfa); db(0x08); db(0x49); 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(0x4a); db(0xab); db(0x00); db(0x18); db(0x66); db(0x18); db(0x4a); db(0xab); db(0x00); db(0x1c); db(0x66); db(0xc4); db(0x43); db(0xfa); db(0x08); db(0x3f); 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(0xb4); db(0x4a); db(0xad); db(0x02); db(0x08); db(0x66); db(0x38); db(0x4a); db(0xab); db(0x00); db(0x1c); db(0x66); db(0xa6); db(0x4e); db(0xae); db(0xff); db(0x7c); db(0x41); db(0xee); db(0x01); db(0x5e); db(0x43); db(0xfa); db(0x07); db(0x10); 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(0x8c); db(0x41); db(0xfa); db(0x06); db(0xfe); db(0x70); db(0x00); db(0x72); db(0x00); db(0x61); db(0x00); db(0xfd); db(0x2e); db(0x2b); db(0x40); db(0x02); db(0x08); db(0x67); db(0x00); db(0x02); db(0x32); db(0x60); db(0x00); db(0xff); db(0x76); 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(0x68); db(0x4e); db(0xae); db(0xff); db(0x7c); db(0x41); db(0xee); db(0x01); db(0x5e); db(0x43); db(0xfa); db(0x06); db(0xdd); db(0x4e); db(0xae); db(0xfe); db(0xec); db(0x24); db(0x00); db(0x4e); db(0xae); db(0xff); db(0x76); db(0x4a); db(0x82); db(0x67); db(0x00); db(0xff); db(0x4c); db(0x41); db(0xfa); db(0x06); db(0xc9); db(0x70); db(0x00); db(0x72); db(0x00); db(0x61); db(0x00); db(0xfc); db(0xec); db(0x2b); db(0x40); db(0x02); db(0x0c); db(0x67); db(0x00); db(0x01); db(0xf0); db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x00); db(0x61); db(0x00); db(0x06); db(0x94); db(0x4e); db(0x90); db(0x60); db(0x00); db(0xff); db(0x28); db(0x0c); db(0x47); db(0x00); db(0x24); db(0x65); db(0x12); db(0x53); db(0xab); db(0x00); db(0x34); db(0x6a); db(0x0c); db(0x20); db(0x4b); db(0x61); db(0x00); db(0xfd); db(0xb4); db(0x70); db(0x32); db(0x27); db(0x40); db(0x00); db(0x34); db(0x22); db(0x6d); db(0x02); db(0x08); db(0x45); db(0xed); db(0x01); db(0x3c); db(0x33); db(0x7c); db(0x00); db(0x0b); db(0x00); db(0x1c); db(0x23); db(0x7c); db(0x00); db(0x00); db(0x00); db(0x16); db(0x00); db(0x24); db(0x23); db(0x4a); db(0x00); db(0x28); db(0x10); db(0x2d); db(0x02); db(0x10); db(0x0c); db(0x47); db(0x00); db(0x27); db(0x65); db(0x00); db(0x01); db(0x52); db(0x08); db(0x00); db(0x00); db(0x01); db(0x67); db(0x00); db(0x01); db(0x4a); db(0x41); db(0xed); db(0x01); db(0x68); db(0x25); db(0x48); db(0x00); db(0x0a); db(0x15); db(0x7c); db(0x00); db(0x13); db(0x00); db(0x04); db(0x15); db(0x7c); db(0x00); db(0x03); db(0x00); db(0x05); db(0x42); db(0x90); db(0x42); db(0xa8); db(0x00); db(0x04); db(0x42); db(0xa8); db(0x00); db(0x08); db(0x42); db(0x68); db(0x00); db(0x0c); db(0x42); db(0x6a); db(0x00); db(0x06); db(0x61); db(0x00); db(0x01); db(0x72); db(0x31); db(0x6d); db(0x02); db(0x1a); db(0x00); db(0x0e); db(0x42); db(0x68); db(0x00); db(0x10); db(0x31); db(0x6d); db(0x02); db(0x1c); db(0x00); db(0x12); db(0x42); db(0x68); db(0x00); db(0x14); db(0x31); db(0x6d); db(0x02); db(0x14); db(0x00); db(0x16); db(0x42); db(0x68); db(0x00); db(0x18); db(0x31); db(0x6d); db(0x02); db(0x16); db(0x00); db(0x1a); db(0x43); db(0xed); db(0x01); db(0x88); db(0x21); db(0x49); db(0x00); db(0x1c); db(0x22); db(0xfc); db(0x80); db(0x03); db(0xa0); db(0x06); db(0x30); db(0x2d); db(0x02); db(0x30); db(0x48); db(0xc0); db(0xe1); db(0x80); db(0x22); db(0xc0); db(0x22); db(0xfc); db(0x80); db(0x03); db(0xa0); db(0x07); db(0x22); db(0xed); db(0x02); db(0x32); db(0x70); db(0x00); db(0x30); db(0x2d); db(0x02); db(0x20); db(0x6b); db(0x08); db(0x22); db(0xfc); db(0x80); db(0x03); db(0xa0); db(0x09); db(0x22); db(0xc0); db(0x30); db(0x2d); db(0x02); db(0x22); db(0x6b); db(0x08); db(0x22); db(0xfc); db(0x80); db(0x03); db(0xa0); db(0x0a); db(0x22); db(0xc0); db(0x30); db(0x2d); db(0x02); db(0x18); db(0x6b); db(0x14); db(0x22); db(0xfc); db(0x80); db(0x03); db(0xa0); db(0x02); db(0x22); db(0xc0); db(0x30); db(0x2d); db(0x02); db(0x1e); db(0x22); db(0xfc); db(0x80); db(0x03); db(0xa0); db(0x01); db(0x22); db(0xc0); db(0x30); db(0x2d); db(0x02); db(0x24); db(0x6b); db(0x10); db(0x22); db(0xfc); db(0x80); db(0x03); db(0xa0); db(0x03); db(0x30); db(0x2d); db(0x02); db(0x2a); db(0x48); db(0xc0); db(0xe1); db(0x80); db(0x22); db(0xc0); db(0x30); db(0x2d); db(0x02); db(0x26); db(0x6b); db(0x10); db(0x22); db(0xfc); db(0x80); db(0x03); db(0xa0); db(0x04); db(0x30); db(0x2d); db(0x02); db(0x2c); db(0x48); db(0xc0); db(0xe1); db(0x80); db(0x22); db(0xc0); db(0x30); db(0x2d); db(0x02); db(0x28); db(0x6b); db(0x10); db(0x22); db(0xfc); db(0x80); db(0x03); db(0xa0); db(0x05); db(0x30); db(0x2d); db(0x02); db(0x2e); db(0x48); db(0xc0); db(0xe1); db(0x80); db(0x22); db(0xc0); db(0x70); db(0x00); db(0x30); db(0x2d); db(0x02); db(0x36); db(0x6b); db(0x08); db(0x22); db(0xfc); db(0x80); db(0x03); db(0xa0); db(0x08); db(0x22); db(0xc0); db(0x42); db(0x91); db(0x61); db(0x00); db(0xfc); db(0x68); db(0x36); db(0x3c); db(0x00); db(0x68); db(0x74); db(0x01); db(0x28); db(0x2d); db(0x02); db(0x32); db(0x20); db(0x04); db(0xc0); db(0x82); db(0x22); db(0x2b); db(0x00); db(0x04); db(0xc2); db(0x82); db(0xb2); db(0x80); db(0x67); db(0x22); db(0x42); db(0x92); db(0x35); db(0x7c); db(0x02); db(0x00); db(0x00); db(0x04); db(0x42); db(0xaa); db(0x00); db(0x0a); db(0x32); db(0x03); db(0x4a); db(0x00); db(0x66); db(0x04); db(0x08); db(0xc1); db(0x00); db(0x07); db(0x35); db(0x41); db(0x00); db(0x06); db(0x42); db(0x6a); db(0x00); db(0x08); db(0x61); db(0x00); db(0xfc); db(0x2e); db(0x52); db(0x43); db(0xd4); db(0x42); db(0x0c); db(0x42); db(0x00); db(0x08); db(0x66); db(0xc6); db(0x27); db(0x44); db(0x00); db(0x04); db(0x10); db(0x2d); db(0x02); db(0x10); db(0x08); db(0x00); db(0x00); db(0x00); db(0x67); db(0x00); db(0xfd); db(0x8e); db(0x42); db(0x92); db(0x35); db(0x7c); db(0x04); db(0x00); db(0x00); db(0x04); db(0x42); db(0x6a); db(0x00); db(0x06); db(0x61); db(0x00); db(0x00); db(0x38); db(0x20); db(0x6b); db(0x00); db(0x14); db(0x30); db(0x2d); db(0x02); db(0x38); db(0x32); db(0x28); db(0x00); db(0x30); db(0xd2); db(0x41); db(0x90); db(0x41); db(0x6a); db(0x02); db(0x70); db(0x00); db(0x35); db(0x40); db(0x00); db(0x0a); db(0x30); db(0x2d); db(0x02); db(0x3a); db(0x32); db(0x28); db(0x00); db(0x2e); db(0xd2); db(0x41); db(0x90); db(0x41); db(0x6a); db(0x02); db(0x70); db(0x00); db(0x35); db(0x40); db(0x00); db(0x0c); db(0x61); db(0x00); db(0xfb); db(0xa0); db(0x60); db(0x00); db(0xfd); db(0x4a); db(0x4e); db(0x75); db(0x22); db(0x2d); db(0x02); db(0x32); db(0x70); db(0x00); db(0x08); db(0x01); db(0x00); db(0x00); db(0x67); db(0x04); db(0x08); db(0xc0); db(0x00); db(0x0e); db(0x08); db(0x01); db(0x00); db(0x01); db(0x67); db(0x04); db(0x08); db(0xc0); db(0x00); db(0x0d); db(0x08); db(0x01); db(0x00); db(0x02); db(0x67); db(0x04); db(0x08); db(0xc0); db(0x00); db(0x0c); db(0x35); db(0x40); db(0x00); db(0x08); db(0x4e); db(0x75); db(0x4a); db(0xa9); db(0x02); db(0x08); db(0x67); db(0x14); db(0x4a); db(0xa9); db(0x02); db(0x0c); db(0x67); db(0x0e); db(0x30); db(0x29); db(0x02); db(0x12); db(0xb0); db(0x69); db(0x00); db(0x16); db(0x67); db(0x14); db(0x33); db(0x40); db(0x00); db(0x16); db(0x2c); db(0x69); db(0x00); db(0x26); db(0x20); db(0x29); db(0x00); db(0x22); db(0x22); db(0x69); db(0x00); db(0x1e); db(0x4e); db(0xae); db(0xfe); db(0xbc); db(0x53); db(0x69); db(0x00); db(0x46); db(0x6a); db(0x12); db(0x33); db(0x7c); db(0x00); db(0x32); db(0x00); db(0x46); db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x02); db(0x61); db(0x00); db(0x04); db(0x44); db(0x4e); db(0x90); 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(0x04); db(0x2a); 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(0x03); db(0xf8); db(0x20); db(0x0d); db(0x4e); db(0x90); db(0x41); db(0xfa); db(0x04); db(0x78); db(0x43); db(0xfa); db(0x01); db(0x12); db(0x70); db(0xf6); db(0x22); db(0x3c); db(0x00); db(0x00); db(0x27); db(0x10); db(0x61); db(0x00); db(0xee); db(0x14); 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(0x03); db(0xce); 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(0x04); db(0x06); db(0x22); db(0x08); db(0x24); db(0x3c); db(0x00); db(0x00); db(0x03); db(0xed); db(0x4e); db(0xae); db(0xff); db(0xe2); db(0x28); db(0x00); db(0x67); db(0x4c); db(0x45); db(0xed); db(0x00); db(0x68); db(0x42); db(0x92); db(0x34); db(0xaa); db(0x00); db(0x02); db(0x24); db(0x0a); db(0x54); db(0x82); db(0x76); db(0x02); db(0x22); db(0x04); db(0x4e); db(0xae); db(0xff); db(0xd6); db(0xb6); db(0x80); db(0x66); db(0x32); db(0x0c); db(0x92); db(0x50); db(0x4e); db(0x54); db(0x52); db(0x66); db(0xe4); db(0x24); db(0x0a); db(0x76); db(0x04); db(0x22); db(0x04); db(0x4e); db(0xae); db(0xff); db(0xd6); db(0x24); db(0x0a); db(0x76); db(0x20); db(0x22); db(0x04); db(0x4e); db(0xae); db(0xff); db(0xd6); db(0xb6); db(0x80); db(0x66); db(0x12); db(0x4a); db(0x6a); db(0x00); db(0x10); db(0x66); db(0xc4); db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x10); db(0x61); db(0x00); db(0x03); db(0x3e); 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(0x03); db(0x7e); 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(0x03); db(0x6e); 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(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(0x02); db(0xce); db(0x4e); db(0x90); db(0x4a); db(0x80); db(0x67); db(0x00); db(0xfe); db(0xfe); db(0x2a); db(0x40); db(0x2c); db(0x6d); db(0x00); db(0x14); db(0x93); db(0xc9); db(0x4e); db(0xae); db(0xfe); db(0xda); db(0x2b); db(0x40); db(0x00); db(0x08); db(0x43); db(0xfa); db(0x03); db(0xab); db(0x70); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x2b); db(0x40); db(0x00); db(0x18); db(0x67); db(0x00); db(0xfe); db(0xdc); db(0x2c); db(0x40); db(0x72); db(0x32); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x41); db(0xfa); db(0x02); db(0xd4); 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(0x02); db(0xbe); db(0x22); db(0x08); db(0x74); db(0xfe); db(0x4e); db(0xae); db(0xff); db(0xac); db(0x4a); db(0x80); db(0x67); db(0x00); db(0xfe); db(0xa6); db(0x22); db(0x00); db(0x4e); db(0xae); db(0xff); db(0xa6); db(0x2c); db(0x6d); db(0x00); db(0x14); db(0x61); db(0x00); db(0xf8); db(0x20); db(0x72); db(0x00); db(0x32); db(0x3c); db(0x00); db(0x34); db(0x61); db(0x00); db(0xf8); db(0x64); db(0x28); db(0x40); db(0x4a); db(0x80); db(0x67); db(0x00); db(0xfe); db(0x86); db(0x70); db(0x00); db(0x08); db(0xc0); db(0x00); db(0x0d); db(0x4e); db(0xae); db(0xfe); db(0xc2); db(0x72); db(0x00); db(0x20); db(0x2d); db(0x00); db(0x0c); db(0x41); db(0xfa); db(0x02); db(0x97); db(0x22); db(0x4c); db(0x4e); db(0xae); db(0xfe); db(0x44); db(0x4a); db(0x80); db(0x66); db(0xe2); db(0x20); db(0x6c); db(0x00); db(0x14); db(0x0c); db(0x68); db(0x00); db(0x25); db(0x00); db(0x14); db(0x64); db(0x0c); db(0x61); db(0x00); db(0xfe); db(0x4a); db(0x70); db(0x00); db(0x4e); db(0xae); db(0xfe); db(0xc2); db(0x60); db(0xf8); db(0x61); db(0x00); db(0xfe); db(0xe8); db(0x41); db(0xed); db(0x00); db(0x1c); db(0x29); db(0x48); db(0x00); db(0x28); db(0x70); db(0x01); db(0x29); db(0x40); db(0x00); db(0x24); db(0x39); db(0x7c); db(0x00); db(0x0c); db(0x00); db(0x1c); db(0x2b); db(0x4d); db(0x00); db(0x2c); db(0x41); db(0xfa); db(0x01); db(0x60); 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(0x01); db(0xe4); db(0x4e); db(0x90); db(0x4a); db(0xad); db(0x00); db(0x00); db(0x66); db(0x1c); db(0x70); db(0x00); db(0x74); db(0x00); db(0x14); db(0x2d); db(0x00); db(0x4c); db(0x05); db(0xc0); db(0x08); db(0xc0); db(0x00); db(0x0d); db(0x4e); db(0xae); db(0xfe); db(0xc2); db(0x05); db(0x00); db(0x67); db(0x06); db(0x61); db(0x00); db(0xfe); db(0x20); 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(0x01); db(0xa4); db(0x4e); db(0x90); db(0x4a); db(0x80); db(0x67); db(0x40); db(0x4a); db(0xad); db(0x00); db(0x04); db(0x67); db(0x3a); db(0x39); db(0x7c); db(0x00); db(0x03); db(0x00); db(0x1c); db(0x42); db(0x2c); db(0x00); db(0x1f); db(0x42); db(0xac); db(0x00); db(0x20); db(0x29); db(0x6d); db(0x00); db(0x00); db(0x00); db(0x24); db(0x29); db(0x6d); db(0x00); db(0x04); db(0x00); db(0x28); db(0x42); db(0xac); db(0x00); db(0x2c); db(0x42); db(0xac); db(0x00); db(0x30); db(0x22); db(0x4c); db(0x4e); db(0xae); db(0xfe); db(0x38); db(0x2b); db(0x6c); db(0x00); db(0x30); db(0x00); db(0x10); db(0x39); db(0x7c); db(0x00); db(0x04); db(0x00); db(0x1c); db(0x22); db(0x4c); db(0x4e); db(0xae); db(0xfe); db(0x38); db(0x20); db(0x2d); db(0x00); db(0x00); db(0x42); db(0xad); db(0x00); db(0x00); db(0x22); db(0x2d); db(0x00); db(0x04); db(0x67); db(0x00); db(0xff); db(0x74); db(0x22); db(0x41); db(0x4e); db(0xae); db(0xff); db(0x2e); db(0x60); db(0x00); db(0xff); db(0x6a); db(0x39); db(0x7c); db(0x00); db(0x02); db(0x00); db(0x1c); db(0x41); db(0xed); db(0x00); db(0x30); db(0x42); db(0x90); db(0x42); db(0xa8); db(0x00); db(0x04); db(0x42); db(0x2c); db(0x00); db(0x1f); db(0x42); db(0xac); db(0x00); db(0x2c); db(0x42); db(0xac); db(0x00); db(0x30); db(0x29); db(0x48); db(0x00); db(0x28); db(0x70); db(0x08); db(0x29); db(0x40); db(0x00); db(0x24); db(0x22); db(0x4c); db(0x4e); db(0xae); db(0xfe); db(0x38); db(0x0c); db(0xad); db(0x46); db(0x4f); db(0x52); db(0x4d); db(0x00); db(0x30); db(0x66); db(0x52); db(0x20); db(0x2d); db(0x00); db(0x34); db(0x67); db(0x4c); db(0x6b); db(0x4a); db(0x2b); db(0x6c); db(0x00); db(0x30); db(0x00); db(0x10); db(0x50); db(0x80); db(0x24); db(0x00); db(0x72); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x4a); db(0x80); db(0x67); db(0x36); db(0x24); db(0x40); db(0x20); db(0x4a); db(0x20); db(0xed); db(0x00); db(0x30); db(0x20); db(0xed); db(0x00); db(0x34); db(0x29); db(0x48); 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(0x00); db(0xca); db(0x20); db(0x2c); db(0x00); db(0x20); db(0x4e); db(0x90); db(0x22); db(0x4a); db(0x20); db(0x02); db(0x4e); db(0xae); db(0xff); db(0x2e); db(0x4a); db(0xac); db(0x00); db(0x20); db(0x67); db(0x00); db(0xfe); db(0xda); db(0x41); db(0xed); db(0x00); db(0x30); db(0x29); db(0x48); db(0x00); db(0x28); db(0x70); db(0x01); db(0x29); db(0x40); db(0x00); db(0x24); db(0x42); db(0xac); db(0x00); db(0x20); db(0x22); db(0x4c); db(0x4e); db(0xae); db(0xfe); db(0x38); db(0x60); db(0xde); db(0x41); db(0xe8); db(0xff); db(0xe4); db(0x20); db(0x29); db(0x00); db(0x08); db(0xb0); db(0xa8); db(0x00); db(0x10); db(0x67); db(0x1a); db(0x21); db(0x40); db(0x00); db(0x10); db(0x2f); db(0x0e); db(0x2c); db(0x68); db(0x00); db(0x14); db(0x22); db(0x68); db(0x00); db(0x08); db(0x70); db(0x00); 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(0x00); db(0x5e); 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(0x00); db(0x70); 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(0x00); db(0x26); 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(0x00); db(0x0a); db(0x4e); db(0x90); db(0x4c); db(0xdf); db(0x01); db(0x03); db(0x4e); db(0x75); db(0x41); db(0xfa); db(0xe8); db(0x30); 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(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(0x69); db(0x6c); db(0x65); db(0x73); db(0x79); db(0x73); db(0x74); db(0x65); db(0x6d); db(0x00); db(0x55); db(0x41); db(0x45); db(0x20); db(0x66); db(0x73); db(0x20); db(0x61); db(0x75); db(0x74); db(0x6f); db(0x6d); db(0x6f); db(0x75); db(0x6e); db(0x74); db(0x65); db(0x72); db(0x00); db(0x55); db(0x41); db(0x45); db(0x20); db(0x66); db(0x73); db(0x20); db(0x61); db(0x75); db(0x74); db(0x6f); db(0x6d); db(0x6f); db(0x75); db(0x6e); db(0x74); db(0x20); db(0x70); db(0x72); db(0x6f); db(0x63); db(0x65); db(0x73); db(0x73); db(0x00); db(0x64); db(0x6f); db(0x73); db(0x2e); db(0x6c); db(0x69); db(0x62); db(0x72); db(0x61); db(0x72); db(0x79); db(0x00); db(0x69); db(0x6e); db(0x74); db(0x75); db(0x69); db(0x74); db(0x69); db(0x6f); db(0x6e); db(0x2e); db(0x6c); db(0x69); db(0x62); db(0x72); db(0x61); db(0x72); db(0x79); db(0x00); db(0x67); db(0x72); db(0x61); db(0x70); db(0x68); db(0x69); db(0x63); db(0x73); db(0x2e); db(0x6c); db(0x69); db(0x62); db(0x72); db(0x61); db(0x72); db(0x79); db(0x00); db(0x65); db(0x78); db(0x70); db(0x61); db(0x6e); db(0x73); db(0x69); db(0x6f); db(0x6e); db(0x2e); db(0x6c); db(0x69); db(0x62); db(0x72); db(0x61); db(0x72); db(0x79); db(0x00); db(0x46); db(0x69); db(0x6c); db(0x65); db(0x53); db(0x79); db(0x73); db(0x74); db(0x65); db(0x6d); db(0x2e); db(0x72); db(0x65); db(0x73); db(0x6f); db(0x75); db(0x72); db(0x63); db(0x65); db(0x00); db(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(0x00); db(0x00); db(0x03); db(0xf2); fs-uae-2.2.3+dfsg/src/hardfile.cpp0000644000175000017500000015067412162366654017142 0ustar glaubitzglaubitz/* * UAE - The Un*x Amiga Emulator * * Hardfile emulation * * Copyright 1995 Bernd Schmidt * 2002 Toni Wilen (scsi emulation, 64-bit support) */ #include "sysconfig.h" #include "sysdeps.h" #include "threaddep/thread.h" #include "options.h" #include "uae/memory.h" #include "custom.h" #include "newcpu.h" #include "disk.h" #include "autoconf.h" #include "traps.h" #include "filesys.h" #include "execlib.h" #include "native2amiga.h" #include "gui.h" #include "uae.h" #include "scsi.h" #include "gayle.h" #include "execio.h" #include "zfile.h" #undef DEBUGME #define hf_log #define hf_log2 #define scsi_log #define hf_log3 //#define DEBUGME #ifdef DEBUGME #undef hf_log #define hf_log write_log #undef hf_log2 #define hf_log2 write_log #undef hf_log3 #define hf_log3 write_log #undef scsi_log #define scsi_log write_log #endif #define MAX_ASYNC_REQUESTS 50 #define ASYNC_REQUEST_NONE 0 #define ASYNC_REQUEST_TEMP 1 #define ASYNC_REQUEST_CHANGEINT 10 struct hardfileprivdata { volatile uaecptr d_request[MAX_ASYNC_REQUESTS]; volatile int d_request_type[MAX_ASYNC_REQUESTS]; volatile uae_u32 d_request_data[MAX_ASYNC_REQUESTS]; smp_comm_pipe requests; int thread_running; uae_sem_t sync_sem; uaecptr base; int changenum; uaecptr changeint; }; #define VHD_DYNAMIC 3 #define VHD_FIXED 2 STATIC_INLINE uae_u32 gl (uae_u8 *p) { return (p[0] << 24) | (p[1] << 16) | (p[2] << 8) | (p[3] << 0); } static uae_sem_t change_sem; static struct hardfileprivdata hardfpd[MAX_FILESYSTEM_UNITS]; static uae_u32 nscmd_cmd; static void wl (uae_u8 *p, int v) { p[0] = v >> 24; p[1] = v >> 16; p[2] = v >> 8; p[3] = v; } static void ww (uae_u8 *p, int v) { p[0] = v >> 8; p[1] = v; } static int rl (uae_u8 *p) { return (p[0] << 24) | (p[1] << 16) | (p[2] << 8) | (p[3]); } static void getchs2 (struct hardfiledata *hfd, int *cyl, int *cylsec, int *head, int *tracksec) { unsigned int total = (unsigned int)(hfd->virtsize / 1024); int heads; int sectors = 63; /* do we have RDB values? */ if (hfd->cylinders) { *cyl = hfd->cylinders; *tracksec = hfd->sectors; *head = hfd->heads; *cylsec = hfd->sectors * hfd->heads; return; } /* what about HDF settings? */ if (hfd->surfaces && hfd->secspertrack) { *head = hfd->surfaces; *tracksec = hfd->secspertrack; *cylsec = (*head) * (*tracksec); *cyl = (unsigned int)(hfd->virtsize / hfd->blocksize) / ((*tracksec) * (*head)); return; } /* no, lets guess something.. */ if (total <= 504 * 1024) heads = 16; else if (total <= 1008 * 1024) heads = 32; else if (total <= 2016 * 1024) heads = 64; else if (total <= 4032 * 1024) heads = 128; else heads = 255; *cyl = (unsigned int)(hfd->virtsize / hfd->blocksize) / (sectors * heads); *cylsec = sectors * heads; *tracksec = sectors; *head = heads; } static void getchsx (struct hardfiledata *hfd, int *cyl, int *cylsec, int *head, int *tracksec) { getchs2 (hfd, cyl, cylsec, head, tracksec); hf_log (_T("CHS: %08X-%08X %d %d %d %d %d\n"), (uae_u32)(hfd->virtsize >> 32),(uae_u32)hfd->virtsize, *cyl, *cylsec, *head, *tracksec); } static void getchsgeometry2 (uae_u64 size, int *pcyl, int *phead, int *psectorspertrack, int mode) { int sptt[4]; int i, spt, head, cyl; uae_u64 total = (unsigned int)(size / 512); if (mode == 1) { // old-style head=1, spt=32 always mode head = 1; spt = 32; cyl = total / (head * spt); } else { sptt[0] = 63; sptt[1] = 127; sptt[2] = 255; sptt[3] = -1; for (i = 0; sptt[i] >= 0; i++) { spt = sptt[i]; for (head = 4; head <= 16;head++) { cyl = total / (head * spt); if (size <= 512 * 1024 * 1024) { if (cyl <= 1023) break; } else { if (cyl < 16383) break; if (cyl < 32767 && head >= 5) break; if (cyl <= 65535) break; } } if (head <= 16) break; } } *pcyl = cyl; *phead = head; *psectorspertrack = spt; } void getchsgeometry (uae_u64 size, int *pcyl, int *phead, int *psectorspertrack) { getchsgeometry2 (size, pcyl, phead, psectorspertrack, 0); } void getchsgeometry_hdf (struct hardfiledata *hfd, uae_u64 size, int *pcyl, int *phead, int *psectorspertrack) { uae_u8 block[512]; int i; if (size <= 512 * 1024 * 1024) { *phead = 1; *psectorspertrack = 32; } memset (block, 0, sizeof block); if (hfd) { hdf_read (hfd, block, 0, 512); if (block[0] == 'D' && block[1] == 'O' && block[2] == 'S') { int mode; for (mode = 0; mode < 2; mode++) { uae_u32 rootblock; uae_u32 chk = 0; getchsgeometry2 (size, pcyl, phead, psectorspertrack, mode); rootblock = (2 + ((*pcyl) * (*phead) * (*psectorspertrack) - 1)) / 2; memset (block, 0, sizeof block); hdf_read (hfd, block, (uae_u64)rootblock * 512, 512); for (i = 0; i < 512; i += 4) chk += (block[i] << 24) | (block[i + 1] << 16) | (block[i + 2] << 8) | (block[i + 3] << 0); if (!chk && block[0] == 0 && block[1] == 0 && block[2] == 0 && block[3] == 2 && block[4] == 0 && block[5] == 0 && block[6] == 0 && block[7] == 0 && block[8] == 0 && block[9] == 0 && block[10] == 0 && block[11] == 0 && block[508] == 0 && block[509] == 0 && block[510] == 0 && block[511] == 1) { return; } } } } getchsgeometry2 (size, pcyl, phead, psectorspertrack, 2); } void getchspgeometry (uae_u64 total, int *pcyl, int *phead, int *psectorspertrack, bool idegeometry) { uae_u64 blocks = total / 512; if (blocks > 16515072) { /* >8G, CHS=16383/16/63 */ *pcyl = 16383; *phead = 16; *psectorspertrack = 63; return; } if (idegeometry) { *phead = 16; *psectorspertrack = 63; *pcyl = blocks / ((*psectorspertrack) * (*phead)); return; } getchsgeometry (total, pcyl, phead, psectorspertrack); } static void getchshd (struct hardfiledata *hfd, int *pcyl, int *phead, int *psectorspertrack) { getchspgeometry (hfd->virtsize, pcyl, phead, psectorspertrack, false); } static void pl (uae_u8 *p, int off, uae_u32 v) { p += off * 4; p[0] = v >> 24; p[1] = v >> 16; p[2] = v >> 8; p[3] = v >> 0; } static void rdb_crc (uae_u8 *p) { uae_u32 sum; int i, blocksize; sum =0; blocksize = rl (p + 1 * 4); for (i = 0; i < blocksize; i++) sum += rl (p + i * 4); sum = -sum; pl (p, 2, sum); } static void create_virtual_rdb (struct hardfiledata *hfd, uae_u32 dostype, int bootpri, const TCHAR *filesys) { uae_u8 *rdb, *part, *denv; int cyl = hfd->heads * hfd->secspertrack; int cyls = 262144 / (cyl * 512); int size = cyl * cyls * 512; rdb = xcalloc (uae_u8, size); hfd->virtual_rdb = rdb; hfd->virtual_size = size; part = rdb + 512; pl(rdb, 0, 0x5244534b); pl(rdb, 1, 64); pl(rdb, 2, 0); // chksum pl(rdb, 3, 0); // hostid pl(rdb, 4, 512); // blockbytes pl(rdb, 5, 0); // flags pl(rdb, 6, -1); // badblock pl(rdb, 7, 1); // part pl(rdb, 8, -1); // fs pl(rdb, 9, -1); // driveinit pl(rdb, 10, -1); // reserved pl(rdb, 11, -1); // reserved pl(rdb, 12, -1); // reserved pl(rdb, 13, -1); // reserved pl(rdb, 14, -1); // reserved pl(rdb, 15, -1); // reserved pl(rdb, 16, hfd->nrcyls); pl(rdb, 17, hfd->secspertrack); pl(rdb, 18, hfd->heads); pl(rdb, 19, 0); // interleave pl(rdb, 20, 0); // park pl(rdb, 21, -1); // res pl(rdb, 22, -1); // res pl(rdb, 23, -1); // res pl(rdb, 24, 0); // writeprecomp pl(rdb, 25, 0); // reducedwrite pl(rdb, 26, 0); // steprate pl(rdb, 27, -1); // res pl(rdb, 28, -1); // res pl(rdb, 29, -1); // res pl(rdb, 30, -1); // res pl(rdb, 31, -1); // res pl(rdb, 32, 0); // rdbblockslo pl(rdb, 33, cyl * cyls); // rdbblockshi pl(rdb, 34, cyls); // locyl pl(rdb, 35, hfd->nrcyls + cyls); // hicyl pl(rdb, 36, cyl); // cylblocks pl(rdb, 37, 0); // autopark pl(rdb, 38, 2); // highrdskblock pl(rdb, 39, -1); // res ua_copy ((char*)rdb + 40 * 4, -1, hfd->vendor_id); ua_copy ((char*)rdb + 42 * 4, -1, hfd->product_id); ua_copy ((char*)rdb + 46 * 4, -1, _T("UAE")); rdb_crc (rdb); pl(part, 0, 0x50415254); pl(part, 1, 64); pl(part, 2, 0); pl(part, 3, 0); pl(part, 4, -1); pl(part, 5, 1); // bootable pl(part, 6, -1); pl(part, 7, -1); pl(part, 8, 0); // devflags part[9 * 4] = _tcslen (hfd->device_name); ua_copy ((char*)part + 9 * 4 + 1, -1, hfd->device_name); denv = part + 128; pl(denv, 0, 80); pl(denv, 1, 512 / 4); pl(denv, 2, 0); // secorg pl(denv, 3, hfd->heads); pl(denv, 4, hfd->blocksize / 512); pl(denv, 5, hfd->secspertrack); pl(denv, 6, hfd->reservedblocks); pl(denv, 7, 0); // prealloc pl(denv, 8, 0); // interleave pl(denv, 9, cyls); // lowcyl pl(denv, 10, hfd->nrcyls + cyls - 1); pl(denv, 11, 50); pl(denv, 12, 0); pl(denv, 13, 0x00ffffff); pl(denv, 14, 0x7ffffffe); pl(denv, 15, bootpri); pl(denv, 16, dostype); rdb_crc (part); hfd->virtsize += size; } void hdf_hd_close (struct hd_hardfiledata *hfd) { if (!hfd) return; hdf_close (&hfd->hfd); xfree (hfd->path); } int hdf_hd_open (struct hd_hardfiledata *hfd, const TCHAR *path, int blocksize, int readonly, const TCHAR *devname, int cyls, int sectors, int surfaces, int reserved, int bootpri, const TCHAR *filesys, int pcyls, int pheads, int psecs) { memset (hfd, 0, sizeof (struct hd_hardfiledata)); hfd->bootpri = bootpri; hfd->hfd.blocksize = blocksize; hfd->hfd.readonly = readonly; if (!hdf_open (&hfd->hfd, path)) return 0; hfd->path = my_strdup(path); hfd->hfd.cylinders = cyls; hfd->hfd.heads = surfaces; hfd->hfd.reservedblocks = reserved; hfd->hfd.secspertrack = sectors; if (devname) _tcscpy (hfd->hfd.device_name, devname); if (pcyls && pheads && psecs) { hfd->cyls = pcyls; hfd->heads = pheads; hfd->secspertrack = psecs; } else if (cyls && surfaces && sectors) { hfd->cyls = cyls; hfd->heads = surfaces; hfd->secspertrack = sectors; } else { getchshd (&hfd->hfd, &hfd->cyls, &hfd->heads, &hfd->secspertrack); } hfd->cyls_def = hfd->cyls; hfd->secspertrack_def = hfd->secspertrack; hfd->heads_def = hfd->heads; if (hfd->hfd.heads && hfd->hfd.secspertrack) { uae_u8 buf[512] = { 0 }; hdf_read (&hfd->hfd, buf, 0, 512); if (buf[0] != 0 && memcmp (buf, _T("RDSK"), 4)) { hfd->hfd.nrcyls = (hfd->hfd.virtsize / blocksize) / (sectors * surfaces); create_virtual_rdb (&hfd->hfd, rl (buf), hfd->bootpri, filesys); while (hfd->hfd.nrcyls * surfaces * sectors > hfd->cyls_def * hfd->secspertrack_def * hfd->heads_def) { hfd->cyls_def++; } } } hfd->size = hfd->hfd.virtsize; return 1; } static uae_u32 vhd_checksum (uae_u8 *p, int offset) { int i; uae_u32 sum; sum = 0; for (i = 0; i < 512; i++) { if (offset >= 0 && i >= offset && i < offset + 4) continue; sum += p[i]; } return ~sum; } static int hdf_write2 (struct hardfiledata *hfd, void *buffer, uae_u64 offset, int len); static int hdf_read2 (struct hardfiledata *hfd, void *buffer, uae_u64 offset, int len); static void hdf_init_cache (struct hardfiledata *hfd) { } static void hdf_flush_cache (struct hardfiledata *hdf) { } static int hdf_cache_read (struct hardfiledata *hfd, void *buffer, uae_u64 offset, int len) { return hdf_read2 (hfd, buffer, offset, len); } static int hdf_cache_write (struct hardfiledata *hfd, void *buffer, uae_u64 offset, int len) { return hdf_write2 (hfd, buffer, offset, len); } int hdf_open (struct hardfiledata *hfd, const TCHAR *pname) { uae_u8 tmp[512], tmp2[512]; uae_u32 v; hfd->adide = 0; hfd->byteswap = 0; if (!hdf_open_target (hfd, pname)) return 0; if (hdf_read_target (hfd, tmp, 0, 512) != 512) goto nonvhd; v = gl (tmp + 8); // features if ((v & 3) != 2) goto nonvhd; v = gl (tmp + 8 + 4); // version if ((v >> 16) != 1) goto nonvhd; hfd->vhd_type = gl (tmp + 8 + 4 + 4 + 8 + 4 + 4 + 4 + 4 + 8 + 8 + 4); if (hfd->vhd_type != VHD_FIXED && hfd->vhd_type != VHD_DYNAMIC) goto nonvhd; v = gl (tmp + 8 + 4 + 4 + 8 + 4 + 4 + 4 + 4 + 8 + 8 + 4 + 4); if (v == 0) goto nonvhd; if (vhd_checksum (tmp, 8 + 4 + 4 + 8 + 4 + 4 + 4 + 4 + 8 + 8 + 4 + 4) != v) goto nonvhd; if (hdf_read_target (hfd, tmp2, hfd->physsize - sizeof tmp2, 512) != 512) goto end; if (memcmp (tmp, tmp2, sizeof tmp)) goto nonvhd; hfd->vhd_footerblock = hfd->physsize - 512; hfd->virtsize = (uae_u64)(gl (tmp + 8 + 4 + 4 + 8 + 4 + 4 +4 + 4 + 8)) << 32; hfd->virtsize |= gl (tmp + 8 + 4 + 4 + 8 + 4 + 4 +4 + 4 + 8 + 4); if (hfd->vhd_type == VHD_DYNAMIC) { uae_u32 size; hfd->vhd_bamoffset = gl (tmp + 8 + 4 + 4 + 4); if (hfd->vhd_bamoffset == 0 || hfd->vhd_bamoffset >= hfd->physsize) goto end; if (hdf_read_target (hfd, tmp, hfd->vhd_bamoffset, 512) != 512) goto end; v = gl (tmp + 8 + 8 + 8 + 4 + 4 + 4); if (vhd_checksum (tmp, 8 + 8 + 8 + 4 + 4 + 4) != v) goto end; v = gl (tmp + 8 + 8 + 8); if ((v >> 16) != 1) goto end; hfd->vhd_blocksize = gl (tmp + 8 + 8 + 8 + 4 + 4); hfd->vhd_bamoffset = gl (tmp + 8 + 8 + 4); hfd->vhd_bamsize = (((hfd->virtsize + hfd->vhd_blocksize - 1) / hfd->vhd_blocksize) * 4 + 511) & ~511; size = hfd->vhd_bamoffset + hfd->vhd_bamsize; hfd->vhd_header = xmalloc (uae_u8, size); if (hdf_read_target (hfd, hfd->vhd_header, 0, size) != size) goto end; hfd->vhd_sectormap = xmalloc (uae_u8, 512); hfd->vhd_sectormapblock = -1; hfd->vhd_bitmapsize = ((hfd->vhd_blocksize / (8 * 512)) + 511) & ~511; } write_log (_T("HDF is VHD %s image, virtual size=%dK\n"), hfd->vhd_type == 2 ? _T("fixed") : _T("dynamic"), hfd->virtsize / 1024); hdf_init_cache (hfd); return 1; nonvhd: hfd->vhd_type = 0; return 1; end: hdf_close_target (hfd); return 0; } void hdf_close (struct hardfiledata *hfd) { hdf_flush_cache (hfd); hdf_close_target (hfd); hfd->vhd_type = 0; xfree (hfd->vhd_header); hfd->vhd_header = NULL; xfree (hfd->vhd_sectormap); hfd->vhd_sectormap = NULL; } int hdf_dup (struct hardfiledata *dhfd, const struct hardfiledata *shfd) { return hdf_dup_target (dhfd, shfd); } extern int get_guid_target (uae_u8 *out); static uae_u64 vhd_read (struct hardfiledata *hfd, void *v, uae_u64 offset, uae_u64 len) { uae_u64 read; uae_u8 *dataptr = (uae_u8*)v; //write_log (_T("%08x %08x\n"), (uae_u32)offset, (uae_u32)len); read = 0; if (offset & 511) return read; if (len & 511) return read; while (len > 0) { uae_u32 bamoffset = (offset / hfd->vhd_blocksize) * 4 + hfd->vhd_bamoffset; uae_u32 sectoroffset = gl (hfd->vhd_header + bamoffset); if (sectoroffset == 0xffffffff) { memset (dataptr, 0, 512); read += 512; } else { int bitmapoffsetbits; int bitmapoffsetbytes; uae_u64 sectormapblock; bitmapoffsetbits = (offset / 512) % (hfd->vhd_blocksize / 512); bitmapoffsetbytes = bitmapoffsetbits / 8; sectormapblock = sectoroffset * (uae_u64)512 + (bitmapoffsetbytes & ~511); if (hfd->vhd_sectormapblock != sectormapblock) { // read sector bitmap //write_log (_T("BM %08x\n"), sectormapblock); if (hdf_read_target (hfd, hfd->vhd_sectormap, sectormapblock, 512) != 512) { write_log (_T("vhd_read: bitmap read error\n")); return read; } hfd->vhd_sectormapblock = sectormapblock; } // block allocated in bitmap? if (hfd->vhd_sectormap[bitmapoffsetbytes & 511] & (1 << (7 - (bitmapoffsetbits & 7)))) { // read data block uae_u64 block = sectoroffset * (uae_u64)512 + hfd->vhd_bitmapsize + bitmapoffsetbits * 512; //write_log (_T("DB %08x\n"), block); if (hdf_read_target (hfd, dataptr, block, 512) != 512) { write_log (_T("vhd_read: data read error\n")); return read; } } else { memset (dataptr, 0, 512); } read += 512; } len -= 512; dataptr += 512; offset += 512; } return read; } static int vhd_write_enlarge (struct hardfiledata *hfd, uae_u32 bamoffset) { uae_u8 *buf, *p; int len; uae_u32 block; int v; len = hfd->vhd_blocksize + hfd->vhd_bitmapsize + 512; buf = xcalloc (uae_u8, len); if (!hdf_resize_target (hfd, hfd->physsize + len - 512)) { write_log (_T("vhd_enlarge: failure\n")); return 0; } // add footer (same as 512 byte header) memcpy (buf + len - 512, hfd->vhd_header, 512); v = hdf_write_target (hfd, buf, hfd->vhd_footerblock, len); xfree (buf); if (v != len) { write_log (_T("vhd_enlarge: footer write error\n")); return 0; } // write new offset to BAM p = hfd->vhd_header + bamoffset; block = hfd->vhd_footerblock / 512; p[0] = block >> 24; p[1] = block >> 16; p[2] = block >> 8; p[3] = block >> 0; // write to disk if (hdf_write_target (hfd, hfd->vhd_header + hfd->vhd_bamoffset, hfd->vhd_bamoffset, hfd->vhd_bamsize) != hfd->vhd_bamsize) { write_log (_T("vhd_enlarge: bam write error\n")); return 0; } hfd->vhd_footerblock += len - 512; return 1; } static uae_u64 vhd_write (struct hardfiledata *hfd, void *v, uae_u64 offset, uae_u64 len) { uae_u64 written; uae_u8 *dataptr = (uae_u8*)v; //write_log (_T("%08x %08x\n"), (uae_u32)offset, (uae_u32)len); written = 0; if (offset & 511) return written; if (len & 511) return written; while (len > 0) { uae_u32 bamoffset = (offset / hfd->vhd_blocksize) * 4 + hfd->vhd_bamoffset; uae_u32 sectoroffset = gl (hfd->vhd_header + bamoffset); if (sectoroffset == 0xffffffff) { if (!vhd_write_enlarge (hfd, bamoffset)) return written; continue; } else { int bitmapoffsetbits; int bitmapoffsetbytes; bitmapoffsetbits = (offset / 512) % (hfd->vhd_blocksize / 512); bitmapoffsetbytes = bitmapoffsetbits / 8; uae_u64 sectormapblock = sectoroffset * (uae_u64)512 + (bitmapoffsetbytes & ~511); if (hfd->vhd_sectormapblock != sectormapblock) { // read sector bitmap if (hdf_read_target (hfd, hfd->vhd_sectormap, sectormapblock, 512) != 512) { write_log (_T("vhd_write: bitmap read error\n")); return written; } hfd->vhd_sectormapblock = sectormapblock; } // write data if (hdf_write_target (hfd, dataptr, sectoroffset * (uae_u64)512 + hfd->vhd_bitmapsize + bitmapoffsetbits * 512, 512) != 512) { write_log (_T("vhd_write: data write error\n")); return written; } // block already allocated in bitmap? if (!(hfd->vhd_sectormap[bitmapoffsetbytes & 511] & (1 << (7 - (bitmapoffsetbits & 7))))) { // no, we need to mark it allocated and write the modified bitmap back to the disk hfd->vhd_sectormap[bitmapoffsetbytes & 511] |= (1 << (7 - (bitmapoffsetbits & 7))); if (hdf_write_target (hfd, hfd->vhd_sectormap, sectormapblock, 512) != 512) { write_log (_T("vhd_write: bam write error\n")); return written; } } written += 512; } len -= 512; dataptr += 512; offset += 512; } return written; } int vhd_create (const TCHAR *name, uae_u64 size, uae_u32 dostype) { struct hardfiledata hfd; struct zfile *zf; uae_u8 *b; int cyl, cylsec, head, tracksec; uae_u32 crc, blocksize, batsize, batentrysize; int ret, i; time_t tm; if (size >= (uae_u64)10 * 1024 * 1024 * 1024) blocksize = 2 * 1024 * 1024; else blocksize = 512 * 1024; batsize = (size + blocksize - 1) / blocksize; batentrysize = batsize; batsize *= 4; batsize += 511; batsize &= ~511; ret = 0; b = NULL; zf = zfile_fopen (name, _T("wb"), 0); if (!zf) goto end; b = xcalloc (uae_u8, 512 + 1024 + batsize + 512); if (zfile_fwrite (b, 512 + 1024 + batsize + 512, 1, zf) != 1) goto end; memset (&hfd, 0, sizeof hfd); hfd.virtsize = hfd.physsize = size; hfd.blocksize = 512; strcpy ((char*)b, "conectix"); // cookie b[0x0b] = 2; // features b[0x0d] = 1; // version b[0x10 + 6] = 2; // data offset // time stamp tm = time (NULL) - 946684800; b[0x18] = tm >> 24; b[0x19] = tm >> 16; b[0x1a] = tm >> 8; b[0x1b] = tm >> 0; strcpy ((char*)b + 0x1c, "vpc "); // creator application b[0x21] = 5; // creator version strcpy ((char*)b + 0x24, "Wi2k"); // creator host os // original and current size b[0x28] = b[0x30] = size >> 56; b[0x29] = b[0x31] = size >> 48; b[0x2a] = b[0x32] = size >> 40; b[0x2b] = b[0x33] = size >> 32; b[0x2c] = b[0x34] = size >> 24; b[0x2d] = b[0x35] = size >> 16; b[0x2e] = b[0x36] = size >> 8; b[0x2f] = b[0x37] = size >> 0; getchs2 (&hfd, &cyl, &cylsec, &head, &tracksec); // cylinders b[0x38] = cyl >> 8; b[0x39] = cyl; // heads b[0x3a] = head; // sectors per track b[0x3b] = tracksec; // disk type b[0x3c + 3] = VHD_DYNAMIC; get_guid_target (b + 0x44); crc = vhd_checksum (b, -1); b[0x40] = crc >> 24; b[0x41] = crc >> 16; b[0x42] = crc >> 8; b[0x43] = crc >> 0; // write header zfile_fseek (zf, 0, SEEK_SET); zfile_fwrite (b, 512, 1, zf); // write footer zfile_fseek (zf, 512 + 1024 + batsize, SEEK_SET); zfile_fwrite (b, 512, 1, zf); // dynamic disk header memset (b, 0, 1024); // cookie strcpy ((char*)b, "cxsparse"); // data offset for (i = 0; i < 8; i++) b[0x08 + i] = 0xff; // table offset (bat) b[0x10 + 6] = 0x06; // version b[0x19] = 1; // max table entries b[0x1c] = batentrysize >> 24; b[0x1d] = batentrysize >> 16; b[0x1e] = batentrysize >> 8; b[0x1f] = batentrysize >> 0; b[0x20] = blocksize >> 24; b[0x21] = blocksize >> 16; b[0x22] = blocksize >> 8; b[0x23] = blocksize >> 0; crc = vhd_checksum (b, -1); b[0x24] = crc >> 24; b[0x25] = crc >> 16; b[0x26] = crc >> 8; b[0x27] = crc >> 0; // write dynamic header zfile_fseek (zf, 512, SEEK_SET); zfile_fwrite (b, 1024, 1, zf); // bat memset (b, 0, batsize); memset (b, 0xff, batentrysize * 4); zfile_fwrite (b, batsize, 1, zf); zfile_fclose (zf); zf = NULL; if (dostype) { uae_u8 bootblock[512] = { 0 }; bootblock[0] = dostype >> 24; bootblock[1] = dostype >> 16; bootblock[2] = dostype >> 8; bootblock[3] = dostype >> 0; if (hdf_open (&hfd, name)) { vhd_write (&hfd, bootblock, 0, 512); hdf_close (&hfd); } } ret = 1; end: xfree (b); zfile_fclose (zf); return ret; } static int hdf_read2 (struct hardfiledata *hfd, void *buffer, uae_u64 offset, int len) { if (hfd->vhd_type == VHD_DYNAMIC) return vhd_read (hfd, buffer, offset, len); else if (hfd->vhd_type == VHD_FIXED) return hdf_read_target (hfd, buffer, offset + 512, len); else return hdf_read_target (hfd, buffer, offset, len); } static int hdf_write2 (struct hardfiledata *hfd, void *buffer, uae_u64 offset, int len) { if (hfd->vhd_type == VHD_DYNAMIC) return vhd_write (hfd, buffer, offset, len); else if (hfd->vhd_type == VHD_FIXED) return hdf_write_target (hfd, buffer, offset + 512, len); else return hdf_write_target (hfd, buffer, offset, len); } static void adide_decode (void *v, int len) { int i; uae_u8 *buffer = (uae_u8*)v; for (i = 0; i < len; i += 2) { uae_u8 *b = buffer + i; uae_u16 w = (b[0] << 8) | (b[1] << 0); uae_u16 o = 0; if (w & 0x8000) o |= 0x0001; if (w & 0x0001) o |= 0x0002; if (w & 0x4000) o |= 0x0004; if (w & 0x0002) o |= 0x0008; if (w & 0x2000) o |= 0x0010; if (w & 0x0004) o |= 0x0020; if (w & 0x1000) o |= 0x0040; if (w & 0x0008) o |= 0x0080; if (w & 0x0800) o |= 0x0100; if (w & 0x0010) o |= 0x0200; if (w & 0x0400) o |= 0x0400; if (w & 0x0020) o |= 0x0800; if (w & 0x0200) o |= 0x1000; if (w & 0x0040) o |= 0x2000; if (w & 0x0100) o |= 0x4000; if (w & 0x0080) o |= 0x8000; b[0] = o >> 8; b[1] = o >> 0; } } static void adide_encode (void *v, int len) { int i; uae_u8 *buffer = (uae_u8*)v; for (i = 0; i < len; i += 2) { uae_u8 *b = buffer + i; uae_u16 w = (b[0] << 8) | (b[1] << 0); uae_u16 o = 0; if (w & 0x0001) o |= 0x8000; if (w & 0x0002) o |= 0x0001; if (w & 0x0004) o |= 0x4000; if (w & 0x0008) o |= 0x0002; if (w & 0x0010) o |= 0x2000; if (w & 0x0020) o |= 0x0004; if (w & 0x0040) o |= 0x1000; if (w & 0x0080) o |= 0x0008; if (w & 0x0100) o |= 0x0800; if (w & 0x0200) o |= 0x0010; if (w & 0x0400) o |= 0x0400; if (w & 0x0800) o |= 0x0020; if (w & 0x1000) o |= 0x0200; if (w & 0x2000) o |= 0x0040; if (w & 0x4000) o |= 0x0100; if (w & 0x8000) o |= 0x0080; b[0] = o >> 8; b[1] = o >> 0; } } static void hdf_byteswap (void *v, int len) { int i; uae_u8 *b = (uae_u8*)v; for (i = 0; i < len; i += 2) { uae_u8 tmp = b[i]; b[i] = b[i + 1]; b[i + 1] = tmp; } } int hdf_read_rdb (struct hardfiledata *hfd, void *buffer, uae_u64 offset, int len) { int v; v = hdf_read (hfd, buffer, offset, len); if (v > 0 && offset < 16 * 512 && !hfd->byteswap && !hfd->adide) { uae_u8 *buf = (uae_u8*)buffer; bool changed = false; if (buf[0] == 0x39 && buf[1] == 0x10 && buf[2] == 0xd3 && buf[3] == 0x12) { // AdIDE encoded "CPRM" hfd->adide = 1; changed = true; write_log (_T("HDF: adide scrambling detected\n")); } else if (!memcmp (buf, "DRKS", 4)) { hfd->byteswap = 1; changed = true; write_log (_T("HDF: byteswapped RDB detected\n")); } if (changed) v = hdf_read (hfd, buffer, offset, len); } return v; } int hdf_read (struct hardfiledata *hfd, void *buffer, uae_u64 offset, int len) { int v; if (!hfd->adide) { v = hdf_cache_read (hfd, buffer, offset, len); } else { offset += 512; v = hdf_cache_read (hfd, buffer, offset, len); adide_decode (buffer, len); } if (hfd->byteswap) hdf_byteswap (buffer, len); return v; } int hdf_write (struct hardfiledata *hfd, void *buffer, uae_u64 offset, int len) { int v; if (hfd->byteswap) hdf_byteswap (buffer, len); if (!hfd->adide) { v = hdf_cache_write (hfd, buffer, offset, len); } else { offset += 512; adide_encode (buffer, len); v = hdf_cache_write (hfd, buffer, offset, len); adide_decode (buffer, len); } if (hfd->byteswap) hdf_byteswap (buffer, len); return v; } static uae_u64 cmd_readx (struct hardfiledata *hfd, uae_u8 *dataptr, uae_u64 offset, uae_u64 len) { gui_flicker_led (LED_HD, hfd->unitnum, 1); hf_log3 (_T("cmd_read: %p %04x-%08x (%d) %08x (%d)\n"), dataptr, (uae_u32)(offset >> 32), (uae_u32)offset, (uae_u32)(offset / hfd->blocksize), (uae_u32)len, (uae_u32)(len / hfd->blocksize)); return hdf_read (hfd, dataptr, offset, len); } static uae_u64 cmd_read (struct hardfiledata *hfd, uaecptr dataptr, uae_u64 offset, uae_u64 len) { addrbank *bank_data = &get_mem_bank (dataptr); if (!len || !bank_data || !bank_data->check (dataptr, len)) return 0; return cmd_readx (hfd, bank_data->xlateaddr (dataptr), offset, len); } static uae_u64 cmd_writex (struct hardfiledata *hfd, uae_u8 *dataptr, uae_u64 offset, uae_u64 len) { gui_flicker_led (LED_HD, hfd->unitnum, 2); hf_log3 (_T("cmd_write: %p %04x-%08x (%d) %08x (%d)\n"), dataptr, (uae_u32)(offset >> 32), (uae_u32)offset, (uae_u32)(offset / hfd->blocksize), (uae_u32)len, (uae_u32)(len / hfd->blocksize)); return hdf_write (hfd, dataptr, offset, len); } static uae_u64 cmd_write (struct hardfiledata *hfd, uaecptr dataptr, uae_u64 offset, uae_u64 len) { addrbank *bank_data = &get_mem_bank (dataptr); if (!len || !bank_data || !bank_data->check (dataptr, len)) return 0; return cmd_writex (hfd, bank_data->xlateaddr (dataptr), offset, len); } static int checkbounds (struct hardfiledata *hfd, uae_u64 offset, uae_u64 len) { if (offset >= hfd->virtsize) return 0; if (offset + len > hfd->virtsize) return 0; return 1; } static int nodisk (struct hardfiledata *hfd) { if (hfd->drive_empty) return 1; return 0; } int scsi_emulate (struct hardfiledata *hfd, struct hd_hardfiledata *hdhfd, uae_u8 *cmdbuf, int scsi_cmd_len, uae_u8 *scsi_data, int *data_len, uae_u8 *r, int *reply_len, uae_u8 *s, int *sense_len) { uae_u64 len, offset; int lr = 0, ls = 0; int scsi_len = -1; int status = 0; int i; char *ss; *reply_len = *sense_len = 0; memset (r, 0, 256); memset (s, 0, 256); switch (cmdbuf[0]) { case 0x00: /* TEST UNIT READY */ if (nodisk (hfd)) goto nodisk; scsi_len = 0; break; case 0x08: /* READ (6) */ if (nodisk (hfd)) goto nodisk; offset = ((cmdbuf[1] & 31) << 16) | (cmdbuf[2] << 8) | cmdbuf[3]; offset *= hfd->blocksize; len = cmdbuf[4]; if (!len) len = 256; len *= hfd->blocksize; if (checkbounds(hfd, offset, len)) scsi_len = (uae_u32)cmd_readx (hfd, scsi_data, offset, len); break; case 0x0a: /* WRITE (6) */ if (nodisk (hfd)) goto nodisk; if (hfd->readonly || hfd->dangerous) goto readprot; offset = ((cmdbuf[1] & 31) << 16) | (cmdbuf[2] << 8) | cmdbuf[3]; offset *= hfd->blocksize; len = cmdbuf[4]; if (!len) len = 256; len *= hfd->blocksize; if (checkbounds(hfd, offset, len)) scsi_len = (uae_u32)cmd_writex (hfd, scsi_data, offset, len); break; case 0x12: /* INQUIRY */ if ((cmdbuf[1] & 1) || cmdbuf[2] != 0) goto err; len = cmdbuf[4]; if (cmdbuf[1] >> 5) goto err;//r[0] = 0x7f; /* no lun supported */ if (hfd->drive_empty) r[1] |= 0x80; // removable.. r[2] = 2; /* supports SCSI-2 */ r[3] = 2; /* response data format */ r[4] = 32; /* additional length */ r[7] = 0x20; /* 16 bit bus */ scsi_len = lr = len < 36 ? (uae_u32)len : 36; if (hdhfd) { r[2] = hdhfd->ansi_version; r[3] = hdhfd->ansi_version >= 2 ? 2 : 0; } ss = ua (hfd->vendor_id); i = 0; /* vendor id */ while (i < 8 && ss[i]) { r[8 + i] = ss[i]; i++; } while (i < 8) { r[8 + i] = 32; i++; } xfree (ss); ss = ua (hfd->product_id); i = 0; /* product id */ while (i < 16 && ss[i]) { r[16 + i] = ss[i]; i++; } while (i < 16) { r[16 + i] = 32; i++; } xfree (ss); ss = ua (hfd->product_rev); i = 0; /* product revision */ while (i < 4 && ss[i]) { r[32 + i] = ss[i]; i++; } while (i < 4) { r[32 + i] = 32; i++; } xfree (ss); break; case 0x1a: /* MODE SENSE(6) */ { uae_u8 *p; int pc = cmdbuf[2] >> 6; int pcode = cmdbuf[2] & 0x3f; int dbd = cmdbuf[1] & 8; int cyl, cylsec, head, tracksec; if (nodisk (hfd)) goto nodisk; if (hdhfd) { cyl = hdhfd->cyls; head = hdhfd->heads; tracksec = hdhfd->secspertrack; cylsec = 0; } else { getchsx (hfd, &cyl, &cylsec, &head, &tracksec); } //write_log (_T("MODE SENSE PC=%d CODE=%d DBD=%d\n"), pc, pcode, dbd); p = r; p[0] = 4 - 1; p[1] = 0; p[2] = 0; p[3] = 0; p += 4; if (!dbd) { uae_u32 blocks = (uae_u32)(hfd->virtsize / hfd->blocksize); p[-1] = 8; wl(p + 0, blocks); wl(p + 4, hfd->blocksize); p += 8; } if (pcode == 0) { p[0] = 0; p[1] = 0; p[2] = 0x20; p[3] = 0; r[0] += 4; } else if (pcode == 3) { p[0] = 3; p[1] = 24; p[3] = 1; p[10] = tracksec >> 8; p[11] = tracksec; p[12] = hfd->blocksize >> 8; p[13] = hfd->blocksize; p[15] = 1; // interleave p[20] = 0x80; r[0] += p[1]; } else if (pcode == 4) { p[0] = 4; wl(p + 1, cyl); p[1] = 24; p[5] = head; wl(p + 13, cyl); ww(p + 20, 5400); r[0] += p[1]; } else { goto err; } r[0] += r[3]; scsi_len = lr = r[0] + 1; break; } break; case 0x1d: /* SEND DIAGNOSTICS */ break; case 0x25: /* READ_CAPACITY */ { int pmi = cmdbuf[8] & 1; uae_u32 lba = (cmdbuf[2] << 24) | (cmdbuf[3] << 16) | (cmdbuf[4] << 8) | cmdbuf[5]; uae_u32 blocks; int cyl, cylsec, head, tracksec; if (nodisk (hfd)) goto nodisk; blocks = (uae_u32)(hfd->virtsize / hfd->blocksize - 1); if (hdhfd) { cyl = hdhfd->cyls; head = hdhfd->heads; tracksec = hdhfd->secspertrack; cylsec = 0; } else { getchsx (hfd, &cyl, &cylsec, &head, &tracksec); } if (pmi == 0 && lba != 0) goto errreq; if (pmi) { lba += tracksec * head; lba /= tracksec * head; lba *= tracksec * head; if (lba > blocks) lba = blocks; blocks = lba; } wl (r, blocks); wl (r + 4, hfd->blocksize); scsi_len = lr = 8; } break; case 0x28: /* READ (10) */ if (nodisk (hfd)) goto nodisk; offset = rl (cmdbuf + 2); offset *= hfd->blocksize; len = rl (cmdbuf + 7 - 2) & 0xffff; len *= hfd->blocksize; if (checkbounds (hfd, offset, len)) scsi_len = (uae_u32)cmd_readx (hfd, scsi_data, offset, len); break; case 0x2a: /* WRITE (10) */ if (nodisk (hfd)) goto nodisk; if (hfd->readonly || hfd->dangerous) goto readprot; offset = rl (cmdbuf + 2); offset *= hfd->blocksize; len = rl (cmdbuf + 7 - 2) & 0xffff; len *= hfd->blocksize; if (checkbounds (hfd, offset, len)) scsi_len = (uae_u32)cmd_writex (hfd, scsi_data, offset, len); break; #if 0 case 0x2f: /* VERIFY */ { int bytchk = cmdbuf[1] & 2; if (nodisk (hfd)) goto nodisk; offset = rl (cmdbuf + 2); offset *= hfd->blocksize; len = rl (cmdbuf + 7 - 2) & 0xffff; len *= hfd->blocksize; if (checkbounds (hfd, offset, len)) { uae_u8 *vb = xmalloc (hfd->blocksize); while (len > 0) { int len = cmd_readx (hfd, vb, offset, hfd->blocksize); if (bytchk) { if (memcmp (vb, scsi_data, hfd->blocksize)) goto miscompare; scsi_data += hfd->blocksize; } offset += hfd->blocksize; } xfree (vb); } } break; #endif case 0x35: /* SYNCRONIZE CACHE (10) */ if (nodisk (hfd)) goto nodisk; scsi_len = 0; break; case 0xa8: /* READ (12) */ if (nodisk (hfd)) goto nodisk; offset = rl (cmdbuf + 2); offset *= hfd->blocksize; len = rl (cmdbuf + 6); len *= hfd->blocksize; if (checkbounds(hfd, offset, len)) scsi_len = (uae_u32)cmd_readx (hfd, scsi_data, offset, len); break; case 0xaa: /* WRITE (12) */ if (nodisk (hfd)) goto nodisk; if (hfd->readonly || hfd->dangerous) goto readprot; offset = rl (cmdbuf + 2); offset *= hfd->blocksize; len = rl (cmdbuf + 6); len *= hfd->blocksize; if (checkbounds(hfd, offset, len)) scsi_len = (uae_u32)cmd_writex (hfd, scsi_data, offset, len); break; case 0x37: /* READ DEFECT DATA */ if (nodisk (hfd)) goto nodisk; status = 2; /* CHECK CONDITION */ s[0] = 0x70; s[2] = 0; /* NO SENSE */ s[12] = 0x1c; /* DEFECT LIST NOT FOUND */ ls = 12; break; readprot: status = 2; /* CHECK CONDITION */ s[0] = 0x70; s[2] = 7; /* DATA PROTECT */ s[12] = 0x27; /* WRITE PROTECTED */ ls = 12; break; nodisk: status = 2; /* CHECK CONDITION */ s[0] = 0x70; s[2] = 2; /* NOT READY */ s[12] = 0x3A; /* MEDIUM NOT PRESENT */ ls = 12; break; default: err: write_log (_T("UAEHF: unsupported scsi command 0x%02X\n"), cmdbuf[0]); errreq: lr = -1; status = 2; /* CHECK CONDITION */ s[0] = 0x70; s[2] = 5; /* ILLEGAL REQUEST */ s[12] = 0x24; /* ILLEGAL FIELD IN CDB */ ls = 12; break; miscompare: lr = -1; status = 2; /* CHECK CONDITION */ s[0] = 0x70; s[2] = 5; /* ILLEGAL REQUEST */ s[12] = 0x1d; /* MISCOMPARE DURING VERIFY OPERATION */ ls = 12; break; } *data_len = scsi_len; *reply_len = lr; *sense_len = ls; return status; } static int handle_scsi (uaecptr request, struct hardfiledata *hfd) { uae_u32 acmd = get_long (request + 40); uaecptr scsi_data = get_long (acmd + 0); int scsi_len = get_long (acmd + 4); uaecptr scsi_cmd = get_long (acmd + 12); uae_u16 scsi_cmd_len = get_word (acmd + 16); uae_u8 scsi_flags = get_byte (acmd + 20); uaecptr scsi_sense = get_long (acmd + 22); uae_u16 scsi_sense_len = get_word (acmd + 26); uae_u8 cmd = get_byte (scsi_cmd); uae_u8 cmdbuf[256]; int status, ret = 0, reply_len, sense_len; uae_u32 i; uae_u8 reply[256], sense[256]; uae_u8 *scsi_data_ptr = NULL; addrbank *bank_data = &get_mem_bank (scsi_data); if (bank_data && bank_data->check (scsi_data, scsi_len)) scsi_data_ptr = bank_data->xlateaddr (scsi_data); scsi_sense_len = (scsi_flags & 4) ? 4 : /* SCSIF_OLDAUTOSENSE */ (scsi_flags & 2) ? scsi_sense_len : /* SCSIF_AUTOSENSE */ 32; status = 0; memset (reply, 0, sizeof reply); reply_len = 0; sense_len = 0; scsi_log (_T("hdf scsiemu: cmd=%02X,%d flags=%02X sense=%p,%d data=%p,%d\n"), cmd, scsi_cmd_len, scsi_flags, scsi_sense, scsi_sense_len, scsi_data, scsi_len); for (i = 0; i < scsi_cmd_len; i++) { cmdbuf[i] = get_byte (scsi_cmd + i); scsi_log (_T("%02X%c"), get_byte (scsi_cmd + i), i < scsi_cmd_len - 1 ? '.' : ' '); } scsi_log (_T("\n")); status = scsi_emulate (hfd, NULL, cmdbuf, scsi_cmd_len, scsi_data_ptr, &scsi_len, reply, &reply_len, sense, &sense_len); put_word (acmd + 18, status != 0 ? 0 : scsi_cmd_len); /* fake scsi_CmdActual */ put_byte (acmd + 21, status); /* scsi_Status */ if (reply_len > 0) { scsi_log (_T("RD:")); i = 0; while (i < reply_len) { if (i < 24) scsi_log (_T("%02X%c"), reply[i], i < reply_len - 1 ? '.' : ' '); put_byte (scsi_data + i, reply[i]); i++; } scsi_log (_T("\n")); } i = 0; if (scsi_sense) { while (i < sense_len && i < scsi_sense_len) { put_byte (scsi_sense + i, sense[i]); i++; } } while (i < scsi_sense_len && scsi_sense) { put_byte (scsi_sense + i, 0); i++; } if (scsi_len < 0) { put_long (acmd + 8, 0); /* scsi_Actual */ ret = 20; } else { put_long (acmd + 8, scsi_len); /* scsi_Actual */ } return ret; } void hardfile_do_disk_change (struct uaedev_config_info *uci, int insert) { int fsid = uci->configoffset; int j; int newstate = insert ? 0 : 1; struct hardfiledata *hfd; if (uci->controller == HD_CONTROLLER_PCMCIA_SRAM) { gayle_modify_pcmcia_sram_unit (uci->rootdir, uci->readonly, insert); return; } else if (uci->controller == HD_CONTROLLER_PCMCIA_IDE) { gayle_modify_pcmcia_ide_unit (uci->rootdir, uci->readonly, insert); return; } hfd = get_hardfile_data (fsid); if (!hfd) return; uae_sem_wait (&change_sem); hardfpd[fsid].changenum++; write_log (_T("uaehf.device:%d media status=%d changenum=%d\n"), fsid, insert, hardfpd[fsid].changenum); hfd->drive_empty = newstate; j = 0; while (j < MAX_ASYNC_REQUESTS) { if (hardfpd[fsid].d_request_type[j] == ASYNC_REQUEST_CHANGEINT) { uae_Cause (hardfpd[fsid].d_request_data[j]); } j++; } if (hardfpd[fsid].changeint) uae_Cause (hardfpd[fsid].changeint); uae_sem_post (&change_sem); } static int add_async_request (struct hardfileprivdata *hfpd, uaecptr request, int type, uae_u32 data) { int i; i = 0; while (i < MAX_ASYNC_REQUESTS) { if (hfpd->d_request[i] == request) { hfpd->d_request_type[i] = type; hfpd->d_request_data[i] = data; hf_log (_T("old async request %p (%d) added\n"), request, type); return 0; } i++; } i = 0; while (i < MAX_ASYNC_REQUESTS) { if (hfpd->d_request[i] == 0) { hfpd->d_request[i] = request; hfpd->d_request_type[i] = type; hfpd->d_request_data[i] = data; hf_log (_T("async request %p (%d) added (total=%d)\n"), request, type, i); return 0; } i++; } hf_log (_T("async request overflow %p!\n"), request); return -1; } static int release_async_request (struct hardfileprivdata *hfpd, uaecptr request) { int i = 0; while (i < MAX_ASYNC_REQUESTS) { if (hfpd->d_request[i] == request) { int type = hfpd->d_request_type[i]; hfpd->d_request[i] = 0; hfpd->d_request_data[i] = 0; hfpd->d_request_type[i] = 0; hf_log (_T("async request %p removed\n"), request); return type; } i++; } hf_log (_T("tried to remove non-existing request %p\n"), request); return -1; } static void abort_async (struct hardfileprivdata *hfpd, uaecptr request, int errcode, int type) { int i; hf_log (_T("aborting async request %p\n"), request); i = 0; while (i < MAX_ASYNC_REQUESTS) { if (hfpd->d_request[i] == request && hfpd->d_request_type[i] == ASYNC_REQUEST_TEMP) { /* ASYNC_REQUEST_TEMP = request is processing */ sleep_millis (1); i = 0; continue; } i++; } i = release_async_request (hfpd, request); if (i >= 0) hf_log (_T("asyncronous request=%08X aborted, error=%d\n"), request, errcode); } static void *hardfile_thread (void *devs); static int start_thread (TrapContext *context, int unit) { struct hardfileprivdata *hfpd = &hardfpd[unit]; if (hfpd->thread_running) return 1; memset (hfpd, 0, sizeof (struct hardfileprivdata)); hfpd->base = m68k_areg (regs, 6); init_comm_pipe (&hfpd->requests, 100, 1); uae_sem_init (&hfpd->sync_sem, 0, 0); uae_start_thread (_T("hardfile"), hardfile_thread, hfpd, NULL); uae_sem_wait (&hfpd->sync_sem); return hfpd->thread_running; } static int mangleunit (int unit) { if (unit <= 99) return unit; if (unit == 100) return 8; if (unit == 110) return 9; return -1; } static uae_u32 REGPARAM2 hardfile_open (TrapContext *context) { uaecptr ioreq = m68k_areg (regs, 1); /* IOReq */ int unit = mangleunit (m68k_dreg (regs, 0)); struct hardfileprivdata *hfpd = &hardfpd[unit]; int err = IOERR_OPENFAIL; int size = get_word (ioreq + 0x12); /* boot device port size == 0!? KS 1.x size = 12??? */ if (size >= IOSTDREQ_SIZE || size == 0 || kickstart_version == 0xffff || kickstart_version < 39) { /* Check unit number */ if (unit >= 0) { struct hardfiledata *hfd = get_hardfile_data (unit); if (hfd && hfd->handle_valid && start_thread (context, unit)) { put_word (hfpd->base + 32, get_word (hfpd->base + 32) + 1); put_long (ioreq + 24, unit); /* io_Unit */ put_byte (ioreq + 31, 0); /* io_Error */ put_byte (ioreq + 8, 7); /* ln_type = NT_REPLYMSG */ hf_log (_T("hardfile_open, unit %d (%d), OK\n"), unit, m68k_dreg (regs, 0)); return 0; } } if (unit < 1000 || is_hardfile (unit) == FILESYS_VIRTUAL || is_hardfile (unit) == FILESYS_CD) err = 50; /* HFERR_NoBoard */ } else { err = IOERR_BADLENGTH; } hf_log (_T("hardfile_open, unit %d (%d), ERR=%d\n"), unit, m68k_dreg (regs, 0), err); put_long (ioreq + 20, (uae_u32)err); put_byte (ioreq + 31, (uae_u8)err); return (uae_u32)err; } static uae_u32 REGPARAM2 hardfile_close (TrapContext *context) { uaecptr request = m68k_areg (regs, 1); /* IOReq */ int unit = mangleunit (get_long (request + 24)); struct hardfileprivdata *hfpd = &hardfpd[unit]; if (!hfpd) return 0; put_word (hfpd->base + 32, get_word (hfpd->base + 32) - 1); if (get_word (hfpd->base + 32) == 0) write_comm_pipe_u32 (&hfpd->requests, 0, 1); return 0; } static uae_u32 REGPARAM2 hardfile_expunge (TrapContext *context) { return 0; /* Simply ignore this one... */ } static void outofbounds (int cmd, uae_u64 offset, uae_u64 len, uae_u64 max) { write_log (_T("UAEHF: cmd %d: out of bounds, %08X-%08X + %08X-%08X > %08X-%08X\n"), cmd, (uae_u32)(offset >> 32),(uae_u32)offset,(uae_u32)(len >> 32),(uae_u32)len, (uae_u32)(max >> 32),(uae_u32)max); } static void unaligned (int cmd, uae_u64 offset, uae_u64 len, int blocksize) { write_log (_T("UAEHF: cmd %d: unaligned access, %08X-%08X, %08X-%08X, %08X\n"), cmd, (uae_u32)(offset >> 32),(uae_u32)offset,(uae_u32)(len >> 32),(uae_u32)len, blocksize); } static uae_u32 hardfile_do_io (struct hardfiledata *hfd, struct hardfileprivdata *hfpd, uaecptr request) { uae_u32 dataptr, offset, actual = 0, cmd; uae_u64 offset64; int unit = get_long (request + 24); uae_u32 error = 0, len; int async = 0; int bmask = hfd->blocksize - 1; cmd = get_word (request + 28); /* io_Command */ dataptr = get_long (request + 40); switch (cmd) { case CMD_READ: if (nodisk (hfd)) goto no_disk; offset = get_long (request + 44); len = get_long (request + 36); /* io_Length */ if (offset & bmask) { unaligned (cmd, offset, len, hfd->blocksize); goto bad_command; } if (len & bmask) { unaligned (cmd, offset, len, hfd->blocksize); goto bad_len; } if (len + offset > hfd->virtsize) { outofbounds (cmd, offset, len, hfd->virtsize); goto bad_len; } actual = (uae_u32)cmd_read (hfd, dataptr, offset, len); break; case TD_READ64: case NSCMD_TD_READ64: if (nodisk (hfd)) goto no_disk; offset64 = get_long (request + 44) | ((uae_u64)get_long (request + 32) << 32); len = get_long (request + 36); /* io_Length */ if (offset64 & bmask) { unaligned (cmd, offset64, len, hfd->blocksize); goto bad_command; } if (len & bmask) { unaligned (cmd, offset64, len, hfd->blocksize); goto bad_len; } if (len + offset64 > hfd->virtsize) { outofbounds (cmd, offset64, len, hfd->virtsize); goto bad_len; } actual = (uae_u32)cmd_read (hfd, dataptr, offset64, len); break; case CMD_WRITE: case CMD_FORMAT: /* Format */ if (nodisk (hfd)) goto no_disk; if (hfd->readonly || hfd->dangerous) { error = 28; /* write protect */ } else { offset = get_long (request + 44); len = get_long (request + 36); /* io_Length */ if (offset & bmask) { unaligned (cmd, offset, len, hfd->blocksize); goto bad_command; } if (len & bmask) { unaligned (cmd, offset, len, hfd->blocksize); goto bad_len; } if (len + offset > hfd->virtsize) { outofbounds (cmd, offset, len, hfd->virtsize); goto bad_len; } actual = (uae_u32)cmd_write (hfd, dataptr, offset, len); } break; case TD_WRITE64: case TD_FORMAT64: case NSCMD_TD_WRITE64: case NSCMD_TD_FORMAT64: if (nodisk (hfd)) goto no_disk; if (hfd->readonly || hfd->dangerous) { error = 28; /* write protect */ } else { offset64 = get_long (request + 44) | ((uae_u64)get_long (request + 32) << 32); len = get_long (request + 36); /* io_Length */ if (offset64 & bmask) { unaligned (cmd, offset64, len, hfd->blocksize); goto bad_command; } if (len & bmask) { unaligned (cmd, offset64, len, hfd->blocksize); goto bad_len; } if (len + offset64 > hfd->virtsize) { outofbounds (cmd, offset64, len, hfd->virtsize); goto bad_len; } actual = (uae_u32)cmd_write (hfd, dataptr, offset64, len); } break; bad_command: error = IOERR_BADADDRESS; break; bad_len: error = IOERR_BADLENGTH; no_disk: error = 29; /* no disk */ break; case NSCMD_DEVICEQUERY: put_long (dataptr + 0, 0); put_long (dataptr + 4, 16); /* size */ put_word (dataptr + 8, NSDEVTYPE_TRACKDISK); put_word (dataptr + 10, 0); put_long (dataptr + 12, nscmd_cmd); actual = 16; break; case CMD_GETDRIVETYPE: actual = DRIVE_NEWSTYLE; break; case CMD_GETNUMTRACKS: { int cyl, cylsec, head, tracksec; getchsx (hfd, &cyl, &cylsec, &head, &tracksec); actual = cyl * head; break; } case CMD_GETGEOMETRY: { int cyl, cylsec, head, tracksec; uae_u64 size; getchsx (hfd, &cyl, &cylsec, &head, &tracksec); put_long (dataptr + 0, hfd->blocksize); size = hfd->virtsize / hfd->blocksize; if (size > 0x00ffffffff) size = 0xffffffff; put_long (dataptr + 4, (uae_u32)size); put_long (dataptr + 8, cyl); put_long (dataptr + 12, cylsec); put_long (dataptr + 16, head); put_long (dataptr + 20, tracksec); put_long (dataptr + 24, 0); /* bufmemtype */ put_byte (dataptr + 28, 0); /* type = DG_DIRECT_ACCESS */ put_byte (dataptr + 29, 0); /* flags */ } break; case CMD_PROTSTATUS: if (hfd->readonly || hfd->dangerous) actual = -1; else actual = 0; break; case CMD_CHANGESTATE: actual = hfd->drive_empty ? 1 :0; break; /* Some commands that just do nothing and return zero */ case CMD_UPDATE: case CMD_CLEAR: case CMD_MOTOR: case CMD_SEEK: case TD_SEEK64: case NSCMD_TD_SEEK64: break; case CMD_REMOVE: hfpd->changeint = get_long (request + 40); break; case CMD_CHANGENUM: actual = hfpd->changenum; break; case CMD_ADDCHANGEINT: error = add_async_request (hfpd, request, ASYNC_REQUEST_CHANGEINT, get_long (request + 40)); if (!error) async = 1; break; case CMD_REMCHANGEINT: release_async_request (hfpd, request); break; case HD_SCSICMD: /* SCSI */ if (hfd->nrcyls == 0) { error = handle_scsi (request, hfd); } else { /* we don't want users trashing their "partition" hardfiles with hdtoolbox */ error = IOERR_NOCMD; write_log (_T("UAEHF: HD_SCSICMD tried on regular HDF, unit %d\n"), unit); } break; default: /* Command not understood. */ error = IOERR_NOCMD; break; } put_long (request + 32, actual); put_byte (request + 31, error); hf_log2 (_T("hf: unit=%d, request=%p, cmd=%d offset=%u len=%d, actual=%d error%=%d\n"), unit, request, get_word (request + 28), get_long (request + 44), get_long (request + 36), actual, error); return async; } static uae_u32 REGPARAM2 hardfile_abortio (TrapContext *context) { uae_u32 request = m68k_areg (regs, 1); int unit = mangleunit (get_long (request + 24)); struct hardfiledata *hfd = get_hardfile_data (unit); struct hardfileprivdata *hfpd = &hardfpd[unit]; hf_log2 (_T("uaehf.device abortio ")); start_thread (context, unit); if (!hfd || !hfpd || !hfpd->thread_running) { put_byte (request + 31, 32); hf_log2 (_T("error\n")); return get_byte (request + 31); } put_byte (request + 31, -2); hf_log2 (_T("unit=%d, request=%08X\n"), unit, request); abort_async (hfpd, request, -2, 0); return 0; } static int hardfile_can_quick (uae_u32 command) { switch (command) { case CMD_REMCHANGEINT: return -1; case CMD_RESET: case CMD_STOP: case CMD_START: case CMD_CHANGESTATE: case CMD_PROTSTATUS: case CMD_MOTOR: case CMD_GETDRIVETYPE: case CMD_GETGEOMETRY: case CMD_GETNUMTRACKS: case NSCMD_DEVICEQUERY: return 1; } return 0; } static int hardfile_canquick (struct hardfiledata *hfd, uaecptr request) { uae_u32 command = get_word (request + 28); return hardfile_can_quick (command); } static uae_u32 REGPARAM2 hardfile_beginio (TrapContext *context) { uae_u32 request = m68k_areg (regs, 1); uae_u8 flags = get_byte (request + 30); int cmd = get_word (request + 28); int unit = mangleunit (get_long (request + 24)); struct hardfiledata *hfd = get_hardfile_data (unit); struct hardfileprivdata *hfpd = &hardfpd[unit]; int canquick; put_byte (request + 8, NT_MESSAGE); start_thread (context, unit); if (!hfd || !hfpd || !hfpd->thread_running) { put_byte (request + 31, 32); return get_byte (request + 31); } put_byte (request + 31, 0); canquick = hardfile_canquick (hfd, request); if (((flags & 1) && canquick) || (canquick < 0)) { hf_log (_T("hf quickio unit=%d request=%p cmd=%d\n"), unit, request, cmd); if (hardfile_do_io (hfd, hfpd, request)) hf_log2 (_T("uaehf.device cmd %d bug with IO_QUICK\n"), cmd); if (!(flags & 1)) uae_ReplyMsg (request); return get_byte (request + 31); } else { hf_log2 (_T("hf asyncio unit=%d request=%p cmd=%d\n"), unit, request, cmd); add_async_request (hfpd, request, ASYNC_REQUEST_TEMP, 0); put_byte (request + 30, get_byte (request + 30) & ~1); write_comm_pipe_u32 (&hfpd->requests, request, 1); return 0; } } static void *hardfile_thread (void *devs) { struct hardfileprivdata *hfpd = (struct hardfileprivdata*)devs; uae_set_thread_priority (NULL, 1); hfpd->thread_running = 1; uae_sem_post (&hfpd->sync_sem); for (;;) { uaecptr request = (uaecptr)read_comm_pipe_u32_blocking (&hfpd->requests); uae_sem_wait (&change_sem); if (!request) { hfpd->thread_running = 0; uae_sem_post (&hfpd->sync_sem); uae_sem_post (&change_sem); return 0; } else if (hardfile_do_io (get_hardfile_data (hfpd - &hardfpd[0]), hfpd, request) == 0) { put_byte (request + 30, get_byte (request + 30) & ~1); release_async_request (hfpd, request); uae_ReplyMsg (request); } else { hf_log2 (_T("async request %08X\n"), request); } uae_sem_post (&change_sem); } } void hardfile_reset (void) { int i, j; struct hardfileprivdata *hfpd; for (i = 0; i < MAX_FILESYSTEM_UNITS; i++) { hfpd = &hardfpd[i]; if (hfpd->base && valid_address (hfpd->base, 36) && get_word (hfpd->base + 32) > 0) { for (j = 0; j < MAX_ASYNC_REQUESTS; j++) { uaecptr request; if ((request = hfpd->d_request[i])) abort_async (hfpd, request, 0, 0); } } memset (hfpd, 0, sizeof (struct hardfileprivdata)); } } void hardfile_install (void) { uae_u32 functable, datatable; uae_u32 initcode, openfunc, closefunc, expungefunc; uae_u32 beginiofunc, abortiofunc; uae_sem_init (&change_sem, 0, 1); ROM_hardfile_resname = ds (_T("uaehf.device")); ROM_hardfile_resid = ds (_T("UAE hardfile.device 0.2")); nscmd_cmd = here (); dw (NSCMD_DEVICEQUERY); dw (CMD_RESET); dw (CMD_READ); dw (CMD_WRITE); dw (CMD_UPDATE); dw (CMD_CLEAR); dw (CMD_START); dw (CMD_STOP); dw (CMD_FLUSH); dw (CMD_MOTOR); dw (CMD_SEEK); dw (CMD_FORMAT); dw (CMD_REMOVE); dw (CMD_CHANGENUM); dw (CMD_CHANGESTATE); dw (CMD_PROTSTATUS); dw (CMD_GETDRIVETYPE); dw (CMD_GETGEOMETRY); dw (CMD_ADDCHANGEINT); dw (CMD_REMCHANGEINT); dw (HD_SCSICMD); dw (NSCMD_TD_READ64); dw (NSCMD_TD_WRITE64); dw (NSCMD_TD_SEEK64); dw (NSCMD_TD_FORMAT64); dw (0); /* initcode */ #if 0 initcode = here (); calltrap (deftrap (hardfile_init)); dw (RTS); #else initcode = filesys_initcode; #endif /* Open */ openfunc = here (); calltrap (deftrap (hardfile_open)); dw (RTS); /* Close */ closefunc = here (); calltrap (deftrap (hardfile_close)); dw (RTS); /* Expunge */ expungefunc = here (); calltrap (deftrap (hardfile_expunge)); dw (RTS); /* BeginIO */ beginiofunc = here (); calltrap (deftrap (hardfile_beginio)); dw (RTS); /* AbortIO */ abortiofunc = here (); calltrap (deftrap (hardfile_abortio)); dw (RTS); /* FuncTable */ functable = here (); dl (openfunc); /* Open */ dl (closefunc); /* Close */ dl (expungefunc); /* Expunge */ dl (EXPANSION_nullfunc); /* Null */ dl (beginiofunc); /* BeginIO */ dl (abortiofunc); /* AbortIO */ dl (0xFFFFFFFFul); /* end of table */ /* DataTable */ datatable = here (); dw (0xE000); /* INITBYTE */ dw (0x0008); /* LN_TYPE */ dw (0x0300); /* NT_DEVICE */ dw (0xC000); /* INITLONG */ dw (0x000A); /* LN_NAME */ dl (ROM_hardfile_resname); dw (0xE000); /* INITBYTE */ dw (0x000E); /* LIB_FLAGS */ dw (0x0600); /* LIBF_SUMUSED | LIBF_CHANGED */ dw (0xD000); /* INITWORD */ dw (0x0014); /* LIB_VERSION */ dw (0x0004); /* 0.4 */ dw (0xD000); dw (0x0016); /* LIB_REVISION */ dw (0x0000); dw (0xC000); dw (0x0018); /* LIB_IDSTRING */ dl (ROM_hardfile_resid); dw (0x0000); /* end of table */ ROM_hardfile_init = here (); dl (0x00000100); /* ??? */ dl (functable); dl (datatable); dl (initcode); } fs-uae-2.2.3+dfsg/src/gtkui.cpp0000644000175000017500000015714312162366655016506 0ustar glaubitzglaubitz/* * UAE - the Un*x Amiga Emulator * * Yet Another User Interface for the X11 version * * Copyright 1997, 1998 Bernd Schmidt * Copyright 1998 Michael Krause * * The Tk GUI doesn't work. * The X Forms Library isn't available as source, and there aren't any * binaries compiled against glibc * * So let's try this... */ #include "sysconfig.h" #include "sysdeps.h" #include "config.h" #include "options.h" #include "uae.h" #include "uae/memory.h" #include "custom.h" #include "gui.h" #include "newcpu.h" #include "autoconf.h" #include "threaddep/thread.h" #include "sounddep/sound.h" #include "savestate.h" #include "compemu.h" #include #include /* One of the 1.1.6 "features" is a gratuitous name change */ #ifndef HAVE_GTK_FEATURES_1_1_6 #define gtk_container_set_border_width gtk_container_border_width #endif /* Likewise for 1.1.8. */ #ifndef HAVE_GTK_FEATURES_1_1_8 #define gtk_label_set_text gtk_label_set #endif /* This is beginning to suck... */ #ifndef HAVE_GTK_FEATURES_1_1_13 #define gtk_toggle_button_set_active gtk_toggle_button_set_state #endif static int gui_active; static GtkWidget *gui_window; static GtkWidget *pause_uae_widget, *snap_save_widget, *snap_load_widget; static GtkWidget *chipsize_widget[5]; static GtkWidget *bogosize_widget[4]; static GtkWidget *fastsize_widget[5]; static GtkWidget *z3size_widget[10]; static GtkWidget *p96size_widget[7]; static GtkWidget *rom_text_widget, *key_text_widget; static GtkWidget *rom_change_widget, *key_change_widget; static GtkWidget *disk_insert_widget[4], *disk_eject_widget[4], *disk_text_widget[4]; static char *new_disk_string[4]; static GtkAdjustment *cpuspeed_adj; static GtkWidget *cpuspeed_widgets[4], *cpuspeed_scale; static GtkWidget *cpu_widget[5], *a24m_widget, *ccpu_widget; static GtkWidget *sound_widget[4], *sound_bits_widget[2], *sound_freq_widget[3], *sound_ch_widget[3]; static GtkWidget *coll_widget[4], *cslevel_widget[4]; static GtkWidget *fcop_widget; static GtkAdjustment *framerate_adj; static GtkWidget *bimm_widget, *b32_widget, *afscr_widget, *pfscr_widget; static GtkWidget *compbyte_widget[4], *compword_widget[4], *complong_widget[4]; static GtkWidget *compaddr_widget[4], *compnf_widget[2], *comp_midopt_widget[2]; static GtkWidget *comp_lowopt_widget[2], *compfpu_widget[2], *comp_hardflush_widget[2]; static GtkWidget *comp_constjump_widget[2]; static GtkAdjustment *cachesize_adj; static GtkWidget *joy_widget[2][6]; static GtkWidget *led_widgets[5]; static GdkColor led_on[5], led_off[5]; static unsigned int prevledstate; static GtkWidget *hdlist_widget; static int selected_hd_row; static GtkWidget *hdchange_button, *hddel_button; static GtkWidget *volname_entry, *path_entry; static GtkWidget *dirdlg; static char dirdlg_volname[256], dirdlg_path[256]; static smp_comm_pipe to_gui_pipe, from_gui_pipe; static uae_sem_t gui_sem, gui_init_sem, gui_quit_sem; /* gui_sem protects the DFx fields */ static volatile int quit_gui = 0, quitted_gui = 0; static void save_config (void) { FILE *f; char tmp[257]; /* Backup the options file. */ strcpy (tmp, optionsfile); strcat (tmp, "~"); rename (optionsfile, tmp); f = fopen (optionsfile, "w"); if (f == NULL) { write_log ("Error saving options file!\n"); return; } save_options (f, &currprefs); fclose (f); } static int nr_for_led (GtkWidget *led) { int i; i = 0; while (led_widgets[i] != led) i++; return i; } static void enable_disk_buttons (int enable) { int i; for (i = 0; i < 4; i++) { gtk_widget_set_sensitive (disk_insert_widget[i], enable); gtk_widget_set_sensitive (disk_eject_widget[i], enable); } } static void enable_snap_buttons (int enable) { gtk_widget_set_sensitive (snap_save_widget, enable); gtk_widget_set_sensitive (snap_load_widget, enable); } static void set_cpu_state (void) { int i; gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (a24m_widget), changed_prefs.address_space_24 != 0); gtk_widget_set_sensitive (a24m_widget, changed_prefs.cpu_level > 1 && changed_prefs.cpu_level < 4); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ccpu_widget), changed_prefs.cpu_compatible != 0); gtk_widget_set_sensitive (ccpu_widget, changed_prefs.cpu_level == 0); gtk_widget_set_sensitive (cpuspeed_scale, changed_prefs.m68k_speed > 0); for (i = 0; i < 10; i++) gtk_widget_set_sensitive (z3size_widget[i], changed_prefs.cpu_level >= 2 && ! changed_prefs.address_space_24); } static void set_cpu_widget (void) { int nr = changed_prefs.cpu_level; gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (cpu_widget[nr]), TRUE); nr = currprefs.m68k_speed + 1 < 3 ? currprefs.m68k_speed + 1 : 2; gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (cpuspeed_widgets[nr]), TRUE); } static void set_gfx_state (void) { gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (bimm_widget), currprefs.immediate_blits != 0); #if 0 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (b32_widget), currprefs.blits_32bit_enabled != 0); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (afscr_widget), currprefs.gfx_afullscreen != 0); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (pfscr_widget), currprefs.gfx_pfullscreen != 0); #endif } static void set_chipset_state (void) { int t0 = 0; gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (coll_widget[currprefs.collision_level]), TRUE); if (currprefs.chipset_mask & CSMASK_AGA) t0 = 3; else if (currprefs.chipset_mask & CSMASK_ECS_DENISE) t0 = 2; else if (currprefs.chipset_mask & CSMASK_ECS_AGNUS) t0 = 1; gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (cslevel_widget[t0]), TRUE); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (fcop_widget), currprefs.fast_copper != 0); } static void set_sound_state (void) { int stereo = currprefs.stereo + currprefs.mixed_stereo; gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sound_widget[currprefs.produce_sound]), 1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sound_ch_widget[stereo]), 1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sound_bits_widget[currprefs.sound_bits == 16]), 1); } static void set_mem_state (void) { int t, t2; t = 0; t2 = currprefs.chipmem_size; while (t < 4 && t2 > 0x80000) t++, t2 >>= 1; gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (chipsize_widget[t]), 1); t = 0; t2 = currprefs.bogomem_size; while (t < 3 && t2 >= 0x80000) t++, t2 >>= 1; gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (bogosize_widget[t]), 1); t = 0; t2 = currprefs.fastmem_size; while (t < 4 && t2 >= 0x100000) t++, t2 >>= 1; gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (fastsize_widget[t]), 1); t = 0; t2 = currprefs.z3fastmem_size; while (t < 9 && t2 >= 0x100000) t++, t2 >>= 1; gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (z3size_widget[t]), 1); t = 0; t2 = currprefs.gfxmem_size; while (t < 6 && t2 >= 0x100000) t++, t2 >>= 1; gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (p96size_widget[t]), 1); gtk_label_set_text (GTK_LABEL (rom_text_widget), currprefs.romfile); gtk_label_set_text (GTK_LABEL (key_text_widget), currprefs.keyfile); } static void set_comp_state (void) { gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (compbyte_widget[currprefs.comptrustbyte]), 1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (compword_widget[currprefs.comptrustword]), 1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (complong_widget[currprefs.comptrustlong]), 1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (compaddr_widget[currprefs.comptrustnaddr]), 1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (compnf_widget[currprefs.compnf]), 1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (comp_hardflush_widget[currprefs.comp_hardflush]), 1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (comp_constjump_widget[currprefs.comp_constjump]), 1); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (compfpu_widget[currprefs.compfpu]), 1); #if USE_OPTIMIZER gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (comp_midopt_widget[currprefs.comp_midopt]), 1); #endif #if USE_LOW_OPTIMIZER gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (comp_lowopt_widget[currprefs.comp_lowopt]), 1); #endif } static void set_joy_state (void) { int j0t = changed_prefs.jport0; int j1t = changed_prefs.jport1; int i; if (j0t == j1t) { /* Can't happen */ j0t++; j0t %= 6; } for (i = 0; i < 6; i++) { gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (joy_widget[0][i]), j0t == i); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (joy_widget[1][i]), j1t == i); gtk_widget_set_sensitive (joy_widget[0][i], j1t != i); gtk_widget_set_sensitive (joy_widget[1][i], j0t != i); } } static void set_hd_state (void) { char texts[9][256]; char *tptrs[] = { texts[0], texts[1], texts[2], texts[3], texts[4], texts[5], texts[6], texts[7], texts[8] }; int nr = nr_units (currprefs.mountinfo); int i; gtk_clist_freeze (GTK_CLIST (hdlist_widget)); gtk_clist_clear (GTK_CLIST (hdlist_widget)); for (i = 0; i < nr; i++) { int secspertrack, surfaces, reserved, blocksize, size; int cylinders, readonly; char *volname, *rootdir; char *failure; /* We always use currprefs.mountinfo for the GUI. The filesystem code makes a private copy which is updated every reset. */ failure = get_filesys_unit (currprefs.mountinfo, i, &volname, &rootdir, &readonly, &secspertrack, &surfaces, &reserved, &cylinders, &size, &blocksize); if (is_hardfile (currprefs.mountinfo, i)) { sprintf (texts[0], "DH%d", i ); sprintf (texts[3], "%d", surfaces); sprintf (texts[4], "%d", cylinders); sprintf (texts[5], "%d", secspertrack); sprintf (texts[6], "%d", reserved); sprintf (texts[7], "%d", size); sprintf (texts[8], "%d", blocksize); } else { strcpy (texts[0], volname); strcpy (texts[3], "n/a"); strcpy (texts[4], "n/a"); strcpy (texts[5], "n/a"); strcpy (texts[6], "n/a"); strcpy (texts[7], "n/a"); strcpy (texts[8], "n/a"); } strcpy (texts[1], rootdir); strcpy (texts[2], readonly ? "y" : "n"); gtk_clist_append (GTK_CLIST (hdlist_widget), tptrs); } gtk_clist_thaw (GTK_CLIST (hdlist_widget)); gtk_widget_set_sensitive (hdchange_button, FALSE); gtk_widget_set_sensitive (hddel_button, FALSE); } static void draw_led (int nr) { GtkWidget *thing = led_widgets[nr]; GdkWindow *window = thing->window; GdkGC *gc = gdk_gc_new (window); GdkColor *col; if (gui_ledstate & (1 << nr)) col = led_on + nr; else col = led_off + nr; gdk_gc_set_foreground (gc, col); gdk_draw_rectangle (window, gc, 1, 0, 0, -1, -1); gdk_gc_destroy (gc); } static int my_idle (void) { unsigned int leds = gui_ledstate; int i; if (quit_gui) { gtk_main_quit (); goto out; } while (comm_pipe_has_data (&to_gui_pipe)) { int cmd = read_comm_pipe_int_blocking (&to_gui_pipe); int n; switch (cmd) { case 0: n = read_comm_pipe_int_blocking (&to_gui_pipe); gtk_label_set_text (GTK_LABEL (disk_text_widget[n]), currprefs.df[n]); break; case 1: /* Initialization. */ set_cpu_widget (); set_cpu_state (); set_gfx_state (); set_joy_state (); set_sound_state (); set_comp_state (); set_mem_state (); set_hd_state (); set_chipset_state (); gtk_widget_show (gui_window); uae_sem_post (&gui_init_sem); gui_active = 1; break; } } for (i = 0; i < 5; i++) { unsigned int mask = 1 << i; unsigned int on = leds & mask; if (on == (prevledstate & mask)) continue; /* printf(": %d %d\n", i, on);*/ draw_led (i); } prevledstate = leds; out: return 1; } static int find_current_toggle (GtkWidget **widgets, int count) { int i; for (i = 0; i < count; i++) if (GTK_TOGGLE_BUTTON (*widgets++)->active) return i; write_log ("GTKUI: Can't happen!\n"); return -1; } static void joy_changed (void) { if (! gui_active) return; changed_prefs.jport0 = find_current_toggle (joy_widget[0], 6); changed_prefs.jport1 = find_current_toggle (joy_widget[1], 6); set_joy_state (); } static void coll_changed (void) { changed_prefs.collision_level = find_current_toggle (coll_widget, 4); } static void cslevel_changed (void) { int t = find_current_toggle (cslevel_widget, 4); int t1 = 0; if (t > 0) t1 |= CSMASK_ECS_AGNUS; if (t > 1) t1 |= CSMASK_ECS_DENISE; if (t > 2) t1 |= CSMASK_AGA; changed_prefs.chipset_mask = t1; } static void custom_changed (void) { changed_prefs.gfx_framerate = framerate_adj->value; changed_prefs.immediate_blits = GTK_TOGGLE_BUTTON (bimm_widget)->active; changed_prefs.fast_copper = GTK_TOGGLE_BUTTON (fcop_widget)->active; #if 0 changed_prefs.blits_32bit_enabled = GTK_TOGGLE_BUTTON (b32_widget)->active; changed_prefs.gfx_afullscreen = GTK_TOGGLE_BUTTON (afscr_widget)->active; changed_prefs.gfx_pfullscreen = GTK_TOGGLE_BUTTON (pfscr_widget)->active; #endif } static void cpuspeed_changed (void) { int which = find_current_toggle (cpuspeed_widgets, 3); changed_prefs.m68k_speed = (which == 0 ? -1 : which == 1 ? 0 : cpuspeed_adj->value); set_cpu_state (); } static void cputype_changed (void) { int i, oldcl; if (! gui_active) return; oldcl = changed_prefs.cpu_level; changed_prefs.cpu_level = find_current_toggle (cpu_widget, 5); changed_prefs.cpu_compatible = GTK_TOGGLE_BUTTON (ccpu_widget)->active; changed_prefs.address_space_24 = GTK_TOGGLE_BUTTON (a24m_widget)->active; if (changed_prefs.cpu_level != 0) changed_prefs.cpu_compatible = 0; /* 68000/68010 always have a 24 bit address space. */ if (changed_prefs.cpu_level < 2) changed_prefs.address_space_24 = 1; /* Changing from 68000/68010 to 68020 should set a sane default. */ else if (oldcl < 2) changed_prefs.address_space_24 = 0; set_cpu_state (); } static void chipsize_changed (void) { int t = find_current_toggle (chipsize_widget, 5); changed_prefs.chipmem_size = 0x80000 << t; for (t = 0; t < 5; t++) gtk_widget_set_sensitive (fastsize_widget[t], changed_prefs.chipmem_size <= 0x200000); if (changed_prefs.chipmem_size > 0x200000) { gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (fastsize_widget[0]), 1); changed_prefs.fastmem_size = 0; } } static void bogosize_changed (void) { int t = find_current_toggle (bogosize_widget, 4); changed_prefs.bogomem_size = (0x40000 << t) & ~0x40000; } static void fastsize_changed (void) { int t = find_current_toggle (fastsize_widget, 5); changed_prefs.fastmem_size = (0x80000 << t) & ~0x80000; } static void z3size_changed (void) { int t = find_current_toggle (z3size_widget, 10); changed_prefs.z3fastmem_size = (0x80000 << t) & ~0x80000; } static void p96size_changed (void) { int t = find_current_toggle (p96size_widget, 7); changed_prefs.gfxmem_size = (0x80000 << t) & ~0x80000; } static void sound_changed (void) { changed_prefs.produce_sound = find_current_toggle (sound_widget, 4); changed_prefs.stereo = find_current_toggle (sound_ch_widget, 3); changed_prefs.mixed_stereo = 0; if (changed_prefs.stereo == 2) changed_prefs.mixed_stereo = changed_prefs.stereo = 1; changed_prefs.sound_bits = (find_current_toggle (sound_bits_widget, 2) + 1) * 8; } static void comp_changed (void) { changed_prefs.cachesize=cachesize_adj->value; changed_prefs.comptrustbyte = find_current_toggle (compbyte_widget, 4); changed_prefs.comptrustword = find_current_toggle (compword_widget, 4); changed_prefs.comptrustlong = find_current_toggle (complong_widget, 4); changed_prefs.comptrustnaddr = find_current_toggle (compaddr_widget, 4); changed_prefs.compnf = find_current_toggle (compnf_widget, 2); changed_prefs.comp_hardflush = find_current_toggle (comp_hardflush_widget, 2); changed_prefs.comp_constjump = find_current_toggle (comp_constjump_widget, 2); changed_prefs.compfpu= find_current_toggle (compfpu_widget, 2); #if USE_OPTIMIZER changed_prefs.comp_midopt = find_current_toggle (comp_midopt_widget, 2); #endif #if USE_LOW_OPTIMIZER changed_prefs.comp_lowopt = find_current_toggle (comp_lowopt_widget, 2); #endif } static void did_reset (void) { if (quit_gui) return; write_comm_pipe_int (&from_gui_pipe, 2, 1); } static void did_debug (void) { if (quit_gui) return; write_comm_pipe_int (&from_gui_pipe, 3, 1); } static void did_quit (void) { if (quit_gui) return; write_comm_pipe_int (&from_gui_pipe, 4, 1); } static void did_eject (GtkWidget *w, gpointer data) { if (quit_gui) return; write_comm_pipe_int (&from_gui_pipe, 0, 0); write_comm_pipe_int (&from_gui_pipe, (int)data, 1); } static void pause_uae (GtkWidget *widget, gpointer data) { if (quit_gui) return; write_comm_pipe_int (&from_gui_pipe, GTK_TOGGLE_BUTTON (widget)->active ? 5 : 6, 1); } static void end_pause_uae (void) { gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (pause_uae_widget), FALSE); } static int filesel_active = -1; static GtkWidget *disk_selector; static int snapsel_active = -1; static char *gui_snapname, *gui_romname, *gui_keyname; static void did_close_insert (gpointer data) { filesel_active = -1; enable_disk_buttons (1); } static void did_insert_select (GtkObject *o) { char *s = gtk_file_selection_get_filename (GTK_FILE_SELECTION (disk_selector)); printf ("%d %s\n", filesel_active, s); if (quit_gui) return; uae_sem_wait (&gui_sem); if (new_disk_string[filesel_active] != 0) free (new_disk_string[filesel_active]); new_disk_string[filesel_active] = strdup (s); uae_sem_post (&gui_sem); write_comm_pipe_int (&from_gui_pipe, 1, 0); write_comm_pipe_int (&from_gui_pipe, filesel_active, 1); filesel_active = -1; enable_disk_buttons (1); gtk_widget_destroy (disk_selector); } static char fsbuffer[100]; static GtkWidget *make_file_selector (const char *title, void (*insertfunc)(GtkObject *), void (*closefunc)(gpointer)) { GtkWidget *p = gtk_file_selection_new (title); gtk_signal_connect (GTK_OBJECT (p), "destroy", (GtkSignalFunc) closefunc, p); gtk_signal_connect_object (GTK_OBJECT (GTK_FILE_SELECTION (p)->ok_button), "clicked", (GtkSignalFunc) insertfunc, GTK_OBJECT (p)); gtk_signal_connect_object (GTK_OBJECT (GTK_FILE_SELECTION (p)->cancel_button), "clicked", (GtkSignalFunc) gtk_widget_destroy, GTK_OBJECT (p)); #if 0 gtk_window_set_title (GTK_WINDOW (p), title); #endif gtk_widget_show (p); return p; } static void filesel_set_path (GtkWidget *p, const char *path) { size_t len = strlen (path); if (len > 0 && ! access (path, R_OK)) { char *tmp = xmalloc (len + 2); strcpy (tmp, path); strcat (tmp, "/"); gtk_file_selection_set_filename (GTK_FILE_SELECTION (p), tmp); } } static void did_insert (GtkWidget *w, gpointer data) { int n = (int)data; if (filesel_active != -1) return; filesel_active = n; enable_disk_buttons (0); sprintf (fsbuffer, "Select a disk image file for DF%d", n); disk_selector = make_file_selector (fsbuffer, did_insert_select, did_close_insert); filesel_set_path (disk_selector, currprefs.path_floppy); } static gint driveled_event (GtkWidget *thing, GdkEvent *event) { int lednr = nr_for_led (thing); switch (event->type) { case GDK_MAP: draw_led (lednr); break; case GDK_EXPOSE: draw_led (lednr); break; default: break; } return 0; } static GtkWidget *snap_selector; static void did_close_snap (gpointer gdata) { snapsel_active = -1; enable_snap_buttons (1); } static void did_snap_select (GtkObject *o) { char *s = gtk_file_selection_get_filename (GTK_FILE_SELECTION (snap_selector)); if (quit_gui) return; uae_sem_wait (&gui_sem); gui_snapname = strdup (s); uae_sem_post (&gui_sem); write_comm_pipe_int (&from_gui_pipe, 7, 0); write_comm_pipe_int (&from_gui_pipe, snapsel_active, 1); snapsel_active = -1; enable_snap_buttons (1); gtk_widget_destroy (snap_selector); } static void did_loadstate (void) { if (snapsel_active != -1) return; snapsel_active = STATE_DORESTORE; enable_snap_buttons (0); snap_selector = make_file_selector ("Select a state file to restore", did_snap_select, did_close_snap); } static void did_savestate (void) { if (snapsel_active != -1) return; snapsel_active = STATE_DOSAVE; enable_snap_buttons (0); snap_selector = make_file_selector ("Select a filename for the state file", did_snap_select, did_close_snap); } static GtkWidget *rom_selector; static void did_close_rom (gpointer gdata) { gtk_widget_set_sensitive (rom_change_widget, 1); } static void did_rom_select (GtkObject *o) { char *s = gtk_file_selection_get_filename (GTK_FILE_SELECTION (rom_selector)); if (quit_gui) return; gtk_widget_set_sensitive (rom_change_widget, 1); uae_sem_wait (&gui_sem); gui_romname = strdup (s); uae_sem_post (&gui_sem); write_comm_pipe_int (&from_gui_pipe, 8, 0); gtk_label_set_text (GTK_LABEL (rom_text_widget), gui_romname); gtk_widget_destroy (rom_selector); } static void did_romchange (GtkWidget *w, gpointer data) { gtk_widget_set_sensitive (rom_change_widget, 0); rom_selector = make_file_selector ("Select a ROM file", did_rom_select, did_close_rom); filesel_set_path (rom_selector, currprefs.path_rom); } static GtkWidget *key_selector; static void did_close_key (gpointer gdata) { gtk_widget_set_sensitive (key_change_widget, 1); } static void did_key_select (GtkObject *o) { char *s = gtk_file_selection_get_filename (GTK_FILE_SELECTION (key_selector)); if (quit_gui) return; gtk_widget_set_sensitive (key_change_widget, 1); uae_sem_wait (&gui_sem); gui_keyname = strdup (s); uae_sem_post (&gui_sem); write_comm_pipe_int (&from_gui_pipe, 9, 0); gtk_label_set_text (GTK_LABEL (key_text_widget), gui_keyname); gtk_widget_destroy (key_selector); } static void did_keychange (GtkWidget *w, gpointer data) { gtk_widget_set_sensitive (key_change_widget, 0); key_selector = make_file_selector ("Select a Kickstart key file", did_key_select, did_close_key); filesel_set_path (key_selector, currprefs.path_rom); } static void add_empty_vbox (GtkWidget *tobox) { GtkWidget *thing = gtk_vbox_new (FALSE, 0); gtk_widget_show (thing); gtk_box_pack_start (GTK_BOX (tobox), thing, TRUE, TRUE, 0); } static void add_empty_hbox (GtkWidget *tobox) { GtkWidget *thing = gtk_hbox_new (FALSE, 0); gtk_widget_show (thing); gtk_box_pack_start (GTK_BOX (tobox), thing, TRUE, TRUE, 0); } static void add_centered_to_vbox (GtkWidget *vbox, GtkWidget *w) { GtkWidget *hbox = gtk_hbox_new (TRUE, 0); gtk_widget_show (hbox); gtk_box_pack_start (GTK_BOX (hbox), w, TRUE, FALSE, 0); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0); } static GtkWidget *make_labelled_widget (const char *str, GtkWidget *thing) { GtkWidget *label = gtk_label_new (str); GtkWidget *hbox2 = gtk_hbox_new (FALSE, 4); gtk_widget_show (label); gtk_widget_show (thing); gtk_box_pack_start (GTK_BOX (hbox2), label, FALSE, TRUE, 0); gtk_box_pack_start (GTK_BOX (hbox2), thing, FALSE, TRUE, 0); return hbox2; } static GtkWidget *add_labelled_widget_centered (const char *str, GtkWidget *thing, GtkWidget *vbox) { GtkWidget *w = make_labelled_widget (str, thing); gtk_widget_show (w); add_centered_to_vbox (vbox, w); return w; } static int make_radio_group (const char **labels, GtkWidget *tobox, GtkWidget **saveptr, gint t1, gint t2, void (*sigfunc) (void), int count, GSList *group) { int t = 0; while (*labels && (count == -1 || count-- > 0)) { GtkWidget *thing = gtk_radio_button_new_with_label (group, *labels++); group = gtk_radio_button_group (GTK_RADIO_BUTTON (thing)); *saveptr++ = thing; gtk_widget_show (thing); gtk_box_pack_start (GTK_BOX (tobox), thing, t1, t2, 0); gtk_signal_connect (GTK_OBJECT (thing), "clicked", (GtkSignalFunc) sigfunc, NULL); t++; } return t; } static GtkWidget *make_radio_group_box (const char *title, const char **labels, GtkWidget **saveptr, int horiz, void (*sigfunc) (void)) { GtkWidget *frame, *newbox; frame = gtk_frame_new (title); newbox = (horiz ? gtk_hbox_new : gtk_vbox_new) (FALSE, 4); gtk_widget_show (newbox); gtk_container_set_border_width (GTK_CONTAINER (newbox), 4); gtk_container_add (GTK_CONTAINER (frame), newbox); make_radio_group (labels, newbox, saveptr, horiz, !horiz, sigfunc, -1, NULL); return frame; } static GtkWidget *make_radio_group_box_1 (const char *title, const char **labels, GtkWidget **saveptr, int horiz, void (*sigfunc) (void), int elts_per_column) { GtkWidget *frame, *newbox; GtkWidget *column; GSList *group = 0; frame = gtk_frame_new (title); column = (horiz ? gtk_vbox_new : gtk_hbox_new) (FALSE, 4); gtk_container_add (GTK_CONTAINER (frame), column); gtk_widget_show (column); while (*labels) { int count; newbox = (horiz ? gtk_hbox_new : gtk_vbox_new) (FALSE, 4); gtk_widget_show (newbox); gtk_container_set_border_width (GTK_CONTAINER (newbox), 4); gtk_container_add (GTK_CONTAINER (column), newbox); count = make_radio_group (labels, newbox, saveptr, horiz, !horiz, sigfunc, elts_per_column, group); labels += count; saveptr += count; group = gtk_radio_button_group (GTK_RADIO_BUTTON (saveptr[-1])); } return frame; } static GtkWidget *make_led (int nr) { GtkWidget *subframe, *the_led, *thing; GdkColormap *colormap; the_led = gtk_vbox_new (FALSE, 0); gtk_widget_show (the_led); thing = gtk_preview_new (GTK_PREVIEW_COLOR); gtk_box_pack_start (GTK_BOX (the_led), thing, TRUE, TRUE, 0); gtk_widget_show (thing); subframe = gtk_frame_new (NULL); gtk_box_pack_start (GTK_BOX (the_led), subframe, TRUE, TRUE, 0); gtk_widget_show (subframe); thing = gtk_drawing_area_new (); gtk_drawing_area_size (GTK_DRAWING_AREA (thing), 20, 5); gtk_widget_set_events (thing, GDK_EXPOSURE_MASK); gtk_container_add (GTK_CONTAINER (subframe), thing); colormap = gtk_widget_get_colormap (thing); led_on[nr].red = nr == 0 ? 0xEEEE : 0xCCCC; led_on[nr].green = nr == 0 ? 0: 0xFFFF; led_on[nr].blue = 0; led_on[nr].pixel = 0; led_off[nr].red = 0; led_off[nr].green = 0; led_off[nr].blue = 0; led_off[nr].pixel = 0; gdk_color_alloc (colormap, led_on + nr); gdk_color_alloc (colormap, led_off + nr); led_widgets[nr] = thing; gtk_signal_connect (GTK_OBJECT (thing), "event", (GtkSignalFunc) driveled_event, (gpointer) thing); gtk_widget_show (thing); thing = gtk_preview_new (GTK_PREVIEW_COLOR); gtk_box_pack_start (GTK_BOX (the_led), thing, TRUE, TRUE, 0); gtk_widget_show (thing); return the_led; } static GtkWidget *make_file_container (const char *title, GtkWidget *vbox) { GtkWidget *thing = gtk_frame_new (title); GtkWidget *buttonbox = gtk_hbox_new (FALSE, 4); gtk_container_set_border_width (GTK_CONTAINER (buttonbox), 4); gtk_container_add (GTK_CONTAINER (thing), buttonbox); gtk_box_pack_start (GTK_BOX (vbox), thing, FALSE, TRUE, 0); gtk_widget_show (buttonbox); gtk_widget_show (thing); return buttonbox; } static GtkWidget *make_file_widget (GtkWidget *buttonbox) { GtkWidget *thing, *subthing; GtkWidget *subframe = gtk_frame_new (NULL); gtk_frame_set_shadow_type (GTK_FRAME (subframe), GTK_SHADOW_ETCHED_OUT); gtk_box_pack_start (GTK_BOX (buttonbox), subframe, TRUE, TRUE, 0); gtk_widget_show (subframe); subthing = gtk_vbox_new (FALSE, 0); gtk_widget_show (subthing); gtk_container_add (GTK_CONTAINER (subframe), subthing); thing = gtk_label_new (""); gtk_widget_show (thing); gtk_box_pack_start (GTK_BOX (subthing), thing, TRUE, TRUE, 0); return thing; } static void make_floppy_disks (GtkWidget *vbox) { GtkWidget *thing, *subthing, *subframe, *buttonbox; char buf[5]; int i; add_empty_vbox (vbox); for (i = 0; i < 4; i++) { /* Frame with an hbox and the "DFx:" title */ sprintf (buf, "DF%d:", i); buttonbox = make_file_container (buf, vbox); /* LED */ subthing = make_led (i + 1); gtk_box_pack_start (GTK_BOX (buttonbox), subthing, FALSE, TRUE, 0); /* Current file display */ disk_text_widget[i] = make_file_widget (buttonbox); /* Now, the buttons. */ thing = gtk_button_new_with_label ("Eject"); gtk_box_pack_start (GTK_BOX (buttonbox), thing, FALSE, TRUE, 0); gtk_widget_show (thing); disk_eject_widget[i] = thing; gtk_signal_connect (GTK_OBJECT (thing), "clicked", (GtkSignalFunc) did_eject, (gpointer) i); thing = gtk_button_new_with_label ("Insert"); gtk_box_pack_start (GTK_BOX (buttonbox), thing, FALSE, TRUE, 0); gtk_widget_show (thing); disk_insert_widget[i] = thing; gtk_signal_connect (GTK_OBJECT (thing), "clicked", (GtkSignalFunc) did_insert, (gpointer) i); } add_empty_vbox (vbox); } static GtkWidget *make_cpu_speed_sel (void) { int t; static const char *labels[] = { "Optimize for host CPU speed","Approximate 68000/7MHz speed", "Adjustable", NULL }; GtkWidget *frame, *newbox; frame = gtk_frame_new ("CPU speed"); newbox = gtk_vbox_new (FALSE, 4); gtk_widget_show (newbox); gtk_container_set_border_width (GTK_CONTAINER (newbox), 4); gtk_container_add (GTK_CONTAINER (frame), newbox); make_radio_group (labels, newbox, cpuspeed_widgets, 0, 1, cpuspeed_changed, -1, NULL); t = currprefs.m68k_speed > 0 ? currprefs.m68k_speed : 4 * CYCLE_UNIT; cpuspeed_adj = GTK_ADJUSTMENT (gtk_adjustment_new (t, 1.0, 5120.0, 1.0, 1.0, 1.0)); gtk_signal_connect (GTK_OBJECT (cpuspeed_adj), "value_changed", GTK_SIGNAL_FUNC (cpuspeed_changed), NULL); cpuspeed_scale = gtk_hscale_new (cpuspeed_adj); gtk_range_set_update_policy (GTK_RANGE (cpuspeed_scale), GTK_UPDATE_DELAYED); gtk_scale_set_digits (GTK_SCALE (cpuspeed_scale), 0); gtk_scale_set_value_pos (GTK_SCALE (cpuspeed_scale), GTK_POS_RIGHT); cpuspeed_scale = add_labelled_widget_centered ("Cycles per instruction:", cpuspeed_scale, newbox); return frame; } static void make_cpu_widgets (GtkWidget *vbox) { int i; GtkWidget *newbox, *hbox, *frame; GtkWidget *thing; static const char *radiolabels[] = { "68000", "68010", "68020", "68020+68881", "68040", NULL }; add_empty_vbox (vbox); hbox = gtk_hbox_new (FALSE, 0); add_empty_vbox (hbox); newbox = make_radio_group_box ("CPU type", radiolabels, cpu_widget, 0, cputype_changed); gtk_widget_show (newbox); gtk_box_pack_start (GTK_BOX (hbox), newbox, FALSE, FALSE, 0); newbox = make_cpu_speed_sel (); gtk_widget_show (newbox); gtk_box_pack_start (GTK_BOX (hbox), newbox, FALSE, FALSE, 0); add_empty_vbox (hbox); gtk_widget_show (hbox); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); frame = gtk_frame_new ("CPU flags"); add_centered_to_vbox (vbox, frame); gtk_widget_show (frame); newbox = gtk_vbox_new (FALSE, 4); gtk_widget_show (newbox); gtk_container_set_border_width (GTK_CONTAINER (newbox), 4); gtk_container_add (GTK_CONTAINER (frame), newbox); a24m_widget = gtk_check_button_new_with_label ("24 bit address space"); add_centered_to_vbox (newbox, a24m_widget); gtk_widget_show (a24m_widget); ccpu_widget = gtk_check_button_new_with_label ("Slow but compatible"); add_centered_to_vbox (newbox, ccpu_widget); gtk_widget_show (ccpu_widget); add_empty_vbox (vbox); gtk_signal_connect (GTK_OBJECT (ccpu_widget), "clicked", (GtkSignalFunc) cputype_changed, NULL); gtk_signal_connect (GTK_OBJECT (a24m_widget), "clicked", (GtkSignalFunc) cputype_changed, NULL); } static void make_gfx_widgets (GtkWidget *vbox) { GtkWidget *thing, *frame, *newbox, *hbox; static const char *p96labels[] = { "None", "1 MB", "2 MB", "4 MB", "8 MB", "16 MB", "32 MB", NULL }; add_empty_vbox (vbox); hbox = gtk_hbox_new (FALSE, 10); gtk_widget_show (hbox); add_centered_to_vbox (vbox, hbox); frame = make_radio_group_box_1 ("P96 RAM", p96labels, p96size_widget, 0, p96size_changed, 4); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0); frame = gtk_frame_new ("Miscellaneous"); gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, FALSE, 0); gtk_widget_show (frame); newbox = gtk_vbox_new (FALSE, 4); gtk_widget_show (newbox); gtk_container_set_border_width (GTK_CONTAINER (newbox), 4); gtk_container_add (GTK_CONTAINER (frame), newbox); framerate_adj = GTK_ADJUSTMENT (gtk_adjustment_new (currprefs.gfx_framerate, 1.0, 21.0, 1.0, 1.0, 1.0)); gtk_signal_connect (GTK_OBJECT (framerate_adj), "value_changed", GTK_SIGNAL_FUNC (custom_changed), NULL); thing = gtk_hscale_new (framerate_adj); gtk_range_set_update_policy (GTK_RANGE (thing), GTK_UPDATE_DELAYED); gtk_scale_set_digits (GTK_SCALE (thing), 0); gtk_scale_set_value_pos (GTK_SCALE (thing), GTK_POS_RIGHT); add_labelled_widget_centered ("Framerate:", thing, newbox); b32_widget = gtk_check_button_new_with_label ("32 bit blitter"); add_centered_to_vbox (newbox, b32_widget); #if 0 gtk_widget_show (b32_widget); #endif bimm_widget = gtk_check_button_new_with_label ("Immediate blits"); add_centered_to_vbox (newbox, bimm_widget); gtk_widget_show (bimm_widget); afscr_widget = gtk_check_button_new_with_label ("Amiga modes fullscreen"); add_centered_to_vbox (newbox, afscr_widget); #if 0 gtk_widget_show (afscr_widget); #endif pfscr_widget = gtk_check_button_new_with_label ("Picasso modes fullscreen"); add_centered_to_vbox (newbox, pfscr_widget); #if 0 gtk_widget_show (pfscr_widget); #endif add_empty_vbox (vbox); gtk_signal_connect (GTK_OBJECT (bimm_widget), "clicked", (GtkSignalFunc) custom_changed, NULL); #if 0 gtk_signal_connect (GTK_OBJECT (b32_widget), "clicked", (GtkSignalFunc) custom_changed, NULL); gtk_signal_connect (GTK_OBJECT (afscr_widget), "clicked", (GtkSignalFunc) custom_changed, NULL); gtk_signal_connect (GTK_OBJECT (pfscr_widget), "clicked", (GtkSignalFunc) custom_changed, NULL); #endif } static void make_chipset_widgets (GtkWidget *vbox) { GtkWidget *frame, *newbox, *hbox; static const char *colllabels[] = { "None (fastest)", "Sprites only", "Sprites & playfields", "Full (very slow)", NULL }; static const char *cslevellabels[] = { "OCS", "ECS Agnus", "Full ECS", "AGA", NULL }; add_empty_vbox (vbox); hbox = gtk_hbox_new (FALSE, 10); gtk_widget_show (hbox); add_centered_to_vbox (vbox, hbox); newbox = make_radio_group_box ("Sprite collisions", colllabels, coll_widget, 0, coll_changed); gtk_widget_show (newbox); gtk_box_pack_start (GTK_BOX (hbox), newbox, FALSE, TRUE, 0); newbox = make_radio_group_box ("Chipset", cslevellabels, cslevel_widget, 0, cslevel_changed); gtk_widget_show (newbox); gtk_box_pack_start (GTK_BOX (hbox), newbox, FALSE, TRUE, 0); fcop_widget = gtk_check_button_new_with_label ("Enable copper speedup code"); add_centered_to_vbox (vbox, fcop_widget); gtk_widget_show (fcop_widget); gtk_signal_connect (GTK_OBJECT (fcop_widget), "clicked", (GtkSignalFunc) custom_changed, NULL); add_empty_vbox (vbox); } static void make_sound_widgets (GtkWidget *vbox) { GtkWidget *frame, *newbox; int i; GtkWidget *hbox; static const char *soundlabels1[] = { "None", "No output", "Normal", "Accurate", NULL }, *soundlabels2[] = { "8 bit", "16 bit", NULL }, *soundlabels3[] = { "Mono", "Stereo", "Mixed", NULL }; add_empty_vbox (vbox); newbox = make_radio_group_box ("Mode", soundlabels1, sound_widget, 1, sound_changed); gtk_widget_show (newbox); add_centered_to_vbox (vbox, newbox); hbox = gtk_hbox_new (FALSE, 10); gtk_widget_show (hbox); add_centered_to_vbox (vbox, hbox); newbox = make_radio_group_box ("Channels", soundlabels3, sound_ch_widget, 1, sound_changed); gtk_widget_show (newbox); gtk_box_pack_start (GTK_BOX (hbox), newbox, FALSE, TRUE, 0); newbox = make_radio_group_box ("Resolution", soundlabels2, sound_bits_widget, 1, sound_changed); gtk_widget_show (newbox); gtk_box_pack_start (GTK_BOX (hbox), newbox, FALSE, TRUE, 0); add_empty_vbox (vbox); } static void make_mem_widgets (GtkWidget *vbox) { GtkWidget *hbox = gtk_hbox_new (FALSE, 10); GtkWidget *label, *frame; static const char *chiplabels[] = { "512 KB", "1 MB", "2 MB", "4 MB", "8 MB", NULL }; static const char *bogolabels[] = { "None", "512 KB", "1 MB", "1.8 MB", NULL }; static const char *fastlabels[] = { "None", "1 MB", "2 MB", "4 MB", "8 MB", NULL }; static const char *z3labels[] = { "None", "1 MB", "2 MB", "4 MB", "8 MB", "16 MB", "32 MB", "64 MB", "128 MB", "256 MB", NULL }; add_empty_vbox (vbox); { GtkWidget *buttonbox = make_file_container ("Kickstart ROM file:", vbox); GtkWidget *thing = gtk_button_new_with_label ("Change"); /* Current file display */ rom_text_widget = make_file_widget (buttonbox); gtk_box_pack_start (GTK_BOX (buttonbox), thing, FALSE, TRUE, 0); gtk_widget_show (thing); rom_change_widget = thing; gtk_signal_connect (GTK_OBJECT (thing), "clicked", (GtkSignalFunc) did_romchange, 0); } { GtkWidget *buttonbox = make_file_container ("ROM key file for Cloanto Amiga Forever:", vbox); GtkWidget *thing = gtk_button_new_with_label ("Change"); /* Current file display */ key_text_widget = make_file_widget (buttonbox); gtk_box_pack_start (GTK_BOX (buttonbox), thing, FALSE, TRUE, 0); gtk_widget_show (thing); key_change_widget = thing; gtk_signal_connect (GTK_OBJECT (thing), "clicked", (GtkSignalFunc) did_keychange, 0); } gtk_widget_show (hbox); add_centered_to_vbox (vbox, hbox); add_empty_vbox (vbox); label = gtk_label_new ("These settings take effect after the next reset."); gtk_widget_show (label); add_centered_to_vbox (vbox, label); frame = make_radio_group_box ("Chip Mem", chiplabels, chipsize_widget, 0, chipsize_changed); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0); frame = make_radio_group_box ("Slow Mem", bogolabels, bogosize_widget, 0, bogosize_changed); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0); frame = make_radio_group_box ("Fast Mem", fastlabels, fastsize_widget, 0, fastsize_changed); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0); frame = make_radio_group_box_1 ("Z3 Mem", z3labels, z3size_widget, 0, z3size_changed, 5); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0); } static void make_comp_widgets (GtkWidget *vbox) { GtkWidget *frame, *newbox; int i; GtkWidget *hbox; static const char *complabels1[] = { "Direct", "Indirect", "Indirect for KS", "Direct after Picasso", NULL },*complabels2[] = { "Direct", "Indirect", "Indirect for KS", "Direct after Picasso", NULL },*complabels3[] = { "Direct", "Indirect", "Indirect for KS", "Direct after Picasso", NULL },*complabels3a[] = { "Direct", "Indirect", "Indirect for KS", "Direct after Picasso", NULL }, *complabels4[] = { "Always generate", "Only generate when needed", NULL }, *complabels5[] = { "Disable", "Enable", NULL }, *complabels6[] = { "Disable", "Enable", NULL }, *complabels7[] = { "Disable", "Enable", NULL }, *complabels8[] = { "Soft", "Hard", NULL }, *complabels9[] = { "Disable", "Enable", NULL }; GtkWidget *thing; add_empty_vbox (vbox); newbox = make_radio_group_box ("Byte access", complabels1, compbyte_widget, 1, comp_changed); gtk_widget_show (newbox); add_centered_to_vbox (vbox, newbox); newbox = make_radio_group_box ("Word access", complabels2, compword_widget, 1, comp_changed); gtk_widget_show (newbox); add_centered_to_vbox (vbox, newbox); newbox = make_radio_group_box ("Long access", complabels3, complong_widget, 1, comp_changed); gtk_widget_show (newbox); add_centered_to_vbox (vbox, newbox); newbox = make_radio_group_box ("Address lookup", complabels3a, compaddr_widget, 1, comp_changed); gtk_widget_show (newbox); add_centered_to_vbox (vbox, newbox); newbox = make_radio_group_box ("Flags", complabels4, compnf_widget, 1, comp_changed); gtk_widget_show (newbox); add_centered_to_vbox (vbox, newbox); newbox = make_radio_group_box ("Icache flushes", complabels8, comp_hardflush_widget, 1, comp_changed); gtk_widget_show (newbox); add_centered_to_vbox (vbox, newbox); newbox = make_radio_group_box ("Compile through uncond branch", complabels9, comp_constjump_widget, 1, comp_changed); gtk_widget_show (newbox); add_centered_to_vbox (vbox, newbox); newbox = make_radio_group_box ("JIT FPU compiler", complabels7, compfpu_widget, 1, comp_changed); gtk_widget_show (newbox); add_centered_to_vbox (vbox, newbox); #if USE_OPTIMIZER newbox = make_radio_group_box ("Mid Level Optimizer", complabels5, comp_midopt_widget, 1, comp_changed); gtk_widget_show (newbox); add_centered_to_vbox (vbox, newbox); #endif #if USE_LOW_OPTIMIZER newbox = make_radio_group_box ("Low Level Optimizer", complabels6, comp_lowopt_widget, 1, comp_changed); gtk_widget_show (newbox); add_centered_to_vbox (vbox, newbox); #endif cachesize_adj = GTK_ADJUSTMENT (gtk_adjustment_new (currprefs.cachesize, 0.0, 16384.0, 1.0, 1.0, 1.0)); gtk_signal_connect (GTK_OBJECT (cachesize_adj), "value_changed", GTK_SIGNAL_FUNC (comp_changed), NULL); thing = gtk_hscale_new (cachesize_adj); gtk_range_set_update_policy (GTK_RANGE (thing), GTK_UPDATE_DELAYED); gtk_scale_set_digits (GTK_SCALE (thing), 0); gtk_scale_set_value_pos (GTK_SCALE (thing), GTK_POS_RIGHT); add_labelled_widget_centered ("Translation buffer(kB):", thing, vbox); add_empty_vbox (vbox); } static void make_joy_widgets (GtkWidget *dvbox) { int i; GtkWidget *hbox = gtk_hbox_new (FALSE, 10); static const char *joylabels[] = { "Joystick 0", "Joystick 1", "Mouse", "Numeric pad", "Cursor keys/Right Ctrl", "T/F/H/B/Left Alt", NULL }; add_empty_vbox (dvbox); gtk_widget_show (hbox); add_centered_to_vbox (dvbox, hbox); for (i = 0; i < 2; i++) { GtkWidget *vbox, *frame; GtkWidget *thing; char buffer[20]; int j; sprintf (buffer, "Port %d", i); frame = make_radio_group_box (buffer, joylabels, joy_widget[i], 0, joy_changed); gtk_widget_show (frame); gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, TRUE, 0); } add_empty_vbox (dvbox); } static int hd_change_mode; static void newdir_ok (void) { int n; strcpy (dirdlg_volname, gtk_entry_get_text (GTK_ENTRY (volname_entry))); strcpy (dirdlg_path, gtk_entry_get_text (GTK_ENTRY (path_entry))); n = strlen (dirdlg_volname); /* Strip colons from the end. */ if (n > 0) { if (dirdlg_volname[n - 1] == ':') dirdlg_volname[n - 1] = '\0'; } if (strlen (dirdlg_volname) == 0 || strlen (dirdlg_path) == 0) { /* Uh, no messageboxes in gtk? */ } else if (hd_change_mode) { set_filesys_unit (currprefs.mountinfo, selected_hd_row, dirdlg_volname, dirdlg_path, 0, 0, 0, 0, 0); set_hd_state (); } else { add_filesys_unit (currprefs.mountinfo, dirdlg_volname, dirdlg_path, 0, 0, 0, 0, 0); set_hd_state (); } gtk_widget_destroy (dirdlg); } static GtkWidget *create_dirdlg (const char *title) { GtkWidget *vbox, *hbox, *thing, *label1, *button; dirdlg = gtk_dialog_new (); gtk_window_set_title (GTK_WINDOW (dirdlg), title); gtk_window_set_position (GTK_WINDOW (dirdlg), GTK_WIN_POS_MOUSE); gtk_window_set_modal (GTK_WINDOW (dirdlg), TRUE); gtk_widget_show (dirdlg); vbox = GTK_DIALOG (dirdlg)->vbox; hbox = gtk_hbox_new (FALSE, 10); gtk_widget_show (hbox); gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 10); label1 = gtk_label_new ("Path:"); gtk_box_pack_start (GTK_BOX (hbox), label1, FALSE, TRUE, 10); gtk_widget_show (label1); thing = gtk_entry_new_with_max_length (255); gtk_box_pack_start (GTK_BOX (hbox), thing, TRUE, TRUE, 10); gtk_widget_show (thing); path_entry = thing; hbox = gtk_hbox_new (FALSE, 10); gtk_widget_show (hbox); gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 10); thing = gtk_label_new ("Volume name:"); gtk_box_pack_start (GTK_BOX (hbox), thing, FALSE, TRUE, 10); gtk_widget_show (thing); thing = gtk_entry_new_with_max_length (255); gtk_box_pack_start (GTK_BOX (hbox), thing, TRUE, TRUE, 10); gtk_widget_show (thing); gtk_widget_set_usize (thing, 200, -1); volname_entry = thing; hbox = GTK_DIALOG (dirdlg)->action_area; button = gtk_button_new_with_label ("OK"); gtk_signal_connect (GTK_OBJECT (button), "clicked", GTK_SIGNAL_FUNC(newdir_ok), NULL); GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0); gtk_widget_grab_default (button); gtk_widget_show (button); button = gtk_button_new_with_label ("Cancel"); gtk_signal_connect_object (GTK_OBJECT (button), "clicked", GTK_SIGNAL_FUNC (gtk_widget_destroy), GTK_OBJECT (dirdlg)); gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0); gtk_widget_show (button); } static void did_newdir (void) { hd_change_mode = 0; create_dirdlg ("Add a new mounted directory"); } static void did_newhdf (void) { hd_change_mode = 0; } static void did_hdchange (void) { int secspertrack, surfaces, reserved, blocksize, size; int cylinders, readonly; char *volname, *rootdir; char *failure; failure = get_filesys_unit (currprefs.mountinfo, selected_hd_row, &volname, &rootdir, &readonly, &secspertrack, &surfaces, &reserved, &cylinders, &size, &blocksize); hd_change_mode = 1; if (is_hardfile (currprefs.mountinfo, selected_hd_row)) { } else { create_dirdlg ("Change a mounted directory"); gtk_entry_set_text (GTK_ENTRY (volname_entry), volname); gtk_entry_set_text (GTK_ENTRY (path_entry), rootdir); } } static void did_hddel (void) { kill_filesys_unit (currprefs.mountinfo, selected_hd_row); set_hd_state (); } static void hdselect (GtkWidget *widget, gint row, gint column, GdkEventButton *bevent, gpointer user_data) { selected_hd_row = row; gtk_widget_set_sensitive (hdchange_button, TRUE); gtk_widget_set_sensitive (hddel_button, TRUE); } static void hdunselect (GtkWidget *widget, gint row, gint column, GdkEventButton *bevent, gpointer user_data) { gtk_widget_set_sensitive (hdchange_button, FALSE); gtk_widget_set_sensitive (hddel_button, FALSE); } static GtkWidget *make_buttons (const char *label, GtkWidget *box, void (*sigfunc) (void), GtkWidget *(*create)(const char *label)) { GtkWidget *thing = create (label); gtk_widget_show (thing); gtk_signal_connect (GTK_OBJECT (thing), "clicked", (GtkSignalFunc) sigfunc, NULL); gtk_box_pack_start (GTK_BOX (box), thing, TRUE, TRUE, 0); return thing; } #define make_button(label, box, sigfunc) make_buttons(label, box, sigfunc, gtk_button_new_with_label) static void make_hd_widgets (GtkWidget *dvbox) { GtkWidget *thing, *buttonbox, *hbox; char *titles [] = { "Volume", "File/Directory", "R/O", "Heads", "Cyl.", "Sec.", "Rsrvd", "Size", "Blksize" }; thing = gtk_clist_new_with_titles (9, titles); gtk_clist_set_selection_mode (GTK_CLIST (thing), GTK_SELECTION_SINGLE); gtk_signal_connect (GTK_OBJECT (thing), "select_row", (GtkSignalFunc) hdselect, NULL); gtk_signal_connect (GTK_OBJECT (thing), "unselect_row", (GtkSignalFunc) hdunselect, NULL); hdlist_widget = thing; gtk_widget_set_usize (thing, -1, 200); gtk_widget_show (thing); add_centered_to_vbox (dvbox, thing); hbox = gtk_hbox_new (FALSE, 10); gtk_widget_show (hbox); gtk_box_pack_start (GTK_BOX (dvbox), hbox, FALSE, TRUE, 0); /* The buttons */ buttonbox = gtk_hbox_new (TRUE, 4); gtk_widget_show (buttonbox); gtk_box_pack_start (GTK_BOX (hbox), buttonbox, TRUE, TRUE, 0); make_button ("New filesystem...", buttonbox, did_newdir); #if 0 /* later... */ make_button ("New hardfile...", buttonbox, did_newhdf); #endif hdchange_button = make_button ("Change...", buttonbox, did_hdchange); hddel_button = make_button ("Delete", buttonbox, did_hddel); thing = gtk_label_new ("These settings take effect after the next reset."); gtk_widget_show (thing); add_centered_to_vbox (dvbox, thing); } static void make_about_widgets (GtkWidget *dvbox) { GtkWidget *thing; GtkStyle *style; GdkFont *font; char t[20]; add_empty_vbox (dvbox); sprintf (t, "UAE %d.%d.%d", UAEMAJOR, UAEMINOR, UAESUBREV); thing = gtk_label_new (t); gtk_widget_show (thing); add_centered_to_vbox (dvbox, thing); font = gdk_font_load ("-*-helvetica-medium-r-normal--*-240-*-*-*-*-*-*"); if (font) { style = gtk_style_copy (GTK_WIDGET (thing)->style); gdk_font_unref (style->font); style->font = font; gdk_font_ref (style->font); gtk_widget_push_style (style); gtk_widget_set_style (thing, style); } thing = gtk_label_new ("Choose your settings, then deselect the Pause button to start!"); gtk_widget_show (thing); add_centered_to_vbox (dvbox, thing); add_empty_vbox (dvbox); } static void create_guidlg (void) { GtkWidget *window, *notebook; GtkWidget *buttonbox, *vbox, *hbox; GtkWidget *thing; int i; int argc = 1; char *a[] = {"UAE"}; char **argv = a; static const struct _pages { const char *title; void (*createfunc)(GtkWidget *); } pages[] = { /* ??? If this isn't the first page, there are errors in draw_led. */ { "Floppy disks", make_floppy_disks }, { "Memory", make_mem_widgets }, { "CPU emulation", make_cpu_widgets }, { "Graphics", make_gfx_widgets }, { "Chipset", make_chipset_widgets }, { "Sound", make_sound_widgets }, { "JIT", make_comp_widgets }, { "Game ports", make_joy_widgets }, { "Harddisks", make_hd_widgets }, { "About", make_about_widgets } }; gtk_init (&argc, &argv); gtk_rc_parse ("uaegtkrc"); gui_window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_title (GTK_WINDOW (gui_window), "UAE control"); vbox = gtk_vbox_new (FALSE, 4); gtk_container_add (GTK_CONTAINER (gui_window), vbox); gtk_container_set_border_width (GTK_CONTAINER (gui_window), 10); /* First line - buttons and power LED */ hbox = gtk_hbox_new (FALSE, 10); gtk_widget_show (hbox); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0); /* The buttons */ buttonbox = gtk_hbox_new (TRUE, 4); gtk_widget_show (buttonbox); gtk_box_pack_start (GTK_BOX (hbox), buttonbox, TRUE, TRUE, 0); make_button ("Reset", buttonbox, did_reset); make_button ("Debug", buttonbox, did_debug); make_button ("Quit", buttonbox, did_quit); make_button ("Save config", buttonbox, save_config); pause_uae_widget = make_buttons ("Pause", buttonbox, pause_uae, gtk_toggle_button_new_with_label); /* The LED */ thing = make_led (0); thing = make_labelled_widget ("Power:", thing); gtk_widget_show (thing); gtk_box_pack_start (GTK_BOX (hbox), thing, FALSE, TRUE, 0); /* More buttons */ buttonbox = gtk_hbox_new (TRUE, 4); gtk_widget_show (buttonbox); gtk_box_pack_start (GTK_BOX (vbox), buttonbox, TRUE, TRUE, 0); snap_save_widget = make_button ("Save state", buttonbox, did_savestate); snap_load_widget = make_button ("Load state", buttonbox, did_loadstate); /* Place a separator below those buttons. */ thing = gtk_hseparator_new (); gtk_box_pack_start (GTK_BOX (vbox), thing, FALSE, TRUE, 0); gtk_widget_show (thing); /* Now the notebook */ notebook = gtk_notebook_new (); gtk_box_pack_start (GTK_BOX (vbox), notebook, TRUE, TRUE, 0); gtk_widget_show (notebook); for (i = 0; i < sizeof pages / sizeof (struct _pages); i++) { thing = gtk_vbox_new (FALSE, 4); gtk_widget_show (thing); gtk_container_set_border_width (GTK_CONTAINER (thing), 10); pages[i].createfunc (thing); gtk_notebook_append_page (GTK_NOTEBOOK (notebook), thing, gtk_label_new (pages[i].title)); } /* Put "about" screen first. */ gtk_notebook_set_page (GTK_NOTEBOOK (notebook), i - 1); enable_disk_buttons (1); enable_snap_buttons (1); gtk_widget_show (vbox); filesel_active = -1; snapsel_active = -1; gtk_timeout_add (1000, (GtkFunction)my_idle, 0); } static void *gtk_gui_thread (void *dummy) { gtk_main (); quitted_gui = 1; uae_sem_post (&gui_quit_sem); return 0; } void gui_changesettings(void) { } void gui_fps (int x) { } void gui_led (int num, int on) { if (no_gui) return; /* if (num == 0) return; printf("LED %d %d\n", num, on); write_comm_pipe_int (&to_gui_pipe, 1, 0); write_comm_pipe_int (&to_gui_pipe, num == 0 ? 4 : num - 1, 0); write_comm_pipe_int (&to_gui_pipe, on, 1); printf("#LED %d %d\n", num, on);*/ } void gui_filename (int num, const char *name) { if (no_gui) return; write_comm_pipe_int (&to_gui_pipe, 0, 0); write_comm_pipe_int (&to_gui_pipe, num, 1); /* gui_update ();*/ } void gui_handle_events (void) { int pause_uae = FALSE; if (no_gui) return; do { while (pause_uae || comm_pipe_has_data (&from_gui_pipe)) { int cmd = read_comm_pipe_int_blocking (&from_gui_pipe); int n; switch (cmd) { case 0: n = read_comm_pipe_int_blocking (&from_gui_pipe); changed_prefs.df[n][0] = '\0'; break; case 1: n = read_comm_pipe_int_blocking (&from_gui_pipe); uae_sem_wait (&gui_sem); strncpy (changed_prefs.df[n], new_disk_string[n], 255); free (new_disk_string[n]); new_disk_string[n] = 0; changed_prefs.df[n][255] = '\0'; uae_sem_post (&gui_sem); break; case 2: uae_reset (); end_pause_uae (); break; case 3: activate_debugger (); end_pause_uae (); break; case 4: uae_quit (); end_pause_uae (); break; case 5: pause_uae = TRUE; break; case 6: pause_uae = FALSE; break; case 7: printf ("STATESAVE\n"); savestate_state = read_comm_pipe_int_blocking (&from_gui_pipe); uae_sem_wait (&gui_sem); savestate_filename = gui_snapname; uae_sem_post (&gui_sem); break; case 8: uae_sem_wait (&gui_sem); strncpy (changed_prefs.romfile, gui_romname, 255); changed_prefs.romfile[255] = '\0'; free (gui_romname); uae_sem_post (&gui_sem); break; case 9: uae_sem_wait (&gui_sem); strncpy (changed_prefs.keyfile, gui_keyname, 255); changed_prefs.keyfile[255] = '\0'; free (gui_keyname); uae_sem_post (&gui_sem); break; } } } while (pause_uae); } void gui_update_gfx (void) { #if 0 /* This doesn't work... */ set_gfx_state (); #endif } int gui_init (void) { uae_thread_id tid; gui_active = 0; init_comm_pipe (&to_gui_pipe, 20, 1); init_comm_pipe (&from_gui_pipe, 20, 1); uae_sem_init (&gui_sem, 0, 1); uae_sem_init (&gui_init_sem, 0, 0); uae_sem_init (&gui_quit_sem, 0, 0); create_guidlg (); uae_start_thread (gtk_gui_thread, NULL, &tid); gui_update (); if (currprefs.start_gui == 1) { gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (pause_uae_widget), TRUE); write_comm_pipe_int (&from_gui_pipe, 5, 1); /* Handle events until Pause is unchecked. */ gui_handle_events (); /* Quit requested? */ if (quit_program == -1) { gui_exit (); return -2; } } return 1; } int gui_update (void) { if (no_gui) return 0; write_comm_pipe_int (&to_gui_pipe, 1, 1); uae_sem_wait (&gui_init_sem); return 0; } void gui_exit (void) { if (no_gui) return; quit_gui = 1; uae_sem_wait (&gui_quit_sem); } void gui_lock (void) { uae_sem_wait (&gui_sem); } void gui_unlock (void) { uae_sem_post (&gui_sem); } fs-uae-2.2.3+dfsg/src/arcadia.cpp0000644000175000017500000002444012162366655016740 0ustar glaubitzglaubitz/* * UAE - The Un*x Amiga Emulator * * Arcadia emulation * * Copyright 2005-2007 Toni Wilen * * */ #include "sysconfig.h" #include "sysdeps.h" #include "options.h" #include "uae.h" #include "uae/memory.h" #include "rommgr.h" #include "custom.h" #include "newcpu.h" #include "debug.h" #include "arcadia.h" #include "zfile.h" /* supported roms (mame 0.90) * * - ar_airh * - ar_bowl * - ar_fast * - ar_ldrb * - ar_ldrba * - ar_ninj * - ar_rdwr * - ar_socc (99u8) * - ar_sdwr * - ar_spot * - ar_sprg * - ar_xeon * */ static void multigame (int); int arcadia_flag, arcadia_coin[2]; struct arcadiarom *arcadia_bios, *arcadia_game; #define BIOS_VERSION_211 2 #define BIOS_VERSION_300 3 static struct arcadiarom roms[] = { { 49, _T("ar_bios.zip"), _T("scpa21"), ARCADIA_BIOS, 0, 6, 1, 0, 2, 3, 4, 5, 7 }, { 50, _T("ar_bios.zip"), _T("gcp-"), ARCADIA_BIOS, 3, 7, 6, 5, 4, 3, 2, 1, 0 }, { 51, _T("ar_bios.zip"), _T("scpav3_0."), ARCADIA_BIOS, 0, 6, 1, 0, 2, 3, 4, 5, 7 }, { 33, _T("ar_airh.zip"), _T("airh_"), ARCADIA_GAME, 1, 5, 0, 2, 4, 7, 6, 1, 3 }, { 34, _T("ar_bowl.zip"), _T("bowl_"), ARCADIA_GAME, 1, 7, 6, 0, 1, 2, 3, 4, 5 }, { 35, _T("ar_dart.zip"), _T("dart_"), ARCADIA_GAME, 1, 4, 0, 7, 6, 3, 1, 2, 5 }, { 36, _T("ar_fast.zip"), _T("fastv28."), ARCADIA_GAME, 0, 7, 6, 5, 4, 3, 2, 1, 0 }, { 37, _T("ar_ldrb.zip"), _T("lbg240"), ARCADIA_GAME, 0, 7, 6, 5, 4, 3, 2, 1, 0 }, { 38, _T("ar_ldrba.zip"),_T("ldrb_"), ARCADIA_GAME, 1, 2, 3, 4, 1, 0, 7, 5, 6 }, { 39, _T("ar_ninj.zip"), _T("ninj_"), ARCADIA_GAME, 1, 1, 6, 5, 7, 4, 2, 0, 3 }, { 40, _T("ar_rdwr.zip"), _T("rdwr_"), ARCADIA_GAME, 1, 3, 1, 6, 4, 0, 5, 2, 7 }, { 41, _T("ar_sdwr.zip"), _T("sdwr_"), ARCADIA_GAME, 1, 6, 3, 4, 5, 2, 1, 0, 7 }, { 42, _T("ar_spot.zip"), _T("spotv2."), ARCADIA_GAME, 0, 7, 6, 5, 4, 3, 2, 1, 0 }, { 43, _T("ar_sprg.zip"), _T("sprg_"), ARCADIA_GAME, 1, 4, 7, 3, 0, 6, 5, 2, 1 }, { 44, _T("ar_xeon.zip"), _T("xeon_"), ARCADIA_GAME, 1, 3, 1, 2, 4, 0, 5, 6, 7 }, { 45, _T("ar_socc.zip"), _T("socc30."), ARCADIA_GAME, 2, 0, 7, 1, 6, 5, 4, 3, 2 }, { -1 } }; static uae_u8 *arbmemory, *arbbmemory; static int boot_read; #define arb_start 0x800000 #define arb_mask 0x1fffff #define allocated_arbmemory 0x200000 #define arbb_start 0xf00000 #define arbb_mask 0x7ffff #define allocated_arbbmemory 0x80000 #define nvram_offset 0x1fc000 #define bios_offset 0x180000 #define NVRAM_SIZE 0x4000 static int nvwrite; static int load_rom8 (TCHAR *xpath, uae_u8 *mem, int extra) { struct zfile *zf; TCHAR path[MAX_DPATH]; int i; uae_u8 *tmp = xmalloc (uae_u8, 131072); const TCHAR *bin = extra == 1 ? _T(".bin") : _T(""); memset (tmp, 0, 131072); _stprintf (path, _T("%s%s%s"), xpath, extra == 3 ? _T("-hi") : (extra == 2 ? _T("hi") : _T("h")), bin); zf = zfile_fopen (path, _T("rb"), ZFD_NORMAL); if (!zf) goto end; if (zfile_fread (tmp, 65536, 1, zf) == 0) goto end; zfile_fclose (zf); _stprintf (path, _T("%s%s%s"), xpath, extra == 3 ? _T("-lo") : (extra == 2 ? _T("lo") : _T("l")), bin); zf = zfile_fopen (path, _T("rb"), ZFD_NORMAL); if (!zf) goto end; if (zfile_fread (tmp + 65536, 65536, 1, zf) == 0) goto end; zfile_fclose (zf); for (i = 0; i < 65536; i++) { mem[i * 2 + 0] = tmp[i]; mem[i * 2 + 1] = tmp[i + 65536]; } xfree (tmp); return 1; end: xfree (tmp); return 0; } static struct arcadiarom *is_arcadia (const TCHAR *xpath, int cnt) { TCHAR path[MAX_DPATH], *p; struct arcadiarom *rom = NULL; int i; _tcscpy (path, xpath); p = path; for (i = _tcslen (xpath) - 1; i > 0; i--) { if (path[i] == '\\' || path[i] == '/') { path[i++] = 0; p = path + i; break; } } for (i = 0; roms[i].romid > 0; i++) { if (!_tcsicmp (p, roms[i].name) || !_tcsicmp (p, roms[i].rom)) { if (cnt > 0) { cnt--; continue; } rom = &roms[i]; break; } } if (!rom) return 0; return rom; } static int load_roms (struct arcadiarom *rom) { TCHAR path[MAX_DPATH], path2[MAX_DPATH], path3[MAX_DPATH], *p; int i, offset; TCHAR *xpath; if (rom->type == ARCADIA_BIOS) xpath = currprefs.romextfile; else xpath = currprefs.cartfile; _tcscpy (path3, xpath); p = path3 + _tcslen (path3) - 1; while (p > path3) { if (p[0] == '\\' || p[0] == '/') { *p = 0; break; } p--; } if (p == path3) *p = 0; _tcscpy (path2, xpath); offset = 0; if (rom->type == ARCADIA_BIOS) offset = bios_offset; i = 0; for (;;) { _stprintf (path, _T("%s%d"), xpath, i + 1); if (!load_rom8 (path, arbmemory + 2 * 65536 * i + offset, rom->extra)) { if (i == 0) write_log (_T("Arcadia: %s rom load failed ('%s')\n"), rom->type == ARCADIA_BIOS ? _T("bios") : _T("game"), path); break; } i++; } if (i == 0) return 0; write_log (_T("Arcadia: %s rom %s loaded\n"), rom->type == ARCADIA_BIOS ? _T("bios") : _T("game"), xpath); return 1; } static uae_u8 bswap (uae_u8 v,int b7,int b6,int b5,int b4,int b3,int b2,int b1,int b0) { uae_u8 b = 0; b |= ((v >> b7) & 1) << 7; b |= ((v >> b6) & 1) << 6; b |= ((v >> b5) & 1) << 5; b |= ((v >> b4) & 1) << 4; b |= ((v >> b3) & 1) << 3; b |= ((v >> b2) & 1) << 2; b |= ((v >> b1) & 1) << 1; b |= ((v >> b0) & 1) << 0; return b; } static void decrypt_roms (struct arcadiarom *rom) { int i, start = 1, end = 0x20000; if (rom->type == ARCADIA_BIOS) { start += bios_offset; end += bios_offset; } for (i = start; i < end; i += 2) { arbmemory[i] = bswap (arbmemory[i], rom->b7,rom->b6,rom->b5,rom->b4,rom->b3,rom->b2,rom->b1,rom->b0); if (rom->extra == 2) arbmemory[i - 1] = bswap (arbmemory[i - 1],7,6,5,4,3,2,1,0); } } static uae_u32 REGPARAM2 arbb_lget (uaecptr addr) { uae_u32 *m; addr -= arbb_start & arbb_mask; addr &= arbb_mask; m = (uae_u32 *)(arbbmemory + addr); return do_get_mem_long (m); } static uae_u32 REGPARAM2 arbb_wget (uaecptr addr) { uae_u16 *m; addr -= arbb_start & arbb_mask; addr &= arbb_mask; m = (uae_u16 *)(arbbmemory + addr); return do_get_mem_word (m); } static uae_u32 REGPARAM2 arbb_bget (uaecptr addr) { addr -= arbb_start & arbb_mask; addr &= arbb_mask; return arbbmemory[addr]; } static void REGPARAM2 arbb_lput (uaecptr addr, uae_u32 l) { } static void REGPARAM2 arbb_wput (uaecptr addr, uae_u32 w) { } static void REGPARAM2 arbb_bput (uaecptr addr, uae_u32 b) { } static addrbank arcadia_boot_bank = { arbb_lget, arbb_wget, arbb_bget, arbb_lput, arbb_wput, arbb_bput, default_xlate, default_check, NULL, _T("Arcadia BIOS"), arbb_lget, arbb_wget, ABFLAG_ROM }; static uae_u32 REGPARAM2 arb_lget (uaecptr addr) { uae_u32 *m; addr -= arb_start & arb_mask; addr &= arb_mask; m = (uae_u32 *)(arbmemory + addr); return do_get_mem_long (m); } static uae_u32 REGPARAM2 arb_wget (uaecptr addr) { uae_u16 *m; addr -= arb_start & arb_mask; addr &= arb_mask; m = (uae_u16 *)(arbmemory + addr); return do_get_mem_word (m); } static uae_u32 REGPARAM2 arb_bget (uaecptr addr) { addr -= arb_start & arb_mask; addr &= arb_mask; return arbmemory[addr]; } static void REGPARAM2 arb_lput (uaecptr addr, uae_u32 l) { uae_u32 *m; addr -= arb_start & arb_mask; addr &= arb_mask; if (addr >= nvram_offset) { m = (uae_u32 *)(arbmemory + addr); do_put_mem_long (m, l); nvwrite++; } } static void REGPARAM2 arb_wput (uaecptr addr, uae_u32 w) { uae_u16 *m; addr -= arb_start & arb_mask; addr &= arb_mask; if (addr >= nvram_offset) { m = (uae_u16 *)(arbmemory + addr); do_put_mem_word (m, w); nvwrite++; if (addr == 0x1ffffe) multigame(w); } } static void REGPARAM2 arb_bput (uaecptr addr, uae_u32 b) { addr -= arb_start & arb_mask; addr &= arb_mask; if (addr >= nvram_offset) { arbmemory[addr] = b; nvwrite++; } } static addrbank arcadia_rom_bank = { arb_lget, arb_wget, arb_bget, arb_lput, arb_wput, arb_bput, default_xlate, default_check, NULL, _T("Arcadia Game ROM"), arb_lget, arb_wget, ABFLAG_ROM }; static void multigame(int v) { if (v != 0) map_banks (&kickmem_bank, arb_start >> 16, 8, 0); else map_banks (&arcadia_rom_bank, arb_start >> 16, allocated_arbmemory >> 16, 0); } int is_arcadia_rom (const TCHAR *path) { struct arcadiarom *rom; rom = is_arcadia (path, 0); if (!rom || rom->type == NO_ARCADIA_ROM) return NO_ARCADIA_ROM; if (rom->type == ARCADIA_BIOS) { arcadia_bios = rom; return ARCADIA_BIOS; } arcadia_game = rom; return ARCADIA_GAME; } static void nvram_write (void) { struct zfile *f = zfile_fopen (currprefs.flashfile, _T("rb+"), ZFD_NORMAL); if (!f) { f = zfile_fopen (currprefs.flashfile, _T("wb"), 0); if (!f) return; } zfile_fwrite (arbmemory + nvram_offset, NVRAM_SIZE, 1, f); zfile_fclose (f); } static void nvram_read (void) { struct zfile *f; f = zfile_fopen (currprefs.flashfile, _T("rb"), ZFD_NORMAL); memset (arbmemory + nvram_offset, 0, NVRAM_SIZE); if (!f) return; zfile_fread (arbmemory + nvram_offset, NVRAM_SIZE, 1, f); zfile_fclose (f); } void arcadia_unmap (void) { xfree (arbmemory); arbmemory = NULL; arcadia_bios = NULL; arcadia_game = NULL; } int arcadia_map_banks (void) { if (!arcadia_bios) return 0; arbmemory = xmalloc (uae_u8, allocated_arbmemory); arbbmemory = arbmemory + bios_offset; memset (arbmemory, 0, allocated_arbmemory); if (!load_roms (arcadia_bios)) { arcadia_unmap (); return 0; } if (arcadia_game) load_roms (arcadia_game); decrypt_roms (arcadia_bios); if (arcadia_game) decrypt_roms (arcadia_game); nvram_read (); multigame(0); map_banks (&arcadia_boot_bank, 0xf0, 8, 0); return 1; } void arcadia_vsync (void) { static int cnt; cnt--; if (cnt > 0) return; cnt = 50; if (!nvwrite) return; nvram_write (); nvwrite = 0; } uae_u8 arcadia_parport (int port, uae_u8 pra, uae_u8 dra) { uae_u8 v; v = (pra & dra) | (dra ^ 0xff); if (port) { if (dra & 1) arcadia_coin[0] = arcadia_coin[1] = 0; return 0; } v = 0; v |= (arcadia_flag & 1) ? 0 : 2; v |= (arcadia_flag & 2) ? 0 : 4; v |= (arcadia_flag & 4) ? 0 : 8; v |= (arcadia_coin[0] & 3) << 4; v |= (arcadia_coin[1] & 3) << 6; return v; } struct romdata *scan_arcadia_rom (TCHAR *path, int cnt) { struct romdata *rd = 0; struct romlist **arc_rl; struct arcadiarom *arcadia_rom; int i; arcadia_rom = is_arcadia (path, cnt); if (arcadia_rom) { arc_rl = getarcadiaroms(); for (i = 0; arc_rl[i]; i++) { if (arc_rl[i]->rd->id == arcadia_rom->romid) { rd = arc_rl[i]->rd; _tcscat (path, _T("/")); _tcscat (path, arcadia_rom->rom); break; } } xfree (arc_rl); } return rd; } fs-uae-2.2.3+dfsg/src/amax.cpp0000644000175000017500000000574712162366655016313 0ustar glaubitzglaubitz #include "sysconfig.h" #include "sysdeps.h" #include "options.h" #include "zfile.h" #include "amax.h" #include "custom.h" #include "uae/memory.h" #include "newcpu.h" static int data_scramble[8] = { 3, 2, 4, 5, 7, 6, 0, 1 }; static int addr_scramble[16] = { 14, 12, 2, 10, 15, 13, 1, 0, 7, 6, 5, 4, 8, 9, 11, 3 }; static int romptr; static uae_u8 *rom; static int rom_size, rom_oddeven; static uae_u8 data; static uae_u8 bfd100, bfe001; static uae_u8 dselect; #define AMAX_LOG 0 static void load_byte (void) { int addr, i; uae_u8 val, v; v = 0xff; addr = 0; for (i = 0; i < 16; i++) { if (romptr & (1 << i)) addr |= 1 << addr_scramble[i]; } if (rom_oddeven < 0) { val = v; } else { v = rom[addr * 2 + rom_oddeven]; val = 0; for (i = 0; i < 8; i++) { if (v & (1 << data_scramble[i])) val |= 1 << i; } } data = val; if (AMAX_LOG > 0) write_log (_T("AMAX: load byte, rom=%d addr=%06x (%06x) data=%02x (%02x) PC=%08X\n"), rom_oddeven, romptr, addr, v, val, M68K_GETPC); } static void amax_check (void) { /* DIR low = reset address counter */ if ((bfd100 & 2)) { if (romptr && AMAX_LOG > 0) write_log (_T("AMAX: counter reset PC=%08X\n"), M68K_GETPC); romptr = 0; } } static int dwlastbit; void amax_diskwrite (uae_u16 w) { int i; /* this is weird, 1->0 transition in disk write line increases address pointer.. */ for (i = 0; i < 16; i++) { if (dwlastbit && !(w & 0x8000)) { romptr++; if (AMAX_LOG > 0) write_log (_T("AMAX: counter increase %d PC=%08X\n"), romptr, M68K_GETPC); } dwlastbit = (w & 0x8000) ? 1 : 0; w <<= 1; } romptr &= rom_size - 1; amax_check (); } static uae_u8 bfe001_ov; void amax_bfe001_write (uae_u8 pra, uae_u8 dra) { uae_u8 v = dra & pra; bfe001 = v; /* CHNG low -> high: shift data register */ if ((v & 4) && !(bfe001_ov & 4)) { data <<= 1; data |= 1; if (AMAX_LOG > 0) write_log (_T("AMAX: data shifted\n")); } /* TK0 = even, WPRO = odd */ rom_oddeven = -1; if ((v & (8 | 16)) != (8 | 16)) { rom_oddeven = 0; if (!(v & 16)) rom_oddeven = 1; } bfe001_ov = v; amax_check (); } void amax_disk_select (uae_u8 v, uae_u8 ov) { bfd100 = v; if (!(bfd100 & dselect) && (ov & dselect)) load_byte (); amax_check (); } uae_u8 amax_disk_status (void) { uae_u8 st = 0x3c; if (!(data & 0x80)) st &= ~0x20; return st; } void amax_reset (void) { romptr = 0; rom_oddeven = 0; bfe001_ov = 0; dwlastbit = 0; data = 0xff; xfree (rom); rom = NULL; dselect = 0; } void amax_init (void) { struct zfile *z; if (!currprefs.amaxromfile[0]) return; amax_reset (); z = zfile_fopen (currprefs.amaxromfile, _T("rb"), ZFD_NORMAL); if (!z) { write_log (_T("AMAX: failed to load rom '%s'\n"), currprefs.amaxromfile); return; } zfile_fseek (z, 0, SEEK_END); rom_size = zfile_ftell (z); zfile_fseek (z, 0, SEEK_SET); rom = xmalloc (uae_u8, rom_size); zfile_fread (rom, rom_size, 1, z); zfile_fclose (z); write_log (_T("AMAX: '%s' loaded, %d bytes\n"), currprefs.amaxromfile, rom_size); dselect = 0x20; } fs-uae-2.2.3+dfsg/src/newcpu.cpp0000644000175000017500000045411112162366655016657 0ustar glaubitzglaubitz/* * UAE - The Un*x Amiga Emulator * * MC68000 emulation * * (c) 1995 Bernd Schmidt */ #define MOVEC_DEBUG 0 #define MMUOP_DEBUG 2 #define DEBUG_CD32CDTVIO 0 #define EXCEPTION3_DEBUG 0 #define CPUTRACE_DEBUG 0 #include "sysconfig.h" #include "sysdeps.h" #include "options.h" #include "events.h" #include "uae.h" #include "uae/memory.h" #include "custom.h" #include "newcpu.h" #include "cpummu.h" #include "cpu_prefetch.h" #include "autoconf.h" #include "traps.h" #include "debug.h" #include "gui.h" #include "savestate.h" #include "blitter.h" #include "ar.h" #include "gayle.h" #include "cia.h" #include "inputrecord.h" #include "inputdevice.h" #ifdef JIT #include "jit/compemu.h" #include #else /* Need to have these somewhere */ static void build_comp (void) {} bool check_prefs_changed_comp (void) { return false; } #endif /* For faster JIT cycles handling */ signed long pissoff = 0; /* Opcode of faulting instruction */ static uae_u16 last_op_for_exception_3; /* PC at fault time */ static uaecptr last_addr_for_exception_3; /* Address that generated the exception */ static uaecptr last_fault_for_exception_3; /* read (0) or write (1) access */ static int last_writeaccess_for_exception_3; /* instruction (1) or data (0) access */ static int last_instructionaccess_for_exception_3; int mmu_enabled, mmu_triggered; int cpu_cycles; static int baseclock; int cpucycleunit; int cpu_tracer; const int areg_byteinc[] = { 1, 1, 1, 1, 1, 1, 1, 2 }; const int imm8_table[] = { 8, 1, 2, 3, 4, 5, 6, 7 }; int movem_index1[256]; int movem_index2[256]; int movem_next[256]; cpuop_func *cpufunctbl[65536]; struct mmufixup mmufixup[2]; extern uae_u32 get_fpsr (void); #define COUNT_INSTRS 0 #define MC68060_PCR 0x04300000 #define MC68EC060_PCR 0x04310000 static uae_u64 srp_030, crp_030; static uae_u32 tt0_030, tt1_030, tc_030; static uae_u16 mmusr_030; static struct cache020 caches020[CACHELINES020]; static struct cache030 icaches030[CACHELINES030]; static struct cache030 dcaches030[CACHELINES030]; static struct cache040 caches040[CACHESETS040]; #if COUNT_INSTRS static unsigned long int instrcount[65536]; static uae_u16 opcodenums[65536]; static int compfn (const void *el1, const void *el2) { return instrcount[*(const uae_u16 *)el1] < instrcount[*(const uae_u16 *)el2]; } static TCHAR *icountfilename (void) { TCHAR *name = getenv ("INSNCOUNT"); if (name) return name; return COUNT_INSTRS == 2 ? "frequent.68k" : "insncount"; } void dump_counts (void) { FILE *f = fopen (icountfilename (), "w"); unsigned long int total; int i; write_log (_T("Writing instruction count file...\n")); for (i = 0; i < 65536; i++) { opcodenums[i] = i; total += instrcount[i]; } qsort (opcodenums, 65536, sizeof (uae_u16), compfn); fprintf (f, "Total: %lu\n", total); for (i=0; i < 65536; i++) { unsigned long int cnt = instrcount[opcodenums[i]]; struct instr *dp; struct mnemolookup *lookup; if (!cnt) break; dp = table68k + opcodenums[i]; for (lookup = lookuptab;lookup->mnemo != dp->mnemo; lookup++) ; fprintf (f, "%04x: %lu %s\n", opcodenums[i], cnt, lookup->name); } fclose (f); } #else void dump_counts (void) { } #endif /* ok, all this to "record" current instruction state for later 100% cycle-exact restoring */ static uae_u32 (*x2_prefetch)(int); static uae_u32 (*x2_prefetch_long)(int); static uae_u32 (*x2_next_iword)(void); static uae_u32 (*x2_next_ilong)(void); static uae_u32 (*x2_get_ilong)(int); static uae_u32 (*x2_get_iword)(int); static uae_u32 (*x2_get_ibyte)(int); static uae_u32 (*x2_get_long)(uaecptr); static uae_u32 (*x2_get_word)(uaecptr); static uae_u32 (*x2_get_byte)(uaecptr); static void (*x2_put_long)(uaecptr,uae_u32); static void (*x2_put_word)(uaecptr,uae_u32); static void (*x2_put_byte)(uaecptr,uae_u32); static void (*x2_do_cycles)(unsigned long); static void (*x2_do_cycles_pre)(unsigned long); static void (*x2_do_cycles_post)(unsigned long, uae_u32); uae_u32 (*x_prefetch)(int); uae_u32 (*x_prefetch_long)(int); uae_u32 (*x_next_iword)(void); uae_u32 (*x_next_ilong)(void); uae_u32 (*x_get_ilong)(int); uae_u32 (*x_get_iword)(int); uae_u32 (*x_get_ibyte)(int); uae_u32 (*x_get_long)(uaecptr); uae_u32 (*x_get_word)(uaecptr); uae_u32 (*x_get_byte)(uaecptr); void (*x_put_long)(uaecptr,uae_u32); void (*x_put_word)(uaecptr,uae_u32); void (*x_put_byte)(uaecptr,uae_u32); void (*x_do_cycles)(unsigned long); void (*x_do_cycles_pre)(unsigned long); void (*x_do_cycles_post)(unsigned long, uae_u32); static struct cputracestruct cputrace; #if CPUTRACE_DEBUG static void validate_trace (void) { for (int i = 0; i < cputrace.memoryoffset; i++) { struct cputracememory *ctm = &cputrace.ctm[i]; if (ctm->data == 0xdeadf00d) { write_log (_T("unfinished write operation %d %08x\n"), i, ctm->addr); } } } #endif static void debug_trace (void) { if (cputrace.writecounter > 10000 || cputrace.readcounter > 10000) write_log (_T("cputrace.readcounter=%d cputrace.writecounter=%d\n"), cputrace.readcounter, cputrace.writecounter); } STATIC_INLINE void clear_trace (void) { #if CPUTRACE_DEBUG validate_trace (); #endif struct cputracememory *ctm = &cputrace.ctm[cputrace.memoryoffset++]; ctm->mode = 0; cputrace.cyclecounter = 0; cputrace.cyclecounter_pre = cputrace.cyclecounter_post = 0; } static void set_trace (uaecptr addr, int accessmode, int size) { #if CPUTRACE_DEBUG validate_trace (); #endif struct cputracememory *ctm = &cputrace.ctm[cputrace.memoryoffset++]; ctm->addr = addr; ctm->data = 0xdeadf00d; ctm->mode = accessmode | (size << 4); cputrace.cyclecounter_pre = -1; if (accessmode == 1) cputrace.writecounter++; else cputrace.readcounter++; debug_trace (); } static void add_trace (uaecptr addr, uae_u32 val, int accessmode, int size) { if (cputrace.memoryoffset < 1) { #if CPUTRACE_DEBUG write_log (_T("add_trace memoryoffset=%d!\n"), cputrace.memoryoffset); #endif return; } int mode = accessmode | (size << 4); struct cputracememory *ctm = &cputrace.ctm[cputrace.memoryoffset - 1]; ctm->addr = addr; ctm->data = val; if (!ctm->mode) { ctm->mode = mode; if (accessmode == 1) cputrace.writecounter++; else cputrace.readcounter++; } debug_trace (); cputrace.cyclecounter_pre = cputrace.cyclecounter_post = 0; } static void check_trace2 (void) { if (cputrace.readcounter || cputrace.writecounter || cputrace.cyclecounter || cputrace.cyclecounter_pre || cputrace.cyclecounter_post) write_log (_T("CPU tracer invalid state during playback!\n")); } static bool check_trace (void) { if (!cpu_tracer) return true; if (!cputrace.readcounter && !cputrace.writecounter && !cputrace.cyclecounter) { if (cpu_tracer != -2) { write_log (_T("CPU trace: dma_cycle() enabled. %08x %08x NOW=%08X\n"), cputrace.cyclecounter_pre, cputrace.cyclecounter_post, get_cycles ()); cpu_tracer = -2; // dma_cycle() allowed to work now } } if (cputrace.readcounter || cputrace.writecounter || cputrace.cyclecounter || cputrace.cyclecounter_pre || cputrace.cyclecounter_post) return false; x_prefetch = x2_prefetch; x_prefetch_long = x2_prefetch_long; x_get_ilong = x2_get_ilong; x_get_iword = x2_get_iword; x_get_ibyte = x2_get_ibyte; x_next_iword = x2_next_iword; x_next_ilong = x2_next_ilong; x_put_long = x2_put_long; x_put_word = x2_put_word; x_put_byte = x2_put_byte; x_get_long = x2_get_long; x_get_word = x2_get_word; x_get_byte = x2_get_byte; x_do_cycles = x2_do_cycles; x_do_cycles_pre = x2_do_cycles_pre; x_do_cycles_post = x2_do_cycles_post; write_log (_T("CPU tracer playback complete. STARTCYCLES=%08x NOWCYCLES=%08x\n"), cputrace.startcycles, get_cycles ()); cputrace.needendcycles = 1; cpu_tracer = 0; return true; } static bool get_trace (uaecptr addr, int accessmode, int size, uae_u32 *data) { int mode = accessmode | (size << 4); for (int i = 0; i < cputrace.memoryoffset; i++) { struct cputracememory *ctm = &cputrace.ctm[i]; if (ctm->addr == addr && ctm->mode == mode) { ctm->mode = 0; write_log (_T("CPU trace: GET %d: PC=%08x %08x=%08x %d %d %08x/%08x/%08x %d/%d (%08X)\n"), i, cputrace.pc, addr, ctm->data, accessmode, size, cputrace.cyclecounter, cputrace.cyclecounter_pre, cputrace.cyclecounter_post, cputrace.readcounter, cputrace.writecounter, get_cycles ()); if (accessmode == 1) cputrace.writecounter--; else cputrace.readcounter--; if (cputrace.writecounter == 0 && cputrace.readcounter == 0) { if (cputrace.cyclecounter_post) { int c = cputrace.cyclecounter_post; cputrace.cyclecounter_post = 0; x_do_cycles (c); } else if (cputrace.cyclecounter_pre) { check_trace (); *data = ctm->data; return true; // argh, need to rerun the memory access.. } } check_trace (); *data = ctm->data; return false; } } if (cputrace.cyclecounter_post) { int c = cputrace.cyclecounter_post; cputrace.cyclecounter_post = 0; check_trace (); check_trace2 (); x_do_cycles (c); return false; } gui_message (_T("CPU trace: GET %08x %d %d NOT FOUND!\n"), addr, accessmode, size); check_trace (); *data = 0; return false; } static uae_u32 cputracefunc_x_prefetch (int o) { uae_u32 pc = m68k_getpc (); set_trace (pc + o, 2, 2); uae_u32 v = x2_prefetch (o); add_trace (pc + o, v, 2, 2); return v; } static uae_u32 cputracefunc2_x_prefetch (int o) { uae_u32 v; if (get_trace (m68k_getpc () + o, 2, 2, &v)) { v = x2_prefetch (o); check_trace2 (); } return v; } static uae_u32 cputracefunc_x_prefetch_long (int o) { uae_u32 pc = m68k_getpc (); set_trace (pc + o, 2, 4); uae_u32 v = x2_prefetch_long (o); add_trace (pc + o, v, 2, 4); return v; } static uae_u32 cputracefunc2_x_prefetch_long (int o) { uae_u32 v; if (get_trace (m68k_getpc () + o, 2, 4, &v)) { v = x2_prefetch_long (o); check_trace2 (); } return v; } static uae_u32 cputracefunc_x_next_iword (void) { uae_u32 pc = m68k_getpc (); set_trace (pc, 2, 2); uae_u32 v = x2_next_iword (); add_trace (pc, v, 2, 2); return v; } static uae_u32 cputracefunc_x_next_ilong (void) { uae_u32 pc = m68k_getpc (); set_trace (pc, 2, 4); uae_u32 v = x2_next_ilong (); add_trace (pc, v, 2, 4); return v; } static uae_u32 cputracefunc2_x_next_iword (void) { uae_u32 v; if (get_trace (m68k_getpc (), 2, 2, &v)) { v = x2_next_iword (); check_trace2 (); } return v; } static uae_u32 cputracefunc2_x_next_ilong (void) { uae_u32 v; if (get_trace (m68k_getpc (), 2, 4, &v)) { v = x2_next_ilong (); check_trace2 (); } return v; } static uae_u32 cputracefunc_x_get_ilong (int o) { uae_u32 pc = m68k_getpc (); set_trace (pc + o, 2, 4); uae_u32 v = x2_get_ilong (o); add_trace (pc + o, v, 2, 4); return v; } static uae_u32 cputracefunc_x_get_iword (int o) { uae_u32 pc = m68k_getpc (); set_trace (pc + o, 2, 2); uae_u32 v = x2_get_iword (o); add_trace (pc + o, v, 2, 2); return v; } static uae_u32 cputracefunc_x_get_ibyte (int o) { uae_u32 pc = m68k_getpc (); set_trace (pc + o, 2, 1); uae_u32 v = x2_get_ibyte (o); add_trace (pc + o, v, 2, 1); return v; } static uae_u32 cputracefunc2_x_get_ilong (int o) { uae_u32 v; if (get_trace (m68k_getpc () + o, 2, 4, &v)) { v = x2_get_ilong (o); check_trace2 (); } return v; } static uae_u32 cputracefunc2_x_get_iword (int o) { uae_u32 v; if (get_trace (m68k_getpc () + o, 2, 2, &v)) { v = x2_get_iword (o); check_trace2 (); } return v; } static uae_u32 cputracefunc2_x_get_ibyte (int o) { uae_u32 v; if (get_trace (m68k_getpc () + o, 2, 1, &v)) { v = x2_get_ibyte (o); check_trace2 (); } return v; } static uae_u32 cputracefunc_x_get_long (uaecptr o) { set_trace (o, 0, 4); uae_u32 v = x2_get_long (o); add_trace (o, v, 0, 4); return v; } static uae_u32 cputracefunc_x_get_word (uaecptr o) { set_trace (o, 0, 2); uae_u32 v = x2_get_word (o); add_trace (o, v, 0, 2); return v; } static uae_u32 cputracefunc_x_get_byte (uaecptr o) { set_trace (o, 0, 1); uae_u32 v = x2_get_byte (o); add_trace (o, v, 0, 1); return v; } static uae_u32 cputracefunc2_x_get_long (uaecptr o) { uae_u32 v; if (get_trace (o, 0, 4, &v)) { v = x2_get_long (o); check_trace2 (); } return v; } static uae_u32 cputracefunc2_x_get_word (uaecptr o) { uae_u32 v; if (get_trace (o, 0, 2, &v)) { v = x2_get_word (o); check_trace2 (); } return v; } static uae_u32 cputracefunc2_x_get_byte (uaecptr o) { uae_u32 v; if (get_trace (o, 0, 1, &v)) { v = x2_get_byte (o); check_trace2 (); } return v; } static void cputracefunc_x_put_long (uaecptr o, uae_u32 val) { clear_trace (); add_trace (o, val, 1, 4); x2_put_long (o, val); } static void cputracefunc_x_put_word (uaecptr o, uae_u32 val) { clear_trace (); add_trace (o, val, 1, 2); x2_put_word (o, val); } static void cputracefunc_x_put_byte (uaecptr o, uae_u32 val) { clear_trace (); add_trace (o, val, 1, 1); x2_put_byte (o, val); } static void cputracefunc2_x_put_long (uaecptr o, uae_u32 val) { uae_u32 v; if (get_trace (o, 1, 4, &v)) { x2_put_long (o, val); check_trace2 (); } if (v != val) write_log (_T("cputracefunc2_x_put_long %d <> %d\n"), v, val); } static void cputracefunc2_x_put_word (uaecptr o, uae_u32 val) { uae_u32 v; if (get_trace (o, 1, 2, &v)) { x2_put_word (o, val); check_trace2 (); } if (v != val) write_log (_T("cputracefunc2_x_put_word %d <> %d\n"), v, val); } static void cputracefunc2_x_put_byte (uaecptr o, uae_u32 val) { uae_u32 v; if (get_trace (o, 1, 1, &v)) { x2_put_byte (o, val); check_trace2 (); } if (v != val) write_log (_T("cputracefunc2_x_put_byte %d <> %d\n"), v, val); } static void cputracefunc_x_do_cycles (unsigned long cycles) { while (cycles >= CYCLE_UNIT) { cputrace.cyclecounter += CYCLE_UNIT; cycles -= CYCLE_UNIT; x2_do_cycles (CYCLE_UNIT); } if (cycles > 0) { cputrace.cyclecounter += cycles; x2_do_cycles (cycles); } } static void cputracefunc2_x_do_cycles (unsigned long cycles) { if (cputrace.cyclecounter > cycles) { cputrace.cyclecounter -= cycles; return; } cycles -= cputrace.cyclecounter; cputrace.cyclecounter = 0; check_trace (); x_do_cycles = x2_do_cycles; if (cycles > 0) x_do_cycles (cycles); } static void cputracefunc_x_do_cycles_pre (unsigned long cycles) { cputrace.cyclecounter_post = 0; cputrace.cyclecounter_pre = 0; while (cycles >= CYCLE_UNIT) { cycles -= CYCLE_UNIT; cputrace.cyclecounter_pre += CYCLE_UNIT; x2_do_cycles (CYCLE_UNIT); } if (cycles > 0) { x2_do_cycles (cycles); cputrace.cyclecounter_pre += cycles; } cputrace.cyclecounter_pre = 0; } // cyclecounter_pre = how many cycles we need to SWALLOW // -1 = rerun whole access static void cputracefunc2_x_do_cycles_pre (unsigned long cycles) { if (cputrace.cyclecounter_pre == -1) { cputrace.cyclecounter_pre = 0; check_trace (); check_trace2 (); x_do_cycles (cycles); return; } if (cputrace.cyclecounter_pre > cycles) { cputrace.cyclecounter_pre -= cycles; return; } cycles -= cputrace.cyclecounter_pre; cputrace.cyclecounter_pre = 0; check_trace (); if (cycles > 0) x_do_cycles (cycles); } static void cputracefunc_x_do_cycles_post (unsigned long cycles, uae_u32 v) { if (cputrace.memoryoffset < 1) { #if CPUTRACE_DEBUG write_log (_T("cputracefunc_x_do_cycles_post memoryoffset=%d!\n"), cputrace.memoryoffset); #endif return; } struct cputracememory *ctm = &cputrace.ctm[cputrace.memoryoffset - 1]; ctm->data = v; cputrace.cyclecounter_post = cycles; cputrace.cyclecounter_pre = 0; while (cycles >= CYCLE_UNIT) { cycles -= CYCLE_UNIT; cputrace.cyclecounter_post -= CYCLE_UNIT; x2_do_cycles (CYCLE_UNIT); } if (cycles > 0) { cputrace.cyclecounter_post -= cycles; x2_do_cycles (cycles); } cputrace.cyclecounter_post = 0; } // cyclecounter_post = how many cycles we need to WAIT static void cputracefunc2_x_do_cycles_post (unsigned long cycles, uae_u32 v) { uae_u32 c; if (cputrace.cyclecounter_post) { c = cputrace.cyclecounter_post; cputrace.cyclecounter_post = 0; } else { c = cycles; } check_trace (); if (c > 0) x_do_cycles (c); } static void do_cycles_post (unsigned long cycles, uae_u32 v) { do_cycles (cycles); } static void do_cycles_ce_post (unsigned long cycles, uae_u32 v) { do_cycles_ce (cycles); } // indirect memory access functions static void set_x_funcs (void) { if (currprefs.mmu_model) { x_prefetch = get_iword_mmu; x_prefetch_long = get_ilong_mmu; x_get_ilong = get_ilong_mmu; x_get_iword = get_iword_mmu; x_get_ibyte = get_ibyte_mmu; x_next_iword = next_iword_mmu; x_next_ilong = next_ilong_mmu; x_put_long = put_long_mmu; x_put_word = put_word_mmu; x_put_byte = put_byte_mmu; x_get_long = get_long_mmu; x_get_word = get_word_mmu; x_get_byte = get_byte_mmu; x_do_cycles = do_cycles; x_do_cycles_pre = do_cycles; x_do_cycles_post = do_cycles_post; } else if (currprefs.cpu_model < 68020) { if (currprefs.cpu_cycle_exact) { x_prefetch = get_word_ce000_prefetch; x_prefetch_long = NULL; x_get_ilong = NULL; x_get_iword = get_wordi_ce000; x_get_ibyte = NULL; x_next_iword = NULL; x_next_ilong = NULL; x_put_long = put_long_ce000; x_put_word = put_word_ce000; x_put_byte = put_byte_ce000; x_get_long = get_long_ce000; x_get_word = get_word_ce000; x_get_byte = get_byte_ce000; x_do_cycles = do_cycles_ce; x_do_cycles_pre = do_cycles_ce; x_do_cycles_post = do_cycles_ce_post; } else if (currprefs.cpu_compatible) { x_prefetch = get_word_prefetch; x_prefetch_long = get_long_prefetch; x_get_ilong = NULL; x_get_iword = get_iword; x_get_ibyte = get_ibyte; x_next_iword = NULL; x_next_ilong = NULL; x_put_long = put_long; x_put_word = put_word; x_put_byte = put_byte; x_get_long = get_long; x_get_word = get_word; x_get_byte = get_byte; x_do_cycles = do_cycles; x_do_cycles_pre = do_cycles; x_do_cycles_post = do_cycles_post; } else { x_prefetch = NULL; x_prefetch_long = NULL; x_get_ilong = get_ilong; x_get_iword = get_iword; x_get_ibyte = get_ibyte; x_next_iword = next_iword; x_next_ilong = next_ilong; x_put_long = put_long; x_put_word = put_word; x_put_byte = put_byte; x_get_long = get_long; x_get_word = get_word; x_get_byte = get_byte; x_do_cycles = do_cycles; x_do_cycles_pre = do_cycles; x_do_cycles_post = do_cycles_post; } } else if (!currprefs.cpu_cycle_exact) { x_prefetch = NULL; x_prefetch_long = NULL; x_get_ilong = get_ilong; x_get_iword = get_iword; x_get_ibyte = get_ibyte; x_next_iword = next_iword; x_next_ilong = next_ilong; x_put_long = put_long; x_put_word = put_word; x_put_byte = put_byte; x_get_long = get_long; x_get_word = get_word; x_get_byte = get_byte; x_do_cycles = do_cycles; x_do_cycles_pre = do_cycles; x_do_cycles_post = do_cycles_post; } else if (currprefs.cpu_model == 68020) { x_prefetch = get_word_ce020_prefetch; x_prefetch_long = NULL; x_get_ilong = get_long_ce020_prefetch; x_get_iword = get_word_ce020_prefetch; x_get_ibyte = NULL; x_next_iword = next_iword_020ce; x_next_ilong = next_ilong_020ce; x_put_long = put_long_ce020; x_put_word = put_word_ce020; x_put_byte = put_byte_ce020; x_get_long = get_long_ce020; x_get_word = get_word_ce020; x_get_byte = get_byte_ce020; x_do_cycles = do_cycles_ce; x_do_cycles_pre = do_cycles_ce; x_do_cycles_post = do_cycles_ce_post; } else { x_prefetch = get_word_ce030_prefetch; x_prefetch_long = NULL; x_get_ilong = get_long_ce030_prefetch; x_get_iword = get_word_ce030_prefetch; x_get_ibyte = NULL; x_next_iword = next_iword_030ce; x_next_ilong = next_ilong_030ce; x_put_long = put_long_ce030; x_put_word = put_word_ce030; x_put_byte = put_byte_ce030; x_get_long = get_long_ce030; x_get_word = get_word_ce030; x_get_byte = get_byte_ce030; x_do_cycles = do_cycles_ce; x_do_cycles_pre = do_cycles_ce; x_do_cycles_post = do_cycles_ce_post; } x2_prefetch = x_prefetch; x2_prefetch_long = x_prefetch_long; x2_get_ilong = x_get_ilong; x2_get_iword = x_get_iword; x2_get_ibyte = x_get_ibyte; x2_next_iword = x_next_iword; x2_next_ilong = x_next_ilong; x2_put_long = x_put_long; x2_put_word = x_put_word; x2_put_byte = x_put_byte; x2_get_long = x_get_long; x2_get_word = x_get_word; x2_get_byte = x_get_byte; x2_do_cycles = x_do_cycles; x2_do_cycles_pre = x_do_cycles_pre; x2_do_cycles_post = x_do_cycles_post; if (cpu_tracer > 0) { x_prefetch = cputracefunc_x_prefetch; x_prefetch_long = cputracefunc_x_prefetch_long; x_get_ilong = cputracefunc_x_get_ilong; x_get_iword = cputracefunc_x_get_iword; x_get_ibyte = cputracefunc_x_get_ibyte; x_next_iword = cputracefunc_x_next_iword; x_next_ilong = cputracefunc_x_next_ilong; x_put_long = cputracefunc_x_put_long; x_put_word = cputracefunc_x_put_word; x_put_byte = cputracefunc_x_put_byte; x_get_long = cputracefunc_x_get_long; x_get_word = cputracefunc_x_get_word; x_get_byte = cputracefunc_x_get_byte; x_do_cycles = cputracefunc_x_do_cycles; x_do_cycles_pre = cputracefunc_x_do_cycles_pre; x_do_cycles_post = cputracefunc_x_do_cycles_post; } else if (cpu_tracer < 0) { if (!check_trace ()) { x_prefetch = cputracefunc2_x_prefetch; x_prefetch_long = cputracefunc2_x_prefetch_long; x_get_ilong = cputracefunc2_x_get_ilong; x_get_iword = cputracefunc2_x_get_iword; x_get_ibyte = cputracefunc2_x_get_ibyte; x_next_iword = cputracefunc2_x_next_iword; x_next_ilong = cputracefunc2_x_next_ilong; x_put_long = cputracefunc2_x_put_long; x_put_word = cputracefunc2_x_put_word; x_put_byte = cputracefunc2_x_put_byte; x_get_long = cputracefunc2_x_get_long; x_get_word = cputracefunc2_x_get_word; x_get_byte = cputracefunc2_x_get_byte; x_do_cycles = cputracefunc2_x_do_cycles; x_do_cycles_pre = cputracefunc2_x_do_cycles_pre; x_do_cycles_post = cputracefunc2_x_do_cycles_post; } } } bool can_cpu_tracer (void) { return (currprefs.cpu_model == 68000 || currprefs.cpu_model == 68020) && currprefs.cpu_cycle_exact; } bool is_cpu_tracer (void) { return cpu_tracer > 0; } bool set_cpu_tracer (bool state) { if (cpu_tracer < 0) return false; int old = cpu_tracer; if (input_record) state = true; cpu_tracer = 0; if (state && can_cpu_tracer ()) { cpu_tracer = 1; set_x_funcs (); if (old != cpu_tracer) write_log (_T("CPU tracer enabled\n")); } if (old > 0 && state == false) { set_x_funcs (); write_log (_T("CPU tracer disabled\n")); } return is_cpu_tracer (); } static void set_cpu_caches (void) { int i; regs.prefetch020addr = 0xffffffff; regs.cacheholdingaddr020 = 0xffffffff; #ifdef JIT if (currprefs.cachesize) { if (currprefs.cpu_model < 68040) { set_cache_state (regs.cacr & 1); if (regs.cacr & 0x08) { flush_icache (0, 3); } } else { set_cache_state ((regs.cacr & 0x8000) ? 1 : 0); } } #endif if (currprefs.cpu_model == 68020) { if (regs.cacr & 0x08) { // clear instr cache for (i = 0; i < CACHELINES020; i++) caches020[i].valid = 0; } if (regs.cacr & 0x04) { // clear entry in instr cache caches020[(regs.caar >> 2) & (CACHELINES020 - 1)].valid = 0; regs.cacr &= ~0x04; } } else if (currprefs.cpu_model == 68030) { //regs.cacr |= 0x100; if (regs.cacr & 0x08) { // clear instr cache for (i = 0; i < CACHELINES030; i++) { icaches030[i].valid[0] = 0; icaches030[i].valid[1] = 0; icaches030[i].valid[2] = 0; icaches030[i].valid[3] = 0; } } if (regs.cacr & 0x04) { // clear entry in instr cache icaches030[(regs.caar >> 4) & (CACHELINES030 - 1)].valid[(regs.caar >> 2) & 3] = 0; regs.cacr &= ~0x04; } if (regs.cacr & 0x800) { // clear data cache for (i = 0; i < CACHELINES030; i++) { dcaches030[i].valid[0] = 0; dcaches030[i].valid[1] = 0; dcaches030[i].valid[2] = 0; dcaches030[i].valid[3] = 0; } regs.cacr &= ~0x800; } if (regs.cacr & 0x400) { // clear entry in data cache dcaches030[(regs.caar >> 4) & (CACHELINES030 - 1)].valid[(regs.caar >> 2) & 3] = 0; regs.cacr &= ~0x400; } } else if (currprefs.cpu_model == 68040) { if (!(regs.cacr & 0x8000)) { for (i = 0; i < CACHESETS040; i++) { caches040[i].valid[0] = 0; caches040[i].valid[1] = 0; caches040[i].valid[2] = 0; caches040[i].valid[3] = 0; } } } } STATIC_INLINE void count_instr (unsigned int opcode) { } static uae_u32 REGPARAM2 op_illg_1 (uae_u32 opcode) { op_illg (opcode); return 4; } static uae_u32 REGPARAM2 op_unimpl_1 (uae_u32 opcode) { if ((opcode & 0xf000) == 0xf000 || currprefs.cpu_model < 68060) op_illg (opcode); else op_unimpl (); return 4; } static void build_cpufunctbl (void) { int i, opcnt; unsigned long opcode; const struct cputbl *tbl = 0; int lvl; switch (currprefs.cpu_model) { #ifdef CPUEMU_0 #ifndef CPUEMU_68000_ONLY case 68060: lvl = 5; tbl = op_smalltbl_0_ff; if (currprefs.cpu_cycle_exact) tbl = op_smalltbl_22_ff; if (currprefs.mmu_model) tbl = op_smalltbl_31_ff; break; case 68040: lvl = 4; tbl = op_smalltbl_1_ff; if (currprefs.cpu_cycle_exact) tbl = op_smalltbl_23_ff; if (currprefs.mmu_model) tbl = op_smalltbl_31_ff; break; case 68030: lvl = 3; tbl = op_smalltbl_2_ff; if (currprefs.cpu_cycle_exact) tbl = op_smalltbl_24_ff; break; case 68020: lvl = 2; tbl = op_smalltbl_3_ff; #ifdef CPUEMU_20 if (currprefs.cpu_compatible) tbl = op_smalltbl_20_ff; #endif #ifdef CPUEMU_21 if (currprefs.cpu_cycle_exact) tbl = op_smalltbl_21_ff; #endif break; case 68010: lvl = 1; tbl = op_smalltbl_4_ff; break; #endif #endif default: changed_prefs.cpu_model = currprefs.cpu_model = 68000; case 68000: lvl = 0; tbl = op_smalltbl_5_ff; #ifdef CPUEMU_11 if (currprefs.cpu_compatible) tbl = op_smalltbl_11_ff; /* prefetch */ #endif #ifdef CPUEMU_12 if (currprefs.cpu_cycle_exact) tbl = op_smalltbl_12_ff; /* prefetch and cycle-exact */ #endif break; } if (tbl == 0) { write_log (_T("no CPU emulation cores available CPU=%d!"), currprefs.cpu_model); abort (); } for (opcode = 0; opcode < 65536; opcode++) cpufunctbl[opcode] = op_illg_1; for (i = 0; tbl[i].handler != NULL; i++) { opcode = tbl[i].opcode; cpufunctbl[opcode] = tbl[i].handler; } /* hack fpu to 68000/68010 mode */ if (currprefs.fpu_model && currprefs.cpu_model < 68020) { tbl = op_smalltbl_3_ff; for (i = 0; tbl[i].handler != NULL; i++) { if ((tbl[i].opcode & 0xfe00) == 0xf200) cpufunctbl[tbl[i].opcode] = tbl[i].handler; } } opcnt = 0; for (opcode = 0; opcode < 65536; opcode++) { cpuop_func *f; instr *table = &table68k[opcode]; if (table->mnemo == i_ILLG) continue; /* unimplemented opcode? */ if (table->unimpclev > 0 && lvl >= table->unimpclev) { if (currprefs.cpu_compatible && currprefs.cpu_model == 68060) { cpufunctbl[opcode] = op_unimpl_1; } else { cpufunctbl[opcode] = op_illg_1; } continue; } if (currprefs.fpu_model && currprefs.cpu_model < 68020) { /* more hack fpu to 68000/68010 mode */ if (table->clev > lvl && (opcode & 0xfe00) != 0xf200) continue; } else if (table->clev > lvl) { continue; } if (table->handler != -1) { int idx = table->handler; f = cpufunctbl[idx]; if (f == op_illg_1) abort (); cpufunctbl[opcode] = f; opcnt++; } } write_log (_T("Building CPU, %d opcodes (%d %d %d)\n"), opcnt, lvl, currprefs.cpu_cycle_exact ? -1 : currprefs.cpu_compatible ? 1 : 0, currprefs.address_space_24); write_log (_T("CPU=%d, FPU=%d, MMU=%d, JIT%s=%d.\n"), currprefs.cpu_model, currprefs.fpu_model, currprefs.mmu_model, currprefs.cachesize ? (currprefs.compfpu ? _T("=CPU/FPU") : _T("=CPU")) : _T(""), currprefs.cachesize); #ifdef JIT build_comp (); #endif set_cpu_caches (); if (currprefs.mmu_model) { mmu_reset (); mmu_set_tc (regs.tcr); mmu_set_super (regs.s != 0); } } void fill_prefetch (void) { if (currprefs.cpu_model >= 68020) return; regs.ir = x_get_word (m68k_getpc ()); regs.irc = x_get_word (m68k_getpc () + 2); } static void fill_prefetch_quick (void) { if (currprefs.cpu_model >= 68020) return; regs.ir = get_word (m68k_getpc ()); regs.irc = get_word (m68k_getpc () + 2); } #define CYCLES_DIV 8192 static unsigned long cycles_mult; static void update_68k_cycles (void) { cycles_mult = 0; if (currprefs.m68k_speed >= 0 && !currprefs.cpu_cycle_exact) { if (currprefs.m68k_speed_throttle < 0) { cycles_mult = (unsigned long)(CYCLES_DIV * 1000 / (1000 + currprefs.m68k_speed_throttle)); } else if (currprefs.m68k_speed_throttle > 0) { cycles_mult = (unsigned long)(CYCLES_DIV * 1000 / (1000 + currprefs.m68k_speed_throttle)); } } if (currprefs.m68k_speed == 0 && currprefs.cpu_model >= 68020) { if (!cycles_mult) cycles_mult = CYCLES_DIV / 4; else cycles_mult /= 4; } currprefs.cpu_clock_multiplier = changed_prefs.cpu_clock_multiplier; currprefs.cpu_frequency = changed_prefs.cpu_frequency; baseclock = (currprefs.ntscmode ? CHIPSET_CLOCK_NTSC : CHIPSET_CLOCK_PAL) * 8; cpucycleunit = CYCLE_UNIT / 2; if (currprefs.cpu_clock_multiplier) { if (currprefs.cpu_clock_multiplier >= 256) { cpucycleunit = CYCLE_UNIT / (currprefs.cpu_clock_multiplier >> 8); } else { cpucycleunit = CYCLE_UNIT * currprefs.cpu_clock_multiplier; } } else if (currprefs.cpu_frequency) { cpucycleunit = CYCLE_UNIT * baseclock / currprefs.cpu_frequency; } if (cpucycleunit < 1) cpucycleunit = 1; if (currprefs.cpu_cycle_exact) write_log (_T("CPU cycleunit: %d (%.3f)\n"), cpucycleunit, (float)cpucycleunit / CYCLE_UNIT); config_changed = 1; } static void prefs_changed_cpu (void) { fixup_cpu (&changed_prefs); currprefs.cpu_model = changed_prefs.cpu_model; currprefs.fpu_model = changed_prefs.fpu_model; currprefs.mmu_model = changed_prefs.mmu_model; currprefs.cpu_compatible = changed_prefs.cpu_compatible; currprefs.cpu_cycle_exact = changed_prefs.cpu_cycle_exact; currprefs.blitter_cycle_exact = changed_prefs.blitter_cycle_exact; } void check_prefs_changed_cpu (void) { bool changed = false; if (!config_changed) return; #ifdef JIT changed = check_prefs_changed_comp (); #endif if (changed || currprefs.cpu_model != changed_prefs.cpu_model || currprefs.fpu_model != changed_prefs.fpu_model || currprefs.mmu_model != changed_prefs.mmu_model || currprefs.cpu_compatible != changed_prefs.cpu_compatible || currprefs.cpu_cycle_exact != changed_prefs.cpu_cycle_exact) { prefs_changed_cpu (); if (!currprefs.cpu_compatible && changed_prefs.cpu_compatible) fill_prefetch_quick (); build_cpufunctbl (); changed = true; } if (changed || currprefs.m68k_speed != changed_prefs.m68k_speed || currprefs.m68k_speed_throttle != changed_prefs.m68k_speed_throttle || currprefs.cpu_clock_multiplier != changed_prefs.cpu_clock_multiplier || currprefs.cpu_frequency != changed_prefs.cpu_frequency) { currprefs.m68k_speed = changed_prefs.m68k_speed; currprefs.m68k_speed_throttle = changed_prefs.m68k_speed_throttle; update_68k_cycles (); changed = true; } if (currprefs.cpu_idle != changed_prefs.cpu_idle) { currprefs.cpu_idle = changed_prefs.cpu_idle; } if (changed) { set_special (SPCFLAG_BRK); reset_frame_rate_hack (); } } void init_m68k (void) { int i; prefs_changed_cpu (); update_68k_cycles (); for (i = 0 ; i < 256 ; i++) { int j; for (j = 0 ; j < 8 ; j++) { if (i & (1 << j)) break; } movem_index1[i] = j; movem_index2[i] = 7-j; movem_next[i] = i & (~(1 << j)); } #if COUNT_INSTRS { FILE *f = fopen (icountfilename (), "r"); memset (instrcount, 0, sizeof instrcount); if (f) { uae_u32 opcode, count, total; TCHAR name[20]; write_log (_T("Reading instruction count file...\n")); fscanf (f, "Total: %lu\n", &total); while (fscanf (f, "%lx: %lu %s\n", &opcode, &count, name) == 3) { instrcount[opcode] = count; } fclose (f); } } #endif write_log (_T("Building CPU table for configuration: %d"), currprefs.cpu_model); regs.address_space_mask = 0xffffffff; if (currprefs.cpu_compatible) { if (currprefs.address_space_24 && currprefs.cpu_model >= 68030) currprefs.address_space_24 = false; } if (currprefs.fpu_model > 0) write_log (_T("/%d"), currprefs.fpu_model); if (currprefs.cpu_cycle_exact) { if (currprefs.cpu_model == 68000) write_log (_T(" prefetch and cycle-exact")); else write_log (_T(" ~cycle-exact")); } else if (currprefs.cpu_compatible) { if (currprefs.cpu_model <= 68020) { write_log (_T(" prefetch")); } else { write_log (_T(" fake prefetch")); } if (currprefs.cpu_model == 68060) { write_log (_T(" no unimplemented integer instructions")); } } if (currprefs.address_space_24) { regs.address_space_mask = 0x00ffffff; write_log (_T(" 24-bit")); } write_log (_T("\n")); read_table68k (); do_merges (); write_log (_T("%d CPU functions\n"), nr_cpuop_funcs); build_cpufunctbl (); set_x_funcs (); #ifdef JIT /* We need to check whether NATMEM settings have changed * before starting the CPU */ check_prefs_changed_comp (); #endif } struct regstruct regs, mmu_backup_regs; struct flag_struct regflags; static long int m68kpc_offset; #define get_ibyte_1(o) get_byte (regs.pc + (regs.pc_p - regs.pc_oldp) + (o) + 1) #define get_iword_1(o) get_word (regs.pc + (regs.pc_p - regs.pc_oldp) + (o)) #define get_ilong_1(o) get_long (regs.pc + (regs.pc_p - regs.pc_oldp) + (o)) static uae_s32 ShowEA (void *f, uae_u16 opcode, int reg, amodes mode, wordsizes size, TCHAR *buf, uae_u32 *eaddr, int safemode) { uae_u16 dp; uae_s8 disp8; uae_s16 disp16; int r; uae_u32 dispreg; uaecptr addr = 0; uae_s32 offset = 0; TCHAR buffer[80]; switch (mode){ case Dreg: _stprintf (buffer, _T("D%d"), reg); break; case Areg: _stprintf (buffer, _T("A%d"), reg); break; case Aind: _stprintf (buffer, _T("(A%d)"), reg); addr = regs.regs[reg + 8]; break; case Aipi: _stprintf (buffer, _T("(A%d)+"), reg); addr = regs.regs[reg + 8]; break; case Apdi: _stprintf (buffer, _T("-(A%d)"), reg); addr = regs.regs[reg + 8]; break; case Ad16: { TCHAR offtxt[80]; disp16 = get_iword_1 (m68kpc_offset); m68kpc_offset += 2; if (disp16 < 0) _stprintf (offtxt, _T("-$%04x"), -disp16); else _stprintf (offtxt, _T("$%04x"), disp16); addr = m68k_areg (regs, reg) + disp16; _stprintf (buffer, _T("(A%d, %s) == $%08lx"), reg, offtxt, (unsigned long)addr); } break; case Ad8r: dp = get_iword_1 (m68kpc_offset); m68kpc_offset += 2; disp8 = dp & 0xFF; r = (dp & 0x7000) >> 12; dispreg = dp & 0x8000 ? m68k_areg (regs, r) : m68k_dreg (regs, r); if (!(dp & 0x800)) dispreg = (uae_s32)(uae_s16)(dispreg); dispreg <<= (dp >> 9) & 3; if (dp & 0x100) { uae_s32 outer = 0, disp = 0; uae_s32 base = m68k_areg (regs, reg); TCHAR name[10]; _stprintf (name, _T("A%d, "), reg); if (dp & 0x80) { base = 0; name[0] = 0; } if (dp & 0x40) dispreg = 0; if ((dp & 0x30) == 0x20) { disp = (uae_s32)(uae_s16)get_iword_1 (m68kpc_offset); m68kpc_offset += 2; } if ((dp & 0x30) == 0x30) { disp = get_ilong_1 (m68kpc_offset); m68kpc_offset += 4; } base += disp; if ((dp & 0x3) == 0x2) { outer = (uae_s32)(uae_s16)get_iword_1 (m68kpc_offset); m68kpc_offset += 2; } if ((dp & 0x3) == 0x3) { outer = get_ilong_1 (m68kpc_offset); m68kpc_offset += 4; } if (!(dp & 4)) base += dispreg; if ((dp & 3) && !safemode) base = get_long (base); if (dp & 4) base += dispreg; addr = base + outer; _stprintf (buffer, _T("(%s%c%d.%c*%d+%ld)+%ld == $%08lx"), name, dp & 0x8000 ? 'A' : 'D', (int)r, dp & 0x800 ? 'L' : 'W', 1 << ((dp >> 9) & 3), disp, outer, (unsigned long)addr); } else { addr = m68k_areg (regs, reg) + (uae_s32)((uae_s8)disp8) + dispreg; _stprintf (buffer, _T("(A%d, %c%d.%c*%d, $%02x) == $%08lx"), reg, dp & 0x8000 ? 'A' : 'D', (int)r, dp & 0x800 ? 'L' : 'W', 1 << ((dp >> 9) & 3), disp8, (unsigned long)addr); } break; case PC16: addr = m68k_getpc () + m68kpc_offset; disp16 = get_iword_1 (m68kpc_offset); m68kpc_offset += 2; addr += (uae_s16)disp16; _stprintf (buffer, _T("(PC,$%04x) == $%08lx"), disp16 & 0xffff, (unsigned long)addr); break; case PC8r: addr = m68k_getpc () + m68kpc_offset; dp = get_iword_1 (m68kpc_offset); m68kpc_offset += 2; disp8 = dp & 0xFF; r = (dp & 0x7000) >> 12; dispreg = dp & 0x8000 ? m68k_areg (regs, r) : m68k_dreg (regs, r); if (!(dp & 0x800)) dispreg = (uae_s32)(uae_s16)(dispreg); dispreg <<= (dp >> 9) & 3; if (dp & 0x100) { uae_s32 outer = 0, disp = 0; uae_s32 base = addr; TCHAR name[10]; _stprintf (name, _T("PC, ")); if (dp & 0x80) { base = 0; name[0] = 0; } if (dp & 0x40) dispreg = 0; if ((dp & 0x30) == 0x20) { disp = (uae_s32)(uae_s16)get_iword_1 (m68kpc_offset); m68kpc_offset += 2; } if ((dp & 0x30) == 0x30) { disp = get_ilong_1 (m68kpc_offset); m68kpc_offset += 4; } base += disp; if ((dp & 0x3) == 0x2) { outer = (uae_s32)(uae_s16)get_iword_1 (m68kpc_offset); m68kpc_offset += 2; } if ((dp & 0x3) == 0x3) { outer = get_ilong_1 (m68kpc_offset); m68kpc_offset += 4; } if (!(dp & 4)) base += dispreg; if ((dp & 3) && !safemode) base = get_long (base); if (dp & 4) base += dispreg; addr = base + outer; _stprintf (buffer, _T("(%s%c%d.%c*%d+%ld)+%ld == $%08lx"), name, dp & 0x8000 ? 'A' : 'D', (int)r, dp & 0x800 ? 'L' : 'W', 1 << ((dp >> 9) & 3), disp, outer, (unsigned long)addr); } else { addr += (uae_s32)((uae_s8)disp8) + dispreg; _stprintf (buffer, _T("(PC, %c%d.%c*%d, $%02x) == $%08lx"), dp & 0x8000 ? 'A' : 'D', (int)r, dp & 0x800 ? 'L' : 'W', 1 << ((dp >> 9) & 3), disp8, (unsigned long)addr); } break; case absw: addr = (uae_s32)(uae_s16)get_iword_1 (m68kpc_offset); _stprintf (buffer, _T("$%08lx"), (unsigned long)addr); m68kpc_offset += 2; break; case absl: addr = get_ilong_1 (m68kpc_offset); _stprintf (buffer, _T("$%08lx"), (unsigned long)addr); m68kpc_offset += 4; break; case imm: switch (size){ case sz_byte: _stprintf (buffer, _T("#$%02x"), (unsigned int)(get_iword_1 (m68kpc_offset) & 0xff)); m68kpc_offset += 2; break; case sz_word: _stprintf (buffer, _T("#$%04x"), (unsigned int)(get_iword_1 (m68kpc_offset) & 0xffff)); m68kpc_offset += 2; break; case sz_long: _stprintf (buffer, _T("#$%08lx"), (unsigned long)(get_ilong_1 (m68kpc_offset))); m68kpc_offset += 4; break; default: break; } break; case imm0: offset = (uae_s32)(uae_s8)get_iword_1 (m68kpc_offset); m68kpc_offset += 2; _stprintf (buffer, _T("#$%02x"), (unsigned int)(offset & 0xff)); break; case imm1: offset = (uae_s32)(uae_s16)get_iword_1 (m68kpc_offset); m68kpc_offset += 2; buffer[0] = 0; _stprintf (buffer, _T("#$%04x"), (unsigned int)(offset & 0xffff)); break; case imm2: offset = (uae_s32)get_ilong_1 (m68kpc_offset); m68kpc_offset += 4; _stprintf (buffer, _T("#$%08lx"), (unsigned long)offset); break; case immi: offset = (uae_s32)(uae_s8)(reg & 0xff); _stprintf (buffer, _T("#$%08lx"), (unsigned long)offset); break; default: break; } if (buf == 0) f_out (f, _T("%s"), buffer); else _tcscat (buf, buffer); if (eaddr) *eaddr = addr; return offset; } #if 0 /* The plan is that this will take over the job of exception 3 handling - * the CPU emulation functions will just do a longjmp to m68k_go whenever * they hit an odd address. */ static int verify_ea (int reg, amodes mode, wordsizes size, uae_u32 *val) { uae_u16 dp; uae_s8 disp8; uae_s16 disp16; int r; uae_u32 dispreg; uaecptr addr; uae_s32 offset = 0; switch (mode){ case Dreg: *val = m68k_dreg (regs, reg); return 1; case Areg: *val = m68k_areg (regs, reg); return 1; case Aind: case Aipi: addr = m68k_areg (regs, reg); break; case Apdi: addr = m68k_areg (regs, reg); break; case Ad16: disp16 = get_iword_1 (m68kpc_offset); m68kpc_offset += 2; addr = m68k_areg (regs, reg) + (uae_s16)disp16; break; case Ad8r: addr = m68k_areg (regs, reg); d8r_common: dp = get_iword_1 (m68kpc_offset); m68kpc_offset += 2; disp8 = dp & 0xFF; r = (dp & 0x7000) >> 12; dispreg = dp & 0x8000 ? m68k_areg (regs, r) : m68k_dreg (regs, r); if (!(dp & 0x800)) dispreg = (uae_s32)(uae_s16)(dispreg); dispreg <<= (dp >> 9) & 3; if (dp & 0x100) { uae_s32 outer = 0, disp = 0; uae_s32 base = addr; if (dp & 0x80) base = 0; if (dp & 0x40) dispreg = 0; if ((dp & 0x30) == 0x20) { disp = (uae_s32)(uae_s16)get_iword_1 (m68kpc_offset); m68kpc_offset += 2; } if ((dp & 0x30) == 0x30) { disp = get_ilong_1 (m68kpc_offset); m68kpc_offset += 4; } base += disp; if ((dp & 0x3) == 0x2) { outer = (uae_s32)(uae_s16)get_iword_1 (m68kpc_offset); m68kpc_offset += 2; } if ((dp & 0x3) == 0x3) { outer = get_ilong_1 (m68kpc_offset); m68kpc_offset += 4; } if (!(dp & 4)) base += dispreg; if (dp & 3) base = get_long (base); if (dp & 4) base += dispreg; addr = base + outer; } else { addr += (uae_s32)((uae_s8)disp8) + dispreg; } break; case PC16: addr = m68k_getpc () + m68kpc_offset; disp16 = get_iword_1 (m68kpc_offset); m68kpc_offset += 2; addr += (uae_s16)disp16; break; case PC8r: addr = m68k_getpc () + m68kpc_offset; goto d8r_common; case absw: addr = (uae_s32)(uae_s16)get_iword_1 (m68kpc_offset); m68kpc_offset += 2; break; case absl: addr = get_ilong_1 (m68kpc_offset); m68kpc_offset += 4; break; case imm: switch (size){ case sz_byte: *val = get_iword_1 (m68kpc_offset) & 0xff; m68kpc_offset += 2; break; case sz_word: *val = get_iword_1 (m68kpc_offset) & 0xffff; m68kpc_offset += 2; break; case sz_long: *val = get_ilong_1 (m68kpc_offset); m68kpc_offset += 4; break; default: break; } return 1; case imm0: *val = (uae_s32)(uae_s8)get_iword_1 (m68kpc_offset); m68kpc_offset += 2; return 1; case imm1: *val = (uae_s32)(uae_s16)get_iword_1 (m68kpc_offset); m68kpc_offset += 2; return 1; case imm2: *val = get_ilong_1 (m68kpc_offset); m68kpc_offset += 4; return 1; case immi: *val = (uae_s32)(uae_s8)(reg & 0xff); return 1; default: addr = 0; break; } if ((addr & 1) == 0) return 1; last_addr_for_exception_3 = m68k_getpc () + m68kpc_offset; last_fault_for_exception_3 = addr; last_writeaccess_for_exception_3 = 0; last_instructionaccess_for_exception_3 = 0; return 0; } #endif int get_cpu_model (void) { return currprefs.cpu_model; } /* * extract bitfield data from memory and return it in the MSBs * bdata caches the unmodified data for put_bitfield() */ uae_u32 REGPARAM2 get_bitfield (uae_u32 src, uae_u32 bdata[2], uae_s32 offset, int width) { uae_u32 tmp, res, mask; offset &= 7; mask = 0xffffffffu << (32 - width); switch ((offset + width + 7) >> 3) { case 1: tmp = get_byte (src); res = tmp << (24 + offset); bdata[0] = tmp & ~(mask >> (24 + offset)); break; case 2: tmp = get_word (src); res = tmp << (16 + offset); bdata[0] = tmp & ~(mask >> (16 + offset)); break; case 3: tmp = get_word (src); res = tmp << (16 + offset); bdata[0] = tmp & ~(mask >> (16 + offset)); tmp = get_byte (src + 2); res |= tmp << (8 + offset); bdata[1] = tmp & ~(mask >> (8 + offset)); break; case 4: tmp = get_long (src); res = tmp << offset; bdata[0] = tmp & ~(mask >> offset); break; case 5: tmp = get_long (src); res = tmp << offset; bdata[0] = tmp & ~(mask >> offset); tmp = get_byte (src + 4); res |= tmp >> (8 - offset); bdata[1] = tmp & ~(mask << (8 - offset)); break; default: /* Panic? */ write_log (_T("get_bitfield() can't happen %d\n"), (offset + width + 7) >> 3); res = 0; break; } return res; } /* * write bitfield data (in the LSBs) back to memory, upper bits * must be cleared already. */ void REGPARAM2 put_bitfield (uae_u32 dst, uae_u32 bdata[2], uae_u32 val, uae_s32 offset, int width) { offset = (offset & 7) + width; switch ((offset + 7) >> 3) { case 1: put_byte (dst, bdata[0] | (val << (8 - offset))); break; case 2: put_word (dst, bdata[0] | (val << (16 - offset))); break; case 3: put_word (dst, bdata[0] | (val >> (offset - 16))); put_byte (dst + 2, bdata[1] | (val << (24 - offset))); break; case 4: put_long (dst, bdata[0] | (val << (32 - offset))); break; case 5: put_long (dst, bdata[0] | (val >> (offset - 32))); put_byte (dst + 4, bdata[1] | (val << (40 - offset))); break; default: write_log (_T("put_bitfield() can't happen %d\n"), (offset + 7) >> 3); break; } } uae_u32 REGPARAM2 x_get_bitfield (uae_u32 src, uae_u32 bdata[2], uae_s32 offset, int width) { uae_u32 tmp, res, mask; offset &= 7; mask = 0xffffffffu << (32 - width); switch ((offset + width + 7) >> 3) { case 1: tmp = x_get_byte (src); res = tmp << (24 + offset); bdata[0] = tmp & ~(mask >> (24 + offset)); break; case 2: tmp = x_get_word (src); res = tmp << (16 + offset); bdata[0] = tmp & ~(mask >> (16 + offset)); break; case 3: tmp = x_get_word (src); res = tmp << (16 + offset); bdata[0] = tmp & ~(mask >> (16 + offset)); tmp = x_get_byte (src + 2); res |= tmp << (8 + offset); bdata[1] = tmp & ~(mask >> (8 + offset)); break; case 4: tmp = x_get_long (src); res = tmp << offset; bdata[0] = tmp & ~(mask >> offset); break; case 5: tmp = x_get_long (src); res = tmp << offset; bdata[0] = tmp & ~(mask >> offset); tmp = x_get_byte (src + 4); res |= tmp >> (8 - offset); bdata[1] = tmp & ~(mask << (8 - offset)); break; default: /* Panic? */ write_log (_T("x_get_bitfield() can't happen %d\n"), (offset + width + 7) >> 3); res = 0; break; } return res; } void REGPARAM2 x_put_bitfield (uae_u32 dst, uae_u32 bdata[2], uae_u32 val, uae_s32 offset, int width) { offset = (offset & 7) + width; switch ((offset + 7) >> 3) { case 1: x_put_byte (dst, bdata[0] | (val << (8 - offset))); break; case 2: x_put_word (dst, bdata[0] | (val << (16 - offset))); break; case 3: x_put_word (dst, bdata[0] | (val >> (offset - 16))); x_put_byte (dst + 2, bdata[1] | (val << (24 - offset))); break; case 4: x_put_long (dst, bdata[0] | (val << (32 - offset))); break; case 5: x_put_long (dst, bdata[0] | (val >> (offset - 32))); x_put_byte (dst + 4, bdata[1] | (val << (40 - offset))); break; default: write_log (_T("x_put_bitfield() can't happen %d\n"), (offset + 7) >> 3); break; } } uae_u32 REGPARAM2 get_disp_ea_020 (uae_u32 base, uae_u32 dp) { int reg = (dp >> 12) & 15; uae_s32 regd = regs.regs[reg]; if ((dp & 0x800) == 0) regd = (uae_s32)(uae_s16)regd; regd <<= (dp >> 9) & 3; if (dp & 0x100) { uae_s32 outer = 0; if (dp & 0x80) base = 0; if (dp & 0x40) regd = 0; if ((dp & 0x30) == 0x20) base += (uae_s32)(uae_s16) next_iword (); if ((dp & 0x30) == 0x30) base += next_ilong (); if ((dp & 0x3) == 0x2) outer = (uae_s32)(uae_s16) next_iword (); if ((dp & 0x3) == 0x3) outer = next_ilong (); if ((dp & 0x4) == 0) base += regd; if (dp & 0x3) base = get_long (base); if (dp & 0x4) base += regd; return base + outer; } else { return base + (uae_s32)((uae_s8)dp) + regd; } } uae_u32 REGPARAM2 x_get_disp_ea_020 (uae_u32 base, uae_u32 dp) { int reg = (dp >> 12) & 15; int cycles = 0; uae_u32 v; uae_s32 regd = regs.regs[reg]; if ((dp & 0x800) == 0) regd = (uae_s32)(uae_s16)regd; regd <<= (dp >> 9) & 3; if (dp & 0x100) { uae_s32 outer = 0; if (dp & 0x80) base = 0; if (dp & 0x40) regd = 0; if ((dp & 0x30) == 0x20) { base += (uae_s32)(uae_s16) x_next_iword (); cycles++; } if ((dp & 0x30) == 0x30) { base += x_next_ilong (); cycles++; } if ((dp & 0x3) == 0x2) { outer = (uae_s32)(uae_s16) x_next_iword (); cycles++; } if ((dp & 0x3) == 0x3) { outer = x_next_ilong (); cycles++; } if ((dp & 0x4) == 0) { base += regd; cycles++; } if (dp & 0x3) { base = x_get_long (base); cycles++; } if (dp & 0x4) { base += regd; cycles++; } v = base + outer; } else { v = base + (uae_s32)((uae_s8)dp) + regd; } if (cycles && currprefs.cpu_cycle_exact) x_do_cycles (cycles * cpucycleunit); return v; } uae_u32 REGPARAM2 x_get_disp_ea_ce020 (uae_u32 base, uae_u32 dp) { int reg = (dp >> 12) & 15; int cycles = 0; uae_u32 v; uae_s32 regd = regs.regs[reg]; if ((dp & 0x800) == 0) regd = (uae_s32)(uae_s16)regd; regd <<= (dp >> 9) & 3; if (dp & 0x100) { uae_s32 outer = 0; if (dp & 0x80) base = 0; if (dp & 0x40) regd = 0; if ((dp & 0x30) == 0x20) { base += (uae_s32)(uae_s16) next_iword_020ce (); cycles++; } if ((dp & 0x30) == 0x30) { base += x_next_ilong (); cycles++; } if ((dp & 0x3) == 0x2) { outer = (uae_s32)(uae_s16) next_iword_020ce (); cycles++; } if ((dp & 0x3) == 0x3) { outer = next_ilong_020ce (); cycles++; } if ((dp & 0x4) == 0) { base += regd; cycles++; } if (dp & 0x3) { base = x_get_long (base); cycles++; } if (dp & 0x4) { base += regd; cycles++; } v = base + outer; } else { v = base + (uae_s32)((uae_s8)dp) + regd; } if (cycles && currprefs.cpu_cycle_exact) x_do_cycles (cycles * cpucycleunit); return v; } STATIC_INLINE int in_rom (uaecptr pc) { return (munge24 (pc) & 0xFFF80000) == 0xF80000; } STATIC_INLINE int in_rtarea (uaecptr pc) { return (munge24 (pc) & 0xFFFF0000) == rtarea_base && uae_boot_rom; } void REGPARAM2 MakeSR (void) { regs.sr = ((regs.t1 << 15) | (regs.t0 << 14) | (regs.s << 13) | (regs.m << 12) | (regs.intmask << 8) | (GET_XFLG () << 4) | (GET_NFLG () << 3) | (GET_ZFLG () << 2) | (GET_VFLG () << 1) | GET_CFLG ()); } void REGPARAM2 MakeFromSR (void) { int oldm = regs.m; int olds = regs.s; if (currprefs.cpu_cycle_exact && currprefs.cpu_model >= 68020) { x_do_cycles (6 * CYCLE_UNIT); regs.ce020memcycles = 0; } SET_XFLG ((regs.sr >> 4) & 1); SET_NFLG ((regs.sr >> 3) & 1); SET_ZFLG ((regs.sr >> 2) & 1); SET_VFLG ((regs.sr >> 1) & 1); SET_CFLG (regs.sr & 1); if (regs.t1 == ((regs.sr >> 15) & 1) && regs.t0 == ((regs.sr >> 14) & 1) && regs.s == ((regs.sr >> 13) & 1) && regs.m == ((regs.sr >> 12) & 1) && regs.intmask == ((regs.sr >> 8) & 7)) return; regs.t1 = (regs.sr >> 15) & 1; regs.t0 = (regs.sr >> 14) & 1; regs.s = (regs.sr >> 13) & 1; regs.m = (regs.sr >> 12) & 1; regs.intmask = (regs.sr >> 8) & 7; if (currprefs.cpu_model >= 68020) { /* 68060 does not have MSP but does have M-bit.. */ if (currprefs.cpu_model >= 68060) regs.msp = regs.isp; if (olds != regs.s) { if (olds) { if (oldm) regs.msp = m68k_areg (regs, 7); else regs.isp = m68k_areg (regs, 7); m68k_areg (regs, 7) = regs.usp; } else { regs.usp = m68k_areg (regs, 7); m68k_areg (regs, 7) = regs.m ? regs.msp : regs.isp; } } else if (olds && oldm != regs.m) { if (oldm) { regs.msp = m68k_areg (regs, 7); m68k_areg (regs, 7) = regs.isp; } else { regs.isp = m68k_areg (regs, 7); m68k_areg (regs, 7) = regs.msp; } } if (currprefs.cpu_model >= 68060) regs.t0 = 0; } else { regs.t0 = regs.m = 0; if (olds != regs.s) { if (olds) { regs.isp = m68k_areg (regs, 7); m68k_areg (regs, 7) = regs.usp; } else { regs.usp = m68k_areg (regs, 7); m68k_areg (regs, 7) = regs.isp; } } } if (currprefs.mmu_model) mmu_set_super (regs.s != 0); doint (); if (regs.t1 || regs.t0) set_special (SPCFLAG_TRACE); else /* Keep SPCFLAG_DOTRACE, we still want a trace exception for SR-modifying instructions (including STOP). */ unset_special (SPCFLAG_TRACE); } static void exception_trace (int nr) { unset_special (SPCFLAG_TRACE | SPCFLAG_DOTRACE); if (regs.t1 && !regs.t0) { /* trace stays pending if exception is div by zero, chk, * trapv or trap #x */ if (nr == 5 || nr == 6 || nr == 7 || (nr >= 32 && nr <= 47)) set_special (SPCFLAG_DOTRACE); } regs.t1 = regs.t0 = regs.m = 0; } static void exception_debug (int nr) { #ifdef DEBUGGER if (!exception_debugging) return; console_out_f (_T("Exception %d, PC=%08X\n"), nr, M68K_GETPC); #endif } #ifdef CPUEMU_12 /* cycle-exact exception handler, 68000 only */ /* Address/Bus Error: - 6 idle cycles - write PC low word - write SR - write PC high word - write instruction word - write fault address low word - write status code - write fault address high word - 2 idle cycles - read exception address high word - read exception address low word - prefetch - 2 idle cycles - prefetch Division by Zero: - 6 idle cycles - write PC low word - write SR - write PC high word - read exception address high word - read exception address low word - prefetch - 2 idle cycles - prefetch Traps: - 2 idle cycles - write PC low word - write SR - write PC high word - read exception address high word - read exception address low word - prefetch - 2 idle cycles - prefetch TrapV: - write PC low word - write SR - write PC high word - read exception address high word - read exception address low word - prefetch - 2 idle cycles - prefetch CHK: - 6 idle cycles - write PC low word - write SR - write PC high word - read exception address high word - read exception address low word - prefetch - 2 idle cycles - prefetch Illegal Instruction: - 2 idle cycles - write PC low word - write SR - write PC high word - read exception address high word - read exception address low word - prefetch - 2 idle cycles - prefetch Interrupt: - 6 idle cycles - write PC low word - read exception number byte from (0xfffff1 | (interrupt number << 1)) - 4 idle cycles - write SR - write PC high word - read exception address high word - read exception address low word - prefetch - 2 idle cycles - prefetch */ static void Exception_ce000 (int nr) { uae_u32 currpc = m68k_getpc (), newpc; int sv = regs.s; int start, interrupt; start = 6; if (nr == 7) // TRAPV start = 0; else if (nr >= 32 && nr < 32 + 16) // TRAP #x start = 2; else if (nr == 4 || nr == 8) // ILLG & PRIVIL VIOL start = 2; interrupt = nr >= 24 && nr < 24 + 8; if (start) x_do_cycles (start * cpucycleunit); exception_debug (nr); MakeSR (); if (!regs.s) { regs.usp = m68k_areg (regs, 7); m68k_areg (regs, 7) = regs.isp; regs.s = 1; } if (nr == 2 || nr == 3) { /* 2=bus error, 3=address error */ uae_u16 mode = (sv ? 4 : 0) | (last_instructionaccess_for_exception_3 ? 2 : 1); mode |= last_writeaccess_for_exception_3 ? 0 : 16; m68k_areg (regs, 7) -= 14; /* fixme: bit3=I/N */ x_put_word (m68k_areg (regs, 7) + 12, last_addr_for_exception_3); x_put_word (m68k_areg (regs, 7) + 8, regs.sr); x_put_word (m68k_areg (regs, 7) + 10, last_addr_for_exception_3 >> 16); x_put_word (m68k_areg (regs, 7) + 6, last_op_for_exception_3); x_put_word (m68k_areg (regs, 7) + 4, last_fault_for_exception_3); x_put_word (m68k_areg (regs, 7) + 0, mode); x_put_word (m68k_areg (regs, 7) + 2, last_fault_for_exception_3 >> 16); x_do_cycles (2 * cpucycleunit); write_log (_T("Exception %d (%x) at %x -> %x!\n"), nr, last_addr_for_exception_3, currpc, get_long (4 * nr)); goto kludge_me_do; } m68k_areg (regs, 7) -= 6; x_put_word (m68k_areg (regs, 7) + 4, currpc); // write low address if (interrupt) { // fetch interrupt vector number nr = x_get_byte (0x00fffff1 | ((nr - 24) << 1)); x_do_cycles (4 * cpucycleunit); } x_put_word (m68k_areg (regs, 7) + 0, regs.sr); // write SR x_put_word (m68k_areg (regs, 7) + 2, currpc >> 16); // write high address kludge_me_do: newpc = x_get_word (4 * nr) << 16; // read high address newpc |= x_get_word (4 * nr + 2); // read low address if (newpc & 1) { if (nr == 2 || nr == 3) uae_reset (1, 0); /* there is nothing else we can do.. */ else exception3 (regs.ir, newpc); return; } m68k_setpc (newpc); regs.ir = x_get_word (m68k_getpc ()); // prefetch 1 x_do_cycles (2 * cpucycleunit); regs.irc = x_get_word (m68k_getpc () + 2); // prefetch 2 #ifdef JIT set_special (SPCFLAG_END_COMPILE); #endif exception_trace (nr); } #endif static uae_u32 exception_pc (int nr) { // zero divide, chk, trapcc/trapv, trace, trap# if (nr == 5 || nr == 6 || nr == 7 || nr == 9 || (nr >= 32 && nr <= 47)) return m68k_getpc (); return regs.instruction_pc; } static void Exception_mmu (int nr) { uae_u32 newpc; int sv = regs.s; int pc = exception_pc (nr); int i; exception_debug (nr); MakeSR (); if (!regs.s) { regs.usp = m68k_areg (regs, 7); if (currprefs.cpu_model >= 68020) m68k_areg (regs, 7) = regs.m ? regs.msp : regs.isp; else m68k_areg (regs, 7) = regs.isp; regs.s = 1; mmu_set_super (1); } if (nr == 2) { // write_log (_T("%08x %08x %08x\n"), currpc, oldpc, regs.mmu_fault_addr); // if (currpc == 0x0013b5e2) // activate_debugger (); // bus error for (i = 0 ; i < 7 ; i++) { m68k_areg (regs, 7) -= 4; put_long_mmu (m68k_areg (regs, 7), 0); } m68k_areg (regs, 7) -= 4; put_long_mmu (m68k_areg (regs, 7), regs.wb3_data); m68k_areg (regs, 7) -= 4; put_long_mmu (m68k_areg (regs, 7), regs.mmu_fault_addr); m68k_areg (regs, 7) -= 4; put_long_mmu (m68k_areg (regs, 7), regs.mmu_fault_addr); m68k_areg (regs, 7) -= 2; put_word_mmu (m68k_areg (regs, 7), 0); m68k_areg (regs, 7) -= 2; put_word_mmu (m68k_areg (regs, 7), 0); m68k_areg (regs, 7) -= 2; put_word_mmu (m68k_areg (regs, 7), regs.wb3_status); regs.wb3_status = 0; m68k_areg (regs, 7) -= 2; put_word_mmu (m68k_areg (regs, 7), regs.mmu_ssw); m68k_areg (regs, 7) -= 4; put_long_mmu (m68k_areg (regs, 7), regs.mmu_fault_addr); m68k_areg (regs, 7) -= 2; put_word_mmu (m68k_areg (regs, 7), 0x7000 + nr * 4); m68k_areg (regs, 7) -= 4; put_long_mmu (m68k_areg (regs, 7), regs.instruction_pc); m68k_areg (regs, 7) -= 2; put_word_mmu (m68k_areg (regs, 7), regs.sr); goto kludge_me_do; } else if (nr == 3) { // address error uae_u16 ssw = (sv ? 4 : 0) | (last_instructionaccess_for_exception_3 ? 2 : 1); ssw |= last_writeaccess_for_exception_3 ? 0 : 0x40; ssw |= 0x20; for (i = 0 ; i < 36; i++) { m68k_areg (regs, 7) -= 2; put_word_mmu (m68k_areg (regs, 7), 0); } m68k_areg (regs, 7) -= 4; put_long_mmu (m68k_areg (regs, 7), last_fault_for_exception_3); m68k_areg (regs, 7) -= 2; put_word_mmu (m68k_areg (regs, 7), 0); m68k_areg (regs, 7) -= 2; put_word_mmu (m68k_areg (regs, 7), 0); m68k_areg (regs, 7) -= 2; put_word_mmu (m68k_areg (regs, 7), 0); m68k_areg (regs, 7) -= 2; put_word_mmu (m68k_areg (regs, 7), ssw); m68k_areg (regs, 7) -= 2; put_word_mmu (m68k_areg (regs, 7), 0xb000 + nr * 4); } else if (nr ==5 || nr == 6 || nr == 7 || nr == 9) { m68k_areg (regs, 7) -= 4; put_long_mmu (m68k_areg (regs, 7), regs.instruction_pc); m68k_areg (regs, 7) -= 2; put_word_mmu (m68k_areg (regs, 7), 0x2000 + nr * 4); } else if (regs.m && nr >= 24 && nr < 32) { /* M + Interrupt */ m68k_areg (regs, 7) -= 2; put_word_mmu (m68k_areg (regs, 7), nr * 4); m68k_areg (regs, 7) -= 4; put_long_mmu (m68k_areg (regs, 7), regs.instruction_pc); m68k_areg (regs, 7) -= 2; put_word_mmu (m68k_areg (regs, 7), regs.sr); regs.sr |= (1 << 13); regs.msp = m68k_areg (regs, 7); m68k_areg (regs, 7) = regs.isp; m68k_areg (regs, 7) -= 2; put_word_mmu (m68k_areg (regs, 7), 0x1000 + nr * 4); } else { m68k_areg (regs, 7) -= 2; put_word_mmu (m68k_areg (regs, 7), nr * 4); } m68k_areg (regs, 7) -= 4; put_long_mmu (m68k_areg (regs, 7), pc); m68k_areg (regs, 7) -= 2; put_word_mmu (m68k_areg (regs, 7), regs.sr); kludge_me_do: newpc = get_long_mmu (regs.vbr + 4 * nr); if (newpc & 1) { if (nr == 2 || nr == 3) uae_reset (1, 0); /* there is nothing else we can do.. */ else exception3 (regs.ir, newpc); return; } m68k_setpc (newpc); #ifdef JIT set_special (SPCFLAG_END_COMPILE); #endif fill_prefetch (); exception_trace (nr); } static void Exception_normal (int nr) { uae_u32 currpc, newpc; int sv = regs.s; if (nr >= 24 && nr < 24 + 8 && currprefs.cpu_model <= 68010) nr = x_get_byte (0x00fffff1 | (nr << 1)); exception_debug (nr); MakeSR (); if (!regs.s) { regs.usp = m68k_areg (regs, 7); if (currprefs.cpu_model >= 68020) m68k_areg (regs, 7) = regs.m ? regs.msp : regs.isp; else m68k_areg (regs, 7) = regs.isp; regs.s = 1; if (currprefs.mmu_model) mmu_set_super (regs.s != 0); } if (currprefs.cpu_model > 68000) { currpc = exception_pc (nr); if (nr == 2 || nr == 3) { int i; if (currprefs.cpu_model >= 68040) { if (nr == 2) { if (currprefs.mmu_model) { // 68040 mmu bus error for (i = 0 ; i < 7 ; i++) { m68k_areg (regs, 7) -= 4; x_put_long (m68k_areg (regs, 7), 0); } m68k_areg (regs, 7) -= 4; x_put_long (m68k_areg (regs, 7), regs.wb3_data); m68k_areg (regs, 7) -= 4; x_put_long (m68k_areg (regs, 7), regs.mmu_fault_addr); m68k_areg (regs, 7) -= 4; x_put_long (m68k_areg (regs, 7), regs.mmu_fault_addr); m68k_areg (regs, 7) -= 2; x_put_word (m68k_areg (regs, 7), 0); m68k_areg (regs, 7) -= 2; x_put_word (m68k_areg (regs, 7), 0); m68k_areg (regs, 7) -= 2; x_put_word (m68k_areg (regs, 7), regs.wb3_status); regs.wb3_status = 0; m68k_areg (regs, 7) -= 2; x_put_word (m68k_areg (regs, 7), regs.mmu_ssw); m68k_areg (regs, 7) -= 4; x_put_long (m68k_areg (regs, 7), regs.mmu_fault_addr); m68k_areg (regs, 7) -= 2; x_put_word (m68k_areg (regs, 7), 0x7000 + nr * 4); m68k_areg (regs, 7) -= 4; x_put_long (m68k_areg (regs, 7), regs.instruction_pc); m68k_areg (regs, 7) -= 2; x_put_word (m68k_areg (regs, 7), regs.sr); newpc = x_get_long (regs.vbr + 4 * nr); if (newpc & 1) { if (nr == 2 || nr == 3) uae_reset (1, 0); /* there is nothing else we can do.. */ else exception3 (regs.ir, newpc); return; } m68k_setpc (newpc); #ifdef JIT set_special (SPCFLAG_END_COMPILE); #endif exception_trace (nr); return; } else { // 68040 bus error (not really, some garbage?) for (i = 0 ; i < 18 ; i++) { m68k_areg (regs, 7) -= 2; x_put_word (m68k_areg (regs, 7), 0); } m68k_areg (regs, 7) -= 4; x_put_long (m68k_areg (regs, 7), last_fault_for_exception_3); m68k_areg (regs, 7) -= 2; x_put_word (m68k_areg (regs, 7), 0); m68k_areg (regs, 7) -= 2; x_put_word (m68k_areg (regs, 7), 0); m68k_areg (regs, 7) -= 2; x_put_word (m68k_areg (regs, 7), 0); m68k_areg (regs, 7) -= 2; x_put_word (m68k_areg (regs, 7), 0x0140 | (sv ? 6 : 2)); /* SSW */ m68k_areg (regs, 7) -= 4; x_put_long (m68k_areg (regs, 7), last_addr_for_exception_3); m68k_areg (regs, 7) -= 2; x_put_word (m68k_areg (regs, 7), 0x7000 + nr * 4); m68k_areg (regs, 7) -= 4; x_put_long (m68k_areg (regs, 7), regs.instruction_pc); m68k_areg (regs, 7) -= 2; x_put_word (m68k_areg (regs, 7), regs.sr); goto kludge_me_do; } } else { m68k_areg (regs, 7) -= 4; x_put_long (m68k_areg (regs, 7), last_fault_for_exception_3); m68k_areg (regs, 7) -= 2; x_put_word (m68k_areg (regs, 7), 0x2000 + nr * 4); } } else { // 68020 address error uae_u16 ssw = (sv ? 4 : 0) | (last_instructionaccess_for_exception_3 ? 2 : 1); ssw |= last_writeaccess_for_exception_3 ? 0 : 0x40; ssw |= 0x20; for (i = 0 ; i < 36; i++) { m68k_areg (regs, 7) -= 2; x_put_word (m68k_areg (regs, 7), 0); } m68k_areg (regs, 7) -= 4; x_put_long (m68k_areg (regs, 7), last_fault_for_exception_3); m68k_areg (regs, 7) -= 2; x_put_word (m68k_areg (regs, 7), 0); m68k_areg (regs, 7) -= 2; x_put_word (m68k_areg (regs, 7), 0); m68k_areg (regs, 7) -= 2; x_put_word (m68k_areg (regs, 7), 0); m68k_areg (regs, 7) -= 2; x_put_word (m68k_areg (regs, 7), ssw); m68k_areg (regs, 7) -= 2; x_put_word (m68k_areg (regs, 7), 0xb000 + nr * 4); } write_log (_T("Exception %d (%x) at %x -> %x!\n"), nr, regs.instruction_pc, currpc, x_get_long (regs.vbr + 4*nr)); } else if (nr ==5 || nr == 6 || nr == 7 || nr == 9) { m68k_areg (regs, 7) -= 4; x_put_long (m68k_areg (regs, 7), regs.instruction_pc); m68k_areg (regs, 7) -= 2; x_put_word (m68k_areg (regs, 7), 0x2000 + nr * 4); } else if (regs.m && nr >= 24 && nr < 32) { /* M + Interrupt */ m68k_areg (regs, 7) -= 2; x_put_word (m68k_areg (regs, 7), nr * 4); m68k_areg (regs, 7) -= 4; x_put_long (m68k_areg (regs, 7), currpc); m68k_areg (regs, 7) -= 2; x_put_word (m68k_areg (regs, 7), regs.sr); regs.sr |= (1 << 13); regs.msp = m68k_areg (regs, 7); m68k_areg (regs, 7) = regs.isp; m68k_areg (regs, 7) -= 2; x_put_word (m68k_areg (regs, 7), 0x1000 + nr * 4); } else { m68k_areg (regs, 7) -= 2; x_put_word (m68k_areg (regs, 7), nr * 4); } } else { currpc = m68k_getpc (); if (nr == 2 || nr == 3) { // 68000 address error uae_u16 mode = (sv ? 4 : 0) | (last_instructionaccess_for_exception_3 ? 2 : 1); mode |= last_writeaccess_for_exception_3 ? 0 : 16; m68k_areg (regs, 7) -= 14; /* fixme: bit3=I/N */ x_put_word (m68k_areg (regs, 7) + 0, mode); x_put_long (m68k_areg (regs, 7) + 2, last_fault_for_exception_3); x_put_word (m68k_areg (regs, 7) + 6, last_op_for_exception_3); x_put_word (m68k_areg (regs, 7) + 8, regs.sr); x_put_long (m68k_areg (regs, 7) + 10, last_addr_for_exception_3); write_log (_T("Exception %d (%x) at %x -> %x!\n"), nr, last_fault_for_exception_3, currpc, x_get_long (regs.vbr + 4*nr)); goto kludge_me_do; } } m68k_areg (regs, 7) -= 4; x_put_long (m68k_areg (regs, 7), currpc); m68k_areg (regs, 7) -= 2; x_put_word (m68k_areg (regs, 7), regs.sr); kludge_me_do: newpc = x_get_long (regs.vbr + 4 * nr); if (newpc & 1) { if (nr == 2 || nr == 3) uae_reset (1, 0); /* there is nothing else we can do.. */ else exception3 (regs.ir, newpc); return; } m68k_setpc (newpc); #ifdef JIT set_special (SPCFLAG_END_COMPILE); #endif fill_prefetch (); exception_trace (nr); } void REGPARAM2 Exception (int nr) { regs.exception = nr; if (cpu_tracer) { cputrace.state = nr; } if (currprefs.cachesize) regs.instruction_pc = m68k_getpc (); #ifdef CPUEMU_12 if (currprefs.cpu_cycle_exact && currprefs.cpu_model == 68000) Exception_ce000 (nr); else #endif if (currprefs.mmu_model) Exception_mmu (nr); else Exception_normal (nr); if (debug_illegal && !in_rom (M68K_GETPC)) { int v = nr; if (nr <= 63 && (debug_illegal_mask & ((uae_u64)1 << nr))) { write_log (_T("Exception %d breakpoint\n"), nr); activate_debugger (); } } regs.exception = 0; if (cpu_tracer) { cputrace.state = 0; } } STATIC_INLINE void do_interrupt (int nr) { if (debug_dma) record_dma_event (DMA_EVENT_CPUIRQ, current_hpos (), vpos); if (inputrecord_debug & 2) { if (input_record > 0) inprec_recorddebug_cpu (2); else if (input_play > 0) inprec_playdebug_cpu (2); } regs.stopped = 0; unset_special (SPCFLAG_STOP); assert (nr < 8 && nr >= 0); Exception (nr + 24); regs.intmask = nr; doint (); } void NMI (void) { do_interrupt (7); } #ifndef CPUEMU_68000_ONLY int movec_illg (int regno) { int regno2 = regno & 0x7ff; if (currprefs.cpu_model == 68060) { if (regno <= 8) return 0; if (regno == 0x800 || regno == 0x801 || regno == 0x806 || regno == 0x807 || regno == 0x808) return 0; return 1; } else if (currprefs.cpu_model == 68010) { if (regno2 < 2) return 0; return 1; } else if (currprefs.cpu_model == 68020) { if (regno == 3) return 1; /* 68040/060 only */ /* 4 is >=68040, but 0x804 is in 68020 */ if (regno2 < 4 || regno == 0x804) return 0; return 1; } else if (currprefs.cpu_model == 68030) { if (regno2 <= 2) return 0; if (regno == 0x803 || regno == 0x804) return 0; return 1; } else if (currprefs.cpu_model == 68040) { if (regno == 0x802) return 1; /* 68020 only */ if (regno2 < 8) return 0; return 1; } return 1; } int m68k_move2c (int regno, uae_u32 *regp) { #if MOVEC_DEBUG > 0 write_log (_T("move2c %04X <- %08X PC=%x\n"), regno, *regp, M68K_GETPC); #endif if (movec_illg (regno)) { op_illg (0x4E7B); return 0; } else { switch (regno) { case 0: regs.sfc = *regp & 7; break; case 1: regs.dfc = *regp & 7; break; case 2: { uae_u32 cacr_mask = 0; if (currprefs.cpu_model == 68020) cacr_mask = 0x0000000f; else if (currprefs.cpu_model == 68030) cacr_mask = 0x00003f1f; else if (currprefs.cpu_model == 68040) cacr_mask = 0x80008000; else if (currprefs.cpu_model == 68060) cacr_mask = 0xf8e0e000; regs.cacr = *regp & cacr_mask; set_cpu_caches (); } break; /* 68040/060 only */ case 3: regs.tcr = *regp & (currprefs.cpu_model == 68060 ? 0xfffe : 0xc000); if (currprefs.mmu_model) mmu_set_tc (regs.tcr); break; /* no differences between 68040 and 68060 */ case 4: regs.itt0 = *regp & 0xffffe364; break; case 5: regs.itt1 = *regp & 0xffffe364; break; case 6: regs.dtt0 = *regp & 0xffffe364; break; case 7: regs.dtt1 = *regp & 0xffffe364; break; /* 68060 only */ case 8: regs.buscr = *regp & 0xf0000000; break; case 0x800: regs.usp = *regp; break; case 0x801: regs.vbr = *regp; break; case 0x802: regs.caar = *regp & 0xfc; break; case 0x803: regs.msp = *regp; if (regs.m == 1) m68k_areg (regs, 7) = regs.msp; break; case 0x804: regs.isp = *regp; if (regs.m == 0) m68k_areg (regs, 7) = regs.isp; break; /* 68040 only */ case 0x805: regs.mmusr = *regp; break; /* 68040/060 */ case 0x806: regs.urp = *regp & 0xfffffe00; break; case 0x807: regs.srp = *regp & 0xfffffe00; break; /* 68060 only */ case 0x808: { uae_u32 opcr = regs.pcr; regs.pcr &= ~(0x40 | 2 | 1); regs.pcr |= (*regp) & (0x40 | 2 | 1); if (((opcr ^ regs.pcr) & 2) == 2) { write_log (_T("68060 FPU state: %s\n"), regs.pcr & 2 ? _T("disabled") : _T("enabled")); /* flush possible already translated FPU instructions */ flush_icache (0, 3); } } break; default: op_illg (0x4E7B); return 0; } } return 1; } int m68k_movec2 (int regno, uae_u32 *regp) { #if MOVEC_DEBUG > 0 write_log (_T("movec2 %04X PC=%x\n"), regno, M68K_GETPC); #endif if (movec_illg (regno)) { op_illg (0x4E7A); return 0; } else { switch (regno) { case 0: *regp = regs.sfc; break; case 1: *regp = regs.dfc; break; case 2: { uae_u32 v = regs.cacr; uae_u32 cacr_mask = 0; if (currprefs.cpu_model == 68020) cacr_mask = 0x00000003; else if (currprefs.cpu_model == 68030) cacr_mask = 0x00003313; else if (currprefs.cpu_model == 68040) cacr_mask = 0x80008000; else if (currprefs.cpu_model == 68060) cacr_mask = 0xf880e000; *regp = v & cacr_mask; } break; case 3: *regp = regs.tcr; break; case 4: *regp = regs.itt0; break; case 5: *regp = regs.itt1; break; case 6: *regp = regs.dtt0; break; case 7: *regp = regs.dtt1; break; case 8: *regp = regs.buscr; break; case 0x800: *regp = regs.usp; break; case 0x801: *regp = regs.vbr; break; case 0x802: *regp = regs.caar; break; case 0x803: *regp = regs.m == 1 ? m68k_areg (regs, 7) : regs.msp; break; case 0x804: *regp = regs.m == 0 ? m68k_areg (regs, 7) : regs.isp; break; case 0x805: *regp = regs.mmusr; break; case 0x806: *regp = regs.urp; break; case 0x807: *regp = regs.srp; break; case 0x808: *regp = regs.pcr; break; default: op_illg (0x4E7A); return 0; } } #if MOVEC_DEBUG > 0 write_log (_T("-> %08X\n"), *regp); #endif return 1; } STATIC_INLINE int div_unsigned (uae_u32 src_hi, uae_u32 src_lo, uae_u32 div, uae_u32 *quot, uae_u32 *rem) { uae_u32 q = 0, cbit = 0; int i; if (div <= src_hi) { return 1; } for (i = 0 ; i < 32 ; i++) { cbit = src_hi & 0x80000000ul; src_hi <<= 1; if (src_lo & 0x80000000ul) src_hi++; src_lo <<= 1; q = q << 1; if (cbit || div <= src_hi) { q |= 1; src_hi -= div; } } *quot = q; *rem = src_hi; return 0; } void m68k_divl (uae_u32 opcode, uae_u32 src, uae_u16 extra) { if ((extra & 0x400) && currprefs.cpu_compatible && currprefs.cpu_model == 68060) { op_unimpl (); return; } if (src == 0) { Exception (5); return; } #if defined (uae_s64) if (extra & 0x800) { /* signed variant */ uae_s64 a = (uae_s64)(uae_s32)m68k_dreg (regs, (extra >> 12) & 7); uae_s64 quot, rem; if (extra & 0x400) { a &= 0xffffffffu; a |= (uae_s64)m68k_dreg (regs, extra & 7) << 32; } rem = a % (uae_s64)(uae_s32)src; quot = a / (uae_s64)(uae_s32)src; if ((quot & UVAL64 (0xffffffff80000000)) != 0 && (quot & UVAL64 (0xffffffff80000000)) != UVAL64 (0xffffffff80000000)) { SET_VFLG (1); SET_NFLG (1); SET_CFLG (0); } else { if (((uae_s32)rem < 0) != ((uae_s64)a < 0)) rem = -rem; SET_VFLG (0); SET_CFLG (0); SET_ZFLG (((uae_s32)quot) == 0); SET_NFLG (((uae_s32)quot) < 0); m68k_dreg (regs, extra & 7) = (uae_u32)rem; m68k_dreg (regs, (extra >> 12) & 7) = (uae_u32)quot; } } else { /* unsigned */ uae_u64 a = (uae_u64)(uae_u32)m68k_dreg (regs, (extra >> 12) & 7); uae_u64 quot, rem; if (extra & 0x400) { a &= 0xffffffffu; a |= (uae_u64)m68k_dreg (regs, extra & 7) << 32; } rem = a % (uae_u64)src; quot = a / (uae_u64)src; if (quot > 0xffffffffu) { SET_VFLG (1); SET_NFLG (1); SET_CFLG (0); } else { SET_VFLG (0); SET_CFLG (0); SET_ZFLG (((uae_s32)quot) == 0); SET_NFLG (((uae_s32)quot) < 0); m68k_dreg (regs, extra & 7) = (uae_u32)rem; m68k_dreg (regs, (extra >> 12) & 7) = (uae_u32)quot; } } #else if (extra & 0x800) { /* signed variant */ uae_s32 lo = (uae_s32)m68k_dreg (regs, (extra >> 12) & 7); uae_s32 hi = lo < 0 ? -1 : 0; uae_s32 save_high; uae_u32 quot, rem; uae_u32 sign; if (extra & 0x400) { hi = (uae_s32)m68k_dreg (regs, extra & 7); } save_high = hi; sign = (hi ^ src); if (hi < 0) { hi = ~hi; lo = -lo; if (lo == 0) hi++; } if ((uae_s32)src < 0) src = -src; if (div_unsigned (hi, lo, src, ", &rem) || (sign & 0x80000000) ? quot > 0x80000000 : quot > 0x7fffffff) { SET_VFLG (1); SET_NFLG (1); SET_CFLG (0); } else { if (sign & 0x80000000) quot = -quot; if (((uae_s32)rem < 0) != (save_high < 0)) rem = -rem; SET_VFLG (0); SET_CFLG (0); SET_ZFLG (((uae_s32)quot) == 0); SET_NFLG (((uae_s32)quot) < 0); m68k_dreg (regs, extra & 7) = rem; m68k_dreg (regs, (extra >> 12) & 7) = quot; } } else { /* unsigned */ uae_u32 lo = (uae_u32)m68k_dreg (regs, (extra >> 12) & 7); uae_u32 hi = 0; uae_u32 quot, rem; if (extra & 0x400) { hi = (uae_u32)m68k_dreg (regs, extra & 7); } if (div_unsigned (hi, lo, src, ", &rem)) { SET_VFLG (1); SET_NFLG (1); SET_CFLG (0); } else { SET_VFLG (0); SET_CFLG (0); SET_ZFLG (((uae_s32)quot) == 0); SET_NFLG (((uae_s32)quot) < 0); m68k_dreg (regs, extra & 7) = rem; m68k_dreg (regs, (extra >> 12) & 7) = quot; } } #endif } STATIC_INLINE void mul_unsigned (uae_u32 src1, uae_u32 src2, uae_u32 *dst_hi, uae_u32 *dst_lo) { uae_u32 r0 = (src1 & 0xffff) * (src2 & 0xffff); uae_u32 r1 = ((src1 >> 16) & 0xffff) * (src2 & 0xffff); uae_u32 r2 = (src1 & 0xffff) * ((src2 >> 16) & 0xffff); uae_u32 r3 = ((src1 >> 16) & 0xffff) * ((src2 >> 16) & 0xffff); uae_u32 lo; lo = r0 + ((r1 << 16) & 0xffff0000ul); if (lo < r0) r3++; r0 = lo; lo = r0 + ((r2 << 16) & 0xffff0000ul); if (lo < r0) r3++; r3 += ((r1 >> 16) & 0xffff) + ((r2 >> 16) & 0xffff); *dst_lo = lo; *dst_hi = r3; } void m68k_mull (uae_u32 opcode, uae_u32 src, uae_u16 extra) { if ((extra & 0x400) && currprefs.cpu_compatible && currprefs.cpu_model == 68060) { op_unimpl (); return; } #if defined (uae_s64) if (extra & 0x800) { /* signed variant */ uae_s64 a = (uae_s64)(uae_s32)m68k_dreg (regs, (extra >> 12) & 7); a *= (uae_s64)(uae_s32)src; SET_VFLG (0); SET_CFLG (0); SET_ZFLG (a == 0); SET_NFLG (a < 0); if (extra & 0x400) m68k_dreg (regs, extra & 7) = (uae_u32)(a >> 32); else if ((a & UVAL64 (0xffffffff80000000)) != 0 && (a & UVAL64 (0xffffffff80000000)) != UVAL64 (0xffffffff80000000)) { SET_VFLG (1); } m68k_dreg (regs, (extra >> 12) & 7) = (uae_u32)a; } else { /* unsigned */ uae_u64 a = (uae_u64)(uae_u32)m68k_dreg (regs, (extra >> 12) & 7); a *= (uae_u64)src; SET_VFLG (0); SET_CFLG (0); SET_ZFLG (a == 0); SET_NFLG (((uae_s64)a) < 0); if (extra & 0x400) m68k_dreg (regs, extra & 7) = (uae_u32)(a >> 32); else if ((a & UVAL64 (0xffffffff00000000)) != 0) { SET_VFLG (1); } m68k_dreg (regs, (extra >> 12) & 7) = (uae_u32)a; } #else if (extra & 0x800) { /* signed variant */ uae_s32 src1, src2; uae_u32 dst_lo, dst_hi; uae_u32 sign; src1 = (uae_s32)src; src2 = (uae_s32)m68k_dreg (regs, (extra >> 12) & 7); sign = (src1 ^ src2); if (src1 < 0) src1 = -src1; if (src2 < 0) src2 = -src2; mul_unsigned ((uae_u32)src1, (uae_u32)src2, &dst_hi, &dst_lo); if (sign & 0x80000000) { dst_hi = ~dst_hi; dst_lo = -dst_lo; if (dst_lo == 0) dst_hi++; } SET_VFLG (0); SET_CFLG (0); SET_ZFLG (dst_hi == 0 && dst_lo == 0); SET_NFLG (((uae_s32)dst_hi) < 0); if (extra & 0x400) m68k_dreg (regs, extra & 7) = dst_hi; else if ((dst_hi != 0 || (dst_lo & 0x80000000) != 0) && ((dst_hi & 0xffffffff) != 0xffffffff || (dst_lo & 0x80000000) != 0x80000000)) { SET_VFLG (1); } m68k_dreg (regs, (extra >> 12) & 7) = dst_lo; } else { /* unsigned */ uae_u32 dst_lo, dst_hi; mul_unsigned (src, (uae_u32)m68k_dreg (regs, (extra >> 12) & 7), &dst_hi, &dst_lo); SET_VFLG (0); SET_CFLG (0); SET_ZFLG (dst_hi == 0 && dst_lo == 0); SET_NFLG (((uae_s32)dst_hi) < 0); if (extra & 0x400) m68k_dreg (regs, extra & 7) = dst_hi; else if (dst_hi != 0) { SET_VFLG (1); } m68k_dreg (regs, (extra >> 12) & 7) = dst_lo; } #endif } #endif void m68k_reset (int hardreset) { regs.spcflags = 0; regs.ipl = regs.ipl_pin = 0; #ifdef SAVESTATE if (isrestore ()) { m68k_setpc (regs.pc); SET_XFLG ((regs.sr >> 4) & 1); SET_NFLG ((regs.sr >> 3) & 1); SET_ZFLG ((regs.sr >> 2) & 1); SET_VFLG ((regs.sr >> 1) & 1); SET_CFLG (regs.sr & 1); regs.t1 = (regs.sr >> 15) & 1; regs.t0 = (regs.sr >> 14) & 1; regs.s = (regs.sr >> 13) & 1; regs.m = (regs.sr >> 12) & 1; regs.intmask = (regs.sr >> 8) & 7; /* set stack pointer */ if (regs.s) m68k_areg (regs, 7) = regs.isp; else m68k_areg (regs, 7) = regs.usp; return; } #endif m68k_areg (regs, 7) = get_long (0); m68k_setpc (get_long (4)); regs.s = 1; regs.m = 0; regs.stopped = 0; regs.t1 = 0; regs.t0 = 0; SET_ZFLG (0); SET_XFLG (0); SET_CFLG (0); SET_VFLG (0); SET_NFLG (0); regs.intmask = 7; regs.vbr = regs.sfc = regs.dfc = 0; regs.irc = 0xffff; #ifdef FPUEMU fpu_reset (); #endif regs.caar = regs.cacr = 0; regs.itt0 = regs.itt1 = regs.dtt0 = regs.dtt1 = 0; regs.tcr = regs.mmusr = regs.urp = regs.srp = regs.buscr = 0; if (currprefs.cpu_model == 68020) { regs.cacr |= 8; set_cpu_caches (); } mmufixup[0].reg = -1; mmufixup[1].reg = -1; if (currprefs.mmu_model) { mmu_reset (); mmu_set_tc (regs.tcr); mmu_set_super (regs.s != 0); } a3000_fakekick (0); /* only (E)nable bit is zeroed when CPU is reset, A3000 SuperKickstart expects this */ tc_030 &= ~0x80000000; tt0_030 &= ~0x80000000; tt1_030 &= ~0x80000000; if (hardreset) { srp_030 = crp_030 = 0; tt0_030 = tt1_030 = tc_030 = 0; } mmusr_030 = 0; /* 68060 FPU is not compatible with 68040, * 68060 accelerators' boot ROM disables the FPU */ regs.pcr = 0; if (currprefs.cpu_model == 68060) { regs.pcr = currprefs.fpu_model == 68060 ? MC68060_PCR : MC68EC060_PCR; regs.pcr |= (currprefs.cpu060_revision & 0xff) << 8; if (kickstart_rom) regs.pcr |= 2; /* disable FPU */ } regs.ce020tmpcycles = MAX68020CYCLES; regs.ce020memcycles = 0; fill_prefetch_quick (); } void REGPARAM2 op_unimpl (void) { Exception (61); } uae_u32 REGPARAM2 op_illg (uae_u32 opcode) { uaecptr pc = m68k_getpc (); static int warned; int inrom = in_rom (pc); int inrt = in_rtarea (pc); if (cloanto_rom && (opcode & 0xF100) == 0x7100) { m68k_dreg (regs, (opcode >> 9) & 7) = (uae_s8)(opcode & 0xFF); m68k_incpc (2); fill_prefetch (); return 4; } if (opcode == 0x4E7B && inrom && get_long (0x10) == 0) { notify_user (NUMSG_KS68020); uae_restart (-1, NULL); } #ifdef AUTOCONFIG if (opcode == 0xFF0D && inrt) { /* User-mode STOP replacement */ m68k_setstopped (); return 4; } if ((opcode & 0xF000) == 0xA000 && inrt) { /* Calltrap. */ m68k_incpc (2); m68k_handle_trap (opcode & 0xFFF); fill_prefetch (); return 4; } #endif if ((opcode & 0xF000) == 0xF000) { if (warned < 20) { //write_log (_T("B-Trap %x at %x (%p)\n"), opcode, pc, regs.pc_p); //warned++; } Exception (0xB); //activate_debugger (); return 4; } if ((opcode & 0xF000) == 0xA000) { if (warned < 20) { //write_log (_T("A-Trap %x at %x (%p)\n"), opcode, pc, regs.pc_p); //warned++; } Exception (0xA); //activate_debugger(); return 4; } if (warned < 20) { write_log (_T("Illegal instruction: %04x at %08X -> %08X\n"), opcode, pc, get_long (regs.vbr + 0x10)); warned++; //activate_debugger(); } Exception (4); return 4; } #ifdef CPUEMU_0 static TCHAR *mmu30regs[] = { _T("TCR"), _T(""), _T("SRP"), _T("CRP"), _T(""), _T(""), _T(""), _T("") }; static void mmu_op30_pmove (uaecptr pc, uae_u32 opcode, uae_u16 next, uaecptr extra) { int mode = (opcode >> 3) & 7; int preg = (next >> 10) & 31; int rw = (next >> 9) & 1; int fd = (next >> 8) & 1; TCHAR *reg = NULL; uae_u32 otc = tc_030; int siz; // Dn, An, (An)+, -(An), abs and indirect if (mode == 0 || mode == 1 || mode == 3 || mode == 4 || mode >= 6) { op_illg (opcode); return; } switch (preg) { case 0x10: // TC reg = _T("TC"); siz = 4; if (rw) x_put_long (extra, tc_030); else tc_030 = x_get_long (extra); break; case 0x12: // SRP reg = _T("SRP"); siz = 8; if (rw) { x_put_long (extra, srp_030 >> 32); x_put_long (extra + 4, srp_030); } else { srp_030 = (uae_u64)x_get_long (extra) << 32; srp_030 |= x_get_long (extra + 4); } break; case 0x13: // CRP reg = _T("CRP"); siz = 8; if (rw) { x_put_long (extra, crp_030 >> 32); x_put_long (extra + 4, crp_030); } else { crp_030 = (uae_u64)x_get_long (extra) << 32; crp_030 |= x_get_long (extra + 4); } break; case 0x18: // MMUSR reg = _T("MMUSR"); siz = 2; if (rw) x_put_word (extra, mmusr_030); else mmusr_030 = x_get_word (extra); break; case 0x02: // TT0 reg = _T("TT0"); siz = 4; if (rw) x_put_long (extra, tt0_030); else tt0_030 = x_get_long (extra); break; case 0x03: // TT1 reg = _T("TT1"); siz = 4; if (rw) x_put_long (extra, tt1_030); else tt1_030 = x_get_long (extra); break; } if (!reg) { op_illg (opcode); return; } #if MMUOP_DEBUG > 0 { uae_u32 val; if (siz == 8) { uae_u32 val2 = x_get_long (extra); val = x_get_long (extra + 4); if (rw) write_log (_T("PMOVE %s,%08X%08X"), reg, val2, val); else write_log (_T("PMOVE %08X%08X,%s"), val2, val, reg); } else { if (siz == 4) val = x_get_long (extra); else val = x_get_word (extra); if (rw) write_log (_T("PMOVE %s,%08X"), reg, val); else write_log (_T("PMOVE %08X,%s"), val, reg); } write_log (_T(" PC=%08X\n"), pc); } #endif if (currprefs.cs_mbdmac == 1 && currprefs.mbresmem_low_size > 0) { if (otc != tc_030) { a3000_fakekick (tc_030 & 0x80000000); } } } static void mmu_op30_ptest (uaecptr pc, uae_u32 opcode, uae_u16 next, uaecptr extra) { #if MMUOP_DEBUG > 0 TCHAR tmp[10]; tmp[0] = 0; if ((next >> 8) & 1) _stprintf (tmp, _T(",A%d"), (next >> 4) & 15); write_log (_T("PTEST%c %02X,%08X,#%X%s PC=%08X\n"), ((next >> 9) & 1) ? 'W' : 'R', (next & 15), extra, (next >> 10) & 7, tmp, pc); #endif mmusr_030 = 0; } static void mmu_op30_pflush (uaecptr pc, uae_u32 opcode, uae_u16 next, uaecptr extra) { int mode = (opcode >> 3) & 7; int reg = opcode & 7; int flushmode = (next >> 10) & 7; int fc = next & 31; int mask = (next >> 5) & 3; TCHAR fname[100]; switch (flushmode) { case 6: // Dn, An, (An)+, -(An), abs and indirect if (mode == 0 || mode == 1 || mode == 3 || mode == 4 || mode >= 6) { op_illg (opcode); return; } _stprintf (fname, _T("FC=%x MASK=%x EA=%08x"), fc, mask, 0); break; case 4: _stprintf (fname, _T("FC=%x MASK=%x"), fc, mask); break; case 1: _tcscpy (fname, _T("ALL")); break; default: op_illg (opcode); return; } #if MMUOP_DEBUG > 0 write_log (_T("PFLUSH %s PC=%08X\n"), fname, pc); #endif } void mmu_op30 (uaecptr pc, uae_u32 opcode, uae_u16 extra, uaecptr extraa) { int type = extra >> 13; switch (type) { case 0: case 2: case 3: mmu_op30_pmove (pc, opcode, extra, extraa); break; case 1: mmu_op30_pflush (pc, opcode, extra, extraa); break; case 4: mmu_op30_ptest (pc, opcode, extra, extraa); break; default: op_illg (opcode); break; } } void mmu_op (uae_u32 opcode, uae_u32 extra) { if (currprefs.cpu_model) { mmu_op_real (opcode, extra); return; } #if MMUOP_DEBUG > 1 write_log (_T("mmu_op %04X PC=%08X\n"), opcode, m68k_getpc ()); #endif if ((opcode & 0xFE0) == 0x0500) { /* PFLUSH */ regs.mmusr = 0; #if MMUOP_DEBUG > 0 write_log (_T("PFLUSH\n")); #endif return; } else if ((opcode & 0x0FD8) == 0x548) { if (currprefs.cpu_model < 68060) { /* PTEST not in 68060 */ /* PTEST */ #if MMUOP_DEBUG > 0 write_log (_T("PTEST\n")); #endif return; } } else if ((opcode & 0x0FB8) == 0x588) { /* PLPA */ if (currprefs.cpu_model == 68060) { #if MMUOP_DEBUG > 0 write_log (_T("PLPA\n")); #endif return; } } #if MMUOP_DEBUG > 0 write_log (_T("Unknown MMU OP %04X\n"), opcode); #endif m68k_setpc (m68k_getpc () - 2); op_illg (opcode); } #endif static uaecptr last_trace_ad = 0; static void do_trace (void) { if (regs.t0 && currprefs.cpu_model >= 68020) { uae_u16 opcode; /* should also include TRAP, CHK, SR modification FPcc */ /* probably never used so why bother */ /* We can afford this to be inefficient... */ m68k_setpc (m68k_getpc ()); fill_prefetch (); opcode = x_get_word (regs.pc); if (opcode == 0x4e73 /* RTE */ || opcode == 0x4e74 /* RTD */ || opcode == 0x4e75 /* RTS */ || opcode == 0x4e77 /* RTR */ || opcode == 0x4e76 /* TRAPV */ || (opcode & 0xffc0) == 0x4e80 /* JSR */ || (opcode & 0xffc0) == 0x4ec0 /* JMP */ || (opcode & 0xff00) == 0x6100 /* BSR */ || ((opcode & 0xf000) == 0x6000 /* Bcc */ && cctrue ((opcode >> 8) & 0xf)) || ((opcode & 0xf0f0) == 0x5050 /* DBcc */ && !cctrue ((opcode >> 8) & 0xf) && (uae_s16)m68k_dreg (regs, opcode & 7) != 0)) { last_trace_ad = m68k_getpc (); unset_special (SPCFLAG_TRACE); set_special (SPCFLAG_DOTRACE); } } else if (regs.t1) { last_trace_ad = m68k_getpc (); unset_special (SPCFLAG_TRACE); set_special (SPCFLAG_DOTRACE); } } // handle interrupt delay (few cycles) STATIC_INLINE bool time_for_interrupt (void) { return regs.ipl > regs.intmask || regs.ipl == 7; } void doint (void) { if (currprefs.cpu_cycle_exact) { regs.ipl_pin = intlev (); unset_special (SPCFLAG_INT); return; } if (currprefs.cpu_compatible) set_special (SPCFLAG_INT); else set_special (SPCFLAG_DOINT); } #define IDLETIME (currprefs.cpu_idle * sleep_resolution / 1000) STATIC_INLINE int do_specialties (int cycles) { regs.instruction_pc = m68k_getpc (); #ifdef ACTION_REPLAY #ifdef ACTION_REPLAY_HRTMON if ((regs.spcflags & SPCFLAG_ACTION_REPLAY) && hrtmon_flag != ACTION_REPLAY_INACTIVE) { int isinhrt = (m68k_getpc () >= hrtmem_start && m68k_getpc () < hrtmem_start + hrtmem_size); /* exit from HRTMon? */ if (hrtmon_flag == ACTION_REPLAY_ACTIVE && !isinhrt) hrtmon_hide (); /* HRTMon breakpoint? (not via IRQ7) */ if (hrtmon_flag == ACTION_REPLAY_IDLE && isinhrt) hrtmon_breakenter (); if (hrtmon_flag == ACTION_REPLAY_ACTIVATE) hrtmon_enter (); } #endif if ((regs.spcflags & SPCFLAG_ACTION_REPLAY) && action_replay_flag != ACTION_REPLAY_INACTIVE) { /*if (action_replay_flag == ACTION_REPLAY_ACTIVE && !is_ar_pc_in_rom ())*/ /* write_log (_T("PC:%p\n"), m68k_getpc ());*/ if (action_replay_flag == ACTION_REPLAY_ACTIVATE || action_replay_flag == ACTION_REPLAY_DORESET) action_replay_enter (); if (action_replay_flag == ACTION_REPLAY_HIDE && !is_ar_pc_in_rom ()) { action_replay_hide (); unset_special (SPCFLAG_ACTION_REPLAY); } if (action_replay_flag == ACTION_REPLAY_WAIT_PC) { /*write_log (_T("Waiting for PC: %p, current PC= %p\n"), wait_for_pc, m68k_getpc ());*/ if (m68k_getpc () == wait_for_pc) { action_replay_flag = ACTION_REPLAY_ACTIVATE; /* Activate after next instruction. */ } } } #endif if (regs.spcflags & SPCFLAG_COPPER) do_copper (); #ifdef JIT unset_special (SPCFLAG_END_COMPILE); /* has done its job */ #endif while ((regs.spcflags & SPCFLAG_BLTNASTY) && dmaen (DMA_BLITTER) && cycles > 0 && !currprefs.blitter_cycle_exact) { int c = blitnasty (); if (c < 0) { break; } else if (c > 0) { cycles -= c * CYCLE_UNIT * 2; if (cycles < CYCLE_UNIT) cycles = 0; } else { c = 4; } x_do_cycles (c * CYCLE_UNIT); if (regs.spcflags & SPCFLAG_COPPER) do_copper (); } if (regs.spcflags & SPCFLAG_DOTRACE) Exception (9); if (regs.spcflags & SPCFLAG_TRAP) { unset_special (SPCFLAG_TRAP); Exception (3); } while (regs.spcflags & SPCFLAG_STOP) { if (uae_int_requested) { INTREQ_f (0x8008); set_special (SPCFLAG_INT); } { extern int volatile uaenet_int_requested; if (uaenet_int_requested) { INTREQ_f (0x8000 | 0x2000); set_special (SPCFLAG_INT); } } { extern void bsdsock_fake_int_handler (void); extern int volatile bsd_int_requested; if (bsd_int_requested) bsdsock_fake_int_handler (); } if (cpu_tracer > 0) { cputrace.stopped = regs.stopped; cputrace.intmask = regs.intmask; cputrace.sr = regs.sr; cputrace.state = 1; cputrace.pc = m68k_getpc (); cputrace.memoryoffset = 0; cputrace.cyclecounter = cputrace.cyclecounter_pre = cputrace.cyclecounter_post = 0; cputrace.readcounter = cputrace.writecounter = 0; } x_do_cycles (currprefs.cpu_cycle_exact ? 2 * CYCLE_UNIT : 4 * CYCLE_UNIT); if (regs.spcflags & SPCFLAG_COPPER) do_copper (); if (currprefs.cpu_cycle_exact) { ipl_fetch (); if (time_for_interrupt ()) { do_interrupt (regs.ipl); } } else { if (regs.spcflags & (SPCFLAG_INT | SPCFLAG_DOINT)) { int intr = intlev (); unset_special (SPCFLAG_INT | SPCFLAG_DOINT); if (intr > 0 && intr > regs.intmask) do_interrupt (intr); } } if ((regs.spcflags & (SPCFLAG_BRK | SPCFLAG_MODE_CHANGE))) { unset_special (SPCFLAG_BRK | SPCFLAG_MODE_CHANGE); // SPCFLAG_BRK breaks STOP condition, need to prefetch m68k_resumestopped (); return 1; } if (!uae_int_requested && currprefs.cpu_idle && currprefs.m68k_speed != 0 && (regs.spcflags & SPCFLAG_STOP)) { /* sleep 1ms if STOP-instruction is executed * but only if we have free frametime left to prevent slowdown */ { static int sleepcnt, lvpos, zerocnt; if (vpos != lvpos) { lvpos = vpos; frame_time_t rpt = read_processor_time (); if ((int)rpt - (int)vsyncmaxtime < 0) { sleepcnt--; #if 0 if (pissoff == 0 && currprefs.cachesize && --zerocnt < 0) { sleepcnt = -1; zerocnt = IDLETIME / 4; } #endif if (sleepcnt < 0) { sleepcnt = IDLETIME / 2; sleep_millis_main (1); } } } } } } if (regs.spcflags & SPCFLAG_TRACE) do_trace (); if (currprefs.cpu_cycle_exact) { if (time_for_interrupt ()) { do_interrupt (regs.ipl); } } else { if (regs.spcflags & SPCFLAG_INT) { int intr = intlev (); unset_special (SPCFLAG_INT | SPCFLAG_DOINT); if (intr > 0 && (intr > regs.intmask || intr == 7)) do_interrupt (intr); } } if (regs.spcflags & SPCFLAG_DOINT) { unset_special (SPCFLAG_DOINT); set_special (SPCFLAG_INT); } if ((regs.spcflags & (SPCFLAG_BRK | SPCFLAG_MODE_CHANGE))) { unset_special (SPCFLAG_BRK | SPCFLAG_MODE_CHANGE); return 1; } return 0; } //static uae_u32 pcs[1000]; #if DEBUG_CD32CDTVIO static uae_u32 cd32nextpc, cd32request; static void out_cd32io2 (void) { uae_u32 request = cd32request; write_log (_T("%08x returned\n"), request); //write_log (_T("ACTUAL=%d ERROR=%d\n"), get_long (request + 32), get_byte (request + 31)); cd32nextpc = 0; cd32request = 0; } static void out_cd32io (uae_u32 pc) { TCHAR out[100]; int ioreq = 0; uae_u32 request = m68k_areg (regs, 1); if (pc == cd32nextpc) { out_cd32io2 (); return; } out[0] = 0; switch (pc) { case 0xe57cc0: case 0xf04c34: _stprintf (out, _T("opendevice")); break; case 0xe57ce6: case 0xf04c56: _stprintf (out, _T("closedevice")); break; case 0xe57e44: case 0xf04f2c: _stprintf (out, _T("beginio")); ioreq = 1; break; case 0xe57ef2: case 0xf0500e: _stprintf (out, _T("abortio")); ioreq = -1; break; } if (out[0] == 0) return; if (cd32request) write_log (_T("old request still not returned!\n")); cd32request = request; cd32nextpc = get_long (m68k_areg (regs, 7)); write_log (_T("%s A1=%08X\n"), out, request); if (ioreq) { static int cnt = 0; int cmd = get_word (request + 28); #if 0 if (cmd == 37) { cnt--; if (cnt <= 0) activate_debugger (); } #endif write_log (_T("CMD=%d DATA=%08X LEN=%d %OFF=%d PC=%x\n"), cmd, get_long (request + 40), get_long (request + 36), get_long (request + 44), M68K_GETPC); } if (ioreq < 0) ;//activate_debugger (); } #endif STATIC_INLINE int adjust_cycles (int cycles) { if (currprefs.m68k_speed < 0 || cycles_mult == 0) return cycles; cpu_cycles *= cycles_mult; cpu_cycles /= CYCLES_DIV; return cpu_cycles; } #ifndef CPUEMU_11 static void m68k_run_1 (void) { } #else /* It's really sad to have two almost identical functions for this, but we do it all for performance... :( This version emulates 68000's prefetch "cache" */ static void m68k_run_1 (void) { struct regstruct *r = ®s; for (;;) { uae_u16 opcode = r->ir; count_instr (opcode); #if DEBUG_CD32CDTVIO out_cd32io (m68k_getpc ()); #endif #if 0 int pc = m68k_getpc (); if (pc == 0xdff002) write_log (_T("hip\n")); if (pc != pcs[0] && (pc < 0xd00000 || pc > 0x1000000)) { memmove (pcs + 1, pcs, 998 * 4); pcs[0] = pc; //write_log (_T("%08X-%04X "), pc, opcode); } #endif do_cycles (cpu_cycles); cpu_cycles = (*cpufunctbl[opcode])(opcode); cpu_cycles = adjust_cycles (cpu_cycles); if (r->spcflags) { if (do_specialties (cpu_cycles)) { regs.ipl = regs.ipl_pin; return; } } regs.ipl = regs.ipl_pin; if (!currprefs.cpu_compatible || (currprefs.cpu_cycle_exact && currprefs.cpu_model <= 68000)) return; } } #endif /* CPUEMU_11 */ #ifndef CPUEMU_12 static void m68k_run_1_ce (void) { } #else /* cycle-exact m68k_run () */ static void m68k_run_1_ce (void) { struct regstruct *r = ®s; uae_u16 opcode; if (cpu_tracer < 0) { memcpy (&r->regs, &cputrace.regs, 16 * sizeof (uae_u32)); r->ir = cputrace.ir; r->irc = cputrace.irc; r->sr = cputrace.sr; r->usp = cputrace.usp; r->isp = cputrace.isp; r->intmask = cputrace.intmask; r->stopped = cputrace.stopped; m68k_setpc (cputrace.pc); if (!r->stopped) { if (cputrace.state > 1) { write_log (_T("CPU TRACE: EXCEPTION %d\n"), cputrace.state); Exception (cputrace.state); } else if (cputrace.state == 1) { write_log (_T("CPU TRACE: %04X\n"), cputrace.opcode); (*cpufunctbl[cputrace.opcode])(cputrace.opcode); } } else { write_log (_T("CPU TRACE: STOPPED\n")); } if (r->stopped) set_special (SPCFLAG_STOP); set_cpu_tracer (false); goto cont; } set_cpu_tracer (false); for (;;) { opcode = r->ir; #if DEBUG_CD32CDTVIO out_cd32io (m68k_getpc ()); #endif if (cpu_tracer) { memcpy (&cputrace.regs, &r->regs, 16 * sizeof (uae_u32)); cputrace.opcode = opcode; cputrace.ir = r->ir; cputrace.irc = r->irc; cputrace.sr = r->sr; cputrace.usp = r->usp; cputrace.isp = r->isp; cputrace.intmask = r->intmask; cputrace.stopped = r->stopped; cputrace.state = 1; cputrace.pc = m68k_getpc (); cputrace.startcycles = get_cycles (); cputrace.memoryoffset = 0; cputrace.cyclecounter = cputrace.cyclecounter_pre = cputrace.cyclecounter_post = 0; cputrace.readcounter = cputrace.writecounter = 0; } if (inputrecord_debug & 4) { if (input_record > 0) inprec_recorddebug_cpu (1); else if (input_play > 0) inprec_playdebug_cpu (1); } (*cpufunctbl[opcode])(opcode); if (cpu_tracer) { cputrace.state = 0; } cont: if (cputrace.needendcycles) { cputrace.needendcycles = 0; write_log (_T("STARTCYCLES=%08x ENDCYCLES=%08x\n"), cputrace.startcycles, get_cycles ()); log_dma_record (); } if (r->spcflags || time_for_interrupt ()) { if (do_specialties (0)) return; } if (!currprefs.cpu_cycle_exact || currprefs.cpu_model > 68000) return; } } #endif #ifdef CPUEMU_20 // emulate simple prefetch static uae_u32 get_word_020_prefetchf (uae_u32 pc) { if (pc == regs.prefetch020addr) { uae_u32 v = regs.prefetch020[0]; regs.prefetch020[0] = regs.prefetch020[1]; regs.prefetch020[1] = regs.prefetch020[2]; regs.prefetch020[2] = x_get_word (pc + 6); regs.prefetch020addr += 2; return v; } else if (pc == regs.prefetch020addr + 2) { uae_u32 v = regs.prefetch020[1]; regs.prefetch020[0] = regs.prefetch020[2]; regs.prefetch020[1] = x_get_word (pc + 4); regs.prefetch020[2] = x_get_word (pc + 6); regs.prefetch020addr += 4; return v; } else if (pc == regs.prefetch020addr + 4) { uae_u32 v = regs.prefetch020[2]; regs.prefetch020[0] = x_get_word (pc + 2); regs.prefetch020[1] = x_get_word (pc + 4); regs.prefetch020[2] = x_get_word (pc + 6); regs.prefetch020addr += 6; return v; } else { regs.prefetch020addr = pc + 2; regs.prefetch020[0] = x_get_word (pc + 2); regs.prefetch020[1] = x_get_word (pc + 4); regs.prefetch020[2] = x_get_word (pc + 6); return x_get_word (pc); } } #endif #ifdef JIT /* Completely different run_2 replacement */ void do_nothing (void) { /* What did you expect this to do? */ do_cycles (0); /* I bet you didn't expect *that* ;-) */ } void exec_nostats (void) { struct regstruct *r = ®s; for (;;) { uae_u16 opcode = get_iword (0); cpu_cycles = (*cpufunctbl[opcode])(opcode); cpu_cycles = adjust_cycles (cpu_cycles); do_cycles (cpu_cycles); if (end_block (opcode) || r->spcflags || uae_int_requested) return; /* We will deal with the spcflags in the caller */ } } static int triggered; void execute_normal (void) { struct regstruct *r = ®s; int blocklen; cpu_history pc_hist[MAXRUN]; int total_cycles; if (check_for_cache_miss ()) return; total_cycles = 0; blocklen = 0; start_pc_p = r->pc_oldp; start_pc = r->pc; for (;;) { /* Take note: This is the do-it-normal loop */ uae_u16 opcode; if (currprefs.cpu_compatible) { opcode = get_word_020_prefetchf (m68k_getpc ()); } else { opcode = get_iword (0); } special_mem = DISTRUST_CONSISTENT_MEM; pc_hist[blocklen].location = (uae_u16*)r->pc_p; cpu_cycles = (*cpufunctbl[opcode])(opcode); cpu_cycles = adjust_cycles (cpu_cycles); do_cycles (cpu_cycles); total_cycles += cpu_cycles; pc_hist[blocklen].specmem = special_mem; blocklen++; if (end_block (opcode) || blocklen >= MAXRUN || r->spcflags || uae_int_requested) { compile_block (pc_hist, blocklen, total_cycles); return; /* We will deal with the spcflags in the caller */ } /* No need to check regs.spcflags, because if they were set, we'd have ended up inside that "if" */ } } typedef void compiled_handler (void); static void m68k_run_jit (void) { for (;;) { ((compiled_handler*)(pushall_call_handler))(); /* Whenever we return from that, we should check spcflags */ if (uae_int_requested) { INTREQ_f (0x8008); set_special (SPCFLAG_INT); } if (regs.spcflags) { if (do_specialties (0)) { return; } } } } #endif /* JIT */ #ifndef CPUEMU_0 static void m68k_run_2 (void) { } #else static void opcodedebug (uae_u32 pc, uae_u16 opcode, bool full) { struct mnemolookup *lookup; struct instr *dp; uae_u32 addr; int fault; if (cpufunctbl[opcode] == op_illg_1) opcode = 0x4AFC; dp = table68k + opcode; for (lookup = lookuptab;lookup->mnemo != dp->mnemo; lookup++) ; fault = 0; TRY(prb) { addr = mmu_translate (pc, (regs.mmu_ssw & 4) ? 1 : 0, 0, 0); } CATCH (prb) { fault = 1; } if (!fault) { TCHAR buf[100]; if (full) write_log (_T("mmufixup=%d %04x %04x\n"), mmufixup[0].reg, regs.wb3_status, regs.mmu_ssw); m68k_disasm_2 (buf, sizeof buf / sizeof (TCHAR), addr, NULL, 1, NULL, NULL, 0); write_log (_T("%s\n"), buf); if (full) m68k_dumpstate (stdout, NULL); } } #ifdef CPUEMU_31 /* Aranym MMU 68040 */ static void m68k_run_mmu040 (void) { uae_u16 opcode; uaecptr pc; retry: TRY (prb) { for (;;) { pc = regs.instruction_pc = m68k_getpc (); #if 0 if (regs.regs[8+1] == 0x5b) { static int cnt = 6; cnt--; if (cnt > 0) activate_debugger(); } #endif #if 0 static int done; if (pc == 0x16AF94) { // write_log (_T("D0=%d A7=%08x\n"), regs.regs[0], regs.regs[15]); if (regs.regs[0] == 360) { done = 1; activate_debugger (); } } /* if (pc == 0x16B01A) { write_log (_T("-> ERR\n")); } if (pc == 0x16B018) { write_log (_T("->\n")); } */ if (pc == 0x17967C || pc == 0x13b5e2 - 4) { if (done) { write_log (_T("*\n")); mmu_dump_tables (); activate_debugger (); } } #endif opcode = get_iword_mmu (0); count_instr (opcode); do_cycles (cpu_cycles); cpu_cycles = (*cpufunctbl[opcode])(opcode); cpu_cycles = adjust_cycles (cpu_cycles); if (regs.spcflags) { if (do_specialties (cpu_cycles)) return; } } } CATCH (prb) { if (currprefs.mmu_model == 68060) { regs.instruction_pc = pc; if (mmufixup[1].reg >= 0) { m68k_areg (regs, mmufixup[1].reg) = mmufixup[1].value; mmufixup[1].reg = -1; } } else { #if 0 if (regs.wb3_status & 0x80) { // movem to memory? if ((opcode & 0xff80) == 0x4880) { regs.mmu_ssw |= MMU_SSW_CM; //write_log (_T("MMU_SSW_CM\n")); } } #endif } //opcodedebug (pc, opcode, false); if (mmufixup[0].reg >= 0) { m68k_areg (regs, mmufixup[0].reg) = mmufixup[0].value; mmufixup[0].reg = -1; } //activate_debugger (); TRY (prb2) { Exception (prb); } CATCH (prb2) { write_log (_T("MMU: double bus error, rebooting..\n")); regs.tcr = 0; m68k_reset (0); m68k_setpc (0xf80002); mmu_reset (); uae_reset (1, 0); return; } goto retry; } } #endif /* "cycle exact" 68020/030 */ STATIC_INLINE void docodece020 (uae_u32 opcode) { (*cpufunctbl[opcode])(opcode); if (regs.ce020memcycles > 0) { regs.ce020tmpcycles = CYCLE_UNIT * MAX68020CYCLES; x_do_cycles (regs.ce020memcycles); regs.ce020memcycles = 0; } } static void m68k_run_2ce (void) { struct regstruct *r = ®s; uae_u16 opcode; bool exit = false; if (cpu_tracer < 0) { memcpy (&r->regs, &cputrace.regs, 16 * sizeof (uae_u32)); r->ir = cputrace.ir; r->irc = cputrace.irc; r->sr = cputrace.sr; r->usp = cputrace.usp; r->isp = cputrace.isp; r->intmask = cputrace.intmask; r->stopped = cputrace.stopped; r->msp = cputrace.msp; r->vbr = cputrace.vbr; r->caar = cputrace.caar; r->cacr = cputrace.cacr; r->cacheholdingdata020 = cputrace.cacheholdingdata020; r->cacheholdingaddr020 = cputrace.cacheholdingaddr020; r->prefetch020addr = cputrace.prefetch020addr; memcpy (&r->prefetch020, &cputrace.prefetch020, CPU_PIPELINE_MAX * sizeof (uae_u16)); memcpy (&caches020, &cputrace.caches020, sizeof caches020); m68k_setpc (cputrace.pc); if (!r->stopped) { if (cputrace.state > 1) Exception (cputrace.state); else if (cputrace.state == 1) docodece020 (cputrace.opcode); } if (regs.stopped) set_special (SPCFLAG_STOP); set_cpu_tracer (false); goto cont; } set_cpu_tracer (false); for (;;) { r->instruction_pc = m68k_getpc (); opcode = get_word_ce020_prefetch (0); if (cpu_tracer) { #if CPUTRACE_DEBUG validate_trace (); #endif memcpy (&cputrace.regs, &r->regs, 16 * sizeof (uae_u32)); cputrace.opcode = opcode; cputrace.ir = r->ir; cputrace.irc = r->irc; cputrace.sr = r->sr; cputrace.usp = r->usp; cputrace.isp = r->isp; cputrace.intmask = r->intmask; cputrace.stopped = r->stopped; cputrace.state = 1; cputrace.pc = m68k_getpc (); cputrace.msp = r->msp; cputrace.vbr = r->vbr; cputrace.caar = r->caar; cputrace.cacr = r->cacr; cputrace.cacheholdingdata020 = r->cacheholdingdata020; cputrace.cacheholdingaddr020 = r->cacheholdingaddr020; cputrace.prefetch020addr = r->prefetch020addr; memcpy (&cputrace.prefetch020, &r->prefetch020, CPU_PIPELINE_MAX * sizeof (uae_u16)); memcpy (&cputrace.caches020, &caches020, sizeof caches020); cputrace.memoryoffset = 0; cputrace.cyclecounter = cputrace.cyclecounter_pre = cputrace.cyclecounter_post = 0; cputrace.readcounter = cputrace.writecounter = 0; } if (inputrecord_debug & 4) { if (input_record > 0) inprec_recorddebug_cpu (1); else if (input_play > 0) inprec_playdebug_cpu (1); } docodece020 (opcode); cont: if (r->spcflags || time_for_interrupt ()) { if (do_specialties (0)) exit = true; } regs.ce020tmpcycles -= cpucycleunit; if (regs.ce020tmpcycles <= 0) { x_do_cycles (1 * CYCLE_UNIT); regs.ce020tmpcycles = CYCLE_UNIT * MAX68020CYCLES;; } regs.ipl = regs.ipl_pin; if (exit) return; } } #ifdef CPUEMU_20 // only opcode fetch prefetch static void m68k_run_2pf (void) { struct regstruct *r = ®s; for (;;) { uae_u16 opcode; r->instruction_pc = m68k_getpc (); #if DEBUG_CD32CDTVIO out_cd32io (m68k_getpc ()); #endif x_do_cycles (cpu_cycles); opcode = get_word_020_prefetchf (r->instruction_pc); count_instr (opcode); cpu_cycles = (*cpufunctbl[opcode])(opcode); cpu_cycles = adjust_cycles (cpu_cycles); if (r->spcflags) { if (do_specialties (cpu_cycles)) return; } } } uae_u32 get_word_020_prefetch (int o) { uae_u32 pc = m68k_getpc () + o; if (pc == regs.prefetch020addr) { uae_u32 v = regs.prefetch020[0]; regs.prefetch020[0] = regs.prefetch020[1]; regs.prefetch020[1] = regs.prefetch020[2]; regs.prefetch020[2] = x_get_word (pc + 6); regs.prefetch020addr += 2; return v; } else { regs.prefetch020addr = pc + 2; regs.prefetch020[0] = x_get_word (pc + 2); regs.prefetch020[1] = x_get_word (pc + 4); regs.prefetch020[2] = x_get_word (pc + 6); return x_get_word (pc); } } // full prefetch 020+ static void m68k_run_2p (void) { struct regstruct *r = ®s; for (;;) { uae_u16 opcode; r->instruction_pc = m68k_getpc (); #if DEBUG_CD32CDTVIO out_cd32io (m68k_getpc ()); #endif x_do_cycles (cpu_cycles); opcode = get_word_020_prefetch (0); count_instr (opcode); cpu_cycles = (*cpufunctbl[opcode])(opcode); cpu_cycles = adjust_cycles (cpu_cycles); if (r->spcflags) { if (do_specialties (cpu_cycles)) { ipl_fetch (); return; } } ipl_fetch (); } } #endif //static int used[65536]; /* Same thing, but don't use prefetch to get opcode. */ static void m68k_run_2 (void) { struct regstruct *r = ®s; for (;;) { r->instruction_pc = m68k_getpc (); uae_u16 opcode = get_iword (0); count_instr (opcode); // if (regs.s == 0 && regs.regs[15] < 0x10040000 && regs.regs[15] > 0x10000000) // activate_debugger(); #if 0 if (!used[opcode]) { write_log (_T("%04X "), opcode); used[opcode] = 1; } #endif do_cycles (cpu_cycles); cpu_cycles = (*cpufunctbl[opcode])(opcode); cpu_cycles = adjust_cycles (cpu_cycles); if (r->spcflags) { if (do_specialties (cpu_cycles)) return; } } } /* fake MMU 68k */ static void m68k_run_mmu (void) { for (;;) { uae_u16 opcode = get_iword (0); do_cycles (cpu_cycles); mmu_backup_regs = regs; cpu_cycles = (*cpufunctbl[opcode])(opcode); cpu_cycles = adjust_cycles (cpu_cycles); if (mmu_triggered) mmu_do_hit (); if (regs.spcflags) { if (do_specialties (cpu_cycles)) return; } } } #endif /* CPUEMU_0 */ int in_m68k_go = 0; static void exception2_handle (uaecptr addr, uaecptr fault) { last_addr_for_exception_3 = addr; last_fault_for_exception_3 = fault; last_writeaccess_for_exception_3 = 0; last_instructionaccess_for_exception_3 = 0; Exception (2); } void m68k_go (int may_quit) { int hardboot = 1; int startup = 1; if (in_m68k_go || !may_quit) { write_log (_T("Bug! m68k_go is not reentrant.\n")); abort (); } reset_frame_rate_hack (); update_68k_cycles (); start_cycles = 0; set_cpu_tracer (false); in_m68k_go++; for (;;) { void (*run_func)(void); cputrace.state = -1; if (currprefs.inprecfile[0] && input_play) { inprec_open (currprefs.inprecfile, NULL); changed_prefs.inprecfile[0] = currprefs.inprecfile[0] = 0; quit_program = UAE_RESET; } if (input_play || input_record) inprec_startup (); if (quit_program > 0) { int hardreset = (quit_program == UAE_RESET_HARD ? 1 : 0) | hardboot; bool kbreset = quit_program == UAE_RESET_KEYBOARD; if (quit_program == UAE_QUIT) break; int restored = 0; hsync_counter = 0; vsync_counter = 0; quit_program = 0; hardboot = 0; #ifdef SAVESTATE if (savestate_state == STATE_DORESTORE) savestate_state = STATE_RESTORE; if (savestate_state == STATE_RESTORE) restore_state (savestate_fname); else if (savestate_state == STATE_REWIND) savestate_rewind (); #endif set_cycles (start_cycles); custom_reset (hardreset != 0, kbreset); m68k_reset (hardreset); if (hardreset) { memory_clear (); write_log (_T("hardreset, memory cleared\n")); } #ifdef SAVESTATE /* We may have been restoring state, but we're done now. */ if (isrestore ()) { if (debug_dma) { record_dma_reset (); record_dma_reset (); } savestate_restore_finish (); memory_map_dump (); startup = 1; restored = 1; } #endif if (currprefs.produce_sound == 0) eventtab[ev_audio].active = 0; m68k_setpc (regs.pc); check_prefs_changed_audio (); if (!restored || hsync_counter == 0) savestate_check (); if (input_record == INPREC_RECORD_START) input_record = INPREC_RECORD_NORMAL; } else { if (input_record == INPREC_RECORD_START) { input_record = INPREC_RECORD_NORMAL; savestate_init (); hsync_counter = 0; vsync_counter = 0; savestate_check (); } } if (changed_prefs.inprecfile[0] && input_record) inprec_prepare_record (savestate_fname[0] ? savestate_fname : NULL); set_cpu_tracer (false); #ifdef DEBUGGER if (debugging) debug (); #endif if (regs.panic) { regs.panic = 0; /* program jumped to non-existing memory and cpu was >= 68020 */ get_real_address (regs.isp); /* stack in no one's land? -> reboot */ if (regs.isp & 1) regs.panic = 1; if (!regs.panic) exception2_handle (regs.panic_pc, regs.panic_addr); if (regs.panic) { /* system is very badly confused */ write_log (_T("double bus error or corrupted stack, forcing reboot..\n")); regs.panic = 0; uae_reset (1, 0); } } #if 0 /* what was the meaning of this? this breaks trace emulation if debugger is used */ if (regs.spcflags) { uae_u32 of = regs.spcflags; regs.spcflags &= ~(SPCFLAG_BRK | SPCFLAG_MODE_CHANGE); do_specialties (0); regs.spcflags |= of & (SPCFLAG_BRK | SPCFLAG_MODE_CHANGE); } #endif set_x_funcs (); if (startup) { custom_prepare (); protect_roms (true); } startup = 0; if (mmu_enabled && !currprefs.cachesize) { run_func = m68k_run_mmu; } else { run_func = currprefs.cpu_cycle_exact && currprefs.cpu_model == 68000 ? m68k_run_1_ce : currprefs.cpu_compatible && currprefs.cpu_model == 68000 ? m68k_run_1 : #ifdef JIT currprefs.cpu_model >= 68020 && currprefs.cachesize ? m68k_run_jit : #endif (currprefs.cpu_model == 68040 || currprefs.cpu_model == 68060) && currprefs.mmu_model ? m68k_run_mmu040 : currprefs.cpu_model >= 68020 && currprefs.cpu_cycle_exact ? m68k_run_2ce : currprefs.cpu_compatible ? (currprefs.cpu_model <= 68020 ? m68k_run_2p : m68k_run_2pf) : m68k_run_2; } run_func (); } protect_roms (false); in_m68k_go--; } #if 0 static void m68k_verify (uaecptr addr, uaecptr *nextpc) { uae_u16 opcode, val; struct instr *dp; opcode = get_iword_1 (0); last_op_for_exception_3 = opcode; m68kpc_offset = 2; if (cpufunctbl[opcode] == op_illg_1) { opcode = 0x4AFC; } dp = table68k + opcode; if (dp->suse) { if (!verify_ea (dp->sreg, dp->smode, dp->size, &val)) { Exception (3, 0); return; } } if (dp->duse) { if (!verify_ea (dp->dreg, dp->dmode, dp->size, &val)) { Exception (3, 0); return; } } } #endif static const TCHAR *ccnames[] = { _T("T "),_T("F "),_T("HI"),_T("LS"),_T("CC"),_T("CS"),_T("NE"),_T("EQ"), _T("VC"),_T("VS"),_T("PL"),_T("MI"),_T("GE"),_T("LT"),_T("GT"),_T("LE") }; static void addmovemreg (TCHAR *out, int *prevreg, int *lastreg, int *first, int reg) { TCHAR *p = out + _tcslen (out); if (*prevreg < 0) { *prevreg = reg; *lastreg = reg; return; } if ((*prevreg) + 1 != reg || (reg & 8) != ((*prevreg & 8))) { _stprintf (p, _T("%s%c%d"), (*first) ? _T("") : _T("/"), (*lastreg) < 8 ? 'D' : 'A', (*lastreg) & 7); p = p + _tcslen (p); if ((*lastreg) + 2 == reg) { _stprintf (p, _T("/%c%d"), (*prevreg) < 8 ? 'D' : 'A', (*prevreg) & 7); } else if ((*lastreg) != (*prevreg)) { _stprintf (p, _T("-%c%d"), (*prevreg) < 8 ? 'D' : 'A', (*prevreg) & 7); } *lastreg = reg; *first = 0; } *prevreg = reg; } static void movemout (TCHAR *out, uae_u16 mask, int mode) { unsigned int dmask, amask; int prevreg = -1, lastreg = -1, first = 1; if (mode == Apdi) { int i; uae_u8 dmask2 = (mask >> 8) & 0xff; uae_u8 amask2 = mask & 0xff; dmask = 0; amask = 0; for (i = 0; i < 8; i++) { if (dmask2 & (1 << i)) dmask |= 1 << (7 - i); if (amask2 & (1 << i)) amask |= 1 << (7 - i); } } else { dmask = mask & 0xff; amask = (mask >> 8) & 0xff; } while (dmask) { addmovemreg (out, &prevreg, &lastreg, &first, movem_index1[dmask]); dmask = movem_next[dmask]; } while (amask) { addmovemreg (out, &prevreg, &lastreg, &first, movem_index1[amask] + 8); amask = movem_next[amask]; } addmovemreg (out, &prevreg, &lastreg, &first, -1); } static void disasm_size (TCHAR *instrname, struct instr *dp) { #if 0 int i, size; uae_u16 mnemo = dp->mnemo; size = dp->size; for (i = 0; i < 65536; i++) { struct instr *in = &table68k[i]; if (in->mnemo == mnemo && in != dp) { if (size != in->size) break; } } if (i == 65536) size = -1; #endif switch (dp->size) { case sz_byte: _tcscat (instrname, _T(".B ")); break; case sz_word: _tcscat (instrname, _T(".W ")); break; case sz_long: _tcscat (instrname, _T(".L ")); break; default: _tcscat (instrname, _T(" ")); break; } } void m68k_disasm_2 (TCHAR *buf, int bufsize, uaecptr addr, uaecptr *nextpc, int cnt, uae_u32 *seaddr, uae_u32 *deaddr, int safemode) { uaecptr newpc = 0; m68kpc_offset = addr - m68k_getpc (); if (buf) memset (buf, 0, bufsize * sizeof (TCHAR)); if (!table68k) return; while (cnt-- > 0) { TCHAR instrname[100], *ccpt; int i; uae_u32 opcode; struct mnemolookup *lookup; struct instr *dp; int oldpc; int m68kpc_illg = 0; bool illegal = false; oldpc = m68kpc_offset; opcode = get_iword_1 (m68kpc_offset); if (cpufunctbl[opcode] == op_illg_1 || cpufunctbl[opcode] == op_unimpl_1) { m68kpc_illg = m68kpc_offset + 2; illegal = TRUE; } dp = table68k + opcode; if (dp->mnemo == i_ILLG) { illegal = FALSE; opcode = 0x4AFC; dp = table68k + opcode; } for (lookup = lookuptab;lookup->mnemo != dp->mnemo; lookup++) ; buf = buf_out (buf, &bufsize, _T("%08lX "), m68k_getpc () + m68kpc_offset); m68kpc_offset += 2; if (lookup->friendlyname) _tcscpy (instrname, lookup->friendlyname); else _tcscpy (instrname, lookup->name); ccpt = _tcsstr (instrname, _T("cc")); if (ccpt != 0) { _tcsncpy (ccpt, ccnames[dp->cc], 2); } disasm_size (instrname, dp); if (lookup->mnemo == i_MOVEC2 || lookup->mnemo == i_MOVE2C) { uae_u16 imm = get_iword_1 (m68kpc_offset); uae_u16 creg = imm & 0x0fff; uae_u16 r = imm >> 12; TCHAR regs[16], *cname = _T("?"); int i; for (i = 0; m2cregs[i].regname; i++) { if (m2cregs[i].regno == creg) break; } _stprintf (regs, _T("%c%d"), r >= 8 ? 'A' : 'D', r >= 8 ? r - 8 : r); if (m2cregs[i].regname) cname = m2cregs[i].regname; if (lookup->mnemo == i_MOVE2C) { _tcscat (instrname, regs); _tcscat (instrname, _T(",")); _tcscat (instrname, cname); } else { _tcscat (instrname, cname); _tcscat (instrname, _T(",")); _tcscat (instrname, regs); } m68kpc_offset += 2; } else if (lookup->mnemo == i_MVMEL) { newpc = m68k_getpc () + m68kpc_offset; m68kpc_offset += 2; newpc += ShowEA (0, opcode, dp->dreg, dp->dmode, dp->size, instrname, deaddr, safemode); _tcscat (instrname, _T(",")); movemout (instrname, get_iword_1 (oldpc + 2), dp->dmode); } else if (lookup->mnemo == i_MVMLE) { m68kpc_offset += 2; movemout (instrname, get_iword_1 (oldpc + 2), dp->dmode); _tcscat (instrname, _T(",")); newpc = m68k_getpc () + m68kpc_offset; newpc += ShowEA (0, opcode, dp->dreg, dp->dmode, dp->size, instrname, deaddr, safemode); } else { if (dp->suse) { newpc = m68k_getpc () + m68kpc_offset; newpc += ShowEA (0, opcode, dp->sreg, dp->smode, dp->size, instrname, seaddr, safemode); } if (dp->suse && dp->duse) _tcscat (instrname, _T(",")); if (dp->duse) { newpc = m68k_getpc () + m68kpc_offset; newpc += ShowEA (0, opcode, dp->dreg, dp->dmode, dp->size, instrname, deaddr, safemode); } } for (i = 0; i < (m68kpc_offset - oldpc) / 2; i++) { buf = buf_out (buf, &bufsize, _T("%04x "), get_iword_1 (oldpc + i * 2)); } while (i++ < 5) buf = buf_out (buf, &bufsize, _T(" ")); if (illegal) buf = buf_out (buf, &bufsize, _T("[ ")); buf = buf_out (buf, &bufsize, instrname); if (illegal) buf = buf_out (buf, &bufsize, _T(" ]")); if (ccpt != 0) { if (deaddr) *deaddr = newpc; if (cctrue (dp->cc)) buf = buf_out (buf, &bufsize, _T(" == $%08lX (T)"), newpc); else buf = buf_out (buf, &bufsize, _T(" == $%08lX (F)"), newpc); } else if ((opcode & 0xff00) == 0x6100) { /* BSR */ if (deaddr) *deaddr = newpc; buf = buf_out (buf, &bufsize, _T(" == $%08lX"), newpc); } buf = buf_out (buf, &bufsize, _T("\n")); if (illegal) m68kpc_offset = m68kpc_illg; } if (nextpc) *nextpc = m68k_getpc () + m68kpc_offset; } void m68k_disasm_ea (void *f, uaecptr addr, uaecptr *nextpc, int cnt, uae_u32 *seaddr, uae_u32 *deaddr) { TCHAR *buf; buf = xmalloc (TCHAR, (MAX_LINEWIDTH + 1) * cnt); if (!buf) return; m68k_disasm_2 (buf, (MAX_LINEWIDTH + 1) * cnt, addr, nextpc, cnt, seaddr, deaddr, 1); f_out (f, _T("%s"), buf); xfree (buf); } void m68k_disasm (void *f, uaecptr addr, uaecptr *nextpc, int cnt) { TCHAR *buf; buf = xmalloc (TCHAR, (MAX_LINEWIDTH + 1) * cnt); if (!buf) return; m68k_disasm_2 (buf, (MAX_LINEWIDTH + 1) * cnt, addr, nextpc, cnt, NULL, NULL, 0); f_out (f, _T("%s"), buf); xfree (buf); } /************************************************************* Disasm the m68kcode at the given address into instrname and instrcode *************************************************************/ void sm68k_disasm (TCHAR *instrname, TCHAR *instrcode, uaecptr addr, uaecptr *nextpc) { TCHAR *ccpt; uae_u32 opcode; struct mnemolookup *lookup; struct instr *dp; int oldpc; uaecptr newpc = 0; m68kpc_offset = addr - m68k_getpc (); oldpc = m68kpc_offset; opcode = get_iword_1 (m68kpc_offset); if (cpufunctbl[opcode] == op_illg_1) { opcode = 0x4AFC; } dp = table68k + opcode; for (lookup = lookuptab;lookup->mnemo != dp->mnemo; lookup++); m68kpc_offset += 2; _tcscpy (instrname, lookup->name); ccpt = _tcsstr (instrname, _T("cc")); if (ccpt != 0) { _tcsncpy (ccpt, ccnames[dp->cc], 2); } switch (dp->size){ case sz_byte: _tcscat (instrname, _T(".B ")); break; case sz_word: _tcscat (instrname, _T(".W ")); break; case sz_long: _tcscat (instrname, _T(".L ")); break; default: _tcscat (instrname, _T(" ")); break; } if (dp->suse) { newpc = m68k_getpc () + m68kpc_offset; newpc += ShowEA (0, opcode, dp->sreg, dp->smode, dp->size, instrname, NULL, 0); } if (dp->suse && dp->duse) _tcscat (instrname, _T(",")); if (dp->duse) { newpc = m68k_getpc () + m68kpc_offset; newpc += ShowEA (0, opcode, dp->dreg, dp->dmode, dp->size, instrname, NULL, 0); } if (instrcode) { int i; for (i = 0; i < (m68kpc_offset - oldpc) / 2; i++) { _stprintf (instrcode, _T("%04x "), get_iword_1 (oldpc + i * 2)); instrcode += _tcslen (instrcode); } } if (nextpc) *nextpc = m68k_getpc () + m68kpc_offset; } struct cpum2c m2cregs[] = { {0, _T("SFC")}, {1, _T("DFC")}, {2, _T("CACR")}, {3, _T("TC")}, {4, _T("ITT0")}, {5, _T("ITT1")}, {6, _T("DTT0")}, {7, _T("DTT1")}, {8, _T("BUSC")}, {0x800, _T("USP")}, {0x801, _T("VBR")}, {0x802, _T("CAAR")}, {0x803, _T("MSP")}, {0x804, _T("ISP")}, {0x805, _T("MMUS")}, {0x806, _T("URP")}, {0x807, _T("SRP")}, {0x808, _T("PCR")}, {-1, NULL} }; void val_move2c2 (int regno, uae_u32 val) { switch (regno) { case 0: regs.sfc = val; break; case 1: regs.dfc = val; break; case 2: regs.cacr = val; break; case 3: regs.tcr = val; break; case 4: regs.itt0 = val; break; case 5: regs.itt1 = val; break; case 6: regs.dtt0 = val; break; case 7: regs.dtt1 = val; break; case 8: regs.buscr = val; break; case 0x800: regs.usp = val; break; case 0x801: regs.vbr = val; break; case 0x802: regs.caar = val; break; case 0x803: regs.msp = val; break; case 0x804: regs.isp = val; break; case 0x805: regs.mmusr = val; break; case 0x806: regs.urp = val; break; case 0x807: regs.srp = val; break; case 0x808: regs.pcr = val; break; } } uae_u32 val_move2c (int regno) { switch (regno) { case 0: return regs.sfc; case 1: return regs.dfc; case 2: return regs.cacr; case 3: return regs.tcr; case 4: return regs.itt0; case 5: return regs.itt1; case 6: return regs.dtt0; case 7: return regs.dtt1; case 8: return regs.buscr; case 0x800: return regs.usp; case 0x801: return regs.vbr; case 0x802: return regs.caar; case 0x803: return regs.msp; case 0x804: return regs.isp; case 0x805: return regs.mmusr; case 0x806: return regs.urp; case 0x807: return regs.srp; case 0x808: return regs.pcr; default: return 0; } } void m68k_dumpstate (void *f, uaecptr *nextpc) { int i, j; for (i = 0; i < 8; i++){ f_out (f, _T(" D%d %08lX "), i, m68k_dreg (regs, i)); if ((i & 3) == 3) f_out (f, _T("\n")); } for (i = 0; i < 8; i++){ f_out (f, _T(" A%d %08lX "), i, m68k_areg (regs, i)); if ((i & 3) == 3) f_out (f, _T("\n")); } if (regs.s == 0) regs.usp = m68k_areg (regs, 7); if (regs.s && regs.m) regs.msp = m68k_areg (regs, 7); if (regs.s && regs.m == 0) regs.isp = m68k_areg (regs, 7); j = 2; f_out (f, _T("USP %08X ISP %08X "), regs.usp, regs.isp); for (i = 0; m2cregs[i].regno>= 0; i++) { if (!movec_illg (m2cregs[i].regno)) { if (!_tcscmp (m2cregs[i].regname, _T("USP")) || !_tcscmp (m2cregs[i].regname, _T("ISP"))) continue; if (j > 0 && (j % 4) == 0) f_out (f, _T("\n")); f_out (f, _T("%-4s %08X "), m2cregs[i].regname, val_move2c (m2cregs[i].regno)); j++; } } if (j > 0) f_out (f, _T("\n")); f_out (f, _T("T=%d%d S=%d M=%d X=%d N=%d Z=%d V=%d C=%d IMASK=%d STP=%d\n"), regs.t1, regs.t0, regs.s, regs.m, GET_XFLG (), GET_NFLG (), GET_ZFLG (), GET_VFLG (), GET_CFLG (), regs.intmask, regs.stopped); #ifdef FPUEMU if (currprefs.fpu_model) { uae_u32 fpsr; for (i = 0; i < 8; i++){ f_out (f, _T("FP%d: %g "), i, regs.fp[i]); if ((i & 3) == 3) f_out (f, _T("\n")); } fpsr = get_fpsr (); f_out (f, _T("FPSR: %04X FPCR: %08x FPIAR: %08x N=%d Z=%d I=%d NAN=%d\n"), fpsr, regs.fpcr, regs.fpiar, (fpsr & 0x8000000) != 0, (fpsr & 0x4000000) != 0, (fpsr & 0x2000000) != 0, (fpsr & 0x1000000) != 0); } #endif if (currprefs.cpu_compatible && currprefs.cpu_model == 68000) { struct instr *dp; struct mnemolookup *lookup1, *lookup2; dp = table68k + regs.irc; for (lookup1 = lookuptab; lookup1->mnemo != dp->mnemo; lookup1++); dp = table68k + regs.ir; for (lookup2 = lookuptab; lookup2->mnemo != dp->mnemo; lookup2++); f_out (f, _T("Prefetch %04x (%s) %04x (%s)\n"), regs.irc, lookup1->name, regs.ir, lookup2->name); } m68k_disasm (f, m68k_getpc (), nextpc, 1); if (nextpc) f_out (f, _T("Next PC: %08lx\n"), *nextpc); } #ifdef SAVESTATE /* CPU save/restore code */ #define CPUTYPE_EC 1 #define CPUMODE_HALT 1 uae_u8 *restore_cpu (uae_u8 *src) { int i, flags, model; uae_u32 l; currprefs.cpu_model = changed_prefs.cpu_model = model = restore_u32 (); flags = restore_u32 (); changed_prefs.address_space_24 = 0; if (flags & CPUTYPE_EC) changed_prefs.address_space_24 = 1; currprefs.address_space_24 = changed_prefs.address_space_24; currprefs.cpu_compatible = changed_prefs.cpu_compatible; currprefs.cpu_cycle_exact = changed_prefs.cpu_cycle_exact; currprefs.blitter_cycle_exact = changed_prefs.blitter_cycle_exact; currprefs.cpu_frequency = changed_prefs.cpu_frequency = 0; currprefs.cpu_clock_multiplier = changed_prefs.cpu_clock_multiplier = 0; for (i = 0; i < 15; i++) regs.regs[i] = restore_u32 (); regs.pc = restore_u32 (); regs.irc = restore_u16 (); regs.ir = restore_u16 (); regs.usp = restore_u32 (); regs.isp = restore_u32 (); regs.sr = restore_u16 (); l = restore_u32 (); if (l & CPUMODE_HALT) { regs.stopped = 1; } else { regs.stopped = 0; } if (model >= 68010) { regs.dfc = restore_u32 (); regs.sfc = restore_u32 (); regs.vbr = restore_u32 (); } if (model >= 68020) { regs.caar = restore_u32 (); regs.cacr = restore_u32 (); regs.msp = restore_u32 (); } if (model >= 68030) { crp_030 = restore_u64 (); srp_030 = restore_u64 (); tt0_030 =restore_u32 (); tt1_030 = restore_u32 (); tc_030 = restore_u32 (); mmusr_030 = restore_u16 (); } if (model >= 68040) { regs.itt0 = restore_u32 (); regs.itt1 = restore_u32 (); regs.dtt0 = restore_u32 (); regs.dtt1 = restore_u32 (); regs.tcr = restore_u32 (); regs.urp = restore_u32 (); regs.srp = restore_u32 (); } if (model >= 68060) { regs.buscr = restore_u32 (); regs.pcr = restore_u32 (); } if (flags & 0x80000000) { int khz = restore_u32 (); restore_u32 (); if (khz > 0 && khz < 800000) currprefs.m68k_speed = changed_prefs.m68k_speed = 0; } set_cpu_caches (); if (flags & 0x40000000) { if (model == 68020) { for (int i = 0; i < CACHELINES020; i++) { caches020[i].data = restore_u32 (); caches020[i].tag = restore_u32 (); caches020[i].valid = restore_u8 () != 0; } regs.prefetch020addr = restore_u32 (); regs.cacheholdingaddr020 = restore_u32 (); regs.cacheholdingdata020 = restore_u32 (); for (int i = 0; i < CPU_PIPELINE_MAX; i++) regs.prefetch020[i] = restore_u16 (); } else if (model == 68030) { for (int i = 0; i < CACHELINES030; i++) { for (int j = 0; j < 4; j++) { icaches030[i].data[j] = restore_u32 (); icaches030[i].valid[j] = restore_u8 () != 0; } icaches030[i].tag = restore_u32 (); } for (int i = 0; i < CACHELINES030; i++) { for (int j = 0; j < 4; j++) { dcaches030[i].data[j] = restore_u32 (); dcaches030[i].valid[j] = restore_u8 () != 0; } dcaches030[i].tag = restore_u32 (); } } if (model >= 68020) { regs.ce020memcycles = restore_u32 (); regs.ce020tmpcycles = restore_u32 (); } } write_log (_T("CPU: %d%s%03d, PC=%08X\n"), model / 1000, flags & 1 ? _T("EC") : _T(""), model % 1000, regs.pc); return src; } void restore_cpu_finish (void) { init_m68k (); m68k_setpc (regs.pc); doint (); fill_prefetch_quick (); set_cycles (start_cycles); events_schedule (); if (regs.stopped) set_special (SPCFLAG_STOP); //activate_debugger (); } uae_u8 *save_cpu_trace (int *len, uae_u8 *dstptr) { uae_u8 *dstbak, *dst; if (cputrace.state <= 0) return NULL; if (dstptr) dstbak = dst = dstptr; else dstbak = dst = xmalloc (uae_u8, 1000); save_u32 (2 | 4); save_u16 (cputrace.opcode); for (int i = 0; i < 16; i++) save_u32 (cputrace.regs[i]); save_u32 (cputrace.pc); save_u16 (cputrace.irc); save_u16 (cputrace.ir); save_u32 (cputrace.usp); save_u32 (cputrace.isp); save_u16 (cputrace.sr); save_u16 (cputrace.intmask); save_u16 ((cputrace.stopped ? 1 : 0) | (regs.stopped ? 2 : 0)); save_u16 (cputrace.state); save_u32 (cputrace.cyclecounter); save_u32 (cputrace.cyclecounter_pre); save_u32 (cputrace.cyclecounter_post); save_u32 (cputrace.readcounter); save_u32 (cputrace.writecounter); save_u32 (cputrace.memoryoffset); write_log (_T("CPUT SAVE: PC=%08x C=%08X %08x %08x %08x %d %d %d\n"), cputrace.pc, cputrace.startcycles, cputrace.cyclecounter, cputrace.cyclecounter_pre, cputrace.cyclecounter_post, cputrace.readcounter, cputrace.writecounter, cputrace.memoryoffset); for (int i = 0; i < cputrace.memoryoffset; i++) { save_u32 (cputrace.ctm[i].addr); save_u32 (cputrace.ctm[i].data); save_u32 (cputrace.ctm[i].mode); write_log (_T("CPUT%d: %08x %08x %08x\n"), i, cputrace.ctm[i].addr, cputrace.ctm[i].data, cputrace.ctm[i].mode); } save_u32 (cputrace.startcycles); if (currprefs.cpu_model == 68020) { for (int i = 0; i < CACHELINES020; i++) { save_u32 (cputrace.caches020[i].data); save_u32 (cputrace.caches020[i].tag); save_u8 (cputrace.caches020[i].valid ? 1 : 0); } save_u32 (cputrace.prefetch020addr); save_u32 (cputrace.cacheholdingaddr020); save_u32 (cputrace.cacheholdingdata020); for (int i = 0; i < CPU_PIPELINE_MAX; i++) save_u16 (cputrace.prefetch020[i]); } *len = dst - dstbak; cputrace.needendcycles = 1; return dstbak; } uae_u8 *restore_cpu_trace (uae_u8 *src) { cpu_tracer = 0; cputrace.state = 0; uae_u32 v = restore_u32 (); if (!(v & 2)) return src; cputrace.opcode = restore_u16 (); for (int i = 0; i < 16; i++) cputrace.regs[i] = restore_u32 (); cputrace.pc = restore_u32 (); cputrace.irc = restore_u16 (); cputrace.ir = restore_u16 (); cputrace.usp = restore_u32 (); cputrace.isp = restore_u32 (); cputrace.sr = restore_u16 (); cputrace.intmask = restore_u16 (); cputrace.stopped = restore_u16 (); cputrace.state = restore_u16 (); cputrace.cyclecounter = restore_u32 (); cputrace.cyclecounter_pre = restore_u32 (); cputrace.cyclecounter_post = restore_u32 (); cputrace.readcounter = restore_u32 (); cputrace.writecounter = restore_u32 (); cputrace.memoryoffset = restore_u32 (); for (int i = 0; i < cputrace.memoryoffset; i++) { cputrace.ctm[i].addr = restore_u32 (); cputrace.ctm[i].data = restore_u32 (); cputrace.ctm[i].mode = restore_u32 (); } cputrace.startcycles = restore_u32 (); if (v & 4) { if (currprefs.cpu_model == 68020) { for (int i = 0; i < CACHELINES020; i++) { cputrace.caches020[i].data = restore_u32 (); cputrace.caches020[i].tag = restore_u32 (); cputrace.caches020[i].valid = restore_u8 () != 0; } cputrace.prefetch020addr = restore_u32 (); cputrace.cacheholdingaddr020 = restore_u32 (); cputrace.cacheholdingdata020 = restore_u32 (); for (int i = 0; i < CPU_PIPELINE_MAX; i++) cputrace.prefetch020[i] = restore_u16 (); } } cputrace.needendcycles = 1; if (v && cputrace.state) { if (currprefs.cpu_model > 68000) { if (v & 4) cpu_tracer = -1; } else { cpu_tracer = -1; } } return src; } uae_u8 *restore_cpu_extra (uae_u8 *src) { restore_u32 (); uae_u32 flags = restore_u32 (); currprefs.cpu_cycle_exact = changed_prefs.cpu_cycle_exact = (flags & 1) ? true : false; currprefs.blitter_cycle_exact = changed_prefs.blitter_cycle_exact = currprefs.cpu_cycle_exact; currprefs.cpu_compatible = changed_prefs.cpu_compatible = (flags & 2) ? true : false; currprefs.cpu_frequency = changed_prefs.cpu_frequency = restore_u32 (); currprefs.cpu_clock_multiplier = changed_prefs.cpu_clock_multiplier = restore_u32 (); //currprefs.cachesize = changed_prefs.cachesize = (flags & 8) ? 8192 : 0; currprefs.m68k_speed = changed_prefs.m68k_speed = 0; if (flags & 4) currprefs.m68k_speed = changed_prefs.m68k_speed = -1; if (flags & 16) currprefs.m68k_speed = changed_prefs.m68k_speed = (flags >> 24) * CYCLE_UNIT; currprefs.cpu060_revision = changed_prefs.cpu060_revision = restore_u8 (); currprefs.fpu_revision = changed_prefs.fpu_revision = restore_u8 (); return src; } uae_u8 *save_cpu_extra (int *len, uae_u8 *dstptr) { uae_u8 *dstbak, *dst; uae_u32 flags; if (dstptr) dstbak = dst = dstptr; else dstbak = dst = xmalloc (uae_u8, 1000); save_u32 (0); // version flags = 0; flags |= currprefs.cpu_cycle_exact ? 1 : 0; flags |= currprefs.cpu_compatible ? 2 : 0; flags |= currprefs.m68k_speed < 0 ? 4 : 0; flags |= currprefs.cachesize > 0 ? 8 : 0; flags |= currprefs.m68k_speed > 0 ? 16 : 0; if (currprefs.m68k_speed > 0) flags |= (currprefs.m68k_speed / CYCLE_UNIT) << 24; save_u32 (flags); save_u32 (currprefs.cpu_frequency); save_u32 (currprefs.cpu_clock_multiplier); save_u8 (currprefs.cpu060_revision); save_u8 (currprefs.fpu_revision); *len = dst - dstbak; return dstbak; } uae_u8 *save_cpu (int *len, uae_u8 *dstptr) { uae_u8 *dstbak, *dst; int model, i, khz; if (dstptr) dstbak = dst = dstptr; else dstbak = dst = xmalloc (uae_u8, 1000); model = currprefs.cpu_model; save_u32 (model); /* MODEL */ save_u32 (0x80000000 | 0x40000000 | (currprefs.address_space_24 ? 1 : 0)); /* FLAGS */ for (i = 0;i < 15; i++) save_u32 (regs.regs[i]); /* D0-D7 A0-A6 */ save_u32 (m68k_getpc ()); /* PC */ save_u16 (regs.irc); /* prefetch */ save_u16 (regs.ir); /* instruction prefetch */ MakeSR (); save_u32 (!regs.s ? regs.regs[15] : regs.usp); /* USP */ save_u32 (regs.s ? regs.regs[15] : regs.isp); /* ISP */ save_u16 (regs.sr); /* SR/CCR */ save_u32 (regs.stopped ? CPUMODE_HALT : 0); /* flags */ if (model >= 68010) { save_u32 (regs.dfc); /* DFC */ save_u32 (regs.sfc); /* SFC */ save_u32 (regs.vbr); /* VBR */ } if (model >= 68020) { save_u32 (regs.caar); /* CAAR */ save_u32 (regs.cacr); /* CACR */ save_u32 (regs.msp); /* MSP */ } if (model >= 68030) { save_u64 (crp_030); /* CRP */ save_u64 (srp_030); /* SRP */ save_u32 (tt0_030); /* TT0/AC0 */ save_u32 (tt1_030); /* TT1/AC1 */ save_u32 (tc_030); /* TCR */ save_u16 (mmusr_030); /* MMUSR/ACUSR */ } if (model >= 68040) { save_u32 (regs.itt0); /* ITT0 */ save_u32 (regs.itt1); /* ITT1 */ save_u32 (regs.dtt0); /* DTT0 */ save_u32 (regs.dtt1); /* DTT1 */ save_u32 (regs.tcr); /* TCR */ save_u32 (regs.urp); /* URP */ save_u32 (regs.srp); /* SRP */ } if (model >= 68060) { save_u32 (regs.buscr); /* BUSCR */ save_u32 (regs.pcr); /* PCR */ } khz = -1; if (currprefs.m68k_speed == 0) { khz = currprefs.ntscmode ? 715909 : 709379; if (currprefs.cpu_model >= 68020) khz *= 2; } save_u32 (khz); // clock rate in KHz: -1 = fastest possible save_u32 (0); // spare if (model == 68020) { for (int i = 0; i < CACHELINES020; i++) { save_u32 (caches020[i].data); save_u32 (caches020[i].tag); save_u8 (caches020[i].valid ? 1 : 0); } save_u32 (regs.prefetch020addr); save_u32 (regs.cacheholdingaddr020); save_u32 (regs.cacheholdingdata020); for (int i = 0; i < CPU_PIPELINE_MAX; i++) save_u16 (regs.prefetch020[i]); } else if (model == 68030) { for (int i = 0; i < CACHELINES030; i++) { for (int j = 0; j < 4; j++) { save_u32 (icaches030[i].data[j]); save_u8 (icaches030[i].valid[j] ? 1 : 0); } save_u32 (icaches030[i].tag); } for (int i = 0; i < CACHELINES030; i++) { for (int j = 0; j < 4; j++) { save_u32 (dcaches030[i].data[j]); save_u8 (dcaches030[i].valid[j] ? 1 : 0); } save_u32 (dcaches030[i].tag); } } if (currprefs.cpu_model >= 68020) { save_u32 (regs.ce020memcycles); save_u32 (regs.ce020tmpcycles); } *len = dst - dstbak; return dstbak; } uae_u8 *save_mmu (int *len, uae_u8 *dstptr) { uae_u8 *dstbak, *dst; int model; model = currprefs.mmu_model; if (model != 68040 && model != 68060) return NULL; if (dstptr) dstbak = dst = dstptr; else dstbak = dst = xmalloc (uae_u8, 1000); save_u32 (model); /* MODEL */ save_u32 (0); /* FLAGS */ *len = dst - dstbak; return dstbak; } uae_u8 *restore_mmu (uae_u8 *src) { int flags, model; changed_prefs.mmu_model = model = restore_u32 (); flags = restore_u32 (); write_log (_T("MMU: %d\n"), model); return src; } #endif /* SAVESTATE */ static void exception3f (uae_u32 opcode, uaecptr addr, int writeaccess, int instructionaccess, uae_u32 pc) { if (currprefs.cpu_model >= 68040) addr &= ~1; if (currprefs.cpu_model >= 68020) { last_addr_for_exception_3 = regs.instruction_pc; } else if (pc == 0xffffffff) { last_addr_for_exception_3 = m68k_getpc () + 2; } else { last_addr_for_exception_3 = pc; } last_fault_for_exception_3 = addr; last_op_for_exception_3 = opcode; last_writeaccess_for_exception_3 = writeaccess; last_instructionaccess_for_exception_3 = instructionaccess; Exception (3); #if EXCEPTION3_DEBUG activate_debugger(); #endif } void exception3 (uae_u32 opcode, uaecptr addr) { exception3f (opcode, addr, 0, 0, 0xffffffff); } void exception3i (uae_u32 opcode, uaecptr addr) { exception3f (opcode, addr, 0, 1, 0xffffffff); } void exception3 (uae_u32 opcode, uaecptr addr, int w, int i, uaecptr pc) { exception3f (opcode, addr, w, i, pc); } void exception2 (uaecptr addr) { write_log (_T("delayed exception2!\n")); regs.panic_pc = m68k_getpc (); regs.panic_addr = addr; regs.panic = 2; set_special (SPCFLAG_BRK); m68k_setpc (0xf80000); #ifdef JIT set_special (SPCFLAG_END_COMPILE); #endif fill_prefetch (); } void cpureset (void) { uaecptr pc; uaecptr ksboot = 0xf80002 - 2; /* -2 = RESET hasn't increased PC yet */ uae_u16 ins; send_internalevent (INTERNALEVENT_CPURESET); if ((currprefs.cpu_compatible || currprefs.cpu_cycle_exact) && currprefs.cpu_model <= 68020) { custom_reset (false, false); return; } pc = m68k_getpc (); if (pc >= currprefs.chipmem_size) { addrbank *b = &get_mem_bank (pc); if (b->check (pc, 2 + 2)) { /* We have memory, hope for the best.. */ custom_reset (false, false); return; } write_log (_T("M68K RESET PC=%x, rebooting..\n"), pc); custom_reset (false, false); m68k_setpc (ksboot); return; } /* panic, RAM is going to disappear under PC */ ins = get_word (pc + 2); if ((ins & ~7) == 0x4ed0) { int reg = ins & 7; uae_u32 addr = m68k_areg (regs, reg); write_log (_T("reset/jmp (ax) combination emulated -> %x\n"), addr); custom_reset (false, false); if (addr < 0x80000) addr += 0xf80000; m68k_setpc (addr - 2); return; } write_log (_T("M68K RESET PC=%x, rebooting..\n"), pc); custom_reset (false, false); m68k_setpc (ksboot); } void m68k_setstopped (void) { regs.stopped = 1; /* A traced STOP instruction drops through immediately without actually stopping. */ if ((regs.spcflags & SPCFLAG_DOTRACE) == 0) set_special (SPCFLAG_STOP); else m68k_resumestopped (); } void m68k_resumestopped (void) { if (!regs.stopped) return; regs.stopped = 0; if (currprefs.cpu_cycle_exact) { if (currprefs.cpu_model == 68000) x_do_cycles (6 * cpucycleunit); } fill_prefetch (); unset_special (SPCFLAG_STOP); } /* * Compute exact number of CPU cycles taken * by DIVU and DIVS on a 68000 processor. * * Copyright (c) 2005 by Jorge Cwik, pasti@fxatari.com * * This is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this software; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ /* The routines below take dividend and divisor as parameters. They return 0 if division by zero, or exact number of cycles otherwise. The number of cycles returned assumes a register operand. Effective address time must be added if memory operand. For 68000 only (not 68010, 68012, 68020, etc). Probably valid for 68008 after adding the extra prefetch cycle. Best and worst cases for register operand: (Note the difference with the documented range.) DIVU: Overflow (always): 10 cycles. Worst case: 136 cycles. Best case: 76 cycles. DIVS: Absolute overflow: 16-18 cycles. Signed overflow is not detected prematurely. Worst case: 156 cycles. Best case without signed overflow: 122 cycles. Best case with signed overflow: 120 cycles */ int getDivu68kCycles (uae_u32 dividend, uae_u16 divisor) { int mcycles; uae_u32 hdivisor; int i; if (divisor == 0) return 0; // Overflow if ((dividend >> 16) >= divisor) return (mcycles = 5) * 2; mcycles = 38; hdivisor = divisor << 16; for (i = 0; i < 15; i++) { uae_u32 temp; temp = dividend; dividend <<= 1; // If carry from shift if ((uae_s32)temp < 0) dividend -= hdivisor; else { mcycles += 2; if (dividend >= hdivisor) { dividend -= hdivisor; mcycles--; } } } return mcycles * 2; } int getDivs68kCycles (uae_s32 dividend, uae_s16 divisor) { int mcycles; uae_u32 aquot; int i; if (divisor == 0) return 0; mcycles = 6; if (dividend < 0) mcycles++; // Check for absolute overflow if (((uae_u32)abs (dividend) >> 16) >= (uae_u16)abs (divisor)) return (mcycles + 2) * 2; // Absolute quotient aquot = (uae_u32) abs (dividend) / (uae_u16)abs (divisor); mcycles += 55; if (divisor >= 0) { if (dividend >= 0) mcycles--; else mcycles++; } // Count 15 msbits in absolute of quotient for (i = 0; i < 15; i++) { if ((uae_s16)aquot >= 0) mcycles++; aquot <<= 1; } return mcycles * 2; } STATIC_INLINE void fill_cache040 (uae_u32 addr) { int index, i, lws; uae_u32 tag; uae_u32 data; struct cache040 *c; static int linecnt; addr &= ~15; index = (addr >> 4) & (CACHESETS040 - 1); tag = regs.s | (addr & ~((CACHESETS040 << 4) - 1)); lws = (addr >> 2) & 3; c = &caches040[index]; for (i = 0; i < CACHELINES040; i++) { if (c->valid[i] && c->tag[i] == tag) { // cache hit regs.cacheholdingaddr020 = addr; regs.cacheholdingdata020 = c->data[i][lws]; return; } } // cache miss data = mem_access_delay_longi_read_ce020 (addr); int line = linecnt; for (i = 0; i < CACHELINES040; i++) { int line = (linecnt + i) & (CACHELINES040 - 1); if (c->tag[i] != tag || c->valid[i] == false) { c->tag[i] = tag; c->valid[i] = true; c->data[i][0] = data; } } regs.cacheholdingaddr020 = addr; regs.cacheholdingdata020 = data; } // this one is really simple and easy static void fill_icache020 (uae_u32 addr) { int index; uae_u32 tag; uae_u32 data; struct cache020 *c; addr &= ~3; index = (addr >> 2) & (CACHELINES020 - 1); tag = regs.s | (addr & ~((CACHELINES020 << 2) - 1)); c = &caches020[index]; if (c->valid && c->tag == tag) { // cache hit regs.cacheholdingaddr020 = addr; regs.cacheholdingdata020 = c->data; return; } // cache miss data = x_get_long (addr); if (!(regs.cacr & 2)) { c->tag = tag; c->valid = !!(regs.cacr & 1); c->data = data; } regs.cacheholdingaddr020 = addr; regs.cacheholdingdata020 = data; } uae_u32 get_word_ce020_prefetch (int o) { uae_u32 pc = m68k_getpc () + o; if (pc == regs.prefetch020addr) { uae_u32 v = regs.prefetch020[0]; regs.prefetch020[0] = regs.prefetch020[1]; regs.prefetch020[1] = regs.prefetch020[2]; pc += 4 + 2; if (regs.cacheholdingaddr020 != (pc & ~3)) fill_icache020 (pc); regs.prefetch020[2] = (regs.cacheholdingaddr020 == pc) ? (regs.cacheholdingdata020 >> 16) : (regs.cacheholdingdata020 >> 0); regs.prefetch020addr += 2; return v; } else { regs.prefetch020addr = pc; fill_icache020 (pc); regs.prefetch020[0] = (regs.cacheholdingaddr020 == pc) ? (regs.cacheholdingdata020 >> 16) : (regs.cacheholdingdata020 >> 0); pc += 2; fill_icache020 (pc); regs.prefetch020[1] = (regs.cacheholdingaddr020 == pc) ? (regs.cacheholdingdata020 >> 16) : (regs.cacheholdingdata020 >> 0); pc += 2; fill_icache020 (pc); regs.prefetch020[2] = (regs.cacheholdingaddr020 == pc) ? (regs.cacheholdingdata020 >> 16) : (regs.cacheholdingdata020 >> 0); return get_word_ce020_prefetch (o); } } // 68030 caches aren't so simple as 68020 cache.. STATIC_INLINE struct cache030 *getcache030 (struct cache030 *cp, uaecptr addr, uae_u32 *tagp, int *lwsp) { int index, lws; uae_u32 tag; struct cache030 *c; addr &= ~3; index = (addr >> 4) & (CACHELINES030 - 1); tag = regs.s | (addr & ~((CACHELINES030 << 4) - 1)); lws = (addr >> 2) & 3; c = &cp[index]; *tagp = tag; *lwsp = lws; return c; } STATIC_INLINE void update_cache030 (struct cache030 *c, uae_u32 val, uae_u32 tag, int lws) { if (c->tag != tag) c->valid[0] = c->valid[1] = c->valid[2] = c->valid[3] = false; c->tag = tag; c->valid[lws] = true; c->data[lws] = val; } STATIC_INLINE void fill_icache030 (uae_u32 addr) { int lws; uae_u32 tag; uae_u32 data; struct cache030 *c; addr &= ~3; if (addr == regs.cacheholdingaddr020) return; c = getcache030 (icaches030, addr, &tag, &lws); if (c->valid[lws] && c->tag == tag) { // cache hit regs.cacheholdingaddr020 = addr; regs.cacheholdingdata020 = c->data[lws]; return; } // cache miss data = mem_access_delay_longi_read_ce020 (addr); if ((regs.cacr & 3) == 1) { // not frozen and enabled update_cache030 (c, data, tag, lws); #if 0 if ((regs.cacr & 0x11) == 0x11 && lws == 0 && !c->valid[0] && !c->valid[1] && !c->valid[2] && !c->valid[3] && ce_banktype[addr >> 16] == CE_MEMBANK_FAST) { // do burst fetch if cache enabled, not frozen, all slots invalid, no chip ram c->data[1] = mem_access_delay_long_read_ce020 (addr + 4); c->data[2] = mem_access_delay_long_read_ce020 (addr + 8); c->data[3] = mem_access_delay_long_read_ce020 (addr + 12); c->valid[1] = c->valid[2] = c->valid[3] = true; } #endif } regs.cacheholdingaddr020 = addr; regs.cacheholdingdata020 = data; } STATIC_INLINE bool cancache030 (uaecptr addr) { return ce_cachable[addr >> 16] != 0; } // and finally the worst part, 68030 data cache.. void write_dcache030 (uaecptr addr, uae_u32 val, int size) { struct cache030 *c1, *c2; int lws1, lws2; uae_u32 tag1, tag2; int aligned = addr & 3; if (!(regs.cacr & 0x100) || currprefs.cpu_model == 68040) // data cache disabled? 68040 shares this too. return; if (!cancache030 (addr)) return; c1 = getcache030 (dcaches030, addr, &tag1, &lws1); if (!(regs.cacr & 0x2000)) { // write allocate if (c1->tag != tag1 || c1->valid[lws1] == false) return; } #if 0 uaecptr a = 0x1db0c; if (addr - (1 << size) + 1 <= a && addr + (1 << size) >= a) { write_log (_T("%08x %d %d %08x %08x %d\n"), addr, aligned, size, val, tag1, lws1); if (aligned == 2) write_log (_T("*\n")); } #endif // easy one if (size == 2 && aligned == 0) { update_cache030 (c1, val, tag1, lws1); #if 0 if ((regs.cacr & 0x1100) == 0x1100 && lws1 == 0 && !c1->valid[0] && !c1->valid[1] && !c1->valid[2] && !c1->valid[3] && ce_banktype[addr >> 16] == CE_MEMBANK_FAST) { // do burst fetch if cache enabled, not frozen, all slots invalid, no chip ram c1->data[1] = mem_access_delay_long_read_ce020 (addr + 4); c1->data[2] = mem_access_delay_long_read_ce020 (addr + 8); c1->data[3] = mem_access_delay_long_read_ce020 (addr + 12); c1->valid[1] = c1->valid[2] = c1->valid[3] = true; } #endif return; } // argh!! merge partial write c2 = getcache030 (dcaches030, addr + 4, &tag2, &lws2); if (size == 2) { if (c1->valid[lws1] && c1->tag == tag1) { c1->data[lws1] &= ~(0xffffffff >> (aligned * 8)); c1->data[lws1] |= val >> (aligned * 8); } if (c2->valid[lws2] && c2->tag == tag2) { c2->data[lws2] &= 0xffffffff >> ((4 - aligned) * 8); c2->data[lws2] |= val << ((4 - aligned) * 8); } } else if (size == 1) { val <<= 16; if (c1->valid[lws1] && c1->tag == tag1) { c1->data[lws1] &= ~(0xffff0000 >> (aligned * 8)); c1->data[lws1] |= val >> (aligned * 8); } if (c2->valid[lws2] && c2->tag == tag2 && aligned == 3) { c2->data[lws2] &= 0x00ffffff; c2->data[lws2] |= val << 8; } } else if (size == 0) { val <<= 24; if (c1->valid[lws1] && c1->tag == tag1) { c1->data[lws1] &= ~(0xff000000 >> (aligned * 8)); c1->data[lws1] |= val >> (aligned * 8); } } } uae_u32 read_dcache030 (uaecptr addr, int size) { struct cache030 *c1, *c2; int lws1, lws2; uae_u32 tag1, tag2; int aligned = addr & 3; int len = (1 << size) * 8; uae_u32 v1, v2; if (!(regs.cacr & 0x100) || currprefs.cpu_model == 68040 || !cancache030 (addr)) { // data cache disabled? shared with 68040 "ce" if (size == 2) return mem_access_delay_long_read_ce020 (addr); else if (size == 1) return mem_access_delay_word_read_ce020 (addr); else return mem_access_delay_byte_read_ce020 (addr); } c1 = getcache030 (dcaches030, addr, &tag1, &lws1); addr &= ~3; if (!c1->valid[lws1] || c1->tag != tag1) { v1 = mem_access_delay_long_read_ce020 (addr); update_cache030 (c1, v1, tag1, lws1); } else { v1 = c1->data[lws1]; if (get_long (addr) != v1) { write_log (_T("data cache mismatch %d %d %08x %08x != %08x %08x %d PC=%08x\n"), size, aligned, addr, get_long (addr), v1, tag1, lws1, M68K_GETPC); v1 = get_long (addr); } } // only one long fetch needed? if (size == 0) { v1 >>= (3 - aligned) * 8; return v1; } else if (size == 1 && aligned <= 2) { v1 >>= (2 - aligned) * 8; return v1; } else if (size == 2 && aligned == 0) { return v1; } // need two longs addr += 4; c2 = getcache030 (dcaches030, addr, &tag2, &lws2); if (!c2->valid[lws2] || c2->tag != tag2) { v2 = mem_access_delay_long_read_ce020 (addr); update_cache030 (c2, v2, tag2, lws2); } else { v2 = c2->data[lws2]; if (get_long (addr) != v2) { write_log (_T("data cache mismatch %d %d %08x %08x != %08x %08x %d PC=%08x\n"), size, aligned, addr, get_long (addr), v2, tag2, lws2, M68K_GETPC); v2 = get_long (addr); } } if (size == 1 && aligned == 3) return (v1 << 8) | (v2 >> 24); else if (size == 2 && aligned == 1) return (v1 << 8) | (v2 >> 24); else if (size == 2 && aligned == 2) return (v1 << 16) | (v2 >> 16); else if (size == 2 && aligned == 3) return (v1 << 24) | (v2 >> 8); write_log (_T("dcache030 weirdness!?\n")); return 0; } uae_u32 get_word_ce030_prefetch (int o) { uae_u32 pc = m68k_getpc () + o; if (pc == regs.prefetch020addr) { uae_u32 v = regs.prefetch020[0]; regs.prefetch020[0] = regs.prefetch020[1]; regs.prefetch020[1] = regs.prefetch020[2]; pc += 4 + 2; fill_icache030 (pc); regs.prefetch020[2] = (regs.cacheholdingaddr020 == pc) ? (regs.cacheholdingdata020 >> 16) : (regs.cacheholdingdata020 >> 0); regs.prefetch020addr += 2; fill_icache030 (pc + 4); return v; } else { regs.prefetch020addr = pc; fill_icache030 (pc); regs.prefetch020[0] = (regs.cacheholdingaddr020 == pc) ? (regs.cacheholdingdata020 >> 16) : (regs.cacheholdingdata020 >> 0); pc += 2; fill_icache030 (pc); regs.prefetch020[1] = (regs.cacheholdingaddr020 == pc) ? (regs.cacheholdingdata020 >> 16) : (regs.cacheholdingdata020 >> 0); pc += 2; fill_icache030 (pc); regs.prefetch020[2] = (regs.cacheholdingaddr020 == pc) ? (regs.cacheholdingdata020 >> 16) : (regs.cacheholdingdata020 >> 0); return get_word_ce030_prefetch (o); } } void flush_dcache (uaecptr addr, int size) { if (!currprefs.cpu_cycle_exact) return; if (currprefs.cpu_model >= 68030) { for (int i = 0; i < CACHELINES030; i++) { dcaches030[i].valid[0] = 0; dcaches030[i].valid[1] = 0; dcaches030[i].valid[2] = 0; dcaches030[i].valid[3] = 0; } } } void m68k_do_rte_mmu (uaecptr a7) { uae_u16 ssr = get_word_mmu (a7 + 8 + 4); if (ssr & MMU_SSW_CT) { uaecptr src_a7 = a7 + 8 - 8; uaecptr dst_a7 = a7 + 8 + 52; put_word_mmu (dst_a7 + 0, get_word_mmu (src_a7 + 0)); put_long_mmu (dst_a7 + 2, get_long_mmu (src_a7 + 2)); // skip this word put_long_mmu (dst_a7 + 8, get_long_mmu (src_a7 + 8)); } } void flush_mmu (uaecptr addr, int n) { } void m68k_do_rts_mmu (void) { m68k_setpc (get_long_mmu (m68k_areg (regs, 7))); m68k_areg (regs, 7) += 4; } void m68k_do_bsr_mmu (uaecptr oldpc, uae_s32 offset) { put_long_mmu (m68k_areg (regs, 7) - 4, oldpc); m68k_areg (regs, 7) -= 4; m68k_incpci (offset); } fs-uae-2.2.3+dfsg/src/picasso96.cpp0000644000175000017500000025777212162366655017214 0ustar glaubitzglaubitz/* * UAE - The U*nix Amiga Emulator * * Picasso96 Support Module * * Copyright 1997 Brian King * * Theory of operation: * On the Amiga side, a Picasso card consists mainly of a memory area that * contains the frame buffer. On the UAE side, we allocate a block of memory * that will hold the frame buffer. This block is in normal memory, it is * never directly on the graphics card. All graphics operations, which are * mainly reads and writes into this block and a few basic operations like * filling a rectangle, operate on this block of memory. * Since the memory is not on the graphics card, some work must be done to * synchronize the display with the data in the Picasso frame buffer. There * are various ways to do this. One possibility is to allocate a second * buffer of the same size, and perform all write operations twice. Since * we never read from the second buffer, it can actually be placed in video * memory. The X11 driver could be made to use the Picasso frame buffer as * the data buffer of an XImage, which could then be XPutImage()d from time * to time. Another possibility is to translate all Picasso accesses into * Xlib (or GDI, or whatever your graphics system is) calls. This possibility * is a bit tricky, since there is a risk of generating very many single pixel * accesses which may be rather slow. * * TODO: * - add panning capability * - we want to add a manual switch to override SetSwitch for hardware banging * programs started from a Picasso workbench. */ #include "sysconfig.h" #include "sysdeps.h" #include "config.h" #include "options.h" #include "threaddep/thread.h" #include "uae.h" #include "uae/memory.h" #include "custom.h" #include "newcpu.h" #include "xwin.h" #include "picasso96.h" #ifdef JIT int have_done_picasso = 0; /* For the JIT compiler */ int picasso_is_special = PIC_WRITE; /* ditto */ int picasso_is_special_read = PIC_READ; /* ditto */ #endif #ifdef PICASSO96 int p96hack_vpos, p96hack_vpos2, p96refresh_active; #define P96TRACING_ENABLED 0 #if P96TRACING_ENABLED #define P96TRACE(x) do { write_log ("P96: "); write_log x; } while(0) #else #define P96TRACE(x) do { } while(0) #endif static uae_u32 gfxmem_lget (uaecptr) REGPARAM; static uae_u32 gfxmem_wget (uaecptr) REGPARAM; static uae_u32 gfxmem_bget (uaecptr) REGPARAM; static void gfxmem_lput (uaecptr, uae_u32) REGPARAM; static void gfxmem_wput (uaecptr, uae_u32) REGPARAM; static void gfxmem_bput (uaecptr, uae_u32) REGPARAM; static int gfxmem_check (uaecptr addr, uae_u32 size) REGPARAM; static uae_u8 *gfxmem_xlate (uaecptr addr) REGPARAM; static void write_gfx_long (uaecptr addr, uae_u32 value); static void write_gfx_word (uaecptr addr, uae_u16 value); static void write_gfx_byte (uaecptr addr, uae_u8 value); static uae_u8 all_ones_bitmap, all_zeros_bitmap; struct picasso96_state_struct picasso96_state; struct picasso_vidbuf_description picasso_vidinfo; /* These are the maximum resolutions. They are filled in by GetSupportedResolutions() */ /* have to fill this in, otherwise problems occur * @@@ ??? what problems? */ struct ScreenResolution planar = { 320, 240 }; struct ScreenResolution chunky = { 640, 480 }; struct ScreenResolution hicolour = { 640, 480 }; struct ScreenResolution truecolour = { 640, 480 }; struct ScreenResolution alphacolour = { 640, 480 }; uae_u16 picasso96_pixel_format = RGBFF_CHUNKY; struct PicassoResolution DisplayModes[MAX_PICASSO_MODES]; static int mode_count = 0; static int set_gc_called = 0; static int set_panning_called = 0; /* Address of the screen in the Amiga frame buffer at the time of the last SetPanning call. */ static uaecptr oldscr; static uae_u32 p2ctab[256][2]; /* * Debugging dumps */ static void DumpModeInfoStructure (uaecptr amigamodeinfoptr) { write_log ("ModeInfo Structure Dump:\n"); write_log (" Node.ln_Succ = 0x%x\n", get_long (amigamodeinfoptr)); write_log (" Node.ln_Pred = 0x%x\n", get_long (amigamodeinfoptr + 4)); write_log (" Node.ln_Type = 0x%x\n", get_byte (amigamodeinfoptr + 8)); write_log (" Node.ln_Pri = %d\n", get_byte (amigamodeinfoptr + 9)); /*write_log (" Node.ln_Name = %s\n", uaememptr->Node.ln_Name); */ write_log (" OpenCount = %d\n", get_word (amigamodeinfoptr + PSSO_ModeInfo_OpenCount)); write_log (" Active = %d\n", get_byte (amigamodeinfoptr + PSSO_ModeInfo_Active)); write_log (" Width = %d\n", get_word (amigamodeinfoptr + PSSO_ModeInfo_Width)); write_log (" Height = %d\n", get_word (amigamodeinfoptr + PSSO_ModeInfo_Height)); write_log (" Depth = %d\n", get_byte (amigamodeinfoptr + PSSO_ModeInfo_Depth)); write_log (" Flags = %d\n", get_byte (amigamodeinfoptr + PSSO_ModeInfo_Flags)); write_log (" HorTotal = %d\n", get_word (amigamodeinfoptr + PSSO_ModeInfo_HorTotal)); write_log (" HorBlankSize = %d\n", get_word (amigamodeinfoptr + PSSO_ModeInfo_HorBlankSize)); write_log (" HorSyncStart = %d\n", get_word (amigamodeinfoptr + PSSO_ModeInfo_HorSyncStart)); write_log (" HorSyncSize = %d\n", get_word (amigamodeinfoptr + PSSO_ModeInfo_HorSyncSize)); write_log (" HorSyncSkew = %d\n", get_byte (amigamodeinfoptr + PSSO_ModeInfo_HorSyncSkew)); write_log (" HorEnableSkew = %d\n", get_byte (amigamodeinfoptr + PSSO_ModeInfo_HorEnableSkew)); write_log (" VerTotal = %d\n", get_word (amigamodeinfoptr + PSSO_ModeInfo_VerTotal)); write_log (" VerBlankSize = %d\n", get_word (amigamodeinfoptr + PSSO_ModeInfo_VerBlankSize)); write_log (" VerSyncStart = %d\n", get_word (amigamodeinfoptr + PSSO_ModeInfo_VerSyncStart)); write_log (" VerSyncSize = %d\n", get_word (amigamodeinfoptr + PSSO_ModeInfo_VerSyncSize)); write_log (" Clock = %d\n", get_byte (amigamodeinfoptr + PSSO_ModeInfo_first_union)); write_log (" ClockDivide = %d\n", get_byte (amigamodeinfoptr + PSSO_ModeInfo_second_union)); write_log (" PixelClock = %d\n", get_long (amigamodeinfoptr + PSSO_ModeInfo_PixelClock)); } static void DumpLibResolutionStructure (uaecptr amigalibresptr) { int i; uaecptr amigamodeinfoptr; struct LibResolution *uaememptr = (struct LibResolution *) get_mem_bank (amigalibresptr).xlateaddr (amigalibresptr); return; write_log ("LibResolution Structure Dump:\n"); if (get_long (amigalibresptr + PSSO_LibResolution_DisplayID) == 0xFFFFFFFF) { write_log (" Finished With LibResolutions...\n"); } else { write_log (" Name = %s\n", uaememptr->P96ID); write_log (" DisplayID = 0x%x\n", get_long (amigalibresptr + PSSO_LibResolution_DisplayID)); write_log (" Width = %d\n", get_word (amigalibresptr + PSSO_LibResolution_Width)); write_log (" Height = %d\n", get_word (amigalibresptr + PSSO_LibResolution_Height)); write_log (" Flags = %d\n", get_word (amigalibresptr + PSSO_LibResolution_Flags)); for (i = 0; i < MAXMODES; i++) { amigamodeinfoptr = get_long (amigalibresptr + PSSO_LibResolution_Modes + i * 4); write_log (" ModeInfo[%d] = 0x%x\n", i, amigamodeinfoptr); if (amigamodeinfoptr) DumpModeInfoStructure (amigamodeinfoptr); } write_log (" BoardInfo = 0x%x\n", get_long (amigalibresptr + PSSO_LibResolution_BoardInfo)); } } static char binary_byte[9]; static char *BuildBinaryString (uae_u8 value) { int i; for (i = 0; i < 8; i++) { binary_byte[i] = (value & (1 << (7 - i))) ? '#' : '.'; } binary_byte[8] = '\0'; return binary_byte; } static void DumpPattern (struct Pattern *patt) { /* uae_u8 *mem; int row, col; for (row = 0; row < (1 << patt->Size); row++) { mem = patt->Memory + row * 2; for (col = 0; col < 2; col++) { write_log ("%s", BuildBinaryString (*mem++)); } write_log ("\n"); } */ } static void DumpTemplate (struct Template *tmp, uae_u16 w, uae_u16 h) { /* uae_u8 *mem = tmp->Memory; int row, col, width; width = (w + 7) >> 3; write_log ("xoffset = %d, bpr = %d\n", tmp->XOffset, tmp->BytesPerRow); for (row = 0; row < h; row++) { mem = tmp->Memory + row * tmp->BytesPerRow; for (col = 0; col < width; col++) { write_log ("%s", BuildBinaryString (*mem++)); } write_log ("\n"); } */ } int picasso_nr_resolutions (void) { return mode_count; } static void ShowSupportedResolutions (void) { int i; return; for (i = 0; i < mode_count; i++) write_log ("%s\n", DisplayModes[i].name); } static uae_u8 GetBytesPerPixel (uae_u32 RGBfmt) { switch (RGBfmt) { case RGBFB_CLUT: return 1; case RGBFB_A8R8G8B8: case RGBFB_A8B8G8R8: case RGBFB_R8G8B8A8: case RGBFB_B8G8R8A8: return 4; case RGBFB_B8G8R8: case RGBFB_R8G8B8: return 3; case RGBFB_R5G5B5: case RGBFB_R5G6B5: case RGBFB_R5G6B5PC: case RGBFB_R5G5B5PC: case RGBFB_B5G6R5PC: case RGBFB_B5G5R5PC: return 2; default: write_log ("ERROR - GetBytesPerPixel() was unsuccessful with 0x%x?!\n", RGBfmt); return 0; } } /* * Amiga <-> native structure conversion functions */ static int CopyRenderInfoStructureA2U (uaecptr amigamemptr, struct RenderInfo *ri) { uaecptr memp = get_long (amigamemptr + PSSO_RenderInfo_Memory); if (valid_address (memp, PSSO_RenderInfo_sizeof)) { ri->AMemory = memp; ri->Memory = get_real_address (memp); ri->BytesPerRow = get_word (amigamemptr + PSSO_RenderInfo_BytesPerRow); ri->RGBFormat = get_long (amigamemptr + PSSO_RenderInfo_RGBFormat); return 1; } write_log ("ERROR - Invalid RenderInfo memory area.\n"); return 0; } static int CopyPatternStructureA2U (uaecptr amigamemptr, struct Pattern *pattern) { uaecptr memp = get_long (amigamemptr + PSSO_Pattern_Memory); if (valid_address (memp, PSSO_Pattern_sizeof)) { pattern->Memory = get_real_address (memp); pattern->XOffset = get_word (amigamemptr + PSSO_Pattern_XOffset); pattern->YOffset = get_word (amigamemptr + PSSO_Pattern_YOffset); pattern->FgPen = get_long (amigamemptr + PSSO_Pattern_FgPen); pattern->BgPen = get_long (amigamemptr + PSSO_Pattern_BgPen); pattern->Size = get_byte (amigamemptr + PSSO_Pattern_Size); pattern->DrawMode = get_byte (amigamemptr + PSSO_Pattern_DrawMode); return 1; } write_log ("ERROR - Invalid Pattern memory area.\n"); return 0; } static void CopyColorIndexMappingA2U (uaecptr amigamemptr, struct ColorIndexMapping *cim) { int i; cim->ColorMask = get_long (amigamemptr); for (i = 0; i < 256; i++, amigamemptr += 4) cim->Colors[i] = get_long (amigamemptr + 4); } static int CopyBitMapStructureA2U (uaecptr amigamemptr, struct BitMap *bm) { int i; bm->BytesPerRow = get_word (amigamemptr + PSSO_BitMap_BytesPerRow); bm->Rows = get_word (amigamemptr + PSSO_BitMap_Rows); bm->Flags = get_byte (amigamemptr + PSSO_BitMap_Flags); bm->Depth = get_byte (amigamemptr + PSSO_BitMap_Depth); for (i = 0; i < bm->Depth; i++) { uaecptr plane = get_long (amigamemptr + PSSO_BitMap_Planes + i * 4); switch (plane) { case 0: bm->Planes[i] = &all_zeros_bitmap; break; case 0xFFFFFFFF: bm->Planes[i] = &all_ones_bitmap; break; default: if (valid_address (plane, bm->BytesPerRow * bm->Rows)) bm->Planes[i] = get_real_address (plane); else return 0; break; } } return 1; } static int CopyTemplateStructureA2U (uaecptr amigamemptr, struct Template *tmpl) { uaecptr memp = get_long (amigamemptr + PSSO_Template_Memory); if (valid_address (memp, 1 /* FIXME */ )) { tmpl->Memory = get_real_address (memp); tmpl->BytesPerRow = get_word (amigamemptr + PSSO_Template_BytesPerRow); tmpl->XOffset = get_byte (amigamemptr + PSSO_Template_XOffset); tmpl->DrawMode = get_byte (amigamemptr + PSSO_Template_DrawMode); tmpl->FgPen = get_long (amigamemptr + PSSO_Template_FgPen); tmpl->BgPen = get_long (amigamemptr + PSSO_Template_BgPen); return 1; } write_log ("ERROR - Invalid Template memory area.\n"); return 0; } static void CopyLibResolutionStructureU2A (struct LibResolution *libres, uaecptr amigamemptr) { char *uaememptr = 0; int i; /* I know that amigamemptr is inside my gfxmem chunk, so I can just do the xlate() */ uaememptr = gfxmem_xlate (amigamemptr); /* zero out our LibResolution structure */ memset (uaememptr, 0, PSSO_LibResolution_sizeof); strcpy (uaememptr + PSSO_LibResolution_P96ID, libres->P96ID); put_long (amigamemptr + PSSO_LibResolution_DisplayID, libres->DisplayID); put_word (amigamemptr + PSSO_LibResolution_Width, libres->Width); put_word (amigamemptr + PSSO_LibResolution_Height, libres->Height); put_word (amigamemptr + PSSO_LibResolution_Flags, libres->Flags); for (i = 0; i < MAXMODES; i++) put_long (amigamemptr + PSSO_LibResolution_Modes + i * 4, libres->Modes[i]); #if 0 put_long (amigamemptr, libres->Node.ln_Succ); put_long (amigamemptr + 4, libres->Node.ln_Pred); put_byte (amigamemptr + 8, libres->Node.ln_Type); put_byte (amigamemptr + 9, libres->Node.ln_Pri); #endif put_long (amigamemptr + 10, amigamemptr + PSSO_LibResolution_P96ID); put_long (amigamemptr + PSSO_LibResolution_BoardInfo, libres->BoardInfo); } /* list is Amiga address of list, in correct endian format for UAE * node is Amiga address of node, in correct endian format for UAE */ static void AmigaListAddTail (uaecptr list, uaecptr node) { uaecptr amigamemptr = 0; if (get_long (list + 8) == list) { /* Empty list - set it up */ put_long (list, node); /* point the lh_Head to our new node */ put_long (list + 4, 0); /* set the lh_Tail to NULL */ put_long (list + 8, node); /* point the lh_TailPred to our new node */ /* Adjust the new node - don't rely on it being zeroed out */ put_long (node, 0); /* ln_Succ */ put_long (node + 4, 0); /* ln_Pred */ } else { amigamemptr = get_long (list + 8); /* get the lh_TailPred contents */ put_long (list + 8, node); /* point the lh_TailPred to our new node */ /* Adjust the previous lh_TailPred node */ put_long (amigamemptr, node); /* point the ln_Succ to our new node */ /* Adjust the new node - don't rely on it being zeroed out */ put_long (node, 0); /* ln_Succ */ put_long (node + 4, amigamemptr); /* ln_Pred */ } } /* * Functions to perform an action on the real screen */ /* * Fill a rectangle on the screen. src points to the start of a line of the * filled rectangle in the frame buffer; it can be used as a memcpy source if * there is no OS specific function to fill the rectangle. */ static void do_fillrect (uae_u8 *src, int x, int y, int width, int height, uae_u32 pen, int Bpp, RGBFTYPE rgbtype) { uae_u8 *dst; P96TRACE (("do_fillrect (src:%08x x:%d y:%d w:%d h%d pen:%08x)\n", src, x, y, width, height, pen)); /* Clipping. */ x -= picasso96_state.XOffset; y -= picasso96_state.YOffset; if (x < 0) { width += x; x = 0; } if (y < 0) { height += y; y = 0; } if (x + width > picasso96_state.Width) width = picasso96_state.Width - x; if (y + height > picasso96_state.Height) height = picasso96_state.Height - y; if (width <= 0 || height <= 0) return; /* Try OS specific fillrect function here; and return if successful. Make sure we adjust for * the pen values if we're doing 8-bit display-emulation on a 16-bit or higher screen. */ if (picasso_vidinfo.rgbformat == picasso96_state.RGBFormat) { # ifndef WORDS_BIGENDIAN if (Bpp > 1) pen = (pen & 0x000000FF) << 24 | (pen & 0x0000FF00) << 8 | (pen & 0x00FF0000) >> 8 | (pen & 0xFF000000) >> 24; # endif if (DX_Fill (x, y, width, height, pen, rgbtype)) return; } else { if (DX_Fill (x, y, width, height, picasso_vidinfo.clut[src[0]], rgbtype)) return; } P96TRACE ("P96_WARNING: do_fillrect() using fall-back routine!\n"); DX_Invalidate (y, y + height - 1); if (!picasso_vidinfo.extra_mem) return; width *= picasso96_state.BytesPerPixel; dst = gfx_lock_picasso (); if (!dst) goto out; dst += y * picasso_vidinfo.rowbytes + x * picasso_vidinfo.pixbytes; if (picasso_vidinfo.rgbformat == picasso96_state.RGBFormat) { if (Bpp == 1) { while (height-- > 0) { memset (dst, pen, width); dst += picasso_vidinfo.rowbytes; } } else { while (height-- > 0) { memcpy (dst, src, width); dst += picasso_vidinfo.rowbytes; } } } else { int psiz = GetBytesPerPixel (picasso_vidinfo.rgbformat); if (picasso96_state.RGBFormat != RGBFB_CHUNKY) abort (); while (height-- > 0) { int i; switch (psiz) { case 2: for (i = 0; i < width; i++) *((uae_u16 *) dst + i) = picasso_vidinfo.clut[src[i]]; break; case 4: for (i = 0; i < width; i++) *((uae_u32 *) dst + i) = picasso_vidinfo.clut[src[i]]; break; default: abort (); } dst += picasso_vidinfo.rowbytes; } } out: gfx_unlock_picasso (); } /* * This routine modifies the real screen buffer after a blit has been * performed in the save area. If can_do_blit is nonzero, the blit can * be performed within the real screen buffer; otherwise, this routine * must do it by hand using the data in the save area, pointed to by * srcp. */ static void do_blit (struct RenderInfo *ri, int Bpp, int srcx, int srcy, int dstx, int dsty, int width, int height, BLIT_OPCODE opcode, int can_do_blit) { int xoff = picasso96_state.XOffset; int yoff = picasso96_state.YOffset; uae_u8 *srcp, *dstp; /* Clipping. */ dstx -= xoff; dsty -= yoff; if (srcy < yoff || srcx < xoff || srcx - xoff + width > picasso96_state.Width || srcy - yoff + height > picasso96_state.Height) { can_do_blit = 0; } if (dstx < 0) { srcx -= dstx; width += dstx; dstx = 0; } if (dsty < 0) { srcy -= dsty; height += dsty; dsty = 0; } if (dstx + width > picasso96_state.Width) width = picasso96_state.Width - dstx; if (dsty + height > picasso96_state.Height) height = picasso96_state.Height - dsty; if (width <= 0 || height <= 0) return; /* If this RenderInfo points at something else than the currently visible * screen, we must ignore the blit. */ if (can_do_blit) { /* * Call OS blitting function that can do it in video memory. * Should return if it was successful */ if (DX_Blit (srcx, srcy, dstx, dsty, width, height, opcode)) return; } /* If no OS blit available, we do a copy from the P96 framebuffer in Amiga memory to the host's frame buffer. */ DX_Invalidate (dsty, dsty + height - 1); if (!picasso_vidinfo.extra_mem) return; dstp = gfx_lock_picasso (); if (dstp == 0) goto out; dstp += dsty * picasso_vidinfo.rowbytes + dstx * picasso_vidinfo.pixbytes; P96TRACE(("do_blit with srcp 0x%x, dstp 0x%x, dst_rowbytes %d, srcx %d, srcy %d, dstx %d, dsty %d, w %d, h %d, dst_pixbytes %d\n", srcp, dstp, picasso_vidinfo.rowbytes, srcx, srcy, dstx, dsty, width, height, picasso_vidinfo.pixbytes)); P96TRACE(("gfxmem is at 0x%x\n",gfxmemory)); srcp = ri->Memory + srcx * Bpp + srcy * ri->BytesPerRow; DX_Invalidate (dsty, dsty + height - 1); if (picasso_vidinfo.rgbformat == picasso96_state.RGBFormat) { width *= Bpp; while (height-- > 0) { memcpy (dstp, srcp, width); srcp += ri->BytesPerRow; dstp += picasso_vidinfo.rowbytes; } } else { int psiz = GetBytesPerPixel (picasso_vidinfo.rgbformat); if (picasso96_state.RGBFormat != RGBFB_CHUNKY) abort (); while (height-- > 0) { int i; switch (psiz) { case 2: for (i = 0; i < width; i++) *((uae_u16 *) dstp + i) = picasso_vidinfo.clut[srcp[i]]; break; case 4: for (i = 0; i < width; i++) *((uae_u32 *) dstp + i) = picasso_vidinfo.clut[srcp[i]]; break; default: abort (); } srcp += ri->BytesPerRow; dstp += picasso_vidinfo.rowbytes; } } out: gfx_unlock_picasso (); } /* * Invert a rectangle on the screen. */ static void do_invertrect (struct RenderInfo *ri, int Bpp, int x, int y, int width, int height) { #if 0 /* Clipping. */ x -= picasso96_state.XOffset; y -= picasso96_state.YOffset; if (x < 0) { width += x; x = 0; } if (y < 0) { height += y; y = 0; } if (x + width > picasso96_state.Width) width = picasso96_state.Width - x; if (y + height > picasso96_state.Height) height = picasso96_state.Height - y; if (width <= 0 || height <= 0) return; #endif /* TODO: Try OS specific invertrect function here; and return if successful. */ do_blit (ri, Bpp, x, y, x, y, width, height, BLIT_SRC, 0); } static uaecptr wgfx_linestart; static uaecptr wgfx_lineend; static uaecptr wgfx_min, wgfx_max; static long wgfx_y; static void wgfx_do_flushline (void) { int src_y = wgfx_y; long x0, x1, width; uae_u8 *src, *dstp; int Bpp = GetBytesPerPixel (picasso_vidinfo.rgbformat); int fb_bpp = picasso96_state.BytesPerPixel; wgfx_y -= picasso96_state.YOffset; if (wgfx_y < 0 || wgfx_y >= picasso96_state.Height) goto out1; DX_Invalidate (wgfx_y, wgfx_y); if (!picasso_vidinfo.extra_mem) goto out1; x0 = wgfx_min - wgfx_linestart; width = wgfx_max - wgfx_min; x0 -= picasso96_state.XOffset * fb_bpp; if (x0 < 0) { width += x0; wgfx_min += x0; x0 = 0; } if (x0 + width > picasso96_state.Width * fb_bpp) width = picasso96_state.Width * fb_bpp - x0; dstp = gfx_lock_picasso (); if (dstp == 0) goto out; P96TRACE(("flushing %d\n", wgfx_y)); src = gfxmemory + wgfx_min; if (picasso_vidinfo.rgbformat == picasso96_state.RGBFormat) { dstp += wgfx_y * picasso_vidinfo.rowbytes + x0; memcpy (dstp, src, width); } else { int i; if (picasso96_state.RGBFormat != RGBFB_CHUNKY) abort (); dstp += wgfx_y * picasso_vidinfo.rowbytes + x0 * Bpp; switch (Bpp) { case 2: for (i = 0; i < width; i++) *((uae_u16 *) dstp + i) = picasso_vidinfo.clut[src[i]]; break; case 4: for (i = 0; i < width; i++) *((uae_u32 *) dstp + i) = picasso_vidinfo.clut[src[i]]; break; default: abort (); } } out: gfx_unlock_picasso (); out1: wgfx_linestart = 0xFFFFFFFF; } STATIC_INLINE void wgfx_flushline (void) { if (wgfx_linestart == 0xFFFFFFFF || !picasso_on) return; wgfx_do_flushline (); } static int renderinfo_is_current_screen (struct RenderInfo *ri) { if (!picasso_on) return 0; if (ri->Memory != gfxmemory + (picasso96_state.Address - gfxmem_start)) return 0; return 1; } /* Clear our screen, since we've got a new Picasso screen-mode, and refresh with the proper contents * This is called on several occasions: * 1. Amiga-->Picasso transition, via SetSwitch() * 2. Picasso-->Picasso transition, via SetPanning(). * 3. whenever the graphics code notifies us that the screen contents have been lost. */ extern unsigned int new_beamcon0; void picasso_refresh (int call_setpalette) { struct RenderInfo ri; if (!picasso_on) return; { // for higher P96 mousedraw rate extern uae_u16 vtotal; if (p96hack_vpos2) { vtotal = p96hack_vpos2; new_beamcon0 |= 0x80; p96refresh_active=1; } else new_beamcon0 |= 0x20; } #ifdef JIT have_done_picasso=1; #endif /* Make sure that the first time we show a Picasso video mode, we don't * blit any crap. We can do this by checking if we have an Address yet. */ if (picasso96_state.Address) { unsigned int width, height; /* blit the stuff from our static frame-buffer to the gfx-card */ ri.Memory = gfxmemory + (picasso96_state.Address - gfxmem_start); ri.BytesPerRow = picasso96_state.BytesPerRow; ri.RGBFormat = picasso96_state.RGBFormat; if (set_panning_called) { width = picasso96_state.VirtualWidth; height = picasso96_state.VirtualHeight; } else { width = picasso96_state.Width; height = picasso96_state.Height; } do_blit (&ri, picasso96_state.BytesPerPixel, 0, 0, 0, 0, width, height, BLIT_SRC, 0); } else write_log ("ERROR - picasso_refresh() can't refresh!\n"); } /* * Functions to perform an action on the frame-buffer */ STATIC_INLINE void do_blitrect_frame_buffer (struct RenderInfo *ri, struct RenderInfo *dstri, unsigned long srcx, unsigned long srcy, unsigned long dstx, unsigned long dsty, unsigned long width, unsigned long height, uae_u8 mask, BLIT_OPCODE opcode) { uae_u8 *src, *dst, *tmp, *tmp2, *tmp3; uae_u8 Bpp = GetBytesPerPixel (ri->RGBFormat); unsigned long total_width = width * Bpp; unsigned long linewidth = (total_width + 15) & ~15; unsigned long lines; int can_do_visible_blit = 0; src = ri->Memory + srcx*Bpp + srcy*ri->BytesPerRow; dst = dstri->Memory + dstx*Bpp + dsty*dstri->BytesPerRow; if (mask != 0xFF && Bpp > 1) { write_log ("WARNING - BlitRect() has mask 0x%x with Bpp %d.\n", mask, Bpp); } if (mask == 0xFF || Bpp > 1) { if (opcode == BLIT_SRC) { /* handle normal case efficiently */ if (ri->Memory == dstri->Memory && dsty == srcy) { unsigned long i; for (i = 0; i < height; i++, src += ri->BytesPerRow, dst += dstri->BytesPerRow) memmove (dst, src, total_width); } else if (dsty < srcy) { unsigned long i; for (i = 0; i < height; i++, src += ri->BytesPerRow, dst += dstri->BytesPerRow) memcpy (dst, src, total_width); } else { unsigned long i; src += (height-1) * ri->BytesPerRow; dst += (height-1) * dstri->BytesPerRow; for (i = 0; i < height; i++, src -= ri->BytesPerRow, dst -= dstri->BytesPerRow) memcpy (dst, src, total_width); } return; } else { uae_u8 *src2 = src; uae_u8 *dst2 = dst; uae_u32 *src2_32 = (uae_u32*)src; uae_u32 *dst2_32 = (uae_u32*)dst; unsigned int y; for (y = 0; y < height; y++) { int bound = src + total_width - 4; //copy now the longs for (src2_32 = src, dst2_32 = dst; src2_32 < bound; src2_32++, dst2_32++) { switch (opcode) { case BLIT_FALSE: *dst2_32 = 0; break; case BLIT_NOR: *dst2_32 = ~(*src2_32 | *dst2_32); break; case BLIT_ONLYDST: *dst2_32 = *dst2_32 & ~(*src2_32); break; case BLIT_NOTSRC: *dst2_32 = ~(*src2_32); break; case BLIT_ONLYSRC: *dst2_32 = *src2_32 & ~(*dst2_32); break; case BLIT_NOTDST: *dst2_32 = ~(*dst2_32); break; case BLIT_EOR: *dst2_32 = *src2_32 ^ *dst2_32; break; case BLIT_NAND: *dst2_32 = ~(*src2_32 & *dst2_32); break; case BLIT_AND: *dst2_32 = *src2_32 & *dst2_32; break; case BLIT_NEOR: *dst2_32 = ~(*src2_32 ^ *dst2_32); break; case BLIT_DST: write_log ("ERROR - do_blitrect_frame_buffer shouldn't get BLIT_DST!\n"); break; case BLIT_NOTONLYSRC: *dst2_32 = ~(*src2_32) | *dst2_32; break; case BLIT_SRC: write_log ("ERROR - do_blitrect_frame_buffer shouldn't get BLIT_SRC!\n"); break; case BLIT_NOTONLYDST: *dst2_32 = ~(*dst2_32) | *src2_32; break; case BLIT_OR: *dst2_32 = *src2_32 | *dst2_32; break; case BLIT_TRUE: *dst2_32 = 0xFFFFFFFF; break; case 30: //code for swap source with dest in byte { uae_u32 temp; temp = *src2_32; *src2_32 = *dst2_32; *dst2_32 = temp; } break; case BLIT_LAST: write_log ("ERROR - do_blitrect_frame_buffer shouldn't get BLIT_LAST!\n"); break; } /* switch opcode */ } // for end //now copy the rest few bytes for (src2 = src2_32, dst2 = dst2_32; src2 < src + total_width; src2++, dst2++) { switch (opcode) { case BLIT_FALSE: *dst2 = 0; break; case BLIT_NOR: *dst2 = ~(*src2 | *dst2); break; case BLIT_ONLYDST: *dst2 = *dst2 & ~(*src2); break; case BLIT_NOTSRC: *dst2 = ~(*src2); break; case BLIT_ONLYSRC: *dst2 = *src2 & ~(*dst2); break; case BLIT_NOTDST: *dst2 = ~(*dst2); break; case BLIT_EOR: *dst2 = *src2 ^ *dst2; break; case BLIT_NAND: *dst2 = ~(*src2 & *dst2); break; case BLIT_AND: *dst2 = *src2 & *dst2; break; case BLIT_NEOR: *dst2 = ~(*src2 ^ *dst2); break; case BLIT_DST: write_log ("ERROR - do_blitrect_frame_buffer shouldn't get BLIT_DST!\n"); break; case BLIT_NOTONLYSRC: *dst2 = ~(*src2) | *dst2; break; case BLIT_SRC: write_log ("ERROR - do_blitrect_frame_buffer shouldn't get BLIT_SRC!\n"); break; case BLIT_NOTONLYDST: *dst2 = ~(*dst2) | *src2; break; case BLIT_OR: *dst2 = *src2 | *dst2; break; case BLIT_TRUE: *dst2 = 0xFF; break; case BLIT_LAST: write_log ("ERROR - do_blitrect_frame_buffer shouldn't get BLIT_LAST!\n"); break; case 30: //code for swap source with dest in long { uae_u8 temp; temp = *src2; *src2 = *dst2; *dst2 = temp; } break; } /* switch opcode */ } /* for width */ src += ri->BytesPerRow; dst += dstri->BytesPerRow; } /* for height */ } return; } // (mask != 0xFF && Bpp <= 1) tmp3 = tmp2 = tmp = xmalloc (linewidth * height); /* allocate enough memory for the src-rect */ if (!tmp) return; /* copy the src-rect into our temporary buffer space */ for (lines = 0; lines < height; lines++, src += ri->BytesPerRow, tmp2 += linewidth) memcpy (tmp2, src, total_width); /* copy the temporary buffer to the destination */ for (lines = 0; lines < height; lines++, dst += dstri->BytesPerRow, tmp += linewidth) { unsigned long cols; for (cols = 0; cols < width; cols++) { dst[cols] &= ~mask; dst[cols] |= tmp[cols] & mask; } } /* free the temp-buf */ free (tmp3); } /* * BOOL FindCard(struct BoardInfo *bi); and * * FindCard is called in the first stage of the board initialisation and * configuration and is used to look if there is a free and unconfigured * board of the type the driver is capable of managing. If it finds one, * it immediately reserves it for use by Picasso96, usually by clearing * the CDB_CONFIGME bit in the flags field of the ConfigDev struct of * this expansion card. But this is only a common example, a driver can * do whatever it wants to mark this card as used by the driver. This * mechanism is intended to ensure that a board is only configured and * used by one driver. FindBoard also usually fills some fields of the * BoardInfo struct supplied by the caller, the rtg.library, for example * the MemoryBase, MemorySize and RegisterBase fields. */ uae_u32 picasso_FindCard (void) { uaecptr AmigaBoardInfo = m68k_areg (regs, 0); /* NOTES: See BoardInfo struct definition in Picasso96 dev info */ if (allocated_gfxmem && !picasso96_state.CardFound) { /* Fill in MemoryBase, MemorySize */ put_long (AmigaBoardInfo + PSSO_BoardInfo_MemoryBase, gfxmem_start); /* size of memory, minus a 32K chunk: 16K for pattern bitmaps, 16K for resolution list */ put_long (AmigaBoardInfo + PSSO_BoardInfo_MemorySize, allocated_gfxmem - 32768); picasso96_state.CardFound = 1; /* mark our "card" as being found */ return -1; } else return 0; } static void FillBoardInfo (uaecptr amigamemptr, struct LibResolution *res, struct PicassoResolution *dm) { char *uaememptr; switch (dm->depth) { case 1: res->Modes[CHUNKY] = amigamemptr; break; case 2: res->Modes[HICOLOR] = amigamemptr; break; case 3: res->Modes[TRUECOLOR] = amigamemptr; break; default: res->Modes[TRUEALPHA] = amigamemptr; break; } uaememptr = gfxmem_xlate (amigamemptr); /* I know that amigamemptr is inside my gfxmem chunk, so I can just do the xlate() */ memset (uaememptr, 0, PSSO_ModeInfo_sizeof); /* zero out our ModeInfo struct */ put_word (amigamemptr + PSSO_ModeInfo_Width, dm->res.width); put_word (amigamemptr + PSSO_ModeInfo_Height, dm->res.height); put_byte (amigamemptr + PSSO_ModeInfo_Depth, dm->depth * 8); put_byte (amigamemptr + PSSO_ModeInfo_Flags, 0); put_word (amigamemptr + PSSO_ModeInfo_HorTotal, dm->res.width); put_word (amigamemptr + PSSO_ModeInfo_HorBlankSize, 0); put_word (amigamemptr + PSSO_ModeInfo_HorSyncStart, 0); put_word (amigamemptr + PSSO_ModeInfo_HorSyncSize, 0); put_byte (amigamemptr + PSSO_ModeInfo_HorSyncSkew, 0); put_byte (amigamemptr + PSSO_ModeInfo_HorEnableSkew, 0); put_word (amigamemptr + PSSO_ModeInfo_VerTotal, dm->res.height); put_word (amigamemptr + PSSO_ModeInfo_VerBlankSize, 0); put_word (amigamemptr + PSSO_ModeInfo_VerSyncStart, 0); put_word (amigamemptr + PSSO_ModeInfo_VerSyncSize, 0); put_byte (amigamemptr + PSSO_ModeInfo_first_union, 98); put_byte (amigamemptr + PSSO_ModeInfo_second_union, 14); put_long (amigamemptr + PSSO_ModeInfo_PixelClock, dm->res.width * dm->res.height * dm->refresh); } static uae_u32 AssignModeID (int i, int count) { if (DisplayModes[i].res.width == 320 && DisplayModes[i].res.height == 200) return 0x50001000; else if (DisplayModes[i].res.width == 320 && DisplayModes[i].res.height == 240) return 0x50011000; else if (DisplayModes[i].res.width == 640 && DisplayModes[i].res.height == 400) return 0x50021000; else if (DisplayModes[i].res.width == 640 && DisplayModes[i].res.height == 480) return 0x50031000; else if (DisplayModes[i].res.width == 800 && DisplayModes[i].res.height == 600) return 0x50041000; else if (DisplayModes[i].res.width == 1024 && DisplayModes[i].res.height == 768) return 0x50051000; else if (DisplayModes[i].res.width == 1152 && DisplayModes[i].res.height == 864) return 0x50061000; else if (DisplayModes[i].res.width == 1280 && DisplayModes[i].res.height == 1024) return 0x50071000; else if (DisplayModes[i].res.width == 1600 && DisplayModes[i].res.height == 1280) return 0x50081000; return 0x50091000 + count * 0x10000; } /**************************************** * InitCard() * * a2: BoardInfo structure ptr - Amiga-based address in Intel endian-format * * Job - fill in the following structure members: * gbi_RGBFormats: the pixel formats that the host-OS of UAE supports * If UAE is running in a window, it should ONLY report the pixel format of the host-OS desktop * If UAE is running full-screen, it should report ALL pixel formats that the host-OS can handle in full-screen * NOTE: If full-screen, and the user toggles to windowed-mode, all hell will break loose visually. Must inform * user that they're doing something stupid (unless their desktop and full-screen colour modes match). * gbi_SoftSpriteFlags: should be the same as above for now, until actual cursor support is added * gbi_BitsPerCannon: could be 6 or 8 or ???, depending on the host-OS gfx-card * gbi_MaxHorResolution: fill this in for all modes (even if you don't support them) * gbi_MaxVerResolution: fill this in for all modes (even if you don't support them) */ uae_u32 picasso_InitCard (void) { struct LibResolution res; int i; int ModeInfoStructureCount = 1, LibResolutionStructureCount = 0; uaecptr amigamemptr = 0; uaecptr AmigaBoardInfo = m68k_areg (regs, 2); put_word (AmigaBoardInfo + PSSO_BoardInfo_BitsPerCannon, DX_BitsPerCannon ()); put_word (AmigaBoardInfo + PSSO_BoardInfo_RGBFormats, picasso96_pixel_format); put_word (AmigaBoardInfo + PSSO_BoardInfo_SoftSpriteFlags, picasso96_pixel_format); put_long (AmigaBoardInfo + PSSO_BoardInfo_BoardType, BT_uaegfx); put_word (AmigaBoardInfo + PSSO_BoardInfo_MaxHorResolution + 0, planar.width); put_word (AmigaBoardInfo + PSSO_BoardInfo_MaxHorResolution + 2, chunky.width); put_word (AmigaBoardInfo + PSSO_BoardInfo_MaxHorResolution + 4, hicolour.width); put_word (AmigaBoardInfo + PSSO_BoardInfo_MaxHorResolution + 6, truecolour.width); put_word (AmigaBoardInfo + PSSO_BoardInfo_MaxHorResolution + 8, alphacolour.width); put_word (AmigaBoardInfo + PSSO_BoardInfo_MaxVerResolution + 0, planar.height); put_word (AmigaBoardInfo + PSSO_BoardInfo_MaxVerResolution + 2, chunky.height); put_word (AmigaBoardInfo + PSSO_BoardInfo_MaxVerResolution + 4, hicolour.height); put_word (AmigaBoardInfo + PSSO_BoardInfo_MaxVerResolution + 6, truecolour.height); put_word (AmigaBoardInfo + PSSO_BoardInfo_MaxVerResolution + 8, alphacolour.height); for (i = 0; i < mode_count;) { int j = i; /* Add a LibResolution structure to the ResolutionsList MinList in our BoardInfo */ res.DisplayID = AssignModeID (i, LibResolutionStructureCount); res.BoardInfo = AmigaBoardInfo; res.Width = DisplayModes[i].res.width; res.Height = DisplayModes[i].res.height; res.Flags = P96F_PUBLIC; res.P96ID[0] = 'P'; res.P96ID[1] = '9'; res.P96ID[2] = '6'; res.P96ID[3] = '-'; res.P96ID[4] = '0'; res.P96ID[5] = ':'; strcpy (res.Name, "uaegfx:"); strncat (res.Name, DisplayModes[i].name, strchr (DisplayModes[i].name, ',') - DisplayModes[i].name); res.Modes[PLANAR] = 0; res.Modes[CHUNKY] = 0; res.Modes[HICOLOR] = 0; res.Modes[TRUECOLOR] = 0; res.Modes[TRUEALPHA] = 0; do { /* Handle this display mode's depth */ /* Only add the modes when there is enough P96 RTG memory to hold the bitmap */ long required = DisplayModes[i].res.width * DisplayModes[i].res.height * DisplayModes[i].depth; if (allocated_gfxmem - 32768 > required) { amigamemptr = gfxmem_start + allocated_gfxmem - (PSSO_ModeInfo_sizeof * ModeInfoStructureCount++); FillBoardInfo (amigamemptr, &res, &DisplayModes[i]); } i++; } while (i < mode_count && DisplayModes[i].res.width == DisplayModes[j].res.width && DisplayModes[i].res.height == DisplayModes[j].res.height); amigamemptr = gfxmem_start + allocated_gfxmem - 16384 + (PSSO_LibResolution_sizeof * LibResolutionStructureCount++); CopyLibResolutionStructureU2A (&res, amigamemptr); DumpLibResolutionStructure (amigamemptr); AmigaListAddTail (AmigaBoardInfo + PSSO_BoardInfo_ResolutionsList, amigamemptr); } return 0; } extern int x_size, y_size; /* * SetSwitch: * a0: struct BoardInfo * d0.w: BOOL state * this function should set a board switch to let the Amiga signal pass * through when supplied with a 0 in d0 and to show the board signal if * a 1 is passed in d0. You should remember the current state of the * switch to avoid unneeded switching. If your board has no switch, then * simply supply a function that does nothing except a RTS. * * NOTE: Return the opposite of the switch-state. BDK */ uae_u32 picasso_SetSwitch (void) { uae_u16 flag = m68k_dreg (regs, 0) & 0xFFFF; /* Do not switch immediately. Tell the custom chip emulation about the * desired state, and wait for custom.c to call picasso_enablescreen * whenever it is ready to change the screen state. */ picasso_requested_on = !!flag; #if 0 write_log ("SetSwitch() - trying to show %s screen\n", flag ? "picasso96" : "amiga"); #endif flush_icache(5); /* Changing the screen mode might make gfx memory directly accessible, or no longer thus accessible */ /* Put old switch-state in D0 */ return !flag; } void picasso_enablescreen (int on) { wgfx_linestart = 0xFFFFFFFF; picasso_refresh (1); #if 0 write_log ("SetSwitch() - showing %s screen\n", on ? "picasso96" : "amiga"); #endif } static int first_color_changed = 256; static int last_color_changed = -1; void picasso_handle_vsync (void) { if (first_color_changed < last_color_changed) { DX_SetPalette (first_color_changed, last_color_changed - first_color_changed); /* If we're emulating a CLUT mode, we need to redraw the entire screen. */ if (picasso_vidinfo.rgbformat != picasso96_state.RGBFormat) picasso_refresh (1); } first_color_changed = 256; last_color_changed = -1; } void picasso_clip_mouse (int *px, int *py) { int xoff = picasso96_state.XOffset; int yoff = picasso96_state.YOffset; if (*px < -xoff) *px = -xoff; if (*px + xoff > picasso_vidinfo.width) *px = picasso_vidinfo.width - xoff; if (*py < -yoff) *py = -yoff; if (*py + yoff > picasso_vidinfo.height) *py = picasso_vidinfo.height - yoff; } /* * SetColorArray: * a0: struct BoardInfo * d0.w: startindex * d1.w: count * when this function is called, your driver has to fetch "count" color * values starting at "startindex" from the CLUT field of the BoardInfo * structure and write them to the hardware. The color values are always * between 0 and 255 for each component regardless of the number of bits * per cannon your board has. So you might have to shift the colors * before writing them to the hardware. */ uae_u32 picasso_SetColorArray (void) { /* Fill in some static UAE related structure about this new CLUT setting. * We need this for CLUT-based displays, and for mapping CLUT to hi/true * colour */ uaecptr boardinfo = m68k_areg (regs, 0); uae_u16 start = m68k_dreg (regs, 0); uae_u16 count = m68k_dreg (regs, 1); uaecptr clut = boardinfo + PSSO_BoardInfo_CLUT + start * 3; int changed = 0; int i; for (i = start; i < start + count; i++) { int r = get_byte (clut); int g = get_byte (clut + 1); int b = get_byte (clut + 2); changed |= (picasso96_state.CLUT[i].Red != r || picasso96_state.CLUT[i].Green != g || picasso96_state.CLUT[i].Blue != b); picasso96_state.CLUT[i].Red = r; picasso96_state.CLUT[i].Green = g; picasso96_state.CLUT[i].Blue = b; clut += 3; } if (changed) { if (start < first_color_changed) first_color_changed = start; if (start + count > last_color_changed) last_color_changed = start + count; } return 1; } /* * SetDAC: * a0: struct BoardInfo * d7: RGBFTYPE RGBFormat * This function is called whenever the RGB format of the display changes, * e.g. from chunky to TrueColor. Usually, all you have to do is to set * the RAMDAC of your board accordingly. */ uae_u32 picasso_SetDAC (void) { /* Fill in some static UAE related structure about this new DAC setting * Lets us keep track of what pixel format the Amiga is thinking about in our frame-buffer */ write_log ("SetDAC()\n"); return 1; } static void init_picasso_screen (void) { int width = picasso96_state.Width; int height = picasso96_state.Height; int vwidth = picasso96_state.VirtualWidth; int vheight = picasso96_state.VirtualHeight; int xoff = 0; int yoff = 0; if (!set_gc_called) return; if (set_panning_called) { picasso96_state.Extent = picasso96_state.Address + (picasso96_state.BytesPerRow * vheight); xoff = picasso96_state.XOffset; yoff = picasso96_state.YOffset; } gfx_set_picasso_modeinfo (width, height, picasso96_state.GC_Depth, picasso96_state.RGBFormat); DX_SetPalette (0, 256); wgfx_linestart = 0xFFFFFFFF; picasso_refresh (1); } /* * SetGC: * a0: struct BoardInfo * a1: struct ModeInfo * d0: BOOL Border * This function is called whenever another ModeInfo has to be set. This * function simply sets up the CRTC and TS registers to generate the * timing used for that screen mode. You should not set the DAC, clocks * or linear start adress. They will be set when appropriate by their * own functions. */ uae_u32 picasso_SetGC (void) { /* Fill in some static UAE related structure about this new ModeInfo setting */ uaecptr modeinfo = m68k_areg (regs, 1); picasso96_state.Width = get_word (modeinfo + PSSO_ModeInfo_Width); picasso96_state.VirtualWidth = picasso96_state.Width; /* in case SetPanning doesn't get called */ picasso96_state.Height = get_word (modeinfo + PSSO_ModeInfo_Height); picasso96_state.VirtualHeight = picasso96_state.Height; picasso96_state.GC_Depth = get_byte (modeinfo + PSSO_ModeInfo_Depth); picasso96_state.GC_Flags = get_byte (modeinfo + PSSO_ModeInfo_Flags); P96TRACE (("SetGC(%d,%d,%d)\n", picasso96_state.Width, picasso96_state.Height, picasso96_state.GC_Depth)); set_gc_called = 1; /* @@@ when do we need to reset this? */ init_picasso_screen (); return 1; } /* * SetPanning: * a0: struct BoardInfo * a1: UBYTE *Memory * d0: uae_u16 Width * d1: WORD XOffset * d2: WORD YOffset * d7: RGBFTYPE RGBFormat * This function sets the view origin of a display which might also be * overscanned. In register a1 you get the start address of the screen * bitmap on the Amiga side. You will have to subtract the starting * address of the board memory from that value to get the memory start * offset within the board. Then you get the offset in pixels of the * left upper edge of the visible part of an overscanned display. From * these values you will have to calculate the LinearStartingAddress * fields of the CRTC registers. * NOTE: SetPanning() can be used to know when a Picasso96 screen is * being opened. Better to do the appropriate clearing of the * background here than in SetSwitch() derived functions, * because SetSwitch() is not called for subsequent Picasso screens. */ uae_u32 picasso_SetPanning (void) { uae_u16 Width = m68k_dreg (regs, 0); uaecptr start_of_screen = m68k_areg (regs, 1); uaecptr bi = m68k_areg (regs, 0); uaecptr bmeptr = get_long (bi + PSSO_BoardInfo_BitMapExtra); /* Get our BoardInfo ptr's BitMapExtra ptr */ int oldxoff = picasso96_state.XOffset; int oldyoff = picasso96_state.YOffset; #if 0 /* @@@ This is in WinUAE, but it breaks things. */ if (oldscr == 0) { oldscr = start_of_screen; } if ((oldscr != start_of_screen)) { set_gc_called = 0; oldscr = start_of_screen; } #endif picasso96_state.Address = start_of_screen; /* Amiga-side address */ picasso96_state.XOffset = (uae_s16) m68k_dreg (regs, 1); picasso96_state.YOffset = (uae_s16) m68k_dreg (regs, 2); picasso96_state.VirtualWidth = get_word (bmeptr + PSSO_BitMapExtra_Width); picasso96_state.VirtualHeight = get_word (bmeptr + PSSO_BitMapExtra_Height); picasso96_state.RGBFormat = m68k_dreg (regs, 7); picasso96_state.BytesPerPixel = GetBytesPerPixel (picasso96_state.RGBFormat); picasso96_state.BytesPerRow = Width * picasso96_state.BytesPerPixel; set_panning_called = 1; P96TRACE (("SetPanning(%d, %d, %d) Start 0x%x, BPR %d\n", Width, picasso96_state.XOffset, picasso96_state.YOffset, start_of_screen, picasso96_state.BytesPerRow)); init_picasso_screen (); return 1; } static void do_xor8 (uae_u8 * ptr, long len, uae_u32 val) { int i; #if 0 && defined ALIGN_POINTER_TO32 int align_adjust = ALIGN_POINTER_TO32 (ptr); int len2; len -= align_adjust; while (align_adjust) { *ptr ^= val; ptr++; align_adjust--; } len2 = len >> 2; len -= len2 << 2; for (i = 0; i < len2; i++, ptr += 4) { *(uae_u32 *) ptr ^= val; } while (len) { *ptr ^= val; ptr++; len--; } return; #endif for (i = 0; i < len; i++, ptr++) { do_put_mem_byte (ptr, do_get_mem_byte (ptr) ^ val); } } /* * InvertRect: * * Inputs: * a0:struct BoardInfo *bi * a1:struct RenderInfo *ri * d0.w:X * d1.w:Y * d2.w:Width * d3.w:Height * d4.l:Mask * d7.l:RGBFormat * * This function is used to invert a rectangular area on the board. It is called by BltBitMap, * BltPattern and BltTemplate. */ uae_u32 picasso_InvertRect (void) { uaecptr renderinfo = m68k_areg (regs, 1); unsigned long X = (uae_u16)m68k_dreg (regs, 0); unsigned long Y = (uae_u16)m68k_dreg (regs, 1); unsigned long Width = (uae_u16)m68k_dreg (regs, 2); unsigned long Height = (uae_u16)m68k_dreg (regs, 3); uae_u8 mask = (uae_u8)m68k_dreg (regs, 4); int Bpp = GetBytesPerPixel (m68k_dreg (regs, 7)); uae_u32 xorval; unsigned int lines; struct RenderInfo ri; uae_u8 *uae_mem, *rectstart; unsigned long width_in_bytes; uae_u32 result = 0; wgfx_flushline (); if (CopyRenderInfoStructureA2U (renderinfo, &ri)) { P96TRACE (("InvertRect %dbpp 0x%lx\n", Bpp, (long)mask)); if (mask != 0xFF && Bpp > 1) mask = 0xFF; xorval = 0x01010101 * (mask & 0xFF); width_in_bytes = Bpp * Width; rectstart = uae_mem = ri.Memory + Y*ri.BytesPerRow + X*Bpp; for (lines = 0; lines < Height; lines++, uae_mem += ri.BytesPerRow) do_xor8 (uae_mem, width_in_bytes, xorval); if (renderinfo_is_current_screen (&ri)) { if (mask == 0xFF) do_invertrect (&ri, Bpp, X, Y, Width, Height); else do_blit (&ri, Bpp, X, Y, X, Y, Width, Height, BLIT_SRC, 0); } result = 1; } return result; } /* * Fill a rectangle in the screen. */ STATIC_INLINE void do_fillrect_frame_buffer (struct RenderInfo *ri, int X, int Y, int Width, int Height, uae_u32 Pen, int Bpp, RGBFTYPE RGBFormat) { int cols; uae_u8 *start, *oldstart; uae_u8 *src, *dst; int lines; /* Do our virtual frame-buffer memory. First, we do a single line fill by hand */ oldstart = start = src = ri->Memory + X * Bpp + Y * ri->BytesPerRow; switch (Bpp) { case 1: memset (start, Pen, Width); break; case 2: for (cols = 0; cols < Width; cols++) { do_put_mem_word ((uae_u16 *)start, (uae_u16)Pen); start += 2; } break; case 3: for (cols = 0; cols < Width; cols++) { do_put_mem_byte (start, (uae_u8)Pen); start++; *(uae_u16 *)(start) = (Pen & 0x00FFFF00) >> 8; start+=2; } break; case 4: for (cols = 0; cols < Width; cols++) { do_put_mem_long ((uae_u32 *)start, Pen); start += 4; } break; } /* switch (Bpp) */ src = oldstart; dst = src + ri->BytesPerRow; /* next, we do the remaining line fills via memcpy() for > 1 BPP, otherwise some more memset() calls */ if (Bpp > 1) { for (lines = 0; lines < (Height - 1); lines++, dst += ri->BytesPerRow) memcpy (dst, src, Width * Bpp); } else { for (lines = 0; lines < (Height - 1); lines++, dst += ri->BytesPerRow) memset (dst, Pen, Width); } } /*********************************************************** FillRect: *********************************************************** * a0: struct BoardInfo * * a1: struct RenderInfo * * d0: WORD X * d1: WORD Y * d2: WORD Width * d3: WORD Height * d4: uae_u32 Pen * d5: UBYTE Mask * d7: uae_u32 RGBFormat ***********************************************************/ uae_u32 picasso_FillRect (void) { uaecptr renderinfo = m68k_areg (regs, 1); uae_u32 X = (uae_u16)m68k_dreg (regs, 0); uae_u32 Y = (uae_u16)m68k_dreg (regs, 1); uae_u32 Width = (uae_u16)m68k_dreg (regs, 2); uae_u32 Height = (uae_u16)m68k_dreg (regs, 3); uae_u32 Pen = m68k_dreg (regs, 4); uae_u8 Mask = (uae_u8)m68k_dreg (regs, 5); RGBFTYPE RGBFormat = m68k_dreg (regs, 7); uae_u8 *src; uae_u8 *oldstart; int Bpp; struct RenderInfo ri; uae_u32 result = 0; #ifdef JIT special_mem|=picasso_is_special_read|picasso_is_special; #endif wgfx_flushline (); if (CopyRenderInfoStructureA2U (renderinfo, &ri) && Y != 0xFFFF) { if (ri.RGBFormat != RGBFormat) write_log ("Weird Stuff!\n"); Bpp = GetBytesPerPixel (RGBFormat); P96TRACE(("FillRect(%d, %d, %d, %d) Pen 0x%x BPP %d BPR %d Mask 0x%x\n", X, Y, Width, Height, Pen, Bpp, ri.BytesPerRow, Mask)); if (Bpp > 1) Mask = 0xFF; if (Mask == 0xFF) { if ((Width == 1) || (Height == 1)) { int i; uaecptr addr; if (renderinfo_is_current_screen (&ri)) { uae_u32 diff = gfxmem_start - (uae_u32)gfxmemory; addr = ri.Memory + X * Bpp + Y * ri.BytesPerRow + diff; if (Width == 1) { for (i = 0; i < Height; i++) { if (Bpp == 4) gfxmem_lput (addr + (i * picasso96_state.BytesPerRow), Pen); else if (Bpp == 2) gfxmem_wput (addr + (i * picasso96_state.BytesPerRow), Pen); else gfxmem_bput (addr + (i * picasso96_state.BytesPerRow), Pen); } } else if (Height == 1) { for (i = 0; i < Width; i++) { if (Bpp == 4) gfxmem_lput (addr + (i*Bpp), Pen); else if (Bpp == 2) gfxmem_wput (addr + (i*Bpp), Pen); else gfxmem_bput (addr + (i*Bpp), Pen); } } return 1; } } /* Do the fill-rect in the frame-buffer */ do_fillrect_frame_buffer (&ri, X, Y, Width, Height, Pen, Bpp, RGBFormat); /* Now we do the on-screen display, if renderinfo points to it */ if (renderinfo_is_current_screen (&ri)) { src = ri.Memory + X * Bpp + Y * ri.BytesPerRow; X = X - picasso96_state.XOffset; Y = Y - picasso96_state.YOffset; if ((int)X < 0) {Width = Width + X; X=0;} if ((int)Width < 1) return 1; if ((int)Y < 0) {Height = Height + Y; Y=0;} if ((int)Height < 1) return 1; /* Argh - why does P96Speed do this to me, with FillRect only?! */ if ((X < picasso96_state.Width) && (Y < picasso96_state.Height)) { if (X + Width > picasso96_state.Width) Width = picasso96_state.Width - X; if (Y+Height > picasso96_state.Height) Height = picasso96_state.Height - Y; do_fillrect (src, X, Y, Width, Height, Pen, Bpp, RGBFormat); } } result = 1; } else { /* We get here only if Mask != 0xFF */ if (Bpp != 1) { write_log ("WARNING - FillRect() has unhandled mask 0x%x with Bpp %d. Using fall-back routine.\n", Mask, Bpp); } else { Pen &= Mask; Mask = ~Mask; oldstart = ri.Memory + Y * ri.BytesPerRow + X * Bpp; { uae_u8 *start = oldstart; uae_u8 *end = start + Height * ri.BytesPerRow; for (; start != end; start += ri.BytesPerRow) { uae_u8 *p = start; unsigned long cols; for (cols = 0; cols < Width; cols++) { uae_u32 tmpval = do_get_mem_byte (p + cols) & Mask; do_put_mem_byte (p + cols, (uae_u8)(Pen | tmpval)); } } } if (renderinfo_is_current_screen (&ri)) do_blit( &ri, Bpp, X, Y, X, Y, Width, Height, BLIT_SRC, 0); result = 1; } } } return result; } /* * BlitRect() is a generic (any chunky pixel format) rectangle copier * NOTE: If dstri is NULL, then we're only dealing with one RenderInfo area, and called from picasso_BlitRect() * * OpCodes: * 0 = FALSE: dst = 0 * 1 = NOR: dst = ~(src | dst) * 2 = ONLYDST: dst = dst & ~src * 3 = NOTSRC: dst = ~src * 4 = ONLYSRC: dst = src & ~dst * 5 = NOTDST: dst = ~dst * 6 = EOR: dst = src^dst * 7 = NAND: dst = ~(src & dst) * 8 = AND: dst = (src & dst) * 9 = NEOR: dst = ~(src ^ dst) * 10 = DST: dst = dst * 11 = NOTONLYSRC: dst = ~src | dst * 12 = SRC: dst = src * 13 = NOTONLYDST: dst = ~dst | src * 14 = OR: dst = src | dst * 15 = TRUE: dst = 0xFF */ struct blitdata { struct RenderInfo ri_struct; struct RenderInfo dstri_struct; struct RenderInfo *ri; /* Self-referencing pointers */ struct RenderInfo *dstri; unsigned long srcx; unsigned long srcy; unsigned long dstx; unsigned long dsty; unsigned long width; unsigned long height; uae_u8 mask; BLIT_OPCODE opcode; } blitrectdata; STATIC_INLINE int BlitRectHelper (void) { struct RenderInfo *ri = blitrectdata.ri; struct RenderInfo *dstri = blitrectdata.dstri; unsigned long srcx = blitrectdata.srcx; unsigned long srcy = blitrectdata.srcy; unsigned long dstx = blitrectdata.dstx; unsigned long dsty = blitrectdata.dsty; unsigned long width = blitrectdata.width; unsigned long height = blitrectdata.height; uae_u8 mask = blitrectdata.mask; BLIT_OPCODE opcode = blitrectdata.opcode; uae_u8 Bpp = GetBytesPerPixel (ri->RGBFormat); unsigned long total_width = width * Bpp; unsigned long linewidth = (total_width + 15) & ~15; int can_do_visible_blit = 0; if (opcode == BLIT_DST) { write_log ("WARNING: BlitRect() being called with opcode of BLIT_DST\n"); return 1; } /* * If we have no destination RenderInfo, then we're dealing with a single-buffer action, called * from picasso_BlitRect(). The code in do_blitrect_frame_buffer() deals with the frame-buffer, * while the do_blit() code deals with the visible screen. * * If we have a destination RenderInfo, then we've been called from picasso_BlitRectNoMaskComplete() * and we need to put the results on the screen from the frame-buffer. */ if (dstri == NULL) { if (mask != 0xFF && Bpp > 1) { mask = 0xFF; } dstri = ri; can_do_visible_blit = 1; } /* Do our virtual frame-buffer memory first */ do_blitrect_frame_buffer (ri, dstri, srcx, srcy, dstx, dsty, width, height, mask, opcode); /* Now we do the on-screen display, if renderinfo points to it */ if (renderinfo_is_current_screen (dstri)) { if (mask == 0xFF || Bpp > 1) { if (can_do_visible_blit) do_blit (dstri, Bpp, srcx, srcy, dstx, dsty, width, height, opcode, 1); else do_blit (dstri, Bpp, dstx, dsty, dstx, dsty, width, height, opcode, 0); } else do_blit (dstri, Bpp, dstx, dsty, dstx, dsty, width, height, opcode, 0); P96TRACE (("Did do_blit 1 in BlitRect()\n")); } else { P96TRACE (("Did not do_blit 1 in BlitRect()\n")); } return 1; } STATIC_INLINE int BlitRect (uaecptr ri, uaecptr dstri, unsigned long srcx, unsigned long srcy, unsigned long dstx, unsigned long dsty, unsigned long width, unsigned long height, uae_u8 mask, BLIT_OPCODE opcode) { /* Set up the params */ CopyRenderInfoStructureA2U (ri, &blitrectdata.ri_struct); blitrectdata.ri = &blitrectdata.ri_struct; if (dstri) { CopyRenderInfoStructureA2U (dstri, &blitrectdata.dstri_struct); blitrectdata.dstri = &blitrectdata.dstri_struct; } else blitrectdata.dstri = NULL; blitrectdata.srcx = srcx; blitrectdata.srcy = srcy; blitrectdata.dstx = dstx; blitrectdata.dsty = dsty; blitrectdata.width = width; blitrectdata.height = height; blitrectdata.mask = mask; blitrectdata.opcode = opcode; return BlitRectHelper(); } /*********************************************************** BlitRect: *********************************************************** * a0: struct BoardInfo * a1: struct RenderInfo * d0: WORD SrcX * d1: WORD SrcY * d2: WORD DstX * d3: WORD DstY * d4: WORD Width * d5: WORD Height * d6: UBYTE Mask * d7: uae_u32 RGBFormat ***********************************************************/ uae_u32 picasso_BlitRect (void) { uaecptr renderinfo = m68k_areg (regs, 1); unsigned long srcx = (uae_u16)m68k_dreg (regs, 0); unsigned long srcy = (uae_u16)m68k_dreg (regs, 1); unsigned long dstx = (uae_u16)m68k_dreg (regs, 2); unsigned long dsty = (uae_u16)m68k_dreg (regs, 3); unsigned long width = (uae_u16)m68k_dreg (regs, 4); unsigned long height = (uae_u16)m68k_dreg (regs, 5); uae_u8 Mask = (uae_u8) m68k_dreg (regs, 6); uae_u32 result = 0; #ifdef JIT special_mem|=picasso_is_special_read|picasso_is_special; #endif wgfx_flushline (); P96TRACE (("BlitRect(%d, %d, %d, %d, %d, %d, 0x%x)\n", srcx, srcy, dstx, dsty, width, height, Mask)); result = BlitRect (renderinfo, (uaecptr)NULL, srcx, srcy, dstx, dsty, width, height, Mask, BLIT_SRC); return result; } /*********************************************************** BlitRectNoMaskComplete: *********************************************************** * a0: struct BoardInfo * a1: struct RenderInfo (src) * a2: struct RenderInfo (dst) * d0: WORD SrcX * d1: WORD SrcY * d2: WORD DstX * d3: WORD DstY * d4: WORD Width * d5: WORD Height * d6: UBYTE OpCode * d7: uae_u32 RGBFormat * NOTE: MUST return 0 in D0 if we're not handling this operation * because the RGBFormat or opcode aren't supported. * OTHERWISE return 1 ***********************************************************/ uae_u32 picasso_BlitRectNoMaskComplete (void) { uaecptr srcri = m68k_areg (regs, 1); uaecptr dstri = m68k_areg (regs, 2); unsigned long srcx = (uae_u16)m68k_dreg (regs, 0); unsigned long srcy = (uae_u16)m68k_dreg (regs, 1); unsigned long dstx = (uae_u16)m68k_dreg (regs, 2); unsigned long dsty = (uae_u16)m68k_dreg (regs, 3); unsigned long width = (uae_u16)m68k_dreg (regs, 4); unsigned long height = (uae_u16)m68k_dreg (regs, 5); uae_u8 OpCode = m68k_dreg (regs, 6); uae_u32 RGBFmt = m68k_dreg (regs, 7); uae_u32 result = 0; #ifdef JIT special_mem |= picasso_is_special_read|picasso_is_special; #endif wgfx_flushline (); P96TRACE(("BlitRectNoMaskComplete() op 0x%2x, xy(%4d,%4d) --> xy(%4d,%4d), wh(%4d,%4d)\n", OpCode, srcx, srcy, dstx, dsty, width, height)); result = BlitRect (srcri, dstri, srcx, srcy, dstx, dsty, width, height, 0xFF, OpCode); return result; } /* This utility function is used both by BlitTemplate() and BlitPattern() */ STATIC_INLINE void PixelWrite1 (uae_u8 * mem, int bits, uae_u32 fgpen, uae_u32 mask) { if (mask != 0xFF) fgpen = (fgpen & mask) | (do_get_mem_byte (mem + bits) & ~mask); do_put_mem_byte (mem + bits, fgpen); } STATIC_INLINE void PixelWrite2 (uae_u8 * mem, int bits, uae_u32 fgpen) { do_put_mem_word (((uae_u16 *) mem) + bits, fgpen); } STATIC_INLINE void PixelWrite3 (uae_u8 * mem, int bits, uae_u32 fgpen) { do_put_mem_byte (mem + bits * 3, fgpen & 0x000000FF); *(uae_u16 *) (mem + bits * 3 + 1) = (fgpen & 0x00FFFF00) >> 8; } STATIC_INLINE void PixelWrite4 (uae_u8 * mem, int bits, uae_u32 fgpen) { do_put_mem_long (((uae_u32 *) mem) + bits, fgpen); } STATIC_INLINE void PixelWrite (uae_u8 * mem, int bits, uae_u32 fgpen, uae_u8 Bpp, uae_u32 mask) { switch (Bpp) { case 1: if (mask != 0xFF) fgpen = (fgpen & mask) | (do_get_mem_byte (mem + bits) & ~mask); do_put_mem_byte (mem + bits, fgpen); break; case 2: do_put_mem_word (((uae_u16 *) mem) + bits, fgpen); break; case 3: do_put_mem_byte (mem + bits * 3, fgpen & 0x000000FF); *(uae_u16 *) (mem + bits * 3 + 1) = (fgpen & 0x00FFFF00) >> 8; break; case 4: do_put_mem_long (((uae_u32 *) mem) + bits, fgpen); break; } } /* * BlitPattern: * * Synopsis:BlitPattern(bi, ri, pattern, X, Y, Width, Height, Mask, RGBFormat); * Inputs: * a0:struct BoardInfo *bi * a1:struct RenderInfo *ri * a2:struct Pattern *pattern * d0.w:X * d1.w:Y * d2.w:Width * d3.w:Height * d4.w:Mask * d7.l:RGBFormat * * This function is used to paint a pattern on the board memory using the blitter. It is called by * BltPattern, if a AreaPtrn is used with positive AreaPtSz. The pattern consists of a b/w image * using a single plane of image data which will be expanded repeatedly to the destination RGBFormat * using ForeGround and BackGround pens as well as draw modes. The width of the pattern data is * always 16 pixels (one word) and the height is calculated as 2^Size. The data must be shifted up * and to the left by XOffset and YOffset pixels at the beginning. */ uae_u32 picasso_BlitPattern (void) { uaecptr rinf = m68k_areg (regs, 1); uaecptr pinf = m68k_areg (regs, 2); unsigned long X = (uae_u16)m68k_dreg (regs, 0); unsigned long Y = (uae_u16)m68k_dreg (regs, 1); unsigned long W = (uae_u16)m68k_dreg (regs, 2); unsigned long H = (uae_u16)m68k_dreg (regs, 3); uae_u8 Mask = (uae_u8) m68k_dreg (regs, 4); uae_u32 RGBFmt = m68k_dreg (regs, 7); uae_u8 Bpp = GetBytesPerPixel (RGBFmt); int inversion = 0; struct RenderInfo ri; struct Pattern pattern; unsigned long rows; uae_u32 fgpen; uae_u8 *uae_mem; int xshift; unsigned long ysize_mask; uae_u32 result = 0; #ifdef JIT special_mem|=picasso_is_special_read|picasso_is_special; #endif wgfx_flushline (); if (CopyRenderInfoStructureA2U (rinf, &ri) && CopyPatternStructureA2U (pinf, &pattern)) { Bpp = GetBytesPerPixel (ri.RGBFormat); uae_mem = ri.Memory + Y*ri.BytesPerRow + X*Bpp; /* offset with address */ if (pattern.DrawMode & INVERS) inversion = 1; pattern.DrawMode &= 0x03; if (Mask != 0xFF) { if (Bpp > 1) Mask = 0xFF; if (pattern.DrawMode == COMP) write_log ("WARNING - BlitPattern() has unhandled mask 0x%x with COMP DrawMode. Using fall-back routine.\n", Mask); else result = 1; } else result = 1; if (result) { # ifdef P96TRACING_ENABLED DumpPattern (&pattern); # endif ysize_mask = (1 << pattern.Size) - 1; xshift = pattern.XOffset & 15; for (rows = 0; rows < H; rows++, uae_mem += ri.BytesPerRow) { unsigned long prow = (rows + pattern.YOffset) & ysize_mask; unsigned int d = do_get_mem_word (((uae_u16 *)pattern.Memory) + prow); uae_u8 *uae_mem2 = uae_mem; unsigned long cols; if (xshift != 0) d = (d << xshift) | (d >> (16 - xshift)); for (cols = 0; cols < W; cols += 16, uae_mem2 += Bpp << 4) { long bits; long max = W - cols; unsigned int data = d; if (max > 16) max = 16; for (bits = 0; bits < max; bits++) { int bit_set = data & 0x8000; data <<= 1; switch (pattern.DrawMode) { case JAM1: if (inversion) bit_set = !bit_set; if (bit_set) PixelWrite (uae_mem2, bits, pattern.FgPen, Bpp, Mask); break; case JAM2: if (inversion) bit_set = !bit_set; if (bit_set) PixelWrite (uae_mem2, bits, pattern.FgPen, Bpp, Mask); else PixelWrite (uae_mem2, bits, pattern.BgPen, Bpp, Mask); break; case COMP: if (bit_set) { fgpen = pattern.FgPen; switch (Bpp) { case 1: { uae_u8 *addr = uae_mem2 + bits; do_put_mem_byte (addr, (uae_u8)(do_get_mem_byte (addr) ^ fgpen)); } break; case 2: { uae_u16 *addr = ((uae_u16 *)uae_mem2) + bits; do_put_mem_word (addr, (uae_u16)(do_get_mem_word (addr) ^ fgpen)); } break; case 3: { uae_u32 *addr = (uae_u32 *)(uae_mem2 + bits * 3); do_put_mem_long (addr, do_get_mem_long (addr) ^ (fgpen & 0x00FFFFFF)); } break; case 4: { uae_u32 *addr = ((uae_u32 *)uae_mem2) + bits; do_put_mem_long (addr, do_get_mem_long (addr) ^ fgpen); } break; } /* switch (Bpp) */ } break; } /* switch (pattern.DrawMode) */ } /* for (bits) */ } /* for (cols) */ } /* for (rows) */ /* If we need to update a second-buffer (extra_mem is set), then do it only if visible! */ if (picasso_vidinfo.extra_mem && renderinfo_is_current_screen (&ri)) do_blit( &ri, Bpp, X, Y, X, Y, W, H, BLIT_SRC, 0); result = 1; } } return result; } /************************************************* BlitTemplate: ************************************************** * Synopsis: BlitTemplate(bi, ri, template, X, Y, Width, Height, Mask, RGBFormat); * a0: struct BoardInfo *bi * a1: struct RenderInfo *ri * a2: struct Template *template * d0.w: X * d1.w: Y * d2.w: Width * d3.w: Height * d4.w: Mask * d7.l: RGBFormat * * This function is used to paint a template on the board memory using the blitter. * It is called by BltPattern and BltTemplate. The template consists of a b/w image * using a single plane of image data which will be expanded to the destination RGBFormat * using ForeGround and BackGround pens as well as draw modes. ***********************************************************************************/ uae_u32 picasso_BlitTemplate (void) { uae_u8 inversion = 0; uaecptr rinf = m68k_areg (regs, 1); uaecptr tmpl = m68k_areg (regs, 2); unsigned long X = (uae_u16)m68k_dreg (regs, 0); unsigned long Y = (uae_u16)m68k_dreg (regs, 1); unsigned long W = (uae_u16)m68k_dreg (regs, 2); unsigned long H = (uae_u16)m68k_dreg (regs, 3); uae_u16 Mask = (uae_u16)m68k_dreg (regs, 4); struct Template tmp; struct RenderInfo ri; unsigned long rows; int bitoffset; uae_u32 fgpen; uae_u8 *uae_mem, Bpp; uae_u8 *tmpl_base; uae_u32 result = 0; #ifdef JIT special_mem |= picasso_is_special_read|picasso_is_special; #endif wgfx_flushline (); if (CopyRenderInfoStructureA2U (rinf, &ri) && CopyTemplateStructureA2U (tmpl, &tmp)) { Bpp = GetBytesPerPixel (ri.RGBFormat); uae_mem = ri.Memory + Y*ri.BytesPerRow + X*Bpp; /* offset into address */ if (tmp.DrawMode & INVERS) inversion = 1; tmp.DrawMode &= 0x03; if (Mask != 0xFF) { if (Bpp > 1) Mask = 0xFF; if (tmp.DrawMode == COMP) { write_log ("WARNING - BlitTemplate() has unhandled mask 0x%x with COMP DrawMode. Using fall-back routine.\n", Mask); # ifdef _WIN32 flushpixels(); //only need in the windows Version # endif return 0; } else result = 1; } else result = 1; #if 1 if (tmp.DrawMode == COMP) { /* workaround, let native blitter handle COMP mode */ # ifdef _WIN32 flushpixels(); # endif return 0; } #endif if (result) { P96TRACE (("BlitTemplate() xy(%d,%d), wh(%d,%d) draw 0x%x fg 0x%x bg 0x%x \n", X, Y, W, H, tmp.DrawMode, tmp.FgPen, tmp.BgPen)); bitoffset = tmp.XOffset % 8; # if defined (P96TRACING_ENABLED) && (P96TRACING_LEVEL > 0) DumpTemplate(&tmp, W, H); # endif tmpl_base = tmp.Memory + tmp.XOffset / 8; for (rows = 0; rows < H; rows++, uae_mem += ri.BytesPerRow, tmpl_base += tmp.BytesPerRow) { unsigned long cols; uae_u8 *tmpl_mem = tmpl_base; uae_u8 *uae_mem2 = uae_mem; unsigned int data = *tmpl_mem; for (cols = 0; cols < W; cols += 8, uae_mem2 += Bpp << 3) { unsigned int byte; long bits; long max = W - cols; if (max > 8) max = 8; data <<= 8; data |= *++tmpl_mem; byte = data >> (8 - bitoffset); for (bits = 0; bits < max; bits++) { int bit_set = (byte & 0x80); byte <<= 1; switch (tmp.DrawMode) { case JAM1: if (inversion) bit_set = !bit_set; if (bit_set) { fgpen = tmp.FgPen; PixelWrite (uae_mem2, bits, fgpen, Bpp, Mask); } break; case JAM2: if (inversion) bit_set = !bit_set; fgpen = tmp.BgPen; if (bit_set) fgpen = tmp.FgPen; PixelWrite (uae_mem2, bits, fgpen, Bpp, Mask); break; case COMP: if (bit_set) { fgpen = tmp.FgPen; switch (Bpp) { case 1: { uae_u8 *addr = uae_mem2 + bits; do_put_mem_byte (addr, (uae_u8) (do_get_mem_byte (addr) ^ fgpen)); } break; case 2: { uae_u16 *addr = ((uae_u16 *)uae_mem2) + bits; do_put_mem_word (addr, (uae_u16) (do_get_mem_word (addr) ^ fgpen)); } break; case 3: { uae_u32 *addr = (uae_u32 *)(uae_mem2 + bits * 3); do_put_mem_long (addr, do_get_mem_long (addr) ^ (fgpen & 0x00FFFFFF)); } break; case 4: { uae_u32 *addr = ((uae_u32 *)uae_mem2) + bits; do_put_mem_long (addr, do_get_mem_long (addr) ^ fgpen); } break; } /* switch (Bpp) */ } /* if (bit_set) */ break; } /* switch (tmp.DrawMode) */ } /* for (bits) */ } /* for (cols) */ } /* for (rows) */ /* If we need to update a second-buffer (extra_mem is set), then do it only if visible! */ if (picasso_vidinfo.extra_mem && renderinfo_is_current_screen (&ri)) do_blit (&ri, Bpp, X, Y, X, Y, W, H, BLIT_SRC, 0); } } return 1; } /* * CalculateBytesPerRow: * a0: struct BoardInfo * d0: uae_u16 Width * d7: RGBFTYPE RGBFormat * This function calculates the amount of bytes needed for a line of * "Width" pixels in the given RGBFormat. */ uae_u32 picasso_CalculateBytesPerRow (void) { uae_u16 width = m68k_dreg (regs, 0); uae_u32 type = m68k_dreg (regs, 7); width = GetBytesPerPixel (type) * width; P96TRACE (("CalculateBytesPerRow() = %d\n", width)); return width; } /* * SetDisplay: * a0: struct BoardInfo * d0: BOOL state * This function enables and disables the video display. * * NOTE: return the opposite of the state */ uae_u32 picasso_SetDisplay (void) { uae_u32 state = m68k_dreg (regs, 0); P96TRACE (("SetDisplay(%d)\n", state)); return !state; } /* * WaitVerticalSync: * a0: struct BoardInfo * This function waits for the next horizontal retrace. */ uae_u32 picasso_WaitVerticalSync (void) { /*write_log ("WaitVerticalSync()\n"); */ return 1; } /* NOTE: Watch for those planeptrs of 0x00000000 and 0xFFFFFFFF for all zero / all one bitmaps !!!! */ static void PlanarToChunky (struct RenderInfo *ri, struct BitMap *bm, unsigned long srcx, unsigned long srcy, unsigned long dstx, unsigned long dsty, unsigned long width, unsigned long height, uae_u8 mask) { int j; uae_u8 *PLANAR[8], *image = ri->Memory + dstx * GetBytesPerPixel (ri->RGBFormat) + dsty * ri->BytesPerRow; int Depth = bm->Depth; unsigned long rows, bitoffset = srcx & 7; long eol_offset; /* if (mask != 0xFF) write_log ("P2C - pixel-width = %d, bit-offset = %d\n", width, bitoffset); */ /* Set up our bm->Planes[] pointers to the right horizontal offset */ for (j = 0; j < Depth; j++) { uae_u8 *p = bm->Planes[j]; if (p != &all_zeros_bitmap && p != &all_ones_bitmap) p += srcx / 8 + srcy * bm->BytesPerRow; PLANAR[j] = p; if ((mask & (1 << j)) == 0) PLANAR[j] = &all_zeros_bitmap; } eol_offset = (long) bm->BytesPerRow - (long) ((width + 7) >> 3); for (rows = 0; rows < height; rows++, image += ri->BytesPerRow) { unsigned long cols; for (cols = 0; cols < width; cols += 8) { int k; uae_u32 a = 0, b = 0; unsigned int msk = 0xFF; long tmp = cols + 8 - width; if (tmp > 0) { msk <<= tmp; b = do_get_mem_long ((uae_u32 *) (image + cols + 4)); if (tmp < 4) b &= 0xFFFFFFFF >> (32 - tmp * 8); else if (tmp > 4) { a = do_get_mem_long ((uae_u32 *) (image + cols)); a &= 0xFFFFFFFF >> (64 - tmp * 8); } } for (k = 0; k < Depth; k++) { unsigned int data; if (PLANAR[k] == &all_zeros_bitmap) data = 0; else if (PLANAR[k] == &all_ones_bitmap) data = 0xFF; else { data = (uae_u8) (do_get_mem_word ((uae_u16 *) PLANAR[k]) >> (8 - bitoffset)); PLANAR[k]++; } data &= msk; a |= p2ctab[data][0] << k; b |= p2ctab[data][1] << k; } do_put_mem_long ((uae_u32 *) (image + cols), a); do_put_mem_long ((uae_u32 *) (image + cols + 4), b); } for (j = 0; j < Depth; j++) { if (PLANAR[j] != &all_zeros_bitmap && PLANAR[j] != &all_ones_bitmap) { PLANAR[j] += eol_offset; } } } } /* * BlitPlanar2Chunky: * a0: struct BoardInfo *bi * a1: struct BitMap *bm - source containing planar information and assorted details * a2: struct RenderInfo *ri - dest area and its details * d0.w: SrcX * d1.w: SrcY * d2.w: DstX * d3.w: DstY * d4.w: SizeX * d5.w: SizeY * d6.b: MinTerm - uh oh! * d7.b: Mask - uh oh! * * This function is currently used to blit from planar bitmaps within system memory to chunky bitmaps * on the board. Watch out for plane pointers that are 0x00000000 (represents a plane with all bits "0") * or 0xffffffff (represents a plane with all bits "1"). */ uae_u32 picasso_BlitPlanar2Chunky (void) { uaecptr bm = m68k_areg (regs, 1); uaecptr ri = m68k_areg (regs, 2); unsigned long srcx = (uae_u16) m68k_dreg (regs, 0); unsigned long srcy = (uae_u16) m68k_dreg (regs, 1); unsigned long dstx = (uae_u16) m68k_dreg (regs, 2); unsigned long dsty = (uae_u16) m68k_dreg (regs, 3); unsigned long width = (uae_u16) m68k_dreg (regs, 4); unsigned long height = (uae_u16) m68k_dreg (regs, 5); uae_u8 minterm = m68k_dreg (regs, 6) & 0xFF; uae_u8 mask = m68k_dreg (regs, 7) & 0xFF; struct RenderInfo local_ri; struct BitMap local_bm; wgfx_flushline (); if (minterm != 0x0C) { write_log ("ERROR - BlitPlanar2Chunky() has minterm 0x%x, which I don't handle. Using fall-back routine.\n", minterm); return 0; } if (!CopyRenderInfoStructureA2U (ri, &local_ri) || !CopyBitMapStructureA2U (bm, &local_bm)) return 0; P96TRACE (("BlitPlanar2Chunky(%d, %d, %d, %d, %d, %d) Minterm 0x%x, Mask 0x%x, Depth %d\n", srcx, srcy, dstx, dsty, width, height, minterm, mask, local_bm.Depth)); P96TRACE (("P2C - BitMap has %d BPR, %d rows\n", local_bm.BytesPerRow, local_bm.Rows)); PlanarToChunky (&local_ri, &local_bm, srcx, srcy, dstx, dsty, width, height, mask); if (renderinfo_is_current_screen (&local_ri)) do_blit (&local_ri, GetBytesPerPixel (local_ri.RGBFormat), dstx, dsty, dstx, dsty, width, height, BLIT_SRC, 0); return 1; } static void PlanarToDirect (struct RenderInfo *ri, struct BitMap *bm, unsigned long srcx, unsigned long srcy, unsigned long dstx, unsigned long dsty, unsigned long width, unsigned long height, uae_u8 mask, struct ColorIndexMapping *cim) { int j; int bpp = GetBytesPerPixel (ri->RGBFormat); uae_u8 *PLANAR[8]; uae_u8 *image = ri->Memory + dstx * bpp + dsty * ri->BytesPerRow; int Depth = bm->Depth; unsigned long rows; long eol_offset; /* Set up our bm->Planes[] pointers to the right horizontal offset */ for (j = 0; j < Depth; j++) { uae_u8 *p = bm->Planes[j]; if (p != &all_zeros_bitmap && p != &all_ones_bitmap) p += srcx / 8 + srcy * bm->BytesPerRow; PLANAR[j] = p; if ((mask & (1 << j)) == 0) PLANAR[j] = &all_zeros_bitmap; } eol_offset = (long) bm->BytesPerRow - (long) ((width + (srcx & 7)) >> 3); for (rows = 0; rows < height; rows++, image += ri->BytesPerRow) { unsigned long cols; uae_u8 *image2 = image; unsigned int bitoffs = 7 - (srcx & 7); int i; for (cols = 0; cols < width; cols++) { int v = 0, k; for (k = 0; k < Depth; k++) { if (PLANAR[k] == &all_ones_bitmap) v |= 1 << k; else if (PLANAR[k] != &all_zeros_bitmap) { v |= ((*PLANAR[k] >> bitoffs) & 1) << k; } } switch (bpp) { case 2: do_put_mem_word ((uae_u16 *) image2, cim->Colors[v]); image2 += 2; break; case 3: do_put_mem_byte (image2++, cim->Colors[v] & 0x000000FF); do_put_mem_word ((uae_u16 *) image2, (cim->Colors[v] & 0x00FFFF00) >> 8); image2 += 2; break; case 4: do_put_mem_long ((uae_u32 *) image2, cim->Colors[v]); image2 += 4; break; } bitoffs--; bitoffs &= 7; if (bitoffs == 7) { int k; for (k = 0; k < Depth; k++) { if (PLANAR[k] != &all_zeros_bitmap && PLANAR[k] != &all_ones_bitmap) { PLANAR[k]++; } } } } for (i = 0; i < Depth; i++) { if (PLANAR[i] != &all_zeros_bitmap && PLANAR[i] != &all_ones_bitmap) { PLANAR[i] += eol_offset; } } } } /* * BlitPlanar2Direct: * * Synopsis: * BlitPlanar2Direct(bi, bm, ri, cim, SrcX, SrcY, DstX, DstY, SizeX, SizeY, MinTerm, Mask); * Inputs: * a0:struct BoardInfo *bi * a1:struct BitMap *bm * a2:struct RenderInfo *ri * a3:struct ColorIndexMapping *cmi * d0.w:SrcX * d1.w:SrcY * d2.w:DstX * d3.w:DstY * d4.w:SizeX * d5.w:SizeY * d6.b:MinTerm * d7.b:Mask * * This function is currently used to blit from planar bitmaps within system memory to direct color * bitmaps (15, 16, 24 or 32 bit) on the board. Watch out for plane pointers that are 0x00000000 (represents * a plane with all bits "0") or 0xffffffff (represents a plane with all bits "1"). The ColorIndexMapping is * used to map the color index of each pixel formed by the bits in the bitmap's planes to a direct color value * which is written to the destination RenderInfo. The color mask and all colors within the mapping are words, * triple bytes or longwords respectively similar to the color values used in FillRect(), BlitPattern() or * BlitTemplate(). */ uae_u32 picasso_BlitPlanar2Direct (void) { uaecptr bm = m68k_areg (regs, 1); uaecptr ri = m68k_areg (regs, 2); uaecptr cim = m68k_areg (regs, 3); unsigned long srcx = (uae_u16)m68k_dreg (regs, 0); unsigned long srcy = (uae_u16)m68k_dreg (regs, 1); unsigned long dstx = (uae_u16)m68k_dreg (regs, 2); unsigned long dsty = (uae_u16)m68k_dreg (regs, 3); unsigned long width = (uae_u16)m68k_dreg (regs, 4); unsigned long height = (uae_u16)m68k_dreg (regs, 5); uae_u8 minterm = m68k_dreg (regs, 6); uae_u8 Mask = m68k_dreg (regs, 7); struct RenderInfo local_ri; struct BitMap local_bm; struct ColorIndexMapping local_cim; uae_u32 result = 0; #ifdef JIT special_mem |= picasso_is_special_read|picasso_is_special; #endif wgfx_flushline (); if (minterm != 0x0C) { write_log ("WARNING - BlitPlanar2Direct() has unhandled op-code 0x%x. Using fall-back routine.\n", minterm); } else if (CopyRenderInfoStructureA2U (ri, &local_ri) && CopyBitMapStructureA2U (bm, &local_bm)) { Mask = 0xFF; CopyColorIndexMappingA2U (cim, &local_cim); P96TRACE (("BlitPlanar2Direct(%d, %d, %d, %d, %d, %d) Minterm 0x%x, Mask 0x%x, Depth %d\n", srcx, srcy, dstx, dsty, width, height, minterm, Mask, local_bm.Depth)); PlanarToDirect (&local_ri, &local_bm, srcx, srcy, dstx, dsty, width, height, Mask, &local_cim); if (renderinfo_is_current_screen (&local_ri)) do_blit (&local_ri, GetBytesPerPixel (local_ri.RGBFormat), dstx, dsty, dstx, dsty, width, height, BLIT_SRC, 0); result = 1; } return result; } /* @@@ - Work to be done here! * * The address is the offset into our Picasso96 frame-buffer (pointed to by gfxmem_start) * where the value was put. * * Porting work: on some machines you may not need these functions, ie. if the memory for the * Picasso96 frame-buffer is directly viewable or directly blittable. On Win32 with DirectX, * this is not the case. So I provide some write-through functions (as per Mathias' orders!) */ static void write_gfx_long (uaecptr addr, uae_u32 value) { uaecptr oldaddr = addr; int x, xbytes, y; uae_u8 *dst; if (!picasso_on) return; /* * Several writes to successive memory locations are a common access pattern. * Try to optimize it. */ if (addr >= wgfx_linestart && addr + 4 <= wgfx_lineend) { if (addr < wgfx_min) wgfx_min = addr; if (addr + 4 > wgfx_max) wgfx_max = addr + 4; return; } else wgfx_flushline (); addr += gfxmem_start; /* Check to see if this needs to be written through to the display, or was it an "offscreen" area? */ /* Shouldn't the "+4" be on the *first* addr, rather than the second? and be a "+3" at that? */ if (addr < picasso96_state.Address || addr + 4 > picasso96_state.Extent) return; addr -= picasso96_state.Address; y = addr / picasso96_state.BytesPerRow; if (y >= picasso96_state.VirtualHeight) return; wgfx_linestart = picasso96_state.Address - gfxmem_start + y * picasso96_state.BytesPerRow; wgfx_lineend = wgfx_linestart + picasso96_state.BytesPerRow; wgfx_y = y; wgfx_min = oldaddr; wgfx_max = oldaddr + 4; } static void write_gfx_word (uaecptr addr, uae_u16 value) { uaecptr oldaddr = addr; int x, xbytes, y; uae_u8 *dst; if (!picasso_on) return; /* * Several writes to successive memory locations are a common access pattern. * Try to optimize it. */ if (addr >= wgfx_linestart && addr + 2 <= wgfx_lineend) { if (addr < wgfx_min) wgfx_min = addr; if (addr + 2 > wgfx_max) wgfx_max = addr + 2; return; } else wgfx_flushline (); addr += gfxmem_start; /* Check to see if this needs to be written through to the display, or was it an "offscreen" area? */ if (addr < picasso96_state.Address || addr + 2 > picasso96_state.Extent) return; addr -= picasso96_state.Address; y = addr / picasso96_state.BytesPerRow; if (y >= picasso96_state.VirtualHeight) return; wgfx_linestart = picasso96_state.Address - gfxmem_start + y * picasso96_state.BytesPerRow; wgfx_lineend = wgfx_linestart + picasso96_state.BytesPerRow; wgfx_y = y; wgfx_min = oldaddr; wgfx_max = oldaddr + 2; } static void write_gfx_byte (uaecptr addr, uae_u8 value) { uaecptr oldaddr = addr; int x, xbytes, y; uae_u8 *dst; if (!picasso_on) return; /* * Several writes to successive memory locations are a common access pattern. * Try to optimize it. */ if (addr >= wgfx_linestart && addr + 4 <= wgfx_lineend) { if (addr < wgfx_min) wgfx_min = addr; if (addr + 1 > wgfx_max) wgfx_max = addr + 1; return; } else wgfx_flushline (); addr += gfxmem_start; /* Check to see if this needs to be written through to the display, or was it an "offscreen" area? */ if (addr < picasso96_state.Address || addr + 1 > picasso96_state.Extent) return; addr -= picasso96_state.Address; y = addr / picasso96_state.BytesPerRow; if (y >= picasso96_state.VirtualHeight) return; wgfx_linestart = picasso96_state.Address - gfxmem_start + y * picasso96_state.BytesPerRow; wgfx_lineend = wgfx_linestart + picasso96_state.BytesPerRow; wgfx_y = y; wgfx_min = oldaddr; wgfx_max = oldaddr + 1; } static uae_u32 REGPARAM2 gfxmem_lget (uaecptr addr) { uae_u32 *m; #ifdef JIT special_mem |= picasso_is_special_read; #endif addr -= gfxmem_start; addr &= gfxmem_mask; m = (uae_u32 *) (gfxmemory + addr); return do_get_mem_long (m); } static uae_u32 REGPARAM2 gfxmem_wget (uaecptr addr) { uae_u16 *m; #ifdef JIT special_mem |= picasso_is_special_read; #endif addr -= gfxmem_start; addr &= gfxmem_mask; m = (uae_u16 *) (gfxmemory + addr); return do_get_mem_word (m); } static uae_u32 REGPARAM2 gfxmem_bget (uaecptr addr) { #ifdef JIT special_mem |= picasso_is_special_read; #endif addr -= gfxmem_start; addr &= gfxmem_mask; return gfxmemory[addr]; } static void REGPARAM2 gfxmem_lput (uaecptr addr, uae_u32 l) { uae_u32 *m; #ifdef JIT special_mem |= picasso_is_special; #endif addr -= gfxmem_start; addr &= gfxmem_mask; m = (uae_u32 *) (gfxmemory + addr); do_put_mem_long (m, l); /* write the long-word to our displayable memory */ write_gfx_long (addr, l); } static void REGPARAM2 gfxmem_wput (uaecptr addr, uae_u32 w) { uae_u16 *m; #ifdef JIT special_mem |= picasso_is_special; #endif addr -= gfxmem_start; addr &= gfxmem_mask; m = (uae_u16 *) (gfxmemory + addr); do_put_mem_word (m, (uae_u16) w); /* write the word to our displayable memory */ write_gfx_word (addr, (uae_u16) w); } static void REGPARAM2 gfxmem_bput (uaecptr addr, uae_u32 b) { #ifdef JIT special_mem |= picasso_is_special; #endif addr -= gfxmem_start; addr &= gfxmem_mask; gfxmemory[addr] = b; /* write the byte to our displayable memory */ write_gfx_byte (addr, (uae_u8) b); } static int REGPARAM2 gfxmem_check (uaecptr addr, uae_u32 size) { addr -= gfxmem_start & gfxmem_mask; addr &= gfxmem_mask; return (addr + size) < allocated_gfxmem; } static uae_u8 REGPARAM2 *gfxmem_xlate (uaecptr addr) { addr -= gfxmem_start & gfxmem_mask; addr &= gfxmem_mask; return gfxmemory + addr; } addrbank gfxmem_bank = { gfxmem_lget, gfxmem_wget, gfxmem_bget, gfxmem_lput, gfxmem_wput, gfxmem_bput, gfxmem_xlate, gfxmem_check, NULL }; int picasso_display_mode_index (uae_u32 x, uae_u32 y, uae_u32 d) { int i; for (i = 0; i < mode_count; i++) { if (DisplayModes[i].res.width == x && DisplayModes[i].res.height == y && DisplayModes[i].depth == d) break; } if (i == mode_count) i = -1; return i; } static int resolution_compare (const void *a, const void *b) { struct PicassoResolution *ma = (struct PicassoResolution *) a; struct PicassoResolution *mb = (struct PicassoResolution *) b; if (ma->res.width > mb->res.width) return -1; if (ma->res.width < mb->res.width) return 1; if (ma->res.height > mb->res.height) return -1; if (ma->res.height < mb->res.height) return 1; return ma->depth - mb->depth; } /* Call this function first, near the beginning of code flow * NOTE: Don't stuff it in InitGraphics() which seems reasonable... * Instead, put it in customreset() for safe-keeping. */ void InitPicasso96 (void) { static int first_time = 1; memset (&picasso96_state, 0, sizeof (struct picasso96_state_struct)); if (first_time) { int i; for (i = 0; i < 256; i++) { p2ctab[i][0] = (((i & 128) ? 0x01000000 : 0) | ((i & 64) ? 0x010000 : 0) | ((i & 32) ? 0x0100 : 0) | ((i & 16) ? 0x01 : 0)); p2ctab[i][1] = (((i & 8) ? 0x01000000 : 0) | ((i & 4) ? 0x010000 : 0) | ((i & 2) ? 0x0100 : 0) | ((i & 1) ? 0x01 : 0)); } mode_count = DX_FillResolutions (&picasso96_pixel_format); qsort (DisplayModes, mode_count, sizeof (struct PicassoResolution), resolution_compare); for (i = 0; i < mode_count; i++) { sprintf (DisplayModes[i].name, "%dx%d, %d-bit, %d Hz", DisplayModes[i].res.width, DisplayModes[i].res.height, DisplayModes[i].depth * 8, DisplayModes[i].refresh); switch (DisplayModes[i].depth) { case 1: if (DisplayModes[i].res.width > chunky.width) chunky.width = DisplayModes[i].res.width; if (DisplayModes[i].res.height > chunky.height) chunky.height = DisplayModes[i].res.height; break; case 2: if (DisplayModes[i].res.width > hicolour.width) hicolour.width = DisplayModes[i].res.width; if (DisplayModes[i].res.height > hicolour.height) hicolour.height = DisplayModes[i].res.height; break; case 3: if (DisplayModes[i].res.width > truecolour.width) truecolour.width = DisplayModes[i].res.width; if (DisplayModes[i].res.height > truecolour.height) truecolour.height = DisplayModes[i].res.height; break; case 4: if (DisplayModes[i].res.width > alphacolour.width) alphacolour.width = DisplayModes[i].res.width; if (DisplayModes[i].res.height > alphacolour.height) alphacolour.height = DisplayModes[i].res.height; break; } } ShowSupportedResolutions (); first_time = 0; } } #endif fs-uae-2.2.3+dfsg/src/genblitter.cpp0000644000175000017500000002737512162366655017525 0ustar glaubitzglaubitz /* * UAE - The Un*x Amiga Emulator * * Optimized blitter minterm function generator * * Copyright 1995,1996 Bernd Schmidt * Copyright 1996 Alessandro Bissacco */ #ifdef FSUAE #define UAE_CONSOLE #endif #include "sysconfig.h" #include #include #include "genblitter.h" #ifdef FSUAE #define write_log_standard printf #endif /* Here is the minterm table used in blitter function generation */ static unsigned char blttbl[]= { 0x00, 0x0a, 0x2a, 0x30, 0x3a, 0x3c, 0x4a, 0x6a, 0x8a, 0x8c, 0x9a, 0xa8, 0xaa, 0xb1, 0xca, 0xcc, 0xd8, 0xe2, 0xea, 0xf0, 0xfa, 0xfc }; static void generate_include(void) { int minterm; printf("STATIC_INLINE uae_u32 blit_func(uae_u32 srca, uae_u32 srcb, uae_u32 srcc, uae_u8 mt)\n{\nswitch(mt){\n"); for (minterm = 0; minterm < 256; minterm++) { printf("case 0x%x:\n", minterm); printf("\treturn %s;\n", blitops[minterm].s); } printf("}\n"); printf("return 0;\n"); /* No, sir, it doesn't! */ printf("}\n"); } static void generate_func(void) { unsigned int i; printf("#include \"sysconfig.h\"\n"); printf("#include \"sysdeps.h\"\n"); printf("#include \"options.h\"\n"); printf("#include \"custom.h\"\n"); printf("#include \"uae/memory.h\"\n"); printf("#include \"blitter.h\"\n"); printf("#include \"blitfunc.h\"\n\n"); for (i = 0; i < sizeof(blttbl); i++) { int active = blitops[blttbl[i]].used; int a_is_on = active & 1, b_is_on = active & 2, c_is_on = active & 4; printf("void blitdofast_%x (uaecptr pta, uaecptr ptb, uaecptr ptc, uaecptr ptd, struct bltinfo *b)\n",blttbl[i]); printf("{\n"); printf("int i,j;\n"); printf("uae_u32 totald = 0;\n"); #if 0 printf("if (currprefs.blits_32bit_enabled && b->hblitsize > 1"); if (a_is_on) printf(" && !b->blitashift && b->bltafwm==0xffff && b->bltalwm==0xffff"); if (b_is_on) printf(" && !b->blitbshift"); printf(") {\n"); if (a_is_on) printf("uae_u32 srca=((uae_u32)b->bltadat << 16) | b->bltadat;\n"); if (b_is_on) printf("uae_u32 srcb=((uae_u32)b->bltbdat << 16) | b->bltbdat;\n"); if (c_is_on) printf("uae_u32 srcc=((uae_u32)b->bltcdat << 16) | b->bltcdat;\n"); printf("uae_u32 dest;\n"); printf("int count=b->hblitsize/2, oddword=b->hblitsize&1;\n"); printf("for (j=0;jvblitsize;j++) {\n"); printf("\tfor(i=0;ibltamod;\n"); if (b_is_on) printf("\tif (ptb) ptb += b->bltbmod;\n"); if (c_is_on) printf("\tif (ptc) ptc += b->bltcmod;\n"); printf("\tif (ptd) ptd += b->bltdmod;\n"); printf("}\n"); if (a_is_on) printf("if (pta) b->bltadat = (*(pta-b->bltamod-2) << 8) | *(pta - b->bltamod - 1);\n"); /* Maybe not necessary, but I don't want problems */ if (b_is_on) printf("if (ptb) b->bltbdat = (*(ptb-b->bltbmod-2) << 8) | *(ptb - b->bltbmod - 1);\n"); if (c_is_on) printf("if (ptc) b->bltcdat = (*(ptc-b->bltcmod-2) << 8) | *(ptc - b->bltcmod - 1);\n"); printf("if (ptd) b->bltddat = (*(ptd-b->bltdmod-2) << 8) | *(ptd - b->bltdmod - 1);\n"); printf("} else {\n"); #endif if (a_is_on) printf("uae_u32 preva = 0;\n"); if (b_is_on) printf("uae_u32 prevb = 0, srcb = b->bltbhold;\n"); if (c_is_on) printf("uae_u32 srcc = b->bltcdat;\n"); printf("uae_u32 dstd=0;\n"); printf("uaecptr dstp = 0;\n"); #ifdef FSUAE printf("for (j = b->vblitsize; j--; ) {\n"); if (a_is_on) { printf("\tfor (i = 0; i < b->hblitsize; i++) {\n\t\tuae_u32 bltadat, srca;\n\n"); } else { printf("\tfor (i = b->hblitsize; i--; ) {\n\t\tuae_u32 bltadat, srca;\n\n"); } #else printf("for (j = 0; j < b->vblitsize; j++) {\n"); printf("\tfor (i = 0; i < b->hblitsize; i++) {\n\t\tuae_u32 bltadat, srca;\n\n"); #endif if (c_is_on) printf("\t\tif (ptc) { srcc = chipmem_wget_indirect (ptc); ptc += 2; }\n"); if (b_is_on) printf("\t\tif (ptb) {\n\t\t\tuae_u32 bltbdat = blt_info.bltbdat = chipmem_wget_indirect (ptb); ptb += 2;\n"); if (b_is_on) printf("\t\t\tsrcb = (((uae_u32)prevb << 16) | bltbdat) >> b->blitbshift;\n"); if (b_is_on) printf("\t\t\tprevb = bltbdat;\n\t\t}\n"); if (a_is_on) printf("\t\tif (pta) { bltadat = blt_info.bltadat = chipmem_wget_indirect (pta); pta += 2; } else { bltadat = blt_info.bltadat; }\n"); if (a_is_on) printf("\t\tbltadat &= blit_masktable[i];\n"); if (a_is_on) printf("\t\tsrca = (((uae_u32)preva << 16) | bltadat) >> b->blitashift;\n"); if (a_is_on) printf("\t\tpreva = bltadat;\n"); printf("\t\tif (dstp) chipmem_wput_indirect (dstp, dstd);\n"); printf("\t\tdstd = (%s) & 0xFFFF;\n", blitops[blttbl[i]].s); printf("\t\ttotald |= dstd;\n"); printf("\t\tif (ptd) { dstp = ptd; ptd += 2; }\n"); printf("\t}\n"); if (a_is_on) printf("\tif (pta) pta += b->bltamod;\n"); if (b_is_on) printf("\tif (ptb) ptb += b->bltbmod;\n"); if (c_is_on) printf("\tif (ptc) ptc += b->bltcmod;\n"); printf("\tif (ptd) ptd += b->bltdmod;\n"); printf("}\n"); if (b_is_on) printf("b->bltbhold = srcb;\n"); if (c_is_on) printf("b->bltcdat = srcc;\n"); printf("\t\tif (dstp) chipmem_wput_indirect (dstp, dstd);\n"); #if 0 printf("}\n"); #endif printf("if (totald != 0) b->blitzero = 0;\n"); printf("}\n"); printf("void blitdofast_desc_%x (uaecptr pta, uaecptr ptb, uaecptr ptc, uaecptr ptd, struct bltinfo *b)\n",blttbl[i]); printf("{\n"); printf("uae_u32 totald = 0;\n"); printf("int i,j;\n"); #if 0 printf("if (currprefs.blits_32bit_enabled && b->hblitsize > 1"); if (a_is_on) printf(" && !b->blitashift && b->bltafwm==0xffff && b->bltalwm==0xffff"); if (b_is_on) printf(" && !b->blitbshift"); printf(") {\n"); if (a_is_on) printf("uae_u32 srca = ((uae_u32)b->bltadat << 16) | b->bltadat;\n"); if (b_is_on) printf("uae_u32 srcb = ((uae_u32)b->bltbdat << 16) | b->bltbdat;\n"); if (c_is_on) printf("uae_u32 srcc = ((uae_u32)b->bltcdat << 16) | b->bltcdat;\n"); printf("uae_u32 dest;\n"); printf("int count=b->hblitsize/2, oddword=b->hblitsize&1;\n"); printf("for (j=0;jvblitsize;j++) {\n"); printf("\tfor(i=0;ibltamod;\n"); if (b_is_on) printf("\tif (ptb) ptb -= b->bltbmod;\n"); if (c_is_on) printf("\tif (ptc) ptc -= b->bltcmod;\n"); printf("\tif (ptd) ptd-=b->bltdmod;\n"); printf("}\n"); if (a_is_on) printf("if (pta) b->bltadat = (*(pta + b->bltamod + 2) << 8) | *(pta + b->bltamod + 1);\n"); /* Maybe not necessary, but I don't want problems */ if (b_is_on) printf("if (ptb) b->bltbdat = (*(ptb + b->bltbmod + 2) << 8) | *(ptb + b->bltbmod + 1);\n"); if (c_is_on) printf("if (ptc) b->bltcdat = (*(ptc + b->bltcmod + 2) << 8) | *(ptc + b->bltcmod + 1);\n"); printf("if (ptd) b->bltddat = (*(ptd + b->bltdmod + 2) << 8) | *(ptd + b->bltdmod + 1);\n"); printf("} else {\n"); #endif if (a_is_on) printf("uae_u32 preva = 0;\n"); if (b_is_on) printf("uae_u32 prevb = 0, srcb = b->bltbhold;\n"); if (c_is_on) printf("uae_u32 srcc = b->bltcdat;\n"); printf("uae_u32 dstd = 0;\n"); printf("uaecptr dstp = 0;\n"); #ifdef FSUAE printf("for (j = b->vblitsize; j--; ) {\n"); if (a_is_on) { printf("\tfor (i = 0; i < b->hblitsize; i++) {\n\t\tuae_u32 bltadat, srca;\n"); } else { printf("\tfor (i = b->hblitsize; i--; ) {\n\t\tuae_u32 bltadat, srca;\n"); } #else printf("for (j = 0; j < b->vblitsize; j++) {\n"); printf("\tfor (i = 0; i < b->hblitsize; i++) {\n\t\tuae_u32 bltadat, srca;\n"); #endif if (c_is_on) printf("\t\tif (ptc) { srcc = chipmem_wget_indirect (ptc); ptc -= 2; }\n"); if (b_is_on) printf("\t\tif (ptb) {\n\t\t\tuae_u32 bltbdat = blt_info.bltbdat = chipmem_wget_indirect (ptb); ptb -= 2;\n"); if (b_is_on) printf("\t\t\tsrcb = ((bltbdat << 16) | prevb) >> b->blitdownbshift;\n"); if (b_is_on) printf("\t\t\tprevb = bltbdat;\n\t\t}\n"); if (a_is_on) printf("\t\tif (pta) { bltadat = blt_info.bltadat = chipmem_wget_indirect (pta); pta -= 2; } else { bltadat = blt_info.bltadat; }\n"); if (a_is_on) printf("\t\tbltadat &= blit_masktable[i];\n"); if (a_is_on) printf("\t\tsrca = (((uae_u32)bltadat << 16) | preva) >> b->blitdownashift;\n"); if (a_is_on) printf("\t\tpreva = bltadat;\n"); printf("\t\tif (dstp) chipmem_wput_indirect (dstp, dstd);\n"); printf("\t\tdstd = (%s) & 0xFFFF;\n", blitops[blttbl[i]].s); printf("\t\ttotald |= dstd;\n"); printf("\t\tif (ptd) { dstp = ptd; ptd -= 2; }\n"); printf("\t}\n"); if (a_is_on) printf("\tif (pta) pta -= b->bltamod;\n"); if (b_is_on) printf("\tif (ptb) ptb -= b->bltbmod;\n"); if (c_is_on) printf("\tif (ptc) ptc -= b->bltcmod;\n"); printf("\tif (ptd) ptd -= b->bltdmod;\n"); printf("}\n"); if (b_is_on) printf("b->bltbhold = srcb;\n"); if (c_is_on) printf("b->bltcdat = srcc;\n"); printf("\t\tif (dstp) chipmem_wput_indirect (dstp, dstd);\n"); #if 0 printf("}\n"); #endif printf("if (totald != 0) b->blitzero = 0;\n"); printf("}\n"); } } static void generate_table(void) { unsigned int index = 0; unsigned int i; printf("#include \"sysconfig.h\"\n"); printf("#include \"sysdeps.h\"\n"); printf("#include \"options.h\"\n"); printf("#include \"custom.h\"\n"); printf("#include \"uae/memory.h\"\n"); printf("#include \"blitter.h\"\n"); printf("#include \"blitfunc.h\"\n\n"); printf("blitter_func * const blitfunc_dofast[256] = {\n"); for (i = 0; i < 256; i++) { if (index < sizeof(blttbl) && i == blttbl[index]) { printf("blitdofast_%x",i); index++; } else printf("0"); if (i < 255) printf(", "); if ((i & 7) == 7) printf("\n"); } printf("};\n\n"); index = 0; printf("blitter_func * const blitfunc_dofast_desc[256] = {\n"); for (i = 0; i < 256; i++) { if (index < sizeof(blttbl) && i == blttbl[index]) { printf("blitdofast_desc_%x",i); index++; } else printf("0"); if (i < 255) printf(", "); if ((i & 7) == 7) printf("\n"); } printf("};\n"); } static void generate_header(void) { unsigned int i; for (i = 0; i < sizeof(blttbl); i++) { printf("extern blitter_func blitdofast_%x;\n",blttbl[i]); printf("extern blitter_func blitdofast_desc_%x;\n",blttbl[i]); } } int main(int argc, char **argv) { char mode = 'i'; if (argc == 2) mode = *argv[1]; switch (mode) { case 'i': generate_include(); break; case 'f': generate_func(); break; case 't': generate_table(); break; case 'h': generate_header(); break; default: abort(); } return 0; } fs-uae-2.2.3+dfsg/src/native2amiga.cpp0000644000175000017500000000553412162366654017725 0ustar glaubitzglaubitz/* * UAE - The Un*x Amiga Emulator * * Call Amiga Exec functions outside the main UAE thread. * * Copyright 1999 Patrick Ohly * * Uses the EXTER interrupt that is setup in filesys.c * and needs thread support. */ #include "sysconfig.h" #include "sysdeps.h" #include "threaddep/thread.h" #include "options.h" #include "uae/memory.h" #include "custom.h" #include "newcpu.h" #include "autoconf.h" #include "traps.h" #include "native2amiga.h" smp_comm_pipe native2amiga_pending; static uae_sem_t n2asem; /* * to be called when setting up the hardware */ void native2amiga_install (void) { init_comm_pipe (&native2amiga_pending, 100, 2); uae_sem_init (&n2asem, 0, 1); } void native2amiga_reset (void) { smp_comm_pipe *p = &native2amiga_pending; p->rdp = p->wrp = 0; p->reader_waiting = 0; p->writer_waiting = 0; }; /* * to be called when the Amiga boots, i.e. by filesys_diagentry() */ void native2amiga_startup (void) { } int native2amiga_isfree (void) { return comm_pipe_has_data (&native2amiga_pending) == 0; } #ifdef SUPPORT_THREADS void uae_Cause (uaecptr interrupt) { uae_sem_wait (&n2asem); write_comm_pipe_int (&native2amiga_pending, 3, 0); write_comm_pipe_u32 (&native2amiga_pending, interrupt, 1); do_uae_int_requested (); uae_sem_post (&n2asem); } void uae_ReplyMsg (uaecptr msg) { uae_sem_wait (&n2asem); write_comm_pipe_int (&native2amiga_pending, 2, 0); write_comm_pipe_u32 (&native2amiga_pending, msg, 1); do_uae_int_requested (); uae_sem_post (&n2asem); } void uae_PutMsg (uaecptr port, uaecptr msg) { uae_sem_wait (&n2asem); write_comm_pipe_int (&native2amiga_pending, 1, 0); write_comm_pipe_u32 (&native2amiga_pending, port, 0); write_comm_pipe_u32 (&native2amiga_pending, msg, 1); do_uae_int_requested (); uae_sem_post (&n2asem); } void uae_Signal (uaecptr task, uae_u32 mask) { uae_sem_wait (&n2asem); write_comm_pipe_int (&native2amiga_pending, 0, 0); write_comm_pipe_u32 (&native2amiga_pending, task, 0); write_comm_pipe_int (&native2amiga_pending, mask, 1); do_uae_int_requested (); uae_sem_post (&n2asem); } void uae_NotificationHack (uaecptr port, uaecptr nr) { uae_sem_wait (&n2asem); write_comm_pipe_int (&native2amiga_pending, 4, 0); write_comm_pipe_int (&native2amiga_pending, port, 0); write_comm_pipe_int (&native2amiga_pending, nr, 1); do_uae_int_requested (); uae_sem_post (&n2asem); } #endif void uae_NewList (uaecptr list) { x_put_long (list, list + 4); x_put_long (list + 4, 0); x_put_long (list + 8, list); } uaecptr uae_AllocMem (TrapContext *context, uae_u32 size, uae_u32 flags, uaecptr sysbase) { m68k_dreg (regs, 0) = size; m68k_dreg (regs, 1) = flags; return CallLib (context, sysbase, -198); /* AllocMem */ } void uae_FreeMem (TrapContext *context, uaecptr memory, uae_u32 size, uaecptr sysbase) { m68k_dreg (regs, 0) = size; m68k_areg (regs, 1) = memory; CallLib (context, sysbase, -0xD2); /* FreeMem */ } fs-uae-2.2.3+dfsg/src/gayle.cpp0000644000175000017500000017411712162366655016464 0ustar glaubitzglaubitz/* * UAE - The Un*x Amiga Emulator * * Gayle (and motherboard resources) memory bank * * (c) 2006 - 2011 Toni Wilen */ #define GAYLE_LOG 0 #define IDE_LOG 0 #define MBRES_LOG 0 #define PCMCIA_LOG 0 #include "sysconfig.h" #include "sysdeps.h" #include "options.h" #include "uae/memory.h" #include "custom.h" #include "newcpu.h" #include "filesys.h" #include "gayle.h" #include "savestate.h" #include "uae.h" #include "gui.h" #include "a2091.h" #include "ncr_scsi.h" #define PCMCIA_SRAM 1 #define PCMCIA_IDE 2 /* 600000 to 9FFFFF 4 MB Credit Card memory if CC present A00000 to A1FFFF 128 KB Credit Card Attributes A20000 to A3FFFF 128 KB Credit Card I/O A40000 to A5FFFF 128 KB Credit Card Bits A60000 to A7FFFF 128 KB PC I/O D80000 to D8FFFF 64 KB SPARE chip select D90000 to D9FFFF 64 KB ARCNET chip select DA0000 to DA3FFF 16 KB IDE drive DA4000 to DA4FFF 16 KB IDE reserved DA8000 to DAFFFF 32 KB Credit Card and IDE configregisters DB0000 to DBFFFF 64 KB Not used (reserved for external IDE) * DC0000 to DCFFFF 64 KB Real Time Clock (RTC) DD0000 to DDFFFF 64 KB A3000 DMA controller DD0000 to DD1FFF A4000 DMAC DD2000 to DDFFFF A4000 IDE DE0000 to DEFFFF 64 KB Motherboard resources */ #define NCR_OFFSET 0x40 /* Gayle definitions from Linux drivers and preliminary Gayle datasheet */ /* PCMCIA stuff */ #define GAYLE_RAM 0x600000 #define GAYLE_RAMSIZE 0x400000 #define GAYLE_ATTRIBUTE 0xa00000 #define GAYLE_ATTRIBUTESIZE 0x020000 #define GAYLE_IO 0xa20000 /* 16bit and even 8bit registers */ #define GAYLE_IOSIZE 0x010000 #define GAYLE_IO_8BITODD 0xa30000 /* odd 8bit registers */ #define GAYLE_ADDRESS 0xda8000 /* gayle main registers base address */ #define GAYLE_RESET 0xa40000 /* write 0x00 to start reset, read 1 byte to stop reset */ /* IDE stuff */ /* Bases of the IDE interfaces */ #define GAYLE_BASE_4000 0xdd2020 /* A4000/A4000T */ #define GAYLE_BASE_1200 0xda0000 /* A1200/A600 and E-Matrix 530 */ /* IDE drive registers */ #define IDE_DATA 0x00 #define IDE_ERROR 0x01 /* see err-bits */ #define IDE_NSECTOR 0x02 /* nr of sectors to read/write */ #define IDE_SECTOR 0x03 /* starting sector */ #define IDE_LCYL 0x04 /* starting cylinder */ #define IDE_HCYL 0x05 /* high byte of starting cyl */ #define IDE_SELECT 0x06 /* 101dhhhh , d=drive, hhhh=head */ #define IDE_STATUS 0x07 /* see status-bits */ #define IDE_DEVCON 0x0406 #define IDE_DRVADDR 0x0407 /* STATUS bits */ #define IDE_STATUS_ERR 0x01 #define IDE_STATUS_IDX 0x02 #define IDE_STATUS_DRQ 0x08 #define IDE_STATUS_DSC 0x10 #define IDE_STATUS_DRDY 0x40 #define IDE_STATUS_BSY 0x80 /* ERROR bits */ #define IDE_ERR_UNC 0x40 #define IDE_ERR_MC 0x20 #define IDE_ERR_IDNF 0x10 #define IDE_ERR_MCR 0x08 #define IDE_ERR_ABRT 0x04 #define IDE_ERR_NM 0x02 /* * These are at different offsets from the base */ #define GAYLE_IRQ_4000 0x3020 /* MSB = 1, Harddisk is source of interrupt */ #define GAYLE_CS_1200 0x8000 #define GAYLE_IRQ_1200 0x9000 #define GAYLE_INT_1200 0xA000 #define GAYLE_CFG_1200 0xB000 /* DA8000 */ #define GAYLE_CS_IDE 0x80 /* IDE int status */ #define GAYLE_CS_CCDET 0x40 /* credit card detect */ #define GAYLE_CS_BVD1 0x20 /* battery voltage detect 1 */ #define GAYLE_CS_SC 0x20 /* credit card status change */ #define GAYLE_CS_BVD2 0x10 /* battery voltage detect 2 */ #define GAYLE_CS_DA 0x10 /* digital audio */ #define GAYLE_CS_WR 0x08 /* write enable (1 == enabled) */ #define GAYLE_CS_BSY 0x04 /* credit card busy */ #define GAYLE_CS_IRQ 0x04 /* interrupt request */ #define GAYLE_CS_DAEN 0x02 /* enable digital audio */ #define GAYLE_CS_DIS 0x01 /* disable PCMCIA slot */ /* DA9000 */ #define GAYLE_IRQ_IDE 0x80 #define GAYLE_IRQ_CCDET 0x40 /* credit card detect */ #define GAYLE_IRQ_BVD1 0x20 /* battery voltage detect 1 */ #define GAYLE_IRQ_SC 0x20 /* credit card status change */ #define GAYLE_IRQ_BVD2 0x10 /* battery voltage detect 2 */ #define GAYLE_IRQ_DA 0x10 /* digital audio */ #define GAYLE_IRQ_WR 0x08 /* write enable (1 == enabled) */ #define GAYLE_IRQ_BSY 0x04 /* credit card busy */ #define GAYLE_IRQ_IRQ 0x04 /* interrupt request */ #define GAYLE_IRQ_RESET 0x02 /* reset machine after CCDET change */ #define GAYLE_IRQ_BERR 0x01 /* generate bus error after CCDET change */ /* DAA000 */ #define GAYLE_INT_IDE 0x80 /* IDE interrupt enable */ #define GAYLE_INT_CCDET 0x40 /* credit card detect change enable */ #define GAYLE_INT_BVD1 0x20 /* battery voltage detect 1 change enable */ #define GAYLE_INT_SC 0x20 /* credit card status change enable */ #define GAYLE_INT_BVD2 0x10 /* battery voltage detect 2 change enable */ #define GAYLE_INT_DA 0x10 /* digital audio change enable */ #define GAYLE_INT_WR 0x08 /* write enable change enabled */ #define GAYLE_INT_BSY 0x04 /* credit card busy */ #define GAYLE_INT_IRQ 0x04 /* credit card interrupt request */ #define GAYLE_INT_BVD_LEV 0x02 /* BVD int level, 0=lev2,1=lev6 */ #define GAYLE_INT_BSY_LEV 0x01 /* BSY int level, 0=lev2,1=lev6 */ /* 0xDAB000 GAYLE_CONFIG */ #define GAYLE_CFG_0V 0x00 #define GAYLE_CFG_5V 0x01 #define GAYLE_CFG_12V 0x02 #define GAYLE_CFG_100NS 0x08 #define GAYLE_CFG_150NS 0x04 #define GAYLE_CFG_250NS 0x00 #define GAYLE_CFG_720NS 0x0c #define IDE_GAYLE 0 #define IDE_ADIDE 1 #define MAX_IDE_MULTIPLE_SECTORS 64 #define SECBUF_SIZE (512 * (MAX_IDE_MULTIPLE_SECTORS * 2)) struct ide_registers { uae_u8 ide_select, ide_nsector, ide_sector, ide_lcyl, ide_hcyl, ide_devcon, ide_error, ide_feat; uae_u8 ide_nsector2, ide_sector2, ide_lcyl2, ide_hcyl2, ide_feat2; uae_u8 ide_drv; }; struct ide_hdf { struct hd_hardfiledata hdhfd; struct ide_registers *regs; uae_u8 secbuf[SECBUF_SIZE]; int data_offset; int data_size; int data_multi; int lba48; uae_u8 multiple_mode; uae_u8 status; int irq_delay; int irq; int num; int type; int blocksize; int maxtransferstate; }; #define TOTAL_IDE 3 #define GAYLE_IDE_ID 0 #define PCMCIA_IDE_ID 2 static struct ide_hdf *idedrive[TOTAL_IDE * 2]; static struct ide_registers ideregs[TOTAL_IDE]; struct hd_hardfiledata *pcmcia_sram; static int pcmcia_card; static int pcmcia_readonly; static int pcmcia_type; static uae_u8 pcmcia_configuration[20]; static int pcmcia_configured; static int gayle_id_cnt; static uae_u8 gayle_irq, gayle_int, gayle_cs, gayle_cs_mask, gayle_cfg; static int ide2, ide_splitter; static struct ide_hdf *ide; STATIC_INLINE void pw (int offset, uae_u16 w) { ide->secbuf[offset * 2 + 0] = (uae_u8)w; ide->secbuf[offset * 2 + 1] = w >> 8; } static void ps (int offset, const TCHAR *src, int max) { int i, len; char *s; offset *= 2; s = ua (src); len = strlen (s); for (i = 0; i < max; i++) { char c = ' '; if (i < len) c = s[i]; ide->secbuf[offset ^ 1] = c; offset++; } xfree (s); } static void pcmcia_reset (void) { memset (pcmcia_configuration, 0, sizeof pcmcia_configuration); pcmcia_configured = -1; if (PCMCIA_LOG > 0) write_log (_T("PCMCIA reset\n")); } static uae_u8 checkpcmciaideirq (void) { if (!idedrive || pcmcia_type != PCMCIA_IDE || pcmcia_configured < 0) return 0; if (ideregs[PCMCIA_IDE_ID].ide_devcon & 2) return 0; if (idedrive[PCMCIA_IDE_ID * 2]->irq) return GAYLE_IRQ_BSY; return 0; } static uae_u8 checkgayleideirq (void) { int i; if (!idedrive) return 0; for (i = 0; i < 2; i++) { if (ideregs[i].ide_devcon & 2) continue; if (idedrive[i]->irq || idedrive[i + 2]->irq) { /* IDE killer feature. Do not eat interrupt to make booting faster. */ if (idedrive[i]->irq && idedrive[i]->hdhfd.size == 0) idedrive[i]->irq = 0; return GAYLE_IRQ_IDE; } } return 0; } void rethink_gayle (void) { int lev2 = 0; int lev6 = 0; uae_u8 mask; if (currprefs.cs_ide == IDE_A4000) { gayle_irq |= checkgayleideirq (); if ((gayle_irq & GAYLE_IRQ_IDE) && !(intreq & 0x0008)) INTREQ_0 (0x8000 | 0x0008); return; } if (currprefs.cs_ide != IDE_A600A1200 && !currprefs.cs_pcmcia) return; gayle_irq |= checkgayleideirq (); gayle_irq |= checkpcmciaideirq (); mask = gayle_int & gayle_irq; if (mask & (GAYLE_IRQ_IDE | GAYLE_IRQ_WR)) lev2 = 1; if (mask & GAYLE_IRQ_CCDET) lev6 = 1; if (mask & (GAYLE_IRQ_BVD1 | GAYLE_IRQ_BVD2)) { if (gayle_int & GAYLE_INT_BVD_LEV) lev6 = 1; else lev2 = 1; } if (mask & GAYLE_IRQ_BSY) { if (gayle_int & GAYLE_INT_BSY_LEV) lev6 = 1; else lev2 = 1; } if (lev2 && !(intreq & 0x0008)) INTREQ_0 (0x8000 | 0x0008); if (lev6 && !(intreq & 0x2000)) INTREQ_0 (0x8000 | 0x2000); } static void gayle_cs_change (uae_u8 mask, int onoff) { int changed = 0; if ((gayle_cs & mask) && !onoff) { gayle_cs &= ~mask; changed = 1; } else if (!(gayle_cs & mask) && onoff) { gayle_cs |= mask; changed = 1; } if (changed) { gayle_irq |= mask; rethink_gayle (); if ((mask & GAYLE_CS_CCDET) && (gayle_irq & (GAYLE_IRQ_RESET | GAYLE_IRQ_BERR)) != (GAYLE_IRQ_RESET | GAYLE_IRQ_BERR)) { if (gayle_irq & GAYLE_IRQ_RESET) uae_reset (0, 0); if (gayle_irq & GAYLE_IRQ_BERR) Exception (2); } } } static void card_trigger (int insert) { if (insert) { if (pcmcia_card) { gayle_cs_change (GAYLE_CS_CCDET, 1); gayle_cfg = GAYLE_CFG_100NS; if (!pcmcia_readonly) gayle_cs_change (GAYLE_CS_WR, 1); } } else { gayle_cfg = 0; gayle_cs_change (GAYLE_CS_CCDET, 0); gayle_cs_change (GAYLE_CS_BVD2, 0); gayle_cs_change (GAYLE_CS_BVD1, 0); gayle_cs_change (GAYLE_CS_WR, 0); gayle_cs_change (GAYLE_CS_BSY, 0); } rethink_gayle (); } static void write_gayle_cfg (uae_u8 val) { gayle_cfg = val; } static uae_u8 read_gayle_cfg (void) { return gayle_cfg & 0x0f; } static void write_gayle_irq (uae_u8 val) { gayle_irq = (gayle_irq & val) | (val & (GAYLE_IRQ_RESET | GAYLE_IRQ_BERR)); if ((gayle_irq & (GAYLE_IRQ_RESET | GAYLE_IRQ_BERR)) == (GAYLE_IRQ_RESET | GAYLE_IRQ_BERR)) pcmcia_reset (); } static uae_u8 read_gayle_irq (void) { return gayle_irq; } static void write_gayle_int (uae_u8 val) { gayle_int = val; } static uae_u8 read_gayle_int (void) { return gayle_int; } static void write_gayle_cs (uae_u8 val) { int ov = gayle_cs; gayle_cs_mask = val & ~3; gayle_cs &= ~3; gayle_cs |= val & 3; if ((ov & 1) != (gayle_cs & 1)) { gayle_map_pcmcia (); /* PCMCIA disable -> enable */ card_trigger (!(gayle_cs & GAYLE_CS_DIS) ? 1 : 0); if (PCMCIA_LOG) write_log (_T("PCMCIA slot: %s PC=%08X\n"), !(gayle_cs & 1) ? _T("enabled") : _T("disabled"), M68K_GETPC); } } static uae_u8 read_gayle_cs (void) { uae_u8 v; v = gayle_cs_mask | gayle_cs; v |= checkgayleideirq (); v |= checkpcmciaideirq (); return v; } static void ide_interrupt (void) { if (ide->regs->ide_devcon & 2) return; //ide->status |= IDE_STATUS_BSY; ide->irq_delay = 2; } static void ide_interrupt_do (struct ide_hdf *ide) { ide->status &= ~IDE_STATUS_BSY; ide->irq_delay = 0; ide->irq = 1; rethink_gayle (); } static void ide_fail_err (uae_u8 err) { ide->regs->ide_error |= err; if (ide->regs->ide_drv == 1 && idedrive[ide2 + 1]->hdhfd.size == 0) idedrive[ide2]->status |= IDE_STATUS_ERR; ide->status |= IDE_STATUS_ERR; ide_interrupt (); } static void ide_fail (void) { ide_fail_err (IDE_ERR_ABRT); } static void ide_data_ready (void) { memset (ide->secbuf, 0, ide->blocksize); ide->data_offset = 0; ide->status |= IDE_STATUS_DRQ; ide->data_size = ide->blocksize; ide->data_multi = 1; ide_interrupt (); } static void ide_recalibrate (void) { write_log (_T("IDE%d recalibrate\n"), ide->num); ide->regs->ide_sector = 0; ide->regs->ide_lcyl = ide->regs->ide_hcyl = 0; ide_interrupt (); } static void ide_identify_drive (void) { uae_u64 totalsecs; int v; uae_u8 *buf = ide->secbuf; TCHAR tmp[100]; if (ide->hdhfd.size == 0) { ide_fail (); return; } memset (buf, 0, ide->blocksize); if (IDE_LOG > 0) write_log (_T("IDE%d identify drive\n"), ide->num); ide_data_ready (); ide->data_size *= -1; pw (0, 1 << 6); pw (1, ide->hdhfd.cyls_def); pw (2, 0xc837); pw (3, ide->hdhfd.heads_def); pw (4, ide->blocksize * ide->hdhfd.secspertrack_def); pw (5, ide->blocksize); pw (6, ide->hdhfd.secspertrack_def); ps (10, _T("68000"), 20); /* serial */ pw (20, 3); pw (21, ide->blocksize); pw (22, 4); ps (23, _T("0.4"), 8); /* firmware revision */ _stprintf (tmp, _T("UAE-IDE %s"), ide->hdhfd.hfd.product_id); ps (27, tmp, 40); /* model */ pw (47, MAX_IDE_MULTIPLE_SECTORS >> (ide->blocksize / 512 - 1)); /* max sectors in multiple mode */ pw (48, 1); pw (49, (1 << 9) | (1 << 8)); /* LBA and DMA supported */ pw (51, 0x200); /* PIO cycles */ pw (52, 0x200); /* DMA cycles */ pw (53, 1 | 2 | 4); pw (54, ide->hdhfd.cyls); pw (55, ide->hdhfd.heads); pw (56, ide->hdhfd.secspertrack); totalsecs = ide->hdhfd.cyls * ide->hdhfd.heads * ide->hdhfd.secspertrack; pw (57, (uae_u16)totalsecs); pw (58, (uae_u16)(totalsecs >> 16)); v = idedrive[ide->regs->ide_drv]->multiple_mode; pw (59, (v > 0 ? 0x100 : 0) | v); totalsecs = ide->hdhfd.size / ide->blocksize; if (totalsecs > 0x0fffffff) totalsecs = 0x0fffffff; pw (60, (uae_u16)totalsecs); pw (61, (uae_u16)(totalsecs >> 16)); pw (62, 0x0f); pw (63, 0x0f); pw (64, 0x03); /* PIO3 and PIO4 */ pw (65, 120); /* MDMA2 supported */ pw (66, 120); pw (67, 120); pw (68, 120); pw (80, (1 << 1) | (1 << 2) | (1 << 3) | (1 << 4) | (1 << 5) | (1 << 6)); /* ATA-1 to ATA-6 */ pw (81, 0x1c); /* ATA revision */ pw (82, (1 << 14)); /* NOP command supported */ pw (83, (1 << 14) | (1 << 13) | (1 << 12) | (ide->lba48 ? (1 << 10) : 0)); /* cache flushes, LBA 48 supported */ pw (84, 1 << 14); pw (85, 1 << 14); pw (86, (1 << 14) | (1 << 13) | (1 << 12) | (ide->lba48 ? (1 << 10) : 0)); /* cache flushes, LBA 48 enabled */ pw (87, 1 << 14); pw (88, (1 << 5) | (1 << 4) | (1 << 3) | (1 << 2) | (1 << 1) | (1 << 0)); /* UDMA modes */ pw (93, (1 << 14) | (1 << 13) | (1 << 0)); if (ide->lba48) { totalsecs = ide->hdhfd.size / ide->blocksize; pw (100, (uae_u16)(totalsecs >> 0)); pw (101, (uae_u16)(totalsecs >> 16)); pw (102, (uae_u16)(totalsecs >> 32)); pw (103, (uae_u16)(totalsecs >> 48)); } } static void ide_execute_drive_diagnostics (bool irq) { ide->regs->ide_error = 1; ide->regs->ide_sector = ide->regs->ide_nsector = 1; ide->regs->ide_select = 0; ide->regs->ide_lcyl = ide->regs->ide_hcyl = 0; if (irq) ide_interrupt (); else ide->status = ~IDE_STATUS_BSY; } static void ide_initialize_drive_parameters (void) { if (ide->hdhfd.size) { ide->hdhfd.secspertrack = ide->regs->ide_nsector == 0 ? 256 : ide->regs->ide_nsector; ide->hdhfd.heads = (ide->regs->ide_select & 15) + 1; ide->hdhfd.cyls = (ide->hdhfd.size / ide->blocksize) / (ide->hdhfd.secspertrack * ide->hdhfd.heads); if (ide->hdhfd.heads * ide->hdhfd.cyls * ide->hdhfd.secspertrack > 16515072 || ide->lba48) { ide->hdhfd.cyls = ide->hdhfd.cyls_def; ide->hdhfd.heads = ide->hdhfd.heads_def; ide->hdhfd.secspertrack = ide->hdhfd.secspertrack_def; } } else { ide->regs->ide_error |= IDE_ERR_ABRT; ide->status |= IDE_STATUS_ERR; } write_log (_T("IDE%d initialize drive parameters, CYL=%d,SPT=%d,HEAD=%d\n"), ide->num, ide->hdhfd.cyls, ide->hdhfd.secspertrack, ide->hdhfd.heads); ide_interrupt (); } static void ide_set_multiple_mode (void) { write_log (_T("IDE%d drive multiple mode = %d\n"), ide->num, ide->regs->ide_nsector); ide->multiple_mode = ide->regs->ide_nsector; ide_interrupt (); } static void ide_set_features (void) { int type = ide->regs->ide_nsector >> 3; int mode = ide->regs->ide_nsector & 7; write_log (_T("IDE%d set features %02X (%02X)\n"), ide->num, ide->regs->ide_feat, ide->regs->ide_nsector); ide_fail (); } static void get_lbachs (struct ide_hdf *ide, uae_u64 *lbap, unsigned int *cyl, unsigned int *head, unsigned int *sec, int lba48) { if (lba48 && (ide->regs->ide_select & 0x40)) { uae_u64 lba; lba = (ide->regs->ide_hcyl << 16) | (ide->regs->ide_lcyl << 8) | ide->regs->ide_sector; lba |= ((ide->regs->ide_hcyl2 << 16) | (ide->regs->ide_lcyl2 << 8) | ide->regs->ide_sector2) << 24; *lbap = lba; } else { if (ide->regs->ide_select & 0x40) { *lbap = ((ide->regs->ide_select & 15) << 24) | (ide->regs->ide_hcyl << 16) | (ide->regs->ide_lcyl << 8) | ide->regs->ide_sector; } else { *cyl = (ide->regs->ide_hcyl << 8) | ide->regs->ide_lcyl; *head = ide->regs->ide_select & 15; *sec = ide->regs->ide_sector; *lbap = (((*cyl) * ide->hdhfd.heads + (*head)) * ide->hdhfd.secspertrack) + (*sec) - 1; } } } static int get_nsec (int lba48) { if (lba48) return (ide->regs->ide_nsector == 0 && ide->regs->ide_nsector2 == 0) ? 65536 : (ide->regs->ide_nsector2 * 256 + ide->regs->ide_nsector); else return ide->regs->ide_nsector == 0 ? 256 : ide->regs->ide_nsector; } static int dec_nsec (int lba48, int v) { if (lba48) { uae_u16 nsec; nsec = ide->regs->ide_nsector2 * 256 + ide->regs->ide_nsector; ide->regs->ide_nsector -= v; ide->regs->ide_nsector2 = nsec >> 8; ide->regs->ide_nsector = nsec & 0xff; return (ide->regs->ide_nsector2 << 8) | ide->regs->ide_nsector; } else { ide->regs->ide_nsector -= v; return ide->regs->ide_nsector; } } static void put_lbachs (struct ide_hdf *ide, uae_u64 lba, unsigned int cyl, unsigned int head, unsigned int sec, unsigned int inc, int lba48) { if (lba48) { lba += inc; ide->regs->ide_hcyl = (lba >> 16) & 0xff; ide->regs->ide_lcyl = (lba >> 8) & 0xff; ide->regs->ide_sector = lba & 0xff; lba >>= 24; ide->regs->ide_hcyl2 = (lba >> 16) & 0xff; ide->regs->ide_lcyl2 = (lba >> 8) & 0xff; ide->regs->ide_sector2 = lba & 0xff; } else { if (ide->regs->ide_select & 0x40) { lba += inc; ide->regs->ide_select &= ~15; ide->regs->ide_select |= (lba >> 24) & 15; ide->regs->ide_hcyl = (lba >> 16) & 0xff; ide->regs->ide_lcyl = (lba >> 8) & 0xff; ide->regs->ide_sector = lba & 0xff; } else { sec += inc; while (sec >= ide->hdhfd.secspertrack) { sec -= ide->hdhfd.secspertrack; head++; if (head >= ide->hdhfd.heads) { head -= ide->hdhfd.heads; cyl++; } } ide->regs->ide_select &= ~15; ide->regs->ide_select |= head; ide->regs->ide_sector = sec; ide->regs->ide_hcyl = cyl >> 8; ide->regs->ide_lcyl = (uae_u8)cyl; } } } static void check_maxtransfer (int state) { if (state == 1) { // transfer was started if (ide->maxtransferstate < 2 && ide->regs->ide_nsector == 0) { ide->maxtransferstate = 1; } else if (ide->maxtransferstate == 2) { // second transfer was started (part of split) write_log (_T("IDE maxtransfer check detected split >256 block transfer\n")); ide->maxtransferstate = 0; } else { ide->maxtransferstate = 0; } } else if (state == 2) { // address was read if (ide->maxtransferstate == 1) ide->maxtransferstate++; else ide->maxtransferstate = 0; } } static void ide_read_sectors (int flags) { unsigned int cyl, head, sec, nsec; uae_u64 lba; int multi = flags & 1; int lba48 = flags & 2; if (multi && ide->multiple_mode == 0) { ide_fail (); return; } check_maxtransfer(1); gui_flicker_led (LED_HD, ide->num, 1); nsec = get_nsec (lba48); get_lbachs (ide, &lba, &cyl, &head, &sec, lba48); if (IDE_LOG > 0) write_log (_T("IDE%d read off=%d, sec=%d (%d) lba%d\n"), ide->num, (uae_u32)lba, nsec, ide->multiple_mode, lba48 ? 48 : 28); if (lba * ide->blocksize >= ide->hdhfd.size) { ide_data_ready (); ide_fail_err (IDE_ERR_IDNF); return; } ide->data_multi = multi ? ide->multiple_mode : 1; ide->data_offset = 0; ide->status |= IDE_STATUS_DRQ; ide->data_size = nsec * ide->blocksize; ide_interrupt (); } static void ide_write_sectors (int flags) { unsigned int cyl, head, sec, nsec; uae_u64 lba; int multi = flags & 1; int lba48 = flags & 2; if (multi && ide->multiple_mode == 0) { ide_fail (); return; } check_maxtransfer(1); gui_flicker_led (LED_HD, ide->num, 2); nsec = get_nsec (lba48); get_lbachs (ide, &lba, &cyl, &head, &sec, lba48); if (lba * ide->blocksize >= ide->hdhfd.size) { ide_data_ready (); ide_fail_err (IDE_ERR_IDNF); return; } if (IDE_LOG > 0) write_log (_T("IDE%d write off=%d, sec=%d (%d) lba%d\n"), ide->num, (uae_u32)lba, nsec, ide->multiple_mode, lba48 ? 48 : 28); if (nsec * ide->blocksize > ide->hdhfd.size - lba * ide->blocksize) nsec = (ide->hdhfd.size - lba * ide->blocksize) / ide->blocksize; if (nsec <= 0) { ide_data_ready (); ide_fail_err (IDE_ERR_IDNF); return; } ide->data_multi = multi ? ide->multiple_mode : 1; ide->data_offset = 0; ide->status |= IDE_STATUS_DRQ; ide->data_size = nsec * ide->blocksize; } static void ide_do_command (uae_u8 cmd) { int lba48 = ide->lba48; if (IDE_LOG > 1) write_log (_T("**** IDE%d command %02X\n"), ide->num, cmd); ide->status &= ~ (IDE_STATUS_DRDY | IDE_STATUS_DRQ | IDE_STATUS_ERR); ide->regs->ide_error = 0; if (cmd == 0x10) { /* recalibrate */ ide_recalibrate (); } else if (cmd == 0xec) { /* identify drive */ ide_identify_drive (); } else if (cmd == 0x90) { /* execute drive diagnostics */ ide_execute_drive_diagnostics (true); } else if (cmd == 0x91) { /* initialize drive parameters */ ide_initialize_drive_parameters (); } else if (cmd == 0xc6) { /* set multiple mode */ ide_set_multiple_mode (); } else if (cmd == 0x20 || cmd == 0x21) { /* read sectors */ ide_read_sectors (0); } else if (cmd == 0x24 && lba48) { /* read sectors ext */ ide_read_sectors (2); } else if (cmd == 0xc4) { /* read multiple */ ide_read_sectors (1); } else if (cmd == 0x29 && lba48) { /* read multiple ext */ ide_read_sectors (1|2); } else if (cmd == 0x30 || cmd == 0x31) { /* write sectors */ ide_write_sectors (0); } else if (cmd == 0x34 && lba48) { /* write sectors ext */ ide_write_sectors (2); } else if (cmd == 0xc5) { /* write multiple */ ide_write_sectors (1); } else if (cmd == 0x39 && lba48) { /* write multiple ext */ ide_write_sectors (1|2); } else if (cmd == 0x50) { /* format track (nop) */ ide_interrupt (); } else if (cmd == 0xa1) { /* ATAPI identify (IDE HD is not ATAPI) */ ide_fail (); } else if (cmd == 0xef) { /* set features */ ide_set_features (); } else if (cmd == 0x00) { /* nop */ ide_fail (); } else if (cmd == 0xe0 || cmd == 0xe1 || cmd == 0xe7 || cmd == 0xea) { /* standby now/idle/flush cache/flush cache ext */ ide_interrupt (); } else if (cmd == 0xe5) { /* check power mode */ ide->regs->ide_nsector = 0xff; ide_interrupt (); } else { ide_fail (); write_log (_T("IDE%d: unknown command %x\n"), ide->num, cmd); } } static uae_u16 ide_get_data (void) { unsigned int cyl, head, sec, nsec; uae_u64 lba; bool irq = false; bool last = false; uae_u16 v; if (IDE_LOG > 4) write_log (_T("IDE%d DATA read\n"), ide->num); if (ide->data_size == 0) { if (IDE_LOG > 0) write_log (_T("IDE%d DATA read without DRQ!?\n"), ide->num); if (ide->hdhfd.size == 0) return 0xffff; return 0; } nsec = 0; if (ide->data_offset == 0 && ide->data_size >= 0) { get_lbachs (ide, &lba, &cyl, &head, &sec, ide->lba48); nsec = get_nsec (ide->lba48); if (nsec * ide->blocksize > ide->hdhfd.size - lba * ide->blocksize) nsec = (ide->hdhfd.size - lba * ide->blocksize) / ide->blocksize; if (nsec <= 0) { ide_data_ready (); ide_fail_err (IDE_ERR_IDNF); return 0; } if (nsec > ide->data_multi) nsec = ide->data_multi; hdf_read (&ide->hdhfd.hfd, ide->secbuf, lba * ide->blocksize, nsec * ide->blocksize); if (!dec_nsec (ide->lba48, nsec)) last = true; if (IDE_LOG > 1) write_log (_T("IDE%d read, read %d bytes to buffer\n"), ide->num, nsec * ide->blocksize); } v = ide->secbuf[ide->data_offset + 1] | (ide->secbuf[ide->data_offset + 0] << 8); ide->data_offset += 2; if (ide->data_size < 0) { ide->data_size += 2; } else { ide->data_size -= 2; if (((ide->data_offset % ide->blocksize) == 0) && ((ide->data_offset / ide->blocksize) % ide->data_multi) == 0) { irq = true; ide->data_offset = 0; } } if (ide->data_size == 0) { ide->status &= ~IDE_STATUS_DRQ; if (IDE_LOG > 1) write_log (_T("IDE%d read finished\n"), ide->num); } if (nsec) { put_lbachs (ide, lba, cyl, head, sec, last ? nsec - 1 : nsec, ide->lba48); } if (irq) { ide_interrupt (); } return v; } static void ide_write_drive (bool last) { unsigned int cyl, head, sec, nsec; uae_u64 lba; nsec = ide->data_offset / ide->blocksize; if (!nsec) return; get_lbachs (ide, &lba, &cyl, &head, &sec, ide->lba48); hdf_write (&ide->hdhfd.hfd, ide->secbuf, lba * ide->blocksize, ide->data_offset); put_lbachs (ide, lba, cyl, head, sec, last ? nsec - 1 : nsec, ide->lba48); dec_nsec (ide->lba48, nsec); if (IDE_LOG > 1) write_log (_T("IDE%d write interrupt, %d bytes written\n"), ide->num, ide->data_offset); ide->data_offset = 0; } static void ide_put_data (uae_u16 v) { int irq = 0; if (IDE_LOG > 4) write_log (_T("IDE%d DATA write %04x %d/%d\n"), ide->num, v, ide->data_offset, ide->data_size); if (ide->data_size == 0) { if (IDE_LOG > 0) write_log (_T("IDE%d DATA write without DRQ!?\n"), ide->num); return; } ide->secbuf[ide->data_offset + 1] = v & 0xff; ide->secbuf[ide->data_offset + 0] = v >> 8; ide->data_offset += 2; ide->data_size -= 2; if (ide->data_size == 0) { irq = 1; ide_write_drive (true); ide->status &= ~IDE_STATUS_DRQ; if (IDE_LOG > 1) write_log (_T("IDE%d write finished\n"), ide->num); } else if (((ide->data_offset % ide->blocksize) == 0) && ((ide->data_offset / ide->blocksize) % ide->data_multi) == 0) { irq = 1; ide_write_drive (false); } if (irq) ide_interrupt (); } static int get_gayle_ide_reg (uaecptr addr) { uaecptr a = addr; addr &= 0xffff; if (addr >= 0x3020 && addr <= 0x3021 && currprefs.cs_ide == IDE_A4000) return -1; addr &= ~0x2020; addr >>= 2; ide2 = 0; if (addr & 0x400) { if (ide_splitter) { ide2 = 2; addr &= ~0x400; } } ide = idedrive[ide2]; if (ide->regs->ide_drv) ide = idedrive[ide2 + 1]; return addr; } static uae_u32 ide_read_reg (int ide_reg) { uae_u8 v = 0; bool isdrive = ide->hdhfd.size != 0; switch (ide_reg) { case IDE_DRVADDR: v = ((ide->regs->ide_drv ? 2 : 1) | ((ide->regs->ide_select & 15) << 2)) ^ 0xff; break; case IDE_DATA: break; case IDE_ERROR: v = ide->regs->ide_error; break; case IDE_NSECTOR: if (isdrive) { if (ide->regs->ide_devcon & 0x80) v = ide->regs->ide_nsector2; else v = ide->regs->ide_nsector; } break; case IDE_SECTOR: if (isdrive) { if (ide->regs->ide_devcon & 0x80) v = ide->regs->ide_sector2; else v = ide->regs->ide_sector; check_maxtransfer (2); } break; case IDE_LCYL: if (isdrive) { if (ide->regs->ide_devcon & 0x80) v = ide->regs->ide_lcyl2; else v = ide->regs->ide_lcyl; } break; case IDE_HCYL: if (isdrive) { if (ide->regs->ide_devcon & 0x80) v = ide->regs->ide_hcyl2; else v = ide->regs->ide_hcyl; } break; case IDE_SELECT: v = ide->regs->ide_select; break; case IDE_STATUS: ide->irq = 0; /* fall through */ case IDE_DEVCON: /* ALTSTATUS when reading */ if (!isdrive) { v = 0; if (ide->regs->ide_error) v |= IDE_STATUS_ERR; } else { v = ide->status; v |= IDE_STATUS_DRDY | IDE_STATUS_DSC; } break; } if (IDE_LOG > 2 && ide_reg > 0 && (1 || ide->num > 0)) write_log (_T("IDE%d GET register %d->%02X\n"), ide->num, ide_reg, (uae_u32)v & 0xff); return v; } static void ide_write_reg (int ide_reg, uae_u32 val) { ide->regs->ide_devcon &= ~0x80; /* clear HOB */ if (IDE_LOG > 2 && ide_reg > 0 && (1 || ide->num > 0)) write_log (_T("IDE%d PUT register %d=%02X\n"), ide->num, ide_reg, (uae_u32)val & 0xff); switch (ide_reg) { case IDE_DRVADDR: break; case IDE_DEVCON: if ((ide->regs->ide_devcon & 4) == 0 && (val & 4) != 0) ide_execute_drive_diagnostics (false); ide->regs->ide_devcon = val; break; case IDE_DATA: break; case IDE_ERROR: ide->regs->ide_feat2 = ide->regs->ide_feat; ide->regs->ide_feat = val; break; case IDE_NSECTOR: ide->regs->ide_nsector2 = ide->regs->ide_nsector; ide->regs->ide_nsector = val; break; case IDE_SECTOR: ide->regs->ide_sector2 = ide->regs->ide_sector; ide->regs->ide_sector = val; break; case IDE_LCYL: ide->regs->ide_lcyl2 = ide->regs->ide_lcyl; ide->regs->ide_lcyl = val; break; case IDE_HCYL: ide->regs->ide_hcyl2 = ide->regs->ide_hcyl; ide->regs->ide_hcyl = val; break; case IDE_SELECT: ide->regs->ide_select = val; ide->regs->ide_drv = (val & 0x10) ? 1 : 0; break; case IDE_STATUS: ide->irq = 0; ide_do_command (val); break; } } static uae_u32 gayle_read2 (uaecptr addr) { int ide_reg; uae_u8 v = 0; addr &= 0xffff; if ((IDE_LOG > 2 && (addr != 0x2000 && addr != 0x2001 && addr != 0x2020 && addr != 0x2021 && addr != GAYLE_IRQ_1200)) || IDE_LOG > 4) write_log (_T("IDE_READ %08X PC=%X\n"), addr, M68K_GETPC); if (currprefs.cs_ide <= 0) { if (addr == 0x201c) // AR1200 IDE detection hack return 0x7f; return 0xff; } if (addr >= GAYLE_IRQ_4000 && addr <= GAYLE_IRQ_4000 + 1 && currprefs.cs_ide == IDE_A4000) { uae_u8 v = gayle_irq; gayle_irq = 0; return v; } if (addr >= 0x4000) { if (addr == GAYLE_IRQ_1200) { if (currprefs.cs_ide == IDE_A600A1200) return read_gayle_irq (); return 0; } else if (addr == GAYLE_INT_1200) { if (currprefs.cs_ide == IDE_A600A1200) return read_gayle_int (); return 0; } return 0; } ide_reg = get_gayle_ide_reg (addr); /* Emulated "ide killer". Prevents long KS boot delay if no drives installed */ if (idedrive[0]->hdhfd.size == 0 && idedrive[2]->hdhfd.size == 0) { if (ide_reg == IDE_STATUS) return 0x7f; return 0xff; } return ide_read_reg (ide_reg); } static void gayle_write2 (uaecptr addr, uae_u32 val) { int ide_reg; if ((IDE_LOG > 2 && (addr != 0x2000 && addr != 0x2001 && addr != 0x2020 && addr != 0x2021 && addr != GAYLE_IRQ_1200)) || IDE_LOG > 4) write_log (_T("IDE_WRITE %08X=%02X PC=%X\n"), addr, (uae_u32)val & 0xff, M68K_GETPC); if (currprefs.cs_ide <= 0) return; if (currprefs.cs_ide == IDE_A600A1200) { if (addr == GAYLE_IRQ_1200) { write_gayle_irq (val); return; } if (addr == GAYLE_INT_1200) { write_gayle_int (val); return; } } if (addr >= 0x4000) return; ide_reg = get_gayle_ide_reg (addr); ide_write_reg (ide_reg, val); } static int gayle_read (uaecptr addr) { uaecptr oaddr = addr; uae_u32 v = 0; int got = 0; #ifdef JIT special_mem |= S_READ; #endif if (currprefs.cs_ide == IDE_A600A1200) { if ((addr & 0xA0000) != 0xA0000) return 0; } addr &= 0xffff; if (currprefs.cs_pcmcia) { if (currprefs.cs_ide != IDE_A600A1200) { if (addr == GAYLE_IRQ_1200) { v = read_gayle_irq (); got = 1; } else if (addr == GAYLE_INT_1200) { v = read_gayle_int (); got = 1; } } if (addr == GAYLE_CS_1200) { v = read_gayle_cs (); got = 1; if (PCMCIA_LOG) write_log (_T("PCMCIA STATUS READ %08X=%02X PC=%08X\n"), oaddr, (uae_u32)v & 0xff, M68K_GETPC); } else if (addr == GAYLE_CFG_1200) { v = read_gayle_cfg (); got = 1; if (PCMCIA_LOG) write_log (_T("PCMCIA CONFIG READ %08X=%02X PC=%08X\n"), oaddr, (uae_u32)v & 0xff, M68K_GETPC); } } if (!got) v = gayle_read2 (addr); if (GAYLE_LOG) write_log (_T("GAYLE_READ %08X=%02X PC=%08X\n"), oaddr, (uae_u32)v & 0xff, M68K_GETPC); return v; } static void gayle_write (uaecptr addr, int val) { uaecptr oaddr = addr; int got = 0; #ifdef JIT special_mem |= S_WRITE; #endif if (currprefs.cs_ide == IDE_A600A1200) { if ((addr & 0xA0000) != 0xA0000) return; } addr &= 0xffff; if (currprefs.cs_pcmcia) { if (currprefs.cs_ide != IDE_A600A1200) { if (addr == GAYLE_IRQ_1200) { write_gayle_irq (val); got = 1; } else if (addr == GAYLE_INT_1200) { write_gayle_int (val); got = 1; } } if (addr == GAYLE_CS_1200) { write_gayle_cs (val); got = 1; if (PCMCIA_LOG > 1) write_log (_T("PCMCIA STATUS WRITE %08X=%02X PC=%08X\n"), oaddr, (uae_u32)val & 0xff, M68K_GETPC); } else if (addr == GAYLE_CFG_1200) { write_gayle_cfg (val); got = 1; if (PCMCIA_LOG > 1) write_log (_T("PCMCIA CONFIG WRITE %08X=%02X PC=%08X\n"), oaddr, (uae_u32)val & 0xff, M68K_GETPC); } } if (GAYLE_LOG) write_log (_T("GAYLE_WRITE %08X=%02X PC=%08X\n"), oaddr, (uae_u32)val & 0xff, M68K_GETPC); if (!got) gayle_write2 (addr, val); } static uae_u32 REGPARAM3 gayle_lget (uaecptr) REGPARAM; static uae_u32 REGPARAM3 gayle_wget (uaecptr) REGPARAM; static uae_u32 REGPARAM3 gayle_bget (uaecptr) REGPARAM; static void REGPARAM3 gayle_lput (uaecptr, uae_u32) REGPARAM; static void REGPARAM3 gayle_wput (uaecptr, uae_u32) REGPARAM; static void REGPARAM3 gayle_bput (uaecptr, uae_u32) REGPARAM; addrbank gayle_bank = { gayle_lget, gayle_wget, gayle_bget, gayle_lput, gayle_wput, gayle_bput, default_xlate, default_check, NULL, _T("Gayle (low)"), dummy_lgeti, dummy_wgeti, ABFLAG_IO }; static int isa4000t (uaecptr addr) { if (currprefs.cs_mbdmac != 2) return 0; if ((addr & 0xffff) >= (GAYLE_BASE_4000 & 0xffff)) return 0; return 1; } static uae_u32 REGPARAM2 gayle_lget (uaecptr addr) { uae_u32 v; #ifdef JIT special_mem |= S_READ; #endif v = gayle_wget (addr) << 16; v |= gayle_wget (addr + 2); return v; } static uae_u32 REGPARAM2 gayle_wget (uaecptr addr) { int ide_reg; uae_u16 v; #ifdef JIT special_mem |= S_READ; #endif if (isa4000t (addr)) { addr -= NCR_OFFSET; return (ncr_bget2 (addr) << 8) | ncr_bget2 (addr + 1); } ide_reg = get_gayle_ide_reg (addr); if (ide_reg == IDE_DATA) return ide_get_data (); v = gayle_bget (addr) << 8; v |= gayle_bget (addr + 1); return v; } static uae_u32 REGPARAM2 gayle_bget (uaecptr addr) { #ifdef JIT special_mem |= S_READ; #endif if (isa4000t (addr)) { addr -= NCR_OFFSET; return ncr_bget2 (addr); } return gayle_read (addr); } static void REGPARAM2 gayle_lput (uaecptr addr, uae_u32 value) { #ifdef JIT special_mem |= S_WRITE; #endif gayle_wput (addr, value >> 16); gayle_wput (addr + 2, value & 0xffff); } static void REGPARAM2 gayle_wput (uaecptr addr, uae_u32 value) { int ide_reg; #ifdef JIT special_mem |= S_WRITE; #endif if (isa4000t (addr)) { addr -= NCR_OFFSET; ncr_bput2 (addr, value >> 8); ncr_bput2 (addr + 1, value); return; } ide_reg = get_gayle_ide_reg (addr); if (ide_reg == IDE_DATA) { ide_put_data (value); return; } gayle_bput (addr, value >> 8); gayle_bput (addr + 1, value & 0xff); } static void REGPARAM2 gayle_bput (uaecptr addr, uae_u32 value) { #ifdef JIT special_mem |= S_WRITE; #endif if (isa4000t (addr)) { addr -= NCR_OFFSET; ncr_bput2 (addr, value); return; } gayle_write (addr, value); } static void gayle2_write (uaecptr addr, uae_u32 v) { gayle_id_cnt = 0; } static uae_u32 gayle2_read (uaecptr addr) { uae_u8 v = 0; addr &= 0xffff; if (addr == 0x1000) { /* Gayle ID. Gayle = 0xd0. AA Gayle = 0xd1 */ if (gayle_id_cnt == 0 || gayle_id_cnt == 1 || gayle_id_cnt == 3 || ((currprefs.chipset_mask & CSMASK_AGA) && gayle_id_cnt == 7) || (currprefs.cs_cd32cd && !currprefs.cs_ide && !currprefs.cs_pcmcia && gayle_id_cnt == 2)) v = 0x80; else v = 0x00; gayle_id_cnt++; } return v; } static uae_u32 REGPARAM3 gayle2_lget (uaecptr) REGPARAM; static uae_u32 REGPARAM3 gayle2_wget (uaecptr) REGPARAM; static uae_u32 REGPARAM3 gayle2_bget (uaecptr) REGPARAM; static void REGPARAM3 gayle2_lput (uaecptr, uae_u32) REGPARAM; static void REGPARAM3 gayle2_wput (uaecptr, uae_u32) REGPARAM; static void REGPARAM3 gayle2_bput (uaecptr, uae_u32) REGPARAM; addrbank gayle2_bank = { gayle2_lget, gayle2_wget, gayle2_bget, gayle2_lput, gayle2_wput, gayle2_bput, default_xlate, default_check, NULL, _T("Gayle (high)"), dummy_lgeti, dummy_wgeti, ABFLAG_IO }; static uae_u32 REGPARAM2 gayle2_lget (uaecptr addr) { uae_u32 v; #ifdef JIT special_mem |= S_READ; #endif v = gayle2_wget (addr) << 16; v |= gayle2_wget (addr + 2); return v; } static uae_u32 REGPARAM2 gayle2_wget (uaecptr addr) { uae_u16 v; #ifdef JIT special_mem |= S_READ; #endif v = gayle2_bget (addr) << 8; v |= gayle2_bget (addr + 1); return v; } static uae_u32 REGPARAM2 gayle2_bget (uaecptr addr) { #ifdef JIT special_mem |= S_READ; #endif return gayle2_read (addr); } static void REGPARAM2 gayle2_lput (uaecptr addr, uae_u32 value) { #ifdef JIT special_mem |= S_WRITE; #endif gayle2_wput (addr, value >> 16); gayle2_wput (addr + 2, value & 0xffff); } static void REGPARAM2 gayle2_wput (uaecptr addr, uae_u32 value) { #ifdef JIT special_mem |= S_WRITE; #endif gayle2_bput (addr, value >> 8); gayle2_bput (addr + 1, value & 0xff); } static void REGPARAM2 gayle2_bput (uaecptr addr, uae_u32 value) { #ifdef JIT special_mem |= S_WRITE; #endif gayle2_write (addr, value); } static uae_u8 ramsey_config; static int gary_coldboot, gary_toenb, gary_timeout; static int garyidoffset; static void mbres_write (uaecptr addr, uae_u32 val, int size) { addr &= 0xffff; if (MBRES_LOG > 0) write_log (_T("MBRES_WRITE %08X=%08X (%d) PC=%08X S=%d\n"), addr, val, size, M68K_GETPC, regs.s); if (1 || regs.s) { /* CPU FC = supervisor only */ uae_u32 addr2 = addr & 3; uae_u32 addr64 = (addr >> 6) & 3; if (addr == 0x1002) garyidoffset = -1; if (addr64 == 0 && addr2 == 0x03) ramsey_config = val; if (addr2 == 0x02) gary_coldboot = (val & 0x80) ? 1 : 0; if (addr2 == 0x01) gary_toenb = (val & 0x80) ? 1 : 0; if (addr2 == 0x00) gary_timeout = (val & 0x80) ? 1 : 0; } } static uae_u32 mbres_read (uaecptr addr, int size) { uae_u32 v = 0; addr &= 0xffff; if (1 || regs.s) { /* CPU FC = supervisor only (only newest ramsey/gary? never implemented?) */ uae_u32 addr2 = addr & 3; uae_u32 addr64 = (addr >> 6) & 3; /* Gary ID (I don't think this exists in real chips..) */ if (addr == 0x1002 && currprefs.cs_fatgaryrev >= 0) { garyidoffset++; garyidoffset &= 7; v = (currprefs.cs_fatgaryrev << garyidoffset) & 0x80; } for (;;) { if (addr64 == 1 && addr2 == 0x03) { /* RAMSEY revision */ if (currprefs.cs_ramseyrev >= 0) v = currprefs.cs_ramseyrev; break; } if (addr64 == 0 && addr2 == 0x03) { /* RAMSEY config */ if (currprefs.cs_ramseyrev >= 0) v = ramsey_config; break; } if (addr2 == 0x03) { v = 0xff; break; } if (addr2 == 0x02) { /* coldreboot flag */ if (currprefs.cs_fatgaryrev >= 0) v = gary_coldboot ? 0x80 : 0x00; } if (addr2 == 0x01) { /* toenb flag */ if (currprefs.cs_fatgaryrev >= 0) v = gary_toenb ? 0x80 : 0x00; } if (addr2 == 0x00) { /* timeout flag */ if (currprefs.cs_fatgaryrev >= 0) v = gary_timeout ? 0x80 : 0x00; } v |= 0x7f; break; } } else { v = 0xff; } if (MBRES_LOG > 0) write_log (_T("MBRES_READ %08X=%08X (%d) PC=%08X S=%d\n"), addr, v, size, M68K_GETPC, regs.s); return v; } static uae_u32 REGPARAM3 mbres_lget (uaecptr) REGPARAM; static uae_u32 REGPARAM3 mbres_wget (uaecptr) REGPARAM; static uae_u32 REGPARAM3 mbres_bget (uaecptr) REGPARAM; static void REGPARAM3 mbres_lput (uaecptr, uae_u32) REGPARAM; static void REGPARAM3 mbres_wput (uaecptr, uae_u32) REGPARAM; static void REGPARAM3 mbres_bput (uaecptr, uae_u32) REGPARAM; static uae_u32 REGPARAM2 mbres_lget (uaecptr addr) { uae_u32 v; #ifdef JIT special_mem |= S_READ; #endif v = mbres_wget (addr) << 16; v |= mbres_wget (addr + 2); return v; } static uae_u32 REGPARAM2 mbres_wget (uaecptr addr) { #ifdef JIT special_mem |= S_READ; #endif return mbres_read (addr, 2); } static uae_u32 REGPARAM2 mbres_bget (uaecptr addr) { #ifdef JIT special_mem |= S_READ; #endif return mbres_read (addr, 1); } static void REGPARAM2 mbres_lput (uaecptr addr, uae_u32 value) { #ifdef JIT special_mem |= S_WRITE; #endif mbres_wput (addr, value >> 16); mbres_wput (addr + 2, value & 0xffff); } static void REGPARAM2 mbres_wput (uaecptr addr, uae_u32 value) { #ifdef JIT special_mem |= S_WRITE; #endif mbres_write (addr, value, 2); } static void REGPARAM2 mbres_bput (uaecptr addr, uae_u32 value) { #ifdef JIT special_mem |= S_WRITE; #endif mbres_write (addr, value, 1); } addrbank mbres_bank = { mbres_lget, mbres_wget, mbres_bget, mbres_lput, mbres_wput, mbres_bput, default_xlate, default_check, NULL, _T("Motherboard Resources"), dummy_lgeti, dummy_wgeti, ABFLAG_IO }; void gayle_hsync (void) { int i; for (i = 0; i < TOTAL_IDE * 2; i++) { struct ide_hdf *ide = idedrive[i]; if (ide->irq_delay > 0) { ide->irq_delay--; if (ide->irq_delay == 0) ide_interrupt_do (ide); } } } static void alloc_ide_mem (struct ide_hdf **ide, int max) { int i; for (i = 0; i < max; i++) { if (!ide[i]) ide[i] = xcalloc (struct ide_hdf, 1); } } static struct ide_hdf *add_ide_unit (int ch, const TCHAR *path, int blocksize, int readonly, const TCHAR *devname, int cyls, int sectors, int surfaces, int reserved, int bootpri, const TCHAR *filesys, int pcyls, int pheads, int psecs) { struct ide_hdf *ide; alloc_ide_mem (idedrive, TOTAL_IDE * 2); ide = idedrive[ch]; if (!hdf_hd_open (&ide->hdhfd, path, blocksize, readonly, devname, cyls, sectors, surfaces, reserved, bootpri, filesys, pcyls, pheads, psecs)) return NULL; ide->blocksize = blocksize; ide->lba48 = ide->hdhfd.size >= 128 * (uae_u64)0x40000000 ? 1 : 0; ide->status = 0; ide->data_offset = 0; ide->data_size = 0; gui_flicker_led (LED_HD, ch, -1); return ide; } static int pcmcia_common_size, pcmcia_attrs_size; static int pcmcia_common_mask; static uae_u8 *pcmcia_common; static uae_u8 *pcmcia_attrs; static int pcmcia_write_min, pcmcia_write_max; static int pcmcia_oddevenflip; static uae_u16 pcmcia_idedata; static int get_pcmcmia_ide_reg (uaecptr addr, int width) { int reg = -1; addr &= 0x80000 - 1; if (addr < 0x20000) return -1; /* attribute */ if (addr >= 0x40000) return -1; addr -= 0x20000; // 8BITODD if (addr >= 0x10000) { addr &= ~0x10000; addr |= 1; } ide = idedrive[PCMCIA_IDE_ID * 2]; if (ide->regs->ide_drv) ide = idedrive[PCMCIA_IDE_ID * 2 + 1]; if (pcmcia_configured == 1) { // IO mapped linear reg = addr & 15; if (reg < 8) return reg; if (reg == 8) reg = IDE_DATA; else if (reg == 9) reg = IDE_DATA; else if (reg == 13) reg = IDE_ERROR; else if (reg == 14) reg = IDE_DEVCON; else if (reg == 15) reg = IDE_DRVADDR; else reg = -1; } else if (pcmcia_configured == 2) { // primary io mapped (PC) if (addr >= 0x1f0 && addr <= 0x1f7) { reg = addr - 0x1f0; } else if (addr == 0x3f6) { reg = IDE_DEVCON; } else if (addr == 0x3f7) { reg = IDE_DRVADDR; } else { reg = -1; } } return reg; } static uae_u32 gayle_attr_read (uaecptr addr) { uae_u8 v = 0; if (PCMCIA_LOG > 1) write_log (_T("PCMCIA ATTR R: %x %x\n"), addr, M68K_GETPC); addr &= 0x80000 - 1; if (addr >= 0x40000) { if (PCMCIA_LOG > 0) write_log (_T("GAYLE: Reset disabled\n")); return v; } if (addr >= pcmcia_attrs_size) return v; if (pcmcia_type == PCMCIA_IDE) { if (addr >= 0x200 && addr < 0x200 + sizeof (pcmcia_configuration) * 2) { int offset = (addr - 0x200) / 2; return pcmcia_configuration[offset]; } if (pcmcia_configured >= 0) { int reg = get_pcmcmia_ide_reg (addr, 1); if (reg >= 0) { if (reg == 0) { if (addr >= 0x30000) { return pcmcia_idedata & 0xff; } else { pcmcia_idedata = ide_get_data (); return (pcmcia_idedata >> 8) & 0xff; } } else { return ide_read_reg (reg); } } } } v = pcmcia_attrs[addr / 2]; return v; } static void gayle_attr_write (uaecptr addr, uae_u32 v) { if (PCMCIA_LOG > 1) write_log (_T("PCMCIA ATTR W: %x=%x %x\n"), addr, v, M68K_GETPC); addr &= 0x80000 - 1; if (addr >= 0x40000) { if (PCMCIA_LOG > 0) write_log (_T("GAYLE: Reset enabled\n")); pcmcia_reset (); } else if (addr < pcmcia_attrs_size) { if (pcmcia_type == PCMCIA_IDE) { if (addr >= 0x200 && addr < 0x200 + sizeof (pcmcia_configuration) * 2) { int offset = (addr - 0x200) / 2; pcmcia_configuration[offset] = v; if (offset == 0) { if (v & 0x80) { pcmcia_reset (); } else { int index = v & 0x3f; if (index != 1 && index != 2) { write_log (_T("WARNING: Only config index 1 and 2 emulated, attempted to select %d!\n"), index); } else { pcmcia_configured = index; write_log (_T("PCMCIA IO configured = %02x\n"), v); } } } } if (pcmcia_configured >= 0) { int reg = get_pcmcmia_ide_reg (addr, 1); if (reg >= 0) { if (reg == 0) { if (addr >= 0x30000) { pcmcia_idedata = (v & 0xff) << 8; } else { pcmcia_idedata &= 0xff00; pcmcia_idedata |= v & 0xff; ide_put_data (pcmcia_idedata); } return; } ide_write_reg (reg, v); } } } } } static void initscideattr (int readonly) { uae_u8 *rp; uae_u8 *p = pcmcia_attrs; struct hardfiledata *hfd = &pcmcia_sram->hfd; /* Mostly just copied from real CF cards.. */ /* CISTPL_DEVICE */ *p++ = 0x01; *p++ = 0x04; *p++ = 0xdf; *p++ = 0x4a; *p++ = 0x01; *p++ = 0xff; /* CISTPL_DEVICEOC */ *p++ = 0x1c; *p++ = 0x04; *p++ = 0x02; *p++ = 0xd9; *p++ = 0x01; *p++ = 0xff; /* CISTPL_JEDEC */ *p++ = 0x18; *p++ = 0x02; *p++ = 0xdf; *p++ = 0x01; /* CISTPL_VERS_1 */ *p++= 0x15; rp = p++; *p++= 4; /* PCMCIA 2.1 */ *p++= 1; strcpy ((char*)p, "UAE"); p += strlen ((char*)p) + 1; strcpy ((char*)p, "68000"); p += strlen ((char*)p) + 1; strcpy ((char*)p, "Generic Emulated PCMCIA IDE"); p += strlen ((char*)p) + 1; *p++= 0xff; *rp = p - rp - 1; /* CISTPL_FUNCID */ *p++ = 0x21; *p++ = 0x02; *p++ = 0x04; *p++ = 0x01; /* CISTPL_FUNCE */ *p++ = 0x22; *p++ = 0x02; *p++ = 0x01; *p++ = 0x01; /* CISTPL_FUNCE */ *p++ = 0x22; *p++ = 0x03; *p++ = 0x02; *p++ = 0x0c; *p++ = 0x0f; /* CISTPL_CONFIG */ *p++ = 0x1a; *p++ = 0x05; *p++ = 0x01; *p++ = 0x01; *p++ = 0x00; *p++ = 0x02; *p++ = 0x0f; /* CISTPL_CFTABLEENTRY */ *p++ = 0x1b; *p++ = 0x06; *p++ = 0xc0; *p++ = 0x01; *p++ = 0x21; *p++ = 0xb5; *p++ = 0x1e; *p++ = 0x4d; /* CISTPL_NO_LINK */ *p++ = 0x14; *p++ = 0x00; /* CISTPL_END */ *p++ = 0xff; } static void initsramattr (int size, int readonly) { uae_u8 *rp; uae_u8 *p = pcmcia_attrs; int sm, su, code, units; struct hardfiledata *hfd = &pcmcia_sram->hfd; int real = hfd->flags & HFD_FLAGS_REALDRIVE; code = 0; su = 512; sm = 16384; while (size > sm) { sm *= 4; su *= 4; code++; } units = 31 - ((sm - size) / su); /* CISTPL_DEVICE */ *p++ = 0x01; *p++ = 3; *p++ = (6 /* DTYPE_SRAM */ << 4) | (readonly ? 8 : 0) | (4 /* SPEED_100NS */); *p++ = (units << 3) | code; /* memory card size in weird units */ *p++ = 0xff; /* CISTPL_DEVICEGEO */ *p++ = 0x1e; *p++ = 7; *p++ = 2; /* 16-bit PCMCIA */ *p++ = 0; *p++ = 1; *p++ = 1; *p++ = 1; *p++ = 1; *p++ = 0xff; /* CISTPL_VERS_1 */ *p++= 0x15; rp = p++; *p++= 4; /* PCMCIA 2.1 */ *p++= 1; if (real) { ua_copy ((char*)p, -1, hfd->product_id); p += strlen ((char*)p) + 1; ua_copy ((char*)p, -1, hfd->product_rev); } else { strcpy ((char*)p, "UAE"); p += strlen ((char*)p) + 1; strcpy ((char*)p, "68000"); } p += strlen ((char*)p) + 1; sprintf ((char*)p, "Generic Emulated %dKB PCMCIA SRAM Card", size >> 10); p += strlen ((char*)p) + 1; *p++= 0xff; *rp = p - rp - 1; /* CISTPL_FUNCID */ *p++ = 0x21; *p++ = 2; *p++ = 1; /* Memory Card */ *p++ = 0; /* CISTPL_MANFID */ *p++ = 0x20; *p++ = 4; *p++ = 0xff; *p++ = 0xff; *p++ = 1; *p++ = 1; /* CISTPL_END */ *p++ = 0xff; } static void checkflush (int addr) { if (pcmcia_card == 0 || pcmcia_sram == 0) return; if (addr >= 0 && pcmcia_common[0] == 0 && pcmcia_common[1] == 0 && pcmcia_common[2] == 0) return; // do not flush periodically if used as a ram expension if (addr < 0) { pcmcia_write_min = 0; pcmcia_write_max = pcmcia_common_size; } if (pcmcia_write_min >= 0) { if (abs (pcmcia_write_min - addr) >= 512 || abs (pcmcia_write_max - addr) >= 512) { int blocksize = pcmcia_sram->hfd.blocksize; int mask = ~(blocksize - 1); int start = pcmcia_write_min & mask; int end = (pcmcia_write_max + blocksize - 1) & mask; int len = end - start; if (len > 0) { hdf_write (&pcmcia_sram->hfd, pcmcia_common + start, start, len); pcmcia_write_min = -1; pcmcia_write_max = -1; } } } if (pcmcia_write_min < 0 || pcmcia_write_min > addr) pcmcia_write_min = addr; if (pcmcia_write_max < 0 || pcmcia_write_max < addr) pcmcia_write_max = addr; } static int freepcmcia (int reset) { if (pcmcia_sram) { checkflush (-1); if (reset) { hdf_hd_close (pcmcia_sram); xfree (pcmcia_sram); pcmcia_sram = NULL; } else { pcmcia_sram->hfd.drive_empty = 1; } } if (pcmcia_card) gayle_cs_change (GAYLE_CS_CCDET, 0); pcmcia_reset (); pcmcia_card = 0; xfree (pcmcia_common); xfree (pcmcia_attrs); pcmcia_common = NULL; pcmcia_attrs = NULL; pcmcia_common_size = 0; pcmcia_attrs_size = 0; gayle_cfg = 0; gayle_cs = 0; return 1; } static int initpcmcia (const TCHAR *path, int readonly, int type, int reset) { if (currprefs.cs_pcmcia == 0) return 0; freepcmcia (reset); if (!pcmcia_sram) pcmcia_sram = xcalloc (struct hd_hardfiledata, 1); if (!pcmcia_sram->hfd.handle_valid) reset = 1; if (type == PCMCIA_SRAM) { if (reset) { if (path) hdf_hd_open (pcmcia_sram, path, 512, readonly, NULL, 0, 0, 0, 0, 0, NULL, 0, 0, 0); } else { pcmcia_sram->hfd.drive_empty = 0; } if (pcmcia_sram->hfd.readonly) readonly = 1; pcmcia_common_size = 0; pcmcia_readonly = readonly; pcmcia_attrs_size = 256; pcmcia_attrs = xcalloc (uae_u8, pcmcia_attrs_size); pcmcia_type = type; if (!pcmcia_sram->hfd.drive_empty) { pcmcia_common_size = pcmcia_sram->hfd.virtsize; if (pcmcia_sram->hfd.virtsize > 4 * 1024 * 1024) { write_log (_T("PCMCIA SRAM: too large device, %d bytes\n"), pcmcia_sram->hfd.virtsize); pcmcia_common_size = 4 * 1024 * 1024; } pcmcia_common = xcalloc (uae_u8, pcmcia_common_size); write_log (_T("PCMCIA SRAM: '%s' open, size=%d\n"), path, pcmcia_common_size); hdf_read (&pcmcia_sram->hfd, pcmcia_common, 0, pcmcia_common_size); pcmcia_card = 1; initsramattr (pcmcia_common_size, readonly); if (!(gayle_cs & GAYLE_CS_DIS)) { gayle_map_pcmcia (); card_trigger (1); } } } else if (type == PCMCIA_IDE) { if (reset) { if (path) add_ide_unit (PCMCIA_IDE_ID * 2, path, 512, readonly, NULL, 0, 0, 0, 0, 0, NULL, 0, 0, 0); } pcmcia_common_size = 0; pcmcia_readonly = readonly; pcmcia_attrs_size = 0x40000; pcmcia_attrs = xcalloc (uae_u8, pcmcia_attrs_size); pcmcia_type = type; write_log (_T("PCMCIA IDE: '%s' open\n"), path); pcmcia_card = 1; initscideattr (readonly); if (!(gayle_cs & GAYLE_CS_DIS)) { gayle_map_pcmcia (); card_trigger (1); } } pcmcia_write_min = -1; pcmcia_write_max = -1; return 1; } static uae_u32 gayle_common_read (uaecptr addr) { uae_u8 v = 0; if (PCMCIA_LOG > 2) write_log (_T("PCMCIA COMMON R: %x %x\n"), addr, M68K_GETPC); if (!pcmcia_common_size) return 0; addr -= PCMCIA_COMMON_START & (PCMCIA_COMMON_SIZE - 1); addr &= PCMCIA_COMMON_SIZE - 1; if (addr < pcmcia_common_size) v = pcmcia_common[addr]; return v; } static void gayle_common_write (uaecptr addr, uae_u32 v) { if (PCMCIA_LOG > 2) write_log (_T("PCMCIA COMMON W: %x=%x %x\n"), addr, v, M68K_GETPC); if (!pcmcia_common_size) return; if (pcmcia_readonly) return; addr -= PCMCIA_COMMON_START & (PCMCIA_COMMON_SIZE - 1); addr &= PCMCIA_COMMON_SIZE - 1; if (addr < pcmcia_common_size) { if (pcmcia_common[addr] != v) { checkflush (addr); pcmcia_common[addr] = v; } } } static uae_u32 REGPARAM3 gayle_common_lget (uaecptr) REGPARAM; static uae_u32 REGPARAM3 gayle_common_wget (uaecptr) REGPARAM; static uae_u32 REGPARAM3 gayle_common_bget (uaecptr) REGPARAM; static void REGPARAM3 gayle_common_lput (uaecptr, uae_u32) REGPARAM; static void REGPARAM3 gayle_common_wput (uaecptr, uae_u32) REGPARAM; static void REGPARAM3 gayle_common_bput (uaecptr, uae_u32) REGPARAM; static int REGPARAM2 gayle_common_check (uaecptr addr, uae_u32 size) { if (!pcmcia_common_size) return 0; addr -= PCMCIA_COMMON_START & (PCMCIA_COMMON_SIZE - 1); addr &= PCMCIA_COMMON_SIZE - 1; return (addr + size) <= PCMCIA_COMMON_SIZE; } static uae_u8 *REGPARAM2 gayle_common_xlate (uaecptr addr) { addr -= PCMCIA_COMMON_START & (PCMCIA_COMMON_SIZE - 1); addr &= PCMCIA_COMMON_SIZE - 1; return pcmcia_common + addr; } static addrbank gayle_common_bank = { gayle_common_lget, gayle_common_wget, gayle_common_bget, gayle_common_lput, gayle_common_wput, gayle_common_bput, gayle_common_xlate, gayle_common_check, NULL, _T("Gayle PCMCIA Common"), gayle_common_lget, gayle_common_wget, ABFLAG_RAM | ABFLAG_SAFE }; static uae_u32 REGPARAM3 gayle_attr_lget (uaecptr) REGPARAM; static uae_u32 REGPARAM3 gayle_attr_wget (uaecptr) REGPARAM; static uae_u32 REGPARAM3 gayle_attr_bget (uaecptr) REGPARAM; static void REGPARAM3 gayle_attr_lput (uaecptr, uae_u32) REGPARAM; static void REGPARAM3 gayle_attr_wput (uaecptr, uae_u32) REGPARAM; static void REGPARAM3 gayle_attr_bput (uaecptr, uae_u32) REGPARAM; addrbank gayle_attr_bank = { gayle_attr_lget, gayle_attr_wget, gayle_attr_bget, gayle_attr_lput, gayle_attr_wput, gayle_attr_bput, default_xlate, default_check, NULL, _T("Gayle PCMCIA Attribute/Misc"), dummy_lgeti, dummy_wgeti, ABFLAG_IO | ABFLAG_SAFE }; static uae_u32 REGPARAM2 gayle_attr_lget (uaecptr addr) { uae_u32 v; #ifdef JIT special_mem |= S_READ; #endif v = gayle_attr_wget (addr) << 16; v |= gayle_attr_wget (addr + 2); return v; } static uae_u32 REGPARAM2 gayle_attr_wget (uaecptr addr) { uae_u16 v; #ifdef JIT special_mem |= S_READ; #endif if (pcmcia_type == PCMCIA_IDE && pcmcia_configured >= 0) { int reg = get_pcmcmia_ide_reg (addr, 2); if (reg == IDE_DATA) { // 16-bit register pcmcia_idedata = ide_get_data (); return pcmcia_idedata; } } v = gayle_attr_bget (addr) << 8; v |= gayle_attr_bget (addr + 1); return v; } static uae_u32 REGPARAM2 gayle_attr_bget (uaecptr addr) { #ifdef JIT special_mem |= S_READ; #endif return gayle_attr_read (addr); } static void REGPARAM2 gayle_attr_lput (uaecptr addr, uae_u32 value) { #ifdef JIT special_mem |= S_WRITE; #endif gayle_attr_wput (addr, value >> 16); gayle_attr_wput (addr + 2, value & 0xffff); } static void REGPARAM2 gayle_attr_wput (uaecptr addr, uae_u32 value) { #ifdef JIT special_mem |= S_WRITE; #endif if (pcmcia_type == PCMCIA_IDE && pcmcia_configured >= 0) { int reg = get_pcmcmia_ide_reg (addr, 2); if (reg == IDE_DATA) { // 16-bit register pcmcia_idedata = value; ide_put_data (pcmcia_idedata); return; } } gayle_attr_bput (addr, value >> 8); gayle_attr_bput (addr + 1, value & 0xff); } static void REGPARAM2 gayle_attr_bput (uaecptr addr, uae_u32 value) { #ifdef JIT special_mem |= S_WRITE; #endif gayle_attr_write (addr, value); } static uae_u32 REGPARAM2 gayle_common_lget (uaecptr addr) { uae_u32 v; #ifdef JIT special_mem |= S_READ; #endif v = gayle_common_wget (addr) << 16; v |= gayle_common_wget (addr + 2); return v; } static uae_u32 REGPARAM2 gayle_common_wget (uaecptr addr) { uae_u16 v; #ifdef JIT special_mem |= S_READ; #endif v = gayle_common_bget (addr) << 8; v |= gayle_common_bget (addr + 1); return v; } static uae_u32 REGPARAM2 gayle_common_bget (uaecptr addr) { #ifdef JIT special_mem |= S_READ; #endif return gayle_common_read (addr); } static void REGPARAM2 gayle_common_lput (uaecptr addr, uae_u32 value) { #ifdef JIT special_mem |= S_WRITE; #endif gayle_common_wput (addr, value >> 16); gayle_common_wput (addr + 2, value & 0xffff); } static void REGPARAM2 gayle_common_wput (uaecptr addr, uae_u32 value) { #ifdef JIT special_mem |= S_WRITE; #endif gayle_common_bput (addr, value >> 8); gayle_common_bput (addr + 1, value & 0xff); } static void REGPARAM2 gayle_common_bput (uaecptr addr, uae_u32 value) { #ifdef JIT special_mem |= S_WRITE; #endif gayle_common_write (addr, value); } void gayle_map_pcmcia (void) { if (currprefs.cs_pcmcia == 0) return; if (pcmcia_card == 0 || (gayle_cs & GAYLE_CS_DIS)) { map_banks (&dummy_bank, 0xa0, 8, 0); if (currprefs.chipmem_size <= 4 * 1024 * 1024 && getz2endaddr () <= 4 * 1024 * 1024) map_banks (&dummy_bank, PCMCIA_COMMON_START >> 16, PCMCIA_COMMON_SIZE >> 16, 0); } else { map_banks (&gayle_attr_bank, 0xa0, 8, 0); if (currprefs.chipmem_size <= 4 * 1024 * 1024 && getz2endaddr () <= 4 * 1024 * 1024) map_banks (&gayle_common_bank, PCMCIA_COMMON_START >> 16, PCMCIA_COMMON_SIZE >> 16, 0); } } static int rl (uae_u8 *p) { return (p[0] << 24) | (p[1] << 16) | (p[2] << 8) | (p[3]); } void gayle_free_units (void) { int i; for (i = 0; i < TOTAL_IDE * 2; i++) { struct ide_hdf *ide = idedrive[i]; if (ide) { hdf_hd_close (&ide->hdhfd); memset (ide, 0, sizeof (struct ide_hdf)); } } freepcmcia (1); } #if 0 #include "zfile.h" static void dumphdf (struct hardfiledata *hfd) { int i; uae_u8 buf[512]; int off; struct zfile *zf; zf = zfile_fopen ("c:\\d\\tmp.dmp", "wb"); off = 0; for (i = 0; i < 128; i++) { hdf_read (hfd, buf, off, 512); zfile_fwrite (buf, 1, 512, zf); off += 512; } zfile_fclose (zf); } #endif int gayle_add_ide_unit (int ch, const TCHAR *path, int blocksize, int readonly, const TCHAR *devname, int cyls, int sectors, int surfaces, int reserved, int bootpri, const TCHAR *filesys, int pcyls, int pheads, int psecs) { struct ide_hdf *ide; if (ch >= 2 * 2) return -1; ide = add_ide_unit (ch, path, blocksize, readonly, devname, cyls, sectors, surfaces, reserved, bootpri, filesys, pcyls, pheads, psecs); if (ide == NULL) return 0; write_log (_T("GAYLE_IDE%d '%s', LCHS=%d/%d/%d. PCHS=%d/%d/%d %uM. LBA48=%d\n"), ch, path, ide->hdhfd.cyls, ide->hdhfd.heads, ide->hdhfd.secspertrack, pcyls, pheads, psecs, (int)(ide->hdhfd.size / (1024 * 1024)), ide->lba48); ide->type = IDE_GAYLE; //dumphdf (&ide->hdhfd.hfd); return 1; } int gayle_add_pcmcia_sram_unit (const TCHAR *path, int readonly) { return initpcmcia (path, readonly, PCMCIA_SRAM, 1); } int gayle_add_pcmcia_ide_unit (const TCHAR *path, int readonly) { return initpcmcia (path, readonly, PCMCIA_IDE, 1); } int gayle_modify_pcmcia_sram_unit (const TCHAR *path, int readonly, int insert) { if (insert) return initpcmcia (path, readonly, PCMCIA_SRAM, pcmcia_sram ? 0 : 1); else return freepcmcia (0); } int gayle_modify_pcmcia_ide_unit (const TCHAR *path, int readonly, int insert) { if (insert) return initpcmcia (path, readonly, PCMCIA_IDE, pcmcia_sram ? 0 : 1); else return freepcmcia (0); } static void initide (void) { int i; alloc_ide_mem (idedrive, TOTAL_IDE * 2); if (isrestore ()) return; for (i = 0; i < TOTAL_IDE; i++) { ideregs[i].ide_error = 1; ideregs[i].ide_sector = ideregs[i].ide_nsector = 1; ideregs[i].ide_select = 0; ideregs[i].ide_lcyl = ideregs[i].ide_hcyl = ideregs[i].ide_devcon = ideregs[i].ide_feat = 0; idedrive[i * 2 + 0]->regs = &ideregs[i]; idedrive[i * 2 + 1]->regs = &ideregs[i]; } ide_splitter = 0; if (idedrive[2]->hdhfd.size) { ide_splitter = 1; write_log (_T("IDE splitter enabled\n")); } for (i = 0; i < TOTAL_IDE * 2; i++) idedrive[i]->num = i; gayle_irq = gayle_int = 0; } void gayle_reset (int hardreset) { static TCHAR bankname[100]; initide (); if (hardreset) { ramsey_config = 0; gary_coldboot = 1; gary_timeout = 0; gary_toenb = 0; } _tcscpy (bankname, _T("Gayle (low)")); if (currprefs.cs_ide == IDE_A4000) _tcscpy (bankname, _T("A4000 IDE")); if (currprefs.cs_mbdmac == 2) { _tcscat (bankname, _T(" + NCR53C710 SCSI")); ncr_reset (); } gayle_bank.name = bankname; } uae_u8 *restore_gayle (uae_u8 *src) { changed_prefs.cs_ide = restore_u8 (); gayle_int = restore_u8 (); gayle_irq = restore_u8 (); gayle_cs = restore_u8 (); gayle_cs_mask = restore_u8 (); gayle_cfg = restore_u8 (); ideregs[0].ide_error = 0; ideregs[1].ide_error = 0; return src; } uae_u8 *save_gayle (int *len, uae_u8 *dstptr) { uae_u8 *dstbak, *dst; if (currprefs.cs_ide <= 0) return NULL; if (dstptr) dstbak = dst = dstptr; else dstbak = dst = xmalloc (uae_u8, 1000); save_u8 (currprefs.cs_ide); save_u8 (gayle_int); save_u8 (gayle_irq); save_u8 (gayle_cs); save_u8 (gayle_cs_mask); save_u8 (gayle_cfg); *len = dst - dstbak; return dstbak; } uae_u8 *save_ide (int num, int *len, uae_u8 *dstptr) { uae_u8 *dstbak, *dst; struct ide_hdf *ide; if (num >= TOTAL_IDE * 2 || idedrive[num] == NULL) return NULL; if (currprefs.cs_ide <= 0) return NULL; ide = idedrive[num]; if (ide->hdhfd.size == 0) return NULL; if (dstptr) dstbak = dst = dstptr; else dstbak = dst = xmalloc (uae_u8, 1000); save_u32 (num); save_u64 (ide->hdhfd.size); save_string (ide->hdhfd.path); save_u32 (ide->hdhfd.hfd.blocksize); save_u32 (ide->hdhfd.hfd.readonly); save_u8 (ide->multiple_mode); save_u32 (ide->hdhfd.cyls); save_u32 (ide->hdhfd.heads); save_u32 (ide->hdhfd.secspertrack); save_u8 (ide->regs->ide_select); save_u8 (ide->regs->ide_nsector); save_u8 (ide->regs->ide_nsector2); save_u8 (ide->regs->ide_sector); save_u8 (ide->regs->ide_sector2); save_u8 (ide->regs->ide_lcyl); save_u8 (ide->regs->ide_lcyl2); save_u8 (ide->regs->ide_hcyl); save_u8 (ide->regs->ide_hcyl2); save_u8 (ide->regs->ide_feat); save_u8 (ide->regs->ide_feat2); save_u8 (ide->regs->ide_error); save_u8 (ide->regs->ide_devcon); save_u64 (ide->hdhfd.hfd.virtual_size); save_u32 (ide->hdhfd.hfd.secspertrack); save_u32 (ide->hdhfd.hfd.heads); save_u32 (ide->hdhfd.hfd.reservedblocks); save_u32 (ide->hdhfd.bootpri); *len = dst - dstbak; return dstbak; } uae_u8 *restore_ide (uae_u8 *src) { int num, readonly, blocksize; uae_u64 size; TCHAR *path; struct ide_hdf *ide; alloc_ide_mem (idedrive, TOTAL_IDE * 2); num = restore_u32 (); ide = idedrive[num]; size = restore_u64 (); path = restore_string (); blocksize = restore_u32 (); readonly = restore_u32 (); ide->multiple_mode = restore_u8 (); ide->hdhfd.cyls = restore_u32 (); ide->hdhfd.heads = restore_u32 (); ide->hdhfd.secspertrack = restore_u32 (); ide->regs->ide_select = restore_u8 (); ide->regs->ide_nsector = restore_u8 (); ide->regs->ide_sector = restore_u8 (); ide->regs->ide_lcyl = restore_u8 (); ide->regs->ide_hcyl = restore_u8 (); ide->regs->ide_feat = restore_u8 (); ide->regs->ide_nsector2 = restore_u8 (); ide->regs->ide_sector2 = restore_u8 (); ide->regs->ide_lcyl2 = restore_u8 (); ide->regs->ide_hcyl2 = restore_u8 (); ide->regs->ide_feat2 = restore_u8 (); ide->regs->ide_error = restore_u8 (); ide->regs->ide_devcon = restore_u8 (); ide->hdhfd.hfd.virtual_size = restore_u64 (); ide->hdhfd.hfd.secspertrack = restore_u32 (); ide->hdhfd.hfd.heads = restore_u32 (); ide->hdhfd.hfd.reservedblocks = restore_u32 (); ide->hdhfd.bootpri = restore_u32 (); if (ide->hdhfd.hfd.virtual_size) gayle_add_ide_unit (num, path, blocksize, readonly, ide->hdhfd.hfd.device_name, 0, ide->hdhfd.hfd.secspertrack, ide->hdhfd.hfd.heads, ide->hdhfd.hfd.reservedblocks, ide->hdhfd.bootpri, NULL, 0, 0, 0); else gayle_add_ide_unit (num, path, blocksize, readonly, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); xfree (path); return src; } fs-uae-2.2.3+dfsg/src/fs-uae/0000755000175000017500000000000012162366654016023 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/src/fs-uae/main.c0000644000175000017500000006615412162366654017127 0ustar glaubitzglaubitz#include #ifdef USE_SDL // we must include SDL first before emu.h, so libfsemu's #definition of main // is the current one (on Windows) when main is encountered further down #include #endif #include #include #include #include #include #include #include #include #include #include "fs-uae.h" //static char *g_default_rom_dir = "."; static int fs_uae_argc; static char **fs_uae_argv; static int g_warn_about_missing_config_file = 0; #define LOG_LINE "---------------------------------------------------------" \ "-------------------\n" void change_port_device_mode(int data) { int modes = INPUTEVENT_AMIGA_JOYPORT_MODE_0_LAST - INPUTEVENT_AMIGA_JOYPORT_MODE_0_NONE + 1; int port = data / modes; int mode = data % modes; if (port >= 0 && port < FS_UAE_NUM_INPUT_PORTS) { g_fs_uae_input_ports[port].mode = mode; g_fs_uae_input_ports[port].new_mode = mode; amiga_set_joystick_port_mode(port, mode); fs_uae_reconfigure_input_ports_host(); fs_emu_menu_update_current(); } } void select_port_0_device(int data) { printf("--> device index %d\n", data); int port = 0; if (data == 9) { // 9 is currently a hack to indicate the local mouse g_fs_uae_input_ports[port].mode = AMIGA_JOYPORT_MOUSE; g_fs_uae_input_ports[port].new_mode = AMIGA_JOYPORT_MOUSE; strcpy(g_fs_uae_input_ports[port].device, "MOUSE"); amiga_set_joystick_port_mode(port, AMIGA_JOYPORT_MOUSE); // FIXME: not a warning, rather a notification fs_emu_warning(_("Port 0: %s"), _("Mouse")); } else { int count = 0; int new_mode = new_mode = AMIGA_JOYPORT_DJOY; if (g_fs_uae_amiga_model == MODEL_CD32) { new_mode = AMIGA_JOYPORT_CD32JOY; } fs_emu_input_device *devices = fs_emu_get_input_devices(&count); if (data < count) { g_fs_uae_input_ports[port].mode = new_mode; g_fs_uae_input_ports[port].new_mode = new_mode; strcpy(g_fs_uae_input_ports[port].device, devices[data].name); amiga_set_joystick_port_mode(port, new_mode); // FIXME: not a warning, rather a notification fs_emu_warning(_("Port 0: %s"), devices[data].name); } } fs_uae_reconfigure_input_ports_host(); fs_emu_menu_update_current(); //fs_emu_get_input_devices() //g_fs_uae_input_ports[port].mode = mode; //amiga_set_joystick_port_mode(port, mode); //g_fs_uae_input_ports[port].new_mode = mode; //fs_uae_reconfigure_input_ports_host(); //fs_emu_menu_update_current(); } int g_fs_uae_last_input_event = 0; int g_fs_uae_last_input_event_state = 0; int g_fs_uae_state_number = 0; void fs_uae_process_input_event(int action, int state) { #if 0 g_fs_uae_last_input_event = input_event; g_fs_uae_last_input_event_state = state; fs_emu_lua_run_handler("on_fs_uae_input_event"); // handler can modify input event amiga_send_input_event(g_fs_uae_last_input_event, g_fs_uae_last_input_event_state); #endif if (action >= INPUTEVENT_AMIGA_JOYPORT_MODE_0_NONE && action < INPUTEVENT_AMIGA_JOYPORT_MODE_3_LAST) { change_port_device_mode( action - INPUTEVENT_AMIGA_JOYPORT_MODE_0_NONE); return; } if (action >= INPUTEVENT_AMIGA_JOYPORT_0_DEVICE_0 && action < INPUTEVENT_AMIGA_JOYPORT_0_DEVICE_LAST) { select_port_0_device(action - INPUTEVENT_AMIGA_JOYPORT_0_DEVICE_0); return; } if (state && action >= INPUTEVENT_AMIGA_JOYPORT_0_AUTOFIRE && action <= INPUTEVENT_AMIGA_JOYPORT_3_AUTOFIRE) { int port = action - INPUTEVENT_AMIGA_JOYPORT_0_AUTOFIRE; if (g_fs_uae_input_ports[port].autofire_mode) { g_fs_uae_input_ports[port].autofire_mode = 0; amiga_set_joystick_port_autofire(port, 0); fs_emu_warning(_("Auto-fire disabled for port %d"), port); } else { g_fs_uae_input_ports[port].autofire_mode = 1; amiga_set_joystick_port_autofire(port, 1); fs_emu_warning(_("Auto-fire enabled for port %d"), port); } fs_emu_menu_update_current(); // this event must be passed on to the Amiga core } int load_state = 0; int save_state = 0; if (action >= INPUTEVENT_SPC_STATESAVE1 && action <= INPUTEVENT_SPC_STATESAVE9) { save_state = action - INPUTEVENT_SPC_STATESAVE1 + 1; g_fs_uae_state_number = save_state; } if (action >= INPUTEVENT_SPC_STATERESTORE1 && action <= INPUTEVENT_SPC_STATERESTORE9) { load_state = action - INPUTEVENT_SPC_STATERESTORE1 + 1; g_fs_uae_state_number = load_state; } if (load_state) { fs_log("run handler on_fs_uae_load_state\n"); fs_emu_lua_run_handler("on_fs_uae_load_state"); } else if (save_state) { fs_log("run handler on_fs_uae_save_state\n"); fs_emu_lua_run_handler("on_fs_uae_save_state"); } amiga_send_input_event(action, state); if (load_state) { fs_log("run handler on_fs_uae_load_state_done\n"); fs_emu_lua_run_handler("on_fs_uae_load_state_done"); } else if (save_state) { fs_log("run handler on_fs_uae_save_state_done\n"); fs_emu_lua_run_handler("on_fs_uae_save_state_done"); } } static int g_fs_uae_frame = 0; static int input_handler_loop(void) { static int last_frame = -1; if (g_fs_uae_frame != last_frame) { // only run this for the first input handler loop per frame fs_emu_lua_run_handler("on_fs_uae_read_input"); last_frame = g_fs_uae_frame; } int action; //int reconfigure_input = 0; while((action = fs_emu_get_input_event()) != 0) { //printf("event_handler_loop received input action %d\n", action); int istate = (action & 0x00ff0000) >> 16; // force to -128 to 127 range signed char state = (signed char) istate; action = action & 0x0000ffff; //amiga_keyboard_set_host_key(input_event, state); g_fs_uae_last_input_event = action; g_fs_uae_last_input_event_state = state; fs_emu_lua_run_handler("on_fs_uae_input_event"); // handler can modify input event //action = g_fs_uae_last_input_event; //state = g_fs_uae_last_input_event_state; fs_uae_process_input_event(g_fs_uae_last_input_event, g_fs_uae_last_input_event_state); } return 1; } static void pause_throttle() { /* if (fs_emu_get_vblank_sync()) { return; } */ fs_emu_msleep(5); } void event_handler(int input) { if (input) { input_handler_loop(); return; } //static int busy = 0; //static int idle = 0; //static int64_t last_time = 0; g_fs_uae_frame = g_fs_uae_frame + 1; //printf("event_handler frame=%d\n", frame); /* int64_t t = fs_emu_monotonic_time(); if (last_time > 0) { int dt = (t - last_time) / 1000; printf("%d\n", dt); } */ //fs_emu_lua_run_handler("on_fs_uae_frame_start"); fs_emu_wait_for_frame(g_fs_uae_frame); if (g_fs_uae_frame == 1) { // we configure input ports after first frame are confirmed, // because otherwise configure events would get lost if initially // connected to the server (for net play game), but aborted connection // before game started fs_uae_reconfigure_input_ports_amiga(); } if (fs_emu_is_quitting()) { fs_log("calling amiga_quit\n"); amiga_quit(); return; } while (fs_emu_is_paused()) { /* if (!event_handler_loop()) { break; } */ pause_throttle(); if (fs_emu_is_quitting()) { break; } } //last_time = fs_emu_monotonic_time(); } char *g_fs_uae_config_file_path = NULL; char *g_fs_uae_config_dir_path = NULL; //GKeyFile *g_fs_uae_config = NULL; static int audio_callback_function(int type, int16_t *buffer, int size) { if (type == 0) { return fs_emu_queue_audio_buffer(0, buffer, size); } else if (type == 1) { fs_emu_audio_pause_stream(0); return 0; } else if (type == 2) { fs_emu_audio_resume_stream(0); return 0; } else if (type == 3) { // cd audio stream if (buffer == NULL) { // check status of buffer number given by size return fs_emu_check_audio_buffer_done(1, size); } return fs_emu_queue_audio_buffer(1, buffer, size); } return -1; } void fs_uae_load_rom_files(const char *path) { fs_log("fs_uae_load_rom_files %s\n", path); fs_dir *dir = fs_dir_open(path, 0); if (dir == NULL) { fs_log("error opening dir\n"); } amiga_add_key_dir(path); const char *name = fs_dir_read_name(dir); while (name) { char *lname = fs_utf8_strdown(name, -1); if (fs_str_has_suffix(lname, ".rom")) { fs_log("found file \"%s\"\n", name); char *full_path = fs_path_join(path, name, NULL); amiga_add_rom_file(full_path); } free(lname); name = fs_dir_read_name(dir); } fs_dir_close(dir); //exit(1); } char *fs_uae_encode_path(const char* path) { // FIXME: libamiga now always accepts UTF-8, so this function is // deprecated. Simply returning a duplicate now. return fs_strdup(path); /* #ifdef WINDOWS return g_locale_from_utf8(path, -1, NULL, NULL, NULL); #else return fs_strdup(path); #endif */ } char *fs_uae_decode_path(const char* path) { // FIXME: libamiga now always accepts UTF-8, so this function is // deprecated. Simply returning a duplicate now. return fs_strdup(path); /* #ifdef WINDOWS return g_locale_to_utf8(path, -1, NULL, NULL, NULL); #else return fs_strdup(path); #endif */ } static void on_init() { fs_log("\n"); fs_log(LOG_LINE); fs_log("uae configuration\n"); fs_log(LOG_LINE); fs_log("\n"); //fs_uae_configure_amiga_model(); fs_uae_configure_amiga_hardware(); fs_uae_configure_floppies(); fs_uae_configure_cdrom(); fs_uae_configure_hard_drives(); fs_uae_configure_input(); fs_uae_configure_directories(); if (fs_config_get_int("save_state_compression") == 0) { amiga_set_save_state_compression(0); } else { amiga_set_save_state_compression(1); } /* if (fs_emu_get_video_sync()) { fs_log("fs_emu_get_video_sync returned true\n"); amiga_set_option("gfx_vsync", "true"); } else { fs_log("fs_emu_get_video_sync returned false\n"); } if (fs_emu_netplay_enabled()) { fs_log("netplay is enabled\n"); // make sure UAE does not sleep between frames, we must be able // to control sleep times for net play amiga_set_option("gfx_vsync", "true"); } */ // with sound_auto set to true, UAE stops audio output if the amiga does // not produce sound, but this just confuses libfsemu which expects // continuous output //amiga_set_option("sound_auto", "false"); //amiga_set_audio_frequency(fs_emu_get_audio_frequency()); //amiga_set_audio_frequency(22050); // set the input frequency to the output frequency, since we configured // libamiga to output at the same frequency // FIXME: check the actual frequency libuae/libamiga outputs, seems // to output at 44100 Hz even though currprefs.freq says 48000. //fs_emu_set_audio_buffer_frequency(0, fs_emu_get_audio_frequency()); //amiga_set_option("gfx_gamma", "40"); fs_uae_set_uae_paths(); fs_uae_read_custom_uae_options(fs_uae_argc, fs_uae_argv); char *uae_file; uae_file = fs_path_join(fs_uae_logs_dir(), "LastConfig.uae", NULL); if (fs_path_exists(uae_file)) { fs_unlink(uae_file); } free(uae_file); uae_file = fs_path_join(fs_uae_logs_dir(), "DebugConfig.uae", NULL); amiga_write_uae_config(uae_file); free(uae_file); fs_log("\n"); fs_log(LOG_LINE); fs_log("end of uae configuration\n"); fs_log(LOG_LINE); fs_log("\n"); } void pause_function(int pause) { fs_log("pause_function %d\n", pause); //uae_pause(pause); amiga_pause(pause); } static int load_config_file() { fs_log("load config file\n"); const char *msg = "checking config file %s\n"; //g_fs_uae_config = g_key_file_new(); if (g_fs_uae_config_file_path == NULL) { char *path = fs_path_join(fs_uae_exe_dir(), "Config.fs-uae", NULL); fs_log(msg, path); if (fs_path_exists(path)) { g_fs_uae_config_file_path = path; } else { free(path); } } if (g_fs_uae_config_file_path == NULL) { fs_log(msg, "Config.fs-uae"); if (fs_path_exists("Config.fs-uae")) { g_fs_uae_config_file_path = "Config.fs-uae"; } } if (g_fs_uae_config_file_path == NULL) { fs_log(msg, "fs-uae.conf"); if (fs_path_exists("fs-uae.conf")) { g_fs_uae_config_file_path = "fs-uae.conf"; } } if (g_fs_uae_config_file_path == NULL) { char *path = fs_path_join(fs_get_user_config_dir(), "fs-uae", "fs-uae.conf", NULL); fs_log(msg, path); if (fs_path_exists(path)) { g_fs_uae_config_file_path = path; } else { free(path); } } if (g_fs_uae_config_file_path == NULL) { char *path = fs_path_join(fs_uae_configurations_dir(), "Default.fs-uae", NULL); fs_log(msg, path); if (fs_path_exists(path)) { g_fs_uae_config_file_path = path; } else { free(path); } } if (g_fs_uae_config_file_path) { fs_log("loading config from %s\n", g_fs_uae_config_file_path); fs_config_read_file(g_fs_uae_config_file_path, 0); g_fs_uae_config_dir_path = fs_path_get_dirname( g_fs_uae_config_file_path); } else { if (fs_config_get_boolean("end_config") == 1) { // do not warn in case end_config was specified via argv } else { fs_log("No configuration file was found"); g_warn_about_missing_config_file = 1; } } char *path = fs_path_join(fs_uae_configurations_dir(), "Host.fs-uae", NULL); fs_log(msg, path); if (fs_path_exists(path)) { fs_config_read_file(path, 0); free(path); } return 0; } static void log_to_libfsemu(const char *message) { fs_log_string(message); } static void main_function() { amiga_main(); fs_log("amiga_main returned\n"); } #ifdef WINDOWS // FIXME: move to fs_putenv int _putenv(const char *envstring); #endif void init_i18n() { if (fs_config_get_boolean("localization") == 0) { fs_log("localization was forced off\n"); return; } char *locale = setlocale(LC_MESSAGES, ""); if (locale) { fs_log("locale is set to %s\n", locale); } else { fs_log("failed to set current locale\n"); } const char *language = fs_config_get_const_string("language"); if (language) { fs_log("setting LANGUAGE=%s\n", language); char *env_str = fs_strdup_printf("LANGUAGE=%s", language); #ifdef WINDOWS _putenv(env_str); #else putenv(env_str); #endif // don't free env_str, it's put directly in the environment } #ifndef ANDROID textdomain("fs-uae"); char *path = fs_get_data_file("fs-uae/share-dir"); if (path) { fs_log("using data dir \"%s\"\n", path); // remove "fs-uae/share-dir" from the returned path int len = strlen(path); if (len > 16) { path[len - 16] = '\0'; } char *locale_base = fs_path_join(path, "locale", NULL); fs_log("using locale dir \"%s\"\n", locale_base); bindtextdomain("fs-uae", locale_base); free(locale_base); free(path); } bind_textdomain_codeset("fs-uae", "UTF-8"); #endif } static void led_function(int led, int state) { // floppy led status is custom overlay 0..3 //if (led >= 0) { // printf("led %d state %d\n", led, state); //} fs_emu_set_custom_overlay_state(led, state); } static void media_function(int drive, const char *path) { // media insertion status is custom overlay 4..7 fs_emu_set_custom_overlay_state(4 + drive, path && path[0]); } void list_joysticks() { printf("# FS-UAE VERSION %s\n", g_fs_uae_version); printf("# listing joysticks\n"); #ifdef USE_SDL if (SDL_Init(SDL_INIT_JOYSTICK ) < 0) { printf("# SDL_Init(SDL_INIT_JOYSTICK ) < 0\n"); return; } printf("# SDL_NumJoysticks(): %d\n", SDL_NumJoysticks()); for(int i = 0; i < SDL_NumJoysticks(); i++) { if (SDL_JoystickName(i)[0] == '\0') { printf("Unnamed\n"); } else { printf("%s\n", SDL_JoystickName(i)); } } #else printf("# USE_SDL is not defined\n"); #endif printf("# listing joysticks done\n"); } extern int disk_debug_logging; extern int g_frame_debug_logging; extern int g_fsdb_debug; extern int g_random_debug_logging; extern int inputdevice_logging; static void configure_logging(const char *logstr) { if (!logstr) { fs_log("configure logging: none\n"); return; } fs_log("configure logging: %s\n", logstr); int all = strstr(logstr, "all") != 0; int uae_all = all || strstr(logstr, "uae") != 0; if (uae_all || strstr(logstr, "uae_disk")) { disk_debug_logging = 2; } if (uae_all || strstr(logstr, "uae_rand")) { g_random_debug_logging = 2; } if (uae_all || strstr(logstr, "uae_input")) { inputdevice_logging = 0xffff; } if (uae_all || strstr(logstr, "uae_fs")) { g_fsdb_debug = 1; } if (uae_all || strstr(logstr, "uae_frame")) { g_frame_debug_logging = 1; } } static const char *overlay_names[] = { "df0_led", "df1_led", "df2_led", "df3_led", "df0_disk", "df1_disk", "df2_disk", "df3_disk", "power_led", "hd_led", "cd_led", "md_led", NULL, }; #define COPYRIGHT_NOTICE "\nFS-UAE VERSION %s\n" \ "Copyright 1995-2002 Bernd Schmidt, 1999-2012 Toni Wilen,\n" \ "2003-2007 Richard Drummond, 2006-2011 Mustafa 'GnoStiC' Tufan,\n" \ "2011-2013 Frode Solheim, and contributors.\n" \ "\n" \ "This is free software; see the file COPYING for copying conditions. There\n" \ "is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR\n" \ "PURPOSE. See the README for more copyright info, and the source code for\n" \ "a full list of contributors\n\n" FILE *g_state_log_file = NULL; #ifdef WINDOWS char *mbcs_to_utf8(const char *str) { int size = -1; DWORD flags = MB_ERR_INVALID_CHARS; int chars = MultiByteToWideChar(CP_ACP, flags, str, size, NULL, 0); if (chars == 0) { fs_log("error convering to wide string\n"); return NULL; } wchar_t* wstr = (wchar_t*) (malloc(sizeof(wchar_t) * (chars + 1))); chars = MultiByteToWideChar(CP_ACP, flags, str, size, wstr, chars + 1); if (chars == 0) { fs_log("error convering to wide string\n"); free(wstr); return NULL; } flags = 0; int bytes = WideCharToMultiByte( CP_UTF8, // UINT CodePage, flags, // DWORD dwFlags, wstr, // LPCWSTR lpWideCharStr, size, // int cchWideChar, NULL, // LPSTR lpMultiByteStr, 0, // int cbMultiByte, NULL, // LPCSTR lpDefaultChar, NULL); // LPBOOL lpUsedDefaultChar if (bytes == 0) { fs_log("error convering to utf-8\n"); free(wstr); return NULL; } char* buffer = (char*) (malloc(bytes + 1)); bytes = WideCharToMultiByte( CP_UTF8, // UINT CodePage, flags, // DWORD dwFlags, wstr, // LPCWSTR lpWideCharStr, size, // int cchWideChar, buffer, // LPSTR lpMultiByteStr, bytes + 1, // int cbMultiByte, NULL, // LPCSTR lpDefaultChar, NULL); // LPBOOL lpUsedDefaultChar if (bytes == 0) { fs_log("error convering to utf-8\n"); free(wstr); free(buffer); return NULL; } return buffer; } #endif int main(int argc, char* argv[]) { int result; fs_uae_argc = argc; fs_uae_argv = argv; fs_set_argv(argc, argv); char **arg; arg = argv + 1; while (arg && *arg) { if (strcmp(*arg, "--list-joysticks") == 0) { list_joysticks(); exit(0); } arg++; } fs_init(); fs_set_prgname("fs-uae"); fs_set_application_name("Amiga Emulator"); amiga_set_log_function(log_to_libfsemu); //result = parse_options(argc, argv); printf(COPYRIGHT_NOTICE, g_fs_uae_version); fs_log(COPYRIGHT_NOTICE, g_fs_uae_version); char *current_dir = fs_get_current_dir(); fs_log("current directory is %s\n", current_dir); free(current_dir); amiga_init(); // skip first entry arg = argv + 1; if (g_fs_uae_config_file_path == NULL) { while (arg && *arg) { #ifdef WINDOWS char *test_path = mbcs_to_utf8(*arg); #else const gchar *test_path = *arg; #endif if (test_path && fs_path_exists(test_path)) { g_fs_uae_config_file_path = fs_strdup(test_path); } #ifdef WINDOWS if (test_path) { g_free(test_path); } #endif arg++; } } // parse options first, in case base_dir, logging options etc is // specified on the command line fs_config_parse_options(argc - 1, argv + 1); fs_log("\n"); fs_log(LOG_LINE); fs_log("libfsemu init\n"); fs_log(LOG_LINE); fs_log("\n"); fs_emu_init_overlays(overlay_names); fs_emu_init(); // then load the config file load_config_file(); // parse options again, overwriting options loaded from configuration // file //fs_config_parse_options(argc - 1, argv + 1); init_i18n(); if (g_warn_about_missing_config_file) { fs_emu_warning(_("No configuration file was found")); } fs_log("\n"); fs_log(LOG_LINE); fs_log("fs-uae init\n"); fs_log(LOG_LINE); fs_log("\n"); configure_logging(fs_config_get_const_string("log")); fs_emu_set_state_check_function(amiga_get_state_checksum); fs_emu_set_rand_check_function(amiga_get_rand_checksum); // force creation of some recommended default directories fs_uae_kickstarts_dir(); fs_uae_configurations_dir(); fs_uae_init_path_resolver(); // must be called early, before fs_emu_init -affects video output fs_uae_configure_amiga_model(); if (g_fs_uae_fastest_possible) { //fs_log("fastest possible mode - disabling frame throttling\n"); //fs_emu_disable_throttling(); fs_log("fastest possible mode - disallowing full sync\n"); //fs_emu_disallow_full_sync(); } // force creation of state directories //fs_uae_flash_memory_dir(); //fs_uae_save_states_dir(); //fs_uae_floppy_overlays_dir(); fs_uae_state_dir(); const char *controllers_dir = fs_uae_controllers_dir(); if (controllers_dir) { fs_emu_set_controllers_dir(controllers_dir); } const char *logs_dir = fs_uae_logs_dir(); if (logs_dir) { char *log_file; log_file = fs_path_join(logs_dir, "FS-UAE.log", NULL); if (fs_path_exists(log_file)) { fs_unlink(log_file); } free(log_file); log_file = fs_path_join(logs_dir, "FS-UAE.log.txt", NULL); fs_config_set_log_file(log_file); free(log_file); } fs_config_set_string_if_unset("themes_dir", fs_uae_themes_dir()); fs_emu_set_pause_function(pause_function); //fs_uae_init_input(); fs_emu_init_2(FS_EMU_INIT_EVERYTHING); if (fs_emu_netplay_enabled() || fs_config_get_boolean("deterministic") == 1) { amiga_set_deterministic_mode(); } if (logs_dir) { if (fs_emu_netplay_enabled()) { char *sync_log_file = fs_path_join(logs_dir, "Synchronization.log", NULL); amiga_set_synchronization_log_file(sync_log_file); free(sync_log_file); } } // this stream is for paula output and drive clicks // FIXME: could mix drive clicks in its own stream instead, -might // give higher quality mixing fs_emu_audio_stream_options options; options.struct_size = sizeof(fs_emu_audio_stream_options); fs_emu_init_audio_stream_options(&options); fs_emu_init_audio_stream(0, &options); amiga_set_audio_buffer_size(options.buffer_size); // this stream is for CD audio output (CDTV/CD32) fs_emu_init_audio_stream_options(&options); // 12 * 2352 is CDDA_BUFFERS * 2352 (blkdev_cdimage.cpp) options.buffer_size = 12 * 2352; // begin playing with only one buffer queued options.min_buffers = 1; fs_emu_init_audio_stream(1, &options); amiga_set_audio_callback(audio_callback_function); amiga_set_cd_audio_callback(audio_callback_function); amiga_set_event_function(event_handler); amiga_set_led_function(led_function); amiga_set_media_function(media_function); amiga_set_init_function(on_init); #ifdef WITH_LUA amiga_init_lua(fs_emu_acquire_lua, fs_emu_release_lua); amiga_init_lua_state(fs_emu_get_lua_state()); fs_uae_init_lua_state(fs_emu_get_lua_state()); #endif if (fs_emu_get_video_format() == FS_EMU_VIDEO_FORMAT_RGBA) { amiga_set_video_format(AMIGA_VIDEO_FORMAT_RGBA); } else if (fs_emu_get_video_format() == FS_EMU_VIDEO_FORMAT_BGRA) { amiga_set_video_format(AMIGA_VIDEO_FORMAT_BGRA); } else if (fs_emu_get_video_format() == FS_EMU_VIDEO_FORMAT_R5G6B5) { amiga_set_video_format(AMIGA_VIDEO_FORMAT_R5G6B5); } else if (fs_emu_get_video_format() == FS_EMU_VIDEO_FORMAT_R5G5B5A1) { amiga_set_video_format(AMIGA_VIDEO_FORMAT_R5G5B5A1); } else { fs_emu_warning("Unsupported video format requested"); } amiga_add_rtg_resolution(672, 540); amiga_add_rtg_resolution(672 * 2, 540 * 2); amiga_add_rtg_resolution(fs_emu_get_windowed_width(), fs_emu_get_windowed_height()); amiga_add_rtg_resolution(fs_emu_get_fullscreen_width(), fs_emu_get_fullscreen_height()); fs_uae_init_video(); //fs_uae_init_keyboard(); //fs_uae_init_mouse(); fs_uae_configure_menu(); fs_emu_run(main_function); fs_log("fs-uae shutting down, fs_emu_run returned\n"); if (fs_rmdir(fs_uae_state_dir()) == 0) { fs_log("state dir %s was removed because it was empty\n", fs_uae_state_dir()); } else { fs_log("state dir %s was not removed (non-empty)\n", fs_uae_state_dir()); } fs_log("end of main function\n"); return 0; } fs-uae-2.2.3+dfsg/src/fs-uae/keyboard.c0000644000175000017500000001476512162366654020004 0ustar glaubitzglaubitz#include #include #include "fs-uae.h" static fs_emu_key_translation g_default_keymap[] = { { FS_ML_KEY_ESCAPE, -1, INPUTEVENT_KEY_ESC }, { FS_ML_KEY_F1, -1, INPUTEVENT_KEY_F1 }, { FS_ML_KEY_F2, -1, INPUTEVENT_KEY_F2 }, { FS_ML_KEY_F3, -1, INPUTEVENT_KEY_F3 }, { FS_ML_KEY_F4, -1, INPUTEVENT_KEY_F4 }, { FS_ML_KEY_F5, -1, INPUTEVENT_KEY_F5 }, { FS_ML_KEY_F6, -1, INPUTEVENT_KEY_F6 }, { FS_ML_KEY_F7, -1, INPUTEVENT_KEY_F7 }, { FS_ML_KEY_F8, -1, INPUTEVENT_KEY_F8 }, { FS_ML_KEY_F9, -1, INPUTEVENT_KEY_F9 }, { FS_ML_KEY_F10, -1, INPUTEVENT_KEY_F10 }, { FS_ML_KEY_1, -1, INPUTEVENT_KEY_1 }, { FS_ML_KEY_2, -1, INPUTEVENT_KEY_2 }, { FS_ML_KEY_3, -1, INPUTEVENT_KEY_3 }, { FS_ML_KEY_4, -1, INPUTEVENT_KEY_4 }, { FS_ML_KEY_5, -1, INPUTEVENT_KEY_5 }, { FS_ML_KEY_6, -1, INPUTEVENT_KEY_6 }, { FS_ML_KEY_7, -1, INPUTEVENT_KEY_7 }, { FS_ML_KEY_8, -1, INPUTEVENT_KEY_8 }, { FS_ML_KEY_9, -1, INPUTEVENT_KEY_9 }, { FS_ML_KEY_0, -1, INPUTEVENT_KEY_0 }, { FS_ML_KEY_TAB, -1, INPUTEVENT_KEY_TAB }, { FS_ML_KEY_A, -1, INPUTEVENT_KEY_A }, { FS_ML_KEY_B, -1, INPUTEVENT_KEY_B }, { FS_ML_KEY_C, -1, INPUTEVENT_KEY_C }, { FS_ML_KEY_D, -1, INPUTEVENT_KEY_D }, { FS_ML_KEY_E, -1, INPUTEVENT_KEY_E }, { FS_ML_KEY_F, -1, INPUTEVENT_KEY_F }, { FS_ML_KEY_G, -1, INPUTEVENT_KEY_G }, { FS_ML_KEY_H, -1, INPUTEVENT_KEY_H }, { FS_ML_KEY_I, -1, INPUTEVENT_KEY_I }, { FS_ML_KEY_J, -1, INPUTEVENT_KEY_J }, { FS_ML_KEY_K, -1, INPUTEVENT_KEY_K }, { FS_ML_KEY_L, -1, INPUTEVENT_KEY_L }, { FS_ML_KEY_M, -1, INPUTEVENT_KEY_M }, { FS_ML_KEY_N, -1, INPUTEVENT_KEY_N }, { FS_ML_KEY_O, -1, INPUTEVENT_KEY_O }, { FS_ML_KEY_P, -1, INPUTEVENT_KEY_P }, { FS_ML_KEY_Q, -1, INPUTEVENT_KEY_Q }, { FS_ML_KEY_R, -1, INPUTEVENT_KEY_R }, { FS_ML_KEY_S, -1, INPUTEVENT_KEY_S }, { FS_ML_KEY_T, -1, INPUTEVENT_KEY_T }, { FS_ML_KEY_U, -1, INPUTEVENT_KEY_U }, { FS_ML_KEY_W, -1, INPUTEVENT_KEY_W }, { FS_ML_KEY_V, -1, INPUTEVENT_KEY_V }, { FS_ML_KEY_X, -1, INPUTEVENT_KEY_X }, { FS_ML_KEY_Y, -1, INPUTEVENT_KEY_Y }, { FS_ML_KEY_Z, -1, INPUTEVENT_KEY_Z }, // FIXME: ID_FLAG_TOGGLE { FS_ML_KEY_CAPSLOCK, -1, INPUTEVENT_KEY_CAPS_LOCK}, { FS_ML_KEY_KP1, -1, INPUTEVENT_KEY_NP_1 }, { FS_ML_KEY_KP2, -1, INPUTEVENT_KEY_NP_2 }, { FS_ML_KEY_KP3, -1, INPUTEVENT_KEY_NP_3 }, { FS_ML_KEY_KP4, -1, INPUTEVENT_KEY_NP_4 }, { FS_ML_KEY_KP5, -1, INPUTEVENT_KEY_NP_5 }, { FS_ML_KEY_KP6, -1, INPUTEVENT_KEY_NP_6 }, { FS_ML_KEY_KP7, -1, INPUTEVENT_KEY_NP_7 }, { FS_ML_KEY_KP8, -1, INPUTEVENT_KEY_NP_8 }, { FS_ML_KEY_KP9, -1, INPUTEVENT_KEY_NP_9 }, { FS_ML_KEY_KP0, -1, INPUTEVENT_KEY_NP_0 }, { FS_ML_KEY_KP_PERIOD, -1, INPUTEVENT_KEY_NP_PERIOD }, { FS_ML_KEY_KP_PLUS, -1, INPUTEVENT_KEY_NP_ADD }, { FS_ML_KEY_KP_MINUS, -1, INPUTEVENT_KEY_NP_SUB }, { FS_ML_KEY_KP_MULTIPLY, -1, INPUTEVENT_KEY_NP_MUL }, { FS_ML_KEY_KP_DIVIDE, -1, INPUTEVENT_KEY_NP_DIV }, { FS_ML_KEY_KP_ENTER, -1, INPUTEVENT_KEY_ENTER }, { FS_ML_KEY_MINUS, -1, INPUTEVENT_KEY_SUB }, { FS_ML_KEY_EQUALS, -1, INPUTEVENT_KEY_EQUALS }, { FS_ML_KEY_BACKSPACE, -1, INPUTEVENT_KEY_BACKSPACE }, { FS_ML_KEY_RETURN, -1, INPUTEVENT_KEY_RETURN }, { FS_ML_KEY_SPACE, -1, INPUTEVENT_KEY_SPACE }, { FS_ML_KEY_LSHIFT, -1, INPUTEVENT_KEY_SHIFT_LEFT }, { FS_ML_KEY_LCTRL, -1, INPUTEVENT_KEY_CTRL }, // FIXME: { FS_ML_KEY_LSUPER, -1, INPUTEVENT_KEY_AMIGA_LEFT }, { FS_ML_KEY_LMETA, -1, INPUTEVENT_KEY_AMIGA_LEFT }, { FS_ML_KEY_LALT, -1, INPUTEVENT_KEY_ALT_LEFT }, { FS_ML_KEY_RALT, -1, INPUTEVENT_KEY_ALT_RIGHT }, // FIXME: { FS_ML_KEY_RSUPER, -1, INPUTEVENT_KEY_AMIGA_RIGHT }, { FS_ML_KEY_RMETA, -1, INPUTEVENT_KEY_AMIGA_RIGHT }, { FS_ML_KEY_MENU, -1, INPUTEVENT_KEY_AMIGA_RIGHT }, //{ FS_ML_KEY_RCTRL, -1, INPUTEVENT_KEY_CTRL_RIGHT }, { FS_ML_KEY_RSHIFT, -1, INPUTEVENT_KEY_SHIFT_RIGHT }, { FS_ML_KEY_UP, -1, INPUTEVENT_KEY_CURSOR_UP }, { FS_ML_KEY_DOWN, -1, INPUTEVENT_KEY_CURSOR_DOWN }, { FS_ML_KEY_LEFT, -1, INPUTEVENT_KEY_CURSOR_LEFT }, { FS_ML_KEY_RIGHT, -1, INPUTEVENT_KEY_CURSOR_RIGHT }, // 0x2B is the number (hash) key on some international keyboards //{ FS_ML_KEY_INSERT, -1, INPUTEVENT_KEY_2B }, { FS_ML_KEY_INSERT, -1, INPUTEVENT_KEY_BACKSLASH }, { FS_ML_KEY_HOME, -1, INPUTEVENT_KEY_NP_LPAREN }, { FS_ML_KEY_PAGEUP, -1, INPUTEVENT_KEY_NP_RPAREN }, { FS_ML_KEY_DELETE, -1, INPUTEVENT_KEY_DEL }, { FS_ML_KEY_END, -1, INPUTEVENT_KEY_HELP }, { FS_ML_KEY_PAGEDOWN, -1, INPUTEVENT_KEY_AMIGA_RIGHT }, { FS_ML_KEY_LEFTBRACKET, -1, INPUTEVENT_KEY_LEFTBRACKET }, { FS_ML_KEY_RIGHTBRACKET, -1, INPUTEVENT_KEY_RIGHTBRACKET }, { FS_ML_KEY_SEMICOLON, -1, INPUTEVENT_KEY_SEMICOLON }, { FS_ML_KEY_QUOTE, -1, INPUTEVENT_KEY_SINGLEQUOTE }, { FS_ML_KEY_BACKQUOTE, -1, INPUTEVENT_KEY_BACKQUOTE }, //{ FS_ML_KEY_BACKSLASH, -1, INPUTEVENT_KEY_BACKSLASH }, { FS_ML_KEY_BACKSLASH, -1, INPUTEVENT_KEY_2B }, { FS_ML_KEY_COMMA, -1, INPUTEVENT_KEY_COMMA }, { FS_ML_KEY_PERIOD, -1, INPUTEVENT_KEY_PERIOD }, { FS_ML_KEY_SLASH, -1, INPUTEVENT_KEY_DIV }, // 0x30 is to the left of Z { FS_ML_KEY_LESS, -1, INPUTEVENT_KEY_30 }, // FIXME: international key?? //{ DIK_OEM_102, -1, INPUTEVENT_KEY_30 }, // FIXME: //{ INPUTEVENT_KEY_30, -1, INPUTEVENT_KEY_30 }, //{ INPUTEVENT_SPC_MASTER_VOLUME_DOWN, -1, INPUTEVENT_SPC_MASTER_VOLUME_DOWN }, //{ INPUTEVENT_SPC_MASTER_VOLUME_UP, -1, INPUTEVENT_SPC_MASTER_VOLUME_UP }, //{ INPUTEVENT_SPC_MASTER_VOLUME_MUTE, -1, INPUTEVENT_SPC_MASTER_VOLUME_MUTE }, //{ INPUTEVENT_KEY_70, -1, INPUTEVENT_KEY_70 }, //{ INPUTEVENT_KEY_71, -1, INPUTEVENT_KEY_71 }, // { DIK_SYSRQ, -1, INPUTEVENT_KEY_6E }, // { DIK_F12, -1, INPUTEVENT_KEY_6F }, //{ INPUTEVENT_KEY_47, -1, INPUTEVENT_KEY_47 }, // { DIK_PRIOR, -1, INPUTEVENT_KEY_48 }, //{ INPUTEVENT_SPC_FREEZEBUTTON, -1, INPUTEVENT_SPC_FREEZEBUTTON }, //{ INPUTEVENT_KEY_49, -1, INPUTEVENT_KEY_49 }, //{ INPUTEVENT_KEY_4B, -1, INPUTEVENT_KEY_4B }, //{ INPUTEVENT_KEY_CDTV_STOP, -1, INPUTEVENT_KEY_CDTV_STOP }, //{ INPUTEVENT_KEY_CDTV_PLAYPAUSE, -1, INPUTEVENT_KEY_CDTV_PLAYPAUSE }, //{ INPUTEVENT_KEY_CDTV_PREV, -1, INPUTEVENT_KEY_CDTV_PREV }, //{ INPUTEVENT_KEY_CDTV_NEXT, -1, INPUTEVENT_KEY_CDTV_NEXT }, // end of keyboard map sentinel { 0, 0, 0 }, }; void fs_uae_map_keyboard(void) { fs_emu_set_keyboard_translation(g_default_keymap); } fs-uae-2.2.3+dfsg/src/fs-uae/menu.c0000644000175000017500000011133112162366654017133 0ustar glaubitzglaubitz#include #include #include #include #include #include #include #include "fs-uae.h" #define NUM_SAVE_SLOTS 9 /// TRANSLATORS: This is a menu entry and must not be too long: If you struggle /// to get in short enough, just translate "No Device" instead. #define NO_HOST_DEVICE _("No Host Device") /// TRANSLATORS: This is a menu entry and must not be too long: If you struggle /// to get in short enough, just translate "No Device" instead. #define NO_AMIGA_DEVICE _("No Amiga Device") #define PAUSE_ITEM_INDEX 1 #define INPUT_ITEM_INDEX 8 #define MEDIA_ITEM_INDEX 12 static int pause_function(fs_emu_menu_item *item, void **data) { fs_emu_log("pause_function\n"); //return FS_EMU_MENU_RESULT_CLOSE; fs_emu_pause(!fs_emu_is_paused()); return FS_EMU_MENU_RESULT_UPDATE; } static int hard_reset_function(fs_emu_menu_item *item, void **data) { fs_emu_log("hard_reset_function\n"); fs_emu_queue_action(INPUTEVENT_SPC_HARDRESET, 1); return FS_EMU_MENU_RESULT_CLOSE | FS_EMU_MENU_RESULT_ROOT; } static int soft_reset_function(fs_emu_menu_item *item, void **data) { fs_emu_log("soft_reset_function\n"); fs_emu_queue_action(INPUTEVENT_SPC_SOFTRESET, 1); return FS_EMU_MENU_RESULT_CLOSE | FS_EMU_MENU_RESULT_ROOT; } static int reset_menu_function(fs_emu_menu_item *menu_item, void **result_data) { fs_emu_menu_item *item; fs_emu_menu *menu = fs_emu_menu_new(); item = fs_emu_menu_item_new(); fs_emu_menu_append_item(menu, item); /// TRANSLATORS: Reset Amiga as in reboot the computer fs_emu_menu_item_set_title(item, _("Reset Amiga")); fs_emu_menu_item_set_type(item, FS_EMU_MENU_ITEM_TYPE_HEADING); item = fs_emu_menu_item_new(); fs_emu_menu_append_item(menu, item); /// TRANSLATORS: Soft reset reboots the computer without a power cycle fs_emu_menu_item_set_title(item, _("Soft Reset")); fs_emu_menu_item_set_activate_function(item, soft_reset_function); item = fs_emu_menu_item_new(); fs_emu_menu_append_item(menu, item); /// TRANSLATORS: Hard reset is a computer reboot with an emulated power /// cycle fs_emu_menu_item_set_title(item, _("Hard Reset")); fs_emu_menu_item_set_activate_function(item, hard_reset_function); *result_data = menu; return FS_EMU_MENU_RESULT_MENU; } static char *get_floppy_label(const char* path) { if (!path || path[0] == '\0') { return fs_strdup(""); } char *name = fs_path_get_basename(path); #ifdef USE_GLIB GError *error = NULL; GRegex *re = g_regex_new( "([A-Za-z0-9_ ]*[Dd][Ii][Ss][Kk][A-Za-z0-9_ ]*)", 0, 0, &error); if (error) { fs_emu_log(" *** error\n"); return name; } GMatchInfo *mi = NULL; if (!g_regex_match(re, name, 0, &mi) || !g_match_info_matches(mi)) { //fs_emu_log(" *** false\n"); g_match_info_free(mi); g_regex_unref(re); return name; } //fs_emu_log(" *** ok?\n"); char *result = g_match_info_fetch(mi, 1); g_match_info_free(mi); g_regex_unref(re); if (!result) { return name; } free(name); return result; #else return name; #endif } static char g_input_desc[4][MAX_DEVICE_NAME_LEN + 1] = {}; static void update_input_item(fs_emu_menu_item *item, int port) { //int mode = amiga_get_joystick_port_mode(port); int mode = g_fs_uae_input_ports[port].mode; g_input_desc[port][0] = '['; g_input_desc[port][2] = ']'; g_input_desc[port][3] = ' '; if (mode == AMIGA_JOYPORT_NONE) { g_input_desc[port][1] = 'X'; } else if (mode == AMIGA_JOYPORT_DJOY) { g_input_desc[port][1] = 'J'; } else if (mode == AMIGA_JOYPORT_CD32JOY) { g_input_desc[port][1] = 'C'; } else if (mode == AMIGA_JOYPORT_MOUSE) { g_input_desc[port][1] = 'M'; } else { g_input_desc[port][1] = '?'; } const char* s = g_fs_uae_input_ports[port].device; if (s[0] == '\0') { s = NO_HOST_DEVICE; } else if (strcmp(s, "KEYBOARD") == 0) { s = _("Keyboard"); } else if (strcmp(s, "MOUSE") == 0) { s = _("Mouse"); } strncpy(g_input_desc[port] + 4, s, MAX_DEVICE_NAME_LEN - 4); fs_emu_menu_item_set_title(item, g_input_desc[port]); } static void get_drive_for_index(int index, int *type, int *drive) { int count = 0; int num_floppy_drives = amiga_get_num_floppy_drives(); int num_cdrom_drives = amiga_get_num_cdrom_drives(); if (g_fs_uae_amiga_model == MODEL_CD32 || g_fs_uae_amiga_model == MODEL_CDTV) { if (num_cdrom_drives < 1) { num_cdrom_drives = 1; } } //printf("num drives: floppy %d cd-rom %d\n", num_floppy_drives, // num_cdrom_drives); for (int i = 0; i < num_cdrom_drives; i++) { if (index == count) { *type = 1; *drive = i; return; } count++; } for (int i = 0; i < num_floppy_drives; i++) { if (index == count) { *type = 0; *drive = i; return; } count++; } *type = -1; *drive = 0; } static void update_main_menu(fs_emu_menu *menu) { fs_emu_log("update_main_menu\n"); fs_emu_menu_item *item = menu->items[PAUSE_ITEM_INDEX]; if (fs_emu_is_paused()) { fs_emu_menu_item_set_title(item, _("Resume")); } else { fs_emu_menu_item_set_title(item, _("Pause")); } update_input_item(menu->items[INPUT_ITEM_INDEX], 0); update_input_item(menu->items[INPUT_ITEM_INDEX + 1], 1); int media_item_first_index = MEDIA_ITEM_INDEX; int drive, type; for (int i = 0; i < 4; i++) { item = menu->items[media_item_first_index + i]; get_drive_for_index(i, &type, &drive); //printf("index %d => %d %d\n", i, type, drive); if (type == 0) { // floppy if (amiga_floppy_get_drive_type( drive) == AMIGA_FLOPPY_DRIVE_NONE) { fs_emu_menu_item_set_title(item, _("Disabled")); fs_emu_menu_item_set_enabled(item, 0); } else { const char *path = amiga_floppy_get_file(drive); fs_emu_log("floppy in %d: %s\n", drive, path); if (path == NULL || *path == 0) { /// TRANSLATORS: Empty or nothing char *title = fs_strdup_printf(_("DF%d: Empty"), drive); fs_emu_menu_item_set_title(item, title); free(title); } else { char *label = get_floppy_label(path); fs_emu_menu_item_set_title(item, label); free(label); } fs_emu_menu_item_set_enabled(item, 1); } } else if (type == 1) { // CD const char *path = amiga_cdrom_get_file(drive); fs_emu_log("CD in %d: %s\n", drive, path); if (path == NULL || *path == 0) { /// TRANSLATORS: Empty or nothing char *title = fs_strdup_printf(_("CD%d: Empty"), drive); fs_emu_menu_item_set_title(item, title); free(title); } else { // FIXME: not really that useful for CDs char *label = get_floppy_label(path); fs_emu_menu_item_set_title(item, label); free(label); } fs_emu_menu_item_set_enabled(item, 1); } else { fs_emu_menu_item_set_title(item, _("Disabled")); fs_emu_menu_item_set_enabled(item, 0); } } } static int g_last_save_slot = 0; static int load_function(fs_emu_menu_item *item, void **data) { int slot = item->idata; fs_emu_log("load_function slot = %d\n", slot); g_last_save_slot = slot; //amiga_state_load(slot); fs_emu_queue_action(INPUTEVENT_SPC_STATERESTORE1 + slot, 1); return FS_EMU_MENU_RESULT_CLOSE | FS_EMU_MENU_RESULT_ROOT; } static int save_function(fs_emu_menu_item *item, void **data) { int slot = item->idata; fs_emu_log("save_function slot = %d\n", slot); g_last_save_slot = slot; //amiga_state_save(slot); fs_emu_queue_action(INPUTEVENT_SPC_STATESAVE1 + slot, 1); return FS_EMU_MENU_RESULT_CLOSE | FS_EMU_MENU_RESULT_ROOT; } static char *get_state_file(int slot, const char *ext) { char *path = fs_strdup_printf("%s %d.%s", fs_uae_get_state_base_name(), slot + 1, ext); return path; } static char *check_save_state(int slot) { char *title = NULL; char *state_file = get_state_file(slot, "uss"); fs_emu_log("check %s\n", state_file); if (fs_path_exists(state_file)) { fs_emu_log("exists\n"); struct fs_stat buf; if (fs_stat(state_file, &buf) == 0) { //GDate date; //g_date_clear(&date, 1); //g_date_set_time_t(&date, buf.mtime); struct tm tm_struct; fs_localtime_r(&buf.mtime, &tm_struct); char strbuf[32]; //g_date_strftime(strbuf, 32, ""); strftime(strbuf, 32, "%Y-%m-%d %H:%M:%S", &tm_struct); //title = fs_strdup_printf("%d", buf.mtime); title = fs_strdup(strbuf); } } free(state_file); return title; } static void update_save_state_item(fs_emu_menu_item* item, int slot, int save) { char *title = check_save_state(slot); if (title) { fs_emu_menu_item_set_title(item, title); free(title); } else { fs_emu_menu_item_set_title(item, _("Empty")); } } static void update_save_states_menu(fs_emu_menu *menu) { fs_emu_menu_item *item; for (int i = 0; i < NUM_SAVE_SLOTS; i++) { item = menu->items[1 + i]; update_save_state_item(item, i, 1); } } static int save_state_menu_function(fs_emu_menu_item *menu_item, void **result_data) { int slot = menu_item->idata; fs_emu_menu_item *item; fs_emu_menu *menu = fs_emu_menu_new(); //fs_emu_menu_set_update_function(menu, update_save_states_menu); char *title = check_save_state(slot); item = fs_emu_menu_item_new(); fs_emu_menu_append_item(menu, item); if (title) { fs_emu_menu_item_set_title(item, title); } else { fs_emu_menu_item_set_title(item, _("Empty")); } fs_emu_menu_item_set_type(item, FS_EMU_MENU_ITEM_TYPE_HEADING); item = fs_emu_menu_item_new(); fs_emu_menu_append_item(menu, item); fs_emu_menu_item_set_title(item, _("Load")); fs_emu_menu_item_set_idata(item, slot); fs_emu_menu_item_set_enabled(item, title != NULL); fs_emu_menu_item_set_activate_function(item, load_function); item = fs_emu_menu_item_new(); fs_emu_menu_append_item(menu, item); fs_emu_menu_item_set_title(item, _("Save")); fs_emu_menu_item_set_idata(item, slot); fs_emu_menu_item_set_activate_function(item, save_function); if (title) { free(title); } *result_data = menu; return FS_EMU_MENU_RESULT_MENU; } static int save_states_menu_function(fs_emu_menu_item *unused, void **result_data) { fs_emu_log("save_states_menu_function\n"); fs_emu_menu_item *item; fs_emu_menu *menu = fs_emu_menu_new(); fs_emu_menu_set_update_function(menu, update_save_states_menu); item = fs_emu_menu_item_new(); fs_emu_menu_append_item(menu, item); fs_emu_menu_item_set_title(item, _("Save States")); fs_emu_menu_item_set_type(item, FS_EMU_MENU_ITEM_TYPE_HEADING); for (int i = 0; i < NUM_SAVE_SLOTS; i++) { item = fs_emu_menu_item_new(); fs_emu_menu_append_item(menu, item); fs_emu_menu_item_set_idata(item, i); fs_emu_menu_item_set_activate_function(item, save_state_menu_function); } // focus on the last used slot menu->index = g_last_save_slot + 1; //create_save_state_menu(menu, 1); *result_data = menu; return FS_EMU_MENU_RESULT_MENU; } static void insert_disk(int drive_index, int disk_index) { if (disk_index == -1) { fs_emu_log("menu: eject disk from drive %d\n", drive_index); int action = INPUTEVENT_SPC_EFLOPPY0 + drive_index; fs_emu_queue_action(action, 1); //fs_emu_queue_action(action, 0); return; } fs_emu_log("menu: insert disk index %d into df%d\n", disk_index, drive_index); int action = INPUTEVENT_SPC_DISKSWAPPER_0_0; action += drive_index * AMIGA_FLOPPY_LIST_SIZE + disk_index; fs_emu_queue_action(action, 1); } static void insert_cdrom(int drive_index, int disk_index) { if (disk_index == -1) { fs_emu_log("menu: eject CD from drive %d\n", drive_index); amiga_cdrom_set_file(drive_index, ""); return; } fs_emu_log("menu: insert CD index %d into drive %d\n", disk_index, drive_index); char *key = fs_strdup_printf("cdrom_image_%d", disk_index); char* path = fs_config_get_string(key); free(key); if (path == NULL) { fs_emu_log("no CD at this index in CD-ROM list\n"); } path = fs_uae_expand_path_and_free(path); amiga_cdrom_set_file(drive_index, path); free(path); } static int df0_function(fs_emu_menu_item *menu_item, void **result_data) { insert_disk(0, fs_emu_menu_item_get_idata(menu_item)); return FS_EMU_MENU_RESULT_CLOSE; } static int df1_function(fs_emu_menu_item *menu_item, void **result_data) { insert_disk(1, fs_emu_menu_item_get_idata(menu_item)); return FS_EMU_MENU_RESULT_CLOSE; } static int df2_function(fs_emu_menu_item *menu_item, void **result_data) { insert_disk(2, fs_emu_menu_item_get_idata(menu_item)); return FS_EMU_MENU_RESULT_CLOSE; } static int df3_function(fs_emu_menu_item *menu_item, void **result_data) { insert_disk(3, fs_emu_menu_item_get_idata(menu_item)); return FS_EMU_MENU_RESULT_CLOSE; } static int cd0_function(fs_emu_menu_item *menu_item, void **result_data) { insert_cdrom(0, fs_emu_menu_item_get_idata(menu_item)); return FS_EMU_MENU_RESULT_CLOSE; } static void update_disk_menu(fs_emu_menu *menu) { fs_emu_menu_item *item = menu->items[1]; const char *inserted_path = amiga_floppy_get_file(menu->idata); fs_emu_menu_item_set_enabled(item, inserted_path[0] != '\0'); for (int i = 0; i < menu->count - 2; i++) { item = menu->items[i + 2]; //const char *path = amiga_floppy_get_list_entry(i - 1); const char *path = amiga_floppy_get_list_entry(i); //printf("inserted in %d: %s\n", menu->idata, inserted_path); //printf("at %d: %s\n", i, path); //char *key = fs_strdup_printf("floppy_image_%d", i); //char* path = fs_config_get_string(key); //free(key); if (path == NULL) { fs_emu_menu_item_set_enabled(item, 0); continue; } if (strcmp(path, "") == 0) { fs_emu_menu_item_set_enabled(item, 0); } else if (strcmp(inserted_path, path) == 0) { fs_emu_menu_item_set_enabled(item, 0); // FIXME: move somewhere else? menu->index = 2 + i; } else { fs_emu_menu_item_set_enabled(item, 1); } //free(path); } } static void update_cd_menu(fs_emu_menu *menu) { fs_emu_menu_item *item = menu->items[1]; const char *inserted_path = amiga_cdrom_get_file(menu->idata); // FIXME: enable later //fs_emu_menu_item_set_enabled(item, inserted_path[0] != '\0'); for (int i = 0; i < menu->count - 2; i++) { item = menu->items[i + 2]; char *key = fs_strdup_printf("cdrom_image_%d", i); char* path = fs_config_get_string(key); free(key); if (path == NULL) { fs_emu_menu_item_set_enabled(item, 0); continue; } if (strcmp(inserted_path, path) == 0) { fs_emu_menu_item_set_enabled(item, 0); // FIXME: move somewhere else? menu->index = 2 + i; } else { fs_emu_menu_item_set_enabled(item, 1); } free(path); } } static int media_menu_function(fs_emu_menu_item *menu_item, void **result_data) { int index = fs_emu_menu_item_get_idata(menu_item); int drive, type; get_drive_for_index(index, &type, &drive); fs_emu_menu_item *item; fs_emu_menu *menu = fs_emu_menu_new(); if (type == 0) { // floppy fs_emu_log("disk_menu_function for df%d\n"); char *str; menu->idata = drive; fs_emu_menu_set_update_function(menu, update_disk_menu); item = fs_emu_menu_item_new(); fs_emu_menu_append_item(menu, item); /// TRANSLATORS: This is a menu entry and must not be too long str = fs_strdup_printf(_("Insert Into DF%d"), drive); fs_emu_menu_item_set_title(item, str); free(str); fs_emu_menu_item_set_type(item, FS_EMU_MENU_ITEM_TYPE_HEADING); for (int i = -1; i < AMIGA_FLOPPY_LIST_SIZE; i++) { item = fs_emu_menu_item_new(); fs_emu_menu_append_item(menu, item); if (i == -1) { fs_emu_menu_item_set_title(item, _("Eject")); } else { const char *path = amiga_floppy_get_list_entry(i); str = get_floppy_label(path); fs_emu_menu_item_set_title(item, str); free(str); } //fs_emu_menu_item_set_type(item, FS_EMU_MENU_ITEM_TYPE_ITEM); fs_emu_menu_item_set_idata(item, i); if (drive == 0) { fs_emu_menu_item_set_activate_function(item, df0_function); } else if (drive == 1) { fs_emu_menu_item_set_activate_function(item, df1_function); } else if (drive == 2) { fs_emu_menu_item_set_activate_function(item, df2_function); } else if (drive == 3) { fs_emu_menu_item_set_activate_function(item, df3_function); } } } else if (type == 1) { fs_emu_log("cd_menu_function for CD %d\n"); char *str; menu->idata = drive; fs_emu_menu_set_update_function(menu, update_cd_menu); item = fs_emu_menu_item_new(); fs_emu_menu_append_item(menu, item); /// TRANSLATORS: This is a menu entry and must not be too long str = fs_strdup_printf(_("Insert Into CD%d"), drive); fs_emu_menu_item_set_title(item, str); free(str); fs_emu_menu_item_set_type(item, FS_EMU_MENU_ITEM_TYPE_HEADING); item = fs_emu_menu_item_new(); fs_emu_menu_append_item(menu, item); fs_emu_menu_item_set_title(item, _("Eject")); fs_emu_menu_item_set_idata(item, -1); fs_emu_menu_item_set_activate_function(item, cd0_function); // FIXME: Disabled because inserting nothing seems to make it crash, // currently -needs to be investigated //fs_emu_menu_item_set_enabled(item, 0); for (int i = 0; ; i++) { // FIXME: GET FROM UAE OPTIONS...? char *key = fs_strdup_printf("cdrom_image_%d", i); char *path = fs_config_get_string(key); free(key); if (path == NULL) { if (i == 0) { // try starting from index 1 continue; } break; } item = fs_emu_menu_item_new(); fs_emu_menu_append_item(menu, item); str = get_floppy_label(path); fs_emu_menu_item_set_title(item, str); free(str); //fs_emu_menu_item_set_type(item, FS_EMU_MENU_ITEM_TYPE_ITEM); fs_emu_menu_item_set_idata(item, i); if (drive == 0) { fs_emu_menu_item_set_activate_function(item, cd0_function); } free(path); } } *result_data = menu; return FS_EMU_MENU_RESULT_MENU; } static void update_input_menu(fs_emu_menu *menu) { int port = menu->idata; fs_emu_menu_item *item; item = menu->items[1]; const char* s = g_fs_uae_input_ports[port].device; if (s[0] == '\0') { s = NO_HOST_DEVICE; } else if (strcmp(s, "KEYBOARD") == 0) { s = _("Keyboard"); } else if (strcmp(s, "MOUSE") == 0) { s = _("Mouse"); } fs_emu_menu_item_set_title(item, s); if (port < 4) { item = menu->items[3]; if (g_fs_uae_input_ports[port].mode == AMIGA_JOYPORT_NONE) { fs_emu_menu_item_set_title(item, NO_AMIGA_DEVICE); } else if (g_fs_uae_input_ports[port].mode == AMIGA_JOYPORT_MOUSE) { fs_emu_menu_item_set_title(item, _("Mouse Mode")); } else if (g_fs_uae_input_ports[port].mode == AMIGA_JOYPORT_DJOY) { fs_emu_menu_item_set_title(item, _("Joystick Mode")); } else if (g_fs_uae_input_ports[port].mode == AMIGA_JOYPORT_CD32JOY) { fs_emu_menu_item_set_title(item, _("CD32 Pad Mode")); } else { fs_emu_menu_item_set_title(item, "???"); } item = menu->items[4]; if (g_fs_uae_input_ports[port].autofire_mode) { fs_emu_menu_item_set_title(item, _("Auto-Fire is On")); } else { fs_emu_menu_item_set_title(item, _("Auto-Fire is Off")); } } } static void set_input_port(int port, const char *device, int remove_other) { strncpy(g_fs_uae_input_ports[port].device, device, MAX_DEVICE_NAME_LEN); if (remove_other) { for (int i = 0; i < FS_UAE_NUM_INPUT_PORTS; i++) { if (i == port) { continue; } if (strcmp(g_fs_uae_input_ports[i].device, device) == 0) { strcpy(g_fs_uae_input_ports[i].device, ""); } } } } static int input_device_function(fs_emu_menu_item *menu_item, void **result_data) { int port = fs_emu_menu_item_get_idata(menu_item); int index = port & 0xff; port = port >> 8; if (index == 255) { fs_log("[menu] port %d set device to \"%s\"\n", port, ""); set_input_port(port, "", 0); } else if (index == 254) { fs_log("[menu] port %d set device to \"%s\"\n", port, "MOUSE"); set_input_port(port, "MOUSE", 1); } else if (index == 253) { fs_log("[menu] port %d set device to \"%s\"\n", port, "KEYBOARD"); set_input_port(port, "KEYBOARD", 1); } else { fs_emu_input_device device; if (!fs_ml_input_device_get(index, &device)) { return FS_EMU_MENU_RESULT_NONE; } fs_log("[menu] port %d set device to %s\n", port, device.name); set_input_port(port, device.name, 1); } fs_uae_reconfigure_input_ports_host(); return FS_EMU_MENU_RESULT_BACK; } static int input_host_menu_function(fs_emu_menu_item *menu_item, void **result_data) { int port = fs_emu_menu_item_get_idata(menu_item); char *str; fs_emu_menu_item *item; fs_emu_menu *menu = fs_emu_menu_new(); menu->idata = port; item = fs_emu_menu_item_new(); fs_emu_menu_append_item(menu, item); /// TRANSLATORS: This is a menu entry and must not be too long str = fs_strdup_printf(_("Joystick Port %d Device"), port); fs_emu_menu_item_set_title(item, str); free(str); fs_emu_menu_item_set_type(item, FS_EMU_MENU_ITEM_TYPE_HEADING); item = fs_emu_menu_item_new(); fs_emu_menu_append_item(menu, item); fs_emu_menu_item_set_title(item, NO_HOST_DEVICE); fs_emu_menu_item_set_idata(item, (port << 8) | 255); fs_emu_menu_item_set_activate_function(item, input_device_function); if (strcmp(g_fs_uae_input_ports[port].device, "") == 0) { menu->index = 1; } item = fs_emu_menu_item_new(); fs_emu_menu_append_item(menu, item); fs_emu_menu_item_set_title(item, _("Mouse")); fs_emu_menu_item_set_idata(item, (port << 8) | 254); fs_emu_menu_item_set_activate_function(item, input_device_function); if (strcmp(g_fs_uae_input_ports[port].device, "MOUSE") == 0) { menu->index = 2; } item = fs_emu_menu_item_new(); fs_emu_menu_append_item(menu, item); fs_emu_menu_item_set_title(item, _("Keyboard")); fs_emu_menu_item_set_idata(item, (port << 8) | 253); fs_emu_menu_item_set_activate_function(item, input_device_function); if (strcmp(g_fs_uae_input_ports[port].device, "KEYBOARD") == 0) { menu->index = 3; } fs_emu_input_device device; for (int i = 0; i < FS_ML_INPUT_DEVICES_MAX; i++) { if (!fs_ml_input_device_get(i, &device)) { continue; } if (strcmp(device.name, "KEYBOARD") == 0) { continue; } if (strcmp(g_fs_uae_input_ports[port].device, device.name) == 0) { menu->index = 4 + i; } item = fs_emu_menu_item_new(); fs_emu_menu_append_item(menu, item); const char* s = device.name; fs_emu_menu_item_set_title(item, s); fs_emu_menu_item_set_idata(item, (port << 8) | i); fs_emu_menu_item_set_activate_function(item, input_device_function); } *result_data = menu; return FS_EMU_MENU_RESULT_MENU; } static int input_type_function(fs_emu_menu_item *menu_item, void **result_data) { int port = fs_emu_menu_item_get_idata(menu_item); int mode = port & 0xff; port = port >> 8; if (port < 4) { fs_log("[menu] port %d set mode to %d\n", port, mode); g_fs_uae_input_ports[port].new_mode = mode; fs_uae_reconfigure_input_ports_amiga(); } else { // this is set directly, locally, for custom joystick ("port 4") g_fs_uae_input_ports[port].mode = mode; g_fs_uae_input_ports[port].new_mode = mode; fs_uae_reconfigure_input_ports_host(); } return FS_EMU_MENU_RESULT_BACK; } static int input_amiga_menu_function(fs_emu_menu_item *menu_item, void **result_data) { int port = fs_emu_menu_item_get_idata(menu_item); char *str; fs_emu_menu_item *item; fs_emu_menu *menu = fs_emu_menu_new(); menu->idata = port; item = fs_emu_menu_item_new(); fs_emu_menu_append_item(menu, item); /// TRANSLATORS: This is a menu entry and must not be too long str = fs_strdup_printf(_("Joystick Port %d Mode"), port); fs_emu_menu_item_set_title(item, str); free(str); fs_emu_menu_item_set_type(item, FS_EMU_MENU_ITEM_TYPE_HEADING); int index = 0; item = fs_emu_menu_item_new(); index++; fs_emu_menu_append_item(menu, item); fs_emu_menu_item_set_title(item, NO_AMIGA_DEVICE); fs_emu_menu_item_set_idata(item, (port << 8) | 0); fs_emu_menu_item_set_activate_function(item, input_type_function); if (g_fs_uae_input_ports[port].mode == 0) { menu->index = index; } if (port < 2) { item = fs_emu_menu_item_new(); index++; fs_emu_menu_append_item(menu, item); fs_emu_menu_item_set_title(item, _("Mouse Mode")); fs_emu_menu_item_set_idata(item, (port << 8) | AMIGA_JOYPORT_MOUSE); fs_emu_menu_item_set_activate_function(item, input_type_function); if (g_fs_uae_input_ports[port].mode == AMIGA_JOYPORT_MOUSE) { menu->index = index; } } if (port < 4) { item = fs_emu_menu_item_new(); index++; fs_emu_menu_append_item(menu, item); fs_emu_menu_item_set_title(item, _("Joystick Mode")); fs_emu_menu_item_set_idata(item, (port << 8) | AMIGA_JOYPORT_DJOY); fs_emu_menu_item_set_activate_function(item, input_type_function); if (g_fs_uae_input_ports[port].mode == AMIGA_JOYPORT_DJOY) { menu->index = index; } } if (port < 2) { item = fs_emu_menu_item_new(); index++; fs_emu_menu_append_item(menu, item); fs_emu_menu_item_set_title(item, _("CD32 Pad Mode")); fs_emu_menu_item_set_idata(item, (port << 8) | AMIGA_JOYPORT_CD32JOY); fs_emu_menu_item_set_activate_function(item, input_type_function); if (g_fs_uae_input_ports[port].mode == AMIGA_JOYPORT_CD32JOY) { menu->index = index; } } if (port >= 4) { item = fs_emu_menu_item_new(); index++; fs_emu_menu_append_item(menu, item); fs_emu_menu_item_set_title(item, _("Custom Mode")); fs_emu_menu_item_set_idata(item, (port << 8) | AMIGA_JOYPORT_DJOY); fs_emu_menu_item_set_activate_function(item, input_type_function); if (g_fs_uae_input_ports[port].mode == AMIGA_JOYPORT_DJOY) { menu->index = index; } } *result_data = menu; return FS_EMU_MENU_RESULT_MENU; } static int input_autofire_function(fs_emu_menu_item *menu_item, void **result_data) { int port = fs_emu_menu_item_get_idata(menu_item); g_fs_uae_input_ports[port].new_autofire_mode = \ !g_fs_uae_input_ports[port].new_autofire_mode; fs_log("[menu] port %d toggle autofire mode %d\n", port, g_fs_uae_input_ports[port].new_autofire_mode); fs_uae_reconfigure_input_ports_amiga(); return FS_EMU_MENU_RESULT_NONE; } static int input_menu_function(fs_emu_menu_item *menu_item, void **result_data) { int port = fs_emu_menu_item_get_idata(menu_item); fs_emu_log("input_menu_function for port %d\n", port); char *str; fs_emu_menu_item *item; fs_emu_menu *menu = fs_emu_menu_new(); menu->idata = port; fs_emu_menu_set_update_function(menu, update_input_menu); item = fs_emu_menu_item_new(); fs_emu_menu_append_item(menu, item); /// TRANSLATORS: This is a menu entry and must not be too long str = fs_strdup_printf(_("Joystick Port %d"), port); fs_emu_menu_item_set_title(item, str); free(str); fs_emu_menu_item_set_type(item, FS_EMU_MENU_ITEM_TYPE_HEADING); item = fs_emu_menu_item_new(); fs_emu_menu_append_item(menu, item); fs_emu_menu_item_set_type(item, FS_EMU_MENU_ITEM_TYPE_MENU); fs_emu_menu_item_set_idata(item, port); fs_emu_menu_item_set_activate_function(item, input_host_menu_function); if (port < 4) { item = fs_emu_menu_item_new(); fs_emu_menu_append_item(menu, item); fs_emu_menu_item_set_title(item, _("Port Settings")); fs_emu_menu_item_set_type(item, FS_EMU_MENU_ITEM_TYPE_HEADING); item = fs_emu_menu_item_new(); fs_emu_menu_append_item(menu, item); fs_emu_menu_item_set_type(item, FS_EMU_MENU_ITEM_TYPE_MENU); fs_emu_menu_item_set_idata(item, port); fs_emu_menu_item_set_activate_function(item, input_amiga_menu_function); // autofire option item = fs_emu_menu_item_new(); fs_emu_menu_append_item(menu, item); fs_emu_menu_item_set_idata(item, port); fs_emu_menu_item_set_activate_function(item, input_autofire_function); } *result_data = menu; return FS_EMU_MENU_RESULT_MENU; } void add_input_item(fs_emu_menu *menu, int index) { fs_emu_menu_item *item; item = fs_emu_menu_item_new(); fs_emu_menu_append_item(menu, item); if (index == 0) { fs_emu_menu_item_set_title(item, _("Joystick Port 0")); } else if (index == 1) { fs_emu_menu_item_set_title(item, _("Joystick Port 1")); } else if (index == 2) { fs_emu_menu_item_set_title(item, _("Joystick Port 2")); } else if (index == 3) { fs_emu_menu_item_set_title(item, _("Joystick Port 3")); } else if (index == 4) { fs_emu_menu_item_set_title(item, _("Joystick Port 4")); if (g_fs_uae_input_ports[4].mode == AMIGA_JOYPORT_NONE) { fs_emu_menu_item_set_enabled(item, 0); } } fs_emu_menu_item_set_type(item, FS_EMU_MENU_ITEM_TYPE_MENU); fs_emu_menu_item_set_idata(item, index); fs_emu_menu_item_set_activate_function(item, input_menu_function); } static void update_input_options_menu(fs_emu_menu *menu) { update_input_item(menu->items[1], 0); update_input_item(menu->items[2], 1); update_input_item(menu->items[4], 2); update_input_item(menu->items[5], 3); update_input_item(menu->items[7], 4); } static int input_options_menu_function(fs_emu_menu_item *menu_item, void **result_data) { fs_emu_log("input_options_menu_function\n"); fs_emu_menu_item *item; fs_emu_menu *menu = fs_emu_menu_new(); fs_emu_menu_set_update_function(menu, update_input_options_menu); item = fs_emu_menu_item_new(); fs_emu_menu_append_item(menu, item); fs_emu_menu_item_set_title(item, _("Joystick Ports")); fs_emu_menu_item_set_type(item, FS_EMU_MENU_ITEM_TYPE_HEADING); add_input_item(menu, 0); add_input_item(menu, 1); item = fs_emu_menu_item_new(); fs_emu_menu_append_item(menu, item); /// TRANSLATORS: This is a menu entry and must not be too long fs_emu_menu_item_set_title(item, _("Parallel Joystick Ports")); fs_emu_menu_item_set_type(item, FS_EMU_MENU_ITEM_TYPE_HEADING); add_input_item(menu, 2); add_input_item(menu, 3); item = fs_emu_menu_item_new(); fs_emu_menu_append_item(menu, item); /// TRANSLATORS: This is a menu entry and must not be too long fs_emu_menu_item_set_title(item, _("Custom Joystick Port")); fs_emu_menu_item_set_type(item, FS_EMU_MENU_ITEM_TYPE_HEADING); add_input_item(menu, 4); *result_data = menu; return FS_EMU_MENU_RESULT_MENU; } void fs_uae_configure_menu() { fs_emu_log("fs_uae_configure_menu\n"); fs_emu_menu_item *item; fs_emu_menu *menu = fs_emu_menu_new(); fs_emu_menu_set_update_function(menu, update_main_menu); item = fs_emu_menu_item_new(); fs_emu_menu_append_item(menu, item); fs_emu_menu_item_set_title(item, _("Emulator Control")); fs_emu_menu_item_set_type(item, FS_EMU_MENU_ITEM_TYPE_HEADING); item = fs_emu_menu_item_new(); fs_emu_menu_append_item(menu, item); fs_emu_menu_item_set_title(item, _("Pause")); fs_emu_menu_item_set_activate_function(item, pause_function); item = fs_emu_menu_item_new(); fs_emu_menu_append_item(menu, item); fs_emu_menu_item_set_title(item, _("Save States")); fs_emu_menu_item_set_activate_function(item, save_states_menu_function); if (fs_config_get_boolean("save_states") == 0) { fs_emu_menu_item_set_enabled(item, 0); } item = fs_emu_menu_item_new(); fs_emu_menu_append_item(menu, item); fs_emu_menu_item_set_title(item, _("More...")); fs_emu_menu_item_set_type(item, FS_EMU_MENU_ITEM_TYPE_MENU); fs_emu_menu_item_set_enabled(item, 0); item = fs_emu_menu_item_new(); fs_emu_menu_append_item(menu, item); fs_emu_menu_item_set_title(item, _("Amiga Control")); fs_emu_menu_item_set_type(item, FS_EMU_MENU_ITEM_TYPE_HEADING); item = fs_emu_menu_item_new(); fs_emu_menu_append_item(menu, item); fs_emu_menu_item_set_title(item, _("Reset Amiga")); fs_emu_menu_item_set_activate_function(item, reset_menu_function); item = fs_emu_menu_item_new(); fs_emu_menu_append_item(menu, item); fs_emu_menu_item_set_title(item, _("More...")); fs_emu_menu_item_set_type(item, FS_EMU_MENU_ITEM_TYPE_MENU); fs_emu_menu_item_set_enabled(item, 0); item = fs_emu_menu_item_new(); fs_emu_menu_append_item(menu, item); fs_emu_menu_item_set_title(item, _("Input Options")); fs_emu_menu_item_set_type(item, FS_EMU_MENU_ITEM_TYPE_HEADING); add_input_item(menu, 0); add_input_item(menu, 1); item = fs_emu_menu_item_new(); fs_emu_menu_append_item(menu, item); fs_emu_menu_item_set_title(item, _("More...")); fs_emu_menu_item_set_type(item, FS_EMU_MENU_ITEM_TYPE_MENU); //fs_emu_menu_item_set_enabled(item, 0); fs_emu_menu_item_set_activate_function(item, input_options_menu_function); item = fs_emu_menu_item_new(); fs_emu_menu_append_item(menu, item); fs_emu_menu_item_set_title(item, _("Removable Media")); fs_emu_menu_item_set_type(item, FS_EMU_MENU_ITEM_TYPE_HEADING); item = fs_emu_menu_item_new(); fs_emu_menu_append_item(menu, item); fs_emu_menu_item_set_title(item, ""); fs_emu_menu_item_set_type(item, FS_EMU_MENU_ITEM_TYPE_MENU); fs_emu_menu_item_set_idata(item, 0); fs_emu_menu_item_set_activate_function(item, media_menu_function); item = fs_emu_menu_item_new(); fs_emu_menu_append_item(menu, item); fs_emu_menu_item_set_title(item, ""); fs_emu_menu_item_set_type(item, FS_EMU_MENU_ITEM_TYPE_MENU); fs_emu_menu_item_set_idata(item, 1); fs_emu_menu_item_set_activate_function(item, media_menu_function); item = fs_emu_menu_item_new(); fs_emu_menu_append_item(menu, item); fs_emu_menu_item_set_title(item, ""); fs_emu_menu_item_set_type(item, FS_EMU_MENU_ITEM_TYPE_MENU); fs_emu_menu_item_set_idata(item, 2); fs_emu_menu_item_set_activate_function(item, media_menu_function); item = fs_emu_menu_item_new(); fs_emu_menu_append_item(menu, item); fs_emu_menu_item_set_title(item, ""); fs_emu_menu_item_set_type(item, FS_EMU_MENU_ITEM_TYPE_MENU); fs_emu_menu_item_set_idata(item, 3); fs_emu_menu_item_set_activate_function(item, media_menu_function); fs_emu_menu_set_current(menu); } fs-uae-2.2.3+dfsg/src/fs-uae/version.c0000644000175000017500000000005012162366654017647 0ustar glaubitzglaubitzconst char *g_fs_uae_version = "2.2.3"; fs-uae-2.2.3+dfsg/src/fs-uae/fs-uae.rc0000644000175000017500000000003412162366654017526 0ustar glaubitzglaubitzicon ICON "icon/fs-uae.ico" fs-uae-2.2.3+dfsg/src/fs-uae/video.c0000644000175000017500000004721012162366654017301 0ustar glaubitzglaubitz#include #include #include #include #include #include "fs-uae.h" //#define MAX_ZOOM_MODES 5 static int g_zoom_mode = 0; static int g_zoom_border = 0; static int g_last_refresh_rate = 0; typedef struct zoom_mode { char *name; char *cname; int x; int y; int w; int h; } zoom_mode; #define CUSTOM_ZOOM_MODE 5 static zoom_mode g_zoom_modes[] = { /// TRANSLATORS: In context "Zoom: Auto" { N_("Auto"), NULL, 0, 0, 0, 0 }, /// TRANSLATORS: In context "Zoom: Full Frame" { N_("Full Frame"), "full", 0, 0, 752, 572 }, { "640x512", NULL, 74, 36, 640, 512 }, { "640x480", NULL, 74, 36, 640, 480 }, { "640x400", NULL, 74, 36, 640, 400 }, { NULL, NULL, 0, 0, 0, 0 }, { NULL, NULL, 0, 0, 0, 0 }, }; int g_fs_uae_video_zoom = 1; struct WindowOverride { int sx; int sy; int sw; int sh; int dx; int dy; int dw; int dh; int ssx; int ssy; int ssw; int ssh; struct WindowOverride* next; }; static struct WindowOverride* g_window_override = NULL; static struct WindowOverride* g_last_window_override = NULL; static int g_frame_seq_no = 0; static fs_emu_video_buffer *g_buffer = NULL; static int g_remember_last_screen = 0; static int g_use_rtg_scanlines = 0; static int g_last_seen_mode_rtg = 0; int read_window_override_int(const char* s, int* pos, int* out) { char temp[4]; int read = 0; while(s[*pos] == ' ') ++(*pos); while (read < 3) { temp[read] = s[*pos]; ++(*pos); ++read; char c= s[*pos]; if (c >= '0' && c <= '9') { continue; } temp[read] = '\0'; if (read == 1) { if (temp[0] == '*') { *out = -1; return 1; } } *out = atoi(temp); return 1; } // read failed return 0; } int read_window_override(const char* s, int* pos) { while(s[*pos] == ' ') ++(*pos); int sx, sy, sw, sh; int dx, dy, dw, dh; int ssx = 0, ssy = 0, ssw = 0, ssh = 0; if (!read_window_override_int(s, pos, &sx)) return 0; if (!read_window_override_int(s, pos, &sy)) return 0; if (!read_window_override_int(s, pos, &sw)) return 0; if (!read_window_override_int(s, pos, &sh)) return 0; while(s[*pos] == ' ') ++(*pos); if (s[(*pos)] == '[') { ++(*pos); if (!read_window_override_int(s, pos, &ssx)) return 0; if (!read_window_override_int(s, pos, &ssy)) return 0; if (!read_window_override_int(s, pos, &ssw)) return 0; if (!read_window_override_int(s, pos, &ssh)) return 0; while(s[*pos] == ' ') ++(*pos); if (!s[(*pos)++] == ']') return 0; } if (!s[(*pos)++] == '=') return 0; if (s[(*pos)++] == '>') ++(*pos); if (!read_window_override_int(s, pos, &dx)) return 0; if (!read_window_override_int(s, pos, &dy)) return 0; if (!read_window_override_int(s, pos, &dw)) return 0; if (!read_window_override_int(s, pos, &dh)) return 0; fs_emu_log("viewport transformation: %3d %3d %3d %3d => %3d %3d %3d %3d\n", sx, sy, sw, sh, dx, dy, dw, dh); struct WindowOverride* wo = (struct WindowOverride*) malloc(sizeof(struct WindowOverride)); wo->sx = sx; wo->sy = sy; wo->sw = sw; wo->sh = sh; wo->dx = dx; wo->dy = dy; wo->dw = dw; wo->dh = dh; wo->ssx = ssx; wo->ssy = ssy; wo->ssw = ssw; wo->ssh = ssh; wo->next = NULL; if (g_last_window_override == NULL) { g_window_override = wo; } else { g_last_window_override->next = wo; } g_last_window_override = wo; return 1; } void init_window_overrides() { const char *s = fs_config_get_const_string("viewport"); if (s == NULL) { return; } int pos = 0; while (1) { int result = read_window_override(s, &pos); if (!result) { fs_emu_log("error parsing wiewport transformation\n"); } while(s[pos] == ' ') ++(pos); int c = s[(pos)++]; if (c == ';') { continue; } else if (c == ',') { continue; } else if (c == '\0') { break; } else { fs_emu_warning("Unexpected byte (%d) while parsing " "viewport option\n", c); return; } } } static int ucx = 0, ucy = 0, ucw = 0, uch = 0; static int rd_width, rd_height; static int modify_coordinates(int *cx, int *cy, int *cw, int *ch) { int changed = 0; int ocx = *cx; int ocy = *cy; int ocw = *cw; int och = *ch; if (*cx == 114 && *cy == 96 && *cw == 560 && *ch == 384) { fs_log("* amiga 600 kickstart screen?\n"); *cx = 74; *cy = 92; *cw = 640; *ch = 400; changed = 1; } else if (*cx == 114 && *cy == 99 && *cw == 560 && *ch == 384) { fs_log("* amiga 1200 kickstart screen?\n"); *cx = 74; *cy = 92; *cw = 640; *ch = 400; changed = 1; } // The following interfered with autoscaling for Jim Power /* else if (*cx == 74 && *cy == 30 && *cw == 640 && *ch == 518) { fs_log("* workbench 1.3/2.0 screen?\n"); *cx = 74; *cy = 36; *cw = 640; *ch = 512; changed = 1; } else if (*cx == 74 && *cy == 28 && *cw == 640 && *ch == 520) { fs_log("* workbench 1.3/2.0 screen?\n"); *cx = 74; *cy = 36; *cw = 640; *ch = 512; changed = 1; } */ else if (*cx == 6 && *cy == 36 && *cw == 724 && *ch == 512) { fs_log("* workbench screen with too much border?\n"); *cx = 74; *cy = 36; *cw = 640; *ch = 512; changed = 1; } else if (*cx == 6 && *cy == 6 && *cw == 724 && *ch == 566) { fs_log("* workbench screen with overscan incorrectly placed?\n"); *cx = 2; *cy = 6; *cw = 724; *ch = 566; changed = 1; } else if (*cx == 10 && *cy == 7 && *cw == 716 && *ch == 566) { fs_log("* amiga cd32 boot screen?\n"); *cx = 16; *cy = 6; *cw = 704; *ch = 566; changed = 1; } else if (*cx == 10 && *cy == 6 && *cw == 716 && *ch == 566) { fs_log("* amiga cd32 boot screen?\n"); *cx = 16; *cy = 6; *cw = 704; *ch = 566; changed = 1; } else if (*cx == 6 && *cy == 96 && *cw == 724 && *ch == 476) { fs_log("* amiga cd32 boot screen (booting CD)\n"); *cx = 16; *cy = 6; *cw = 704; *ch = 566; changed = 1; } else if (*cx == 10 && *cy == 96 && *cw == 716 && *ch == 476) { fs_log("* amiga cd32 boot screen (booting CD)\n"); *cx = 16; *cy = 6; *cw = 704; *ch = 566; changed = 1; } else if (*cx == 6 && *cy == 82 && *cw == 724 && *ch == 490) { fs_log("* amiga cd32 boot screen (booting Arcade Pool CD)\n"); *cx = 16; *cy = 6; *cw = 704; *ch = 566; changed = 1; } else if (*cx + *cw == 698 && *cy == 6 && *ch == 566) { fs_log("* amiga cd32 menu\n"); *cx = 16; *cy = 6; *cw = 704; *ch = 566; changed = 1; } if (changed) { fs_log("* %3d %3d %3d %3d [ %3d %3d %3d %3d ]\n", *cx, *cy, *cw, *ch, ocx, ocy, ocw, och); printf("* %3d %3d %3d %3d [ %3d %3d %3d %3d ]\n", *cx, *cy, *cw, *ch, ocx, ocy, ocw, och); } return changed; } #define SUBSCAN #ifdef SUBSCAN static void narrow_rect(RenderData* rd, int *nx, int *ny, int *nw, int *nh) { if (rd->bpp != 4) { // not implemented for 16-bit video. return; } #if 0 int64_t t1 = fs_get_monotonic_time(); #endif int x = *nx; int y = *ny; int w = *nw; int h = *nh; uint32_t *ibuffer = (uint32_t *) rd->pixels; uint32_t *p1, *p; uint32_t cmpval; p1 = ibuffer + y * rd->width + x; cmpval = 0; for (int i = 0; i < h; i++) { cmpval += *p1; } while (w > 0) { p = p1; uint32_t val = 0; for (int i = 0; i < h; i++) { val = val + *p; p += rd->width; } if (val != cmpval) { break; } x = x + 1; w = w - 1; p1 += 1; } p1 = ibuffer + y * rd->width + x + w - 1; cmpval = 0; for (int i = 0; i < h; i++) { cmpval += *p1; } while (w > 0) { p = p1; uint32_t val = 0; for (int i = 0; i < h; i++) { val = val + *p; p += rd->width; } if (val != cmpval) { break; } w = w - 1; p1 -= 1; } p1 = ibuffer + y * rd->width + x; cmpval = 0; for (int i = 0; i < w; i++) { cmpval += *p1; } while (h > 0) { p = p1; uint32_t val = 0; for (int i = 0; i < w; i++) { val = val + *p; p++; } if (val != cmpval) { break; } y = y + 1; h = h - 1; p1 += rd->width; } p1 = ibuffer + (y + h - 1) * rd->width + x; cmpval = 0; for (int i = 0; i < w; i++) { cmpval += *p1; } while (h > 0) { p = p1; uint32_t val = 0; for (int i = 0; i < w; i++) { val = val + *p; p++; } if (val != cmpval) { break; } h = h - 1; p1 -= rd->width; } static int px = 0, py = 0, pw = 0, ph = 0; if (x != px || y != py || w != pw || h != ph) { fs_log(" sub: %3d %3d %3d %3d\n", x, y, w, h); printf(" sub: %3d %3d %3d %3d\n", x, y, w, h); px = x; py = y; pw = w; ph = h; } *nx = x; *ny = y; *nw = w; *nh = h; #if 0 int64_t t2 = fs_get_monotonic_time(); int64_t diff = t2 - t1; printf("in %d us\n", (int) diff); #endif } #endif static void render_screen(RenderData* rd) { #if 0 static int64_t last_time = 0; int64_t t = fs_emu_monotonic_time(); int dt = (int) (t - last_time); // if we loose a frame in vsync mode, we should have a delay of about // 40 ms since last frame if (dt > 35 * 1000) { printf("fs-uae:render_screen dt %0.2f\n", dt / 1000.0); } last_time = t; #endif rd_width = rd->width; rd_height = rd->height; g_buffer->seq = g_frame_seq_no++; g_buffer->width = rd_width; g_buffer->height = rd_height; g_buffer->flags = 0; if (rd->flags & AMIGA_VIDEO_RTG_MODE) { g_buffer->flags = FS_EMU_FORCE_VIEWPORT_CROP_FLAG; if (g_use_rtg_scanlines == 0) { g_buffer->flags |= FS_EMU_NO_SCANLINES_FLAG; } } memcpy(g_buffer->line, rd->line, AMIGA_MAX_LINES); fs_emu_video_buffer_update_lines(g_buffer); static int lastcx = 0, lastcy = 0, lastcw = 0, lastch = 0; static int lastsubscan = 0; // crop rectangle for autoscale int cx = rd->limit_x; int cy = rd->limit_y; int cw = rd->limit_w; int ch = rd->limit_h; // normalize coordinates to high-resolution, interlaced pixels // before viewport transformations are applied int hshift = (rd->flags & AMIGA_VIDEO_LOW_RESOLUTION) ? 1 : 0; int vshift = (!(rd->flags & AMIGA_VIDEO_LINE_DOUBLING)) ? 1 : 0; cx <<= hshift; cw <<= hshift; cy <<= vshift; ch <<= vshift; int cchange = lastcx != cx || lastcy != cy || lastcw != cw || lastch != ch; if (cchange || lastsubscan) { if (cchange) { lastcx = cx; lastcy = cy; lastcw = cw; lastch = ch; } lastsubscan = 0; struct WindowOverride* wo = NULL; #ifdef SUBSCAN int ncx, ncy, ncw, nch; int have_narrowed = 0; #endif if (cchange) { fs_log("auto: %3d %3d %3d %3d\n", cx, cy, cw, ch); printf("auto: %3d %3d %3d %3d\n", cx, cy, cw, ch); } modify_coordinates(&cx, &cy, &cw, &ch); //if (!modify_coordinates(&cx, &cy, &cw, &ch)) { if (1) { wo = g_window_override; while (wo != NULL) { if ((wo->sx == -1 || wo->sx == cx) && (wo->sy == -1 || wo->sy == cy) && (wo->sw == -1 || wo->sw == cw) && (wo->sh == -1 || wo->sh == ch)) { ucx = wo->dx == -1 ? cx : wo->dx; ucy = wo->dy == -1 ? cy : wo->dy; ucw = wo->dw == -1 ? cw : wo->dw; uch = wo->dh == -1 ? ch : wo->dh; #ifdef SUBSCAN if (wo->ssx != 0) { lastsubscan = 1; if (!have_narrowed) { ncx = cx; ncy = cy; ncw = cw; nch = ch; narrow_rect(rd, &ncx, &ncy, &ncw, &nch); have_narrowed = 1; } if ((wo->ssx == -1 || wo->ssx == ncx) && (wo->ssy == -1 || wo->ssy == ncy) && (wo->ssw == -1 || wo->ssw == ncw) && (wo->ssh == -1 || wo->ssh == nch)) { ucx = wo->dx == -1 ? ncx : wo->dx; ucy = wo->dy == -1 ? ncy : wo->dy; ucw = wo->dw == -1 ? ncw : wo->dw; uch = wo->dh == -1 ? nch : wo->dh; break; } // continue searching wo = wo->next; continue; } #endif /* fs_log("%3d %3d %3d %3d [ %3d %3d %3d %3d ]\n", ucx, ucy, ucw, uch, cx, cy, cw, ch); printf("%3d %3d %3d %3d [ %3d %3d %3d %3d ]\n", ucx, ucy, ucw, uch, cx, cy, cw, ch); */ break; } wo = wo->next; } } if (wo == NULL) { ucx = cx; ucy = cy; ucw = cw; uch = ch; /* fs_log("%3d %3d %3d %3d\n", ucx, ucy, ucw, uch); printf("%3d %3d %3d %3d\n", ucx, ucy, ucw, uch); */ } static int lucx = 0, lucy = 0, lucw = 0, luch = 0; if (ucx != lucx || ucy != lucy || ucw != lucw || uch != luch) { fs_log(" = %3d %3d %3d %3d\n", ucx, ucy, ucw, uch); printf(" = %3d %3d %3d %3d\n", ucx, ucy, ucw, uch); lucx = ucx; lucy = ucy; lucw = ucw; luch = uch; } } float tx0, ty0, tx1, ty1; //source buffer coords fs_emu_rect crop; crop.x = 0; crop.y = 0; crop.w = rd_width; crop.h = rd_height; if (rd->flags & AMIGA_VIDEO_RTG_MODE) { // no cropping in RTG mode } else { if (g_fs_uae_video_zoom && ucw > 0 && uch > 0) { // autoscale if (g_zoom_mode == 0) { crop.x = ucx >> hshift; crop.w = ucw >> hshift; crop.y = ucy >> vshift; crop.h = uch >> vshift; } } if (g_zoom_mode > 0) { crop.x = g_zoom_modes[g_zoom_mode].x >> hshift; crop.w = g_zoom_modes[g_zoom_mode].w >> hshift; crop.y = g_zoom_modes[g_zoom_mode].y >> vshift; crop.h = g_zoom_modes[g_zoom_mode].h >> vshift; } if (g_zoom_border) { crop.x -= 10 >> hshift; crop.w += 20 >> hshift; crop.y -= 10 >> vshift; crop.h += 20 >> vshift; } if (crop.x < 0) { crop.x = 0; } if (crop.y < 0) { crop.y = 0; } if (crop.x + crop.w > rd_width) { crop.w = rd_width - crop.x; } if (crop.y + crop.h > rd_height) { crop.h = rd_height - crop.y; } } g_buffer->crop = crop; g_last_seen_mode_rtg = rd->flags & AMIGA_VIDEO_RTG_MODE; g_last_refresh_rate = rd->refresh_rate; } static void *grow_buffer(int width, int height) { //printf("growing buffer: %p\n", g_buffer->data); fs_emu_video_buffer_grow(g_buffer, width, height); return g_buffer->data; } #define TURBO_FRAME_RATE 10000 static void display_screen() { static int64_t last_time = 0; int64_t t = fs_emu_monotonic_time(); if (last_time > 0) { int dt = (t - last_time) / 1000; //printf("%d\n", dt); } fs_emu_video_buffer_set_current(g_buffer); if (g_last_refresh_rate == -1) { if (fs_emu_get_video_frame_rate() != TURBO_FRAME_RATE) { fs_emu_notification(45194412, _("Warp mode enabled")); } fs_emu_set_video_frame_rate(TURBO_FRAME_RATE); } else { if (fs_emu_get_video_frame_rate() == TURBO_FRAME_RATE) { fs_emu_notification(45194412, _("Warp mode disabled")); } fs_emu_set_video_frame_rate(g_last_refresh_rate); } g_buffer = fs_emu_video_buffer_get_available(g_remember_last_screen); //printf("new render buffer: %p\n", g_buffer->data); amiga_set_render_buffer(g_buffer->data, g_buffer->size, !g_remember_last_screen, grow_buffer); last_time = fs_emu_monotonic_time(); } static void toggle_zoom(int flags) { if (g_last_seen_mode_rtg) { fs_emu_notification(1511162016, _("Zoom is disabled in RTG mode")); return; } if (flags == 1) { g_zoom_border = !g_zoom_border; } else { //if (g_zoom_mode < MAX_ZOOM_MODES - 1) { if (g_zoom_modes[g_zoom_mode + 1].name) { g_zoom_mode += 1; } else { g_zoom_mode = 0; } } if (g_zoom_border) { fs_emu_notification(1511162016, _("Zoom: %s + Border"), _(g_zoom_modes[g_zoom_mode].name)); } else { fs_emu_notification(1511162016, _("Zoom: %s"), _(g_zoom_modes[g_zoom_mode].name)); } } void fs_uae_init_video(void) { fs_log("fs_uae_init_video\n"); init_window_overrides(); fs_emu_video_buffer_init(1024, 1024, 0); g_buffer = fs_emu_video_buffer_get_available(g_remember_last_screen); amiga_set_render_buffer(g_buffer->data, g_buffer->size, !g_remember_last_screen, grow_buffer); amiga_set_render_function(render_screen); amiga_set_display_function(display_screen); if (fs_config_get_boolean("rtg_scanlines") == 1) { g_use_rtg_scanlines = 1; } fs_emu_set_toggle_zoom_function(toggle_zoom); char *value = fs_config_get_string("zoom"); if (value) { char *c = value; while (*c) { if (*c == '+') { if (fs_ascii_strcasecmp(c + 1, "border") == 0) { g_zoom_border = 1; } *c = '\0'; break; } c++; } zoom_mode *z = g_zoom_modes; int k = 0; while (z->name) { //printf(":%s:%s\n", z->name, value); if (fs_ascii_strcasecmp(z->name, value) == 0) { g_zoom_mode = k; break; } else if (z->cname && fs_ascii_strcasecmp(z->cname, value) == 0) { g_zoom_mode = k; break; } k++; z++; } free(value); } const char* cvalue = fs_config_get_const_string("theme_zoom"); if (cvalue) { zoom_mode *z = g_zoom_modes + CUSTOM_ZOOM_MODE; //char *name = malloc(strlen(cvalue) + 1); int x, y, w, h; //printf("---------\n"); //if (sscanf(value, "%s,%d,%d,%d,%d", &name, &x, &y, &w, &h) == 5) { // printf("---------\n"); if (sscanf(cvalue, "%d,%d,%d,%d", &x, &y, &w, &h) == 4) { z->name = fs_strdup("Theme"); z->x = x; z->y = y; z->w = w; z->h = h; } g_zoom_mode = CUSTOM_ZOOM_MODE; } } fs-uae-2.2.3+dfsg/src/fs-uae/mouse.c0000644000175000017500000000022212162366654017313 0ustar glaubitzglaubitz#include #include #include "fs-uae.h" /* void fs_uae_init_mouse(void) { fs_emu_log("STUB: fs_uae_init_mouse\n"); } */ fs-uae-2.2.3+dfsg/src/fs-uae/uae_config.c0000644000175000017500000000515412162366654020273 0ustar glaubitzglaubitz#include #include #include #include #include "fs-uae.h" #define MAX_LEN 1024 static void parse_option(char *key, char *value) { static int first = 1; if (key[0] == 'u' && key[1] == 'a' && key[2] == 'e' && key[3] == '_') { if (first) { fs_log("WARNING: custom uae_* options used! Your warranty is " "now void! ;)\n"); fs_log("(not that there was any warranty before...)\n"); first = 0; } fs_strchomp(value); //amiga_set_hardware_option(key + 4, value); amiga_set_option(key + 4, value); } } static void read_custom_uae_options_from_file(FILE* f) { char *key = malloc(MAX_LEN); char *value = malloc(MAX_LEN); char c; int mode = 0; int index = 0; int bytes_read = 1; while (bytes_read) { bytes_read = fread(&c, 1, 1, f); if (bytes_read != 1) { c = '\n'; } if (mode == 0) { // reading key if (c == '=') { key[index] = '\0'; index = 0; mode = 1; } else if (c == '\n') { // invalid state, really index = 0; } else if (c != ' ' && index < MAX_LEN - 1) { key[index++] = c; } } else { // reading value if (c == '\n') { value[index] = '\0'; index = 0; mode = 0; parse_option(key, value); } else if (mode == 1 && c != ' ') { mode = 2; } if (mode == 2 && index < MAX_LEN - 1) { value[index++] = c; } } } free(key); free(value); } void fs_uae_read_custom_uae_options(int argc, char **argv) { fs_log("read_custom_uae_options\n"); if (g_fs_uae_config_file_path) { FILE *f = fs_fopen(g_fs_uae_config_file_path, "rb"); read_custom_uae_options_from_file(f); fclose(f); } for (int i = 0; i < argc; i++) { char *arg = argv[i]; if (!fs_str_has_prefix(arg, "--")) { continue; } char *key = arg + 2; char *value = strchr(arg, '='); if (value) { char *k = fs_strndup(key, value - key); fs_strdelimit (k, "-", '_'); char *v = fs_strdup(value + 1); char *key_lower = fs_ascii_strdown(k, -1); free(k); parse_option(key_lower, v); free(key_lower); free(v); } } } fs-uae-2.2.3+dfsg/src/fs-uae/paths.c0000644000175000017500000004315312162366654017314 0ustar glaubitzglaubitz#include #include #include #include #include #include #include #include "fs-uae.h" #define MAX_PATHS 8 struct multipath { const char *path[MAX_PATHS]; }; static struct multipath g_paths[5] = {}; const char* fs_uae_home_dir() { static const char* path = NULL; if (path == NULL) { path = fs_get_home_dir(); if (path == NULL) { fs_log("WARNING: did not find home directory\n"); path = fs_strdup(""); } fs_log("- using home directory \"%s\"\n", path); } return path; } const char* fs_uae_exe_dir() { static const char* path = NULL; if (path == NULL) { char *app_dir = (char*) malloc(MAX_PATH); fs_get_application_exe_dir(app_dir, MAX_PATH); char *p = fs_strdup(app_dir); free(app_dir); path = p; fs_log("- using $exe directory \"%s\"\n", path); } return path; } const char* fs_uae_app_dir() { static const char* path = NULL; if (path == NULL) { char *app_dir = (char*) malloc(MAX_PATH); fs_get_application_exe_dir(app_dir, MAX_PATH); char *p = fs_strdup(app_dir); free(app_dir); path = p; #ifdef MACOSX char *base_name = fs_path_get_basename(p); if (strcmp(base_name, "MacOS") == 0) { char *temp; temp = p; p = fs_path_get_dirname(p); free(temp); temp = p; p = fs_path_get_dirname(p); free(temp); temp = p; p = fs_path_get_dirname(p); free(temp); path = p; } free(base_name); #endif fs_log("- using $app directory \"%s\"\n", path); } return path; } const char* fs_uae_documents_dir() { static const char* path = NULL; if (path == NULL) { path = fs_get_documents_dir(); if (path == NULL) { fs_log("WARNING: did not find documents directory\n"); path = fs_uae_home_dir(); } int result = fs_mkdir_with_parents(path, 0755); if (result == -1) { char *msg = fs_strdup_printf("Documents directory does not " "exist: %s", path); fs_emu_warning(msg); free(msg); path = fs_uae_home_dir(); } fs_log("- using documents directory \"%s\"\n", path); } return path; } static char* read_custom_path(const char *key) { char *key_path = fs_path_join(fs_get_user_config_dir(), "fs-uae", key, NULL); fs_log("- checking %s\n", key_path); if (fs_path_is_file(key_path)) { FILE * f = fopen(key_path, "rb"); free(key_path); if (f == NULL) { fs_log("- file exists but could not open\n"); return NULL; } char *buffer = (char *) malloc(PATH_MAX + 1); int read_bytes = fread(buffer, 1, PATH_MAX, f); if (!feof(f)) { fs_log("- did not get EOF\n"); free(buffer); return NULL; } buffer[read_bytes] = '\0'; fs_strchomp(buffer); fs_log("- read from file: %s\n", buffer); char *result = fs_uae_expand_path(buffer); free(buffer); fs_log("- expanded path: %s\n", result); return result; } return NULL; } const char* fs_uae_base_dir() { static const char* path = NULL; if (path) { return path; } path = fs_config_get_const_string("base_dir"); if (path) { fs_log("base specified via base_dir option\n"); path = fs_uae_expand_path(path); } if (path == NULL) { // FIXME: deprecated const char *env_path = getenv("FS_UAE_BASE_DIR"); if (env_path && env_path[0]) { path = env_path; fs_log("base specified via FS_UAE_BASE_DIR\n"); fs_emu_deprecated("FS_UAE_BASE_DIR is deprecated"); } } if (path == NULL) { path = read_custom_path("base-dir"); } if (path == NULL) { fs_log("- using base dir $DOCUMENTS/FS-UAE\n"); path = fs_path_join(fs_uae_documents_dir(), "FS-UAE", NULL); } int result = fs_mkdir_with_parents(path, 0755); if (result == -1) { char *msg = fs_strdup_printf("Could not create base directory " "at %s", path); fs_emu_warning(msg); free(msg); path = fs_uae_documents_dir(); } fs_log("- using base ($BASE / $FSUAE) directory \"%s\"\n", path); return path; } static char *create_default_dir(const char *name, const char *key1, const char *key2, const char *dashed_key) { char *path = NULL; if (path == NULL && key1 != NULL) { path = fs_config_get_string(key1); } if (path == NULL && key2 != NULL) { path = fs_config_get_string(key2); } if (path == NULL) { path = read_custom_path(dashed_key); } if (path == NULL) { path = fs_path_join(fs_uae_base_dir(), name, NULL); } char *expanded_path = fs_uae_expand_path_and_free(path); path = fs_uae_resolve_path(expanded_path, FS_UAE_DIR_PATHS); free(expanded_path); int result = fs_mkdir_with_parents(path, 0755); if (result == -1) { char *msg = fs_strdup_printf("Could not create %s directory", name); fs_emu_warning(msg); free(msg); path = fs_strdup(fs_uae_base_dir()); } fs_log("- using \"%s\" directory \"%s\"\n", name, path); return path; } const char *fs_uae_kickstarts_dir() { static const char *path = NULL; if (path == NULL) { path = create_default_dir("Kickstarts", "kickstarts_dir", "roms_dir", "kickstarts-dir"); } return path; } const char *fs_uae_configurations_dir() { static const char *path = NULL; if (path == NULL) { path = create_default_dir("Configurations", NULL, NULL, "configurations-dir"); } return path; } /* const char *fs_uae_flash_memory_dir() { static const char *path = NULL; if (path == NULL) { path = create_default_dir("Flash Memory", "flash_memory_dir", "state_dir"); } return path; } */ const char *fs_uae_save_states_dir() { static const char *path = NULL; if (path == NULL) { path = create_default_dir("Save States", "save_states_dir", NULL, "save-states-dir"); } return path; } const char *fs_uae_state_dir_path() { static const char *path = NULL; if (path == NULL) { fs_log("fs_uae_state_dir:\n"); path = fs_config_get_const_string("state_dir"); if (path && path[0]) { fs_log("state_dir was explicitly set to: %s\n", path); char *expanded_path = fs_uae_expand_path(path); path = fs_uae_resolve_path(expanded_path, FS_UAE_DIR_PATHS); free(expanded_path); return path; } const char *base = fs_uae_save_states_dir(); fs_log("save_states_dir: %s\n", base); const char *state_dir_name = fs_config_get_const_string( "state_dir_name"); if (!state_dir_name || !state_dir_name[0]) { if (g_fs_uae_config_file_path) { char *n = fs_path_get_basename(g_fs_uae_config_file_path); for (int i = strlen(n) - 1; i >= 0; i--) { if (n[i] == '.') { n[i] = '\0'; break; } } state_dir_name = fs_strdup(n); free(n); } if (!state_dir_name || !state_dir_name[0]) { state_dir_name = "Default"; } fs_log("save_dir_name not set, using %s\n", state_dir_name); } path = fs_path_join(base, state_dir_name, NULL); } return path; } const char *fs_uae_state_dir() { static const char *path = NULL; if (path == NULL) { path = fs_uae_state_dir_path(); if (!path || !path[0]) { path = fs_uae_base_dir(); fs_log("reverting state dir to: %s\n", path); } fs_log("- using state dir %s\n", path); int result = fs_mkdir_with_parents(path, 0755); if (result == -1) { fs_emu_warning("Could not create state directory"); path = fs_uae_base_dir(); } fs_log("final state dir path: %s\n", path); } return path; } const char *fs_uae_cdroms_dir() { static const char *path = NULL; if (path == NULL) { path = create_default_dir("CD-ROMs", "cdroms_dir", NULL, "cdroms-dir"); } return path; } const char *fs_uae_hard_drives_dir() { static const char *path = NULL; if (path == NULL) { path = create_default_dir("Hard Drives", "hard_drives_dir", NULL, "hard-drives-dir"); } return path; } const char *fs_uae_floppies_dir() { static const char *path = NULL; if (path == NULL) { path = create_default_dir("Floppies", "floppies_dir", NULL, "floppies-dir"); } return path; } const char *fs_uae_controllers_dir() { static const char *path = NULL; if (path == NULL) { path = create_default_dir("Controllers", "controllers_dir", NULL, "controllers-dir"); } return path; } const char *fs_uae_logs_dir() { static const char *path = NULL; if (path == NULL) { path = create_default_dir("Logs", "logs_dir", NULL, "logs-dir"); } return path; } const char *fs_uae_themes_dir() { static const char *path = NULL; if (path == NULL) { path = create_default_dir("Themes", "themes_dir", NULL, "themes-dir"); } return path; } char *fs_uae_expand_path(const char* path) { char* lower = fs_ascii_strdown(path, -1); int replace = 0; const char *replace_with = NULL; if (fs_str_has_prefix(lower, "~/") || fs_str_has_prefix(lower, "~\\")) { replace = 2; replace_with = fs_uae_home_dir(); } if (fs_str_has_prefix(lower, "$home/") || fs_str_has_prefix(lower, "$home\\")) { replace = 6; replace_with = fs_uae_home_dir(); } if (fs_str_has_prefix(lower, "$app/") || fs_str_has_prefix(lower, "$app\\")) { replace = 5; replace_with = fs_uae_app_dir(); } if (fs_str_has_prefix(lower, "$exe/") || fs_str_has_prefix(lower, "$exe\\")) { replace = 5; replace_with = fs_uae_exe_dir(); } if (fs_str_has_prefix(lower, "$fsuae/") || fs_str_has_prefix(lower, "$fsuae\\")) { replace = 7; replace_with = fs_uae_base_dir(); } if (fs_str_has_prefix(lower, "$base/") || fs_str_has_prefix(lower, "$base\\")) { replace = 6; replace_with = fs_uae_base_dir(); } if (fs_str_has_prefix(lower, "$documents/") || fs_str_has_prefix(lower, "$documents\\")) { replace = 11; replace_with = fs_uae_documents_dir(); } if (fs_str_has_prefix(lower, "$config/") || fs_str_has_prefix(lower, "$config\\")) { replace = 8; replace_with = g_fs_uae_config_dir_path; } free(lower); if (replace && replace_with) { const char *src = path + replace; return fs_path_join(replace_with, src, NULL); } else { return fs_strdup(path); } } char *fs_uae_expand_path_and_free(char *path) { char *p = fs_uae_expand_path(path); free(path); return p; } static char* g_fs_uae_state_base_name = NULL; const char *fs_uae_get_state_base_name() { return g_fs_uae_state_base_name; } void fs_uae_set_state_base_name(const char *base_name) { g_fs_uae_state_base_name = fs_strdup(base_name); } void fs_uae_configure_directories() { char *path; for (int i = 0; i < 10; i++) { char *src_name = fs_strdup_printf("fs-uae-state_%d.uss", i); char *src = fs_path_join(fs_uae_state_dir(), src_name, NULL); free(src_name); char *dst_name = fs_strdup_printf("Saved State %d.uss", i); char *dst = fs_path_join(fs_uae_state_dir(), dst_name, NULL); free(dst_name); if (fs_path_exists(src)) { fs_log("renaming file %s to %s\n", src, dst); fs_rename(src, dst); } free(src); free(dst); } char *state_base_name = fs_path_join(fs_uae_state_dir(), "Saved State", NULL); fs_uae_set_state_base_name(state_base_name); /* path = fs_path_join(fs_uae_state_dir(), "Autoload State.uss", NULL); if (fs_path_exists(path)) { fs_log("found autoload state at %s\n", path); amiga_set_option("statefile", path); } free(path); */ /* path = fs_strconcat(state_base_name, ".uss", NULL); amiga_set_option("statefile_name", path); free(path); */ path = fs_strconcat(state_base_name, ".uss", NULL); amiga_set_option("statefile", path); free(path); if (g_fs_uae_amiga_model == MODEL_CD32) { // legacy file name path = fs_path_join(fs_uae_state_dir(), "cd32.nvr", NULL); if (!fs_path_exists(path)) { free(path); // new file name path = fs_path_join(fs_uae_state_dir(), "CD32 Storage.nvr", NULL); } amiga_set_option("flash_file", path); free(path); } else if (g_fs_uae_amiga_model == MODEL_CDTV) { // legacy file name path = fs_path_join(fs_uae_state_dir(), "cdtv.nvr", NULL); if (!fs_path_exists(path)) { free(path); // new file name path = fs_path_join(fs_uae_state_dir(), "CDTV Storage.nvr", NULL); } amiga_set_option("flash_file", path); free(path); } amiga_set_save_image_dir(fs_uae_state_dir()); free(state_base_name); } static void fix_separators(char *path) { #ifdef WINDOWS char *p = path; while (*p) { if (*p == '\\') { *p = '/'; } p++; } #endif } char *fs_uae_resolve_path(const char *name, int type) { if (name[0] == '\0') { fs_log("resolve_path (empty string)\n"); return fs_strdup(""); } else if (fs_path_is_absolute(name)) { fs_log("resolve_path %s (absolute)\n", name); char *path = fs_strdup(name); fix_separators(path); return path; } else { fs_log("resolve_path %s (relative)\n", name); for (int i = 0; i < MAX_PATHS; i++) { if (!g_paths[type].path[i] || g_paths[type].path[i][0] == '\0') { continue; } char *path = fs_path_join(g_paths[type].path[i], name, NULL); fs_log("checking %s\n", path); if (fs_path_exists(path)) { fs_log("- found %s\n", path); fix_separators(path); return path; } free(path); } } fs_log("WARNING: did not find path\n", name); char *path = fs_strdup(name); fix_separators(path); return path; } char *fs_uae_resolve_path_and_free(char *name, int type) { char *result = fs_uae_resolve_path(name, type); free(name); return result; } void fs_uae_set_uae_paths() { fs_log("fs_uae_set_uae_paths\n"); amiga_set_paths(g_paths[FS_UAE_ROM_PATHS].path, g_paths[FS_UAE_FLOPPY_PATHS].path, g_paths[FS_UAE_CD_PATHS].path, g_paths[FS_UAE_HD_PATHS].path); // find path for built-in drive sounds char *path = fs_get_program_data_file("floppy_sounds"); if (path) { fs_log("found \"built-in\" driveclick directory at %s\n", path); amiga_set_builtin_driveclick_path(path); free(path); } else { fs_log("did not find \"built-in\" driveclick directory\n"); } // find path for custom drive sounds path = fs_path_join(fs_uae_base_dir(), "Floppy Sounds", NULL); amiga_set_floppy_sounds_dir(path); free(path); } void fs_uae_init_path_resolver() { int k; // current working directory should always come first (index 0) k = 0; g_paths[FS_UAE_DIR_PATHS].path[k++] = fs_strdup("."); if (g_fs_uae_config_dir_path) { g_paths[FS_UAE_DIR_PATHS].path[k++] = fs_strdup( g_fs_uae_config_dir_path); } // current working directory should always come first (index 0) k = 0; g_paths[FS_UAE_FLOPPY_PATHS].path[k++] = fs_strdup("."); if (g_fs_uae_config_dir_path) { g_paths[FS_UAE_FLOPPY_PATHS].path[k++] = fs_strdup( g_fs_uae_config_dir_path); } // then add the default floppies dir if (fs_uae_floppies_dir()) { g_paths[FS_UAE_FLOPPY_PATHS].path[k++] = fs_strdup( fs_uae_floppies_dir()); } // similarly for other path types k = 0; g_paths[FS_UAE_CD_PATHS].path[k++] = fs_strdup("."); if (g_fs_uae_config_dir_path) { g_paths[FS_UAE_CD_PATHS].path[k++] = fs_strdup( g_fs_uae_config_dir_path); } if (fs_uae_cdroms_dir()) { g_paths[FS_UAE_CD_PATHS].path[k++] = fs_strdup( fs_uae_cdroms_dir()); } k = 0; g_paths[FS_UAE_HD_PATHS].path[k++] = fs_strdup("."); if (g_fs_uae_config_dir_path) { g_paths[FS_UAE_HD_PATHS].path[k++] = fs_strdup( g_fs_uae_config_dir_path); } if (fs_uae_hard_drives_dir()) { g_paths[FS_UAE_HD_PATHS].path[k++] = fs_strdup( fs_uae_hard_drives_dir()); } k = 0; g_paths[FS_UAE_ROM_PATHS].path[k++] = fs_strdup("."); if (g_fs_uae_config_dir_path) { g_paths[FS_UAE_ROM_PATHS].path[k++] = fs_strdup( g_fs_uae_config_dir_path); } if (fs_uae_kickstarts_dir()) { g_paths[FS_UAE_ROM_PATHS].path[k++] = fs_strdup( fs_uae_kickstarts_dir()); } } fs-uae-2.2.3+dfsg/src/fs-uae/joystick.c0000644000175000017500000003552412162366654020037 0ustar glaubitzglaubitz#include #include #include #include #include "fs-uae.h" fs_uae_input_port g_fs_uae_input_ports[FS_UAE_NUM_INPUT_PORTS] = {}; static fs_emu_input_mapping g_joystick_mappings[][FS_UAE_MAX_PORT_ACTIONS] = { // joystick in joystick port 0 { { "left", INPUTEVENT_JOY1_LEFT }, { "right", INPUTEVENT_JOY1_RIGHT }, { "up", INPUTEVENT_JOY1_UP }, { "down", INPUTEVENT_JOY1_DOWN }, { "1", INPUTEVENT_JOY1_FIRE_BUTTON }, { "2", INPUTEVENT_JOY1_2ND_BUTTON }, { "3", INPUTEVENT_JOY1_3RD_BUTTON }, { "red", INPUTEVENT_JOY1_CD32_RED }, { "yellow", INPUTEVENT_JOY1_CD32_YELLOW }, { "green", INPUTEVENT_JOY1_CD32_GREEN }, { "blue", INPUTEVENT_JOY1_CD32_BLUE }, { "rewind", INPUTEVENT_JOY1_CD32_RWD }, { "forward", INPUTEVENT_JOY1_CD32_FFW }, { "play", INPUTEVENT_JOY1_CD32_PLAY }, { "toggle_autofire", INPUTEVENT_AMIGA_JOYPORT_0_AUTOFIRE }, { NULL, 0 }, }, // joystick in joystick port 1 { { "left", INPUTEVENT_JOY2_LEFT }, { "right", INPUTEVENT_JOY2_RIGHT }, { "up", INPUTEVENT_JOY2_UP }, { "down", INPUTEVENT_JOY2_DOWN }, { "1", INPUTEVENT_JOY2_FIRE_BUTTON }, { "2", INPUTEVENT_JOY2_2ND_BUTTON }, { "3", INPUTEVENT_JOY2_3RD_BUTTON }, { "red", INPUTEVENT_JOY2_CD32_RED }, { "yellow", INPUTEVENT_JOY2_CD32_YELLOW }, { "green", INPUTEVENT_JOY2_CD32_GREEN }, { "blue", INPUTEVENT_JOY2_CD32_BLUE }, { "rewind", INPUTEVENT_JOY2_CD32_RWD }, { "forward", INPUTEVENT_JOY2_CD32_FFW }, { "play", INPUTEVENT_JOY2_CD32_PLAY }, { "toggle_autofire", INPUTEVENT_AMIGA_JOYPORT_1_AUTOFIRE }, { NULL, 0 }, }, // first parallel port joystick { { "left", INPUTEVENT_PAR_JOY1_LEFT }, { "right", INPUTEVENT_PAR_JOY1_RIGHT }, { "up", INPUTEVENT_PAR_JOY1_UP }, { "down", INPUTEVENT_PAR_JOY1_DOWN }, { "1", INPUTEVENT_PAR_JOY1_FIRE_BUTTON }, { "2", INPUTEVENT_PAR_JOY1_2ND_BUTTON }, { "toggle_autofire", INPUTEVENT_AMIGA_JOYPORT_2_AUTOFIRE }, { NULL, 0 }, { NULL, 0 }, { NULL, 0 }, { NULL, 0 }, { NULL, 0 }, { NULL, 0 }, { NULL, 0 }, { NULL, 0 }, { NULL, 0 }, }, // second parallel port joystick { { "left", INPUTEVENT_PAR_JOY2_LEFT }, { "right", INPUTEVENT_PAR_JOY2_RIGHT }, { "up", INPUTEVENT_PAR_JOY2_UP }, { "down", INPUTEVENT_PAR_JOY2_DOWN }, { "1", INPUTEVENT_PAR_JOY2_FIRE_BUTTON }, { "2", INPUTEVENT_PAR_JOY2_2ND_BUTTON }, { "toggle_autofire", INPUTEVENT_AMIGA_JOYPORT_3_AUTOFIRE }, { NULL, 0 }, { NULL, 0 }, { NULL, 0 }, { NULL, 0 }, { NULL, 0 }, { NULL, 0 }, { NULL, 0 }, { NULL, 0 }, { NULL, 0 }, }, // custom joystick, 65536 = no action { { "left", 65536 }, { "right", 65536 }, { "up", 65536 }, { "down", 65536 }, { "1", 65536 }, { "2", 65536 }, { NULL, 0 }, { NULL, 0 }, { NULL, 0 }, { NULL, 0 }, { NULL, 0 }, { NULL, 0 }, { NULL, 0 }, { NULL, 0 }, { NULL, 0 }, { NULL, 0 }, }, }; void fs_uae_read_override_actions_for_port(int port) { fs_log("fs_uae_read_override_actions_for_port %d\n", port); fs_emu_input_mapping *mapping = g_joystick_mappings[port]; for (int i = 0; i < FS_UAE_MAX_PORT_ACTIONS; i++) { if (mapping[i].name == NULL) { continue; } const char* name = mapping[i].name; if (strcmp(name, "1") == 0) { name = "primary"; } else if (strcmp(name, "2") == 0) { name = "secondary"; } char *key = fs_strdup_printf("joystick_port_%d_%s", port, name); const char *value = fs_config_get_const_string(key); if (value == NULL) { continue; } fs_log("check %s = %s\n", key, value); int action = fs_emu_input_action_from_string(value); if (action > -1) { fs_log("override %s => %s (%d)\n", key, value, action); mapping[i].action = action; } free(key); } } static void map_mouse(int port) { fs_log("mapping mouse to port %d\n", port); if (port == 0) { fs_emu_configure_mouse(INPUTEVENT_MOUSE1_HORIZ, INPUTEVENT_MOUSE1_VERT, INPUTEVENT_JOY1_FIRE_BUTTON, INPUTEVENT_JOY1_3RD_BUTTON, INPUTEVENT_JOY1_2ND_BUTTON, INPUTEVENT_MOUSE1_WHEEL); } else if (port == 1) { fs_emu_configure_mouse(INPUTEVENT_MOUSE2_HORIZ, INPUTEVENT_MOUSE2_VERT, INPUTEVENT_JOY2_FIRE_BUTTON, INPUTEVENT_JOY2_3RD_BUTTON, INPUTEVENT_JOY2_2ND_BUTTON, 0); } else { fs_log("WARNING: cannot map mouse to this port\n"); } } static void configure_joystick_port(int port, const char *value, const char *port_name, const char *joy_dev) { fs_emu_log("configuring joystick port %d (%s)\n", port, value); fs_uae_input_port *p = g_fs_uae_input_ports + port; const char *auto_type = "amiga"; int auto_mode = AMIGA_JOYPORT_DJOY; if (g_fs_uae_amiga_model == MODEL_CD32) { auto_type = "amigacd32"; auto_mode = AMIGA_JOYPORT_CD32JOY; } if (fs_ascii_strcasecmp(value, "nothing") == 0 || fs_ascii_strcasecmp(value, "none") == 0) { fs_emu_log("nothing connected to port\n"); strcpy(p->device, ""); p->new_mode = AMIGA_JOYPORT_NONE; } else if (fs_ascii_strcasecmp(value, "auto") == 0 && port < 2) { if (port == 0) { p->new_mode = AMIGA_JOYPORT_MOUSE; strcpy(p->device, "MOUSE"); } else { fs_emu_log("trying to auto-configure joystick 1 in port 1\n"); p->new_mode = auto_mode; int result = fs_emu_configure_joystick("JOYSTICK", auto_type, g_joystick_mappings[port], 1, g_fs_uae_input_ports[port].device, MAX_DEVICE_NAME_LEN); if (!result) { fs_emu_log("could not auto-configure joystick 1, " "using keyboard emulation\n"); strcpy(p->device, "KEYBOARD"); } } } else if (fs_ascii_strcasecmp(value, "dummy mouse") == 0) { p->new_mode = AMIGA_JOYPORT_MOUSE; } else if (fs_ascii_strcasecmp(value, "dummy joystick") == 0) { p->new_mode = AMIGA_JOYPORT_DJOY; } else if (fs_ascii_strcasecmp(value, "mouse") == 0) { strcpy(p->device, "MOUSE"); p->new_mode = AMIGA_JOYPORT_MOUSE; } // deprecated else if (fs_ascii_strcasecmp(value, "amiga_mouse") == 0) { p->new_mode = AMIGA_JOYPORT_MOUSE; } // deprecated else if (fs_ascii_strcasecmp(value, "amiga_joystick") == 0) { p->new_mode = AMIGA_JOYPORT_DJOY; } else { p->new_mode = auto_mode; int result = fs_emu_configure_joystick(value, auto_type, g_joystick_mappings[port], 1, p->device, MAX_DEVICE_NAME_LEN); } char *key = fs_strdup_printf("joystick_port_%d_mode", port); char *mode_string = fs_config_get_string(key); free(key); if (mode_string) { char *mode_lower = fs_ascii_strdown(mode_string, -1); free(mode_string); if (strcmp(mode_lower, "joystick") == 0) { p->new_mode = AMIGA_JOYPORT_DJOY; } else if (strcmp(mode_lower, "mouse") == 0) { p->new_mode = AMIGA_JOYPORT_MOUSE; } else if (strcmp(mode_lower, "cd32 gamepad") == 0) { p->new_mode = AMIGA_JOYPORT_CD32JOY; } else if (strcmp(mode_lower, "nothing") == 0) { p->new_mode = AMIGA_JOYPORT_NONE; } else if (strcmp(mode_lower, "none") == 0) { p->new_mode = AMIGA_JOYPORT_NONE; } else if (strcmp(mode_lower, "custom") == 0) { // FIXME: custom is not fully implemented as its own type p->new_mode = AMIGA_JOYPORT_DJOY; } else { fs_log("unknown joystick port mode: %s\n", mode_lower); } free(mode_lower); } if (port < 4) { // port 4 is "custom joystick" key = fs_strdup_printf("joystick_port_%d_autofire", port); if (fs_config_get_boolean(key) == 1) { p->new_autofire_mode = 1; p->autofire_mode = 1; amiga_set_joystick_port_autofire(port, 1); } free(key); } else { // this is a fake joystick, can be used to map keyboard pressed // for example, mode is not set throught input actions, since // this need not be synchronized in net play. p->mode = p->new_mode; } } void fs_uae_configure_input() { fs_emu_log("configuring joystick ports:\n"); amiga_set_option("joyport0", "none"); amiga_set_option("joyport1", "none"); fs_uae_configure_actions(); //fs_emu_set_action_function(joystick_action); char *value; value = fs_config_get_string("joystick_port_0"); if (value == NULL) { value = fs_strdup("mouse"); } configure_joystick_port(0, value, "joyport0", "joy0"); free(value); value = fs_config_get_string("joystick_port_1"); if (value == NULL) { value = fs_strdup("auto"); } configure_joystick_port(1, value, "joyport1", "joy1"); free(value); value = fs_config_get_string("joystick_port_2"); if (value == NULL) { value = fs_strdup("nothing"); } configure_joystick_port(2, value, "joyport2", "joy2"); free(value); value = fs_config_get_string("joystick_port_3"); if (value == NULL) { value = fs_strdup("nothing"); } configure_joystick_port(3, value, "joyport3", "joy3"); free(value); value = fs_config_get_string("joystick_port_4"); if (value == NULL) { value = fs_strdup("nothing"); } configure_joystick_port(4, value, "joyport4", "joy4"); free(value); } void fs_uae_reconfigure_input_ports_amiga() { fs_emu_log("fs_uae_reconfigure_input_ports_amiga\n"); int modes = INPUTEVENT_AMIGA_JOYPORT_MODE_0_LAST - INPUTEVENT_AMIGA_JOYPORT_MODE_0_NONE + 1; //for (int i = 0; i < FS_UAE_NUM_INPUT_PORTS; i++) { // only the 4 real ports are reconfigured via input events, the 5th // custom joystick port is a local virtual joystick for mapping custom // input events only for (int i = 0; i < 4; i++) { fs_uae_input_port *port = g_fs_uae_input_ports + i; if (port->new_mode != port->mode) { fs_log("sending event to set port %d to mode %d\n", i, port->new_mode); int action = INPUTEVENT_AMIGA_JOYPORT_MODE_0_NONE + modes * i + \ port->new_mode; fs_emu_queue_action(action, 1); } if (port->new_autofire_mode != port->autofire_mode) { fs_log("sending event to set port %d to autofire mode %d\n", i, port->new_autofire_mode); int action = INPUTEVENT_AMIGA_JOYPORT_0_AUTOFIRE + i; fs_emu_queue_action(action, 1); } } } void fs_uae_reconfigure_input_ports_host() { fs_emu_log("fs_uae_reconfigure_input_ports_host\n"); fs_emu_reset_input_mapping(); fs_uae_map_keyboard(); int mouse_mapped_to_port = -1; for (int i = 0; i < FS_UAE_NUM_INPUT_PORTS; i++) { fs_uae_input_port *port = g_fs_uae_input_ports + i; fs_log("configuring joystick port %d\n", i); if (port->mode == AMIGA_JOYPORT_NONE) { fs_log("* nothing in port\n"); fs_log("* FIXME\n"); } else if (port->mode == AMIGA_JOYPORT_MOUSE) { fs_log("* amiga mouse\n"); if (strcmp(port->device, "MOUSE") == 0) { fs_log("* using host mouse\n"); map_mouse(i); mouse_mapped_to_port = i; } else { fs_log("* not mapping host device to amiga mouse\n"); } } else if (port->mode == AMIGA_JOYPORT_DJOY) { fs_log("* amiga joystick\n"); if (strcmp(port->device, "MOUSE") == 0) { fs_log("* cannot map mouse to joystick\n"); } else { fs_log("* using device %s\n", port->device); fs_emu_configure_joystick(port->device, "amiga", g_joystick_mappings[i], 1, NULL, 0); } } else if (port->mode == AMIGA_JOYPORT_CD32JOY) { fs_log("* amiga cd32 gamepad\n"); if (strcmp(port->device, "MOUSE") == 0) { fs_log("* cannot map mouse to cd32 gamepad\n"); } else { fs_log("* using device %s\n", port->device); fs_emu_configure_joystick(port->device, "amigacd32", g_joystick_mappings[i], 1, NULL, 0); } } } int autoswitch = fs_config_get_boolean("joystick_port_0_autoswitch"); if (autoswitch == FS_CONFIG_NONE) { autoswitch = 0; } fs_uae_input_port *port0 = g_fs_uae_input_ports; if (!autoswitch) { if (mouse_mapped_to_port == -1 && port0->mode != AMIGA_JOYPORT_NONE) { // there is a device in port 0, but mouse is not use in either // port fs_log("additionally mapping mouse buttons to port 0\n"); fs_emu_configure_mouse(0, 0, INPUTEVENT_JOY1_FIRE_BUTTON, 0, INPUTEVENT_JOY1_2ND_BUTTON, 0); } } if (autoswitch && !fs_emu_netplay_enabled()) { // auto-select for other devices when not in netplay mode if (mouse_mapped_to_port == -1) { // FIXME: device "9" is a bit of a hack here, should promote fs_emu_configure_mouse(0, 0, INPUTEVENT_AMIGA_JOYPORT_0_DEVICE_9, 0, 0, 0); } int count; fs_emu_input_device *input_device = fs_emu_get_input_devices(&count); for (int i = 0; i < count; i++) { //printf("---- %d %s\n", i, input_device->name); //printf("usage: %d\n", input_device->usage); if (input_device->usage) { // this device is used, so we don't want auto-select for this // device input_device++; continue; } if (strcmp(input_device->name, "KEYBOARD") == 0) { continue; } int input_event = INPUTEVENT_AMIGA_JOYPORT_0_DEVICE_0 + i; fs_emu_input_mapping mapping[] = { { "1", input_event }, { NULL, 0 }, }; fs_emu_configure_joystick(input_device->name, "amiga", mapping, 0, NULL, 0); input_device++; }; } fs_emu_map_custom_actions(); } fs-uae-2.2.3+dfsg/src/fs-uae/fs-uae.h0000644000175000017500000000775512162366654017372 0ustar glaubitzglaubitz#include #ifndef MAX_PATH #ifdef WINDOWS #define MAX_PATH 512 #else #define MAX_PATH 1024 #endif #endif void fs_uae_configure_menu(); void fs_uae_configure_input(); const char *fs_uae_get_state_base_name(); void fs_uae_read_custom_uae_options(int argc, char **argv); int get_grab_input(void); void set_grab_input(int mode); void fs_uae_configure_actions(); void fs_uae_init_video(void); void fs_uae_init_audio(void); void fs_uae_map_keyboard(void); void fs_uae_handle_keyboard_event(fs_emu_event *event); void fs_uae_init_mouse(void); void fs_uae_handle_mouse_event(fs_emu_event *event); extern int g_fs_uae_video_aspect; extern int g_fs_uae_video_zoom; char *fs_uae_encode_path(const char *path); char *fs_uae_decode_path(const char *path); typedef struct amiga_config { const char *id; const char *name; int model; int quickstart_model; int quickstart_config; int allow_z3_memory; int z3mem_size; const char *cpu_model; int cpu_32bit_addressing; int fast; int fast_on_accuracy_level; int no_accuracy_adjustment; const char *warning; } amiga_config; void fs_uae_init_configs(); void fs_uae_configure_directories(); void fs_uae_configure_floppies(); void fs_uae_configure_hard_drives(); void fs_uae_configure_cdrom(); void fs_uae_configure_amiga_hardware(); void fs_uae_configure_amiga_model(); void fs_uae_load_rom_files(const char *path); char *fs_uae_expand_path(const char *path); char *fs_uae_expand_path_and_free(char *path); const char *fs_uae_configurations_dir(); const char *fs_uae_cdroms_dir(); const char *fs_uae_floppies_dir(); const char *fs_uae_hard_drives_dir(); const char *fs_uae_kickstarts_dir(); //const char *fs_uae_flash_memory_dir(); //const char *fs_uae_save_states_dir(); const char *fs_uae_state_dir(); //const char *fs_uae_floppy_overlays_dir(); const char *fs_uae_controllers_dir(); const char *fs_uae_logs_dir(); const char *fs_uae_exe_dir(); const char *fs_uae_themes_dir(); #define FS_UAE_CONFIG_TYPE_JOYSTICK "amiga" #define FS_UAE_CONFIG_TYPE_MOUSE "amiga_mouse" #define FS_UAE_MAX_PORT_ACTIONS 16 #define FS_UAE_NUM_INPUT_PORTS 5 #define MAX_DEVICE_NAME_LEN 128 typedef struct fs_uae_input_port { char device[MAX_DEVICE_NAME_LEN + 1]; int mode; int new_mode; int autofire_mode; int new_autofire_mode; const char *config_type; } fs_uae_input_port; extern fs_uae_input_port g_fs_uae_input_ports[FS_UAE_NUM_INPUT_PORTS]; void fs_uae_read_override_actions_for_port(int port); void fs_uae_reconfigure_input_ports_amiga(); void fs_uae_reconfigure_input_ports_host(); #define FS_UAE_FLOPPY_PATHS 0 #define FS_UAE_HD_PATHS 1 #define FS_UAE_CD_PATHS 2 #define FS_UAE_ROM_PATHS 3 #define FS_UAE_DIR_PATHS 4 void fs_uae_init_path_resolver(); char *fs_uae_resolve_path(const char *name, int type); char *fs_uae_resolve_path_and_free(char *name, int type); void fs_uae_set_uae_paths(); #define CONFIG_A500 0 #define CONFIG_A500P 1 #define CONFIG_A600 2 #define CONFIG_CD32 3 #define CONFIG_CDTV 4 #define CONFIG_A1200 5 #define CONFIG_A1200_020 6 #define CONFIG_SUPER 7 #define CONFIG_A4000 8 #define CONFIG_A4000_040 9 //#define CONFIG_A1200_030 7 //#define CONFIG_A1200_040 8 #define CONFIG_A1000 10 #define CONFIG_A3000 11 #define CONFIG_CD32_FMV 12 #define CONFIG_LAST 13 #define MODEL_A500 1 #define MODEL_A1200 2 #define MODEL_CD32 3 #define MODEL_CDTV 4 #define MODEL_A500P 5 #define MODEL_A600 6 #define MODEL_A4000 7 #define MODEL_A1000 8 #define MODEL_A3000 9 extern amiga_config g_fs_uae_amiga_configs[]; extern int g_fs_uae_amiga_config; extern int g_fs_uae_amiga_model; extern int g_fs_uae_ntsc_mode; extern const char *g_fs_uae_version; //extern char *g_fs_uae_default_dir; extern int g_fs_uae_fastest_possible; extern char *g_fs_uae_config_file_path; extern char *g_fs_uae_config_dir_path; extern int g_fs_uae_state_number; extern int g_fs_uae_last_input_event; extern int g_fs_uae_last_input_event_state; void fs_uae_process_input_event(int action, int state); #ifdef WITH_LUA void fs_uae_init_lua_state(lua_State *L); #endif fs-uae-2.2.3+dfsg/src/fs-uae/luascript.c0000644000175000017500000000317712162366654020205 0ustar glaubitzglaubitz#include "fs-uae.h" #include #include #include #ifdef WITH_LUA static int l_fs_uae_get_save_state_number(lua_State *L) { lua_pushinteger(L, g_fs_uae_state_number); return 1; } static int l_fs_uae_get_input_event(lua_State *L) { lua_pushinteger(L, g_fs_uae_last_input_event); lua_pushinteger(L, g_fs_uae_last_input_event_state); return 2; } static int l_fs_uae_set_input_event(lua_State *L) { int input_event = luaL_checkint(L, -2); int state = luaL_checkint(L, -1); g_fs_uae_last_input_event = input_event; g_fs_uae_last_input_event_state = state; return 0; } static int l_fs_uae_send_input_event(lua_State *L) { int input_event = luaL_checkint(L, -2); int state = luaL_checkint(L, -1); fs_uae_process_input_event(input_event, state); return 0; } static int l_fs_uae_get_state_checksum(lua_State *L) { lua_pushinteger(L, amiga_get_state_checksum()); return 1; } static int l_fs_uae_get_rand_checksum(lua_State *L) { lua_pushinteger(L, amiga_get_state_checksum()); return 1; } void fs_uae_init_lua_state(lua_State *L) { fs_log("fs_uae_lua_init_state %p\n", L); lua_register(L, "fs_uae_get_input_event", l_fs_uae_get_input_event); lua_register(L, "fs_uae_set_input_event", l_fs_uae_set_input_event); lua_register(L, "fs_uae_send_input_event", l_fs_uae_send_input_event); lua_register(L, "fs_uae_get_save_state_number", l_fs_uae_get_save_state_number); lua_register(L, "fs_uae_get_state_checksum", l_fs_uae_get_state_checksum); lua_register(L, "fs_uae_get_rand_checksum", l_fs_uae_get_rand_checksum); } #endif fs-uae-2.2.3+dfsg/src/fs-uae/config.c0000644000175000017500000006507112162366654017445 0ustar glaubitzglaubitz#include #include #include #include #include #include "fs-uae.h" amiga_config g_fs_uae_amiga_configs[CONFIG_LAST + 1] = {}; int g_fs_uae_amiga_config = 0; int g_fs_uae_ntsc_mode = 0; int g_fs_uae_amiga_model = 0; //char *g_fs_uae_default_dir = "."; int g_fs_uae_fastest_possible = 0; static int g_accuracy = 1; #define NEW_ACCURACY_SYSTEM void fs_uae_init_configs() { amiga_config *c; c = g_fs_uae_amiga_configs + CONFIG_A1000; c->id = "A1000"; c->model = MODEL_A1000; c->name = "Amiga 1000"; c->quickstart_model = 3; c->quickstart_config = 0; c->fast_on_accuracy_level = -999; c = g_fs_uae_amiga_configs + CONFIG_A500; c->id = "A500"; c->model = MODEL_A500; c->name = "Amiga 500"; //c->quickstart = "A500,,"; c->quickstart_model = 0; c->fast_on_accuracy_level = -999; c = g_fs_uae_amiga_configs + CONFIG_A500P; c->id = "A500+"; c->model = MODEL_A500P; c->name = "Amiga 500+"; //c->quickstart = "A500+,,"; c->quickstart_model = 1; c->fast_on_accuracy_level = -999; c = g_fs_uae_amiga_configs + CONFIG_A600; c->id = "A600"; c->model = MODEL_A600; c->name = "Amiga 600"; //c->quickstart = "A600,,"; c->quickstart_model = 2; c->fast_on_accuracy_level = -999; c = g_fs_uae_amiga_configs + CONFIG_CDTV; c->id = "CDTV"; c->model = MODEL_CDTV; c->name = "Commodore CDTV"; //c->quickstart = "CDTV,,"; c->quickstart_model = 9; c->fast_on_accuracy_level = -999; c = g_fs_uae_amiga_configs + CONFIG_CD32; c->id = "CD32"; c->model = MODEL_CD32; c->name = "Amiga CD32"; //c->quickstart = "CD32,,"; c->quickstart_model = 8; c->quickstart_config = 0; #ifdef NEW_ACCURACY_SYSTEM c->fast_on_accuracy_level = -999; #else c->fast_on_accuracy_level = 0; #endif c = g_fs_uae_amiga_configs + CONFIG_CD32_FMV; c->id = "CD32/FMV"; c->model = MODEL_CD32; c->name = "Amiga CD32 + FMV ROM"; //c->quickstart = "CD32,,"; c->quickstart_model = 8; c->quickstart_config = 1; #ifdef NEW_ACCURACY_SYSTEM c->fast_on_accuracy_level = -999; #else c->fast_on_accuracy_level = 0; #endif c = g_fs_uae_amiga_configs + CONFIG_A1200; c->id = "A1200"; c->model = MODEL_A1200; c->name = "Amiga 1200"; //c->quickstart = "A1200,,"; c->quickstart_model = 4; #ifdef NEW_ACCURACY_SYSTEM c->fast_on_accuracy_level = -999; #else c->fast_on_accuracy_level = 0; #endif c = g_fs_uae_amiga_configs + CONFIG_A1200_020; c->id = "A1200/020"; c->model = MODEL_A1200; c->name = "Amiga 1200 (68020)"; //c->quickstart = "A1200,,"; c->quickstart_model = 4; #ifdef NEW_ACCURACY_SYSTEM c->fast_on_accuracy_level = -999; #else c->fast_on_accuracy_level = 0; #endif c->cpu_model = "68020"; c->cpu_32bit_addressing = 1; c->allow_z3_memory = 1; //c->z3mem_size = 64; c = g_fs_uae_amiga_configs + CONFIG_SUPER; c->id = "SUPER"; // FIXME: c->model = MODEL_A1200; c->name = "Amiga (Super)"; //c->quickstart = "A1200,,"; c->quickstart_model = 11; c->fast_on_accuracy_level = 1; c->no_accuracy_adjustment = 1; //c->cpu_model = "68020"; //c->cpu_32bit_addressing = 1; c->allow_z3_memory = 1; //c->z3mem_size = 64; c->warning = "SUPER is deprecated, use A4000/040 instead"; c = g_fs_uae_amiga_configs + CONFIG_A4000; c->id = "A4000_DO_NOT_USE"; c->model = MODEL_A4000; c->name = "Amiga 4000"; c->quickstart_model = 6; c->fast_on_accuracy_level = 1; c->no_accuracy_adjustment = 1; c->allow_z3_memory = 1; c = g_fs_uae_amiga_configs + CONFIG_A4000_040; c->id = "A4000/040"; c->model = MODEL_A4000; c->name = "Amiga 4000/040"; c->quickstart_model = 6; c->quickstart_config = 1; c->fast_on_accuracy_level = 1; c->no_accuracy_adjustment = 1; c->allow_z3_memory = 1; c = g_fs_uae_amiga_configs + CONFIG_A3000; c->id = "A3000"; c->model = MODEL_A3000; c->name = "Amiga 3000"; c->quickstart_model = 5; c->quickstart_config = 2; c->fast_on_accuracy_level = 1; c->no_accuracy_adjustment = 1; c->allow_z3_memory = 1; /* c = g_amiga_configs + CONFIG_A1200_030; c->id = "A1200/030"; c->model = MODEL_A1200; c->name = "Amiga 1200 (68030)"; c->quickstart = "A1200,,"; c->cpu_model = "68030"; c->cpu_32bit_addressing = 1; c->allow_z3_memory = 1; c->z3mem_size = 64; c = g_amiga_configs + CONFIG_A1200_040; c->id = "A1200/040"; c->model = MODEL_A1200; c->name = "Amiga 1200 (68040)"; c->quickstart = "A1200,,"; c->cpu_model = "68040"; c->cpu_32bit_addressing = 1; c->allow_z3_memory = 1; c->z3mem_size = 64; c->fast = 1; */ c = g_fs_uae_amiga_configs + CONFIG_LAST; c->id = NULL; }; void fs_uae_configure_amiga_model() { char *path; fs_emu_log("fs_uae_configure_amiga_model\n"); fs_uae_init_configs(); //amiga_set_option("kickstart_rom_file", "aa:AROS"); if (fs_config_get_boolean("ntsc_mode") == 1) { fs_emu_log("enabling NTSC mode (60Hz)\n"); g_fs_uae_ntsc_mode = 1; fs_emu_set_video_frame_rate(60); } else { fs_emu_log("using PAL mode (50Hz)\n"); fs_emu_set_video_frame_rate(50); } g_fs_uae_amiga_config = -1; const char *config_model = fs_config_get_const_string("amiga_model"); if (config_model == NULL) { config_model = fs_config_get_const_string("model"); } if (config_model) { int i = 0; for (amiga_config* c = g_fs_uae_amiga_configs; c->id; c++, i++) { if (fs_ascii_strcasecmp(config_model, c->id) == 0) { fs_emu_log("config match for \"%s\"\n", c->id); g_fs_uae_amiga_config = i; break; } } } if (g_fs_uae_amiga_config == -1) { fs_emu_log("WARNING: unknown amiga config specified, using A500\n"); g_fs_uae_amiga_config = CONFIG_A500; } amiga_config *c = g_fs_uae_amiga_configs + g_fs_uae_amiga_config; g_fs_uae_amiga_model = c->model; g_accuracy = fs_config_get_int_clamped("accuracy", -2, 1); if (c->no_accuracy_adjustment) { fs_emu_log("ignoring accuracy for this model\n"); g_accuracy = 1; } if (g_accuracy == FS_CONFIG_NONE) { g_accuracy = 1; } if (g_accuracy <= c->fast_on_accuracy_level) { fs_emu_log("this model / accuracy combination is a " "\"fastest possibly\" mode\n"); g_fs_uae_fastest_possible = 1; } if (!fs_emu_get_title()) { fs_emu_set_title(c->name); } if (!fs_emu_get_sub_title()) { fs_emu_set_sub_title("FS-UAE"); } if (c->warning) { fs_emu_warning(c->warning); } } static void configure_accuracy(amiga_config *c) { #ifdef NEW_ACCURACY_SYSTEM int cpu_accuracy = fs_config_get_int("cpu_accuracy"); if (cpu_accuracy == FS_CONFIG_NONE) { cpu_accuracy = fs_config_get_int("accuracy"); } if (cpu_accuracy != FS_CONFIG_NONE) { if (cpu_accuracy <= 0) { amiga_set_option("cpu_cycle_exact", "false"); if (g_fs_uae_amiga_model == MODEL_A1200 || g_fs_uae_amiga_model == MODEL_CD32) { // FIXME: test this setting some more //amiga_set_option("cpu_speed", "2"); amiga_set_option("cpu_speed", "0"); } } if (cpu_accuracy <= -1) { amiga_set_option("cpu_compatible", "false"); } } int blitter_accuracy = fs_config_get_int("blitter_accuracy"); if (blitter_accuracy == FS_CONFIG_NONE) { blitter_accuracy = fs_config_get_int("accuracy"); } if (blitter_accuracy != FS_CONFIG_NONE) { if (blitter_accuracy <= 0) { amiga_set_option("blitter_cycle_exact", "false"); } if (blitter_accuracy <= -1) { amiga_set_option("immediate_blits", "true"); } } int audio_accuracy = fs_config_get_int("audio_accuracy"); if (audio_accuracy == FS_CONFIG_NONE) { // we don't want to use interrupts unless we specifically requested // audio_accuracy of -1 audio_accuracy = fs_config_get_int_clamped("accuracy", 0, 1); } if (audio_accuracy != FS_CONFIG_NONE) { if (audio_accuracy == 0) { amiga_set_option("sound_output", "normal"); } else if (audio_accuracy <= -1) { amiga_set_option("sound_output", "interrupts"); } } #endif } static void configure_memory(amiga_config *c) { int chip_memory = fs_config_get_int("chip_memory"); if (chip_memory != FS_CONFIG_NONE) { if (chip_memory % 512 == 0) { amiga_set_int_option("chipmem_size", chip_memory / 512); } else { fs_emu_warning(_("Option chip_memory must be a multiple of 512")); chip_memory = 0; } } else { chip_memory = 0; } int slow_memory = fs_config_get_int("slow_memory"); if (slow_memory != FS_CONFIG_NONE) { if (slow_memory % 256 == 0) { amiga_set_int_option("bogomem_size", slow_memory / 256); } else { fs_emu_warning(_("Option slow_memory must be a multiple of 256")); slow_memory = 0; } } else { slow_memory = 0; } int fast_memory = fs_config_get_int("fast_memory"); if (fast_memory != FS_CONFIG_NONE) { if (fast_memory % 1024 == 0) { amiga_set_int_option("fastmem_size", fast_memory / 1024); } else { fs_emu_warning(_("Option fast_memory must be a multiple of 1024")); fast_memory = 0; } } else { fast_memory = 0; } int z3_memory = fs_config_get_int("zorro_iii_memory"); if (z3_memory != FS_CONFIG_NONE) { if (z3_memory && !c->allow_z3_memory) { fs_emu_warning(_("Options zorro_iii_memory needs a CPU " "with 32-bit addressing")); z3_memory = 0; } else if (z3_memory % 1024 == 0) { amiga_set_int_option("z3mem_size", z3_memory / 1024); } else { fs_emu_warning(_("Option zorro_iii_memory must be a multiple " "of 1024")); z3_memory = 0; } } else { z3_memory = 0; } } void fs_uae_configure_amiga_hardware() { amiga_config *c = g_fs_uae_amiga_configs + g_fs_uae_amiga_config; char *path; fs_emu_log("fs_uae_configure_amiga_hardware\n"); int scan_kickstarts = 1; path = fs_config_get_string("kickstart_file"); if (path) { if (strcmp(path, "internal") == 0) { scan_kickstarts = 0; } free(path); } if (scan_kickstarts) { fs_uae_load_rom_files(fs_uae_kickstarts_dir()); } #ifdef NEW_ACCURACY_SYSTEM g_accuracy = 1; #endif fs_emu_log("configuring \"%s\", accuracy=%d\n", c->name, g_accuracy); amiga_quickstart(c->quickstart_model, c->quickstart_config, g_accuracy); amiga_set_option("cachesize", "0"); amiga_set_option("comp_trustbyte", "indirect"); amiga_set_option("comp_trustword", "indirect"); amiga_set_option("comp_trustlong", "indirect"); amiga_set_option("comp_trustnaddr", "indirect"); if (c->cpu_model) { amiga_set_option("cpu_model", c->cpu_model); } if (c->z3mem_size) { amiga_set_int_option("z3mem_size", c->z3mem_size); } if (c->cpu_32bit_addressing) { amiga_set_option("cpu_24bit_addressing", "false"); } if (c->fast) { amiga_set_option("cpu_speed", "max"); amiga_set_option("blitter_cycle_exact", "false"); amiga_set_option("cpu_cycle_exact", "false"); amiga_set_option("cpu_compatible", "false"); amiga_set_option("immediate_blits", "true"); } //if (g_fs_uae_fastest_possible) { amiga_set_cpu_idle(2); //} if (g_fs_uae_ntsc_mode) { // FIXME: ciiatod on some Amiga models? amiga_set_option("ntsc", "true"); } path = fs_config_get_string("kickstart_file"); if (path) { if (strcmp(path, "internal") == 0) { // do not load external kickstart } else { path = fs_uae_expand_path_and_free(path); path = fs_uae_resolve_path_and_free(path, FS_UAE_ROM_PATHS); amiga_set_option("kickstart_rom_file", path); free(path); path = fs_config_get_string("kickstart_ext_file"); if (path) { path = fs_uae_expand_path_and_free(path); path = fs_uae_resolve_path_and_free(path, FS_UAE_ROM_PATHS); amiga_set_option("kickstart_ext_rom_file", path); free(path); } } } configure_memory(c); if (fs_config_get_boolean("bsdsocket_library") == 1) { amiga_set_option("bsdsocket_emu", "yes"); } int uaegfx_card = fs_config_get_boolean("uaegfx_card"); if (uaegfx_card == 1) { if (!c->allow_z3_memory) { fs_emu_warning(_("Option uaegfx.card needs a CPU with 32-bit " "addressing")); } else { amiga_set_option("gfxcard_size", "32"); } } const char *serial_port = fs_config_get_const_string("serial_port"); if (!serial_port) { } else if (fs_ascii_strcasecmp(serial_port, "none") == 0) { } else { amiga_enable_serial_port(fs_config_get_const_string("serial_port")); } configure_accuracy(c); if (fs_config_get_boolean("line_doubling") == 0) { fs_log("disabling line doubling\n"); amiga_set_option("gfx_linemode", "none"); } if (fs_config_get_boolean("low_resolution") == 1) { fs_log("force low resolution\n"); amiga_set_option("gfx_lores", "true"); } if (fs_config_get_const_string("dongle_type")) { amiga_set_option("dongle", fs_config_get_const_string("dongle_type")); } /* if (g_fs_uae_amiga_model == MODEL_A500) { if (slow_memory || fast_memory || chip_memory > 512) { fs_log("using A500 and memory expansions, " "enabling real-time clock"); amiga_set_option("rtc", "MSM6242B"); } } */ /* char **keys = g_key_file_get_keys(g_fs_uae_config, "uae", NULL, NULL); if (keys) { for (char **key = keys; *key; key++) { char *value = g_key_file_get_string(g_fs_uae_config, "uae", *key, NULL); if (value != NULL) { amiga_set_option(*key, value); free(value); } } g_strfreev(keys); } */ } /* static void set_default_dirs_from_file_path(const char *path) { fs_emu_log("set_default_dirs_from_file_path %s\n", path); char *dir = g_path_get_dirname(path); fs_emu_log("default dir = %s\n", dir); g_fs_uae_default_dir = dir; } */ void fs_uae_configure_cdrom() { /* if (g_fs_uae_amiga_model != MODEL_CDTV && g_fs_uae_amiga_model != MODEL_CD32) { return; } */ fs_emu_log("configure_cdrom\n"); int auto_num_drives = 0; char *path = fs_config_get_string("cdrom_drive_0"); if (path) { path = fs_uae_expand_path_and_free(path); path = fs_uae_resolve_path_and_free(path, FS_UAE_CD_PATHS); //set_default_dirs_from_file_path(path); char* temp = fs_strconcat(path, ",image", NULL); amiga_set_option("cdimage0", temp); free(temp); free(path); auto_num_drives = 1; } int num_drives = auto_num_drives; const char *value = fs_config_get_const_string("cdrom_drive_count"); if (value) { if (fs_ascii_strcasecmp(value, "auto") == 0) { // auto } else { num_drives = atoi(value); } } if (num_drives == 0) { // do nothing } else if (num_drives == 1) { if (g_fs_uae_amiga_model != MODEL_CDTV && g_fs_uae_amiga_model != MODEL_CD32) { amiga_set_option("scsi", "true"); amiga_map_cd_drives(1); } if (auto_num_drives == 0) { // set cdimage0 to force a CD-ROM drive amiga_set_option("cdimage0", ""); } } else { fs_emu_warning(_("Invalid number of CD-ROM drives specified")); } } static void configure_hard_drive_directory (int index, const char *path, const char *device, int read_only, int boot_priority) { char *type = fs_strdup("dir"); int surfaces = 1; int reserved = 2; int sectors = 32; int block_size = 512; char *mount_name; char *label_option_name = fs_strdup_printf( "hard_drive_%d_label", index); char *label_option = fs_config_get_string(label_option_name); if (label_option) { mount_name = label_option; } else { mount_name = fs_path_get_basename(path); char *c = mount_name; int stop = 0; for(int i = 0; mount_name[i]; i++) { if (mount_name[i] == '(') { stop = i; break; } } while (stop > 0 && mount_name[stop - 1] == ' ') { stop--; } if (stop > 0) { mount_name[stop] = '\0'; } } fs_emu_log("hard drive mount: %s\n", path); fs_emu_log("device: %s\n", device); fs_emu_log("mount name: %s\n", mount_name); fs_emu_log("read only: %d\n", read_only); fs_emu_log("boot priority: %d\n", boot_priority); char *filesystem2_value = fs_strdup_printf("%s,%s:%s:%s,%d", read_only ? "ro" : "rw", device, mount_name, path, boot_priority); amiga_set_option("filesystem2", filesystem2_value); free(filesystem2_value); free(mount_name); free(type); } static void configure_hard_drive_image (int index, const char *path, const char *device, int read_only, int boot_priority) { int rdb_mode = 0; char *key = NULL; FILE *f = fs_fopen(path, "rb"); if (f == NULL) { fs_emu_log("WARNING: could not open %s\n", path); } key = fs_strdup_printf("hard_drive_%d_type", index); const char *hd_type = fs_config_get_const_string(key); free(key); if (hd_type && fs_ascii_strcasecmp(hd_type, "rdb") == 0) { fs_emu_log("hard drive type explicitly set to rdb\n"); rdb_mode = 1; } /* else if (enable_rdb_mode == 0) { rdb_mode = 0; } */ else if (f != NULL) { // autodetect rdb mode char buffer[5]; int read = fread(buffer, 1, 4, f); buffer[4] = '\0'; if (read == 4) { if (strcmp(buffer, "RDSK") == 0) { rdb_mode = 1; } else if (strcmp(buffer, "rdsk") == 0) { // this is a unformatted disk file prepared by for example // FS-UAE Launcher, using rdsk to indicate that the file // is intended to be used as an RDB file rdb_mode = 1; } } else { fs_emu_log("WARNING: error reading 4 bytes from HD " "file\n"); } } if (f != NULL) { fclose(f); } char *type = fs_strdup("hdf"); int sectors = 32; int surfaces = 1; int reserved = 2; int block_size = 512; if (rdb_mode) { sectors = 0; surfaces = 0; reserved = 0; } key = fs_strdup_printf("hard_drive_%d_file_system", index); char *file_system = fs_config_get_string(key); if (file_system == NULL) { file_system = fs_strdup(""); } free(key); file_system = fs_uae_expand_path_and_free(file_system); file_system = fs_uae_resolve_path_and_free(file_system, FS_UAE_HD_PATHS); if (file_system[0] && !fs_path_exists(file_system)) { char *msg = fs_strdup_printf( "file system handler \"%s\" not found", file_system); fs_emu_warning(msg); free(msg); return; } key = fs_strdup_printf("hard_drive_%d_controller", index); char *hd_controller = fs_config_get_string(key); if (hd_controller == NULL) { hd_controller = fs_strdup("uae"); } free(key); fs_emu_log("hard drive file: %s\n", path); fs_emu_log("rdb mode: %d\n", rdb_mode); fs_emu_log("device: %s\n", device); fs_emu_log("read only: %d\n", read_only); fs_emu_log("boot priority: %d\n", boot_priority); fs_emu_log("surfaces: %d\n", surfaces); fs_emu_log("reserved: %d\n", reserved); fs_emu_log("hd controller: %s\n", hd_controller); fs_emu_log("sectors: %d\n", sectors); fs_emu_log("block size: %d\n", block_size); fs_emu_log("file system: %s\n", file_system); char *hardfile2_value = fs_strdup_printf( "%s,%s:%s,%d,%d,%d,%d,%d,%s,%s", read_only ? "ro" : "rw", device, path, sectors, surfaces, reserved, block_size, boot_priority, file_system, hd_controller); amiga_set_option("hardfile2", hardfile2_value); free(hardfile2_value); free(hd_controller); free(file_system); free(type); } void fs_uae_configure_hard_drives() { char *key = NULL; fs_emu_log("fs_uae_configure_hard_drives\n"); for (int i = 0; i < 10; i++) { key = fs_strdup_printf("hard_drive_%d", i); char *path = fs_config_get_string(key); free(key); if (path == NULL) { continue; } if (path[0] == '\0') { continue; } path = fs_uae_expand_path_and_free(path); path = fs_uae_resolve_path_and_free(path, FS_UAE_HD_PATHS); if (!fs_path_exists(path)) { char *msg = fs_strdup_printf(_("HD not found: %s"), path); fs_emu_warning(msg); free(msg); continue; } key = fs_strdup_printf("hard_drive_%d_priority", i); int boot_priority = fs_config_get_int(key); free(key); if (boot_priority == FS_CONFIG_NONE) { boot_priority = 0; } char *device = fs_strdup_printf("DH%d", i); int read_only = 0; int virtual = 0; if (fs_path_is_dir(path)) { virtual = 1; } else if (fs_str_has_suffix(path, ".zip")) { virtual = 1; //read_write = ro_string; read_only = 1; } key = fs_strdup_printf("hard_drive_%d_read_only", i); if (fs_config_get_boolean(key) == 1) { //read_write = ro_string; read_only = 1; } free(key); if (virtual) { configure_hard_drive_directory(i, path, device, read_only, boot_priority); } else { configure_hard_drive_image(i, path, device, read_only, boot_priority); } free(device); } } void fs_uae_configure_floppies() { if (g_fs_uae_amiga_model == MODEL_CDTV || g_fs_uae_amiga_model == MODEL_CD32) { return; } fs_emu_log("configure_floppies\n"); char option_floppy_drive_x[] = "floppy_drive_0"; char option_floppy_drive_x_sounds[] = "floppy_drive_0_sounds"; char option_floppyx[] = "floppy0"; char option_floppyxtype[] = "floppy0type"; char option_floppyxsound[] = "floppy0sound"; char option_floppyxsoundext[] = "floppy0soundext"; int auto_num_drives = 1; for(int i = 0; i < 4; i++) { option_floppy_drive_x[13] = '0' + i; option_floppy_drive_x_sounds[13] = '0' + i; option_floppyx[6] = '0' + i; option_floppyxtype[6] = '0' + i; option_floppyxsound[6] = '0' + i; option_floppyxsoundext[6] = '0' + i; char *path = fs_config_get_string(option_floppy_drive_x); fs_emu_log("value for option %s: %s\n", option_floppy_drive_x, path); if (!path) { path = fs_strdup(""); } if (path[0] != '\0') { path = fs_uae_expand_path_and_free(path); path = fs_uae_resolve_path_and_free(path, FS_UAE_FLOPPY_PATHS); auto_num_drives = i + 1; } amiga_set_option(option_floppyx, path); amiga_set_option(option_floppyxtype, "0"); free(path); const char *floppy_sounds = fs_config_get_const_string( option_floppy_drive_x_sounds); if (floppy_sounds) { fs_log("custom floppy sounds for drive %d: %s\n", i, floppy_sounds); amiga_set_option(option_floppyxsound, "-1"); amiga_set_option(option_floppyxsoundext, floppy_sounds); } } const char *value; value = fs_config_get_const_string("floppy_drive_speed"); if (value) { amiga_set_option("floppy_speed", value); } int num_drives = auto_num_drives; value = fs_config_get_const_string("floppy_drive_count"); if (value) { if (fs_ascii_strcasecmp(value, "auto") == 0) { // auto } else { num_drives = atoi(value); } } amiga_set_int_option("nr_floppies", num_drives); // set remaining floppy drive types to -1 for (int i = num_drives; i < 4; i++) { option_floppyx[6] = '0' + i; option_floppyxtype[6] = '0' + i; amiga_set_option(option_floppyx, ""); amiga_set_option(option_floppyxtype, "-1"); } int volume = fs_config_get_int_clamped("floppy_drive_volume", 0, 100); if (volume != FS_CONFIG_NONE) { if (volume == 0) { for (int i = 0; i < 4; i++) { char *key = fs_strdup_printf("floppy%dsound", i); amiga_set_option(key, "0"); free(key); } } amiga_set_int_option("floppy_volume", 100 - volume); } int count = 0; int k = 0; while (count < 20) { char *config_key = fs_strdup_printf("floppy_image_%d", k); const char *config_value = fs_config_get_string(config_key); if (config_value) { char *option = fs_strdup_printf("diskimage%d", count); char *path = fs_uae_expand_path(config_value); path = fs_uae_resolve_path_and_free(path, FS_UAE_FLOPPY_PATHS); amiga_set_option(option, path); free(path); free(option); count++; } free(config_key); if (k > 0 && !config_value) { // allow to start at floppy_image_0 or floppy_image_1 break; } k++; } while (count < 20) { // set remaining floppy list entries to the empty string char *option = fs_strdup_printf("diskimage%d", count); amiga_set_option(option, ""); free(option); count++; } if (fs_config_get_boolean("writable_floppy_images") == 1) { amiga_floppy_set_writable_images(1); } } fs-uae-2.2.3+dfsg/src/fs-uae/input.c0000644000175000017500000006515112162366654017336 0ustar glaubitzglaubitz#include "fs-uae.h" #include #include #include #include static fs_emu_action g_actions[] = { { INPUTEVENT_MOUSE1_HORIZ, "action_mouse_0_horiz", 0 }, { INPUTEVENT_MOUSE1_VERT, "action_mouse_0_vert", 0 }, { INPUTEVENT_MOUSE1_HORIZ_INV, "action_mouse_0_horiz_inv", 0 }, { INPUTEVENT_MOUSE1_VERT_INV, "action_mouse_0_vert_inv", 0 }, { INPUTEVENT_MOUSE1_UP, "action_mouse_0_up", 0 }, { INPUTEVENT_MOUSE1_DOWN, "action_mouse_0_down", 0 }, { INPUTEVENT_MOUSE1_LEFT, "action_mouse_0_left", 0 }, { INPUTEVENT_MOUSE1_RIGHT, "action_mouse_0_right", 0 }, { INPUTEVENT_MOUSE1_WHEEL, "action_mouse_0_wheel", 0 }, { INPUTEVENT_MOUSE_CDTV_HORIZ, "action_mouse_cdtv_horiz", 0 }, { INPUTEVENT_MOUSE_CDTV_VERT, "action_mouse_cdtv_vert", 0 }, { INPUTEVENT_MOUSE_CDTV_UP, "action_mouse_cdtv_up", 0 }, { INPUTEVENT_MOUSE_CDTV_DOWN, "action_mouse_cdtv_down", 0 }, { INPUTEVENT_MOUSE_CDTV_LEFT, "action_mouse_cdtv_left", 0 }, { INPUTEVENT_MOUSE_CDTV_RIGHT, "action_mouse_cdtv_right", 0 }, { INPUTEVENT_JOY1_HORIZ, "action_joy_0_horiz", 0 }, { INPUTEVENT_JOY1_VERT, "action_joy_0_vert", 0 }, { INPUTEVENT_JOY1_HORIZ_POT, "action_joy_0_horiz_pot", 0 }, { INPUTEVENT_JOY1_VERT_POT, "action_joy_0_vert_pot", 0 }, { INPUTEVENT_JOY1_HORIZ_POT_INV, "action_joy_0_horiz_pot_inv", 0 }, { INPUTEVENT_JOY1_VERT_POT_INV, "action_joy_0_vert_pot_inv", 0 }, { INPUTEVENT_JOY1_LEFT, "action_joy_0_left", 0 }, { INPUTEVENT_JOY1_RIGHT, "action_joy_0_right", 0 }, { INPUTEVENT_JOY1_UP, "action_joy_0_up", 0 }, { INPUTEVENT_JOY1_DOWN, "action_joy_0_down", 0 }, { INPUTEVENT_JOY1_LEFT_UP, "action_joy_0_left_up", 0 }, { INPUTEVENT_JOY1_LEFT_DOWN, "action_joy_0_left_down", 0 }, { INPUTEVENT_JOY1_RIGHT_UP, "action_joy_0_right_up", 0 }, { INPUTEVENT_JOY1_RIGHT_DOWN, "action_joy_0_right_down", 0 }, { INPUTEVENT_JOY1_FIRE_BUTTON, "action_joy_0_fire_button", 0 }, { INPUTEVENT_JOY1_2ND_BUTTON, "action_joy_0_2nd_button", 0 }, { INPUTEVENT_JOY1_3RD_BUTTON, "action_joy_0_3rd_button", 0 }, { INPUTEVENT_JOY1_CD32_PLAY, "action_joy_0_cd32_play", 0 }, { INPUTEVENT_JOY1_CD32_RWD, "action_joy_0_cd32_rwd", 0 }, { INPUTEVENT_JOY1_CD32_FFW, "action_joy_0_cd32_ffw", 0 }, { INPUTEVENT_JOY1_CD32_GREEN, "action_joy_0_cd32_green", 0 }, { INPUTEVENT_JOY1_CD32_YELLOW, "action_joy_0_cd32_yellow", 0 }, { INPUTEVENT_JOY1_CD32_RED, "action_joy_0_cd32_red", 0 }, { INPUTEVENT_JOY1_CD32_BLUE, "action_joy_0_cd32_blue", 0 }, { INPUTEVENT_MOUSE2_HORIZ, "action_mouse_1_horiz", 0 }, { INPUTEVENT_MOUSE2_VERT, "action_mouse_1_vert", 0 }, { INPUTEVENT_MOUSE2_HORIZ_INV, "action_mouse_1_horiz_inv", 0 }, { INPUTEVENT_MOUSE2_VERT_INV, "action_mouse_1_vert_inv", 0 }, { INPUTEVENT_MOUSE2_UP, "action_mouse_1_up", 0 }, { INPUTEVENT_MOUSE2_DOWN, "action_mouse_1_down", 0 }, { INPUTEVENT_MOUSE2_LEFT, "action_mouse_1_left", 0 }, { INPUTEVENT_MOUSE2_RIGHT, "action_mouse_1_right", 0 }, { INPUTEVENT_JOY2_HORIZ, "action_joy_1_horiz", 0 }, { INPUTEVENT_JOY2_VERT, "action_joy_1_vert", 0 }, { INPUTEVENT_JOY2_HORIZ_POT, "action_joy_1_horiz_pot", 0 }, { INPUTEVENT_JOY2_VERT_POT, "action_joy_1_vert_pot", 0 }, { INPUTEVENT_JOY2_HORIZ_POT_INV, "action_joy_1_horiz_pot_inv", 0 }, { INPUTEVENT_JOY2_VERT_POT_INV, "action_joy_1_vert_pot_inv", 0 }, { INPUTEVENT_JOY2_LEFT, "action_joy_1_left", 0 }, { INPUTEVENT_JOY2_RIGHT, "action_joy_1_right", 0 }, { INPUTEVENT_JOY2_UP, "action_joy_1_up", 0 }, { INPUTEVENT_JOY2_DOWN, "action_joy_1_down", 0 }, { INPUTEVENT_JOY2_LEFT_UP, "action_joy_1_left_up", 0 }, { INPUTEVENT_JOY2_LEFT_DOWN, "action_joy_1_left_down", 0 }, { INPUTEVENT_JOY2_RIGHT_UP, "action_joy_1_right_up", 0 }, { INPUTEVENT_JOY2_RIGHT_DOWN, "action_joy_1_right_down", 0 }, { INPUTEVENT_JOY2_FIRE_BUTTON, "action_joy_1_fire_button", 0 }, { INPUTEVENT_JOY2_2ND_BUTTON, "action_joy_1_2nd_button", 0 }, { INPUTEVENT_JOY2_3RD_BUTTON, "action_joy_1_3rd_button", 0 }, { INPUTEVENT_JOY2_CD32_PLAY, "action_joy_1_cd32_play", 0 }, { INPUTEVENT_JOY2_CD32_RWD, "action_joy_1_cd32_rwd", 0 }, { INPUTEVENT_JOY2_CD32_FFW, "action_joy_1_cd32_ffw", 0 }, { INPUTEVENT_JOY2_CD32_GREEN, "action_joy_1_cd32_green", 0 }, { INPUTEVENT_JOY2_CD32_YELLOW, "action_joy_1_cd32_yellow", 0 }, { INPUTEVENT_JOY2_CD32_RED, "action_joy_1_cd32_red", 0 }, { INPUTEVENT_JOY2_CD32_BLUE, "action_joy_1_cd32_blue", 0 }, { INPUTEVENT_LIGHTPEN_HORIZ, "action_lightpen_horiz", 0 }, { INPUTEVENT_LIGHTPEN_VERT, "action_lightpen_vert", 0 }, { INPUTEVENT_LIGHTPEN_LEFT, "action_lightpen_left", 0 }, { INPUTEVENT_LIGHTPEN_RIGHT, "action_lightpen_right", 0 }, { INPUTEVENT_LIGHTPEN_UP, "action_lightpen_up", 0 }, { INPUTEVENT_LIGHTPEN_DOWN, "action_lightpen_down", 0 }, { INPUTEVENT_PAR_JOY1_HORIZ, "action_par_joy_0_horiz", 0 }, { INPUTEVENT_PAR_JOY1_VERT, "action_par_joy_0_vert", 0 }, { INPUTEVENT_PAR_JOY1_LEFT, "action_par_joy_0_left", 0 }, { INPUTEVENT_PAR_JOY1_RIGHT, "action_par_joy_0_right", 0 }, { INPUTEVENT_PAR_JOY1_UP, "action_par_joy_0_up", 0 }, { INPUTEVENT_PAR_JOY1_DOWN, "action_par_joy_0_down", 0 }, { INPUTEVENT_PAR_JOY1_LEFT_UP, "action_par_joy_0_left_up", 0 }, { INPUTEVENT_PAR_JOY1_LEFT_DOWN, "action_par_joy_0_left_down", 0 }, { INPUTEVENT_PAR_JOY1_RIGHT_UP, "action_par_joy_0_right_up", 0 }, { INPUTEVENT_PAR_JOY1_RIGHT_DOWN, "action_par_joy_0_right_down", 0 }, { INPUTEVENT_PAR_JOY1_FIRE_BUTTON, "action_par_joy_0_fire_button", 0 }, { INPUTEVENT_PAR_JOY1_2ND_BUTTON, "action_par_joy_0_2nd_button", 0 }, { INPUTEVENT_PAR_JOY2_HORIZ, "action_par_joy_1_horiz", 0 }, { INPUTEVENT_PAR_JOY2_VERT, "action_par_joy_1_vert", 0 }, { INPUTEVENT_PAR_JOY2_LEFT, "action_par_joy_1_left", 0 }, { INPUTEVENT_PAR_JOY2_RIGHT, "action_par_joy_1_right", 0 }, { INPUTEVENT_PAR_JOY2_UP, "action_par_joy_1_up", 0 }, { INPUTEVENT_PAR_JOY2_DOWN, "action_par_joy_1_down", 0 }, { INPUTEVENT_PAR_JOY2_LEFT_UP, "action_par_joy_1_left_up", 0 }, { INPUTEVENT_PAR_JOY2_LEFT_DOWN, "action_par_joy_1_left_down", 0 }, { INPUTEVENT_PAR_JOY2_RIGHT_UP, "action_par_joy_1_right_up", 0 }, { INPUTEVENT_PAR_JOY2_RIGHT_DOWN, "action_par_joy_1_right_down", 0 }, { INPUTEVENT_PAR_JOY2_FIRE_BUTTON, "action_par_joy_1_fire_button", 0 }, { INPUTEVENT_PAR_JOY2_2ND_BUTTON, "action_par_joy_1_2nd_button", 0 }, { INPUTEVENT_KEY_F1, "action_key_f1", 0 }, { INPUTEVENT_KEY_F2, "action_key_f2", 0 }, { INPUTEVENT_KEY_F3, "action_key_f3", 0 }, { INPUTEVENT_KEY_F4, "action_key_f4", 0 }, { INPUTEVENT_KEY_F5, "action_key_f5", 0 }, { INPUTEVENT_KEY_F6, "action_key_f6", 0 }, { INPUTEVENT_KEY_F7, "action_key_f7", 0 }, { INPUTEVENT_KEY_F8, "action_key_f8", 0 }, { INPUTEVENT_KEY_F9, "action_key_f9", 0 }, { INPUTEVENT_KEY_F10, "action_key_f10", 0 }, { INPUTEVENT_KEY_ESC, "action_key_esc", 0 }, { INPUTEVENT_KEY_TAB, "action_key_tab", 0 }, { INPUTEVENT_KEY_CTRL, "action_key_ctrl", 0 }, { INPUTEVENT_KEY_CAPS_LOCK, "action_key_caps_lock", 0 }, { INPUTEVENT_KEY_SHIFT_LEFT, "action_key_shift_left", 0 }, { INPUTEVENT_KEY_ALT_LEFT, "action_key_alt_left", 0 }, { INPUTEVENT_KEY_AMIGA_LEFT, "action_key_amiga_left", 0 }, { INPUTEVENT_KEY_AMIGA_RIGHT, "action_key_amiga_right", 0 }, { INPUTEVENT_KEY_ALT_RIGHT, "action_key_alt_right", 0 }, { INPUTEVENT_KEY_SHIFT_RIGHT, "action_key_shift_right", 0 }, { INPUTEVENT_KEY_SPACE, "action_key_space", 0 }, { INPUTEVENT_KEY_CURSOR_UP, "action_key_cursor_up", 0 }, { INPUTEVENT_KEY_CURSOR_DOWN, "action_key_cursor_down", 0 }, { INPUTEVENT_KEY_CURSOR_LEFT, "action_key_cursor_left", 0 }, { INPUTEVENT_KEY_CURSOR_RIGHT, "action_key_cursor_right", 0 }, { INPUTEVENT_KEY_HELP, "action_key_help", 0 }, { INPUTEVENT_KEY_DEL, "action_key_del", 0 }, { INPUTEVENT_KEY_BACKSPACE, "action_key_backspace", 0 }, { INPUTEVENT_KEY_RETURN, "action_key_return", 0 }, { INPUTEVENT_KEY_A, "action_key_a", 0 }, { INPUTEVENT_KEY_B, "action_key_b", 0 }, { INPUTEVENT_KEY_C, "action_key_c", 0 }, { INPUTEVENT_KEY_D, "action_key_d", 0 }, { INPUTEVENT_KEY_E, "action_key_e", 0 }, { INPUTEVENT_KEY_F, "action_key_f", 0 }, { INPUTEVENT_KEY_G, "action_key_g", 0 }, { INPUTEVENT_KEY_H, "action_key_h", 0 }, { INPUTEVENT_KEY_I, "action_key_i", 0 }, { INPUTEVENT_KEY_J, "action_key_j", 0 }, { INPUTEVENT_KEY_K, "action_key_k", 0 }, { INPUTEVENT_KEY_L, "action_key_l", 0 }, { INPUTEVENT_KEY_M, "action_key_m", 0 }, { INPUTEVENT_KEY_N, "action_key_n", 0 }, { INPUTEVENT_KEY_O, "action_key_o", 0 }, { INPUTEVENT_KEY_P, "action_key_p", 0 }, { INPUTEVENT_KEY_Q, "action_key_q", 0 }, { INPUTEVENT_KEY_R, "action_key_r", 0 }, { INPUTEVENT_KEY_S, "action_key_s", 0 }, { INPUTEVENT_KEY_T, "action_key_t", 0 }, { INPUTEVENT_KEY_U, "action_key_u", 0 }, { INPUTEVENT_KEY_V, "action_key_v", 0 }, { INPUTEVENT_KEY_W, "action_key_w", 0 }, { INPUTEVENT_KEY_X, "action_key_x", 0 }, { INPUTEVENT_KEY_Y, "action_key_y", 0 }, { INPUTEVENT_KEY_Z, "action_key_z", 0 }, { INPUTEVENT_KEY_ENTER, "action_key_enter", 0 }, { INPUTEVENT_KEY_NP_0, "action_key_np_0", 0 }, { INPUTEVENT_KEY_NP_1, "action_key_np_1", 0 }, { INPUTEVENT_KEY_NP_2, "action_key_np_2", 0 }, { INPUTEVENT_KEY_NP_3, "action_key_np_3", 0 }, { INPUTEVENT_KEY_NP_4, "action_key_np_4", 0 }, { INPUTEVENT_KEY_NP_5, "action_key_np_5", 0 }, { INPUTEVENT_KEY_NP_6, "action_key_np_6", 0 }, { INPUTEVENT_KEY_NP_7, "action_key_np_7", 0 }, { INPUTEVENT_KEY_NP_8, "action_key_np_8", 0 }, { INPUTEVENT_KEY_NP_9, "action_key_np_9", 0 }, { INPUTEVENT_KEY_NP_PERIOD, "action_key_np_period", 0 }, { INPUTEVENT_KEY_NP_ADD, "action_key_np_add", 0 }, { INPUTEVENT_KEY_NP_SUB, "action_key_np_sub", 0 }, { INPUTEVENT_KEY_NP_MUL, "action_key_np_mul", 0 }, { INPUTEVENT_KEY_NP_DIV, "action_key_np_div", 0 }, { INPUTEVENT_KEY_NP_LPAREN, "action_key_np_lparen", 0 }, { INPUTEVENT_KEY_NP_RPAREN, "action_key_np_rparen", 0 }, { INPUTEVENT_KEY_2B, "action_key_2b", 0 }, { INPUTEVENT_KEY_30, "action_key_30", 0 }, { INPUTEVENT_KEY_BACKQUOTE, "action_key_backquote", 0 }, { INPUTEVENT_KEY_1, "action_key_1", 0 }, { INPUTEVENT_KEY_2, "action_key_2", 0 }, { INPUTEVENT_KEY_3, "action_key_3", 0 }, { INPUTEVENT_KEY_4, "action_key_4", 0 }, { INPUTEVENT_KEY_5, "action_key_5", 0 }, { INPUTEVENT_KEY_6, "action_key_6", 0 }, { INPUTEVENT_KEY_7, "action_key_7", 0 }, { INPUTEVENT_KEY_8, "action_key_8", 0 }, { INPUTEVENT_KEY_9, "action_key_9", 0 }, { INPUTEVENT_KEY_0, "action_key_0", 0 }, { INPUTEVENT_KEY_SUB, "action_key_sub", 0 }, { INPUTEVENT_KEY_EQUALS, "action_key_equals", 0 }, { INPUTEVENT_KEY_BACKSLASH, "action_key_backslash", 0 }, { INPUTEVENT_KEY_LEFTBRACKET, "action_key_leftbracket", 0 }, { INPUTEVENT_KEY_RIGHTBRACKET, "action_key_rightbracket", 0 }, { INPUTEVENT_KEY_SEMICOLON, "action_key_semicolon", 0 }, { INPUTEVENT_KEY_SINGLEQUOTE, "action_key_singlequote", 0 }, { INPUTEVENT_KEY_COMMA, "action_key_comma", 0 }, { INPUTEVENT_KEY_PERIOD, "action_key_period", 0 }, { INPUTEVENT_KEY_DIV, "action_key_div", 0 }, { INPUTEVENT_MOUSEWHEEL_DOWN, "action_mousewheel_down", 0 }, { INPUTEVENT_MOUSEWHEEL_UP, "action_mousewheel_up", 0 }, { INPUTEVENT_KEY_CDTV_STOP, "action_key_cdtv_stop", 0 }, { INPUTEVENT_KEY_CDTV_PLAYPAUSE, "action_key_cdtv_playpause", 0 }, { INPUTEVENT_KEY_CDTV_PREV, "action_key_cdtv_prev", 0 }, { INPUTEVENT_KEY_CDTV_NEXT, "action_key_cdtv_next", 0 }, { INPUTEVENT_KEY_CDTV_REW, "action_key_cdtv_rew", 0 }, { INPUTEVENT_KEY_CDTV_FF, "action_key_cdtv_ff", 0 }, { INPUTEVENT_KEY_0E, "action_key_0e", 0 }, { INPUTEVENT_KEY_1C, "action_key_1c", 0 }, { INPUTEVENT_KEY_2C, "action_key_2c", 0 }, { INPUTEVENT_KEY_3B, "action_key_3b", 0 }, { INPUTEVENT_KEY_68, "action_key_68", 0 }, { INPUTEVENT_KEY_69, "action_key_69", 0 }, { INPUTEVENT_KEY_6A, "action_key_6a", 0 }, { INPUTEVENT_KEY_6C, "action_key_6c", 0 }, { INPUTEVENT_KEY_78, "action_key_78", 0 }, { INPUTEVENT_KEY_79, "action_key_79", 0 }, { INPUTEVENT_KEY_7A, "action_key_7a", 0 }, { INPUTEVENT_KEY_7B, "action_key_7b", 0 }, { INPUTEVENT_KEY_7C, "action_key_7c", 0 }, { INPUTEVENT_KEY_7D, "action_key_7d", 0 }, { INPUTEVENT_KEY_7E, "action_key_7e", 0 }, { INPUTEVENT_KEY_7F, "action_key_7f", 0 }, { INPUTEVENT_SPC_FREEZEBUTTON, "action_activate_cartridge", 0 }, { INPUTEVENT_SPC_EFLOPPY0, "action_eject_floppy_0", 0 }, { INPUTEVENT_SPC_EFLOPPY1, "action_eject_floppy_1", 0 }, { INPUTEVENT_SPC_EFLOPPY2, "action_eject_floppy_2", 0 }, { INPUTEVENT_SPC_EFLOPPY3, "action_eject_floppy_3", 0 }, { INPUTEVENT_SPC_PAUSE, "action_pause", 0 }, { INPUTEVENT_SPC_WARP, "action_warp", 0 }, { INPUTEVENT_SPC_IRQ7, "action_irq_7", 0 }, { INPUTEVENT_SPC_STATEREWIND, "action_state_rewind", 0 }, { INPUTEVENT_SPC_STATECURRENT, "action_state_current", 0 }, { INPUTEVENT_SPC_STATECAPTURE, "action_state_capture", 0 }, { INPUTEVENT_SPC_VOLUME_DOWN, "action_volume_down", 0 }, { INPUTEVENT_SPC_VOLUME_UP, "action_volume_up", 0 }, { INPUTEVENT_SPC_VOLUME_MUTE, "action_volume_mute", 0 }, { INPUTEVENT_SPC_MASTER_VOLUME_DOWN, "action_master_volume_down", 0 }, { INPUTEVENT_SPC_MASTER_VOLUME_UP, "action_master_volume_up", 0 }, { INPUTEVENT_SPC_MASTER_VOLUME_MUTE, "action_master_volume_mute", 0 }, { INPUTEVENT_SPC_QUIT, "action_quit", 0 }, { INPUTEVENT_SPC_SOFTRESET, "action_soft_reset", 0 }, { INPUTEVENT_SPC_HARDRESET, "action_hard_reset", 0 }, { INPUTEVENT_SPC_SWITCHINTERPOL, "action_switch_interpol", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_NEXT, "action_disk_swapper_next", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_PREV, "action_disk_swapper_prev", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_INSERT0, "action_disk_swapper_insert_0", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_INSERT1, "action_disk_swapper_insert_1", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_INSERT2, "action_disk_swapper_insert_2", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_INSERT3, "action_disk_swapper_insert_3", 0 }, { INPUTEVENT_SPC_DISK_PREV0, "action_disk_prev_0", 0 }, { INPUTEVENT_SPC_DISK_PREV1, "action_disk_prev_1", 0 }, { INPUTEVENT_SPC_DISK_PREV2, "action_disk_prev_2", 0 }, { INPUTEVENT_SPC_DISK_PREV3, "action_disk_prev_3", 0 }, { INPUTEVENT_SPC_DISK_NEXT0, "action_disk_next_0", 0 }, { INPUTEVENT_SPC_DISK_NEXT1, "action_disk_next_1", 0 }, { INPUTEVENT_SPC_DISK_NEXT2, "action_disk_next_2", 0 }, { INPUTEVENT_SPC_DISK_NEXT3, "action_disk_next_3", 0 }, { INPUTEVENT_SPC_ARCADIA_DIAGNOSTICS, "action_arcadia_diagnostics", 0 }, { INPUTEVENT_SPC_ARCADIA_PLAYER1, "action_arcadia_player_1", 0 }, { INPUTEVENT_SPC_ARCADIA_PLAYER2, "action_arcadia_player_2", 0 }, { INPUTEVENT_SPC_ARCADIA_COIN1, "action_arcadia_coin_1", 0 }, { INPUTEVENT_SPC_ARCADIA_COIN2, "action_arcadia_coin_2", 0 }, { INPUTEVENT_SPC_CDTV_FRONT_PANEL_STOP, "action_cdtv_front_panel_stop", 0 }, { INPUTEVENT_SPC_CDTV_FRONT_PANEL_PLAYPAUSE, "action_cdtv_front_panel_playpause", 0 }, { INPUTEVENT_SPC_CDTV_FRONT_PANEL_PREV, "action_cdtv_front_panel_prev", 0 }, { INPUTEVENT_SPC_CDTV_FRONT_PANEL_NEXT, "action_cdtv_front_panel_next", 0 }, { INPUTEVENT_SPC_CDTV_FRONT_PANEL_REW, "action_cdtv_front_panel_rew", 0 }, { INPUTEVENT_SPC_CDTV_FRONT_PANEL_FF, "action_cdtv_front_panel_ff", 0 }, { INPUTEVENT_SPC_STATESAVE1, "action_save_state_1", 0 }, { INPUTEVENT_SPC_STATESAVE2, "action_save_state_2", 0 }, { INPUTEVENT_SPC_STATESAVE3, "action_save_state_3", 0 }, { INPUTEVENT_SPC_STATESAVE4, "action_save_state_4", 0 }, { INPUTEVENT_SPC_STATESAVE5, "action_save_state_5", 0 }, { INPUTEVENT_SPC_STATESAVE6, "action_save_state_6", 0 }, { INPUTEVENT_SPC_STATESAVE7, "action_save_state_7", 0 }, { INPUTEVENT_SPC_STATESAVE8, "action_save_state_8", 0 }, { INPUTEVENT_SPC_STATESAVE9, "action_save_state_9", 0 }, { INPUTEVENT_SPC_STATERESTORE1, "action_restore_state_1", 0 }, { INPUTEVENT_SPC_STATERESTORE2, "action_restore_state_2", 0 }, { INPUTEVENT_SPC_STATERESTORE3, "action_restore_state_3", 0 }, { INPUTEVENT_SPC_STATERESTORE4, "action_restore_state_4", 0 }, { INPUTEVENT_SPC_STATERESTORE5, "action_restore_state_5", 0 }, { INPUTEVENT_SPC_STATERESTORE6, "action_restore_state_6", 0 }, { INPUTEVENT_SPC_STATERESTORE7, "action_restore_state_7", 0 }, { INPUTEVENT_SPC_STATERESTORE8, "action_restore_state_8", 0 }, { INPUTEVENT_SPC_STATERESTORE9, "action_restore_state_9", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_0_0, "action_drive_0_insert_floppy_0", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_0_1, "action_drive_0_insert_floppy_1", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_0_2, "action_drive_0_insert_floppy_2", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_0_3, "action_drive_0_insert_floppy_3", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_0_4, "action_drive_0_insert_floppy_4", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_0_5, "action_drive_0_insert_floppy_5", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_0_6, "action_drive_0_insert_floppy_6", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_0_7, "action_drive_0_insert_floppy_7", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_0_8, "action_drive_0_insert_floppy_8", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_0_9, "action_drive_0_insert_floppy_9", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_0_10, "action_drive_0_insert_floppy_10", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_0_11, "action_drive_0_insert_floppy_11", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_0_12, "action_drive_0_insert_floppy_12", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_0_13, "action_drive_0_insert_floppy_13", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_0_14, "action_drive_0_insert_floppy_14", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_0_15, "action_drive_0_insert_floppy_15", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_0_16, "action_drive_0_insert_floppy_16", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_0_17, "action_drive_0_insert_floppy_17", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_0_18, "action_drive_0_insert_floppy_18", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_0_19, "action_drive_0_insert_floppy_19", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_1_0, "action_drive_1_insert_floppy_0", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_1_1, "action_drive_1_insert_floppy_1", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_1_2, "action_drive_1_insert_floppy_2", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_1_3, "action_drive_1_insert_floppy_3", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_1_4, "action_drive_1_insert_floppy_4", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_1_5, "action_drive_1_insert_floppy_5", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_1_6, "action_drive_1_insert_floppy_6", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_1_7, "action_drive_1_insert_floppy_7", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_1_8, "action_drive_1_insert_floppy_8", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_1_9, "action_drive_1_insert_floppy_9", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_1_10, "action_drive_1_insert_floppy_10", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_1_11, "action_drive_1_insert_floppy_11", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_1_12, "action_drive_1_insert_floppy_12", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_1_13, "action_drive_1_insert_floppy_13", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_1_14, "action_drive_1_insert_floppy_14", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_1_15, "action_drive_1_insert_floppy_15", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_1_16, "action_drive_1_insert_floppy_16", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_1_17, "action_drive_1_insert_floppy_17", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_1_18, "action_drive_1_insert_floppy_18", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_1_19, "action_drive_1_insert_floppy_19", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_2_0, "action_drive_2_insert_floppy_0", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_2_1, "action_drive_2_insert_floppy_1", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_2_2, "action_drive_2_insert_floppy_2", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_2_3, "action_drive_2_insert_floppy_3", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_2_4, "action_drive_2_insert_floppy_4", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_2_5, "action_drive_2_insert_floppy_5", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_2_6, "action_drive_2_insert_floppy_6", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_2_7, "action_drive_2_insert_floppy_7", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_2_8, "action_drive_2_insert_floppy_8", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_2_9, "action_drive_2_insert_floppy_9", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_2_10, "action_drive_2_insert_floppy_10", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_2_11, "action_drive_2_insert_floppy_11", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_2_12, "action_drive_2_insert_floppy_12", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_2_13, "action_drive_2_insert_floppy_13", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_2_14, "action_drive_2_insert_floppy_14", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_2_15, "action_drive_2_insert_floppy_15", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_2_16, "action_drive_2_insert_floppy_16", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_2_17, "action_drive_2_insert_floppy_17", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_2_18, "action_drive_2_insert_floppy_18", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_2_19, "action_drive_2_insert_floppy_19", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_3_0, "action_drive_3_insert_floppy_0", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_3_1, "action_drive_3_insert_floppy_1", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_3_2, "action_drive_3_insert_floppy_2", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_3_3, "action_drive_3_insert_floppy_3", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_3_4, "action_drive_3_insert_floppy_4", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_3_5, "action_drive_3_insert_floppy_5", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_3_6, "action_drive_3_insert_floppy_6", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_3_7, "action_drive_3_insert_floppy_7", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_3_8, "action_drive_3_insert_floppy_8", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_3_9, "action_drive_3_insert_floppy_9", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_3_10, "action_drive_3_insert_floppy_10", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_3_11, "action_drive_3_insert_floppy_11", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_3_12, "action_drive_3_insert_floppy_12", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_3_13, "action_drive_3_insert_floppy_13", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_3_14, "action_drive_3_insert_floppy_14", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_3_15, "action_drive_3_insert_floppy_15", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_3_16, "action_drive_3_insert_floppy_16", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_3_17, "action_drive_3_insert_floppy_17", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_3_18, "action_drive_3_insert_floppy_18", 0 }, { INPUTEVENT_SPC_DISKSWAPPER_3_19, "action_drive_3_insert_floppy_19", 0 }, { INPUTEVENT_AMIGA_JOYPORT_MODE_0_NONE, "action_joyport_0_mode_none", 0 }, { INPUTEVENT_AMIGA_JOYPORT_MODE_0_MOUSE, "action_joyport_0_mode_mouse", 0 }, { INPUTEVENT_AMIGA_JOYPORT_MODE_0_DJOY, "action_joyport_0_mode_djoy", 0 }, { INPUTEVENT_AMIGA_JOYPORT_MODE_0_GAMEPAD, "action_joyport_0_mode_gamepad", 0 }, { INPUTEVENT_AMIGA_JOYPORT_MODE_0_AJOY, "action_joyport_0_mode_ajoy", 0 }, { INPUTEVENT_AMIGA_JOYPORT_MODE_0_CDTVJOY, "action_joyport_0_mode_cdtvjoy", 0 }, { INPUTEVENT_AMIGA_JOYPORT_MODE_0_CD32JOY, "action_joyport_0_mode_cd32joy", 0 }, { INPUTEVENT_AMIGA_JOYPORT_MODE_0_LIGHTPEN, "action_joyport_0_mode_lightpen", 0 }, { INPUTEVENT_AMIGA_JOYPORT_MODE_1_NONE, "action_joyport_1_mode_none", 0 }, { INPUTEVENT_AMIGA_JOYPORT_MODE_1_MOUSE, "action_joyport_1_mode_mouse", 0 }, { INPUTEVENT_AMIGA_JOYPORT_MODE_1_DJOY, "action_joyport_1_mode_djoy", 0 }, { INPUTEVENT_AMIGA_JOYPORT_MODE_1_GAMEPAD, "action_joyport_1_mode_gamepad", 0 }, { INPUTEVENT_AMIGA_JOYPORT_MODE_1_AJOY, "action_joyport_1_mode_ajoy", 0 }, { INPUTEVENT_AMIGA_JOYPORT_MODE_1_CDTVJOY, "action_joyport_1_mode_cdtvjoy", 0 }, { INPUTEVENT_AMIGA_JOYPORT_MODE_1_CD32JOY, "action_joyport_1_mode_cd32joy", 0 }, { INPUTEVENT_AMIGA_JOYPORT_MODE_1_LIGHTPEN, "action_joyport_1_mode_lightpen", 0 }, { INPUTEVENT_AMIGA_JOYPORT_MODE_2_NONE, "action_joyport_2_mode_none", 0 }, { INPUTEVENT_AMIGA_JOYPORT_MODE_2_MOUSE, "action_joyport_2_mode_mouse", 0 }, { INPUTEVENT_AMIGA_JOYPORT_MODE_2_DJOY, "action_joyport_2_mode_djoy", 0 }, { INPUTEVENT_AMIGA_JOYPORT_MODE_2_GAMEPAD, "action_joyport_2_mode_gamepad", 0 }, { INPUTEVENT_AMIGA_JOYPORT_MODE_2_AJOY, "action_joyport_2_mode_ajoy", 0 }, { INPUTEVENT_AMIGA_JOYPORT_MODE_2_CDTVJOY, "action_joyport_2_mode_cdtvjoy", 0 }, { INPUTEVENT_AMIGA_JOYPORT_MODE_2_CD32JOY, "action_joyport_2_mode_cd32joy", 0 }, { INPUTEVENT_AMIGA_JOYPORT_MODE_2_LIGHTPEN, "action_joyport_2_mode_lightpen", 0 }, { INPUTEVENT_AMIGA_JOYPORT_MODE_3_NONE, "action_joyport_3_mode_none", 0 }, { INPUTEVENT_AMIGA_JOYPORT_MODE_3_MOUSE, "action_joyport_3_mode_mouse", 0 }, { INPUTEVENT_AMIGA_JOYPORT_MODE_3_DJOY, "action_joyport_3_mode_djoy", 0 }, { INPUTEVENT_AMIGA_JOYPORT_MODE_3_GAMEPAD, "action_joyport_3_mode_gamepad", 0 }, { INPUTEVENT_AMIGA_JOYPORT_MODE_3_AJOY, "action_joyport_3_mode_ajoy", 0 }, { INPUTEVENT_AMIGA_JOYPORT_MODE_3_CDTVJOY, "action_joyport_3_mode_cdtvjoy", 0 }, { INPUTEVENT_AMIGA_JOYPORT_MODE_3_CD32JOY, "action_joyport_3_mode_cd32joy", 0 }, { INPUTEVENT_AMIGA_JOYPORT_MODE_3_LIGHTPEN, "action_joyport_3_mode_lightpen", 0 }, { INPUTEVENT_SPC_ENTERDEBUGGER, "action_enter_debugger", 0 }, { 65536, "action_none", 0 }, { 0, 0, 0 }, }; static int hotkey_function(int key_code, int key_mod) { //write_log("hotkey: %d mod %d\n", key_code, key_mod); switch (key_code) { case FS_ML_KEY_R: fs_emu_log("hot key: soft reset\n"); fs_emu_warning(_("Soft Reset")); fs_emu_queue_action(INPUTEVENT_SPC_SOFTRESET, 1); return 0; case FS_ML_KEY_T: fs_emu_log("hot key: hard reset\n"); fs_emu_warning(_("Hard Reset")); fs_emu_queue_action(INPUTEVENT_SPC_HARDRESET, 1); return 0; case FS_ML_KEY_A: fs_emu_log("hot key: freeze button\n"); fs_emu_queue_action(INPUTEVENT_SPC_FREEZEBUTTON, 1); return 0; case FS_ML_KEY_D: fs_emu_log("hot key: enter debugger\n"); if (fs_config_get_boolean("console_debugger") == 1) { fs_emu_warning(_("Activated debugger")); fs_emu_queue_action(INPUTEVENT_SPC_ENTERDEBUGGER, 1); } else { fs_emu_warning(_("Option \"%s\" is not enabled"), "console_debugger"); } return 0; } return 0; } void fs_uae_configure_actions() { fs_log("fs_uae_configure_actions\n"); fs_emu_set_actions(g_actions); for (int i = 0; i < FS_UAE_NUM_INPUT_PORTS; i++) { fs_uae_read_override_actions_for_port(i); } fs_emu_set_hotkey_function(hotkey_function); } fs-uae-2.2.3+dfsg/src/missing.cpp0000644000175000017500000000102712162366654017020 0ustar glaubitzglaubitz/* * UAE - The Un*x Amiga Emulator * * Various stuff missing in some OSes. * * Copyright 1997 Bernd Schmidt */ #include "sysconfig.h" #include "sysdeps.h" #include "uae.h" #ifndef HAVE_STRDUP TCHAR *my_strdup (const TCHAR *s) { TCHAR *x = (char*)xmalloc(strlen((TCHAR *)s) + 1); strcpy(x, (TCHAR *)s); return x; } #endif #if 0 void *xmalloc (size_t n) { void *a = malloc (n); return a; } void *xcalloc (size_t n, size_t size) { void *a = calloc (n, size); return a; } void xfree (const void *p) { free (p); } #endif fs-uae-2.2.3+dfsg/src/diskutil.cpp0000644000175000017500000001452112162366654017202 0ustar glaubitzglaubitz#include "sysconfig.h" #include "sysdeps.h" #include "crc32.h" #define MFMMASK 0x55555555 static uae_u32 getmfmlong (uae_u16 * mbuf) { return (uae_u32)(((*mbuf << 16) | *(mbuf + 1)) & MFMMASK); } #define FLOPPY_WRITE_LEN 6250 static int drive_write_adf_amigados (uae_u16 *mbuf, uae_u16 *mend, uae_u8 *writebuffer, uae_u8 *writebuffer_ok, int track, int *outsize) { int i; uae_u32 odd, even, chksum, id, dlong; uae_u8 *secdata; uae_u8 secbuf[544]; mend -= (4 + 16 + 8 + 512); *outsize = 11 * 512; for (;;) { int trackoffs; /* all sectors complete? */ for (i = 0; i < 11; i++) { if (!writebuffer_ok[i]) break; } if (i == 11) return 0; do { while (*mbuf++ != 0x4489) { if (mbuf >= mend) { write_log (_T("* track %d, unexpected end of data\n"), track); return 1; } } } while (*mbuf++ != 0x4489); odd = getmfmlong (mbuf); even = getmfmlong (mbuf + 2); mbuf += 4; id = (odd << 1) | even; trackoffs = (id & 0xff00) >> 8; if (trackoffs > 10) { write_log (_T("* track %d, corrupt sector number %d\n"), track, trackoffs); goto next; } /* this sector is already ok? */ if (writebuffer_ok[trackoffs]) goto next; chksum = odd ^ even; for (i = 0; i < 4; i++) { odd = getmfmlong (mbuf); even = getmfmlong (mbuf + 8); mbuf += 2; dlong = (odd << 1) | even; if (dlong) { write_log (_T("* track %d, sector %d header crc error\n"), track, trackoffs); goto next; } chksum ^= odd ^ even; } /* could check here if the label is nonstandard */ mbuf += 8; odd = getmfmlong (mbuf); even = getmfmlong (mbuf + 2); mbuf += 4; if (((odd << 1) | even) != chksum || ((id & 0x00ff0000) >> 16) != (uae_u32)track) return 3; odd = getmfmlong (mbuf); even = getmfmlong (mbuf + 2); mbuf += 4; chksum = (odd << 1) | even; secdata = secbuf + 32; for (i = 0; i < 128; i++) { odd = getmfmlong (mbuf); even = getmfmlong (mbuf + 256); mbuf += 2; dlong = (odd << 1) | even; *secdata++ = (uae_u8)(dlong >> 24); *secdata++ = (uae_u8)(dlong >> 16); *secdata++ = (uae_u8)(dlong >> 8); *secdata++ = (uae_u8)dlong; chksum ^= odd ^ even; } mbuf += 256; if (chksum) { write_log (_T("* track %d, sector %d data crc error\n"), track, trackoffs); goto next; } memcpy (writebuffer + trackoffs * 512, secbuf + 32, 512); writebuffer_ok[trackoffs] = 0xff; continue; next: mbuf += 8; } } /* search and align to 0x4489 WORDSYNC markers */ int isamigatrack(uae_u16 *amigamfmbuffer, uae_u8 *mfmdata, int len, uae_u8 *writebuffer, uae_u8 *writebuffer_ok, int track, int *outsize) { uae_u16 *dst = amigamfmbuffer; int shift, syncshift, sync; uae_u32 l; uae_u16 w; *outsize = 11 * 512; len *= 8; sync = syncshift = shift = 0; while (len--) { l = (mfmdata[0] << 16) | (mfmdata[1] << 8) | (mfmdata[2] << 0); w = (uae_u16)(l >> (8 - shift)); if (w == 0x4489) { sync = 1; syncshift = 0; } if (sync) { if (syncshift == 0) *dst++ = w; syncshift++; if (syncshift == 16) syncshift = 0; } shift++; if (shift == 8) { mfmdata++; shift = 0; } } if (sync) return drive_write_adf_amigados (amigamfmbuffer, dst, writebuffer, writebuffer_ok, track, outsize); return -1; } static uae_u16 getmfmword (uae_u16 *mbuf, int shift) { return (mbuf[0] << shift) | (mbuf[1] >> (16 - shift)); } static uae_u8 mfmdecode (uae_u16 **mfmp, int shift) { uae_u16 mfm = getmfmword (*mfmp, shift); uae_u8 out = 0; int i; (*mfmp)++; mfm &= 0x5555; for (i = 0; i < 8; i++) { out >>= 1; if (mfm & 1) out |= 0x80; mfm >>= 2; } return out; } static int drive_write_adf_pc (uae_u16 *mbuf, uae_u16 *mend, uae_u8 *writebuffer, uae_u8 *writebuffer_ok, int track, int *outsecs) { int sectors, shift, sector, i; uae_u8 mark; uae_u8 secbuf[3 + 1 + 512]; uae_u16 crc; int mfmcount; secbuf[0] = secbuf[1] = secbuf[2] = 0xa1; secbuf[3] = 0xfb; sectors = 0; sector = -1; shift = 0; mend -= (4 + 16 + 8 + 512); for (;;) { *outsecs = sectors; mfmcount = 0; while (getmfmword (mbuf, shift) != 0x4489) { mfmcount++; if (mbuf >= mend) { if (sectors >= 1) return 0; write_log (_T("* track %d, unexpected end of data\n"), track); return 1; } shift++; if (shift == 16) { shift = 0; mbuf++; } if (sector >= 0 && mfmcount / 16 >= 43) sector = -1; } mfmcount = 0; while (getmfmword (mbuf, shift) == 0x4489) { mfmcount++; if (mbuf >= mend) { if (sectors >= 1) return 0; return 1; } mbuf++; } if (mfmcount < 3) // ignore if less than 3 sync markers continue; mark = mfmdecode (&mbuf, shift); if (mark == 0xfe) { uae_u8 tmp[8]; uae_u8 cyl, head, size; cyl = mfmdecode (&mbuf, shift); head = mfmdecode (&mbuf, shift); sector = mfmdecode (&mbuf, shift); size = mfmdecode (&mbuf, shift); crc = (mfmdecode (&mbuf, shift) << 8) | mfmdecode (&mbuf, shift); tmp[0] = 0xa1; tmp[1] = 0xa1; tmp[2] = 0xa1; tmp[3] = mark; tmp[4] = cyl; tmp[5] = head; tmp[6] = sector; tmp[7] = size; // skip 28 bytes for (i = 0; i < 28; i++) mfmdecode (&mbuf, shift); if (get_crc16 (tmp, 8) != crc || cyl != track / 2 || head != (track & 1) || size != 2 || sector < 1 || sector > 20) { write_log (_T("PCDOS: track %d, corrupted sector header\n"), track); continue; } sector--; continue; } if (mark != 0xfb && mark != 0xfa) { write_log (_T("PCDOS: track %d: unknown address mark %02X\n"), track, mark); continue; } if (sector < 0) { write_log (_T("PCDOS: track %d: data mark without header\n"), track); continue; } for (i = 0; i < 512; i++) secbuf[i + 4] = mfmdecode (&mbuf, shift); crc = (mfmdecode (&mbuf, shift) << 8) | mfmdecode (&mbuf, shift); if (get_crc16 (secbuf, 3 + 1 + 512) != crc) { write_log (_T("PCDOS: track %d, sector %d data checksum error\n"), track, sector + 1); continue; } memcpy (writebuffer + sector * 512, secbuf + 4, 512); sectors++; sector = -1; } } int ispctrack(uae_u16 *amigamfmbuffer, uae_u8 *mfmdata, int len, uae_u8 *writebuffer, uae_u8 *writebuffer_ok, int track, int *outsize) { int i, outsecs; for (i = 0; i < len / 2; i++) amigamfmbuffer[i] = mfmdata[i * 2 + 1] | (mfmdata[i * 2 + 0] << 8); i = drive_write_adf_pc (amigamfmbuffer, amigamfmbuffer + len / 2, writebuffer, writebuffer_ok, track, &outsecs); *outsize = outsecs * 512; if (*outsize < 9 * 512) *outsize = 9 * 512; return i ? -1 : 0; } fs-uae-2.2.3+dfsg/src/main.cpp0000644000175000017500000006150412162366655016302 0ustar glaubitzglaubitz/* * UAE - The Un*x Amiga Emulator * * Main program * * Copyright 1995 Ed Hanway * Copyright 1995, 1996, 1997 Bernd Schmidt */ #include "sysconfig.h" #include "sysdeps.h" #include #include "options.h" #include "threaddep/thread.h" #include "uae.h" #include "gensound.h" #include "audio.h" #include "sounddep/sound.h" #include "events.h" #include "uae/memory.h" #include "custom.h" #include "serial.h" #include "newcpu.h" #include "disk.h" #include "debug.h" #include "xwin.h" #include "inputdevice.h" #include "keybuf.h" #include "gui.h" #include "zfile.h" #include "autoconf.h" #include "traps.h" #include "osemu.h" #include "picasso96.h" #include "bsdsocket.h" #include "uaeexe.h" #include "native2amiga.h" #include "scsidev.h" #include "uaeserial.h" #include "akiko.h" #include "cdtv.h" #include "savestate.h" #include "filesys.h" #include "parallel.h" #include "a2091.h" #include "a2065.h" #include "ncr_scsi.h" #include "scsi.h" #include "sana2.h" #include "blkdev.h" #include "gfxfilter.h" #include "uaeresource.h" #include "dongle.h" #include "sampler.h" #include "consolehook.h" #ifdef RETROPLATFORM #include "rp.h" #endif #ifdef USE_SDL #include "SDL.h" #endif long int version = 256 * 65536L * UAEMAJOR + 65536L * UAEMINOR + UAESUBREV; struct uae_prefs currprefs, changed_prefs; int config_changed; bool no_gui = 0, quit_to_gui = 0; bool cloanto_rom = 0; bool kickstart_rom = 1; bool console_emulation = 0; struct gui_info gui_data; TCHAR warning_buffer[256]; TCHAR optionsfile[256]; #ifdef FSUAE // moved to random.cpp #else static uae_u32 randseed; static int oldhcounter; uae_u32 uaesrand (uae_u32 seed) { oldhcounter = -1; randseed = seed; //randseed = 0x12345678; //write_log (_T("seed=%08x\n"), randseed); return randseed; } uae_u32 uaerand (void) { if (oldhcounter != hsync_counter) { srand (hsync_counter ^ randseed); oldhcounter = hsync_counter; } uae_u32 r = rand (); //write_log (_T("rand=%08x\n"), r); return r; } uae_u32 uaerandgetseed (void) { return randseed; } #endif void my_trim (TCHAR *s) { int len; while (_tcscspn (s, _T("\t \r\n")) == 0) memmove (s, s + 1, (_tcslen (s + 1) + 1) * sizeof (TCHAR)); len = _tcslen (s); while (len > 0 && _tcscspn (s + len - 1, _T("\t \r\n")) == 0) s[--len] = '\0'; } TCHAR *my_strdup_trim (const TCHAR *s) { TCHAR *out; int len; while (_tcscspn (s, _T("\t \r\n")) == 0) s++; len = _tcslen (s); while (len > 0 && _tcscspn (s + len - 1, _T("\t \r\n")) == 0) len--; out = xmalloc (TCHAR, len + 1); memcpy (out, s, len * sizeof (TCHAR)); out[len] = 0; return out; } void discard_prefs (struct uae_prefs *p, int type) { struct strlist **ps = &p->all_lines; while (*ps) { struct strlist *s = *ps; *ps = s->next; xfree (s->value); xfree (s->option); xfree (s); } #ifdef FILESYS filesys_cleanup (); #endif } static void fixup_prefs_dim2 (struct wh *wh) { if (wh->width < 160) wh->width = 160; if (wh->height < 128) wh->height = 128; if (wh->width > 3072) wh->width = 3072; if (wh->height > 2048) wh->height = 2048; } 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) 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; if (ap->gfx_vsync) { if (ap->gfx_vsyncmode) { // low latency vsync: no flip only if no-buffer if (ap->gfx_backbuffers >= 1) ap->gfx_vflip = 1; if (!i && ap->gfx_backbuffers == 2) ap->gfx_vflip = 1; } else { // legacy vsync: always wait for flip ap->gfx_vflip = -1; if (prefs->gfx_api && ap->gfx_backbuffers < 1) ap->gfx_backbuffers = 1; } } else { // no vsync: wait if triple bufferirng if (ap->gfx_backbuffers >= 2) ap->gfx_vflip = -1; } } if (prefs->gfx_filter == 0 && ((prefs->gfx_filter_autoscale && !prefs->gfx_api) || (prefs->gfx_apmode[0].gfx_vsyncmode))) prefs->gfx_filter = 1; if (prefs->gfx_filter == 0 && prefs->monitoremu) prefs->gfx_filter = 1; } void fixup_cpu (struct uae_prefs *p) { if (p->cpu_frequency == 1000000) p->cpu_frequency = 0; switch (p->cpu_model) { case 68000: p->address_space_24 = 1; if (p->cpu_compatible || p->cpu_cycle_exact) p->fpu_model = 0; break; case 68010: p->address_space_24 = 1; if (p->cpu_compatible || p->cpu_cycle_exact) p->fpu_model = 0; break; case 68020: break; case 68030: p->address_space_24 = 0; break; case 68040: p->address_space_24 = 0; if (p->fpu_model) p->fpu_model = 68040; break; case 68060: p->address_space_24 = 0; if (p->fpu_model) p->fpu_model = 68060; break; } if (p->cpu_model != 68040) p->mmu_model = 0; if (p->cachesize && p->cpu_cycle_exact) p->cachesize = 0; if (p->cpu_cycle_exact && p->m68k_speed < 0) p->m68k_speed = 0; if (p->immediate_blits && p->blitter_cycle_exact) p->immediate_blits = false; if (p->immediate_blits && p->waiting_blits) p->waiting_blits = 0; } void fixup_prefs (struct uae_prefs *p) { int err = 0; built_in_chipset_prefs (p); fixup_cpu (p); if (((p->chipmem_size & (p->chipmem_size - 1)) != 0 && p->chipmem_size != 0x180000) || p->chipmem_size < 0x20000 || p->chipmem_size > 0x800000) { write_log (_T("Unsupported chipmem size %x!\n"), p->chipmem_size); p->chipmem_size = 0x200000; err = 1; } if ((p->fastmem_size & (p->fastmem_size - 1)) != 0 || (p->fastmem_size != 0 && (p->fastmem_size < 0x100000 || p->fastmem_size > 0x800000))) { write_log (_T("Unsupported fastmem size %x!\n"), p->fastmem_size); err = 1; } if ((p->rtgmem_size & (p->rtgmem_size - 1)) != 0 || (p->rtgmem_size != 0 && (p->rtgmem_size < 0x100000 || p->rtgmem_size > max_z3fastmem))) { write_log (_T("Unsupported graphics card memory size %x (%x)!\n"), p->rtgmem_size, max_z3fastmem); if (p->rtgmem_size > max_z3fastmem) p->rtgmem_size = max_z3fastmem; else p->rtgmem_size = 0; err = 1; } if ((p->z3fastmem_size & (p->z3fastmem_size - 1)) != 0 || (p->z3fastmem_size != 0 && (p->z3fastmem_size < 0x100000 || p->z3fastmem_size > max_z3fastmem))) { write_log (_T("Unsupported Zorro III fastmem size %x (%x)!\n"), p->z3fastmem_size, max_z3fastmem); if (p->z3fastmem_size > max_z3fastmem) p->z3fastmem_size = max_z3fastmem; else p->z3fastmem_size = 0; err = 1; } if ((p->z3fastmem2_size & (p->z3fastmem2_size - 1)) != 0 || (p->z3fastmem2_size != 0 && (p->z3fastmem2_size < 0x100000 || p->z3fastmem2_size > max_z3fastmem))) { write_log (_T("Unsupported Zorro III fastmem size %x (%x)!\n"), p->z3fastmem2_size, max_z3fastmem); if (p->z3fastmem2_size > max_z3fastmem) p->z3fastmem2_size = max_z3fastmem; else p->z3fastmem2_size = 0; err = 1; } p->z3fastmem_start &= ~0xffff; if (p->z3fastmem_start < 0x1000000) p->z3fastmem_start = 0x1000000; if ((p->z3chipmem_size & (p->z3chipmem_size - 1)) != 0 || (p->z3chipmem_size != 0 && (p->z3chipmem_size < 0x100000 || p->z3chipmem_size > max_z3fastmem))) { write_log (_T("Unsupported Zorro III fake chipmem size %x (%x)!\n"), p->z3chipmem_size, max_z3fastmem); if (p->z3chipmem_size > max_z3fastmem) p->z3chipmem_size = max_z3fastmem; else p->z3chipmem_size = 0; err = 1; } if (p->address_space_24 && (p->z3fastmem_size != 0 || p->z3fastmem2_size != 0 || p->z3chipmem_size != 0)) { p->z3fastmem_size = p->z3fastmem2_size = p->z3chipmem_size = 0; write_log (_T("Can't use a graphics card or 32-bit memory when using a 24 bit\naddress space.\n")); } if (p->bogomem_size != 0 && p->bogomem_size != 0x80000 && p->bogomem_size != 0x100000 && p->bogomem_size != 0x180000 && p->bogomem_size != 0x1c0000) { p->bogomem_size = 0; write_log (_T("Unsupported bogomem size!\n")); err = 1; } if (p->bogomem_size > 0x180000 && (p->cs_fatgaryrev >= 0 || p->cs_ide || p->cs_ramseyrev >= 0)) { p->bogomem_size = 0x180000; write_log (_T("Possible Gayle bogomem conflict fixed\n")); } if (p->chipmem_size > 0x200000 && p->fastmem_size != 0) { write_log (_T("You can't use fastmem and more than 2MB chip at the same time!\n")); p->fastmem_size = 0; err = 1; } if (p->mbresmem_low_size > 0x04000000 || (p->mbresmem_low_size & 0xfffff)) { p->mbresmem_low_size = 0; write_log (_T("Unsupported A3000 MB RAM size\n")); } if (p->mbresmem_high_size > 0x04000000 || (p->mbresmem_high_size & 0xfffff)) { p->mbresmem_high_size = 0; write_log (_T("Unsupported Motherboard RAM size\n")); } if (p->address_space_24 && p->rtgmem_size) p->rtgmem_type = 0; if (!p->rtgmem_type && (p->chipmem_size > 2 * 1024 * 1024 || getz2size (p) > 8 * 1024 * 1024 || getz2size (p) < 0)) { p->rtgmem_size = 0; write_log (_T("Too large Z2 RTG memory size\n")); } #if 0 if (p->m68k_speed < -1 || p->m68k_speed > 20) { write_log (_T("Bad value for -w parameter: must be -1, 0, or within 1..20.\n")); p->m68k_speed = 4; err = 1; } #endif if (p->produce_sound < 0 || p->produce_sound > 3) { write_log (_T("Bad value for -S parameter: enable value must be within 0..3\n")); p->produce_sound = 0; err = 1; } if (p->comptrustbyte < 0 || p->comptrustbyte > 3) { write_log (_T("Bad value for comptrustbyte parameter: value must be within 0..2\n")); p->comptrustbyte = 1; err = 1; } if (p->comptrustword < 0 || p->comptrustword > 3) { write_log (_T("Bad value for comptrustword parameter: value must be within 0..2\n")); p->comptrustword = 1; err = 1; } if (p->comptrustlong < 0 || p->comptrustlong > 3) { write_log (_T("Bad value for comptrustlong parameter: value must be within 0..2\n")); p->comptrustlong = 1; err = 1; } if (p->comptrustnaddr < 0 || p->comptrustnaddr > 3) { write_log (_T("Bad value for comptrustnaddr parameter: value must be within 0..2\n")); p->comptrustnaddr = 1; err = 1; } if (p->cachesize < 0 || p->cachesize > 16384) { write_log (_T("Bad value for cachesize parameter: value must be within 0..16384\n")); p->cachesize = 0; err = 1; } if (p->z3fastmem_size > 0 && (p->address_space_24 || p->cpu_model < 68020)) { write_log (_T("Z3 fast memory can't be used with a 68000/68010 emulation. It\n") _T("requires a 68020 emulation. Turning off Z3 fast memory.\n")); p->z3fastmem_size = 0; err = 1; } if (p->rtgmem_size > 0 && p->rtgmem_type && (p->cpu_model < 68020 || p->address_space_24)) { write_log (_T("RTG can't be used with a 68000/68010 or 68EC020 emulation. It\n") _T("requires a 68020 emulation. Turning off RTG.\n")); p->rtgmem_size = 0; err = 1; } #if !defined (BSDSOCKET) if (p->socket_emu) { write_log (_T("Compile-time option of BSDSOCKET_SUPPORTED was not enabled. You can't use bsd-socket emulation.\n")); p->socket_emu = 0; err = 1; } #endif if (p->nr_floppies < 0 || p->nr_floppies > 4) { write_log (_T("Invalid number of floppies. Using 4.\n")); p->nr_floppies = 4; p->floppyslots[0].dfxtype = 0; p->floppyslots[1].dfxtype = 0; p->floppyslots[2].dfxtype = 0; p->floppyslots[3].dfxtype = 0; err = 1; } if (p->floppy_speed > 0 && p->floppy_speed < 10) { p->floppy_speed = 100; } if (p->input_mouse_speed < 1 || p->input_mouse_speed > 1000) { p->input_mouse_speed = 100; } if (p->collision_level < 0 || p->collision_level > 3) { write_log (_T("Invalid collision support level. Using 1.\n")); p->collision_level = 1; err = 1; } if (p->parallel_postscript_emulation) p->parallel_postscript_detection = 1; if (p->cs_compatible == 1) { p->cs_fatgaryrev = p->cs_ramseyrev = p->cs_mbdmac = -1; p->cs_ide = 0; if (p->cpu_model >= 68020) { p->cs_fatgaryrev = 0; p->cs_ide = -1; p->cs_ramseyrev = 0x0f; p->cs_mbdmac = 0; } } else if (p->cs_compatible == 0) { if (p->cs_ide == IDE_A4000) { if (p->cs_fatgaryrev < 0) p->cs_fatgaryrev = 0; if (p->cs_ramseyrev < 0) p->cs_ramseyrev = 0x0f; } } /* Can't fit genlock and A2024 or Graffiti at the same time, * also Graffiti uses genlock audio bit as an enable signal */ if (p->genlock && p->monitoremu) p->genlock = false; fixup_prefs_dimensions (p); #if !defined (JIT) p->cachesize = 0; #endif #ifdef CPU_68000_ONLY p->cpu_model = 68000; p->fpu_model = 0; #endif #ifndef CPUEMU_0 p->cpu_compatible = 1; p->address_space_24 = 1; #endif #if !defined (CPUEMU_11) && !defined (CPUEMU_12) p->cpu_compatible = 0; p->address_space_24 = 0; #endif #if !defined (CPUEMU_12) p->cpu_cycle_exact = p->blitter_cycle_exact = 0; #endif #ifndef AGA p->chipset_mask &= ~CSMASK_AGA; #endif #ifndef AUTOCONFIG p->z3fastmem_size = 0; p->fastmem_size = 0; p->rtgmem_size = 0; #endif #if !defined (BSDSOCKET) p->socket_emu = 0; #endif #if !defined (SCSIEMU) p->scsi = 0; #ifdef _WIN32 p->win32_aspi = 0; #endif #endif #if !defined (SANA2) p->sana2 = 0; #endif #if !defined (UAESERIAL) p->uaeserial = 0; #endif #if defined (CPUEMU_12) if (p->cpu_cycle_exact) { p->gfx_framerate = 1; p->cachesize = 0; p->m68k_speed = 0; } #endif if (p->maprom && !p->address_space_24) p->maprom = 0x0f000000; if ((p->maprom & 0xff000000) && p->address_space_24) p->maprom = 0x00e00000; if (p->tod_hack && p->cs_ciaatod == 0) p->cs_ciaatod = p->ntscmode ? 2 : 1; built_in_chipset_prefs (p); blkdev_fix_prefs (p); target_fixup_options (p); } int quit_program = 0; static int restart_program; static TCHAR restart_config[MAX_DPATH]; static int default_config; void uae_reset (int hardreset, int keyboardreset) { if (debug_dma) { record_dma_reset (); record_dma_reset (); } currprefs.quitstatefile[0] = changed_prefs.quitstatefile[0] = 0; if (quit_program == 0) { quit_program = -UAE_RESET; if (keyboardreset) quit_program = -UAE_RESET_KEYBOARD; if (hardreset) quit_program = -UAE_RESET_HARD; } } void uae_quit (void) { deactivate_debugger (); if (quit_program != -UAE_QUIT) quit_program = -UAE_QUIT; target_quit (); } /* 0 = normal, 1 = nogui, -1 = disable nogui */ void uae_restart (int opengui, const TCHAR *cfgfile) { uae_quit (); restart_program = opengui > 0 ? 1 : (opengui == 0 ? 2 : 3); restart_config[0] = 0; default_config = 0; if (cfgfile) _tcscpy (restart_config, cfgfile); target_restart (); } #ifndef DONT_PARSE_CMDLINE void usage (void) { } static void parse_cmdline_2 (int argc, TCHAR **argv) { int i; cfgfile_addcfgparam (0); for (i = 1; i < argc; i++) { if (_tcsncmp (argv[i], _T("-cfgparam="), 10) == 0) { cfgfile_addcfgparam (argv[i] + 10); } else if (_tcscmp (argv[i], _T("-cfgparam")) == 0) { if (i + 1 == argc) write_log (_T("Missing argument for '-cfgparam' option.\n")); else cfgfile_addcfgparam (argv[++i]); } } } static int diskswapper_cb (struct zfile *f, void *vrsd) { int *num = (int*)vrsd; if (*num >= MAX_SPARE_DRIVES) return 1; if (zfile_gettype (f) == ZFILE_DISKIMAGE) { _tcsncpy (currprefs.dfxlist[*num], zfile_getname (f), 255); (*num)++; } return 0; } static void parse_diskswapper (const TCHAR *s) { TCHAR *tmp = my_strdup (s); TCHAR *delim = _T(","); TCHAR *p1, *p2; int num = 0; p1 = tmp; for (;;) { p2 = _tcstok (p1, delim); if (!p2) break; p1 = NULL; if (num >= MAX_SPARE_DRIVES) break; if (!zfile_zopen (p2, diskswapper_cb, &num)) { _tcsncpy (currprefs.dfxlist[num], p2, 255); num++; } } free (tmp); } static TCHAR *parsetext (const TCHAR *s) { if (*s == '"' || *s == '\'') { TCHAR *d; TCHAR c = *s++; int i; d = my_strdup (s); for (i = 0; i < _tcslen (d); i++) { if (d[i] == c) { d[i] = 0; break; } } return d; } else { return my_strdup (s); } } static TCHAR *parsetextpath (const TCHAR *s) { TCHAR *s2 = parsetext (s); TCHAR *s3 = target_expand_environment (s2); xfree (s2); return s3; } static void parse_cmdline (int argc, TCHAR **argv) { int i; for (i = 1; i < argc; i++) { if (!_tcsncmp (argv[i], _T("-diskswapper="), 13)) { TCHAR *txt = parsetextpath (argv[i] + 13); parse_diskswapper (txt); xfree (txt); } else if (_tcsncmp (argv[i], _T("-cfgparam="), 10) == 0) { ; } else if (_tcscmp (argv[i], _T("-cfgparam")) == 0) { if (i + 1 < argc) i++; } else if (_tcsncmp (argv[i], _T("-config="), 8) == 0) { TCHAR *txt = parsetextpath (argv[i] + 8); currprefs.mountitems = 0; target_cfgfile_load (&currprefs, txt, -1, 0); xfree (txt); } else if (_tcsncmp (argv[i], _T("-statefile="), 11) == 0) { TCHAR *txt = parsetextpath (argv[i] + 11); savestate_state = STATE_DORESTORE; _tcscpy (savestate_fname, txt); xfree (txt); } else if (_tcscmp (argv[i], _T("-f")) == 0) { /* Check for new-style "-f xxx" argument, where xxx is config-file */ if (i + 1 == argc) { write_log (_T("Missing argument for '-f' option.\n")); } else { TCHAR *txt = parsetextpath (argv[++i]); currprefs.mountitems = 0; target_cfgfile_load (&currprefs, txt, -1, 0); xfree (txt); } } else if (_tcscmp (argv[i], _T("-s")) == 0) { if (i + 1 == argc) write_log (_T("Missing argument for '-s' option.\n")); else cfgfile_parse_line (&currprefs, argv[++i], 0); } else if (_tcscmp (argv[i], _T("-h")) == 0 || _tcscmp (argv[i], _T("-help")) == 0) { usage (); exit (0); } else if (_tcsncmp (argv[i], _T("-cdimage="), 9) == 0) { TCHAR *txt = parsetextpath (argv[i] + 9); TCHAR *txt2 = xmalloc(TCHAR, _tcslen(txt) + 2); _tcscpy(txt2, txt); if (_tcsrchr(txt2, ',') != NULL) _tcscat(txt2, _T(",")); cfgfile_parse_option (&currprefs, _T("cdimage0"), txt2, 0); xfree(txt2); xfree (txt); } else { if (argv[i][0] == '-' && argv[i][1] != '\0') { const TCHAR *arg = argv[i] + 2; int extra_arg = *arg == '\0'; if (extra_arg) arg = i + 1 < argc ? argv[i + 1] : 0; if (parse_cmdline_option (&currprefs, argv[i][1], arg) && extra_arg) i++; } } } } #endif static void parse_cmdline_and_init_file (int argc, TCHAR **argv) { _tcscpy (optionsfile, _T("")); #ifdef OPTIONS_IN_HOME { TCHAR *home = getenv ("HOME"); if (home != NULL && strlen (home) < 240) { _tcscpy (optionsfile, home); _tcscat (optionsfile, _T("/")); } } #endif parse_cmdline_2 (argc, argv); _tcscat (optionsfile, restart_config); if (! target_cfgfile_load (&currprefs, optionsfile, 0, default_config)) { write_log (_T("failed to load config '%s'\n"), optionsfile); #ifdef OPTIONS_IN_HOME /* sam: if not found in $HOME then look in current directory */ _tcscpy (optionsfile, restart_config); target_cfgfile_load (&currprefs, optionsfile, 0, default_config); #endif } fixup_prefs (&currprefs); parse_cmdline (argc, argv); } void reset_all_systems (void) { init_eventtab (); #ifdef PICASSO96 picasso_reset (); #endif #ifdef SCSIEMU scsi_reset (); scsidev_reset (); scsidev_start_threads (); #endif #ifdef A2065 a2065_reset (); #endif #ifdef SANA2 netdev_reset (); netdev_start_threads (); #endif #ifdef FILESYS filesys_prepare_reset (); filesys_reset (); #endif init_shm (); memory_reset (); #if defined (BSDSOCKET) bsdlib_reset (); #endif #ifdef FILESYS filesys_start_threads (); hardfile_reset (); #endif #ifdef UAESERIAL uaeserialdev_reset (); uaeserialdev_start_threads (); #endif #if defined (PARALLEL_PORT) initparallel (); #endif native2amiga_reset (); dongle_reset (); sampler_init (); } /* Okay, this stuff looks strange, but it is here to encourage people who * port UAE to re-use as much of this code as possible. Functions that you * should be using are do_start_program () and do_leave_program (), as well * as real_main (). Some OSes don't call main () (which is braindamaged IMHO, * but unfortunately very common), so you need to call real_main () from * whatever entry point you have. You may want to write your own versions * of start_program () and leave_program () if you need to do anything special. * Add #ifdefs around these as appropriate. */ #ifdef _WIN32 #ifndef JIT extern int DummyException (LPEXCEPTION_POINTERS blah, int n_except) { return EXCEPTION_CONTINUE_SEARCH; } #endif #endif void do_start_program (void) { if (quit_program == -UAE_QUIT) return; if (!canbang && candirect < 0) candirect = 0; if (canbang && candirect < 0) candirect = 1; /* Do a reset on startup. Whether this is elegant is debatable. */ inputdevice_updateconfig (&changed_prefs, &currprefs); if (quit_program >= 0) quit_program = UAE_RESET; #if (defined (_WIN32) || defined (_WIN64)) && !defined (NO_WIN32_EXCEPTION_HANDLER) extern int EvalException (LPEXCEPTION_POINTERS blah, int n_except); __try #endif { m68k_go (1); } #if (defined (_WIN32) || defined (_WIN64)) && !defined (NO_WIN32_EXCEPTION_HANDLER) #ifdef JIT __except (EvalException (GetExceptionInformation (), GetExceptionCode ())) #else __except (DummyException (GetExceptionInformation (), GetExceptionCode ())) #endif { // EvalException does the good stuff... } #endif } void do_leave_program (void) { sampler_free (); graphics_leave (); inputdevice_close (); DISK_free (); close_sound (); dump_counts (); #ifdef SERIAL_PORT serial_exit (); #endif #ifdef CDTV cdtv_free (); #endif #ifdef A2091 a2091_free (); #endif #ifdef NCR ncr_free (); #endif #ifdef CD32 akiko_free (); #endif if (! no_gui) gui_exit (); #ifdef AUTOCONFIG expansion_cleanup (); #endif #ifdef FILESYS filesys_cleanup (); #endif #ifdef BSDSOCKET bsdlib_reset (); #endif device_func_reset (); savestate_free (); memory_cleanup (); free_shm (); cfgfile_addcfgparam (0); machdep_free (); } void start_program (void) { do_start_program (); } void leave_program (void) { do_leave_program (); } void virtualdevice_init (void) { #ifdef AUTOCONFIG rtarea_setup (); #endif #ifdef FILESYS rtarea_init (); uaeres_install (); hardfile_install (); #endif #ifdef SCSIEMU scsi_reset (); scsidev_install (); #endif #ifdef SANA2 netdev_install (); #endif #ifdef UAESERIAL uaeserialdev_install (); #endif #ifdef AUTOCONFIG expansion_init (); emulib_install (); uaeexe_install (); #endif #ifdef FILESYS filesys_install (); #endif #if defined (BSDSOCKET) bsdlib_install (); #endif } static int real_main2 (int argc, TCHAR **argv) { #ifdef USE_SDL SDL_Init (SDL_INIT_TIMER | SDL_INIT_AUDIO | SDL_INIT_JOYSTICK | SDL_INIT_NOPARACHUTE); #endif config_changed = 1; if (restart_config[0]) { default_prefs (&currprefs, 0); fixup_prefs (&currprefs); } if (! graphics_setup ()) { exit (1); } #ifdef NATMEM_OFFSET #ifdef FSUAE preinit_shm (); #else //preinit_shm (); #endif #endif if (restart_config[0]) parse_cmdline_and_init_file (argc, argv); else currprefs = changed_prefs; if (!machdep_init ()) { restart_program = 0; return -1; } if (console_emulation) { consolehook_config (&currprefs); fixup_prefs (&currprefs); } if (! setup_sound ()) { write_log (_T("Sound driver unavailable: Sound output disabled\n")); currprefs.produce_sound = 0; } inputdevice_init (); changed_prefs = currprefs; no_gui = ! currprefs.start_gui; if (restart_program == 2) no_gui = 1; else if (restart_program == 3) no_gui = 0; restart_program = 0; if (! no_gui) { int err = gui_init (); currprefs = changed_prefs; config_changed = 1; if (err == -1) { write_log (_T("Failed to initialize the GUI\n")); return -1; } else if (err == -2) { return 1; } } memset (&gui_data, 0, sizeof gui_data); gui_data.cd = -1; gui_data.hd = -1; logging_init (); /* Yes, we call this twice - the first case handles when the user has loaded a config using the cmd-line. This case handles loads through the GUI. */ #ifdef NATMEM_OFFSET init_shm (); #endif #ifdef PICASSO96 picasso_reset (); #endif #if 0 #ifdef JIT if (!(currprefs.cpu_model >= 68020 && currprefs.address_space_24 == 0 && currprefs.cachesize)) canbang = 0; #endif #endif fixup_prefs (&currprefs); #ifdef RETROPLATFORM rp_fixup_options (&currprefs); #endif changed_prefs = currprefs; target_run (); /* force sound settings change */ currprefs.produce_sound = 0; savestate_init (); keybuf_init (); /* Must come after init_joystick */ memory_hardreset (2); memory_reset (); #ifdef AUTOCONFIG native2amiga_install (); #endif custom_init (); /* Must come after memory_init */ #ifdef SERIAL_PORT serial_init (); #endif DISK_init (); reset_frame_rate_hack (); init_m68k (); /* must come after reset_frame_rate_hack (); */ gui_update (); if (graphics_init (true)) { setup_brkhandler (); if (currprefs.start_debugger && debuggable ()) activate_debugger (); if (!init_audio ()) { if (sound_available && currprefs.produce_sound > 1) { write_log (_T("Sound driver unavailable: Sound output disabled\n")); } currprefs.produce_sound = 0; } start_program (); } return 0; } void real_main (int argc, TCHAR **argv) { restart_program = 1; fetch_configurationpath (restart_config, sizeof (restart_config) / sizeof (TCHAR)); _tcscat (restart_config, OPTIONSFILENAME); default_config = 1; while (restart_program) { int ret; changed_prefs = currprefs; ret = real_main2 (argc, argv); if (ret == 0 && quit_to_gui) restart_program = 1; leave_program (); quit_program = 0; } zfile_exit (); } #ifndef NO_MAIN_IN_MAIN_C int main (int argc, TCHAR **argv) { real_main (argc, argv); return 0; } #endif #ifdef SINGLEFILE uae_u8 singlefile_config[50000] = { "_CONFIG_STARTS_HERE" }; uae_u8 singlefile_data[1500000] = { "_DATA_STARTS_HERE" }; #endif fs-uae-2.2.3+dfsg/src/cdrom-handler.cpp0000644000175000017500000033717512162366654020106 0ustar glaubitzglaubitzunsigned char cdfs_rom[] = { 0x1f, 0x8b, 0x08, 0x08, 0x95, 0x53, 0x2d, 0x4f, 0x02, 0x03, 0x63, 0x64, 0x72, 0x6f, 0x6d, 0x2d, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x2e, 0x68, 0x75, 0x6e, 0x6b, 0x00, 0x9d, 0xbd, 0x0d, 0x78, 0x53, 0xc7, 0xb5, 0x36, 0x3a, 0x5b, 0x96, 0x85, 0x2c, 0x14, 0x23, 0x8c, 0x70, 0x15, 0xe2, 0xc0, 0x46, 0x91, 0x15, 0xc5, 0x08, 0xcb, 0x38, 0xc0, 0x71, 0x5d, 0x87, 0xc8, 0xb2, 0x6c, 0x64, 0x61, 0x64, 0x57, 0xb6, 0x89, 0x93, 0x52, 0xd8, 0x01, 0x5b, 0x32, 0xc6, 0x3f, 0x8a, 0x10, 0x94, 0xe6, 0xfa, 0xa6, 0xb2, 0x71, 0xa8, 0x49, 0xb8, 0x35, 0x01, 0xc2, 0x97, 0xf6, 0xc9, 0xd3, 0x2f, 0x5f, 0x6e, 0x6f, 0x4a, 0x4d, 0x7e, 0x28, 0xa5, 0x39, 0xd4, 0x87, 0x1b, 0x1c, 0x9a, 0xc3, 0x47, 0x73, 0x72, 0x72, 0x80, 0x12, 0xca, 0xc9, 0xa1, 0x0d, 0xa1, 0x9c, 0x24, 0xa5, 0x09, 0x10, 0x4a, 0x08, 0x71, 0x8c, 0xf6, 0x7d, 0xd7, 0xec, 0xad, 0x1f, 0x93, 0xa4, 0x27, 0xe7, 0xc2, 0x33, 0xda, 0x7b, 0x66, 0xcf, 0xac, 0x59, 0xb3, 0x66, 0xcd, 0x9a, 0xb5, 0xd6, 0xfc, 0x98, 0xb1, 0xac, 0xbf, 0x31, 0xe5, 0x5f, 0x96, 0xfa, 0xd4, 0x30, 0x36, 0xe3, 0x2d, 0x3c, 0x76, 0x2a, 0xef, 0x59, 0x7f, 0xa1, 0xb8, 0xab, 0x8c, 0x69, 0x03, 0xbf, 0x61, 0xcc, 0x7c, 0xa5, 0x65, 0x28, 0xb0, 0x7e, 0xdb, 0xb6, 0x40, 0xb3, 0x7c, 0xd2, 0xf7, 0x7e, 0x59, 0xb9, 0x6f, 0x23, 0xb3, 0x79, 0x7e, 0xee, 0xeb, 0x92, 0x4f, 0xd2, 0xd7, 0xf6, 0x01, 0xb1, 0x02, 0xa5, 0x62, 0xe7, 0x07, 0xe7, 0xb8, 0xe5, 0xd3, 0x73, 0x7a, 0x09, 0x9c, 0x7c, 0x6e, 0x4e, 0x6f, 0x95, 0x77, 0x99, 0x57, 0x7e, 0x8f, 0x7f, 0x1b, 0xe0, 0xdf, 0x2e, 0xdc, 0xd6, 0xcb, 0x0c, 0xf2, 0x25, 0x35, 0xc7, 0x55, 0xcf, 0x0b, 0xf2, 0x75, 0x84, 0xf1, 0xaa, 0xcf, 0x18, 0xd3, 0xc6, 0x9d, 0xdf, 0x47, 0xa2, 0x36, 0xf0, 0x62, 0x22, 0xb7, 0xfe, 0x12, 0x33, 0xfa, 0xe3, 0x61, 0x26, 0xe8, 0x16, 0x7f, 0x24, 0xff, 0x31, 0xc6, 0x1c, 0x80, 0x10, 0xda, 0x5f, 0xd6, 0xcb, 0xf2, 0xfe, 0x7d, 0x34, 0xb2, 0x28, 0x2a, 0xf8, 0x2a, 0x93, 0x79, 0xe5, 0x72, 0x9b, 0x9b, 0x72, 0xb2, 0x33, 0xd6, 0xb9, 0xf2, 0x55, 0x71, 0xae, 0x7c, 0x6e, 0x03, 0x93, 0x74, 0x7b, 0xfb, 0xc2, 0xfa, 0x0d, 0xc2, 0xfe, 0x4d, 0xdd, 0xd7, 0x24, 0xcd, 0x06, 0x26, 0x66, 0x1d, 0xdb, 0x74, 0x2c, 0xbe, 0xf4, 0x13, 0xfd, 0x75, 0xff, 0xae, 0x90, 0x59, 0xcc, 0x7a, 0x7f, 0x90, 0xe2, 0xae, 0x05, 0xfa, 0x73, 0xa2, 0x37, 0xb0, 0xcd, 0x19, 0x6f, 0x19, 0x3a, 0xb5, 0xe9, 0xd4, 0x26, 0x71, 0x41, 0xd9, 0xf5, 0x90, 0xd9, 0xea, 0x37, 0x55, 0xb0, 0x45, 0x29, 0xe8, 0xc5, 0x12, 0x63, 0xfd, 0x85, 0xc0, 0x56, 0xbb, 0x93, 0x19, 0xa6, 0xaf, 0x95, 0x65, 0x96, 0x53, 0xb8, 0x56, 0xfe, 0x94, 0xe5, 0x22, 0x4d, 0x60, 0x3a, 0x96, 0x47, 0xdf, 0x84, 0xdd, 0x2c, 0xdf, 0x3a, 0x87, 0x09, 0x61, 0x23, 0x8f, 0x1d, 0x60, 0xf9, 0x85, 0x95, 0xac, 0x08, 0xf9, 0x3e, 0x67, 0xf6, 0xbc, 0x69, 0xbe, 0xbe, 0x92, 0xca, 0x42, 0x1f, 0x2b, 0x2e, 0x74, 0xb3, 0x85, 0x11, 0x19, 0xbf, 0xe5, 0x29, 0xe8, 0xbd, 0x62, 0x9d, 0xd5, 0x9f, 0x6a, 0xf5, 0x95, 0x54, 0xfa, 0x86, 0x60, 0xff, 0xe2, 0xbf, 0xb2, 0xbc, 0x88, 0x66, 0x6f, 0x7f, 0x88, 0xc9, 0xa6, 0xba, 0x8f, 0x96, 0x17, 0xc8, 0x07, 0x02, 0xdf, 0x0d, 0xac, 0x77, 0x19, 0x5c, 0x1a, 0x1b, 0xf3, 0x21, 0x9f, 0x76, 0x23, 0xd1, 0x7d, 0x6d, 0x5d, 0xcb, 0x10, 0x5a, 0x5f, 0x81, 0xde, 0x10, 0x78, 0x20, 0x08, 0x96, 0x6a, 0x50, 0xb3, 0xe3, 0x83, 0xc0, 0x76, 0x95, 0x8a, 0x33, 0xd1, 0x4f, 0x1b, 0x65, 0x99, 0x7f, 0xd3, 0x07, 0xb6, 0x07, 0x46, 0x12, 0x15, 0xf4, 0x45, 0xd4, 0xd8, 0x66, 0xd9, 0x56, 0x06, 0xd6, 0xd3, 0x57, 0xb5, 0x24, 0x4b, 0x96, 0xcc, 0x28, 0x61, 0x0a, 0x6c, 0xcf, 0xa8, 0xaf, 0x01, 0x25, 0x0b, 0x62, 0x4c, 0x3a, 0xec, 0xca, 0x75, 0xf6, 0x00, 0x1a, 0xda, 0xe0, 0x04, 0x0c, 0x57, 0xae, 0x15, 0x31, 0xa4, 0x18, 0xd1, 0x8e, 0x55, 0x4a, 0x8a, 0x98, 0x4a, 0xb9, 0x21, 0x51, 0x8a, 0xef, 0x7d, 0x56, 0x6a, 0xeb, 0x61, 0x66, 0xb1, 0x83, 0x69, 0xad, 0x41, 0x7b, 0x0f, 0x33, 0x45, 0x96, 0x1f, 0xdb, 0xc3, 0x2a, 0x40, 0x11, 0xed, 0x1d, 0x7e, 0x66, 0xf0, 0x3c, 0xe1, 0xf9, 0x05, 0xd3, 0xa6, 0xa8, 0xb1, 0xbd, 0xee, 0x9d, 0x3a, 0x46, 0xa5, 0x44, 0x2b, 0x20, 0x99, 0xa8, 0xe4, 0xf1, 0xa3, 0xc7, 0x8f, 0xc6, 0x98, 0xd9, 0x62, 0xf5, 0x8b, 0x9a, 0x64, 0xbe, 0x1b, 0xdb, 0x3c, 0xa5, 0x0e, 0x56, 0xf7, 0x8e, 0x57, 0x9b, 0xac, 0xd3, 0xda, 0xce, 0x9a, 0xee, 0xee, 0x65, 0x39, 0xac, 0x80, 0xde, 0x22, 0xc2, 0x1d, 0x6e, 0x26, 0xd2, 0x1b, 0xa0, 0xdb, 0xe8, 0x99, 0xaa, 0xa1, 0x54, 0xc1, 0xaa, 0x6c, 0x51, 0x51, 0x0f, 0xb3, 0x01, 0xbe, 0x03, 0x38, 0x39, 0x81, 0x71, 0x89, 0x6d, 0x0e, 0xd3, 0x47, 0x3a, 0xf6, 0xf6, 0x77, 0x6a, 0x62, 0x1d, 0xfe, 0x3d, 0x4c, 0x1b, 0xd6, 0x47, 0xb3, 0xd0, 0xa3, 0x5a, 0x29, 0xd7, 0xbf, 0x23, 0xac, 0x8d, 0x68, 0x24, 0x4d, 0xe4, 0x06, 0x61, 0x1d, 0x11, 0xd0, 0x3f, 0x65, 0xc6, 0x39, 0xac, 0x9c, 0x19, 0x43, 0x25, 0x94, 0x22, 0x76, 0xb1, 0xf9, 0x26, 0x93, 0x99, 0xf9, 0xfa, 0x7d, 0x87, 0xa7, 0xbb, 0x99, 0xbe, 0xf6, 0x02, 0xcb, 0x71, 0x69, 0xac, 0x73, 0xd9, 0xfc, 0x60, 0x9f, 0x4b, 0x70, 0x19, 0x89, 0x86, 0x6b, 0x9e, 0x21, 0xea, 0x4b, 0x1b, 0xfd, 0x2f, 0xb0, 0x33, 0xe1, 0x5c, 0xc9, 0x12, 0x8c, 0x1b, 0xef, 0x66, 0xdf, 0xd2, 0x4f, 0x0e, 0x69, 0x25, 0x43, 0x84, 0x59, 0xd9, 0xfe, 0x78, 0xf7, 0x87, 0x92, 0xc6, 0x26, 0x4c, 0xf7, 0x24, 0xcb, 0xfb, 0xd6, 0x32, 0x63, 0x66, 0x59, 0x7f, 0x17, 0x3b, 0x11, 0xd6, 0xa3, 0xf6, 0x17, 0x99, 0x3e, 0xec, 0x40, 0xec, 0x58, 0xb8, 0xc8, 0xff, 0x22, 0xb3, 0x84, 0x0b, 0x24, 0xab, 0x58, 0x65, 0x32, 0xf9, 0xe2, 0xbe, 0x51, 0x67, 0x17, 0x51, 0x5e, 0xae, 0x13, 0xab, 0x82, 0x9b, 0x4c, 0xa3, 0xc1, 0x01, 0x49, 0x6b, 0x37, 0x6e, 0x64, 0xfb, 0x07, 0xba, 0xff, 0xe4, 0x99, 0xef, 0x60, 0x85, 0xe8, 0x03, 0xb6, 0xb1, 0x70, 0xad, 0x60, 0x66, 0x31, 0xfc, 0x9a, 0x58, 0xaf, 0x38, 0x47, 0x30, 0x45, 0x27, 0x9f, 0xdb, 0x8d, 0x56, 0xc4, 0x97, 0x80, 0x0b, 0xd6, 0x8c, 0xbb, 0x2a, 0x98, 0xf0, 0xed, 0xb8, 0x6b, 0x8e, 0x60, 0x0c, 0x3c, 0xd9, 0x30, 0x84, 0xf4, 0x81, 0x5a, 0xe2, 0x8e, 0xc1, 0x8c, 0xf4, 0x9d, 0x0d, 0x43, 0xe0, 0x9d, 0x0a, 0x17, 0x53, 0x73, 0x0c, 0xf2, 0x98, 0xfa, 0xc5, 0xca, 0x4e, 0xc4, 0x4f, 0xc4, 0xdf, 0xdf, 0x72, 0xac, 0xef, 0x58, 0x1c, 0xdf, 0xb6, 0xda, 0xe6, 0x08, 0x96, 0x48, 0x80, 0x53, 0x35, 0x80, 0xb6, 0x6d, 0xab, 0xbe, 0xc0, 0x9e, 0xa0, 0xb6, 0x09, 0x05, 0x2e, 0x83, 0xd2, 0x36, 0xea, 0x49, 0x6a, 0x5f, 0xdd, 0x3b, 0xbd, 0x05, 0x4a, 0xcf, 0xdb, 0xa8, 0xe7, 0x5d, 0xcc, 0xec, 0xd2, 0x28, 0x79, 0x6e, 0x3b, 0x1b, 0x35, 0x38, 0x3b, 0x88, 0xef, 0x6e, 0x44, 0x1b, 0x88, 0xf3, 0x67, 0x5a, 0x35, 0x6a, 0x5c, 0x4a, 0xbd, 0x79, 0x52, 0x79, 0x3a, 0x15, 0xbe, 0xa8, 0xbf, 0x24, 0x7f, 0x00, 0x68, 0xa5, 0x29, 0x9e, 0x09, 0xd9, 0x18, 0x24, 0xc6, 0x2e, 0xd1, 0x1d, 0x29, 0x49, 0xa5, 0x45, 0xb9, 0x1c, 0x89, 0x56, 0x92, 0x24, 0xfa, 0x0d, 0xfa, 0xc1, 0x1f, 0x65, 0x29, 0x4e, 0xf1, 0xfa, 0xe3, 0xa1, 0xba, 0xc5, 0x97, 0x58, 0x1e, 0xda, 0x97, 0xef, 0xf9, 0xb9, 0x6b, 0xb2, 0x22, 0xf3, 0x78, 0x5f, 0xbc, 0xc4, 0x9c, 0xf7, 0x8d, 0xea, 0x30, 0x4e, 0x66, 0xb9, 0x59, 0xfe, 0x82, 0x5e, 0x36, 0x99, 0x15, 0x14, 0x2e, 0x61, 0x8e, 0x48, 0x3e, 0xda, 0x6c, 0xcb, 0x18, 0xdd, 0x65, 0x19, 0xef, 0x8b, 0xc4, 0xd4, 0xfb, 0x8d, 0x4e, 0xd7, 0x37, 0xe9, 0xcd, 0xa5, 0x09, 0x8c, 0x8c, 0xbf, 0xd1, 0x30, 0x04, 0xae, 0xd7, 0x02, 0xae, 0x85, 0xc6, 0x3a, 0x5a, 0xaf, 0xc7, 0x68, 0x71, 0xcc, 0x6e, 0x67, 0x4e, 0x56, 0xa2, 0x50, 0x20, 0xe4, 0xc7, 0x88, 0x1f, 0x66, 0x75, 0x61, 0x8f, 0xab, 0x88, 0x95, 0x50, 0x8a, 0x6b, 0x0c, 0x79, 0x9c, 0x48, 0xdd, 0xcd, 0x0a, 0x42, 0x22, 0x7e, 0xc5, 0xd0, 0x0c, 0x7c, 0xab, 0x43, 0xfe, 0x91, 0xc4, 0x41, 0xbc, 0x39, 0x79, 0xae, 0xfd, 0x9c, 0xeb, 0x08, 0x5e, 0x9d, 0x67, 0x37, 0xd3, 0x7b, 0x00, 0xc3, 0xf3, 0x73, 0xe4, 0x38, 0x8f, 0x37, 0x94, 0xb6, 0x29, 0x23, 0xb4, 0x9c, 0xc6, 0x99, 0x3d, 0x18, 0x31, 0x5b, 0xd1, 0xcb, 0x4c, 0x48, 0x61, 0xd9, 0xe4, 0x70, 0xa3, 0xa4, 0x29, 0x88, 0x3a, 0x14, 0x3c, 0x4a, 0x2f, 0xdc, 0x05, 0x7e, 0x77, 0x3c, 0x16, 0x49, 0xe0, 0xa9, 0x57, 0x46, 0x32, 0xde, 0x8c, 0xe2, 0x1c, 0x56, 0x77, 0x7e, 0x10, 0x6f, 0x26, 0x85, 0x63, 0x2d, 0xfd, 0x0d, 0x43, 0x22, 0x7a, 0x74, 0x39, 0xc6, 0x32, 0x64, 0x97, 0x8b, 0xe9, 0x41, 0xc3, 0x72, 0xb4, 0x16, 0xdf, 0xc2, 0x22, 0xef, 0x43, 0xdd, 0xb6, 0xfe, 0x60, 0x1c, 0x63, 0x8a, 0xd9, 0x66, 0xf1, 0xbe, 0x3a, 0xe3, 0x7b, 0xbf, 0x64, 0x11, 0xf0, 0xf0, 0x02, 0x77, 0x07, 0xe5, 0x0b, 0x5c, 0xe4, 0x52, 0xce, 0xac, 0xd4, 0xdc, 0xb6, 0x3b, 0x4d, 0x93, 0x96, 0xa1, 0x92, 0x0e, 0xf6, 0xa6, 0x4b, 0x8f, 0xdf, 0x37, 0x5c, 0xfa, 0x64, 0xfe, 0xe2, 0x57, 0x40, 0x7b, 0x27, 0xb5, 0x17, 0x33, 0xc8, 0xb5, 0x88, 0x80, 0xd8, 0xd9, 0x0c, 0x3a, 0x26, 0x29, 0x72, 0x06, 0xe9, 0x80, 0x80, 0x3c, 0x27, 0x80, 0x93, 0x88, 0xfe, 0xbd, 0xc3, 0x35, 0x39, 0xf9, 0xb5, 0xf4, 0x4c, 0x51, 0x07, 0x9b, 0xef, 0x9a, 0x4c, 0x3c, 0xbf, 0xa6, 0x25, 0xb0, 0x73, 0x46, 0xbc, 0xf8, 0xf1, 0xc0, 0x4e, 0x71, 0x89, 0x15, 0xa9, 0xc1, 0x2d, 0x69, 0xe9, 0x43, 0x71, 0xd4, 0x64, 0xf2, 0x4f, 0x0d, 0xe5, 0x71, 0xde, 0x39, 0x12, 0xd1, 0xa7, 0xbf, 0xa2, 0xd6, 0xf9, 0x34, 0x1e, 0x3d, 0x25, 0x4c, 0xa0, 0x5e, 0xf2, 0x77, 0xa8, 0x23, 0x17, 0x3d, 0x10, 0xb6, 0x22, 0x76, 0x2c, 0x5c, 0x82, 0x1e, 0xb3, 0x84, 0xf3, 0x25, 0xc7, 0x1f, 0x7e, 0x6b, 0x9a, 0xc6, 0x47, 0x6e, 0x87, 0x32, 0x72, 0xf3, 0xe3, 0xca, 0xdc, 0x65, 0xa7, 0x1a, 0x37, 0x29, 0xf3, 0xc8, 0x2f, 0x47, 0xbb, 0x4f, 0x23, 0xee, 0x54, 0x28, 0x71, 0xeb, 0xd6, 0x3b, 0xdd, 0xac, 0x20, 0x1d, 0xbf, 0xcd, 0x84, 0xb8, 0x98, 0x6a, 0xc1, 0x6e, 0x3b, 0x13, 0x8b, 0x50, 0x36, 0xee, 0x62, 0xca, 0xf7, 0x82, 0x06, 0xbb, 0x1b, 0xb8, 0x9a, 0x41, 0x4b, 0x87, 0xc2, 0x75, 0x81, 0x91, 0xb1, 0x32, 0x70, 0x6b, 0x1d, 0xfa, 0x6f, 0x98, 0x55, 0xa0, 0xb4, 0x3e, 0x3d, 0x07, 0xb5, 0x0c, 0x61, 0xee, 0xfb, 0x89, 0x95, 0x20, 0xf4, 0xc5, 0x92, 0x63, 0xcb, 0x67, 0x77, 0x83, 0x6a, 0x19, 0xf9, 0xef, 0xc4, 0x1c, 0x5f, 0xd3, 0xc8, 0xc4, 0x09, 0x32, 0x23, 0x8b, 0xe4, 0x01, 0xbe, 0x9a, 0x26, 0x48, 0x8c, 0xac, 0x89, 0xf2, 0x02, 0xdf, 0xcd, 0x3c, 0x96, 0x75, 0xb3, 0xb4, 0xc0, 0x17, 0x8b, 0x75, 0xb2, 0x5a, 0xe3, 0x03, 0xa9, 0x36, 0x4c, 0x56, 0x5b, 0xd9, 0xcb, 0x67, 0x2f, 0xb4, 0x7a, 0x36, 0x78, 0x99, 0xd9, 0xd2, 0x3d, 0x4b, 0xf3, 0x18, 0x46, 0x51, 0x5e, 0x0b, 0x46, 0x51, 0xaf, 0x11, 0xb9, 0x6c, 0xea, 0x8c, 0x89, 0x59, 0x08, 0x63, 0xe6, 0x6c, 0xc8, 0x91, 0xe4, 0x90, 0x9a, 0xf7, 0x5a, 0x86, 0x62, 0xb7, 0xd7, 0x68, 0x40, 0x89, 0x62, 0x85, 0x3f, 0x68, 0xb4, 0xdc, 0x18, 0x50, 0xc7, 0xd6, 0x0c, 0x82, 0x1e, 0x9b, 0x59, 0xa3, 0xd9, 0x3b, 0x0e, 0x2e, 0x35, 0xa2, 0x87, 0x8c, 0xf7, 0x8d, 0x52, 0xdf, 0xbc, 0x16, 0x4f, 0xce, 0x9a, 0xae, 0x5c, 0x3e, 0x3e, 0x8d, 0x69, 0x88, 0x84, 0x47, 0xcb, 0x90, 0xd5, 0xc1, 0x9c, 0xfb, 0x76, 0xb3, 0x92, 0x70, 0x13, 0x60, 0x2f, 0x54, 0x60, 0x73, 0x98, 0x7a, 0xaa, 0x61, 0x1c, 0x23, 0x2d, 0x5a, 0xaa, 0xb4, 0x4c, 0x2e, 0x4f, 0x96, 0xf5, 0x1f, 0x6e, 0x19, 0x72, 0xf9, 0x99, 0xd1, 0xb6, 0xd2, 0xb9, 0x52, 0x62, 0xe3, 0x09, 0x8c, 0xc8, 0xb3, 0x9e, 0x22, 0x61, 0x3e, 0x95, 0xf8, 0x7c, 0x2c, 0x93, 0xdb, 0x29, 0x07, 0x8d, 0x91, 0x71, 0xe8, 0x60, 0xf7, 0x62, 0x8c, 0x64, 0x2d, 0xb7, 0xbb, 0xb2, 0x24, 0x31, 0x6b, 0x74, 0x98, 0x49, 0x61, 0x33, 0xea, 0x71, 0x84, 0x73, 0xf1, 0x7b, 0x38, 0xc4, 0x6b, 0x93, 0x97, 0xb7, 0x0c, 0xf1, 0x6f, 0x2d, 0xe1, 0x5e, 0x40, 0x69, 0x48, 0xc9, 0x9f, 0xad, 0xa0, 0x69, 0x67, 0x90, 0xa4, 0x72, 0x27, 0x95, 0x09, 0x99, 0xf5, 0xf8, 0x10, 0xce, 0xa5, 0x39, 0x5f, 0xa1, 0x71, 0xa3, 0xbe, 0x61, 0x88, 0x43, 0xab, 0xf0, 0x0f, 0x0b, 0x1b, 0xc3, 0x86, 0xe4, 0xc8, 0xe3, 0xf4, 0x69, 0xed, 0xb1, 0xa3, 0x7c, 0x7b, 0x54, 0xd8, 0x17, 0x0f, 0xe5, 0xa7, 0x6b, 0x4b, 0x60, 0x94, 0x62, 0x5e, 0x69, 0x65, 0xed, 0x92, 0xae, 0x91, 0x60, 0xb7, 0x53, 0xea, 0xf5, 0x4e, 0x05, 0x07, 0x21, 0x16, 0x62, 0xec, 0x47, 0xe0, 0xa8, 0xd7, 0x68, 0xac, 0x71, 0xcd, 0x62, 0xa7, 0x4b, 0x1b, 0xd8, 0x61, 0xf5, 0xa4, 0xb0, 0xda, 0xcc, 0xe5, 0x69, 0x11, 0x3b, 0x1f, 0xb6, 0x43, 0xfa, 0x30, 0xed, 0xbf, 0xd9, 0xf0, 0x9b, 0xf5, 0x91, 0x4a, 0xad, 0x73, 0x2e, 0x68, 0x4e, 0x56, 0x9d, 0x4d, 0xab, 0xf2, 0xc5, 0xb3, 0x52, 0xab, 0x1f, 0x34, 0x0a, 0xa7, 0x7a, 0x60, 0xa9, 0x43, 0xd2, 0xf1, 0xf7, 0x27, 0x49, 0x5a, 0x84, 0xf2, 0x5c, 0xd9, 0x5c, 0x6f, 0x39, 0x09, 0x2c, 0x76, 0x72, 0xd9, 0x37, 0x9f, 0xf2, 0xdf, 0x37, 0xea, 0x65, 0xd3, 0xdd, 0xc2, 0x7c, 0xc9, 0xbe, 0x71, 0xe1, 0xe9, 0xa1, 0xc5, 0xe0, 0xcf, 0x70, 0x7b, 0xd1, 0x14, 0xdd, 0xa3, 0xa8, 0x69, 0x19, 0x71, 0x6b, 0x9b, 0x9d, 0x38, 0xb9, 0xde, 0xe3, 0x34, 0xe8, 0x36, 0x03, 0xaf, 0xf3, 0x62, 0x87, 0xd0, 0x99, 0xa6, 0x9b, 0x8d, 0x41, 0x1f, 0x73, 0x1f, 0x19, 0x66, 0xde, 0x30, 0xcb, 0x79, 0xee, 0x11, 0x81, 0xf4, 0x52, 0xfd, 0x68, 0x11, 0x7e, 0xb3, 0x3f, 0xdc, 0xb0, 0xf0, 0xd4, 0x50, 0xed, 0x25, 0xcd, 0xb2, 0x22, 0xbf, 0xc4, 0x72, 0x6c, 0xa2, 0xdb, 0xde, 0xce, 0x0c, 0x11, 0x19, 0xbc, 0x6c, 0xf4, 0xec, 0x61, 0x26, 0xc8, 0x45, 0x3d, 0x66, 0x7c, 0x47, 0x68, 0x46, 0x34, 0x7b, 0x1f, 0xe9, 0xab, 0xcf, 0xdb, 0x96, 0x22, 0xdd, 0x78, 0x27, 0x69, 0xc2, 0x27, 0x98, 0x09, 0x94, 0xd9, 0x8a, 0xef, 0x87, 0xc3, 0x45, 0xb1, 0xbc, 0xfd, 0xf4, 0x7d, 0x6b, 0x97, 0x36, 0x9a, 0x2d, 0xe9, 0x63, 0xb7, 0x22, 0xf6, 0x48, 0x74, 0x16, 0xca, 0x6c, 0xcc, 0x28, 0xf1, 0x2e, 0x4a, 0x3c, 0x80, 0xfc, 0x75, 0xa1, 0x55, 0x3c, 0xc7, 0xf2, 0x2e, 0x73, 0x74, 0x0a, 0xf2, 0x34, 0x99, 0x2b, 0x18, 0x95, 0xaf, 0xcb, 0xab, 0x60, 0xd9, 0x92, 0x21, 0x36, 0x0b, 0xef, 0xee, 0x2e, 0x7d, 0xf4, 0x36, 0xf4, 0x55, 0x9e, 0xb4, 0xd0, 0x18, 0x47, 0x43, 0xb2, 0xc2, 0xc5, 0xf4, 0xd4, 0x6b, 0xc2, 0x76, 0x05, 0x22, 0xe0, 0x9c, 0x25, 0xfe, 0x2e, 0xe9, 0x65, 0xef, 0x6e, 0x1b, 0xbd, 0xd3, 0x07, 0xd9, 0x4d, 0x63, 0x6d, 0xe4, 0x5a, 0xa0, 0x01, 0x32, 0x40, 0xff, 0x4a, 0xf4, 0x76, 0xc2, 0x58, 0x9b, 0xd7, 0x85, 0x1e, 0x8c, 0x4d, 0x23, 0xec, 0xb2, 0xe7, 0x77, 0xb9, 0x51, 0x43, 0x0e, 0xa5, 0xeb, 0x5f, 0xec, 0x2a, 0x40, 0xad, 0x93, 0x78, 0xfa, 0xb5, 0x2e, 0xa6, 0x8d, 0x52, 0xdd, 0xa8, 0x8f, 0xe9, 0x9f, 0x46, 0xe9, 0xe7, 0x63, 0x53, 0xf8, 0x97, 0x40, 0x37, 0xd3, 0x6f, 0x8d, 0x4e, 0xdd, 0x17, 0xef, 0x62, 0xfa, 0x01, 0xa4, 0x6f, 0x8c, 0x59, 0x28, 0x5d, 0xd3, 0xd4, 0x95, 0x1f, 0x9d, 0xbe, 0x2f, 0x8e, 0xaf, 0xdd, 0x80, 0x92, 0xbf, 0x3f, 0xde, 0xc9, 0xf4, 0xcb, 0x25, 0xa6, 0xf9, 0x49, 0x74, 0x06, 0x41, 0xd7, 0x5c, 0xe9, 0x66, 0x9a, 0xab, 0xb1, 0xdb, 0x28, 0xef, 0xa4, 0x97, 0x01, 0xb9, 0x80, 0x43, 0xf6, 0x00, 0x02, 0x6f, 0x4d, 0xd6, 0x25, 0xc8, 0xef, 0x9f, 0x76, 0x3f, 0x10, 0x0b, 0x52, 0x0e, 0x41, 0xea, 0x12, 0xa3, 0x56, 0x8e, 0x95, 0x05, 0xd0, 0x1c, 0x94, 0xa6, 0x33, 0xa2, 0xd4, 0x2c, 0x5e, 0xca, 0x28, 0xb1, 0xec, 0x0d, 0xbc, 0xd4, 0x87, 0xc0, 0xe8, 0x60, 0xb7, 0x31, 0x76, 0xdf, 0x7e, 0xa4, 0x4f, 0xba, 0x2a, 0xb1, 0x49, 0x1f, 0xf0, 0xf4, 0x8f, 0x40, 0xf9, 0x41, 0xfe, 0x76, 0x11, 0xe9, 0x67, 0x90, 0x7f, 0x17, 0xa7, 0x19, 0x23, 0x38, 0xdd, 0x05, 0xfc, 0xcb, 0x65, 0xd4, 0xb3, 0x42, 0x17, 0x97, 0xe5, 0xf1, 0x2c, 0x1a, 0x03, 0x6d, 0x68, 0x3a, 0xca, 0xef, 0xe6, 0xf9, 0x26, 0x01, 0xe3, 0x0b, 0xdd, 0xb9, 0x0a, 0x9d, 0x01, 0xe1, 0x27, 0xf8, 0xc2, 0x78, 0xcc, 0x80, 0x52, 0x47, 0x14, 0xba, 0x23, 0xbd, 0xdf, 0x35, 0x07, 0x33, 0xe9, 0x1c, 0x66, 0x41, 0x30, 0xbb, 0x6e, 0x21, 0xfe, 0xbd, 0x2f, 0xb7, 0x94, 0xb4, 0x1f, 0x13, 0x6a, 0x7a, 0x53, 0x62, 0xba, 0x51, 0xd7, 0x2d, 0x64, 0x9d, 0x94, 0xb2, 0x96, 0xa1, 0x10, 0xd3, 0xed, 0x13, 0xd7, 0x32, 0x0b, 0xe9, 0xbf, 0x5c, 0x22, 0x69, 0x6d, 0x0d, 0x92, 0xd6, 0xd6, 0xc5, 0x4a, 0x4a, 0x2b, 0xd8, 0xdb, 0x98, 0x81, 0x4c, 0xbf, 0xfa, 0x88, 0x39, 0x91, 0x6b, 0xab, 0xcb, 0x48, 0x70, 0x03, 0x23, 0x57, 0x5f, 0xc7, 0xec, 0x3b, 0x72, 0x7d, 0x5b, 0xcb, 0x90, 0x2f, 0xa6, 0x57, 0xa5, 0xff, 0xbc, 0x02, 0x3e, 0x4f, 0x11, 0x45, 0x4a, 0x51, 0xee, 0x2f, 0xa2, 0x1b, 0x72, 0x4d, 0x8f, 0x52, 0xcb, 0xf2, 0x2a, 0xe4, 0x93, 0x78, 0xd7, 0xe2, 0xdd, 0x0f, 0x0d, 0xd6, 0x89, 0x59, 0x5e, 0x44, 0x7d, 0xd0, 0xb7, 0x67, 0xc7, 0x07, 0x31, 0x65, 0x53, 0xe9, 0x19, 0x7a, 0xd0, 0xe2, 0x1a, 0xa5, 0x82, 0x93, 0x2d, 0xd6, 0xb5, 0xac, 0x80, 0xea, 0xb6, 0x39, 0x98, 0x69, 0xff, 0x0b, 0xbc, 0x6e, 0x93, 0x2b, 0x07, 0x32, 0x5a, 0x4f, 0x79, 0x4b, 0x44, 0xe2, 0x7a, 0x3e, 0xe6, 0x98, 0x4e, 0x63, 0x43, 0x19, 0xca, 0x4b, 0xfa, 0xc3, 0x2f, 0x39, 0x9e, 0xd9, 0xe7, 0x15, 0x8c, 0x66, 0x3c, 0xa6, 0x3c, 0xa1, 0xc1, 0xa0, 0xd6, 0x46, 0xd4, 0x4a, 0xfc, 0x96, 0x7d, 0xec, 0xab, 0x6b, 0xc9, 0x1e, 0xbe, 0xb3, 0x9d, 0x99, 0x21, 0x75, 0x53, 0x75, 0x95, 0x8e, 0x53, 0x3d, 0xc8, 0xf5, 0x1f, 0xd4, 0xb2, 0xec, 0xc7, 0x50, 0x7e, 0x1b, 0xf4, 0x77, 0x8b, 0x82, 0xff, 0x97, 0xd1, 0x2b, 0x03, 0x8f, 0xe5, 0xbc, 0xe5, 0xc3, 0xd0, 0xf0, 0x59, 0x76, 0xc3, 0xc9, 0xfe, 0x93, 0xfd, 0xd0, 0x33, 0xb3, 0x14, 0x9c, 0x4a, 0xbc, 0x2a, 0xdc, 0x0f, 0x38, 0xdc, 0x52, 0x48, 0x16, 0x13, 0xbe, 0x69, 0xa4, 0xa0, 0x13, 0x3d, 0x41, 0x6d, 0x52, 0x7b, 0x35, 0xef, 0xad, 0xd7, 0xdf, 0x7a, 0x7d, 0xbf, 0x52, 0x4b, 0xf0, 0xcb, 0x7a, 0x45, 0x7b, 0xed, 0x8f, 0x6f, 0xfe, 0xf1, 0x4d, 0xcf, 0xae, 0x14, 0xe4, 0x52, 0xae, 0xf5, 0xb0, 0xec, 0xcd, 0x2a, 0xcc, 0x5c, 0xf4, 0xff, 0xc8, 0xdf, 0x36, 0x52, 0xef, 0x48, 0x4c, 0x7b, 0x02, 0xb0, 0x2d, 0x80, 0x83, 0x1a, 0x08, 0xb2, 0x62, 0x67, 0x2b, 0x25, 0xdb, 0x07, 0x4a, 0xba, 0xd8, 0x28, 0x6c, 0x49, 0x2d, 0x97, 0x94, 0x24, 0x2d, 0x0c, 0x85, 0xbd, 0x9e, 0xe6, 0xc6, 0xfb, 0x51, 0xa2, 0xdd, 0x75, 0x8b, 0xd5, 0x1b, 0x78, 0xa2, 0x65, 0x88, 0xf0, 0x62, 0xe7, 0x42, 0x7a, 0x6e, 0x6b, 0x5a, 0x24, 0x3f, 0x64, 0x61, 0x69, 0x61, 0xaf, 0xb7, 0xbe, 0x11, 0xca, 0x98, 0x6b, 0xae, 0xaa, 0x1b, 0x8c, 0xe2, 0x9b, 0x31, 0x15, 0x7b, 0x13, 0x31, 0xb3, 0x38, 0x97, 0x34, 0x37, 0xbc, 0x15, 0xa0, 0x17, 0xcc, 0x80, 0x5b, 0xe9, 0x45, 0x09, 0xcc, 0x45, 0xdc, 0xaa, 0xc5, 0x0c, 0x61, 0x8e, 0x36, 0xc0, 0x0a, 0xd2, 0x43, 0xc6, 0x1b, 0x39, 0xa6, 0x8e, 0x4c, 0x0e, 0xd5, 0x9a, 0x08, 0x63, 0xd0, 0xf3, 0x5f, 0x39, 0x2d, 0x30, 0x62, 0x8c, 0x7b, 0x68, 0x3c, 0x40, 0xcf, 0xf9, 0x2f, 0x29, 0x94, 0x75, 0x52, 0xe5, 0x50, 0x03, 0xd7, 0xf3, 0xf4, 0x24, 0x2f, 0x25, 0x26, 0xa8, 0xfa, 0x5e, 0xc9, 0x9b, 0x5c, 0x9e, 0x33, 0x36, 0x86, 0x52, 0xff, 0x0a, 0xeb, 0x5c, 0xd8, 0xfb, 0x82, 0xd0, 0x8e, 0x52, 0x3f, 0xc5, 0xb8, 0x0e, 0x4b, 0x2c, 0x6b, 0x97, 0xd2, 0x72, 0x05, 0x8f, 0xac, 0xc1, 0xbf, 0xd3, 0xf3, 0xa0, 0xf7, 0x5e, 0xce, 0x47, 0x59, 0xab, 0xf8, 0x48, 0xb1, 0x04, 0x46, 0x3e, 0x7e, 0x86, 0x46, 0xca, 0x27, 0xa1, 0x96, 0xa1, 0xca, 0x4b, 0x59, 0xd2, 0xf1, 0x51, 0xf4, 0x8d, 0x23, 0x91, 0x08, 0x19, 0xd5, 0xba, 0x97, 0x41, 0x0b, 0xca, 0xcd, 0x1c, 0x43, 0xbc, 0xef, 0x2c, 0x99, 0xe3, 0x27, 0x2b, 0xdf, 0xc5, 0xac, 0xd5, 0x81, 0x27, 0x80, 0xb1, 0x4e, 0x9c, 0x2b, 0xb4, 0x13, 0x2f, 0xc6, 0x34, 0x5c, 0xb6, 0x8d, 0x83, 0x1e, 0x27, 0x20, 0x87, 0xb4, 0x90, 0x67, 0x47, 0xc1, 0xd1, 0xe6, 0xf0, 0xa2, 0x63, 0x71, 0xd1, 0x7d, 0x7c, 0x54, 0xc1, 0x4d, 0x04, 0x6e, 0x62, 0x92, 0x1a, 0xed, 0x49, 0x6a, 0x68, 0x8e, 0xa8, 0xa3, 0x68, 0x19, 0xa7, 0x06, 0xcb, 0x6a, 0x75, 0x31, 0xb1, 0x3a, 0xb0, 0x0d, 0x33, 0xc4, 0x73, 0x24, 0xad, 0x01, 0xeb, 0x45, 0x27, 0x60, 0x9d, 0xd9, 0x7c, 0x66, 0xb3, 0xb5, 0xc6, 0x36, 0x55, 0xf4, 0x38, 0x1b, 0x5c, 0x3a, 0xae, 0x0f, 0xe6, 0x59, 0x3d, 0xe2, 0x1a, 0x66, 0xc2, 0x48, 0x2a, 0xb0, 0xe1, 0xd9, 0x32, 0xf4, 0xeb, 0x8b, 0xcc, 0x19, 0xae, 0x01, 0x87, 0x17, 0x84, 0xdc, 0xf8, 0x15, 0x43, 0xe5, 0x49, 0xbd, 0xef, 0xb2, 0x1b, 0xdc, 0x67, 0x73, 0xe5, 0x06, 0x46, 0xae, 0x3c, 0x95, 0xd6, 0xf9, 0x14, 0xbd, 0xdc, 0x35, 0xa6, 0x8e, 0xcb, 0xfd, 0x64, 0x21, 0x5c, 0x39, 0x4c, 0xf6, 0x88, 0x64, 0x48, 0x7e, 0x83, 0x8e, 0x53, 0x93, 0xd2, 0x70, 0x03, 0xc0, 0x46, 0xe4, 0x2d, 0xcb, 0x55, 0xe4, 0xc4, 0x6d, 0xcb, 0xce, 0x0f, 0x82, 0x12, 0x47, 0x15, 0x6e, 0x22, 0x39, 0x80, 0x58, 0x02, 0x56, 0xb4, 0x39, 0xec, 0x08, 0x82, 0x63, 0x69, 0xce, 0x82, 0x2e, 0x44, 0x1c, 0x2f, 0x42, 0xeb, 0xb9, 0x45, 0xb1, 0x69, 0x40, 0x05, 0x47, 0x24, 0x31, 0x1b, 0xfa, 0x38, 0x72, 0x6f, 0x43, 0xd9, 0xc3, 0x61, 0xe8, 0x10, 0x73, 0xdc, 0x3c, 0xff, 0xe1, 0x10, 0x13, 0x0e, 0x7a, 0x30, 0x47, 0x51, 0xa9, 0x6b, 0x04, 0xbd, 0x3b, 0x29, 0xe7, 0x2e, 0x9d, 0xa3, 0xde, 0xfb, 0xdb, 0x6e, 0x75, 0xac, 0x9e, 0xe2, 0x3e, 0xa3, 0xcd, 0xe8, 0xc9, 0x96, 0xe3, 0xa3, 0x7c, 0x6c, 0xa3, 0x2f, 0x91, 0x12, 0xc3, 0xfb, 0x29, 0x94, 0xeb, 0x9c, 0xc8, 0x1b, 0xa2, 0x09, 0xf4, 0x9f, 0x0b, 0x71, 0x35, 0x41, 0xb6, 0x5a, 0x91, 0x0a, 0x8b, 0xbd, 0x04, 0xf6, 0x3a, 0x6f, 0x51, 0x69, 0x3f, 0xf5, 0xf9, 0x32, 0x9a, 0x1f, 0xdd, 0x98, 0x1b, 0xa9, 0x3d, 0xc5, 0x37, 0xf1, 0x18, 0x4a, 0xd8, 0x50, 0x02, 0x23, 0xa0, 0x00, 0xd2, 0x41, 0xe4, 0xfd, 0xe9, 0xb1, 0xae, 0x49, 0xf6, 0x28, 0xbb, 0xea, 0x24, 0x49, 0xaf, 0x03, 0x2d, 0x13, 0xd0, 0x86, 0xdc, 0xbe, 0x48, 0x3b, 0x53, 0xa8, 0x39, 0xaf, 0xc0, 0xc6, 0x1a, 0x60, 0x81, 0xb0, 0x67, 0x7c, 0x1b, 0x05, 0x06, 0x59, 0xc0, 0x6b, 0xfc, 0xee, 0x6b, 0xaa, 0xe7, 0xa6, 0xd8, 0x95, 0x55, 0xc9, 0xed, 0x0f, 0x97, 0x8f, 0x95, 0x06, 0xb6, 0x41, 0x03, 0x5a, 0xe8, 0x24, 0x5f, 0xc2, 0xe6, 0xe2, 0xcd, 0x62, 0x0f, 0xa5, 0xa0, 0x2f, 0xf0, 0xac, 0xfc, 0x58, 0x2f, 0xfc, 0xbf, 0x47, 0x57, 0x59, 0x7c, 0xdd, 0x8a, 0xcf, 0x46, 0xfb, 0x69, 0xd2, 0xa2, 0xe6, 0x32, 0xd8, 0x66, 0x74, 0xb1, 0x72, 0xb6, 0x30, 0x94, 0xeb, 0xd2, 0xa9, 0xe9, 0x5e, 0x8c, 0x70, 0x8d, 0x27, 0x2f, 0x29, 0x91, 0xd6, 0x40, 0xdb, 0xf3, 0x94, 0x7e, 0x20, 0x4f, 0xec, 0xfd, 0x35, 0x2d, 0x2d, 0xa4, 0xa3, 0x1b, 0x31, 0x02, 0x2a, 0x54, 0xbe, 0x3e, 0x11, 0xd3, 0x82, 0xaf, 0x6d, 0x34, 0xca, 0xc1, 0xd5, 0x3a, 0xbc, 0x5b, 0x68, 0x06, 0x04, 0xfe, 0xa3, 0xa5, 0x15, 0xc2, 0x52, 0xa4, 0xe5, 0x60, 0x3e, 0xd5, 0xd2, 0xe8, 0x20, 0x4e, 0x2d, 0xa9, 0x24, 0x5d, 0x22, 0x92, 0xbd, 0x77, 0x0f, 0xa4, 0x80, 0x11, 0x3a, 0x05, 0xfa, 0xef, 0xa3, 0x31, 0xd4, 0xad, 0x9d, 0xb3, 0x84, 0xf9, 0xa0, 0x6d, 0x2c, 0x3f, 0xfe, 0x11, 0xab, 0x48, 0x6b, 0x57, 0x34, 0xca, 0xaf, 0x1d, 0xf5, 0x4f, 0x0a, 0xf9, 0xa3, 0xad, 0xce, 0x2e, 0x55, 0x47, 0x56, 0xf9, 0xf5, 0x23, 0xb4, 0x95, 0xf4, 0xa7, 0x70, 0x29, 0x78, 0xa5, 0xa2, 0xea, 0x03, 0x16, 0xfb, 0xd5, 0x07, 0x2c, 0x12, 0xca, 0xa7, 0x99, 0x83, 0xf7, 0xc2, 0x0c, 0x6e, 0xff, 0xea, 0xc8, 0xfe, 0x0d, 0xe7, 0xa6, 0x39, 0x3a, 0x22, 0x90, 0x65, 0x09, 0x7b, 0x00, 0xf3, 0x44, 0x96, 0x33, 0xb0, 0x9e, 0xb8, 0x44, 0x62, 0xf2, 0x2a, 0x3c, 0x8f, 0xe3, 0xf9, 0x40, 0x54, 0xc6, 0x6f, 0x53, 0x14, 0x72, 0x44, 0x0e, 0x78, 0x26, 0xe1, 0x37, 0x48, 0x9e, 0x02, 0xf2, 0x39, 0x90, 0xd7, 0x52, 0x33, 0x53, 0xb5, 0x83, 0x3d, 0x29, 0x4f, 0xa3, 0x9e, 0xa4, 0x61, 0xb6, 0x96, 0x95, 0x91, 0x86, 0xbe, 0xe3, 0x77, 0xf4, 0x25, 0xf1, 0x36, 0xa4, 0x66, 0x05, 0xf9, 0x30, 0xb3, 0x0d, 0x91, 0x42, 0x4a, 0xb9, 0x71, 0x1a, 0x29, 0x7a, 0x9e, 0x92, 0x9f, 0x91, 0x62, 0x84, 0x34, 0x2d, 0xe0, 0xb1, 0x50, 0xa1, 0x5b, 0xa3, 0xe3, 0x36, 0xf8, 0xb0, 0x00, 0x7d, 0x5f, 0xa3, 0xe1, 0xd4, 0xb8, 0x00, 0x6a, 0x10, 0xbc, 0xf8, 0x84, 0xd8, 0x56, 0x45, 0x97, 0x04, 0xcf, 0x15, 0x10, 0xcf, 0x41, 0xfe, 0xbb, 0x15, 0xfb, 0x0b, 0xe3, 0x45, 0xaf, 0xf4, 0xd5, 0xea, 0x18, 0xd7, 0xcc, 0x61, 0xef, 0x72, 0x6b, 0x43, 0x8f, 0xe7, 0x69, 0xff, 0xb0, 0x46, 0x87, 0xe7, 0x31, 0x85, 0xbb, 0x7d, 0x91, 0x41, 0x96, 0xa1, 0xdb, 0x53, 0x9f, 0xbd, 0x1c, 0x95, 0xef, 0xac, 0x54, 0xb4, 0x53, 0x60, 0x72, 0x38, 0x22, 0xf3, 0xda, 0x5e, 0x26, 0x3b, 0x07, 0xb8, 0x2e, 0x8f, 0x0a, 0xef, 0xfe, 0x02, 0xf2, 0x5e, 0xc2, 0xb7, 0x96, 0xb4, 0xe7, 0x04, 0x5f, 0x1a, 0x50, 0xf6, 0x9c, 0xe8, 0x8e, 0x38, 0xd2, 0xbe, 0x13, 0x2b, 0x59, 0x85, 0x4d, 0xe1, 0x06, 0xe2, 0xd6, 0x6c, 0x7b, 0x44, 0xb8, 0xc9, 0x77, 0x52, 0x44, 0xd6, 0x47, 0x94, 0xe5, 0x39, 0xd8, 0x14, 0x92, 0xdf, 0x7f, 0x26, 0x2f, 0x53, 0x0b, 0x69, 0x98, 0x1f, 0x06, 0x14, 0x8b, 0x01, 0x75, 0x74, 0x72, 0x7b, 0xf3, 0x31, 0xe4, 0x6c, 0xfa, 0x82, 0x6f, 0xa4, 0x88, 0x35, 0x04, 0x46, 0xfe, 0xfa, 0x22, 0x38, 0xa7, 0x3d, 0xa9, 0x01, 0x0b, 0x4b, 0xa1, 0x53, 0x77, 0x30, 0x37, 0xf9, 0x32, 0x14, 0x6d, 0xf5, 0xaf, 0xcf, 0x90, 0x0f, 0xe5, 0xaf, 0xed, 0x7c, 0xec, 0x70, 0x1a, 0x08, 0xbb, 0x95, 0x16, 0xb7, 0x9e, 0x11, 0x8b, 0x34, 0x3a, 0x58, 0xfa, 0x90, 0x61, 0x18, 0x61, 0x23, 0x7f, 0x6d, 0x6d, 0x18, 0xc2, 0x5c, 0x60, 0x4c, 0xc5, 0x3d, 0x0d, 0x43, 0x78, 0x2b, 0x02, 0xc7, 0x8d, 0xfc, 0x75, 0x21, 0xe9, 0x20, 0x42, 0x77, 0xe4, 0x07, 0x35, 0x2c, 0xdd, 0xf7, 0x37, 0x9a, 0x80, 0xf1, 0x7c, 0xd4, 0x57, 0xc1, 0x5b, 0xb1, 0x36, 0xa2, 0xb4, 0xc1, 0xab, 0xd6, 0x6c, 0x57, 0xea, 0x79, 0xf0, 0x0a, 0x59, 0x6e, 0x6a, 0xfd, 0x0e, 0xc5, 0xe2, 0xfb, 0x38, 0xde, 0x32, 0xb4, 0x78, 0xec, 0x4a, 0x00, 0xf5, 0xb5, 0xc4, 0x61, 0x37, 0xc4, 0x61, 0x09, 0xe1, 0x29, 0x71, 0x5a, 0x1f, 0xe6, 0x96, 0xf9, 0x0e, 0xea, 0x8f, 0xd0, 0x9f, 0xfc, 0x64, 0xa7, 0x3d, 0x60, 0xcd, 0x68, 0x7f, 0xc2, 0x89, 0xf4, 0xdc, 0x09, 0x29, 0xe2, 0x84, 0x98, 0x7d, 0x42, 0x6c, 0xd1, 0x57, 0xd3, 0xee, 0x42, 0x54, 0xb5, 0xe7, 0x38, 0x4e, 0x1f, 0x3d, 0x07, 0xb9, 0xd1, 0xc1, 0xe6, 0xf3, 0x96, 0x11, 0x66, 0x0e, 0x50, 0x82, 0x4b, 0x9e, 0xc5, 0x3f, 0x6b, 0x21, 0xca, 0x2c, 0x8f, 0xca, 0x18, 0xd5, 0x3a, 0x8e, 0xe3, 0xde, 0x24, 0x0d, 0x01, 0xc9, 0x47, 0xa5, 0x2f, 0x94, 0x29, 0x29, 0xab, 0x02, 0x44, 0x33, 0x0d, 0xa4, 0xda, 0x05, 0x33, 0xca, 0x90, 0x76, 0x69, 0x49, 0x52, 0xf4, 0x2f, 0x97, 0x55, 0x8a, 0x1a, 0x17, 0x8f, 0xfd, 0xe5, 0x7c, 0x60, 0x87, 0x4a, 0xdd, 0x1d, 0x56, 0xbf, 0x32, 0xaa, 0xd2, 0xfe, 0x75, 0xd2, 0x7a, 0x68, 0x7c, 0xd6, 0x69, 0x93, 0x5e, 0x64, 0xd1, 0xc5, 0x8c, 0xce, 0x1e, 0x66, 0xa2, 0xaf, 0xaa, 0xdf, 0x78, 0x91, 0xa3, 0x87, 0x59, 0x8a, 0x9a, 0xec, 0xcd, 0x11, 0x53, 0x54, 0xb8, 0xc9, 0xf3, 0xdf, 0x01, 0xed, 0x68, 0x2e, 0x66, 0x72, 0xf2, 0x6f, 0x6c, 0xa5, 0x51, 0x87, 0xd9, 0x88, 0xfb, 0x0b, 0x14, 0x19, 0x16, 0x8c, 0x67, 0x96, 0x20, 0x1f, 0x2d, 0xf5, 0x4f, 0x28, 0x5f, 0xa1, 0x0e, 0xb4, 0x2b, 0x13, 0xb7, 0x94, 0xb9, 0xed, 0x29, 0xcd, 0xb4, 0xce, 0x51, 0x3d, 0xb5, 0x4a, 0x69, 0xaf, 0x6d, 0x6b, 0xe1, 0x5a, 0xe1, 0x1a, 0x38, 0xce, 0x2f, 0x5c, 0x23, 0xdf, 0x5c, 0xaf, 0xe2, 0x91, 0x2e, 0x21, 0xef, 0xb5, 0xd8, 0x68, 0x6d, 0xb0, 0xad, 0x11, 0xae, 0x3d, 0x71, 0x54, 0x7a, 0xe0, 0x1f, 0x4f, 0x84, 0x1a, 0x88, 0xa3, 0xb8, 0x24, 0xd2, 0xcd, 0xa6, 0x59, 0x4f, 0x7b, 0x87, 0x5b, 0xb8, 0xc6, 0x5b, 0x0d, 0x48, 0xb7, 0x17, 0xd9, 0x8a, 0xb8, 0x8f, 0x8f, 0xe3, 0x54, 0xfc, 0x1b, 0xaa, 0x9b, 0xfb, 0x34, 0x34, 0x8b, 0xc7, 0x64, 0x70, 0xc0, 0x04, 0x6c, 0x76, 0x90, 0x8f, 0x5d, 0x32, 0x8a, 0x7e, 0x1b, 0x34, 0x2d, 0xd2, 0x9b, 0x42, 0xcf, 0xd4, 0xbd, 0x63, 0xe4, 0x7e, 0xcc, 0xc4, 0x49, 0xf2, 0x8d, 0xd9, 0x7b, 0x84, 0x3a, 0x1b, 0xf0, 0x8a, 0xb1, 0xa5, 0x34, 0x3b, 0xd8, 0x36, 0x14, 0x9c, 0x1a, 0x22, 0xab, 0xf5, 0xf6, 0x47, 0xc8, 0x82, 0x9d, 0x57, 0x20, 0xd1, 0xdc, 0xae, 0x4d, 0xd1, 0x61, 0x17, 0xe7, 0x2f, 0x47, 0xb0, 0x1f, 0x73, 0x8c, 0x13, 0x32, 0x9f, 0x70, 0x7a, 0x52, 0x9d, 0x61, 0x0a, 0x10, 0x9f, 0xc3, 0x4a, 0xc8, 0x03, 0x83, 0x98, 0x56, 0x0c, 0x8a, 0xf1, 0x54, 0xad, 0x23, 0xa2, 0x46, 0xf1, 0xa3, 0x08, 0x4e, 0xc5, 0x37, 0xe8, 0x20, 0xdf, 0x60, 0xd3, 0x97, 0xf4, 0xc1, 0x8a, 0x89, 0x34, 0x6f, 0x19, 0x9a, 0x48, 0x75, 0x5b, 0xfc, 0x66, 0x7a, 0x27, 0xf2, 0x39, 0xbd, 0xed, 0x37, 0xd3, 0xbb, 0xb0, 0x8e, 0x69, 0x0b, 0xd7, 0xb2, 0x3a, 0x68, 0x99, 0x6b, 0x85, 0x2b, 0x9c, 0xee, 0x57, 0x88, 0xee, 0xcb, 0x99, 0xc2, 0x07, 0x45, 0xe0, 0x03, 0x7b, 0x33, 0xda, 0x7e, 0xe5, 0xc7, 0x6f, 0x28, 0x6d, 0x97, 0x56, 0xfd, 0xd3, 0x05, 0x58, 0x2e, 0xcb, 0x5c, 0x79, 0x37, 0xb5, 0xd7, 0x4b, 0xfd, 0x71, 0x80, 0xf7, 0xc7, 0x5d, 0xbc, 0x3f, 0xee, 0x74, 0x0b, 0x57, 0xec, 0x41, 0xc5, 0x77, 0x3b, 0xa1, 0x0f, 0x26, 0x2f, 0x1e, 0xbb, 0xb1, 0xf9, 0x4b, 0xfa, 0xc0, 0x22, 0x19, 0x1d, 0xe9, 0x3e, 0x78, 0x2a, 0xd5, 0xfb, 0x65, 0xe8, 0x7d, 0x33, 0xe1, 0x10, 0x63, 0xb5, 0x0a, 0x0e, 0xd6, 0x8c, 0xda, 0x39, 0x25, 0x43, 0xc6, 0x60, 0x3f, 0xad, 0x73, 0xcc, 0x5e, 0xcb, 0x9c, 0xcc, 0x94, 0x82, 0x71, 0x9a, 0x28, 0x5a, 0x80, 0x9e, 0x04, 0x9f, 0x6b, 0xc5, 0x6f, 0x8b, 0xed, 0xc2, 0x15, 0xc9, 0x84, 0x79, 0x4c, 0x1b, 0xd2, 0x89, 0x0e, 0xf4, 0xca, 0x7a, 0xb1, 0x5d, 0xe1, 0xa1, 0xd0, 0x85, 0x08, 0xaf, 0xab, 0xa4, 0xd4, 0x4e, 0x2d, 0x86, 0x02, 0x18, 0x31, 0x7e, 0x81, 0xea, 0x8b, 0x0a, 0x7b, 0x58, 0x01, 0xb8, 0x2a, 0x2b, 0x49, 0x75, 0x1b, 0x43, 0xad, 0x9a, 0x89, 0x94, 0x17, 0xab, 0xac, 0xee, 0xcc, 0xd5, 0x12, 0xd0, 0x75, 0x8c, 0xe9, 0x41, 0xd7, 0x31, 0x8c, 0x39, 0xa3, 0xc2, 0xcd, 0x56, 0xe2, 0x66, 0xcc, 0x78, 0xe0, 0xe6, 0x31, 0x70, 0x73, 0xc3, 0x5e, 0x58, 0x44, 0x9c, 0x7e, 0xfa, 0x14, 0x3f, 0xeb, 0x39, 0x3f, 0x8f, 0xd9, 0xf2, 0xbe, 0x9c, 0x87, 0xc7, 0x6b, 0x32, 0xe8, 0x67, 0x4c, 0xd3, 0x8f, 0xf3, 0xb0, 0x9e, 0xb7, 0x7d, 0x58, 0xe1, 0x61, 0x9a, 0x5d, 0x39, 0xfd, 0x5c, 0x64, 0x45, 0x09, 0x63, 0xd2, 0x0c, 0x31, 0x68, 0xf5, 0x40, 0x6b, 0x22, 0x9f, 0xe7, 0x0a, 0x50, 0x4e, 0x87, 0x7a, 0xb5, 0x92, 0x31, 0x55, 0xee, 0x6c, 0x52, 0x3a, 0x04, 0x1e, 0x02, 0x8e, 0xda, 0xf0, 0x4c, 0xff, 0x4b, 0x90, 0xed, 0x3a, 0xd1, 0x4d, 0x14, 0x13, 0xdd, 0x92, 0x2e, 0xb8, 0x0d, 0x54, 0xe3, 0x98, 0x86, 0xae, 0x06, 0xd6, 0x47, 0xd4, 0x35, 0x23, 0x9a, 0xc1, 0xbf, 0x84, 0x66, 0xc1, 0x88, 0x60, 0x8b, 0x27, 0xdb, 0x70, 0x33, 0x9f, 0x92, 0x74, 0x50, 0x57, 0x00, 0x8d, 0x69, 0x09, 0xf5, 0xe4, 0xeb, 0x52, 0x01, 0x97, 0x6a, 0x9c, 0x43, 0x21, 0x6d, 0x5c, 0xa4, 0x79, 0xca, 0x31, 0x92, 0x35, 0x24, 0xbd, 0x44, 0x83, 0xb2, 0xca, 0x40, 0xbd, 0x65, 0x43, 0x6f, 0x2d, 0xe6, 0x1a, 0x1b, 0xc7, 0x5d, 0x2b, 0x95, 0xd9, 0x3c, 0x18, 0xf9, 0x7a, 0x31, 0xaf, 0x31, 0x8e, 0x51, 0x60, 0xb7, 0x17, 0xf1, 0xfe, 0xda, 0x01, 0xf9, 0x5b, 0x15, 0x8c, 0xa7, 0xeb, 0xb0, 0xfa, 0x23, 0x19, 0x35, 0xfa, 0xfb, 0x43, 0x47, 0x93, 0xbd, 0x53, 0xb2, 0x08, 0x2d, 0x11, 0x31, 0xf2, 0x6c, 0xa1, 0x3c, 0xd2, 0xed, 0xb2, 0xef, 0x56, 0x57, 0x82, 0x48, 0x87, 0x7b, 0xd8, 0xee, 0x99, 0xdf, 0xcb, 0x84, 0x25, 0x8a, 0x8e, 0x38, 0x07, 0xa5, 0x9f, 0x6c, 0x19, 0xaa, 0xbe, 0xa2, 0x17, 0xec, 0x6b, 0x99, 0xfe, 0x65, 0xce, 0x47, 0xbf, 0xbe, 0xc4, 0x1c, 0xdd, 0xcb, 0xec, 0x1e, 0x25, 0x8f, 0x7d, 0x0e, 0xaf, 0x1f, 0xb9, 0xac, 0x86, 0xed, 0xe0, 0x8d, 0xaa, 0xab, 0x16, 0x39, 0xcd, 0x1b, 0x95, 0x57, 0x77, 0xcb, 0xfb, 0x1f, 0x0f, 0x69, 0x3d, 0x0c, 0x3a, 0x93, 0xcb, 0x14, 0x4f, 0x42, 0xac, 0x89, 0x03, 0x26, 0x4b, 0xc1, 0x1c, 0xb1, 0x1c, 0x64, 0xe5, 0x29, 0xbd, 0xca, 0xf8, 0x55, 0x72, 0x5b, 0x5d, 0x8d, 0xeb, 0x61, 0x46, 0x7c, 0x31, 0xe1, 0x8b, 0x99, 0xea, 0xe0, 0x5f, 0x92, 0x9c, 0x32, 0x2c, 0x92, 0x07, 0x15, 0xd6, 0x3d, 0xe8, 0x79, 0x90, 0x24, 0x02, 0xbe, 0x61, 0x46, 0xb5, 0x53, 0x6a, 0x32, 0xcf, 0x33, 0xa4, 0xe9, 0x57, 0x8f, 0xc9, 0x4f, 0x07, 0xb6, 0xa7, 0xd2, 0x44, 0x8c, 0x62, 0x5a, 0xdd, 0xb4, 0xd8, 0x56, 0xda, 0x01, 0xef, 0xfe, 0x21, 0x57, 0x6e, 0x64, 0x65, 0x0d, 0xcb, 0xec, 0x4b, 0xf4, 0xb5, 0x98, 0x01, 0x83, 0xa1, 0xd7, 0x2c, 0xd0, 0x9f, 0xcd, 0xa8, 0xa9, 0x9d, 0xf7, 0x1a, 0x78, 0xc9, 0xb9, 0x92, 0xd6, 0xb4, 0x45, 0x1a, 0x8b, 0xed, 0xac, 0x80, 0x7b, 0xe5, 0xb5, 0x8a, 0x9f, 0xd7, 0x1b, 0x4f, 0xa5, 0x9b, 0xc0, 0x67, 0x1a, 0x5d, 0x3c, 0xf6, 0xa6, 0x69, 0x62, 0x9a, 0x39, 0x9a, 0x73, 0x6e, 0x77, 0x94, 0x95, 0x3a, 0x58, 0x5e, 0x4a, 0x7e, 0x9d, 0x6e, 0x20, 0x78, 0x34, 0xc3, 0xb1, 0x34, 0x5c, 0xff, 0xb6, 0x30, 0x8d, 0xee, 0x26, 0xa4, 0x38, 0xd8, 0x0a, 0x25, 0x1d, 0xd6, 0x5e, 0x81, 0xe9, 0x2e, 0x56, 0x4e, 0x14, 0xa2, 0x3c, 0x7b, 0x1d, 0xac, 0x3c, 0x64, 0x33, 0x42, 0xad, 0x09, 0x19, 0x61, 0x37, 0xb8, 0x21, 0x13, 0xdc, 0xf7, 0x8d, 0x4a, 0x06, 0xbc, 0x07, 0xf0, 0x1e, 0x48, 0x63, 0x45, 0xfc, 0xad, 0xac, 0x0c, 0x71, 0xbf, 0x45, 0x41, 0xa6, 0xe5, 0x1c, 0x32, 0x40, 0xe6, 0x14, 0xa0, 0x16, 0xb7, 0x64, 0x8c, 0x30, 0xbe, 0xd6, 0x43, 0xb1, 0x00, 0xf7, 0x57, 0xab, 0x74, 0xa5, 0x15, 0x35, 0x68, 0x29, 0x5a, 0xdb, 0x1e, 0x3e, 0x43, 0x14, 0x34, 0xa4, 0xa4, 0x36, 0xf1, 0xb3, 0x32, 0xaa, 0x5d, 0xcc, 0xd7, 0xc1, 0x57, 0x72, 0x94, 0xaf, 0x23, 0x89, 0x85, 0xdc, 0x73, 0xb4, 0x3d, 0x9c, 0x0b, 0x6d, 0xd5, 0x44, 0x7a, 0x28, 0xa0, 0x7a, 0xa5, 0x99, 0xf4, 0x86, 0xd6, 0xe9, 0x0b, 0xdb, 0x59, 0x93, 0x60, 0x92, 0x74, 0x78, 0xae, 0x48, 0x7d, 0x0f, 0x29, 0x34, 0x2b, 0x74, 0x0b, 0x46, 0x8c, 0x39, 0xde, 0x4f, 0x7c, 0xfd, 0xc7, 0x48, 0x6d, 0x8e, 0x32, 0xd2, 0x8d, 0xd9, 0x7e, 0x69, 0xa1, 0xc9, 0xd4, 0x69, 0xd4, 0x90, 0xc7, 0x42, 0x36, 0xfd, 0x52, 0x1f, 0x97, 0xac, 0xa0, 0x41, 0x79, 0x48, 0x67, 0x3a, 0xc8, 0x8a, 0xa5, 0x7c, 0xbc, 0xbb, 0xf8, 0xfb, 0x5c, 0xc9, 0x80, 0xf7, 0x59, 0xab, 0xb4, 0xa6, 0x83, 0xf2, 0xa1, 0x60, 0x5f, 0x70, 0x70, 0x7f, 0x5f, 0xf7, 0x11, 0x5a, 0x2d, 0x72, 0x69, 0x88, 0xf3, 0x38, 0xd4, 0x5a, 0xb4, 0x38, 0x3f, 0xcf, 0x62, 0x14, 0xa0, 0xff, 0xeb, 0x8c, 0x82, 0xfc, 0x4c, 0x48, 0x37, 0xed, 0x20, 0x5b, 0xa9, 0x67, 0xc1, 0xf8, 0xfe, 0x78, 0xf7, 0x7b, 0x94, 0x9b, 0x64, 0x5d, 0x72, 0x2d, 0xd9, 0xde, 0x40, 0xfd, 0x18, 0x61, 0x26, 0x07, 0xb3, 0x91, 0x2c, 0x6a, 0xec, 0xa7, 0x95, 0x49, 0x1b, 0x4b, 0xae, 0xc6, 0xb9, 0x0c, 0xbe, 0x76, 0x56, 0x18, 0x18, 0xb9, 0x51, 0xae, 0xae, 0x4a, 0x9a, 0xfc, 0x7b, 0x04, 0x89, 0xeb, 0x37, 0xa4, 0x2f, 0x40, 0x4b, 0x44, 0xbc, 0x35, 0x6c, 0x72, 0x79, 0x98, 0xd9, 0xe5, 0x67, 0x26, 0x92, 0x6e, 0xb0, 0x1e, 0x22, 0x8a, 0x94, 0x4b, 0xae, 0x3a, 0x00, 0xb2, 0x49, 0xd4, 0x9c, 0x1f, 0x4c, 0xae, 0xc0, 0x2c, 0x59, 0xc5, 0xe7, 0xd9, 0xbc, 0x48, 0xd6, 0x6b, 0x71, 0x48, 0x99, 0x9c, 0x77, 0x87, 0x49, 0xda, 0x1d, 0xeb, 0x57, 0x56, 0xbf, 0x78, 0x3f, 0x69, 0x54, 0x9e, 0x30, 0xc5, 0xd8, 0x7c, 0x07, 0x2b, 0x38, 0xb9, 0x9b, 0x3d, 0x9b, 0xe4, 0x36, 0xce, 0xc5, 0xa6, 0x24, 0xa7, 0x1d, 0xeb, 0x57, 0xda, 0x44, 0xeb, 0x00, 0xac, 0xc4, 0x11, 0xe4, 0xbd, 0x6d, 0x0a, 0xeb, 0x8a, 0xc0, 0x6b, 0x92, 0x16, 0xbf, 0x2b, 0x20, 0x79, 0xcc, 0x23, 0xfd, 0x7c, 0x6f, 0x44, 0x07, 0x33, 0xd9, 0xd7, 0x30, 0x2d, 0xd9, 0x2f, 0x11, 0x64, 0x66, 0x03, 0x92, 0x8e, 0x3f, 0xb7, 0x01, 0x66, 0x0e, 0xda, 0xf3, 0x58, 0xc3, 0x10, 0x6a, 0x18, 0x3e, 0x19, 0x77, 0xb8, 0x58, 0xd9, 0x06, 0xae, 0x57, 0x2c, 0x59, 0xb5, 0x64, 0x6c, 0xbc, 0x42, 0xa2, 0x75, 0x52, 0xa5, 0x05, 0x93, 0xd5, 0x99, 0xd5, 0xd8, 0xab, 0xb9, 0xab, 0x46, 0x68, 0xdf, 0x00, 0xcb, 0x89, 0x0d, 0x00, 0x7f, 0xb3, 0x95, 0x69, 0xfa, 0xc0, 0xba, 0xb2, 0x58, 0xe9, 0xcc, 0x7e, 0x3a, 0x5e, 0xac, 0x3d, 0x38, 0xd0, 0xa9, 0x29, 0xd6, 0xd1, 0x38, 0x88, 0xb3, 0x6d, 0x83, 0x56, 0x4d, 0x6f, 0xce, 0x47, 0xbf, 0xa0, 0x1c, 0x3f, 0x90, 0xb7, 0xf5, 0xed, 0xfd, 0x21, 0xbe, 0x25, 0xa9, 0x3c, 0x09, 0xbd, 0x57, 0xe1, 0x7b, 0xa8, 0x8c, 0x45, 0xb2, 0x46, 0xfb, 0xa3, 0x39, 0x7f, 0xde, 0x6d, 0x5d, 0xcb, 0xb4, 0xbf, 0x1f, 0xf5, 0x3d, 0x34, 0xc8, 0x02, 0x4f, 0x9e, 0xfa, 0xa1, 0x38, 0x09, 0x56, 0x8e, 0x99, 0x7c, 0x53, 0x44, 0xff, 0x91, 0xf8, 0x6a, 0xf3, 0x53, 0x3f, 0xec, 0x75, 0x9f, 0xdc, 0x1c, 0x19, 0x7d, 0x2d, 0xee, 0x1f, 0x08, 0x31, 0xb9, 0x5d, 0x59, 0x21, 0x23, 0xeb, 0x8e, 0xaf, 0xe4, 0x97, 0x61, 0xa6, 0x2c, 0xa0, 0x55, 0x20, 0x57, 0x56, 0xf5, 0x58, 0xa2, 0x37, 0xb0, 0x5d, 0x74, 0xab, 0xb6, 0xce, 0xd3, 0x46, 0x13, 0x6b, 0x80, 0x25, 0xbe, 0xd3, 0xe8, 0x60, 0x4b, 0x31, 0xca, 0x60, 0x69, 0x38, 0x1c, 0x4c, 0x1b, 0x63, 0x0e, 0x3f, 0x5f, 0x03, 0x70, 0x4b, 0xb1, 0x20, 0xf7, 0xfe, 0x05, 0x76, 0xda, 0x94, 0x32, 0xed, 0xc6, 0x3c, 0x94, 0x58, 0x65, 0x2c, 0xe2, 0xf9, 0x1f, 0x00, 0xd4, 0x1c, 0x2e, 0x7f, 0x17, 0x60, 0x6c, 0x94, 0xf0, 0xf9, 0x0d, 0xfa, 0x53, 0x68, 0x11, 0x49, 0xf7, 0x26, 0xa5, 0xe4, 0x48, 0xc2, 0xc0, 0x4b, 0x16, 0x8b, 0x6e, 0xd4, 0xe6, 0x09, 0xd9, 0x51, 0x97, 0x17, 0x65, 0x67, 0xa6, 0xe4, 0xd0, 0xb3, 0xe8, 0x3f, 0x07, 0x8d, 0xa8, 0xb1, 0xf3, 0xdc, 0xdb, 0xa7, 0x3b, 0xd0, 0xdf, 0x3d, 0x18, 0x93, 0xb9, 0x56, 0x50, 0x80, 0x19, 0xae, 0x59, 0x5e, 0xee, 0xeb, 0x92, 0x57, 0x40, 0x9f, 0x85, 0x25, 0x22, 0x97, 0xa0, 0x4f, 0x48, 0x0f, 0x37, 0xc2, 0xc6, 0x35, 0x36, 0xc7, 0xc5, 0xb8, 0x22, 0x73, 0xf9, 0x3e, 0x10, 0xe2, 0x12, 0x95, 0x43, 0x9a, 0xfb, 0x27, 0x48, 0xa3, 0x5d, 0x99, 0xd2, 0xe8, 0x58, 0xff, 0xb1, 0x97, 0x20, 0x4b, 0x89, 0x6f, 0x8c, 0xe0, 0xe5, 0x0e, 0x8e, 0x5f, 0x41, 0x0a, 0x1f, 0x27, 0xcd, 0x65, 0x1c, 0x9f, 0x26, 0xae, 0x87, 0x0b, 0xc9, 0x55, 0x58, 0xdf, 0xfb, 0x8b, 0x2a, 0x9c, 0xc0, 0x15, 0xf3, 0x8e, 0x93, 0xb8, 0xab, 0xc8, 0xc5, 0xe6, 0x63, 0xee, 0x32, 0x47, 0x72, 0xce, 0xee, 0xb1, 0xfb, 0x63, 0x6c, 0x23, 0xe3, 0xf3, 0xc9, 0x69, 0x49, 0xe3, 0x60, 0xe0, 0xa3, 0x39, 0xec, 0x29, 0xee, 0xbb, 0x78, 0x12, 0x35, 0x0e, 0xec, 0x7d, 0x74, 0x55, 0x5e, 0xb0, 0xbf, 0xe5, 0xf1, 0x68, 0xd6, 0xbe, 0x7e, 0x65, 0xf6, 0xae, 0xe8, 0x25, 0xb9, 0x55, 0x02, 0x1b, 0xa1, 0xf2, 0xaa, 0x3e, 0xf1, 0xf6, 0x20, 0x79, 0x5a, 0xdf, 0x3a, 0x8c, 0xf8, 0x2e, 0x60, 0x96, 0x95, 0xc4, 0xf5, 0xed, 0xf8, 0x4f, 0x06, 0x5c, 0xd5, 0xc0, 0xa9, 0x86, 0x39, 0xa8, 0x8c, 0xc4, 0xc6, 0x47, 0x54, 0x59, 0x69, 0x02, 0x9e, 0x7a, 0x57, 0x8e, 0x78, 0x17, 0x7b, 0xb6, 0x89, 0x34, 0x0e, 0x07, 0x79, 0x04, 0xe4, 0xe5, 0x84, 0xb3, 0x4a, 0x0b, 0xa3, 0xd5, 0x45, 0xa3, 0xb9, 0x86, 0x6d, 0xeb, 0x3b, 0x16, 0x2f, 0x8d, 0xe8, 0x99, 0xa9, 0xe4, 0x29, 0xe6, 0x8b, 0x57, 0x7d, 0xcc, 0x04, 0x31, 0x87, 0xaf, 0x6e, 0x69, 0xa0, 0xab, 0xf0, 0x76, 0xc7, 0x84, 0x1a, 0xcd, 0xce, 0x3e, 0xab, 0xe6, 0x44, 0x7f, 0x69, 0xc4, 0xc2, 0x76, 0x8c, 0xba, 0x72, 0x68, 0x54, 0xf9, 0x50, 0x26, 0x30, 0xf2, 0x59, 0x1d, 0xc1, 0x54, 0x65, 0x45, 0x05, 0xd7, 0x51, 0xa0, 0x63, 0xb9, 0xf2, 0xb8, 0x9e, 0x1e, 0x0b, 0xec, 0x70, 0x24, 0xf9, 0xe9, 0x19, 0x60, 0xaf, 0x0d, 0xba, 0x17, 0x40, 0x63, 0xd8, 0xdb, 0xc9, 0x0c, 0xa1, 0x19, 0xa2, 0x19, 0xa9, 0x8f, 0xd9, 0xb8, 0x3e, 0x94, 0xca, 0xb7, 0xd1, 0x03, 0x1d, 0x90, 0xb7, 0x5c, 0x1b, 0x65, 0x35, 0x02, 0x66, 0x5c, 0xe1, 0x58, 0x5f, 0x39, 0x79, 0x13, 0x93, 0x3d, 0x90, 0x0b, 0x6e, 0xd2, 0xb9, 0x60, 0x25, 0x5d, 0x3f, 0x11, 0xd8, 0x51, 0x79, 0xf5, 0xb4, 0xfa, 0x85, 0xd6, 0x8c, 0x4b, 0xdd, 0xbe, 0x35, 0x4c, 0xc0, 0xf7, 0x87, 0x5d, 0x7a, 0xce, 0x6f, 0xa2, 0x02, 0x09, 0x35, 0x18, 0x91, 0x4a, 0x33, 0x99, 0x8e, 0xb8, 0x10, 0x1c, 0x3a, 0x93, 0xc5, 0x57, 0x9b, 0xa6, 0xf7, 0xd2, 0xd3, 0x53, 0xc4, 0xfe, 0xa7, 0x84, 0x3a, 0xd1, 0x93, 0x02, 0xa8, 0xc8, 0xf5, 0x12, 0x56, 0x41, 0x7a, 0x09, 0x5a, 0xe1, 0x22, 0x8f, 0x67, 0xe2, 0x79, 0x3b, 0xb0, 0x8b, 0x30, 0x9a, 0xcb, 0xc3, 0xd2, 0x4d, 0xb8, 0xad, 0xfb, 0x02, 0x6e, 0x93, 0x6b, 0xc7, 0xae, 0x2f, 0x0c, 0xec, 0xac, 0xfc, 0xdb, 0x57, 0xe2, 0xb6, 0x73, 0x02, 0x6e, 0x93, 0x15, 0xdc, 0x12, 0x1d, 0x84, 0x1b, 0xc7, 0x41, 0xd1, 0x64, 0xc9, 0x86, 0x13, 0x81, 0x87, 0x0d, 0x63, 0xd4, 0x61, 0x6f, 0x12, 0x3b, 0x41, 0x67, 0x07, 0x7b, 0x0e, 0x23, 0xc7, 0xb8, 0x64, 0x2c, 0x61, 0x91, 0xbc, 0xa6, 0x62, 0xa6, 0x0f, 0x39, 0xc1, 0xc3, 0xc5, 0xcc, 0x50, 0x75, 0x51, 0xc3, 0x62, 0x32, 0x49, 0xf4, 0x92, 0x07, 0x2b, 0xaf, 0x0d, 0x32, 0xbf, 0x29, 0x6c, 0x78, 0x79, 0x37, 0xd3, 0xac, 0x36, 0xa3, 0x8c, 0x3d, 0x18, 0xdf, 0x07, 0x89, 0x2e, 0xe9, 0x8d, 0x4c, 0x96, 0x43, 0x31, 0xc9, 0x12, 0x91, 0xf7, 0xf6, 0x87, 0x3b, 0x09, 0x52, 0xe0, 0x49, 0x27, 0xa7, 0x7c, 0x68, 0x5f, 0x44, 0x23, 0x75, 0xdb, 0xfa, 0x89, 0xfe, 0x37, 0xb5, 0x27, 0x77, 0xc9, 0xd8, 0xa7, 0xa1, 0xc0, 0x93, 0x6a, 0x5b, 0x8a, 0x91, 0x1a, 0x2f, 0x71, 0x43, 0xd6, 0xf3, 0xd6, 0xf8, 0xba, 0x59, 0x2e, 0xb7, 0x8d, 0x0a, 0x3c, 0xff, 0xc3, 0x95, 0xab, 0xb4, 0xe4, 0x06, 0xf7, 0xa2, 0x2d, 0x19, 0xbb, 0x71, 0x11, 0xb2, 0xae, 0xf7, 0xe5, 0x78, 0x78, 0x66, 0xab, 0x36, 0x62, 0x90, 0x60, 0x25, 0xb8, 0xf8, 0xce, 0x18, 0xd4, 0xf6, 0x1e, 0x64, 0xb9, 0x01, 0xf6, 0x45, 0x3b, 0x34, 0x27, 0xb3, 0xda, 0x1f, 0x86, 0x74, 0x7f, 0x10, 0x15, 0x48, 0x4f, 0xe2, 0xe3, 0xfb, 0xfd, 0x7b, 0xcb, 0xed, 0x5d, 0x98, 0xb3, 0x30, 0xa6, 0x8b, 0xe7, 0x62, 0xfa, 0x69, 0xb4, 0xdd, 0xa2, 0xeb, 0x97, 0x65, 0x79, 0x05, 0xad, 0x22, 0xda, 0xae, 0xd3, 0x8a, 0x62, 0xe1, 0xe1, 0xa5, 0x63, 0x89, 0x37, 0xc5, 0xc5, 0x76, 0x53, 0x88, 0xd6, 0x61, 0x0a, 0xc0, 0xef, 0x6e, 0xb4, 0x6e, 0x0e, 0xb8, 0x7d, 0x57, 0x6a, 0x67, 0xdc, 0xae, 0xfc, 0x0a, 0x96, 0x25, 0x35, 0x89, 0x59, 0x67, 0x69, 0x5f, 0xdd, 0x8a, 0x92, 0x2c, 0x8d, 0x9b, 0xdd, 0xfb, 0x2d, 0xb7, 0xbc, 0x2a, 0x72, 0x6f, 0x0d, 0x3b, 0x12, 0xff, 0xf0, 0x71, 0x7f, 0x55, 0xc8, 0xac, 0x94, 0x22, 0x2f, 0x3d, 0xc7, 0xd3, 0x2e, 0x31, 0x61, 0x85, 0x92, 0x46, 0x1e, 0x6b, 0x85, 0x97, 0x85, 0x3a, 0x3e, 0x63, 0xcf, 0x95, 0xdf, 0x86, 0xfe, 0xe3, 0x0e, 0x31, 0xa1, 0xc2, 0x34, 0x57, 0x8e, 0x92, 0x2e, 0x12, 0x9e, 0x81, 0x5f, 0x4d, 0xa8, 0xc0, 0x5f, 0x15, 0xd6, 0xf9, 0x5f, 0x90, 0xb7, 0x86, 0x72, 0xf1, 0xbb, 0x2b, 0x6c, 0xdc, 0x20, 0x48, 0x86, 0x0d, 0x1a, 0x49, 0xe7, 0xa9, 0x82, 0xfc, 0xcd, 0xea, 0x65, 0x15, 0x73, 0xe5, 0x55, 0xd6, 0xb9, 0xf2, 0x8a, 0x77, 0xb7, 0x88, 0x35, 0xc7, 0x5f, 0x2d, 0xcd, 0xf2, 0xbd, 0xfa, 0xd1, 0x96, 0xe3, 0xaf, 0x5a, 0x17, 0x5b, 0x07, 0x8d, 0x55, 0x2c, 0x2b, 0xcc, 0xe4, 0x85, 0xa4, 0x71, 0x10, 0x44, 0xbe, 0xca, 0xe8, 0xb6, 0x0d, 0x7a, 0xb7, 0x63, 0xe6, 0x9d, 0x2b, 0xff, 0x89, 0x74, 0x8e, 0xc5, 0x17, 0x92, 0xda, 0x1e, 0xe7, 0x9e, 0x2e, 0xf9, 0x9d, 0xc0, 0xc8, 0x27, 0xaf, 0xf1, 0x19, 0xf7, 0x79, 0xcc, 0xb8, 0xb4, 0xbe, 0xab, 0xc7, 0xdc, 0x33, 0xf2, 0xe9, 0x61, 0xe0, 0xfb, 0x3c, 0xe6, 0xdc, 0x54, 0xca, 0x75, 0x0d, 0x52, 0xb6, 0x87, 0x0d, 0x5c, 0x2b, 0x99, 0x2b, 0xf7, 0x4a, 0xdd, 0x8a, 0xee, 0x1d, 0x33, 0x9e, 0x1c, 0x86, 0x7e, 0x54, 0x15, 0x72, 0xd6, 0x7e, 0x28, 0x2c, 0x42, 0x2f, 0xed, 0x48, 0xe9, 0x35, 0x51, 0x07, 0xe3, 0xfe, 0xfe, 0x56, 0x4a, 0x6d, 0x19, 0x3a, 0x8e, 0x7c, 0x85, 0x5d, 0xf2, 0x56, 0x68, 0x2f, 0x45, 0xc8, 0x5b, 0xff, 0xa5, 0x79, 0xcb, 0x26, 0xe4, 0xdd, 0x25, 0x98, 0xb8, 0xfe, 0x38, 0x57, 0xfe, 0x69, 0x5a, 0xc3, 0xf1, 0x0c, 0x6b, 0x0a, 0x54, 0x8d, 0xf8, 0xa3, 0xe5, 0xe3, 0xf2, 0x7c, 0x92, 0xd1, 0xca, 0x4e, 0x49, 0xb1, 0xd4, 0x46, 0xbd, 0x3d, 0x97, 0x19, 0xed, 0x41, 0xff, 0x1c, 0x61, 0x51, 0xc8, 0x82, 0xdf, 0x7a, 0x55, 0x97, 0xbf, 0xd7, 0xb7, 0x56, 0xa8, 0x4f, 0x6a, 0xf3, 0x7c, 0xef, 0xe0, 0x7c, 0x8c, 0x99, 0xe6, 0x89, 0x9a, 0x2c, 0x68, 0x64, 0x0a, 0x19, 0xc9, 0x6f, 0xa6, 0x72, 0xd8, 0x46, 0xd1, 0x3d, 0xdb, 0x03, 0x49, 0xd8, 0xcf, 0xbd, 0x2a, 0x90, 0x84, 0x9f, 0x6e, 0x57, 0xe6, 0x9d, 0x8c, 0x79, 0x86, 0x56, 0x96, 0x20, 0xcf, 0xae, 0xf6, 0xd2, 0x0e, 0x4d, 0x1e, 0x53, 0xf3, 0x7e, 0x76, 0x84, 0x46, 0x2b, 0x78, 0xc1, 0x0a, 0x88, 0x1a, 0x82, 0x98, 0xd6, 0xc6, 0x29, 0x1f, 0xca, 0x94, 0xf2, 0x91, 0xcb, 0x24, 0xf2, 0xaf, 0x99, 0x66, 0x77, 0xc9, 0xe7, 0xd9, 0x73, 0x7c, 0x1f, 0x83, 0xa5, 0xee, 0xa3, 0x3a, 0xad, 0xfc, 0x1a, 0xb5, 0x8d, 0xf6, 0xf2, 0xf1, 0x1d, 0x7c, 0xe2, 0xc4, 0x7d, 0x42, 0x8a, 0x95, 0x15, 0xd2, 0x47, 0x38, 0xae, 0xd2, 0x42, 0xdb, 0xe3, 0xa4, 0x97, 0xdf, 0x9c, 0x87, 0xd6, 0x98, 0x42, 0x96, 0x0c, 0x6d, 0x1e, 0x1a, 0xd5, 0xdf, 0xb8, 0xfe, 0x0f, 0x5b, 0x4b, 0x63, 0x7b, 0x9c, 0x2c, 0x2a, 0xda, 0xfb, 0x97, 0xb2, 0x05, 0xa6, 0x41, 0xd6, 0xfd, 0xc8, 0xe6, 0xe6, 0xeb, 0x21, 0xa5, 0x1c, 0x17, 0x6d, 0xe1, 0x12, 0xee, 0xff, 0x2b, 0x80, 0x6d, 0xaa, 0xe5, 0xb4, 0xac, 0x26, 0x1f, 0x54, 0x4a, 0x9b, 0xf5, 0xd2, 0xb7, 0x88, 0x06, 0x5f, 0x21, 0x0f, 0x44, 0x83, 0xa2, 0x7f, 0xa2, 0x47, 0x9c, 0x34, 0xfe, 0x1c, 0xe8, 0x11, 0x07, 0xf5, 0x08, 0xc6, 0x9f, 0xad, 0xc9, 0x95, 0xa5, 0x8e, 0x40, 0x27, 0x97, 0x20, 0x23, 0x9f, 0x37, 0xa5, 0xc6, 0x98, 0xb4, 0xf8, 0x23, 0xf9, 0x4d, 0x1a, 0x97, 0x33, 0xcb, 0x95, 0xfd, 0x00, 0xc2, 0xa2, 0x62, 0x83, 0xee, 0x87, 0x78, 0xd6, 0x9b, 0xe7, 0xca, 0x6e, 0x93, 0xa6, 0x91, 0x11, 0x57, 0xaf, 0x62, 0xec, 0xc0, 0xcb, 0x2f, 0xc8, 0xbb, 0xc3, 0x86, 0x88, 0xae, 0x90, 0xda, 0xcd, 0x04, 0xbb, 0xd2, 0x3a, 0xce, 0xe5, 0xcf, 0xab, 0x7c, 0xfd, 0x02, 0xad, 0xe2, 0x28, 0x29, 0x9e, 0x05, 0xfa, 0x37, 0x39, 0x87, 0x0f, 0x73, 0x9d, 0x92, 0x74, 0xab, 0x91, 0xab, 0xe7, 0xc8, 0x47, 0x47, 0x3a, 0x65, 0xba, 0x14, 0xb8, 0x6f, 0x66, 0xc3, 0x90, 0x51, 0x03, 0x2d, 0x22, 0x4f, 0xf4, 0x5a, 0x97, 0xa8, 0x7b, 0x83, 0xc8, 0x4e, 0xf6, 0x4a, 0x2b, 0x5c, 0x3a, 0xd5, 0x9b, 0xa1, 0xcf, 0xfc, 0xc6, 0x79, 0xa1, 0x3c, 0x5d, 0x8f, 0x6b, 0xd2, 0x57, 0xe6, 0x9a, 0x01, 0xac, 0x9c, 0xd4, 0xe6, 0xcf, 0xf2, 0xb8, 0x7c, 0x60, 0x72, 0x91, 0xd4, 0x11, 0xd3, 0x6c, 0x14, 0x24, 0x2d, 0x7e, 0x99, 0xe2, 0xa9, 0x21, 0xba, 0x13, 0x06, 0xca, 0xd8, 0xa5, 0xd5, 0x47, 0x2f, 0x46, 0x73, 0x61, 0x9d, 0x42, 0x7f, 0x71, 0x80, 0xf7, 0x42, 0x15, 0x7a, 0xa1, 0x4b, 0x7e, 0x73, 0x62, 0x1f, 0xa4, 0x7a, 0x38, 0x14, 0x29, 0x87, 0x26, 0x07, 0x4d, 0x03, 0x79, 0xdc, 0x81, 0x91, 0x8f, 0xdf, 0xe3, 0xde, 0x01, 0xcd, 0x93, 0xaf, 0xa3, 0xa7, 0x69, 0xbc, 0x68, 0xd5, 0xf1, 0xe2, 0x24, 0xef, 0x0a, 0x8d, 0x17, 0x7b, 0x50, 0xb5, 0x5d, 0xb4, 0x51, 0xcd, 0xbe, 0x78, 0x28, 0x57, 0xe1, 0xcc, 0x1b, 0x97, 0xb9, 0x8f, 0x78, 0xd4, 0xc5, 0x32, 0x7a, 0x8c, 0x7f, 0xf9, 0xec, 0x99, 0x64, 0x9f, 0xb1, 0x67, 0x30, 0x5f, 0xf1, 0xde, 0xc7, 0x08, 0xdd, 0x4d, 0x16, 0x5d, 0xd8, 0x10, 0x35, 0xdc, 0x59, 0x49, 0xbd, 0xc2, 0x06, 0x8c, 0x73, 0x59, 0x96, 0xec, 0x0e, 0xb5, 0x67, 0xf4, 0x4e, 0xc0, 0xc5, 0x6a, 0xd1, 0xcb, 0x98, 0x53, 0xbb, 0xe4, 0x7a, 0xe0, 0xe6, 0x57, 0x52, 0x53, 0x3d, 0xb4, 0x47, 0xed, 0x21, 0x5a, 0x67, 0x72, 0xab, 0x5a, 0x7f, 0x5e, 0xb2, 0x24, 0xb5, 0x19, 0xe9, 0x0f, 0x37, 0x0c, 0xb9, 0xe6, 0xca, 0x7e, 0x8a, 0xa9, 0x98, 0x72, 0x39, 0x2d, 0x99, 0x55, 0xfc, 0x76, 0xaa, 0xd4, 0xed, 0x50, 0x24, 0x44, 0x81, 0x56, 0x2e, 0xa0, 0x16, 0x27, 0x2d, 0x41, 0xd7, 0x5d, 0x90, 0xef, 0xae, 0xa4, 0x25, 0x7c, 0xe3, 0x01, 0xc5, 0x12, 0x0e, 0x3c, 0xf4, 0xe5, 0x76, 0x75, 0xfd, 0xa5, 0xc4, 0x69, 0xe8, 0xba, 0x25, 0x76, 0x97, 0xe0, 0xb6, 0xf5, 0x08, 0x0d, 0xf6, 0x1e, 0xa1, 0x29, 0x62, 0xb2, 0xc7, 0xfd, 0x2f, 0x09, 0xde, 0xb0, 0xdb, 0x55, 0xc5, 0x2c, 0x24, 0x2b, 0x60, 0xeb, 0x16, 0x70, 0x5f, 0x56, 0x9e, 0xe7, 0xe7, 0x31, 0xf1, 0xe4, 0x90, 0xe2, 0xf3, 0x28, 0xdf, 0xee, 0x72, 0x09, 0xcb, 0x95, 0xf7, 0xfb, 0x2f, 0x42, 0xbe, 0x91, 0xee, 0x54, 0x21, 0x36, 0x04, 0xb6, 0xd1, 0x9c, 0x07, 0x9d, 0x5a, 0x04, 0x14, 0x5f, 0x78, 0x26, 0x46, 0x5e, 0x9e, 0xa2, 0x99, 0x49, 0x3b, 0x55, 0x4d, 0x37, 0x97, 0xa0, 0x4a, 0x86, 0x48, 0x16, 0x2c, 0x07, 0x92, 0x74, 0xd9, 0xb0, 0x74, 0x0a, 0xea, 0x2f, 0x09, 0x0e, 0xae, 0x2d, 0x96, 0x60, 0x66, 0x17, 0xa1, 0xda, 0xda, 0xa0, 0x29, 0x3a, 0xa0, 0x37, 0x39, 0x31, 0xcb, 0x97, 0x38, 0x49, 0x6b, 0x0c, 0x82, 0x62, 0xf1, 0xb0, 0x29, 0xb9, 0x83, 0xf3, 0x8e, 0x4e, 0x4e, 0x8b, 0x15, 0xc9, 0xb5, 0xa7, 0xb2, 0xf7, 0x38, 0x27, 0x8a, 0xd0, 0xfa, 0xe6, 0x03, 0xf7, 0x12, 0xd8, 0x53, 0x4e, 0x68, 0x81, 0x0e, 0x97, 0x97, 0xd9, 0x60, 0x57, 0x89, 0xa8, 0x05, 0x9a, 0xa0, 0xac, 0xae, 0xc7, 0x96, 0xf3, 0xfd, 0xce, 0x90, 0xa1, 0x80, 0x19, 0xca, 0xbf, 0x09, 0xa6, 0x01, 0xd8, 0x69, 0xc8, 0xae, 0x01, 0x76, 0x5a, 0x2a, 0xc7, 0x77, 0x13, 0x5e, 0xf5, 0xbd, 0x5f, 0x41, 0x16, 0xd2, 0x7c, 0x60, 0x45, 0xf6, 0x41, 0x05, 0x78, 0x0b, 0x23, 0x5a, 0x70, 0xdc, 0x2c, 0x95, 0x1c, 0x24, 0xb9, 0x0c, 0xaa, 0xe4, 0x62, 0x6c, 0xaf, 0xe3, 0xf1, 0xbb, 0xfc, 0x4c, 0xeb, 0x79, 0x1e, 0xba, 0xc0, 0xf3, 0x4c, 0x7c, 0xd8, 0xf9, 0xf6, 0x90, 0x2b, 0x7b, 0xa3, 0xf3, 0xf4, 0x90, 0x4b, 0xbb, 0xe4, 0x12, 0x70, 0xbc, 0x85, 0x76, 0x03, 0xb8, 0x0c, 0xd0, 0x0b, 0xa1, 0xef, 0xdd, 0xa5, 0xf8, 0x82, 0x2c, 0xc0, 0x29, 0xdb, 0xa5, 0x4d, 0x7e, 0x4b, 0xa7, 0x8b, 0x4e, 0xd8, 0xbc, 0x59, 0xd0, 0xe5, 0xf3, 0xdb, 0x74, 0x79, 0x9c, 0x8e, 0x51, 0x2d, 0x62, 0x56, 0x75, 0xa7, 0x0c, 0xe9, 0xe1, 0xe9, 0x60, 0x54, 0x7a, 0x8a, 0x5b, 0x08, 0xb9, 0x48, 0xb1, 0x29, 0x29, 0x77, 0x95, 0xf3, 0x56, 0xa6, 0x3c, 0xa9, 0x82, 0x83, 0x78, 0xf2, 0xc6, 0x19, 0xea, 0x9f, 0x1f, 0xbf, 0x41, 0x7b, 0x2c, 0x7b, 0x2b, 0x54, 0x1f, 0x4a, 0x72, 0xe7, 0x28, 0xa8, 0x46, 0x7d, 0x9b, 0x51, 0x82, 0x76, 0xb9, 0x0d, 0x73, 0x1d, 0x77, 0x65, 0x8a, 0xff, 0x8c, 0x2e, 0xbd, 0x08, 0xdb, 0x90, 0x56, 0x13, 0x69, 0x37, 0xa6, 0x48, 0x6b, 0x2a, 0xa9, 0xfd, 0xa7, 0xe0, 0x5f, 0x8b, 0xe2, 0xc1, 0x6e, 0x19, 0xa2, 0xf9, 0x80, 0x3c, 0x94, 0xe8, 0x17, 0xda, 0x65, 0x4d, 0x30, 0x8e, 0x27, 0x35, 0x74, 0xeb, 0x1a, 0x46, 0x9e, 0x0b, 0xf3, 0x17, 0x52, 0x2c, 0x5f, 0x48, 0x29, 0x08, 0x1c, 0x4f, 0xcf, 0x1f, 0x5f, 0xf0, 0xd0, 0x35, 0x89, 0x4b, 0xac, 0xee, 0x88, 0x98, 0xb1, 0x87, 0x72, 0xad, 0x5a, 0xeb, 0x1c, 0x8c, 0xe9, 0x76, 0x26, 0x06, 0xb6, 0xd1, 0xfc, 0xd1, 0x32, 0x74, 0xf3, 0x0c, 0x32, 0x7e, 0x42, 0x9d, 0x41, 0xc0, 0xf1, 0x7c, 0x6d, 0x3f, 0xb9, 0x22, 0x60, 0xa1, 0x19, 0x60, 0xe2, 0x8c, 0x92, 0x82, 0x39, 0x99, 0x7e, 0x03, 0xdb, 0xd4, 0xb9, 0xc5, 0xcc, 0x6d, 0xc7, 0x2f, 0x94, 0x55, 0x66, 0x8f, 0x9b, 0x5a, 0x61, 0x0b, 0x1c, 0x07, 0x77, 0x31, 0xe2, 0x2e, 0xb1, 0x47, 0x70, 0x60, 0x14, 0x3a, 0x9d, 0x0d, 0x45, 0xf8, 0x6e, 0x9c, 0xc6, 0xca, 0x43, 0x33, 0xc9, 0x66, 0x73, 0xdd, 0x02, 0xe8, 0xda, 0x14, 0x74, 0x2d, 0xb4, 0x20, 0x4b, 0xf0, 0x71, 0xcc, 0x0e, 0xb4, 0x77, 0x65, 0x24, 0x31, 0xae, 0xa4, 0xc3, 0x16, 0xbd, 0x1c, 0x11, 0xe6, 0x2a, 0xf3, 0x86, 0x9e, 0x7c, 0x1e, 0x61, 0xbd, 0x75, 0x49, 0xe5, 0x25, 0x66, 0x93, 0x02, 0xe8, 0xbf, 0x6a, 0xb5, 0x5f, 0x30, 0xb7, 0x28, 0x79, 0xd8, 0x39, 0x0e, 0xdb, 0xa0, 0x60, 0xee, 0x50, 0x60, 0x33, 0xf6, 0x06, 0xc7, 0x1d, 0xbd, 0x45, 0xda, 0x1e, 0xf8, 0xce, 0x82, 0x1c, 0x9e, 0xc0, 0xb6, 0xe0, 0xe3, 0xca, 0x3e, 0x1c, 0x36, 0x68, 0x1a, 0xb5, 0xd7, 0x9a, 0x6e, 0x0d, 0xeb, 0xb8, 0x57, 0xe5, 0x8a, 0xc7, 0xe4, 0x27, 0x9b, 0xe8, 0x71, 0x82, 0xe5, 0x83, 0x56, 0xce, 0xe1, 0xe9, 0x09, 0x1e, 0x1f, 0x8f, 0x01, 0x9e, 0x46, 0xd0, 0xaa, 0x32, 0xa1, 0x71, 0x59, 0x30, 0x2d, 0x5c, 0xee, 0x7f, 0x9e, 0xe9, 0xc3, 0x26, 0x8e, 0x87, 0x91, 0x7c, 0x15, 0x98, 0xd7, 0x72, 0x24, 0x33, 0x52, 0xb5, 0x6a, 0xcb, 0x93, 0xa9, 0x0a, 0xce, 0x3a, 0xce, 0x77, 0x7b, 0x21, 0xbd, 0x6d, 0xb6, 0x3a, 0xc9, 0x42, 0x33, 0xea, 0x3c, 0x03, 0x69, 0xba, 0x05, 0x5b, 0x69, 0x8f, 0x9f, 0x6b, 0xcc, 0x4e, 0xef, 0xfb, 0x4d, 0xd3, 0x20, 0x23, 0x99, 0x3a, 0x2f, 0x70, 0x6e, 0x16, 0xb8, 0xb7, 0x2b, 0xe9, 0x47, 0xb4, 0x01, 0xe6, 0xaf, 0xff, 0x42, 0xda, 0x10, 0x79, 0xd4, 0xad, 0x1d, 0x90, 0x34, 0xe0, 0x40, 0x58, 0xac, 0x19, 0xbc, 0x8c, 0x9e, 0x71, 0xee, 0x23, 0xcb, 0x46, 0x43, 0x5f, 0x26, 0xa4, 0x97, 0xa4, 0x38, 0x91, 0xfb, 0xd8, 0x26, 0xc4, 0xe6, 0x7f, 0x81, 0x4b, 0xcb, 0x88, 0x4b, 0x4b, 0x48, 0xae, 0x71, 0x5f, 0x35, 0x79, 0x16, 0xf8, 0xac, 0xa4, 0xf0, 0x0d, 0x51, 0xab, 0x82, 0xf7, 0x0c, 0x79, 0xe1, 0xb4, 0x11, 0xbd, 0x34, 0xc3, 0xbf, 0x29, 0x3c, 0x33, 0x2a, 0xec, 0xdb, 0x14, 0x76, 0xc3, 0x6a, 0xdf, 0x14, 0xf2, 0xfb, 0xfb, 0xbb, 0xb4, 0x7b, 0xfb, 0x5b, 0xeb, 0x22, 0x93, 0x54, 0xbd, 0xcd, 0xe7, 0xef, 0xef, 0x34, 0x8a, 0x1a, 0x6f, 0x7c, 0xef, 0x30, 0x33, 0xaf, 0x36, 0x4b, 0xb9, 0xfe, 0xfe, 0x70, 0x2e, 0xec, 0x50, 0xc4, 0xf6, 0xf6, 0xb5, 0x6a, 0xa3, 0x93, 0x24, 0x0b, 0xf4, 0x56, 0x33, 0x20, 0xf5, 0x77, 0xbf, 0x6e, 0xd5, 0x78, 0xfb, 0xf6, 0xf6, 0xb5, 0x1d, 0x3e, 0x19, 0x87, 0xac, 0xd0, 0xd3, 0xfc, 0x05, 0xb9, 0xa6, 0x2b, 0xf4, 0xc0, 0x06, 0x87, 0x35, 0x61, 0x34, 0x2a, 0x2d, 0x73, 0xb5, 0x33, 0x0b, 0x38, 0x8c, 0xaf, 0xfd, 0x7c, 0xd5, 0x7c, 0xf1, 0x5f, 0xfb, 0x61, 0xf5, 0xba, 0xaf, 0xf6, 0xc3, 0x72, 0xdb, 0xa0, 0x21, 0x35, 0x5f, 0x9a, 0x68, 0xdf, 0x55, 0xf5, 0x98, 0xbc, 0x2b, 0xc3, 0x1b, 0xab, 0xe7, 0x7b, 0x31, 0xbe, 0xe8, 0x9d, 0xb5, 0x29, 0xe3, 0x26, 0x35, 0xd6, 0xf5, 0x5f, 0x5c, 0x37, 0xca, 0x80, 0xc1, 0xb5, 0x1d, 0xb9, 0x49, 0x6c, 0xa4, 0x5a, 0x26, 0xae, 0x61, 0x90, 0xbc, 0xca, 0x18, 0xed, 0xca, 0xde, 0x56, 0xb3, 0x3a, 0xda, 0x67, 0x88, 0x8d, 0xca, 0x97, 0x28, 0xcb, 0x33, 0x91, 0xef, 0x83, 0xc6, 0x96, 0x6c, 0x4c, 0x7a, 0xe6, 0x69, 0xd4, 0xd3, 0x6a, 0x8b, 0xff, 0x17, 0xe8, 0x27, 0xda, 0x1d, 0x83, 0xd6, 0x70, 0xaf, 0x9f, 0xee, 0x5d, 0x9f, 0xcf, 0xed, 0x71, 0xf3, 0xf5, 0xdc, 0x49, 0xbe, 0x4a, 0x4f, 0x65, 0x7f, 0x9c, 0xa7, 0xeb, 0xdf, 0x1d, 0x8c, 0xf7, 0xc5, 0x1d, 0x2c, 0x87, 0x76, 0xd2, 0x10, 0x17, 0x43, 0x87, 0x78, 0xf6, 0x26, 0xff, 0x6b, 0xd2, 0x47, 0x07, 0x58, 0xbc, 0xbc, 0xee, 0xdd, 0x5a, 0x82, 0xc0, 0xcb, 0x4f, 0x22, 0xa8, 0xf1, 0x3e, 0x9e, 0xae, 0x7f, 0x77, 0x4b, 0x7f, 0xbc, 0x9f, 0x60, 0x11, 0x25, 0xdb, 0x6f, 0xae, 0x3b, 0xc6, 0xcc, 0x94, 0xdf, 0xe3, 0xf1, 0x0c, 0xa4, 0xeb, 0xee, 0xa7, 0xba, 0xf7, 0xf6, 0x25, 0x6b, 0x24, 0x5f, 0x44, 0x86, 0xd7, 0xb9, 0x29, 0x1d, 0xe3, 0xfe, 0xbb, 0xfe, 0xb4, 0x9f, 0xf9, 0xeb, 0xb6, 0xeb, 0x0b, 0x25, 0x72, 0x33, 0x4a, 0x4c, 0xc9, 0x28, 0x61, 0x52, 0x4b, 0x4c, 0x4d, 0x7b, 0x19, 0x8b, 0x31, 0xa3, 0x3b, 0x82, 0x45, 0xe4, 0x4d, 0xec, 0xc2, 0x68, 0xe9, 0xe0, 0xa7, 0x79, 0xbe, 0x36, 0x9c, 0xbd, 0x5b, 0xa0, 0x53, 0x07, 0x8b, 0xba, 0x98, 0x69, 0xfe, 0x5c, 0xbd, 0x76, 0x03, 0xcb, 0x77, 0x30, 0x61, 0x23, 0xb3, 0x10, 0xce, 0x75, 0x3e, 0xaf, 0xc7, 0x9b, 0x81, 0xf3, 0xc0, 0x44, 0x9c, 0x8f, 0x6d, 0xf2, 0x7b, 0xc2, 0xe6, 0x52, 0x8d, 0xef, 0xd5, 0x5e, 0xe1, 0xcf, 0x2f, 0x36, 0x6e, 0x7e, 0x23, 0xbe, 0x61, 0xf2, 0xae, 0xbe, 0xf7, 0x5f, 0x94, 0x34, 0xbd, 0xec, 0xcc, 0x16, 0xbb, 0x2e, 0x3a, 0xf9, 0xdc, 0x1e, 0xdf, 0xe1, 0xf3, 0xbb, 0x4f, 0xc5, 0x35, 0xd0, 0xd2, 0x27, 0xc9, 0x45, 0xdc, 0xf7, 0xf8, 0x93, 0xcd, 0x62, 0xd6, 0x9f, 0x77, 0x93, 0x77, 0xf9, 0x07, 0xf2, 0x4f, 0xb8, 0x67, 0x33, 0x96, 0xf6, 0x6c, 0x5e, 0x80, 0x4c, 0x7c, 0x05, 0xf3, 0x74, 0xca, 0xab, 0xb9, 0x41, 0x73, 0x57, 0x95, 0xd0, 0x1e, 0x23, 0xaf, 0xe6, 0xde, 0x03, 0x8f, 0x76, 0x6a, 0x8a, 0xb4, 0xff, 0x9d, 0xb6, 0x6d, 0xa3, 0x51, 0x4c, 0xa5, 0x92, 0xbe, 0xcd, 0x6c, 0x71, 0xb1, 0x2f, 0xe2, 0x60, 0x67, 0xf6, 0xe0, 0x5d, 0x17, 0x78, 0xf2, 0xe4, 0xa3, 0xd6, 0xea, 0xdf, 0x5f, 0x60, 0xe6, 0xc2, 0xda, 0xff, 0x1e, 0xcd, 0x88, 0x8f, 0xf7, 0x6e, 0x59, 0x5d, 0xf0, 0xd4, 0xa3, 0x11, 0xd3, 0xa9, 0x78, 0xf4, 0xf2, 0x91, 0x3e, 0xa5, 0x6d, 0xbd, 0x8c, 0x7b, 0x40, 0xdd, 0x92, 0x26, 0xc6, 0xf8, 0x3a, 0xed, 0x78, 0x92, 0x2f, 0xad, 0x18, 0xff, 0x11, 0xc7, 0xb1, 0xdd, 0xcc, 0x14, 0xcb, 0xde, 0x4f, 0x3b, 0xd4, 0xf2, 0xf9, 0x98, 0xa4, 0x91, 0xc1, 0x7d, 0xc7, 0x0f, 0xf2, 0x7d, 0xa0, 0x52, 0xe6, 0xec, 0x49, 0x1e, 0xc3, 0x91, 0xcf, 0x4f, 0x73, 0x1f, 0xa0, 0x48, 0x1c, 0x07, 0x5d, 0xfc, 0x2c, 0xf7, 0x61, 0x43, 0x96, 0xc3, 0x76, 0x35, 0xf1, 0x3d, 0xdb, 0x5d, 0x48, 0x53, 0x3c, 0x93, 0x4f, 0xf1, 0x39, 0xc5, 0x60, 0x5c, 0xc0, 0x44, 0xfd, 0x3b, 0x21, 0x5d, 0x63, 0x1c, 0xf4, 0xbb, 0xb2, 0x17, 0xf2, 0xae, 0xb1, 0x1f, 0xf6, 0x1b, 0xf3, 0xf7, 0xf7, 0xe4, 0x67, 0xf8, 0xd1, 0x51, 0x0e, 0xd0, 0x1f, 0x26, 0xe8, 0xe4, 0x4b, 0xb7, 0xcd, 0x95, 0x4f, 0xdb, 0xba, 0xe4, 0x33, 0xa4, 0x01, 0xdf, 0x3f, 0x44, 0x72, 0x26, 0xe5, 0x93, 0xef, 0xc1, 0x7c, 0xe3, 0x50, 0x35, 0x25, 0x9b, 0xaa, 0x1b, 0xcd, 0x07, 0x3d, 0x8a, 0x80, 0xa3, 0xe2, 0x59, 0x9a, 0x3d, 0xa1, 0x0d, 0x15, 0xdc, 0x7f, 0x09, 0x08, 0xca, 0x8e, 0xb9, 0xef, 0x1c, 0x51, 0x76, 0xb8, 0x76, 0xdb, 0xd4, 0x32, 0x69, 0xaf, 0x02, 0x95, 0x74, 0x93, 0xf7, 0x6b, 0xec, 0x8a, 0xba, 0xfa, 0xa3, 0xf7, 0xdc, 0xad, 0x67, 0x24, 0xa1, 0x68, 0x0d, 0x08, 0xed, 0x1d, 0x87, 0xb4, 0x2f, 0xe7, 0xb6, 0x07, 0xcd, 0x88, 0x5d, 0xf2, 0xb8, 0xa2, 0x5b, 0x06, 0xac, 0xb4, 0x43, 0xab, 0xd3, 0xed, 0xd9, 0xa1, 0xae, 0x0c, 0xa7, 0xbd, 0xf8, 0x4c, 0xb0, 0x21, 0x8d, 0xef, 0x32, 0xcf, 0x5e, 0x4c, 0x7e, 0xfc, 0xd4, 0x0a, 0x78, 0xa7, 0xa2, 0x33, 0x27, 0xc7, 0x30, 0x38, 0x6a, 0x9c, 0xcf, 0xd1, 0x57, 0x93, 0x67, 0x18, 0xbe, 0xbd, 0x9c, 0x43, 0x98, 0x1f, 0x31, 0x1d, 0xdb, 0x71, 0xd3, 0xda, 0x80, 0xf8, 0xf7, 0x61, 0x86, 0x7d, 0x8d, 0xfd, 0x76, 0xcd, 0xa9, 0xfe, 0x53, 0x9b, 0x14, 0x4e, 0xe6, 0x2b, 0xd0, 0x9d, 0x22, 0xf0, 0x15, 0x23, 0x65, 0xcc, 0x3e, 0xe8, 0x6b, 0xe7, 0x58, 0xee, 0x52, 0x3c, 0x02, 0x5f, 0x02, 0x2b, 0xa9, 0xcf, 0xe7, 0x59, 0x51, 0x26, 0xbd, 0x8f, 0x0f, 0x3a, 0xfd, 0xb2, 0xfb, 0x37, 0x7d, 0xfb, 0x75, 0xf9, 0x65, 0x8f, 0xa7, 0xb1, 0xbf, 0xf5, 0xc5, 0x89, 0x5f, 0xbf, 0xd0, 0x76, 0xc7, 0xdf, 0xc7, 0x32, 0xa4, 0xf7, 0xec, 0xe0, 0xf6, 0x82, 0xe2, 0x11, 0x31, 0xca, 0xe7, 0x95, 0xd3, 0x8b, 0xa4, 0x51, 0xfe, 0x1d, 0x58, 0x4b, 0x23, 0x39, 0xb0, 0x13, 0xb5, 0x5f, 0x41, 0x45, 0x8d, 0x32, 0xd3, 0xc3, 0x46, 0xa4, 0x53, 0x4a, 0x16, 0x7b, 0x90, 0x7b, 0x4c, 0x36, 0x42, 0xb2, 0xd2, 0x2e, 0x7c, 0xdd, 0x17, 0x7c, 0x26, 0xb9, 0x19, 0x3e, 0x13, 0x26, 0xd0, 0x5a, 0x8c, 0xed, 0xe4, 0x4b, 0x4c, 0xac, 0xe5, 0x74, 0x53, 0xfd, 0x21, 0x8a, 0x65, 0xa6, 0x8f, 0x6a, 0xb8, 0x85, 0xd8, 0x4e, 0x6b, 0xf6, 0xa4, 0xb3, 0x99, 0x4c, 0x79, 0xac, 0x51, 0x30, 0xc2, 0x3e, 0x58, 0xe5, 0x4e, 0xcd, 0x92, 0x8c, 0xfb, 0x51, 0xc0, 0xff, 0xd7, 0x5f, 0xe4, 0x9e, 0x91, 0x1e, 0xe6, 0xd4, 0x33, 0x7a, 0x23, 0x8e, 0x22, 0x59, 0x6c, 0x74, 0x6b, 0x58, 0xd8, 0x6b, 0x74, 0x6b, 0x19, 0xe1, 0xec, 0x75, 0xcf, 0x73, 0xeb, 0xb5, 0x52, 0x39, 0x79, 0x29, 0xc3, 0x7a, 0x63, 0x3f, 0x63, 0x59, 0x1f, 0xf4, 0x88, 0x91, 0xac, 0x4c, 0x9f, 0x8b, 0x5e, 0xa7, 0xd8, 0x8b, 0xd7, 0x6b, 0x54, 0x9f, 0x4b, 0x6b, 0xb0, 0x1f, 0xd6, 0x4e, 0xeb, 0xbc, 0x5e, 0xa6, 0xd1, 0x6b, 0x69, 0x05, 0x9e, 0x8f, 0x05, 0xb7, 0x32, 0x16, 0xc2, 0x65, 0x36, 0xe4, 0x6e, 0xe8, 0x07, 0xbd, 0x14, 0x9f, 0x47, 0xa3, 0x4b, 0xc3, 0x3d, 0x5e, 0x9d, 0xc9, 0xf5, 0x88, 0x70, 0x7e, 0x8a, 0x96, 0x2d, 0xe4, 0x87, 0x4e, 0xf6, 0x86, 0xe2, 0xbf, 0x91, 0x68, 0xc7, 0x99, 0x85, 0xf4, 0x87, 0xe5, 0x8a, 0x5f, 0xb8, 0x9c, 0x56, 0xe2, 0xff, 0x0b, 0x1f, 0xce, 0x06, 0xdb, 0xe3, 0x13, 0x67, 0x6e, 0x87, 0x9b, 0xfb, 0x6f, 0xf2, 0x27, 0x6a, 0xdf, 0x9f, 0xf2, 0xd3, 0x70, 0x52, 0x0d, 0x46, 0x96, 0x65, 0x42, 0xee, 0x38, 0x49, 0x3b, 0xff, 0xb6, 0x50, 0xb1, 0x02, 0x2f, 0x63, 0x16, 0x2f, 0x62, 0x05, 0x8b, 0xc7, 0x3e, 0xad, 0xcb, 0xd8, 0x39, 0x20, 0x26, 0x77, 0x0e, 0x28, 0x1a, 0xe0, 0x72, 0x55, 0x63, 0xa7, 0x95, 0x34, 0xa2, 0x33, 0x97, 0x8c, 0x4f, 0x63, 0xbc, 0xe4, 0x41, 0x06, 0x79, 0xec, 0x8a, 0xa6, 0x5a, 0x4a, 0x70, 0x99, 0xf6, 0x4e, 0x3f, 0xa4, 0xcb, 0x1e, 0x2e, 0x5b, 0x4d, 0x29, 0x6d, 0x85, 0xe7, 0xa6, 0x5d, 0xe4, 0xae, 0xa9, 0x18, 0x17, 0x4f, 0x07, 0x46, 0xae, 0x5d, 0xe5, 0xa3, 0x7f, 0xb2, 0xa2, 0x99, 0x28, 0xfa, 0x7b, 0x49, 0xb9, 0xa3, 0x47, 0x28, 0x80, 0x25, 0x6d, 0xb3, 0x37, 0xd1, 0x2e, 0x4c, 0xda, 0x4d, 0x83, 0x79, 0xc1, 0xa5, 0xd8, 0x57, 0x9f, 0xaf, 0xb0, 0x31, 0xb1, 0xca, 0xea, 0x57, 0x77, 0x28, 0xb4, 0x28, 0x12, 0x26, 0xa4, 0xf3, 0x43, 0x92, 0x85, 0x03, 0x91, 0xac, 0xbd, 0xd0, 0x84, 0x43, 0x62, 0xe5, 0x25, 0xc1, 0x72, 0xfc, 0xb0, 0xd1, 0xc1, 0xbe, 0x95, 0x48, 0x84, 0x2a, 0xf0, 0x9c, 0x97, 0x90, 0x43, 0xf3, 0x25, 0xbd, 0xf1, 0x1f, 0xd8, 0xb7, 0x1c, 0x96, 0xb0, 0xae, 0xb1, 0xbf, 0xe3, 0xaa, 0x64, 0x23, 0x38, 0xa2, 0x26, 0x09, 0x89, 0xc6, 0x20, 0x41, 0x49, 0xf1, 0xb7, 0x2e, 0xb9, 0xa6, 0xbe, 0xdc, 0xa8, 0x68, 0xbe, 0x49, 0xfd, 0x93, 0x68, 0x6a, 0xe3, 0xfa, 0xa7, 0x55, 0xb3, 0x61, 0xf2, 0x7b, 0xbf, 0xa0, 0x36, 0x6e, 0x60, 0x0b, 0x1d, 0x7a, 0xed, 0x7b, 0xbb, 0xc5, 0x4a, 0x5a, 0xb9, 0xe0, 0xbc, 0x9c, 0x1a, 0x51, 0xdc, 0x5b, 0xa8, 0x51, 0x39, 0xbf, 0x8c, 0x78, 0x5a, 0xd3, 0x4f, 0xb3, 0x22, 0x71, 0xf6, 0xf1, 0xc3, 0xa4, 0x5f, 0xd1, 0x1e, 0xe6, 0xa4, 0x74, 0x84, 0x6c, 0x74, 0x10, 0x57, 0x7f, 0xc2, 0xe5, 0xbf, 0xa4, 0xf5, 0x14, 0x31, 0x07, 0xe6, 0x8f, 0xc7, 0x14, 0x2d, 0x13, 0x33, 0x3f, 0xed, 0x77, 0x71, 0xc0, 0xae, 0x77, 0x3a, 0xa7, 0x91, 0xdd, 0x34, 0x02, 0x7d, 0x28, 0xa4, 0xaf, 0x7b, 0xa7, 0x60, 0x5c, 0x62, 0x89, 0x55, 0xb0, 0xb5, 0xb2, 0x5d, 0x93, 0xa1, 0x11, 0x36, 0xa5, 0xce, 0x1b, 0x33, 0x41, 0x23, 0xba, 0x55, 0x5d, 0x31, 0x9b, 0x74, 0x41, 0xd1, 0x9d, 0xf2, 0xce, 0x7c, 0xf0, 0x55, 0xfa, 0x12, 0xd7, 0x06, 0xf4, 0xef, 0x3e, 0xbe, 0x39, 0xbe, 0x19, 0xf3, 0x3d, 0xcf, 0x95, 0x9b, 0x91, 0x6b, 0x8a, 0x92, 0x8b, 0x6b, 0x4c, 0xa6, 0x77, 0x1f, 0x1b, 0x88, 0x0f, 0x60, 0x6e, 0xdc, 0xc8, 0x1c, 0xfe, 0xfd, 0x03, 0xab, 0x19, 0xdb, 0x0e, 0x9b, 0x9b, 0x66, 0xf2, 0x9d, 0xb6, 0x64, 0x4d, 0x8f, 0xcc, 0xcc, 0x0b, 0x19, 0x35, 0xde, 0xeb, 0x4c, 0x37, 0x40, 0x7b, 0xd7, 0xa5, 0xd3, 0x7c, 0x46, 0x48, 0xeb, 0x46, 0x45, 0x19, 0xba, 0x51, 0x91, 0xaa, 0x67, 0x14, 0xf1, 0x7a, 0x27, 0x8d, 0xc0, 0x52, 0x3b, 0xdd, 0x27, 0x3d, 0x87, 0x59, 0x51, 0x07, 0xab, 0xf2, 0x6d, 0xd5, 0x22, 0x02, 0xff, 0xd2, 0x89, 0xc7, 0xbb, 0x96, 0x80, 0xcf, 0x9e, 0x67, 0xe6, 0x14, 0x8f, 0xe5, 0xb9, 0x98, 0xd8, 0x09, 0x0e, 0xe3, 0xfb, 0x9a, 0xae, 0xee, 0xe4, 0x34, 0xd4, 0x28, 0xf6, 0x78, 0xc1, 0x78, 0x7a, 0xbf, 0x10, 0x5f, 0x2b, 0xa7, 0xb3, 0xc4, 0xa5, 0x62, 0x03, 0x6f, 0x85, 0xf0, 0xf5, 0xb4, 0x35, 0xe8, 0xff, 0x5a, 0x9b, 0x83, 0x69, 0x41, 0x67, 0xee, 0xb7, 0xaf, 0x1d, 0xbb, 0x71, 0x21, 0xa3, 0x9d, 0xdd, 0x1c, 0xe6, 0x7c, 0x05, 0x0f, 0x75, 0x8d, 0x20, 0xfd, 0xb5, 0x81, 0xfa, 0x0b, 0x3c, 0x4a, 0x5a, 0x80, 0x29, 0x39, 0x4b, 0x4a, 0xdc, 0xf7, 0xd7, 0x69, 0xff, 0x7a, 0x14, 0x01, 0xd4, 0x39, 0xdc, 0x2b, 0x75, 0x9d, 0xf6, 0x0c, 0x13, 0x77, 0x16, 0x70, 0xd9, 0x51, 0x41, 0xeb, 0x39, 0x9c, 0x2b, 0x8a, 0x68, 0x2d, 0x07, 0xfa, 0x0c, 0xd7, 0xe4, 0xbe, 0x66, 0xab, 0x4e, 0xc7, 0xbf, 0x5e, 0x0f, 0xa3, 0xd5, 0x5a, 0x97, 0x93, 0x99, 0xaa, 0xc7, 0xc6, 0xaf, 0x66, 0xf0, 0x97, 0x57, 0x74, 0x83, 0x5f, 0xe8, 0xec, 0x04, 0xff, 0x9a, 0xf1, 0xa5, 0x48, 0xe1, 0xbc, 0x53, 0xf1, 0xa5, 0x63, 0xe3, 0xd6, 0xfd, 0x9b, 0x56, 0xc1, 0x6a, 0x9e, 0xa3, 0x58, 0xd6, 0x19, 0xb9, 0xed, 0x69, 0x7e, 0x1c, 0xf3, 0x4f, 0x03, 0x9f, 0x54, 0x81, 0x4f, 0x36, 0x71, 0x3e, 0x79, 0x43, 0x3f, 0x87, 0x69, 0xd8, 0xad, 0x74, 0x7a, 0x0c, 0x2d, 0x77, 0xa6, 0x57, 0x5c, 0x20, 0x0f, 0x99, 0x69, 0xda, 0xa9, 0xb8, 0x34, 0x4c, 0x2b, 0x57, 0x90, 0xca, 0x44, 0x53, 0x2b, 0xa4, 0x93, 0x42, 0xd3, 0x22, 0xa2, 0x69, 0x57, 0x1e, 0x74, 0x0c, 0xa7, 0x0b, 0xdf, 0x69, 0x05, 0xb3, 0xb7, 0x42, 0x62, 0xe3, 0x34, 0xda, 0xa6, 0x01, 0xd2, 0x2d, 0xd0, 0x3c, 0xb6, 0xd9, 0x92, 0xab, 0x87, 0x9b, 0x91, 0x3a, 0x87, 0xdd, 0x1a, 0xd5, 0x1c, 0x8e, 0xd3, 0xb9, 0x72, 0xda, 0x6b, 0x8a, 0x7a, 0x19, 0xea, 0x05, 0x85, 0x69, 0x9f, 0x30, 0xd5, 0xa1, 0xf6, 0x9b, 0x48, 0x7b, 0x31, 0x92, 0xf5, 0x7c, 0xb7, 0x44, 0xc5, 0xdc, 0x10, 0x15, 0xe8, 0x2c, 0x06, 0xad, 0xab, 0xa4, 0x38, 0x11, 0xf5, 0x90, 0xac, 0x05, 0x27, 0xc2, 0x92, 0xba, 0x62, 0x28, 0x24, 0x3c, 0x68, 0xaf, 0x87, 0x59, 0xf1, 0x34, 0xc3, 0x36, 0x37, 0x72, 0x5f, 0xad, 0x97, 0x69, 0xd3, 0x36, 0x36, 0x97, 0x82, 0x97, 0xd5, 0xd3, 0x8c, 0x05, 0xd0, 0xc4, 0x44, 0x8f, 0x1b, 0xbd, 0xf1, 0x8d, 0x7b, 0xdd, 0xcc, 0xc0, 0xdf, 0xf2, 0xef, 0xa5, 0x7d, 0xcb, 0xf4, 0x36, 0x1d, 0x6f, 0xb9, 0xfc, 0xcd, 0x8c, 0x37, 0x93, 0xa7, 0x87, 0xe5, 0xf3, 0xd8, 0x34, 0xc4, 0xf2, 0xf8, 0x5b, 0x9e, 0xce, 0x3d, 0xa9, 0x13, 0x31, 0x73, 0xe5, 0x25, 0x66, 0x50, 0x3d, 0xcd, 0xbd, 0xc0, 0x36, 0x37, 0x23, 0xae, 0xec, 0x75, 0x58, 0xe9, 0x5c, 0xa9, 0xac, 0xde, 0x66, 0xae, 0x0c, 0x16, 0x81, 0xa3, 0x9c, 0x4d, 0xe4, 0x45, 0x08, 0xeb, 0xb8, 0x87, 0xc1, 0x18, 0xd1, 0xcf, 0x55, 0xe7, 0x6f, 0x4d, 0xab, 0xff, 0xc9, 0x10, 0x63, 0xc3, 0x0a, 0xaf, 0x79, 0x7e, 0xfe, 0xdf, 0x19, 0x43, 0xa2, 0x87, 0xcb, 0x48, 0xf4, 0xe6, 0xe2, 0xb1, 0xb1, 0xe7, 0x53, 0x73, 0x25, 0xd3, 0xe4, 0x8a, 0x64, 0x83, 0x99, 0x14, 0x98, 0x2e, 0x8d, 0x62, 0x91, 0x7c, 0x4d, 0x98, 0x55, 0x49, 0x98, 0x69, 0x78, 0xc2, 0x2b, 0x0a, 0xf7, 0x1d, 0xeb, 0x2f, 0x8a, 0x93, 0x5f, 0xe3, 0x9e, 0x5e, 0x05, 0xb2, 0xb5, 0xf9, 0xeb, 0xe9, 0xfa, 0xbf, 0x1a, 0x6d, 0x65, 0xc2, 0xc3, 0xae, 0x9c, 0xff, 0x7f, 0x78, 0x90, 0x7f, 0x26, 0xcd, 0xd9, 0x42, 0xa9, 0x69, 0x5a, 0x28, 0x4f, 0x9c, 0xae, 0x71, 0x83, 0xb7, 0xe9, 0xd4, 0x19, 0x2b, 0x8a, 0xd3, 0xfe, 0x14, 0x65, 0xaf, 0xcd, 0xf1, 0x27, 0x55, 0x3e, 0x67, 0xf2, 0x0a, 0x9a, 0xf3, 0x54, 0x1e, 0x73, 0xf2, 0xf5, 0x9f, 0xce, 0xe4, 0xce, 0xb6, 0x9b, 0xf9, 0x52, 0x30, 0x4f, 0xe4, 0x4b, 0xc1, 0xfc, 0x15, 0x7c, 0xa9, 0xf5, 0x6c, 0x97, 0x2a, 0x26, 0xe4, 0x25, 0x8d, 0x64, 0x45, 0x6a, 0xb4, 0x24, 0xef, 0xf7, 0xe0, 0xfc, 0x1b, 0x15, 0xa4, 0x5c, 0x7a, 0xa6, 0xc7, 0x84, 0xad, 0x8f, 0xbf, 0xa7, 0xe9, 0x35, 0x27, 0x83, 0x5e, 0x73, 0x54, 0x7a, 0xcd, 0x61, 0x53, 0x81, 0x11, 0x9d, 0x54, 0xcc, 0x85, 0x74, 0xaa, 0xa0, 0x55, 0x38, 0xaa, 0xb1, 0x61, 0x48, 0xad, 0xd3, 0xa6, 0xb4, 0x4b, 0x28, 0xc8, 0xc4, 0x73, 0xf9, 0x32, 0xe5, 0xfc, 0x73, 0x0f, 0xad, 0xd3, 0x58, 0x30, 0xd7, 0x0d, 0x0b, 0x96, 0xc2, 0x25, 0xa9, 0xb5, 0x3b, 0xbe, 0x4a, 0x9b, 0xdc, 0xdf, 0x4b, 0x33, 0x2f, 0x8d, 0xa4, 0x4b, 0x87, 0x5b, 0x86, 0x52, 0xe7, 0x84, 0xf5, 0xd3, 0x7b, 0xe9, 0xb6, 0x07, 0x5b, 0x9c, 0xd6, 0x1c, 0xb9, 0x64, 0xe4, 0x27, 0xad, 0x95, 0x35, 0x40, 0xc1, 0x4c, 0xf0, 0xf8, 0x1a, 0xc5, 0x73, 0x24, 0xef, 0x6d, 0xa6, 0x14, 0x6d, 0x15, 0xc9, 0x3c, 0xf2, 0x37, 0x13, 0xc1, 0xa0, 0xbd, 0x57, 0x85, 0x6b, 0xd1, 0x25, 0x5a, 0xc5, 0xbb, 0xf2, 0xf5, 0xb8, 0x83, 0x5a, 0xcb, 0x57, 0x83, 0x4d, 0xb4, 0x1e, 0x36, 0xee, 0xa7, 0x3a, 0x01, 0xc5, 0x28, 0xd0, 0xdc, 0x42, 0x3a, 0xa8, 0xe5, 0x4b, 0x5b, 0xae, 0xf9, 0xea, 0x96, 0x73, 0x4f, 0x92, 0x76, 0xe2, 0xbe, 0x2c, 0xe8, 0xa0, 0x16, 0xab, 0xfb, 0xf7, 0xa3, 0xbf, 0xff, 0xdd, 0xb1, 0x2d, 0xf4, 0x34, 0x59, 0xf8, 0x2e, 0x8a, 0x63, 0x62, 0x4e, 0xb0, 0x6f, 0x7f, 0x5f, 0xf7, 0x79, 0xf5, 0x8c, 0xfe, 0x65, 0xd2, 0x1e, 0x45, 0xba, 0x37, 0xa3, 0xc1, 0xd1, 0xce, 0xed, 0x43, 0x8d, 0xaf, 0x33, 0xeb, 0x9b, 0x8b, 0xc7, 0xe4, 0xfd, 0xb4, 0x9f, 0x9d, 0x24, 0x82, 0x9a, 0xf6, 0x0f, 0x6a, 0xdc, 0xac, 0xc6, 0x17, 0xa8, 0xf1, 0x7c, 0x35, 0x7e, 0xb7, 0x1a, 0xb7, 0x40, 0x9e, 0xcc, 0x54, 0xd3, 0xe6, 0xa9, 0x69, 0x33, 0xb8, 0xa6, 0xdb, 0x99, 0x35, 0x57, 0x8d, 0x17, 0x40, 0x8e, 0xe4, 0xdd, 0x24, 0x57, 0xf2, 0x32, 0xe5, 0x0a, 0xe9, 0x8c, 0xea, 0xae, 0x90, 0x8c, 0x1b, 0x49, 0x6e, 0x04, 0x54, 0x3f, 0x58, 0xad, 0x75, 0x0d, 0xab, 0x80, 0x85, 0x29, 0xa5, 0xf6, 0xcc, 0x1f, 0x8c, 0x30, 0x67, 0xc6, 0x69, 0x6e, 0xc8, 0x47, 0x2f, 0x74, 0xef, 0x5b, 0x58, 0x81, 0x15, 0x6f, 0xe9, 0xbb, 0x1b, 0x20, 0xff, 0x69, 0xf7, 0xbf, 0xb7, 0xb0, 0x9d, 0x89, 0xcc, 0x89, 0x1c, 0xb9, 0x5f, 0x92, 0x23, 0x8f, 0x72, 0xd0, 0xf9, 0x93, 0x89, 0x16, 0x8b, 0xb2, 0x87, 0x5d, 0x2c, 0x23, 0x9b, 0x85, 0x76, 0xa5, 0xea, 0xa0, 0x8b, 0xb1, 0x5d, 0xd0, 0xc8, 0x64, 0x59, 0xe6, 0xd6, 0xdb, 0xb8, 0x6f, 0xe3, 0xd4, 0x9d, 0xd0, 0xd6, 0x61, 0x8b, 0x98, 0xe3, 0x8b, 0xf9, 0x89, 0x79, 0x35, 0x05, 0xad, 0xb6, 0x31, 0xd0, 0x60, 0x89, 0xb2, 0xaf, 0x78, 0xba, 0x9b, 0xdf, 0xf2, 0xb2, 0x44, 0xf9, 0x82, 0x98, 0xba, 0x9b, 0x38, 0x03, 0xfb, 0x76, 0xbe, 0x63, 0xb7, 0x3c, 0x92, 0x3f, 0xdb, 0xcd, 0x4f, 0xc6, 0xb7, 0x57, 0x5d, 0x60, 0x9d, 0xb3, 0x6b, 0x99, 0x83, 0xde, 0x81, 0xf7, 0x74, 0x8e, 0x77, 0x7b, 0x1a, 0xef, 0xd4, 0x29, 0x81, 0xf6, 0xc0, 0x48, 0xe2, 0x0d, 0xcc, 0x4f, 0x1d, 0x2c, 0x14, 0xce, 0x9d, 0xd0, 0x36, 0x3a, 0x57, 0xe0, 0xe5, 0x70, 0x0d, 0xe9, 0xd3, 0x05, 0x74, 0xf6, 0xe2, 0xa6, 0x34, 0x09, 0xf6, 0x4a, 0x59, 0x38, 0x37, 0xa9, 0x57, 0x02, 0x5e, 0x2f, 0x3f, 0x67, 0x31, 0x7f, 0x42, 0x5a, 0x3b, 0x4f, 0xd3, 0x4f, 0x48, 0x6b, 0xe2, 0x69, 0xa6, 0x09, 0x69, 0x6e, 0xf5, 0x8c, 0x46, 0x66, 0x9a, 0xb3, 0x61, 0x48, 0x8d, 0xd1, 0xca, 0xe4, 0xcc, 0x86, 0xa1, 0x24, 0x75, 0xcb, 0xc8, 0xc3, 0x58, 0x60, 0x87, 0x85, 0xe7, 0x50, 0xd7, 0x9f, 0x22, 0xff, 0x67, 0x0d, 0xb3, 0x6a, 0x59, 0xdf, 0xc4, 0x5b, 0x2c, 0x94, 0xbb, 0x82, 0x84, 0x33, 0xb6, 0xc7, 0x17, 0x78, 0x58, 0x91, 0xa8, 0x89, 0x4e, 0xf9, 0xf3, 0xee, 0x63, 0x7d, 0xb4, 0x22, 0xd3, 0x3f, 0x90, 0xce, 0x45, 0x33, 0x30, 0x72, 0xbd, 0xcc, 0xed, 0x4a, 0x40, 0x99, 0xf0, 0xc5, 0x84, 0x2f, 0x4f, 0xd3, 0x0e, 0xa6, 0xcc, 0x9d, 0xd6, 0xfc, 0x0b, 0x9d, 0x38, 0xf9, 0x62, 0xea, 0xfc, 0x30, 0x9d, 0x3b, 0xd3, 0xdc, 0x7c, 0x9f, 0x06, 0xbe, 0x94, 0x91, 0x37, 0x0c, 0x74, 0xd4, 0x47, 0xa6, 0xc0, 0xea, 0x35, 0xc6, 0x2e, 0xbf, 0x16, 0x17, 0x69, 0xd7, 0xf8, 0xfc, 0x88, 0x2c, 0xc6, 0x23, 0x24, 0x17, 0x45, 0x8a, 0xc5, 0xe4, 0xd9, 0xfd, 0xdc, 0xce, 0xd4, 0xdb, 0x4a, 0xf4, 0xe3, 0xc4, 0x3d, 0x71, 0x46, 0x29, 0xc1, 0xbe, 0x96, 0x78, 0x49, 0x07, 0x2b, 0xfa, 0xe5, 0xab, 0xdd, 0xa7, 0x27, 0x9c, 0xcf, 0x71, 0x93, 0x5e, 0x83, 0x99, 0xa8, 0xec, 0xa6, 0xf3, 0x39, 0x5e, 0x7e, 0x6e, 0x07, 0x73, 0xad, 0x98, 0x75, 0xd3, 0xf9, 0x1c, 0xc6, 0x5e, 0x5f, 0x40, 0xf7, 0x19, 0x85, 0xa0, 0x4d, 0xb6, 0x76, 0x46, 0x61, 0x3d, 0x94, 0xdd, 0xd4, 0x8a, 0xf6, 0x30, 0xc9, 0x34, 0xf0, 0x81, 0x35, 0x13, 0xee, 0x36, 0x48, 0x43, 0x0d, 0x8b, 0xf1, 0x13, 0x51, 0x0f, 0xb2, 0x0d, 0x85, 0x4b, 0xd8, 0xc3, 0xf4, 0x5e, 0xf3, 0x3a, 0x7b, 0x84, 0xf8, 0xed, 0x2b, 0xb9, 0xd0, 0x7c, 0x13, 0x17, 0x96, 0xaa, 0xe3, 0x2e, 0xfb, 0xe6, 0x51, 0xc5, 0xcf, 0xb0, 0x3a, 0xa3, 0x09, 0xcc, 0x29, 0x74, 0xbb, 0x83, 0x41, 0x59, 0x93, 0xec, 0x68, 0xe1, 0xf7, 0x48, 0xa8, 0x67, 0x56, 0x3a, 0x0e, 0x34, 0x0c, 0x2d, 0x70, 0x33, 0x07, 0xe6, 0x90, 0x0a, 0xc9, 0xc0, 0x57, 0x82, 0x2e, 0xb7, 0x0c, 0x29, 0xfa, 0x4d, 0x5d, 0x41, 0xd2, 0x2b, 0xc6, 0x25, 0x5b, 0xae, 0xb5, 0x9d, 0xe8, 0x79, 0x47, 0xbf, 0x85, 0x05, 0xe3, 0x2d, 0x7d, 0xa5, 0xed, 0xac, 0xe8, 0x57, 0xa3, 0xdd, 0x17, 0xd4, 0xfd, 0x5e, 0xfc, 0xb6, 0x19, 0x2b, 0xec, 0x2c, 0xd8, 0x5b, 0x44, 0x79, 0x6f, 0x6c, 0xf2, 0x7f, 0xee, 0x56, 0x5b, 0xe0, 0x85, 0xb5, 0x6f, 0xe6, 0xf8, 0x7b, 0x45, 0x81, 0xa7, 0x3a, 0xe9, 0xdd, 0x53, 0xe9, 0xab, 0xbc, 0x50, 0x3b, 0xbb, 0x52, 0xc9, 0xcf, 0xcf, 0x9e, 0x69, 0x23, 0x16, 0x8c, 0x7b, 0xcd, 0x3c, 0xf7, 0x17, 0x25, 0x44, 0xd8, 0xc8, 0x3d, 0xd7, 0x91, 0x96, 0xa1, 0xe4, 0xfe, 0x2c, 0x65, 0xdf, 0x78, 0x19, 0xc9, 0x06, 0xe2, 0x5e, 0xd1, 0x1e, 0x2c, 0x45, 0x8f, 0x3e, 0x71, 0x34, 0xc2, 0xa2, 0x97, 0x0f, 0x6f, 0x92, 0x9a, 0x6c, 0xfa, 0x96, 0x7e, 0x07, 0x78, 0x60, 0xdf, 0xfe, 0x41, 0x16, 0xd6, 0x05, 0xe3, 0xa2, 0x47, 0x72, 0x5b, 0x39, 0xc7, 0x1c, 0x89, 0x47, 0x27, 0xff, 0x79, 0xcf, 0xa9, 0x5f, 0x0e, 0xb2, 0xc2, 0x2a, 0x58, 0x75, 0x17, 0x58, 0x59, 0xd3, 0xb6, 0x27, 0x8e, 0x42, 0x53, 0xca, 0xc3, 0xf7, 0xb2, 0xdf, 0x1f, 0xb5, 0x4e, 0x0d, 0x6b, 0x1b, 0xfb, 0xac, 0x7d, 0x68, 0xe7, 0x20, 0xc1, 0x44, 0x3b, 0xdf, 0xc3, 0x2c, 0xc7, 0xd8, 0x08, 0xde, 0x76, 0x47, 0x58, 0x0c, 0x39, 0x89, 0xbb, 0xac, 0x25, 0x7a, 0xd6, 0x12, 0xdf, 0x28, 0x1f, 0xe8, 0x03, 0xfc, 0xfe, 0x5f, 0x1d, 0xee, 0xbe, 0xe0, 0xd0, 0xfc, 0xea, 0x70, 0xc8, 0x2e, 0xe5, 0x13, 0x1c, 0xeb, 0x43, 0x16, 0xf6, 0xcb, 0xdf, 0xad, 0xd6, 0x8a, 0xb5, 0x36, 0x4e, 0x31, 0xc9, 0x10, 0x65, 0x25, 0xbd, 0xb2, 0x1c, 0x03, 0x35, 0x0f, 0xc4, 0xbb, 0xcf, 0x6c, 0xbc, 0x7c, 0x74, 0x93, 0x38, 0x87, 0x39, 0xc3, 0xf9, 0xea, 0x59, 0xc9, 0x51, 0xe5, 0x04, 0xef, 0xb6, 0x01, 0xba, 0x8d, 0xa0, 0x53, 0x13, 0x31, 0xf1, 0x53, 0xd5, 0xcc, 0xc5, 0xfd, 0x27, 0xc4, 0xc3, 0xae, 0x12, 0x87, 0xb2, 0xaf, 0x60, 0x5b, 0xf2, 0x26, 0x12, 0xc2, 0x62, 0x36, 0x94, 0x7d, 0xfa, 0xba, 0x71, 0xca, 0x91, 0x01, 0xde, 0xae, 0xbd, 0x0e, 0xde, 0x2e, 0xa4, 0x95, 0xcd, 0x3e, 0x48, 0x9e, 0x13, 0xba, 0xe3, 0xa9, 0xa0, 0x20, 0x75, 0x8b, 0x94, 0x09, 0x7d, 0xca, 0xe9, 0x1b, 0x99, 0x79, 0x07, 0xdd, 0xb3, 0x83, 0xb7, 0xc5, 0x17, 0x98, 0xef, 0x8e, 0x25, 0xcc, 0x41, 0xef, 0x77, 0xf7, 0xb2, 0x02, 0x56, 0x50, 0x48, 0x7d, 0xe6, 0xc3, 0xaf, 0x85, 0xd5, 0xc1, 0x18, 0xbd, 0x93, 0xee, 0x35, 0x83, 0xd4, 0x5c, 0x5e, 0xa5, 0xf8, 0x61, 0x57, 0x2c, 0x20, 0x4e, 0x5c, 0xe5, 0xe9, 0x60, 0xad, 0x85, 0x3e, 0xd6, 0xb4, 0xa0, 0x87, 0x59, 0x59, 0x4b, 0x09, 0xac, 0x5f, 0xdf, 0xe8, 0x5f, 0x07, 0xfb, 0xa0, 0x81, 0x7d, 0x41, 0xc2, 0xeb, 0xfc, 0x45, 0xec, 0xbb, 0x4a, 0x2f, 0xde, 0x18, 0x4e, 0xf7, 0x22, 0xad, 0x31, 0x04, 0x9a, 0xf9, 0x4d, 0x66, 0x63, 0x9e, 0x2e, 0x39, 0x71, 0x5b, 0x2f, 0xbb, 0x4d, 0x1e, 0x53, 0xef, 0xe4, 0xd2, 0xf9, 0xba, 0x90, 0xfa, 0x73, 0x7e, 0x4a, 0x89, 0x7c, 0xa7, 0x6e, 0x7e, 0xbb, 0x8f, 0xb2, 0xdf, 0xe1, 0x2a, 0xf7, 0xc1, 0x74, 0x31, 0x7d, 0xed, 0x47, 0xf2, 0x35, 0xe2, 0x68, 0xe4, 0x32, 0x2a, 0x27, 0xbd, 0x6d, 0x98, 0xd3, 0x01, 0xa7, 0x4a, 0xbe, 0x86, 0x5f, 0xad, 0x9c, 0x50, 0xa1, 0x19, 0x5c, 0x46, 0x9a, 0x13, 0x61, 0xcb, 0x41, 0x33, 0x49, 0x90, 0x37, 0xc3, 0x06, 0x1a, 0x46, 0xc8, 0xfe, 0x83, 0x9e, 0x50, 0xc4, 0x84, 0x26, 0xf0, 0xc5, 0xbe, 0x78, 0x9b, 0x99, 0x5b, 0x71, 0x59, 0xdc, 0xae, 0xd3, 0x6c, 0xeb, 0x7b, 0x7f, 0x30, 0x6a, 0x3e, 0xd6, 0xc7, 0x6f, 0x1f, 0x40, 0x83, 0xad, 0xec, 0xec, 0x96, 0xdb, 0x2a, 0xe5, 0x1b, 0xb7, 0xb9, 0xd3, 0x70, 0x81, 0xe5, 0x35, 0xf2, 0x44, 0x72, 0xb8, 0x4f, 0x13, 0x8e, 0xe4, 0x23, 0x10, 0xfd, 0xd6, 0x2e, 0x66, 0x8c, 0x68, 0x33, 0x56, 0x63, 0x0d, 0x2d, 0x71, 0xd5, 0xab, 0xc7, 0x14, 0xaf, 0x5e, 0xd2, 0x77, 0x9a, 0xf2, 0x9b, 0x2a, 0xed, 0xb4, 0x26, 0x77, 0x4a, 0x2e, 0x9c, 0x2b, 0x8f, 0xbf, 0xb7, 0x44, 0x03, 0xfb, 0x4a, 0x96, 0x6d, 0x6e, 0xd2, 0x90, 0xc1, 0x7b, 0xf9, 0x46, 0x07, 0x5b, 0xcd, 0x34, 0xab, 0x0c, 0x7a, 0x07, 0x24, 0x88, 0x10, 0xd6, 0x04, 0xfb, 0x83, 0xf1, 0x86, 0xc1, 0x97, 0xe3, 0xdd, 0xef, 0xf9, 0xfb, 0xc3, 0x90, 0x97, 0xc7, 0xfa, 0x8f, 0xc5, 0x33, 0x65, 0x90, 0x3d, 0x1e, 0x6e, 0x7a, 0xe2, 0xe8, 0x8e, 0xdf, 0x49, 0x3e, 0x63, 0x11, 0x2f, 0x59, 0xa1, 0x2f, 0xe2, 0x25, 0x15, 0xff, 0xb0, 0x36, 0xc3, 0x8e, 0xcd, 0xce, 0xb0, 0x63, 0x75, 0xa4, 0x3d, 0x39, 0x1a, 0xad, 0xfa, 0x13, 0x83, 0x27, 0xc8, 0x9e, 0x9d, 0x74, 0x57, 0x1c, 0x63, 0x7f, 0x30, 0xb8, 0xa5, 0xe1, 0xb1, 0x97, 0xb7, 0x74, 0xef, 0x97, 0x34, 0x7c, 0xf7, 0x6d, 0xca, 0x43, 0x49, 0x6d, 0x71, 0x69, 0xd2, 0xad, 0x48, 0x28, 0x7e, 0xda, 0xd2, 0x52, 0x6a, 0x43, 0x6d, 0x8c, 0xcd, 0x17, 0x44, 0xd4, 0x21, 0xcd, 0x84, 0x5e, 0xa6, 0x31, 0x32, 0xb6, 0x7a, 0x95, 0x49, 0xc1, 0x3f, 0xa4, 0x57, 0xf4, 0x6a, 0xc9, 0x10, 0xec, 0x6b, 0xa0, 0xdd, 0xe9, 0x7f, 0x8a, 0x90, 0x9f, 0xfb, 0xba, 0x0a, 0x13, 0xda, 0x52, 0x99, 0x68, 0x9b, 0xcb, 0x7d, 0x9f, 0x06, 0x7e, 0x6b, 0xde, 0x15, 0xa5, 0x97, 0xd1, 0xb7, 0x8b, 0xe5, 0x2b, 0xbc, 0x3e, 0x0d, 0x78, 0xea, 0xa2, 0x35, 0x79, 0x3f, 0x0f, 0x63, 0x6f, 0x96, 0x50, 0x9d, 0x28, 0x50, 0xc6, 0xc4, 0x5a, 0xd4, 0xe9, 0x55, 0x29, 0x56, 0xa6, 0xd6, 0x58, 0xc2, 0xad, 0x04, 0xed, 0xbb, 0x4b, 0x7c, 0x55, 0x9e, 0x2a, 0xae, 0x29, 0x66, 0x73, 0x0b, 0x7a, 0x13, 0x4f, 0xd7, 0xa9, 0x9e, 0x94, 0x49, 0x11, 0x79, 0xef, 0x26, 0xc8, 0xf7, 0xad, 0x52, 0x2f, 0x61, 0x76, 0xa0, 0xaf, 0xfb, 0x80, 0x14, 0x35, 0x9a, 0x92, 0x98, 0xcb, 0x72, 0x48, 0xaf, 0xa6, 0x5f, 0x78, 0x7f, 0x0b, 0x2c, 0xf8, 0x79, 0x16, 0xad, 0xb2, 0x16, 0x03, 0x88, 0xf3, 0x2c, 0x0a, 0xc4, 0x01, 0x9e, 0xae, 0x7b, 0x77, 0xeb, 0x60, 0x7c, 0x70, 0x9e, 0x65, 0x12, 0xb0, 0xfd, 0x84, 0xf6, 0x57, 0x7f, 0xea, 0x0c, 0x6c, 0xc7, 0xfb, 0x75, 0xd1, 0xeb, 0x6b, 0x97, 0x65, 0xbc, 0xa7, 0x39, 0xe9, 0x0a, 0xe7, 0x77, 0xba, 0xd1, 0x2a, 0x88, 0xf6, 0x38, 0x14, 0x7e, 0xd1, 0x16, 0xc8, 0x67, 0xf9, 0xae, 0x17, 0xe1, 0xfd, 0xc1, 0xca, 0x8f, 0xf5, 0x1a, 0x58, 0x23, 0x1b, 0x69, 0xd4, 0x70, 0xed, 0x05, 0x63, 0x20, 0x63, 0xf4, 0xe4, 0xc9, 0x63, 0xf8, 0x95, 0x52, 0xdc, 0xc9, 0xc7, 0x10, 0x9e, 0x12, 0xf7, 0xc0, 0xf2, 0x5b, 0x71, 0x52, 0x1c, 0xda, 0x01, 0x99, 0x4d, 0x3c, 0x6a, 0x4b, 0xf3, 0xa8, 0xba, 0x8f, 0xb9, 0x4b, 0xbe, 0xec, 0xec, 0x92, 0xaf, 0xaa, 0x7d, 0xf0, 0x61, 0xc6, 0x5e, 0x3c, 0x53, 0xb2, 0xae, 0xc5, 0x1f, 0xc9, 0x17, 0xe9, 0xc4, 0x52, 0xfa, 0x4e, 0x2f, 0xd4, 0x3b, 0x9d, 0xd7, 0x6e, 0x92, 0x3f, 0xe7, 0x77, 0x15, 0x12, 0x3e, 0x7a, 0xf9, 0xe3, 0xdb, 0xba, 0xd8, 0x14, 0xf9, 0x8a, 0xa8, 0xf1, 0xb9, 0x7d, 0xa3, 0x18, 0x37, 0x9f, 0x8a, 0x9a, 0xb3, 0x71, 0x3c, 0xaf, 0xdf, 0xe6, 0x91, 0x3f, 0xe3, 0xb7, 0x42, 0x99, 0xd2, 0x27, 0x78, 0x6e, 0x6c, 0xe3, 0x77, 0xea, 0x25, 0xb1, 0x36, 0xa6, 0xb0, 0xa6, 0x3b, 0x25, 0x6c, 0x7c, 0x17, 0x1d, 0x5f, 0xfd, 0x50, 0x76, 0xa7, 0xb0, 0x0a, 0xb2, 0x7f, 0xa1, 0xbf, 0xd8, 0x96, 0x28, 0x37, 0x8c, 0x91, 0x14, 0xb8, 0x45, 0x95, 0x02, 0xb0, 0x68, 0x66, 0x41, 0x0a, 0xb0, 0x99, 0xb3, 0x68, 0x7e, 0x16, 0x3d, 0x3b, 0xf0, 0x34, 0x32, 0x7b, 0x4a, 0x1a, 0xdc, 0xa2, 0x9c, 0xb7, 0x22, 0x4f, 0xe5, 0xd8, 0x7b, 0xaa, 0x34, 0x58, 0xc4, 0x39, 0x3f, 0x3b, 0x9a, 0x55, 0x23, 0x8c, 0x92, 0x6e, 0x63, 0xde, 0x17, 0x0f, 0x15, 0xab, 0x5e, 0x9d, 0xf4, 0x28, 0xc9, 0xa1, 0x51, 0xc2, 0x7d, 0x3c, 0x93, 0x79, 0xdc, 0xf0, 0xee, 0x96, 0x78, 0x9f, 0x3d, 0x9e, 0xb1, 0x77, 0x98, 0x25, 0xf7, 0x21, 0x7d, 0x7b, 0x48, 0xf5, 0xc2, 0x9a, 0x21, 0x63, 0x23, 0x68, 0xcd, 0x69, 0x04, 0xda, 0x55, 0x78, 0x04, 0xfa, 0xc7, 0xa8, 0x4b, 0x9f, 0x5c, 0xd5, 0xf0, 0xfd, 0x0c, 0xb3, 0xb5, 0x83, 0x9f, 0x03, 0x2d, 0x76, 0x31, 0xd2, 0x64, 0x6b, 0xde, 0xa3, 0x9d, 0x93, 0x90, 0x9c, 0x66, 0x7e, 0x33, 0x0f, 0x7f, 0x5f, 0x96, 0xd6, 0x8e, 0xf9, 0xed, 0x48, 0x74, 0xc2, 0x00, 0x5a, 0xe7, 0xeb, 0xe1, 0x19, 0x62, 0x91, 0xb0, 0x90, 0x9f, 0x27, 0x37, 0x01, 0x6b, 0x0d, 0x9e, 0x7a, 0x3c, 0xb3, 0x80, 0x7d, 0x8c, 0xbe, 0x34, 0xc6, 0x69, 0xcf, 0x4c, 0x5b, 0xe7, 0xb1, 0x78, 0xc9, 0xb7, 0xf4, 0xba, 0xc0, 0xe7, 0x18, 0x05, 0x06, 0x96, 0x0f, 0x99, 0x5d, 0xcc, 0x6a, 0x7c, 0xb4, 0xae, 0x40, 0x36, 0x66, 0x44, 0x2a, 0x4f, 0xbd, 0xff, 0x46, 0x2a, 0x4e, 0xbd, 0xff, 0x41, 0xb2, 0xba, 0x96, 0x30, 0x3d, 0xc7, 0xd7, 0xc7, 0x77, 0x3c, 0x28, 0xe9, 0x09, 0xc9, 0x90, 0x7c, 0xd7, 0x59, 0xd4, 0x5b, 0x8e, 0xec, 0xdc, 0x93, 0xad, 0x55, 0xb9, 0x68, 0xa5, 0x7d, 0x65, 0x03, 0x5f, 0x21, 0x4a, 0x8c, 0xfa, 0xde, 0xaf, 0xe0, 0x2b, 0x44, 0x0e, 0x92, 0x74, 0x1b, 0x99, 0x9b, 0x8f, 0xe4, 0x83, 0xe9, 0xbb, 0xe0, 0x30, 0xd6, 0xb6, 0x86, 0x59, 0xd6, 0x31, 0xd8, 0xa1, 0x5a, 0x3a, 0xa9, 0x8d, 0x71, 0x63, 0x8a, 0xd6, 0xef, 0x1b, 0x68, 0x63, 0x59, 0x07, 0xed, 0x9d, 0x4c, 0xff, 0x87, 0x7f, 0xf9, 0xc3, 0xbf, 0x04, 0x07, 0x31, 0xfb, 0x44, 0x44, 0x6d, 0xe6, 0xfd, 0x85, 0xbe, 0xc8, 0x82, 0x4e, 0xb4, 0x66, 0xb4, 0x90, 0x4e, 0x0b, 0x9e, 0xe4, 0xbf, 0xa7, 0xf1, 0x5b, 0xc2, 0x8e, 0x60, 0x6e, 0x7a, 0x1d, 0xe1, 0x04, 0xd7, 0xce, 0x8e, 0xf1, 0xdf, 0x37, 0xf8, 0xef, 0x9b, 0xd0, 0x76, 0xce, 0xc0, 0x86, 0x8b, 0xd7, 0x5e, 0x10, 0x16, 0x71, 0xec, 0x6b, 0x5c, 0x46, 0x7e, 0x22, 0xd2, 0x1b, 0xd8, 0xe5, 0x30, 0x90, 0xd7, 0x53, 0xa8, 0xe7, 0xe9, 0x75, 0x2e, 0x6d, 0x60, 0x17, 0x72, 0x4a, 0x08, 0xad, 0x91, 0x2c, 0x50, 0xbc, 0xd5, 0x53, 0xc4, 0xce, 0x17, 0xf6, 0x92, 0xc0, 0x12, 0x2e, 0xa8, 0xcf, 0x8b, 0xb0, 0x21, 0x7d, 0x7c, 0xad, 0x91, 0xdf, 0xde, 0x91, 0xa5, 0x21, 0xfc, 0x1f, 0x66, 0x33, 0x4c, 0xc6, 0x47, 0xf1, 0xf9, 0xb3, 0xd5, 0xda, 0x87, 0x75, 0x35, 0xd9, 0xc0, 0xfd, 0xa3, 0xc4, 0x61, 0x31, 0x3b, 0xe3, 0xc4, 0xd8, 0x27, 0x2d, 0xcc, 0xe3, 0x48, 0x1c, 0xa6, 0xf4, 0x27, 0x8e, 0x4a, 0x05, 0xa6, 0x5b, 0x21, 0x15, 0xc5, 0x70, 0x1e, 0x7e, 0xad, 0xa1, 0xbc, 0xca, 0x4f, 0x06, 0xd9, 0xd4, 0x5e, 0x26, 0x26, 0x0e, 0x4b, 0xba, 0xe0, 0xe0, 0xc8, 0x60, 0xf7, 0x59, 0x31, 0xbb, 0x31, 0x5e, 0x89, 0xbc, 0x92, 0x2d, 0x0f, 0x7a, 0x07, 0x3f, 0xab, 0x43, 0x27, 0x76, 0xac, 0x21, 0x43, 0xe5, 0x27, 0x7a, 0x35, 0x6f, 0x84, 0xf1, 0x1c, 0x8b, 0xd0, 0xdf, 0x32, 0xfa, 0xfe, 0x94, 0x74, 0xb1, 0x0a, 0xdf, 0xf2, 0xee, 0x4a, 0x1c, 0x46, 0xce, 0x39, 0x21, 0xab, 0x15, 0x9a, 0xef, 0x48, 0x5f, 0x8f, 0xb9, 0xea, 0x13, 0x0b, 0x33, 0xde, 0xc5, 0xe6, 0x24, 0x0e, 0x87, 0xf4, 0xa6, 0x71, 0x36, 0x47, 0x14, 0x24, 0x7a, 0x8a, 0x92, 0xc6, 0xf4, 0x6a, 0x30, 0x3e, 0x12, 0xef, 0x3e, 0x6a, 0x3a, 0x88, 0xb1, 0x84, 0x79, 0x3c, 0x9a, 0x1d, 0x63, 0xea, 0x2d, 0x52, 0x05, 0x76, 0x6e, 0x01, 0x68, 0x0c, 0x11, 0x6d, 0xdf, 0x1e, 0xd8, 0x93, 0xa8, 0xc9, 0x3e, 0xa8, 0x58, 0xc8, 0xea, 0x7d, 0x07, 0x5a, 0xcf, 0x1e, 0xa6, 0xa7, 0xfb, 0xa7, 0x74, 0xc1, 0xd8, 0xc1, 0x93, 0xff, 0x97, 0x5d, 0xbd, 0x87, 0x6c, 0xfc, 0x1c, 0xb7, 0x1c, 0xe2, 0xfe, 0x17, 0xe4, 0x83, 0xc4, 0xc1, 0xd0, 0x38, 0x5f, 0xf7, 0xa2, 0x77, 0x10, 0x1f, 0x5d, 0xf6, 0xaa, 0xaf, 0xcf, 0x5b, 0xb9, 0xa0, 0x92, 0x9d, 0x40, 0xec, 0xb5, 0x65, 0x7c, 0xed, 0x07, 0xdf, 0x8f, 0xf9, 0x2b, 0xc3, 0x33, 0xfd, 0x6e, 0xbe, 0xcb, 0x72, 0x9c, 0xfa, 0x62, 0xd2, 0xbd, 0x99, 0x1c, 0xf6, 0x30, 0xc6, 0xd9, 0xc3, 0x02, 0x4a, 0x1c, 0x55, 0xe1, 0xbd, 0x01, 0x78, 0x6f, 0x20, 0xfe, 0x86, 0x1a, 0x7f, 0x13, 0xf1, 0x37, 0x11, 0x3f, 0xbd, 0x2c, 0xb9, 0xf3, 0xf2, 0x8c, 0x17, 0xbd, 0x8e, 0x94, 0x33, 0xc9, 0x14, 0x21, 0xee, 0x05, 0x0f, 0x88, 0x5d, 0xf2, 0x59, 0xde, 0x6f, 0x36, 0x91, 0xfc, 0x0b, 0xa7, 0xbb, 0x0b, 0xc4, 0xa5, 0xb3, 0x69, 0x84, 0x72, 0xbe, 0x9e, 0xd4, 0x3e, 0xb1, 0x56, 0x71, 0xae, 0x7c, 0x3e, 0x6c, 0xe4, 0x3b, 0x1a, 0xd5, 0x9d, 0xc7, 0x48, 0xf9, 0x80, 0xa7, 0x68, 0x93, 0x29, 0xa8, 0xe3, 0x58, 0xaa, 0x0e, 0x09, 0x75, 0x48, 0x48, 0x39, 0x99, 0x4a, 0x69, 0x45, 0x4a, 0x2b, 0x6a, 0xfd, 0x50, 0xb9, 0xff, 0xa2, 0xb0, 0x81, 0xb5, 0x3a, 0xe6, 0xca, 0x97, 0xc3, 0x65, 0x2a, 0x04, 0x50, 0x12, 0x7c, 0x1f, 0x6f, 0x4d, 0xb7, 0x7c, 0xeb, 0x4d, 0x2d, 0xcf, 0x85, 0x46, 0xd8, 0xc1, 0xce, 0xa7, 0x30, 0x80, 0x9c, 0x4e, 0xc2, 0x12, 0x2e, 0x20, 0x76, 0x3d, 0x15, 0xbb, 0x98, 0xbc, 0x09, 0x6e, 0xfc, 0x39, 0xc9, 0x5d, 0x04, 0x19, 0xe6, 0xac, 0x26, 0xeb, 0xdf, 0xca, 0xc8, 0xc3, 0x36, 0x69, 0x8f, 0xfd, 0x16, 0xdd, 0x26, 0x59, 0x4e, 0x1c, 0xde, 0x98, 0x5d, 0xa3, 0xa5, 0x2f, 0x09, 0xa7, 0xb8, 0xb4, 0x69, 0xd3, 0xec, 0x2c, 0xb5, 0xed, 0xcf, 0x4f, 0xac, 0x37, 0x9a, 0x6d, 0x53, 0xa1, 0xc9, 0xf9, 0xfe, 0x47, 0x43, 0x33, 0x24, 0x6b, 0x0a, 0xc3, 0x77, 0x27, 0x8c, 0x7e, 0x6e, 0x47, 0x7c, 0xae, 0x6f, 0x19, 0x52, 0x75, 0x9d, 0x8a, 0xc4, 0x33, 0xa9, 0x73, 0x37, 0x7c, 0x2f, 0x0d, 0x9d, 0x37, 0x21, 0xfb, 0x30, 0xeb, 0xfd, 0x98, 0x6e, 0xff, 0x96, 0xb6, 0xc0, 0xef, 0x7f, 0x57, 0xf2, 0xad, 0xa7, 0x14, 0xa9, 0x94, 0x0b, 0xad, 0x72, 0x06, 0x13, 0x99, 0x1d, 0xe3, 0x78, 0xfe, 0x3c, 0x70, 0x85, 0x54, 0x3c, 0xbb, 0x52, 0x90, 0x24, 0x07, 0x7e, 0x5b, 0x25, 0x2b, 0xac, 0x85, 0x33, 0x52, 0x01, 0xde, 0xe3, 0x52, 0xbe, 0x4b, 0xf0, 0xb5, 0x0b, 0x8b, 0x24, 0x1d, 0x7f, 0xa6, 0x76, 0x82, 0x2b, 0x67, 0x70, 0x5c, 0x1a, 0xd4, 0xa1, 0xe7, 0x36, 0xe8, 0x92, 0xd8, 0xed, 0xfb, 0xfb, 0xc0, 0xb5, 0x9e, 0x2e, 0x26, 0x18, 0x78, 0xca, 0x5a, 0x73, 0x05, 0x9b, 0xc6, 0xd3, 0x8a, 0xbb, 0x36, 0xf0, 0x94, 0xff, 0xc5, 0x6f, 0xdf, 0xa0, 0x94, 0x82, 0xae, 0x22, 0x4a, 0xc9, 0xb9, 0x9d, 0xdf, 0xca, 0x45, 0x29, 0x4a, 0x99, 0xd0, 0xfe, 0x3e, 0x94, 0x4f, 0xd0, 0xfb, 0xa4, 0x4b, 0x66, 0xba, 0x1f, 0x2c, 0x09, 0xad, 0x39, 0x66, 0xa2, 0x7c, 0xc2, 0xb9, 0xae, 0x5c, 0x1e, 0x5f, 0x87, 0xaf, 0x53, 0x20, 0x97, 0x3f, 0xe4, 0xb1, 0xed, 0xb1, 0xa9, 0xfc, 0xeb, 0x6b, 0x3c, 0xf6, 0x02, 0xdd, 0x30, 0x26, 0xd1, 0xbd, 0x12, 0x14, 0xbb, 0x23, 0x66, 0xe1, 0xdf, 0x76, 0x77, 0x95, 0xf3, 0x78, 0x2f, 0xbe, 0x4e, 0xe7, 0x29, 0xbb, 0x78, 0xfc, 0x00, 0x74, 0x21, 0x26, 0x3c, 0xc6, 0xdf, 0x97, 0xf3, 0xfb, 0xbd, 0xe8, 0xdb, 0xc3, 0x3c, 0x5e, 0x82, 0xf8, 0x37, 0x00, 0x69, 0x33, 0x8f, 0x55, 0xc4, 0x66, 0xf0, 0x6f, 0x2b, 0x78, 0xac, 0x92, 0x97, 0xe3, 0x3b, 0x35, 0xf5, 0x47, 0x90, 0xef, 0x36, 0xfe, 0xcd, 0xc3, 0xe3, 0x3f, 0x44, 0xbc, 0x40, 0x0a, 0xf0, 0x77, 0x8b, 0xb1, 0x4f, 0xbd, 0x03, 0xcc, 0xde, 0xcd, 0xd8, 0x36, 0x9e, 0x96, 0x17, 0xbb, 0x8f, 0xe7, 0x36, 0x77, 0xcd, 0xe7, 0xf1, 0xff, 0xe4, 0x37, 0x81, 0xf5, 0xf1, 0x75, 0x29, 0x8a, 0xdf, 0x82, 0x78, 0x90, 0xe2, 0xec, 0x0a, 0x8f, 0xff, 0x18, 0xf1, 0x59, 0xfb, 0xfb, 0xa0, 0x25, 0x9d, 0x01, 0x36, 0x7f, 0xe2, 0xf4, 0xf9, 0x1b, 0x87, 0xfb, 0x21, 0xe9, 0x61, 0xdd, 0xfc, 0x26, 0x10, 0xfd, 0x1b, 0x3c, 0xe5, 0x1c, 0x72, 0xbd, 0x8c, 0x5c, 0x07, 0x78, 0xae, 0xcf, 0x79, 0x1a, 0xdd, 0x19, 0xb6, 0x9b, 0xe7, 0xd1, 0xf2, 0xf8, 0x45, 0xe4, 0xd9, 0x8e, 0x3c, 0x3b, 0x79, 0xda, 0x1f, 0x28, 0x4d, 0x9b, 0x85, 0x3c, 0x03, 0xdd, 0x8b, 0x78, 0xbf, 0x2c, 0xe4, 0xb9, 0x6e, 0x84, 0xa3, 0xdd, 0x9c, 0x83, 0xf4, 0x33, 0x79, 0xfc, 0x72, 0x68, 0xb9, 0x24, 0xf1, 0xef, 0x4e, 0x5e, 0x82, 0x85, 0x79, 0xeb, 0x73, 0x4c, 0x3c, 0xa6, 0x09, 0x2d, 0x92, 0x94, 0xd6, 0xf3, 0x3a, 0xb5, 0x93, 0xc2, 0xf3, 0xd5, 0xd2, 0x97, 0x78, 0x5c, 0x17, 0x9a, 0x29, 0x59, 0x79, 0xfe, 0x6c, 0x1e, 0x37, 0x84, 0x39, 0xd6, 0x39, 0x6e, 0x8a, 0xe9, 0x35, 0x61, 0x7e, 0x1a, 0x2f, 0xa7, 0x9a, 0xef, 0xed, 0x78, 0xe8, 0xab, 0x77, 0x84, 0xd1, 0xce, 0x20, 0xcf, 0xcf, 0xf9, 0x89, 0xab, 0xbb, 0xd8, 0xb3, 0x8a, 0x5c, 0xbc, 0xa7, 0x57, 0xf5, 0xd6, 0x86, 0x44, 0xc5, 0x3b, 0x29, 0x5a, 0x2b, 0x2b, 0xff, 0xc2, 0x66, 0x5b, 0xf5, 0x7a, 0x81, 0xc6, 0x28, 0xde, 0xad, 0x56, 0xfa, 0x32, 0x75, 0xdf, 0x60, 0x8f, 0xa7, 0xf2, 0x32, 0xe4, 0xba, 0x89, 0x35, 0x86, 0xca, 0xa0, 0xaf, 0x36, 0x90, 0x9e, 0x8a, 0xe7, 0x24, 0xa6, 0x09, 0x39, 0xf0, 0x14, 0x58, 0x56, 0x48, 0x34, 0x3a, 0xe4, 0x57, 0x98, 0x36, 0x64, 0x89, 0x30, 0xbc, 0x5d, 0x62, 0xd9, 0xa1, 0x3c, 0xf2, 0x73, 0xf3, 0x1d, 0x55, 0xf1, 0x88, 0xa0, 0xec, 0xb0, 0x4a, 0xea, 0x46, 0xf7, 0x2e, 0xb2, 0xd3, 0xfe, 0xe4, 0x1e, 0xe6, 0x86, 0x8e, 0xe4, 0xb5, 0xb9, 0x58, 0x03, 0x5f, 0x57, 0x84, 0xf5, 0x8d, 0x32, 0xa2, 0xcd, 0x8d, 0xb9, 0x74, 0xb6, 0x3d, 0x47, 0x9f, 0x45, 0x78, 0xe0, 0xdd, 0x4a, 0x56, 0x53, 0x51, 0xce, 0xdb, 0xc3, 0x7a, 0xe6, 0xd4, 0x6f, 0x2c, 0x39, 0x3d, 0x54, 0x3d, 0x26, 0x9b, 0x97, 0x5e, 0x62, 0xce, 0x25, 0x7c, 0xcd, 0x1f, 0x7d, 0x72, 0x56, 0xac, 0x01, 0xa6, 0x25, 0x2d, 0x9a, 0xe3, 0xff, 0x6c, 0x32, 0x3d, 0xc2, 0x66, 0xb2, 0x7c, 0xb3, 0x6f, 0x53, 0x69, 0xd5, 0xaf, 0xfe, 0x77, 0xc8, 0x63, 0xad, 0x41, 0x7c, 0x5e, 0x8b, 0x90, 0xef, 0x84, 0x6e, 0xa5, 0xa4, 0x15, 0xc3, 0x16, 0xa1, 0x3d, 0x2d, 0xea, 0x6e, 0xfe, 0x7d, 0x2f, 0xb1, 0x86, 0x1e, 0x2d, 0x46, 0x65, 0x83, 0x4b, 0x70, 0xd1, 0x2f, 0x59, 0x08, 0xfb, 0xd5, 0x93, 0x73, 0xe8, 0x73, 0xcc, 0x7a, 0x55, 0xa1, 0x0e, 0xb1, 0xc6, 0x58, 0xc2, 0xaa, 0x5b, 0x84, 0x50, 0x24, 0xb5, 0xae, 0xad, 0x85, 0xb4, 0x8b, 0xb4, 0xe8, 0x33, 0xf6, 0xc8, 0x69, 0xa1, 0x75, 0xd4, 0x59, 0x6b, 0x7c, 0x0f, 0xb5, 0x28, 0xab, 0x57, 0x05, 0xca, 0xa9, 0x13, 0x9e, 0x37, 0x57, 0xac, 0x41, 0x6e, 0x0b, 0x72, 0xbb, 0x98, 0x5b, 0x39, 0x83, 0xad, 0x6a, 0xbb, 0x4e, 0xcc, 0xd2, 0x5a, 0x27, 0xb4, 0x7e, 0x3a, 0x8f, 0x27, 0xd1, 0x2c, 0xdb, 0x18, 0x32, 0x58, 0x6b, 0x8c, 0xf3, 0x58, 0x53, 0x8b, 0x10, 0xce, 0x7d, 0xbb, 0x4f, 0xcc, 0x5e, 0x16, 0xdf, 0xfb, 0x12, 0x73, 0xb6, 0x31, 0xd9, 0x92, 0xbc, 0xf5, 0x86, 0x74, 0x38, 0x50, 0xd3, 0x41, 0xd4, 0x2c, 0xea, 0x11, 0xf4, 0x8e, 0x1e, 0xc1, 0x58, 0xe4, 0x12, 0x4c, 0x76, 0x97, 0x60, 0xa6, 0x93, 0x7c, 0xbd, 0x73, 0xcf, 0x0c, 0x2d, 0x1e, 0x4b, 0x6c, 0x2b, 0xd6, 0x3d, 0xf0, 0xc3, 0xea, 0xb1, 0x1b, 0xe7, 0xc9, 0x56, 0x67, 0x7f, 0x70, 0xe9, 0x48, 0x2a, 0xe6, 0x7c, 0xd7, 0x65, 0x84, 0x2e, 0xba, 0x43, 0xad, 0x9f, 0x4e, 0x15, 0x60, 0x9a, 0xf8, 0x4e, 0xdc, 0x59, 0xb5, 0x77, 0x53, 0xa7, 0xc6, 0xe9, 0x3e, 0x48, 0x52, 0x3a, 0x4f, 0xf5, 0xc9, 0xe5, 0xba, 0xb2, 0x5d, 0x93, 0x78, 0x6b, 0x4c, 0x27, 0x7f, 0xa4, 0x77, 0x21, 0x6d, 0x5e, 0xd8, 0xf0, 0xf6, 0x8f, 0x76, 0xfd, 0x28, 0x38, 0x20, 0x0d, 0x2b, 0xa7, 0x1c, 0x39, 0x3e, 0xa7, 0x39, 0x3e, 0x22, 0xe1, 0x53, 0xec, 0x12, 0x2c, 0xc0, 0xa5, 0x00, 0xb8, 0x88, 0x84, 0x4b, 0xf5, 0x25, 0x36, 0x6f, 0xe9, 0x58, 0x42, 0x5b, 0x7b, 0x81, 0x65, 0x3b, 0xa7, 0xf0, 0x13, 0x17, 0xfa, 0xc5, 0x63, 0x37, 0x1a, 0x96, 0xd0, 0x3d, 0xc8, 0x0a, 0x5e, 0x06, 0x8e, 0x97, 0xe4, 0x72, 0x09, 0x36, 0x0a, 0x7c, 0x7d, 0x8e, 0x70, 0xdb, 0xc8, 0x6b, 0x5c, 0x10, 0xb6, 0x66, 0x50, 0x5d, 0x47, 0x27, 0x77, 0x22, 0x63, 0xa3, 0x2f, 0x09, 0x16, 0x71, 0xb1, 0xc8, 0xf7, 0x11, 0x5a, 0x97, 0x4a, 0x1a, 0x6b, 0x1d, 0xf2, 0x0a, 0xc8, 0xeb, 0x35, 0x4d, 0xa5, 0x19, 0xad, 0x71, 0xf0, 0xe5, 0xc1, 0x4e, 0x8d, 0x58, 0xc5, 0xe7, 0x1c, 0xf5, 0x74, 0x24, 0xb4, 0xda, 0x6c, 0x3a, 0xe3, 0x06, 0x6d, 0xb1, 0x82, 0xb7, 0x9f, 0x3c, 0x0e, 0xce, 0x93, 0x83, 0x28, 0xa9, 0x41, 0x49, 0xe3, 0xdb, 0x83, 0xbb, 0x06, 0xd1, 0x2e, 0x26, 0x77, 0x64, 0xb4, 0xec, 0x2c, 0xb7, 0x34, 0xce, 0x70, 0x7b, 0xc6, 0xc4, 0x6d, 0x00, 0x1b, 0xe6, 0x97, 0x33, 0x1c, 0xe3, 0xd5, 0xb0, 0x28, 0x8d, 0x8a, 0x55, 0x79, 0xc3, 0xa6, 0xe2, 0xbc, 0xdc, 0xb3, 0x9d, 0x66, 0x63, 0x3d, 0x94, 0x8d, 0x90, 0x36, 0xaa, 0xb1, 0xf5, 0xe9, 0x49, 0x4c, 0x6b, 0xa3, 0xfa, 0x4d, 0xdb, 0xbd, 0xa3, 0x1d, 0x3a, 0xd6, 0xa1, 0x61, 0x4c, 0x83, 0xb4, 0xec, 0x30, 0xde, 0xf5, 0xca, 0x3b, 0xa3, 0x77, 0x11, 0xef, 0xde, 0xd1, 0x10, 0xde, 0xa0, 0xbd, 0x69, 0x60, 0x7b, 0x66, 0x5d, 0xe6, 0xb7, 0x0c, 0x3e, 0xc3, 0x26, 0xf8, 0x9e, 0xbb, 0xe4, 0xd3, 0x8a, 0x9d, 0xf1, 0xf9, 0x07, 0x44, 0x6d, 0x47, 0x8f, 0xd6, 0xe7, 0x74, 0x69, 0x1b, 0x3c, 0x2e, 0x56, 0x1a, 0x63, 0xc5, 0x53, 0xe8, 0x24, 0x8b, 0xc6, 0x0b, 0x9a, 0x97, 0x72, 0xcd, 0xb1, 0x85, 0x46, 0x49, 0xc9, 0x9b, 0xf6, 0x29, 0xb4, 0x16, 0x9a, 0xe5, 0x85, 0x1d, 0x4c, 0x77, 0x52, 0x4d, 0xe2, 0xd8, 0x87, 0xd4, 0x35, 0x6e, 0xbe, 0x42, 0x34, 0xde, 0xaa, 0xe0, 0x1f, 0xca, 0xf5, 0xf7, 0xa7, 0xb4, 0x79, 0x26, 0xbc, 0xbd, 0xb0, 0x97, 0x65, 0xd3, 0xde, 0x23, 0xe5, 0x0e, 0x3a, 0x81, 0xad, 0xc2, 0x9c, 0xe1, 0xef, 0x87, 0x34, 0xfc, 0x53, 0x24, 0x7b, 0xef, 0xe3, 0x78, 0x9e, 0x22, 0xfe, 0xd1, 0xd4, 0x02, 0xf3, 0x65, 0x74, 0x76, 0xae, 0x88, 0xf1, 0xdb, 0x77, 0x9f, 0xa1, 0x93, 0xa3, 0x0e, 0xe5, 0x7d, 0x67, 0xe6, 0x3d, 0x58, 0x77, 0xff, 0x24, 0xb5, 0x9a, 0xd5, 0xeb, 0xca, 0x2e, 0xe2, 0x3b, 0x85, 0x69, 0x3f, 0xb4, 0x4b, 0x4b, 0xa7, 0xd7, 0xe8, 0x04, 0x01, 0xed, 0x21, 0xa6, 0x73, 0x2d, 0x7c, 0x67, 0xb2, 0x49, 0x92, 0x40, 0x35, 0x3e, 0xef, 0xe7, 0xac, 0x95, 0x8c, 0xa0, 0x95, 0x36, 0x6c, 0xe2, 0xb1, 0x48, 0xf2, 0x9e, 0x2b, 0xa9, 0x81, 0xea, 0x55, 0xeb, 0x72, 0x7c, 0x45, 0x5d, 0x26, 0x45, 0x8b, 0x71, 0x8d, 0x7d, 0xa1, 0x06, 0xa3, 0xdf, 0xc5, 0xee, 0x0e, 0xe7, 0x72, 0x98, 0x6b, 0x5c, 0x06, 0xba, 0x75, 0x0e, 0xba, 0x12, 0xa8, 0x19, 0x76, 0x2a, 0xed, 0xae, 0xbc, 0xa4, 0xf5, 0x1e, 0x1f, 0x35, 0x39, 0x3e, 0xff, 0x88, 0xce, 0xb1, 0x87, 0xf9, 0x09, 0x76, 0x15, 0x87, 0x35, 0xe9, 0xbb, 0xb6, 0x78, 0xae, 0x7f, 0x81, 0xfd, 0x9d, 0x9d, 0x60, 0xea, 0xd7, 0x68, 0xfa, 0x2b, 0x41, 0x2a, 0x62, 0x8a, 0x3c, 0xa8, 0xba, 0xa4, 0xad, 0xad, 0xfc, 0xf8, 0x00, 0x23, 0xfb, 0x3e, 0xc1, 0xe8, 0x4c, 0x5a, 0x0b, 0xf3, 0xad, 0xdb, 0xc8, 0xef, 0xc3, 0xbf, 0xff, 0x24, 0x78, 0x73, 0x11, 0xe1, 0x00, 0xce, 0x5c, 0x44, 0x92, 0x39, 0xc1, 0x00, 0xb9, 0xe9, 0xf8, 0x3f, 0x1f, 0x7f, 0xd5, 0xe3, 0xf8, 0xfc, 0xe2, 0xe2, 0xbf, 0x59, 0x34, 0x9c, 0xde, 0xcb, 0xb8, 0x5e, 0xff, 0x78, 0x37, 0x4b, 0xb4, 0xd2, 0x18, 0xd1, 0xf8, 0xc8, 0xd3, 0x27, 0xb1, 0x84, 0xba, 0x3f, 0x0e, 0xd2, 0x06, 0xf6, 0xbb, 0xcb, 0xa5, 0x6d, 0x52, 0x5a, 0x24, 0xf6, 0x68, 0x97, 0x7b, 0x4a, 0xda, 0xe5, 0xf4, 0x89, 0x60, 0x85, 0xbb, 0xb5, 0x16, 0xba, 0x2b, 0x9e, 0x5b, 0xf6, 0x74, 0x97, 0x82, 0x1a, 0x60, 0x77, 0x2e, 0x53, 0xee, 0xab, 0x26, 0x7f, 0x16, 0xe7, 0x79, 0xf2, 0x02, 0x5d, 0xe5, 0xad, 0xda, 0x98, 0xe6, 0xf9, 0xb1, 0x12, 0x95, 0xe7, 0x75, 0xe0, 0xf8, 0x71, 0x40, 0x95, 0x93, 0x3e, 0xb0, 0x9b, 0xca, 0xfc, 0x1f, 0xe9, 0x32, 0x9f, 0x8d, 0x7f, 0x69, 0x99, 0x87, 0x60, 0xc9, 0xd3, 0x9a, 0x71, 0x01, 0xdd, 0x8c, 0x31, 0xbf, 0x97, 0x4d, 0x55, 0xf7, 0x74, 0xf2, 0x9d, 0x50, 0xea, 0xa9, 0x3d, 0x65, 0xff, 0xdb, 0x32, 0x58, 0x5d, 0xda, 0xe4, 0x8e, 0xa8, 0x9c, 0x47, 0x7c, 0x6b, 0x99, 0x90, 0xbc, 0xf9, 0x26, 0x54, 0x6e, 0x9a, 0xc6, 0x77, 0x66, 0x95, 0xf2, 0x33, 0x8e, 0x0e, 0xe3, 0xda, 0x42, 0x17, 0x6b, 0x09, 0x89, 0xa6, 0x39, 0xec, 0x01, 0xa4, 0xb8, 0xc3, 0x46, 0x92, 0xe6, 0x7c, 0xb7, 0x7c, 0x75, 0x88, 0x76, 0x28, 0xda, 0xc4, 0xc7, 0x40, 0x0d, 0x5d, 0xf0, 0x31, 0xe9, 0x69, 0x4e, 0x11, 0xc5, 0x73, 0xcb, 0x68, 0x45, 0xc7, 0x0e, 0x3a, 0xc0, 0xd6, 0x73, 0xb1, 0x59, 0x7c, 0x1f, 0x8a, 0x86, 0xdf, 0x10, 0x42, 0x37, 0x24, 0xbd, 0x4d, 0x34, 0xe4, 0x56, 0x8c, 0xd5, 0x5a, 0x25, 0x7a, 0x60, 0x59, 0xe7, 0xf9, 0x4d, 0x21, 0x1d, 0xe6, 0x50, 0xd0, 0x35, 0xba, 0x32, 0x0f, 0x76, 0x4a, 0xd3, 0x20, 0xdd, 0x7c, 0x7c, 0xa0, 0xaf, 0xfb, 0xbd, 0xba, 0x77, 0x98, 0xea, 0xdf, 0xdc, 0xf1, 0xbb, 0x94, 0xd7, 0xf1, 0x6d, 0xb4, 0x6f, 0xf9, 0x5b, 0xa3, 0xe9, 0xfb, 0xc2, 0x13, 0xf1, 0x8c, 0xf7, 0xad, 0x56, 0xb7, 0x6d, 0x0d, 0x33, 0xa4, 0x6f, 0xd0, 0x25, 0x9b, 0x7b, 0xd5, 0xd3, 0xb4, 0x8b, 0x8a, 0xe6, 0xfb, 0x92, 0xb4, 0x97, 0xff, 0x70, 0xcb, 0x10, 0xc6, 0x83, 0x31, 0x7c, 0x3e, 0xe3, 0x6f, 0x0f, 0x74, 0x68, 0x74, 0x55, 0x17, 0x34, 0x86, 0x9b, 0x6f, 0xdc, 0x4f, 0xae, 0x26, 0x91, 0x0d, 0x24, 0x1c, 0x54, 0xb4, 0xe5, 0x44, 0x6e, 0xa1, 0x5b, 0x48, 0x84, 0xcb, 0x0b, 0x51, 0x46, 0x63, 0x29, 0xf4, 0x6b, 0xcc, 0xfc, 0x86, 0xb2, 0xd1, 0x89, 0xe5, 0x09, 0x62, 0x06, 0x9e, 0x99, 0xb1, 0xad, 0xca, 0x4a, 0x4d, 0x0a, 0x76, 0x87, 0x90, 0xe0, 0xbb, 0xf4, 0x17, 0x12, 0x9e, 0xa6, 0x34, 0x9e, 0x07, 0xff, 0x1e, 0x8c, 0x68, 0x6b, 0xf2, 0xe6, 0xe4, 0x89, 0xd0, 0xf8, 0xfd, 0x86, 0x45, 0x74, 0xa3, 0x44, 0xce, 0x8f, 0x23, 0x29, 0x58, 0xfc, 0xc6, 0xb5, 0x82, 0x30, 0xbf, 0x95, 0x3b, 0x67, 0x18, 0x34, 0x75, 0xa3, 0xe4, 0x4f, 0x0a, 0xdd, 0x1a, 0x4d, 0xf2, 0x16, 0x65, 0x7e, 0x3e, 0x93, 0xbc, 0xfe, 0x15, 0x79, 0x2e, 0xb6, 0x24, 0x22, 0xbb, 0xe8, 0x8e, 0xaf, 0x22, 0x8d, 0x26, 0xdc, 0xed, 0xea, 0x4d, 0xfc, 0x4e, 0xf8, 0x1c, 0x7c, 0x48, 0xf7, 0x98, 0xd3, 0xfb, 0x35, 0x66, 0x76, 0x41, 0x0b, 0x41, 0x27, 0x53, 0xec, 0x13, 0x56, 0x80, 0x91, 0x45, 0x67, 0xac, 0x44, 0x1e, 0x1f, 0x63, 0xb6, 0xc8, 0xfc, 0x63, 0x43, 0x2e, 0x5a, 0x85, 0xc0, 0xec, 0x5b, 0x09, 0x0e, 0x03, 0xa6, 0x05, 0x74, 0xce, 0xce, 0xc6, 0xc2, 0xa2, 0xe8, 0x86, 0xae, 0xe5, 0x85, 0xae, 0x35, 0x3f, 0xc3, 0x8f, 0xea, 0x01, 0x46, 0x4a, 0x9e, 0xe7, 0xe8, 0x0b, 0xad, 0x05, 0x80, 0x5b, 0x9c, 0x8a, 0x7e, 0xa6, 0xb4, 0x8b, 0xb7, 0xe8, 0x97, 0x91, 0xc2, 0x09, 0x2d, 0x32, 0xf1, 0xd4, 0xdf, 0xde, 0x94, 0x6a, 0xe1, 0xa9, 0x6f, 0xdd, 0x94, 0x6a, 0x0e, 0x9b, 0x78, 0xeb, 0xcf, 0xf1, 0xb6, 0xef, 0x43, 0x1f, 0xf6, 0xa2, 0x4e, 0x33, 0x9f, 0xb5, 0x8d, 0x62, 0x87, 0xd0, 0xcb, 0x6f, 0xcd, 0x81, 0x2e, 0x7f, 0xb3, 0x37, 0xc0, 0xd3, 0x21, 0x0c, 0x20, 0x6c, 0x5e, 0xd0, 0xcb, 0x5c, 0xc2, 0x20, 0x7e, 0x6d, 0xc2, 0x63, 0xf8, 0xcd, 0x12, 0xb6, 0xf2, 0x3d, 0x97, 0x97, 0x85, 0x1f, 0x35, 0x5c, 0x10, 0xb6, 0x7b, 0x8a, 0x84, 0x1d, 0x9e, 0x61, 0x61, 0xe7, 0x82, 0xde, 0x3f, 0x9b, 0x84, 0xa7, 0xc9, 0x2f, 0x21, 0xfc, 0x14, 0xf1, 0x67, 0x50, 0xf2, 0x67, 0x08, 0xcf, 0xf1, 0xd2, 0xbb, 0xf1, 0x5b, 0x28, 0x0c, 0xe3, 0x57, 0x2b, 0x3c, 0xcf, 0x61, 0xbc, 0xc8, 0x73, 0xee, 0xad, 0xbc, 0x20, 0x0c, 0xc0, 0x96, 0xdc, 0x87, 0x12, 0x2f, 0x23, 0x8c, 0x20, 0xbc, 0x82, 0x70, 0x18, 0x25, 0x8f, 0xe0, 0x79, 0x14, 0xd0, 0xdf, 0xa0, 0xda, 0x72, 0xfe, 0x2a, 0xbc, 0x89, 0xbc, 0x4f, 0x21, 0xef, 0x09, 0x15, 0xbf, 0x53, 0xea, 0xf3, 0x6d, 0xe4, 0xfb, 0x13, 0xc2, 0x39, 0x84, 0xf7, 0x90, 0xe7, 0x69, 0xe4, 0xe9, 0x95, 0xf2, 0xc5, 0x76, 0xb6, 0x90, 0xd3, 0xe3, 0x43, 0xb4, 0xfa, 0x19, 0x3a, 0x79, 0x43, 0xab, 0x6d, 0xc8, 0xd3, 0x89, 0x10, 0x43, 0x88, 0xdc, 0xcc, 0x8d, 0xcc, 0xb2, 0x6f, 0xc2, 0x5a, 0x66, 0x62, 0x15, 0xed, 0x6d, 0xff, 0x92, 0x34, 0xd3, 0xcd, 0x69, 0x29, 0x5e, 0xfa, 0x90, 0x46, 0x2e, 0xe6, 0x52, 0xf2, 0x0c, 0x99, 0x49, 0xde, 0x08, 0x67, 0x14, 0x99, 0x1e, 0x6e, 0x87, 0xf4, 0x28, 0x71, 0xb6, 0xf3, 0x35, 0x7a, 0xe3, 0x41, 0xe5, 0xae, 0xc2, 0x17, 0x59, 0x45, 0x98, 0x38, 0xca, 0xc1, 0x2c, 0x4f, 0x1c, 0xb5, 0xfa, 0x9f, 0x7c, 0x9d, 0xfe, 0xf6, 0x04, 0x7a, 0x6d, 0x3f, 0x8d, 0x41, 0xf2, 0x01, 0xa7, 0xef, 0xbb, 0x8a, 0xb0, 0x28, 0x13, 0xbb, 0x58, 0x99, 0xb5, 0x4b, 0xe8, 0x44, 0xbe, 0x2e, 0xa1, 0xf7, 0xc7, 0x6f, 0x38, 0xbb, 0x20, 0x71, 0x5f, 0x94, 0x5f, 0x9b, 0xe3, 0x16, 0x22, 0xca, 0xbd, 0x54, 0xdc, 0x73, 0xad, 0x7a, 0x52, 0x31, 0x1e, 0xe8, 0x36, 0x82, 0x01, 0x3c, 0x2d, 0xe1, 0x5e, 0x3f, 0xda, 0x1b, 0xce, 0x87, 0x7c, 0x4d, 0x10, 0x56, 0x86, 0x29, 0x7c, 0x0d, 0xaa, 0x81, 0x5b, 0xb9, 0x12, 0xf1, 0xc0, 0xec, 0x0e, 0xe1, 0x02, 0x2b, 0x57, 0xdf, 0x2e, 0xa6, 0xff, 0xf6, 0x09, 0xad, 0x25, 0x0a, 0x9d, 0xe1, 0x0a, 0x55, 0xeb, 0x9f, 0xa2, 0xdc, 0x79, 0x27, 0xc4, 0x78, 0xf9, 0x56, 0x3a, 0xf9, 0x22, 0x44, 0x42, 0x33, 0x32, 0xef, 0xc7, 0xbe, 0x41, 0x3e, 0xa6, 0x4e, 0xf2, 0xea, 0x09, 0x1b, 0xf9, 0x0e, 0x83, 0x8d, 0xd0, 0x40, 0xae, 0x3a, 0xbb, 0x14, 0x3f, 0x78, 0x92, 0xda, 0x94, 0xce, 0x31, 0x0c, 0x82, 0x17, 0x2d, 0x9c, 0x1e, 0x3e, 0x40, 0x89, 0x28, 0x16, 0x3f, 0x5a, 0xf5, 0x0a, 0x20, 0x77, 0x86, 0xf4, 0x92, 0xdd, 0xea, 0x26, 0x99, 0x36, 0xf1, 0x06, 0x6e, 0xe5, 0x0d, 0xf2, 0xfb, 0x1c, 0xa5, 0x27, 0xeb, 0xfc, 0x62, 0xbf, 0x46, 0x72, 0xd3, 0x6b, 0x9c, 0xea, 0x69, 0x13, 0xbf, 0x27, 0xcf, 0x53, 0x04, 0x23, 0xb2, 0x88, 0x69, 0xa6, 0xd3, 0x0a, 0x7e, 0x16, 0xde, 0x68, 0xb7, 0x63, 0x36, 0x82, 0x0e, 0x61, 0xd2, 0x82, 0xde, 0xc0, 0x67, 0x4c, 0x5f, 0x08, 0x1c, 0x99, 0xa1, 0xf2, 0x02, 0xd3, 0x47, 0x74, 0x24, 0x03, 0xf5, 0xe9, 0xfb, 0xfc, 0x1f, 0xa1, 0xd5, 0x8f, 0xf3, 0x83, 0xe9, 0x75, 0x7d, 0x8c, 0xd5, 0xd4, 0xde, 0x09, 0x51, 0x9f, 0x67, 0x0a, 0x0e, 0xee, 0x17, 0xc2, 0x3a, 0xbf, 0x10, 0xba, 0xa2, 0xd8, 0xf0, 0xf4, 0x9d, 0x3c, 0x05, 0xfc, 0x5c, 0x0e, 0xe0, 0x4a, 0x9a, 0xc6, 0xbe, 0x08, 0xf3, 0xf7, 0x85, 0x0d, 0xa6, 0x5b, 0xe9, 0x2f, 0x99, 0x6c, 0xeb, 0x0f, 0x5f, 0x54, 0xf2, 0xf9, 0xde, 0xaf, 0x28, 0x81, 0x1c, 0xe0, 0x73, 0x1a, 0x4a, 0xd8, 0xc8, 0x5a, 0xe5, 0xf7, 0x80, 0x8f, 0xdb, 0x3d, 0xab, 0xa3, 0x76, 0xcd, 0xe6, 0xf8, 0xc6, 0xac, 0x23, 0x03, 0xe1, 0xf9, 0x76, 0xcd, 0x2f, 0x37, 0x1d, 0x19, 0x08, 0xe5, 0x1d, 0xe8, 0x6b, 0xcd, 0xa5, 0x1b, 0x00, 0x8e, 0xf4, 0x97, 0x62, 0x64, 0xed, 0xf8, 0x2d, 0xb4, 0xda, 0xca, 0xed, 0x5b, 0xc4, 0x5a, 0x9b, 0xdb, 0xfc, 0x1f, 0x8d, 0x83, 0x7c, 0x5c, 0x5f, 0xab, 0xfc, 0x58, 0xcf, 0x4e, 0x6e, 0x91, 0x34, 0xa2, 0xdb, 0x2e, 0x9c, 0x7f, 0x3c, 0x6c, 0xb1, 0x56, 0xd9, 0x3d, 0x36, 0x9f, 0xed, 0x3f, 0x1a, 0xb7, 0xec, 0xe3, 0xdf, 0xe9, 0xaf, 0xde, 0x9c, 0xdc, 0x74, 0xfc, 0xb7, 0x0f, 0x67, 0x1d, 0x7e, 0x14, 0x35, 0x6d, 0xb7, 0x7a, 0x4c, 0xff, 0xde, 0xd8, 0x17, 0x1a, 0x23, 0x9b, 0xfc, 0x64, 0x9f, 0x9d, 0x9d, 0xea, 0x73, 0x64, 0x0d, 0xf6, 0x3f, 0x9c, 0x75, 0xf4, 0xd1, 0x70, 0x89, 0x23, 0xeb, 0xd7, 0x03, 0x47, 0x1f, 0x0d, 0xe5, 0x5a, 0x2a, 0x98, 0x16, 0x75, 0xeb, 0x5e, 0xef, 0x17, 0xab, 0x01, 0xb9, 0x72, 0xfb, 0xa0, 0x43, 0xef, 0x1d, 0x38, 0x39, 0x70, 0x6a, 0x60, 0xea, 0x5e, 0x87, 0x5c, 0x26, 0xab, 0x75, 0x5f, 0x71, 0x08, 0xe7, 0xb7, 0x86, 0x67, 0x5a, 0xbd, 0x4f, 0x1c, 0x9d, 0xbd, 0xd7, 0x31, 0x5e, 0x36, 0xde, 0xb8, 0xe5, 0xfe, 0x41, 0x5e, 0xeb, 0x65, 0xef, 0xc0, 0x69, 0xfc, 0xa7, 0x12, 0x1b, 0xb3, 0x0e, 0x0f, 0x84, 0x67, 0x88, 0x95, 0xde, 0x3e, 0x9b, 0xe7, 0xad, 0x57, 0xad, 0x55, 0xbf, 0x7f, 0x75, 0xea, 0xde, 0xdd, 0xf2, 0x53, 0x29, 0x18, 0x75, 0xef, 0x18, 0x2b, 0x14, 0xda, 0x94, 0x94, 0xf0, 0xfb, 0xc9, 0x30, 0xcf, 0xf2, 0x75, 0x3f, 0xb7, 0xa4, 0xcd, 0x3b, 0xdc, 0x38, 0x68, 0xcd, 0xe1, 0x16, 0xa8, 0x72, 0xf7, 0xd7, 0x45, 0x29, 0x60, 0xf3, 0x45, 0xb5, 0xfb, 0x06, 0x5b, 0x6b, 0x36, 0xb0, 0x1a, 0xd0, 0xc5, 0x9a, 0xf5, 0xee, 0x96, 0xfe, 0x4d, 0x76, 0x81, 0xd6, 0x47, 0x36, 0xf7, 0xd9, 0x6b, 0xed, 0xbf, 0xbd, 0x7f, 0x90, 0xbe, 0xb7, 0x5d, 0xb3, 0x1a, 0xbe, 0xd3, 0x77, 0x7e, 0x8b, 0x5d, 0x08, 0x6e, 0x12, 0xab, 0x8e, 0xff, 0xd6, 0xae, 0x3f, 0x35, 0xe8, 0xed, 0x3b, 0xd1, 0x27, 0x56, 0x1e, 0x7f, 0xb5, 0xf2, 0xca, 0xe0, 0xf8, 0xef, 0x7f, 0xab, 0x40, 0x57, 0x68, 0xa8, 0xec, 0x82, 0x55, 0xee, 0x1e, 0xb3, 0xba, 0xc5, 0xda, 0xe0, 0x16, 0xcc, 0xe0, 0xd7, 0xa9, 0x3f, 0xf3, 0x6e, 0x35, 0xbd, 0x1a, 0x1a, 0x53, 0xfb, 0x58, 0xed, 0xdf, 0xbc, 0x5b, 0x69, 0x5e, 0x50, 0x7a, 0x36, 0xa4, 0x05, 0x1f, 0xf0, 0xde, 0xe5, 0x65, 0x29, 0x87, 0x3b, 0x5d, 0x86, 0x9f, 0x36, 0xd3, 0x8b, 0x42, 0xb0, 0xcf, 0xea, 0xf6, 0x4f, 0x0d, 0x5d, 0xdb, 0x36, 0x08, 0xbe, 0xcd, 0xe2, 0xdc, 0x62, 0xe6, 0x96, 0x79, 0x0f, 0xed, 0x23, 0x6d, 0xec, 0x03, 0xaf, 0x98, 0xcd, 0x04, 0x95, 0x76, 0xa7, 0x59, 0xb6, 0x6d, 0x0a, 0xe9, 0xfd, 0x9a, 0xd0, 0x07, 0xca, 0x3d, 0x2d, 0xf6, 0x59, 0xca, 0x4d, 0x43, 0x74, 0xe2, 0x8b, 0xca, 0xf1, 0x75, 0x51, 0x37, 0x95, 0xb2, 0xfa, 0x50, 0xce, 0x68, 0x9e, 0x61, 0x3a, 0x1c, 0xba, 0x82, 0x91, 0x78, 0x2b, 0xc1, 0x09, 0x5d, 0x57, 0x6e, 0x18, 0x0a, 0x3c, 0x44, 0x16, 0x76, 0x09, 0x70, 0x1a, 0xbd, 0xc4, 0x0c, 0xa5, 0x2e, 0xa6, 0x3b, 0x7c, 0x89, 0xe9, 0x8f, 0x55, 0xd2, 0xca, 0x80, 0x1a, 0x33, 0x1c, 0xeb, 0x4b, 0xf1, 0x2e, 0xf9, 0x08, 0xf4, 0x46, 0xda, 0x47, 0xc1, 0x5a, 0xf3, 0x6d, 0xcc, 0xe3, 0xf1, 0x79, 0x06, 0x5e, 0x2d, 0xd1, 0xf8, 0xdc, 0xf3, 0x5d, 0xcc, 0x40, 0x6f, 0x52, 0x89, 0x4d, 0x38, 0xb7, 0xe5, 0xdc, 0xa0, 0x9a, 0xe7, 0x6a, 0xfc, 0x55, 0x5a, 0x0b, 0x93, 0x65, 0xab, 0xe6, 0xf0, 0xa8, 0xcf, 0xf3, 0x1a, 0x82, 0xdf, 0x13, 0x32, 0x9c, 0xe8, 0x6f, 0xd3, 0xc1, 0x7e, 0xd6, 0xaf, 0xd6, 0x34, 0xc6, 0x15, 0xef, 0x56, 0x4c, 0x20, 0xe8, 0x1d, 0x5a, 0x6f, 0x9f, 0x97, 0x5a, 0xa0, 0xc7, 0x5b, 0xdc, 0xab, 0x49, 0xdd, 0x5e, 0x33, 0x0e, 0x0d, 0x4e, 0xd3, 0xa1, 0x51, 0x4e, 0x40, 0x05, 0x1e, 0xe2, 0xbe, 0x30, 0xe0, 0x9c, 0xf9, 0x9d, 0xd2, 0x32, 0x6f, 0xbb, 0x41, 0x5c, 0x4b, 0xf7, 0x98, 0x7c, 0x59, 0x7e, 0xda, 0x33, 0xf0, 0xf7, 0xf2, 0x63, 0xfc, 0xd1, 0x1e, 0x44, 0x8b, 0x03, 0x63, 0x10, 0xd6, 0xb5, 0xe8, 0x1f, 0xe8, 0xd4, 0xda, 0xf2, 0xa4, 0xfc, 0x98, 0x00, 0x9d, 0xed, 0xd1, 0xb0, 0x3e, 0xb0, 0x0d, 0x32, 0x47, 0x2b, 0x95, 0x06, 0xb6, 0x9d, 0xdc, 0x24, 0x19, 0xec, 0xda, 0x53, 0x9b, 0xfe, 0xc7, 0xa6, 0x88, 0xb0, 0x39, 0xae, 0xac, 0x54, 0x8a, 0x51, 0x3d, 0xf3, 0x0f, 0x74, 0x71, 0x4e, 0x5c, 0xf6, 0xaa, 0xa4, 0x85, 0x5d, 0xf4, 0xaa, 0x57, 0x08, 0x1d, 0x49, 0xea, 0xcf, 0x5a, 0xce, 0xc7, 0xe4, 0xdd, 0x08, 0xac, 0xe7, 0x7f, 0x72, 0xeb, 0x43, 0xfc, 0x44, 0x68, 0x0a, 0x63, 0xac, 0xed, 0x4d, 0x84, 0x32, 0x50, 0x6e, 0x04, 0x01, 0x94, 0x6b, 0xcd, 0x63, 0x6c, 0xf5, 0x61, 0x84, 0x61, 0x84, 0x9d, 0x08, 0x8f, 0x40, 0xa7, 0x7b, 0x0d, 0xe1, 0x79, 0xc6, 0x1e, 0x04, 0x7c, 0xe9, 0x28, 0x42, 0x37, 0x42, 0x39, 0x63, 0x2b, 0x5b, 0x11, 0x6a, 0x10, 0xf2, 0x19, 0x5b, 0x81, 0x32, 0x2b, 0xf6, 0x23, 0x68, 0x19, 0xfb, 0x2e, 0xd2, 0x96, 0xa3, 0xec, 0x77, 0x90, 0xff, 0xfe, 0xd7, 0x11, 0x0e, 0x22, 0xbc, 0x88, 0xf0, 0x53, 0x84, 0x1f, 0x21, 0x00, 0xe6, 0xfd, 0xa8, 0xff, 0x7e, 0x0c, 0xf5, 0xfb, 0x1b, 0x10, 0x16, 0x21, 0x14, 0x21, 0xcc, 0x40, 0xd0, 0x31, 0xd6, 0x72, 0x15, 0xe1, 0x2c, 0xc2, 0x31, 0x84, 0x51, 0x84, 0xbd, 0x08, 0x4f, 0x23, 0x6c, 0x43, 0x00, 0x8e, 0x2d, 0x31, 0x04, 0x28, 0x0e, 0x2d, 0x2d, 0x08, 0x3e, 0x04, 0xc8, 0xc9, 0x16, 0x27, 0x42, 0x01, 0x42, 0x2e, 0x02, 0x9a, 0x76, 0xdf, 0x15, 0x84, 0x73, 0x08, 0x27, 0x11, 0x80, 0xf3, 0x7d, 0x07, 0x10, 0x9e, 0x43, 0x00, 0x5e, 0xf7, 0xf5, 0x83, 0x4e, 0xef, 0x21, 0x00, 0xaf, 0x65, 0x80, 0xbb, 0xcc, 0xcb, 0x58, 0x33, 0xea, 0x69, 0xf6, 0x33, 0xd6, 0x74, 0x9d, 0xb1, 0xc6, 0x57, 0x10, 0x90, 0x37, 0xf8, 0x01, 0xc2, 0x19, 0x04, 0xb4, 0x3f, 0x88, 0xf2, 0x41, 0xd0, 0xc0, 0x6f, 0x67, 0xcc, 0x8b, 0x3a, 0xbf, 0xf5, 0x32, 0xc2, 0x4f, 0x60, 0x66, 0xa1, 0x4d, 0xe5, 0x1d, 0x08, 0x33, 0x19, 0xfb, 0x26, 0xf2, 0x7d, 0x73, 0x23, 0x82, 0x8d, 0xb1, 0x22, 0x94, 0xbf, 0xab, 0x13, 0xe1, 0x01, 0xc6, 0xee, 0x00, 0x4e, 0x22, 0x9e, 0xb7, 0xa3, 0xed, 0xf9, 0x25, 0x8c, 0x4d, 0x47, 0x7b, 0xa7, 0x03, 0xdf, 0xe9, 0x66, 0xc6, 0xa6, 0xed, 0xc3, 0xac, 0x88, 0xfa, 0x0c, 0x28, 0x67, 0x00, 0xe2, 0x93, 0x8a, 0x21, 0xec, 0x81, 0xbb, 0x06, 0x74, 0x10, 0x12, 0xa4, 0x15, 0x21, 0xbc, 0x81, 0x00, 0x1a, 0x08, 0xbb, 0x10, 0x90, 0xce, 0xda, 0x11, 0x40, 0x63, 0x06, 0x9a, 0xb1, 0x33, 0xca, 0x9f, 0x4f, 0xeb, 0x38, 0x85, 0x70, 0x04, 0x01, 0xf5, 0x76, 0x20, 0x5f, 0xc7, 0x06, 0xf4, 0xab, 0x1b, 0x7d, 0x86, 0x72, 0x0f, 0xa2, 0xaf, 0x24, 0xe0, 0x2e, 0xe1, 0xdb, 0xca, 0xa7, 0x10, 0x80, 0xd7, 0xca, 0x00, 0x02, 0x0c, 0xfc, 0x15, 0x68, 0xef, 0x0a, 0xd0, 0x62, 0x05, 0xfa, 0x69, 0xc5, 0x33, 0x08, 0x5b, 0x11, 0x1e, 0x46, 0x1f, 0x5e, 0x44, 0x40, 0xfb, 0x1f, 0x00, 0xed, 0x1e, 0x20, 0x7a, 0xa2, 0xcf, 0x97, 0x21, 0x6d, 0x19, 0xda, 0xb8, 0x0c, 0xfd, 0xb6, 0xac, 0x0e, 0xa1, 0x14, 0x34, 0xbb, 0x8c, 0xf0, 0x27, 0x04, 0xe4, 0x6b, 0x0e, 0x82, 0x7e, 0x28, 0xd3, 0x88, 0xbe, 0x6e, 0x04, 0x0d, 0x82, 0xf8, 0x16, 0x44, 0xdf, 0x04, 0x81, 0xe7, 0xb7, 0x01, 0xb3, 0x01, 0x7c, 0x57, 0x0f, 0x60, 0x4b, 0xd1, 0x7f, 0x75, 0x68, 0xbf, 0x1f, 0xf5, 0xf9, 0xb7, 0x23, 0x00, 0xce, 0xe2, 0x28, 0x02, 0xe0, 0x56, 0xa3, 0x0d, 0xd5, 0x56, 0xd0, 0x18, 0x6d, 0xf6, 0x02, 0x9e, 0x17, 0x70, 0xaa, 0x80, 0x7f, 0x25, 0xf0, 0xaa, 0xc4, 0xfb, 0xbd, 0xe0, 0x89, 0x7b, 0xd0, 0x96, 0x6f, 0x3d, 0x0b, 0x9a, 0xa3, 0x6f, 0xcb, 0x41, 0xb7, 0x72, 0xc0, 0x2c, 0x07, 0xbc, 0x72, 0xd0, 0xf9, 0x9b, 0x48, 0xff, 0x26, 0xfa, 0xf4, 0x9b, 0x9b, 0x11, 0x40, 0xa7, 0x6f, 0x36, 0x21, 0x00, 0xfe, 0x37, 0xc1, 0xd7, 0x65, 0xa0, 0x67, 0x19, 0xf8, 0xba, 0x0c, 0x3c, 0xf0, 0x0f, 0x80, 0xb3, 0xf0, 0x04, 0x2c, 0x6f, 0xd0, 0xa4, 0x14, 0xf9, 0x4a, 0x57, 0x21, 0x2c, 0x47, 0x58, 0x06, 0xcb, 0x05, 0x34, 0x29, 0x01, 0x6f, 0x94, 0x80, 0xd6, 0xae, 0x41, 0x04, 0xd0, 0xb2, 0x18, 0x70, 0x8b, 0x81, 0x43, 0xf1, 0x0a, 0x04, 0xd0, 0x6e, 0x2e, 0x60, 0xcd, 0x3d, 0x8d, 0x00, 0x3c, 0x9d, 0x18, 0x3f, 0x73, 0xd0, 0xfe, 0x39, 0xc8, 0x33, 0x07, 0xfc, 0x5f, 0x84, 0x71, 0x70, 0x17, 0xc6, 0x86, 0x03, 0xb4, 0xbf, 0x13, 0xed, 0xba, 0x13, 0xf4, 0xb6, 0x21, 0x6e, 0x03, 0x7f, 0xdf, 0x01, 0x3e, 0xb2, 0x9e, 0x67, 0x6c, 0x36, 0xea, 0x98, 0x0d, 0x3c, 0x66, 0x83, 0x8e, 0xb3, 0x40, 0xff, 0x59, 0x3f, 0x43, 0x00, 0x9d, 0x6e, 0x47, 0x3f, 0xdc, 0x0e, 0x9c, 0x6e, 0x47, 0x1f, 0xde, 0x3e, 0x1f, 0x01, 0x26, 0x60, 0x01, 0xea, 0x29, 0x00, 0xaf, 0xdc, 0x86, 0xf4, 0xdb, 0x44, 0xc6, 0x66, 0xa0, 0xdd, 0x33, 0xd0, 0xc6, 0x19, 0xe0, 0xbb, 0x19, 0xe0, 0xa7, 0x5b, 0x51, 0xcf, 0xad, 0x68, 0xd7, 0xad, 0xa0, 0xe7, 0xad, 0x18, 0x4f, 0xb7, 0xd2, 0xd5, 0xf9, 0x63, 0x08, 0x68, 0x83, 0x05, 0xe9, 0x16, 0x0b, 0x02, 0xda, 0xf2, 0x0d, 0xd0, 0xff, 0x1b, 0xa8, 0x23, 0x1f, 0x63, 0x75, 0x3a, 0xda, 0x3f, 0x1d, 0x75, 0x4e, 0x03, 0x1e, 0xd3, 0xd0, 0x4f, 0xd3, 0x30, 0x56, 0xa6, 0x81, 0x1e, 0xd3, 0x20, 0x07, 0xa6, 0x61, 0x7c, 0x4c, 0x03, 0xde, 0xd3, 0x40, 0x8f, 0x69, 0xe8, 0xfb, 0x3c, 0xd0, 0x26, 0x0f, 0x7c, 0x99, 0x07, 0xfa, 0x4e, 0x05, 0xdc, 0xa9, 0xe0, 0xcf, 0xa9, 0x80, 0x3b, 0x15, 0xb4, 0x9f, 0x0a, 0xfc, 0x4c, 0x18, 0xe7, 0x26, 0x8c, 0x4b, 0x13, 0xf0, 0x99, 0x02, 0x38, 0x53, 0x80, 0xdf, 0x94, 0xc7, 0x10, 0x80, 0x4b, 0xee, 0x35, 0x04, 0x8c, 0x91, 0x5c, 0xc0, 0xc8, 0x45, 0x3f, 0xe5, 0xa2, 0x2f, 0x72, 0x81, 0xcb, 0x2d, 0xa0, 0xd7, 0x2d, 0xa0, 0xfb, 0x64, 0x8c, 0xa7, 0xc9, 0x68, 0x93, 0x01, 0x63, 0xde, 0x00, 0xfe, 0x32, 0x60, 0xdc, 0x1b, 0x76, 0x23, 0x18, 0xa0, 0x41, 0x23, 0x2d, 0x07, 0xe5, 0x72, 0x90, 0x47, 0x0f, 0x98, 0x7a, 0x8c, 0x7f, 0x3d, 0x78, 0x5a, 0x8f, 0x36, 0x4c, 0x02, 0x9d, 0x26, 0x81, 0x96, 0x93, 0x80, 0xc7, 0x24, 0x8c, 0xc3, 0x49, 0xe0, 0x65, 0x1d, 0xea, 0xd2, 0x81, 0x56, 0x3a, 0x8c, 0x29, 0x1d, 0xf2, 0xd2, 0x6e, 0x35, 0x1d, 0xea, 0xd4, 0x61, 0xbc, 0xe9, 0x20, 0xa3, 0xb2, 0xc1, 0x5b, 0xd9, 0xa0, 0x51, 0x36, 0xc6, 0x61, 0x36, 0x68, 0xa2, 0x45, 0x7f, 0x6a, 0x81, 0x83, 0x16, 0xed, 0xca, 0x42, 0xd9, 0x2c, 0xc4, 0xb3, 0x80, 0x33, 0x6d, 0xae, 0x10, 0x40, 0x13, 0x01, 0x63, 0x5c, 0x00, 0x9d, 0x19, 0x78, 0x80, 0x0b, 0x95, 0x85, 0x08, 0xe0, 0x41, 0xa6, 0x53, 0xff, 0x74, 0x21, 0xe8, 0x90, 0x75, 0x41, 0xfd, 0x9b, 0x85, 0x7f, 0xff, 0x9f, 0x6d, 0x59, 0x75, 0xb0, 0x5c, 0x5c, 0xdd, 0x1a, 0xed, 0xe9, 0x2a, 0x6e, 0x7f, 0xb0, 0xbb, 0xb5, 0xb3, 0x2d, 0x2a, 0xce, 0x2b, 0x5e, 0x28, 0x3a, 0xe6, 0x17, 0x97, 0x16, 0x97, 0x96, 0xcc, 0x2b, 0xbd, 0xeb, 0x16, 0x03, 0xe3, 0x9f, 0xe7, 0xaa, 0x9f, 0x99, 0x1f, 0x54, 0x65, 0xe0, 0xde, 0x35, 0x27, 0x05, 0x41, 0x2f, 0xab, 0x23, 0xfe, 0x4e, 0x60, 0xf4, 0x23, 0x05, 0xa4, 0xb1, 0xca, 0x5b, 0xb3, 0xa6, 0xb3, 0xad, 0xf1, 0xfb, 0xeb, 0x62, 0x6d, 0x5d, 0x88, 0xdf, 0x32, 0xb1, 0x38, 0x43, 0x87, 0xcc, 0xa6, 0x7c, 0x78, 0x5a, 0xd5, 0xe7, 0x1d, 0x8a, 0xcc, 0x57, 0xfe, 0xbd, 0xf6, 0xcf, 0xff, 0xfb, 0x77, 0xc7, 0x4f, 0x9d, 0x79, 0xf7, 0xec, 0xb9, 0xf3, 0x7f, 0xfe, 0xcf, 0xf7, 0xff, 0xf2, 0xc1, 0x85, 0xbf, 0x7e, 0xf4, 0xe1, 0xc5, 0x4b, 0x1f, 0xff, 0xed, 0xca, 0xd5, 0x6b, 0x9f, 0x8c, 0x7d, 0xf6, 0xf9, 0xf8, 0xa1, 0xbd, 0xcf, 0xfe, 0xdf, 0x3f, 0xff, 0xc7, 0x97, 0xdf, 0x79, 0xf1, 0x17, 0x87, 0xf6, 0xef, 0x3e, 0x74, 0xe4, 0xf4, 0xa1, 0x5f, 0x1e, 0x3a, 0xf4, 0xff, 0xfc, 0xfa, 0xf2, 0x21, 0xfc, 0x1b, 0x1e, 0x39, 0xf4, 0xde, 0xf5, 0x43, 0xff, 0xeb, 0x79, 0x7a, 0xdf, 0xf3, 0x4f, 0x87, 0x9e, 0x19, 0xfd, 0xed, 0x5b, 0x87, 0x0e, 0xbd, 0x30, 0xd7, 0x6a, 0x95, 0xf6, 0x7f, 0x7a, 0x48, 0x3e, 0xe4, 0xfa, 0x19, 0x7d, 0x38, 0x54, 0x7c, 0xe0, 0xd0, 0xa1, 0xc3, 0xaf, 0xbf, 0xfa, 0x2f, 0x47, 0xff, 0xf5, 0xcd, 0x7f, 0x7b, 0xe3, 0xf7, 0x27, 0x0f, 0x9d, 0x78, 0xfb, 0x3f, 0xfe, 0xfd, 0xd0, 0x8a, 0x47, 0x5e, 0x38, 0xf4, 0x8f, 0x7b, 0x0f, 0x59, 0x8b, 0x0f, 0x31, 0x36, 0x13, 0xad, 0x2b, 0x82, 0x8d, 0x35, 0x17, 0x7c, 0x06, 0x6d, 0x9c, 0xcd, 0xc4, 0x9c, 0x30, 0x1b, 0xfd, 0x33, 0x0b, 0xbc, 0x71, 0x27, 0xc6, 0xc5, 0x4c, 0xf0, 0xe7, 0x4c, 0xf0, 0xd3, 0x2c, 0xc8, 0x81, 0x99, 0xe0, 0xbb, 0x59, 0x24, 0x47, 0x31, 0xde, 0x66, 0x81, 0xde, 0xb3, 0x20, 0x13, 0x66, 0x81, 0x97, 0xee, 0x86, 0xfc, 0xab, 0x40, 0xd3, 0xdc, 0xe8, 0xdf, 0x7b, 0xc1, 0x1b, 0x77, 0x83, 0x9f, 0x17, 0xa2, 0x7f, 0xbc, 0xe8, 0x1b, 0x0f, 0xe4, 0xc9, 0x7c, 0x0f, 0x02, 0x64, 0xd6, 0x02, 0x8c, 0x9f, 0x1a, 0x84, 0x05, 0x03, 0x18, 0xfb, 0xe8, 0xeb, 0x05, 0x18, 0xab, 0x0b, 0xc0, 0x53, 0x0b, 0xb6, 0xc7, 0x59, 0xd6, 0x5f, 0x21, 0x23, 0x23, 0x78, 0x12, 0xbf, 0x0d, 0xc4, 0xf9, 0xdf, 0xa6, 0x34, 0x65, 0xf6, 0x9e, 0x59, 0x79, 0xe4, 0x7c, 0xa2, 0x3c, 0x0d, 0x39, 0x13, 0xfa, 0x56, 0xb8, 0x7d, 0x25, 0x31, 0x4d, 0x9c, 0xff, 0x15, 0x4b, 0xfe, 0x3b, 0xf3, 0x37, 0x1f, 0x83, 0x7d, 0x4a, 0x2e, 0x4d, 0x01, 0x93, 0x15, 0x0f, 0x5f, 0x81, 0x48, 0x2c, 0xbe, 0x78, 0x0d, 0xcc, 0x5a, 0xbc, 0x67, 0x06, 0xbe, 0x17, 0xff, 0xe2, 0xc2, 0x01, 0xfe, 0x8b, 0xf4, 0x92, 0xe1, 0xdb, 0x90, 0x67, 0xd6, 0x37, 0x29, 0xff, 0x17, 0xff, 0x65, 0xc9, 0x7b, 0x9e, 0x30, 0xb1, 0x29, 0xda, 0xb7, 0xd6, 0x94, 0x78, 0x4b, 0x86, 0x87, 0x1f, 0xff, 0x19, 0x73, 0x37, 0x9d, 0x6c, 0x72, 0x37, 0xed, 0x36, 0xec, 0xde, 0xdd, 0x9b, 0xd3, 0xec, 0x7d, 0xab, 0xc9, 0x17, 0x1c, 0x7e, 0xa6, 0x28, 0x6e, 0xb6, 0x0e, 0xff, 0xfc, 0x24, 0x5b, 0xd5, 0x20, 0x2c, 0xed, 0x18, 0x3e, 0x39, 0x3c, 0x3c, 0xe9, 0x9d, 0x66, 0x7f, 0xb0, 0x61, 0xd0, 0x95, 0x38, 0x79, 0x20, 0xfb, 0xbe, 0x6f, 0xdc, 0x18, 0x6b, 0x2e, 0x7a, 0x71, 0xf2, 0xe7, 0x27, 0x2f, 0x3d, 0xb9, 0xbc, 0xfa, 0xcf, 0x17, 0xbf, 0xbb, 0xea, 0x80, 0x61, 0xd6, 0x72, 0xf9, 0x8f, 0xcd, 0xcd, 0x9f, 0x27, 0xbe, 0xf7, 0xbd, 0x4f, 0xbf, 0xf7, 0x87, 0x0d, 0x72, 0x42, 0x4e, 0xfc, 0x20, 0x21, 0xd3, 0xbf, 0xc4, 0xc4, 0xea, 0xcd, 0xb7, 0x98, 0x58, 0x53, 0xb3, 0x9b, 0x69, 0x9b, 0x14, 0xae, 0x69, 0xae, 0xec, 0xd4, 0x66, 0x37, 0x0d, 0x0e, 0x99, 0x2e, 0x9f, 0x1d, 0x6c, 0xfe, 0x4e, 0x73, 0xf6, 0xf4, 0xa6, 0xe1, 0x27, 0xa6, 0x3e, 0xa4, 0x19, 0x6e, 0xfe, 0x76, 0xd3, 0x7f, 0x36, 0x37, 0x5d, 0x3c, 0xde, 0xfc, 0x64, 0xcd, 0xc5, 0xe6, 0xef, 0x34, 0x4d, 0x9f, 0xde, 0x24, 0xff, 0x5b, 0xf3, 0xf9, 0xf7, 0x13, 0xcd, 0x6e, 0xca, 0xaf, 0x40, 0xfe, 0x23, 0xfd, 0x3b, 0xa3, 0xbc, 0xcb, 0xe3, 0xcd, 0x89, 0xee, 0x8b, 0xf2, 0xb5, 0x17, 0x3f, 0xff, 0xd3, 0xc5, 0x7f, 0xfa, 0x9f, 0xf2, 0xa7, 0xeb, 0x1f, 0x90, 0xe5, 0x57, 0x2e, 0xbe, 0xf4, 0xca, 0xb0, 0xfc, 0xe9, 0x1f, 0x57, 0x1e, 0xfe, 0x54, 0x1e, 0x1b, 0x91, 0x5f, 0xfe, 0x85, 0x2c, 0x7f, 0x2a, 0x5f, 0x78, 0xa7, 0xb9, 0xe5, 0x5e, 0xf9, 0xe0, 0xf0, 0xf0, 0xcb, 0xef, 0xc8, 0xc3, 0x8d, 0x9f, 0x7c, 0x3e, 0x3c, 0x7c, 0x72, 0xcf, 0xa5, 0x1f, 0x5c, 0xcd, 0xf6, 0x57, 0x7f, 0x7e, 0x63, 0x4c, 0xf3, 0xda, 0x9e, 0x77, 0x3e, 0xbb, 0x71, 0x4b, 0x91, 0xe9, 0xd2, 0x95, 0x57, 0x46, 0x4c, 0xcf, 0xfe, 0xf1, 0x3f, 0x3f, 0xbd, 0xf0, 0x2c, 0x9b, 0x36, 0xb6, 0xc7, 0xc7, 0x06, 0x7f, 0xa8, 0x7f, 0xcc, 0x87, 0x31, 0x7b, 0xcc, 0x10, 0x57, 0x5b, 0xa2, 0xd6, 0xab, 0xfc, 0x26, 0xce, 0x3d, 0xf3, 0x12, 0x70, 0xf8, 0x01, 0xc7, 0x84, 0xff, 0x9e, 0xad, 0xc9, 0x9d, 0x92, 0x90, 0x8f, 0x55, 0x67, 0x7f, 0x23, 0x21, 0x8f, 0x7a, 0x8d, 0x93, 0x12, 0xf2, 0x6b, 0x5e, 0xe3, 0x62, 0xfc, 0x56, 0x9b, 0x41, 0x99, 0xd7, 0x6a, 0xb4, 0x78, 0x1f, 0xad, 0xd1, 0x22, 0xfd, 0x98, 0x77, 0x3a, 0xf2, 0x9c, 0x3d, 0x42, 0xf9, 0x33, 0x61, 0x26, 0x7f, 0xf7, 0xd0, 0xef, 0xb7, 0xdf, 0x42, 0xa9, 0xcb, 0x6c, 0xf7, 0xe3, 0xaf, 0xc8, 0xa3, 0x95, 0xc7, 0x9b, 0x1e, 0x91, 0x77, 0xeb, 0x9f, 0xdd, 0xfd, 0x88, 0xdc, 0x5c, 0xfd, 0xcf, 0x4d, 0x8f, 0x24, 0xa8, 0xbf, 0x16, 0x25, 0x86, 0x7f, 0xd6, 0xc4, 0x1e, 0xb9, 0xd1, 0xbc, 0x64, 0x78, 0x38, 0x91, 0x30, 0x68, 0x57, 0x36, 0x2f, 0x4a, 0x98, 0x76, 0xbb, 0x12, 0xaf, 0x24, 0xb4, 0x59, 0xf7, 0xdd, 0x58, 0x94, 0x10, 0x75, 0x7b, 0xc6, 0x1e, 0x91, 0x4d, 0xb7, 0x34, 0x9f, 0x4f, 0xc8, 0xcf, 0xce, 0x18, 0x9e, 0x9a, 0x90, 0x3f, 0x6a, 0x6e, 0xfe, 0x61, 0x42, 0xbe, 0x2e, 0x8f, 0xdf, 0x0b, 0xf8, 0x4c, 0x90, 0x6f, 0xea, 0xaf, 0xb4, 0x20, 0x28, 0x8e, 0xb6, 0xad, 0xeb, 0x59, 0x1f, 0x5d, 0xdd, 0xf6, 0xf5, 0x44, 0xce, 0x9a, 0xee, 0xc8, 0xfa, 0x58, 0x71, 0x6b, 0xdb, 0x86, 0x35, 0x28, 0x31, 0xa9, 0xb9, 0xbb, 0xfb, 0xc1, 0xae, 0xb6, 0x56, 0x16, 0xa8, 0xad, 0x2b, 0x67, 0x55, 0x0f, 0x76, 0x77, 0xf7, 0xc4, 0xc4, 0x48, 0x5b, 0x34, 0xd4, 0x13, 0xed, 0x12, 0x23, 0x9d, 0x0f, 0x7e, 0x5f, 0x7c, 0x70, 0x7d, 0xeb, 0x9a, 0x1e, 0x71, 0x75, 0x4f, 0x57, 0x17, 0x00, 0xce, 0x66, 0x6b, 0x3a, 0x3b, 0xdb, 0xc2, 0x0f, 0x76, 0xae, 0xec, 0x5c, 0xd3, 0xbd, 0x96, 0x55, 0x79, 0xe7, 0x7a, 0x2b, 0x59, 0x6b, 0xcf, 0xba, 0xe2, 0xce, 0x35, 0xab, 0xa2, 0x0f, 0x46, 0xbf, 0xcf, 0xd6, 0xc7, 0xd6, 0x74, 0xae, 0x89, 0x7d, 0x3f, 0x15, 0x8f, 0xad, 0xe9, 0x6a, 0x8b, 0x26, 0x2b, 0x2b, 0x67, 0x95, 0x91, 0x48, 0x67, 0xdb, 0x4a, 0x5f, 0x4d, 0x23, 0x2b, 0x8e, 0xae, 0x8b, 0xae, 0x46, 0x4a, 0x95, 0xb7, 0xa4, 0x64, 0x1e, 0x7e, 0x83, 0xf5, 0x4b, 0xf1, 0xdb, 0xb4, 0x8c, 0x55, 0x2e, 0xad, 0x5d, 0x5c, 0xc9, 0xaa, 0xea, 0x18, 0xfd, 0x99, 0x37, 0xb1, 0x0a, 0xcd, 0x08, 0xb7, 0xd5, 0x76, 0xc7, 0x58, 0xfd, 0xfa, 0x98, 0xd8, 0x13, 0x12, 0xbb, 0xda, 0xba, 0x7a, 0xa2, 0xdf, 0x47, 0x23, 0x15, 0x54, 0x1f, 0xec, 0xec, 0xec, 0x59, 0xfd, 0x60, 0xac, 0x4d, 0x5c, 0xb5, 0x3e, 0x14, 0x6a, 0x8b, 0xae, 0x33, 0x38, 0x9a, 0xa2, 0xdf, 0x17, 0x57, 0x53, 0xa9, 0x35, 0xdd, 0x61, 0xd1, 0xb3, 0x3e, 0xb4, 0xb4, 0xad, 0xab, 0xe9, 0xfb, 0x91, 0x36, 0xb1, 0x27, 0x12, 0x5b, 0xd3, 0xd3, 0x5d, 0x7c, 0x57, 0xb2, 0x91, 0x3d, 0x91, 0xb6, 0x6e, 0x31, 0xd6, 0xde, 0x06, 0x88, 0xeb, 0xd6, 0x3d, 0x18, 0x6e, 0x13, 0x23, 0x3d, 0xd1, 0x58, 0xf1, 0x17, 0xbe, 0xd6, 0xba, 0xea, 0xc5, 0x68, 0xdb, 0x43, 0xeb, 0xdb, 0xd6, 0xc5, 0xc4, 0x75, 0xb1, 0xe8, 0xfa, 0xd5, 0xb1, 0xf5, 0xd1, 0xb6, 0x89, 0xd9, 0xac, 0x85, 0xeb, 0xac, 0xe2, 0xfa, 0xee, 0x35, 0x31, 0xb1, 0xb0, 0xb3, 0x35, 0xf9, 0xe5, 0xc1, 0xd5, 0xab, 0x01, 0x57, 0xe4, 0x0d, 0x13, 0x5b, 0xa3, 0x6b, 0x36, 0xb4, 0x95, 0x8b, 0x2a, 0xed, 0xc4, 0x55, 0xc0, 0x79, 0xed, 0xba, 0x35, 0x0f, 0x03, 0x4e, 0x2b, 0x08, 0xbd, 0x96, 0x45, 0xf9, 0x6f, 0xb0, 0xba, 0x29, 0x78, 0xbf, 0xab, 0xd1, 0x59, 0x77, 0x4f, 0x5d, 0xfd, 0x7d, 0xd5, 0xc1, 0xaa, 0xca, 0xc6, 0x6a, 0xc4, 0x96, 0xd6, 0xdd, 0xb3, 0xb4, 0xf2, 0x7e, 0x4f, 0x75, 0x66, 0x5a, 0xf0, 0x9e, 0x60, 0x7d, 0xd5, 0x92, 0x60, 0xad, 0x77, 0x31, 0xc5, 0xfc, 0xf7, 0xf8, 0xeb, 0xeb, 0x6a, 0xab, 0x9b, 0x28, 0x73, 0x2d, 0x32, 0x57, 0x35, 0xd5, 0xd7, 0x36, 0xd6, 0x23, 0x56, 0xd5, 0x78, 0x4f, 0x55, 0x7d, 0x00, 0x3c, 0xd1, 0xd4, 0xd8, 0x50, 0x59, 0x55, 0xdd, 0x88, 0xa4, 0xc6, 0x65, 0xf7, 0x34, 0xfa, 0xea, 0xef, 0x43, 0x5a, 0x63, 0x6d, 0x7d, 0x00, 0x09, 0xbe, 0x9a, 0x7b, 0xd0, 0x1d, 0x35, 0xb5, 0xc1, 0x46, 0x2a, 0x5f, 0xe3, 0xb9, 0xa7, 0xa6, 0xb6, 0xae, 0xda, 0xd3, 0x5c, 0x53, 0x83, 0x1c, 0xae, 0x25, 0xae, 0x80, 0xd3, 0x5b, 0x7d, 0x8f, 0xb7, 0xb2, 0xa9, 0xb2, 0xba, 0xa5, 0xc9, 0xb5, 0xc4, 0x19, 0xac, 0xbe, 0x27, 0x58, 0xdd, 0x58, 0xdf, 0x1c, 0xac, 0xaa, 0x56, 0x12, 0x1a, 0x6b, 0xef, 0x69, 0xac, 0xaa, 0x0c, 0xd4, 0x06, 0x9a, 0xaa, 0x83, 0xcb, 0x2a, 0xeb, 0x78, 0x89, 0x86, 0xaa, 0x7b, 0x1a, 0xea, 0x2a, 0xef, 0xaf, 0xf2, 0x7a, 0x2b, 0x91, 0xa3, 0xe5, 0x9e, 0x96, 0x86, 0x7a, 0x05, 0xd4, 0xfd, 0xf7, 0xdc, 0x9f, 0x7c, 0x65, 0xf5, 0xbc, 0x3b, 0xd6, 0x89, 0x75, 0x22, 0xd8, 0x4a, 0x5c, 0x8a, 0x47, 0x14, 0x5d, 0xb1, 0x3e, 0xb6, 0x1e, 0x3d, 0xfa, 0x7d, 0xb1, 0x6d, 0xe3, 0xea, 0xce, 0xf5, 0xeb, 0x40, 0xb4, 0xd9, 0xac, 0x56, 0x25, 0x5a, 0xf7, 0xfa, 0xae, 0x55, 0x60, 0x67, 0xb0, 0x40, 0x08, 0x9c, 0x9f, 0xec, 0xef, 0x72, 0x4e, 0xf3, 0x64, 0x75, 0x49, 0x36, 0x15, 0x89, 0xa7, 0xc5, 0x58, 0x4f, 0x8f, 0xd8, 0xd9, 0xd3, 0x1d, 0x86, 0x76, 0x19, 0x8d, 0xf6, 0x44, 0xc5, 0xef, 0xb5, 0x53, 0xc1, 0xc8, 0x83, 0xd1, 0x75, 0xc4, 0x1a, 0xd6, 0xaa, 0x9e, 0xee, 0x58, 0xb4, 0xa7, 0xd3, 0x0a, 0x78, 0x6d, 0x9d, 0xad, 0xe2, 0x9a, 0x6e, 0x71, 0x69, 0xcf, 0xfa, 0xee, 0x58, 0xe7, 0x9a, 0x75, 0xb1, 0x72, 0x43, 0xe1, 0xba, 0x89, 0x0c, 0xc7, 0xbc, 0xb5, 0xd5, 0xac, 0xbe, 0xa1, 0x3a, 0x30, 0x37, 0x78, 0x9f, 0xf2, 0xac, 0xaf, 0xf3, 0x2a, 0x2f, 0x81, 0xea, 0xfb, 0xd0, 0x75, 0x95, 0x5e, 0x76, 0x5f, 0xb0, 0xb6, 0xa9, 0x1a, 0x9c, 0x5b, 0xdf, 0x58, 0xcd, 0x1a, 0xab, 0xab, 0x97, 0xb0, 0xea, 0x16, 0x30, 0x73, 0xa0, 0x5a, 0x0c, 0x80, 0x56, 0xa9, 0x48, 0xbd, 0xc7, 0xcf, 0x6a, 0x03, 0x35, 0xf5, 0x80, 0xd8, 0xb8, 0x44, 0xe4, 0x6f, 0x0d, 0x95, 0xc1, 0xea, 0x40, 0x93, 0xb7, 0x36, 0xc8, 0xbc, 0xd5, 0x75, 0xd5, 0x04, 0x03, 0xf0, 0x9a, 0xaa, 0x29, 0xa1, 0x0e, 0xfd, 0xcc, 0xbc, 0xcd, 0x0d, 0xfc, 0x59, 0x13, 0xac, 0xae, 0xe6, 0x2f, 0x8d, 0xd5, 0x4d, 0x0d, 0xc1, 0xfa, 0xa6, 0xea, 0xaa, 0x26, 0x7a, 0xad, 0xaa, 0x5f, 0xba, 0x14, 0xe5, 0x81, 0x44, 0xa0, 0x72, 0x69, 0x35, 0x80, 0xfb, 0x6a, 0x3d, 0xb5, 0xc9, 0xa8, 0x48, 0xd5, 0xb0, 0xa5, 0xf5, 0xc1, 0x6a, 0xb1, 0xaa, 0xb2, 0xca, 0x57, 0xcd, 0xee, 0xab, 0xac, 0x6d, 0x12, 0x6b, 0xea, 0x83, 0x62, 0x95, 0xaf, 0x32, 0xc8, 0x6a, 0xea, 0x9a, 0x1b, 0x7d, 0xac, 0x11, 0x15, 0x56, 0x07, 0x96, 0xd6, 0x7b, 0x51, 0xba, 0x71, 0x25, 0x71, 0x40, 0xe3, 0xfd, 0x8d, 0x4d, 0xd5, 0x4b, 0x59, 0x23, 0x20, 0xac, 0xe4, 0x55, 0x56, 0xd5, 0x37, 0xdc, 0xbf, 0x12, 0x18, 0xad, 0xac, 0xf1, 0xa9, 0xf8, 0xd2, 0x9b, 0xda, 0x28, 0x7a, 0xad, 0xf1, 0xad, 0xac, 0x01, 0xaf, 0xab, 0xb9, 0x9b, 0x83, 0x3c, 0xcb, 0xb2, 0xfa, 0xba, 0x66, 0xa0, 0x44, 0xe4, 0x11, 0xeb, 0x6a, 0x03, 0x40, 0xa4, 0x72, 0x49, 0xb5, 0xf2, 0xd6, 0xdc, 0x58, 0x1d, 0x64, 0x73, 0x93, 0xff, 0x9a, 0x03, 0x4b, 0x02, 0xf5, 0xf7, 0x05, 0xd4, 0x18, 0x0b, 0x2c, 0x65, 0x95, 0x8d, 0xac, 0xa1, 0x85, 0x35, 0xd6, 0x31, 0x17, 0x5b, 0xf7, 0xfd, 0x75, 0xe5, 0x24, 0x3c, 0x92, 0x92, 0xa1, 0xa1, 0x2e, 0x25, 0x36, 0x96, 0x91, 0x90, 0x88, 0x44, 0xdb, 0x42, 0xeb, 0xc4, 0xae, 0x1e, 0x0c, 0xc1, 0x9e, 0x28, 0x5b, 0xdd, 0xd3, 0xda, 0xb6, 0xae, 0x2d, 0x96, 0x96, 0x49, 0xcd, 0x4d, 0x35, 0x73, 0xe7, 0x2d, 0x84, 0xdc, 0x8b, 0xad, 0x5f, 0xc3, 0x65, 0x40, 0xf2, 0xc3, 0xf7, 0x30, 0xea, 0x56, 0xb5, 0x75, 0xaf, 0x6e, 0x4f, 0xa5, 0xac, 0x59, 0x9d, 0xf1, 0xb9, 0xad, 0x7b, 0x43, 0xf9, 0xea, 0xd6, 0xd6, 0x07, 0x19, 0xab, 0xc5, 0x30, 0xe2, 0xb4, 0x55, 0x86, 0xb3, 0x4f, 0x15, 0xad, 0x9c, 0xad, 0x58, 0xe5, 0x2a, 0x08, 0x0e, 0xd6, 0xd8, 0xde, 0xf3, 0xbd, 0x95, 0xc4, 0x83, 0x2b, 0x6b, 0x01, 0x03, 0xe2, 0x09, 0x6c, 0xdb, 0x2a, 0xc6, 0xbe, 0x07, 0xb9, 0x37, 0x3b, 0xa5, 0x11, 0x22, 0x14, 0xaa, 0xcf, 0xcc, 0x90, 0x9c, 0xfa, 0x3f, 0x54, 0xf5, 0x4c, 0xcc, 0xbc, 0x02, 0xde, 0x05, 0xd8, 0x0c, 0x02, 0xf4, 0x22, 0x72, 0x98, 0x33, 0xe8, 0xc4, 0x6c, 0x99, 0x5a, 0x9e, 0xb2, 0x8c, 0xf2, 0xbf, 0xfb, 0xcc, 0x84, 0xfd, 0xaa, 0x9d, 0xf8, 0x3c, 0xff, 0xab, 0xd0, 0x4c, 0x80, 0xfe, 0x24, 0x3c, 0xa3, 0xe8, 0xb0, 0x02, 0xec, 0x3e, 0x01, 0x7a, 0x93, 0x00, 0xbd, 0x58, 0x80, 0x9e, 0x2b, 0x60, 0x7e, 0x14, 0x68, 0x9f, 0x1e, 0xad, 0x95, 0x2a, 0x37, 0x19, 0x30, 0x01, 0x76, 0x99, 0x00, 0x1d, 0x4c, 0x80, 0xbd, 0x22, 0x40, 0x2f, 0x16, 0x60, 0xb3, 0xd0, 0xd6, 0x02, 0x01, 0xfa, 0x99, 0x00, 0xfd, 0x57, 0x80, 0xbe, 0x26, 0x40, 0xd5, 0x11, 0xa0, 0x9b, 0x09, 0xb0, 0x81, 0x05, 0xd8, 0x19, 0x02, 0x74, 0x2e, 0x81, 0xd6, 0x6a, 0xca, 0xf8, 0xfd, 0x91, 0x30, 0x3c, 0x99, 0x62, 0x30, 0x66, 0xe8, 0xc7, 0xf4, 0xf7, 0xbc, 0x53, 0xed, 0xba, 0xf2, 0xff, 0x01, 0xc3, 0x78, 0x3f, 0x48, 0xfc, 0x7b, 0x00, 0x00 }; unsigned int cdfs_rom_len = 18843; fs-uae-2.2.3+dfsg/src/blitops.cpp0000644000175000017500000002777712162366654017047 0ustar glaubitzglaubitz /* This file generated automatically - do not edit */ #include "genblitter.h" struct blitop blitops[256] = { /* 00 */ { "0", 0 }, /* 01 */ { "~(srca | srcb | srcc)", 7 }, /* 02 */ { "(srcc & ~(srca | srcb))", 7 }, /* 03 */ { "~(srca | srcb)", 3 }, /* 04 */ { "(srcb & ~(srca | srcc))", 7 }, /* 05 */ { "~(srca | srcc)", 5 }, /* 06 */ { "(~srca & (srcb ^ srcc))", 7 }, /* 07 */ { "~(srca | (srcb & srcc))", 7 }, /* 08 */ { "(~srca & srcb & srcc)", 7 }, /* 09 */ { "~(srca | (srcb ^ srcc))", 7 }, /* 0a */ { "(~srca & srcc)", 5 }, /* 0b */ { "~(srca | (srcb & ~srcc))", 7 }, /* 0c */ { "(~srca & srcb)", 3 }, /* 0d */ { "~(srca | (~srcb & srcc))", 7 }, /* 0e */ { "(~srca & (srcb | srcc))", 7 }, /* 0f */ { "~srca", 1 }, /* 10 */ { "(srca & ~(srcb | srcc))", 7 }, /* 11 */ { "~(srcb | srcc)", 6 }, /* 12 */ { "(~srcb & (srca ^ srcc))", 7 }, /* 13 */ { "~(srcb | (srca & srcc))", 7 }, /* 14 */ { "(~srcc & (srca ^ srcb))", 7 }, /* 15 */ { "~(srcc | (srca & srcb))", 7 }, /* 16 */ { "(srca ^ ((srca & srcb) | (srcb ^ srcc)))", 7 }, /* 17 */ { "~(srca ^ ((srca ^ srcb) & (srca ^ srcc)))", 7 }, /* 18 */ { "((srca ^ srcb) & (srca ^ srcc))", 7 }, /* 19 */ { "(srcb ^ (~srcc | (srca & srcb)))", 7 }, /* 1a */ { "(srca ^ (srcc | (srca & srcb)))", 7 }, /* 1b */ { "(srca ^ (srcc | ~(srca ^ srcb)))", 7 }, /* 1c */ { "(srca ^ (srcb | (srca & srcc)))", 7 }, /* 1d */ { "(srca ^ (srcb | ~(srca ^ srcc)))", 7 }, /* 1e */ { "(srca ^ (srcb | srcc))", 7 }, /* 1f */ { "~(srca & (srcb | srcc))", 7 }, /* 20 */ { "(srca & ~srcb & srcc)", 7 }, /* 21 */ { "~(srcb | (srca ^ srcc))", 7 }, /* 22 */ { "(~srcb & srcc)", 6 }, /* 23 */ { "~(srcb | (srca & ~srcc))", 7 }, /* 24 */ { "((srca ^ srcb) & (srcb ^ srcc))", 7 }, /* 25 */ { "(srca ^ (~srcc | (srca & srcb)))", 7 }, /* 26 */ { "(srcb ^ (srcc | (srca & srcb)))", 7 }, /* 27 */ { "~(srca ^ (srcc & (srca ^ srcb)))", 7 }, /* 28 */ { "(srcc & (srca ^ srcb))", 7 }, /* 29 */ { "~(srca ^ srcb ^ (srcc | (srca & srcb)))", 7 }, /* 2a */ { "(srcc & ~(srca & srcb))", 7 }, /* 2b */ { "~(srca ^ ((srca ^ srcb) & (srcb ^ srcc)))", 7 }, /* 2c */ { "(srcb ^ (srca & (srcb | srcc)))", 7 }, /* 2d */ { "(srca ^ (srcb | ~srcc))", 7 }, /* 2e */ { "(srca ^ (srcb | (srca ^ srcc)))", 7 }, /* 2f */ { "~(srca & (srcb | ~srcc))", 7 }, /* 30 */ { "(srca & ~srcb)", 3 }, /* 31 */ { "~(srcb | (~srca & srcc))", 7 }, /* 32 */ { "(~srcb & (srca | srcc))", 7 }, /* 33 */ { "~srcb", 2 }, /* 34 */ { "(srcb ^ (srca | (srcb & srcc)))", 7 }, /* 35 */ { "(srcb ^ (srca | ~(srcb ^ srcc)))", 7 }, /* 36 */ { "(srcb ^ (srca | srcc))", 7 }, /* 37 */ { "~(srcb & (srca | srcc))", 7 }, /* 38 */ { "(srca ^ (srcb & (srca | srcc)))", 7 }, /* 39 */ { "(srcb ^ (srca | ~srcc))", 7 }, /* 3a */ { "(srcb ^ (srca | (srcb ^ srcc)))", 7 }, /* 3b */ { "~(srcb & (srca | ~srcc))", 7 }, /* 3c */ { "(srca ^ srcb)", 3 }, /* 3d */ { "(srca ^ (srcb | ~(srca | srcc)))", 7 }, /* 3e */ { "(srca ^ (srcb | (srca ^ (srca | srcc))))", 7 }, /* 3f */ { "~(srca & srcb)", 3 }, /* 40 */ { "(srca & srcb & ~srcc)", 7 }, /* 41 */ { "~(srcc | (srca ^ srcb))", 7 }, /* 42 */ { "((srca ^ srcc) & (srcb ^ srcc))", 7 }, /* 43 */ { "(srca ^ (~srcb | (srca & srcc)))", 7 }, /* 44 */ { "(srcb & ~srcc)", 6 }, /* 45 */ { "~(srcc | (srca & ~srcb))", 7 }, /* 46 */ { "(srcc ^ (srcb | (srca & srcc)))", 7 }, /* 47 */ { "~(srca ^ (srcb & (srca ^ srcc)))", 7 }, /* 48 */ { "(srcb & (srca ^ srcc))", 7 }, /* 49 */ { "~(srca ^ srcc ^ (srcb | (srca & srcc)))", 7 }, /* 4a */ { "(srcc ^ (srca & (srcb | srcc)))", 7 }, /* 4b */ { "(srca ^ (~srcb | srcc))", 7 }, /* 4c */ { "(srcb & ~(srca & srcc))", 7 }, /* 4d */ { "(srca ^ ((srca ^ srcb) | ~(srca ^ srcc)))", 7 }, /* 4e */ { "(srca ^ (srcc | (srca ^ srcb)))", 7 }, /* 4f */ { "~(srca & (~srcb | srcc))", 7 }, /* 50 */ { "(srca & ~srcc)", 5 }, /* 51 */ { "~(srcc | (~srca & srcb))", 7 }, /* 52 */ { "(srcc ^ (srca | (srcb & srcc)))", 7 }, /* 53 */ { "~(srcb ^ (srca & (srcb ^ srcc)))", 7 }, /* 54 */ { "(~srcc & (srca | srcb))", 7 }, /* 55 */ { "~srcc", 4 }, /* 56 */ { "(srcc ^ (srca | srcb))", 7 }, /* 57 */ { "~(srcc & (srca | srcb))", 7 }, /* 58 */ { "(srca ^ (srcc & (srca | srcb)))", 7 }, /* 59 */ { "(srcc ^ (srca | ~srcb))", 7 }, /* 5a */ { "(srca ^ srcc)", 5 }, /* 5b */ { "(srca ^ (srcc | ~(srca | srcb)))", 7 }, /* 5c */ { "(srcc ^ (srca | (srcb ^ srcc)))", 7 }, /* 5d */ { "~(srcc & (srca | ~srcb))", 7 }, /* 5e */ { "(srca ^ (srcc | (srca ^ (srca | srcb))))", 7 }, /* 5f */ { "~(srca & srcc)", 5 }, /* 60 */ { "(srca & (srcb ^ srcc))", 7 }, /* 61 */ { "~(srcb ^ srcc ^ (srca | (srcb & srcc)))", 7 }, /* 62 */ { "(srcc ^ (srcb & (srca | srcc)))", 7 }, /* 63 */ { "(srcb ^ (~srca | srcc))", 7 }, /* 64 */ { "(srcb ^ (srcc & (srca | srcb)))", 7 }, /* 65 */ { "(srcc ^ (~srca | srcb))", 7 }, /* 66 */ { "(srcb ^ srcc)", 6 }, /* 67 */ { "(srcb ^ (srcc | ~(srca | srcb)))", 7 }, /* 68 */ { "((srca & srcb) ^ (srcc & (srca | srcb)))", 7 }, /* 69 */ { "~(srca ^ srcb ^ srcc)", 7 }, /* 6a */ { "(srcc ^ (srca & srcb))", 7 }, /* 6b */ { "~(srca ^ srcb ^ (srcc & (srca | srcb)))", 7 }, /* 6c */ { "(srcb ^ (srca & srcc))", 7 }, /* 6d */ { "~(srca ^ srcc ^ (srcb & (srca | srcc)))", 7 }, /* 6e */ { "((~srca & srcb) | (srcb ^ srcc))", 7 }, /* 6f */ { "(~srca | (srcb ^ srcc))", 7 }, /* 70 */ { "(srca & ~(srcb & srcc))", 7 }, /* 71 */ { "~(srca ^ ((srca ^ srcb) | (srca ^ srcc)))", 7 }, /* 72 */ { "(srcb ^ (srcc | (srca ^ srcb)))", 7 }, /* 73 */ { "~(srcb & (~srca | srcc))", 7 }, /* 74 */ { "(srcc ^ (srcb | (srca ^ srcc)))", 7 }, /* 75 */ { "~(srcc & (~srca | srcb))", 7 }, /* 76 */ { "(srcb ^ (srcc | (srca ^ (srca & srcb))))", 7 }, /* 77 */ { "~(srcb & srcc)", 6 }, /* 78 */ { "(srca ^ (srcb & srcc))", 7 }, /* 79 */ { "~(srcb ^ srcc ^ (srca & (srcb | srcc)))", 7 }, /* 7a */ { "((srca & ~srcb) | (srca ^ srcc))", 7 }, /* 7b */ { "(~srcb | (srca ^ srcc))", 7 }, /* 7c */ { "((srca ^ srcb) | (srca & ~srcc))", 7 }, /* 7d */ { "(~srcc | (srca ^ srcb))", 7 }, /* 7e */ { "((srca ^ srcb) | (srca ^ srcc))", 7 }, /* 7f */ { "~(srca & srcb & srcc)", 7 }, /* 80 */ { "(srca & srcb & srcc)", 7 }, /* 81 */ { "~((srca ^ srcb) | (srca ^ srcc))", 7 }, /* 82 */ { "(srcc & ~(srca ^ srcb))", 7 }, /* 83 */ { "(srca ^ (~srcb | (srca & ~srcc)))", 7 }, /* 84 */ { "(srcb & ~(srca ^ srcc))", 7 }, /* 85 */ { "(srca ^ (~srcc | (srca & ~srcb)))", 7 }, /* 86 */ { "(srcb ^ srcc ^ (srca & (srcb | srcc)))", 7 }, /* 87 */ { "~(srca ^ (srcb & srcc))", 7 }, /* 88 */ { "(srcb & srcc)", 6 }, /* 89 */ { "(srcb ^ (~srcc & (~srca | srcb)))", 7 }, /* 8a */ { "(srcc & (~srca | srcb))", 7 }, /* 8b */ { "(srca ^ (~srcb | (srca ^ srcc)))", 7 }, /* 8c */ { "(srcb & (~srca | srcc))", 7 }, /* 8d */ { "(srca ^ (~srcc | (srca ^ srcb)))", 7 }, /* 8e */ { "(srca ^ ((srca ^ srcb) | (srca ^ srcc)))", 7 }, /* 8f */ { "(~srca | (srcb & srcc))", 7 }, /* 90 */ { "(srca & ~(srcb ^ srcc))", 7 }, /* 91 */ { "(srcb ^ (~srcc | (~srca & srcb)))", 7 }, /* 92 */ { "(srca ^ srcc ^ (srcb & (srca | srcc)))", 7 }, /* 93 */ { "~(srcb ^ (srca & srcc))", 7 }, /* 94 */ { "(srca ^ srcb ^ (srcc & (srca | srcb)))", 7 }, /* 95 */ { "~(srcc ^ (srca & srcb))", 7 }, /* 96 */ { "(srca ^ srcb ^ srcc)", 7 }, /* 97 */ { "(srca ^ srcb ^ (srcc | ~(srca | srcb)))", 7 }, /* 98 */ { "(srcb ^ (~srcc & (srca | srcb)))", 7 }, /* 99 */ { "~(srcb ^ srcc)", 6 }, /* 9a */ { "(srcc ^ (srca & ~srcb))", 7 }, /* 9b */ { "~(srcb ^ (srcc & (srca | srcb)))", 7 }, /* 9c */ { "(srcb ^ (srca & ~srcc))", 7 }, /* 9d */ { "~(srcc ^ (srcb & (srca | srcc)))", 7 }, /* 9e */ { "(srcb ^ srcc ^ (srca | (srcb & srcc)))", 7 }, /* 9f */ { "~(srca & (srcb ^ srcc))", 7 }, /* a0 */ { "(srca & srcc)", 5 }, /* a1 */ { "(srca ^ (~srcc & (srca | ~srcb)))", 7 }, /* a2 */ { "(srcc & (srca | ~srcb))", 7 }, /* a3 */ { "(srcb ^ (~srca | (srcb ^ srcc)))", 7 }, /* a4 */ { "(srca ^ (~srcc & (srca | srcb)))", 7 }, /* a5 */ { "~(srca ^ srcc)", 5 }, /* a6 */ { "(srcc ^ (~srca & srcb))", 7 }, /* a7 */ { "~(srca ^ (srcc & (srca | srcb)))", 7 }, /* a8 */ { "(srcc & (srca | srcb))", 7 }, /* a9 */ { "~(srcc ^ (srca | srcb))", 7 }, /* aa */ { "srcc", 4 }, /* ab */ { "(srcc | ~(srca | srcb))", 7 }, /* ac */ { "(srcb ^ (srca & (srcb ^ srcc)))", 7 }, /* ad */ { "~(srcc ^ (srca | (srcb & srcc)))", 7 }, /* ae */ { "(srcc | (~srca & srcb))", 7 }, /* af */ { "(~srca | srcc)", 5 }, /* b0 */ { "(srca & (~srcb | srcc))", 7 }, /* b1 */ { "~(srca ^ (srcc | (srca ^ srcb)))", 7 }, /* b2 */ { "(srca ^ ((srca ^ srcc) & (srcb ^ srcc)))", 7 }, /* b3 */ { "(~srcb | (srca & srcc))", 7 }, /* b4 */ { "(srca ^ (srcb & ~srcc))", 7 }, /* b5 */ { "~(srcc ^ (srca & (srcb | srcc)))", 7 }, /* b6 */ { "(srca ^ srcc ^ (srcb | (srca & srcc)))", 7 }, /* b7 */ { "~(srcb & (srca ^ srcc))", 7 }, /* b8 */ { "(srca ^ (srcb & (srca ^ srcc)))", 7 }, /* b9 */ { "~(srcc ^ (srcb | (srca & srcc)))", 7 }, /* ba */ { "(srcc | (srca & ~srcb))", 7 }, /* bb */ { "(~srcb | srcc)", 6 }, /* bc */ { "((srca ^ srcb) | (srca & srcc))", 7 }, /* bd */ { "((srca ^ srcb) | ~(srca ^ srcc))", 7 }, /* be */ { "(srcc | (srca ^ srcb))", 7 }, /* bf */ { "(srcc | ~(srca & srcb))", 7 }, /* c0 */ { "(srca & srcb)", 3 }, /* c1 */ { "(srca ^ (~srcb & (srca | ~srcc)))", 7 }, /* c2 */ { "(srca ^ (~srcb & (srca | srcc)))", 7 }, /* c3 */ { "~(srca ^ srcb)", 3 }, /* c4 */ { "(srcb & (srca | ~srcc))", 7 }, /* c5 */ { "~(srcb ^ (srca | (srcb ^ srcc)))", 7 }, /* c6 */ { "(srcb ^ (~srca & srcc))", 7 }, /* c7 */ { "~(srca ^ (srcb & (srca | srcc)))", 7 }, /* c8 */ { "(srcb & (srca | srcc))", 7 }, /* c9 */ { "~(srcb ^ (srca | srcc))", 7 }, /* ca */ { "(srcc ^ (srca & (srcb ^ srcc)))", 7 }, /* cb */ { "~(srcb ^ (srca | (srcb & srcc)))", 7 }, /* cc */ { "srcb", 2 }, /* cd */ { "(srcb | ~(srca | srcc))", 7 }, /* ce */ { "(srcb | (~srca & srcc))", 7 }, /* cf */ { "(~srca | srcb)", 3 }, /* d0 */ { "(srca & (srcb | ~srcc))", 7 }, /* d1 */ { "~(srca ^ (srcb | (srca ^ srcc)))", 7 }, /* d2 */ { "(srca ^ (~srcb & srcc))", 7 }, /* d3 */ { "~(srcb ^ (srca & (srcb | srcc)))", 7 }, /* d4 */ { "(srca ^ ((srca ^ srcb) & (srcb ^ srcc)))", 7 }, /* d5 */ { "(~srcc | (srca & srcb))", 7 }, /* d6 */ { "(srca ^ srcb ^ (srcc | (srca & srcb)))", 7 }, /* d7 */ { "~(srcc & (srca ^ srcb))", 7 }, /* d8 */ { "(srca ^ (srcc & (srca ^ srcb)))", 7 }, /* d9 */ { "~(srcb ^ (srcc | (srca & srcb)))", 7 }, /* da */ { "((srca & srcb) | (srca ^ srcc))", 7 }, /* db */ { "~((srca ^ srcb) & (srcb ^ srcc))", 7 }, /* dc */ { "(srcb | (srca & ~srcc))", 7 }, /* dd */ { "(srcb | ~srcc)", 6 }, /* de */ { "(srcb | (srca ^ srcc))", 7 }, /* df */ { "(srcb | ~(srca & srcc))", 7 }, /* e0 */ { "(srca & (srcb | srcc))", 7 }, /* e1 */ { "~(srca ^ (srcb | srcc))", 7 }, /* e2 */ { "(srcc ^ (srcb & (srca ^ srcc)))", 7 }, /* e3 */ { "~(srca ^ (srcb | (srca & srcc)))", 7 }, /* e4 */ { "(srcb ^ (srcc & (srca ^ srcb)))", 7 }, /* e5 */ { "~(srca ^ (srcc | (srca & srcb)))", 7 }, /* e6 */ { "((srca & srcb) | (srcb ^ srcc))", 7 }, /* e7 */ { "~((srca ^ srcb) & (srca ^ srcc))", 7 }, /* e8 */ { "(srca ^ ((srca ^ srcb) & (srca ^ srcc)))", 7 }, /* e9 */ { "(srca ^ srcb ^ (~srcc | (srca & srcb)))", 7 }, /* ea */ { "(srcc | (srca & srcb))", 7 }, /* eb */ { "(srcc | ~(srca ^ srcb))", 7 }, /* ec */ { "(srcb | (srca & srcc))", 7 }, /* ed */ { "(srcb | ~(srca ^ srcc))", 7 }, /* ee */ { "(srcb | srcc)", 6 }, /* ef */ { "(~srca | srcb | srcc)", 7 }, /* f0 */ { "srca", 1 }, /* f1 */ { "(srca | ~(srcb | srcc))", 7 }, /* f2 */ { "(srca | (~srcb & srcc))", 7 }, /* f3 */ { "(srca | ~srcb)", 3 }, /* f4 */ { "(srca | (srcb & ~srcc))", 7 }, /* f5 */ { "(srca | ~srcc)", 5 }, /* f6 */ { "(srca | (srcb ^ srcc))", 7 }, /* f7 */ { "(srca | ~(srcb & srcc))", 7 }, /* f8 */ { "(srca | (srcb & srcc))", 7 }, /* f9 */ { "(srca | ~(srcb ^ srcc))", 7 }, /* fa */ { "(srca | srcc)", 5 }, /* fb */ { "(srca | ~srcb | srcc)", 7 }, /* fc */ { "(srca | srcb)", 3 }, /* fd */ { "(srca | srcb | ~srcc)", 7 }, /* fe */ { "(srca | srcb | srcc)", 7 }, /* ff */ { "0xFFFFFFFF", 0 } }; fs-uae-2.2.3+dfsg/src/dongle.cpp0000644000175000017500000000677712162366655016641 0ustar glaubitzglaubitz /* * UAE - The Un*x Amiga Emulator * * Emulates simple protection dongles * * Copyright 2009 Toni Wilen */ #include "sysconfig.h" #include "sysdeps.h" #include "options.h" #include "events.h" #include "uae.h" #define ROBOCOP3 1 #define LEADERBOARD 2 #define BAT2 3 #define ITALY90 4 #define DAMESGRANDMAITRE 5 #define RUGBYCOACH 6 #define CRICKETCAPTAIN 7 #define LEVIATHAN 8 #define LOGISTIX 10 static int flag; static unsigned int cycles; /* Robocop 3 - set firebutton as output - read JOY1DAT - pulse firebutton (high->low) - read JOY1DAT - JOY1DAT bit 8 must toggle Leaderboard - JOY1DAT, both up and down active (0x0101) B.A.T. II - set all serial pins as output except CTS - game pulses DTR (high->low) - CTS must be one - delay - CTS must be zero Italy'90 Soccer - 220k resistor between pins 5 (+5v) and 7 (POTX) - POT1DAT POTX must be between 0x32 and 0x60 Dames Grand Maitre - read POT1 - POT1X != POT1Y - POT1Y * 256 / POT1X must be between 450 and 500 Rugby Coach - JOY1DAT, left, up and down active (0x0301) Cricket Captain - JOY0DAT bits 0 and 1: - 10 01 11 allowed - must continuously change state Leviathan - same as Leaderboard but in mouse port Logistix/SuperBase - second button must be high - POT1X = 150k - POT1Y = 100k - POT1X * 10 / POT1Y must be between 12 and 33 */ static uae_u8 oldcia[2][16]; void dongle_reset (void) { flag = 0; memset (oldcia, 0, sizeof oldcia); } uae_u8 dongle_cia_read (int cia, int reg, uae_u8 val) { if (!currprefs.dongle) return val; switch (currprefs.dongle) { case BAT2: if (cia == 1 && reg == 0) { if (!flag || get_cycles () > cycles + CYCLE_UNIT * 200) { val &= ~0x10; flag = 0; } else { val |= 0x10; } } break; } return val; } void dongle_cia_write (int cia, int reg, uae_u8 val) { if (!currprefs.dongle) return; switch (currprefs.dongle) { case ROBOCOP3: if (cia == 0 && reg == 0 && (val & 0x80)) flag ^= 1; break; case BAT2: if (cia == 1 && reg == 0 && !(val & 0x80)) { flag = 1; cycles = get_cycles (); } break; } oldcia[cia][reg] = val; } void dongle_joytest (uae_u16 val) { } uae_u16 dongle_joydat (int port, uae_u16 val) { if (!currprefs.dongle) return val; switch (currprefs.dongle) { case ROBOCOP3: if (port == 1 && flag) val += 0x100; break; case LEADERBOARD: if (port == 1) { val &= ~0x0303; val |= 0x0101; } break; case LEVIATHAN: if (port == 0) { val &= ~0x0303; val |= 0x0101; } break; case RUGBYCOACH: if (port == 1) { val &= ~0x0303; val|= 0x0301; } break; case CRICKETCAPTAIN: if (port == 0) { val &= ~0x0003; if (flag == 0) val |= 0x0001; else val |= 0x0002; } flag ^= 1; break; } return val; } void dongle_potgo (uae_u16 val) { if (!currprefs.dongle) return; switch (currprefs.dongle) { case ITALY90: case LOGISTIX: case DAMESGRANDMAITRE: flag = (uaerand () & 7) - 3; break; } } uae_u16 dongle_potgor (uae_u16 val) { if (!currprefs.dongle) return val; switch (currprefs.dongle) { case LOGISTIX: val |= 1 << 14; break; } return val; } int dongle_analogjoy (int joy, int axis) { int v = -1; if (!currprefs.dongle) return -1; switch (currprefs.dongle) { case ITALY90: if (joy == 1 && axis == 0) v = 73; break; case LOGISTIX: if (joy == 1) { if (axis == 0) v = 21; if (axis == 1) v = 10; } break; case DAMESGRANDMAITRE: if (joy == 1) { if (axis == 1) v = 80; if (axis == 0) v = 43; } break; } if (v >= 0) { v += flag; if (v < 0) v = 0; } return v; }fs-uae-2.2.3+dfsg/src/zfile.cpp0000644000175000017500000023462512162366654016474 0ustar glaubitzglaubitz/* * UAE - The Un*x Amiga Emulator * * routines to handle compressed file automatically * * (c) 1996 Samuel Devulder, Tim Gunn * 2002-2007 Toni Wilen */ #ifdef FSUAE // don't define ZLIB_WINAPI #else #define ZLIB_WINAPI #endif #define RECURSIVE_ARCHIVES 1 //#define ZFILE_DEBUG #include "sysconfig.h" #include "sysdeps.h" #include "options.h" #include "zfile.h" #include "disk.h" #include "gui.h" #include "crc32.h" #include "fsdb.h" #include "fsusage.h" #include "zarchive.h" #include "diskutil.h" #include "fdi2raw.h" #include "archivers/zip/unzip.h" #include "archivers/dms/pfile.h" #include "archivers/wrp/warp.h" static struct zfile *zlist = 0; const TCHAR *uae_archive_extensions[] = { _T("zip"), _T("rar"), _T("7z"), _T("lha"), _T("lzh"), _T("lzx"), _T("tar"), NULL }; #define MAX_CACHE_ENTRIES 10 struct zdisktrack { void *data; int len; }; struct zdiskimage { int tracks; struct zdisktrack zdisktracks[2 * 84]; }; struct zcache { TCHAR *name; struct zdiskimage *zd; void *data; int size; struct zcache *next; time_t tm; }; static struct zcache *zcachedata; static struct zcache *cache_get (const TCHAR *name) { struct zcache *zc = zcachedata; while (zc) { if (!_tcscmp (name, zc->name)) { zc->tm = time (NULL); return zc; } zc = zc->next; } return NULL; } static void zcache_flush (void) { } static void zcache_free_data (struct zcache *zc) { int i; if (zc->zd) { for (i = 0; i < zc->zd->tracks; i++) { xfree (zc->zd->zdisktracks[i].data); } xfree (zc->zd); } xfree (zc->data); xfree (zc->name); } static void zcache_free (struct zcache *zc) { struct zcache *pl = NULL; struct zcache *l = zcachedata; struct zcache *nxt; while (l != zc) { if (l == 0) return; pl = l; l = l->next; } if (l) nxt = l->next; zcache_free_data (zc); if (l == 0) return; if(!pl) zcachedata = nxt; else pl->next = nxt; } static void zcache_close (void) { struct zcache *zc = zcachedata; while (zc) { struct zcache *n = zc->next; zcache_free_data (zc); xfree (n); zc = n; } } static void zcache_check (void) { int cnt = 0; struct zcache *zc = zcachedata, *last = NULL; while (zc) { last = zc; zc = zc->next; cnt++; } write_log (_T("CACHE: %d\n"), cnt); if (cnt >= MAX_CACHE_ENTRIES && last) zcache_free (last); } static struct zcache *zcache_put (const TCHAR *name, struct zdiskimage *data) { struct zcache *zc; zcache_check (); zc = xcalloc (struct zcache, 1); zc->next = zcachedata; zcachedata = zc; zc->zd = data; zc->name = my_strdup (name); zc->tm = time (NULL); return zc; } static void checkarchiveparent (struct zfile *z) { // unpack completely if opened in PEEK mode if (z->archiveparent) archive_unpackzfile (z); } static struct zfile *zfile_create (struct zfile *prev) { struct zfile *z; z = xmalloc (struct zfile, 1); if (!z) return 0; memset (z, 0, sizeof *z); z->next = zlist; zlist = z; z->opencnt = 1; if (prev) { z->zfdmask = prev->zfdmask; } return z; } static void zfile_free (struct zfile *f) { if (f->f) fclose (f->f); if (f->deleteafterclose) { _wunlink (f->name); write_log (_T("deleted temporary file '%s'\n"), f->name); } xfree (f->name); xfree (f->data); xfree (f->mode); xfree (f->userdata); xfree (f); } void zfile_exit (void) { struct zfile *l; while ((l = zlist)) { zlist = l->next; zfile_free (l); } } void zfile_fclose (struct zfile *f) { //write_log (_T("%p\n"), f); if (!f) return; if (f->opencnt < 0) { write_log (_T("zfile: tried to free already closed filehandle!\n")); return; } f->opencnt--; if (f->opencnt > 0) return; f->opencnt = -100; if (f->parent) { f->parent->opencnt--; if (f->parent->opencnt <= 0) zfile_fclose (f->parent); } if (f->archiveparent) { zfile_fclose (f->archiveparent); f->archiveparent = NULL; } struct zfile *pl = NULL; struct zfile *nxt; struct zfile *l = zlist; while (l != f) { if (l == 0) { write_log (_T("zfile: tried to free already freed or nonexisting filehandle!\n")); return; } pl = l; l = l->next; } if (l) nxt = l->next; zfile_free (f); if (l == 0) return; if(!pl) zlist = nxt; else pl->next = nxt; } static void removeext (TCHAR *s, TCHAR *ext) { if (_tcslen (s) < _tcslen (ext)) return; if (_tcsicmp (s + _tcslen (s) - _tcslen (ext), ext) == 0) s[_tcslen (s) - _tcslen (ext)] = 0; } static bool checkwrite (struct zfile *zf, int *retcode) { if (zfile_needwrite (zf)) { if (retcode) *retcode = -1; return true; } return false; } static uae_u8 exeheader[]={ 0x00,0x00,0x03,0xf3,0x00,0x00,0x00,0x00 }; static TCHAR *diskimages[] = { _T("adf"), _T("adz"), _T("ipf"), _T("fdi"), _T("dms"), _T("wrp"), _T("dsq"), 0 }; int zfile_gettype (struct zfile *z) { uae_u8 buf[8]; TCHAR *ext; if (!z || !z->name) return ZFILE_UNKNOWN; ext = _tcsrchr (z->name, '.'); if (ext != NULL) { int i; ext++; for (i = 0; diskimages[i]; i++) { if (strcasecmp (ext, diskimages[i]) == 0) return ZFILE_DISKIMAGE; } if (strcasecmp (ext, _T("roz")) == 0) return ZFILE_ROM; if (strcasecmp (ext, _T("uss")) == 0) return ZFILE_STATEFILE; if (strcasecmp (ext, _T("rom")) == 0) return ZFILE_ROM; if (strcasecmp (ext, _T("key")) == 0) return ZFILE_KEY; if (strcasecmp (ext, _T("nvr")) == 0) return ZFILE_NVR; if (strcasecmp (ext, _T("uae")) == 0) return ZFILE_CONFIGURATION; if (strcasecmp (ext, _T("cue")) == 0 || strcasecmp (ext, _T("iso")) == 0 || strcasecmp (ext, _T("ccd")) == 0 || strcasecmp (ext, _T("mds")) == 0) return ZFILE_CDIMAGE; } memset (buf, 0, sizeof (buf)); zfile_fread (buf, 8, 1, z); zfile_fseek (z, -8, SEEK_CUR); if (!memcmp (buf, exeheader, sizeof (buf))) return ZFILE_DISKIMAGE; if (!memcmp (buf, "RDSK", 4)) return ZFILE_HDFRDB; if (!memcmp (buf, "DOS", 3)) { if (z->size < 4 * 1024 * 1024) return ZFILE_DISKIMAGE; else return ZFILE_HDF; } if (ext != NULL) { if (strcasecmp (ext, _T("hdf")) == 0) return ZFILE_HDF; if (strcasecmp (ext, _T("hdz")) == 0) return ZFILE_HDF; } return ZFILE_UNKNOWN; } #define VHD_DYNAMIC 3 #define VHD_FIXED 2 STATIC_INLINE uae_u32 gl (uae_u8 *p) { return (p[0] << 24) | (p[1] << 16) | (p[2] << 8) | (p[3] << 0); } static uae_u32 vhd_checksum (uae_u8 *p, int offset) { int i; uae_u32 sum; sum = 0; for (i = 0; i < 512; i++) { if (offset >= 0 && i >= offset && i < offset + 4) continue; sum += p[i]; } return ~sum; } struct zfile_vhd { int vhd_type; uae_u64 virtsize; uae_u32 vhd_bamoffset; uae_u32 vhd_blocksize; uae_u8 *vhd_header, *vhd_sectormap; uae_u64 vhd_footerblock; uae_u32 vhd_bamsize; uae_u64 vhd_sectormapblock; uae_u32 vhd_bitmapsize; }; static uae_u64 vhd_fread2 (struct zfile *zf, void *dataptrv, uae_u64 offset, uae_u64 len) { uae_u32 bamoffset; uae_u32 sectoroffset; uae_u64 read; struct zfile *zp = zf->parent; struct zfile_vhd *zvhd = (struct zfile_vhd*)zf->userdata; uae_u8 *dataptr = (uae_u8*)dataptrv; //write_log (_T("%08x %08x\n"), (uae_u32)offset, (uae_u32)len); read = 0; if (offset & 511) return read; if (len & 511) return read; while (len > 0) { bamoffset = (offset / zvhd->vhd_blocksize) * 4 + zvhd->vhd_bamoffset; sectoroffset = gl (zvhd->vhd_header + bamoffset); if (sectoroffset == 0xffffffff) { memset (dataptr, 0, 512); read += 512; } else { int bitmapoffsetbits; int bitmapoffsetbytes; int sectormapblock; bitmapoffsetbits = (offset / 512) % (zvhd->vhd_blocksize / 512); bitmapoffsetbytes = bitmapoffsetbits / 8; sectormapblock = sectoroffset * 512 + (bitmapoffsetbytes & ~511); if (zvhd->vhd_sectormapblock != sectormapblock) { // read sector bitmap //write_log (_T("BM %08x\n"), sectormapblock); zfile_fseek (zp, sectormapblock, SEEK_SET); if (zfile_fread (zvhd->vhd_sectormap, 1, 512, zp) != 512) return read; zvhd->vhd_sectormapblock = sectormapblock; } // block allocated in bitmap? if (zvhd->vhd_sectormap[bitmapoffsetbytes & 511] & (1 << (7 - (bitmapoffsetbits & 7)))) { // read data block int block = sectoroffset * 512 + zvhd->vhd_bitmapsize + bitmapoffsetbits * 512; //write_log (_T("DB %08x\n"), block); zfile_fseek (zp, block, SEEK_SET); if (zfile_fread (dataptr, 1, 512, zp) != 512) return read; } else { memset (dataptr, 0, 512); } read += 512; } len -= 512; dataptr += 512; offset += 512; } return read; } static uae_s64 vhd_fread (void *data, uae_u64 l1, uae_u64 l2, struct zfile *zf) { uae_u64 size = l1 * l2; uae_u64 out = 0; int len = 0; if (!l1 || !l2) return 0; if ((zf->seek & 511) || (size & 511)) { uae_u8 tmp[512]; if (zf->seek & 511) { int s; s = 512 - (zf->seek & 511); vhd_fread2 (zf, tmp, zf->seek & ~511, 512); memcpy ((uae_u8*)data + len, tmp + 512 - s, s); len += s; out += s; zf->seek += s; } while (size > 0) { int s = size > 512 ? 512 : size; vhd_fread2 (zf, tmp, zf->seek, 512); memcpy ((uae_u8*)data + len, tmp, s); zf->seek += s; size -= s; out += s; } } else { out = vhd_fread2 (zf, data, zf->seek, size); zf->seek += out; out /= l1; } return out; } static struct zfile *vhd (struct zfile *z) { uae_u8 tmp[512], tmp2[512]; uae_u32 v; struct zfile_vhd *zvhd; uae_u64 fsize; zvhd = xcalloc (struct zfile_vhd, 1); zfile_fseek (z, 0, SEEK_END); fsize = zfile_ftell (z); zfile_fseek (z, 0, SEEK_SET); if (zfile_fread (tmp, 1, 512, z) != 512) goto nonvhd; v = gl (tmp + 8); // features if ((v & 3) != 2) goto nonvhd; v = gl (tmp + 8 + 4); // version if ((v >> 16) != 1) goto nonvhd; zvhd->vhd_type = gl (tmp + 8 + 4 + 4 + 8 + 4 + 4 + 4 + 4 + 8 + 8 + 4); if (zvhd->vhd_type != VHD_FIXED && zvhd->vhd_type != VHD_DYNAMIC) goto nonvhd; v = gl (tmp + 8 + 4 + 4 + 8 + 4 + 4 + 4 + 4 + 8 + 8 + 4 + 4); if (v == 0) goto nonvhd; if (vhd_checksum (tmp, 8 + 4 + 4 + 8 + 4 + 4 + 4 + 4 + 8 + 8 + 4 + 4) != v) goto nonvhd; zfile_fseek (z, fsize - sizeof tmp2, SEEK_SET); if (zfile_fread (tmp2, 1, 512, z) != 512) goto end; if (memcmp (tmp, tmp2, sizeof tmp)) goto nonvhd; zvhd->vhd_footerblock = fsize - 512; zvhd->virtsize = (uae_u64)(gl (tmp + 8 + 4 + 4 + 8 + 4 + 4 +4 + 4 + 8)) << 32; zvhd->virtsize |= gl (tmp + 8 + 4 + 4 + 8 + 4 + 4 +4 + 4 + 8 + 4); if (zvhd->vhd_type == VHD_DYNAMIC) { uae_u32 size; zvhd->vhd_bamoffset = gl (tmp + 8 + 4 + 4 + 4); if (zvhd->vhd_bamoffset == 0 || zvhd->vhd_bamoffset >= fsize) goto end; zfile_fseek (z, zvhd->vhd_bamoffset, SEEK_SET); if (zfile_fread (tmp, 1, 512, z) != 512) goto end; v = gl (tmp + 8 + 8 + 8 + 4 + 4 + 4); if (vhd_checksum (tmp, 8 + 8 + 8 + 4 + 4 + 4) != v) goto end; v = gl (tmp + 8 + 8 + 8); if ((v >> 16) != 1) goto end; zvhd->vhd_blocksize = gl (tmp + 8 + 8 + 8 + 4 + 4); zvhd->vhd_bamoffset = gl (tmp + 8 + 8 + 4); zvhd->vhd_bamsize = (((zvhd->virtsize + zvhd->vhd_blocksize - 1) / zvhd->vhd_blocksize) * 4 + 511) & ~511; size = zvhd->vhd_bamoffset + zvhd->vhd_bamsize; zvhd->vhd_header = xmalloc (uae_u8, size); zfile_fseek (z, 0, SEEK_SET); if (zfile_fread (zvhd->vhd_header, 1, size, z) != size) goto end; zvhd->vhd_sectormap = xmalloc (uae_u8, 512); zvhd->vhd_sectormapblock = -1; zvhd->vhd_bitmapsize = ((zvhd->vhd_blocksize / (8 * 512)) + 511) & ~511; } z = zfile_fopen_parent (z, NULL, 0, zvhd->virtsize); z->useparent = 0; z->dataseek = 1; z->userdata = zvhd; z->zfileread = vhd_fread; #ifdef FSUAE // FIXME: should really be %llu below? #endif write_log (_T("%s is VHD %s image, virtual size=%lldK\n"), zfile_getname (z), zvhd->vhd_type == 2 ? _T("fixed") : _T("dynamic"), zvhd->virtsize / 1024); return z; nonvhd: end: return z; } static struct zfile *zfile_gunzip (struct zfile *z, int *retcode) { uae_u8 header[2 + 1 + 1 + 4 + 1 + 1]; z_stream zs; int i, size, ret, first; uae_u8 flags; uae_s64 offset; TCHAR name[MAX_DPATH]; uae_u8 buffer[8192]; struct zfile *z2; uae_u8 b; if (checkwrite (z, retcode)) return NULL; _tcscpy (name, z->name); memset (&zs, 0, sizeof (zs)); memset (header, 0, sizeof (header)); zfile_fread (header, sizeof (header), 1, z); flags = header[3]; if (header[0] != 0x1f && header[1] != 0x8b) return NULL; if (flags & 2) /* multipart not supported */ return NULL; if (flags & 32) /* encryption not supported */ return NULL; if (flags & 4) { /* skip extra field */ zfile_fread (&b, 1, 1, z); size = b; zfile_fread (&b, 1, 1, z); size |= b << 8; zfile_fseek (z, size + 2, SEEK_CUR); } if (flags & 8) { /* get original file name */ uae_char aname[MAX_DPATH]; i = 0; do { zfile_fread (aname + i, 1, 1, z); } while (i < MAX_DPATH - 1 && aname[i++]); aname[i] = 0; au_copy (name, MAX_DPATH, aname); } if (flags & 16) { /* skip comment */ i = 0; do { b = 0; zfile_fread (&b, 1, 1, z); } while (b); } removeext (name, _T(".gz")); offset = zfile_ftell (z); zfile_fseek (z, -4, SEEK_END); zfile_fread (&b, 1, 1, z); size = b; zfile_fread (&b, 1, 1, z); size |= b << 8; zfile_fread (&b, 1, 1, z); size |= b << 16; zfile_fread (&b, 1, 1, z); size |= b << 24; if (size < 8 || size > 256 * 1024 * 1024) /* safety check */ return NULL; zfile_fseek (z, offset, SEEK_SET); z2 = zfile_fopen_empty (z, name, size); if (!z2) return NULL; zs.next_out = z2->data; zs.avail_out = size; first = 1; do { zs.next_in = buffer; zs.avail_in = zfile_fread (buffer, 1, sizeof (buffer), z); if (first) { if (inflateInit2_ (&zs, -MAX_WBITS, ZLIB_VERSION, sizeof (z_stream)) != Z_OK) break; first = 0; } ret = inflate (&zs, 0); } while (ret == Z_OK); inflateEnd (&zs); if (ret != Z_STREAM_END || first != 0) { zfile_fclose (z2); return NULL; } zfile_fclose (z); return z2; } struct zfile *zfile_gunzip (struct zfile *z) { return zfile_gunzip (z, NULL); } static void truncate880k (struct zfile *z) { int i; uae_u8 *b; if (z == NULL || z->data == NULL) return; if (z->size < 880 * 512 * 2) { int size = 880 * 512 * 2 - z->size; b = xcalloc (uae_u8, size); zfile_fwrite (b, size, 1, z); xfree (b); return; } for (i = 880 * 512 * 2; i < z->size; i++) { if (z->data[i]) return; } z->size = 880 * 512 * 2; } static struct zfile *extadf (struct zfile *z, int index, int *retcode) { int i, r; struct zfile *zo; uae_u16 *mfm; uae_u16 *amigamfmbuffer; uae_u8 writebuffer_ok[32], *outbuf; int tracks, len, offs, pos; uae_u8 buffer[2 + 2 + 4 + 4]; int outsize; TCHAR newname[MAX_DPATH]; TCHAR *ext; int cantrunc = 0; int done = 0; if (index > 1) return NULL; mfm = xcalloc (uae_u16, 32000 / 2); amigamfmbuffer = xcalloc (uae_u16, 32000 / 2); outbuf = xcalloc (uae_u8, 16384); zfile_fread (buffer, 1, 8, z); zfile_fread (buffer, 1, 4, z); tracks = buffer[2] * 256 + buffer[3]; offs = 8 + 2 + 2 + tracks * (2 + 2 + 4 + 4); _tcscpy (newname, zfile_getname (z)); ext = _tcsrchr (newname, '.'); if (ext) { _tcscpy (newname + _tcslen (newname) - _tcslen (ext), _T(".std.adf")); } else { _tcscat (newname, _T(".std.adf")); } if (index > 0) _tcscpy (newname + _tcslen (newname) - 4, _T(".ima")); zo = zfile_fopen_empty (z, newname, 0); if (!zo) goto end; if (retcode) *retcode = 1; pos = 12; outsize = 0; for (i = 0; i < tracks; i++) { int type, bitlen; zfile_fseek (z, pos, SEEK_SET); zfile_fread (buffer, 2 + 2 + 4 + 4, 1, z); pos = zfile_ftell (z); type = buffer[2] * 256 + buffer[3]; len = buffer[5] * 65536 + buffer[6] * 256 + buffer[7]; bitlen = buffer[9] * 65536 + buffer[10] * 256 + buffer[11]; zfile_fseek (z, offs, SEEK_SET); if (type == 1) { zfile_fread (mfm, len, 1, z); memset (writebuffer_ok, 0, sizeof writebuffer_ok); memset (outbuf, 0, 16384); if (index == 0) { r = isamigatrack (amigamfmbuffer, (uae_u8*)mfm, len, outbuf, writebuffer_ok, i, &outsize); if (r < 0 && i == 0) { zfile_seterror (_T("'%s' is not AmigaDOS formatted"), zo->name); goto end; } if (i == 0) done = 1; } else { r = ispctrack (amigamfmbuffer, (uae_u8*)mfm, len, outbuf, writebuffer_ok, i, &outsize); if (r < 0 && i == 0) { zfile_seterror (_T("'%s' is not PC formatted"), zo->name); goto end; } if (i == 0) done = 1; } } else { outsize = 512 * 11; if (bitlen / 8 > 18000) outsize *= 2; zfile_fread (outbuf, outsize, 1, z); cantrunc = 1; if (index == 0) done = 1; } zfile_fwrite (outbuf, outsize, 1, zo); offs += len; } if (done == 0) goto end; zfile_fclose (z); xfree (mfm); xfree (amigamfmbuffer); if (cantrunc) truncate880k (zo); return zo; end: zfile_fclose (zo); xfree (mfm); xfree (amigamfmbuffer); return NULL; } #include "fdi2raw.h" static struct zfile *fdi (struct zfile *z, int index, int *retcode) { int i, j, r; struct zfile *zo; TCHAR *orgname = zfile_getname (z); TCHAR *ext = _tcsrchr (orgname, '.'); TCHAR newname[MAX_DPATH]; uae_u16 *amigamfmbuffer; uae_u8 writebuffer_ok[32], *outbuf; int tracks, len, outsize; FDI *fdi; int startpos = 0; uae_u8 tmp[12]; struct zcache *zc; if (checkwrite (z, retcode)) return NULL; if (index > 2) return NULL; zc = cache_get (z->name); if (!zc) { uae_u16 *mfm; struct zdiskimage *zd; fdi = fdi2raw_header (z); if (!fdi) return NULL; mfm = xcalloc (uae_u16, 32000 / 2); zd = xcalloc (struct zdiskimage, 1); tracks = fdi2raw_get_last_track (fdi); zd->tracks = tracks; for (i = 0; i < tracks; i++) { uae_u8 *buf, *p; fdi2raw_loadtrack (fdi, mfm, NULL, i, &len, NULL, NULL, 1); len /= 8; buf = p = xmalloc (uae_u8, len); for (j = 0; j < len / 2; j++) { uae_u16 v = mfm[j]; *p++ = v >> 8; *p++ = v; } zd->zdisktracks[i].data = buf; zd->zdisktracks[i].len = len; } fdi2raw_header_free (fdi); zc = zcache_put (z->name, zd); } amigamfmbuffer = xcalloc (uae_u16, 32000 / 2); outbuf = xcalloc (uae_u8, 16384); tracks = zc->zd->tracks; if (ext) { _tcscpy (newname, orgname); _tcscpy (newname + _tcslen (newname) - _tcslen (ext), _T(".adf")); } else { _tcscat (newname, _T(".adf")); } if (index == 1) _tcscpy (newname + _tcslen (newname) - 4, _T(".ima")); if (index == 2) _tcscpy (newname + _tcslen (newname) - 4, _T(".ext.adf")); zo = zfile_fopen_empty (z, newname, 0); if (!zo) goto end; if (retcode) *retcode = 1; if (index > 1) { zfile_fwrite ("UAE-1ADF", 8, 1, zo); tmp[0] = 0; tmp[1] = 0; /* flags (reserved) */ tmp[2] = 0; tmp[3] = tracks; /* number of tracks */ zfile_fwrite (tmp, 4, 1, zo); memset (tmp, 0, sizeof tmp); tmp[2] = 0; tmp[3] = 1; /* track type */ startpos = zfile_ftell (zo); for (i = 0; i < tracks; i++) zfile_fwrite (tmp, sizeof tmp, 1, zo); } outsize = 0; for (i = 0; i < tracks; i++) { uae_u8 *p = (uae_u8*)zc->zd->zdisktracks[i].data; len = zc->zd->zdisktracks[i].len; memset (writebuffer_ok, 0, sizeof writebuffer_ok); memset (outbuf, 0, 16384); if (index == 0) { r = isamigatrack (amigamfmbuffer, p, len, outbuf, writebuffer_ok, i, &outsize); if (r < 0 && i == 0) { zfile_seterror (_T("'%s' is not AmigaDOS formatted"), orgname); goto end; } zfile_fwrite (outbuf, outsize, 1, zo); } else if (index == 1) { r = ispctrack (amigamfmbuffer, p, len, outbuf, writebuffer_ok, i, &outsize); if (r < 0 && i == 0) { zfile_seterror (_T("'%s' is not PC formatted"), orgname); goto end; } zfile_fwrite (outbuf, outsize, 1, zo); } else { int pos = zfile_ftell (zo); int maxlen = len > 12798 ? len : 12798; int lenb = len * 8; if (maxlen & 1) maxlen++; zfile_fseek (zo, startpos + i * 12 + 4, SEEK_SET); tmp[4] = 0; tmp[5] = 0; tmp[6] = maxlen >> 8; tmp[7] = maxlen; tmp[8] = lenb >> 24; tmp[9] = lenb >> 16; tmp[10] = lenb >> 8; tmp[11] = lenb; zfile_fwrite (tmp + 4, 2, 4, zo); zfile_fseek (zo, pos, SEEK_SET); zfile_fwrite (p, 1, len, zo); if (maxlen > len) zfile_fwrite (outbuf, 1, maxlen - len, zo); } } zfile_fclose (z); xfree (amigamfmbuffer); xfree (outbuf); if (index == 0) truncate880k (zo); return zo; end: zfile_fclose (zo); xfree (amigamfmbuffer); xfree (outbuf); return NULL; } #ifdef CAPS #ifdef FSUAE #include "caps/caps.h" #else #include "caps/caps_win32.h" #endif static struct zfile *ipf (struct zfile *z, int index, int *retcode) { int i, j, r; struct zfile *zo; TCHAR *orgname = zfile_getname (z); TCHAR *ext = _tcsrchr (orgname, '.'); TCHAR newname[MAX_DPATH]; uae_u16 *amigamfmbuffer; uae_u8 writebuffer_ok[32]; int tracks, len; int outsize; int startpos = 0; uae_u8 *outbuf; uae_u8 tmp[12]; struct zcache *zc; if (checkwrite (z, retcode)) return NULL; if (index > 2) return NULL; zc = cache_get (z->name); if (!zc) { uae_u16 *mfm; struct zdiskimage *zd; if (!caps_loadimage (z, 0, &tracks)) return NULL; mfm = xcalloc (uae_u16, 32000 / 2); zd = xcalloc (struct zdiskimage, 1); zd->tracks = tracks; for (i = 0; i < tracks; i++) { uae_u8 *buf, *p; int mrev, gapo; caps_loadtrack (mfm, NULL, 0, i, &len, &mrev, &gapo); //write_log (_T("%d: %d %d %d\n"), i, mrev, gapo, len); len /= 8; buf = p = xmalloc (uae_u8, len); for (j = 0; j < len / 2; j++) { uae_u16 v = mfm[j]; *p++ = v >> 8; *p++ = v; } zd->zdisktracks[i].data = buf; zd->zdisktracks[i].len = len; } caps_unloadimage (0); zc = zcache_put (z->name, zd); } outbuf = xcalloc (uae_u8, 16384); amigamfmbuffer = xcalloc (uae_u16, 32000 / 2); if (ext) { _tcscpy (newname, orgname); _tcscpy (newname + _tcslen (newname) - _tcslen (ext), _T(".adf")); } else { _tcscat (newname, _T(".adf")); } if (index == 1) _tcscpy (newname + _tcslen (newname) - 4, _T(".ima")); if (index == 2) _tcscpy (newname + _tcslen (newname) - 4, _T(".ext.adf")); zo = zfile_fopen_empty (z, newname, 0); if (!zo) goto end; if (retcode) *retcode = 1; tracks = zc->zd->tracks; if (index > 1) { zfile_fwrite ("UAE-1ADF", 8, 1, zo); tmp[0] = 0; tmp[1] = 0; /* flags (reserved) */ tmp[2] = 0; tmp[3] = tracks; /* number of tracks */ zfile_fwrite (tmp, 4, 1, zo); memset (tmp, 0, sizeof tmp); tmp[2] = 0; tmp[3] = 1; /* track type */ startpos = zfile_ftell (zo); for (i = 0; i < tracks; i++) zfile_fwrite (tmp, sizeof tmp, 1, zo); } outsize = 0; for (i = 0; i < tracks; i++) { uae_u8 *p = (uae_u8*)zc->zd->zdisktracks[i].data; len = zc->zd->zdisktracks[i].len; memset (writebuffer_ok, 0, sizeof writebuffer_ok); memset (outbuf, 0, 16384); if (index == 0) { r = isamigatrack (amigamfmbuffer, p, len, outbuf, writebuffer_ok, i, &outsize); if (r < 0 && i == 0) { zfile_seterror (_T("'%s' is not AmigaDOS formatted"), orgname); goto end; } zfile_fwrite (outbuf, 1, outsize, zo); } else if (index == 1) { r = ispctrack (amigamfmbuffer, p, len, outbuf, writebuffer_ok, i, &outsize); if (r < 0 && i == 0) { zfile_seterror (_T("'%s' is not PC formatted"), orgname); goto end; } zfile_fwrite (outbuf, outsize, 1, zo); } else { int pos = zfile_ftell (zo); int maxlen = len > 12798 ? len : 12798; int lenb = len * 8; if (maxlen & 1) maxlen++; zfile_fseek (zo, startpos + i * 12 + 4, SEEK_SET); tmp[4] = 0; tmp[5] = 0; tmp[6] = maxlen >> 8; tmp[7] = maxlen; tmp[8] = lenb >> 24; tmp[9] = lenb >> 16; tmp[10] = lenb >> 8; tmp[11] = lenb; zfile_fwrite (tmp + 4, 2, 4, zo); zfile_fseek (zo, pos, SEEK_SET); zfile_fwrite (p, 1, len, zo); if (maxlen > len) zfile_fwrite (outbuf, 1, maxlen - len, zo); } } zfile_fclose (z); xfree (amigamfmbuffer); xfree (outbuf); if (index == 0) truncate880k (zo); return zo; end: zfile_fclose (zo); xfree (amigamfmbuffer); xfree (outbuf); return NULL; } #endif #ifdef A_LZX static struct zfile *dsq (struct zfile *z, int lzx, int *retcode) { struct zfile *zi = NULL; struct zvolume *zv = NULL; if (checkwrite (z, retcode)) return NULL; if (lzx) { zv = archive_directory_lzx (z); if (zv) { if (zv->root.child) zi = archive_access_lzx (zv->root.child); } } else { zi = z; } if (zi) { uae_u8 *buf = zfile_getdata (zi, 0, -1); if (!memcmp (buf, "PKD\x13", 4) || !memcmp (buf, "PKD\x11", 4)) { TCHAR *fn; int sectors = buf[18]; int heads = buf[15]; int blocks = (buf[6] << 8) | buf[7]; int blocksize = (buf[10] << 8) | buf[11]; struct zfile *zo; int size = blocks * blocksize; int off; int i; uae_u8 *bitmap = NULL; uae_u8 *nullsector; nullsector = xcalloc (uae_u8, blocksize); sectors /= heads; if (buf[3] == 0x13) { off = 52; if (buf[off - 1] == 1) { bitmap = &buf[off]; off += (blocks + 7) / 8; } else if (buf[off - 1] > 1) { write_log (_T("unknown DSQ extra header type %d\n"), buf[off - 1]); } } else { off = 32; } if (size < 1760 * 512) size = 1760 * 512; if (zfile_getfilename (zi) && _tcslen (zfile_getfilename (zi))) { fn = xmalloc (TCHAR, (_tcslen (zfile_getfilename (zi)) + 5)); _tcscpy (fn, zfile_getfilename (zi)); _tcscat (fn, _T(".adf")); } else { fn = my_strdup (_T("dsq.adf")); } zo = zfile_fopen_empty (z, fn, size); xfree (fn); int seccnt = 0; for (i = 0; i < blocks; i++) { int bmoff = i - 2; int boff = -1; uae_u32 mask = 0; if (bitmap) { boff = (bmoff / 32) * 4; mask = (bitmap[boff] << 24) | (bitmap[boff + 1] << 16) | (bitmap[boff + 2] << 8) | (bitmap[boff + 3]); } if (bmoff >= 0 && boff >= 0 && (mask & (1 << (bmoff & 31)))) { zfile_fwrite (nullsector, blocksize, 1, zo); } else { zfile_fwrite (buf + off, blocksize, 1, zo); off += blocksize; seccnt++; } if ((i % sectors) == sectors - 1) { off += seccnt * 16; seccnt = 0; } } zfile_fclose_archive (zv); zfile_fclose (z); xfree (buf); xfree (nullsector); return zo; } xfree (buf); } if (lzx) zfile_fclose (zi); return z; } #endif #ifdef A_WRP static struct zfile *wrp (struct zfile *z, int *retcode) { if (zfile_needwrite (z)) { if (retcode) *retcode = -1; return NULL; } return unwarp (z); } #endif #ifdef A_7Z #include "7z/Xz.h" #include "7z/Lzmadec.h" #include "7z/7zCrc.h" static void *SzAlloc (void *p, size_t size) { return xmalloc (uae_u8, size); } static void SzFree(void *p, void *address) { xfree (address); } #define XZ_OUT_SIZE 10000 #define XZ_IN_SIZE 10000 static struct zfile *xz (struct zfile *z, int *retcode) { static bool iscrc; ISzAlloc allocImp; CXzUnpacker cx; ECoderStatus status; struct zfile *zo = NULL; uae_u8 out[XZ_OUT_SIZE], in[XZ_IN_SIZE]; if (checkwrite (z, retcode)) return NULL; memset (&cx, 0, sizeof cx); allocImp.Alloc = SzAlloc; allocImp.Free = SzFree; if (!iscrc) CrcGenerateTable (); iscrc = true; if (XzUnpacker_Create (&cx, &allocImp) != SZ_OK) return NULL; int outwritten = 0; int towrite = 0; bool first = true; for (;;) { int read = zfile_fread (in, 1, XZ_IN_SIZE, z); if (first) { if (!(in[0] == 0xfd && in[1] == 0x37 && in[2] == 0x7a && in[3] == 0x58 && in[4] == 0x5a && in[5] == 0)) break; } first = false; if (read == 0) break; if (read < 0) { zfile_fclose (zo); zo = NULL; break; } if (!zo) zo = zfile_fopen_empty (z, z->name); if (!zo) break; uae_u8 *inp = in; for (;;) { SizeT srclen = read; SizeT outlen = XZ_OUT_SIZE; if (XzUnpacker_Code (&cx, out, &outlen, inp, &srclen, LZMA_FINISH_ANY, &status) != SZ_OK) { zfile_fclose (zo); zo = NULL; break; } if (status != CODER_STATUS_NEEDS_MORE_INPUT && status != CODER_STATUS_NOT_FINISHED) { zfile_fclose (zo); zo = NULL; break; } zfile_fwrite (out, outlen, 1, zo); if (status == CODER_STATUS_FINISHED_WITH_MARK) break; if (srclen == read) break; inp += srclen; read -= srclen; } } XzUnpacker_Free (&cx); return zo; } #endif #ifdef A_DMS static struct zfile *dms (struct zfile *z, int index, int *retcode) { int ret; struct zfile *zo; TCHAR *orgname = zfile_getname (z); TCHAR *ext = _tcsrchr (orgname, '.'); TCHAR newname[MAX_DPATH]; static int recursive; int i; struct zfile *zextra[DMS_EXTRA_SIZE] = { 0 }; if (checkwrite (z, retcode)) return NULL; if (recursive) return NULL; if (ext) { _tcscpy (newname, orgname); _tcscpy (newname + _tcslen (newname) - _tcslen (ext), _T(".adf")); } else { _tcscat (newname, _T(".adf")); } zo = zfile_fopen_empty (z, newname, 1760 * 512); if (!zo) return NULL; ret = DMS_Process_File (z, zo, CMD_UNPACK, OPT_VERBOSE, 0, 0, 0, zextra); if (ret == NO_PROBLEM || ret == DMS_FILE_END) { int off = zfile_ftell (zo); if (off >= 1760 * 512 / 3 && off <= 1760 * 512 * 3 / 4) { // possible split dms? if (_tcslen (orgname) > 5) { TCHAR *s = orgname + _tcslen (orgname) - 5; if (!_tcsicmp (s, _T("a.dms"))) { TCHAR *fn2 = my_strdup (orgname); struct zfile *z2; fn2[_tcslen (fn2) - 5]++; recursive++; z2 = zfile_fopen (fn2, _T("rb"), z->zfdmask); recursive--; if (z2) { ret = DMS_Process_File (z2, zo, CMD_UNPACK, OPT_VERBOSE, 0, 0, 1, NULL); zfile_fclose (z2); } xfree (fn2); } } } zfile_fseek (zo, 0, SEEK_SET); if (index > 0) { zfile_fclose (zo); zo = NULL; for (i = 0; i < DMS_EXTRA_SIZE && zextra[i]; i++); if (index > i) goto end; zo = zextra[index - 1]; zextra[index - 1] = NULL; } if (retcode) *retcode = 1; zfile_fclose (z); z = NULL; } else { zfile_fclose (zo); zo = NULL; } end: for (i = 0; i < DMS_EXTRA_SIZE; i++) zfile_fclose (zextra[i]); return zo; } #endif const TCHAR *uae_ignoreextensions[] = { _T(".gif"), _T(".jpg"), _T(".png"), _T(".xml"), _T(".pdf"), _T(".txt"), 0 }; const TCHAR *uae_diskimageextensions[] = { _T(".adf"), _T(".adz"), _T(".ipf"), _T(".fdi"), _T(".exe"), _T(".dms"), _T(".wrp"), _T(".dsq"), 0 }; int zfile_is_ignore_ext (const TCHAR *name) { int i; const TCHAR *ext; ext = _tcsrchr (name, '.'); if (!ext) return 0; for (i = 0; uae_ignoreextensions[i]; i++) { if (!strcasecmp (uae_ignoreextensions[i], ext)) return 1; } return 0; } int zfile_is_diskimage (const TCHAR *name) { int i; const TCHAR *ext = _tcsrchr (name, '.'); if (!ext) return 0; i = 0; while (uae_diskimageextensions[i]) { if (!strcasecmp (ext, uae_diskimageextensions[i])) return HISTORY_FLOPPY; i++; } if (!_tcsicmp (ext, _T(".cue"))) return HISTORY_CD; return -1; } static const TCHAR *archive_extensions[] = { _T("7z"), _T("rar"), _T("zip"), _T("lha"), _T("lzh"), _T("lzx"), _T("adf"), _T("adz"), _T("dsq"), _T("dms"), _T("ipf"), _T("fdi"), _T("wrp"), _T("ima"), _T("hdf"), _T("tar"), NULL }; static const TCHAR *plugins_7z[] = { _T("7z"), _T("rar"), _T("zip"), _T("lha"), _T("lzh"), _T("lzx"), _T("adf"), _T("dsq"), _T("hdf"), _T("tar"), NULL }; static const uae_char *plugins_7z_x[] = { "7z", "Rar!", "MK", NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL }; static const int plugins_7z_t[] = { ArchiveFormat7Zip, ArchiveFormatRAR, ArchiveFormatZIP, ArchiveFormatLHA, ArchiveFormatLHA, ArchiveFormatLZX, ArchiveFormatADF, ArchiveFormatADF, ArchiveFormatADF, ArchiveFormatTAR }; static const int plugins_7z_m[] = { ZFD_ARCHIVE, ZFD_ARCHIVE, ZFD_ARCHIVE, ZFD_ARCHIVE, ZFD_ARCHIVE, ZFD_ARCHIVE, ZFD_ADF, ZFD_ADF, ZFD_ADF, ZFD_ARCHIVE }; int iszip (struct zfile *z, int mask) { TCHAR *name = z->name; TCHAR *ext = _tcsrchr (name, '.'); uae_u8 header[32]; int i; if (!ext) return 0; memset (header, 0, sizeof (header)); zfile_fseek (z, 0, SEEK_SET); zfile_fread (header, sizeof (header), 1, z); zfile_fseek (z, 0, SEEK_SET); if (mask & ZFD_ARCHIVE) { if (!strcasecmp (ext, _T(".zip")) || !strcasecmp (ext, _T(".rp9"))) { if (header[0] == 'P' && header[1] == 'K') return ArchiveFormatZIP; return 0; } } if (mask & ZFD_ARCHIVE) { if (!strcasecmp (ext, _T(".7z"))) { if (header[0] == '7' && header[1] == 'z') return ArchiveFormat7Zip; return 0; } if (!strcasecmp (ext, _T(".rar"))) { if (header[0] == 'R' && header[1] == 'a' && header[2] == 'r' && header[3] == '!') return ArchiveFormatRAR; return 0; } if (!strcasecmp (ext, _T(".lha")) || !strcasecmp (ext, _T(".lzh"))) { if (header[2] == '-' && header[3] == 'l' && header[4] == 'h' && header[6] == '-') return ArchiveFormatLHA; return 0; } if (!strcasecmp (ext, _T(".lzx"))) { if (header[0] == 'L' && header[1] == 'Z' && header[2] == 'X') return ArchiveFormatLZX; return 0; } } if (mask & ZFD_ADF) { if (!strcasecmp (ext, _T(".adf"))) { if (header[0] == 'D' && header[1] == 'O' && header[2] == 'S' && (header[3] >= 0 && header[3] <= 7)) return ArchiveFormatADF; if (isfat (header)) return ArchiveFormatFAT; return 0; } if (!strcasecmp (ext, _T(".ima"))) { if (isfat (header)) return ArchiveFormatFAT; } } if (mask & ZFD_HD) { if (!strcasecmp (ext, _T(".hdf"))) { if (header[0] == 'D' && header[1] == 'O' && header[2] == 'S' && (header[3] >= 0 && header[3] <= 7)) return ArchiveFormatADF; if (header[0] == 'S' && header[1] == 'F' && header[2] == 'S') return ArchiveFormatADF; if (header[0] == 'R' && header[1] == 'D' && header[2] == 'S' && header[3] == 'K') return ArchiveFormatRDB; if (isfat (header)) return ArchiveFormatFAT; return 0; } } #if defined(ARCHIVEACCESS) for (i = 0; plugins_7z_x[i]; i++) { if ((plugins_7z_m[i] & mask) && plugins_7z_x[i] && !strcasecmp (ext + 1, plugins_7z[i]) && !memcmp (header, plugins_7z_x[i], strlen (plugins_7z_x[i]))) return plugins_7z_t[i]; } #endif return 0; } int iszip (struct zfile *z) { return iszip (z, ZFD_NORMAL); } struct zfile *zuncompress (struct znode *parent, struct zfile *z, int dodefault, int mask, int *retcode, int index) { TCHAR *name = z->name; TCHAR *ext = NULL; uae_u8 header[32]; int i; if (retcode) *retcode = 0; if (!mask) return NULL; if (name) { ext = _tcsrchr (name, '.'); if (ext) ext++; } if (ext != NULL) { if (mask & ZFD_ARCHIVE) { if (strcasecmp (ext, _T("7z")) == 0) return archive_access_select (parent, z, ArchiveFormat7Zip, dodefault, retcode, index); if (strcasecmp (ext, _T("zip")) == 0) return archive_access_select (parent, z, ArchiveFormatZIP, dodefault, retcode, index); if (strcasecmp (ext, _T("lha")) == 0 || strcasecmp (ext, _T("lzh")) == 0) return archive_access_select (parent, z, ArchiveFormatLHA, dodefault, retcode, index); if (strcasecmp (ext, _T("lzx")) == 0) return archive_access_select (parent, z, ArchiveFormatLZX, dodefault, retcode, index); if (strcasecmp (ext, _T("rar")) == 0) return archive_access_select (parent, z, ArchiveFormatRAR, dodefault, retcode, index); if (strcasecmp (ext, _T("tar")) == 0) return archive_access_select (parent, z, ArchiveFormatTAR, dodefault, retcode, index); } if (mask & ZFD_UNPACK) { if (index == 0) { if (strcasecmp (ext, _T("gz")) == 0) return zfile_gunzip (z, retcode); if (strcasecmp (ext, _T("adz")) == 0) return zfile_gunzip (z, retcode); if (strcasecmp (ext, _T("roz")) == 0) return zfile_gunzip (z, retcode); if (strcasecmp (ext, _T("hdz")) == 0) return zfile_gunzip (z, retcode); #ifdef A_WRP if (strcasecmp (ext, _T("wrp")) == 0) return wrp (z, retcode); #endif #ifdef A_7Z if (strcasecmp (ext, _T("xz")) == 0) return xz (z, retcode); #endif } #ifdef A_DMS if (strcasecmp (ext, _T("dms")) == 0) return dms (z, index, retcode); #endif } if (mask & ZFD_RAWDISK) { #ifdef CAPS if (strcasecmp (ext, _T("ipf")) == 0) return ipf (z, index, retcode); #endif if (strcasecmp (ext, _T("fdi")) == 0) return fdi (z, index, retcode); if (mask & (ZFD_RAWDISK_PC | ZFD_RAWDISK_AMIGA)) return NULL; } #if defined(ARCHIVEACCESS) if (index == 0) { for (i = 0; plugins_7z_x[i]; i++) { if ((plugins_7z_t[i] & mask) && strcasecmp (ext, plugins_7z[i]) == 0) return archive_access_arcacc_select (z, plugins_7z_t[i], retcode); } } #endif } memset (header, 0, sizeof (header)); zfile_fseek (z, 0, SEEK_SET); zfile_fread (header, sizeof (header), 1, z); zfile_fseek (z, 0, SEEK_SET); if (!memcmp (header, "conectix", 8)) { if (index > 0) return NULL; return vhd (z); } if (mask & ZFD_UNPACK) { if (index == 0) { if (header[0] == 0x1f && header[1] == 0x8b) return zfile_gunzip (z, retcode); #ifdef A_LZX if (header[0] == 'P' && header[1] == 'K' && header[2] == 'D') return dsq (z, 0, retcode); #endif #ifdef A_7Z if (header[0] == 0xfd && header[1] == 0x37 && header[2] == 0x7a && header[3] == 0x58 && header[4] == 0x5a && header[5] == 0) return xz (z, retcode); #endif } #ifdef A_DMS if (header[0] == 'D' && header[1] == 'M' && header[2] == 'S' && header[3] == '!') return dms (z, index, retcode); #endif } if (mask & ZFD_RAWDISK) { #ifdef CAPS if (header[0] == 'C' && header[1] == 'A' && header[2] == 'P' && header[3] == 'S') return ipf (z, index, retcode); #endif if (!memcmp (header, "Formatte", 8)) return fdi (z, index, retcode); if (!memcmp (header, "UAE-1ADF", 8)) return extadf (z, index, retcode); } if (index > 0) return NULL; if (mask & ZFD_ARCHIVE) { if (header[0] == 'P' && header[1] == 'K') return archive_access_select (parent, z, ArchiveFormatZIP, dodefault, retcode, index); if (header[0] == 'R' && header[1] == 'a' && header[2] == 'r' && header[3] == '!') return archive_access_select (parent, z, ArchiveFormatRAR, dodefault, retcode, index); if (header[0] == 'L' && header[1] == 'Z' && header[2] == 'X') return archive_access_select (parent, z, ArchiveFormatLZX, dodefault, retcode, index); if (header[2] == '-' && header[3] == 'l' && header[4] == 'h' && header[6] == '-') return archive_access_select (parent, z, ArchiveFormatLHA, dodefault, retcode, index); } if (mask & ZFD_ADF) { if (header[0] == 'D' && header[1] == 'O' && header[2] == 'S' && (header[3] >= 0 && header[3] <= 7)) return archive_access_select (parent, z, ArchiveFormatADF, dodefault, retcode, index); if (header[0] == 'S' && header[1] == 'F' && header[2] == 'S') return archive_access_select (parent, z, ArchiveFormatADF, dodefault, retcode, index); if (isfat (header)) return archive_access_select (parent, z, ArchiveFormatFAT, dodefault, retcode, index); } if (ext) { if (mask & ZFD_UNPACK) { #ifdef A_LZX if (strcasecmp (ext, _T("dsq")) == 0) return dsq (z, 1, retcode); #endif } if (mask & ZFD_ADF) { if (strcasecmp (ext, _T("adf")) == 0 && !memcmp (header, "DOS", 3)) return archive_access_select (parent, z, ArchiveFormatADF, dodefault, retcode, index); } } return NULL; } #ifdef SINGLEFILE extern uae_u8 singlefile_data[]; static struct zfile *zfile_opensinglefile(struct zfile *l) { uae_u8 *p = singlefile_data; int size, offset; TCHAR tmp[256], *s; _tcscpy (tmp, l->name); s = tmp + _tcslen (tmp) - 1; while (*s != 0 && *s != '/' && *s != '\\') s--; if (s > tmp) s++; write_log (_T("loading from singlefile: '%s'\n"), tmp); while (*p++); offset = (p[0] << 24)|(p[1] << 16)|(p[2] << 8)|(p[3] << 0); p += 4; for (;;) { size = (p[0] << 24)|(p[1] << 16)|(p[2] << 8)|(p[3] << 0); if (!size) break; if (!strcmpi (tmp, p + 4)) { l->data = singlefile_data + offset; l->size = size; write_log (_T("found, size %d\n"), size); return l; } offset += size; p += 4; p += _tcslen (p) + 1; } write_log (_T("not found\n")); return 0; } #endif static struct zfile *zfile_fopen_nozip (const TCHAR *name, const TCHAR *mode) { struct zfile *l; FILE *f; if(*name == '\0') return NULL; l = zfile_create (NULL); l->name = my_strdup (name); l->mode = my_strdup (mode); f = _tfopen (name, mode); if (!f) { zfile_fclose (l); return 0; } l->f = f; return l; } static struct zfile *openzip (const TCHAR *pname) { int i, j; TCHAR v; TCHAR name[MAX_DPATH]; TCHAR zippath[MAX_DPATH]; zippath[0] = 0; _tcscpy (name, pname); i = _tcslen (name) - 2; while (i > 0) { if (name[i] == '/' || name[i] == '\\' && i > 4) { v = name[i]; name[i] = 0; for (j = 0; plugins_7z[j]; j++) { int len = _tcslen (plugins_7z[j]); if (name[i - len - 1] == '.' && !strcasecmp (name + i - len, plugins_7z[j])) { struct zfile *f = zfile_fopen_nozip (name, _T("rb")); if (f) { f->zipname = my_strdup (name + i + 1); return f; } break; } } name[i] = v; } i--; } return 0; } static bool writeneeded (const TCHAR *mode) { return _tcschr (mode, 'w') || _tcschr (mode, 'a') || _tcschr (mode, '+') || _tcschr (mode, 't'); } bool zfile_needwrite (struct zfile *zf) { if (!zf->mode) return false; return writeneeded (zf->mode); } static struct zfile *zfile_fopen_2 (const TCHAR *name, const TCHAR *mode, int mask) { struct zfile *l; FILE *f; if(*name == '\0') return NULL; #ifdef SINGLEFILE if (zfile_opensinglefile (l)) return l; #endif l = openzip (name); if (l) { if (writeneeded (mode)) { zfile_fclose (l); return 0; } l->zfdmask = mask; } else { struct mystat st; l = zfile_create (NULL); l->mode = my_strdup (mode); l->name = my_strdup (name); l->zfdmask = mask; if (!_tcsicmp (mode, _T("r"))) { f = my_opentext (l->name); l->textmode = 1; } else { f = _tfopen (l->name, mode); } if (!f) { zfile_fclose (l); return 0; } if (my_stat (l->name, &st)) l->size = st.size; l->f = f; } return l; } #ifdef _WIN32 #include "win32.h" #define AF _T("%AMIGAFOREVERDATA%") static void manglefilename (TCHAR *out, const TCHAR *in) { int i; out[0] = 0; if (!strncasecmp (in, AF, _tcslen (AF))) _tcscpy (out, start_path_data); if ((in[0] == '/' || in[0] == '\\') || (_tcslen(in) > 3 && in[1] == ':' && in[2] == '\\')) out[0] = 0; _tcscat (out, in); for (i = 0; i < _tcslen (out); i++) { // remove \\ or // in the middle of path if ((out[i] == '/' || out[i] == '\\') && (out[i + 1] == '/' || out[i + 1] == '\\') && i > 0) { memmove (out + i, out + i + 1, (_tcslen (out + i) + 1) * sizeof (TCHAR)); i--; continue; } } } #else static void manglefilename(TCHAR *out, const TCHAR *in) { _tcscpy (out, in); } #endif int zfile_zopen (const TCHAR *name, zfile_callback zc, void *user) { struct zfile *l; int ztype; TCHAR path[MAX_DPATH]; manglefilename (path, name); l = zfile_fopen_2 (path, _T("rb"), ZFD_NORMAL); if (!l) return 0; ztype = iszip (l); if (ztype == 0) zc (l, user); else archive_access_scan (l, zc, user, ztype); zfile_fclose (l); return 1; } /* * fopen() for a compressed file */ static struct zfile *zfile_fopen_x (const TCHAR *name, const TCHAR *mode, int mask, int index) { int cnt = 10; struct zfile *l, *l2; TCHAR path[MAX_DPATH]; if (_tcslen (name) == 0) return NULL; manglefilename (path, name); l = zfile_fopen_2 (path, mode, mask); if (!l) return 0; l2 = NULL; while (cnt-- > 0) { int rc; zfile_fseek (l, 0, SEEK_SET); l2 = zuncompress (NULL, l, 0, mask, &rc, index); if (!l2) { if (rc < 0) { zfile_fclose (l); return NULL; } zfile_fseek (l, 0, SEEK_SET); break; } else { if (l2->parent == l) l->opencnt--; } l = l2; } return l; } #ifdef _WIN32 static int isinternetfile (const TCHAR *name) { if (!_tcsnicmp (name, _T("http://"), 7) || !_tcsnicmp (name, _T("https://"), 8)) return 1; if (!_tcsnicmp (name, _T("ftp://"), 6)) return -1; return 0; } #include #define INETBUFFERLEN 1000000 static struct zfile *zfile_fopen_internet (const TCHAR *name, const TCHAR *mode, int mask) { static HINTERNET hi; HINTERNET i = NULL; TCHAR tmp[MAX_DPATH]; DWORD ierr = 0; DWORD outbuf = sizeof tmp / sizeof (TCHAR); uae_u8 *data = 0; int bufferlen = INETBUFFERLEN; int datalen; DWORD didread; struct zfile *zf = NULL; if (_tcschr (mode, 'w') || _tcschr (mode, 'a')) return NULL; tmp[0] = 0; if (!hi) { hi = InternetOpen (WINUAEAPPNAME, INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY, NULL, NULL, 0); if (hi == NULL) { write_log (_T("InternetOpen() failed, %d\n"), GetLastError ()); return NULL; } } i = InternetOpenUrl (hi, name, NULL, 0, INTERNET_FLAG_NO_COOKIES, 0); if (i == NULL) { DWORD err = GetLastError (); if (err == ERROR_INTERNET_EXTENDED_ERROR) InternetGetLastResponseInfo (&ierr, tmp, &outbuf); write_log (_T("InternetOpenUrl(%s) failed %d (%d,%s)\n"), name, err, ierr, tmp); goto end; } if (isinternetfile (name) > 0) { DWORD statuscode; DWORD hindex = 0; DWORD size = sizeof statuscode; if (!HttpQueryInfo (i, HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER, &statuscode, &size, &hindex)) { DWORD err = GetLastError (); write_log (_T("HttpQueryInfo(%s) failed %d\n"), name, err); goto end; } if (statuscode != 200) { write_log (_T("HttpQueryInfo(%s)=%d\n"), name, statuscode); goto end; } } if (mask & ZFD_CHECKONLY) { zf = zfile_create (NULL); goto end; } datalen = 0; data = xmalloc (uae_u8, bufferlen); for (;;) { if (!InternetReadFile (i, data + datalen, INETBUFFERLEN, &didread)) { DWORD err = GetLastError (); if (err == ERROR_INTERNET_EXTENDED_ERROR) InternetGetLastResponseInfo (&ierr, tmp, &outbuf); write_log (_T("InternetReadFile(%s) failed %d (%d,%s)\n"), name, err, ierr, tmp); break; } if (didread == 0) break; datalen += didread; if (datalen > bufferlen - INETBUFFERLEN) { bufferlen += INETBUFFERLEN; data = xrealloc (uae_u8, data, bufferlen); if (!data) { datalen = 0; break; } } } if (datalen > 0) { zf = zfile_create (NULL); if (zf) { zf->size = datalen; zf->data = data; data = NULL; } } end: if (i) InternetCloseHandle (i); free (data); return zf; } #endif static struct zfile *zfile_fopenx2 (const TCHAR *name, const TCHAR *mode, int mask, int index) { struct zfile *f; TCHAR tmp[MAX_DPATH]; #ifdef _WIN32 if (isinternetfile (name)) return zfile_fopen_internet (name, mode, mask); #endif f = zfile_fopen_x (name, mode, mask, index); if (f) return f; if (_tcslen (name) <= 2) return NULL; if (name[1] != ':') { _tcscpy (tmp, start_path_data); _tcscat (tmp, name); f = zfile_fopen_x (tmp, mode, mask, index); if (f) return f; } #if 0 name += 2; if (name[0] == '/' || name[0] == '\\') name++; for (;;) { _tcscpy (tmp, start_path_data); _tcscpy (tmp, name); f = zfile_fopen_x (tmp, mode, mask); if (f) return f; while (name[0]) { name++; if (name[-1] == '/' || name[-1] == '\\') break; } if (name[0] == 0) break; } #endif return NULL; } static struct zfile *zfile_fopenx (const TCHAR *name, const TCHAR *mode, int mask, int index) { struct zfile *zf; //write_log (_T("zfile_fopen('%s','%s',%08x,%d)\n"), name, mode, mask, index); zf = zfile_fopenx2 (name, mode, mask, index); //write_log (_T("=%p\n"), zf); return zf; } struct zfile *zfile_fopen (const TCHAR *name, const TCHAR *mode, int mask) { return zfile_fopenx (name, mode, mask, 0); } struct zfile *zfile_fopen (const TCHAR *name, const TCHAR *mode) { return zfile_fopenx (name, mode, 0, 0); } struct zfile *zfile_fopen (const TCHAR *name, const TCHAR *mode, int mask, int index) { return zfile_fopenx (name, mode, mask, index); } struct zfile *zfile_dup (struct zfile *zf) { struct zfile *nzf; if (!zf) return NULL; if (zf->archiveparent) checkarchiveparent (zf); if (zf->userdata) return NULL; if (!zf->data && zf->dataseek) { nzf = zfile_create (zf); } else if (zf->data) { nzf = zfile_create (zf); nzf->data = xmalloc (uae_u8, zf->size); memcpy (nzf->data, zf->data, zf->size); nzf->size = zf->size; nzf->datasize = zf->datasize; } else { if (zf->zipname) { nzf = openzip (zf->name); if (nzf) return nzf; } FILE *ff = _tfopen (zf->name, zf->mode); if (!ff) return NULL; nzf = zfile_create (zf); nzf->f = ff; } zfile_fseek (nzf, zf->seek, SEEK_SET); if (zf->name) nzf->name = my_strdup (zf->name); if (nzf->zipname) nzf->zipname = my_strdup (zf->zipname); nzf->zfdmask = zf->zfdmask; nzf->mode = my_strdup (zf->mode); nzf->size = zf->size; return nzf; } int zfile_exists (const TCHAR *name) { struct zfile *z; if (my_existsfile (name)) return 1; z = zfile_fopen (name, _T("rb"), ZFD_NORMAL | ZFD_CHECKONLY); if (!z) return 0; zfile_fclose (z); return 1; } int zfile_iscompressed (struct zfile *z) { return z->data ? 1 : 0; } struct zfile *zfile_fopen_empty (struct zfile *prev, const TCHAR *name, uae_u64 size) { struct zfile *l; l = zfile_create (prev); l->name = my_strdup (name ? name : _T("")); if (size) { l->data = xcalloc (uae_u8, size); if (!l->data) { xfree (l); return NULL; } l->size = size; l->datasize = size; l->allocsize = size; } else { l->data = xcalloc (uae_u8, 1000); l->size = 0; l->allocsize = 1000; } return l; } struct zfile *zfile_fopen_empty (struct zfile *prev, const TCHAR *name) { return zfile_fopen_empty (prev, name, 0); } struct zfile *zfile_fopen_parent (struct zfile *z, const TCHAR *name, uae_u64 offset, uae_u64 size) { struct zfile *l; if (z == NULL) return NULL; l = zfile_create (z); if (name) l->name = my_strdup (name); else if (z->name) l->name = my_strdup (z->name); l->size = size; l->datasize = size; l->offset = offset; for (;;) { l->parent = z; l->useparent = 1; if (!z->parent) break; l->offset += z->offset; z = z->parent; } z->opencnt++; return l; } struct zfile *zfile_fopen_load_zfile (struct zfile *f) { struct zfile *l = zfile_fopen_empty (f, f->name, f->size); if (!l) return NULL; zfile_fseek (f, 0, SEEK_SET); zfile_fread (l->data, f->size, 1, f); return l; } struct zfile *zfile_fopen_data (const TCHAR *name, uae_u64 size, const uae_u8 *data) { struct zfile *l; l = zfile_create (NULL); l->name = my_strdup (name ? name : _T("")); l->data = xmalloc (uae_u8, size); l->size = size; l->datasize = size; memcpy (l->data, data, size); return l; } uae_u8 *zfile_load_data (const TCHAR *name, const uae_u8 *data,int datalen, int *outlen) { struct zfile *zf, *f; int size; uae_u8 *out; zf = zfile_fopen_data (name, datalen, data); f = zfile_gunzip (zf); size = f->datasize; zfile_fseek (f, 0, SEEK_SET); out = xmalloc (uae_u8, size); zfile_fread (out, 1, size, f); zfile_fclose (f); *outlen = size; return out; } int zfile_truncate (struct zfile *z, uae_s64 size) { if (z->data) { if (z->size > size) { z->size = size; if (z->datasize > z->size) z->datasize = z->size; if (z->seek > z->size) z->seek = z->size; return 1; } return 0; } else { /* !!! */ return 0; } } uae_s64 zfile_size (struct zfile *z) { return z->size; } uae_s64 zfile_ftell (struct zfile *z) { if (z->data || z->dataseek || z->parent) return z->seek; return _ftelli64 (z->f); } uae_s64 zfile_fseek (struct zfile *z, uae_s64 offset, int mode) { if (z->zfileseek) return z->zfileseek (z, offset, mode); if (z->data || z->dataseek || (z->parent && z->useparent)) { int ret = 0; switch (mode) { case SEEK_SET: z->seek = offset; break; case SEEK_CUR: z->seek += offset; break; case SEEK_END: z->seek = z->size + offset; break; } if (z->seek < 0) { z->seek = 0; ret = 1; } if (z->seek > z->size) { z->seek = z->size; ret = 1; } return ret; } else { return _fseeki64 (z->f, offset, mode); } return 1; } size_t zfile_fread (void *b, size_t l1, size_t l2, struct zfile *z) { if (z->zfileread) return z->zfileread (b, l1, l2, z); if (z->data) { if (z->datasize < z->size && z->seek + l1 * l2 > z->datasize) { if (z->archiveparent) { archive_unpackzfile (z); return zfile_fread (b, l1, l2, z); } return 0; } if (z->seek + l1 * l2 > z->size) { if (l1) l2 = (z->size - z->seek) / l1; else l2 = 0; if (l2 < 0) l2 = 0; } memcpy (b, z->data + z->offset + z->seek, l1 * l2); z->seek += l1 * l2; return l2; } if (z->parent && z->useparent) { size_t ret; uae_s64 v; uae_s64 size = z->size; v = z->seek; if (v + l1 * l2 > size) { if (l1) l2 = (size - v) / l1; else l2 = 0; if (l2 < 0) l2 = 0; } zfile_fseek (z->parent, z->seek + z->offset, SEEK_SET); v = z->seek; ret = zfile_fread (b, l1, l2, z->parent); z->seek = v + l1 * ret; return ret; } return fread (b, l1, l2, z->f); } size_t zfile_fwrite (const void *b, size_t l1, size_t l2, struct zfile *z) { if (z->archiveparent) return 0; if (z->zfilewrite) return z->zfilewrite (b, l1, l2, z); if (z->parent && z->useparent) return 0; if (z->data) { uae_s64 off = z->seek + l1 * l2; if (z->allocsize == 0) { write_log (_T("zfile_fwrite(data,%s) but allocsize=0!\n"), z->name); return 0; } if (off > z->allocsize) { if (z->allocsize < off) z->allocsize = off; z->allocsize += z->size / 2; if (z->allocsize < 10000) z->allocsize = 10000; z->data = xrealloc (uae_u8, z->data, z->allocsize); z->datasize = z->size = off; } memcpy (z->data + z->seek, b, l1 * l2); z->seek += l1 * l2; if (z->seek > z->size) z->size = z->seek; if (z->size > z->datasize) z->datasize = z->size; return l2; } return fwrite (b, l1, l2, z->f); } size_t zfile_fputs (struct zfile *z, const TCHAR *s) { char *s2 = ua (s); size_t t; t = zfile_fwrite (s2, strlen (s2), 1, z); xfree (s2); return t; } char *zfile_fgetsa (char *s, int size, struct zfile *z) { checkarchiveparent (z); if (z->data) { char *os = s; int i; for (i = 0; i < size - 1; i++) { if (z->seek == z->size) { if (i == 0) return NULL; break; } *s = z->data[z->seek++]; if (*s == '\n') { s++; break; } s++; } *s = 0; return os; } else { return fgets (s, size, z->f); } } TCHAR *zfile_fgets (TCHAR *s, int size, struct zfile *z) { checkarchiveparent (z); if (z->data) { char s2[MAX_DPATH]; char *p = s2; int i; for (i = 0; i < size - 1; i++) { if (z->seek == z->size) { if (i == 0) return NULL; break; } *p = z->data[z->seek++]; if (*p == 0 && i == 0) return NULL; if (*p == '\n' || *p == 0) { p++; break; } p++; } *p = 0; if (size > strlen (s2) + 1) size = strlen (s2) + 1; au_copy (s, size, s2); return s + size; } else { char s2[MAX_DPATH]; char *s1; s1 = fgets (s2, size, z->f); if (!s1) return NULL; if (size > strlen (s2) + 1) size = strlen (s2) + 1; au_copy (s, size, s2); return s + size; } } int zfile_putc (int c, struct zfile *z) { uae_u8 b = (uae_u8)c; return zfile_fwrite (&b, 1, 1, z) ? 1 : -1; } int zfile_getc (struct zfile *z) { checkarchiveparent (z); int out = -1; if (z->data) { if (z->seek < z->size) { out = z->data[z->seek++]; } } else { out = fgetc (z->f); } return out; } int zfile_ferror (struct zfile *z) { return 0; } uae_u8 *zfile_getdata (struct zfile *z, uae_s64 offset, int len) { uae_s64 pos = zfile_ftell (z); uae_u8 *b; if (len < 0) { zfile_fseek (z, 0, SEEK_END); len = zfile_ftell (z); zfile_fseek (z, 0, SEEK_SET); } b = xmalloc (uae_u8, len); zfile_fseek (z, offset, SEEK_SET); zfile_fread (b, len, 1, z); zfile_fseek (z, pos, SEEK_SET); return b; } int zfile_zuncompress (void *dst, int dstsize, struct zfile *src, int srcsize) { z_stream zs; int v; uae_u8 inbuf[4096]; int incnt; memset (&zs, 0, sizeof (zs)); if (inflateInit_ (&zs, ZLIB_VERSION, sizeof (z_stream)) != Z_OK) return 0; zs.next_out = (Bytef*)dst; zs.avail_out = dstsize; incnt = 0; v = Z_OK; while (v == Z_OK && zs.avail_out > 0) { if (zs.avail_in == 0) { int left = srcsize - incnt; if (left == 0) break; if (left > sizeof (inbuf)) left = sizeof (inbuf); zs.next_in = inbuf; zs.avail_in = zfile_fread (inbuf, 1, left, src); incnt += left; } v = inflate (&zs, 0); } inflateEnd (&zs); return 0; } int zfile_zcompress (struct zfile *f, void *src, int size) { int v; z_stream zs; uae_u8 outbuf[4096]; memset (&zs, 0, sizeof (zs)); if (deflateInit_ (&zs, Z_DEFAULT_COMPRESSION, ZLIB_VERSION, sizeof (z_stream)) != Z_OK) return 0; zs.next_in = (Bytef*)src; zs.avail_in = size; v = Z_OK; while (v == Z_OK) { zs.next_out = outbuf; zs.avail_out = sizeof (outbuf); v = deflate (&zs, Z_NO_FLUSH | Z_FINISH); if (sizeof (outbuf) - zs.avail_out > 0) zfile_fwrite (outbuf, 1, sizeof (outbuf) - zs.avail_out, f); } deflateEnd (&zs); return zs.total_out; } TCHAR *zfile_getname (struct zfile *f) { return f ? f->name : NULL; } TCHAR *zfile_getfilename (struct zfile *f) { int i; if (f->name == NULL) return NULL; for (i = _tcslen (f->name) - 1; i >= 0; i--) { if (f->name[i] == '\\' || f->name[i] == '/' || f->name[i] == ':') { i++; return &f->name[i]; } } return f->name; } uae_u32 zfile_crc32 (struct zfile *f) { uae_u8 *p; int pos, size; uae_u32 crc; if (!f) return 0; if (f->data) return get_crc32 (f->data, f->size); pos = zfile_ftell (f); zfile_fseek (f, 0, SEEK_END); size = zfile_ftell (f); p = xmalloc (uae_u8, size); if (!p) return 0; memset (p, 0, size); zfile_fseek (f, 0, SEEK_SET); zfile_fread (p, 1, size, f); zfile_fseek (f, pos, SEEK_SET); crc = get_crc32 (p, size); xfree (p); return crc; } static struct zvolume *zvolume_list; static void recurparent (TCHAR *newpath, struct znode *zn, int recurse) { if (zn->parent && (&zn->volume->root != zn->parent || zn->volume->parentz == NULL)) { if (&zn->volume->root == zn->parent && zn->volume->parentz == NULL && !_tcscmp (zn->name, zn->parent->name)) goto end; recurparent (newpath, zn->parent, recurse); } else { struct zvolume *zv = zn->volume; if (zv->parentz && recurse) recurparent (newpath, zv->parentz, recurse); } end: if (newpath[0]) _tcscat (newpath, FSDB_DIR_SEPARATOR_S); _tcscat (newpath, zn->name); } static struct znode *znode_alloc (struct znode *parent, const TCHAR *name) { TCHAR fullpath[MAX_DPATH]; TCHAR tmpname[MAX_DPATH]; struct znode *zn = xcalloc (struct znode, 1); struct znode *zn2; _tcscpy (tmpname, name); zn2 = parent->child; while (zn2) { if (!_tcscmp (zn2->name, tmpname)) { TCHAR *ext = _tcsrchr (tmpname, '.'); if (ext && ext > tmpname + 2 && ext[-2] == '.') { ext[-1]++; } else if (ext) { memmove (ext + 2, ext, (_tcslen (ext) + 1) * sizeof (TCHAR)); ext[0] = '.'; ext[1] = '1'; } else { int len = _tcslen (tmpname); tmpname[len] = '.'; tmpname[len + 1] = '1'; tmpname[len + 2] = 0; } zn2 = parent->child; continue; } zn2 = zn2->sibling; } fullpath[0] = 0; recurparent (fullpath, parent, FALSE); _tcscat (fullpath, FSDB_DIR_SEPARATOR_S); _tcscat (fullpath, tmpname); #ifdef ZFILE_DEBUG write_log (_T("znode_alloc vol='%s' parent='%s' name='%s'\n"), parent->volume->root.name, parent->name, name); #endif zn->fullname = my_strdup (fullpath); zn->name = my_strdup (tmpname); zn->volume = parent->volume; zn->volume->last->next = zn; zn->prev = zn->volume->last; zn->volume->last = zn; return zn; } static struct znode *znode_alloc_child (struct znode *parent, const TCHAR *name) { struct znode *zn = znode_alloc (parent, name); if (!parent->child) { parent->child = zn; } else { struct znode *pn = parent->child; while (pn->sibling) pn = pn->sibling; pn->sibling = zn; } zn->parent = parent; return zn; } static struct znode *znode_alloc_sibling (struct znode *sibling, const TCHAR *name) { struct znode *zn = znode_alloc (sibling->parent, name); if (!sibling->sibling) { sibling->sibling = zn; } else { struct znode *pn = sibling->sibling; while (pn->sibling) pn = pn->sibling; pn->sibling = zn; } zn->parent = sibling->parent; return zn; } static void zvolume_addtolist (struct zvolume *zv) { if (!zv) return; if (!zvolume_list) { zvolume_list = zv; } else { struct zvolume *v = zvolume_list; while (v->next) v = v->next; v->next = zv; } } static struct zvolume *zvolume_alloc_2 (const TCHAR *name, struct zfile *z, unsigned int id, void *handle, const TCHAR *volname) { struct zvolume *zv = xcalloc (struct zvolume, 1); struct znode *root; uae_s64 pos; int i; root = &zv->root; zv->last = root; zv->archive = z; zv->handle = handle; zv->id = id; zv->blocks = 4; if (z) zv->zfdmask = z->zfdmask; root->volume = zv; root->type = ZNODE_DIR; i = 0; #ifdef FSUAE #else if (name[0] != '/' && name[0] != '\\' && _tcsncmp (name, _T(".\\"), 2) != 0) { if (_tcschr (name, ':') == 0) { for (i = _tcslen (name) - 1; i > 0; i--) { if (name[i] == FSDB_DIR_SEPARATOR) { i++; break; } } } } #endif root->name = my_strdup (name + i); root->fullname = my_strdup (name); #ifdef ZFILE_DEBUG write_log (_T("created zvolume: '%s' (%s)\n"), root->name, root->fullname); #endif if (volname) zv->volumename = my_strdup (volname); if (z) { pos = zfile_ftell (z); zfile_fseek (z, 0, SEEK_END); zv->archivesize = zfile_ftell (z); zfile_fseek (z, pos, SEEK_SET); } return zv; } struct zvolume *zvolume_alloc (struct zfile *z, unsigned int id, void *handle, const TCHAR *volumename) { return zvolume_alloc_2 (zfile_getname (z), z, id, handle, volumename); } struct zvolume *zvolume_alloc_nofile (const TCHAR *name, unsigned int id, void *handle, const TCHAR *volumename) { return zvolume_alloc_2 (name, NULL, id, handle, volumename); } struct zvolume *zvolume_alloc_empty (struct zvolume *prev, const TCHAR *name) { struct zvolume *zv = zvolume_alloc_2(name, 0, 0, 0, NULL); if (!zv) return NULL; if (prev) zv->zfdmask = prev->zfdmask; return zv; } static struct zvolume *get_zvolume (const TCHAR *path) { struct zvolume *zv = zvolume_list; while (zv) { TCHAR *s = zfile_getname (zv->archive); if (!s) s = zv->root.name; if (_tcslen (path) >= _tcslen (s) && !memcmp (path, s, _tcslen (s) * sizeof (TCHAR))) return zv; zv = zv->next; } return NULL; } static struct zvolume *zfile_fopen_archive_ext (struct znode *parent, struct zfile *zf, int flags) { struct zvolume *zv = NULL; TCHAR *name = zfile_getname (zf); TCHAR *ext; uae_u8 header[7]; if (!name) return NULL; memset (header, 0, sizeof (header)); zfile_fseek (zf, 0, SEEK_SET); zfile_fread (header, sizeof (header), 1, zf); zfile_fseek (zf, 0, SEEK_SET); ext = _tcsrchr (name, '.'); if (ext != NULL) { ext++; if (flags & ZFD_ARCHIVE) { #ifdef A_LHA if (strcasecmp (ext, _T("lha")) == 0 || strcasecmp (ext, _T("lzh")) == 0) zv = archive_directory_lha (zf); #endif #ifdef A_ZIP if (strcasecmp (ext, _T("zip")) == 0) zv = archive_directory_zip (zf); #endif #ifdef A_7Z if (strcasecmp (ext, _T("7z")) == 0) zv = archive_directory_7z (zf); #endif #ifdef A_LZX if (strcasecmp (ext, _T("lzx")) == 0) zv = archive_directory_lzx (zf); #endif #ifdef A_RAR if (strcasecmp (ext, _T("rar")) == 0) zv = archive_directory_rar (zf); #endif if (strcasecmp (ext, _T("tar")) == 0) zv = archive_directory_tar (zf); } if (flags & ZFD_ADF) { if (strcasecmp (ext, _T("adf")) == 0 && !memcmp (header, "DOS", 3)) zv = archive_directory_adf (parent, zf); } if (flags & ZFD_HD) { if (strcasecmp (ext, _T("hdf")) == 0) { if (!memcmp (header, "RDSK", 4)) zv = archive_directory_rdb (zf); else zv = archive_directory_adf (parent, zf); } } } return zv; } static struct zvolume *zfile_fopen_archive_data (struct znode *parent, struct zfile *zf, int flags) { struct zvolume *zv = NULL; uae_u8 header[32]; memset (header, 0, sizeof (header)); zfile_fread (header, sizeof (header), 1, zf); zfile_fseek (zf, 0, SEEK_SET); if (flags & ZFD_ARCHIVE) { #ifdef A_ZIP if (header[0] == 'P' && header[1] == 'K') zv = archive_directory_zip (zf); #endif #ifdef A_RAR if (header[0] == 'R' && header[1] == 'a' && header[2] == 'r' && header[3] == '!') zv = archive_directory_rar (zf); #endif #ifdef A_LZX if (header[0] == 'L' && header[1] == 'Z' && header[2] == 'X') zv = archive_directory_lzx (zf); #endif #ifdef A_LHA if (header[2] == '-' && header[3] == 'l' && header[4] == 'h' && header[6] == '-') zv = archive_directory_lha (zf); #endif } if (flags & ZFD_ADF) { if (header[0] == 'D' && header[1] == 'O' && header[2] == 'S' && (header[3] >= 0 && header[3] <= 7)) zv = archive_directory_adf (parent, zf); } if (flags & ZFD_HD) { if (header[0] == 'R' && header[1] == 'D' && header[2] == 'S' && header[3] == 'K') zv = archive_directory_rdb (zf); if (isfat (header)) zv = archive_directory_fat (zf); } return zv; } static struct znode *get_znode (struct zvolume *zv, const TCHAR *ppath, int); static void zfile_fopen_archive_recurse2 (struct zvolume *zv, struct znode *zn, int flags) { struct zvolume *zvnew; struct znode *zndir; TCHAR tmp[MAX_DPATH]; _stprintf (tmp, _T("%s.DIR"), zn->fullname + _tcslen (zv->root.name) + 1); zndir = get_znode (zv, tmp, TRUE); if (!zndir) { struct zarchive_info zai = { 0 }; zvnew = zvolume_alloc_empty (zv, tmp); zvnew->parentz = zn; zai.name = tmp; zai.tv.tv_sec = zn->mtime.tv_sec; zai.tv.tv_usec = zn->mtime.tv_usec; zai.comment = zv->volumename; if (zn->flags < 0) zai.flags = zn->flags; zndir = zvolume_adddir_abs (zv, &zai); zndir->type = ZNODE_VDIR; zndir->vfile = zn; zndir->vchild = zvnew; zvnew->parent = zv; zndir->offset = zn->offset; zndir->offset2 = zn->offset2; } } static int zfile_fopen_archive_recurse (struct zvolume *zv, int flags) { struct znode *zn; int i, added; added = 0; zn = zv->root.child; while (zn) { int done = 0; struct zfile *z; TCHAR *ext = _tcsrchr (zn->name, '.'); if (ext && !zn->vchild && zn->type == ZNODE_FILE) { for (i = 0; !done && archive_extensions[i]; i++) { if (!strcasecmp (ext + 1, archive_extensions[i])) { zfile_fopen_archive_recurse2 (zv, zn, flags); done = 1; } } } if (!done) { z = archive_getzfile (zn, zv->method, 0); if (z && iszip (z)) zfile_fopen_archive_recurse2 (zv, zn, flags); } zn = zn->next; } return 0; } static struct zvolume *prepare_recursive_volume (struct zvolume *zv, const TCHAR *path, int flags) { struct zfile *zf = NULL; struct zvolume *zvnew = NULL; int done = 0; #ifdef ZFILE_DEBUG write_log (_T("unpacking '%s'\n"), path); #endif zf = zfile_open_archive (path, 0); if (!zf) goto end; zvnew = zfile_fopen_archive_ext (zv->parentz, zf, flags); if (!zvnew && !(flags & ZFD_NORECURSE)) { #if 1 zvnew = archive_directory_plain (zf); if (zvnew) { zfile_fopen_archive_recurse (zvnew, flags); done = 1; } #else int rc; int index; struct zfile *zf2, *zf3; TCHAR oldname[MAX_DPATH]; _tcscpy (oldname, zf->name); index = 0; for (;;) { zf3 = zfile_dup (zf); if (!zf3) break; zf2 = zuncompress (&zv->root, zf3, 0, ZFD_ALL, &rc, index); if (zf2) { zvnew = archive_directory_plain (zf2); if (zvnew) { zvnew->parent = zv->parent; zfile_fopen_archive_recurse (zvnew); done = 1; } } else { zfile_fclose (zf3); if (rc <= 0) break; } index++; break; // TODO } #endif } else if (zvnew) { zvnew->parent = zv->parent; zfile_fopen_archive_recurse (zvnew, flags); done = 1; } if (!done) goto end; zfile_fclose_archive (zv); return zvnew; end: write_log (_T("unpack '%s' failed\n"), path); zfile_fclose_archive (zvnew); zfile_fclose (zf); return NULL; } static struct znode *get_znode (struct zvolume *zv, const TCHAR *ppath, int recurse) { struct znode *zn; TCHAR path[MAX_DPATH], zpath[MAX_DPATH]; if (!zv) return NULL; _tcscpy (path, ppath); zn = &zv->root; while (zn) { zpath[0] = 0; recurparent (zpath, zn, recurse); if (zn->type == ZNODE_FILE) { if (!_tcsicmp (zpath, path)) return zn; } else { int len = _tcslen (zpath); if (_tcslen (path) >= len && (path[len] == 0 || path[len] == FSDB_DIR_SEPARATOR) && !_tcsnicmp (zpath, path, len)) { if (path[len] == 0) return zn; if (zn->vchild) { /* jump to separate tree, recursive archives */ struct zvolume *zvdeep = zn->vchild; if (zvdeep->archive == NULL) { TCHAR newpath[MAX_DPATH]; newpath[0] = 0; recurparent (newpath, zn, recurse); #ifdef ZFILE_DEBUG write_log (_T("'%s'\n"), newpath); #endif zvdeep = prepare_recursive_volume (zvdeep, newpath, ZFD_ALL); if (!zvdeep) { write_log (_T("failed to unpack '%s'\n"), newpath); return NULL; } /* replace dummy empty volume with real volume */ zn->vchild = zvdeep; zvdeep->parentz = zn; } zn = zvdeep->root.child; } else { zn = zn->child; } continue; } } zn = zn->sibling; } return NULL; } static void addvolumesize (struct zvolume *zv, uae_s64 size) { unsigned int blocks = (size + 511) / 512; if (blocks == 0) blocks++; while (zv) { zv->blocks += blocks; zv->size += size; zv = zv->parent; } } struct znode *znode_adddir (struct znode *parent, const TCHAR *name, struct zarchive_info *zai) { struct znode *zn; TCHAR path[MAX_DPATH]; path[0] = 0; recurparent (path, parent, FALSE); _tcscat (path, FSDB_DIR_SEPARATOR_S); _tcscat (path, name); zn = get_znode (parent->volume, path, FALSE); if (zn) return zn; zn = znode_alloc_child (parent, name); zn->mtime.tv_sec = zai->tv.tv_sec; zn->mtime.tv_usec = zai->tv.tv_usec; zn->type = ZNODE_DIR; if (zai->comment) zn->comment = my_strdup (zai->comment); if (zai->flags < 0) zn->flags = zai->flags; addvolumesize (parent->volume, 0); return zn; } struct znode *zvolume_adddir_abs (struct zvolume *zv, struct zarchive_info *zai) { struct znode *zn2; TCHAR *path = my_strdup (zai->name); TCHAR *p, *p2; int i; if (_tcslen (path) > 0) { /* remove possible trailing / or \ */ TCHAR last; last = path[_tcslen (path) - 1]; if (last == '/' || last == '\\') path[_tcslen (path) - 1] = 0; } zn2 = &zv->root; p = p2 = path; for (i = 0; path[i]; i++) { if (path[i] == '/' || path[i] == '\\') { path[i] = 0; zn2 = znode_adddir (zn2, p, zai); path[i] = FSDB_DIR_SEPARATOR; p = p2 = &path[i + 1]; } } return znode_adddir (zn2, p, zai); } struct znode *zvolume_addfile_abs (struct zvolume *zv, struct zarchive_info *zai) { struct znode *zn, *zn2; int i; TCHAR *path = my_strdup (zai->name); TCHAR *p, *p2; zn2 = &zv->root; p = p2 = path; for (i = 0; path[i]; i++) { if (path[i] == '/' || path[i] == '\\') { path[i] = 0; zn2 = znode_adddir (zn2, p, zai); path[i] = FSDB_DIR_SEPARATOR; p = p2 = &path[i + 1]; } } if (p2) { zn = znode_alloc_child (zn2, p2); zn->size = zai->size; zn->type = ZNODE_FILE; zn->mtime.tv_sec = zai->tv.tv_sec; zn->mtime.tv_usec = zai->tv.tv_usec; if (zai->comment) zn->comment = my_strdup (zai->comment); zn->flags = zai->flags; addvolumesize (zn->volume, zai->size); } xfree (path); return zn; } struct zvolume *zfile_fopen_directory (const TCHAR *dirname) { struct zvolume *zv = NULL; struct my_opendir_s *dir; TCHAR fname[MAX_DPATH]; dir = my_opendir (dirname); if (!dir) return NULL; zv = zvolume_alloc_nofile (dirname, ArchiveFormatDIR, NULL, NULL); while (my_readdir (dir, fname)) { TCHAR fullname[MAX_DPATH]; struct mystat statbuf; struct zarchive_info zai = { 0 }; if (!_tcscmp (fname, _T(".")) || !_tcscmp (fname, _T(".."))) continue; _tcscpy (fullname, dirname); _tcscat (fullname, FSDB_DIR_SEPARATOR_S); _tcscat (fullname, fname); if (!my_stat (fullname, &statbuf)) continue; zai.name = fname; zai.size = statbuf.size; zai.tv.tv_sec = statbuf.mtime.tv_sec; zai.tv.tv_usec = statbuf.mtime.tv_usec; if (statbuf.mode & FILEFLAG_DIR) { zvolume_adddir_abs (zv, &zai); } else { struct znode *zn; zn = zvolume_addfile_abs (zv, &zai); //zfile_fopen_archive_recurse2 (zv, zn); } } my_closedir (dir); // zfile_fopen_archive_recurse (zv); if (zv) zvolume_addtolist (zv); return zv; } struct zvolume *zfile_fopen_archive (const TCHAR *filename, int flags) { struct zvolume *zv = NULL; struct zfile *zf = zfile_fopen_nozip (filename, _T("rb")); if (!zf) return NULL; zf->zfdmask = flags; zv = zfile_fopen_archive_ext (NULL, zf, flags); if (!zv) zv = zfile_fopen_archive_data (NULL, zf, flags); #if 0 if (!zv) { struct zfile *zf2 = zuncompress (zf, 0, 0); if (zf2 != zf) { zf = zf2; zv = zfile_fopen_archive_ext (zf, flags); if (!zv) zv = zfile_fopen_archive_data (zf, flags); } } #endif /* pointless but who cares? */ if (!zv && !(flags & ZFD_NORECURSE)) zv = archive_directory_plain (zf); #if RECURSIVE_ARCHIVES if (zv && !(flags & ZFD_NORECURSE)) zfile_fopen_archive_recurse (zv, flags); #endif if (zv) zvolume_addtolist (zv); else zfile_fclose (zf); return zv; } struct zvolume *zfile_fopen_archive (const TCHAR *filename) { return zfile_fopen_archive (filename, ZFD_ALL); } struct zvolume *zfile_fopen_archive_root (const TCHAR *filename, int flags) { TCHAR path[MAX_DPATH], *p1, *p2, *lastp; struct zvolume *zv = NULL; //int last = 0; int num, i; if (my_existsdir (filename)) return zfile_fopen_directory (filename); num = 1; lastp = NULL; for (;;) { _tcscpy (path, filename); p1 = p2 = path; for (i = 0; i < num; i++) { while (*p1 != FSDB_DIR_SEPARATOR && *p1 != 0) p1++; if (*p1 == 0 && p1 == lastp) return NULL; if (i + 1 < num) p1++; } *p1 = 0; lastp = p1; if (my_existsfile (p2)) return zfile_fopen_archive (p2, flags); num++; } #if 0 while (!last) { while (*p1 != FSDB_DIR_SEPARATOR && *p1 != 0) p1++; if (*p1 == 0) last = 1; *p1 = 0; if (!zv) { zv = zfile_fopen_archive (p2); if (!zv) return NULL; } else { struct znode *zn = get_znode (zv, p2); if (!zn) return NULL; } p2 = p1 + 1; } return zv; #endif } void zfile_fclose_archive (struct zvolume *zv) { struct znode *zn; struct zvolume *v; if (!zv) return; zn = &zv->root; while (zn) { struct znode *zn2 = zn->next; if (zn->vchild) zfile_fclose_archive (zn->vchild); xfree (zn->comment); xfree (zn->fullname); xfree (zn->name); zfile_fclose (zn->f); memset (zn, 0, sizeof (struct znode)); if (zn != &zv->root) xfree (zn); zn = zn2; } archive_access_close (zv->handle, zv->id); if (zvolume_list == zv) { zvolume_list = zvolume_list->next; } else { v = zvolume_list; while (v) { if (v->next == zv) { v->next = zv->next; break; } v = v->next; } } xfree (zv); } struct zdirectory { TCHAR *parentpath; struct znode *first; struct znode *n; bool doclose; struct zvolume *zv; int cnt; int offset; TCHAR **filenames; }; struct zdirectory *zfile_opendir_archive (const TCHAR *path, int flags) { struct zvolume *zv = get_zvolume (path); bool created = false; if (zv == NULL) { zv = zfile_fopen_archive (path, flags); created = true; } struct znode *zn = get_znode (zv, path, TRUE); struct zdirectory *zd; if (!zn || (!zn->child && !zn->vchild)) { if (created) zfile_fclose_archive (zv); return NULL; } zd = xcalloc (struct zdirectory, 1); if (created) zd->zv = zv; if (zn->child) { zd->n = zn->child; } else { if (zn->vchild->archive == NULL) { struct zvolume *zvnew = prepare_recursive_volume (zn->vchild, path, flags); if (zvnew) { zn->vchild = zvnew; zvnew->parentz = zn; } } zd->n = zn->vchild->root.next; } zd->parentpath = my_strdup (path); zd->first = zd->n; return zd; } struct zdirectory *zfile_opendir_archive (const TCHAR *path) { return zfile_opendir_archive (path, ZFD_ALL | ZFD_NORECURSE); } void zfile_closedir_archive (struct zdirectory *zd) { if (!zd) return; zfile_fclose_archive (zd->zv); xfree (zd->parentpath); xfree (zd->filenames); xfree (zd); } int zfile_readdir_archive (struct zdirectory *zd, TCHAR *out, bool fullpath) { if (out) out[0] = 0; if (!zd->n || (zd->filenames != NULL && zd->offset >= zd->cnt)) return 0; if (zd->filenames == NULL) { struct znode *n = zd->first; int cnt = 0, len = 0; while (n) { cnt++; n = n->sibling; } n = zd->first; uae_u8 *buf = xmalloc (uae_u8, cnt * sizeof (TCHAR*)); zd->filenames = (TCHAR**)buf; buf += cnt * sizeof (TCHAR*); for (int i = 0; i < cnt; i++) { zd->filenames[i] = n->name; n = n->sibling; } for (int i = 0; i < cnt; i++) { for (int j = i + 1; j < cnt; j++) { if (_tcscmp (zd->filenames[i], zd->filenames[j]) > 0) { TCHAR *tmp = zd->filenames[i]; zd->filenames[i] = zd->filenames[j]; zd->filenames[j] = tmp; } } } zd->cnt = cnt; } if (out == NULL) return zd->cnt; if (fullpath) { _tcscpy (out, zd->parentpath); _tcscat (out, FSDB_DIR_SEPARATOR_S); } _tcscat (out, zd->filenames[zd->offset]); zd->offset++; return 1; } int zfile_readdir_archive (struct zdirectory *zd, TCHAR *out) { return zfile_readdir_archive (zd, out, false); } void zfile_resetdir_archive (struct zdirectory *zd) { zd->offset = 0; zd->n = zd->first; } int zfile_fill_file_attrs_archive (const TCHAR *path, int *isdir, int *flags, TCHAR **comment) { struct zvolume *zv = get_zvolume (path); struct znode *zn = get_znode (zv, path, TRUE); *isdir = 0; *flags = 0; if (comment) *comment = 0; if (!zn) return 0; if (zn->type == ZNODE_DIR) *isdir = 1; else if (zn->type == ZNODE_VDIR) *isdir = -1; *flags = zn->flags; if (zn->comment && comment) *comment = my_strdup (zn->comment); return 1; } int zfile_fs_usage_archive (const TCHAR *path, const TCHAR *disk, struct fs_usage *fsp) { struct zvolume *zv = get_zvolume (path); if (!zv) return -1; fsp->fsu_blocks = zv->blocks; fsp->fsu_bavail = 0; return 0; } int zfile_stat_archive (const TCHAR *path, struct mystat *s) { struct zvolume *zv = get_zvolume (path); struct znode *zn = get_znode (zv, path, TRUE); memset (s, 0, sizeof (struct mystat)); if (!zn) return 0; s->size = zn->size; s->mtime.tv_sec = zn->mtime.tv_sec; s->mtime.tv_usec = zn->mtime.tv_usec; return 1; } uae_s64 zfile_lseek_archive (struct zfile *d, uae_s64 offset, int whence) { uae_s64 old = zfile_ftell (d); if (old < 0 || zfile_fseek (d, offset, whence)) return -1; return old; } uae_s64 zfile_fsize_archive (struct zfile *d) { return zfile_size (d); } unsigned int zfile_read_archive (struct zfile *d, void *b, unsigned int size) { return zfile_fread (b, 1, size, d); } void zfile_close_archive (struct zfile *d) { /* do nothing, keep file cached */ } struct zfile *zfile_open_archive (const TCHAR *path, int flags) { struct zvolume *zv = get_zvolume (path); struct znode *zn = get_znode (zv, path, TRUE); struct zfile *z; if (!zn) return 0; if (zn->f) { zfile_fseek (zn->f, 0, SEEK_SET); return zn->f; } if (zn->vfile) zn = zn->vfile; z = archive_getzfile (zn, zn->volume->id, 0); if (z) zfile_fseek (z, 0, SEEK_SET); zn->f = z; return zn->f; } int zfile_exists_archive (const TCHAR *path, const TCHAR *rel) { TCHAR tmp[MAX_DPATH]; struct zvolume *zv; struct znode *zn; _stprintf (tmp, _T("%s%c%s"), path, FSDB_DIR_SEPARATOR, rel); zv = get_zvolume (tmp); zn = get_znode (zv, tmp, TRUE); return zn ? 1 : 0; } int zfile_convertimage (const TCHAR *src, const TCHAR *dst) { struct zfile *s, *d; int ret = 0; s = zfile_fopen (src, _T("rb"), ZFD_NORMAL); if (s) { uae_u8 *b; int size; zfile_fseek (s, 0, SEEK_END); size = zfile_ftell (s); zfile_fseek (s, 0, SEEK_SET); b = xcalloc (uae_u8, size); if (b) { if (zfile_fread (b, size, 1, s) == 1) { d = zfile_fopen (dst, _T("wb"), 0); if (d) { if (zfile_fwrite (b, size, 1, d) == 1) ret = 1; zfile_fclose (d); } } xfree (b); } zfile_fclose (s); } return ret; } #ifdef _CONSOLE static TCHAR *zerror; #define WRITE_LOG_BUF_SIZE 4096 void zfile_seterror (const TCHAR *format, ...) { int count; if (!zerror) { TCHAR buffer[WRITE_LOG_BUF_SIZE]; va_list parms; va_start (parms, format); count = _vsntprintf (buffer, WRITE_LOG_BUF_SIZE - 1, format, parms); zerror = my_strdup (buffer); va_end (parms); } } TCHAR *zfile_geterror (void) { return zerror; } #else void zfile_seterror (const TCHAR *format, ...) { } #endif fs-uae-2.2.3+dfsg/src/gfxutil.cpp0000644000175000017500000002446312162366654017042 0ustar glaubitzglaubitz/* * UAE - The Un*x Amiga Emulator * * Common code needed by all the various graphics systems. * * (c) 1996 Bernd Schmidt, Ed Hanway, Samuel Devulder */ #include "sysconfig.h" #include "sysdeps.h" #include "options.h" #include "custom.h" #include "rtgmodes.h" #include "xwin.h" #include "gfxfilter.h" #ifdef FSUAE #define gamma math_h_gamma #endif #include #ifdef FSUAE #undef gamma #endif double getvsyncrate (double hz, int *mult) { struct apmode *ap = picasso_on ? &currprefs.gfx_apmode[1] : &currprefs.gfx_apmode[0]; if (hz < 0) return 0; if (hz > 85) { *mult = -1; return hz / 2; } if (hz < 35 && hz > 0) { if (ap->gfx_interlaced) *mult = 0; else *mult = 1; return hz * 2; } *mult = 0; return hz; } #define RED 0 #define GRN 1 #define BLU 2 unsigned int doMask (int p, int bits, int shift) { /* scale to 0..255, shift to align msb with mask, and apply mask */ #ifdef FSUAE // using uae_u32 here instead of long is important for 64-bit archs // on non-Windows systems #endif uae_u32 val; if (flashscreen) p ^= 0xff; val = p << 24; if (!bits) return 0; val >>= (32 - bits); val <<= shift; return val; } int bits_in_mask (unsigned long mask) { int n = 0; while (mask) { n += mask & 1; mask >>= 1; } return n; } int mask_shift (unsigned long mask) { int n = 0; if (!mask) return 0; while (!(mask & 1)) { n++; mask >>= 1; } return n; } unsigned int doMask256 (int p, int bits, int shift) { /* p is a value from 0 to 255 (Amiga color value) * shift to align msb with mask, and apply mask */ unsigned long val = p * 0x01010101UL; if (bits == 0) return 0; val >>= (32 - bits); val <<= shift; return val; } static unsigned int doColor (int i, int bits, int shift) { int shift2; if (flashscreen) i ^= 0xffffffff; if(bits >= 8) shift2 = 0; else shift2 = 8 - bits; return (i >> shift2) << shift; } static unsigned int doAlpha (int alpha, int bits, int shift) { return (alpha & ((1 << bits) - 1)) << shift; } static float video_gamma (float value, float gamma, float bri, float con) { double factor; float ret; value += bri; value *= con; if (value <= 0.0f) return 0.0f; factor = pow(255.0f, 1.0f - gamma); ret = (float)(factor * pow(value, gamma)); if (ret < 0.0f) ret = 0.0f; return ret; } static uae_u32 gamma[256 * 3]; static int lf, hf; static void video_calc_gammatable (void) { int i; float bri, con, gam, v; uae_u32 vi; bri = ((float)(currprefs.gfx_luminance)) * (128.0f / 1000.0f); con = ((float)(currprefs.gfx_contrast + 1000)) / 1000.0f; gam = ((float)(1000 - currprefs.gfx_gamma)) / 1000.0f; lf = 64 * currprefs.gfx_filter_blur / 1000; hf = 256 - lf * 2; for (i = 0; i < (256 * 3); i++) { v = video_gamma((float)(i - 256), gam, bri, con); vi = (uae_u32)v; if (vi > 255) vi = 255; if (currprefs.gfx_luminance == 0 && currprefs.gfx_contrast == 0 && currprefs.gfx_gamma == 0) vi = i & 0xff; gamma[i] = vi; } } static uae_u32 limit256 (double v) { v = v * (double)(currprefs.gfx_filter_contrast + 1000) / 1000.0 + currprefs.gfx_filter_luminance / 10.0; if (v < 0) v = 0; if (v > 255) v = 255; return ((uae_u32)v) & 0xff; } static uae_u32 limit256rb (double v) { v *= (double)(currprefs.gfx_filter_saturation + 1000) / 1000.0; if (v < -128) v = -128; if (v > 127) v = 127; return ((uae_u32)v) & 0xff; } static double get_y (int r, int g, int b) { return 0.2989f * r + 0.5866f * g + 0.1145f * b; } static uae_u32 get_yh (int r, int g, int b) { return limit256 (get_y (r, g, b) * hf / 256); } static uae_u32 get_yl (int r, int g, int b) { return limit256 (get_y (r, g, b) * lf / 256); } static uae_u32 get_cb (int r, int g, int b) { return limit256rb (-0.168736f * r - 0.331264f * g + 0.5f * b); } static uae_u32 get_cr (int r, int g, int b) { return limit256rb (0.5f * r - 0.418688f * g - 0.081312f * b); } extern uae_s32 tyhrgb[65536]; extern uae_s32 tylrgb[65536]; extern uae_s32 tcbrgb[65536]; extern uae_s32 tcrrgb[65536]; extern uae_u32 redc[3 * 256], grec[3 * 256], bluc[3 * 256]; static uae_u32 lowbits (int v, int shift, int lsize) { v >>= shift; v &= (1 << lsize) - 1; return v; } void alloc_colors_picasso (int rw, int gw, int bw, int rs, int gs, int bs, int rgbfmt) { #ifdef PICASSO96 int byte_swap = 0; int i; int red_bits = 0, green_bits, blue_bits; int red_shift, green_shift, blue_shift; int bpp = rw + gw + bw; switch (rgbfmt) { case RGBFB_R5G6B5PC: red_bits = 5; green_bits = 6; blue_bits = 5; red_shift = 11; green_shift = 5; blue_shift = 0; break; case RGBFB_R5G5B5PC: red_bits = green_bits = blue_bits = 5; red_shift = 10; green_shift = 5; blue_shift = 0; break; case RGBFB_R5G6B5: red_bits = 5; green_bits = 6; blue_bits = 5; red_shift = 11; green_shift = 5; blue_shift = 0; byte_swap = 1; break; case RGBFB_R5G5B5: red_bits = green_bits = blue_bits = 5; red_shift = 10; green_shift = 5; blue_shift = 0; byte_swap = 1; break; case RGBFB_B5G6R5PC: red_bits = 5; green_bits = 6; blue_bits = 5; red_shift = 0; green_shift = 5; blue_shift = 11; break; case RGBFB_B5G5R5PC: red_bits = green_bits = blue_bits = 5; red_shift = 0; green_shift = 5; blue_shift = 10; break; default: red_bits = rw; green_bits = gw; blue_bits = bw; red_shift = rs; green_shift = gs; blue_shift = bs; break; } #ifdef WORDS_BIGENDIAN if (byte_swap) byte_swap = 0; else byte_swap = 1; #endif memset (p96_rgbx16, 0, sizeof p96_rgbx16); if (red_bits) { int lrbits = 8 - red_bits; int lgbits = 8 - green_bits; int lbbits = 8 - blue_bits; int lrmask = (1 << red_bits) - 1; int lgmask = (1 << green_bits) - 1; int lbmask = (1 << blue_bits) - 1; for (i = 65535; i >= 0; i--) { uae_u32 r, g, b, c; uae_u32 j = byte_swap ? bswap_16 (i) : i; r = (((j >> red_shift) & lrmask) << lrbits) | lowbits (j, red_shift, lrbits); g = (((j >> green_shift) & lgmask) << lgbits) | lowbits (j, green_shift, lgbits); b = (((j >> blue_shift) & lbmask) << lbbits) | lowbits (j, blue_shift, lbbits); c = doMask(r, rw, rs) | doMask(g, gw, gs) | doMask(b, bw, bs); if (bpp <= 16) c *= 0x00010001; p96_rgbx16[i] = c; } } #endif } void alloc_colors_rgb (int rw, int gw, int bw, int rs, int gs, int bs, int aw, int as, int alpha, int byte_swap, uae_u32 *rc, uae_u32 *gc, uae_u32 *bc) { int bpp = rw + gw + bw + aw; int i; for(i = 0; i < 256; i++) { int j; if (currprefs.gfx_blackerthanblack) { j = i * 15 / 16 + 15; } else { j = i; } j += 256; rc[i] = doColor (gamma[j], rw, rs) | doAlpha (alpha, aw, as); gc[i] = doColor (gamma[j], gw, gs) | doAlpha (alpha, aw, as); bc[i] = doColor (gamma[j], bw, bs) | doAlpha (alpha, aw, as); if (byte_swap) { if (bpp <= 16) { rc[i] = bswap_16 (rc[i]); gc[i] = bswap_16 (gc[i]); bc[i] = bswap_16 (bc[i]); } else { rc[i] = bswap_32 (rc[i]); gc[i] = bswap_32 (gc[i]); bc[i] = bswap_32 (bc[i]); } } if (bpp <= 16) { /* Fill upper 16 bits of each colour value with * a copy of the colour. */ rc[i] = rc[i] * 0x00010001; gc[i] = gc[i] * 0x00010001; bc[i] = bc[i] * 0x00010001; } } } void alloc_colors64k (int rw, int gw, int bw, int rs, int gs, int bs, int aw, int as, int alpha, int byte_swap) { int bpp = rw + gw + bw + aw; int i, j; video_calc_gammatable (); j = 256; for (i = 0; i < 4096; i++) { int r = ((i >> 8) << 4) | (i >> 8); int g = (((i >> 4) & 0xf) << 4) | ((i >> 4) & 0x0f); int b = ((i & 0xf) << 4) | (i & 0x0f); r = gamma[r + j]; g = gamma[g + j]; b = gamma[b + j]; xcolors[i] = doMask(r, rw, rs) | doMask(g, gw, gs) | doMask(b, bw, bs) | doAlpha (alpha, aw, as); if (byte_swap) { if (bpp <= 16) xcolors[i] = bswap_16 (xcolors[i]); else xcolors[i] = bswap_32 (xcolors[i]); } if (bpp <= 16) { /* Fill upper 16 bits of each colour value * with a copy of the colour. */ xcolors[i] |= xcolors[i] * 0x00010001; } } #if defined(AGA) || defined(GFXFILTER) alloc_colors_rgb (rw, gw, bw, rs, gs, bs, aw, as, alpha, byte_swap, xredcolors, xgreencolors, xbluecolors); /* copy original color table */ for (i = 0; i < 256; i++) { redc[0 * 256 + i] = xredcolors[0]; grec[0 * 256 + i] = xgreencolors[0]; bluc[0 * 256 + i] = xbluecolors[0]; redc[1 * 256 + i] = xredcolors[i]; grec[1 * 256 + i] = xgreencolors[i]; bluc[1 * 256 + i] = xbluecolors[i]; redc[2 * 256 + i] = xredcolors[255]; grec[2 * 256 + i] = xgreencolors[255]; bluc[2 * 256 + i] = xbluecolors[255]; } #ifdef GFXFILTER if (usedfilter && usedfilter->yuv) { /* create internal 5:6:5 color tables */ for (i = 0; i < 256; i++) { j = i + 256; xredcolors[i] = doColor (gamma[j], 5, 11); xgreencolors[i] = doColor (gamma[j], 6, 5); xbluecolors[i] = doColor (gamma[j], 5, 0); if (bpp <= 16) { /* Fill upper 16 bits of each colour value with * a copy of the colour. */ xredcolors [i] = xredcolors [i] * 0x00010001; xgreencolors[i] = xgreencolors[i] * 0x00010001; xbluecolors [i] = xbluecolors [i] * 0x00010001; } } for (i = 0; i < 4096; i++) { int r = ((i >> 8) << 4) | (i >> 8); int g = (((i >> 4) & 0xf) << 4) | ((i >> 4) & 0x0f); int b = ((i & 0xf) << 4) | (i & 0x0f); r = gamma[r + 256]; g = gamma[g + 256]; b = gamma[b + 256]; xcolors[i] = doMask(r, 5, 11) | doMask(g, 6, 5) | doMask(b, 5, 0); if (byte_swap) { if (bpp <= 16) xcolors[i] = bswap_16 (xcolors[i]); else xcolors[i] = bswap_32 (xcolors[i]); } if (bpp <= 16) { /* Fill upper 16 bits of each colour value * with a copy of the colour. */ xcolors[i] |= xcolors[i] * 0x00010001; } } /* create RGB 5:6:5 -> YUV tables */ for (i = 0; i < 65536; i++) { uae_u32 r, g, b; r = (((i >> 11) & 31) << 3) | lowbits (i, 11, 3); r = gamma[r + 256]; g = (((i >> 5) & 63) << 2) | lowbits (i, 5, 2); g = gamma[g + 256]; b = (((i >> 0) & 31) << 3) | lowbits (i, 0, 3); b = gamma[b + 256]; tyhrgb[i] = get_yh (r, g, b) * 256 * 256; tylrgb[i] = get_yl (r, g, b) * 256 * 256; tcbrgb[i] = ((uae_s8)get_cb (r, g, b)) * 256; tcrrgb[i] = ((uae_s8)get_cr (r, g, b)) * 256; } } #endif #endif xredcolor_b = rw; xgreencolor_b = gw; xbluecolor_b = bw; xredcolor_s = rs; xgreencolor_s = gs; xbluecolor_s = bs; xredcolor_m = ((1 << rw) - 1) << xredcolor_s; xgreencolor_m = ((1 << gw) - 1) << xgreencolor_s; xbluecolor_m = ((1 << bw) - 1) << xbluecolor_s; } fs-uae-2.2.3+dfsg/src/blkdev.cpp0000644000175000017500000013650012162366654016623 0ustar glaubitzglaubitz/* * UAE - The Un*x Amiga Emulator * * lowlevel cd device glue, scsi emulator * * Copyright 2009-2010 Toni Wilen * */ #include "sysconfig.h" #include "sysdeps.h" #include "options.h" #include "uae/memory.h" #include "blkdev.h" #include "scsidev.h" #include "savestate.h" #include "crc32.h" #include "threaddep/thread.h" #include "execio.h" #include "zfile.h" #ifdef RETROPLATFORM #include "rp.h" #endif int log_scsiemu = 0; #define PRE_INSERT_DELAY (3 * (currprefs.ntscmode ? 60 : 50)) static int scsiemu[MAX_TOTAL_SCSI_DEVICES]; static struct device_functions *device_func[MAX_TOTAL_SCSI_DEVICES]; static int openlist[MAX_TOTAL_SCSI_DEVICES]; static int waspaused[MAX_TOTAL_SCSI_DEVICES]; static int delayed[MAX_TOTAL_SCSI_DEVICES]; static uae_sem_t unitsem[MAX_TOTAL_SCSI_DEVICES]; static int unitsem_cnt[MAX_TOTAL_SCSI_DEVICES]; static int play_end_pos[MAX_TOTAL_SCSI_DEVICES]; static uae_u8 play_qcode[MAX_TOTAL_SCSI_DEVICES][SUBQ_SIZE]; static TCHAR newimagefiles[MAX_TOTAL_SCSI_DEVICES][256]; static int imagechangetime[MAX_TOTAL_SCSI_DEVICES]; static bool cdimagefileinuse[MAX_TOTAL_SCSI_DEVICES]; static int wasopen[MAX_TOTAL_SCSI_DEVICES]; /* convert minutes, seconds and frames -> logical sector number */ int msf2lsn (int msf) { int sector = (((msf >> 16) & 0xff) * 60 * 75 + ((msf >> 8) & 0xff) * 75 + ((msf >> 0) & 0xff)); sector -= 150; return sector; } /* convert logical sector number -> minutes, seconds and frames */ int lsn2msf (int sectors) { int msf; sectors += 150; msf = (sectors / (75 * 60)) << 16; msf |= ((sectors / 75) % 60) << 8; msf |= (sectors % 75) << 0; return msf; } uae_u8 frombcd (uae_u8 v) { return (v >> 4) * 10 + (v & 15); } uae_u8 tobcd (uae_u8 v) { return ((v / 10) << 4) | (v % 10); } int fromlongbcd (uae_u8 *p) { return (frombcd (p[0]) << 16) | (frombcd (p[1]) << 8) | (frombcd (p[2]) << 0); } void tolongbcd (uae_u8 *p, int v) { p[0] = tobcd ((v >> 16) & 0xff); p[1] = tobcd ((v >> 8) & 0xff); p[2] = tobcd ((v >> 0) & 0xff); } static struct cd_toc *gettoc (struct cd_toc_head *th, int block) { for (int i = th->first_track_offset + 1; i <= th->last_track_offset; i++) { struct cd_toc *t = &th->toc[i]; if (block < t->paddress) return t - 1; } return &th->toc[th->last_track_offset]; } int isaudiotrack (struct cd_toc_head *th, int block) { struct cd_toc *t = gettoc (th, block); if (!t) return 0; return (t->control & 0x0c) != 4; } int isdatatrack (struct cd_toc_head *th, int block) { return !isaudiotrack (th, block); } static int cdscsidevicetype[MAX_TOTAL_SCSI_DEVICES]; #ifdef _WIN32 #include "od-win32/win32.h" extern struct device_functions devicefunc_win32_spti; extern struct device_functions devicefunc_win32_ioctl; #endif #ifdef LINUX extern struct device_functions devicefunc_scsi_linux_ioctl; #endif extern struct device_functions devicefunc_cdimage; static struct device_functions *devicetable[] = { NULL, &devicefunc_cdimage, #ifdef _WIN32 &devicefunc_win32_ioctl, #elif defined(LINUX) &devicefunc_scsi_linux_ioctl, #else NULL, #endif #ifdef _WIN32 &devicefunc_win32_spti, #else NULL, #endif NULL }; static int driver_installed[6]; static void install_driver (int flags) { #ifdef FSUAE write_log("install_driver flags=%d\n", flags); #endif for (int i = 0; i < MAX_TOTAL_SCSI_DEVICES; i++) { scsiemu[i] = false; device_func[i] = NULL; } if (flags > 0) { device_func[0] = devicetable[flags]; scsiemu[0] = true; #ifdef FSUAE write_log("CD: setting device_func[0] = devicetable[%d]\n", flags); #endif } else { for (int i = 0; i < MAX_TOTAL_SCSI_DEVICES; i++) { scsiemu[i] = false; device_func[i] = NULL; switch (cdscsidevicetype[i]) { case SCSI_UNIT_IMAGE: device_func[i] = devicetable[SCSI_UNIT_IMAGE]; scsiemu[i] = true; break; case SCSI_UNIT_IOCTL: device_func[i] = devicetable[SCSI_UNIT_IOCTL]; scsiemu[i] = true; break; case SCSI_UNIT_SPTI: if (currprefs.win32_uaescsimode == UAESCSI_CDEMU) { device_func[i] = devicetable[SCSI_UNIT_IOCTL]; scsiemu[i] = true; } else { device_func[i] = devicetable[SCSI_UNIT_SPTI]; } break; } } } for (int j = 1; devicetable[j]; j++) { if (!driver_installed[j]) { for (int i = 0; i < MAX_TOTAL_SCSI_DEVICES; i++) { if (device_func[i] == devicetable[j]) { int ok = device_func[i]->openbus (0); driver_installed[j] = 1; write_log (_T("%s driver installed, ok=%d\n"), device_func[i]->name, ok); break; } } } } } void blkdev_default_prefs (struct uae_prefs *p) { for (int i = 0; i < MAX_TOTAL_SCSI_DEVICES; i++) { p->cdslots[i].name[0] = 0; p->cdslots[i].inuse = false; p->cdslots[i].type = SCSI_UNIT_DEFAULT; cdscsidevicetype[i] = SCSI_UNIT_DEFAULT; } } void blkdev_fix_prefs (struct uae_prefs *p) { for (int i = 0; i < MAX_TOTAL_SCSI_DEVICES; i++) { cdscsidevicetype[i] = p->cdslots[i].type; if (p->cdslots[i].inuse == false && p->cdslots[i].name[0] && p->cdslots[i].type != SCSI_UNIT_DISABLED) p->cdslots[i].inuse = true; } for (int i = 0; i < MAX_TOTAL_SCSI_DEVICES; i++) { if (cdscsidevicetype[i] != SCSI_UNIT_DEFAULT) continue; if (p->cdslots[i].inuse || p->cdslots[i].name[0]) { TCHAR *name = p->cdslots[i].name; if (_tcslen (name) == 3 && name[1] == ':' && name[2] == '\\') { if (currprefs.scsi && (currprefs.win32_uaescsimode == UAESCSI_SPTI || currprefs.win32_uaescsimode == UAESCSI_SPTISCAN)) cdscsidevicetype[i] = SCSI_UNIT_SPTI; else cdscsidevicetype[i] = SCSI_UNIT_IOCTL; } else { cdscsidevicetype[i] = SCSI_UNIT_IMAGE; } } else if (currprefs.scsi) { if (currprefs.win32_uaescsimode == UAESCSI_CDEMU) cdscsidevicetype[i] = SCSI_UNIT_IOCTL; else cdscsidevicetype[i] = SCSI_UNIT_SPTI; } else { cdscsidevicetype[i] = SCSI_UNIT_IOCTL; } } } static bool getsem (int unitnum, bool dowait) { if (unitsem[unitnum] == NULL) uae_sem_init (&unitsem[unitnum], 0, 1); bool gotit = false; if (dowait) { uae_sem_wait (&unitsem[unitnum]); gotit = true; } else { gotit = uae_sem_trywait (&unitsem[unitnum]) == 0; } if (gotit) unitsem_cnt[unitnum]++; if (unitsem_cnt[unitnum] > 1) write_log (_T("CD: unitsem%d acquire mismatch! cnt=%d\n"), unitnum, unitsem_cnt[unitnum]); return gotit; } static bool getsem (int unitnum) { return getsem (unitnum, false); } static void freesem (int unitnum) { unitsem_cnt[unitnum]--; if (unitsem_cnt[unitnum] < 0) write_log (_T("CD: unitsem%d release mismatch! cnt=%d\n"), unitnum, unitsem_cnt[unitnum]); uae_sem_post (&unitsem[unitnum]); } static void sys_command_close_internal (int unitnum) { getsem (unitnum, true); waspaused[unitnum] = 0; if (openlist[unitnum] <= 0) write_log (_T("BUG unit %d close: opencnt=%d!\n"), unitnum, openlist[unitnum]); if (device_func[unitnum]) { device_func[unitnum]->closedev (unitnum); if (openlist[unitnum] > 0) openlist[unitnum]--; } freesem (unitnum); if (openlist[unitnum] == 0) { uae_sem_destroy (&unitsem[unitnum]); unitsem[unitnum] = NULL; } } static int sys_command_open_internal (int unitnum, const TCHAR *ident, cd_standard_unit csu) { int ret = 0; if (unitsem[unitnum] == NULL) uae_sem_init (&unitsem[unitnum], 0, 1); getsem (unitnum, true); if (openlist[unitnum]) write_log (_T("BUG unit %d open: opencnt=%d!\n"), unitnum, openlist[unitnum]); if (device_func[unitnum]) { ret = device_func[unitnum]->opendev (unitnum, ident, csu != CD_STANDARD_UNIT_DEFAULT); if (ret) openlist[unitnum]++; } freesem (unitnum); return ret; } static int getunitinfo (int unitnum, int drive, cd_standard_unit csu, int *isaudio) { struct device_info di; if (sys_command_info (unitnum, &di, 0)) { write_log (_T("Scanning drive %s: "), di.label); if (di.media_inserted) { if (isaudiotrack (&di.toc, 0)) { if (*isaudio == 0) *isaudio = drive; write_log (_T("CDA")); } uae_u8 buffer[2048]; if (sys_command_cd_read (unitnum, buffer, 16, 1)) { if (!memcmp (buffer + 8, "CDTV", 4) || !memcmp (buffer + 8, "CD32", 4) || !memcmp (buffer + 8, "COMM", 4)) { uae_u32 crc; write_log (_T("CD32 or CDTV")); if (sys_command_cd_read (unitnum, buffer, 21, 1)) { crc = get_crc32 (buffer, sizeof buffer); if (crc == 0xe56c340f) { write_log (_T(" [CD32.TM]")); if (csu == CD_STANDARD_UNIT_CD32) { write_log (_T("\n")); return 1; } } } if (csu == CD_STANDARD_UNIT_CDTV || csu == CD_STANDARD_UNIT_CD32) { write_log (_T("\n")); return 1; } } } } else { write_log (_T("no media")); } } write_log (_T("\n")); return 0; } static int get_standard_cd_unit2 (cd_standard_unit csu) { int unitnum = 0; int isaudio = 0; if (currprefs.cdslots[unitnum].name[0] || currprefs.cdslots[unitnum].inuse) { if (currprefs.cdslots[unitnum].name[0]) { #ifdef FSUAE if (cdscsidevicetype[unitnum]) { device_func_init (cdscsidevicetype[unitnum]); if (!sys_command_open_internal (unitnum, currprefs.cdslots[unitnum].name, csu)) { goto fallback; } } else { goto fallback; } #else device_func_init (SCSI_UNIT_IOCTL); if (!sys_command_open_internal (unitnum, currprefs.cdslots[unitnum].name, csu)) { device_func_init (SCSI_UNIT_IMAGE); if (!sys_command_open_internal (unitnum, currprefs.cdslots[unitnum].name, csu)) goto fallback; } #endif } else { goto fallback; } return unitnum; } device_func_init (SCSI_UNIT_IOCTL); for (int drive = 'C'; drive <= 'Z'; ++drive) { TCHAR vol[100]; _stprintf (vol, _T("%c:\\"), drive); int drivetype = GetDriveType (vol); if (drivetype == DRIVE_CDROM) { if (sys_command_open_internal (unitnum, vol, csu)) { if (getunitinfo (unitnum, drive, csu, &isaudio)) return unitnum; sys_command_close (unitnum); } } } if (isaudio) { TCHAR vol[100]; _stprintf (vol, _T("%c:\\"), isaudio); if (sys_command_open_internal (unitnum, vol, csu)) return unitnum; } fallback: device_func_init (SCSI_UNIT_IMAGE); if (!sys_command_open_internal (unitnum, _T(""), csu)) { write_log (_T("image mounter failed to open as empty!?\n")); return -1; } return unitnum; } int get_standard_cd_unit (cd_standard_unit csu) { int unitnum = get_standard_cd_unit2 (csu); if (unitnum < 0) return -1; #ifdef RETROPLATFORM rp_cd_device_enable (unitnum, true); #endif delayed[unitnum] = 0; if (currprefs.cdslots[unitnum].delayed) { delayed[unitnum] = PRE_INSERT_DELAY; } return unitnum; } void close_standard_cd_unit (int unitnum) { sys_command_close (unitnum); } int sys_command_isopen (int unitnum) { return openlist[unitnum]; } int sys_command_open (int unitnum) { if (openlist[unitnum]) { openlist[unitnum]++; return -1; } waspaused[unitnum] = 0; int v = sys_command_open_internal (unitnum, currprefs.cdslots[unitnum].name[0] ? currprefs.cdslots[unitnum].name : NULL, CD_STANDARD_UNIT_DEFAULT); if (!v) return 0; #ifdef RETROPLATFORM rp_cd_device_enable (unitnum, true); #endif return v; } void sys_command_close (int unitnum) { if (openlist[unitnum] > 1) { openlist[unitnum]--; return; } #ifdef RETROPLATFORM rp_cd_device_enable (unitnum, false); #endif sys_command_close_internal (unitnum); } void blkdev_cd_change (int unitnum, const TCHAR *name) { struct device_info di; sys_command_info (unitnum, &di, 1); #ifdef RETROPLATFORM rp_cd_image_change (unitnum, name); #endif } void device_func_reset (void) { for (int i = 0; i < MAX_TOTAL_SCSI_DEVICES; i++) { wasopen[i] = 0; waspaused[i] = false; imagechangetime[i] = 0; cdimagefileinuse[i] = false; newimagefiles[i][0] = 0; } } int device_func_init (int flags) { blkdev_fix_prefs (&currprefs); install_driver (flags); return 1; } void blkdev_entergui (void) { for (int i = 0; i < MAX_TOTAL_SCSI_DEVICES; i++) { waspaused[i] = 0; struct device_info di; if (sys_command_info (i, &di, 1)) { if (sys_command_cd_pause (i, 1) == 0) waspaused[i] = 1; } } } void blkdev_exitgui (void) { for (int i = 0; i < MAX_TOTAL_SCSI_DEVICES; i++) { if (waspaused[i]) { struct device_info di; if (sys_command_info (i, &di, 1)) { sys_command_cd_pause (i, 0); } } waspaused[i] = 0; } } void check_prefs_changed_cd (void) { if (!config_changed) return; currprefs.sound_volume_cd = changed_prefs.sound_volume_cd; } static void check_changes (int unitnum) { bool changed = false; bool gotsem = false; if (device_func[unitnum] == NULL) return; if (delayed[unitnum]) { delayed[unitnum]--; if (delayed[unitnum] == 0) write_log (_T("CD: startup delayed insert '%s'\n"), currprefs.cdslots[unitnum].name[0] ? currprefs.cdslots[unitnum].name : _T("")); return; } if (_tcscmp (changed_prefs.cdslots[unitnum].name, currprefs.cdslots[unitnum].name) != 0) changed = true; if (!changed && changed_prefs.cdslots[unitnum].name[0] == 0 && changed_prefs.cdslots[unitnum].inuse != currprefs.cdslots[unitnum].inuse) changed = true; if (changed) { bool wasimage = currprefs.cdslots[unitnum].name[0] != 0; if (unitsem[unitnum]) gotsem = getsem (unitnum, true); cdimagefileinuse[unitnum] = changed_prefs.cdslots[unitnum].inuse; _tcscpy (newimagefiles[unitnum], changed_prefs.cdslots[unitnum].name); changed_prefs.cdslots[unitnum].name[0] = currprefs.cdslots[unitnum].name[0] = 0; currprefs.cdslots[unitnum].inuse = changed_prefs.cdslots[unitnum].inuse; int pollmode = 0; imagechangetime[unitnum] = 3 * 50; struct device_info di; device_func[unitnum]->info (unitnum, &di, 0, -1); if (wasopen[unitnum] >= 0) wasopen[unitnum] = di.open ? 1 : 0; if (wasopen[unitnum]) { device_func[unitnum]->closedev (unitnum); wasopen[unitnum] = -1; if (currprefs.scsi) { scsi_do_disk_change (unitnum, 0, &pollmode); if (pollmode) imagechangetime[unitnum] = 8 * 50; if (filesys_do_disk_change (unitnum, 0)) { imagechangetime[unitnum] = newimagefiles[unitnum][0] ? 3 * 50 : 0; pollmode = 0; } } } write_log (_T("CD: eject (%s) open=%d\n"), pollmode ? _T("slow") : _T("fast"), wasopen[unitnum] ? 1 : 0); #ifdef RETROPLATFORM rp_cd_image_change (unitnum, NULL); #endif if (gotsem) { freesem (unitnum); gotsem = false; } } if (imagechangetime[unitnum] == 0) return; imagechangetime[unitnum]--; if (imagechangetime[unitnum] > 0) return; if (unitsem[unitnum]) gotsem = getsem (unitnum, true); _tcscpy (currprefs.cdslots[unitnum].name, newimagefiles[unitnum]); _tcscpy (changed_prefs.cdslots[unitnum].name, newimagefiles[unitnum]); currprefs.cdslots[unitnum].inuse = changed_prefs.cdslots[unitnum].inuse = cdimagefileinuse[unitnum]; newimagefiles[unitnum][0] = 0; write_log (_T("CD: delayed insert '%s' (open=%d,unit=%d)\n"), currprefs.cdslots[unitnum].name[0] ? currprefs.cdslots[unitnum].name : _T(""), wasopen[unitnum] ? 1 : 0, unitnum); device_func_init (0); if (wasopen[unitnum]) { if (!device_func[unitnum]->opendev (unitnum, currprefs.cdslots[unitnum].name, 0)) { write_log (_T("-> device open failed\n")); wasopen[unitnum] = 0; } else { wasopen[unitnum] = 1; write_log (_T("-> device reopened\n")); } } if (currprefs.scsi && wasopen[unitnum]) { struct device_info di; device_func[unitnum]->info (unitnum, &di, 0, -1); int pollmode; if (gotsem) { freesem (unitnum); gotsem = false; } scsi_do_disk_change (unitnum, 1, &pollmode); filesys_do_disk_change (unitnum, 1); } #ifdef RETROPLATFORM rp_cd_image_change (unitnum, currprefs.cdslots[unitnum].name); #endif if (gotsem) { freesem (unitnum); gotsem = false; } config_changed = 1; } void blkdev_vsync (void) { for (int i = 0; i < MAX_TOTAL_SCSI_DEVICES; i++) check_changes (i); } static int do_scsi (int unitnum, uae_u8 *cmd, int cmdlen) { uae_u8 *p = device_func[unitnum]->exec_out (unitnum, cmd, cmdlen); return p != NULL; } static int do_scsi (int unitnum, uae_u8 *cmd, int cmdlen, uae_u8 *out, int outsize) { uae_u8 *p = device_func[unitnum]->exec_in (unitnum, cmd, cmdlen, &outsize); if (p) memcpy (out, p, outsize); return p != NULL; } static int failunit (int unitnum) { if (unitnum < 0 || unitnum >= MAX_TOTAL_SCSI_DEVICES) return 1; if (device_func[unitnum] == NULL) return 1; return 0; } static int audiostatus (int unitnum) { if (!getsem (unitnum)) return 0; uae_u8 cmd[10] = {0x42,2,0x40,1,0,0,0,(uae_u8)(DEVICE_SCSI_BUFSIZE>>8),(uae_u8)(DEVICE_SCSI_BUFSIZE&0xff),0}; uae_u8 *p = device_func[unitnum]->exec_in (unitnum, cmd, sizeof (cmd), 0); freesem (unitnum); if (!p) return 0; return p[1]; } /* pause/unpause CD audio */ int sys_command_cd_pause (int unitnum, int paused) { if (failunit (unitnum)) return -1; if (!getsem (unitnum)) return 0; int v; if (device_func[unitnum]->pause == NULL) { int as = audiostatus (unitnum); uae_u8 cmd[10] = {0x4b,0,0,0,0,0,0,0,paused?0:1,0}; do_scsi (unitnum, cmd, sizeof cmd); v = as == AUDIO_STATUS_PAUSED; } else { v = device_func[unitnum]->pause (unitnum, paused); } freesem (unitnum); return v; } /* stop CD audio */ void sys_command_cd_stop (int unitnum) { if (failunit (unitnum)) return; if (!getsem (unitnum)) return; if (device_func[unitnum]->stop == NULL) { int as = audiostatus (unitnum); uae_u8 cmd[6] = {0x4e,0,0,0,0,0}; do_scsi (unitnum, cmd, sizeof cmd); } else { device_func[unitnum]->stop (unitnum); } freesem (unitnum); } /* play CD audio */ int sys_command_cd_play (int unitnum, int startlsn, int endlsn, int scan) { int v; if (failunit (unitnum)) return 0; if (!getsem (unitnum)) return 0; play_end_pos[unitnum] = endlsn; if (device_func[unitnum]->play == NULL) { uae_u8 cmd[12] = {0,0,0,0,0,0,0,0,0,0,0,0}; int startmsf = lsn2msf (startlsn); int endmsf = lsn2msf (endlsn); cmd[0] = 0x47; cmd[3] = (uae_u8)(startmsf >> 16); cmd[4] = (uae_u8)(startmsf >> 8); cmd[5] = (uae_u8)(startmsf >> 0); cmd[6] = (uae_u8)(endmsf >> 16); cmd[7] = (uae_u8)(endmsf >> 8); cmd[8] = (uae_u8)(endmsf >> 0); v = do_scsi (unitnum, cmd, sizeof cmd) ? 0 : 1; } else { v = device_func[unitnum]->play (unitnum, startlsn, endlsn, scan, NULL, NULL); } freesem (unitnum); return v; } /* play CD audio with subchannels */ int sys_command_cd_play (int unitnum, int startlsn, int endlsn, int scan, play_status_callback statusfunc, play_subchannel_callback subfunc) { int v; if (failunit (unitnum)) return 0; if (!getsem (unitnum)) return 0; if (device_func[unitnum]->play == NULL) v = sys_command_cd_play (unitnum, startlsn, endlsn, scan); else v = device_func[unitnum]->play (unitnum, startlsn, endlsn, scan, statusfunc, subfunc); freesem (unitnum); return v; } /* set CD audio volume */ uae_u32 sys_command_cd_volume (int unitnum, uae_u16 volume_left, uae_u16 volume_right) { int v; if (failunit (unitnum)) return 0; if (!getsem (unitnum)) return 0; if (device_func[unitnum]->volume == NULL) v = -1; else v = device_func[unitnum]->volume (unitnum, volume_left, volume_right); freesem (unitnum); return v; } /* read qcode */ int sys_command_cd_qcode (int unitnum, uae_u8 *buf) { int v; if (failunit (unitnum)) return 0; if (!getsem (unitnum)) return 0; if (device_func[unitnum]->qcode == NULL) { uae_u8 cmd[10] = {0x42,2,0x40,1,0,0,0,(uae_u8)(SUBQ_SIZE>>8),(uae_u8)(SUBQ_SIZE&0xff),0}; v = do_scsi (unitnum, cmd, sizeof cmd, buf, SUBQ_SIZE); } else { v = device_func[unitnum]->qcode (unitnum, buf, -1); } freesem (unitnum); return v; }; /* read table of contents */ int sys_command_cd_toc (int unitnum, struct cd_toc_head *toc) { int v; if (failunit (unitnum)) return 0; if (!getsem (unitnum)) return 0; if (device_func[unitnum]->toc == NULL) { uae_u8 buf[4 + 8 * 103]; int size = sizeof buf; uae_u8 cmd [10] = { 0x43,0,2,0,0,0,0,(uae_u8)(size>>8),(uae_u8)(size&0xff),0}; if (do_scsi (unitnum, cmd, sizeof cmd, buf, size)) { // toc parse to do v = 0; } v = 0; } else { v = device_func[unitnum]->toc (unitnum, toc); } freesem (unitnum); return v; } /* read one cd sector */ int sys_command_cd_read (int unitnum, uae_u8 *data, int block, int size) { int v; if (failunit (unitnum)) return 0; if (!getsem (unitnum)) return 0; if (device_func[unitnum]->read == NULL) { uae_u8 cmd1[12] = { 0x28, 0, block >> 24, block >> 16, block >> 8, block >> 0, 0, size >> 8, size >> 0, 0, 0, 0 }; v = do_scsi (unitnum, cmd1, sizeof cmd1, data, size * 2048); #if 0 if (!v) { uae_u8 cmd2[12] = { 0xbe, 0, block >> 24, block >> 16, block >> 8, block >> 0, size >> 16, size >> 8, size >> 0, 0x10, 0, 0 }; v = do_scsi (unitnum, cmd2, sizeof cmd2, data, size * 2048); } #endif } else { v = device_func[unitnum]->read (unitnum, data, block, size); } freesem (unitnum); return v; } int sys_command_cd_rawread (int unitnum, uae_u8 *data, int block, int size, int sectorsize) { int v; if (failunit (unitnum)) return -1; if (!getsem (unitnum)) return 0; if (device_func[unitnum]->rawread == NULL) { uae_u8 cmd[12] = { 0xbe, 0, block >> 24, block >> 16, block >> 8, block >> 0, size >> 16, size >> 8, size >> 0, 0x10, 0, 0 }; v = do_scsi (unitnum, cmd, sizeof cmd, data, size * sectorsize); } else { v = device_func[unitnum]->rawread (unitnum, data, block, size, sectorsize, 0xffffffff); } freesem (unitnum); return v; } int sys_command_cd_rawread (int unitnum, uae_u8 *data, int block, int size, int sectorsize, uae_u8 sectortype, uae_u8 scsicmd9, uae_u8 subs) { int v; if (failunit (unitnum)) return -1; if (!getsem (unitnum)) return 0; if (device_func[unitnum]->rawread == NULL) { uae_u8 cmd[12] = { 0xbe, 0, block >> 24, block >> 16, block >> 8, block >> 0, size >> 16, size >> 8, size >> 0, 0x10, 0, 0 }; v = do_scsi (unitnum, cmd, sizeof cmd, data, size * sectorsize); } else { v = device_func[unitnum]->rawread (unitnum, data, block, size, sectorsize, (sectortype << 16) | (scsicmd9 << 8) | subs); } freesem (unitnum); return v; } /* read block */ int sys_command_read (int unitnum, uae_u8 *data, int block, int size) { int v; if (failunit (unitnum)) return 0; if (!getsem (unitnum)) return 0; if (device_func[unitnum]->read == NULL) { uae_u8 cmd[12] = { 0xa8, 0, 0, 0, 0, 0, size >> 24, size >> 16, size >> 8, size >> 0, 0, 0 }; cmd[2] = (uae_u8)(block >> 24); cmd[3] = (uae_u8)(block >> 16); cmd[4] = (uae_u8)(block >> 8); cmd[5] = (uae_u8)(block >> 0); v = do_scsi (unitnum, cmd, sizeof cmd, data, size * 2048); } else { v = device_func[unitnum]->read (unitnum, data, block, size); } freesem (unitnum); return v; } /* write block */ int sys_command_write (int unitnum, uae_u8 *data, int offset, int size) { int v; if (failunit (unitnum)) return 0; if (!getsem (unitnum)) return 0; if (device_func[unitnum]->write == NULL) { v = 0; } else { v = device_func[unitnum]->write (unitnum, data, offset, size); } freesem (unitnum); return v; } int sys_command_ismedia (int unitnum, int quick) { int v; if (failunit (unitnum)) return -1; if (delayed[unitnum]) return 0; if (!getsem (unitnum)) return 0; if (device_func[unitnum]->ismedia == NULL) { uae_u8 cmd[6] = { 0, 0, 0, 0, 0, 0 }; v = do_scsi (unitnum, cmd, sizeof cmd); } else { v = device_func[unitnum]->ismedia (unitnum, quick); } freesem (unitnum); return v; } struct device_info *sys_command_info_session (int unitnum, struct device_info *di, int quick, int session) { if (failunit (unitnum)) return NULL; if (!getsem (unitnum)) return 0; if (device_func[unitnum]->info == NULL) return 0; struct device_info *di2 = device_func[unitnum]->info (unitnum, di, quick, -1); if (di2 && delayed[unitnum]) di2->media_inserted = 0; freesem (unitnum); return di2; } struct device_info *sys_command_info (int unitnum, struct device_info *di, int quick) { return sys_command_info_session (unitnum, di, quick, -1); } #define MODE_SELECT_6 0x15 #define MODE_SENSE_6 0x1a #define MODE_SELECT_10 0x55 #define MODE_SENSE_10 0x5a void scsi_atapi_fixup_pre (uae_u8 *scsi_cmd, int *len, uae_u8 **datap, int *datalenp, int *parm) { uae_u8 cmd, *p, *data = *datap; int l, datalen = *datalenp; *parm = 0; cmd = scsi_cmd[0]; if (cmd != MODE_SELECT_6 && cmd != MODE_SENSE_6) return; l = scsi_cmd[4]; if (l > 4) l += 4; scsi_cmd[7] = l >> 8; scsi_cmd[8] = l; if (cmd == MODE_SELECT_6) { scsi_cmd[0] = MODE_SELECT_10; scsi_cmd[9] = scsi_cmd[5]; scsi_cmd[2] = scsi_cmd[3] = scsi_cmd[4] = scsi_cmd[5] = scsi_cmd[6] = 0; *len = 10; p = xmalloc (uae_u8, 8 + datalen + 4); if (datalen > 4) memcpy (p + 8, data + 4, datalen - 4); p[0] = 0; p[1] = data[0]; p[2] = data[1]; p[3] = data[2]; p[4] = p[5] = p[6] = 0; p[7] = data[3]; if (l > 8) datalen += 4; *parm = MODE_SELECT_10; *datap = p; } else { scsi_cmd[0] = MODE_SENSE_10; scsi_cmd[9] = scsi_cmd[5]; scsi_cmd[3] = scsi_cmd[4] = scsi_cmd[5] = scsi_cmd[6] = 0; if (l > 8) datalen += 4; *datap = xmalloc (uae_u8, datalen); *len = 10; *parm = MODE_SENSE_10; } *datalenp = datalen; } void scsi_atapi_fixup_post (uae_u8 *scsi_cmd, int len, uae_u8 *olddata, uae_u8 *data, int *datalenp, int parm) { int datalen = *datalenp; if (!data || !datalen) return; if (parm == MODE_SENSE_10) { olddata[0] = data[1]; olddata[1] = data[2]; olddata[2] = data[3]; olddata[3] = data[7]; datalen -= 4; if (datalen > 4) memcpy (olddata + 4, data + 8, datalen - 4); *datalenp = datalen; } } static void scsi_atapi_fixup_inquiry (struct amigascsi *as) { uae_u8 *scsi_data = as->data; uae_u32 scsi_len = as->len; uae_u8 *scsi_cmd = as->cmd; uae_u8 cmd; cmd = scsi_cmd[0]; /* CDROM INQUIRY: most Amiga programs expect ANSI version == 2 * (ATAPI normally responds with zero) */ if (cmd == 0x12 && scsi_len > 2 && scsi_data) { uae_u8 per = scsi_data[0]; uae_u8 b = scsi_data[2]; /* CDROM and ANSI version == 0 ? */ if ((per & 31) == 5 && (b & 7) == 0) { b |= 2; scsi_data[2] = b; } } } void scsi_log_before (uae_u8 *cdb, int cdblen, uae_u8 *data, int datalen) { int i; for (i = 0; i < cdblen; i++) { write_log (_T("%s%02X"), i > 0 ? _T(".") : _T(""), cdb[i]); } write_log (_T("\n")); if (data) { write_log (_T("DATAOUT: %d\n"), datalen); for (i = 0; i < datalen && i < 100; i++) write_log (_T("%s%02X"), i > 0 ? _T(".") : _T(""), data[i]); if (datalen > 0) write_log (_T("\n")); } } void scsi_log_after (uae_u8 *data, int datalen, uae_u8 *sense, int senselen) { int i; write_log (_T("DATAIN: %d\n"), datalen); for (i = 0; i < datalen && i < 100 && data; i++) write_log (_T("%s%02X"), i > 0 ? _T(".") : _T(""), data[i]); if (data && datalen > 0) write_log (_T("\n")); if (senselen > 0) { write_log (_T("SENSE: %d,"), senselen); for (i = 0; i < senselen && i < 32; i++) { write_log (_T("%s%02X"), i > 0 ? _T(".") : _T(""), sense[i]); } write_log (_T("\n")); } } static bool nodisk (struct device_info *di) { return di->media_inserted == 0; } static uae_u64 cmd_readx (int unitnum, uae_u8 *dataptr, int offset, int len) { if (!getsem (unitnum)) return 0; int v = device_func[unitnum]->read (unitnum, dataptr, offset, len); freesem (unitnum); if (v) return len; return 0; } static void wl (uae_u8 *p, int v) { p[0] = v >> 24; p[1] = v >> 16; p[2] = v >> 8; p[3] = v; } static void ww (uae_u8 *p, int v) { p[0] = v >> 8; p[1] = v; } static int rl (uae_u8 *p) { return (p[0] << 24) | (p[1] << 16) | (p[2] << 8) | (p[3]); } static int rw (uae_u8 *p) { return (p[0] << 8) | (p[1]); } static void stopplay (int unitnum) { sys_command_cd_stop (unitnum); } static int addtocentry (uae_u8 **dstp, int *len, int point, int newpoint, int msf, uae_u8 *head, struct cd_toc_head *th) { uae_u8 *dst = *dstp; for (int i = 0; i < th->points; i++) { struct cd_toc *t = &th->toc[i]; if (t->point == point) { if (*len < 8) return 0; int addr = t->paddress; if (msf) addr = lsn2msf (addr); dst[0] = 0; dst[1] = (t->adr << 4) | t->control; dst[2] = newpoint >= 0 ? newpoint : point; dst[3] = 0; dst[4] = addr >> 24; dst[5] = addr >> 16; dst[6] = addr >> 8; dst[7] = addr >> 0; if (point >= 1 && point <= 99) { if (head[2] == 0) head[2] = point; head[3] = point; } *len -= 8; *dstp = dst + 8; return 1; } } return -1; } static int scsiemudrv (int unitnum, uae_u8 *cmd) { if (failunit (unitnum)) return -1; if (!getsem (unitnum)) return 0; int v = 0; if (device_func[unitnum]->scsiemu) v = device_func[unitnum]->scsiemu (unitnum, cmd); freesem (unitnum); return v; } static int scsi_read_cd (int unitnum, uae_u8 *cmd, uae_u8 *data, struct device_info *di) { int msf = cmd[0] == 0xb9; int start = msf ? msf2lsn (rl (cmd + 2) & 0x00ffffff) : rl (cmd + 2); int len = rl (cmd + 5) & 0x00ffffff; if (msf) { int end = msf2lsn (len); len = end - start; if (len < 0) return -1; } int subs = cmd[10] & 7; if (len == 0) return 0; return sys_command_cd_rawread (unitnum, data, start, len, 0, (cmd[1] >> 2) & 7, cmd[9], subs); } static int scsi_emulate (int unitnum, uae_u8 *cmdbuf, int scsi_cmd_len, uae_u8 *scsi_data, int *data_len, uae_u8 *r, int *reply_len, uae_u8 *s, int *sense_len) { uae_u64 len, offset; int lr = 0, ls = 0; int scsi_len = -1; int status = 0; struct device_info di; uae_u8 cmd = cmdbuf[0]; *reply_len = *sense_len = 0; memset (r, 0, 256); memset (s, 0, 256); sys_command_info (unitnum, &di, 1); if (cmdbuf[0] == 0) { /* TEST UNIT READY */ if (nodisk (&di)) goto nodisk; scsi_len = 0; goto end; } if (log_scsiemu) write_log (_T("SCSIEMU %d: %02X.%02X.%02X.%02X.%02X.%02X.%02X.%02X.%02X.%02X.%02X.%02X CMDLEN=%d DATA=%08X LEN=%d\n"), unitnum, cmdbuf[0], cmdbuf[1], cmdbuf[2], cmdbuf[3], cmdbuf[4], cmdbuf[5], cmdbuf[6], cmdbuf[7], cmdbuf[8], cmdbuf[9], cmdbuf[10], cmdbuf[11], scsi_cmd_len, scsi_data, *data_len); switch (cmdbuf[0]) { case 0x12: /* INQUIRY */ { if ((cmdbuf[1] & 1) || cmdbuf[2] != 0) goto err; len = cmdbuf[4]; if (cmdbuf[1] >> 5) goto err; r[0] = 5; // CDROM r[1] |= 0x80; // removable r[2] = 2; /* supports SCSI-2 */ r[3] = 2; /* response data format */ r[4] = 32; /* additional length */ r[7] = 0x20; /* 16 bit bus */ scsi_len = lr = len < 36 ? (uae_u32)len : 36; r[2] = 2; r[3] = 2; char *s = ua (di.vendorid); memcpy (r + 8, s, strlen (s)); xfree (s); s = ua (di.productid); memcpy (r + 16, s, strlen (s)); xfree (s); s = ua (di.revision); memcpy (r + 32, s, strlen (s)); xfree (s); for (int i = 8; i < 36; i++) { if (r[i] == 0) r[i] = 32; } } break; case 0xbe: // READ CD case 0xb9: // READ CD MSF if (nodisk (&di)) goto nodisk; scsi_len = scsi_read_cd (unitnum, cmdbuf, scsi_data, &di); if (scsi_len == -2) goto notdatatrack; if (scsi_len == -1) goto errreq; break; case 0x55: // MODE SELECT(10) case 0x15: // MODE SELECT(6) { uae_u8 *p; bool mode10 = cmdbuf[0] == 0x55; p = scsi_data + 4; if (mode10) p += 4; int pcode = p[0] & 0x3f; if (pcode == 14) { // CD audio control uae_u16 vol_left = (p[9] << 7) | (p[9] >> 1); uae_u16 vol_right = (p[11] << 7) | (p[11] >> 1); sys_command_cd_volume (unitnum, vol_left, vol_right); scsi_len = 0; } else { if (log_scsiemu) write_log (_T("MODE SELECT PC=%d not supported\n"), pcode); goto errreq; } } break; case 0x5a: // MODE SENSE(10) case 0x1a: /* MODE SENSE(6) */ { uae_u8 *p; bool pcodeloop = false; bool sense10 = cmdbuf[0] == 0x5a; int psize, totalsize, bdsize; int pc = cmdbuf[2] >> 6; int pcode = cmdbuf[2] & 0x3f; int dbd = cmdbuf[1] & 8; if (cmdbuf[0] == 0x5a) dbd = 1; if (log_scsiemu) write_log (_T("MODE SENSE PC=%d CODE=%d DBD=%d\n"), pc, pcode, dbd); p = r; if (sense10) { totalsize = 8 - 2; p[2] = 0; p[3] = 0; p[4] = 0; p[5] = 0; p[6] = 0; p[7] = 0; p += 8; } else { totalsize = 4 - 1; p[1] = 0; p[2] = 0; p[3] = 0; p += 4; } bdsize = 0; if (!dbd) { if (nodisk (&di)) goto nodisk; uae_u32 blocks = di.sectorspertrack * di.cylinders * di.trackspercylinder; bdsize = 8; wl(p + 0, blocks); wl(p + 4, di.bytespersector); p += 8; } if (pcode == 0x3f) { pcode = 1; // page = 0 must be last pcodeloop = true; } for (;;) { psize = 0; if (pcode == 0) { p[0] = 0; p[1] = 0; p[2] = 0x20; p[3] = 0; psize = 4; } else if (pcode == 3) { if (nodisk (&di)) goto nodisk; p[0] = 3; p[1] = 24; p[3] = 1; p[10] = di.trackspercylinder >> 8; p[11] = di.trackspercylinder; p[12] = di.bytespersector >> 8; p[13] = di.bytespersector; p[15] = 1; // interleave p[20] = 0x80; psize = p[1]; } else if (pcode == 4) { if (nodisk (&di)) goto nodisk; p[0] = 4; wl(p + 1, di.cylinders); p[1] = 24; p[5] = 1; wl(p + 13, di.cylinders); ww(p + 20, 0); psize = p[1]; } else if (pcode == 14) { // CD audio control uae_u32 vol = sys_command_cd_volume (unitnum, 0xffff, 0xffff); p[0] = 0x0e; p[1] = 0x0e; p[2] = 1; p[3] = 4; p[6] = 0; p[7] = 75; p[8] = 1; p[9] = pc == 0 ? (vol >> 7) & 0xff : 0xff; p[10] = 2; p[11] = pc == 0 ? (vol >> (16 + 7)) & 0xff : 0xff; psize = p[1]; } else { if (!pcodeloop) goto err; } totalsize += psize; p += psize; if (!pcodeloop) break; if (pcode == 0) break; pcode++; if (pcode == 0x3f) pcode = 0; } if (sense10) { totalsize += bdsize; r[6] = bdsize >> 8; r[7] = bdsize & 0xff; r[0] = totalsize >> 8; r[1] = totalsize & 0xff; } else { totalsize += bdsize; r[3] = bdsize & 0xff; r[0] = totalsize & 0xff; } scsi_len = lr = totalsize + 1; } break; case 0x01: /* REZERO UNIT */ scsi_len = 0; break; case 0x1d: /* SEND DIAGNOSTICS */ scsi_len = 0; break; case 0x25: /* READ_CAPACITY */ { int pmi = cmdbuf[8] & 1; uae_u32 lba = (cmdbuf[2] << 24) | (cmdbuf[3] << 16) | (cmdbuf[4] << 8) | cmdbuf[5]; int cyl, cylsec, head, tracksec; if (nodisk (&di)) goto nodisk; uae_u32 blocks = di.sectorspertrack * di.cylinders * di.trackspercylinder; cyl = di.cylinders; head = 1; cylsec = tracksec = di.trackspercylinder; if (pmi == 0 && lba != 0) goto errreq; if (pmi) { lba += tracksec * head; lba /= tracksec * head; lba *= tracksec * head; if (lba > blocks) lba = blocks; blocks = lba; } wl (r, blocks); wl (r + 4, di.bytespersector); scsi_len = lr = 8; } break; case 0x08: /* READ (6) */ { if (nodisk (&di)) goto nodisk; stopplay (unitnum); offset = ((cmdbuf[1] & 31) << 16) | (cmdbuf[2] << 8) | cmdbuf[3]; struct cd_toc *t = gettoc (&di.toc, offset); if ((t->control & 0x0c) == 0x04) { len = cmdbuf[4]; if (!len) len = 256; scsi_len = (uae_u32)cmd_readx (unitnum, scsi_data, offset, len) * di.bytespersector;; } else { goto notdatatrack; } } break; case 0x0a: /* WRITE (6) */ goto readprot; case 0x28: /* READ (10) */ { if (nodisk (&di)) goto nodisk; stopplay (unitnum); offset = rl (cmdbuf + 2); struct cd_toc *t = gettoc (&di.toc, offset); if ((t->control & 0x0c) == 0x04) { len = rl (cmdbuf + 7 - 2) & 0xffff; scsi_len = cmd_readx (unitnum, scsi_data, offset, len) * di.bytespersector; } else { goto notdatatrack; } } break; case 0x2a: /* WRITE (10) */ goto readprot; case 0xa8: /* READ (12) */ { if (nodisk (&di)) goto nodisk; stopplay (unitnum); offset = rl (cmdbuf + 2); struct cd_toc *t = gettoc (&di.toc, offset); if ((t->control & 0x0c) == 0x04) { len = rl (cmdbuf + 6); scsi_len = (uae_u32)cmd_readx (unitnum, scsi_data, offset, len) * di.bytespersector;; } else { goto notdatatrack; } } break; case 0xaa: /* WRITE (12) */ goto readprot; case 0x43: // READ TOC { if (nodisk (&di)) goto nodisk; uae_u8 *p = scsi_data; int strack = cmdbuf[6]; int msf = cmdbuf[1] & 2; int format = cmdbuf[2] & 7; if (format >= 3) goto errreq; int maxlen = (cmdbuf[7] << 8) | cmdbuf[8]; struct cd_toc_head ttoc; if (!sys_command_cd_toc (unitnum, &ttoc)) goto readerr; struct cd_toc_head *toc = &ttoc; if (maxlen < 4) goto errreq; if (format == 1) { p[0] = 0; p[1] = 2 + 8; p[2] = 1; p[3] = 1; p[4] = 0; p[5] = (toc->toc[0].adr << 4) | toc->toc[0].control; p[6] = toc->first_track; p[7] = 0; if (msf) wl (p + 8, lsn2msf (toc->toc[0].address)); else wl (p + 8 , toc->toc[0].address); scsi_len = 12; } else if (format == 2 || format == 0) { if (format == 2 && !msf) goto errreq; if (strack == 0) strack = toc->first_track; if (format == 0 && strack >= 100 && strack != 0xaa) goto errreq; uae_u8 *p2 = p + 4; p[2] = 0; p[3] = 0; maxlen -= 4; if (format == 2) { if (!addtocentry (&p2, &maxlen, 0xa0, -1, msf, p, toc)) goto errreq; if (!addtocentry (&p2, &maxlen, 0xa1, -1, msf, p, toc)) goto errreq; if (!addtocentry (&p2, &maxlen, 0xa2, -1, msf, p, toc)) goto errreq; } while (strack < 100) { if (!addtocentry (&p2, &maxlen, strack, -1, msf, p, toc)) goto errreq; strack++; } if (!addtocentry (&p2, &maxlen, 0xa2, 0xaa, msf, p, toc)) goto errreq; int tlen = p2 - (p + 2); p[0] = tlen >> 8; p[1] = tlen >> 0; scsi_len = tlen + 2 + 4; } } break; case 0x42: // READ SUB-CHANNEL { int msf = cmdbuf[1] & 2; int subq = cmdbuf[2] & 0x40; int format = cmdbuf[3]; int track = cmdbuf[6]; int len = rw (cmdbuf + 7); uae_u8 buf[SUBQ_SIZE] = { 0 }; if (nodisk (&di)) goto nodisk; sys_command_cd_qcode (unitnum, buf); if (len < 4) goto errreq; scsi_len = 4; scsi_data[0] = 0; scsi_data[1] = buf[1]; if (subq && format == 1) { if (len < 4 + 12) goto errreq; scsi_data[2] = 0; scsi_data[3] = 12; scsi_len += 12; scsi_data[4] = 1; scsi_data[5] = (buf[4 + 0] << 4) | (buf[4 + 0] >> 4); scsi_data[6] = frombcd (buf[4 + 1]); // track scsi_data[7] = frombcd (buf[4 + 2]); // index int reladdr = fromlongbcd (&buf[4 + 3]); int absaddr = fromlongbcd (&buf[4 + 7]); if (!msf) { reladdr = msf2lsn (reladdr); absaddr = msf2lsn (absaddr); } wl (scsi_data + 8, absaddr); wl (scsi_data + 12, reladdr); } else { scsi_data[2] = 0; scsi_data[3] = 0; } } break; case 0x1b: // START/STOP sys_command_cd_stop (unitnum); scsiemudrv (unitnum, cmdbuf); scsi_len = 0; break; case 0x1e: // PREVENT/ALLOW MEDIA REMOVAL // do nothing scsi_len = 0; break; case 0x4e: // STOP PLAY/SCAN if (nodisk (&di)) goto nodisk; sys_command_cd_stop (unitnum); scsi_len = 0; break; case 0xba: // SCAN { if (nodisk (&di)) goto nodisk; struct cd_toc_head ttoc; if (!sys_command_cd_toc (unitnum, &ttoc)) goto readerr; struct cd_toc_head *toc = &ttoc; int scan = (cmdbuf[1] & 0x10) ? -1 : 1; int start = rl (cmdbuf + 1) & 0x00ffffff; int end = scan > 0 ? toc->lastaddress : toc->toc[toc->first_track_offset].paddress; int type = cmdbuf[9] >> 6; if (type == 1) start = lsn2msf (start); if (type == 3) goto errreq; if (type == 2) { if (toc->first_track_offset + start >= toc->last_track_offset) goto errreq; start = toc->toc[toc->first_track_offset + start].paddress; } sys_command_cd_pause (unitnum, 0); sys_command_cd_play (unitnum, start, end, scan); scsi_len = 0; } break; case 0x48: // PLAY AUDIO TRACK/INDEX { if (nodisk (&di)) goto nodisk; int strack = cmdbuf[4]; int etrack = cmdbuf[7]; struct cd_toc_head ttoc; if (!sys_command_cd_toc (unitnum, &ttoc)) goto readerr; struct cd_toc_head *toc = &ttoc; if (strack < toc->first_track || strack > toc->last_track || etrack < toc->first_track || etrack > toc->last_track || strack > etrack) goto errreq; int start = toc->toc[toc->first_track_offset + strack - 1].paddress; int end = etrack == toc->last_track ? toc->lastaddress : toc->toc[toc->first_track_offset + etrack - 1 + 1].paddress; sys_command_cd_pause (unitnum, 0); if (!sys_command_cd_play (unitnum, start, end, 0)) goto notdatatrack; scsi_len = 0; } break; case 0x49: // PLAY AUDIO TRACK RELATIVE (10) case 0xa9: // PLAY AUDIO TRACK RELATIVE (12) { if (nodisk (&di)) goto nodisk; int len = cmd == 0xa9 ? rl (cmdbuf + 6) : rw (cmdbuf + 7); int track = cmd == 0xa9 ? cmdbuf[10] : cmdbuf[6]; if (track < di.toc.first_track || track > di.toc.last_track) goto errreq; int start = di.toc.toc[di.toc.first_track_offset + track - 1].paddress; int rel = rl (cmdbuf + 2); start += rel; int end = start + len; if (end > di.toc.lastaddress) end = di.toc.lastaddress; if (len > 0) { sys_command_cd_pause (unitnum, 0); if (!sys_command_cd_play (unitnum, start, start + len, 0)) goto notdatatrack; } scsi_len = 0; } break; case 0x47: // PLAY AUDIO MSF { if (nodisk (&di)) goto nodisk; int start = rl (cmdbuf + 2) & 0x00ffffff; if (start == 0x00ffffff) { uae_u8 buf[SUBQ_SIZE] = { 0 }; sys_command_cd_qcode (unitnum, buf); start = fromlongbcd (buf + 4 + 7); } int end = msf2lsn (rl (cmdbuf + 5) & 0x00ffffff); if (end > di.toc.lastaddress) end = di.toc.lastaddress; start = msf2lsn (start); if (start > end) goto errreq; if (start < end) sys_command_cd_pause (unitnum, 0); if (!sys_command_cd_play (unitnum, start, end, 0)) goto notdatatrack; scsi_len = 0; } break; case 0x45: // PLAY AUDIO (10) case 0xa5: // PLAY AUDIO (12) { if (nodisk (&di)) goto nodisk; int start = rl (cmdbuf + 2); int len; if (cmd == 0xa5) len = rl (cmdbuf + 6); else len = rw (cmdbuf + 7); if (len > 0) { if (start == -1) { uae_u8 buf[SUBQ_SIZE] = { 0 }; sys_command_cd_qcode (unitnum, buf); start = msf2lsn (fromlongbcd (buf + 4 + 7)); } int end = start + len; if (end > di.toc.lastaddress) end = di.toc.lastaddress; sys_command_cd_pause (unitnum, 0); if (!sys_command_cd_play (unitnum, start, end, 0)) goto notdatatrack; } scsi_len = 0; } break; case 0xbc: // PLAY CD { if (nodisk (&di)) goto nodisk; int start = -1; int end = -1; if (cmdbuf[1] & 2) { start = msf2lsn (rl (cmdbuf + 2) & 0x00ffffff); end = msf2lsn (rl (cmdbuf + 5) & 0x00ffffff); } else { start = rl (cmdbuf + 2); end = start + rl (cmdbuf + 6); } if (end > di.toc.lastaddress) end = di.toc.lastaddress; if (start > end) goto errreq; if (start < end) { sys_command_cd_pause (unitnum, 0); if (!sys_command_cd_play (unitnum, start, end, 0)) goto notdatatrack; } } break; case 0x4b: // PAUSE/RESUME { if (nodisk (&di)) goto nodisk; uae_u8 buf[SUBQ_SIZE] = { 0 }; int resume = cmdbuf[8] & 1; sys_command_cd_qcode (unitnum, buf); if (buf[1] != AUDIO_STATUS_IN_PROGRESS && buf[1] != AUDIO_STATUS_PAUSED) goto errreq; sys_command_cd_pause (unitnum, resume ? 0 : 1); scsi_len = 0; } break; readprot: status = 2; /* CHECK CONDITION */ s[0] = 0x70; s[2] = 7; /* DATA PROTECT */ s[12] = 0x27; /* WRITE PROTECTED */ ls = 0x12; break; nodisk: status = 2; /* CHECK CONDITION */ s[0] = 0x70; s[2] = 2; /* NOT READY */ s[12] = 0x3A; /* MEDIUM NOT PRESENT */ ls = 0x12; break; readerr: status = 2; /* CHECK CONDITION */ s[0] = 0x70; s[2] = 2; /* NOT READY */ s[12] = 0x11; /* UNRECOVERED READ ERROR */ ls = 0x12; break; notdatatrack: status = 2; s[0] = 0x70; s[2] = 5; s[12] = 0x64; /* ILLEGAL MODE FOR THIS TRACK */ ls = 0x12; break; default: err: write_log (_T("CDEMU: unsupported scsi command 0x%02X\n"), cmdbuf[0]); errreq: lr = -1; status = 2; /* CHECK CONDITION */ s[0] = 0x70; s[2] = 5; /* ILLEGAL REQUEST */ s[12] = 0x24; /* ILLEGAL FIELD IN CDB */ ls = 0x12; break; } end: *data_len = scsi_len; *reply_len = lr; *sense_len = ls; if (ls) { //s[0] |= 0x80; s[7] = ls - 7; // additional sense length } if (cmdbuf[0] && log_scsiemu) write_log (_T("-> DATAOUT=%d ST=%d SENSELEN=%d\n"), scsi_len, status, ls); return status; } static int execscsicmd_direct (int unitnum, struct amigascsi *as) { int io_error = 0; uae_u8 *scsi_datap, *scsi_datap_org; uae_u32 scsi_cmd_len_orig = as->cmd_len; uae_u8 cmd[16] = { 0 }; uae_u8 replydata[256]; int datalen = as->len; int senselen = as->sense_len; int replylen = 0; memcpy (cmd, as->cmd, as->cmd_len); scsi_datap = scsi_datap_org = as->len ? as->data : 0; if (as->sense_len > 32) as->sense_len = 32; as->status = scsi_emulate (unitnum, cmd, as->cmd_len, scsi_datap, &datalen, replydata, &replylen, as->sensedata, &senselen); as->cmdactual = as->status != 0 ? 0 : as->cmd_len; /* fake scsi_CmdActual */ if (as->status) { io_error = IOERR_BadStatus; as->sactual = senselen; as->actual = 0; /* scsi_Actual */ } else { int i; if (replylen > 0) { for (i = 0; i < replylen; i++) scsi_datap[i] = replydata[i]; datalen = replylen; } for (i = 0; i < as->sense_len; i++) as->sensedata[i] = 0; if (datalen < 0) { io_error = IOERR_NotSpecified; as->actual = 0; /* scsi_Actual */ } else { as->len = datalen; io_error = 0; as->actual = as->len; /* scsi_Actual */ } } return io_error; } int sys_command_scsi_direct_native (int unitnum, struct amigascsi *as) { if (scsiemu[unitnum]) { return execscsicmd_direct (unitnum, as); } else { if (!device_func[unitnum]->exec_direct) return -1; } int ret = device_func[unitnum]->exec_direct (unitnum, as); if (!ret && device_func[unitnum]->isatapi(unitnum)) scsi_atapi_fixup_inquiry (as); return ret; } int sys_command_scsi_direct (int unitnum, uaecptr acmd) { int ret, i; struct amigascsi as = { 0 }; uaecptr ap; addrbank *bank; ap = get_long (acmd + 0); as.len = get_long (acmd + 4); bank = &get_mem_bank (ap); if (!bank || !bank->check(ap, as.len)) return IOERR_BADADDRESS; as.data = bank->xlateaddr (ap); ap = get_long (acmd + 12); as.cmd_len = get_word (acmd + 16); if (as.cmd_len > sizeof as.cmd) return IOERR_BADLENGTH; for (i = 0; i < as.cmd_len; i++) as.cmd[i] = get_byte (ap++); while (i < sizeof as.cmd) as.cmd[i++] = 0; as.flags = get_byte (acmd + 20); as.sense_len = get_word (acmd + 26); ret = sys_command_scsi_direct_native (unitnum, &as); put_long (acmd + 8, as.actual); put_word (acmd + 18, as.cmdactual); put_byte (acmd + 21, as.status); put_word (acmd + 28, as.sactual); if (as.flags & (2 | 4)) { // autosense ap = get_long (acmd + 22); for (i = 0; i < as.sactual && i < as.sense_len; i++) put_byte (ap + i, as.sensedata[i]); } return ret; } #ifdef SAVESTATE uae_u8 *save_cd (int num, int *len) { uae_u8 *dstbak, *dst; memset(play_qcode[num], 0, SUBQ_SIZE); if (!currprefs.cdslots[num].inuse || num >= MAX_TOTAL_SCSI_DEVICES) return NULL; if (!currprefs.cs_cd32cd && !currprefs.cs_cdtvcd && !currprefs.scsi) return NULL; dstbak = dst = xmalloc (uae_u8, 4 + 256 + 4 + 4); save_u32 (4 | 8); save_path (currprefs.cdslots[num].name, SAVESTATE_PATH_CD); save_u32 (currprefs.cdslots[num].type); save_u32 (0); save_u32 (0); sys_command_cd_qcode (num, play_qcode[num]); for (int i = 0; i < SUBQ_SIZE; i++) save_u8 (play_qcode[num][i]); save_u32 (play_end_pos[num]); *len = dst - dstbak; return dstbak; } uae_u8 *restore_cd (int num, uae_u8 *src) { uae_u32 flags; TCHAR *s; if (num >= MAX_TOTAL_SCSI_DEVICES) return NULL; flags = restore_u32 (); s = restore_path (SAVESTATE_PATH_CD); int type = restore_u32 (); restore_u32 (); if (flags & 4) { if (currprefs.cdslots[num].name[0] == 0 || zfile_exists (s)) { _tcscpy (changed_prefs.cdslots[num].name, s); _tcscpy (currprefs.cdslots[num].name, s); } changed_prefs.cdslots[num].type = currprefs.cdslots[num].type = type; } if (flags & 8) { restore_u32 (); for (int i = 0; i < SUBQ_SIZE; i++) play_qcode[num][i] = restore_u8 (); play_end_pos[num] = restore_u32 (); } return src; } #endif fs-uae-2.2.3+dfsg/src/audio.cpp0000644000175000017500000015347012162366654016462 0ustar glaubitzglaubitz/* * UAE - The Un*x Amiga Emulator * * Paula audio emulation * * Copyright 1995, 1996, 1997 Bernd Schmidt * Copyright 1996 Marcus Sundberg * Copyright 1996 Manfred Thole * Copyright 2006 Toni Wilen * * new filter algorithm and anti&sinc interpolators by Antti S. Lankila * */ #include "sysconfig.h" #include "sysdeps.h" #include "options.h" #include "uae/memory.h" #include "custom.h" #include "newcpu.h" #include "autoconf.h" #include "gensound.h" #include "audio.h" #include "sounddep/sound.h" #include "events.h" #include "savestate.h" #include "driveclick.h" #include "zfile.h" #include "uae.h" #include "gui.h" #include "xwin.h" #include "debug.h" #ifdef AVIOUTPUT #include "avioutput.h" #endif #ifdef AHI #include "traps.h" #include "ahidsound.h" #include "ahidsound_new.h" #endif #include "threaddep/thread.h" #include #define MAX_EV ~0u #define DEBUG_AUDIO 0 #define DEBUG_AUDIO_HACK 0 #define DEBUG_CHANNEL_MASK 15 #define TEST_AUDIO 0 #define PERIOD_MIN 4 #define PERIOD_MIN_NONCE 60 int audio_channel_mask = 15; STATIC_INLINE bool isaudio (void) { return currprefs.produce_sound != 0; } #if DEBUG_AUDIO > 0 || DEBUG_AUDIO_HACK > 0 static bool debugchannel (int ch) { return ((1 << ch) & DEBUG_CHANNEL_MASK) != 0; } #endif STATIC_INLINE bool usehacks1 (void) { return currprefs.cpu_model >= 68020 || currprefs.m68k_speed != 0; } #if 0 STATIC_INLINE bool usehacks2 (void) { if (currprefs.cpu_cycle_exact && currprefs.cpu_model <= 68020) return false; return currprefs.cpu_model >= 68020 || currprefs.m68k_speed != 0; } #endif #define SINC_QUEUE_MAX_AGE 2048 /* Queue length 256 implies minimum emulated period of 8. This should be * sufficient for all imaginable purposes. This must be power of two. */ #define SINC_QUEUE_LENGTH 256 #include "sinctable.cpp" typedef struct { int time, output; } sinc_queue_t; struct audio_channel_data { unsigned int adk_mask; unsigned int evtime; bool dmaenstore; bool intreq2; bool dr; bool dsr; bool pbufldl; int drhpos; bool dat_written; uaecptr lc, pt; int current_sample, last_sample; int state; int per; int vol; int len, wlen; uae_u16 dat, dat2; int sample_accum, sample_accum_time; int sinc_output_state; sinc_queue_t sinc_queue[SINC_QUEUE_LENGTH]; int sinc_queue_time; int sinc_queue_head; #if TEST_AUDIO > 0 bool hisample, losample; bool have_dat; int per_original; #endif /* too fast cpu fixes */ uaecptr ptx; bool ptx_written; bool ptx_tofetch; }; static int samplecnt; #if SOUNDSTUFF > 0 static int extrasamples, outputsample, doublesample; #endif int sampleripper_enabled; struct ripped_sample { struct ripped_sample *next; uae_u8 *sample; int len, per, changed; }; static struct ripped_sample *ripped_samples; void write_wavheader (struct zfile *wavfile, uae_u32 size, uae_u32 freq) { uae_u16 tw; uae_u32 tl; int bits = 8, channels = 1; zfile_fseek (wavfile, 0, SEEK_SET); zfile_fwrite ("RIFF", 1, 4, wavfile); tl = 0; if (size) tl = size - 8; zfile_fwrite (&tl, 1, 4, wavfile); zfile_fwrite ("WAVEfmt ", 1, 8, wavfile); tl = 16; zfile_fwrite (&tl, 1, 4, wavfile); tw = 1; zfile_fwrite (&tw, 1, 2, wavfile); tw = channels; zfile_fwrite (&tw, 1, 2, wavfile); tl = freq; zfile_fwrite (&tl, 1, 4, wavfile); tl = freq * channels * bits / 8; zfile_fwrite (&tl, 1, 4, wavfile); tw = channels * bits / 8; zfile_fwrite (&tw, 1, 2, wavfile); tw = bits; zfile_fwrite (&tw, 1, 2, wavfile); zfile_fwrite ("data", 1, 4, wavfile); tl = 0; if (size) tl = size - 44; zfile_fwrite (&tl, 1, 4, wavfile); } static void convertsample (uae_u8 *sample, int len) { int i; for (i = 0; i < len; i++) sample[i] += 0x80; } static void namesplit (TCHAR *s) { int l; l = _tcslen (s) - 1; while (l >= 0) { if (s[l] == '.') s[l] = 0; if (s[l] == '\\' || s[l] == '/' || s[l] == ':' || s[l] == '?') { l++; break; } l--; } if (l > 0) memmove (s, s + l, (_tcslen (s + l) + 1) * sizeof (TCHAR)); } void audio_sampleripper (int mode) { struct ripped_sample *rs = ripped_samples; int cnt = 1; TCHAR path[MAX_DPATH], name[MAX_DPATH], filename[MAX_DPATH]; TCHAR underline[] = _T("_"); TCHAR extension[4]; struct zfile *wavfile; if (mode < 0) { while (rs) { struct ripped_sample *next = rs->next; xfree(rs); rs = next; } ripped_samples = NULL; return; } while (rs) { if (rs->changed) { rs->changed = 0; fetch_ripperpath (path, sizeof (path) / sizeof (TCHAR)); name[0] = 0; if (currprefs.floppyslots[0].dfxtype >= 0) _tcscpy (name, currprefs.floppyslots[0].df); else if (currprefs.cdslots[0].inuse) _tcscpy (name, currprefs.cdslots[0].name); if (!name[0]) underline[0] = 0; namesplit (name); _tcscpy (extension, _T("wav")); _stprintf (filename, _T("%s%s%s%03d.%s"), path, name, underline, cnt, extension); wavfile = zfile_fopen (filename, _T("wb"), 0); if (wavfile) { int freq = rs->per > 0 ? (currprefs.ntscmode ? 3579545 : 3546895 / rs->per) : 8000; write_wavheader (wavfile, 0, 0); convertsample (rs->sample, rs->len); zfile_fwrite (rs->sample, rs->len, 1, wavfile); convertsample (rs->sample, rs->len); write_wavheader (wavfile, zfile_ftell(wavfile), freq); zfile_fclose (wavfile); write_log (_T("SAMPLERIPPER: %d: %dHz %d bytes\n"), cnt, freq, rs->len); } else { write_log (_T("SAMPLERIPPER: failed to open '%s'\n"), filename); } } cnt++; rs = rs->next; } } static void do_samplerip (struct audio_channel_data *adp) { struct ripped_sample *rs = ripped_samples, *prev; int len = adp->wlen * 2; uae_u8 *smp = chipmem_xlate_indirect (adp->pt); int cnt = 0, i; if (!smp || !chipmem_check_indirect (adp->pt, len)) return; for (i = 0; i < len; i++) { if (smp[i] != 0) break; } if (i == len || len <= 2) return; prev = NULL; while(rs) { if (rs->sample) { if (len == rs->len && !memcmp (rs->sample, smp, len)) break; /* replace old identical but shorter sample */ if (len > rs->len && !memcmp (rs->sample, smp, rs->len)) { xfree (rs->sample); rs->sample = xmalloc (uae_u8, len); memcpy (rs->sample, smp, len); write_log (_T("SAMPLERIPPER: replaced sample %d (%d -> %d)\n"), cnt, rs->len, len); rs->len = len; rs->per = adp->per / CYCLE_UNIT; rs->changed = 1; audio_sampleripper (0); return; } } prev = rs; rs = rs->next; cnt++; } if (rs || cnt > 100) return; rs = xmalloc (struct ripped_sample ,1); if (prev) prev->next = rs; else ripped_samples = rs; rs->len = len; rs->per = adp->per / CYCLE_UNIT; rs->sample = xmalloc (uae_u8, len); memcpy (rs->sample, smp, len); rs->next = NULL; rs->changed = 1; write_log (_T("SAMPLERIPPER: sample added (%06X, %d bytes), total %d samples\n"), adp->pt, len, ++cnt); audio_sampleripper (0); } static struct audio_channel_data audio_channel[4]; int sound_available = 0; void (*sample_handler) (void); static void (*sample_prehandler) (unsigned long best_evtime); float sample_evtime; float scaled_sample_evtime; static unsigned long last_cycles; static float next_sample_evtime; typedef uae_s8 sample8_t; #define DO_CHANNEL_1(v, c) do { (v) *= audio_channel[c].vol; } while (0) #define SBASEVAL16(logn) ((logn) == 1 ? SOUND16_BASE_VAL >> 1 : SOUND16_BASE_VAL) STATIC_INLINE int FINISH_DATA (int data, int bits) { if (bits == 16) { return data; } else if (bits - 16 > 0) { data >>= bits - 16; } else { int shift = 16 - bits; data <<= shift; } return data; } static uae_u32 right_word_saved[SOUND_MAX_DELAY_BUFFER]; static uae_u32 left_word_saved[SOUND_MAX_DELAY_BUFFER]; static uae_u32 right2_word_saved[SOUND_MAX_DELAY_BUFFER]; static uae_u32 left2_word_saved[SOUND_MAX_DELAY_BUFFER]; static int saved_ptr, saved_ptr2; static int mixed_on, mixed_stereo_size, mixed_mul1, mixed_mul2; static int led_filter_forced, sound_use_filter, sound_use_filter_sinc, led_filter_on; /* denormals are very small floating point numbers that force FPUs into slow mode. All lowpass filters using floats are suspectible to denormals unless a small offset is added to avoid very small floating point numbers. */ #define DENORMAL_OFFSET (1E-10) static struct filter_state { float rc1, rc2, rc3, rc4, rc5; } sound_filter_state[4]; static float a500e_filter1_a0; static float a500e_filter2_a0; static float filter_a0; /* a500 and a1200 use the same */ enum { FILTER_NONE = 0, FILTER_MODEL_A500, FILTER_MODEL_A1200 }; /* Amiga has two separate filtering circuits per channel, a static RC filter * on A500 and the LED filter. This code emulates both. * * The Amiga filtering circuitry depends on Amiga model. Older Amigas seem * to have a 6 dB/oct RC filter with cutoff frequency such that the -6 dB * point for filter is reached at 6 kHz, while newer Amigas have no filtering. * * The LED filter is complicated, and we are modelling it with a pair of * RC filters, the other providing a highboost. The LED starts to cut * into signal somewhere around 5-6 kHz, and there's some kind of highboost * in effect above 12 kHz. Better measurements are required. * * The current filtering should be accurate to 2 dB with the filter on, * and to 1 dB with the filter off. */ static int filter (int input, struct filter_state *fs) { int o; float normal_output, led_output; input = (uae_s16)input; switch (sound_use_filter) { case FILTER_MODEL_A500: fs->rc1 = a500e_filter1_a0 * input + (1 - a500e_filter1_a0) * fs->rc1 + DENORMAL_OFFSET; fs->rc2 = a500e_filter2_a0 * fs->rc1 + (1-a500e_filter2_a0) * fs->rc2; normal_output = fs->rc2; fs->rc3 = filter_a0 * normal_output + (1 - filter_a0) * fs->rc3; fs->rc4 = filter_a0 * fs->rc3 + (1 - filter_a0) * fs->rc4; fs->rc5 = filter_a0 * fs->rc4 + (1 - filter_a0) * fs->rc5; led_output = fs->rc5; break; case FILTER_MODEL_A1200: normal_output = input; fs->rc2 = filter_a0 * normal_output + (1 - filter_a0) * fs->rc2 + DENORMAL_OFFSET; fs->rc3 = filter_a0 * fs->rc2 + (1 - filter_a0) * fs->rc3; fs->rc4 = filter_a0 * fs->rc3 + (1 - filter_a0) * fs->rc4; led_output = fs->rc4; break; case FILTER_NONE: default: return input; } if (led_filter_on) o = led_output; else o = normal_output; if (o > 32767) o = 32767; else if (o < -32768) o = -32768; return o; } /* Always put the right word before the left word. */ STATIC_INLINE void put_sound_word_right (uae_u32 w) { if (mixed_on) { right_word_saved[saved_ptr] = w; return; } PUT_SOUND_WORD_RIGHT (w); } STATIC_INLINE void put_sound_word_left (uae_u32 w) { if (mixed_on) { uae_u32 rold, lold, rnew, lnew, tmp; left_word_saved[saved_ptr] = w; lnew = w - SOUND16_BASE_VAL; rnew = right_word_saved[saved_ptr] - SOUND16_BASE_VAL; saved_ptr = (saved_ptr + 1) & mixed_stereo_size; lold = left_word_saved[saved_ptr] - SOUND16_BASE_VAL; tmp = (rnew * mixed_mul2 + lold * mixed_mul1) / MIXED_STEREO_SCALE; tmp += SOUND16_BASE_VAL; rold = right_word_saved[saved_ptr] - SOUND16_BASE_VAL; w = (lnew * mixed_mul2 + rold * mixed_mul1) / MIXED_STEREO_SCALE; PUT_SOUND_WORD_LEFT (w); PUT_SOUND_WORD_RIGHT (tmp); } else { PUT_SOUND_WORD_LEFT (w); } } STATIC_INLINE void put_sound_word_right2 (uae_u32 w) { if (mixed_on) { right2_word_saved[saved_ptr2] = w; return; } PUT_SOUND_WORD_RIGHT2 (w); } STATIC_INLINE void put_sound_word_left2 (uae_u32 w) { if (mixed_on) { uae_u32 rold, lold, rnew, lnew, tmp; left2_word_saved[saved_ptr2] = w; lnew = w - SOUND16_BASE_VAL; rnew = right2_word_saved[saved_ptr2] - SOUND16_BASE_VAL; saved_ptr2 = (saved_ptr2 + 1) & mixed_stereo_size; lold = left2_word_saved[saved_ptr2] - SOUND16_BASE_VAL; tmp = (rnew * mixed_mul2 + lold * mixed_mul1) / MIXED_STEREO_SCALE; tmp += SOUND16_BASE_VAL; rold = right2_word_saved[saved_ptr2] - SOUND16_BASE_VAL; w = (lnew * mixed_mul2 + rold * mixed_mul1) / MIXED_STEREO_SCALE; PUT_SOUND_WORD_LEFT2 (w); PUT_SOUND_WORD_RIGHT2 (tmp); } else { PUT_SOUND_WORD_LEFT2 (w); } } #define DO_CHANNEL(v, c) do { (v) &= audio_channel[c].adk_mask; data += v; } while (0); static void anti_prehandler (unsigned long best_evtime) { int i, output; struct audio_channel_data *acd; /* Handle accumulator antialiasiation */ for (i = 0; i < 4; i++) { acd = &audio_channel[i]; output = (acd->current_sample * acd->vol) & acd->adk_mask; acd->sample_accum += output * best_evtime; acd->sample_accum_time += best_evtime; } } STATIC_INLINE void samplexx_anti_handler (int *datasp) { int i; for (i = 0; i < 4; i++) { datasp[i] = audio_channel[i].sample_accum_time ? (audio_channel[i].sample_accum / audio_channel[i].sample_accum_time) : 0; audio_channel[i].sample_accum = 0; audio_channel[i].sample_accum_time = 0; } } static void sinc_prehandler (unsigned long best_evtime) { int i, output; struct audio_channel_data *acd; for (i = 0; i < 4; i++) { acd = &audio_channel[i]; int vol = acd->vol; output = (acd->current_sample * vol) & acd->adk_mask; /* if output state changes, record the state change and also * write data into sinc queue for mixing in the BLEP */ if (acd->sinc_output_state != output) { acd->sinc_queue_head = (acd->sinc_queue_head - 1) & (SINC_QUEUE_LENGTH - 1); acd->sinc_queue[acd->sinc_queue_head].time = acd->sinc_queue_time; acd->sinc_queue[acd->sinc_queue_head].output = output - acd->sinc_output_state; acd->sinc_output_state = output; } acd->sinc_queue_time += best_evtime; } } /* this interpolator performs BLEP mixing (bleps are shaped like integrated sinc * functions) with a type of BLEP that matches the filtering configuration. */ STATIC_INLINE void samplexx_sinc_handler (int *datasp) { int i, n; int const *winsinc; if (sound_use_filter_sinc) { n = (sound_use_filter_sinc == FILTER_MODEL_A500) ? 0 : 2; if (led_filter_on) n += 1; } else { n = 4; } winsinc = winsinc_integral[n]; for (i = 0; i < 4; i += 1) { int j, v; struct audio_channel_data *acd = &audio_channel[i]; /* The sum rings with harmonic components up to infinity... */ int sum = acd->sinc_output_state << 17; /* ...but we cancel them through mixing in BLEPs instead */ int offsetpos = acd->sinc_queue_head & (SINC_QUEUE_LENGTH - 1); for (j = 0; j < SINC_QUEUE_LENGTH; j += 1) { int age = acd->sinc_queue_time - acd->sinc_queue[offsetpos].time; if (age >= SINC_QUEUE_MAX_AGE || age < 0) break; sum -= winsinc[age] * acd->sinc_queue[offsetpos].output; offsetpos = (offsetpos + 1) & (SINC_QUEUE_LENGTH - 1); } v = sum >> 15; if (v > 32767) v = 32767; else if (v < -32768) v = -32768; datasp[i] = v; } } static void sample16i_sinc_handler (void) { int datas[4], data1; samplexx_sinc_handler (datas); data1 = datas[0] + datas[3] + datas[1] + datas[2]; data1 = FINISH_DATA (data1, 18); set_sound_buffers (); PUT_SOUND_WORD_MONO (data1); check_sound_buffers (); } void sample16_handler (void) { uae_u32 data0 = audio_channel[0].current_sample; uae_u32 data1 = audio_channel[1].current_sample; uae_u32 data2 = audio_channel[2].current_sample; uae_u32 data3 = audio_channel[3].current_sample; uae_u32 data; DO_CHANNEL_1 (data0, 0); DO_CHANNEL_1 (data1, 1); DO_CHANNEL_1 (data2, 2); DO_CHANNEL_1 (data3, 3); data0 &= audio_channel[0].adk_mask; data1 &= audio_channel[1].adk_mask; data2 &= audio_channel[2].adk_mask; data3 &= audio_channel[3].adk_mask; data0 += data1; data0 += data2; data0 += data3; data = SBASEVAL16(2) + data0; data = FINISH_DATA (data, 16); set_sound_buffers (); PUT_SOUND_WORD_MONO (data); check_sound_buffers (); } /* This interpolator examines sample points when Paula switches the output * voltage and computes the average of Paula's output */ static void sample16i_anti_handler (void) { int datas[4], data1; samplexx_anti_handler (datas); data1 = datas[0] + datas[3] + datas[1] + datas[2]; data1 = FINISH_DATA (data1, 16); set_sound_buffers (); PUT_SOUND_WORD_MONO (data1); check_sound_buffers (); } static void sample16i_rh_handler (void) { unsigned long delta, ratio; uae_u32 data0 = audio_channel[0].current_sample; uae_u32 data1 = audio_channel[1].current_sample; uae_u32 data2 = audio_channel[2].current_sample; uae_u32 data3 = audio_channel[3].current_sample; uae_u32 data0p = audio_channel[0].last_sample; uae_u32 data1p = audio_channel[1].last_sample; uae_u32 data2p = audio_channel[2].last_sample; uae_u32 data3p = audio_channel[3].last_sample; uae_u32 data; DO_CHANNEL_1 (data0, 0); DO_CHANNEL_1 (data1, 1); DO_CHANNEL_1 (data2, 2); DO_CHANNEL_1 (data3, 3); DO_CHANNEL_1 (data0p, 0); DO_CHANNEL_1 (data1p, 1); DO_CHANNEL_1 (data2p, 2); DO_CHANNEL_1 (data3p, 3); data0 &= audio_channel[0].adk_mask; data0p &= audio_channel[0].adk_mask; data1 &= audio_channel[1].adk_mask; data1p &= audio_channel[1].adk_mask; data2 &= audio_channel[2].adk_mask; data2p &= audio_channel[2].adk_mask; data3 &= audio_channel[3].adk_mask; data3p &= audio_channel[3].adk_mask; /* linear interpolation and summing up... */ delta = audio_channel[0].per; ratio = ((audio_channel[0].evtime % delta) << 8) / delta; data0 = (data0 * (256 - ratio) + data0p * ratio) >> 8; delta = audio_channel[1].per; ratio = ((audio_channel[1].evtime % delta) << 8) / delta; data0 += (data1 * (256 - ratio) + data1p * ratio) >> 8; delta = audio_channel[2].per; ratio = ((audio_channel[2].evtime % delta) << 8) / delta; data0 += (data2 * (256 - ratio) + data2p * ratio) >> 8; delta = audio_channel[3].per; ratio = ((audio_channel[3].evtime % delta) << 8) / delta; data0 += (data3 * (256 - ratio) + data3p * ratio) >> 8; data = SBASEVAL16(2) + data0; data = FINISH_DATA (data, 16); set_sound_buffers (); PUT_SOUND_WORD_MONO (data); check_sound_buffers (); } static void sample16i_crux_handler (void) { uae_u32 data0 = audio_channel[0].current_sample; uae_u32 data1 = audio_channel[1].current_sample; uae_u32 data2 = audio_channel[2].current_sample; uae_u32 data3 = audio_channel[3].current_sample; uae_u32 data0p = audio_channel[0].last_sample; uae_u32 data1p = audio_channel[1].last_sample; uae_u32 data2p = audio_channel[2].last_sample; uae_u32 data3p = audio_channel[3].last_sample; uae_u32 data; DO_CHANNEL_1 (data0, 0); DO_CHANNEL_1 (data1, 1); DO_CHANNEL_1 (data2, 2); DO_CHANNEL_1 (data3, 3); DO_CHANNEL_1 (data0p, 0); DO_CHANNEL_1 (data1p, 1); DO_CHANNEL_1 (data2p, 2); DO_CHANNEL_1 (data3p, 3); data0 &= audio_channel[0].adk_mask; data0p &= audio_channel[0].adk_mask; data1 &= audio_channel[1].adk_mask; data1p &= audio_channel[1].adk_mask; data2 &= audio_channel[2].adk_mask; data2p &= audio_channel[2].adk_mask; data3 &= audio_channel[3].adk_mask; data3p &= audio_channel[3].adk_mask; { struct audio_channel_data *cdp; unsigned long ratio, ratio1; #define INTERVAL (scaled_sample_evtime * 3) cdp = audio_channel + 0; ratio1 = cdp->per - cdp->evtime; ratio = (ratio1 << 12) / INTERVAL; if (cdp->evtime < scaled_sample_evtime || ratio1 >= INTERVAL) ratio = 4096; data0 = (data0 * ratio + data0p * (4096 - ratio)) >> 12; cdp = audio_channel + 1; ratio1 = cdp->per - cdp->evtime; ratio = (ratio1 << 12) / INTERVAL; if (cdp->evtime < scaled_sample_evtime || ratio1 >= INTERVAL) ratio = 4096; data1 = (data1 * ratio + data1p * (4096 - ratio)) >> 12; cdp = audio_channel + 2; ratio1 = cdp->per - cdp->evtime; ratio = (ratio1 << 12) / INTERVAL; if (cdp->evtime < scaled_sample_evtime || ratio1 >= INTERVAL) ratio = 4096; data2 = (data2 * ratio + data2p * (4096 - ratio)) >> 12; cdp = audio_channel + 3; ratio1 = cdp->per - cdp->evtime; ratio = (ratio1 << 12) / INTERVAL; if (cdp->evtime < scaled_sample_evtime || ratio1 >= INTERVAL) ratio = 4096; data3 = (data3 * ratio + data3p * (4096 - ratio)) >> 12; } data1 += data2; data0 += data3; data0 += data1; data = SBASEVAL16(2) + data0; data = FINISH_DATA (data, 16); set_sound_buffers (); PUT_SOUND_WORD_MONO (data); check_sound_buffers (); } #ifdef HAVE_STEREO_SUPPORT STATIC_INLINE void make6ch (uae_s32 d0, uae_s32 d1, uae_s32 d2, uae_s32 d3) { uae_s32 sum = d0 + d1 + d2 + d3; sum /= 8; PUT_SOUND_WORD (sum); PUT_SOUND_WORD (sum); } void sample16ss_handler (void) { uae_u32 data0 = audio_channel[0].current_sample; uae_u32 data1 = audio_channel[1].current_sample; uae_u32 data2 = audio_channel[2].current_sample; uae_u32 data3 = audio_channel[3].current_sample; DO_CHANNEL_1 (data0, 0); DO_CHANNEL_1 (data1, 1); DO_CHANNEL_1 (data2, 2); DO_CHANNEL_1 (data3, 3); data0 &= audio_channel[0].adk_mask; data1 &= audio_channel[1].adk_mask; data2 &= audio_channel[2].adk_mask; data3 &= audio_channel[3].adk_mask; data0 = FINISH_DATA (data0, 14); data1 = FINISH_DATA (data1, 14); data2 = FINISH_DATA (data2, 14); data3 = FINISH_DATA (data3, 14); set_sound_buffers (); put_sound_word_left (data0); put_sound_word_right (data1); if (currprefs.sound_stereo == SND_6CH) make6ch (data0, data1, data2, data3); put_sound_word_left2 (data3); put_sound_word_right2 (data2); check_sound_buffers (); } /* This interpolator examines sample points when Paula switches the output * voltage and computes the average of Paula's output */ void sample16ss_anti_handler (void) { int data0, data1, data2, data3; int datas[4]; samplexx_anti_handler (datas); data0 = FINISH_DATA (datas[0], 14); data1 = FINISH_DATA (datas[1], 14); data2 = FINISH_DATA (datas[2], 14); data3 = FINISH_DATA (datas[3], 14); set_sound_buffers (); put_sound_word_left (data0); put_sound_word_right (data1); if (currprefs.sound_stereo == SND_6CH) make6ch (data0, data1, data2, data3); put_sound_word_left2 (data3); put_sound_word_right2 (data2); check_sound_buffers (); } static void sample16si_anti_handler (void) { int datas[4], data1, data2; samplexx_anti_handler (datas); data1 = datas[0] + datas[3]; data2 = datas[1] + datas[2]; data1 = FINISH_DATA (data1, 15); data2 = FINISH_DATA (data2, 15); set_sound_buffers (); put_sound_word_left (data1); put_sound_word_right (data2); check_sound_buffers (); } void sample16ss_sinc_handler (void) { int data0, data1, data2, data3; int datas[4]; samplexx_sinc_handler (datas); data0 = FINISH_DATA (datas[0], 16); data1 = FINISH_DATA (datas[1], 16); data2 = FINISH_DATA (datas[2], 16); data3 = FINISH_DATA (datas[3], 16); set_sound_buffers (); put_sound_word_left (data0); put_sound_word_right (data1); if (currprefs.sound_stereo == SND_6CH) make6ch (data0, data1, data2, data3); put_sound_word_left2 (data3); put_sound_word_right2 (data2); check_sound_buffers (); } static void sample16si_sinc_handler (void) { int datas[4], data1, data2; samplexx_sinc_handler (datas); data1 = datas[0] + datas[3]; data2 = datas[1] + datas[2]; data1 = FINISH_DATA (data1, 17); data2 = FINISH_DATA (data2, 17); set_sound_buffers (); put_sound_word_left (data1); put_sound_word_right (data2); check_sound_buffers (); } void sample16s_handler (void) { uae_u32 data0 = audio_channel[0].current_sample; uae_u32 data1 = audio_channel[1].current_sample; uae_u32 data2 = audio_channel[2].current_sample; uae_u32 data3 = audio_channel[3].current_sample; DO_CHANNEL_1 (data0, 0); DO_CHANNEL_1 (data1, 1); DO_CHANNEL_1 (data2, 2); DO_CHANNEL_1 (data3, 3); data0 &= audio_channel[0].adk_mask; data1 &= audio_channel[1].adk_mask; data2 &= audio_channel[2].adk_mask; data3 &= audio_channel[3].adk_mask; data0 += data3; data1 += data2; data2 = SBASEVAL16(1) + data0; data2 = FINISH_DATA (data2, 15); data3 = SBASEVAL16(1) + data1; data3 = FINISH_DATA (data3, 15); set_sound_buffers (); put_sound_word_left (data2); put_sound_word_right (data3); check_sound_buffers (); } static void sample16si_crux_handler (void) { uae_u32 data0 = audio_channel[0].current_sample; uae_u32 data1 = audio_channel[1].current_sample; uae_u32 data2 = audio_channel[2].current_sample; uae_u32 data3 = audio_channel[3].current_sample; uae_u32 data0p = audio_channel[0].last_sample; uae_u32 data1p = audio_channel[1].last_sample; uae_u32 data2p = audio_channel[2].last_sample; uae_u32 data3p = audio_channel[3].last_sample; DO_CHANNEL_1 (data0, 0); DO_CHANNEL_1 (data1, 1); DO_CHANNEL_1 (data2, 2); DO_CHANNEL_1 (data3, 3); DO_CHANNEL_1 (data0p, 0); DO_CHANNEL_1 (data1p, 1); DO_CHANNEL_1 (data2p, 2); DO_CHANNEL_1 (data3p, 3); data0 &= audio_channel[0].adk_mask; data0p &= audio_channel[0].adk_mask; data1 &= audio_channel[1].adk_mask; data1p &= audio_channel[1].adk_mask; data2 &= audio_channel[2].adk_mask; data2p &= audio_channel[2].adk_mask; data3 &= audio_channel[3].adk_mask; data3p &= audio_channel[3].adk_mask; { struct audio_channel_data *cdp; unsigned long ratio, ratio1; #define INTERVAL (scaled_sample_evtime * 3) cdp = audio_channel + 0; ratio1 = cdp->per - cdp->evtime; ratio = (ratio1 << 12) / INTERVAL; if (cdp->evtime < scaled_sample_evtime || ratio1 >= INTERVAL) ratio = 4096; data0 = (data0 * ratio + data0p * (4096 - ratio)) >> 12; cdp = audio_channel + 1; ratio1 = cdp->per - cdp->evtime; ratio = (ratio1 << 12) / INTERVAL; if (cdp->evtime < scaled_sample_evtime || ratio1 >= INTERVAL) ratio = 4096; data1 = (data1 * ratio + data1p * (4096 - ratio)) >> 12; cdp = audio_channel + 2; ratio1 = cdp->per - cdp->evtime; ratio = (ratio1 << 12) / INTERVAL; if (cdp->evtime < scaled_sample_evtime || ratio1 >= INTERVAL) ratio = 4096; data2 = (data2 * ratio + data2p * (4096 - ratio)) >> 12; cdp = audio_channel + 3; ratio1 = cdp->per - cdp->evtime; ratio = (ratio1 << 12) / INTERVAL; if (cdp->evtime < scaled_sample_evtime || ratio1 >= INTERVAL) ratio = 4096; data3 = (data3 * ratio + data3p * (4096 - ratio)) >> 12; } data1 += data2; data0 += data3; data2 = SBASEVAL16(1) + data0; data2 = FINISH_DATA (data2, 15); data3 = SBASEVAL16(1) + data1; data3 = FINISH_DATA (data3, 15); set_sound_buffers (); put_sound_word_left (data2); put_sound_word_right (data3); check_sound_buffers (); } static void sample16si_rh_handler (void) { unsigned long delta, ratio; uae_u32 data0 = audio_channel[0].current_sample; uae_u32 data1 = audio_channel[1].current_sample; uae_u32 data2 = audio_channel[2].current_sample; uae_u32 data3 = audio_channel[3].current_sample; uae_u32 data0p = audio_channel[0].last_sample; uae_u32 data1p = audio_channel[1].last_sample; uae_u32 data2p = audio_channel[2].last_sample; uae_u32 data3p = audio_channel[3].last_sample; DO_CHANNEL_1 (data0, 0); DO_CHANNEL_1 (data1, 1); DO_CHANNEL_1 (data2, 2); DO_CHANNEL_1 (data3, 3); DO_CHANNEL_1 (data0p, 0); DO_CHANNEL_1 (data1p, 1); DO_CHANNEL_1 (data2p, 2); DO_CHANNEL_1 (data3p, 3); data0 &= audio_channel[0].adk_mask; data0p &= audio_channel[0].adk_mask; data1 &= audio_channel[1].adk_mask; data1p &= audio_channel[1].adk_mask; data2 &= audio_channel[2].adk_mask; data2p &= audio_channel[2].adk_mask; data3 &= audio_channel[3].adk_mask; data3p &= audio_channel[3].adk_mask; /* linear interpolation and summing up... */ delta = audio_channel[0].per; ratio = ((audio_channel[0].evtime % delta) << 8) / delta; data0 = (data0 * (256 - ratio) + data0p * ratio) >> 8; delta = audio_channel[1].per; ratio = ((audio_channel[1].evtime % delta) << 8) / delta; data1 = (data1 * (256 - ratio) + data1p * ratio) >> 8; delta = audio_channel[2].per; ratio = ((audio_channel[2].evtime % delta) << 8) / delta; data1 += (data2 * (256 - ratio) + data2p * ratio) >> 8; delta = audio_channel[3].per; ratio = ((audio_channel[3].evtime % delta) << 8) / delta; data0 += (data3 * (256 - ratio) + data3p * ratio) >> 8; data2 = SBASEVAL16(1) + data0; data2 = FINISH_DATA (data2, 15); data3 = SBASEVAL16(1) + data1; data3 = FINISH_DATA (data3, 15); set_sound_buffers (); put_sound_word_left (data2); put_sound_word_right (data3); check_sound_buffers (); } #else void sample16s_handler (void) { sample16_handler (); } static void sample16si_crux_handler (void) { sample16i_crux_handler (); } static void sample16si_rh_handler (void) { sample16i_rh_handler (); } #endif static int audio_work_to_do; static void zerostate (int nr) { struct audio_channel_data *cdp = audio_channel + nr; #if DEBUG_AUDIO > 0 if (debugchannel (nr)) write_log (_T("%d: ZEROSTATE\n"), nr); #endif cdp->state = 0; cdp->evtime = MAX_EV; cdp->intreq2 = 0; cdp->dmaenstore = false; #if TEST_AUDIO > 0 cdp->have_dat = false; #endif } static void schedule_audio (void) { unsigned long best = MAX_EV; int i; eventtab[ev_audio].active = 0; eventtab[ev_audio].oldcycles = get_cycles (); for (i = 0; i < 4; i++) { struct audio_channel_data *cdp = audio_channel + i; if (cdp->evtime != MAX_EV) { if (best > cdp->evtime) { best = cdp->evtime; eventtab[ev_audio].active = 1; } } } eventtab[ev_audio].evtime = get_cycles () + best; } static void audio_event_reset (void) { int i; last_cycles = get_cycles (); next_sample_evtime = scaled_sample_evtime; if (!isrestore ()) { for (i = 0; i < 4; i++) zerostate (i); } schedule_audio (); events_schedule (); samplecnt = 0; extrasamples = 0; outputsample = 1; doublesample = 0; } static void audio_deactivate (void) { if (!currprefs.sound_auto) return; gui_data.sndbuf_status = 3; gui_data.sndbuf = 0; pause_sound_buffer (); clear_sound_buffers (); audio_event_reset (); } int audio_activate (void) { int ret = 0; if (!audio_work_to_do) { restart_sound_buffer (); ret = 1; audio_event_reset (); } audio_work_to_do = 4 * maxvpos_nom * 50; return ret; } STATIC_INLINE int is_audio_active (void) { return audio_work_to_do; } uae_u16 audio_dmal (void) { uae_u16 dmal = 0; for (int nr = 0; nr < 4; nr++) { struct audio_channel_data *cdp = audio_channel + nr; if (cdp->dr) dmal |= 1 << (nr * 2); if (cdp->dsr) dmal |= 1 << (nr * 2 + 1); cdp->dr = cdp->dsr = false; } return dmal; } static int isirq (int nr) { return INTREQR () & (0x80 << nr); } static void setirq (int nr, int which) { #if DEBUG_AUDIO > 0 struct audio_channel_data *cdp = audio_channel + nr; if (debugchannel (nr) && cdp->wlen > 1) write_log (_T("SETIRQ%d (%d,%d) PC=%08X\n"), nr, which, isirq (nr) ? 1 : 0, M68K_GETPC); #endif INTREQ_0 (0x8000 | (0x80 << nr)); } static void newsample (int nr, sample8_t sample) { struct audio_channel_data *cdp = audio_channel + nr; #if DEBUG_AUDIO > 0 if (!debugchannel (nr)) sample = 0; #endif #if DEBUG_AUDIO > 2 if (debugchannel (nr)) write_log (_T("SAMPLE%d: %02x\n"), nr, sample & 0xff); #endif if (!(audio_channel_mask & (1 << nr))) sample = 0; cdp->last_sample = cdp->current_sample; cdp->current_sample = sample; } STATIC_INLINE void setdr (int nr) { struct audio_channel_data *cdp = audio_channel + nr; #if TEST_AUDIO > 0 if (debugchannel (nr) && cdp->dr) write_log (_T("%d: DR already active (STATE=%d)\n"), nr, cdp->state); #endif cdp->drhpos = current_hpos (); cdp->dr = true; if (cdp->wlen == 1) { cdp->dsr = true; #if DEBUG_AUDIO > 0 if (debugchannel (nr) && cdp->wlen > 1) write_log (_T("DSR%d PT=%08X PC=%08X\n"), nr, cdp->pt, M68K_GETPC); #endif } } static void loaddat (int nr, bool modper) { struct audio_channel_data *cdp = audio_channel + nr; int audav = adkcon & (0x01 << nr); int audap = adkcon & (0x10 << nr); if (audav || (modper && audap)) { if (nr >= 3) return; if (modper && audap) { if (cdp->dat == 0) #ifdef FSUAE // FIXME: changed PERIOD_MAX from ULONG_MAX to UINT_MAX // since cdp[1].per is int, not long. But should per // be an unsigned int?? #endif cdp[1].per = PERIOD_MAX; else if (cdp->dat > PERIOD_MIN) cdp[1].per = cdp->dat * CYCLE_UNIT; else cdp[1].per = PERIOD_MIN * CYCLE_UNIT; } else if (audav) { cdp[1].vol = cdp->dat; cdp[1].vol &= 127; if (cdp[1].vol > 64) cdp[1].vol = 64; } } else { #if TEST_AUDIO > 0 if (debugchannel (nr)) { if (cdp->hisample || cdp->losample) write_log (_T("%d: high or low sample not used\n"), nr); if (!cdp->have_dat) write_log (_T("%d: dat not updated. STATE=%d 1=%04x 2=%04x\n"), nr, cdp->state, cdp->dat, cdp->dat2); } cdp->hisample = cdp->losample = true; cdp->have_dat = false; #endif #if DEBUG_AUDIO > 2 if (debugchannel (nr)) write_log (_T("LOAD%dDAT: New:%04x, Old:%04x\n"), nr, cdp->dat, cdp->dat2); #endif cdp->dat2 = cdp->dat; } } static void loaddat (int nr) { loaddat (nr, false); } STATIC_INLINE void loadper (int nr) { struct audio_channel_data *cdp = audio_channel + nr; cdp->evtime = cdp->per; if (cdp->evtime < CYCLE_UNIT) write_log (_T("LOADPER%d bug %d\n"), nr, cdp->evtime); } static void audio_state_channel2 (int nr, bool perfin) { struct audio_channel_data *cdp = audio_channel + nr; bool chan_ena = (dmacon & DMA_MASTER) && (dmacon & (1 << nr)); bool old_dma = cdp->dmaenstore; int audav = adkcon & (0x01 << nr); int audap = adkcon & (0x10 << nr); int napnav = (!audav && !audap) || audav; int hpos = current_hpos (); cdp->dmaenstore = chan_ena; if (currprefs.produce_sound == 0) { zerostate (nr); return; } audio_activate (); if ((cdp->state == 2 || cdp->state == 3) && usehacks1 () && !chan_ena && old_dma) { // DMA switched off, state=2/3 and "too fast CPU": kill DMA instantly // or CPU timed DMA wait routines in common tracker players will lose notes #if DEBUG_AUDIO_HACK > 0 if (debugchannel (nr)) write_log (_T("%d: INSTADMAOFF\n"), nr, M68K_GETPC); #endif newsample (nr, (cdp->dat2 >> 0) & 0xff); if (napnav) setirq (nr, 91); zerostate (nr); return; } #if DEBUG_AUDIO > 0 if (debugchannel (nr) && old_dma != chan_ena) { write_log (_T("%d:DMA=%d IRQ=%d PC=%08x\n"), nr, chan_ena, isirq (nr) ? 1 : 0, M68K_GETPC); } #endif switch (cdp->state) { case 0: if (chan_ena) { cdp->evtime = MAX_EV; cdp->state = 1; cdp->dr = true; cdp->drhpos = hpos; cdp->wlen = cdp->len; cdp->ptx_written = false; /* Some programs first start short empty sample and then later switch to * real sample, we must not enable the hack in this case */ if (cdp->wlen > 2) cdp->ptx_tofetch = true; cdp->dsr = true; #if TEST_AUDIO > 0 cdp->have_dat = false; #endif #if DEBUG_AUDIO > 0 if (debugchannel (nr)) { write_log (_T("%d:0>1: LEN=%d PC=%08x\n"), nr, cdp->wlen, M68K_GETPC); } #endif } else if (cdp->dat_written && !isirq (nr)) { cdp->state = 2; setirq (nr, 0); loaddat (nr); if (usehacks1 () && cdp->per < 10 * CYCLE_UNIT) { // make sure audio.device AUDxDAT startup returns to idle state before DMA is enabled newsample (nr, (cdp->dat2 >> 0) & 0xff); zerostate (nr); } else { cdp->pbufldl = true; audio_state_channel2 (nr, false); } } else { zerostate (nr); } break; case 1: cdp->evtime = MAX_EV; if (!chan_ena) { zerostate (nr); return; } if (!cdp->dat_written) return; #if TEST_AUDIO > 0 if (debugchannel (nr) && !cdp->have_dat) write_log (_T("%d: state 1 but no have_dat\n"), nr); cdp->have_dat = false; cdp->losample = cdp->hisample = false; #endif setirq (nr, 10); setdr (nr); if (cdp->wlen != 1) cdp->wlen = (cdp->wlen - 1) & 0xffff; cdp->state = 5; if (sampleripper_enabled) do_samplerip (cdp); break; case 5: cdp->evtime = MAX_EV; if (!chan_ena) { zerostate (nr); return; } if (!cdp->dat_written) return; #if DEBUG_AUDIO > 0 if (debugchannel (nr)) write_log (_T("%d:>5: LEN=%d PT=%08X PC=%08X\n"), nr, cdp->wlen, cdp->pt, M68K_GETPC); #endif if (cdp->ptx_written) { cdp->ptx_written = 0; cdp->lc = cdp->ptx; } loaddat (nr); if (napnav) setdr (nr); cdp->state = 2; loadper (nr); cdp->pbufldl = true; cdp->intreq2 = 0; audio_state_channel2 (nr, false); break; case 2: if (cdp->pbufldl) { #if TEST_AUDIO > 0 if (debugchannel (nr) && cdp->hisample == false) write_log (_T("%d: high sample used twice\n"), nr); cdp->hisample = false; #endif newsample (nr, (cdp->dat2 >> 8) & 0xff); loadper (nr); cdp->pbufldl = false; } if (!perfin) return; if (audap) loaddat (nr, true); if (chan_ena) { if (audap) setdr (nr); if (cdp->intreq2 && audap) setirq (nr, 21); } else { if (audap) setirq (nr, 22); } cdp->pbufldl = true; cdp->state = 3; audio_state_channel2 (nr, false); break; case 3: if (cdp->pbufldl) { #if TEST_AUDIO > 0 if (debugchannel (nr) && cdp->losample == false) write_log (_T("%d: low sample used twice\n"), nr); cdp->losample = false; #endif newsample (nr, (cdp->dat2 >> 0) & 0xff); loadper (nr); cdp->pbufldl = false; } if (!perfin) return; if (chan_ena) { loaddat (nr); if (cdp->intreq2 && napnav) setirq (nr, 31); if (napnav) setdr (nr); } else { if (isirq (nr)) { #if DEBUG_AUDIO > 0 if (debugchannel (nr)) write_log (_T("%d: IDLE\n"), nr); #endif zerostate (nr); return; } loaddat (nr); if (napnav) setirq (nr, 32); } cdp->intreq2 = 0; cdp->pbufldl = true; cdp->state = 2; audio_state_channel2 (nr, false); break; } } static void audio_state_channel (int nr, bool perfin) { struct audio_channel_data *cdp = audio_channel + nr; audio_state_channel2 (nr, perfin); cdp->dat_written = false; } void audio_state_machine (void) { update_audio (); for (int nr = 0; nr < 4; nr++) { struct audio_channel_data *cdp = audio_channel + nr; audio_state_channel2 (nr, false); cdp->dat_written = false; } schedule_audio (); events_schedule (); } void audio_reset (void) { int i; struct audio_channel_data *cdp; #ifdef AHI ahi_close_sound (); free_ahi_v2 (); #endif reset_sound (); memset (sound_filter_state, 0, sizeof sound_filter_state); if (!isrestore ()) { for (i = 0; i < 4; i++) { cdp = &audio_channel[i]; memset (cdp, 0, sizeof *audio_channel); cdp->per = PERIOD_MAX - 1; cdp->vol = 0; cdp->evtime = MAX_EV; } } last_cycles = get_cycles (); next_sample_evtime = scaled_sample_evtime; schedule_audio (); events_schedule (); } static int sound_prefs_changed (void) { if (!config_changed) return 0; if (changed_prefs.produce_sound != currprefs.produce_sound || changed_prefs.win32_soundcard != currprefs.win32_soundcard || changed_prefs.sound_stereo != currprefs.sound_stereo || changed_prefs.sound_maxbsiz != currprefs.sound_maxbsiz || changed_prefs.sound_freq != currprefs.sound_freq || changed_prefs.sound_auto != currprefs.sound_auto) return 1; if (changed_prefs.sound_stereo_separation != currprefs.sound_stereo_separation || changed_prefs.sound_mixed_stereo_delay != currprefs.sound_mixed_stereo_delay || changed_prefs.sound_interpol != currprefs.sound_interpol || changed_prefs.sound_volume != currprefs.sound_volume || changed_prefs.sound_stereo_swap_paula != currprefs.sound_stereo_swap_paula || changed_prefs.sound_stereo_swap_ahi != currprefs.sound_stereo_swap_ahi || changed_prefs.sound_filter != currprefs.sound_filter || changed_prefs.sound_filter_type != currprefs.sound_filter_type) return -1; return 0; } /* This computes the 1st order low-pass filter term b0. * The a1 term is 1.0 - b0. The center frequency marks the -3 dB point. */ #ifndef M_PI #define M_PI 3.14159265358979323846 #endif static float rc_calculate_a0 (int sample_rate, int cutoff_freq) { float omega; /* The BLT correction formula below blows up if the cutoff is above nyquist. */ if (cutoff_freq >= sample_rate / 2) return 1.0; omega = 2 * M_PI * cutoff_freq / sample_rate; /* Compensate for the bilinear transformation. This allows us to specify the * stop frequency more exactly, but the filter becomes less steep further * from stopband. */ omega = tan (omega / 2) * 2; return 1 / (1 + 1 / omega); } void check_prefs_changed_audio (void) { int ch; if (sound_available) { ch = sound_prefs_changed (); if (ch > 0) { #ifdef AVIOUTPUT AVIOutput_Restart (); #endif clear_sound_buffers (); } if (ch) { set_audio (); audio_activate (); } } #ifdef DRIVESOUND driveclick_check_prefs (); #endif } void set_audio (void) { int old_mixed_size = mixed_stereo_size; int sep, delay; int ch; ch = sound_prefs_changed (); if (ch >= 0) close_sound (); currprefs.produce_sound = changed_prefs.produce_sound; currprefs.win32_soundcard = changed_prefs.win32_soundcard; currprefs.sound_stereo = changed_prefs.sound_stereo; currprefs.sound_auto = changed_prefs.sound_auto; currprefs.sound_freq = changed_prefs.sound_freq; currprefs.sound_maxbsiz = changed_prefs.sound_maxbsiz; currprefs.sound_stereo_separation = changed_prefs.sound_stereo_separation; currprefs.sound_mixed_stereo_delay = changed_prefs.sound_mixed_stereo_delay; currprefs.sound_interpol = changed_prefs.sound_interpol; currprefs.sound_filter = changed_prefs.sound_filter; currprefs.sound_filter_type = changed_prefs.sound_filter_type; currprefs.sound_volume = changed_prefs.sound_volume; currprefs.sound_stereo_swap_paula = changed_prefs.sound_stereo_swap_paula; currprefs.sound_stereo_swap_ahi = changed_prefs.sound_stereo_swap_ahi; if (ch >= 0) { if (currprefs.produce_sound >= 2) { if (!init_audio ()) { if (! sound_available) { write_log (_T("Sound is not supported.\n")); } else { write_log (_T("Sorry, can't initialize sound.\n")); currprefs.produce_sound = 1; /* So we don't do this every frame */ changed_prefs.produce_sound = 1; } } } next_sample_evtime = scaled_sample_evtime; last_cycles = get_cycles (); compute_vsynctime (); } else { sound_volume (0); } sep = (currprefs.sound_stereo_separation = changed_prefs.sound_stereo_separation) * 3 / 2; if (sep >= 15) sep = 16; delay = currprefs.sound_mixed_stereo_delay = changed_prefs.sound_mixed_stereo_delay; mixed_mul1 = MIXED_STEREO_SCALE / 2 - sep; mixed_mul2 = MIXED_STEREO_SCALE / 2 + sep; mixed_stereo_size = delay > 0 ? (1 << delay) - 1 : 0; mixed_on = sep < MIXED_STEREO_MAX || mixed_stereo_size > 0; if (mixed_on && old_mixed_size != mixed_stereo_size) { saved_ptr = 0; memset (right_word_saved, 0, sizeof right_word_saved); } led_filter_forced = -1; // always off sound_use_filter = sound_use_filter_sinc = 0; if (currprefs.sound_filter) { if (currprefs.sound_filter == FILTER_SOUND_ON) led_filter_forced = 1; if (currprefs.sound_filter == FILTER_SOUND_EMUL) led_filter_forced = 0; if (currprefs.sound_filter_type == FILTER_SOUND_TYPE_A500) sound_use_filter = FILTER_MODEL_A500; else if (currprefs.sound_filter_type == FILTER_SOUND_TYPE_A1200) sound_use_filter = FILTER_MODEL_A1200; } a500e_filter1_a0 = rc_calculate_a0 (currprefs.sound_freq, 6200); a500e_filter2_a0 = rc_calculate_a0 (currprefs.sound_freq, 20000); filter_a0 = rc_calculate_a0 (currprefs.sound_freq, 7000); led_filter_audio (); /* Select the right interpolation method. */ if (sample_handler == sample16_handler || sample_handler == sample16i_crux_handler || sample_handler == sample16i_rh_handler || sample_handler == sample16i_sinc_handler || sample_handler == sample16i_anti_handler) { sample_handler = (currprefs.sound_interpol == 0 ? sample16_handler : currprefs.sound_interpol == 3 ? sample16i_rh_handler : currprefs.sound_interpol == 4 ? sample16i_crux_handler : currprefs.sound_interpol == 2 ? sample16i_sinc_handler : sample16i_anti_handler); } else if (sample_handler == sample16s_handler || sample_handler == sample16si_crux_handler || sample_handler == sample16si_rh_handler || sample_handler == sample16si_sinc_handler || sample_handler == sample16si_anti_handler) { sample_handler = (currprefs.sound_interpol == 0 ? sample16s_handler : currprefs.sound_interpol == 3 ? sample16si_rh_handler : currprefs.sound_interpol == 4 ? sample16si_crux_handler : currprefs.sound_interpol == 2 ? sample16si_sinc_handler : sample16si_anti_handler); } else if (sample_handler == sample16ss_handler || sample_handler == sample16ss_sinc_handler || sample_handler == sample16ss_anti_handler) { sample_handler = (currprefs.sound_interpol == 0 ? sample16ss_handler : currprefs.sound_interpol == 3 ? sample16ss_handler : currprefs.sound_interpol == 4 ? sample16ss_handler : currprefs.sound_interpol == 2 ? sample16ss_sinc_handler : sample16ss_anti_handler); } sample_prehandler = NULL; if (sample_handler == sample16si_sinc_handler || sample_handler == sample16i_sinc_handler || sample_handler == sample16ss_sinc_handler) { sample_prehandler = sinc_prehandler; sound_use_filter_sinc = sound_use_filter; sound_use_filter = 0; } else if (sample_handler == sample16si_anti_handler || sample_handler == sample16i_anti_handler || sample_handler == sample16ss_anti_handler) { sample_prehandler = anti_prehandler; } if (currprefs.produce_sound == 0) { eventtab[ev_audio].active = 0; events_schedule (); } else { audio_activate (); schedule_audio (); events_schedule (); } config_changed = 1; } void update_audio (void) { unsigned long int n_cycles = 0; #if SOUNDSTUFF > 1 static int samplecounter; #endif if (!isaudio ()) goto end; if (isrestore ()) goto end; if (!is_audio_active ()) goto end; n_cycles = get_cycles () - last_cycles; while (n_cycles > 0) { unsigned long int best_evtime = n_cycles + 1; unsigned long rounded; int i; for (i = 0; i < 4; i++) { if (audio_channel[i].evtime != MAX_EV && best_evtime > audio_channel[i].evtime) best_evtime = audio_channel[i].evtime; } /* next_sample_evtime >= 0 so floor() behaves as expected */ rounded = floorf (next_sample_evtime); if ((next_sample_evtime - rounded) >= 0.5) rounded++; if (currprefs.produce_sound > 1 && best_evtime > rounded) best_evtime = rounded; if (best_evtime > n_cycles) best_evtime = n_cycles; /* Decrease time-to-wait counters */ next_sample_evtime -= best_evtime; if (currprefs.produce_sound > 1) { if (sample_prehandler) sample_prehandler (best_evtime / CYCLE_UNIT); } for (i = 0; i < 4; i++) { if (audio_channel[i].evtime != MAX_EV) audio_channel[i].evtime -= best_evtime; } n_cycles -= best_evtime; if (currprefs.produce_sound > 1) { /* Test if new sample needs to be outputted */ if (rounded == best_evtime) { /* Before the following addition, next_sample_evtime is in range [-0.5, 0.5) */ next_sample_evtime += scaled_sample_evtime - extrasamples * 15; #if SOUNDSTUFF > 1 doublesample = 0; if (--samplecounter <= 0) { samplecounter = currprefs.sound_freq / 1000; if (extrasamples > 0) { outputsample = 1; doublesample = 1; extrasamples--; } else if (extrasamples < 0) { outputsample = 0; doublesample = 0; extrasamples++; } } #endif (*sample_handler) (); #if SOUNDSTUFF > 1 if (outputsample == 0) outputsample = -1; else if (outputsample < 0) outputsample = 1; #endif } } for (i = 0; i < 4; i++) { if (audio_channel[i].evtime == 0) { audio_state_channel (i, true); if (audio_channel[i].evtime == 0) { write_log (_T("evtime==0 sound bug channel %d\n"), i); audio_channel[i].evtime = MAX_EV; } } } } end: last_cycles = get_cycles () - n_cycles; } void audio_evhandler (void) { update_audio (); schedule_audio (); } void audio_hsync (void) { if (!isaudio ()) return; if (audio_work_to_do > 0 && currprefs.sound_auto) { audio_work_to_do--; if (audio_work_to_do == 0) audio_deactivate (); } update_audio (); } void AUDxDAT (int nr, uae_u16 v, uaecptr addr) { struct audio_channel_data *cdp = audio_channel + nr; int chan_ena = (dmacon & DMA_MASTER) && (dmacon & (1 << nr)); #if DEBUG_AUDIO > 0 if (debugchannel (nr) && (DEBUG_AUDIO > 1 || (!chan_ena || addr == 0xffffffff || (cdp->state != 2 && cdp->state != 3)))) { write_log (_T("AUD%dDAT: %04X ADDR=%08X LEN=%d/%d %d,%d,%d %06X\n"), nr, v, addr, cdp->wlen, cdp->len, cdp->state, chan_ena, isirq (nr) ? 1 : 0, M68K_GETPC); } #endif cdp->dat = v; cdp->dat_written = true; #if TEST_AUDIO > 0 if (debugchannel (nr) && cdp->have_dat) write_log (_T("%d: audxdat 1=%04x 2=%04x but old dat not yet used\n"), nr, cdp->dat, cdp->dat2); cdp->have_dat = true; #endif if (cdp->state == 2 || cdp->state == 3) { if (chan_ena) { if (cdp->wlen == 1) { cdp->wlen = cdp->len; cdp->intreq2 = true; if (sampleripper_enabled) do_samplerip (cdp); #if DEBUG_AUDIO > 0 if (debugchannel (nr) && cdp->wlen > 1) write_log (_T("AUD%d looped, IRQ=%d, LC=%08X LEN=%d\n"), nr, isirq (nr) ? 1 : 0, cdp->pt, cdp->wlen); #endif } else { cdp->wlen = (cdp->wlen - 1) & 0xffff; } } } else { audio_activate (); update_audio (); audio_state_channel (nr, false); schedule_audio (); events_schedule (); } cdp->dat_written = false; } void AUDxDAT (int nr, uae_u16 v) { AUDxDAT (nr, v, 0xffffffff); } uaecptr audio_getpt (int nr, bool reset) { struct audio_channel_data *cdp = audio_channel + nr; uaecptr p = cdp->pt; cdp->pt += 2; if (reset) cdp->pt = cdp->lc; cdp->ptx_tofetch = false; return p; } void AUDxLCH (int nr, uae_u16 v) { struct audio_channel_data *cdp = audio_channel + nr; audio_activate (); update_audio (); // someone wants to update PT but DSR has not yet been processed. // too fast CPU and some tracker players: enable DMA, CPU delay, update AUDxPT with loop position if (usehacks1 () && ((cdp->ptx_tofetch && cdp->state == 1) || cdp->ptx_written)) { cdp->ptx = cdp->lc; cdp->ptx_written = true; #if DEBUG_AUDIO_HACK > 0 if (debugchannel (nr)) write_log (_T("AUD%dLCH HACK: %04X %08X (%d) (%d %d %08x)\n"), nr, v, M68K_GETPC, cdp->state, cdp->dsr, cdp->ptx_written, cdp->ptx); #endif } else { cdp->lc = (cdp->lc & 0xffff) | ((uae_u32)v << 16); #if DEBUG_AUDIO > 0 if (debugchannel (nr)) write_log (_T("AUD%dLCH: %04X %08X (%d) (%d %d %08x)\n"), nr, v, M68K_GETPC, cdp->state, cdp->dsr, cdp->ptx_written, cdp->ptx); #endif } } void AUDxLCL (int nr, uae_u16 v) { struct audio_channel_data *cdp = audio_channel + nr; audio_activate (); update_audio (); if (usehacks1 () && ((cdp->ptx_tofetch && cdp->state == 1) || cdp->ptx_written)) { cdp->ptx = cdp->lc; cdp->ptx_written = true; #if DEBUG_AUDIO_HACK > 0 if (debugchannel (nr)) write_log (_T("AUD%dLCL HACK: %04X %08X (%d) (%d %d %08x)\n"), nr, v, M68K_GETPC, cdp->state, cdp->dsr, cdp->ptx_written, cdp->ptx); #endif } else { cdp->lc = (cdp->lc & ~0xffff) | (v & 0xFFFE); #if DEBUG_AUDIO > 0 if (debugchannel (nr)) write_log (_T("AUD%dLCL: %04X %08X (%d) (%d %d %08x)\n"), nr, v, M68K_GETPC, cdp->state, cdp->dsr, cdp->ptx_written, cdp->ptx); #endif } } void AUDxPER (int nr, uae_u16 v) { struct audio_channel_data *cdp = audio_channel + nr; unsigned long per; audio_activate (); update_audio (); per = v * CYCLE_UNIT; if (per == 0) per = PERIOD_MAX - 1; if (per < PERIOD_MIN * CYCLE_UNIT) { /* smaller values would cause extremely high cpu usage */ per = PERIOD_MIN * CYCLE_UNIT; } if (per < PERIOD_MIN_NONCE * CYCLE_UNIT && !currprefs.cpu_cycle_exact && cdp->dmaenstore) { /* DMAL emulation and low period can cause very very high cpu usage on slow performance PCs * Only do this hack if audio DMA is active. */ per = PERIOD_MIN_NONCE * CYCLE_UNIT; } if (cdp->per == PERIOD_MAX - 1 && per != PERIOD_MAX - 1) { cdp->evtime = CYCLE_UNIT; if (isaudio ()) { schedule_audio (); events_schedule (); } } #if TEST_AUDIO > 0 cdp->per_original = v; #endif cdp->per = per; #if DEBUG_AUDIO > 0 if (debugchannel (nr)) write_log (_T("AUD%dPER: %d %08X\n"), nr, v, M68K_GETPC); #endif } void AUDxLEN (int nr, uae_u16 v) { struct audio_channel_data *cdp = audio_channel + nr; audio_activate (); update_audio (); cdp->len = v; #if DEBUG_AUDIO > 0 if (debugchannel (nr)) write_log (_T("AUD%dLEN: %d %08X\n"), nr, v, M68K_GETPC); #endif } void AUDxVOL (int nr, uae_u16 v) { struct audio_channel_data *cdp = audio_channel + nr; // 7 bit register in Paula. v &= 127; if (v > 64) v = 64; audio_activate (); update_audio (); cdp->vol = v; #if DEBUG_AUDIO > 0 if (debugchannel (nr)) write_log (_T("AUD%dVOL: %d %08X\n"), nr, v, M68K_GETPC); #endif } void audio_update_adkmasks (void) { static int prevcon = -1; unsigned long t = adkcon | (adkcon >> 4); audio_channel[0].adk_mask = (((t >> 0) & 1) - 1); audio_channel[1].adk_mask = (((t >> 1) & 1) - 1); audio_channel[2].adk_mask = (((t >> 2) & 1) - 1); audio_channel[3].adk_mask = (((t >> 3) & 1) - 1); if ((prevcon & 0xff) != (adkcon & 0xff)) { audio_activate (); #if DEBUG_AUDIO > 0 write_log (_T("ADKCON=%02x %08X\n"), adkcon & 0xff, M68K_GETPC); #endif prevcon = adkcon; } } int init_audio (void) { return init_sound (); } void led_filter_audio (void) { led_filter_on = 0; if (led_filter_forced > 0 || (gui_data.powerled && led_filter_forced >= 0)) led_filter_on = 1; } void audio_vsync (void) { #if 0 #if SOUNDSTUFF > 0 int max, min; int vsync = isvsync (); static int lastdir; if (1 || !vsync) { extrasamples = 0; return; } min = -10 * 10; max = vsync ? 10 * 10 : 20 * 10; extrasamples = 0; if (gui_data.sndbuf < min) { // +1 extrasamples = (min - gui_data.sndbuf) / 10; lastdir = 1; } else if (gui_data.sndbuf > max) { // -1 extrasamples = (max - gui_data.sndbuf) / 10; } else if (gui_data.sndbuf > 1 * 50 && lastdir < 0) { extrasamples--; } else if (gui_data.sndbuf < -1 * 50 && lastdir > 0) { extrasamples++; } else { lastdir = 0; } if (extrasamples > 99) extrasamples = 99; if (extrasamples < -99) extrasamples = -99; #endif #endif } void restore_audio_finish (void) { last_cycles = get_cycles (); schedule_audio (); events_schedule (); } uae_u8 *restore_audio (int nr, uae_u8 *src) { struct audio_channel_data *acd = audio_channel + nr; zerostate (nr); acd->state = restore_u8 (); acd->vol = restore_u8 (); acd->intreq2 = restore_u8 () ? true : false; uae_u8 flags = restore_u8 (); acd->dr = acd->dsr = false; if (flags & 1) acd->dr = true; if (flags & 2) acd->dsr = true; acd->len = restore_u16 (); acd->wlen = restore_u16 (); uae_u16 p = restore_u16 (); acd->per = p ? p * CYCLE_UNIT : PERIOD_MAX; acd->dat = acd->dat2 = restore_u16 (); acd->lc = restore_u32 (); acd->pt = restore_u32 (); acd->evtime = restore_u32 (); if (flags & 0x80) acd->drhpos = restore_u8 (); else acd->drhpos = 1; acd->dmaenstore = (dmacon & DMA_MASTER) && (dmacon & (1 << nr)); return src; } uae_u8 *save_audio (int nr, int *len, uae_u8 *dstptr) { struct audio_channel_data *acd = audio_channel + nr; uae_u8 *dst, *dstbak; if (dstptr) dstbak = dst = dstptr; else dstbak = dst = xmalloc (uae_u8, 100); save_u8 (acd->state); save_u8 (acd->vol); save_u8 (acd->intreq2); save_u8 ((acd->dr ? 1 : 0) | (acd->dsr ? 2 : 0) | 0x80); save_u16 (acd->len); save_u16 (acd->wlen); save_u16 (acd->per == PERIOD_MAX ? 0 : acd->per / CYCLE_UNIT); save_u16 (acd->dat); save_u32 (acd->lc); save_u32 (acd->pt); save_u32 (acd->evtime); save_u8 (acd->drhpos); *len = dst - dstbak; return dstbak; } fs-uae-2.2.3+dfsg/src/ChangeLog0000644000175000017500000042145512162366654016430 0ustar glaubitzglaubitz9C0702 Correct an overflow problem in the CIA code. 9C0407 Sprite code updates; correct CIA memory access handlers (Toni). 9C0306 Make w/d representable for fsdb_win32. Don't reorder children of directories; this causes duplicates in exnext. Reorder the code for the 9/10 vsynctime hack a bit. Add code from Toni to remember the last value written to a custom register and to return it when reading from a write-only reg - this seems to match actual hardware behaviour. Add some more blitter tweaks (Toni). 9C0227 When waking up the copper from a blitter wait, recheck that vpos is larger than vcmp - especially with masking going on, this may not be the case. X11: When changing picasso resolution, reinitialize everything - our bitmap might be too small otherwise. When configuring hardfiles, use specified blocksize, not 512 (Toni). In SPRxCTL_1, don't examine vstart position before computing it (Toni). 9C0225 Some cfgfile fixes, more blitter timing changes and one big sprite statemachine update from Toni. Some copper timing fixes. Fix flag bit confusion in action_fh_from_lock (taken from earlier WinUAE). 9C0220 Blitter timing update from Toni. Copper timing "theory" changed (me/Toni). If we have a rdtsc insn, always synchronize with realtime in vsync_handler. Don't reset the lof bit when restoring state. When restoring disk image names, put them in changed_prefs (Toni) Return error in action_seek if trying to seek past end of file (Bernd Roesch). SDL fixes by Maik Qualmann. Fix for gtk warnings when updating floppy LEDs (Maik Qualmann). 9C0216 Fix the clockspeed detection - we were getting lots of alarm signals even after it had finished. Some tweaks for the GUI - and also fix the problem with waiting on the GUI semaphore even if no GUI is present... More accurate blitter timing (Toni). Support for A1000 bootrom and CDTV/CD32 extended ROMs (Toni). Fix filesystem lockup with "copy dh0: ram: all". Fix for JIT and more than 2MB chipmem from Toni Make fsdb_win32 accept more valid Windows filenames (Toni). 9C0215 Fix filesystem reset code that used to access freed memory. 9C0213 gtk UI fixes from Maik Qualmann. 9C0113 Configury & bsd compilation fixes from Krister Walfridsson. Match up lock/unlock calls in wgfx_do_flushline (found by Axel Doerfler). Fix potential crash taking strlen of NULL in filesys.c (Axel Doerfler). Set diskdmaen to 0 in dsk_dmafinished (Toni). 9B1230 lockscr/unlockscr fixes in drawing.c. Add sdlgfx from Bernd [4] Lachner. Filesystem asm code improvements from Toni (make it pic, call setup_exter earlier in the boot sequence, etc.) Also add Toni's patch to make rtarea position configurable (keep it at 0xF00000 for now, though). Avoid installing filesystem stuff if user didn't request to mount directories. BEAMCON0 is only available with ECS Agnus. Revert some bogus parts of the write_log patch. 9B1219 Add some missing clipping to the Picasso code. Limit number of illegal-mem warnings. 9B1217 Fix the GUI crash when changing floppies. Changes to support programs that change between HAM/no HAM in the middle of a line. Some bug fixes, and a big fprintf->write_log patch from Alex Kazik. 9B1125 Panning support for Picasso96 (in part from WinUAE). More state save fixes from Toni, and a small disk.c update as well which corrects track/gap lengths. More evolution of the AHI code. 9B1124 Merged a few more small pieces from WinUAE (larger pieces in case of the Picasso code). CLXCON2 was never called or statesaved. Fixed by Toni. Sound sample frequency now always based on PAL timings. 9B1123 Goodness! Massive memory corruption bug in picasso96.c - passing last color changed to DX_SetPalette instead of count. Fixes for the AHI code. Changed prefetch emulation to be more similar to the one MAME uses. Trace mode fixes (Bernd Roesch & myself). 9B1122 Redo the ExNext code in the filesystem to make sure we always match opendir with closedir and to fix some renaming problems. Fix hd changing code in gtkui. 9B1121 Mini-merge of noncontroversial WinUAE filesys.c code. Add harddisk page to gtkui. Also change gui behaviour to wait for the user to unpause before starting the emulator. Add Toni's drive-led display. Fixed a rather amazing source of crashes (we could fail to notice the end of the frame in some cases). Default to scanline mode. Some tweaks to the SDL driver and the Win32 gui, mostly buffer-size related. Moved C source files back from tools directory (but still build them there) to preserve my CVS history. 9B1119 Move all the build tools (gencpu, cpuopti etc.) into their own directory which is configured separately. This was necessary to avoid picking up SDL CFLAGS (which can #define main to _SDL_main, and that breaks if you don't link with SDL), and to make cross-compiling at least a little more likely. Remove sanity check for SDL header file - rely on sdl-config getting things right (not that we have much choice). Move thread support code past sound code in configure, and make sure that SDL sound enables threads. Move sername into options structure. Check for existance of isinf/isnan before using them. Rather large WinUAE merge - this tree compiles again under Windows. Most of the additional features are missing though. 9B1118 Restore code to mirror banks for 24 bit address space which got lost when all the JIT memory changes were put in. Speed up the CPU time calibration code. Fix the broken file selector handling in the gtk ui. Add kickstart selector. Don't call XCloseDisplay, it apparently leads to crashes. Try to solve the "missing write_log" problem in a sane way. SDL joystick support. When configure detects win32, use fsdb_win32 rather than fsdb_unix. 9B1117 Proper masking for DDFSTOP; proper handling of AUDLEN == 0, changed delayoffset code, gencpu BFINS fix, and lots of disk updates (all Toni). Some additional regs for move2c/movec2 (also by Toni IIRC) 9B1115 COLOR_READ typo fix (Toni). 9B1024 Filesystem reset leak fixes (Brian) Allocate enough memory for custom state saving. bploff renamed to bpl_off. AGA copper cycle diagram (Toni) Disable disk_data_used optimization. 9B0926 Delayed palette setting for Picasso modes. Also fixed problem with palette setting in CLUT emulation - we need to redraw the entire screen if that happens. 9B0921 Miscellaneous small bugfixes. Delete some obsolete code. 9B0907 Beginnings of SDL support. Exterminated some penguins. 9B0825 Some xwin.c fixes from Maik Qualmann. 9B0730 Some sprite state machine tweaks. Fix sprite vs. DIW comparison. HAM linebuffer was too small by half - oops. Make absolutely, positively sure that when hsync_handler calls sync_copper_with_cpu, we don't take any invalid shortcuts. Memory management changes for JIT (Bernie [2], mostly). 9B0729 Silly mistake - need to call flush_plane_data unless plfleft is -1, even if no planes were enabled. 9B0728 Small hack to reduce the time we lose with unnecessary disk_doupdate_read calls. Avoid calling flush_plane_data if we have no bitplanes enabled. Tweak the SPCFLAG_INT handling to make "Delirium" demo work. Limit rate of DDF warning messages. Adjust display parameters so that things are shifted to the left even more. Fix (hopefully) CIA & blitter saving code. 9B0727 Copper code reorganized; speedup code rewritten. Can now be enabled with a GUI setting. Fixed the delayoffset stuff. 9B0725 AGA sprites, and some patches to sprite/playfield collision code, mostly by Toni. Fixed a small sprite restore problem; added missing code to map fastmem banks when restoring them. Some more state saving updates from Toni. 9B0724 Fix a nasty bug in the copper SKIP instruction introduced by recent changes. Update the FAST_COPPER code. Not quite enabled yet. More work on the memory configuration stuff. Fix CPU type writeout in cfgfile.c (taken from WinUAE source). Move the WOC demo BPLCON0 fix to compute_toscr_delay (Toni). Added Toni's new disk patches, which include HD disk support by Adil Temel. Rewrote the memory and audio save/restore code. Mask DDFSTOP with 0xFE, not 0xFC. 9B0723 Yet another new and correct copper state machine (this time for sure) Fix some AGA problems in DDF speedup code. In gencpu.c, branch insns return a hardcoded cycle count; this had not been updated for the CYCLE_UNIT stuff. Fixed. xwin.c: If mouse is grabbed, we don't need mousehack. Don't clear audio state if produce_sound == 0; this causes problems if we want to turn the sound back on. If an audio channel had a period of PERIOD_MAX, allow AUDxPER to set its evtime back to a reasonable value. Massive cleanup of memory initialization code; it will now use changed prefs on reset. Added some memory options to gtkui.c. Added Toni's state saving code, then added gtkui options and code to initiate saving/restoring. 9B0722 filesys.c: Fix writeout of hardfile params (Bernie [2]) Add an A1000 Kickstart disk loader (Gerald Schnabel). Got rid of the automount_uaedev code; we can detect the Kickstart version and do the right thing. Deleted a few unused variables (Toni) Avoid aborting in decode_ham if Amiga code turns on the HAM bit but has too few bitplanes (found by Toni). Make the dummy mem bank return other values than 0; helps some stupid memory detection code. Implemented a little exec task lister for the debugger. Added new debugger commands from Mark Cox. Improved his copper list debugger by adding recorded timing information to it. MOVE16 fixes from Gwenole Beauchesne. xBCD fixes by Maik Qualmann, with some additional flag fixes by myself (ABCD & SBCD behave exactly like on a 68000 now; dunno about NBCD). 9B0520 AGA bscan2 fixes and disk.c kickstart speedup fixes from Toni. Remove bogus changes I made to one of Toni's earlier disk.c updates. Call RethinkICRA/B from INTREQ (suggested by Toni). Properly save mixed_stereo setting. NEGX uses X and Z (Bernd Roesch). Danish keyboard support (Jesper Bojesen). 9B0311 Repair "emulated but no output" sound setting. 9B0310 Fix massive bug introduced in do_cycles_slow with the rescaling changes. CLXCON logic updated for AGA (Toni). Change meaning of collision_level and add support for it in cfgfile.c. 9B0309 Fix problem where a fsdb file could prevent deletion of otherwise empty directory discovered by Torsten Enderling. Rescale return values of CPU emulator functions. 9B0225 Undo parts of the audio changes that made the "accurate" setting the default. 9B0221 Make fsdb_unix compile again. 9B0219 Fix ddf for cases where start isn't aligned to fetchunit. Fix some problems with the sound code going into infinite loops or crashing. Try to re-add Toni's ddf delay fixes properly. Added a fix from Krister Walfridsson for X11 SHM code. Rename OBJECT_NOT_FOUND to OBJECT_NOT_AROUND (not sure why, but the win32 port does this; Fellow picked it up as well...) Give in and allocate ainos with xcalloc. Import fsdb_win32 code from Fellow. Some tidyup and fixes in fsdb code. Lose the lastdiv10 variable, and update CIA timers when reading them (mostly by Bernie [2] Meyer) Move reset_uaedevices and get_new_device to filesys.c. Add extra parameter to get_new_device. 9B0213 Fix mouse pointer jumping bug in X11 code (Ralf Hoffmann) Scaled event handling by a factor of 512. This allows more accurate sound output frequencies, as well as more fine grained CPU speed settings. Implemented totally untested emulator side AHI support. 9B0211 Partially reverted changes made to the audio event code in 0.8.0. Implemented "mixed" stereo. 9B0210 Fixed invisible sprite bug - sprite_width got a new meaning, and not everything had been updated. 9B0121 cycles => get_cycles () (from Bernie [2] Meyer's JIT patchkit) 9B0120 Final bugfix in speedup code (plfleft got set too early). 9B0118 Fixed SPEEDUP code for AGA. Speedup now starts when fetch_state is fetched_plane0. 9B0115 First batch of AGA playfield changes (Toni & myself). 9B0110 Small fix for the m68k_run macro (Bernie [2] Meyer) 9B0109 Use ntscmode from prefs structure (Dwayne C. Litzenberger) Some 040 FPU fixes (Bernie [2] Meyer) Delay DSKREADY a while; fix other small disk bugs (Toni Wilen) 9A0902 F0FF10 is now a puts () calltrap. 9A0830 Add some missing initializations in filesys.c, thanks to debugging by Harald Frank. 9A0827 Fix a crash with framerate != 1. Don't allow programs to see left & right or top & bottom simultaneously with the keyboard joystick replacements. (Gee, games on the CPC and on the Amiga actually have something in common - some of them crash when the joystick is pushed in too many directions at the same time...) 9A0825 Put in the new sprite code. This has existed for many months but I've only now found the final bugs. New version of Bernd Meyer's special_mem code. Also add his set_special/unset_special code, the noflags changes for gencpu, and a fix for cpuopti's string matching. Tiny clarification in table68k. Add 68040 support from Basilisk. readcpu.h is now included from newcpu.h. 9A0824 Rather massive overhaul of the DDF code. Many other timing fixes (copper state machine mostly) (Sam Jordan and myself) Get rid of stupid optimizations in color recording. Synchronize CPU and copper in custom_wget. 9A0816 Introduce variable "special_mem", set it in each memory handler that doesn't work on real memory (Bernd Meyer). 9A0815 Fix a really stupid bug in cfgfile_strval. Nonfunctional support for switching between windowed/fullscreen modes in gtkui. Add (semi-broken) support in the debugger to create a trace logfile. Take out most port-specific flags handling; x86 version kept with slight name changes to indicate that this is code is suitable for other ports as well. Took out HAVE_GAS while I was in configure. 9A0811 Fix the line doubling slowdown. 9A0809 Software autofire. Remove one line from Makefile.in in the hope it will fix the build errors people are seeing. 9A0807 Tighten up some minor aspects of spcflags handling. Fix an AGA bug in customreset. Set default CPU speed to approximate a A500. Tweak gencpu so that the timings for this are more accurate. Ignore T0 bit if not emulating a 68020. Add an option to set the number of emulated floppy drives. Improve the mfmcode function a bit. Faster and more accurate. More SCSI patches from Patrick. Add gui_data structure from WinUAE. Turn on gui leds again. 9A0725 Fix incorrect define of m68k_run for non-x86 systems (could have sworn I already fixed that). 9A0723 Some SCSI patches by Patrick Ohly (which I got two months ago... oops) Filesystem fixes from Brian. AGA updates from Toni. 9A0627 Apydia loader fixes from Toni. 9A0611 Fix bug in filesys.c causing in-use ainos to get discarded. Thanks to Brian for the analysis. 9A0608 Added some disk.c changes from Toni and a crude hack of my own to speed up disk accesses done by the Kickstart. 9A0330 Change blitter not to translate memory addresses to native. Had to disable 32 bit blits. Floppy code changes (Toni Wilen) Delete GGI port. Fix toggle_inhibit_frame (Brian). 9A0228 Some WARPUP fixes, and changes to accomodate broken Amiga gzip (Sam Jordan). 9A0221 Tweak POTGO a bit. Seems to work with BC Kid now. 9A0220 Fix off-by-one errors in expansion.c (Toni Wilen). Remove AGA checks in DDFSTRT/DDFSTOP (Toni Wilen). Turn off/restrict some warning messages. 9A0209 Fix some problems where the blitter nasty flag wouldn't ever get reset. cia.c: Set all parallel port related bits to 1 when reading. 9A0208 gencpu.c: Fix saved PC for division by zero exception (found by Sam Jordan). 9A0131 update_copper: Mask until_hpos properly. Delay values are masked to 3 bit in hires mode (Sam Jordan). 9A0102 Only delay horizontal copper wait if vertical position matches exactly. Tweak vblank end position for sprites. Calculate playfield borders more accurately for case where we have sprites. 9A0101 Reintroduce ev_copper; use it sparingly for longer waits within a single line (but _not_ to time reads). Fix a dumb bug in yesterday's changes that screwed up scrolling. 991231 drawing.c: Cruftectomy. genp2c.c: Gone. X86.S: mostly gone. 991229 Always use NTSC vblank_lastline for sprite purposes. Make sprite logic recognize vertical stop even if vertical start has not been reached (found by Sam Jordan). Prevent move2c/movec2 instructions from incrementing the PC if they raise an illegal instruction exception (found by Toni Wilen). 991212 ncurses port compiles again. Disable serial interrupts in custom.c; they break things. 991208 Add a missing decide_line call in update_copper_1. 991206 Fix copper emulation to use state machine figured out by Sam Jordan. 991205 Fix event table corruption in disksync_handler. 991113 gencpu.c: Fix a problem with BTST. 991110 fpp.c: Initial set of changes merging code from Lauri Pesonen. 991024 Add missing type in m68k_run1. Divisions by zero clear overflow bit. 991023 Fix compilation problem for ! HAVE_STEREO_SUPPORT. 991022 Rewrite disk read code to transfer some DMA words every raster line. fpp_movem_index1 and fpp_movem_index2 were reversed (Brian King, Sam Jordan). Fix accuracy of fpp fix insns (Sam Jordan). Allow ports to define their own FP 68881/host conversion functions (Sam Jordan). Get rid of all the HAVE_GET_WORD_UNSWAPPED code. Fix prefetch for insn opcodes (Sam Jordan). Fix call insn syntax in X86.S. Tidy up sound interpolation support. Readd old command line arg parsing. Change "long unsigned int" to "unsigned long" in a couple of places. Use Sam's version of the filesys.c fixes (action_parent_fh, action_change_mode). Fix a place in disk.c where a mfm buffer was zeroed instead of 0xaa'ed (Sam Jordan). 991006 CPU emulator fixes by Christian Bauer tui.c compilation fixes by Christof Petig. Fix operand in one insn in X86.S (Brian). zfile.c fix for filenames with embedded spaces (Ingo Ruhnke). linux-ppc configury patch (Holger Jakob). s,static __inline__,STATIC_INLINE, (Sam Jordan). cfgfile.c: Don't use "t" modifier in fopen (Sam Jordan). serial.c: Don't close file if fd < 0 (Sam Jordan). filesys.c: Open files on readonly devices with O_RDONLY (Sam Jordan). Fix bugs in parent_fh and change_mode actions (Sam Jordan). WARPUP patch (Sam Jordan). 990621 Initial version of Richard Hoffmann's sound interpolation patches. Fix a crash in action_set_comment. De-inline 68k trace code. 990508 Fix rdtsc asm statement to show that edx is clobbered. gtkui.c: Add pause button (Patrick Ohly) configure.in: Check for -mpreferred-stack-boundary compiler option and use it if found to set a sane value. 990429 X11 patches by Patrick Ohly. Filesystem code extended to keep a simple database with information about each file that is not representable on the host FS, such as script/pure bits or filenotes. 990417 Bits and pieces merged from the Win32 port; mostly options stuff. Got rid of getopt; added chipset options to prefs structure. 990411 Patches by Patrick Ohly: SCSI support and timehack tool. 990410 Applied easy parts of Toni's latest AGA patches. 990315 Attempts to fix Picasso crashes in SVGAlib version. 990216 picasso96.c: Some optimizations. cfgfile.c: Save target specific options. Allow simple/smart choice for centering options. Delete mount_data junk, substitute immediately. Whitespace handling fixes. Fix config_description typo. m68k flag handling redone. 990212 Implement rotate instructions without loops. Some other m68k optimizations. Some configure.in fixes. 990122 gtkui.c: Fixes for gtk 1.1.13. 990113 genp2c.c: Don't include custom.h. 990109 Some fixes in cfgfile.c. Make svga.c compile again. 981229 Miscellaneous fixes in the new config file stuff. In config files, allow 68ec020 as CPU type, and get rid of 24 bit addressing option. Make the get_disp_ea non-inline. SGI sound support (Ari Heikkinen). More updates by Brian: audio.c: Handle frequency, too, when changing sound prefs. Do some work in update_audio even if not generating sound output. filesys.c: Request 50 buffers in our parampacket. Assorted right control key fixes. Some updates in od-win32 (not nearly done...) 981228 Config file and option handling redone; based on work by Brian. Rename UAEn: devices to DHn: (Brian). filesys.c: Implement ACTION_CHANGE_MODE, ACTION_PARENT_FH; add support for variable hardfile blocksizes (Brian). Some Picasso96 updates (Brian). 981226 Win32 fsusage.c fixes; zfile bug fix; gui_fps addition (Brian). 981221 Fix gtkui to work with newer versions of gtk. Fix gencpu so that FPU emulation doesn't crash when unswapped word reads are available. 981129 gencpu.c: Delete all the queue_amode stuff again. xwin.c: Allow switching between DGA and window mode (Marcus Sundberg). DGA seems broken in X 3.3.3, however :( 981011 Teach cpuopti.c about epilogues that increment esp by popping. 980930 Add BSD socket code (Mathias Ortmann). 980923 filesys.c: Implement FH_FROM_LOCK (Brian King) 980823 xwin.c: French keyboard patch (Raphaël Poss). 980810 Fix RDTSC detection (Raphaël Poss). newcpu.c: Patch by Brian King to display what kind of CPU table is built. 980716 More AGA patches: use new macro GET_PLANES to calculate number of bitplanes from BPLCON0; adapt the copper code; add BPLPT[HL][78] and BPLDAT[78] (Toni Wilen) 980715 Change sd-uss/sound.c not to keep a file open in setup_sound, to support reconfiguration. 980713 Fix m68k detection in configure.in. Clear execbase after allocating chipmem (Holger Jakob) od-dos update, tui.c patches (Gustavo Goedert) Get rid of --enable-sound, always enable sound. Make svga.c compilable. 980712 md-ppc-gcc patches (Holger Jakob) 980707 gtk ui: Better CPU speed selection. Move initializations from add_filesys_unit to set_filesys_unit. 980706 AGA patches by Toni Wilen: Call calcdiw when changing fmode; fix references to bplcon variables to go through dp_for_drawing; ifdef out some code that's too hard to fix for now. "Fix" the AGA color code. In pfield_linetoscr_aga, add lframe_end and diw_end parameters and use them. Add some fill_line code for AGA. Make sure no code touches acolors if [AGA_CHIPSET != 0] New function finish_line_aga. 980705 drawing.c/custom.c: Get rid of line_changed, replace with a single variable thisline_changed. Pass it to hsync_record_line_state and evaluate it there. Get rid of BORDER_PREV and BORDER_NEXT states; add LINE_BLACK/LINE_REMEMBERED_AS_BLACK to implement scanlines option. Remove code in pfield_draw_line that checks line_changed. 980702 filesys.c: New function move_filesys_unit. Win32 GUI fixes. 980701 gtk UI beautification and code cleanup (Michael Krause) Beginning to make audio code run-time configurable (mostly by Michael Krause) Fix off-by-one errors in memory check handlers (Jake Hamby) configure: Add AM_CYGWIN32, AM_EXEEXT and AM_MINGW32 and fix some Win32 configuration problems. genp2c: Fix symbol name braindamage. md-i386-{gcc,watcom}.c: Don't do machdep_init when [_WIN32]. Many Win32 compilation fixes. filesys.c: Attempt to fix the mount code chaos. 980629 MOVEP bug fixes (Philippe Gerin) Comment out code using readdir_r again. 980628 gencpu.c: Generate an end label only when it's needed. configure.in: Check for windows.h, ddraw.h, sys/utime.h; check sizeof __int64; check whether a small DirectX program compiles; check for Watcom C; don't do GNOME_FILEUTILS_CHECKS when compiling on Win32 without GNU C; use AC_EGREP_CPP in some places instead of compiling a file by hand; check for GAS .p2align feature; check for USE_UNDERSCORE with a small test program; add code to set up od-win32/md-i386-watcom directories when appropriate. genp2c.c: Use GAS .p2align feature; don't generate .type directive. Rename md-*/memory.h to md-*/maccess.h. More fixes in Win32 code. Add wcc.sh and wrc.sh, two scripts to make it possible to use the Watcom C compiler and the resource compiler in a Cygwin32 build environment. 980626 Change zfile.c not to use fopen_del. 980614 Delete ihf_sem stuff. picasso_refresh now nonstatic and called by check_picasso after a notice_screen_contents_lost call. More functions to access filesystem mount information. More Win32 code. 980613 Use an AC_TRY_LINK block to check for libpthread. 980611 Rename lockscr/unlockscr to gfx_{lock,unlock}_picasso and add new functions lockscr/unlockscr which are now called by drawing.c. xwin.c: Clear picasso_invalid_lines in graphics_subinit and when doing an XPutImage for a refresh. New function reset_all_systems, which is a bit misnamed at the moment because it only resets the filesystem. Called from m68k_go when a reset is needed. In filesys_prepare_reset, examine unit_pipe instead of self to determine whether a unit has a thread that needs to be killed. Move the reset_state and reset_sync_sem variable to UnitInfo so they are available at all times. Don't need to call finish_drawing_frame if we do a reset, it was done a couple of lines earlier. In uae_reset, do nothing if any reset or quit operations are in progress. Make DMACONR static. 980609 Add memory size fields in struct uae_prefs. New variables allocated_xxxmem for every block of memory that holds the actual amount currently allocated, copied from the preferences at allocation time. Create a new structure "uaedev_mount_info" to hold filesystem mount information. Add a pointer to one of those in struct uae_options, and copy it from currprefs to a filesystem private place when starting the filesystem threads to a work area. Terminate filesystem threads during a reset, and restart the whole filesystem code afterwards so that prefs changes are noticed. 980608 If check_prefs_changed_gfx returns nonzero, or if we switch from/to picasso mode, call notice_new_xcolors and notice_screen_contents_lost. Delete the frame_do_semup crap. 980606 Create config.h link in configure, not in Makefile. 980604 xwin.c: No longer need picasso_max[wh]. Improve picasso invalid lines code a bit more. Fix some dithering bugs. gtkui.c (add_checkbox_widget, add_radio_widget): New helper functions. Patches by Marcus Sundberg: Make X11 picasso clut emulation mode work in DGA gfxutil.c (setup_dither): Free redvals. 980602 Split out init_aspect_maps from reset_drawing. Call check_prefs_changed_gfx from vsync_handle_redraw, and initialize row and aspect maps if it returns nonzero. Use an enum instead of integer values to communicate between hsync_handler and hsync_record_line_state. gtkui.c: Use gtk_window_set_title (Marcus Sundberg) xwin.h: Add lockscr/unlockscr prototypes. 980601 Move check_prefs_changed_xxx into vsync_handle_redraw. Make ersatz.c a little more crash-proof. 980531 New graphics specs 'a' and 'p'. Support them in the X11 version. 980530 sysdeps.h, posixemu.c: Change (char *) to (const char *) in the arguments of some of the posixemu functions. sysdeps.h: Delete getopt declaration. Include "getopt.h" in main.c. aclocal.m4: add fsusage.c support from Gnome. fsusage.[ch]: New files from fileutils, slightly modified to fit into UAE and to add Win32 support. Adapt do_info filesys.c to use it, and delete all the old cruft. Some updates for the Win32 port. 980529 Patches for X11 version by Marcus Sundberg (Picasso invalid lines optimization, XShm availability check, cleanup, etc.) 980528 Add field emergmem to struct vidbuf_description, and change pfield_draw_line to use it. 980516 Patches by Samuel Devulder and Holger Jakob: update Amiga port, add support for compiling cpuemu.c in seveal steps again, add cheatsearch in the debugger. 980515 GGI patches (Christian Schmitt). sd-mme: New directory (Marcus Sundberg). Changes in the X11 version to support mixed DGA/normal binaries, hotkeys, and mouse grabbing (Marcus Sundberg) xwin.c: Copy a bit of code from Win32 port that constrains lastmx/lastmy to real coordinates when ievent_alive. 980510 gencpu.c: Slightly better flag generation code. picasso96.c (wgfx_flushline): Don't do anything if Picasso screen is invisible. 980508 Don't disable GGI if we can't find svgalib. newcpu.[ch], gencpu.c, md-i386-gcc/memory.h: Implement unswapped word reads for opcodes. 980505 drawing.c: add missing #ifdef X86_ASSEMBLY. 980504 More BSD fixes from Krister. xwin.c: Call XAllocColorCells for dithered modes. Don't set image_mem in get_image, instead arrange for it to store the address in a pointer chosen by the caller. picasso96.h: Add a clut array to picasso_vidinfo. picasso96.c (do_fillrect, do_blit): Use picasso_vidinfo.pixbytes instead of picasso96_state.BytesPerPixel where appropriate. (do_fillrect, do_blit, wgfx_do_flushline): Handle the case when the Amiga-side buffer is a 256 color palette mode and the native buffer is truecolor by looking up colors in the new picasso_vidinfo.clut. xwin.c: Adapt to support emulating a palette display in truecolor. Make tui.c compile. 980501 picasso96.c: Make sure there's an unlockscr for every lockscr call. In SetColorArray, detect when no colors changed. configure.in, aclocal.m4, Makefile.in: Use AM_PATH_GTK from gtk distribution. New field rgbformat in picasso_vidinfo. Set it in xwin.c and svga.c. custom.c (mousehack_helper): Use Picasso screen offsets correctly. 980427 Call decide_line in DIWSTOP. Implement DIWHIGH register. 980426 filesys.c (get_nname): Don't allow Unix "." and ".." directories. gencpu.c: Approximate the number of cycles per instruction. Make generated functions return that number, and use it in newcpu.c in the do_cycles call. custom.c, drawing.c: init_hardware_for_drawing_frame must be called from init_drawing_frame. Move read_processor_time specific stuff to new file md-xxx/rpt.h. md-i386-gcc/support.c: Try to detect whether the CPU has RDTSC. newcpu.c: m68k_speed == 0 means approximate A500 speed; m68k-speed == -1 means use frame rate hack when available. Some changes to support this. 980425 custom.c: New copper code. Unfortunately not much faster than the old one. Get rid of some unused variables throughout. filesys.c: Use readdir_r when available. picasso96.c: In BlitPattern, correctly handle the pattern offsets. missing.c: Get rid of getopt. Add GNU getopt instead. In SPRxPTH, SPRxPTL, call decide_sprites instead of decide_line. 980421 custom.c: Add an extra argument, hpos, to plenty of functions, and use it instead of calling current_hpos. 980420 BeOS update (Christian Bauer). When enabling additional planes in post_decide_line, update thisline_decision.bplcon0. Tweak copper timings. 980419 Extend post_decide_line to handle cases where some planes are enabled much later in the line than the others. In pfield_doline_unaligned_h, don't increment dataptr. Split custom.c, move drawing code to new file drawing.c. New header file drawing.h for declarations of shared stuff. osemu.h: Delete junk. 980418 gtkui.c: Don't crash if -G option is given. audio.c, custom.c: Don't use the generic event handling mechanism for audio emulation, the overhead is too high. update_audio: New function, handles audio updates "on demand" or every hsync (Idea by Petter Schau). 980417 Some cleanups in custom.c to make splitting it up easier. 980416 custom.c: Don't use bplhires in do_modulos. 980415 readdisk.c: Support FFS (Jim Cooper). BSD patches by Krister Walfridsson. configure.in, Makefile.in: More fixes for build != source directory. Arrange to build p2c_x86.o when using md-i386-gcc. sysdeps.h: Include limits.h. Remove silly code that restricted possible version numbers. 980320 configure.in: Check for vprintf. Make write_log a varargs function. Provide a write_log_standard function that is used by most systems. Refuse to compile with non-ANSI compilers. gencpu.c: Rearrange some of the generated code to reduce register pressure. Release 0.7.0 980401 gengenblitter.c: Complete rewrite. Much smaller, much faster, much better results. Check for -lXi to support newer versions of gtk+. 980316 gencpu.c (read_counts): Two silly bugs fixed. main.c (save_options): Don't write out 'a' if cpu_level < 2 configure.in: Changes to try to be compatible with Solaris /bin/sh. 980315 New UAE-Control version from Tauno & Cloanto. Make configure set UNALIGNED_PROFITABLE for x86. Get rid of "-o", add save command to tui.c and gtkui.c. Fix some bugs in save_options. 980314 Many improvements in the gtk UI. Made CPU type changeable at run-time. Make DGA && ! VIDMODE configuration compile. Kludge around the fact that DGA misses colormap changes. Call XWarpPointer to try to avoid the click-moves-framebuffer bug. Make sure p2c.[ch] don't get deleted. 980313 Move all CPU_LEVEL handling from build68k.c to gencpu.c. In gencpu.c, ignore all parameters and don't write to standard output, instead hardcode all filenames and generate them all at once. Arrange to generate code for all CPU emulator variants and to select them at run-time. Get rid of copper cheat mode, re-use "-C" option for CPU selection. 980312 In COPxLCL, mask out LSB (Axel Wefers). newcpu.h: Always compile in both get_disp_ea versions with a different name. Delete USE_POINTER option; always use pointer. Don't fill prefetch in m68k_setpc, do it in callers where necessary. Compile in two versions of get_ixxxx, with different names for prefetch and non-prefetch. Change gencpu.c to use these appropriately. Don't generate 16 small CPU emulation source files. With a decent machine it's no problem to compile all the code in one file. Also turn off -O3 for gcc, -O2 does fine since all the necessary __inline__s are there, and the compiler takes less memory that way. Don't include , duplicate some definitions from there instead. Makes configure.in simpler, too. Fix Makefile.in/configure.in and a couple of other places to support building in a separate directory (sort of; not complete yet). Remove p2c.[ch] and genp2c when doing make clean. Delete code to support Tcl/Tk and XForms GUIs. 971215 More Amiga and BeOS patches from Sam and Christian. 971205 Move some more code from custom.c to audio.c. Optimize sample handlers a bit. Make RDTSC asm statement volatile. 971203 Latest GGI patch from Christian Schmitt. Fix configure to enable zfile decompression for GGI target. Fix mouse button mapping in ggi.c. 971128 Fix double definition of gfxvidinfo in custom.c. Fix impossible register constraints in asm statement in newcpu.c Sprinkle casts and rename some variables to make C++ compilers happy. Add BeOS patches by Christian Bauer. 971125 More Amiga patches from Sam. 971120 Get rid of DONT_WANT_SOUND. 971119 Support USS sound not only on Linux (Douglas Carmichael) Update Win32 and DOS ports. Add Polish documentation by Tomasz Sienicki. 971116 Add a missing return statement in filesys.c (Brian King) 971112 Fix silly error in xwin.c. 971108 Add some more decompressors to zfile.c. Set FLOPPY_SPEED to 4. 971107 Make ggi.c compile again, fix a few bugs and add Picasso support. 971106 Fill prefetch queue after executing an encrypted ROM illegal insn. 971105 Initialize the sprites during customreset now that init_hardware_frame no longer does it. 971104 Implement action_set_file_size as required by the specs. SetPanning/picasso96_state: XOffset and YOffset are signed. 971103 xwin.c: Offer 640x512 and 320x256 resolutions in windowed Picasso mode. Add a few more memory banks in memory.c (A3000 stuff - nonfunctional) Don't map kickmem at address 0 if using replacement Kickstart. Must fill prefetch buffer when calling calltraps or ersatz functions. Write out hardfile parameters in write_filesys_config(). xwin.c: Support 15 bit displays. 971101 Add latest patches by Samuel Devulder. Improve hardfile support in tui.c. 971031 Offer "-U" only ifdef PICASSO96. Add support for mounting multiple hardfiles in any order. Don't reset sprite state in init_hardware_frame. Instead, allow SPRxPT functions to set the state to SPR_restart in the vertical blanking area. 971030 Fix 8MB Chip RAM. filesys_dev_storeinfo: New function and calltrap. Use it to store per-unit data (which now includes geometry information) in the parampacket. Modify filesys.asm to use it instead of trying to find the values by itself. 971028 "AMIROMTYPE1" has 11 characters, not 0. 971027 Implement encrypted ROM features. Comment out non-working InvertRect optimization. 971026 Fix some problems in PlanarToDirect and CopyColorIndexMappingA2U. 971022 Remove fixed paths in genp2c.c (oops...) Some more XF86VidMode hacks. Include target.h in sysdeps.h. Define PICASSO96_SUPPORTED for X11, SVGAlib and Win32. Don't compile in Picasso support if this macro isn't defined. 971021 xwin.c: Picasso code wants to use bit_unit, not bitdepth. Also correct byteorder (it's B8G8R8A8 from the Amiga's point of view). Fix Picasso InvertRect function. Half-hearted attempt at 24 bit support in the X11 version, with some awful code in custom.c. Make the X11/VidMode version try to resize the screen for Picasso mode switches. 971020 Delete option -5, make -4 take an argument. Disable z3fastmem and Picasso emulation when using a 24 bit address space. 971019 record_color_change: No need to remember a color table if the current line hasn't been decided yet. Add XF86VidMode extension support. Integrate Stefan's Zorro III support, add support for up to 64MB fast. xwin.c: Refresh the whole Picasso screen if there are Expose events. Fix module length calculation for *Tracker modules. Use a 32 bit address space by default if CPU_LEVEL > 1. New option -5. 971018 Apparently it's not possible to turn on bitplane DMA in the middle of the line, so call post_decide_line only when the number of planes is modified, not in DMACON. genp2c.c: New file, generates planar to chunky conversion routines. Remove those which are now generated from custom.c. 971017 Make row_map an array, not a pointer to one. Audio periods may not be 0, so initialize them to 65535 in customreset. Implement "S" command in the debugger. Add a bunch of module detection routines. 971015 od-linux/sound.c: If FRAME_RATE_HACK, reduce vsynctime a bit to give the sound emulation more room to breathe. 971013 Merge with Brian's latest Picasso code. 971012 Fix a few more portability problems that showed up when compiling with Watcom C. Also remove superfluous includes from some files. Add md-i386-watcom directory. Update od-win32 with latest code. Remove fast_memcmp routine. Include penguin.h before xwin.h everywhere. Declare a few semaphores for multithreaded setups in xwin.h. Move inhibit_frame stuff to xwin.h. 971011 gencpu.c: Don't generate labels without following statement. Don't directly generate assembly statements if X86_ASSEMBLY, instead generate code that uses macros defined in machdep/m68k.h. 971008 xwin.c, svga.c, custom.c, uaelib.c: Add picasso96 code. Add Picasso selection to configure. Move common variables (mouse stuff, gfxvidinfo, xcolors) from graphics files to custom.c. memory.c: custom chip area isn't supposed to be mapped at 0x200000. Use dummy bank for now. od-linux/joystick.c: Open different devices for different joysticks. From Win32 sources: set vsyncmintime in m68k_go. 971005 genblitter.c: blitzero is initialized to 1, not to 0, so we need to clear, not set it. 970928 Add another user interface for X11 using libgtk+. 970925 audio.c: For stereo sound, double all lookup table values. Added (preliminary) win32.c. 970923 DISK_check_change: Should call gui_filename when ejecting. 970922 Fix od-linux/joystick.c compilation problem with recent kernels. Merge results of the UAE meeting: New serial code (Stefan Reinauer) Expansion "test card" support (Stefan Reinauer) New GGI code (Christian Schmitt), also configure/Makefile changes to make it compile. Fix 68020/FPU code. Call do_mousehack before every read of the mouse position to get more accurate values. Add sd-file directory; add support for it in configure. Add stereo support in audio.c, od-linux/sound.[ch], and main.c. Fix copper problem: call decide_line in calc_copcomp_true; and if the copper wouldn't wait normally (position reached), but the hardware is fetching data in Hires 4 plane mode, delay until ddf stop. t-ascii.h: Asciiart target understands "-x" parameter. 970823 gencpu.c [X86_ASSEMBLY]: Turn input constraints for scratch into output constraints. 970626 Fix 24 bit address space logic (Mathias Ortmann). Raise exception 3 for Bcc.L insns if CPU_LEVEL < 1. Reported by Stefan Ropke. Remove USER_PROGRAMS_BEHAVE for normal emulator. Remove hacks to generate expanded CPU functions for specific opcodes. Replace with code that reads an instruction count file and sorts gencpu output by frequency of the called opcodes. 970625 Calltraps (at least those with call_m68k calls in them) were broken by the CPU emulator changes. Now use Axxx opcodes as calltraps. Include pOS port by Samuel Devulder. 970624 Solaris sound patches by Manfred Thole. gencpu.c: The generated code shouldn't just check for odd addresses, it should also call Exception... 970622 gencpu.c: don't emit return statements; make code jump to a function end label instead. Make genamode() check for odd addresses, also reduce code duplication. Interpret getv parameter so that data is fetched if getv == 1, and the address is checked if getv != 0. Remove exception 3 checks from get_long() etc. Get rid of buserr. cpuopti.c: Make a few more checks whether optimization is possible. Add code to undo GCC's epilogue scheduling. newcpu.c: Split all the specialflag handling into new function. Implement -w option as in Win32 port. tui.c: add it to misc menu. 907621 Fix yesterday's CPU emulator changes. Make cpuopti aware of functions with two RET insns. Make sure that NO_EXCEPTION_3 and NO_PREFETCH_BUFFER are on when emulating a 68020. Add usage information for src/dst operands to table68k. Implement CIA A OVL bit properly. 970620 New NeXTwin.m from Ian. Fix a number of prefetch bugs in gencpu.c. newcpu.h: m68k_incpc(), get_i{byte,word,long}: New function/macros. Also add oldpc parameter to m68k_do_[bj]sr(). gencpu.c: use all this. CPU functions now don't use nextiword; they keep the PC constant and increment it with the right value at the end. If chipmem_size > 2MB, disable fastmem. In configure.in and od-linux/joystick.c, use ljoystick.h as name for the replacement file for a broken configure.in: Check for post-gcc-2.7.2 option "-mno-schedule-prologue" and use it for compiling the optimized CPU files if it exists. 970618 Rename hardfile.device to uaehf.device to avoid name clashes. Suggested by George Nicolaidis. Reimplement CPU prefetch by making gencpu aware of it so it generates code that fetches data from the right places automatically. Also reduce prefetch length to 4 bytes. 970612 memory.h: Include osdep/memory.h. missing.c: implement xmalloc(). Throughout: use xmalloc instead of malloc. Apply changes by Sam Devulder. 970608 Fix ncurses.c so that it links. Fix configure so that it can be enabled Get rid of spixstate by implementing a new sprite drawing method. 970607 do_copper_cheat(): New function, Implement inaccurate, line-based copper as an option (-C). calc_copcomp_true(): Fix possible hr 4 plane bug (split the wait into several pieces in this mode). Allow 0 bytes for fast and bogomem (to override .uaerc) 970606 Fix some bugs in transdisk, and make it compile with SAS C (Joanne Dow) Stupid compilation fixes: Get rid of "==" in shell scripts, check that B300 and friends are defined in serial.c before using them. Implement blitter prefetch. Fix silly typo in main.c that prevented immediate blits. init_ham_decoding(): new function, handles case where the first few pixels of a HAM display are outside the window. 970605 disk.c: Get rid of need_read. Save cylinder/track number for the data in the MFM buffer for each drive. Force rereads on disk insert and write operations. In drive_fill_bigbuf(), do nothing if saved data matches current. Fix disk change logic: give the program time to read the change bit a couple of times before inserting a new disk. custom.c: Fix really subtle bug: when deciding a line as border, plfstrt/plflinelen were not set up properly, which could confuse post_decide_line(), and eventually there would be lines decided as playfield with plfstrt == 0, plflinelen == -32 ==> Bang. A related bug was that setting DDFSTRT to 0 would result in both plfstrt and plfstop having value 0. gfxutil.c: Fix bug that could cause color values to go out of bounds. xwin.c, svga.c: When dithering, color values were not doubled properly. 970604 filesys.c: when deleting an a_ino, remove it from hash table (Mathias Ortmann). In do_find(), if creating a file failed and we didn't have an a_ino before, call delete_aino on the one we created. More configure changes: Add $X_PRE_LIBS and $X_EXTRA_LIBS in some places. See if MIT-SHM support for X will compile and link. Always compile it in if it will. Turn DONT_WANT_SHM and LOW_BANDWIDTH into run-time options (-T, -L). Use single line buffer when dithering and in low-bandwidth mode (but in all cases there's a full buffer for the X image). memory.c: Don't map in custom regs at 0x200000 if chipmem_size > 2MB. Split up init_sound(): new function setup_sound(). Make "-B" accept minimum and maximum values as in Gustavo's latest patch. Add code to tui.c to support changing buffer size, number of bits and frequency. 970603 If using compiler, define NO_EXCEPTION_3 and NO_PREFETCH_BUFFER. (bugreport by Raphael Poss). GGI support from Christian Schmitt/Stefan Reinauer. More serial patches from Stefan. 3 button joystick patch from Mathias. Add linemem field to gfxvidinfo, for systems that don't want to keep a buffer of the full screen. Adjust custom.c to use it instead of bufmem if it's not NULL (mostly by Mathias). svga.c, xwin.c: Use single line buffer in some cases. xwin.c: If USE_DGA_EXTENSION, undef LOW_BANDWIDTH. Move test of DONT_WANT_SHM after inclusion of config.h Make configure.in a bit more structured. Move colormodes array to main.c. 970602 gfxlib.c: Start implementing layers workalike. md-i386-gcc/support.c: Don't mix sleep and alarm. (Petter Schau) 970601 Remove may_run_compiled. Print error and abort if m68k_go is called twice. Fix yesterdays bugfix in svga.c. Change FRAME_RATE_HACK so it tries to average the times a bit. Re-implement a call_m68k function in autoconf.c. The new version works by doing some heavy setjmp/longjmp magic and switching stacks. With this, it's even possible to call things that Wait(), so use the new functionality in gfxlib.c to call LockLayer() in WritePixel(). 970531 Turn some inline functions in memory.h into macros. Get rid of get_along and get_aword. Implement CIA A OVL bit. main.c: Add missing close_sound() call. Remove INTEL_FLAG_OPT, use X86_ASSEMBLY for everything. tui.c/svgancui.c: Implement scrollable menus. Add code to select video mode from a given list. Add "graphics_setup" call to graphics specific files. Use it in svga.c to build a video mode menu. Fix bug in svga.c that would crash non-linear modes. disk.c needs to include gensound.h and sounddep/sound.h. Fix bug in fuzzy_memset. In pfield_init_linetoscr, always adjust ddf values if lores hack is being used. 970530 Apply some patches by Samuel Devulder. 970529 filesys.c: In "Houston, we have a problem" case, do not only delete the oldest ExKey, but also use it instead of random memory for the new one. Attempt to reduce the number of lost exkeys by allocating them in action_examine_next instead of action_examine_object. Initialize the "uniq" field of unit->rootnode. Attempt to speed up sprite drawing loop. Implement sprite<->sprite collisions. Get rid of -Wtraditional. 970524 New config option NO_PREFETCH_BUFFER. Emulate 16 byte prefetch if unset. For exception 3, the stack frame seems to be: (saved SR).w, (faulting address).l, (faulting instruction).w, 0.w, (pc at fault time).l. Make everything that could generate this fault handle it properly. That got Cybernoid II working! 970523 Makefile.in: Make sure $(DEBUGFLAGS) is used for CPU emulation files. memory.c: Don't map chipmem at 0x200000, use custom chip bank for now. 970507 configure.in: Mutate ac_cv_c_inline=no to ac_cv_c_inline= Check for tcgetattr, , cfmakeraw, Check for sem_init in -lposix4 (Marc Zimmermann) serial.c, cia.c, cia.h, serial.c: changes (Stefan Reinauer) Make disk gap 360 (Michael Krause) 970404 In configure, check for features.h before including it in test program. 970401 New option -4. Bugreport by Mirko Viviani. 970324 Petter Schau says the exception frame for Bus Error and Address Error is 14 bytes, not 6, on the 68000. Change Exception() accordingly. It's *** OUCH *** day! Make hardfile beginio return the correct value. Also load execbase before calling ReplyMsg(). It's *** OUCH *** day again! The filesystem asm code was an odd number of bytes, leaving the hardfile code unaligned. 970318 custom.c: Rename spron to sprst, and use new variable spron to indicate for which sprites the sprite pointer registers have been written. Don't do sprite DMA if spron==0. (The problem was that some programs write SPRxCTL and then SPRxPT, which used to set the sprite state to SPR_restart, but it must be SPR_waiting_start.) Turn a few m68k_reset()s into uae_reset()s. New variable nr_joysticks. Delete joystickpresent. New arg "nr" for getjoystate() and read_joystick(). New extra keycode AK_RCTRL. Handle multiple joysticks & different key replacements in keybuf.c/custom.c. Make tui.c handle all the settings. 970310 od-linux/joystick.c now compiles again without the joystick header. Fix some problems in configure; also check whether [n]curses.h defines attr_t. Keep count of warnings and errors during configuration and print a hopefully helpful message at the end. disk.c sanitized by Mathias Ortmann. Change the replacement getopt around a bit. execlib.c, timerdev.c: Files removed. This will never be compatible enough. Also remove related code (several SPCFLAGs, etc.) Make main.c a bit nicer by introducing additional defines for the t-* files. Also canonicalize the .uaerc file on all systems, eliminating lines starting with '#' in the process. Remove code in autoconf.c to set up 8MB chip; move it to filesys.asm. Try doing the copper end-of-line hack in copper_memory_cycles(). Disable the copper speedup hack. 970309 Add a small, dumb hash table to struct _unit to speed up repeated aino lookups. Delete aino in action_delete_object(). Move children in action_rename_object(). In action_examine_next(), call new function lookup_child_aino_for_exnext() which behaves more or less like lookup_child_aino(), except it uses new function get_aname() to translate filenames. More portability fixes. New links set up in configure: sounddep, target.h. All machine-dependent and joystick code removed from os.c, renamed to audio.c. os.h renamed to audio.h, joystick stuff moved to joystick.h. New directory targets/. missing.c: New file. 970308 Rewrite filesystem. Now it keeps one unique "a_inode" structure for every object in the filesystem. This contains Amiga name, native name, Amiga permissions, lock counts and several links for building a tree structure. Keys are now made only for files which need a fd and a file position. Treat invalid locking modes als shared. Comment out the code using readdir_r because that function appears to be broken in glibc-2.0.1. Clear RES2 in all packets before handling them. Give mousehack the same task priority as the input.device. Fix (?) some silly bugs in disk.c. 970307 Include some Acorn port code from Peter Teichmann. Yet Another Serial Diff from Stefan. 970306 filesys.c: Don't just crash if lookup_key() has no success. action_find_write() is supposed to create the file if it does not exist. 970305 More DOS patches. Make the Makefile parallel-make safe. svgancui.c: Do cyclic search if character is typed in file selector. my_alphasort(): New function (work around glibc bug) custom.c: Fix error in yesterdays change. filesys.h: New file. 970304 New serial patch from Stefan and Christian. Remove the assembler code to generate inputevents. Instead, add a new Amiga C program ("mousehack") which does the trick. New function mousehack_helper() in custom.c, activated by calltrap 0xF0FF70. Mouse default is now always normal_mouse, not follow_mouse. Do disk change checks only every 1/2 second. disk.c: Reverse nodskchange to dskchange, and make sure there has been a step with the drive empty before calling drive_insert() from DISK_check_change() (but this _still_ doesn't work. Arrrghh). 970303 filesys.c: Initialize _all_ of struct _unit in startup_handler(). Remove message_lock and friends and use new variables cmds_sent, cmds_acked and cmds_completed to determine when to send dummy messages. Changed examinekey handling so that "dir all" on a large tree doesn't crash anymore (it used to reuse the top-level exkeys which were still in use after a wraparound). Don't allocate examinekeys if we're examining files. Check for readdir_r in configure. Use a wrapper my_readdir() around either readdir or readdir_r. Call filesys_reset() also from filesys_diagentry(). Get rid of most of uaelib.c. Now there isn't a library, just a calltrap at 0xF0FF60. Changed uae_pragmas.h accordingly and recompiled uaectrl. Added a bunch of "volatile"s in various places in filesys.c and penguin.h. Make the filesystem reset-safe in the threaded case (paranoia changes). Check disk changes only every 1/10 second in vsync_handler(). Add assembler code to generate InputEvents once every vblank to filesys.asm. (Doesn't work yet.) 970302 filesys.c: Get rid of DosPacket type, pass pointers into Amiga memory instead. Use GET_PCK_* and PUT_PCK_* macros to access fields. Start making filesystem code thread safe & multithreaded. Move static variables from some functions into struct _unit, likewise the key and exkey variables. Add code to filesys.asm to queue commands which did not complete and to reply to them later. Do multithreading if compiled with SUPPORT_THREADS. See source for details. Change hardfile and uaelib code not to call 68k routines. Make emulator traps more efficient (no need to save regs, don't need SPCFLAG_EMULTRAP anymore). 970301 Fixed ncurses.c so it works with currprefs. filesys_reset(): New function, called from customreset(). Changed source layout. Break up machdep into machdep, osdep and threaddep. penguin.h: Now supports arbitrary types in pipes. Changed filesys.c so that no 68k code is called from native C code. filesys.asm, filesys.sh: New files. filesys.asm contains some startup code and the main loop for the filesystem. Several locks are allocated by the assembler code for use by the C code. DOS_AllocMem(), DOS_FreeMem(), make_dev(), build_parmpacket(), filesys_init(): Functions removed. 970228 ncurses.c: Fix problem in b/w modes. finish_drawing_frame(): Don't need to draw lines in multipenguin mode. Move all options into new struct uae_prefs. New variables currprefs, changed_prefs. svgancui.c, tui_filereq(): If user presses a key, start search at current position, not at the beginning. DISK_check_change(): new function, compares currprefs with changed_prefs and handles diskchanges if they differ. Called from vsync_handler(). DISK_validate_filename(): new function, checks whether a file exists. Modify svga.c and tui.c so that F11 now brings up a limited UI. 970227 Reimplement Mathias Ortmann's frame rate hack: New option HAVE_RDTSC in config.h. New typedef frame_time_t. New variables vsynctime and vsyncmintime. New function machdep_init() in md-*/support.c which sets up vsynctime in the md-i386-gcc and md-i386-linux cases. Use all of those in events.h, do_cycles() to determine whether to spend more time on the CPU emulation. Add missing "int i;" to xwin.c, init_colors(). Unroll some loops in sample_*handler(). Improve quitting/resetting behaviour: Move quit_program from GUI specific files to main.c. New functions uae_reset() and uae_quit(), quit_program is now handled in vsync_handler() and m68k_go(). New variable sample_evtime, used in customreset() and set up in init_sound(). 970226 Solaris sound update from Manfred Thole. keybuf.c: Decided that it doesn't need locking after all. Add a bunch of Gustavo's latest diffs. (I hate CR characters!) Move gfxvidinfo from all the target-specific files to custom.c More Win32 stuff: New function notice_new_xcolors(). 970225 configure.in: In shell string comparisons, always put spaces around = Add warning about standard SVGAlib being incompatible with LinuxThreads. os.c, SOLARIS_SOUND: Remove reference to obsolete variable smplcnt. Two new variables sound8_base and sound16_base. sysdeps.h: Split off some stuff into md-amiga/amiga-kludges.h. Also make the main types now uae_u32 and variants instead of ULONG, etc. Convert some files to use the new types. cia.c: use int/long instead of ULONG/UWORD/etc for most static vars. xdebug.c: Some cleanup. md-i386-linux/penguin.h: Fix bug. Add "chunks" parameter to init_comm_pipe. Use it to decide in write routine whether to signal the other thread if it's waiting. Add no_buffer parameter to write_comm_pipe_int. Start adding Mathias Ortmann's Win32 patches. md-i386-win32: New directory include/sysconfig.h.win32: New file custom.c: is_lastline: new variable, set in hsync_handler(). sysdeps.h: Make it possible for system specific code to say that POSIX/ANSI stdio/malloc functions aren't present and are defined by a system-specific file instead. In filesys.c, don't reference errno if DONT_HAVE_POSIX is defined. readcpu.h: Kludge around the fact that Messysoft C apparently doesn't handle enums properly. newcpu.c/sysdeps.h: Preprocessor magic for 64 bit constants to get around a problem with MS C. md-*/penguin.h: Add dummy definitions for semaphores. keybuf.c: Use semaphores to synchronize access. os.c, win32 sound stuff: add memcpy avoidance code. 970221 X86.S: Don't use .type ifdef USE_UNDERSCORE. Move thread support configuration to configure from config.h. Change pipe implementation to use POSIX semaphore functions. 970217 From Samuel Devulder: Fix off-by-one error in LINE_TO_SCR, EHB case. 970215 customreset(): Initialize current_colors.color_regs to invalid values [reported by Samuel Devulder]. config.h: Uncomment ECS_DENISE [reported by Mathias Ortmann]. Add ami-win.c and custom.c patch from Samuel Devulder. 970213 disk.c: Set FLOPPY_SPEED to 3 custom.c: SPRxCTL_1(): if spron was SPR_restart set it to SPR_waiting_start. do_sprites(): don't do that. SPRxPT{H,L}: Call decide_line(). 970210 custom.c, X86.S: Do LORES_HACK for dual playfield screens. Plug memory leak in custom_reset(). Fix pfield_draw_line() not to do so many multiplications. Make line_changed a char array. In remember_ctable(), remember comparison results also if negative. In 8 and 16 bit graphics modes, use the high parts of the color values to duplicate the actual values. This saves a lot of code in the hdoubling routines. Add a special fill_line in the X86_ASSEMBLY case. Check for glibc-2 and libpthread in configure. options.h: In fuzzy_memset(), do rounding slightly more conservative. Add tons of new keycodes to svga.c In record_color_change(), also check if vertically outside DIW. New variable hdiwstate, to represent the horizontal DIW state machine (thanks Petter!) Handled in reset_decisions(), finish_decisions() and decide_diw(). 970209 Change ncurses.c not to do so many multiplications/divisions. Add bold character support. Add color support. Make configure recognize --without-svgalib and enable ncurses.c in that case. 970208 X86.S, custom.c: Do LORES_HACK for EHB screens also. New function write_log(); convert some fprintf(stderr, ...) calls. 970207 Argh, Linux/i386/ELF check in configure got broken by latest sh-utils. In disk.c, drive_reset(), clear nodskchange flag. 970206 Sprite fix from Mathias Ortmann: _really_ get rid of SPR_vtop, and replace all uses by SPR_stop. 970204 Disk change fix from Mathias Ortmann. 970203 New file ncurses.c, from Samuel Devulder. Disabled Exec stuff completely. Now it isn't even compiled in anymore. 970129 Changes from Samuel Devulder for Amiga and Christian Bauer for BeBox. 970122 Reorder the set_planes_unaligned functions so that better code is generated. Remove the or_planes_unaligned functions, add a parameter do_or to the set_planes functions and rely on the compiler to optimize the additional if away. post_decide_line() can now turn DMA off early. Make struct flag_struct 64 bits large for i386 systems, so we can use long move insns without clobbering the X flag. "make clean" should delete machdep/support.o. Maybe we do need SPR_vtop after all - undo 970120 change. Instead, comment out the code that clears the pos and ctl words at vsync time. In xwin.c, restrict window height to 300 or 600 depending on linedbl mode. 970121 Get rid of SPCFLAG_BLIT, call do_blitter() directly. In finish_decisions(), don't check for sprite draws in the border. Reimplement the SMART_UPDATE define so that the memcmpy() overhead can be avoided by not setting it (but this usually loses). Detect 7 lores planes in BPLCON0() and change to 6 to avoid memory clobbers. In pfield_draw_line(), do memcpy linedoubling after handling the line to be doubled, not when we see a LINE_AS_PREVIOUS. Get rid of prev_ypos parameter. Add special code for bpldelay1 == bpldelay2 to the UNALIGNED_PROFITABLE code. In pfield_init_linetoscr(), when delays 1 and 2 differ, clear the areas which are covered only by half of the planes at the start and end of the DDF area. Replace FASTER_CPU and LINUX_SOUND_SLOW_MACHINE with M68K_SPEED. Replace fast_unaligned_memset macros with fuzzy_memset; use this also in pfield_init_linetoscr(). Use real (PAL) vblank end in do_sprites(). 970120 Mask out high byte in DDF{STRT,STOP} Oops, forgot about long frames while calculating the bounds of all the maxvpos*2-sized arrays. Increment them all by two. Try to detect empty sprites before recording them for the drawing code, but be careful not to hurt attached sprites. From Paul Kienitz: hack for keyboard code in cia.c to work better with newer Kickstarts; small cleanup in cpuopti.c. Undo yesterday's change in copper_memory_cycles(), instead call decide_line() each iteration and test whether copper_cycle_time == -1 to determine whether we're vertically in the DIW. calculate_copper_cycle_time() could get astronomical plane counts due to missing masking operation. No need to put the copper to sleep for one memory cycle after a WAIT, merge that with the two cycles for the next instruction. Get rid of SPR_vtop, no longer needed (it was unnatural anyway) 970119 Implemented alternate pfield_doline functions that access the apixels array at unaligned addresses; conditional on UNALIGNED_PROFITABLE. Move LORES_HACK from config.h to custom.c. Fix loop exit test for pfield_linetoscr_hdouble_asm8(). Clear the right parts of apixels in pfield_init_linetoscr() when LORES_HACK is enabled. Get rid of bordercol array: the decision-making code should handle lines in the border correctly by setting line_changed. Disable bitplane DMA if more than 4 hires bitplanes are set in BPLCON0. Fix some more copper timing inaccuracies: used to test thisline_decision.which without calling decide_line() before. 970118 Now remember BPLCON1 changes during data fetch. New functions decide_delay(), pfield_adjust_delay(); new fields in struct drawinfo and new variables next_delay_change, delay_changes. Forgot to set copstate to COP_morewait in one case in do_copper(). Add a kludge that checks for copper position 0xDC and changes it to 0xDE. Restore equality test for vertical sprite positions. Disable sprite DMA before the end of the vertical blank area. Mask not only the positions, but also comparison values in calc_copcomp_true(). 970117 Change custom_bput to put the byte value in each half of the word that is put. 970116 disk.c: Set the gap between sector 11 and 0 to 380 words. Andromeda's "Seven Seas" demo expects at least 320. Make the KILLEHB bit conditional on AGA_CHIPSET. Decide BPLCON1 (scrolling delays) in decide_diw(). Fix off-by-one errors in the very_broken_program case of decide_plane(). Fix aspect calculation when horizontal resolutions differ. Simplify copper horizontal comparison logic slightly. Fix divide by zero errors when reading from empty floppies. 970115 pfield_draw_line(): Check for frame_redraw_necessary also for border lines. New global variable pfield_last_drawn_line, used to implement clever Y centering. Make the KILLEHB test conditional on ECS_AGNUS. Move joystick and sound initialization before gui startup. Adapt tui.c so it understands the gfx_requested_* options. We can't always avoid clearing pixdata.apixels if DIW is larger than DDF. There may be sprites in the area outside DDF, but inside the DIW, so we can't just adjust linetoscr_diw_{start,end} blindly in pfield_init_linetoscr() [Sanity Arte demo]. 970114 Bebox diffs from Christian Bauer. Support for Symmetric Multi Penguins under Linux (start second thread with clone and use some pipes for communication - rather simpleminded for now). Rework do_flush_line() and do_flush_screen() so that X libraries are only called from the first thread. Eliminate valid field from struct decision (set which to -2 instead of valid = 0) Fix definition for gui_filename() in xdebug.c to use const char * for the second parameter. Remove CRs from disk.c (now how did they get in there??). Likewise for cpuopti.c. 970113 When post_decide_line() detects mid-line DDF change, must adjust bitplane pointers in decide_plane() also. Make plfstrt the earlier a position in this case, and adjust bitplane pointers/modulos accordingly. current_hpos() isn't what GCC calls a constant function. Replace line_drawinfo[current_change_set] with new variable curr_drawinfo throughout. Likewise for new variables prev_drawinfo, {curr,prev}_{color_{change,table}s,sprite_positions}; all initialized in init_drawing_frame (). Turn line_data into a 2dim. array, do some CSE/SR on line_data[lineno] in pfield_doline_{l,h}() and decide_plane(). Make some custom registers unsigned int instead of UWORD. calc_copcomp_true(): Masking with 0xF000 isn't likely to give 0xC0000. Comment out bplcon{3,4} from struct decision. 970112 filesys.c, action_set_protect(): if __unix is defined, check whether user wants to change directory protection, and if so, force rwx to be the new protection. Force sane window sizes in xwin.c, and set width/height from mode specs in svga.c. Implement LORES_HACK compile-time option. Whee, there _are_ broken programs that enable bitplane DMA in the middle of the data fetch area, draw half a picture on the first line and the full picture on all subsequent lines. New function post_decide_line(), called from BPLCON0() and DMACON() which tries to detect this case and turns the decision from border to playfield if necessary. New arrays, sprvstart and sprvstop, calculated in SPRxPOS and SPRxCTL, and used by do_sprites. Handle sprites with vstart == vstop correctly. Sprite vpos comparisons are now done with <= , not ==. _Now_ the X86-specific linetoscr routines do their masking correctly. configure: If we have GCC, #define GCCCONSTFUNC as __attribute__ ((const)) 970111 Eliminate can_draw from struct decision. Change vertical DIW code; use enum of two states (waiting for start and for stop) which is updated in decide_line(). Lines during the wait for stop phase are decided as border. No data is fetched outside the vertical DIW. Optimize copper memory cycle calculation a little: the new variable copper_cycle_time is set to a time >= 0 if this time is constant (i.e. 2). Calculated whenever DMA, BPLCON0, or DIW state changes. blitter.c, genblitter.c, custom.c: For BLTBDAT, follow the HRM which says that immediate data is shifted as soon as it is written. This seems to be wrong for the A channel, though. Also, don't change prevb during blitter loops if DMA B is off (Sanity Arte). Turn FAST_BLITTER stuff into run-time option "-n", and eliminate the ancient blitting code (former FAST_BLITTER == 0). Big OOPS: Copper move checked copcon, but there was no COPCON function so it was always zero -> copper-controlled blitter never worked. As a speed optimization, recognize 00010000 copper commands and put the copper to sleep until the blit is finished. Slow down the blitter in decide_line() if bitplane DMA steals blitter/ copper/CPU cycles (but this code is commented out for now). 970110 New function pfield_init_linetoscr(). Move calculation of diw_end and diw_start values there from x86-specific code. Also use DDF values to determine where data in pixdata.apixels is valid. The x86-specific linetoscr routines now only do the alignment masking (and they now do it correctly, too). Got rid of the display-related contents of struct draw_info, make static variables and them initialize from pfield_draw_line() only when necessary in function pfield_expand_dp_bplcon (). Get rid of the four saved_* arrays, remember line_drawinfo instead now that it's smaller. Color compare avoidance didn't work because color_src_match didn't get set when a compare was successful. Fixed. Reorder parts of the decision-making code so that less redundant checks are performed. Add clever x centering. Change "-O" option parameter format. In md-i386-linux/support.c, memcmpy(), do memcmp() first, then switch to a plain memcpy routine once we find the first difference. Patches from Stefan Reinauer/Christian Schmitt for xdebug.c/configure.in New uae-ui.tk from Volker Zota. Add --enable-profiling to configure.in. Check for period==0 in AUDxPER() was accidentally commented out - revert. 970109 Some tweaks in X86.S, plus a new option X86_PPRO_OPT to use movzbl instead of xorl/movb when possible. Fix maxline calculation in finish_drawing_frame(). Make next_lineno always a valid array index. Decrease minfirstline to 21 (NTSC vblank end). New option -O to specify display parameters, supersedes -d and -C which will be removed eventually. Differentiate between line doubling and aspect correction. Put aspect correction code in custom.c. Remove some more unused stuff from custom.c. Fix Makefile problems when cpuopti isn't used. 970108 use_lores isn't initialized before custom_init(), setup lores_frame and friends in customreset(). Optimize spixstate clearing. Optimize border drawing with copper color changes (use fill_line instead of linetoscr) Fix the sprite DMA logic, it now works with the Interference demo. Silly bug: Sprite 7 never got displayed (introduced sometime last week) Implement USER_PROGRAMS_BEHAVE for normal (non-compiler) CPU emulation. Add most of Gustavo's last patch (new dir md-i386-dos) 970107 Finish rewriting most of the drawing code in custom.c/X86.S. See README.PROGRAMMERS and source for details. Improvements include better copper precision, better interlace support, hopefully much less bugs and not too many new ones. Remove calc_adjustment() and gfxvidinfo.x_adjust; replace with code in custom.c that looks at gfxvidinfo.follow_diwstop (new field) Some operations (like EHB playfields) now have a higher penalty than before, the assumption being that these are rare and the normal case runs faster if it doesn't have to care too much about exceptions. Fix sign mismatch bug in BPL1MOD() and BPL2MOD(). 970104 Move x_ShowEA() from xdebug.c in newcpu.c, rename as ShowEA(). 970102 Add check for XK_W to decode_es() in xwin.c. New uae-ui.tk from Volker Zota. 961218 Add a patch by Bernie Solomon to overcome a problem with K&R compilers. Change X86.S in a way that may make it either faster or slower. Fix ADF_EXT1. 961217 #ifdef XK_dead_*, since Solaris doesn't have it. 961202 Fixed joystick.h problem in configure. X11/DGA support from Kai Kollmorgen. 961117 Some fixes in svgancui.c. 961112 Gustavo's latest patch, with GUS support for DOS by Michael Sontheimer. Add menu browsing to tui.c/svgancui.c 961107 Fix m68k_areg and m68k_dreg macros (put args in parentheses) Initialize gfxvidinfo.maxlinetoscr in xwin.c (found by Sam Devulder) 961104 svgancui.c tui_refresh() routine tweaked to work with the non-standard ncurses that came with my new SuSE-Linux CD. 961031 Added Christian Schmitt's xdebug.c (disabled for this release) 961024 Module search function from Michael Krause. 961019 Add Samuel Devulder's Amiga patches. 961018 Don't use -lm on NeXTStep. 961017 configure checks for -lforms. 961016 Ian Stephenson's new NeXTwin.m. Make CLXDAT return 0 (no collisions) transdisk and transrom patches from Rodney Hester. Don't warn about 256K Kickstarts. Check diskfile sizes and try to determine whether it's a normal or a HD diskfile. No HD drive identification yet (is it different?) 961013 Corrected lots of bugs in the return address stack. Fix some errors in the compiler memory management. Use the "locked" flag for hash entries differently, and don't enforce it on a cache flush. Compile JMP to a constant address. 961012 Remove regs from cache before sign extending them for ADDA, MOVEA and similar things. Compile NOPs to nothing. Implement variable shifts/ rotates. Most shifts clear the V flag: Handle this in the compiler by some extra magic sequences after shifts or in the CC_AFTER_RO case in flush_cc_cache(). Implement a stack containing return addresses and their hash entries, and compile JSR (to constant addresses)/BSR/RTS instructions inline. 961011 compiler.c: Several bugs introduced in the last two days fixed. New function compile_note_modify() which is used when an ea is modified. This replaces calls to storeea with eaino_s == eaino_d. Bah, the 386 doesn't set flags on a NOT. Use CC_TEST_REG again. Do flag life analysis until no more changes are found. Make sure all "data" parts of EAs are locked exclusively (esp. for LEA, PEA) 961010 compiler.c: Finish yesterdays changes. Get rid of reg/offset bookkeeping in m68k_compile_block(), keep the information in struct ea_info instead. Rewrite all instructions to use the new fetch and store routines. Don't force a byteorder conversion in sync_reg() if the reg doesn't need to be written back. Don't do a SAHF or equivalent in compile_condbranch if we are doing a BRA or BF. Don't use CC_TEST_REG for NEG and NOT (this was inefficient for NOT and wrong for NEG). 961009 compiler.c: Two types of locks for registers; shared and exclusive. Implement better EA fetching and storing routines. For pdi addressing modes, lock the necessary registers shared before calling prepareea. Unlock those registers again in generate_possible_exit(). 961008 MOVEM instructions in the compiler to an absolute address could have caused random memory corruption. 961007 Spanish keyboard support for X by Ruben Martinez. Some configure fixes (don't assume current dir is in path, don't assume ncurses.h exists if libncurses does). If we're calling 68k code from an emulator function, don't use compiled code. Add a compilation option USER_PROGRAMS_BEHAVE (for compiler). Make compiler hash table larger. 961004 Fix typo in configure.in. Modify the compiler so it doesn't ever throw away code, unless it's necessary for a cache flush. Didn't quite squash the compiler flag bug yesterday. Try again. In filesys.c, do_find(), add a parameter fallback that indicates that the open should be retried with O_RDONLY if it failed with O_RDWR. Use this in find_input(). This fixes problems with r/o files on r/w volumes. 961003 Play around with the x86 specific memory access functions. Problem: __attribute__((regparam)) isn't reliable, and it seems that that's a rather hard to fix bug in GCC. Add some alternatives to md-i386-linux/memory.h; these aren't used yet though. Huh, the compiler was completely wrong about the flag needs of conditional instructions. I wonder how it could work at all... Remove a and d arrays from struct regstruct; replace with array regs with 16 elements. This allows better code for get_disp_ea() 961002 BeBox diffs from Christian Bauer. Move all code from main() to new function real_main(). 961001 Use do_get_mem_*() functions for nextiword(), nextilong() and new function nextibyte(). 960930 genblitter optimizations: Don't generate expressions in genblitter, use a second program called gengenblitter to generate a table of expressions for genblitter to use. gengenblitter knows about a lot of rules to simplify expressions. Some other tweaks to make GCC output better assembly for blitfunc.c. 960927 Turn off LED() in xwin.c (may fix SunOS joystick emulation problems) Call XFlush() and XSync() when exiting. Add some DOS patches. Add hooks in filesys.c to support filesystem units in a GUI. Use them in tui.c. Bugfixes in svgancui.c. Change the way tui_refresh() works. New option "-A". 960925 For read-only filesystems (CD...), use O_RDONLY in action_find_input. 960923 Save options file even if rename fails. Mirror address space every 16MB like we used to (got turned off by accident). Move some checks out of options.h into configure. Set up md-* directories with machine-dependent stuff in them; configure creates a link called machdep to the appropriate one. 960918 Solaris sound update from Manfred Thole. 960917 Add a timer.device replacement (buggy). 960916 Tristan Cavelier's french keyboard patch. Apply ReadTheSpecsBeforeYouWrite(tm) technology to AddPort(). Implement RemPort(), GetCC(). 960915 Tighten up some of the return values in Exec. 960914 EXEC: Implement RemTask(), ObtainSemaphoreList() and ReleaseSemaphoreList(). Set up more fields of the ExecBase properly and Enqueue it in the library list. Make InitResident call AddLibrary when appropriate (otherwise, intuition is never put into the library list). Fix major braino in Obtain/ReleaseSemaphore() (tried to Enqueue tasks into two lists). Make OpenLibrary() honor the version parameter. 960913 EXEC: Idle task now runs in user mode (abuse 0xFF0D as second STOP instruction). Make EXEC_IntTrap perform the RTE before trying to schedule. 960912 Solaris sound didn't compile. So much for making blind changes without being able to test them. 960911 As soon as you compile it under Solaris, it bombs... Now check that the hardfile exists before determining the size in main.c. execlib fixes: Set master DMA enable bit at startup, fix interrupt code to survive an interrupt that occurs before the proper SetIntVector call. Implement RawDoFmt(), CloseDevice(), CloseLibrary(), FindResident(). 960905 Lower 8 bits of POTGOR should be 0. 960904 Implement MULU, MULS, ADDX and SUBX in compiler. 960903 ncurses interface works. DOS people: please use the new portable tui.c and turn dos-ui.c into a frontend for conio.h, similar to svgancui.c In xui.c, unlink the temporary files ASAP. Two new command-line options, "-o" and "-G". Get rid of sz_unknown. compiler.h, compiler.c: New files. filesys.c, action_read(): Added a hack to test whether the first four bytes read from a file a file contain 0x000003F3 (HUNK_HEADER), in which case there's probably a LoadSeg() call going on and we ought to flush the cache. Also, use the fact that memory is now linear. 960902 Struggle a bit with dos-ui.c, rename it to tui.c (text-based ui), add new file svgancui.c (ncurses ui) and try to make these two understand each other. 960829 New transdisk from Stefan Ropke (can write images) Apply Patrick Hanevolds BeBox patches. 96082x many changes to Exec. Still not booting (DMACON seems not to be set up properly, and sometimes Signal is called with task==0). 960821 Solaris sound from Manfred Thole. 960820 In filesys.c, get_fileinfo(), return volume name for top-level directory. 960819 Reimplement WritePixel(). Layer locking is still missing. 960818 Reverse meaning of -x flag for X11. More Exec code. Several changes to the main CPU loop and the way call traps work. 960817 Implement some simple Exec functions (Lists, AllocMem & friends) 960816 filesys.c fixes from David Varley. 960815 Implement graphics library region functions. 960814 Modify memory layout: All memory is linear now; get_real_address() returns a (UBYTE *). 960810 Add Gustavo's latest DOS code. In configure, include earlier for the sake of some *BSD. Add three options for sound code (bits, frequency, buffer size). Make -S option take a parameter; remove SPEED_UP_SIDMON_MODULES. New version of transrom (return 0, duh). 960805 Fixed the blitter line mode emulation (this time, really! I hope.) Thanks to Fabio Ciucci for a detailed description of the correct behaviour. 960730 Spent the last three days trying to make the filesystem emulation bootable by adding an expansion device for it. A fair bit of trial and error, but now it works! Even the hardfile now works with Kick 1.3, but you have to mount it manually after booting. hardfile.c, filesys.c, expansion.c and autoconf.c now are an entangled mess which badly needs to be cleaned up. We can now mount more than one filesystem even with Kick 1.3: we recognize them by param 2 of the startup packet, which has the same value as the dn_Startup field of the devicenode. Make Kickstart replacement work again (didn't like the CPU emulator changes) Include preliminary serial support from Stefan Reinauer. 960728 Fixed the scancodes for <> and #' keys in svga.c Apparently, CIA timer latches ought to be 0xFFFF after a reset (prevents Eagleplayer from crashing occasionally). #ifdeffed out a slightly weird call to INTREQ from RethinkICRB() 960727 Sound code rewritten again. Now uses events (five new ones). All modules seem to play correctly now. It's a bit slower, though. AF sound should work again, patches from Marcus Sundberg. 960723 ... and more CPU emulation bugs fixed by Herman. Added uae.library from Tauno Taipaleenmaki, plus support files in the "amiga" directory. Added some files for the XFree86/OS2 port from Krister Bergman. Reorganized all the directories. 960717 Add latest patch from Herman. More FAST_BLITTER options: 4 and 5. These finish the blit immediately. 960713 Call XAutoRepeatXXX() only if we know we want to change the state. 960709 Work around a few AIX bugs (ughhh... what a broken OS). New test for sys/select.h. In xui.c, don't try to communicate with a dead process. 960704 More bugfixes from Herman. Get rid of dummy_xlate(), use default_xlate() to abort with error. In svga.c, set correct_aspect to 0 if using lores. Change the Bcc exception 3 handling code a bit. Add new program "cpuopti" that takes gcc-generated assembly files and optimizes away unnecessary pushl/popl instructions on the x86. 960701 68020 exception handling & various bugfixes from Herman ten Brugge. In ersatz.c, use 0xFF0D instead of 0xF00D as trap opcode. Do MMU "emulation" (no-op MMU instructions, probably many cases decoded incorrectly). 960627 New file LIESMICH, with minimal German instructions. Somebody want to translate the docs to French, Spanish, Italian, all the Scandinavian languages, Hebrew, Polish, Dutch, Russian, Welsh, Gaelic and something Joe_Luser@aol.com understands? (No offense meant - I'm sure there are brillant minds using AOL. There must be.) 960626 In zfile.c, make sure we delete the temporary file even if file decompression fails. Reimplemented sound support, this time following the HRM closely. Seems to work fine most of the time, but occasionally loses drum beats in TFMX modules. do_sound() is now unconditional, it calls flush_sound_buffer(), which is system-dependent. This breaks everything except Linux sound for now :( Add Herman ten Brugge's 68020/68881 emulation code. FreeBSD chokes if sys/mount.h is included without sys/types.h. Fix the configure script. 960622 More work on AGA code. Removed 2-bit display routines from custom.c. Ian: please use dithering code. Make slowmem and chipmem sizes run-time configurable. Mask out the high bits in BLT?PTH(). Add exception 3 checks to Bcc/BSR instructions. Seems to be not quite correct yet. Completely rewrote the disk emulation. We now create a big track buffer full of MFM data, used in a cyclic fashion by DSKBYTR() and friends. The current position in the buffer is determined by the cycle counter. DMA reads are now done in one piece. Two new event types: ev_diskblk and ev_diskindex. ARRGGHH! The RSI demo has _completely_ broken disk loading routines. They start disk DMA on a block while the blitter is still working on the same memory region. In zfile.c, unlink() the temporary file directly after opening it so it will be freed by the OS as soon as we close it (or crash... :) 960621 Merge pfield_sprite_h() and pfield_sprite_l() into one function. Split off new files blitter.c and blitter.h from custom.c. Fixed null-pointer dereference in zfile.c when filename has no extension. Add new field maxline to gfxvidinfo that prevents writing past the screen buffer if it has less lines than expected. Modify the 256 color allocation routine to set nb_cols to the same value first for r,g and b; allocate everything as usual and fill the lost colors afterwards with those that have the greatest difference. 960620 For some extremely weird reason, it is faster to simply call the assembly-optimized pfield_linetoscr_full routines _twice_ to double the line than calling the new (also assembly-optimized) pfield_linetoscr_full_double routines, at least when writing directly into the framebuffer. If someone has a good theory why, let me know about it. Drawing into memory is faster with the _double routines, but not noticeably (about 1%). Consequence: Removed the new pfield_linetoscr_full_double assembly routines again. Add a "--disable-gui" option to configure. Add Samuel Devulder's dithering code. Provide support for mono and 16 color X servers. Put an assembly version of DitherLine() in X86.S. New color mode (3) available, tells UAE to use 256 colors and dither the image. This is meant for people who have only a 256 color X server available, but it works with the SVGA version, too. It's much slower than normal 256 color mode, though. Use the color allocation algorithm from the dither code in alloc_colors256(), too. 960619 New files: zfile.c and zfile.h, from Samuel Devulder. These provide transparent decompression of various compressed file formats. Enabled by configure only for Unix systems. Eliminate dont_want_aspect. New option "-C", sets correct_aspect. Make video mode 3 640x480, video mode 4 800x600. Honor correct_aspect in 320x400, 640x480 and 800x600 mode with SVGAlib. Add fields maxlinetoscr and x_adjust to gfxvidinfo. Rename pfield_slow_linetoscr() to pfield_do_linetoscr(). Use new fields in gfxvidinfo to enable writing directly to the framebuffer in resolutions with <800 horizontal pixels. New function pfield_do_linetoscr_full(), called when sure that full line update is being done. Move some of the usage() information into some target_specific_usage() functions, defined in the various system-specific files. Support lower resolutions with LOW_BANDWIDTH, too. memcpy() within screen memory is dog slow. Prevent some common cases: 1. Use fill_line() to double a line in the border. 2. Add a parameter to pfield_do_linetoscr_full() to indicate whether the line has to be doubled. New functions pfield_linetoscr_*_double_slow() that simply do a memcpy(), plus optimized ones in X86.S that are much faster by avoiding the copy. Smart update code could get confused by lores modes when prev_max_diwstop changed from one frame to the next. New variable frame_redraw_necessary, which acts as a counter. It's initialized to 2 in interlace mode to handle that case properly, too. Move sprite priority checks into pfield_sprite_?(), move HAM calculations into new function decode_ham6() to simplify the various linetoscr functions. Fixed a bug that would cause sprites to get deformed in some cases when they overlapped (never seen it). 960618 New file: dos-snd.c, from Gustavo. 960617 Release 0.6.0 960617 Fix memory clobber in X86.S when diwfirstword==0. Eliminate double test for HAVE_SYS_MOUNT_H in sysdeps.h. 960616 Handle programs that don't wait for the blitter by finishing a pending blit as soon as a blitter register is written to (regardless of DMACON, to be safe). Call gui_led only if the LED changed. 960615 Fixed dual playfield sprite priorities. Optimized dual playfield code in X86.S. More work on AGA code. Get joystick status only in vsync_handler to speed things up. Make blitter fill more intelligent with table lookups instead of loop. 960614 DOS update from Gustavo. Pass real bitplane pointer to bpl_data_differs(), don't calculate it again. 960610 Fixed silly INTEL_FLAG_OPT bug: The new __asm__ expressions use regflags, which is of course _regflags on a.out... More BeBox fixes from Christian. Make the CIA bank bigger (A0..BF) and relax the CIA A/B selection checks to make broken software (Kingsoft's Emerald Mine, reportedly) happy. Default framerate is now 1. 960603 New BeBox code from Christian. Fix test for ELF in configure.in. 960529 genblitter.c: generate blitfunc as a function taking ULONGs and returning an ULONG. This makes custom.o about 4500 bytes smaller on the x86 by removing worthless size prefixes, and should increase performance (better for the cache, and the P6 reportedly doesn't like 16 bit instructions anyway). memory.c: Load Kickstart in one block and swap bytes after that if necessary (eliminates the need for the special bebox load routine) custom.c: Some preliminary work for AGA support. 960528 Saw a real awful piece of code that detects the right mouse button by reading a value from POT0DAT, counting up to 25, reading from POT0DAT again, and deciding the button is pressed if the value changed. Urgl! Added POT0DAT() in custom.c ... Gustavo's latest patches. 960525 Do index pulse handling in CIA_hsync_handler(). Make sure bit 12 in INTREQ gets set on an index pulse. Don't call DISK_Index() for now, since this breaks the Workbench. The CIA code should _probably_ not be resetting the bits in INTREQ. Disable this as an experiment, let's see what breaks. 960524 Z flag handling for ABCD/SBCD/ADDX/SUBX was wrong (must be clear if not zero, was set if zero). Some other flag bugs in these functions fixed. 960523 gfxlib.c update from Christian Schmitt. Some new Mac code from Ernesto, still not all of it, though. Italian keyboard from Alessandro Bissacco. 960522 Fix the CHK instruction. Implement middle mouse button. 960515 Fix some Nextstep problems in configure.in. 960513 New Makefile target "streifenfrei" to remove all output from configure. Use autoconf 2.7; 2.9 is buggy. 960512 Remove BIG_ALIGNMENT hack. Remove superfluous pfield_fetchdata() call in pfield_doline_slow_l() that resulted in garbage on the screen. Move blttbl array from custom.h to genblitter.c Use new lookup tables imm8_table and areg_byteinc in CPU emulation instead of ?: expressions. GCC appears to generate better code if the opcode is passed as ULONG to the CPU emulation functions instead of as UWORD. Modify some of the flag emulation __asm__ statements so that GCC uses less registers for them. 960510 Cast malloc() results to char *, for C++ compilers. 960509 Use test for GCC and __i386__ in options.h to decide whether to use intel flag optimization. Use test for wish4.0 to decide whether to use the GUI. 960507 New bebox.cpp from Christian. AF sound patches from Marcus Sundberg. 960505 Fix the configuration stuff so it works. Fix some bugs in gfxlib.c 960504 Use GNU autoconf scripts to generate Makefile and sysconfig.h. Add new files sysdeps.h that includes the right system header files. Remove amiga.h and Makefile. 960502 More Next code from Ian (new Uae.app directory, 2 bit drawing for custom.c). 960501 Allow the sound driver to set the frequency to a value that is slightly different from the requested one. 960430 Added AmigaOS port from Olaf Barthel. 960427 Fixed single playfield sprite priorities in X86.S. 960426 Added new NeXTwin.m from Ian. Turn off the blitter delay in line mode. Added a CPU optimization from Olivier Raoul: gencpu now reads a file "insncount" that can be generated by UAE during execution and generates specific functions for the most common opcodes. Not documented yet. 960414 Reimplemented the fast disk emulation in a more sane way. Also it's only done for reads now. (Plus, it no longer works :-/ Need to work some more on this). In blitter emulation, defer not only the setting of the bltfinish bit, but actually defer the whole blit for the number of cycles it will take. This makes programs the clear the screen while it is still being displayed look much better. Changed supervisor mode handling around a bit (was messy). New DOS code from Gustavo. 960412 Removed smart update method 2. Added Alessandro Bissacco's blitter optimization patch. Fixed some sprite problems: during hysnc, clear sprpos and sprctl, and don't do_sprites() in line 0. 960409 Be a little more intelligent about when to call pfield_linetoscr() from pfield_doline_slow(). It's only necessary if a color register changed. If it can be deferred to the end of the line, use the the _full variants. Some CIA TOD fixes. Better transdisk, accepts first/last track parameters. 960405 New function memcmpy(), inline assembler for the i386. Compares two memory blocks and copies them at the same time. Used in bpl_data_differs. 960404 French keyboard from Tristan Cavelier. Parallel port emulation from Stefan Reinauer. Turn bpl?pt and r_bpl?pt into arrays, simplify some code using them. 960401 Some parts of Ernesto's new Mac sources. 960331 filesys.c: Close filedescriptors in free_key(). get_path() sometimes read uninitialized bytes. Minor cleanups all over the place. unchain_mnn() leaves sibling intact, but clobbers next. customreset() didn't care about that and crashed. Use the __asm__("intel_flag_lookup") magic not only for DOS. Support 320x300 for X (without LOW_BANDWIDTH). Add new function fast_memcmp(), defined as memcmp if __i386__ is undefined, otherwise a slightly optimized inline assembly function. 960329 Some bug fixes in gencpu.c 960328 Stupid programs write odd playfield modulos into the hw registers... Eek! Sometimes, linedescr[] was indexed with a negative value... Add a vpos >= minfirstline check to pfield_may_need_update(). I really need to rewrite this in Oberon... Don't turn off SHM when LOW_BANDWIDTH is selected. Keep the nextpos and linepos variables from pfield_doline_slow_?() as globals and initialize them in pfield_may_need_udpate(). Modified alloc_colors256() some more. Try to make sprite DMA follow the Amiga DMA slots more closely by adding a currhp parameter to do_sprites() and calling it at the end of a scanline or in pfield_may_need_update(). 960327 Added Gustavo's latest DOS code, as far as possible. Modified X86.S to use a macro SYM() to create symbol names either with underscore or without. Fixed some very silly SVGAlib lores bugs. Move screen 8 pixels up in low resolution. Use diwstop instead of diwstart to caclulate the DIW for 320x200 modes. Reset it not only in calcdiw(), but also in init_frame(). Speed up 256 color allocation a little bit. 960326 New function flush_block() in xwin.c and svga.c. Called from do_flush_line() and (new function) do_flush_screen(). Modify struct vidbuf_description, new member maxblocklines that records the maximum number of scanlines that do_flush_line() should collect before calling flush_block(). If it is zero, then flush_line() is used as before. This makes the special case stuff for SHM unnecessary, so it's removed. Fixed a stupid bug in events code: Put ev_hsync in front of ev_copper, so that do_copper gets called with hpos == 0 instead of hpos == 227 at the beginning of the line. New function init_frame() that sets up some variables, called from customreset() and vsync_handler(). Move smart update code to pfield_doline() from pfield_doline_h() and ..._l(). Clean up these two with a macro DO_ONE_PLANE, removing duplicate code. Implement big blits and ECS chip ids. New configuration options ECS_AGNUS and ECS_DENISE. Implement MOVEP. 960325 Before calling pfield_may_need_update(), make sure the value that was written to a register actually differs from the previous one. New expansion code from Stefan Reinauer. Modify struct mem_notify_node to contain a pointer to a valid bit instead of the valid bit itself, so that the playfield code has to check only one flag to decide whether to draw the line (SU method 2) 960324 The chip_flags approach has several problems. A flag may cover an area in memory that spans two scanlines, or several scanlines may use the same area in memory. Provide two other, different methods for the smart update: 1. Save all the bitplane data for each line and compare the chipmem with the saved data to decide whether an update is necessary. 2. Use a chain of memory_notify_node structs instead of a single bit for flags. Each scanline owns a set of these structs and chains them into the right place, and the chipmem_?put routines walk the chains and set the modified bit for each element. Unfortunately, both methods are slower than the old one. Especially the first one has some advantages though: it speeds up programs that clear the screen each update and write the same contents back, and it can speed up double-buffering programs at full framerate, since it does not have to check whether the bitplane pointers have changed. Remember the first and last drawn line for each frame, and pass them to flush_screen. Use this in xwin.c for SHM. Modify SHM logic: if smart update is selected, call XShmPutImage() from flush_line() instead of from flush_screen(). But gather blocks of consecutive lines to avoid calling XShmPutImage() too often. 960323 "Smart update" method, based very loosely on Alessandro Bissacco's work, implemented: Add an array chip_flags that records any change made to specific words in chip memory. Move all the hardware registers relevant to playfield display into a new structure bplinfo. Remember the contents of this structure in struct line_description for every line on the screen. Avoid redrawing in pfield_doline if the screen memory has not been modified for the line to be drawn and if the information from the last frame matches that in the current frame. 960322 Duplicate all functions responsible for drawing (pfield_doline, pfield_doline_slow, pfield_sprite, pfield_*word_*res) and append _h or _l (ah, the golden C++ days, when we had templates... which never worked). Modify the *_l functions to support drawing in low resolution (i.e. 320x200). Change the options -d and -H to support selecting color mode and resolution, thereby getting rid of some SVGALIB_* options. Get rid of the old pfield_*word_*res functions. Collect information about the minimum diwstart value during the previous frame and use that in case 320x200 was selected to fit the image on the screen. Get rid of HAVE_JOYSTICK (breaks the "-J" option) 960321 Give up in op_illg() if opcode is 0x4e7b and the exception handler for it is NULL. In that case, it's a 68020 Kickstart. 960319 New Next code from Ian. SunOS target was still screwed (two CFLAGS). Turn -x option into a "hair cursor" option. Support multiple mounts, but warn if more than one is seen (still does not work with Kick 1.3). Integrated Samuel Devulder's new LOW_BANDWIDTH patch. 960318 Integrated the start of Markus Gietzen's gfx library replacement. Changed the interface between custom.c and the graphics code. There has to be a buffer holding the data of all the lines on the screen. For linear SVGAlib modes, this is the video memory. Eliminated -x option, prepare_line(), DrawPixel() and the X_?BIT_SCREEN options, replace with 3 versions of pfield_linetoscr for different datatypes. Implement proper handling of the borders above and below the DIW in custom.c instead of in flush_screen(). Move common code (color allocation) from all the graphics files to new file gfxutil.c. Swedish keyboard from Per Olofsson. 960315 Release 0.5.0 960315 Newest DOS port from Gustavo. New sgi-gcc target. 960314 Add -lXext to osf target. Use "rb" for fopen() in main.c 960310 Play a bit with the __asm__ constraints. Implement CHK. 960307 Fix some stupid Makefile errors. Call parse_cmdline() if no init file is found. First round of NextStep patches; new file NeXTwin.m Stupid bug in custom.c: The #define is called NO_FAST_DISK, not NO_FAST_FLOPPY. Fix one of the problems the Deform demo had with the blitter: The line texture wasn't rotated to the right position in blitter_init(). 960306 Use some black GCC __asm__ magic to calculate flags more quickly (config INTEL_FLAG_OPT) HAM was broken by pfield_linetoscr changes. Fixed. LOW_BANDWIDTH sometimes got confused when the display window changed. 960305 BCD instructions work well enough for Locomotive Basic on CPE. New function parse_cmdline_and_init_file() that reads ~/.uaerc or ./.uaerc and adds the options found in those files to those in argv[]. Patch from Denis Sablic to make disk image filenames runtime configurable. Extend it for the ROM filename. Remove some of the run-time configurable stuff from config.h. More X keysym fixes (I finally got a proper .Xmodmap ...) for SVGAlib: Delete key, and PgUp/PgDn as Amiga keys. The sound driver can now handle 22050 Hz and/or 8 bit samples. Both of these are the default with LINUX_SOUND_SLOW_MACHINE. Also use the SNDCTL_DSP_GETBLKSIZE ioctl and write the buffer when there is enough data. Abuse keybuf.c to provide a fake joystick emulation with the numeric pad (enable with -J) 960304 bebox.cpp from Christian. Rename pfield_linetoscr_full to pfield_linetoscr_full8. More x86 assembly: pfield_linetoscr_full16. 960303 SunOS target from Dirk Vangestel. Put some not-so-superfluous includes back in. Added the DOS specific patches to filesys.c. Started x86 assembly optimizations. New file X86.S, includes an optimized version of pfield_linetoscr (for 8 bit screens only). Don't use SA_RESTART if it isn't defined. prepare_line() wasn't called often enough (again...), leading to memory corruption and "hit the reset button" bugs when using SVGAlib. 960226 Get rid of bool, true and false in amiga.h and everywhere else. Copy yesterdays code to AF_SOUND code, too. Include first round of Christian Bauer's BeBox patches. Add AIX fix from Samuel Mackrill. Add #include and #include in some more places. Modify gencpu.c and readcpu.c so that immediate types j and J (0..15 and 1..8) can be merged. Replace HAVE_ONE_GIG... option with a new CPU_EMU_SIZE option that can be set to a value in the range 0..5, where 0 is minimum size and 5 is equivalent to HAVE_ONE_GIG... 960225 Remove multiplications in sound code, use a big lookup table. 960222 Go back to having only one memory bank table of type addrbank instead of several function pointer arrays. Eliminate the HAVE_BROKEN_SOFTWARE define by extending the memory bank table to 65536 entries. Remove remaining DUALCPU code. Allow BTST src,imm instructions in table68k. 960220 Back out filesys.c change from Stefan Reinauer: don't call V36 specific functions in expansion.library. Better fix for the filesys.c assign problems by Oliver Moehrke. Make new playfield code conditional on EXPERIMENTAL_SCREEN_UPDATE. Improve the 64bit variant of said code. Try to get alignment for apixels by putting it into a union with a long. Kill the child in gui_exit(). Make graphics_init() return a value and check it in main.c to see whether graphics were initialized. If not, call gui_exit() anyway. Use new 256 color allocation routine from svga.c in xwin.c, too. Make LOW_BANDWIDTH compile _and_ work (wow...). 960219 Fix bug in memory.c: When loading 256K Kickstart, copy 256K, not 128K. 960218 Finished the rest of the UI: reset, debug and quit buttons as well as drive LEDs. New target linux-gui; all others use dummy file nogui.c for now. 960217 The GUI now supports inserting and ejecting diskfiles and displays their names. Two pipes are used now, one for reading and one for writing. Properly wait for the process to start up. Use sigaction() instead of signal() in debug.c. More fixes for the new display routines: Need to do a final call to pfield_*word_*res with the data shifted right from the last fetched word. 960216 Copper & sprite bugfixes from Marco Nelissen. Better X keyboard support from Bruno Coste. Move my_strdup() from filesys.c to options.h New files xui.c, uae-ui (shell script) and uae-ui.tk (wish script). These create a GUI for the X version of the emulator. So far, the power LED works. 960215 Don't rely on SVGAlib headers defining any keycodes at all. Include Thorsten Frueauf's NetBSD patch. Apparently, the devname variable in hardfile.c caused a namespace collision, so rename it to uaedevname. Fastmem fixes, debugger help, and ConfigDev allocation in hardfile and filesys from Stefan Reinauer. xwin.c: Give the window a title. Half-implemented the DIVU.L, DIVS.L, MULU.L and MULS.L instructions. 960213 AF sound system support from Marcus Sundberg. Win95 keyboard support for SVGAlib from Thierry Lescot. Added most of Gustavo Goedert's MS-DOS port. When using the old pfield_*word_*res functions, the gen_pfield_tables() function was undefined. Hmmm, /dev/brain must have been unmounted when I wrote the new pfield_* functions. Now they make sure they access the apixels array only with addresses that are multiples of 16 bytes. 960212 Fix copy&paste bug in cia.c found by Marco Nelissen: Need to call RethinkICRB() instead of RethinkICRA() for CIA B timers. Added Stefan Reinauers autoconfig area/fastmem support. Added run-time options for use_slow_mem and use_fast_mem. Oops, the pfield_*word_*res() optimizations break completely on HPs and Sparcs. Now use this optimization only if we are using GCC 2.7. HPUX fixes in the Makefile. New target hpux-gcc. The code for clearing the areas above and below the DIW was trying to be a little too clever selecting the color. Just use the current background color. Added channel attachment to the sound code. Untested. 960211 Found some flag setting bugs in the rotate/shift instructions and in addx/subx (which I thought I had already fixed) by reimplementing DUALCPU mode to work with Ed's e68k. Argh! The copper is completely disabled during DDF in Hires 4 bitplane mode - so copper positions 0x30 and 0x34 are about 640 pixels apart. The Kickstart uses FF39FFFE to wait for the end of line 256 instead of FFDFFFFE as in all the other modes. This is implemented now, but probably not 100% correct. Added check whether SVGAlib doesn't support our mode. If using GCC >= 2.7, define __attribute__((aligned(16))) as BIG_ALIGNMENT in config.h. Use it for the apixels array to prevent potential problems on the Alpha. Tried to make the color selection routine produce better results in 256 color mode. 960210 readdisk didn't work at all for large files - fixed. In pfield_doline(), clear the apixels array if playfield DMA is off. In SPRxCTL(), reset sprite mode when sprpos==sprctl==0 Rewrite pfield_orword_hires() and friends to use lookup tables. No noticeable improvement on my machine, but might be different on other machines. Two versions of this code: one using 64bit longs on the Alpha. New targets linux-debug and linux-prof. Use 1MB slow mem. -funroll-loops is a little excessive. Remove it. Add support for linear addressing modes for SVGAlib version. Speedup is 20-30% on my old 486 VLB. Now, would someone please fix SVGAlib to support that for the S3-864 as well? Set SVGAlib keyboard mode to DONT_CATCH_CTRLC. Change custom.c, xwin.c and svga.c to keep track of the display window and background color and to clear the areas above and below the display window if necessary to remove garbage images from previous frames. Set the LOF bit in the Kickstart replacement init routine. Also initialize CIAs to Kick 1.3-like values. 960209 Some more -DHAVE_xxx_H options in the Makefile and filesys.c. DEC Alpha fixes for filesys.c from Ed and Marcus. HPUX fixes. New field in table68k for CPU type, parsed by readcpu and compared to CPU_LEVEL which is defined in config.h. New instructions MOVE2C, MOVEC2 and CAS. Also a new field for priviledge level that is used by gencpu to generate tests for regs.s and Exception(8) calls if necessary. Move parsing of table68k into a new file build68k.c. Generate a file called cpudefs.c containing the information from table68k in machine-readable form. Change readcpu.c to use the array found in cpudefs.c. Don't generate the d8(An,Dn) addressing mode in-line. Generate a call to get_disp_ea(), which is an inline function in newcpu.h if UAE is configured for 68000 emulation; for 68020 emulation, it is defined in newcpu.c. Debugger could crash on illegals because there was no mnemonic defined in lookuptab[]. Return zero for SERDATR. 960207 It seems that the copper stops completely if an attempt to write to a specific register fails because of COPDANG. Apparently, the Kickstarts use this to stop the copper with a 0x00000000 longword. This leaves the question why they don't do 0xFFFFFFFE like everybody else. Enable 512K slow memory by default. Integrate Stefan Reinauers battclock patch that makes it work with newer Kickstarts. In cia.c, do the little index pulse hack even if dskdmaen==1, because DMA is only enabled when dskdmaen==2 (Helps the "Mad Decision" demo). Add solaris entry to Makefile (GCC, Openwin, -DHAVE_STATFS_H) Define HAVE_STRINGS_H for SGIs, change filesys.c accordingly. 960206 Build a smaller table instead of cputbl.c. Use readcpu and the smaller table to build the cpufunctbl array at run-time. Nuked the other half of the old CPU emulator. Reimplemented debugger to use the information generated by readcpu. Define HAVE_STATFS_H for SGIs in the Makefile, and use that as a test in filesys.c instead of #ifndef __linux. Hack filesys.c, get_path() to support the assign command. Add -fstrength-reduce and -funroll-loops in Makefile to make people nervous. Rewrite Sam Devulder's LOW_BANDWIDTH patch and add it to xwin.c. 960205 Forgot some PC-relative bit instructions in table68k. Nuked half of the old CPU emulator. Split gencpu.c into two parts, new one is called readcpu.c and just parses the table68k file. Link it to the main program. 960205 Release 0.4 960203 filesys.c, action_read(): Slightly more efficient code (translate Amiga address to real pointer). Moved some common code in the generate_* functions in gencpu.c to a separate function. 960202 Added an experimental fast disk option. Currently turned off by default (it's not such a big win). Attached sprite fixes (overlapping att. sprites looked bad, Katakis). Add sleep(1) before resetting the console to text mode when using SVGAlib: this might fix some screen corruption problems. Add sprite/playfield priority checking to the most important case (single playfield, no HAM). In filesys.c, do_find(): open() returns -1 on error, not zero. Return ERROR_OBJECT_WRONG_TYPE if do_find() is called for a directory (fixes Champions of Krynn harddisk installation). 960201 Don't abort if sound driver not present, just set produce_sound to 0. New files keybuf.c and keybuf.h to record keypresses in the right order and without losing any. In cia.c, force 15 scanlines between keypresses, just to be sure. unixfs.device _does_ work with Kick 1.3: just don't trust what Kick 1.3 sends in the startup packet. For now, disable more than one mount per command line. Started integrating Ernesto's new Mac sources. Remove superfluous includes from some files. 960131 Added Ed's unixfs.device (great stuff). Adding ULONGs to pointers is a bad idea on the Alpha if the ULONG value really is signed. Add some casts to LONG in (pc_p + src) expressions in genpu.c. If DMACON is written and copper DMA is enabled, do a COPJMP1 at once. Helps the "Interference" demo. 960129 More SGI fixes from Ed. Bugfixes and transdisk improvements from Marcus Sundberg. Remove EXTRA_DEFINES from Makefile. Breaks some systems. Move common sprite code from pfield_doline() and pfield_doline_slow() to new function pfield_sprite(). The same sprite may appear more than once on the same line, so don't shift out the bits of sprdata[] and sprdatb[] while displaying it (Turrican I). In xwin.c and svga.c, barf if LINUX_SVGALIB doesn't match the file being compiled. Make all .o files depend on config.h in the Makefile. No need to exit if sound driver unavailable, but -S given. Small debugger fix: Missing space in output. Fix for the sprite logic: Specifically, use a state variable indicating whether the sprite has been restarted after a VSYNC. Fixes most Turrican problems. 960124 Added Denis Sablic's patch for sound run-time option. Added Ed Hanway's patch for better Makefile, X mouse cursor blanking and more SGI compilation fixes. 960123 Include options.h everywhere. Handle 8 bit GrayScale visuals like PseudoColor. Remove C++ leftovers from joystick code. 960122 When using the joystick driver, the button test must come after handle_events() in vsync_handler(). 960118 Removed all the remaining C++ comments. Changed all inline keywords to __inline__. Define __inline__ if not using gcc. Make proper prototypes for everything. Compile with maximum warnings + -ansi + -pedantic. Remove CIA_cycle(), obsolete. Reimplemented the STOP optimization in newcpu.c. Removed DualCPU support in CPU emulator. Real nasty bug in pfield_doline() fixed: sprxpos could be evaluated as negative, with not-so-amusing results. (Need to rewrite this in Oberon to get array bounds checking :-) 960117 Heroic effort: Rewrote the thing in C. This might help fix some problems with users being unable to compile it. Fixed a problem in hsync_handler(): Only call flush_line() for lines in the display window, i.e. when we did a prepare_line() before. Better code for relative branches: Don't use setpc(getpc()+x) calls, increment regs.pc_p instead. 960116 Reimplemented the function to load the Kickstart ROM. Use stdio instead of fstreams since this apparently does not work on the Mac. Detect 256K Kickstarts. Detect corrupt ROM images (calculate checksum). Added Ernesto Corvi's Mac port. Changed it around a bit, so it probably won't compile. 960115 Reinstate config.h options for X screen depth, so that DrawPixel() can be inlined in custom.cc for speed. xlinebuffer is now incremented in each call to DrawPixel() (for both X and SVGAlib) to get rid of some address calculations. 960114 Fixed X generic pixel drawing routine for SHM. Still trying to fix the harddisk emulation. uae.device no longer breaks the debugger (can step through uae.device functions now) Bugs affecting performance: SPCFLAG_STOP never got reset, and DSKLEN() would set SPCFLAG_DISK even if DMA was being turned off. Made slow memory a run-time option. Defer interrupts by one CPU instruction to give programs a chance to read INTREQR ("Seeing is Believing" and "Substance" demos) Added ScrollLock hack for X, too. 960113 SVGAlib version compiles again. Fixed SVGAlib mouse bug. Fixed SHM bug: Maximum scanline is 313, not 312. Sometimes, disk.cc missed a side change and would read the wrong data. Fixed. Apparently, this was the worst compatibility problem. Implemented trace mode. 960112 Changed layout of class amigamemory a little so that gcc can generate better addressing modes. Finally wrote functions in gencpu to generate MOVEMs. 960109 Integrated Ed Hanway's patches for better X support and run-time configuration of some options. Got rid of the direct VGA memory access. (Need to do this differently). Changed the method of drawing lines: custom.cc now tells the graphics code the line number and whether it needs to be doubleed before drawing it. Added Andre Beck's MIT-SHM patch. Remove warnings for newcpu.cc. 960108 Fixed exceptions in op_illg(): Need to decrement PC. 960107 Added an "uae.device" resident module at 0xF00000. This emulates a hard disk (fixed size 8MB for now). 960106 Moved some common code from pfield_doline() and pfield_doline_slow() to a separate function. This fixes a potential HAM bug (two static vars for the same value). Sound support for Linux. Works only with graphics off and the CPU slowed down. Better SVGAlib keyboard support. 960105 Added AvailMem(), AllocMem(), AllocAbs() and FreeMem() dummies. The Hardwired demo times the multiplication instructions and prints "This demo don't like Axel" if they are too fast. Apparently, Axel has a 68040. Added a WANT_SLOW_MULTIPLY option to config.h. Fixed the fast blitter emulation (seems to work now). 960104 Fixed all the ChangeLog entries from 95 that said 96 (oops??!) pfield_may_need_update() should check whether bitplane DMA is on. Added ersatz.cc and ersatz.h. The purpose of these files is to implement one or two Kickstart functions that are commonly called from bootblocks. This should help support some games and demos that only use the Kickstart as an initial track loader. So far, it's only good enough for one program. 951223 More intelligent event handling in the CPU emulator. Slightly faster. 951222 Optimize CPU emulation by inlining cctrue(). Also, the real PC no longer needs to be incremented each instruction. The real PC value now has to be fetched by m68k_getpc(). Added direct screen access for SVGAlib, but it didn't help much. I'll probably remove it again. The gencpu executable is 2M smaller if it allocates memory dynamically. 951216 custom_bput() enhanced a little. Now remembers the value that was written in the other half of the register. Apparently, the USEx bits of BLTCON0 are ignored in line draw mode. (Silents-Demo) 951212 Release 0.3 951212 Included Alessandro's battclock patch. Fixed mouse autocalibration for wrong-aspect screens. 951210 Joystick support for Linux. Better color matching for 256 color modes. Rewrote most of the memory management in plain C, mainly to avoid the various template bugs in some compilers, but also because gcc can't handle the regparm attribute for virtual functions yet. 951209 Added Alessandro's patches for automatic mouse calibration. Tried to optimize the blitter loop a bit. Doesn't work. 951205 Added Hannu's patches for diskfile write support. 951201 More portability fixes, especially for weird compilers that workstation vendors ship. 951125 More keys for X, some keyboard support for SVGAlib (slightly dangerous); beginnings of US keyboard support. 951124 256 color mode support for SVGAlib. FAST! 951123 Tiny tweak to central loops in playfield code results in much better assembly. Apparently, GCC does not feel too good about optimizing reference variables. 951113 Bug fix in the events code (nextevent must not be changed while events are being processed). 951112 The playfield can now be drawn with the right aspect (i.e., every line twice). Slower, but looks nicer and supports interlaced mode (flickerfree!). The first 29 lines (blanking interval) are omitted now to fit everything in 800x600. Oops, disk drive identification did not work. Fixed, all four drives appear now. Oops, CIA_reset() was there all the time but never got called. Optimized the planar->chunky conversion in pfield_doline() a little. This really is time critical. 951111 If colors change on a line, we might still be able to use the full line update, if the change occurred outside the DIW. Have to be a little careful, though. Playfield code now uses real pointers again, but makes sure it can read enough bytes to complete the current line without segfaulting. Oops, my "better estimate" (see below) was a mistake. Restored the original 4 hw cycles per instruction relation. This slows down the emulator while booting (more screen refreshs), but speeds up many demos that otherwise spend most of their time waiting for a specific raster position. Playfield modulos must be added immediately when DDF stops. (WOC demo) Portability fixes in disk.cc (null pointers). Implemented average frame rate calculation ('c' in the debugger). Debugger fixes. Sprite fixes (height was wrong, wrong priorities in fast update) Added an AutoConfig expansion RAM device. The OS seems to recognize it, but breaks sometime later (seems to be the same bug that kills the emulator when there's RAM at 0xC00000). SVGAlib now has mouse support, too. HAM mode implemented. 951110 Implemented fast complete line playfield update. Switches back if necessary. Fixed attached sprites bug. Copper wait no longer slows down the CPU emulation. (there were lots of new copper bugs because of this, but I hope I fixed all of them). Changed cia?t? from UWORD to ULONG, since there were overflows in the assertion (because of 65535+1 == 0). 951108 The DIVS remainder could have the wrong sign. New HAVE_BROKEN_SOFTWARE define in config.h that makes the emulator mask out the high byte of all addresses. Wrote genblitter.cc and replaced the awful code in blitter_blit() and blitter_line() with calls to the generated function. 951107 Implemented ?BCD. These don't really work yet. 951106 Release 0.2 951105 Fixed a bug in the new CIA timer code. Fixed flag settings for some cases of ADDX/SUBX 951104 Changed the main loop a bit - call all the *cycle() functions only if it is really necessary. I hope everything still works - at least it is twice as fast now :-D Improved mouse emulation - avoid overflows, permit "wraparound". Added debugger 'g' command. Removed some useless casts from the CPU emulator. Added a configuration option to prevent checks for odd addresses. Only very bad programs need this check. 951103 The sprite emulation sometimes did not work too well, especially with dual playfield mode. Hopefully fixed. 951102 The 10 cycle counter is more like a 5 cycle counter in this implementation. (Fine, that makes floppy loading even faster :-) Implemented mouse movement. Totally out of sync with the X pointer, but at least something. Found out about the XAutoRepeatOff() function. Real useful. DualCPU mode works again. Corrected flag settings for CMPA.W. Fixed DIV instructions: Don't change dest in case of overflow. 951031 The PC is now converted to a real pointer. This is safe (much safer than converting bitplane pointers, since the PC always has to be valid) and should speed things up a little. 951029 Some primitive event handling: 2 mouse buttons and 1 joystick button are emulated, as well as parts of the keyboard (only german mapping). Fixes: Delay values and sprite widths are always LoRes. Playfield 2 uses colors 9..15. Implemented a frame rate configuration option that can speed up the emulation quite a bit. 951028 A-ha. The 68000 has one strange feature after all. MOVEM.W to Dn sign extends the value to a longword. Katakis expects that accessing odd addresses causes exception 3, so we have to emulate this. *Sigh* Do at least something with the index pulse bit. It's more or less a toggle now. Implemented sprites & dual playfields, both with small glitches. 951027 When LOF is set, the frame is one line longer. 951026 Implemented a preliminary diskfile type for special formats. Turrican boots up correctly (crashes if I want to play a game, though). Implemented EHB and added a few missing masking operations in the color handling. Fixed the absw addressing mode - need to sign extend here as well. 951025 Fixed another extremely stupid bug, this time in the playfield code. Each pixel was calculated four times... Increased the size of the apixels array - this was being overrun. 951024 Fixed an extremely stupid bug in flag settings for byte and word operations. The "sectors until gap" field must be in the range 1..11 instead of 0..10, or very bad things will happen if it is used to calculate a blit size. 951021 Don't use real pointers to fetch bitplane data - too many segfaults. Delay the copper after executing an instruction, or wait sequences like FFDF FFFE 0200 FFFE won't work. Some programs expect that the CPU is completely turned off if the blitter nasty bit is set. So be it. The RSI Megademo chokes when disk DMA fetches two syncs. Leave one out. The LOF bit wasn't set correctly. 951020 Blitter fixes: Load fill carry from FCI each line; keep the masked value of bltadat in bltolda Give the CPU twice as many "cycles" - this still is not even remotely correct, but a better estimate. 951017 Added SVGAlib support. Unfortunately, my graphics card isn't fully supported by the current SVGAlib version. 951015 More small optimizations to memory.h and custom.cc. Added code for 256 color screens. The type of screen has to be selected at compile time. 951014 Modified the memory management to be (hopefully) a little more efficient. Changed gencpu.cc to generate functions and a big function pointer array instead of the old case labels. The generated C++ files now compile a lot faster, and the code should be better as well. 951013 Implemented pseudo POTGOR to keep the RMB from being detected as pressed all the time. GenerateDecTab() generated TRAP incorrectly. Made some more instructions (MOVE.B A0,D0 etc) illegal in gencpu.cc. Fixed X colors. Fixed data fetching for HiRes screens. 951011 EXT.WL instructions set the flags. Implemented second CPU emulator, plus "DualCPU" option. The new CPU emulator is generated automatically from a file called table68k by a program called gencpu. 951002 Removed version information from the file headers. Removed some sillinesses in custom.cc. DSKLEN bug fixed (mask out 0xC000). Playfield code rewritten. Now supports horizontal scrolling. Implemented some primitive color support. 950927 Fixed predecrement/postincrement addressing with byte size for the stack pointer. 950926 Fixes to the disk code: Terminate disk DMA, flip disk side, read more than just two sectors during disk DMA, fix checksum calculation. Fixed copper comparison bugs. 950901 Release 0.1 950826 bugfix in GenerateDecTab(): LEA.W instructions were generated. 950312 New file disk.cc, for (guess what) disk support. Doesn't work yet. 950311 Multiplication instructions were generating 16 bit results. Sign extension was wrong in some places. Removed bugs in the blitter (one word width: ALWM & AFWM and line mode) The Kickstart logo looks perfect now. Playfield routine should check BPLCON0 instead of BLTCON0 950309 ASR D8,D0 is not a valid instruction. Bitplane pointers were not incremented. Copper comparison didn't work. COP2LC and bitplane pointers were written incorrectly. Fixed. Something that bears a striking resemblance to the familiar Kickstart logo now appears in my X window! 950306 ROR used to set the X flag. Bug fixes in GenerateDecTab. More bug fixes in several 68000 instructions. Improved blitter. ?????? KS1.3 doesn't seem to set BLTDMOD on a line draw. What is this?? Fixed stupid bugs in playfield code. 950305 fixed bugs in opcode generation and interrupt handling. Implemented STOP. Fixed flag settings: Result wasn't masked. Ooops!! ADDQ #imm,An doesn't set flags. One-shot timer mode didn't work. Implemented blitter, doesn't work. Some primitive and slow playfield support, only to make the things that hopefully will soon appear visible. 950304 CIA timers ought to work OK. Copper is emulated. Emulator loops infinitely when trying to initialize the console.device 950303 experiments with X, figured out how to open a window and draw pixels. No graphics emulation yet, though. 950301 Nearly all instructions work. Fixed supervisor mode stack. The memory manager now handles CIA chips. 950228 Bug fixes in 68000 code, exceptions and more instructions implemented Memory management extended to handle custom chips as well. Debugger improved. Kickstart passes memory & CPU type test, builds up some system structures. 950227 MC68000 & little debugger for tracing. It can execute the first couple of KS1.3 instructions, but doesn't get past the memory test. 950225 Work begun fs-uae-2.2.3+dfsg/src/ar.cpp0000644000175000017500000016543212162366655015765 0ustar glaubitzglaubitz/* * UAE Action Replay 1/2/3/1200 and HRTMon support * * (c) 2000-2006 Toni Wilen * (c) 2003 Mark Cox * * Action Replay 1200 (basically old version of HRTMon): * * 256k ROM at 0x800000 * 64k RAM at 0x880000 * status register at 0x8c0000 (bit 3 = freeze button, bit 4 = hide) * custom register writes stored at 0x88f000 * CIA-A at 0x88e000 * CIA-B at 0x88d000 * freeze button = bus error + rom mapped at 0x0 * * 14.06.2006 first implementation * * Action Replay 2/3: * * Tested with AR3 ROM version 3.09 (10/13/91) and AR2 2.12 (12/24/90) * * Found to work for the following roms by Mark Cox: * (Yes the date format is inconsistent, i just copied it straight from the rom) * 1.15 * 2.14 22/02/91 dd/mm/yy * 3.09 10/13/91 mm/dd/yy * 3.17 12/17/91 mm/dd/yy * * This patch also makes AR3 compatible with KickStart's other than 1.3 * (ROM checksum error is normal with KS != 1.3) * NOTE: AR has problems with 68020+ processors. * For maximum compatibility select 68000/68010 and A500 speed from UAE * options. * * How to rip Action Replay 1/2/3 ROM: * * Find A500 with AR1/2/3, press 'freeze'-button * * type following: * * AR1: * lord olaf * * AR2 or AR3: * may * the * force * be * with * you * new (AR3 only) * * AR1: 64K ROM is visible at 0xf00000-0xf0ffff * and 16K RAM at 0x9fc000-0x9fffff * AR2: 128K ROM is visible at 0x400000-0x41ffff * AR3: 256K ROM is visible at 0x400000-0x43ffff * and 64K RAM at 0x440000-0x44ffff * * following command writes ROM to disk: * * AR1: sm ar1.rom,f00000 f10000 * AR2: sm ar2.rom,400000 420000 * AR3: sm ar3.rom,400000 440000 * * NOTE: I (mark) could not get the action replay 1 dump to work as above. * (also, it will only dump to the action replay special disk format) * To dump the rom i had to : * 1. Boot the a500 and start a monitor (e.g. cmon). * 2. Use the monitor to allocate 64k memory. * 3. Enter the action replay. * 4. Enter sysop mode. * 5. Copy the rom into the address the monitor allocated. * 6. Exit the action replay. * 7. Save the ram from the monitor to disk. * * I DO NOT REPLY MAILS ASKING FOR ACTION REPLAY ROMS! * * AR2/3 hardware notes (not 100% correct..) * * first 8 bytes of ROM are not really ROM, they are * used to read/write cartridge's hardware state * * 0x400000: hides cartridge ROM/RAM when written * 0x400001: read/write HW state * 3 = reset (read-only) * 2 = sets HW to activate when breakpoint condition is detected * 1 = ??? * 0 = freeze pressed * 0x400002/0x400003: mirrors 0x400000/0x400001 * 0x400006/0x400007: when written to, turns chip-ram overlay off * * breakpoint condition is detected when CPU first accesses * chip memory below 1024 bytes and then reads CIA register * $BFE001. * * cartridge hardware also snoops CPU accesses to custom chip * registers (DFF000-DFF1FE). All CPU custom chip accesses are * saved to RAM at 0x44f000-0x44f1ff. Note that emulated AR3 also * saves copper's custom chip accesses. This fix stops programs * that try to trick AR by using copper to update write-only * custom registers. * * 30.04.2001 - added AR2 support * 21.07.2001 - patch updated * 29.07.2002 - added AR1 support * 11.03.2003 - added AR1 breakpoint support, checksum support and fixes. (Mark Cox) * */ /* AR2/3 'NORES' info. * On ar2 there is a 'nores' command, * on ar3, it is accessible using the mouse. * This command will not work using the current infrastructure, * so don't use it 8). */ /* AR1 Breakpoint info. * 1.15 If a breakpoint occurred. Its address is stored at 9fe048. * The 5 breakpoint entries each consisting of 6 bytes are stored at 9fe23e. * Each entry contains the breakpoint long word followed by 2 bytes of the original contents of memory * that is replaced by a trap instruction in mem. * So the table finishes at 9fe25c. */ /* How AR1 is entered on reset: * In the kickstart (1.3) there is the following code: * I have marked the important lines: * * fc00e6 lea f00000,a1 ; address where AR1 rom is located. * fc00ec cmpa.l a1,a0 * fc00ee beq fc00fe.s * fc00f0 lea C(pc), a5 * fc00f4 cmpi.w #1111,(a1) ; The first word of the AR1 rom is set to 1111. * fc00f8 bne fc00fe.s * fc00fa jmp 2(a1) ; This is the entry point of the rom. */ /* Flag info: * AR3:'ARON'. This is unset initially. It is set the first time you enter the AR via a freeze. * It enables you to keep the keyboard buffer and such. * If this flag is unset, the keyboard buffer is cleared, the breakpoints are deleted and ... */ /* AR3:'PRIN'. This flag is unset initially. It is set at some point and when you switch to the 2nd screen * for the first time it displays all the familiar text. Then unsets 'PRIN'. */ /* Super IV: * * Possible "ROM" addresses ("ROM" is loaded from disk to Amiga memory) * - 0xd00000 * - 0xc00000 * - 0x080000 * * CIA-A: 0xb40000 (0x000, 0x100,...) * CIA-B: 0xb40001 (0x001, 0x101,...) * Custom: 0xe40000 * * NOTE: emulation also supports 0xd00000 relocated "rom"-images */ /* X-Power 500: * * ROM: 0xe20000 (128k) * RAM: 0xf20000 (64k) * CIA-A: 0xf2fc00 (00,02,04,...) * CIA-B: 0xf2fc01 (01,03,05,...) * Custom: 0xf2fc00 (from 0x20->) */ /* Nordic Power: * * ROM: 0xf00000 (64k, mirrored at 0xf10000) * RAM: 0xf40000 (32k, mirrored at 0xf48000 - 0xf5ffff) * CIA-A: 0xf43c00 (00,02,04,...) * CIA-B: 0xf43c01 (01,03,05,...) * Custom: 0xf43c00 (from 0x20->) * addresses 0 to 1023: 0xf40000 (weird feature..) */ /* X-Power and Nordic Power ROM scrambling * * Data lines are swapped. * Address lines are XOR'd (0x817F) and swapped. * * Even (middle) ROM * * Data: 0-3,1-6,2-0,3-4,4-7,5-5,6-1,7-2 * Addr: 0-7,1-1,2-2,3-11,4-12,5-0,6-13,7-14,8-8,9-3,10-5,11-6,12-4,13-10,14-9,15-15 * * Odd (corner) ROM * * Data: 0-2,1-3,2-4,3-5,4-6,5-7,6-0,7-1 * Addr: 0-3,1-6,2-5,3-7,4-9,5-12,6-14,7-13,8-8,9-11,10-10,11-1,12-0,13-4,14-2,15-15 * */ #include "sysconfig.h" #include "sysdeps.h" #include "options.h" #include "uae.h" #include "uae/memory.h" #include "rommgr.h" #include "custom.h" #include "newcpu.h" #include "zfile.h" #include "ar.h" #include "savestate.h" #include "crc32.h" #include "akiko.h" #define DEBUG #ifdef DEBUG #define write_log_debug write_log #else #define write_log_debug #endif extern void activate_debugger (void); static TCHAR *cart_memnames[] = { NULL, _T("hrtmon"), _T("arhrtmon"), _T("superiv") }; #define ARMODE_FREEZE 0 /* AR2/3 The action replay 'freeze' button has been pressed. */ #define ARMODE_BREAKPOINT_AR2 2 /* AR2: The action replay is activated via a breakpoint. */ #define ARMODE_BREAKPOINT_ACTIVATED 1 #define ARMODE_BREAKPOINT_AR3_RESET_AR2 3 /* AR2: The action replay is activated after a reset. */ /* AR3: The action replay is activated by a breakpoint. */ #define CART_AR 0 #define CART_HRTMON 1 #define CART_AR1200 2 #define CART_SUPER4 3 uae_u8 ar_custom[2*256]; uae_u8 ar_ciaa[16], ar_ciab[16]; static int hrtmon_ciadiv = 256; int hrtmon_flag = ACTION_REPLAY_INACTIVE; static int cart_type; static uae_u8 *hrtmemory = 0, *hrtmemory2 = 0, *hrtmemory3 = 0; static uae_u8 *armemory_rom = 0, *armemory_ram = 0; static uae_u32 hrtmem_mask, hrtmem2_mask, hrtmem3_mask; static uae_u8 *hrtmon_custom, *hrtmon_ciaa, *hrtmon_ciab, *hrtmon_zeropage; uae_u32 hrtmem_start, hrtmem2_start, hrtmem3_start, hrtmem_size, hrtmem2_size, hrtmem2_size2, hrtmem3_size; uae_u32 hrtmem_end, hrtmem2_end; static int hrtmem_rom; static int triggered_once; static bool action_replay_hardreset; static void hrtmon_unmap_banks (void); void check_prefs_changed_carts (int in_memory_reset); static int stored_picasso_on = -1; static void cartridge_enter (void) { #ifdef PICASSO96 stored_picasso_on = picasso_on; picasso_requested_on = 0; #endif } static void cartridge_exit (void) { #ifdef PICASSO96 if (stored_picasso_on >= 0) picasso_requested_on = stored_picasso_on != 0; stored_picasso_on = -1; #endif } static uae_u32 REGPARAM2 hrtmem3_bget (uaecptr addr) { addr -= hrtmem3_start & hrtmem3_mask; addr &= hrtmem3_mask; return hrtmemory3[addr]; } static uae_u32 REGPARAM2 hrtmem3_wget (uaecptr addr) { return (hrtmem3_bget (addr) << 8) | hrtmem3_bget (addr + 1); } static uae_u32 REGPARAM2 hrtmem3_lget (uaecptr addr) { return (hrtmem3_wget (addr) << 16) | hrtmem3_wget (addr + 2); } static void REGPARAM2 hrtmem3_lput (uaecptr addr, uae_u32 l) { uae_u32 *m; addr -= hrtmem3_start & hrtmem3_mask; addr &= hrtmem3_mask; m = (uae_u32 *)(hrtmemory3 + addr); do_put_mem_long (m, l); } static void REGPARAM2 hrtmem3_wput (uaecptr addr, uae_u32 w) { uae_u16 *m; addr -= hrtmem3_start & hrtmem3_mask; addr &= hrtmem3_mask; m = (uae_u16 *)(hrtmemory3 + addr); do_put_mem_word (m, (uae_u16)w); } static void REGPARAM2 hrtmem3_bput (uaecptr addr, uae_u32 b) { addr -= hrtmem3_start & hrtmem3_mask; addr &= hrtmem3_mask; hrtmemory3[addr] = b; } static int REGPARAM2 hrtmem3_check (uaecptr addr, uae_u32 size) { addr -= hrtmem3_start & hrtmem3_mask; addr &= hrtmem3_mask; return (addr + size) <= hrtmem3_size; } static uae_u8 *REGPARAM2 hrtmem3_xlate (uaecptr addr) { addr -= hrtmem3_start & hrtmem3_mask; addr &= hrtmem3_mask; return hrtmemory3 + addr; } static uae_u32 REGPARAM2 hrtmem2_bget (uaecptr addr) { if (addr == 0xb8007c && cart_type == CART_SUPER4) { static int cnt = 60; cnt--; if (cnt == 0) uae_reset(0, 0); } addr -= hrtmem2_start & hrtmem2_mask; addr &= hrtmem2_mask; return hrtmemory2[addr]; } static uae_u32 REGPARAM2 hrtmem2_wget (uaecptr addr) { return (hrtmem2_bget (addr) << 8) | hrtmem2_bget (addr + 1); } static uae_u32 REGPARAM2 hrtmem2_lget (uaecptr addr) { return (hrtmem2_wget (addr) << 16) | hrtmem2_wget (addr + 2); } static void REGPARAM2 hrtmem2_lput (uaecptr addr, uae_u32 l) { uae_u32 *m; addr -= hrtmem2_start & hrtmem2_mask; addr &= hrtmem2_mask; m = (uae_u32 *)(hrtmemory2 + addr); do_put_mem_long (m, l); } static void REGPARAM2 hrtmem2_wput (uaecptr addr, uae_u32 w) { uae_u16 *m; addr -= hrtmem2_start & hrtmem2_mask; addr &= hrtmem2_mask; m = (uae_u16 *)(hrtmemory2 + addr); do_put_mem_word (m, (uae_u16)w); } static void REGPARAM2 hrtmem2_bput (uaecptr addr, uae_u32 b) { addr -= hrtmem2_start & hrtmem2_mask; addr &= hrtmem2_mask; hrtmemory2[addr] = b; } static int REGPARAM2 hrtmem2_check (uaecptr addr, uae_u32 size) { addr -= hrtmem2_start & hrtmem2_mask; addr &= hrtmem2_mask; return (addr + size) <= hrtmem2_size; } static uae_u8 *REGPARAM2 hrtmem2_xlate (uaecptr addr) { addr -= hrtmem2_start & hrtmem2_mask; addr &= hrtmem2_mask; return hrtmemory2 + addr; } static uae_u32 REGPARAM2 hrtmem_lget (uaecptr addr) { uae_u32 *m; addr -= hrtmem_start & hrtmem_mask; addr &= hrtmem_mask; m = (uae_u32 *)(hrtmemory + addr); return do_get_mem_long (m); } static uae_u32 REGPARAM2 hrtmem_wget (uaecptr addr) { uae_u16 *m; addr -= hrtmem_start & hrtmem_mask; addr &= hrtmem_mask; m = (uae_u16 *)(hrtmemory + addr); return do_get_mem_word (m); } static uae_u32 REGPARAM2 hrtmem_bget (uaecptr addr) { addr -= hrtmem_start & hrtmem_mask; addr &= hrtmem_mask; return hrtmemory[addr]; } static void REGPARAM2 hrtmem_lput (uaecptr addr, uae_u32 l) { uae_u32 *m; addr -= hrtmem_start & hrtmem_mask; addr &= hrtmem_mask; if (cart_type == CART_AR1200 && addr < 0x80000) return; if (hrtmem_rom) return; m = (uae_u32 *)(hrtmemory + addr); do_put_mem_long (m, l); } static void REGPARAM2 hrtmem_wput (uaecptr addr, uae_u32 w) { uae_u16 *m; addr -= hrtmem_start & hrtmem_mask; addr &= hrtmem_mask; if (cart_type == CART_AR1200 && addr < 0x80000) return; if (hrtmem_rom) return; m = (uae_u16 *)(hrtmemory + addr); do_put_mem_word (m, (uae_u16)w); } static void REGPARAM2 hrtmem_bput (uaecptr addr, uae_u32 b) { addr -= hrtmem_start & hrtmem_mask; addr &= hrtmem_mask; if (cart_type == CART_AR1200 && addr < 0x80000) return; if (hrtmem_rom) return; hrtmemory[addr] = b; } static int REGPARAM2 hrtmem_check (uaecptr addr, uae_u32 size) { addr -= hrtmem_start & hrtmem_mask; addr &= hrtmem_mask; return (addr + size) <= hrtmem_size; } static uae_u8 *REGPARAM2 hrtmem_xlate (uaecptr addr) { addr -= hrtmem_start & hrtmem_mask; addr &= hrtmem_mask; return hrtmemory + addr; } static addrbank hrtmem_bank = { hrtmem_lget, hrtmem_wget, hrtmem_bget, hrtmem_lput, hrtmem_wput, hrtmem_bput, hrtmem_xlate, hrtmem_check, NULL, _T("Cartridge Bank"), hrtmem_lget, hrtmem_wget, ABFLAG_RAM }; static addrbank hrtmem2_bank = { hrtmem2_lget, hrtmem2_wget, hrtmem2_bget, hrtmem2_lput, hrtmem2_wput, hrtmem2_bput, hrtmem2_xlate, hrtmem2_check, NULL, _T("Cartridge Bank 2"), hrtmem2_lget, hrtmem2_wget, ABFLAG_RAM }; static addrbank hrtmem3_bank = { hrtmem3_lget, hrtmem3_wget, hrtmem3_bget, hrtmem3_lput, hrtmem3_wput, hrtmem3_bput, hrtmem3_xlate, hrtmem3_check, NULL, _T("Cartridge Bank 3"), hrtmem3_lget, hrtmem3_wget, ABFLAG_RAM }; static void copyfromamiga (uae_u8 *dst, uaecptr src, int len) { while (len--) { *dst++ = get_byte (src); src++; } } static void copytoamiga (uaecptr dst, uae_u8 *src, int len) { while (len--) { put_byte (dst, *src++); dst++; } } int action_replay_flag = ACTION_REPLAY_INACTIVE; static int ar_rom_file_size; /* Use this for relocating AR? */ static int ar_rom_location; /*static*/ int armodel; static uae_u8 artemp[4]; /* Space to store the 'real' level 7 interrupt */ static uae_u8 armode; static uae_u32 arrom_start, arrom_size, arrom_mask; static uae_u32 arram_start, arram_size, arram_mask; static int ar_wait_pop = 0; /* bool used by AR1 when waiting for the program counter to exit it's ram. */ uaecptr wait_for_pc = 0; /* The program counter that we wait for. */ /* returns true if the Program counter is currently in the AR rom. */ int is_ar_pc_in_rom (void) { uaecptr pc = m68k_getpc () & 0xFFFFFF; return pc >= arrom_start && pc < arrom_start+arrom_size; } /* returns true if the Program counter is currently in the AR RAM. */ int is_ar_pc_in_ram (void) { uaecptr pc = m68k_getpc () & 0xFFFFFF; return pc >= arram_start && pc < arram_start+arram_size; } /* flag writing == 1 for writing memory, 0 for reading from memory. */ STATIC_INLINE int ar3a (uaecptr addr, uae_u8 b, int writing) { uaecptr pc; /* if (addr < 8) //|| writing ) */ /* { */ /* if (writing) */ /* write_log_debug("ARSTATUS armode:%d, Writing %d to address %p, PC=%p\n", armode, b, addr, m68k_getpc ()); */ /* else */ /* write_log_debug("ARSTATUS armode:%d, Reading %d from address %p, PC=%p\n", armode, armemory_rom[addr], addr, m68k_getpc ()); */ /* } */ if (armodel == 1) /* With AR1. It is always a read. Actually, it is a strobe on exit of the AR. * but, it is also read during the checksum routine. */ { if (addr < 2) { if (is_ar_pc_in_rom()) { if (ar_wait_pop) { action_replay_flag = ACTION_REPLAY_WAIT_PC; /* write_log_debug ("SP %p\n", m68k_areg (regs, 7)); */ /* write_log_debug ("SP+2 %p\n", m68k_areg (regs, 7) + 2); */ /* write_log_debug ("(SP+2) %p\n", longget (m68k_areg (regs, 7) + 2)); */ ar_wait_pop = 0; /* We get (SP+2) here, as the first word on the stack is the status register. */ /* We want the following long, which is the return program counter. */ wait_for_pc = longget (m68k_areg (regs, 7) + 2); /* Get (SP+2) */ set_special (SPCFLAG_ACTION_REPLAY); pc = m68k_getpc (); /* write_log_debug ("Action Replay marked as ACTION_REPLAY_WAIT_PC, PC=%p\n",pc);*/ } else { uaecptr pc = m68k_getpc (); /* write_log_debug ("Action Replay marked as IDLE, PC=%p\n",pc);*/ action_replay_flag = ACTION_REPLAY_IDLE; } } } /* This probably violates the hide_banks thing except ar1 doesn't use that yet .*/ return armemory_rom[addr]; } #ifdef ACTION_REPLAY_HIDE_CARTRIDGE if (addr >= 8) return armemory_rom[addr]; if (action_replay_flag == 0) return 0; #endif if (!writing) /* reading */ { if (addr == 1 || addr == 3) /* This is necessary because we don't update rom location 0 every time we change armode */ return armode | (regs.irc & ~3); else if (addr < 4) return (addr & 1) ? regs.irc : regs.irc >> 8; else return armemory_rom[addr]; } /* else, we are writing */ else if (addr == 1) { armode = b; if (armode >= 2) { if (armode == ARMODE_BREAKPOINT_AR2) { write_log (_T("AR2: exit with breakpoint(s) active\n")); /* Correct for AR2 */ } else if (armode == ARMODE_BREAKPOINT_AR3_RESET_AR2 ) { write_log (_T("AR3: exit waiting for breakpoint.\n")); /* Correct for AR3 (waiting for breakpoint)*/ } else { write_log (_T("AR2/3: mode(%d) > 3 this shouldn't happen.\n"), armode); } } else { write_log (_T("AR: exit with armode(%d)\n"), armode); } set_special (SPCFLAG_ACTION_REPLAY); action_replay_flag = ACTION_REPLAY_HIDE; } else if (addr == 6) { copytoamiga (regs.vbr + 0x7c, artemp, 4); write_log (_T("AR: chipmem returned\n")); } return 0; } static void action_replay_chipwrite (void); void REGPARAM2 chipmem_lput_actionreplay1 (uaecptr addr, uae_u32 l) { uae_u32 *m; addr -= chipmem_start & chipmem_mask; addr &= chipmem_mask; if (addr == 0x60 && !is_ar_pc_in_rom()) action_replay_chipwrite (); m = (uae_u32 *)(chipmemory + addr); do_put_mem_long (m, l); } void REGPARAM2 chipmem_wput_actionreplay1 (uaecptr addr, uae_u32 w) { uae_u16 *m; addr -= chipmem_start & chipmem_mask; addr &= chipmem_mask; if (addr == 0x60 && !is_ar_pc_in_rom()) action_replay_chipwrite (); m = (uae_u16 *)(chipmemory + addr); do_put_mem_word (m, w); } void REGPARAM2 chipmem_bput_actionreplay1 (uaecptr addr, uae_u32 b) { addr -= chipmem_start & chipmem_mask; addr &= chipmem_mask; if (addr >= 0x60 && addr <= 0x63 && !is_ar_pc_in_rom()) action_replay_chipwrite(); chipmemory[addr] = b; } void REGPARAM2 chipmem_lput_actionreplay23 (uaecptr addr, uae_u32 l) { uae_u32 *m; addr -= chipmem_start & chipmem_mask; addr &= chipmem_mask; m = (uae_u32 *)(chipmemory + addr); do_put_mem_long (m, l); if (addr == 8 && action_replay_flag == ACTION_REPLAY_WAITRESET) action_replay_chipwrite(); } void REGPARAM2 chipmem_wput_actionreplay23 (uaecptr addr, uae_u32 w) { uae_u16 *m; addr -= chipmem_start & chipmem_mask; addr &= chipmem_mask; m = (uae_u16 *)(chipmemory + addr); do_put_mem_word (m, w); if (addr == 8 && action_replay_flag == ACTION_REPLAY_WAITRESET) action_replay_chipwrite(); } static uae_u32 REGPARAM3 arram_lget (uaecptr) REGPARAM; static uae_u32 REGPARAM3 arram_wget (uaecptr) REGPARAM; static uae_u32 REGPARAM3 arram_bget (uaecptr) REGPARAM; static void REGPARAM3 arram_lput (uaecptr, uae_u32) REGPARAM; static void REGPARAM3 arram_wput (uaecptr, uae_u32) REGPARAM; static void REGPARAM3 arram_bput (uaecptr, uae_u32) REGPARAM; static int REGPARAM3 arram_check (uaecptr addr, uae_u32 size) REGPARAM; static uae_u8 *REGPARAM3 arram_xlate (uaecptr addr) REGPARAM; static uae_u32 REGPARAM3 arrom_lget (uaecptr) REGPARAM; static uae_u32 REGPARAM3 arrom_wget (uaecptr) REGPARAM; static uae_u32 REGPARAM3 arrom_bget (uaecptr) REGPARAM; static void REGPARAM3 arrom_lput (uaecptr, uae_u32) REGPARAM; static void REGPARAM3 arrom_wput (uaecptr, uae_u32) REGPARAM; static void REGPARAM3 arrom_bput (uaecptr, uae_u32) REGPARAM; static int REGPARAM3 arrom_check (uaecptr addr, uae_u32 size) REGPARAM; static uae_u8 *REGPARAM3 arrom_xlate (uaecptr addr) REGPARAM; static void action_replay_unmap_banks (void); static uae_u32 action_replay_calculate_checksum(void); static uae_u8* get_checksum_location(void); static void disable_rom_test(void); static uae_u32 REGPARAM2 arram_lget (uaecptr addr) { uae_u32 *m; #ifdef JIT special_mem |= S_READ; #endif addr -= arram_start; addr &= arram_mask; m = (uae_u32 *)(armemory_ram + addr); if (strncmp ("T8", (char*)m, 2) == 0) write_log_debug (_T("Reading T8 from addr %08x PC=%p\n"), addr, m68k_getpc ()); if (strncmp ("LAME", (char*)m, 4) == 0) write_log_debug (_T("Reading LAME from addr %08x PC=%p\n"), addr, m68k_getpc ()); if (strncmp ("RES1", (char*)m, 4) == 0) write_log_debug (_T("Reading RES1 from addr %08x PC=%p\n"), addr, m68k_getpc ()); if (strncmp ("ARON", (char*)m, 4) == 0) write_log_debug (_T("Reading ARON from addr %08x PC=%p\n"), addr, m68k_getpc ()); if (strncmp ("KILL", (char*)m, 4) == 0) write_log_debug (_T("Reading KILL from addr %08x PC=%p\n"), addr, m68k_getpc ()); if (strncmp ("BRON", (char*)m, 4) == 0) write_log_debug (_T("Reading BRON from addr %08x PC=%p\n"), addr, m68k_getpc ()); if (strncmp ("PRIN", (char*)m, 4) == 0) write_log_debug (_T("Reading PRIN from addr %08x PC=%p\n"), addr, m68k_getpc ()); return do_get_mem_long (m); } static uae_u32 REGPARAM2 arram_wget (uaecptr addr) { uae_u16 *m; #ifdef JIT special_mem |= S_READ; #endif addr -= arram_start; addr &= arram_mask; m = (uae_u16 *)(armemory_ram + addr); return do_get_mem_word (m); } static uae_u32 REGPARAM2 arram_bget (uaecptr addr) { #ifdef JIT special_mem |= S_READ; #endif addr -= arram_start; addr &= arram_mask; return armemory_ram[addr]; } void REGPARAM2 arram_lput (uaecptr addr, uae_u32 l) { uae_u32 *m; #ifdef JIT special_mem |= S_WRITE; #endif addr -= arram_start; addr &= arram_mask; m = (uae_u32 *)(armemory_ram + addr); if (strncmp ("T8", (char*)m, 2) == 0) write_log_debug (_T("Writing T8 to addr %08x PC=%p\n"), addr, m68k_getpc ()); if (strncmp ("LAME", (char*)m, 4) == 0) write_log_debug (_T("Writing LAME to addr %08x PC=%p\n"), addr, m68k_getpc ()); if (strncmp ("RES1", (char*)m, 4) == 0) write_log_debug (_T("Writing RES1 to addr %08x PC=%p\n"), addr, m68k_getpc ()); if (strncmp ("ARON", (char*)m, 4) == 0) write_log_debug (_T("Writing ARON to addr %08x PC=%p\n"), addr, m68k_getpc ()); if (strncmp ("KILL", (char*)m, 4) == 0) write_log_debug (_T("Writing KILL to addr %08x PC=%p\n"), addr, m68k_getpc ()); if (strncmp ("BRON", (char*)m, 4) == 0) write_log_debug (_T("Writing BRON to addr %08x PC=%p\n"), addr, m68k_getpc ()); if (strncmp ("PRIN", (char*)m, 4) == 0) write_log_debug (_T("Writing PRIN to addr %08x PC=%p\n"), addr, m68k_getpc ()); do_put_mem_long (m, l); } void REGPARAM2 arram_wput (uaecptr addr, uae_u32 w) { uae_u16 *m; #ifdef JIT special_mem |= S_WRITE; #endif addr -= arram_start; addr &= arram_mask; m = (uae_u16 *)(armemory_ram + addr); do_put_mem_word (m, w); } void REGPARAM2 arram_bput (uaecptr addr, uae_u32 b) { #ifdef JIT special_mem |= S_WRITE; #endif addr -= arram_start; addr &= arram_mask; armemory_ram[addr] = b; } static int REGPARAM2 arram_check (uaecptr addr, uae_u32 size) { addr -= arram_start; addr &= arram_mask; return (addr + size) <= arram_size; } static uae_u8 *REGPARAM2 arram_xlate (uaecptr addr) { addr -= arram_start; addr &= arram_mask; return armemory_ram + addr; } static uae_u32 REGPARAM2 arrom_lget (uaecptr addr) { #ifdef JIT special_mem |= S_READ; #endif addr -= arrom_start; addr &= arrom_mask; return (ar3a (addr, 0, 0) << 24) | (ar3a (addr + 1, 0, 0) << 16) | (ar3a (addr + 2, 0, 0) << 8) | ar3a (addr + 3, 0, 0); } static uae_u32 REGPARAM2 arrom_wget (uaecptr addr) { #ifdef JIT special_mem |= S_READ; #endif addr -= arrom_start; addr &= arrom_mask; return (ar3a (addr, 0, 0) << 8) | ar3a (addr + 1, 0, 0); } static uae_u32 REGPARAM2 arrom_bget (uaecptr addr) { #ifdef JIT special_mem |= S_READ; #endif addr -= arrom_start; addr &= arrom_mask; return ar3a (addr, 0, 0); } static void REGPARAM2 arrom_lput (uaecptr addr, uae_u32 l) { #ifdef JIT special_mem |= S_WRITE; #endif addr -= arrom_start; addr &= arrom_mask; ar3a (addr + 0,(uae_u8)(l >> 24), 1); ar3a (addr + 1,(uae_u8)(l >> 16), 1); ar3a (addr + 2,(uae_u8)(l >> 8), 1); ar3a (addr + 3,(uae_u8)(l >> 0), 1); } static void REGPARAM2 arrom_wput (uaecptr addr, uae_u32 w) { #ifdef JIT special_mem |= S_WRITE; #endif addr -= arrom_start; addr &= arrom_mask; ar3a (addr + 0,(uae_u8)(w >> 8), 1); ar3a (addr + 1,(uae_u8)(w >> 0), 1); } static void REGPARAM2 arrom_bput (uaecptr addr, uae_u32 b) { #ifdef JIT special_mem |= S_WRITE; #endif addr -= arrom_start; addr &= arrom_mask; ar3a (addr, b, 1); } static int REGPARAM2 arrom_check (uaecptr addr, uae_u32 size) { addr -= arrom_start; addr &= arrom_mask; return (addr + size) <= arrom_size; } static uae_u8 *REGPARAM2 arrom_xlate (uaecptr addr) { addr -= arrom_start; addr &= arrom_mask; return armemory_rom + addr; } static addrbank arrom_bank = { arrom_lget, arrom_wget, arrom_bget, arrom_lput, arrom_wput, arrom_bput, arrom_xlate, arrom_check, NULL, _T("Action Replay ROM"), arrom_lget, arrom_wget, ABFLAG_ROM }; static addrbank arram_bank = { arram_lget, arram_wget, arram_bget, arram_lput, arram_wput, arram_bput, arram_xlate, arram_check, NULL, _T("Action Replay RAM"), arram_lget, arram_wget, ABFLAG_RAM }; static void action_replay_map_banks (void) { if(!armemory_rom) return; map_banks (&arrom_bank, arrom_start >> 16, arrom_size >> 16, 0); map_banks (&arram_bank, arram_start >> 16, arram_size >> 16, 0); } static void action_replay_unmap_banks (void) { if(!armemory_rom) return; if (armodel == 1) { action_replay_map_banks (); return; } map_banks (&dummy_bank, arrom_start >> 16 , arrom_size >> 16, 0); map_banks (&dummy_bank, arram_start >> 16 , arram_size >> 16, 0); } static void hide_cart (int hide) { #ifdef ACTION_REPLAY_HIDE_CARTRIDGE if(hide) { action_replay_unmap_banks (); } else { action_replay_map_banks (); } #endif } /* Cartridge activates itself by overlaying its rom * over chip-ram and then issuing IRQ 7 * * I just copy IRQ vector 7 from ROM to chip RAM * instead of fully emulating cartridge's behaviour. */ static void action_replay_go (void) { //write_log (_T("AR GO %d\n"), armode); cartridge_enter(); hide_cart (0); memcpy (armemory_ram + 0xf000, ar_custom, 2 * 256); action_replay_flag = ACTION_REPLAY_ACTIVE; set_special (SPCFLAG_ACTION_REPLAY); copyfromamiga (artemp, regs.vbr + 0x7c, 4); copytoamiga (regs.vbr + 0x7c, armemory_rom + 0x7c, 4); NMI (); } static void action_replay_go1 (int irq) { cartridge_enter(); hide_cart (0); action_replay_flag = ACTION_REPLAY_ACTIVE; memcpy (armemory_ram + 0xf000, ar_custom, 2 * 256); NMI (); } typedef struct { uae_u8 dummy[4+4]; uae_u8 jmps[3*4]; uae_u32 mon_size; uae_u8 col0h, col0l, col1h, col1l; uae_u8 right; uae_u8 keyboard; uae_u8 key; uae_u8 ide; uae_u8 a1200; uae_u8 aga; uae_u8 insert; uae_u8 delay; uae_u8 lview; uae_u8 cd32; uae_u8 screenmode; uae_u8 novbr; uae_u8 entered; uae_u8 hexmode; uae_u16 error_sr; uae_u32 error_pc; uae_u16 error_status; uae_u8 newid[6]; uae_u16 mon_version; uae_u16 mon_revision; uae_u32 whd_base; uae_u16 whd_version; uae_u16 whd_revision; uae_u32 max_chip; uae_u32 whd_expstrt; uae_u32 whd_expstop; } HRTCFG; static void hrtmon_go (void) { uaecptr old; int i; triggered_once = 1; cartridge_enter(); hrtmon_flag = ACTION_REPLAY_ACTIVE; set_special (SPCFLAG_ACTION_REPLAY); if (hrtmon_zeropage) memcpy (hrtmon_zeropage, chipmemory, 1024); if (hrtmon_custom) memcpy (hrtmon_custom, ar_custom, 2 * 256); for (i = 0; i < 16; i++) { if (hrtmon_ciaa) hrtmon_ciaa[i * hrtmon_ciadiv + 1] = ar_ciaa[i]; if (hrtmon_ciab) hrtmon_ciab[i * hrtmon_ciadiv + 0] = ar_ciab[i]; } if (cart_type == CART_AR1200) { old = get_long ((uaecptr)(regs.vbr + 0x8)); put_word (hrtmem_start + 0xc0000, 4); put_long ((uaecptr)(regs.vbr + 8), get_long (hrtmem_start + 8)); Exception (2); put_long ((uaecptr)(regs.vbr + 8), old); } else if (cart_type == CART_SUPER4) { uae_u32 v = get_long (hrtmem_start + 0x7c); if (v) { old = get_long ((uaecptr)(regs.vbr + 0x7c)); put_long ((uaecptr)(regs.vbr + 0x7c), v); NMI (); put_long ((uaecptr)(regs.vbr + 0x7c), old); } } else { // HRTMON old = get_long ((uaecptr)(regs.vbr + 0x7c)); put_long ((uaecptr)(regs.vbr + 0x7c), hrtmem_start + 8 + 4); NMI (); //put_long ((uaecptr)(regs.vbr + 0x7c), old); } } void hrtmon_enter (void) { if (!hrtmemory) return; hrtmon_map_banks (); write_log (_T("%s: freeze\n"), cart_memnames[cart_type]); hrtmon_go(); } void action_replay_enter (void) { if (!armemory_rom) return; triggered_once = 1; if (armodel == 1) { write_log (_T("AR1: Enter PC:%p\n"), m68k_getpc ()); action_replay_go1 (7); unset_special (SPCFLAG_ACTION_REPLAY); return; } if (action_replay_flag == ACTION_REPLAY_DORESET) { write_log (_T("AR2/3: reset\n")); armode = action_replay_hardreset ? ARMODE_BREAKPOINT_AR3_RESET_AR2 : 2; action_replay_hardreset = false; } else if (armode == ARMODE_FREEZE) { write_log (_T("AR2/3: activated (freeze)\n")); } else if (armode >= 2) { if (armode == ARMODE_BREAKPOINT_AR2) write_log (_T("AR2: activated (breakpoint)\n")); else if (armode == ARMODE_BREAKPOINT_AR3_RESET_AR2) write_log (_T("AR3: activated (breakpoint)\n")); else write_log (_T("AR2/3: mode(%d) > 3 this shouldn't happen.\n"), armode); armode = ARMODE_BREAKPOINT_ACTIVATED; } action_replay_go(); } void check_prefs_changed_carts (int in_memory_reset) { if (!config_changed) return; if (currprefs.cart_internal != changed_prefs.cart_internal) currprefs.cart_internal = changed_prefs.cart_internal; if (_tcscmp (currprefs.cartfile, changed_prefs.cartfile) != 0) { write_log (_T("Cartridge ROM Prefs changed.\n")); if (action_replay_unload (in_memory_reset)) { memcpy (currprefs.cartfile, changed_prefs.cartfile, sizeof currprefs.cartfile); #ifdef ACTION_REPLAY action_replay_load (); action_replay_init (1); #endif #ifdef ACTION_REPLAY_HRTMON hrtmon_load (); #endif } } } void action_replay_reset (bool hardreset, bool keyboardreset) { if (hrtmemory) { if (isrestore ()) { if (m68k_getpc () >= hrtmem_start && m68k_getpc () <= hrtmem_start + hrtmem_size) hrtmon_map_banks (); else hrtmon_unmap_banks (); } } else { if (action_replay_flag == ACTION_REPLAY_INACTIVE) return; if (isrestore ()) { if (m68k_getpc () >= arrom_start && m68k_getpc () <= arrom_start + arrom_size) { action_replay_flag = ACTION_REPLAY_ACTIVE; hide_cart (0); } else { action_replay_flag = ACTION_REPLAY_IDLE; hide_cart (1); } return; } if (armodel == 1) { /* We need to mark it as active here, because the kickstart rom jumps directly into it. */ action_replay_flag = ACTION_REPLAY_ACTIVE; hide_cart (0); } else { write_log_debug (_T("Setting flag to ACTION_REPLAY_WAITRESET (%d)\n"), hardreset); write_log_debug (_T("armode == %d\n"), armode); action_replay_flag = ACTION_REPLAY_WAITRESET; if (hardreset || keyboardreset || armodel == 2) action_replay_hardreset = true; hide_cart (0); } } } void action_replay_ciaread (void) { if (armodel < 2) return; if (action_replay_flag != ACTION_REPLAY_IDLE) return; if (action_replay_flag == ACTION_REPLAY_INACTIVE) return; if (armode < 2) /* If there are no active breakpoints */ return; if (m68k_getpc () >= 0x200) return; action_replay_flag = ACTION_REPLAY_ACTIVATE; set_special (SPCFLAG_ACTION_REPLAY); } int action_replay_freeze (void) { if (action_replay_flag == ACTION_REPLAY_IDLE) { if (armodel == 1) { action_replay_chipwrite (); } else { action_replay_flag = ACTION_REPLAY_ACTIVATE; set_special (SPCFLAG_ACTION_REPLAY); armode = ARMODE_FREEZE; } return 1; } else if (hrtmon_flag) { hrtmon_flag = ACTION_REPLAY_ACTIVATE; set_special (SPCFLAG_ACTION_REPLAY); return 1; } return 0; } static void action_replay_chipwrite (void) { //write_log (_T("AR CW\n")); if (armodel == 2 || armodel == 3) { action_replay_flag = ACTION_REPLAY_DORESET; set_special (SPCFLAG_ACTION_REPLAY); } else if (armodel == 1) { /* copy 0x60 addr info to level 7 */ /* This is to emulate the 0x60 interrupt. */ copyfromamiga (artemp, regs.vbr + 0x60, 4); copytoamiga (regs.vbr + 0x7c, artemp, 4); ar_wait_pop = 1; /* Wait for stack to pop. */ action_replay_flag = ACTION_REPLAY_ACTIVATE; set_special (SPCFLAG_ACTION_REPLAY); } } void action_replay_hide(void) { hide_cart(1); action_replay_flag = ACTION_REPLAY_IDLE; } void hrtmon_hide(void) { HRTCFG *cfg = (HRTCFG*)hrtmemory; if (cart_type != CART_AR1200 && cfg->entered) return; cartridge_exit(); hrtmon_flag = ACTION_REPLAY_IDLE; unset_special (SPCFLAG_ACTION_REPLAY); //write_log (_T("HRTMON: Exit\n")); } void hrtmon_breakenter(void) { //hrtmon_flag = ACTION_REPLAY_HIDE; //set_special (SPCFLAG_ACTION_REPLAY); } /* Disabling copperlist processing: * On: ar317 an rts at 41084c does it. * On: ar214: an rts at 41068e does it. */ /* Original AR3 v3.09 only works with KS 1.3 * v3.17 supports also KS 2.04 (v37.175) * this patch handles other rom versions. */ static uae_u8 ar3patch1[] = {0x20,0xc9,0x51,0xc9,0xff,0xfc}; static uae_u8 ar3patch2[] = {0x00,0xfc,0x01,0x44}; static void action_replay_patch (void) { int off1,off2; uae_u8 *kickmem = kickmemory; if (armodel != 3 || !kickmem || !armemory_rom) return; if (!memcmp (kickmem, kickmem + 262144, 262144)) off1 = 262144; else off1 = 0; for (;;) { if (!memcmp (kickmem + off1, ar3patch1, sizeof (ar3patch1)) || off1 == 524288 - sizeof (ar3patch1)) break; off1++; } off2 = 0; for(;;) { if (!memcmp (armemory_rom + off2, ar3patch2, sizeof(ar3patch2)) || off2 == ar_rom_file_size - sizeof (ar3patch2)) break; off2++; } if (off1 == 524288 - sizeof (ar3patch1) || off2 == ar_rom_file_size - sizeof (ar3patch2)) return; armemory_rom[off2 + 0] = (uae_u8)((off1 + kickmem_start + 2) >> 24); armemory_rom[off2 + 1] = (uae_u8)((off1 + kickmem_start + 2) >> 16); armemory_rom[off2 + 2] = (uae_u8)((off1 + kickmem_start + 2) >> 8); armemory_rom[off2 + 3] = (uae_u8)((off1 + kickmem_start + 2) >> 0); write_log (_T("AR ROM patched for KS2.0+ (%x)\n"), off2); } /* Returns 0 if the checksum is OK. * Else, it returns the calculated checksum. * Note: Will be wrong if the checksum is zero, but i'll take my chances on that not happenning ;) */ static uae_u32 action_replay_calculate_checksum (void) { uae_u32* checksum_end; uae_u32* checksum_start; uae_u8 checksum_start_offset[] = { 0, 0, 4, 0x7c }; uae_u32 checksum = 0; uae_u32 stored_checksum; /* All models: The checksum is calculated right upto the long checksum in the rom. * AR1: The checksum starts at offset 0. * AR1: The checksum is the last non-zero long in the rom. * AR2: The checksum starts at offset 4. * AR2: The checksum is the last Long in the rom. * AR3: The checksum starts at offset 0x7c. * AR3: The checksum is the last Long in the rom. * * Checksums: (This is a good way to compare roms. I have two with different md5sums, * but the same checksum, so the difference must be in the first four bytes.) * 3.17 0xf009bfc9 * 3.09 0xd34d04a7 * 2.14 0xad839d36 * 2.14 0xad839d36 * 1.15 0xee12116 */ if (!armemory_rom) return 0; /* If there is no rom then i guess the checksum is ok */ checksum_start = (uae_u32*)&armemory_rom[checksum_start_offset[armodel]]; checksum_end = (uae_u32*)&armemory_rom[ar_rom_file_size]; /* Search for first non-zero Long starting from the end of the rom. */ /* Assume long alignment, (will always be true for AR2 and AR3 and the AR1 rom i've got). */ /* If anyone finds an AR1 rom with a word-aligned checksum, then this code will have to be modified. */ while (! *(--checksum_end)); if (armodel == 1) { uae_u16* rom_ptr_word; uae_s16 sign_extended_word; rom_ptr_word = (uae_u16*)checksum_start; while (rom_ptr_word != (uae_u16*)checksum_end) { sign_extended_word = (uae_s16)do_get_mem_word (rom_ptr_word); /* When the word is cast on the following line, it will get sign-extended. */ checksum += (uae_u32)sign_extended_word; rom_ptr_word++; } } else { uae_u32* rom_ptr_long; rom_ptr_long = checksum_start; while (rom_ptr_long != checksum_end) { checksum += do_get_mem_long (rom_ptr_long); rom_ptr_long++; } } stored_checksum = do_get_mem_long (checksum_end); return checksum == stored_checksum ? 0 : checksum; } /* Returns 0 on error. */ static uae_u8* get_checksum_location (void) { uae_u32* checksum_end; /* See action_replay_calculate_checksum() for checksum info. */ if (!armemory_rom) return 0; checksum_end = (uae_u32*)&armemory_rom[ar_rom_file_size]; /* Search for first non-zero Long starting from the end of the rom. */ while (! *(--checksum_end)); return (uae_u8*)checksum_end; } /* Replaces the existing cart checksum with a correct one. */ /* Useful if you want to patch the rom. */ static void action_replay_fixup_checksum (uae_u32 new_checksum) { uae_u32* checksum = (uae_u32*)get_checksum_location(); if (checksum) do_put_mem_long (checksum, new_checksum); else write_log (_T("Unable to locate Checksum in ROM.\n")); return; } /* Longword search on word boundary * the search_value is assumed to already be in the local endian format * return 0 on failure */ static uae_u8* find_absolute_long (uae_u8* start_addr, uae_u8* end_addr, uae_u32 search_value) { uae_u8* addr; for (addr = start_addr; addr < end_addr;) { if (do_get_mem_long ((uae_u32*)addr) == search_value) { /* write_log_debug("Found %p at offset %p.\n", search_value, addr - start_addr);*/ return addr; } addr += 2; } return 0; } /* word search on word boundary * the search_addr is assumed to already be in the local endian format * return 0 on failure * Currently only tested where the address we are looking for is AFTER the instruction. * Not sure it works with negative offsets. */ static uae_u8* find_relative_word (uae_u8* start_addr, uae_u8* end_addr, uae_u16 search_addr) { uae_u8* addr; for (addr = start_addr; addr < end_addr;) { if (do_get_mem_word((uae_u16*)addr) == (uae_u16)(search_addr - (uae_u16)(addr - start_addr))) { /* write_log_debug("Found %p at offset %p.\n", search_addr, addr - start_addr);*/ return addr; } addr += 2; } return 0; } /* Disable rom test */ /* This routine replaces the rom-test routine with a 'rts'. * It does this in a 'safe' way, by searching for a reference to the checksum * and only disables it if the surounding bytes are what it expects. */ static void disable_rom_test (void) { uae_u8* addr; uae_u8* start_addr = armemory_rom; uae_u8* end_addr = get_checksum_location(); /* * To see what the routine below is doing. Here is some code from the Action replay rom where it does the * checksum test. * AR1: * F0D4D0 6100 ???? bsr.w calc_checksum ; calculate the checksum * F0D4D4 41FA 147A lea (0xf0e950,PC),a0 ; load the existing checksum. * ; do a comparison. * AR2: * 40EC92 6100 ???? bsr.w calc_checksum * 40EC96 41F9 0041 FFFC lea (0x41fffc),a0 */ if (armodel == 1) { uae_u16 search_value_rel = end_addr - start_addr; addr = find_relative_word(start_addr, end_addr, search_value_rel); if (addr) { if (do_get_mem_word((uae_u16*)(addr-6)) == 0x6100 && /* bsr.w */ do_get_mem_word((uae_u16*)(addr-2)) == 0x41fa) /* lea relative */ { write_log (_T("Patching to disable ROM TEST.\n")); do_put_mem_word((uae_u16*)(addr-6), 0x4e75); /* rts */ } } } else { uae_u32 search_value_abs = arrom_start + end_addr - start_addr; addr = find_absolute_long (start_addr, end_addr, search_value_abs); if (addr) { if (do_get_mem_word((uae_u16*)(addr-6)) == 0x6100 && /* bsr.w */ do_get_mem_word((uae_u16*)(addr-2)) == 0x41f9) /* lea absolute */ { write_log (_T("Patching to disable ROM TEST.\n")); do_put_mem_word((uae_u16*)(addr-6), 0x4e75); /* rts */ } } } } /* After we have calculated the checksum, and verified the rom is ok, * we can do two things. * 1. (optionally)Patch it and then update the checksum. * 2. Remove the checksum check and (optionally) patch it. * I have chosen to use no.2 here, because it should speed up the Action Replay slightly (and it was fun). */ static void action_replay_checksum_info (void) { if (!armemory_rom) return; if (action_replay_calculate_checksum() == 0) write_log (_T("Action Replay Checksum is OK.\n")); else write_log (_T("Action Replay Checksum is INVALID.\n")); disable_rom_test(); } static void action_replay_setbanks (void) { if (!savestate_state && chipmem_bank.lput == chipmem_lput) { switch (armodel) { case 2: case 3: if (currprefs.cpu_cycle_exact) chipmem_bank.wput = chipmem_wput_actionreplay23; chipmem_bank.lput = chipmem_lput_actionreplay23; break; case 1: chipmem_bank.bput = chipmem_bput_actionreplay1; chipmem_bank.wput = chipmem_wput_actionreplay1; chipmem_bank.lput = chipmem_lput_actionreplay1; break; } } } static void action_replay_unsetbanks (void) { chipmem_bank.bput = chipmem_bput; chipmem_bank.wput = chipmem_wput; chipmem_bank.lput = chipmem_lput; } /* param to allow us to unload the cart. Currently we know it is safe if we are doing a reset to unload it.*/ int action_replay_unload (int in_memory_reset) { static const TCHAR *state[] = { _T("ACTION_REPLAY_WAIT_PC"), _T("ACTION_REPLAY_INACTIVE"), _T("ACTION_REPLAY_WAITRESET"), _T("0"), _T("ACTION_REPLAY_IDLE"), _T("ACTION_REPLAY_ACTIVATE"), _T("ACTION_REPLAY_ACTIVE"), _T("ACTION_REPLAY_DORESET"), _T("ACTION_REPLAY_HIDE"), }; if (!armemory_rom && !hrtmemory) return 0; write_log_debug (_T("Action Replay State:(%s)\nHrtmon State:(%s)\n"), state[action_replay_flag + 3], state[hrtmon_flag + 3]); if (armemory_rom && armodel == 1) { if (is_ar_pc_in_ram() || is_ar_pc_in_rom() || action_replay_flag == ACTION_REPLAY_WAIT_PC) { write_log (_T("Can't Unload Action Replay 1. It is Active.\n")); return 0; } } else { if (action_replay_flag != ACTION_REPLAY_IDLE && action_replay_flag != ACTION_REPLAY_INACTIVE) { write_log (_T("Can't Unload Action Replay. It is Active.\n")); return 0; /* Don't unload it whilst it's active, or it will crash the amiga if not the emulator */ } if (hrtmon_flag != ACTION_REPLAY_IDLE && hrtmon_flag != ACTION_REPLAY_INACTIVE) { write_log (_T("Can't Unload Hrtmon. It is Active.\n")); return 0; /* Don't unload it whilst it's active, or it will crash the amiga if not the emulator */ } } unset_special (SPCFLAG_ACTION_REPLAY); /* This shouldn't be necessary here, but just in case. */ action_replay_flag = ACTION_REPLAY_INACTIVE; hrtmon_flag = ACTION_REPLAY_INACTIVE; action_replay_unsetbanks (); action_replay_unmap_banks (); hrtmon_unmap_banks (); /* Make sure you unmap everything before you call action_replay_cleanup() */ action_replay_cleanup (); return 1; } static int superiv_init (struct romdata *rd, struct zfile *f) { uae_u32 chip = currprefs.chipmem_size - 0x10000; int subtype = rd->id; int flags = rd->type; TCHAR *memname1, *memname2, *memname3; memname1 = memname2 = memname3 = NULL; cart_type = CART_SUPER4; hrtmon_custom = 0; hrtmon_ciaa = 0; hrtmon_ciab = 0; if (flags & ROMTYPE_XPOWER) { /* xpower */ hrtmem_start = 0xe20000; hrtmem_size = 0x20000; hrtmem2_start = 0xf20000; hrtmem2_size = 0x10000; hrtmem_rom = 1; memname1 = _T("xpower_e2"); memname2 = _T("xpower_f2"); } else if (flags & ROMTYPE_NORDIC) { /* nordic */ hrtmem_start = 0xf00000; hrtmem_size = 0x10000; hrtmem_end = 0xf20000; hrtmem2_start = 0xf40000; hrtmem2_end = 0xf60000; hrtmem2_size = 0x10000; hrtmem_rom = 1; memname1 = _T("nordic_f0"); memname2 = _T("nordic_f4"); if (subtype == 70) { hrtmem_start += 0x60000; hrtmem_end += 0x60000; memname1 = _T("nordic_f6"); } } else { /* super4 */ hrtmem_start = 0xd00000; hrtmem_size = 0x40000; hrtmem2_start = 0xb00000; hrtmem2_size = 0x100000; hrtmem2_size2 = 0x0c0000; hrtmem3_start = 0xe00000; hrtmem3_size = 0x80000; memname1 = _T("superiv_d0"); memname2 = _T("superiv_b0"); memname3 = _T("superiv_e0"); } if (hrtmem2_size && !hrtmem2_size2) hrtmem2_size2 = hrtmem2_size; hrtmemory = mapped_malloc (hrtmem_size, memname1); memset (hrtmemory, 0x00, hrtmem_size); if (f) { zfile_fseek (f, 0, SEEK_SET); zfile_fread (hrtmemory, 1, hrtmem_size, f); zfile_fclose (f); } hrtmem_mask = hrtmem_size - 1; hrtmem2_mask = hrtmem2_size - 1; hrtmem3_mask = hrtmem3_size - 1; if (hrtmem2_size) { hrtmemory2 = mapped_malloc (hrtmem2_size, memname2); memset(hrtmemory2, 0, hrtmem2_size); } if (hrtmem3_size) { hrtmemory3 = mapped_malloc (hrtmem3_size, memname3); memset(hrtmemory3, 0, hrtmem3_size); } hrtmem3_bank.baseaddr = hrtmemory3; hrtmem2_bank.baseaddr = hrtmemory2; hrtmem_bank.baseaddr = hrtmemory; if (flags & ROMTYPE_XPOWER) { hrtmon_custom = hrtmemory2 + 0xfc00; hrtmon_ciaa = hrtmemory2 + 0xfc00; hrtmon_ciab = hrtmemory2 + 0xfc01; hrtmon_ciadiv = 2; chip += 0x30000; hrtmemory2[0xfc80] = chip >> 24; hrtmemory2[0xfc81] = chip >> 16; hrtmemory2[0xfc82] = chip >> 8; hrtmemory2[0xfc83] = chip >> 0; } else if (flags & ROMTYPE_NORDIC) { hrtmon_custom = hrtmemory2 + 0x3c00; hrtmon_ciaa = hrtmemory2 + 0x3c00; hrtmon_ciab = hrtmemory2 + 0x3c01; hrtmon_ciadiv = 2; hrtmon_zeropage = hrtmemory2 + 0; /* eh? why not just use CPU? */ } else { hrtmon_custom = hrtmemory3 + 0x040000; hrtmon_ciaa = hrtmemory2 + 0x040000; hrtmon_ciab = hrtmemory2 + 0x040001; chip += 0x30000; hrtmemory2[0x80] = chip >> 24; hrtmemory2[0x81] = chip >> 16; hrtmemory2[0x82] = chip >> 8; hrtmemory2[0x83] = chip >> 0; } hrtmon_flag = ACTION_REPLAY_IDLE; write_log (_T("%s installed at %08X\n"), cart_memnames[cart_type], hrtmem_start); return 1; } int action_replay_load (void) { struct zfile *f; uae_u8 header[8]; struct romdata *rd; armodel = 0; action_replay_flag = ACTION_REPLAY_INACTIVE; write_log_debug (_T("Entered action_replay_load ()\n")); /* Don't load a rom if one is already loaded. Use action_replay_unload () first. */ if (armemory_rom || hrtmemory) { write_log (_T("action_replay_load () ROM already loaded.\n")); return 0; } if (_tcslen (currprefs.cartfile) == 0) return 0; rd = getromdatabypath (currprefs.cartfile); if (rd) { if (rd->id == 62) return superiv_init (rd, NULL); if (rd->type & ROMTYPE_CD32CART) return 0; } f = read_rom_name (currprefs.cartfile); if (!f) { write_log (_T("failed to load '%s' cartridge ROM\n"), currprefs.cartfile); return 0; } rd = getromdatabyzfile(f); if (!rd) { write_log (_T("Unknown cartridge ROM\n")); } else { if (rd->type & (ROMTYPE_SUPERIV | ROMTYPE_NORDIC | ROMTYPE_XPOWER)) { return superiv_init (rd, f); } } zfile_fseek(f, 0, SEEK_END); ar_rom_file_size = zfile_ftell(f); zfile_fseek(f, 0, SEEK_SET); zfile_fread (header, 1, sizeof header, f); zfile_fseek (f, 0, SEEK_SET); if (!memcmp (header, "ATZ!HRT!", 8)) { zfile_fclose (f); return 0; } if (ar_rom_file_size != 65536 && ar_rom_file_size != 131072 && ar_rom_file_size != 262144) { write_log (_T("rom size must be 64KB (AR1), 128KB (AR2) or 256KB (AR3)\n")); zfile_fclose(f); return 0; } action_replay_flag = ACTION_REPLAY_INACTIVE; armemory_rom = xmalloc (uae_u8, ar_rom_file_size); zfile_fread (armemory_rom, 1, ar_rom_file_size, f); zfile_fclose (f); if (ar_rom_file_size == 65536) { armodel = 1; arrom_start = 0xf00000; arrom_size = 0x10000; /* real AR1 RAM location is 0x9fc000-0x9fffff */ arram_start = 0x9f0000; arram_size = 0x10000; } else { armodel = ar_rom_file_size / 131072 + 1; arrom_start = 0x400000; arrom_size = armodel == 2 ? 0x20000 : 0x40000; arram_start = 0x440000; arram_size = 0x10000; } arram_mask = arram_size - 1; arrom_mask = arrom_size - 1; armemory_ram = xcalloc (uae_u8, arram_size); write_log (_T("Action Replay %d installed at %08X, size %08X\n"), armodel, arrom_start, arrom_size); action_replay_version(); return armodel; } void action_replay_init (int activate) { if (!armemory_rom) return; hide_cart (0); if (armodel > 1) hide_cart (1); if (activate) { if (armodel > 1) action_replay_flag = ACTION_REPLAY_WAITRESET; } } /* This only deallocates memory, it is not suitable for unloading roms and continuing */ void action_replay_cleanup() { if (armemory_rom) free (armemory_rom); if (armemory_ram) free (armemory_ram); if (hrtmemory) mapped_free (hrtmemory); if (hrtmemory2) mapped_free (hrtmemory2); if (hrtmemory3) mapped_free (hrtmemory3); armemory_rom = 0; armemory_ram = 0; hrtmemory = 0; hrtmemory2 = 0; hrtmemory3 = 0; hrtmem_size = 0; hrtmem2_size = 0; hrtmem2_size2 = 0; hrtmem3_size = 0; cart_type = 0; hrtmem_rom = 0; hrtmon_ciadiv = 256; hrtmon_zeropage = 0; hrtmem_end = 0; hrtmem2_end = 0; } #ifndef FALSE #define FALSE 0 #endif #ifndef TRUE #define TRUE 1 #endif int hrtmon_lang = 0; static void hrtmon_configure(void) { HRTCFG *cfg = (HRTCFG*)hrtmemory; if (cart_type != CART_HRTMON || armodel || !cfg) return; cfg->col0h = 0x00; cfg->col0l = 0x5a; cfg->col1h = 0x0f; cfg->col1l = 0xff; cfg->aga = (currprefs.chipset_mask & CSMASK_AGA) ? 1 : 0; cfg->cd32 = currprefs.cs_cd32cd ? 1 : 0; cfg->screenmode = currprefs.ntscmode; cfg->novbr = TRUE; cfg->hexmode = TRUE; cfg->entered = 0; cfg->keyboard = hrtmon_lang; do_put_mem_long (&cfg->max_chip, currprefs.chipmem_size); do_put_mem_long (&cfg->mon_size, 0x800000); cfg->ide = currprefs.cs_ide ? 1 : 0; cfg->a1200 = currprefs.cs_ide == IDE_A600A1200 ? 1 : 0; /* type of IDE interface, not Amiga model */ } int hrtmon_load (void) { struct zfile *f; uae_u32 header[4]; struct romdata *rd; int isinternal = 0; /* Don't load a rom if one is already loaded. Use action_replay_unload () first. */ if (armemory_rom) return 0; if (hrtmemory) return 0; triggered_once = 0; armodel = 0; cart_type = CART_AR; hrtmem_start = 0xa10000; rd = getromdatabypath(currprefs.cartfile); if (rd) { if (rd->id == 63) isinternal = 1; if (rd->type & ROMTYPE_CD32CART) return 0; } if (!isinternal) { if (_tcslen (currprefs.cartfile) == 0) return 0; f = read_rom_name (currprefs.cartfile); if(!f) { write_log (_T("failed to load '%s' cartridge ROM\n"), currprefs.cartfile); return 0; } zfile_fread(header, sizeof header, 1, f); if (!memcmp (header, "ATZ!", 4)) { cart_type = CART_AR1200; armodel = 1200; hrtmem_start = 0x800000; } else if (!memcmp (header, "HRT!", 4)) { cart_type = CART_HRTMON; } else { zfile_fclose (f); return 0; } } hrtmem_size = 0x100000; hrtmem_mask = hrtmem_size - 1; if (isinternal) { #ifdef ACTION_REPLAY_HRTMON extern unsigned char hrtrom[]; extern unsigned int hrtrom_len; struct zfile *zf; zf = zfile_fopen_data (_T("hrtrom.gz"), hrtrom_len, hrtrom); // f = zfile_fopen (_T("d:\\amiga\\amiga\\hrtmon\\src\\hrtmon.rom"), _T("rb"), 0); f = zfile_gunzip (zf); #else return 0; #endif cart_type = CART_HRTMON; } hrtmemory = mapped_malloc (hrtmem_size, _T("hrtmem")); memset (hrtmemory, 0xff, 0x80000); zfile_fseek (f, 0, SEEK_SET); zfile_fread (hrtmemory, 1, 524288, f); zfile_fclose (f); hrtmon_configure (); hrtmon_custom = hrtmemory + 0x08f000; hrtmon_ciaa = hrtmemory + 0x08e000; hrtmon_ciab = hrtmemory + 0x08d000; #if 0 if (hrtmem2_size) { hrtmem2_mask = hrtmem2_size - 1; hrtmemory2 = mapped_malloc (hrtmem2_size, cart_memnames2[cart_type]); memset(hrtmemory2, 0, hrtmem2_size); hrtmem2_bank.baseaddr = hrtmemory2; } #endif hrtmem_bank.baseaddr = hrtmemory; hrtmon_flag = ACTION_REPLAY_IDLE; write_log (_T("%s installed at %08X\n"), cart_memnames[cart_type], hrtmem_start); return 1; } void hrtmon_map_banks (void) { uaecptr addr; if (!hrtmemory) return; addr = hrtmem_start; while (addr != hrtmem_end) { map_banks (&hrtmem_bank, addr >> 16, hrtmem_size >> 16, 0); addr += hrtmem_size; if (!hrtmem_end) break; } if (hrtmem2_size) { addr = hrtmem2_start; while (addr != hrtmem2_end) { map_banks (&hrtmem2_bank, addr >> 16, hrtmem2_size2 >> 16, 0); addr += hrtmem2_size; if (!hrtmem2_end) break; } } if (hrtmem3_size) map_banks (&hrtmem3_bank, hrtmem3_start >> 16, hrtmem3_size >> 16, 0); } static void hrtmon_unmap_banks (void) { uaecptr addr; if (!hrtmemory) return; addr = hrtmem_start; while (addr != hrtmem_end) { map_banks (&dummy_bank, addr >> 16, hrtmem_size >> 16, 0); addr += hrtmem_size; if (!hrtmem_end) break; } if (hrtmem2_size) { addr = hrtmem2_start; while (addr != hrtmem2_end) { map_banks (&dummy_bank, addr >> 16, hrtmem2_size2 >> 16, 0); addr += hrtmem2_size; if (!hrtmem2_end) break; } } if (hrtmem3_size) map_banks (&dummy_bank, hrtmem3_start >> 16, hrtmem3_size >> 16, 0); } #define AR_VER_STR_OFFSET 0x4 /* offset in the rom where the version string begins. */ #define AR_VER_STR_END 0x7c /* offset in the rom where the version string ends. */ #define AR_VER_STR_LEN (AR_VER_STR_END - AR_VER_STR_OFFSET) static uae_char arVersionString[AR_VER_STR_LEN+1]; /* This function extracts the version info for AR2 and AR3. */ void action_replay_version(void) { char* tmp; int iArVersionMajor = -1 ; int iArVersionMinor = -1; char* pNext; uae_char sArDate[11]; *sArDate = '\0'; if (!armemory_rom) return; if (armodel == 1) return; /* no support yet. */ /* Extract Version string */ memcpy(arVersionString, armemory_rom+AR_VER_STR_OFFSET, AR_VER_STR_LEN); arVersionString[AR_VER_STR_LEN]= '\0'; tmp = strchr(arVersionString, 0x0d); if (tmp) { *tmp = '\0'; } /* write_log_debug("Version string is : '%s'\n", arVersionString); */ tmp = strchr(arVersionString,')'); if (tmp) { *tmp = '\0'; tmp = strchr(arVersionString, '('); if (tmp) { if (*(tmp + 1) == 'V') { pNext = tmp + 2; tmp = strchr(pNext, '.'); if (tmp) { *tmp = '\0'; iArVersionMajor = atoi(pNext); pNext = tmp+1; tmp = strchr(pNext, ' '); if (tmp) { *tmp = '\0'; iArVersionMinor = atoi(pNext); } pNext = tmp+1; strcpy (sArDate, pNext); } } } } if (iArVersionMajor > 0) { TCHAR *s = au (sArDate); write_log (_T("Version of cart is '%d.%.02d', date is '%s'\n"), iArVersionMajor, iArVersionMinor, s); xfree (s); } } /* This function doesn't reset the Cart memory, it is just called during a memory reset */ void action_replay_memory_reset (void) { #ifdef ACTION_REPLAY_HRTMON if (hrtmemory) { hrtmon_hide (); /* It is never really idle */ hrtmon_flag = ACTION_REPLAY_IDLE; if (cart_type == CART_SUPER4) hrtmon_map_banks (); } #endif #ifdef ACTION_REPLAY_COMMON check_prefs_changed_carts (1); #endif action_replay_patch (); action_replay_checksum_info (); action_replay_setbanks (); hrtmon_configure (); if (armodel == 1) action_replay_flag = ACTION_REPLAY_ACTIVE; } uae_u8 *save_hrtmon (int *len, uae_u8 *dstptr) { uae_u8 *dstbak, *dst; if (!hrtmemory) return 0; if (!triggered_once) return 0; if (dstptr) dstbak = dst = dstptr; else dstbak = dst = (uae_u8*)malloc (hrtmem_size + hrtmem2_size + sizeof ar_custom + sizeof ar_ciaa + sizeof ar_ciab + 1024); save_u8 (cart_type); save_u8 (0); save_u32 (0); save_string (currprefs.cartfile); save_u32 (0); if (!hrtmem_rom) { save_u32 (hrtmem_size); memcpy (dst, hrtmemory, hrtmem_size); dst += hrtmem_size; } else if (hrtmem2_size) { save_u32 (hrtmem2_size); memcpy (dst, hrtmemory2, hrtmem2_size); dst += hrtmem2_size; } else { save_u32 (0); } save_u32 (sizeof ar_custom); memcpy (dst, ar_custom, sizeof ar_custom); dst += sizeof ar_custom; save_u32 (sizeof ar_ciaa); memcpy (dst, ar_ciaa, sizeof ar_ciaa); dst += sizeof ar_ciaa; save_u32 (sizeof ar_ciab); memcpy (dst, ar_ciab, sizeof ar_ciab); dst += sizeof ar_ciab; *len = dst - dstbak; return dstbak; } uae_u8 *restore_hrtmon (uae_u8 *src) { uae_u32 size; TCHAR *s; action_replay_unload (1); restore_u8 (); restore_u8 (); restore_u32 (); s = restore_string (); _tcsncpy (changed_prefs.cartfile, s, 255); xfree (s); _tcscpy (currprefs.cartfile, changed_prefs.cartfile); hrtmon_load (); action_replay_load (); if (restore_u32 () != 0) return src; size = restore_u32 (); if (!hrtmem_rom) { if (hrtmemory) memcpy (hrtmemory, src, size); } else if (hrtmem2_size) { if (hrtmemory2) memcpy (hrtmemory2, src, size); } src += size; restore_u32 (); memcpy (ar_custom, src, sizeof ar_custom); src += sizeof ar_custom; restore_u32 (); memcpy (ar_ciaa, src, sizeof ar_ciaa); src += sizeof ar_ciaa; restore_u32 (); memcpy (ar_ciab, src, sizeof ar_ciab); src += sizeof ar_ciab; return src; } uae_u8 *save_action_replay (int *len, uae_u8 *dstptr) { uae_u8 *dstbak, *dst; if (!armemory_ram || !armemory_rom || !armodel) return 0; if (dstptr) dstbak = dst = dstptr; else dstbak = dst = xmalloc (uae_u8, arram_size + sizeof ar_custom + sizeof ar_ciaa + sizeof ar_ciab + 1024); save_u8 (0); save_u8 (armodel); save_u32 (get_crc32 (armemory_rom + 4, arrom_size - 4)); save_string (currprefs.cartfile); save_u32 (arrom_size); save_u32 (arram_size); memcpy (dst, armemory_ram, arram_size); dst += arram_size; save_u32 (sizeof ar_custom); memcpy (dst, ar_custom, sizeof ar_custom); dst += sizeof ar_custom; save_u32 (sizeof ar_ciaa); memcpy (dst, ar_ciaa, sizeof ar_ciaa); dst += sizeof ar_ciaa; save_u32 (sizeof ar_ciab); memcpy (dst, ar_ciab, sizeof ar_ciab); dst += sizeof ar_ciab; *len = dst - dstbak; return dstbak; } uae_u8 *restore_action_replay (uae_u8 *src) { uae_u32 crc32; TCHAR *s; action_replay_unload (1); restore_u8 (); armodel = restore_u8 (); if (!armodel) return src; crc32 = restore_u32 (); s = restore_string (); _tcsncpy (changed_prefs.cartfile, s, 255); _tcscpy (currprefs.cartfile, changed_prefs.cartfile); xfree (s); action_replay_load (); if (restore_u32 () != arrom_size) return src; if (restore_u32 () != arram_size) return src; if (armemory_ram) memcpy (armemory_ram, src, arram_size); src += arram_size; restore_u32 (); memcpy (ar_custom, src, sizeof ar_custom); src += sizeof ar_custom; restore_u32 (); src += sizeof ar_ciaa; restore_u32 (); src += sizeof ar_ciab; action_replay_flag = ACTION_REPLAY_IDLE; if (is_ar_pc_in_rom ()) action_replay_flag = ACTION_REPLAY_ACTIVE; return src; } #define NPSIZE 65536 static uae_u8 bswap (uae_u8 v,int b7,int b6,int b5,int b4,int b3,int b2,int b1,int b0) { uae_u8 b = 0; b |= ((v >> b7) & 1) << 7; b |= ((v >> b6) & 1) << 6; b |= ((v >> b5) & 1) << 5; b |= ((v >> b4) & 1) << 4; b |= ((v >> b3) & 1) << 3; b |= ((v >> b2) & 1) << 2; b |= ((v >> b1) & 1) << 1; b |= ((v >> b0) & 1) << 0; return b; } static uae_u16 wswap (uae_u16 v,int b15,int b14,int b13,int b12, int b11, int b10, int b9, int b8, int b7,int b6,int b5,int b4,int b3,int b2,int b1,int b0) { uae_u16 b = 0; b |= ((v >> b15) & 1) << 15; b |= ((v >> b14) & 1) << 14; b |= ((v >> b13) & 1) << 13; b |= ((v >> b12) & 1) << 12; b |= ((v >> b11) & 1) << 11; b |= ((v >> b10) & 1) << 10; b |= ((v >> b9) & 1) << 9; b |= ((v >> b8) & 1) << 8; b |= ((v >> b7) & 1) << 7; b |= ((v >> b6) & 1) << 6; b |= ((v >> b5) & 1) << 5; b |= ((v >> b4) & 1) << 4; b |= ((v >> b3) & 1) << 3; b |= ((v >> b2) & 1) << 2; b |= ((v >> b1) & 1) << 1; b |= ((v >> b0) & 1) << 0; return b; } #define AXOR 0x817f // middle (even) static void descramble1 (uae_u8 *buf, int size) { int i; for (i = 0; i < size; i++) buf[i] = bswap (buf[i], 4, 1, 5, 3, 0, 7, 6, 2); } static void descramble1a (uae_u8 *buf, int size) { int i; uae_u8 tbuf[NPSIZE]; memcpy (tbuf, buf, size); for (i = 0; i < size; i++) { int a = (i ^ AXOR) & (size - 1); buf[i] = tbuf[wswap (a, 15, 9, 10, 4, 6, 5, 3, 8, 14, 13, 0, 12, 11, 2, 1, 7)]; } } // corner (odd) static void descramble2 (uae_u8 *buf, int size) { int i; for (i = 0; i < size; i++) buf[i] = bswap (buf[i], 5, 4, 3, 2, 1, 0, 7, 6); } static void descramble2a (uae_u8 *buf, int size) { int i; uae_u8 tbuf[NPSIZE]; memcpy (tbuf, buf, size); for (i = 0; i < size; i++) { int a = (i ^ AXOR) & (size - 1); buf[i] = tbuf[wswap (a, 15, 2, 4, 0, 1, 10, 11, 8, 13, 14, 12, 9, 7, 5, 6, 3)]; } } void descramble_nordicpro (uae_u8 *buf, int size, int odd) { if (odd) { descramble2 (buf, size); descramble2a (buf, size); } else { descramble1 (buf, size); descramble1a (buf, size); } } fs-uae-2.2.3+dfsg/src/consolehook.cpp0000644000175000017500000000502512162366655017675 0ustar glaubitzglaubitz #include "sysconfig.h" #include "sysdeps.h" #include "options.h" #include "uae/memory.h" #include "execlib.h" #include "disk.h" #include "rommgr.h" #include "uae.h" #include "threaddep/thread.h" #include "keybuf.h" #include "consolehook.h" static uaecptr beginio; void consolehook_config (struct uae_prefs *p) { int roms[] = { 15, 31, 16, 46, -1 }; default_prefs (p, 0); //p->headless = 1; p->produce_sound = 0; p->gfx_resolution = 0; p->gfx_vresolution = 0; p->gfx_scanlines = false; p->gfx_framerate = 10; p->immediate_blits = 1; p->collision_level = 0; configure_rom (p, roms, 0); p->cpu_model = 68020; p->fpu_model = 68882; p->m68k_speed = -1; p->cachesize = 8192; p->cpu_compatible = 0; p->address_space_24 = 0; p->chipmem_size = 0x00200000; p->fastmem_size = 0x00800000; p->bogomem_size = 0; p->nr_floppies = 1; p->floppyslots[1].dfxtype = DRV_NONE; p->floppy_speed = 0; p->start_gui = 0; p->gfx_size_win.width = 320; p->gfx_size_win.height = 256; p->turbo_emulation = 0; //p->win32_automount_drives = 2; //p->win32_automount_cddrives = 2; add_filesys_config (p, -1, _T("DH0"), _T("CLIBOOT"), _T("."), 1, 0, 0, 0, 0, 0, 15, NULL, 0, 0, 0, 0, 0); } static void *console_thread (void *v) { uae_set_thread_priority (NULL, 1); for (;;) { TCHAR wc = console_getch (); char c[2]; write_log (_T("*")); c[0] = 0; c[1] = 0; ua_copy (c, 1, &wc); record_key_direct ((0x10 << 1) | 0); record_key_direct ((0x10 << 1) | 1); } return NULL; } int consolehook_activate (void) { return console_emulation; } void consolehook_ret (uaecptr condev, uaecptr oldbeginio) { beginio = oldbeginio; write_log (_T("console.device at %08X\n"), condev); uae_start_thread (_T("consolereader"), console_thread, NULL, NULL); } uaecptr consolehook_beginio (uaecptr request) { uae_u32 io_data = get_long (request + 40); // 0x28 uae_u32 io_length = get_long (request + 36); // 0x24 uae_u32 io_actual = get_long (request + 32); // 0x20 uae_u32 io_offset = get_long (request + 44); // 0x2c uae_u16 cmd = get_word (request + 28); if (cmd == CMD_WRITE) { TCHAR *buf; const char *src = (char*)get_real_address (io_data); int len = io_length; if (io_length == -1) len = strlen (src); buf = xmalloc (TCHAR, len + 1); au_copy (buf, len, src); buf[len] = 0; #ifdef FSUAE // FIXME: missing a parameter to f_out below #else f_out (_T("%s"), buf); #endif xfree (buf); } else if (cmd == CMD_READ) { write_log (_T("%08x: CMD=%d LEN=%d OFF=%d ACT=%d\n"), request, cmd, io_length, io_offset, io_actual); } return beginio; } fs-uae-2.2.3+dfsg/src/luascript.cpp0000644000175000017500000003051112162366655017356 0ustar glaubitzglaubitz/* * UAE - The Un*x Amiga Emulator * * LUA Scripting Layer * * Copyright 2013 Frode SOlheim */ #include "sysconfig.h" #include "sysdeps.h" #include "savestate.h" #include "uae/memory.h" #include "luascript.h" #ifdef WITH_LUA #define MAX_STATES 16 static int g_num_states; static lua_State *g_states[MAX_STATES]; static void (*g_lock_function)(void); static void (*g_unlock_function)(void); //#define longget(addr) (call_mem_get_func(get_mem_bank(addr).lget, addr)) //#define wordget(addr) (call_mem_get_func(get_mem_bank(addr).wget, addr)) //#define byteget(addr) (call_mem_get_func(get_mem_bank(addr).bget, addr)) //#define longgeti(addr) (call_mem_get_func(get_mem_bank(addr).lgeti, addr)) //#define wordgeti(addr) (call_mem_get_func(get_mem_bank(addr).wgeti, addr)) //#define longput(addr,l) (call_mem_put_func(get_mem_bank(addr).lput, addr, l)) //#define wordput(addr,w) (call_mem_put_func(get_mem_bank(addr).wput, addr, w)) //#define byteput(addr,b) (call_mem_put_func(get_mem_bank(addr).bput, addr, b)) static int l_uae_read_u8(lua_State *L) { int addr = luaL_checkint(L, 1); uint8_t value = byteget(addr); lua_pushinteger(L, value); return 1; } static int l_uae_write_u8(lua_State *L) { int addr = luaL_checkint(L, 1); uint8_t value = luaL_checkint(L, 2); byteput(addr, value); return 0; } static int l_uae_read_u16(lua_State *L) { int addr = luaL_checkint(L, 1); uint16_t value = wordget(addr); lua_pushinteger(L, value); return 1; } static int l_uae_peek_u16(lua_State *L) { int result = 0; int addr = luaL_checkint(L, 1); if (addr >= 0xdff000 && addr < 0xe00000) { // + 4 to skip chipset mask int offset = addr - 0xdff000 + 4; int len; uae_u8 *data = save_custom (&len, NULL, 1); //printf("%d - %d %d %d %d %d\n", offset, len, data[offset], //data[offset+1], data[offset+2], data[offset+3]); if (len - offset >= 2) { uint16_t value = *((uint16_t*) (data + offset)); value = ((value & 0xff) << 8) | ((value & 0xff00) >> 8); lua_pushinteger(L, value); result += 1; } free(data); } return result; } static int l_uae_log(lua_State *L) { const char *s = luaL_checkstring(L, 1); write_log("%s", s); printf("%s", s); return 0; } void uae_lua_log_error(lua_State *L, const char *msg) { write_log("%s: %s\n", msg, lua_tostring(L, -1)); printf("%s: %s\n", msg, lua_tostring(L, -1)); } void uae_lua_aquire_lock() { if (g_lock_function) { g_lock_function(); } } void uae_lua_release_lock() { if (g_unlock_function) { g_unlock_function(); } } void uae_lua_run_handler(const char *name) { lua_State **L = g_states; while(*L) { uae_lua_aquire_lock(); lua_getglobal(*L, name); if (lua_isnil(*L, -1)) { //lua_pop(*L, 1); } else if (lua_pcall(*L, 0, 0, 0) != 0) { uae_lua_log_error(*L, name); //lua_pop(*L, 1); } lua_settop(*L, 0); uae_lua_release_lock(); L++; } } void uae_lua_init(void (*lock)(void), void (*unlock)(void)) { g_lock_function = lock; g_unlock_function = unlock; write_log("uae_lua_init\n"); } #define SET_GLOBAL(v, n) lua_pushinteger(L, v); lua_setglobal(L, n); void uae_lua_init_state(lua_State *L) { write_log("uae_lua_init_state %p\n", L); if (g_num_states == MAX_STATES) { write_log("WARNING: too many lua states (ignored this one)\n"); return; } g_states[g_num_states] = L; g_num_states++; lua_register(L, "uae_log", l_uae_log); lua_register(L, "uae_read_u8", l_uae_read_u8); lua_register(L, "uae_read_u16", l_uae_read_u16); lua_register(L, "uae_peek_u16", l_uae_peek_u16); lua_register(L, "uae_write_u8", l_uae_write_u8); SET_GLOBAL(0xDFF000, "BLTDDAT"); SET_GLOBAL(0xDFF002, "DMACONR"); SET_GLOBAL(0xDFF004, "VPOSR"); SET_GLOBAL(0xDFF006, "VHPOSR"); SET_GLOBAL(0xDFF008, "DSKDATR"); SET_GLOBAL(0xDFF00A, "JOY0DAT"); SET_GLOBAL(0xDFF00C, "JOY1DAT"); SET_GLOBAL(0xDFF00E, "CLXDAT"); SET_GLOBAL(0xDFF010, "ADKCONR"); SET_GLOBAL(0xDFF012, "POT0DAT"); SET_GLOBAL(0xDFF014, "POT1DAT"); SET_GLOBAL(0xDFF016, "POTINP"); SET_GLOBAL(0xDFF018, "SERDATR"); SET_GLOBAL(0xDFF01A, "DSKBYTR"); SET_GLOBAL(0xDFF01C, "INTENAR"); SET_GLOBAL(0xDFF01E, "INTREQR"); SET_GLOBAL(0xDFF020, "DSKPTH"); SET_GLOBAL(0xDFF022, "DSKPTL"); SET_GLOBAL(0xDFF024, "DSKLEN"); SET_GLOBAL(0xDFF026, "DSKDAT"); SET_GLOBAL(0xDFF028, "REFPTR"); SET_GLOBAL(0xDFF02A, "VPOSW"); SET_GLOBAL(0xDFF02C, "VHPOSW"); SET_GLOBAL(0xDFF02E, "COPCON"); SET_GLOBAL(0xDFF030, "SERDAT"); SET_GLOBAL(0xDFF032, "SERPER"); SET_GLOBAL(0xDFF034, "POTGO"); SET_GLOBAL(0xDFF036, "JOYTEST"); SET_GLOBAL(0xDFF038, "STREQU"); SET_GLOBAL(0xDFF03A, "STRVBL"); SET_GLOBAL(0xDFF03C, "STRHOR"); SET_GLOBAL(0xDFF03E, "STRLONG"); SET_GLOBAL(0xDFF040, "BLTCON0"); SET_GLOBAL(0xDFF042, "BLTCON1"); SET_GLOBAL(0xDFF044, "BLTAFWM"); SET_GLOBAL(0xDFF046, "BLTALWM"); SET_GLOBAL(0xDFF048, "BLTCPTH"); SET_GLOBAL(0xDFF04A, "BLTCPTL"); SET_GLOBAL(0xDFF04C, "BLTBPTH"); SET_GLOBAL(0xDFF04E, "BLTBPTL"); SET_GLOBAL(0xDFF050, "BLTAPTH"); SET_GLOBAL(0xDFF052, "BLTAPTL"); SET_GLOBAL(0xDFF054, "BLTDPTH"); SET_GLOBAL(0xDFF056, "BLTDPTL"); SET_GLOBAL(0xDFF058, "BLTSIZE"); SET_GLOBAL(0xDFF05A, "BLTCON0L"); SET_GLOBAL(0xDFF05C, "BLTSIZV"); SET_GLOBAL(0xDFF05E, "BLTSIZH"); SET_GLOBAL(0xDFF060, "BLTCMOD"); SET_GLOBAL(0xDFF062, "BLTBMOD"); SET_GLOBAL(0xDFF064, "BLTAMOD"); SET_GLOBAL(0xDFF066, "BLTDMOD"); SET_GLOBAL(0xDFF070, "BLTCDAT"); SET_GLOBAL(0xDFF072, "BLTBDAT"); SET_GLOBAL(0xDFF074, "BLTADAT"); SET_GLOBAL(0xDFF078, "SPRHDAT"); SET_GLOBAL(0xDFF07A, "BPLHDAT"); SET_GLOBAL(0xDFF07C, "DENISEID"); SET_GLOBAL(0xDFF07E, "DSKSYNC"); SET_GLOBAL(0xDFF080, "COP1LCH"); SET_GLOBAL(0xDFF082, "COP1LCL"); SET_GLOBAL(0xDFF084, "COP2LCH"); SET_GLOBAL(0xDFF086, "COP2LCL"); SET_GLOBAL(0xDFF088, "COPJMP1"); SET_GLOBAL(0xDFF08A, "COPJMP2"); SET_GLOBAL(0xDFF08C, "COPINS"); SET_GLOBAL(0xDFF08E, "DIWSTRT"); SET_GLOBAL(0xDFF090, "DIWSTOP"); SET_GLOBAL(0xDFF092, "DDFSTRT"); SET_GLOBAL(0xDFF094, "DDFSTOP"); SET_GLOBAL(0xDFF096, "DMACON"); SET_GLOBAL(0xDFF098, "CLXCON"); SET_GLOBAL(0xDFF09A, "INTENA"); SET_GLOBAL(0xDFF09C, "INTREQ"); SET_GLOBAL(0xDFF09E, "ADKCON"); SET_GLOBAL(0xDFF0A0, "AUD0LCH"); SET_GLOBAL(0xDFF0A2, "AUD0LCL"); SET_GLOBAL(0xDFF0A4, "AUD0LEN"); SET_GLOBAL(0xDFF0A6, "AUD0PER"); SET_GLOBAL(0xDFF0A8, "AUD0VOL"); SET_GLOBAL(0xDFF0AA, "AUD0DAT"); SET_GLOBAL(0xDFF0B0, "AUD1LCH"); SET_GLOBAL(0xDFF0B2, "AUD1LCL"); SET_GLOBAL(0xDFF0B4, "AUD1LEN"); SET_GLOBAL(0xDFF0B6, "AUD1PER"); SET_GLOBAL(0xDFF0B8, "AUD1VOL"); SET_GLOBAL(0xDFF0BA, "AUD1DAT"); SET_GLOBAL(0xDFF0C0, "AUD2LCH"); SET_GLOBAL(0xDFF0C2, "AUD2LCL"); SET_GLOBAL(0xDFF0C4, "AUD2LEN"); SET_GLOBAL(0xDFF0C6, "AUD2PER"); SET_GLOBAL(0xDFF0C8, "AUD2VOL"); SET_GLOBAL(0xDFF0CA, "AUD2DAT"); SET_GLOBAL(0xDFF0D0, "AUD3LCH"); SET_GLOBAL(0xDFF0D2, "AUD3LCL"); SET_GLOBAL(0xDFF0D4, "AUD3LEN"); SET_GLOBAL(0xDFF0D6, "AUD3PER"); SET_GLOBAL(0xDFF0D8, "AUD3VOL"); SET_GLOBAL(0xDFF0DA, "AUD3DAT"); SET_GLOBAL(0xDFF0E0, "BPL1PTH"); SET_GLOBAL(0xDFF0E2, "BPL1PTL"); SET_GLOBAL(0xDFF0E4, "BPL2PTH"); SET_GLOBAL(0xDFF0E6, "BPL2PTL"); SET_GLOBAL(0xDFF0E8, "BPL3PTH"); SET_GLOBAL(0xDFF0EA, "BPL3PTL"); SET_GLOBAL(0xDFF0EC, "BPL4PTH"); SET_GLOBAL(0xDFF0EE, "BPL4PTL"); SET_GLOBAL(0xDFF0F0, "BPL5PTH"); SET_GLOBAL(0xDFF0F2, "BPL5PTL"); SET_GLOBAL(0xDFF0F4, "BPL6PTH"); SET_GLOBAL(0xDFF0F6, "BPL6PTL"); SET_GLOBAL(0xDFF0F8, "BPL7PTH"); SET_GLOBAL(0xDFF0FA, "BPL7PTL"); SET_GLOBAL(0xDFF0FC, "BPL8PTH"); SET_GLOBAL(0xDFF0FE, "BPL8PTL"); SET_GLOBAL(0xDFF100, "BPLCON0"); SET_GLOBAL(0xDFF102, "BPLCON1"); SET_GLOBAL(0xDFF104, "BPLCON2"); SET_GLOBAL(0xDFF106, "BPLCON3"); SET_GLOBAL(0xDFF108, "BPL1MOD"); SET_GLOBAL(0xDFF10A, "BPL2MOD"); SET_GLOBAL(0xDFF10C, "BPLCON4"); SET_GLOBAL(0xDFF10E, "CLXCON2"); SET_GLOBAL(0xDFF110, "BPL1DAT"); SET_GLOBAL(0xDFF112, "BPL2DAT"); SET_GLOBAL(0xDFF114, "BPL3DAT"); SET_GLOBAL(0xDFF116, "BPL4DAT"); SET_GLOBAL(0xDFF118, "BPL5DAT"); SET_GLOBAL(0xDFF11A, "BPL6DAT"); SET_GLOBAL(0xDFF11C, "BPL7DAT"); SET_GLOBAL(0xDFF11E, "BPL8DAT"); SET_GLOBAL(0xDFF120, "SPR0PTH"); SET_GLOBAL(0xDFF122, "SPR0PTL"); SET_GLOBAL(0xDFF124, "SPR1PTH"); SET_GLOBAL(0xDFF126, "SPR1PTL"); SET_GLOBAL(0xDFF128, "SPR2PTH"); SET_GLOBAL(0xDFF12A, "SPR2PTL"); SET_GLOBAL(0xDFF12C, "SPR3PTH"); SET_GLOBAL(0xDFF12E, "SPR3PTL"); SET_GLOBAL(0xDFF130, "SPR4PTH"); SET_GLOBAL(0xDFF132, "SPR4PTL"); SET_GLOBAL(0xDFF134, "SPR5PTH"); SET_GLOBAL(0xDFF136, "SPR5PTL"); SET_GLOBAL(0xDFF138, "SPR6PTH"); SET_GLOBAL(0xDFF13A, "SPR6PTL"); SET_GLOBAL(0xDFF13C, "SPR7PTH"); SET_GLOBAL(0xDFF13E, "SPR7PTL"); SET_GLOBAL(0xDFF140, "SPR0POS"); SET_GLOBAL(0xDFF142, "SPR0CTL"); SET_GLOBAL(0xDFF144, "SPR0DATA"); SET_GLOBAL(0xDFF146, "SPR0DATB"); SET_GLOBAL(0xDFF148, "SPR1POS"); SET_GLOBAL(0xDFF14A, "SPR1CTL"); SET_GLOBAL(0xDFF14C, "SPR1DATA"); SET_GLOBAL(0xDFF14E, "SPR1DATB"); SET_GLOBAL(0xDFF150, "SPR2POS"); SET_GLOBAL(0xDFF152, "SPR2CTL"); SET_GLOBAL(0xDFF154, "SPR2DATA"); SET_GLOBAL(0xDFF156, "SPR2DATB"); SET_GLOBAL(0xDFF158, "SPR3POS"); SET_GLOBAL(0xDFF15A, "SPR3CTL"); SET_GLOBAL(0xDFF15C, "SPR3DATA"); SET_GLOBAL(0xDFF15E, "SPR3DATB"); SET_GLOBAL(0xDFF160, "SPR4POS"); SET_GLOBAL(0xDFF162, "SPR4CTL"); SET_GLOBAL(0xDFF164, "SPR4DATA"); SET_GLOBAL(0xDFF166, "SPR4DATB"); SET_GLOBAL(0xDFF168, "SPR5POS"); SET_GLOBAL(0xDFF16A, "SPR5CTL"); SET_GLOBAL(0xDFF16C, "SPR5DATA"); SET_GLOBAL(0xDFF16E, "SPR5DATB"); SET_GLOBAL(0xDFF170, "SPR6POS"); SET_GLOBAL(0xDFF172, "SPR6CTL"); SET_GLOBAL(0xDFF174, "SPR6DATA"); SET_GLOBAL(0xDFF176, "SPR6DATB"); SET_GLOBAL(0xDFF178, "SPR7POS"); SET_GLOBAL(0xDFF17A, "SPR7CTL"); SET_GLOBAL(0xDFF17C, "SPR7DATA"); SET_GLOBAL(0xDFF17E, "SPR7DATB"); SET_GLOBAL(0xDFF180, "COLOR00"); SET_GLOBAL(0xDFF182, "COLOR01"); SET_GLOBAL(0xDFF184, "COLOR02"); SET_GLOBAL(0xDFF186, "COLOR03"); SET_GLOBAL(0xDFF188, "COLOR04"); SET_GLOBAL(0xDFF18A, "COLOR05"); SET_GLOBAL(0xDFF18C, "COLOR06"); SET_GLOBAL(0xDFF18E, "COLOR07"); SET_GLOBAL(0xDFF190, "COLOR08"); SET_GLOBAL(0xDFF192, "COLOR09"); SET_GLOBAL(0xDFF194, "COLOR10"); SET_GLOBAL(0xDFF196, "COLOR11"); SET_GLOBAL(0xDFF198, "COLOR12"); SET_GLOBAL(0xDFF19A, "COLOR13"); SET_GLOBAL(0xDFF19C, "COLOR14"); SET_GLOBAL(0xDFF19E, "COLOR15"); SET_GLOBAL(0xDFF1A0, "COLOR16"); SET_GLOBAL(0xDFF1A2, "COLOR17"); SET_GLOBAL(0xDFF1A4, "COLOR18"); SET_GLOBAL(0xDFF1A6, "COLOR19"); SET_GLOBAL(0xDFF1A8, "COLOR20"); SET_GLOBAL(0xDFF1AA, "COLOR21"); SET_GLOBAL(0xDFF1AC, "COLOR22"); SET_GLOBAL(0xDFF1AE, "COLOR23"); SET_GLOBAL(0xDFF1B0, "COLOR24"); SET_GLOBAL(0xDFF1B2, "COLOR25"); SET_GLOBAL(0xDFF1B4, "COLOR26"); SET_GLOBAL(0xDFF1B6, "COLOR27"); SET_GLOBAL(0xDFF1B8, "COLOR28"); SET_GLOBAL(0xDFF1BA, "COLOR29"); SET_GLOBAL(0xDFF1BC, "COLOR30"); SET_GLOBAL(0xDFF1BE, "COLOR31"); SET_GLOBAL(0xDFF1C0, "HTOTAL"); SET_GLOBAL(0xDFF1C2, "HSSTOP"); SET_GLOBAL(0xDFF1C4, "HBSTRT"); SET_GLOBAL(0xDFF1C6, "HBSTOP"); SET_GLOBAL(0xDFF1C8, "VTOTAL"); SET_GLOBAL(0xDFF1CA, "VSSTOP"); SET_GLOBAL(0xDFF1CC, "VBSTRT"); SET_GLOBAL(0xDFF1CE, "VBSTOP"); SET_GLOBAL(0xDFF1D0, "SPRHSTRT"); SET_GLOBAL(0xDFF1D2, "SPRHSTOP"); SET_GLOBAL(0xDFF1D4, "BPLHSTRT"); SET_GLOBAL(0xDFF1D6, "BPLHSTOP"); SET_GLOBAL(0xDFF1D8, "HHPOSW"); SET_GLOBAL(0xDFF1DA, "HHPOSR"); SET_GLOBAL(0xDFF1DC, "BEAMCON0"); SET_GLOBAL(0xDFF1DE, "HSSTRT"); SET_GLOBAL(0xDFF1E0, "VSSTRT"); SET_GLOBAL(0xDFF1E2, "HCENTER"); SET_GLOBAL(0xDFF1E4, "DIWHIGH"); SET_GLOBAL(0xDFF1E6, "BPLHMOD"); SET_GLOBAL(0xDFF1E8, "SPRHPTH"); SET_GLOBAL(0xDFF1EA, "SPRHPTL"); SET_GLOBAL(0xDFF1EC, "BPLHPTH"); SET_GLOBAL(0xDFF1EE, "BPLHPTL"); SET_GLOBAL(0xDFF1FC, "FMODE"); } #endif fs-uae-2.2.3+dfsg/src/gengenblitter.cpp0000644000175000017500000002166112162366654020206 0ustar glaubitzglaubitz /* * UAE - The Un*x Amiga Emulator * * Optimized blitter minterm function generator * * Copyright 1995,1996 Bernd Schmidt * Copyright 1996 Alessandro Bissacco * * Overkill, n: cf. genblitter */ #include "sysconfig.h" #include "sysdeps.h" #include "config.h" #include "options.h" static void nop(int); #define xmalloc malloc #define xfree free #define xrealloc realloc typedef struct tree_n { enum tree_op { op_and, op_or, op_xor, op_not, op_a, op_b, op_c, op_d, op_e, op_f } op; struct tree_n *left, *right; } *tree; static struct tree_n TRA = { op_a, NULL, NULL }; static struct tree_n TRB = { op_b, NULL, NULL }; static struct tree_n TRC = { op_c, NULL, NULL }; static struct tree_n TRD = { op_d, NULL, NULL }; static struct tree_n TRE = { op_e, NULL, NULL }; static struct tree_n TRF = { op_f, NULL, NULL }; static tree tree_a = &TRA; static tree tree_b = &TRB; static tree tree_c = &TRC; static tree tree_d = &TRD; static tree tree_e = &TRE; static tree tree_f = &TRF; typedef struct { tree *trees; int space; int ntrees; } tree_vec; STATIC_INLINE int issrc (tree t) { return t == tree_a || t == tree_b || t == tree_c || t == tree_d || t == tree_e || t == tree_f; } static tree new_op_tree(enum tree_op op, tree l, tree r) { tree t; if (op == op_not && l->op == op_not) { t = l->left; xfree(l); return t; } t = (tree)xmalloc(sizeof(struct tree_n)); t->left = l; t->right = r; t->op = op; return t; } static int opidx (tree t) { switch (t->op) { case op_a: return 0; case op_b: return 1; case op_c: return 2; case op_d: return 3; case op_e: return 4; case op_f: return 5; default: return -1; } } static int tree_cst (tree t, unsigned int *src, unsigned int *notsrc) { int idx = opidx (t); if (idx >= 0) { src[idx] = 1; return 0; } switch (t->op) { case op_not: idx = opidx (t->left); if (idx >= 0) { notsrc[idx] = 1; return 3; } return 3 + tree_cst (t->left, src, notsrc); case op_and: case op_xor: case op_or: return 4 + tree_cst (t->left, src, notsrc) + tree_cst (t->right, src, notsrc); default: abort (); } } static int tree_cost (tree t) { int i, cost; unsigned int src[6], notsrc[6]; memset (src, 0, sizeof src); memset (notsrc, 0, sizeof notsrc); cost = tree_cst (t, src, notsrc); for (i = 0; i < 6; i++) if (src[i] && notsrc[i]) cost++; return cost; } static int add_vec(tree_vec *tv, tree t) { int i; #if 0 if (! tree_isnormal(t)) nop(2); #endif if (tv->ntrees == tv->space) { tv->trees = (tree *)xrealloc(tv->trees, sizeof(tree)*(tv->space += 40)); } tv->trees[tv->ntrees++] = t; return 1; } static void init_vec(tree_vec *tv) { tv->ntrees = tv->space = 0; tv->trees = NULL; } static void do_sprint_tree (char *s, tree t) { enum tree_op op = t->op; switch (op) { case op_a: strcat (s, "srca"); break; case op_b: strcat (s, "srcb"); break; case op_c: strcat (s, "srcc"); break; case op_d: strcat (s, "srcd"); break; case op_e: strcat (s, "srce"); break; case op_f: strcat (s, "srcf"); break; case op_and: case op_or: case op_xor: { char *c = op == op_and ? " & " : op == op_or ? " | " : " ^ "; strcat (s, "("); do_sprint_tree (s, t->left); strcat (s, c); while (t->right->op == op) { t = t->right; do_sprint_tree (s, t->left); strcat (s, c); } do_sprint_tree(s, t->right); strcat (s, ")"); } break; case op_not: strcat (s, "~"); do_sprint_tree (s, t->left); break; } } static tree_vec size_trees[20]; static struct tree_n bad_tree = { op_and, &bad_tree, &bad_tree }; static unsigned int used_mask[256]; static tree best_trees[256]; static unsigned int best_cost[256]; static int n_unknown; static unsigned long which_fn (tree t) { switch (t->op) { case op_a: return 0xf0; case op_b: return 0xcc; case op_c: return 0xaa; case op_and: return which_fn (t->left) & which_fn (t->right); case op_or: return which_fn (t->left) | which_fn (t->right); case op_xor: return which_fn (t->left) ^ which_fn (t->right); case op_not: return 0xFF & ~which_fn (t->left); default: abort (); } } static unsigned long tree_used_mask (tree t) { switch (t->op) { case op_a: return 1; case op_b: return 2; case op_c: return 4; case op_and: case op_or: case op_xor: return tree_used_mask (t->left) | tree_used_mask (t->right); case op_not: return tree_used_mask (t->left); default: abort (); } } static void candidate (tree_vec *v, tree t) { unsigned long fn = which_fn (t); unsigned int cost = tree_cost (t); if (best_trees[fn] == 0) n_unknown--; if (cost < best_cost[fn]) best_trees[fn] = t, best_cost[fn] = cost; add_vec (v, t); } static void cand_and_not (tree_vec *v, tree t) { candidate (v, t); t = new_op_tree (op_not, t, 0); candidate (v, t); } static void try_tree (tree_vec *v, tree t) { int fnl = which_fn (t->left); int fnr = which_fn (t->right); int fn = which_fn (t); if (fn == fnl || fn == fnr || fn == 0 || fn == 0xFF || (tree_used_mask (t) & ~used_mask[fn]) != 0 || best_cost[fn] + 6 < tree_cost (t)) { xfree (t); return; } cand_and_not (v, t); } static void find_best_trees (void) { int i, size, do_stop; for (i = 0; i < 256; i++) { best_trees[i] = i == 0 || i == 255 ? &bad_tree : 0; best_cost[i] = 65535; } n_unknown = 254; init_vec (size_trees); cand_and_not (size_trees, tree_a); cand_and_not (size_trees, tree_b); cand_and_not (size_trees, tree_c); do_stop = 0; for (size = 2; ! do_stop && size < 20; size++) { int split, last_split; tree_vec *sv = size_trees + size - 1; if (n_unknown == 0) do_stop = 1; last_split = (size >> 1) + 1; for (split = 1; split < last_split; split++) { int szl = split; int szr = size - split; tree_vec *lv = size_trees + szl - 1; tree_vec *rv = size_trees + szr - 1; int i; for (i = 0; i < lv->ntrees; i++) { tree l = lv->trees[i]; int j; for (j = szl == szr ? i + 1 : 0; j < rv->ntrees; j++) { tree r = rv->trees[j]; if (l->op != op_and || r->op != op_and) { tree tmp = (l->op == op_and ? new_op_tree (op_and, r, l) : new_op_tree (op_and, l, r)); try_tree (sv, tmp); } if (l->op != op_or || r->op != op_or) { tree tmp = (l->op == op_or ? new_op_tree (op_or, r, l) : new_op_tree (op_or, l, r)); try_tree (sv, tmp); } if (l->op != op_xor || r->op != op_xor) { tree tmp = (l->op == op_xor ? new_op_tree (op_xor, r, l) : new_op_tree (op_xor, l, r)); try_tree (sv, tmp); } } } } /* An additional pass doesn't seem to create better solutions * (not that much of a surprise). */ if (n_unknown == 0) do_stop = 1; } } static int bitset (int mt, int bit) { return mt & (1 << bit); } static unsigned int generate_expr (int minterm) { int bits = 0; int i; int expr_dc[8], nexp = 0; int expr_used[8]; if (minterm == 0 || minterm == 0xFF) return 0; for (i = 0; i < 8; i++) { if (bitset (minterm, i) && !bitset (bits, i)) { int j; int dontcare = 0; int firstand = 1; int bitbucket[8], bitcount; bits |= 1<RPN conversion and calculation * */ /* Original code from http://en.wikipedia.org/wiki/Shunting_yard_algorithm */ #define CALC_DEBUG 0 #if CALC_DEBUG #define calc_log(x) do { write_log x; } while(0) #else #define calc_log(x) #endif #include "sysconfig.h" #include "sysdeps.h" #include "calc.h" #include #include #define STACK_SIZE 32 #define MAX_VALUES 32 #define IOBUFFERS 256 static double parsedvalues[MAX_VALUES]; // operators // precedence operators associativity // 1 ! right to left // 2 * / % left to right // 3 + - left to right // 4 = right to left static int op_preced(const TCHAR c) { switch(c) { case '!': return 4; case '*': case '/': case '\\': case '%': return 3; case '+': case '-': return 2; case '=': return 1; } return 0; } static bool op_left_assoc(const TCHAR c) { switch(c) { // left to right case '*': case '/': case '%': case '+': case '-': return true; // right to left case '=': case '!': return false; } return false; } static unsigned int op_arg_count(const TCHAR c) { switch(c) { case '*': case '/': case '%': case '+': case '-': case '=': return 2; case '!': return 1; default: return c - 'A'; } return 0; } #define is_operator(c) (c == '+' || c == '-' || c == '/' || c == '*' || c == '!' || c == '%' || c == '=') #define is_function(c) (c >= 'A' && c <= 'Z') #define is_ident(c) ((c >= '0' && c <= '9') || (c >= 'a' && c <= 'z')) static bool shunting_yard(const TCHAR *input, TCHAR *output) { const TCHAR *strpos = input, *strend = input + _tcslen(input); TCHAR c, *outpos = output; TCHAR stack[STACK_SIZE]; // operator stack unsigned int sl = 0; // stack length TCHAR sc; // used for record stack element while(strpos < strend) { if (sl >= STACK_SIZE) return false; // read one token from the input stream c = *strpos; if(c != ' ') { // If the token is a number (identifier), then add it to the output queue. if(is_ident(c)) { *outpos = c; ++outpos; } // If the token is a function token, then push it onto the stack. else if(is_function(c)) { stack[sl] = c; ++sl; } // If the token is a function argument separator (e.g., a comma): else if(c == ',') { bool pe = false; while(sl > 0) { sc = stack[sl - 1]; if(sc == '(') { pe = true; break; } else { // Until the token at the top of the stack is a left parenthesis, // pop operators off the stack onto the output queue. *outpos = sc; ++outpos; sl--; } } // If no left parentheses are encountered, either the separator was misplaced // or parentheses were mismatched. if(!pe) { calc_log ((_T("Error: separator or parentheses mismatched\n"))); return false; } } // If the token is an operator, op1, then: else if(is_operator(c)) { while(sl > 0) { sc = stack[sl - 1]; // While there is an operator token, o2, at the top of the stack // op1 is left-associative and its precedence is less than or equal to that of op2, // or op1 is right-associative and its precedence is less than that of op2, if(is_operator(sc) && ((op_left_assoc(c) && (op_preced(c) <= op_preced(sc))) || (!op_left_assoc(c) && (op_preced(c) < op_preced(sc))))) { // Pop o2 off the stack, onto the output queue; *outpos = sc; ++outpos; sl--; } else { break; } } // push op1 onto the stack. stack[sl] = c; ++sl; } // If the token is a left parenthesis, then push it onto the stack. else if(c == '(') { stack[sl] = c; ++sl; } // If the token is a right parenthesis: else if(c == ')') { bool pe = false; // Until the token at the top of the stack is a left parenthesis, // pop operators off the stack onto the output queue while(sl > 0) { sc = stack[sl - 1]; if(sc == '(') { pe = true; break; } else { *outpos = sc; ++outpos; sl--; } } // If the stack runs out without finding a left parenthesis, then there are mismatched parentheses. if(!pe) { calc_log ((_T("Error: parentheses mismatched\n"))); return false; } // Pop the left parenthesis from the stack, but not onto the output queue. sl--; // If the token at the top of the stack is a function token, pop it onto the output queue. if(sl > 0) { sc = stack[sl - 1]; if(is_function(sc)) { *outpos = sc; ++outpos; sl--; } } } else { calc_log ((_T("Unknown token %c\n"), c)); return false; // Unknown token } } ++strpos; } // When there are no more tokens to read: // While there are still operator tokens in the stack: while(sl > 0) { sc = stack[sl - 1]; if(sc == '(' || sc == ')') { printf("Error: parentheses mismatched\n"); return false; } *outpos = sc; ++outpos; --sl; } *outpos = 0; // Null terminator return true; } struct calcstack { TCHAR *s; double val; }; static double docalcx(TCHAR op, double v1, double v2) { switch (op) { case '-': return v1 - v2; case '+': return v1 + v2; case '*': return v1 * v2; case '/': return v1 / v2; case '\\': return (int)v1 % (int)v2; } return 0; } static double stacktoval(struct calcstack *st) { if (st->s) { if (_tcslen(st->s) == 1 && st->s[0] >= 'a' && st->s[0] <= 'z') return parsedvalues[st->s[0] - 'a']; return _tstof (st->s); } else { return st->val; } } static double docalc2(TCHAR op, struct calcstack *sv1, struct calcstack *sv2) { double v1, v2; v1 = stacktoval(sv1); v2 = stacktoval(sv2); return docalcx (op, v1, v2); } static double docalc1(TCHAR op, struct calcstack *sv1, double v2) { double v1; v1 = stacktoval(sv1); return docalcx (op, v1, v2); } static TCHAR *stacktostr(struct calcstack *st) { static TCHAR out[256]; if (st->s) return st->s; _stprintf(out, _T("%f"), st->val); return out; } static TCHAR *chartostack(TCHAR c) { TCHAR *s = xmalloc (TCHAR, 2); s[0] = c; s[1] = 0; return s; } static bool execution_order(const TCHAR *input, double *outval) { const TCHAR *strpos = input, *strend = input + _tcslen(input); TCHAR c, res[4]; unsigned int sl = 0, rn = 0; struct calcstack stack[STACK_SIZE] = { 0 }, *sc, *sc2; double val = 0; int i; bool ok = false; // While there are input tokens left while(strpos < strend) { if (sl >= STACK_SIZE) return false; // Read the next token from input. c = *strpos; // If the token is a value or identifier if(is_ident(c)) { // Push it onto the stack. stack[sl].s = chartostack (c); ++sl; } // Otherwise, the token is an operator (operator here includes both operators, and functions). else if(is_operator(c) || is_function(c)) { _stprintf(res, _T("_%02d"), rn); calc_log ((_T("%s = "), res)); ++rn; // It is known a priori that the operator takes n arguments. unsigned int nargs = op_arg_count(c); // If there are fewer than n values on the stack if(sl < nargs) { // (Error) The user has not input sufficient values in the expression. return false; } // Else, Pop the top n values from the stack. // Evaluate the operator, with the values as arguments. if(is_function(c)) { calc_log ((_T("%c("), c)); while(nargs > 0){ sc = &stack[sl - nargs]; // to remove reverse order of arguments if(nargs > 1) { calc_log ((_T("%s, "), sc)); } else { calc_log ((_T("%s)\n"), sc)); } --nargs; } sl-=op_arg_count(c); } else { if(nargs == 1) { sc = &stack[sl - 1]; sl--; val = docalc1 (c, sc, val); calc_log ((_T("%c %s = %f;\n"), c, stacktostr(sc), val)); } else { sc = &stack[sl - 2]; calc_log ((_T("%s %c "), stacktostr(sc), c)); sc2 = &stack[sl - 1]; val = docalc2 (c, sc, sc2); sl--;sl--; calc_log ((_T("%s = %f;\n"), stacktostr(sc2), val)); } } // Push the returned results, if any, back onto the stack. stack[sl].val = val; stack[sl].s = NULL; ++sl; } ++strpos; } // If there is only one value in the stack // That value is the result of the calculation. if(sl == 1) { sc = &stack[sl - 1]; sl--; calc_log ((_T("result = %f\n"), val)); if (outval) *outval = val; ok = true; } for (i = 0; i < STACK_SIZE; i++) xfree (stack[i].s); // If there are more values in the stack // (Error) The user input has too many values. return ok; } static bool parse_values(const TCHAR *ins, TCHAR *out) { int ident = 0; TCHAR tmp; TCHAR inbuf[IOBUFFERS]; int op; _tcscpy (inbuf, ins); TCHAR *in = inbuf; TCHAR *p = out; op = 0; if (in[0] == '-' || in[0] == '+') { *p++ = '0'; } while (*in) { TCHAR *instart = in; if (_istdigit (*in)) { if (ident >= MAX_VALUES) return false; if (op > 1 && (in[-1] == '-' || in[-1] == '+')) { instart--; p--; } *p++ = ident + 'a'; while (_istdigit (*in) || *in == '.') in++; tmp = *in; *in = 0; parsedvalues[ident++] = _tstof (instart); *in = tmp; op = 0; } else { if (is_operator(*in)) op++; *p++ = *in++; } } *p = 0; return true; } bool calc(const TCHAR *input, double *outval) { TCHAR output[IOBUFFERS], output2[IOBUFFERS]; calc_log ((_T("IN: '%s'\n"), input)); if (parse_values(input, output2)) { if(shunting_yard(output2, output)) { calc_log ((_T("RPN OUT: %s\n"), output)); if(!execution_order(output, outval)) { calc_log ((_T("PARSE ERROR!\n"))); } else { return true; } } } return false; } bool iscalcformula (const TCHAR *formula) { for (int i = 0; i < _tcslen (formula); i++) { TCHAR c = formula[i]; if (is_operator (c)) return true; } return false; } fs-uae-2.2.3+dfsg/src/isofs.cpp0000755000175000017500000017713412162366654016512 0ustar glaubitzglaubitz /* * UAE - The Un*x Amiga Emulator * * Linux isofs/UAE filesystem wrapper * * Copyright 2012 Toni Wilen * */ #include "sysconfig.h" #include "sysdeps.h" #include "options.h" #include "blkdev.h" #include "isofs_api.h" #include "zfile.h" #include "isofs.h" #define MAX_CACHED_BH_COUNT 100 //#define MAX_CACHE_INODE_COUNT 10 #define HASH_SIZE 65536 #define CD_BLOCK_SIZE 2048 #define ISOFS_INVALID_MODE -1 #define ISOFS_I(x) (&x->ei) #define ISOFS_SB(x) (&x->ei) #define IS_ERR(x) (x == NULL) #define XS_IFDIR 0x4000 #define XS_IFCHR 0x2000 #define XS_IFIFO 0x1000 #define XS_IFREG 0x8000 #define XS_ISDIR(x) (x & XS_IFDIR) struct buffer_head { struct buffer_head *next; uae_u8 *b_data; uae_u32 b_blocknr; bool linked; int usecnt; struct super_block *sb; }; struct inode { struct inode *next; uae_u32 i_mode; uid_t i_uid; gid_t i_gid; uae_u32 i_ino; uae_u32 i_size; uae_u32 i_blocks; struct super_block *i_sb; timeval i_mtime; timeval i_atime; timeval i_ctime; iso_inode_info ei; TCHAR *name; int i_blkbits; bool linked; int usecnt; int lockcnt; bool i_isaflags; uae_u8 i_aflags; TCHAR *i_comment; }; struct super_block { int s_high_sierra; int s_blocksize; int s_blocksize_bits; isofs_sb_info ei; int unitnum; struct inode *inodes, *root; int inode_cnt; struct buffer_head *buffer_heads; int bh_count; bool unknown_media; struct inode *hash[HASH_SIZE]; int hash_miss, hash_hit; }; static int gethashindex(struct inode *inode) { return inode->i_ino & (HASH_SIZE - 1); } static void free_inode(struct inode *inode) { if (!inode) return; inode->i_sb->hash[gethashindex(inode)] = NULL; inode->i_sb->inode_cnt--; xfree(inode->name); xfree(inode->i_comment); xfree(inode); } static void free_bh(struct buffer_head *bh) { if (!bh) return; bh->sb->bh_count--; xfree(bh->b_data); xfree(bh); } static void lock_inode(struct inode *inode) { inode->lockcnt++; } static void unlock_inode(struct inode *inode) { inode->lockcnt--; } static void iput(struct inode *inode) { struct super_block *sb = inode->i_sb; if (!inode || inode->linked) return; #if 0 struct inode *in; while (inode->i_sb->inode_cnt > MAX_CACHE_INODE_COUNT) { /* not very fast but better than nothing.. */ struct inode *minin = NULL, *mininprev = NULL; struct inode *prev = NULL; in = sb->inodes; while (in) { if (!in->lockcnt && (minin == NULL || in->usecnt < minin->usecnt)) { minin = in; mininprev = prev; } prev = in; in = in->next; } if (!minin) break; if (mininprev) mininprev->next = minin->next; else sb->inodes = minin->next; free_inode(minin); } #endif inode->next = sb->inodes; sb->inodes = inode; inode->linked = true; sb->inode_cnt++; sb->hash[gethashindex(inode)] = inode; } static struct inode *find_inode(struct super_block *sb, uae_u64 uniq) { struct inode *inode; inode = sb->hash[uniq & (HASH_SIZE - 1)]; if (inode && inode->i_ino == uniq) { sb->hash_hit++; return inode; } sb->hash_miss++; inode = sb->inodes; while (inode) { if (inode->i_ino == uniq) { inode->usecnt++; return inode; } inode = inode->next; } return NULL; } static buffer_head *sb_bread(struct super_block *sb, uae_u32 block) { struct buffer_head *bh; bh = sb->buffer_heads; while (bh) { if (bh->b_blocknr == block) { bh->usecnt++; return bh; } bh = bh->next; } // simple LRU block cache. Should be in blkdev, not here.. while (sb->bh_count > MAX_CACHED_BH_COUNT) { struct buffer_head *minbh = NULL, *minbhprev = NULL; struct buffer_head *prev = NULL; bh = sb->buffer_heads; while (bh) { if (minbh == NULL || bh->usecnt < minbh->usecnt) { minbh = bh; minbhprev = prev; } prev = bh; bh = bh->next; } if (minbh) { if (minbhprev) minbhprev->next = minbh->next; else sb->buffer_heads = minbh->next; free_bh(minbh); } } bh = xcalloc (struct buffer_head, 1); bh->sb = sb; bh->b_data = xmalloc (uae_u8, CD_BLOCK_SIZE); bh->b_blocknr = block; if (sys_command_cd_read (sb->unitnum, bh->b_data, block, 1)) { bh->next = sb->buffer_heads; sb->buffer_heads = bh; bh->linked = true; sb->bh_count++; return bh; } xfree (bh); return NULL; } static void brelse(struct buffer_head *sh) { } static TCHAR *getname(char *name, int len) { TCHAR *s; char old; old = name[len]; while (len > 0 && name[len - 1] == ' ') len--; name[len] = 0; s = au (name); name[len] = old; return s; } static inline uae_u32 isofs_get_ino(unsigned long block, unsigned long offset, unsigned long bufbits) { return (block << (bufbits - 5)) | (offset >> 5); } static inline int isonum_711(char *p) { return *(uae_u8*)p; } static inline int isonum_712(char *p) { return *(uae_u8*)p; } static inline unsigned int isonum_721(char *pp) { uae_u8 *p = (uae_u8*)pp; return p[0] | (p[1] << 8); } static inline unsigned int isonum_722(char *pp) { uae_u8 *p = (uae_u8*)pp; return p[1] | (p[0] << 8); } static inline unsigned int isonum_723(char *pp) { uae_u8 *p = (uae_u8*)pp; /* Ignore bigendian datum due to broken mastering programs */ return p[0] | (p[1] << 8); } static inline unsigned int isonum_731(char *pp) { uae_u8 *p = (uae_u8*)pp; return (p[0] << 24) | (p[1] << 16) | (p[2] << 8) | (p[3] << 0); } static inline unsigned int isonum_732(char *pp) { uae_u8 *p = (uae_u8*)pp; return (p[3] << 24) | (p[2] << 16) | (p[1] << 8) | (p[0] << 0); } static inline unsigned int isonum_733(char *pp) { uae_u8 *p = (uae_u8*)pp; /* Ignore bigendian datum due to broken mastering programs */ return (p[3] << 24) | (p[2] << 16) | (p[1] << 8) | (p[0] << 0); } static void isofs_normalize_block_and_offset(struct iso_directory_record* de, unsigned long *block, unsigned long *offset) { #if 0 /* Only directories are normalized. */ if (de->flags[0] & 2) { *offset = 0; *block = (unsigned long)isonum_733(de->extent) + (unsigned long)isonum_711(de->ext_attr_length); } #endif } static int make_date(int year, int month, int day, int hour, int minute, int second, int tz) { int crtime, days, i; if (year < 0) { crtime = 0; } else { int monlen[12] = {31,28,31,30,31,30,31,31,30,31,30,31}; days = year * 365; if (year > 2) days += (year+1) / 4; for (i = 1; i < month; i++) days += monlen[i-1]; if (((year+2) % 4) == 0 && month > 2) days++; days += day - 1; crtime = ((((days * 24) + hour) * 60 + minute) * 60) + second; /* sign extend */ if (tz & 0x80) tz |= (-1 << 8); /* * The timezone offset is unreliable on some disks, * so we make a sanity check. In no case is it ever * more than 13 hours from GMT, which is 52*15min. * The time is always stored in localtime with the * timezone offset being what get added to GMT to * get to localtime. Thus we need to subtract the offset * to get to true GMT, which is what we store the time * as internally. On the local system, the user may set * their timezone any way they wish, of course, so GMT * gets converted back to localtime on the receiving * system. * * NOTE: mkisofs in versions prior to mkisofs-1.10 had * the sign wrong on the timezone offset. This has now * been corrected there too, but if you are getting screwy * results this may be the explanation. If enough people * complain, a user configuration option could be added * to add the timezone offset in with the wrong sign * for 'compatibility' with older discs, but I cannot see how * it will matter that much. * * Thanks to kuhlmav@elec.canterbury.ac.nz (Volker Kuhlmann) * for pointing out the sign error. */ if (-52 <= tz && tz <= 52) crtime -= tz * 15 * 60; } return crtime; } /* * We have to convert from a MM/DD/YY format to the Unix ctime format. * We have to take into account leap years and all of that good stuff. * Unfortunately, the kernel does not have the information on hand to * take into account daylight savings time, but it shouldn't matter. * The time stored should be localtime (with or without DST in effect), * and the timezone offset should hold the offset required to get back * to GMT. Thus we should always be correct. */ static int iso_date(char * p, int flag) { int year, month, day, hour, minute, second, tz; year = p[0] - 70; month = p[1]; day = p[2]; hour = p[3]; minute = p[4]; second = p[5]; if (flag == 0) tz = p[6]; /* High sierra has no time zone */ else tz = 0; return make_date(year, month, day, hour, minute, second, tz); } static int iso_ltime(char *p) { int year, month, day, hour, minute, second; char t; t = p[4]; p[4] = 0; year = atol(p); p[4] = t; t = p[6]; p[6] = 0; month = atol(p + 4); p[6] = t; t = p[8]; p[8] = 0; day = atol(p + 6); p[8] = t; t = p[10]; p[10] = 0; hour = atol(p + 8); p[10] = t; t = p[12]; p[12] = 0; minute = atol(p + 10); p[12] = t; t = p[14]; p[14] = 0; second = atol(p + 12); p[14] = t; return make_date(year - 1970, month, day, hour, minute, second, 0); } static int isofs_read_level3_size(struct inode *inode) { unsigned long bufsize = ISOFS_BUFFER_SIZE(inode); int high_sierra = ISOFS_SB(inode->i_sb)->s_high_sierra; struct buffer_head *bh = NULL; unsigned long block, offset, block_saved, offset_saved; int i = 0; int more_entries = 0; struct iso_directory_record *tmpde = NULL; struct iso_inode_info *ei = ISOFS_I(inode); inode->i_size = 0; /* The first 16 blocks are reserved as the System Area. Thus, * no inodes can appear in block 0. We use this to flag that * this is the last section. */ ei->i_next_section_block = 0; ei->i_next_section_offset = 0; block = ei->i_iget5_block; offset = ei->i_iget5_offset; do { struct iso_directory_record *de; unsigned int de_len; if (!bh) { bh = sb_bread(inode->i_sb, block); if (!bh) goto out_noread; } de = (struct iso_directory_record *) (bh->b_data + offset); de_len = *(unsigned char *) de; if (de_len == 0) { brelse(bh); bh = NULL; ++block; offset = 0; continue; } block_saved = block; offset_saved = offset; offset += de_len; /* Make sure we have a full directory entry */ if (offset >= bufsize) { int slop = bufsize - offset + de_len; if (!tmpde) { tmpde = (struct iso_directory_record*)xmalloc(uae_u8, 256); if (!tmpde) goto out_nomem; } memcpy(tmpde, de, slop); offset &= bufsize - 1; block++; brelse(bh); bh = NULL; if (offset) { bh = sb_bread(inode->i_sb, block); if (!bh) goto out_noread; memcpy((uae_u8*)tmpde+slop, bh->b_data, offset); } de = tmpde; } inode->i_size += isonum_733(de->size); if (i == 1) { ei->i_next_section_block = block_saved; ei->i_next_section_offset = offset_saved; } more_entries = de->flags[-high_sierra] & 0x80; i++; if (i > 100) goto out_toomany; } while (more_entries); out: xfree(tmpde); if (bh) brelse(bh); return 0; out_nomem: if (bh) brelse(bh); return -ENOMEM; out_noread: write_log (_T("ISOFS: unable to read i-node block %u\n"), block); xfree(tmpde); return -EIO; out_toomany: write_log (_T("ISOFS: More than 100 file sections ?!?, aborting... isofs_read_level3_size: inode=%u\n"), inode->i_ino); goto out; } static int parse_rock_ridge_inode(struct iso_directory_record *de, struct inode *inode); static int isofs_read_inode(struct inode *inode) { struct super_block *sb = inode->i_sb; struct isofs_sb_info *sbi = ISOFS_SB(sb); unsigned long bufsize = ISOFS_BUFFER_SIZE(inode); unsigned long block; int high_sierra = sbi->s_high_sierra; struct buffer_head *bh = NULL; struct iso_directory_record *de; struct iso_directory_record *tmpde = NULL; unsigned int de_len; unsigned long offset; struct iso_inode_info *ei = ISOFS_I(inode); int ret = -EIO; block = ei->i_iget5_block; bh = sb_bread(inode->i_sb, block); if (!bh) goto out_badread; offset = ei->i_iget5_offset; de = (struct iso_directory_record *) (bh->b_data + offset); de_len = *(unsigned char *) de; if (offset + de_len > bufsize) { int frag1 = bufsize - offset; tmpde = (struct iso_directory_record*)xmalloc (uae_u8, de_len); if (tmpde == NULL) { ret = -ENOMEM; goto fail; } memcpy(tmpde, bh->b_data + offset, frag1); brelse(bh); bh = sb_bread(inode->i_sb, ++block); if (!bh) goto out_badread; memcpy((char *)tmpde+frag1, bh->b_data, de_len - frag1); de = tmpde; } inode->i_ino = isofs_get_ino(ei->i_iget5_block, ei->i_iget5_offset, ISOFS_BUFFER_BITS(inode)); /* Assume it is a normal-format file unless told otherwise */ ei->i_file_format = isofs_file_normal; if (de->flags[-high_sierra] & 2) { if (sbi->s_dmode != ISOFS_INVALID_MODE) inode->i_mode = XS_IFDIR | sbi->s_dmode; else inode->i_mode = XS_IFDIR; // | S_IRUGO | S_IXUGO; } else { if (sbi->s_fmode != ISOFS_INVALID_MODE) { inode->i_mode = XS_IFREG | sbi->s_fmode; } else { /* * Set default permissions: r-x for all. The disc * could be shared with DOS machines so virtually * anything could be a valid executable. */ inode->i_mode = XS_IFREG; // | S_IRUGO | S_IXUGO; } } inode->i_uid = sbi->s_uid; inode->i_gid = sbi->s_gid; inode->i_blocks = 0; ei->i_format_parm[0] = 0; ei->i_format_parm[1] = 0; ei->i_format_parm[2] = 0; ei->i_section_size = isonum_733(de->size); if (de->flags[-high_sierra] & 0x80) { ret = isofs_read_level3_size(inode); if (ret < 0) goto fail; ret = -EIO; } else { ei->i_next_section_block = 0; ei->i_next_section_offset = 0; inode->i_size = isonum_733(de->size); } /* * Some dipshit decided to store some other bit of information * in the high byte of the file length. Truncate size in case * this CDROM was mounted with the cruft option. */ if (sbi->s_cruft) inode->i_size &= 0x00ffffff; if (de->interleave[0]) { write_log (_T("ISOFS: Interleaved files not (yet) supported.\n")); inode->i_size = 0; } /* I have no idea what file_unit_size is used for, so we will flag it for now */ if (de->file_unit_size[0] != 0) { write_log (_T("ISOFS: File unit size != 0 for ISO file (%d).\n"), inode->i_ino); } /* I have no idea what other flag bits are used for, so we will flag it for now */ if((de->flags[-high_sierra] & ~2)!= 0){ write_log (_T("ISOFS: Unusual flag settings for ISO file (%d %x).\n"), inode->i_ino, de->flags[-high_sierra]); } inode->i_mtime.tv_sec = inode->i_atime.tv_sec = inode->i_ctime.tv_sec = iso_date(de->date, high_sierra); inode->i_mtime.tv_usec = inode->i_atime.tv_usec = inode->i_ctime.tv_usec = 0; ei->i_first_extent = (isonum_733(de->extent) + isonum_711(de->ext_attr_length)); /* Set the number of blocks for stat() - should be done before RR */ inode->i_blocks = (inode->i_size + 511) >> 9; /* * Now test for possible Rock Ridge extensions which will override * some of these numbers in the inode structure. */ if (!high_sierra) { parse_rock_ridge_inode(de, inode); /* if we want uid/gid set, override the rock ridge setting */ if (sbi->s_uid_set) inode->i_uid = sbi->s_uid; if (sbi->s_gid_set) inode->i_gid = sbi->s_gid; } #if 0 /* Now set final access rights if overriding rock ridge setting */ if (XS_ISDIR(inode->i_mode) && sbi->s_overriderockperm && sbi->s_dmode != ISOFS_INVALID_MODE) inode->i_mode = XS_IFDIR | sbi->s_dmode; if (XS_ISREG(inode->i_mode) && sbi->s_overriderockperm && sbi->s_fmode != ISOFS_INVALID_MODE) inode->i_mode = XS_IFREG | sbi->s_fmode; /* Install the inode operations vector */ if (XS_ISREG(inode->i_mode)) { inode->i_fop = &generic_ro_fops; switch (ei->i_file_format) { #ifdef CONFIG_ZISOFS case isofs_file_compressed: inode->i_data.a_ops = &zisofs_aops; break; #endif default: inode->i_data.a_ops = &isofs_aops; break; } } else if (XS_ISDIR(inode->i_mode)) { inode->i_op = &isofs_dir_inode_operations; inode->i_fop = &isofs_dir_operations; } else if (XS_ISLNK(inode->i_mode)) { inode->i_op = &page_symlink_inode_operations; inode->i_data.a_ops = &isofs_symlink_aops; } else /* XXX - parse_rock_ridge_inode() had already set i_rdev. */ init_special_inode(inode, inode->i_mode, inode->i_rdev); #endif ret = 0; out: xfree(tmpde); if (bh) brelse(bh); return ret; out_badread: write_log(_T("ISOFS: unable to read i-node block\n")); fail: goto out; } static struct inode *isofs_iget(struct super_block *sb, unsigned long block, unsigned long offset, const TCHAR *name) { struct inode *inode; uae_u32 id; if (offset >= 1ul << sb->s_blocksize_bits) return NULL; if (sb->root) { unsigned char bufbits = ISOFS_BUFFER_BITS(sb->root); id = isofs_get_ino(block, offset, bufbits); inode = find_inode (sb, id); if (inode) return inode; } inode = xcalloc(struct inode, 1); inode->name = name ? my_strdup(name) : NULL; inode->i_sb = sb; inode->ei.i_iget5_block = block; inode->ei.i_iget5_offset = offset; inode->i_blkbits = sb->s_blocksize_bits; isofs_read_inode(inode); return inode; } /************************************************************** ROCK RIDGE **************************************************************/ #define SIG(A,B) ((A) | ((B) << 8)) /* isonum_721() */ struct rock_state { void *buffer; unsigned char *chr; int len; int cont_size; int cont_extent; int cont_offset; struct inode *inode; }; /* * This is a way of ensuring that we have something in the system * use fields that is compatible with Rock Ridge. Return zero on success. */ static int check_sp(struct rock_ridge *rr, struct inode *inode) { if (rr->u.SP.magic[0] != 0xbe) return -1; if (rr->u.SP.magic[1] != 0xef) return -1; ISOFS_SB(inode->i_sb)->s_rock_offset = rr->u.SP.skip; return 0; } static void setup_rock_ridge(struct iso_directory_record *de, struct inode *inode, struct rock_state *rs) { rs->len = sizeof(struct iso_directory_record) + de->name_len[0]; if (rs->len & 1) (rs->len)++; rs->chr = (unsigned char *)de + rs->len; rs->len = *((unsigned char *)de) - rs->len; if (rs->len < 0) rs->len = 0; if (ISOFS_SB(inode->i_sb)->s_rock_offset != -1) { rs->len -= ISOFS_SB(inode->i_sb)->s_rock_offset; rs->chr += ISOFS_SB(inode->i_sb)->s_rock_offset; if (rs->len < 0) rs->len = 0; } } static void init_rock_state(struct rock_state *rs, struct inode *inode) { memset(rs, 0, sizeof(*rs)); rs->inode = inode; } /* * Returns 0 if the caller should continue scanning, 1 if the scan must end * and -ve on error. */ static int rock_continue(struct rock_state *rs) { int ret = 1; int blocksize = 1 << rs->inode->i_blkbits; const int min_de_size = offsetof(struct rock_ridge, u); xfree(rs->buffer); rs->buffer = NULL; if ((unsigned)rs->cont_offset > blocksize - min_de_size || (unsigned)rs->cont_size > blocksize || (unsigned)(rs->cont_offset + rs->cont_size) > blocksize) { write_log (_T("rock: corrupted directory entry. extent=%d, offset=%d, size=%d\n"), rs->cont_extent, rs->cont_offset, rs->cont_size); ret = -EIO; goto out; } if (rs->cont_extent) { struct buffer_head *bh; rs->buffer = xmalloc(uae_u8, rs->cont_size); if (!rs->buffer) { ret = -ENOMEM; goto out; } ret = -EIO; bh = sb_bread(rs->inode->i_sb, rs->cont_extent); if (bh) { memcpy(rs->buffer, bh->b_data + rs->cont_offset, rs->cont_size); brelse(bh); rs->chr = (unsigned char*)rs->buffer; rs->len = rs->cont_size; rs->cont_extent = 0; rs->cont_size = 0; rs->cont_offset = 0; return 0; } write_log (_T("Unable to read rock-ridge attributes\n")); } out: xfree(rs->buffer); rs->buffer = NULL; return ret; } /* * We think there's a record of type `sig' at rs->chr. Parse the signature * and make sure that there's really room for a record of that type. */ static int rock_check_overflow(struct rock_state *rs, int sig) { int len; switch (sig) { case SIG('S', 'P'): len = sizeof(struct SU_SP_s); break; case SIG('C', 'E'): len = sizeof(struct SU_CE_s); break; case SIG('E', 'R'): len = sizeof(struct SU_ER_s); break; case SIG('R', 'R'): len = sizeof(struct RR_RR_s); break; case SIG('P', 'X'): len = sizeof(struct RR_PX_s); break; case SIG('P', 'N'): len = sizeof(struct RR_PN_s); break; case SIG('S', 'L'): len = sizeof(struct RR_SL_s); break; case SIG('N', 'M'): len = sizeof(struct RR_NM_s); break; case SIG('C', 'L'): len = sizeof(struct RR_CL_s); break; case SIG('P', 'L'): len = sizeof(struct RR_PL_s); break; case SIG('T', 'F'): len = sizeof(struct RR_TF_s); break; case SIG('Z', 'F'): len = sizeof(struct RR_ZF_s); break; case SIG('A', 'S'): len = sizeof(struct RR_AS_s); break; default: len = 0; break; } len += offsetof(struct rock_ridge, u); if (len > rs->len) { write_log(_T("rock: directory entry would overflow storage\n")); write_log(_T("rock: sig=0x%02x, size=%d, remaining=%d\n"), sig, len, rs->len); return -EIO; } return 0; } /* * return length of name field; 0: not found, -1: to be ignored */ int get_rock_ridge_filename(struct iso_directory_record *de, char *retname, struct inode *inode) { struct rock_state rs; struct rock_ridge *rr; int sig; int retnamlen = 0; int truncate = 0; int ret = 0; if (!ISOFS_SB(inode->i_sb)->s_rock) return 0; *retname = 0; init_rock_state(&rs, inode); setup_rock_ridge(de, inode, &rs); repeat: while (rs.len > 2) { /* There may be one byte for padding somewhere */ rr = (struct rock_ridge *)rs.chr; /* * Ignore rock ridge info if rr->len is out of range, but * don't return -EIO because that would make the file * invisible. */ if (rr->len < 3) goto out; /* Something got screwed up here */ sig = isonum_721((char*)rs.chr); if (rock_check_overflow(&rs, sig)) goto eio; rs.chr += rr->len; rs.len -= rr->len; /* * As above, just ignore the rock ridge info if rr->len * is bogus. */ if (rs.len < 0) goto out; /* Something got screwed up here */ switch (sig) { case SIG('R', 'R'): if ((rr->u.RR.flags[0] & RR_NM) == 0) goto out; break; case SIG('S', 'P'): if (check_sp(rr, inode)) goto out; break; case SIG('C', 'E'): rs.cont_extent = isonum_733(rr->u.CE.extent); rs.cont_offset = isonum_733(rr->u.CE.offset); rs.cont_size = isonum_733(rr->u.CE.size); break; case SIG('N', 'M'): if (truncate) break; if (rr->len < 5) break; /* * If the flags are 2 or 4, this indicates '.' or '..'. * We don't want to do anything with this, because it * screws up the code that calls us. We don't really * care anyways, since we can just use the non-RR * name. */ if (rr->u.NM.flags & 6) break; if (rr->u.NM.flags & ~1) { write_log(_T("Unsupported NM flag settings (%d)\n"), rr->u.NM.flags); break; } if ((strlen(retname) + rr->len - 5) >= 254) { truncate = 1; break; } strncat(retname, rr->u.NM.name, rr->len - 5); retnamlen += rr->len - 5; break; case SIG('R', 'E'): xfree(rs.buffer); return -1; default: break; } } ret = rock_continue(&rs); if (ret == 0) goto repeat; if (ret == 1) return retnamlen; /* If 0, this file did not have a NM field */ out: xfree(rs.buffer); return ret; eio: ret = -EIO; goto out; } static int parse_rock_ridge_inode_internal(struct iso_directory_record *de, struct inode *inode, int regard_xa) { int symlink_len = 0; int cnt, sig; struct inode *reloc; struct rock_ridge *rr; int rootflag; struct rock_state rs; int ret = 0; if (!ISOFS_SB(inode->i_sb)->s_rock) return 0; init_rock_state(&rs, inode); setup_rock_ridge(de, inode, &rs); if (regard_xa) { rs.chr += 14; rs.len -= 14; if (rs.len < 0) rs.len = 0; } repeat: while (rs.len > 2) { /* There may be one byte for padding somewhere */ rr = (struct rock_ridge *)rs.chr; /* * Ignore rock ridge info if rr->len is out of range, but * don't return -EIO because that would make the file * invisible. */ if (rr->len < 3) goto out; /* Something got screwed up here */ sig = isonum_721((char*)rs.chr); if (rock_check_overflow(&rs, sig)) goto eio; rs.chr += rr->len; rs.len -= rr->len; /* * As above, just ignore the rock ridge info if rr->len * is bogus. */ if (rs.len < 0) goto out; /* Something got screwed up here */ switch (sig) { case SIG('A', 'S'): { char *p = &rr->u.AS.data[0]; if (rr->u.AS.flags & 1) { // PROTECTION inode->i_isaflags = true; inode->i_aflags = p[3]; p += 4; } if (rr->u.AS.flags & 2) { // COMMENT const int maxcomment = 80; if (!inode->i_comment) inode->i_comment = xcalloc (TCHAR, maxcomment + 1); int l = p[0]; char t = p[l]; p[l] = 0; au_copy (inode->i_comment + _tcslen (inode->i_comment), maxcomment + 1 - _tcslen (inode->i_comment), p + 1); p[l] = t; } break; } case SIG('S', 'P'): if (check_sp(rr, inode)) goto out; break; case SIG('C', 'E'): rs.cont_extent = isonum_733(rr->u.CE.extent); rs.cont_offset = isonum_733(rr->u.CE.offset); rs.cont_size = isonum_733(rr->u.CE.size); break; case SIG('E', 'R'): ISOFS_SB(inode->i_sb)->s_rock = 1; write_log(_T("ISO 9660 Extensions: ")); { int p; for (p = 0; p < rr->u.ER.len_id; p++) write_log(_T("%c"), rr->u.ER.data[p]); } write_log(_T("\n")); break; case SIG('P', 'X'): inode->i_mode = isonum_733(rr->u.PX.mode); //set_nlink(inode, isonum_733(rr->u.PX.n_links)); inode->i_uid = isonum_733(rr->u.PX.uid); inode->i_gid = isonum_733(rr->u.PX.gid); break; case SIG('P', 'N'): { int high, low; high = isonum_733(rr->u.PN.dev_high); low = isonum_733(rr->u.PN.dev_low); /* * The Rock Ridge standard specifies that if * sizeof(dev_t) <= 4, then the high field is * unused, and the device number is completely * stored in the low field. Some writers may * ignore this subtlety, * and as a result we test to see if the entire * device number is * stored in the low field, and use that. */ #if 0 if ((low & ~0xff) && high == 0) { inode->i_rdev = MKDEV(low >> 8, low & 0xff); } else { inode->i_rdev = MKDEV(high, low); } #endif } break; case SIG('T', 'F'): /* * Some RRIP writers incorrectly place ctime in the * TF_CREATE field. Try to handle this correctly for * either case. */ /* Rock ridge never appears on a High Sierra disk */ cnt = 0; if (rr->u.TF.flags & TF_CREATE) { inode->i_ctime.tv_sec = iso_date(rr->u.TF.times[cnt++].time, 0); inode->i_ctime.tv_usec = 0; } if (rr->u.TF.flags & TF_MODIFY) { inode->i_mtime.tv_sec = iso_date(rr->u.TF.times[cnt++].time, 0); inode->i_mtime.tv_usec = 0; } if (rr->u.TF.flags & TF_ACCESS) { inode->i_atime.tv_sec = iso_date(rr->u.TF.times[cnt++].time, 0); inode->i_atime.tv_usec = 0; } if (rr->u.TF.flags & TF_ATTRIBUTES) { inode->i_ctime.tv_sec = iso_date(rr->u.TF.times[cnt++].time, 0); inode->i_ctime.tv_usec = 0; } break; case SIG('S', 'L'): { int slen; struct SL_component *slp; struct SL_component *oldslp; slen = rr->len - 5; slp = &rr->u.SL.link; inode->i_size = symlink_len; while (slen > 1) { rootflag = 0; switch (slp->flags & ~1) { case 0: inode->i_size += slp->len; break; case 2: inode->i_size += 1; break; case 4: inode->i_size += 2; break; case 8: rootflag = 1; inode->i_size += 1; break; default: write_log(_T("Symlink component flag not implemented\n")); } slen -= slp->len + 2; oldslp = slp; slp = (struct SL_component *) (((char *)slp) + slp->len + 2); if (slen < 2) { if (((rr->u.SL. flags & 1) != 0) && ((oldslp-> flags & 1) == 0)) inode->i_size += 1; break; } /* * If this component record isn't * continued, then append a '/'. */ if (!rootflag && (oldslp->flags & 1) == 0) inode->i_size += 1; } } symlink_len = inode->i_size; break; case SIG('R', 'E'): write_log(_T("Attempt to read inode for relocated directory\n")); goto out; case SIG('C', 'L'): ISOFS_I(inode)->i_first_extent = isonum_733(rr->u.CL.location); reloc = isofs_iget(inode->i_sb, ISOFS_I(inode)->i_first_extent, 0, NULL); if (IS_ERR(reloc)) { ret = -1; //PTR_ERR(reloc); goto out; } inode->i_mode = reloc->i_mode; //set_nlink(inode, reloc->i_nlink); inode->i_uid = reloc->i_uid; inode->i_gid = reloc->i_gid; //inode->i_rdev = reloc->i_rdev; inode->i_size = reloc->i_size; inode->i_blocks = reloc->i_blocks; inode->i_atime = reloc->i_atime; inode->i_ctime = reloc->i_ctime; inode->i_mtime = reloc->i_mtime; iput(reloc); break; #ifdef CONFIG_ZISOFS case SIG('Z', 'F'): { int algo; if (ISOFS_SB(inode->i_sb)->s_nocompress) break; algo = isonum_721(rr->u.ZF.algorithm); if (algo == SIG('p', 'z')) { int block_shift = isonum_711(&rr->u.ZF.parms[1]); if (block_shift > 17) { printk(KERN_WARNING "isofs: " "Can't handle ZF block " "size of 2^%d\n", block_shift); } else { /* * Note: we don't change * i_blocks here */ ISOFS_I(inode)->i_file_format = isofs_file_compressed; /* * Parameters to compression * algorithm (header size, * block size) */ ISOFS_I(inode)->i_format_parm[0] = isonum_711(&rr->u.ZF.parms[0]); ISOFS_I(inode)->i_format_parm[1] = isonum_711(&rr->u.ZF.parms[1]); inode->i_size = isonum_733(rr->u.ZF. real_size); } } else { printk(KERN_WARNING "isofs: Unknown ZF compression " "algorithm: %c%c\n", rr->u.ZF.algorithm[0], rr->u.ZF.algorithm[1]); } break; } #endif default: break; } } ret = rock_continue(&rs); if (ret == 0) goto repeat; if (ret == 1) ret = 0; out: xfree(rs.buffer); return ret; eio: ret = -EIO; goto out; } static char *get_symlink_chunk(char *rpnt, struct rock_ridge *rr, char *plimit) { int slen; int rootflag; struct SL_component *oldslp; struct SL_component *slp; slen = rr->len - 5; slp = &rr->u.SL.link; while (slen > 1) { rootflag = 0; switch (slp->flags & ~1) { case 0: if (slp->len > plimit - rpnt) return NULL; memcpy(rpnt, slp->text, slp->len); rpnt += slp->len; break; case 2: if (rpnt >= plimit) return NULL; *rpnt++ = '.'; break; case 4: if (2 > plimit - rpnt) return NULL; *rpnt++ = '.'; *rpnt++ = '.'; break; case 8: if (rpnt >= plimit) return NULL; rootflag = 1; *rpnt++ = '/'; break; default: write_log(_T("Symlink component flag not implemented (%d)\n"), slp->flags); } slen -= slp->len + 2; oldslp = slp; slp = (struct SL_component *)((char *)slp + slp->len + 2); if (slen < 2) { /* * If there is another SL record, and this component * record isn't continued, then add a slash. */ if ((!rootflag) && (rr->u.SL.flags & 1) && !(oldslp->flags & 1)) { if (rpnt >= plimit) return NULL; *rpnt++ = '/'; } break; } /* * If this component record isn't continued, then append a '/'. */ if (!rootflag && !(oldslp->flags & 1)) { if (rpnt >= plimit) return NULL; *rpnt++ = '/'; } } return rpnt; } static int parse_rock_ridge_inode(struct iso_directory_record *de, struct inode *inode) { int result = parse_rock_ridge_inode_internal(de, inode, 0); /* * if rockridge flag was reset and we didn't look for attributes * behind eventual XA attributes, have a look there */ if ((ISOFS_SB(inode->i_sb)->s_rock_offset == -1) && (ISOFS_SB(inode->i_sb)->s_rock == 2)) { result = parse_rock_ridge_inode_internal(de, inode, 14); } return result; } #if 0 /* * readpage() for symlinks: reads symlink contents into the page and either * makes it uptodate and returns 0 or returns error (-EIO) */ static int rock_ridge_symlink_readpage(struct file *file, struct page *page) { struct inode *inode = page->mapping->host; struct iso_inode_info *ei = ISOFS_I(inode); struct isofs_sb_info *sbi = ISOFS_SB(inode->i_sb); char *link = kmap(page); unsigned long bufsize = ISOFS_BUFFER_SIZE(inode); struct buffer_head *bh; char *rpnt = link; unsigned char *pnt; struct iso_directory_record *raw_de; unsigned long block, offset; int sig; struct rock_ridge *rr; struct rock_state rs; int ret; if (!sbi->s_rock) goto error; init_rock_state(&rs, inode); block = ei->i_iget5_block; bh = sb_bread(inode->i_sb, block); if (!bh) goto out_noread; offset = ei->i_iget5_offset; pnt = (unsigned char *)bh->b_data + offset; raw_de = (struct iso_directory_record *)pnt; /* * If we go past the end of the buffer, there is some sort of error. */ if (offset + *pnt > bufsize) goto out_bad_span; /* * Now test for possible Rock Ridge extensions which will override * some of these numbers in the inode structure. */ setup_rock_ridge(raw_de, inode, &rs); repeat: while (rs.len > 2) { /* There may be one byte for padding somewhere */ rr = (struct rock_ridge *)rs.chr; if (rr->len < 3) goto out; /* Something got screwed up here */ sig = isonum_721(rs.chr); if (rock_check_overflow(&rs, sig)) goto out; rs.chr += rr->len; rs.len -= rr->len; if (rs.len < 0) goto out; /* corrupted isofs */ switch (sig) { case SIG('R', 'R'): if ((rr->u.RR.flags[0] & RR_SL) == 0) goto out; break; case SIG('S', 'P'): if (check_sp(rr, inode)) goto out; break; case SIG('S', 'L'): rpnt = get_symlink_chunk(rpnt, rr, link + (PAGE_SIZE - 1)); if (rpnt == NULL) goto out; break; case SIG('C', 'E'): /* This tells is if there is a continuation record */ rs.cont_extent = isonum_733(rr->u.CE.extent); rs.cont_offset = isonum_733(rr->u.CE.offset); rs.cont_size = isonum_733(rr->u.CE.size); default: break; } } ret = rock_continue(&rs); if (ret == 0) goto repeat; if (ret < 0) goto fail; if (rpnt == link) goto fail; brelse(bh); *rpnt = '\0'; SetPageUptodate(page); kunmap(page); unlock_page(page); return 0; /* error exit from macro */ out: kfree(rs.buffer); goto fail; out_noread: printk("unable to read i-node block"); goto fail; out_bad_span: printk("symlink spans iso9660 blocks\n"); fail: brelse(bh); error: SetPageError(page); kunmap(page); unlock_page(page); return -EIO; } #endif static TCHAR *get_joliet_filename(struct iso_directory_record * de, struct inode * inode) { unsigned char utf8; //struct nls_table *nls; int len; TCHAR *out; utf8 = ISOFS_SB(inode->i_sb)->s_utf8; //nls = ISOFS_SB(inode->i_sb)->s_nls_iocharset; if (utf8) { /* probably never used */ len = de->name_len[0]; uae_char *o = xmalloc (uae_char, len + 1); for (int i = 0; i < len; i++) o[i] = de->name[i]; o[len] = 0; out = utf8u (o); xfree (o); } else { len = de->name_len[0] / 2; out = xmalloc (TCHAR, len + 1); for (int i = 0; i < len; i++) out[i] = isonum_722 (de->name + i * 2); out[len] = 0; } if ((len > 2) && (out[len-2] == ';') && (out[len-1] == '1')) { len -= 2; out[len] = 0; } /* * Windows doesn't like periods at the end of a name, * so neither do we */ while (len >= 2 && (out[len-1] == '.')) { len--; out[len] = 0; } return out; } /************************************************************ */ /* * Get a set of blocks; filling in buffer_heads if already allocated * or getblk() if they are not. Returns the number of blocks inserted * (-ve == error.) */ static int isofs_get_blocks(struct inode *inode, uae_u32 iblock, struct buffer_head *bh, unsigned long nblocks) { unsigned long b_off = iblock; unsigned offset, sect_size; unsigned int firstext; unsigned long nextblk, nextoff; int section, rv, error; struct iso_inode_info *ei = ISOFS_I(inode); error = -1; rv = 0; #if 0 if (iblock != b_off) { write(KERN_DEBUG "%s: block number too large\n", __func__); goto abort; } #endif offset = 0; firstext = ei->i_first_extent; sect_size = ei->i_section_size >> ISOFS_BUFFER_BITS(inode); nextblk = ei->i_next_section_block; nextoff = ei->i_next_section_offset; section = 0; while (nblocks) { /* If we are *way* beyond the end of the file, print a message. * Access beyond the end of the file up to the next page boundary * is normal, however because of the way the page cache works. * In this case, we just return 0 so that we can properly fill * the page with useless information without generating any * I/O errors. */ if (b_off > ((inode->i_size) >> ISOFS_BUFFER_BITS(inode))) { write_log (_T("ISOFS: block >= EOF (%u, %llu)\n"), b_off, (unsigned long long)inode->i_size); goto abort; } /* On the last section, nextblk == 0, section size is likely to * exceed sect_size by a partial block, and access beyond the * end of the file will reach beyond the section size, too. */ while (nextblk && (b_off >= (offset + sect_size))) { struct inode *ninode; offset += sect_size; ninode = isofs_iget(inode->i_sb, nextblk, nextoff, NULL); if (IS_ERR(ninode)) { //error = PTR_ERR(ninode); goto abort; } firstext = ISOFS_I(ninode)->i_first_extent; sect_size = ISOFS_I(ninode)->i_section_size >> ISOFS_BUFFER_BITS(ninode); nextblk = ISOFS_I(ninode)->i_next_section_block; nextoff = ISOFS_I(ninode)->i_next_section_offset; iput(ninode); if (++section > 100) { write_log (_T("ISOFS: More than 100 file sections ?!? aborting...\n")); goto abort; } } if (bh) { bh->b_blocknr = firstext + b_off - offset; } bh++; /* Next buffer head */ b_off++; /* Next buffer offset */ nblocks--; rv++; } error = 0; abort: return rv != 0 ? rv : -1; } static struct buffer_head *isofs_bread(struct inode *inode, uae_u32 block) { struct buffer_head dummy[1]; int error; error = isofs_get_blocks(inode, block, dummy, 1); if (error < 0) return NULL; return sb_bread(inode->i_sb, dummy[0].b_blocknr); } /* * Check if root directory is empty (has less than 3 files). * * Used to detect broken CDs where ISO root directory is empty but Joliet root * directory is OK. If such CD has Rock Ridge extensions, they will be disabled * (and Joliet used instead) or else no files would be visible. */ static bool rootdir_empty(struct super_block *sb, unsigned long block) { int offset = 0, files = 0, de_len; struct iso_directory_record *de; struct buffer_head *bh; bh = sb_bread(sb, block); if (!bh) return true; while (files < 3) { de = (struct iso_directory_record *) (bh->b_data + offset); de_len = *(unsigned char *) de; if (de_len == 0) break; files++; offset += de_len; } brelse(bh); return files < 3; } /* * Initialize the superblock and read the root inode. * * Note: a check_disk_change() has been done immediately prior * to this call, so we don't need to check again. */ static int isofs_fill_super(struct super_block *s, void *data, int silent, uae_u64 *uniq) { struct buffer_head *bh = NULL, *pri_bh = NULL; struct hs_primary_descriptor *h_pri = NULL; struct iso_primary_descriptor *pri = NULL; struct iso_supplementary_descriptor *sec = NULL; struct iso_directory_record *rootp; struct inode *inode; struct iso9660_options opt; struct isofs_sb_info *sbi; unsigned long first_data_zone; int joliet_level = 0; int iso_blknum, block; int orig_zonesize; int table, error = -EINVAL; unsigned int vol_desc_start; TCHAR *volume_name = NULL, *ch; uae_u32 volume_date; //save_mount_options(s, data); sbi = &s->ei; memset (&opt, 0, sizeof opt); //if (!parse_options((char *)data, &opt)) // goto out_freesbi; opt.blocksize = 2048; opt.map = 'n'; opt.rock = 1; opt.joliet = 1; sbi->s_high_sierra = 0; /* default is iso9660 */ vol_desc_start = 0; #if 0 struct device_info di; if (sys_command_info (s->unitnum, &di, true)) { vol_desc_start = di.toc.firstaddress; } #endif for (iso_blknum = vol_desc_start+16; iso_blknum < vol_desc_start+100; iso_blknum++) { struct hs_volume_descriptor *hdp; struct iso_volume_descriptor *vdp; block = iso_blknum << ISOFS_BLOCK_BITS; if (!(bh = sb_bread(s, block))) goto out_no_read; vdp = (struct iso_volume_descriptor *)bh->b_data; hdp = (struct hs_volume_descriptor *)bh->b_data; /* * Due to the overlapping physical location of the descriptors, * ISO CDs can match hdp->id==HS_STANDARD_ID as well. To ensure * proper identification in this case, we first check for ISO. */ if (strncmp (vdp->id, ISO_STANDARD_ID, sizeof vdp->id) == 0) { if (isonum_711(vdp->type) == ISO_VD_END) break; if (isonum_711(vdp->type) == ISO_VD_PRIMARY) { if (pri == NULL) { pri = (struct iso_primary_descriptor *)vdp; /* Save the buffer in case we need it ... */ pri_bh = bh; bh = NULL; } } else if (isonum_711(vdp->type) == ISO_VD_SUPPLEMENTARY) { sec = (struct iso_supplementary_descriptor *)vdp; if (sec->escape[0] == 0x25 && sec->escape[1] == 0x2f) { if (opt.joliet) { if (sec->escape[2] == 0x40) joliet_level = 1; else if (sec->escape[2] == 0x43) joliet_level = 2; else if (sec->escape[2] == 0x45) joliet_level = 3; write_log (_T("ISO 9660 Extensions: Microsoft Joliet Level %d\n"), joliet_level); } goto root_found; } else { /* Unknown supplementary volume descriptor */ sec = NULL; } } } else { if (strncmp (hdp->id, HS_STANDARD_ID, sizeof hdp->id) == 0) { if (isonum_711(hdp->type) != ISO_VD_PRIMARY) goto out_freebh; sbi->s_high_sierra = 1; opt.rock = 0; h_pri = (struct hs_primary_descriptor *)vdp; goto root_found; } } /* Just skip any volume descriptors we don't recognize */ brelse(bh); bh = NULL; } /* * If we fall through, either no volume descriptor was found, * or else we passed a primary descriptor looking for others. */ if (!pri) goto out_unknown_format; brelse(bh); bh = pri_bh; pri_bh = NULL; root_found: if (joliet_level && (pri == NULL || !opt.rock)) { /* This is the case of Joliet with the norock mount flag. * A disc with both Joliet and Rock Ridge is handled later */ pri = (struct iso_primary_descriptor *) sec; } if(sbi->s_high_sierra){ rootp = (struct iso_directory_record *) h_pri->root_directory_record; sbi->s_nzones = isonum_733(h_pri->volume_space_size); sbi->s_log_zone_size = isonum_723(h_pri->logical_block_size); sbi->s_max_size = isonum_733(h_pri->volume_space_size); } else { if (!pri) goto out_freebh; rootp = (struct iso_directory_record *) pri->root_directory_record; sbi->s_nzones = isonum_733(pri->volume_space_size); sbi->s_log_zone_size = isonum_723(pri->logical_block_size); sbi->s_max_size = isonum_733(pri->volume_space_size); } sbi->s_ninodes = 0; /* No way to figure this out easily */ orig_zonesize = sbi->s_log_zone_size; /* * If the zone size is smaller than the hardware sector size, * this is a fatal error. This would occur if the disc drive * had sectors that were 2048 bytes, but the filesystem had * blocks that were 512 bytes (which should only very rarely * happen.) */ if (orig_zonesize < opt.blocksize) goto out_bad_size; /* RDE: convert log zone size to bit shift */ switch (sbi->s_log_zone_size) { case 512: sbi->s_log_zone_size = 9; break; case 1024: sbi->s_log_zone_size = 10; break; case 2048: sbi->s_log_zone_size = 11; break; default: goto out_bad_zone_size; } //s->s_magic = ISOFS_SUPER_MAGIC; /* * With multi-extent files, file size is only limited by the maximum * size of a file system, which is 8 TB. */ //s->s_maxbytes = 0x80000000000LL; /* * The CDROM is read-only, has no nodes (devices) on it, and since * all of the files appear to be owned by root, we really do not want * to allow suid. (suid or devices will not show up unless we have * Rock Ridge extensions) */ //s->s_flags |= MS_RDONLY /* | MS_NODEV | MS_NOSUID */; /* Set this for reference. Its not currently used except on write which we don't have .. */ first_data_zone = isonum_733(rootp->extent) + isonum_711(rootp->ext_attr_length); sbi->s_firstdatazone = first_data_zone; write_log (_T("ISOFS: Max size:%d Log zone size:%d\n"), sbi->s_max_size, 1UL << sbi->s_log_zone_size); write_log (_T("ISOFS: First datazone:%d\n"), sbi->s_firstdatazone); if(sbi->s_high_sierra) write_log(_T("ISOFS: Disc in High Sierra format.\n")); ch = getname(pri->system_id, 4); write_log (_T("ISOFS: System ID: %s"), ch); xfree(ch); volume_name = getname(pri->volume_id, 32); volume_date = iso_ltime(pri->creation_date); write_log (_T(" Volume ID: '%s'\n"), volume_name); if (!strncmp(pri->system_id, ISO_SYSTEM_ID_CDTV, strlen(ISO_SYSTEM_ID_CDTV))) sbi->s_cdtv = 1; /* * If the Joliet level is set, we _may_ decide to use the * secondary descriptor, but can't be sure until after we * read the root inode. But before reading the root inode * we may need to change the device blocksize, and would * rather release the old buffer first. So, we cache the * first_data_zone value from the secondary descriptor. */ if (joliet_level) { pri = (struct iso_primary_descriptor *) sec; rootp = (struct iso_directory_record *)pri->root_directory_record; first_data_zone = isonum_733(rootp->extent) + isonum_711(rootp->ext_attr_length); } /* * We're all done using the volume descriptor, and may need * to change the device blocksize, so release the buffer now. */ brelse(pri_bh); brelse(bh); #if 0 if (joliet_level && opt.utf8 == 0) { char *p = opt.iocharset ? opt.iocharset : CONFIG_NLS_DEFAULT; sbi->s_nls_iocharset = load_nls(p); if (! sbi->s_nls_iocharset) { /* Fail only if explicit charset specified */ if (opt.iocharset) goto out_freesbi; sbi->s_nls_iocharset = load_nls_default(); } } #endif //s->s_op = &isofs_sops; //s->s_export_op = &isofs_export_ops; sbi->s_mapping = opt.map; sbi->s_rock = (opt.rock ? 2 : 0); sbi->s_rock_offset = -1; /* initial offset, will guess until SP is found*/ sbi->s_cruft = opt.cruft; sbi->s_hide = opt.hide; sbi->s_showassoc = opt.showassoc; sbi->s_uid = opt.uid; sbi->s_gid = opt.gid; sbi->s_uid_set = opt.uid_set; sbi->s_gid_set = opt.gid_set; sbi->s_utf8 = opt.utf8; sbi->s_nocompress = opt.nocompress; sbi->s_overriderockperm = opt.overriderockperm; /* * Read the root inode, which _may_ result in changing * the s_rock flag. Once we have the final s_rock value, * we then decide whether to use the Joliet descriptor. */ inode = isofs_iget(s, sbi->s_firstdatazone, 0, NULL); if (IS_ERR(inode)) goto out_no_root; /* * Fix for broken CDs with Rock Ridge and empty ISO root directory but * correct Joliet root directory. */ if (sbi->s_rock == 1 && joliet_level && rootdir_empty(s, sbi->s_firstdatazone)) { write_log(_T("ISOFS: primary root directory is empty. Disabling Rock Ridge and switching to Joliet.\n")); sbi->s_rock = 0; } /* * If this disk has both Rock Ridge and Joliet on it, then we * want to use Rock Ridge by default. This can be overridden * by using the norock mount option. There is still one other * possibility that is not taken into account: a Rock Ridge * CD with Unicode names. Until someone sees such a beast, it * will not be supported. */ if (sbi->s_rock == 1) { joliet_level = 0; sbi->s_cdtv = 1; /* only convert if plain iso9660 */ } else if (joliet_level) { sbi->s_rock = 0; sbi->s_cdtv = 1; /* only convert if plain iso9660 */ if (sbi->s_firstdatazone != first_data_zone) { sbi->s_firstdatazone = first_data_zone; write_log (_T("ISOFS: changing to secondary root\n")); iput(inode); inode = isofs_iget(s, sbi->s_firstdatazone, 0, NULL); if (IS_ERR(inode)) goto out_no_root; } } if (opt.check == 'u') { /* Only Joliet is case insensitive by default */ if (joliet_level) opt.check = 'r'; else opt.check = 's'; } sbi->s_joliet_level = joliet_level; /* Make sure the root inode is a directory */ if (!XS_ISDIR(inode->i_mode)) { write_log (_T("isofs_fill_super: root inode is not a directory. Corrupted media?\n")); goto out_iput; } table = 0; if (joliet_level) table += 2; if (opt.check == 'r') table++; //s->s_d_op = &isofs_dentry_ops[table]; /* get the root dentry */ //s->s_root = d_alloc_root(inode); //if (!(s->s_root)) // goto out_no_root; //kfree(opt.iocharset); iput(inode); s->root = inode; inode->name = volume_name; inode->i_ctime.tv_sec = volume_date; *uniq = inode->i_ino; return 0; /* * Display error messages and free resources. */ out_iput: iput(inode); goto out_no_inode; out_no_root: write_log (_T("ISOFS: get root inode failed\n")); out_no_inode: #ifdef CONFIG_JOLIET unload_nls(sbi->s_nls_iocharset); #endif goto out_freesbi; out_no_read: write_log (_T("ISOFS: bread failed, dev=%d, iso_blknum=%d, block=%d\n"), s->unitnum, iso_blknum, block); goto out_freebh; out_bad_zone_size: write_log(_T("ISOFS: Bad logical zone size %d\n"), sbi->s_log_zone_size); goto out_freebh; out_bad_size: write_log (_T("ISOFS: Logical zone size(%d) < hardware blocksize(%u)\n"), orig_zonesize, opt.blocksize); goto out_freebh; out_unknown_format: if (!silent) write_log (_T("ISOFS: Unable to identify CD-ROM format.\n")); out_freebh: brelse(bh); brelse(pri_bh); out_freesbi: xfree(volume_name); return error; } static int isofs_name_translate(struct iso_directory_record *de, char *newn, struct inode *inode) { char * old = de->name; int len = de->name_len[0]; int i; for (i = 0; i < len; i++) { unsigned char c = old[i]; if (!c) break; if (!inode->i_sb->ei.s_cdtv) { /* keep case if Amiga/CDTV/CD32 */ /* convert from second character (same as CacheCDFS default) */ if (i > 0 && c >= 'A' && c <= 'Z') c |= 0x20; /* lower case */ } /* Drop trailing '.;1' (ISO 9660:1988 7.5.1 requires period) */ if (c == '.' && i == len - 3 && old[i + 1] == ';' && old[i + 2] == '1') break; /* Drop trailing ';1' */ if (c == ';' && i == len - 2 && old[i + 1] == '1') break; /* Convert remaining ';' to '.' */ /* Also '/' to '.' (broken Acorn-generated ISO9660 images) */ if (c == ';' || c == '/') c = '.'; newn[i] = c; } return i; } static int isofs_cmp(const char *name, char *compare, int dlen) { if (!compare) return 1; /* we don't care about special "." and ".." files */ if (dlen == 1) { /* "." */ if (compare[0] == 0) { return 1; } else if (compare[0] == 1) { return 1; } } char tmp = compare[dlen]; compare[dlen] = 0; int c = stricmp(name, compare); compare[dlen] = tmp; return c; } static struct inode *isofs_find_entry(struct inode *dir, char *tmpname, TCHAR *tmpname2, struct iso_directory_record *tmpde, const char *name, const TCHAR *nameu) { unsigned long bufsize = ISOFS_BUFFER_SIZE(dir); unsigned char bufbits = ISOFS_BUFFER_BITS(dir); unsigned long block, f_pos, offset, block_saved, offset_saved; struct buffer_head *bh = NULL; struct isofs_sb_info *sbi = ISOFS_SB(dir->i_sb); int i; TCHAR *jname; if (!ISOFS_I(dir)->i_first_extent) return 0; f_pos = 0; offset = 0; block = 0; while (f_pos < dir->i_size) { struct iso_directory_record *de; int de_len, match, dlen; char *dpnt; if (!bh) { bh = isofs_bread(dir, block); if (!bh) return 0; } de = (struct iso_directory_record *) (bh->b_data + offset); de_len = *(unsigned char *) de; if (!de_len) { brelse(bh); bh = NULL; f_pos = (f_pos + ISOFS_BLOCK_SIZE) & ~(ISOFS_BLOCK_SIZE - 1); block = f_pos >> bufbits; offset = 0; continue; } block_saved = bh->b_blocknr; offset_saved = offset; offset += de_len; f_pos += de_len; /* Make sure we have a full directory entry */ if (offset >= bufsize) { int slop = bufsize - offset + de_len; memcpy((uae_u8*)tmpde, de, slop); offset &= bufsize - 1; block++; brelse(bh); bh = NULL; if (offset) { bh = isofs_bread(dir, block); if (!bh) return 0; memcpy((uae_u8*)tmpde + slop, bh->b_data, offset); } de = tmpde; } dlen = de->name_len[0]; dpnt = de->name; /* Basic sanity check, whether name doesn't exceed dir entry */ if (de_len < dlen + sizeof(struct iso_directory_record)) { write_log (_T("iso9660: Corrupted directory entry in block %u of inode %u\n"), block, dir->i_ino); return 0; } jname = NULL; if (sbi->s_rock && ((i = get_rock_ridge_filename(de, tmpname, dir)))) { dlen = i; /* possibly -1 */ dpnt = tmpname; } else if (sbi->s_joliet_level) { jname = get_joliet_filename(de, dir); } else if (sbi->s_mapping == 'n') { dlen = isofs_name_translate(de, tmpname, dir); dpnt = tmpname; } /* * Skip hidden or associated files unless hide or showassoc, * respectively, is set */ match = 0; if (dlen > 0 && (!sbi->s_hide || (!(de->flags[-sbi->s_high_sierra] & 1))) && (sbi->s_showassoc || (!(de->flags[-sbi->s_high_sierra] & 4)))) { if (jname) match = _tcsicmp(jname, nameu) == 0; else match = isofs_cmp(name, dpnt, dlen) == 0; } xfree (jname); if (match) { isofs_normalize_block_and_offset(de, &block_saved, &offset_saved); struct inode *dinode = isofs_iget(dir->i_sb, block_saved, offset_saved, nameu); iput(dinode); brelse(bh); return dinode; } } brelse(bh); return 0; } /* Acorn extensions written by Matthew Wilcox 1998 */ int get_acorn_filename(struct iso_directory_record *de, char *retname, struct inode *inode) { int std; unsigned char *chr; int retnamlen = isofs_name_translate(de, retname, inode); if (retnamlen == 0) return 0; std = sizeof(struct iso_directory_record) + de->name_len[0]; if (std & 1) std++; if ((*((unsigned char *) de) - std) != 32) return retnamlen; chr = ((unsigned char *) de) + std; if (strncmp((char*)chr, "ARCHIMEDES", 10)) return retnamlen; if ((*retname == '_') && ((chr[19] & 1) == 1)) *retname = '!'; if (((de->flags[0] & 2) == 0) && (chr[13] == 0xff) && ((chr[12] & 0xf0) == 0xf0)) { retname[retnamlen] = ','; sprintf(retname+retnamlen+1, "%3.3x", ((chr[12] & 0xf) << 8) | chr[11]); retnamlen += 4; } return retnamlen; } struct file { uae_u32 f_pos; }; static int do_isofs_readdir(struct inode *inode, struct file *filp, char *tmpname, struct iso_directory_record *tmpde, TCHAR *outname, uae_u64 *uniq) { unsigned long bufsize = ISOFS_BUFFER_SIZE(inode); unsigned char bufbits = ISOFS_BUFFER_BITS(inode); unsigned long block, offset, block_saved, offset_saved; unsigned long inode_number = 0; /* Quiet GCC */ struct buffer_head *bh = NULL; int len; int map; int first_de = 1; char *p = NULL; /* Quiet GCC */ struct iso_directory_record *de; struct isofs_sb_info *sbi = ISOFS_SB(inode->i_sb); struct inode *dinode = NULL; int bh_block = 0; offset = filp->f_pos & (bufsize - 1); block = filp->f_pos >> bufbits; while (filp->f_pos < inode->i_size) { int de_len; if (!bh) { bh = isofs_bread(inode, block); if (!bh) return 0; bh_block = bh->b_blocknr; } de = (struct iso_directory_record *) (bh->b_data + offset); de_len = *(unsigned char *) de; /* * If the length byte is zero, we should move on to the next * CDROM sector. If we are at the end of the directory, we * kick out of the while loop. */ if (de_len == 0) { brelse(bh); bh = NULL; filp->f_pos = (filp->f_pos + ISOFS_BLOCK_SIZE) & ~(ISOFS_BLOCK_SIZE - 1); block = filp->f_pos >> bufbits; offset = 0; continue; } block_saved = block; offset_saved = offset; offset += de_len; /* Make sure we have a full directory entry */ if (offset >= bufsize) { int slop = bufsize - offset + de_len; memcpy(tmpde, de, slop); offset &= bufsize - 1; block++; brelse(bh); bh = NULL; if (offset) { bh = isofs_bread(inode, block); if (!bh) return 0; memcpy((uae_u8*)tmpde + slop, bh->b_data, offset); } de = tmpde; } /* Basic sanity check, whether name doesn't exceed dir entry */ if (de_len < de->name_len[0] + sizeof(struct iso_directory_record)) { write_log (_T("iso9660: Corrupted directory entry in block %lu of inode %u\n"), block, inode->i_ino); return 0; } if (first_de) { isofs_normalize_block_and_offset(de, &block_saved, &offset_saved); inode_number = isofs_get_ino(block_saved, offset_saved, bufbits); } if (de->flags[-sbi->s_high_sierra] & 0x80) { first_de = 0; filp->f_pos += de_len; continue; } first_de = 1; /* Handle the case of the '.' directory */ if (de->name_len[0] == 1 && de->name[0] == 0) { filp->f_pos += de_len; continue; } len = 0; /* Handle the case of the '..' directory */ if (de->name_len[0] == 1 && de->name[0] == 1) { filp->f_pos += de_len; continue; } /* Handle everything else. Do name translation if there is no Rock Ridge NM field. */ /* * Do not report hidden files if so instructed, or associated * files unless instructed to do so */ if ((sbi->s_hide && (de->flags[-sbi->s_high_sierra] & 1)) || (!sbi->s_showassoc && (de->flags[-sbi->s_high_sierra] & 4))) { filp->f_pos += de_len; continue; } map = 1; #if 1 if (sbi->s_rock) { len = get_rock_ridge_filename(de, tmpname, inode); if (len != 0) { /* may be -1 */ p = tmpname; map = 0; } } #endif TCHAR *jname = NULL; if (map) { if (sbi->s_joliet_level) { jname = get_joliet_filename(de, inode); len = 1; } else if (sbi->s_mapping == 'a') { len = get_acorn_filename(de, tmpname, inode); p = tmpname; } else if (sbi->s_mapping == 'n') { len = isofs_name_translate(de, tmpname, inode); p = tmpname; } else { p = de->name; len = de->name_len[0]; } } filp->f_pos += de_len; if (len > 0) { if (jname == NULL) { char t = p[len]; p[len] = 0; au_copy (outname, 1000, p); p[len] = t; } else { _tcscpy (outname, jname); xfree (jname); } dinode = isofs_iget(inode->i_sb, bh_block, offset_saved, outname); iput(dinode); *uniq = dinode->i_ino; brelse(bh); return 1; } continue; } brelse(bh); return 0; } void *isofs_mount(int unitnum, uae_u64 *uniq) { struct super_block *sb; sb = xcalloc(struct super_block, 1); sb->s_blocksize = 2048; sb->s_blocksize_bits = 11; sb->unitnum = unitnum; if (sys_command_ismedia (unitnum, true)) { if (isofs_fill_super(sb, NULL, 0, uniq)) { sb->unknown_media = true; } } return sb; } void isofs_unmount(void *sbp) { struct super_block *sb = (struct super_block*)sbp; struct inode *inode; struct buffer_head *bh; if (!sb) return; write_log (_T("miss: %d hit: %d\n"), sb->hash_miss, sb->hash_hit); inode = sb->inodes; while (inode) { struct inode *next = inode->next; free_inode(inode); inode = next; } bh = sb->buffer_heads; while (bh) { struct buffer_head *next = bh->next; free_bh(bh); bh = next; } xfree (sb); } bool isofs_mediainfo(void *sbp, struct isofs_info *ii) { struct super_block *sb = (struct super_block*)sbp; memset (ii, 0, sizeof (struct isofs_info)); if (!sb) return true; struct isofs_sb_info *sbi = ISOFS_SB(sb); ii->blocksize = 2048; if (sys_command_ismedia (sb->unitnum, true)) { struct device_info di; uae_u32 totalblocks = 0; ii->media = true; di.cylinders = 0; _stprintf (ii->devname, _T("CD%d"), sb->unitnum); if (sys_command_info (sb->unitnum, &di, true)) { totalblocks = di.cylinders * di.sectorspertrack * di.trackspercylinder; _tcscpy (ii->devname, di.label); } ii->unknown_media = sb->unknown_media; if (sb->root) { _tcscpy (ii->volumename, sb->root->name); ii->blocks = sbi->s_max_size; ii->totalblocks = totalblocks ? totalblocks : ii->blocks; ii->creation = sb->root->i_ctime.tv_sec; } if (!ii->volumename[0] || !ii->blocks) ii->unknown_media = true; } return true; } struct cd_opendir_s { struct super_block *sb; struct inode *inode; struct file f; char tmp1[1024]; char tmp2[1024]; }; struct cd_opendir_s *isofs_opendir(void *sb, uae_u64 uniq) { struct cd_opendir_s *od = xcalloc(struct cd_opendir_s, 1); od->sb = (struct super_block*)sb; od->inode = find_inode(od->sb, uniq); if (od->inode) { lock_inode(od->inode); od->f.f_pos = 0; return od; } xfree(od); return NULL; } void isofs_closedir(struct cd_opendir_s *od) { unlock_inode(od->inode); xfree (od); } bool isofs_readdir(struct cd_opendir_s *od, TCHAR *name, uae_u64 *uniq) { return do_isofs_readdir(od->inode, &od->f, od->tmp1, (struct iso_directory_record*)od->tmp2, name, uniq) != 0; } void isofss_fill_file_attrs(void *sbp, uae_u64 parent, int *dir, int *flags, TCHAR **comment, uae_u64 uniq) { struct super_block *sb = (struct super_block*)sbp; struct inode *inode = find_inode(sb, uniq); if (!inode) return; *comment = NULL; *dir = XS_ISDIR(inode->i_mode) ? 1 : 0; if (inode->i_isaflags) *flags = inode->i_aflags; else *flags = 0; if (inode->i_comment) *comment = my_strdup(inode->i_comment); } bool isofs_stat(void *sbp, uae_u64 uniq, struct mystat *statbuf) { struct super_block *sb = (struct super_block*)sbp; struct inode *inode = find_inode(sb, uniq); if (!inode) return false; statbuf->mtime.tv_sec = inode->i_mtime.tv_sec; statbuf->mtime.tv_usec = 0; if (!XS_ISDIR(inode->i_mode)) { statbuf->size = inode->i_size; } return true; } bool isofs_exists(void *sbp, uae_u64 parent, const TCHAR *name, uae_u64 *uniq) { char tmp1[1024]; TCHAR tmp1x[1024]; char tmp2[1024]; char tmp3[1024]; struct super_block *sb = (struct super_block*)sbp; struct inode *inode = find_inode(sb, parent); if (!inode) return false; ua_copy(tmp3, sizeof tmp3, name); inode = isofs_find_entry(inode, tmp1, tmp1x, (struct iso_directory_record*)tmp2, tmp3, name); if (inode) { *uniq = inode->i_ino; return true; } return false; } void isofs_dispose_inode(void *sbp, uae_u64 uniq) { struct super_block *sb = (struct super_block*)sbp; struct inode *inode; struct inode *old = NULL, *prev = NULL; if (!sb) return; inode = sb->inodes; while (inode) { if (inode->i_ino == uniq) { old = inode; break; } prev = inode; inode = inode->next; } if (!old) return; if (prev) prev->next = old->next; else sb->inodes = old->next; free_inode(old); } struct cd_openfile_s { struct super_block *sb; struct inode *inode; uae_u64 seek; }; struct cd_openfile_s *isofs_openfile(void *sbp, uae_u64 uniq, int flags) { struct super_block *sb = (struct super_block*)sbp; struct inode *inode = find_inode(sb, uniq); if (!inode) return NULL; struct cd_openfile_s *of = xcalloc(struct cd_openfile_s, 1); of->sb = sb; of->inode = inode; return of; } void isofs_closefile(struct cd_openfile_s *of) { xfree(of); } uae_s64 isofs_lseek(struct cd_openfile_s *of, uae_s64 offset, int mode) { struct inode *inode = of->inode; int ret = -1; switch (mode) { case SEEK_SET: of->seek = offset; break; case SEEK_CUR: of->seek += offset; break; case SEEK_END: of->seek = inode->i_size + offset; break; } if (of->seek < 0) { of->seek = 0; ret = -1; } else if (of->seek > inode->i_size) { of->seek = inode->i_size; ret = -1; } else { ret = of->seek; } return ret; } uae_s64 isofs_fsize(struct cd_openfile_s *of) { struct inode *inode = of->inode; return inode->i_size; } uae_s64 isofs_read(struct cd_openfile_s *of, void *bp, unsigned int size) { struct inode *inode = of->inode; uae_u32 bufsize = ISOFS_BUFFER_SIZE(inode); uae_u32 bufmask = bufsize - 1; uae_s64 offset = of->seek; struct buffer_head *bh; uae_u64 totalread = 0; uae_u32 read; uae_u8 *b = (uae_u8*)bp; if (size + of->seek > inode->i_size) size = inode->i_size - of->seek; // first partial sector if (offset & bufmask) { bh = isofs_bread(inode, offset / bufsize); if (!bh) return 0; read = size < (bufsize - (offset & bufmask)) ? size : (bufsize - (offset & bufmask)); memcpy (b, bh->b_data + (offset & bufmask), read); offset += read; size -= read; totalread += read; b += read; of->seek += read; brelse(bh); } // complete sector(s) while (size >= bufsize) { bh = isofs_bread(inode, offset / bufsize); if (!bh) return totalread; read = size < bufsize ? size : bufsize; memcpy (b, bh->b_data, read); offset += read; size -= read; totalread += read; b += read; of->seek += read; brelse(bh); } // and finally last partial sector if (size > 0) { bh = isofs_bread(inode, offset / bufsize); if (!bh) return totalread; read = size; memcpy (b, bh->b_data, size); totalread += read; of->seek += read; brelse(bh); } return totalread; } fs-uae-2.2.3+dfsg/src/uaeserial.cpp0000644000175000017500000005101212162366655017321 0ustar glaubitzglaubitz/* * UAE - The Un*x Amiga Emulator * * uaeserial.device * * Copyright 2004/2006 Toni Wilen * */ #include "sysconfig.h" #include "sysdeps.h" #include "threaddep/thread.h" #include "options.h" #include "uae/memory.h" #include "custom.h" #include "newcpu.h" #include "traps.h" #include "autoconf.h" #include "execlib.h" #include "native2amiga.h" #include "uaeserial.h" #include "serial.h" #include "execio.h" #define MAX_TOTAL_DEVICES 8 #ifdef FSUAE int log_uaeserial = 1; #else int log_uaeserial = 0; #endif #define SDCMD_QUERY 9 #define SDCMD_BREAK 10 #define SDCMD_SETPARAMS 11 #define SerErr_DevBusy 1 #define SerErr_BaudMismatch 2 #define SerErr_BufErr 4 #define SerErr_InvParam 5 #define SerErr_LineErr 6 #define SerErr_ParityErr 9 #define SerErr_TimerErr 11 #define SerErr_BufOverflow 12 #define SerErr_NoDSR 13 #define SerErr_DetectedBreak 15 #define SERB_XDISABLED 7 /* io_SerFlags xOn-xOff feature disabled bit */ #define SERF_XDISABLED (1<<7) /* " xOn-xOff feature disabled mask */ #define SERB_EOFMODE 6 /* " EOF mode enabled bit */ #define SERF_EOFMODE (1<<6) /* " EOF mode enabled mask */ #define SERB_SHARED 5 /* " non-exclusive access bit */ #define SERF_SHARED (1<<5) /* " non-exclusive access mask */ #define SERB_RAD_BOOGIE 4 /* " high-speed mode active bit */ #define SERF_RAD_BOOGIE (1<<4) /* " high-speed mode active mask */ #define SERB_QUEUEDBRK 3 /* " queue this Break ioRqst */ #define SERF_QUEUEDBRK (1<<3) /* " queue this Break ioRqst */ #define SERB_7WIRE 2 /* " RS232 7-wire protocol */ #define SERF_7WIRE (1<<2) /* " RS232 7-wire protocol */ #define SERB_PARTY_ODD 1 /* " parity feature enabled bit */ #define SERF_PARTY_ODD (1<<1) /* " parity feature enabled mask */ #define SERB_PARTY_ON 0 /* " parity-enabled bit */ #define SERF_PARTY_ON (1<<0) /* " parity-enabled mask */ #define IO_STATB_XOFFREAD 12 /* io_Status receive currently xOFF'ed bit */ #define IO_STATF_XOFFREAD (1<<12) /* " receive currently xOFF'ed mask */ #define IO_STATB_XOFFWRITE 11 /* " transmit currently xOFF'ed bit */ #define IO_STATF_XOFFWRITE (1<<11) /* " transmit currently xOFF'ed mask */ #define IO_STATB_READBREAK 10 /* " break was latest input bit */ #define IO_STATF_READBREAK (1<<10) /* " break was latest input mask */ #define IO_STATB_WROTEBREAK 9 /* " break was latest output bit */ #define IO_STATF_WROTEBREAK (1<<9) /* " break was latest output mask */ #define IO_STATB_OVERRUN 8 /* " status word RBF overrun bit */ #define IO_STATF_OVERRUN (1<<8) /* " status word RBF overrun mask */ #define io_CtlChar 0x30 /* ULONG control char's (order = xON,xOFF,INQ,ACK) */ #define io_RBufLen 0x34 /* ULONG length in bytes of serial port's read buffer */ #define io_ExtFlags 0x38 /* ULONG additional serial flags (see bitdefs below) */ #define io_Baud 0x3c /* ULONG baud rate requested (true baud) */ #define io_BrkTime 0x40 /* ULONG duration of break signal in MICROseconds */ #define io_TermArray0 0x44 /* ULONG termination character array */ #define io_TermArray1 0x48 /* ULONG termination character array */ #define io_ReadLen 0x4c /* UBYTE bits per read character (# of bits) */ #define io_WriteLen 0x4d /* UBYTE bits per write character (# of bits) */ #define io_StopBits 0x4e /* UBYTE stopbits for read (# of bits) */ #define io_SerFlags 0x4f /* UBYTE see SerFlags bit definitions below */ #define io_Status 0x50 /* UWORD */ /* status of serial port, as follows: * BIT ACTIVE FUNCTION * 0 --- reserved * 1 --- reserved * 2 high Connected to parallel "select" on the A1000. * Connected to both the parallel "select" and * serial "ring indicator" pins on the A500 * & A2000. Take care when making cables. * 3 low Data Set Ready * 4 low Clear To Send * 5 low Carrier Detect * 6 low Ready To Send * 7 low Data Terminal Ready * 8 high read overrun * 9 high break sent * 10 high break received * 11 high transmit x-OFFed * 12 high receive x-OFFed * 13-15 reserved */ struct asyncreq { struct asyncreq *next; uaecptr request; int ready; }; struct devstruct { int open; int unit; int uniq; int exclusive; struct asyncreq *ar; smp_comm_pipe requests; int thread_running; uae_sem_t sync_sem; void *sysdata; }; static int uniq; static uae_u32 nscmd_cmd; static struct devstruct devst[MAX_TOTAL_DEVICES]; static uae_sem_t change_sem, async_sem; static TCHAR *getdevname (void) { return _T("uaeserial.device"); } static void io_log (TCHAR *msg, uaecptr request) { if (log_uaeserial) write_log (_T("%s: %08X %d %08X %d %d io_actual=%d io_error=%d\n"), msg, request, get_word (request + 28), get_long (request + 40), get_long (request + 36), get_long (request + 44), get_long (request + 32), get_byte (request + 31)); } static struct devstruct *getdevstruct (int uniq) { int i; for (i = 0; i < MAX_TOTAL_DEVICES; i++) { if (devst[i].uniq == uniq) return &devst[i]; } return 0; } static void *dev_thread (void *devs); static int start_thread (struct devstruct *dev) { init_comm_pipe (&dev->requests, 100, 1); uae_sem_init (&dev->sync_sem, 0, 0); uae_start_thread (_T("uaeserial"), dev_thread, dev, NULL); uae_sem_wait (&dev->sync_sem); return dev->thread_running; } static void dev_close_3 (struct devstruct *dev) { uaeser_close (dev->sysdata); dev->open = 0; xfree (dev->sysdata); write_comm_pipe_u32 (&dev->requests, 0, 1); } static uae_u32 REGPARAM2 dev_close (TrapContext *context) { uae_u32 request = m68k_areg (regs, 1); struct devstruct *dev; dev = getdevstruct (get_long (request + 24)); if (!dev) return 0; if (log_uaeserial) write_log (_T("%s:%d close, req=%x\n"), getdevname(), dev->unit, request); dev_close_3 (dev); put_long (request + 24, 0); put_word (m68k_areg (regs, 6) + 32, get_word (m68k_areg (regs, 6) + 32) - 1); return 0; } static void resetparams (struct devstruct *dev, uaecptr req) { put_long (req + io_CtlChar, 0x00001311); put_long (req + io_RBufLen, 1024); put_long (req + io_ExtFlags, 0); put_long (req + io_Baud, 9600); put_long (req + io_BrkTime, 250000); put_long (req + io_TermArray0, 0); put_long (req + io_TermArray1, 0); put_byte (req + io_ReadLen, 8); put_byte (req + io_WriteLen, 8); put_byte (req + io_StopBits, 1); put_byte (req + io_SerFlags, get_byte (req + io_SerFlags) & (SERF_XDISABLED | SERF_SHARED | SERF_7WIRE)); put_word (req + io_Status, 0); } static int setparams (struct devstruct *dev, uaecptr req) { int v; int rbuffer, baud, rbits, wbits, sbits, rtscts, parity, xonxoff; rbuffer = get_long (req + io_RBufLen); v = get_long (req + io_ExtFlags); if (v) { write_log (_T("UAESER: io_ExtFlags=%08x, not supported\n"), v); return 5; } baud = get_long (req + io_Baud); v = get_byte (req + io_SerFlags); if (v & SERF_EOFMODE) { write_log (_T("UAESER: SERF_EOFMODE not supported\n")); return 5; } xonxoff = (v & SERF_XDISABLED) ? 0 : 1; if (xonxoff) { xonxoff |= (get_long (req + io_CtlChar) << 8) & 0x00ffff00; } rtscts = (v & SERF_7WIRE) ? 1 : 0; parity = 0; if (v & SERF_PARTY_ON) parity = (v & SERF_PARTY_ODD) ? 1 : 2; rbits = get_byte (req + io_ReadLen); wbits = get_byte (req + io_WriteLen); sbits = get_byte (req + io_StopBits); if ((rbits != 7 && rbits != 8) || (wbits != 7 && wbits != 8) || (sbits != 1 && sbits != 2) || rbits != wbits) { write_log (_T("UAESER: Read=%d, Write=%d, Stop=%d, not supported\n"), rbits, wbits, sbits); return 5; } write_log (_T("%s:%d BAUD=%d BUF=%d BITS=%d+%d RTSCTS=%d PAR=%d XO=%06X\n"), getdevname(), dev->unit, baud, rbuffer, rbits, sbits, rtscts, parity, xonxoff); v = uaeser_setparams (dev->sysdata, baud, rbuffer, rbits, sbits, rtscts, parity, xonxoff); if (v) { write_log (_T("->failed\n")); return v; } return 0; } static int openfail (uaecptr ioreq, int error) { put_long (ioreq + 20, -1); put_byte (ioreq + 31, error); return (uae_u32)-1; } static uae_u32 REGPARAM2 dev_open (TrapContext *context) { uaecptr ioreq = m68k_areg (regs, 1); uae_u32 unit = m68k_dreg (regs, 0); uae_u32 flags = m68k_dreg (regs, 1); struct devstruct *dev; int i, err; if (get_word (ioreq + 0x12) < IOSTDREQ_SIZE) return openfail (ioreq, IOERR_BADLENGTH); for (i = 0; i < MAX_TOTAL_DEVICES; i++) { if (devst[i].open && devst[i].unit == unit && devst[i].exclusive) return openfail (ioreq, IOERR_UNITBUSY); } for (i = 0; i < MAX_TOTAL_DEVICES; i++) { if (!devst[i].open) break; } if (i == MAX_TOTAL_DEVICES) return openfail (ioreq, IOERR_OPENFAIL); dev = &devst[i]; dev->sysdata = xcalloc (uae_u8, uaeser_getdatalenght ()); if (!uaeser_open (dev->sysdata, dev, unit)) { xfree (dev->sysdata); return openfail (ioreq, IOERR_OPENFAIL); } dev->unit = unit; dev->open = 1; dev->uniq = ++uniq; dev->exclusive = (get_word (ioreq + io_SerFlags) & SERF_SHARED) ? 0 : 1; put_long (ioreq + 24, dev->uniq); resetparams (dev, ioreq); err = setparams (dev, ioreq); if (err) { uaeser_close (dev->sysdata); dev->open = 0; xfree (dev->sysdata); return openfail (ioreq, err); } if (log_uaeserial) write_log (_T("%s:%d open ioreq=%08X\n"), getdevname(), unit, ioreq); start_thread (dev); put_word (m68k_areg (regs, 6) + 32, get_word (m68k_areg (regs, 6) + 32) + 1); put_byte (ioreq + 31, 0); put_byte (ioreq + 8, 7); return 0; } static uae_u32 REGPARAM2 dev_expunge (TrapContext *context) { return 0; } static struct asyncreq *get_async_request (struct devstruct *dev, uaecptr request, int ready) { struct asyncreq *ar; int ret = 0; uae_sem_wait (&async_sem); ar = dev->ar; while (ar) { if (ar->request == request) { if (ready) ar->ready = 1; break; } ar = ar->next; } uae_sem_post (&async_sem); return ar; } static int add_async_request (struct devstruct *dev, uaecptr request) { struct asyncreq *ar, *ar2; if (log_uaeserial) write_log (_T("%s:%d async request %x added\n"), getdevname(), dev->unit, request); uae_sem_wait (&async_sem); ar = xcalloc (struct asyncreq, 1); ar->request = request; if (!dev->ar) { dev->ar = ar; } else { ar2 = dev->ar; while (ar2->next) ar2 = ar2->next; ar2->next = ar; } uae_sem_post (&async_sem); return 1; } static int release_async_request (struct devstruct *dev, uaecptr request) { struct asyncreq *ar, *prevar; uae_sem_wait (&async_sem); ar = dev->ar; prevar = NULL; while (ar) { if (ar->request == request) { if (prevar == NULL) dev->ar = ar->next; else prevar->next = ar->next; uae_sem_post (&async_sem); xfree (ar); if (log_uaeserial) write_log (_T("%s:%d async request %x removed\n"), getdevname(), dev->unit, request); return 1; } prevar = ar; ar = ar->next; } uae_sem_post (&async_sem); write_log (_T("%s:%d async request %x not found for removal!\n"), getdevname(), dev->unit, request); return 0; } static void abort_async (struct devstruct *dev, uaecptr request) { struct asyncreq *ar = get_async_request (dev, request, 1); if (!ar) { write_log (_T("%s:%d: abort async but no request %x found!\n"), getdevname(), dev->unit, request); return; } if (log_uaeserial) write_log (_T("%s:%d asyncronous request=%08X aborted\n"), getdevname(), dev->unit, request); put_byte (request + 31, IOERR_ABORTED); put_byte (request + 30, get_byte (request + 30) | 0x20); write_comm_pipe_u32 (&dev->requests, request, 1); } static uae_u8 *memmap(uae_u32 addr, uae_u32 len) { addrbank *bank_data = &get_mem_bank (addr); if (!bank_data->check (addr, len)) return NULL; return bank_data->xlateaddr (addr); } void uaeser_signal (void *vdev, int sigmask) { struct devstruct *dev = (struct devstruct*)vdev; struct asyncreq *ar; int i = 0; uae_sem_wait (&async_sem); ar = dev->ar; while (ar) { if (!ar->ready) { uaecptr request = ar->request; uae_u32 io_data = get_long (request + 40); // 0x28 uae_u32 io_length = get_long (request + 36); // 0x24 int command = get_word (request + 28); uae_u32 io_error = 0, io_actual = 0; uae_u8 *addr; int io_done = 0; switch (command) { case SDCMD_BREAK: if (ar == dev->ar) { uaeser_break (dev->sysdata, get_long (request + io_BrkTime)); io_done = 1; } break; case CMD_READ: if (sigmask & 1) { addr = memmap(io_data, io_length); if (addr) { if (uaeser_read (dev->sysdata, addr, io_length)) { io_error = 0; io_actual = io_length; io_done = 1; } } else { io_error = IOERR_BADADDRESS; io_done = 1; } } break; case CMD_WRITE: if (sigmask & 2) { io_error = IOERR_BADADDRESS; addr = memmap(io_data, io_length); if (addr && uaeser_write (dev->sysdata, addr, io_length)) io_error = 0; io_actual = io_length; io_done = 1; } break; default: write_log (_T("%s:%d incorrect async request %x (cmd=%d) signaled?!"), getdevname(), dev->unit, request, command); break; } if (io_done) { if (log_uaeserial) write_log (_T("%s:%d async request %x completed\n"), getdevname(), dev->unit, request); put_long (request + 32, io_actual); put_byte (request + 31, io_error); ar->ready = 1; write_comm_pipe_u32 (&dev->requests, request, 1); } } ar = ar->next; } uae_sem_post (&async_sem); } static void cmd_reset(struct devstruct *dev, uaecptr req) { while (dev->ar) abort_async (dev, dev->ar->request); put_long (req + io_RBufLen, 8192); put_long (req + io_ExtFlags, 0); put_long (req + io_Baud, 57600); put_long (req + io_BrkTime, 250000); put_long (req + io_TermArray0, 0); put_long (req + io_TermArray1, 0); put_long (req + io_ReadLen, 8); put_long (req + io_WriteLen, 8); put_long (req + io_StopBits, 1); put_long (req + io_SerFlags, SERF_XDISABLED); put_word (req + io_Status, 0); } static int dev_do_io (struct devstruct *dev, uaecptr request, int quick) { uae_u32 command; uae_u32 io_data = get_long (request + 40); // 0x28 uae_u32 io_length = get_long (request + 36); // 0x24 uae_u32 io_actual = get_long (request + 32); // 0x20 uae_u32 io_offset = get_long (request + 44); // 0x2c uae_u32 io_error = 0; uae_u16 io_status; int async = 0; if (!dev) return 0; command = get_word (request + 28); io_log (_T("dev_io_START"),request); switch (command) { case SDCMD_QUERY: if (uaeser_query (dev->sysdata, &io_status, &io_actual)) put_byte (request + io_Status, io_status); else io_error = IOERR_BADADDRESS; break; case SDCMD_SETPARAMS: io_error = setparams(dev, request); break; case CMD_WRITE: async = 1; break; case CMD_READ: async = 1; break; case SDCMD_BREAK: if (get_byte (request + io_SerFlags) & SERF_QUEUEDBRK) { async = 1; } else { uaeser_break (dev->sysdata, get_long (request + io_BrkTime)); } break; case CMD_CLEAR: uaeser_clearbuffers(dev->sysdata); break; case CMD_RESET: cmd_reset(dev, request); break; case CMD_FLUSH: case CMD_START: case CMD_STOP: break; case NSCMD_DEVICEQUERY: put_long (io_data + 0, 0); put_long (io_data + 4, 16); /* size */ put_word (io_data + 8, NSDEVTYPE_SERIAL); put_word (io_data + 10, 0); put_long (io_data + 12, nscmd_cmd); io_actual = 16; break; default: io_error = IOERR_NOCMD; break; } put_long (request + 32, io_actual); put_byte (request + 31, io_error); io_log (_T("dev_io_END"),request); return async; } static int dev_canquick (struct devstruct *dev, uaecptr request) { return 0; } static uae_u32 REGPARAM2 dev_beginio (TrapContext *context) { uae_u32 request = m68k_areg (regs, 1); uae_u8 flags = get_byte (request + 30); int command = get_word (request + 28); struct devstruct *dev = getdevstruct (get_long (request + 24)); put_byte (request + 8, NT_MESSAGE); if (!dev) { put_byte (request + 31, 32); return get_byte (request + 31); } put_byte (request + 31, 0); if ((flags & 1) && dev_canquick (dev, request)) { if (dev_do_io (dev, request, 1)) write_log (_T("device %s:%d command %d bug with IO_QUICK\n"), getdevname(), dev->unit, command); return get_byte (request + 31); } else { put_byte (request + 30, get_byte (request + 30) & ~1); write_comm_pipe_u32 (&dev->requests, request, 1); return 0; } } static void *dev_thread (void *devs) { struct devstruct *dev = (struct devstruct*)devs; uae_set_thread_priority (NULL, 1); dev->thread_running = 1; uae_sem_post (&dev->sync_sem); for (;;) { uaecptr request = (uaecptr)read_comm_pipe_u32_blocking (&dev->requests); uae_sem_wait (&change_sem); if (!request) { dev->thread_running = 0; uae_sem_post (&dev->sync_sem); uae_sem_post (&change_sem); return 0; } else if (get_async_request (dev, request, 1)) { uae_ReplyMsg (request); release_async_request (dev, request); } else if (dev_do_io (dev, request, 0) == 0) { uae_ReplyMsg (request); } else { add_async_request (dev, request); uaeser_trigger (dev->sysdata); } uae_sem_post (&change_sem); } return 0; } static uae_u32 REGPARAM2 dev_init (TrapContext *context) { uae_u32 base = m68k_dreg (regs, 0); if (log_uaeserial) write_log (_T("%s init\n"), getdevname ()); return base; } static uae_u32 REGPARAM2 dev_abortio (TrapContext *context) { uae_u32 request = m68k_areg (regs, 1); struct devstruct *dev = getdevstruct (get_long (request + 24)); if (!dev) { put_byte (request + 31, 32); return get_byte (request + 31); } abort_async (dev, request); return 0; } static void dev_reset (void) { int i; struct devstruct *dev; for (i = 0; i < MAX_TOTAL_DEVICES; i++) { dev = &devst[i]; if (dev->open) { while (dev->ar) abort_async (dev, dev->ar->request); dev_close_3 (dev); uae_sem_wait (&dev->sync_sem); } memset (dev, 0, sizeof (struct devstruct)); } } static uaecptr ROM_uaeserialdev_resname = 0, ROM_uaeserialdev_resid = 0, ROM_uaeserialdev_init = 0; uaecptr uaeserialdev_startup (uaecptr resaddr) { if (!currprefs.uaeserial) return resaddr; if (log_uaeserial) write_log (_T("uaeserialdev_startup(0x%x)\n"), resaddr); /* Build a struct Resident. This will set up and initialize * the serial.device */ put_word (resaddr + 0x0, 0x4AFC); put_long (resaddr + 0x2, resaddr); put_long (resaddr + 0x6, resaddr + 0x1A); /* Continue scan here */ put_word (resaddr + 0xA, 0x8101); /* RTF_AUTOINIT|RTF_COLDSTART; Version 1 */ put_word (resaddr + 0xC, 0x0305); /* NT_DEVICE; pri 05 */ put_long (resaddr + 0xE, ROM_uaeserialdev_resname); put_long (resaddr + 0x12, ROM_uaeserialdev_resid); put_long (resaddr + 0x16, ROM_uaeserialdev_init); resaddr += 0x1A; return resaddr; } void uaeserialdev_install (void) { uae_u32 functable, datatable; uae_u32 initcode, openfunc, closefunc, expungefunc; uae_u32 beginiofunc, abortiofunc; if (!currprefs.uaeserial) return; ROM_uaeserialdev_resname = ds (_T("uaeserial.device")); ROM_uaeserialdev_resid = ds (_T("UAE serial.device 0.1")); /* initcode */ initcode = here (); calltrap (deftrap (dev_init)); dw (RTS); /* Open */ openfunc = here (); calltrap (deftrap (dev_open)); dw (RTS); /* Close */ closefunc = here (); calltrap (deftrap (dev_close)); dw (RTS); /* Expunge */ expungefunc = here (); calltrap (deftrap (dev_expunge)); dw (RTS); /* BeginIO */ beginiofunc = here (); calltrap (deftrap (dev_beginio)); dw (RTS); /* AbortIO */ abortiofunc = here (); calltrap (deftrap (dev_abortio)); dw (RTS); /* FuncTable */ functable = here (); dl (openfunc); /* Open */ dl (closefunc); /* Close */ dl (expungefunc); /* Expunge */ dl (EXPANSION_nullfunc); /* Null */ dl (beginiofunc); /* BeginIO */ dl (abortiofunc); /* AbortIO */ dl (0xFFFFFFFFul); /* end of table */ /* DataTable */ datatable = here (); dw (0xE000); /* INITBYTE */ dw (0x0008); /* LN_TYPE */ dw (0x0300); /* NT_DEVICE */ dw (0xC000); /* INITLONG */ dw (0x000A); /* LN_NAME */ dl (ROM_uaeserialdev_resname); dw (0xE000); /* INITBYTE */ dw (0x000E); /* LIB_FLAGS */ dw (0x0600); /* LIBF_SUMUSED | LIBF_CHANGED */ dw (0xD000); /* INITWORD */ dw (0x0014); /* LIB_VERSION */ dw (0x0004); /* 0.4 */ dw (0xD000); /* INITWORD */ dw (0x0016); /* LIB_REVISION */ dw (0x0000); dw (0xC000); /* INITLONG */ dw (0x0018); /* LIB_IDSTRING */ dl (ROM_uaeserialdev_resid); dw (0x0000); /* end of table */ ROM_uaeserialdev_init = here (); dl (0x00000100); /* size of device base */ dl (functable); dl (datatable); dl (initcode); nscmd_cmd = here (); dw (NSCMD_DEVICEQUERY); dw (CMD_RESET); dw (CMD_READ); dw (CMD_WRITE); dw (CMD_CLEAR); dw (CMD_START); dw (CMD_STOP); dw (CMD_FLUSH); dw (SDCMD_BREAK); dw (SDCMD_SETPARAMS); dw (SDCMD_QUERY); dw (0); } void uaeserialdev_start_threads (void) { uae_sem_init (&change_sem, 0, 1); uae_sem_init (&async_sem, 0, 1); } void uaeserialdev_reset (void) { if (!currprefs.uaeserial) return; dev_reset (); } fs-uae-2.2.3+dfsg/src/rpc.cpp0000644000175000017500000003054112162366655016137 0ustar glaubitzglaubitz /* * UAE - The Un*x Amiga Emulator * * RiscPC Interface. * * (c) 1995 Bernd Schmidt * (c) 1996 Gustavo Goedert */ #include "sysconfig.h" #include "sysdeps.h" #include "config.h" #include "options.h" #include "threaddep/thread.h" #include "uae/memory.h" #include "custom.h" #include "keyboard.h" #include "xwin.h" #include "keybuf.h" #include "gui.h" typedef char flagtype; extern struct regstruct { ULONG regs[16]; CPTR usp,isp,msp; UWORD sr; flagtype t1; flagtype t0; flagtype s; flagtype m; flagtype x; flagtype stopped; int intmask; ULONG pc; #ifdef USE_POINTER UBYTE *pc_p; UBYTE *pc_oldp; #endif ULONG vbr,sfc,dfc; double fp[8]; ULONG fpcr,fpsr,fpiar; ULONG spcflags; ULONG kick_mask; } regs; #include "OS:wimp.h" #include "OS:font.h" #include "OS:os.h" #include "OS:osbyte.h" #include "OS:osword.h" #include "OS:sound.h" void gui_process(void); #define A_base 0x300000 #define A_switch (A_base+0) #define A_disk (A_base+1) #define A_sonst (A_base+5) #define A_hf (A_base+6) #define A_mount (A_base+7) #define A_rom (A_base+10) #define A_uaeask (A_base+11) int quit_program; int uae_running; int uae_startedup; wimp_MESSAGE_LIST(13) messages= {A_switch, A_disk, A_disk+1, A_disk+2, A_disk+3, A_sonst, A_rom, A_mount, A_mount+1, A_mount+2, A_uaeask, message_PREQUIT, 0}; wimp_t taskhandle; wimp_t frontendhandle; wimp_block block; wimp_message mblock; int pollword; os_MODE_SELECTOR(3) uaemode={1,0,0,0,-1,0,128,3,255,-1,0}; os_MODE_SELECTOR(3) wimpmode; extern void datavox_type(int channel, int type); extern void datavox_timed(int channel, int timed); extern void datavox_pitch(int channel, int pitch); extern void datavox_set_memory(int channel, char *start, char *end); extern void datavox_set_repeat(int channel, char *start, char *end); extern int datavox_allocate_channel(int key); extern void datavox_de_allocate_channel(int channel, int key); int sratecode; char sbuffer[44100]; int deskvoice, uaechannel; extern int uaedevfd, numtracks; char mountpoint[64]; char mountdir[256]; char *scr; int screenrowbytes,screenrows; char pressed[128]; char translate[128]= { 255, 255, 255, AK_LSH, AK_CTRL, AK_LALT, AK_RSH, AK_CTRL, //0 AK_RALT, 255, 255, 255, 255, 255, 255, 255, //8 AK_Q, AK_3, AK_4, AK_5, AK_F4, AK_8, AK_F7, AK_MINUS, //16 255, AK_LF, AK_NP6, AK_NP7, 255, 255, AK_F10, 255, //24 255, AK_W, AK_E, AK_T, AK_7, AK_I, AK_9, AK_0, //32 255, AK_DN, AK_NP8, AK_NP9, 255,AK_BACKQUOTE, AK_LTGT, AK_BS, //40 AK_1, AK_2, AK_D, AK_R, AK_6, AK_U, AK_O, AK_P, //48 AK_LBRACKET, AK_UP,AK_NPADD,AK_NPSUB, AK_ENT, 255, 255, AK_RAMI, //56 AK_CAPSLOCK, AK_A, AK_X, AK_F, AK_Y, AK_J, AK_K, 255, //64 255, AK_RET,AK_NPDIV, 255,AK_NPDEL, 255, AK_LAMI, AK_QUOTE, //72 255, AK_S, AK_C, AK_G, AK_H, AK_N, AK_L,AK_SEMICOLON, //80 AK_RBRACKET, AK_DEL, 255,AK_NPMUL, 255, AK_EQUAL, AK_LTGT, 255, //88 AK_TAB, AK_Z, AK_SPC, AK_V, AK_B, AK_M,AK_COMMA, AK_PERIOD, //96 AK_SLASH,AK_HELP, AK_NP0, AK_NP1, AK_NP3, 255, 255, 255, //104 255, AK_F1, AK_F2, AK_F3, AK_F5, AK_F6, AK_F8, AK_F9, //112 AK_BACKSLASH, AK_RT, AK_NP4, AK_NP5, AK_NP2, 255, 255, 255};//120 char dn0[256], dn1[256], dn2[256], dn3[256]; int dc0=0, dc1=0, dc2=0, dc3=0; /***************************************************************************/ void setup_brkhandler(void) { } void flush_line(int y) { } void flush_block(int a, int b) { } void flush_screen(int a, int b) { } void calc_adjustment(void) { } static int colors_allocated; static int get_color(int r, int g, int b, xcolnr *cnp) { if (colors_allocated == 256) return -1; *cnp = colors_allocated; os_writec(19); os_writec(colors_allocated); os_writec(16); os_writec(r+(r<<4)); os_writec(g+(g<<4)); os_writec(b+(b<<4)); colors_allocated++; return 1; } static void init_colors(void) { int rw = 5, gw = 5, bw = 5; colors_allocated = 0; if (gfxvidinfo.pixbytes == 2) alloc_colors64k(rw, gw, bw, 0, rw, rw+gw); else alloc_colors256(get_color); } void sound_output(char *b, int l) { memcpy(sbuffer, b, l); datavox_set_memory(uaechannel, sbuffer, sbuffer+l); datavox_set_repeat(uaechannel, sbuffer, sbuffer+l); datavox_type(uaechannel, 1); datavox_pitch(uaechannel, sratecode); sound_control(uaechannel, 256+127, 0, 255); } void init_mouse(void) { oswordpointer_bbox_block bbox; bbox.op=oswordpointer_OP_SET_BBOX; bbox.x0=-32768; bbox.y0=-32768; bbox.x1=32767; bbox.y1=32767; oswordpointer_set_bbox(&bbox); } void setwimpmode(void) { wimp_set_mode(&wimpmode); while(osbyte2(145,0,0)!=0); } void setuaemode(void) { os_vdu_var_list varlist[2]={149,-1}; int valuelist[1]; os_mode m; m=osscreenmode_current(); memcpy(&wimpmode, m, os_SIZEOF_MODE_SELECTOR(3)); osscreenmode_select(&uaemode); os_read_vdu_variables(varlist, valuelist); scr=(void *)valuelist[0]; gfxvidinfo.bufmem=scr; os_remove_cursors(); init_colors(); init_mouse(); flush_block(0, numscrlines-1); } void setwimpsound(void) { int s,t; sound_attach_voice(uaechannel, deskvoice, &s, &t); datavox_de_allocate_channel(uaechannel, taskhandle); } void setuaesound(void) { int s; sound_volume(127); uaechannel=datavox_allocate_channel(taskhandle); printf("%d\n", uaechannel); sound_attach_voice(uaechannel, 0, &s, &deskvoice); sound_attach_named_voice(uaechannel, "DataVox-Voice"); } int graphics_init(void) { __uname_control=6; switch(color_mode) { case 1: case 2: case 5: uaemode.log2_bpp=4; gfxvidinfo.pixbytes=2; break; default: uaemode.log2_bpp=3; gfxvidinfo.pixbytes=1; break; } uaemode.xres=gfx_requested_width; uaemode.yres=gfx_requested_height; gfxvidinfo.rowbytes=gfx_requested_width*gfxvidinfo.pixbytes; gfxvidinfo.maxlinetoscr=gfx_requested_width; gfxvidinfo.maxline=gfx_requested_height; gfxvidinfo.maxblocklines=0; setuaemode(); setuaesound(); return 1; } void graphics_leave(void) { } void readmouse(void) { int x,y; bits buttons; os_t t; os_mouse(&x, &y, &buttons, &t); lastmx=x>>1; lastmy=gfx_requested_height-(y>>1); buttonstate[0]=(buttons & 4)>>2; buttonstate[1]=(buttons & 2)>>1; buttonstate[2]=buttons & 1; newmousecounters=0; } void processkey(char k, char release) { if(k==29 && release==1) { uae_running=0; setwimpmode(); setwimpsound(); } if(translate[k]!=255) record_key((translate[k]<<1)+release); } void readkeyboard(void) { char c,l,k,q; for(l=0, k=osbyte1(121, 0, 0), q=0; !q; l=k+1, k=osbyte1(121, l, 0)) { if(k==0xff) { k=128; q=1; } else { if(pressed[k]==0) { if (translate[k]!=0) processkey(k, 0); pressed[k]=1; } } for(c=l; c1) dc0--; if(dc1>1) dc1--; if(dc2>1) dc2--; if(dc3>1) dc3--; if (uae_running==0) gui_process(); } int debuggable(void) { return 0; } int needmousehack(void) { return 0; } void LED(int on) { } static void sigchldhandler(int foo) { } /***************************************************************************/ int gui_init(void) { int vout; quit_program=0; uae_running=0; uae_startedup=0; taskhandle=wimp_initialise(wimp_VERSION_RO35, "UAE", &messages, &vout); gui_process(); return 0; } void changedisk(int n, char *f) { if(uae_startedup) { switch(n) { case 0: if(strcmp(df0, f)!=0) { strncpy(dn0, f, 255); dc0=3; disk_eject(0); strncpy(df0, "", 255); } break; case 1: if(strcmp(df1, f)!=0) { strncpy(dn1, f, 255); dc1=3; disk_eject(1); strncpy(df1, "", 255); } break; case 2: if(strcmp(df2, f)!=0) { strncpy(dn2, f, 255); dc2=3; disk_eject(2); strncpy(df2, "", 255); } break; case 3: if(strcmp(df3, f)!=0) { strncpy(dn3, f, 255); dc3=3; disk_eject(3); strncpy(df3, "", 255); } break; } } else { switch(n) { case 0: strncpy(df0, f, 255); break; case 1: strncpy(df1, f, 255); break; case 2: strncpy(df2, f, 255); break; case 3: strncpy(df3, f, 255); break; } } } void setsonst(int *reserved) { if(!uae_startedup) { gfx_requested_width=reserved[0]; gfx_requested_xcenter=reserved[1]; gfx_requested_lores=reserved[2]; gfx_requested_height=reserved[3]; gfx_requested_ycenter=reserved[4]; gfx_requested_linedbl=reserved[5]; gfx_requested_correct_aspect=reserved[6]; switch(reserved[7]) { case 256: color_mode=0; break; case 32768: color_mode=1; break; } framerate=reserved[8]; emul_accuracy=reserved[9]; blits_32bit_enabled=reserved[10]; immediate_blits=reserved[11]; fake_joystick=reserved[12]; bogomem_size=reserved[14]; chipmem_size=reserved[15]; fastmem_size=reserved[16]; produce_sound=reserved[17]; sound_desired_freq=reserved[18]; sound_desired_bsiz=reserved[19]; } } void sendtofront(int *reserved) { int *words=mblock.data.reserved; mblock.size=256; mblock.sender=taskhandle; mblock.my_ref=778; mblock.your_ref=777; switch(*reserved) { case 0: mblock.action=A_disk; if(dc0==0) strncpy(words, df0, 235); else strncpy(words, dn0, 235); break; case 1: mblock.action=A_disk+1; if(dc0==0) strncpy(words, df1, 235); else strncpy(words, dn1, 235); break; case 2: mblock.action=A_disk+2; if(dc0==0) strncpy(words, df2, 235); else strncpy(words, dn2, 235); break; case 3: mblock.action=A_disk+3; if(dc0==0) strncpy(words, df3, 235); else strncpy(words, dn3, 235); break; } wimp_send_message(wimp_USER_MESSAGE, &mblock, frontendhandle); } void gui_messagereceive(void) { switch(block.message.action) { case message_QUIT: if(uae_startedup) { set_special (SPCFLAG_BRK); quit_program=1; uae_running=1; } else { if(uaedevfd!=-1) { close(uaedevfd); } wimp_close_down(taskhandle); } break; case A_switch: if(uae_startedup) { uae_running=1; setuaemode(); setuaesound(); } else { frontendhandle=block.message.sender; uae_startedup=1; uae_running=1; } break; case A_disk: changedisk(0, block.message.data.reserved); break; case A_disk+1: changedisk(1, block.message.data.reserved); break; case A_disk+2: changedisk(2, block.message.data.reserved); break; case A_disk+3: changedisk(3, block.message.data.reserved); break; case A_sonst: setsonst(block.message.data.reserved); break; case A_rom: strncpy(romfile, block.message.data.reserved, 235); break; case A_mount: strncpy(mountpoint, block.message.data.reserved, 63); break; case A_mount+1: strncpy(mountdir, block.message.data.reserved, 235); add_filesys_unit(mountpoint, mountdir, 0); break; case A_mount+2: strncpy(mountdir, block.message.data.reserved, 235); add_filesys_unit(mountpoint, mountdir, 1); break; case A_uaeask: sendtofront(block.message.data.reserved); break; } } void gui_process(void) { wimp_event_no event; while(uae_running==0) { event=wimp_poll(wimp_MASK_NULL, &block, 0); switch(event) { case wimp_USER_MESSAGE: case wimp_USER_MESSAGE_RECORDED: gui_messagereceive(); break; } } } void gui_exit(void) { } void gui_led(int led, int on) { } void gui_filename(int num, char *name) { } void gui_handle_events(void) { } int gui_update(void) { } fs-uae-2.2.3+dfsg/src/archivers/0000755000175000017500000000000012162366655016632 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/src/archivers/dms/0000755000175000017500000000000012162366655017415 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/src/archivers/dms/crc_csum.cpp0000644000175000017500000000475112162366655021726 0ustar glaubitzglaubitz /* * xDMS v1.3 - Portable DMS archive unpacker - Public Domain * Written by Andre Rodrigues de la Rocha * * CRC16 & CheckSum16 calculation functions * CreateCRC was written (aparently) by Bjorn Stenberg * */ #include "cdata.h" #include "crc_csum.h" USHORT dms_Calc_CheckSum(UCHAR *mem, ULONG size){ USHORT u=0; while(size--) u += *mem++; return (USHORT)(u & 0xffff); } USHORT dms_CreateCRC(UCHAR* mem, ULONG size ){ static const USHORT CRCTab[256]={ 0x0000,0xC0C1,0xC181,0x0140,0xC301,0x03C0,0x0280,0xC241, 0xC601,0x06C0,0x0780,0xC741,0x0500,0xC5C1,0xC481,0x0440, 0xCC01,0x0CC0,0x0D80,0xCD41,0x0F00,0xCFC1,0xCE81,0x0E40, 0x0A00,0xCAC1,0xCB81,0x0B40,0xC901,0x09C0,0x0880,0xC841, 0xD801,0x18C0,0x1980,0xD941,0x1B00,0xDBC1,0xDA81,0x1A40, 0x1E00,0xDEC1,0xDF81,0x1F40,0xDD01,0x1DC0,0x1C80,0xDC41, 0x1400,0xD4C1,0xD581,0x1540,0xD701,0x17C0,0x1680,0xD641, 0xD201,0x12C0,0x1380,0xD341,0x1100,0xD1C1,0xD081,0x1040, 0xF001,0x30C0,0x3180,0xF141,0x3300,0xF3C1,0xF281,0x3240, 0x3600,0xF6C1,0xF781,0x3740,0xF501,0x35C0,0x3480,0xF441, 0x3C00,0xFCC1,0xFD81,0x3D40,0xFF01,0x3FC0,0x3E80,0xFE41, 0xFA01,0x3AC0,0x3B80,0xFB41,0x3900,0xF9C1,0xF881,0x3840, 0x2800,0xE8C1,0xE981,0x2940,0xEB01,0x2BC0,0x2A80,0xEA41, 0xEE01,0x2EC0,0x2F80,0xEF41,0x2D00,0xEDC1,0xEC81,0x2C40, 0xE401,0x24C0,0x2580,0xE541,0x2700,0xE7C1,0xE681,0x2640, 0x2200,0xE2C1,0xE381,0x2340,0xE101,0x21C0,0x2080,0xE041, 0xA001,0x60C0,0x6180,0xA141,0x6300,0xA3C1,0xA281,0x6240, 0x6600,0xA6C1,0xA781,0x6740,0xA501,0x65C0,0x6480,0xA441, 0x6C00,0xACC1,0xAD81,0x6D40,0xAF01,0x6FC0,0x6E80,0xAE41, 0xAA01,0x6AC0,0x6B80,0xAB41,0x6900,0xA9C1,0xA881,0x6840, 0x7800,0xB8C1,0xB981,0x7940,0xBB01,0x7BC0,0x7A80,0xBA41, 0xBE01,0x7EC0,0x7F80,0xBF41,0x7D00,0xBDC1,0xBC81,0x7C40, 0xB401,0x74C0,0x7580,0xB541,0x7700,0xB7C1,0xB681,0x7640, 0x7200,0xB2C1,0xB381,0x7340,0xB101,0x71C0,0x7080,0xB041, 0x5000,0x90C1,0x9181,0x5140,0x9301,0x53C0,0x5280,0x9241, 0x9601,0x56C0,0x5780,0x9741,0x5500,0x95C1,0x9481,0x5440, 0x9C01,0x5CC0,0x5D80,0x9D41,0x5F00,0x9FC1,0x9E81,0x5E40, 0x5A00,0x9AC1,0x9B81,0x5B40,0x9901,0x59C0,0x5880,0x9841, 0x8801,0x48C0,0x4980,0x8941,0x4B00,0x8BC1,0x8A81,0x4A40, 0x4E00,0x8EC1,0x8F81,0x4F40,0x8D01,0x4DC0,0x4C80,0x8C41, 0x4400,0x84C1,0x8581,0x4540,0x8701,0x47C0,0x4680,0x8641, 0x8201,0x42C0,0x4380,0x8341,0x4100,0x81C1,0x8081,0x4040 }; register USHORT CRC = 0; while(size--) CRC = (USHORT) (CRCTab[((CRC ^ *mem++) & 255)] ^ ((CRC >> 8) & 255)); return CRC; } fs-uae-2.2.3+dfsg/src/archivers/dms/cdata.h0000644000175000017500000000223012162366655020637 0ustar glaubitzglaubitz /* * xDMS v1.3 - Portable DMS archive unpacker - Public Domain * Written by Andre Rodrigues de la Rocha * * Main types of variables used in xDMS, some implementation * dependant features and other global stuff */ #ifndef UCHAR #define UCHAR unsigned char #endif #ifndef USHORT #define USHORT unsigned short #endif #ifndef SHORT #define SHORT short #endif #ifndef ULONG #define ULONG unsigned long #endif #ifndef INLINE #ifdef __cplusplus #define INLINE inline #else #ifdef __GNUC__ #define INLINE inline #else #ifdef __SASC #define INLINE __inline #else #define INLINE static #endif #endif #endif #endif #ifndef UNDER_DOS #ifdef __MSDOS__ #define UNDER_DOS #else #ifdef __MSDOS #define UNDER_DOS #else #ifdef _OS2 #define UNDER_DOS #else #ifdef _QC #define UNDER_DOS #endif #endif #endif #endif #endif #ifndef DIR_CHAR #ifdef UNDER_DOS /* running under MSDOS or DOS-like OS */ #define DIR_CHAR '\\' #else #define DIR_CHAR '/' #endif #endif #define DIR_SEPARATORS ":\\/" extern UCHAR *dms_text; extern USHORT dms_lastlen, dms_np; fs-uae-2.2.3+dfsg/src/archivers/dms/u_medium.cpp0000644000175000017500000000223312162366655021725 0ustar glaubitzglaubitz /* * xDMS v1.3 - Portable DMS archive unpacker - Public Domain * Written by Andre Rodrigues de la Rocha * * Main decompression functions used in MEDIUM mode * */ #include #include "cdata.h" #include "u_medium.h" #include "getbits.h" #include "tables.h" #define MBITMASK 0x3fff USHORT dms_medium_text_loc; USHORT Unpack_MEDIUM(UCHAR *in, UCHAR *out, USHORT origsize){ USHORT i, j, c; UCHAR u, *outend; initbitbuf(in); outend = out+origsize; while (out < outend) { if (GETBITS(1)!=0) { DROPBITS(1); *out++ = dms_text[dms_medium_text_loc++ & MBITMASK] = (UCHAR)GETBITS(8); DROPBITS(8); } else { DROPBITS(1); c = GETBITS(8); DROPBITS(8); j = (USHORT) (d_code[c]+3); u = d_len[c]; c = (USHORT) (((c << u) | GETBITS(u)) & 0xff); DROPBITS(u); u = d_len[c]; c = (USHORT) ((d_code[c] << 8) | (((c << u) | GETBITS(u)) & 0xff)); DROPBITS(u); i = (USHORT) (dms_medium_text_loc - c - 1); while(j--) *out++ = dms_text[dms_medium_text_loc++ & MBITMASK] = dms_text[i++ & MBITMASK]; } } dms_medium_text_loc = (USHORT)((dms_medium_text_loc+66) & MBITMASK); return 0; } fs-uae-2.2.3+dfsg/src/archivers/dms/getbits.cpp0000644000175000017500000000126312162366655021564 0ustar glaubitzglaubitz /* * xDMS v1.3 - Portable DMS archive unpacker - Public Domain * Written by Andre Rodrigues de la Rocha * Functions/macros to get a variable number of bits * */ #include "cdata.h" #include "getbits.h" ULONG dms_mask_bits[]={ 0x000000L,0x000001L,0x000003L,0x000007L,0x00000fL,0x00001fL, 0x00003fL,0x00007fL,0x0000ffL,0x0001ffL,0x0003ffL,0x0007ffL, 0x000fffL,0x001fffL,0x003fffL,0x007fffL,0x00ffffL,0x01ffffL, 0x03ffffL,0x07ffffL,0x0fffffL,0x1fffffL,0x3fffffL,0x7fffffL, 0xffffffL }; UCHAR *dms_indata, dms_bitcount; ULONG dms_bitbuf; void initbitbuf(UCHAR *in){ dms_bitbuf = 0; dms_bitcount = 0; dms_indata = in; DROPBITS(0); } fs-uae-2.2.3+dfsg/src/archivers/dms/u_deep.cpp0000644000175000017500000001016712162366655021367 0ustar glaubitzglaubitz /* * xDMS v1.3 - Portable DMS archive unpacker - Public Domain * Written by Andre Rodrigues de la Rocha * * Lempel-Ziv-DynamicHuffman decompression functions used in Deep * mode. * Most routines ripped from LZHUF written by Haruyasu Yoshizaki * */ #include #include "cdata.h" #include "tables.h" #include "u_deep.h" #include "getbits.h" INLINE USHORT DecodeChar(void); INLINE USHORT DecodePosition(void); INLINE void update(USHORT c); static void reconst(void); USHORT dms_deep_text_loc; int dms_init_deep_tabs=1; #define DBITMASK 0x3fff /* uses 16Kb dictionary */ #define F 60 /* lookahead buffer size */ #define THRESHOLD 2 #define N_CHAR (256 - THRESHOLD + F) /* kinds of characters (character code = 0..N_CHAR-1) */ #define T (N_CHAR * 2 - 1) /* size of table */ #define R (T - 1) /* position of root */ #define MAX_FREQ 0x8000 /* updates tree when the */ static USHORT freq[T + 1]; /* frequency table */ static USHORT prnt[T + N_CHAR]; /* pointers to parent nodes, except for the */ /* elements [T..T + N_CHAR - 1] which are used to get */ /* the positions of leaves corresponding to the codes. */ static USHORT son[T]; /* pointers to child nodes (son[], son[] + 1) */ void Init_DEEP_Tabs(void){ USHORT i, j; for (i = 0; i < N_CHAR; i++) { freq[i] = 1; son[i] = (USHORT)(i + T); prnt[i + T] = i; } i = 0; j = N_CHAR; while (j <= R) { freq[j] = (USHORT) (freq[i] + freq[i + 1]); son[j] = i; prnt[i] = prnt[i + 1] = j; i += 2; j++; } freq[T] = 0xffff; prnt[R] = 0; dms_init_deep_tabs = 0; } USHORT Unpack_DEEP(UCHAR *in, UCHAR *out, USHORT origsize){ USHORT i, j, c; UCHAR *outend; initbitbuf(in); if (dms_init_deep_tabs) Init_DEEP_Tabs(); outend = out+origsize; while (out < outend) { c = DecodeChar(); if (c < 256) { *out++ = dms_text[dms_deep_text_loc++ & DBITMASK] = (UCHAR)c; } else { j = (USHORT) (c - 255 + THRESHOLD); i = (USHORT) (dms_deep_text_loc - DecodePosition() - 1); while (j--) *out++ = dms_text[dms_deep_text_loc++ & DBITMASK] = dms_text[i++ & DBITMASK]; } } dms_deep_text_loc = (USHORT)((dms_deep_text_loc+60) & DBITMASK); return 0; } INLINE USHORT DecodeChar(void){ USHORT c; c = son[R]; /* travel from root to leaf, */ /* choosing the smaller child node (son[]) if the read bit is 0, */ /* the bigger (son[]+1} if 1 */ while (c < T) { c = son[c + GETBITS(1)]; DROPBITS(1); } c -= T; update(c); return c; } INLINE USHORT DecodePosition(void){ USHORT i, j, c; i = GETBITS(8); DROPBITS(8); c = (USHORT) (d_code[i] << 8); j = d_len[i]; i = (USHORT) (((i << j) | GETBITS(j)) & 0xff); DROPBITS(j); return (USHORT) (c | i) ; } /* reconstruction of tree */ static void reconst(void){ USHORT i, j, k, f, l; /* collect leaf nodes in the first half of the table */ /* and replace the freq by (freq + 1) / 2. */ j = 0; for (i = 0; i < T; i++) { if (son[i] >= T) { freq[j] = (USHORT) ((freq[i] + 1) / 2); son[j] = son[i]; j++; } } /* begin constructing tree by connecting sons */ for (i = 0, j = N_CHAR; j < T; i += 2, j++) { k = (USHORT) (i + 1); f = freq[j] = (USHORT) (freq[i] + freq[k]); for (k = (USHORT)(j - 1); f < freq[k]; k--); k++; l = (USHORT)((j - k) * 2); memmove(&freq[k + 1], &freq[k], (size_t)l); freq[k] = f; memmove(&son[k + 1], &son[k], (size_t)l); son[k] = i; } /* connect prnt */ for (i = 0; i < T; i++) { if ((k = son[i]) >= T) { prnt[k] = i; } else { prnt[k] = prnt[k + 1] = i; } } } /* increment frequency of given code by one, and update tree */ INLINE void update(USHORT c){ USHORT i, j, k, l; if (freq[R] == MAX_FREQ) { reconst(); } c = prnt[c + T]; do { k = ++freq[c]; /* if the order is disturbed, exchange nodes */ if (k > freq[l = (USHORT)(c + 1)]) { while (k > freq[++l]); l--; freq[c] = freq[l]; freq[l] = k; i = son[c]; prnt[i] = l; if (i < T) prnt[i + 1] = l; j = son[l]; son[l] = i; prnt[j] = c; if (j < T) prnt[j + 1] = c; son[c] = j; c = l; } } while ((c = prnt[c]) != 0); /* repeat up to root */ } fs-uae-2.2.3+dfsg/src/archivers/dms/u_rle.h0000644000175000017500000000005712162366655020676 0ustar glaubitzglaubitz USHORT Unpack_RLE(UCHAR *, UCHAR *, USHORT); fs-uae-2.2.3+dfsg/src/archivers/dms/u_quick.h0000644000175000017500000000012412162366655021223 0ustar glaubitzglaubitz USHORT Unpack_QUICK(UCHAR *, UCHAR *, USHORT); extern USHORT dms_quick_text_loc; fs-uae-2.2.3+dfsg/src/archivers/dms/u_medium.h0000644000175000017500000000012612162366655021371 0ustar glaubitzglaubitz USHORT Unpack_MEDIUM(UCHAR *, UCHAR *, USHORT); extern USHORT dms_medium_text_loc; fs-uae-2.2.3+dfsg/src/archivers/dms/u_heavy.cpp0000644000175000017500000000611712162366655021566 0ustar glaubitzglaubitz /* * xDMS v1.3 - Portable DMS archive unpacker - Public Domain * Written by Andre Rodrigues de la Rocha * * Lempel-Ziv-Huffman decompression functions used in Heavy 1 & 2 * compression modes. Based on LZH decompression functions from * UNIX LHA made by Masaru Oki * */ #include "cdata.h" #include "u_heavy.h" #include "getbits.h" #include "maketbl.h" #define NC 510 #define NPT 20 #define N1 510 #define OFFSET 253 USHORT dms_left[2 * NC - 1], dms_right[2 * NC - 1 + 9]; static UCHAR c_len[NC], pt_len[NPT]; static USHORT c_table[4096], pt_table[256]; USHORT dms_lastlen, dms_np; USHORT dms_heavy_text_loc; static USHORT read_tree_c(void); static USHORT read_tree_p(void); INLINE USHORT decode_c(void); INLINE USHORT decode_p(void); USHORT Unpack_HEAVY(UCHAR *in, UCHAR *out, UCHAR flags, USHORT origsize){ USHORT j, i, c, bitmask; UCHAR *outend; /* Heavy 1 uses a 4Kb dictionary, Heavy 2 uses 8Kb */ if (flags & 8) { dms_np = 15; bitmask = 0x1fff; } else { dms_np = 14; bitmask = 0x0fff; } initbitbuf(in); if (flags & 2) { if (read_tree_c()) return 1; if (read_tree_p()) return 2; } outend = out+origsize; while (out>= 1; } while (j >= N1); DROPBITS(c_len[j] - 12); } return j; } INLINE USHORT decode_p(void){ USHORT i, j, m; j = pt_table[GETBITS(8)]; if (j < dms_np) { DROPBITS(pt_len[j]); } else { DROPBITS(8); i = GETBITS(16); m = 0x8000; do { if (i & m) j = dms_right[j]; else j = dms_left [j]; m >>= 1; } while (j >= dms_np); DROPBITS(pt_len[j] - 8); } if (j != dms_np-1) { if (j > 0) { j = (USHORT)(GETBITS(i=(USHORT)(j-1)) | (1U << (j-1))); DROPBITS(i); } dms_lastlen=j; } return dms_lastlen; } static USHORT read_tree_c(void){ USHORT i,n; n = GETBITS(9); DROPBITS(9); if (n>0){ for (i=0; i0){ for (i=0; i * * Run Length Encoding decompression function used in most * modes after decompression by other algorithm * */ #include #include "cdata.h" #include "u_rle.h" USHORT Unpack_RLE(UCHAR *in, UCHAR *out, USHORT origsize){ USHORT n; UCHAR a,b, *outend; outend = out+origsize; while (out outend) return 1; memset(out,a,(size_t) n); out += n; } } return 0; } fs-uae-2.2.3+dfsg/src/archivers/dms/pfile.cpp0000644000175000017500000003562512162366655021233 0ustar glaubitzglaubitz /* * xDMS v1.3 - Portable DMS archive unpacker - Public Domain * Written by Andre Rodrigues de la Rocha * * Handles the processing of a single DMS archive * */ #define HEADLEN 56 #define THLEN 20 #define TRACK_BUFFER_LEN 32000 #define TEMP_BUFFER_LEN 32000 #include #include #include #include #include "sysconfig.h" #include "sysdeps.h" #include "zfile.h" #include "cdata.h" #include "u_init.h" #include "u_rle.h" #include "u_quick.h" #include "u_medium.h" #include "u_deep.h" #include "u_heavy.h" #include "crc_csum.h" #include "pfile.h" static int dolog = 0; #define DMSFLAG_ENCRYPTED 2 #define DMSFLAG_HD 16 static USHORT Process_Track(struct zfile *, struct zfile *, UCHAR *, UCHAR *, USHORT, USHORT, int, struct zfile **extra); static USHORT Unpack_Track(UCHAR *, UCHAR *, USHORT, USHORT, UCHAR, UCHAR, USHORT, USHORT, USHORT, int); static void printbandiz(UCHAR *, USHORT); static int passfound, passretries; static TCHAR modes[7][7]={_T("NOCOMP"),_T("SIMPLE"),_T("QUICK "),_T("MEDIUM"),_T("DEEP "),_T("HEAVY1"),_T("HEAVY2")}; static USHORT PWDCRC; UCHAR *dms_text; static void log_error(int track) { write_log (_T("DMS: Ignored error on track %d!\n"), track); } static void addextra(TCHAR *name, struct zfile **extra, uae_u8 *p, int size) { int i; struct zfile *zf = NULL; if (!extra) return; for (i = 0; i < DMS_EXTRA_SIZE; i++) { if (!extra[i]) break; } if (i == DMS_EXTRA_SIZE) return; zf = zfile_fopen_empty (NULL, name, size); if (!zf) return; zfile_fwrite (p, size, 1, zf); zfile_fseek (zf, 0, SEEK_SET); extra[i] = zf; } USHORT DMS_Process_File(struct zfile *fi, struct zfile *fo, USHORT cmd, USHORT opt, USHORT PCRC, USHORT pwd, int part, struct zfile **extra) { USHORT from, to, geninfo, c_version, cmode, hcrc, disktype, pv, ret; ULONG pkfsize, unpkfsize; UCHAR *b1, *b2; time_t date; passfound = 0; passretries = 2; b1 = xcalloc(UCHAR,TRACK_BUFFER_LEN); if (!b1) return ERR_NOMEMORY; b2 = xcalloc(UCHAR,TRACK_BUFFER_LEN); if (!b2) { free(b1); return ERR_NOMEMORY; } dms_text = xcalloc(UCHAR,TEMP_BUFFER_LEN); if (!dms_text) { free(b1); free(b2); return ERR_NOMEMORY; } /* if iname is NULL, input is stdin; if oname is NULL, output is stdout */ if (zfile_fread(b1,1,HEADLEN,fi) != HEADLEN) { free(b1); free(b2); free(dms_text); return ERR_SREAD; } if ( (b1[0] != 'D') || (b1[1] != 'M') || (b1[2] != 'S') || (b1[3] != '!') ) { /* Check the first 4 bytes of file to see if it is "DMS!" */ free(b1); free(b2); free(dms_text); return ERR_NOTDMS; } hcrc = (USHORT)((b1[HEADLEN-2]<<8) | b1[HEADLEN-1]); /* Header CRC */ if (hcrc != dms_CreateCRC(b1+4,(ULONG)(HEADLEN-6))) { free(b1); free(b2); free(dms_text); return ERR_HCRC; } geninfo = (USHORT) ((b1[10]<<8) | b1[11]); /* General info about archive */ date = (time_t) ((((ULONG)b1[12])<<24) | (((ULONG)b1[13])<<16) | (((ULONG)b1[14])<<8) | (ULONG)b1[15]); /* date in standard UNIX/ANSI format */ from = (USHORT) ((b1[16]<<8) | b1[17]); /* Lowest track in archive. May be incorrect if archive is "appended" */ to = (USHORT) ((b1[18]<<8) | b1[19]); /* Highest track in archive. May be incorrect if archive is "appended" */ if (part && from < 30) { free(b1); free(b2); free(dms_text); return DMS_FILE_END; } pkfsize = (ULONG) ((((ULONG)b1[21])<<16) | (((ULONG)b1[22])<<8) | (ULONG)b1[23]); /* Length of total packed data as in archive */ unpkfsize = (ULONG) ((((ULONG)b1[25])<<16) | (((ULONG)b1[26])<<8) | (ULONG)b1[27]); /* Length of unpacked data. Usually 901120 bytes */ c_version = (USHORT) ((b1[46]<<8) | b1[47]); /* version of DMS used to generate it */ disktype = (USHORT) ((b1[50]<<8) | b1[51]); /* Type of compressed disk */ cmode = (USHORT) ((b1[52]<<8) | b1[53]); /* Compression mode mostly used in this archive */ PWDCRC = PCRC; if (dolog) { pv = (USHORT)(c_version/100); write_log (_T(" Created with DMS version %d.%02d "),pv,c_version-pv*100); if (geninfo & 0x80) write_log (_T("Registered\n")); else write_log (_T("Evaluation\n")); write_log (_T(" Creation date : %s"),ctime(&date)); write_log (_T(" Lowest track in archive : %d\n"),from); write_log (_T(" Highest track in archive : %d\n"),to); write_log (_T(" Packed data size : %lu\n"),pkfsize); write_log (_T(" Unpacked data size : %lu\n"),unpkfsize); write_log (_T(" Disk type of archive : ")); /* The original DMS from SDS software (DMS up to 1.11) used other values */ /* in disk type to indicate formats as MS-DOS, AMax and Mac, but it was */ /* not suported for compression. It was for future expansion and was never */ /* used. The newer versions of DMS made by ParCon Software changed it to */ /* add support for new Amiga disk types. */ switch (disktype) { case 0: case 1: /* Can also be a non-dos disk */ write_log (_T("AmigaOS 1.0 OFS\n")); break; case 2: write_log (_T("AmigaOS 2.0 FFS\n")); break; case 3: write_log (_T("AmigaOS 3.0 OFS / International\n")); break; case 4: write_log (_T("AmigaOS 3.0 FFS / International\n")); break; case 5: write_log (_T("AmigaOS 3.0 OFS / Dir Cache\n")); break; case 6: write_log (_T("AmigaOS 3.0 FFS / Dir Cache\n")); break; case 7: write_log (_T("FMS Amiga System File\n")); break; default: write_log (_T("Unknown\n")); } write_log (_T(" Compression mode used : ")); if (cmode>6) write_log (_T("Unknown !\n")); else write_log (_T("%s\n"),modes[cmode]); write_log (_T(" General info : ")); if ((geninfo==0)||(geninfo==0x80)) write_log (_T("None")); if (geninfo & 1) write_log (_T("NoZero ")); if (geninfo & 2) write_log (_T("Encrypted ")); if (geninfo & 4) write_log (_T("Appends ")); if (geninfo & 8) write_log (_T("Banner ")); if (geninfo & 16) write_log (_T("HD ")); if (geninfo & 32) write_log (_T("MS-DOS ")); if (geninfo & 64) write_log (_T("DMS_DEV_Fixed ")); if (geninfo & 256) write_log (_T("FILEID.DIZ")); write_log (_T("\n")); write_log (_T(" Info Header CRC : %04X\n\n"),hcrc); } if (disktype == 7) { /* It's not a DMS compressed disk image, but a FMS archive */ free(b1); free(b2); free(dms_text); return ERR_FMS; } if (dolog) { write_log (_T(" Track Plength Ulength Cmode USUM HCRC DCRC Cflag\n")); write_log (_T(" ------ ------- ------- ------ ---- ---- ---- -----\n")); } // if (((cmd==CMD_UNPACK) || (cmd==CMD_SHOWBANNER)) && (geninfo & 2) && (!pwd)) // return ERR_NOPASSWD; ret=NO_PROBLEM; Init_Decrunchers(); if (cmd != CMD_VIEW) { if (cmd == CMD_SHOWBANNER) /* Banner is in the first track */ ret = Process_Track(fi,NULL,b1,b2,cmd,opt,geninfo,extra); else { Init_Decrunchers(); for (;;) { int ok = 0; ret = Process_Track(fi,fo,b1,b2,cmd,opt,geninfo,extra); if (ret == DMS_FILE_END) break; if (ret == NO_PROBLEM) continue; break; #if 0 while (!ok) { uae_u8 b1[THLEN]; if (zfile_fread(b1,1,THLEN,fi) != 1) { write_log (_T("DMS: unexpected end of file\n")); break; } write_log (_T("DMS: corrupted track, searching for next track header..\n")); if (b1[0] == 'T' && b1[1] == 'R') { USHORT hcrc = (USHORT)((b1[THLEN-2] << 8) | b1[THLEN-1]); if (CreateCRC(b1,(ULONG)(THLEN-2)) == hcrc) { write_log (_T("DMS: found checksum correct track header, retrying..\n")); zfile_fseek (fi, SEEK_CUR, -THLEN); ok = 1; break; } } if (!ok) zfile_fseek (fi, SEEK_CUR, -(THLEN - 1)); } #endif } } } if ((cmd == CMD_VIEWFULL) || (cmd == CMD_SHOWDIZ) || (cmd == CMD_SHOWBANNER)) write_log (_T("\n")); if (ret == DMS_FILE_END) ret = NO_PROBLEM; /* Used to give an error message, but I have seen some DMS */ /* files with texts or zeros at the end of the valid data */ /* So, when we find something that is not a track header, */ /* we suppose that the valid data is over. And say it's ok. */ if (ret == ERR_NOTTRACK) ret = NO_PROBLEM; free(b1); free(b2); free(dms_text); return ret; } static USHORT Process_Track(struct zfile *fi, struct zfile *fo, UCHAR *b1, UCHAR *b2, USHORT cmd, USHORT opt, int dmsflags, struct zfile **extra){ USHORT hcrc, dcrc, usum, number, pklen1, pklen2, unpklen, l; UCHAR cmode, flags; int crcerr = 0; bool normaltrack; l = (USHORT)zfile_fread(b1,1,THLEN,fi); if (l != THLEN) { if (l==0) return DMS_FILE_END; else return ERR_SREAD; } /* "TR" identifies a Track Header */ if ((b1[0] != 'T')||(b1[1] != 'R')) return ERR_NOTTRACK; /* Track Header CRC */ hcrc = (USHORT)((b1[THLEN-2] << 8) | b1[THLEN-1]); if (dms_CreateCRC(b1,(ULONG)(THLEN-2)) != hcrc) return ERR_THCRC; number = (USHORT)((b1[2] << 8) | b1[3]); /* Number of track */ pklen1 = (USHORT)((b1[6] << 8) | b1[7]); /* Length of packed track data as in archive */ pklen2 = (USHORT)((b1[8] << 8) | b1[9]); /* Length of data after first unpacking */ unpklen = (USHORT)((b1[10] << 8) | b1[11]); /* Length of data after subsequent rle unpacking */ flags = b1[12]; /* control flags */ cmode = b1[13]; /* compression mode used */ usum = (USHORT)((b1[14] << 8) | b1[15]); /* Track Data CheckSum AFTER unpacking */ dcrc = (USHORT)((b1[16] << 8) | b1[17]); /* Track Data CRC BEFORE unpacking */ if (dolog) write_log (_T("DMS: track=%d\n"), number); if (dolog) { if (number==80) write_log (_T(" FileID ")); else if (number==0xffff) write_log (_T(" Banner ")); else if ((number==0) && (unpklen==1024)) write_log (_T(" FakeBB ")); else write_log (_T(" %2d "),(short)number); write_log (_T("%5d %5d %s %04X %04X %04X %0d\n"), pklen1, unpklen, modes[cmode], usum, hcrc, dcrc, flags); } if ((pklen1 > TRACK_BUFFER_LEN) || (pklen2 >TRACK_BUFFER_LEN) || (unpklen > TRACK_BUFFER_LEN)) return ERR_BIGTRACK; if (zfile_fread(b1,1,(size_t)pklen1,fi) != pklen1) return ERR_SREAD; if (dms_CreateCRC(b1,(ULONG)pklen1) != dcrc) { log_error (number); crcerr = 1; } /* track 80 is FILEID.DIZ, track 0xffff (-1) is Banner */ /* and track 0 with 1024 bytes only is a fake boot block with more advertising */ /* FILE_ID.DIZ is never encrypted */ //if (pwd && (number!=80)) dms_decrypt(b1,pklen1); normaltrack = false; if ((cmd == CMD_UNPACK) && (number<80) && (unpklen>2048)) { memset(b2, 0, unpklen); if (!crcerr) { Unpack_Track(b1, b2, pklen2, unpklen, cmode, flags, number, pklen1, usum, dmsflags & DMSFLAG_ENCRYPTED); } if (number == 0 && zfile_ftell (fo) == 512 * 22) { // did we have another cylinder 0 already? uae_u8 *p; zfile_fseek (fo, 0, SEEK_SET); p = xcalloc (uae_u8, 512 * 22); zfile_fread (p, 512 * 22, 1, fo); addextra(_T("BigFakeBootBlock"), extra, p, 512 * 22); xfree (p); } zfile_fseek (fo, number * 512 * 22 * ((dmsflags & DMSFLAG_HD) ? 2 : 1), SEEK_SET); if (zfile_fwrite(b2,1,(size_t)unpklen,fo) != unpklen) return ERR_CANTWRITE; normaltrack = true; } else if (number == 0 && unpklen == 1024) { memset(b2, 0, unpklen); if (!crcerr) Unpack_Track(b1, b2, pklen2, unpklen, cmode, flags, number, pklen1, usum, dmsflags & DMSFLAG_ENCRYPTED); addextra(_T("FakeBootBlock"), extra, b2, unpklen); } if (crcerr) return NO_PROBLEM; if (number == 0xffff) { if (extra){ Unpack_Track(b1, b2, pklen2, unpklen, cmode, flags, number, pklen1, usum, dmsflags & DMSFLAG_ENCRYPTED); addextra(_T("Banner"), extra, b2, unpklen); } //printbandiz(b2,unpklen); } if (number == 80) { if (extra) { Unpack_Track(b1, b2, pklen2, unpklen, cmode, flags, number, pklen1, usum, dmsflags & DMSFLAG_ENCRYPTED); addextra(_T("FILEID.DIZ"), extra, b2, unpklen); } //printbandiz(b2,unpklen); } if (!normaltrack) Init_Decrunchers(); return NO_PROBLEM; } static USHORT Unpack_Track_2(UCHAR *b1, UCHAR *b2, USHORT pklen2, USHORT unpklen, UCHAR cmode, UCHAR flags){ switch (cmode){ case 0: /* No Compression */ memcpy(b2,b1,(size_t)unpklen); break; case 1: /* Simple Compression */ if (Unpack_RLE(b1,b2,unpklen)) return ERR_BADDECR; break; case 2: /* Quick Compression */ if (Unpack_QUICK(b1,b2,pklen2)) return ERR_BADDECR; if (Unpack_RLE(b2,b1,unpklen)) return ERR_BADDECR; memcpy(b2,b1,(size_t)unpklen); break; case 3: /* Medium Compression */ if (Unpack_MEDIUM(b1,b2,pklen2)) return ERR_BADDECR; if (Unpack_RLE(b2,b1,unpklen)) return ERR_BADDECR; memcpy(b2,b1,(size_t)unpklen); break; case 4: /* Deep Compression */ if (Unpack_DEEP(b1,b2,pklen2)) return ERR_BADDECR; if (Unpack_RLE(b2,b1,unpklen)) return ERR_BADDECR; memcpy(b2,b1,(size_t)unpklen); break; case 5: case 6: /* Heavy Compression */ if (cmode==5) { /* Heavy 1 */ if (Unpack_HEAVY(b1,b2,flags & 7,pklen2)) return ERR_BADDECR; } else { /* Heavy 2 */ if (Unpack_HEAVY(b1,b2,flags | 8,pklen2)) return ERR_BADDECR; } if (flags & 4) { memset(b1,0,unpklen); /* Unpack with RLE only if this flag is set */ if (Unpack_RLE(b2,b1,unpklen)) return ERR_BADDECR; memcpy(b2,b1,(size_t)unpklen); } break; default: return ERR_UNKNMODE; } if (!(flags & 1)) Init_Decrunchers(); return NO_PROBLEM; } /* DMS uses a lame encryption */ static void dms_decrypt(UCHAR *p, USHORT len, UCHAR *src){ USHORT t; while (len--){ t = (USHORT) *src++; *p++ = t ^ (UCHAR)PWDCRC; PWDCRC = (USHORT)((PWDCRC >> 1) + t); } } static USHORT Unpack_Track(UCHAR *b1, UCHAR *b2, USHORT pklen2, USHORT unpklen, UCHAR cmode, UCHAR flags, USHORT number, USHORT pklen1, USHORT usum1, int enc) { USHORT r, err = NO_PROBLEM; static USHORT pass; int maybeencrypted; int pwrounds; UCHAR *tmp; USHORT prevpass = 0; if (passfound) { if (number != 80) dms_decrypt(b1, pklen1, b1); r = Unpack_Track_2(b1, b2, pklen2, unpklen, cmode, flags); if (r == NO_PROBLEM) { if (usum1 == dms_Calc_CheckSum(b2,(ULONG)unpklen)) return NO_PROBLEM; } log_error(number); if (passretries <= 0) return ERR_CSUM; } passretries--; pwrounds = 0; maybeencrypted = 0; tmp = (unsigned char*)malloc (pklen1); memcpy (tmp, b1, pklen1); memset(b2, 0, unpklen); for (;;) { r = Unpack_Track_2(b1, b2, pklen2, unpklen, cmode, flags); if (r == NO_PROBLEM) { if (usum1 == dms_Calc_CheckSum(b2,(ULONG)unpklen)) { passfound = maybeencrypted; if (passfound) write_log (_T("DMS: decryption key = 0x%04X\n"), prevpass); err = NO_PROBLEM; pass = prevpass; break; } } if (number == 80 || !enc) { err = ERR_CSUM; break; } maybeencrypted = 1; prevpass = pass; PWDCRC = pass; pass++; dms_decrypt(b1, pklen1, tmp); pwrounds++; if (pwrounds == 65536) { err = ERR_CSUM; passfound = 0; break; } } free (tmp); return err; } static void printbandiz(UCHAR *m, USHORT len){ UCHAR *i,*j; i=j=m; while (i> (dms_bitcount-(n)))) #define DROPBITS(n) {dms_bitbuf &= dms_mask_bits[dms_bitcount-=(n)]; while (dms_bitcount<16) {dms_bitbuf = (dms_bitbuf << 8) | *dms_indata++; dms_bitcount += 8;}} void initbitbuf(UCHAR *); fs-uae-2.2.3+dfsg/src/archivers/dms/u_deep.h0000644000175000017500000000016212162366655021026 0ustar glaubitzglaubitz USHORT Unpack_DEEP(UCHAR *, UCHAR *, USHORT); extern int dms_init_deep_tabs; extern USHORT dms_deep_text_loc; fs-uae-2.2.3+dfsg/src/archivers/dms/u_quick.cpp0000644000175000017500000000162012162366655021560 0ustar glaubitzglaubitz /* * xDMS v1.3 - Portable DMS archive unpacker - Public Domain * Written by Andre Rodrigues de la Rocha * * */ #include #include "cdata.h" #include "u_quick.h" #include "getbits.h" #define QBITMASK 0xff USHORT dms_quick_text_loc; USHORT Unpack_QUICK(UCHAR *in, UCHAR *out, USHORT origsize){ USHORT i, j; UCHAR *outend; initbitbuf(in); outend = out+origsize; while (out < outend) { if (GETBITS(1)!=0) { DROPBITS(1); *out++ = dms_text[dms_quick_text_loc++ & QBITMASK] = (UCHAR)GETBITS(8); DROPBITS(8); } else { DROPBITS(1); j = (USHORT) (GETBITS(2)+2); DROPBITS(2); i = (USHORT) (dms_quick_text_loc - GETBITS(8) - 1); DROPBITS(8); while(j--) { *out++ = dms_text[dms_quick_text_loc++ & QBITMASK] = dms_text[i++ & QBITMASK]; } } } dms_quick_text_loc = (USHORT)((dms_quick_text_loc+5) & QBITMASK); return 0; } fs-uae-2.2.3+dfsg/src/archivers/dms/maketbl.cpp0000644000175000017500000000314212162366655021540 0ustar glaubitzglaubitz /* * xDMS v1.3 - Portable DMS archive unpacker - Public Domain * Written by Andre Rodrigues de la Rocha * * Makes decoding table for Heavy LZH decompression * From UNIX LHA made by Masaru Oki * */ #include "cdata.h" #include "maketbl.h" static SHORT c; static USHORT n, tblsiz, len, depth, maxdepth, avail; static USHORT codeword, bit, *tbl, TabErr; static UCHAR *blen; static USHORT mktbl(void); USHORT dms_make_table(USHORT nchar, UCHAR bitlen[],USHORT tablebits, USHORT table[]){ n = avail = nchar; blen = bitlen; tbl = table; tblsiz = (USHORT) (1U << tablebits); bit = (USHORT) (tblsiz / 2); maxdepth = (USHORT)(tablebits + 1); depth = len = 1; c = -1; codeword = 0; TabErr = 0; mktbl(); /* left subtree */ if (TabErr) return TabErr; mktbl(); /* right subtree */ if (TabErr) return TabErr; if (codeword != tblsiz) return 5; return 0; } static USHORT mktbl(void){ USHORT i=0; if (TabErr) return 0; if (len == depth) { while (++c < n) if (blen[c] == len) { i = codeword; codeword += bit; if (codeword > tblsiz) { TabErr=1; return 0; } while (i < codeword) tbl[i++] = (USHORT)c; return (USHORT)c; } c = -1; len++; bit >>= 1; } depth++; if (depth < maxdepth) { mktbl(); mktbl(); } else if (depth > 32) { TabErr = 2; return 0; } else { if ((i = avail++) >= 2 * n - 1) { TabErr = 3; return 0; } dms_left[i] = mktbl(); dms_right[i] = mktbl(); if (codeword >= tblsiz) { TabErr = 4; return 0; } if (depth == maxdepth) tbl[codeword++] = i; } depth--; return i; } fs-uae-2.2.3+dfsg/src/archivers/dms/tables.cpp0000644000175000017500000000706112162366655021377 0ustar glaubitzglaubitz /* * xDMS v1.3 - Portable DMS archive unpacker - Public Domain * Written by Andre Rodrigues de la Rocha * * Tables used in Medium and Deep compression modes * */ #include "cdata.h" #include "tables.h" UCHAR d_code[256] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0C, 0x0C, 0x0C, 0x0C, 0x0D, 0x0D, 0x0D, 0x0D, 0x0E, 0x0E, 0x0E, 0x0E, 0x0F, 0x0F, 0x0F, 0x0F, 0x10, 0x10, 0x10, 0x10, 0x11, 0x11, 0x11, 0x11, 0x12, 0x12, 0x12, 0x12, 0x13, 0x13, 0x13, 0x13, 0x14, 0x14, 0x14, 0x14, 0x15, 0x15, 0x15, 0x15, 0x16, 0x16, 0x16, 0x16, 0x17, 0x17, 0x17, 0x17, 0x18, 0x18, 0x19, 0x19, 0x1A, 0x1A, 0x1B, 0x1B, 0x1C, 0x1C, 0x1D, 0x1D, 0x1E, 0x1E, 0x1F, 0x1F, 0x20, 0x20, 0x21, 0x21, 0x22, 0x22, 0x23, 0x23, 0x24, 0x24, 0x25, 0x25, 0x26, 0x26, 0x27, 0x27, 0x28, 0x28, 0x29, 0x29, 0x2A, 0x2A, 0x2B, 0x2B, 0x2C, 0x2C, 0x2D, 0x2D, 0x2E, 0x2E, 0x2F, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, }; UCHAR d_len[256] = { 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, }; fs-uae-2.2.3+dfsg/src/archivers/dms/tables.h0000644000175000017500000000004212162366655021034 0ustar glaubitzglaubitz extern UCHAR d_code[], d_len[]; fs-uae-2.2.3+dfsg/src/archivers/dms/maketbl.h0000644000175000017500000000020112162366655021176 0ustar glaubitzglaubitz extern USHORT dms_left[], dms_right[]; USHORT dms_make_table(USHORT nchar, UCHAR bitlen[], USHORT tablebits, USHORT table[]); fs-uae-2.2.3+dfsg/src/archivers/dms/u_init.cpp0000644000175000017500000000106112162366655021406 0ustar glaubitzglaubitz /* * xDMS v1.3 - Portable DMS archive unpacker - Public Domain * Written by Andre Rodrigues de la Rocha * * Decruncher reinitialization * */ #include #include "cdata.h" #include "u_init.h" #include "u_quick.h" #include "u_medium.h" #include "u_deep.h" #include "u_heavy.h" void Init_Decrunchers(void){ dms_quick_text_loc = 251; dms_medium_text_loc = 0x3fbe; dms_heavy_text_loc = 0; dms_deep_text_loc = 0x3fc4; dms_init_deep_tabs = 1; memset(dms_text,0,0x3fc8); dms_lastlen = 0; dms_np = 0; } fs-uae-2.2.3+dfsg/src/archivers/zip/0000755000175000017500000000000012162366655017434 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/src/archivers/zip/unzip.cpp0000644000175000017500000010027712162366655021314 0ustar glaubitzglaubitz/* unzip.c -- IO on .zip files using zlib Version 0.15 beta, Mar 19th, 1998, Read unzip.h for more info */ #ifdef WINUAE #define ZLIB_WINAPI #endif #include "sysconfig.h" #include "sysdeps.h" #include #include #include #include "zlib.h" #include "unzip.h" #include "zfile.h" #ifdef STDC # include # include # include #endif #ifdef NO_ERRNO_H extern int errno; #else # include #endif #ifndef local # define local static #endif /* compile with -Dlocal if your debugger can't find stosaatic symbols */ #if !defined(unix) && !defined(CASESENSITIVITYDEFAULT_YES) && \ !defined(CASESENSITIVITYDEFAULT_NO) #define CASESENSITIVITYDEFAULT_NO #endif #ifndef UNZ_BUFSIZE #define UNZ_BUFSIZE (16384) #endif #ifndef UNZ_MAXFILENAMEINZIP #define UNZ_MAXFILENAMEINZIP (256) #endif #ifndef ALLOC # define ALLOC(size) (malloc(size)) #endif #ifndef TRYFREE # define TRYFREE(p) {if (p) free(p);} #endif #define SIZECENTRALDIRITEM (0x2e) #define SIZEZIPLOCALHEADER (0x1e) /* I've found an old Unix (a SunOS 4.1.3_U1) without all SEEK_* defined.... */ #ifndef SEEK_CUR #define SEEK_CUR 1 #endif #ifndef SEEK_END #define SEEK_END 2 #endif #ifndef SEEK_SET #define SEEK_SET 0 #endif const char unz_copyright[] = " unzip 0.15 Copyright 1998 Gilles Vollant "; /* unz_file_info_interntal contain internal info about a file in zipfile*/ typedef struct unz_file_info_internal_s { uLong offset_curfile;/* relative offset of local header 4 bytes */ } unz_file_info_internal; /* file_in_zip_read_info_s contain internal information about a file in zipfile, when reading and decompress it */ typedef struct { char *read_buffer; /* internal buffer for compressed data */ z_stream stream; /* zLib stream structure for inflate */ uLong pos_in_zipfile; /* position in byte on the zipfile, for fseek*/ uLong stream_initialised; /* flag set if stream structure is initialised*/ uLong offset_local_extrafield;/* offset of the local extra field */ uInt size_local_extrafield;/* size of the local extra field */ uLong pos_local_extrafield; /* position in the local extra field in read*/ uLong crc32; /* crc32 of all data uncompressed */ uLong crc32_wait; /* crc32 we must obtain after decompress all */ uLong rest_read_compressed; /* number of byte to be decompressed */ uLong rest_read_uncompressed;/*number of byte to be obtained after decomp*/ struct zfile *file; /* io structore of the zipfile */ uLong compression_method; /* compression method (0==store) */ uLong byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/ } file_in_zip_read_info_s; /* unz_s contain internal information about the zipfile */ typedef struct { struct zfile* file; /* io structore of the zipfile */ unz_global_info gi; /* public global information */ uLong byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/ uLong num_file; /* number of the current file in the zipfile*/ uLong pos_in_central_dir; /* pos of the current file in the central dir*/ uLong current_file_ok; /* flag about the usability of the current file*/ uLong central_pos; /* position of the beginning of the central dir*/ uLong size_central_dir; /* size of the central directory */ uLong offset_central_dir; /* offset of start of central directory with respect to the starting disk number */ unz_file_info cur_file_info; /* public info about the current file in zip*/ unz_file_info_internal cur_file_info_internal; /* private info about it*/ file_in_zip_read_info_s* pfile_in_zip_read; /* structure about the current file if we are decompressing it */ } unz_s; /* =========================================================================== Read a byte from a gz_stream; update next_in and avail_in. Return EOF for end of file. IN assertion: the stream s has been sucessfully opened for reading. */ local int unzlocal_getByte(struct zfile *fin,int *pi) { unsigned char c; int err = zfile_fread(&c, 1, 1, fin); if (err==1) { *pi = (int)c; return UNZ_OK; } else { return UNZ_EOF; } } /* =========================================================================== Reads a long in LSB order from the given gz_stream. Sets */ local int unzlocal_getShort (struct zfile *fin,uLong *pX) { uLong x ; int i; int err; err = unzlocal_getByte(fin,&i); x = (uLong)i; if (err==UNZ_OK) err = unzlocal_getByte(fin,&i); x += ((uLong)i)<<8; if (err==UNZ_OK) *pX = x; else *pX = 0; return err; } local int unzlocal_getLong (struct zfile *fin, uLong *pX) { uLong x ; int i; int err; err = unzlocal_getByte(fin,&i); x = (uLong)i; if (err==UNZ_OK) err = unzlocal_getByte(fin,&i); x += ((uLong)i)<<8; if (err==UNZ_OK) err = unzlocal_getByte(fin,&i); x += ((uLong)i)<<16; if (err==UNZ_OK) err = unzlocal_getByte(fin,&i); x += ((uLong)i)<<24; if (err==UNZ_OK) *pX = x; else *pX = 0; return err; } /* My own strcmpi / strcasecmp */ local int strcmpcasenosensitive_internal (const char *fileName1, const char *fileName2) { for (;;) { char c1=*(fileName1++); char c2=*(fileName2++); if ((c1>='a') && (c1<='z')) c1 -= 0x20; if ((c2>='a') && (c2<='z')) c2 -= 0x20; if (c1=='\0') return ((c2=='\0') ? 0 : -1); if (c2=='\0') return 1; if (c1c2) return 1; } } #ifdef CASESENSITIVITYDEFAULT_NO #define CASESENSITIVITYDEFAULTVALUE 2 #else #define CASESENSITIVITYDEFAULTVALUE 1 #endif #ifndef STRCMPCASENOSENTIVEFUNCTION #define STRCMPCASENOSENTIVEFUNCTION strcmpcasenosensitive_internal #endif /* Compare two filename (fileName1,fileName2). If iCaseSenisivity = 1, comparision is case sensitivity (like strcmp) If iCaseSenisivity = 2, comparision is not case sensitivity (like strcmpi or strcasecmp) If iCaseSenisivity = 0, case sensitivity is defaut of your operating system (like 1 on Unix, 2 on Windows) */ extern int ZEXPORT unzStringFileNameCompare (const char*fileName1, const char*fileName2, int iCaseSensitivity) { if (iCaseSensitivity==0) iCaseSensitivity=CASESENSITIVITYDEFAULTVALUE; if (iCaseSensitivity==1) return strcmp(fileName1,fileName2); return STRCMPCASENOSENTIVEFUNCTION(fileName1,fileName2); } #define BUFREADCOMMENT (0x400) /* Locate the Central directory of a zipfile (at the end, just before the global comment) */ local uLong unzlocal_SearchCentralDir(struct zfile *fin) { unsigned char* buf; uLong uSizeFile; uLong uBackRead; uLong uMaxBack=0xffff; /* maximum size of global comment */ uLong uPosFound=0; if (zfile_fseek(fin,0,SEEK_END) != 0) return 0; uSizeFile = zfile_ftell( fin ); if (uMaxBack>uSizeFile) uMaxBack = uSizeFile; buf = (unsigned char*)ALLOC(BUFREADCOMMENT+4); if (buf==NULL) return 0; uBackRead = 4; while (uBackReaduMaxBack) uBackRead = uMaxBack; else uBackRead+=BUFREADCOMMENT; uReadPos = uSizeFile-uBackRead ; uReadSize = ((BUFREADCOMMENT+4) < (uSizeFile-uReadPos)) ? (BUFREADCOMMENT+4) : (uSizeFile-uReadPos); if (zfile_fseek(fin,uReadPos,SEEK_SET)!=0) break; if (zfile_fread(buf,(uInt)uReadSize,1,fin)!=1) break; for (i=(int)uReadSize-3; (i--)>0;) if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) && ((*(buf+i+2))==0x05) && ((*(buf+i+3))==0x06)) { uPosFound = uReadPos+i; break; } if (uPosFound!=0) break; } TRYFREE(buf); return uPosFound; } /* Open a Zip file. path contain the full pathname (by example, on a Windows NT computer "c:\\test\\zlib109.zip" or on an Unix computer "zlib/zlib109.zip". If the zipfile cannot be opened (file don't exist or in not valid), the return value is NULL. Else, the return value is a unzFile Handle, usable with other function of this unzip package. */ extern unzFile ZEXPORT unzOpen (struct zfile *fin) { unz_s us; unz_s *s; uLong central_pos,uL; uLong number_disk; /* number of the current dist, used for spaning ZIP, unsupported, always 0*/ uLong number_disk_with_CD; /* number the the disk with central dir, used for spaning ZIP, unsupported, always 0*/ uLong number_entry_CD; /* total number of entries in the central dir (same than number_entry on nospan) */ int err=UNZ_OK; if (unz_copyright[0]!=' ') return NULL; central_pos = unzlocal_SearchCentralDir(fin); if (central_pos==0) err=UNZ_ERRNO; if (zfile_fseek(fin,central_pos,SEEK_SET)!=0) err=UNZ_ERRNO; /* the signature, already checked */ if (unzlocal_getLong(fin,&uL)!=UNZ_OK) err=UNZ_ERRNO; /* number of this disk */ if (unzlocal_getShort(fin,&number_disk)!=UNZ_OK) err=UNZ_ERRNO; /* number of the disk with the start of the central directory */ if (unzlocal_getShort(fin,&number_disk_with_CD)!=UNZ_OK) err=UNZ_ERRNO; /* total number of entries in the central dir on this disk */ if (unzlocal_getShort(fin,&us.gi.number_entry)!=UNZ_OK) err=UNZ_ERRNO; /* total number of entries in the central dir */ if (unzlocal_getShort(fin,&number_entry_CD)!=UNZ_OK) err=UNZ_ERRNO; // if ((number_entry_CD!=us.gi.number_entry) || // (number_disk_with_CD!=0) || // (number_disk!=0)) // err=UNZ_BADZIPFILE; if ((number_disk_with_CD!=0) || (number_disk!=0)) err=UNZ_BADZIPFILE; /* size of the central directory */ if (unzlocal_getLong(fin,&us.size_central_dir)!=UNZ_OK) err=UNZ_ERRNO; /* offset of start of central directory with respect to the starting disk number */ if (unzlocal_getLong(fin,&us.offset_central_dir)!=UNZ_OK) err=UNZ_ERRNO; /* zipfile comment length */ if (unzlocal_getShort(fin,&us.gi.size_comment)!=UNZ_OK) err=UNZ_ERRNO; if ((central_pospfile_in_zip_read!=NULL) unzCloseCurrentFile(file); TRYFREE(s); return UNZ_OK; } /* Write info about the ZipFile in the *pglobal_info structure. No preparation of the structure is needed return UNZ_OK if there is no problem. */ extern int ZEXPORT unzGetGlobalInfo (unzFile file, unz_global_info *pglobal_info) { unz_s* s; if (file==NULL) return UNZ_PARAMERROR; s=(unz_s*)file; *pglobal_info=s->gi; return UNZ_OK; } /* Translate date/time from Dos format to tm_unz (readable more easilty) */ local void unzlocal_DosDateToTmuDate (uLong ulDosDate, tm_unz *ptm) { uLong uDate; uDate = (uLong)(ulDosDate>>16); ptm->tm_mday = (uInt)(uDate&0x1f) ; ptm->tm_mon = (uInt)((((uDate)&0x1E0)/0x20)-1) ; ptm->tm_year = (uInt)(((uDate&0x0FE00)/0x0200)+1980) ; ptm->tm_hour = (uInt) ((ulDosDate &0xF800)/0x800); ptm->tm_min = (uInt) ((ulDosDate&0x7E0)/0x20) ; ptm->tm_sec = (uInt) (2*(ulDosDate&0x1f)) ; } /* Get Info about the current file in the zipfile, with internal only info */ local int unzlocal_GetCurrentFileInfoInternal OF((unzFile file, unz_file_info *pfile_info, unz_file_info_internal *pfile_info_internal, char *szFileName, uLong fileNameBufferSize, void *extraField, uLong extraFieldBufferSize, char *szComment, uLong commentBufferSize)); local int unzlocal_GetCurrentFileInfoInternal (unzFile file, unz_file_info *pfile_info, unz_file_info_internal *pfile_info_internal, char *szFileName, uLong fileNameBufferSize, void *extraField, uLong extraFieldBufferSize, char *szComment, uLong commentBufferSize) { unz_s* s; unz_file_info file_info; unz_file_info_internal file_info_internal; int err=UNZ_OK; uLong uMagic; long lSeek=0; if (file==NULL) return UNZ_PARAMERROR; s=(unz_s*)file; if (zfile_fseek(s->file,s->pos_in_central_dir+s->byte_before_the_zipfile,SEEK_SET)!=0) err=UNZ_ERRNO; /* we check the magic */ if (err==UNZ_OK) { if (unzlocal_getLong(s->file,&uMagic) != UNZ_OK) err=UNZ_ERRNO; else if (uMagic!=0x02014b50) err=UNZ_BADZIPFILE; } if (unzlocal_getShort(s->file,&file_info.version) != UNZ_OK) err=UNZ_ERRNO; if (unzlocal_getShort(s->file,&file_info.version_needed) != UNZ_OK) err=UNZ_ERRNO; if (unzlocal_getShort(s->file,&file_info.flag) != UNZ_OK) err=UNZ_ERRNO; if (unzlocal_getShort(s->file,&file_info.compression_method) != UNZ_OK) err=UNZ_ERRNO; if (unzlocal_getLong(s->file,&file_info.dosDate) != UNZ_OK) err=UNZ_ERRNO; unzlocal_DosDateToTmuDate(file_info.dosDate,&file_info.tmu_date); if (unzlocal_getLong(s->file,&file_info.crc) != UNZ_OK) err=UNZ_ERRNO; if (unzlocal_getLong(s->file,&file_info.compressed_size) != UNZ_OK) err=UNZ_ERRNO; if (unzlocal_getLong(s->file,&file_info.uncompressed_size) != UNZ_OK) err=UNZ_ERRNO; if (unzlocal_getShort(s->file,&file_info.size_filename) != UNZ_OK) err=UNZ_ERRNO; if (unzlocal_getShort(s->file,&file_info.size_file_extra) != UNZ_OK) err=UNZ_ERRNO; if (unzlocal_getShort(s->file,&file_info.size_file_comment) != UNZ_OK) err=UNZ_ERRNO; if (unzlocal_getShort(s->file,&file_info.disk_num_start) != UNZ_OK) err=UNZ_ERRNO; if (unzlocal_getShort(s->file,&file_info.internal_fa) != UNZ_OK) err=UNZ_ERRNO; if (unzlocal_getLong(s->file,&file_info.external_fa) != UNZ_OK) err=UNZ_ERRNO; if (unzlocal_getLong(s->file,&file_info_internal.offset_curfile) != UNZ_OK) err=UNZ_ERRNO; lSeek+=file_info.size_filename; if ((err==UNZ_OK) && (szFileName!=NULL)) { uLong uSizeRead ; if (file_info.size_filename0) && (fileNameBufferSize>0)) if (zfile_fread(szFileName,(uInt)uSizeRead,1,s->file)!=1) err=UNZ_ERRNO; lSeek -= uSizeRead; } if ((err==UNZ_OK) && (extraField!=NULL)) { uLong uSizeRead ; if (file_info.size_file_extrafile,lSeek,SEEK_CUR)==0) lSeek=0; else err=UNZ_ERRNO; } if ((file_info.size_file_extra>0) && (extraFieldBufferSize>0)) if (zfile_fread(extraField,(uInt)uSizeRead,1,s->file)!=1) err=UNZ_ERRNO; lSeek += file_info.size_file_extra - uSizeRead; } else lSeek+=file_info.size_file_extra; if ((err==UNZ_OK) && (szComment!=NULL)) { uLong uSizeRead ; if (file_info.size_file_commentfile,lSeek,SEEK_CUR)==0) lSeek=0; else err=UNZ_ERRNO; } if ((file_info.size_file_comment>0) && (commentBufferSize>0)) if (zfile_fread(szComment,(uInt)uSizeRead,1,s->file)!=1) err=UNZ_ERRNO; lSeek+=file_info.size_file_comment - uSizeRead; } else lSeek+=file_info.size_file_comment; if ((err==UNZ_OK) && (pfile_info!=NULL)) *pfile_info=file_info; if ((err==UNZ_OK) && (pfile_info_internal!=NULL)) *pfile_info_internal=file_info_internal; return err; } /* Write info about the ZipFile in the *pglobal_info structure. No preparation of the structure is needed return UNZ_OK if there is no problem. */ extern int ZEXPORT unzGetCurrentFileInfo (unzFile file, unz_file_info *pfile_info, char *szFileName, uLong fileNameBufferSize, void *extraField, uLong extraFieldBufferSize, char *szComment, uLong commentBufferSize) { return unzlocal_GetCurrentFileInfoInternal(file,pfile_info,NULL, szFileName,fileNameBufferSize, extraField,extraFieldBufferSize, szComment,commentBufferSize); } /* Set the current file of the zipfile to the first file. return UNZ_OK if there is no problem */ extern int ZEXPORT unzGoToFirstFile (unzFile file) { int err=UNZ_OK; unz_s* s; if (file==NULL) return UNZ_PARAMERROR; s=(unz_s*)file; s->pos_in_central_dir=s->offset_central_dir; s->num_file=0; err=unzlocal_GetCurrentFileInfoInternal(file,&s->cur_file_info, &s->cur_file_info_internal, NULL,0,NULL,0,NULL,0); s->current_file_ok = (err == UNZ_OK); return err; } /* Set the current file of the zipfile to the next file. return UNZ_OK if there is no problem return UNZ_END_OF_LIST_OF_FILE if the actual file was the latest. */ extern int ZEXPORT unzGoToNextFile (unzFile file) { unz_s* s; int err; if (file==NULL) return UNZ_PARAMERROR; s=(unz_s*)file; if (!s->current_file_ok) return UNZ_END_OF_LIST_OF_FILE; if (s->num_file+1==s->gi.number_entry) return UNZ_END_OF_LIST_OF_FILE; s->pos_in_central_dir += SIZECENTRALDIRITEM + s->cur_file_info.size_filename + s->cur_file_info.size_file_extra + s->cur_file_info.size_file_comment ; s->num_file++; err = unzlocal_GetCurrentFileInfoInternal(file,&s->cur_file_info, &s->cur_file_info_internal, NULL,0,NULL,0,NULL,0); s->current_file_ok = (err == UNZ_OK); return err; } /* Try locate the file szFileName in the zipfile. For the iCaseSensitivity signification, see unzipStringFileNameCompare return value : UNZ_OK if the file is found. It becomes the current file. UNZ_END_OF_LIST_OF_FILE if the file is not found */ extern int ZEXPORT unzLocateFile (unzFile file, const char *szFileName, int iCaseSensitivity) { unz_s* s; int err; uLong num_fileSaved; uLong pos_in_central_dirSaved; if (file==NULL) return UNZ_PARAMERROR; if (strlen(szFileName)>=UNZ_MAXFILENAMEINZIP) return UNZ_PARAMERROR; s=(unz_s*)file; if (!s->current_file_ok) return UNZ_END_OF_LIST_OF_FILE; num_fileSaved = s->num_file; pos_in_central_dirSaved = s->pos_in_central_dir; err = unzGoToFirstFile(file); while (err == UNZ_OK) { char szCurrentFileName[UNZ_MAXFILENAMEINZIP+1]; unzGetCurrentFileInfo(file,NULL, szCurrentFileName,sizeof(szCurrentFileName)-1, NULL,0,NULL,0); if (unzStringFileNameCompare(szCurrentFileName, szFileName,iCaseSensitivity)==0) return UNZ_OK; err = unzGoToNextFile(file); } s->num_file = num_fileSaved ; s->pos_in_central_dir = pos_in_central_dirSaved ; return err; } /* Read the local header of the current zipfile Check the coherency of the local header and info in the end of central directory about this file store in *piSizeVar the size of extra info in local header (filename and size of extra field data) */ local int unzlocal_CheckCurrentFileCoherencyHeader (unz_s *s, uInt *piSizeVar, uLong *poffset_local_extrafield, uInt *psize_local_extrafield) { uLong uMagic,uData,uFlags; uLong size_filename; uLong size_extra_field; int err=UNZ_OK; *piSizeVar = 0; *poffset_local_extrafield = 0; *psize_local_extrafield = 0; if (zfile_fseek(s->file,s->cur_file_info_internal.offset_curfile + s->byte_before_the_zipfile,SEEK_SET)!=0) return UNZ_ERRNO; if (err==UNZ_OK) { if (unzlocal_getLong(s->file,&uMagic) != UNZ_OK) err=UNZ_ERRNO; else if (uMagic!=0x04034b50) err=UNZ_BADZIPFILE; } if (unzlocal_getShort(s->file,&uData) != UNZ_OK) err=UNZ_ERRNO; /* else if ((err==UNZ_OK) && (uData!=s->cur_file_info.wVersion)) err=UNZ_BADZIPFILE; */ if (unzlocal_getShort(s->file,&uFlags) != UNZ_OK) err=UNZ_ERRNO; if (unzlocal_getShort(s->file,&uData) != UNZ_OK) err=UNZ_ERRNO; else if ((err==UNZ_OK) && (uData!=s->cur_file_info.compression_method)) err=UNZ_BADZIPFILE; /* if ((err==UNZ_OK) && (s->cur_file_info.compression_method!=0) && (s->cur_file_info.compression_method!=Z_DEFLATED && s->cur_file_info.compression_method!=ZIP_BZIP2)) err=UNZ_BADZIPFILE; */ if (unzlocal_getLong(s->file,&uData) != UNZ_OK) /* date/time */ err=UNZ_ERRNO; if (unzlocal_getLong(s->file,&uData) != UNZ_OK) /* crc */ err=UNZ_ERRNO; else if ((err==UNZ_OK) && (uData!=s->cur_file_info.crc) && ((uFlags & 8)==0)) err=UNZ_BADZIPFILE; if (unzlocal_getLong(s->file,&uData) != UNZ_OK) /* size compr */ err=UNZ_ERRNO; /* else if ((err==UNZ_OK) && (uData!=s->cur_file_info.compressed_size) && ((uFlags & 8)==0)) err=UNZ_BADZIPFILE; */ if (unzlocal_getLong(s->file,&uData) != UNZ_OK) /* size uncompr */ err=UNZ_ERRNO; /* else if ((err==UNZ_OK) && (uData!=s->cur_file_info.uncompressed_size) && ((uFlags & 8)==0)) err=UNZ_BADZIPFILE; */ if (unzlocal_getShort(s->file,&size_filename) != UNZ_OK) err=UNZ_ERRNO; else if ((err==UNZ_OK) && (size_filename!=s->cur_file_info.size_filename)) err=UNZ_BADZIPFILE; *piSizeVar += (uInt)size_filename; if (unzlocal_getShort(s->file,&size_extra_field) != UNZ_OK) err=UNZ_ERRNO; *poffset_local_extrafield= s->cur_file_info_internal.offset_curfile + SIZEZIPLOCALHEADER + size_filename; *psize_local_extrafield = (uInt)size_extra_field; *piSizeVar += (uInt)size_extra_field; return err; } /* Open for reading data the current file in the zipfile. If there is no error and the file is opened, the return value is UNZ_OK. */ extern int ZEXPORT unzOpenCurrentFile (unzFile file) { int err=UNZ_OK; int Store; uInt iSizeVar; unz_s* s; file_in_zip_read_info_s* pfile_in_zip_read_info; uLong offset_local_extrafield; /* offset of the local extra field */ uInt size_local_extrafield; /* size of the local extra field */ if (file==NULL) return UNZ_PARAMERROR; s=(unz_s*)file; if (!s->current_file_ok) return UNZ_PARAMERROR; if (s->pfile_in_zip_read != NULL) unzCloseCurrentFile(file); if (unzlocal_CheckCurrentFileCoherencyHeader(s,&iSizeVar, &offset_local_extrafield,&size_local_extrafield)!=UNZ_OK) return UNZ_BADZIPFILE; pfile_in_zip_read_info = (file_in_zip_read_info_s*) ALLOC(sizeof(file_in_zip_read_info_s)); if (pfile_in_zip_read_info==NULL) return UNZ_INTERNALERROR; pfile_in_zip_read_info->read_buffer=(char*)ALLOC(UNZ_BUFSIZE); pfile_in_zip_read_info->offset_local_extrafield = offset_local_extrafield; pfile_in_zip_read_info->size_local_extrafield = size_local_extrafield; pfile_in_zip_read_info->pos_local_extrafield=0; if (pfile_in_zip_read_info->read_buffer==NULL) { TRYFREE(pfile_in_zip_read_info); return UNZ_INTERNALERROR; } pfile_in_zip_read_info->stream_initialised=0; if ((s->cur_file_info.compression_method!=0) && (s->cur_file_info.compression_method!=Z_DEFLATED)) { write_log (_T("ZIP: unknown compression method %ld\n"), s->cur_file_info.compression_method); err=UNZ_BADZIPFILE; } Store = s->cur_file_info.compression_method==0; pfile_in_zip_read_info->crc32_wait=s->cur_file_info.crc; pfile_in_zip_read_info->crc32=0; pfile_in_zip_read_info->compression_method = s->cur_file_info.compression_method; pfile_in_zip_read_info->file=s->file; pfile_in_zip_read_info->byte_before_the_zipfile=s->byte_before_the_zipfile; pfile_in_zip_read_info->stream.total_out = 0; if (!Store) { pfile_in_zip_read_info->stream.zalloc = (alloc_func)0; pfile_in_zip_read_info->stream.zfree = (free_func)0; pfile_in_zip_read_info->stream.opaque = (voidpf)0; err=inflateInit2_(&pfile_in_zip_read_info->stream, -MAX_WBITS, ZLIB_VERSION, sizeof(z_stream)); if (err == Z_OK) pfile_in_zip_read_info->stream_initialised=1; /* windowBits is passed < 0 to tell that there is no zlib header. * Note that in this case inflate *requires* an extra "dummy" byte * after the compressed stream in order to complete decompression and * return Z_STREAM_END. * In unzip, i don't wait absolutely Z_STREAM_END because I known the * size of both compressed and uncompressed data */ } pfile_in_zip_read_info->rest_read_compressed = s->cur_file_info.compressed_size ; pfile_in_zip_read_info->rest_read_uncompressed = s->cur_file_info.uncompressed_size ; pfile_in_zip_read_info->pos_in_zipfile = s->cur_file_info_internal.offset_curfile + SIZEZIPLOCALHEADER + iSizeVar; pfile_in_zip_read_info->stream.avail_in = (uInt)0; s->pfile_in_zip_read = pfile_in_zip_read_info; return UNZ_OK; } /* Read bytes from the current file. buf contain buffer where data must be copied len the size of buf. return the number of byte copied if somes bytes are copied return 0 if the end of file was reached return <0 with error code if there is an error (UNZ_ERRNO for IO error, or zLib error for uncompress error) */ extern int ZEXPORT unzReadCurrentFile (unzFile file, voidp buf, unsigned int len) { int err=UNZ_OK; uInt iRead = 0; unz_s* s; file_in_zip_read_info_s* pfile_in_zip_read_info; if (file==NULL) return UNZ_PARAMERROR; s=(unz_s*)file; pfile_in_zip_read_info=s->pfile_in_zip_read; if (pfile_in_zip_read_info==NULL) return UNZ_PARAMERROR; if ((pfile_in_zip_read_info->read_buffer == NULL)) return UNZ_END_OF_LIST_OF_FILE; if (len==0) return 0; pfile_in_zip_read_info->stream.next_out = (Bytef*)buf; pfile_in_zip_read_info->stream.avail_out = (uInt)len; if (len>pfile_in_zip_read_info->rest_read_uncompressed) pfile_in_zip_read_info->stream.avail_out = (uInt)pfile_in_zip_read_info->rest_read_uncompressed; while (pfile_in_zip_read_info->stream.avail_out>0) { if ((pfile_in_zip_read_info->stream.avail_in==0) && (pfile_in_zip_read_info->rest_read_compressed>0)) { uInt uReadThis = UNZ_BUFSIZE; if (pfile_in_zip_read_info->rest_read_compressedrest_read_compressed; if (uReadThis == 0) return UNZ_EOF; if (zfile_fseek(pfile_in_zip_read_info->file, pfile_in_zip_read_info->pos_in_zipfile + pfile_in_zip_read_info->byte_before_the_zipfile,SEEK_SET)!=0) return UNZ_ERRNO; if (zfile_fread(pfile_in_zip_read_info->read_buffer,uReadThis,1, pfile_in_zip_read_info->file)!=1) return UNZ_ERRNO; pfile_in_zip_read_info->pos_in_zipfile += uReadThis; pfile_in_zip_read_info->rest_read_compressed-=uReadThis; pfile_in_zip_read_info->stream.next_in = (Bytef*)pfile_in_zip_read_info->read_buffer; pfile_in_zip_read_info->stream.avail_in = (uInt)uReadThis; } if (pfile_in_zip_read_info->compression_method==0) { uInt uDoCopy,i ; if (pfile_in_zip_read_info->stream.avail_out < pfile_in_zip_read_info->stream.avail_in) uDoCopy = pfile_in_zip_read_info->stream.avail_out ; else uDoCopy = pfile_in_zip_read_info->stream.avail_in ; for (i=0;istream.next_out+i) = *(pfile_in_zip_read_info->stream.next_in+i); pfile_in_zip_read_info->crc32 = crc32(pfile_in_zip_read_info->crc32, pfile_in_zip_read_info->stream.next_out, uDoCopy); pfile_in_zip_read_info->rest_read_uncompressed-=uDoCopy; pfile_in_zip_read_info->stream.avail_in -= uDoCopy; pfile_in_zip_read_info->stream.avail_out -= uDoCopy; pfile_in_zip_read_info->stream.next_out += uDoCopy; pfile_in_zip_read_info->stream.next_in += uDoCopy; pfile_in_zip_read_info->stream.total_out += uDoCopy; iRead += uDoCopy; } else { uLong uTotalOutBefore,uTotalOutAfter; const Bytef *bufBefore; uLong uOutThis; int flush=Z_SYNC_FLUSH; uTotalOutBefore = pfile_in_zip_read_info->stream.total_out; bufBefore = pfile_in_zip_read_info->stream.next_out; /* if ((pfile_in_zip_read_info->rest_read_uncompressed == pfile_in_zip_read_info->stream.avail_out) && (pfile_in_zip_read_info->rest_read_compressed == 0)) flush = Z_FINISH; */ err=inflate(&pfile_in_zip_read_info->stream,flush); uTotalOutAfter = pfile_in_zip_read_info->stream.total_out; uOutThis = uTotalOutAfter-uTotalOutBefore; pfile_in_zip_read_info->crc32 = crc32(pfile_in_zip_read_info->crc32,bufBefore, (uInt)(uOutThis)); pfile_in_zip_read_info->rest_read_uncompressed -= uOutThis; iRead += (uInt)(uTotalOutAfter - uTotalOutBefore); if (err==Z_STREAM_END) return (iRead==0) ? UNZ_EOF : iRead; if (err!=Z_OK) break; } } if (err==Z_OK) return iRead; return err; } /* Give the current position in uncompressed data */ extern z_off_t ZEXPORT unztell (unzFile file) { unz_s* s; file_in_zip_read_info_s* pfile_in_zip_read_info; if (file==NULL) return UNZ_PARAMERROR; s=(unz_s*)file; pfile_in_zip_read_info=s->pfile_in_zip_read; if (pfile_in_zip_read_info==NULL) return UNZ_PARAMERROR; return (z_off_t)pfile_in_zip_read_info->stream.total_out; } /* return 1 if the end of file was reached, 0 elsewhere */ extern int ZEXPORT unzeof (unzFile file) { unz_s* s; file_in_zip_read_info_s* pfile_in_zip_read_info; if (file==NULL) return UNZ_PARAMERROR; s=(unz_s*)file; pfile_in_zip_read_info=s->pfile_in_zip_read; if (pfile_in_zip_read_info==NULL) return UNZ_PARAMERROR; if (pfile_in_zip_read_info->rest_read_uncompressed == 0) return 1; else return 0; } /* Read extra field from the current file (opened by unzOpenCurrentFile) This is the local-header version of the extra field (sometimes, there is more info in the local-header version than in the central-header) if buf==NULL, it return the size of the local extra field that can be read if buf!=NULL, len is the size of the buffer, the extra header is copied in buf. the return value is the number of bytes copied in buf, or (if <0) the error code */ extern int ZEXPORT unzGetLocalExtrafield (unzFile file, voidp buf, unsigned int len) { unz_s* s; file_in_zip_read_info_s* pfile_in_zip_read_info; uInt read_now; uLong size_to_read; if (file==NULL) return UNZ_PARAMERROR; s=(unz_s*)file; pfile_in_zip_read_info=s->pfile_in_zip_read; if (pfile_in_zip_read_info==NULL) return UNZ_PARAMERROR; size_to_read = (pfile_in_zip_read_info->size_local_extrafield - pfile_in_zip_read_info->pos_local_extrafield); if (buf==NULL) return (int)size_to_read; if (len>size_to_read) read_now = (uInt)size_to_read; else read_now = (uInt)len ; if (read_now==0) return 0; if (zfile_fseek(pfile_in_zip_read_info->file, pfile_in_zip_read_info->offset_local_extrafield + pfile_in_zip_read_info->pos_local_extrafield,SEEK_SET)!=0) return UNZ_ERRNO; if (zfile_fread(buf,(uInt)size_to_read,1,pfile_in_zip_read_info->file)!=1) return UNZ_ERRNO; return (int)read_now; } /* Close the file in zip opened with unzipOpenCurrentFile Return UNZ_CRCERROR if all the file was read but the CRC is not good */ extern int ZEXPORT unzCloseCurrentFile (unzFile file) { int err=UNZ_OK; unz_s* s; file_in_zip_read_info_s* pfile_in_zip_read_info; if (file==NULL) return UNZ_PARAMERROR; s=(unz_s*)file; pfile_in_zip_read_info=s->pfile_in_zip_read; if (pfile_in_zip_read_info==NULL) return UNZ_PARAMERROR; if (pfile_in_zip_read_info->rest_read_uncompressed == 0) { if (pfile_in_zip_read_info->crc32 != pfile_in_zip_read_info->crc32_wait) err=UNZ_CRCERROR; } TRYFREE(pfile_in_zip_read_info->read_buffer); pfile_in_zip_read_info->read_buffer = NULL; if (pfile_in_zip_read_info->stream_initialised) inflateEnd(&pfile_in_zip_read_info->stream); pfile_in_zip_read_info->stream_initialised = 0; TRYFREE(pfile_in_zip_read_info); s->pfile_in_zip_read=NULL; return err; } /* Get the global comment string of the ZipFile, in the szComment buffer. uSizeBuf is the size of the szComment buffer. return the number of byte copied or an error code <0 */ extern int ZEXPORT unzGetGlobalComment (unzFile file, char *szComment, uLong uSizeBuf) { int err=UNZ_OK; unz_s* s; uLong uReadThis ; if (file==NULL) return UNZ_PARAMERROR; s=(unz_s*)file; uReadThis = uSizeBuf; if (uReadThis>s->gi.size_comment) uReadThis = s->gi.size_comment; if (zfile_fseek(s->file,s->central_pos+22,SEEK_SET)!=0) return UNZ_ERRNO; if (uReadThis>0) { *szComment='\0'; if (zfile_fread(szComment,(uInt)uReadThis,1,s->file)!=1) return UNZ_ERRNO; } if ((szComment != NULL) && (uSizeBuf > s->gi.size_comment)) *(szComment+s->gi.size_comment)='\0'; return (int)uReadThis; } fs-uae-2.2.3+dfsg/src/archivers/zip/unzip.h0000644000175000017500000002450312162366655020756 0ustar glaubitzglaubitz/* unzip.h -- IO for uncompress .zip files using zlib Version 0.15 beta, Mar 19th, 1998, Copyright (C) 1998 Gilles Vollant This unzip package allow extract file from .ZIP file, compatible with PKZip 2.04g WinZip, InfoZip tools and compatible. Encryption and multi volume ZipFile (span) are not supported. Old compressions used by old PKZip 1.x are not supported THIS IS AN ALPHA VERSION. AT THIS STAGE OF DEVELOPPEMENT, SOMES API OR STRUCTURE CAN CHANGE IN FUTURE VERSION !! I WAIT FEEDBACK at mail info@winimage.com Visit also http://www.winimage.com/zLibDll/unzip.htm for evolution Condition of use and distribution are the same than zlib : This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /* for more info about .ZIP format, see ftp://ftp.cdrom.com/pub/infozip/doc/appnote-970311-iz.zip PkWare has also a specification at : ftp://ftp.pkware.com/probdesc.zip */ #ifndef _unz_H #define _unz_H #ifdef __cplusplus extern "C" { #endif #ifndef _ZLIB_H #include "zlib.h" #endif #ifndef OF #define OF(args) args #endif typedef int (ZEXPORT *INFLATEINIT2)(z_streamp strm, int windowBits, const char *version, int stream_size); typedef int (ZEXPORT *INFLATEINIT)(z_streamp strm, const char *version, int stream_size); typedef int (ZEXPORT *INFLATEEND)(z_streamp strm); typedef int (ZEXPORT *INFLATE)(z_streamp strm, int flush); typedef int (ZEXPORT *DEFLATEINIT)(z_streamp strm, int level, const char *version, int stream_size); typedef int (ZEXPORT *DEFLATEEND)(z_streamp strm); typedef int (ZEXPORT *DEFLATE)(z_streamp strm, int flush); typedef uLong (ZEXPORT *CRC32)(uLong crc, const Bytef *buf, uInt len); #if defined(STRICTUNZIP) || defined(STRICTZIPUNZIP) /* like the STRICT of WIN32, we define a pointer that cannot be converted from (void*) without cast */ typedef struct TagunzFile__ { int unused; } unzFile__; typedef unzFile__ *unzFile; #else typedef voidp unzFile; #endif #define ZIP_BZIP2 12 #define UNZ_OK (0) #define UNZ_END_OF_LIST_OF_FILE (-100) #define UNZ_ERRNO (Z_ERRNO) #define UNZ_EOF (0) #define UNZ_PARAMERROR (-102) #define UNZ_BADZIPFILE (-103) #define UNZ_INTERNALERROR (-104) #define UNZ_CRCERROR (-105) /* tm_unz contain date/time info */ typedef struct tm_unz_s { uInt tm_sec; /* seconds after the minute - [0,59] */ uInt tm_min; /* minutes after the hour - [0,59] */ uInt tm_hour; /* hours since midnight - [0,23] */ uInt tm_mday; /* day of the month - [1,31] */ uInt tm_mon; /* months since January - [0,11] */ uInt tm_year; /* years - [1980..2044] */ } tm_unz; /* unz_global_info structure contain global data about the ZIPfile These data comes from the end of central dir */ typedef struct unz_global_info_s { uLong number_entry; /* total number of entries in the central dir on this disk */ uLong size_comment; /* size of the global comment of the zipfile */ } unz_global_info; /* unz_file_info contain information about a file in the zipfile */ typedef struct unz_file_info_s { uLong version; /* version made by 2 bytes */ uLong version_needed; /* version needed to extract 2 bytes */ uLong flag; /* general purpose bit flag 2 bytes */ uLong compression_method; /* compression method 2 bytes */ uLong dosDate; /* last mod file date in Dos fmt 4 bytes */ uLong crc; /* crc-32 4 bytes */ uLong compressed_size; /* compressed size 4 bytes */ uLong uncompressed_size; /* uncompressed size 4 bytes */ uLong size_filename; /* filename length 2 bytes */ uLong size_file_extra; /* extra field length 2 bytes */ uLong size_file_comment; /* file comment length 2 bytes */ uLong disk_num_start; /* disk number start 2 bytes */ uLong internal_fa; /* internal file attributes 2 bytes */ uLong external_fa; /* external file attributes 4 bytes */ tm_unz tmu_date; } unz_file_info; extern int ZEXPORT unzStringFileNameCompare OF ((const char* fileName1, const char* fileName2, int iCaseSensitivity)); /* Compare two filename (fileName1,fileName2). If iCaseSenisivity = 1, comparision is case sensitivity (like strcmp) If iCaseSenisivity = 2, comparision is not case sensitivity (like strcmpi or strcasecmp) If iCaseSenisivity = 0, case sensitivity is defaut of your operating system (like 1 on Unix, 2 on Windows) */ extern unzFile ZEXPORT unzOpen OF((struct zfile *path)); /* Open a Zip file. path contain the full pathname (by example, on a Windows NT computer "c:\\zlib\\zlib111.zip" or on an Unix computer "zlib/zlib111.zip". If the zipfile cannot be opened (file don't exist or in not valid), the return value is NULL. Else, the return value is a unzFile Handle, usable with other function of this unzip package. */ extern int ZEXPORT unzClose OF((unzFile file)); /* Close a ZipFile opened with unzipOpen. If there is files inside the .Zip opened with unzOpenCurrentFile (see later), these files MUST be closed with unzipCloseCurrentFile before call unzipClose. return UNZ_OK if there is no problem. */ extern int ZEXPORT unzGetGlobalInfo OF((unzFile file, unz_global_info *pglobal_info)); /* Write info about the ZipFile in the *pglobal_info structure. No preparation of the structure is needed return UNZ_OK if there is no problem. */ extern int ZEXPORT unzGetGlobalComment OF((unzFile file, char *szComment, uLong uSizeBuf)); /* Get the global comment string of the ZipFile, in the szComment buffer. uSizeBuf is the size of the szComment buffer. return the number of byte copied or an error code <0 */ /***************************************************************************/ /* Unzip package allow you browse the directory of the zipfile */ extern int ZEXPORT unzGoToFirstFile OF((unzFile file)); /* Set the current file of the zipfile to the first file. return UNZ_OK if there is no problem */ extern int ZEXPORT unzGoToNextFile OF((unzFile file)); /* Set the current file of the zipfile to the next file. return UNZ_OK if there is no problem return UNZ_END_OF_LIST_OF_FILE if the actual file was the latest. */ extern int ZEXPORT unzLocateFile OF((unzFile file, const char *szFileName, int iCaseSensitivity)); /* Try locate the file szFileName in the zipfile. For the iCaseSensitivity signification, see unzStringFileNameCompare return value : UNZ_OK if the file is found. It becomes the current file. UNZ_END_OF_LIST_OF_FILE if the file is not found */ extern int ZEXPORT unzGetCurrentFileInfo OF((unzFile file, unz_file_info *pfile_info, char *szFileName, uLong fileNameBufferSize, void *extraField, uLong extraFieldBufferSize, char *szComment, uLong commentBufferSize)); /* Get Info about the current file if pfile_info!=NULL, the *pfile_info structure will contain somes info about the current file if szFileName!=NULL, the filemane string will be copied in szFileName (fileNameBufferSize is the size of the buffer) if extraField!=NULL, the extra field information will be copied in extraField (extraFieldBufferSize is the size of the buffer). This is the Central-header version of the extra field if szComment!=NULL, the comment string of the file will be copied in szComment (commentBufferSize is the size of the buffer) */ /***************************************************************************/ /* for reading the content of the current zipfile, you can open it, read data from it, and close it (you can close it before reading all the file) */ extern int ZEXPORT unzOpenCurrentFile OF((unzFile file)); /* Open for reading data the current file in the zipfile. If there is no error, the return value is UNZ_OK. */ extern int ZEXPORT unzCloseCurrentFile OF((unzFile file)); /* Close the file in zip opened with unzOpenCurrentFile Return UNZ_CRCERROR if all the file was read but the CRC is not good */ extern int ZEXPORT unzReadCurrentFile OF((unzFile file, voidp buf, unsigned len)); /* Read bytes from the current file (opened by unzOpenCurrentFile) buf contain buffer where data must be copied len the size of buf. return the number of byte copied if somes bytes are copied return 0 if the end of file was reached return <0 with error code if there is an error (UNZ_ERRNO for IO error, or zLib error for uncompress error) */ extern z_off_t ZEXPORT unztell OF((unzFile file)); /* Give the current position in uncompressed data */ extern int ZEXPORT unzeof OF((unzFile file)); /* return 1 if the end of file was reached, 0 elsewhere */ extern int ZEXPORT unzGetLocalExtrafield OF((unzFile file, voidp buf, unsigned len)); /* Read extra field from the current file (opened by unzOpenCurrentFile) This is the local-header version of the extra field (sometimes, there is more info in the local-header version than in the central-header) if buf==NULL, it return the size of the local extra field if buf!=NULL, len is the size of the buffer, the extra header is copied in buf. the return value is the number of bytes copied in buf, or (if <0) the error code */ #ifdef __cplusplus } #endif #endif /* _unz_H */ fs-uae-2.2.3+dfsg/src/archivers/wrp/0000755000175000017500000000000012162366655017442 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/src/archivers/wrp/warp.h0000644000175000017500000000005512162366655020564 0ustar glaubitzglaubitz extern struct zfile *unwarp(struct zfile*); fs-uae-2.2.3+dfsg/src/archivers/wrp/warp.cpp0000644000175000017500000002525512162366655021130 0ustar glaubitzglaubitz #include #include #include #include #include "sysconfig.h" #include "sysdeps.h" #include "zfile.h" #include "crc32.h" /* based on http://libxad.cvs.sourceforge.net/libxad/libxad/portable/clients/ by Dirk Stoecker */ #define XADERR_ILLEGALDATA 1 #define XADERR_DECRUNCH 2 #define XADERR_NOMEMORY 3 struct rledata { uae_u32 rledatav; }; struct fout { struct zfile *zf; int xio_BitNum; int xio_BitBuf; int err; }; static void putrle (uae_u8 data, struct zfile *out, struct rledata *rled) { int num; uae_u32 a; if (!rled) { zfile_putc (data, out); return; } a = rled->rledatav; if (a & 0x100) /* was RLE mode */ { if (!data || (data == 1 && (a & 0x80000000))) { a = 0x90; num = 1; } else { a &= 0xFF; num = data - 1; } } else if (data == 0x90) { num = 0; a |= 0x100; } else { num = 1; a = data; } rled->rledatav = a; while (num--) zfile_putc (a, out); } static uae_u32 xadIOGetBitsLow(struct fout *io, uae_u8 bits) { uae_u32 x; io->err = 0; while(io->xio_BitNum < bits) { int v = zfile_getc (io->zf); if (v == -1) { io->err = 1; return 0; } io->xio_BitBuf |= v << io->xio_BitNum; io->xio_BitNum += 8; } x = io->xio_BitBuf & ((1<xio_BitBuf >>= bits; io->xio_BitNum -= bits; return x; } #define ARCSQSPEOF 256 /* special endfile token */ #define ARCSQNUMVALS 257 /* 256 data values plus SPEOF */ static uae_s32 ARCunsqueeze(struct zfile *in, struct zfile *out, struct rledata *rled) { uae_s32 err = 0; uae_s32 i, numnodes; uae_s16 *node; struct fout io; io.zf = in; io.xio_BitBuf = 0; io.xio_BitNum = 0; io.err = 0; if((node = (uae_s16 *) xcalloc(uae_s16, 2*ARCSQNUMVALS))) { numnodes = xadIOGetBitsLow(&io, 16); if(numnodes < 0 || numnodes >= ARCSQNUMVALS) err = XADERR_DECRUNCH; else { /* initialize for possible empty tree (SPEOF only) */ node[0] = node[1] = -(ARCSQSPEOF + 1); numnodes *= 2; i = 0; while(i < numnodes && !io.err) /* get decoding tree from file */ { node[i++] = xadIOGetBitsLow(&io, 16); node[i++] = xadIOGetBitsLow(&io, 16); } do { /* follow bit stream in tree to a leaf */ i = 0; while(i >= 0 && !io.err) i = node[2*i + xadIOGetBitsLow(&io, 1)]; i = -(i + 1); /* decode fake node index to original data value */ if(i != ARCSQSPEOF) putrle (i, out, rled); } while(i != ARCSQSPEOF); } xfree(node); } else err = XADERR_NOMEMORY; return err; } #define UCOMPMAXCODE(n) (((uae_u32) 1 << (n)) - 1) #define UCOMPBITS 16 #define UCOMPSTACKSIZE 8000 #define UCOMPFIRST 257 /* first free entry */ #define UCOMPCLEAR 256 /* table clear output code */ #define UCOMPINIT_BITS 9 /* initial number of bits/code */ #define UCOMPBIT_MASK 0x1f #define UCOMPBLOCK_MASK 0x80 struct UCompData { uae_s16 clear_flg; uae_u16 n_bits; /* number of bits/code */ uae_u16 maxbits; /* user settable max # bits/code */ uae_u32 maxcode; /* maximum code, given n_bits */ uae_u32 maxmaxcode; uae_s32 free_ent; uae_s32 offset; uae_s32 size; uae_u16 *tab_prefixof; uae_u8 *tab_suffixof; uae_u8 stack[UCOMPSTACKSIZE]; uae_u8 buf[UCOMPBITS]; int insize; struct rledata *rled; }; /* Read one code from input. If EOF, return -1. */ static uae_s32 UCompgetcode(struct zfile *in, struct UCompData *cd) { uae_s32 code, r_off, bits; uae_u8 *bp = cd->buf; if(cd->clear_flg > 0 || cd->offset >= cd->size || cd->free_ent > cd->maxcode) { /* * If the next entry will be too big for the current code * size, then we must increase the size. This implies reading * a new buffer full, too. */ if(cd->free_ent > cd->maxcode) { if(++cd->n_bits == cd->maxbits) cd->maxcode = cd->maxmaxcode; /* won't get any bigger now */ else cd->maxcode = UCOMPMAXCODE(cd->n_bits); } if(cd->clear_flg > 0) { cd->maxcode = UCOMPMAXCODE(cd->n_bits = UCOMPINIT_BITS); cd->clear_flg = 0; } /* This reads maximum n_bits characters into buf */ cd->size = 0; while(cd->size < cd->n_bits) { int v; if (cd->insize == 0) break; v = zfile_getc (in); if (v == -1) break; cd->insize--; cd->buf[cd->size++] = v; } if(cd->size <= 0) return -1; cd->offset = 0; /* Round size down to integral number of codes */ cd->size = (cd->size << 3) - (cd->n_bits - 1); } r_off = cd->offset; bits = cd->n_bits; /* Get to the first byte. */ bp += (r_off >> 3); r_off &= 7; /* Get first part (low order bits) */ code = (*bp++ >> r_off); bits -= (8 - r_off); r_off = 8 - r_off; /* now, offset into code word */ /* Get any 8 bit parts in the middle (<=1 for up to 16 bits). */ if(bits >= 8) { code |= *bp++ << r_off; r_off += 8; bits -= 8; } /* high order bits. */ code |= (*bp & ((1<offset += cd->n_bits; return code; } static uae_u32 xadIO_Compress(struct zfile *in, struct zfile *out, int insize, struct rledata *rled, uae_u8 bitinfo) { int err = 0; struct UCompData *cd; if((bitinfo & UCOMPBIT_MASK) < UCOMPINIT_BITS) return XADERR_ILLEGALDATA; if((cd = xcalloc(struct UCompData, 1))) { int finchar, code, oldcode, incode, blockcomp; uae_u8 *stackp, *stack, *stackend; stackp = stack = cd->stack; stackend = stack + UCOMPSTACKSIZE; cd->maxbits = bitinfo & UCOMPBIT_MASK; blockcomp = bitinfo & UCOMPBLOCK_MASK; cd->maxmaxcode = 1 << cd->maxbits; cd->maxcode = UCOMPMAXCODE(cd->n_bits = UCOMPINIT_BITS); cd->free_ent = blockcomp ? UCOMPFIRST : 256; cd->insize = insize; cd->rled = rled; if((cd->tab_prefixof = xcalloc(uae_u16, cd->maxmaxcode))) { if((cd->tab_suffixof = xcalloc(uae_u8, cd->maxmaxcode))) { /* Initialize the first 256 entries in the table. */ for(code = 255; code >= 0; code--) cd->tab_suffixof[code] = code; if((finchar = oldcode = UCompgetcode(in, cd)) == -1) err = XADERR_DECRUNCH; else { putrle (finchar, out, cd->rled); /* first code must be 8 bits = uae_u8 */ while((code = UCompgetcode(in, cd)) > -1) { if((code == UCOMPCLEAR) && blockcomp) { for(code = 255; code >= 0; code--) cd->tab_prefixof[code] = 0; cd->clear_flg = 1; cd->free_ent = UCOMPFIRST - 1; if((code = UCompgetcode(in, cd)) == -1) break; /* O, untimely death! */ } incode = code; /* Special case for KwKwK string. */ if(code >= cd->free_ent) { if(code > cd->free_ent) { err = XADERR_ILLEGALDATA; break; } *stackp++ = finchar; code = oldcode; } /* Generate output characters in reverse order */ while(stackp < stackend && code >= 256) { *stackp++ = cd->tab_suffixof[code]; code = cd->tab_prefixof[code]; } if(stackp >= stackend) { err = XADERR_ILLEGALDATA; break; } *(stackp++) = finchar = cd->tab_suffixof[code]; /* And put them out in forward order */ do { putrle (*(--stackp), out, cd->rled); } while(stackp > stack); /* Generate the new entry. */ if((code = cd->free_ent) < cd->maxmaxcode) { cd->tab_prefixof[code] = (uae_u16) oldcode; cd->tab_suffixof[code] = finchar; cd->free_ent = code+1; } /* Remember previous code. */ oldcode = incode; } } xfree (cd->tab_suffixof); } else err = XADERR_NOMEMORY; xfree(cd->tab_prefixof); } else err = XADERR_NOMEMORY; xfree(cd); } else err = XADERR_NOMEMORY; return err; } static void MakeCRC16(uae_u16 *buf, uae_u16 ID) { uae_u16 i, j, k; for(i = 0; i < 256; ++i) { k = i; for(j = 0; j < 8; ++j) { if(k & 1) k = (k >> 1) ^ ID; else k >>= 1; } buf[i] = k; } } static uae_u16 wrpcrc16 (uae_u16 *tab, uae_u8 *buf, int len) { uae_u16 crc = 0; while (len-- > 0) crc = tab[(crc ^ *buf++) & 0xFF] ^ (crc >> 8); return crc; } static int iswrp (uae_u8 *data) { if(data[0] == 'W' && data[1] == 'a' && data[2] == 'r' && data[3] == 'p' && data[4] == ' ' && data[5] == 'v' && data[6] == '1' && data[7] == '.' && data[8] == '1' && !data[9] && !data[18] && data[19] <= 3) return 1; return 0; } #define COMPBUF 30000 struct zfile *unwarp(struct zfile *zf) { int err = 0; uae_u8 buf[26] = { 0 }; int algo, side, track; int pos, dstpos, olddstpos; uae_u16 crc; uae_u32 size; struct zfile *nf = NULL, *tmpf = NULL; uae_u8 *zero, *data; int outsize = 11 * 512; int outsize2 = 11 * (512 + 16); struct rledata rled; uae_u16 wrpcrc16table[256]; MakeCRC16 (wrpcrc16table, 0xa001); zero = xcalloc (uae_u8, outsize2); olddstpos = 0; for (;;) { if (zfile_fread (buf, sizeof buf, 1, zf) == 0) break; if (!iswrp (buf)) break; if (!nf) { nf = zfile_fopen_empty (zf, _T("zipped.wrp"), 1760 * 512); tmpf = zfile_fopen_empty (zf, _T("tmp"), outsize2); } track = (buf[10] << 8) | buf[11]; algo = buf[19]; side = -1; if (!memcmp (buf + 12, "BOT\0", 4)) side = 1; if (!memcmp (buf + 12, "TOP\0", 4)) side = 0; crc = (buf[20] << 8) | buf[21]; pos = zfile_ftell (zf); dstpos = -1; if (side >= 0 && track >= 0 && track <= 79) dstpos = track * 22 * 512 + (side * 11 * 512); zfile_fseek (tmpf, 0, SEEK_SET); zfile_fwrite (zero, outsize2, 1, tmpf); zfile_fseek (tmpf, 0, SEEK_SET); size = (buf[22] << 24) | (buf[23] << 16) | (buf[24] << 8) | buf[25]; err = 0; memset (&rled, 0, sizeof rled); switch (algo) { case 1: if (zfile_getc (zf) != 12) err = XADERR_ILLEGALDATA; else err = xadIO_Compress (zf, tmpf, size - 1, &rled, 12 | UCOMPBLOCK_MASK); break; case 2: err = ARCunsqueeze (zf, tmpf, &rled); break; case 0: case 3: { int i; for (i = 0; i < size; i++) { uae_u8 v = zfile_getc (zf); putrle (v, tmpf, algo == 3 ? &rled : NULL); } } break; default: write_log (_T("WRP unknown compression method %d, track=%d,size=%d\n"), algo, track, side); goto end; break; } if (err) { write_log (_T("WRP corrupt data, track=%d,side=%d,err=%d\n"), track, side, err); } else { uae_u16 crc2; int os = zfile_ftell (tmpf); data = zfile_getdata (tmpf, 0, os); crc2 = wrpcrc16 (wrpcrc16table, data, os); if (crc != crc2) write_log (_T("WRP crc error %04x<>%04x, track=%d,side=%d\n"), crc, crc2, track, side); xfree (data); } if (dstpos >= 0) { zfile_fseek (nf, dstpos, SEEK_SET); data = zfile_getdata (tmpf, 0, outsize); zfile_fwrite (data, outsize, 1, nf); } zfile_fseek (zf, pos + size, SEEK_SET); } end: xfree (zero); zfile_fclose (tmpf); if (nf) { zfile_fclose (zf); zf = nf; } return zf; } fs-uae-2.2.3+dfsg/src/ersatz.cpp0000644000175000017500000001427112162366655016665 0ustar glaubitzglaubitz/* * UAE - The Un*x Amiga Emulator * * A "replacement" for a missing Kickstart * Warning! Q&D * * (c) 1995 Bernd Schmidt */ #include "sysconfig.h" #include "sysdeps.h" #include "options.h" #include "uae.h" #include "uae/memory.h" #include "custom.h" #include "newcpu.h" #include "cpu_prefetch.h" #include "cia.h" #include "disk.h" #include "ersatz.h" #include "gui.h" #define EOP_INIT 0 #define EOP_NIMP 1 #define EOP_SERVEINT 2 #define EOP_DOIO 3 #define EOP_OPENLIB 4 #define EOP_AVAILMEM 5 #define EOP_ALLOCMEM 6 #define EOP_ALLOCABS 7 #define EOP_LOOP 8 static int already_failed = 0; void init_ersatz_rom (uae_u8 *data) { uae_u8 *end = data + 262144 - 16; /* cpu emulation uses these now */ end[1] = 0x18; end[3] = 0x19; end[5] = 0x1a; end[7] = 0x1b; end[9] = 0x1c; end[11] = 0x1d; end[13] = 0x1e; end[15] = 0x1f; *data++ = 0x00; *data++ = 0x08; /* initial SP */ *data++ = 0x00; *data++ = 0x00; *data++ = 0x00; *data++ = 0xF8; /* initial PC */ *data++ = 0x00; *data++ = 0x08; *data++ = 0xFF; *data++ = 0x0D; *data++ = 0x00; *data++ = EOP_INIT; *data++ = 0xFF; *data++ = 0x0D; *data++ = 0x00; *data++ = EOP_NIMP; *data++ = 0xFF; *data++ = 0x0D; *data++ = 0x00; *data++ = EOP_LOOP; *data++ = 0xFF; *data++ = 0x0D; *data++ = 0x00; *data++ = EOP_DOIO; *data++ = 0x4E; *data++ = 0x75; *data++ = 0xFF; *data++ = 0x0D; *data++ = 0x00; *data++ = EOP_SERVEINT; *data++ = 0x4E; *data++ = 0x73; *data++ = 0xFF; *data++ = 0x0D; *data++ = 0x00; *data++ = EOP_AVAILMEM; *data++ = 0x4E; *data++ = 0x75; *data++ = 0xFF; *data++ = 0x0D; *data++ = 0x00; *data++ = EOP_ALLOCMEM; *data++ = 0x4E; *data++ = 0x75; *data++ = 0xFF; *data++ = 0x0D; *data++ = 0x00; *data++ = EOP_ALLOCABS; *data++ = 0x4E; *data++ = 0x75; } void ersatz_chipcopy (void) { /* because CPU emulation is updated and retrieves SP and PC from chip ram */ memcpy (chipmemory, kickmemory, 256); } static void ersatz_failed (void) { if (already_failed) return; already_failed = 1; notify_user (NUMSG_KICKREPNO); uae_restart (-1, NULL); } static void ersatz_doio (void) { uaecptr request = m68k_areg (regs, 1); switch (get_word (request + 0x1C)) { case 9: /* TD_MOTOR is harmless */ return; case 2: case 0x8002: /* READ commands */ break; default: write_log (_T("Only CMD_READ supported in DoIO()\n")); ersatz_failed (); } { uaecptr dest = get_long (request + 0x28); int start = get_long (request + 0x2C) / 512; int nsecs = get_long (request + 0x24) / 512; int tr = start / 11; int sec = start % 11; while (nsecs--) { DISK_ersatz_read (tr, sec, dest); dest += 512; if (++sec == 11) sec = 0, tr++; } } } static void ersatz_init (void) { int f; uaecptr request; uaecptr a; already_failed = 0; write_log (_T("initializing kickstart replacement\n")); if (disk_empty (0)) { already_failed = 1; notify_user (NUMSG_KICKREP); uae_restart (-1, NULL); return; } regs.s = 0; /* Set some interrupt vectors */ for (a = 8; a < 0xC0; a += 4) { put_long (a, 0xF8001A); } regs.isp = regs.msp = regs.usp = 0x800; m68k_areg (regs, 7) = 0x80000; regs.intmask = 0; /* Build a dummy execbase */ put_long (4, m68k_areg (regs, 6) = 0x676); put_byte (0x676 + 0x129, 0); for (f = 1; f < 105; f++) { put_word (0x676 - 6*f, 0x4EF9); put_long (0x676 - 6*f + 2, 0xF8000C); } /* Some "supported" functions */ put_long (0x676 - 456 + 2, 0xF80014); put_long (0x676 - 216 + 2, 0xF80020); put_long (0x676 - 198 + 2, 0xF80026); put_long (0x676 - 204 + 2, 0xF8002c); put_long (0x676 - 210 + 2, 0xF8002a); /* Build an IORequest */ request = 0x800; put_word (request + 0x1C, 2); put_long (request + 0x28, 0x4000); put_long (request + 0x2C, 0); put_long (request + 0x24, 0x200 * 4); m68k_areg (regs, 1) = request; ersatz_doio (); /* kickstart disk loader */ if (get_long (0x4000) == 0x4b49434b) { /* a kickstart disk was found in drive 0! */ write_log (_T("Loading Kickstart rom image from Kickstart disk\n")); /* print some notes... */ write_log (_T("NOTE: if UAE crashes set CPU to 68000 and/or chipmem size to 512KB!\n")); /* read rom image from kickstart disk */ put_word (request + 0x1C, 2); put_long (request + 0x28, 0xF80000); put_long (request + 0x2C, 0x200); put_long (request + 0x24, 0x200 * 512); m68k_areg (regs, 1) = request; ersatz_doio (); /* read rom image once again to mirror address space. not elegant, but it works... */ put_word (request + 0x1C, 2); put_long (request + 0x28, 0xFC0000); put_long (request + 0x2C, 0x200); put_long (request + 0x24, 0x200 * 512); m68k_areg (regs, 1) = request; ersatz_doio (); disk_eject (0); m68k_setpc (0xFC0002); fill_prefetch (); uae_reset (0, 1); // FIXME: keyboardreset 0 or 1? ersatzkickfile = 0; return; } m68k_setpc (0x400C); fill_prefetch (); /* Init the hardware */ put_long (0x3000, 0xFFFFFFFEul); put_long (0xDFF080, 0x3000); put_word (0xDFF088, 0); put_word (0xDFF096, 0xE390); put_word (0xDFF09A, 0xE02C); put_word (0xDFF09E, 0x0000); put_word (0xDFF092, 0x0038); put_word (0xDFF094, 0x00D0); put_word (0xDFF08E, 0x2C81); put_word (0xDFF090, 0xF4C1); put_word (0xDFF02A, 0x8000); put_byte (0xBFD100, 0xF7); put_byte (0xBFEE01, 0); put_byte (0xBFEF01, 0x08); put_byte (0xBFDE00, 0x04); put_byte (0xBFDF00, 0x84); put_byte (0xBFDD00, 0x9F); put_byte (0xBFED01, 0x9F); } void ersatz_perform (uae_u16 what) { switch (what) { case EOP_INIT: ersatz_init (); break; case EOP_SERVEINT: { uae_u16 intreq = get_word (0xDFF01E); /* Just reset all the interrupt request bits */ if (intreq & 0x0008) get_byte (0xbfed01); /* possible keyboard interrupt */ put_word (0xDFF09C, intreq & 0x3FFF); break; } case EOP_DOIO: ersatz_doio (); break; case EOP_AVAILMEM: m68k_dreg (regs, 0) = m68k_dreg (regs, 1) & 4 ? 0 : 0x70000; break; case EOP_ALLOCMEM: m68k_dreg (regs, 0) = m68k_dreg (regs, 1) & 4 ? 0 : 0x0F000; break; case EOP_ALLOCABS: m68k_dreg (regs, 0) = m68k_areg (regs, 1); break; case EOP_NIMP: write_log (_T("Unimplemented Kickstart function called\n")); ersatz_failed (); /* fall through */ case EOP_LOOP: m68k_setpc (0xF80010); break; case EOP_OPENLIB: default: write_log (_T("Internal error. Giving up.\n")); ersatz_failed (); } } fs-uae-2.2.3+dfsg/src/uaelib.cpp0000644000175000017500000002420212162366654016610 0ustar glaubitzglaubitz/* * UAE - The U*nix Amiga Emulator * * UAE Library v0.1 * * (c) 1996 Tauno Taipaleenmaki * * Change UAE parameters and other stuff from inside the emulation. */ #include "sysconfig.h" #include "sysdeps.h" #include #include #include "options.h" #include "uae.h" #include "uae/memory.h" #include "custom.h" #include "newcpu.h" #include "xwin.h" #include "autoconf.h" #include "traps.h" #include "disk.h" #include "debug.h" #include "gensound.h" #include "picasso96.h" #include "filesys.h" /* * Returns UAE Version */ static uae_u32 emulib_GetVersion (void) { return version; } /* * Resets your amiga */ static uae_u32 emulib_HardReset (void) { uae_reset(1, 1); return 0; } static uae_u32 emulib_Reset (void) { uae_reset(0, 0); return 0; } /* * Enables SOUND */ static uae_u32 emulib_EnableSound (uae_u32 val) { if (!sound_available || currprefs.produce_sound == 2) return 0; currprefs.produce_sound = val; return 1; } /* * Enables FAKE JOYSTICK */ static uae_u32 emulib_EnableJoystick (uae_u32 val) { currprefs.jports[0].id = val & 255; currprefs.jports[1].id = (val >> 8) & 255; return 1; } /* * Sets the framerate */ static uae_u32 emulib_SetFrameRate (uae_u32 val) { if (val == 0) return 0; else if (val > 20) return 0; else { currprefs.gfx_framerate = val; return 1; } } /* * Changes keyboard language settings */ static uae_u32 emulib_ChangeLanguage (uae_u32 which) { if (which > 6) return 0; else { switch (which) { case 0: currprefs.keyboard_lang = KBD_LANG_US; break; case 1: currprefs.keyboard_lang = KBD_LANG_DK; break; case 2: currprefs.keyboard_lang = KBD_LANG_DE; break; case 3: currprefs.keyboard_lang = KBD_LANG_SE; break; case 4: currprefs.keyboard_lang = KBD_LANG_FR; break; case 5: currprefs.keyboard_lang = KBD_LANG_IT; break; case 6: currprefs.keyboard_lang = KBD_LANG_ES; break; default: break; } return 1; } } /* The following ones don't work as we never realloc the arrays... */ /* * Changes chip memory size * (reboots) */ static uae_u32 REGPARAM2 emulib_ChgCMemSize (uae_u32 memsize) { if (memsize != 0x80000 && memsize != 0x100000 && memsize != 0x200000) { memsize = 0x200000; write_log (_T("Unsupported chipmem size!\n")); } m68k_dreg (regs, 0) = 0; changed_prefs.chipmem_size = memsize; uae_reset(1, 1); return 1; } /* * Changes slow memory size * (reboots) */ static uae_u32 REGPARAM2 emulib_ChgSMemSize (uae_u32 memsize) { if (memsize != 0x80000 && memsize != 0x100000 && memsize != 0x180000 && memsize != 0x1C0000) { memsize = 0; write_log (_T("Unsupported bogomem size!\n")); } m68k_dreg (regs, 0) = 0; changed_prefs.bogomem_size = memsize; uae_reset (1, 1); return 1; } /* * Changes fast memory size * (reboots) */ static uae_u32 REGPARAM2 emulib_ChgFMemSize (uae_u32 memsize) { if (memsize != 0x100000 && memsize != 0x200000 && memsize != 0x400000 && memsize != 0x800000) { memsize = 0; write_log (_T("Unsupported fastmem size!\n")); } m68k_dreg (regs, 0) = 0; changed_prefs.fastmem_size = memsize; uae_reset (1, 1); return 0; } /* * Inserts a disk */ static uae_u32 emulib_InsertDisk (uaecptr name, uae_u32 drive) { int i = 0; char real_name[256]; TCHAR *s; if (drive > 3) return 0; while ((real_name[i] = get_byte (name + i)) != 0 && i++ != 254) ; if (i == 255) return 0; /* ENAMETOOLONG */ s = au (real_name); _tcscpy (changed_prefs.floppyslots[drive].df, s); xfree (s); return 1; } /* * Exits the emulator */ static uae_u32 emulib_ExitEmu (void) { uae_quit (); return 1; } /* * Gets UAE Configuration */ static uae_u32 emulib_GetUaeConfig (uaecptr place) { int i, j; put_long (place, version); put_long (place + 4, allocated_chipmem); put_long (place + 8, allocated_bogomem); put_long (place + 12, allocated_fastmem); put_long (place + 16, currprefs.gfx_framerate); put_long (place + 20, currprefs.produce_sound); put_long (place + 24, currprefs.jports[0].id | (currprefs.jports[1].id << 8)); put_long (place + 28, currprefs.keyboard_lang); if (disk_empty (0)) put_byte (place + 32, 0); else put_byte (place + 32, 1); if (disk_empty (1)) put_byte (place + 33, 0); else put_byte (place + 33, 1); if (disk_empty(2)) put_byte (place + 34, 0); else put_byte (place + 34, 1); if (disk_empty(3)) put_byte (place + 35, 0); else put_byte (place + 35, 1); for (j = 0; j < 4; j++) { char *s = ua (currprefs.floppyslots[j].df); for (i = 0; i < 256; i++) put_byte (place + 36 + i + j * 256, s[i]); xfree (s); } return 1; } /* * Sets UAE Configuration * * NOT IMPLEMENTED YET */ static uae_u32 emulib_SetUaeConfig (uaecptr place) { return 1; } /* * Gets the name of the disk in the given drive */ static uae_u32 emulib_GetDisk (uae_u32 drive, uaecptr name) { int i; if (drive > 3) return 0; for (i = 0; i < 256; i++) { put_byte (name + i, currprefs.floppyslots[drive].df[i]); } return 1; } /* * Enter debugging state */ static uae_u32 emulib_Debug (void) { #ifdef DEBUGGER activate_debugger (); return 1; #else return 0; #endif } #define CREATE_NATIVE_FUNC_PTR uae_u32 (* native_func) (uae_u32, uae_u32, uae_u32, uae_u32, uae_u32, uae_u32, uae_u32, \ uae_u32, uae_u32, uae_u32, uae_u32, uae_u32, uae_u32) #define SET_NATIVE_FUNC(x) native_func = (uae_u32 (*)(uae_u32, uae_u32, uae_u32, uae_u32, uae_u32, uae_u32, uae_u32, uae_u32, uae_u32, uae_u32, uae_u32, uae_u32, uae_u32))(x) #define CALL_NATIVE_FUNC( d1,d2,d3,d4,d5,d6,d7,a1,a2,a3,a4,a5,a6 ) if(native_func) native_func( d1,d2,d3,d4,d5,d6,d7,a1,a2,a3,a4,a5,a6 ) /* A0 - Contains a ptr to the native .obj data. This ptr is Amiga-based. */ /* We simply find the first function in this .obj data, and execute it. */ static uae_u32 REGPARAM2 emulib_ExecuteNativeCode (void) { #if 0 uaecptr object_AAM = m68k_areg (regs, 0); uae_u32 d1 = m68k_dreg (regs, 1); uae_u32 d2 = m68k_dreg (regs, 2); uae_u32 d3 = m68k_dreg (regs, 3); uae_u32 d4 = m68k_dreg (regs, 4); uae_u32 d5 = m68k_dreg (regs, 5); uae_u32 d6 = m68k_dreg (regs, 6); uae_u32 d7 = m68k_dreg (regs, 7); uae_u32 a1 = m68k_areg (regs, 1); uae_u32 a2 = m68k_areg (regs, 2); uae_u32 a3 = m68k_areg (regs, 3); uae_u32 a4 = m68k_areg (regs, 4); uae_u32 a5 = m68k_areg (regs, 5); uae_u32 a6 = m68k_areg (regs, 6); uae_u8* object_UAM = NULL; CREATE_NATIVE_FUNC_PTR; if (get_mem_bank(object_AAM).check (object_AAM, 1)) object_UAM = get_mem_bank (object_AAM).xlateaddr (object_AAM); if (object_UAM) { SET_NATIVE_FUNC (FindFunctionInObject (object_UAM)); CALL_NATIVE_FUNC (d1, d2, d3, d4, d5, d6, d7, a1, a2, a3, a4, a5, a6); } return 1; #endif return 0; } static uae_u32 emulib_Minimize (void) { return 0; // OSDEP_minimize_uae(); } static int native_dos_op (uae_u32 mode, uae_u32 p1, uae_u32 p2, uae_u32 p3) { TCHAR tmp[MAX_DPATH]; char *s; int v, i; if (mode) return -1; /* receive native path from lock * p1 = dos.library:Lock, p2 = buffer, p3 = max buffer size */ v = get_native_path (p1, tmp); if (v) return v; s = ua (tmp); for (i = 0; i <= strlen (s) && i < p3 - 1; i++) { put_byte (p2 + i, s[i]); put_byte (p2 + i + 1, 0); } xfree (s); return 0; } extern uae_u32 picasso_demux (uae_u32 arg, TrapContext *context); static uae_u32 REGPARAM2 uaelib_demux2 (TrapContext *context) { #define ARG0 (get_long (m68k_areg (regs, 7) + 4)) #define ARG1 (get_long (m68k_areg (regs, 7) + 8)) #define ARG2 (get_long (m68k_areg (regs, 7) + 12)) #define ARG3 (get_long (m68k_areg (regs, 7) + 16)) #define ARG4 (get_long (m68k_areg (regs, 7) + 20)) #define ARG5 (get_long (m68k_areg (regs, 7) + 24)) #ifdef PICASSO96 if (ARG0 >= 16 && ARG0 <= 39) return picasso_demux (ARG0, context); #endif switch (ARG0) { case 0: return emulib_GetVersion (); case 1: return emulib_GetUaeConfig (ARG1); case 2: return emulib_SetUaeConfig (ARG1); case 3: return emulib_HardReset (); case 4: return emulib_Reset (); case 5: return emulib_InsertDisk (ARG1, ARG2); case 6: return emulib_EnableSound (ARG1); case 7: return emulib_EnableJoystick (ARG1); case 8: return emulib_SetFrameRate (ARG1); case 9: return emulib_ChgCMemSize (ARG1); case 10: return emulib_ChgSMemSize (ARG1); case 11: return emulib_ChgFMemSize (ARG1); case 12: return emulib_ChangeLanguage (ARG1); /* The next call brings bad luck */ case 13: return emulib_ExitEmu (); case 14: return emulib_GetDisk (ARG1, ARG2); case 15: return emulib_Debug (); case 68: return emulib_Minimize (); case 69: return emulib_ExecuteNativeCode (); case 70: return 0; /* RESERVED. Something uses this.. */ case 80: if (!currprefs.maprom) return 0xffffffff; /* Disable possible ROM protection */ unprotect_maprom (); return currprefs.maprom; case 81: return cfgfile_uaelib (ARG1, ARG2, ARG3, ARG4); case 82: return cfgfile_uaelib_modify (ARG1, ARG2, ARG3, ARG4, ARG5); case 83: currprefs.mmkeyboard = ARG1 ? 1 : 0; return currprefs.mmkeyboard; #ifdef DEBUGGER case 84: return mmu_init (ARG1, ARG2, ARG3); #endif case 85: return native_dos_op (ARG1, ARG2, ARG3, ARG4); case 86: if (valid_address (ARG1, 1)) { TCHAR *s = au ((char*)get_real_address (ARG1)); write_log (_T("DBG: %s\n"), s); xfree (s); return 1; } return 0; case 87: { uae_u32 d0, d1; d0 = emulib_target_getcpurate (ARG1, &d1); m68k_dreg (regs, 1) = d1; return d0; } } return 0; } extern int uaelib_debug; static uae_u32 REGPARAM2 uaelib_demux (TrapContext *context) { uae_u32 v; struct regstruct *r = ®s; if (uaelib_debug) write_log (_T("%d: %08x %08x %08x %08x %08x %08x %08x %08x, %08x %08x %08x %08x %08x %08x %08x %08x\n"), ARG0, r->regs[0],r->regs[1],r->regs[2],r->regs[3],r->regs[4],r->regs[5],r->regs[6],r->regs[7], r->regs[8],r->regs[9],r->regs[10],r->regs[11],r->regs[12],r->regs[13],r->regs[14],r->regs[15]); v = uaelib_demux2 (context); if (uaelib_debug) write_log (_T("=%08x\n"), v); return v; } /* * Installs the UAE LIBRARY */ void emulib_install (void) { uaecptr a; if (!uae_boot_rom) return; a = here (); currprefs.mmkeyboard = 0; org (rtarea_base + 0xFF60); #if 0 dw (0x4eb9); dw ((rtarea_base >> 16) | get_word (rtarea_base + 36)); dw (get_word (rtarea_base + 38) + 12); #endif calltrap (deftrapres (uaelib_demux, 0, _T("uaelib_demux"))); dw (RTS); org (a); } fs-uae-2.2.3+dfsg/src/scsidev.cpp0000644000175000017500000005222412162366655017015 0ustar glaubitzglaubitz /* * UAE - The Un*x Amiga Emulator * * a SCSI device * * Copyright 1995 Bernd Schmidt * Copyright 1999 Patrick Ohly */ #include "sysconfig.h" #include "sysdeps.h" #include "config.h" #include "threaddep/thread.h" #include "options.h" #include "uae/memory.h" #include "custom.h" #include "newcpu.h" #include "disk.h" #include "autoconf.h" #include "filesys.h" #include "execlib.h" #include "native2amiga.h" #include "scsidev.h" #include /* the new libscg should always have a scsi_close */ #ifndef SCSI_CLOSE #define SCSI_CLOSE #endif typedef int BOOL; #include "scg/scgcmd.h" #include "scg/scsitransp.h" #include "scg/scsireg.h" /* our configure does not have a seperate UAE_SCSIDEV_THREADS */ #if defined(UAE_FILESYS_THREADS) && !defined(SCSI_IS_NOT_THREAD_SAFE) #define UAE_SCSIDEV_THREADS #endif #undef DEBUGME /****************** generic SCSI stuff stolen from cdrecord and scsitransp.c ***********/ static int scsierr(SCSI *scgp) { register struct scg_cmd *cp = scgp->scmd; if(cp->error != SCG_NO_ERROR || cp->ux_errno != 0 || *(u_char *)&cp->scb != 0) return -1; return 0; } static int inquiry (SCSI *scgp, void *bp, int cnt) { struct scg_cmd *scmd = scgp->scmd; memset(bp, cnt, '\0'); memset((caddr_t)scmd, sizeof(*scmd), '\0'); scmd->addr = bp; scmd->size = cnt; scmd->flags = SCG_RECV_DATA|SCG_DISRE_ENA; scmd->cdb_len = SC_G0_CDBLEN; scmd->sense_len = CCS_SENSE_LEN; scmd->target = scgp->target; scmd->cdb.g0_cdb.cmd = SC_INQUIRY; scmd->cdb.g0_cdb.lun = scgp->lun; scmd->cdb.g0_cdb.count = cnt; scgp->cmdname = "inquiry"; if (scsicmd(scgp) < 0) return (-1); return (0); } static void print_product(struct scsi_inquiry *ip) { write_log ("'%.8s' ", ip->info); write_log ("'%.16s' ", ip->ident); write_log ("'%.4s' ", ip->revision); if (ip->add_len < 31) { write_log ("NON CCS "); } } /* get integer value from env or return default value, if unset */ static int getenvint (const char *varname, int def) { const char *val = getenv (varname); return val ? atoi (val) : def; } /* wrapper for the underlying combination of scsi_smalloc()/scsi_open() */ static SCSI *openscsi (int scsibus, int target, int lun) { SCSI *scgp = scsi_smalloc (); if (!scgp) { return NULL; } scgp->debug = getenvint ("UAE_SCSI_DEBUG", 0); scgp->kdebug = getenvint ("UAE_SCSI_KDEBUG", 0); scgp->silent = getenvint ("UAE_SCSI_SILENT", 1); scgp->verbose = getenvint ("UAE_SCSI_VERBOSE", 0); scgp->scsibus = scsibus; scgp->target = target; scgp->lun = lun; if (!scsi_open(scgp, NULL, scsibus, target, lun)) { scsi_sfree (scgp); return NULL; } else { return scgp; } } static void closescsi (SCSI *scgp) { scsi_close (scgp); scsi_sfree (scgp); } /********************* start of our own code ************************/ static int opencount = 0; static SCSI *scgp; /* SCSI handle which is to be used by the main thread */ uae_sem_t scgp_sem; /****************** unit handling *******************/ struct scsidevdata { int bus, target, lun; /* the real values */ int aunit; /* Amiga unit number, by default calculated like that: */ #define BTL2UNIT(bus, target, lun) \ (2 * (bus) + (target) / 8) * 100 + \ (lun) * 10 + \ (target % 8) SCSI *scgp; long max_dma; int isatapi; #ifdef UAE_SCSIDEV_THREADS /* Threading stuff */ smp_comm_pipe requests; uae_thread_id tid; int thread_running; uae_sem_t sync_sem; #endif }; #define MAX_DRIVES 16 static struct scsidevdata drives[MAX_DRIVES]; static int num_drives; static struct scsidevdata *get_scsidev_data (int unit) { int i; for (i = 0; i < num_drives; i++) { if (unit == drives[i].aunit) { return &drives[i]; } } return NULL; } static struct scsidevdata *add_scsidev_data (int bus, int target, int lun, int aunit) { if (num_drives + 1 < MAX_DRIVES) { memset(&drives[num_drives], 0, sizeof(drives[num_drives])); drives[num_drives].bus = bus; drives[num_drives].target = target; drives[num_drives].lun = lun; drives[num_drives].aunit = aunit; #if !defined(UAE_SCSIDEV_THREADS) drives[num_drives].scgp = scgp; drives[num_drives].max_dma = scsi_bufsize (scgp, 512 * 1024); #endif /* check if this drive is an ATAPI drive */ scgp->scsibus = bus; scgp->target = target; scgp->lun = lun; drives[num_drives].isatapi = scsi_isatapi (scgp); return &drives[num_drives++]; } return NULL; } static void *scsidev_thread(void *); static int start_thread (struct scsidevdata *sdd) { #ifdef UAE_SCSIDEV_THREADS if (sdd->thread_running) return 1; init_comm_pipe (&sdd->requests, 10, 1); uae_sem_init (&sdd->sync_sem, 0, 0); uae_start_thread (scsidev_thread, sdd, &sdd->tid); uae_sem_wait (&sdd->sync_sem); return sdd->thread_running; #else return 1; #endif } /************* Exec device functions ****************/ static uae_u32 scsidev_open (void) { uaecptr tmp1 = m68k_areg (regs, 1); /* IOReq */ uae_u32 unit = m68k_dreg (regs, 0); struct scsidevdata *sdd; #ifdef DEBUGME printf("scsidev_open(0x%x, %d)\n", tmp1, unit); #endif /* Check unit number */ if ((sdd = get_scsidev_data (unit)) && start_thread (sdd)) { opencount++; put_word (m68k_areg (regs, 6)+32, get_word (m68k_areg (regs, 6)+32) + 1); put_long (tmp1 + 24, unit); /* io_Unit */ put_byte (tmp1 + 31, 0); /* io_Error */ put_byte (tmp1 + 8, 7); /* ln_type = NT_REPLYMSG */ return 0; } put_long (tmp1 + 20, (uae_u32)-1); put_byte (tmp1 + 31, (uae_u8)-1); return (uae_u32)-1; } static uae_u32 scsidev_close (void) { #ifdef DEBUGME printf("scsidev_close()\n"); #endif opencount--; put_word (m68k_areg (regs, 6) + 32, get_word (m68k_areg (regs, 6) + 32) - 1); return 0; } static uae_u32 scsidev_expunge (void) { #ifdef DEBUGME printf("scsidev_expunge()\n"); #endif return 0; /* Simply ignore this one... */ } #define MODE_SELECT_6 0x15 #define MODE_SENSE_6 0x1A #ifndef MODE_SENSE_10 #define MODE_SELECT_10 0x55 #define MODE_SENSE_10 0x5A #endif #ifdef DEBUG_CDR /* please ignore this code - it can be used to debug raw CD-R writing... */ /* ** convert time in (BCD) min:sec:frame to block address */ typedef signed char BYTE; typedef unsigned char UBYTE; typedef long LONG; typedef BYTE BCD; typedef BYTE WORD[2]; #define BCD_DEC(x) (((x) >> 4) * 10 + ((x) & 0xF)) static LONG TestNegativeTime(LONG block) { /* block -151 == 99:59:74 -150 == 100:00:00 = 00:00:00 */ if (block > (97 * 60 * 75)) { /* must be a negative block */ block -= 100 * 60 * 75; } return block; } static LONG BCDTime2Block(UBYTE min, UBYTE sec, UBYTE frame) { return(TestNegativeTime((LONG)((BCD_DEC(min) * 60 + BCD_DEC(sec)) * 75 + BCD_DEC(frame) - 2 * 75))); } static LONG Time2Block(UBYTE min, UBYTE sec, UBYTE frame) { return(TestNegativeTime((LONG)((min * 60 + sec) * 75 + frame - 2 * 75))); } static LONG BCDTime2Block_Pointer (UBYTE *p) { return BCDTime2Block (p[0], p[1], p[2]); } static LONG Time2Block_Pointer (UBYTE *p) { return Time2Block (p[0], p[1], p[2]); } #endif static void scsidev_do_scsi (struct scsidevdata *sdd, uaecptr request) { SCSI *scgp = sdd->scgp; struct scg_cmd *scmd = scgp->scmd; uaecptr acmd = get_long (request + 40); uaecptr scsi_data = get_long (acmd + 0); uae_u32 scsi_len = get_long (acmd + 4); uaecptr scsi_cmd = get_long (acmd + 12); uae_u16 scsi_cmd_len = get_word (acmd + 16); uae_u8 scsi_flags = get_byte (acmd + 20); uaecptr scsi_sense = get_long (acmd + 22); uae_u16 scsi_sense_len = get_word (acmd + 26); int sactual = 0; addrbank *bank_data = &get_mem_bank (scsi_data); addrbank *bank_cmd = &get_mem_bank (scsi_cmd); /* do transfer directly to and from Amiga memory */ if (!bank_data || !bank_data->check (scsi_data, scsi_len) || !bank_cmd || !bank_cmd->check (scsi_cmd, scsi_cmd_len)) { put_byte (request + 31, (uae_u8)-5); /* IOERR_BADADDRESS */ return; } #ifdef SCSI_IS_NOT_THREAD_SAFE uae_sem_wait (&scgp_sem); #endif scmd->timeout = 80 * 60; /* the Amiga does not tell us how long the timeout shall be, so make it _very_ long (specified in seconds) */ scmd->addr = bank_data->xlateaddr (scsi_data); scmd->size = scsi_len; scmd->flags = ((scsi_flags & 1) ? SCG_RECV_DATA : 0) | SCG_DISRE_ENA; scmd->cdb_len = scsi_cmd_len; memcpy(&scmd->cdb, bank_cmd->xlateaddr (scsi_cmd), scsi_cmd_len); scmd->target = sdd->target; scmd->sense_len = (scsi_flags & 4) ? 4 : /* SCSIF_OLDAUTOSENSE */ (scsi_flags & 2) ? scsi_sense_len : /* SCSIF_AUTOSENSE */ -1; scmd->sense_count = 0; *(uae_u8 *)&scmd->scb = 0; #ifdef DEBUG_CDR /* please ignore this code - it can be used to debug raw CD-R writing... */ if (!(scsi_len % 2368)) { /* Structure for generating bytes 2353...2368 if writing in ultra raw mode */ typedef struct QDATAtag { BYTE ControlAdr; BCD Tno; BCD Point; BCD Min; BCD Sec; BCD Frame; BYTE Zero; BCD PMin; BCD PSec; BCD PFrame; WORD Crc; BYTE Reserved[3]; BYTE PChannel; } QDATA; int i = scsi_len / 2368; QDATA *data = (QDATA *)&((unsigned char *)scmd->addr)[2352]; for (; i > 0; i--, data = (QDATA *)&((unsigned char *)data)[2368]) { printf ("$%02x: $%02x $%02x | $%02x:$%02x:$%02x = %6ld | $%02x | $%02x:$%02x:$%02x = %6ld\n", (int)data->ControlAdr, (int)*(UBYTE *)&data->Tno, (int)*(UBYTE *)&data->Point, (int)*(UBYTE *)&data->Min, (int)*(UBYTE *)&data->Sec, (int)*(UBYTE *)&data->Frame, BCDTime2Block_Pointer (&data->Min) + 150, *(UBYTE *)&data->Zero, *(UBYTE *)&data->PMin, *(UBYTE *)&data->PSec, *(UBYTE *)&data->PFrame, BCDTime2Block_Pointer (&data->PMin)); } fflush (stdout); } #endif scgp->scsibus = sdd->bus; scgp->target = sdd->target; scgp->lun = sdd->lun; scgp->cmdname = "???"; scgp->curcmdname = "???"; /* replace MODE_SELECT/SENSE_6 if we access a ATAPI drive, otherwise send it now */ if (sdd->isatapi && (scmd->cdb.g0_cdb.cmd == MODE_SELECT_6 || scmd->cdb.g0_cdb.cmd == MODE_SENSE_6)) { uae_u8 buffer[256 + 2], *data = scmd->addr, *tmp; int len = 0, page_len, i; int do_it = 1; uae_u8 sp = scmd->cdb.g0_cdb.high_addr & 1; uae_u8 alloc_len = scmd->cdb.g0_cdb.count; uae_u8 pcf_page_code = scmd->cdb.g0_cdb.mid_addr; uae_u8 cmd = scmd->cdb.g0_cdb.cmd; memset (&scmd->cdb.g1_cdb, 0, sizeof(scmd->cdb.g1_cdb)); if (cmd == MODE_SELECT_6) { /* expand parameter list */ tmp = data; buffer[len++] = *tmp++; /* first byte, should be 0 */ buffer[len++] = 0; /* reserved */ buffer[len++] = *tmp++; /* medium type */ buffer[len++] = 0; *tmp++; /* ignore host application code */ for (i = 0; i < 4; i++) { buffer[len++] = 0; } if (*tmp) { /* skip block descriptor */ tmp += 8; } tmp++; page_len = scsi_len - (tmp - data); if (page_len > 0) { memcpy (&buffer[len], tmp, page_len); len += page_len; scmd->cdb.g1_cdb.cmd = MODE_SELECT_10; scmd->cdb.g1_cdb.lun = sdd->lun; scmd->cdb.g1_cdb.res = 1 << 3; /* PF bit */ scmd->cdb.g1_cdb.reladr = sp; scmd->cdb.g1_cdb.count[0] = len >> 8; scmd->cdb.g1_cdb.count[1] = len; } else { do_it = 0; scmd->error = 0; *(uae_u8 *)&scmd->scb = 0; scmd->ux_errno = 0; } } else { /* MODE_SENSE_6 */ len = alloc_len + 2; scmd->cdb.g1_cdb.cmd = MODE_SENSE_10; scmd->cdb.g1_cdb.lun = sdd->lun; scmd->cdb.g1_cdb.addr[0] = pcf_page_code; scmd->cdb.g1_cdb.count[0] = len >> 8; scmd->cdb.g1_cdb.count[1] = len; } if (do_it) { scmd->cdb_len = 10; scmd->addr = buffer; scmd->size = len; scmd->sense_count = 0; *(uae_u8 *)&scmd->scb = 0; scsicmd (scgp); if (cmd == MODE_SENSE_6 && !scmd->error && !scmd->ux_errno && !*(uae_u8 *)&scmd->scb) { int req_len = len; /* compress result */ tmp = buffer; len = 0; tmp++; /* skip first byte of length - should better be zero */ data[len++] = *tmp++; /* mode data length */ data[len++] = *tmp++; /* medium type */ data[len++] = 0; /* host application type */ data[len++] = 0; /* block descr length */ tmp += 4; if (*tmp) { /* skip block descr - should not happen */ tmp += *tmp; } tmp++; memcpy (&data[len], tmp, req_len - (tmp - buffer)); } } } else { scsicmd (scgp); } put_word (acmd + 18, scmd->error == SCG_FATAL ? 0 : scsi_cmd_len); /* fake scsi_CmdActual */ put_byte (acmd + 21, *(uae_u8 *)&scmd->scb); /* scsi_Status */ if (*(uae_u8 *)&scmd->scb) { put_byte (request + 31, 45); /* HFERR_BadStatus */ /* copy sense? */ for (sactual = 0; scsi_sense && sactual < scsi_sense_len && sactual < scmd->sense_count; sactual++) { put_byte (scsi_sense + sactual, scmd->u_sense.cmd_sense[sactual]); } put_long (acmd + 8, 0); /* scsi_Actual */ } else { int i; for (i = 0; i < scsi_sense_len; i++) { put_byte (scsi_sense + i, 0); } sactual = 0; if (scmd->error != SCG_NO_ERROR || scmd->ux_errno != 0) { /* we might have been limited by the hosts DMA limits, which is usually indicated by ENOMEM */ if (scsi_len > (unsigned int)sdd->max_dma && scmd->ux_errno == ENOMEM) { put_byte (request + 31, (uae_u8)-4); /* IOERR_BADLENGTH */ } else { put_byte (request + 31, 20); /* io_Error, but not specified */ put_long (acmd + 8, 0); /* scsi_Actual */ } } else { put_byte (request + 31, 0); put_long (acmd + 8, scsi_len - scmd->resid); /* scsi_Actual */ } } put_word (acmd + 28, sactual); #ifdef SCSI_IS_NOT_THREAD_SAFE uae_sem_post (&scgp_sem); #endif } static void scsidev_do_io (struct scsidevdata *sdd, uaecptr request) { uae_u32 tmp2, dataptr, offset; tmp2 = get_word (request+28); /* io_Command */ switch (tmp2) { case 28: /* HD_SCSICMD */ scsidev_do_scsi (sdd, request); break; default: /* Command not understood. */ put_byte (request+31, (uae_u8)-3); /* io_Error */ break; } #ifdef DEBUGME printf ("scsidev: did io: sdd = 0x%x\n", sdd); printf ("scsidev: did io: request = %08lx\n", (unsigned long)request); printf ("scsidev: did io: error = %d\n", (int)get_word (request+31)); #endif } static uae_u32 scsidev_beginio (void) { uae_u32 request = m68k_areg (regs, 1); int unit = get_long (request + 24); struct scsidevdata *sdd = get_scsidev_data (unit); #ifdef DEBUGME printf ("scsidev_begin_io: sdd = 0x%x\n", sdd); printf ("scsidev_begin_io: request = %08lx\n", (unsigned long)request); printf ("scsidev_begin_io: cmd = %d\n", (int)get_word (request+28)); #endif put_byte (request+8, NT_MESSAGE); put_byte (request+31, 0); /* no error yet */ #ifdef UAE_SCSIDEV_THREADS { uae_pt data; /* clear IOF_QUICK */ put_byte (request+30, get_byte (request+30) & ~1); /* forward to unit thread */ write_comm_pipe_u32 (&sdd->requests, request, 1); return 0; } #else put_byte (request+30, get_byte (request+30) & ~1); scsidev_do_io (sdd, request); return get_byte (request+31); /* do we really have to return io_Error? */ #endif } #ifdef UAE_SCSIDEV_THREADS static void *scsidev_thread (void *sddv) { struct scsidevdata *sdd = sddv; #ifdef DEBUGME printf ("scsidev_penguin: sdd = 0x%x ready\n", sdd); #endif /* init SCSI */ if (!(sdd->scgp = openscsi (sdd->bus, sdd->target, sdd->lun)) || (sdd->max_dma = scsi_bufsize (sdd->scgp, 512 * 1024)) <= 0) { sdd->thread_running = 0; uae_sem_post (&sdd->sync_sem); return 0; } sdd->thread_running = 1; uae_sem_post (&sdd->sync_sem); for (;;) { uaecptr request; request = (uaecptr)read_comm_pipe_u32_blocking (&sdd->requests); #ifdef DEBUGME printf ("scsidev_penguin: sdd = 0x%x\n", sdd); printf ("scsidev_penguin: req = %08lx\n", (unsigned long)request); printf ("scsidev_penguin: cmd = %d\n", (int)get_word (request+28)); #endif if (!request) { printf ("scsidev_penguin: going down with 0x%x\n", sdd->sync_sem); /* Death message received. */ sdd->thread_running = 0; uae_sem_post (&sdd->sync_sem); /* Die. */ return 0; } scsidev_do_io (sdd, request); uae_ReplyMsg (request); } return 0; } #endif static uae_u32 scsidev_abortio (void) { return (uae_u32)-3; } static uae_u32 scsidev_init (void) { #ifdef DEBUGME printf("scsidev_init()\n"); #endif if (scgp) { /* we still have everything in place */ return m68k_dreg (regs, 0); /* device base */ } /* init global SCSI */ if (!(scgp = openscsi (-1, -1, -1))) { return 0; } uae_sem_init (&scgp_sem, 0, 1); /* add all units we find */ for (scgp->scsibus=0; scgp->scsibus < 8; scgp->scsibus++) { if (!scsi_havebus(scgp, scgp->scsibus)) continue; printf("scsibus%d:\n", scgp->scsibus); for (scgp->target=0; scgp->target < 16; scgp->target++) { struct scsi_inquiry inq; scgp->lun = 0; if (inquiry (scgp, &inq, sizeof(inq))) { continue; } for (scgp->lun=0; scgp->lun < 8; scgp->lun++) { if (!inquiry (scgp, &inq, sizeof(inq))) { int aunit = BTL2UNIT(scgp->scsibus, scgp->target, scgp->lun); struct scsidevdata *sdd; write_log (" %2.01d,%d (= %3.d): ", scgp->target, scgp->lun, aunit); print_product (&inq); sdd = add_scsidev_data (scgp->scsibus, scgp->target, scgp->lun, aunit); write_log (!sdd ? " - init failed ???" : sdd->isatapi ? " - ATAPI" : " - SCSI"); write_log ("\n"); } } } } return m68k_dreg (regs, 0); /* device base */ } static uaecptr ROM_scsidev_resname = 0, ROM_scsidev_resid = 0, ROM_scsidev_init = 0; uaecptr scsidev_startup (uaecptr resaddr) { #ifdef DEBUGME printf("scsidev_startup(0x%x)\n", resaddr); #endif /* Build a struct Resident. This will set up and initialize * the uaescsi.device */ put_word (resaddr + 0x0, 0x4AFC); put_long (resaddr + 0x2, resaddr); put_long (resaddr + 0x6, resaddr + 0x1A); /* Continue scan here */ put_word (resaddr + 0xA, 0x8101); /* RTF_AUTOINIT|RTF_COLDSTART; Version 1 */ put_word (resaddr + 0xC, 0x0305); /* NT_DEVICE; pri 05 */ put_long (resaddr + 0xE, ROM_scsidev_resname); put_long (resaddr + 0x12, ROM_scsidev_resid); put_long (resaddr + 0x16, ROM_scsidev_init); /* calls scsidev_init */ resaddr += 0x1A; return resaddr; } void scsidev_install (void) { uae_u32 functable, datatable; uae_u32 initcode, openfunc, closefunc, expungefunc; uae_u32 beginiofunc, abortiofunc; #ifdef DEBUGME printf("scsidev_install(): 0x%x\n", here ()); #endif ROM_scsidev_resname = ds ("uaescsi.device"); ROM_scsidev_resid = ds ("UAE scsi.device 0.1"); /* initcode */ initcode = here (); calltrap (deftrap (scsidev_init)); dw (RTS); /* Open */ openfunc = here (); calltrap (deftrap (scsidev_open)); dw (RTS); /* Close */ closefunc = here (); calltrap (deftrap (scsidev_close)); dw (RTS); /* Expunge */ expungefunc = here (); calltrap (deftrap (scsidev_expunge)); dw (RTS); /* BeginIO */ beginiofunc = here (); calltrap (deftrap (scsidev_beginio)); #ifndef UAE_SCSIDEV_THREADS /* don't reply when using threads - native2amiga's Reply() does that */ dw (0x48E7); dw (0x8002); /* movem.l d0/a6,-(a7) */ dw (0x0829); dw (0); dw (30); /* btst #0,30(a1) */ dw (0x6608); /* bne.b +8 */ dw (0x2C78); dw (0x0004); /* move.l 4,a6 */ dw (0x4EAE); dw (-378); /* jsr ReplyMsg(a6) */ dw (0x4CDF); dw (0x4001); /* movem.l (a7)+,d0/a6 */ #endif dw (RTS); /* AbortIO */ abortiofunc = here (); calltrap (deftrap (scsidev_abortio)); dw (RTS); /* FuncTable */ functable = here (); dl (openfunc); /* Open */ dl (closefunc); /* Close */ dl (expungefunc); /* Expunge */ dl (EXPANSION_nullfunc); /* Null */ dl (beginiofunc); /* BeginIO */ dl (abortiofunc); /* AbortIO */ dl (0xFFFFFFFFul); /* end of table */ /* DataTable */ datatable = here (); dw (0xE000); /* INITBYTE */ dw (0x0008); /* LN_TYPE */ dw (0x0300); /* NT_DEVICE */ dw (0xC000); /* INITLONG */ dw (0x000A); /* LN_NAME */ dl (ROM_scsidev_resname); dw (0xE000); /* INITBYTE */ dw (0x000E); /* LIB_FLAGS */ dw (0x0600); /* LIBF_SUMUSED | LIBF_CHANGED */ dw (0xD000); /* INITWORD */ dw (0x0014); /* LIB_VERSION */ dw (0x0004); /* 0.4 */ dw (0xD000); /* INITWORD */ dw (0x0016); /* LIB_REVISION */ dw (0x0000); /* end of table already ??? */ dw (0xC000); /* INITLONG */ dw (0x0018); /* LIB_IDSTRING */ dl (ROM_scsidev_resid); dw (0x0000); /* end of table */ ROM_scsidev_init = here (); dl (0x00000100); /* size of device base */ dl (functable); dl (datatable); dl (initcode); } void scsidev_reset (void) { #ifdef DEBUGME printf("scsidev_reset()\n"); #endif #ifdef SCSI_CLOSE #ifdef UAE_SCSIDEV_THREADS { int i; for (i = 0; i < num_drives; i++) { if (!drives[i].thread_running) { continue; } write_comm_pipe_int (&drives[i].requests, 0, 1); uae_sem_wait (&drives[i].sync_sem); } num_drives = 0; } #endif if (scgp) { closescsi (scgp); scgp = NULL; } #endif opencount = 0; } void scsidev_start_threads (void) { #ifdef DEBUGME printf("scsidev_start_threads()\n"); #endif } fs-uae-2.2.3+dfsg/src/a2065.cpp0000644000175000017500000005170012162366655016110 0ustar glaubitzglaubitz/* * UAE - The Un*x Amiga Emulator * * A2065 ZorroII Ethernet Card * * Copyright 2009 Toni Wilen * */ #include "sysconfig.h" #include "sysdeps.h" #include "options.h" #include "uae/memory.h" #include "custom.h" #include "newcpu.h" #include "a2065.h" #include "win32_uaenet.h" #include "crc32.h" #include "savestate.h" #include "autoconf.h" #define DUMPPACKET 0 int log_a2065 = 0; static int log_transmit = 1; static int log_receive = 1; int a2065_promiscuous = 0; #define RAP 0x4002 #define RDP 0x4000 #define CHIP_OFFSET 0x4000 #define CHIP_SIZE 4 #define RAM_OFFSET 0x8000 #define RAM_SIZE 0x8000 #define RAM_MASK 0x7fff static uae_u8 config[256]; static uae_u8 boardram[RAM_SIZE]; static volatile uae_u16 csr[4]; static int rap; static int configured; static struct netdriverdata *td; static void *sysdata; static int am_initialized; static volatile int transmitnow; static uae_u16 am_mode; static uae_u64 am_ladrf; static uae_u32 am_rdr, am_rdr_rlen, am_rdr_rdra; static uae_u32 am_tdr, am_tdr_tlen, am_tdr_tdra; static int tdr_offset, rdr_offset; static int byteswap, prom, fakeprom; static uae_u8 fakemac[6], realmac[6]; static uae_u8 broadcast[6] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; #define CSR0_ERR 0x8000 #define CSR0_BABL 0x4000 #define CSR0_CERR 0x2000 #define CSR0_MISS 0x1000 #define CSR0_MERR 0x0800 #define CSR0_RINT 0x0400 #define CSR0_TINT 0x0200 #define CSR0_IDON 0x0100 #define CSR0_INTR 0x0080 #define CSR0_INEA 0x0040 #define CSR0_RXON 0x0020 #define CSR0_TXON 0x0010 #define CSR0_TDMD 0x0008 #define CSR0_STOP 0x0004 #define CSR0_STRT 0x0002 #define CSR0_INIT 0x0001 #define CSR3_BSWP 0x0004 #define CSR3_ACON 0x0002 #define CSR3_BCON 0x0001 #define MODE_PROM 0x8000 #define MODE_EMBA 0x0080 #define MODE_INTL 0x0040 #define MODE_DRTY 0x0020 #define MODE_COLL 0x0010 #define MODE_DTCR 0x0008 #define MODE_LOOP 0x0004 #define MODE_DTX 0x0002 #define MODE_DRX 0x0001 #define TX_OWN 0x8000 #define TX_ERR 0x4000 #define TX_ADD_FCS 0x2000 #define TX_MORE 0x1000 #define TX_ONE 0x0800 #define TX_DEF 0x0400 #define TX_STP 0x0200 #define TX_ENP 0x0100 #define TX_BUFF 0x8000 #define TX_UFLO 0x4000 #define TX_LCOL 0x1000 #define TX_LCAR 0x0800 #define TX_RTRY 0x0400 #define RX_OWN 0x8000 #define RX_ERR 0x4000 #define RX_FRAM 0x2000 #define RX_OFLO 0x1000 #define RX_CRC 0x0800 #define RX_BUFF 0x0400 #define RX_STP 0x0200 #define RX_ENP 0x0100 static void ew (int addr, uae_u32 value) { addr &= 0xffff; if (addr == 00 || addr == 02 || addr == 0x40 || addr == 0x42) { config[addr] = (value & 0xf0); config[addr + 2] = (value & 0x0f) << 4; } else { config[addr] = ~(value & 0xf0); config[addr + 2] = ~((value & 0x0f) << 4); } } void a2065_reset (void) { am_initialized = 0; csr[0] = csr[1] = csr[2] = csr[3] = 0; rap = 0; uaenet_close (sysdata); xfree (sysdata); sysdata = NULL; td = NULL; } #if DUMPPACKET static void dumppacket (const TCHAR *n, uae_u8 *packet, int len) { int i; TCHAR buf[10000]; for (i = 0; i < len; i++) { _stprintf (buf + i * 3, _T(".%02X"), packet[i]); } write_log (_T("%s %d: "), n, len); write_log (buf); write_log (_T("\n\n")); } #endif #define MAX_PACKET_SIZE 4000 static uae_u8 transmitbuffer[MAX_PACKET_SIZE]; static volatile int transmitlen; static int dofakemac (uae_u8 *packet) { if (!memcmp (packet, fakemac, 6)) { memcpy (packet, realmac, 6); return 1; } if (!memcmp (packet, realmac, 6)) { memcpy (packet, fakemac, 6); return 1; } return 0; } // Replace card's MAC with real MAC and vice versa. // We have to do this because drivers are hardcoded to // Commodore's MAC address range. static int mungepacket (uae_u8 *packet, int len) { uae_u8 *data; uae_u16 type; int ret = 0; if (len < 20) return 0; #if DUMPPACKET dumppacket (_T("pre:"), packet, len); #endif data = packet + 14; type = (packet[12] << 8) | packet[13]; // switch destination mac ret |= dofakemac (packet); // switch source mac ret |= dofakemac (packet + 6); if (type == 0x0806) { // ARP? if (((data[0] << 8) | data[1]) == 1 && data[4] == 6) { // Ethernet and LEN=6? ret |= dofakemac (data + 8); // sender ret |= dofakemac (data + 8 + 6 + 4); // target } } else if (type == 0x0800) { // IPv4? int proto = data[9]; int ihl = data[0] & 15; uae_u8 *ipv4 = data; data += ihl * 4; if (proto == 17) { // UDP? int udpcrc = 0; int sp = (data[0] << 8) | data[1]; int dp = (data[2] << 8) | data[3]; int len = (data[4] << 8) | data[5]; if (sp == 67 || sp == 68 || dp == 67 || dp == 68) udpcrc |= dofakemac (data + 36); // DHCP CHADDR if (udpcrc && (data[6] || data[7])) { // fix UDP checksum int i; uae_u32 sum; data[6] = data[7] = 0; data[len] = 0; sum = 0; for (i = 0; i < ((len + 1) & ~1); i += 2) sum += (data[i] << 8) | data[i + 1]; sum += (ipv4[12] << 8) | ipv4[13]; sum += (ipv4[14] << 8) | ipv4[15]; sum += (ipv4[16] << 8) | ipv4[17]; sum += (ipv4[18] << 8) | ipv4[19]; sum += 17; sum += len; while (sum >> 16) sum = (sum & 0xFFFF) + (sum >> 16); sum = ~sum; if (sum == 0) sum = 0xffff; data[6] = sum >> 8; data[7] = sum >> 0; ret |= 1; } // this all just to translate single DHCP MAC.. } } #if DUMPPACKET dumppacket (_T("post:"), packet, len); #endif return ret; } static int mcfilter (const uae_u8 *data) { if (am_ladrf == 0) // multicast filter completely disabled? return 0; return 1; // just allow everything } static void gotfunc (struct s2devstruct *dev, const uae_u8 *databuf, int len) { int i; int size, insize, first; uae_u32 addr; uae_u8 *p, *d; uae_u16 rmd0, rmd1, rmd2, rmd3; uae_u32 crc32; uae_u8 tmp[MAX_PACKET_SIZE], *data; const uae_u8 *dstmac, *srcmac; if (log_a2065 > 1 && log_receive) { dstmac = databuf; srcmac = databuf + 6; write_log (_T("A2065 1) write_log (_T("mc filtered\n")); return; } } else { // !promiscuous and dst != me and dst != broadcast if (!prom && (memcmp (dstmac, realmac, sizeof realmac) != 0 && memcmp (dstmac, broadcast, sizeof broadcast) != 0)) { if (log_a2065 > 1) write_log (_T("not for me1\n")); return; } } // src and dst = me? right, better drop it. if (memcmp (dstmac, realmac, sizeof realmac) == 0 && memcmp (srcmac, realmac, sizeof realmac) == 0) { if (log_a2065 > 1) write_log (_T("not for me2\n")); return; } // dst = broadcast and src = me? no thanks. if (memcmp (dstmac, broadcast, sizeof broadcast) == 0 && memcmp (srcmac, realmac, sizeof realmac) == 0) { if (log_a2065 > 1) write_log (_T("not for me3\n")); return; } memcpy (tmp, databuf, len); #if 0 FILE *f = fopen("s:\\d\\wireshark2.cap", "rb"); fseek (f, 474, SEEK_SET); fread (tmp, 342, 1, f); fclose (f); realmac[0] = 0xc8; realmac[1] = 0x0a; realmac[2] = 0xa9; realmac[3] = 0x81; realmac[4] = 0xff; realmac[5] = 0x2f; fakemac[3] = realmac[3]; fakemac[4] = realmac[4]; fakemac[5] = realmac[5]; #endif d = tmp; dstmac = d; srcmac = d + 6; if (log_a2065 && log_receive) { if (memcmp (dstmac, realmac, sizeof realmac) == 0) { write_log (_T("A2065<-DST:%02X.%02X.%02X.%02X.%02X.%02X SRC:%02X.%02X.%02X.%02X.%02X.%02X E=%04X S=%d\n"), dstmac[0], dstmac[1], dstmac[2], dstmac[3], dstmac[4], dstmac[5], srcmac[6], srcmac[7], srcmac[8], srcmac[9], srcmac[10], srcmac[11], (d[12] << 8) | d[13], len); } } if (mungepacket (d, len)) { if (log_a2065 && log_receive) { write_log (_T("A2065<*DST:%02X.%02X.%02X.%02X.%02X.%02X SRC:%02X.%02X.%02X.%02X.%02X.%02X E=%04X S=%d\n"), dstmac[0], dstmac[1], dstmac[2], dstmac[3], dstmac[4], dstmac[5], srcmac[6], srcmac[7], srcmac[8], srcmac[9], srcmac[10], srcmac[11], (d[12] << 8) | d[13], len); } } // winpcap does not include checksum bytes crc32 = get_crc32 (d, len); d[len++] = crc32 >> 24; d[len++] = crc32 >> 16; d[len++] = crc32 >> 8; d[len++] = crc32 >> 0; data = tmp; size = 0; insize = 0; first = 1; for (;;) { rdr_offset %= am_rdr_rlen; p = boardram + ((am_rdr_rdra + rdr_offset * 8) & RAM_MASK); rmd0 = (p[1] << 8) | (p[0] << 0); rmd1 = (p[3] << 8) | (p[2] << 0); rmd2 = (p[5] << 8) | (p[4] << 0); rmd3 = (p[7] << 8) | (p[6] << 0); addr = rmd0 | ((rmd1 & 0xff) << 16); addr &= RAM_MASK; if (!(rmd1 & RX_OWN)) { write_log (_T("A2065: RECEIVE BUFFER ERROR\n")); if (!first) { rmd1 |= RX_BUFF | RX_OFLO; csr[0] &= ~CSR0_RXON; } else { csr[0] |= CSR0_MISS; } p[3] = rmd1 >> 8; p[2] = rmd1 >> 0; rethink_a2065 (); return; } rmd1 &= ~RX_OWN; rdr_offset++; if (first) { rmd1 |= RX_STP; first = 0; } size = 65536 - rmd2; for (i = 0; i < size && insize < len; i++, insize++) boardram[((addr + i) ^ byteswap) & RAM_MASK] = data[insize]; if (insize >= len) { rmd1 |= RX_ENP; rmd3 = len; } p[3] = rmd1 >> 8; p[2] = rmd1 >> 0; p[7] = rmd3 >> 8; p[6] = rmd3 >> 0; if (insize >= len) break; } csr[0] |= CSR0_RINT; rethink_a2065 (); } static int getfunc (struct s2devstruct *dev, uae_u8 *d, int *len) { if (transmitlen <= 0) return 0; if (transmitlen > *len) { write_log (_T("A2065: too large packet transmission attempt %d > %d\n"), transmitlen, *len); transmitlen = 0; return 0; } memcpy (d, transmitbuffer, transmitlen); *len = transmitlen; transmitlen = 0; transmitnow = 1; return 1; } static void do_transmit (void) { int i; int size, outsize; int err, add_fcs; uae_u32 addr; uae_u8 *p; uae_u16 tmd0, tmd1, tmd2, tmd3; err = 0; size = 0; outsize = 0; tdr_offset %= am_tdr_tlen; p = boardram + ((am_tdr_tdra + tdr_offset * 8) & RAM_MASK); tmd1 = (p[3] << 8) | (p[2] << 0); if (!(tmd1 & TX_OWN) || !(tmd1 & TX_STP)) { tdr_offset++; return; } if (!(tmd1 & TX_ENP) && log_a2065 > 0) write_log (_T("A2065: chained transmit!?\n")); add_fcs = tmd1 & TX_ADD_FCS; for (;;) { tdr_offset %= am_tdr_tlen; p = boardram + ((am_tdr_tdra + tdr_offset * 8) & RAM_MASK); tmd0 = (p[1] << 8) | (p[0] << 0); tmd1 = (p[3] << 8) | (p[2] << 0); tmd2 = (p[5] << 8) | (p[4] << 0); tmd3 = (p[7] << 8) | (p[6] << 0); addr = tmd0 | ((tmd1 & 0xff) << 16); addr &= RAM_MASK; if (!(tmd1 & TX_OWN)) { tmd3 |= TX_BUFF | TX_UFLO; tmd1 |= TX_ERR; csr[0] &= ~CSR0_TXON; write_log (_T("A2065: TRANSMIT OWN NOT SET\n")); err = 1; } else { tmd1 &= ~TX_OWN; size = 65536 - tmd2; if (size > MAX_PACKET_SIZE) size = MAX_PACKET_SIZE; for (i = 0; i < size; i++) transmitbuffer[outsize++] = boardram[((addr + i) ^ byteswap) & RAM_MASK]; tdr_offset++; } p[3] = tmd1 >> 8; p[2] = tmd1 >> 0; p[7] = tmd3 >> 8; p[6] = tmd3 >> 0; if ((tmd1 & TX_ENP) || err) break; } if (outsize < 60) { tmd3 |= TX_BUFF | TX_UFLO; tmd1 |= TX_ERR; csr[0] &= ~CSR0_TXON; write_log (_T("A2065: TRANSMIT UNDERFLOW %d\n"), outsize); err = 1; p[3] = tmd1 >> 8; p[2] = tmd1 >> 0; p[7] = tmd3 >> 8; p[6] = tmd3 >> 0; } if (!err) { uae_u8 *d = transmitbuffer; if ((am_mode & MODE_DTCR) && !add_fcs) outsize -= 4; // do not include checksum bytes if (log_a2065 && log_transmit) { write_log (_T("A2065->DST:%02X.%02X.%02X.%02X.%02X.%02X SRC:%02X.%02X.%02X.%02X.%02X.%02X E=%04X S=%d\n"), d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7], d[8], d[9], d[10], d[11], (d[12] << 8) | d[13], outsize); } transmitlen = outsize; if (mungepacket (d, transmitlen)) { if (log_a2065 && log_transmit) { write_log (_T("A2065*>DST:%02X.%02X.%02X.%02X.%02X.%02X SRC:%02X.%02X.%02X.%02X.%02X.%02X E=%04X S=%d\n"), d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7], d[8], d[9], d[10], d[11], (d[12] << 8) | d[13], outsize); } } uaenet_trigger (sysdata); } csr[0] |= CSR0_TINT; rethink_a2065 (); } static void check_transmit (void) { if (transmitlen > 0) return; if (!(csr[0] & CSR0_TXON)) return; transmitnow = 0; do_transmit (); } void a2065_hsync_handler (void) { static int cnt; cnt--; if (cnt < 0 || transmitnow) { check_transmit (); cnt = 15; } } void rethink_a2065 (void) { uae_int_requested &= ~4; if (!configured) return; csr[0] &= ~CSR0_INTR; if (csr[0] & (CSR0_BABL | CSR0_MISS | CSR0_MERR | CSR0_RINT | CSR0_TINT | CSR0_IDON)) csr[0] |= CSR0_INTR; if ((csr[0] & (CSR0_INTR | CSR0_INEA)) == (CSR0_INTR | CSR0_INEA)) uae_int_requested |= 4; } static void chip_init (void) { uae_u32 iaddr = ((csr[2] & 0xff) << 16) | csr[1]; uae_u8 *p = boardram + (iaddr & RAM_MASK); write_log (_T("A2065: Initialization block2:\n")); for (int i = 0; i < 24; i++) write_log (_T(".%02X"), p[i]); write_log (_T("\n")); am_mode = (p[0] << 8) | (p[1] << 0); am_ladrf = ((uae_u64)p[15] << 56) | ((uae_u64)p[14] << 48) | ((uae_u64)p[13] << 40) | ((uae_u64)p[12] << 32) | (p[11] << 24) | (p[10] << 16) | (p[9] << 8) | (p[8] << 0); am_rdr = (p[19] << 24) | (p[18] << 16) | (p[17] << 8) | (p[16] << 0); am_tdr = (p[23] << 24) | (p[22] << 16) | (p[21] << 8) | (p[20] << 0); am_rdr_rlen = 1 << ((am_rdr >> 29) & 7); am_tdr_tlen = 1 << ((am_tdr >> 29) & 7); am_rdr_rdra = am_rdr & 0x00fffff8; am_tdr_tdra = am_tdr & 0x00fffff8; prom = (am_mode & MODE_PROM) ? 1 : 0; fakeprom = a2065_promiscuous ? 1 : 0; fakemac[0] = p[2]; fakemac[1] = p[3]; fakemac[2] = p[4]; fakemac[3] = p[5]; fakemac[4] = p[6]; fakemac[5] = p[7]; write_log (_T("A2065: %04X %06X %d %d %d %d %06X %06X %02X:%02X:%02X:%02X:%02X:%02X\n"), am_mode, iaddr, prom, fakeprom, am_rdr_rlen, am_tdr_tlen, am_rdr_rdra, am_tdr_tdra, fakemac[0], fakemac[1], fakemac[2], fakemac[3], fakemac[4], fakemac[5]); am_rdr_rdra &= RAM_MASK; am_tdr_tdra &= RAM_MASK; tdr_offset = rdr_offset = 0; uaenet_close (sysdata); if (td != NULL) { if (!sysdata) sysdata = xcalloc (uae_u8, uaenet_getdatalenght()); if (!uaenet_open (sysdata, td, NULL, gotfunc, getfunc, prom || fakeprom)) { write_log (_T("A2065: failed to initialize winpcap driver\n")); } } } static uae_u16 chip_wget (uaecptr addr) { if (addr == RAP) { return rap; } else if (addr = RDP) { uae_u16 v = csr[rap]; if (rap == 0) { if (v & (CSR0_BABL | CSR0_CERR | CSR0_MISS | CSR0_MERR)) v |= CSR0_ERR; } if (log_a2065 > 2) write_log (_T("A2065_CHIPWGET: CSR%d=%04X PC=%08X\n"), rap, v, M68K_GETPC); return v; } return 0xffff; } static void chip_wput (uaecptr addr, uae_u16 v) { if (addr == RAP) { rap = v & 3; } else if (addr == RDP) { uae_u16 oreg = csr[rap]; uae_u16 t; if (log_a2065 > 2) write_log (_T("A2065_CHIPWPUT: CSR%d=%04X PC=%08X\n"), rap, v & 0xffff, M68K_GETPC); switch (rap) { case 0: csr[0] &= ~CSR0_INEA; csr[0] |= v & CSR0_INEA; // bit = 1 -> set, bit = 0 -> nop t = v & (CSR0_INIT | CSR0_STRT | CSR0_STOP | CSR0_TDMD); csr[0] |= t; // bit = 1 -> clear, bit = 0 -> nop t = v & (CSR0_IDON | CSR0_TINT | CSR0_RINT | CSR0_MERR | CSR0_MISS | CSR0_CERR | CSR0_BABL); csr[0] &= ~t; csr[0] &= ~CSR0_ERR; if ((csr[0] & (CSR0_STOP | CSR0_STRT | CSR0_INIT)) == (CSR0_STOP | CSR0_STRT | CSR0_INIT)) csr[0] &= ~(CSR0_STRT | CSR0_INIT); if (csr[0] & CSR0_INIT) csr[0] &= ~CSR0_STOP; if ((csr[0] & CSR0_STRT) && !(oreg & CSR0_STRT)) { csr[0] &= ~CSR0_STOP; if (!(am_mode & MODE_DTX)) csr[0] |= CSR0_TXON; if (!(am_mode & MODE_DRX)) csr[0] |= CSR0_RXON; if (log_a2065) write_log (_T("A2065: START.\n")); } if ((csr[0] & CSR0_STOP) && !(oreg & CSR0_STOP)) { csr[0] = CSR0_STOP; if (log_a2065) write_log (_T("A2065: STOP.\n")); csr[3] = 0; am_initialized = 0; } if ((csr[0] & CSR0_INIT) && am_initialized == 0) { if (log_a2065) write_log (_T("A2065: INIT.\n")); chip_init (); csr[0] |= CSR0_IDON; am_initialized = 1; } if ((csr[0] & CSR0_STRT) && am_initialized) { if (csr[0] & CSR0_TDMD) check_transmit (); } csr[0] &= ~CSR0_TDMD; rethink_a2065 (); break; case 1: if (csr[0] & 4) { csr[1] = v; csr[1] &= ~1; } break; case 2: if (csr[0] & 4) { csr[2] = v; csr[2] &= 0x00ff; } break; case 3: if (csr[0] & 4) { csr[3] = v; csr[3] &= 7; } byteswap = (csr[3] & CSR3_BSWP) ? 1 : 0; break; } } } static uae_u32 a2065_bget2 (uaecptr addr) { uae_u32 v = 0; if (addr < 0x40) { v = config[addr]; } else if (addr >= RAM_OFFSET) { v = boardram[(addr & RAM_MASK) ^ 1]; } if (log_a2065 > 2) write_log (_T("A2065_BGET: %08X -> %02X PC=%08X\n"), addr, v & 0xff, M68K_GETPC); return v; } static void a2065_bput2 (uaecptr addr, uae_u32 v) { if (addr >= RAM_OFFSET) { boardram[(addr & RAM_MASK) ^ 1] = v; } if (log_a2065 > 2) write_log (_T("A2065_BPUT: %08X <- %02X PC=%08X\n"), addr, v & 0xff, M68K_GETPC); } static uae_u32 REGPARAM2 a2065_wget (uaecptr addr) { uae_u32 v; #ifdef JIT special_mem |= S_READ; #endif addr &= 65535; if (addr == CHIP_OFFSET || addr == CHIP_OFFSET + 2) { v = chip_wget (addr); } else { v = a2065_bget2 (addr) << 8; v |= a2065_bget2 (addr + 1); } return v; } static uae_u32 REGPARAM2 a2065_lget (uaecptr addr) { uae_u32 v; #ifdef JIT special_mem |= S_READ; #endif addr &= 65535; v = a2065_wget (addr) << 16; v |= a2065_wget (addr + 2); return v; } static uae_u32 REGPARAM2 a2065_bget (uaecptr addr) { uae_u32 v; #ifdef JIT special_mem |= S_READ; #endif addr &= 65535; v = a2065_bget2 (addr); if (!configured) return v; return v; } static void REGPARAM2 a2065_wput (uaecptr addr, uae_u32 w) { #ifdef JIT special_mem |= S_WRITE; #endif addr &= 65535; if (addr == CHIP_OFFSET || addr == CHIP_OFFSET + 2) { chip_wput (addr, w); } else { a2065_bput2 (addr, w >> 8); a2065_bput2 (addr + 1, w); } } static void REGPARAM2 a2065_lput (uaecptr addr, uae_u32 l) { #ifdef JIT special_mem |= S_WRITE; #endif addr &= 65535; a2065_wput (addr, l >> 16); a2065_wput (addr + 2, l); } extern addrbank a2065_bank; static void REGPARAM2 a2065_bput (uaecptr addr, uae_u32 b) { #ifdef JIT special_mem |= S_WRITE; #endif b &= 0xff; addr &= 65535; if (addr == 0x48 && !configured) { map_banks (&a2065_bank, b, 0x10000 >> 16, 0x10000); write_log (_T("A2065 Z2 autoconfigured at %02X0000\n"), b); configured = b; expamem_next (); return; } if (addr == 0x4c && !configured) { write_log (_T("A2065 DMAC AUTOCONFIG SHUT-UP!\n")); configured = 0xff; expamem_next (); return; } if (!configured) return; a2065_bput2 (addr, b); } static uae_u32 REGPARAM2 a2065_wgeti (uaecptr addr) { uae_u32 v = 0xffff; #ifdef JIT special_mem |= S_READ; #endif addr &= 65535; return v; } static uae_u32 REGPARAM2 a2065_lgeti (uaecptr addr) { uae_u32 v = 0xffff; #ifdef JIT special_mem |= S_READ; #endif addr &= 65535; v = (a2065_wgeti (addr) << 16) | a2065_wgeti (addr + 2); return v; } static addrbank a2065_bank = { a2065_lget, a2065_wget, a2065_bget, a2065_lput, a2065_wput, a2065_bput, default_xlate, default_check, NULL, _T("A2065 Z2 Ethernet"), a2065_lgeti, a2065_wgeti, ABFLAG_IO }; static void a2065_config (void) { memset (config, 0xff, sizeof config); ew (0x00, 0xc0 | 0x01); // hardware id ew (0x04, 0x70); // manufacturer (Commodore) ew (0x10, 0x02); ew (0x14, 0x02); td = NULL; if ((td = uaenet_enumerate (NULL, currprefs.a2065name))) { memcpy (realmac, td->mac, sizeof realmac); write_log (_T("A2065: '%s' %02X:%02X:%02X:%02X:%02X:%02X\n"), td->name, td->mac[0], td->mac[1], td->mac[2], td->mac[3], td->mac[4], td->mac[5]); } else { realmac[0] = 0x00; realmac[1] = 0x80; realmac[2] = 0x10; realmac[3] = 4; realmac[4] = 3; realmac[5] = 2; write_log (_T("A2065: Disconnected mode %02X:%02X:%02X:%02X:%02X:%02X\n"), realmac[0], realmac[1], realmac[2], realmac[3], realmac[4], realmac[5]); } ew (0x18, realmac[2]); ew (0x1c, realmac[3]); ew (0x20, realmac[4]); ew (0x24, realmac[5]); fakemac[0] = 0x00; fakemac[1] = 0x80; fakemac[2] = 0x10; fakemac[3] = realmac[3]; fakemac[4] = realmac[4]; fakemac[5] = realmac[5]; if (configured) { if (configured != 0xff) map_banks (&a2065_bank, configured, 0x10000 >> 16, 0x10000); } else { /* KS autoconfig handles the rest */ map_banks (&a2065_bank, 0xe80000 >> 16, 0x10000 >> 16, 0x10000); } } uae_u8 *save_a2065 (int *len, uae_u8 *dstptr) { uae_u8 *dstbak,*dst; if (currprefs.a2065name[0] == 0) return NULL; if (dstptr) dstbak = dst = dstptr; else dstbak = dst = (uae_u8*)malloc (16); save_u32 (0); save_u8 (configured); for (int i = 0; i < 6; i++) save_u8 (realmac[i]); *len = dst - dstbak; return dstbak; } uae_u8 *restore_a2065 (uae_u8 *src) { restore_u32 (); configured = restore_u8 (); for (int i = 0; i < 6; i++) realmac[i] = restore_u8 (); return src; } void restore_a2065_finish (void) { if (configured) a2065_config (); } void a2065_init (void) { configured = 0; a2065_config (); } fs-uae-2.2.3+dfsg/src/autoconf.cpp0000644000175000017500000001617112162366654017173 0ustar glaubitzglaubitz/* * UAE - The Un*x Amiga Emulator * * AutoConfig devices * * Copyright 1995, 1996 Bernd Schmidt * Copyright 1996 Ed Hanway */ #include "sysconfig.h" #include "sysdeps.h" #include "options.h" #include "uae.h" #include "uae/memory.h" #include "custom.h" #include "events.h" #include "newcpu.h" #include "autoconf.h" #include "traps.h" /* Commonly used autoconfig strings */ uaecptr EXPANSION_explibname, EXPANSION_doslibname, EXPANSION_uaeversion; uaecptr EXPANSION_uaedevname, EXPANSION_explibbase = 0; uaecptr EXPANSION_bootcode, EXPANSION_nullfunc; /* ROM tag area memory access */ uae_u8 *rtarea; uaecptr rtarea_base = RTAREA_DEFAULT; static uae_u32 REGPARAM3 rtarea_lget (uaecptr) REGPARAM; static uae_u32 REGPARAM3 rtarea_wget (uaecptr) REGPARAM; static uae_u32 REGPARAM3 rtarea_bget (uaecptr) REGPARAM; static void REGPARAM3 rtarea_lput (uaecptr, uae_u32) REGPARAM; static void REGPARAM3 rtarea_wput (uaecptr, uae_u32) REGPARAM; static void REGPARAM3 rtarea_bput (uaecptr, uae_u32) REGPARAM; static uae_u8 *REGPARAM3 rtarea_xlate (uaecptr) REGPARAM; static int REGPARAM3 rtarea_check (uaecptr addr, uae_u32 size) REGPARAM; addrbank rtarea_bank = { rtarea_lget, rtarea_wget, rtarea_bget, rtarea_lput, rtarea_wput, rtarea_bput, rtarea_xlate, rtarea_check, NULL, _T("UAE Boot ROM"), rtarea_lget, rtarea_wget, ABFLAG_ROMIN }; static uae_u8 *REGPARAM2 rtarea_xlate (uaecptr addr) { addr &= 0xFFFF; return rtarea + addr; } static int REGPARAM2 rtarea_check (uaecptr addr, uae_u32 size) { addr &= 0xFFFF; return (addr + size) <= 0xFFFF; } static uae_u32 REGPARAM2 rtarea_lget (uaecptr addr) { #ifdef JIT special_mem |= S_READ; #endif addr &= 0xFFFF; return (uae_u32)(rtarea_wget (addr) << 16) + rtarea_wget (addr + 2); } static uae_u32 REGPARAM2 rtarea_wget (uaecptr addr) { #ifdef JIT special_mem |= S_READ; #endif addr &= 0xFFFF; return (rtarea[addr] << 8) + rtarea[addr + 1]; } static uae_u32 REGPARAM2 rtarea_bget (uaecptr addr) { #ifdef JIT special_mem |= S_READ; #endif addr &= 0xFFFF; return rtarea[addr]; } #define RTAREA_WRITEOFFSET 0xfff0 static void REGPARAM2 rtarea_bput (uaecptr addr, uae_u32 value) { #ifdef JIT special_mem |= S_WRITE; #endif addr &= 0xffff; if (addr < RTAREA_WRITEOFFSET) return; rtarea[addr] = value; } static void REGPARAM2 rtarea_wput (uaecptr addr, uae_u32 value) { #ifdef JIT special_mem |= S_WRITE; #endif addr &= 0xffff; if (addr < RTAREA_WRITEOFFSET) return; rtarea_bput (addr, value >> 8); rtarea_bput (addr + 1, value & 0xff); } static void REGPARAM2 rtarea_lput (uaecptr addr, uae_u32 value) { #ifdef JIT special_mem |= S_WRITE; #endif addr &= 0xffff; if (addr < RTAREA_WRITEOFFSET) return; rtarea_wput (addr, value >> 16); rtarea_wput (addr + 2, value & 0xffff); } /* some quick & dirty code to fill in the rt area and save me a lot of * scratch paper */ static int rt_addr; static int rt_straddr; uae_u32 addr (int ptr) { return (uae_u32)ptr + rtarea_base; } void db (uae_u8 data) { rtarea[rt_addr++] = data; } void dw (uae_u16 data) { rtarea[rt_addr++] = (uae_u8)(data >> 8); rtarea[rt_addr++] = (uae_u8)data; } void dl (uae_u32 data) { rtarea[rt_addr++] = data >> 24; rtarea[rt_addr++] = data >> 16; rtarea[rt_addr++] = data >> 8; rtarea[rt_addr++] = data; } uae_u8 dbg (uaecptr addr) { addr -= rtarea_base; return rtarea[addr]; } /* store strings starting at the end of the rt area and working * backward. store pointer at current address */ uae_u32 ds_ansi (const uae_char *str) { int len; if (!str) return addr (rt_straddr); len = strlen (str) + 1; rt_straddr -= len; strcpy ((uae_char*)rtarea + rt_straddr, str); return addr (rt_straddr); } uae_u32 ds (const TCHAR *str) { char *s = ua (str); uae_u32 v = ds_ansi (s); xfree (s); return v; } uae_u32 ds_bstr_ansi (const uae_char *str) { int len; len = strlen (str) + 2; rt_straddr -= len; while (rt_straddr & 3) rt_straddr--; rtarea[rt_straddr] = len - 2; strcpy ((uae_char*)rtarea + rt_straddr + 1, str); return addr (rt_straddr) >> 2; } void calltrap (uae_u32 n) { dw (0xA000 + n); } void org (uae_u32 a) { if ( ((a & 0xffff0000) != 0x00f00000) && ((a & 0xffff0000) != rtarea_base) ) write_log (_T("ORG: corrupt address! %08X"), a); rt_addr = a & 0xffff; } uae_u32 here (void) { return addr (rt_addr); } void align (int b) { rt_addr = (rt_addr + b - 1) & ~(b - 1); } static uae_u32 REGPARAM2 nullfunc (TrapContext *context) { write_log (_T("Null function called\n")); return 0; } static uae_u32 REGPARAM2 getchipmemsize (TrapContext *context) { m68k_dreg (regs, 1) = allocated_z3chipmem; m68k_areg (regs, 1) = z3chipmem_start; return allocated_chipmem; } static uae_u32 REGPARAM2 uae_puts (TrapContext *context) { puts ((char*)get_real_address (m68k_areg (regs, 0))); return 0; } void rtarea_init_mem (void) { rtarea = mapped_malloc (RTAREA_SIZE, _T("rtarea")); if (!rtarea) { write_log (_T("virtual memory exhausted (rtarea)!\n")); abort (); } rtarea_bank.baseaddr = rtarea; } void rtarea_init (void) { uae_u32 a; TCHAR uaever[100]; rt_straddr = 0xFF00 - 2; rt_addr = 0; init_traps (); rtarea_init_mem (); memset (rtarea, 0, RTAREA_SIZE); _stprintf (uaever, _T("uae-%d.%d.%d"), UAEMAJOR, UAEMINOR, UAESUBREV); EXPANSION_uaeversion = ds (uaever); EXPANSION_explibname = ds (_T("expansion.library")); EXPANSION_doslibname = ds (_T("dos.library")); EXPANSION_uaedevname = ds (_T("uae.device")); deftrap (NULL); /* Generic emulator trap */ dw (0); dw (0); a = here (); /* Dummy trap - removing this breaks the filesys emulation. */ org (rtarea_base + 0xFF00); calltrap (deftrap2 (nullfunc, TRAPFLAG_NO_RETVAL, _T(""))); org (rtarea_base + 0xFF80); calltrap (deftrapres (getchipmemsize, TRAPFLAG_DORET, _T("getchipmemsize"))); org (rtarea_base + 0xFF10); calltrap (deftrapres (uae_puts, TRAPFLAG_NO_RETVAL, _T("uae_puts"))); dw (RTS); org (a); #ifdef FILESYS filesys_install_code (); #endif uae_boot_rom_size = here () - rtarea_base; if (uae_boot_rom_size >= RTAREA_TRAPS) { write_log (_T("RTAREA_TRAPS needs to be increased!")); abort (); } #ifdef PICASSO96 uaegfx_install_code (rtarea_base + RTAREA_RTG); #endif org (RTAREA_TRAPS | rtarea_base); init_extended_traps (); } volatile int uae_int_requested = 0; void set_uae_int_flag (void) { rtarea[RTAREA_INT] = uae_int_requested & 1; } void rtarea_setup (void) { uaecptr base = need_uae_boot_rom (); if (base) { write_log (_T("RTAREA located at %08X\n"), base); rtarea_base = base; } } uaecptr makedatatable (uaecptr resid, uaecptr resname, uae_u8 type, uae_s8 priority, uae_u16 ver, uae_u16 rev) { uaecptr datatable = here (); dw (0xE000); /* INITBYTE */ dw (0x0008); /* LN_TYPE */ dw (type << 8); dw (0xE000); /* INITBYTE */ dw (0x0009); /* LN_PRI */ dw (priority << 8); dw (0xC000); /* INITLONG */ dw (0x000A); /* LN_NAME */ dl (resname); dw (0xE000); /* INITBYTE */ dw (0x000E); /* LIB_FLAGS */ dw (0x0600); /* LIBF_SUMUSED | LIBF_CHANGED */ dw (0xD000); /* INITWORD */ dw (0x0014); /* LIB_VERSION */ dw (ver); dw (0xD000); /* INITWORD */ dw (0x0016); /* LIB_REVISION */ dw (rev); dw (0xC000); /* INITLONG */ dw (0x0018); /* LIB_IDSTRING */ dl (resid); dw (0x0000); /* end of table */ return datatable; } fs-uae-2.2.3+dfsg/src/fsdb.cpp0000644000175000017500000002111112162366655016262 0ustar glaubitzglaubitz/* * UAE - The Un*x Amiga Emulator * * Library of functions to make emulated filesystem as independent as * possible of the host filesystem's capabilities. * * Copyright 1999 Bernd Schmidt */ #include "sysconfig.h" #include "sysdeps.h" #include "options.h" #include "uae.h" #include "uae/memory.h" #include "custom.h" #include "newcpu.h" #include "filesys.h" #include "autoconf.h" #include "fsusage.h" #include "scsidev.h" #include "fsdb.h" /* The on-disk format is as follows: * Offset 0, 1 byte, valid * Offset 1, 4 bytes, mode * Offset 5, 257 bytes, aname * Offset 263, 257 bytes, nname * Offset 519, 81 bytes, comment */ #define TRACING_ENABLED 0 #if TRACING_ENABLED #define TRACE(x) do { write_log x; } while(0) #else #define TRACE(x) #endif TCHAR *nname_begin (TCHAR *nname) { TCHAR *p = _tcsrchr (nname, FSDB_DIR_SEPARATOR); if (p) return p + 1; return nname; } #ifndef _WIN32 /* Find the name REL in directory DIRNAME. If we find a file that * has exactly the same name, return REL. If we find a file that * has the same name when compared case-insensitively, return a * malloced string that contains the name we found. If no file * exists that compares equal to REL, return 0. */ TCHAR *fsdb_search_dir (const TCHAR *dirname, TCHAR *rel) { TCHAR *p = 0; int de; my_opendir_s *dir; TCHAR fn[MAX_DPATH]; dir = my_opendir (dirname); /* This really shouldn't happen... */ if (! dir) return 0; while (p == 0 && (de = my_readdir (dir, fn)) != 0) { if (strcmp (fn, rel) == 0) p = rel; else if (strcasecmp (fn, rel) == 0) p = my_strdup (fn); } my_closedir (dir); return p; } #endif static FILE *get_fsdb (a_inode *dir, const TCHAR *mode) { TCHAR *n; FILE *f; if (!dir->nname) return NULL; n = build_nname (dir->nname, FSDB_FILE); f = _tfopen (n, mode); xfree (n); return f; } static void kill_fsdb (a_inode *dir) { if (!dir->nname) return; TCHAR *n = build_nname (dir->nname, FSDB_FILE); _wunlink (n); xfree (n); } static void fsdb_fixup (FILE *f, uae_u8 *buf, int size, a_inode *base) { TCHAR *nname; int ret; if (buf[0] == 0) return; TCHAR *fnname = au ((char*)buf + 5 + 257); nname = build_nname (base->nname, fnname); xfree (fnname); ret = fsdb_exists (nname); if (ret) { xfree (nname); return; } TRACE ((_T("uaefsdb '%s' deleted\n"), nname)); /* someone deleted this file/dir outside of emulation.. */ buf[0] = 0; xfree (nname); } /* Prune the db file the first time this directory is opened in a session. */ void fsdb_clean_dir (a_inode *dir) { uae_u8 buf[1 + 4 + 257 + 257 + 81]; TCHAR *n; FILE *f; off_t pos1 = 0, pos2; if (!dir->nname) return; n = build_nname (dir->nname, FSDB_FILE); f = _tfopen (n, _T("r+b")); if (f == 0) { xfree (n); return; } for (;;) { pos2 = ftell (f); if (fread (buf, 1, sizeof buf, f) < sizeof buf) break; fsdb_fixup (f, buf, sizeof buf, dir); if (buf[0] == 0) continue; if (pos1 != pos2) { fseek (f, pos1, SEEK_SET); fwrite (buf, 1, sizeof buf, f); fseek (f, pos2 + sizeof buf, SEEK_SET); } pos1 += sizeof buf; } fclose (f); if (pos1 == 0) { kill_fsdb (dir); } else { my_truncate (n, pos1); } xfree (n); } static a_inode *aino_from_buf (a_inode *base, uae_u8 *buf, long off) { uae_u32 mode; a_inode *aino = xcalloc (a_inode, 1); TCHAR *s; mode = do_get_mem_long ((uae_u32 *)(buf + 1)); buf += 5; aino->aname = au ((char*)buf); buf += 257; s = au ((char*)buf); aino->nname = build_nname (base->nname, s); xfree (s); buf += 257; aino->comment = *buf != '\0' ? au ((char*)buf) : 0; fsdb_fill_file_attrs (base, aino); aino->amigaos_mode = mode; aino->has_dbentry = 1; aino->dirty = 0; aino->db_offset = off; return aino; } a_inode *fsdb_lookup_aino_aname (a_inode *base, const TCHAR *aname) { FILE *f; f = get_fsdb (base, _T("r+b")); if (f == 0) { if (currprefs.filesys_custom_uaefsdb && (base->volflags & MYVOLUMEINFO_STREAMS)) return custom_fsdb_lookup_aino_aname (base, aname); return 0; } for (;;) { uae_u8 buf[1 + 4 + 257 + 257 + 81]; TCHAR *s; if (fread (buf, 1, sizeof buf, f) < sizeof buf) break; s = au ((char*)buf + 5); if (buf[0] != 0 && same_aname (s, aname)) { long pos = ftell (f) - sizeof buf; fclose (f); xfree (s); return aino_from_buf (base, buf, pos); } xfree (s); } fclose (f); return 0; } a_inode *fsdb_lookup_aino_nname (a_inode *base, const TCHAR *nname) { FILE *f; char *s; f = get_fsdb (base, _T("r+b")); if (f == 0) { if (currprefs.filesys_custom_uaefsdb && (base->volflags & MYVOLUMEINFO_STREAMS)) return custom_fsdb_lookup_aino_nname (base, nname); return 0; } s = ua (nname); for (;;) { uae_u8 buf[1 + 4 + 257 + 257 + 81]; if (fread (buf, 1, sizeof buf, f) < sizeof buf) break; if (buf[0] != 0 && strcmp ((char*)buf + 5 + 257, s) == 0) { long pos = ftell (f) - sizeof buf; fclose (f); xfree (s); return aino_from_buf (base, buf, pos); } } xfree (s); fclose (f); return 0; } int fsdb_used_as_nname (a_inode *base, const TCHAR *nname) { FILE *f; uae_u8 buf[1 + 4 + 257 + 257 + 81]; f = get_fsdb (base, _T("r+b")); if (f == 0) { if (currprefs.filesys_custom_uaefsdb && (base->volflags & MYVOLUMEINFO_STREAMS)) return custom_fsdb_used_as_nname (base, nname); return 0; } for (;;) { TCHAR *s; if (fread (buf, 1, sizeof buf, f) < sizeof buf) break; if (buf[0] == 0) continue; s = au ((char*)buf + 5 + 257); if (_tcscmp (s, nname) == 0) { xfree (s); fclose (f); return 1; } xfree (s); } fclose (f); return 0; } static int needs_dbentry (a_inode *aino) { const TCHAR *nn_begin; if (aino->deleted) return 0; if (! fsdb_mode_representable_p (aino, aino->amigaos_mode) || aino->comment != 0) return 1; nn_begin = nname_begin (aino->nname); return _tcscmp (nn_begin, aino->aname) != 0; } static void write_aino (FILE *f, a_inode *aino) { uae_u8 buf[1 + 4 + 257 + 257 + 81] = { 0 }; buf[0] = aino->needs_dbentry ? 1 : 0; do_put_mem_long ((uae_u32 *)(buf + 1), aino->amigaos_mode); ua_copy ((char*)buf + 5, 256, aino->aname); buf[5 + 256] = '\0'; ua_copy ((char*)buf + 5 + 257, 256, nname_begin (aino->nname)); buf[5 + 257 + 256] = '\0'; ua_copy ((char*)buf + 5 + 2 * 257, 80, aino->comment ? aino->comment : _T("")); buf[5 + 2 * 257 + 80] = '\0'; aino->db_offset = ftell (f); fwrite (buf, 1, sizeof buf, f); aino->has_dbentry = aino->needs_dbentry; TRACE ((_T("%d '%s' '%s' written\n"), aino->db_offset, aino->aname, aino->nname)); } /* Write back the db file for a directory. */ void fsdb_dir_writeback (a_inode *dir) { FILE *f; int changes_needed = 0; int entries_needed = 0; a_inode *aino; uae_u8 *tmpbuf; int size, i; TRACE ((_T("fsdb writeback %s\n"), dir->aname)); /* First pass: clear dirty bits where unnecessary, and see if any work * needs to be done. */ for (aino = dir->child; aino; aino = aino->sibling) { /* int old_needs_dbentry = aino->needs_dbentry || aino->has_dbentry; aino->needs_dbentry = needs_dbentry (aino); entries_needed |= aino->has_dbentry | aino->needs_dbentry; */ int old_needs_dbentry = aino->has_dbentry; int need = needs_dbentry (aino); aino->needs_dbentry = need; entries_needed |= need; if (! aino->dirty) continue; if (! aino->needs_dbentry && ! old_needs_dbentry) aino->dirty = 0; else changes_needed = 1; } if (! entries_needed) { kill_fsdb (dir); TRACE ((_T("fsdb removed\n"))); return; } if (! changes_needed) { TRACE ((_T("not modified\n"))); return; } f = get_fsdb (dir, _T("r+b")); if (f == 0) { if ((currprefs.filesys_custom_uaefsdb && (dir->volflags & MYVOLUMEINFO_STREAMS)) || currprefs.filesys_no_uaefsdb) { for (aino = dir->child; aino; aino = aino->sibling) { aino->dirty = 0; aino->has_dbentry = 0; aino->needs_dbentry = 0; } return; } f = get_fsdb (dir, _T("w+b")); if (f == 0) { TRACE ((_T("failed\n"))); /* This shouldn't happen... */ return; } } fseek (f, 0, SEEK_END); size = ftell (f); fseek (f, 0, SEEK_SET); tmpbuf = 0; if (size > 0) { tmpbuf = (uae_u8*)malloc (size); fread (tmpbuf, 1, size, f); } TRACE ((_T("**** updating '%s' %d\n"), dir->aname, size)); for (aino = dir->child; aino; aino = aino->sibling) { if (! aino->dirty) continue; aino->dirty = 0; i = 0; while (!aino->has_dbentry && i < size) { TCHAR *s = au ((char*)tmpbuf + i + 5); if (!_tcscmp (s, aino->aname)) { aino->has_dbentry = 1; aino->db_offset = i; } xfree (s); i += 1 + 4 + 257 + 257 + 81; } if (! aino->has_dbentry) { fseek (f, 0, SEEK_END); aino->has_dbentry = 1; } else { fseek (f, aino->db_offset, SEEK_SET); } write_aino (f, aino); } TRACE ((_T("end\n"))); fclose (f); xfree (tmpbuf); } fs-uae-2.2.3+dfsg/src/fdi2raw.cpp0000644000175000017500000015613312162366654016716 0ustar glaubitzglaubitz/* FDI to raw bit stream converter Copyright (c) 2001 by Toni Wilen FDI 2.0 support Copyright (c) 2003-2004 by Toni Wilen and Vincent Joguin FDI format created by Vincent "ApH" Joguin Tiny changes - function type fixes, multiple drives, addition of get_last_head and C++ callability - by Thomas Harte, 2001, T.Harte@excite.co.uk This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #include #include #include /* IF UAE */ #include "sysconfig.h" #include "sysdeps.h" #include "zfile.h" #include "uae.h" /* ELSE */ //#include "types.h" #include "fdi2raw.h" #include "crc32.h" #undef DEBUG #define VERBOSE #include #ifdef DEBUG static TCHAR *datalog (uae_u8 *src, int len) { static TCHAR buf[1000]; static int offset; int i = 0, offset2; offset2 = offset; buf[offset++]='\''; while (len--) { _stprintf (buf + offset, "%02X", src[i]); offset += 2; i++; if (i > 10) break; } buf[offset++]='\''; buf[offset++] = 0; if (offset >= 900) offset = 0; return buf + offset2; } #else static TCHAR *datalog (uae_u8 *src, int len) { return _T(""); } #endif #ifdef DEBUG #define debuglog write_log #else #define debuglog #endif #ifdef VERBOSE #define outlog write_log #else #define outlog #endif static int fdi_allocated; #ifdef DEBUG static void fdi_free (void *p) { int size; if (!p) return; size = ((int*)p)[-1]; fdi_allocated -= size; write_log (_T("%d freed (%d)\n"), size, fdi_allocated); free ((int*)p - 1); } static void *fdi_malloc (int size) { void *p = xmalloc (size + sizeof (int)); ((int*)p)[0] = size; fdi_allocated += size; write_log (_T("%d allocated (%d)\n"), size, fdi_allocated); return (int*)p + 1; } #else #define fdi_free xfree #define fdi_malloc xmalloc #endif #define MAX_SRC_BUFFER 4194304 #define MAX_DST_BUFFER 40000 #define MAX_MFM_SYNC_BUFFER 60000 #define MAX_TIMING_BUFFER 400000 #define MAX_TRACKS 168 struct fdi_cache { uae_u32 *avgp, *minp, *maxp; uae_u8 *idxp; int avg_free, idx_free, min_free, max_free; uae_u32 totalavg, pulses, maxidx, indexoffset; int weakbits; int lowlevel; }; struct fdi { uae_u8 *track_src_buffer; uae_u8 *track_src; int track_src_len; uae_u8 *track_dst_buffer; uae_u8 *track_dst; uae_u16 *track_dst_buffer_timing; uae_u8 track_len; uae_u8 track_type; int current_track; int last_track; int last_head; int rotation_speed; int bit_rate; int disk_type; int write_protect; int reversed_side; int err; uae_u8 header[2048]; int track_offsets[MAX_TRACKS]; struct zfile *file; int out; int mfmsync_offset; int *mfmsync_buffer; /* sector described only */ int index_offset; int encoding_type; /* bit handling */ int nextdrop; struct fdi_cache cache[MAX_TRACKS]; }; #define get_u32(x) ((((x)[0])<<24)|(((x)[1])<<16)|(((x)[2])<<8)|((x)[3])) #define get_u24(x) ((((x)[0])<<16)|(((x)[1])<<8)|((x)[2])) STATIC_INLINE void put_u32 (uae_u8 *d, uae_u32 v) { d[0] = v >> 24; d[1] = v >> 16; d[2] = v >> 8; d[3] = v; } struct node { uae_u16 v; struct node *left; struct node *right; }; typedef struct node NODE; static uae_u8 temp, temp2; static uae_u8 *expand_tree (uae_u8 *stream, NODE *node) { if (temp & temp2) { fdi_free (node->left); node->left = 0; fdi_free (node->right); node->right = 0; temp2 >>= 1; if (!temp2) { temp = *stream++; temp2 = 0x80; } return stream; } else { uae_u8 *stream_temp; temp2 >>= 1; if (!temp2) { temp = *stream++; temp2 = 0x80; } node->left = fdi_malloc (NODE, 1); memset (node->left, 0, sizeof (NODE)); stream_temp = expand_tree (stream, node->left); node->right = fdi_malloc (NODE ,1); memset (node->right, 0, sizeof (NODE)); return expand_tree (stream_temp, node->right); } } static uae_u8 *values_tree8 (uae_u8 *stream, NODE *node) { if (node->left == 0) { node->v = *stream++; return stream; } else { uae_u8 *stream_temp = values_tree8 (stream, node->left); return values_tree8 (stream_temp, node->right); } } static uae_u8 *values_tree16 (uae_u8 *stream, NODE *node) { if (node->left == 0) { uae_u16 high_8_bits = (*stream++) << 8; node->v = high_8_bits | (*stream++); return stream; } else { uae_u8 *stream_temp = values_tree16 (stream, node->left); return values_tree16 (stream_temp, node->right); } } static void free_nodes (NODE *node) { if (node) { free_nodes (node->left); free_nodes (node->right); fdi_free (node); } } static uae_u32 sign_extend16 (uae_u32 v) { if (v & 0x8000) v |= 0xffff0000; return v; } static uae_u32 sign_extend8 (uae_u32 v) { if (v & 0x80) v |= 0xffffff00; return v; } static void fdi_decode (uae_u8 *stream, int size, uae_u8 *out) { int i; uae_u8 sign_extend, sixteen_bit, sub_stream_shift; NODE root; NODE *current_node; memset (out, 0, size * 4); sub_stream_shift = 1; while (sub_stream_shift) { //sub-stream header decode sign_extend = *stream++; sub_stream_shift = sign_extend & 0x7f; sign_extend &= 0x80; sixteen_bit = (*stream++) & 0x80; //huffman tree architecture decode temp = *stream++; temp2 = 0x80; stream = expand_tree (stream, &root); if (temp2 == 0x80) stream--; //huffman output values decode if (sixteen_bit) stream = values_tree16 (stream, &root); else stream = values_tree8 (stream, &root); //sub-stream data decode temp2 = 0; for (i = 0; i < size; i++) { uae_u32 v; uae_u8 decode = 1; current_node = &root; while (decode) { if (current_node->left == 0) { decode = 0; } else { temp2 >>= 1; if (!temp2) { temp2 = 0x80; temp = *stream++; } if (temp & temp2) current_node = current_node->right; else current_node = current_node->left; } } v = ((uae_u32*)out)[i]; if (sign_extend) { if (sixteen_bit) v |= sign_extend16 (current_node->v) << sub_stream_shift; else v |= sign_extend8 (current_node->v) << sub_stream_shift; } else { v |= current_node->v << sub_stream_shift; } ((uae_u32*)out)[i] = v; } free_nodes (root.left); free_nodes (root.right); } } static int decode_raw_track (FDI *fdi) { int size = get_u32(fdi->track_src); memcpy (fdi->track_dst, fdi->track_src, (size + 7) >> 3); fdi->track_src += (size + 7) >> 3; return size; } /* unknown track */ static void zxx (FDI *fdi) { outlog (_T("track %d: unknown track type 0x%02X\n"), fdi->current_track, fdi->track_type); // return -1; } /* unsupported track */ static void zyy (FDI *fdi) { outlog (_T("track %d: unsupported track type 0x%02X\n"), fdi->current_track, fdi->track_type); // return -1; } /* empty track */ static void track_empty (FDI *fdi) { // return 0; } /* unknown sector described type */ static void dxx (FDI *fdi) { outlog (_T("\ntrack %d: unknown sector described type 0x%02X\n"), fdi->current_track, fdi->track_type); fdi->err = 1; } /* unsupported sector described type */ static void dyy (FDI *fdi) { outlog (_T("\ntrack %d: unsupported sector described 0x%02X\n"), fdi->current_track, fdi->track_type); fdi->err = 1; } /* add position of mfm sync bit */ static void add_mfm_sync_bit (FDI *fdi) { if (fdi->nextdrop) { fdi->nextdrop = 0; return; } fdi->mfmsync_buffer[fdi->mfmsync_offset++] = fdi->out; if (fdi->out == 0) { outlog (_T("illegal position for mfm sync bit, offset=%d\n"),fdi->out); fdi->err = 1; } if (fdi->mfmsync_offset >= MAX_MFM_SYNC_BUFFER) { fdi->mfmsync_offset = 0; outlog (_T("mfmsync buffer overflow\n")); fdi->err = 1; } fdi->out++; } #define BIT_BYTEOFFSET ((fdi->out) >> 3) #define BIT_BITOFFSET (7-((fdi->out)&7)) /* add one bit */ static void bit_add (FDI *fdi, int bit) { if (fdi->nextdrop) { fdi->nextdrop = 0; return; } fdi->track_dst[BIT_BYTEOFFSET] &= ~(1 << BIT_BITOFFSET); if (bit) fdi->track_dst[BIT_BYTEOFFSET] |= (1 << BIT_BITOFFSET); fdi->out++; if (fdi->out >= MAX_DST_BUFFER * 8) { outlog (_T("destination buffer overflow\n")); fdi->err = 1; fdi->out = 1; } } /* add bit and mfm sync bit */ static void bit_mfm_add (FDI *fdi, int bit) { add_mfm_sync_bit (fdi); bit_add (fdi, bit); } /* remove following bit */ static void bit_drop_next (FDI *fdi) { if (fdi->nextdrop > 0) { outlog (_T("multiple bit_drop_next() called")); } else if (fdi->nextdrop < 0) { fdi->nextdrop = 0; debuglog (":DNN:"); return; } debuglog (":DN:"); fdi->nextdrop = 1; } /* ignore next bit_drop_next() */ static void bit_dedrop (FDI *fdi) { if (fdi->nextdrop) { outlog (_T("bit_drop_next called before bit_dedrop")); } fdi->nextdrop = -1; debuglog (":BDD:"); } /* add one byte */ static void byte_add (FDI *fdi, uae_u8 v) { int i; for (i = 7; i >= 0; i--) bit_add (fdi, v & (1 << i)); } /* add one word */ static void word_add (FDI *fdi, uae_u16 v) { byte_add (fdi, (uae_u8)(v >> 8)); byte_add (fdi, (uae_u8)v); } /* add one byte and mfm encode it */ static void byte_mfm_add (FDI *fdi, uae_u8 v) { int i; for (i = 7; i >= 0; i--) bit_mfm_add (fdi, v & (1 << i)); } /* add multiple bytes and mfm encode them */ static void bytes_mfm_add (FDI *fdi, uae_u8 v, int len) { int i; for (i = 0; i < len; i++) byte_mfm_add (fdi, v); } /* add one mfm encoded word and re-mfm encode it */ static void word_post_mfm_add (FDI *fdi, uae_u16 v) { int i; for (i = 14; i >= 0; i -= 2) bit_mfm_add (fdi, v & (1 << i)); } /* bit 0 */ static void s00(FDI *fdi) { bit_add (fdi, 0); } /* bit 1*/ static void s01(FDI *fdi) { bit_add (fdi, 1); } /* 4489 */ static void s02(FDI *fdi) { word_add (fdi, 0x4489); } /* 5224 */ static void s03(FDI *fdi) { word_add (fdi, 0x5224); } /* mfm sync bit */ static void s04(FDI *fdi) { add_mfm_sync_bit (fdi); } /* RLE MFM-encoded data */ static void s08(FDI *fdi) { int bytes = *fdi->track_src++; uae_u8 byte = *fdi->track_src++; if (bytes == 0) bytes = 256; debuglog ("s08:len=%d,data=%02X",bytes,byte); while(bytes--) byte_add (fdi, byte); } /* RLE MFM-decoded data */ static void s09(FDI *fdi) { int bytes = *fdi->track_src++; uae_u8 byte = *fdi->track_src++; if (bytes == 0) bytes = 256; bit_drop_next (fdi); debuglog ("s09:len=%d,data=%02X",bytes,byte); while(bytes--) byte_mfm_add (fdi, byte); } /* MFM-encoded data */ static void s0a(FDI *fdi) { int i, bits = (fdi->track_src[0] << 8) | fdi->track_src[1]; uae_u8 b; fdi->track_src += 2; debuglog ("s0a:bits=%d,data=%s", bits, datalog (fdi->track_src, (bits + 7) / 8)); while (bits >= 8) { byte_add (fdi, *fdi->track_src++); bits -= 8; } if (bits > 0) { i = 7; b = *fdi->track_src++; while (bits--) { bit_add (fdi, b & (1 << i)); i--; } } } /* MFM-encoded data */ static void s0b(FDI *fdi) { int i, bits = ((fdi->track_src[0] << 8) | fdi->track_src[1]) + 65536; uae_u8 b; fdi->track_src += 2; debuglog ("s0b:bits=%d,data=%s", bits, datalog (fdi->track_src, (bits + 7) / 8)); while (bits >= 8) { byte_add (fdi, *fdi->track_src++); bits -= 8; } if (bits > 0) { i = 7; b = *fdi->track_src++; while (bits--) { bit_add (fdi, b & (1 << i)); i--; } } } /* MFM-decoded data */ static void s0c(FDI *fdi) { int i, bits = (fdi->track_src[0] << 8) | fdi->track_src[1]; uae_u8 b; fdi->track_src += 2; bit_drop_next (fdi); debuglog ("s0c:bits=%d,data=%s", bits, datalog (fdi->track_src, (bits + 7) / 8)); while (bits >= 8) { byte_mfm_add (fdi, *fdi->track_src++); bits -= 8; } if (bits > 0) { i = 7; b = *fdi->track_src++; while(bits--) { bit_mfm_add (fdi, b & (1 << i)); i--; } } } /* MFM-decoded data */ static void s0d(FDI *fdi) { int i, bits = ((fdi->track_src[0] << 8) | fdi->track_src[1]) + 65536; uae_u8 b; fdi->track_src += 2; bit_drop_next (fdi); debuglog ("s0d:bits=%d,data=%s", bits, datalog (fdi->track_src, (bits + 7) / 8)); while (bits >= 8) { byte_mfm_add (fdi, *fdi->track_src++); bits -= 8; } if (bits > 0) { i = 7; b = *fdi->track_src++; while(bits--) { bit_mfm_add (fdi, b & (1 << i)); i--; } } } /* ***** */ /* AMIGA */ /* ***** */ /* just for testing integrity of Amiga sectors */ static void rotateonebit (uae_u8 *start, uae_u8 *end, int shift) { if (shift == 0) return; while (start <= end) { start[0] <<= shift; start[0] |= start[1] >> (8 - shift); start++; } } static int check_offset; static uae_u16 getmfmword (uae_u8 *mbuf) { uae_u32 v; v = (mbuf[0] << 8) | (mbuf[1] << 0); if (check_offset == 0) return v; v <<= 8; v |= mbuf[2]; v >>= check_offset; return v; } #define MFMMASK 0x55555555 static uae_u32 getmfmlong (uae_u8 * mbuf) { return ((getmfmword (mbuf) << 16) | getmfmword (mbuf + 2)) & MFMMASK; } static int amiga_check_track (FDI *fdi) { int i, j, secwritten = 0; int fwlen = fdi->out / 8; int length = 2 * fwlen; int drvsec = 11; uae_u32 odd, even, chksum, id, dlong; uae_u8 *secdata; uae_u8 secbuf[544]; uae_u8 bigmfmbuf[60000]; uae_u8 *mbuf, *mbuf2, *mend; TCHAR sectable[22]; uae_u8 *raw = fdi->track_dst_buffer; int slabel, off; int ok = 1; memset (bigmfmbuf, 0, sizeof (bigmfmbuf)); mbuf = bigmfmbuf; check_offset = 0; for (i = 0; i < (fdi->out + 7) / 8; i++) *mbuf++ = raw[i]; off = fdi->out & 7; #if 1 if (off > 0) { mbuf--; *mbuf &= ~((1 << (8 - off)) - 1); } j = 0; while (i < (fdi->out + 7) / 8 + 600) { *mbuf++ |= (raw[j] >> off) | ((raw[j + 1]) << (8 - off)); j++; i++; } #endif mbuf = bigmfmbuf; memset (sectable, 0, sizeof (sectable)); //memcpy (mbuf + fwlen, mbuf, fwlen * sizeof (uae_u16)); mend = bigmfmbuf + length; mend -= (4 + 16 + 8 + 512); while (secwritten < drvsec) { int trackoffs; for (;;) { rotateonebit (bigmfmbuf, mend, 1); if (getmfmword (mbuf) == 0) break; if (secwritten == 10) { mbuf[0] = 0x44; mbuf[1] = 0x89; } // check_offset++; if (check_offset > 7) { check_offset = 0; mbuf++; if (mbuf >= mend || *mbuf == 0) break; } if (getmfmword (mbuf) == 0x4489) break; } if (mbuf >= mend || *mbuf == 0) break; rotateonebit (bigmfmbuf, mend, check_offset); check_offset = 0; while (getmfmword (mbuf) == 0x4489) mbuf+= 1 * 2; mbuf2 = mbuf + 8; odd = getmfmlong (mbuf); even = getmfmlong (mbuf + 2 * 2); mbuf += 4 * 2; id = (odd << 1) | even; trackoffs = (id & 0xff00) >> 8; if (trackoffs + 1 > drvsec) { outlog (_T("illegal sector offset %d\n"),trackoffs); ok = 0; mbuf = mbuf2; continue; } if ((id >> 24) != 0xff) { outlog (_T("sector %d format type %02X?\n"), trackoffs, id >> 24); ok = 0; } chksum = odd ^ even; slabel = 0; for (i = 0; i < 4; i++) { odd = getmfmlong (mbuf); even = getmfmlong (mbuf + 8 * 2); mbuf += 2* 2; dlong = (odd << 1) | even; if (dlong) slabel = 1; chksum ^= odd ^ even; } mbuf += 8 * 2; odd = getmfmlong (mbuf); even = getmfmlong (mbuf + 2 * 2); mbuf += 4 * 2; if (((odd << 1) | even) != chksum) { outlog (_T("sector %d header crc error\n"), trackoffs); ok = 0; mbuf = mbuf2; continue; } outlog (_T("sector %d header crc ok\n"), trackoffs); if (((id & 0x00ff0000) >> 16) != (uae_u32)fdi->current_track) { outlog (_T("illegal track number %d <> %d\n"),fdi->current_track,(id & 0x00ff0000) >> 16); ok++; mbuf = mbuf2; continue; } odd = getmfmlong (mbuf); even = getmfmlong (mbuf + 2 * 2); mbuf += 4 * 2; chksum = (odd << 1) | even; secdata = secbuf + 32; for (i = 0; i < 128; i++) { odd = getmfmlong (mbuf); even = getmfmlong (mbuf + 256 * 2); mbuf += 2 * 2; dlong = (odd << 1) | even; *secdata++ = (uae_u8) (dlong >> 24); *secdata++ = (uae_u8) (dlong >> 16); *secdata++ = (uae_u8) (dlong >> 8); *secdata++ = (uae_u8) dlong; chksum ^= odd ^ even; } mbuf += 256 * 2; if (chksum) { outlog (_T("sector %d data checksum error\n"),trackoffs); ok = 0; } else if (sectable[trackoffs]) { outlog (_T("sector %d already found?\n"), trackoffs); mbuf = mbuf2; } else { outlog (_T("sector %d ok\n"),trackoffs); if (slabel) outlog (_T("(non-empty sector header)\n")); sectable[trackoffs] = 1; secwritten++; if (trackoffs == 9) mbuf += 0x228; } } for (i = 0; i < drvsec; i++) { if (!sectable[i]) { outlog (_T("sector %d missing\n"), i); ok = 0; } } return ok; } static void amiga_data_raw (FDI *fdi, uae_u8 *secbuf, uae_u8 *crc, int len) { int i; uae_u8 crcbuf[4]; if (!crc) { memset (crcbuf, 0, 4); } else { memcpy (crcbuf, crc ,4); } for (i = 0; i < 4; i++) byte_mfm_add (fdi, crcbuf[i]); for (i = 0; i < len; i++) byte_mfm_add (fdi, secbuf[i]); } static void amiga_data (FDI *fdi, uae_u8 *secbuf) { uae_u16 mfmbuf[4 + 512]; uae_u32 dodd, deven, dck; int i; for (i = 0; i < 512; i += 4) { deven = ((secbuf[i + 0] << 24) | (secbuf[i + 1] << 16) | (secbuf[i + 2] << 8) | (secbuf[i + 3])); dodd = deven >> 1; deven &= 0x55555555; dodd &= 0x55555555; mfmbuf[(i >> 1) + 4] = (uae_u16) (dodd >> 16); mfmbuf[(i >> 1) + 5] = (uae_u16) dodd; mfmbuf[(i >> 1) + 256 + 4] = (uae_u16) (deven >> 16); mfmbuf[(i >> 1) + 256 + 5] = (uae_u16) deven; } dck = 0; for (i = 4; i < 4 + 512; i += 2) dck ^= (mfmbuf[i] << 16) | mfmbuf[i + 1]; deven = dodd = dck; dodd >>= 1; deven &= 0x55555555; dodd &= 0x55555555; mfmbuf[0] = (uae_u16) (dodd >> 16); mfmbuf[1] = (uae_u16) dodd; mfmbuf[2] = (uae_u16) (deven >> 16); mfmbuf[3] = (uae_u16) deven; for (i = 0; i < 4 + 512; i ++) word_post_mfm_add (fdi, mfmbuf[i]); } static void amiga_sector_header (FDI *fdi, uae_u8 *header, uae_u8 *data, int sector, int untilgap) { uae_u8 headerbuf[4], databuf[16]; uae_u32 deven, dodd, hck; uae_u16 mfmbuf[24]; int i; byte_mfm_add (fdi, 0); byte_mfm_add (fdi, 0); word_add (fdi, 0x4489); word_add (fdi, 0x4489); if (header) { memcpy (headerbuf, header, 4); } else { headerbuf[0] = 0xff; headerbuf[1] = (uae_u8)fdi->current_track; headerbuf[2] = (uae_u8)sector; headerbuf[3] = (uae_u8)untilgap; } if (data) memcpy (databuf, data, 16); else memset (databuf, 0, 16); deven = ((headerbuf[0] << 24) | (headerbuf[1] << 16) | (headerbuf[2] << 8) | (headerbuf[3])); dodd = deven >> 1; deven &= 0x55555555; dodd &= 0x55555555; mfmbuf[0] = (uae_u16) (dodd >> 16); mfmbuf[1] = (uae_u16) dodd; mfmbuf[2] = (uae_u16) (deven >> 16); mfmbuf[3] = (uae_u16) deven; for (i = 0; i < 16; i += 4) { deven = ((databuf[i] << 24) | (databuf[i + 1] << 16) | (databuf[i + 2] << 8) | (databuf[i + 3])); dodd = deven >> 1; deven &= 0x55555555; dodd &= 0x55555555; mfmbuf[(i >> 1) + 0 + 4] = (uae_u16) (dodd >> 16); mfmbuf[(i >> 1) + 0 + 5] = (uae_u16) dodd; mfmbuf[(i >> 1) + 8 + 4] = (uae_u16) (deven >> 16); mfmbuf[(i >> 1) + 8 + 5] = (uae_u16) deven; } hck = 0; for (i = 0; i < 4 + 16; i += 2) hck ^= (mfmbuf[i] << 16) | mfmbuf[i + 1]; deven = dodd = hck; dodd >>= 1; deven &= 0x55555555; dodd &= 0x55555555; mfmbuf[20] = (uae_u16) (dodd >> 16); mfmbuf[21] = (uae_u16) dodd; mfmbuf[22] = (uae_u16) (deven >> 16); mfmbuf[23] = (uae_u16) deven; for (i = 0; i < 4 + 16 + 4; i ++) word_post_mfm_add (fdi, mfmbuf[i]); } /* standard super-extended Amiga sector header */ static void s20 (FDI *fdi) { bit_drop_next (fdi); debuglog ("s20:header=%s,data=%s", datalog (fdi->track_src, 4), datalog (fdi->track_src + 4, 16)); amiga_sector_header (fdi, fdi->track_src, fdi->track_src + 4, 0, 0); fdi->track_src += 4 + 16; } /* standard extended Amiga sector header */ static void s21 (FDI *fdi) { bit_drop_next (fdi); debuglog ("s21:header=%s", datalog (fdi->track_src, 4)); amiga_sector_header (fdi, fdi->track_src, 0, 0, 0); fdi->track_src += 4; } /* standard Amiga sector header */ static void s22 (FDI *fdi) { bit_drop_next (fdi); debuglog ("s22:sector=%d,untilgap=%d", fdi->track_src[0], fdi->track_src[1]); amiga_sector_header (fdi, 0, 0, fdi->track_src[0], fdi->track_src[1]); fdi->track_src += 2; } /* standard 512-byte, CRC-correct Amiga data */ static void s23 (FDI *fdi) { debuglog ("s23:data=%s", datalog (fdi->track_src, 512)); amiga_data (fdi, fdi->track_src); fdi->track_src += 512; } /* not-decoded, 128*2^x-byte, CRC-correct Amiga data */ static void s24 (FDI *fdi) { int shift = *fdi->track_src++; debuglog ("s24:shift=%d,data=%s", shift, datalog (fdi->track_src, 128 << shift)); amiga_data_raw (fdi, fdi->track_src, 0, 128 << shift); fdi->track_src += 128 << shift; } /* not-decoded, 128*2^x-byte, CRC-incorrect Amiga data */ static void s25 (FDI *fdi) { int shift = *fdi->track_src++; debuglog ("s25:shift=%d,crc=%s,data=%s", shift, datalog (fdi->track_src, 4), datalog (fdi->track_src + 4, 128 << shift)); amiga_data_raw (fdi, fdi->track_src + 4, fdi->track_src, 128 << shift); fdi->track_src += 4 + (128 << shift); } /* standard extended Amiga sector */ static void s26 (FDI *fdi) { s21 (fdi); debuglog ("s26:data=%s", datalog (fdi->track_src, 512)); amiga_data (fdi, fdi->track_src); fdi->track_src += 512; } /* standard short Amiga sector */ static void s27 (FDI *fdi) { s22 (fdi); debuglog ("s27:data=%s", datalog (fdi->track_src, 512)); amiga_data (fdi, fdi->track_src); fdi->track_src += 512; } /* *** */ /* IBM */ /* *** */ static uae_u16 ibm_crc (uae_u8 byte, int reset) { static uae_u16 crc; int i; if (reset) crc = 0xcdb4; for (i = 0; i < 8; i++) { if (crc & 0x8000) { crc <<= 1; if (!(byte & 0x80)) crc ^= 0x1021; } else { crc <<= 1; if (byte & 0x80) crc ^= 0x1021; } byte <<= 1; } return crc; } static void ibm_data (FDI *fdi, uae_u8 *data, uae_u8 *crc, int len) { int i; uae_u8 crcbuf[2]; uae_u16 crcv; word_add (fdi, 0x4489); word_add (fdi, 0x4489); word_add (fdi, 0x4489); byte_mfm_add (fdi, 0xfb); ibm_crc (0xfb, 1); for (i = 0; i < len; i++) { byte_mfm_add (fdi, data[i]); crcv = ibm_crc (data[i], 0); } if (!crc) { crc = crcbuf; crc[0] = (uae_u8)(crcv >> 8); crc[1] = (uae_u8)crcv; } byte_mfm_add (fdi, crc[0]); byte_mfm_add (fdi, crc[1]); } static void ibm_sector_header (FDI *fdi, uae_u8 *data, uae_u8 *crc, int secnum, int pre) { uae_u8 secbuf[5]; uae_u8 crcbuf[2]; uae_u16 crcv; int i; if (pre) bytes_mfm_add (fdi, 0, 12); word_add (fdi, 0x4489); word_add (fdi, 0x4489); word_add (fdi, 0x4489); secbuf[0] = 0xfe; if (secnum >= 0) { secbuf[1] = (uae_u8)(fdi->current_track/2); secbuf[2] = (uae_u8)(fdi->current_track%2); secbuf[3] = (uae_u8)secnum; secbuf[4] = 2; } else { memcpy (secbuf + 1, data, 4); } ibm_crc (secbuf[0], 1); ibm_crc (secbuf[1], 0); ibm_crc (secbuf[2], 0); ibm_crc (secbuf[3], 0); crcv = ibm_crc (secbuf[4], 0); if (crc) { memcpy (crcbuf, crc, 2); } else { crcbuf[0] = (uae_u8)(crcv >> 8); crcbuf[1] = (uae_u8)crcv; } /* data */ for (i = 0;i < 5; i++) byte_mfm_add (fdi, secbuf[i]); /* crc */ byte_mfm_add (fdi, crcbuf[0]); byte_mfm_add (fdi, crcbuf[1]); } /* standard IBM index address mark */ static void s10(FDI *fdi) { bit_drop_next (fdi); bytes_mfm_add (fdi, 0, 12); word_add (fdi, 0x5224); word_add (fdi, 0x5224); word_add (fdi, 0x5224); byte_mfm_add (fdi, 0xfc); } /* standard IBM pre-gap */ static void s11(FDI *fdi) { bit_drop_next (fdi); bytes_mfm_add (fdi, 0x4e, 78); bit_dedrop (fdi); s10 (fdi); bytes_mfm_add (fdi, 0x4e, 50); } /* standard ST pre-gap */ static void s12(FDI *fdi) { bit_drop_next (fdi); bytes_mfm_add (fdi, 0x4e, 78); } /* standard extended IBM sector header */ static void s13(FDI *fdi) { bit_drop_next (fdi); debuglog ("s13:header=%s", datalog (fdi->track_src, 4)); ibm_sector_header (fdi, fdi->track_src, 0, -1, 1); fdi->track_src += 4; } /* standard mini-extended IBM sector header */ static void s14(FDI *fdi) { debuglog ("s14:header=%s", datalog (fdi->track_src, 4)); ibm_sector_header (fdi, fdi->track_src, 0, -1, 0); fdi->track_src += 4; } /* standard short IBM sector header */ static void s15(FDI *fdi) { bit_drop_next (fdi); debuglog ("s15:sector=%d", *fdi->track_src); ibm_sector_header (fdi, 0, 0, *fdi->track_src++, 1); } /* standard mini-short IBM sector header */ static void s16(FDI *fdi) { debuglog ("s16:track=%d", *fdi->track_src); ibm_sector_header (fdi, 0, 0, *fdi->track_src++, 0); } /* standard CRC-incorrect mini-extended IBM sector header */ static void s17(FDI *fdi) { debuglog ("s17:header=%s,crc=%s", datalog (fdi->track_src, 4), datalog (fdi->track_src + 4, 2)); ibm_sector_header (fdi, fdi->track_src, fdi->track_src + 4, -1, 0); fdi->track_src += 4 + 2; } /* standard CRC-incorrect mini-short IBM sector header */ static void s18(FDI *fdi) { debuglog ("s18:sector=%d,header=%s", *fdi->track_src, datalog (fdi->track_src + 1, 4)); ibm_sector_header (fdi, 0, fdi->track_src + 1, *fdi->track_src, 0); fdi->track_src += 1 + 4; } /* standard 512-byte CRC-correct IBM data */ static void s19(FDI *fdi) { debuglog ("s19:data=%s", datalog (fdi->track_src , 512)); ibm_data (fdi, fdi->track_src, 0, 512); fdi->track_src += 512; } /* standard 128*2^x-byte-byte CRC-correct IBM data */ static void s1a(FDI *fdi) { int shift = *fdi->track_src++; debuglog ("s1a:shift=%d,data=%s", shift, datalog (fdi->track_src , 128 << shift)); ibm_data (fdi, fdi->track_src, 0, 128 << shift); fdi->track_src += 128 << shift; } /* standard 128*2^x-byte-byte CRC-incorrect IBM data */ static void s1b(FDI *fdi) { int shift = *fdi->track_src++; debuglog ("s1b:shift=%d,crc=%s,data=%s", shift, datalog (fdi->track_src + (128 << shift), 2), datalog (fdi->track_src , 128 << shift)); ibm_data (fdi, fdi->track_src, fdi->track_src + (128 << shift), 128 << shift); fdi->track_src += (128 << shift) + 2; } /* standard extended IBM sector */ static void s1c(FDI *fdi) { int shift = fdi->track_src[3]; s13 (fdi); bytes_mfm_add (fdi, 0x4e, 22); bytes_mfm_add (fdi, 0x00, 12); ibm_data (fdi, fdi->track_src, 0, 128 << shift); fdi->track_src += 128 << shift; } /* standard short IBM sector */ static void s1d(FDI *fdi) { s15 (fdi); bytes_mfm_add (fdi, 0x4e, 22); bytes_mfm_add (fdi, 0x00, 12); s19 (fdi); } /* end marker */ static void sff(FDI *fdi) { } typedef void (*decode_described_track_func)(FDI*); static decode_described_track_func decode_sectors_described_track[] = { s00,s01,s02,s03,s04,dxx,dxx,dxx,s08,s09,s0a,s0b,s0c,s0d,dxx,dxx, /* 00-0F */ s10,s11,s12,s13,s14,s15,s16,s17,s18,s19,s1a,s1b,s1c,s1d,dxx,dxx, /* 10-1F */ s20,s21,s22,s23,s24,s25,s26,s27,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx, /* 20-2F */ dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx, /* 30-3F */ dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx, /* 40-4F */ dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx, /* 50-5F */ dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx, /* 60-6F */ dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx, /* 70-7F */ dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx, /* 80-8F */ dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx, /* 90-9F */ dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx, /* A0-AF */ dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx, /* B0-BF */ dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx, /* C0-CF */ dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx, /* D0-DF */ dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx, /* E0-EF */ dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,dxx,sff /* F0-FF */ }; static void track_amiga (struct fdi *fdi, int first_sector, int max_sector) { int i; bit_add (fdi, 0); bit_drop_next (fdi); for (i = 0; i < max_sector; i++) { amiga_sector_header (fdi, 0, 0, first_sector, max_sector - i); amiga_data (fdi, fdi->track_src + first_sector * 512); first_sector++; if (first_sector >= max_sector) first_sector = 0; } bytes_mfm_add (fdi, 0, 260); /* gap */ } static void track_atari_st (struct fdi *fdi, int max_sector) { int i, gap3; uae_u8 *p = fdi->track_src; switch (max_sector) { case 9: gap3 = 40; break; case 10: gap3 = 24; break; } s15 (fdi); for (i = 0; i < max_sector; i++) { byte_mfm_add (fdi, 0x4e); byte_mfm_add (fdi, 0x4e); ibm_sector_header (fdi, 0, 0, fdi->current_track, 1); ibm_data (fdi, p + i * 512, 0, 512); bytes_mfm_add (fdi, 0x4e, gap3); } bytes_mfm_add (fdi, 0x4e, 660 - gap3); fdi->track_src += fdi->track_len * 256; } static void track_pc (struct fdi *fdi, int max_sector) { int i, gap3; uae_u8 *p = fdi->track_src; switch (max_sector) { case 8: gap3 = 116; break; case 9: gap3 = 54; break; default: gap3 = 100; /* fixme */ break; } s11 (fdi); for (i = 0; i < max_sector; i++) { byte_mfm_add (fdi, 0x4e); byte_mfm_add (fdi, 0x4e); ibm_sector_header (fdi, 0, 0, fdi->current_track, 1); ibm_data (fdi, p + i * 512, 0, 512); bytes_mfm_add (fdi, 0x4e, gap3); } bytes_mfm_add (fdi, 0x4e, 600 - gap3); fdi->track_src += fdi->track_len * 256; } /* amiga dd */ static void track_amiga_dd (struct fdi *fdi) { uae_u8 *p = fdi->track_src; track_amiga (fdi, fdi->track_len >> 4, 11); fdi->track_src = p + (fdi->track_len & 15) * 512; } /* amiga hd */ static void track_amiga_hd (struct fdi *fdi) { uae_u8 *p = fdi->track_src; track_amiga (fdi, 0, 22); fdi->track_src = p + fdi->track_len * 256; } /* atari st 9 sector */ static void track_atari_st_9 (struct fdi *fdi) { track_atari_st (fdi, 9); } /* atari st 10 sector */ static void track_atari_st_10 (struct fdi *fdi) { track_atari_st (fdi, 10); } /* pc 8 sector */ static void track_pc_8 (struct fdi *fdi) { track_pc (fdi, 8); } /* pc 9 sector */ static void track_pc_9 (struct fdi *fdi) { track_pc (fdi, 9); } /* pc 15 sector */ static void track_pc_15 (struct fdi *fdi) { track_pc (fdi, 15); } /* pc 18 sector */ static void track_pc_18 (struct fdi *fdi) { track_pc (fdi, 18); } /* pc 36 sector */ static void track_pc_36 (struct fdi *fdi) { track_pc (fdi, 36); } typedef void (*decode_normal_track_func)(FDI*); static decode_normal_track_func decode_normal_track[] = { track_empty, /* 0 */ track_amiga_dd, track_amiga_hd, /* 1-2 */ track_atari_st_9, track_atari_st_10, /* 3-4 */ track_pc_8, track_pc_9, track_pc_15, track_pc_18, track_pc_36, /* 5-9 */ zxx,zxx,zxx,zxx,zxx /* A-F */ }; static void fix_mfm_sync (FDI *fdi) { int i, pos, off1, off2, off3, mask1, mask2, mask3; for (i = 0; i < fdi->mfmsync_offset; i++) { pos = fdi->mfmsync_buffer[i]; off1 = (pos - 1) >> 3; off2 = (pos + 1) >> 3; off3 = pos >> 3; mask1 = 1 << (7 - ((pos - 1) & 7)); mask2 = 1 << (7 - ((pos + 1) & 7)); mask3 = 1 << (7 - (pos & 7)); if (!(fdi->track_dst[off1] & mask1) && !(fdi->track_dst[off2] & mask2)) fdi->track_dst[off3] |= mask3; else fdi->track_dst[off3] &= ~mask3; } } static int handle_sectors_described_track (FDI *fdi) { int oldout; uae_u8 *start_src = fdi->track_src ; fdi->encoding_type = *fdi->track_src++; fdi->index_offset = get_u32(fdi->track_src); fdi->index_offset >>= 8; fdi->track_src += 3; outlog (_T("sectors_described, index offset: %d\n"),fdi->index_offset); do { fdi->track_type = *fdi->track_src++; outlog (_T("%06X %06X %02X:"),fdi->track_src - start_src + 0x200, fdi->out/8, fdi->track_type); oldout = fdi->out; decode_sectors_described_track[fdi->track_type](fdi); outlog (_T(" %d\n"), fdi->out - oldout); oldout = fdi->out; if (fdi->out < 0 || fdi->err) { outlog (_T("\nin %d bytes, out %d bits\n"), fdi->track_src - fdi->track_src_buffer, fdi->out); return -1; } if (fdi->track_src - fdi->track_src_buffer >= fdi->track_src_len) { outlog (_T("source buffer overrun, previous type: %02X\n"), fdi->track_type); return -1; } } while (fdi->track_type != 0xff); outlog (_T("\n")); fix_mfm_sync (fdi); return fdi->out; } static uae_u8 *fdi_decompress (int pulses, uae_u8 *sizep, uae_u8 *src, int *dofree) { uae_u32 size = get_u24 (sizep); uae_u32 *dst2; int len = size & 0x3fffff; uae_u8 *dst; int mode = size >> 22, i; *dofree = 0; if (mode == 0 && pulses * 2 > len) mode = 1; if (mode == 0) { dst2 = (uae_u32*)src; dst = src; for (i = 0; i < pulses; i++) { *dst2++ = get_u32 (src); src += 4; } } else if (mode == 1) { dst = fdi_malloc (uae_u8, pulses *4); *dofree = 1; fdi_decode (src, pulses, dst); } else { dst = 0; } return dst; } static void dumpstream(int track, uae_u8 *stream, int len) { #if 0 TCHAR name[100]; FILE *f; _stprintf (name, "track_%d.raw", track); f = fopen(name, "wb"); fwrite (stream, 1, len * 4, f); fclose (f); #endif } static int bitoffset; STATIC_INLINE void addbit (uae_u8 *p, int bit) { int off1 = bitoffset / 8; int off2 = bitoffset % 8; p[off1] |= bit << (7 - off2); bitoffset++; } struct pulse_sample { unsigned long size; int number_of_bits; }; #define FDI_MAX_ARRAY 10 /* change this value as you want */ static int pulse_limitval = 15; /* tolerance of 15% */ static struct pulse_sample psarray[FDI_MAX_ARRAY]; static int array_index; static unsigned long total; static int totaldiv; static void init_array(unsigned long standard_MFM_2_bit_cell_size, int nb_of_bits) { int i; for (i = 0; i < FDI_MAX_ARRAY; i++) { psarray[i].size = standard_MFM_2_bit_cell_size; // That is (total track length / 50000) for Amiga double density total += psarray[i].size; psarray[i].number_of_bits = nb_of_bits; totaldiv += psarray[i].number_of_bits; } array_index = 0; } #if 0 static void fdi2_decode (FDI *fdi, unsigned long totalavg, uae_u32 *avgp, uae_u32 *minp, uae_u32 *maxp, uae_u8 *idx, int maxidx, int *indexoffsetp, int pulses, int mfm) { unsigned long adjust; unsigned long adjusted_pulse; unsigned long standard_MFM_2_bit_cell_size = totalavg / 50000; unsigned long standard_MFM_8_bit_cell_size = totalavg / 12500; int real_size, i, j, eodat, outstep; int indexoffset = *indexoffsetp; uae_u8 *d = fdi->track_dst_buffer; uae_u16 *pt = fdi->track_dst_buffer_timing; uae_u32 ref_pulse, pulse; /* detects a long-enough stable pulse coming just after another stable pulse */ i = 1; while ( (i < pulses) && ( (idx[i] < maxidx) || (idx[i - 1] < maxidx) || (avgp[i] < (standard_MFM_2_bit_cell_size - (standard_MFM_2_bit_cell_size / 4))) ) ) i++; if (i == pulses) { outlog (_T("No stable and long-enough pulse in track.\n")); return; } i--; eodat = i; adjust = 0; total = 0; totaldiv = 0; init_array(standard_MFM_2_bit_cell_size, 2); bitoffset = 0; ref_pulse = 0; outstep = 0; while (outstep < 2) { /* calculates the current average bitrate from previous decoded data */ uae_u32 avg_size = (total << 3) / totaldiv; /* this is the new average size for one MFM bit */ /* uae_u32 avg_size = (uae_u32)((((float)total)*8.0) / ((float)totaldiv)); */ /* you can try tighter ranges than 25%, or wider ranges. I would probably go for tighter... */ if ((avg_size < (standard_MFM_8_bit_cell_size - (pulse_limitval * standard_MFM_8_bit_cell_size / 100))) || (avg_size > (standard_MFM_8_bit_cell_size + (pulse_limitval * standard_MFM_8_bit_cell_size / 100)))) { //init_array(standard_MFM_2_bit_cell_size, 2); avg_size = standard_MFM_8_bit_cell_size; } /* this is to prevent the average value from going too far * from the theoretical value, otherwise it could progressively go to (2 * * real value), or (real value / 2), etc. */ /* gets the next long-enough pulse (this may require more than one pulse) */ pulse = 0; while (pulse < ((avg_size / 4) - (avg_size / 16))) { int indx; i++; if (i >= pulses) i = 0; indx = idx[i]; if (uaerand() <= (indx * UAE_RAND_MAX) / maxidx) { pulse += avgp[i] - ref_pulse; if (indx >= maxidx) ref_pulse = 0; else ref_pulse = avgp[i]; } if (i == eodat) outstep++; if (outstep == 1 && indexoffset == i) *indexoffsetp = bitoffset; } /* gets the size in bits from the pulse width, considering the current average bitrate */ adjusted_pulse = pulse; real_size = 0; while (adjusted_pulse >= avg_size) { real_size += 4; adjusted_pulse -= avg_size / 2; } adjusted_pulse <<= 3; while (adjusted_pulse >= ((avg_size * 4) + (avg_size / 4))) { real_size += 2; adjusted_pulse -= avg_size * 2; } if (adjusted_pulse >= ((avg_size * 3) + (avg_size / 4))) { if (adjusted_pulse <= ((avg_size * 4) - (avg_size / 4))) { if ((2 * ((adjusted_pulse >> 2) - adjust)) <= ((2 * avg_size) - (avg_size / 4))) real_size += 3; else real_size += 4; } else real_size += 4; } else { if (adjusted_pulse > ((avg_size * 3) - (avg_size / 4))) { real_size += 3; } else { if (adjusted_pulse >= ((avg_size * 2) + (avg_size / 4))) { if ((2 * ((adjusted_pulse >> 2) - adjust)) < (avg_size + (avg_size / 4))) real_size += 2; else real_size += 3; } else real_size += 2; } } if (outstep == 1) { for (j = real_size; j > 1; j--) addbit (d, 0); addbit (d, 1); for (j = 0; j < real_size; j++) *pt++ = (uae_u16)(pulse / real_size); } /* prepares for the next pulse */ adjust = ((real_size * avg_size)/8) - pulse; total -= psarray[array_index].size; totaldiv -= psarray[array_index].number_of_bits; psarray[array_index].size = pulse; psarray[array_index].number_of_bits = real_size; total += pulse; totaldiv += real_size; array_index++; if (array_index >= FDI_MAX_ARRAY) array_index = 0; } fdi->out = bitoffset; } #else static void fdi2_decode (FDI *fdi, unsigned long totalavg, uae_u32 *avgp, uae_u32 *minp, uae_u32 *maxp, uae_u8 *idx, int maxidx, int *indexoffsetp, int pulses, int mfm) { unsigned long adjust; unsigned long adjusted_pulse; unsigned long standard_MFM_2_bit_cell_size = totalavg / 50000; unsigned long standard_MFM_8_bit_cell_size = totalavg / 12500; int real_size, i, j, nexti, eodat, outstep, randval; int indexoffset = *indexoffsetp; uae_u8 *d = fdi->track_dst_buffer; uae_u16 *pt = fdi->track_dst_buffer_timing; uae_u32 ref_pulse, pulse; long jitter; /* detects a long-enough stable pulse coming just after another stable pulse */ i = 1; while ( (i < pulses) && ( (idx[i] < maxidx) || (idx[i - 1] < maxidx) || (minp[i] < (standard_MFM_2_bit_cell_size - (standard_MFM_2_bit_cell_size / 4))) ) ) i++; if (i == pulses) { outlog (_T("FDI: No stable and long-enough pulse in track.\n")); return; } nexti = i; eodat = i; i--; adjust = 0; total = 0; totaldiv = 0; init_array(standard_MFM_2_bit_cell_size, 1 + mfm); bitoffset = 0; ref_pulse = 0; jitter = 0; outstep = -1; while (outstep < 2) { /* calculates the current average bitrate from previous decoded data */ uae_u32 avg_size = (total << (2 + mfm)) / totaldiv; /* this is the new average size for one MFM bit */ /* uae_u32 avg_size = (uae_u32)((((float)total)*((float)(mfm+1))*4.0) / ((float)totaldiv)); */ /* you can try tighter ranges than 25%, or wider ranges. I would probably go for tighter... */ if ((avg_size < (standard_MFM_8_bit_cell_size - (pulse_limitval * standard_MFM_8_bit_cell_size / 100))) || (avg_size > (standard_MFM_8_bit_cell_size + (pulse_limitval * standard_MFM_8_bit_cell_size / 100)))) { //init_array(standard_MFM_2_bit_cell_size, mfm + 1); avg_size = standard_MFM_8_bit_cell_size; } /* this is to prevent the average value from going too far * from the theoretical value, otherwise it could progressively go to (2 * * real value), or (real value / 2), etc. */ /* gets the next long-enough pulse (this may require more than one pulse) */ pulse = 0; while (pulse < ((avg_size / 4) - (avg_size / 16))) { uae_u32 avg_pulse, min_pulse, max_pulse; i++; if (i >= pulses) i = 0; if (i == nexti) { do { nexti++; if (nexti >= pulses) nexti = 0; } while (idx[nexti] < maxidx); } if (idx[i] >= maxidx) { /* stable pulse */ avg_pulse = avgp[i] - jitter; min_pulse = minp[i]; max_pulse = maxp[i]; if (jitter >= 0) max_pulse -= jitter; else min_pulse -= jitter; if ((maxp[nexti] - avgp[nexti]) < (avg_pulse - min_pulse)) min_pulse = avg_pulse - (maxp[nexti] - avgp[nexti]); if ((avgp[nexti] - minp[nexti]) < (max_pulse - avg_pulse)) max_pulse = avg_pulse + (avgp[nexti] - minp[nexti]); if (min_pulse < ref_pulse) min_pulse = ref_pulse; randval = uaerand(); if (randval < (UAE_RAND_MAX / 2)) { if (randval > (UAE_RAND_MAX / 4)) { if (randval <= (3 * UAE_RAND_MAX / 8)) randval = (2 * randval) - (UAE_RAND_MAX /4); else randval = (4 * randval) - UAE_RAND_MAX; } jitter = 0 - (randval * (avg_pulse - min_pulse)) / UAE_RAND_MAX; } else { randval -= UAE_RAND_MAX / 2; if (randval > (UAE_RAND_MAX / 4)) { if (randval <= (3 * UAE_RAND_MAX / 8)) randval = (2 * randval) - (UAE_RAND_MAX /4); else randval = (4 * randval) - UAE_RAND_MAX; } jitter = (randval * (max_pulse - avg_pulse)) / UAE_RAND_MAX; } avg_pulse += jitter; if ((avg_pulse < min_pulse) || (avg_pulse > max_pulse)) { outlog (_T("FDI: avg_pulse outside bounds! avg=%u min=%u max=%u\n"), avg_pulse, min_pulse, max_pulse); outlog (_T("FDI: avgp=%u (%u) minp=%u (%u) maxp=%u (%u) jitter=%d i=%d ni=%d\n"), avgp[i], avgp[nexti], minp[i], minp[nexti], maxp[i], maxp[nexti], jitter, i, nexti); } if (avg_pulse < ref_pulse) outlog (_T("FDI: avg_pulse < ref_pulse! (%u < %u)\n"), avg_pulse, ref_pulse); pulse += avg_pulse - ref_pulse; ref_pulse = 0; if (i == eodat) outstep++; } else if (uaerand() <= ((idx[i] * UAE_RAND_MAX) / maxidx)) { avg_pulse = avgp[i]; min_pulse = minp[i]; max_pulse = maxp[i]; randval = uaerand(); if (randval < (UAE_RAND_MAX / 2)) { if (randval > (UAE_RAND_MAX / 4)) { if (randval <= (3 * UAE_RAND_MAX / 8)) randval = (2 * randval) - (UAE_RAND_MAX /4); else randval = (4 * randval) - UAE_RAND_MAX; } avg_pulse -= (randval * (avg_pulse - min_pulse)) / UAE_RAND_MAX; } else { randval -= UAE_RAND_MAX / 2; if (randval > (UAE_RAND_MAX / 4)) { if (randval <= (3 * UAE_RAND_MAX / 8)) randval = (2 * randval) - (UAE_RAND_MAX /4); else randval = (4 * randval) - UAE_RAND_MAX; } avg_pulse += (randval * (max_pulse - avg_pulse)) / UAE_RAND_MAX; } if ((avg_pulse > ref_pulse) && (avg_pulse < (avgp[nexti] - jitter))) { pulse += avg_pulse - ref_pulse; ref_pulse = avg_pulse; } } if (outstep == 1 && indexoffset == i) *indexoffsetp = bitoffset; } /* gets the size in bits from the pulse width, considering the current average bitrate */ adjusted_pulse = pulse; real_size = 0; if (mfm) { while (adjusted_pulse >= avg_size) { real_size += 4; adjusted_pulse -= avg_size / 2; } adjusted_pulse <<= 3; while (adjusted_pulse >= ((avg_size * 4) + (avg_size / 4))) { real_size += 2; adjusted_pulse -= avg_size * 2; } if (adjusted_pulse >= ((avg_size * 3) + (avg_size / 4))) { if (adjusted_pulse <= ((avg_size * 4) - (avg_size / 4))) { if ((2 * ((adjusted_pulse >> 2) - adjust)) <= ((2 * avg_size) - (avg_size / 4))) real_size += 3; else real_size += 4; } else real_size += 4; } else { if (adjusted_pulse > ((avg_size * 3) - (avg_size / 4))) { real_size += 3; } else { if (adjusted_pulse >= ((avg_size * 2) + (avg_size / 4))) { if ((2 * ((adjusted_pulse >> 2) - adjust)) < (avg_size + (avg_size / 4))) real_size += 2; else real_size += 3; } else real_size += 2; } } } else { while (adjusted_pulse >= (2*avg_size)) { real_size+=4; adjusted_pulse-=avg_size; } adjusted_pulse<<=2; while (adjusted_pulse >= ((avg_size*3)+(avg_size/4))) { real_size+=2; adjusted_pulse-=avg_size*2; } if (adjusted_pulse >= ((avg_size*2)+(avg_size/4))) { if (adjusted_pulse <= ((avg_size*3)-(avg_size/4))) { if (((adjusted_pulse>>1)-adjust) < (avg_size+(avg_size/4))) real_size+=2; else real_size+=3; } else real_size+=3; } else { if (adjusted_pulse > ((avg_size*2)-(avg_size/4))) real_size+=2; else { if (adjusted_pulse >= (avg_size+(avg_size/4))) { if (((adjusted_pulse>>1)-adjust) <= (avg_size-(avg_size/4))) real_size++; else real_size+=2; } else real_size++; } } } /* after one pass to correctly initialize the average bitrate, outputs the bits */ if (outstep == 1) { for (j = real_size; j > 1; j--) addbit (d, 0); addbit (d, 1); for (j = 0; j < real_size; j++) *pt++ = (uae_u16)(pulse / real_size); } /* prepares for the next pulse */ adjust = ((real_size * avg_size) / (4 << mfm)) - pulse; total -= psarray[array_index].size; totaldiv -= psarray[array_index].number_of_bits; psarray[array_index].size = pulse; psarray[array_index].number_of_bits = real_size; total += pulse; totaldiv += real_size; array_index++; if (array_index >= FDI_MAX_ARRAY) array_index = 0; } fdi->out = bitoffset; } #endif static void fdi2_celltiming (FDI *fdi, unsigned long totalavg, int bitoffset, uae_u16 *out) { uae_u16 *pt2, *pt; double avg_bit_len; int i; if (out == NULL) return; avg_bit_len = (double)totalavg / (double)bitoffset; pt2 = fdi->track_dst_buffer_timing; pt = out; for (i = 0; i < bitoffset / 8; i++) { double v = (pt2[0] + pt2[1] + pt2[2] + pt2[3] + pt2[4] + pt2[5] + pt2[6] + pt2[7]) / 8.0; v = 1000.0 * v / avg_bit_len; *pt++ = (uae_u16)v; pt2 += 8; } *pt++ = out[0]; *pt = out[0]; } static int decode_lowlevel_track (FDI *fdi, int track, struct fdi_cache *cache) { uae_u8 *p1, *d; uae_u32 *p2; uae_u32 *avgp, *minp = 0, *maxp = 0; uae_u8 *idxp = 0; uae_u32 maxidx, totalavg, weakbits; int i, j, len, pulses, indexoffset; int avg_free, min_free = 0, max_free = 0, idx_free; int idx_off1, idx_off2, idx_off3; d = fdi->track_dst; p1 = fdi->track_src; pulses = get_u32 (p1); if (!pulses) return -1; p1 += 4; len = 12; avgp = (uae_u32*)fdi_decompress (pulses, p1 + 0, p1 + len, &avg_free); dumpstream(track, (uae_u8*)avgp, pulses); len += get_u24 (p1 + 0) & 0x3fffff; if (!avgp) return -1; if (get_u24 (p1 + 3) && get_u24 (p1 + 6)) { minp = (uae_u32*)fdi_decompress (pulses, p1 + 3, p1 + len, &min_free); len += get_u24 (p1 + 3) & 0x3fffff; maxp = (uae_u32*)fdi_decompress (pulses, p1 + 6, p1 + len, &max_free); len += get_u24 (p1 + 6) & 0x3fffff; /* Computes the real min and max values */ for (i = 0; i < pulses; i++) { maxp[i] = avgp[i] + minp[i] - maxp[i]; minp[i] = avgp[i] - minp[i]; } } else { minp = avgp; maxp = avgp; } if (get_u24 (p1 + 9)) { idx_off1 = 0; idx_off2 = 1; idx_off3 = 2; idxp = fdi_decompress (pulses, p1 + 9, p1 + len, &idx_free); if (idx_free) { if (idxp[0] == 0 && idxp[1] == 0) { idx_off1 = 2; idx_off2 = 3; } else { idx_off1 = 1; idx_off2 = 0; } idx_off3 = 4; } } else { idxp = fdi_malloc (uae_u8, pulses * 2); idx_free = 1; for (i = 0; i < pulses; i++) { idxp[i * 2 + 0] = 2; idxp[i * 2 + 1] = 0; } idxp[0] = 1; idxp[1] = 1; } maxidx = 0; indexoffset = 0; p1 = idxp; for (i = 0; i < pulses; i++) { if (p1[idx_off1] + p1[idx_off2] > maxidx) maxidx = p1[idx_off1] + p1[idx_off2]; p1 += idx_off3; } p1 = idxp; for (i = 0; (i < pulses) && (p1[idx_off2] != 0); i++) /* falling edge, replace with idx_off1 for rising edge */ p1 += idx_off3; if (i < pulses) { j = i; do { i++; p1 += idx_off3; if (i >= pulses) { i = 0; p1 = idxp; } } while ((i != j) && (p1[idx_off2] == 0)); /* falling edge, replace with idx_off1 for rising edge */ if (i != j) /* index pulse detected */ { while ((i != j) && (p1[idx_off1] > p1[idx_off2])) { /* falling edge, replace with "<" for rising edge */ i++; p1 += idx_off3; if (i >= pulses) { i = 0; p1 = idxp; } } if (i != j) indexoffset = i; /* index position detected */ } } p1 = idxp; p2 = avgp; totalavg = 0; weakbits = 0; for (i = 0; i < pulses; i++) { int sum = p1[idx_off1] + p1[idx_off2]; if (sum >= maxidx) { totalavg += *p2; } else { weakbits++; } p2++; p1 += idx_off3; idxp[i] = sum; } len = totalavg / 100000; debuglog ("totalavg=%u index=%d (%d) maxidx=%d weakbits=%d len=%d\n", totalavg, indexoffset, maxidx, weakbits, len); cache->avgp = avgp; cache->idxp = idxp; cache->minp = minp; cache->maxp = maxp; cache->avg_free = avg_free; cache->idx_free = idx_free; cache->min_free = min_free; cache->max_free = max_free; cache->totalavg = totalavg; cache->pulses = pulses; cache->maxidx = maxidx; cache->indexoffset = indexoffset; cache->weakbits = weakbits; cache->lowlevel = 1; return 1; } static uae_char fdiid[] = {"Formatted Disk Image file"}; static int bit_rate_table[16] = { 125,150,250,300,500,1000 }; void fdi2raw_header_free (FDI *fdi) { int i; fdi_free (fdi->mfmsync_buffer); fdi_free (fdi->track_src_buffer); fdi_free (fdi->track_dst_buffer); fdi_free (fdi->track_dst_buffer_timing); for (i = 0; i < MAX_TRACKS; i++) { struct fdi_cache *c = &fdi->cache[i]; if (c->idx_free) fdi_free (c->idxp); if (c->avg_free) fdi_free (c->avgp); if (c->min_free) fdi_free (c->minp); if (c->max_free) fdi_free (c->maxp); } fdi_free (fdi); debuglog ("FREE: memory allocated %d\n", fdi_allocated); } int fdi2raw_get_last_track (FDI *fdi) { return fdi->last_track; } int fdi2raw_get_num_sector (FDI *fdi) { if (fdi->header[152] == 0x02) return 22; return 11; } int fdi2raw_get_last_head (FDI *fdi) { return fdi->last_head; } int fdi2raw_get_rotation (FDI *fdi) { return fdi->rotation_speed; } int fdi2raw_get_bit_rate (FDI *fdi) { return fdi->bit_rate; } int fdi2raw_get_type (FDI *fdi) { return fdi->disk_type; } int fdi2raw_get_write_protect (FDI *fdi) { return fdi->write_protect; } FDI *fdi2raw_header(struct zfile *f) { int i, offset, oldseek; uae_u8 type, size; FDI *fdi; debuglog ("ALLOC: memory allocated %d\n", fdi_allocated); fdi = fdi_malloc (FDI, 1); memset (fdi, 0, sizeof (FDI)); fdi->file = f; oldseek = zfile_ftell (fdi->file); zfile_fseek (fdi->file, 0, SEEK_SET); zfile_fread (fdi->header, 2048, 1, fdi->file); zfile_fseek (fdi->file, oldseek, SEEK_SET); if (memcmp (fdiid, fdi->header, strlen (fdiid)) ) { fdi_free(fdi); return NULL; } if (fdi->header[140] != 1 && fdi->header[140] != 2) { fdi_free(fdi); return NULL; } if (fdi->header[140] * 256 + fdi->header[141] >= 2 * 256 + 1) { uae_u32 crc = get_crc32(fdi->header, 508); uae_u32 crc2 = (fdi->header[508] << 24) | (fdi->header[509] << 16) | (fdi->header[510] << 8) | fdi->header[511]; if (crc != crc2) { outlog (_T("FDI: header checksum error\n")); fdi_free(fdi); return NULL; } } fdi->mfmsync_buffer = fdi_malloc (int, MAX_MFM_SYNC_BUFFER); fdi->track_src_buffer = fdi_malloc (uae_u8, MAX_SRC_BUFFER); fdi->track_dst_buffer = fdi_malloc (uae_u8, MAX_DST_BUFFER); fdi->track_dst_buffer_timing = fdi_malloc (uae_u16, MAX_TIMING_BUFFER / 2); fdi->last_track = ((fdi->header[142] << 8) + fdi->header[143]) + 1; fdi->last_track *= fdi->header[144] + 1; if (fdi->last_track >= MAX_TRACKS) { write_log (_T("FDI: last_track >= MAX_TRACKS (%d >= %d)\n"), fdi->last_track, MAX_TRACKS); fdi->last_track = MAX_TRACKS - 1; } fdi->last_head = fdi->header[144]; fdi->disk_type = fdi->header[145]; fdi->rotation_speed = fdi->header[146] + 128; fdi->write_protect = fdi->header[147] & 1; fdi->reversed_side = (fdi->header[147] & 4) ? 1 : 0; outlog (_T("FDI version %d.%d\n"), fdi->header[140], fdi->header[141]); outlog (_T("last_track=%d rotation_speed=%d\n"), fdi->last_track, fdi->rotation_speed); offset = 512; i = fdi->last_track; if (i > 180) { offset += 512; i -= 180; while (i > 256) { offset += 512; i -= 256; } } for (i = 0; i < fdi->last_track; i++) { fdi->track_offsets[i] = offset; type = fdi->header[152 + i * 2]; size = fdi->header[152 + i * 2 + 1]; if (type == 1) offset += (size & 15) * 512; else if ((type & 0xc0) == 0x80) offset += (((type & 0x3f) << 8) | size) * 256; else offset += size * 256; } fdi->track_offsets[i] = offset; return fdi; } static int fdi2raw_loadrevolution_2 (FDI *fdi, uae_u16 *mfmbuf, uae_u16 *tracktiming, int track, int *tracklength, int *indexoffsetp, int *multirev, int mfm) { struct fdi_cache *cache = &fdi->cache[track]; int len, i, idx; memset (fdi->track_dst_buffer, 0, MAX_DST_BUFFER); idx = cache->indexoffset; fdi2_decode (fdi, cache->totalavg, cache->avgp, cache->minp, cache->maxp, cache->idxp, cache->maxidx, &idx, cache->pulses, mfm); //fdi2_gcr_decode (fdi, totalavg, avgp, minp, maxp, idxp, idx_off1, idx_off2, idx_off3, maxidx, pulses); debuglog ("track %d: nbits=%d avg len=%.2f weakbits=%d idx=%d\n", track, bitoffset, (double)cache->totalavg / bitoffset, cache->weakbits, cache->indexoffset); len = fdi->out; if (cache->weakbits >= 10 && multirev) *multirev = 1; *tracklength = len; for (i = 0; i < (len + 15) / (2 * 8); i++) { uae_u8 *data = fdi->track_dst_buffer + i * 2; *mfmbuf++ = 256 * *data + *(data + 1); } fdi2_celltiming (fdi, cache->totalavg, len, tracktiming); if (indexoffsetp) *indexoffsetp = idx; return 1; } int fdi2raw_loadrevolution (FDI *fdi, uae_u16 *mfmbuf, uae_u16 *tracktiming, int track, int *tracklength, int mfm) { track ^= fdi->reversed_side; return fdi2raw_loadrevolution_2 (fdi, mfmbuf, tracktiming, track, tracklength, 0, 0, mfm); } int fdi2raw_loadtrack (FDI *fdi, uae_u16 *mfmbuf, uae_u16 *tracktiming, int track, int *tracklength, int *indexoffsetp, int *multirev, int mfm) { uae_u8 *p; int outlen, i, indexoffset = 0; struct fdi_cache *cache = &fdi->cache[track]; track ^= fdi->reversed_side; if (cache->lowlevel) return fdi2raw_loadrevolution_2 (fdi, mfmbuf, tracktiming, track, tracklength, indexoffsetp, multirev, mfm); fdi->err = 0; fdi->track_src_len = fdi->track_offsets[track + 1] - fdi->track_offsets[track]; zfile_fseek (fdi->file, fdi->track_offsets[track], SEEK_SET); zfile_fread (fdi->track_src_buffer, fdi->track_src_len, 1, fdi->file); memset (fdi->track_dst_buffer, 0, MAX_DST_BUFFER); fdi->track_dst_buffer_timing[0] = 0; fdi->current_track = track; fdi->track_src = fdi->track_src_buffer; fdi->track_dst = fdi->track_dst_buffer; p = fdi->header + 152 + fdi->current_track * 2; fdi->track_type = *p++; fdi->track_len = *p++; fdi->bit_rate = 0; fdi->out = 0; fdi->mfmsync_offset = 0; if ((fdi->track_type & 0xf0) == 0xf0 || (fdi->track_type & 0xf0) == 0xe0) fdi->bit_rate = bit_rate_table[fdi->track_type & 0x0f]; else fdi->bit_rate = 250; debuglog ("track %d: srclen: %d track_type: %02X, bitrate: %d\n", fdi->current_track, fdi->track_src_len, fdi->track_type, fdi->bit_rate); if ((fdi->track_type & 0xc0) == 0x80) { outlen = decode_lowlevel_track (fdi, track, cache); } else if ((fdi->track_type & 0xf0) == 0xf0) { outlen = decode_raw_track (fdi); } else if ((fdi->track_type & 0xf0) == 0xe0) { outlen = handle_sectors_described_track (fdi); } else if ((fdi->track_type & 0xf0)) { zxx (fdi); outlen = -1; } else if (fdi->track_type < 0x10) { decode_normal_track[fdi->track_type](fdi); fix_mfm_sync (fdi); outlen = fdi->out; } else { zxx (fdi); outlen = -1; } // amiga_check_track (fdi); if (fdi->err) return 0; if (outlen > 0) { if (cache->lowlevel) return fdi2raw_loadrevolution_2 (fdi, mfmbuf, tracktiming, track, tracklength, indexoffsetp, multirev, mfm); *tracklength = fdi->out; for (i = 0; i < ((*tracklength) + 15) / (2 * 8); i++) { uae_u8 *data = fdi->track_dst_buffer + i * 2; *mfmbuf++ = 256 * *data + *(data + 1); } } return outlen; } fs-uae-2.2.3+dfsg/src/genp2c.cpp0000644000175000017500000004063312162366655016534 0ustar glaubitzglaubitz /* * UAE - The Un*x Amiga Emulator * * Generator for planar to chunky conversions * * Copyright 1997 Bernd Schmidt */ #include #include "sysconfig.h" #include "sysdeps.h" /* We can't include custom.h here. */ #define MAX_WORDS_PER_LINE 50 static char *gen_ind (char *a, int b) { char buf[200]; sprintf (buf, "%d(%s)", b, a); return strdup (buf); } static char *gen_indx (char *a, int b, char *c, int d) { char buf[200]; sprintf (buf, "%d(%s,%s,%d)", b, a, c, d); return strdup (buf); } static char *gen_indsx (char *a, char *sym, int b, char *c, int d) { char buf[200]; sprintf (buf, "%s+%d(%s,%s,%d)", sym, b, a, c, d); return strdup (buf); } #define reg(a) "%" a #define ind(a,b) #b"("a")" #define imm(a) "$"#a #ifdef USE_UNDERSCORE #define sym(a) "_"#a #else #define sym(a) #a #endif #define indx(a,b,c,d) #b"("a","c","#d")" #define indsx(a,s,b,c,d) s"+"#b"("a","c","#d")" static int labelno = 0; static int get_label (void) { return labelno++; } static void declare_label (int nr) { printf (".L%d:\n", nr); } static int new_label (void) { int nr = get_label (); declare_label (nr); return nr; } static void gen_label (int nr) { printf (".L%d", nr); } static void jnz (int nr) { printf ("\tjnz "); gen_label (nr); printf ("\n"); } static void jnc (int nr) { printf ("\tjnc "); gen_label (nr); printf ("\n"); } static void jc (int nr) { printf ("\tjc "); gen_label (nr); printf ("\n"); } static void jmp (int nr) { printf ("\tjmp "); gen_label (nr); printf ("\n"); } static void movl (char *src, char *dst) { printf ("\tmovl %s,%s\n", src, dst); } static void movw (char *src, char *dst) { printf ("\tmovl %s,%s\n", src, dst); } static void movb (char *src, char *dst) { printf ("\tmovl %s,%s\n", src, dst); } static void movzbl (char *src, char *dst) { printf ("\tmovzbl %s,%s\n", src, dst); } static void leal (char *src, char *dst) { printf ("\tleal %s,%s\n", src, dst); } static void addl (char *src, char *dst) { printf ("\taddl %s,%s\n", src, dst); } static void subl (char *src, char *dst) { printf ("\tsubl %s,%s\n", src, dst); } static void cmpl (char *src, char *dst) { printf ("\tcmpl %s,%s\n", src, dst); } static void andl (unsigned long mask, char *dst) { printf ("\tandl $0x%0lx,%s\n", mask, dst); } static void orl (char *src, char *dst) { printf ("\torl %s,%s\n", src, dst); } static void imull (unsigned long val, char *dst) { printf ("\timull $0x%08lx,%s\n", val, dst); } static void decl (char *dst) { printf ("\tdecl %s\n", dst); } static void incl (char *dst) { printf ("\tincl %s\n", dst); } static void bswapl (char *dst) { printf ("\tbswap %s\n", dst); } static void shrl (int count, char *dst) { printf ("\tshrl $%d,%s\n", count, dst); } static void shll (int count, char *dst) { printf ("\tshll $%d,%s\n", count, dst); } static void pushl (char *src) { printf ("\tpushl %s\n", src); } static void popl (char *dst) { printf ("\tpopl %s\n", dst); } static void ret (void) { printf ("\tret\n"); } static void align (int a) { printf ("\t.p2align %d,0x90\n", a); } static void shiftleftl (int count, char *dst) { if (count == 0) return; if (count < 0) shrl (-count, dst); else { char *indb0; switch (count) { case 1: addl (dst, dst); break; case 2: case 3: indb0 = gen_indx ("", 0, dst, 1 << count); leal (indb0, dst); free (indb0); break; default: shll (count, dst); } } } static void declare_fn (char *name) { printf ("\t.globl %s\n", name); /* printf ("\t.type %s,@function\n", name); */ align (5); printf ("%s:\n", name); } #define esi reg("esi") #define edi reg("edi") #define ebp reg("ebp") #define esp reg("esp") #define eax reg("eax") #define ebx reg("ebx") #define ecx reg("ecx") #define edx reg("edx") /* Modes: * 0: normal * 1: only generate every second plane, set memory * 2: only generate every second plane, starting at second plane, or to memory */ /* Normal code: one pixel per bit */ static void gen_x86_set_hires_h_toobad_k6_too_slow_someone_try_this_with_a_ppro (int pl, int mode) { int plmul = mode == 0 ? 1 : 2; int ploff = mode == 2 ? 1 : 0; int i; int loop; char buf[40]; char *indb0; sprintf (buf, sym (set_hires_h_%d_%d), pl, mode); declare_fn (buf); pushl (ebp); pushl (esi); pushl (edi); pushl (ebx); if (pl == 0) { movl (ind (esp, 20), ebp); movl (ind (esp, 24), esi); } movl (imm (0), edi); loop = get_label (); jmp (loop); align (5); declare_label (loop); if (pl > 0) movl (ind (esp, 24), esi); if (mode == 2) { if (pl > 0) movl (ind (esp, 20), ebp); movl (indx (ebp, 0, edi, 8), ecx); movl (indx (ebp, 4, edi, 8), ebx); } for (i = 0; i <= pl; i+=2) { int realpl = i * plmul + ploff; char *data1 = (i == 0 && mode != 2 ? ecx : edx); char *data2 = (i == 0 && mode != 2 ? ebx : eax); if (i < pl) { indb0 = gen_indx (esi, (realpl + plmul)*MAX_WORDS_PER_LINE*2, edi, 1); movzbl (indb0, ebp); free (indb0); imull (0x08040201, ebp); } indb0 = gen_indx (esi, realpl*MAX_WORDS_PER_LINE*2, edi, 1); movzbl (indb0, data2); free (indb0); if (i == pl || i == pl - 1) incl (edi); imull (0x08040201, data2); if (i < pl) { movl (ebp, esi); andl (0x08080808, ebp); shiftleftl (realpl + plmul - 7, esi); } movl (data2, data1); andl (0x08080808, data2); shiftleftl (realpl - 7, data1); if (i < pl) { andl (0x01010101 << (realpl + plmul), esi); } andl (0x01010101 << realpl, data1); shiftleftl (realpl - 3, data2); if (i < pl) { shiftleftl (realpl + plmul - 3, ebp); } if (i < pl) { orl (esi, ecx); movl (ind (esp, 24), esi); orl (ebp, ebx); } if (i > 0 || mode == 2) { orl (edx, ecx); orl (eax, ebx); } } if (pl > 0) movl (ind (esp, 20), ebp); cmpl (ind (esp, 28), edi); movl (ecx, indx (ebp, -8, edi, 8)); movl (ebx, indx (ebp, -4, edi, 8)); jc (loop); popl (reg ("ebx")); popl (reg ("edi")); popl (reg ("esi")); popl (reg ("ebp")); ret (); printf ("\n\n"); } static void gen_x86_set_hires_h (int pl, int mode) { int plmul = mode == 0 ? 1 : 2; int ploff = mode == 2 ? 1 : 0; int i; int loop; char buf[40]; char *indb0; sprintf (buf, sym (set_hires_h_%d_%d), pl, mode); declare_fn (buf); pushl (ebp); pushl (esi); pushl (edi); pushl (ebx); if (pl == 0) { movl (ind (esp, 20), ebp); movl (ind (esp, 24), esi); } movl (imm (0), edi); loop = get_label (); jmp (loop); align (5); declare_label (loop); if (pl > 0) movl (ind (esp, 24), esi); if (mode == 2) { if (pl > 0) movl (ind (esp, 20), ebp); movl (indx (ebp, 0, edi, 8), ecx); movl (indx (ebp, 4, edi, 8), ebx); } for (i = 0; i <= pl; i+=2) { int realpl = i * plmul + ploff; char *data1 = (i == 0 && mode != 2 ? ecx : edx); char *data2 = (i == 0 && mode != 2 ? ebx : eax); if (i < pl) { indb0 = gen_indx (esi, (realpl + plmul)*MAX_WORDS_PER_LINE*2, edi, 1); movzbl (indb0, ebp); free (indb0); } indb0 = gen_indx (esi, realpl*MAX_WORDS_PER_LINE*2, edi, 1); movzbl (indb0, data2); free (indb0); if (i < pl) { indb0 = gen_indsx ("", sym (hirestab_h), 0, ebp, 8); movl (indb0, esi); free (indb0); indb0 = gen_indsx ("", sym (hirestab_h), 4, ebp, 8); movl (indb0, ebp); free (indb0); } if (i == pl || i == pl - 1) incl (edi); indb0 = gen_indsx ("", sym (hirestab_h), 0, data2, 8); movl (indb0, data1); free (indb0); indb0 = gen_indsx ("", sym (hirestab_h), 4, data2, 8); movl (indb0, data2); free (indb0); switch (realpl) { case 0: if (i < pl) { addl (esi, esi); addl (ebp, ebp); if (plmul == 2) { addl (esi, esi); addl (ebp, ebp); } } break; case 1: if (i < pl) { indb0 = gen_indx ("", 0, esi, 4*plmul); leal (indb0, esi); free (indb0); indb0 = gen_indx ("", 0, ebp, 4*plmul); leal (indb0, ebp); free (indb0); } addl (data1, data1); addl (data2, data2); break; case 2: if (i < pl) { if (plmul == 1) leal (indx ("", 0, esi, 8), esi); else shll (4, esi); } addl (data1, data1); addl (data2, data2); if (i < pl) { if (plmul == 1) leal (indx ("", 0, ebp, 8), ebp); else shll (4, ebp); } addl (data1, data1); addl (data2, data2); break; case 3: if (i < pl) shll (3 + plmul, esi); indb0 = gen_indx ("", 0, data1, 8); leal (indb0, data1); free (indb0); if (i < pl) shll (3 + plmul, ebp); indb0 = gen_indx ("", 0, data2, 8); leal (indb0, data2); free (indb0); break; case 4: case 5: case 6: case 7: shll (realpl, data1); shll (realpl, data2); if (i < pl) { shll (realpl+plmul, esi); shll (realpl+plmul, ebp); } break; } if (i < pl) { orl (esi, ecx); orl (ebp, ebx); if (i + 2 <= pl) movl (ind (esp, 24), esi); } if (i + 2 > pl && pl > 0) movl (ind (esp, 20), ebp); if (i > 0 || mode == 2) { orl (data1, ecx); orl (data2, ebx); } } cmpl (ind (esp, 28), edi); movl (ecx, indx (ebp, -8, edi, 8)); movl (ebx, indx (ebp, -4, edi, 8)); jc (loop); popl (reg ("ebx")); popl (reg ("edi")); popl (reg ("esi")); popl (reg ("ebp")); ret (); printf ("\n\n"); } /* Squeeze: every second bit does not generate a pixel Not optimized, this mode isn't useful. */ static void gen_x86_set_hires_l (int pl, int mode) { int plmul = mode == 0 ? 1 : 2; int ploff = mode == 2 ? 1 : 0; int i; int loop; char buf[40]; sprintf (buf, sym (set_hires_l_%d_%d), pl, mode); declare_fn (buf); pushl (ebp); pushl (esi); pushl (edi); pushl (ebx); movl (ind (esp, 20), ebp); movl (ind (esp, 24), esi); movl (imm (0), edi); align (5); loop = new_label (); if (mode == 2) { movl (indx (ebp, 0, edi, 1), ecx); } for (i = 0; i <= pl; i++) { int realpl = i * plmul + ploff; char *data1 = (i == 0 && mode != 2 ? ecx : edx); char *indb0; indb0 = gen_indx (esi, realpl*MAX_WORDS_PER_LINE*2, edi, 1); movzbl (indb0, data1); free (indb0); indb0 = gen_indsx ("", sym (hirestab_l), 0, data1, 4); movl (indb0, data1); free (indb0); if (i == pl) incl (edi); shiftleftl (realpl, data1); if (i > 0 || mode == 2) { orl (data1, ecx); } } cmpl (ind (esp, 28), edi); movl (ecx, indx (ebp, -4, edi, 4)); jc (loop); popl (reg ("ebx")); popl (reg ("edi")); popl (reg ("esi")); popl (reg ("ebp")); ret (); printf ("\n\n"); } /* Stretch: two pixels per bit */ static void gen_x86_set_lores_h (int pl, int mode) { int plmul = mode == 0 ? 1 : 2; int ploff = mode == 2 ? 1 : 0; int i, j; int loop; char buf[40]; sprintf (buf, sym (set_lores_h_%d_%d), pl, mode); declare_fn (buf); pushl (ebp); pushl (esi); pushl (edi); pushl (ebx); movl (ind (esp, 20), ebp); movl (ind (esp, 24), esi); movl (imm (0), edi); align (5); loop = new_label (); for (j = 0; j < 2; j++) { if (mode == 2) { movl (j ? ind (ebp, 8) : ind (ebp, 0), ecx); movl (j ? ind (ebp, 12) : ind (ebp, 4), ebx); } for (i = 0; i <= pl; i++) { int realpl = i * plmul + ploff; char *data1 = (i == 0 && mode != 2 ? ecx : edx); char *data2 = (i == 0 && mode != 2 ? ebx : eax); char *indb0; indb0 = gen_indx (esi, realpl*MAX_WORDS_PER_LINE*2, edi, 1); movzbl (indb0, data2); free (indb0); addl (data2, data2); indb0 = gen_indsx ("", sym (lorestab_h), 0 + j*8, data2, 8); movl (indb0, data1); free (indb0); indb0 = gen_indsx ("", sym (lorestab_h), 4 + j*8, data2, 8); movl (indb0, data2); free (indb0); shiftleftl (realpl, data1); shiftleftl (realpl, data2); if (i > 0 || mode == 2) { orl (data1, ecx); orl (data2, ebx); } } movl (ecx, j ? ind (ebp, 8) : ind (ebp, 0)); movl (ebx, j ? ind (ebp, 12) : ind (ebp, 4)); } incl (edi); cmpl (ind (esp, 28), edi); leal (ind (ebp, 16), ebp); jc (loop); popl (reg ("ebx")); popl (reg ("edi")); popl (reg ("esi")); popl (reg ("ebp")); ret (); printf ("\n\n"); } /* Normal code: one pixel per bit */ static void gen_c_set_hires_h (int pl, int mode, int header) { int plmul = mode == 0 ? 1 : 2; int ploff = mode == 2 ? 1 : 0; int i; if (header) printf("extern "); printf ("void set_hires_h_%d_%d (uae_u32 *app, uae_u8 *ptr, int len)", pl, mode); if (header) { printf (";\n"); return; } printf ("\n\{\n\tint i;\n\tfor (i = 0; i < len; i++) {\n\t\tuae_u32 v1, v2;\n"); if (mode == 2) { printf ("\t\tv1 = app[i*2 + 0]; v2 = app[i*2 + 1];\n"); } for (i = 0; i <= pl; i++) { int realpl = i * plmul + ploff; char *asgn = (i == 0 && mode != 2 ? "=" : "|="); printf ("\t\t{\n"); printf ("\t\t\tunsigned int data = *(ptr + i + %d);\n", MAX_WORDS_PER_LINE*2*realpl); printf ("\t\t\tv1 %s hirestab_h[data][0] << %d;\n", asgn, realpl); printf ("\t\t\tv2 %s hirestab_h[data][1] << %d;\n", asgn, realpl); printf ("\t\t}\n"); } printf ("\t\tapp[i*2 + 0] = v1;\n"); printf ("\t\tapp[i*2 + 1] = v2;\n"); printf ("\t}\n"); printf ("}\n\n"); } /* Squeeze: every second bit does not generate a pixel Not optimized, this mode isn't useful. */ static void gen_c_set_hires_l (int pl, int mode, int header) { int plmul = mode == 0 ? 1 : 2; int ploff = mode == 2 ? 1 : 0; int i; if (header) printf("extern "); printf ("void set_hires_l_%d_%d (uae_u32 *app, uae_u8 *ptr, int len)", pl, mode); if (header) { printf (";\n"); return; } printf ("\n\{\n\tint i;\n\tfor (i = 0; i < len; i++) {\n\t\tuae_u32 v1;\n"); if (mode == 2) { printf ("\t\tv1 = app[i];\n"); } for (i = 0; i <= pl; i++) { int realpl = i * plmul + ploff; char *asgn = (i == 0 && mode != 2 ? "=" : "|="); printf ("\t\t{\n"); printf ("\t\t\tunsigned int data = *(ptr + i + %d);\n", MAX_WORDS_PER_LINE*2*realpl); printf ("\t\t\tv1 %s hirestab_l[data][0] << %d;\n", asgn, realpl); printf ("\t\t}\n"); } printf ("\t\tapp[i] = v1;\n"); printf ("\t}\n"); printf ("}\n\n"); } /* Stretch: two pixels per bit */ static void gen_c_set_lores_h (int pl, int mode, int header) { int plmul = mode == 0 ? 1 : 2; int ploff = mode == 2 ? 1 : 0; int i; if (header) printf("extern "); printf ("void set_lores_h_%d_%d (uae_u32 *app, uae_u8 *ptr, int len)", pl, mode); if (header) { printf (";\n"); return; } printf ("\n\{\n\tint i;\n\tfor (i = 0; i < len; i++) {\n\t\tuae_u32 v1, v2, v3, v4;\n"); if (mode == 2) { printf ("\t\tv1 = app[i*4 + 0]; v2 = app[i*4 + 1]; v3 = app[i*4 + 2]; v4 = app[i*4 + 3];\n"); } for (i = 0; i <= pl; i++) { int realpl = i * plmul + ploff; char *asgn = (i == 0 && mode != 2 ? "=" : "|="); printf ("\t\t{\n"); printf ("\t\t\tunsigned int data = *(ptr + i + %d);\n", MAX_WORDS_PER_LINE*2*realpl); printf ("\t\t\tv1 %s lorestab_h[data][0] << %d;\n", asgn, realpl); printf ("\t\t\tv2 %s lorestab_h[data][1] << %d;\n", asgn, realpl); printf ("\t\t\tv3 %s lorestab_h[data][2] << %d;\n", asgn, realpl); printf ("\t\t\tv4 %s lorestab_h[data][3] << %d;\n", asgn, realpl); printf ("\t\t}\n"); } printf ("\t\tapp[i*4 + 0] = v1;\n"); printf ("\t\tapp[i*4 + 1] = v2;\n"); printf ("\t\tapp[i*4 + 2] = v3;\n"); printf ("\t\tapp[i*4 + 3] = v4;\n"); printf ("\t}\n"); printf ("}\n\n"); } int main(int argc, char **argv) { int pl; int outmode; if (argc != 2) return 1; if (strcmp (argv[1], "C") == 0) outmode = 0; else if (strcmp (argv[1], "H") == 0) outmode = 1; else if (strcmp (argv[1], "x86") == 0) outmode = 2; else return 1; switch (outmode) { case 0: printf ("#include \"sysconfig.h\"\n"); printf ("#include \"sysdeps.h\"\n"); printf ("#include \"custom.h\"\n"); printf ("#include \"p2c.h\"\n"); break; case 1: printf ("#define MAX_WORDS_PER_LINE %d\n", MAX_WORDS_PER_LINE); break; case 2: printf ("#define MAX_WORDS_PER_LINE %d\n", MAX_WORDS_PER_LINE); printf (".text\n"); break; } for (pl = 0; pl < 8; pl++) { int j; for (j = 0; j < (pl < 4 ? 3 : 1); j++) { switch (outmode) { case 0: case 1: gen_c_set_hires_h (pl, j, outmode); gen_c_set_hires_l (pl, j, outmode); gen_c_set_lores_h (pl, j, outmode); break; case 2: gen_x86_set_hires_h (pl, j); gen_x86_set_hires_l (pl, j); gen_x86_set_lores_h (pl, j); break; } } } return 0; } fs-uae-2.2.3+dfsg/src/include/0000755000175000017500000000000012162366655016267 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/src/include/inputdevice.h0000644000175000017500000003020412162366655020756 0ustar glaubitzglaubitz /* * UAE - The Un*x Amiga Emulator * * Joystick, mouse and keyboard emulation prototypes and definitions * * Copyright 1995 Bernd Schmidt * Copyright 2001-2002 Toni Wilen */ #define DIR_LEFT_BIT 0 #define DIR_RIGHT_BIT 1 #define DIR_UP_BIT 2 #define DIR_DOWN_BIT 3 #define DIR_LEFT (1 << DIR_LEFT_BIT) #define DIR_RIGHT (1 << DIR_RIGHT_BIT) #define DIR_UP (1 << DIR_UP_BIT) #define DIR_DOWN (1 << DIR_DOWN_BIT) #define JOYBUTTON_1 0 /* fire/left mousebutton */ #define JOYBUTTON_2 1 /* 2nd/right mousebutton */ #define JOYBUTTON_3 2 /* 3rd/middle mousebutton */ #define JOYBUTTON_CD32_PLAY 3 #define JOYBUTTON_CD32_RWD 4 #define JOYBUTTON_CD32_FFW 5 #define JOYBUTTON_CD32_GREEN 6 #define JOYBUTTON_CD32_YELLOW 7 #define JOYBUTTON_CD32_RED 8 #define JOYBUTTON_CD32_BLUE 9 #define IDTYPE_JOYSTICK 0 #define IDTYPE_MOUSE 1 #define IDTYPE_KEYBOARD 2 #define IDTYPE_INTERNALEVENT 3 #define IDTYPE_MAX 4 struct inputdevice_functions { int (*init)(void); void (*close)(void); int (*acquire)(int,int); void (*unacquire)(int); void (*read)(void); int (*get_num)(void); TCHAR* (*get_friendlyname)(int); TCHAR* (*get_uniquename)(int); int (*get_widget_num)(int); int (*get_widget_type)(int,int,TCHAR*,uae_u32*); int (*get_widget_first)(int,int); int (*get_flags)(int); }; extern struct inputdevice_functions inputdevicefunc_joystick; extern struct inputdevice_functions inputdevicefunc_mouse; extern struct inputdevice_functions inputdevicefunc_keyboard; extern int pause_emulation; struct uae_input_device_default_node { int evt; uae_u64 flags; }; struct uae_input_device_kbr_default { int scancode; struct uae_input_device_default_node node[MAX_INPUT_SUB_EVENT]; }; struct inputevent { const TCHAR *confname; const TCHAR *name; int allow_mask; int type; int unit; int data; }; #define MAX_INPUT_QUALIFIERS (8 + 5) /* event flags */ #define ID_FLAG_AUTOFIRE 1 #define ID_FLAG_TOGGLE 2 #define ID_FLAG_GAMEPORTSCUSTOM1 4 #define ID_FLAG_GAMEPORTSCUSTOM2 8 #define ID_FLAG_INVERTTOGGLE 16 #define ID_FLAG_GAMEPORTSCUSTOM_MASK (ID_FLAG_GAMEPORTSCUSTOM1 | ID_FLAG_GAMEPORTSCUSTOM2) #define ID_FLAG_AUTOFIRE_MASK (ID_FLAG_TOGGLE | ID_FLAG_INVERTTOGGLE | ID_FLAG_AUTOFIRE) #define ID_FLAG_QUALIFIER1 0x000000100000000ULL #define ID_FLAG_QUALIFIER1_R 0x000000200000000ULL #define ID_FLAG_QUALIFIER2 0x000000400000000ULL #define ID_FLAG_QUALIFIER3 0x000001000000000ULL #define ID_FLAG_QUALIFIER4 0x000004000000000ULL #define ID_FLAG_QUALIFIER5 0x000010000000000ULL #define ID_FLAG_QUALIFIER6 0x000040000000000ULL #define ID_FLAG_QUALIFIER7 0x000100000000000ULL #define ID_FLAG_QUALIFIER8 0x000400000000000ULL #define ID_FLAG_QUALIFIER_SPECIAL 0x001000000000000ULL #define ID_FLAG_QUALIFIER_SPECIAL_R 0x002000000000000ULL #define ID_FLAG_QUALIFIER_SHIFT 0x004000000000000ULL #define ID_FLAG_QUALIFIER_CONTROL 0x010000000000000ULL #define ID_FLAG_QUALIFIER_ALT 0x040000000000000ULL #define ID_FLAG_QUALIFIER_WIN 0x100000000000000ULL #define ID_FLAG_QUALIFIER_MASK 0xfffffff00000000ULL #define ID_FLAG_QUALIFIER_MASK_R 0xaaaaaaa00000000ULL #define IDEV_WIDGET_NONE 0 #define IDEV_WIDGET_BUTTON 1 #define IDEV_WIDGET_AXIS 2 #define IDEV_WIDGET_BUTTONAXIS 3 #define IDEV_WIDGET_KEY 4 #define IDEV_MAPPED_AUTOFIRE_POSSIBLE 1 #define IDEV_MAPPED_AUTOFIRE_SET 2 #define IDEV_MAPPED_TOGGLE 4 #define IDEV_MAPPED_INVERTTOGGLE 8 #define IDEV_MAPPED_GAMEPORTSCUSTOM1 16 #define IDEV_MAPPED_GAMEPORTSCUSTOM2 32 #define IDEV_MAPPED_QUALIFIER1 0x000000100000000ULL #define IDEV_MAPPED_QUALIFIER2 0x000000400000000ULL #define IDEV_MAPPED_QUALIFIER3 0x000001000000000ULL #define IDEV_MAPPED_QUALIFIER4 0x000004000000000ULL #define IDEV_MAPPED_QUALIFIER5 0x000010000000000ULL #define IDEV_MAPPED_QUALIFIER6 0x000040000000000ULL #define IDEV_MAPPED_QUALIFIER7 0x000100000000000ULL #define IDEV_MAPPED_QUALIFIER8 0x000400000000000ULL #define IDEV_MAPPED_QUALIFIER_SPECIAL 0x001000000000000ULL #define IDEV_MAPPED_QUALIFIER_SHIFT 0x004000000000000ULL #define IDEV_MAPPED_QUALIFIER_CONTROL 0x010000000000000ULL #define IDEV_MAPPED_QUALIFIER_ALT 0x040000000000000ULL #define IDEV_MAPPED_QUALIFIER_WIN 0x100000000000000ULL #define IDEV_MAPPED_QUALIFIER_MASK 0xfffffff00000000ULL #define ID_BUTTON_OFFSET 0 #define ID_BUTTON_TOTAL 32 #define ID_AXIS_OFFSET 32 #define ID_AXIS_TOTAL 32 extern int inputdevice_iterate (int devnum, int num, TCHAR *name, int *af); extern bool inputdevice_set_gameports_mapping (struct uae_prefs *prefs, int devnum, int num, int evtnum, uae_u64 flags, int port); extern int inputdevice_set_mapping (int devnum, int num, const TCHAR *name, TCHAR *custom, uae_u64 flags, int port, int sub); extern int inputdevice_get_mapping (int devnum, int num, uae_u64 *pflags, int *port, TCHAR *name, TCHAR *custom, int sub); extern void inputdevice_copyconfig (const struct uae_prefs *src, struct uae_prefs *dst); extern void inputdevice_copy_single_config (struct uae_prefs *p, int src, int dst, int devnum, int selectedwidget); extern void inputdevice_swap_ports (struct uae_prefs *p, int devnum); extern void inputdevice_swap_compa_ports (struct uae_prefs *p, int portswap); extern void inputdevice_config_change (void); extern int inputdevice_config_change_test (void); extern int inputdevice_get_device_index (int devnum); extern TCHAR *inputdevice_get_device_name (int type, int devnum); extern TCHAR *inputdevice_get_device_name2 (int devnum); extern TCHAR *inputdevice_get_device_unique_name (int type, int devnum); extern int inputdevice_get_device_status (int devnum); extern void inputdevice_set_device_status (int devnum, int enabled); extern int inputdevice_get_device_total (int type); extern int inputdevice_get_widget_num (int devnum); extern int inputdevice_get_widget_type (int devnum, int num, TCHAR *name); extern int input_get_default_mouse (struct uae_input_device *uid, int num, int port, int af, bool gp); extern int input_get_default_lightpen (struct uae_input_device *uid, int num, int port, int af, bool gp); extern int input_get_default_joystick (struct uae_input_device *uid, int num, int port, int af, int mode, bool gp); extern int input_get_default_joystick_analog (struct uae_input_device *uid, int num, int port, int af, bool gp); extern int input_get_default_keyboard (int num); #define DEFEVENT(A, B, C, D, E, F) INPUTEVENT_ ## A, enum inputevents { INPUTEVENT_ZERO, #include "inputevents.def" INPUTEVENT_END }; #undef DEFEVENT extern void handle_cd32_joystick_cia (uae_u8, uae_u8); extern uae_u8 handle_parport_joystick (int port, uae_u8 pra, uae_u8 dra); extern uae_u8 handle_joystick_buttons (uae_u8, uae_u8); #define MAGICMOUSE_BOTH 0 #define MAGICMOUSE_NATIVE_ONLY 1 #define MAGICMOUSE_HOST_ONLY 2 extern int magicmouse_alive (void); extern int is_tablet (void); extern int inputdevice_is_tablet (void); extern int input_mousehack_status (int mode, uaecptr diminfo, uaecptr dispinfo, uaecptr vp, uae_u32 moffset); extern void input_mousehack_mouseoffset (uaecptr pointerprefs); extern int mousehack_alive (void); extern void setmouseactive (int); extern void setmousebuttonstateall (int mouse, uae_u32 buttonbits, uae_u32 buttonmask); extern void setjoybuttonstateall (int joy, uae_u32 buttonbits, uae_u32 buttonmask); extern void setjoybuttonstate (int joy, int button, int state); extern void setmousebuttonstate (int mouse, int button, int state); extern void setjoystickstate (int joy, int axle, int state, int max); extern int getjoystickstate (int mouse); void setmousestate (int mouse, int axis, int data, int isabs); extern int getmousestate (int mouse); extern void inputdevice_updateconfig (const struct uae_prefs *srcprefs, struct uae_prefs *dstprefs); extern void inputdevice_updateconfig_internal (const struct uae_prefs *srcprefs, struct uae_prefs *dstprefs); extern void inputdevice_devicechange (struct uae_prefs *prefs); #define INTERNALEVENT_CPURESET 0 #define INTERNALEVENT_KBRESET 1 extern void send_internalevent (int eventid); extern int inputdevice_translatekeycode (int keyboard, int scancode, int state); extern void inputdevice_checkqualifierkeycode (int keyboard, int scancode, int state); extern void inputdevice_setkeytranslation (struct uae_input_device_kbr_default **trans, int **kbmaps); extern void inputdevice_do_keyboard (int code, int state); extern int inputdevice_iskeymapped (int keyboard, int scancode); extern int inputdevice_synccapslock (int, int*); extern void inputdevice_testrecord (int type, int num, int wtype, int wnum, int state, int max); extern int inputdevice_get_compatibility_input (struct uae_prefs*, int, int*, int**, int**); extern struct inputevent *inputdevice_get_eventinfo (int evt); extern bool inputdevice_get_eventname (const struct inputevent *ie, TCHAR *out); extern void inputdevice_compa_prepare_custom (struct uae_prefs *prefs, int index, int mode); extern void inputdevice_compa_clear (struct uae_prefs *prefs, int index); extern int intputdevice_compa_get_eventtype (int evt, int **axistable); extern void inputdevice_sparecopy (struct uae_input_device *uid, int num, int sub); extern uae_u16 potgo_value; extern uae_u16 POTGOR (void); extern void POTGO (uae_u16 v); extern uae_u16 POT0DAT (void); extern uae_u16 POT1DAT (void); extern void JOYTEST (uae_u16 v); extern uae_u16 JOY0DAT (void); extern uae_u16 JOY1DAT (void); extern void JOYSET (int num, uae_u16 v); extern uae_u16 JOYGET (int num); extern void inputdevice_vsync (void); extern void inputdevice_hsync (void); extern void inputdevice_reset (void); extern void write_inputdevice_config (struct uae_prefs *p, struct zfile *f); extern void read_inputdevice_config (struct uae_prefs *p, const TCHAR *option, TCHAR *value); extern void reset_inputdevice_config (struct uae_prefs *pr); extern int inputdevice_joyport_config (struct uae_prefs *p, const TCHAR *value, int portnum, int mode, int type); extern int inputdevice_getjoyportdevice (int port, int val); extern void inputdevice_init (void); extern void inputdevice_close (void); extern void inputdevice_default_prefs (struct uae_prefs *p); extern void inputdevice_acquire (int allmode); extern void inputdevice_unacquire (void); extern void indicator_leds (int num, int state); extern void warpmode (int mode); extern void pausemode (int mode); extern void inputdevice_add_inputcode (int code, int state); extern void inputdevice_handle_inputcode (void); extern void inputdevice_tablet (int x, int y, int z, int pressure, uae_u32 buttonbits, int inproximity, int ax, int ay, int az); extern void inputdevice_tablet_info (int maxx, int maxy, int maxz, int maxax, int maxay, int maxaz, int xres, int yres); extern void inputdevice_tablet_strobe (void); extern uae_u64 input_getqualifiers (void); extern void setsystime (void); #define JSEM_MODE_DEFAULT 0 #define JSEM_MODE_MOUSE 1 #define JSEM_MODE_JOYSTICK 2 #define JSEM_MODE_GAMEPAD 3 #define JSEM_MODE_JOYSTICK_ANALOG 4 #define JSEM_MODE_MOUSE_CDTV 5 #define JSEM_MODE_JOYSTICK_CD32 6 #define JSEM_MODE_LIGHTPEN 7 #define JSEM_KBDLAYOUT 0 #define JSEM_JOYS 100 #define JSEM_MICE 200 #define JSEM_END 300 #define JSEM_XARCADE1LAYOUT (JSEM_KBDLAYOUT + 3) #define JSEM_XARCADE2LAYOUT (JSEM_KBDLAYOUT + 4) #define JSEM_DECODEVAL(port,p) ((p)->jports[port].id) #define JSEM_ISNUMPAD(port,p) (jsem_iskbdjoy(port,p) == JSEM_KBDLAYOUT) #define JSEM_ISCURSOR(port,p) (jsem_iskbdjoy(port,p) == JSEM_KBDLAYOUT + 1) #define JSEM_ISSOMEWHEREELSE(port,p) (jsem_iskbdjoy(port,p) == JSEM_KBDLAYOUT + 2) #define JSEM_ISXARCADE1(port,p) (jsem_iskbdjoy(port,p) == JSEM_XARCADE1LAYOUT) #define JSEM_ISXARCADE2(port,p) (jsem_iskbdjoy(port,p) == JSEM_XARCADE2LAYOUT) #define JSEM_LASTKBD 5 #define JSEM_ISANYKBD(port,p) (jsem_iskbdjoy(port,p) >= JSEM_KBDLAYOUT && jsem_iskbdjoy(port,p) < JSEM_KBDLAYOUT + JSEM_LASTKBD) extern int jsem_isjoy (int port, const struct uae_prefs *p); extern int jsem_ismouse (int port, const struct uae_prefs *p); extern int jsem_iskbdjoy (int port, const struct uae_prefs *p); extern int inputdevice_uaelib (const TCHAR *, const TCHAR *); extern int inputdevice_testread (int*, int*, int*, bool); extern int inputdevice_istest (void); extern void inputdevice_settest (int); extern int inputdevice_testread_count (void); fs-uae-2.2.3+dfsg/src/include/execio.h0000644000175000017500000000713312162366655017720 0ustar glaubitzglaubitz #define IOERR_OPENFAIL -1 #define IOERR_ABORTED -2 #define IOERR_NOCMD -3 #define IOERR_BADLENGTH -4 #define IOERR_BADADDRESS -5 #define IOERR_UNITBUSY -6 #define IOERR_SELFTEST -7 #define IOERR_NotSpecified 20 /* general catchall */ #define IOERR_NoSecHdr 21 /* couldn't even find a sector */ #define IOERR_BadSecPreamble 22 /* sector looked wrong */ #define IOERR_BadSecID 23 /* ditto */ #define IOERR_BadHdrSum 24 /* header had incorrect checksum */ #define IOERR_BadSecSum 25 /* data had incorrect checksum */ #define IOERR_TooFewSecs 26 /* couldn't find enough sectors */ #define IOERR_BadSecHdr 27 /* another "sector looked wrong" */ #define IOERR_WriteProt 28 /* can't write to a protected disk */ #define IOERR_NoDisk 29 /* no disk in the drive */ #define IOERR_SeekError 30 /* couldn't find track 0 */ #define IOERR_NoMem 31 /* ran out of memory */ #define IOERR_BadUnitNum 32 /* asked for a unit > NUMUNITS */ #define IOERR_BadDriveType 33 /* not a drive cd.device understands */ #define IOERR_DriveInUse 34 /* someone else allocated the drive */ #define IOERR_PostReset 35 /* user hit reset; awaiting doom */ #define IOERR_BadDataType 36 /* data on disk is wrong type */ #define IOERR_InvalidState 37 /* invalid cmd under current conditions */ #define IOERR_BadStatus 45 #define IOERR_Phase 42 /* illegal or unexpected SCSI phase */ #define IOERR_NoBoard 50 /* open failed for non-existant board */ #define TDERR_DiskChanged 29 #define CMD_INVALID 0 #define CMD_RESET 1 #define CMD_READ 2 #define CMD_WRITE 3 #define CMD_UPDATE 4 #define CMD_CLEAR 5 #define CMD_STOP 6 #define CMD_START 7 #define CMD_FLUSH 8 #define CMD_NONSTD 9 #define IOB_QUICK 0 #define IOF_QUICK (1<<0) #define IOSTDREQ_SIZE 48 #define DRIVE_NEWSTYLE 0x4E535459L /* 'NSTY' */ #define NSCMD_DEVICEQUERY 0x4000 #define TAG_DONE 0 #define TAG_IGNORE 1 #define TAG_MORE 2 #define TAG_SKIP 3 #define TAG_USER (1 << 31) #define NSDEVTYPE_UNKNOWN 0 #define NSDEVTYPE_GAMEPORT 1 #define NSDEVTYPE_TIMER 2 #define NSDEVTYPE_KEYBOARD 3 #define NSDEVTYPE_INPUT 4 #define NSDEVTYPE_TRACKDISK 5 #define NSDEVTYPE_CONSOLE 6 #define NSDEVTYPE_SANA2 7 #define NSDEVTYPE_AUDIO 8 #define NSDEVTYPE_CLIPBOARD 9 #define NSDEVTYPE_PRINTER 10 #define NSDEVTYPE_SERIAL 11 #define NSDEVTYPE_PARALLEL 12 #define CMD_MOTOR 9 #define CMD_SEEK 10 #define CMD_FORMAT 11 #define CMD_REMOVE 12 #define CMD_CHANGENUM 13 #define CMD_CHANGESTATE 14 #define CMD_PROTSTATUS 15 #define CMD_GETDRIVETYPE 18 #define CMD_GETNUMTRACKS 19 #define CMD_ADDCHANGEINT 20 #define CMD_REMCHANGEINT 21 #define CMD_GETGEOMETRY 22 #define CMD_GETDRIVETYPE 18 #define CMD_GETNUMTRACKS 19 #define CMD_ADDCHANGEINT 20 #define CMD_REMCHANGEINT 21 #define CMD_GETGEOMETRY 22 #define CD_EJECT 23 #define TD_READ64 24 #define TD_WRITE64 25 #define TD_SEEK64 26 #define TD_FORMAT64 27 #define HD_SCSICMD 28 #define CD_INFO 32 #define CD_CONFIG 33 #define CD_TOCMSF 34 #define CD_TOCLSN 35 #define CD_READXL 36 #define CD_PLAYTRACK 37 #define CD_PLAYMSF 38 #define CD_PLAYLSN 39 #define CD_PAUSE 40 #define CD_SEARCH 41 #define CD_QCODEMSF 42 #define CD_QCODELSN 43 #define CD_ATTENUATE 44 #define CD_ADDFRAMEINT 45 #define CD_REMFRAMEINT 46 /* New Style Devices (NSD) support */ #define NSCMD_TD_READ64 0xc000 #define NSCMD_TD_WRITE64 0xc001 #define NSCMD_TD_SEEK64 0xc002 #define NSCMD_TD_FORMAT64 0xc003 fs-uae-2.2.3+dfsg/src/include/ncr_scsi.h0000644000175000017500000000022412162366655020241 0ustar glaubitzglaubitzvoid ncr_bput2(uaecptr, uae_u32); uae_u32 ncr_bget2(uaecptr); extern void ncr_init(void); extern void ncr_free(void); extern void ncr_reset(void); fs-uae-2.2.3+dfsg/src/include/native2amiga_api.h0000644000175000017500000000073312162366655021643 0ustar glaubitzglaubitz/* * The following functions do exactly the same thing as their * Amiga counterpart, but can be called in situation where calling * the exec.library functions is impossible. */ #ifdef SUPPORT_THREADS void uae_Cause(uaecptr interrupt); void uae_ReplyMsg(uaecptr msg); void uae_PutMsg(uaecptr port, uaecptr msg); void uae_Signal(uaecptr task, uae_u32 mask); void uae_NotificationHack(uaecptr, uaecptr); #endif void uae_NewList(uaecptr list); int native2amiga_isfree (void);fs-uae-2.2.3+dfsg/src/include/uaeserial.h0000644000175000017500000000055612162366655020420 0ustar glaubitzglaubitz /* * UAE - The Un*x Amiga Emulator * * uaeserial.device * * (c) 2006 Toni Wilen */ uaecptr uaeserialdev_startup (uaecptr resaddr); void uaeserialdev_install (void); void uaeserialdev_reset (void); void uaeserialdev_start_threads (void); extern int log_uaeserial; struct uaeserialdata { #ifdef _WIN32 void *handle; void *writeevent; #endif }; fs-uae-2.2.3+dfsg/src/include/rtgmodes.h0000644000175000017500000000554512162366655020275 0ustar glaubitzglaubitz/* Types for RGBFormat used */ typedef enum { RGBFB_NONE, /* no valid RGB format (should not happen) */ RGBFB_CLUT, /* palette mode, set colors when opening screen using tags or use SetRGB32/LoadRGB32(...) */ RGBFB_R8G8B8, /* TrueColor RGB (8 bit each) */ RGBFB_B8G8R8, /* TrueColor BGR (8 bit each) */ RGBFB_R5G6B5PC, /* HiColor16 (5 bit R, 6 bit G, 5 bit B), format: gggbbbbbrrrrrggg */ RGBFB_R5G5B5PC, /* HiColor15 (5 bit each), format: gggbbbbb0rrrrrgg */ RGBFB_A8R8G8B8, /* 4 Byte TrueColor ARGB (A unused alpha channel) */ RGBFB_A8B8G8R8, /* 4 Byte TrueColor ABGR (A unused alpha channel) */ RGBFB_R8G8B8A8, /* 4 Byte TrueColor RGBA (A unused alpha channel) */ RGBFB_B8G8R8A8, /* 4 Byte TrueColor BGRA (A unused alpha channel) */ RGBFB_R5G6B5, /* HiColor16 (5 bit R, 6 bit G, 5 bit B), format: rrrrrggggggbbbbb */ RGBFB_R5G5B5, /* HiColor15 (5 bit each), format: 0rrrrrgggggbbbbb */ RGBFB_B5G6R5PC, /* HiColor16 (5 bit R, 6 bit G, 5 bit B), format: gggrrrrrbbbbbggg */ RGBFB_B5G5R5PC, /* HiColor15 (5 bit each), format: gggrrrrr0bbbbbbgg */ /* By now, the following formats are for use with a hardware window only (bitmap operations may be implemented incompletely) */ RGBFB_Y4U2V2, /* 2 Byte TrueColor YUV (CCIR recommendation CCIR601). Each two-pixel unit is stored as one longword containing luminance (Y) for each of the two pixels, and chrominance (U,V) for alternate pixels. The missing chrominance values are generated by interpolation. (Y1-U0-Y0-V0) */ RGBFB_Y4U1V1, /* 1 Byte TrueColor ACCUPAK. Four adjacent pixels form a packet of 5 bits Y (luminance) each pixel and 6 bits U and V (chrominance) shared by the four pixels */ RGBFB_MaxFormats } RGBFTYPE; #define RGBFF_NONE (1<data = (uae_pt *)malloc (size*sizeof (uae_pt)); p->size = size; p->chunks = chunks; p->rdp = p->wrp = 0; p->reader_waiting = 0; p->writer_waiting = 0; uae_sem_init (&p->lock, 0, 1); uae_sem_init (&p->reader_wait, 0, 0); uae_sem_init (&p->writer_wait, 0, 0); } STATIC_INLINE void destroy_comm_pipe (smp_comm_pipe *p) { uae_sem_destroy (&p->lock); uae_sem_destroy (&p->reader_wait); uae_sem_destroy (&p->writer_wait); } STATIC_INLINE void maybe_wake_reader (smp_comm_pipe *p, int no_buffer) { if (p->reader_waiting && (no_buffer || ((p->wrp - p->rdp + p->size) % p->size) >= p->chunks)) { p->reader_waiting = 0; uae_sem_post (&p->reader_wait); } } STATIC_INLINE void write_comm_pipe_pt (smp_comm_pipe *p, uae_pt data, int no_buffer) { int nxwrp = (p->wrp + 1) % p->size; if (p->reader_waiting) { /* No need to do all the locking */ p->data[p->wrp] = data; p->wrp = nxwrp; maybe_wake_reader (p, no_buffer); return; } uae_sem_wait (&p->lock); if (nxwrp == p->rdp) { /* Pipe full! */ p->writer_waiting = 1; uae_sem_post (&p->lock); /* Note that the reader could get in between here and do a * sem_post on writer_wait before we wait on it. That's harmless. * There's a similar case in read_comm_pipe_int_blocking. */ uae_sem_wait (&p->writer_wait); uae_sem_wait (&p->lock); } p->data[p->wrp] = data; p->wrp = nxwrp; maybe_wake_reader (p, no_buffer); uae_sem_post (&p->lock); } STATIC_INLINE uae_pt read_comm_pipe_pt_blocking (smp_comm_pipe *p) { uae_pt data; uae_sem_wait (&p->lock); if (p->rdp == p->wrp) { p->reader_waiting = 1; uae_sem_post (&p->lock); uae_sem_wait (&p->reader_wait); uae_sem_wait (&p->lock); } data = p->data[p->rdp]; p->rdp = (p->rdp + 1) % p->size; /* We ignore chunks here. If this is a problem, make the size bigger in the init call. */ if (p->writer_waiting) { p->writer_waiting = 0; uae_sem_post (&p->writer_wait); } uae_sem_post (&p->lock); return data; } STATIC_INLINE int comm_pipe_has_data (smp_comm_pipe *p) { return p->rdp != p->wrp; } STATIC_INLINE int read_comm_pipe_int_blocking (smp_comm_pipe *p) { uae_pt foo = read_comm_pipe_pt_blocking (p); return foo.i; } STATIC_INLINE uae_u32 read_comm_pipe_u32_blocking (smp_comm_pipe *p) { uae_pt foo = read_comm_pipe_pt_blocking (p); return foo.u32; } STATIC_INLINE void *read_comm_pipe_pvoid_blocking (smp_comm_pipe *p) { uae_pt foo = read_comm_pipe_pt_blocking (p); return foo.pv; } STATIC_INLINE void write_comm_pipe_int (smp_comm_pipe *p, int data, int no_buffer) { uae_pt foo; foo.i = data; write_comm_pipe_pt (p, foo, no_buffer); } STATIC_INLINE void write_comm_pipe_u32 (smp_comm_pipe *p, int data, int no_buffer) { uae_pt foo; foo.u32 = data; write_comm_pipe_pt (p, foo, no_buffer); } STATIC_INLINE void write_comm_pipe_pvoid (smp_comm_pipe *p, void *data, int no_buffer) { uae_pt foo; foo.pv = data; write_comm_pipe_pt (p, foo, no_buffer); } fs-uae-2.2.3+dfsg/src/include/cpu_prefetch.h0000644000175000017500000003007712162366655021116 0ustar glaubitzglaubitz STATIC_INLINE uae_u32 get_word_prefetch (int o) { uae_u32 v = regs.irc; regs.irc = get_wordi (m68k_getpc () + o); return v; } STATIC_INLINE uae_u32 get_long_prefetch (int o) { uae_u32 v = get_word_prefetch (o) << 16; v |= get_word_prefetch (o + 2); return v; } #ifdef CPUEMU_20 extern uae_u32 get_word_020_prefetch (int); STATIC_INLINE uae_u32 next_iword_020 (void) { uae_u32 r = get_word_020_prefetch (0); m68k_incpc (2); return r; } STATIC_INLINE uae_u32 next_ilong_020 (void) { uae_u32 r = next_iword_020 () << 16; r |= next_iword_020 (); return r; } STATIC_INLINE uae_u32 get_long_020_prefetch (int o) { uae_u32 r = get_word_020_prefetch (o) << 16; r |= get_word_020_prefetch (o + 2); return r; } #endif #ifdef CPUEMU_21 STATIC_INLINE void do_cycles_ce020 (int clocks) { x_do_cycles (clocks * cpucycleunit); } STATIC_INLINE void do_cycles_ce020_mem (int clocks, uae_u32 val) { regs.ce020memcycles -= clocks * cpucycleunit; x_do_cycles_post (clocks * cpucycleunit, val); } STATIC_INLINE void checkcycles_ce020 (void) { if (regs.ce020memcycles > 0) x_do_cycles_pre (regs.ce020memcycles); regs.ce020memcycles = 0; } STATIC_INLINE uae_u32 mem_access_delay_long_read_ce020 (uaecptr addr) { uae_u32 v; checkcycles_ce020 (); switch (ce_banktype[addr >> 16]) { case CE_MEMBANK_CHIP: if ((addr & 3) != 0) { v = wait_cpu_cycle_read_ce020 (addr + 0, 1) << 16; v |= wait_cpu_cycle_read_ce020 (addr + 2, 1) << 0; return v; } else { return wait_cpu_cycle_read_ce020 (addr, -1); } case CE_MEMBANK_FAST: v = get_long (addr); if ((addr & 3) != 0) do_cycles_ce020_mem (2 * CPU020_MEM_CYCLE, v); else do_cycles_ce020_mem (1 * CPU020_MEM_CYCLE, v); return v; case CE_MEMBANK_FAST16BIT: v = get_long (addr); do_cycles_ce020_mem (2 * CPU020_MEM_CYCLE, v); return v; } return get_long (addr); } STATIC_INLINE uae_u32 mem_access_delay_longi_read_ce020 (uaecptr addr) { uae_u32 v; checkcycles_ce020 (); switch (ce_banktype[addr >> 16]) { case CE_MEMBANK_CHIP: if ((addr & 3) != 0) { v = wait_cpu_cycle_read_ce020 (addr + 0, 1) << 16; v |= wait_cpu_cycle_read_ce020 (addr + 2, 1) << 0; return v; } else { return wait_cpu_cycle_read_ce020 (addr, -1); } case CE_MEMBANK_FAST: v = get_longi (addr); if ((addr & 3) != 0) do_cycles_ce020_mem (2 * CPU020_MEM_CYCLE, v); else do_cycles_ce020_mem (1 * CPU020_MEM_CYCLE, v); return v; case CE_MEMBANK_FAST16BIT: v = get_longi (addr); do_cycles_ce020_mem (2 * CPU020_MEM_CYCLE, v); return v; } return get_longi (addr); } STATIC_INLINE uae_u32 mem_access_delay_word_read_ce020 (uaecptr addr) { uae_u32 v; checkcycles_ce020 (); switch (ce_banktype[addr >> 16]) { case CE_MEMBANK_CHIP: if ((addr & 3) == 3) { v = wait_cpu_cycle_read_ce020 (addr + 0, 0) << 8; v |= wait_cpu_cycle_read_ce020 (addr + 1, 0) << 0; return v; } else { return wait_cpu_cycle_read_ce020 (addr, 1); } case CE_MEMBANK_FAST: case CE_MEMBANK_FAST16BIT: v = get_word (addr); if ((addr & 3) == 3) do_cycles_ce020_mem (2 * CPU020_MEM_CYCLE, v); else do_cycles_ce020_mem (1 * CPU020_MEM_CYCLE, v); return v; } return get_word (addr); } STATIC_INLINE uae_u32 mem_access_delay_wordi_read_ce020 (uaecptr addr) { uae_u32 v; checkcycles_ce020 (); switch (ce_banktype[addr >> 16]) { case CE_MEMBANK_CHIP: return wait_cpu_cycle_read_ce020 (addr, 1); case CE_MEMBANK_FAST: case CE_MEMBANK_FAST16BIT: v = get_wordi (addr); do_cycles_ce020_mem (1 * CPU020_MEM_CYCLE, v); return v; } return get_wordi (addr); } STATIC_INLINE uae_u32 mem_access_delay_byte_read_ce020 (uaecptr addr) { uae_u32 v; checkcycles_ce020 (); switch (ce_banktype[addr >> 16]) { case CE_MEMBANK_CHIP: return wait_cpu_cycle_read_ce020 (addr, 0); case CE_MEMBANK_FAST: case CE_MEMBANK_FAST16BIT: v = get_byte (addr); do_cycles_ce020_mem (1 * CPU020_MEM_CYCLE, v); return v; } return get_byte (addr); } STATIC_INLINE void mem_access_delay_byte_write_ce020 (uaecptr addr, uae_u32 v) { checkcycles_ce020 (); switch (ce_banktype[addr >> 16]) { case CE_MEMBANK_CHIP: wait_cpu_cycle_write_ce020 (addr, 0, v); return; case CE_MEMBANK_FAST: case CE_MEMBANK_FAST16BIT: put_byte (addr, v); do_cycles_ce020_mem (1 * CPU020_MEM_CYCLE, v); return; } put_byte (addr, v); } STATIC_INLINE void mem_access_delay_word_write_ce020 (uaecptr addr, uae_u32 v) { checkcycles_ce020 (); switch (ce_banktype[addr >> 16]) { case CE_MEMBANK_CHIP: if ((addr & 3) == 3) { wait_cpu_cycle_write_ce020 (addr + 0, 0, (v >> 8) & 0xff); wait_cpu_cycle_write_ce020 (addr + 1, 0, (v >> 0) & 0xff); } else { wait_cpu_cycle_write_ce020 (addr + 0, 1, v); } return; break; case CE_MEMBANK_FAST: case CE_MEMBANK_FAST16BIT: put_word (addr, v); if ((addr & 3) == 3) do_cycles_ce020_mem (2 * CPU020_MEM_CYCLE, v); else do_cycles_ce020_mem (1 * CPU020_MEM_CYCLE, v); return; } put_word (addr, v); } STATIC_INLINE void mem_access_delay_long_write_ce020 (uaecptr addr, uae_u32 v) { checkcycles_ce020 (); switch (ce_banktype[addr >> 16]) { case CE_MEMBANK_CHIP: if ((addr & 3) == 3) { wait_cpu_cycle_write_ce020 (addr + 0, 1, (v >> 16) & 0xffff); wait_cpu_cycle_write_ce020 (addr + 2, 1, (v >> 0) & 0xffff); } else { wait_cpu_cycle_write_ce020 (addr + 0, -1, v); } return; break; case CE_MEMBANK_FAST: put_long (addr, v); if ((addr & 3) != 0) do_cycles_ce020_mem (2 * CPU020_MEM_CYCLE, v); else do_cycles_ce020_mem (1 * CPU020_MEM_CYCLE, v); return; case CE_MEMBANK_FAST16BIT: put_long (addr, v); do_cycles_ce020_mem (2 * CPU020_MEM_CYCLE, v); return; } put_long (addr, v); } STATIC_INLINE uae_u32 get_long_ce020 (uaecptr addr) { return mem_access_delay_long_read_ce020 (addr); } STATIC_INLINE uae_u32 get_word_ce020 (uaecptr addr) { return mem_access_delay_word_read_ce020 (addr); } STATIC_INLINE uae_u32 get_byte_ce020 (uaecptr addr) { return mem_access_delay_byte_read_ce020 (addr); } STATIC_INLINE void put_long_ce020 (uaecptr addr, uae_u32 v) { mem_access_delay_long_write_ce020 (addr, v); } STATIC_INLINE void put_word_ce020 (uaecptr addr, uae_u32 v) { mem_access_delay_word_write_ce020 (addr, v); } STATIC_INLINE void put_byte_ce020 (uaecptr addr, uae_u32 v) { mem_access_delay_byte_write_ce020 (addr, v); } extern uae_u32 get_word_ce020_prefetch (int); STATIC_INLINE uae_u32 get_long_ce020_prefetch (int o) { uae_u32 v; v = get_word_ce020_prefetch (o) << 16; v |= get_word_ce020_prefetch (o + 2); return v; } STATIC_INLINE uae_u32 next_iword_020ce (void) { uae_u32 r = get_word_ce020_prefetch (0); m68k_incpc (2); return r; } STATIC_INLINE uae_u32 next_ilong_020ce (void) { uae_u32 r = get_long_ce020_prefetch (0); m68k_incpc (4); return r; } STATIC_INLINE void m68k_do_bsr_ce020 (uaecptr oldpc, uae_s32 offset) { m68k_areg (regs, 7) -= 4; x_put_long (m68k_areg (regs, 7), oldpc); m68k_incpc (offset); } STATIC_INLINE void m68k_do_rts_ce020 (void) { m68k_setpc (x_get_long (m68k_areg (regs, 7))); m68k_areg (regs, 7) += 4; } #endif #ifdef CPUEMU_22 extern uae_u32 get_word_ce030_prefetch (int); extern void write_dcache030 (uaecptr, uae_u32, int); extern uae_u32 read_dcache030 (uaecptr, int); STATIC_INLINE void put_long_ce030 (uaecptr addr, uae_u32 v) { write_dcache030 (addr, v, 2); mem_access_delay_long_write_ce020 (addr, v); } STATIC_INLINE void put_word_ce030 (uaecptr addr, uae_u32 v) { write_dcache030 (addr, v, 1); mem_access_delay_word_write_ce020 (addr, v); } STATIC_INLINE void put_byte_ce030 (uaecptr addr, uae_u32 v) { write_dcache030 (addr, v, 0); mem_access_delay_byte_write_ce020 (addr, v); } STATIC_INLINE uae_u32 get_long_ce030 (uaecptr addr) { return read_dcache030 (addr, 2); } STATIC_INLINE uae_u32 get_word_ce030 (uaecptr addr) { return read_dcache030 (addr, 1); } STATIC_INLINE uae_u32 get_byte_ce030 (uaecptr addr) { return read_dcache030 (addr, 0); } STATIC_INLINE uae_u32 get_long_ce030_prefetch (int o) { uae_u32 v; v = get_word_ce030_prefetch (o) << 16; v |= get_word_ce030_prefetch (o + 2); return v; } STATIC_INLINE uae_u32 next_iword_030ce (void) { uae_u32 r = get_word_ce030_prefetch (0); m68k_incpc (2); return r; } STATIC_INLINE uae_u32 next_ilong_030ce (void) { uae_u32 r = get_long_ce030_prefetch (0); m68k_incpc (4); return r; } STATIC_INLINE void m68k_do_bsr_ce030 (uaecptr oldpc, uae_s32 offset) { m68k_areg (regs, 7) -= 4; put_long_ce030 (m68k_areg (regs, 7), oldpc); m68k_incpc (offset); } STATIC_INLINE void m68k_do_rts_ce030 (void) { m68k_setpc (get_long_ce030 (m68k_areg (regs, 7))); m68k_areg (regs, 7) += 4; } #endif #ifdef CPUEMU_12 STATIC_INLINE void do_cycles_ce000 (int clocks) { x_do_cycles (clocks * cpucycleunit); } STATIC_INLINE void ipl_fetch (void) { regs.ipl = regs.ipl_pin; } STATIC_INLINE uae_u32 mem_access_delay_word_read (uaecptr addr) { switch (ce_banktype[addr >> 16]) { case CE_MEMBANK_CHIP: return wait_cpu_cycle_read (addr, 1); case CE_MEMBANK_FAST: case CE_MEMBANK_FAST16BIT: uae_u32 v = get_word (addr); x_do_cycles_post (4 * cpucycleunit, v); return v; } return get_word (addr); } STATIC_INLINE uae_u32 mem_access_delay_wordi_read (uaecptr addr) { switch (ce_banktype[addr >> 16]) { case CE_MEMBANK_CHIP: return wait_cpu_cycle_read (addr, 1); case CE_MEMBANK_FAST: case CE_MEMBANK_FAST16BIT: uae_u32 v = get_wordi (addr); x_do_cycles_post (4 * cpucycleunit, v); return v; } return get_wordi (addr); } STATIC_INLINE uae_u32 mem_access_delay_byte_read (uaecptr addr) { switch (ce_banktype[addr >> 16]) { case CE_MEMBANK_CHIP: return wait_cpu_cycle_read (addr, 0); case CE_MEMBANK_FAST: case CE_MEMBANK_FAST16BIT: uae_u32 v = get_byte (addr); x_do_cycles_post (4 * cpucycleunit, v); return v; } return get_byte (addr); } STATIC_INLINE void mem_access_delay_byte_write (uaecptr addr, uae_u32 v) { switch (ce_banktype[addr >> 16]) { case CE_MEMBANK_CHIP: wait_cpu_cycle_write (addr, 0, v); return; case CE_MEMBANK_FAST: case CE_MEMBANK_FAST16BIT: put_byte (addr, v); x_do_cycles_post (4 * cpucycleunit, v); return; } put_byte (addr, v); } STATIC_INLINE void mem_access_delay_word_write (uaecptr addr, uae_u32 v) { switch (ce_banktype[addr >> 16]) { case CE_MEMBANK_CHIP: wait_cpu_cycle_write (addr, 1, v); return; case CE_MEMBANK_FAST: case CE_MEMBANK_FAST16BIT: put_word (addr, v); x_do_cycles_post (4 * cpucycleunit, v); return; } put_word (addr, v); } STATIC_INLINE uae_u32 get_long_ce000 (uaecptr addr) { uae_u32 v = mem_access_delay_word_read (addr) << 16; v |= mem_access_delay_word_read (addr + 2); return v; } STATIC_INLINE uae_u32 get_word_ce000 (uaecptr addr) { return mem_access_delay_word_read (addr); } STATIC_INLINE uae_u32 get_wordi_ce000 (int offset) { return mem_access_delay_wordi_read (m68k_getpc () + offset); } STATIC_INLINE uae_u32 get_byte_ce000 (uaecptr addr) { return mem_access_delay_byte_read (addr); } STATIC_INLINE uae_u32 get_word_ce000_prefetch (int o) { uae_u32 v = regs.irc; regs.irc = x_get_iword (o); return v; } STATIC_INLINE void put_long_ce000 (uaecptr addr, uae_u32 v) { mem_access_delay_word_write (addr, v >> 16); mem_access_delay_word_write (addr + 2, v); } STATIC_INLINE void put_word_ce000 (uaecptr addr, uae_u32 v) { mem_access_delay_word_write (addr, v); } STATIC_INLINE void put_byte_ce000 (uaecptr addr, uae_u32 v) { mem_access_delay_byte_write (addr, v); } STATIC_INLINE void m68k_do_rts_ce (void) { uaecptr pc; pc = x_get_word (m68k_areg (regs, 7)) << 16; pc |= x_get_word (m68k_areg (regs, 7) + 2); m68k_areg (regs, 7) += 4; if (pc & 1) exception3 (0x4e75, pc); else m68k_setpc (pc); } STATIC_INLINE void m68k_do_bsr_ce (uaecptr oldpc, uae_s32 offset) { m68k_areg (regs, 7) -= 4; x_put_word (m68k_areg (regs, 7), oldpc >> 16); x_put_word (m68k_areg (regs, 7) + 2, oldpc); m68k_incpc (offset); } STATIC_INLINE void m68k_do_jsr_ce (uaecptr oldpc, uaecptr dest) { m68k_areg (regs, 7) -= 4; x_put_word (m68k_areg (regs, 7), oldpc >> 16); x_put_word (m68k_areg (regs, 7) + 2, oldpc); m68k_setpc (dest); } #endif STATIC_INLINE uae_u32 get_disp_ea_000 (uae_u32 base, uae_u32 dp) { int reg = (dp >> 12) & 15; uae_s32 regd = regs.regs[reg]; if ((dp & 0x800) == 0) regd = (uae_s32)(uae_s16)regd; return base + (uae_s8)dp + regd; } fs-uae-2.2.3+dfsg/src/include/blitter.h0000644000175000017500000000302012162366655020100 0ustar glaubitzglaubitz /* * UAE - The Un*x Amiga Emulator * * Blitter emulation * * (c) 1995 Bernd Schmidt */ struct bltinfo { int blitzero; int blitashift, blitbshift, blitdownashift, blitdownbshift; uae_u16 bltadat, bltbdat, bltcdat, bltddat; uae_u16 bltahold, bltbhold, bltafwm, bltalwm; int vblitsize, hblitsize; int bltamod, bltbmod, bltcmod, bltdmod; int got_cycle; }; extern enum blitter_states { BLT_done, BLT_init, BLT_read, BLT_work, BLT_write, BLT_next } bltstate; extern struct bltinfo blt_info; extern int blitter_nasty, blit_interrupt; extern uae_u16 bltsize; extern uae_u16 bltcon0, bltcon1; extern uae_u32 bltapt, bltbpt, bltcpt, bltdpt; extern int blit_singlechannel; extern void maybe_blit (int, int); extern void reset_blit (int); extern int blitnasty (void); extern int blitnnasty (int); extern void blitter_handler (uae_u32); extern void build_blitfilltable (void); extern void do_blitter (int, int); extern void decide_blitter (int hpos); extern int blitter_need (int hpos); extern void blitter_done_notify (int hpos); extern void blitter_slowdown (int, int, int, int); extern int blitter_channel_state (void); typedef void blitter_func(uaecptr, uaecptr, uaecptr, uaecptr, struct bltinfo *); #define BLITTER_MAX_WORDS 2048 extern blitter_func * const blitfunc_dofast[256]; extern blitter_func * const blitfunc_dofast_desc[256]; extern uae_u32 blit_masktable[BLITTER_MAX_WORDS]; #define BLIT_MODE_IMMEDIATE -1 #define BLIT_MODE_APPROXIMATE 0 #define BLIT_MODE_COMPATIBLE 1 #define BLIT_MODE_EXACT 2 fs-uae-2.2.3+dfsg/src/include/cd32_fmv.h0000644000175000017500000000004612162366655020043 0ustar glaubitzglaubitz extern void cd32_fmv_init (uaecptr); fs-uae-2.2.3+dfsg/src/include/xwin.h0000644000175000017500000001361212162366655017430 0ustar glaubitzglaubitz /* * UAE - The Un*x Amiga Emulator * * Interface to the graphics system (X, SVGAlib) * * Copyright 1995-1997 Bernd Schmidt */ #include "machdep/rpt.h" typedef uae_u32 xcolnr; typedef int (*allocfunc_type)(int, int, int, xcolnr *); extern xcolnr xcolors[4096]; extern xcolnr xcolors_16[4096]; extern xcolnr xcolors_32[4096]; extern uae_u32 p96_rgbx16[65536]; extern int graphics_setup (void); extern int graphics_init (bool); extern void graphics_leave (void); extern void handle_events (void); extern int handle_msgpump (void); extern void setup_brkhandler (void); extern int isfullscreen (void); extern void toggle_fullscreen (int); extern void toggle_mousegrab (void); extern void desktop_coords (int *dw, int *dh, int *x, int *y, int *w, int *h); extern bool vsync_switchmode (int); extern frame_time_t vsync_busywait_end (int*); extern int vsync_busywait_do (int*, bool, bool); extern void vsync_busywait_start (void); extern double vblank_calibrate (double, bool); extern bool vsync_isdone (void); extern void doflashscreen (void); extern int flashscreen; extern void updatedisplayarea (void); extern int isvsync_chipset (void); extern int isvsync_rtg (void); extern int isvsync (void); extern void flush_line (struct vidbuffer*, int); extern void flush_block (struct vidbuffer*, int, int); extern void flush_screen (struct vidbuffer*, int, int); extern void flush_clear_screen (struct vidbuffer*); extern bool render_screen (bool); extern void show_screen (void); extern bool show_screen_maybe (bool); extern int lockscr (struct vidbuffer*, bool); extern void unlockscr (struct vidbuffer*); extern bool target_graphics_buffer_update (void); extern int debuggable (void); extern void LED (int); extern void screenshot (int,int); extern int bits_in_mask (unsigned long mask); extern int mask_shift (unsigned long mask); extern unsigned int doMask (int p, int bits, int shift); extern unsigned int doMask256 (int p, int bits, int shift); extern void setup_maxcol (int); extern void alloc_colors256 (int (*)(int, int, int, xcolnr *)); extern void alloc_colors64k (int, int, int, int, int, int, int, int, int, int); extern void alloc_colors_rgb (int rw, int gw, int bw, int rs, int gs, int bs, int aw, int as, int alpha, int byte_swap, uae_u32 *rc, uae_u32 *gc, uae_u32 *bc); extern void alloc_colors_picasso (int rw, int gw, int bw, int rs, int gs, int bs, int rgbfmt); extern void setup_greydither (int bits, allocfunc_type allocfunc); extern void setup_greydither_maxcol (int maxcol, allocfunc_type allocfunc); extern void setup_dither (int bits, allocfunc_type allocfunc); extern void DitherLine (uae_u8 *l, uae_u16 *r4g4b4, int x, int y, uae_s16 len, int bits) ASM_SYM_FOR_FUNC("DitherLine"); extern double getvsyncrate (double hz, int *mult); /* The graphics code has a choice whether it wants to use a large buffer * for the whole display, or only a small buffer for a single line. * If you use a large buffer: * - set bufmem to point at it * - set linemem to 0 * - if memcpy within bufmem would be very slow, i.e. because bufmem is * in graphics card memory, also set emergmem to point to a buffer * that is large enough to hold a single line. * - implement flush_line to be a no-op. * If you use a single line buffer: * - set bufmem and emergmem to 0 * - set linemem to point at your buffer * - implement flush_line to copy a single line to the screen */ struct vidbuffer { /* Function implemented by graphics driver */ void (*flush_line) (struct vidbuf_description *gfxinfo, struct vidbuffer *vb, int line_no); void (*flush_block) (struct vidbuf_description *gfxinfo, struct vidbuffer *vb, int first_line, int end_line); void (*flush_screen) (struct vidbuf_description *gfxinfo, struct vidbuffer *vb, int first_line, int end_line); void (*flush_clear_screen) (struct vidbuf_description *gfxinfo, struct vidbuffer *vb); int (*lockscr) (struct vidbuf_description *gfxinfo, struct vidbuffer *vb); void (*unlockscr) (struct vidbuf_description *gfxinfo, struct vidbuffer *vb); uae_u8 *linemem; uae_u8 *emergmem; uae_u8 *bufmem, *bufmemend; uae_u8 *realbufmem; uae_u8 *bufmem_allocated; bool bufmem_lockable; int rowbytes; /* Bytes per row in the memory pointed at by bufmem. */ int pixbytes; /* Bytes per pixel. */ /* size of this buffer */ int width_allocated; int height_allocated; /* size of max visible image */ int outwidth; int outheight; /* nominal size of image for centering */ int inwidth; int inheight; /* same but doublescan multiplier included */ int inwidth2; int inheight2; /* use drawbuffer instead */ bool nativepositioning; /* tempbuffer in use */ bool tempbufferinuse; /* extra width, chipset hpos extra in right border */ int extrawidth; int xoffset; /* superhires pixels from left edge */ int yoffset; /* lines from top edge */ int inxoffset; /* positive if sync positioning */ int inyoffset; }; extern bool isnativevidbuf (void); struct vidbuf_description { int maxblocklines; /* Set to 0 if you want calls to flush_line after each drawn line, or the number of * lines that flush_block wants to/can handle (it isn't really useful to use another * value than maxline here). */ struct vidbuffer drawbuffer; /* output buffer when using A2024 emulation */ struct vidbuffer tempbuffer; struct vidbuffer *inbuffer; struct vidbuffer *outbuffer; int gfx_resolution_reserved; // reserved space for currprefs.gfx_resolution int gfx_vresolution_reserved; // reserved space for currprefs.gfx_resolution int xchange; /* how many superhires pixels in one pixel in buffer */ int ychange; /* how many interlaced lines in one line in buffer */ }; extern struct vidbuf_description gfxvidinfo; /* For ports using tui.c, this should be built by graphics_setup(). */ extern struct bstring *video_mode_menu; extern void vidmode_menu_selected(int); fs-uae-2.2.3+dfsg/src/include/fsdb.h0000644000175000017500000001447412162366655017370 0ustar glaubitzglaubitz /* * UAE - The Un*x Amiga Emulator * * Library of functions to make emulated filesystem as independent as * possible of the host filesystem's capabilities. * * Copyright 1999 Bernd Schmidt */ #ifndef FSDB_FILE #define FSDB_FILE _T("_UAEFSDB.___") #endif #ifndef FSDB_DIR_SEPARATOR #define FSDB_DIR_SEPARATOR '/' #endif /* AmigaOS errors */ #define ERROR_NO_FREE_STORE 103 #define ERROR_BAD_NUMBER 115 #define ERROR_OBJECT_IN_USE 202 #define ERROR_OBJECT_EXISTS 203 #define ERROR_DIR_NOT_FOUND 204 #define ERROR_OBJECT_NOT_AROUND 205 #define ERROR_ACTION_NOT_KNOWN 209 #define ERROR_INVALID_LOCK 211 #define ERROR_OBJECT_WRONG_TYPE 212 #define ERROR_DISK_WRITE_PROTECTED 214 #define ERROR_DIRECTORY_NOT_EMPTY 216 #define ERROR_DEVICE_NOT_MOUNTED 218 #define ERROR_SEEK_ERROR 219 #define ERROR_COMMENT_TOO_BIG 220 #define ERROR_DISK_IS_FULL 221 #define ERROR_DELETE_PROTECTED 222 #define ERROR_WRITE_PROTECTED 223 #define ERROR_READ_PROTECTED 224 #define ERROR_NOT_A_DOS_DISK 225 #define ERROR_NO_DISK 226 #define ERROR_NO_MORE_ENTRIES 232 #define ERROR_NOT_IMPLEMENTED 236 #define ERROR_RECORD_NOT_LOCKED 240 #define ERROR_LOCK_COLLISION 241 #define ERROR_LOCK_TIMEOUT 242 #define ERROR_UNLOCK_ERROR 243 #define A_FIBF_HIDDEN (1<<7) #define A_FIBF_SCRIPT (1<<6) #define A_FIBF_PURE (1<<5) #define A_FIBF_ARCHIVE (1<<4) #define A_FIBF_READ (1<<3) #define A_FIBF_WRITE (1<<2) #define A_FIBF_EXECUTE (1<<1) #define A_FIBF_DELETE (1<<0) /* AmigaOS "keys" */ typedef struct a_inode_struct { #ifdef AINO_DEBUG uae_u32 checksum1; #endif /* Circular list of recycleable a_inodes. */ struct a_inode_struct *next, *prev; /* This a_inode's relatives in the directory structure. */ struct a_inode_struct *parent; struct a_inode_struct *child, *sibling; /* AmigaOS name, and host OS name. The host OS name is a full path, the * AmigaOS name is relative to the parent. */ TCHAR *aname; TCHAR *nname; /* AmigaOS file comment, or NULL if file has none. */ TCHAR *comment; /* AmigaOS protection bits. */ int amigaos_mode; /* Unique number for identification. */ uae_u32 uniq; /* For a directory that is being ExNext()ed, the number of child ainos which must be kept locked in core. */ unsigned long locked_children; /* How many ExNext()s are going on in this directory? */ unsigned long exnext_count; /* AmigaOS locking bits. */ int shlock; long db_offset; unsigned int dir:1; unsigned int elock:1; /* Nonzero if this came from an entry in our database. */ unsigned int has_dbentry:1; /* Nonzero if this will need an entry in our database. */ unsigned int needs_dbentry:1; /* This a_inode possibly needs writing back to the database. */ unsigned int dirty:1; /* If nonzero, this represents a deleted file; the corresponding * entry in the database must be cleared. */ unsigned int deleted:1; /* target volume flag */ unsigned int volflags; /* not equaling unit.mountcount -> not in this volume */ unsigned int mountcount; uae_u64 uniq_external; #ifdef AINO_DEBUG uae_u32 checksum2; #endif } a_inode; extern TCHAR *nname_begin (TCHAR *); extern TCHAR *build_nname (const TCHAR *d, const TCHAR *n); extern TCHAR *build_aname (const TCHAR *d, const TCHAR *n); /* Filesystem-independent functions. */ extern void fsdb_clean_dir (a_inode *); extern TCHAR *fsdb_search_dir (const TCHAR *dirname, TCHAR *rel); extern void fsdb_dir_writeback (a_inode *); extern int fsdb_used_as_nname (a_inode *base, const TCHAR *); extern a_inode *fsdb_lookup_aino_aname (a_inode *base, const TCHAR *); extern a_inode *fsdb_lookup_aino_nname (a_inode *base, const TCHAR *); extern int fsdb_exists (const TCHAR *nname); extern int same_aname (const TCHAR *an1, const TCHAR *an2); /* Filesystem-dependent functions. */ extern int fsdb_name_invalid (const TCHAR *n); extern int fsdb_name_invalid_dir (const TCHAR *n); extern int fsdb_fill_file_attrs (a_inode *, a_inode *); extern int fsdb_set_file_attrs (a_inode *); extern int fsdb_mode_representable_p (const a_inode *, int); extern int fsdb_mode_supported (const a_inode *); extern TCHAR *fsdb_create_unique_nname (a_inode *base, const TCHAR *); struct my_opendir_s; struct my_openfile_s; extern struct my_opendir_s *my_opendir (const TCHAR*, const TCHAR*); extern struct my_opendir_s *my_opendir (const TCHAR*); extern void my_closedir (struct my_opendir_s*); extern int my_readdir (struct my_opendir_s*, TCHAR*); extern int my_rmdir (const TCHAR*); extern int my_mkdir (const TCHAR*); extern int my_unlink (const TCHAR*); extern int my_rename (const TCHAR*, const TCHAR*); extern int my_setcurrentdir (const TCHAR *curdir, TCHAR *oldcur); bool my_isfilehidden (const TCHAR *path); void my_setfilehidden (const TCHAR *path, bool hidden); extern struct my_openfile_s *my_open (const TCHAR*, int); extern void my_close (struct my_openfile_s*); extern uae_s64 my_lseek (struct my_openfile_s*, uae_s64, int); extern uae_s64 my_fsize (struct my_openfile_s*); extern unsigned int my_read (struct my_openfile_s*, void*, unsigned int); extern unsigned int my_write (struct my_openfile_s*, void*, unsigned int); extern int my_truncate (const TCHAR *name, uae_u64 len); extern int dos_errno (void); extern int my_existsfile (const TCHAR *name); extern int my_existsdir (const TCHAR *name); extern FILE *my_opentext (const TCHAR*); extern bool my_stat (const TCHAR *name, struct mystat *ms); extern bool my_utime (const TCHAR *name, struct mytimeval *tv); extern bool my_chmod (const TCHAR *name, uae_u32 mode); extern char *custom_fsdb_search_dir (const char *dirname, TCHAR *rel); extern a_inode *custom_fsdb_lookup_aino_aname (a_inode *base, const TCHAR *aname); extern a_inode *custom_fsdb_lookup_aino_nname (a_inode *base, const TCHAR *nname); extern int custom_fsdb_used_as_nname (a_inode *base, const TCHAR *nname); #define MYVOLUMEINFO_READONLY 1 #define MYVOLUMEINFO_STREAMS 2 #define MYVOLUMEINFO_ARCHIVE 4 #define MYVOLUMEINFO_REUSABLE 8 #define MYVOLUMEINFO_CDFS 16 extern int my_getvolumeinfo (const TCHAR *root); #ifdef FSUAE char *fsdb_native_path(const char *root_dir, const char *amiga_path); void fsdb_get_file_time(a_inode *node, int *days, int *mins, int *ticks); int fsdb_set_file_time(a_inode *node, int days, int mins, int ticks); int host_errno_to_dos_errno(int err); #endif fs-uae-2.2.3+dfsg/src/include/uaeipc.h0000644000175000017500000000052412162366655017707 0ustar glaubitzglaubitz #define COMPIPENAME _T("WinUAE_COM") extern void *createIPC (const TCHAR *name, int); extern void closeIPC (void*); extern int checkIPC (void*,struct uae_prefs*); extern void *geteventhandleIPC (void*); extern int sendBinIPC (void*, uae_u8 *msg, int len); extern int sendIPC (void*, TCHAR *msg); extern int isIPC (const TCHAR *pipename); fs-uae-2.2.3+dfsg/src/include/native2amiga.h0000644000175000017500000000271212162366655021011 0ustar glaubitzglaubitz /* * UAE - The Un*x Amiga Emulator * * Call (some) Amiga Exec functions outside the main UAE thread * and without stack magic. * * Copyright 1999 Patrick Ohly * * Uses the EXTER interrupt that is setup in filesys.c * and some of it needs thread support. */ #include "native2amiga_api.h" #include "traps.h" /* * The following functions are shortcuts for calling * the exec.library function with CallLib (), so they * are only available in a trap function. This trap * function has to be setup with deftrap2() and * TRAPFLAG_EXTRA_STACK and stack magic is required. */ uaecptr uae_AllocMem (TrapContext *context, uae_u32 size, uae_u32 flags, uaecptr sysbase); void uae_FreeMem (TrapContext *context, uaecptr memory, uae_u32 size, uaecptr sysbase); /* * to be called when setting up the hardware */ void native2amiga_install (void); void native2amiga_reset (void); /* * to be called when the Amiga boots, i.e. by filesys_diagentry() */ void native2amiga_startup (void); /**** internal stuff ****/ #ifdef SUPPORT_THREADS /* This pipe is filled by Signal() with pairs of * (uae_u32)0/(uaecptr)task/(uae_u32)signal_set, * by PutMsg() with (uae_u32)1/(uaecptr)port/(uaecptr)msg and by * ReplyMsg() with (uae_u32)2/(uaecptr)msg. * It's emptied via exter_int_helper by the EXTER interrupt. */ extern smp_comm_pipe native2amiga_pending; #endif STATIC_INLINE void do_uae_int_requested (void) { uae_int_requested |= 1; set_uae_int_flag (); } fs-uae-2.2.3+dfsg/src/include/blkdev.h0000644000175000017500000001604612162366655017716 0ustar glaubitzglaubitz #define DEVICE_SCSI_BUFSIZE (65536 - 1024) #define SCSI_UNIT_DISABLED -1 #define SCSI_UNIT_DEFAULT 0 #define SCSI_UNIT_IMAGE 1 #define SCSI_UNIT_IOCTL 2 #define SCSI_UNIT_SPTI 3 //#define device_debug write_log #define device_debug #define INQ_DASD 0x00 /* Direct-access device (disk) */ #define INQ_SEQD 0x01 /* Sequential-access device (tape) */ #define INQ_PRTD 0x02 /* Printer device */ #define INQ_PROCD 0x03 /* Processor device */ #define INQ_OPTD 0x04 /* Write once device (optical disk) */ #define INQ_WORM 0x04 /* Write once device (optical disk) */ #define INQ_ROMD 0x05 /* CD-ROM device */ #define INQ_SCAN 0x06 /* Scanner device */ #define INQ_OMEM 0x07 /* Optical Memory device */ #define INQ_JUKE 0x08 /* Medium Changer device (jukebox) */ #define INQ_COMM 0x09 /* Communications device */ #define INQ_IT8_1 0x0A /* IT8 */ #define INQ_IT8_2 0x0B /* IT8 */ #define INQ_STARR 0x0C /* Storage array device */ #define INQ_ENCL 0x0D /* Enclosure services device */ #define INQ_NODEV 0x1F /* Unknown or no device */ #define INQ_NOTPR 0x1F /* Logical unit not present (SCSI-1) */ #define MAX_TOC_ENTRIES 103 struct cd_toc { uae_u8 adr, control; uae_u8 tno; uae_u8 point; uae_u8 track; int address; // LSN int paddress; // LSN uae_u8 zero; uae_u8 crc[2]; }; struct cd_toc_head { int first_track, first_track_offset; int last_track, last_track_offset; int firstaddress; // LSN int lastaddress; // LSN int tracks; int points; struct cd_toc toc[MAX_TOC_ENTRIES]; }; #define SUB_ENTRY_SIZE 12 #define SUB_CHANNEL_SIZE 96 #define SUBQ_SIZE (4 + 12) #define AUDIO_STATUS_NOT_SUPPORTED 0x00 #define AUDIO_STATUS_IN_PROGRESS 0x11 #define AUDIO_STATUS_PAUSED 0x12 #define AUDIO_STATUS_PLAY_COMPLETE 0x13 #define AUDIO_STATUS_PLAY_ERROR 0x14 #define AUDIO_STATUS_NO_STATUS 0x15 struct device_info { bool open; int type; int media_inserted; int removable; int write_protected; int cylinders; int trackspercylinder; int sectorspertrack; int bytespersector; int bus, target, lun; int unitnum; TCHAR label[MAX_DPATH]; TCHAR mediapath[MAX_DPATH]; TCHAR vendorid[10]; TCHAR productid[18]; TCHAR revision[6]; TCHAR *backend; struct cd_toc_head toc; }; struct amigascsi { uae_u8 *data; uae_s32 len; uae_u8 cmd[16]; uae_s32 cmd_len; uae_u8 flags; uae_u8 sensedata[256]; uae_u16 sense_len; uae_u16 cmdactual; uae_u8 status; uae_u16 actual; uae_u16 sactual; }; typedef int (*check_bus_func)(int flags); typedef int (*open_bus_func)(int flags); typedef void (*close_bus_func)(void); typedef int (*open_device_func)(int, const TCHAR*, int); typedef void (*close_device_func)(int); typedef struct device_info* (*info_device_func)(int, struct device_info*, int, int); typedef uae_u8* (*execscsicmd_out_func)(int, uae_u8*, int); typedef uae_u8* (*execscsicmd_in_func)(int, uae_u8*, int, int*); typedef int (*execscsicmd_direct_func)(int, struct amigascsi*); typedef void (*play_subchannel_callback)(uae_u8*, int); typedef int (*play_status_callback)(int); typedef int (*pause_func)(int, int); typedef int (*stop_func)(int); typedef int (*play_func)(int, int, int, int, play_status_callback, play_subchannel_callback); typedef uae_u32 (*volume_func)(int, uae_u16, uae_u16); typedef int (*qcode_func)(int, uae_u8*, int); typedef int (*toc_func)(int, struct cd_toc_head*); typedef int (*read_func)(int, uae_u8*, int, int); typedef int (*rawread_func)(int, uae_u8*, int, int, int, uae_u32); typedef int (*write_func)(int, uae_u8*, int, int); typedef int (*isatapi_func)(int); typedef int (*ismedia_func)(int, int); typedef int (*scsiemu_func)(int, uae_u8*); struct device_functions { const TCHAR *name; open_bus_func openbus; close_bus_func closebus; open_device_func opendev; close_device_func closedev; info_device_func info; execscsicmd_out_func exec_out; execscsicmd_in_func exec_in; execscsicmd_direct_func exec_direct; pause_func pause; stop_func stop; play_func play; volume_func volume; qcode_func qcode; toc_func toc; read_func read; rawread_func rawread; write_func write; isatapi_func isatapi; ismedia_func ismedia; scsiemu_func scsiemu; }; extern int device_func_init(int flags); extern void device_func_reset(void); extern int sys_command_open (int unitnum); extern void sys_command_close (int unitnum); extern int sys_command_isopen (int unitnum); extern struct device_info *sys_command_info (int unitnum, struct device_info *di, int); extern int sys_command_cd_pause (int unitnum, int paused); extern void sys_command_cd_stop (int unitnum); extern int sys_command_cd_play (int unitnum, int startlsn, int endlsn, int); extern int sys_command_cd_play (int unitnum, int startlsn, int endlsn, int scan, play_status_callback statusfunc, play_subchannel_callback subfunc); extern uae_u32 sys_command_cd_volume (int unitnum, uae_u16 volume_left, uae_u16 volume_right); extern int sys_command_cd_qcode (int unitnum, uae_u8*); extern int sys_command_cd_toc (int unitnum, struct cd_toc_head*); extern int sys_command_cd_read (int unitnum, uae_u8 *data, int block, int size); extern int sys_command_cd_rawread (int unitnum, uae_u8 *data, int sector, int size, int sectorsize); extern int sys_command_cd_rawread (int unitnum, uae_u8 *data, int sector, int size, int sectorsize, uae_u8 scsicmd9, uae_u8 subs); extern int sys_command_read (int unitnum, uae_u8 *data, int block, int size); extern int sys_command_write (int unitnum, uae_u8 *data, int block, int size); extern int sys_command_scsi_direct_native (int unitnum, struct amigascsi *as); extern int sys_command_scsi_direct (int unitnum, uaecptr request); extern int sys_command_ismedia (int unitnum, int quick); extern struct device_info *sys_command_info_session (int unitnum, struct device_info *di, int, int); extern void scsi_atapi_fixup_pre (uae_u8 *scsi_cmd, int *len, uae_u8 **data, int *datalen, int *parm); extern void scsi_atapi_fixup_post (uae_u8 *scsi_cmd, int len, uae_u8 *olddata, uae_u8 *data, int *datalen, int parm); extern void scsi_log_before (uae_u8 *cdb, int cdblen, uae_u8 *data, int datalen); extern void scsi_log_after (uae_u8 *data, int datalen, uae_u8 *sense, int senselen); extern void blkdev_vsync (void); extern int msf2lsn (int msf); extern int lsn2msf (int lsn); extern uae_u8 frombcd (uae_u8 v); extern uae_u8 tobcd (uae_u8 v); extern int fromlongbcd (uae_u8 *p); extern void tolongbcd (uae_u8 *p, int v); extern void blkdev_default_prefs (struct uae_prefs *p); extern void blkdev_fix_prefs (struct uae_prefs *p); extern int isaudiotrack (struct cd_toc_head*, int block); extern int isdatatrack (struct cd_toc_head*, int block); void sub_to_interleaved (const uae_u8 *s, uae_u8 *d); void sub_to_deinterleaved (const uae_u8 *s, uae_u8 *d); enum cd_standard_unit { CD_STANDARD_UNIT_DEFAULT, CD_STANDARD_UNIT_AUDIO, CD_STANDARD_UNIT_CDTV, CD_STANDARD_UNIT_CD32 }; extern int get_standard_cd_unit (enum cd_standard_unit csu); extern void close_standard_cd_unit (int); extern void blkdev_cd_change (int unitnum, const TCHAR *name); extern void blkdev_entergui (void); extern void blkdev_exitgui (void); bool filesys_do_disk_change (int, bool); fs-uae-2.2.3+dfsg/src/include/picasso96.h0000644000175000017500000005363512162366655020274 0ustar glaubitzglaubitz#ifdef FSUAE #include "picasso96_host.h" #else #ifdef WIN32 #include "picasso96_win.h" #else /* * UAE - The U*nix Amiga Emulator * * Picasso96 Support Module Header * * Copyright 1997 Brian King */ #if defined PICASSO96_SUPPORTED #define PICASSO96 /* Seems the same routines copy back and forth ;-) */ #define PIC_READ (S_READ|S_WRITE) #define PIC_WRITE (S_READ|S_WRITE) #define JAM1 0 #define JAM2 1 #define COMP 2 #define INVERS 4 typedef enum { BLIT_FALSE, BLIT_NOR, BLIT_ONLYDST, BLIT_NOTSRC, BLIT_ONLYSRC, BLIT_NOTDST, BLIT_EOR, BLIT_NAND, BLIT_AND, BLIT_NEOR, BLIT_DST, BLIT_NOTONLYSRC, BLIT_SRC, BLIT_NOTONLYDST, BLIT_OR, BLIT_TRUE, BLIT_LAST } BLIT_OPCODE; /************************************************************************/ /* Types for BoardType Identification */ typedef enum { BT_NoBoard, BT_oMniBus, BT_Graffity, BT_CyberVision, BT_Domino, BT_Merlin, BT_PicassoII, BT_Piccolo, BT_RetinaBLT, BT_Spectrum, BT_PicassoIV, BT_PiccoloSD64, BT_A2410, BT_Pixel64, BT_uaegfx, BT_CVision3D, BT_Altais, BT_Prototype1, BT_Prototype2, BT_Prototype3, BT_Prototype4, BT_Prototype5, BT_MaxBoardTypes } BTYPE; struct ScreenResolution { uae_u32 width; /* in pixels */ uae_u32 height; /* in pixels */ }; #define MAX_PICASSO_MODES 64 struct PicassoResolution { struct Resolutions *next; struct ScreenResolution res; int depth; int refresh; char name[25]; }; extern struct PicassoResolution DisplayModes[MAX_PICASSO_MODES]; /* Types for RGBFormat used */ typedef enum { RGBFB_NONE, /* no valid RGB format (should not happen) */ RGBFB_CLUT, /* palette mode, set colors when opening screen using tags or use SetRGB32/LoadRGB32(...) */ RGBFB_R8G8B8, /* TrueColor RGB (8 bit each) */ RGBFB_B8G8R8, /* TrueColor BGR (8 bit each) */ RGBFB_R5G6B5PC, /* HiColor16 (5 bit R, 6 bit G, 5 bit B), format: gggbbbbbrrrrrggg */ RGBFB_R5G5B5PC, /* HiColor15 (5 bit each), format: gggbbbbb0rrrrrgg */ RGBFB_A8R8G8B8, /* 4 Byte TrueColor ARGB (A unused alpha channel) */ RGBFB_A8B8G8R8, /* 4 Byte TrueColor ABGR (A unused alpha channel) */ RGBFB_R8G8B8A8, /* 4 Byte TrueColor RGBA (A unused alpha channel) */ RGBFB_B8G8R8A8, /* 4 Byte TrueColor BGRA (A unused alpha channel) */ RGBFB_R5G6B5, /* HiColor16 (5 bit R, 6 bit G, 5 bit B), format: rrrrrggggggbbbbb */ RGBFB_R5G5B5, /* HiColor15 (5 bit each), format: 0rrrrrgggggbbbbb */ RGBFB_B5G6R5PC, /* HiColor16 (5 bit R, 6 bit G, 5 bit B), format: gggrrrrrbbbbbggg */ RGBFB_B5G5R5PC, /* HiColor15 (5 bit each), format: gggrrrrr0bbbbbbgg */ /* By now, the following formats are for use with a hardware window only (bitmap operations may be implemented incompletely) */ RGBFB_Y4U2V2, /* 2 Byte TrueColor YUV (CCIR recommendation CCIR601). Each two-pixel unit is stored as one longword containing luminance (Y) for each of the two pixels, and chrominance (U,V) for alternate pixels. The missing chrominance values are generated by interpolation. (Y1-U0-Y0-V0) */ RGBFB_Y4U1V1, /* 1 Byte TrueColor ACCUPAK. Four adjacent pixels form a packet of 5 bits Y (luminance) each pixel and 6 bits U and V (chrominance) shared by the four pixels */ RGBFB_MaxFormats } RGBFTYPE; #define RGBFF_NONE (1< } void uae_lua_init(void (*lock)(void), void (*unlock)(void)); void uae_lua_init_state(lua_State *L); void uae_lua_run_handler(const char *name); void uae_lua_aquire_lock(); void uae_lua_release_lock(); #endif // WITH_LUA #endif // LUASCRIPT_H_ fs-uae-2.2.3+dfsg/src/include/uaeexe.h0000644000175000017500000000060712162366655017717 0ustar glaubitzglaubitz/* * uaeexe.h - launch executable in UAE * * (c) 1997 by Samuel Devulder */ struct uae_xcmd { struct uae_xcmd *prev, *next; TCHAR *cmd; }; #define UAEEXE_ORG 0xF0FF90 /* sam: I hope this slot is free */ #define UAEEXE_OK 0 #define UAEEXE_NOTRUNNING 1 #define UAEEXE_NOMEM 2 extern void uaeexe_install (void); extern int uaeexe (const TCHAR *cmd); fs-uae-2.2.3+dfsg/src/include/ersatz.h0000644000175000017500000000044212162366655017750 0ustar glaubitzglaubitz /* * UAE - The Un*x Amiga Emulator * * A "replacement" for a missing Kickstart * * (c) 1995 Bernd Schmidt */ extern void init_ersatz_rom (uae_u8 *data); extern void ersatz_chipcopy (void); extern void ersatz_perform (uae_u16); extern void DISK_ersatz_read (int,int, uaecptr); fs-uae-2.2.3+dfsg/src/include/calc.h0000755000175000017500000000015112162366655017342 0ustar glaubitzglaubitz extern bool calc(const TCHAR *input, double *outval); extern bool iscalcformula (const TCHAR *formula); fs-uae-2.2.3+dfsg/src/include/disk.h0000644000175000017500000000436512162366655017402 0ustar glaubitzglaubitz /* * UAE - The Un*x Amiga Emulator * * disk support * * (c) 1995 Bernd Schmidt */ typedef enum { DRV_NONE = -1, DRV_35_DD = 0, DRV_35_HD, DRV_525_SD, DRV_35_DD_ESCOM } drive_type; #define HISTORY_FLOPPY 0 #define HISTORY_CD 1 extern void DISK_init (void); extern void DISK_free (void); extern void DISK_select (uae_u8 data); extern void DISK_select_set (uae_u8 data); extern uae_u8 DISK_status (void); extern void disk_eject (int num); extern int disk_empty (int num); extern void disk_insert (int num, const TCHAR *name); extern void disk_insert_force (int num, const TCHAR *name, bool writeprotected); extern void DISK_vsync (void); extern int DISK_validate_filename (struct uae_prefs *p, const TCHAR *fname, int leave_open, bool *wrprot, uae_u32 *crc32, struct zfile **zf); extern void DISK_handler (uae_u32); extern void DISK_update (int hpos); extern void DISK_update_adkcon (int hpos, uae_u16 v); extern void DISK_hsync (void); extern void DISK_reset (void); extern int disk_getwriteprotect (struct uae_prefs *p, const TCHAR *name); extern int disk_setwriteprotect (struct uae_prefs *p, int num, const TCHAR *name, bool writeprotected); extern bool disk_creatediskfile (const TCHAR *name, int type, drive_type adftype, const TCHAR *disk_name, bool ffs, bool bootable, struct zfile *copyfrom); extern void dumpdisk (void); extern int DISK_history_add (const TCHAR *name, int idx, int type, int donotcheck); extern TCHAR *DISK_history_get (int idx, int type); int DISK_examine_image (struct uae_prefs *p, int num, uae_u32 *crc32); extern TCHAR *DISK_get_saveimagepath (const TCHAR *name); extern void DISK_reinsert (int num); extern int disk_prevnext (int drive, int dir); extern int disk_prevnext_name (TCHAR *img, int dir); extern void DSKLEN (uae_u16 v, int hpos); extern uae_u16 DSKBYTR (int hpos); extern void DSKSYNC (int, uae_u16); extern void DSKPTL (uae_u16); extern void DSKPTH (uae_u16); extern void DSKDAT (uae_u16); extern uae_u16 DSKDATR (void); extern uae_u16 disk_dmal (void); extern uaecptr disk_getpt (void); extern int disk_fifostatus (void); extern int disk_debug_logging; extern int disk_debug_mode; extern int disk_debug_track; #define DISK_DEBUG_DMA_READ 1 #define DISK_DEBUG_DMA_WRITE 2 #define DISK_DEBUG_PIO 4 #define MAX_PREVIOUS_FLOPPIES 99 fs-uae-2.2.3+dfsg/src/include/serial.h0000644000175000017500000000306712162366655017725 0ustar glaubitzglaubitz /* * UAE - The Un*x Amiga Emulator * * Serial Line Emulation * * Copyright 1996, 1997 Stefan Reinauer * Copyright 1997 Christian Schmitt */ extern void serial_init (void); extern void serial_exit (void); extern void serial_dtr_off (void); extern void serial_dtr_on (void); extern uae_u16 SERDATR (void); extern int SERDATS (void); extern void SERPER (uae_u16 w); extern void SERDAT (uae_u16 w); extern uae_u8 serial_writestatus (uae_u8, uae_u8); extern uae_u8 serial_readstatus (uae_u8); extern void serial_uartbreak (int); extern uae_u16 serdat; extern int doreadser, serstat; extern void serial_flush_buffer (void); extern void serial_hsynchandler (void); extern void serial_check_irq (void); extern int uaeser_getdatalenght (void); extern int uaeser_getbytespending (void*); extern int uaeser_open (void*, void*, int); extern void uaeser_close (void*); extern int uaeser_read (void*, uae_u8 *data, uae_u32 len); extern int uaeser_write (void*, uae_u8 *data, uae_u32 len); extern int uaeser_query (void*, uae_u16 *status, uae_u32 *pending); extern int uaeser_setparams (void*, int baud, int rbuffer, int bits, int sbits, int rtscts, int parity, uae_u32 xonxoff); extern int uaeser_break (void*, int brklen); extern void uaeser_signal (void*, int source); extern void uaeser_trigger (void*); extern void uaeser_clearbuffers (void*); extern void enet_writeser (uae_u16); extern int enet_readseravail (void); extern int enet_readser (uae_u16 *buffer); extern int enet_open (TCHAR *name); extern void enet_close (void); fs-uae-2.2.3+dfsg/src/include/gensound.h0000644000175000017500000000147312162366655020267 0ustar glaubitzglaubitz /* * UAE - The Un*x Amiga Emulator * * Prototypes for general sound related functions * This use to be called sound.h, but that causes confusion * * Copyright 1997 Bernd Schmidt */ extern int sound_available; extern void (*sample_handler) (void); /* sample_evtime is in normal Amiga cycles; scaled_sample_evtime is in our event cycles. */ extern float scaled_sample_evtime; /* Determine if we can produce any sound at all. This can be only a guess; * if unsure, say yes. Any call to init_sound may change the value. */ extern int setup_sound (void); extern int init_sound (void); extern void close_sound (void); extern void sample16_handler (void); extern void sample8_handler (void); extern void sample16s_handler (void); extern void sample16ss_handler (void); extern void sample8s_handler (void); fs-uae-2.2.3+dfsg/src/include/inputrecord.h0000644000175000017500000000333112162366655020776 0ustar glaubitzglaubitz /* * UAE - The Un*x Amiga Emulator * * Input recording and playback * * Copyright 2010 Toni Wilen */ extern int inputrecord_debug; //#define INPREC_JOYPORT 1 //#define INPREC_JOYBUTTON 2 //#define INPREC_KEY 3 #define INPREC_DISKINSERT 4 #define INPREC_DISKREMOVE 5 //#define INPREC_VSYNC 6 //#define INPREC_CIAVSYNC 7 #define INPREC_EVENT 8 #define INPREC_CIADEBUG 0x61 #define INPREC_DEBUG 0x62 #define INPREC_DEBUG2 0x63 #define INPREC_STOP 0x7d #define INPREC_END 0x7e #define INPREC_QUIT 0x7f #define INPREC_RECORD_START 1 #define INPREC_RECORD_NORMAL 2 #define INPREC_RECORD_RERECORD 3 #define INPREC_RECORD_PLAYING 4 #define INPREC_PLAY_NORMAL 1 #define INPREC_PLAY_RERECORD 2 extern int input_record, input_play; extern void inprec_close (bool); extern void inprec_save (const TCHAR*, const TCHAR*); extern int inprec_open (const TCHAR*, const TCHAR*); extern bool inprec_prepare_record (const TCHAR*); extern void inprec_playtorecord (void); extern void inprec_startup (void); extern bool inprec_playevent (int *nr, int *state, int *max, int *autofire); extern void inprec_playdiskchange (void); extern void inprec_recordevent (int nr, int state, int max, int autofire); extern void inprec_recorddiskchange (int nr, const TCHAR *fname, bool writeprotected); extern void inprec_recorddebug (uae_u32); extern void inprec_playdebug (uae_u32); extern void inprec_recorddebug_cpu (int); extern void inprec_playdebug_cpu (int); extern void inprec_recorddebug_cia (uae_u32, uae_u32, uae_u32); extern void inprec_playdebug_cia (uae_u32, uae_u32, uae_u32); extern int inprec_getposition (void); extern void inprec_setposition (int offset, int replaycounter); extern bool inprec_realtime (void); extern void inprec_getstatus (TCHAR*);fs-uae-2.2.3+dfsg/src/include/fpp-ieee-be.h0000644000175000017500000000212112162366655020512 0ustar glaubitzglaubitz /* * UAE - The Un*x Amiga Emulator * * MC68881 emulation * Support functions for IEEE compatible host CPUs. * These functions use a GCC extension (type punning through unions) and * should only be compiled with compilers that support this. * * Copyright 1999 Sam Jordan */ STATIC_INLINE double to_single (uae_u32 value) { union { float f; uae_u32 u; } val; val.u = value; return val.f; } STATIC_INLINE uae_u32 from_single (double src) { union { float f; uae_u32 u; } val; val.f = src; return val.u; } STATIC_INLINE double to_double(uae_u32 wrd1, uae_u32 wrd2) { union { double d; uae_u32 u[2]; } val; val.u[0] = wrd1; val.u[1] = wrd2; return val.d; } STATIC_INLINE void from_double(double src, uae_u32 * wrd1, uae_u32 * wrd2) { union { double d; uae_u32 u[2]; } val; val.d = src; *wrd1 = val.u[0]; *wrd2 = val.u[1]; } #define HAVE_from_double #define HAVE_to_double #define HAVE_from_single #define HAVE_to_single /* Get the rest of the conversion functions defined. */ #include "fpp-unknown.h" fs-uae-2.2.3+dfsg/src/include/arcadia.h0000644000175000017500000000122112162366655020020 0ustar glaubitzglaubitz #ifdef ARCADIA extern void arcadia_init (void); extern int is_arcadia_rom (const TCHAR *path); extern int arcadia_map_banks (void); extern void arcadia_unmap (void); extern void arcadia_vsync (void); extern void arcadia_reset (void); extern uae_u8 arcadia_parport (int port, uae_u8 pra, uae_u8 dra); extern struct romdata *scan_arcadia_rom (TCHAR*, int); struct arcadiarom { int romid; TCHAR *name, *rom; int type, extra; int b7, b6, b5, b4, b3, b2, b1, b0; }; extern struct arcadiarom *arcadia_bios, *arcadia_game; extern int arcadia_flag, arcadia_coin[2]; #define NO_ARCADIA_ROM 0 #define ARCADIA_BIOS 1 #define ARCADIA_GAME 2 #endiffs-uae-2.2.3+dfsg/src/include/events.h0000644000175000017500000000572412162366655017754 0ustar glaubitzglaubitz#ifndef EVENTS_H #define EVENTS_H /* * UAE - The Un*x Amiga Emulator * * Events * These are best for low-frequency events. Having too many of them, * or using them for events that occur too frequently, can cause massive * slowdown. * * Copyright 1995-1998 Bernd Schmidt */ #undef EVENT_DEBUG #include "machdep/rpt.h" extern frame_time_t vsyncmintime, vsyncmaxtime, vsyncwaittime; extern int vsynctimebase, syncbase; extern void reset_frame_rate_hack (void); extern unsigned long int vsync_cycles; extern unsigned long start_cycles; extern void compute_vsynctime (void); extern void init_eventtab (void); extern void do_cycles_ce (unsigned long cycles); extern void events_schedule (void); extern void do_cycles_slow (unsigned long cycles_to_add); extern void do_cycles_fast (unsigned long cycles_to_add); extern int is_cycle_ce (void); extern unsigned long currcycle, nextevent; extern int is_syncline, is_syncline_end; typedef void (*evfunc)(void); typedef void (*evfunc2)(uae_u32); typedef unsigned long int evt; struct ev { bool active; evt evtime, oldcycles; evfunc handler; }; struct ev2 { bool active; evt evtime; uae_u32 data; evfunc2 handler; }; enum { ev_cia, ev_audio, ev_misc, ev_hsync, ev_max }; enum { ev2_blitter, ev2_disk, ev2_misc, ev2_max = 12 }; extern int pissoff_value; extern signed long pissoff; #define countdown pissoff #define do_cycles do_cycles_slow extern struct ev eventtab[ev_max]; extern struct ev2 eventtab2[ev2_max]; extern volatile bool vblank_found_chipset; extern volatile bool vblank_found_rtg; STATIC_INLINE void cycles_do_special (void) { #ifdef JIT if (currprefs.cachesize) { if (pissoff >= 0) pissoff = -1; } else #endif { pissoff = 0; } } STATIC_INLINE void do_extra_cycles (unsigned long cycles_to_add) { pissoff -= cycles_to_add; } STATIC_INLINE unsigned long int get_cycles (void) { return currcycle; } STATIC_INLINE void set_cycles (unsigned long int x) { currcycle = x; eventtab[ev_hsync].oldcycles = x; #ifdef EVT_DEBUG if (currcycle & (CYCLE_UNIT - 1)) write_log (_T("%x\n"), currcycle); #endif } STATIC_INLINE int current_hpos (void) { return (get_cycles () - eventtab[ev_hsync].oldcycles) / CYCLE_UNIT; } STATIC_INLINE bool cycles_in_range (unsigned long endcycles) { signed long c = get_cycles (); return (signed long)endcycles - c > 0; } extern void MISC_handler (void); extern void event2_newevent_xx (int no, evt t, uae_u32 data, evfunc2 func); STATIC_INLINE void event2_newevent_x (int no, evt t, uae_u32 data, evfunc2 func) { if (((int)t) <= 0) { func (data); return; } event2_newevent_xx (no, t * CYCLE_UNIT, data, func); } STATIC_INLINE void event2_newevent (int no, evt t, uae_u32 data) { event2_newevent_x (no, t, data, eventtab2[no].handler); } STATIC_INLINE void event2_newevent2 (evt t, uae_u32 data, evfunc2 func) { event2_newevent_x (-1, t, data, func); } STATIC_INLINE void event2_remevent (int no) { eventtab2[no].active = 0; } #endif fs-uae-2.2.3+dfsg/src/include/mackbd.h0000644000175000017500000000602312162366655017662 0ustar glaubitzglaubitz /* * UAE - The Un*x Amiga Emulator * * Mac keycodes * * (c) 1996 Ernesto Corvi */ #define kUpArrowKeyMap 0x7E /* key map offset for up arrow */ #define kDownArrowKeyMap 0x7D /* key map offset for down arrow */ #define kRightArrowKeyMap 0x7C /* key map offset for right arrow */ #define kLeftArrowKeyMap 0x7B /* key map offset for left arrow */ #define kBackSpaceKeyMap 0x33 #define kReturnKeyMap 0x24 #define kEscapeKeyMap 0x35 #define kLBracketKeyMap 0x21 #define kRBracketKeyMap 0x1E #define kCommaKeyMap 0x2B #define kSlashKeyMap 0x2C #define kSemiColonKeyMap 0x29 #define kMinusKeyMap 0x1B #define kEqualKeyMap 0x18 #define kQuoteKeyMap 0x27 #define k0KeyMap 0x1D #define k1KeyMap 0x12 #define k2KeyMap 0x13 #define k3KeyMap 0x14 #define k4KeyMap 0x15 #define k5KeyMap 0x17 #define k6KeyMap 0x16 #define k7KeyMap 0x1A #define k8KeyMap 0x1C #define k9KeyMap 0x19 #define kAKeyMap 0x00 #define kBKeyMap 0x0B #define kCKeyMap 0x08 #define kDKeyMap 0x02 #define kEKeyMap 0x0E #define kFKeyMap 0x03 #define kGKeyMap 0x05 #define kHKeyMap 0x04 #define kIKeyMap 0x22 #define kJKeyMap 0x26 #define kKKeyMap 0x28 #define kLKeyMap 0x25 #define kMKeyMap 0x2E #define kNKeyMap 0x2D #define kOKeyMap 0x1F #define kPKeyMap 0x23 #define kQKeyMap 0x0C #define kRKeyMap 0x0F #define kSKeyMap 0x01 #define kTKeyMap 0x11 #define kUKeyMap 0x20 #define kVKeyMap 0x09 #define kWKeyMap 0x0D #define kXKeyMap 0x07 #define kYKeyMap 0x10 #define kZKeyMap 0x06 #define kPeriodKeyMap 0x2F #define kCommandKeyMap 0x37 #define kSpaceBarMap 0x31 #define kTabKeyMap 0x30 #define kControlKeyMap 0x3B #define kOptionKeyMap 0x3A #define kCapsLockKeyMap 0x39 #define kShiftKeyMap 0x38 #define kPgUpKeyMap 0x74 #define kPgDnKeyMap 0x79 #define kBackSlash 0x2A #define kF1KeyMap 0x7A #define kF2KeyMap 0x78 #define kF3KeyMap 0x63 #define kF4KeyMap 0x76 #define kF5KeyMap 0x60 #define kF6KeyMap 0x61 #define kF7KeyMap 0x62 #define kF8KeyMap 0x64 #define kF9KeyMap 0x65 #define kF10KeyMap 0x6D #define kF11KeyMap 0x67 #define kF12KeyMap 0x6F #define kShiftRawKey 0x3F #define kControlRawKey 0x3C #define kOptionRawKey 0x3D #define kCapsRawKey 0x3E #define kCommandRawKey 0x30 #define kUpRawKey 0x79 #define kDownRawKey 0x7A #define kLeftRawKey 0x7C #define kRightRawKey 0x7B #define kSpaceRawKey 0x36 #define kKP0KeyMap 0x52 #define kKP1KeyMap 0x53 #define kKP2KeyMap 0x54 #define kKP3KeyMap 0x55 #define kKP4KeyMap 0x56 #define kKP5KeyMap 0x57 #define kKP6KeyMap 0x58 #define kKP7KeyMap 0x59 #define kKP8KeyMap 0x5B #define kKP9KeyMap 0x5C fs-uae-2.2.3+dfsg/src/include/driveclick.h0000644000175000017500000000265012162366655020562 0ustar glaubitzglaubitz /* * UAE - The Un*x Amiga Emulator * * Drive Click emulation stuff * * Copyright 2004 James Bagg, Toni Wilen */ #define CLICK_TRACKS 84 struct drvsample { int len; int pos; uae_s16 *p; int indexes[CLICK_TRACKS]; int lengths[CLICK_TRACKS]; }; #define DS_CLICK 0 #define DS_SPIN 1 #define DS_SPINND 2 #define DS_START 3 #define DS_SNATCH 4 #define DS_END 5 extern void driveclick_click (int drive, int startOffset); extern void driveclick_motor (int drive, int running); extern void driveclick_insert (int drive, int eject); extern void driveclick_init (void); extern void driveclick_free (void); extern void driveclick_reset (void); extern void driveclick_mix (uae_s16*, int, int); extern int driveclick_loadresource (struct drvsample*, int); extern void driveclick_check_prefs (void); extern uae_s16 *decodewav (uae_u8 *s, int *len); #define DS_BUILD_IN_SOUNDS 1 #define DS_NAME_CLICK _T("drive_click_") #define DS_NAME_SPIN _T("drive_spin_") #define DS_NAME_SPIN_ND _T("drive_spinnd_") #define DS_NAME_START _T("drive_start_") #define DS_NAME_SNATCH _T("drive_snatch_") extern int driveclick_fdrawcmd_open (int); extern void driveclick_fdrawcmd_close (int); extern void driveclick_fdrawcmd_detect (void); extern void driveclick_fdrawcmd_seek (int, int); extern void driveclick_fdrawcmd_motor (int, int); extern void driveclick_fdrawcmd_vsync (void); extern int driveclick_pcdrivemask, driveclick_pcdrivenum;fs-uae-2.2.3+dfsg/src/include/sampler.h0000644000175000017500000000021412162366655020100 0ustar glaubitzglaubitz extern uae_u8 sampler_getsample (int); extern int sampler_init (void); extern void sampler_free (void); extern void sampler_vsync (void); fs-uae-2.2.3+dfsg/src/include/rommgr.h0000644000175000017500000000656212162366655017754 0ustar glaubitzglaubitzextern int decode_cloanto_rom_do (uae_u8 *mem, int size, int real_size); #define ROMTYPE_KICK 0x000001 #define ROMTYPE_KICKCD32 0x000002 #define ROMTYPE_EXTCD32 0x000004 #define ROMTYPE_EXTCDTV 0x000008 #define ROMTYPE_A2091BOOT 0x000010 #define ROMTYPE_A4091BOOT 0x000020 #define ROMTYPE_AR 0x000040 #define ROMTYPE_SUPERIV 0x000080 #define ROMTYPE_KEY 0x000100 #define ROMTYPE_ARCADIABIOS 0x000200 #define ROMTYPE_ARCADIAGAME 0x000400 #define ROMTYPE_HRTMON 0x000800 #define ROMTYPE_NORDIC 0x001000 #define ROMTYPE_XPOWER 0x002000 #define ROMTYPE_CD32CART 0x004000 #define ROMTYPE_SPECIALKICK 0x008000 #define ROMTYPE_MASK 0x01ffff #define ROMTYPE_EVEN 0x020000 #define ROMTYPE_ODD 0x040000 #define ROMTYPE_8BIT 0x080000 #define ROMTYPE_BYTESWAP 0x100000 #define ROMTYPE_CD32 0x200000 #define ROMTYPE_SCRAMBLED 0x400000 #define ROMTYPE_ALL_KICK (ROMTYPE_KICK | ROMTYPE_KICKCD32 | ROMTYPE_CD32) #define ROMTYPE_ALL_EXT (ROMTYPE_EXTCD32 | ROMTYPE_EXTCDTV) #define ROMTYPE_ALL_CART (ROMTYPE_AR | ROMTYPE_HRTMON | ROMTYPE_NORDIC | ROMTYPE_XPOWER | ROMTYPE_CD32CART) struct romheader { TCHAR *name; int id; }; struct romdata { TCHAR *name; int ver, rev; int subver, subrev; TCHAR *model; uae_u32 size; int id; int cpu; int cloanto; int type; int group; int title; TCHAR *partnumber; uae_u32 crc32; uae_u32 sha1[5]; TCHAR *configname; }; struct romlist { TCHAR *path; struct romdata *rd; }; extern struct romdata *getromdatabypath (const TCHAR *path); extern struct romdata *getromdatabycrc (uae_u32 crc32); extern struct romdata *getromdatabydata (uae_u8 *rom, int size); extern struct romdata *getromdatabyid (int id); extern struct romdata *getromdatabyidgroup (int id, int group, int subitem); extern struct romdata *getromdatabyzfile (struct zfile *f); extern struct romlist **getarcadiaroms (void); extern struct romdata *getarcadiarombyname (const TCHAR *name); extern struct romlist **getromlistbyident (int ver, int rev, int subver, int subrev, const TCHAR *model, int romflags, bool all); extern void getromname (const struct romdata*, TCHAR*); extern struct romdata *getromdatabyname (const TCHAR*); extern struct romlist *getromlistbyids (const int *ids); extern void romwarning(const int *ids); extern struct romlist *getromlistbyromdata (const struct romdata *rd); extern void romlist_add (const TCHAR *path, struct romdata *rd); extern TCHAR *romlist_get (const struct romdata *rd); extern void romlist_clear (void); extern struct zfile *read_rom (struct romdata **rd); extern struct zfile *read_rom_name (const TCHAR *filename); extern int load_keyring (struct uae_prefs *p, const TCHAR *path); extern uae_u8 *target_load_keyfile (struct uae_prefs *p, const TCHAR *path, int *size, TCHAR *name); extern void free_keyring (void); extern int get_keyring (void); extern void kickstart_fix_checksum (uae_u8 *mem, int size); extern void descramble_nordicpro (uae_u8*, int, int); extern int kickstart_checksum (uae_u8 *mem, int size); extern int decode_rom (uae_u8 *mem, int size, int mode, int real_size); extern struct zfile *rom_fopen (const TCHAR *name, const TCHAR *mode, int mask); extern struct zfile *read_rom_name_guess (const TCHAR *filename); extern void addkeydir (const TCHAR *path); extern void addkeyfile (const TCHAR *path); extern int romlist_count (void); extern struct romlist *romlist_getit (void); extern int configure_rom (struct uae_prefs *p, const int *rom, int msg); fs-uae-2.2.3+dfsg/src/include/isofs_api.h0000755000175000017500000000200512162366655020414 0ustar glaubitzglaubitz struct cd_opendir_s; struct cd_openfile_s; struct isofs_info { bool media; bool unknown_media; TCHAR volumename[256]; TCHAR devname[256]; uae_u32 blocks; uae_u32 totalblocks; uae_u32 blocksize; time_t creation; }; void *isofs_mount(int unitnum, uae_u64 *uniq); void isofs_unmount(void *sb); bool isofs_mediainfo(void *sb, struct isofs_info*); struct cd_opendir_s *isofs_opendir(void *sb, uae_u64 uniq); void isofs_closedir(struct cd_opendir_s*); bool isofs_readdir(struct cd_opendir_s*, TCHAR*, uae_u64 *uniq); bool isofs_stat(void *sb, uae_u64, struct mystat*); void isofss_fill_file_attrs(void *sb, uae_u64, int*, int*, TCHAR**, uae_u64); bool isofs_exists(void *sb, uae_u64, const TCHAR*, uae_u64*); void isofs_dispose_inode(void *sb, uae_u64); struct cd_openfile_s *isofs_openfile(void*,uae_u64, int); void isofs_closefile(struct cd_openfile_s*); uae_s64 isofs_lseek(struct cd_openfile_s*, uae_s64, int); uae_s64 isofs_fsize(struct cd_openfile_s*); uae_s64 isofs_read(struct cd_openfile_s*, void*, unsigned int); fs-uae-2.2.3+dfsg/src/include/debug.h0000644000175000017500000000633412162366655017534 0ustar glaubitzglaubitz /* * UAE - The Un*x Amiga Emulator * * Debugger * * (c) 1995 Bernd Schmidt * */ #ifdef DEBUGGER #define MAX_HIST 500 #define MAX_LINEWIDTH 100 extern int debugging; extern int exception_debugging; extern int debug_copper; extern int debug_dma; extern int debug_sprite_mask; extern int debug_bpl_mask, debug_bpl_mask_one; extern int debugger_active; extern int debug_illegal; extern uae_u64 debug_illegal_mask; extern void debug (void); extern void debugger_change (int mode); extern void activate_debugger (void); extern void deactivate_debugger (void); extern int notinrom (void); extern const TCHAR *debuginfo (int); extern void record_copper (uaecptr addr, int hpos, int vpos); extern void record_copper_reset (void); extern int mmu_init (int, uaecptr,uaecptr); extern void mmu_do_hit (void); extern void dump_aga_custom (void); extern void memory_map_dump (void); extern void debug_help (void); extern uaecptr dumpmem2 (uaecptr addr, TCHAR *out, int osize); extern void update_debug_info (void); extern int instruction_breakpoint (TCHAR **c); extern int debug_bankchange (int); extern void log_dma_record (void); extern void debug_parser (const TCHAR *cmd, TCHAR *out, uae_u32 outsize); #define BREAKPOINT_TOTAL 20 struct breakpoint_node { uaecptr addr; int enabled; }; extern struct breakpoint_node bpnodes[BREAKPOINT_TOTAL]; #define MEMWATCH_TOTAL 20 struct memwatch_node { uaecptr addr; int size; int rwi; uae_u32 val, val_mask; int val_size, val_enabled; int mustchange; uae_u32 modval; int modval_written; int frozen; uaecptr pc; }; extern struct memwatch_node mwnodes[MEMWATCH_TOTAL]; extern void memwatch_dump2 (TCHAR *buf, int bufsize, int num); uae_u16 debug_wgetpeekdma (uaecptr addr, uae_u32 v); uae_u16 debug_wputpeekdma (uaecptr addr, uae_u32 v); void debug_lgetpeek (uaecptr addr, uae_u32 v); void debug_wgetpeek (uaecptr addr, uae_u32 v); void debug_bgetpeek (uaecptr addr, uae_u32 v); void debug_bputpeek (uaecptr addr, uae_u32 v); void debug_wputpeek (uaecptr addr, uae_u32 v); void debug_lputpeek (uaecptr addr, uae_u32 v); enum debugtest_item { DEBUGTEST_BLITTER, DEBUGTEST_KEYBOARD, DEBUGTEST_FLOPPY, DEBUGTEST_MAX }; void debugtest (enum debugtest_item, const TCHAR *, ...); struct dma_rec { uae_u16 reg; uae_u16 dat; uae_u32 addr; uae_u16 evt; int type; }; #define DMA_EVENT_BLITIRQ 1 #define DMA_EVENT_BLITNASTY 2 #define DMA_EVENT_BLITFINISHED 4 #define DMA_EVENT_BPLFETCHUPDATE 8 #define DMA_EVENT_COPPERWAKE 16 #define DMA_EVENT_CPUIRQ 32 #define DMA_EVENT_INTREQ 64 #define DMA_EVENT_COPPERWANTED 128 #define DMARECORD_REFRESH 1 #define DMARECORD_CPU 2 #define DMARECORD_COPPER 3 #define DMARECORD_AUDIO 4 #define DMARECORD_BLITTER 5 #define DMARECORD_BLITTER_LINE 6 #define DMARECORD_BITPLANE 7 #define DMARECORD_SPRITE 8 #define DMARECORD_DISK 9 #define DMARECORD_MAX 10 extern struct dma_rec *record_dma (uae_u16 reg, uae_u16 dat, uae_u32 addr, int hpos, int vpos, int type); extern void record_dma_reset (void); extern void record_dma_event (int evt, int hpos, int vpos); extern void debug_draw_cycles (uae_u8 *buf, int bpp, int line, int width, int height, uae_u32 *xredcolors, uae_u32 *xgreencolors, uae_u32 *xbluescolors); #else STATIC_INLINE void activate_debugger (void) { }; #endif fs-uae-2.2.3+dfsg/src/include/gui.h0000644000175000017500000000471212162366655017230 0ustar glaubitzglaubitz /* * UAE - The Un*x Amiga Emulator * * Interface to the Tcl/Tk GUI * * Copyright 1996 Bernd Schmidt */ extern int gui_init (void); extern int gui_update (void); extern void gui_exit (void); extern void gui_led (int, int); extern void gui_handle_events (void); extern void gui_filename (int, const TCHAR *); extern void gui_fps (int fps, int idle, int color); extern void gui_changesettings (void); extern void gui_lock (void); extern void gui_unlock (void); extern void gui_flicker_led (int, int, int); extern void gui_disk_image_change (int, const TCHAR *, bool writeprotected); extern unsigned int gui_ledstate; extern void gui_display (int shortcut); extern void gui_gameport_button_change (int port, int button, int onoff); extern void gui_gameport_axis_change (int port, int axis, int state, int max); extern bool no_gui, quit_to_gui; #define LED_CD_ACTIVE 1 #define LED_CD_ACTIVE2 2 #define LED_CD_AUDIO 4 #define LED_POWER 0 #define LED_DF0 1 #define LED_DF1 2 #define LED_DF2 3 #define LED_DF3 4 #define LED_HD 5 #define LED_CD 6 #define LED_FPS 7 #define LED_CPU 8 #define LED_SND 9 #define LED_MD 10 #define LED_MAX 11 struct gui_info { bool drive_motor[4]; /* motor on off */ uae_u8 drive_track[4]; /* rw-head track */ bool drive_writing[4]; /* drive is writing */ bool drive_disabled[4]; /* drive is disabled */ bool powerled; /* state of power led */ uae_u8 powerled_brightness; /* 0 to 255 */ uae_s8 drive_side; /* floppy side */ uae_s8 hd; /* harddrive */ uae_s8 cd; /* CD */ uae_s8 md; /* CD32 or CDTV internal storage */ int fps, idle; int fps_color; int sndbuf, sndbuf_status; TCHAR df[4][256]; /* inserted image */ uae_u32 crc32[4]; /* crc32 of image */ }; #define NUM_LEDS (LED_MAX) #define VISIBLE_LEDS (LED_MAX - 1) extern struct gui_info gui_data; /* Functions to be called when prefs are changed by non-gui code. */ extern void gui_update_gfx (void); void notify_user (int msg); void notify_user_parms (int msg, const TCHAR *parms, ...); int translate_message (int msg, TCHAR *out); typedef enum { NUMSG_NEEDEXT2, NUMSG_NOROM, NUMSG_NOROMKEY, NUMSG_KSROMCRCERROR, NUMSG_KSROMREADERROR, NUMSG_NOEXTROM, NUMSG_MODRIP_NOTFOUND, NUMSG_MODRIP_FINISHED, NUMSG_MODRIP_SAVE, NUMSG_KS68EC020, NUMSG_KS68020, NUMSG_KS68030, NUMSG_ROMNEED, NUMSG_EXPROMNEED, NUMSG_NOZLIB, NUMSG_STATEHD, NUMSG_NOCAPS, NUMSG_OLDCAPS, NUMSG_KICKREP, NUMSG_KICKREPNO } notify_user_msg; fs-uae-2.2.3+dfsg/src/include/consolehook.h0000644000175000017500000000027312162366655020765 0ustar glaubitzglaubitz int consolehook_activate (void); void consolehook_ret (uaecptr condev, uaecptr oldbeginio); uaecptr consolehook_beginio (uaecptr request); void consolehook_config (struct uae_prefs *p); fs-uae-2.2.3+dfsg/src/include/parallel.h0000644000175000017500000000030112162366655020226 0ustar glaubitzglaubitz extern int isprinter (void); extern void doprinter (uae_u8); extern void flushprinter (void); extern void closeprinter (void); extern int isprinteropen (void); extern void initparallel (void);fs-uae-2.2.3+dfsg/src/include/cdtv.h0000644000175000017500000000132412162366655017400 0ustar glaubitzglaubitz #ifdef CDTV extern addrbank dmac_bank; extern void cdtv_init (void); extern void cdtv_free (void); extern void CDTV_hsync_handler(void); extern void cdtv_check_banks (void); void cdtv_battram_write (int addr, int v); uae_u8 cdtv_battram_read (int addr); extern void cdtv_loadcardmem (uae_u8*, int); extern void cdtv_savecardmem (uae_u8*, int); int cdtv_add_scsi_unit (int ch, TCHAR *path, int blocksize, int readonly, TCHAR *devname, int sectors, int surfaces, int reserved, int bootpri, TCHAR *filesys); extern void cdtv_getdmadata (uae_u32*); extern void rethink_cdtv (void); extern void cdtv_scsi_int (void); extern void cdtv_scsi_clear_int (void); extern bool cdtv_front_panel (int); #endif fs-uae-2.2.3+dfsg/src/include/bsdsocket.h0000644000175000017500000001726512162366655020434 0ustar glaubitzglaubitz /* * UAE - The Un*x Amiga Emulator * * bsdsocket.library emulation * * Copyright 1997,98 Mathias Ortmann * */ #define BSD_TRACING_ENABLED 0 extern int log_bsd; #define ISBSDTRACE (log_bsd || BSD_TRACING_ENABLED) #define BSDTRACE(x) do { if (ISBSDTRACE) { write_log x; } } while(0) extern int init_socket_layer (void); extern void deinit_socket_layer (void); /* inital size of per-process descriptor table (currently fixed) */ #define DEFAULT_DTABLE_SIZE 64 #define SCRATCHBUFSIZE 128 #define MAXPENDINGASYNC 512 #define MAXADDRLEN 256 #ifdef WINDOWS #define SOCKET_TYPE SOCKET #else #define SOCKET_TYPE int #endif /* allocated and maintained on a per-task basis */ struct socketbase { struct socketbase *next; struct socketbase *nextsig; /* queue for tasks to signal */ uaecptr sysbase; int dosignal; /* signal flag */ uae_u32 ownertask; /* task that opened the library */ int signal; /* signal allocated for that task */ int sb_errno, sb_herrno; /* errno and herrno variables */ uae_u32 errnoptr, herrnoptr; /* pointers */ uae_u32 errnosize, herrnosize; /* pinter sizes */ int dtablesize; /* current descriptor/flag etc. table size */ SOCKET_TYPE *dtable; /* socket descriptor table */ int *ftable; /* socket flags */ int resultval; uae_u32 hostent; /* pointer to the current hostent structure (Amiga mem) */ uae_u32 hostentsize; uae_u32 protoent; /* pointer to the current protoent structure (Amiga mem) */ uae_u32 protoentsize; uae_u32 servent; /* pointer to the current servent structure (Amiga mem) */ uae_u32 serventsize; uae_u32 sigstosend; uae_u32 eventsigs; /* EVENT sigmask */ uae_u32 eintrsigs; /* EINTR sigmask */ int eintr; /* interrupted by eintrsigs? */ int eventindex; /* current socket looked at by GetSocketEvents() to prevent starvation */ uae_u32 logstat; uae_u32 logptr; uae_u32 logmask; uae_u32 logfacility; uaecptr fdcallback; unsigned int *mtable; /* window messages allocated for asynchronous event notification */ /* host-specific fields below */ #ifdef WINDOWS SOCKET_TYPE sockAbort; /* for aborting WinSock2 select() (damn Microsoft) */ SOCKET_TYPE sockAsync; /* for aborting WSBAsyncSelect() in window message handler */ int needAbort; /* abort flag */ void *hAsyncTask; /* async task handle */ void *hEvent; /* thread event handle */ #else uae_sem_t sem; /* semaphore to notify the socket thread of work */ uae_thread_id thread; /* socket thread */ int sockabort[2]; /* pipe used to tell the thread to abort a select */ int action; int s; /* for accept */ uae_u32 name; /* For gethostbyname */ uae_u32 a_addr; /* gethostbyaddr, accept */ uae_u32 a_addrlen; /* for gethostbyaddr, accept */ uae_u32 flags; void *buf; uae_u32 len; uae_u32 to, tolen, from, fromlen; int nfds; uae_u32 sets [3]; uae_u32 timeout; uae_u32 sigmp; #endif #ifdef FSUAE TrapContext *context; #endif }; #define LIBRARY_SIZEOF 36 struct UAEBSDBase { uae_u8 dummy[LIBRARY_SIZEOF]; struct socketbase *sb; uae_u8 scratchbuf[SCRATCHBUFSIZE]; }; /* socket flags */ /* socket events to report */ #define REP_ACCEPT 0x01 /* there is a connection to accept() */ #define REP_CONNECT 0x02 /* connect() completed */ #define REP_OOB 0x04 /* socket has out-of-band data */ #define REP_READ 0x08 /* socket is readable */ #define REP_WRITE 0x10 /* socket is writeable */ #define REP_ERROR 0x20 /* asynchronous error on socket */ #define REP_CLOSE 0x40 /* connection closed (graceful or not) */ #define REP_ALL 0x7f /* socket events that occurred */ #define SET_ACCEPT 0x0100 /* there is a connection to accept() */ #define SET_CONNECT 0x0200 /* connect() completed */ #define SET_OOB 0x0400 /* socket has out-of-band data */ #define SET_READ 0x0800 /* socket is readable */ #define SET_WRITE 0x1000 /* socket is writeable */ #define SET_ERROR 0x2000 /* asynchronous error on socket */ #define SET_CLOSE 0x4000 /* connection closed (graceful or not) */ #define SET_ALL 0x7f00 /* socket properties */ #define SF_BLOCKING 0x80000000 #define SF_BLOCKINGINPROGRESS 0x40000000 /* STBC_FDCALLBACK */ #define FDCB_FREE 0 #define FDCB_ALLOC 1 #define FDCB_CHECK 2 uae_u32 addstr (uae_u32 * dst, const TCHAR *src); uae_u32 addstr_ansi (uae_u32 * dst, const uae_char *src); uae_u32 strncpyha (uae_u32 dst, const uae_char *src, int size); uae_u32 addmem (uae_u32 * dst, const uae_char *src, int len); #define SB struct socketbase *sb extern void bsdsocklib_seterrno (SB, int); extern void bsdsocklib_setherrno (SB, int); extern void sockmsg (unsigned int, WPARAM, LPARAM); extern void sockabort (SB); extern void addtosigqueue (SB, int); extern void removefromsigqueue (SB); extern void sigsockettasks (void); extern void locksigqueue (void); extern void unlocksigqueue (void); extern BOOL checksd(TrapContext*, SB, int sd); extern void setsd(TrapContext*, SB, int , SOCKET_TYPE); extern int getsd (TrapContext*, SB, SOCKET_TYPE); extern SOCKET_TYPE getsock (SB, int); extern void releasesock (TrapContext*, SB, int); extern void waitsig (TrapContext *context, SB); extern void cancelsig (TrapContext *context, SB); extern int host_sbinit (TrapContext*, SB); extern void host_sbcleanup (SB); extern void host_sbreset (void); extern void host_closesocketquick (SOCKET_TYPE); extern int host_dup2socket (TrapContext *, SB, int, int); extern int host_socket (TrapContext *, SB, int, int, int); extern uae_u32 host_bind (TrapContext *, SB, uae_u32, uae_u32, uae_u32); extern uae_u32 host_listen (TrapContext *, SB, uae_u32, uae_u32); extern void host_accept (TrapContext *, SB, uae_u32, uae_u32, uae_u32); extern void host_sendto (TrapContext *, SB, uae_u32, uae_u32, uae_u32, uae_u32, uae_u32, uae_u32); extern void host_recvfrom (TrapContext *, SB, uae_u32, uae_u32, uae_u32, uae_u32, uae_u32, uae_u32); extern uae_u32 host_shutdown (SB, uae_u32, uae_u32); extern void host_setsockopt (SB, uae_u32, uae_u32, uae_u32, uae_u32, uae_u32); extern uae_u32 host_getsockopt (SB, uae_u32, uae_u32, uae_u32, uae_u32, uae_u32); extern uae_u32 host_getsockname (SB, uae_u32, uae_u32, uae_u32); extern uae_u32 host_getpeername (SB, uae_u32, uae_u32, uae_u32); extern uae_u32 host_IoctlSocket (TrapContext *, SB, uae_u32, uae_u32, uae_u32); extern uae_u32 host_shutdown (SB, uae_u32, uae_u32); extern int host_CloseSocket (TrapContext *, SB, int); extern void host_connect (TrapContext *, SB, uae_u32, uae_u32, uae_u32); extern void host_WaitSelect (TrapContext *, SB, uae_u32, uae_u32, uae_u32, uae_u32, uae_u32, uae_u32); extern uae_u32 host_SetSocketSignals (void); extern uae_u32 host_getdtablesize (void); extern uae_u32 host_ObtainSocket (void); extern uae_u32 host_ReleaseSocket (void); extern uae_u32 host_ReleaseCopyOfSocket (void); extern uae_u32 host_Inet_NtoA (TrapContext *context, SB, uae_u32); extern uae_u32 host_inet_addr (uae_u32); extern uae_u32 host_Inet_LnaOf (void); extern uae_u32 host_Inet_NetOf (void); extern uae_u32 host_Inet_MakeAddr (void); extern uae_u32 host_inet_network (void); extern void host_gethostbynameaddr (TrapContext *, SB, uae_u32, uae_u32, long); extern uae_u32 host_getnetbyname (void); extern uae_u32 host_getnetbyaddr (void); extern void host_getservbynameport (TrapContext *, SB, uae_u32, uae_u32, uae_u32); extern void host_getprotobyname (TrapContext *, SB, uae_u32); extern void host_getprotobynumber (TrapContext *, SB, uae_u32); extern uae_u32 host_vsyslog (void); extern uae_u32 host_Dup2Socket (void); extern uae_u32 host_gethostname (uae_u32, uae_u32); extern uae_u32 callfdcallback (TrapContext *context, SB, uae_u32 fd, uae_u32 action); extern uaecptr bsdlib_startup (uaecptr); extern void bsdlib_install (void); extern void bsdlib_reset (void); fs-uae-2.2.3+dfsg/src/include/genblitter.h0000644000175000017500000000041212162366655020574 0ustar glaubitzglaubitz /* * UAE - The Un*x Amiga Emulator * * Optimized blitter minterm function generator * * Copyright 1995,1996 Bernd Schmidt * Copyright 1996 Alessandro Bissacco */ struct blitop { const char *s; int used; }; extern struct blitop blitops[256]; fs-uae-2.2.3+dfsg/src/include/epsonprinter.h0000644000175000017500000000367512162366655021203 0ustar glaubitzglaubitz/* * Copyright (C) 2002-2004 The DOSBox Team * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Library General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #define Bit16u uae_u16 #define Bit16s uae_s16 #define Bit8u uae_u8 #define Real64 float #define Bitu uae_u32 #define Bits uae_s32 #define Bit32u uae_u32 #if !defined __PRINTER_H #define __PRINTER_H #ifndef WINFONT s#include "ft2build.h" #include FT_FREETYPE_H #endif #if defined (WIN32) #include #include #endif #define STYLE_PROP 0x01 #define STYLE_CONDENSED 0x02 #define STYLE_BOLD 0x04 #define STYLE_DOUBLESTRIKE 0x08 #define STYLE_DOUBLEWIDTH 0x10 #define STYLE_ITALICS 0x20 #define STYLE_UNDERLINE 0x40 #define STYLE_SUPERSCRIPT 0x80 #define STYLE_SUBSCRIPT 0x100 #define STYLE_STRIKETHROUGH 0x200 #define STYLE_OVERSCORE 0x400 #define STYLE_DOUBLEWIDTHONELINE 0x800 #define STYLE_DOUBLEHEIGHT 0x1000 #define SCORE_NONE 0x00 #define SCORE_SINGLE 0x01 #define SCORE_DOUBLE 0x02 #define SCORE_SINGLEBROKEN 0x05 #define SCORE_DOUBLEBROKEN 0x06 #define QUALITY_DRAFT 0x01 #define QUALITY_LQ 0x02 #define JUST_LEFT 0 #define JUST_CENTER 1 #define JUST_RIGHT 2 #define JUST_FULL 3 enum Typeface { roman = 0, sansserif, courier, prestige, script, ocrb, ocra, orator, orators, scriptc, romant, sansserifh, svbusaba = 30, svjittra = 31 }; #endif fs-uae-2.2.3+dfsg/src/include/cia.h0000644000175000017500000000146112162366655017176 0ustar glaubitzglaubitz /* * UAE - The Un*x Amiga Emulator * * CIA chip support * * (c) 1995 Bernd Schmidt */ extern void CIA_reset (void); extern void CIA_vsync_prehandler (void); extern void CIA_hsync_prehandler (void); extern void CIA_vsync_posthandler (bool); extern void CIA_hsync_posthandler (bool); extern void CIA_handler (void); extern void diskindex_handler (void); extern void cia_parallelack (void); extern void cia_diskindex (void); extern void dumpcia (void); extern void rethink_cias (void); extern int resetwarning_do (int); extern void cia_set_overlay (bool); extern int parallel_direct_write_data (uae_u8, uae_u8); extern int parallel_direct_read_data (uae_u8*); extern int parallel_direct_write_status (uae_u8, uae_u8); extern int parallel_direct_read_status (uae_u8*); extern void rtc_hardreset (void); fs-uae-2.2.3+dfsg/src/include/moduleripper.h0000644000175000017500000000015112162366655021144 0ustar glaubitzglaubitz extern "C" int prowizard_search (unsigned char *in_data, int in_size); extern void moduleripper (void); fs-uae-2.2.3+dfsg/src/include/scsidev.h0000644000175000017500000000116412162366655020102 0ustar glaubitzglaubitz /* * UAE - The Un*x Amiga Emulator * * a SCSI device * * (c) 1995 Bernd Schmidt (hardfile.c) * (c) 1999 Patrick Ohly * (c) 2001-2005 Toni Wilen */ uaecptr scsidev_startup (uaecptr resaddr); void scsidev_install (void); void scsidev_reset (void); void scsidev_start_threads (void); int scsi_do_disk_change (int unitnum, int insert, int *pollmode); int scsi_do_disk_device_change (void); uae_u32 scsi_get_cd_drive_mask (void); uae_u32 scsi_get_cd_drive_media_mask (void); extern int log_scsi; #ifdef _WIN32 #define UAESCSI_CDEMU 0 #define UAESCSI_SPTI 1 #define UAESCSI_SPTISCAN 2 #define UAESCSI_LAST 2 #endiffs-uae-2.2.3+dfsg/src/include/autoconf.h0000644000175000017500000000634712162366655020270 0ustar glaubitzglaubitz /* * UAE - The Un*x Amiga Emulator * * Autoconfig device support * * (c) 1996 Ed Hanway */ #define RTAREA_DEFAULT 0xf00000 #define RTAREA_BACKUP 0xef0000 #define RTAREA_SIZE 0x10000 #define RTAREA_TRAPS 0x2000 #define RTAREA_RTG 0x3000 #define RTAREA_FSBOARD 0xFFEC #define RTAREA_INT 0xFFEB extern uae_u32 addr (int); extern void db (uae_u8); extern void dw (uae_u16); extern void dl (uae_u32); extern uae_u32 ds_ansi (const uae_char*); extern uae_u32 ds (const TCHAR*); extern uae_u32 ds_bstr_ansi (const uae_char*); extern uae_u8 dbg (uaecptr); 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 void align (int); extern volatile int uae_int_requested; extern void set_uae_int_flag (void); #define RTS 0x4e75 #define RTE 0x4e73 extern uaecptr EXPANSION_explibname, EXPANSION_doslibname, EXPANSION_uaeversion; extern uaecptr EXPANSION_explibbase, EXPANSION_uaedevname, EXPANSION_haveV36; extern uaecptr EXPANSION_bootcode, EXPANSION_nullfunc; extern uaecptr ROM_filesys_resname, ROM_filesys_resid; extern uaecptr ROM_filesys_diagentry; extern uaecptr ROM_hardfile_resname, ROM_hardfile_resid; extern uaecptr ROM_hardfile_init; extern uaecptr filesys_initcode; extern int is_hardfile (int unit_no); extern int nr_units (void); extern int nr_directory_units (struct uae_prefs*); extern uaecptr need_uae_boot_rom (void); struct mountedinfo { uae_u64 size; bool ismounted; bool ismedia; int nrcyls; }; extern int add_filesys_unitconfig (struct uae_prefs *p, int index, TCHAR *error); extern int get_filesys_unitconfig (struct uae_prefs *p, int index, struct mountedinfo*); extern int kill_filesys_unitconfig (struct uae_prefs *p, int nr); extern int move_filesys_unitconfig (struct uae_prefs *p, int nr, int to); extern TCHAR *validatedevicename (TCHAR *s); extern TCHAR *validatevolumename (TCHAR *s); int filesys_insert (int nr, TCHAR *volume, const TCHAR *rootdir, bool readonly, int flags); int filesys_eject (int nr); int filesys_media_change (const TCHAR *rootdir, int inserted, struct uaedev_config_info *uci); extern TCHAR *filesys_createvolname (const TCHAR *volname, const TCHAR *rootdir, const TCHAR *def); extern int target_get_volume_name (struct uaedev_mount_info *mtinf, const TCHAR *volumepath, TCHAR *volumename, int size, bool inserted, bool fullcheck); extern int sprintf_filesys_unit (TCHAR *buffer, int num); extern void filesys_reset (void); extern void filesys_cleanup (void); extern void filesys_prepare_reset (void); extern void filesys_start_threads (void); extern void filesys_flush_cache (void); extern void filesys_free_handles (void); extern void filesys_vsync (void); #ifdef FSUAE extern void filesys_hsync (void); #endif extern void filesys_install (void); extern void filesys_install_code (void); extern void filesys_store_devinfo (uae_u8 *); extern void hardfile_install (void); extern void hardfile_reset (void); extern void emulib_install (void); extern void expansion_init (void); extern void expansion_cleanup (void); extern void expansion_clear (void); extern void uaegfx_install_code (uaecptr); extern uae_u32 emulib_target_getcpurate (uae_u32, uae_u32*); fs-uae-2.2.3+dfsg/src/include/statusline.h0000644000175000017500000000117712162366655020641 0ustar glaubitzglaubitz #define TD_PADX 4 #define TD_PADY 2 #define TD_WIDTH 30 #define TD_LED_WIDTH 24 #define TD_LED_HEIGHT 4 #define TD_RIGHT 1 #define TD_BOTTOM 2 static int td_pos = (TD_RIGHT|TD_BOTTOM); #define TD_NUM_WIDTH 7 #define TD_NUM_HEIGHT 7 #define TD_TOTAL_HEIGHT (TD_PADY * 2 + TD_NUM_HEIGHT) #define NUMBERS_NUM 16 #define TD_BORDER 0x333333 #define STATUSLINE_CHIPSET 1 #define STATUSLINE_RTG 2 #define STATUSLINE_TARGET 0x80 extern void draw_status_line_single (uae_u8 *buf, int bpp, int y, int totalwidth, uae_u32 *rc, uae_u32 *gc, uae_u32 *bc, uae_u32 *alpha); extern void statusline_getpos (int *x, int *y, int width, int height); fs-uae-2.2.3+dfsg/src/include/a2065.h0000644000175000017500000000030112162366655017167 0ustar glaubitzglaubitz #ifdef A2065 extern void a2065_init (void); extern void a2065_free (void); extern void a2065_reset (void); extern void a2065_hsync_handler (void); extern void rethink_a2065 (void); #endif fs-uae-2.2.3+dfsg/src/include/enforcer.h0000644000175000017500000000021012162366655020234 0ustar glaubitzglaubitz#ifndef UAE__ENFORCER_H #define UAE__ENFORCER_H int enforcer_enable(int); int enforcer_disable(void); extern int enforcermode; #endiffs-uae-2.2.3+dfsg/src/include/keybuf.h0000644000175000017500000000063412162366655017730 0ustar glaubitzglaubitz /* * UAE - The Un*x Amiga Emulator * * Keyboard buffer. Not really needed for X, but for SVGAlib and possibly * Mac and DOS ports. * * (c) 1996 Bernd Schmidt */ extern int get_next_key (void); extern int keys_available (void); extern int record_key (int); extern int record_key_direct (int); extern void keybuf_init (void); extern int getcapslockstate (void); extern void setcapslockstate (int); fs-uae-2.2.3+dfsg/src/include/osemu.h0000644000175000017500000000050512162366655017570 0ustar glaubitzglaubitz /* * UAE - The Un*x Amiga Emulator * * OS emulation prototypes * * Copyright 1996 Bernd Schmidt */ STATIC_INLINE char *raddr(uaecptr p) { return p == 0 ? NULL : (char *)get_real_address (p); } extern void gfxlib_install(void); /* graphics.library */ extern int GFX_WritePixel(uaecptr rp, int x, int y); fs-uae-2.2.3+dfsg/src/include/newcpu.h0000644000175000017500000002646112162366655017752 0ustar glaubitzglaubitz/* * UAE - The Un*x Amiga Emulator * * MC68000 emulation * * Copyright 1995 Bernd Schmidt */ #include "readcpu.h" #include "machdep/m68k.h" #include "events.h" #ifndef SET_CFLG #define SET_CFLG(x) (CFLG() = (x)) #define SET_NFLG(x) (NFLG() = (x)) #define SET_VFLG(x) (VFLG() = (x)) #define SET_ZFLG(x) (ZFLG() = (x)) #define SET_XFLG(x) (XFLG() = (x)) #define GET_CFLG() CFLG() #define GET_NFLG() NFLG() #define GET_VFLG() VFLG() #define GET_ZFLG() ZFLG() #define GET_XFLG() XFLG() #define CLEAR_CZNV() do { \ SET_CFLG (0); \ SET_ZFLG (0); \ SET_NFLG (0); \ SET_VFLG (0); \ } while (0) #define COPY_CARRY() (SET_XFLG (GET_CFLG ())) #endif extern const int areg_byteinc[]; extern const int imm8_table[]; extern int movem_index1[256]; extern int movem_index2[256]; extern int movem_next[256]; #ifdef FPUEMU extern int fpp_movem_index1[256]; extern int fpp_movem_index2[256]; extern int fpp_movem_next[256]; #endif typedef uae_u32 REGPARAM3 cpuop_func (uae_u32) REGPARAM; typedef void REGPARAM3 cpuop_func_ce (uae_u32) REGPARAM; struct cputbl { cpuop_func *handler; uae_u16 opcode; }; #ifdef JIT typedef uae_u32 REGPARAM3 compop_func (uae_u32) REGPARAM; struct comptbl { compop_func *handler; uae_u32 opcode; int specific; }; #endif extern uae_u32 REGPARAM3 op_illg (uae_u32) REGPARAM; extern void REGPARAM3 op_unimpl (void) REGPARAM; typedef uae_u8 flagtype; #ifdef FPUEMU /* You can set this to long double to be more accurate. However, the resulting alignment issues will cost a lot of performance in some apps */ #define USE_LONG_DOUBLE 0 #if USE_LONG_DOUBLE typedef long double fptype; #define LDPTR tbyte ptr #else typedef double fptype; #define LDPTR qword ptr #endif #endif #define MAX68020CYCLES 4 #define CPU_PIPELINE_MAX 3 #define CPU000_MEM_CYCLE 4 #define CPU000_CLOCK_MULT 2 #define CPU020_MEM_CYCLE 3 #define CPU020_CLOCK_MULT 4 #define CACHELINES020 64 struct cache020 { uae_u32 data; uae_u32 tag; bool valid; }; #define CACHELINES030 16 struct cache030 { uae_u32 data[4]; bool valid[4]; uae_u32 tag; }; #define CACHESETS040 64 #define CACHELINES040 4 struct cache040 { uae_u32 data[CACHELINES040][4]; bool valid[CACHELINES040]; uae_u32 tag[CACHELINES040]; }; struct regstruct { uae_u32 regs[16]; uae_u32 pc; uae_u8 *pc_p; uae_u8 *pc_oldp; uae_u32 instruction_pc; uae_u16 irc, ir; uae_u32 spcflags; uaecptr usp, isp, msp; uae_u16 sr; flagtype t1; flagtype t0; flagtype s; flagtype m; flagtype x; flagtype stopped; int exception; int intmask; int ipl, ipl_pin; uae_u32 vbr, sfc, dfc; #ifdef FPUEMU fptype fp[8]; fptype fp_result; uae_u32 fpcr, fpsr, fpiar; uae_u32 fpsr_highbyte; #endif #ifndef CPUEMU_68000_ONLY uae_u32 cacr, caar; uae_u32 itt0, itt1, dtt0, dtt1; uae_u32 tcr, mmusr, urp, srp, buscr; uae_u32 mmu_fslw, mmu_fault_addr; uae_u16 mmu_ssw; uae_u32 wb3_data; uae_u16 wb3_status; int mmu_enabled; int mmu_pagesize_8k; #endif uae_u32 pcr; uae_u32 address_space_mask; uae_u8 panic; uae_u32 panic_pc, panic_addr; uae_u16 prefetch020[CPU_PIPELINE_MAX]; uae_u32 prefetch020addr; uae_u32 cacheholdingdata020; uae_u32 cacheholdingaddr020; int ce020memcycles; int ce020tmpcycles; }; extern struct regstruct regs; #define MAX_CPUTRACESIZE 128 struct cputracememory { uae_u32 addr; uae_u32 data; int mode; }; struct cputracestruct { uae_u32 regs[16]; uae_u32 usp, isp, pc; uae_u16 ir, irc, sr, opcode; int intmask, stopped, state; uae_u32 msp, vbr; uae_u32 cacr, caar; uae_u16 prefetch020[CPU_PIPELINE_MAX]; uae_u32 prefetch020addr; uae_u32 cacheholdingdata020; uae_u32 cacheholdingaddr020; struct cache020 caches020[CACHELINES020]; uae_u32 startcycles; int needendcycles; int memoryoffset; int cyclecounter, cyclecounter_pre, cyclecounter_post; int readcounter, writecounter; struct cputracememory ctm[MAX_CPUTRACESIZE]; }; STATIC_INLINE uae_u32 munge24 (uae_u32 x) { return x & regs.address_space_mask; } extern int mmu_enabled, mmu_triggered; extern int cpu_cycles; extern int cpucycleunit; STATIC_INLINE void set_special (uae_u32 x) { regs.spcflags |= x; cycles_do_special (); } STATIC_INLINE void unset_special (uae_u32 x) { regs.spcflags &= ~x; } #define m68k_dreg(r,num) ((r).regs[(num)]) #define m68k_areg(r,num) (((r).regs + 8)[(num)]) STATIC_INLINE void m68k_setpc (uaecptr newpc) { regs.pc_p = regs.pc_oldp = get_real_address (newpc); regs.instruction_pc = regs.pc = newpc; } STATIC_INLINE uaecptr m68k_getpc (void) { return (uaecptr)(regs.pc + ((uae_u8*)regs.pc_p - (uae_u8*)regs.pc_oldp)); } #define M68K_GETPC m68k_getpc() STATIC_INLINE uaecptr m68k_getpc_p (uae_u8 *p) { return (uaecptr)(regs.pc + ((uae_u8*)p - (uae_u8*)regs.pc_oldp)); } STATIC_INLINE void m68k_incpc (int o) { regs.pc_p += o; } STATIC_INLINE void m68k_setpc_mmu (uaecptr newpc) { regs.instruction_pc = regs.pc = newpc; regs.pc_p = regs.pc_oldp = 0; } STATIC_INLINE void m68k_setpci (uaecptr newpc) { regs.instruction_pc = regs.pc = newpc; } STATIC_INLINE uaecptr m68k_getpci (void) { return regs.pc; } STATIC_INLINE void m68k_incpci (int o) { regs.pc += o; } STATIC_INLINE void m68k_do_rts (void) { uae_u32 newpc = get_long (m68k_areg (regs, 7)); m68k_setpc (newpc); m68k_areg (regs, 7) += 4; } STATIC_INLINE void m68k_do_bsr (uaecptr oldpc, uae_s32 offset) { m68k_areg (regs, 7) -= 4; put_long (m68k_areg (regs, 7), oldpc); m68k_incpc (offset); } STATIC_INLINE uae_u32 get_ibyte (int o) { return do_get_mem_byte((uae_u8 *)((regs).pc_p + (o) + 1)); } STATIC_INLINE uae_u32 get_iword (int o) { return do_get_mem_word((uae_u16 *)((regs).pc_p + (o))); } STATIC_INLINE uae_u32 get_ilong (int o) { return do_get_mem_long((uae_u32 *)((regs).pc_p + (o))); } #define get_iwordi(o) get_wordi(o) #define get_ilongi(o) get_longi(o) /* These are only used by the 68020/68881 code, and therefore don't * need to handle prefetch. */ STATIC_INLINE uae_u32 next_ibyte (void) { uae_u32 r = get_ibyte (0); m68k_incpc (2); return r; } STATIC_INLINE uae_u32 next_iword (void) { uae_u32 r = get_iword (0); m68k_incpc (2); return r; } STATIC_INLINE uae_u32 next_iwordi (void) { uae_u32 r = get_iwordi (m68k_getpci ()); m68k_incpc (2); return r; } STATIC_INLINE uae_u32 next_ilong (void) { uae_u32 r = get_ilong (0); m68k_incpc (4); return r; } STATIC_INLINE uae_u32 next_ilongi (void) { uae_u32 r = get_ilongi (m68k_getpci ()); m68k_incpc (4); return r; } extern uae_u32 (*x_prefetch)(int); extern uae_u32 (*x_prefetch_long)(int); extern uae_u32 (*x_get_byte)(uaecptr addr); extern uae_u32 (*x_get_word)(uaecptr addr); extern uae_u32 (*x_get_long)(uaecptr addr); extern void (*x_put_byte)(uaecptr addr, uae_u32 v); extern void (*x_put_word)(uaecptr addr, uae_u32 v); extern void (*x_put_long)(uaecptr addr, uae_u32 v); extern uae_u32 (*x_next_iword)(void); extern uae_u32 (*x_next_ilong)(void); extern uae_u32 (*x_get_ilong)(int); extern uae_u32 (*x_get_iword)(int); extern uae_u32 (*x_get_ibyte)(int); extern void (*x_do_cycles)(unsigned long); extern void (*x_do_cycles_pre)(unsigned long); extern void (*x_do_cycles_post)(unsigned long, uae_u32); extern uae_u32 REGPARAM3 x_get_disp_ea_020 (uae_u32 base, uae_u32 dp) REGPARAM; extern uae_u32 REGPARAM3 x_get_disp_ea_ce020 (uae_u32 base, uae_u32 dp) REGPARAM; extern uae_u32 REGPARAM3 x_get_bitfield (uae_u32 src, uae_u32 bdata[2], uae_s32 offset, int width) REGPARAM; extern void REGPARAM3 x_put_bitfield (uae_u32 dst, uae_u32 bdata[2], uae_u32 val, uae_s32 offset, int width) REGPARAM; extern void m68k_setstopped (void); extern void m68k_resumestopped (void); extern uae_u32 REGPARAM3 get_disp_ea_020 (uae_u32 base, uae_u32 dp) REGPARAM; extern uae_u32 REGPARAM3 get_bitfield (uae_u32 src, uae_u32 bdata[2], uae_s32 offset, int width) REGPARAM; extern void REGPARAM3 put_bitfield (uae_u32 dst, uae_u32 bdata[2], uae_u32 val, uae_s32 offset, int width) REGPARAM; extern void m68k_disasm_ea (void *f, uaecptr addr, uaecptr *nextpc, int cnt, uae_u32 *seaddr, uae_u32 *deaddr); extern void m68k_disasm (void *f, uaecptr addr, uaecptr *nextpc, int cnt); extern void m68k_disasm_2 (TCHAR *buf, int bufsize, uaecptr addr, uaecptr *nextpc, int cnt, uae_u32 *seaddr, uae_u32 *deaddr, int safemode); extern int get_cpu_model (void); extern void REGPARAM3 MakeSR (void) REGPARAM; extern void REGPARAM3 MakeFromSR (void) REGPARAM; extern void REGPARAM3 Exception (int) REGPARAM; extern void NMI (void); extern void NMI_delayed (void); extern void prepare_interrupt (uae_u32); extern void doint (void); extern void dump_counts (void); extern int m68k_move2c (int, uae_u32 *); extern int m68k_movec2 (int, uae_u32 *); extern void m68k_divl (uae_u32, uae_u32, uae_u16); extern void m68k_mull (uae_u32, uae_u32, uae_u16); extern void init_m68k (void); extern void init_m68k_full (void); extern void m68k_go (int); extern void m68k_dumpstate (void *, uaecptr *); extern void m68k_disasm (void *, uaecptr, uaecptr *, int); extern void sm68k_disasm (TCHAR*, TCHAR*, uaecptr addr, uaecptr *nextpc); extern void m68k_reset (int); extern int getDivu68kCycles (uae_u32 dividend, uae_u16 divisor); extern int getDivs68kCycles (uae_s32 dividend, uae_s16 divisor); extern void m68k_do_rte (void); extern void protect_roms (bool); extern void unprotect_maprom (void); extern void mmu_op (uae_u32, uae_u32); extern void mmu_op30 (uaecptr, uae_u32, uae_u16, uaecptr); extern void fpuop_arithmetic(uae_u32, uae_u16); extern void fpuop_dbcc(uae_u32, uae_u16); extern void fpuop_scc(uae_u32, uae_u16); extern void fpuop_trapcc(uae_u32, uaecptr, uae_u16); extern void fpuop_bcc(uae_u32, uaecptr, uae_u32); extern void fpuop_save(uae_u32); extern void fpuop_restore(uae_u32); extern uae_u32 fpp_get_fpsr (void); extern void fpu_reset (void); extern void fpux_save (int*); extern void fpux_restore (int*); extern void exception3 (uae_u32 opcode, uaecptr addr); extern void exception3i (uae_u32 opcode, uaecptr addr); extern void exception3 (uae_u32 opcode, uaecptr addr, int w, int i, uaecptr pc); extern void exception2 (uaecptr addr); extern void cpureset (void); extern void fill_prefetch (void); #define CPU_OP_NAME(a) op ## a /* 68060 */ extern const struct cputbl op_smalltbl_0_ff[]; extern const struct cputbl op_smalltbl_22_ff[]; // CE /* 68040 */ extern const struct cputbl op_smalltbl_1_ff[]; extern const struct cputbl op_smalltbl_23_ff[]; // CE extern const struct cputbl op_smalltbl_31_ff[]; // MMU /* 68030 */ extern const struct cputbl op_smalltbl_2_ff[]; extern const struct cputbl op_smalltbl_24_ff[]; // CE /* 68020 */ extern const struct cputbl op_smalltbl_3_ff[]; extern const struct cputbl op_smalltbl_20_ff[]; // prefetch extern const struct cputbl op_smalltbl_21_ff[]; // CE /* 68010 */ extern const struct cputbl op_smalltbl_4_ff[]; /* 68000 */ extern const struct cputbl op_smalltbl_5_ff[]; extern const struct cputbl op_smalltbl_11_ff[]; // prefetch extern const struct cputbl op_smalltbl_12_ff[]; // CE extern cpuop_func *cpufunctbl[65536] ASM_SYM_FOR_FUNC ("cpufunctbl"); #ifdef JIT extern void flush_icache (uaecptr, int); extern void compemu_reset (void); extern bool check_prefs_changed_comp (void); #else #define flush_icache(uaecptr, int) do {} while (0) #endif extern void flush_dcache (uaecptr, int); extern void flush_mmu (uaecptr, int); extern int movec_illg (int regno); extern uae_u32 val_move2c (int regno); extern void val_move2c2 (int regno, uae_u32 val); struct cpum2c { int regno; TCHAR *regname; }; extern struct cpum2c m2cregs[]; extern bool is_cpu_tracer (void); extern bool set_cpu_tracer (bool force); extern bool can_cpu_tracer (void);fs-uae-2.2.3+dfsg/src/include/isofs.h0000755000175000017500000002453412162366655017576 0ustar glaubitzglaubitz #ifndef _ISOFS_FS_H #define _ISOFS_FS_H #ifdef WINDOWS typedef int gid_t; typedef int uid_t; #endif #define ISO_SYSTEM_ID_CDTV "CDTV" /* * The isofs filesystem constants/structures */ /* This part borrowed from the bsd386 isofs */ #define ISODCL(from, to) (to - from + 1) struct iso_volume_descriptor { char type[ISODCL(1,1)]; /* 711 */ char id[ISODCL(2,6)]; char version[ISODCL(7,7)]; char data[ISODCL(8,2048)]; }; /* volume descriptor types */ #define ISO_VD_PRIMARY 1 #define ISO_VD_SUPPLEMENTARY 2 #define ISO_VD_END 255 #define ISO_STANDARD_ID "CD001" struct iso_primary_descriptor { char type [ISODCL ( 1, 1)]; /* 711 */ char id [ISODCL ( 2, 6)]; char version [ISODCL ( 7, 7)]; /* 711 */ char unused1 [ISODCL ( 8, 8)]; char system_id [ISODCL ( 9, 40)]; /* achars */ char volume_id [ISODCL ( 41, 72)]; /* dchars */ char unused2 [ISODCL ( 73, 80)]; char volume_space_size [ISODCL ( 81, 88)]; /* 733 */ char unused3 [ISODCL ( 89, 120)]; char volume_set_size [ISODCL (121, 124)]; /* 723 */ char volume_sequence_number [ISODCL (125, 128)]; /* 723 */ char logical_block_size [ISODCL (129, 132)]; /* 723 */ char path_table_size [ISODCL (133, 140)]; /* 733 */ char type_l_path_table [ISODCL (141, 144)]; /* 731 */ char opt_type_l_path_table [ISODCL (145, 148)]; /* 731 */ char type_m_path_table [ISODCL (149, 152)]; /* 732 */ char opt_type_m_path_table [ISODCL (153, 156)]; /* 732 */ char root_directory_record [ISODCL (157, 190)]; /* 9.1 */ char volume_set_id [ISODCL (191, 318)]; /* dchars */ char publisher_id [ISODCL (319, 446)]; /* achars */ char preparer_id [ISODCL (447, 574)]; /* achars */ char application_id [ISODCL (575, 702)]; /* achars */ char copyright_file_id [ISODCL (703, 739)]; /* 7.5 dchars */ char abstract_file_id [ISODCL (740, 776)]; /* 7.5 dchars */ char bibliographic_file_id [ISODCL (777, 813)]; /* 7.5 dchars */ char creation_date [ISODCL (814, 830)]; /* 8.4.26.1 */ char modification_date [ISODCL (831, 847)]; /* 8.4.26.1 */ char expiration_date [ISODCL (848, 864)]; /* 8.4.26.1 */ char effective_date [ISODCL (865, 881)]; /* 8.4.26.1 */ char file_structure_version [ISODCL (882, 882)]; /* 711 */ char unused4 [ISODCL (883, 883)]; char application_data [ISODCL (884, 1395)]; char unused5 [ISODCL (1396, 2048)]; }; /* Almost the same as the primary descriptor but two fields are specified */ struct iso_supplementary_descriptor { char type [ISODCL ( 1, 1)]; /* 711 */ char id [ISODCL ( 2, 6)]; char version [ISODCL ( 7, 7)]; /* 711 */ char flags [ISODCL ( 8, 8)]; /* 853 */ char system_id [ISODCL ( 9, 40)]; /* achars */ char volume_id [ISODCL ( 41, 72)]; /* dchars */ char unused2 [ISODCL ( 73, 80)]; char volume_space_size [ISODCL ( 81, 88)]; /* 733 */ char escape [ISODCL ( 89, 120)]; /* 856 */ char volume_set_size [ISODCL (121, 124)]; /* 723 */ char volume_sequence_number [ISODCL (125, 128)]; /* 723 */ char logical_block_size [ISODCL (129, 132)]; /* 723 */ char path_table_size [ISODCL (133, 140)]; /* 733 */ char type_l_path_table [ISODCL (141, 144)]; /* 731 */ char opt_type_l_path_table [ISODCL (145, 148)]; /* 731 */ char type_m_path_table [ISODCL (149, 152)]; /* 732 */ char opt_type_m_path_table [ISODCL (153, 156)]; /* 732 */ char root_directory_record [ISODCL (157, 190)]; /* 9.1 */ char volume_set_id [ISODCL (191, 318)]; /* dchars */ char publisher_id [ISODCL (319, 446)]; /* achars */ char preparer_id [ISODCL (447, 574)]; /* achars */ char application_id [ISODCL (575, 702)]; /* achars */ char copyright_file_id [ISODCL (703, 739)]; /* 7.5 dchars */ char abstract_file_id [ISODCL (740, 776)]; /* 7.5 dchars */ char bibliographic_file_id [ISODCL (777, 813)]; /* 7.5 dchars */ char creation_date [ISODCL (814, 830)]; /* 8.4.26.1 */ char modification_date [ISODCL (831, 847)]; /* 8.4.26.1 */ char expiration_date [ISODCL (848, 864)]; /* 8.4.26.1 */ char effective_date [ISODCL (865, 881)]; /* 8.4.26.1 */ char file_structure_version [ISODCL (882, 882)]; /* 711 */ char unused4 [ISODCL (883, 883)]; char application_data [ISODCL (884, 1395)]; char unused5 [ISODCL (1396, 2048)]; }; #define HS_STANDARD_ID "CDROM" struct hs_volume_descriptor { char foo [ISODCL ( 1, 8)]; /* 733 */ char type [ISODCL ( 9, 9)]; /* 711 */ char id [ISODCL ( 10, 14)]; char version [ISODCL ( 15, 15)]; /* 711 */ char data[ISODCL(16,2048)]; }; struct hs_primary_descriptor { char foo [ISODCL ( 1, 8)]; /* 733 */ char type [ISODCL ( 9, 9)]; /* 711 */ char id [ISODCL ( 10, 14)]; char version [ISODCL ( 15, 15)]; /* 711 */ char unused1 [ISODCL ( 16, 16)]; /* 711 */ char system_id [ISODCL ( 17, 48)]; /* achars */ char volume_id [ISODCL ( 49, 80)]; /* dchars */ char unused2 [ISODCL ( 81, 88)]; /* 733 */ char volume_space_size [ISODCL ( 89, 96)]; /* 733 */ char unused3 [ISODCL ( 97, 128)]; /* 733 */ char volume_set_size [ISODCL (129, 132)]; /* 723 */ char volume_sequence_number [ISODCL (133, 136)]; /* 723 */ char logical_block_size [ISODCL (137, 140)]; /* 723 */ char path_table_size [ISODCL (141, 148)]; /* 733 */ char type_l_path_table [ISODCL (149, 152)]; /* 731 */ char unused4 [ISODCL (153, 180)]; /* 733 */ char root_directory_record [ISODCL (181, 214)]; /* 9.1 */ }; /* We use this to help us look up the parent inode numbers. */ # pragma pack (1) struct iso_path_table{ unsigned char name_len[2]; /* 721 */ char extent[4]; /* 731 */ char parent[2]; /* 721 */ char name[0]; }; # pragma pack () /* high sierra is identical to iso, except that the date is only 6 bytes, and there is an extra reserved byte after the flags */ # pragma pack (1) struct iso_directory_record { char length [ISODCL (1, 1)]; /* 711 */ char ext_attr_length [ISODCL (2, 2)]; /* 711 */ char extent [ISODCL (3, 10)]; /* 733 */ char size [ISODCL (11, 18)]; /* 733 */ char date [ISODCL (19, 25)]; /* 7 by 711 */ char flags [ISODCL (26, 26)]; char file_unit_size [ISODCL (27, 27)]; /* 711 */ char interleave [ISODCL (28, 28)]; /* 711 */ char volume_sequence_number [ISODCL (29, 32)]; /* 723 */ unsigned char name_len [ISODCL (33, 33)]; /* 711 */ char name [0]; }; # pragma pack () #define ISOFS_BLOCK_BITS 0 #define ISOFS_BLOCK_SIZE 2048 #define ISOFS_BUFFER_SIZE(INODE) ((INODE)->i_sb->s_blocksize) #define ISOFS_BUFFER_BITS(INODE) ((INODE)->i_sb->s_blocksize_bits) enum isofs_file_format { isofs_file_normal = 0, isofs_file_sparse = 1, isofs_file_compressed = 2, }; /* * iso fs inode data in memory */ struct iso_inode_info { unsigned long i_iget5_block; unsigned long i_iget5_offset; unsigned int i_first_extent; unsigned char i_file_format; unsigned char i_format_parm[3]; unsigned long i_next_section_block; unsigned long i_next_section_offset; off_t i_section_size; //struct inode vfs_inode; }; /* * iso9660 super-block data in memory */ struct isofs_sb_info { unsigned long s_ninodes; unsigned long s_nzones; unsigned long s_firstdatazone; unsigned long s_log_zone_size; unsigned long s_max_size; int s_rock_offset; /* offset of SUSP fields within SU area */ unsigned char s_joliet_level; unsigned char s_mapping; unsigned int s_high_sierra:1; unsigned int s_rock:2; unsigned int s_utf8:1; unsigned int s_cruft:1; /* Broken disks with high byte of length * containing junk */ unsigned int s_nocompress:1; unsigned int s_hide:1; unsigned int s_showassoc:1; unsigned int s_overriderockperm:1; unsigned int s_uid_set:1; unsigned int s_gid_set:1; mode_t s_fmode; mode_t s_dmode; gid_t s_gid; uid_t s_uid; //struct nls_table *s_nls_iocharset; /* Native language support table */ unsigned int s_cdtv:1; }; struct iso9660_options{ unsigned int rock:1; unsigned int joliet:1; unsigned int cruft:1; unsigned int hide:1; unsigned int showassoc:1; unsigned int nocompress:1; unsigned int overriderockperm:1; unsigned int uid_set:1; unsigned int gid_set:1; unsigned int utf8:1; unsigned char map; unsigned char check; unsigned int blocksize; mode_t fmode; mode_t dmode; gid_t gid; uid_t uid; char *iocharset; /* LVE */ uae_s32 session; uae_s32 sbsector; }; /* * These structs are used by the system-use-sharing protocol, in which the * Rock Ridge extensions are embedded. It is quite possible that other * extensions are present on the disk, and this is fine as long as they * all use SUSP */ # pragma pack (1) struct SU_SP_s { unsigned char magic[2]; unsigned char skip; }; struct SU_CE_s { char extent[8]; char offset[8]; char size[8]; }; struct SU_ER_s { unsigned char len_id; unsigned char len_des; unsigned char len_src; unsigned char ext_ver; char data[1]; }; struct RR_RR_s { char flags[1]; }; struct RR_PX_s { char mode[8]; char n_links[8]; char uid[8]; char gid[8]; }; struct RR_PN_s { char dev_high[8]; char dev_low[8]; }; struct SL_component { unsigned char flags; unsigned char len; char text[1]; }; struct RR_SL_s { unsigned char flags; struct SL_component link; }; struct RR_NM_s { unsigned char flags; char name[1]; }; struct RR_CL_s { char location[8]; }; struct RR_PL_s { char location[8]; }; struct stamp { char time[7]; }; struct RR_TF_s { char flags; struct stamp times[1]; /* Variable number of these beasts */ }; /* Linux-specific extension for transparent decompression */ struct RR_ZF_s { char algorithm[2]; char parms[2]; char real_size[8]; }; /* Amiga RR extension */ struct RR_AS_s { char flags; char data[1]; }; /* * These are the bits and their meanings for flags in the TF structure. */ #define TF_CREATE 1 #define TF_MODIFY 2 #define TF_ACCESS 4 #define TF_ATTRIBUTES 8 #define TF_BACKUP 16 #define TF_EXPIRATION 32 #define TF_EFFECTIVE 64 #define TF_LONG_FORM 128 struct rock_ridge { char signature[2]; unsigned char len; unsigned char version; union { struct SU_SP_s SP; struct SU_CE_s CE; struct SU_ER_s ER; struct RR_RR_s RR; struct RR_PX_s PX; struct RR_PN_s PN; struct RR_SL_s SL; struct RR_NM_s NM; struct RR_CL_s CL; struct RR_PL_s PL; struct RR_TF_s TF; struct RR_ZF_s ZF; struct RR_AS_s AS; } u; }; #define RR_PX 1 /* POSIX attributes */ #define RR_PN 2 /* POSIX devices */ #define RR_SL 4 /* Symbolic link */ #define RR_NM 8 /* Alternate Name */ #define RR_CL 16 /* Child link */ #define RR_PL 32 /* Parent link */ #define RR_RE 64 /* Relocation directory */ #define RR_TF 128 /* Timestamps */ # pragma pack () #endif /* _ISOFS_FS_H */ fs-uae-2.2.3+dfsg/src/include/fdi2raw.h0000644000175000017500000000147212162366655020002 0ustar glaubitzglaubitz#ifndef __FDI2RAW_H #define __FDI2RAW_H //#include "types.h" #include typedef struct fdi FDI; #ifdef __cplusplus extern "C" { #endif extern int fdi2raw_loadtrack (FDI*, uae_u16 *mfmbuf, uae_u16 *tracktiming, int track, int *tracklength, int *indexoffset, int *multirev, int mfm); extern int fdi2raw_loadrevolution (FDI*, uae_u16 *mfmbuf, uae_u16 *tracktiming, int track, int *tracklength, int mfm); extern FDI *fdi2raw_header(struct zfile *f); extern void fdi2raw_header_free (FDI *); extern int fdi2raw_get_last_track(FDI *); extern int fdi2raw_get_num_sector (FDI *); extern int fdi2raw_get_last_head(FDI *); extern int fdi2raw_get_type (FDI *); extern int fdi2raw_get_bit_rate (FDI *); extern int fdi2raw_get_rotation (FDI *); extern int fdi2raw_get_write_protect (FDI *); #ifdef __cplusplus } #endif #endif fs-uae-2.2.3+dfsg/src/include/fsusage.h0000644000175000017500000000241012162366655020072 0ustar glaubitzglaubitz/* fsusage.h -- declarations for filesystem space usage info Copyright (C) 1991, 1992 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* Space usage statistics for a filesystem. Blocks are 512-byte. */ struct fs_usage { unsigned long fsu_blocks; /* Total blocks. */ unsigned long fsu_bfree; /* Free blocks available to superuser. */ unsigned long fsu_bavail; /* Free blocks available to non-superuser. */ unsigned long fsu_files; /* Total file nodes. */ unsigned long fsu_ffree; /* Free file nodes. */ }; int get_fs_usage (const TCHAR *path, const TCHAR *disk, struct fs_usage *fsp); fs-uae-2.2.3+dfsg/src/include/execlib.h0000644000175000017500000000166512162366655020063 0ustar glaubitzglaubitz /* * UAE - The Un*x Amiga Emulator * * Miscellaneous bits for exec emulation * * Copyright 1996 Bernd Schmidt */ #define CMD_INVALID 0 #define CMD_RESET 1 #define CMD_READ 2 #define CMD_WRITE 3 #define CMD_UPDATE 4 #define CMD_CLEAR 5 #define CMD_STOP 6 #define CMD_START 7 #define CMD_FLUSH 8 #define CMD_NONSTD 9 #define TD_READ64 24 #define TD_WRITE64 25 #define TD_SEEK64 26 #define TD_FORMAT64 27 #define NT_TASK 1 #define NT_DEVICE 3 #define NT_MSGPORT 4 #define NT_MESSAGE 5 #define NT_FREEMSG 6 #define NT_REPLYMSG 7 #define NT_RESOURCE 8 #define NT_LIBRARY 9 #define NT_SIGNALSEM 15 #define SIZEOF_LIBRARY 34 #ifndef MEMF_PUBLIC /* protection for AmigaDOS */ #define MEMF_PUBLIC 1 #define MEMF_CHIP 2 #define MEMF_FAST 4 #define MEMF_LOCAL 256 #define MEMF_24BITDMA 512 #define MEMF_CLEAR (1<<16) #define MEMF_LARGEST (1<<17) #define MEMF_REVERSE (1<<18) #define MEMF_TOTAL (1<<19) #endif fs-uae-2.2.3+dfsg/src/include/sysdeps.h0000644000175000017500000003435112162366655020140 0ustar glaubitzglaubitz#ifndef UAE_SYSDEPS_H #define UAE_SYSDEPS_H /* * UAE - The Un*x Amiga Emulator * * Try to include the right system headers and get other system-specific * stuff right & other collected kludges. * * If you think about modifying this, think twice. Some systems rely on * the exact order of the #include statements. That's also the reason * why everything gets included unconditionally regardless of whether * it's actually needed by the .c file. * * Copyright 1996, 1997 Bernd Schmidt */ #include using namespace std; #include #include #include #include #include #include #ifndef __STDC__ #ifndef _MSC_VER #error "Your compiler is not ANSI. Get a real one." #endif #endif #include #ifdef HAVE_SYS_TYPES_H #include #endif #ifdef HAVE_VALUES_H #include #endif #ifdef HAVE_STRINGS_H #include #endif #ifdef HAVE_STRING_H #include #endif #ifdef HAVE_UNISTD_H #include #endif #ifdef HAVE_FCNTL_H #include #endif #ifdef HAVE_UTIME_H #include #endif #ifdef HAVE_SYS_STAT_H #include #endif #if TIME_WITH_SYS_TIME # include # include #else # if HAVE_SYS_TIME_H # include # else # include # endif #endif #if HAVE_DIRENT_H # include #else # define dirent direct # if HAVE_SYS_NDIR_H # include # endif # if HAVE_SYS_DIR_H # include # endif # if HAVE_NDIR_H # include # endif #endif #ifdef HAVE_SYS_UTIME_H # include #endif #include #include #if EEXIST == ENOTEMPTY #define BROKEN_OS_PROBABLY_AIX #endif #ifdef __NeXT__ #define S_IRUSR S_IREAD #define S_IWUSR S_IWRITE #define S_IXUSR S_IEXEC #define S_ISDIR(val) (S_IFDIR & val) struct utimbuf { time_t actime; time_t modtime; }; #endif #ifdef FSUAE // REGPARAM2 is declared in defines.h #else #if defined(__GNUC__) && defined(AMIGA) /* gcc on the amiga need that __attribute((regparm)) must */ /* be defined in function prototypes as well as in */ /* function definitions ! */ #define REGPARAM2 REGPARAM #else /* not(GCC & AMIGA) */ #define REGPARAM2 #endif #endif /* sam: some definitions so that SAS/C can compile UAE */ #if defined(__SASC) && defined(AMIGA) #define REGPARAM2 #define REGPARAM #define S_IRUSR S_IREAD #define S_IWUSR S_IWRITE #define S_IXUSR S_IEXECUTE #define S_ISDIR(val) (S_IFDIR & val) #define mkdir(x,y) mkdir(x) #define truncate(x,y) 0 #define creat(x,y) open("T:creat",O_CREAT|O_TEMP|O_RDWR) /* sam: for zfile.c */ #define strcasecmp stricmp #define utime(file,time) 0 struct utimbuf { time_t actime; time_t modtime; }; #endif #if defined(WARPUP) #include "devices/timer.h" #include "osdep/posixemu.h" #define REGPARAM #define REGPARAM2 #define RETSIGTYPE #define USE_ZFILE #define strcasecmp stricmp #define memcpy q_memcpy #define memset q_memset #define strdup my_strdup #define random uaerand #define creat(x,y) open("T:creat",O_CREAT|O_RDWR|O_TRUNC,777) extern void* q_memset(void*,int,size_t); extern void* q_memcpy(void*,const void*,size_t); #endif #ifdef __DOS__ #include #include #endif /* Acorn specific stuff */ #ifdef ACORN #define S_IRUSR S_IREAD #define S_IWUSR S_IWRITE #define S_IXUSR S_IEXEC #define strcasecmp stricmp #endif #ifndef L_tmpnam #define L_tmpnam 128 /* ought to be safe */ #endif /* If char has more then 8 bits, good night. */ typedef unsigned char uae_u8; typedef signed char uae_s8; typedef char uae_char; typedef struct { uae_u8 RGB[3]; } RGB; #ifdef FSUAE typedef int8_t uae_s8; typedef int16_t uae_s16; typedef int32_t uae_s32; typedef uint8_t uae_u8; typedef uint16_t uae_u16; typedef uint32_t uae_u32; // this only works when long long is 64 bit, of course, but it is better // that uae_s64 is long long than long since %lld can be used on both // 32 and 64-bit. typedef signed long long uae_s64; typedef unsigned long long uae_u64; // FIXME: check exactly what this is used for typedef uae_u32 uaecptr; #else #if SIZEOF_SHORT == 2 typedef unsigned short uae_u16; typedef short uae_s16; #elif SIZEOF_INT == 2 typedef unsigned int uae_u16; typedef int uae_s16; #else #error No 2 byte type, you lose. #endif #if SIZEOF_INT == 4 typedef unsigned int uae_u32; typedef int uae_s32; #elif SIZEOF_LONG == 4 typedef unsigned long uae_u32; typedef long uae_s32; #else #error No 4 byte type, you lose. #endif typedef uae_u32 uaecptr; #undef uae_s64 #undef uae_u64 #if SIZEOF_LONG_LONG == 8 #define uae_s64 long long #define uae_u64 unsigned long long #define VAL64(a) (a ## LL) #define UVAL64(a) (a ## uLL) #elif SIZEOF___INT64 == 8 #define uae_s64 __int64 #define uae_u64 unsigned __int64 #define VAL64(a) (a) #define UVAL64(a) (a) #elif SIZEOF_LONG == 8 #define uae_s64 long; #define uae_u64 unsigned long; #define VAL64(a) (a ## l) #define UVAL64(a) (a ## ul) #endif #endif #ifdef HAVE_STRDUP #define my_strdup _tcsdup #else extern TCHAR *my_strdup (const TCHAR*s); #endif extern TCHAR *my_strdup_ansi (const char*); extern void my_trim (TCHAR*); extern TCHAR *my_strdup_trim (const TCHAR*); extern TCHAR *au (const char*); extern char *ua (const TCHAR*); extern TCHAR *aucp (const char *s, unsigned int cp); extern char *uacp (const TCHAR *s, unsigned int cp); extern TCHAR *au_fs (const char*); extern char *ua_fs (const TCHAR*, int); extern char *ua_copy (char *dst, int maxlen, const TCHAR *src); extern TCHAR *au_copy (TCHAR *dst, int maxlen, const char *src); extern char *ua_fs_copy (char *dst, int maxlen, const TCHAR *src, int defchar); extern TCHAR *au_fs_copy (TCHAR *dst, int maxlen, const char *src); extern char *uutf8 (const TCHAR *s); extern TCHAR *utf8u (const char *s); extern void unicode_init (void); extern void to_lower (TCHAR *s, int len); extern void to_upper (TCHAR *s, int len); /* We can only rely on GNU C getting enums right. Mickeysoft VSC++ is known * to have problems, and it's likely that other compilers choke too. */ #ifdef __GNUC__ #define ENUMDECL typedef enum #define ENUMNAME(name) name /* While we're here, make abort more useful. */ #define abort() \ do { \ write_log ("Internal error; file %s, line %d\n", __FILE__, __LINE__); \ (abort) (); \ } while (0) #else #define ENUMDECL enum #define ENUMNAME(name) ; typedef int name #endif /* * Porters to weird systems, look! This is the preferred way to get * filesys.c (and other stuff) running on your system. Define the * appropriate macros and implement wrappers in a machine-specific file. * * I guess the Mac port could use this (Ernesto?) */ #undef DONT_HAVE_POSIX #undef DONT_HAVE_REAL_POSIX /* define if open+delete doesn't do what it should */ #undef DONT_HAVE_STDIO #undef DONT_HAVE_MALLOC #if defined(WARPUP) #define DONT_HAVE_POSIX #endif #if defined _WIN32 #if defined __WATCOMC__ #define O_NDELAY 0 #include #define dirent direct #define mkdir(a,b) mkdir(a) #define strcasecmp stricmp #elif defined __MINGW32__ #define O_NDELAY 0 #define mkdir(a,b) mkdir(a) #elif defined _MSC_VER #ifdef HAVE_GETTIMEOFDAY #include // for 'struct timeval' definition extern void gettimeofday( struct timeval *tv, void *blah ); #endif #define O_NDELAY 0 #define FILEFLAG_DIR 0x1 #define FILEFLAG_ARCHIVE 0x2 #define FILEFLAG_WRITE 0x4 #define FILEFLAG_READ 0x8 #define FILEFLAG_EXECUTE 0x10 #define FILEFLAG_SCRIPT 0x20 #define FILEFLAG_PURE 0x40 #ifdef REGPARAM2 #undef REGPARAM2 #endif #define REGPARAM2 __fastcall #define REGPARAM3 __fastcall #define REGPARAM #include #define O_BINARY _O_BINARY #define O_WRONLY _O_WRONLY #define O_RDONLY _O_RDONLY #define O_RDWR _O_RDWR #define O_CREAT _O_CREAT #define O_TRUNC _O_TRUNC #define strcasecmp _tcsicmp #define strncasecmp _tcsncicmp #define W_OK 0x2 #define R_OK 0x4 #define STAT struct stat #define DIR struct DIR struct direct { TCHAR d_name[1]; }; #include #define utimbuf __utimbuf64 #define USE_ZFILE #undef S_ISDIR #undef S_IWUSR #undef S_IRUSR #undef S_IXUSR #define S_ISDIR(a) (a&FILEFLAG_DIR) #define S_ISARC(a) (a&FILEFLAG_ARCHIVE) #define S_IWUSR FILEFLAG_WRITE #define S_IRUSR FILEFLAG_READ #define S_IXUSR FILEFLAG_EXECUTE #endif #endif /* _WIN32 */ #ifdef DONT_HAVE_POSIX #define access posixemu_access extern int posixemu_access (const TCHAR *, int); #define open posixemu_open extern int posixemu_open (const TCHAR *, int, int); #define close posixemu_close extern void posixemu_close (int); #define read posixemu_read extern int posixemu_read (int, TCHAR *, int); #define write posixemu_write extern int posixemu_write (int, const TCHAR *, int); #undef lseek #define lseek posixemu_seek extern int posixemu_seek (int, int, int); #define stat(a,b) posixemu_stat ((a), (b)) extern int posixemu_stat (const TCHAR *, STAT *); #define mkdir posixemu_mkdir extern int mkdir (const TCHAR *, int); #define rmdir posixemu_rmdir extern int posixemu_rmdir (const TCHAR *); #define unlink posixemu_unlink extern int posixemu_unlink (const TCHAR *); #define truncate posixemu_truncate extern int posixemu_truncate (const TCHAR *, long int); #define rename posixemu_rename extern int posixemu_rename (const TCHAR *, const TCHAR *); #define chmod posixemu_chmod extern int posixemu_chmod (const TCHAR *, int); #define tmpnam posixemu_tmpnam extern void posixemu_tmpnam (TCHAR *); #define utime posixemu_utime extern int posixemu_utime (const TCHAR *, struct utimbuf *); #define opendir posixemu_opendir extern DIR * posixemu_opendir (const TCHAR *); #define readdir posixemu_readdir extern struct dirent* readdir (DIR *); #define closedir posixemu_closedir extern void closedir (DIR *); /* This isn't the best place for this, but it fits reasonably well. The logic * is that you probably don't have POSIX errnos if you don't have the above * functions. */ extern long dos_errno (void); #endif #ifdef DONT_HAVE_STDIO extern FILE *stdioemu_fopen (const TCHAR *, const TCHAR *); #define fopen(a,b) stdioemu_fopen(a, b) extern int stdioemu_fseek (FILE *, int, int); #define fseek(a,b,c) stdioemu_fseek(a, b, c) extern int stdioemu_fread (TCHAR *, int, int, FILE *); #define fread(a,b,c,d) stdioemu_fread(a, b, c, d) extern int stdioemu_fwrite (const TCHAR *, int, int, FILE *); #define fwrite(a,b,c,d) stdioemu_fwrite(a, b, c, d) extern int stdioemu_ftell (FILE *); #define ftell(a) stdioemu_ftell(a) extern int stdioemu_fclose (FILE *); #define fclose(a) stdioemu_fclose(a) #endif #ifdef DONT_HAVE_MALLOC #define malloc(a) mallocemu_malloc(a) extern void *mallocemu_malloc (int size); #define free(a) mallocemu_free(a) extern void mallocemu_free (void *ptr); #endif #ifdef X86_ASSEMBLY #define ASM_SYM_FOR_FUNC(a) __asm__(a) #else #define ASM_SYM_FOR_FUNC(a) #endif #include "target.h" #ifdef UAE_CONSOLE #undef write_log #define write_log write_log_standard #endif #if __GNUC__ - 1 > 1 || __GNUC_MINOR__ - 1 > 6 extern void write_log (const TCHAR *, ...) __attribute__ ((format (printf, 1, 2))); #else extern void write_log (const TCHAR *, ...); #endif extern void write_dlog (const TCHAR *, ...); extern void flush_log (void); extern TCHAR *setconsolemode (TCHAR *buffer, int maxlen); extern void close_console (void); extern void reopen_console (void); extern void console_out (const TCHAR *); extern void console_out_f (const TCHAR *, ...); extern void console_flush (void); extern int console_get (TCHAR *, int); extern bool console_isch (void); extern TCHAR console_getch (void); extern void f_out (void *, const TCHAR *, ...); extern TCHAR* buf_out (TCHAR *buffer, int *bufsize, const TCHAR *format, ...); extern void gui_message (const TCHAR *,...); extern int gui_message_multibutton (int flags, const TCHAR *format,...); #define write_log_err write_log extern void logging_init (void); extern FILE *log_open (const TCHAR *name, int append, int bootlog, TCHAR*); extern void log_close (FILE *f); #ifndef O_BINARY #define O_BINARY 0 #endif #ifndef STATIC_INLINE #if __GNUC__ - 1 > 1 && __GNUC_MINOR__ - 1 >= 0 #define STATIC_INLINE static __inline__ __attribute__ ((always_inline)) #define NOINLINE __attribute__ ((noinline)) #define NORETURN __attribute__ ((noreturn)) #elif _MSC_VER #define STATIC_INLINE static __forceinline #define NOINLINE __declspec(noinline) #define NORETURN __declspec(noreturn) #else #define STATIC_INLINE static __inline__ #define NOINLINE #define NORETURN #endif #endif /* Every Amiga hardware clock cycle takes this many "virtual" cycles. This used to be hardcoded as 1, but using higher values allows us to time some stuff more precisely. 512 is the official value from now on - it can't change, unless we want _another_ config option "finegrain2_m68k_speed". We define this value here rather than in events.h so that gencpu.c sees it. */ #define CYCLE_UNIT 512 /* This one is used by cfgfile.c. We could reduce the CYCLE_UNIT back to 1, I'm not 100% sure this code is bug free yet. */ #define OFFICIAL_CYCLE_UNIT 512 /* * You can specify numbers from 0 to 5 here. It is possible that higher * numbers will make the CPU emulation slightly faster, but if the setting * is too high, you will run out of memory while compiling. * Best to leave this as it is. */ #define CPU_EMU_SIZE 0 /* * Byte-swapping functions */ /* Try to use system bswap_16/bswap_32 functions. */ #if defined HAVE_BSWAP_16 && defined HAVE_BSWAP_32 # include # ifdef HAVE_BYTESWAP_H # include # endif #else /* Else, if using SDL, try SDL's endian functions. */ # ifdef USE_SDL # include # define bswap_16(x) SDL_Swap16(x) # define bswap_32(x) SDL_Swap32(x) # else /* Otherwise, we'll roll our own. */ # define bswap_16(x) (((x) >> 8) | (((x) & 0xFF) << 8)) # define bswap_32(x) (((x) << 24) | (((x) << 8) & 0x00FF0000) | (((x) >> 8) & 0x0000FF00) | ((x) >> 24)) # endif #endif #endif #ifndef __cplusplus #define xmalloc(T, N) malloc(sizeof (T) * (N)) #define xcalloc(T, N) calloc(sizeof (T), N) #define xfree(T) free(T) #define xrealloc(T, TP, N) realloc(TP, sizeof (T) * (N)) #if 0 extern void *xmalloc (size_t); extern void *xcalloc (size_t, size_t); extern void xfree (const void*); #endif #else #define xmalloc(T, N) static_cast(malloc (sizeof (T) * (N))) #define xcalloc(T, N) static_cast(calloc (sizeof (T), N)) #define xrealloc(T, TP, N) static_cast(realloc (TP, sizeof (T) * (N))) #define xfree(T) free(T) #endif #define DBLEQU(f, i) (abs ((f) - (i)) < 0.000001) fs-uae-2.2.3+dfsg/src/include/uae.h0000644000175000017500000000460612162366655017220 0ustar glaubitzglaubitz /* * UAE - The Un*x Amiga Emulator * * Prototypes for main.c * * Copyright 1996 Bernd Schmidt */ extern void do_start_program (void); extern void do_leave_program (void); extern void start_program (void); extern void leave_program (void); extern void real_main (int, TCHAR **); extern void virtualdevice_init (void); extern void usage (void); extern void sleep_millis (int ms); extern void sleep_millis_main (int ms); extern void sleep_millis_busy (int ms); extern int sleep_resolution; #define UAE_QUIT 1 #define UAE_RESET 2 #define UAE_RESET_KEYBOARD 3 #define UAE_RESET_HARD 4 extern void uae_reset (int, int); extern void uae_quit (void); extern void uae_restart (int, const TCHAR*); extern void reset_all_systems (void); extern void target_reset (void); extern void target_addtorecent (const TCHAR*, int); extern void target_run (void); extern void target_quit (void); extern void target_restart (void); extern bool get_plugin_path (TCHAR *out, int size, const TCHAR *path); extern void stripslashes (TCHAR *p); extern void fixtrailing (TCHAR *p); extern void fullpath (TCHAR *path, int size); extern void getpathpart (TCHAR *outpath, int size, const TCHAR *inpath); extern void getfilepart (TCHAR *out, int size, const TCHAR *path); extern uae_u32 getlocaltime (void); extern int quit_program; extern bool console_emulation; extern TCHAR warning_buffer[256]; extern TCHAR start_path_data[]; extern TCHAR start_path_data_exe[]; extern TCHAR start_path_plugins[]; /* This structure is used to define menus. The val field can hold key * shortcuts, or one of these special codes: * -4: deleted entry, not displayed, not selectable, but does count in * select value * -3: end of table * -2: line that is displayed, but not selectable * -1: line that is selectable, but has no keyboard shortcut * 0: Menu title */ struct bstring { const TCHAR *data; int val; }; extern TCHAR *colormodes[]; extern void fetch_saveimagepath (TCHAR*, int, int); extern void fetch_configurationpath (TCHAR *out, int size); extern void fetch_screenshotpath (TCHAR *out, int size); extern void fetch_ripperpath (TCHAR *out, int size); extern void fetch_statefilepath (TCHAR *out, int size); extern void fetch_inputfilepath (TCHAR *out, int size); extern void fetch_datapath (TCHAR *out, int size); extern uae_u32 uaerand (void); extern uae_u32 uaesrand (uae_u32 seed); extern uae_u32 uaerandgetseed (void); fs-uae-2.2.3+dfsg/src/include/diskutil.h0000644000175000017500000000042612162366655020272 0ustar glaubitzglaubitz int isamigatrack (uae_u16 *amigamfmbuffer, uae_u8 *mfmdata, int len, uae_u8 *writebuffer, uae_u8 *writebuffer_ok, int track, int *outsize); int ispctrack (uae_u16 *amigamfmbuffer, uae_u8 *mfmdata, int len, uae_u8 *writebuffer, uae_u8 *writebuffer_ok, int track, int *outsize); fs-uae-2.2.3+dfsg/src/include/catweasel.h0000644000175000017500000000716212162366655020416 0ustar glaubitzglaubitz #ifdef CATWEASEL extern struct catweasel_contr cwc; extern int catweasel_read_keyboard (uae_u8 *keycode); extern int catweasel_init (void); extern void catweasel_free (void); extern int catweasel_detect (void); extern uae_u32 catweasel_do_bget (uaecptr addr); extern void catweasel_do_bput (uaecptr addr, uae_u32 b); extern int catweasel_read_joystick (uae_u8 *dir, uae_u8 *buttons); extern void catweasel_hsync (void); extern int catweasel_isjoystick(void); extern int catweasel_ismouse(void); extern int catweasel_read_mouse(int port, int *dx, int *dy, int *buttons); typedef struct catweasel_drive { struct catweasel_contr *contr; /* The controller this drive belongs to */ int number; /* Drive number: 0 or 1 */ int type; /* 0 = not present, 1 = 3.5" */ int track; /* current r/w head position (0..79) */ int diskindrive; /* 0 = no disk, 1 = disk in drive */ int wprot; /* 0 = not, 1 = write protected */ unsigned char sel; unsigned char mot; } catweasel_drive; typedef struct catweasel_contr { int type; /* see CATWEASEL_TYPE_* defines below */ int direct_access; int direct_type; int iobase; /* 0 = not present (factory default is 0x320) */ void (*msdelay)(int ms); /* microseconds delay routine, provided by host program */ catweasel_drive drives[2]; /* at most two drives on each controller */ int control_register; /* contents of control register */ unsigned char crm_sel0; /* bit masks for the control / status register */ unsigned char crm_sel1; unsigned char crm_mot0; unsigned char crm_mot1; unsigned char crm_dir; unsigned char crm_step; unsigned char srm_trk0; unsigned char srm_dchg; unsigned char srm_writ; unsigned char srm_dskready; int io_sr; /* IO port of control / status register */ int io_mem; /* IO port of memory register */ int sid[2]; int can_sid, can_mouse, can_joy, can_kb; } catweasel_contr; #define CATWEASEL_TYPE_NONE -1 #define CATWEASEL_TYPE_MK1 1 #define CATWEASEL_TYPE_MK3 3 #define CATWEASEL_TYPE_MK4 4 /* Initialize a Catweasel controller; c->iobase and c->msdelay must have been initialized -- msdelay might be used */ void catweasel_init_controller(catweasel_contr *c); /* Reset the controller */ void catweasel_free_controller(catweasel_contr *c); /* Set current drive select mask */ void catweasel_select(catweasel_contr *c, int dr0, int dr1); /* Start/stop the drive's motor */ void catweasel_set_motor(catweasel_drive *d, int on); /* Move the r/w head */ int catweasel_step(catweasel_drive *d, int dir); /* Check for a disk change and update d->diskindrive -- msdelay might be used. Returns 1 == disk has been changed */ int catweasel_disk_changed(catweasel_drive *d); /* Check if disk in selected drive is write protected. */ int catweasel_write_protected(catweasel_drive *d); /* Read data -- msdelay will be used */ int catweasel_read(catweasel_drive *d, int side, int clock, int time); /* Write data -- msdelay will be used. If time == -1, the write will be started at the index pulse and stopped at the next index pulse, or earlier if the Catweasel RAM contains a 128 end byte. The function returns after the write has finished. */ int catweasel_write(catweasel_drive *d, int side, int clock, int time); int catweasel_fillmfm (catweasel_drive *d, uae_u16 *mfm, int side, int clock, int rawmode); int catweasel_diskready(catweasel_drive *d); int catweasel_track0(catweasel_drive *d); #endif fs-uae-2.2.3+dfsg/src/include/filesys.h0000644000175000017500000001050212162366655020114 0ustar glaubitzglaubitz /* * UAE - The Un*x Amiga Emulator * * Unix file system handler for AmigaDOS * * Copyright 1997 Bernd Schmidt */ struct hardfilehandle; #define MAX_HDF_CACHE_BLOCKS 128 struct hdf_cache { bool valid; uae_u8 *data; uae_u64 block; bool dirty; int readcount; int writecount; time_t lastaccess; }; struct hardfiledata { uae_u64 virtsize; // virtual size uae_u64 physsize; // physical size (dynamic disk) uae_u64 offset; int nrcyls; int secspertrack; int surfaces; int reservedblocks; int blocksize; struct hardfilehandle *handle; int handle_valid; int readonly; int dangerous; int flags; uae_u8 *cache; int cache_valid; uae_u64 cache_offset; TCHAR vendor_id[8 + 1]; TCHAR product_id[16 + 1]; TCHAR product_rev[4 + 1]; TCHAR device_name[256]; /* geometry from possible RDSK block */ int cylinders; int sectors; int heads; uae_u8 *virtual_rdb; uae_u64 virtual_size; int unitnum; int byteswap; int adide; uae_u8 *vhd_header; uae_u32 vhd_bamoffset; uae_u32 vhd_bamsize; uae_u32 vhd_blocksize; uae_u32 vhd_type; uae_u8 *vhd_sectormap; uae_u64 vhd_sectormapblock; uae_u32 vhd_bitmapsize; uae_u64 vhd_footerblock; int drive_empty; TCHAR *emptyname; struct hdf_cache bcache[MAX_HDF_CACHE_BLOCKS]; }; #define HFD_FLAGS_REALDRIVE 1 struct hd_hardfiledata { struct hardfiledata hfd; int bootpri; uae_u64 size; int cyls; int heads; int secspertrack; int cyls_def; int secspertrack_def; int heads_def; TCHAR *path; int ansi_version; }; #define HD_CONTROLLER_UAE 0 #define HD_CONTROLLER_IDE0 1 #define HD_CONTROLLER_IDE1 2 #define HD_CONTROLLER_IDE2 3 #define HD_CONTROLLER_IDE3 4 #define HD_CONTROLLER_SCSI0 5 #define HD_CONTROLLER_SCSI1 6 #define HD_CONTROLLER_SCSI2 7 #define HD_CONTROLLER_SCSI3 8 #define HD_CONTROLLER_SCSI4 9 #define HD_CONTROLLER_SCSI5 10 #define HD_CONTROLLER_SCSI6 11 #define HD_CONTROLLER_PCMCIA_SRAM 12 #define HD_CONTROLLER_PCMCIA_IDE 13 #define FILESYS_VIRTUAL 0 #define FILESYS_HARDFILE 1 #define FILESYS_HARDFILE_RDB 2 #define FILESYS_HARDDRIVE 3 #define FILESYS_CD 4 #define MAX_FILESYSTEM_UNITS 30 struct uaedev_mount_info; extern struct uaedev_mount_info options_mountinfo; extern struct hardfiledata *get_hardfile_data (int nr); #define FILESYS_MAX_BLOCKSIZE 2048 extern int hdf_open (struct hardfiledata *hfd, const TCHAR *name); extern int hdf_dup (struct hardfiledata *dhfd, const struct hardfiledata *shfd); extern void hdf_close (struct hardfiledata *hfd); extern int hdf_read_rdb (struct hardfiledata *hfd, void *buffer, uae_u64 offset, int len); extern int hdf_read (struct hardfiledata *hfd, void *buffer, uae_u64 offset, int len); extern int hdf_write (struct hardfiledata *hfd, void *buffer, uae_u64 offset, int len); extern int hdf_getnumharddrives (void); extern TCHAR *hdf_getnameharddrive (int index, int flags, int *sectorsize, int *dangerousdrive); extern int isspecialdrive(const TCHAR *name); extern int get_native_path(uae_u32 lock, TCHAR *out); extern void hardfile_do_disk_change (struct uaedev_config_info *uci, int insert); void hdf_hd_close(struct hd_hardfiledata *hfd); int hdf_hd_open(struct hd_hardfiledata *hfd, const TCHAR *path, int blocksize, int readonly, const TCHAR *devname, int cyls, int sectors, int surfaces, int reserved, int bootpri, const TCHAR *filesys, int pcyls, int pheads, int psectors); extern int vhd_create (const TCHAR *name, uae_u64 size, uae_u32); extern int hdf_init_target (void); extern int hdf_open_target (struct hardfiledata *hfd, const TCHAR *name); extern int hdf_dup_target (struct hardfiledata *dhfd, const struct hardfiledata *shfd); extern void hdf_close_target (struct hardfiledata *hfd); extern int hdf_read_target (struct hardfiledata *hfd, void *buffer, uae_u64 offset, int len); extern int hdf_write_target (struct hardfiledata *hfd, void *buffer, uae_u64 offset, int len); extern int hdf_resize_target (struct hardfiledata *hfd, uae_u64 newsize); extern void getchsgeometry (uae_u64 size, int *pcyl, int *phead, int *psectorspertrack); extern void getchsgeometry_hdf (struct hardfiledata *hfd, uae_u64 size, int *pcyl, int *phead, int *psectorspertrack); extern void getchspgeometry (uae_u64 total, int *pcyl, int *phead, int *psectorspertrack, bool idegeometry); fs-uae-2.2.3+dfsg/src/include/gayle.h0000644000175000017500000000145612162366655017547 0ustar glaubitzglaubitz extern void gayle_reset (int); extern void gayle_hsync (void); extern int gayle_add_ide_unit (int ch, const TCHAR *path, int blocksize, int readonly, const TCHAR *devname, int cyls, int sectors, int surfaces, int reserved, int bootpri, const TCHAR *filesys, int pcyls, int pheads, int psecs); extern int gayle_modify_pcmcia_sram_unit (const TCHAR *path, int readonly, int insert); extern int gayle_modify_pcmcia_ide_unit (const TCHAR *path, int readonly, int insert); extern int gayle_add_pcmcia_sram_unit (const TCHAR *path, int readonly); extern int gayle_add_pcmcia_ide_unit (const TCHAR *path, int readonly); extern void gayle_free_units (void); extern void rethink_gayle (void); extern void gayle_map_pcmcia (void); #define PCMCIA_COMMON_START 0x600000 #define PCMCIA_COMMON_SIZE 0x400000 fs-uae-2.2.3+dfsg/src/include/custom.h0000644000175000017500000001414212162366655017754 0ustar glaubitzglaubitz/* * UAE - The Un*x Amiga Emulator * * custom chip support * * (c) 1995 Bernd Schmidt */ #include "machdep/rpt.h" /* These are the masks that are ORed together in the chipset_mask option. * If CSMASK_AGA is set, the ECS bits are guaranteed to be set as well. */ #define CSMASK_ECS_AGNUS 1 #define CSMASK_ECS_DENISE 2 #define CSMASK_AGA 4 #define CSMASK_MASK (CSMASK_ECS_AGNUS | CSMASK_ECS_DENISE | CSMASK_AGA) #define CHIPSET_CLOCK_PAL 3546895 #define CHIPSET_CLOCK_NTSC 3579545 uae_u32 get_copper_address (int copno); extern int custom_init (void); extern void custom_prepare (void); extern void custom_reset (bool hardreset, bool keyboardreset); extern int intlev (void); extern void dumpcustom (void); extern void do_disk (void); extern void do_copper (void); extern void notice_new_xcolors (void); extern void notice_screen_contents_lost (void); extern void init_row_map (void); extern void init_hz_full (void); extern void init_custom (void); extern bool picasso_requested_on; extern bool picasso_on; extern void set_picasso_hack_rate (int hz); /* Set to 1 to leave out the current frame in average frame time calculation. * Useful if the debugger was active. */ extern int bogusframe; extern unsigned long int hsync_counter, vsync_counter; extern uae_u16 dmacon; extern uae_u16 intena, intreq, intreqr; extern int vpos; extern int find_copper_record (uaecptr, int *, int *); extern int n_frames; STATIC_INLINE int dmaen (unsigned int dmamask) { return (dmamask & dmacon) && (dmacon & 0x200); } #define SPCFLAG_STOP 2 #define SPCFLAG_COPPER 4 #define SPCFLAG_INT 8 #define SPCFLAG_BRK 16 #define SPCFLAG_TRACE 64 #define SPCFLAG_DOTRACE 128 #define SPCFLAG_DOINT 256 /* arg, JIT fails without this.. */ #define SPCFLAG_BLTNASTY 512 #define SPCFLAG_EXEC 1024 #define SPCFLAG_ACTION_REPLAY 2048 #define SPCFLAG_TRAP 4096 /* enforcer-hack */ #define SPCFLAG_MODE_CHANGE 8192 #ifdef JIT #define SPCFLAG_END_COMPILE 16384 #endif extern uae_u16 adkcon; extern unsigned int joy0dir, joy1dir; extern int joy0button, joy1button; extern void INTREQ (uae_u16); extern void INTREQ_0 (uae_u16); extern void INTREQ_f (uae_u16); extern void send_interrupt (int num, int delay); extern uae_u16 INTREQR (void); /* maximums for statically allocated tables */ #ifdef UAE_MINI /* absolute minimums for basic A500/A1200-emulation */ #define MAXHPOS 227 #define MAXVPOS 312 #else #define MAXHPOS 256 #define MAXVPOS 592 #endif /* PAL/NTSC values */ #define MAXHPOS_PAL 227 #define MAXHPOS_NTSC 227 #define MAXVPOS_PAL 312 #define MAXVPOS_NTSC 262 #define VBLANK_ENDLINE_PAL 26 #define VBLANK_ENDLINE_NTSC 21 #define VBLANK_SPRITE_PAL 25 #define VBLANK_SPRITE_NTSC 20 #define VBLANK_HZ_PAL 50 #define VBLANK_HZ_NTSC 60 #define EQU_ENDLINE_PAL 8 #define EQU_ENDLINE_NTSC 10 extern int maxhpos, maxhpos_short; extern int maxvpos, maxvpos_nom; extern int hsyncstartpos; extern int minfirstline, vblank_endline, numscrlines; extern double vblank_hz, fake_vblank_hz; extern int vblank_skip, doublescan; extern bool programmedmode; #define DMA_AUD0 0x0001 #define DMA_AUD1 0x0002 #define DMA_AUD2 0x0004 #define DMA_AUD3 0x0008 #define DMA_DISK 0x0010 #define DMA_SPRITE 0x0020 #define DMA_BLITTER 0x0040 #define DMA_COPPER 0x0080 #define DMA_BITPLANE 0x0100 #define DMA_MASTER 0x0200 #define DMA_BLITPRI 0x0400 #define CYCLE_REFRESH 1 #define CYCLE_STROBE 2 #define CYCLE_MISC 3 #define CYCLE_SPRITE 4 #define CYCLE_COPPER 5 #define CYCLE_BLITTER 6 #define CYCLE_CPU 7 #define CYCLE_CPUNASTY 8 #define CYCLE_COPPER_SPECIAL 0x10 #define CYCLE_MASK 0x0f extern unsigned long frametime, timeframes; extern uae_u16 htotal, vtotal, beamcon0; /* 100 words give you 1600 horizontal pixels. Should be more than enough for * superhires. Don't forget to update the definition in genp2c.c as well. * needs to be larger for superhires support */ #ifdef CUSTOM_SIMPLE #define MAX_WORDS_PER_LINE 50 #else #define MAX_WORDS_PER_LINE 100 #endif extern uae_u32 hirestab_h[256][2]; extern uae_u32 lorestab_h[256][4]; extern uae_u32 hirestab_l[256][1]; extern uae_u32 lorestab_l[256][2]; #ifdef AGA /* AGA mode color lookup tables */ extern unsigned int xredcolors[256], xgreencolors[256], xbluecolors[256]; #endif extern int xredcolor_s, xredcolor_b, xredcolor_m; extern int xgreencolor_s, xgreencolor_b, xgreencolor_m; extern int xbluecolor_s, xbluecolor_b, xbluecolor_m; #define RES_LORES 0 #define RES_HIRES 1 #define RES_SUPERHIRES 2 #define RES_MAX 2 #define VRES_NONDOUBLE 0 #define VRES_DOUBLE 1 #define VRES_QUAD 2 #define VRES_MAX 1 /* calculate shift depending on resolution (replaced "decided_hires ? 4 : 8") */ #define RES_SHIFT(res) ((res) == RES_LORES ? 8 : (res) == RES_HIRES ? 4 : 2) /* get resolution from bplcon0 */ STATIC_INLINE int GET_RES_DENISE (uae_u16 con0) { if (!(currprefs.chipset_mask & CSMASK_ECS_DENISE)) con0 &= ~0x40; // SUPERHIRES return ((con0) & 0x8000) ? RES_HIRES : ((con0) & 0x40) ? RES_SUPERHIRES : RES_LORES; } STATIC_INLINE int GET_RES_AGNUS (uae_u16 con0) { if (!(currprefs.chipset_mask & CSMASK_ECS_AGNUS)) con0 &= ~0x40; // SUPERHIRES return ((con0) & 0x8000) ? RES_HIRES : ((con0) & 0x40) ? RES_SUPERHIRES : RES_LORES; } /* get sprite width from FMODE */ #define GET_SPRITEWIDTH(FMODE) ((((FMODE) >> 2) & 3) == 3 ? 64 : (((FMODE) >> 2) & 3) == 0 ? 16 : 32) /* Compute the number of bitplanes from a value written to BPLCON0 */ STATIC_INLINE int GET_PLANES(uae_u16 bplcon0) { if ((bplcon0 & 0x0010) && (bplcon0 & 0x7000)) return 0; // >8 planes = 0 planes if (bplcon0 & 0x0010) return 8; // AGA 8-planes bit return (bplcon0 >> 12) & 7; // normal planes bits } extern void fpscounter_reset (void); extern unsigned long idletime; extern int lightpen_x, lightpen_y, lightpen_cx, lightpen_cy, lightpen_active; struct customhack { uae_u16 v; int vpos, hpos; }; void customhack_put (struct customhack *ch, uae_u16 v, int hpos); uae_u16 customhack_get (struct customhack *ch, int hpos); extern void alloc_cycle_ext (int, int); extern void alloc_cycle_blitter (int hpos, uaecptr *ptr, int); extern bool ispal (void); extern int current_maxvpos (void); extern struct chipset_refresh *get_chipset_refresh (void); extern void compute_framesync (void); fs-uae-2.2.3+dfsg/src/include/drawing.h0000644000175000017500000002001012162366655020064 0ustar glaubitzglaubitz/* * Data used for communication between custom.c and drawing.c. * * Copyright 1996-1998 Bernd Schmidt */ #define SMART_UPDATE 1 #ifdef SUPPORT_PENGUINS #undef SMART_UPDATE #define SMART_UPDATE 1 #endif #ifdef AGA #define MAX_PLANES 8 #else #define MAX_PLANES 6 #endif #define AMIGA_WIDTH_MAX (752 / 2) #define AMIGA_HEIGHT_MAX (574 / 2) //#define NEWHSYNC #ifdef NEWHSYNC #define DIW_DDF_OFFSET 9 /* this many cycles starting from hpos=0 are visible on right border */ #define HBLANK_OFFSET 13 #define DISPLAY_LEFT_SHIFT 0x40 #else /* According to the HRM, pixel data spends a couple of cycles somewhere in the chips before it appears on-screen. (TW: display emulation now does this automatically) */ #define DIW_DDF_OFFSET 1 /* this many cycles starting from hpos=0 are visible on right border */ #define HBLANK_OFFSET 9 /* We ignore that many lores pixels at the start of the display. These are * invisible anyway due to hardware DDF limits. */ #define DISPLAY_LEFT_SHIFT 0x38 #endif #define PIXEL_XPOS(HPOS) (((HPOS)*2 - DISPLAY_LEFT_SHIFT + DIW_DDF_OFFSET - 1) << lores_shift) #define max_diwlastword (PIXEL_XPOS(0x1d4 >> 1)) extern int lores_factor, lores_shift, interlace_seen; extern bool aga_mode, direct_rgb; STATIC_INLINE int coord_hw_to_window_x (int x) { x -= DISPLAY_LEFT_SHIFT; return x << lores_shift; } STATIC_INLINE int coord_window_to_hw_x (int x) { x >>= lores_shift; return x + DISPLAY_LEFT_SHIFT; } STATIC_INLINE int coord_diw_to_window_x (int x) { return (x - DISPLAY_LEFT_SHIFT + DIW_DDF_OFFSET - 1) << lores_shift; } STATIC_INLINE int coord_window_to_diw_x (int x) { x = coord_window_to_hw_x (x); return x - DIW_DDF_OFFSET; } extern int framecnt; /* color values in two formats: 12 (OCS/ECS) or 24 (AGA) bit Amiga RGB (color_regs), * and the native color value; both for each Amiga hardware color register. * * !!! See color_reg_xxx functions below before touching !!! */ struct color_entry { uae_u16 color_regs_ecs[32]; #ifndef AGA xcolnr acolors[32]; #else xcolnr acolors[256]; uae_u32 color_regs_aga[256]; #endif bool borderblank; }; #ifdef AGA /* convert 24 bit AGA Amiga RGB to native color */ /* warning: this is still ugly, but now works with either byte order */ #ifdef WORDS_BIGENDIAN # define CONVERT_RGB(c) \ ( xbluecolors[((uae_u8*)(&c))[3]] | xgreencolors[((uae_u8*)(&c))[2]] | xredcolors[((uae_u8*)(&c))[1]] ) #else # define CONVERT_RGB(c) \ ( xbluecolors[((uae_u8*)(&c))[0]] | xgreencolors[((uae_u8*)(&c))[1]] | xredcolors[((uae_u8*)(&c))[2]] ) #endif #else #define CONVERT_RGB(c) 0 #endif STATIC_INLINE xcolnr getxcolor (int c) { #ifdef AGA if (direct_rgb) return CONVERT_RGB(c); else #endif return xcolors[c]; } /* functions for reading, writing, copying and comparing struct color_entry */ STATIC_INLINE int color_reg_get (struct color_entry *ce, int c) { #ifdef AGA if (aga_mode) return ce->color_regs_aga[c]; else #endif return ce->color_regs_ecs[c]; } STATIC_INLINE void color_reg_set (struct color_entry *ce, int c, int v) { #ifdef AGA if (aga_mode) ce->color_regs_aga[c] = v; else #endif ce->color_regs_ecs[c] = v; } STATIC_INLINE int color_reg_cmp (struct color_entry *ce1, struct color_entry *ce2) { int v; #ifdef AGA if (aga_mode) v = memcmp (ce1->color_regs_aga, ce2->color_regs_aga, sizeof (uae_u32) * 256); else #endif v = memcmp (ce1->color_regs_ecs, ce2->color_regs_ecs, sizeof (uae_u16) * 32); if (!v && ce1->borderblank == ce2->borderblank) return 0; return 1; } /* ugly copy hack, is there better solution? */ STATIC_INLINE void color_reg_cpy (struct color_entry *dst, struct color_entry *src) { dst->borderblank = src->borderblank; #ifdef AGA if (aga_mode) /* copy acolors and color_regs_aga */ memcpy (dst->acolors, src->acolors, sizeof(struct color_entry) - sizeof(uae_u16) * 32); else #endif /* copy first 32 acolors and color_regs_ecs */ memcpy (dst->color_regs_ecs, src->color_regs_ecs, sizeof(struct color_entry)); } /* * The idea behind this code is that at some point during each horizontal * line, we decide how to draw this line. There are many more-or-less * independent decisions, each of which can be taken at a different horizontal * position. * Sprites and color changes are handled specially: There isn't a single decision, * but a list of structures containing information on how to draw the line. */ #define COLOR_CHANGE_BRDBLANK 0x80000000 struct color_change { int linepos; int regno; unsigned int value; }; /* 440 rather than 880, since sprites are always lores. */ #ifdef UAE_MINI #define MAX_PIXELS_PER_LINE 880 #define MAX_VIDHEIGHT 800 #else #define MAX_PIXELS_PER_LINE 1760 #define MAX_VIDHEIGHT 2048 #endif /* No divisors for MAX_PIXELS_PER_LINE; we support AGA and SHRES sprites */ #define MAX_SPR_PIXELS (((MAXVPOS + 1) * 2 + 1) * MAX_PIXELS_PER_LINE) struct sprite_entry { unsigned short pos; unsigned short max; unsigned int first_pixel; bool has_attached; }; union sps_union { uae_u8 bytes[2 * MAX_SPR_PIXELS]; uae_u32 words[2 * MAX_SPR_PIXELS / 4]; }; extern union sps_union spixstate; #ifdef OS_WITHOUT_MEMORY_MANAGEMENT extern uae_u16 *spixels; #else extern uae_u16 spixels[MAX_SPR_PIXELS * 2]; #endif /* Way too much... */ #define MAX_REG_CHANGE ((MAXVPOS + 1) * 2 * MAXHPOS) extern struct color_entry *curr_color_tables, *prev_color_tables; extern struct sprite_entry *curr_sprite_entries, *prev_sprite_entries; extern struct color_change *curr_color_changes, *prev_color_changes; extern struct draw_info *curr_drawinfo, *prev_drawinfo; /* struct decision contains things we save across drawing frames for * comparison (smart update stuff). */ struct decision { /* Records the leftmost access of BPL1DAT. */ int plfleft, plfright, plflinelen; /* Display window: native coordinates, depend on lores state. */ int diwfirstword, diwlastword; int ctable; uae_u16 bplcon0, bplcon2; #ifdef AGA uae_u16 bplcon3, bplcon4; #endif uae_u8 nr_planes; uae_u8 bplres; bool ehb_seen; bool ham_seen; bool ham_at_start; }; /* Anything related to changes in hw registers during the DDF for one * line. */ struct draw_info { int first_sprite_entry, last_sprite_entry; int first_color_change, last_color_change; int nr_color_changes, nr_sprites; }; extern struct decision line_decisions[2 * (MAXVPOS + 2) + 1]; extern uae_u8 line_data[(MAXVPOS + 2) * 2][MAX_PLANES * MAX_WORDS_PER_LINE * 2]; /* Functions in drawing.c. */ extern int coord_native_to_amiga_y (int); extern int coord_native_to_amiga_x (int); extern void record_diw_line (int plfstrt, int first, int last); extern void hardware_line_completed (int lineno); /* Determine how to draw a scan line. */ enum nln_how { /* All lines on a non-doubled display. */ nln_normal, /* Non-interlace, doubled display. */ nln_doubled, /* Interlace, doubled display, upper line. */ nln_upper, /* Interlace, doubled display, lower line. */ nln_lower, /* This line normal, next one black. */ nln_nblack }; extern void hsync_record_line_state (int lineno, enum nln_how, int changed); extern void vsync_handle_redraw (int long_frame, int lof_changed, uae_u16, uae_u16); extern void vsync_handle_check (void); extern void init_hardware_for_drawing_frame (void); extern void reset_drawing (void); extern void drawing_init (void); extern bool notice_interlace_seen (bool); extern void notice_resolution_seen (int, bool); extern void frame_drawn (void); extern void redraw_frame (void); extern int get_custom_limits (int *pw, int *ph, int *pdx, int *pdy, int *prealh); extern void set_custom_limits (int w, int h, int dx, int dy); extern void get_custom_topedge (int *x, int *y); extern void putpixel (uae_u8 *buf, int bpp, int x, xcolnr c8, int opaq); /* Finally, stuff that shouldn't really be shared. */ extern int thisframe_first_drawn_line, thisframe_last_drawn_line; #define IHF_SCROLLLOCK 0 #define IHF_QUIT_PROGRAM 1 #define IHF_PICASSO 2 #define IHF_SOUNDADJUST 3 extern int inhibit_frame; STATIC_INLINE void set_inhibit_frame (int bit) { inhibit_frame |= 1 << bit; } STATIC_INLINE void clear_inhibit_frame (int bit) { inhibit_frame &= ~(1 << bit); } STATIC_INLINE void toggle_inhibit_frame (int bit) { inhibit_frame ^= 1 << bit; } fs-uae-2.2.3+dfsg/src/include/ar.h0000644000175000017500000000423512162366655017046 0ustar glaubitzglaubitz /* disable HRTMon support by commenting this out */ #define ACTION_REPLAY_HRTMON #ifdef ACTION_REPLAY #define ACTION_REPLAY_COMMON #endif #ifdef ACTION_REPLAY_HRTMON #define ACTION_REPLAY_COMMON #endif #ifdef ACTION_REPLAY /* disable Action Replay ROM/RAM hide by commenting this out */ /* Better not disable this unless you do plenty of testing first. -Mark */ #define ACTION_REPLAY_HIDE_CARTRIDGE #endif #define ACTION_REPLAY_WAIT_PC -3 /* Wait for a specified Program counter */ #define ACTION_REPLAY_INACTIVE -2 #define ACTION_REPLAY_WAITRESET -1 #define ACTION_REPLAY_IDLE 1 #define ACTION_REPLAY_ACTIVATE 2 #define ACTION_REPLAY_ACTIVE 3 #define ACTION_REPLAY_DORESET 4 #define ACTION_REPLAY_HIDE 5 extern int action_replay_freeze (void); extern uaecptr wait_for_pc; extern int action_replay_flag; extern int armodel; extern int is_ar_pc_in_rom(void); extern int is_ar_pc_in_ram(void); extern void action_replay_enter (void); extern void action_replay_ciaread (void); extern void action_replay_hide (void); extern void action_replay_reset (bool hardreset, bool keyboardreset); extern int action_replay_load (void); extern int action_replay_unload (int in_memory_reset); extern void action_replay_memory_reset (void); extern void action_replay_init (int); extern void action_replay_cleanup (void); extern void REGPARAM3 chipmem_lput_actionreplay23 (uaecptr addr, uae_u32 l) REGPARAM; extern void REGPARAM3 chipmem_wput_actionreplay23 (uaecptr addr, uae_u32 w) REGPARAM; extern void REGPARAM3 chipmem_bput_actionreplay1 (uaecptr addr, uae_u32 b) REGPARAM; extern void REGPARAM3 chipmem_wput_actionreplay1 (uaecptr addr, uae_u32 w) REGPARAM; extern void REGPARAM3 chipmem_lput_actionreplay1 (uaecptr addr, uae_u32 l) REGPARAM; extern void action_replay_version (void); extern int hrtmon_flag; extern void hrtmon_enter (void); extern void hrtmon_breakenter (void); extern void hrtmon_ciaread (void); extern void hrtmon_hide (void); extern void hrtmon_reset (void); extern int hrtmon_load (void); extern void hrtmon_map_banks (void); /*extern uae_u8 *hrtmemory;*/ extern uae_u32 hrtmem_start, hrtmem_size; extern uae_u8 ar_custom[2*256], ar_ciaa[16], ar_ciab[16]; extern int hrtmon_lang; fs-uae-2.2.3+dfsg/src/include/scsi.h0000644000175000017500000000203412162366655017400 0ustar glaubitzglaubitz #define SCSI_DATA_BUFFER_SIZE (512 * 512) struct scsi_data { int id; int len; uae_u8 *data; int data_len; int status; uae_u8 sense[256]; int sense_len; uae_u8 reply[256]; uae_u8 cmd[16]; int reply_len; int direction; int offset; uae_u8 buffer[SCSI_DATA_BUFFER_SIZE]; struct hd_hardfiledata *hfd; int nativescsiunit; }; extern struct scsi_data *scsi_alloc(int,struct hd_hardfiledata*); extern struct scsi_data *scsi_alloc_native(int,int); extern void scsi_free(struct scsi_data*); extern void scsi_reset(void); extern void scsi_start_transfer(struct scsi_data*,int); extern int scsi_send_data(struct scsi_data*, uae_u8); extern int scsi_receive_data(struct scsi_data*, uae_u8*); extern void scsi_emulate_cmd(struct scsi_data *sd); extern int scsi_data_dir(struct scsi_data *sd); extern int scsi_emulate(struct hardfiledata *hfd, struct hd_hardfiledata *hdhfd, uae_u8 *cmdbuf, int scsi_cmd_len, uae_u8 *scsi_data, int *data_len, uae_u8 *r, int *reply_len, uae_u8 *s, int *sense_len); fs-uae-2.2.3+dfsg/src/include/dongle.h0000644000175000017500000000051212162366655017706 0ustar glaubitzglaubitzextern void dongle_reset (void); extern uae_u8 dongle_cia_read (int, int, uae_u8); extern void dongle_cia_write (int, int, uae_u8); extern void dongle_joytest (uae_u16); extern uae_u16 dongle_joydat (int, uae_u16); extern void dongle_potgo (uae_u16); extern uae_u16 dongle_potgor (uae_u16); extern int dongle_analogjoy (int, int);fs-uae-2.2.3+dfsg/src/include/a2091.h0000644000175000017500000000232112162366655017172 0ustar glaubitzglaubitz#ifdef A2091 extern addrbank dmaca2091_bank; extern void a2091_init (void); extern void a2091_free (void); extern void a2091_reset (void); extern void a3000scsi_init (void); extern void a3000scsi_free (void); extern void a3000scsi_reset (void); extern void rethink_a2091 (void); extern void wdscsi_put (uae_u8); extern uae_u8 wdscsi_get (void); extern uae_u8 wdscsi_getauxstatus (void); extern void wdscsi_sasr (uae_u8); extern void scsi_hsync (void); extern uae_u8 wdregs[32]; extern struct scsi_data *scsis[8]; #define WD33C93 _T("WD33C93") #define SCSIID (scsis[wdregs[WD_DESTINATION_ID] & 7]) extern int a2091_add_scsi_unit (int ch, const TCHAR *path, int blocksize, int readonly, const TCHAR *devname, int sectors, int surfaces, int reserved, int bootpri, const TCHAR *filesys); extern int a3000_add_scsi_unit (int ch, const TCHAR *path, int blocksize, int readonly, const TCHAR *devname, int sectors, int surfaces, int reserved, int bootpri, const TCHAR *filesys); extern int addscsi (int ch, const TCHAR *path, int blocksize, int readonly, const TCHAR *devname, int sectors, int surfaces, int reserved, int bootpri, const TCHAR *filesys, int scsi_level); #endif fs-uae-2.2.3+dfsg/src/include/fpp-unknown.h0000644000175000017500000000557212162366655020733 0ustar glaubitzglaubitz /* * UAE - The Un*x Amiga Emulator * * MC68881 emulation * * Conversion routines for hosts with unknown floating point format. * * Copyright 1996 Herman ten Brugge */ #ifndef HAVE_to_single STATIC_INLINE double to_single (uae_u32 value) { double frac; if ((value & 0x7fffffff) == 0) return (0.0); frac = (double) ((value & 0x7fffff) | 0x800000) / 8388608.0; if (value & 0x80000000) frac = -frac; return (ldexp (frac, ((value >> 23) & 0xff) - 127)); } #endif #ifndef HAVE_from_single STATIC_INLINE uae_u32 from_single (double src) { int expon; uae_u32 tmp; double frac; if (src == 0.0) return 0; if (src < 0) { tmp = 0x80000000; src = -src; } else { tmp = 0; } frac = frexp (src, &expon); frac += 0.5 / 16777216.0; if (frac >= 1.0) { frac /= 2.0; expon++; } return (tmp | (((expon + 127 - 1) & 0xff) << 23) | (((int) (frac * 16777216.0)) & 0x7fffff)); } #endif #ifndef HAVE_to_exten STATIC_INLINE double to_exten(uae_u32 wrd1, uae_u32 wrd2, uae_u32 wrd3) { double frac; if ((wrd1 & 0x7fff0000) == 0 && wrd2 == 0 && wrd3 == 0) return 0.0; frac = (double) wrd2 / 2147483648.0 + (double) wrd3 / 9223372036854775808.0; if (wrd1 & 0x80000000) frac = -frac; return ldexp (frac, ((wrd1 >> 16) & 0x7fff) - 16383); } #endif #ifndef HAVE_from_exten STATIC_INLINE void from_exten(double src, uae_u32 * wrd1, uae_u32 * wrd2, uae_u32 * wrd3) { int expon; double frac; if (src == 0.0) { *wrd1 = 0; *wrd2 = 0; *wrd3 = 0; return; } if (src < 0) { *wrd1 = 0x80000000; src = -src; } else { *wrd1 = 0; } frac = frexp (src, &expon); frac += 0.5 / 18446744073709551616.0; if (frac >= 1.0) { frac /= 2.0; expon++; } *wrd1 |= (((expon + 16383 - 1) & 0x7fff) << 16); *wrd2 = (uae_u32) (frac * 4294967296.0); *wrd3 = (uae_u32) (frac * 18446744073709551616.0 - *wrd2 * 4294967296.0); } #endif #ifndef HAVE_to_double STATIC_INLINE double to_double(uae_u32 wrd1, uae_u32 wrd2) { double frac; if ((wrd1 & 0x7fffffff) == 0 && wrd2 == 0) return 0.0; frac = (double) ((wrd1 & 0xfffff) | 0x100000) / 1048576.0 + (double) wrd2 / 4503599627370496.0; if (wrd1 & 0x80000000) frac = -frac; return ldexp (frac, ((wrd1 >> 20) & 0x7ff) - 1023); } #endif #ifndef HAVE_from_double STATIC_INLINE void from_double(double src, uae_u32 * wrd1, uae_u32 * wrd2) { int expon; int tmp; double frac; if (src == 0.0) { *wrd1 = 0; *wrd2 = 0; return; } if (src < 0) { *wrd1 = 0x80000000; src = -src; } else { *wrd1 = 0; } frac = frexp (src, &expon); frac += 0.5 / 9007199254740992.0; if (frac >= 1.0) { frac /= 2.0; expon++; } tmp = (uae_u32) (frac * 2097152.0); *wrd1 |= (((expon + 1023 - 1) & 0x7ff) << 20) | (tmp & 0xfffff); *wrd2 = (uae_u32) (frac * 9007199254740992.0 - tmp * 4294967296.0); } #endif fs-uae-2.2.3+dfsg/src/include/sana2.h0000644000175000017500000000042212162366655017442 0ustar glaubitzglaubitz /* * UAE - The Un*x Amiga Emulator * * SANAII compatible network driver emulation * * (c) 2007 Toni Wilen */ uaecptr netdev_startup (uaecptr resaddr); void netdev_install (void); void netdev_reset (void); void netdev_start_threads (void); extern int log_net; fs-uae-2.2.3+dfsg/src/include/amax.h0000644000175000017500000000031712162366655017367 0ustar glaubitzglaubitz void amax_diskwrite (uae_u16 w); void amax_bfe001_write (uae_u8 pra, uae_u8 dra); uae_u8 amax_disk_status (void); void amax_disk_select (uae_u8 v, uae_u8 ov); void amax_reset (void); void amax_init (void); fs-uae-2.2.3+dfsg/src/include/identify.h0000644000175000017500000000101212162366655020245 0ustar glaubitzglaubitz /* * UAE - The Un*x Amiga Emulator * * Tables for labelling amiga internals. * */ struct mem_labels { const TCHAR *name; uae_u32 adr; }; struct customData { const TCHAR *name; uae_u32 adr; uae_u8 rw, special; }; /* special: 1: DMA pointer high word 2: DMA pointer low word 4: ECS/AGA only 8: AGA only */ extern const struct mem_labels mem_labels[]; extern const struct mem_labels int_labels[]; extern const struct mem_labels trap_labels[]; extern const struct customData custd[]; fs-uae-2.2.3+dfsg/src/include/uae/0000755000175000017500000000000012162366655017041 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/src/include/uae/memory.h0000644000175000017500000002431212162366655020524 0ustar glaubitzglaubitz/* * UAE - The Un*x Amiga Emulator * * memory management * * Copyright 1995 Bernd Schmidt */ extern void memory_reset (void); extern void a1000_reset (void); #ifdef JIT extern int special_mem; #define S_READ 1 #define S_WRITE 2 extern uae_u8 *cache_alloc (int); extern void cache_free (uae_u8*); #endif bool init_shm (void); void free_shm (void); bool preinit_shm (void); extern bool canbang; extern int candirect; #ifdef ADDRESS_SPACE_24BIT #define MEMORY_BANKS 256 #define MEMORY_RANGE_MASK ((1<<24)-1) #else #define MEMORY_BANKS 65536 #define MEMORY_RANGE_MASK (~0) #endif typedef uae_u32 (REGPARAM3 *mem_get_func)(uaecptr) REGPARAM; typedef void (REGPARAM3 *mem_put_func)(uaecptr, uae_u32) REGPARAM; typedef uae_u8 *(REGPARAM3 *xlate_func)(uaecptr) REGPARAM; typedef int (REGPARAM3 *check_func)(uaecptr, uae_u32) REGPARAM; extern uae_u8 *address_space, *good_address_map; extern uae_u8 *chipmemory; extern uae_u32 allocated_chipmem; extern uae_u32 allocated_fastmem; extern uae_u32 allocated_bogomem; extern uae_u32 allocated_gfxmem; extern uae_u32 allocated_z3fastmem, allocated_z3fastmem2, allocated_z3chipmem; extern uae_u32 max_z3fastmem; extern uae_u32 allocated_a3000mem; extern uae_u32 allocated_cardmem; extern uae_u32 wait_cpu_cycle_read (uaecptr addr, int mode); extern void wait_cpu_cycle_write (uaecptr addr, int mode, uae_u32 v); extern uae_u32 wait_cpu_cycle_read_ce020 (uaecptr addr, int mode); extern void wait_cpu_cycle_write_ce020 (uaecptr addr, int mode, uae_u32 v); #undef DIRECT_MEMFUNCS_SUCCESSFUL #include "machdep/maccess.h" #define chipmem_start 0x00000000 #define bogomem_start 0x00C00000 #define cardmem_start 0x00E00000 #define kickmem_start 0x00F80000 extern uaecptr z3fastmem_start, z3fastmem2_start, z3chipmem_start; extern uaecptr p96ram_start; extern uaecptr fastmem_start; extern uaecptr a3000lmem_start, a3000hmem_start; extern bool ersatzkickfile; extern bool cloanto_rom, kickstart_rom; extern uae_u16 kickstart_version; extern bool uae_boot_rom; extern int uae_boot_rom_size; extern uaecptr rtarea_base; extern uae_u8* baseaddr[]; enum { ABFLAG_UNK = 0, ABFLAG_RAM = 1, ABFLAG_ROM = 2, ABFLAG_ROMIN = 4, ABFLAG_IO = 8, ABFLAG_NONE = 16, ABFLAG_SAFE = 32 }; typedef struct { /* These ones should be self-explanatory... */ mem_get_func lget, wget, bget; mem_put_func lput, wput, bput; /* Use xlateaddr to translate an Amiga address to a uae_u8 * that can * be used to address memory without calling the wget/wput functions. * This doesn't work for all memory banks, so this function may call * abort(). */ xlate_func xlateaddr; /* To prevent calls to abort(), use check before calling xlateaddr. * It checks not only that the memory bank can do xlateaddr, but also * that the pointer points to an area of at least the specified size. * This is used for example to translate bitplane pointers in custom.c */ check_func check; /* For those banks that refer to real memory, we can save the whole trouble of going through function calls, and instead simply grab the memory ourselves. This holds the memory address where the start of memory is for this particular bank. */ uae_u8 *baseaddr; const TCHAR *name; /* for instruction opcode/operand fetches */ mem_get_func lgeti, wgeti; int flags; } addrbank; #define CE_MEMBANK_FAST 0 #define CE_MEMBANK_CHIP 1 #define CE_MEMBANK_CIA 2 #define CE_MEMBANK_FAST16BIT 3 extern uae_u8 ce_banktype[65536], ce_cachable[65536]; extern uae_u8 *filesysory; extern uae_u8 *rtarea; extern addrbank chipmem_bank; extern addrbank chipmem_agnus_bank; extern addrbank chipmem_bank_ce2; extern addrbank kickmem_bank; extern addrbank custom_bank; extern addrbank clock_bank; extern addrbank cia_bank; extern addrbank rtarea_bank; extern addrbank expamem_bank; extern addrbank fastmem_bank; extern addrbank gfxmem_bank; extern addrbank gayle_bank; extern addrbank gayle2_bank; extern addrbank mbres_bank; extern addrbank akiko_bank; extern addrbank cardmem_bank; extern void rtarea_init (void); extern void rtarea_init_mem (void); extern void rtarea_setup (void); extern void expamem_init (void); extern void expamem_reset (void); extern void expamem_next (void); extern uae_u32 gfxmem_start; extern uae_u8 *gfxmemory; extern uae_u32 gfxmem_mask; extern uae_u16 last_custom_value1; /* Default memory access functions */ extern int REGPARAM3 default_check(uaecptr addr, uae_u32 size) REGPARAM; extern uae_u8 *REGPARAM3 default_xlate(uaecptr addr) REGPARAM; /* 680x0 opcode fetches */ extern uae_u32 REGPARAM3 dummy_lgeti (uaecptr addr) REGPARAM; extern uae_u32 REGPARAM3 dummy_wgeti (uaecptr addr) REGPARAM; #define bankindex(addr) (((uaecptr)(addr)) >> 16) extern addrbank *mem_banks[MEMORY_BANKS]; #ifdef JIT extern uae_u8 *baseaddr[MEMORY_BANKS]; #endif #define get_mem_bank(addr) (*mem_banks[bankindex(addr)]) #ifdef JIT #define put_mem_bank(addr, b, realstart) do { \ (mem_banks[bankindex(addr)] = (b)); \ if ((b)->baseaddr) \ baseaddr[bankindex(addr)] = (b)->baseaddr - (realstart); \ else \ baseaddr[bankindex(addr)] = (uae_u8*)(((uae_u8*)b)+1); \ } while (0) #else #define put_mem_bank(addr, b, realstart) \ (mem_banks[bankindex(addr)] = (b)); #endif extern void memory_init (void); extern void memory_cleanup (void); extern void map_banks (addrbank *bank, int first, int count, int realsize); extern void map_overlay (int chip); extern void memory_hardreset (int); extern void memory_clear (void); extern void free_fastmemory (void); #define longget(addr) (call_mem_get_func(get_mem_bank(addr).lget, addr)) #define wordget(addr) (call_mem_get_func(get_mem_bank(addr).wget, addr)) #define byteget(addr) (call_mem_get_func(get_mem_bank(addr).bget, addr)) #define longgeti(addr) (call_mem_get_func(get_mem_bank(addr).lgeti, addr)) #define wordgeti(addr) (call_mem_get_func(get_mem_bank(addr).wgeti, addr)) #define longput(addr,l) (call_mem_put_func(get_mem_bank(addr).lput, addr, l)) #define wordput(addr,w) (call_mem_put_func(get_mem_bank(addr).wput, addr, w)) #define byteput(addr,b) (call_mem_put_func(get_mem_bank(addr).bput, addr, b)) STATIC_INLINE uae_u32 get_long (uaecptr addr) { return longget (addr); } STATIC_INLINE uae_u32 get_word (uaecptr addr) { return wordget (addr); } STATIC_INLINE uae_u32 get_byte (uaecptr addr) { return byteget (addr); } STATIC_INLINE uae_u32 get_longi(uaecptr addr) { return longgeti (addr); } STATIC_INLINE uae_u32 get_wordi(uaecptr addr) { return wordgeti (addr); } /* * Read a host pointer from addr */ #if SIZEOF_VOID_P == 4 # define get_pointer(addr) ((void *)get_long (addr)) #else # if SIZEOF_VOID_P == 8 STATIC_INLINE void *get_pointer (uaecptr addr) { const unsigned int n = SIZEOF_VOID_P / 4; union { void *ptr; uae_u32 longs[SIZEOF_VOID_P / 4]; } p; unsigned int i; for (i = 0; i < n; i++) { #ifdef WORDS_BIGENDIAN p.longs[i] = get_long (addr + i * 4); #else p.longs[n - 1 - i] = get_long (addr + i * 4); #endif } return p.ptr; } # else # error "Unknown or unsupported pointer size." # endif #endif STATIC_INLINE void put_long (uaecptr addr, uae_u32 l) { longput(addr, l); } STATIC_INLINE void put_word (uaecptr addr, uae_u32 w) { wordput(addr, w); } STATIC_INLINE void put_byte (uaecptr addr, uae_u32 b) { byteput(addr, b); } extern void put_long_slow (uaecptr addr, uae_u32 v); extern void put_word_slow (uaecptr addr, uae_u32 v); extern void put_byte_slow (uaecptr addr, uae_u32 v); extern uae_u32 get_long_slow (uaecptr addr); extern uae_u32 get_word_slow (uaecptr addr); extern uae_u32 get_byte_slow (uaecptr addr); /* * Store host pointer v at addr */ #if SIZEOF_VOID_P == 4 # define put_pointer(addr, p) (put_long ((addr), (uae_u32)(p))) #else # if SIZEOF_VOID_P == 8 STATIC_INLINE void put_pointer (uaecptr addr, void *v) { const unsigned int n = SIZEOF_VOID_P / 4; union { void *ptr; uae_u32 longs[SIZEOF_VOID_P / 4]; } p; unsigned int i; p.ptr = v; for (i = 0; i < n; i++) { #ifdef WORDS_BIGENDIAN put_long (addr + i * 4, p.longs[i]); #else put_long (addr + i * 4, p.longs[n - 1 - i]); #endif } } # endif #endif STATIC_INLINE uae_u8 *get_real_address (uaecptr addr) { return get_mem_bank (addr).xlateaddr(addr); } STATIC_INLINE int valid_address (uaecptr addr, uae_u32 size) { return get_mem_bank (addr).check(addr, size); } extern int addr_valid (const TCHAR*, uaecptr,uae_u32); /* For faster access in custom chip emulation. */ extern void REGPARAM3 chipmem_lput (uaecptr, uae_u32) REGPARAM; extern void REGPARAM3 chipmem_wput (uaecptr, uae_u32) REGPARAM; extern void REGPARAM3 chipmem_bput (uaecptr, uae_u32) REGPARAM; extern uae_u32 REGPARAM3 chipmem_agnus_wget (uaecptr) REGPARAM; extern void REGPARAM3 chipmem_agnus_wput (uaecptr, uae_u32) REGPARAM; extern uae_u32 chipmem_mask, kickmem_mask; extern uae_u8 *kickmemory; extern addrbank dummy_bank; /* 68020+ Chip RAM DMA contention emulation */ extern void REGPARAM3 chipmem_bput_c2 (uaecptr, uae_u32) REGPARAM; extern uae_u32 (REGPARAM3 *chipmem_lget_indirect)(uaecptr) REGPARAM; extern uae_u32 (REGPARAM3 *chipmem_wget_indirect)(uaecptr) REGPARAM; extern uae_u32 (REGPARAM3 *chipmem_bget_indirect)(uaecptr) REGPARAM; extern void (REGPARAM3 *chipmem_lput_indirect)(uaecptr, uae_u32) REGPARAM; extern void (REGPARAM3 *chipmem_wput_indirect)(uaecptr, uae_u32) REGPARAM; extern void (REGPARAM3 *chipmem_bput_indirect)(uaecptr, uae_u32) REGPARAM; extern int (REGPARAM3 *chipmem_check_indirect)(uaecptr, uae_u32) REGPARAM; extern uae_u8 *(REGPARAM3 *chipmem_xlate_indirect)(uaecptr) REGPARAM; #ifdef NATMEM_OFFSET typedef struct shmpiece_reg { uae_u8 *native_address; int id; uae_u32 size; const TCHAR *name; struct shmpiece_reg *next; struct shmpiece_reg *prev; } shmpiece; extern shmpiece *shm_start; #endif extern uae_u8 *mapped_malloc (size_t, const TCHAR*); extern void mapped_free (uae_u8 *); extern void clearexec (void); extern void mapkick (void); extern void a3000_fakekick (int); extern uaecptr strcpyha_safe (uaecptr dst, const uae_char *src); extern uae_char *strcpyah_safe (uae_char *dst, uaecptr src, int maxsize); extern void memcpyha_safe (uaecptr dst, const uae_u8 *src, int size); extern void memcpyha (uaecptr dst, const uae_u8 *src, int size); extern void memcpyah_safe (uae_u8 *dst, uaecptr src, int size); extern void memcpyah (uae_u8 *dst, uaecptr src, int size); extern uae_s32 getz2size (struct uae_prefs *p); extern ULONG getz2endaddr (void); #ifdef FSUAE int uae_get_memory_checksum(); #endif fs-uae-2.2.3+dfsg/src/include/uae/fs.h0000644000175000017500000000014212162366655017617 0ustar glaubitzglaubitz#ifndef UAE_FS_H_ #define UAE_FS_H_ extern int g_amiga_savestate_docompress; #endif //UAE_FS_H_ fs-uae-2.2.3+dfsg/src/include/audio.h0000644000175000017500000000432312162366655017543 0ustar glaubitzglaubitz /* * UAE - The Un*x Amiga Emulator * * Sound emulation stuff * * Copyright 1995, 1996, 1997 Bernd Schmidt */ #ifdef FSUAE // FIXME: changed PERIOD_MAX from ULONG_MAX #define PERIOD_MAX UINT_MAX #else #define PERIOD_MAX ULONG_MAX #endif extern void aud0_handler (void); extern void aud1_handler (void); extern void aud2_handler (void); extern void aud3_handler (void); extern void AUDxDAT (int nr, uae_u16 value); extern void AUDxDAT (int nr, uae_u16 value, uaecptr addr); extern void AUDxVOL (int nr, uae_u16 value); extern void AUDxPER (int nr, uae_u16 value); extern void AUDxLCH (int nr, uae_u16 value); extern void AUDxLCL (int nr, uae_u16 value); extern void AUDxLEN (int nr, uae_u16 value); extern uae_u16 audio_dmal (void); extern void audio_state_machine (void); extern uaecptr audio_getpt (int nr, bool reset); extern int init_audio (void); extern void ahi_install (void); extern void audio_reset (void); extern void update_audio (void); extern void audio_evhandler (void); extern void audio_hsync (void); extern void audio_update_adkmasks (void); extern void update_sound (double freq, int longframe, int linetoggle); extern void led_filter_audio (void); extern void set_audio (void); extern int audio_activate (void); extern void audio_vsync (void); extern void audio_sampleripper(int); extern int sampleripper_enabled; extern void write_wavheader (struct zfile *wavfile, uae_u32 size, uae_u32 freq); enum { SND_MONO, SND_STEREO, SND_4CH_CLONEDSTEREO, SND_4CH, SND_6CH_CLONEDSTEREO, SND_6CH, SND_NONE }; STATIC_INLINE int get_audio_stereomode (int channels) { switch (channels) { case 1: return SND_MONO; case 2: return SND_STEREO; case 4: return SND_4CH; case 6: return SND_6CH; } return SND_STEREO; } STATIC_INLINE int get_audio_nativechannels (int stereomode) { int ch[] = { 1, 2, 4, 4, 6, 6, 0 }; return ch[stereomode]; } STATIC_INLINE int get_audio_amigachannels (int stereomode) { int ch[] = { 1, 2, 2, 4, 2, 4, 0 }; return ch[stereomode]; } STATIC_INLINE int get_audio_ismono (int stereomode) { if (stereomode == 0) return 1; return 0; } #define SOUND_MAX_DELAY_BUFFER 1024 #define SOUND_MAX_LOG_DELAY 10 #define MIXED_STEREO_MAX 16 #define MIXED_STEREO_SCALE 32 fs-uae-2.2.3+dfsg/src/include/zfile.h0000644000175000017500000001343512162366655017557 0ustar glaubitzglaubitz /* * UAE - The Un*x Amiga Emulator * * routines to handle compressed file automatically * * (c) 1996 Samuel Devulder */ struct zfile; struct zvolume; struct zdirectory; #define FS_DIRECTORY 0 #define FS_ARCHIVE 1 #define FS_CDFS 2 struct fs_dirhandle { int fstype; union { struct zdirectory *zd; struct my_opendir_s *od; struct cd_opendir_s *isod; }; }; struct fs_filehandle { int fstype; union { struct zfile *zf; struct my_openfile_s *of; struct cd_openfile_s *isof; }; }; typedef int (*zfile_callback)(struct zfile*, void*); extern struct zfile *zfile_fopen (const TCHAR *, const TCHAR *, int mask); extern struct zfile *zfile_fopen (const TCHAR *, const TCHAR *); extern struct zfile *zfile_fopen (const TCHAR *, const TCHAR *, int mask, int index); extern struct zfile *zfile_fopen_empty (struct zfile*, const TCHAR *name, uae_u64 size); extern struct zfile *zfile_fopen_empty (struct zfile*, const TCHAR *name); extern struct zfile *zfile_fopen_data (const TCHAR *name, uae_u64 size, const uae_u8 *data); extern struct zfile *zfile_fopen_load_zfile (struct zfile *f); extern uae_u8 *zfile_load_data (const TCHAR *name, const uae_u8 *data,int datalen, int *outlen); extern struct zfile *zfile_fopen_parent (struct zfile*, const TCHAR*, uae_u64 offset, uae_u64 size); extern int zfile_exists (const TCHAR *name); extern void zfile_fclose (struct zfile *); extern uae_s64 zfile_fseek (struct zfile *z, uae_s64 offset, int mode); extern uae_s64 zfile_ftell (struct zfile *z); extern uae_s64 zfile_size (struct zfile *z); extern size_t zfile_fread (void *b, size_t l1, size_t l2, struct zfile *z); extern size_t zfile_fwrite (const void *b, size_t l1, size_t l2, struct zfile *z); extern TCHAR *zfile_fgets (TCHAR *s, int size, struct zfile *z); extern char *zfile_fgetsa (char *s, int size, struct zfile *z); extern size_t zfile_fputs (struct zfile *z, const TCHAR *s); extern int zfile_getc (struct zfile *z); extern int zfile_putc (int c, struct zfile *z); extern int zfile_ferror (struct zfile *z); extern uae_u8 *zfile_getdata (struct zfile *z, uae_s64 offset, int len); extern void zfile_exit (void); extern int execute_command (TCHAR *); extern int zfile_iscompressed (struct zfile *z); extern int zfile_zcompress (struct zfile *dst, void *src, int size); extern int zfile_zuncompress (void *dst, int dstsize, struct zfile *src, int srcsize); extern int zfile_gettype (struct zfile *z); extern int zfile_zopen (const TCHAR *name, zfile_callback zc, void *user); extern TCHAR *zfile_getname (struct zfile *f); extern TCHAR *zfile_getfilename (struct zfile *f); extern uae_u32 zfile_crc32 (struct zfile *f); extern struct zfile *zfile_dup (struct zfile *f); extern struct zfile *zfile_gunzip (struct zfile *z); extern int zfile_is_diskimage (const TCHAR *name); extern int iszip (struct zfile *z); extern int zfile_convertimage (const TCHAR *src, const TCHAR *dst); extern struct zfile *zuncompress (struct znode*, struct zfile *z, int dodefault, int mask, int *retcode, int index); extern void zfile_seterror (const TCHAR *format, ...); extern TCHAR *zfile_geterror (void); extern int zfile_truncate (struct zfile *z, uae_s64 size); #define ZFD_NONE 0 #define ZFD_ARCHIVE 1 //zip/lha.. #define ZFD_ADF 2 //adf as a filesystem #define ZFD_HD 4 //rdb/hdf #define ZFD_UNPACK 8 //gzip,dms #define ZFD_RAWDISK 16 //fdi->adf,ipf->adf etc.. #define ZFD_CD 32 //cue/iso, cue has priority over iso #define ZFD_DISKHISTORY 0x100 //allow diskhistory (if disk image) #define ZFD_CHECKONLY 0x200 //file exists checkc #define ZFD_DELAYEDOPEN 0x400 //do not unpack, just get metadata #define ZFD_NORECURSE 0x10000 // do not recurse archives #define ZFD_NORMAL (ZFD_ARCHIVE|ZFD_UNPACK) #define ZFD_ALL 0x0000ffff #define ZFD_RAWDISK_AMIGA 0x10000 #define ZFD_RAWDISK_PC 0x200000 #define ZFILE_UNKNOWN 0 #define ZFILE_CONFIGURATION 1 #define ZFILE_DISKIMAGE 2 #define ZFILE_ROM 3 #define ZFILE_KEY 4 #define ZFILE_HDF 5 #define ZFILE_STATEFILE 6 #define ZFILE_NVR 7 #define ZFILE_HDFRDB 8 #define ZFILE_CDIMAGE 9 extern const TCHAR *uae_archive_extensions[]; extern const TCHAR *uae_ignoreextensions[]; extern const TCHAR *uae_diskimageextensions[]; extern struct zvolume *zfile_fopen_archive (const TCHAR *filename); extern struct zvolume *zfile_fopen_archive (const TCHAR *filename, int flags); extern struct zvolume *zfile_fopen_archive_root (const TCHAR *filename, int flags); extern void zfile_fclose_archive (struct zvolume *zv); extern int zfile_fs_usage_archive (const TCHAR *path, const TCHAR *disk, struct fs_usage *fsp); extern int zfile_stat_archive (const TCHAR *path, struct mystat *statbuf); extern struct zdirectory *zfile_opendir_archive (const TCHAR *path); extern struct zdirectory *zfile_opendir_archive (const TCHAR *path, int flags); extern void zfile_closedir_archive (struct zdirectory *); extern int zfile_readdir_archive (struct zdirectory *, TCHAR*); extern int zfile_readdir_archive (struct zdirectory *, TCHAR*, bool fullpath); extern void zfile_resetdir_archive (struct zdirectory *); extern int zfile_fill_file_attrs_archive (const TCHAR *path, int *isdir, int *flags, TCHAR **comment); extern uae_s64 zfile_lseek_archive (struct zfile *d, uae_s64 offset, int whence); extern uae_s64 zfile_fsize_archive (struct zfile *d); extern unsigned int zfile_read_archive (struct zfile *d, void *b, unsigned int size); extern void zfile_close_archive (struct zfile *d); extern struct zfile *zfile_open_archive (const TCHAR *path, int flags); extern int zfile_exists_archive (const TCHAR *path, const TCHAR *rel); extern bool zfile_needwrite (struct zfile*); struct mytimeval { uae_s64 tv_sec; uae_s32 tv_usec; }; struct mystat { uae_s64 size; uae_u32 mode; struct mytimeval mtime; }; extern void timeval_to_amiga (struct mytimeval *tv, int* days, int* mins, int* ticks); extern void amiga_to_timeval (struct mytimeval *tv, int days, int mins, int ticks);fs-uae-2.2.3+dfsg/src/include/uaeresource.h0000644000175000017500000000010612162366655020757 0ustar glaubitzglaubitz uaecptr uaeres_startup (uaecptr resaddr); void uaeres_install (void);fs-uae-2.2.3+dfsg/src/include/keyboard.h0000644000175000017500000001117612162366655020246 0ustar glaubitzglaubitz /* * UAE - The Un*x Amiga Emulator * * Amiga keycodes * * (c) 1995 Bernd Schmidt */ /* First, two dummies */ #define AK_mousestuff 0x100 #define AK_inhibit 0x101 /* This mutates into AK_CTRL in keybuf.c. */ #define AK_RCTRL 0x7f #define AK_A 0x20 #define AK_B 0x35 #define AK_C 0x33 #define AK_D 0x22 #define AK_E 0x12 #define AK_F 0x23 #define AK_G 0x24 #define AK_H 0x25 #define AK_I 0x17 #define AK_J 0x26 #define AK_K 0x27 #define AK_L 0x28 #define AK_M 0x37 #define AK_N 0x36 #define AK_O 0x18 #define AK_P 0x19 #define AK_Q 0x10 #define AK_R 0x13 #define AK_S 0x21 #define AK_T 0x14 #define AK_U 0x16 #define AK_V 0x34 #define AK_W 0x11 #define AK_X 0x32 #define AK_Y 0x15 #define AK_Z 0x31 #define AK_0 0x0A #define AK_1 0x01 #define AK_2 0x02 #define AK_3 0x03 #define AK_4 0x04 #define AK_5 0x05 #define AK_6 0x06 #define AK_7 0x07 #define AK_8 0x08 #define AK_9 0x09 #define AK_NP0 0x0F #define AK_NP1 0x1D #define AK_NP2 0x1E #define AK_NP3 0x1F #define AK_NP4 0x2D #define AK_NP5 0x2E #define AK_NP6 0x2F #define AK_NP7 0x3D #define AK_NP8 0x3E #define AK_NP9 0x3F #define AK_NPDIV 0x5C #define AK_NPMUL 0x5D #define AK_NPSUB 0x4A #define AK_NPADD 0x5E #define AK_NPDEL 0x3C #define AK_NPLPAREN 0x5A #define AK_NPRPAREN 0x5B #define AK_F1 0x50 #define AK_F2 0x51 #define AK_F3 0x52 #define AK_F4 0x53 #define AK_F5 0x54 #define AK_F6 0x55 #define AK_F7 0x56 #define AK_F8 0x57 #define AK_F9 0x58 #define AK_F10 0x59 #define AK_UP 0x4C #define AK_DN 0x4D #define AK_LF 0x4F #define AK_RT 0x4E #define AK_SPC 0x40 #define AK_BS 0x41 #define AK_TAB 0x42 #define AK_ENT 0x43 #define AK_RET 0x44 #define AK_ESC 0x45 #define AK_DEL 0x46 #define AK_LSH 0x60 #define AK_RSH 0x61 #define AK_CAPSLOCK 0x62 #define AK_CTRL 0x63 #define AK_LALT 0x64 #define AK_RALT 0x65 #define AK_LAMI 0x66 #define AK_RAMI 0x67 #define AK_HELP 0x5F /* The following have different mappings on national keyboards */ #define AK_LBRACKET 0x1A #define AK_RBRACKET 0x1B #define AK_SEMICOLON 0x29 #define AK_COMMA 0x38 #define AK_PERIOD 0x39 #define AK_SLASH 0x3A #define AK_BACKSLASH 0x0D #define AK_QUOTE 0x2A #define AK_NUMBERSIGN 0x2B #define AK_LTGT 0x30 #define AK_BACKQUOTE 0x00 #define AK_MINUS 0x0B #define AK_EQUAL 0x0C #define AK_RESETWARNING 0x78 #define AK_INIT_POWERUP 0xfd #define AK_TERM_POWERUP 0xfe // KB LED stuff #define KBLED_NUMLOCKB 0 #define KBLED_CAPSLOCKB 1 #define KBLED_SCROLLLOCKB 2 #define KBLED_NUMLOCKM (1 << KBLED_NUMLOCKB) #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, AKS_FLOPPY0, AKS_FLOPPY1, AKS_FLOPPY2, AKS_FLOPPY3, AKS_EFLOPPY0, AKS_EFLOPPY1, AKS_EFLOPPY2, AKS_EFLOPPY3, AKS_TOGGLEDEFAULTSCREEN, AKS_TOGGLEWINDOWEDFULLSCREEN, AKS_TOGGLEFULLWINDOWFULLSCREEN, AKS_TOGGLEWINDOWFULLWINDOW, AKS_ENTERDEBUGGER, AKS_IRQ7, AKS_PAUSE, AKS_WARP, AKS_INHIBITSCREEN, AKS_STATEREWIND, AKS_STATECURRENT, AKS_STATECAPTURE, AKS_VOLDOWN, AKS_VOLUP, AKS_VOLMUTE, AKS_MVOLDOWN, AKS_MVOLUP, AKS_MVOLMUTE, AKS_QUIT, AKS_HARDRESET, AKS_SOFTRESET, AKS_STATESAVEQUICK, AKS_STATERESTOREQUICK, AKS_STATESAVEQUICK1, AKS_STATERESTOREQUICK1, AKS_STATESAVEQUICK2, AKS_STATERESTOREQUICK2, AKS_STATESAVEQUICK3, AKS_STATERESTOREQUICK3, AKS_STATESAVEQUICK4, AKS_STATERESTOREQUICK4, AKS_STATESAVEQUICK5, AKS_STATERESTOREQUICK5, AKS_STATESAVEQUICK6, AKS_STATERESTOREQUICK6, AKS_STATESAVEQUICK7, AKS_STATERESTOREQUICK7, AKS_STATESAVEQUICK8, AKS_STATERESTOREQUICK8, AKS_STATESAVEQUICK9, AKS_STATERESTOREQUICK9, AKS_STATESAVEDIALOG, AKS_STATERESTOREDIALOG, AKS_DECREASEREFRESHRATE, AKS_INCREASEREFRESHRATE, AKS_ARCADIADIAGNOSTICS, AKS_ARCADIAPLY1, AKS_ARCADIAPLY2, AKS_ARCADIACOIN1, AKS_ARCADIACOIN2, AKS_TOGGLEMOUSEGRAB, AKS_SWITCHINTERPOL, AKS_INPUT_CONFIG_1,AKS_INPUT_CONFIG_2,AKS_INPUT_CONFIG_3,AKS_INPUT_CONFIG_4, AKS_DISKSWAPPER_NEXT,AKS_DISKSWAPPER_PREV, AKS_DISKSWAPPER_INSERT0,AKS_DISKSWAPPER_INSERT1,AKS_DISKSWAPPER_INSERT2,AKS_DISKSWAPPER_INSERT3, AKS_DISK_PREV0, AKS_DISK_PREV1, AKS_DISK_PREV2, AKS_DISK_PREV3, AKS_DISK_NEXT0, AKS_DISK_NEXT1, AKS_DISK_NEXT2, AKS_DISK_NEXT3, AKS_CDTV_FRONT_PANEL_STOP, AKS_CDTV_FRONT_PANEL_PLAYPAUSE, AKS_CDTV_FRONT_PANEL_PREV, AKS_CDTV_FRONT_PANEL_NEXT, AKS_CDTV_FRONT_PANEL_REW, AKS_CDTV_FRONT_PANEL_FF, AKS_QUALIFIER1, AKS_QUALIFIER2, AKS_QUALIFIER3, AKS_QUALIFIER4, AKS_QUALIFIER5, AKS_QUALIFIER6, AKS_QUALIFIER7, AKS_QUALIFIER8, AKS_QUALIFIER_SPECIAL, AKS_QUALIFIER_SHIFT, AKS_QUALIFIER_CONTROL, AKS_QUALIFIER_ALT, AKS_QUALIFIER_WIN }; #define AKS_FIRST AKS_ENTERGUI extern int target_checkcapslock (int, int *);fs-uae-2.2.3+dfsg/src/include/cpummu.h0000644000175000017500000004040412162366655017750 0ustar glaubitzglaubitz/* * cpummu.h - MMU emulation * * Copyright (c) 2001-2004 Milan Jurik of ARAnyM dev team (see AUTHORS) * * Inspired by UAE MMU patch * * This file is part of the ARAnyM project which builds a new and powerful * TOS/FreeMiNT compatible virtual machine running on almost any hardware. * * ARAnyM is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * ARAnyM is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with ARAnyM; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef CPUMMU_H #define CPUMMU_H #ifndef FULLMMU #define FULLMMU #endif #define DUNUSED(x) #define D #if DEBUG #define bug write_log #else #define bug #endif struct m68k_exception { int prb; m68k_exception (int exc) : prb (exc) {} operator int() { return prb; } }; #define SAVE_EXCEPTION #define RESTORE_EXCEPTION #define TRY(var) try #define CATCH(var) catch(m68k_exception var) #define THROW(n) throw m68k_exception(n) #define THROW_AGAIN(var) throw #define VOLATILE #define ALWAYS_INLINE __inline #define likely(x) x #define unlikely(x) x static __inline void flush_internals (void) { } typedef uae_u8 flagtype; struct xttrx { uae_u32 log_addr_base : 8; uae_u32 log_addr_mask : 8; uae_u32 enable : 1; uae_u32 s_field : 2; uae_u32 : 3; uae_u32 usr1 : 1; uae_u32 usr0 : 1; uae_u32 : 1; uae_u32 cmode : 2; uae_u32 : 2; uae_u32 write : 1; uae_u32 : 2; }; struct mmusr_t { uae_u32 phys_addr : 20; uae_u32 bus_err : 1; uae_u32 global : 1; uae_u32 usr1 : 1; uae_u32 usr0 : 1; uae_u32 super : 1; uae_u32 cmode : 2; uae_u32 modif : 1; uae_u32 : 1; uae_u32 write : 1; uae_u32 ttrhit : 1; uae_u32 resident : 1; }; struct log_addr4 { uae_u32 rif : 7; uae_u32 pif : 7; uae_u32 paif : 6; uae_u32 poff : 12; }; struct log_addr8 { uae_u32 rif : 7; uae_u32 pif : 7; uae_u32 paif : 5; uae_u32 poff : 13; }; #define MMU_TEST_PTEST 1 #define MMU_TEST_VERBOSE 2 #define MMU_TEST_FORCE_TABLE_SEARCH 4 #define MMU_TEST_NO_BUSERR 8 extern void mmu_dump_tables(void); #define MMU_TTR_LOGICAL_BASE 0xff000000 #define MMU_TTR_LOGICAL_MASK 0x00ff0000 #define MMU_TTR_BIT_ENABLED (1 << 15) #define MMU_TTR_BIT_SFIELD_ENABLED (1 << 14) #define MMU_TTR_BIT_SFIELD_SUPER (1 << 13) #define MMU_TTR_SFIELD_SHIFT 13 #define MMU_TTR_UX_MASK ((1 << 9) | (1 << 8)) #define MMU_TTR_UX_SHIFT 8 #define MMU_TTR_CACHE_MASK ((1 << 6) | (1 << 5)) #define MMU_TTR_CACHE_SHIFT 5 #define MMU_TTR_BIT_WRITE_PROTECT (1 << 2) #define MMU_UDT_MASK 3 #define MMU_PDT_MASK 3 #define MMU_DES_WP 4 #define MMU_DES_USED 8 /* page descriptors only */ #define MMU_DES_MODIFIED 16 #define MMU_DES_SUPER (1 << 7) #define MMU_DES_GLOBAL (1 << 10) #define MMU_ROOT_PTR_ADDR_MASK 0xfffffe00 #define MMU_PTR_PAGE_ADDR_MASK_8 0xffffff80 #define MMU_PTR_PAGE_ADDR_MASK_4 0xffffff00 #define MMU_PAGE_INDIRECT_MASK 0xfffffffc #define MMU_PAGE_ADDR_MASK_8 0xffffe000 #define MMU_PAGE_ADDR_MASK_4 0xfffff000 #define MMU_PAGE_UR_MASK_8 ((1 << 12) | (1 << 11)) #define MMU_PAGE_UR_MASK_4 (1 << 11) #define MMU_PAGE_UR_SHIFT 11 #define MMU_MMUSR_ADDR_MASK 0xfffff000 #define MMU_MMUSR_B (1 << 11) #define MMU_MMUSR_G (1 << 10) #define MMU_MMUSR_U1 (1 << 9) #define MMU_MMUSR_U0 (1 << 8) #define MMU_MMUSR_Ux (MMU_MMUSR_U1 | MMU_MMUSR_U0) #define MMU_MMUSR_S (1 << 7) #define MMU_MMUSR_CM ((1 << 6) | ( 1 << 5)) #define MMU_MMUSR_M (1 << 4) #define MMU_MMUSR_W (1 << 2) #define MMU_MMUSR_T (1 << 1) #define MMU_MMUSR_R (1 << 0) /* special status word (access error stack frame) */ #define MMU_SSW_TM 0x0007 #define MMU_SSW_TT 0x0018 #define MMU_SSW_SIZE 0x0060 #define MMU_SSW_SIZE_B 0x0020 #define MMU_SSW_SIZE_W 0x0040 #define MMU_SSW_SIZE_L 0x0000 #define MMU_SSW_RW 0x0100 #define MMU_SSW_LK 0x0200 #define MMU_SSW_ATC 0x0400 #define MMU_SSW_MA 0x0800 #define MMU_SSW_CM 0x1000 #define MMU_SSW_CT 0x2000 #define MMU_SSW_CU 0x4000 #define MMU_SSW_CP 0x8000 #define TTR_I0 4 #define TTR_I1 5 #define TTR_D0 6 #define TTR_D1 7 #define TTR_NO_MATCH 0 #define TTR_NO_WRITE 1 #define TTR_OK_MATCH 2 struct mmu_atc_line { uae_u16 tag; unsigned tt : 1; unsigned valid_data : 1; unsigned valid_inst : 1; unsigned global : 1; unsigned modified : 1; unsigned write_protect : 1; unsigned hw : 1; unsigned bus_fault : 1; uaecptr phys; }; /* * We don't need to store the whole logical address in the atc cache, as part of * it is encoded as index into the cache. 14 bits of the address are stored in * the tag, this means at least 6 bits must go into the index. The upper two * bits of the tag define the type of data in the atc line: * - 00: a normal memory address * - 11: invalid memory address or hardware access * (generated via ~ATC_TAG(addr) in the slow path) * - 10: empty atc line */ #define ATC_TAG_SHIFT 18 #define ATC_TAG(addr) ((uae_u32)(addr) >> ATC_TAG_SHIFT) #define ATC_L1_SIZE_LOG 8 #define ATC_L1_SIZE (1 << ATC_L1_SIZE_LOG) #define ATC_L1_INDEX(addr) (((addr) >> 12) % ATC_L1_SIZE) /* * first level atc cache * indexed by [super][data][rw][idx] */ typedef struct mmu_atc_line mmu_atc_l1_array[2][2][ATC_L1_SIZE]; extern mmu_atc_l1_array atc_l1[2]; extern mmu_atc_l1_array *current_atc; #define ATC_L2_SIZE_LOG 12 #define ATC_L2_SIZE (1 << ATC_L2_SIZE_LOG) #define ATC_L2_INDEX(addr) ((((addr) >> 12) ^ ((addr) >> (32 - ATC_L2_SIZE_LOG))) % ATC_L2_SIZE) /* * lookup address in the level 1 atc cache, * the data and write arguments are constant in the common, * thus allows gcc to generate a constant offset. */ static ALWAYS_INLINE bool mmu_lookup(uaecptr addr, bool data, bool write, struct mmu_atc_line **cl) { addr >>= 12; *cl = &(*current_atc)[data ? 1 : 0][write ? 1 : 0][addr % ATC_L1_SIZE]; return (*cl)->tag == addr >> (ATC_TAG_SHIFT - 12); } /* * similiar to mmu_user_lookup, but for the use of the moves instruction */ static ALWAYS_INLINE bool mmu_user_lookup(uaecptr addr, bool super, bool data, bool write, struct mmu_atc_line **cl) { addr >>= 12; *cl = &atc_l1[super ? 1 : 0][data ? 1 : 0][write ? 1 : 0][addr % ATC_L1_SIZE]; return (*cl)->tag == addr >> (ATC_TAG_SHIFT - 12); } extern uae_u16 REGPARAM3 mmu_get_word_unaligned(uaecptr addr, bool data) REGPARAM; extern uae_u32 REGPARAM3 mmu_get_long_unaligned(uaecptr addr, bool data) REGPARAM; extern uae_u8 REGPARAM3 mmu_get_byte_slow(uaecptr addr, bool super, bool data, int size, struct mmu_atc_line *cl) REGPARAM; extern uae_u16 REGPARAM3 mmu_get_word_slow(uaecptr addr, bool super, bool data, int size, struct mmu_atc_line *cl) REGPARAM; extern uae_u32 REGPARAM3 mmu_get_long_slow(uaecptr addr, bool super, bool data, int size, struct mmu_atc_line *cl) REGPARAM; extern void REGPARAM3 mmu_put_word_unaligned(uaecptr addr, uae_u16 val, bool data) REGPARAM; extern void REGPARAM3 mmu_put_long_unaligned(uaecptr addr, uae_u32 val, bool data) REGPARAM; extern void REGPARAM3 mmu_put_byte_slow(uaecptr addr, uae_u8 val, bool super, bool data, int size, struct mmu_atc_line *cl) REGPARAM; extern void REGPARAM3 mmu_put_word_slow(uaecptr addr, uae_u16 val, bool super, bool data, int size, struct mmu_atc_line *cl) REGPARAM; extern void REGPARAM3 mmu_put_long_slow(uaecptr addr, uae_u32 val, bool super, bool data, int size, struct mmu_atc_line *cl) REGPARAM; extern void mmu_make_transparent_region(uaecptr baseaddr, uae_u32 size, int datamode); #define FC_DATA (regs.s ? 5 : 1) #define FC_INST (regs.s ? 6 : 2) extern uaecptr REGPARAM3 mmu_translate(uaecptr addr, bool super, bool data, bool write) REGPARAM; extern uae_u32 REGPARAM3 sfc_get_long(uaecptr addr) REGPARAM; extern uae_u16 REGPARAM3 sfc_get_word(uaecptr addr) REGPARAM; extern uae_u8 REGPARAM3 sfc_get_byte(uaecptr addr) REGPARAM; extern void REGPARAM3 dfc_put_long(uaecptr addr, uae_u32 val) REGPARAM; extern void REGPARAM3 dfc_put_word(uaecptr addr, uae_u16 val) REGPARAM; extern void REGPARAM3 dfc_put_byte(uaecptr addr, uae_u8 val) REGPARAM; extern void REGPARAM3 mmu_op_real(uae_u32 opcode, uae_u16 extra) REGPARAM; extern void REGPARAM3 mmu_reset(void) REGPARAM; extern void REGPARAM3 mmu_set_tc(uae_u16 tc) REGPARAM; extern void REGPARAM3 mmu_set_super(bool super) REGPARAM; static ALWAYS_INLINE bool is_unaligned(uaecptr addr, int size) { return unlikely((addr & (size - 1)) && (addr ^ (addr + size - 1)) & 0x1000); } static ALWAYS_INLINE uaecptr mmu_get_real_address(uaecptr addr, struct mmu_atc_line *cl) { return cl->phys + addr; } static ALWAYS_INLINE void phys_put_long(uaecptr addr, uae_u32 l) { longput(addr, l); } static ALWAYS_INLINE void phys_put_word(uaecptr addr, uae_u32 w) { wordput(addr, w); } static ALWAYS_INLINE void phys_put_byte(uaecptr addr, uae_u32 b) { byteput(addr, b); } static ALWAYS_INLINE uae_u32 phys_get_long(uaecptr addr) { return longget (addr); } static ALWAYS_INLINE uae_u32 phys_get_word(uaecptr addr) { return wordget (addr); } static ALWAYS_INLINE uae_u32 phys_get_byte(uaecptr addr) { return byteget (addr); } static ALWAYS_INLINE uae_u32 mmu_get_long(uaecptr addr, bool data, int size) { struct mmu_atc_line *cl; if (likely(mmu_lookup(addr, data, false, &cl))) return phys_get_long(mmu_get_real_address(addr, cl)); return mmu_get_long_slow(addr, regs.s != 0, data, size, cl); } static ALWAYS_INLINE uae_u16 mmu_get_word(uaecptr addr, bool data, int size) { struct mmu_atc_line *cl; if (likely(mmu_lookup(addr, data, false, &cl))) return phys_get_word(mmu_get_real_address(addr, cl)); return mmu_get_word_slow(addr, regs.s != 0, data, size, cl); } static ALWAYS_INLINE uae_u8 mmu_get_byte(uaecptr addr, bool data, int size) { struct mmu_atc_line *cl; if (likely(mmu_lookup(addr, data, false, &cl))) return phys_get_byte(mmu_get_real_address(addr, cl)); return mmu_get_byte_slow(addr, regs.s != 0, data, size, cl); } static ALWAYS_INLINE void mmu_put_long(uaecptr addr, uae_u32 val, bool data, int size) { struct mmu_atc_line *cl; if (likely(mmu_lookup(addr, data, true, &cl))) phys_put_long(mmu_get_real_address(addr, cl), val); else mmu_put_long_slow(addr, val, regs.s != 0, data, size, cl); } static ALWAYS_INLINE void mmu_put_word(uaecptr addr, uae_u16 val, bool data, int size) { struct mmu_atc_line *cl; if (likely(mmu_lookup(addr, data, true, &cl))) phys_put_word(mmu_get_real_address(addr, cl), val); else mmu_put_word_slow(addr, val, regs.s != 0, data, size, cl); } static ALWAYS_INLINE void mmu_put_byte(uaecptr addr, uae_u8 val, bool data, int size) { struct mmu_atc_line *cl; if (likely(mmu_lookup(addr, data, true, &cl))) phys_put_byte(mmu_get_real_address(addr, cl), val); else mmu_put_byte_slow(addr, val, regs.s != 0, data, size, cl); } static ALWAYS_INLINE uae_u32 mmu_get_user_long(uaecptr addr, bool super, bool data, int size) { struct mmu_atc_line *cl; if (likely(mmu_user_lookup(addr, super, data, false, &cl))) return phys_get_long(mmu_get_real_address(addr, cl)); return mmu_get_long_slow(addr, super, data, size, cl); } static ALWAYS_INLINE uae_u16 mmu_get_user_word(uaecptr addr, bool super, bool data, int size) { struct mmu_atc_line *cl; if (likely(mmu_user_lookup(addr, super, data, false, &cl))) return phys_get_word(mmu_get_real_address(addr, cl)); return mmu_get_word_slow(addr, super, data, size, cl); } static ALWAYS_INLINE uae_u8 mmu_get_user_byte(uaecptr addr, bool super, bool data, int size) { struct mmu_atc_line *cl; if (likely(mmu_user_lookup(addr, super, data, false, &cl))) return phys_get_byte(mmu_get_real_address(addr, cl)); return mmu_get_byte_slow(addr, super, data, size, cl); } static ALWAYS_INLINE void mmu_put_user_long(uaecptr addr, uae_u32 val, bool super, bool data, int size) { struct mmu_atc_line *cl; if (likely(mmu_user_lookup(addr, super, data, true, &cl))) phys_put_long(mmu_get_real_address(addr, cl), val); else mmu_put_long_slow(addr, val, super, data, size, cl); } static ALWAYS_INLINE void mmu_put_user_word(uaecptr addr, uae_u16 val, bool super, bool data, int size) { struct mmu_atc_line *cl; if (likely(mmu_user_lookup(addr, super, data, true, &cl))) phys_put_word(mmu_get_real_address(addr, cl), val); else mmu_put_word_slow(addr, val, super, data, size, cl); } static ALWAYS_INLINE void mmu_put_user_byte(uaecptr addr, uae_u8 val, bool super, bool data, int size) { struct mmu_atc_line *cl; if (likely(mmu_user_lookup(addr, super, data, true, &cl))) phys_put_byte(mmu_get_real_address(addr, cl), val); else mmu_put_byte_slow(addr, val, super, data, size, cl); } static ALWAYS_INLINE void HWput_l(uaecptr addr, uae_u32 l) { put_long (addr, l); } static ALWAYS_INLINE void HWput_w(uaecptr addr, uae_u32 w) { put_word (addr, w); } static ALWAYS_INLINE void HWput_b(uaecptr addr, uae_u32 b) { put_byte (addr, b); } static ALWAYS_INLINE uae_u32 HWget_l(uaecptr addr) { return get_long (addr); } static ALWAYS_INLINE uae_u32 HWget_w(uaecptr addr) { return get_word (addr); } static ALWAYS_INLINE uae_u32 HWget_b(uaecptr addr) { return get_byte (addr); } static ALWAYS_INLINE uae_u32 uae_mmu_get_ilong(uaecptr addr) { if (unlikely(is_unaligned(addr, 4))) return mmu_get_long_unaligned(addr, false); return mmu_get_long(addr, false, sz_long); } static ALWAYS_INLINE uae_u16 uae_mmu_get_iword(uaecptr addr) { if (unlikely(is_unaligned(addr, 2))) return mmu_get_word_unaligned(addr, false); return mmu_get_word(addr, false, sz_word); } static ALWAYS_INLINE uae_u16 uae_mmu_get_ibyte(uaecptr addr) { return mmu_get_byte(addr, false, sz_byte); } static ALWAYS_INLINE uae_u32 uae_mmu_get_long(uaecptr addr) { if (unlikely(is_unaligned(addr, 4))) return mmu_get_long_unaligned(addr, true); return mmu_get_long(addr, true, sz_long); } static ALWAYS_INLINE uae_u16 uae_mmu_get_word(uaecptr addr) { if (unlikely(is_unaligned(addr, 2))) return mmu_get_word_unaligned(addr, true); return mmu_get_word(addr, true, sz_word); } static ALWAYS_INLINE uae_u8 uae_mmu_get_byte(uaecptr addr) { return mmu_get_byte(addr, true, sz_byte); } static ALWAYS_INLINE void uae_mmu_put_long(uaecptr addr, uae_u32 val) { if (unlikely(is_unaligned(addr, 4))) mmu_put_long_unaligned(addr, val, true); else mmu_put_long(addr, val, true, sz_long); } static ALWAYS_INLINE void uae_mmu_put_word(uaecptr addr, uae_u16 val) { if (unlikely(is_unaligned(addr, 2))) mmu_put_word_unaligned(addr, val, true); else mmu_put_word(addr, val, true, sz_word); } static ALWAYS_INLINE void uae_mmu_put_byte(uaecptr addr, uae_u8 val) { mmu_put_byte(addr, val, true, sz_byte); } STATIC_INLINE void put_byte_mmu (uaecptr addr, uae_u32 v) { uae_mmu_put_byte (addr, v); } STATIC_INLINE void put_word_mmu (uaecptr addr, uae_u32 v) { uae_mmu_put_word (addr, v); } STATIC_INLINE void put_long_mmu (uaecptr addr, uae_u32 v) { uae_mmu_put_long (addr, v); } STATIC_INLINE uae_u32 get_byte_mmu (uaecptr addr) { return uae_mmu_get_byte (addr); } STATIC_INLINE uae_u32 get_word_mmu (uaecptr addr) { return uae_mmu_get_word (addr); } STATIC_INLINE uae_u32 get_long_mmu (uaecptr addr) { return uae_mmu_get_long (addr); } STATIC_INLINE uae_u32 get_ibyte_mmu (int o) { uae_u32 pc = m68k_getpc () + o; return uae_mmu_get_iword (pc); } STATIC_INLINE uae_u32 get_iword_mmu (int o) { uae_u32 pc = m68k_getpc () + o; return uae_mmu_get_iword (pc); } STATIC_INLINE uae_u32 get_ilong_mmu (int o) { uae_u32 pc = m68k_getpc () + o; return uae_mmu_get_ilong (pc); } STATIC_INLINE uae_u32 next_iword_mmu (void) { uae_u32 pc = m68k_getpc (); m68k_incpci (2); return uae_mmu_get_iword (pc); } STATIC_INLINE uae_u32 next_ilong_mmu (void) { uae_u32 pc = m68k_getpc (); m68k_incpci (4); return uae_mmu_get_ilong (pc); } extern void m68k_do_rts_mmu (void); extern void m68k_do_rte_mmu (uaecptr a7); extern void m68k_do_bsr_mmu (uaecptr oldpc, uae_s32 offset); struct mmufixup { int reg; uae_u32 value; }; extern struct mmufixup mmufixup[2]; #endif /* CPUMMU_H */ fs-uae-2.2.3+dfsg/src/include/events_normal.h0000644000175000017500000000402712162366655021317 0ustar glaubitzglaubitz STATIC_INLINE void cycles_do_special (void) { } STATIC_INLINE void set_cycles (int c) { } STATIC_INLINE void events_schedule (void) { int i; unsigned long int mintime = ~0L; for (i = 0; i < ev_max; i++) { if (eventtab[i].active) { unsigned long int eventtime = eventtab[i].evtime - currcycle; if (eventtime < mintime) mintime = eventtime; } } nextevent = currcycle + mintime; } extern volatile bool thread_vblank_found; STATIC_INLINE void do_cycles_slow (unsigned long cycles_to_add) { if (is_lastline && eventtab[ev_hsync].evtime - currcycle <= cycles_to_add && (long int)(read_processor_time () - vsyncmintime) < 0 && !thread_vblank_found) return; while ((nextevent - currcycle) <= cycles_to_add) { int i; cycles_to_add -= (nextevent - currcycle); currcycle = nextevent; for (i = 0; i < ev_max; i++) { if (eventtab[i].active && eventtab[i].evtime == currcycle) { (*eventtab[i].handler)(); } } events_schedule(); } currcycle += cycles_to_add; } STATIC_INLINE void do_cycles_fast (void) { if (is_lastline && eventtab[ev_hsync].evtime - currcycle <= 1 && (long int)(read_processor_time () - vsyncmintime) < 0) return; currcycle++; if (nextevent == currcycle) { int i; for (i = 0; i < ev_max; i++) { if (eventtab[i].active && eventtab[i].evtime == currcycle) { (*eventtab[i].handler) (); } } events_schedule(); } } /* This is a special-case function. Normally, all events should lie in the future; they should only ever be active at the current cycle during do_cycles. However, a snapshot is saved during do_cycles, and so when restoring it, we may have other events pending. */ STATIC_INLINE void handle_active_events (void) { int i; for (i = 0; i < ev_max; i++) { if (eventtab[i].active && eventtab[i].evtime == currcycle) { (*eventtab[i].handler)(); } } } STATIC_INLINE unsigned long get_cycles (void) { return currcycle; } extern void init_eventtab (void); #if /* M68K_SPEED == 1 */ 0 #define do_cycles do_cycles_fast #else #define do_cycles do_cycles_slow #endif fs-uae-2.2.3+dfsg/src/include/crc32.h0000644000175000017500000000042212162366655017352 0ustar glaubitzglaubitzextern uae_u32 get_crc32 (void *p, int size); extern uae_u16 get_crc16 (void *p, int size); extern uae_u32 get_crc32_val (uae_u8 v, uae_u32 crc); extern void get_sha1 (void *p, int size, void *out); extern const TCHAR *get_sha1_txt (void *p, int size); #define SHA1_SIZE 20 fs-uae-2.2.3+dfsg/src/include/zarchive.h0000644000175000017500000001150312162366655020253 0ustar glaubitzglaubitz typedef uae_s64 (*ZFILEREAD)(void*, uae_u64, uae_u64, struct zfile*); typedef uae_s64 (*ZFILEWRITE)(const void*, uae_u64, uae_u64, struct zfile*); typedef uae_s64 (*ZFILESEEK)(struct zfile*, uae_s64, int); struct zfile { TCHAR *name; TCHAR *zipname; TCHAR *mode; FILE *f; // real file handle if physical file uae_u8 *data; // unpacked data int dataseek; // use seek position even if real file struct zfile *archiveparent; // set if parent is archive and this has not yet been unpacked (datasize < size) int archiveid; uae_s64 size; // real size uae_s64 datasize; // available size (not yet unpacked completely?) uae_s64 allocsize; // memory allocated before realloc() needed again uae_s64 seek; // seek position int deleteafterclose; int textmode; struct zfile *next; int zfdmask; struct zfile *parent; uae_u64 offset; // byte offset from parent file int opencnt; ZFILEREAD zfileread; ZFILEWRITE zfilewrite; ZFILESEEK zfileseek; void *userdata; int useparent; }; #define ZNODE_FILE 0 #define ZNODE_DIR 1 #define ZNODE_VDIR -1 struct znode { int type; struct znode *sibling; struct znode *child; struct zvolume *vchild; struct znode *parent; struct zvolume *volume; struct znode *next; struct znode *prev; struct znode *vfile; // points to real file when this node is virtual directory TCHAR *name; TCHAR *fullname; uae_s64 size; struct zfile *f; TCHAR *comment; int flags; struct mytimeval mtime; /* decompressor specific */ unsigned int offset; unsigned int offset2; unsigned int method; unsigned int packedsize; }; struct zvolume { struct zfile *archive; void *handle; struct znode root; struct zvolume *next; struct znode *last; struct znode *parentz; struct zvolume *parent; uae_s64 size; unsigned int blocks; unsigned int id; uae_s64 archivesize; unsigned int method; TCHAR *volumename; int zfdmask; }; struct zarchive_info { TCHAR *name; uae_s64 size; int flags; TCHAR *comment; struct mytimeval tv; }; #define ArchiveFormat7Zip '7z ' #define ArchiveFormatRAR 'rar ' #define ArchiveFormatZIP 'zip ' #define ArchiveFormatLHA 'lha ' #define ArchiveFormatLZX 'lzx ' #define ArchiveFormatPLAIN '----' #define ArchiveFormatDIR 'DIR ' #define ArchiveFormatAA 'aa ' // method only #define ArchiveFormatADF 'DOS ' #define ArchiveFormatRDB 'RDSK' #define ArchiveFormatMBR 'MBR ' #define ArchiveFormatFAT 'FAT ' #define ArchiveFormatTAR 'tar ' #define PEEK_BYTES 1024 #define FILE_PEEK 1 #define FILE_DELAYEDOPEN 2 extern int zfile_is_ignore_ext (const TCHAR *name); extern struct zvolume *zvolume_alloc (struct zfile *z, unsigned int id, void *handle, const TCHAR*); extern struct zvolume *zvolume_alloc_empty (struct zvolume *zv, const TCHAR *name); extern struct znode *zvolume_addfile_abs (struct zvolume *zv, struct zarchive_info*); extern struct znode *zvolume_adddir_abs (struct zvolume *zv, struct zarchive_info *zai); extern struct znode *znode_adddir (struct znode *parent, const TCHAR *name, struct zarchive_info*); extern struct zvolume *archive_directory_plain (struct zfile *zf); extern struct zvolume *archive_directory_lha(struct zfile *zf); extern struct zfile *archive_access_lha (struct znode *zn); extern struct zvolume *archive_directory_zip(struct zfile *zf); extern struct zvolume *archive_directory_7z (struct zfile *z); extern struct zfile *archive_access_7z (struct znode *zn); extern struct zvolume *archive_directory_rar (struct zfile *z); extern struct zfile *archive_access_rar (struct znode *zn); extern struct zvolume *archive_directory_lzx (struct zfile *in_file); extern struct zfile *archive_access_lzx (struct znode *zn); extern struct zvolume *archive_directory_arcacc (struct zfile *z, unsigned int id); extern struct zfile *archive_access_arcacc (struct znode *zn); extern struct zvolume *archive_directory_adf (struct znode *zn, struct zfile *z); extern struct zvolume *archive_directory_rdb (struct zfile *z); extern struct zvolume *archive_directory_fat (struct zfile *z); extern struct zvolume *archive_directory_tar (struct zfile *zf); extern struct zfile *archive_access_tar (struct znode *zn); extern struct zfile *archive_access_select (struct znode *parent, struct zfile *zf, unsigned int id, int doselect, int *retcode, int index); extern struct zfile *archive_access_arcacc_select (struct zfile *zf, unsigned int id, int *retcode); extern int isfat (uae_u8*); extern void archive_access_scan (struct zfile *zf, zfile_callback zc, void *user, unsigned int id); extern void archive_access_close (void *handle, unsigned int id); extern struct zfile *archive_getzfile (struct znode *zn, unsigned int id, int flags); extern struct zfile *archive_unpackzfile (struct zfile *zf); extern struct zfile *decompress_zfd (struct zfile*); fs-uae-2.2.3+dfsg/src/fsusage.cpp0000644000175000017500000002151312162366655017007 0ustar glaubitzglaubitz/* fsusage.c -- return space usage of mounted filesystems Copyright (C) 1991, 1992, 1996 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "sysconfig.h" #include "sysdeps.h" #include #include #ifdef HAVE_SYS_STAT_H #include #endif #include "fsusage.h" /* Return the number of TOSIZE-byte blocks used by BLOCKS FROMSIZE-byte blocks, rounding away from zero. TOSIZE must be positive. Return -1 if FROMSIZE is not positive. */ static long adjust_blocks (long blocks, int fromsize, int tosize) { if (tosize <= 0) abort (); if (fromsize <= 0) return -1; if (fromsize == tosize) /* e.g., from 512 to 512 */ return blocks; else if (fromsize > tosize) /* e.g., from 2048 to 512 */ return blocks * (fromsize / tosize); else /* e.g., from 256 to 512 */ return (blocks + (blocks < 0 ? -1 : 1)) / (tosize / fromsize); } #ifdef FSUAE static int get_fs_usage_fake (const TCHAR *path, const TCHAR *disk, struct fs_usage *fsp) { fsp->fsu_blocks = 0x7fffff; fsp->fsu_bavail = 0x3fffff; return 0; } #endif #ifdef WINDOWS #ifdef FSUAE #else #include "od-win32/posixemu.h" #endif #include int get_fs_usage (const TCHAR *path, const TCHAR *disk, struct fs_usage *fsp) { #ifdef FSUAE // FIXME: if net play only return get_fs_usage_fake(path, disk, fsp); #endif TCHAR buf2[MAX_DPATH]; ULARGE_INTEGER FreeBytesAvailable, TotalNumberOfBytes, TotalNumberOfFreeBytes; if (!GetFullPathName (path, sizeof buf2 / sizeof (TCHAR), buf2, NULL)) { write_log (_T("GetFullPathName('%s') failed err=%d\n"), path, GetLastError ()); return -1; } if (!_tcsncmp (buf2, _T("\\\\"), 2)) { TCHAR *p; _tcscat (buf2, _T("\\")); p = _tcschr (buf2 + 2, '\\'); if (!p) return -1; p = _tcschr (p + 1, '\\'); if (!p) return -1; p[1] = 0; } else { buf2[3] = 0; } if (!GetDiskFreeSpaceEx (buf2, &FreeBytesAvailable, &TotalNumberOfBytes, &TotalNumberOfFreeBytes)) { write_log (_T("GetDiskFreeSpaceEx('%s') failed err=%d\n"), buf2, GetLastError ()); return -1; } fsp->fsu_blocks = 0x7fffffff; fsp->fsu_bavail = 0x7fffffff; if (TotalNumberOfBytes.QuadPart / 1024 < (1 << 31)) fsp->fsu_blocks = (unsigned long)(TotalNumberOfBytes.QuadPart / 1024); if (FreeBytesAvailable.QuadPart / 1024 < (1 << 31)) fsp->fsu_bavail = (unsigned long)(FreeBytesAvailable.QuadPart / 1024); return 0; } #else /* ! _WIN32 */ int statfs (); #if HAVE_UNISTD_H # include #endif #if HAVE_SYS_PARAM_H # include #endif #if HAVE_SYS_MOUNT_H # include #endif #if HAVE_SYS_VFS_H # include #endif #if HAVE_SYS_FS_S5PARAM_H /* Fujitsu UXP/V */ # include #endif #if defined (HAVE_SYS_FILSYS_H) && !defined (_CRAY) # include /* SVR2 */ #endif #if HAVE_FCNTL_H # include #endif #if HAVE_SYS_STATFS_H # include #endif #if HAVE_DUSTAT_H /* AIX PS/2 */ # include #endif #if HAVE_SYS_STATVFS_H /* SVR4 */ # include int statvfs (); #endif /* Read LEN bytes at PTR from descriptor DESC, retrying if interrupted. Return the actual number of bytes read, zero for EOF, or negative for an error. */ int safe_read (int desc, TCHAR *ptr, int len) { int n_chars; if (len <= 0) return len; #ifdef EINTR do { n_chars = read (desc, ptr, len); } while (n_chars < 0 && errno == EINTR); #else n_chars = read (desc, ptr, len); #endif return n_chars; } /* Fill in the fields of FSP with information about space usage for the filesystem on which PATH resides. DISK is the device on which PATH is mounted, for space-getting methods that need to know it. Return 0 if successful, -1 if not. When returning -1, ensure that ERRNO is either a system error value, or zero if DISK is NULL on a system that requires a non-NULL value. */ #ifndef WINDOWS int get_fs_usage (const TCHAR *path, const TCHAR *disk, struct fs_usage *fsp) { #ifdef FSUAE // FIXME: if net play only return get_fs_usage_fake(path, disk, fsp); #else #ifdef STAT_STATFS3_OSF1 # define CONVERT_BLOCKS(B) adjust_blocks ((B), fsd.f_fsize, 512) struct statfs fsd; if (statfs (path, &fsd, sizeof (struct statfs)) != 0) return -1; #endif /* STAT_STATFS3_OSF1 */ #ifdef STAT_STATFS2_FS_DATA /* Ultrix */ # define CONVERT_BLOCKS(B) adjust_blocks ((B), 1024, 512) struct fs_data fsd; if (statfs (path, &fsd) != 1) return -1; fsp->fsu_blocks = CONVERT_BLOCKS (fsd.fd_req.btot); fsp->fsu_bfree = CONVERT_BLOCKS (fsd.fd_req.bfree); fsp->fsu_bavail = CONVERT_BLOCKS (fsd.fd_req.bfreen); fsp->fsu_files = fsd.fd_req.gtot; fsp->fsu_ffree = fsd.fd_req.gfree; #endif /* STAT_STATFS2_FS_DATA */ #ifdef STAT_READ_FILSYS /* SVR2 */ # ifndef SUPERBOFF # define SUPERBOFF (SUPERB * 512) # endif # define CONVERT_BLOCKS(B) \ adjust_blocks ((B), (fsd.s_type == Fs2b ? 1024 : 512), 512) struct filsys fsd; int fd; if (! disk) { errno = 0; return -1; } fd = open (disk, O_RDONLY); if (fd < 0) return -1; lseek (fd, (long) SUPERBOFF, 0); if (safe_read (fd, (TCHAR *) &fsd, sizeof fsd) != sizeof fsd) { close (fd); return -1; } close (fd); fsp->fsu_blocks = CONVERT_BLOCKS (fsd.s_fsize); fsp->fsu_bfree = CONVERT_BLOCKS (fsd.s_tfree); fsp->fsu_bavail = CONVERT_BLOCKS (fsd.s_tfree); fsp->fsu_files = (fsd.s_isize - 2) * INOPB * (fsd.s_type == Fs2b ? 2 : 1); fsp->fsu_ffree = fsd.s_tinode; #endif /* STAT_READ_FILSYS */ #ifdef STAT_STATFS2_BSIZE /* 4.3BSD, SunOS 4, HP-UX, AIX */ # define CONVERT_BLOCKS(B) adjust_blocks ((B), fsd.f_bsize, 512) struct statfs fsd; if (statfs (path, &fsd) < 0) return -1; # ifdef STATFS_TRUNCATES_BLOCK_COUNTS /* In SunOS 4.1.2, 4.1.3, and 4.1.3_U1, the block counts in the struct statfs are truncated to 2GB. These conditions detect that truncation, presumably without botching the 4.1.1 case, in which the values are not truncated. The correct counts are stored in undocumented spare fields. */ if (fsd.f_blocks == 0x1fffff && fsd.f_spare[0] > 0) { fsd.f_blocks = fsd.f_spare[0]; fsd.f_bfree = fsd.f_spare[1]; fsd.f_bavail = fsd.f_spare[2]; } # endif /* STATFS_TRUNCATES_BLOCK_COUNTS */ #endif /* STAT_STATFS2_BSIZE */ #ifdef STAT_STATFS2_FSIZE /* 4.4BSD */ # define CONVERT_BLOCKS(B) adjust_blocks ((B), fsd.f_fsize, 512) struct statfs fsd; if (statfs (path, &fsd) < 0) return -1; #endif /* STAT_STATFS2_FSIZE */ #ifdef STAT_STATFS4 /* SVR3, Dynix, Irix, AIX */ # if _AIX || defined(_CRAY) # define CONVERT_BLOCKS(B) adjust_blocks ((B), fsd.f_bsize, 512) # ifdef _CRAY # define f_bavail f_bfree # endif # else # define CONVERT_BLOCKS(B) (B) # ifndef _SEQUENT_ /* _SEQUENT_ is DYNIX/ptx */ # ifndef DOLPHIN /* DOLPHIN 3.8.alfa/7.18 has f_bavail */ # define f_bavail f_bfree # endif # endif # endif struct statfs fsd; if (statfs (path, &fsd, sizeof fsd, 0) < 0) return -1; /* Empirically, the block counts on most SVR3 and SVR3-derived systems seem to always be in terms of 512-byte blocks, no matter what value f_bsize has. */ #endif /* STAT_STATFS4 */ #ifdef STAT_STATVFS /* SVR4 */ # define CONVERT_BLOCKS(B) \ adjust_blocks ((B), fsd.f_frsize ? fsd.f_frsize : fsd.f_bsize, 512) struct statvfs fsd; if (statvfs (path, &fsd) < 0) return -1; /* f_frsize isn't guaranteed to be supported. */ #endif /* STAT_STATVFS */ #if !defined(STAT_STATFS2_FS_DATA) && !defined(STAT_READ_FILSYS) /* !Ultrix && !SVR2 */ fsp->fsu_blocks = CONVERT_BLOCKS (fsd.f_blocks); fsp->fsu_bfree = CONVERT_BLOCKS (fsd.f_bfree); fsp->fsu_bavail = CONVERT_BLOCKS (fsd.f_bavail); fsp->fsu_files = fsd.f_files; fsp->fsu_ffree = fsd.f_ffree; #endif /* not STAT_STATFS2_FS_DATA && not STAT_READ_FILSYS */ return 0; #endif // FSUAE } #endif #if defined(_AIX) && defined(_I386) /* AIX PS/2 does not supply statfs. */ int statfs (path, fsb) TCHAR *path; struct statfs *fsb; { struct stat stats; struct dustat fsd; if (stat (path, &stats)) return -1; if (dustat (stats.st_dev, 0, &fsd, sizeof (fsd))) return -1; fsb->f_type = 0; fsb->f_bsize = fsd.du_bsize; fsb->f_blocks = fsd.du_fsize - fsd.du_isize; fsb->f_bfree = fsd.du_tfree; fsb->f_bavail = fsd.du_tfree; fsb->f_files = (fsd.du_isize - 2) * fsd.du_inopb; fsb->f_ffree = fsd.du_tinode; fsb->f_fsid.val[0] = fsd.du_site; fsb->f_fsid.val[1] = fsd.du_pckno; return 0; } #endif /* _AIX && _I386 */ #endif /* ! _WIN32 */ fs-uae-2.2.3+dfsg/src/traps.cpp0000644000175000017500000003170612162366655016510 0ustar glaubitzglaubitz/* * E-UAE - The portable Amiga Emulator * * Support for traps * * Copyright Richard Drummond 2005 * * Inspired by code from UAE: * Copyright 1995, 1996 Bernd Schmidt * Copyright 1996 Ed Hanway */ #include "sysconfig.h" #include "sysdeps.h" #include "options.h" #include "uae/memory.h" #include "custom.h" #include "newcpu.h" #include "threaddep/thread.h" #include "autoconf.h" #include "traps.h" /* * Traps are the mechanism via which 68k code can call emulator code * (and for that emulator code in turn to call 68k code). They are * thus the basis for much of the cool stuff that E-UAE can do. * * Emulator traps take advantage of the illegal 68k opwords 0xA000 to * 0xAFFF. Normally these would generate an A-line exception. However, * when encountered in the RTAREA section of memory, these opwords * instead invoke a corresponding emulator trap, allowing a host * function to be called. * * Two types of emulator trap are available - a simple trap and an * extended trap. A simple trap may not call 68k code; an extended * trap can. * * Extended traps are rather complex beasts (to implement, not * necessarily to use). This is because for the trap handler function * to be able to call 68k code, we must somehow allow the emulator's * 68k interpreter to resume execution of 68k code in the middle of * the trap handler function. * * In UAE of old this used to be implemented via a stack-swap mechanism. * While this worked, it was definitely in the realm of black magic and * horribly non-portable, requiring assembly language glue specific to * the host ABI and compiler to actually perform the swap. * * In this implementation, in essence we do something similar - but the * new stack is provided by a new thread. No voodoo required, just a * working thread layer. * * The complexity in this approach arises in synchronizing the trap * threads with the emulator thread. This implementation errs on the side * of paranoia when it comes to thread synchronization. Once all the * bugs are knocked out of the bsdsocket emulation, a simpler scheme may * suffice. */ /* * Record of a defined trap (that is, a trap allocated to a host function) */ struct Trap { TrapHandler handler; /* Handler function to be invoked for this trap. */ int flags; /* Trap attributes. */ const TCHAR *name; /* For debugging purposes. */ uaecptr addr; }; #define MAX_TRAPS 4096 /* Defined traps */ static struct Trap traps[MAX_TRAPS]; static unsigned int trap_count = 1; static const int trace_traps = 0; static void trap_HandleExtendedTrap (TrapHandler, int has_retval); uaecptr find_trap (const TCHAR *name) { int i; for (i = 0; i < trap_count; i++) { struct Trap *trap = &traps[i]; if ((trap->flags & TRAPFLAG_UAERES) && trap->name && !_tcscmp (trap->name, name)) return trap->addr; } return 0; } /* * Define an emulator trap * * handler_func = host function that will be invoked to handle this trap * flags = trap attributes * name = name for debugging purposes * * returns trap number of defined trap */ unsigned int define_trap (TrapHandler handler_func, int flags, const TCHAR *name) { if (trap_count == MAX_TRAPS) { write_log (_T("Ran out of emulator traps\n")); abort (); return -1; } else { int i; unsigned int trap_num; struct Trap *trap; uaecptr addr = here (); for (i = 0; i < trap_count; i++) { if (addr == traps[i].addr) return i; } trap_num = trap_count++; trap = &traps[trap_num]; trap->handler = handler_func; trap->flags = flags; trap->name = name; trap->addr = addr; return trap_num; } } /* * This function is called by the 68k interpreter to handle an emulator trap. * * trap_num = number of trap to invoke * regs = current 68k state */ void REGPARAM2 m68k_handle_trap (unsigned int trap_num) { struct Trap *trap = &traps[trap_num]; uae_u32 retval = 0; int has_retval = (trap->flags & TRAPFLAG_NO_RETVAL) == 0; int implicit_rts = (trap->flags & TRAPFLAG_DORET) != 0; if (trap->name && trap->name[0] != 0 && trace_traps) write_log (_T("TRAP: %s\n"), trap->name); if (trap_num < trap_count) { if (trap->flags & TRAPFLAG_EXTRA_STACK) { /* Handle an extended trap. * Note: the return value of this trap is passed back to 68k * space via a separate, dedicated simple trap which the trap * handler causes to be invoked when it is done. */ trap_HandleExtendedTrap (trap->handler, has_retval); } else { /* Handle simple trap */ retval = (trap->handler) (NULL); if (has_retval) m68k_dreg (regs, 0) = retval; if (implicit_rts) { m68k_do_rts (); fill_prefetch (); } } } else write_log (_T("Illegal emulator trap\n")); } /* * Implementation of extended traps */ struct TrapCPUContext { uae_u32 regs[16]; uae_u32 pc; int intmask; }; struct TrapContext { /* Trap's working copy of 68k state. This is what the trap handler should * access to get arguments from 68k space. */ //struct regstruct regs; /* Trap handler function that gets called on the trap context */ TrapHandler trap_handler; /* Should the handler return a value to 68k space in D0? */ int trap_has_retval; /* Return value from trap handler */ uae_u32 trap_retval; /* Copy of 68k state at trap entry. */ //struct regstruct saved_regs; struct TrapCPUContext saved_regs; /* Thread which effects the trap context. */ uae_thread_id thread; /* For IPC between the main emulator. */ uae_sem_t switch_to_emu_sem; /* context and the trap context. */ uae_sem_t switch_to_trap_sem; /* When calling a 68k function from a trap handler, this is set to the * address of the function to call. */ uaecptr call68k_func_addr; /* And this gets set to the return value of the 68k call. */ uae_u32 call68k_retval; }; static void copytocpucontext(struct TrapCPUContext *cpu) { memcpy (cpu->regs, regs.regs, sizeof (regs.regs)); cpu->intmask = regs.intmask; cpu->pc = m68k_getpc (); } static void copyfromcpucontext(struct TrapCPUContext *cpu, uae_u32 pc) { memcpy (regs.regs, cpu->regs, sizeof (regs.regs)); regs.intmask = cpu->intmask; m68k_setpc (pc); } /* 68k addresses which invoke the corresponding traps. */ static uaecptr m68k_call_trapaddr; static uaecptr m68k_return_trapaddr; static uaecptr exit_trap_trapaddr; /* For IPC between main thread and trap context */ static uae_sem_t trap_mutex; static TrapContext *current_context; /* * Thread body for trap context */ static void *trap_thread (void *arg) { TrapContext *context = (TrapContext *) arg; /* Wait until main thread is ready to switch to the * this trap context. */ uae_sem_wait (&context->switch_to_trap_sem); /* Execute trap handler function. */ context->trap_retval = context->trap_handler (context); /* Trap handler is done - we still need to tidy up * and make sure the handler's return value is propagated * to the calling 68k thread. * * We do this by causing our exit handler to be executed on the 68k context. */ /* Enter critical section - only one trap at a time, please! */ uae_sem_wait (&trap_mutex); //regs = context->saved_regs; /* Set PC to address of the exit handler, so that it will be called * when the 68k context resumes. */ copyfromcpucontext (&context->saved_regs, exit_trap_trapaddr); /* 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; //m68k_setpc (exit_trap_trapaddr); current_context = context; /* Switch back to 68k context */ uae_sem_post (&context->switch_to_emu_sem); /* Good bye, cruel world... */ /* dummy return value */ 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 trap_Call68k (TrapContext *context, uaecptr func_addr) { /* Enter critical section - only one trap at a time, please! */ uae_sem_wait (&trap_mutex); current_context = context; /* 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. */ context->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 (&context->switch_to_emu_sem); /* Wait for 68k call return handler to switch back to us. */ uae_sem_wait (&context->switch_to_trap_sem); /* End critical section. */ uae_sem_post (&trap_mutex); /* Get return value from 68k function called. */ return context->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 *context, uaecptr base, uae_s16 offset) { uae_u32 retval; uaecptr olda6 = m68k_areg (regs, 6); m68k_areg (regs, 6) = base; retval = trap_Call68k (context, base + offset); m68k_areg (regs, 6) = olda6; return retval; } /* * Call 68k function from extended trap. */ uae_u32 CallFunc (TrapContext *context, uaecptr func) { return trap_Call68k (context, func); } /* * Initialize trap mechanism. */ void init_traps (void) { trap_count = 0; } /* * Initialize the extended trap mechanism. */ void init_extended_traps (void) { m68k_call_trapaddr = here (); calltrap (deftrap2 (m68k_call_handler, TRAPFLAG_NO_RETVAL, _T("m68k_call"))); m68k_return_trapaddr = here(); calltrap (deftrap2 (m68k_return_handler, TRAPFLAG_NO_RETVAL, _T("m68k_return"))); exit_trap_trapaddr = here(); calltrap (deftrap2 (exit_trap_handler, TRAPFLAG_NO_RETVAL, _T("exit_trap"))); uae_sem_init (&trap_mutex, 0, 1); } fs-uae-2.2.3+dfsg/src/crc32.cpp0000644000175000017500000002053212162366655016266 0ustar glaubitzglaubitz #include "sysconfig.h" #include "sysdeps.h" #include "crc32.h" static unsigned long crc_table32[256]; static unsigned short crc_table16[256]; static void make_crc_table (void) { unsigned long c; unsigned short w; int n, k; for (n = 0; n < 256; n++) { c = (unsigned long)n; w = n << 8; for (k = 0; k < 8; k++) { c = (c >> 1) ^ (c & 1 ? 0xedb88320 : 0); w = (w << 1) ^ ((w & 0x8000) ? 0x1021 : 0); } crc_table32[n] = c; crc_table16[n] = w; } } uae_u32 get_crc32_val (uae_u8 v, uae_u32 crc) { if (!crc_table32[1]) make_crc_table(); crc ^= 0xffffffff; crc = crc_table32[(crc ^ v) & 0xff] ^ (crc >> 8); return crc ^ 0xffffffff; } uae_u32 get_crc32 (void *vbuf, int len) { uae_u8 *buf = (uae_u8*)vbuf; uae_u32 crc; if (!crc_table32[1]) make_crc_table(); crc = 0xffffffff; while (len-- > 0) crc = crc_table32[(crc ^ (*buf++)) & 0xff] ^ (crc >> 8); return crc ^ 0xffffffff; } uae_u16 get_crc16 (void *vbuf, int len) { uae_u8 *buf = (uae_u8*)vbuf; uae_u16 crc; if (!crc_table32[1]) make_crc_table(); crc = 0xffff; while (len-- > 0) crc = (crc << 8) ^ crc_table16[((crc >> 8) ^ (*buf++)) & 0xff]; return crc; } #ifndef GET_UINT32_BE #define GET_UINT32_BE(n,b,i) \ { \ (n) = ( (unsigned long) (b)[(i) ] << 24 ) \ | ( (unsigned long) (b)[(i) + 1] << 16 ) \ | ( (unsigned long) (b)[(i) + 2] << 8 ) \ | ( (unsigned long) (b)[(i) + 3] ); \ } #endif #ifndef PUT_UINT32_BE #define PUT_UINT32_BE(n,b,i) \ { \ (b)[(i) ] = (unsigned char) ( (n) >> 24 ); \ (b)[(i) + 1] = (unsigned char) ( (n) >> 16 ); \ (b)[(i) + 2] = (unsigned char) ( (n) >> 8 ); \ (b)[(i) + 3] = (unsigned char) ( (n) ); \ } #endif typedef struct { unsigned long total[2]; /*!< number of bytes processed */ unsigned long state[5]; /*!< intermediate digest state */ unsigned char buffer[64]; /*!< data block being processed */ } sha1_context; static void sha1_starts( sha1_context *ctx ) { ctx->total[0] = 0; ctx->total[1] = 0; ctx->state[0] = 0x67452301; ctx->state[1] = 0xEFCDAB89; ctx->state[2] = 0x98BADCFE; ctx->state[3] = 0x10325476; ctx->state[4] = 0xC3D2E1F0; } static void sha1_process( sha1_context *ctx, unsigned char data[64] ) { unsigned long temp, W[16], A, B, C, D, E; GET_UINT32_BE( W[0], data, 0 ); GET_UINT32_BE( W[1], data, 4 ); GET_UINT32_BE( W[2], data, 8 ); GET_UINT32_BE( W[3], data, 12 ); GET_UINT32_BE( W[4], data, 16 ); GET_UINT32_BE( W[5], data, 20 ); GET_UINT32_BE( W[6], data, 24 ); GET_UINT32_BE( W[7], data, 28 ); GET_UINT32_BE( W[8], data, 32 ); GET_UINT32_BE( W[9], data, 36 ); GET_UINT32_BE( W[10], data, 40 ); GET_UINT32_BE( W[11], data, 44 ); GET_UINT32_BE( W[12], data, 48 ); GET_UINT32_BE( W[13], data, 52 ); GET_UINT32_BE( W[14], data, 56 ); GET_UINT32_BE( W[15], data, 60 ); #define S(x,n) ((x << n) | ((x & 0xFFFFFFFF) >> (32 - n))) #define R(t) \ ( \ temp = W[(t - 3) & 0x0F] ^ W[(t - 8) & 0x0F] ^ \ W[(t - 14) & 0x0F] ^ W[ t & 0x0F], \ ( W[t & 0x0F] = S(temp,1) ) \ ) #define P(a,b,c,d,e,x) \ { \ e += S(a,5) + F(b,c,d) + K + x; b = S(b,30); \ } A = ctx->state[0]; B = ctx->state[1]; C = ctx->state[2]; D = ctx->state[3]; E = ctx->state[4]; #define F(x,y,z) (z ^ (x & (y ^ z))) #define K 0x5A827999 P( A, B, C, D, E, W[0] ); P( E, A, B, C, D, W[1] ); P( D, E, A, B, C, W[2] ); P( C, D, E, A, B, W[3] ); P( B, C, D, E, A, W[4] ); P( A, B, C, D, E, W[5] ); P( E, A, B, C, D, W[6] ); P( D, E, A, B, C, W[7] ); P( C, D, E, A, B, W[8] ); P( B, C, D, E, A, W[9] ); P( A, B, C, D, E, W[10] ); P( E, A, B, C, D, W[11] ); P( D, E, A, B, C, W[12] ); P( C, D, E, A, B, W[13] ); P( B, C, D, E, A, W[14] ); P( A, B, C, D, E, W[15] ); P( E, A, B, C, D, R(16) ); P( D, E, A, B, C, R(17) ); P( C, D, E, A, B, R(18) ); P( B, C, D, E, A, R(19) ); #undef K #undef F #define F(x,y,z) (x ^ y ^ z) #define K 0x6ED9EBA1 P( A, B, C, D, E, R(20) ); P( E, A, B, C, D, R(21) ); P( D, E, A, B, C, R(22) ); P( C, D, E, A, B, R(23) ); P( B, C, D, E, A, R(24) ); P( A, B, C, D, E, R(25) ); P( E, A, B, C, D, R(26) ); P( D, E, A, B, C, R(27) ); P( C, D, E, A, B, R(28) ); P( B, C, D, E, A, R(29) ); P( A, B, C, D, E, R(30) ); P( E, A, B, C, D, R(31) ); P( D, E, A, B, C, R(32) ); P( C, D, E, A, B, R(33) ); P( B, C, D, E, A, R(34) ); P( A, B, C, D, E, R(35) ); P( E, A, B, C, D, R(36) ); P( D, E, A, B, C, R(37) ); P( C, D, E, A, B, R(38) ); P( B, C, D, E, A, R(39) ); #undef K #undef F #define F(x,y,z) ((x & y) | (z & (x | y))) #define K 0x8F1BBCDC P( A, B, C, D, E, R(40) ); P( E, A, B, C, D, R(41) ); P( D, E, A, B, C, R(42) ); P( C, D, E, A, B, R(43) ); P( B, C, D, E, A, R(44) ); P( A, B, C, D, E, R(45) ); P( E, A, B, C, D, R(46) ); P( D, E, A, B, C, R(47) ); P( C, D, E, A, B, R(48) ); P( B, C, D, E, A, R(49) ); P( A, B, C, D, E, R(50) ); P( E, A, B, C, D, R(51) ); P( D, E, A, B, C, R(52) ); P( C, D, E, A, B, R(53) ); P( B, C, D, E, A, R(54) ); P( A, B, C, D, E, R(55) ); P( E, A, B, C, D, R(56) ); P( D, E, A, B, C, R(57) ); P( C, D, E, A, B, R(58) ); P( B, C, D, E, A, R(59) ); #undef K #undef F #define F(x,y,z) (x ^ y ^ z) #define K 0xCA62C1D6 P( A, B, C, D, E, R(60) ); P( E, A, B, C, D, R(61) ); P( D, E, A, B, C, R(62) ); P( C, D, E, A, B, R(63) ); P( B, C, D, E, A, R(64) ); P( A, B, C, D, E, R(65) ); P( E, A, B, C, D, R(66) ); P( D, E, A, B, C, R(67) ); P( C, D, E, A, B, R(68) ); P( B, C, D, E, A, R(69) ); P( A, B, C, D, E, R(70) ); P( E, A, B, C, D, R(71) ); P( D, E, A, B, C, R(72) ); P( C, D, E, A, B, R(73) ); P( B, C, D, E, A, R(74) ); P( A, B, C, D, E, R(75) ); P( E, A, B, C, D, R(76) ); P( D, E, A, B, C, R(77) ); P( C, D, E, A, B, R(78) ); P( B, C, D, E, A, R(79) ); #undef K #undef F ctx->state[0] += A; ctx->state[1] += B; ctx->state[2] += C; ctx->state[3] += D; ctx->state[4] += E; } /* * SHA-1 process buffer */ static void sha1_update( sha1_context *ctx, unsigned char *input, int ilen ) { int fill; unsigned long left; if( ilen <= 0 ) return; left = ctx->total[0] & 0x3F; fill = 64 - left; ctx->total[0] += ilen; ctx->total[0] &= 0xFFFFFFFF; if( ctx->total[0] < (unsigned long) ilen ) ctx->total[1]++; if( left && ilen >= fill ) { memcpy( (void *) (ctx->buffer + left), (void *) input, fill ); sha1_process( ctx, ctx->buffer ); input += fill; ilen -= fill; left = 0; } while( ilen >= 64 ) { sha1_process( ctx, input ); input += 64; ilen -= 64; } if( ilen > 0 ) { memcpy( (void *) (ctx->buffer + left), (void *) input, ilen ); } } static const unsigned char sha1_padding[64] = { 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; /* * SHA-1 final digest */ static void sha1_finish( sha1_context *ctx, unsigned char output[20] ) { unsigned long last, padn; unsigned long high, low; unsigned char msglen[8]; high = ( ctx->total[0] >> 29 ) | ( ctx->total[1] << 3 ); low = ( ctx->total[0] << 3 ); PUT_UINT32_BE( high, msglen, 0 ); PUT_UINT32_BE( low, msglen, 4 ); last = ctx->total[0] & 0x3F; padn = ( last < 56 ) ? ( 56 - last ) : ( 120 - last ); sha1_update( ctx, (unsigned char *) sha1_padding, padn ); sha1_update( ctx, msglen, 8 ); PUT_UINT32_BE( ctx->state[0], output, 0 ); PUT_UINT32_BE( ctx->state[1], output, 4 ); PUT_UINT32_BE( ctx->state[2], output, 8 ); PUT_UINT32_BE( ctx->state[3], output, 12 ); PUT_UINT32_BE( ctx->state[4], output, 16 ); } void get_sha1 (void *vinput, int len, void *vout) { uae_u8 *input = (uae_u8*)vinput; uae_u8 *out = (uae_u8*)vout; sha1_context ctx; sha1_starts( &ctx ); sha1_update( &ctx, input, len ); sha1_finish( &ctx, out ); } const TCHAR *get_sha1_txt (void *vinput, int len) { uae_u8 *input = (uae_u8*)vinput; static TCHAR outtxt[SHA1_SIZE * 2 + 1]; uae_u8 out[SHA1_SIZE]; int i; TCHAR *p; p = outtxt; get_sha1 (input, len, out); for (i = 0; i < SHA1_SIZE; i++) { _stprintf (p, _T("%02X"), out[i]); p += 2; } *p = 0; return outtxt; }fs-uae-2.2.3+dfsg/src/drawing - Copy.cpp0000644000175000017500000026405112162366654020022 0ustar glaubitzglaubitz//#define XLINECHECK /* * UAE - The Un*x Amiga Emulator * * Screen drawing functions * * Copyright 1995-2000 Bernd Schmidt * Copyright 1995 Alessandro Bissacco * Copyright 2000-2008 Toni Wilen */ /* There are a couple of concepts of "coordinates" in this file. - DIW coordinates - DDF coordinates (essentially cycles, resolution lower than lores by a factor of 2) - Pixel coordinates * in the Amiga's resolution as determined by BPLCON0 ("Amiga coordinates") * in the window resolution as determined by the preferences ("window coordinates"). * in the window resolution, and with the origin being the topmost left corner of the window ("native coordinates") One note about window coordinates. The visible area depends on the width of the window, and the centering code. The first visible horizontal window coordinate is often _not_ 0, but the value of VISIBLE_LEFT_BORDER instead. One important thing to remember: DIW coordinates are in the lowest possible resolution. To prevent extremely bad things (think pixels cut in half by window borders) from happening, all ports should restrict window widths to be multiples of 16 pixels. */ #include "sysconfig.h" #include "sysdeps.h" #include #include #include "options.h" #include "threaddep/thread.h" #include "uae.h" #include "uae/memory.h" #include "custom.h" #include "newcpu.h" #include "xwin.h" #include "autoconf.h" #include "gui.h" #include "picasso96.h" #include "drawing.h" #include "savestate.h" #include "statusline.h" #include "inputdevice.h" #include "debug.h" extern bool emulate_specialmonitors (struct vidbuffer*, struct vidbuffer*); extern int sprite_buffer_res; int lores_factor, lores_shift; int debug_bpl_mask = 0xff, debug_bpl_mask_one; static void lores_reset (void) { lores_factor = currprefs.gfx_resolution ? 2 : 1; lores_shift = currprefs.gfx_resolution; if (doublescan > 0) { if (lores_shift < 2) lores_shift++; lores_factor = 2; } sprite_buffer_res = currprefs.gfx_resolution; if (doublescan > 0 && sprite_buffer_res < RES_SUPERHIRES) sprite_buffer_res++; } bool aga_mode; /* mirror of chipset_mask & CSMASK_AGA */ bool direct_rgb; /* The shift factor to apply when converting between Amiga coordinates and window coordinates. Zero if the resolution is the same, positive if window coordinates have a higher resolution (i.e. we're stretching the image), negative if window coordinates have a lower resolution (i.e. we're shrinking the image). */ static int res_shift; static int linedbl, linedbld; int interlace_seen = 0; #define AUTO_LORES_FRAMES 10 static int can_use_lores = 0, frame_res, frame_res_lace, last_max_ypos; static uae_u16 bplcon0_store, bplcon3_store; /* Lookup tables for dual playfields. The dblpf_*1 versions are for the case that playfield 1 has the priority, dbplpf_*2 are used if playfield 2 has priority. If we need an array for non-dual playfield mode, it has no number. */ /* The dbplpf_ms? arrays contain a shift value. plf_spritemask is initialized to contain two 16 bit words, with the appropriate mask if pf1 is in the foreground being at bit offset 0, the one used if pf2 is in front being at offset 16. */ static int dblpf_ms1[256], dblpf_ms2[256], dblpf_ms[256]; static int dblpf_ind1[256], dblpf_ind2[256]; static int dblpf_2nd1[256], dblpf_2nd2[256]; static const int dblpfofs[] = { 0, 2, 4, 8, 16, 32, 64, 128 }; static int sprite_offs[256]; static uae_u32 clxtab[256]; /* Video buffer description structure. Filled in by the graphics system * dependent code. */ struct vidbuf_description gfxvidinfo; /* OCS/ECS color lookup table. */ xcolnr xcolors[4096]; struct spritepixelsbuf { uae_u8 attach; uae_u8 stdata; uae_u16 data; }; static struct spritepixelsbuf spritepixels[MAX_PIXELS_PER_LINE]; static int sprite_first_x, sprite_last_x; #ifdef AGA /* AGA mode color lookup tables */ unsigned int xredcolors[256], xgreencolors[256], xbluecolors[256]; static int dblpf_ind1_aga[256], dblpf_ind2_aga[256]; #else static uae_u8 spriteagadpfpixels[1]; static int dblpf_ind1_aga[1], dblpf_ind2_aga[1]; #endif int xredcolor_s, xredcolor_b, xredcolor_m; int xgreencolor_s, xgreencolor_b, xgreencolor_m; int xbluecolor_s, xbluecolor_b, xbluecolor_m; struct color_entry colors_for_drawing; /* The size of these arrays is pretty arbitrary; it was chosen to be "more than enough". The coordinates used for indexing into these arrays are almost, but not quite, Amiga coordinates (there's a constant offset). */ union { /* Let's try to align this thing. */ double uupzuq; long int cruxmedo; uae_u8 apixels[MAX_PIXELS_PER_LINE * 2]; uae_u16 apixels_w[MAX_PIXELS_PER_LINE * 2 / sizeof (uae_u16)]; uae_u32 apixels_l[MAX_PIXELS_PER_LINE * 2 / sizeof (uae_u32)]; } pixdata; #ifdef OS_WITHOUT_MEMORY_MANAGEMENT uae_u16 *spixels; #else uae_u16 spixels[2 * MAX_SPR_PIXELS]; #endif /* Eight bits for every pixel. */ union sps_union spixstate; static uae_u32 ham_linebuf[MAX_PIXELS_PER_LINE * 2]; static uae_u8 *real_bplpt[8]; static uae_u8 all_ones[MAX_PIXELS_PER_LINE]; static uae_u8 all_zeros[MAX_PIXELS_PER_LINE]; uae_u8 *xlinebuffer; static int *amiga2aspect_line_map, *native2amiga_line_map; static uae_u8 *row_map[MAX_VIDHEIGHT + 1]; static uae_u8 row_tmp[MAX_PIXELS_PER_LINE * 32 / 8]; static int max_drawn_amiga_line; /* line_draw_funcs: pfield_do_linetoscr, pfield_do_fill_line, decode_ham */ typedef void (*line_draw_func)(int, int, bool); #define LINE_UNDECIDED 1 #define LINE_DECIDED 2 #define LINE_DECIDED_DOUBLE 3 #define LINE_AS_PREVIOUS 4 #define LINE_BLACK 5 #define LINE_REMEMBERED_AS_BLACK 6 #define LINE_DONE 7 #define LINE_DONE_AS_PREVIOUS 8 #define LINE_REMEMBERED_AS_PREVIOUS 9 static uae_u8 linestate[(MAXVPOS + 2) * 2 + 1]; uae_u8 line_data[(MAXVPOS + 2) * 2][MAX_PLANES * MAX_WORDS_PER_LINE * 2]; /* Centering variables. */ static int min_diwstart, max_diwstop; /* The visible window: VISIBLE_LEFT_BORDER contains the left border of the visible area, VISIBLE_RIGHT_BORDER the right border. These are in window coordinates. */ int visible_left_border, visible_right_border; /* Pixels outside of visible_start and visible_stop are always black */ static int visible_left_start, visible_right_stop; static int visible_top_start, visible_bottom_stop; static int linetoscr_x_adjust_bytes; static int thisframe_y_adjust; static int thisframe_y_adjust_real, max_ypos_thisframe, min_ypos_for_screen; static int extra_y_adjust; int thisframe_first_drawn_line, thisframe_last_drawn_line; /* A frame counter that forces a redraw after at least one skipped frame in interlace mode. */ static int last_redraw_point; #define MAX_STOP 30000 static int first_drawn_line, last_drawn_line; static int first_block_line, last_block_line; #define NO_BLOCK -3 /* These are generated by the drawing code from the line_decisions array for each line that needs to be drawn. These are basically extracted out of bit fields in the hardware registers. */ static int bplehb, bplham, bpldualpf, bpldualpfpri, bpldualpf2of, bplplanecnt, ecsshres, issprites; static int bplres; static int plf1pri, plf2pri, bplxor; static uae_u32 plf_sprite_mask; static int sbasecol[2] = { 16, 16 }; static bool brdsprt, brdblank, brdblank_changed; static int hposblank; bool picasso_requested_on; bool picasso_on; uae_sem_t gui_sem; int inhibit_frame; int framecnt = 0; static int frame_redraw_necessary; static int picasso_redraw_necessary; #ifdef XLINECHECK static void xlinecheck (unsigned int start, unsigned int end) { unsigned int xstart = (unsigned int)xlinebuffer + start * gfxvidinfo.drawbuffer.pixbytes; unsigned int xend = (unsigned int)xlinebuffer + end * gfxvidinfo.drawbuffer.pixbytes; unsigned int end1 = (unsigned int)gfxvidinfo.drawbuffer.bufmem + gfxvidinfo.drawbuffer.rowbytes * gfxvidinfo.drawbuffer.height; int min = linetoscr_x_adjust_bytes / gfxvidinfo.drawbuffer.pixbytes; int ok = 1; if (xstart >= gfxvidinfo.drawbuffer.emergmem && xstart < gfxvidinfo.drawbuffer.emergmem + 4096 * gfxvidinfo.drawbuffer.pixbytes && xend >= gfxvidinfo.drawbuffer.emergmem && xend < gfxvidinfo.drawbuffer.emergmem + 4096 * gfxvidinfo.drawbuffer.pixbytes) return; if (xstart < (unsigned int)gfxvidinfo.drawbuffer.bufmem || xend < (unsigned int)gfxvidinfo.drawbuffer.bufmem) ok = 0; if (xend > end1 || xstart >= end1) ok = 0; xstart -= (unsigned int)gfxvidinfo.drawbuffer.bufmem; xend -= (unsigned int)gfxvidinfo.drawbuffer.bufmem; if ((xstart % gfxvidinfo.drawbuffer.rowbytes) >= gfxvidinfo.drawbuffer.width * gfxvidinfo.drawbuffer.pixbytes) ok = 0; if ((xend % gfxvidinfo.drawbuffer.rowbytes) >= gfxvidinfo.drawbuffer.width * gfxvidinfo.drawbuffer.pixbytes) ok = 0; if (xstart >= xend) ok = 0; if (xend - xstart > gfxvidinfo.drawbuffer.width * gfxvidinfo.drawbuffer.pixbytes) ok = 0; if (!ok) { write_log (_T("*** %d-%d (%dx%dx%d %d) %p\n"), start - min, end - min, gfxvidinfo.drawbuffer.width, gfxvidinfo.drawbuffer.height, gfxvidinfo.drawbuffer.pixbytes, gfxvidinfo.drawbuffer.rowbytes, xlinebuffer); } } #else #define xlinecheck #endif STATIC_INLINE void count_frame (void) { framecnt++; if (framecnt >= currprefs.gfx_framerate) framecnt = 0; if (inhibit_frame) framecnt = 1; } STATIC_INLINE int xshift (int x, int shift) { if (shift < 0) return x >> (-shift); else return x << shift; } int coord_native_to_amiga_x (int x) { x += visible_left_border; x = xshift (x, 1 - lores_shift); return x + 2 * DISPLAY_LEFT_SHIFT - 2 * DIW_DDF_OFFSET; } int coord_native_to_amiga_y (int y) { return native2amiga_line_map[y] + thisframe_y_adjust - minfirstline; } STATIC_INLINE int res_shift_from_window (int x) { if (res_shift >= 0) return x >> res_shift; return x << -res_shift; } STATIC_INLINE int res_shift_from_amiga (int x) { if (res_shift >= 0) return x >> res_shift; return x << -res_shift; } void notice_screen_contents_lost (void) { picasso_redraw_necessary = 1; frame_redraw_necessary = 2; } bool isnativevidbuf (void) { if (gfxvidinfo.outbuffer == &gfxvidinfo.drawbuffer) return true; return gfxvidinfo.outbuffer->nativepositioning; } extern int plffirstline_total, plflastline_total; extern int first_planes_vpos, last_planes_vpos; extern int diwfirstword_total, diwlastword_total; extern int ddffirstword_total, ddflastword_total; extern int firstword_bplcon1; extern int lof_store; #define MIN_DISPLAY_W 256 #define MIN_DISPLAY_H 192 #define MAX_DISPLAY_W 362 #define MAX_DISPLAY_H 283 static int gclow, gcloh, gclox, gcloy; void get_custom_topedge (int *x, int *y) { if (isnativevidbuf ()) { *x = visible_left_border + (DISPLAY_LEFT_SHIFT << currprefs.gfx_resolution); *y = minfirstline << currprefs.gfx_vresolution; } else { *x = 0; *y = 0; } } static void reset_custom_limits (void) { gclow = gcloh = gclox = gcloy = 0; } void set_custom_limits (int w, int h, int dx, int dy) { int vls = visible_left_start; int vrs = visible_right_stop; int vts = visible_top_start; int vbs = visible_bottom_stop; if (w <= 0 || dx < 0) { visible_left_start = 0; visible_right_stop = MAX_STOP; } else { visible_left_start = visible_left_border + dx; visible_right_stop = visible_left_start + w; } if (h <= 0 || dy < 0) { visible_top_start = 0; visible_bottom_stop = MAX_STOP; } else { visible_top_start = min_ypos_for_screen + dy; visible_bottom_stop = visible_top_start + h; } if (vls != visible_left_start || vrs != visible_right_stop || vts != visible_top_start || vbs != visible_bottom_stop) notice_screen_contents_lost (); } int get_custom_limits (int *pw, int *ph, int *pdx, int *pdy) { int w, h, dx, dy, y1, y2, dbl1, dbl2; int ret = 0; if (!pw || !ph || !pdx || !pdy) { reset_custom_limits (); return 0; } if (!isnativevidbuf ()) { *pw = gfxvidinfo.outbuffer->outwidth; *ph = gfxvidinfo.outbuffer->outheight; *pdx = 0; *pdy = 0; return 1; } *pw = gclow; *ph = gcloh; *pdx = gclox; *pdy = gcloy; if (gclow > 0 && gcloh > 0) ret = -1; if (interlace_seen) { // interlace = only use long frames if (!lof_store) return ret; /* program may have set last visible line as last possible line (CD32 boot screen) */ if (last_planes_vpos < maxvpos) last_planes_vpos++; if (plflastline_total < maxvpos) plflastline_total++; } if (plflastline_total < 4) plflastline_total = last_planes_vpos; ddffirstword_total = coord_hw_to_window_x (ddffirstword_total * 2 + DIW_DDF_OFFSET); ddflastword_total = coord_hw_to_window_x (ddflastword_total * 2 + DIW_DDF_OFFSET); if (doublescan <= 0 && !programmedmode) { int min = coord_diw_to_window_x (92); int max = coord_diw_to_window_x (460); if (diwfirstword_total < min) diwfirstword_total = min; if (diwlastword_total > max) diwlastword_total = max; if (ddffirstword_total < min) ddffirstword_total = min; if (ddflastword_total > max) ddflastword_total = max; if (0 && !(currprefs.chipset_mask & CSMASK_AGA)) { if (ddffirstword_total > diwfirstword_total) diwfirstword_total = ddffirstword_total; if (ddflastword_total < diwlastword_total) diwlastword_total = ddflastword_total; } } w = diwlastword_total - diwfirstword_total; dx = diwfirstword_total - visible_left_border; y2 = plflastline_total; if (y2 > last_planes_vpos) y2 = last_planes_vpos; y1 = plffirstline_total; if (first_planes_vpos > y1) y1 = first_planes_vpos; if (minfirstline > y1) y1 = minfirstline; dbl2 = dbl1 = currprefs.gfx_vresolution; if (doublescan > 0 && interlace_seen <= 0) { dbl1--; dbl2--; } h = y2 - y1; dy = y1 - minfirstline; if (first_planes_vpos == 0) { // no planes enabled during frame if (ret < 0) return 1; h = currprefs.ntscmode ? 200 : 240; w = 320 << currprefs.gfx_resolution; dy = 36 / 2; dx = 58; } if (dx < 0) dx = 0; dy = xshift (dy, dbl2); h = xshift (h, dbl1); if (w == 0 || h == 0) return 0; if (doublescan <= 0 && !programmedmode) { if ((w >> currprefs.gfx_resolution) < MIN_DISPLAY_W) { dx += (w - (MIN_DISPLAY_W << currprefs.gfx_resolution)) / 2; w = MIN_DISPLAY_W << currprefs.gfx_resolution; } if ((h >> dbl1) < MIN_DISPLAY_H) { dy += (h - (MIN_DISPLAY_H << dbl1)) / 2; h = MIN_DISPLAY_H << dbl1; } if ((w >> currprefs.gfx_resolution) > MAX_DISPLAY_W) { dx += (w - (MAX_DISPLAY_W << currprefs.gfx_resolution)) / 2; w = MAX_DISPLAY_W << currprefs.gfx_resolution; } if ((h >> dbl1) > MAX_DISPLAY_H) { dy += (h - (MAX_DISPLAY_H << dbl1)) / 2; h = MAX_DISPLAY_H << dbl1; } } if (gclow == w && gcloh == h && gclox == dx && gcloy == dy) return ret; if (w <= 0 || h <= 0 || dx < 0 || dy < 0) return ret; if (doublescan <= 0 && !programmedmode) { if (dx > gfxvidinfo.outbuffer->inwidth / 3) return ret; if (dy > gfxvidinfo.outbuffer->inheight / 3) return ret; } gclow = w; gcloh = h; gclox = dx; gcloy = dy; *pw = w; *ph = h; *pdx = dx; *pdy = dy; #if 1 write_log (_T("Display Size: %dx%d Offset: %dx%d\n"), w, h, dx, dy); write_log (_T("First: %d Last: %d MinV: %d MaxV: %d Min: %d\n"), plffirstline_total, plflastline_total, first_planes_vpos, last_planes_vpos, minfirstline); #endif return 1; } void get_custom_mouse_limits (int *pw, int *ph, int *pdx, int *pdy, int dbl) { int delay1, delay2; int w, h, dx, dy, dbl1, dbl2, y1, y2; w = diwlastword_total - diwfirstword_total; dx = diwfirstword_total - visible_left_border; y2 = plflastline_total; if (y2 > last_planes_vpos) y2 = last_planes_vpos; y1 = plffirstline_total; if (first_planes_vpos > y1) y1 = first_planes_vpos; if (minfirstline > y1) y1 = minfirstline; h = y2 - y1; dy = y1 - minfirstline; if (*pw > 0) w = *pw; w = xshift (w, res_shift); if (*ph > 0) h = *ph; delay1 = (firstword_bplcon1 & 0x0f) | ((firstword_bplcon1 & 0x0c00) >> 6); delay2 = ((firstword_bplcon1 >> 4) & 0x0f) | (((firstword_bplcon1 >> 4) & 0x0c00) >> 6); // if (delay1 == delay2) // dx += delay1; dx = xshift (dx, res_shift); dbl2 = dbl1 = currprefs.gfx_vresolution; if ((doublescan > 0 || interlace_seen > 0) && !dbl) { dbl1--; dbl2--; } if (interlace_seen > 0) dbl2++; if (interlace_seen <= 0 && dbl) dbl2--; h = xshift (h, dbl1); dy = xshift (dy, dbl2); if (w < 1) w = 1; if (h < 1) h = 1; if (dx < 0) dx = 0; if (dy < 0) dy = 0; *pw = w; *ph = h; *pdx = dx; *pdy = dy; } static struct decision *dp_for_drawing; static struct draw_info *dip_for_drawing; /* Record DIW of the current line for use by centering code. */ void record_diw_line (int plfstrt, int first, int last) { if (last > max_diwstop) max_diwstop = last; if (first < min_diwstart) { min_diwstart = first; /* if (plfstrt * 2 > min_diwstart) min_diwstart = plfstrt * 2; */ } } /* * Screen update macros/functions */ /* The important positions in the line: where do we start drawing the left border, where do we start drawing the playfield, where do we start drawing the right border. All of these are forced into the visible window (VISIBLE_LEFT_BORDER .. VISIBLE_RIGHT_BORDER). PLAYFIELD_START and PLAYFIELD_END are in window coordinates. */ static int playfield_start, playfield_end; static int real_playfield_start, real_playfield_end; static int linetoscr_diw_start, linetoscr_diw_end; static int native_ddf_left, native_ddf_right; static int pixels_offset; static int src_pixel, ham_src_pixel; /* How many pixels in window coordinates which are to the left of the left border. */ static int unpainted; static int seen_sprites; /* Initialize the variables necessary for drawing a line. * This involves setting up start/stop positions and display window * borders. */ static void pfield_init_linetoscr (void) { /* First, get data fetch start/stop in DIW coordinates. */ int ddf_left = dp_for_drawing->plfleft * 2 + DIW_DDF_OFFSET; int ddf_right = dp_for_drawing->plfright * 2 + DIW_DDF_OFFSET; /* Compute datafetch start/stop in pixels; native display coordinates. */ native_ddf_left = coord_hw_to_window_x (ddf_left); native_ddf_right = coord_hw_to_window_x (ddf_right); linetoscr_diw_start = dp_for_drawing->diwfirstword; linetoscr_diw_end = dp_for_drawing->diwlastword; res_shift = lores_shift - bplres; if (dip_for_drawing->nr_sprites == 0) { if (linetoscr_diw_start < native_ddf_left) linetoscr_diw_start = native_ddf_left; if (linetoscr_diw_end > native_ddf_right) linetoscr_diw_end = native_ddf_right; } /* Perverse cases happen. */ if (linetoscr_diw_end < linetoscr_diw_start) linetoscr_diw_end = linetoscr_diw_start; playfield_start = linetoscr_diw_start; playfield_end = linetoscr_diw_end; unpainted = visible_left_border < playfield_start ? 0 : visible_left_border - playfield_start; ham_src_pixel = MAX_PIXELS_PER_LINE + res_shift_from_window (playfield_start - native_ddf_left); unpainted = res_shift_from_window (unpainted); if (playfield_start < visible_left_border) playfield_start = visible_left_border; if (playfield_start > visible_right_border) playfield_start = visible_right_border; if (playfield_end < visible_left_border) playfield_end = visible_left_border; if (playfield_end > visible_right_border) playfield_end = visible_right_border; real_playfield_end = playfield_end; real_playfield_start = playfield_start; #ifdef AGA if (brdsprt && dip_for_drawing->nr_sprites) { int min = visible_right_border, max = visible_left_border, i; for (i = 0; i < dip_for_drawing->nr_sprites; i++) { int x; x = curr_sprite_entries[dip_for_drawing->first_sprite_entry + i].pos; if (x < min) min = x; x = curr_sprite_entries[dip_for_drawing->first_sprite_entry + i].max; if (x > max) max = x; } min = coord_hw_to_window_x (min >> sprite_buffer_res) + (DIW_DDF_OFFSET << lores_shift); max = coord_hw_to_window_x (max >> sprite_buffer_res) + (DIW_DDF_OFFSET << lores_shift); if (min < playfield_start) playfield_start = min; if (playfield_start < visible_left_border) playfield_start = visible_left_border; if (max > playfield_end) playfield_end = max; if (playfield_end > visible_right_border) playfield_end = visible_right_border; } #endif if (sprite_first_x < sprite_last_x) { if (sprite_first_x < 0) sprite_first_x = 0; if (sprite_last_x >= MAX_PIXELS_PER_LINE - 1) sprite_last_x = MAX_PIXELS_PER_LINE - 2; if (sprite_first_x < sprite_last_x) memset (spritepixels + sprite_first_x, 0, sizeof (struct spritepixelsbuf) * (sprite_last_x - sprite_first_x + 1)); } sprite_last_x = 0; sprite_first_x = MAX_PIXELS_PER_LINE - 1; /* Now, compute some offsets. */ ddf_left -= DISPLAY_LEFT_SHIFT; pixels_offset = MAX_PIXELS_PER_LINE - (ddf_left << bplres); ddf_left <<= bplres; src_pixel = MAX_PIXELS_PER_LINE + res_shift_from_window (playfield_start - native_ddf_left); seen_sprites = 0; if (dip_for_drawing->nr_sprites == 0) return; seen_sprites = 1; /* Must clear parts of apixels. */ if (linetoscr_diw_start < native_ddf_left) { int size = res_shift_from_window (native_ddf_left - linetoscr_diw_start); linetoscr_diw_start = native_ddf_left; memset (pixdata.apixels + MAX_PIXELS_PER_LINE - size, 0, size); } if (linetoscr_diw_end > native_ddf_right) { int pos = res_shift_from_window (native_ddf_right - native_ddf_left); int size = res_shift_from_window (linetoscr_diw_end - native_ddf_right); linetoscr_diw_start = native_ddf_left; memset (pixdata.apixels + MAX_PIXELS_PER_LINE + pos, 0, size); } } STATIC_INLINE uae_u16 merge_2pixel16 (uae_u16 p1, uae_u16 p2) { uae_u16 v = ((((p1 >> xredcolor_s) & xredcolor_m) + ((p2 >> xredcolor_s) & xredcolor_m)) / 2) << xredcolor_s; v |= ((((p1 >> xbluecolor_s) & xbluecolor_m) + ((p2 >> xbluecolor_s) & xbluecolor_m)) / 2) << xbluecolor_s; v |= ((((p1 >> xgreencolor_s) & xgreencolor_m) + ((p2 >> xgreencolor_s) & xgreencolor_m)) / 2) << xgreencolor_s; return v; } STATIC_INLINE uae_u32 merge_2pixel32 (uae_u32 p1, uae_u32 p2) { uae_u32 v = ((((p1 >> 16) & 0xff) + ((p2 >> 16) & 0xff)) / 2) << 16; v |= ((((p1 >> 8) & 0xff) + ((p2 >> 8) & 0xff)) / 2) << 8; v |= ((((p1 >> 0) & 0xff) + ((p2 >> 0) & 0xff)) / 2) << 0; return v; } STATIC_INLINE xcolnr getbgc (bool blank) { #if 0 if (blank) return xcolors[0x088]; else if (hposblank == 1) return xcolors[0xf00]; else if (hposblank == 2) return xcolors[0x0f0]; else if (hposblank == 3) return xcolors[0x00f]; else if (brdblank) return xcolors[0x880]; return xcolors[0xf0f]; #endif return (blank || brdblank || hposblank) ? 0 : colors_for_drawing.acolors[0]; } STATIC_INLINE void fill_line_16 (uae_u8 *buf, int start, int stop, bool blank) { uae_u16 *b = (uae_u16 *)buf; unsigned int i; unsigned int rem = 0; xcolnr col = getbgc (blank); if (((long)&b[start]) & 1) b[start++] = (uae_u16) col; if (start >= stop) return; if (((long)&b[stop]) & 1) { rem++; stop--; } for (i = start; i < stop; i += 2) { uae_u32 *b2 = (uae_u32 *)&b[i]; *b2 = col; } if (rem) b[stop] = (uae_u16)col; } STATIC_INLINE void fill_line_32 (uae_u8 *buf, int start, int stop, bool blank) { uae_u32 *b = (uae_u32 *)buf; unsigned int i; xcolnr col = getbgc (blank); for (i = start; i < stop; i++) b[i] = col; } static void pfield_do_fill_line2 (int start, int stop, bool blank) { switch (gfxvidinfo.drawbuffer.pixbytes) { case 2: fill_line_16 (xlinebuffer, start, stop, blank); break; case 4: fill_line_32 (xlinebuffer, start, stop, blank); break; } } static void pfield_do_fill_line (int start, int stop, bool blank) { xlinecheck(start, stop); if (!blank) { if (start < visible_left_start) { pfield_do_fill_line2 (start, visible_left_start, true); start = visible_left_start; } if (stop > visible_right_stop) { pfield_do_fill_line2 (start, visible_right_stop, false); blank = true; start = visible_right_stop; } } pfield_do_fill_line2 (start, stop, blank); } STATIC_INLINE void fill_line2 (int startpos, int len) { int shift; int nints, nrem; int *start; xcolnr val; shift = 0; if (gfxvidinfo.drawbuffer.pixbytes == 2) shift = 1; if (gfxvidinfo.drawbuffer.pixbytes == 4) shift = 2; nints = len >> (2 - shift); nrem = nints & 7; nints &= ~7; start = (int *)(((uae_u8*)xlinebuffer) + (startpos << shift)); val = getbgc (false); for (; nints > 0; nints -= 8, start += 8) { *start = val; *(start+1) = val; *(start+2) = val; *(start+3) = val; *(start+4) = val; *(start+5) = val; *(start+6) = val; *(start+7) = val; } switch (nrem) { case 7: *start++ = val; case 6: *start++ = val; case 5: *start++ = val; case 4: *start++ = val; case 3: *start++ = val; case 2: *start++ = val; case 1: *start = val; } } static void fill_line (void) { int hs = coord_hw_to_window_x (hsyncstartpos * 2); if (hs >= gfxvidinfo.drawbuffer.inwidth || hposblank) { hposblank = 3; fill_line2 (visible_left_border, gfxvidinfo.drawbuffer.inwidth); } else { fill_line2 (visible_left_border, hs); hposblank = 2; fill_line2 (visible_left_border + hs, gfxvidinfo.drawbuffer.inwidth); } } #define SPRITE_DEBUG 0 STATIC_INLINE uae_u8 render_sprites (int pos, int dualpf, uae_u8 apixel, int aga) { struct spritepixelsbuf *spb = &spritepixels[pos]; unsigned int v = spb->data; int *shift_lookup = dualpf ? (bpldualpfpri ? dblpf_ms2 : dblpf_ms1) : dblpf_ms; int maskshift, plfmask; /* The value in the shift lookup table is _half_ the shift count we need. This is because we can't shift 32 bits at once (undefined behaviour in C). */ maskshift = shift_lookup[apixel]; plfmask = (plf_sprite_mask >> maskshift) >> maskshift; v &= ~plfmask; if (v != 0 || SPRITE_DEBUG) { unsigned int vlo, vhi, col; unsigned int v1 = v & 255; /* OFFS determines the sprite pair with the highest priority that has any bits set. E.g. if we have 0xFF00 in the buffer, we have sprite pairs 01 and 23 cleared, and pairs 45 and 67 set, so OFFS will have a value of 4. 2 * OFFS is the bit number in V of the sprite pair, and it also happens to be the color offset for that pair. */ int offs; if (v1 == 0) offs = 4 + sprite_offs[v >> 8]; else offs = sprite_offs[v1]; /* Shift highest priority sprite pair down to bit zero. */ v >>= offs * 2; v &= 15; #if SPRITE_DEBUG > 0 v ^= 8; #endif if (spb->attach && (spb->stdata & (3 << offs))) { col = v; if (aga) col += sbasecol[1]; else col += 16; } else { /* This sequence computes the correct color value. We have to select either the lower-numbered or the higher-numbered sprite in the pair. We have to select the high one if the low one has all bits zero. If the lower-numbered sprite has any bits nonzero, (VLO - 1) is in the range of 0..2, and with the mask and shift, VHI will be zero. If the lower-numbered sprite is zero, (VLO - 1) is a mask of 0xFFFFFFFF, and we select the bits of the higher numbered sprite in VHI. This is _probably_ more efficient than doing it with branches. */ vlo = v & 3; vhi = (v & (vlo - 1)) >> 2; col = (vlo | vhi); if (aga) { if (vhi > 0) col += sbasecol[1]; else col += sbasecol[0]; } else { col += 16; } col += offs * 2; } return col; } return 0; } #include "linetoscr.cpp" #define LTPARMS src_pixel, start, stop #ifdef ECS_DENISE /* ECS SuperHires special cases */ #define PUTBPIX(x) buf[dpix] = (x); STATIC_INLINE uae_u32 shsprite (int dpix, uae_u32 spix_val, uae_u32 v, int spr) { uae_u8 sprcol; uae_u16 scol; if (!spr) return v; sprcol = render_sprites (dpix, 0, spix_val, 0); if (!sprcol) return v; /* good enough for now.. */ scol = colors_for_drawing.color_regs_ecs[sprcol] & 0xccc; scol |= scol >> 2; return xcolors[scol]; } static int NOINLINE linetoscr_16_sh (int spix, int dpix, int stoppos, int spr) { uae_u16 *buf = (uae_u16 *) xlinebuffer; while (dpix < stoppos) { uae_u16 spix_val1, spix_val2; uae_u16 v; int off; spix_val1 = pixdata.apixels[spix++]; spix_val2 = pixdata.apixels[spix++]; off = ((spix_val2 & 3) * 4) + (spix_val1 & 3) + ((spix_val1 | spix_val2) & 16); v = (colors_for_drawing.color_regs_ecs[off] & 0xccc) << 0; v |= v >> 2; PUTBPIX(shsprite (dpix, spix_val1, xcolors[v], spr)); dpix++; v = (colors_for_drawing.color_regs_ecs[off] & 0x333) << 2; v |= v >> 2; PUTBPIX(shsprite (dpix, spix_val2, xcolors[v], spr)); dpix++; } return spix; } static int NOINLINE linetoscr_32_sh (int spix, int dpix, int stoppos, int spr) { uae_u32 *buf = (uae_u32 *) xlinebuffer; while (dpix < stoppos) { uae_u32 spix_val1, spix_val2; uae_u16 v; int off; spix_val1 = pixdata.apixels[spix++]; spix_val2 = pixdata.apixels[spix++]; off = ((spix_val2 & 3) * 4) + (spix_val1 & 3) + ((spix_val1 | spix_val2) & 16); v = (colors_for_drawing.color_regs_ecs[off] & 0xccc) << 0; v |= v >> 2; PUTBPIX(shsprite (dpix, spix_val1, xcolors[v], spr)); dpix++; v = (colors_for_drawing.color_regs_ecs[off] & 0x333) << 2; v |= v >> 2; PUTBPIX(shsprite (dpix, spix_val2, xcolors[v], spr)); dpix++; } return spix; } static int NOINLINE linetoscr_32_shrink1_sh (int spix, int dpix, int stoppos, int spr) { uae_u32 *buf = (uae_u32 *) xlinebuffer; while (dpix < stoppos) { uae_u32 spix_val1, spix_val2; uae_u16 v; int off; spix_val1 = pixdata.apixels[spix++]; spix_val2 = pixdata.apixels[spix++]; off = ((spix_val2 & 3) * 4) + (spix_val1 & 3) + ((spix_val1 | spix_val2) & 16); v = (colors_for_drawing.color_regs_ecs[off] & 0xccc) << 0; v |= v >> 2; PUTBPIX(shsprite (dpix, spix_val1, xcolors[v], spr)); dpix++; } return spix; } static int NOINLINE linetoscr_32_shrink1f_sh (int spix, int dpix, int stoppos, int spr) { uae_u32 *buf = (uae_u32 *) xlinebuffer; while (dpix < stoppos) { uae_u32 spix_val1, spix_val2, dpix_val1, dpix_val2; uae_u16 v; int off; spix_val1 = pixdata.apixels[spix++]; spix_val2 = pixdata.apixels[spix++]; off = ((spix_val2 & 3) * 4) + (spix_val1 & 3) + ((spix_val1 | spix_val2) & 16); v = (colors_for_drawing.color_regs_ecs[off] & 0xccc) << 0; v |= v >> 2; dpix_val1 = xcolors[v]; v = (colors_for_drawing.color_regs_ecs[off] & 0x333) << 2; v |= v >> 2; dpix_val2 = xcolors[v]; PUTBPIX(shsprite (dpix, spix_val1, merge_2pixel32 (dpix_val1, dpix_val2), spr)); dpix++; } return spix; } static int NOINLINE linetoscr_16_shrink1_sh (int spix, int dpix, int stoppos, int spr) { uae_u16 *buf = (uae_u16 *) xlinebuffer; while (dpix < stoppos) { uae_u16 spix_val1, spix_val2; uae_u16 v; int off; spix_val1 = pixdata.apixels[spix++]; spix_val2 = pixdata.apixels[spix++]; off = ((spix_val2 & 3) * 4) + (spix_val1 & 3) + ((spix_val1 | spix_val2) & 16); v = (colors_for_drawing.color_regs_ecs[off] & 0xccc) << 0; v |= v >> 2; PUTBPIX(shsprite (dpix, spix_val1, xcolors[v], spr)); dpix++; } return spix; } static int NOINLINE linetoscr_16_shrink1f_sh (int spix, int dpix, int stoppos, int spr) { uae_u16 *buf = (uae_u16 *) xlinebuffer; while (dpix < stoppos) { uae_u16 spix_val1, spix_val2, dpix_val1, dpix_val2; uae_u16 v; int off; spix_val1 = pixdata.apixels[spix++]; spix_val2 = pixdata.apixels[spix++]; off = ((spix_val2 & 3) * 4) + (spix_val1 & 3) + ((spix_val1 | spix_val2) & 16); v = (colors_for_drawing.color_regs_ecs[off] & 0xccc) << 0; v |= v >> 2; dpix_val1 = xcolors[v]; v = (colors_for_drawing.color_regs_ecs[off] & 0x333) << 2; v |= v >> 2; dpix_val2 = xcolors[v]; PUTBPIX(shsprite (dpix, spix_val1, merge_2pixel16 (dpix_val1, dpix_val2), spr)); dpix++; } return spix; } static int NOINLINE linetoscr_32_shrink2_sh (int spix, int dpix, int stoppos, int spr) { uae_u32 *buf = (uae_u32 *) xlinebuffer; while (dpix < stoppos) { uae_u32 spix_val1, spix_val2; uae_u16 v; int off; spix_val1 = pixdata.apixels[spix++]; spix_val2 = pixdata.apixels[spix++]; off = ((spix_val2 & 3) * 4) + (spix_val1 & 3) + ((spix_val1 | spix_val2) & 16); v = (colors_for_drawing.color_regs_ecs[off] & 0xccc) << 0; v |= v >> 2; PUTBPIX(shsprite (dpix, spix_val1, xcolors[v], spr)); spix+=2; dpix++; } return spix; } static int NOINLINE linetoscr_32_shrink2f_sh (int spix, int dpix, int stoppos, int spr) { uae_u32 *buf = (uae_u32 *) xlinebuffer; while (dpix < stoppos) { uae_u32 spix_val1, spix_val2, dpix_val1, dpix_val2, dpix_val3, dpix_val4; uae_u16 v; int off; spix_val1 = pixdata.apixels[spix++]; spix_val2 = pixdata.apixels[spix++]; off = ((spix_val2 & 3) * 4) + (spix_val1 & 3) + ((spix_val1 | spix_val2) & 16); v = (colors_for_drawing.color_regs_ecs[off] & 0xccc) << 0; v |= v >> 2; dpix_val1 = xcolors[v]; v = (colors_for_drawing.color_regs_ecs[off] & 0x333) << 2; v |= v >> 2; dpix_val2 = xcolors[v]; dpix_val3 = merge_2pixel32 (dpix_val1, dpix_val2); spix_val1 = pixdata.apixels[spix++]; spix_val2 = pixdata.apixels[spix++]; off = ((spix_val2 & 3) * 4) + (spix_val1 & 3) + ((spix_val1 | spix_val2) & 16); v = (colors_for_drawing.color_regs_ecs[off] & 0xccc) << 0; v |= v >> 2; dpix_val1 = xcolors[v]; v = (colors_for_drawing.color_regs_ecs[off] & 0x333) << 2; v |= v >> 2; dpix_val2 = xcolors[v]; dpix_val4 = merge_2pixel32 (dpix_val1, dpix_val2); PUTBPIX(shsprite (dpix, spix_val1, merge_2pixel32 (dpix_val3, dpix_val4), spr)); dpix++; } return spix; } static int NOINLINE linetoscr_16_shrink2_sh (int spix, int dpix, int stoppos, int spr) { uae_u16 *buf = (uae_u16 *) xlinebuffer; while (dpix < stoppos) { uae_u16 spix_val1, spix_val2; uae_u16 v; int off; spix_val1 = pixdata.apixels[spix++]; spix_val2 = pixdata.apixels[spix++]; off = ((spix_val2 & 3) * 4) + (spix_val1 & 3) + ((spix_val1 | spix_val2) & 16); v = (colors_for_drawing.color_regs_ecs[off] & 0xccc) << 0; v |= v >> 2; PUTBPIX(shsprite (dpix, spix_val1, xcolors[v], spr)); spix+=2; dpix++; } return spix; } static int NOINLINE linetoscr_16_shrink2f_sh (int spix, int dpix, int stoppos, int spr) { uae_u16 *buf = (uae_u16 *) xlinebuffer; while (dpix < stoppos) { uae_u16 spix_val1, spix_val2, dpix_val1, dpix_val2, dpix_val3, dpix_val4; uae_u16 v; int off; spix_val1 = pixdata.apixels[spix++]; spix_val2 = pixdata.apixels[spix++]; off = ((spix_val2 & 3) * 4) + (spix_val1 & 3) + ((spix_val1 | spix_val2) & 16); v = (colors_for_drawing.color_regs_ecs[off] & 0xccc) << 0; v |= v >> 2; dpix_val1 = xcolors[v]; v = (colors_for_drawing.color_regs_ecs[off] & 0x333) << 2; v |= v >> 2; dpix_val2 = xcolors[v]; dpix_val3 = merge_2pixel32 (dpix_val1, dpix_val2); spix_val1 = pixdata.apixels[spix++]; spix_val2 = pixdata.apixels[spix++]; off = ((spix_val2 & 3) * 4) + (spix_val1 & 3) + ((spix_val1 | spix_val2) & 16); v = (colors_for_drawing.color_regs_ecs[off] & 0xccc) << 0; v |= v >> 2; dpix_val1 = xcolors[v]; v = (colors_for_drawing.color_regs_ecs[off] & 0x333) << 2; v |= v >> 2; dpix_val2 = xcolors[v]; dpix_val4 = merge_2pixel32 (dpix_val1, dpix_val2); PUTBPIX(shsprite (dpix, spix_val1, merge_2pixel16 (dpix_val3, dpix_val4), spr)); dpix++; } return spix; } #endif static void pfield_do_linetoscr (int start, int stop, bool blank) { xlinecheck(start, stop); if (issprites && (currprefs.chipset_mask & CSMASK_AGA)) { if (res_shift == 0) { switch (gfxvidinfo.drawbuffer.pixbytes) { case 2: src_pixel = linetoscr_16_aga_spr (LTPARMS); break; case 4: src_pixel = linetoscr_32_aga_spr (LTPARMS); break; } } else if (res_shift == 2) { switch (gfxvidinfo.drawbuffer.pixbytes) { case 2: src_pixel = linetoscr_16_stretch2_aga_spr (LTPARMS); break; case 4: src_pixel = linetoscr_32_stretch2_aga_spr (LTPARMS); break; } } else if (res_shift == 1) { switch (gfxvidinfo.drawbuffer.pixbytes) { case 2: src_pixel = linetoscr_16_stretch1_aga_spr (LTPARMS); break; case 4: src_pixel = linetoscr_32_stretch1_aga_spr (LTPARMS); break; } } else if (res_shift == -1) { if (currprefs.gfx_lores_mode) { switch (gfxvidinfo.drawbuffer.pixbytes) { case 2: src_pixel = linetoscr_16_shrink1f_aga_spr (LTPARMS); break; case 4: src_pixel = linetoscr_32_shrink1f_aga_spr (LTPARMS); break; } } else { switch (gfxvidinfo.drawbuffer.pixbytes) { case 2: src_pixel = linetoscr_16_shrink1_aga_spr (LTPARMS); break; case 4: src_pixel = linetoscr_32_shrink1_aga_spr (LTPARMS); break; } } } else if (res_shift == -2) { if (currprefs.gfx_lores_mode) { switch (gfxvidinfo.drawbuffer.pixbytes) { case 2: src_pixel = linetoscr_16_shrink2f_aga_spr (LTPARMS); break; case 4: src_pixel = linetoscr_32_shrink2f_aga_spr (LTPARMS); break; } } else { switch (gfxvidinfo.drawbuffer.pixbytes) { case 2: src_pixel = linetoscr_16_shrink2_aga_spr (LTPARMS); break; case 4: src_pixel = linetoscr_32_shrink2_aga_spr (LTPARMS); break; } } } } else #ifdef AGA if (currprefs.chipset_mask & CSMASK_AGA) { if (res_shift == 0) { switch (gfxvidinfo.drawbuffer.pixbytes) { case 2: src_pixel = linetoscr_16_aga (LTPARMS); break; case 4: src_pixel = linetoscr_32_aga (LTPARMS); break; } } else if (res_shift == 2) { switch (gfxvidinfo.drawbuffer.pixbytes) { case 2: src_pixel = linetoscr_16_stretch2_aga (LTPARMS); break; case 4: src_pixel = linetoscr_32_stretch2_aga (LTPARMS); break; } } else if (res_shift == 1) { switch (gfxvidinfo.drawbuffer.pixbytes) { case 2: src_pixel = linetoscr_16_stretch1_aga (LTPARMS); break; case 4: src_pixel = linetoscr_32_stretch1_aga (LTPARMS); break; } } else if (res_shift == -1) { if (currprefs.gfx_lores_mode) { switch (gfxvidinfo.drawbuffer.pixbytes) { case 2: src_pixel = linetoscr_16_shrink1f_aga (LTPARMS); break; case 4: src_pixel = linetoscr_32_shrink1f_aga (LTPARMS); break; } } else { switch (gfxvidinfo.drawbuffer.pixbytes) { case 2: src_pixel = linetoscr_16_shrink1_aga (LTPARMS); break; case 4: src_pixel = linetoscr_32_shrink1_aga (LTPARMS); break; } } } else if (res_shift == -2) { if (currprefs.gfx_lores_mode) { switch (gfxvidinfo.drawbuffer.pixbytes) { case 2: src_pixel = linetoscr_16_shrink2f_aga (LTPARMS); break; case 4: src_pixel = linetoscr_32_shrink2f_aga (LTPARMS); break; } } else { switch (gfxvidinfo.drawbuffer.pixbytes) { case 2: src_pixel = linetoscr_16_shrink2_aga (LTPARMS); break; case 4: src_pixel = linetoscr_32_shrink2_aga (LTPARMS); break; } } } } else #endif #ifdef ECS_DENISE if (ecsshres) { if (res_shift == 0) { switch (gfxvidinfo.drawbuffer.pixbytes) { case 2: src_pixel = linetoscr_16_sh (LTPARMS, issprites); break; case 4: src_pixel = linetoscr_32_sh (LTPARMS, issprites); break; } } else if (res_shift == -1) { if (currprefs.gfx_lores_mode) { switch (gfxvidinfo.drawbuffer.pixbytes) { case 2: src_pixel = linetoscr_16_shrink1f_sh (LTPARMS, issprites); break; case 4: src_pixel = linetoscr_32_shrink1f_sh (LTPARMS, issprites); break; } } else { switch (gfxvidinfo.drawbuffer.pixbytes) { case 2: src_pixel = linetoscr_16_shrink1_sh (LTPARMS, issprites); break; case 4: src_pixel = linetoscr_32_shrink1_sh (LTPARMS, issprites); break; } } } else if (res_shift == -2) { if (currprefs.gfx_lores_mode) { switch (gfxvidinfo.drawbuffer.pixbytes) { case 2: src_pixel = linetoscr_16_shrink2f_sh (LTPARMS, issprites); break; case 4: src_pixel = linetoscr_32_shrink2f_sh (LTPARMS, issprites); break; } } else { switch (gfxvidinfo.drawbuffer.pixbytes) { case 2: src_pixel = linetoscr_16_shrink2_sh (LTPARMS, issprites); break; case 4: src_pixel = linetoscr_32_shrink2_sh (LTPARMS, issprites); break; } } } } else #endif if (issprites) { if (res_shift == 0) { switch (gfxvidinfo.drawbuffer.pixbytes) { case 2: src_pixel = linetoscr_16_spr (LTPARMS); break; case 4: src_pixel = linetoscr_32_spr (LTPARMS); break; } } else if (res_shift == 2) { switch (gfxvidinfo.drawbuffer.pixbytes) { case 2: src_pixel = linetoscr_16_stretch2_spr (LTPARMS); break; case 4: src_pixel = linetoscr_32_stretch2_spr (LTPARMS); break; } } else if (res_shift == 1) { switch (gfxvidinfo.drawbuffer.pixbytes) { case 2: src_pixel = linetoscr_16_stretch1_spr (LTPARMS); break; case 4: src_pixel = linetoscr_32_stretch1_spr (LTPARMS); break; } } else if (res_shift == -1) { if (currprefs.gfx_lores_mode) { switch (gfxvidinfo.drawbuffer.pixbytes) { case 2: src_pixel = linetoscr_16_shrink1f_spr (LTPARMS); break; case 4: src_pixel = linetoscr_32_shrink1f_spr (LTPARMS); break; } } else { switch (gfxvidinfo.drawbuffer.pixbytes) { case 2: src_pixel = linetoscr_16_shrink1_spr (LTPARMS); break; case 4: src_pixel = linetoscr_32_shrink1_spr (LTPARMS); break; } } } } else { if (res_shift == 0) { switch (gfxvidinfo.drawbuffer.pixbytes) { case 2: src_pixel = linetoscr_16 (LTPARMS); break; case 4: src_pixel = linetoscr_32 (LTPARMS); break; } } else if (res_shift == 2) { switch (gfxvidinfo.drawbuffer.pixbytes) { case 2: src_pixel = linetoscr_16_stretch2 (LTPARMS); break; case 4: src_pixel = linetoscr_32_stretch2 (LTPARMS); break; } } else if (res_shift == 1) { switch (gfxvidinfo.drawbuffer.pixbytes) { case 2: src_pixel = linetoscr_16_stretch1 (LTPARMS); break; case 4: src_pixel = linetoscr_32_stretch1 (LTPARMS); break; } } else if (res_shift == -1) { if (currprefs.gfx_lores_mode) { switch (gfxvidinfo.drawbuffer.pixbytes) { case 2: src_pixel = linetoscr_16_shrink1f (LTPARMS); break; case 4: src_pixel = linetoscr_32_shrink1f (LTPARMS); break; } } else { switch (gfxvidinfo.drawbuffer.pixbytes) { case 2: src_pixel = linetoscr_16_shrink1 (LTPARMS); break; case 4: src_pixel = linetoscr_32_shrink1 (LTPARMS); break; } } } } } static void dummy_worker (int start, int stop, bool blank) { } static int ham_decode_pixel; static unsigned int ham_lastcolor; /* Decode HAM in the invisible portion of the display (left of VISIBLE_LEFT_BORDER), * but don't draw anything in. This is done to prepare HAM_LASTCOLOR for later, * when decode_ham runs. * */ static void init_ham_decoding (void) { int unpainted_amiga = unpainted; ham_decode_pixel = ham_src_pixel; ham_lastcolor = color_reg_get (&colors_for_drawing, 0); if (!bplham) { if (unpainted_amiga > 0) { int pv = pixdata.apixels[ham_decode_pixel + unpainted_amiga - 1]; #ifdef AGA if (currprefs.chipset_mask & CSMASK_AGA) ham_lastcolor = colors_for_drawing.color_regs_aga[pv ^ bplxor]; else #endif ham_lastcolor = colors_for_drawing.color_regs_ecs[pv]; } #ifdef AGA } else if (currprefs.chipset_mask & CSMASK_AGA) { if (bplplanecnt >= 7) { /* AGA mode HAM8 */ while (unpainted_amiga-- > 0) { int pv = pixdata.apixels[ham_decode_pixel++] ^ bplxor; switch (pv & 0x3) { case 0x0: ham_lastcolor = colors_for_drawing.color_regs_aga[pv >> 2]; break; case 0x1: ham_lastcolor &= 0xFFFF03; ham_lastcolor |= (pv & 0xFC); break; case 0x2: ham_lastcolor &= 0x03FFFF; ham_lastcolor |= (pv & 0xFC) << 16; break; case 0x3: ham_lastcolor &= 0xFF03FF; ham_lastcolor |= (pv & 0xFC) << 8; break; } } } else { /* AGA mode HAM6 */ while (unpainted_amiga-- > 0) { int pv = pixdata.apixels[ham_decode_pixel++] ^ bplxor; switch (pv & 0x30) { case 0x00: ham_lastcolor = colors_for_drawing.color_regs_aga[pv]; 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; } } } #endif } else { /* OCS/ECS mode HAM6 */ while (unpainted_amiga-- > 0) { int pv = pixdata.apixels[ham_decode_pixel++]; switch (pv & 0x30) { case 0x00: ham_lastcolor = colors_for_drawing.color_regs_ecs[pv]; break; case 0x10: ham_lastcolor &= 0xFF0; ham_lastcolor |= (pv & 0xF); break; case 0x20: ham_lastcolor &= 0x0FF; ham_lastcolor |= (pv & 0xF) << 8; break; case 0x30: ham_lastcolor &= 0xF0F; ham_lastcolor |= (pv & 0xF) << 4; break; } } } } static void decode_ham (int pix, int stoppos, bool blank) { int todraw_amiga = res_shift_from_window (stoppos - pix); if (!bplham) { while (todraw_amiga-- > 0) { int pv = pixdata.apixels[ham_decode_pixel]; #ifdef AGA if (currprefs.chipset_mask & CSMASK_AGA) ham_lastcolor = colors_for_drawing.color_regs_aga[pv ^ bplxor]; else #endif ham_lastcolor = colors_for_drawing.color_regs_ecs[pv]; ham_linebuf[ham_decode_pixel++] = ham_lastcolor; } #ifdef AGA } else if (currprefs.chipset_mask & CSMASK_AGA) { if (bplplanecnt >= 7) { /* AGA mode HAM8 */ while (todraw_amiga-- > 0) { int pv = pixdata.apixels[ham_decode_pixel] ^ bplxor; switch (pv & 0x3) { case 0x0: ham_lastcolor = colors_for_drawing.color_regs_aga[pv >> 2]; break; case 0x1: ham_lastcolor &= 0xFFFF03; ham_lastcolor |= (pv & 0xFC); break; case 0x2: ham_lastcolor &= 0x03FFFF; ham_lastcolor |= (pv & 0xFC) << 16; break; case 0x3: ham_lastcolor &= 0xFF03FF; ham_lastcolor |= (pv & 0xFC) << 8; break; } ham_linebuf[ham_decode_pixel++] = ham_lastcolor; } } else { /* AGA mode HAM6 */ while (todraw_amiga-- > 0) { int pv = pixdata.apixels[ham_decode_pixel] ^ bplxor; switch (pv & 0x30) { case 0x00: ham_lastcolor = colors_for_drawing.color_regs_aga[pv]; 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; } ham_linebuf[ham_decode_pixel++] = ham_lastcolor; } } #endif } else { /* OCS/ECS mode HAM6 */ while (todraw_amiga-- > 0) { int pv = pixdata.apixels[ham_decode_pixel]; switch (pv & 0x30) { case 0x00: ham_lastcolor = colors_for_drawing.color_regs_ecs[pv]; break; case 0x10: ham_lastcolor &= 0xFF0; ham_lastcolor |= (pv & 0xF); break; case 0x20: ham_lastcolor &= 0x0FF; ham_lastcolor |= (pv & 0xF) << 8; break; case 0x30: ham_lastcolor &= 0xF0F; ham_lastcolor |= (pv & 0xF) << 4; break; } ham_linebuf[ham_decode_pixel++] = ham_lastcolor; } } } static void gen_pfield_tables (void) { int i; for (i = 0; i < 256; i++) { int plane1 = ((i >> 0) & 1) | ((i >> 1) & 2) | ((i >> 2) & 4) | ((i >> 3) & 8); int plane2 = ((i >> 1) & 1) | ((i >> 2) & 2) | ((i >> 3) & 4) | ((i >> 4) & 8); dblpf_2nd1[i] = plane1 == 0 && plane2 != 0; dblpf_2nd2[i] = plane2 != 0; #ifdef AGA dblpf_ind1_aga[i] = plane1 == 0 ? plane2 : plane1; dblpf_ind2_aga[i] = plane2 == 0 ? plane1 : plane2; #endif dblpf_ms1[i] = plane1 == 0 ? (plane2 == 0 ? 16 : 8) : 0; dblpf_ms2[i] = plane2 == 0 ? (plane1 == 0 ? 16 : 0) : 8; dblpf_ms[i] = i == 0 ? 16 : 8; if (plane2 > 0) plane2 += 8; dblpf_ind1[i] = i >= 128 ? i & 0x7F : (plane1 == 0 ? plane2 : plane1); dblpf_ind2[i] = i >= 128 ? i & 0x7F : (plane2 == 0 ? plane1 : plane2); sprite_offs[i] = (i & 15) ? 0 : 2; clxtab[i] = ((((i & 3) && (i & 12)) << 9) | (((i & 3) && (i & 48)) << 10) | (((i & 3) && (i & 192)) << 11) | (((i & 12) && (i & 48)) << 12) | (((i & 12) && (i & 192)) << 13) | (((i & 48) && (i & 192)) << 14)); } memset (all_ones, 0xff, MAX_PIXELS_PER_LINE); } /* When looking at this function and the ones that inline it, bear in mind what an optimizing compiler will do with this code. All callers of this function only pass in constant arguments (except for E). This means that many of the if statements will go away completely after inlining. */ STATIC_INLINE void draw_sprites_1 (struct sprite_entry *e, int dualpf, int has_attach) { uae_u16 *buf = spixels + e->first_pixel; uae_u8 *stbuf = spixstate.bytes + e->first_pixel; int spr_pos, pos; buf -= e->pos; stbuf -= e->pos; spr_pos = e->pos + ((DIW_DDF_OFFSET - DISPLAY_LEFT_SHIFT) << sprite_buffer_res); if (spr_pos < sprite_first_x) sprite_first_x = spr_pos; for (pos = e->pos; pos < e->max; pos++, spr_pos++) { if (spr_pos >= 0 && spr_pos < MAX_PIXELS_PER_LINE) { spritepixels[spr_pos].data = buf[pos]; spritepixels[spr_pos].stdata = stbuf[pos]; spritepixels[spr_pos].attach = has_attach; } } if (spr_pos > sprite_last_x) sprite_last_x = spr_pos; } /* See comments above. Do not touch if you don't know what's going on. * (We do _not_ want the following to be inlined themselves). */ /* lores bitplane, lores sprites */ static void NOINLINE draw_sprites_normal_sp_nat (struct sprite_entry *e) { draw_sprites_1 (e, 0, 0); } static void NOINLINE draw_sprites_normal_dp_nat (struct sprite_entry *e) { draw_sprites_1 (e, 1, 0); } static void NOINLINE draw_sprites_normal_sp_at (struct sprite_entry *e) { draw_sprites_1 (e, 0, 1); } static void NOINLINE draw_sprites_normal_dp_at (struct sprite_entry *e) { draw_sprites_1 (e, 1, 1); } #ifdef AGA /* not very optimized */ STATIC_INLINE void draw_sprites_aga (struct sprite_entry *e, int aga) { draw_sprites_1 (e, bpldualpf, e->has_attached); } #endif STATIC_INLINE void draw_sprites_ecs (struct sprite_entry *e) { if (e->has_attached) { if (bpldualpf) draw_sprites_normal_dp_at (e); else draw_sprites_normal_sp_at (e); } else { if (bpldualpf) draw_sprites_normal_dp_nat (e); else draw_sprites_normal_sp_nat (e); } } #ifdef AGA /* clear possible bitplane data outside DIW area */ static void clear_bitplane_border_aga (void) { int len, shift = res_shift; uae_u8 v = 0; if (shift < 0) { shift = -shift; len = (real_playfield_start - playfield_start) << shift; memset (pixdata.apixels + pixels_offset + (playfield_start << shift), v, len); len = (playfield_end - real_playfield_end) << shift; memset (pixdata.apixels + pixels_offset + (real_playfield_end << shift), v, len); } else { len = (real_playfield_start - playfield_start) >> shift; memset (pixdata.apixels + pixels_offset + (playfield_start >> shift), v, len); len = (playfield_end - real_playfield_end) >> shift; memset (pixdata.apixels + pixels_offset + (real_playfield_end >> shift), v, len); } } #endif /* emulate OCS/ECS only undocumented "SWIV" hardware feature */ static void weird_bitplane_fix (void) { int i; int sh = lores_shift; uae_u8 *p = pixdata.apixels + pixels_offset; for (i = playfield_start >> sh; i < playfield_end >> sh; i++) { if (p[i] > 16) p[i] = 16; } } #define MERGE(a,b,mask,shift) do {\ uae_u32 tmp = mask & (a ^ (b >> shift)); \ a ^= tmp; \ b ^= (tmp << shift); \ } while (0) #define GETLONG(P) (*(uae_u32 *)P) /* We use the compiler's inlining ability to ensure that PLANES is in effect a compile time constant. That will cause some unnecessary code to be optimized away. Don't touch this if you don't know what you are doing. */ STATIC_INLINE void pfield_doline_1 (uae_u32 *pixels, int wordcount, int planes) { while (wordcount-- > 0) { uae_u32 b0, b1, b2, b3, b4, b5, b6, b7; b0 = 0, b1 = 0, b2 = 0, b3 = 0, b4 = 0, b5 = 0, b6 = 0, b7 = 0; switch (planes) { #ifdef AGA case 8: b0 = GETLONG (real_bplpt[7]); real_bplpt[7] += 4; case 7: b1 = GETLONG (real_bplpt[6]); real_bplpt[6] += 4; #endif case 6: b2 = GETLONG (real_bplpt[5]); real_bplpt[5] += 4; case 5: b3 = GETLONG (real_bplpt[4]); real_bplpt[4] += 4; case 4: b4 = GETLONG (real_bplpt[3]); real_bplpt[3] += 4; case 3: b5 = GETLONG (real_bplpt[2]); real_bplpt[2] += 4; case 2: b6 = GETLONG (real_bplpt[1]); real_bplpt[1] += 4; case 1: b7 = GETLONG (real_bplpt[0]); real_bplpt[0] += 4; } MERGE (b0, b1, 0x55555555, 1); MERGE (b2, b3, 0x55555555, 1); MERGE (b4, b5, 0x55555555, 1); MERGE (b6, b7, 0x55555555, 1); MERGE (b0, b2, 0x33333333, 2); MERGE (b1, b3, 0x33333333, 2); MERGE (b4, b6, 0x33333333, 2); MERGE (b5, b7, 0x33333333, 2); MERGE (b0, b4, 0x0f0f0f0f, 4); MERGE (b1, b5, 0x0f0f0f0f, 4); MERGE (b2, b6, 0x0f0f0f0f, 4); MERGE (b3, b7, 0x0f0f0f0f, 4); MERGE (b0, b1, 0x00ff00ff, 8); MERGE (b2, b3, 0x00ff00ff, 8); MERGE (b4, b5, 0x00ff00ff, 8); MERGE (b6, b7, 0x00ff00ff, 8); MERGE (b0, b2, 0x0000ffff, 16); do_put_mem_long (pixels, b0); do_put_mem_long (pixels + 4, b2); MERGE (b1, b3, 0x0000ffff, 16); do_put_mem_long (pixels + 2, b1); do_put_mem_long (pixels + 6, b3); MERGE (b4, b6, 0x0000ffff, 16); do_put_mem_long (pixels + 1, b4); do_put_mem_long (pixels + 5, b6); MERGE (b5, b7, 0x0000ffff, 16); do_put_mem_long (pixels + 3, b5); do_put_mem_long (pixels + 7, b7); pixels += 8; } } /* See above for comments on inlining. These functions should _not_ be inlined themselves. */ static void NOINLINE pfield_doline_n1 (uae_u32 *data, int count) { pfield_doline_1 (data, count, 1); } static void NOINLINE pfield_doline_n2 (uae_u32 *data, int count) { pfield_doline_1 (data, count, 2); } static void NOINLINE pfield_doline_n3 (uae_u32 *data, int count) { pfield_doline_1 (data, count, 3); } static void NOINLINE pfield_doline_n4 (uae_u32 *data, int count) { pfield_doline_1 (data, count, 4); } static void NOINLINE pfield_doline_n5 (uae_u32 *data, int count) { pfield_doline_1 (data, count, 5); } static void NOINLINE pfield_doline_n6 (uae_u32 *data, int count) { pfield_doline_1 (data, count, 6); } #ifdef AGA static void NOINLINE pfield_doline_n7 (uae_u32 *data, int count) { pfield_doline_1 (data, count, 7); } static void NOINLINE pfield_doline_n8 (uae_u32 *data, int count) { pfield_doline_1 (data, count, 8); } #endif static void pfield_doline (int lineno) { int wordcount = dp_for_drawing->plflinelen; uae_u32 *data = pixdata.apixels_l + MAX_PIXELS_PER_LINE / 4; #ifdef SMART_UPDATE #define DATA_POINTER(n) ((debug_bpl_mask & (1 << n)) ? (line_data[lineno] + (n) * MAX_WORDS_PER_LINE * 2) : (debug_bpl_mask_one ? all_ones : all_zeros)) real_bplpt[0] = DATA_POINTER (0); real_bplpt[1] = DATA_POINTER (1); real_bplpt[2] = DATA_POINTER (2); real_bplpt[3] = DATA_POINTER (3); real_bplpt[4] = DATA_POINTER (4); real_bplpt[5] = DATA_POINTER (5); #ifdef AGA real_bplpt[6] = DATA_POINTER (6); real_bplpt[7] = DATA_POINTER (7); #endif #endif switch (bplplanecnt) { default: break; case 0: memset (data, 0, wordcount * 32); break; case 1: pfield_doline_n1 (data, wordcount); break; case 2: pfield_doline_n2 (data, wordcount); break; case 3: pfield_doline_n3 (data, wordcount); break; case 4: pfield_doline_n4 (data, wordcount); break; case 5: pfield_doline_n5 (data, wordcount); break; case 6: pfield_doline_n6 (data, wordcount); break; #ifdef AGA case 7: pfield_doline_n7 (data, wordcount); break; case 8: pfield_doline_n8 (data, wordcount); break; #endif } } void init_row_map (void) { static uae_u8 *oldbufmem; static int oldheight, oldpitch; int i, j; if (gfxvidinfo.drawbuffer.height_allocated > MAX_VIDHEIGHT) { write_log (_T("Resolution too high, aborting\n")); abort (); } if (oldbufmem && oldbufmem == gfxvidinfo.drawbuffer.bufmem && oldheight == gfxvidinfo.drawbuffer.height_allocated && oldpitch == gfxvidinfo.drawbuffer.rowbytes) return; oldbufmem = gfxvidinfo.drawbuffer.bufmem; oldheight = gfxvidinfo.drawbuffer.height_allocated; oldpitch = gfxvidinfo.drawbuffer.rowbytes; j = 0; for (i = gfxvidinfo.drawbuffer.height_allocated; i < MAX_VIDHEIGHT + 1; i++) row_map[i] = row_tmp; for (i = 0; i < gfxvidinfo.drawbuffer.height_allocated; i++, j += gfxvidinfo.drawbuffer.rowbytes) row_map[i] = gfxvidinfo.drawbuffer.bufmem + j; } void init_aspect_maps (void) { int i, maxl, h; h = gfxvidinfo.drawbuffer.height_allocated; if (h == 0) /* Do nothing if the gfx driver hasn't initialized the screen yet */ return; linedbld = linedbl = currprefs.gfx_vresolution; if (doublescan > 0 && interlace_seen <= 0) { linedbl = 0; linedbld = 1; } if (native2amiga_line_map) xfree (native2amiga_line_map); if (amiga2aspect_line_map) xfree (amiga2aspect_line_map); /* At least for this array the +1 is necessary. */ amiga2aspect_line_map = xmalloc (int, (MAXVPOS + 1) * 2 + 1); native2amiga_line_map = xmalloc (int, h); maxl = (MAXVPOS + 1) << linedbld; min_ypos_for_screen = minfirstline << linedbl; max_drawn_amiga_line = -1; for (i = 0; i < maxl; i++) { int v = i - min_ypos_for_screen; if (v >= h && max_drawn_amiga_line < 0) max_drawn_amiga_line = i - min_ypos_for_screen; if (i < min_ypos_for_screen || v >= h) v = -1; amiga2aspect_line_map[i] = v; } if (max_drawn_amiga_line < 0) max_drawn_amiga_line = maxl - min_ypos_for_screen; max_drawn_amiga_line >>= linedbl; if (currprefs.gfx_ycenter && !currprefs.gfx_filter_autoscale) { /* @@@ verify maxvpos vs. MAXVPOS */ extra_y_adjust = (h - (maxvpos_nom << linedbl)) >> 1; if (extra_y_adjust < 0) extra_y_adjust = 0; } for (i = 0; i < h; i++) native2amiga_line_map[i] = -1; for (i = maxl - 1; i >= min_ypos_for_screen; i--) { int j; if (amiga2aspect_line_map[i] == -1) continue; for (j = amiga2aspect_line_map[i]; j < h && native2amiga_line_map[j] == -1; j++) native2amiga_line_map[j] = i >> linedbl; } gfxvidinfo.xchange = 1 << (RES_MAX - currprefs.gfx_resolution); gfxvidinfo.ychange = linedbl ? 1 : 2; visible_left_start = 0; visible_right_stop = MAX_STOP; visible_top_start = 0; visible_bottom_stop = MAX_STOP; } /* * A raster line has been built in the graphics buffer. Tell the graphics code * to do anything necessary to display it. */ static void do_flush_line_1 (struct vidbuffer *vb, int lineno) { if (lineno < first_drawn_line) first_drawn_line = lineno; if (lineno > last_drawn_line) last_drawn_line = lineno; if (gfxvidinfo.maxblocklines == 0) flush_line (vb, lineno); else { if ((last_block_line + 2) < lineno) { if (first_block_line != NO_BLOCK) flush_block (vb, first_block_line, last_block_line); first_block_line = lineno; } last_block_line = lineno; if (last_block_line - first_block_line >= gfxvidinfo.maxblocklines) { flush_block (vb, first_block_line, last_block_line); first_block_line = last_block_line = NO_BLOCK; } } } STATIC_INLINE void do_flush_line (struct vidbuffer *vb, int lineno) { do_flush_line_1 (vb, lineno); } /* * One drawing frame has been finished. Tell the graphics code about it. * Note that the actual flush_screen() call is a no-op for all reasonable * systems. */ STATIC_INLINE void do_flush_screen (struct vidbuffer *vb, int start, int stop) { /* TODO: this flush operation is executed outside locked state! Should be corrected. (sjo 26.9.99) */ if (vb != gfxvidinfo.outbuffer) return; xlinecheck (start, stop); if (gfxvidinfo.maxblocklines != 0 && first_block_line != NO_BLOCK) { flush_block (vb, first_block_line, last_block_line); } unlockscr (vb); if (start <= stop) flush_screen (vb, start, stop); else if (isvsync_chipset ()) flush_screen (vb, 0, 0); /* vsync mode */ } /* We only save hardware registers during the hardware frame. Now, when * drawing the frame, we expand the data into a slightly more useful * form. */ static void pfield_expand_dp_bplcon (void) { static int b2; bplres = dp_for_drawing->bplres; bplplanecnt = dp_for_drawing->nr_planes; bplham = dp_for_drawing->ham_seen; bplehb = dp_for_drawing->ehb_seen; if ((currprefs.chipset_mask & CSMASK_AGA) && (dp_for_drawing->bplcon2 & 0x0200)) bplehb = 0; issprites = dip_for_drawing->nr_sprites; #ifdef ECS_DENISE ecsshres = bplres == RES_SUPERHIRES && (currprefs.chipset_mask & CSMASK_ECS_DENISE) && !(currprefs.chipset_mask & CSMASK_AGA); #endif plf1pri = dp_for_drawing->bplcon2 & 7; plf2pri = (dp_for_drawing->bplcon2 >> 3) & 7; plf_sprite_mask = 0xFFFF0000 << (4 * plf2pri); plf_sprite_mask |= (0x0000FFFF << (4 * plf1pri)) & 0xFFFF; bpldualpf = (dp_for_drawing->bplcon0 & 0x400) == 0x400; bpldualpfpri = (dp_for_drawing->bplcon2 & 0x40) == 0x40; #ifdef AGA bpldualpf2of = (dp_for_drawing->bplcon3 >> 10) & 7; sbasecol[0] = ((dp_for_drawing->bplcon4 >> 4) & 15) << 4; sbasecol[1] = ((dp_for_drawing->bplcon4 >> 0) & 15) << 4; brdsprt = !brdblank && (currprefs.chipset_mask & CSMASK_AGA) && (dp_for_drawing->bplcon0 & 1) && (dp_for_drawing->bplcon3 & 0x02); bplxor = dp_for_drawing->bplcon4 >> 8; #endif } static bool isham (uae_u16 bplcon0) { int p = GET_PLANES (bplcon0); if (!(bplcon0 & 0x800)) return 0; if (currprefs.chipset_mask & CSMASK_AGA) { // AGA only has 6 or 8 plane HAM if (p == 6 || p == 8) return 1; } else { // OCS/ECS also supports 5 plane HAM if (GET_RES_DENISE (bplcon0) > 0) return 0; if (p >= 5) return 1; } return 0; } static void isbrdblank (void) { #ifdef ECS_DENISE bool brdblank_2 = (currprefs.chipset_mask & CSMASK_ECS_DENISE) && (bplcon0_store & 1) && (bplcon3_store & 0x20); if (brdblank_2 != brdblank) brdblank_changed = true; brdblank = brdblank_2; #endif } static void pfield_expand_dp_bplconx (int regno, int v) { if (regno == 0xffff) { hposblank = 1; return; } regno -= 0x1000; switch (regno) { case 0x100: dp_for_drawing->bplcon0 = v; dp_for_drawing->bplres = GET_RES_DENISE (v); dp_for_drawing->nr_planes = GET_PLANES (v); dp_for_drawing->ham_seen = isham (v); bplcon0_store = v; isbrdblank (); break; case 0x104: dp_for_drawing->bplcon2 = v; break; #ifdef ECS_DENISE case 0x106: dp_for_drawing->bplcon3 = v; bplcon3_store = v; isbrdblank (); break; #endif #ifdef AGA case 0x10c: dp_for_drawing->bplcon4 = v; break; #endif } pfield_expand_dp_bplcon (); res_shift = lores_shift - bplres; } static int drawing_color_matches; static enum { color_match_acolors, color_match_full } color_match_type; /* Set up colors_for_drawing to the state at the beginning of the currently drawn line. Try to avoid copying color tables around whenever possible. */ static void adjust_drawing_colors (int ctable, int need_full) { if (drawing_color_matches != ctable) { if (need_full) { color_reg_cpy (&colors_for_drawing, curr_color_tables + ctable); color_match_type = color_match_full; } else { memcpy (colors_for_drawing.acolors, curr_color_tables[ctable].acolors, sizeof colors_for_drawing.acolors); color_match_type = color_match_acolors; } drawing_color_matches = ctable; } else if (need_full && color_match_type != color_match_full) { color_reg_cpy (&colors_for_drawing, &curr_color_tables[ctable]); color_match_type = color_match_full; } } static void do_color_changes (line_draw_func worker_border, line_draw_func worker_pfield, int vp) { int i; int lastpos = visible_left_border; int endpos = visible_left_border + gfxvidinfo.drawbuffer.inwidth; for (i = dip_for_drawing->first_color_change; i <= dip_for_drawing->last_color_change; i++) { int regno = curr_color_changes[i].regno; unsigned int value = curr_color_changes[i].value; int nextpos, nextpos_in_range; if (i == dip_for_drawing->last_color_change) nextpos = endpos; else nextpos = coord_hw_to_window_x (curr_color_changes[i].linepos); nextpos_in_range = nextpos; if (nextpos > endpos) nextpos_in_range = endpos; if (nextpos_in_range > lastpos) { if (lastpos < playfield_start) { int t = nextpos_in_range <= playfield_start ? nextpos_in_range : playfield_start; (*worker_border) (lastpos, t, false); lastpos = t; } } if (nextpos_in_range > lastpos) { if (lastpos >= playfield_start && lastpos < playfield_end) { int t = nextpos_in_range <= playfield_end ? nextpos_in_range : playfield_end; (*worker_pfield) (lastpos, t, false); /* blank start and end that shouldn't be visible */ if (lastpos < visible_left_start) (*worker_border) (lastpos, visible_left_start, true); if (t > visible_right_stop) (*worker_border) (visible_right_stop, endpos, true); lastpos = t; } } if (nextpos_in_range > lastpos) { if (lastpos >= playfield_end) (*worker_border) (lastpos, nextpos_in_range, false); lastpos = nextpos_in_range; } if (regno >= 0x1000) { pfield_expand_dp_bplconx (regno, value); } else if (regno >= 0) { color_reg_set (&colors_for_drawing, regno, value); colors_for_drawing.acolors[regno] = getxcolor (value); } if (lastpos >= endpos) break; } if (vp < visible_top_start || vp >= visible_bottom_stop) { // outside of visible area // Just overwrite with black. Above code needs to run because of custom registers, // not worth the trouble for separate code path just for max 10 lines or so (*worker_border) (visible_left_border, visible_left_border + gfxvidinfo.drawbuffer.inwidth, true); } } enum double_how { dh_buf, dh_line, dh_emerg }; static void pfield_draw_line (struct vidbuffer *vb, int lineno, int gfx_ypos, int follow_ypos) { static int warned = 0; int border = 0; int do_double = 0; enum double_how dh; dp_for_drawing = line_decisions + lineno; dip_for_drawing = curr_drawinfo + lineno; switch (linestate[lineno]) { case LINE_REMEMBERED_AS_PREVIOUS: // if (!warned) // happens when program messes up with VPOSW // write_log (_T("Shouldn't get here... this is a bug.\n")), warned++; return; case LINE_BLACK: linestate[lineno] = LINE_REMEMBERED_AS_BLACK; border = 2; break; case LINE_REMEMBERED_AS_BLACK: return; case LINE_AS_PREVIOUS: dp_for_drawing--; dip_for_drawing--; linestate[lineno] = LINE_DONE_AS_PREVIOUS; if (dp_for_drawing->plfleft < 0) border = 1; break; case LINE_DONE_AS_PREVIOUS: /* fall through */ case LINE_DONE: return; case LINE_DECIDED_DOUBLE: if (follow_ypos >= 0) { do_double = 1; linestate[lineno + 1] = LINE_DONE_AS_PREVIOUS; } /* fall through */ default: if (dp_for_drawing->plfleft < 0) border = 1; linestate[lineno] = LINE_DONE; break; } dh = dh_line; xlinebuffer = gfxvidinfo.drawbuffer.linemem; if (xlinebuffer == 0 && do_double && (border == 0 || dip_for_drawing->nr_color_changes > 0)) xlinebuffer = gfxvidinfo.drawbuffer.emergmem, dh = dh_emerg; if (xlinebuffer == 0) xlinebuffer = row_map[gfx_ypos], dh = dh_buf; xlinebuffer -= linetoscr_x_adjust_bytes; if (border == 0) { pfield_expand_dp_bplcon (); pfield_init_linetoscr (); pfield_doline (lineno); adjust_drawing_colors (dp_for_drawing->ctable, dp_for_drawing->ham_seen || bplehb || ecsshres); /* The problem is that we must call decode_ham() BEFORE we do the sprites. */ if (dp_for_drawing->ham_seen) { init_ham_decoding (); if (dip_for_drawing->nr_color_changes == 0) { /* The easy case: need to do HAM decoding only once for the * full line. */ decode_ham (visible_left_border, visible_right_border, false); } else /* Argh. */ { do_color_changes (dummy_worker, decode_ham, lineno); adjust_drawing_colors (dp_for_drawing->ctable, dp_for_drawing->ham_seen || bplehb); } bplham = dp_for_drawing->ham_at_start; } if (plf2pri > 5 && bplplanecnt == 5 && !(currprefs.chipset_mask & CSMASK_AGA)) weird_bitplane_fix (); if (dip_for_drawing->nr_sprites) { int i; #ifdef AGA if (brdsprt) clear_bitplane_border_aga (); #endif for (i = 0; i < dip_for_drawing->nr_sprites; i++) { #ifdef AGA if (currprefs.chipset_mask & CSMASK_AGA) draw_sprites_aga (curr_sprite_entries + dip_for_drawing->first_sprite_entry + i, 1); else #endif draw_sprites_ecs (curr_sprite_entries + dip_for_drawing->first_sprite_entry + i); } } do_color_changes (pfield_do_fill_line, pfield_do_linetoscr, lineno); if (dh == dh_emerg) memcpy (row_map[gfx_ypos], xlinebuffer + linetoscr_x_adjust_bytes, gfxvidinfo.drawbuffer.pixbytes * gfxvidinfo.drawbuffer.inwidth); do_flush_line (vb, gfx_ypos); if (do_double) { if (dh == dh_emerg) memcpy (row_map[follow_ypos], xlinebuffer + linetoscr_x_adjust_bytes, gfxvidinfo.drawbuffer.pixbytes * gfxvidinfo.drawbuffer.inwidth); else if (dh == dh_buf) memcpy (row_map[follow_ypos], row_map[gfx_ypos], gfxvidinfo.drawbuffer.pixbytes * gfxvidinfo.drawbuffer.inwidth); do_flush_line (vb, follow_ypos); } } else if (border == 1) { int dosprites = 0; adjust_drawing_colors (dp_for_drawing->ctable, 0); #ifdef AGA /* this makes things complex.. */ if (brdsprt && dip_for_drawing->nr_sprites > 0) { dosprites = 1; pfield_expand_dp_bplcon (); pfield_init_linetoscr (); memset (pixdata.apixels + MAX_PIXELS_PER_LINE, brdblank ? 0 : colors_for_drawing.acolors[0], MAX_PIXELS_PER_LINE); } #endif if (!dosprites && dip_for_drawing->nr_color_changes == 0) { fill_line (); do_flush_line (vb, gfx_ypos); if (do_double) { if (dh == dh_buf) { xlinebuffer = row_map[follow_ypos] - linetoscr_x_adjust_bytes; fill_line (); } /* If dh == dh_line, do_flush_line will re-use the rendered line * from linemem. */ do_flush_line (vb, follow_ypos); } return; } if (dosprites) { int i; for (i = 0; i < dip_for_drawing->nr_sprites; i++) draw_sprites_aga (curr_sprite_entries + dip_for_drawing->first_sprite_entry + i, 1); uae_u16 oxor = bplxor; memset (pixdata.apixels, 0, sizeof pixdata); bplxor = 0; do_color_changes (pfield_do_fill_line, pfield_do_linetoscr, lineno); bplxor = oxor; } else { playfield_start = visible_right_border; playfield_end = visible_right_border; do_color_changes (pfield_do_fill_line, pfield_do_fill_line, lineno); } if (dh == dh_emerg) memcpy (row_map[gfx_ypos], xlinebuffer + linetoscr_x_adjust_bytes, gfxvidinfo.drawbuffer.pixbytes * gfxvidinfo.drawbuffer.inwidth); do_flush_line (vb, gfx_ypos); if (do_double) { if (dh == dh_emerg) memcpy (row_map[follow_ypos], xlinebuffer + linetoscr_x_adjust_bytes, gfxvidinfo.drawbuffer.pixbytes * gfxvidinfo.drawbuffer.inwidth); else if (dh == dh_buf) memcpy (row_map[follow_ypos], row_map[gfx_ypos], gfxvidinfo.drawbuffer.pixbytes * gfxvidinfo.drawbuffer.inwidth); do_flush_line (vb, follow_ypos); } } else { int tmp = hposblank; hposblank = brdblank; fill_line (); do_flush_line (vb, gfx_ypos); hposblank = tmp; } } static void center_image (void) { int prev_x_adjust = visible_left_border; int prev_y_adjust = thisframe_y_adjust; int tmp; int w = gfxvidinfo.drawbuffer.inwidth; if (currprefs.gfx_xcenter && !currprefs.gfx_filter_autoscale && max_diwstop > 0) { if (max_diwstop - min_diwstart < w && currprefs.gfx_xcenter == 2) /* Try to center. */ visible_left_border = (max_diwstop - min_diwstart - w) / 2 + min_diwstart; else visible_left_border = max_diwstop - w - (max_diwstop - min_diwstart - w) / 2; visible_left_border &= ~((xshift (1, lores_shift)) - 1); /* Would the old value be good enough? If so, leave it as it is if we want to * be clever. */ if (currprefs.gfx_xcenter == 2) { if (visible_left_border < prev_x_adjust && prev_x_adjust < min_diwstart && min_diwstart - visible_left_border <= 32) visible_left_border = prev_x_adjust; } } else if (gfxvidinfo.drawbuffer.extrawidth) { visible_left_border = max_diwlastword - w; //visible_left_border += gfxvidinfo.drawbuffer.extrawidth << currprefs.gfx_resolution; } else { if (gfxvidinfo.drawbuffer.inxoffset < 0) { visible_left_border = 0; } else { visible_left_border = gfxvidinfo.drawbuffer.inxoffset - DISPLAY_LEFT_SHIFT; } } if (visible_left_border > max_diwlastword - 32) visible_left_border = max_diwlastword - 32; if (visible_left_border < 0) visible_left_border = 0; visible_left_border &= ~((xshift (1, lores_shift)) - 1); //write_log (_T("%d %d %d %d %d\n"), max_diwlastword, gfxvidinfo.drawbuffer.width, lores_shift, currprefs.gfx_resolution, visible_left_border); linetoscr_x_adjust_bytes = visible_left_border * gfxvidinfo.drawbuffer.pixbytes; visible_right_border = visible_left_border + w; if (visible_right_border > max_diwlastword) visible_right_border = max_diwlastword; thisframe_y_adjust = minfirstline; if (currprefs.gfx_ycenter && thisframe_first_drawn_line >= 0 && !currprefs.gfx_filter_autoscale) { if (thisframe_last_drawn_line - thisframe_first_drawn_line < max_drawn_amiga_line && currprefs.gfx_ycenter == 2) thisframe_y_adjust = (thisframe_last_drawn_line - thisframe_first_drawn_line - max_drawn_amiga_line) / 2 + thisframe_first_drawn_line; else thisframe_y_adjust = thisframe_first_drawn_line + ((thisframe_last_drawn_line - thisframe_first_drawn_line) - max_drawn_amiga_line) / 2; /* Would the old value be good enough? If so, leave it as it is if we want to * be clever. */ if (currprefs.gfx_ycenter == 2) { if (thisframe_y_adjust != prev_y_adjust && prev_y_adjust <= thisframe_first_drawn_line && prev_y_adjust + max_drawn_amiga_line > thisframe_last_drawn_line) thisframe_y_adjust = prev_y_adjust; } } /* Make sure the value makes sense */ if (thisframe_y_adjust + max_drawn_amiga_line > maxvpos_nom) thisframe_y_adjust = maxvpos_nom - max_drawn_amiga_line; if (thisframe_y_adjust < minfirstline) thisframe_y_adjust = minfirstline; thisframe_y_adjust_real = thisframe_y_adjust << linedbl; tmp = (maxvpos_nom - thisframe_y_adjust + 1) << linedbl; if (tmp != max_ypos_thisframe) { last_max_ypos = tmp; if (last_max_ypos < 0) last_max_ypos = 0; } max_ypos_thisframe = tmp; /* @@@ interlace_seen used to be (bplcon0 & 4), but this is probably * better. */ if (prev_x_adjust != visible_left_border || prev_y_adjust != thisframe_y_adjust) frame_redraw_necessary |= (interlace_seen > 0 && linedbl) ? 2 : 1; max_diwstop = 0; min_diwstart = 10000; gfxvidinfo.drawbuffer.xoffset = (DISPLAY_LEFT_SHIFT << RES_MAX) + (visible_left_border << (RES_MAX - currprefs.gfx_resolution)); gfxvidinfo.drawbuffer.yoffset = thisframe_y_adjust << VRES_MAX; visible_left_start = visible_left_border; visible_right_stop = visible_left_start + gfxvidinfo.drawbuffer.inwidth;; } #define FRAMES_UNTIL_RES_SWITCH 1 static int frame_res_cnt; static void init_drawing_frame (void) { int i, maxline; #if 1 static int frame_res_old; if (currprefs.gfx_autoresolution && frame_res >= 0 && frame_res_lace >= 0) { if (FRAMES_UNTIL_RES_SWITCH > 0 && frame_res_old == frame_res * 2 + frame_res_lace) { frame_res_cnt--; if (frame_res_cnt == 0) { int m = frame_res * 2 + frame_res_lace; struct wh *dst = currprefs.gfx_apmode[0].gfx_fullscreen ? &changed_prefs.gfx_size_fs : &changed_prefs.gfx_size_win; while (m < 3 * 2) { struct wh *src = currprefs.gfx_apmode[0].gfx_fullscreen ? &currprefs.gfx_size_fs_xtra[m] : &currprefs.gfx_size_win_xtra[m]; if ((src->width > 0 && src->height > 0) || (currprefs.gfx_api || currprefs.gfx_filter > 0)) { int nr = m >> 1; int nl = (m & 1) == 0 ? 0 : 1; int nr_o = nr; int nl_o = nl; if (currprefs.gfx_autoresolution_minh < 0) { if (nr < nl) nr = nl; } else if (nr < currprefs.gfx_autoresolution_minh) { nr = currprefs.gfx_autoresolution_minh; } if (currprefs.gfx_autoresolution_minv < 0) { if (nl < nr) nl = nr; } else if (nl < currprefs.gfx_autoresolution_minv) { nl = currprefs.gfx_autoresolution_minv; } if (nr > gfxvidinfo.gfx_resolution_reserved) nr = gfxvidinfo.gfx_resolution_reserved; if (nl > gfxvidinfo.gfx_vresolution_reserved) nl = gfxvidinfo.gfx_vresolution_reserved; if (changed_prefs.gfx_resolution != nr || changed_prefs.gfx_vresolution != nl) { changed_prefs.gfx_resolution = nr; changed_prefs.gfx_vresolution = nl; write_log (_T("RES -> %d (%d) LINE -> %d (%d) (%d - %d, %d - %d)\n"), nr, nr_o, nl, nl_o, currprefs.gfx_autoresolution_minh, currprefs.gfx_autoresolution_minv, gfxvidinfo.gfx_resolution_reserved, gfxvidinfo.gfx_vresolution_reserved); config_changed = 1; //activate_debugger (); } if (src->width > 0 && src->height > 0) { if (memcmp (dst, src, sizeof *dst)) { *dst = *src; config_changed = 1; } } break; } m++; } frame_res_cnt = FRAMES_UNTIL_RES_SWITCH; } } else { frame_res_old = frame_res * 2 + frame_res_lace; frame_res_cnt = FRAMES_UNTIL_RES_SWITCH; } } frame_res = -1; frame_res_lace = 0; if (can_use_lores > AUTO_LORES_FRAMES && 0) { lores_factor = 1; lores_shift = 0; } else { can_use_lores++; lores_reset (); } #endif init_hardware_for_drawing_frame (); if (thisframe_first_drawn_line < 0) thisframe_first_drawn_line = minfirstline; if (thisframe_first_drawn_line > thisframe_last_drawn_line) thisframe_last_drawn_line = thisframe_first_drawn_line; maxline = ((maxvpos_nom + 1) << linedbl) + 2; #ifdef SMART_UPDATE for (i = 0; i < maxline; i++) { switch (linestate[i]) { case LINE_DONE_AS_PREVIOUS: linestate[i] = LINE_REMEMBERED_AS_PREVIOUS; break; case LINE_REMEMBERED_AS_BLACK: break; default: linestate[i] = LINE_UNDECIDED; break; } } #else memset (linestate, LINE_UNDECIDED, maxline); #endif last_drawn_line = 0; first_drawn_line = 32767; first_block_line = last_block_line = NO_BLOCK; if (frame_redraw_necessary) frame_redraw_necessary--; center_image (); thisframe_first_drawn_line = -1; thisframe_last_drawn_line = -1; drawing_color_matches = -1; seen_sprites = -1; } void putpixel (uae_u8 *buf, int bpp, int x, xcolnr c8, int opaq) { if (x <= 0) return; switch (bpp) { case 1: buf[x] = (uae_u8)c8; break; case 2: { uae_u16 *p = (uae_u16*)buf + x; *p = (uae_u16)c8; break; } case 3: /* no 24 bit yet */ break; case 4: { int i; if (1 || opaq || currprefs.gfx_filter == 0) { uae_u32 *p = (uae_u32*)buf + x; *p = c8; } else { for (i = 0; i < 4; i++) { int v1 = buf[i + bpp * x]; int v2 = (c8 >> (i * 8)) & 255; v1 = (v1 * 2 + v2 * 3) / 5; if (v1 > 255) v1 = 255; buf[i + bpp * x] = v1; } } break; } } } static void draw_status_line (int line, int statusy) { int bpp, y; uae_u8 *buf; if (!(currprefs.leds_on_screen & STATUSLINE_CHIPSET) || (currprefs.leds_on_screen & STATUSLINE_TARGET)) return; bpp = gfxvidinfo.drawbuffer.pixbytes; y = line - (gfxvidinfo.drawbuffer.outheight - TD_TOTAL_HEIGHT); xlinebuffer = gfxvidinfo.drawbuffer.linemem; if (xlinebuffer == 0) xlinebuffer = row_map[line]; buf = xlinebuffer; draw_status_line_single (buf, bpp, statusy, gfxvidinfo.drawbuffer.outwidth, xredcolors, xgreencolors, xbluecolors, NULL); } static void draw_debug_status_line (int line) { xlinebuffer = gfxvidinfo.drawbuffer.linemem; if (xlinebuffer == 0) xlinebuffer = row_map[line]; debug_draw_cycles (xlinebuffer, gfxvidinfo.drawbuffer.pixbytes, line, gfxvidinfo.drawbuffer.outwidth, gfxvidinfo.drawbuffer.outheight, xredcolors, xgreencolors, xbluecolors); } #define LIGHTPEN_HEIGHT 12 #define LIGHTPEN_WIDTH 17 static const char *lightpen_cursor = { "------.....------" "------.xxx.------" "------.xxx.------" "------.xxx.------" ".......xxx......." ".xxxxxxxxxxxxxxx." ".xxxxxxxxxxxxxxx." ".......xxx......." "------.xxx.------" "------.xxx.------" "------.xxx.------" "------.....------" }; static void draw_lightpen_cursor (int x, int y, int line, int onscreen) { int i; const char *p; int color1 = onscreen ? 0xff0 : 0xf00; int color2 = 0x000; xlinebuffer = gfxvidinfo.drawbuffer.linemem; if (xlinebuffer == 0) xlinebuffer = row_map[line]; p = lightpen_cursor + y * LIGHTPEN_WIDTH; for (i = 0; i < LIGHTPEN_WIDTH; i++) { int xx = x + i - LIGHTPEN_WIDTH / 2; if (*p != '-' && xx >= 0 && xx < gfxvidinfo.drawbuffer.outwidth) putpixel (xlinebuffer, gfxvidinfo.drawbuffer.pixbytes, xx, *p == 'x' ? xcolors[color1] : xcolors[color2], 1); p++; } } static int lightpen_y1, lightpen_y2; static void lightpen_update (struct vidbuffer *vb) { int i; if (lightpen_x < LIGHTPEN_WIDTH + 1) lightpen_x = LIGHTPEN_WIDTH + 1; if (lightpen_x >= gfxvidinfo.drawbuffer.inwidth - LIGHTPEN_WIDTH - 1) lightpen_x = gfxvidinfo.drawbuffer.inwidth - LIGHTPEN_WIDTH - 2; if (lightpen_y < LIGHTPEN_HEIGHT + 1) lightpen_y = LIGHTPEN_HEIGHT + 1; if (lightpen_y >= gfxvidinfo.drawbuffer.inheight - LIGHTPEN_HEIGHT - 1) lightpen_y = gfxvidinfo.drawbuffer.inheight - LIGHTPEN_HEIGHT - 2; if (lightpen_y >= max_ypos_thisframe - LIGHTPEN_HEIGHT - 1) lightpen_y = max_ypos_thisframe - LIGHTPEN_HEIGHT - 2; lightpen_cx = (((lightpen_x + visible_left_border) >> lores_shift) >> 1) + DISPLAY_LEFT_SHIFT - DIW_DDF_OFFSET; lightpen_cy = lightpen_y; lightpen_cy >>= linedbl; lightpen_cy += minfirstline; if (lightpen_cx < 0x18) lightpen_cx = 0x18; if (lightpen_cx >= maxhpos) lightpen_cx -= maxhpos; if (lightpen_cy < minfirstline) lightpen_cy = minfirstline; if (lightpen_cy >= maxvpos) lightpen_cy = maxvpos - 1; for (i = 0; i < LIGHTPEN_HEIGHT; i++) { int line = lightpen_y + i - LIGHTPEN_HEIGHT / 2; if (line >= 0 || line < max_ypos_thisframe) { draw_lightpen_cursor(lightpen_x, i, line, lightpen_cx > 0); flush_line (vb, line); } } lightpen_y1 = lightpen_y - LIGHTPEN_HEIGHT / 2 - 1 + min_ypos_for_screen; lightpen_y2 = lightpen_y1 + LIGHTPEN_HEIGHT + 2; } void finish_drawing_frame (void) { int i; bool didflush = false; struct vidbuffer *vb = &gfxvidinfo.drawbuffer; gfxvidinfo.outbuffer = vb; if (! lockscr (vb, false)) { notice_screen_contents_lost (); return; } #ifndef SMART_UPDATE /* @@@ This isn't exactly right yet. FIXME */ if (!interlace_seen) do_flush_screen (first_drawn_line, last_drawn_line); else unlockscr (); return; #endif for (i = 0; i < max_ypos_thisframe; i++) { int i1 = i + min_ypos_for_screen; int line = i + thisframe_y_adjust_real; int where2; where2 = amiga2aspect_line_map[i1]; if (where2 >= vb->inheight) break; if (where2 < 0) continue; hposblank = 0; pfield_draw_line (vb, line, where2, amiga2aspect_line_map[i1 + 1]); } /* clear possible old garbage at the bottom if emulated area become smaller */ for (i = last_max_ypos; i < vb->outheight; i++) { int i1 = i + min_ypos_for_screen; int line = i + thisframe_y_adjust_real; int where2 = amiga2aspect_line_map[i1]; if (where2 >= gfxvidinfo.drawbuffer.outheight) break; if (where2 < 0) continue; hposblank = i > last_max_ypos ;// + AMIGA_HEIGHT_EXTRA; xlinebuffer = vb->linemem; if (xlinebuffer == 0) xlinebuffer = row_map[where2]; xlinebuffer -= linetoscr_x_adjust_bytes; fill_line (); if (line < max_ypos_thisframe) linestate[line] = LINE_UNDECIDED; do_flush_line (vb, where2); } if (currprefs.leds_on_screen) { int slx, sly; statusline_getpos (&slx, &sly, vb->outwidth, vb->outheight); for (i = 0; i < TD_TOTAL_HEIGHT; i++) { int line = sly + i; draw_status_line (line, i); do_flush_line (vb, line); } } if (debug_dma > 1) { for (i = 0; i < vb->outheight; i++) { int line = i; draw_debug_status_line (line); do_flush_line (vb, line); } } if (lightpen_x > 0 || lightpen_y > 0) lightpen_update (vb); if (currprefs.monitoremu && gfxvidinfo.tempbuffer.bufmem_allocated) { static bool specialon; if (emulate_specialmonitors (vb, &gfxvidinfo.tempbuffer)) { vb = gfxvidinfo.outbuffer = &gfxvidinfo.tempbuffer; if (vb->nativepositioning) { vb->inwidth = gfxvidinfo.drawbuffer.inwidth; vb->inheight = gfxvidinfo.drawbuffer.inheight; vb->inwidth2 = gfxvidinfo.drawbuffer.inwidth2; vb->inheight2 = gfxvidinfo.drawbuffer.inheight2; vb->outwidth = gfxvidinfo.drawbuffer.outwidth; vb->outheight = gfxvidinfo.drawbuffer.outheight; } gfxvidinfo.drawbuffer.tempbufferinuse = true; if (!specialon) compute_framesync (); specialon = true; do_flush_screen (vb, 0, vb->outheight); didflush = true; } else { gfxvidinfo.drawbuffer.tempbufferinuse = false; if (specialon) compute_framesync (); specialon = false; } } if (!didflush) do_flush_screen (vb, first_drawn_line, last_drawn_line); #ifdef ECS_DENISE if (brdblank_changed) { last_max_ypos = max_ypos_thisframe; for (i = 0; i < sizeof linestate / sizeof *linestate; i++) linestate[i] = LINE_UNDECIDED; notice_screen_contents_lost (); brdblank_changed = false; } #endif } void hardware_line_completed (int lineno) { #ifndef SMART_UPDATE { int i, where; /* l is the line that has been finished for drawing. */ i = lineno - thisframe_y_adjust_real; if (i >= 0 && i < max_ypos_thisframe) { where = amiga2aspect_line_map[i+min_ypos_for_screen]; if (where < gfxvidinfo.drawbuffer.outheight && where >= 0) pfield_draw_line (lineno, where, amiga2aspect_line_map[i+min_ypos_for_screen+1]); } } #endif } void check_picasso (void) { #ifdef PICASSO96 if (picasso_on && picasso_redraw_necessary) picasso_refresh (); picasso_redraw_necessary = 0; if (picasso_requested_on == picasso_on) return; picasso_on = picasso_requested_on; if (!picasso_on) clear_inhibit_frame (IHF_PICASSO); else set_inhibit_frame (IHF_PICASSO); gfx_set_picasso_state (picasso_on); picasso_enablescreen (picasso_requested_on); notice_screen_contents_lost (); notice_new_xcolors (); count_frame (); #endif } void redraw_frame (void) { last_drawn_line = 0; first_drawn_line = 32767; finish_drawing_frame (); flush_screen (gfxvidinfo.inbuffer, 0, 0); } void vsync_handle_check (void) { check_picasso (); int changed = check_prefs_changed_gfx (); if (changed > 0) { reset_drawing (); init_row_map (); init_aspect_maps (); notice_screen_contents_lost (); notice_new_xcolors (); } else if (changed < 0) { reset_drawing (); init_row_map (); init_aspect_maps (); notice_screen_contents_lost (); notice_new_xcolors (); } check_prefs_changed_audio (); check_prefs_changed_custom (); check_prefs_changed_cpu (); } void vsync_handle_redraw (int long_frame, int lof_changed, uae_u16 bplcon0p, uae_u16 bplcon3p) { last_redraw_point++; if (lof_changed || interlace_seen <= 0 || last_redraw_point >= 2 || long_frame || doublescan < 0) { last_redraw_point = 0; if (framecnt == 0) finish_drawing_frame (); #if 0 if (interlace_seen > 0) { interlace_seen = -1; } else if (interlace_seen == -1) { interlace_seen = 0; if (currprefs.gfx_scandoubler && currprefs.gfx_vresolution) notice_screen_contents_lost (); } #endif if (quit_program < 0) { #ifdef SAVESTATE if (!savestate_state) { if (currprefs.quitstatefile[0]) { savestate_initsave (currprefs.quitstatefile, 1, 1, true); save_state (currprefs.quitstatefile, _T("")); } } #endif quit_program = -quit_program; set_inhibit_frame (IHF_QUIT_PROGRAM); set_special (SPCFLAG_BRK); return; } count_frame (); if (framecnt == 0) init_drawing_frame (); else if (currprefs.cpu_cycle_exact) init_hardware_for_drawing_frame (); } else { if (isvsync_chipset ()) flush_screen (gfxvidinfo.inbuffer, 0, 0); /* vsync mode */ } /* check borderblank here because bplcon0 or especially bplcon3 may only be written once outside of displayable area */ bplcon0_store = bplcon0p; bplcon3_store = bplcon3p; isbrdblank (); gui_flicker_led (-1, 0, 0); #ifdef AVIOUTPUT frame_drawn (); #endif } void hsync_record_line_state (int lineno, enum nln_how how, int changed) { uae_u8 *state; if (framecnt != 0) return; state = linestate + lineno; changed += frame_redraw_necessary + ((lineno >= lightpen_y1 && lineno <= lightpen_y2) ? 1 : 0); switch (how) { case nln_normal: *state = changed ? LINE_DECIDED : LINE_DONE; break; case nln_doubled: *state = changed ? LINE_DECIDED_DOUBLE : LINE_DONE; changed += state[1] != LINE_REMEMBERED_AS_PREVIOUS; state[1] = changed ? LINE_AS_PREVIOUS : LINE_DONE_AS_PREVIOUS; break; case nln_nblack: *state = changed ? LINE_DECIDED : LINE_DONE; if (state[1] != LINE_REMEMBERED_AS_BLACK) state[1] = LINE_BLACK; break; case nln_lower: if (state[-1] == LINE_UNDECIDED) state[-1] = LINE_DECIDED; //LINE_BLACK; *state = changed ? LINE_DECIDED : LINE_DONE; break; case nln_upper: *state = changed ? LINE_DECIDED : LINE_DONE; if (state[1] == LINE_UNDECIDED || state[1] == LINE_REMEMBERED_AS_PREVIOUS || state[1] == LINE_AS_PREVIOUS) state[1] = LINE_DECIDED; //LINE_BLACK; break; } } static void dummy_flush_line (struct vidbuf_description *gfxinfo, struct vidbuffer *vb, int line_no) { } static void dummy_flush_block (struct vidbuf_description *gfxinfo, struct vidbuffer *vb, int first_line, int last_line) { } static void dummy_flush_screen (struct vidbuf_description *gfxinfo, struct vidbuffer *vb, int first_line, int last_line) { } static void dummy_flush_clear_screen (struct vidbuf_description *gfxinfo, struct vidbuffer *vb) { } static int dummy_lock (struct vidbuf_description *gfxinfo, struct vidbuffer *vb) { return 1; } static void dummy_unlock (struct vidbuf_description *gfxinfo, struct vidbuffer *vb) { } static void gfxbuffer_reset (void) { gfxvidinfo.drawbuffer.flush_line = dummy_flush_line; gfxvidinfo.drawbuffer.flush_block = dummy_flush_block; gfxvidinfo.drawbuffer.flush_screen = dummy_flush_screen; gfxvidinfo.drawbuffer.flush_clear_screen = dummy_flush_clear_screen; gfxvidinfo.drawbuffer.lockscr = dummy_lock; gfxvidinfo.drawbuffer.unlockscr = dummy_unlock; } void notice_resolution_seen (int res, bool lace) { if (res > frame_res) frame_res = res; if (res > 0) can_use_lores = 0; if (!frame_res_lace && lace) frame_res_lace = lace; } bool notice_interlace_seen (bool lace) { bool changed = false; // non-lace to lace switch (non-lace active at least one frame)? if (lace) { if (interlace_seen == 0) { changed = true; //write_log (_T("->lace PC=%x\n"), m68k_getpc ()); } interlace_seen = currprefs.gfx_vresolution ? 1 : -1; } else { if (interlace_seen) { changed = true; //write_log (_T("->non-lace PC=%x\n"), m68k_getpc ()); } interlace_seen = 0; } return changed; } static void clearbuffer (struct vidbuffer *dst) { if (!dst->bufmem_allocated) return; uae_u8 *p = dst->bufmem_allocated; for (int y = 0; y < dst->height_allocated; y++) { memset (p, 0, dst->width_allocated * dst->pixbytes); p += dst->rowbytes; } } void reset_decision_table (void) { for (int i = 0; i < sizeof linestate / sizeof *linestate; i++) linestate[i] = LINE_UNDECIDED; } void reset_drawing (void) { unsigned int i; max_diwstop = 0; lores_reset (); for (i = 0; i < sizeof linestate / sizeof *linestate; i++) linestate[i] = LINE_UNDECIDED; init_aspect_maps (); init_row_map (); last_redraw_point = 0; memset (spixels, 0, sizeof spixels); memset (&spixstate, 0, sizeof spixstate); init_drawing_frame (); notice_screen_contents_lost (); frame_res_cnt = FRAMES_UNTIL_RES_SWITCH; lightpen_y1 = lightpen_y2 = -1; reset_custom_limits (); clearbuffer (&gfxvidinfo.drawbuffer); clearbuffer (&gfxvidinfo.tempbuffer); } void drawing_init (void) { gen_pfield_tables (); uae_sem_init (&gui_sem, 0, 1); #ifdef PICASSO96 if (!isrestore ()) { picasso_on = 0; picasso_requested_on = 0; gfx_set_picasso_state (0); } #endif xlinebuffer = gfxvidinfo.drawbuffer.bufmem; inhibit_frame = 0; gfxbuffer_reset (); reset_drawing (); } 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)) return 0; if (currprefs.gfx_apmode[0].gfx_vsyncmode == 0) return 1; if (currprefs.m68k_speed >= 0) return -1; return currprefs.cachesize ? -3 : -2; } 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)) return 0; if (currprefs.gfx_apmode[1].gfx_vsyncmode == 0) return 1; if (currprefs.m68k_speed >= 0) return -1; return currprefs.cachesize ? -3 : -2; } int isvsync (void) { if (picasso_on) return isvsync_rtg (); else return isvsync_chipset (); } fs-uae-2.2.3+dfsg/src/writelog.cpp0000644000175000017500000000134012162366655017202 0ustar glaubitzglaubitz /* * UAE - The Un*x Amiga Emulator * * Standard write_log that writes to the console * * Copyright 2001 Bernd Schmidt */ #include "sysconfig.h" #include "sysdeps.h" #ifdef FSUAE void write_log (const char *fmt, ...) #else void write_log_standard (const char *fmt, ...) #endif { va_list ap; va_start (ap, fmt); #ifdef HAVE_VFPRINTF vfprintf (stderr, fmt, ap); #else /* Technique stolen from GCC. */ { int x1, x2, x3, x4, x5, x6, x7, x8; x1 = va_arg (ap, int); x2 = va_arg (ap, int); x3 = va_arg (ap, int); x4 = va_arg (ap, int); x5 = va_arg (ap, int); x6 = va_arg (ap, int); x7 = va_arg (ap, int); x8 = va_arg (ap, int); fprintf (stderr, fmt, x1, x2, x3, x4, x5, x6, x7, x8); } #endif } fs-uae-2.2.3+dfsg/src/fsdb_unix.cpp0000644000175000017500000000514712162366654017337 0ustar glaubitzglaubitz /* * UAE - The Un*x Amiga Emulator * * Library of functions to make emulated filesystem as independent as * possible of the host filesystem's capabilities. * This is the Unix version. * * Copyright 1999 Bernd Schmidt */ #include "sysconfig.h" #include "sysdeps.h" #include "fsdb.h" /* Return nonzero for any name we can't create on the native filesystem. */ int fsdb_name_invalid (const char *n) { if (strcmp (n, FSDB_FILE) == 0) return 1; if (n[0] != '.') return 0; if (n[1] == '\0') return 1; return n[1] == '.' && n[2] == '\0'; } /* For an a_inode we have newly created based on a filename we found on the * native fs, fill in information about this file/directory. */ int fsdb_fill_file_attrs (a_inode *aino) { struct stat statbuf; /* This really shouldn't happen... */ if (stat (aino->nname, &statbuf) == -1) return 0; aino->dir = S_ISDIR (statbuf.st_mode) ? 1 : 0; aino->amigaos_mode = ((S_IXUSR & statbuf.st_mode ? 0 : A_FIBF_EXECUTE) | (S_IWUSR & statbuf.st_mode ? 0 : A_FIBF_WRITE) | (S_IRUSR & statbuf.st_mode ? 0 : A_FIBF_READ)); return 1; } int fsdb_set_file_attrs (a_inode *aino, int mask) { struct stat statbuf; int mode; if (stat (aino->nname, &statbuf) == -1) return ERROR_OBJECT_NOT_AROUND; mode = statbuf.st_mode; /* Unix dirs behave differently than AmigaOS ones. */ if (! aino->dir) { if (mask & A_FIBF_READ) mode &= ~S_IRUSR; else mode |= S_IRUSR; if (mask & A_FIBF_WRITE) mode &= ~S_IWUSR; else mode |= S_IWUSR; if (mask & A_FIBF_EXECUTE) mode &= ~S_IXUSR; else mode |= S_IXUSR; chmod (aino->nname, mode); } aino->amigaos_mode = mask; aino->dirty = 1; return 0; } /* Return nonzero if we can represent the amigaos_mode of AINO within the * native FS. Return zero if that is not possible. */ int fsdb_mode_representable_p (const a_inode *aino) { if (aino->dir) return aino->amigaos_mode == 0; return (aino->amigaos_mode & (A_FIBF_DELETE | A_FIBF_SCRIPT | A_FIBF_PURE)) == 0; } char *fsdb_create_unique_nname (a_inode *base, const char *suggestion) { char tmp[256] = "__uae___"; strncat (tmp, suggestion, 240); for (;;) { int i; char *p = build_nname (base->nname, tmp); if (access (p, R_OK) < 0 && errno == ENOENT) { printf ("unique name: %s\n", p); return p; } free (p); /* tmpnam isn't reentrant and I don't really want to hack configure * right now to see whether tmpnam_r is available... */ for (i = 0; i < 8; i++) { tmp[i] = "_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"[uaerand () % 63]; } } } fs-uae-2.2.3+dfsg/src/savestate.cpp0000644000175000017500000013152312162366654017353 0ustar glaubitzglaubitz/* * UAE - The Un*x Amiga Emulator * * Save/restore emulator state * * (c) 1999-2001 Toni Wilen * * see below for ASF-structure */ /* Features: * * - full CPU state (68000/68010/68020/68030/68040/68060) * - FPU (68881/68882/68040/68060) * - full CIA-A and CIA-B state (with all internal registers) * - saves all custom registers and audio internal state. * - Chip, Bogo, Fast, Z3 and Picasso96 RAM supported * - disk drive type, imagefile, track and motor state * - Kickstart ROM version, address and size is saved. This data is not used during restore yet. * - Action Replay state is saved */ /* Notes: * * - blitter state is not saved, blitter is forced to finish immediately if it * was active * - disk DMA state is completely saved * - does not ask for statefile name and description. Currently uses DF0's disk * image name (".adf" is replaced with ".asf") * - only Amiga state is restored, harddisk support, autoconfig, expansion boards etc.. * are not saved/restored (and probably never will). * - use this for saving games that can't be saved to disk */ /* Usage : * * save: * * set savestate_state = STATE_DOSAVE, savestate_filename = "..." * * restore: * * set savestate_state = STATE_DORESTORE, savestate_filename = "..." * */ #define OPEN_LOG 0 #include "sysconfig.h" #include "sysdeps.h" #include "options.h" #include "uae/memory.h" #include "zfile.h" #include "ar.h" #include "autoconf.h" #include "custom.h" #include "newcpu.h" #include "savestate.h" #include "uae.h" #include "gui.h" #include "audio.h" #include "filesys.h" #include "inputrecord.h" #include "disk.h" #ifdef FSUAE #include "uae/fs.h" #endif int savestate_state = 0; static int savestate_first_capture; static bool new_blitter = false; static int replaycounter; struct zfile *savestate_file; static int savestate_docompress, savestate_specialdump, savestate_nodialogs; TCHAR savestate_fname[MAX_DPATH]; #define STATEFILE_ALLOC_SIZE 600000 static int statefile_alloc; static int staterecords_max = 1000; static int staterecords_first = 0; static struct zfile *staterecord_statefile; struct staterecord { int len; int inuse; uae_u8 *cpu; uae_u8 *data; uae_u8 *end; int inprecoffset; }; static struct staterecord **staterecords; static void state_incompatible_warn (void) { static int warned; int dowarn = 0; int i; #ifdef BSDSOCKET if (currprefs.socket_emu) dowarn = 1; #endif #ifdef UAESERIAL if (currprefs.uaeserial) dowarn = 1; #endif #ifdef SCSIEMU if (currprefs.scsi) dowarn = 1; #endif #ifdef CATWEASEL if (currprefs.catweasel) dowarn = 1; #endif #ifdef FILESYS for(i = 0; i < currprefs.mountitems; i++) { struct mountedinfo mi; int type = get_filesys_unitconfig (&currprefs, i, &mi); if (mi.ismounted && type != FILESYS_VIRTUAL && type != FILESYS_HARDFILE && type != FILESYS_HARDFILE_RDB) dowarn = 1; } #endif if (!warned && dowarn) { warned = 1; notify_user (NUMSG_STATEHD); } } /* functions for reading/writing bytes, shorts and longs in big-endian * format independent of host machine's endianess */ static uae_u8 *storepos; void save_store_pos_func (uae_u8 **dstp) { storepos = *dstp; *dstp += 4; } void save_store_size_func (uae_u8 **dstp) { uae_u8 *p = storepos; save_u32_func (&p, *dstp - storepos); } void restore_store_pos_func (uae_u8 **srcp) { storepos = *srcp; *srcp += 4; } void restore_store_size_func (uae_u8 **srcp) { uae_u8 *p = storepos; uae_u32 len = restore_u32_func (&p); *srcp = storepos + len; } void save_u32_func (uae_u8 **dstp, uae_u32 v) { uae_u8 *dst = *dstp; *dst++ = (uae_u8)(v >> 24); *dst++ = (uae_u8)(v >> 16); *dst++ = (uae_u8)(v >> 8); *dst++ = (uae_u8)(v >> 0); *dstp = dst; } void save_u64_func (uae_u8 **dstp, uae_u64 v) { save_u32_func (dstp, (uae_u32)(v >> 32)); save_u32_func (dstp, (uae_u32)v); } void save_u16_func (uae_u8 **dstp, uae_u16 v) { uae_u8 *dst = *dstp; *dst++ = (uae_u8)(v >> 8); *dst++ = (uae_u8)(v >> 0); *dstp = dst; } void save_u8_func (uae_u8 **dstp, uae_u8 v) { uae_u8 *dst = *dstp; *dst++ = v; *dstp = dst; } void save_string_func (uae_u8 **dstp, const TCHAR *from) { uae_u8 *dst = *dstp; char *s, *s2; s2 = s = uutf8 (from); while (s && *s) *dst++ = *s++; *dst++ = 0; *dstp = dst; xfree (s2); } void save_path_func (uae_u8 **dstp, const TCHAR *from, int type) { save_string_func (dstp, from); } uae_u32 restore_u32_func (uae_u8 **dstp) { uae_u32 v; uae_u8 *dst = *dstp; v = (dst[0] << 24) | (dst[1] << 16) | (dst[2] << 8) | (dst[3]); *dstp = dst + 4; return v; } uae_u64 restore_u64_func (uae_u8 **dstp) { uae_u64 v; v = restore_u32_func (dstp); v <<= 32; v |= restore_u32_func (dstp); return v; } uae_u16 restore_u16_func (uae_u8 **dstp) { uae_u16 v; uae_u8 *dst = *dstp; v=(dst[0] << 8) | (dst[1]); *dstp = dst + 2; return v; } uae_u8 restore_u8_func (uae_u8 **dstp) { uae_u8 v; uae_u8 *dst = *dstp; v = dst[0]; *dstp = dst + 1; return v; } TCHAR *restore_string_func (uae_u8 **dstp) { int len; uae_u8 v; uae_u8 *dst = *dstp; char *top, *to; TCHAR *s; len = strlen ((char*)dst) + 1; top = to = xmalloc (char, len); do { v = *dst++; *top++ = v; } while (v); *dstp = dst; s = utf8u (to); xfree (to); return s; } TCHAR *restore_path_func (uae_u8 **dstp, int type) { TCHAR *newpath; TCHAR *s; TCHAR *out = NULL; TCHAR tmp[MAX_DPATH], tmp2[MAX_DPATH]; s = restore_string_func (dstp); if (s[0] == 0) return s; if (zfile_exists (s)) return s; if (type == SAVESTATE_PATH_HD) return s; getfilepart (tmp, sizeof tmp / sizeof (TCHAR), s); if (zfile_exists (tmp)) { xfree (s); return my_strdup (tmp); } for (int i = 0; i < MAX_PATHS; i++) { newpath = NULL; if (type == SAVESTATE_PATH_FLOPPY) newpath = currprefs.path_floppy.path[i]; else if (type == SAVESTATE_PATH_VDIR || type == SAVESTATE_PATH_HDF) newpath = currprefs.path_hardfile.path[i]; else if (type == SAVESTATE_PATH_CD) newpath = currprefs.path_cd.path[i]; if (newpath == NULL || newpath[0] == 0) break; _tcscpy (tmp2, newpath); fixtrailing (tmp2); _tcscat (tmp2, tmp); fullpath (tmp2, sizeof tmp2 / sizeof (TCHAR)); if (zfile_exists (tmp2)) { xfree (s); return my_strdup (tmp2); } } getpathpart (tmp2, sizeof tmp2 / sizeof (TCHAR), savestate_fname); _tcscat (tmp2, tmp); if (zfile_exists (tmp2)) { xfree (s); return my_strdup (tmp2); } return s; } /* read and write IFF-style hunks */ static void save_chunk (struct zfile *f, uae_u8 *chunk, size_t len, TCHAR *name, int compress) { uae_u8 tmp[8], *dst; uae_u8 zero[4]= { 0, 0, 0, 0 }; uae_u32 flags; size_t pos; size_t chunklen, len2; char *s; if (!chunk) return; if (compress < 0) { zfile_fwrite (chunk, 1, len, f); return; } /* chunk name */ s = ua (name); zfile_fwrite (s, 1, 4, f); xfree (s); pos = zfile_ftell (f); /* chunk size */ dst = &tmp[0]; chunklen = len + 4 + 4 + 4; save_u32 (chunklen); zfile_fwrite (&tmp[0], 1, 4, f); /* chunk flags */ flags = 0; dst = &tmp[0]; save_u32 (flags | compress); zfile_fwrite (&tmp[0], 1, 4, f); /* chunk data */ if (compress) { int tmplen = len; size_t opos; dst = &tmp[0]; save_u32 (len); opos = zfile_ftell (f); zfile_fwrite (&tmp[0], 1, 4, f); len = zfile_zcompress (f, chunk, len); if (len > 0) { zfile_fseek (f, pos, SEEK_SET); dst = &tmp[0]; save_u32 (len + 4 + 4 + 4 + 4); zfile_fwrite (&tmp[0], 1, 4, f); zfile_fseek (f, 0, SEEK_END); } else { len = tmplen; compress = 0; zfile_fseek (f, opos, SEEK_SET); dst = &tmp[0]; save_u32 (flags); zfile_fwrite (&tmp[0], 1, 4, f); } } if (!compress) zfile_fwrite (chunk, 1, len, f); /* alignment */ len2 = 4 - (len & 3); if (len2) zfile_fwrite (zero, 1, len2, f); write_log (_T("Chunk '%s' chunk size %d (%d)\n"), name, chunklen, len); } static uae_u8 *restore_chunk (struct zfile *f, TCHAR *name, size_t *len, size_t *totallen, size_t *filepos) { uae_u8 tmp[6], dummy[4], *mem, *src; uae_u32 flags; int len2; *totallen = 0; /* chunk name */ zfile_fread (tmp, 1, 4, f); tmp[4] = 0; au_copy (name, 5, (char*)tmp); /* chunk size */ zfile_fread (tmp, 1, 4, f); src = tmp; len2 = restore_u32 () - 4 - 4 - 4; if (len2 < 0) len2 = 0; *len = len2; if (len2 == 0) { *filepos = zfile_ftell (f); return 0; } /* chunk flags */ zfile_fread (tmp, 1, 4, f); src = tmp; flags = restore_u32 (); *totallen = *len; if (flags & 1) { zfile_fread (tmp, 1, 4, f); src = tmp; *totallen = restore_u32 (); *filepos = zfile_ftell (f) - 4 - 4 - 4; len2 -= 4; } else { *filepos = zfile_ftell (f) - 4 - 4; } /* chunk data. RAM contents will be loaded during the reset phase, no need to malloc multiple megabytes here. */ if (_tcscmp (name, _T("CRAM")) != 0 && _tcscmp (name, _T("BRAM")) != 0 && _tcscmp (name, _T("FRAM")) != 0 && _tcscmp (name, _T("ZRAM")) != 0 && _tcscmp (name, _T("ZCRM")) != 0 && _tcscmp (name, _T("PRAM")) != 0 && _tcscmp (name, _T("A3K1")) != 0 && _tcscmp (name, _T("A3K2")) != 0 && _tcscmp (name, _T("BORO")) != 0 ) { /* extra bytes at the end needed to handle old statefiles that now have new fields */ mem = xcalloc (uae_u8, *totallen + 100); if (!mem) return NULL; if (flags & 1) { zfile_zuncompress (mem, *totallen, f, len2); } else { zfile_fread (mem, 1, len2, f); } } else { mem = 0; zfile_fseek (f, len2, SEEK_CUR); } /* alignment */ len2 = 4 - (len2 & 3); if (len2) zfile_fread (dummy, 1, len2, f); return mem; } void restore_ram (size_t filepos, uae_u8 *memory) { uae_u8 tmp[8]; uae_u8 *src = tmp; int size, fullsize; uae_u32 flags; if (filepos == 0 || memory == NULL) return; zfile_fseek (savestate_file, filepos, SEEK_SET); zfile_fread (tmp, 1, sizeof tmp, savestate_file); size = restore_u32 (); flags = restore_u32 (); size -= 4 + 4 + 4; if (flags & 1) { zfile_fread (tmp, 1, 4, savestate_file); src = tmp; fullsize = restore_u32 (); size -= 4; zfile_zuncompress (memory, fullsize, savestate_file, size); } else { zfile_fread (memory, 1, size, savestate_file); } } static uae_u8 *restore_log (uae_u8 *src) { #if OPEN_LOG > 0 TCHAR *s = utf8u (src); write_log (_T("%s\n"), s); xfree (s); #endif src += strlen ((char*)src) + 1; return src; } static void restore_header (uae_u8 *src) { TCHAR *emuname, *emuversion, *description; restore_u32 (); emuname = restore_string (); emuversion = restore_string (); description = restore_string (); write_log (_T("Saved with: '%s %s', description: '%s'\n"), emuname, emuversion, description); xfree (description); xfree (emuversion); xfree (emuname); } /* restore all subsystems */ void restore_state (const TCHAR *filename) { struct zfile *f; uae_u8 *chunk,*end; TCHAR name[5]; size_t len, totallen; size_t filepos, filesize; int z3num; chunk = 0; f = zfile_fopen (filename, _T("rb"), ZFD_NORMAL); if (!f) goto error; zfile_fseek (f, 0, SEEK_END); filesize = zfile_ftell (f); zfile_fseek (f, 0, SEEK_SET); savestate_state = STATE_RESTORE; savestate_init (); chunk = restore_chunk (f, name, &len, &totallen, &filepos); if (!chunk || _tcsncmp (name, _T("ASF "), 4)) { write_log (_T("%s is not an AmigaStateFile\n"), filename); goto error; } write_log (_T("STATERESTORE:\n")); config_changed = 1; savestate_file = f; restore_header (chunk); xfree (chunk); restore_cia_start (); changed_prefs.bogomem_size = 0; changed_prefs.chipmem_size = 0; changed_prefs.fastmem_size = 0; changed_prefs.z3fastmem_size = 0; changed_prefs.z3fastmem2_size = 0; changed_prefs.mbresmem_low_size = 0; changed_prefs.mbresmem_high_size = 0; z3num = 0; for (;;) { name[0] = 0; chunk = end = restore_chunk (f, name, &len, &totallen, &filepos); write_log (_T("Chunk '%s' size %d (%d)\n"), name, len, totallen); if (!_tcscmp (name, _T("END "))) { #ifdef _DEBUG if (filesize > filepos + 8) continue; #endif break; } if (!_tcscmp (name, _T("CRAM"))) { restore_cram (totallen, filepos); continue; } else if (!_tcscmp (name, _T("BRAM"))) { restore_bram (totallen, filepos); continue; } else if (!_tcscmp (name, _T("A3K1"))) { restore_a3000lram (totallen, filepos); continue; } else if (!_tcscmp (name, _T("A3K2"))) { restore_a3000hram (totallen, filepos); continue; #ifdef AUTOCONFIG } else if (!_tcscmp (name, _T("FRAM"))) { restore_fram (totallen, filepos); continue; } else if (!_tcscmp (name, _T("ZRAM"))) { restore_zram (totallen, filepos, z3num++); continue; } else if (!_tcscmp (name, _T("ZCRM"))) { restore_zram (totallen, filepos, -1); continue; } else if (!_tcscmp (name, _T("BORO"))) { restore_bootrom (totallen, filepos); continue; #endif #ifdef PICASSO96 } else if (!_tcscmp (name, _T("PRAM"))) { restore_pram (totallen, filepos); continue; #endif } else if (!_tcscmp (name, _T("CYCS"))) { end = restore_cycles (chunk); } else if (!_tcscmp (name, _T("CPU "))) { end = restore_cpu (chunk); } else if (!_tcscmp (name, _T("CPUX"))) end = restore_cpu_extra (chunk); else if (!_tcscmp (name, _T("CPUT"))) end = restore_cpu_trace (chunk); #ifdef FPUEMU else if (!_tcscmp (name, _T("FPU "))) end = restore_fpu (chunk); #endif #ifdef MMUEMU else if (!_tcscmp (name, _T("MMU "))) end = restore_mmu (chunk); #endif else if (!_tcscmp (name, _T("AGAC"))) end = restore_custom_agacolors (chunk); else if (!_tcscmp (name, _T("SPR0"))) end = restore_custom_sprite (0, chunk); else if (!_tcscmp (name, _T("SPR1"))) end = restore_custom_sprite (1, chunk); else if (!_tcscmp (name, _T("SPR2"))) end = restore_custom_sprite (2, chunk); else if (!_tcscmp (name, _T("SPR3"))) end = restore_custom_sprite (3, chunk); else if (!_tcscmp (name, _T("SPR4"))) end = restore_custom_sprite (4, chunk); else if (!_tcscmp (name, _T("SPR5"))) end = restore_custom_sprite (5, chunk); else if (!_tcscmp (name, _T("SPR6"))) end = restore_custom_sprite (6, chunk); else if (!_tcscmp (name, _T("SPR7"))) end = restore_custom_sprite (7, chunk); else if (!_tcscmp (name, _T("CIAA"))) end = restore_cia (0, chunk); else if (!_tcscmp (name, _T("CIAB"))) end = restore_cia (1, chunk); else if (!_tcscmp (name, _T("CHIP"))) end = restore_custom (chunk); else if (!_tcscmp (name, _T("CINP"))) end = restore_input (chunk); else if (!_tcscmp (name, _T("CHPX"))) end = restore_custom_extra (chunk); else if (!_tcscmp (name, _T("CHPD"))) end = restore_custom_event_delay (chunk); else if (!_tcscmp (name, _T("AUD0"))) end = restore_audio (0, chunk); else if (!_tcscmp (name, _T("AUD1"))) end = restore_audio (1, chunk); else if (!_tcscmp (name, _T("AUD2"))) end = restore_audio (2, chunk); else if (!_tcscmp (name, _T("AUD3"))) end = restore_audio (3, chunk); else if (!_tcscmp (name, _T("BLIT"))) end = restore_blitter (chunk); else if (!_tcscmp (name, _T("BLTX"))) end = restore_blitter_new (chunk); else if (!_tcscmp (name, _T("DISK"))) end = restore_floppy (chunk); else if (!_tcscmp (name, _T("DSK0"))) end = restore_disk (0, chunk); else if (!_tcscmp (name, _T("DSK1"))) end = restore_disk (1, chunk); else if (!_tcscmp (name, _T("DSK2"))) end = restore_disk (2, chunk); else if (!_tcscmp (name, _T("DSK3"))) end = restore_disk (3, chunk); else if (!_tcscmp (name, _T("DSD0"))) end = restore_disk2 (0, chunk); else if (!_tcscmp (name, _T("DSD1"))) end = restore_disk2 (1, chunk); else if (!_tcscmp (name, _T("DSD2"))) end = restore_disk2 (2, chunk); else if (!_tcscmp (name, _T("DSD3"))) end = restore_disk2 (3, chunk); else if (!_tcscmp (name, _T("KEYB"))) end = restore_keyboard (chunk); #ifdef AUTOCONFIG else if (!_tcscmp (name, _T("EXPA"))) end = restore_expansion (chunk); #endif else if (!_tcscmp (name, _T("ROM "))) end = restore_rom (chunk); #ifdef PICASSO96 else if (!_tcscmp (name, _T("P96 "))) end = restore_p96 (chunk); #endif #ifdef ACTION_REPLAY else if (!_tcscmp (name, _T("ACTR"))) end = restore_action_replay (chunk); else if (!_tcscmp (name, _T("HRTM"))) end = restore_hrtmon (chunk); #endif #ifdef FILESYS else if (!_tcscmp (name, _T("FSYS"))) end = restore_filesys (chunk); else if (!_tcscmp (name, _T("FSYC"))) end = restore_filesys_common (chunk); #endif #ifdef CD32 else if (!_tcscmp (name, _T("CD32"))) end = restore_akiko (chunk); #endif #ifdef CDTV else if (!_tcscmp (name, _T("CDTV"))) end = restore_cdtv (chunk); else if (!_tcscmp (name, _T("DMAC"))) end = restore_dmac (chunk); #endif else if (!_tcscmp (name, _T("GAYL"))) end = restore_gayle (chunk); else if (!_tcscmp (name, _T("IDE "))) end = restore_ide (chunk); else if (!_tcsncmp (name, _T("CDU"), 3)) end = restore_cd (name[3] - '0', chunk); #ifdef A2065 else if (!_tcsncmp (name, _T("2065"), 4)) end = restore_a2065 (chunk); #endif else if (!_tcsncmp (name, _T("DMWP"), 4)) end = restore_debug_memwatch (chunk); else if (!_tcscmp (name, _T("CONF"))) end = restore_configuration (chunk); else if (!_tcscmp (name, _T("LOG "))) end = restore_log (chunk); else { end = chunk + len; write_log (_T("unknown chunk '%s' size %d bytes\n"), name, len); } if (end == NULL) write_log (_T("Chunk '%s', size %d bytes was not accepted!\n"), name, len); else if (totallen != end - chunk) write_log (_T("Chunk '%s' total size %d bytes but read %d bytes!\n"), name, totallen, end - chunk); xfree (chunk); } target_addtorecent (filename, 0); return; error: savestate_state = 0; savestate_file = 0; if (chunk) xfree (chunk); if (f) zfile_fclose (f); } void savestate_restore_finish (void) { if (!isrestore ()) return; zfile_fclose (savestate_file); savestate_file = 0; restore_cpu_finish (); restore_audio_finish (); restore_disk_finish (); restore_blitter_finish (); restore_akiko_finish (); #ifdef CDTV restore_cdtv_finish (); #endif #ifdef PICASSO96 restore_p96_finish (); #endif #ifdef A2065 restore_a2065_finish (); #endif restore_cia_finish (); restore_debug_memwatch_finish (); savestate_state = 0; init_hz_full (); audio_activate (); } /* 1=compressed,2=not compressed,3=ram dump,4=audio dump */ void savestate_initsave (const TCHAR *filename, int mode, int nodialogs, bool save) { if (filename == NULL) { savestate_fname[0] = 0; savestate_docompress = 0; savestate_specialdump = 0; savestate_nodialogs = 0; return; } _tcscpy (savestate_fname, filename); savestate_docompress = (mode == 1) ? 1 : 0; savestate_specialdump = (mode == 3) ? 1 : (mode == 4) ? 2 : 0; savestate_nodialogs = nodialogs; new_blitter = false; if (save) { savestate_free (); inprec_close (true); } } static void save_rams (struct zfile *f, int comp) { uae_u8 *dst; int len; dst = save_cram (&len); save_chunk (f, dst, len, _T("CRAM"), comp); dst = save_bram (&len); save_chunk (f, dst, len, _T("BRAM"), comp); dst = save_a3000lram (&len); save_chunk (f, dst, len, _T("A3K1"), comp); dst = save_a3000hram (&len); save_chunk (f, dst, len, _T("A3K2"), comp); #ifdef AUTOCONFIG dst = save_fram (&len); save_chunk (f, dst, len, _T("FRAM"), comp); dst = save_zram (&len, 0); save_chunk (f, dst, len, _T("ZRAM"), comp); dst = save_zram (&len, 1); save_chunk (f, dst, len, _T("ZRAM"), comp); dst = save_zram (&len, -1); save_chunk (f, dst, len, _T("ZCRM"), comp); dst = save_bootrom (&len); save_chunk (f, dst, len, _T("BORO"), comp); #endif #ifdef PICASSO96 dst = save_pram (&len); save_chunk (f, dst, len, _T("PRAM"), comp); #endif } /* Save all subsystems */ static int save_state_internal (struct zfile *f, const TCHAR *description, int comp, bool savepath) { uae_u8 endhunk[] = { 'E', 'N', 'D', ' ', 0, 0, 0, 8 }; uae_u8 header[1000]; TCHAR tmp[100]; uae_u8 *dst; TCHAR name[5]; int i, len; write_log (_T("STATESAVE (%s):\n"), f ? zfile_getname (f) : _T("")); dst = header; save_u32 (0); save_string (_T("UAE")); _stprintf (tmp, _T("%d.%d.%d"), UAEMAJOR, UAEMINOR, UAESUBREV); save_string (tmp); save_string (description); save_chunk (f, header, dst-header, _T("ASF "), 0); dst = save_cycles (&len, 0); save_chunk (f, dst, len, _T("CYCS"), 0); xfree (dst); dst = save_cpu (&len, 0); save_chunk (f, dst, len, _T("CPU "), 0); xfree (dst); dst = save_cpu_extra (&len, 0); save_chunk (f, dst, len, _T("CPUX"), 0); xfree (dst); dst = save_cpu_trace (&len, 0); save_chunk (f, dst, len, _T("CPUT"), 0); xfree (dst); #ifdef FPUEMU dst = save_fpu (&len,0 ); save_chunk (f, dst, len, _T("FPU "), 0); xfree (dst); #endif #ifdef MMUEMU dst = save_mmu (&len, 0); save_chunk (f, dst, len, _T("MMU "), 0); xfree (dst); #endif _tcscpy(name, _T("DSKx")); for (i = 0; i < 4; i++) { dst = save_disk (i, &len, 0, savepath); if (dst) { name[3] = i + '0'; save_chunk (f, dst, len, name, 0); xfree (dst); } } _tcscpy(name, _T("DSDx")); for (i = 0; i < 4; i++) { dst = save_disk2 (i, &len, 0); if (dst) { name[3] = i + '0'; save_chunk (f, dst, len, name, comp); xfree (dst); } } dst = save_floppy (&len, 0); save_chunk (f, dst, len, _T("DISK"), 0); xfree (dst); dst = save_custom (&len, 0, 0); save_chunk (f, dst, len, _T("CHIP"), 0); xfree (dst); dst = save_custom_extra (&len, 0); save_chunk (f, dst, len, _T("CHPX"), 0); xfree (dst); dst = save_custom_event_delay (&len, 0); save_chunk (f, dst, len, _T("CHPD"), 0); xfree (dst); dst = save_blitter_new (&len, 0); save_chunk (f, dst, len, _T("BLTX"), 0); xfree (dst); if (new_blitter == false) { dst = save_blitter (&len, 0); save_chunk (f, dst, len, _T("BLIT"), 0); xfree (dst); } dst = save_input (&len, 0); save_chunk (f, dst, len, _T("CINP"), 0); xfree (dst); dst = save_custom_agacolors (&len, 0); save_chunk (f, dst, len, _T("AGAC"), 0); xfree (dst); _tcscpy (name, _T("SPRx")); for (i = 0; i < 8; i++) { dst = save_custom_sprite (i, &len, 0); name[3] = i + '0'; save_chunk (f, dst, len, name, 0); xfree (dst); } _tcscpy (name, _T("AUDx")); for (i = 0; i < 4; i++) { dst = save_audio (i, &len, 0); name[3] = i + '0'; save_chunk (f, dst, len, name, 0); xfree (dst); } dst = save_cia (0, &len, 0); save_chunk (f, dst, len, _T("CIAA"), 0); xfree (dst); dst = save_cia (1, &len, 0); save_chunk (f, dst, len, _T("CIAB"), 0); xfree (dst); dst = save_keyboard (&len, NULL); save_chunk (f, dst, len, _T("KEYB"), 0); xfree (dst); #ifdef AUTOCONFIG dst = save_expansion (&len, 0); save_chunk (f, dst, len, _T("EXPA"), 0); #endif #ifdef A2065 dst = save_a2065 (&len, NULL); save_chunk (f, dst, len, _T("2065"), 0); #endif #ifdef PICASSO96 dst = save_p96 (&len, 0); save_chunk (f, dst, len, _T("P96 "), 0); #endif save_rams (f, comp); dst = save_rom (1, &len, 0); do { if (!dst) break; save_chunk (f, dst, len, _T("ROM "), 0); xfree (dst); } while ((dst = save_rom (0, &len, 0))); #ifdef CD32 dst = save_akiko (&len, NULL); save_chunk (f, dst, len, _T("CD32"), 0); xfree (dst); #endif #ifdef CDTV dst = save_cdtv (&len, NULL); save_chunk (f, dst, len, _T("CDTV"), 0); xfree (dst); dst = save_dmac (&len, NULL); save_chunk (f, dst, len, _T("DMAC"), 0); xfree (dst); #endif #ifdef ACTION_REPLAY dst = save_action_replay (&len, NULL); save_chunk (f, dst, len, _T("ACTR"), comp); dst = save_hrtmon (&len, NULL); save_chunk (f, dst, len, _T("HRTM"), comp); #endif #ifdef FILESYS dst = save_filesys_common (&len); if (dst) { save_chunk (f, dst, len, _T("FSYC"), 0); for (i = 0; i < nr_units (); i++) { dst = save_filesys (i, &len); if (dst) { save_chunk (f, dst, len, _T("FSYS"), 0); xfree (dst); } } } #endif dst = save_gayle (&len, NULL); if (dst) { save_chunk (f, dst, len, _T("GAYL"), 0); xfree(dst); } for (i = 0; i < 4; i++) { dst = save_ide (i, &len, NULL); if (dst) { save_chunk (f, dst, len, _T("IDE "), 0); xfree (dst); } } for (i = 0; i < MAX_TOTAL_SCSI_DEVICES; i++) { dst = save_cd (i, &len); if (dst) { _stprintf (name, _T("CDU%d"), i); save_chunk (f, dst, len, name, 0); } } dst = save_debug_memwatch (&len, NULL); if (dst) { save_chunk (f, dst, len, _T("DMWP"), 0); xfree(dst); } /* add fake END tag, makes it easy to strip CONF and LOG hunks */ /* move this if you want to use CONF or LOG hunks when restoring state */ zfile_fwrite (endhunk, 1, 8, f); dst = save_configuration (&len, false); if (dst) { save_chunk (f, dst, len, _T("CONF"), comp); xfree(dst); } len = 30000; dst = save_log (TRUE, &len); if (dst) { save_chunk (f, dst, len, _T("LOG "), comp); xfree (dst); } zfile_fwrite (endhunk, 1, 8, f); return 1; } int save_state (const TCHAR *filename, const TCHAR *description) { struct zfile *f; int comp = savestate_docompress; if (!savestate_specialdump && !savestate_nodialogs) { state_incompatible_warn (); if (!save_filesys_cando ()) { gui_message (_T("Filesystem active. Try again later.")); return -1; } } new_blitter = false; savestate_nodialogs = 0; custom_prepare_savestate (); f = zfile_fopen (filename, _T("w+b"), 0); if (!f) return 0; if (savestate_specialdump) { size_t pos; if (savestate_specialdump == 2) write_wavheader (f, 0, 22050); pos = zfile_ftell (f); save_rams (f, -1); if (savestate_specialdump == 2) { int len, len2, i; uae_u8 *tmp; len = zfile_ftell (f) - pos; tmp = xmalloc (uae_u8, len); zfile_fseek(f, pos, SEEK_SET); len2 = zfile_fread (tmp, 1, len, f); for (i = 0; i < len2; i++) tmp[i] += 0x80; write_wavheader (f, len, 22050); zfile_fwrite (tmp, len2, 1, f); xfree (tmp); } zfile_fclose (f); return 1; } int v = save_state_internal (f, description, comp, true); if (v) write_log (_T("Save of '%s' complete\n"), filename); zfile_fclose (f); savestate_state = 0; return v; } void savestate_quick (int slot, int save) { int i, len = _tcslen (savestate_fname); i = len - 1; #ifdef FSUAE while (i >= 0 && savestate_fname[i] != ' ') #else while (i >= 0 && savestate_fname[i] != '_') #endif i--; if (i < len - 6 || i <= 0) { /* "_?.uss" */ i = len - 1; while (i >= 0 && savestate_fname[i] != '.') i--; if (i <= 0) { write_log (_T("savestate name skipped '%s'\n"), savestate_fname); return; } } _tcscpy (savestate_fname + i, _T(".uss")); if (slot > 0) #ifdef FSUAE _stprintf (savestate_fname + i, _T(" %d.uss"), slot); #else _stprintf (savestate_fname + i, _T("_%d.uss"), slot); #endif if (save) { write_log (_T("saving '%s'\n"), savestate_fname); #ifdef FSUAE savestate_docompress = g_amiga_savestate_docompress; #else savestate_docompress = 1; #endif save_state (savestate_fname, _T("")); } else { if (!zfile_exists (savestate_fname)) { write_log (_T("staterestore, file '%s' not found\n"), savestate_fname); return; } savestate_state = STATE_DORESTORE; write_log (_T("staterestore starting '%s'\n"), savestate_fname); } } bool savestate_check (void) { if (vpos == 0 && !savestate_state) { if (hsync_counter == 0 && input_play == INPREC_PLAY_NORMAL) savestate_memorysave (); savestate_capture (0); } if (savestate_state == STATE_DORESTORE) { savestate_state = STATE_RESTORE; return true; } else if (savestate_state == STATE_DOREWIND) { savestate_state = STATE_REWIND; return true; } return false; } static int rewindmode; static struct staterecord *canrewind (int pos) { if (pos < 0) pos += staterecords_max; if (!staterecords) return 0; if (staterecords[pos] == NULL) return NULL; if (staterecords[pos]->inuse == 0) return NULL; if ((pos + 1) % staterecords_max == staterecords_first) return NULL; return staterecords[pos]; } int savestate_dorewind (int pos) { rewindmode = pos; if (pos < 0) pos = replaycounter - 1; if (canrewind (pos)) { savestate_state = STATE_DOREWIND; write_log (_T("dorewind %d (%010d/%03d) -> %d\n"), replaycounter - 1, hsync_counter, vsync_counter, pos); return 1; } return 0; } #if 0 void savestate_listrewind (void) { int i = replaycounter; int cnt; uae_u8 *p; uae_u32 pc; cnt = 1; for (;;) { struct staterecord *st; st = &staterecords[i]; if (!st->start) break; p = st->cpu + 17 * 4; pc = restore_u32_func (&p); console_out_f (_T("%d: PC=%08X %c\n"), cnt, pc, regs.pc == pc ? '*' : ' '); cnt++; i--; if (i < 0) i += MAX_STATERECORDS; } } #endif void savestate_rewind (void) { int len, i, dummy; uae_u8 *p, *p2; struct staterecord *st; int pos; bool rewind = false; if (hsync_counter % currprefs.statecapturerate <= 25 && rewindmode <= -2) { pos = replaycounter - 2; rewind = true; } else { pos = replaycounter - 1; } st = canrewind (pos); if (!st) { rewind = false; pos = replaycounter - 1; st = canrewind (pos); if (!st) return; } p = st->data; p2 = st->end; write_log (_T("rewinding %d -> %d\n"), replaycounter - 1, pos); hsync_counter = restore_u32_func (&p); vsync_counter = restore_u32_func (&p); p = restore_cpu (p); p = restore_cycles (p); p = restore_cpu_extra (p); if (restore_u32_func (&p)) p = restore_cpu_trace (p); #ifdef FPUEMU if (restore_u32_func (&p)) p = restore_fpu (p); #endif for (i = 0; i < 4; i++) { p = restore_disk (i, p); if (restore_u32_func (&p)) p = restore_disk2 (i, p); } p = restore_floppy (p); p = restore_custom (p); p = restore_custom_extra (p); if (restore_u32_func (&p)) p = restore_custom_event_delay (p); p = restore_blitter_new (p); p = restore_custom_agacolors (p); for (i = 0; i < 8; i++) { p = restore_custom_sprite (i, p); } for (i = 0; i < 4; i++) { p = restore_audio (i, p); } p = restore_cia (0, p); p = restore_cia (1, p); p = restore_keyboard (p); p = restore_inputstate (p); #ifdef AUTOCONFIG p = restore_expansion (p); #endif #ifdef PICASSO96 if (restore_u32_func (&p)) p = restore_p96 (p); #endif len = restore_u32_func (&p); memcpy (chipmemory, p, currprefs.chipmem_size > len ? len : currprefs.chipmem_size); p += len; len = restore_u32_func (&p); memcpy (save_bram (&dummy), p, currprefs.bogomem_size > len ? len : currprefs.bogomem_size); p += len; #ifdef AUTOCONFIG len = restore_u32_func (&p); memcpy (save_fram (&dummy), p, currprefs.fastmem_size > len ? len : currprefs.fastmem_size); p += len; len = restore_u32_func (&p); memcpy (save_zram (&dummy, 0), p, currprefs.z3fastmem_size > len ? len : currprefs.z3fastmem_size); p += len; #endif #ifdef ACTION_REPLAY if (restore_u32_func (&p)) p = restore_action_replay (p); if (restore_u32_func (&p)) p = restore_hrtmon (p); #endif #ifdef CD32 if (restore_u32_func (&p)) p = restore_akiko (p); #endif #ifdef CDTV if (restore_u32_func (&p)) p = restore_cdtv (p); if (restore_u32_func (&p)) p = restore_dmac (p); #endif if (restore_u32_func (&p)) p = restore_gayle (p); for (i = 0; i < 4; i++) { if (restore_u32_func (&p)) p = restore_ide (p); } p += 4; if (p != p2) { gui_message (_T("reload failure, address mismatch %p != %p"), p, p2); uae_reset (0, 0); return; } inprec_setposition (st->inprecoffset, pos); write_log (_T("state %d restored. (%010d/%03d)\n"), pos, hsync_counter, vsync_counter); if (rewind) { replaycounter--; if (replaycounter < 0) replaycounter += staterecords_max; st = canrewind (replaycounter); st->inuse = 0; } } #define BS 10000 STATIC_INLINE int bufcheck (struct staterecord *sr, uae_u8 *p, int len) { if (p - sr->data + BS + len >= sr->len) return 1; return 0; } void savestate_memorysave (void) { new_blitter = true; // create real statefile in memory too for later saving zfile_fclose (staterecord_statefile); staterecord_statefile = zfile_fopen_empty (NULL, _T("statefile.inp.uss")); if (staterecord_statefile) save_state_internal (staterecord_statefile, _T("rerecording"), 1, false); } void savestate_capture (int force) { uae_u8 *p, *p2, *p3, *dst; int i, len, tlen, retrycnt; struct staterecord *st; bool firstcapture = false; #ifdef FILESYS if (nr_units ()) return; #endif if (!staterecords) return; if (!input_record) return; if (currprefs.statecapturerate && hsync_counter == 0 && input_record == INPREC_RECORD_START && savestate_first_capture > 0) { // first capture force = true; firstcapture = true; } else if (savestate_first_capture < 0) { force = true; firstcapture = false; } if (!force) { if (currprefs.statecapturerate <= 0) return; if (hsync_counter % currprefs.statecapturerate) return; } savestate_first_capture = false; retrycnt = 0; retry2: st = staterecords[replaycounter]; if (st == NULL) { st = (struct staterecord*)xmalloc (uae_u8, statefile_alloc); st->len = statefile_alloc; } else if (retrycnt > 0) { write_log (_T("realloc %d -> %d\n"), st->len, st->len + STATEFILE_ALLOC_SIZE); st->len += STATEFILE_ALLOC_SIZE; st = (struct staterecord*)xrealloc (uae_u8, st, st->len); } if (st->len > statefile_alloc) statefile_alloc = st->len; st->inuse = 0; st->data = (uae_u8*)(st + 1); staterecords[replaycounter] = st; retrycnt++; p = p2 = st->data; tlen = 0; save_u32_func (&p, hsync_counter); save_u32_func (&p, vsync_counter); tlen += 8; if (bufcheck (st, p, 0)) goto retry; st->cpu = p; save_cpu (&len, p); tlen += len; p += len; if (bufcheck (st, p, 0)) goto retry; save_cycles (&len, p); tlen += len; p += len; if (bufcheck (st, p, 0)) goto retry; save_cpu_extra (&len, p); tlen += len; p += len; if (bufcheck (st, p, 0)) goto retry; p3 = p; save_u32_func (&p, 0); tlen += 4; if (save_cpu_trace (&len, p)) { save_u32_func (&p3, 1); tlen += len; p += len; } #ifdef FPUEMU if (bufcheck (st, p, 0)) goto retry; p3 = p; save_u32_func (&p, 0); tlen += 4; if (save_fpu (&len, p)) { save_u32_func (&p3, 1); tlen += len; p += len; } #endif for (i = 0; i < 4; i++) { if (bufcheck (st, p, 0)) goto retry; save_disk (i, &len, p, true); tlen += len; p += len; p3 = p; save_u32_func (&p, 0); tlen += 4; if (save_disk2 (i, &len, p)) { save_u32_func (&p3, 1); tlen += len; p += len; } } if (bufcheck (st, p, 0)) goto retry; save_floppy (&len, p); tlen += len; p += len; if (bufcheck (st, p, 0)) goto retry; save_custom (&len, p, 0); tlen += len; p += len; if (bufcheck (st, p, 0)) goto retry; save_custom_extra (&len, p); tlen += len; p += len; if (bufcheck (st, p, 0)) goto retry; p3 = p; save_u32_func (&p, 0); tlen += 4; if (save_custom_event_delay (&len, p)) { save_u32_func (&p3, 1); tlen += len; p += len; } if (bufcheck (st, p, 0)) goto retry; save_blitter_new (&len, p); tlen += len; p += len; if (bufcheck (st, p, 0)) goto retry; save_custom_agacolors (&len, p); tlen += len; p += len; for (i = 0; i < 8; i++) { if (bufcheck (st, p, 0)) goto retry; save_custom_sprite (i, &len, p); tlen += len; p += len; } for (i = 0; i < 4; i++) { if (bufcheck (st, p, 0)) goto retry; save_audio (i, &len, p); tlen += len; p += len; } if (bufcheck (st, p, len)) goto retry; save_cia (0, &len, p); tlen += len; p += len; if (bufcheck (st, p, len)) goto retry; save_cia (1, &len, p); tlen += len; p += len; if (bufcheck (st, p, len)) goto retry; save_keyboard (&len, p); tlen += len; p += len; if (bufcheck (st, p, len)) goto retry; save_inputstate (&len, p); tlen += len; p += len; #ifdef AUTOCONFIG if (bufcheck (st, p, len)) goto retry; save_expansion (&len, p); tlen += len; p += len; #endif #ifdef PICASSO96 if (bufcheck (st, p, 0)) goto retry; p3 = p; save_u32_func (&p, 0); tlen += 4; if (save_p96 (&len, p)) { save_u32_func (&p3, 1); tlen += len; p += len; } #endif dst = save_cram (&len); if (bufcheck (st, p, len)) goto retry; save_u32_func (&p, len); memcpy (p, dst, len); tlen += len + 4; p += len; dst = save_bram (&len); if (bufcheck (st, p, len)) goto retry; save_u32_func (&p, len); memcpy (p, dst, len); tlen += len + 4; p += len; #ifdef AUTOCONFIG dst = save_fram (&len); if (bufcheck (st, p, len)) goto retry; save_u32_func (&p, len); memcpy (p, dst, len); tlen += len + 4; p += len; dst = save_zram (&len, 0); if (bufcheck (st, p, len)) goto retry; save_u32_func (&p, len); memcpy (p, dst, len); tlen += len + 4; p += len; #endif #ifdef ACTION_REPLAY if (bufcheck (st, p, 0)) goto retry; p3 = p; save_u32_func (&p, 0); tlen += 4; if (save_action_replay (&len, p)) { save_u32_func (&p3, 1); tlen += len; p += len; } if (bufcheck (st, p, 0)) goto retry; p3 = p; save_u32_func (&p, 0); tlen += 4; if (save_hrtmon (&len, p)) { save_u32_func (&p3, 1); tlen += len; p += len; } #endif #ifdef CD32 if (bufcheck (st, p, 0)) goto retry; p3 = p; save_u32_func (&p, 0); tlen += 4; if (save_akiko (&len, p)) { save_u32_func (&p3, 1); tlen += len; p += len; } #endif #ifdef CDTV if (bufcheck (st, p, 0)) goto retry; p3 = p; save_u32_func (&p, 0); tlen += 4; if (save_cdtv (&len, p)) { save_u32_func (&p3, 1); tlen += len; p += len; } if (bufcheck (st, p, 0)) goto retry; p3 = p; save_u32_func (&p, 0); tlen += 4; if (save_dmac (&len, p)) { save_u32_func (&p3, 1); tlen += len; p += len; } #endif if (bufcheck (st, p, 0)) goto retry; p3 = p; save_u32_func (&p, 0); tlen += 4; if (save_gayle (&len, p)) { save_u32_func (&p3, 1); tlen += len; p += len; } for (i = 0; i < 4; i++) { if (bufcheck (st, p, 0)) goto retry; p3 = p; save_u32_func (&p, 0); tlen += 4; if (save_ide (i, &len, p)) { save_u32_func (&p3, 1); tlen += len; p += len; } } save_u32_func (&p, tlen); st->end = p; st->inuse = 1; st->inprecoffset = inprec_getposition (); replaycounter++; if (replaycounter >= staterecords_max) replaycounter -= staterecords_max; if (replaycounter == staterecords_first) { staterecords_first++; if (staterecords_first >= staterecords_max) staterecords_first -= staterecords_max; } write_log (_T("state capture %d (%010d/%03d,%d/%d) (%d bytes, alloc %d)\n"), replaycounter, hsync_counter, vsync_counter, hsync_counter % current_maxvpos (), current_maxvpos (), st->end - st->data, statefile_alloc); if (firstcapture) { savestate_memorysave (); input_record++; for (i = 0; i < 4; i++) { bool wp = true; DISK_validate_filename (&currprefs, currprefs.floppyslots[i].df, false, &wp, NULL, NULL); inprec_recorddiskchange (i, currprefs.floppyslots[i].df, wp); } input_record--; } return; retry: if (retrycnt < 10) goto retry2; write_log (_T("can't save, too small capture buffer or out of memory\n")); return; } void savestate_free (void) { xfree (staterecords); staterecords = NULL; } void savestate_capture_request (void) { savestate_first_capture = -1; } void savestate_init (void) { savestate_free (); replaycounter = 0; staterecords_max = currprefs.statecapturebuffersize; staterecords = xcalloc (struct staterecord*, staterecords_max); statefile_alloc = STATEFILE_ALLOC_SIZE; if (input_record && savestate_state != STATE_DORESTORE) { zfile_fclose (staterecord_statefile); staterecord_statefile = NULL; inprec_close (false); inprec_open (NULL, NULL); savestate_first_capture = 1; } } void statefile_save_recording (const TCHAR *filename) { if (!staterecord_statefile) return; struct zfile *zf = zfile_fopen (filename, _T("wb"), 0); if (zf) { int len = zfile_size (staterecord_statefile); uae_u8 *data = zfile_getdata (staterecord_statefile, 0, len); zfile_fwrite (data, len, 1, zf); xfree (data); zfile_fclose (zf); write_log (_T("input statefile '%s' saved\n"), filename); } } /* My (Toni Wilen ) proposal for Amiga-emulators' state-save format Feel free to comment... This is very similar to IFF-fileformat Every hunk must end to 4 byte boundary, fill with zero bytes if needed version 0.8 HUNK HEADER (beginning of every hunk) hunk name (4 ascii-characters) hunk size (including header) hunk flags bit 0 = chunk contents are compressed with zlib (maybe RAM chunks only?) HEADER "ASF " (AmigaStateFile) statefile version emulator name ("uae", "fellow" etc..) emulator version string (example: "0.8.15") free user writable comment string CPU "CPU " CPU model 4 (68000,68010,68020,68030,68040,68060) CPU typeflags bit 0=EC-model or not, bit 31 = clock rate included D0-D7 8*4=32 A0-A6 7*4=32 PC 4 unused 4 68000 prefetch (IRC) 2 68000 prefetch (IR) 2 USP 4 ISP 4 SR/CCR 2 flags 4 (bit 0=CPU was HALTed) CPU specific registers 68000: SR/CCR is last saved register 68010: save also DFC,SFC and VBR 68020: all 68010 registers and CAAR,CACR and MSP etc.. 68010+: DFC 4 SFC 4 VBR 4 68020+: CAAR 4 CACR 4 MSP 4 68030+: AC0 4 AC1 4 ACUSR 2 TT0 4 TT1 4 68040+: ITT0 4 ITT1 4 DTT0 4 DTT1 4 TCR 4 URP 4 SRP 4 68060: BUSCR 4 PCR 4 All: Clock in KHz 4 (only if bit 31 in flags) 4 (spare, only if bit 31 in flags) FPU (only if used) "FPU " FPU model 4 (68881/68882/68040/68060) FPU typeflags 4 (bit 31 = clock rate included) FP0-FP7 4+4+2 (80 bits) FPCR 4 FPSR 4 FPIAR 4 Clock in KHz 4 (only if bit 31 in flags) 4 (spare, only if bit 31 in flags) MMU (when and if MMU is supported in future..) "MMU " MMU model 4 (68040) flags 4 (none defined yet) CUSTOM CHIPS "CHIP" chipset flags 4 OCS=0,ECSAGNUS=1,ECSDENISE=2,AGA=4 ECSAGNUS and ECSDENISE can be combined DFF000-DFF1FF 352 (0x120 - 0x17f and 0x0a0 - 0xdf excluded) sprite registers (0x120 - 0x17f) saved with SPRx chunks audio registers (0x0a0 - 0xdf) saved with AUDx chunks AGA COLORS "AGAC" AGA color 8 banks * 32 registers * registers LONG (XRGB) = 1024 SPRITE "SPR0" - "SPR7" SPRxPT 4 SPRxPOS 2 SPRxCTL 2 SPRxDATA 2 SPRxDATB 2 AGA sprite DATA/DATB 3 * 2 * 2 sprite "armed" status 1 sprites maybe armed in non-DMA mode use bit 0 only, other bits are reserved AUDIO "AUD0" "AUD1" "AUD2" "AUD3" audio state 1 machine mode AUDxVOL 1 irq? 1 data_written? 1 internal AUDxLEN 2 AUDxLEN 2 internal AUDxPER 2 AUDxPER 2 internal AUDxLC 4 AUDxLC 4 evtime? 4 BLITTER "BLIT" internal blitter state flags 4 bit 0=blitter active bit 1=fill carry bit internal ahold 4 internal bhold 4 internal hsize 2 internal vsize 2 CIA "CIAA" and "CIAB" BFE001-BFEF01 16*1 (CIAA) BFD000-BFDF00 16*1 (CIAB) internal registers IRQ mask (ICR) 1 BYTE timer latches 2 timers * 2 BYTES (LO/HI) latched tod 3 BYTES (LO/MED/HI) alarm 3 BYTES (LO/MED/HI) flags 1 BYTE bit 0=tod latched (read) bit 1=tod stopped (write) div10 counter 1 BYTE FLOPPY DRIVES "DSK0" "DSK1" "DSK2" "DSK3" drive state drive ID-word 4 state 1 (bit 0: motor on, bit 1: drive disabled, bit 2: current id bit) rw-head track 1 dskready 1 id-mode 1 (ID mode bit number 0-31) floppy information bits from 4 beginning of track CRC of disk-image 4 (used during restore to check if image is correct) disk-image null-terminated file name INTERNAL FLOPPY CONTROLLER STATUS "DISK" current DMA word 2 DMA word bit offset 1 WORDSYNC found 1 (no=0,yes=1) hpos of next bit 1 DSKLENGTH status 0=off,1=written once,2=written twice unused 2 RAM SPACE "xRAM" (CRAM = chip, BRAM = bogo, FRAM = fast, ZRAM = Z3, P96 = RTG RAM, A3K1/A3K2 = MB RAM) start address 4 ("bank"=chip/slow/fast etc..) of RAM "bank" RAM "bank" size 4 RAM flags 4 (bit 0 = zlib compressed) RAM "bank" contents ROM SPACE "ROM " ROM start 4 address size of ROM 4 ROM type 4 KICK=0 ROM flags 4 ROM version 2 ROM revision 2 ROM CRC 4 see below ROM-image ID-string null terminated, see below path to rom image ROM contents (Not mandatory, use hunk size to check if this hunk contains ROM data or not) Kickstart ROM: ID-string is "Kickstart x.x" ROM version: version in high word and revision in low word Kickstart ROM version and revision can be found from ROM start + 12 (version) and +14 (revision) ROM version and CRC is only meant for emulator to automatically find correct image from its ROM-directory during state restore. Usually saving ROM contents is not good idea. ACTION REPLAY "ACTR" Model (1,2,3) 4 path to rom image RAM space (depends on model) ROM CRC 4 "CDx " Flags 4 (bit 0 = scsi, bit 1 = ide, bit 2 = image) Path (for example image file or drive letter) END hunk "END " ends, remember hunk size 8! EMULATOR SPECIFIC HUNKS Read only if "emulator name" in header is same as used emulator. Maybe useful for configuration? misc: - save only at position 0,0 before triggering VBLANK interrupt - all data must be saved in bigendian format - should we strip all paths from image file names? */ fs-uae-2.2.3+dfsg/src/gfxlib.cpp0000644000175000017500000013644412162366655016637 0ustar glaubitzglaubitz /* * UAE - The Un*x Amiga Emulator * * graphics.library emulation * * Copyright 1996, 1997 Bernd Schmidt * * Ideas for this: * Rewrite layers completely. When there are lots of windows on the screen * it can take 3 minutes to update everything after resizing or moving one * (at least with Kick 1.3). Hide the internal structure of the layers as far * as possible, keep most of the data in emulator space so we save copying/ * conversion time. Programs really shouldn't do anything directly with the * Layer or ClipRect structures. * This means that a lot of graphics.library functions will have to be * rewritten as well. * Once that's done, add support for non-planar bitmaps. Conveniently, the * struct Bitmap has an unused pad field which we could abuse as some sort of * type field. Need to add chunky<->planar conversion routines to get it * going, plus variants of all the drawing functions for speed reasons. * * When it becomes necessary to convert a structure from Amiga memory, make * a function with a name ending in ..FA, which takes a pointer to the * native structure and a uaecptr and returns the native pointer. */ #include "sysconfig.h" #include "sysdeps.h" #include #include "options.h" #include "threaddep/thread.h" #include "uae/memory.h" #include "custom.h" #include "newcpu.h" #include "xwin.h" #include "autoconf.h" #include "osemu.h" #ifdef USE_EXECLIB /* Uniq list management. Should be in a separate file. */ struct uniq_head { struct uniq_head *next; uae_u32 uniq; }; typedef struct { struct uniq_head *head; uae_u32 uniq; } uniq_list; #define UNIQ_INIT { NULL, 1 } static void init_uniq(uniq_list *list) { list->head = NULL; list->uniq = 1; } static struct uniq_head *find_uniq (uniq_list *a, uae_u32 uniq) { struct uniq_head *b = a->head; while (b && b->uniq != uniq) b = b->next; if (!b) write_log (_T("Couldn't find structure. Bad\n")); return b; } static struct uniq_head *find_and_rem_uniq (uniq_list *a, uae_u32 uniq) { struct uniq_head **b = &a->head, *c; while (*b && (*b)->uniq != uniq) b = &(*b)->next; c = *b; if (!c) write_log (_T("Couldn't find structure. Bad\n")); else *b = c->next; return c; } static void add_uniq (uniq_list *a, struct uniq_head *item, uaecptr amem) { item->uniq = a->uniq++; put_long (amem, item->uniq); if (a->uniq == 0) a->uniq++; item->next = a->head; a->head = item; } /* Graphics stuff begins here */ #define CLIPRECT_SIZE 40 #define LAYER_SIZE 160 #define LINFO_SIZE 102 static uaecptr gfxbase, layersbase; static void do_LockLayer(uaecptr layer) { #if 0 /* Later.. */ uaecptr sigsem = layer + 72; m68k_areg (regs, 0) = sigsem; CallLib (get_long (4), -564); #else m68k_areg (regs, 1) = layer; CallLib (layersbase, -96); #endif } static void do_UnlockLayer(uaecptr layer) { m68k_areg (regs, 0) = layer; CallLib (layersbase, -102); } static uae_u32 gfxlibname, layerslibname; struct Rectangle { int MinX, MinY, MaxX, MaxY; }; static int GFX_PointInRectangle(uaecptr rect, int x, int y) { uae_s16 minx = get_word (rect); uae_s16 miny = get_word (rect+2); uae_s16 maxx = get_word (rect+4); uae_s16 maxy = get_word (rect+6); if (x < minx || x > maxx || y < miny || y > maxy) return 0; return 1; } static int GFX_RectContainsRect(struct Rectangle *r1, struct Rectangle *r2) { return (r2->MinX >= r1->MinX && r2->MaxX <= r1->MaxX && r2->MinY >= r1->MinY && r2->MaxY <= r1->MaxY); } static struct Rectangle *GFX_RectFA(struct Rectangle *rp, uaecptr rect) { rp->MinX = (uae_s16)get_word (rect); rp->MinY = (uae_s16)get_word (rect+2); rp->MaxX = (uae_s16)get_word (rect+4); rp->MaxY = (uae_s16)get_word (rect+6); return rp; } static int GFX_Bitmap_WritePixel(uaecptr bitmap, int x, int y, uaecptr rp) { int i, offs; unsigned int bpr = get_word (bitmap); unsigned int rows = get_word (bitmap + 2); uae_u16 mask; uae_u8 planemask = get_byte (rp + 24); uae_u8 fgpen = get_byte (rp + 25); uae_u8 bgpen = get_byte (rp + 26); uae_u8 drmd = get_byte (rp + 28); uae_u8 pen = drmd & 4 ? bgpen : fgpen; if (x < 0 || y < 0 || x >= 8*bpr || y >= rows) return -1; offs = y*bpr + (x & ~15)/8; for (i = 0; i < get_byte (bitmap + 5); i++) { uaecptr planeptr; uae_u16 data; if ((planemask & (1 << i)) == 0) continue; planeptr = get_long (bitmap + 8 + i*4); data = get_word (planeptr + offs); mask = 0x8000 >> (x & 15); if (drmd & 2) { if ((pen & (1 << i)) != 0) data ^=mask; } else { data &= ~mask; if ((pen & (1 << i)) != 0) data |= mask; } put_word (planeptr + offs, data); } return 0; } int GFX_WritePixel(uaecptr rp, int x, int y) { int v; uaecptr layer = get_long (rp); uaecptr bitmap = get_long (rp + 4); uaecptr cliprect; int x2, y2; if (bitmap == 0) { write_log (_T("bogus RastPort in WritePixel\n")); return -1; } /* Easy case first */ if (layer == 0) { return GFX_Bitmap_WritePixel(bitmap, x, y, rp); } do_LockLayer(layer); /* * Now, in theory we ought to obtain the semaphore. * Since we don't, the programs will happily write into the raster * even though we are currently moving the window around. * Not good. */ x2 = x + (uae_s16)get_word (layer + 16); y2 = y + (uae_s16)get_word (layer + 18); if (!GFX_PointInRectangle (layer + 16, x2, y2)) { do_UnlockLayer(layer); return -1; } /* Find the right ClipRect */ cliprect = get_long (layer + 8); while (cliprect != 0 && !GFX_PointInRectangle (cliprect + 16, x2, y2)) cliprect = get_long (cliprect); if (cliprect == 0) { /* Don't complain: The "Dots" demo does this all the time. I * suppose if we can't find a ClipRect, we aren't supposed to draw * the dot. */ /*write_log (_T("Weirdness in WritePixel\n"));*/ v = -1; } else if (get_long (cliprect + 8) == 0) { v = GFX_Bitmap_WritePixel(bitmap, x2, y2, rp); } else if (get_long (cliprect + 12) == 0) { /* I don't really know what to do here... */ v = 0; } else { /* This appears to be normal for smart refresh layers which are obscured */ v = GFX_Bitmap_WritePixel (get_long (cliprect + 12), x2 - (uae_s16)get_word (cliprect + 16), y2 - (uae_s16)get_word (cliprect + 18), rp); } do_UnlockLayer(layer); return v; } static uae_u32 gfxl_WritePixel(void) { return GFX_WritePixel(m68k_areg (regs, 1), (uae_s16)m68k_dreg (regs, 0), (uae_s16)m68k_dreg (regs, 1)); } static uae_u32 gfxl_BltClear(void) { uaecptr mem=m68k_areg (regs, 1); uae_u8 *mptr = chipmem_bank.xlateaddr(m68k_areg (regs, 1)); uae_u32 count=m68k_dreg (regs, 0); uae_u32 flags=m68k_dreg (regs, 1); unsigned int i; uae_u32 pattern; if ((flags & 2) == 2){ /* count is given in Rows / Bytes per row */ count=(count & 0xFFFF) * (count >> 16); } if ((mem & 1) != 0 || (count & 1) != 0) write_log (_T("gfx: BltClear called with odd parameters\n")); /* Bit 2 set means use pattern (V36+ only, but we might as well emulate * it always) */ if ((flags & 4) == 0) pattern = 0; else pattern= ((flags >> 16) & 0xFFFF) | (flags & 0xFFFF0000ul); if ((pattern & 0xFF) == ((pattern >> 8) & 0xFF)) { memset(mptr, pattern, count); return 0; } for(i = 0; i < count; i += 4) chipmem_bank.lput(mem+i, pattern); if ((count & 3) != 0) chipmem_bank.wput(mem + i - 4, pattern); return 0; } static uae_u32 gfxl_BltBitmap(void) { uaecptr srcbitmap = m68k_areg (regs, 0), dstbitmap = m68k_areg (regs, 1); int srcx = (uae_s16)m68k_dreg (regs, 0), srcy = (uae_s16)m68k_dreg (regs, 1); int dstx = (uae_s16)m68k_dreg (regs, 2), dsty = (uae_s16)m68k_dreg (regs, 3); int sizex = (uae_s16)m68k_dreg (regs, 4), sizey = (uae_s16)m68k_dreg (regs, 5); uae_u8 minterm = (uae_u8)m68k_dreg (regs, 6), mask = m68k_dreg (regs, 7); return 0; /* sam: a return was missing here ! */ } static uaecptr amiga_malloc(int len) { m68k_dreg (regs, 0) = len; m68k_dreg (regs, 1) = 1; /* MEMF_PUBLIC */ return CallLib (get_long (4), -198); /* AllocMem */ } static void amiga_free(uaecptr addr, int len) { m68k_areg (regs, 1) = addr; m68k_dreg (regs, 0) = len; CallLib (get_long (4), -210); /* FreeMem */ } /* * Region handling code * * General ideas stolen from xc/verylongpath/miregion.c * * The Clear code is untested. And and Or seem to work, Xor is only used * by the 1.3 Prefs program and seems to work, too. */ struct RegionRectangle { struct RegionRectangle *Next,*Prev; struct Rectangle bounds; }; struct Region { struct Rectangle bounds; struct RegionRectangle *RegionRectangle; }; struct RectList { int count; int space; struct Rectangle bounds; struct Rectangle *rects; }; struct BandList { int count; int space; int *miny, *maxy; }; static void init_bandlist(struct BandList *bl) { bl->count = 0; bl->space = 20; bl->miny = (int *)malloc(20*sizeof(int)); bl->maxy = (int *)malloc(20*sizeof(int)); } static void dup_bandlist(struct BandList *to, struct BandList *from) { to->count = from->count; to->space = to->count+4; to->miny = (int *)malloc (to->space*sizeof(int)); to->maxy = (int *)malloc (to->space*sizeof(int)); memcpy(to->miny, from->miny, to->count*sizeof(int)); memcpy(to->maxy, from->maxy, to->count*sizeof(int)); } STATIC_INLINE void add_band(struct BandList *bl, int miny, int maxy, int pos) { if (bl->count == bl->space) { bl->space += 20; bl->miny = (int *)realloc(bl->miny, bl->space*sizeof(int)); bl->maxy = (int *)realloc(bl->maxy, bl->space*sizeof(int)); } memmove(bl->miny + pos + 1, bl->miny + pos, (bl->count - pos) * sizeof(int)); memmove(bl->maxy + pos + 1, bl->maxy + pos, (bl->count - pos) * sizeof(int)); bl->count++; bl->miny[pos] = miny; bl->maxy[pos] = maxy; } static void init_rectlist(struct RectList *rl) { rl->count = 0; rl->space = 100; rl->bounds.MinX = rl->bounds.MinY = rl->bounds.MaxX = rl->bounds.MaxY = 0; rl->rects = (struct Rectangle *)malloc(100*sizeof(struct Rectangle)); } static void dup_rectlist(struct RectList *to, struct RectList *from) { to->count = from->count; to->space = to->count+4; to->bounds = from->bounds; to->rects = (struct Rectangle *)malloc (to->space*sizeof(struct Rectangle)); memcpy(to->rects, from->rects, to->count*sizeof(struct Rectangle)); } STATIC_INLINE void add_rect(struct RectList *rl, struct Rectangle r) { if (rl->count == 0) rl->bounds = r; else { if (r.MinX < rl->bounds.MinX) rl->bounds.MinX = r.MinX; if (r.MinY < rl->bounds.MinY) rl->bounds.MinY = r.MinY; if (r.MaxX > rl->bounds.MaxX) rl->bounds.MaxX = r.MaxX; if (r.MaxY > rl->bounds.MaxY) rl->bounds.MaxY = r.MaxY; } if (rl->count == rl->space) { rl->space += 100; rl->rects = (struct Rectangle *)realloc(rl->rects, rl->space*sizeof(struct Rectangle)); } rl->rects[rl->count++] = r; } STATIC_INLINE void rem_rect(struct RectList *rl, int num) { rl->count--; if (num == rl->count) return; rl->rects[num] = rl->rects[rl->count]; } static void free_rectlist(struct RectList *rl) { free(rl->rects); } static void free_bandlist(struct BandList *bl) { free(bl->miny); free(bl->maxy); } static int regionrect_cmpfn(const void *a, const void *b) { struct Rectangle *ra = (struct Rectangle *)a; struct Rectangle *rb = (struct Rectangle *)b; if (ra->MinY < rb->MinY) return -1; if (ra->MinY > rb->MinY) return 1; if (ra->MinX < rb->MinX) return -1; if (ra->MinX > rb->MinX) return 1; if (ra->MaxX < rb->MaxX) return -1; return 1; } STATIC_INLINE int min(int x, int y) { return x < y ? x : y; } STATIC_INLINE int max(int x, int y) { return x > y ? x : y; } static void add_rect_to_bands(struct BandList *bl, struct Rectangle *rect) { int j; struct Rectangle tmpr = *rect; for (j = 0; j < bl->count; j++) { /* Is the current band before the rectangle? */ if (bl->maxy[j] < tmpr.MinY) continue; /* Band already present? */ if (bl->miny[j] == tmpr.MinY && bl->maxy[j] == tmpr.MaxY) break; /* Completely new band? Add it */ if (bl->miny[j] > tmpr.MaxY) { add_band(bl, tmpr.MinY, tmpr.MaxY, j); break; } /* Now we know that the bands are overlapping. * See whether they match in one point */ if (bl->miny[j] == tmpr.MinY) { int t; if (bl->maxy[j] < tmpr.MaxY) { /* Rectangle exceeds band */ tmpr.MinY = bl->maxy[j]+1; continue; } /* Rectangle splits band */ t = bl->maxy[j]; bl->maxy[j] = tmpr.MaxY; tmpr.MinY = bl->maxy[j] + 1; tmpr.MaxY = t; continue; } else if (bl->maxy[j] == tmpr.MaxY) { int t; if (bl->miny[j] > tmpr.MinY) { /* Rectangle exceeds band */ t = bl->miny[j]; bl->miny[j] = tmpr.MinY; bl->maxy[j] = t-1; tmpr.MinY = t; continue; } /* Rectangle splits band */ bl->maxy[j] = tmpr.MinY - 1; continue; } /* Bands overlap and match in no points. Get a new band and align */ if (bl->miny[j] > tmpr.MinY) { /* Rectangle begins before band, so make a new band before * and adjust rectangle */ add_band(bl, tmpr.MinY, bl->miny[j] - 1, j); tmpr.MinY = bl->miny[j+1]; } else { /* Rectangle begins in band */ add_band(bl, bl->miny[j], tmpr.MinY - 1, j); bl->miny[j+1] = tmpr.MinY; } continue; } if (j == bl->count) add_band(bl, tmpr.MinY, tmpr.MaxY, j); } static void region_addbands(struct RectList *rl, struct BandList *bl) { int i,j; for (i = 0; i < rl->count; i++) { add_rect_to_bands(bl, rl->rects + i); } } static void merge_bands(struct BandList *dest, struct BandList *src) { int i; for (i = 0; i < src->count; i++) { struct Rectangle tmp; tmp.MinY = src->miny[i]; tmp.MaxY = src->maxy[i]; add_rect_to_bands(dest, &tmp); } } static void region_splitrects_band(struct RectList *rl, struct BandList *bl) { int i,j; for (i = 0; i < rl->count; i++) { for (j = 0; j < bl->count; j++) { if (bl->miny[j] == rl->rects[i].MinY && bl->maxy[j] == rl->rects[i].MaxY) break; if (rl->rects[i].MinY > bl->maxy[j]) continue; if (bl->miny[j] == rl->rects[i].MinY) { struct Rectangle tmpr; tmpr.MinX = rl->rects[i].MinX; tmpr.MaxX = rl->rects[i].MaxX; tmpr.MinY = bl->maxy[j] + 1; tmpr.MaxY = rl->rects[i].MaxY; add_rect(rl, tmpr); /* will be processed later */ rl->rects[i].MaxY = bl->maxy[j]; break; } write_log (_T("Foo..\n")); } } qsort(rl->rects, rl->count, sizeof (struct Rectangle), regionrect_cmpfn); } static void region_coalesce_rects(struct RectList *rl, int do_2nd_pass) { int i,j; /* First pass: Coalesce horizontally */ for (i = j = 0; i < rl->count;) { int offs = 1; while (i + offs < rl->count) { if (rl->rects[i].MinY != rl->rects[i+offs].MinY || rl->rects[i].MaxY != rl->rects[i+offs].MaxY || rl->rects[i].MaxX+1 < rl->rects[i+offs].MinX) break; rl->rects[i].MaxX = rl->rects[i+offs].MaxX; offs++; } rl->rects[j++] = rl->rects[i]; i += offs; } rl->count = j; if (!do_2nd_pass) return; /* Second pass: Coalesce bands */ for (i = 0; i < rl->count;) { int match = 0; for (j = i + 1; j < rl->count; j++) if (rl->rects[i].MinY != rl->rects[j].MinY) break; if (j < rl->count && rl->rects[i].MaxY + 1 == rl->rects[j].MinY) { int k; match = 1; for (k = 0; i+k < j; k++) { if (j+k >= rl->count || rl->rects[j+k].MinY != rl->rects[j].MinY) { match = 0; break; } if (rl->rects[i+k].MinX != rl->rects[j+k].MinX || rl->rects[i+k].MaxX != rl->rects[j+k].MaxX) { match = 0; break; } } if (j+k < rl->count && rl->rects[j+k].MinY == rl->rects[j].MinY) match = 0; if (match) { for (k = 0; i+k < j; k++) rl->rects[i+k].MaxY = rl->rects[j].MaxY; memmove(rl->rects + j, rl->rects + j + k, (rl->count - j - k)*sizeof(struct Rectangle)); rl->count -= k; } } if (!match) i = j; } } static int copy_rects (uaecptr region, struct RectList *rl) { uaecptr regionrect; int numrects = 0; struct Rectangle b; regionrect = get_long (region+8); b.MinX = get_word (region); b.MinY = get_word (region+2); b.MaxX = get_word (region+4); b.MaxY = get_word (region+6); while (regionrect != 0) { struct Rectangle tmpr; tmpr.MinX = (uae_s16)get_word (regionrect+8) + b.MinX; tmpr.MinY = (uae_s16)get_word (regionrect+10) + b.MinY; tmpr.MaxX = (uae_s16)get_word (regionrect+12) + b.MinX; tmpr.MaxY = (uae_s16)get_word (regionrect+14) + b.MinY; add_rect(rl, tmpr); regionrect = get_long (regionrect); numrects++; } return numrects; } static int rect_in_region(struct RectList *rl, struct Rectangle *r) { int i; int miny = r->MinY; for (i = 0; i < rl->count; i++) { int j; if (rl->rects[i].MaxY < miny) continue; if (rl->rects[i].MinY > miny) break; if (rl->rects[i].MaxX < r->MinX) continue; if (rl->rects[i].MinX > r->MaxX) break; /* Overlap! */ j = i; for (;;) { if (rl->rects[j].MaxX > r->MaxX) { miny = rl->rects[i].MaxY + 1; break; } j++; if (j == rl->count) break; if (rl->rects[j].MinX != rl->rects[j-1].MaxX+1) break; if (rl->rects[i].MinY != rl->rects[j].MinY) break; } if (miny <= rl->rects[i].MaxY) break; } return 0; } typedef void (*regionop)(struct RectList *,struct RectList *,struct RectList *); static void region_do_ClearRegionRegion(struct RectList *rl1,struct RectList *rl2, struct RectList *rl3) { int i,j; for (i = j = 0; i < rl2->count && j < rl1->count;) { struct Rectangle tmpr; while ((rl1->rects[j].MinY < rl2->rects[i].MinY || (rl1->rects[j].MinY == rl2->rects[i].MinY && rl1->rects[j].MaxX < rl2->rects[i].MinX)) && j < rl1->count) j++; if (j >= rl1->count) break; while ((rl1->rects[j].MinY > rl2->rects[i].MinY || (rl1->rects[j].MinY == rl2->rects[i].MinY && rl1->rects[j].MinX > rl2->rects[i].MaxX)) && i < rl2->count) { add_rect(rl3, rl2->rects[i]); i++; } if (i >= rl2->count) break; tmpr = rl2->rects[i]; while (i < rl2->count && j < rl1->count && rl1->rects[j].MinY == tmpr.MinY && rl2->rects[i].MinY == tmpr.MinY && rl1->rects[j].MinX <= rl2->rects[i].MaxX && rl1->rects[j].MaxX >= rl2->rects[i].MinX) { int oldmin = tmpr.MinX; int oldmax = tmpr.MaxX; if (tmpr.MinX < rl1->rects[j].MinX) { tmpr.MaxX = rl1->rects[j].MinX - 1; add_rect(rl3, tmpr); } if (oldmax <= rl1->rects[j].MaxX) { i++; if (i < rl2->count && rl2->rects[i].MinY == tmpr.MinY) tmpr = rl2->rects[i]; } else { tmpr.MinX = rl1->rects[j].MaxX + 1; tmpr.MaxX = oldmax; j++; } } } for(; i < rl2->count; i++) add_rect(rl3, rl2->rects[i]); } static void region_do_AndRegionRegion(struct RectList *rl1,struct RectList *rl2, struct RectList *rl3) { int i,j; for (i = j = 0; i < rl2->count && j < rl1->count;) { while ((rl1->rects[j].MinY < rl2->rects[i].MinY || (rl1->rects[j].MinY == rl2->rects[i].MinY && rl1->rects[j].MaxX < rl2->rects[i].MinX)) && j < rl1->count) j++; if (j >= rl1->count) break; while ((rl1->rects[j].MinY > rl2->rects[i].MinY || (rl1->rects[j].MinY == rl2->rects[i].MinY && rl1->rects[j].MinX > rl2->rects[i].MaxX)) && i < rl2->count) i++; if (i >= rl2->count) break; if (rl1->rects[j].MinY == rl2->rects[i].MinY && rl1->rects[j].MinX <= rl2->rects[i].MaxX && rl1->rects[j].MaxX >= rl2->rects[i].MinX) { /* We have an intersection! */ struct Rectangle tmpr; tmpr = rl2->rects[i]; if (tmpr.MinX < rl1->rects[j].MinX) tmpr.MinX = rl1->rects[j].MinX; if (tmpr.MaxX > rl1->rects[j].MaxX) tmpr.MaxX = rl1->rects[j].MaxX; add_rect(rl3, tmpr); if (rl1->rects[j].MaxX == rl2->rects[i].MaxX) i++, j++; else if (rl1->rects[j].MaxX > rl2->rects[i].MaxX) i++; else j++; } } } static void region_do_OrRegionRegion(struct RectList *rl1,struct RectList *rl2, struct RectList *rl3) { int i,j; for (i = j = 0; i < rl2->count && j < rl1->count;) { while ((rl1->rects[j].MinY < rl2->rects[i].MinY || (rl1->rects[j].MinY == rl2->rects[i].MinY && rl1->rects[j].MaxX < rl2->rects[i].MinX)) && j < rl1->count) { add_rect(rl3, rl1->rects[j]); j++; } if (j >= rl1->count) break; while ((rl1->rects[j].MinY > rl2->rects[i].MinY || (rl1->rects[j].MinY == rl2->rects[i].MinY && rl1->rects[j].MinX > rl2->rects[i].MaxX)) && i < rl2->count) { add_rect(rl3, rl2->rects[i]); i++; } if (i >= rl2->count) break; if (rl1->rects[j].MinY == rl2->rects[i].MinY && rl1->rects[j].MinX <= rl2->rects[i].MaxX && rl1->rects[j].MaxX >= rl2->rects[i].MinX) { /* We have an intersection! */ struct Rectangle tmpr; tmpr = rl2->rects[i]; if (tmpr.MinX > rl1->rects[j].MinX) tmpr.MinX = rl1->rects[j].MinX; if (tmpr.MaxX < rl1->rects[j].MaxX) tmpr.MaxX = rl1->rects[j].MaxX; i++; j++; for (;;) { int cont = 0; if (j < rl1->count && rl1->rects[j].MinY == tmpr.MinY && tmpr.MaxX+1 >= rl1->rects[j].MinX) { if (tmpr.MaxX < rl1->rects[j].MaxX) tmpr.MaxX = rl1->rects[j].MaxX; j++; cont = 1; } if (i < rl2->count && rl2->rects[i].MinY == tmpr.MinY && tmpr.MaxX+1 >= rl2->rects[i].MinX) { if (tmpr.MaxX < rl2->rects[i].MaxX) tmpr.MaxX = rl2->rects[i].MaxX; i++; cont = 1; } if (!cont) break; } add_rect(rl3, tmpr); } } for(; i < rl2->count; i++) add_rect(rl3, rl2->rects[i]); for(; j < rl1->count; j++) add_rect(rl3, rl1->rects[j]); } static void region_do_XorRegionRegion(struct RectList *rl1,struct RectList *rl2, struct RectList *rl3) { int i,j; for (i = j = 0; i < rl2->count && j < rl1->count;) { struct Rectangle tmpr1, tmpr2; while ((rl1->rects[j].MinY < rl2->rects[i].MinY || (rl1->rects[j].MinY == rl2->rects[i].MinY && rl1->rects[j].MaxX < rl2->rects[i].MinX)) && j < rl1->count) { add_rect(rl3, rl1->rects[j]); j++; } if (j >= rl1->count) break; while ((rl1->rects[j].MinY > rl2->rects[i].MinY || (rl1->rects[j].MinY == rl2->rects[i].MinY && rl1->rects[j].MinX > rl2->rects[i].MaxX)) && i < rl2->count) { add_rect(rl3, rl2->rects[i]); i++; } if (i >= rl2->count) break; tmpr2 = rl2->rects[i]; tmpr1 = rl1->rects[j]; while (i < rl2->count && j < rl1->count && rl1->rects[j].MinY == tmpr1.MinY && rl2->rects[i].MinY == tmpr1.MinY && rl1->rects[j].MinX <= rl2->rects[i].MaxX && rl1->rects[j].MaxX >= rl2->rects[i].MinX) { int oldmin2 = tmpr2.MinX; int oldmax2 = tmpr2.MaxX; int oldmin1 = tmpr1.MinX; int oldmax1 = tmpr1.MaxX; int need_1 = 0, need_2 = 0; if (tmpr2.MinX > tmpr1.MinX && tmpr2.MaxX < tmpr1.MaxX) { /* * ########### * **** */ tmpr1.MaxX = tmpr2.MinX - 1; add_rect(rl3, tmpr1); tmpr1.MaxX = oldmax1; tmpr1.MinX = tmpr2.MaxX + 1; add_rect(rl3, tmpr1); need_2 = 1; } else if (tmpr2.MinX > tmpr1.MinX && tmpr2.MaxX > tmpr1.MaxX) { /* * ########## * ********* */ tmpr1.MaxX = tmpr2.MinX - 1; add_rect(rl3, tmpr1); tmpr2.MinX = oldmax1 + 1; add_rect(rl3, tmpr2); need_1 = 1; } else if (tmpr2.MinX < tmpr1.MinX && tmpr2.MaxX < tmpr1.MaxX) { /* * ########## * ********* */ tmpr2.MaxX = tmpr1.MinX - 1; add_rect(rl3, tmpr2); tmpr1.MinX = oldmax2 + 1; add_rect(rl3, tmpr1); need_2 = 1; } else if (tmpr2.MinX < tmpr1.MinX && tmpr2.MaxX > tmpr1.MaxX) { /* * ### * ********* */ tmpr2.MaxX = tmpr1.MinX - 1; add_rect(rl3, tmpr2); tmpr2.MaxX = oldmax2; tmpr2.MinX = tmpr1.MaxX + 1; add_rect(rl3, tmpr2); need_1 = 1; } else if (tmpr1.MinX == tmpr2.MinX && tmpr2.MaxX < tmpr1.MaxX) { /* * ############# * ********* */ tmpr1.MinX = tmpr2.MaxX + 1; need_2 = 1; } else if (tmpr1.MinX == tmpr2.MinX && tmpr2.MaxX > tmpr1.MaxX) { /* * ######### * ************* */ tmpr2.MinX = tmpr1.MaxX + 1; need_1 = 1; } else if (tmpr1.MinX < tmpr2.MinX && tmpr2.MaxX == tmpr1.MaxX) { /* * ############# * ********* */ tmpr1.MaxX = tmpr2.MinX - 1; add_rect(rl3, tmpr1); need_2 = need_1 = 1; } else if (tmpr1.MinX > tmpr2.MinX && tmpr2.MaxX == tmpr1.MaxX) { /* * ######### * ************* */ tmpr2.MaxX = tmpr1.MinX - 1; add_rect(rl3, tmpr2); need_2 = need_1 = 1; } else { assert(tmpr1.MinX == tmpr2.MinX && tmpr2.MaxX == tmpr1.MaxX); need_1 = need_2 = 1; } if (need_1) { j++; if (j < rl1->count && rl1->rects[j].MinY == tmpr1.MinY) tmpr1 = rl1->rects[j]; } if (need_2) { i++; if (i < rl2->count && rl2->rects[i].MinY == tmpr2.MinY) tmpr2 = rl2->rects[i]; } } } for(; i < rl2->count; i++) add_rect(rl3, rl2->rects[i]); for(; j < rl1->count; j++) add_rect(rl3, rl1->rects[j]); } static uae_u32 gfxl_perform_regionop(regionop op, int with_rect) { int i,j,k; uaecptr reg1; uaecptr reg2; uaecptr tmp, rpp; struct RectList rl1, rl2, rl3; struct BandList bl; int retval = 0; int numrects2; init_rectlist(&rl1); init_rectlist(&rl2); init_rectlist(&rl3); if (with_rect) { struct Rectangle tmpr; reg2 = m68k_areg (regs, 0); numrects2 = copy_rects(reg2, &rl2); tmpr.MinX = get_word (m68k_areg (regs, 1)); tmpr.MinY = get_word (m68k_areg (regs, 1) + 2); tmpr.MaxX = get_word (m68k_areg (regs, 1) + 4); tmpr.MaxY = get_word (m68k_areg (regs, 1) + 6); add_rect(&rl1, tmpr); } else { reg1 = m68k_areg (regs, 0); reg2 = m68k_areg (regs, 1); copy_rects(reg1, &rl1); numrects2 = copy_rects(reg2, &rl2); } init_bandlist(&bl); region_addbands(&rl1, &bl); region_addbands(&rl2, &bl); region_splitrects_band(&rl1, &bl); region_splitrects_band(&rl2, &bl); region_coalesce_rects(&rl1, 0); region_coalesce_rects(&rl2, 0); (*op)(&rl1, &rl2, &rl3); region_coalesce_rects(&rl3, 1); rpp = reg2 + 8; if (rl3.count < numrects2) { while (numrects2-- != rl3.count) { tmp = get_long (rpp); put_long (rpp, get_long (tmp)); amiga_free(tmp, 16); } if (rl3.count > 0) put_long (get_long (rpp) + 4, rpp); } else if (rl3.count > numrects2) { while(numrects2++ != rl3.count) { uaecptr prev = get_long (rpp); tmp = amiga_malloc(16); if (tmp == 0) goto done; put_long (tmp, prev); put_long (tmp + 4, rpp); if (prev != 0) put_long (prev + 4, tmp); put_long (rpp, tmp); } } if (rl3.count > 0) { rpp = reg2 + 8; for (i = 0; i < rl3.count; i++) { uaecptr rr = get_long (rpp); put_word (rr+8, rl3.rects[i].MinX - rl3.bounds.MinX); put_word (rr+10, rl3.rects[i].MinY - rl3.bounds.MinY); put_word (rr+12, rl3.rects[i].MaxX - rl3.bounds.MinX); put_word (rr+14, rl3.rects[i].MaxY - rl3.bounds.MinY); rpp = rr; } if (get_long (rpp) != 0) write_log (_T("BUG\n")); } put_word (reg2+0, rl3.bounds.MinX); put_word (reg2+2, rl3.bounds.MinY); put_word (reg2+4, rl3.bounds.MaxX); put_word (reg2+6, rl3.bounds.MaxY); retval = 1; done: free_rectlist(&rl1); free_rectlist(&rl2); free_rectlist(&rl3); free_bandlist(&bl); return retval; } static uae_u32 gfxl_AndRegionRegion(void) { return gfxl_perform_regionop(region_do_AndRegionRegion, 0); } static uae_u32 gfxl_XorRegionRegion(void) { return gfxl_perform_regionop(region_do_XorRegionRegion, 0); } static uae_u32 gfxl_OrRegionRegion(void) { return gfxl_perform_regionop(region_do_OrRegionRegion, 0); } static uae_u32 gfxl_ClearRectRegion(void) { return gfxl_perform_regionop(region_do_ClearRegionRegion, 1); } static uae_u32 gfxl_OrRectRegion(void) { return gfxl_perform_regionop(region_do_OrRegionRegion, 1); } static uae_u32 gfxl_AndRectRegion(void) { return gfxl_perform_regionop(region_do_AndRegionRegion, 1); } static uae_u32 gfxl_XorRectRegion(void) { return gfxl_perform_regionop(region_do_XorRegionRegion, 1); } /* Layers code */ static uae_u32 LY_TryLockLayer(uaecptr layer) { uaecptr sigsem = layer + 72; m68k_areg (regs, 0) = sigsem; return CallLib (get_long (4), -576); } static void LY_LockLayer(uaecptr layer) { uaecptr sigsem = layer + 72; m68k_areg (regs, 0) = sigsem; CallLib (get_long (4), -564); } static void LY_UnlockLayer(uaecptr layer) { uaecptr sigsem = layer + 72; m68k_areg (regs, 0) = sigsem; CallLib (get_long (4), -570); } static void LY_LockLayerInfo(uaecptr li) { uaecptr sigsem = li + 24; m68k_areg (regs, 0) = sigsem; CallLib (get_long (4), -564); put_byte (li+91, get_byte (li+91)+1); } static void LY_UnlockLayerInfo(uaecptr li) { uaecptr sigsem = li + 24; put_byte (li+91, get_byte (li+91)-1); m68k_areg (regs, 0) = sigsem; CallLib (get_long (4), -570); } static void LY_LockLayers(uaecptr li) { uaecptr l = get_long (li); LY_LockLayerInfo(li); while (l != 0) { LY_LockLayer(l); l = get_long (l); } LY_UnlockLayerInfo(li); } static void LY_UnlockLayers(uaecptr li) { uaecptr l = get_long (li); LY_LockLayerInfo(li); while (l != 0) { LY_UnlockLayer(l); l = get_long (l); } LY_UnlockLayerInfo(li); } #define LAYER_CLUELESS 0x8000 /* Indicates we know nothing about the layer's regions. */ #define LAYER_CR_CHANGED 0x4000 /* Indicates that the cliprects in Amiga memory need to be re-done */ #define LAYER_REDO 0x2000 /* Indicates that we have regions, but they are bogus. */ static uae_u32 layer_uniq = 1; struct MyLayerInfo { struct uniq_head head; uaecptr amigaos_linfo; uniq_list layer_list; }; struct MyLayer { struct uniq_head head; uaecptr amigaos_layer, rastport; struct Rectangle bounds; struct RectList clipregion; struct RectList obscured; struct RectList visible; struct BandList big_bands; /* created by obscuring layers */ struct BandList small_bands; /* big_bands + those from clipregion */ struct RectList damage; struct BandList damage_bands; struct MyLayerInfo *mli; }; static uniq_list MyLayerInfo_list = UNIQ_INIT; static void LY_InitLayers(uaecptr li) { memset (get_real_address (li), 0, 92); put_long (li + 0, 0); /* top layer */ put_long (li+84, 0); /* uniq: */ m68k_areg (regs, 0) = li + 24; CallLib (get_long (4), -558); /* InitSemaphore() */ put_word (li+88, 0); /* flags (???) */ put_byte (li+89, 0); /* fatten_count */ /* @@@ How big can I assume the structure? What's all this 1.0/1.1 cruft? */ } static void LY_FattenLayerInfo(uaecptr li) { struct MyLayerInfo *mli; int fatten_count = get_byte (li + 89); if (fatten_count == 0) { mli = (struct MyLayerInfo *)malloc(sizeof(struct MyLayerInfo)); add_uniq(&MyLayerInfo_list, &mli->head, li + 84); init_uniq(&mli->layer_list); mli->amigaos_linfo = li; } put_byte (li + 89, fatten_count + 1); } static void LY_ThinLayerInfo(uaecptr li) { int fatten_count = get_byte (li + 89)-1; put_byte (li + 89, fatten_count); if (fatten_count == 0) { struct MyLayerInfo *mli = (struct MyLayerInfo *)find_and_rem_uniq(&MyLayerInfo_list, get_long (li+84)); if (mli) free(mli); } } static void build_cliprect (struct MyLayer *l, struct Rectangle *bounds, int obscured, uaecptr *crp, uaecptr *prev) { uaecptr cr = get_long (*crp); if (cr == 0) { put_long (*crp, cr = amiga_malloc(CLIPRECT_SIZE)); put_long (cr, 0); } *prev = cr; *crp = cr; put_word (cr + 16, bounds->MinX); put_word (cr + 18, bounds->MinY); put_word (cr + 20, bounds->MaxX); put_word (cr + 22, bounds->MaxY); put_long (cr + 8, obscured ? l->amigaos_layer : 0); /* cheat */ put_long (cr + 12, 0); /* no smart refresh yet */ } static void build_cliprects (struct MyLayer *l) { uaecptr layer = l->amigaos_layer; uaecptr cr = layer + 8; uaecptr prev = 0; uae_u16 flags = get_word (layer + 30); int i; if ((flags & LAYER_CR_CHANGED) == 0) return; put_word (layer + 30, flags & ~LAYER_CR_CHANGED); for (i = 0; i < l->obscured.count; i++) { build_cliprect (l, l->obscured.rects + i, 1, &cr, &prev); } for (i = 0; i < l->visible.count; i++) { build_cliprect (l, l->visible.rects + i, 1, &cr, &prev); } while ((prev = get_long (cr))) { put_long (cr, get_long (prev)); amiga_free (prev, CLIPRECT_SIZE); } } static void propagate_clueless_redo (struct MyLayerInfo *mli) { /* For all CLUELESS layers, set the REDO bit for all layers below it that overlap it * and delete the data associated with them. */ uaecptr current_l = get_long (mli->amigaos_linfo); while (current_l) { struct MyLayer *l = (struct MyLayer *)find_uniq(&mli->layer_list, get_long (current_l + 24)); if ((get_word (l->amigaos_layer + 32) & LAYER_CLUELESS) != 0) { uaecptr next_l = get_long (current_l); put_word (l->amigaos_layer + 32, get_word (l->amigaos_layer + 32) | LAYER_REDO); while (next_l) { struct MyLayer *l2 = (struct MyLayer *)find_uniq(&mli->layer_list, get_long (next_l + 24)); uae_u16 flags = get_word (l2->amigaos_layer + 32); if (l2->bounds.MinX <= l->bounds.MaxX && l->bounds.MinX <= l2->bounds.MaxX && l2->bounds.MinY <= l->bounds.MaxY && l->bounds.MinY <= l2->bounds.MaxY) put_word (l2->amigaos_layer + 32, flags | LAYER_REDO); if ((flags & (LAYER_REDO|LAYER_CLUELESS)) == 0) { free_rectlist(&l->obscured); free_rectlist(&l->visible); free_bandlist(&l->big_bands); free_bandlist(&l->small_bands); } next_l = get_long (next_l); } } current_l = get_long (current_l); } } static void redo_layers(struct MyLayerInfo *mli, uaecptr bm) { uaecptr current_l; struct RectList tmp_rl; propagate_clueless_redo(mli); current_l = get_long (mli->amigaos_linfo); while (current_l) { struct MyLayer *l = (struct MyLayer *)find_uniq(&mli->layer_list, get_long (current_l + 24)); uae_u16 flags = get_word (l->amigaos_layer + 32); if ((flags & LAYER_REDO) != 0) { uaecptr next_l = get_long (current_l+4); int have_rects = 0; init_rectlist(&l->obscured); init_bandlist(&l->big_bands); add_rect_to_bands(&l->big_bands, &l->bounds); while (next_l) { struct MyLayer *l2 = (struct MyLayer *)find_uniq(&mli->layer_list, get_long (next_l + 24)); if (l2->visible.bounds.MinX <= l->bounds.MaxX && l->bounds.MinX <= l2->visible.bounds.MaxX && l2->visible.bounds.MinY <= l->bounds.MaxY && l->bounds.MinY <= l2->visible.bounds.MaxY && !rect_in_region (&l->obscured, &l2->visible.bounds)) { add_rect_to_bands(&l->big_bands, &l2->visible.bounds); add_rect(&l->obscured, l2->visible.bounds); have_rects++; } next_l = get_long (next_l+4); } init_rectlist(&l->visible); init_rectlist(&tmp_rl); add_rect (&tmp_rl, l->bounds); region_splitrects_band(&l->obscured, &l->big_bands); region_splitrects_band(&tmp_rl, &l->big_bands); region_do_ClearRegionRegion(&l->obscured, &tmp_rl, &l->visible); flags |= LAYER_CR_CHANGED; } put_word (l->amigaos_layer + 32, flags & ~(LAYER_CLUELESS|LAYER_REDO)); current_l = get_long (current_l); } } static struct MyLayer *LY_NewLayer(struct MyLayerInfo *mli, int x0, int x1, int y0, int y1, uae_u16 flags, uaecptr bm, uaecptr sbm) { struct MyLayer *l = (struct MyLayer *)malloc(sizeof (struct MyLayer)); uaecptr layer = amiga_malloc(LAYER_SIZE); memset (get_real_address (layer), 0, LAYER_SIZE); l->amigaos_layer = layer; put_word (layer + 16, x0); /* bounds */ put_word (layer + 18, y0); put_word (layer + 20, x1); put_word (layer + 22, y1); put_word (layer + 30, flags | LAYER_CLUELESS); put_long (layer + 32, flags & 4 ? sbm : 0); /* ClipRect */ put_long (layer + 68, mli->amigaos_linfo); m68k_areg (regs, 0) = layer + 72; CallLib (get_long (4), -558); /* InitSemaphore() */ add_uniq(&mli->layer_list, &l->head, layer + 24); l->mli = mli; l->bounds.MinX = x0; l->bounds.MaxX = x1; l->bounds.MinY = y0; l->bounds.MaxY = y1; return l; } static void LY_DeleteLayer(uaecptr layer) { uaecptr cr; struct MyLayer *l = (struct MyLayer *)find_and_rem_uniq(&l->mli->layer_list, get_long (layer + 24)); /* Free ClipRects */ while ((cr = get_long (l->amigaos_layer + 8))) { put_long (l->amigaos_layer + 8, get_long (cr)); amiga_free(cr, CLIPRECT_SIZE); } amiga_free (l->amigaos_layer, LAYER_SIZE); free(l); } static uaecptr find_behindlayer_position(uaecptr li, uae_u16 flags) { uaecptr where = li; for (;;) { uaecptr other = get_long (where); /* End of list? */ if (other == 0) break; /* Backdrop? */ if ((get_word (other + 30) & 0x40) > (flags & 0x40)) break; where = other; } return where; } static uaecptr LY_CreateLayer(uaecptr li, int x0, int x1, int y0, int y1, uae_u16 flags, uaecptr bm, uaecptr sbm, uaecptr where) { struct MyLayerInfo *mli = (struct MyLayerInfo *)find_uniq(&MyLayerInfo_list, get_long (li + 84)); struct MyLayer *l; LY_LockLayerInfo(li); l = LY_NewLayer(mli, x0, x1, y0, y1, flags, bm, sbm); /* Chain into list */ put_long (l->amigaos_layer, get_long (where)); put_long (l->amigaos_layer + 4, where == li ? 0 : where); if (get_long (where) != 0) put_long (get_long (where) + 4, l->amigaos_layer); put_long (where, l->amigaos_layer); redo_layers(mli, bm); build_cliprects(l); LY_UnlockLayerInfo(li); return l->amigaos_layer; } static void LY_DisposeLayerInfo(uaecptr li) { LY_ThinLayerInfo(li); amiga_free(li, LINFO_SIZE); } static uae_u32 layers_NewLayerInfo(void) { uaecptr li = amiga_malloc(LINFO_SIZE); LY_InitLayers(li); LY_FattenLayerInfo(li); return li; } static uae_u32 layers_InitLayers(void) { LY_InitLayers (m68k_areg (regs, 0)); return 0; } static uae_u32 layers_DisposeLayerInfo(void) { LY_DisposeLayerInfo (m68k_areg (regs, 0)); return 0; } static uae_u32 layers_FattenLayerInfo(void) { LY_FattenLayerInfo(m68k_areg (regs, 0)); return 0; } static uae_u32 layers_ThinLayerInfo(void) { LY_ThinLayerInfo(m68k_areg (regs, 0)); return 0; } static uae_u32 layers_CreateUpfrontLayer(void) { return LY_CreateLayer(m68k_areg (regs, 0), (uae_s32)m68k_dreg (regs, 0), (uae_s32)m68k_dreg (regs, 1), (uae_s32)m68k_dreg (regs, 2), (uae_s32)m68k_dreg (regs, 3), m68k_dreg (regs, 4), m68k_areg (regs, 1), m68k_areg (regs, 2), m68k_areg (regs, 0)); } static uae_u32 layers_CreateBehindLayer(void) { return LY_CreateLayer(m68k_areg (regs, 0), (uae_s32)m68k_dreg (regs, 0), (uae_s32)m68k_dreg (regs, 1), (uae_s32)m68k_dreg (regs, 2), (uae_s32)m68k_dreg (regs, 3), m68k_dreg (regs, 4), m68k_areg (regs, 1), m68k_areg (regs, 2), find_behindlayer_position (m68k_areg (regs, 0), m68k_dreg (regs, 4))); } static uae_u32 layers_DeleteLayer(void) { LY_DeleteLayer (m68k_areg (regs, 1)); return 0; } static void LY_LockLayer1(uaecptr layer) { uaecptr li = get_long (layer + 68); struct MyLayerInfo *mli = (struct MyLayerInfo *)find_uniq (&MyLayerInfo_list, get_long (li + 84)); struct MyLayer *l = (struct MyLayer *)find_uniq (&mli->layer_list, get_long (layer + 24)); LY_LockLayer(layer); build_cliprects (l); } static uae_u32 LY_TryLockLayer1(uaecptr layer) { uaecptr li = get_long (layer + 68); struct MyLayerInfo *mli = (struct MyLayerInfo *)find_uniq (&MyLayerInfo_list, get_long (li + 84)); struct MyLayer *l = (struct MyLayer *)find_uniq (&mli->layer_list, get_long (layer + 24)); if (!LY_TryLockLayer(layer)) return 0; build_cliprects (l); return 1; } static uae_u32 gfx_TryLockLayer(void) { return LY_TryLockLayer1 (m68k_areg (regs, 5)); } static uae_u32 gfx_LockLayer(void) { LY_LockLayer1 (m68k_areg (regs, 5)); return 0; } static uae_u32 gfx_UnlockLayer(void) { LY_UnlockLayer(m68k_areg (regs, 5)); return 0; } static uae_u32 layers_LockLayer(void) { LY_LockLayer1 (m68k_areg (regs, 1)); return 0; } static uae_u32 layers_LockLayers(void) { LY_LockLayers(m68k_areg (regs, 0)); return 0; } static uae_u32 layers_LockLayerInfo(void) { LY_LockLayerInfo(m68k_areg (regs, 0)); return 0; } static uae_u32 layers_UnlockLayer(void) { LY_UnlockLayer(m68k_areg (regs, 0)); return 0; } static uae_u32 layers_UnlockLayers(void) { LY_UnlockLayers(m68k_areg (regs, 0)); return 0; } static uae_u32 layers_UnlockLayerInfo(void) { LY_UnlockLayerInfo(m68k_areg (regs, 0)); return 0; } static uae_u32 layers_ScrollLayer(void) { abort(); } static uae_u32 layers_SizeLayer(void) { abort(); } static uae_u32 layers_MoveLayer(void) { abort(); } static uae_u32 layers_UpfrontLayer(void) { abort(); } static uae_u32 layers_BehindLayer(void) { abort(); } static uae_u32 layers_MoveLayerInFrontOf(void) { abort(); } static uae_u32 layers_BeginUpdate(void) { return 1; } static uae_u32 layers_EndUpdate(void) { return 0; } static uae_u32 layers_WhichLayer(void) { abort(); } static uae_u32 layers_InstallClipRegion(void) { return 0; } static uae_u32 layers_SwapBitsRastPortClipRect(void) { abort(); } /* * Initialization */ static uae_u32 gfxlib_init(void) { uae_u32 old_arr; uaecptr sysbase=m68k_areg (regs, 6); int i=0; /* Install new routines */ m68k_dreg (regs, 0)=0; m68k_areg (regs, 1)=gfxlibname; gfxbase=CallLib (sysbase, -408); /* OpenLibrary */ m68k_dreg (regs, 0)=0; m68k_areg (regs, 1)=layerslibname; layersbase=CallLib (sysbase, -408); /* OpenLibrary */ libemu_InstallFunctionFlags(gfxl_WritePixel, gfxbase, -324, TRAPFLAG_EXTRA_STACK, ""); libemu_InstallFunctionFlags(gfxl_BltClear, gfxbase, -300, 0, ""); libemu_InstallFunctionFlags(gfxl_AndRegionRegion, gfxbase, -624, TRAPFLAG_EXTRA_STACK, ""); libemu_InstallFunctionFlags(gfxl_OrRegionRegion, gfxbase, -612, TRAPFLAG_EXTRA_STACK, ""); libemu_InstallFunctionFlags(gfxl_XorRegionRegion, gfxbase, -618, TRAPFLAG_EXTRA_STACK, ""); libemu_InstallFunctionFlags(gfxl_AndRectRegion, gfxbase, -504, TRAPFLAG_EXTRA_STACK, ""); libemu_InstallFunctionFlags(gfxl_OrRectRegion, gfxbase, -510, TRAPFLAG_EXTRA_STACK, ""); libemu_InstallFunctionFlags(gfxl_XorRectRegion, gfxbase, -558, TRAPFLAG_EXTRA_STACK, ""); libemu_InstallFunctionFlags(gfxl_ClearRectRegion, gfxbase, -522, TRAPFLAG_EXTRA_STACK, ""); #if 0 #define MAYBE_FUNCTION(a) NULL #else #define MAYBE_FUNCTION(a) (a) #endif #if 0 libemu_InstallFunctionFlags(MAYBE_FUNCTION(gfx_TryLockLayer), gfxbase, -654, TRAPFLAG_EXTRA_STACK|TRAPFLAG_NO_RETVAL, "AttemptLockLayerRom"); libemu_InstallFunctionFlags(MAYBE_FUNCTION(gfx_LockLayer), gfxbase, -432, TRAPFLAG_EXTRA_STACK|TRAPFLAG_NO_RETVAL, "LockLayerRom"); libemu_InstallFunctionFlags(MAYBE_FUNCTION(gfx_UnlockLayer), gfxbase, -438, TRAPFLAG_EXTRA_STACK|TRAPFLAG_NO_RETVAL, "UnlockLayerRom"); libemu_InstallFunctionFlags(MAYBE_FUNCTION(layers_InitLayers), layersbase, -30, TRAPFLAG_EXTRA_STACK, "InitLayers"); libemu_InstallFunctionFlags(MAYBE_FUNCTION(layers_CreateUpfrontLayer), layersbase, -36, TRAPFLAG_EXTRA_STACK, "CreateUpfrontLayer"); libemu_InstallFunctionFlags(MAYBE_FUNCTION(layers_CreateBehindLayer), layersbase, -42, TRAPFLAG_EXTRA_STACK, "CreateBehindLayer"); libemu_InstallFunctionFlags(MAYBE_FUNCTION(layers_UpfrontLayer), layersbase, -48, TRAPFLAG_EXTRA_STACK, "UpfrontLayer"); libemu_InstallFunctionFlags(MAYBE_FUNCTION(layers_BehindLayer), layersbase, -54, TRAPFLAG_EXTRA_STACK, "BehindLayer"); libemu_InstallFunctionFlags(MAYBE_FUNCTION(layers_MoveLayer), layersbase, -60, TRAPFLAG_EXTRA_STACK, "MoveLayer"); libemu_InstallFunctionFlags(MAYBE_FUNCTION(layers_SizeLayer), layersbase, -66, TRAPFLAG_EXTRA_STACK, "SizeLayer"); libemu_InstallFunctionFlags(MAYBE_FUNCTION(layers_ScrollLayer), layersbase, -72, TRAPFLAG_EXTRA_STACK, "ScrollLayer"); libemu_InstallFunctionFlags(MAYBE_FUNCTION(layers_BeginUpdate), layersbase, -78, TRAPFLAG_EXTRA_STACK, "BeginUpdate"); libemu_InstallFunctionFlags(MAYBE_FUNCTION(layers_EndUpdate), layersbase, -84, TRAPFLAG_EXTRA_STACK, "EndUpdate"); libemu_InstallFunctionFlags(MAYBE_FUNCTION(layers_DeleteLayer), layersbase, -90, TRAPFLAG_EXTRA_STACK, "DeleteLayer"); libemu_InstallFunctionFlags(MAYBE_FUNCTION(layers_LockLayer), layersbase, -96, TRAPFLAG_EXTRA_STACK, "LockLayer"); libemu_InstallFunctionFlags(MAYBE_FUNCTION(layers_UnlockLayer), layersbase, -102, TRAPFLAG_EXTRA_STACK, "UnlockLayer"); libemu_InstallFunctionFlags(MAYBE_FUNCTION(layers_LockLayers), layersbase, -108, TRAPFLAG_EXTRA_STACK, "LockLayers"); libemu_InstallFunctionFlags(MAYBE_FUNCTION(layers_UnlockLayers), layersbase, -114, TRAPFLAG_EXTRA_STACK, "UnlockLayers"); libemu_InstallFunctionFlags(MAYBE_FUNCTION(layers_LockLayerInfo), layersbase, -120, TRAPFLAG_EXTRA_STACK, "LockLayerInfo"); libemu_InstallFunctionFlags(MAYBE_FUNCTION(layers_SwapBitsRastPortClipRect), layersbase, -126, TRAPFLAG_EXTRA_STACK, "SwapBitsRastPortClipRect"); libemu_InstallFunctionFlags(MAYBE_FUNCTION(layers_WhichLayer), layersbase, -132, TRAPFLAG_EXTRA_STACK, "WhichLayer"); libemu_InstallFunctionFlags(MAYBE_FUNCTION(layers_UnlockLayerInfo), layersbase, -138, TRAPFLAG_EXTRA_STACK, "UnlockLayerInfo"); libemu_InstallFunctionFlags(MAYBE_FUNCTION(layers_NewLayerInfo), layersbase, -144, TRAPFLAG_EXTRA_STACK, "NewLayerInfo"); libemu_InstallFunctionFlags(MAYBE_FUNCTION(layers_DisposeLayerInfo), layersbase, -150, TRAPFLAG_EXTRA_STACK, "DisposeLayerInfo"); libemu_InstallFunctionFlags(MAYBE_FUNCTION(layers_FattenLayerInfo), layersbase, -156, TRAPFLAG_EXTRA_STACK, "FattenLayerInfo"); libemu_InstallFunctionFlags(MAYBE_FUNCTION(layers_ThinLayerInfo), layersbase, -162, TRAPFLAG_EXTRA_STACK, "ThinLayerInfo"); libemu_InstallFunctionFlags(MAYBE_FUNCTION(layers_MoveLayerInFrontOf), layersbase, -168, TRAPFLAG_EXTRA_STACK, "MoveLayerInFrontOf"); libemu_InstallFunctionFlags(MAYBE_FUNCTION(layers_InstallClipRegion), layersbase, -174, TRAPFLAG_EXTRA_STACK, "InstallClipRegion"); #if 0 libemu_InstallFunctionFlags(MAYBE_FUNCTION(layers_), layersbase, -180, TRAPFLAG_EXTRA_STACK, "MoveSizeLayer"); libemu_InstallFunctionFlags(MAYBE_FUNCTION(layers_), layersbase, -186, TRAPFLAG_EXTRA_STACK, "CreateUpfrontHookLayer"); libemu_InstallFunctionFlags(MAYBE_FUNCTION(layers_), layersbase, -192, TRAPFLAG_EXTRA_STACK, "CreateBehindHookLayer"); libemu_InstallFunctionFlags(MAYBE_FUNCTION(layers_), layersbase, -198, TRAPFLAG_EXTRA_STACK, "InstallLayerHook"); #endif #endif return 0; } /* * Install the gfx-library-replacement */ void gfxlib_install(void) { uae_u32 begin, end, resname, resid; int i; if (! currprefs.use_gfxlib) return; write_log (_T("Warning: you enabled the graphics.library replacement with -g\n") "This may be buggy right now, and will not speed things up much.\n"); resname = ds ("UAEgfxlib.resource"); resid = ds ("UAE gfxlib 0.1"); gfxlibname = ds ("graphics.library"); layerslibname = ds ("layers.library"); begin = here(); dw(0x4AFC); /* RTC_MATCHuae_s16 */ dl(begin); /* our start address */ dl(0); /* Continue scan here */ dw(0x0101); /* RTF_COLDSTART; Version 1 */ dw(0x0805); /* NT_RESOURCE; pri 5 */ dl(resname); /* name */ dl(resid); /* ID */ dl(here() + 4); /* Init area: directly after this */ calltrap(deftrap2(gfxlib_init, TRAPFLAG_EXTRA_STACK, "")); dw(RTS); end = here(); org(begin + 6); dl(end); org(end); } #else void gfxlib_install (void) { } #endif fs-uae-2.2.3+dfsg/src/drawing.cpp0000644000175000017500000026451312162366655017016 0ustar glaubitzglaubitz//#define XLINECHECK /* * UAE - The Un*x Amiga Emulator * * Screen drawing functions * * Copyright 1995-2000 Bernd Schmidt * Copyright 1995 Alessandro Bissacco * Copyright 2000-2008 Toni Wilen */ /* There are a couple of concepts of "coordinates" in this file. - DIW coordinates - DDF coordinates (essentially cycles, resolution lower than lores by a factor of 2) - Pixel coordinates * in the Amiga's resolution as determined by BPLCON0 ("Amiga coordinates") * in the window resolution as determined by the preferences ("window coordinates"). * in the window resolution, and with the origin being the topmost left corner of the window ("native coordinates") One note about window coordinates. The visible area depends on the width of the window, and the centering code. The first visible horizontal window coordinate is often _not_ 0, but the value of VISIBLE_LEFT_BORDER instead. One important thing to remember: DIW coordinates are in the lowest possible resolution. To prevent extremely bad things (think pixels cut in half by window borders) from happening, all ports should restrict window widths to be multiples of 16 pixels. */ #include "sysconfig.h" #include "sysdeps.h" #include #include #include "options.h" #include "threaddep/thread.h" #include "uae.h" #include "uae/memory.h" #include "custom.h" #include "newcpu.h" #include "xwin.h" #include "autoconf.h" #include "gui.h" #include "picasso96.h" #include "drawing.h" #include "savestate.h" #include "statusline.h" #include "inputdevice.h" #include "debug.h" extern bool emulate_specialmonitors (struct vidbuffer*, struct vidbuffer*); extern int sprite_buffer_res; int lores_factor, lores_shift; int debug_bpl_mask = 0xff, debug_bpl_mask_one; static void lores_reset (void) { lores_factor = currprefs.gfx_resolution ? 2 : 1; lores_shift = currprefs.gfx_resolution; if (doublescan > 0) { if (lores_shift < 2) lores_shift++; lores_factor = 2; } sprite_buffer_res = currprefs.gfx_resolution; if (doublescan > 0 && sprite_buffer_res < RES_SUPERHIRES) sprite_buffer_res++; } bool aga_mode; /* mirror of chipset_mask & CSMASK_AGA */ bool direct_rgb; /* The shift factor to apply when converting between Amiga coordinates and window coordinates. Zero if the resolution is the same, positive if window coordinates have a higher resolution (i.e. we're stretching the image), negative if window coordinates have a lower resolution (i.e. we're shrinking the image). */ static int res_shift; static int linedbl, linedbld; int interlace_seen = 0; #define AUTO_LORES_FRAMES 10 static int can_use_lores = 0, frame_res, frame_res_lace, last_max_ypos; static bool center_reset; /* Lookup tables for dual playfields. The dblpf_*1 versions are for the case that playfield 1 has the priority, dbplpf_*2 are used if playfield 2 has priority. If we need an array for non-dual playfield mode, it has no number. */ /* The dbplpf_ms? arrays contain a shift value. plf_spritemask is initialized to contain two 16 bit words, with the appropriate mask if pf1 is in the foreground being at bit offset 0, the one used if pf2 is in front being at offset 16. */ static int dblpf_ms1[256], dblpf_ms2[256], dblpf_ms[256]; static int dblpf_ind1[256], dblpf_ind2[256]; static int dblpf_2nd1[256], dblpf_2nd2[256]; static const int dblpfofs[] = { 0, 2, 4, 8, 16, 32, 64, 128 }; static int sprite_offs[256]; static uae_u32 clxtab[256]; /* Video buffer description structure. Filled in by the graphics system * dependent code. */ struct vidbuf_description gfxvidinfo; /* OCS/ECS color lookup table. */ xcolnr xcolors[4096]; struct spritepixelsbuf { uae_u8 attach; uae_u8 stdata; uae_u16 data; }; static struct spritepixelsbuf spritepixels[MAX_PIXELS_PER_LINE]; static int sprite_first_x, sprite_last_x; #ifdef AGA /* AGA mode color lookup tables */ unsigned int xredcolors[256], xgreencolors[256], xbluecolors[256]; static int dblpf_ind1_aga[256], dblpf_ind2_aga[256]; #else static uae_u8 spriteagadpfpixels[1]; static int dblpf_ind1_aga[1], dblpf_ind2_aga[1]; #endif int xredcolor_s, xredcolor_b, xredcolor_m; int xgreencolor_s, xgreencolor_b, xgreencolor_m; int xbluecolor_s, xbluecolor_b, xbluecolor_m; struct color_entry colors_for_drawing; /* The size of these arrays is pretty arbitrary; it was chosen to be "more than enough". The coordinates used for indexing into these arrays are almost, but not quite, Amiga coordinates (there's a constant offset). */ union { /* Let's try to align this thing. */ double uupzuq; long int cruxmedo; uae_u8 apixels[MAX_PIXELS_PER_LINE * 2]; uae_u16 apixels_w[MAX_PIXELS_PER_LINE * 2 / sizeof (uae_u16)]; uae_u32 apixels_l[MAX_PIXELS_PER_LINE * 2 / sizeof (uae_u32)]; } pixdata; #ifdef OS_WITHOUT_MEMORY_MANAGEMENT uae_u16 *spixels; #else uae_u16 spixels[2 * MAX_SPR_PIXELS]; #endif /* Eight bits for every pixel. */ union sps_union spixstate; static uae_u32 ham_linebuf[MAX_PIXELS_PER_LINE * 2]; static uae_u8 *real_bplpt[8]; static uae_u8 all_ones[MAX_PIXELS_PER_LINE]; static uae_u8 all_zeros[MAX_PIXELS_PER_LINE]; uae_u8 *xlinebuffer; static int *amiga2aspect_line_map, *native2amiga_line_map; static uae_u8 *row_map[MAX_VIDHEIGHT + 1]; static uae_u8 row_tmp[MAX_PIXELS_PER_LINE * 32 / 8]; static int max_drawn_amiga_line; /* line_draw_funcs: pfield_do_linetoscr, pfield_do_fill_line, decode_ham */ typedef void (*line_draw_func)(int, int, bool); #define LINE_UNDECIDED 1 #define LINE_DECIDED 2 #define LINE_DECIDED_DOUBLE 3 #define LINE_AS_PREVIOUS 4 #define LINE_BLACK 5 #define LINE_REMEMBERED_AS_BLACK 6 #define LINE_DONE 7 #define LINE_DONE_AS_PREVIOUS 8 #define LINE_REMEMBERED_AS_PREVIOUS 9 static uae_u8 linestate[(MAXVPOS + 2) * 2 + 1]; uae_u8 line_data[(MAXVPOS + 2) * 2][MAX_PLANES * MAX_WORDS_PER_LINE * 2]; /* Centering variables. */ static int min_diwstart, max_diwstop; /* The visible window: VISIBLE_LEFT_BORDER contains the left border of the visible area, VISIBLE_RIGHT_BORDER the right border. These are in window coordinates. */ int visible_left_border, visible_right_border; /* Pixels outside of visible_start and visible_stop are always black */ static int visible_left_start, visible_right_stop; static int visible_top_start, visible_bottom_stop; static int linetoscr_x_adjust_bytes; static int thisframe_y_adjust; static int thisframe_y_adjust_real, max_ypos_thisframe, min_ypos_for_screen; static int extra_y_adjust; int thisframe_first_drawn_line, thisframe_last_drawn_line; /* A frame counter that forces a redraw after at least one skipped frame in interlace mode. */ static int last_redraw_point; #define MAX_STOP 30000 static int first_drawn_line, last_drawn_line; static int first_block_line, last_block_line; #define NO_BLOCK -3 /* These are generated by the drawing code from the line_decisions array for each line that needs to be drawn. These are basically extracted out of bit fields in the hardware registers. */ static int bplehb, bplham, bpldualpf, bpldualpfpri, bpldualpf2of, bplplanecnt, ecsshres, issprites; static int bplres; static int plf1pri, plf2pri, bplxor; static uae_u32 plf_sprite_mask; static int sbasecol[2] = { 16, 16 }; static bool brdsprt, brdblank; static int hposblank; static bool specialmonitoron; bool picasso_requested_on; bool picasso_on; uae_sem_t gui_sem; int inhibit_frame; int framecnt = 0; static int frame_redraw_necessary; static int picasso_redraw_necessary; #ifdef XLINECHECK static void xlinecheck (unsigned int start, unsigned int end) { unsigned int xstart = (unsigned int)xlinebuffer + start * gfxvidinfo.drawbuffer.pixbytes; unsigned int xend = (unsigned int)xlinebuffer + end * gfxvidinfo.drawbuffer.pixbytes; unsigned int end1 = (unsigned int)gfxvidinfo.drawbuffer.bufmem + gfxvidinfo.drawbuffer.rowbytes * gfxvidinfo.drawbuffer.height; int min = linetoscr_x_adjust_bytes / gfxvidinfo.drawbuffer.pixbytes; int ok = 1; if (xstart >= gfxvidinfo.drawbuffer.emergmem && xstart < gfxvidinfo.drawbuffer.emergmem + 4096 * gfxvidinfo.drawbuffer.pixbytes && xend >= gfxvidinfo.drawbuffer.emergmem && xend < gfxvidinfo.drawbuffer.emergmem + 4096 * gfxvidinfo.drawbuffer.pixbytes) return; if (xstart < (unsigned int)gfxvidinfo.drawbuffer.bufmem || xend < (unsigned int)gfxvidinfo.drawbuffer.bufmem) ok = 0; if (xend > end1 || xstart >= end1) ok = 0; xstart -= (unsigned int)gfxvidinfo.drawbuffer.bufmem; xend -= (unsigned int)gfxvidinfo.drawbuffer.bufmem; if ((xstart % gfxvidinfo.drawbuffer.rowbytes) >= gfxvidinfo.drawbuffer.width * gfxvidinfo.drawbuffer.pixbytes) ok = 0; if ((xend % gfxvidinfo.drawbuffer.rowbytes) >= gfxvidinfo.drawbuffer.width * gfxvidinfo.drawbuffer.pixbytes) ok = 0; if (xstart >= xend) ok = 0; if (xend - xstart > gfxvidinfo.drawbuffer.width * gfxvidinfo.drawbuffer.pixbytes) ok = 0; if (!ok) { write_log (_T("*** %d-%d (%dx%dx%d %d) %p\n"), start - min, end - min, gfxvidinfo.drawbuffer.width, gfxvidinfo.drawbuffer.height, gfxvidinfo.drawbuffer.pixbytes, gfxvidinfo.drawbuffer.rowbytes, xlinebuffer); } } #else #define xlinecheck #endif STATIC_INLINE void count_frame (void) { framecnt++; if (framecnt >= currprefs.gfx_framerate) framecnt = 0; if (inhibit_frame) framecnt = 1; } STATIC_INLINE int xshift (int x, int shift) { if (shift < 0) return x >> (-shift); else return x << shift; } int coord_native_to_amiga_x (int x) { x += visible_left_border; x = xshift (x, 1 - lores_shift); return x + 2 * DISPLAY_LEFT_SHIFT - 2 * DIW_DDF_OFFSET; } int coord_native_to_amiga_y (int y) { return native2amiga_line_map[y] + thisframe_y_adjust - minfirstline; } STATIC_INLINE int res_shift_from_window (int x) { if (res_shift >= 0) return x >> res_shift; return x << -res_shift; } STATIC_INLINE int res_shift_from_amiga (int x) { if (res_shift >= 0) return x >> res_shift; return x << -res_shift; } void notice_screen_contents_lost (void) { picasso_redraw_necessary = 1; frame_redraw_necessary = 2; } bool isnativevidbuf (void) { if (gfxvidinfo.outbuffer == &gfxvidinfo.drawbuffer) return true; return gfxvidinfo.outbuffer->nativepositioning; } extern int plffirstline_total, plflastline_total; extern int first_planes_vpos, last_planes_vpos; extern int diwfirstword_total, diwlastword_total; extern int ddffirstword_total, ddflastword_total; extern int firstword_bplcon1; extern int lof_store; #define MIN_DISPLAY_W 256 #define MIN_DISPLAY_H 192 #define MAX_DISPLAY_W 362 #define MAX_DISPLAY_H 283 static int gclow, gcloh, gclox, gcloy, gclorealh; void get_custom_topedge (int *x, int *y) { if (isnativevidbuf ()) { *x = visible_left_border + (DISPLAY_LEFT_SHIFT << currprefs.gfx_resolution); *y = minfirstline << currprefs.gfx_vresolution; } else { *x = 0; *y = 0; } } static void reset_custom_limits (void) { gclow = gcloh = gclox = gcloy = 0; gclorealh = -1; } void set_custom_limits (int w, int h, int dx, int dy) { int vls = visible_left_start; int vrs = visible_right_stop; int vts = visible_top_start; int vbs = visible_bottom_stop; if (w <= 0 || dx < 0) { visible_left_start = 0; visible_right_stop = MAX_STOP; } else { visible_left_start = visible_left_border + dx; visible_right_stop = visible_left_start + w; } if (h <= 0 || dy < 0) { visible_top_start = 0; visible_bottom_stop = MAX_STOP; } else { visible_top_start = min_ypos_for_screen + dy; visible_bottom_stop = visible_top_start + h; } if (vls != visible_left_start || vrs != visible_right_stop || vts != visible_top_start || vbs != visible_bottom_stop) notice_screen_contents_lost (); } int get_custom_limits (int *pw, int *ph, int *pdx, int *pdy, int *prealh) { int w, h, dx, dy, y1, y2, dbl1, dbl2; int ret = 0; if (!pw || !ph || !pdx || !pdy) { reset_custom_limits (); return 0; } if (!isnativevidbuf ()) { *pw = gfxvidinfo.outbuffer->outwidth; *ph = gfxvidinfo.outbuffer->outheight; *pdx = 0; *pdy = 0; *prealh = -1; return 1; } *pw = gclow; *ph = gcloh; *pdx = gclox; *pdy = gcloy; *prealh = gclorealh; if (gclow > 0 && gcloh > 0) ret = -1; if (interlace_seen) { static int interlace_count; // interlace = only use long frames if (lof_store && (interlace_count & 1) == 0) interlace_count++; if (!lof_store && (interlace_count & 1) != 0) interlace_count++; if (interlace_count < 3) return ret; if (!lof_store) return ret; interlace_count = 0; /* program may have set last visible line as last possible line (CD32 boot screen) */ if (last_planes_vpos < maxvpos) last_planes_vpos++; if (plflastline_total < maxvpos) plflastline_total++; } if (plflastline_total < 4) plflastline_total = last_planes_vpos; ddffirstword_total = coord_hw_to_window_x (ddffirstword_total * 2 + DIW_DDF_OFFSET); ddflastword_total = coord_hw_to_window_x (ddflastword_total * 2 + DIW_DDF_OFFSET); if (doublescan <= 0 && !programmedmode) { int min = coord_diw_to_window_x (92); int max = coord_diw_to_window_x (460); if (diwfirstword_total < min) diwfirstword_total = min; if (diwlastword_total > max) diwlastword_total = max; if (ddffirstword_total < min) ddffirstword_total = min; if (ddflastword_total > max) ddflastword_total = max; if (0 && !(currprefs.chipset_mask & CSMASK_AGA)) { if (ddffirstword_total > diwfirstword_total) diwfirstword_total = ddffirstword_total; if (ddflastword_total < diwlastword_total) diwlastword_total = ddflastword_total; } } w = diwlastword_total - diwfirstword_total; dx = diwfirstword_total - visible_left_border; y2 = plflastline_total; if (y2 > last_planes_vpos) y2 = last_planes_vpos; y1 = plffirstline_total; if (first_planes_vpos > y1) y1 = first_planes_vpos; if (minfirstline > y1) y1 = minfirstline; dbl2 = dbl1 = currprefs.gfx_vresolution; if (doublescan > 0 && interlace_seen <= 0) { dbl1--; dbl2--; } h = y2 - y1; dy = y1 - minfirstline; if (first_planes_vpos == 0) { // no planes enabled during frame if (ret < 0) return 1; h = currprefs.ntscmode ? 200 : 240; w = 320 << currprefs.gfx_resolution; dy = 36 / 2; #ifdef FSUAE dx = 74; #else dx = 58; #endif } if (dx < 0) dx = 0; *prealh = -1; if (!programmedmode && first_planes_vpos) { int th = (maxvpos - minfirstline) * 95 / 100; if (th > h) { th = xshift (th, dbl1); *prealh = th; } } dy = xshift (dy, dbl2); h = xshift (h, dbl1); if (w == 0 || h == 0) return 0; if (doublescan <= 0 && !programmedmode) { if ((w >> currprefs.gfx_resolution) < MIN_DISPLAY_W) { dx += (w - (MIN_DISPLAY_W << currprefs.gfx_resolution)) / 2; w = MIN_DISPLAY_W << currprefs.gfx_resolution; } if ((h >> dbl1) < MIN_DISPLAY_H) { dy += (h - (MIN_DISPLAY_H << dbl1)) / 2; h = MIN_DISPLAY_H << dbl1; } if ((w >> currprefs.gfx_resolution) > MAX_DISPLAY_W) { dx += (w - (MAX_DISPLAY_W << currprefs.gfx_resolution)) / 2; w = MAX_DISPLAY_W << currprefs.gfx_resolution; } if ((h >> dbl1) > MAX_DISPLAY_H) { dy += (h - (MAX_DISPLAY_H << dbl1)) / 2; h = MAX_DISPLAY_H << dbl1; } } if (gclow == w && gcloh == h && gclox == dx && gcloy == dy) return ret; if (w <= 0 || h <= 0 || dx < 0 || dy < 0) return ret; if (doublescan <= 0 && !programmedmode) { if (dx > gfxvidinfo.outbuffer->inwidth / 3) return ret; if (dy > gfxvidinfo.outbuffer->inheight / 3) return ret; } gclow = w; gcloh = h; gclox = dx; gcloy = dy; gclorealh = *prealh; *pw = w; *ph = h; *pdx = dx; *pdy = dy; #if 1 write_log (_T("Display Size: %dx%d Offset: %dx%d\n"), w, h, dx, dy); write_log (_T("First: %d Last: %d MinV: %d MaxV: %d Min: %d\n"), plffirstline_total, plflastline_total, first_planes_vpos, last_planes_vpos, minfirstline); #endif center_reset = true; return 1; } void get_custom_mouse_limits (int *pw, int *ph, int *pdx, int *pdy, int dbl) { int delay1, delay2; int w, h, dx, dy, dbl1, dbl2, y1, y2; w = diwlastword_total - diwfirstword_total; dx = diwfirstword_total - visible_left_border; y2 = plflastline_total; if (y2 > last_planes_vpos) y2 = last_planes_vpos; y1 = plffirstline_total; if (first_planes_vpos > y1) y1 = first_planes_vpos; if (minfirstline > y1) y1 = minfirstline; h = y2 - y1; dy = y1 - minfirstline; if (*pw > 0) w = *pw; w = xshift (w, res_shift); if (*ph > 0) h = *ph; delay1 = (firstword_bplcon1 & 0x0f) | ((firstword_bplcon1 & 0x0c00) >> 6); delay2 = ((firstword_bplcon1 >> 4) & 0x0f) | (((firstword_bplcon1 >> 4) & 0x0c00) >> 6); // if (delay1 == delay2) // dx += delay1; dx = xshift (dx, res_shift); dbl2 = dbl1 = currprefs.gfx_vresolution; if ((doublescan > 0 || interlace_seen > 0) && !dbl) { dbl1--; dbl2--; } if (interlace_seen > 0) dbl2++; if (interlace_seen <= 0 && dbl) dbl2--; h = xshift (h, dbl1); dy = xshift (dy, dbl2); if (w < 1) w = 1; if (h < 1) h = 1; if (dx < 0) dx = 0; if (dy < 0) dy = 0; *pw = w; *ph = h; *pdx = dx; *pdy = dy; } static struct decision *dp_for_drawing; static struct draw_info *dip_for_drawing; /* Record DIW of the current line for use by centering code. */ void record_diw_line (int plfstrt, int first, int last) { if (last > max_diwstop) max_diwstop = last; if (first < min_diwstart) { min_diwstart = first; /* if (plfstrt * 2 > min_diwstart) min_diwstart = plfstrt * 2; */ } } /* * Screen update macros/functions */ /* The important positions in the line: where do we start drawing the left border, where do we start drawing the playfield, where do we start drawing the right border. All of these are forced into the visible window (VISIBLE_LEFT_BORDER .. VISIBLE_RIGHT_BORDER). PLAYFIELD_START and PLAYFIELD_END are in window coordinates. */ static int playfield_start, playfield_end; static int real_playfield_start, real_playfield_end; static int linetoscr_diw_start, linetoscr_diw_end; static int native_ddf_left, native_ddf_right; static int pixels_offset; static int src_pixel, ham_src_pixel; /* How many pixels in window coordinates which are to the left of the left border. */ static int unpainted; static int seen_sprites; /* Initialize the variables necessary for drawing a line. * This involves setting up start/stop positions and display window * borders. */ static void pfield_init_linetoscr (void) { /* First, get data fetch start/stop in DIW coordinates. */ int ddf_left = dp_for_drawing->plfleft * 2 + DIW_DDF_OFFSET; int ddf_right = dp_for_drawing->plfright * 2 + DIW_DDF_OFFSET; /* Compute datafetch start/stop in pixels; native display coordinates. */ native_ddf_left = coord_hw_to_window_x (ddf_left); native_ddf_right = coord_hw_to_window_x (ddf_right); linetoscr_diw_start = dp_for_drawing->diwfirstword; linetoscr_diw_end = dp_for_drawing->diwlastword; res_shift = lores_shift - bplres; if (dip_for_drawing->nr_sprites == 0) { if (linetoscr_diw_start < native_ddf_left) linetoscr_diw_start = native_ddf_left; if (linetoscr_diw_end > native_ddf_right) linetoscr_diw_end = native_ddf_right; } /* Perverse cases happen. */ if (linetoscr_diw_end < linetoscr_diw_start) linetoscr_diw_end = linetoscr_diw_start; playfield_start = linetoscr_diw_start; playfield_end = linetoscr_diw_end; unpainted = visible_left_border < playfield_start ? 0 : visible_left_border - playfield_start; ham_src_pixel = MAX_PIXELS_PER_LINE + res_shift_from_window (playfield_start - native_ddf_left); unpainted = res_shift_from_window (unpainted); if (playfield_start < visible_left_border) playfield_start = visible_left_border; if (playfield_start > visible_right_border) playfield_start = visible_right_border; if (playfield_end < visible_left_border) playfield_end = visible_left_border; if (playfield_end > visible_right_border) playfield_end = visible_right_border; real_playfield_end = playfield_end; real_playfield_start = playfield_start; #ifdef AGA if (brdsprt && dip_for_drawing->nr_sprites) { int min = visible_right_border, max = visible_left_border, i; for (i = 0; i < dip_for_drawing->nr_sprites; i++) { int x; x = curr_sprite_entries[dip_for_drawing->first_sprite_entry + i].pos; if (x < min) min = x; x = curr_sprite_entries[dip_for_drawing->first_sprite_entry + i].max; if (x > max) max = x; } min = coord_hw_to_window_x (min >> sprite_buffer_res) + (DIW_DDF_OFFSET << lores_shift); max = coord_hw_to_window_x (max >> sprite_buffer_res) + (DIW_DDF_OFFSET << lores_shift); if (min < playfield_start) playfield_start = min; if (playfield_start < visible_left_border) playfield_start = visible_left_border; if (max > playfield_end) playfield_end = max; if (playfield_end > visible_right_border) playfield_end = visible_right_border; } #endif if (sprite_first_x < sprite_last_x) { if (sprite_first_x < 0) sprite_first_x = 0; if (sprite_last_x >= MAX_PIXELS_PER_LINE - 1) sprite_last_x = MAX_PIXELS_PER_LINE - 2; if (sprite_first_x < sprite_last_x) memset (spritepixels + sprite_first_x, 0, sizeof (struct spritepixelsbuf) * (sprite_last_x - sprite_first_x + 1)); } sprite_last_x = 0; sprite_first_x = MAX_PIXELS_PER_LINE - 1; /* Now, compute some offsets. */ ddf_left -= DISPLAY_LEFT_SHIFT; pixels_offset = MAX_PIXELS_PER_LINE - (ddf_left << bplres); ddf_left <<= bplres; src_pixel = MAX_PIXELS_PER_LINE + res_shift_from_window (playfield_start - native_ddf_left); seen_sprites = 0; if (dip_for_drawing->nr_sprites == 0) return; seen_sprites = 1; /* Must clear parts of apixels. */ if (linetoscr_diw_start < native_ddf_left) { int size = res_shift_from_window (native_ddf_left - linetoscr_diw_start); linetoscr_diw_start = native_ddf_left; memset (pixdata.apixels + MAX_PIXELS_PER_LINE - size, 0, size); } if (linetoscr_diw_end > native_ddf_right) { int pos = res_shift_from_window (native_ddf_right - native_ddf_left); int size = res_shift_from_window (linetoscr_diw_end - native_ddf_right); linetoscr_diw_start = native_ddf_left; memset (pixdata.apixels + MAX_PIXELS_PER_LINE + pos, 0, size); } } STATIC_INLINE uae_u16 merge_2pixel16 (uae_u16 p1, uae_u16 p2) { uae_u16 v = ((((p1 >> xredcolor_s) & xredcolor_m) + ((p2 >> xredcolor_s) & xredcolor_m)) / 2) << xredcolor_s; v |= ((((p1 >> xbluecolor_s) & xbluecolor_m) + ((p2 >> xbluecolor_s) & xbluecolor_m)) / 2) << xbluecolor_s; v |= ((((p1 >> xgreencolor_s) & xgreencolor_m) + ((p2 >> xgreencolor_s) & xgreencolor_m)) / 2) << xgreencolor_s; return v; } STATIC_INLINE uae_u32 merge_2pixel32 (uae_u32 p1, uae_u32 p2) { uae_u32 v = ((((p1 >> 16) & 0xff) + ((p2 >> 16) & 0xff)) / 2) << 16; v |= ((((p1 >> 8) & 0xff) + ((p2 >> 8) & 0xff)) / 2) << 8; v |= ((((p1 >> 0) & 0xff) + ((p2 >> 0) & 0xff)) / 2) << 0; return v; } STATIC_INLINE xcolnr getbgc (bool blank) { #if 0 if (blank) return xcolors[0x088]; else if (hposblank == 1) return xcolors[0xf00]; else if (hposblank == 2) return xcolors[0x0f0]; else if (hposblank == 3) return xcolors[0x00f]; else if (brdblank) return xcolors[0x880]; //return colors_for_drawing.acolors[0]; return xcolors[0xf0f]; #endif return (blank || hposblank || colors_for_drawing.borderblank) ? 0 : colors_for_drawing.acolors[0]; } STATIC_INLINE void fill_line_16 (uae_u8 *buf, int start, int stop, bool blank) { uae_u16 *b = (uae_u16 *)buf; unsigned int i; unsigned int rem = 0; xcolnr col = getbgc (blank); if (((long)&b[start]) & 1) b[start++] = (uae_u16) col; if (start >= stop) return; if (((long)&b[stop]) & 1) { rem++; stop--; } for (i = start; i < stop; i += 2) { uae_u32 *b2 = (uae_u32 *)&b[i]; *b2 = col; } if (rem) b[stop] = (uae_u16)col; } STATIC_INLINE void fill_line_32 (uae_u8 *buf, int start, int stop, bool blank) { uae_u32 *b = (uae_u32 *)buf; unsigned int i; xcolnr col = getbgc (blank); for (i = start; i < stop; i++) b[i] = col; } static void pfield_do_fill_line2 (int start, int stop, bool blank) { switch (gfxvidinfo.drawbuffer.pixbytes) { case 2: fill_line_16 (xlinebuffer, start, stop, blank); break; case 4: fill_line_32 (xlinebuffer, start, stop, blank); break; } } static void pfield_do_fill_line (int start, int stop, bool blank) { xlinecheck(start, stop); if (!blank) { if (start < visible_left_start) { pfield_do_fill_line2 (start, visible_left_start, true); start = visible_left_start; } if (stop > visible_right_stop) { pfield_do_fill_line2 (start, visible_right_stop, false); blank = true; start = visible_right_stop; } } pfield_do_fill_line2 (start, stop, blank); } STATIC_INLINE void fill_line2 (int startpos, int len) { int shift; int nints, nrem; int *start; xcolnr val; shift = 0; if (gfxvidinfo.drawbuffer.pixbytes == 2) shift = 1; if (gfxvidinfo.drawbuffer.pixbytes == 4) shift = 2; nints = len >> (2 - shift); nrem = nints & 7; nints &= ~7; start = (int *)(((uae_u8*)xlinebuffer) + (startpos << shift)); val = getbgc (false); for (; nints > 0; nints -= 8, start += 8) { *start = val; *(start+1) = val; *(start+2) = val; *(start+3) = val; *(start+4) = val; *(start+5) = val; *(start+6) = val; *(start+7) = val; } switch (nrem) { case 7: *start++ = val; case 6: *start++ = val; case 5: *start++ = val; case 4: *start++ = val; case 3: *start++ = val; case 2: *start++ = val; case 1: *start = val; } } static void fill_line (void) { int hs = coord_hw_to_window_x (hsyncstartpos * 2); if (hs >= gfxvidinfo.drawbuffer.inwidth || hposblank) { hposblank = 3; fill_line2 (visible_left_border, gfxvidinfo.drawbuffer.inwidth); } else { fill_line2 (visible_left_border, hs); hposblank = 2; fill_line2 (visible_left_border + hs, gfxvidinfo.drawbuffer.inwidth); } } #define SPRITE_DEBUG 0 STATIC_INLINE uae_u8 render_sprites (int pos, int dualpf, uae_u8 apixel, int aga) { struct spritepixelsbuf *spb = &spritepixels[pos]; unsigned int v = spb->data; int *shift_lookup = dualpf ? (bpldualpfpri ? dblpf_ms2 : dblpf_ms1) : dblpf_ms; int maskshift, plfmask; /* The value in the shift lookup table is _half_ the shift count we need. This is because we can't shift 32 bits at once (undefined behaviour in C). */ maskshift = shift_lookup[apixel]; plfmask = (plf_sprite_mask >> maskshift) >> maskshift; v &= ~plfmask; if (v != 0 || SPRITE_DEBUG) { unsigned int vlo, vhi, col; unsigned int v1 = v & 255; /* OFFS determines the sprite pair with the highest priority that has any bits set. E.g. if we have 0xFF00 in the buffer, we have sprite pairs 01 and 23 cleared, and pairs 45 and 67 set, so OFFS will have a value of 4. 2 * OFFS is the bit number in V of the sprite pair, and it also happens to be the color offset for that pair. */ int offs; if (v1 == 0) offs = 4 + sprite_offs[v >> 8]; else offs = sprite_offs[v1]; /* Shift highest priority sprite pair down to bit zero. */ v >>= offs * 2; v &= 15; #if SPRITE_DEBUG > 0 v ^= 8; #endif if (spb->attach && (spb->stdata & (3 << offs))) { col = v; if (aga) col += sbasecol[1]; else col += 16; } else { /* This sequence computes the correct color value. We have to select either the lower-numbered or the higher-numbered sprite in the pair. We have to select the high one if the low one has all bits zero. If the lower-numbered sprite has any bits nonzero, (VLO - 1) is in the range of 0..2, and with the mask and shift, VHI will be zero. If the lower-numbered sprite is zero, (VLO - 1) is a mask of 0xFFFFFFFF, and we select the bits of the higher numbered sprite in VHI. This is _probably_ more efficient than doing it with branches. */ vlo = v & 3; vhi = (v & (vlo - 1)) >> 2; col = (vlo | vhi); if (aga) { if (vhi > 0) col += sbasecol[1]; else col += sbasecol[0]; } else { col += 16; } col += offs * 2; } return col; } return 0; } #include "linetoscr.cpp" #define LTPARMS src_pixel, start, stop #ifdef ECS_DENISE /* ECS SuperHires special cases */ #define PUTBPIX(x) buf[dpix] = (x); STATIC_INLINE uae_u32 shsprite (int dpix, uae_u32 spix_val, uae_u32 v, int spr) { uae_u8 sprcol; uae_u16 scol; if (!spr) return v; sprcol = render_sprites (dpix, 0, spix_val, 0); if (!sprcol) return v; /* good enough for now.. */ scol = colors_for_drawing.color_regs_ecs[sprcol] & 0xccc; scol |= scol >> 2; return xcolors[scol]; } static int NOINLINE linetoscr_16_sh (int spix, int dpix, int stoppos, int spr) { uae_u16 *buf = (uae_u16 *) xlinebuffer; while (dpix < stoppos) { uae_u16 spix_val1, spix_val2; uae_u16 v; int off; spix_val1 = pixdata.apixels[spix++]; spix_val2 = pixdata.apixels[spix++]; off = ((spix_val2 & 3) * 4) + (spix_val1 & 3) + ((spix_val1 | spix_val2) & 16); v = (colors_for_drawing.color_regs_ecs[off] & 0xccc) << 0; v |= v >> 2; PUTBPIX(shsprite (dpix, spix_val1, xcolors[v], spr)); dpix++; v = (colors_for_drawing.color_regs_ecs[off] & 0x333) << 2; v |= v >> 2; PUTBPIX(shsprite (dpix, spix_val2, xcolors[v], spr)); dpix++; } return spix; } static int NOINLINE linetoscr_32_sh (int spix, int dpix, int stoppos, int spr) { uae_u32 *buf = (uae_u32 *) xlinebuffer; while (dpix < stoppos) { uae_u32 spix_val1, spix_val2; uae_u16 v; int off; spix_val1 = pixdata.apixels[spix++]; spix_val2 = pixdata.apixels[spix++]; off = ((spix_val2 & 3) * 4) + (spix_val1 & 3) + ((spix_val1 | spix_val2) & 16); v = (colors_for_drawing.color_regs_ecs[off] & 0xccc) << 0; v |= v >> 2; PUTBPIX(shsprite (dpix, spix_val1, xcolors[v], spr)); dpix++; v = (colors_for_drawing.color_regs_ecs[off] & 0x333) << 2; v |= v >> 2; PUTBPIX(shsprite (dpix, spix_val2, xcolors[v], spr)); dpix++; } return spix; } static int NOINLINE linetoscr_32_shrink1_sh (int spix, int dpix, int stoppos, int spr) { uae_u32 *buf = (uae_u32 *) xlinebuffer; while (dpix < stoppos) { uae_u32 spix_val1, spix_val2; uae_u16 v; int off; spix_val1 = pixdata.apixels[spix++]; spix_val2 = pixdata.apixels[spix++]; off = ((spix_val2 & 3) * 4) + (spix_val1 & 3) + ((spix_val1 | spix_val2) & 16); v = (colors_for_drawing.color_regs_ecs[off] & 0xccc) << 0; v |= v >> 2; PUTBPIX(shsprite (dpix, spix_val1, xcolors[v], spr)); dpix++; } return spix; } static int NOINLINE linetoscr_32_shrink1f_sh (int spix, int dpix, int stoppos, int spr) { uae_u32 *buf = (uae_u32 *) xlinebuffer; while (dpix < stoppos) { uae_u32 spix_val1, spix_val2, dpix_val1, dpix_val2; uae_u16 v; int off; spix_val1 = pixdata.apixels[spix++]; spix_val2 = pixdata.apixels[spix++]; off = ((spix_val2 & 3) * 4) + (spix_val1 & 3) + ((spix_val1 | spix_val2) & 16); v = (colors_for_drawing.color_regs_ecs[off] & 0xccc) << 0; v |= v >> 2; dpix_val1 = xcolors[v]; v = (colors_for_drawing.color_regs_ecs[off] & 0x333) << 2; v |= v >> 2; dpix_val2 = xcolors[v]; PUTBPIX(shsprite (dpix, spix_val1, merge_2pixel32 (dpix_val1, dpix_val2), spr)); dpix++; } return spix; } static int NOINLINE linetoscr_16_shrink1_sh (int spix, int dpix, int stoppos, int spr) { uae_u16 *buf = (uae_u16 *) xlinebuffer; while (dpix < stoppos) { uae_u16 spix_val1, spix_val2; uae_u16 v; int off; spix_val1 = pixdata.apixels[spix++]; spix_val2 = pixdata.apixels[spix++]; off = ((spix_val2 & 3) * 4) + (spix_val1 & 3) + ((spix_val1 | spix_val2) & 16); v = (colors_for_drawing.color_regs_ecs[off] & 0xccc) << 0; v |= v >> 2; PUTBPIX(shsprite (dpix, spix_val1, xcolors[v], spr)); dpix++; } return spix; } static int NOINLINE linetoscr_16_shrink1f_sh (int spix, int dpix, int stoppos, int spr) { uae_u16 *buf = (uae_u16 *) xlinebuffer; while (dpix < stoppos) { uae_u16 spix_val1, spix_val2, dpix_val1, dpix_val2; uae_u16 v; int off; spix_val1 = pixdata.apixels[spix++]; spix_val2 = pixdata.apixels[spix++]; off = ((spix_val2 & 3) * 4) + (spix_val1 & 3) + ((spix_val1 | spix_val2) & 16); v = (colors_for_drawing.color_regs_ecs[off] & 0xccc) << 0; v |= v >> 2; dpix_val1 = xcolors[v]; v = (colors_for_drawing.color_regs_ecs[off] & 0x333) << 2; v |= v >> 2; dpix_val2 = xcolors[v]; PUTBPIX(shsprite (dpix, spix_val1, merge_2pixel16 (dpix_val1, dpix_val2), spr)); dpix++; } return spix; } static int NOINLINE linetoscr_32_shrink2_sh (int spix, int dpix, int stoppos, int spr) { uae_u32 *buf = (uae_u32 *) xlinebuffer; while (dpix < stoppos) { uae_u32 spix_val1, spix_val2; uae_u16 v; int off; spix_val1 = pixdata.apixels[spix++]; spix_val2 = pixdata.apixels[spix++]; off = ((spix_val2 & 3) * 4) + (spix_val1 & 3) + ((spix_val1 | spix_val2) & 16); v = (colors_for_drawing.color_regs_ecs[off] & 0xccc) << 0; v |= v >> 2; PUTBPIX(shsprite (dpix, spix_val1, xcolors[v], spr)); spix+=2; dpix++; } return spix; } static int NOINLINE linetoscr_32_shrink2f_sh (int spix, int dpix, int stoppos, int spr) { uae_u32 *buf = (uae_u32 *) xlinebuffer; while (dpix < stoppos) { uae_u32 spix_val1, spix_val2, dpix_val1, dpix_val2, dpix_val3, dpix_val4; uae_u16 v; int off; spix_val1 = pixdata.apixels[spix++]; spix_val2 = pixdata.apixels[spix++]; off = ((spix_val2 & 3) * 4) + (spix_val1 & 3) + ((spix_val1 | spix_val2) & 16); v = (colors_for_drawing.color_regs_ecs[off] & 0xccc) << 0; v |= v >> 2; dpix_val1 = xcolors[v]; v = (colors_for_drawing.color_regs_ecs[off] & 0x333) << 2; v |= v >> 2; dpix_val2 = xcolors[v]; dpix_val3 = merge_2pixel32 (dpix_val1, dpix_val2); spix_val1 = pixdata.apixels[spix++]; spix_val2 = pixdata.apixels[spix++]; off = ((spix_val2 & 3) * 4) + (spix_val1 & 3) + ((spix_val1 | spix_val2) & 16); v = (colors_for_drawing.color_regs_ecs[off] & 0xccc) << 0; v |= v >> 2; dpix_val1 = xcolors[v]; v = (colors_for_drawing.color_regs_ecs[off] & 0x333) << 2; v |= v >> 2; dpix_val2 = xcolors[v]; dpix_val4 = merge_2pixel32 (dpix_val1, dpix_val2); PUTBPIX(shsprite (dpix, spix_val1, merge_2pixel32 (dpix_val3, dpix_val4), spr)); dpix++; } return spix; } static int NOINLINE linetoscr_16_shrink2_sh (int spix, int dpix, int stoppos, int spr) { uae_u16 *buf = (uae_u16 *) xlinebuffer; while (dpix < stoppos) { uae_u16 spix_val1, spix_val2; uae_u16 v; int off; spix_val1 = pixdata.apixels[spix++]; spix_val2 = pixdata.apixels[spix++]; off = ((spix_val2 & 3) * 4) + (spix_val1 & 3) + ((spix_val1 | spix_val2) & 16); v = (colors_for_drawing.color_regs_ecs[off] & 0xccc) << 0; v |= v >> 2; PUTBPIX(shsprite (dpix, spix_val1, xcolors[v], spr)); spix+=2; dpix++; } return spix; } static int NOINLINE linetoscr_16_shrink2f_sh (int spix, int dpix, int stoppos, int spr) { uae_u16 *buf = (uae_u16 *) xlinebuffer; while (dpix < stoppos) { uae_u16 spix_val1, spix_val2, dpix_val1, dpix_val2, dpix_val3, dpix_val4; uae_u16 v; int off; spix_val1 = pixdata.apixels[spix++]; spix_val2 = pixdata.apixels[spix++]; off = ((spix_val2 & 3) * 4) + (spix_val1 & 3) + ((spix_val1 | spix_val2) & 16); v = (colors_for_drawing.color_regs_ecs[off] & 0xccc) << 0; v |= v >> 2; dpix_val1 = xcolors[v]; v = (colors_for_drawing.color_regs_ecs[off] & 0x333) << 2; v |= v >> 2; dpix_val2 = xcolors[v]; dpix_val3 = merge_2pixel32 (dpix_val1, dpix_val2); spix_val1 = pixdata.apixels[spix++]; spix_val2 = pixdata.apixels[spix++]; off = ((spix_val2 & 3) * 4) + (spix_val1 & 3) + ((spix_val1 | spix_val2) & 16); v = (colors_for_drawing.color_regs_ecs[off] & 0xccc) << 0; v |= v >> 2; dpix_val1 = xcolors[v]; v = (colors_for_drawing.color_regs_ecs[off] & 0x333) << 2; v |= v >> 2; dpix_val2 = xcolors[v]; dpix_val4 = merge_2pixel32 (dpix_val1, dpix_val2); PUTBPIX(shsprite (dpix, spix_val1, merge_2pixel16 (dpix_val3, dpix_val4), spr)); dpix++; } return spix; } #endif static void pfield_do_linetoscr (int start, int stop, bool blank) { xlinecheck(start, stop); if (issprites && (currprefs.chipset_mask & CSMASK_AGA)) { if (res_shift == 0) { switch (gfxvidinfo.drawbuffer.pixbytes) { case 2: src_pixel = linetoscr_16_aga_spr (LTPARMS); break; case 4: src_pixel = linetoscr_32_aga_spr (LTPARMS); break; } } else if (res_shift == 2) { switch (gfxvidinfo.drawbuffer.pixbytes) { case 2: src_pixel = linetoscr_16_stretch2_aga_spr (LTPARMS); break; case 4: src_pixel = linetoscr_32_stretch2_aga_spr (LTPARMS); break; } } else if (res_shift == 1) { switch (gfxvidinfo.drawbuffer.pixbytes) { case 2: src_pixel = linetoscr_16_stretch1_aga_spr (LTPARMS); break; case 4: src_pixel = linetoscr_32_stretch1_aga_spr (LTPARMS); break; } } else if (res_shift == -1) { if (currprefs.gfx_lores_mode) { switch (gfxvidinfo.drawbuffer.pixbytes) { case 2: src_pixel = linetoscr_16_shrink1f_aga_spr (LTPARMS); break; case 4: src_pixel = linetoscr_32_shrink1f_aga_spr (LTPARMS); break; } } else { switch (gfxvidinfo.drawbuffer.pixbytes) { case 2: src_pixel = linetoscr_16_shrink1_aga_spr (LTPARMS); break; case 4: src_pixel = linetoscr_32_shrink1_aga_spr (LTPARMS); break; } } } else if (res_shift == -2) { if (currprefs.gfx_lores_mode) { switch (gfxvidinfo.drawbuffer.pixbytes) { case 2: src_pixel = linetoscr_16_shrink2f_aga_spr (LTPARMS); break; case 4: src_pixel = linetoscr_32_shrink2f_aga_spr (LTPARMS); break; } } else { switch (gfxvidinfo.drawbuffer.pixbytes) { case 2: src_pixel = linetoscr_16_shrink2_aga_spr (LTPARMS); break; case 4: src_pixel = linetoscr_32_shrink2_aga_spr (LTPARMS); break; } } } } else #ifdef AGA if (currprefs.chipset_mask & CSMASK_AGA) { if (res_shift == 0) { switch (gfxvidinfo.drawbuffer.pixbytes) { case 2: src_pixel = linetoscr_16_aga (LTPARMS); break; case 4: src_pixel = linetoscr_32_aga (LTPARMS); break; } } else if (res_shift == 2) { switch (gfxvidinfo.drawbuffer.pixbytes) { case 2: src_pixel = linetoscr_16_stretch2_aga (LTPARMS); break; case 4: src_pixel = linetoscr_32_stretch2_aga (LTPARMS); break; } } else if (res_shift == 1) { switch (gfxvidinfo.drawbuffer.pixbytes) { case 2: src_pixel = linetoscr_16_stretch1_aga (LTPARMS); break; case 4: src_pixel = linetoscr_32_stretch1_aga (LTPARMS); break; } } else if (res_shift == -1) { if (currprefs.gfx_lores_mode) { switch (gfxvidinfo.drawbuffer.pixbytes) { case 2: src_pixel = linetoscr_16_shrink1f_aga (LTPARMS); break; case 4: src_pixel = linetoscr_32_shrink1f_aga (LTPARMS); break; } } else { switch (gfxvidinfo.drawbuffer.pixbytes) { case 2: src_pixel = linetoscr_16_shrink1_aga (LTPARMS); break; case 4: src_pixel = linetoscr_32_shrink1_aga (LTPARMS); break; } } } else if (res_shift == -2) { if (currprefs.gfx_lores_mode) { switch (gfxvidinfo.drawbuffer.pixbytes) { case 2: src_pixel = linetoscr_16_shrink2f_aga (LTPARMS); break; case 4: src_pixel = linetoscr_32_shrink2f_aga (LTPARMS); break; } } else { switch (gfxvidinfo.drawbuffer.pixbytes) { case 2: src_pixel = linetoscr_16_shrink2_aga (LTPARMS); break; case 4: src_pixel = linetoscr_32_shrink2_aga (LTPARMS); break; } } } } else #endif #ifdef ECS_DENISE if (ecsshres) { if (res_shift == 0) { switch (gfxvidinfo.drawbuffer.pixbytes) { case 2: src_pixel = linetoscr_16_sh (LTPARMS, issprites); break; case 4: src_pixel = linetoscr_32_sh (LTPARMS, issprites); break; } } else if (res_shift == -1) { if (currprefs.gfx_lores_mode) { switch (gfxvidinfo.drawbuffer.pixbytes) { case 2: src_pixel = linetoscr_16_shrink1f_sh (LTPARMS, issprites); break; case 4: src_pixel = linetoscr_32_shrink1f_sh (LTPARMS, issprites); break; } } else { switch (gfxvidinfo.drawbuffer.pixbytes) { case 2: src_pixel = linetoscr_16_shrink1_sh (LTPARMS, issprites); break; case 4: src_pixel = linetoscr_32_shrink1_sh (LTPARMS, issprites); break; } } } else if (res_shift == -2) { if (currprefs.gfx_lores_mode) { switch (gfxvidinfo.drawbuffer.pixbytes) { case 2: src_pixel = linetoscr_16_shrink2f_sh (LTPARMS, issprites); break; case 4: src_pixel = linetoscr_32_shrink2f_sh (LTPARMS, issprites); break; } } else { switch (gfxvidinfo.drawbuffer.pixbytes) { case 2: src_pixel = linetoscr_16_shrink2_sh (LTPARMS, issprites); break; case 4: src_pixel = linetoscr_32_shrink2_sh (LTPARMS, issprites); break; } } } } else #endif if (issprites) { if (res_shift == 0) { switch (gfxvidinfo.drawbuffer.pixbytes) { case 2: src_pixel = linetoscr_16_spr (LTPARMS); break; case 4: src_pixel = linetoscr_32_spr (LTPARMS); break; } } else if (res_shift == 2) { switch (gfxvidinfo.drawbuffer.pixbytes) { case 2: src_pixel = linetoscr_16_stretch2_spr (LTPARMS); break; case 4: src_pixel = linetoscr_32_stretch2_spr (LTPARMS); break; } } else if (res_shift == 1) { switch (gfxvidinfo.drawbuffer.pixbytes) { case 2: src_pixel = linetoscr_16_stretch1_spr (LTPARMS); break; case 4: src_pixel = linetoscr_32_stretch1_spr (LTPARMS); break; } } else if (res_shift == -1) { if (currprefs.gfx_lores_mode) { switch (gfxvidinfo.drawbuffer.pixbytes) { case 2: src_pixel = linetoscr_16_shrink1f_spr (LTPARMS); break; case 4: src_pixel = linetoscr_32_shrink1f_spr (LTPARMS); break; } } else { switch (gfxvidinfo.drawbuffer.pixbytes) { case 2: src_pixel = linetoscr_16_shrink1_spr (LTPARMS); break; case 4: src_pixel = linetoscr_32_shrink1_spr (LTPARMS); break; } } } } else { if (res_shift == 0) { switch (gfxvidinfo.drawbuffer.pixbytes) { case 2: src_pixel = linetoscr_16 (LTPARMS); break; case 4: src_pixel = linetoscr_32 (LTPARMS); break; } } else if (res_shift == 2) { switch (gfxvidinfo.drawbuffer.pixbytes) { case 2: src_pixel = linetoscr_16_stretch2 (LTPARMS); break; case 4: src_pixel = linetoscr_32_stretch2 (LTPARMS); break; } } else if (res_shift == 1) { switch (gfxvidinfo.drawbuffer.pixbytes) { case 2: src_pixel = linetoscr_16_stretch1 (LTPARMS); break; case 4: src_pixel = linetoscr_32_stretch1 (LTPARMS); break; } } else if (res_shift == -1) { if (currprefs.gfx_lores_mode) { switch (gfxvidinfo.drawbuffer.pixbytes) { case 2: src_pixel = linetoscr_16_shrink1f (LTPARMS); break; case 4: src_pixel = linetoscr_32_shrink1f (LTPARMS); break; } } else { switch (gfxvidinfo.drawbuffer.pixbytes) { case 2: src_pixel = linetoscr_16_shrink1 (LTPARMS); break; case 4: src_pixel = linetoscr_32_shrink1 (LTPARMS); break; } } } } } static void dummy_worker (int start, int stop, bool blank) { } static int ham_decode_pixel; static unsigned int ham_lastcolor; /* Decode HAM in the invisible portion of the display (left of VISIBLE_LEFT_BORDER), * but don't draw anything in. This is done to prepare HAM_LASTCOLOR for later, * when decode_ham runs. * */ static void init_ham_decoding (void) { int unpainted_amiga = unpainted; ham_decode_pixel = ham_src_pixel; ham_lastcolor = color_reg_get (&colors_for_drawing, 0); if (!bplham) { if (unpainted_amiga > 0) { int pv = pixdata.apixels[ham_decode_pixel + unpainted_amiga - 1]; #ifdef AGA if (currprefs.chipset_mask & CSMASK_AGA) ham_lastcolor = colors_for_drawing.color_regs_aga[pv ^ bplxor]; else #endif ham_lastcolor = colors_for_drawing.color_regs_ecs[pv]; } #ifdef AGA } else if (currprefs.chipset_mask & CSMASK_AGA) { if (bplplanecnt >= 7) { /* AGA mode HAM8 */ while (unpainted_amiga-- > 0) { int pv = pixdata.apixels[ham_decode_pixel++] ^ bplxor; switch (pv & 0x3) { case 0x0: ham_lastcolor = colors_for_drawing.color_regs_aga[pv >> 2]; break; case 0x1: ham_lastcolor &= 0xFFFF03; ham_lastcolor |= (pv & 0xFC); break; case 0x2: ham_lastcolor &= 0x03FFFF; ham_lastcolor |= (pv & 0xFC) << 16; break; case 0x3: ham_lastcolor &= 0xFF03FF; ham_lastcolor |= (pv & 0xFC) << 8; break; } } } else { /* AGA mode HAM6 */ while (unpainted_amiga-- > 0) { int pv = pixdata.apixels[ham_decode_pixel++] ^ bplxor; switch (pv & 0x30) { case 0x00: ham_lastcolor = colors_for_drawing.color_regs_aga[pv]; 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; } } } #endif } else { /* OCS/ECS mode HAM6 */ while (unpainted_amiga-- > 0) { int pv = pixdata.apixels[ham_decode_pixel++]; switch (pv & 0x30) { case 0x00: ham_lastcolor = colors_for_drawing.color_regs_ecs[pv]; break; case 0x10: ham_lastcolor &= 0xFF0; ham_lastcolor |= (pv & 0xF); break; case 0x20: ham_lastcolor &= 0x0FF; ham_lastcolor |= (pv & 0xF) << 8; break; case 0x30: ham_lastcolor &= 0xF0F; ham_lastcolor |= (pv & 0xF) << 4; break; } } } } static void decode_ham (int pix, int stoppos, bool blank) { int todraw_amiga = res_shift_from_window (stoppos - pix); if (!bplham) { while (todraw_amiga-- > 0) { int pv = pixdata.apixels[ham_decode_pixel]; #ifdef AGA if (currprefs.chipset_mask & CSMASK_AGA) ham_lastcolor = colors_for_drawing.color_regs_aga[pv ^ bplxor]; else #endif ham_lastcolor = colors_for_drawing.color_regs_ecs[pv]; ham_linebuf[ham_decode_pixel++] = ham_lastcolor; } #ifdef AGA } else if (currprefs.chipset_mask & CSMASK_AGA) { if (bplplanecnt >= 7) { /* AGA mode HAM8 */ while (todraw_amiga-- > 0) { int pv = pixdata.apixels[ham_decode_pixel] ^ bplxor; switch (pv & 0x3) { case 0x0: ham_lastcolor = colors_for_drawing.color_regs_aga[pv >> 2]; break; case 0x1: ham_lastcolor &= 0xFFFF03; ham_lastcolor |= (pv & 0xFC); break; case 0x2: ham_lastcolor &= 0x03FFFF; ham_lastcolor |= (pv & 0xFC) << 16; break; case 0x3: ham_lastcolor &= 0xFF03FF; ham_lastcolor |= (pv & 0xFC) << 8; break; } ham_linebuf[ham_decode_pixel++] = ham_lastcolor; } } else { /* AGA mode HAM6 */ while (todraw_amiga-- > 0) { int pv = pixdata.apixels[ham_decode_pixel] ^ bplxor; switch (pv & 0x30) { case 0x00: ham_lastcolor = colors_for_drawing.color_regs_aga[pv]; 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; } ham_linebuf[ham_decode_pixel++] = ham_lastcolor; } } #endif } else { /* OCS/ECS mode HAM6 */ while (todraw_amiga-- > 0) { int pv = pixdata.apixels[ham_decode_pixel]; switch (pv & 0x30) { case 0x00: ham_lastcolor = colors_for_drawing.color_regs_ecs[pv]; break; case 0x10: ham_lastcolor &= 0xFF0; ham_lastcolor |= (pv & 0xF); break; case 0x20: ham_lastcolor &= 0x0FF; ham_lastcolor |= (pv & 0xF) << 8; break; case 0x30: ham_lastcolor &= 0xF0F; ham_lastcolor |= (pv & 0xF) << 4; break; } ham_linebuf[ham_decode_pixel++] = ham_lastcolor; } } } static void gen_pfield_tables (void) { int i; for (i = 0; i < 256; i++) { int plane1 = ((i >> 0) & 1) | ((i >> 1) & 2) | ((i >> 2) & 4) | ((i >> 3) & 8); int plane2 = ((i >> 1) & 1) | ((i >> 2) & 2) | ((i >> 3) & 4) | ((i >> 4) & 8); dblpf_2nd1[i] = plane1 == 0 && plane2 != 0; dblpf_2nd2[i] = plane2 != 0; #ifdef AGA dblpf_ind1_aga[i] = plane1 == 0 ? plane2 : plane1; dblpf_ind2_aga[i] = plane2 == 0 ? plane1 : plane2; #endif dblpf_ms1[i] = plane1 == 0 ? (plane2 == 0 ? 16 : 8) : 0; dblpf_ms2[i] = plane2 == 0 ? (plane1 == 0 ? 16 : 0) : 8; dblpf_ms[i] = i == 0 ? 16 : 8; if (plane2 > 0) plane2 += 8; dblpf_ind1[i] = i >= 128 ? i & 0x7F : (plane1 == 0 ? plane2 : plane1); dblpf_ind2[i] = i >= 128 ? i & 0x7F : (plane2 == 0 ? plane1 : plane2); sprite_offs[i] = (i & 15) ? 0 : 2; clxtab[i] = ((((i & 3) && (i & 12)) << 9) | (((i & 3) && (i & 48)) << 10) | (((i & 3) && (i & 192)) << 11) | (((i & 12) && (i & 48)) << 12) | (((i & 12) && (i & 192)) << 13) | (((i & 48) && (i & 192)) << 14)); } memset (all_ones, 0xff, MAX_PIXELS_PER_LINE); } /* When looking at this function and the ones that inline it, bear in mind what an optimizing compiler will do with this code. All callers of this function only pass in constant arguments (except for E). This means that many of the if statements will go away completely after inlining. */ STATIC_INLINE void draw_sprites_1 (struct sprite_entry *e, int dualpf, int has_attach) { uae_u16 *buf = spixels + e->first_pixel; uae_u8 *stbuf = spixstate.bytes + e->first_pixel; int spr_pos, pos; buf -= e->pos; stbuf -= e->pos; spr_pos = e->pos + ((DIW_DDF_OFFSET - DISPLAY_LEFT_SHIFT) << sprite_buffer_res); if (spr_pos < sprite_first_x) sprite_first_x = spr_pos; for (pos = e->pos; pos < e->max; pos++, spr_pos++) { if (spr_pos >= 0 && spr_pos < MAX_PIXELS_PER_LINE) { spritepixels[spr_pos].data = buf[pos]; spritepixels[spr_pos].stdata = stbuf[pos]; spritepixels[spr_pos].attach = has_attach; } } if (spr_pos > sprite_last_x) sprite_last_x = spr_pos; } /* See comments above. Do not touch if you don't know what's going on. * (We do _not_ want the following to be inlined themselves). */ /* lores bitplane, lores sprites */ static void NOINLINE draw_sprites_normal_sp_nat (struct sprite_entry *e) { draw_sprites_1 (e, 0, 0); } static void NOINLINE draw_sprites_normal_dp_nat (struct sprite_entry *e) { draw_sprites_1 (e, 1, 0); } static void NOINLINE draw_sprites_normal_sp_at (struct sprite_entry *e) { draw_sprites_1 (e, 0, 1); } static void NOINLINE draw_sprites_normal_dp_at (struct sprite_entry *e) { draw_sprites_1 (e, 1, 1); } #ifdef AGA /* not very optimized */ STATIC_INLINE void draw_sprites_aga (struct sprite_entry *e, int aga) { draw_sprites_1 (e, bpldualpf, e->has_attached); } #endif STATIC_INLINE void draw_sprites_ecs (struct sprite_entry *e) { if (e->has_attached) { if (bpldualpf) draw_sprites_normal_dp_at (e); else draw_sprites_normal_sp_at (e); } else { if (bpldualpf) draw_sprites_normal_dp_nat (e); else draw_sprites_normal_sp_nat (e); } } #ifdef AGA /* clear possible bitplane data outside DIW area */ static void clear_bitplane_border_aga (void) { int len, shift = res_shift; uae_u8 v = 0; if (shift < 0) { shift = -shift; len = (real_playfield_start - playfield_start) << shift; memset (pixdata.apixels + pixels_offset + (playfield_start << shift), v, len); len = (playfield_end - real_playfield_end) << shift; memset (pixdata.apixels + pixels_offset + (real_playfield_end << shift), v, len); } else { len = (real_playfield_start - playfield_start) >> shift; memset (pixdata.apixels + pixels_offset + (playfield_start >> shift), v, len); len = (playfield_end - real_playfield_end) >> shift; memset (pixdata.apixels + pixels_offset + (real_playfield_end >> shift), v, len); } } #endif /* emulate OCS/ECS only undocumented "SWIV" hardware feature */ static void weird_bitplane_fix (void) { int i; int sh = lores_shift; uae_u8 *p = pixdata.apixels + pixels_offset; for (i = playfield_start >> sh; i < playfield_end >> sh; i++) { if (p[i] > 16) p[i] = 16; } } #define MERGE(a,b,mask,shift) do {\ uae_u32 tmp = mask & (a ^ (b >> shift)); \ a ^= tmp; \ b ^= (tmp << shift); \ } while (0) #define GETLONG(P) (*(uae_u32 *)P) /* We use the compiler's inlining ability to ensure that PLANES is in effect a compile time constant. That will cause some unnecessary code to be optimized away. Don't touch this if you don't know what you are doing. */ STATIC_INLINE void pfield_doline_1 (uae_u32 *pixels, int wordcount, int planes) { while (wordcount-- > 0) { uae_u32 b0, b1, b2, b3, b4, b5, b6, b7; b0 = 0, b1 = 0, b2 = 0, b3 = 0, b4 = 0, b5 = 0, b6 = 0, b7 = 0; switch (planes) { #ifdef AGA case 8: b0 = GETLONG (real_bplpt[7]); real_bplpt[7] += 4; case 7: b1 = GETLONG (real_bplpt[6]); real_bplpt[6] += 4; #endif case 6: b2 = GETLONG (real_bplpt[5]); real_bplpt[5] += 4; case 5: b3 = GETLONG (real_bplpt[4]); real_bplpt[4] += 4; case 4: b4 = GETLONG (real_bplpt[3]); real_bplpt[3] += 4; case 3: b5 = GETLONG (real_bplpt[2]); real_bplpt[2] += 4; case 2: b6 = GETLONG (real_bplpt[1]); real_bplpt[1] += 4; case 1: b7 = GETLONG (real_bplpt[0]); real_bplpt[0] += 4; } MERGE (b0, b1, 0x55555555, 1); MERGE (b2, b3, 0x55555555, 1); MERGE (b4, b5, 0x55555555, 1); MERGE (b6, b7, 0x55555555, 1); MERGE (b0, b2, 0x33333333, 2); MERGE (b1, b3, 0x33333333, 2); MERGE (b4, b6, 0x33333333, 2); MERGE (b5, b7, 0x33333333, 2); MERGE (b0, b4, 0x0f0f0f0f, 4); MERGE (b1, b5, 0x0f0f0f0f, 4); MERGE (b2, b6, 0x0f0f0f0f, 4); MERGE (b3, b7, 0x0f0f0f0f, 4); MERGE (b0, b1, 0x00ff00ff, 8); MERGE (b2, b3, 0x00ff00ff, 8); MERGE (b4, b5, 0x00ff00ff, 8); MERGE (b6, b7, 0x00ff00ff, 8); MERGE (b0, b2, 0x0000ffff, 16); do_put_mem_long (pixels, b0); do_put_mem_long (pixels + 4, b2); MERGE (b1, b3, 0x0000ffff, 16); do_put_mem_long (pixels + 2, b1); do_put_mem_long (pixels + 6, b3); MERGE (b4, b6, 0x0000ffff, 16); do_put_mem_long (pixels + 1, b4); do_put_mem_long (pixels + 5, b6); MERGE (b5, b7, 0x0000ffff, 16); do_put_mem_long (pixels + 3, b5); do_put_mem_long (pixels + 7, b7); pixels += 8; } } /* See above for comments on inlining. These functions should _not_ be inlined themselves. */ static void NOINLINE pfield_doline_n1 (uae_u32 *data, int count) { pfield_doline_1 (data, count, 1); } static void NOINLINE pfield_doline_n2 (uae_u32 *data, int count) { pfield_doline_1 (data, count, 2); } static void NOINLINE pfield_doline_n3 (uae_u32 *data, int count) { pfield_doline_1 (data, count, 3); } static void NOINLINE pfield_doline_n4 (uae_u32 *data, int count) { pfield_doline_1 (data, count, 4); } static void NOINLINE pfield_doline_n5 (uae_u32 *data, int count) { pfield_doline_1 (data, count, 5); } static void NOINLINE pfield_doline_n6 (uae_u32 *data, int count) { pfield_doline_1 (data, count, 6); } #ifdef AGA static void NOINLINE pfield_doline_n7 (uae_u32 *data, int count) { pfield_doline_1 (data, count, 7); } static void NOINLINE pfield_doline_n8 (uae_u32 *data, int count) { pfield_doline_1 (data, count, 8); } #endif static void pfield_doline (int lineno) { int wordcount = dp_for_drawing->plflinelen; uae_u32 *data = pixdata.apixels_l + MAX_PIXELS_PER_LINE / 4; #ifdef SMART_UPDATE #define DATA_POINTER(n) ((debug_bpl_mask & (1 << n)) ? (line_data[lineno] + (n) * MAX_WORDS_PER_LINE * 2) : (debug_bpl_mask_one ? all_ones : all_zeros)) real_bplpt[0] = DATA_POINTER (0); real_bplpt[1] = DATA_POINTER (1); real_bplpt[2] = DATA_POINTER (2); real_bplpt[3] = DATA_POINTER (3); real_bplpt[4] = DATA_POINTER (4); real_bplpt[5] = DATA_POINTER (5); #ifdef AGA real_bplpt[6] = DATA_POINTER (6); real_bplpt[7] = DATA_POINTER (7); #endif #endif switch (bplplanecnt) { default: break; case 0: memset (data, 0, wordcount * 32); break; case 1: pfield_doline_n1 (data, wordcount); break; case 2: pfield_doline_n2 (data, wordcount); break; case 3: pfield_doline_n3 (data, wordcount); break; case 4: pfield_doline_n4 (data, wordcount); break; case 5: pfield_doline_n5 (data, wordcount); break; case 6: pfield_doline_n6 (data, wordcount); break; #ifdef AGA case 7: pfield_doline_n7 (data, wordcount); break; case 8: pfield_doline_n8 (data, wordcount); break; #endif } } void init_row_map (void) { static uae_u8 *oldbufmem; static int oldheight, oldpitch; int i, j; if (gfxvidinfo.drawbuffer.height_allocated > MAX_VIDHEIGHT) { write_log (_T("Resolution too high, aborting\n")); abort (); } if (oldbufmem && oldbufmem == gfxvidinfo.drawbuffer.bufmem && oldheight == gfxvidinfo.drawbuffer.height_allocated && oldpitch == gfxvidinfo.drawbuffer.rowbytes) return; oldbufmem = gfxvidinfo.drawbuffer.bufmem; oldheight = gfxvidinfo.drawbuffer.height_allocated; oldpitch = gfxvidinfo.drawbuffer.rowbytes; j = 0; for (i = gfxvidinfo.drawbuffer.height_allocated; i < MAX_VIDHEIGHT + 1; i++) row_map[i] = row_tmp; for (i = 0; i < gfxvidinfo.drawbuffer.height_allocated; i++, j += gfxvidinfo.drawbuffer.rowbytes) row_map[i] = gfxvidinfo.drawbuffer.bufmem + j; } void init_aspect_maps (void) { int i, maxl, h; h = gfxvidinfo.drawbuffer.height_allocated; if (h == 0) /* Do nothing if the gfx driver hasn't initialized the screen yet */ return; linedbld = linedbl = currprefs.gfx_vresolution; if (doublescan > 0 && interlace_seen <= 0) { linedbl = 0; linedbld = 1; } if (native2amiga_line_map) xfree (native2amiga_line_map); if (amiga2aspect_line_map) xfree (amiga2aspect_line_map); /* At least for this array the +1 is necessary. */ amiga2aspect_line_map = xmalloc (int, (MAXVPOS + 1) * 2 + 1); native2amiga_line_map = xmalloc (int, h); maxl = (MAXVPOS + 1) << linedbld; min_ypos_for_screen = minfirstline << linedbl; max_drawn_amiga_line = -1; for (i = 0; i < maxl; i++) { int v = i - min_ypos_for_screen; if (v >= h && max_drawn_amiga_line < 0) max_drawn_amiga_line = i - min_ypos_for_screen; if (i < min_ypos_for_screen || v >= h) v = -1; amiga2aspect_line_map[i] = v; } if (max_drawn_amiga_line < 0) max_drawn_amiga_line = maxl - min_ypos_for_screen; max_drawn_amiga_line >>= linedbl; if (currprefs.gfx_ycenter && !currprefs.gfx_filter_autoscale) { /* @@@ verify maxvpos vs. MAXVPOS */ extra_y_adjust = (h - (maxvpos_nom << linedbl)) >> 1; if (extra_y_adjust < 0) extra_y_adjust = 0; } for (i = 0; i < h; i++) native2amiga_line_map[i] = -1; for (i = maxl - 1; i >= min_ypos_for_screen; i--) { int j; if (amiga2aspect_line_map[i] == -1) continue; for (j = amiga2aspect_line_map[i]; j < h && native2amiga_line_map[j] == -1; j++) native2amiga_line_map[j] = i >> linedbl; } gfxvidinfo.xchange = 1 << (RES_MAX - currprefs.gfx_resolution); gfxvidinfo.ychange = linedbl ? 1 : 2; visible_left_start = 0; visible_right_stop = MAX_STOP; visible_top_start = 0; visible_bottom_stop = MAX_STOP; } /* * A raster line has been built in the graphics buffer. Tell the graphics code * to do anything necessary to display it. */ static void do_flush_line_1 (struct vidbuffer *vb, int lineno) { if (lineno < first_drawn_line) first_drawn_line = lineno; if (lineno > last_drawn_line) last_drawn_line = lineno; if (gfxvidinfo.maxblocklines == 0) flush_line (vb, lineno); else { if ((last_block_line + 2) < lineno) { if (first_block_line != NO_BLOCK) flush_block (vb, first_block_line, last_block_line); first_block_line = lineno; } last_block_line = lineno; if (last_block_line - first_block_line >= gfxvidinfo.maxblocklines) { flush_block (vb, first_block_line, last_block_line); first_block_line = last_block_line = NO_BLOCK; } } } STATIC_INLINE void do_flush_line (struct vidbuffer *vb, int lineno) { do_flush_line_1 (vb, lineno); } /* * One drawing frame has been finished. Tell the graphics code about it. * Note that the actual flush_screen() call is a no-op for all reasonable * systems. */ STATIC_INLINE void do_flush_screen (struct vidbuffer *vb, int start, int stop) { /* TODO: this flush operation is executed outside locked state! Should be corrected. (sjo 26.9.99) */ if (vb != gfxvidinfo.outbuffer) return; xlinecheck (start, stop); if (gfxvidinfo.maxblocklines != 0 && first_block_line != NO_BLOCK) { flush_block (vb, first_block_line, last_block_line); } unlockscr (vb); if (start <= stop) flush_screen (vb, start, stop); else if (isvsync_chipset ()) flush_screen (vb, 0, 0); /* vsync mode */ } /* We only save hardware registers during the hardware frame. Now, when * drawing the frame, we expand the data into a slightly more useful * form. */ static void pfield_expand_dp_bplcon (void) { static int b2; bplres = dp_for_drawing->bplres; bplplanecnt = dp_for_drawing->nr_planes; bplham = dp_for_drawing->ham_seen; bplehb = dp_for_drawing->ehb_seen; if ((currprefs.chipset_mask & CSMASK_AGA) && (dp_for_drawing->bplcon2 & 0x0200)) bplehb = 0; issprites = dip_for_drawing->nr_sprites; #ifdef ECS_DENISE ecsshres = bplres == RES_SUPERHIRES && (currprefs.chipset_mask & CSMASK_ECS_DENISE) && !(currprefs.chipset_mask & CSMASK_AGA); #endif plf1pri = dp_for_drawing->bplcon2 & 7; plf2pri = (dp_for_drawing->bplcon2 >> 3) & 7; plf_sprite_mask = 0xFFFF0000 << (4 * plf2pri); plf_sprite_mask |= (0x0000FFFF << (4 * plf1pri)) & 0xFFFF; bpldualpf = (dp_for_drawing->bplcon0 & 0x400) == 0x400; bpldualpfpri = (dp_for_drawing->bplcon2 & 0x40) == 0x40; #ifdef AGA bpldualpf2of = (dp_for_drawing->bplcon3 >> 10) & 7; sbasecol[0] = ((dp_for_drawing->bplcon4 >> 4) & 15) << 4; sbasecol[1] = ((dp_for_drawing->bplcon4 >> 0) & 15) << 4; brdsprt = !brdblank && (currprefs.chipset_mask & CSMASK_AGA) && (dp_for_drawing->bplcon0 & 1) && (dp_for_drawing->bplcon3 & 0x02); bplxor = dp_for_drawing->bplcon4 >> 8; #endif } static bool isham (uae_u16 bplcon0) { int p = GET_PLANES (bplcon0); if (!(bplcon0 & 0x800)) return 0; if (currprefs.chipset_mask & CSMASK_AGA) { // AGA only has 6 or 8 plane HAM if (p == 6 || p == 8) return 1; } else { // OCS/ECS also supports 5 plane HAM if (GET_RES_DENISE (bplcon0) > 0) return 0; if (p >= 5) return 1; } return 0; } static void pfield_expand_dp_bplconx (int regno, int v) { if (regno == 0xffff) { hposblank = 1; return; } regno -= 0x1000; switch (regno) { case 0x100: dp_for_drawing->bplcon0 = v; dp_for_drawing->bplres = GET_RES_DENISE (v); dp_for_drawing->nr_planes = GET_PLANES (v); dp_for_drawing->ham_seen = isham (v); break; case 0x104: dp_for_drawing->bplcon2 = v; break; #ifdef ECS_DENISE case 0x106: dp_for_drawing->bplcon3 = v; break; #endif #ifdef AGA case 0x10c: dp_for_drawing->bplcon4 = v; break; #endif } pfield_expand_dp_bplcon (); res_shift = lores_shift - bplres; } static int drawing_color_matches; static enum { color_match_acolors, color_match_full } color_match_type; /* Set up colors_for_drawing to the state at the beginning of the currently drawn line. Try to avoid copying color tables around whenever possible. */ static void adjust_drawing_colors (int ctable, int need_full) { if (drawing_color_matches != ctable) { if (need_full) { color_reg_cpy (&colors_for_drawing, curr_color_tables + ctable); color_match_type = color_match_full; } else { memcpy (colors_for_drawing.acolors, curr_color_tables[ctable].acolors, sizeof colors_for_drawing.acolors); colors_for_drawing.borderblank = curr_color_tables[ctable].borderblank; color_match_type = color_match_acolors; } drawing_color_matches = ctable; } else if (need_full && color_match_type != color_match_full) { color_reg_cpy (&colors_for_drawing, &curr_color_tables[ctable]); color_match_type = color_match_full; } } static void do_color_changes (line_draw_func worker_border, line_draw_func worker_pfield, int vp) { int i; int lastpos = visible_left_border; int endpos = visible_left_border + gfxvidinfo.drawbuffer.inwidth; for (i = dip_for_drawing->first_color_change; i <= dip_for_drawing->last_color_change; i++) { int regno = curr_color_changes[i].regno; unsigned int value = curr_color_changes[i].value; int nextpos, nextpos_in_range; if (i == dip_for_drawing->last_color_change) nextpos = endpos; else nextpos = coord_hw_to_window_x (curr_color_changes[i].linepos); nextpos_in_range = nextpos; if (nextpos > endpos) nextpos_in_range = endpos; if (nextpos_in_range > lastpos) { if (lastpos < playfield_start) { int t = nextpos_in_range <= playfield_start ? nextpos_in_range : playfield_start; (*worker_border) (lastpos, t, false); lastpos = t; } } if (nextpos_in_range > lastpos) { if (lastpos >= playfield_start && lastpos < playfield_end) { int t = nextpos_in_range <= playfield_end ? nextpos_in_range : playfield_end; (*worker_pfield) (lastpos, t, false); /* blank start and end that shouldn't be visible */ if (lastpos < visible_left_start) (*worker_border) (lastpos, visible_left_start, true); if (t > visible_right_stop) (*worker_border) (visible_right_stop, endpos, true); lastpos = t; } } if (nextpos_in_range > lastpos) { if (lastpos >= playfield_end) (*worker_border) (lastpos, nextpos_in_range, false); lastpos = nextpos_in_range; } if (regno >= 0x1000) { pfield_expand_dp_bplconx (regno, value); } else if (regno >= 0) { if (regno == 0 && (value & COLOR_CHANGE_BRDBLANK)) { colors_for_drawing.borderblank = (value & 1) != 0; } else { color_reg_set (&colors_for_drawing, regno, value); colors_for_drawing.acolors[regno] = getxcolor (value); } } if (lastpos >= endpos) break; } if (vp < visible_top_start || vp >= visible_bottom_stop) { // outside of visible area // Just overwrite with black. Above code needs to run because of custom registers, // not worth the trouble for separate code path just for max 10 lines or so (*worker_border) (visible_left_border, visible_left_border + gfxvidinfo.drawbuffer.inwidth, true); } } enum double_how { dh_buf, dh_line, dh_emerg }; static void pfield_draw_line (struct vidbuffer *vb, int lineno, int gfx_ypos, int follow_ypos) { static int warned = 0; int border = 0; int do_double = 0; enum double_how dh; dp_for_drawing = line_decisions + lineno; dip_for_drawing = curr_drawinfo + lineno; switch (linestate[lineno]) { case LINE_REMEMBERED_AS_PREVIOUS: // if (!warned) // happens when program messes up with VPOSW // write_log (_T("Shouldn't get here... this is a bug.\n")), warned++; return; case LINE_BLACK: linestate[lineno] = LINE_REMEMBERED_AS_BLACK; border = 2; break; case LINE_REMEMBERED_AS_BLACK: return; case LINE_AS_PREVIOUS: dp_for_drawing--; dip_for_drawing--; linestate[lineno] = LINE_DONE_AS_PREVIOUS; if (dp_for_drawing->plfleft < 0) border = 1; break; case LINE_DONE_AS_PREVIOUS: /* fall through */ case LINE_DONE: return; case LINE_DECIDED_DOUBLE: if (follow_ypos >= 0) { do_double = 1; linestate[lineno + 1] = LINE_DONE_AS_PREVIOUS; } /* fall through */ default: if (dp_for_drawing->plfleft < 0) border = 1; linestate[lineno] = LINE_DONE; break; } dh = dh_line; xlinebuffer = gfxvidinfo.drawbuffer.linemem; if (xlinebuffer == 0 && do_double && (border == 0 || dip_for_drawing->nr_color_changes > 0)) xlinebuffer = gfxvidinfo.drawbuffer.emergmem, dh = dh_emerg; if (xlinebuffer == 0) xlinebuffer = row_map[gfx_ypos], dh = dh_buf; xlinebuffer -= linetoscr_x_adjust_bytes; if (border == 0) { pfield_expand_dp_bplcon (); pfield_init_linetoscr (); pfield_doline (lineno); adjust_drawing_colors (dp_for_drawing->ctable, dp_for_drawing->ham_seen || bplehb || ecsshres); /* The problem is that we must call decode_ham() BEFORE we do the sprites. */ if (dp_for_drawing->ham_seen) { init_ham_decoding (); if (dip_for_drawing->nr_color_changes == 0) { /* The easy case: need to do HAM decoding only once for the * full line. */ decode_ham (visible_left_border, visible_right_border, false); } else /* Argh. */ { do_color_changes (dummy_worker, decode_ham, lineno); adjust_drawing_colors (dp_for_drawing->ctable, dp_for_drawing->ham_seen || bplehb); } bplham = dp_for_drawing->ham_at_start; } if (plf2pri > 5 && bplplanecnt == 5 && !(currprefs.chipset_mask & CSMASK_AGA)) weird_bitplane_fix (); if (dip_for_drawing->nr_sprites) { int i; #ifdef AGA if (brdsprt) clear_bitplane_border_aga (); #endif for (i = 0; i < dip_for_drawing->nr_sprites; i++) { #ifdef AGA if (currprefs.chipset_mask & CSMASK_AGA) draw_sprites_aga (curr_sprite_entries + dip_for_drawing->first_sprite_entry + i, 1); else #endif draw_sprites_ecs (curr_sprite_entries + dip_for_drawing->first_sprite_entry + i); } } do_color_changes (pfield_do_fill_line, pfield_do_linetoscr, lineno); if (dh == dh_emerg) memcpy (row_map[gfx_ypos], xlinebuffer + linetoscr_x_adjust_bytes, gfxvidinfo.drawbuffer.pixbytes * gfxvidinfo.drawbuffer.inwidth); do_flush_line (vb, gfx_ypos); if (do_double) { if (dh == dh_emerg) memcpy (row_map[follow_ypos], xlinebuffer + linetoscr_x_adjust_bytes, gfxvidinfo.drawbuffer.pixbytes * gfxvidinfo.drawbuffer.inwidth); else if (dh == dh_buf) memcpy (row_map[follow_ypos], row_map[gfx_ypos], gfxvidinfo.drawbuffer.pixbytes * gfxvidinfo.drawbuffer.inwidth); do_flush_line (vb, follow_ypos); } } else if (border == 1) { int dosprites = 0; adjust_drawing_colors (dp_for_drawing->ctable, 0); #ifdef AGA /* this makes things complex.. */ if (brdsprt && dip_for_drawing->nr_sprites > 0) { dosprites = 1; pfield_expand_dp_bplcon (); pfield_init_linetoscr (); memset (pixdata.apixels + MAX_PIXELS_PER_LINE, colors_for_drawing.borderblank ? 0 : colors_for_drawing.acolors[0], MAX_PIXELS_PER_LINE); } #endif if (!dosprites && dip_for_drawing->nr_color_changes == 0) { fill_line (); do_flush_line (vb, gfx_ypos); if (do_double) { if (dh == dh_buf) { xlinebuffer = row_map[follow_ypos] - linetoscr_x_adjust_bytes; fill_line (); } /* If dh == dh_line, do_flush_line will re-use the rendered line * from linemem. */ do_flush_line (vb, follow_ypos); } return; } if (dosprites) { int i; for (i = 0; i < dip_for_drawing->nr_sprites; i++) draw_sprites_aga (curr_sprite_entries + dip_for_drawing->first_sprite_entry + i, 1); uae_u16 oxor = bplxor; memset (pixdata.apixels, 0, sizeof pixdata); bplxor = 0; do_color_changes (pfield_do_fill_line, pfield_do_linetoscr, lineno); bplxor = oxor; } else { playfield_start = visible_right_border; playfield_end = visible_right_border; do_color_changes (pfield_do_fill_line, pfield_do_fill_line, lineno); } if (dh == dh_emerg) memcpy (row_map[gfx_ypos], xlinebuffer + linetoscr_x_adjust_bytes, gfxvidinfo.drawbuffer.pixbytes * gfxvidinfo.drawbuffer.inwidth); do_flush_line (vb, gfx_ypos); if (do_double) { if (dh == dh_emerg) memcpy (row_map[follow_ypos], xlinebuffer + linetoscr_x_adjust_bytes, gfxvidinfo.drawbuffer.pixbytes * gfxvidinfo.drawbuffer.inwidth); else if (dh == dh_buf) memcpy (row_map[follow_ypos], row_map[gfx_ypos], gfxvidinfo.drawbuffer.pixbytes * gfxvidinfo.drawbuffer.inwidth); do_flush_line (vb, follow_ypos); } } else { int tmp = hposblank; //hposblank = brdblank; hposblank = colors_for_drawing.borderblank; fill_line (); do_flush_line (vb, gfx_ypos); hposblank = tmp; } } static void center_image (void) { int prev_x_adjust = visible_left_border; int prev_y_adjust = thisframe_y_adjust; int tmp; int w = gfxvidinfo.drawbuffer.inwidth; if (currprefs.gfx_xcenter && !currprefs.gfx_filter_autoscale && max_diwstop > 0) { if (max_diwstop - min_diwstart < w && currprefs.gfx_xcenter == 2) /* Try to center. */ visible_left_border = (max_diwstop - min_diwstart - w) / 2 + min_diwstart; else visible_left_border = max_diwstop - w - (max_diwstop - min_diwstart - w) / 2; visible_left_border &= ~((xshift (1, lores_shift)) - 1); /* Would the old value be good enough? If so, leave it as it is if we want to * be clever. */ if (currprefs.gfx_xcenter == 2) { if (center_reset || (visible_left_border < prev_x_adjust && prev_x_adjust < min_diwstart && min_diwstart - visible_left_border <= 32)) visible_left_border = prev_x_adjust; } } else if (gfxvidinfo.drawbuffer.extrawidth) { visible_left_border = max_diwlastword - w; if (gfxvidinfo.drawbuffer.extrawidth > 0) visible_left_border += gfxvidinfo.drawbuffer.extrawidth << currprefs.gfx_resolution; } else { if (gfxvidinfo.drawbuffer.inxoffset < 0) { visible_left_border = 0; } else { visible_left_border = gfxvidinfo.drawbuffer.inxoffset - DISPLAY_LEFT_SHIFT; } } if (visible_left_border > max_diwlastword - 32) visible_left_border = max_diwlastword - 32; if (visible_left_border < 0) visible_left_border = 0; visible_left_border &= ~((xshift (1, lores_shift)) - 1); //write_log (_T("%d %d %d %d %d\n"), max_diwlastword, gfxvidinfo.drawbuffer.width, lores_shift, currprefs.gfx_resolution, visible_left_border); linetoscr_x_adjust_bytes = visible_left_border * gfxvidinfo.drawbuffer.pixbytes; visible_right_border = visible_left_border + w; if (visible_right_border > max_diwlastword) visible_right_border = max_diwlastword; thisframe_y_adjust = minfirstline; if (currprefs.gfx_ycenter && thisframe_first_drawn_line >= 0 && !currprefs.gfx_filter_autoscale) { if (thisframe_last_drawn_line - thisframe_first_drawn_line < max_drawn_amiga_line && currprefs.gfx_ycenter == 2) thisframe_y_adjust = (thisframe_last_drawn_line - thisframe_first_drawn_line - max_drawn_amiga_line) / 2 + thisframe_first_drawn_line; else thisframe_y_adjust = thisframe_first_drawn_line + ((thisframe_last_drawn_line - thisframe_first_drawn_line) - max_drawn_amiga_line) / 2; /* Would the old value be good enough? If so, leave it as it is if we want to * be clever. */ if (currprefs.gfx_ycenter == 2) { if (center_reset || (thisframe_y_adjust != prev_y_adjust && prev_y_adjust <= thisframe_first_drawn_line && prev_y_adjust + max_drawn_amiga_line > thisframe_last_drawn_line)) thisframe_y_adjust = prev_y_adjust; } } /* Make sure the value makes sense */ if (thisframe_y_adjust + max_drawn_amiga_line > maxvpos_nom) thisframe_y_adjust = maxvpos_nom - max_drawn_amiga_line; if (thisframe_y_adjust < minfirstline) thisframe_y_adjust = minfirstline; thisframe_y_adjust_real = thisframe_y_adjust << linedbl; tmp = (maxvpos_nom - thisframe_y_adjust + 1) << linedbl; if (tmp != max_ypos_thisframe) { last_max_ypos = tmp; if (last_max_ypos < 0) last_max_ypos = 0; } max_ypos_thisframe = tmp; /* @@@ interlace_seen used to be (bplcon0 & 4), but this is probably * better. */ if (prev_x_adjust != visible_left_border || prev_y_adjust != thisframe_y_adjust) frame_redraw_necessary |= (interlace_seen > 0 && linedbl) ? 2 : 1; max_diwstop = 0; min_diwstart = MAX_STOP; gfxvidinfo.drawbuffer.xoffset = (DISPLAY_LEFT_SHIFT << RES_MAX) + (visible_left_border << (RES_MAX - currprefs.gfx_resolution)); gfxvidinfo.drawbuffer.yoffset = thisframe_y_adjust << VRES_MAX; center_reset = false; } #define FRAMES_UNTIL_RES_SWITCH 1 static int frame_res_cnt; static void init_drawing_frame (void) { int i, maxline; #if 1 static int frame_res_old; if (currprefs.gfx_autoresolution && frame_res >= 0 && frame_res_lace >= 0) { if (FRAMES_UNTIL_RES_SWITCH > 0 && frame_res_old == frame_res * 2 + frame_res_lace) { frame_res_cnt--; if (frame_res_cnt == 0) { int m = frame_res * 2 + frame_res_lace; struct wh *dst = currprefs.gfx_apmode[0].gfx_fullscreen ? &changed_prefs.gfx_size_fs : &changed_prefs.gfx_size_win; while (m < 3 * 2) { struct wh *src = currprefs.gfx_apmode[0].gfx_fullscreen ? &currprefs.gfx_size_fs_xtra[m] : &currprefs.gfx_size_win_xtra[m]; if ((src->width > 0 && src->height > 0) || (currprefs.gfx_api || currprefs.gfx_filter > 0)) { int nr = m >> 1; int nl = (m & 1) == 0 ? 0 : 1; int nr_o = nr; int nl_o = nl; if (currprefs.gfx_autoresolution_minh < 0) { if (nr < nl) nr = nl; } else if (nr < currprefs.gfx_autoresolution_minh) { nr = currprefs.gfx_autoresolution_minh; } if (currprefs.gfx_autoresolution_minv < 0) { if (nl < nr) nl = nr; } else if (nl < currprefs.gfx_autoresolution_minv) { nl = currprefs.gfx_autoresolution_minv; } if (nr > gfxvidinfo.gfx_resolution_reserved) nr = gfxvidinfo.gfx_resolution_reserved; if (nl > gfxvidinfo.gfx_vresolution_reserved) nl = gfxvidinfo.gfx_vresolution_reserved; if (changed_prefs.gfx_resolution != nr || changed_prefs.gfx_vresolution != nl) { changed_prefs.gfx_resolution = nr; changed_prefs.gfx_vresolution = nl; write_log (_T("RES -> %d (%d) LINE -> %d (%d) (%d - %d, %d - %d)\n"), nr, nr_o, nl, nl_o, currprefs.gfx_autoresolution_minh, currprefs.gfx_autoresolution_minv, gfxvidinfo.gfx_resolution_reserved, gfxvidinfo.gfx_vresolution_reserved); config_changed = 1; //activate_debugger (); } if (src->width > 0 && src->height > 0) { if (memcmp (dst, src, sizeof *dst)) { *dst = *src; config_changed = 1; } } break; } m++; } frame_res_cnt = FRAMES_UNTIL_RES_SWITCH; } } else { frame_res_old = frame_res * 2 + frame_res_lace; frame_res_cnt = FRAMES_UNTIL_RES_SWITCH; } } frame_res = -1; frame_res_lace = 0; if (can_use_lores > AUTO_LORES_FRAMES && 0) { lores_factor = 1; lores_shift = 0; } else { can_use_lores++; lores_reset (); } #endif init_hardware_for_drawing_frame (); if (thisframe_first_drawn_line < 0) thisframe_first_drawn_line = minfirstline; if (thisframe_first_drawn_line > thisframe_last_drawn_line) thisframe_last_drawn_line = thisframe_first_drawn_line; maxline = ((maxvpos_nom + 1) << linedbl) + 2; #ifdef SMART_UPDATE for (i = 0; i < maxline; i++) { switch (linestate[i]) { case LINE_DONE_AS_PREVIOUS: linestate[i] = LINE_REMEMBERED_AS_PREVIOUS; break; case LINE_REMEMBERED_AS_BLACK: break; default: linestate[i] = LINE_UNDECIDED; break; } } #else memset (linestate, LINE_UNDECIDED, maxline); #endif last_drawn_line = 0; first_drawn_line = 32767; first_block_line = last_block_line = NO_BLOCK; if (frame_redraw_necessary) frame_redraw_necessary--; center_image (); thisframe_first_drawn_line = -1; thisframe_last_drawn_line = -1; drawing_color_matches = -1; seen_sprites = -1; } void putpixel (uae_u8 *buf, int bpp, int x, xcolnr c8, int opaq) { if (x <= 0) return; switch (bpp) { case 1: buf[x] = (uae_u8)c8; break; case 2: { uae_u16 *p = (uae_u16*)buf + x; *p = (uae_u16)c8; break; } case 3: /* no 24 bit yet */ break; case 4: { int i; if (1 || opaq || currprefs.gfx_filter == 0) { uae_u32 *p = (uae_u32*)buf + x; *p = c8; } else { for (i = 0; i < 4; i++) { int v1 = buf[i + bpp * x]; int v2 = (c8 >> (i * 8)) & 255; v1 = (v1 * 2 + v2 * 3) / 5; if (v1 > 255) v1 = 255; buf[i + bpp * x] = v1; } } break; } } } static void draw_status_line (int line, int statusy) { int bpp, y; uae_u8 *buf; if (!(currprefs.leds_on_screen & STATUSLINE_CHIPSET) || (currprefs.leds_on_screen & STATUSLINE_TARGET)) return; bpp = gfxvidinfo.drawbuffer.pixbytes; y = line - (gfxvidinfo.drawbuffer.outheight - TD_TOTAL_HEIGHT); xlinebuffer = gfxvidinfo.drawbuffer.linemem; if (xlinebuffer == 0) xlinebuffer = row_map[line]; buf = xlinebuffer; draw_status_line_single (buf, bpp, statusy, gfxvidinfo.drawbuffer.outwidth, xredcolors, xgreencolors, xbluecolors, NULL); } static void draw_debug_status_line (int line) { xlinebuffer = gfxvidinfo.drawbuffer.linemem; if (xlinebuffer == 0) xlinebuffer = row_map[line]; debug_draw_cycles (xlinebuffer, gfxvidinfo.drawbuffer.pixbytes, line, gfxvidinfo.drawbuffer.outwidth, gfxvidinfo.drawbuffer.outheight, xredcolors, xgreencolors, xbluecolors); } #define LIGHTPEN_HEIGHT 12 #define LIGHTPEN_WIDTH 17 static const char *lightpen_cursor = { "------.....------" "------.xxx.------" "------.xxx.------" "------.xxx.------" ".......xxx......." ".xxxxxxxxxxxxxxx." ".xxxxxxxxxxxxxxx." ".......xxx......." "------.xxx.------" "------.xxx.------" "------.xxx.------" "------.....------" }; static void draw_lightpen_cursor (int x, int y, int line, int onscreen) { int i; const char *p; int color1 = onscreen ? 0xff0 : 0xf00; int color2 = 0x000; xlinebuffer = gfxvidinfo.drawbuffer.linemem; if (xlinebuffer == 0) xlinebuffer = row_map[line]; p = lightpen_cursor + y * LIGHTPEN_WIDTH; for (i = 0; i < LIGHTPEN_WIDTH; i++) { int xx = x + i - LIGHTPEN_WIDTH / 2; if (*p != '-' && xx >= 0 && xx < gfxvidinfo.drawbuffer.outwidth) putpixel (xlinebuffer, gfxvidinfo.drawbuffer.pixbytes, xx, *p == 'x' ? xcolors[color1] : xcolors[color2], 1); p++; } } static int lightpen_y1, lightpen_y2; static void lightpen_update (struct vidbuffer *vb) { int i; if (lightpen_x < LIGHTPEN_WIDTH + 1) lightpen_x = LIGHTPEN_WIDTH + 1; if (lightpen_x >= gfxvidinfo.drawbuffer.inwidth - LIGHTPEN_WIDTH - 1) lightpen_x = gfxvidinfo.drawbuffer.inwidth - LIGHTPEN_WIDTH - 2; if (lightpen_y < LIGHTPEN_HEIGHT + 1) lightpen_y = LIGHTPEN_HEIGHT + 1; if (lightpen_y >= gfxvidinfo.drawbuffer.inheight - LIGHTPEN_HEIGHT - 1) lightpen_y = gfxvidinfo.drawbuffer.inheight - LIGHTPEN_HEIGHT - 2; if (lightpen_y >= max_ypos_thisframe - LIGHTPEN_HEIGHT - 1) lightpen_y = max_ypos_thisframe - LIGHTPEN_HEIGHT - 2; lightpen_cx = (((lightpen_x + visible_left_border) >> lores_shift) >> 1) + DISPLAY_LEFT_SHIFT - DIW_DDF_OFFSET; lightpen_cy = lightpen_y; lightpen_cy >>= linedbl; lightpen_cy += minfirstline; if (lightpen_cx < 0x18) lightpen_cx = 0x18; if (lightpen_cx >= maxhpos) lightpen_cx -= maxhpos; if (lightpen_cy < minfirstline) lightpen_cy = minfirstline; if (lightpen_cy >= maxvpos) lightpen_cy = maxvpos - 1; for (i = 0; i < LIGHTPEN_HEIGHT; i++) { int line = lightpen_y + i - LIGHTPEN_HEIGHT / 2; if (line >= 0 || line < max_ypos_thisframe) { if (lightpen_active > 0) draw_lightpen_cursor (lightpen_x, i, line, lightpen_cx > 0); flush_line (vb, line); } } lightpen_y1 = lightpen_y - LIGHTPEN_HEIGHT / 2 - 1 + min_ypos_for_screen; lightpen_y2 = lightpen_y1 + LIGHTPEN_HEIGHT + 2; if (lightpen_active < 0) lightpen_active = 0; } void finish_drawing_frame (void) { int i; bool didflush = false; struct vidbuffer *vb = &gfxvidinfo.drawbuffer; gfxvidinfo.outbuffer = vb; if (! lockscr (vb, false)) { notice_screen_contents_lost (); return; } #ifndef SMART_UPDATE /* @@@ This isn't exactly right yet. FIXME */ if (!interlace_seen) do_flush_screen (first_drawn_line, last_drawn_line); else unlockscr (); return; #endif for (i = 0; i < max_ypos_thisframe; i++) { int i1 = i + min_ypos_for_screen; int line = i + thisframe_y_adjust_real; int where2; where2 = amiga2aspect_line_map[i1]; if (where2 >= vb->inheight) break; if (where2 < 0) continue; hposblank = 0; pfield_draw_line (vb, line, where2, amiga2aspect_line_map[i1 + 1]); } #if 0 /* clear possible old garbage at the bottom if emulated area become smaller */ for (i = last_max_ypos; i < vb->outheight; i++) { int i1 = i + min_ypos_for_screen; int line = i + thisframe_y_adjust_real; int where2 = amiga2aspect_line_map[i1]; if (where2 >= gfxvidinfo.drawbuffer.outheight) break; if (where2 < 0) continue; hposblank = i > last_max_ypos || i >= max_ypos_thisframe; xlinebuffer = vb->linemem; if (xlinebuffer == 0) xlinebuffer = row_map[where2]; xlinebuffer -= linetoscr_x_adjust_bytes; fill_line (); if (line < max_ypos_thisframe) linestate[line] = LINE_UNDECIDED; do_flush_line (vb, where2); } #endif if (currprefs.leds_on_screen) { int slx, sly; statusline_getpos (&slx, &sly, vb->outwidth, vb->outheight); for (i = 0; i < TD_TOTAL_HEIGHT; i++) { int line = sly + i; draw_status_line (line, i); do_flush_line (vb, line); } } if (debug_dma > 1) { for (i = 0; i < vb->outheight; i++) { int line = i; draw_debug_status_line (line); do_flush_line (vb, line); } } if (lightpen_active) lightpen_update (vb); if (currprefs.monitoremu && gfxvidinfo.tempbuffer.bufmem_allocated) { if (emulate_specialmonitors (vb, &gfxvidinfo.tempbuffer)) { vb = gfxvidinfo.outbuffer = &gfxvidinfo.tempbuffer; if (vb->nativepositioning) { vb->inwidth = gfxvidinfo.drawbuffer.inwidth; vb->inheight = gfxvidinfo.drawbuffer.inheight; vb->inwidth2 = gfxvidinfo.drawbuffer.inwidth2; vb->inheight2 = gfxvidinfo.drawbuffer.inheight2; vb->outwidth = gfxvidinfo.drawbuffer.outwidth; vb->outheight = gfxvidinfo.drawbuffer.outheight; } gfxvidinfo.drawbuffer.tempbufferinuse = true; if (!specialmonitoron) compute_framesync (); specialmonitoron = true; do_flush_screen (vb, 0, vb->outheight); didflush = true; } else { gfxvidinfo.drawbuffer.tempbufferinuse = false; if (specialmonitoron) compute_framesync (); specialmonitoron = false; } } if (!didflush) do_flush_screen (vb, first_drawn_line, last_drawn_line); } void hardware_line_completed (int lineno) { #ifndef SMART_UPDATE { int i, where; /* l is the line that has been finished for drawing. */ i = lineno - thisframe_y_adjust_real; if (i >= 0 && i < max_ypos_thisframe) { where = amiga2aspect_line_map[i+min_ypos_for_screen]; if (where < gfxvidinfo.drawbuffer.outheight && where >= 0) pfield_draw_line (lineno, where, amiga2aspect_line_map[i+min_ypos_for_screen+1]); } } #endif } void check_picasso (void) { #ifdef PICASSO96 if (picasso_on && picasso_redraw_necessary) picasso_refresh (); picasso_redraw_necessary = 0; if (picasso_requested_on == picasso_on) return; picasso_on = picasso_requested_on; if (!picasso_on) clear_inhibit_frame (IHF_PICASSO); else set_inhibit_frame (IHF_PICASSO); gfx_set_picasso_state (picasso_on); picasso_enablescreen (picasso_requested_on); notice_screen_contents_lost (); notice_new_xcolors (); count_frame (); #endif } void redraw_frame (void) { last_drawn_line = 0; first_drawn_line = 32767; finish_drawing_frame (); flush_screen (gfxvidinfo.inbuffer, 0, 0); } void vsync_handle_check (void) { check_picasso (); int changed = check_prefs_changed_gfx (); if (changed > 0) { reset_drawing (); init_row_map (); init_aspect_maps (); notice_screen_contents_lost (); notice_new_xcolors (); } else if (changed < 0) { reset_drawing (); init_row_map (); init_aspect_maps (); notice_screen_contents_lost (); notice_new_xcolors (); } check_prefs_changed_audio (); check_prefs_changed_cd (); check_prefs_changed_custom (); check_prefs_changed_cpu (); } void vsync_handle_redraw (int long_frame, int lof_changed, uae_u16 bplcon0p, uae_u16 bplcon3p) { last_redraw_point++; if (lof_changed || interlace_seen <= 0 || last_redraw_point >= 2 || long_frame || doublescan < 0) { last_redraw_point = 0; if (framecnt == 0) finish_drawing_frame (); #if 0 if (interlace_seen > 0) { interlace_seen = -1; } else if (interlace_seen == -1) { interlace_seen = 0; if (currprefs.gfx_scandoubler && currprefs.gfx_vresolution) notice_screen_contents_lost (); } #endif if (quit_program < 0) { #ifdef SAVESTATE if (!savestate_state) { if (currprefs.quitstatefile[0]) { savestate_initsave (currprefs.quitstatefile, 1, 1, true); save_state (currprefs.quitstatefile, _T("")); } } #endif quit_program = -quit_program; set_inhibit_frame (IHF_QUIT_PROGRAM); set_special (SPCFLAG_BRK); return; } count_frame (); if (framecnt == 0) init_drawing_frame (); else if (currprefs.cpu_cycle_exact) init_hardware_for_drawing_frame (); } else { if (isvsync_chipset ()) flush_screen (gfxvidinfo.inbuffer, 0, 0); /* vsync mode */ } gui_flicker_led (-1, 0, 0); #ifdef AVIOUTPUT if (!picasso_on) frame_drawn (); #endif } void hsync_record_line_state (int lineno, enum nln_how how, int changed) { uae_u8 *state; if (framecnt != 0) return; state = linestate + lineno; changed += frame_redraw_necessary + ((lineno >= lightpen_y1 && lineno <= lightpen_y2) ? 1 : 0); switch (how) { case nln_normal: *state = changed ? LINE_DECIDED : LINE_DONE; break; case nln_doubled: *state = changed ? LINE_DECIDED_DOUBLE : LINE_DONE; changed += state[1] != LINE_REMEMBERED_AS_PREVIOUS; state[1] = changed ? LINE_AS_PREVIOUS : LINE_DONE_AS_PREVIOUS; break; case nln_nblack: *state = changed ? LINE_DECIDED : LINE_DONE; if (state[1] != LINE_REMEMBERED_AS_BLACK) state[1] = LINE_BLACK; break; case nln_lower: if (state[-1] == LINE_UNDECIDED) state[-1] = LINE_DECIDED; //LINE_BLACK; *state = changed ? LINE_DECIDED : LINE_DONE; break; case nln_upper: *state = changed ? LINE_DECIDED : LINE_DONE; if (state[1] == LINE_UNDECIDED || state[1] == LINE_REMEMBERED_AS_PREVIOUS || state[1] == LINE_AS_PREVIOUS) state[1] = LINE_DECIDED; //LINE_BLACK; break; } } static void dummy_flush_line (struct vidbuf_description *gfxinfo, struct vidbuffer *vb, int line_no) { } static void dummy_flush_block (struct vidbuf_description *gfxinfo, struct vidbuffer *vb, int first_line, int last_line) { } static void dummy_flush_screen (struct vidbuf_description *gfxinfo, struct vidbuffer *vb, int first_line, int last_line) { } static void dummy_flush_clear_screen (struct vidbuf_description *gfxinfo, struct vidbuffer *vb) { } static int dummy_lock (struct vidbuf_description *gfxinfo, struct vidbuffer *vb) { return 1; } static void dummy_unlock (struct vidbuf_description *gfxinfo, struct vidbuffer *vb) { } static void gfxbuffer_reset (void) { gfxvidinfo.drawbuffer.flush_line = dummy_flush_line; gfxvidinfo.drawbuffer.flush_block = dummy_flush_block; gfxvidinfo.drawbuffer.flush_screen = dummy_flush_screen; gfxvidinfo.drawbuffer.flush_clear_screen = dummy_flush_clear_screen; gfxvidinfo.drawbuffer.lockscr = dummy_lock; gfxvidinfo.drawbuffer.unlockscr = dummy_unlock; } void notice_resolution_seen (int res, bool lace) { if (res > frame_res) frame_res = res; if (res > 0) can_use_lores = 0; if (!frame_res_lace && lace) frame_res_lace = lace; } bool notice_interlace_seen (bool lace) { bool changed = false; // non-lace to lace switch (non-lace active at least one frame)? if (lace) { if (interlace_seen == 0) { changed = true; //write_log (_T("->lace PC=%x\n"), m68k_getpc ()); } interlace_seen = currprefs.gfx_vresolution ? 1 : -1; } else { if (interlace_seen) { changed = true; //write_log (_T("->non-lace PC=%x\n"), m68k_getpc ()); } interlace_seen = 0; } return changed; } static void clearbuffer (struct vidbuffer *dst) { if (!dst->bufmem_allocated) return; uae_u8 *p = dst->bufmem_allocated; for (int y = 0; y < dst->height_allocated; y++) { memset (p, 0, dst->width_allocated * dst->pixbytes); p += dst->rowbytes; } } void reset_decision_table (void) { for (int i = 0; i < sizeof linestate / sizeof *linestate; i++) linestate[i] = LINE_UNDECIDED; } void reset_drawing (void) { unsigned int i; max_diwstop = 0; lores_reset (); for (i = 0; i < sizeof linestate / sizeof *linestate; i++) linestate[i] = LINE_UNDECIDED; init_aspect_maps (); init_row_map (); last_redraw_point = 0; memset (spixels, 0, sizeof spixels); memset (&spixstate, 0, sizeof spixstate); init_drawing_frame (); notice_screen_contents_lost (); frame_res_cnt = FRAMES_UNTIL_RES_SWITCH; lightpen_y1 = lightpen_y2 = -1; reset_custom_limits (); clearbuffer (&gfxvidinfo.drawbuffer); clearbuffer (&gfxvidinfo.tempbuffer); center_reset = true; specialmonitoron = false; } void drawing_init (void) { gen_pfield_tables (); uae_sem_init (&gui_sem, 0, 1); #ifdef PICASSO96 if (!isrestore ()) { picasso_on = 0; picasso_requested_on = 0; gfx_set_picasso_state (0); } #endif xlinebuffer = gfxvidinfo.drawbuffer.bufmem; inhibit_frame = 0; gfxbuffer_reset (); reset_drawing (); } 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)) return 0; if (currprefs.gfx_apmode[0].gfx_vsyncmode == 0) return 1; if (currprefs.m68k_speed >= 0) return -1; return currprefs.cachesize ? -3 : -2; } 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)) return 0; if (currprefs.gfx_apmode[1].gfx_vsyncmode == 0) return 1; if (currprefs.m68k_speed >= 0) return -1; return currprefs.cachesize ? -3 : -2; } int isvsync (void) { if (picasso_on) return isvsync_rtg (); else return isvsync_chipset (); } fs-uae-2.2.3+dfsg/src/moduleripper.cpp0000644000175000017500000000562612162366655020070 0ustar glaubitzglaubitz/* * UAE - The Un*x Amiga Emulator * * Pro-Wizard glue code * * Copyright 2004 Toni Wilen */ #include "sysconfig.h" #include "sysdeps.h" #ifdef PROWIZARD #include "options.h" #include "uae/memory.h" #include "moduleripper.h" #include "gui.h" #include "uae.h" static int got, canceled; static void mc (uae_u8 *d, uaecptr s, int size) { int i; for (i = 0; i < size; i++) d[i] = get_byte (s++); } #ifdef _WIN32 static LONG WINAPI ExceptionFilter (struct _EXCEPTION_POINTERS * pExceptionPointers, DWORD ec) { return EXCEPTION_EXECUTE_HANDLER; } #endif void moduleripper (void) { int size; uae_u8 *buf, *p; size = currprefs.chipmem_size; size += currprefs.fastmem_size; size += currprefs.bogomem_size; size += currprefs.mbresmem_low_size; size += currprefs.mbresmem_high_size; size += currprefs.z3fastmem_size; size += currprefs.z3fastmem2_size; buf = p = xmalloc (uae_u8, size); if (!buf) return; memcpy (p, chipmemory, currprefs.chipmem_size); p += currprefs.chipmem_size; mc (p, fastmem_start, currprefs.fastmem_size); p += currprefs.fastmem_size; mc (p, bogomem_start, currprefs.bogomem_size); p += currprefs.bogomem_size; mc (p, a3000lmem_start, currprefs.mbresmem_low_size); p += currprefs.mbresmem_low_size; mc (p, a3000hmem_start, currprefs.mbresmem_high_size); p += currprefs.mbresmem_high_size; mc (p, z3fastmem_start, currprefs.z3fastmem_size); p += currprefs.z3fastmem_size; mc (p, z3fastmem_start + currprefs.z3fastmem_size, currprefs.z3fastmem2_size); p += currprefs.z3fastmem2_size; got = 0; canceled = 0; #ifdef _WIN32 __try { #endif prowizard_search (buf, size); #ifdef _WIN32 } __except(ExceptionFilter (GetExceptionInformation (), GetExceptionCode ())) { write_log (_T("prowizard scan crashed\n")); } #endif if (!got) notify_user (NUMSG_MODRIP_NOTFOUND); else if (!canceled) notify_user (NUMSG_MODRIP_FINISHED); xfree (buf); } extern "C" { FILE *moduleripper_fopen (const char *aname, const char *amode) { TCHAR tmp2[MAX_DPATH]; TCHAR tmp[MAX_DPATH]; TCHAR *name, *mode; FILE *f; fetch_ripperpath (tmp, sizeof tmp); name = au (aname); mode = au (amode); _stprintf (tmp2, _T("%s%s"), tmp, name); f = _tfopen (tmp2, mode); xfree (mode); xfree (name); return f; } FILE *moduleripper2_fopen (const char *name, const char *mode, const char *aid, int addr, int size) { TCHAR msg[MAX_DPATH], msg2[MAX_DPATH]; TCHAR *id; int ret; if (canceled) return NULL; got++; translate_message (NUMSG_MODRIP_SAVE, msg); id = au (aid); _stprintf (msg2, msg, id, addr, size); ret = gui_message_multibutton (2, msg2); xfree (id); if (ret < 0) canceled = 1; if (ret < 0 || ret != 1) return NULL; return moduleripper_fopen (name, mode); } void pw_write_log (const char *format,...) { } } #else FILE *moduleripper_fopen (const char *name, const char *mode) { return NULL; } FILE *moduleripper2_fopen (const char *name, const char *mode, const char *id) { return NULL; } #endif fs-uae-2.2.3+dfsg/src/identify.cpp0000644000175000017500000005254212162366654017172 0ustar glaubitzglaubitz/* * UAE - The Un*x Amiga Emulator * * Routines for labelling amiga internals. * */ #include "sysconfig.h" #include "sysdeps.h" #ifdef DEBUGGER #include "uae/memory.h" #include "identify.h" const struct mem_labels int_labels[] = { { _T("Reset:SSP"), 0x0000 }, { _T("EXECBASE"), 0x0004 }, { _T("BUS ERROR"), 0x0008 }, { _T("ADR ERROR"), 0x000C }, { _T("ILLEG OPC"), 0x0010 }, { _T("DIV BY 0"), 0x0014 }, { _T("CHK"), 0x0018 }, { _T("TRAPV"), 0x001C }, { _T("PRIVIL VIO"), 0x0020 }, { _T("TRACE"), 0x0024 }, { _T("LINEA EMU"), 0x0028 }, { _T("LINEF EMU"), 0x002C }, { _T("INT Uninit"), 0x003C }, { _T("INT Unjust"), 0x0060 }, { _T("Lvl 1 Int"), 0x0064 }, { _T("Lvl 2 Int"), 0x0068 }, { _T("Lvl 3 Int"), 0x006C }, { _T("Lvl 4 Int"), 0x0070 }, { _T("Lvl 5 Int"), 0x0074 }, { _T("Lvl 6 Int"), 0x0078 }, { _T("NMI"), 0x007C }, { 0, 0 } }; const struct mem_labels trap_labels[] = { { _T("TRAP 00"), 0x0080 }, { _T("TRAP 01"), 0x0084 }, { _T("TRAP 02"), 0x0088 }, { _T("TRAP 03"), 0x008C }, { _T("TRAP 04"), 0x0090 }, { _T("TRAP 05"), 0x0094 }, { _T("TRAP 06"), 0x0098 }, { _T("TRAP 07"), 0x009C }, { _T("TRAP 08"), 0x00A0 }, { _T("TRAP 09"), 0x00A4 }, { _T("TRAP 10"), 0x00A8 }, { _T("TRAP 11"), 0x00AC }, { _T("TRAP 12"), 0x00B0 }, { _T("TRAP 13"), 0x00B4 }, { _T("TRAP 14"), 0x00B8 }, { _T("TRAP 15"), 0x00BC }, { 0, 0 } }; const struct mem_labels mem_labels[] = { { _T("CIAB PRA"), 0xBFD000 }, { _T("CIAB PRB"), 0xBFD100 }, { _T("CIAB DDRA"), 0xBFD200 }, { _T("CIAB DDRB"), 0xBFD300 }, { _T("CIAB TALO"), 0xBFD400 }, { _T("CIAB TAHI"), 0xBFD500 }, { _T("CIAB TBLO"), 0xBFD600 }, { _T("CIAB TBHI"), 0xBFD700 }, { _T("CIAB TDLO"), 0xBFD800 }, { _T("CIAB TDMD"), 0xBFD900 }, { _T("CIAB TDHI"), 0xBFDA00 }, { _T("CIAB SDR"), 0xBFDC00 }, { _T("CIAB ICR"), 0xBFDD00 }, { _T("CIAB CRA"), 0xBFDE00 }, { _T("CIAB CRB"), 0xBFDF00 }, { _T("CIAA PRA"), 0xBFE001 }, { _T("CIAA PRB"), 0xBFE101 }, { _T("CIAA DDRA"), 0xBFE201 }, { _T("CIAA DDRB"), 0xBFE301 }, { _T("CIAA TALO"), 0xBFE401 }, { _T("CIAA TAHI"), 0xBFE501 }, { _T("CIAA TBLO"), 0xBFE601 }, { _T("CIAA TBHI"), 0xBFE701 }, { _T("CIAA TDLO"), 0xBFE801 }, { _T("CIAA TDMD"), 0xBFE901 }, { _T("CIAA TDHI"), 0xBFEA01 }, { _T("CIAA SDR"), 0xBFEC01 }, { _T("CIAA ICR"), 0xBFED01 }, { _T("CIAA CRA"), 0xBFEE01 }, { _T("CIAA CRB"), 0xBFEF01 }, { _T("CLK S1"), 0xDC0000 }, { _T("CLK S10"), 0xDC0004 }, { _T("CLK MI1"), 0xDC0008 }, { _T("CLK MI10"), 0xDC000C }, { _T("CLK H1"), 0xDC0010 }, { _T("CLK H10"), 0xDC0014 }, { _T("CLK D1"), 0xDC0018 }, { _T("CLK D10"), 0xDC001C }, { _T("CLK MO1"), 0xDC0020 }, { _T("CLK MO10"), 0xDC0024 }, { _T("CLK Y1"), 0xDC0028 }, { _T("CLK Y10"), 0xDC002E }, { _T("CLK WEEK"), 0xDC0030 }, { _T("CLK CD"), 0xDC0034 }, { _T("CLK CE"), 0xDC0038 }, { _T("CLK CF"), 0xDC003C }, { NULL, 0 } }; /* This table was generated from the list of AGA chip names in * AGA.guide available on aminet. It could well have errors in it. */ const struct customData custd[] = { #if 0 { _T("BLTDDAT"), 0xdff000 }, /* Blitter dest. early read (dummy address) */ #endif { _T("DMACONR"), 0xdff002, 1 }, /* Dma control (and blitter status) read */ { _T("VPOSR"), 0xdff004, 1 }, /* Read vert most sig. bits (and frame flop */ { _T("VHPOSR"), 0xdff006, 1 }, /* Read vert and horiz position of beam */ #if 0 { _T("DSKDATR"), 0xdff008 }, /* Disk data early read (dummy address) */ #endif { _T("JOY0DAT"), 0xdff00A, 1 }, /* Joystick-mouse 0 data (vert,horiz) */ { _T("JOT1DAT"), 0xdff00C, 1 }, /* Joystick-mouse 1 data (vert,horiz) */ { _T("CLXDAT"), 0xdff00E, 1 }, /* Collision data reg. (read and clear) */ { _T("ADKCONR"), 0xdff010, 1 }, /* Audio,disk control register read */ { _T("POT0DAT"), 0xdff012, 1 }, /* Pot counter pair 0 data (vert,horiz) */ { _T("POT1DAT"), 0xdff014, 1 }, /* Pot counter pair 1 data (vert,horiz) */ { _T("POTGOR"), 0xdff016, 1 }, /* Pot pin data read */ { _T("SERDATR"), 0xdff018, 1 }, /* Serial port data and status read */ { _T("DSKBYTR"), 0xdff01A, 1 }, /* Disk data byte and status read */ { _T("INTENAR"), 0xdff01C, 1 }, /* Interrupt enable bits read */ { _T("INTREQR"), 0xdff01E, 1 }, /* Interrupt request bits read */ { _T("DSKPTH"), 0xdff020, 2, 1 }, /* Disk pointer (high 5 bits) */ { _T("DSKPTL"), 0xdff022, 2, 2 }, /* Disk pointer (low 15 bits) */ { _T("DSKLEN"), 0xdff024, 2, 0 }, /* Disk lentgh */ #if 0 { _T("DSKDAT"), 0xdff026 }, /* Disk DMA data write */ { _T("REFPTR"), 0xdff028 }, /* Refresh pointer */ #endif { _T("VPOSW"), 0xdff02A, 2, 0 }, /* Write vert most sig. bits(and frame flop) */ { _T("VHPOSW"), 0xdff02C, 2, 0 }, /* Write vert and horiz pos of beam */ { _T("COPCON"), 0xdff02e, 2, 0 }, /* Coprocessor control reg (CDANG) */ { _T("SERDAT"), 0xdff030, 2, 0 }, /* Serial port data and stop bits write */ { _T("SERPER"), 0xdff032, 2, 0 }, /* Serial port period and control */ { _T("POTGO"), 0xdff034, 2, 0 }, /* Pot count start,pot pin drive enable data */ { _T("JOYTEST"), 0xdff036, 2, 0 }, /* Write to all 4 joystick-mouse counters at once */ { _T("STREQU"), 0xdff038, 2, 0 }, /* Strobe for horiz sync with VB and EQU */ { _T("STRVBL"), 0xdff03A, 2, 0 }, /* Strobe for horiz sync with VB (vert blank) */ { _T("STRHOR"), 0xdff03C, 2, 0 }, /* Strobe for horiz sync */ { _T("STRLONG"), 0xdff03E, 2, 0 }, /* Strobe for identification of long horiz line */ { _T("BLTCON0"), 0xdff040, 2, 0 }, /* Blitter control reg 0 */ { _T("BLTCON1"), 0xdff042, 2, 0 }, /* Blitter control reg 1 */ { _T("BLTAFWM"), 0xdff044, 2, 0 }, /* Blitter first word mask for source A */ { _T("BLTALWM"), 0xdff046, 2, 0 }, /* Blitter last word mask for source A */ { _T("BLTCPTH"), 0xdff048, 2, 1 }, /* Blitter pointer to source C (high 5 bits) */ { _T("BLTCPTL"), 0xdff04A, 2, 2 }, /* Blitter pointer to source C (low 15 bits) */ { _T("BLTBPTH"), 0xdff04C, 2, 1 }, /* Blitter pointer to source B (high 5 bits) */ { _T("BLTBPTL"), 0xdff04E, 2, 2 }, /* Blitter pointer to source B (low 15 bits) */ { _T("BLTAPTH"), 0xdff050, 2, 1 }, /* Blitter pointer to source A (high 5 bits) */ { _T("BLTAPTL"), 0xdff052, 2, 2 }, /* Blitter pointer to source A (low 15 bits) */ { _T("BPTDPTH"), 0xdff054, 2, 1 }, /* Blitter pointer to destn D (high 5 bits) */ { _T("BLTDPTL"), 0xdff056, 2, 2 }, /* Blitter pointer to destn D (low 15 bits) */ { _T("BLTSIZE"), 0xdff058, 2, 0 }, /* Blitter start and size (win/width,height) */ { _T("BLTCON0L"), 0xdff05A, 2, 4 }, /* Blitter control 0 lower 8 bits (minterms) */ { _T("BLTSIZV"), 0xdff05C, 2, 4 }, /* Blitter V size (for 15 bit vert size) */ { _T("BLTSIZH"), 0xdff05E, 2, 4 }, /* Blitter H size & start (for 11 bit H size) */ { _T("BLTCMOD"), 0xdff060, 2, 0 }, /* Blitter modulo for source C */ { _T("BLTBMOD"), 0xdff062, 2, 0 }, /* Blitter modulo for source B */ { _T("BLTAMOD"), 0xdff064, 2, 0 }, /* Blitter modulo for source A */ { _T("BLTDMOD"), 0xdff066, 2, 0 }, /* Blitter modulo for destn D */ #if 0 { _T("Unknown"), 0xdff068 }, /* Unknown or Unused */ { _T("Unknown"), 0xdff06a }, /* Unknown or Unused */ { _T("Unknown"), 0xdff06c }, /* Unknown or Unused */ { _T("Unknown"), 0xdff06e }, /* Unknown or Unused */ #endif { _T("BLTCDAT"), 0xdff070, 2, 0 }, /* Blitter source C data reg */ { _T("BLTBDAT"), 0xdff072, 2, 0 }, /* Blitter source B data reg */ { _T("BLTADAT"), 0xdff074, 2, 0 }, /* Blitter source A data reg */ { _T("BLTDDAT"), 0xdff076, 2, 0 }, /* Blitter destination reg */ #if 0 { _T("SPRHDAT"), 0xdff078 }, /* Ext logic UHRES sprite pointer and data identifier */ { _T("BPLHDAT"), 0xdff07A }, /* Ext logic UHRES bit plane identifier */ #endif { _T("LISAID"), 0xdff07C, 1, 8 }, /* Chip revision level for Denise/Lisa */ { _T("DSKSYNC"), 0xdff07E, 2 }, /* Disk sync pattern reg for disk read */ { _T("COP1LCH"), 0xdff080, 2, 1 }, /* Coprocessor first location reg (high 5 bits) */ { _T("COP1LCL"), 0xdff082, 2, 2 }, /* Coprocessor first location reg (low 15 bits) */ { _T("COP2LCH"), 0xdff084, 2, 1 }, /* Coprocessor second reg (high 5 bits) */ { _T("COP2LCL"), 0xdff086, 2, 2 }, /* Coprocessor second reg (low 15 bits) */ { _T("COPJMP1"), 0xdff088, 2 }, /* Coprocessor restart at first location */ { _T("COPJMP2"), 0xdff08A, 2 }, /* Coprocessor restart at second location */ #if 0 { _T("COPINS"), 0xdff08C }, /* Coprocessor inst fetch identify */ #endif { _T("DIWSTRT"), 0xdff08E, 2 }, /* Display window start (upper left vert-hor pos) */ { _T("DIWSTOP"), 0xdff090, 2 }, /* Display window stop (lower right vert-hor pos) */ { _T("DDFSTRT"), 0xdff092, 2 }, /* Display bit plane data fetch start.hor pos */ { _T("DDFSTOP"), 0xdff094, 2 }, /* Display bit plane data fetch stop.hor pos */ { _T("DMACON"), 0xdff096, 2 }, /* DMA control write (clear or set) */ { _T("CLXCON"), 0xdff098, 2 }, /* Collision control */ { _T("INTENA"), 0xdff09A, 2 }, /* Interrupt enable bits (clear or set bits) */ { _T("INTREQ"), 0xdff09C, 2 }, /* Interrupt request bits (clear or set bits) */ { _T("ADKCON"), 0xdff09E, 2 }, /* Audio,disk,UART,control */ { _T("AUD0LCH"), 0xdff0A0, 2, 1 }, /* Audio channel 0 location (high 5 bits) */ { _T("AUD0LCL"), 0xdff0A2, 2, 2 }, /* Audio channel 0 location (low 15 bits) */ { _T("AUD0LEN"), 0xdff0A4, 2 }, /* Audio channel 0 lentgh */ { _T("AUD0PER"), 0xdff0A6, 2 }, /* Audio channel 0 period */ { _T("AUD0VOL"), 0xdff0A8, 2 }, /* Audio channel 0 volume */ { _T("AUD0DAT"), 0xdff0AA, 2 }, /* Audio channel 0 data */ #if 0 { _T("Unknown"), 0xdff0AC }, /* Unknown or Unused */ { _T("Unknown"), 0xdff0AE }, /* Unknown or Unused */ #endif { _T("AUD1LCH"), 0xdff0B0, 2, 1 }, /* Audio channel 1 location (high 5 bits) */ { _T("AUD1LCL"), 0xdff0B2, 2, 2 }, /* Audio channel 1 location (low 15 bits) */ { _T("AUD1LEN"), 0xdff0B4, 2 }, /* Audio channel 1 lentgh */ { _T("AUD1PER"), 0xdff0B6, 2 }, /* Audio channel 1 period */ { _T("AUD1VOL"), 0xdff0B8, 2 }, /* Audio channel 1 volume */ { _T("AUD1DAT"), 0xdff0BA, 2 }, /* Audio channel 1 data */ #if 0 { _T("Unknown"), 0xdff0BC }, /* Unknown or Unused */ { _T("Unknown"), 0xdff0BE }, /* Unknown or Unused */ #endif { _T("AUD2LCH"), 0xdff0C0, 2, 1 }, /* Audio channel 2 location (high 5 bits) */ { _T("AUD2LCL"), 0xdff0C2, 2, 2 }, /* Audio channel 2 location (low 15 bits) */ { _T("AUD2LEN"), 0xdff0C4, 2 }, /* Audio channel 2 lentgh */ { _T("AUD2PER"), 0xdff0C6, 2 }, /* Audio channel 2 period */ { _T("AUD2VOL"), 0xdff0C8, 2 }, /* Audio channel 2 volume */ { _T("AUD2DAT"), 0xdff0CA, 2 }, /* Audio channel 2 data */ #if 0 { _T("Unknown"), 0xdff0CC }, /* Unknown or Unused */ { _T("Unknown"), 0xdff0CE }, /* Unknown or Unused */ #endif { _T("AUD3LCH"), 0xdff0D0, 2, 1 }, /* Audio channel 3 location (high 5 bits) */ { _T("AUD3LCL"), 0xdff0D2, 2, 2 }, /* Audio channel 3 location (low 15 bits) */ { _T("AUD3LEN"), 0xdff0D4, 2 }, /* Audio channel 3 lentgh */ { _T("AUD3PER"), 0xdff0D6, 2 }, /* Audio channel 3 period */ { _T("AUD3VOL"), 0xdff0D8, 2 }, /* Audio channel 3 volume */ { _T("AUD3DAT"), 0xdff0DA, 2 }, /* Audio channel 3 data */ #if 0 { _T("Unknown"), 0xdff0DC }, /* Unknown or Unused */ { _T("Unknown"), 0xdff0DE }, /* Unknown or Unused */ #endif { _T("BPL1PTH"), 0xdff0E0, 2, 1 }, /* Bit plane pointer 1 (high 5 bits) */ { _T("BPL1PTL"), 0xdff0E2, 2, 2 }, /* Bit plane pointer 1 (low 15 bits) */ { _T("BPL2PTH"), 0xdff0E4, 2, 1 }, /* Bit plane pointer 2 (high 5 bits) */ { _T("BPL2PTL"), 0xdff0E6, 2, 2 }, /* Bit plane pointer 2 (low 15 bits) */ { _T("BPL3PTH"), 0xdff0E8, 2, 1 }, /* Bit plane pointer 3 (high 5 bits) */ { _T("BPL3PTL"), 0xdff0EA, 2, 2 }, /* Bit plane pointer 3 (low 15 bits) */ { _T("BPL4PTH"), 0xdff0EC, 2, 1 }, /* Bit plane pointer 4 (high 5 bits) */ { _T("BPL4PTL"), 0xdff0EE, 2, 2 }, /* Bit plane pointer 4 (low 15 bits) */ { _T("BPL5PTH"), 0xdff0F0, 2, 1 }, /* Bit plane pointer 5 (high 5 bits) */ { _T("BPL5PTL"), 0xdff0F2, 2, 2 }, /* Bit plane pointer 5 (low 15 bits) */ { _T("BPL6PTH"), 0xdff0F4, 2, 1|8 }, /* Bit plane pointer 6 (high 5 bits) */ { _T("BPL6PTL"), 0xdff0F6, 2, 2|8 }, /* Bit plane pointer 6 (low 15 bits) */ { _T("BPL7PTH"), 0xdff0F8, 2, 1|8 }, /* Bit plane pointer 7 (high 5 bits) */ { _T("BPL7PTL"), 0xdff0FA, 2, 2|8 }, /* Bit plane pointer 7 (low 15 bits) */ { _T("BPL8PTH"), 0xdff0FC, 2, 1|8 }, /* Bit plane pointer 8 (high 5 bits) */ { _T("BPL8PTL"), 0xdff0FE, 2, 2|8 }, /* Bit plane pointer 8 (low 15 bits) */ { _T("BPLCON0"), 0xdff100, 2 }, /* Bit plane control reg (misc control bits) */ { _T("BPLCON1"), 0xdff102, 2 }, /* Bit plane control reg (scroll val PF1,PF2) */ { _T("BPLCON2"), 0xdff104, 2 }, /* Bit plane control reg (priority control) */ { _T("BPLCON3"), 0xdff106, 2|8 }, /* Bit plane control reg (enhanced features) */ { _T("BPL1MOD"), 0xdff108, 2 }, /* Bit plane modulo (odd planes,or active- fetch lines if bitplane scan-doubling is enabled */ { _T("BPL2MOD"), 0xdff10A, 2 }, /* Bit plane modulo (even planes or inactive- fetch lines if bitplane scan-doubling is enabled */ { _T("BPLCON4"), 0xdff10C, 2|8 }, /* Bit plane control reg (bitplane and sprite masks) */ { _T("CLXCON2"), 0xdff10e, 2|8 }, /* Extended collision control reg */ { _T("BPL1DAT"), 0xdff110, 2 }, /* Bit plane 1 data (parallel to serial con- vert) */ { _T("BPL2DAT"), 0xdff112, 2 }, /* Bit plane 2 data (parallel to serial con- vert) */ { _T("BPL3DAT"), 0xdff114, 2 }, /* Bit plane 3 data (parallel to serial con- vert) */ { _T("BPL4DAT"), 0xdff116, 2 }, /* Bit plane 4 data (parallel to serial con- vert) */ { _T("BPL5DAT"), 0xdff118, 2 }, /* Bit plane 5 data (parallel to serial con- vert) */ { _T("BPL6DAT"), 0xdff11a, 2 }, /* Bit plane 6 data (parallel to serial con- vert) */ { _T("BPL7DAT"), 0xdff11c, 2|8 }, /* Bit plane 7 data (parallel to serial con- vert) */ { _T("BPL8DAT"), 0xdff11e, 2|8 }, /* Bit plane 8 data (parallel to serial con- vert) */ { _T("SPR0PTH"), 0xdff120, 2, 1 }, /* Sprite 0 pointer (high 5 bits) */ { _T("SPR0PTL"), 0xdff122, 2, 2 }, /* Sprite 0 pointer (low 15 bits) */ { _T("SPR1PTH"), 0xdff124, 2, 1 }, /* Sprite 1 pointer (high 5 bits) */ { _T("SPR1PTL"), 0xdff126, 2, 2 }, /* Sprite 1 pointer (low 15 bits) */ { _T("SPR2PTH"), 0xdff128, 2, 1 }, /* Sprite 2 pointer (high 5 bits) */ { _T("SPR2PTL"), 0xdff12A, 2, 2 }, /* Sprite 2 pointer (low 15 bits) */ { _T("SPR3PTH"), 0xdff12C, 2, 1 }, /* Sprite 3 pointer (high 5 bits) */ { _T("SPR3PTL"), 0xdff12E, 2, 2 }, /* Sprite 3 pointer (low 15 bits) */ { _T("SPR4PTH"), 0xdff130, 2, 1 }, /* Sprite 4 pointer (high 5 bits) */ { _T("SPR4PTL"), 0xdff132, 2, 2 }, /* Sprite 4 pointer (low 15 bits) */ { _T("SPR5PTH"), 0xdff134, 2, 1 }, /* Sprite 5 pointer (high 5 bits) */ { _T("SPR5PTL"), 0xdff136, 2, 2 }, /* Sprite 5 pointer (low 15 bits) */ { _T("SPR6PTH"), 0xdff138, 2, 1 }, /* Sprite 6 pointer (high 5 bits) */ { _T("SPR6PTL"), 0xdff13A, 2, 2 }, /* Sprite 6 pointer (low 15 bits) */ { _T("SPR7PTH"), 0xdff13C, 2, 1 }, /* Sprite 7 pointer (high 5 bits) */ { _T("SPR7PTL"), 0xdff13E, 2, 2 }, /* Sprite 7 pointer (low 15 bits) */ { _T("SPR0POS"), 0xdff140, 2 }, /* Sprite 0 vert-horiz start pos data */ { _T("SPR0CTL"), 0xdff142, 2 }, /* Sprite 0 position and control data */ { _T("SPR0DATA"), 0xdff144, 2 }, /* Sprite 0 image data register A */ { _T("SPR0DATB"), 0xdff146, 2 }, /* Sprite 0 image data register B */ { _T("SPR1POS"), 0xdff148, 2 }, /* Sprite 1 vert-horiz start pos data */ { _T("SPR1CTL"), 0xdff14A, 2 }, /* Sprite 1 position and control data */ { _T("SPR1DATA"), 0xdff14C, 2 }, /* Sprite 1 image data register A */ { _T("SPR1DATB"), 0xdff14E, 2 }, /* Sprite 1 image data register B */ { _T("SPR2POS"), 0xdff150, 2 }, /* Sprite 2 vert-horiz start pos data */ { _T("SPR2CTL"), 0xdff152, 2 }, /* Sprite 2 position and control data */ { _T("SPR2DATA"), 0xdff154, 2 }, /* Sprite 2 image data register A */ { _T("SPR2DATB"), 0xdff156, 2 }, /* Sprite 2 image data register B */ { _T("SPR3POS"), 0xdff158, 2 }, /* Sprite 3 vert-horiz start pos data */ { _T("SPR3CTL"), 0xdff15A, 2 }, /* Sprite 3 position and control data */ { _T("SPR3DATA"), 0xdff15C, 2 }, /* Sprite 3 image data register A */ { _T("SPR3DATB"), 0xdff15E, 2 }, /* Sprite 3 image data register B */ { _T("SPR4POS"), 0xdff160, 2 }, /* Sprite 4 vert-horiz start pos data */ { _T("SPR4CTL"), 0xdff162, 2 }, /* Sprite 4 position and control data */ { _T("SPR4DATA"), 0xdff164, 2 }, /* Sprite 4 image data register A */ { _T("SPR4DATB"), 0xdff166, 2 }, /* Sprite 4 image data register B */ { _T("SPR5POS"), 0xdff168, 2 }, /* Sprite 5 vert-horiz start pos data */ { _T("SPR5CTL"), 0xdff16A, 2 }, /* Sprite 5 position and control data */ { _T("SPR5DATA"), 0xdff16C, 2 }, /* Sprite 5 image data register A */ { _T("SPR5DATB"), 0xdff16E, 2 }, /* Sprite 5 image data register B */ { _T("SPR6POS"), 0xdff170, 2 }, /* Sprite 6 vert-horiz start pos data */ { _T("SPR6CTL"), 0xdff172, 2 }, /* Sprite 6 position and control data */ { _T("SPR6DATA"), 0xdff174, 2 }, /* Sprite 6 image data register A */ { _T("SPR6DATB"), 0xdff176, 2 }, /* Sprite 6 image data register B */ { _T("SPR7POS"), 0xdff178, 2 }, /* Sprite 7 vert-horiz start pos data */ { _T("SPR7CTL"), 0xdff17A, 2 }, /* Sprite 7 position and control data */ { _T("SPR7DATA"), 0xdff17C, 2 }, /* Sprite 7 image data register A */ { _T("SPR7DATB"), 0xdff17E, 2 }, /* Sprite 7 image data register B */ { _T("COLOR00"), 0xdff180, 2 }, /* Color table 00 */ { _T("COLOR01"), 0xdff182, 2 }, /* Color table 01 */ { _T("COLOR02"), 0xdff184, 2 }, /* Color table 02 */ { _T("COLOR03"), 0xdff186, 2 }, /* Color table 03 */ { _T("COLOR04"), 0xdff188, 2 }, /* Color table 04 */ { _T("COLOR05"), 0xdff18A, 2 }, /* Color table 05 */ { _T("COLOR06"), 0xdff18C, 2 }, /* Color table 06 */ { _T("COLOR07"), 0xdff18E, 2 }, /* Color table 07 */ { _T("COLOR08"), 0xdff190, 2 }, /* Color table 08 */ { _T("COLOR09"), 0xdff192, 2 }, /* Color table 09 */ { _T("COLOR10"), 0xdff194, 2 }, /* Color table 10 */ { _T("COLOR11"), 0xdff196, 2 }, /* Color table 11 */ { _T("COLOR12"), 0xdff198, 2 }, /* Color table 12 */ { _T("COLOR13"), 0xdff19A, 2 }, /* Color table 13 */ { _T("COLOR14"), 0xdff19C, 2 }, /* Color table 14 */ { _T("COLOR15"), 0xdff19E, 2 }, /* Color table 15 */ { _T("COLOR16"), 0xdff1A0, 2 }, /* Color table 16 */ { _T("COLOR17"), 0xdff1A2, 2 }, /* Color table 17 */ { _T("COLOR18"), 0xdff1A4, 2 }, /* Color table 18 */ { _T("COLOR19"), 0xdff1A6, 2 }, /* Color table 19 */ { _T("COLOR20"), 0xdff1A8, 2 }, /* Color table 20 */ { _T("COLOR21"), 0xdff1AA, 2 }, /* Color table 21 */ { _T("COLOR22"), 0xdff1AC, 2 }, /* Color table 22 */ { _T("COLOR23"), 0xdff1AE, 2 }, /* Color table 23 */ { _T("COLOR24"), 0xdff1B0, 2 }, /* Color table 24 */ { _T("COLOR25"), 0xdff1B2, 2 }, /* Color table 25 */ { _T("COLOR26"), 0xdff1B4, 2 }, /* Color table 26 */ { _T("COLOR27"), 0xdff1B6, 2 }, /* Color table 27 */ { _T("COLOR28"), 0xdff1B8, 2 }, /* Color table 28 */ { _T("COLOR29"), 0xdff1BA, 2 }, /* Color table 29 */ { _T("COLOR30"), 0xdff1BC, 2 }, /* Color table 30 */ { _T("COLOR31"), 0xdff1BE, 2 }, /* Color table 31 */ { _T("HTOTAL"), 0xdff1C0, 2|4 }, /* Highest number count in horiz line (VARBEAMEN = 1) */ { _T("HSSTOP"), 0xdff1C2, 2|4 }, /* Horiz line pos for HSYNC stop */ { _T("HBSTRT"), 0xdff1C4, 2|4 }, /* Horiz line pos for HBLANK start */ { _T("HBSTOP"), 0xdff1C6, 2|4 }, /* Horiz line pos for HBLANK stop */ { _T("VTOTAL"), 0xdff1C8, 2|4 }, /* Highest numbered vertical line (VARBEAMEN = 1) */ { _T("VSSTOP"), 0xdff1CA, 2|4 }, /* Vert line for VBLANK start */ { _T("VBSTRT"), 0xdff1CC, 2|4 }, /* Vert line for VBLANK start */ { _T("VBSTOP"), 0xdff1CE, 2|4 }, /* Vert line for VBLANK stop */ #if 0 { _T("SPRHSTRT"), 0xdff1D0 }, /* UHRES sprite vertical start */ { _T("SPRHSTOP"), 0xdff1D2 }, /* UHRES sprite vertical stop */ { _T("BPLHSTRT"), 0xdff1D4 }, /* UHRES bit plane vertical stop */ { _T("BPLHSTOP"), 0xdff1D6 }, /* UHRES bit plane vertical stop */ { _T("HHPOSW"), 0xdff1D8 }, /* DUAL mode hires H beam counter write */ { _T("HHPOSR"), 0xdff1DA }, /* DUAL mode hires H beam counter read */ #endif { _T("BEAMCON0"), 0xdff1DC, 2|4 }, /* Beam counter control register (SHRES,UHRES,PAL) */ { _T("HSSTRT"), 0xdff1DE, 2|4 }, /* Horizontal sync start (VARHSY) */ { _T("VSSTRT"), 0xdff1E0, 2|4 }, /* Vertical sync start (VARVSY) */ { _T("HCENTER"), 0xdff1E2, 2|4 }, /* Horizontal pos for vsync on interlace */ { _T("DIWHIGH"), 0xdff1E4, 2|4 }, /* Display window upper bits for start/stop */ #if 0 { _T("BPLHMOD"), 0xdff1E6 }, /* UHRES bit plane modulo */ { _T("SPRHPTH"), 0xdff1E8 }, /* UHRES sprite pointer (high 5 bits) */ { _T("SPRHPTL"), 0xdff1EA }, /* UHRES sprite pointer (low 15 bits) */ { _T("BPLHPTH"), 0xdff1EC }, /* VRam (UHRES) bitplane pointer (hi 5 bits) */ { _T("BPLHPTL"), 0xdff1EE }, /* VRam (UHRES) bitplane pointer (lo 15 bits) */ { _T("RESERVED"), 0xdff1F0 }, /* Reserved (forever i guess!) */ { _T("RESERVED"), 0xdff1F2 }, /* Reserved (forever i guess!) */ { _T("RESERVED"), 0xdff1F4 }, /* Reserved (forever i guess!) */ { _T("RESERVED"), 0xdff1F6 }, /* Reserved (forever i guess!) */ { _T("RESERVED"), 0xdff1F8 }, /* Reserved (forever i guess!) */ { _T("RESERVED"), 0xdff1Fa }, /* Reserved (forever i guess!) */ #endif { _T("FMODE"), 0xdff1FC, 2|8 }, /* Fetch mode register */ { _T("NO-OP(NULL)"), 0xdff1FE }, /* Can also indicate last 2 or 3 refresh cycles or the restart of the COPPER after lockup.*/ { NULL } }; #endif fs-uae-2.2.3+dfsg/src/contrib/0000755000175000017500000000000011272401230016260 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/src/contrib/sinc-integral.py0000755000175000017500000002077711272401230021411 0ustar glaubitzglaubitz#!/usr/bin/python import math import sys from scipy import array, exp from scipy.signal import firwin from scipy.fftpack import fft, ifft def fir_minphase(table, pad_size=8): table = list(table) # table should be a real-valued table of FIR coefficients convolution_size = len(table) table += [0] * (convolution_size * (pad_size - 1)) # compute the real cepstrum # fft -> abs + ln -> ifft -> real cepstrum = ifft(map(lambda x: math.log(x), abs(fft(table)))) # because the positive and negative freqs were equal, imaginary content is neglible # cepstrum = map(lambda x: x.real, cepstrum) # window the cepstrum in such a way that anticausal components become rejected cepstrum[1 :len(cepstrum)/2] *= 2; cepstrum[len(cepstrum)/2+1:len(cepstrum) ] *= 0; # now cancel the previous steps: # fft -> exp -> ifft -> real cepstrum = ifft(map(exp, fft(cepstrum))) return map(lambda x: x.real, cepstrum[0:convolution_size]) class BiquadFilter(object): __slots__ = ['b0', 'b1', 'b2', 'a1', 'a2', 'x1', 'x2', 'y1', 'y2'] def __init__(self, b0, b1, b2, a1, a2): self.b0 = b0 self.b1 = b1 self.b2 = b2 self.a1 = a1 self.a2 = a2 self.reset() def reset(self): self.x1 = 0.0 self.x2 = 0.0 self.y1 = 0.0 self.y2 = 0.0 def filter(self, x0): y0 = self.b0*x0 + self.b1*self.x1 + self.b2*self.x2 - self.a1*self.y1 - self.a2*self.y2 self.x2 = self.x1 self.x1 = x0 self.y2 = self.y1 self.y1 = y0 return y0 def make_rc_lopass(sample_rate, freq): omega = 2 * math.pi * freq / sample_rate; term = 1 + 1/omega; return BiquadFilter(1/term, 0.0, 0.0, -1.0 + 1/term, 0.0); def make_butterworth(fs, fc, res_db=0): # 2nd-order Butterworth s-domain coefficients are: # # b0 = 1.0 b1 = 0 b2 = 0 # a0 = 1 a1 = sqrt(2) a2 = 1 # # by tweaking the a1 parameter, some resonance can be produced. res = 10.0 ** (-res_db / 10.0 / 2) ar = z_transform(1, 0, 0, 1, math.sqrt(2) * res, 1, fc, fs) return BiquadFilter(*ar) # observe: a and b are reversed here. To be absolutely clear: # a is the nominator and b is the denominator. :-/ def z_transform(a0, a1, a2, b0, b1, b2, fc, fs): # prewarp s-domain coefficients wp = 2.0 * fs * math.tan(math.pi * fc / fs) a2 /= wp * wp a1 /= wp b2 /= wp * wp b1 /= wp # compute bilinear transform and return it bd = 4 * b2 * fs * fs + 2 * b1 * fs + b0 return [ (4 * a2 * fs ** 2 + 2 * a1 * fs + a0) / bd, (2 * a0 - 8 * a2 * fs ** 2) / bd, (4 * a2 * fs ** 2 - 2 * a1 * fs + a0) / bd, (2 * b0 - 8 * b2 * fs ** 2) / bd, (4 * b2 * fs ** 2 - 2 * b1 * fs + b0) / bd, ] def quantize(x, bits, scale=False): x = list(x) fact = 2 ** bits # this adjusts range precisely between -65536 and 0 so that our bleps look right. # we should only do this if the table is integrated; in fact this code probably # belonged to the integration function. correction_factor = 1.0 if scale: correction_factor = x[-1] - x[0] for _ in range(len(x)): val = x[_] * fact / correction_factor; # correct rounding if val < 0: val = int(val - 0.5) else: val = int(val + 0.5) # leave scaled? if not scale: val /= float(fact) x[_] = val * -1 return x def lin2db(lin): return 20 * (math.log(lin) / math.log(10)) def print_spectrum(table, sample_rate): for _ in range(len(table) / 2): mag = lin2db(abs(table[_])) pha = math.atan2(table[_].real, table[_].imag) print "%s %s %s" % (float(_) / len(table) * sample_rate, mag, pha) def print_fir(table, format='gnuplot'): if format == 'gnuplot': for _ in range(len(table)): print "%s %s" % (_, table[_]) elif format == 'c': col = 0 print " {" for _ in range(len(table)): col += len(str(table[_])) + 1 if col >= 80: print col = 0 sys.stdout.write("%s," % table[_]) if col != 0: print print " }," def integrate(table): total = 0 for _ in table: total += _ startval = -total new = [] for _ in table: startval += _ new.append(startval) return new def run_filter(flt, table): flt.reset() # initialize filter to stable state for _ in range(10000): flt.filter(table[0]) # now run the filter newtable = [] for _ in range(len(table)): newtable.append(flt.filter(table[_])) return newtable, abs(table[-1] - flt.filter(table[-1])) AMIGA_PAL_CLOCK = 3546895 def main(): spectrum = len(sys.argv) > 1 # Because Amiga only has 84 dB SNR, the noise floor is low enough with -90 dB. # A500 model uses slightly lower-quality kaiser window to obtain slightly # steeper stopband attenuation. The fixed filters attenuates the sidelobes by # 12 dB, compensating for the worse performance of the kaiser window. # 21 kHz stopband is not fully attenuated by 22 kHz. If the sampling frequency # is 44.1 kHz, all frequencies above 22 kHz will alias over 20 kHz, thus inaudible. # The output should be aliasingless for 48 kHz sampling frequency. unfiltered_a500 = firwin(2048, 21000.0 / AMIGA_PAL_CLOCK * 2, window=('kaiser', 8.0)) unfiltered_a1200 = firwin(2048, 21000.0 / AMIGA_PAL_CLOCK * 2, window=('kaiser', 9.0)) # move filtering effects to start to allow IIRs more time to settle unfiltered_a500 = fir_minphase(unfiltered_a500) unfiltered_a1200 = fir_minphase(unfiltered_a1200) # make digital models for the filters on Amiga 500 and 1200. filter_fixed5khz = make_rc_lopass(AMIGA_PAL_CLOCK, 4900.0) # the leakage filter seems to reduce treble in both models a bit # the A500 filter seems to be well modelled only with a 4.9 kHz # filter although the component values would suggest 5 kHz filter. filter_leakage = make_rc_lopass(AMIGA_PAL_CLOCK, 32000.0) filter_led = make_butterworth(AMIGA_PAL_CLOCK, 3275.0, res_db=-0.70) # apply fixed filter to A500 amiga500_off, error500_off = run_filter(filter_fixed5khz, unfiltered_a500) # produce the filtered outputs amiga1200_off, error1200_off = run_filter(filter_leakage, unfiltered_a1200) # produce LED filters amiga500_on, error500_on = run_filter(filter_led, amiga500_off) amiga1200_on, error1200_on = run_filter(filter_led, amiga1200_off) # these values tell the error from truncating the run_filter() result at end. # print "error term magnitudes: %s" % map(lin2db, (error500_off, error500_on, error1200_off, error1200_on)) if not spectrum: # integrate to produce blep amiga500_off = integrate(amiga500_off) amiga500_on = integrate(amiga500_on) amiga1200_off = integrate(amiga1200_off) amiga1200_on = integrate(amiga1200_on) unfiltered_a1200 = integrate(unfiltered_a1200) # quantize and scale amiga500_off = quantize(amiga500_off, bits=17, scale=(not spectrum)) amiga500_on = quantize(amiga500_on, bits=17, scale=(not spectrum)) amiga1200_off = quantize(amiga1200_off, bits=17, scale=(not spectrum)) amiga1200_on = quantize(amiga1200_on, bits=17, scale=(not spectrum)) unfiltered_a1200 = quantize(unfiltered_a1200, bits=17, scale=(not spectrum)) if spectrum: spec = int(sys.argv[1]) if spec == -1: table = unfiltered_a1200 if spec == 0: table = amiga500_off if spec == 1: table = amiga500_on if spec == 2: table = amiga1200_off if spec == 3: table = amiga1200_on table = list(table); table += [0] * (16384 - len(table)) print_spectrum(fft(table), sample_rate=AMIGA_PAL_CLOCK) else: print " /*" print " * Table generated by contrib/sinc-integral.py." print " */" print print '#include "sinctable.h"' print print "/* tables are: a500 off, a500 on, a1200 off, a1200 on, vanilla. */" print "const int winsinc_integral[5][%d] = {" % len(unfiltered_a1200) print_fir(amiga500_off, format='c') print_fir(amiga500_on, format='c') print_fir(amiga1200_off, format='c') print_fir(amiga1200_on, format='c') print_fir(unfiltered_a1200, format='c') print "};" if __name__ == '__main__': main() fs-uae-2.2.3+dfsg/src/contrib/sum32.c0000644000175000017500000000306511272401230017401 0ustar glaubitzglaubitz/* A tool to compute 32-bit big-endian sums of given files. It simply adds all the 32-bit words inside file together by using two's complement arithmetics. The last 32-bit word in the file is padded with zero bytes if the file size is not divisible by 4. This tool can be used for creating work-around lists for certain eagleplayers. For example, Gobliins 2 (Infogrames replayer) are work-arounded by using checksums. USAGE: ./sum32 myfile */ #include #include #include #include #include #include static void err(const char *s) { fprintf(stderr, "Error reading %s\n", s); } int main(int argc, char *argv[]) { int i, j, retval = 0; uint32_t *arr = NULL; size_t rsize, nwords, ret; for (i = 1; i < argc; i++) { FILE *f = fopen(argv[i], "r"); uint32_t sum; struct stat st; if (!f) goto error; if (stat(argv[i], &st)) goto error; if (st.st_size == 0) goto error; rsize = (st.st_size + 3) & ~3; /* round to divisible by 4 */ arr = malloc(rsize); if (arr == NULL) goto error; nwords = rsize / 4; arr[nwords - 1] = 0; ret = fread(arr, st.st_size, 1, f); if (ret == 0) goto error; sum = 0; for (j = 0; j < nwords; j++) sum += ntohl(arr[j]); printf("%s sum32 0x%.8x size %zd\n", argv[i], sum, st.st_size); free(arr); arr = NULL; fclose(f); continue; error: err(argv[i]); if (f) fclose(f); free(arr); retval = 1; } return retval; } fs-uae-2.2.3+dfsg/src/build68k.cpp0000644000175000017500000001444012162366655017003 0ustar glaubitzglaubitz/* * UAE - The Un*x Amiga Emulator * * Read 68000 CPU specs from file "table68k" and build table68k.c * * Copyright 1995,1996 Bernd Schmidt */ #ifdef FSUAE #define UAE_CONSOLE #endif #include #include #include #include #define TCHAR char #include "sysconfig.h" #include "sysdeps.h" #include "readcpu.h" #ifdef FSUAE #define write_log_standard printf #endif static FILE *tablef; static int nextch = 0; static void getnextch(void) { do { nextch = fgetc(tablef); if (nextch == '%') { do { nextch = fgetc(tablef); } while (nextch != EOF && nextch != '\n'); } } while (nextch != EOF && isspace(nextch)); } static int nextchtohex(void) { switch (isupper (nextch) ? tolower (nextch) : nextch) { case '0': return 0; case '1': return 1; case '2': return 2; case '3': return 3; case '4': return 4; case '5': return 5; case '6': return 6; case '7': return 7; case '8': return 8; case '9': return 9; case 'a': return 10; case 'b': return 11; case 'c': return 12; case 'd': return 13; case 'e': return 14; case 'f': return 15; default: abort(); } } int main(int argc, char **argv) { int no_insns = 0; printf ("#include \"sysconfig.h\"\n"); printf ("#include \"sysdeps.h\"\n"); printf ("#include \"readcpu.h\"\n"); printf ("struct instr_def defs68k[] = {\n"); #if 0 tablef = fopen("table68k","r"); if (tablef == NULL) { fprintf(stderr, "table68k not found\n"); exit(1); } #else tablef = stdin; #endif getnextch(); while (nextch != EOF) { int cpulevel, uncpulevel, plevel, sduse; int i; char patbits[16]; char opcstr[256]; int bitpos[16]; int flagset[5], flaguse[5]; unsigned int bitmask,bitpattern; int n_variable; n_variable = 0; bitmask = bitpattern = 0; memset (bitpos, 0, sizeof(bitpos)); for(i=0; i<16; i++) { int currbit; bitmask <<= 1; bitpattern <<= 1; switch (nextch) { case '0': currbit = bit0; bitmask |= 1; break; case '1': currbit = bit1; bitmask |= 1; bitpattern |= 1; break; case 'c': currbit = bitc; break; case 'C': currbit = bitC; break; case 'f': currbit = bitf; break; case 'i': currbit = biti; break; case 'I': currbit = bitI; break; case 'j': currbit = bitj; break; case 'J': currbit = bitJ; break; case 'k': currbit = bitk; break; case 'K': currbit = bitK; break; case 's': currbit = bits; break; case 'S': currbit = bitS; break; case 'd': currbit = bitd; break; case 'D': currbit = bitD; break; case 'r': currbit = bitr; break; case 'R': currbit = bitR; break; case 'z': currbit = bitz; break; case 'p': currbit = bitp; break; default: abort(); } if (!(bitmask & 1)) { bitpos[n_variable] = currbit; n_variable++; } if (nextch == '0' || nextch == '1') bitmask |= 1; if (nextch == '1') bitpattern |= 1; patbits[i] = nextch; getnextch(); } while (isspace(nextch) || nextch == ':') /* Get CPU level, unimplemented level, and privilege level */ getnextch(); switch (nextch) { case '0': cpulevel = 0; break; case '1': cpulevel = 1; break; case '2': cpulevel = 2; break; case '3': cpulevel = 3; break; case '4': cpulevel = 4; break; case '5': cpulevel = 5; break; case '6': cpulevel = 6; break; case '7': cpulevel = 7; break; default: abort(); } getnextch(); switch (nextch) { case '0': uncpulevel = 0; break; case '1': uncpulevel = 1; break; case '2': uncpulevel = 2; break; case '3': uncpulevel = 3; break; case '4': uncpulevel = 4; break; case '5': uncpulevel = 5; break; case '6': uncpulevel = 6; break; case '7': uncpulevel = 7; break; default: abort(); } getnextch(); switch (nextch) { case '0': plevel = 0; break; case '1': plevel = 1; break; case '2': plevel = 2; break; case '3': plevel = 3; break; default: abort(); } getnextch(); while (isspace(nextch)) /* Get flag set information */ getnextch(); if (nextch != ':') abort(); for(i = 0; i < 5; i++) { getnextch(); switch(nextch){ case '-': flagset[i] = fa_unset; break; case '/': flagset[i] = fa_isjmp; break; case '+': flagset[i] = fa_isbranch; break; case '0': flagset[i] = fa_zero; break; case '1': flagset[i] = fa_one; break; case 'x': flagset[i] = fa_dontcare; break; case '?': flagset[i] = fa_unknown; break; default: flagset[i] = fa_set; break; } } getnextch(); while (isspace(nextch)) getnextch(); if (nextch != ':') /* Get flag used information */ abort(); for(i = 0; i < 5; i++) { getnextch(); switch(nextch){ case '-': flaguse[i] = fu_unused; break; case '/': flaguse[i] = fu_isjmp; break; case '+': flaguse[i] = fu_maybecc; break; case '?': flaguse[i] = fu_unknown; break; default: flaguse[i] = fu_used; break; } } getnextch(); while (isspace(nextch)) getnextch(); if (nextch != ':') /* Get source/dest usage information */ abort(); getnextch(); sduse = nextchtohex() << 4; getnextch(); sduse |= nextchtohex(); getnextch(); while (isspace(nextch)) getnextch(); if (nextch != ':') abort(); fgets(opcstr, 250, tablef); getnextch(); { int j; /* Remove superfluous spaces from the string */ char *opstrp = opcstr, *osendp; char tmp[100], *p; int slen = 0; while (isspace(*opstrp)) opstrp++; osendp = opstrp; while (*osendp) { if (!isspace (*osendp)) slen = osendp - opstrp + 1; osendp++; } opstrp[slen] = 0; if (no_insns > 0) printf(",\n"); no_insns++; strcpy (tmp, opstrp); strcat (tmp, " "); p = tmp; while (!isspace(*p++)); *p = 0; printf("/* %s */\n", tmp); printf("{0x%04X,%2d,{", bitpattern, n_variable); for (j = 0; j < 16; j++) { printf("%2d", bitpos[j]); if (j < 15) printf(","); } printf ("},0x%04X,%d,%d,%d,{", bitmask, cpulevel, uncpulevel, plevel); for(i = 0; i < 5; i++) { printf("{%d,%d}%s", flaguse[i], flagset[i], i == 4 ? "" : ","); } printf("},%2d,_T(\"%s\")}", sduse, opstrp); } } printf("};\nint n_defs68k = %d;\n", no_insns); return 0; } fs-uae-2.2.3+dfsg/src/inputevents.def0000644000175000017500000007563412162366655017727 0ustar glaubitzglaubitz/* joystick/mouse port 1 */ DEFEVENT(JOYPORT1_START,_T("[Joystick port 1]"), AM_INFO, 0,1,0) DEFEVENT(MOUSE1_FIRST, _T(""), AM_DUMMY, 0,0,0) DEFEVENT(MOUSE1_HORIZ,_T("Mouse1 Horizontal"),AM_MOUSE_AXIS|AM_JOY_AXIS,8,1,0) DEFEVENT(MOUSE1_VERT,_T("Mouse1 Vertical"),AM_MOUSE_AXIS|AM_JOY_AXIS,8,1,1) DEFEVENT(MOUSE1_HORIZ_INV,_T("Mouse1 Horizontal (inverted)"),AM_MOUSE_AXIS|AM_JOY_AXIS,8,1,0|IE_INVERT) DEFEVENT(MOUSE1_VERT_INV,_T("Mouse1 Vertical (inverted)"),AM_MOUSE_AXIS|AM_JOY_AXIS,8,1,1|IE_INVERT) DEFEVENT(MOUSE1_UP,_T("Mouse1 Up"),AM_KEY|AM_JOY_BUT|AM_MOUSE_BUT,32,1,DIR_UP) DEFEVENT(MOUSE1_DOWN,_T("Mouse1 Down"),AM_KEY|AM_JOY_BUT|AM_MOUSE_BUT,32,1,DIR_DOWN) DEFEVENT(MOUSE1_LEFT,_T("Mouse1 Left"),AM_KEY|AM_JOY_BUT|AM_MOUSE_BUT,64,1,DIR_LEFT) DEFEVENT(MOUSE1_RIGHT,_T("Mouse1 Right"),AM_KEY|AM_JOY_BUT|AM_MOUSE_BUT,64,1,DIR_RIGHT) DEFEVENT(MOUSE1_WHEEL,_T("Mouse1 Wheel"),AM_MOUSE_AXIS|AM_JOY_AXIS,8,1,2) DEFEVENT(MOUSE1_LAST, _T(""), AM_DUMMY, 0,0,0) DEFEVENT(MOUSE_CDTV_HORIZ,_T("CDTV Mouse Horizontal"),AM_JOY_AXIS,8,1,0|IE_CDTV) DEFEVENT(MOUSE_CDTV_VERT,_T("CDTV Mouse Vertical"),AM_JOY_AXIS,8,1,1|IE_CDTV) DEFEVENT(MOUSE_CDTV_UP,_T("CDTV Mouse Up"),AM_KEY|AM_JOY_BUT|AM_MOUSE_BUT,32,1,DIR_UP|IE_CDTV) DEFEVENT(MOUSE_CDTV_DOWN,_T("CDTV Mouse Down"),AM_KEY|AM_JOY_BUT|AM_MOUSE_BUT,32,1,DIR_DOWN|IE_CDTV) DEFEVENT(MOUSE_CDTV_LEFT,_T("CDTV Mouse Left"),AM_KEY|AM_JOY_BUT|AM_MOUSE_BUT,64,1,DIR_LEFT|IE_CDTV) DEFEVENT(MOUSE_CDTV_RIGHT,_T("CDTV Mouse Right"),AM_KEY|AM_JOY_BUT|AM_MOUSE_BUT,64,1,DIR_RIGHT|IE_CDTV) DEFEVENT(JOY1_HORIZ,_T("Joy1 Horizontal"),AM_JOY_AXIS,0,1,DIR_LEFT|DIR_RIGHT) DEFEVENT(JOY1_VERT,_T("Joy1 Vertical"),AM_JOY_AXIS,0,1,DIR_UP|DIR_DOWN) DEFEVENT(JOY1_HORIZ_POT,_T("Joy1 Horizontal (Analog)"),AM_JOY_AXIS,128,1,1) DEFEVENT(JOY1_VERT_POT,_T("Joy1 Vertical (Analog)"),AM_JOY_AXIS,128,1,0) DEFEVENT(JOY1_HORIZ_POT_INV,_T("Joy1 Horizontal (Analog, inverted)"),AM_JOY_AXIS,128,1,1|IE_INVERT) DEFEVENT(JOY1_VERT_POT_INV,_T("Joy1 Vertical (Analog, inverted)"),AM_JOY_AXIS,128,1,0|IE_INVERT) DEFEVENT(JOY1_LEFT,_T("Joy1 Left"),AM_K,16,1,DIR_LEFT) DEFEVENT(JOY1_RIGHT,_T("Joy1 Right"),AM_K,16,1,DIR_RIGHT) DEFEVENT(JOY1_UP,_T("Joy1 Up"),AM_K,16,1,DIR_UP) DEFEVENT(JOY1_DOWN,_T("Joy1 Down"),AM_K,16,1,DIR_DOWN) DEFEVENT(JOY1_LEFT_UP,_T("Joy1 Left+Up"),AM_K,16,1,DIR_LEFT|DIR_UP) DEFEVENT(JOY1_LEFT_DOWN,_T("Joy1 Left+Down"),AM_K,16,1,DIR_LEFT|DIR_DOWN) DEFEVENT(JOY1_RIGHT_UP,_T("Joy1 Right+Up"),AM_K,16,1,DIR_RIGHT|DIR_UP) DEFEVENT(JOY1_RIGHT_DOWN,_T("Joy1 Right+Down"),AM_K,16,1,DIR_RIGHT|DIR_DOWN) DEFEVENT(JOY1_FIRE_BUTTON,_T("Joy1 Fire/Mouse1 Left Button"),AM_K,4,1,JOYBUTTON_1) DEFEVENT(JOY1_2ND_BUTTON,_T("Joy1 2nd Button/Mouse1 Right Button"),AM_K,4,1,JOYBUTTON_2) DEFEVENT(JOY1_3RD_BUTTON,_T("Joy1 3rd Button/Mouse1 Middle Button"),AM_K,4,1,JOYBUTTON_3) DEFEVENT(JOY1_CD32_PLAY,_T("Joy1 CD32 Play"),AM_K,4,1,JOYBUTTON_CD32_PLAY) DEFEVENT(JOY1_CD32_RWD,_T("Joy1 CD32 RWD"),AM_K,4,1,JOYBUTTON_CD32_RWD) DEFEVENT(JOY1_CD32_FFW,_T("Joy1 CD32 FFW"),AM_K,4,1,JOYBUTTON_CD32_FFW) DEFEVENT(JOY1_CD32_GREEN,_T("Joy1 CD32 Green"),AM_K,4,1,JOYBUTTON_CD32_GREEN) DEFEVENT(JOY1_CD32_YELLOW,_T("Joy1 CD32 Yellow"),AM_K,4,1,JOYBUTTON_CD32_YELLOW) DEFEVENT(JOY1_CD32_RED,_T("Joy1 CD32 Red"),AM_K,4,1,JOYBUTTON_CD32_RED) DEFEVENT(JOY1_CD32_BLUE,_T("Joy1 CD32 Blue"),AM_K,4,1,JOYBUTTON_CD32_BLUE) /* joystick/mouse port 2 */ DEFEVENT(JOYPORT2_START,_T("[Joystick port 2]"), AM_INFO, 0,2,0) DEFEVENT(MOUSE2_FIRST, _T(""), AM_DUMMY, 0,0,0) DEFEVENT(MOUSE2_HORIZ,_T("Mouse2 Horizontal"),AM_MOUSE_AXIS|AM_JOY_AXIS,8,2,0) DEFEVENT(MOUSE2_VERT,_T("Mouse2 Vertical"),AM_MOUSE_AXIS|AM_JOY_AXIS,8,2,1) DEFEVENT(MOUSE2_HORIZ_INV,_T("Mouse2 Horizontal (inverted)"),AM_MOUSE_AXIS|AM_JOY_AXIS,8,2,0|IE_INVERT) DEFEVENT(MOUSE2_VERT_INV,_T("Mouse2 Vertical (inverted)"),AM_MOUSE_AXIS|AM_JOY_AXIS,8,2,1|IE_INVERT) DEFEVENT(MOUSE2_UP,_T("Mouse2 Up"),AM_KEY|AM_JOY_BUT|AM_MOUSE_BUT,32,2,DIR_UP) DEFEVENT(MOUSE2_DOWN,_T("Mouse2 Down"),AM_KEY|AM_JOY_BUT|AM_MOUSE_BUT,32,2,DIR_DOWN) DEFEVENT(MOUSE2_LEFT,_T("Mouse2 Left"),AM_KEY|AM_JOY_BUT|AM_MOUSE_BUT,64,2,DIR_LEFT) DEFEVENT(MOUSE2_RIGHT,_T("Mouse2 Right"),AM_KEY|AM_JOY_BUT|AM_MOUSE_BUT,64,2,DIR_RIGHT) DEFEVENT(MOUSE2_LAST, _T(""), AM_DUMMY, 0,0,0) DEFEVENT(JOY2_HORIZ,_T("Joy2 Horizontal"),AM_JOY_AXIS,0,2,DIR_LEFT|DIR_RIGHT) DEFEVENT(JOY2_VERT,_T("Joy2 Vertical"),AM_JOY_AXIS,0,2,DIR_UP|DIR_DOWN) DEFEVENT(JOY2_HORIZ_POT,_T("Joy2 Horizontal (Analog)"),AM_JOY_AXIS,128,2,1) DEFEVENT(JOY2_VERT_POT,_T("Joy2 Vertical (Analog)"),AM_JOY_AXIS,128,2,0) DEFEVENT(JOY2_HORIZ_POT_INV,_T("Joy2 Horizontal (Analog, inverted)"),AM_JOY_AXIS,128,2,1|IE_INVERT) DEFEVENT(JOY2_VERT_POT_INV,_T("Joy2 Vertical (Analog, inverted)"),AM_JOY_AXIS,128,2,0|IE_INVERT) DEFEVENT(JOY2_LEFT,_T("Joy2 Left"),AM_K,16,2,DIR_LEFT) DEFEVENT(JOY2_RIGHT,_T("Joy2 Right"),AM_K,16,2,DIR_RIGHT) DEFEVENT(JOY2_UP,_T("Joy2 Up"),AM_K,16,2,DIR_UP) DEFEVENT(JOY2_DOWN,_T("Joy2 Down"),AM_K,16,2,DIR_DOWN) DEFEVENT(JOY2_LEFT_UP,_T("Joy2 Left+Up"),AM_K,16,2,DIR_LEFT|DIR_UP) DEFEVENT(JOY2_LEFT_DOWN,_T("Joy2 Left+Down"),AM_K,16,2,DIR_LEFT|DIR_DOWN) DEFEVENT(JOY2_RIGHT_UP,_T("Joy2 Right+Up"),AM_K,16,2,DIR_RIGHT|DIR_UP) DEFEVENT(JOY2_RIGHT_DOWN,_T("Joy2 Right+Down"),AM_K,16,2,DIR_RIGHT|DIR_DOWN) DEFEVENT(JOY2_FIRE_BUTTON,_T("Joy2 Fire/Mouse2 Left Button"),AM_K,4,2,JOYBUTTON_1) DEFEVENT(JOY2_2ND_BUTTON,_T("Joy2 2nd Button/Mouse2 Right Button"),AM_K,4,2,JOYBUTTON_2) DEFEVENT(JOY2_3RD_BUTTON,_T("Joy2 3rd Button/Mouse2 Middle Button"),AM_K,4,2,JOYBUTTON_3) DEFEVENT(JOY2_CD32_PLAY,_T("Joy2 CD32 Play"),AM_K,4,2,JOYBUTTON_CD32_PLAY) DEFEVENT(JOY2_CD32_RWD,_T("Joy2 CD32 RWD"),AM_K,4,2,JOYBUTTON_CD32_RWD) DEFEVENT(JOY2_CD32_FFW,_T("Joy2 CD32 FFW"),AM_K,4,2,JOYBUTTON_CD32_FFW) DEFEVENT(JOY2_CD32_GREEN,_T("Joy2 CD32 Green"),AM_K,4,2,JOYBUTTON_CD32_GREEN) DEFEVENT(JOY2_CD32_YELLOW,_T("Joy2 CD32 Yellow"),AM_K,4,2,JOYBUTTON_CD32_YELLOW) DEFEVENT(JOY2_CD32_RED,_T("Joy2 CD32 Red"),AM_K,4,2,JOYBUTTON_CD32_RED) DEFEVENT(JOY2_CD32_BLUE,_T("Joy2 CD32 Blue"),AM_K,4,2,JOYBUTTON_CD32_BLUE) DEFEVENT(LIGHTPEN_FIRST, _T(""), AM_DUMMY, 0,0,0) DEFEVENT(LIGHTPEN_HORIZ,_T("Lightpen Horizontal"),AM_MOUSE_AXIS|AM_JOY_AXIS,0,5,0) DEFEVENT(LIGHTPEN_VERT,_T("Lightpen Vertical"),AM_MOUSE_AXIS|AM_JOY_AXIS,0,5,1) DEFEVENT(LIGHTPEN_LEFT,_T("Lightpen Left"),AM_K,1,5,DIR_LEFT) DEFEVENT(LIGHTPEN_RIGHT,_T("Lightpen Right"),AM_K,1,5,DIR_RIGHT) DEFEVENT(LIGHTPEN_UP,_T("Lightpen Up"),AM_K,1,5,DIR_UP) DEFEVENT(LIGHTPEN_DOWN,_T("Lightpen Down"),AM_K,1,5,DIR_DOWN) DEFEVENT(LIGHTPEN_LAST, _T(""), AM_DUMMY, 0,0,0) /* parallel port joystick adapter */ DEFEVENT(PAR_JOY1_START, _T("[Parallel port joystick adapter]"), AM_INFO, 0,3,0) DEFEVENT(PAR_JOY1_HORIZ,_T("Parallel Joy1 Horizontal"),AM_JOY_AXIS,0,3,DIR_LEFT|DIR_RIGHT) DEFEVENT(PAR_JOY1_VERT,_T("Parallel Joy1 Vertical"),AM_JOY_AXIS,0,3,DIR_UP|DIR_DOWN) DEFEVENT(PAR_JOY1_LEFT,_T("Parallel Joy1 Left"),AM_K,16,3,DIR_LEFT) DEFEVENT(PAR_JOY1_RIGHT,_T("Parallel Joy1 Right"),AM_K,16,3,DIR_RIGHT) DEFEVENT(PAR_JOY1_UP,_T("Parallel Joy1 Up"),AM_K,16,3,DIR_UP) DEFEVENT(PAR_JOY1_DOWN,_T("Parallel Joy1 Down"),AM_K,16,3,DIR_DOWN) DEFEVENT(PAR_JOY1_LEFT_UP,_T("Parallel Joy1 Left+Up"),AM_K,16,3,DIR_LEFT|DIR_UP) DEFEVENT(PAR_JOY1_LEFT_DOWN,_T("Parallel Joy1 Left+Down"),AM_K,16,3,DIR_LEFT|DIR_DOWN) DEFEVENT(PAR_JOY1_RIGHT_UP,_T("Parallel Joy1 Right+Up"),AM_K,16,3,DIR_RIGHT|DIR_UP) DEFEVENT(PAR_JOY1_RIGHT_DOWN,_T("Parallel Joy1 Right+Down"),AM_K,16,3,DIR_RIGHT|DIR_DOWN) DEFEVENT(PAR_JOY1_FIRE_BUTTON,_T("Parallel Joy1 Fire Button"),AM_K,4,3,JOYBUTTON_1) DEFEVENT(PAR_JOY1_2ND_BUTTON,_T("Parallel Joy1 Spare/2nd Button"),AM_K,4,3,JOYBUTTON_2) DEFEVENT(PAR_JOY2_START, _T(""), AM_DUMMY, 0,4,0) DEFEVENT(PAR_JOY2_HORIZ,_T("Parallel Joy2 Horizontal"),AM_JOY_AXIS,0,4,DIR_LEFT|DIR_RIGHT) DEFEVENT(PAR_JOY2_VERT,_T("Parallel Joy2 Vertical"),AM_JOY_AXIS,0,4,DIR_UP|DIR_DOWN) DEFEVENT(PAR_JOY2_LEFT,_T("Parallel Joy2 Left"),AM_K,16,4,DIR_LEFT) DEFEVENT(PAR_JOY2_RIGHT,_T("Parallel Joy2 Right"),AM_K,16,4,DIR_RIGHT) DEFEVENT(PAR_JOY2_UP,_T("Parallel Joy2 Up"),AM_K,16,4,DIR_UP) DEFEVENT(PAR_JOY2_DOWN,_T("Parallel Joy2 Down"),AM_K,16,4,DIR_DOWN) DEFEVENT(PAR_JOY2_LEFT_UP,_T("Parallel Joy2 Left+Up"),AM_K,16,4,DIR_LEFT|DIR_UP) DEFEVENT(PAR_JOY2_LEFT_DOWN,_T("Parallel Joy2 Left+Down"),AM_K,16,4,DIR_LEFT|DIR_DOWN) DEFEVENT(PAR_JOY2_RIGHT_UP,_T("Parallel Joy2 Right+Up"),AM_K,16,4,DIR_RIGHT|DIR_UP) DEFEVENT(PAR_JOY2_RIGHT_DOWN,_T("Parallel Joy2 Right+Down"),AM_K,16,4,DIR_RIGHT|DIR_DOWN) DEFEVENT(PAR_JOY2_FIRE_BUTTON,_T("Parallel Joy2 Fire Button"),AM_K,4,4,JOYBUTTON_1) DEFEVENT(PAR_JOY2_2ND_BUTTON,_T("Parallel Joy2 Spare/2nd Button"),AM_K,4,4,JOYBUTTON_2) DEFEVENT(PAR_JOY_END, _T(""), AM_DUMMY, 0,0,0) /* qualifiers */ DEFEVENT(SPC_QUALIFIER_START,_T("[Qualifiers]"),AM_INFO, 0,0,0) DEFEVENT(SPC_QUALIFIER1,_T("Qualifier 1"),AM_KK,0,0,AKS_QUALIFIER1) DEFEVENT(SPC_QUALIFIER2,_T("Qualifier 2"),AM_KK,0,0,AKS_QUALIFIER2) DEFEVENT(SPC_QUALIFIER3,_T("Qualifier 3"),AM_KK,0,0,AKS_QUALIFIER3) DEFEVENT(SPC_QUALIFIER4,_T("Qualifier 4"),AM_KK,0,0,AKS_QUALIFIER4) DEFEVENT(SPC_QUALIFIER5,_T("Qualifier 5"),AM_KK,0,0,AKS_QUALIFIER5) DEFEVENT(SPC_QUALIFIER6,_T("Qualifier 6"),AM_KK,0,0,AKS_QUALIFIER6) DEFEVENT(SPC_QUALIFIER7,_T("Qualifier 7"),AM_KK,0,0,AKS_QUALIFIER7) DEFEVENT(SPC_QUALIFIER8,_T("Qualifier 8"),AM_KK,0,0,AKS_QUALIFIER8) DEFEVENT(SPC_QUALIFIER_SPECIAL,_T("Qualifier Special"),AM_KK,0,0,AKS_QUALIFIER_SPECIAL) DEFEVENT(SPC_QUALIFIER_SHIFT,_T("Qualifier Shift"),AM_KK,0,0,AKS_QUALIFIER_SHIFT) DEFEVENT(SPC_QUALIFIER_CONTROL,_T("Qualifier Control"),AM_KK,0,0,AKS_QUALIFIER_CONTROL) DEFEVENT(SPC_QUALIFIER_ALT,_T("Qualifier Alt"),AM_KK,0,0,AKS_QUALIFIER_ALT) DEFEVENT(SPC_QUALIFIER_WIN,_T("Qualifier Win"),AM_KK,0,0,AKS_QUALIFIER_WIN) DEFEVENT(SPC_QUALIFIER_END, _T(""), AM_DUMMY, 0,0,0) /* keys */ DEFEVENT(KEY_START,_T("[Keyboard]"),AM_INFO, 0,0,0) DEFEVENT(KEY_F1,_T("F1"),AM_K,0,0,AK_F1) DEFEVENT(KEY_F2,_T("F2"),AM_K,0,0,AK_F2) DEFEVENT(KEY_F3,_T("F3"),AM_K,0,0,AK_F3) DEFEVENT(KEY_F4,_T("F4"),AM_K,0,0,AK_F4) DEFEVENT(KEY_F5,_T("F5"),AM_K,0,0,AK_F5) DEFEVENT(KEY_F6,_T("F6"),AM_K,0,0,AK_F6) DEFEVENT(KEY_F7,_T("F7"),AM_K,0,0,AK_F7) DEFEVENT(KEY_F8,_T("F8"),AM_K,0,0,AK_F8) DEFEVENT(KEY_F9,_T("F9"),AM_K,0,0,AK_F9) DEFEVENT(KEY_F10,_T("F10"),AM_K,0,0,AK_F10) /* "special" keys */ DEFEVENT(KEY_ESC,_T("ESC"),AM_K,0,0,AK_ESC) DEFEVENT(KEY_TAB,_T("Tab"),AM_K,0,0,AK_TAB) DEFEVENT(KEY_CTRL,_T("CTRL"),AM_K,0,0,AK_CTRL) DEFEVENT(KEY_CAPS_LOCK,_T("Caps Lock"),AM_K,0,0,AK_CAPSLOCK) DEFEVENT(KEY_SHIFT_LEFT,_T("Left Shift"),AM_K,0,0,AK_LSH) DEFEVENT(KEY_ALT_LEFT,_T("Left Alt"),AM_K,0,0,AK_LALT) DEFEVENT(KEY_AMIGA_LEFT,_T("Left Amiga"),AM_K,0,0,AK_LAMI) DEFEVENT(KEY_AMIGA_RIGHT,_T("Right Amiga"),AM_K,0,0,AK_RAMI) DEFEVENT(KEY_ALT_RIGHT,_T("Right Alt"),AM_K,0,0,AK_RALT) DEFEVENT(KEY_SHIFT_RIGHT,_T("Right Shift"),AM_K,0,0,AK_RSH) DEFEVENT(KEY_SPACE,_T("Space"),AM_K,0,0,AK_SPC) DEFEVENT(KEY_CURSOR_UP,_T("Cursor Up"),AM_K,0,0,AK_UP) DEFEVENT(KEY_CURSOR_DOWN,_T("Cursor Down"),AM_K,0,0,AK_DN) DEFEVENT(KEY_CURSOR_LEFT,_T("Cursor Left"),AM_K,0,0,AK_LF) DEFEVENT(KEY_CURSOR_RIGHT,_T("Cursor Right"),AM_K,0,0,AK_RT) DEFEVENT(KEY_HELP,_T("Help"),AM_K,0,0,AK_HELP) DEFEVENT(KEY_DEL,_T("Del"),AM_K,0,0,AK_DEL) DEFEVENT(KEY_BACKSPACE,_T("Backspace"),AM_K,0,0,AK_BS) DEFEVENT(KEY_RETURN,_T("Return"),AM_K,0,0,AK_RET) DEFEVENT(KEY_A,_T("A"),AM_K,0,0,AK_A) DEFEVENT(KEY_B,_T("B"),AM_K,0,0,AK_B) DEFEVENT(KEY_C,_T("C"),AM_K,0,0,AK_C) DEFEVENT(KEY_D,_T("D"),AM_K,0,0,AK_D) DEFEVENT(KEY_E,_T("E"),AM_K,0,0,AK_E) DEFEVENT(KEY_F,_T("F"),AM_K,0,0,AK_F) DEFEVENT(KEY_G,_T("G"),AM_K,0,0,AK_G) DEFEVENT(KEY_H,_T("H"),AM_K,0,0,AK_H) DEFEVENT(KEY_I,_T("I"),AM_K,0,0,AK_I) DEFEVENT(KEY_J,_T("J"),AM_K,0,0,AK_J) DEFEVENT(KEY_K,_T("K"),AM_K,0,0,AK_K) DEFEVENT(KEY_L,_T("L"),AM_K,0,0,AK_L) DEFEVENT(KEY_M,_T("M"),AM_K,0,0,AK_M) DEFEVENT(KEY_N,_T("N"),AM_K,0,0,AK_N) DEFEVENT(KEY_O,_T("O"),AM_K,0,0,AK_O) DEFEVENT(KEY_P,_T("P"),AM_K,0,0,AK_P) DEFEVENT(KEY_Q,_T("Q"),AM_K,0,0,AK_Q) DEFEVENT(KEY_R,_T("R"),AM_K,0,0,AK_R) DEFEVENT(KEY_S,_T("S"),AM_K,0,0,AK_S) DEFEVENT(KEY_T,_T("T"),AM_K,0,0,AK_T) DEFEVENT(KEY_U,_T("U"),AM_K,0,0,AK_U) DEFEVENT(KEY_V,_T("V"),AM_K,0,0,AK_V) DEFEVENT(KEY_W,_T("W"),AM_K,0,0,AK_W) DEFEVENT(KEY_X,_T("X"),AM_K,0,0,AK_X) DEFEVENT(KEY_Y,_T("Y"),AM_K,0,0,AK_Y) DEFEVENT(KEY_Z,_T("Z"),AM_K,0,0,AK_Z) /* numpad */ DEFEVENT(KEY_ENTER,_T("Numpad Enter"),AM_K,0,0,AK_ENT) DEFEVENT(KEY_NP_0,_T("Numpad 0"),AM_K,0,0,AK_NP0) DEFEVENT(KEY_NP_1,_T("Numpad 1"),AM_K,0,0,AK_NP1) DEFEVENT(KEY_NP_2,_T("Numpad 2"),AM_K,0,0,AK_NP2) DEFEVENT(KEY_NP_3,_T("Numpad 3"),AM_K,0,0,AK_NP3) DEFEVENT(KEY_NP_4,_T("Numpad 4"),AM_K,0,0,AK_NP4) DEFEVENT(KEY_NP_5,_T("Numpad 5"),AM_K,0,0,AK_NP5) DEFEVENT(KEY_NP_6,_T("Numpad 6"),AM_K,0,0,AK_NP6) DEFEVENT(KEY_NP_7,_T("Numpad 7"),AM_K,0,0,AK_NP7) DEFEVENT(KEY_NP_8,_T("Numpad 8"),AM_K,0,0,AK_NP8) DEFEVENT(KEY_NP_9,_T("Numpad 9"),AM_K,0,0,AK_NP9) DEFEVENT(KEY_NP_PERIOD,_T("Numpad Period"),AM_K,0,0,AK_NPDEL) DEFEVENT(KEY_NP_ADD,_T("Numpad Plus"),AM_K,0,0,AK_NPADD) DEFEVENT(KEY_NP_SUB,_T("Numpad Minus"),AM_K,0,0,AK_NPSUB) DEFEVENT(KEY_NP_MUL,_T("Numpad Multiply"),AM_K,0,0,AK_NPMUL) DEFEVENT(KEY_NP_DIV,_T("Numpad Divide"),AM_K,0,0,AK_NPDIV) DEFEVENT(KEY_NP_LPAREN,_T("Numpad Left Parenthesis"),AM_K,0,0,AK_NPLPAREN) DEFEVENT(KEY_NP_RPAREN,_T("Numpad Right Parenthesis"),AM_K,0,0,AK_NPRPAREN) DEFEVENT(KEY_2B,_T("Keycode 0x2b"),AM_K,0,0,0x2b) DEFEVENT(KEY_30,_T("Keycode 0x30"),AM_K,0,0,0x30) DEFEVENT(KEY_BACKQUOTE,_T("Back Quote"),AM_K,0,0,AK_BACKQUOTE) DEFEVENT(KEY_1,_T("1"),AM_K,0,0,AK_1) DEFEVENT(KEY_2,_T("2"),AM_K,0,0,AK_2) DEFEVENT(KEY_3,_T("3"),AM_K,0,0,AK_3) DEFEVENT(KEY_4,_T("4"),AM_K,0,0,AK_4) DEFEVENT(KEY_5,_T("5"),AM_K,0,0,AK_5) DEFEVENT(KEY_6,_T("6"),AM_K,0,0,AK_6) DEFEVENT(KEY_7,_T("7"),AM_K,0,0,AK_7) DEFEVENT(KEY_8,_T("8"),AM_K,0,0,AK_8) DEFEVENT(KEY_9,_T("9"),AM_K,0,0,AK_9) DEFEVENT(KEY_0,_T("0"),AM_K,0,0,AK_0) DEFEVENT(KEY_SUB,_T("Minus"),AM_K,0,0,AK_MINUS) DEFEVENT(KEY_EQUALS,_T("Equals"),AM_K,0,0,AK_EQUAL) DEFEVENT(KEY_BACKSLASH,_T("Backslash"),AM_K,0,0,AK_BACKSLASH) DEFEVENT(KEY_LEFTBRACKET,_T("Left Bracket"),AM_K,0,0,AK_LBRACKET) DEFEVENT(KEY_RIGHTBRACKET,_T("Right Bracket"),AM_K,0,0,AK_RBRACKET) DEFEVENT(KEY_SEMICOLON,_T("Semicolon"),AM_K,0,0,AK_SEMICOLON) DEFEVENT(KEY_SINGLEQUOTE,_T("Single Quote"),AM_K,0,0,AK_QUOTE) DEFEVENT(KEY_COMMA,_T("Comma"),AM_K,0,0,AK_COMMA) DEFEVENT(KEY_PERIOD,_T("Period"),AM_K,0,0,AK_PERIOD) DEFEVENT(KEY_DIV,_T("Slash"),AM_K,0,0,AK_SLASH) // DEFEVENT(KEY_,_T(""),AM_K,0,0,0x) /* mouse wheel "keys" */ DEFEVENT(MOUSEWHEEL_DOWN,_T("Mouse Wheel Down"),AM_K,0,0,0x7a) DEFEVENT(MOUSEWHEEL_UP,_T("Mouse Wheel Up"),AM_K,0,0,0x7b) /* misc */ DEFEVENT(KEY_CDTV_STOP,_T("CDTV Stop"),AM_K,0,0,0x72) DEFEVENT(KEY_CDTV_PLAYPAUSE,_T("CDTV Play/Pause"),AM_K,0,0,0x73) DEFEVENT(KEY_CDTV_PREV,_T("CDTV Previous"),AM_K,0,0,0x74) DEFEVENT(KEY_CDTV_NEXT,_T("CDTV Next"),AM_K,0,0,0x75) DEFEVENT(KEY_CDTV_REW,_T("CDTV Rewind"),AM_K,0,0,0x76) DEFEVENT(KEY_CDTV_FF,_T("CDTV Fast Forward"),AM_K,0,0,0x77) DEFEVENT(KEY_0E,_T("Keycode 0x0E"),AM_K,0,0,0x0e) DEFEVENT(KEY_1C,_T("Keycode 0x1C"),AM_K,0,0,0x1c) DEFEVENT(KEY_2C,_T("Keycode 0x2C"),AM_K,0,0,0x2C) DEFEVENT(KEY_3B,_T("Keycode 0x3B"),AM_K,0,0,0x3b) DEFEVENT(KEY_68,_T("Keycode 0x68"),AM_K,0,0,0x68) DEFEVENT(KEY_69,_T("Keycode 0x69"),AM_K,0,0,0x69) DEFEVENT(KEY_6A,_T("Keycode 0x6A"),AM_K,0,0,0x6a) DEFEVENT(KEY_6C,_T("Keycode 0x6C"),AM_K,0,0,0x6c) DEFEVENT(KEY_INSERT,_T("Insert (PC)"),AM_K,0,0,0x47) DEFEVENT(KEY_PAGEUP,_T("Page Up (PC)"),AM_K,0,0,0x48) DEFEVENT(KEY_PAGEDOWN,_T("Page Down (PC)"),AM_K,0,0,0x49) DEFEVENT(KEY_F11,_T("F11 (PC)"),AM_K,0,0,0x4b) DEFEVENT(KEY_APPS,_T("Apps (PC)"),AM_K,0,0,0x6b) DEFEVENT(KEY_SYSRQ,_T("PrtScr/SysRq (PC)"),AM_K,0,0,0x6d) DEFEVENT(KEY_PAUSE,_T("Pause/Break (PC)"),AM_K,0,0,0x6e) DEFEVENT(KEY_F12,_T("F12 (PC)"),AM_K,0,0,0x6f) DEFEVENT(KEY_HOME,_T("Home (PC)"),AM_K,0,0,0x70) DEFEVENT(KEY_END,_T("End (PC)"),AM_K,0,0,0x71) DEFEVENT(KEY_78,_T("Keycode 0x78 (Reset Warning)"),AM_K,0,0,0x78) DEFEVENT(KEY_79,_T("Keycode 0x79"),AM_K,0,0,0x79) DEFEVENT(KEY_7A,_T("Keycode 0x7A"),AM_K,0,0,0x7a) DEFEVENT(KEY_7B,_T("Keycode 0x7B"),AM_K,0,0,0x7b) DEFEVENT(KEY_7C,_T("Keycode 0x7C"),AM_K,0,0,0x7c) DEFEVENT(KEY_7D,_T("Keycode 0x7D"),AM_K,0,0,0x7d) DEFEVENT(KEY_7E,_T("Keycode 0x7E"),AM_K,0,0,0x7e) DEFEVENT(KEY_7F,_T("Keycode 0x7F"),AM_K,0,0,0x7f) /* special */ DEFEVENT(SPC_START,_T("[Miscellaneous]"),AM_INFO,0,0,0) DEFEVENT(SPC_CUSTOM_EVENT,_T(""),AM_K,0,0,0) DEFEVENT(SPC_ENTERGUI,_T("Enter GUI"),AM_K,0,0,AKS_ENTERGUI) DEFEVENT(SPC_SCREENSHOT,_T("Screenshot (file)"),AM_K,0,0,AKS_SCREENSHOT_FILE) DEFEVENT(SPC_SCREENSHOT_CLIPBOARD,_T("Screenshot (clipboard)"),AM_K,0,0,AKS_SCREENSHOT_CLIPBOARD) DEFEVENT(SPC_FREEZEBUTTON,_T("Activate Cartridge"),AM_K,0,0,AKS_FREEZEBUTTON) DEFEVENT(SPC_FLOPPY0,_T("Change disk in DF0:"),AM_K,0,0,AKS_FLOPPY0) DEFEVENT(SPC_FLOPPY1,_T("Change disk in DF1:"),AM_K,0,0,AKS_FLOPPY1) DEFEVENT(SPC_FLOPPY2,_T("Change disk in DF2:"),AM_K,0,0,AKS_FLOPPY2) DEFEVENT(SPC_FLOPPY3,_T("Change disk in DF3:"),AM_K,0,0,AKS_FLOPPY3) DEFEVENT(SPC_EFLOPPY0,_T("Eject disk in DF0:"),AM_K,0,0,AKS_EFLOPPY0) DEFEVENT(SPC_EFLOPPY1,_T("Eject disk in DF1:"),AM_K,0,0,AKS_EFLOPPY1) DEFEVENT(SPC_EFLOPPY2,_T("Eject disk in DF2:"),AM_K,0,0,AKS_EFLOPPY2) DEFEVENT(SPC_EFLOPPY3,_T("Eject disk in DF3:"),AM_K,0,0,AKS_EFLOPPY3) DEFEVENT(SPC_PAUSE,_T("Pause emulation"),AM_K,0,0,AKS_PAUSE) DEFEVENT(SPC_WARP,_T("Warp mode"),AM_K,0,0,AKS_WARP) DEFEVENT(SPC_INHIBITSCREEN,_T("Toggle screen updates"),AM_K,0,0,AKS_INHIBITSCREEN) DEFEVENT(SPC_IRQ7,_T("Level 7 interrupt"),AM_K,0,0,AKS_IRQ7) DEFEVENT(SPC_STATEREWIND,_T("Load previous state capture checkpoint"),AM_K,0,0,AKS_STATEREWIND) DEFEVENT(SPC_STATECURRENT,_T("Load current state capture checkpoint"),AM_K,0,0,AKS_STATECURRENT) DEFEVENT(SPC_STATECAPTURE,_T("Save state capture checkpoint"),AM_K,0,0,AKS_STATECAPTURE) DEFEVENT(SPC_VOLUME_DOWN,_T("Decrease volume level"),AM_K,0,0,AKS_VOLDOWN) DEFEVENT(SPC_VOLUME_UP,_T("Increase volume level"),AM_K,0,0,AKS_VOLUP) DEFEVENT(SPC_VOLUME_MUTE,_T("Mute/unmute volume"),AM_K,0,0,AKS_VOLMUTE) DEFEVENT(SPC_MASTER_VOLUME_DOWN,_T("Decrease master volume level"),AM_K,0,0,AKS_MVOLDOWN) DEFEVENT(SPC_MASTER_VOLUME_UP,_T("Increase master volume level"),AM_K,0,0,AKS_MVOLUP) DEFEVENT(SPC_MASTER_VOLUME_MUTE,_T("Mute/unmute master volume"),AM_K,0,0,AKS_MVOLMUTE) DEFEVENT(SPC_QUIT,_T("Quit emulator"),AM_K,0,0,AKS_QUIT) DEFEVENT(SPC_SOFTRESET,_T("Reset emulation"),AM_K,0,0,AKS_SOFTRESET) DEFEVENT(SPC_HARDRESET,_T("Hard reset emulation"),AM_K,0,0,AKS_HARDRESET) DEFEVENT(SPC_ENTERDEBUGGER,_T("Activate the built-in debugger"),AM_K,0,0,AKS_ENTERDEBUGGER) DEFEVENT(SPC_STATESAVE,_T("Quick save state"),AM_K,0,0,AKS_STATESAVEQUICK) DEFEVENT(SPC_STATERESTORE,_T("Quick restore state"),AM_K,0,0,AKS_STATERESTOREQUICK) DEFEVENT(SPC_STATESAVEDIALOG,_T("Save state"),AM_K,0,0,AKS_STATESAVEDIALOG) DEFEVENT(SPC_STATERESTOREDIALOG,_T("Restore state"),AM_K,0,0,AKS_STATERESTOREDIALOG) DEFEVENT(SPC_TOGGLEFULLSCREEN,_T("Toggle windowed/fullscreen"),AM_K,0,0,AKS_TOGGLEWINDOWEDFULLSCREEN) DEFEVENT(SPC_TOGGLEFULLWINDOWFULLSCREEN,_T("Toggle full-window/fullscreen"),AM_K,0,0,AKS_TOGGLEFULLWINDOWFULLSCREEN) DEFEVENT(SPC_TOGGLEWINDOWFULLWINDOW,_T("Toggle window/full-window"),AM_K,0,0,AKS_TOGGLEWINDOWFULLWINDOW) DEFEVENT(SPC_TOGGLEDEFAULTSCREEN,_T("Toggle window/default screen"),AM_K,0,0,AKS_TOGGLEDEFAULTSCREEN) DEFEVENT(SPC_TOGGLEMOUSEGRAB,_T("Toggle between mouse grabbed and un-grabbed"),AM_K,0,0,AKS_TOGGLEMOUSEGRAB) DEFEVENT(SPC_DECREASE_REFRESHRATE,_T("Decrease emulation speed"),AM_K,0,0,AKS_DECREASEREFRESHRATE) DEFEVENT(SPC_INCREASE_REFRESHRATE,_T("Increase emulation speed"),AM_K,0,0,AKS_INCREASEREFRESHRATE) DEFEVENT(SPC_SWITCHINTERPOL,_T("Switch between audio interpolation methods"),AM_K,0,0,AKS_SWITCHINTERPOL) DEFEVENT(SPC_DISKSWAPPER_NEXT,_T("Next slot in Disk Swapper"),AM_K,0,0,AKS_DISKSWAPPER_NEXT) DEFEVENT(SPC_DISKSWAPPER_PREV,_T("Previous slot in Disk Swapper"),AM_K,0,0,AKS_DISKSWAPPER_PREV) DEFEVENT(SPC_DISKSWAPPER_INSERT0,_T("Insert disk in current Disk Swapper slot in DF0:"),AM_K,0,0,AKS_DISKSWAPPER_INSERT0) DEFEVENT(SPC_DISKSWAPPER_INSERT1,_T("Insert disk in current Disk Swapper slot in DF1:"),AM_K,0,0,AKS_DISKSWAPPER_INSERT1) DEFEVENT(SPC_DISKSWAPPER_INSERT2,_T("Insert disk in current Disk Swapper slot in DF2:"),AM_K,0,0,AKS_DISKSWAPPER_INSERT2) DEFEVENT(SPC_DISKSWAPPER_INSERT3,_T("Insert disk in current Disk Swapper slot in DF3:"),AM_K,0,0,AKS_DISKSWAPPER_INSERT3) DEFEVENT(SPC_DISK_PREV0,_T("Previous disk image in DF0:"),AM_K,0,0,AKS_DISK_PREV0) DEFEVENT(SPC_DISK_PREV1,_T("Previous disk image in DF1:"),AM_K,0,0,AKS_DISK_PREV1) DEFEVENT(SPC_DISK_PREV2,_T("Previous disk image in DF2:"),AM_K,0,0,AKS_DISK_PREV2) DEFEVENT(SPC_DISK_PREV3,_T("Previous disk image in DF3:"),AM_K,0,0,AKS_DISK_PREV3) DEFEVENT(SPC_DISK_NEXT0,_T("Next disk image in DF0:"),AM_K,0,0,AKS_DISK_NEXT0) DEFEVENT(SPC_DISK_NEXT1,_T("Next disk image in DF1:"),AM_K,0,0,AKS_DISK_NEXT1) DEFEVENT(SPC_DISK_NEXT2,_T("Next disk image in DF2:"),AM_K,0,0,AKS_DISK_NEXT2) DEFEVENT(SPC_DISK_NEXT3,_T("Next disk image in DF3:"),AM_K,0,0,AKS_DISK_NEXT3) DEFEVENT(SPC_INPUT_CONFIG1,_T("Select Input Configuration #1"),AM_K,0,0,AKS_INPUT_CONFIG_1) DEFEVENT(SPC_INPUT_CONFIG2,_T("Select Input Configuration #2"),AM_K,0,0,AKS_INPUT_CONFIG_2) DEFEVENT(SPC_INPUT_CONFIG3,_T("Select Input Configuration #3"),AM_K,0,0,AKS_INPUT_CONFIG_3) DEFEVENT(SPC_INPUT_CONFIG4,_T("Select GamePorts Input Configuration"),AM_K,0,0,AKS_INPUT_CONFIG_4) DEFEVENT(SPC_ARCADIA_DIAGNOSTICS,_T("Arcadia diagnostics DIP switch"),AM_K,0,0,AKS_ARCADIADIAGNOSTICS) DEFEVENT(SPC_ARCADIA_PLAYER1,_T("Arcadia player 1"),AM_K,0,0,AKS_ARCADIAPLY1) DEFEVENT(SPC_ARCADIA_PLAYER2,_T("Arcadia player 2"),AM_K,0,0,AKS_ARCADIAPLY2) DEFEVENT(SPC_ARCADIA_COIN1,_T("Arcadia coin player 1"),AM_K,0,0,AKS_ARCADIACOIN1) DEFEVENT(SPC_ARCADIA_COIN2,_T("Arcadia coin player 2"),AM_K,0,0,AKS_ARCADIACOIN2) DEFEVENT(SPC_CDTV_FRONT_PANEL_STOP,_T("CDTV Front Panel Stop"),AM_K,0,0,AKS_CDTV_FRONT_PANEL_STOP) DEFEVENT(SPC_CDTV_FRONT_PANEL_PLAYPAUSE,_T("CDTV Front Panel Play/Pause"),AM_K,0,0,AKS_CDTV_FRONT_PANEL_PLAYPAUSE) DEFEVENT(SPC_CDTV_FRONT_PANEL_PREV,_T("CDTV Front Panel Previous"),AM_K,0,0,AKS_CDTV_FRONT_PANEL_PREV) DEFEVENT(SPC_CDTV_FRONT_PANEL_NEXT,_T("CDTV Front Panel Next"),AM_K,0,0,AKS_CDTV_FRONT_PANEL_NEXT) DEFEVENT(SPC_CDTV_FRONT_PANEL_REW,_T("CDTV Front Panel Rewind"),AM_K,0,0,AKS_CDTV_FRONT_PANEL_REW) DEFEVENT(SPC_CDTV_FRONT_PANEL_FF,_T("CDTV Front Panel Fast Forward"),AM_K,0,0,AKS_CDTV_FRONT_PANEL_FF) #ifdef FSUAE DEFEVENT(SPC_STATESAVE1,_T("Quick save state slot 1"),AM_K,0,0,AKS_STATESAVEQUICK1) DEFEVENT(SPC_STATESAVE2,_T("Quick save state slot 2"),AM_K,0,0,AKS_STATESAVEQUICK2) DEFEVENT(SPC_STATESAVE3,_T("Quick save state slot 3"),AM_K,0,0,AKS_STATESAVEQUICK3) DEFEVENT(SPC_STATESAVE4,_T("Quick save state slot 4"),AM_K,0,0,AKS_STATESAVEQUICK4) DEFEVENT(SPC_STATESAVE5,_T("Quick save state slot 5"),AM_K,0,0,AKS_STATESAVEQUICK5) DEFEVENT(SPC_STATESAVE6,_T("Quick save state slot 6"),AM_K,0,0,AKS_STATESAVEQUICK6) DEFEVENT(SPC_STATESAVE7,_T("Quick save state slot 7"),AM_K,0,0,AKS_STATESAVEQUICK7) DEFEVENT(SPC_STATESAVE8,_T("Quick save state slot 8"),AM_K,0,0,AKS_STATESAVEQUICK8) DEFEVENT(SPC_STATESAVE9,_T("Quick save state slot 9"),AM_K,0,0,AKS_STATESAVEQUICK9) DEFEVENT(SPC_STATERESTORE1,_T("Quick restore state slot 1"),AM_K,0,0,AKS_STATERESTOREQUICK1) DEFEVENT(SPC_STATERESTORE2,_T("Quick restore state slot 2"),AM_K,0,0,AKS_STATERESTOREQUICK2) DEFEVENT(SPC_STATERESTORE3,_T("Quick restore state slot 3"),AM_K,0,0,AKS_STATERESTOREQUICK3) DEFEVENT(SPC_STATERESTORE4,_T("Quick restore state slot 4"),AM_K,0,0,AKS_STATERESTOREQUICK4) DEFEVENT(SPC_STATERESTORE5,_T("Quick restore state slot 5"),AM_K,0,0,AKS_STATERESTOREQUICK5) DEFEVENT(SPC_STATERESTORE6,_T("Quick restore state slot 6"),AM_K,0,0,AKS_STATERESTOREQUICK6) DEFEVENT(SPC_STATERESTORE7,_T("Quick restore state slot 7"),AM_K,0,0,AKS_STATERESTOREQUICK7) DEFEVENT(SPC_STATERESTORE8,_T("Quick restore state slot 8"),AM_K,0,0,AKS_STATERESTOREQUICK8) DEFEVENT(SPC_STATERESTORE9,_T("Quick restore state slot 9"),AM_K,0,0,AKS_STATERESTOREQUICK9) // the following "input events" are private to libamiga, and not handled // by UAE code DEFEVENT(PRIVATE_START, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_0_0, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_0_1, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_0_2, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_0_3, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_0_4, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_0_5, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_0_6, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_0_7, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_0_8, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_0_9, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_0_10, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_0_11, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_0_12, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_0_13, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_0_14, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_0_15, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_0_16, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_0_17, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_0_18, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_0_19, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_1_0, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_1_1, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_1_2, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_1_3, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_1_4, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_1_5, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_1_6, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_1_7, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_1_8, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_1_9, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_1_10, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_1_11, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_1_12, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_1_13, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_1_14, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_1_15, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_1_16, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_1_17, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_1_18, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_1_19, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_2_0, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_2_1, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_2_2, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_2_3, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_2_4, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_2_5, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_2_6, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_2_7, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_2_8, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_2_9, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_2_10, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_2_11, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_2_12, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_2_13, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_2_14, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_2_15, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_2_16, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_2_17, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_2_18, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_2_19, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_3_0, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_3_1, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_3_2, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_3_3, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_3_4, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_3_5, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_3_6, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_3_7, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_3_8, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_3_9, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_3_10, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_3_11, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_3_12, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_3_13, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_3_14, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_3_15, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_3_16, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_3_17, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_3_18, _T(""), AM_K, 0, 0, 0) DEFEVENT(SPC_DISKSWAPPER_3_19, _T(""), AM_K, 0, 0, 0) DEFEVENT(AMIGA_JOYPORT_MODE_0_NONE, _T(""), AM_K, 0, 0, 0) DEFEVENT(AMIGA_JOYPORT_MODE_0_MOUSE, _T(""), AM_K, 0, 0, 0) DEFEVENT(AMIGA_JOYPORT_MODE_0_DJOY, _T(""), AM_K, 0, 0, 0) DEFEVENT(AMIGA_JOYPORT_MODE_0_GAMEPAD, _T(""), AM_K, 0, 0, 0) DEFEVENT(AMIGA_JOYPORT_MODE_0_AJOY, _T(""), AM_K, 0, 0, 0) DEFEVENT(AMIGA_JOYPORT_MODE_0_CDTVJOY, _T(""), AM_K, 0, 0, 0) DEFEVENT(AMIGA_JOYPORT_MODE_0_CD32JOY, _T(""), AM_K, 0, 0, 0) DEFEVENT(AMIGA_JOYPORT_MODE_0_LIGHTPEN, _T(""), AM_K, 0, 0, 0) DEFEVENT(AMIGA_JOYPORT_MODE_0_LAST, _T(""), AM_K, 0, 0, 0) DEFEVENT(AMIGA_JOYPORT_MODE_1_NONE, _T(""), AM_K, 0, 0, 0) DEFEVENT(AMIGA_JOYPORT_MODE_1_MOUSE, _T(""), AM_K, 0, 0, 0) DEFEVENT(AMIGA_JOYPORT_MODE_1_DJOY, _T(""), AM_K, 0, 0, 0) DEFEVENT(AMIGA_JOYPORT_MODE_1_GAMEPAD, _T(""), AM_K, 0, 0, 0) DEFEVENT(AMIGA_JOYPORT_MODE_1_AJOY, _T(""), AM_K, 0, 0, 0) DEFEVENT(AMIGA_JOYPORT_MODE_1_CDTVJOY, _T(""), AM_K, 0, 0, 0) DEFEVENT(AMIGA_JOYPORT_MODE_1_CD32JOY, _T(""), AM_K, 0, 0, 0) DEFEVENT(AMIGA_JOYPORT_MODE_1_LIGHTPEN, _T(""), AM_K, 0, 0, 0) DEFEVENT(AMIGA_JOYPORT_MODE_1_LAST, _T(""), AM_K, 0, 0, 0) DEFEVENT(AMIGA_JOYPORT_MODE_2_NONE, _T(""), AM_K, 0, 0, 0) DEFEVENT(AMIGA_JOYPORT_MODE_2_MOUSE, _T(""), AM_K, 0, 0, 0) DEFEVENT(AMIGA_JOYPORT_MODE_2_DJOY, _T(""), AM_K, 0, 0, 0) DEFEVENT(AMIGA_JOYPORT_MODE_2_GAMEPAD, _T(""), AM_K, 0, 0, 0) DEFEVENT(AMIGA_JOYPORT_MODE_2_AJOY, _T(""), AM_K, 0, 0, 0) DEFEVENT(AMIGA_JOYPORT_MODE_2_CDTVJOY, _T(""), AM_K, 0, 0, 0) DEFEVENT(AMIGA_JOYPORT_MODE_2_CD32JOY, _T(""), AM_K, 0, 0, 0) DEFEVENT(AMIGA_JOYPORT_MODE_2_LIGHTPEN, _T(""), AM_K, 0, 0, 0) DEFEVENT(AMIGA_JOYPORT_MODE_2_LAST, _T(""), AM_K, 0, 0, 0) DEFEVENT(AMIGA_JOYPORT_MODE_3_NONE, _T(""), AM_K, 0, 0, 0) DEFEVENT(AMIGA_JOYPORT_MODE_3_MOUSE, _T(""), AM_K, 0, 0, 0) DEFEVENT(AMIGA_JOYPORT_MODE_3_DJOY, _T(""), AM_K, 0, 0, 0) DEFEVENT(AMIGA_JOYPORT_MODE_3_GAMEPAD, _T(""), AM_K, 0, 0, 0) DEFEVENT(AMIGA_JOYPORT_MODE_3_AJOY, _T(""), AM_K, 0, 0, 0) DEFEVENT(AMIGA_JOYPORT_MODE_3_CDTVJOY, _T(""), AM_K, 0, 0, 0) DEFEVENT(AMIGA_JOYPORT_MODE_3_CD32JOY, _T(""), AM_K, 0, 0, 0) DEFEVENT(AMIGA_JOYPORT_MODE_3_LIGHTPEN, _T(""), AM_K, 0, 0, 0) DEFEVENT(AMIGA_JOYPORT_MODE_3_LAST, _T(""), AM_K, 0, 0, 0) DEFEVENT(AMIGA_JOYPORT_0_AUTOFIRE, _T(""), AM_K, 0, 0, 0) DEFEVENT(AMIGA_JOYPORT_1_AUTOFIRE, _T(""), AM_K, 0, 0, 0) DEFEVENT(AMIGA_JOYPORT_2_AUTOFIRE, _T(""), AM_K, 0, 0, 0) DEFEVENT(AMIGA_JOYPORT_3_AUTOFIRE, _T(""), AM_K, 0, 0, 0) DEFEVENT(AMIGA_JOYPORT_0_DEVICE_0, _T(""), AM_K, 0, 0, 0) DEFEVENT(AMIGA_JOYPORT_0_DEVICE_1, _T(""), AM_K, 0, 0, 0) DEFEVENT(AMIGA_JOYPORT_0_DEVICE_2, _T(""), AM_K, 0, 0, 0) DEFEVENT(AMIGA_JOYPORT_0_DEVICE_3, _T(""), AM_K, 0, 0, 0) DEFEVENT(AMIGA_JOYPORT_0_DEVICE_4, _T(""), AM_K, 0, 0, 0) DEFEVENT(AMIGA_JOYPORT_0_DEVICE_5, _T(""), AM_K, 0, 0, 0) DEFEVENT(AMIGA_JOYPORT_0_DEVICE_6, _T(""), AM_K, 0, 0, 0) DEFEVENT(AMIGA_JOYPORT_0_DEVICE_7, _T(""), AM_K, 0, 0, 0) DEFEVENT(AMIGA_JOYPORT_0_DEVICE_8, _T(""), AM_K, 0, 0, 0) DEFEVENT(AMIGA_JOYPORT_0_DEVICE_9, _T(""), AM_K, 0, 0, 0) DEFEVENT(AMIGA_JOYPORT_0_DEVICE_LAST, _T(""), AM_K, 0, 0, 0) #endif DEFEVENT(SPC_LAST, _T(""), AM_DUMMY, 0,0,0) fs-uae-2.2.3+dfsg/src/filesys.sh0000644000175000017500000000056012162366655016657 0ustar glaubitzglaubitz#! /bin/sh # Script to convert an Amiga executable named filesys into a series of # dw(...) statements. # This assumes that the first four lines only contain hunk information. # That is what you get if you assemble/link with a68k/blink od -v -t xC -w8 filesys |tail -n +5 | sed -e "s,^.......,," \ -e "s,[0123456789abcdefABCDEF][0123456789abcdefABCDEF],db(0x&);,g" fs-uae-2.2.3+dfsg/src/cdtv.cpp0000644000175000017500000012265012162366655016316 0ustar glaubitzglaubitz/* * UAE - The Un*x Amiga Emulator * * CDTV DMAC/CDROM controller emulation * * Copyright 2004/2007-2010 Toni Wilen * * Thanks to Mark Knibbs for CDTV Technical information * */ //#define ROMHACK //#define ROMHACK2 //#define CDTV_SUB_DEBUG //#define CDTV_DEBUG //#define CDTV_DEBUG_CMD //#define CDTV_DEBUG_6525 #include "sysconfig.h" #include "sysdeps.h" #include "options.h" #include "uae/memory.h" #include "custom.h" #include "newcpu.h" #include "debug.h" #include "cdtv.h" #include "blkdev.h" #include "gui.h" #include "zfile.h" #include "threaddep/thread.h" #include "a2091.h" #include "uae.h" #include "savestate.h" /* DMAC CNTR bits. */ #define CNTR_TCEN (1<<7) #define CNTR_PREST (1<<6) #define CNTR_PDMD (1<<5) #define CNTR_INTEN (1<<4) #define CNTR_DDIR (1<<3) /* ISTR bits. */ #define ISTR_INTX (1<<8) #define ISTR_INT_F (1<<7) #define ISTR_INTS (1<<6) #define ISTR_E_INT (1<<5) #define ISTR_INT_P (1<<4) #define ISTR_UE_INT (1<<3) #define ISTR_OE_INT (1<<2) #define ISTR_FF_FLG (1<<1) #define ISTR_FE_FLG (1<<0) #define MODEL_NAME "MATSHITA0.96" /* also MATSHITA0.97 exists but is apparently rare */ #define MAX_SUBCODEBUFFER 36 static volatile int subcodebufferoffset, subcodebufferoffsetw, subcodeoffset; static uae_u8 subcodebufferinuse[MAX_SUBCODEBUFFER]; static uae_u8 subcodebuffer[MAX_SUBCODEBUFFER * SUB_CHANNEL_SIZE]; static uae_sem_t sub_sem; static smp_comm_pipe requests; static volatile int thread_alive; static int configured; static uae_u8 dmacmemory[100]; static struct cd_toc_head toc; static uae_u32 last_cd_position, play_start, play_end; static uae_u8 cdrom_qcode[4 + 12], cd_audio_status; static int datatrack; static volatile uae_u8 dmac_istr, dmac_cntr; static volatile uae_u16 dmac_dawr; static volatile uae_u32 dmac_acr; static volatile int dmac_wtc; static volatile int dmac_dma; static volatile int activate_stch, cdrom_command_done; static volatile int cdrom_sector, cdrom_sectors, cdrom_length, cdrom_offset; static volatile int cd_playing, cd_paused, cd_motor, cd_media, cd_error, cd_finished, cd_isready, cd_audio_finished; static uae_u32 last_play_pos, last_play_end; static volatile int cdtv_hsync, dma_finished, cdtv_sectorsize; static volatile uae_u64 dma_wait; static int cd_volume, cd_volume_stored; static int cd_led; static int frontpanel; static uae_u8 cdrom_command_input[16]; static int cdrom_command_cnt_in; static uae_u8 tp_a, tp_b, tp_c, tp_ad, tp_bd, tp_cd; static uae_u8 tp_imask, tp_cr, tp_air, tp_ilatch, tp_ilatch2; #ifdef ROMHACK #define ROM_VECTOR 0x2000 #define ROM_OFFSET 0x2000 static int rom_size, rom_mask; static uae_u8 *rom; #endif static void do_stch (void); static void INT2 (void) { if (!(intreq & 8)) { INTREQ_0 (0x8000 | 0x0008); } cd_led ^= LED_CD_ACTIVE2; } static volatile int cdrom_command_cnt_out, cdrom_command_size_out; static uae_u8 cdrom_command_output[16]; static volatile int stch, sten, scor, sbcp; static volatile int cmd, enable, xaen, dten; static int unitnum = -1; static void subreset (void) { uae_sem_wait (&sub_sem); memset (subcodebufferinuse, 0, sizeof subcodebufferinuse); subcodebufferoffsetw = subcodebufferoffset = 0; subcodeoffset = -1; sbcp = 0; scor = 0; uae_sem_post (&sub_sem); } static int get_toc (void) { datatrack = 0; if (!sys_command_cd_toc (unitnum, &toc)) return 0; last_cd_position = toc.lastaddress; if (toc.first_track == 1 && (toc.toc[toc.first_track_offset].control & 0x0c) == 0x04) datatrack = 1; return 1; } static int get_qcode (void) { if (!sys_command_cd_qcode (unitnum, cdrom_qcode)) return 0; cdrom_qcode[1] = cd_audio_status; return 1; } static void cdaudiostop_do (void) { if (unitnum < 0) return; sys_command_cd_pause (unitnum, 0); sys_command_cd_stop (unitnum); } static void cdaudiostop (void) { cd_finished = 0; cd_audio_status = AUDIO_STATUS_NO_STATUS; if (cd_playing) { cd_audio_status = AUDIO_STATUS_PLAY_COMPLETE; cd_finished = 1; } cd_playing = 0; cd_paused = 0; cd_motor = 0; cd_audio_finished = 0; write_comm_pipe_u32 (&requests, 0x0104, 1); } static void cdaudiostopfp (void) { cdaudiostop_do (); cd_audio_status = AUDIO_STATUS_NO_STATUS; activate_stch = 1; cd_finished = 0; cd_playing = 0; cd_paused = 0; cd_motor = 0; } static int pause_audio (int pause) { sys_command_cd_pause (unitnum, pause); if (!cd_playing) { cd_paused = 0; cd_audio_status = AUDIO_STATUS_NO_STATUS; return 0; } cd_paused = pause; cd_audio_status = pause ? AUDIO_STATUS_PAUSED : AUDIO_STATUS_IN_PROGRESS; subreset (); return 1; } static int read_sectors (int start, int length) { if (cd_playing) cdaudiostop (); #ifdef CDTV_DEBUG_CMD write_log (_T("READ DATA sector %d, %d sectors (blocksize=%d)\n"), start, length, cdtv_sectorsize); #endif cdrom_sector = start; cdrom_sectors = length; cdrom_offset = start * cdtv_sectorsize; cdrom_length = length * cdtv_sectorsize; cd_motor = 1; cd_audio_status = AUDIO_STATUS_NOT_SUPPORTED; return 0; } static int ismedia (void) { if (unitnum < 0) return 0; return sys_command_ismedia (unitnum, 0); } static int issub (void) { return 1; } static void subfunc (uae_u8 *data, int cnt) { if (!issub ()) return; uae_sem_wait (&sub_sem); #ifdef CDTV_SUB_DEBUG int total = 0; for (int i = 0; i < MAX_SUBCODEBUFFER; i++) { if (subcodebufferinuse[i]) total++; } write_log (_T("%d "), total); #endif if (subcodebufferinuse[subcodebufferoffsetw]) { memset (subcodebufferinuse, 0, sizeof subcodebufferinuse); subcodebufferoffsetw = subcodebufferoffset = 0; subcodeoffset = -1; uae_sem_post (&sub_sem); #ifdef CDTV_SUB_DEBUG write_log (_T("CDTV: subcode buffer overflow 1\n")); #endif return; } int offset = subcodebufferoffsetw; while (cnt > 0) { if (subcodebufferinuse[offset]) { #ifdef CDTV_SUB_DEBUG write_log (_T("CDTV: subcode buffer overflow 2\n")); #endif break; } subcodebufferinuse[offset] = 1; memcpy (&subcodebuffer[offset * SUB_CHANNEL_SIZE], data, SUB_CHANNEL_SIZE); data += SUB_CHANNEL_SIZE; offset++; if (offset >= MAX_SUBCODEBUFFER) offset = 0; cnt--; } subcodebufferoffsetw = offset; uae_sem_post (&sub_sem); } static int statusfunc (int status) { if (status == -1) return 500; if (status == -2) return 75; if (cd_audio_status != status) { if (status == AUDIO_STATUS_PLAY_COMPLETE || status == AUDIO_STATUS_PLAY_ERROR) { cd_audio_finished = 1; } else { if (status == AUDIO_STATUS_IN_PROGRESS) cd_playing = 1; activate_stch = 1; } } cd_audio_status = status; return 0; } static void do_play (void) { uae_u32 start = read_comm_pipe_u32_blocking (&requests); uae_u32 end = read_comm_pipe_u32_blocking (&requests); uae_u32 scan = read_comm_pipe_u32_blocking (&requests); subreset (); sys_command_cd_pause (unitnum, 0); sys_command_cd_volume (unitnum, (cd_volume_stored << 5) | (cd_volume_stored >> 5), (cd_volume_stored << 5) | (cd_volume_stored >> 5)); sys_command_cd_play (unitnum, start, end, 0, statusfunc, subfunc); } static void startplay (void) { subreset (); write_comm_pipe_u32 (&requests, 0x0110, 0); write_comm_pipe_u32 (&requests, play_start, 0); write_comm_pipe_u32 (&requests, play_end, 0); write_comm_pipe_u32 (&requests, 0, 1); if (!cd_motor) { cd_motor = 1; activate_stch = 1; } } static int play_cdtrack (uae_u8 *p) { int track_start = p[1]; int index_start = p[2]; int track_end = p[3]; int index_end = p[4]; int start_found, end_found; uae_u32 start, end; int j; if (track_start == 0 && track_end == 0) return 0; end = last_cd_position; start_found = end_found = 0; for (j = toc.first_track_offset; j <= toc.last_track_offset; j++) { struct cd_toc *s = &toc.toc[j]; if (track_start == s->track) { start_found++; start = s->paddress; } if (track_end == s->track) { end = s->paddress; end_found++; } } if (start_found == 0) { cdaudiostop (); cd_error = 1; activate_stch = 1; write_log (_T("PLAY CD AUDIO: illegal start track %d\n"), track_start); return 0; } play_end = end; play_start = start; last_play_pos = start; last_play_end = end; #ifdef CDTV_DEBUG_CMD write_log (_T("PLAY CD AUDIO from %d-%d, %06X (%d) to %06X (%d)\n"), track_start, track_end, start, start, end, end); #endif startplay (); return 0; } static int play_cd (uae_u8 *p) { uae_u32 start, end; start = (p[1] << 16) | (p[2] << 8) | p[3]; end = (p[4] << 16) | (p[5] << 8) | p[6]; if (p[0] == 0x09) /* end is length in lsn-mode */ end += start; if (start == 0 && end == 0) { cd_finished = 0; if (cd_playing) cd_finished = 1; cd_playing = 0; cd_paused = 0; cd_motor = 0; write_comm_pipe_u32 (&requests, 0x0104, 1); cd_audio_status = AUDIO_STATUS_NO_STATUS; cd_error = 1; activate_stch = 1; return 0; } if (p[0] != 0x09) { /* msf */ start = msf2lsn (start); if (end < 0x00ffffff) end = msf2lsn (end); } if (end >= 0x00ffffff || end > last_cd_position) end = last_cd_position; play_end = end; play_start = start; last_play_pos = start; last_play_end = end; #ifdef CDTV_DEBUG_CMD write_log (_T("PLAY CD AUDIO from %06X (%d) to %06X (%d)\n"), lsn2msf (start), start, lsn2msf (end), end); #endif startplay (); return 0; } static int cdrom_subq (uae_u8 *out, int msflsn) { uae_u8 *s = cdrom_qcode; uae_u32 trackposlsn, trackposmsf; uae_u32 diskposlsn, diskposmsf; out[0] = cd_audio_status; s += 4; out[1] = (s[0] >> 4) | (s[0] << 4); out[2] = frombcd (s[1]); // track out[3] = frombcd (s[2]); // index trackposmsf = fromlongbcd (s + 3); diskposmsf = fromlongbcd (s + 7); trackposlsn = msf2lsn (trackposmsf); diskposlsn = msf2lsn (diskposmsf); out[4] = 0; out[5] = (msflsn ? diskposmsf : diskposlsn) >> 16; out[6] = (msflsn ? diskposmsf : diskposlsn) >> 8; out[7] = (msflsn ? diskposmsf : diskposlsn) >> 0; out[8] = 0; out[9] = (msflsn ? trackposmsf : trackposlsn) >> 16; out[10] = (msflsn ? trackposmsf : trackposlsn) >> 8; out[11] = (msflsn ? trackposmsf : trackposlsn) >> 0; out[12] = 0; if (cd_audio_status == AUDIO_STATUS_IN_PROGRESS) last_play_pos = diskposlsn; return 13; } static int cdrom_info (uae_u8 *out) { uae_u32 size; if (ismedia () <= 0) return -1; cd_motor = 1; out[0] = toc.first_track; out[1] = toc.last_track; size = lsn2msf (toc.lastaddress); out[2] = size >> 16; out[3] = size >> 8; out[4] = size >> 0; cd_finished = 1; return 5; } static int read_toc (int track, int msflsn, uae_u8 *out) { int j; if (ismedia () <= 0) return -1; if (!out) return 0; cd_motor = 1; for (j = 0; j < toc.points; j++) { if (track == toc.toc[j].point) { int lsn = toc.toc[j].paddress; int msf = lsn2msf (lsn); out[0] = 0; out[1] = (toc.toc[j].adr << 4) | (toc.toc[j].control << 0); out[2] = toc.toc[j].point; out[3] = toc.tracks; out[4] = 0; out[5] = (msflsn ? msf : lsn) >> 16; out[6] = (msflsn ? msf : lsn) >> 8; out[7] = (msflsn ? msf : lsn) >> 0; cd_finished = 1; return 8; } } return -1; } static int cdrom_modeset (uae_u8 *cmd) { cdtv_sectorsize = (cmd[2] << 8) | cmd[3]; if (cdtv_sectorsize != 2048 && cdtv_sectorsize != 2336 && cdtv_sectorsize != 2352 && cdtv_sectorsize != 2328) { write_log (_T("CDTV: tried to set unknown sector size %d\n"), cdtv_sectorsize); cdtv_sectorsize = 2048; } return 0; } static void cdrom_command_accepted (int size, uae_u8 *cdrom_command_input, int *cdrom_command_cnt_in) { #ifdef CDTV_DEBUG_CMD TCHAR tmp[200]; int i; #endif cdrom_command_size_out = size; #ifdef CDTV_DEBUG_CMD tmp[0] = 0; for (i = 0; i < *cdrom_command_cnt_in; i++) _stprintf (tmp + i * 3, _T("%02X%c"), cdrom_command_input[i], i < *cdrom_command_cnt_in - 1 ? '.' : ' '); write_log (_T("CD<-: %s\n"), tmp); if (size > 0) { tmp[0] = 0; for (i = 0; i < size; i++) _stprintf (tmp + i * 3, _T("%02X%c"), cdrom_command_output[i], i < size - 1 ? '.' : ' '); write_log (_T("CD->: %s\n"), tmp); } #endif *cdrom_command_cnt_in = 0; cdrom_command_cnt_out = 0; cdrom_command_done = 1; } static void cdrom_command_thread (uae_u8 b) { uae_u8 *s; cdrom_command_input[cdrom_command_cnt_in] = b; cdrom_command_cnt_in++; s = cdrom_command_input; switch (cdrom_command_input[0]) { case 0x01: /* seek */ if (cdrom_command_cnt_in == 7) { cdrom_command_accepted (0, s, &cdrom_command_cnt_in); cd_finished = 1; sleep_millis (500); activate_stch = 1; } break; case 0x02: /* read */ if (cdrom_command_cnt_in == 7) { read_sectors ((s[1] << 16) | (s[2] << 8) | (s[3] << 0), (s[4] << 8) | (s[5] << 0)); cdrom_command_accepted (0, s, &cdrom_command_cnt_in); } break; case 0x04: /* motor on */ if (cdrom_command_cnt_in == 7) { cd_motor = 1; cdrom_command_accepted (0, s, &cdrom_command_cnt_in); cd_finished = 1; } break; case 0x05: /* motor off */ if (cdrom_command_cnt_in == 7) { cd_motor = 0; cdrom_command_accepted (0, s, &cdrom_command_cnt_in); cd_finished = 1; } break; case 0x09: /* play (lsn) */ case 0x0a: /* play (msf) */ if (cdrom_command_cnt_in == 7) { cdrom_command_accepted (play_cd (cdrom_command_input), s, &cdrom_command_cnt_in); } break; case 0x0b: if (cdrom_command_cnt_in == 7) { cdrom_command_accepted (play_cdtrack (cdrom_command_input), s, &cdrom_command_cnt_in); } break; case 0x81: if (cdrom_command_cnt_in == 1) { uae_u8 flag = 0; if (!cd_isready) flag |= 1 << 0; // 01 if (cd_playing) flag |= 1 << 2; // 04 if (cd_finished) flag |= 1 << 3; // 08 if (cd_error) flag |= 1 << 4; // 10 if (cd_motor) flag |= 1 << 5; // 20 if (cd_media) flag |= 1 << 6; // 40 cdrom_command_output[0] = flag; cdrom_command_accepted (1, s, &cdrom_command_cnt_in); cd_finished = 0; } break; case 0x82: if (cdrom_command_cnt_in == 7) { if (cd_error) cdrom_command_output[2] |= 1 << 4; cd_error = 0; cd_isready = 0; cdrom_command_accepted (6, s, &cdrom_command_cnt_in); cd_finished = 1; } break; case 0x83: if (cdrom_command_cnt_in == 7) { memcpy (cdrom_command_output, MODEL_NAME, strlen (MODEL_NAME)); cdrom_command_accepted (strlen (MODEL_NAME), s, &cdrom_command_cnt_in); cd_finished = 1; } case 0x84: if (cdrom_command_cnt_in == 7) { cdrom_command_accepted (cdrom_modeset (cdrom_command_input), s, &cdrom_command_cnt_in); cd_finished = 1; } break; case 0x87: /* subq */ if (cdrom_command_cnt_in == 7) { cdrom_command_accepted (cdrom_subq (cdrom_command_output, cdrom_command_input[1] & 2), s, &cdrom_command_cnt_in); } break; case 0x89: if (cdrom_command_cnt_in == 7) { cdrom_command_accepted (cdrom_info (cdrom_command_output), s, &cdrom_command_cnt_in); } break; case 0x8a: /* read toc */ if (cdrom_command_cnt_in == 7) { cdrom_command_accepted (read_toc (cdrom_command_input[2], cdrom_command_input[1] & 2, cdrom_command_output), s, &cdrom_command_cnt_in); } break; case 0x8b: if (cdrom_command_cnt_in == 7) { pause_audio (s[1] == 0x00 ? 1 : 0); cdrom_command_accepted (0, s, &cdrom_command_cnt_in); cd_finished = 1; } break; case 0xa3: /* front panel */ if (cdrom_command_cnt_in == 7) { frontpanel = s[1] ? 1 : 0; cdrom_command_accepted (0, s, &cdrom_command_cnt_in); cd_finished = 1; } break; default: write_log (_T("unknown CDROM command %02X!\n"), s[0]); cd_error = 1; cdrom_command_accepted (0, s, &cdrom_command_cnt_in); break; } } static void dma_do_thread (void) { static int readsector; int didread = 0; int cnt; while (dma_finished) sleep_millis (2); if (!cdtv_sectorsize) return; cnt = dmac_wtc; #ifdef CDTV_DEBUG_CMD write_log (_T("DMAC DMA: sector=%d, addr=%08X, words=%d (of %d)\n"), cdrom_offset / cdtv_sectorsize, dmac_acr, cnt, cdrom_length / 2); #endif dma_wait += cnt * (uae_u64)312 * 50 / 75 + 1; while (cnt > 0 && dmac_dma) { uae_u8 buffer[2352]; if (!didread || readsector != (cdrom_offset / cdtv_sectorsize)) { readsector = cdrom_offset / cdtv_sectorsize; if (cdtv_sectorsize != 2048) didread = sys_command_cd_rawread (unitnum, buffer, readsector, 1, cdtv_sectorsize); else didread = sys_command_cd_read (unitnum, buffer, readsector, 1); if (!didread) { cd_error = 1; activate_stch = 1; write_log (_T("CDTV: CD read error!\n")); break; } } put_byte (dmac_acr, buffer[(cdrom_offset % cdtv_sectorsize) + 0]); put_byte (dmac_acr + 1, buffer[(cdrom_offset % cdtv_sectorsize) + 1]); cnt--; dmac_acr += 2; cdrom_length -= 2; cdrom_offset += 2; } dmac_wtc = 0; dmac_dma = 0; dma_finished = 1; cd_finished = 1; } static void *dev_thread (void *p) { write_log (_T("CDTV: CD thread started\n")); thread_alive = 1; for (;;) { uae_u32 b = read_comm_pipe_u32_blocking (&requests); if (b == 0xffff) { thread_alive = -1; return NULL; } if (unitnum < 0) continue; switch (b) { case 0x0100: dma_do_thread (); break; case 0x0101: { int m = ismedia (); if (m < 0) { write_log (_T("CDTV: device %d lost\n"), unitnum); activate_stch = 1; cd_media = 0; } else if (m != cd_media) { cd_media = m; get_toc (); activate_stch = 1; if (cd_playing) cd_error = 1; } if (cd_media) get_qcode (); } break; case 0x0102: // pause sys_command_cd_pause (unitnum, 1); break; case 0x0103: // unpause sys_command_cd_pause (unitnum, 0); break; case 0x0104: // stop cdaudiostop_do (); break; case 0x0105: // pause pause_audio (1); break; case 0x0106: // unpause pause_audio (0); break; case 0x0107: // frontpanel stop cdaudiostopfp (); break; case 0x0110: // do_play! do_play (); break; default: cdrom_command_thread (b); break; } } } static void cdrom_command (uae_u8 b) { write_comm_pipe_u32 (&requests, b, 1); } static void init_play (int start, int end) { play_end = end; play_start = start; last_play_pos = start; last_play_end = end; #ifdef CDTV_DEBUG_CMD write_log (_T("PLAY CD AUDIO from %06X (%d) to %06X (%d)\n"), lsn2msf (start), start, lsn2msf (end), end); #endif startplay (); } bool cdtv_front_panel (int button) { if (!frontpanel || configured <= 0) return false; if (button < 0) return true; switch (button) { case 0: // stop if (cd_paused) write_comm_pipe_u32 (&requests, 0x0106, 1); write_comm_pipe_u32 (&requests, 0x0107, 1); break; case 1: // playpause if (cd_playing) { write_comm_pipe_u32 (&requests, cd_paused ? 0x0106 : 0x0105, 1); } else if (cd_media) { init_play (0, last_cd_position); } break; case 2: // prev case 3: // next if (!cd_playing) return true; uae_u8 *sq = cdrom_qcode + 4; int track = frombcd (sq[1]); int pos = 0; for (int j = 0; j < toc.points; j++) { int t = toc.toc[j].track; pos = toc.toc[j].paddress; if (t == 1 && track == 1 && button == 2) break; else if (j == toc.points - 1 && t == track && button == 3) break; else if (t == track - 1 && track > 1 && button == 2) break; else if (t == track + 1 && track < 99 && button == 3) break; } init_play (pos - 150, last_cd_position); break; } return true; } static uae_u8 get_tp_c (void) { uae_u8 v = (sbcp ? 0 : (1 << 0)) | (scor ? 0 : (1 << 1)) | (stch ? 0 : (1 << 2)) | (sten ? 0 : (1 << 3) | (1 << 4)); return v; } static uae_u8 get_tp_c_level (void) { uae_u8 v = (sbcp == 1 ? 0 : (1 << 0)) | (scor == 1 ? 0 : (1 << 1)) | (stch == 1 ? 0 : (1 << 2)) | (sten == 1 ? 0 : (1 << 3)) | (1 << 4); if (sten == 1) sten = -1; if (scor == 1) scor = -1; if (sbcp == 1) sbcp = -1; return v; } static void tp_check_interrupts (void) { /* MC = 1 ? */ if ((tp_cr & 1) != 1) { get_tp_c_level (); return; } tp_ilatch |= get_tp_c_level () ^ 0x1f; stch = 0; if (!(tp_ilatch & (1 << 5)) && (tp_ilatch & tp_imask)) { tp_air = 0; int mask = 0x10; while (((tp_ilatch & tp_imask) & mask) == 0) mask >>= 1; tp_air |= tp_ilatch & mask; tp_ilatch |= 1 << 5; // IRQ tp_ilatch2 = tp_ilatch & mask; tp_ilatch &= ~mask; } if (tp_ilatch & (1 << 5)) INT2 (); } // MC=1, C lines 0-4 = input irq lines, 5 = irq out, 6-7 IO static void tp_bput (int addr, uae_u8 v) { static int volstrobe1, volstrobe2; #ifdef CDTV_DEBUG_6525 if (addr != 1) write_log (_T("6525 write %x=%02X PC=%x %d\n"), addr, v, M68K_GETPC, regs.s); #endif switch (addr) { case 0: tp_a = v; break; case 1: tp_b = v; break; case 2: if (tp_cr & 1) { // 0 = clear, 1 = ignored tp_ilatch &= 0xe0 | v; } else { tp_c = get_tp_c () & ~tp_cd; tp_c |= v & tp_cd; if (tp_c & (1 << 5)) INT2 (); } break; case 3: tp_ad = v; break; case 4: tp_bd = v; break; case 5: // data direction (mode=0), interrupt mask (mode=1) if (tp_cr & 1) { tp_imask = v & 0x1f; } else { tp_cd = v; } break; case 6: tp_cr = v; break; case 7: tp_air = v; break; } cmd = (tp_b >> 0) & 1; enable = (tp_b >> 1) & 1; xaen = (tp_b >> 2) & 1; dten = (tp_b >> 3) & 1; if (!volstrobe1 && ((tp_b >> 6) & 1)) { cd_volume >>= 1; cd_volume |= ((tp_b >> 5) & 1) << 11; volstrobe1 = 1; } else if (volstrobe1 && !((tp_b >> 6) & 1)) { volstrobe1 = 0; } if (!volstrobe2 && ((tp_b >> 7) & 1)) { #ifdef CDTV_DEBUG_CMD write_log (_T("CDTV CD volume = %d\n"), cd_volume); #endif if (cd_volume > 1023) cd_volume = 1023; if (unitnum >= 0) sys_command_cd_volume (unitnum, (cd_volume << 5) | (cd_volume >> 5), (cd_volume << 5) | (cd_volume >> 5)); cd_volume_stored = cd_volume; cd_volume = 0; volstrobe2 = 1; } else if (volstrobe2 && !((tp_b >> 7) & 1)) { volstrobe2 = 0; } tp_check_interrupts (); } static uae_u8 subtransferbuf[SUB_CHANNEL_SIZE]; #define SUBCODE_CYCLES (2 * maxhpos) static int subcode_activecnt; static void subcode_interrupt (uae_u32 v) { subcode_activecnt--; if (subcode_activecnt > 0) { if (subcode_activecnt > 1) subcode_activecnt = 1; return; } if (subcodeoffset < -1) return; if (sbcp && scor == 0) { sbcp = 0; // CD+G interrupt didn't read data fast enough, just abort until next packet return; } if (scor < 0) { scor = 0; if (issub ()) { subcodeoffset = 0; } tp_check_interrupts (); } if (subcodeoffset >= SUB_CHANNEL_SIZE) return; sbcp = 1; tp_check_interrupts (); subcode_activecnt++; event2_newevent2 (SUBCODE_CYCLES, 0, subcode_interrupt); } static uae_u8 tp_bget (int addr) { uae_u8 v = 0; switch (addr) { case 0: // A = subchannel byte input from serial to parallel converter if (subcodeoffset < 0 || subcodeoffset >= SUB_CHANNEL_SIZE) { #ifdef CDTV_SUB_DEBUG write_log (_T("CDTV: requested non-existing subchannel data!? %d\n"), subcodeoffset); #endif v = 0; } else { v = subtransferbuf[subcodeoffset]; tp_a = 0; tp_a |= (v >> 7) & 1; tp_a |= (v >> 5) & 2; tp_a |= (v >> 3) & 4; tp_a |= (v >> 1) & 8; tp_a |= (v << 1) & 16; tp_a |= (v << 3) & 32; tp_a |= (v << 5) & 64; tp_a |= (v << 7) & 128; v = tp_a; subcodeoffset++; sbcp = 0; if (subcodeoffset >= SUB_CHANNEL_SIZE) subcodeoffset = -2; } break; case 1: v = tp_b; break; case 2: if (tp_cr & 1) { v = tp_ilatch | tp_ilatch2; } else { v = get_tp_c (); } break; case 3: v = tp_ad; break; case 4: v = tp_bd; break; case 5: // data direction (mode=0), interrupt mask (mode=1) if (tp_cr & 1) v = tp_imask; else v = tp_cd; break; case 6: v = tp_cr; break; case 7: v = tp_air; if (tp_cr & 1) { tp_ilatch &= ~(1 << 5); tp_ilatch2 = 0; } tp_air = 0; break; } tp_check_interrupts (); #ifdef CDTV_DEBUG_6525 if (addr < 7 && addr != 1) write_log (_T("6525 read %x=%02X PC=%x %d\n"), addr, v, M68K_GETPC, regs.s); #endif return v; } static uae_u32 REGPARAM3 dmac_lget (uaecptr) REGPARAM; static uae_u32 REGPARAM3 dmac_wget (uaecptr) REGPARAM; static uae_u32 REGPARAM3 dmac_bget (uaecptr) REGPARAM; static void REGPARAM3 dmac_lput (uaecptr, uae_u32) REGPARAM; static void REGPARAM3 dmac_wput (uaecptr, uae_u32) REGPARAM; static void REGPARAM3 dmac_bput (uaecptr, uae_u32) REGPARAM; static void dmac_start_dma (void) { if (!(dmac_cntr & CNTR_PDMD)) { // non-scsi dma write_comm_pipe_u32 (&requests, 0x0100, 1); } } void cdtv_getdmadata (uae_u32 *acr) { *acr = dmac_acr; } static void checkint (void) { int irq = 0; if (currprefs.cs_cdtvscsi && (wdscsi_getauxstatus () & 0x80)) { dmac_istr |= ISTR_INTS; if ((dmac_cntr & CNTR_INTEN) && (dmac_istr & ISTR_INTS)) irq = 1; } if ((dmac_cntr & CNTR_INTEN) && (dmac_istr & ISTR_E_INT)) irq = 1; if (irq) INT2 (); } void cdtv_scsi_int (void) { checkint (); } void cdtv_scsi_clear_int (void) { dmac_istr &= ~ISTR_INTS; } void rethink_cdtv (void) { checkint (); tp_check_interrupts (); } void CDTV_hsync_handler (void) { static int subqcnt; if (!currprefs.cs_cdtvcd || configured <= 0) return; cdtv_hsync++; if (dma_wait >= 1024) dma_wait -= 1024; if (dma_wait >= 0 && dma_wait < 1024 && dma_finished) { if ((dmac_cntr & (CNTR_INTEN | CNTR_TCEN)) == (CNTR_INTEN | CNTR_TCEN)) { dmac_istr |= ISTR_INT_P | ISTR_E_INT; #ifdef CDTV_DEBUG_CMD write_log (_T("DMA finished\n")); #endif } dma_finished = 0; cdtv_hsync = -1; } checkint (); if (cdrom_command_done) { cdrom_command_done = 0; sten = 1; stch = 0; tp_check_interrupts (); } if (sten < 0) { sten--; if (sten < -3) sten = 0; } if (cd_audio_finished) { cd_audio_finished = 0; cd_playing = 0; cd_finished = 1; cd_paused = 0; //cd_error = 1; activate_stch = 1; } static int subchannelcounter; int cntmax = (int)(maxvpos * vblank_hz / 75 - 6); if (subchannelcounter > 0) subchannelcounter--; if (subchannelcounter <= 0) { if (cd_playing || cd_media) { if (subcodebufferoffset != subcodebufferoffsetw) { uae_sem_wait (&sub_sem); #ifdef CDTV_SUB_DEBUG if (subcodeoffset >= 0) write_log (_T("CDTV: frame interrupt, subchannel not empty! %d\n"), subcodeoffset); #endif subcodeoffset = -1; if (subcodebufferinuse[subcodebufferoffset]) { subcodebufferinuse[subcodebufferoffset] = 0; memcpy (subtransferbuf, subcodebuffer + subcodebufferoffset * SUB_CHANNEL_SIZE, SUB_CHANNEL_SIZE); subcodebufferoffset++; if (subcodebufferoffset >= MAX_SUBCODEBUFFER) subcodebufferoffset -= MAX_SUBCODEBUFFER; sbcp = 0; scor = 1; subcode_activecnt++; event2_newevent2 (SUBCODE_CYCLES, 0, subcode_interrupt); tp_check_interrupts (); } uae_sem_post (&sub_sem); subchannelcounter = cntmax; } } if (!scor && !cd_playing) { // frame interrupts happen all the time motor is running scor = 1; tp_check_interrupts (); scor = 0; subchannelcounter = cntmax; } } if (cdtv_hsync < cntmax && cdtv_hsync >= 0) return; cdtv_hsync = 0; #if 0 if (cd_isready > 0) { cd_isready--; if (!cd_isready) do_stch (); } #endif if (dmac_dma || dma_finished) cd_led |= LED_CD_ACTIVE; else cd_led &= ~LED_CD_ACTIVE; if ((cd_led & ~LED_CD_ACTIVE2) && !cd_playing) gui_flicker_led (LED_CD, 0, cd_led); subqcnt--; if (subqcnt < 0) { write_comm_pipe_u32 (&requests, 0x0101, 1); if (cd_playing) subqcnt = 10; else subqcnt = 75; } if (activate_stch) do_stch (); } static void do_stch (void) { static int stch_cnt; if ((tp_cr & 1) && !(tp_air & (1 << 2))) { stch = 1; activate_stch = 0; tp_check_interrupts (); #ifdef CDTV_DEBUG write_log (_T("STCH %d\n"), stch_cnt++); #endif } } void bleh (void) { #if 0 cd_playing = cd_finished = cd_motor = cd_media = 1; cd_isready = 0; cd_playing = 0; do_stch(); #endif } static void cdtv_reset_int (void) { write_log (_T("CDTV: reset\n")); cdaudiostop (); cd_playing = cd_paused = 0; cd_motor = 0; cd_media = 0; cd_error = 0; cd_finished = 0; cd_led = 0; stch = 1; } static uae_u32 dmac_bget2 (uaecptr addr) { static uae_u8 last_out; uae_u8 v = 0; if (addr < 0x40) return dmacmemory[addr]; if (addr >= 0xb0 && addr < 0xc0) return tp_bget ((addr - 0xb0) / 2); #ifdef ROMHACK if (addr >= ROM_OFFSET) { if (rom) { int off = addr & rom_mask; return rom[off]; } return 0; } #endif switch (addr) { case 0x41: v = dmac_istr; if (v) v |= ISTR_INT_P; dmac_istr &= ~0xf; break; case 0x43: v = dmac_cntr; break; case 0x91: if (currprefs.cs_cdtvscsi) v = wdscsi_getauxstatus (); break; case 0x93: if (currprefs.cs_cdtvscsi) { v = wdscsi_get (); checkint (); } break; case 0xa1: sten = 0; if (cdrom_command_cnt_out >= 0) { v = last_out = cdrom_command_output[cdrom_command_cnt_out]; cdrom_command_output[cdrom_command_cnt_out++] = 0; if (cdrom_command_cnt_out >= cdrom_command_size_out) { cdrom_command_size_out = 0; cdrom_command_cnt_out = -1; sten = 0; tp_check_interrupts (); } else { sten = 1; tp_check_interrupts (); } } else { write_log (_T("CDTV: command register read while empty\n")); v = last_out; } break; case 0xe8: case 0xe9: dmac_istr |= ISTR_FE_FLG; break; /* XT IO */ case 0xa3: case 0xa5: case 0xa7: v = 0xff; break; } #ifdef CDTV_DEBUG if (addr != 0x41) write_log (_T("dmac_bget %04X=%02X PC=%08X\n"), addr, v, M68K_GETPC); #endif return v; } static void dmac_bput2 (uaecptr addr, uae_u32 b) { if (addr >= 0xb0 && addr < 0xc0) { tp_bput ((addr - 0xb0) / 2, b); return; } #ifdef CDTV_DEBUG write_log (_T("dmac_bput %04X=%02X PC=%08X\n"), addr, b & 255, M68K_GETPC); #endif switch (addr) { case 0x43: dmac_cntr = b; if (dmac_cntr & CNTR_PREST) cdtv_reset_int (); break; case 0x80: dmac_wtc &= 0x00ffffff; dmac_wtc |= b << 24; break; case 0x81: dmac_wtc &= 0xff00ffff; dmac_wtc |= b << 16; break; case 0x82: dmac_wtc &= 0xffff00ff; dmac_wtc |= b << 8; break; case 0x83: dmac_wtc &= 0xffffff00; dmac_wtc |= b << 0; break; case 0x84: dmac_acr &= 0x00ffffff; dmac_acr |= b << 24; break; case 0x85: dmac_acr &= 0xff00ffff; dmac_acr |= b << 16; break; case 0x86: dmac_acr &= 0xffff00ff; dmac_acr |= b << 8; break; case 0x87: dmac_acr &= 0xffffff01; dmac_acr |= (b & ~ 1) << 0; break; case 0x8e: dmac_dawr &= 0x00ff; dmac_dawr |= b << 8; break; case 0x8f: dmac_dawr &= 0xff00; dmac_dawr |= b << 0; break; case 0x91: if (currprefs.cs_cdtvscsi) { wdscsi_sasr (b); checkint (); } break; case 0x93: if (currprefs.cs_cdtvscsi) { wdscsi_put (b); checkint (); } break; case 0xa1: cdrom_command (b); break; case 0xe0: case 0xe1: if (!dmac_dma) { dmac_dma = 1; dmac_start_dma (); } break; case 0xe2: case 0xe3: dmac_dma = 0; dma_finished = 0; break; case 0xe4: case 0xe5: dmac_istr = 0; checkint (); break; case 0xe8: case 0xe9: dmac_istr |= ISTR_FE_FLG; break; } tp_check_interrupts (); } static uae_u32 REGPARAM2 dmac_lget (uaecptr addr) { uae_u32 v; #ifdef JIT special_mem |= S_READ; #endif addr &= 65535; v = (dmac_bget2 (addr) << 24) | (dmac_bget2 (addr + 1) << 16) | (dmac_bget2 (addr + 2) << 8) | (dmac_bget2 (addr + 3)); #ifdef CDTV_DEBUG write_log (_T("dmac_lget %08X=%08X PC=%08X\n"), addr, v, M68K_GETPC); #endif return v; } static uae_u32 REGPARAM2 dmac_wget (uaecptr addr) { uae_u32 v; #ifdef JIT special_mem |= S_READ; #endif addr &= 65535; v = (dmac_bget2 (addr) << 8) | dmac_bget2 (addr + 1); #ifdef CDTV_DEBUG write_log (_T("dmac_wget %08X=%04X PC=%08X\n"), addr, v, M68K_GETPC); #endif return v; } static uae_u32 REGPARAM2 dmac_bget (uaecptr addr) { uae_u32 v; #ifdef JIT special_mem |= S_READ; #endif addr &= 65535; v = dmac_bget2 (addr); if (configured <= 0) return v; return v; } static void REGPARAM2 dmac_lput (uaecptr addr, uae_u32 l) { #ifdef JIT special_mem |= S_WRITE; #endif addr &= 65535; #ifdef CDTV_DEBUG write_log (_T("dmac_lput %08X=%08X PC=%08X\n"), addr, l, M68K_GETPC); #endif dmac_bput2 (addr, l >> 24); dmac_bput2 (addr + 1, l >> 16); dmac_bput2 (addr + 2, l >> 8); dmac_bput2 (addr + 3, l); } static void REGPARAM2 dmac_wput (uaecptr addr, uae_u32 w) { #ifdef JIT special_mem |= S_WRITE; #endif addr &= 65535; #ifdef CDTV_DEBUG write_log (_T("dmac_wput %04X=%04X PC=%08X\n"), addr, w & 65535, M68K_GETPC); #endif dmac_bput2 (addr, w >> 8); dmac_bput2 (addr + 1, w); } static void REGPARAM2 dmac_bput (uaecptr addr, uae_u32 b) { #ifdef JIT special_mem |= S_WRITE; #endif addr &= 65535; b &= 0xff; if (addr == 0x48) { map_banks (&dmac_bank, b, 0x10000 >> 16, 0x10000); write_log (_T("CDTV DMAC autoconfigured at %02X0000\n"), b); configured = b; expamem_next (); return; } if (addr == 0x4c) { write_log (_T("CDTV DMAC AUTOCONFIG SHUT-UP!\n")); configured = -1; expamem_next (); return; } if (configured <= 0) return; dmac_bput2 (addr, b); } static void open_unit (void) { struct device_info di; unitnum = get_standard_cd_unit (CD_STANDARD_UNIT_CDTV); sys_command_info (unitnum, &di, 0); write_log (_T("using drive %s (unit %d, media %d)\n"), di.label, unitnum, di.media_inserted); } static void close_unit (void) { if (unitnum >= 0) sys_command_close (unitnum); unitnum = -1; } static void ew (int addr, uae_u32 value) { addr &= 0xffff; if (addr == 00 || addr == 02 || addr == 0x40 || addr == 0x42) { dmacmemory[addr] = (value & 0xf0); dmacmemory[addr + 2] = (value & 0x0f) << 4; } else { dmacmemory[addr] = ~(value & 0xf0); dmacmemory[addr + 2] = ~((value & 0x0f) << 4); } } static uae_u32 REGPARAM2 dmac_wgeti (uaecptr addr) { uae_u32 v = 0xffff; #ifdef JIT special_mem |= S_READ; #endif #ifdef ROMHACK addr &= 65535; if (addr >= ROM_OFFSET) v = (rom[addr & rom_mask] << 8) | rom[(addr + 1) & rom_mask]; #endif return v; } static uae_u32 REGPARAM2 dmac_lgeti (uaecptr addr) { uae_u32 v = 0xffff; #ifdef JIT special_mem |= S_READ; #endif #ifdef ROMHACK addr &= 65535; v = (dmac_wgeti(addr) << 16) | dmac_wgeti(addr + 2); #endif return v; } addrbank dmac_bank = { dmac_lget, dmac_wget, dmac_bget, dmac_lput, dmac_wput, dmac_bput, default_xlate, default_check, NULL, _T("CDTV DMAC/CD Controller"), dmac_lgeti, dmac_wgeti, ABFLAG_IO }; /* CDTV batterybacked RAM emulation */ #define CDTV_NVRAM_MASK 16383 #define CDTV_NVRAM_SIZE 32768 static uae_u8 cdtv_battram[CDTV_NVRAM_SIZE]; void cdtv_loadcardmem (uae_u8 *p, int size) { struct zfile *f; memset (p, 0, size); f = zfile_fopen (currprefs.flashfile, _T("rb"), ZFD_NORMAL); if (!f) return; zfile_fseek (f, CDTV_NVRAM_SIZE, SEEK_SET); zfile_fread (p, size, 1, f); zfile_fclose (f); } void cdtv_savecardmem (uae_u8 *p, int size) { struct zfile *f; f = zfile_fopen (currprefs.flashfile, _T("rb+"), ZFD_NORMAL); if (!f) return; zfile_fseek (f, CDTV_NVRAM_SIZE, SEEK_SET); zfile_fwrite (p, size, 1, f); zfile_fclose (f); } static void cdtv_battram_reset (void) { struct zfile *f; int v; memset (cdtv_battram, 0, CDTV_NVRAM_SIZE); f = zfile_fopen (currprefs.flashfile, _T("rb+"), ZFD_NORMAL); if (!f) { f = zfile_fopen (currprefs.flashfile, _T("wb"), 0); if (f) { zfile_fwrite (cdtv_battram, CDTV_NVRAM_SIZE, 1, f); zfile_fclose (f); } return; } v = zfile_fread (cdtv_battram, 1, CDTV_NVRAM_SIZE, f); if (v < CDTV_NVRAM_SIZE) zfile_fwrite (cdtv_battram + v, 1, CDTV_NVRAM_SIZE - v, f); zfile_fclose (f); } void cdtv_battram_write (int addr, int v) { struct zfile *f; int offset = addr & CDTV_NVRAM_MASK; if (offset >= CDTV_NVRAM_SIZE) return; gui_flicker_led (LED_MD, 0, 2); if (cdtv_battram[offset] == v) return; cdtv_battram[offset] = v; f = zfile_fopen (currprefs.flashfile, _T("rb+"), ZFD_NORMAL); if (!f) return; zfile_fseek (f, offset, SEEK_SET); zfile_fwrite (cdtv_battram + offset, 1, 1, f); zfile_fclose (f); } uae_u8 cdtv_battram_read (int addr) { uae_u8 v; int offset; offset = addr & CDTV_NVRAM_MASK; if (offset >= CDTV_NVRAM_SIZE) return 0; gui_flicker_led (LED_MD, 0, 1); v = cdtv_battram[offset]; return v; } int cdtv_add_scsi_unit(int ch, TCHAR *path, int blocksize, int readonly, TCHAR *devname, int sectors, int surfaces, int reserved, int bootpri, TCHAR *filesys) { return addscsi (ch, path, blocksize, readonly, devname, sectors, surfaces, reserved, bootpri, filesys, 1); } void cdtv_free (void) { if (thread_alive > 0) { dmac_dma = 0; dma_finished = 0; cdaudiostop (); write_comm_pipe_u32 (&requests, 0xffff, 1); while (thread_alive > 0) sleep_millis (10); uae_sem_destroy (&sub_sem); } thread_alive = 0; close_unit (); configured = 0; } #ifdef ROMHACK2 extern uae_u8 *extendedkickmemory, *cardmemory; static void romhack (void) { struct zfile *z; int roms[5]; struct romlist *rl; int rom_size; uae_u8 *rom, *p; extendedkickmemory[0x558c] = 0xff; roms[0] = 55; roms[1] = 54; roms[2] = 53; roms[3] = -1; rl = getromlistbyids(roms); if (rl) { write_log (_T("A590/A2091 BOOT ROM '%s' %d.%d\n"), rl->path, rl->rd->ver, rl->rd->rev); z = zfile_fopen(rl->path, "rb", ZFD_NORMAL); if (z) { rom_size = 16384; rom = (uae_u8*)xmalloc (rom_size); zfile_fread (rom, rom_size, 1, z); rom[0x2071] = 0xe0; rom[0x2072] |= 0x40; rom[0x2075] = 0xe0; rom[0x2076] |= 0x40; rom[0x207d] = 0xe0; rom[0x207e] |= 0x40; rom[0x2081] = 0xe0; rom[0x2082] |= 0x40; rom[0x2085] = 0xe0; rom[0x2086] |= 0x40; rom[0x207b] = 0x32; p = cardmemory + 0x4000; memcpy (p, rom + 0x2000, 0x2000); memcpy (p + 0x2000, rom, 0x2000); } zfile_fclose(z); } //kickmemory[0x3592c] = 0xff; } #endif void cdtv_init (void) { close_unit (); if (!thread_alive) { init_comm_pipe (&requests, 100, 1); uae_start_thread (_T("cdtv"), dev_thread, NULL, NULL); while (!thread_alive) sleep_millis (10); uae_sem_init (&sub_sem, 0, 1); } write_comm_pipe_u32 (&requests, 0x0104, 1); cdrom_command_cnt_out = -1; cmd = enable = xaen = dten = 0; memset (dmacmemory, 0xff, 100); ew (0x00, 0xc0 | 0x01); ew (0x04, 0x03); ew (0x08, 0x40); ew (0x10, 0x02); ew (0x14, 0x02); ew (0x18, 0x00); /* ser.no. Byte 0 */ ew (0x1c, 0x00); /* ser.no. Byte 1 */ ew (0x20, 0x00); /* ser.no. Byte 2 */ ew (0x24, 0x00); /* ser.no. Byte 3 */ /* KS autoconfig handles the rest */ map_banks (&dmac_bank, 0xe80000 >> 16, 0x10000 >> 16, 0x10000); if (!savestate_state) { configured = 0; tp_a = tp_b = tp_c = tp_ad = tp_bd = tp_cd = 0; tp_imask = tp_cr = tp_air = tp_ilatch = 0; stch = 0; sten = 0; scor = 0; sbcp = 0; } cdtv_battram_reset (); open_unit (); gui_flicker_led (LED_CD, 0, -1); } void cdtv_check_banks (void) { if (configured > 0) map_banks (&dmac_bank, configured, 0x10000 >> 16, 0x10000); } #ifdef SAVESTATE uae_u8 *save_dmac (int *len, uae_u8 *dstptr) { uae_u8 *dstbak, *dst; if (!currprefs.cs_cdtvcd) return NULL; if (dstptr) dstbak = dst = dstptr; else dstbak = dst = xmalloc (uae_u8, 1000); // model (0=original,1=rev2,2=superdmac) save_u32 (1); save_u32 (0); // reserved flags save_u8 (dmac_istr); save_u8 (dmac_cntr); save_u32 (dmac_wtc); save_u32 (dmac_acr); save_u16 (dmac_dawr); save_u32 (dmac_dma ? 1 : 0); save_u8 (configured); *len = dst - dstbak; return dstbak; } uae_u8 *restore_dmac (uae_u8 *src) { restore_u32 (); restore_u32 (); dmac_istr = restore_u8 (); dmac_cntr = restore_u8 (); dmac_wtc = restore_u32 (); dmac_acr = restore_u32 (); dmac_dawr = restore_u16 (); restore_u32 (); configured = restore_u8 (); return src; } uae_u8 *save_cdtv (int *len, uae_u8 *dstptr) { uae_u8 *dstbak, *dst; if (!currprefs.cs_cdtvcd) return NULL; if (dstptr) dstbak = dst = dstptr; else dstbak = dst = xmalloc (uae_u8, 1000); save_u32 (1); // tri-port save_u8 (tp_a); save_u8 (tp_b); save_u8 (tp_c); save_u8 (tp_ad); save_u8 (tp_bd); save_u8 (tp_cd); save_u8 (tp_cr); save_u8 (tp_air); save_u8 (tp_imask); save_u8 (tp_ilatch); save_u8 (tp_ilatch2); save_u8 (0); // misc cd stuff save_u32 ((cd_playing ? 1 : 0) | (cd_paused ? 2 : 0) | (cd_media ? 4 : 0) | (cd_motor ? 8 : 0) | (cd_error ? 16 : 0) | (cd_finished ? 32 : 0) | (cdrom_command_done ? 64 : 0) | (activate_stch ? 128 : 0) | (sten ? 256 : 0) | (stch ? 512 : 0) | (frontpanel ? 1024 : 0)); save_u8 (cd_isready); save_u8 (0); save_u16 (cd_volume_stored); if (cd_playing) get_qcode (); save_u32 (last_play_pos); save_u32 (last_play_end); save_u64 (dma_wait); for (int i = 0; i < sizeof cdrom_command_input; i++) save_u8 (cdrom_command_input[i]); save_u8 (cdrom_command_cnt_in); save_u16 (cdtv_sectorsize); *len = dst - dstbak; return dstbak; } uae_u8 *restore_cdtv (uae_u8 *src) { cdtv_free (); if (!currprefs.cs_cdtvcd) { changed_prefs.cs_cdtvcd = changed_prefs.cs_cdtvram = true; currprefs.cs_cdtvcd = currprefs.cs_cdtvram = true; cdtv_init (); } restore_u32 (); // tri-port tp_a = restore_u8 (); tp_b = restore_u8 (); tp_c = restore_u8 (); tp_ad = restore_u8 (); tp_bd = restore_u8 (); tp_cd = restore_u8 (); tp_cr = restore_u8 (); tp_air = restore_u8 (); tp_imask = restore_u8 (); tp_ilatch = restore_u8 (); tp_ilatch2 = restore_u8 (); restore_u8 (); // misc cd stuff uae_u32 v = restore_u32 (); cd_playing = (v & 1) ? 1 : 0; cd_paused = (v & 2) ? 1 : 0; cd_media = (v & 4) ? 1 : 0; cd_motor = (v & 8) ? 1 : 0; cd_error = (v & 16) ? 1 : 0; cd_finished = (v & 32) ? 1 : 0; cdrom_command_done = (v & 64) ? 1 : 0; activate_stch = (v & 128) ? 1 : 0; sten = (v & 256) ? 1 : 0; stch = (v & 512) ? 1 : 0; frontpanel = (v & 1024) ? 1 : 0; cd_isready = restore_u8 (); restore_u8 (); cd_volume_stored = restore_u16 (); last_play_pos = restore_u32 (); last_play_end = restore_u32 (); dma_wait = restore_u64 (); for (int i = 0; i < sizeof cdrom_command_input; i++) cdrom_command_input[i] = restore_u8 (); cdrom_command_cnt_in = restore_u8 (); cdtv_sectorsize = restore_u16 (); return src; } void restore_cdtv_finish (void) { if (!currprefs.cs_cdtvcd) return; cdtv_init (); get_toc (); write_comm_pipe_u32 (&requests, 0x0104, 1); if (cd_playing) { write_comm_pipe_u32 (&requests, 0x0103, 1); // unpause write_comm_pipe_u32 (&requests, 0x0110, 0); // play write_comm_pipe_u32 (&requests, last_play_pos, 0); write_comm_pipe_u32 (&requests, last_play_end, 0); write_comm_pipe_u32 (&requests, 0, 1); } } #endif fs-uae-2.2.3+dfsg/src/uaeresource.cpp0000644000175000017500000000545312162366655017701 0ustar glaubitzglaubitz/* * UAE - The Un*x Amiga Emulator * * uae.resource * */ #include "sysconfig.h" #include "sysdeps.h" #include "options.h" #include "uae/memory.h" #include "custom.h" #include "newcpu.h" #include "traps.h" #include "autoconf.h" #include "execlib.h" #include "uaeresource.h" #if 0 #define UAERESNAME "uae.resource" #define UAERES_GETFUNC (LIB_BASE - 0*LIB_VECTSIZE) APTR GetFunc (const char *name); struct uaebase { struct Library uae_lib; UWORD uae_version; UWORD uae_revision; UWORD uae_subrevision; UWORD zero; APTR uae_rombase; }; #endif static uaecptr res_init, res_name, res_id, base; static uae_u32 REGPARAM2 res_getfunc (TrapContext *ctx) { uaecptr funcname = m68k_areg (regs, 0); uae_char tmp[256]; uae_u32 p; TCHAR *s; if (funcname == 0) return 0; strcpyah_safe (tmp, funcname, sizeof tmp); s = au (tmp); p = find_trap (s); xfree (s); return p; } static uae_u32 REGPARAM2 res_initcode (TrapContext *ctx) { uaecptr rb; base = m68k_dreg (regs, 0); rb = base + SIZEOF_LIBRARY; put_word (rb + 0, UAEMAJOR); put_word (rb + 2, UAEMINOR); put_word (rb + 4, UAESUBREV); put_word (rb + 6, 0); put_long (rb + 8, rtarea_base); return base; } uaecptr uaeres_startup (uaecptr resaddr) { put_word (resaddr + 0x0, 0x4AFC); put_long (resaddr + 0x2, resaddr); put_long (resaddr + 0x6, resaddr + 0x1A); /* Continue scan here */ put_word (resaddr + 0xA, 0x8101); /* RTF_AUTOINIT|RTF_COLDSTART; Version 1 */ put_word (resaddr + 0xC, 0x0878); /* NT_DEVICE; pri 05 */ put_long (resaddr + 0xE, res_name); put_long (resaddr + 0x12, res_id); put_long (resaddr + 0x16, res_init); resaddr += 0x1A; return resaddr; } void uaeres_install (void) { uae_u32 functable, datatable; uae_u32 initcode, getfunc; TCHAR tmp[100]; _stprintf (tmp, _T("UAE resource %d.%d.%d"), UAEMAJOR, UAEMINOR, UAESUBREV); res_name = ds (_T("uae.resource")); res_id = ds (tmp); /* initcode */ initcode = here (); calltrap (deftrap (res_initcode)); dw (RTS); /* getfunc */ getfunc = here (); calltrap (deftrap (res_getfunc)); dw (RTS); /* FuncTable */ functable = here (); dl (getfunc); /* getfunc */ dl (0xFFFFFFFF); /* end of table */ /* DataTable */ datatable = here (); dw (0xE000); /* INITBYTE */ dw (0x0008); /* LN_TYPE */ dw (0x0800); /* NT_RESOURCE */ dw (0xC000); /* INITLONG */ dw (0x000A); /* LN_NAME */ dl (res_name); dw (0xE000); /* INITBYTE */ dw (0x000E); /* LIB_FLAGS */ dw (0x0600); /* LIBF_SUMUSED | LIBF_CHANGED */ dw (0xD000); /* INITWORD */ dw (0x0014); /* LIB_VERSION */ dw (UAEMAJOR); dw (0xD000); /* INITWORD */ dw (0x0016); /* LIB_REVISION */ dw (UAEMINOR); dw (0xC000); /* INITLONG */ dw (0x0018); /* LIB_IDSTRING */ dl (res_id); dw (0x0000); /* end of table */ res_init = here (); dl (SIZEOF_LIBRARY + 16); /* size of device base */ dl (functable); dl (datatable); dl (initcode); } fs-uae-2.2.3+dfsg/src/keybuf.cpp0000644000175000017500000000321712162366655016640 0ustar glaubitzglaubitz/* * UAE - The Un*x Amiga Emulator * * Keyboard buffer. Not really needed for X, but for SVGAlib and possibly * Mac and DOS ports. * * Note: it's possible to have two threads in UAE, one reading keystrokes * and the other one writing them. Despite this, no synchronization effort * is needed. This code should be perfectly thread safe. At least if you * assume that integer store instructions are atomic. * * Copyright 1995, 1997 Bernd Schmidt */ #include "sysconfig.h" #include "sysdeps.h" #include #include "options.h" #include "keybuf.h" #include "keyboard.h" #include "inputdevice.h" #include "custom.h" #include "savestate.h" static int kpb_first, kpb_last; static int keybuf[256]; int keys_available (void) { int val; val = kpb_first != kpb_last; return val; } int get_next_key (void) { int key; assert (kpb_first != kpb_last); key = keybuf[kpb_last]; if (++kpb_last == 256) kpb_last = 0; //write_log (_T("%02x:%d\n"), key >> 1, key & 1); return key; } int record_key (int kc) { if (pause_emulation) return 0; return record_key_direct (kc); } int record_key_direct (int kc) { int fs = 0; int kpb_next = kpb_first + 1; int k = kc >> 1; int b = !(kc & 1); //write_log (_T("got kc %02X\n"), ((kc << 7) | (kc >> 1)) & 0xff); if (kpb_next == 256) kpb_next = 0; if (kpb_next == kpb_last) { write_log (_T("Keyboard buffer overrun. Congratulations.\n")); return 0; } #if 0 if ((kc >> 1) == AK_RCTRL) { kc ^= AK_RCTRL << 1; kc ^= AK_CTRL << 1; } #endif keybuf[kpb_first] = kc; kpb_first = kpb_next; return 1; } void keybuf_init (void) { kpb_first = kpb_last = 0; inputdevice_updateconfig (&changed_prefs, &currprefs); } fs-uae-2.2.3+dfsg/src/serial.cpp0000644000175000017500000002067312162366654016636 0ustar glaubitzglaubitz /* * UAE - The Un*x Amiga Emulator * * Serial Line Emulation * * (c) 1996, 1997 Stefan Reinauer * (c) 1997 Christian Schmitt * */ #include "sysconfig.h" #include "sysdeps.h" #include "config.h" #include "options.h" #include "uae.h" #include "uae/memory.h" #include "custom.h" #include "newcpu.h" #include "cia.h" #undef POSIX_SERIAL /* Some more or less good way to determine whether we can safely compile in * the serial stuff. I'm certain it breaks compilation on some systems. */ #if defined HAVE_SYS_TERMIOS_H && defined HAVE_POSIX_OPT_H && defined HAVE_SYS_IOCTL_H && defined HAVE_TCGETATTR #define POSIX_SERIAL #endif #ifdef POSIX_SERIAL #include #include #include #endif #if !defined B300 || !defined B1200 || !defined B2400 || !defined B4800 || !defined B9600 #undef POSIX_SERIAL #endif #if !defined B19200 || !defined B57600 || !defined B115200 || !defined B230400 #undef POSIX_SERIAL #endif #ifndef O_NONBLOCK #define O_NONBLOCK O_NDELAY #endif #define SERIALDEBUG 1 /* 0, 1, 2 3 */ #define MODEMTEST 0 /* 0 or 1 */ void serial_open (void); void serial_close (void); void serial_init (void); void serial_exit (void); void serial_dtr_on (void); void serial_dtr_off (void); void serial_flush_buffer (void); static int serial_read (char *buffer); uae_u16 SERDATR (void); int SERDATS (void); void SERPER (uae_u16 w); void SERDAT (uae_u16 w); static char inbuf[1024], outbuf[1024]; static int inptr, inlast, outlast; int waitqueue=0, carrier=0, serdev=0, dsr=0, dtr=0, isbaeh=0, doreadser=0, serstat=-1; int sd = -1; #ifdef POSIX_SERIAL struct termios tios; #endif uae_u16 serper=0,serdat; void SERPER (uae_u16 w) { int baud=0, pspeed; if (!currprefs.use_serial) return; #if defined POSIX_SERIAL if (serper == w) /* don't set baudrate if it's already ok */ return; serper=w; if (w&0x8000) write_log ("SERPER: 9bit transmission not implemented.\n"); switch (w & 0x7fff) { /* These values should be calculated by the current * color clock value (NTSC/PAL). But this solution is * easy and it works. */ case 0x2e9b: case 0x2e14: baud=300; pspeed=B300; break; case 0x170a: case 0x0b85: baud=1200; pspeed=B1200; break; case 0x05c2: case 0x05b9: baud=2400; pspeed=B2400; break; case 0x02e9: case 0x02e1: baud=4800; pspeed=B4800; break; case 0x0174: case 0x0170: baud=9600; pspeed=B9600; break; case 0x00b9: case 0x00b8: baud=19200; pspeed=B19200; break; case 0x005c: case 0x005d: baud=38400; pspeed=B38400; break; case 0x003d: baud=57600; pspeed=B57600; break; case 0x001e: baud=115200; pspeed=B115200; break; case 0x000f: baud=230400; pspeed=B230400; break; default: write_log ("SERPER: unsupported baudrate (0x%04x) %d\n",w&0x7fff, (unsigned int)(3579546.471/(double)((w&0x7fff)+1))); return; } /* Only access hardware when we own it */ if (serdev == 1) { if (tcgetattr (sd, &tios) < 0) { write_log ("SERPER: TCGETATTR failed\n"); return; } if (cfsetispeed (&tios, pspeed) < 0) { /* set serial input speed */ write_log ("SERPER: CFSETISPEED (%d bps) failed\n", baud); return; } if (cfsetospeed (&tios, pspeed) < 0) { /* set serial output speed */ write_log ("SERPER: CFSETOSPEED (%d bps) failed\n", baud); return; } if (tcsetattr (sd, TCSADRAIN, &tios) < 0) { write_log ("SERPER: TCSETATTR failed\n"); return; } } #endif #if SERIALDEBUG > 0 if (serdev == 1) write_log ("SERPER: baudrate set to %d bit/sec\n", baud); #endif } /* Not (fully) implemented yet: * * - Something's wrong with the Interrupts. * (NComm works, TERM does not. TERM switches to a * blind mode after a connect and wait's for the end * of an asynchronous read before switching blind * mode off again. It never gets there on UAE :-< ) * * - RTS/CTS handshake, this is not really neccessary, * because you can use RTS/CTS "outside" without * passing it through to the emulated Amiga * * - ADCON-Register ($9e write, $10 read) Bit 11 (UARTBRK) * (see "Amiga Intern", pg 246) */ void SERDAT (uae_u16 w) { unsigned char z; if (!currprefs.use_serial) return; z = (unsigned char)(w&0xff); if (currprefs.serial_demand && !dtr) { if (!isbaeh) { write_log ("SERDAT: Baeh.. Your software needs SERIAL_ALWAYS to work properly.\n"); isbaeh=1; } return; } else { outbuf[outlast++] = z; if (outlast == sizeof outbuf) serial_flush_buffer(); } #if SERIALDEBUG > 2 write_log ("SERDAT: wrote 0x%04x\n", w); #endif serdat|=0x2000; /* Set TBE in the SERDATR ... */ intreq|=1; /* ... and in INTREQ register */ return; } uae_u16 SERDATR (void) { if (!currprefs.use_serial) return 0; #if SERIALDEBUG > 2 write_log ("SERDATR: read 0x%04x\n", serdat); #endif waitqueue = 0; return serdat; } int SERDATS (void) { unsigned char z; if (!serdev) /* || (serdat&0x4000)) */ return 0; if (waitqueue == 1) { intreq |= 0x0800; return 1; } if ((serial_read ((char *)&z)) == 1) { waitqueue = 1; serdat = 0x4100; /* RBF and STP set! */ serdat |= ((unsigned int)z) & 0xff; intreq |= 0x0800; /* Set RBF flag (Receive Buffer full) */ #if SERIALDEBUG > 1 write_log ("SERDATS: received 0x%02x --> serdat==0x%04x\n", (unsigned int)z, (unsigned int)serdat); #endif return 1; } return 0; } void serial_dtr_on(void) { #if SERIALDEBUG > 0 write_log ("DTR on.\n"); #endif dtr=1; if (currprefs.serial_demand) serial_open (); } void serial_dtr_off(void) { #if SERIALDEBUG > 0 write_log ("DTR off.\n"); #endif dtr=0; if (currprefs.serial_demand) serial_close (); } static int serial_read (char *buffer) { if (inptr < inlast) { *buffer = inbuf[inptr++]; return 1; } if (serdev == 1) { inlast = read (sd, inbuf, sizeof inbuf); inptr = 0; if (inptr < inlast) { *buffer = inbuf[inptr++]; return 1; } } return 0; } void serial_flush_buffer(void) { #ifdef FSUAE // FIXME START for (int i = 0; i < outlast; i++) { if (outbuf[i] == 10 || (outbuf[i] >= 32 and outbuf[i] < 127)) { printf("%c", outbuf[i]); } else { printf("%c", '?'); } } printf("\n"); // FIXME END #endif if (serdev == 1) { if (outlast) { if (sd != 0) { write (sd, outbuf, outlast); } } outlast = 0; } else { outlast = 0; inptr = 0; inlast = 0; } } #ifdef FSUAE // FIXME: SYNC WITH winuae code #endif uae_u8 serial_readstatus(uae_u8 ignored) { int status = 0; #ifdef POSIX_SERIAL if (ioctl (sd, TIOCMGET, &status) < 0) status = TIOCM_CAR | TIOCM_DSR | TIOCM_CTS; if (status & TIOCM_CAR) { if (!carrier) { ciabpra |= 0x20; /* Push up Carrier Detect line */ carrier = 1; #if SERIALDEBUG > 0 write_log ("Carrier detect.\n"); #endif } } else { if (carrier) { ciabpra &= ~0x20; carrier = 0; #if SERIALDEBUG > 0 write_log ("Carrier lost.\n"); #endif } } if (status & TIOCM_DSR) { if (!dsr) { ciabpra |= 0x08; /* DSR ON */ dsr = 1; } } else { if (dsr) { ciabpra &= ~0x08; dsr = 0; } } #endif return status; } uae_u8 serial_writestatus (uae_u8 old, uae_u8 nw) { if ((old & 0x80) == 0x80 && (nw & 0x80) == 0x00) serial_dtr_on(); if ((old & 0x80) == 0x00 && (nw & 0x80) == 0x80) serial_dtr_off(); if ((old & 0x40) != (nw & 0x40)) write_log ("RTS %s.\n", ((nw & 0x40) == 0x40) ? "set" : "cleared"); if ((old & 0x10) != (nw & 0x10)) write_log ("CTS %s.\n", ((nw & 0x10) == 0x10) ? "set" : "cleared"); return nw; /* This value could also be changed here */ } void serial_open(void) { if (serdev == 1) return; if ((sd = open (currprefs.sername, O_RDWR|O_NONBLOCK|O_BINARY, 0)) < 0) { write_log ("Error: Could not open Device %s\n", currprefs.sername); return; } serdev = 1; #ifdef POSIX_SERIAL if (tcgetattr (sd, &tios) < 0) { /* Initialize Serial tty */ write_log ("Serial: TCGETATTR failed\n"); return; } cfmakeraw (&tios); #ifndef MODEMTEST tios.c_cflag &= ~CRTSCTS; /* Disable RTS/CTS */ #else tios.c_cflag |= CRTSCTS; /* Enabled for testing modems */ #endif if (tcsetattr (sd, TCSADRAIN, &tios) < 0) { write_log ("Serial: TCSETATTR failed\n"); return; } #endif } void serial_close (void) { if (sd >= 0) close (sd); serdev = 0; } void serial_init (void) { if (!currprefs.use_serial) return; if (!currprefs.serial_demand) serial_open (); serdat = 0x2000; return; } void serial_exit (void) { serial_close (); /* serial_close can always be called because it */ dtr = 0; /* just closes *opened* filehandles which is ok */ return; /* when exiting. */ } fs-uae-2.2.3+dfsg/src/akiko.cpp0000644000175000017500000014516712162366655016464 0ustar glaubitzglaubitz/* * UAE - The Un*x Amiga Emulator * * CD32 Akiko emulation * * - C2P * - NVRAM * - CDROM * * Copyright 2001-2010 Toni Wilen * */ #include "sysconfig.h" #include "sysdeps.h" #include "options.h" #include "uae/memory.h" #include "events.h" #include "savestate.h" #include "blkdev.h" #include "zfile.h" #include "threaddep/thread.h" #include "akiko.h" #include "gui.h" #include "crc32.h" #include "uae.h" #include "custom.h" #include "newcpu.h" #define AKIKO_DEBUG_NVRAM 0 #define AKIKO_DEBUG_IO 0 #define AKIKO_DEBUG_IO_CMD 0 // 43 48 49 4E 4F 4E 20 20 4F 2D 36 35 38 2D 32 20 32 34 #define FIRMWAREVERSION "CHINON O-658-2 24" static void irq (void) { #if AKIKO_DEBUG_IO > 1 write_log (_T("Akiko Interrupt\n")); #endif if (!(intreq & 8)) { INTREQ_0 (0x8000 | 0x0008); } } /* * CD32 1Kb NVRAM (EEPROM) emulation * * NVRAM chip is 24C08 CMOS EEPROM (1024x8 bits = 1Kb) * Chip interface is I2C (2 wire serial) * Akiko addresses used: * 0xb80030: bit 7 = SCL (clock), 6 = SDA (data) * 0xb80032: 0xb80030 data direction register (0 = input, 1 = output) * * Because I don't have any experience on I2C, following code may be * unnecessarily complex and not 100% correct.. */ enum i2c { I2C_WAIT, I2C_START, I2C_DEVICEADDR, I2C_WORDADDR, I2C_DATA }; /* size of EEPROM, don't try to change, * (hardcoded in Kickstart) */ #define NVRAM_SIZE 1024 /* max size of one write request */ #define NVRAM_PAGE_SIZE 16 static uae_u8 cd32_nvram[NVRAM_SIZE], nvram_writetmp[NVRAM_PAGE_SIZE]; static int nvram_address, nvram_writeaddr; static int nvram_rw; static int bitcounter = -1, direction = -1; static uae_u8 nvram_byte; static int scl_out, scl_in, scl_dir, oscl, sda_out, sda_in, sda_dir, osda; static int sda_dir_nvram; static int state = I2C_WAIT; static void nvram_write (int offset, int len) { struct zfile *f; if (!currprefs.cs_cd32nvram) return; f = zfile_fopen (currprefs.flashfile, _T("rb+"), ZFD_NORMAL); if (!f) { f = zfile_fopen (currprefs.flashfile, _T("wb"), 0); if (!f) return; zfile_fwrite (cd32_nvram, NVRAM_SIZE, 1, f); } zfile_fseek (f, offset, SEEK_SET); zfile_fwrite (cd32_nvram + offset, len, 1, f); zfile_fclose (f); } static void nvram_read (void) { struct zfile *f; if (!currprefs.cs_cd32nvram) return; f = zfile_fopen (currprefs.flashfile, _T("rb"), ZFD_NORMAL); memset (cd32_nvram, 0, NVRAM_SIZE); if (!f) return; zfile_fread (cd32_nvram, NVRAM_SIZE, 1, f); zfile_fclose (f); } static void i2c_do (void) { #if AKIKO_DEBUG_NVRAM int i; #endif sda_in = 1; if (!sda_dir_nvram && scl_out && oscl) { if (!sda_out && osda) { /* START-condition? */ state = I2C_DEVICEADDR; bitcounter = 0; direction = -1; #if AKIKO_DEBUG_NVRAM write_log (_T("START\n")); #endif return; } else if(sda_out && !osda) { /* STOP-condition? */ state = I2C_WAIT; bitcounter = -1; #if AKIKO_DEBUG_NVRAM write_log (_T("STOP\n")); #endif if (direction > 0) { memcpy (cd32_nvram + (nvram_address & ~(NVRAM_PAGE_SIZE - 1)), nvram_writetmp, NVRAM_PAGE_SIZE); nvram_write (nvram_address & ~(NVRAM_PAGE_SIZE - 1), NVRAM_PAGE_SIZE); direction = -1; gui_flicker_led (LED_MD, 0, 2); #if AKIKO_DEBUG_NVRAM write_log (_T("NVRAM write address %04X:"), nvram_address & ~(NVRAM_PAGE_SIZE - 1)); for (i = 0; i < NVRAM_PAGE_SIZE; i++) write_log (_T("%02X"), nvram_writetmp[i]); write_log (_T("\n")); #endif } return; } } if (bitcounter >= 0) { if (direction) { /* Amiga -> NVRAM */ if (scl_out && !oscl) { if (bitcounter == 8) { #if AKIKO_DEBUG_NVRAM write_log (_T("RB %02X "), nvram_byte, M68K_GETPC); #endif sda_in = 0; /* ACK */ if (direction > 0) { nvram_writetmp[nvram_writeaddr++] = nvram_byte; nvram_writeaddr &= 15; bitcounter = 0; } else { bitcounter = -1; } } else { //write_log (_T("NVRAM received bit %d, offset %d\n"), sda_out, bitcounter); nvram_byte <<= 1; nvram_byte |= sda_out; bitcounter++; } } } else { /* NVRAM -> Amiga */ if (scl_out && !oscl && bitcounter < 8) { if (bitcounter == 0) nvram_byte = cd32_nvram[nvram_address]; sda_dir_nvram = 1; sda_in = (nvram_byte & 0x80) ? 1 : 0; //write_log (_T("NVRAM sent bit %d, offset %d\n"), sda_in, bitcounter); nvram_byte <<= 1; bitcounter++; if (bitcounter == 8) { #if AKIKO_DEBUG_NVRAM write_log (_T("NVRAM sent byte %02X address %04X PC=%08X\n"), cd32_nvram[nvram_address], nvram_address, M68K_GETPC); #endif nvram_address++; nvram_address &= NVRAM_SIZE - 1; sda_dir_nvram = 0; } } if(!sda_out && sda_dir && !scl_out) /* ACK from Amiga */ bitcounter = 0; } if (bitcounter >= 0) return; } switch (state) { case I2C_DEVICEADDR: if ((nvram_byte & 0xf0) != 0xa0) { write_log (_T("WARNING: I2C_DEVICEADDR: device address != 0xA0\n")); state = I2C_WAIT; return; } nvram_rw = (nvram_byte & 1) ? 0 : 1; if (nvram_rw) { /* 2 high address bits, only fetched if WRITE = 1 */ nvram_address &= 0xff; nvram_address |= ((nvram_byte >> 1) & 3) << 8; state = I2C_WORDADDR; direction = -1; } else { state = I2C_DATA; direction = 0; sda_dir_nvram = 1; } bitcounter = 0; #if AKIKO_DEBUG_NVRAM write_log (_T("I2C_DEVICEADDR: rw %d, address %02Xxx PC=%08X\n"), nvram_rw, nvram_address >> 8, M68K_GETPC); #endif break; case I2C_WORDADDR: nvram_address &= 0x300; nvram_address |= nvram_byte; #if AKIKO_DEBUG_NVRAM write_log (_T("I2C_WORDADDR: address %04X PC=%08X\n"), nvram_address, M68K_GETPC); #endif if (direction < 0) { memcpy (nvram_writetmp, cd32_nvram + (nvram_address & ~(NVRAM_PAGE_SIZE - 1)), NVRAM_PAGE_SIZE); nvram_writeaddr = nvram_address & (NVRAM_PAGE_SIZE - 1); gui_flicker_led (LED_MD, 0, 1); } state = I2C_DATA; bitcounter = 0; direction = 1; break; } } static void akiko_nvram_write (int offset, uae_u32 v) { int sda; switch (offset) { case 0: oscl = scl_out; scl_out = (v & 0x80) ? 1 : 0; osda = sda_out; sda_out = (v & 0x40) ? 1 : 0; break; case 2: scl_dir = (v & 0x80) ? 1 : 0; sda_dir = (v & 0x40) ? 1 : 0; break; default: return; } sda = sda_out; if (oscl != scl_out || osda != sda) { i2c_do (); oscl = scl_out; osda = sda; } } static uae_u32 akiko_nvram_read (int offset) { uae_u32 v = 0; switch (offset) { case 0: if (!scl_dir) v |= scl_in ? 0x80 : 0x00; else v |= scl_out ? 0x80 : 0x00; if (!sda_dir) v |= sda_in ? 0x40 : 0x00; else v |= sda_out ? 0x40 : 0x00; break; case 2: v |= scl_dir ? 0x80 : 0x00; v |= sda_dir ? 0x40 : 0x00; break; } return v; } /* CD32 Chunky to Planar hardware emulation * Akiko addresses used: * 0xb80038-0xb8003b */ static uae_u32 akiko_buffer[8]; static int akiko_read_offset, akiko_write_offset; static uae_u32 akiko_result[8]; #if 0 static void akiko_c2p_do (void) { int i; for (i = 0; i < 8; i++) akiko_result[i] = 0; /* FIXME: better c2p algoritm than this piece of crap.... */ for (i = 0; i < 8 * 32; i++) { if (akiko_buffer[7 - (i >> 5)] & (1 << (i & 31))) akiko_result[i & 7] |= 1 << (i >> 3); } } #else /* Optimised Chunky-to-Planar algorithm by Mequa */ static uae_u32 akiko_precalc_shift[32]; static uae_u32 akiko_precalc_bytenum[32][8]; static void akiko_precalculate (void) { uae_u32 i, j; for (i = 0; i < 32; i++) { akiko_precalc_shift [(int)i] = 1 << i; for (j = 0; j < 8; j++) { akiko_precalc_bytenum[(int)i][(int)j] = (i >> 3) + ((7 - j) << 2); } } } static void akiko_c2p_do (void) { int i; for (i = 0; i < 8; i++) { akiko_result[i] = (((akiko_buffer[0] & akiko_precalc_shift[i]) != 0) << (akiko_precalc_bytenum[i][0]) ) | (((akiko_buffer[1] & akiko_precalc_shift[i]) != 0) << (akiko_precalc_bytenum[i][1]) ) | (((akiko_buffer[2] & akiko_precalc_shift[i]) != 0) << (akiko_precalc_bytenum[i][2]) ) | (((akiko_buffer[3] & akiko_precalc_shift[i]) != 0) << (akiko_precalc_bytenum[i][3]) ) | (((akiko_buffer[4] & akiko_precalc_shift[i]) != 0) << (akiko_precalc_bytenum[i][4]) ) | (((akiko_buffer[5] & akiko_precalc_shift[i]) != 0) << (akiko_precalc_bytenum[i][5]) ) | (((akiko_buffer[6] & akiko_precalc_shift[i]) != 0) << (akiko_precalc_bytenum[i][6]) ) | (((akiko_buffer[7] & akiko_precalc_shift[i]) != 0) << (akiko_precalc_bytenum[i][7]) ) | (((akiko_buffer[0] & akiko_precalc_shift[i+8]) != 0) << (akiko_precalc_bytenum[i+8][0]) ) | (((akiko_buffer[1] & akiko_precalc_shift[i+8]) != 0) << (akiko_precalc_bytenum[i+8][1]) ) | (((akiko_buffer[2] & akiko_precalc_shift[i+8]) != 0) << (akiko_precalc_bytenum[i+8][2]) ) | (((akiko_buffer[3] & akiko_precalc_shift[i+8]) != 0) << (akiko_precalc_bytenum[i+8][3]) ) | (((akiko_buffer[4] & akiko_precalc_shift[i+8]) != 0) << (akiko_precalc_bytenum[i+8][4]) ) | (((akiko_buffer[5] & akiko_precalc_shift[i+8]) != 0) << (akiko_precalc_bytenum[i+8][5]) ) | (((akiko_buffer[6] & akiko_precalc_shift[i+8]) != 0) << (akiko_precalc_bytenum[i+8][6]) ) | (((akiko_buffer[7] & akiko_precalc_shift[i+8]) != 0) << (akiko_precalc_bytenum[i+8][7]) ) | (((akiko_buffer[0] & akiko_precalc_shift[i+16]) != 0) << (akiko_precalc_bytenum[i+16][0])) | (((akiko_buffer[1] & akiko_precalc_shift[i+16]) != 0) << (akiko_precalc_bytenum[i+16][1])) | (((akiko_buffer[2] & akiko_precalc_shift[i+16]) != 0) << (akiko_precalc_bytenum[i+16][2])) | (((akiko_buffer[3] & akiko_precalc_shift[i+16]) != 0) << (akiko_precalc_bytenum[i+16][3])) | (((akiko_buffer[4] & akiko_precalc_shift[i+16]) != 0) << (akiko_precalc_bytenum[i+16][4])) | (((akiko_buffer[5] & akiko_precalc_shift[i+16]) != 0) << (akiko_precalc_bytenum[i+16][5])) | (((akiko_buffer[6] & akiko_precalc_shift[i+16]) != 0) << (akiko_precalc_bytenum[i+16][6])) | (((akiko_buffer[7] & akiko_precalc_shift[i+16]) != 0) << (akiko_precalc_bytenum[i+16][7])) | (((akiko_buffer[0] & akiko_precalc_shift[i+24]) != 0) << (akiko_precalc_bytenum[i+24][0])) | (((akiko_buffer[1] & akiko_precalc_shift[i+24]) != 0) << (akiko_precalc_bytenum[i+24][1])) | (((akiko_buffer[2] & akiko_precalc_shift[i+24]) != 0) << (akiko_precalc_bytenum[i+24][2])) | (((akiko_buffer[3] & akiko_precalc_shift[i+24]) != 0) << (akiko_precalc_bytenum[i+24][3])) | (((akiko_buffer[4] & akiko_precalc_shift[i+24]) != 0) << (akiko_precalc_bytenum[i+24][4])) | (((akiko_buffer[5] & akiko_precalc_shift[i+24]) != 0) << (akiko_precalc_bytenum[i+24][5])) | (((akiko_buffer[6] & akiko_precalc_shift[i+24]) != 0) << (akiko_precalc_bytenum[i+24][6])) | (((akiko_buffer[7] & akiko_precalc_shift[i+24]) != 0) << (akiko_precalc_bytenum[i+24][7])); } } #endif static void akiko_c2p_write (int offset, uae_u32 v) { if (offset == 3) akiko_buffer[akiko_write_offset] = 0; akiko_buffer[akiko_write_offset] |= v << ( 8 * (3 - offset)); if (offset == 0) { akiko_write_offset++; akiko_write_offset &= 7; } akiko_read_offset = 0; } static uae_u32 akiko_c2p_read (int offset) { uae_u32 v; if (akiko_read_offset == 0 && offset == 3) akiko_c2p_do (); akiko_write_offset = 0; v = akiko_result[akiko_read_offset]; if (offset == 0) { akiko_read_offset++; akiko_read_offset &= 7; } return v >> (8 * (3 - offset)); } /* CD32 CDROM hardware emulation * Akiko addresses used: * 0xb80004-0xb80028 */ #define CDINTERRUPT_SUBCODE 0x80000000 #define CDINTERRUPT_DRIVEXMIT 0x40000000 /* not used by ROM */ #define CDINTERRUPT_DRIVERECV 0x20000000 /* not used by ROM */ #define CDINTERRUPT_RXDMADONE 0x10000000 #define CDINTERRUPT_TXDMADONE 0x08000000 #define CDINTERRUPT_PBX 0x04000000 #define CDINTERRUPT_OVERFLOW 0x02000000 #define CDFLAG_SUBCODE 0x80000000 #define CDFLAG_TXD 0x40000000 #define CDFLAG_RXD 0x20000000 #define CDFLAG_CAS 0x10000000 #define CDFLAG_PBX 0x08000000 #define CDFLAG_ENABLE 0x04000000 #define CDFLAG_RAW 0x02000000 #define CDFLAG_MSB 0x01000000 #define CDS_ERROR 0x80 #define CDS_PLAYING 0x08 #define CDS_PLAYEND 0x00 #define CH_ERR_BADCOMMAND 0x80 // %10000000 #define CH_ERR_CHECKSUM 0x88 // %10001000 #define CH_ERR_DRAWERSTUCK 0x90 // %10010000 #define CH_ERR_DISKUNREADABLE 0x98 // %10011000 #define CH_ERR_INVALIDADDRESS 0xa0 // %10100000 #define CH_ERR_WRONGDATA 0xa8 // %10101000 #define CH_ERR_FOCUSERROR 0xc8 // %11001000 #define CH_ERR_SPINDLEERROR 0xd0 // %11010000 #define CH_ERR_TRACKINGERROR 0xd8 // %11011000 #define CH_ERR_SLEDERROR 0xe0 // %11100000 #define CH_ERR_TRACKJUMP 0xe8 // %11101000 #define CH_ERR_ABNORMALSEEK 0xf0 // %11110000 #define CH_ERR_NODISK 0xf8 // %11111000 static int subcodecounter; #define MAX_SUBCODEBUFFER 36 static volatile int subcodebufferoffset, subcodebufferoffsetw; static uae_u8 subcodebufferinuse[MAX_SUBCODEBUFFER]; static uae_u8 subcodebuffer[MAX_SUBCODEBUFFER * SUB_CHANNEL_SIZE]; static uae_u32 cdrom_intreq, cdrom_intena; static uae_u8 cdrom_subcodeoffset; static uae_u32 cdrom_addressdata, cdrom_addressmisc; static uae_u32 subcode_address, cdrx_address, cdtx_address; static uae_u32 cdrom_flags; static uae_u32 cdrom_pbx; static uae_u8 cdcomtxinx; /* 0x19 */ static uae_u8 cdcomrxinx; /* 0x1a */ static uae_u8 cdcomtxcmp; /* 0x1d */ static uae_u8 cdcomrxcmp; /* 0x1f */ static uae_u8 cdrom_result_buffer[32]; static uae_u8 cdrom_command_buffer[32]; static uae_u8 cdrom_command; static int cdrom_toc_counter; static uae_u32 cdrom_toc_crc; static uae_u8 cdrom_toc_buffer[MAX_TOC_ENTRIES * 13]; static struct cd_toc_head cdrom_toc_cd_buffer; static uae_u8 qcode_buf[SUBQ_SIZE]; static int qcode_valid; static int cdrom_disk, cdrom_paused, cdrom_playing, cdrom_audiostatus; static int cdrom_command_active; static int cdrom_command_length; static int cdrom_checksum_error, cdrom_unknown_command; static int cdrom_data_offset, cdrom_speed, cdrom_sector_counter; static int cdrom_current_sector, cdrom_seek_delay; static int cdrom_data_end; static int cdrom_audiotimeout; static int cdrom_led; static int cdrom_receive_length, cdrom_receive_offset; static int cdrom_muted; static int cd_initialized; static int cdrom_tx_dma_delay; static uae_u8 *sector_buffer_1, *sector_buffer_2; static int sector_buffer_sector_1, sector_buffer_sector_2; #define SECTOR_BUFFER_SIZE 64 static uae_u8 *sector_buffer_info_1, *sector_buffer_info_2; static int unitnum = -1; static bool akiko_inited; static volatile int mediachanged, mediacheckcounter; static volatile int frame2counter; static smp_comm_pipe requests; static volatile int akiko_thread_running; static uae_sem_t akiko_sem, sub_sem; static void checkint (void) { if (cdrom_intreq & cdrom_intena) irq (); } static void set_status (uae_u32 status) { #if AKIKO_DEBUG_IO if (!(cdrom_intreq & status)) write_log (_T("Akiko INTREQ %08x (%08x)\n"), status, cdrom_intreq | status); #endif cdrom_intreq |= status; checkint (); cdrom_led ^= LED_CD_ACTIVE2; } void rethink_akiko (void) { checkint (); } static void cdaudiostop_do (void) { qcode_valid = 0; if (unitnum < 0) return; sys_command_cd_pause (unitnum, 0); sys_command_cd_stop (unitnum); } static void cdaudiostop (void) { cdrom_audiostatus = 0; cdrom_audiotimeout = 0; cdrom_paused = 0; cdrom_playing = 0; write_comm_pipe_u32 (&requests, 0x0104, 1); } static void subfunc (uae_u8 *data, int cnt) { if (!(cdrom_flags & CDFLAG_SUBCODE)) return; uae_sem_wait (&sub_sem); #if 0 int total = 0; for (int i = 0; i < MAX_SUBCODEBUFFER; i++) { if (subcodebufferinuse[i]) total++; } write_log (_T("%d "), total); #endif if (subcodebufferinuse[subcodebufferoffsetw]) { memset (subcodebufferinuse, 0,sizeof (subcodebufferinuse)); subcodebufferoffsetw = subcodebufferoffset = 0; uae_sem_post (&sub_sem); //write_log (_T("CD32: subcode buffer overflow 1\n")); return; } int offset = subcodebufferoffsetw; while (cnt > 0) { if (subcodebufferinuse[offset]) { write_log (_T("CD32: subcode buffer overflow 2\n")); break; } subcodebufferinuse[offset] = 1; memcpy (&subcodebuffer[offset * SUB_CHANNEL_SIZE], data, SUB_CHANNEL_SIZE); data += SUB_CHANNEL_SIZE; offset++; if (offset >= MAX_SUBCODEBUFFER) offset = 0; cnt--; } subcodebufferoffsetw = offset; uae_sem_post (&sub_sem); } static int statusfunc (int status) { if (status == -1) return 0; if (status == -2) return 10; #if 1 if (cdrom_audiostatus != status) { if (status == AUDIO_STATUS_IN_PROGRESS) { cdrom_playing = 1; cdrom_audiotimeout = 1; } if (cdrom_playing && status != AUDIO_STATUS_IN_PROGRESS && status != AUDIO_STATUS_PAUSED && status != AUDIO_STATUS_NOT_SUPPORTED) { cdrom_audiotimeout = -1; } } cdrom_audiostatus = status; #endif return 0; } static void cdaudioplay_do (void) { uae_u32 startlsn = read_comm_pipe_u32_blocking (&requests); uae_u32 endlsn = read_comm_pipe_u32_blocking (&requests); uae_u32 scan = read_comm_pipe_u32_blocking (&requests); qcode_valid = 0; if (unitnum < 0) return; sys_command_cd_pause (unitnum, 0); sys_command_cd_play (unitnum, startlsn, endlsn, scan, statusfunc, subfunc); } static bool isaudiotrack (int startlsn) { struct cd_toc *s = NULL; uae_u32 addr; int i; if (!cdrom_toc_cd_buffer.points) return false; for (i = 0; i < cdrom_toc_cd_buffer.points; i++) { s = &cdrom_toc_cd_buffer.toc[i]; addr = s->paddress; if (s->track > 0 && s->track < 100 && addr >= startlsn) break; s++; } if (s && (s->control & 0x0c) == 0x04) { write_log (_T("tried to play data track %d!\n"), s->track); return false; } return true; } static struct cd_toc *get_track (int startlsn) { for (int i = cdrom_toc_cd_buffer.first_track_offset + 1; i <= cdrom_toc_cd_buffer.last_track_offset; i++) { struct cd_toc *s = &cdrom_toc_cd_buffer.toc[i]; uae_u32 addr = s->paddress; if (startlsn < addr) return s - 1; } return NULL; } static int last_play_end; static int cd_play_audio (int startlsn, int endlsn, int scan) { struct cd_toc *s = NULL; if (!cdrom_toc_cd_buffer.points) return 0; s = get_track (startlsn); if (s && (s->control & 0x0c) == 0x04) { s = get_track (startlsn + 150); if (s && (s->control & 0x0c) == 0x04) { write_log (_T("tried to play data track %d!\n"), s->track); s++; startlsn = s->paddress; s++; endlsn = s->paddress; } startlsn = s->paddress; } qcode_valid = 0; last_play_end = endlsn; cdrom_audiotimeout = 10; cdrom_paused = 0; write_comm_pipe_u32 (&requests, 0x0110, 0); write_comm_pipe_u32 (&requests, startlsn, 0); write_comm_pipe_u32 (&requests, endlsn, 0); write_comm_pipe_u32 (&requests, scan, 1); return 1; } /* read qcode */ static int last_play_pos; static int cd_qcode (uae_u8 *d) { uae_u8 *buf, *s, as; if (d) memset (d, 0, 11); last_play_pos = 0; buf = qcode_buf; as = buf[1]; buf[2] = 0x80; if (!qcode_valid) return 0; if (cdrom_audiostatus != AUDIO_STATUS_IN_PROGRESS && cdrom_audiostatus != AUDIO_STATUS_PAUSED) return 0; s = buf + 4; last_play_pos = msf2lsn (fromlongbcd (s + 7)); if (!d) return 0; buf[2] = 0; /* ??? */ d[0] = 0; /* CtlAdr */ d[1] = s[0]; /* Track */ d[2] = s[1]; /* Index */ d[3] = s[2]; /* TrackPos */ d[4] = s[3]; d[5] = s[4]; d[6] = s[5]; /* DiskPos */ d[7] = 0; d[8] = s[7]; d[9] = s[8]; d[10] = s[9]; if (as == AUDIO_STATUS_IN_PROGRESS) { /* Make sure end of disc position is not missed. */ if (last_play_pos >= cdrom_toc_cd_buffer.lastaddress || cdrom_toc_cd_buffer.lastaddress - last_play_pos < 10) { int msf = lsn2msf (cdrom_toc_cd_buffer.lastaddress); d[8] = tobcd ((uae_u8)(msf >> 16)); d[9] = tobcd ((uae_u8)(msf >> 8)); d[10] = tobcd ((uae_u8)(msf >> 0)); } } // write_log (_T("%02X.%02X.%02X.%02X.%02X.%02X.%02X.%02X.%02X.%02X.%02X.%02X\n"), // d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7], d[8], d[9], d[10], d[11]); return 0; } /* read toc */ static int get_cdrom_toc (void) { int j; int datatrack = 0, secondtrack = 0; cdrom_toc_counter = -1; if (!sys_command_cd_toc (unitnum, &cdrom_toc_cd_buffer)) return 1; memset (cdrom_toc_buffer, 0, MAX_TOC_ENTRIES * 13); cdrom_data_end = -1; for (j = 0; j < cdrom_toc_cd_buffer.points; j++) { struct cd_toc *s = &cdrom_toc_cd_buffer.toc[j]; uae_u8 *d = &cdrom_toc_buffer[j * 13]; int addr = s->paddress; int msf = lsn2msf (addr); if (s->point == 0xa0 || s->point == 0xa1) msf = s->track << 16; d[1] = (s->adr << 0) | (s->control << 4); d[3] = s->point < 100 ? tobcd (s->point) : s->point; d[8] = tobcd ((msf >> 16) & 0xff); d[9] = tobcd ((msf >> 8) & 0xff); d[10] = tobcd ((msf >> 0) & 0xff); if (s->point == 1 && (s->control & 0x0c) == 0x04) datatrack = 1; if (s->point == 2) secondtrack = addr; } cdrom_toc_crc = get_crc32 (cdrom_toc_buffer, cdrom_toc_cd_buffer.points * 13); if (datatrack) { if (secondtrack) cdrom_data_end = secondtrack; else cdrom_data_end = cdrom_toc_cd_buffer.lastaddress; } return 0; } /* open device */ static int sys_cddev_open (void) { struct device_info di; unitnum = get_standard_cd_unit (CD_STANDARD_UNIT_CD32); sys_command_info (unitnum, &di, 0); write_log (_T("using drive %s (unit %d, media %d)\n"), di.label, unitnum, di.media_inserted); /* make sure CD audio is not playing */ cdaudiostop_do (); return 0; } /* close device */ static void sys_cddev_close (void) { if (unitnum >= 0) { cdaudiostop_do (); sys_command_close (unitnum); } unitnum = -1; } static int command_lengths[] = { 1,2,1,1,12,2,1,1,4,1,2,-1,-1,-1,-1,-1 }; static int cdrom_start_return_data (int len) { if (cdrom_receive_length > 0) return 0; if (len <= 0) return -1; cdrom_receive_length = len; cdrom_receive_offset = -1; return 1; } /* RX DMA channel writes bytes to memory if DMA enabled, cdcomrxinx != cdcomrxcmp and there is data available from CDROM firmware code. Triggers CDINTERRUPT_RXDMADONE and stops transfer (even if there is more data available) when cdcomrxinx matches cdcomrxcmp */ static void cdrom_return_data (void) { uae_u32 cmd_buf = cdrx_address; int i; uae_u8 checksum; if (!cdrom_receive_length) return; if (!(cdrom_flags & CDFLAG_RXD)) return; if (cdcomrxinx == cdcomrxcmp) return; #if AKIKO_DEBUG_IO_CMD write_log (_T("OUT IDX=0x%02X-0x%02X LEN=%d,%08x:"), cdcomrxinx, cdcomrxcmp, cdrom_receive_length, cmd_buf); #endif if (cdrom_receive_offset < 0) { checksum = 0xff; for (i = 0; i < cdrom_receive_length; i++) { checksum -= cdrom_result_buffer[i]; #if AKIKO_DEBUG_IO_CMD write_log (_T("%02X "), cdrom_result_buffer[i]); #endif } #if AKIKO_DEBUG_IO_CMD write_log (_T("(%02X)\n"), checksum); #endif cdrom_result_buffer[cdrom_receive_length++] = checksum; cdrom_receive_offset = 0; } else { #if AKIKO_DEBUG_IO_CMD write_log (_T("\n")); #endif } while (cdrom_receive_offset < cdrom_receive_length && cdcomrxinx != cdcomrxcmp) { put_byte (cmd_buf + cdcomrxinx, cdrom_result_buffer[cdrom_receive_offset]); cdcomrxinx++; cdrom_receive_offset++; } if (cdcomrxinx == cdcomrxcmp) { set_status (CDINTERRUPT_RXDMADONE); #if AKIKO_DEBUG_IO_CMD write_log (_T("RXDMADONE %d/%d\n"), cdrom_receive_offset, cdrom_receive_length); #endif } if (cdrom_receive_offset == cdrom_receive_length) cdrom_receive_length = 0; } static int cdrom_command_led (void) { int v = cdrom_command_buffer[1]; int old = cdrom_led; cdrom_led &= ~LED_CD_ACTIVE; cdrom_led |= (v & 1) ? LED_CD_ACTIVE : 0; if (cdrom_led != old) gui_flicker_led (LED_CD, 0, cdrom_led); if (v & 0x80) { // result wanted? cdrom_result_buffer[0] = cdrom_command; cdrom_result_buffer[1] = (cdrom_led & LED_CD_ACTIVE) ? 1 : 0; return 2; } return 0; } static int cdrom_command_idle_status (void) { cdrom_result_buffer[0] = 0x0a; cdrom_result_buffer[1] = 0x70; return 2; } static int cdrom_command_media_status (void) { cdrom_result_buffer[0] = 0x0a; cdrom_result_buffer[1] = sys_command_ismedia (unitnum, 0) > 0 ? 0x83: 0x80; return 2; } /* check if cd drive door is open or closed, return firmware info */ static int cdrom_command_status (void) { cdrom_result_buffer[1] = 0x01; //cdrom_result_buffer[1] = 0x80; door open if (unitnum >= 0) get_cdrom_toc (); /* firmware info */ memcpy (cdrom_result_buffer + 2, FIRMWAREVERSION, sizeof FIRMWAREVERSION); cdrom_result_buffer[0] = cdrom_command; cd_initialized = 1; return 20; } /* return one TOC entry, each TOC entry repeats 3 times */ #define TOC_REPEAT 3 static int cdrom_return_toc_entry (void) { cdrom_result_buffer[0] = 6; #if AKIKO_DEBUG_IO_CMD write_log (_T("CD32: TOC entry %d/%d\n"), cdrom_toc_counter / TOC_REPEAT, cdrom_toc_cd_buffer.points); #endif if (cdrom_toc_cd_buffer.points == 0) { cdrom_result_buffer[1] = CDS_ERROR; return 15; } cdrom_result_buffer[1] = 0; memcpy (cdrom_result_buffer + 2, cdrom_toc_buffer + (cdrom_toc_counter / TOC_REPEAT) * 13, 13); cdrom_toc_counter++; if (cdrom_toc_counter / TOC_REPEAT >= cdrom_toc_cd_buffer.points) cdrom_toc_counter = -1; return 15; } static int checkerr (void) { if (!cdrom_disk) { cdrom_result_buffer[1] = CH_ERR_NODISK; return 1; } return 0; } static int cdrom_command_stop (void) { cdrom_audiotimeout = 0; cdrom_result_buffer[0] = cdrom_command; if (checkerr ()) return 2; cdrom_result_buffer[1] = 0; cdaudiostop (); return 2; } /* pause CD audio */ static int cdrom_command_pause (void) { #if AKIKO_DEBUG_IO_CMD write_log (_T("CD32: pause: %d, %d\n"), cdrom_paused, cdrom_playing); #endif cdrom_audiotimeout = 0; cdrom_toc_counter = -1; cdrom_result_buffer[0] = cdrom_command; if (checkerr ()) return 2; cdrom_result_buffer[1] = cdrom_playing ? CDS_PLAYING : 0; if (cdrom_paused) return 2; cdrom_paused = 1; if (!cdrom_playing) return 2; write_comm_pipe_u32 (&requests, 0x0102, 1); return 2; } /* unpause CD audio */ static int cdrom_command_unpause (void) { #if AKIKO_DEBUG_IO_CMD write_log (_T("CD32: unpause: %d, %d\n"), cdrom_paused, cdrom_playing); #endif cdrom_result_buffer[0] = cdrom_command; if (checkerr ()) return 2; cdrom_result_buffer[1] = cdrom_playing ? CDS_PLAYING : 0; if (!cdrom_paused) return 2; cdrom_paused = 0; if (!cdrom_playing) return 2; write_comm_pipe_u32 (&requests, 0x0103, 1); return 2; } /* seek head/play CD audio/read data sectors */ static int cdrom_command_multi (void) { int seekpos = msf2lsn (fromlongbcd (cdrom_command_buffer + 1)); int endpos = msf2lsn (fromlongbcd (cdrom_command_buffer + 4)); if (cdrom_playing) cdaudiostop (); cdrom_speed = (cdrom_command_buffer[8] & 0x40) ? 2 : 1; cdrom_result_buffer[0] = cdrom_command; cdrom_result_buffer[1] = 0; if (!cdrom_disk) { cdrom_result_buffer[1] = 1; // no disk return 2; } if (cdrom_command_buffer[7] == 0x80) { /* data read */ #if AKIKO_DEBUG_IO_CMD int cdrom_data_offset_end = endpos; #endif cdrom_data_offset = seekpos; cdrom_seek_delay = abs (cdrom_current_sector - cdrom_data_offset); if (cdrom_seek_delay < 100) { cdrom_seek_delay = 1; } else { cdrom_seek_delay /= 1000; cdrom_seek_delay += 10; if (cdrom_seek_delay > 100) cdrom_seek_delay = 100; } #if AKIKO_DEBUG_IO_CMD write_log (_T("READ DATA %06X (%d) - %06X (%d) SPD=%dx PC=%08X\n"), seekpos, cdrom_data_offset, endpos, cdrom_data_offset_end, cdrom_speed, M68K_GETPC); #endif cdrom_result_buffer[1] |= 0x02; } else if (cdrom_command_buffer[10] & 4) { /* play audio */ #if AKIKO_DEBUG_IO_CMD int scan = 0; if (cdrom_command_buffer[7] & 0x04) scan = 1; else if (cdrom_command_buffer[7] & 0x08) scan = -1; write_log (_T("PLAY FROM %06X (%d) to %06X (%d) SCAN=%d\n"), seekpos, msf2lsn (seekpos), endpos, msf2lsn (endpos), scan); #endif //cdrom_result_buffer[1] |= CDS_PLAYING; cdrom_playing = 1; if (!cd_play_audio (seekpos, endpos, 0)) { // play didn't start, report it in next status packet cdrom_audiotimeout = -3; } } else { #if AKIKO_DEBUG_IO_CMD write_log (_T("SEEKTO %06X\n"),seekpos); #endif if (seekpos < 150) cdrom_toc_counter = 0; else cdrom_toc_counter = -1; } return 2; } static int cdrom_playend_notify (int status) { cdrom_result_buffer[0] = 4; if (status < 0) cdrom_result_buffer[1] = 0x80; // error else if (status == 0) cdrom_result_buffer[1] = 0x08; // play started else cdrom_result_buffer[1] = 0x00; // play ended return 2; } /* return subq entry */ static int cdrom_command_subq (void) { cdrom_result_buffer[0] = cdrom_command; cdrom_result_buffer[1] = 0; cd_qcode (cdrom_result_buffer + 2); return 15; } /* TX DMA reads bytes from memory and sends them to CDROM hardware if TX DMA enabled, CDROM data transfer DMA not enabled and cdcomtxinx != cdcomtx. CDINTERRUPT_TXDMADONE triggered when cdromtxinx matches cdcomtx. */ static void cdrom_run_command (void) { int i, cmd_len; uae_u8 checksum; #if 0 uae_u8 *pp = get_real_address (cdtx_address); #endif if (!(cdrom_flags & CDFLAG_TXD)) return; if ((cdrom_flags & CDFLAG_ENABLE)) return; if (cdrom_command_active) return; if (cdrom_receive_length) return; if (cdcomtxinx == cdcomtxcmp) return; if (cdrom_tx_dma_delay > 0) return; cdrom_command = get_byte (cdtx_address + cdcomtxinx); if (cdrom_command == 0) { cdcomtxinx++; return; } cdrom_checksum_error = 0; cdrom_unknown_command = 0; cmd_len = command_lengths[cdrom_command & 0x0f]; if (cmd_len < 0) { #if AKIKO_DEBUG_IO_CMD write_log (_T("unknown command %x\n"), cdrom_command & 0x0f); #endif cdrom_unknown_command = 1; cdrom_command_active = 1; cdrom_command_length = 1; set_status (CDINTERRUPT_TXDMADONE); return; } #if AKIKO_DEBUG_IO_CMD write_log (_T("IN CMD=%02X IDX=0x%02X-0x%02X LEN=%d:"), cdrom_command & 0x0f, cdcomtxinx, cdcomtxcmp, cmd_len); #endif checksum = 0; for (i = 0; i < cmd_len + 1; i++) { cdrom_command_buffer[i] = get_byte (cdtx_address + ((cdcomtxinx + i) & 0xff)); checksum += cdrom_command_buffer[i]; #if AKIKO_DEBUG_IO_CMD if (i == cmd_len) write_log (_T("(%02X) "), cdrom_command_buffer[i]); // checksum else write_log (_T("%02X "), cdrom_command_buffer[i]); #endif } if (checksum != 0xff) { #if AKIKO_DEBUG_IO_CMD write_log (_T(" checksum error")); #endif cdrom_checksum_error = 1; //activate_debugger (); } #if AKIKO_DEBUG_IO_CMD write_log (_T("\n")); #endif cdrom_command_active = 1; cdrom_command_length = cmd_len; set_status (CDINTERRUPT_TXDMADONE); } static void cdrom_run_command_run (void) { int len; cdcomtxinx = cdcomtxinx + cdrom_command_length + 1; memset (cdrom_result_buffer, 0, sizeof (cdrom_result_buffer)); if (cdrom_checksum_error || cdrom_unknown_command) { cdrom_result_buffer[0] = (cdrom_command & 0xf0) | 5; if (cdrom_checksum_error) cdrom_result_buffer[1] |= CH_ERR_CHECKSUM; else if (cdrom_unknown_command) cdrom_result_buffer[1] |= CH_ERR_BADCOMMAND; len = 2; cdrom_start_return_data (len); return; } switch (cdrom_command & 0x0f) { case 0: len = 1; cdrom_result_buffer[0] = cdrom_command; break; case 1: len = cdrom_command_stop (); break; case 2: len = cdrom_command_pause (); break; case 3: len = cdrom_command_unpause (); break; case 4: len = cdrom_command_multi (); break; case 5: len = cdrom_command_led (); break; case 6: len = cdrom_command_subq (); break; case 7: len = cdrom_command_status (); break; default: len = 0; break; } if (len == 0) return; cdrom_start_return_data (len); } /* DMA transfer one CD sector */ static void cdrom_run_read (void) { int i, sector, inc; int sec; int seccnt; if (!(cdrom_flags & CDFLAG_ENABLE)) return; if (!cdrom_pbx) { set_status (CDINTERRUPT_OVERFLOW); return; } if (!(cdrom_flags & CDFLAG_PBX)) return; if (cdrom_data_offset < 0) return; if (unitnum < 0) return; inc = 1; // always use highest available slot or Lotus 3 (Lotus Trilogy) fails to load for (seccnt = 15; seccnt >= 0; seccnt--) { if (cdrom_pbx & (1 << seccnt)) break; } sector = cdrom_current_sector = cdrom_data_offset + cdrom_sector_counter; sec = sector - sector_buffer_sector_1; if (sector_buffer_sector_1 >= 0 && sec >= 0 && sec < SECTOR_BUFFER_SIZE) { if (sector_buffer_info_1[sec] != 0xff && sector_buffer_info_1[sec] != 0) { uae_u8 buf[2352]; memcpy (buf, sector_buffer_1 + sec * 2352, 2352); buf[0] = 0; buf[1] = 0; buf[2] = 0; buf[3] = cdrom_sector_counter & 31; for (i = 0; i < 2352; i++) put_byte (cdrom_addressdata + seccnt * 4096 + i, buf[i]); for (i = 0; i < 73 * 2; i++) put_byte (cdrom_addressdata + seccnt * 4096 + 0xc00 + i, 0); cdrom_pbx &= ~(1 << seccnt); set_status (CDINTERRUPT_PBX); } else { inc = 0; } if (sector_buffer_info_1[sec] != 0xff) sector_buffer_info_1[sec]--; #if AKIKO_DEBUG_IO_CMD write_log (_T("pbx=%04x sec=%d, scnt=%d -> %d. %d (%04x) %08X\n"), cdrom_pbx, cdrom_data_offset, cdrom_sector_counter, sector, seccnt, 1 << seccnt, cdrom_addressdata + seccnt * 4096); #endif } else { inc = 0; } if (inc) cdrom_sector_counter++; } static int lastmediastate = 0; static void akiko_handler (bool framesync) { if (unitnum < 0) return; if (!cd_initialized || cdrom_receive_length) return; if (mediachanged) { if (cdrom_start_return_data (0) < 0) { cdrom_start_return_data (cdrom_command_media_status ()); mediachanged = 0; get_cdrom_toc (); /* do not remove! first try may fail */ get_cdrom_toc (); } return; } if (cdrom_audiotimeout > 1) cdrom_audiotimeout--; if (cdrom_audiotimeout == 1) { // play start cdrom_playing = 1; //cdrom_start_return_data (cdrom_playend_notify (0)); cdrom_audiotimeout = 0; } if (cdrom_audiotimeout == -1) { // play finished (or disk end) if (cdrom_playing) { cdaudiostop (); cdrom_audiotimeout = -2; } else { cdrom_audiotimeout = 0; } } if (cdrom_audiotimeout == -2) { // play end notification cdrom_start_return_data (cdrom_playend_notify (1)); cdrom_audiotimeout = 0; } // play didn't start notification (illegal address) if (cdrom_audiotimeout == -3) { // return error status cdrom_start_return_data (cdrom_playend_notify (-1)); cdrom_audiotimeout = 0; } /* one toc entry / frame */ if (cdrom_toc_counter >= 0 && !cdrom_command_active) { if (cdrom_start_return_data (-1)) { cdrom_start_return_data (cdrom_return_toc_entry ()); } } } static void akiko_internal (void) { if (!currprefs.cs_cd32cd) return; cdrom_return_data (); cdrom_run_command (); if (cdrom_command_active > 0) { cdrom_command_active--; if (!cdrom_command_active) cdrom_run_command_run (); } } void AKIKO_hsync_handler (void) { bool framesync = false; if (!currprefs.cs_cd32cd || !akiko_inited) return; static float framecounter; framecounter--; if (framecounter <= 0) { if (cdrom_seek_delay <= 0) { cdrom_run_read (); } else { cdrom_seek_delay--; } framecounter += (float)maxvpos * vblank_hz / (75.0 * cdrom_speed); framesync = true; } if (cdrom_tx_dma_delay > 0) cdrom_tx_dma_delay--; subcodecounter--; if (subcodecounter <= 0) { if ((cdrom_flags & CDFLAG_SUBCODE) && cdrom_playing && subcodebufferoffset != subcodebufferoffsetw) { uae_sem_wait (&sub_sem); if (subcodebufferinuse[subcodebufferoffset]) { if (cdrom_subcodeoffset >= 128) cdrom_subcodeoffset = 0; else cdrom_subcodeoffset = 128; // 96 byte subchannel data for (int i = 0; i < SUB_CHANNEL_SIZE; i++) put_byte (subcode_address + cdrom_subcodeoffset + i, subcodebuffer[subcodebufferoffset * SUB_CHANNEL_SIZE + i]); put_long (subcode_address + cdrom_subcodeoffset + SUB_CHANNEL_SIZE, 0xffffffff); subcodebufferinuse[subcodebufferoffset] = 0; cdrom_subcodeoffset += 100; subcodebufferoffset++; if (subcodebufferoffset >= MAX_SUBCODEBUFFER) subcodebufferoffset -= MAX_SUBCODEBUFFER; set_status (CDINTERRUPT_SUBCODE); //write_log (_T("*")); } uae_sem_post (&sub_sem); } subcodecounter = maxvpos * vblank_hz / (75 * cdrom_speed) - 5; } if (frame2counter > 0) frame2counter--; if (mediacheckcounter > 0) mediacheckcounter--; akiko_internal (); akiko_handler (framesync); } /* cdrom data buffering thread */ static void *akiko_thread (void *null) { int i; uae_u8 *tmp1; uae_u8 *tmp2; int tmp3; int offset; int sector; while (akiko_thread_running || comm_pipe_has_data (&requests)) { if (comm_pipe_has_data (&requests)) { uae_u32 b = read_comm_pipe_u32_blocking (&requests); switch (b) { case 0x0102: // pause sys_command_cd_pause (unitnum, 1); break; case 0x0103: // unpause sys_command_cd_pause (unitnum, 0); break; case 0x0104: // stop cdaudiostop_do (); break; case 0x0105: // mute change sys_command_cd_volume (unitnum, cdrom_muted ? 0 : 0x7fff, cdrom_muted ? 0 : 0x7fff); break; case 0x0110: // do_play! sys_command_cd_volume (unitnum, cdrom_muted ? 0 : 0x7fff, cdrom_muted ? 0 : 0x7fff); cdaudioplay_do (); break; } } if (frame2counter <= 0) { frame2counter = 312 * 50 / 2; if (unitnum >= 0 && sys_command_cd_qcode (unitnum, qcode_buf)) { qcode_valid = 1; } } if (mediacheckcounter <= 0) { mediacheckcounter = 312 * 50 * 2; int media = sys_command_ismedia (unitnum, 1); if (media < 0) { write_log (_T("CD32: device unit %d lost\n"), unitnum); media = lastmediastate = cdrom_disk = 0; mediachanged = 1; cdaudiostop_do (); } else if (media != lastmediastate) { if (!media && lastmediastate > 1) { // ignore missing media if statefile restored with cd present if (lastmediastate == 2) write_log (_T("CD32: CD missing but statefile was stored with CD inserted: faking media present\n")); lastmediastate = 3; } else { write_log (_T("CD32: media changed = %d\n"), media); lastmediastate = cdrom_disk = media; mediachanged = 1; cdaudiostop_do (); } } } uae_sem_wait (&akiko_sem); sector = cdrom_current_sector; for (i = 0; i < SECTOR_BUFFER_SIZE; i++) { if (sector_buffer_info_1[i] == 0xff) break; } if (cdrom_data_end > 0 && sector >= 0 && (sector_buffer_sector_1 < 0 || sector < sector_buffer_sector_1 || sector >= sector_buffer_sector_1 + SECTOR_BUFFER_SIZE * 2 / 3 || i != SECTOR_BUFFER_SIZE)) { memset (sector_buffer_info_2, 0, SECTOR_BUFFER_SIZE); #if AKIKO_DEBUG_IO_CMD write_log (_T("filling buffer sector=%d (max=%d)\n"), sector, cdrom_data_end); #endif sector_buffer_sector_2 = sector; offset = 0; while (offset < SECTOR_BUFFER_SIZE) { int ok = 0; if (sector < cdrom_data_end) ok = sys_command_cd_rawread (unitnum, sector_buffer_2 + offset * 2352, sector, 1, 2352); sector_buffer_info_2[offset] = ok ? 3 : 0; offset++; sector++; } tmp1 = sector_buffer_info_1; sector_buffer_info_1 = sector_buffer_info_2; sector_buffer_info_2 = tmp1; tmp2 = sector_buffer_1; sector_buffer_1 = sector_buffer_2; sector_buffer_2 = tmp2; tmp3 = sector_buffer_sector_1; sector_buffer_sector_1 = sector_buffer_sector_2; sector_buffer_sector_2 = tmp3; } uae_sem_post (&akiko_sem); sleep_millis (10); } akiko_thread_running = -1; return 0; } STATIC_INLINE uae_u8 akiko_get_long (uae_u32 v, int offset) { return v >> ((3 - offset) * 8); } STATIC_INLINE void akiko_put_long (uae_u32 *p, int offset, int v) { *p &= ~(0xff << ((3 - offset) * 8)); *p |= v << ((3 - offset) * 8); } static uae_u32 REGPARAM3 akiko_lget (uaecptr) REGPARAM; static uae_u32 REGPARAM3 akiko_wget (uaecptr) REGPARAM; static uae_u32 REGPARAM3 akiko_bget (uaecptr) REGPARAM; static uae_u32 REGPARAM3 akiko_lgeti (uaecptr) REGPARAM; static uae_u32 REGPARAM3 akiko_wgeti (uaecptr) REGPARAM; static void REGPARAM3 akiko_lput (uaecptr, uae_u32) REGPARAM; static void REGPARAM3 akiko_wput (uaecptr, uae_u32) REGPARAM; static void REGPARAM3 akiko_bput (uaecptr, uae_u32) REGPARAM; static uae_u32 akiko_bget2 (uaecptr addr, int msg) { uae_u8 v = 0; addr &= 0xffff; switch (addr) { /* "CAFE" = Akiko identification. * Kickstart ignores Akiko C2P if this ID isn't correct */ case 0x02: return 0xCA; case 0x03: return 0xFE; /* NVRAM */ case 0x30: case 0x31: case 0x32: case 0x33: if (currprefs.cs_cd32nvram) v = akiko_nvram_read (addr - 0x30); return v; /* C2P */ case 0x38: case 0x39: case 0x3a: case 0x3b: if (currprefs.cs_cd32c2p) v = akiko_c2p_read (addr - 0x38); return v; } uae_sem_wait (&akiko_sem); switch (addr) { if (currprefs.cs_cd32cd) { /* CDROM control */ case 0x04: case 0x05: case 0x06: case 0x07: v = akiko_get_long (cdrom_intreq, addr - 0x04); break; case 0x08: case 0x09: case 0x0a: case 0x0b: v = akiko_get_long (cdrom_intena, addr - 0x08); break; case 0x10: case 0x11: case 0x12: case 0x13: v = akiko_get_long (cdrom_addressdata, addr - 0x10); break; case 0x14: case 0x15: case 0x16: case 0x17: v = akiko_get_long (cdrom_addressmisc, addr - 0x14); break; case 0x18: v = cdrom_subcodeoffset; break; case 0x19: v = cdcomtxinx; break; case 0x1a: v = cdcomrxinx; break; case 0x1f: v = cdcomrxcmp; break; case 0x20: case 0x21: v = akiko_get_long (cdrom_pbx, addr - 0x20 + 2); break; case 0x24: case 0x25: case 0x26: case 0x27: v = akiko_get_long (cdrom_flags, addr - 0x24); break; } else if (addr < 0x30) { break; } default: write_log (_T("akiko_bget: unknown address %08X PC=%08X\n"), addr, M68K_GETPC); v = 0; break; } akiko_internal (); uae_sem_post (&akiko_sem); if (msg && addr < 0x30 && AKIKO_DEBUG_IO) write_log (_T("akiko_bget %08X: %08X %02X\n"), M68K_GETPC, addr, v & 0xff); return v; } static uae_u32 REGPARAM2 akiko_bget (uaecptr addr) { #ifdef JIT special_mem |= S_READ; #endif return akiko_bget2 (addr, 1); } static uae_u32 REGPARAM2 akiko_wget (uaecptr addr) { uae_u16 v; #ifdef JIT special_mem |= S_READ; #endif addr &= 0xffff; v = akiko_bget2 (addr + 1, 0); v |= akiko_bget2 (addr + 0, 0) << 8; if (addr < 0x30 && AKIKO_DEBUG_IO) write_log (_T("akiko_wget %08X: %08X %04X\n"), M68K_GETPC, addr, v & 0xffff); return v; } static uae_u32 REGPARAM2 akiko_lget (uaecptr addr) { uae_u32 v; #ifdef JIT special_mem |= S_READ; #endif addr &= 0xffff; v = akiko_bget2 (addr + 3, 0); v |= akiko_bget2 (addr + 2, 0) << 8; v |= akiko_bget2 (addr + 1, 0) << 16; v |= akiko_bget2 (addr + 0, 0) << 24; if (addr < 0x30 && (addr != 4 && addr != 8) && AKIKO_DEBUG_IO) write_log (_T("akiko_lget %08X: %08X %08X\n"), M68K_GETPC, addr, v); return v; } static void akiko_bput2 (uaecptr addr, uae_u32 v, int msg) { uae_u32 tmp; addr &= 0xffff; v &= 0xff; if(msg && addr < 0x30 && AKIKO_DEBUG_IO) write_log (_T("akiko_bput %08X: %08X=%02X\n"), M68K_GETPC, addr, v & 0xff); switch (addr) { case 0x30: case 0x31: case 0x32: case 0x33: if (currprefs.cs_cd32nvram) akiko_nvram_write (addr - 0x30, v); return; case 0x38: case 0x39: case 0x3a: case 0x3b: if (currprefs.cs_cd32c2p) akiko_c2p_write (addr - 0x38, v); return; } uae_sem_wait (&akiko_sem); switch (addr) { if (currprefs.cs_cd32cd) { case 0x04: case 0x05: case 0x06: case 0x07: akiko_put_long (&cdrom_intreq, addr - 0x04, v); break; case 0x08: case 0x09: case 0x0a: case 0x0b: akiko_put_long (&cdrom_intena, addr - 0x08, v); if (addr == 8) cdrom_intreq &= cdrom_intena; break; case 0x10: case 0x11: case 0x12: case 0x13: akiko_put_long (&cdrom_addressdata, addr - 0x10, v); cdrom_addressdata &= 0x00fff000; break; case 0x14: case 0x15: case 0x16: case 0x17: akiko_put_long (&cdrom_addressmisc, addr - 0x14, v); cdrom_addressmisc &= 0x00fffc00; subcode_address = cdrom_addressmisc | 0x100; cdrx_address = cdrom_addressmisc; cdtx_address = cdrom_addressmisc | 0x200; break; case 0x18: cdrom_intreq &= ~CDINTERRUPT_SUBCODE; break; case 0x1d: cdrom_intreq &= ~CDINTERRUPT_TXDMADONE; cdcomtxcmp = v; cdrom_tx_dma_delay = 5; break; case 0x1f: cdrom_intreq &= ~CDINTERRUPT_RXDMADONE; cdcomrxcmp = v; break; case 0x20: case 0x21: tmp = cdrom_pbx; akiko_put_long (&cdrom_pbx, addr - 0x20 + 2, v); cdrom_pbx |= tmp; cdrom_pbx &= 0xffff; cdrom_intreq &= ~CDINTERRUPT_PBX; break; case 0x24: case 0x25: case 0x26: case 0x27: tmp = cdrom_flags; akiko_put_long (&cdrom_flags, addr - 0x24, v); if ((cdrom_flags & CDFLAG_ENABLE) && !(tmp & CDFLAG_ENABLE)) cdrom_sector_counter = 0; if (!(cdrom_flags & CDFLAG_PBX) && (tmp & CDFLAG_PBX)) cdrom_pbx = 0; if ((cdrom_flags & CDFLAG_SUBCODE) && !(tmp & CDFLAG_SUBCODE)) { uae_sem_wait (&sub_sem); memset (subcodebufferinuse, 0, sizeof subcodebufferinuse); subcodebufferoffset = subcodebufferoffsetw = 0; uae_sem_post (&sub_sem); } break; } else if (addr < 0x30) { break; } default: write_log (_T("akiko_bput: unknown address %08X=%02X PC=%08X\n"), addr, v & 0xff, M68K_GETPC); break; } akiko_internal (); uae_sem_post (&akiko_sem); } static void REGPARAM2 akiko_bput (uaecptr addr, uae_u32 v) { #ifdef JIT special_mem |= S_WRITE; #endif akiko_bput2 (addr, v, 1); } static void REGPARAM2 akiko_wput (uaecptr addr, uae_u32 v) { #ifdef JIT special_mem |= S_WRITE; #endif addr &= 0xfff; if((addr < 0x30 && AKIKO_DEBUG_IO)) write_log (_T("akiko_wput %08X: %08X=%04X\n"), M68K_GETPC, addr, v & 0xffff); akiko_bput2 (addr + 1, v & 0xff, 0); akiko_bput2 (addr + 0, v >> 8, 0); } static void REGPARAM2 akiko_lput (uaecptr addr, uae_u32 v) { #ifdef JIT special_mem |= S_WRITE; #endif addr &= 0xffff; if(addr < 0x30 && AKIKO_DEBUG_IO) write_log (_T("akiko_lput %08X: %08X=%08X\n"), M68K_GETPC, addr, v); akiko_bput2 (addr + 3, (v >> 0) & 0xff, 0); akiko_bput2 (addr + 2, (v >> 8) & 0xff, 0); akiko_bput2 (addr + 1, (v >> 16) & 0xff, 0); akiko_bput2 (addr + 0, (v >> 24) & 0xff, 0); } addrbank akiko_bank = { akiko_lget, akiko_wget, akiko_bget, akiko_lput, akiko_wput, akiko_bput, default_xlate, default_check, NULL, _T("Akiko"), dummy_lgeti, dummy_wgeti, ABFLAG_IO }; static void akiko_cdrom_free (void) { sys_cddev_close (); xfree (sector_buffer_1); xfree (sector_buffer_2); xfree (sector_buffer_info_1); xfree (sector_buffer_info_2); sector_buffer_1 = 0; sector_buffer_2 = 0; sector_buffer_info_1 = 0; sector_buffer_info_2 = 0; } void akiko_reset (void) { cdaudiostop_do (); nvram_read (); state = I2C_WAIT; bitcounter = -1; direction = -1; cdrom_speed = 1; cdrom_current_sector = -1; if (!savestate_state) { cdcomtxinx = 0; cdcomrxinx = 0; cdcomtxcmp = 0; lastmediastate = -1; } cdrom_led = 0; cdrom_receive_length = 0; cdrom_receive_offset = 0; cd_initialized = 0; if (akiko_thread_running > 0) { cdaudiostop (); akiko_thread_running = 0; while(akiko_thread_running == 0) Sleep (10); akiko_thread_running = 0; } akiko_cdrom_free (); mediacheckcounter = 0; akiko_inited = false; } void akiko_free (void) { akiko_reset (); akiko_cdrom_free (); } int akiko_init (void) { if (!currprefs.cs_cd32cd) return 0; akiko_free (); akiko_precalculate (); unitnum = -1; sys_cddev_open (); sector_buffer_1 = xmalloc (uae_u8, SECTOR_BUFFER_SIZE * 2352); sector_buffer_2 = xmalloc (uae_u8, SECTOR_BUFFER_SIZE * 2352); sector_buffer_info_1 = xmalloc (uae_u8, SECTOR_BUFFER_SIZE); sector_buffer_info_2 = xmalloc (uae_u8, SECTOR_BUFFER_SIZE); sector_buffer_sector_1 = -1; sector_buffer_sector_2 = -1; uae_sem_init (&akiko_sem, 0, 1); uae_sem_init (&sub_sem, 0, 1); if (!savestate_state) { cdrom_playing = cdrom_paused = 0; cdrom_data_offset = -1; } if (!akiko_thread_running) { akiko_thread_running = 1; init_comm_pipe (&requests, 100, 1); uae_start_thread (_T("akiko"), akiko_thread, 0, NULL); } gui_flicker_led (LED_HD, 0, -1); akiko_inited = true; return 1; } #ifdef SAVESTATE uae_u8 *save_akiko (int *len, uae_u8 *dstptr) { uae_u8 *dstbak, *dst; int i; if (!currprefs.cs_cd32cd) return NULL; if (dstptr) dstbak = dst = dstptr; else dstbak = dst = xmalloc (uae_u8, 1000); save_u16 (0); save_u16 (0xCAFE); save_u32 (cdrom_intreq); save_u32 (cdrom_intena); save_u32 (0); save_u32 (cdrom_addressdata); save_u32 (cdrom_addressmisc); save_u8 (cdrom_subcodeoffset); save_u8 (cdcomtxinx); save_u8 (cdcomrxinx); save_u8 (0); save_u8 (0); save_u8 (cdcomtxcmp); save_u8 (0); save_u8 (cdcomrxcmp); save_u16 ((uae_u16)cdrom_pbx); save_u16 (0); save_u32 (cdrom_flags); save_u32 (0); save_u32 (0); save_u32 ((scl_dir ? 0x8000 : 0) | (sda_dir ? 0x4000 : 0)); save_u32 (0); save_u32 (0); for (i = 0; i < 8; i++) save_u32 (akiko_buffer[i]); save_u8 ((uae_u8)akiko_read_offset); save_u8 ((uae_u8)akiko_write_offset); save_u32 ((cdrom_playing ? 1 : 0) | (cdrom_paused ? 2 : 0) | (cdrom_disk ? 4 : 0)); if (cdrom_playing) cd_qcode (0); save_u32 (lsn2msf (last_play_pos)); save_u32 (lsn2msf (last_play_end)); save_u8 ((uae_u8)cdrom_toc_counter); save_u8 (cdrom_speed); save_u8 (cdrom_current_sector); save_u32 (cdrom_toc_crc); save_u8 (cdrom_toc_cd_buffer.points); save_u32 (cdrom_toc_cd_buffer.lastaddress); *len = dst - dstbak; return dstbak; } uae_u8 *restore_akiko (uae_u8 *src) { uae_u32 v; int i; akiko_free (); if (!currprefs.cs_cd32cd) { changed_prefs.cs_cd32c2p = changed_prefs.cs_cd32cd = changed_prefs.cs_cd32nvram = true; currprefs.cs_cd32c2p = currprefs.cs_cd32cd = currprefs.cs_cd32nvram = true; akiko_init (); } restore_u16 (); restore_u16 (); cdrom_intreq = restore_u32 (); cdrom_intena = restore_u32 (); restore_u32 (); cdrom_addressdata = restore_u32 (); cdrom_addressmisc = restore_u32 (); subcode_address = cdrom_addressmisc | 0x100; cdrx_address = cdrom_addressmisc; cdtx_address = cdrom_addressmisc | 0x200; cdrom_subcodeoffset = restore_u8 (); cdcomtxinx = restore_u8 (); cdcomrxinx = restore_u8 (); restore_u8 (); restore_u8 (); cdcomtxcmp = restore_u8 (); restore_u8 (); cdcomrxcmp = restore_u8 (); cdrom_pbx = restore_u16 (); restore_u16 (); cdrom_flags = restore_u32 (); restore_u32 (); restore_u32 (); v = restore_u32 (); scl_dir = (v & 0x8000) ? 1 : 0; sda_dir = (v & 0x4000) ? 1 : 0; restore_u32 (); restore_u32 (); for (i = 0; i < 8; i++) akiko_buffer[i] = restore_u32 (); akiko_read_offset = restore_u8 (); akiko_write_offset = restore_u8 (); cdrom_playing = cdrom_paused = cdrom_disk = 0; v = restore_u32 (); if (v & 1) cdrom_playing = 1; if (v & 2) cdrom_paused = 1; if (v & 4) cdrom_disk = 1; lastmediastate = cdrom_disk ? 2 : 0; last_play_pos = msf2lsn (restore_u32 ()); last_play_end = msf2lsn (restore_u32 ()); cdrom_toc_counter = (uae_s8)restore_u8 (); cdrom_speed = restore_u8 (); cdrom_current_sector = (uae_s8)restore_u8 (); restore_u32 (); restore_u8 (); restore_u32 (); return src; } void restore_akiko_finish (void) { if (!currprefs.cs_cd32cd) return; sys_cddev_close (); akiko_init (); akiko_c2p_do (); get_cdrom_toc (); write_comm_pipe_u32 (&requests, 0x0102, 1); // pause write_comm_pipe_u32 (&requests, 0x0104, 1); // stop write_comm_pipe_u32 (&requests, 0x0103, 1); // unpause if (cdrom_playing && isaudiotrack (last_play_pos)) { write_comm_pipe_u32 (&requests, 0x0103, 1); // unpause write_comm_pipe_u32 (&requests, 0x0110, 0); // play write_comm_pipe_u32 (&requests, last_play_pos, 0); write_comm_pipe_u32 (&requests, last_play_end, 0); write_comm_pipe_u32 (&requests, 0, 1); } cd_initialized = 1; } #endif void akiko_mute (int muted) { cdrom_muted = muted; if (unitnum >= 0) write_comm_pipe_u32 (&requests, 0x0105, 1); } fs-uae-2.2.3+dfsg/src/driveclick.cpp0000644000175000017500000003126312162366655017474 0ustar glaubitzglaubitz/* * UAE - The Un*x Amiga Emulator * * Drive Click Emulation Support Functions * * Copyright 2004 James Bagg, Toni Wilen */ #include "sysconfig.h" #include "sysdeps.h" #ifdef DRIVESOUND #include "uae.h" #include "options.h" #include "audio.h" #include "sounddep/sound.h" #include "zfile.h" #include "fsdb.h" #include "events.h" #include "driveclick.h" static struct drvsample drvs[4][DS_END]; static int freq = 44100; static int drv_starting[4], drv_spinning[4], drv_has_spun[4], drv_has_disk[4]; static int click_initialized, wave_initialized; #define DS_SHIFT 10 static int sample_step; static uae_s16 *clickbuffer; uae_s16 *decodewav (uae_u8 *s, int *lenp) { uae_s16 *dst; uae_u8 *src = s; int len; if (memcmp (s, "RIFF", 4)) return 0; if (memcmp (s + 8, "WAVE", 4)) return 0; s += 12; len = *lenp; while (s < src + len) { if (!memcmp (s, "fmt ", 4)) freq = s[8 + 4] | (s[8 + 5] << 8); if (!memcmp (s, "data", 4)) { s += 4; len = s[0] | (s[1] << 8) | (s[2] << 16) | (s[3] << 24); dst = xmalloc (uae_s16, len / 2); memcpy (dst, s + 4, len); *lenp = len / 2; return dst; } s += 8 + (s[4] | (s[5] << 8) | (s[6] << 16) | (s[7] << 24)); } return 0; } static int loadsample (TCHAR *path, struct drvsample *ds) { struct zfile *f; uae_u8 *buf; int size; TCHAR name[MAX_DPATH]; f = zfile_fopen (path, _T("rb"), ZFD_NORMAL); if (!f) { _tcscpy (name, path); _tcscat (name, _T(".wav")); f = zfile_fopen (name, _T("rb"), ZFD_NORMAL); if (!f) { write_log (_T("driveclick: can't open '%s' (or '%s')\n"), path, name); return 0; } } zfile_fseek (f, 0, SEEK_END); size = zfile_ftell (f); buf = xmalloc (uae_u8, size); zfile_fseek (f, 0, SEEK_SET); zfile_fread (buf, size, 1, f); zfile_fclose (f); ds->len = size; ds->p = decodewav (buf, &ds->len); xfree (buf); return 1; } static void freesample (struct drvsample *s) { xfree (s->p); s->p = 0; } static void processclicks (struct drvsample *ds) { unsigned int n = 0; unsigned int nClick = 0; for (n = 0; n < CLICK_TRACKS; n++) { ds->indexes[n] = 0; ds->lengths[n] = 0; } for(n = 0; n < ds->len; n++) { uae_s16 smp = ds->p[n]; if (smp > 0x6ff0 && nClick < CLICK_TRACKS) { ds->indexes[nClick] = n - 128; ds->lengths[nClick] = 2800; nClick ++; n += 3000; } } if (nClick == 0) { for(n = 0; n < CLICK_TRACKS; n++) { ds->indexes[n] = 0; ds->lengths[n] = ds->len; } } else { if (nClick == 1) { ds->lengths[0] = ds->len - ds->indexes[0]; for(n = 1; n < CLICK_TRACKS; n++) { ds->indexes[n] = ds->indexes[0]; ds->lengths[n] = ds->lengths[0]; } } else { for(n = nClick; n < CLICK_TRACKS; n++) { ds->indexes[n] = ds->indexes[nClick-1]; ds->lengths[n] = ds->lengths[nClick-1]; } } } } void driveclick_init (void) { int v, vv, i, j; TCHAR tmp[MAX_DPATH]; driveclick_fdrawcmd_detect (); driveclick_free (); vv = 0; for (i = 0; i < 4; i++) { struct floppyslot *fs = &currprefs.floppyslots[i]; for (j = 0; j < CLICK_TRACKS; j++) { drvs[i][DS_CLICK].indexes[j] = 0; drvs[i][DS_CLICK].lengths[j] = 0; } if (fs->dfxclick) { if (fs->dfxclick > 0) { v = 0; switch(fs->dfxclick) { case 1: if (driveclick_loadresource (drvs[i], fs->dfxclick)) v = 3; for (j = 0; j < CLICK_TRACKS; j++) drvs[i][DS_CLICK].lengths[j] = drvs[i][DS_CLICK].len; wave_initialized = 1; break; default: if (driveclick_fdrawcmd_open (fs->dfxclick - 2)) v = 1; break; } } else if (fs->dfxclick == -1) { TCHAR path2[MAX_DPATH]; wave_initialized = 1; for (j = 0; j < CLICK_TRACKS; j++) drvs[i][DS_CLICK].lengths[j] = drvs[i][DS_CLICK].len; get_plugin_path (path2, sizeof path2 / sizeof (TCHAR), _T("floppysounds")); _stprintf (tmp, _T("%sdrive_click_%s"), path2, fs->dfxclickexternal); v = loadsample (tmp, &drvs[i][DS_CLICK]); if (v) processclicks (&drvs[i][DS_CLICK]); _stprintf (tmp, _T("%sdrive_spin_%s"), path2, fs->dfxclickexternal); v += loadsample (tmp, &drvs[i][DS_SPIN]); _stprintf (tmp, _T("%sdrive_spinnd_%s"), path2, fs->dfxclickexternal); v += loadsample (tmp, &drvs[i][DS_SPINND]); _stprintf (tmp, _T("%sdrive_startup_%s"), path2, fs->dfxclickexternal); v += loadsample (tmp, &drvs[i][DS_START]); _stprintf (tmp, _T("%sdrive_snatch_%s"), path2, fs->dfxclickexternal); v += loadsample (tmp, &drvs[i][DS_SNATCH]); } if (v == 0) { int j; for (j = 0; j < DS_END; j++) freesample (&drvs[i][j]); fs->dfxclick = changed_prefs.floppyslots[i].dfxclick = 0; } else { vv++; } for (j = 0; j < DS_END; j++) drvs[i][j].len <<= DS_SHIFT; drvs[i][DS_CLICK].pos = drvs[i][DS_CLICK].len; drvs[i][DS_SNATCH].pos = drvs[i][DS_SNATCH].len; } } driveclick_reset (); if (vv > 0) click_initialized = 1; } void driveclick_reset (void) { xfree (clickbuffer); clickbuffer = NULL; if (!wave_initialized) return; clickbuffer = xmalloc (uae_s16, paula_sndbufsize / 2); sample_step = (freq << DS_SHIFT) / currprefs.sound_freq; } void driveclick_free (void) { int i, j; driveclick_fdrawcmd_close (0); driveclick_fdrawcmd_close (1); for (i = 0; i < 4; i++) { for (j = 0; j < DS_END; j++) freesample (&drvs[i][j]); drv_starting[i] = 0; drv_spinning[i] = 0; drv_has_spun[i] = 0; drv_has_disk[i] = 0; } memset (drvs, 0, sizeof (drvs)); click_initialized = 0; wave_initialized = 0; driveclick_reset (); } static int driveclick_active (void) { int i; for (i = 0; i < 4; i++) { if (currprefs.floppyslots[i].dfxclick) { if (drv_spinning[i] || drv_starting[i]) return 1; } } return 0; } static uae_s16 getsample (void) { uae_s32 smp = 0; int div = 0, i; for (i = 0; i < 4; i++) { if (currprefs.floppyslots[i].dfxclick) { struct drvsample *ds_start = &drvs[i][DS_START]; struct drvsample *ds_spin = drv_has_disk[i] ? &drvs[i][DS_SPIN] : &drvs[i][DS_SPINND]; struct drvsample *ds_click = &drvs[i][DS_CLICK]; struct drvsample *ds_snatch = &drvs[i][DS_SNATCH]; if (drv_spinning[i] || drv_starting[i]) { div++; if (drv_starting[i] && drv_has_spun[i]) { if (ds_start->p && ds_start->pos < ds_start->len) { smp = ds_start->p[ds_start->pos >> DS_SHIFT]; ds_start->pos += sample_step; } else { drv_starting[i] = 0; } } else if (drv_starting[i] && drv_has_spun[i] == 0) { if (ds_snatch->p && ds_snatch->pos < ds_snatch->len) { smp = ds_snatch->p[ds_snatch->pos >> DS_SHIFT]; ds_snatch->pos += sample_step; } else { drv_starting[i] = 0; ds_start->pos = ds_start->len; drv_has_spun[i] = 1; } } if (ds_spin->p && drv_starting[i] == 0) { if (ds_spin->pos >= ds_spin->len) ds_spin->pos -= ds_spin->len; smp = ds_spin->p[ds_spin->pos >> DS_SHIFT]; ds_spin->pos += sample_step; } } if (ds_click->p && ds_click->pos < ds_click->len) { smp += ds_click->p[ds_click->pos >> DS_SHIFT]; div++; ds_click->pos += sample_step; } } } if (!div) return 0; return smp / div; } static int clickcnt; static void mix (void) { int total = ((uae_u8*)paula_sndbufpt - (uae_u8*)paula_sndbuffer) / (get_audio_nativechannels (currprefs.sound_stereo) * 2); if (currprefs.dfxclickvolume > 0) { while (clickcnt < total) { clickbuffer[clickcnt++] = getsample () * (100 - currprefs.dfxclickvolume) / 100; } } else { while (clickcnt < total) { clickbuffer[clickcnt++] = getsample (); } } } STATIC_INLINE uae_s16 limit (uae_s32 v) { if (v < -32768) v = -32768; if (v > 32767) v = 32767; return v; } void driveclick_mix (uae_s16 *sndbuffer, int size, int channelmask) { int i; if (!wave_initialized) return; mix (); clickcnt = 0; switch (get_audio_nativechannels (currprefs.sound_stereo)) { case 6: for (i = 0; i < size / 6; i++) { uae_s16 s = clickbuffer[i]; if (channelmask & 1) sndbuffer[0] = limit (((sndbuffer[0] + s) * 2) / 3); else sndbuffer[0] = sndbuffer[0] * 2 / 3; if (channelmask & 2) sndbuffer[1] = limit (((sndbuffer[1] + s) * 2) / 3); else sndbuffer[1] = sndbuffer[1] * 2 / 3; if (channelmask & 4) sndbuffer[2] = limit (((sndbuffer[2] + s) * 2) / 3); else sndbuffer[2] = sndbuffer[2] * 2 / 3; if (channelmask & 8) sndbuffer[3] = limit (((sndbuffer[3] + s) * 2) / 3); else sndbuffer[3] = sndbuffer[3] * 2 / 3; if (channelmask & 16) sndbuffer[4] = limit (((sndbuffer[4] + s) * 2) / 3); else sndbuffer[4] = sndbuffer[4] * 2 / 3; if (channelmask & 32) sndbuffer[5] = limit (((sndbuffer[5] + s) * 2) / 3); else sndbuffer[5] = sndbuffer[5] * 2 / 3; sndbuffer += 6; } break; case 4: for (i = 0; i < size / 4; i++) { uae_s16 s = clickbuffer[i]; if (channelmask & 1) sndbuffer[0] = limit (((sndbuffer[0] + s) * 2) / 3); else sndbuffer[0] = sndbuffer[0] * 2 / 3; if (channelmask & 2) sndbuffer[1] = limit (((sndbuffer[1] + s) * 2) / 3); else sndbuffer[1] = sndbuffer[1] * 2 / 3; if (channelmask & 4) sndbuffer[2] = limit (((sndbuffer[2] + s) * 2) / 3); else sndbuffer[2] = sndbuffer[2] * 2 / 3; if (channelmask & 8) sndbuffer[3] = limit (((sndbuffer[3] + s) * 2) / 3); else sndbuffer[3] = sndbuffer[3] * 2 / 3; sndbuffer += 4; } break; case 2: for (i = 0; i < size / 2; i++) { uae_s16 s = clickbuffer[i]; if (channelmask & 1) sndbuffer[0] = limit (((sndbuffer[0] + s) * 2) / 3); else sndbuffer[0] = sndbuffer[0] * 2 / 3; if (channelmask & 2) sndbuffer[1] = limit (((sndbuffer[1] + s) * 2) / 3); else sndbuffer[1] = sndbuffer[1] * 2 / 3; sndbuffer += 2; } break; case 1: for (i = 0; i < size; i++) { uae_s16 s = clickbuffer[i]; if (channelmask & 1) sndbuffer[0] = limit (((sndbuffer[0] + s) * 2) / 3); else sndbuffer[0] = sndbuffer[0] * 2 / 3; sndbuffer++; } break; } } static void dr_audio_activate (void) { if (audio_activate ()) clickcnt = 0; } void driveclick_click (int drive, int cyl) { static int prevcyl[4]; if (!click_initialized) return; if (!currprefs.floppyslots[drive].dfxclick) return; if (prevcyl[drive] == 0 && cyl == 0) // "noclick" check return; dr_audio_activate (); prevcyl[drive] = cyl; if (!wave_initialized) { driveclick_fdrawcmd_seek (currprefs.floppyslots[drive].dfxclick - 2, cyl); return; } mix (); drvs[drive][DS_CLICK].pos = drvs[drive][DS_CLICK].indexes[cyl] << DS_SHIFT; drvs[drive][DS_CLICK].len = (drvs[drive][DS_CLICK].indexes[cyl] + (drvs[drive][DS_CLICK].lengths[cyl] / 2)) << DS_SHIFT; } void driveclick_motor (int drive, int running) { if (!click_initialized) return; if (!currprefs.floppyslots[drive].dfxclick) return; if (!wave_initialized) { driveclick_fdrawcmd_motor (currprefs.floppyslots[drive].dfxclick - 2, running); return; } mix (); if (running == 0) { drv_starting[drive] = 0; drv_spinning[drive] = 0; } else { if (drv_spinning[drive] == 0) { dr_audio_activate(); drv_starting[drive] = 1; drv_spinning[drive] = 1; if (drv_has_disk[drive] && drv_has_spun[drive] == 0 && drvs[drive][DS_SNATCH].pos >= drvs[drive][DS_SNATCH].len) drvs[drive][DS_SNATCH].pos = 0; if (running == 2) drvs[drive][DS_START].pos = 0; drvs[drive][DS_SPIN].pos = 0; } } } void driveclick_insert (int drive, int eject) { if (!click_initialized) return; if (!wave_initialized) return; if (!currprefs.floppyslots[drive].dfxclick) return; if (eject) drv_has_spun[drive] = 0; if (drv_has_disk[drive] == 0 && !eject) dr_audio_activate (); drv_has_disk[drive] = !eject; } void driveclick_check_prefs (void) { int i; if (!config_changed) return; driveclick_fdrawcmd_vsync (); if (driveclick_active ()) dr_audio_activate (); if (currprefs.dfxclickvolume != changed_prefs.dfxclickvolume || currprefs.floppyslots[0].dfxclick != changed_prefs.floppyslots[0].dfxclick || currprefs.floppyslots[1].dfxclick != changed_prefs.floppyslots[1].dfxclick || currprefs.floppyslots[2].dfxclick != changed_prefs.floppyslots[2].dfxclick || currprefs.floppyslots[3].dfxclick != changed_prefs.floppyslots[3].dfxclick || _tcscmp (currprefs.floppyslots[0].dfxclickexternal, changed_prefs.floppyslots[0].dfxclickexternal) || _tcscmp (currprefs.floppyslots[1].dfxclickexternal, changed_prefs.floppyslots[1].dfxclickexternal) || _tcscmp (currprefs.floppyslots[2].dfxclickexternal, changed_prefs.floppyslots[2].dfxclickexternal) || _tcscmp (currprefs.floppyslots[3].dfxclickexternal, changed_prefs.floppyslots[3].dfxclickexternal)) { currprefs.dfxclickvolume = changed_prefs.dfxclickvolume; for (i = 0; i < 4; i++) { currprefs.floppyslots[i].dfxclick = changed_prefs.floppyslots[i].dfxclick; _tcscpy (currprefs.floppyslots[i].dfxclickexternal, changed_prefs.floppyslots[i].dfxclickexternal); } driveclick_init (); } } #endif fs-uae-2.2.3+dfsg/src/blkdev_cdimage.cpp0000644000175000017500000012673312162366655020304 0ustar glaubitzglaubitz/* * UAE * * CD image file support * * - iso (2048/2352 block size) * - cue/bin, cue/bin/wav, cue/bin/mp3 * - ccd/img and ccd/img/sub * * Copyright 2010 Toni Wilen * */ #include "sysconfig.h" #include "sysdeps.h" #include #include "options.h" #include "blkdev.h" #include "zfile.h" #include "gui.h" #include "fsdb.h" #include "threaddep/thread.h" #include "scsidev.h" #include "mp3decoder.h" #include "cda_play.h" #include "uae/memory.h" #ifdef RETROPLATFORM #include "rp.h" #endif #define FLAC__NO_DLL #include "FLAC/stream_decoder.h" #define scsi_log write_log #define CDDA_BUFFERS 12 enum audenc { AUDENC_NONE, AUDENC_PCM, AUDENC_MP3, AUDENC_FLAC }; struct cdtoc { struct zfile *handle; uae_s64 offset; uae_u8 *data; struct zfile *subhandle; int suboffset; uae_u8 *subdata; uae_s64 filesize; TCHAR *fname; int address; uae_u8 adr, ctrl; int track; int size; int skipsize; // bytes to skip after each block audenc enctype; int writeoffset; int subcode; }; struct cdunit { bool enabled; bool open; uae_u8 buffer[2352]; struct cdtoc toc[102]; int tracks; uae_u64 cdsize; int blocksize; int cdda_play_state; int cdda_play; int cdda_paused; int cdda_volume[2]; int cdda_scan; int cd_last_pos; int cdda_start, cdda_end; play_subchannel_callback cdda_subfunc; play_status_callback cdda_statusfunc; int cdda_delay, cdda_delay_frames; int imagechange; TCHAR newfile[MAX_DPATH]; uae_sem_t sub_sem; struct device_info di; }; static struct cdunit cdunits[MAX_TOTAL_SCSI_DEVICES]; static int bus_open; static volatile int cdimage_unpack_thread, cdimage_unpack_active; static smp_comm_pipe unpack_pipe; static struct cdunit *unitisopen (int unitnum) { struct cdunit *cdu = &cdunits[unitnum]; if (cdu->open) return cdu; return NULL; } static struct cdtoc *findtoc (struct cdunit *cdu, int *sectorp) { int i; int sector; if (*sectorp < 0) return NULL; sector = *sectorp; for (i = 0; i <= cdu->tracks; i++) { struct cdtoc *t = &cdu->toc[i]; if (t->address > sector) { if (i == 0) { *sectorp = 0; return t; } t--; sector -= t->address; *sectorp = sector; return t; } } return NULL; } // WOHOO, library that supports virtual file access functions. Perfect! static void flac_metadata_callback (const FLAC__StreamDecoder *decoder, const FLAC__StreamMetadata *metadata, void *client_data) { struct cdtoc *t = (struct cdtoc*)client_data; if (t->data) return; if(metadata->type == FLAC__METADATA_TYPE_STREAMINFO) { t->filesize = metadata->data.stream_info.total_samples * (metadata->data.stream_info.bits_per_sample / 8) * metadata->data.stream_info.channels; } } static void flac_error_callback (const FLAC__StreamDecoder *decoder, FLAC__StreamDecoderErrorStatus status, void *client_data) { return; } static FLAC__StreamDecoderWriteStatus flac_write_callback (const FLAC__StreamDecoder *decoder, const FLAC__Frame *frame, const FLAC__int32 * const buffer[], void *client_data) { struct cdtoc *t = (struct cdtoc*)client_data; uae_u16 *p = (uae_u16*)(t->data + t->writeoffset); int size = 4; for (int i = 0; i < frame->header.blocksize && t->writeoffset < t->filesize - size; i++, t->writeoffset += size) { *p++ = (FLAC__int16)buffer[0][i]; *p++ = (FLAC__int16)buffer[1][i]; } return FLAC__STREAM_DECODER_WRITE_STATUS_CONTINUE; } static FLAC__StreamDecoderReadStatus file_read_callback (const FLAC__StreamDecoder *decoder, FLAC__byte buffer[], size_t *bytes, void *client_data) { struct cdtoc *t = (struct cdtoc*)client_data; if (zfile_ftell (t->handle) >= zfile_size (t->handle)) return FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM; return zfile_fread (buffer, *bytes, 1, t->handle) ? FLAC__STREAM_DECODER_READ_STATUS_CONTINUE : FLAC__STREAM_DECODER_READ_STATUS_ABORT; } static FLAC__StreamDecoderSeekStatus file_seek_callback (const FLAC__StreamDecoder *decoder, FLAC__uint64 absolute_byte_offset, void *client_data) { struct cdtoc *t = (struct cdtoc*)client_data; zfile_fseek (t->handle, absolute_byte_offset, SEEK_SET); return FLAC__STREAM_DECODER_SEEK_STATUS_OK; } static FLAC__StreamDecoderTellStatus file_tell_callback (const FLAC__StreamDecoder *decoder, FLAC__uint64 *absolute_byte_offset, void *client_data) { struct cdtoc *t = (struct cdtoc*)client_data; *absolute_byte_offset = zfile_ftell (t->handle); return FLAC__STREAM_DECODER_TELL_STATUS_OK; } static FLAC__StreamDecoderLengthStatus file_len_callback (const FLAC__StreamDecoder *decoder, FLAC__uint64 *stream_length, void *client_data) { struct cdtoc *t = (struct cdtoc*)client_data; *stream_length = zfile_size (t->handle); return FLAC__STREAM_DECODER_LENGTH_STATUS_OK; } static FLAC__bool file_eof_callback (const FLAC__StreamDecoder *decoder, void *client_data) { struct cdtoc *t = (struct cdtoc*)client_data; return zfile_ftell (t->handle) >= zfile_size (t->handle); } static void flac_get_size (struct cdtoc *t) { FLAC__StreamDecoder *decoder = FLAC__stream_decoder_new (); if (decoder) { FLAC__stream_decoder_set_md5_checking (decoder, false); int init_status = FLAC__stream_decoder_init_stream (decoder, &file_read_callback, &file_seek_callback, &file_tell_callback, &file_len_callback, &file_eof_callback, &flac_write_callback, &flac_metadata_callback, &flac_error_callback, t); FLAC__stream_decoder_process_until_end_of_metadata (decoder); FLAC__stream_decoder_delete (decoder); } } static uae_u8 *flac_get_data (struct cdtoc *t) { write_log (_T("FLAC: unpacking '%s'..\n"), zfile_getname (t->handle)); t->writeoffset = 0; FLAC__StreamDecoder *decoder = FLAC__stream_decoder_new (); if (decoder) { FLAC__stream_decoder_set_md5_checking (decoder, false); int init_status = FLAC__stream_decoder_init_stream (decoder, &file_read_callback, &file_seek_callback, &file_tell_callback, &file_len_callback, &file_eof_callback, &flac_write_callback, &flac_metadata_callback, &flac_error_callback, t); FLAC__stream_decoder_process_until_end_of_stream (decoder); FLAC__stream_decoder_delete (decoder); write_log (_T("FLAC: %s unpacked\n"), zfile_getname (t->handle)); } return t->data; } void sub_to_interleaved (const uae_u8 *s, uae_u8 *d) { for (int i = 0; i < 8 * 12; i ++) { int dmask = 0x80; int smask = 1 << (7 - (i & 7)); (*d) = 0; for (int j = 0; j < 8; j++) { (*d) |= (s[(i / 8) + j * 12] & smask) ? dmask : 0; dmask >>= 1; } d++; } } void sub_to_deinterleaved (const uae_u8 *s, uae_u8 *d) { for (int i = 0; i < 8 * 12; i ++) { int dmask = 0x80; int smask = 1 << (7 - (i / 12)); (*d) = 0; for (int j = 0; j < 8; j++) { (*d) |= (s[(i % 12) * 8 + j] & smask) ? dmask : 0; dmask >>= 1; } d++; } } static int getsub_deinterleaved (uae_u8 *dst, struct cdunit *cdu, struct cdtoc *t, int sector) { int ret = 0; uae_sem_wait (&cdu->sub_sem); if (t->subcode) { if (t->subhandle) { int offset = 0; int totalsize = SUB_CHANNEL_SIZE; if (t->skipsize) { totalsize += t->size; offset = t->size; } zfile_fseek (t->subhandle, (uae_u64)sector * totalsize + t->suboffset + offset, SEEK_SET); if (zfile_fread (dst, SUB_CHANNEL_SIZE, 1, t->subhandle) > 0) ret = t->subcode; } else { memcpy (dst, t->subdata + sector * SUB_CHANNEL_SIZE + t->suboffset, SUB_CHANNEL_SIZE); ret = t->subcode; } } if (!ret) { memset (dst, 0, SUB_CHANNEL_SIZE); // regenerate Q-subchannel uae_u8 *s = dst + 12; s[0] = (t->ctrl << 4) | (t->adr << 0); s[1] = tobcd (t - &cdu->toc[0] + 1); s[2] = tobcd (1); int msf = lsn2msf (sector); tolongbcd (s + 7, msf); msf = lsn2msf (sector - t->address - 150); tolongbcd (s + 3, msf); ret = 2; } if (ret == 1) { uae_u8 tmp[SUB_CHANNEL_SIZE]; memcpy (tmp, dst, SUB_CHANNEL_SIZE); sub_to_deinterleaved (tmp, dst); ret = 2; } uae_sem_post (&cdu->sub_sem); return ret; } static void dosub (struct cdunit *cdu, uae_u8 *subbuf) { uae_u8 subbuf2[SUB_CHANNEL_SIZE]; if (!cdu->cdda_subfunc) return; if (!subbuf) { memset (subbuf2, 0, sizeof subbuf2); cdu->cdda_subfunc (subbuf2, 1); return; } sub_to_interleaved (subbuf, subbuf2); cdu->cdda_subfunc (subbuf2, 1); } static int setstate (struct cdunit *cdu, int state) { cdu->cdda_play_state = state; if (cdu->cdda_statusfunc) return cdu->cdda_statusfunc (cdu->cdda_play_state); return 0; } static void *cdda_unpack_func (void *v) { cdimage_unpack_thread = 1; mp3decoder *mp3dec = NULL; for (;;) { uae_u32 cduidx = read_comm_pipe_u32_blocking (&unpack_pipe); if (cdimage_unpack_thread == 0) break; uae_u32 tocidx = read_comm_pipe_u32_blocking (&unpack_pipe); struct cdunit *cdu = &cdunits[cduidx]; struct cdtoc *t = &cdu->toc[tocidx]; if (t->handle) { // force unpack if handle points to delayed zipped file uae_s64 pos = zfile_ftell (t->handle); zfile_fseek (t->handle, -1, SEEK_END); uae_u8 b; zfile_fread (&b, 1, 1, t->handle); zfile_fseek (t->handle, pos, SEEK_SET); if (!t->data && (t->enctype == AUDENC_MP3 || t->enctype == AUDENC_FLAC)) { t->data = xcalloc (uae_u8, t->filesize + 2352); cdimage_unpack_active = 1; if (t->data) { if (t->enctype == AUDENC_MP3) { if (!mp3dec) { try { mp3dec = new mp3decoder(); } catch (exception) { }; } if (mp3dec) t->data = mp3dec->get (t->handle, t->data, t->filesize); } else if (t->enctype == AUDENC_FLAC) { flac_get_data (t); } } } } cdimage_unpack_active = 2; } delete mp3dec; cdimage_unpack_thread = -1; return 0; } static void *cdda_play_func (void *v) { int cdda_pos; int num_sectors = CDDA_BUFFERS; int quit = 0; int bufnum; int bufon[2]; int oldplay; int idleframes; bool foundsub; struct cdunit *cdu = (struct cdunit*)v; while (cdu->cdda_play == 0) Sleep (10); oldplay = -1; bufon[0] = bufon[1] = 0; bufnum = 0; cda_audio *cda = new cda_audio (num_sectors); while (cdu->cdda_play > 0) { if (oldplay != cdu->cdda_play) { struct cdtoc *t; int sector, diff; struct _timeb tb1, tb2; idleframes = 0; foundsub = false; _ftime (&tb1); cdda_pos = cdu->cdda_start; oldplay = cdu->cdda_play; sector = cdu->cd_last_pos = cdda_pos; t = findtoc (cdu, §or); if (!t) { write_log (_T("IMAGE CDDA: illegal sector number %d\n"), cdu->cdda_start); setstate (cdu, AUDIO_STATUS_PLAY_ERROR); } else { write_log (_T("IMAGE CDDA: playing from %d to %d, track %d ('%s', offset %lld, secoffset %d)\n"), cdu->cdda_start, cdu->cdda_end, t->track, t->fname, t->offset, sector); // do this even if audio is not compressed, t->handle also could be // compressed and we want to unpack it in background too while (cdimage_unpack_active == 1) Sleep (10); cdimage_unpack_active = 0; write_comm_pipe_u32 (&unpack_pipe, cdu - &cdunits[0], 0); write_comm_pipe_u32 (&unpack_pipe, t - &cdu->toc[0], 1); while (cdimage_unpack_active == 0) Sleep (10); } idleframes = cdu->cdda_delay_frames; while (cdu->cdda_paused && cdu->cdda_play > 0) { Sleep (10); idleframes = -1; } if (cdu->cdda_scan == 0) { // find possible P-subchannel=1 and fudge starting point so that // buggy CD32/CDTV software CD+G handling does not miss any frames bool seenindex = false; for (sector = cdda_pos - 200; sector < cdda_pos; sector++) { int sec = sector; t = findtoc (cdu, &sec); if (t) { uae_u8 subbuf[SUB_CHANNEL_SIZE]; getsub_deinterleaved (subbuf, cdu, t, sector); if (seenindex) { for (int i = 2 * SUB_ENTRY_SIZE; i < SUB_CHANNEL_SIZE; i++) { if (subbuf[i]) { // non-zero R-W subchannels int diff = cdda_pos - sector + 2; write_log (_T("-> CD+G start pos fudge -> %d (%d)\n"), sector, -diff); idleframes -= diff; cdda_pos = sector; break; } } } else if (subbuf[0] == 0xff) { // P == 1? seenindex = true; } } } } cdda_pos -= idleframes; _ftime (&tb2); diff = (tb2.time * (uae_s64)1000 + tb2.millitm) - (tb1.time * (uae_s64)1000 + tb1.millitm); diff -= cdu->cdda_delay; if (idleframes >= 0 && diff < 0 && cdu->cdda_play > 0) Sleep (-diff); setstate (cdu, AUDIO_STATUS_IN_PROGRESS); } cda->wait(bufnum); bufon[bufnum] = 0; if (!cdu->cdda_play) goto end; if (idleframes <= 0 && cdda_pos >= cdu->cdda_start && !isaudiotrack (&cdu->di.toc, cdda_pos)) { setstate (cdu, AUDIO_STATUS_PLAY_ERROR); write_log (_T("IMAGE CDDA: attempted to play data track %d\n"), cdda_pos); goto end; // data track? } if ((cdda_pos < cdu->cdda_end || cdu->cdda_end == 0xffffffff) && !cdu->cdda_paused && cdu->cdda_play > 0) { struct cdtoc *t; int sector, cnt; int dofinish = 0; gui_flicker_led (LED_CD, cdu->di.unitnum - 1, LED_CD_AUDIO); memset (cda->buffers[bufnum], 0, num_sectors * 2352); for (cnt = 0; cnt < num_sectors; cnt++) { uae_u8 *dst = cda->buffers[bufnum] + cnt * 2352; uae_u8 subbuf[SUB_CHANNEL_SIZE]; sector = cdda_pos; memset (subbuf, 0, SUB_CHANNEL_SIZE); t = findtoc (cdu, §or); if (t) { if (t->handle && !(t->ctrl & 4)) { int totalsize = t->size + t->skipsize; if ((t->enctype == AUDENC_MP3 || t->enctype == AUDENC_FLAC) && t->data) { if (t->filesize >= sector * totalsize + t->offset + t->size) memcpy (dst, t->data + sector * totalsize + t->offset, t->size); } else if (t->enctype == AUDENC_PCM) { if (sector * totalsize + t->offset + totalsize < t->filesize) { zfile_fseek (t->handle, (uae_u64)sector * totalsize + t->offset, SEEK_SET); zfile_fread (dst, t->size, 1, t->handle); } } } getsub_deinterleaved (subbuf, cdu, t, cdda_pos); } if (idleframes > 0) { idleframes--; memset (dst, 0, 2352); memset (subbuf, 0, SUB_CHANNEL_SIZE); } if (cdda_pos < cdu->cdda_start && cdu->cdda_scan == 0) memset (dst, 0, 2352); dosub (cdu, subbuf); if (cdu->cdda_scan) { cdda_pos += cdu->cdda_scan; if (cdda_pos < 0) cdda_pos = 0; } else { cdda_pos++; } if (cdda_pos - num_sectors < cdu->cdda_end && cdda_pos >= cdu->cdda_end) dofinish = 1; } if (idleframes <= 0) cdu->cd_last_pos = cdda_pos; bufon[bufnum] = 1; cda->setvolume (currprefs.sound_volume_cd >= 0 ? currprefs.sound_volume_cd : currprefs.sound_volume, cdu->cdda_volume[0], cdu->cdda_volume[1]); if (!cda->play (bufnum)) { setstate (cdu, AUDIO_STATUS_PLAY_ERROR); goto end; } if (dofinish) { setstate (cdu, AUDIO_STATUS_PLAY_COMPLETE); cdu->cdda_play = -1; cdda_pos = cdu->cdda_end + 1; } } if (bufon[0] == 0 && bufon[1] == 0) { while (cdu->cdda_paused && cdu->cdda_play == oldplay) Sleep (10); } bufnum = 1 - bufnum; } end: cda->wait (0); cda->wait (1); while (cdimage_unpack_active == 1) Sleep (10); delete cda; cdu->cdda_play = 0; write_log (_T("IMAGE CDDA: thread killed\n")); return NULL; } static void cdda_stop (struct cdunit *cdu) { if (cdu->cdda_play != 0) { cdu->cdda_play = -1; while (cdu->cdda_play) { Sleep (10); } } cdu->cdda_paused = 0; cdu->cdda_play_state = 0; } static int command_pause (int unitnum, int paused) { struct cdunit *cdu = unitisopen (unitnum); if (!cdu) return -1; int old = cdu->cdda_paused; cdu->cdda_paused = paused; return old; } static int command_stop (int unitnum) { struct cdunit *cdu = unitisopen (unitnum); if (!cdu) return 0; cdda_stop (cdu); return 1; } static int command_play (int unitnum, int startlsn, int endlsn, int scan, play_status_callback statusfunc, play_subchannel_callback subfunc) { struct cdunit *cdu = unitisopen (unitnum); if (!cdu) return 0; cdu->cd_last_pos = startlsn; cdu->cdda_start = startlsn; cdu->cdda_end = endlsn; cdu->cdda_subfunc = subfunc; cdu->cdda_statusfunc = statusfunc; cdu->cdda_scan = scan > 0 ? 10 : (scan < 0 ? 10 : 0); cdu->cdda_delay = setstate (cdu, -1); cdu->cdda_delay_frames = setstate (cdu, -2); setstate (cdu, AUDIO_STATUS_NOT_SUPPORTED); if (!isaudiotrack (&cdu->di.toc, startlsn)) { setstate (cdu, AUDIO_STATUS_PLAY_ERROR); return 0; } if (!cdu->cdda_play) uae_start_thread (_T("cdimage_cdda_play"), cdda_play_func, cdu, NULL); cdu->cdda_play++; return 1; } static int command_qcode (int unitnum, uae_u8 *buf, int sector) { struct cdunit *cdu = unitisopen (unitnum); if (!cdu) return 0; uae_u8 subbuf[SUB_CHANNEL_SIZE]; uae_u8 *p; int trk; int pos; int status; memset (buf, 0, SUBQ_SIZE); p = buf; status = cdu->cdda_play_state; if (cdu->cdda_play > 0 && cdu->cdda_paused) status = AUDIO_STATUS_PAUSED; if (sector < 0) pos = cdu->cd_last_pos; else pos = sector; p[1] = status; p[3] = 12; p = buf + 4; struct cdtoc *td = NULL; for (trk = 0; trk <= cdu->tracks; trk++) { td = &cdu->toc[trk]; if (pos < td->address) { if (trk > 0) td--; break; } if (pos >= td->address && pos < td[1].address) break; } if (!td) return 0; getsub_deinterleaved (subbuf, cdu, td, pos); memcpy (p, subbuf + 12, 12); // write_log (_T("%6d %02x.%02x.%02x.%02x.%02x.%02x.%02x.%02x.%02x.%02x.%02x.%02x\n"), // pos, p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7], p[8], p[9], p[10], p[11]); return 1; } static uae_u32 command_volume (int unitnum, uae_u16 volume_left, uae_u16 volume_right) { struct cdunit *cdu = unitisopen (unitnum); if (!cdu) return -1; uae_u32 old = (cdu->cdda_volume[1] << 16) | (cdu->cdda_volume[0] << 0); cdu->cdda_volume[0] = volume_left; cdu->cdda_volume[1] = volume_right; return old; } extern void encode_l2 (uae_u8 *p, int address); static int command_rawread (int unitnum, uae_u8 *data, int sector, int size, int sectorsize, uae_u32 extra) { int ret = 0; struct cdunit *cdu = unitisopen (unitnum); if (!cdu) return 0; int asector = sector; struct cdtoc *t = findtoc (cdu, §or); int ssize = t->size + t->skipsize; if (!t || t->handle == NULL) goto end; cdda_stop (cdu); if (sectorsize > 0) { if (sectorsize == 2352 && t->size == 2048) { // 2048 -> 2352 while (size-- > 0) { memset (data, 0, 16); zfile_fseek (t->handle, t->offset + (uae_u64)sector * ssize, SEEK_SET); zfile_fread (data + 16, t->size, 1, t->handle); encode_l2 (data, sector + 150); sector++; asector++; data += sectorsize; ret += sectorsize; } } else if (sectorsize == 2048 && t->size == 2352) { // 2352 -> 2048 while (size-- > 0) { uae_u8 b = 0; zfile_fseek (t->handle, t->offset + (uae_u64)sector * ssize + 15, SEEK_SET); zfile_fread (&b, 1, 1, t->handle); if (b == 2) // MODE2? zfile_fseek (t->handle, t->offset + (uae_u64)sector * ssize + 24, SEEK_SET); zfile_fread (data, sectorsize, 1, t->handle); sector++; asector++; data += sectorsize; ret += sectorsize; } } else if (sectorsize == 2336 && t->size == 2352) { // 2352 -> 2336 while (size-- > 0) { uae_u8 b = 0; zfile_fseek (t->handle, t->offset + (uae_u64)sector * ssize + 15, SEEK_SET); zfile_fread (&b, 1, 1, t->handle); if (b != 2 && b != 0) // MODE0 or MODE2 only allowed return 0; zfile_fread (data, sectorsize, 1, t->handle); sector++; asector++; data += sectorsize; ret += sectorsize; } } else if (sectorsize == t->size) { // no change zfile_fseek (t->handle, t->offset + (uae_u64)sector * ssize, SEEK_SET); zfile_fread (data, sectorsize, size, t->handle); sector += size; asector += size; ret = size; } cdu->cd_last_pos = asector; } else { uae_u8 sectortype = extra >> 16; uae_u8 cmd9 = extra >> 8; int sync = (cmd9 >> 7) & 1; int headercodes = (cmd9 >> 5) & 3; int userdata = (cmd9 >> 4) & 1; int edcecc = (cmd9 >> 3) & 1; int errorfield = (cmd9 >> 1) & 3; uae_u8 subs = extra & 7; if (subs != 0 && subs != 1 && subs != 2 && subs != 4) { ret = -1; goto end; } if (isaudiotrack (&cdu->di.toc, sector)) { if (sectortype != 0 && sectortype != 1) { ret = -2; goto end; } if (t->size != 2352) { ret = -1; goto end; } for (int i = 0; i < size; i++) { zfile_fseek (t->handle, t->offset + (uae_u64)sector * ssize, SEEK_SET); zfile_fread (data, t->size, 1, t->handle); uae_u8 *p = data + t->size; if (subs) { uae_u8 subdata[SUB_CHANNEL_SIZE]; getsub_deinterleaved (subdata, cdu, t, sector); if (subs == 4) { // all, de-interleaved memcpy (p, subdata, SUB_CHANNEL_SIZE); p += SUB_CHANNEL_SIZE; } else if (subs == 2) { // q-only memcpy (p, subdata + SUB_ENTRY_SIZE, SUB_ENTRY_SIZE); p += SUB_ENTRY_SIZE; } else if (subs == 1) { // all, interleaved sub_to_interleaved (subdata, p); p += SUB_CHANNEL_SIZE; } } ret += p - data; data = p; sector++; } } } end: return ret; } // this only supports 2048 byte sectors static int command_read (int unitnum, uae_u8 *data, int sector, int size) { struct cdunit *cdu = unitisopen (unitnum); if (!cdu) return 0; struct cdtoc *t = findtoc (cdu, §or); int ssize = t->size + t->skipsize; if (!t || t->handle == NULL) return 0; cdda_stop (cdu); if (t->size == 2048) { zfile_fseek (t->handle, t->offset + (uae_u64)sector * ssize, SEEK_SET); zfile_fread (data, size, 2048, t->handle); sector += size; } else { while (size-- > 0) { if (t->size == 2352) { uae_u8 b = 0; zfile_fseek (t->handle, t->offset + (uae_u64)sector * ssize + 15, SEEK_SET); zfile_fread (&b, 1, 1, t->handle); if (b == 2) // MODE2? zfile_fseek (t->handle, t->offset + (uae_u64)sector * ssize + 24, SEEK_SET); } else { zfile_fseek (t->handle, t->offset + (uae_u64)sector * ssize + 16, SEEK_SET); } zfile_fread (data, 1, 2048, t->handle); data += 2048; sector++; } } cdu->cd_last_pos = sector; return 1; } static int command_toc (int unitnum, struct cd_toc_head *th) { struct cdunit *cdu = unitisopen (unitnum); if (!cdu) return 0; int i; memset (&cdu->di.toc, 0, sizeof (struct cd_toc_head)); if (!cdu->tracks) return 0; memset (th, 0, sizeof (struct cd_toc_head)); struct cd_toc *toc = &th->toc[0]; th->first_track = 1; th->last_track = cdu->tracks; th->points = cdu->tracks + 3; th->tracks = cdu->tracks; th->firstaddress = 0; th->lastaddress = cdu->toc[cdu->tracks].address; toc->adr = 1; toc->point = 0xa0; toc->track = th->first_track; toc++; th->first_track_offset = 1; for (i = 0; i < cdu->tracks; i++) { toc->adr = cdu->toc[i].adr; toc->control = cdu->toc[i].ctrl; toc->track = i + 1; toc->point = i + 1; toc->paddress = cdu->toc[i].address; toc++; } th->last_track_offset = cdu->tracks; toc->adr = 1; toc->point = 0xa1; toc->track = th->last_track; toc++; toc->adr = 1; toc->point = 0xa2; toc->paddress = th->lastaddress; toc++; memcpy (&cdu->di.toc, th, sizeof (struct cd_toc_head)); return 1; } static void skipspace (TCHAR **s) { while (_istspace (**s)) (*s)++; } static void skipnspace (TCHAR **s) { while (!_istspace (**s)) (*s)++; } static TCHAR *nextstring (TCHAR **sp) { TCHAR *s; TCHAR *out = NULL; skipspace (sp); s = *sp; if (*s == '\"') { s++; out = s; while (*s && *s != '\"') s++; *s++ = 0; } else if (*s) { out = s; skipnspace (&s); *s++ = 0; } *sp = s; return out; } static int readval (const TCHAR *s) { int base = 10; TCHAR *endptr; if (s[0] == '0' && _totupper (s[1]) == 'X') s += 2, base = 16; return _tcstol (s, &endptr, base); } #define MEDIA_DESCRIPTOR "MEDIA DESCRIPTOR" /* MDS spec structures from cdemu */ #define MDS_MEDIUM_CD 0x00 /* CD-ROM */ #define MDS_MEDIUM_CD_R 0x01 /* CD-R */ #define MDS_MEDIUM_CD_RW 0x02 /* CD-RW */ #define MDS_MEDIUM_DVD 0x10 /* DVD-ROM */ #define MDS_MEDIUM_DVD_MINUS_R 0x12 /* DVD-R */ #define MDS_TRACKMODE_UNKNOWN 0x00 #define MDS_TRACKMODE_AUDIO 0xA9 /* sector size = 2352 */ #define MDS_TRACKMODE_MODE1 0xAA /* sector size = 2048 */ #define MDS_TRACKMODE_MODE2 0xAB /* sector size = 2336 */ #define MDS_TRACKMODE_MODE2_FORM1 0xAC /* sector size = 2048 */ #define MDS_TRACKMODE_MODE2_FORM2 0xAD /* sector size = 2324 (+4) */ #define MDS_SUBCHAN_NONE 0x00 /* no subchannel */ #define MDS_SUBCHAN_PW_INTERLEAVED 0x08 /* 96-byte PW subchannel, interleaved */ #define MDS_POINT_TRACK_FIRST 0xA0 /* info about first track */ #define MDS_POINT_TRACK_LAST 0xA1 /* info about last track */ #define MDS_POINT_TRACK_LEADOUT 0xA2 /* info about lead-out */ #pragma pack(1) typedef struct { uae_u8 signature[16]; /* "MEDIA DESCRIPTOR" */ uae_u8 version[2]; /* Version ? */ uae_u16 medium_type; /* Medium type */ uae_u16 num_sessions; /* Number of sessions */ uae_u16 __dummy1__[2]; /* Wish I knew... */ uae_u16 bca_len; /* Length of BCA data (DVD-ROM) */ uae_u32 __dummy2__[2]; uae_u32 bca_data_offset; /* Offset to BCA data (DVD-ROM) */ uae_u32 __dummy3__[6]; /* Probably more offsets */ uae_u32 disc_structures_offset; /* Offset to disc structures */ uae_u32 __dummy4__[3]; /* Probably more offsets */ uae_u32 sessions_blocks_offset; /* Offset to session blocks */ uae_u32 dpm_blocks_offset; /* offset to DPM data blocks */ } MDS_Header; /* length: 88 bytes */ typedef struct { uae_s32 session_start; /* Session's start address */ uae_s32 session_end; /* Session's end address */ uae_u16 session_number; /* (Unknown) */ uae_u8 num_all_blocks; /* Number of all data blocks. */ uae_u8 num_nontrack_blocks; /* Number of lead-in data blocks */ uae_u16 first_track; /* Total number of sessions in image? */ uae_u16 last_track; /* Number of regular track data blocks. */ uae_u32 __dummy2__; /* (unknown) */ uae_u32 tracks_blocks_offset; /* Offset of lead-in+regular track data blocks. */ } MDS_SessionBlock; /* length: 24 bytes */ typedef struct { uae_u8 mode; /* Track mode */ uae_u8 subchannel; /* Subchannel mode */ uae_u8 adr_ctl; /* Adr/Ctl */ uae_u8 __dummy2__; /* Track flags? */ uae_u8 point; /* Track number. (>0x99 is lead-in track) */ uae_u32 __dummy3__; uae_u8 min; /* Min */ uae_u8 sec; /* Sec */ uae_u8 frame; /* Frame */ uae_u32 extra_offset; /* Start offset of this track's extra block. */ uae_u16 sector_size; /* Sector size. */ uae_u8 __dummy4__[18]; uae_u32 start_sector; /* Track start sector (PLBA). */ uae_u64 start_offset; /* Track start offset. */ uae_u8 session; /* Session or index? */ uae_u8 __dummy5__[3]; uae_u32 footer_offset; /* Start offset of footer. */ uae_u8 __dummy6__[24]; } MDS_TrackBlock; /* length: 80 bytes */ typedef struct { uae_u32 pregap; /* Number of sectors in pregap. */ uae_u32 length; /* Number of sectors in track. */ } MDS_TrackExtraBlock; /* length: 8 bytes */ typedef struct { uae_u32 filename_offset; /* Start offset of image filename. */ uae_u32 widechar_filename; /* Seems to be set to 1 if widechar filename is used */ uae_u32 __dummy1__; uae_u32 __dummy2__; } MDS_Footer; /* length: 16 bytes */ #pragma pack() static int parsemds (struct cdunit *cdu, struct zfile *zmds, const TCHAR *img) { MDS_Header *head; struct cdtoc *t; uae_u8 *mds = NULL; uae_u64 size; MDS_SessionBlock *sb; write_log (_T("MDS TOC: '%s'\n"), img); size = zfile_size (zmds); mds = xmalloc (uae_u8, size); if (!mds) goto end; if (zfile_fread (mds, size, 1, zmds) != 1) goto end; head = (MDS_Header*)mds; if (!memcmp (&head, MEDIA_DESCRIPTOR, strlen (MEDIA_DESCRIPTOR))) goto end; if (head->version[0] != 1) { write_log (_T("unsupported MDS version %d, only v.1 supported\n"), head->version[0]); goto end; } sb = (MDS_SessionBlock*)(mds + head->sessions_blocks_offset); cdu->tracks = sb->last_track - sb->first_track + 1; for (int i = 0; i < sb->num_all_blocks; i++) { MDS_TrackBlock *tb = (MDS_TrackBlock*)(mds + sb->tracks_blocks_offset + i * sizeof (MDS_TrackBlock)); int point = tb->point; int tracknum = -1; if (point == 0xa2) tracknum = cdu->tracks; else if (point >= 1 && point <= 99) tracknum = point - 1; if (tracknum >= 0) { MDS_Footer *footer = tb->footer_offset == 0 ? NULL : (MDS_Footer*)(mds + tb->footer_offset); MDS_TrackExtraBlock *teb = tb->extra_offset == 0 ? NULL : (MDS_TrackExtraBlock*)(mds + tb->extra_offset); t = &cdu->toc[tracknum]; t->adr = tb->adr_ctl >> 4; t->ctrl = tb->adr_ctl & 15; if (point == 0xa2) t->address = sb->session_end; else t->address = tb->start_sector; t->track = point; t->offset = tb->start_offset; t->size = tb->sector_size; if (point >= 100) continue; if (footer) { TCHAR *fname = NULL; if (footer->widechar_filename == 0) fname = au ((char*)(mds + footer->filename_offset)); else fname = my_strdup ((TCHAR*)(mds + footer->filename_offset)); if (fname[0] == '*' && fname[1] == '.') { TCHAR newname[MAX_DPATH]; _tcscpy (newname, img); TCHAR *ext = _tcsrchr (newname, '.'); if (ext) _tcscpy (ext, fname + 1); xfree (fname); fname = my_strdup (newname); } t->handle = zfile_fopen (fname, _T("rb"), ZFD_NORMAL); t->fname = my_strdup (fname); if (t->handle) t->filesize = zfile_size (t->handle); } if (tb->subchannel && t->handle) { t->suboffset = t->size; t->subcode = 1; // interleaved t->subhandle = zfile_dup (t->handle); t->skipsize = SUB_CHANNEL_SIZE; t->size -= SUB_CHANNEL_SIZE; } if ((t->ctrl & 0x0c) != 4) t->enctype = AUDENC_PCM; } } end: xfree (mds); return cdu->tracks; } static int parseccd (struct cdunit *cdu, struct zfile *zcue, const TCHAR *img) { int mode; int num, tracknum, trackmode; int adr, control, lba; bool gotlba; struct cdtoc *t; struct zfile *zimg, *zsub; TCHAR fname[MAX_DPATH]; write_log (_T("CCD TOC: '%s'\n"), img); _tcscpy (fname, img); TCHAR *ext = _tcsrchr (fname, '.'); if (ext) *ext = 0; _tcscat (fname, _T(".img")); zimg = zfile_fopen (fname, _T("rb"), ZFD_NORMAL); if (!zimg) { write_log (_T("CCD: can't open '%s'\n"), fname); return 0; } ext = _tcsrchr (fname, '.'); if (ext) *ext = 0; _tcscat (fname, _T(".sub")); zsub = zfile_fopen (fname, _T("rb"), ZFD_NORMAL); if (zsub) write_log (_T("CCD: '%s' detected\n"), fname); num = -1; mode = -1; for (;;) { TCHAR buf[MAX_DPATH], *p; if (!zfile_fgets (buf, sizeof buf / sizeof (TCHAR), zcue)) break; p = buf; skipspace (&p); if (!_tcsnicmp (p, _T("[DISC]"), 6)) { mode = 1; } else if (!_tcsnicmp (p, _T("[ENTRY "), 7)) { t = NULL; mode = 2; num = readval (p + 7); if (num < 0) break; adr = control = -1; gotlba = false; } else if (!_tcsnicmp (p, _T("[TRACK "), 7)) { mode = 3; tracknum = readval (p + 7); trackmode = -1; if (tracknum <= 0 || tracknum > 99) break; t = &cdu->toc[tracknum - 1]; } if (mode < 0) continue; if (mode == 1) { if (!_tcsnicmp (p, _T("TocEntries="), 11)) { cdu->tracks = readval (p + 11) - 3; if (cdu->tracks <= 0 || cdu->tracks > 99) break; } continue; } if (cdu->tracks <= 0) break; if (mode == 2) { if (!_tcsnicmp (p, _T("SESSION="), 8)) { if (readval (p + 8) != 1) mode = -1; continue; } else if (!_tcsnicmp (p, _T("POINT="), 6)) { tracknum = readval (p + 6); if (tracknum <= 0) break; if (tracknum >= 0xa0 && tracknum != 0xa2) { mode = -1; continue; } if (tracknum == 0xa2) tracknum = cdu->tracks + 1; t = &cdu->toc[tracknum - 1]; continue; } if (!_tcsnicmp (p, _T("ADR="), 4)) adr = readval (p + 4); if (!_tcsnicmp (p, _T("CONTROL="), 8)) control = readval (p + 8); if (!_tcsnicmp (p, _T("PLBA="), 5)) { lba = readval (p + 5); gotlba = true; } if (gotlba && adr >= 0 && control >= 0) { t->adr = adr; t->ctrl = control; t->address = lba; t->offset = 0; t->size = 2352; t->offset = lba * t->size; t->track = tracknum; if ((control & 0x0c) != 4) t->enctype = AUDENC_PCM; if (zsub) { t->subcode = 2; t->subhandle = zfile_dup (zsub); t->suboffset = 0; } if (zimg) { t->handle = zfile_dup (zimg); t->fname = my_strdup (zfile_getname (zimg)); } mode = -1; } } else if (mode == 3) { if (!_tcsnicmp (p, _T("MODE="), 5)) trackmode = _tstol (p + 5); if (trackmode < 0 || trackmode > 2) continue; } } zfile_fclose (zimg); zfile_fclose (zsub); return cdu->tracks; } static int parsecue (struct cdunit *cdu, struct zfile *zcue, const TCHAR *img) { int tracknum, pregap; int newfile, secoffset; uae_s64 offset, index0; TCHAR *fname, *fnametype; audenc fnametypeid; int ctrl; mp3decoder *mp3dec = NULL; fname = NULL; fnametype = NULL; tracknum = 0; offset = 0; secoffset = 0; newfile = 0; ctrl = 0; index0 = -1; pregap = 0; fnametypeid = AUDENC_NONE; write_log (_T("CUE TOC: '%s'\n"), img); for (;;) { TCHAR buf[MAX_DPATH], *p; if (!zfile_fgets (buf, sizeof buf / sizeof (TCHAR), zcue)) break; p = buf; skipspace (&p); if (!_tcsnicmp (p, _T("FILE"), 4)) { p += 4; xfree (fname); fname = my_strdup (nextstring (&p)); fnametype = nextstring (&p); fnametypeid = AUDENC_NONE; if (!fnametype) break; if (_tcsicmp (fnametype, _T("BINARY")) && _tcsicmp (fnametype, _T("WAVE")) && _tcsicmp (fnametype, _T("MP3")) && _tcsicmp (fnametype, _T("FLAC"))) { write_log (_T("CUE: unknown file type '%s' ('%s')\n"), fnametype, fname); } fnametypeid = AUDENC_PCM; if (!_tcsicmp (fnametype, _T("MP3"))) fnametypeid = AUDENC_MP3; else if (!_tcsicmp (fnametype, _T("FLAC"))) fnametypeid = AUDENC_FLAC; offset = 0; newfile = 1; ctrl = 0; } else if (!_tcsnicmp (p, _T("FLAGS"), 5)) { ctrl &= ~(1 | 2 | 8); for (;;) { TCHAR *f = nextstring (&p); if (!f) break; if (!_tcsicmp (f, _T("PRE"))) ctrl |= 1; if (!_tcsicmp (f, _T("DCP"))) ctrl |= 2; if (!_tcsicmp (f, _T("4CH"))) ctrl |= 8; } } else if (!_tcsnicmp (p, _T("TRACK"), 5)) { int size; TCHAR *tracktype; p += 5; //pregap = 0; index0 = -1; tracknum = _tstoi (nextstring (&p)); tracktype = nextstring (&p); if (!tracktype) break; size = 2352; if (!_tcsicmp (tracktype, _T("AUDIO"))) { ctrl &= ~4; } else { ctrl |= 4; if (!_tcsicmp (tracktype, _T("MODE1/2048"))) size = 2048; else if (!_tcsicmp (tracktype, _T("MODE1/2352"))) size = 2352; else if (!_tcsicmp (tracktype, _T("MODE2/2336")) || !_tcsicmp (tracktype, _T("CDI/2336"))) size = 2336; else if (!_tcsicmp (tracktype, _T("MODE2/2352")) || !_tcsicmp (tracktype, _T("CDI/2352"))) size = 2352; else { write_log (_T("CUE: unknown tracktype '%s' ('%s')\n"), tracktype, fname); } } if (tracknum >= 1 && tracknum <= 99) { struct cdtoc *t = &cdu->toc[tracknum - 1]; struct zfile *ztrack; if (tracknum > 1 && newfile) { t--; secoffset += (int)(t->filesize / t->size); t++; } newfile = 0; ztrack = zfile_fopen (fname, _T("rb"), ZFD_ARCHIVE | ZFD_DELAYEDOPEN); if (!ztrack) { TCHAR tmp[MAX_DPATH]; _tcscpy (tmp, fname); p = tmp + _tcslen (tmp); while (p > tmp) { if (*p == '/' || *p == '\\') { ztrack = zfile_fopen (p + 1, _T("rb"), ZFD_ARCHIVE | ZFD_DELAYEDOPEN); if (ztrack) { xfree (fname); fname = my_strdup (p + 1); } break; } p--; } } if (!ztrack) { TCHAR tmp[MAX_DPATH]; TCHAR *s2; _tcscpy (tmp, zfile_getname (zcue)); s2 = _tcsrchr (tmp, '\\'); if (!s2) s2 = _tcsrchr (tmp, '/'); if (s2) { s2[0] = 0; _tcscat (tmp, FSDB_DIR_SEPARATOR_S); _tcscat (tmp, fname); ztrack = zfile_fopen (tmp, _T("rb"), ZFD_ARCHIVE | ZFD_DELAYEDOPEN); } } t->track = tracknum; t->ctrl = ctrl; t->adr = 1; t->handle = ztrack; t->size = size; t->fname = my_strdup (fname); if (tracknum > cdu->tracks) cdu->tracks = tracknum; if (t->handle) t->filesize = zfile_size (t->handle); } } else if (!_tcsnicmp (p, _T("PREGAP"), 6)) { TCHAR *tt; int tn; p += 6; tt = nextstring (&p); tn = _tstoi (tt) * 60 * 75; tn += _tstoi (tt + 3) * 75; tn += _tstoi (tt + 6); pregap += tn; } else if (!_tcsnicmp (p, _T("INDEX"), 5)) { int idxnum; int tn = 0; TCHAR *tt; p += 5; idxnum = _tstoi (nextstring (&p)); tt = nextstring (&p); tn = _tstoi (tt) * 60 * 75; tn += _tstoi (tt + 3) * 75; tn += _tstoi (tt + 6); if (idxnum == 0) { index0 = tn; } else if (idxnum == 1 && tracknum >= 1 && tracknum <= 99) { struct cdtoc *t = &cdu->toc[tracknum - 1]; if (!t->address) { t->address = tn + secoffset; t->address += pregap; if (tracknum > 1) { offset += t->address - t[-1].address; } else { offset += t->address; } if (!secoffset) t->offset = offset * t->size; if (fnametypeid == AUDENC_PCM && t->handle) { struct zfile *zf = t->handle; uae_u8 buf[16] = { 0 }; zfile_fread (buf, 12, 1, zf); if (!memcmp (buf, "RIFF", 4) && !memcmp (buf + 8, "WAVE", 4)) { int size; for (;;) { memset (buf, 0, sizeof buf); if (zfile_fread (buf, 8, 1, zf) != 1) break; size = (buf[4] << 0) | (buf[5] << 8) | (buf[6] << 16) | (buf[7] << 24); if (!memcmp (buf, "data", 4)) break; if (size <= 0) break; zfile_fseek (zf, size, SEEK_CUR); } t->offset += zfile_ftell (zf); t->filesize = size; } t->enctype = fnametypeid; } else if (fnametypeid == AUDENC_MP3 && t->handle) { if (!mp3dec) { try { mp3dec = new mp3decoder(); } catch (exception) { } } if (mp3dec) { t->offset = 0; t->filesize = mp3dec->getsize (t->handle); if (t->filesize) t->enctype = fnametypeid; } } else if (fnametypeid == AUDENC_FLAC && t->handle) { flac_get_size (t); if (t->filesize) t->enctype = fnametypeid; } } } } } struct cdtoc *t = &cdu->toc[cdu->tracks - 1]; uae_s64 size = t->filesize; if (!secoffset) size -= offset * t->size; if (size < 0) size = 0; cdu->toc[cdu->tracks].address = t->address + (int)(size / t->size); xfree (fname); delete mp3dec; return cdu->tracks; } static int parse_image (struct cdunit *cdu, const TCHAR *img) { struct zfile *zcue; int i; const TCHAR *ext; int secoffset; secoffset = 0; cdu->tracks = 0; if (!img) return 0; zcue = zfile_fopen (img, _T("rb"), ZFD_ARCHIVE | ZFD_CD | ZFD_DELAYEDOPEN); if (!zcue) return 0; ext = _tcsrchr (zfile_getname (zcue), '.'); if (ext) { TCHAR curdir[MAX_DPATH]; TCHAR oldcurdir[MAX_DPATH], *p; ext++; oldcurdir[0] = 0; _tcscpy (curdir, img); p = curdir + _tcslen (curdir); while (p > curdir) { if (*p == '/' || *p == '\\') break; p--; } *p = 0; if (p > curdir) my_setcurrentdir (curdir, oldcurdir); if (!_tcsicmp (ext, _T("cue"))) parsecue (cdu, zcue, img); else if (!_tcsicmp (ext, _T("ccd"))) parseccd (cdu, zcue, img); else if (!_tcsicmp (ext, _T("mds"))) parsemds (cdu, zcue, img); if (oldcurdir[0]) my_setcurrentdir (oldcurdir, NULL); } if (!cdu->tracks) { uae_u64 siz = zfile_size (zcue); if (siz >= 16384 && ((siz % 2048) == 0 || (siz % 2352) == 0)) { struct cdtoc *t = &cdu->toc[0]; cdu->tracks = 1; t->ctrl = 4; t->adr = 1; t->fname = my_strdup (img); t->handle = zcue; t->size = (siz % 2048) == 0 ? 2048 : 2352; t->filesize = siz; write_log (_T("CD: plain CD image mounted!\n")); cdu->toc[1].address = t->address + (int)(t->filesize / t->size); zcue = NULL; } } if (!cdu->tracks) write_log (_T("CD: couldn't mount '%s'!\n"), img); for (i = 0; i <= cdu->tracks; i++) { struct cdtoc *t = &cdu->toc[i]; uae_u32 msf = lsn2msf (t->address); if (i < cdu->tracks) write_log (_T("%2d: "), i + 1); else write_log (_T(" ")); write_log (_T("%7d %02d:%02d:%02d"), t->address, (msf >> 16) & 0xff, (msf >> 8) & 0xff, (msf >> 0) & 0xff); if (i < cdu->tracks) write_log (_T(" %s %x %10lld %10lld %s"), (t->ctrl & 4) ? _T("DATA ") : (t->subcode ? _T("CDA+SUB") : _T("CDA ")), t->ctrl, t->offset, t->filesize, t->handle == NULL ? _T("[FILE ERROR]") : _T("")); write_log (_T("\n")); if (i < cdu->tracks) write_log (_T(" - %s\n"), t->fname); if (t->handle && !t->filesize) t->filesize = zfile_size (t->handle); } cdu->blocksize = 2048; cdu->cdsize = cdu->toc[cdu->tracks].address * cdu->blocksize; zfile_fclose (zcue); return 1; } static int ismedia (int unitnum, int quick) { struct cdunit *cdu = &cdunits[unitnum]; if (!cdu->enabled) return -1; return cdu->tracks > 0 ? 1 : 0; } static struct device_info *info_device (int unitnum, struct device_info *di, int quick, int session) { struct cdunit *cdu = &cdunits[unitnum]; memset (di, 0, sizeof (struct device_info)); if (!cdu->enabled) return NULL; di->open = cdu->open; di->removable = 1; di->bus = unitnum; di->target = 0; di->lun = 0; di->media_inserted = 0; di->bytespersector = 2048; di->mediapath[0] = 0; di->cylinders = 1; di->trackspercylinder = 1; di->sectorspertrack = (int)(cdu->cdsize / di->bytespersector); if (ismedia (unitnum, 1)) { di->media_inserted = 1; _tcscpy (di->mediapath, currprefs.cdslots[unitnum].name); } memset (&di->toc, 0, sizeof (struct cd_toc_head)); command_toc (unitnum, &di->toc); di->write_protected = 1; di->type = INQ_ROMD; di->unitnum = unitnum + 1; if (di->mediapath[0]) { _tcscpy (di->label, _T("IMG:")); _tcscat (di->label, di->mediapath); } else { _tcscpy (di->label, _T("IMG:")); } di->backend = _T("IMAGE"); return di; } static void unload_image (struct cdunit *cdu) { int i; for (i = 0; i < sizeof cdu->toc / sizeof (struct cdtoc); i++) { struct cdtoc *t = &cdu->toc[i]; zfile_fclose (t->handle); if (t->handle != t->subhandle) zfile_fclose (t->subhandle); xfree (t->fname); xfree (t->data); xfree (t->subdata); } memset (cdu->toc, 0, sizeof cdu->toc); cdu->tracks = 0; cdu->cdsize = 0; } static int open_device (int unitnum, const TCHAR *ident, int flags) { struct cdunit *cdu = &cdunits[unitnum]; int ret = 0; if (!cdu->open) { uae_sem_init (&cdu->sub_sem, 0, 1); parse_image (cdu, ident); cdu->open = true; cdu->enabled = true; cdu->cdda_volume[0] = 0x7fff; cdu->cdda_volume[1] = 0x7fff; if (cdimage_unpack_thread == 0) { init_comm_pipe (&unpack_pipe, 10, 1); uae_start_thread (_T("cdimage_unpack"), cdda_unpack_func, NULL, NULL); while (cdimage_unpack_thread == 0) Sleep (10); } ret = 1; } blkdev_cd_change (unitnum, currprefs.cdslots[unitnum].name); return ret; } static void close_device (int unitnum) { struct cdunit *cdu = &cdunits[unitnum]; if (cdu->open) { cdda_stop (cdu); cdu->open = false; if (cdimage_unpack_thread) { cdimage_unpack_thread = 0; write_comm_pipe_u32 (&unpack_pipe, -1, 0); write_comm_pipe_u32 (&unpack_pipe, -1, 1); while (cdimage_unpack_thread == 0) Sleep (10); cdimage_unpack_thread = 0; destroy_comm_pipe (&unpack_pipe); } unload_image (cdu); uae_sem_destroy (&cdu->sub_sem); } blkdev_cd_change (unitnum, currprefs.cdslots[unitnum].name); } static void close_bus (void) { if (!bus_open) { write_log (_T("IMAGE close_bus() when already closed!\n")); return; } for (int i = 0; i < MAX_TOTAL_SCSI_DEVICES; i++) { struct cdunit *cdu = &cdunits[i]; if (cdu->open) close_device (i); cdu->enabled = false; } bus_open = 0; write_log (_T("IMAGE driver closed.\n")); } static int open_bus (int flags) { if (bus_open) { write_log (_T("IOCTL open_bus() more than once!\n")); return 1; } bus_open = 1; write_log (_T("Image driver open.\n")); return 1; } struct device_functions devicefunc_cdimage = { _T("IMAGE"), open_bus, close_bus, open_device, close_device, info_device, 0, 0, 0, command_pause, command_stop, command_play, command_volume, command_qcode, command_toc, command_read, command_rawread, 0, 0, ismedia }; fs-uae-2.2.3+dfsg/src/cia.cpp0000644000175000017500000014070712162366655016115 0ustar glaubitzglaubitz/* * UAE - The Un*x Amiga Emulator * * CIA chip support * * Copyright 1995 Bernd Schmidt, Alessandro Bissacco * Copyright 1996, 1997 Stefan Reinauer, Christian Schmitt */ #include "sysconfig.h" #include "sysdeps.h" #include #include "options.h" #include "events.h" #include "uae/memory.h" #include "custom.h" #include "newcpu.h" #include "cia.h" #include "serial.h" #include "disk.h" #include "xwin.h" #include "keybuf.h" #include "gui.h" #include "savestate.h" #include "inputdevice.h" #include "zfile.h" #include "ar.h" #include "parallel.h" #include "akiko.h" #include "cdtv.h" #include "debug.h" #include "arcadia.h" #include "audio.h" #include "keyboard.h" #include "uae.h" #include "amax.h" #include "sampler.h" #include "dongle.h" #include "inputrecord.h" #include "autoconf.h" #define CIAA_DEBUG_R 0 #define CIAA_DEBUG_W 0 #define CIAB_DEBUG_R 0 #define CIAB_DEBUG_W 0 #define DONGLE_DEBUG 0 #define KB_DEBUG 0 #define CLOCK_DEBUG 0 #define TOD_HACK /* e-clock is 10 CPU cycles, 4 cycles high, 6 low * data transfer happens during 4 high cycles */ #define ECLOCK_DATA_CYCLE 4 #define ECLOCK_WAIT_CYCLE 6 #define DIV10 ((ECLOCK_DATA_CYCLE + ECLOCK_WAIT_CYCLE) * CYCLE_UNIT / 2) /* Yes, a bad identifier. */ #define CIASTARTCYCLESHI 3 #define CIASTARTCYCLESCRA 2 static unsigned int ciaaicr, ciaaimask, ciabicr, ciabimask; static unsigned int ciaacra, ciaacrb, ciabcra, ciabcrb; static unsigned int ciaastarta, ciaastartb, ciabstarta, ciabstartb; static unsigned int ciaaicr_reg, ciabicr_reg; /* Values of the CIA timers. */ static unsigned long ciaata, ciaatb, ciabta, ciabtb; /* Computed by compute_passed_time. */ static unsigned long ciaata_passed, ciaatb_passed, ciabta_passed, ciabtb_passed; static unsigned long ciaatod, ciabtod, ciaatol, ciabtol, ciaaalarm, ciabalarm; static int ciaatlatch, ciabtlatch; static bool oldled, oldovl, oldcd32mute; static bool led; static int led_old_brightness; static unsigned long led_cycles_on, led_cycles_off, led_cycle; unsigned int ciabpra; static unsigned long ciaala, ciaalb, ciabla, ciablb; static int ciaatodon, ciabtodon; static unsigned int ciaapra, ciaaprb, ciaadra, ciaadrb, ciaasdr, ciaasdr_cnt; static unsigned int ciabprb, ciabdra, ciabdrb, ciabsdr, ciabsdr_cnt; static int div10; static int kbstate, kblostsynccnt; static uae_u8 kbcode; static uae_u8 serbits; static int warned = 10; static int rtc_delayed_write; static void setclr (unsigned int *p, unsigned int val) { if (val & 0x80) { *p |= val & 0x7F; } else { *p &= ~val; } } static void ICRA(uae_u32 data) { if (ciaaimask & ciaaicr) { ciaaicr |= 0x80; INTREQ_0 (0x8000 | data); } ciaaicr_reg |= ciaaicr; } static void ICRB(uae_u32 data) { if (ciabimask & ciabicr) { ciabicr |= 0x80; INTREQ_0 (0x8000 | data); } ciabicr_reg |= ciabicr; } static void RethinkICRA (void) { if (ciaaicr) { if (currprefs.cpu_cycle_exact) event2_newevent_xx (-1, 2 * CYCLE_UNIT + CYCLE_UNIT / 2, 0x0008, ICRA); else ICRA (0x0008); } } static void RethinkICRB (void) { if (ciabicr) { if (currprefs.cpu_cycle_exact) event2_newevent_xx (-1, 2 * CYCLE_UNIT + CYCLE_UNIT / 2, 0x2000, ICRB); else ICRB (0x2000); } } void rethink_cias (void) { RethinkICRA (); RethinkICRB (); } /* Figure out how many CIA timer cycles have passed for each timer since the last call of CIA_calctimers. */ static void compute_passed_time (void) { unsigned long int ccount = (get_cycles () - eventtab[ev_cia].oldcycles + div10); unsigned long int ciaclocks = ccount / DIV10; ciaata_passed = ciaatb_passed = ciabta_passed = ciabtb_passed = 0; /* CIA A timers */ if ((ciaacra & 0x21) == 0x01) { unsigned long int cc = ciaclocks; if (cc > ciaastarta) cc -= ciaastarta; else cc = 0; assert ((ciaata + 1) >= cc); ciaata_passed = cc; } if ((ciaacrb & 0x61) == 0x01) { unsigned long int cc = ciaclocks; if (cc > ciaastartb) cc -= ciaastartb; else cc = 0; assert ((ciaatb + 1) >= cc); ciaatb_passed = cc; } /* CIA B timers */ if ((ciabcra & 0x21) == 0x01) { unsigned long int cc = ciaclocks; if (cc > ciabstarta) cc -= ciabstarta; else cc = 0; assert ((ciabta + 1) >= cc); ciabta_passed = cc; } if ((ciabcrb & 0x61) == 0x01) { unsigned long int cc = ciaclocks; if (cc > ciabstartb) cc -= ciabstartb; else cc = 0; assert ((ciabtb + 1) >= cc); ciabtb_passed = cc; } } /* Called to advance all CIA timers to the current time. This expects that one of the timer values will be modified, and CIA_calctimers will be called in the same cycle. */ static int CIA_update_check (void) { unsigned long int ccount = (get_cycles () - eventtab[ev_cia].oldcycles + div10); unsigned long int ciaclocks = ccount / DIV10; int aovfla = 0, aovflb = 0, asp = 0, bovfla = 0, bovflb = 0, bsp = 0; int icr = 0; div10 = ccount % DIV10; /* CIA A timers */ if ((ciaacra & 0x21) == 0x01) { bool check = true; unsigned long int cc = ciaclocks; if (ciaastarta > 0) { if (cc > ciaastarta) { cc -= ciaastarta; ciaastarta = 0; } else { ciaastarta -= cc; check = false; } } if (check) { assert ((ciaata + 1) >= cc); if ((ciaata + 1) == cc) { if ((ciaacra & 0x48) == 0x40 && ciaasdr_cnt > 0 && --ciaasdr_cnt == 0) asp = 1; aovfla = 1; if ((ciaacrb & 0x61) == 0x41 || (ciaacrb & 0x61) == 0x61) { if (ciaatb-- == 0) aovflb = 1; } } ciaata -= cc; } } if ((ciaacrb & 0x61) == 0x01) { bool check = true; unsigned long int cc = ciaclocks; if (ciaastartb > 0) { if (cc > ciaastartb) { cc -= ciaastartb; ciaastartb = 0; } else { ciaastartb -= cc; check = false; } } if (check) { assert ((ciaatb + 1) >= cc); if ((ciaatb + 1) == cc) aovflb = 1; ciaatb -= cc; } } /* CIA B timers */ if ((ciabcra & 0x21) == 0x01) { bool check = true; unsigned long int cc = ciaclocks; if (ciabstarta > 0) { if (cc > ciabstarta) { cc -= ciabstarta; ciabstarta = 0; } else { ciabstarta -= cc; check = false; } } if (check) { assert ((ciabta + 1) >= cc); if ((ciabta + 1) == cc) { if ((ciabcra & 0x48) == 0x40 && ciabsdr_cnt > 0 && --ciabsdr_cnt == 0) bsp = 1; bovfla = 1; if ((ciabcrb & 0x61) == 0x41 || (ciabcrb & 0x61) == 0x61) { if (ciabtb-- == 0) bovflb = 1; } } ciabta -= cc; } } if ((ciabcrb & 0x61) == 0x01) { bool check = true; unsigned long int cc = ciaclocks; if (ciabstartb > 0) { if (cc > ciabstartb) { cc -= ciabstartb; ciabstartb = 0; } else { ciabstartb -= cc; check = false; } } if (check) { assert ((ciabtb + 1) >= cc); if ((ciabtb + 1) == cc) bovflb = 1; ciabtb -= cc; } } if (aovfla) { ciaaicr |= 1; icr = 1; ciaata = ciaala; if (ciaacra & 0x8) { ciaacra &= ~1; } } if (aovflb) { ciaaicr |= 2; icr = 1; ciaatb = ciaalb; if (ciaacrb & 0x8) { ciaacrb &= ~1; } } if (asp) { ciaaicr |= 8; icr = 1; } if (bovfla) { ciabicr |= 1; icr |= 2; ciabta = ciabla; if (ciabcra & 0x8) { ciabcra &= ~1; } } if (bovflb) { ciabicr |= 2; icr |= 2; ciabtb = ciablb; if (ciabcrb & 0x8) { ciabcrb &= ~1; } } if (bsp) { ciabicr |= 8; icr |= 2; } return icr; } static void CIA_update (void) { int icr = CIA_update_check (); if (icr & 1) RethinkICRA (); if (icr & 2) RethinkICRB (); } /* Call this only after CIA_update has been called in the same cycle. */ static void CIA_calctimers (void) { long int ciaatimea = -1, ciaatimeb = -1, ciabtimea = -1, ciabtimeb = -1; int div10diff = DIV10 - div10; eventtab[ev_cia].oldcycles = get_cycles (); if ((ciaacra & 0x21) == 0x01) { ciaatimea = div10diff + DIV10 * (ciaata + ciaastarta); } #if 0 if ((ciaacrb & 0x61) == 0x41) { /* Timer B will not get any pulses if Timer A is off. */ if (ciaatimea >= 0) { /* If Timer A is in one-shot mode, and Timer B needs more than * one pulse, it will not underflow. */ if (ciaatb == 0 || (ciaacra & 0x8) == 0) { /* Otherwise, we can determine the time of the underflow. */ /* This may overflow, however. So just ignore this timer and use the fact that we'll call CIA_handler for the A timer. */ /* ciaatimeb = ciaatimea + ciaala * DIV10 * ciaatb; */ } } } #endif if ((ciaacrb & 0x61) == 0x01) { ciaatimeb = div10diff + DIV10 * (ciaatb + ciaastartb); } if ((ciabcra & 0x21) == 0x01) { ciabtimea = div10diff + DIV10 * (ciabta + ciabstarta); } #if 0 if ((ciabcrb & 0x61) == 0x41) { /* Timer B will not get any pulses if Timer A is off. */ if (ciabtimea >= 0) { /* If Timer A is in one-shot mode, and Timer B needs more than * one pulse, it will not underflow. */ if (ciabtb == 0 || (ciabcra & 0x8) == 0) { /* Otherwise, we can determine the time of the underflow. */ /* ciabtimeb = ciabtimea + ciabla * DIV10 * ciabtb; */ } } } #endif if ((ciabcrb & 0x61) == 0x01) { ciabtimeb = div10diff + DIV10 * (ciabtb + ciabstartb); } eventtab[ev_cia].active = (ciaatimea != -1 || ciaatimeb != -1 || ciabtimea != -1 || ciabtimeb != -1); if (eventtab[ev_cia].active) { unsigned long int ciatime = ~0L; if (ciaatimea != -1) ciatime = ciaatimea; if (ciaatimeb != -1 && ciaatimeb < ciatime) ciatime = ciaatimeb; if (ciabtimea != -1 && ciabtimea < ciatime) ciatime = ciabtimea; if (ciabtimeb != -1 && ciabtimeb < ciatime) ciatime = ciabtimeb; eventtab[ev_cia].evtime = ciatime + get_cycles (); } events_schedule(); } void CIA_handler (void) { CIA_update (); CIA_calctimers (); } void cia_diskindex (void) { ciabicr |= 0x10; RethinkICRB (); } void cia_parallelack (void) { ciaaicr |= 0x10; RethinkICRA (); } static int checkalarm (unsigned long tod, unsigned long alarm, int inc) { if (tod == alarm) return 1; if (!inc) return 0; /* emulate buggy TODMED counter. * it counts: .. 29 2A 2B 2C 2D 2E 2F 20 30 31 32 .. * (2F->20->30 only takes couple of cycles but it will trigger alarm.. */ if (tod & 0x000fff) return 0; if (((tod - 1) & 0xfff000) == alarm) return 1; return 0; } STATIC_INLINE void ciab_checkalarm (int inc) { if (checkalarm (ciabtod, ciabalarm, inc)) { ciabicr |= 4; RethinkICRB (); } } STATIC_INLINE void ciaa_checkalarm (int inc) { if (checkalarm (ciaatod, ciaaalarm, inc)) { ciaaicr |= 4; RethinkICRA (); } } #ifdef TOD_HACK static uae_u64 tod_hack_tv, tod_hack_tod, tod_hack_tod_last; static int tod_hack_enabled; #define TOD_HACK_TIME 312 * 50 * 10 static void tod_hack_reset (void) { struct timeval tv; gettimeofday (&tv, NULL); tod_hack_tv = (uae_u64)tv.tv_sec * 1000000 + tv.tv_usec; tod_hack_tod = ciaatod; tod_hack_tod_last = tod_hack_tod; } #endif static int heartbeat_cnt; void cia_heartbeat (void) { heartbeat_cnt = 10; } static void do_tod_hack (int dotod) { struct timeval tv; static int oldrate; uae_u64 t; int rate; int docount = 0; if (tod_hack_enabled == 0) return; if (!heartbeat_cnt) { if (tod_hack_enabled > 0) tod_hack_enabled = -1; return; } if (tod_hack_enabled < 0) { tod_hack_enabled = TOD_HACK_TIME; return; } if (tod_hack_enabled > 1) { tod_hack_enabled--; if (tod_hack_enabled == 1) { //write_log (_T("TOD HACK enabled\n")); tod_hack_reset (); } return; } if (currprefs.cs_ciaatod == 0) rate = (int)(vblank_hz + 0.5); else if (currprefs.cs_ciaatod == 1) rate = 50; else rate = 60; if (rate <= 0) return; if (rate != oldrate || ciaatod != tod_hack_tod_last) { //if (ciaatod != 0) // write_log (_T("TOD HACK reset %d,%d %d,%d\n"), rate, oldrate, ciaatod, tod_hack_tod_last); tod_hack_reset (); oldrate = rate; docount = 1; } if (!dotod && currprefs.cs_ciaatod == 0) return; gettimeofday (&tv, NULL); t = (uae_u64)tv.tv_sec * 1000000 + tv.tv_usec; if (t - tod_hack_tv >= 1000000 / rate) { tod_hack_tv += 1000000 / rate; docount = 1; } if (docount) { ciaatod++; ciaatod &= 0x00ffffff; tod_hack_tod_last = ciaatod; ciaa_checkalarm (0); } } static int resetwarning_phase, resetwarning_timer; static void setcode (uae_u8 keycode) { kbcode = ~((keycode << 1) | (keycode >> 7)); } static void sendrw (void) { setcode (AK_RESETWARNING); ciaasdr = kbcode; kblostsynccnt = 8 * maxvpos * 8; // 8 frames * 8 bits. ciaaicr |= 8; RethinkICRA (); write_log (_T("KB: sent reset warning code (phase=%d)\n"), resetwarning_phase); } int resetwarning_do (int canreset) { if (resetwarning_phase) { /* just force reset if second reset happens during resetwarning */ if (canreset) { resetwarning_phase = 0; resetwarning_timer = 0; } return 0; } resetwarning_phase = 1; resetwarning_timer = maxvpos_nom * 5; write_log (_T("KB: reset warning triggered\n")); sendrw (); return 1; } static void resetwarning_check (void) { if (resetwarning_timer > 0) { resetwarning_timer--; if (resetwarning_timer <= 0) { write_log (_T("KB: reset warning forced reset. Phase=%d\n"), resetwarning_phase); resetwarning_phase = -1; kblostsynccnt = 0; send_internalevent (INTERNALEVENT_KBRESET); uae_reset (0, 1); } } if (resetwarning_phase == 1) { if (!kblostsynccnt) { /* first AK_RESETWARNING handshake received */ write_log (_T("KB: reset warning second phase..\n")); resetwarning_phase = 2; resetwarning_timer = maxvpos_nom * 5; sendrw (); } } else if (resetwarning_phase == 2) { if (ciaacra & 0x40) { /* second AK_RESETWARNING handshake active */ resetwarning_phase = 3; write_log (_T("KB: reset warning SP = output\n")); /* System won't reset until handshake signal becomes inactive or 10s has passed */ resetwarning_timer = 10 * maxvpos_nom * vblank_hz; } } else if (resetwarning_phase == 3) { if (!(ciaacra & 0x40)) { /* second AK_RESETWARNING handshake disabled */ write_log (_T("KB: reset warning end by software. reset.\n")); resetwarning_phase = -1; kblostsynccnt = 0; send_internalevent (INTERNALEVENT_KBRESET); uae_reset (0, 1); } } } void CIA_hsync_prehandler (void) { } static void keyreq (void) { #if KB_DEBUG write_log (_T("code=%x\n"), kbcode); #endif ciaasdr = kbcode; kblostsynccnt = 8 * maxvpos * 8; // 8 frames * 8 bits. ciaaicr |= 8; RethinkICRA (); } void CIA_hsync_posthandler (bool dotod) { if (ciabtodon && dotod) { ciabtod++; ciabtod &= 0xFFFFFF; ciab_checkalarm (1); } if (currprefs.tod_hack && ciaatodon) do_tod_hack (dotod); if (resetwarning_phase) { resetwarning_check (); while (keys_available ()) get_next_key (); } else if ((keys_available () || kbstate < 3) && !kblostsynccnt && (hsync_counter & 15) == 0) { switch (kbstate) { case 0: kbcode = 0; /* powerup resync */ kbstate++; break; case 1: setcode (AK_INIT_POWERUP); kbstate++; break; case 2: setcode (AK_TERM_POWERUP); kbstate++; break; case 3: kbcode = ~get_next_key (); break; } keyreq (); } } static void calc_led (int old_led) { unsigned long c = get_cycles (); unsigned long t = (c - led_cycle) / CYCLE_UNIT; if (old_led) led_cycles_on += t; else led_cycles_off += t; led_cycle = c; } static void led_vsync (void) { int v; calc_led (led); if (led_cycles_on && !led_cycles_off) v = 255; else if (led_cycles_off && !led_cycles_on) v = 0; else if (led_cycles_off) v = led_cycles_on * 255 / (led_cycles_on + led_cycles_off); else v = 255; if (v < 0) v = 0; if (v > 255) v = 255; gui_data.powerled_brightness = v; led_cycles_on = 0; led_cycles_off = 0; if (led_old_brightness != gui_data.powerled_brightness) { gui_data.powerled = gui_data.powerled_brightness > 127; gui_led (LED_POWER, gui_data.powerled); led_filter_audio (); } led_old_brightness = gui_data.powerled_brightness; led_cycle = get_cycles (); } static void write_battclock (void); void CIA_vsync_prehandler (void) { if (rtc_delayed_write < 0) { rtc_delayed_write = 50; } else if (rtc_delayed_write > 0) { rtc_delayed_write--; if (rtc_delayed_write == 0) write_battclock (); } led_vsync (); CIA_handler (); if (kblostsynccnt > 0) { kblostsynccnt -= maxvpos; if (kblostsynccnt <= 0) { kblostsynccnt = 0; keyreq (); #if KB_DEBUG write_log (_T("lostsync\n")); #endif } } } void CIA_vsync_posthandler (bool dotod) { if (heartbeat_cnt > 0) heartbeat_cnt--; #ifdef TOD_HACK if (currprefs.tod_hack && tod_hack_enabled == 1) return; #endif if (ciaatodon && dotod) { ciaatod++; ciaatod &= 0xFFFFFF; ciaa_checkalarm (1); } #if 0 if (vpos == 0) { write_log (_T("%d\n"), vsync_counter); dumpcia (); } #endif } static void bfe001_change (void) { uae_u8 v = ciaapra; bool led2; v |= ~ciaadra; /* output is high when pin's direction is input */ led2 = (v & 2) ? 0 : 1; if (led2 != led) { calc_led (led); led = led2; led_old_brightness = -1; } if (currprefs.cs_ciaoverlay && (v & 1) != oldovl) { oldovl = v & 1; if (!oldovl) { map_overlay (1); } else { //activate_debugger (); map_overlay (0); } } if (currprefs.cs_cd32cd && (v & 1) != oldcd32mute) { oldcd32mute = v & 1; akiko_mute (oldcd32mute ? 0 : 1); } } static uae_u8 ReadCIAA (unsigned int addr) { unsigned int tmp; int reg = addr & 15; compute_passed_time (); #if CIAA_DEBUG_R > 0 write_log (_T("R_CIAA: bfe%x01 %08X\n"), reg, M68K_GETPC); #endif switch (reg) { case 0: #ifdef ACTION_REPLAY action_replay_ciaread (); #endif tmp = DISK_status() & 0x3c; tmp |= handle_joystick_buttons (ciaapra, ciaadra); tmp |= (ciaapra | (ciaadra ^ 3)) & 0x03; tmp = dongle_cia_read (0, reg, tmp); #if DONGLE_DEBUG > 0 if (notinrom()) write_log (_T("BFE001 R %02X %s\n"), tmp, debuginfo(0)); #endif if (inputrecord_debug & 2) { if (input_record > 0) inprec_recorddebug_cia (tmp, div10, m68k_getpc ()); else if (input_play > 0) inprec_playdebug_cia (tmp, div10, m68k_getpc ()); } return tmp; case 1: #ifdef PARALLEL_PORT if (isprinter () > 0) { tmp = ciaaprb; } else if (isprinter () < 0) { uae_u8 v; parallel_direct_read_data (&v); tmp = v; #ifdef ARCADIA } else if (arcadia_bios) { tmp = arcadia_parport (0, ciaaprb, ciaadrb); #endif } else if (currprefs.win32_samplersoundcard >= 0) { tmp = sampler_getsample ((ciabpra & 4) ? 1 : 0); } else #endif { tmp = handle_parport_joystick (0, ciaaprb, ciaadrb); tmp = dongle_cia_read (1, reg, tmp); #if DONGLE_DEBUG > 0 if (notinrom()) write_log (_T("BFE101 R %02X %s\n"), tmp, debuginfo(0)); #endif } if (ciaacrb & 2) { int pb7 = 0; if (ciaacrb & 4) pb7 = ciaacrb & 1; tmp &= ~0x80; tmp |= pb7 ? 0x80 : 00; } if (ciaacra & 2) { int pb6 = 0; if (ciaacra & 4) pb6 = ciaacra & 1; tmp &= ~0x40; tmp |= pb6 ? 0x40 : 00; } return tmp; case 2: #if DONGLE_DEBUG > 0 if (notinrom ()) write_log (_T("BFE201 R %02X %s\n"), ciaadra, debuginfo(0)); #endif return ciaadra; case 3: #if DONGLE_DEBUG > 0 if (notinrom ()) write_log (_T("BFE301 R %02X %s\n"), ciaadrb, debuginfo(0)); #endif return ciaadrb; case 4: return (uae_u8)((ciaata - ciaata_passed) & 0xff); case 5: return (uae_u8)((ciaata - ciaata_passed) >> 8); case 6: return (uae_u8)((ciaatb - ciaatb_passed) & 0xff); case 7: return (uae_u8)((ciaatb - ciaatb_passed) >> 8); case 8: if (ciaatlatch) { ciaatlatch = 0; return (uae_u8)ciaatol; } else return (uae_u8)ciaatod; case 9: if (ciaatlatch) return (uae_u8)(ciaatol >> 8); else return (uae_u8)(ciaatod >> 8); case 10: if (!ciaatlatch) { /* only if not already latched. A1200 confirmed. (TW) */ /* no latching if ALARM is set */ if (!(ciaacrb & 0x80)) ciaatlatch = 1; ciaatol = ciaatod; } return (uae_u8)(ciaatol >> 16); case 12: return ciaasdr; case 13: tmp = ciaaicr_reg; ciaaicr &= ~ciaaicr_reg; ciaaicr_reg = 0; RethinkICRA (); return tmp; case 14: return ciaacra; case 15: return ciaacrb; } return 0; } static uae_u8 ReadCIAB (unsigned int addr) { unsigned int tmp; int reg = addr & 15; #if CIAB_DEBUG_R > 0 if ((addr >= 8 && addr <= 10) || CIAB_DEBUG_R > 1) write_log (_T("R_CIAB: bfd%x00 %08X\n"), reg, M68K_GETPC); #endif compute_passed_time (); switch (reg) { case 0: tmp = 0; #ifdef SERIAL_PORT if (currprefs.use_serial) tmp = serial_readstatus(ciabdra); #endif #ifdef PARALLEL_PORT if (isprinter () > 0) { //tmp |= ciabpra & (0x04 | 0x02 | 0x01); tmp &= ~3; // clear BUSY and PAPEROUT tmp |= 4; // set SELECT } else if (isprinter () < 0) { uae_u8 v; parallel_direct_read_status (&v); tmp |= v & 7; } else { tmp |= handle_parport_joystick (1, ciabpra, ciabdra); } #endif tmp = dongle_cia_read (1, reg, tmp); #if DONGLE_DEBUG > 0 if (notinrom ()) write_log (_T("BFD000 R %02X %s\n"), tmp, debuginfo(0)); #endif return tmp; case 1: #ifdef ACTION_REPLAY action_replay_ciaread (); #endif #if DONGLE_DEBUG > 0 if (notinrom ()) write_log (_T("BFD100 R %02X %s\n"), ciabprb, debuginfo(0)); #endif tmp = ciabprb; tmp = dongle_cia_read (1, reg, tmp); if (ciabcrb & 2) { int pb7 = 0; if (ciabcrb & 4) pb7 = ciabcrb & 1; tmp &= ~0x80; tmp |= pb7 ? 0x80 : 00; } if (ciabcra & 2) { int pb6 = 0; if (ciabcra & 4) pb6 = ciabcra & 1; tmp &= ~0x40; tmp |= pb6 ? 0x40 : 00; } return tmp; case 2: return ciabdra; case 3: return ciabdrb; case 4: return (uae_u8)((ciabta - ciabta_passed) & 0xff); case 5: return (uae_u8)((ciabta - ciabta_passed) >> 8); case 6: return (uae_u8)((ciabtb - ciabtb_passed) & 0xff); case 7: return (uae_u8)((ciabtb - ciabtb_passed) >> 8); case 8: if (ciabtlatch) { ciabtlatch = 0; return (uae_u8)ciabtol; } else return (uae_u8)ciabtod; case 9: if (ciabtlatch) return (uae_u8)(ciabtol >> 8); else return (uae_u8)(ciabtod >> 8); case 10: if (!ciabtlatch) { /* no latching if ALARM is set */ if (!(ciabcrb & 0x80)) ciabtlatch = 1; ciabtol = ciabtod; } return (uae_u8)(ciabtol >> 16); case 12: return ciabsdr; case 13: tmp = ciabicr_reg; ciabicr &= ~ciabicr_reg; ciabicr_reg = 0; RethinkICRB (); return tmp; case 14: //write_log (_T("CIABCRA READ %d %x\n"), ciabcra, M68K_GETPC); return ciabcra; case 15: return ciabcrb; } return 0; } static void WriteCIAA (uae_u16 addr, uae_u8 val) { int reg = addr & 15; #if CIAA_DEBUG_W > 0 write_log (_T("W_CIAA: bfe%x01 %02X %08X\n"), reg, val, M68K_GETPC); #endif #ifdef ACTION_REPLAY ar_ciaa[reg] = val; #endif if (!currprefs.cs_ciaoverlay && oldovl) { map_overlay (1); oldovl = 0; } switch (reg) { case 0: #if DONGLE_DEBUG > 0 if (notinrom ()) write_log (_T("BFE001 W %02X %s\n"), val, debuginfo(0)); #endif ciaapra = (ciaapra & ~0xc3) | (val & 0xc3); bfe001_change (); handle_cd32_joystick_cia (ciaapra, ciaadra); dongle_cia_write (0, reg, val); #ifdef AMAX if (currprefs.amaxromfile[0]) amax_bfe001_write (val, ciaadra); #endif break; case 1: #if DONGLE_DEBUG > 0 if (notinrom ()) write_log (_T("BFE101 W %02X %s\n"), val, debuginfo(0)); #endif ciaaprb = val; dongle_cia_write (0, reg, val); #ifdef PARALLEL_PORT if (isprinter() > 0) { doprinter (val); cia_parallelack (); } else if (isprinter() < 0) { parallel_direct_write_data (val, ciaadrb); cia_parallelack (); #ifdef ARCADIA } else if (arcadia_bios) { arcadia_parport (1, ciaaprb, ciaadrb); #endif } #endif break; case 2: #if DONGLE_DEBUG > 0 if (notinrom ()) write_log (_T("BFE201 W %02X %s\n"), val, debuginfo(0)); #endif ciaadra = val; dongle_cia_write (0, reg, val); bfe001_change (); break; case 3: ciaadrb = val; dongle_cia_write (0, reg, val); #if DONGLE_DEBUG > 0 if (notinrom ()) write_log (_T("BFE301 W %02X %s\n"), val, debuginfo(0)); #endif #ifdef ARCADIA if (arcadia_bios) arcadia_parport (1, ciaaprb, ciaadrb); #endif break; case 4: CIA_update (); ciaala = (ciaala & 0xff00) | val; CIA_calctimers (); break; case 5: CIA_update (); ciaala = (ciaala & 0xff) | (val << 8); if ((ciaacra & 1) == 0) ciaata = ciaala; if (ciaacra & 8) { ciaata = ciaala; ciaacra |= 1; ciaastarta = CIASTARTCYCLESHI; } CIA_calctimers (); break; case 6: CIA_update (); ciaalb = (ciaalb & 0xff00) | val; CIA_calctimers (); break; case 7: CIA_update (); ciaalb = (ciaalb & 0xff) | (val << 8); if ((ciaacrb & 1) == 0) ciaatb = ciaalb; if (ciaacrb & 8) { ciaatb = ciaalb; ciaacrb |= 1; ciaastartb = CIASTARTCYCLESHI; } CIA_calctimers (); break; case 8: if (ciaacrb & 0x80) { ciaaalarm = (ciaaalarm & ~0xff) | val; } else { ciaatod = (ciaatod & ~0xff) | val; ciaatodon = 1; ciaa_checkalarm (0); } break; case 9: if (ciaacrb & 0x80) { ciaaalarm = (ciaaalarm & ~0xff00) | (val << 8); } else { ciaatod = (ciaatod & ~0xff00) | (val << 8); } break; case 10: if (ciaacrb & 0x80) { ciaaalarm = (ciaaalarm & ~0xff0000) | (val << 16); } else { ciaatod = (ciaatod & ~0xff0000) | (val << 16); ciaatodon = 0; } break; case 12: CIA_update (); ciaasdr = val; if ((ciaacra & 0x41) == 0x41 && ciaasdr_cnt == 0) ciaasdr_cnt = 8 * 2; CIA_calctimers (); break; case 13: setclr (&ciaaimask,val); break; case 14: CIA_update (); val &= 0x7f; /* bit 7 is unused */ if ((val & 1) && !(ciaacra & 1)) ciaastarta = CIASTARTCYCLESCRA; if ((val & 0x40) == 0 && (ciaacra & 0x40) != 0) { /* todo: check if low to high or high to low only */ kblostsynccnt = 0; #if KB_DEBUG write_log (_T("KB_ACK %02x->%02x\n"), ciaacra, val); #endif } ciaacra = val; if (ciaacra & 0x10) { ciaacra &= ~0x10; ciaata = ciaala; } CIA_calctimers (); break; case 15: CIA_update (); if ((val & 1) && !(ciaacrb & 1)) ciaastartb = CIASTARTCYCLESCRA; ciaacrb = val; if (ciaacrb & 0x10) { ciaacrb &= ~0x10; ciaatb = ciaalb; } CIA_calctimers (); break; } } static void WriteCIAB (uae_u16 addr, uae_u8 val) { int reg = addr & 15; #if CIAB_DEBUG_W > 0 if ((addr >= 8 && addr <= 10) || CIAB_DEBUG_W > 1) write_log (_T("W_CIAB: bfd%x00 %02X %08X\n"), reg, val, M68K_GETPC); #endif #ifdef ACTION_REPLAY ar_ciab[reg] = val; #endif switch (reg) { case 0: #if DONGLE_DEBUG > 0 if (notinrom ()) write_log (_T("BFD000 W %02X %s\n"), val, debuginfo(0)); #endif dongle_cia_write (1, reg, val); ciabpra = val; #ifdef SERIAL_PORT if (currprefs.use_serial) serial_writestatus(ciabpra, ciabdra); #endif #ifdef PARALLEL_PORT if (isprinter () < 0) parallel_direct_write_status (val, ciabdra); #endif break; case 1: #if DONGLE_DEBUG > 0 if (notinrom ()) write_log (_T("BFD100 W %02X %s\n"), val, debuginfo(0)); #endif dongle_cia_write (1, reg, val); ciabprb = val; DISK_select (val); break; case 2: #if DONGLE_DEBUG > 0 if (notinrom ()) write_log (_T("BFD200 W %02X %s\n"), val, debuginfo(0)); #endif dongle_cia_write (1, reg, val); ciabdra = val; #ifdef SERIAL_PORT if (currprefs.use_serial) serial_writestatus (ciabpra, ciabdra); #endif break; case 3: #if DONGLE_DEBUG > 0 if (notinrom ()) write_log (_T("BFD300 W %02X %s\n"), val, debuginfo(0)); #endif dongle_cia_write (1, reg, val); ciabdrb = val; break; case 4: CIA_update (); ciabla = (ciabla & 0xff00) | val; CIA_calctimers (); break; case 5: CIA_update (); ciabla = (ciabla & 0xff) | (val << 8); if ((ciabcra & 1) == 0) ciabta = ciabla; if (ciabcra & 8) { ciabta = ciabla; ciabcra |= 1; ciabstarta = CIASTARTCYCLESHI; } CIA_calctimers (); break; case 6: CIA_update (); ciablb = (ciablb & 0xff00) | val; CIA_calctimers (); break; case 7: CIA_update (); ciablb = (ciablb & 0xff) | (val << 8); if ((ciabcrb & 1) == 0) ciabtb = ciablb; if (ciabcrb & 8) { ciabtb = ciablb; ciabcrb |= 1; ciabstartb = CIASTARTCYCLESHI; } CIA_calctimers (); break; case 8: if (ciabcrb & 0x80) { ciabalarm = (ciabalarm & ~0xff) | val; } else { ciabtod = (ciabtod & ~0xff) | val; ciabtodon = 1; ciab_checkalarm (0); } break; case 9: if (ciabcrb & 0x80) { ciabalarm = (ciabalarm & ~0xff00) | (val << 8); } else { ciabtod = (ciabtod & ~0xff00) | (val << 8); } break; case 10: if (ciabcrb & 0x80) { ciabalarm = (ciabalarm & ~0xff0000) | (val << 16); } else { ciabtod = (ciabtod & ~0xff0000) | (val << 16); ciabtodon = 0; } break; case 12: CIA_update (); ciabsdr = val; if ((ciabcra & 0x40) == 0) ciabsdr_cnt = 0; if ((ciabcra & 0x41) == 0x41 && ciabsdr_cnt == 0) ciabsdr_cnt = 8 * 2; CIA_calctimers (); break; case 13: setclr (&ciabimask, val); break; case 14: CIA_update (); val &= 0x7f; /* bit 7 is unused */ if ((val & 1) && !(ciabcra & 1)) ciabstarta = CIASTARTCYCLESCRA; ciabcra = val; if (ciabcra & 0x10) { ciabcra &= ~0x10; ciabta = ciabla; } CIA_calctimers (); break; case 15: CIA_update (); if ((val & 1) && !(ciabcrb & 1)) ciabstartb = CIASTARTCYCLESCRA; ciabcrb = val; if (ciabcrb & 0x10) { ciabcrb &= ~0x10; ciabtb = ciablb; } CIA_calctimers (); break; } } void cia_set_overlay (bool overlay) { oldovl = overlay; } void CIA_reset (void) { #ifdef TOD_HACK tod_hack_tv = 0; tod_hack_tod = 0; tod_hack_enabled = 0; if (currprefs.tod_hack) tod_hack_enabled = TOD_HACK_TIME; #endif kblostsynccnt = 0; serbits = 0; oldcd32mute = 1; oldled = true; resetwarning_phase = resetwarning_timer = 0; heartbeat_cnt = 0; if (!savestate_state) { oldovl = true; kbstate = 0; ciaatlatch = ciabtlatch = 0; ciaapra = 0; ciaadra = 0; ciaatod = ciabtod = 0; ciaatodon = ciabtodon = 0; ciaaicr = ciabicr = ciaaimask = ciabimask = 0; ciaacra = ciaacrb = ciabcra = ciabcrb = 0x4; /* outmode = toggle; */ ciaala = ciaalb = ciabla = ciablb = ciaata = ciaatb = ciabta = ciabtb = 0xFFFF; ciaaalarm = ciabalarm = 0; ciabpra = 0x8C; ciabdra = 0; div10 = 0; ciaasdr_cnt = 0; ciaasdr = 0; ciabsdr_cnt = 0; ciabsdr = 0; ciaata_passed = ciaatb_passed = ciabta_passed = ciabtb_passed = 0; CIA_calctimers (); DISK_select_set (ciabprb); } map_overlay (0); #ifdef SERIAL_PORT if (currprefs.use_serial && !savestate_state) serial_dtr_off (); /* Drop DTR at reset */ #endif if (savestate_state) { if (currprefs.cs_ciaoverlay) { oldovl = true; } bfe001_change (); if (!currprefs.cs_ciaoverlay) { map_overlay (oldovl ? 0 : 1); } } #ifdef CD32 if (!isrestore ()) { akiko_reset (); if (!akiko_init ()) currprefs.cs_cd32cd = changed_prefs.cs_cd32cd = 0; } #endif } void dumpcia (void) { console_out_f (_T("A: CRA %02x CRB %02x ICR %02x IM %02x TA %04x (%04x) TB %04x (%04x)\n"), ciaacra, ciaacrb, ciaaicr, ciaaimask, ciaata, ciaala, ciaatb, ciaalb); console_out_f (_T("TOD %06x (%06x) ALARM %06x %c%c CYC=%08X\n"), ciaatod, ciaatol, ciaaalarm, ciaatlatch ? 'L' : ' ', ciaatodon ? ' ' : 'S', get_cycles ()); console_out_f (_T("B: CRA %02x CRB %02x ICR %02x IM %02x TA %04x (%04x) TB %04x (%04x)\n"), ciabcra, ciabcrb, ciabicr, ciabimask, ciabta, ciabla, ciabtb, ciablb); console_out_f (_T("TOD %06x (%06x) ALARM %06x %c%c CLK=%d\n"), ciabtod, ciabtol, ciabalarm, ciabtlatch ? 'L' : ' ', ciabtodon ? ' ' : 'S', div10 / CYCLE_UNIT); } /* CIA memory access */ static uae_u32 REGPARAM3 cia_lget (uaecptr) REGPARAM; static uae_u32 REGPARAM3 cia_wget (uaecptr) REGPARAM; static uae_u32 REGPARAM3 cia_bget (uaecptr) REGPARAM; static uae_u32 REGPARAM3 cia_lgeti (uaecptr) REGPARAM; static uae_u32 REGPARAM3 cia_wgeti (uaecptr) REGPARAM; static void REGPARAM3 cia_lput (uaecptr, uae_u32) REGPARAM; static void REGPARAM3 cia_wput (uaecptr, uae_u32) REGPARAM; static void REGPARAM3 cia_bput (uaecptr, uae_u32) REGPARAM; addrbank cia_bank = { cia_lget, cia_wget, cia_bget, cia_lput, cia_wput, cia_bput, default_xlate, default_check, NULL, _T("CIA"), cia_lgeti, cia_wgeti, ABFLAG_IO }; // Gayle or Fat Gary does not enable CIA /CS lines if both CIAs are selected // Old Gary based Amigas enable both CIAs in this situation STATIC_INLINE bool issinglecia (void) { return currprefs.cs_ide || currprefs.cs_pcmcia || currprefs.cs_mbdmac; } STATIC_INLINE bool isgayle (void) { return currprefs.cs_ide || currprefs.cs_pcmcia; } static void cia_wait_pre (void) { if (currprefs.cachesize) return; #ifndef CUSTOM_SIMPLE int div = (get_cycles () - eventtab[ev_cia].oldcycles) % DIV10; int cycles; if (div >= DIV10 * ECLOCK_DATA_CYCLE / 10) { cycles = DIV10 - div; cycles += DIV10 * ECLOCK_DATA_CYCLE / 10; } else if (div) { cycles = DIV10 + DIV10 * ECLOCK_DATA_CYCLE / 10 - div; } else { cycles = DIV10 * ECLOCK_DATA_CYCLE / 10 - div; } if (cycles) { if (currprefs.cpu_cycle_exact) x_do_cycles_pre (cycles); else do_cycles (cycles); } #endif } static void cia_wait_post (uae_u32 value) { if (currprefs.cachesize) { do_cycles (8 * CYCLE_UNIT /2); } else { int c = 6 * CYCLE_UNIT / 2; if (currprefs.cpu_cycle_exact) x_do_cycles_post (c, value); else do_cycles (c); } } static bool isgaylenocia (uaecptr addr) { // gayle CIA region is only 4096 bytes at 0xbfd000 and 0xbfe000 if (!isgayle ()) return true; uaecptr mask = addr & 0xf000; bool cia = mask == 0xe000 || mask == 0xd000; return cia; } static uae_u32 REGPARAM2 cia_bget (uaecptr addr) { int r = (addr & 0xf00) >> 8; uae_u8 v = 0xff; #ifdef JIT special_mem |= S_READ; #endif if (!isgaylenocia (addr)) return v; cia_wait_pre (); switch ((addr >> 12) & 3) { case 0: if (!issinglecia ()) v = (addr & 1) ? ReadCIAA (r) : ReadCIAB (r); break; case 1: v = (addr & 1) ? 0xff : ReadCIAB (r); break; case 2: v = (addr & 1) ? ReadCIAA (r) : 0xff; break; case 3: if (currprefs.cpu_model == 68000 && currprefs.cpu_compatible) v = (addr & 1) ? regs.irc : regs.irc >> 8; if (warned > 0) { write_log (_T("cia_bget: unknown CIA address %x PC=%x\n"), addr, M68K_GETPC); warned--; } break; } cia_wait_post (v); return v; } static uae_u32 REGPARAM2 cia_wget (uaecptr addr) { int r = (addr & 0xf00) >> 8; uae_u16 v = 0xffff; #ifdef JIT special_mem |= S_READ; #endif if (!isgaylenocia (addr)) return v; cia_wait_pre (); switch ((addr >> 12) & 3) { case 0: if (!issinglecia ()) v = (ReadCIAB (r) << 8) | ReadCIAA (r); break; case 1: v = (ReadCIAB (r) << 8) | 0xff; break; case 2: v = (0xff << 8) | ReadCIAA (r); break; case 3: if (currprefs.cpu_model == 68000 && currprefs.cpu_compatible) v = regs.irc; if (warned > 0) { write_log (_T("cia_wget: unknown CIA address %x PC=%x\n"), addr, M68K_GETPC); warned--; } break; } cia_wait_post (v); return v; } static uae_u32 REGPARAM2 cia_lget (uaecptr addr) { uae_u32 v; v = cia_wget (addr) << 16; v |= cia_wget (addr + 2); return v; } static uae_u32 REGPARAM2 cia_wgeti (uaecptr addr) { if (currprefs.cpu_model >= 68020) return dummy_wgeti (addr); return cia_wget (addr); } static uae_u32 REGPARAM2 cia_lgeti (uaecptr addr) { if (currprefs.cpu_model >= 68020) return dummy_lgeti (addr); return cia_lget (addr); } static void REGPARAM2 cia_bput (uaecptr addr, uae_u32 value) { int r = (addr & 0xf00) >> 8; #ifdef JIT special_mem |= S_WRITE; #endif if (!isgaylenocia (addr)) return; cia_wait_pre (); if (!issinglecia () || (addr & 0x3000) != 0) { if ((addr & 0x2000) == 0) WriteCIAB (r, value); if ((addr & 0x1000) == 0) WriteCIAA (r, value); if (((addr & 0x3000) == 0x3000) && warned > 0) { write_log (_T("cia_bput: unknown CIA address %x %x\n"), addr, value); warned--; } } cia_wait_post (value); } static void REGPARAM2 cia_wput (uaecptr addr, uae_u32 value) { int r = (addr & 0xf00) >> 8; #ifdef JIT special_mem |= S_WRITE; #endif if (!isgaylenocia (addr)) return; cia_wait_pre (); if (!issinglecia () || (addr & 0x3000) != 0) { if ((addr & 0x2000) == 0) WriteCIAB (r, value >> 8); if ((addr & 0x1000) == 0) WriteCIAA (r, value & 0xff); if (((addr & 0x3000) == 0x3000) && warned > 0) { write_log (_T("cia_wput: unknown CIA address %x %x\n"), addr, value); warned--; } } cia_wait_post (value); } static void REGPARAM2 cia_lput (uaecptr addr, uae_u32 value) { cia_wput (addr, value >> 16); cia_wput (addr + 2, value & 0xffff); } /* battclock memory access */ static uae_u32 REGPARAM3 clock_lget (uaecptr) REGPARAM; static uae_u32 REGPARAM3 clock_wget (uaecptr) REGPARAM; static uae_u32 REGPARAM3 clock_bget (uaecptr) REGPARAM; static void REGPARAM3 clock_lput (uaecptr, uae_u32) REGPARAM; static void REGPARAM3 clock_wput (uaecptr, uae_u32) REGPARAM; static void REGPARAM3 clock_bput (uaecptr, uae_u32) REGPARAM; addrbank clock_bank = { clock_lget, clock_wget, clock_bget, clock_lput, clock_wput, clock_bput, default_xlate, default_check, NULL, _T("Battery backed up clock (none)"), dummy_lgeti, dummy_wgeti, ABFLAG_IO }; static unsigned int clock_control_d; static unsigned int clock_control_e; static unsigned int clock_control_f; #define RF5C01A_RAM_SIZE 16 static uae_u8 rtc_memory[RF5C01A_RAM_SIZE], rtc_alarm[RF5C01A_RAM_SIZE]; static uae_u8 getclockreg (int addr, struct tm *ct) { uae_u8 v = 0; if (currprefs.cs_rtc == 1) { /* MSM6242B */ switch (addr) { case 0x0: v = ct->tm_sec % 10; break; case 0x1: v = ct->tm_sec / 10; break; case 0x2: v = ct->tm_min % 10; break; case 0x3: v = ct->tm_min / 10; break; case 0x4: v = ct->tm_hour % 10; break; case 0x5: if (clock_control_f & 4) { v = ct->tm_hour / 10; // 24h } else { v = (ct->tm_hour % 12) / 10; // 12h v |= ct->tm_hour >= 12 ? 4 : 0; // AM/PM bit } break; case 0x6: v = ct->tm_mday % 10; break; case 0x7: v = ct->tm_mday / 10; break; case 0x8: v = (ct->tm_mon + 1) % 10; break; case 0x9: v = (ct->tm_mon + 1) / 10; break; case 0xA: v = ct->tm_year % 10; break; case 0xB: v = (ct->tm_year / 10) & 0x0f; break; case 0xC: v = ct->tm_wday; break; case 0xD: v = clock_control_d; break; case 0xE: v = clock_control_e; break; case 0xF: v = clock_control_f; break; } } else if (currprefs.cs_rtc == 2) { /* RF5C01A */ int bank = clock_control_d & 3; /* memory access */ if (bank >= 2 && addr < 0x0d) return (rtc_memory[addr] >> ((bank == 2) ? 0 : 4)) & 0x0f; /* alarm */ if (bank == 1 && addr < 0x0d) { v = rtc_alarm[addr]; #if CLOCK_DEBUG write_log (_T("CLOCK ALARM R %X: %X\n"), addr, v); #endif return v; } switch (addr) { case 0x0: v = ct->tm_sec % 10; break; case 0x1: v = ct->tm_sec / 10; break; case 0x2: v = ct->tm_min % 10; break; case 0x3: v = ct->tm_min / 10; break; case 0x4: v = ct->tm_hour % 10; break; case 0x5: if (rtc_alarm[10] & 1) v = ct->tm_hour / 10; // 24h else v = ((ct->tm_hour % 12) / 10) | (ct->tm_hour >= 12 ? 2 : 0); // 12h break; case 0x6: v = ct->tm_wday; break; case 0x7: v = ct->tm_mday % 10; break; case 0x8: v = ct->tm_mday / 10; break; case 0x9: v = (ct->tm_mon + 1) % 10; break; case 0xA: v = (ct->tm_mon + 1) / 10; break; case 0xB: v = (ct->tm_year % 100) % 10; break; case 0xC: v = (ct->tm_year % 100) / 10; break; case 0xD: v = clock_control_d; break; /* E and F = write-only, reads as zero */ case 0xE: v = 0; break; case 0xF: v = 0; break; } } #if CLOCK_DEBUG write_log(_T("CLOCK R: %X = %X, PC=%08x\n"), addr, v, M68K_GETPC); #endif return v; } static void write_battclock (void) { if (!currprefs.rtcfile[0] || currprefs.cs_rtc == 0) return; struct zfile *f = zfile_fopen (currprefs.rtcfile, _T("wb")); if (f) { uae_u8 zero[13] = { 0 }; struct tm *ct; #ifdef FSUAE ct = uae_get_amiga_time(); #else time_t t = time (0); t += currprefs.cs_rtc_adjust; ct = localtime (&t); #endif uae_u8 od = clock_control_d; if (currprefs.cs_rtc == 2) clock_control_d &= ~3; for (int i = 0; i < 13; i++) { uae_u8 v = getclockreg (i, ct); zfile_fwrite (&v, 1, 1, f); } clock_control_d = od; zfile_fwrite (&clock_control_d, 1, 1, f); zfile_fwrite (&clock_control_e, 1, 1, f); zfile_fwrite (&clock_control_f, 1, 1, f); if (currprefs.cs_rtc == 2) { zfile_fwrite (rtc_alarm, RF5C01A_RAM_SIZE, 1, f); zfile_fwrite (rtc_memory, RF5C01A_RAM_SIZE, 1, f); } zfile_fclose (f); } } void rtc_hardreset (void) { rtc_delayed_write = 0; if (currprefs.cs_rtc == 1) { /* MSM6242B */ clock_bank.name = _T("Battery backed up clock (MSM6242B)"); clock_control_d = 0x1; clock_control_e = 0; clock_control_f = 0x4; /* 24/12 */ } else if (currprefs.cs_rtc == 2) { /* RF5C01A */ clock_bank.name = _T("Battery backed up clock (RF5C01A)"); clock_control_d = 0x8; /* Timer EN */ clock_control_e = 0; clock_control_f = 0; memset (rtc_memory, 0, RF5C01A_RAM_SIZE); memset (rtc_alarm, 0, RF5C01A_RAM_SIZE); rtc_alarm[10] = 1; /* 24H mode */ } if (currprefs.rtcfile[0]) { struct zfile *f = zfile_fopen (currprefs.rtcfile, _T("rb")); if (f) { uae_u8 empty[13]; zfile_fread (empty, 13, 1, f); zfile_fread (&clock_control_d, 1, 1, f); zfile_fread (&clock_control_e, 1, 1, f); zfile_fread (&clock_control_f, 1, 1, f); zfile_fread (rtc_alarm, RF5C01A_RAM_SIZE, 1, f); zfile_fread (rtc_memory, RF5C01A_RAM_SIZE, 1, f); zfile_fclose (f); } } } static uae_u32 REGPARAM2 clock_lget (uaecptr addr) { return (clock_wget (addr) << 16) | clock_wget (addr + 2); } static uae_u32 REGPARAM2 clock_wget (uaecptr addr) { return (clock_bget (addr) << 8) | clock_bget (addr + 1); } static uae_u32 REGPARAM2 clock_bget (uaecptr addr) { time_t t; struct tm *ct; uae_u8 v = 0; #ifdef JIT special_mem |= S_READ; #endif #ifdef CDTV if (currprefs.cs_cdtvram && addr >= 0xdc8000) return cdtv_battram_read (addr); #endif addr &= 0x3f; if ((addr & 3) == 2 || (addr & 3) == 0 || currprefs.cs_rtc == 0) { if (currprefs.cpu_model == 68000 && currprefs.cpu_compatible) v = regs.irc >> 8; return v; } #ifdef FSUAE ct = uae_get_amiga_time(); #else t = time (0); t += currprefs.cs_rtc_adjust; ct = localtime (&t); #endif addr >>= 2; return getclockreg (addr, ct); } static void REGPARAM2 clock_lput (uaecptr addr, uae_u32 value) { clock_wput (addr, value >> 16); clock_wput (addr + 2, value); } static void REGPARAM2 clock_wput (uaecptr addr, uae_u32 value) { clock_bput (addr, value >> 8); clock_bput (addr + 1, value); } static void REGPARAM2 clock_bput (uaecptr addr, uae_u32 value) { #ifdef JIT special_mem |= S_WRITE; #endif // write_log(_T("W: %x (%x): %x, PC=%08x\n"), addr, (addr & 0xff) >> 2, value & 0xff, M68K_GETPC); #ifdef CDTV if (currprefs.cs_cdtvram && addr >= 0xdc8000) { cdtv_battram_write (addr, value); return; } #endif addr &= 0x3f; if ((addr & 1) != 1 || currprefs.cs_rtc == 0) return; addr >>= 2; value &= 0x0f; if (currprefs.cs_rtc == 1) { /* MSM6242B */ #if CLOCK_DEBUG write_log (_T("CLOCK W %X: %X\n"), addr, value); #endif switch (addr) { case 0xD: clock_control_d = value & (1|8); break; case 0xE: clock_control_e = value; break; case 0xF: clock_control_f = value; break; } } else if (currprefs.cs_rtc == 2) { /* RF5C01A */ int bank = clock_control_d & 3; /* memory access */ if (bank >= 2 && addr < 0x0d) { uae_u8 ov = rtc_memory[addr]; rtc_memory[addr] &= ((bank == 2) ? 0xf0 : 0x0f); rtc_memory[addr] |= value << ((bank == 2) ? 0 : 4); if (rtc_memory[addr] != ov) rtc_delayed_write = -1; return; } /* alarm */ if (bank == 1 && addr < 0x0d) { #if CLOCK_DEBUG write_log (_T("CLOCK ALARM W %X: %X\n"), addr, value); #endif uae_u8 ov = rtc_alarm[addr]; rtc_alarm[addr] = value; rtc_alarm[0] = rtc_alarm[1] = rtc_alarm[9] = rtc_alarm[12] = 0; rtc_alarm[3] &= ~0x8; rtc_alarm[5] &= ~0xc; rtc_alarm[6] &= ~0x8; rtc_alarm[8] &= ~0xc; rtc_alarm[10] &= ~0xe; rtc_alarm[11] &= ~0xc; if (rtc_alarm[addr] != ov) rtc_delayed_write = -1; return; } #if CLOCK_DEBUG write_log (_T("CLOCK W %X: %X\n"), addr, value); #endif switch (addr) { case 0xD: clock_control_d = value; break; case 0xE: clock_control_e = value; break; case 0xF: clock_control_f = value; break; } } rtc_delayed_write = -1; } #ifdef SAVESTATE /* CIA-A and CIA-B save/restore code */ static void save_cia_prepare (void) { CIA_update_check (); CIA_calctimers (); compute_passed_time (); } void restore_cia_start (void) { /* Fixes very old statefiles without keyboard state */ kbstate = 3; setcapslockstate (0); kblostsynccnt = 0; } void restore_cia_finish (void) { eventtab[ev_cia].oldcycles = get_cycles (); CIA_update (); CIA_calctimers (); compute_passed_time (); eventtab[ev_cia].oldcycles -= div10; //dumpcia (); DISK_select_set (ciabprb); } uae_u8 *restore_cia (int num, uae_u8 *src) { uae_u8 b; uae_u16 w; uae_u32 l; /* CIA registers */ b = restore_u8 (); /* 0 PRA */ if (num) ciabpra = b; else ciaapra = b; b = restore_u8 (); /* 1 PRB */ if (num) ciabprb = b; else ciaaprb = b; b = restore_u8 (); /* 2 DDRA */ if (num) ciabdra = b; else ciaadra = b; b = restore_u8 (); /* 3 DDRB */ if (num) ciabdrb = b; else ciaadrb = b; w = restore_u16 (); /* 4 TA */ if (num) ciabta = w; else ciaata = w; w = restore_u16 (); /* 6 TB */ if (num) ciabtb = w; else ciaatb = w; l = restore_u8 (); /* 8/9/A TOD */ l |= restore_u8 () << 8; l |= restore_u8 () << 16; if (num) ciabtod = l; else ciaatod = l; restore_u8 (); /* B unused */ b = restore_u8 (); /* C SDR */ if (num) ciabsdr = b; else ciaasdr = b; b = restore_u8 (); /* D ICR INFORMATION (not mask!) */ if (num) ciabicr = b; else ciaaicr = b; b = restore_u8 (); /* E CRA */ if (num) ciabcra = b; else ciaacra = b; b = restore_u8 (); /* F CRB */ if (num) ciabcrb = b; else ciaacrb = b; /* CIA internal data */ b = restore_u8 (); /* ICR MASK */ if (num) ciabimask = b; else ciaaimask = b; w = restore_u8 (); /* timer A latch */ w |= restore_u8 () << 8; if (num) ciabla = w; else ciaala = w; w = restore_u8 (); /* timer B latch */ w |= restore_u8 () << 8; if (num) ciablb = w; else ciaalb = w; w = restore_u8 (); /* TOD latched value */ w |= restore_u8 () << 8; w |= restore_u8 () << 16; if (num) ciabtol = w; else ciaatol = w; l = restore_u8 (); /* alarm */ l |= restore_u8 () << 8; l |= restore_u8 () << 16; if (num) ciabalarm = l; else ciaaalarm = l; b = restore_u8 (); if (num) ciabtlatch = b & 1; else ciaatlatch = b & 1; /* is TOD latched? */ if (num) ciabtodon = b & 2; else ciaatodon = b & 2; /* is TOD stopped? */ b = restore_u8 (); if (num) div10 = CYCLE_UNIT * b; b = restore_u8 (); if (num) ciabsdr_cnt = b; else ciaasdr_cnt = b; return src; } uae_u8 *save_cia (int num, int *len, uae_u8 *dstptr) { uae_u8 *dstbak,*dst, b; uae_u16 t; if (dstptr) dstbak = dst = dstptr; else dstbak = dst = xmalloc (uae_u8, 1000); save_cia_prepare (); /* CIA registers */ b = num ? ciabpra : ciaapra; /* 0 PRA */ save_u8 (b); b = num ? ciabprb : ciaaprb; /* 1 PRB */ save_u8 (b); b = num ? ciabdra : ciaadra; /* 2 DDRA */ save_u8 (b); b = num ? ciabdrb : ciaadrb; /* 3 DDRB */ save_u8 (b); t = (num ? ciabta - ciabta_passed : ciaata - ciaata_passed);/* 4 TA */ save_u16 (t); t = (num ? ciabtb - ciabtb_passed : ciaatb - ciaatb_passed);/* 6 TB */ save_u16 (t); b = (num ? ciabtod : ciaatod); /* 8 TODL */ save_u8 (b); b = (num ? ciabtod >> 8 : ciaatod >> 8); /* 9 TODM */ save_u8 (b); b = (num ? ciabtod >> 16 : ciaatod >> 16); /* A TODH */ save_u8 (b); save_u8 (0); /* B unused */ b = num ? ciabsdr : ciaasdr; /* C SDR */ save_u8 (b); b = num ? ciabicr : ciaaicr; /* D ICR INFORMATION (not mask!) */ save_u8 (b); b = num ? ciabcra : ciaacra; /* E CRA */ save_u8 (b); b = num ? ciabcrb : ciaacrb; /* F CRB */ save_u8 (b); /* CIA internal data */ save_u8 (num ? ciabimask : ciaaimask); /* ICR */ b = (num ? ciabla : ciaala); /* timer A latch LO */ save_u8 (b); b = (num ? ciabla >> 8 : ciaala >> 8); /* timer A latch HI */ save_u8 (b); b = (num ? ciablb : ciaalb); /* timer B latch LO */ save_u8 (b); b = (num ? ciablb >> 8 : ciaalb >> 8); /* timer B latch HI */ save_u8 (b); b = (num ? ciabtol : ciaatol); /* latched TOD LO */ save_u8 (b); b = (num ? ciabtol >> 8 : ciaatol >> 8); /* latched TOD MED */ save_u8 (b); b = (num ? ciabtol >> 16 : ciaatol >> 16); /* latched TOD HI */ save_u8 (b); b = (num ? ciabalarm : ciaaalarm); /* alarm LO */ save_u8 (b); b = (num ? ciabalarm >> 8 : ciaaalarm >> 8);/* alarm MED */ save_u8 (b); b = (num ? ciabalarm >> 16 : ciaaalarm >> 16); /* alarm HI */ save_u8 (b); b = 0; if (num) b |= ciabtlatch ? 1 : 0; else b |= ciaatlatch ? 1 : 0; /* is TOD latched? */ if (num) b |= ciabtodon ? 2 : 0; else b |= ciaatodon ? 2 : 0; /* TOD stopped? */ save_u8 (b); save_u8 (num ? div10 / CYCLE_UNIT : 0); save_u8 (num ? ciabsdr_cnt : ciaasdr_cnt); *len = dst - dstbak; return dstbak; } uae_u8 *save_keyboard (int *len, uae_u8 *dstptr) { uae_u8 *dst, *dstbak; if (dstptr) dstbak = dst = dstptr; else dstbak = dst = xmalloc (uae_u8, 4 + 4 + 1 + 1 + 1 + 1 + 1 + 2); save_u32 (getcapslockstate () ? 1 : 0); save_u32 (1); save_u8 (kbstate); save_u8 (0); save_u8 (0); save_u8 (0); save_u8 (kbcode); save_u16 (kblostsynccnt); *len = dst - dstbak; return dstbak; } uae_u8 *restore_keyboard (uae_u8 *src) { setcapslockstate (restore_u32 () & 1); uae_u32 v = restore_u32 (); kbstate = restore_u8 (); restore_u8 (); restore_u8 (); restore_u8 (); kbcode = restore_u8 (); kblostsynccnt = restore_u16 (); if (!(v & 1)) { kbstate = 3; kblostsynccnt = 0; } return src; } #endif /* SAVESTATE */ fs-uae-2.2.3+dfsg/src/custom.cpp0000644000175000017500000065630212162366655016676 0ustar glaubitzglaubitz/* * UAE - The Un*x Amiga Emulator * * Custom chip emulation * * Copyright 1995-2002 Bernd Schmidt * Copyright 1995 Alessandro Bissacco * Copyright 2000-2010 Toni Wilen */ #include "sysconfig.h" #include "sysdeps.h" #include #include #include #include "options.h" #include "uae.h" #include "gensound.h" #include "audio.h" #include "sounddep/sound.h" #include "events.h" #include "uae/memory.h" #include "custom.h" #include "newcpu.h" #include "cia.h" #include "disk.h" #include "blitter.h" #include "xwin.h" #include "inputdevice.h" #include "inputrecord.h" #include "keybuf.h" #include "serial.h" #include "autoconf.h" #include "traps.h" #include "gui.h" #include "picasso96.h" #include "drawing.h" #include "savestate.h" #include "ar.h" #ifdef AVIOUTPUT #include "avioutput.h" #endif #include "debug.h" #include "akiko.h" #include "cdtv.h" #if defined(ENFORCER) #include "enforcer.h" #endif #include "gayle.h" #include "gfxfilter.h" #include "a2091.h" #include "a2065.h" #include "ncr_scsi.h" #include "blkdev.h" #include "sampler.h" #include "clipboard.h" #ifdef RETROPLATFORM #include "rp.h" #endif #include "luascript.h" #define CUSTOM_DEBUG 0 #define SPRITE_DEBUG 0 #define SPRITE_DEBUG_MINY 0x0 #define SPRITE_DEBUG_MAXY 0x100 #define SPR0_HPOS 0x15 #define MAX_SPRITES 8 #define SPRITE_COLLISIONS #define SPEEDUP #define AUTOSCALE_SPRITES 1 #define SPRBORDER 0 #ifdef FSUAE int g_frame_debug_logging = 0; #endif STATIC_INLINE bool nocustom (void) { if (picasso_on && currprefs.picasso96_nocustom) return true; return false; } void uae_abort (const TCHAR *format,...) { static int nomore; va_list parms; TCHAR buffer[1000]; va_start (parms, format); _vsntprintf (buffer, sizeof (buffer) - 1, format, parms ); va_end (parms); if (nomore) { write_log (_T("%s\n"), buffer); return; } gui_message (buffer); nomore = 1; } #if 0 void customhack_put (struct customhack *ch, uae_u16 v, int hpos) { ch->v = v; ch->vpos = vpos; ch->hpos = hpos; } uae_u16 customhack_get (struct customhack *ch, int hpos) { if (ch->vpos == vpos && ch->hpos == hpos) { ch->vpos = -1; return 0xffff; } return ch->v; } #endif uae_u16 last_custom_value1; static unsigned int n_consecutive_skipped = 0; static unsigned int total_skipped = 0; STATIC_INLINE void sync_copper (int hpos); /* Events */ unsigned long int vsync_cycles; static int extra_cycle; static int rpt_did_reset; struct ev eventtab[ev_max]; struct ev2 eventtab2[ev2_max]; int vpos; static int vpos_count, vpos_count_diff; int lof_store; // real bit in custom registers static int lof_current; // what display device thinks static int lol; static int next_lineno, prev_lineno; static enum nln_how nextline_how; static int lof_changed = 0, lof_changing = 0, interlace_changed = 0; static int scandoubled_line; static bool vsync_rendered, frame_rendered, frame_shown; static int vsynctimeperline; static int jitcount = 0; static int frameskiptime; #define LOF_TOGGLES_NEEDED 4 #define NLACE_CNT_NEEDED 50 static int lof_togglecnt_lace, lof_togglecnt_nlace, lof_previous, nlace_cnt; /* Stupid genlock-detection prevention hack. * We should stop calling vsync_handler() and * hstop_handler() completely but it is not * worth the trouble.. */ static int vpos_previous, hpos_previous; static int vpos_lpen, hpos_lpen, lightpen_triggered; int lightpen_x = -1, lightpen_y = -1, lightpen_cx, lightpen_cy, lightpen_active; static uae_u32 sprtaba[256],sprtabb[256]; static uae_u32 sprite_ab_merge[256]; /* Tables for collision detection. */ static uae_u32 sprclx[16], clxmask[16]; /* AGA T genlock bit in color registers */ static uae_u8 color_regs_aga_genlock[256]; /* * Hardware registers of all sorts. */ static int REGPARAM3 custom_wput_1 (int, uaecptr, uae_u32, int) REGPARAM; static uae_u16 cregs[256]; uae_u16 intena, intreq; uae_u16 dmacon; uae_u16 adkcon; /* used by audio code */ static uae_u32 cop1lc, cop2lc, copcon; int maxhpos = MAXHPOS_PAL; int maxhpos_short = MAXHPOS_PAL; int maxvpos = MAXVPOS_PAL; int maxvpos_nom = MAXVPOS_PAL; // nominal value (same as maxvpos but "faked" maxvpos in fake 60hz modes) int hsyncendpos, hsyncstartpos; static int maxvpos_total = 511; int minfirstline = VBLANK_ENDLINE_PAL; static int equ_vblank_endline = EQU_ENDLINE_PAL; static bool equ_vblank_toggle = true; double vblank_hz = VBLANK_HZ_PAL, fake_vblank_hz, vblank_hz_stored; static int vblank_hz_mult, vblank_hz_state; static struct chipset_refresh *stored_chipset_refresh; int doublescan; bool programmedmode; int syncbase; static int fmode; uae_u16 beamcon0, new_beamcon0; uae_u16 vtotal = MAXVPOS_PAL, htotal = MAXHPOS_PAL; static int maxvpos_stored, maxhpos_stored; static uae_u16 hsstop, hbstrt, hbstop, vsstop, vbstrt, vbstop, hsstrt, vsstrt, hcenter; static int ciavsyncmode; static int diw_hstrt, diw_hstop; static int diw_hcounter; #define HSYNCTIME (maxhpos * CYCLE_UNIT); /* This is but an educated guess. It seems to be correct, but this stuff * isn't documented well. */ struct sprite { uaecptr pt; int xpos; int vstart; int vstop; int dblscan; /* AGA SSCAN2 */ int armed; int dmastate; int dmacycle; int ptxhpos; }; static struct sprite spr[MAX_SPRITES]; static int plfstrt_sprite; uaecptr sprite_0; int sprite_0_width, sprite_0_height, sprite_0_doubled; uae_u32 sprite_0_colors[4]; static uae_u8 magic_sprite_mask = 0xff; static int sprite_vblank_endline = VBLANK_SPRITE_PAL; static unsigned int sprctl[MAX_SPRITES], sprpos[MAX_SPRITES]; #ifdef AGA static uae_u16 sprdata[MAX_SPRITES][4], sprdatb[MAX_SPRITES][4]; #else static uae_u16 sprdata[MAX_SPRITES][1], sprdatb[MAX_SPRITES][1]; #endif static int sprite_last_drawn_at[MAX_SPRITES]; static int last_sprite_point, nr_armed; static int sprite_width, sprres; int sprite_buffer_res; #ifdef CPUEMU_12 uae_u8 cycle_line[256]; #endif static uae_u16 bplxdat[8]; static bool bpl1dat_written, bpl1dat_early, bpl1dat_written_at_least_once; static uae_s16 bpl1mod, bpl2mod; static uaecptr prevbpl[2][MAXVPOS][8]; static uaecptr bplpt[8], bplptx[8]; /*static int blitcount[256]; blitter debug */ static struct color_entry current_colors; unsigned int bplcon0; static unsigned int bplcon1, bplcon2, bplcon3, bplcon4; static unsigned int bplcon0d, bplcon0dd, bplcon0_res, bplcon0_planes, bplcon0_planes_limit; static unsigned int diwstrt, diwstop, diwhigh; static int diwhigh_written; static unsigned int ddfstrt, ddfstop, ddfstrt_old_hpos; static int ddf_change, badmode, diw_change; static int bplcon1_hpos; /* The display and data fetch windows */ enum diw_states { DIW_waiting_start, DIW_waiting_stop }; static int plffirstline, plflastline; int plffirstline_total, plflastline_total; static int autoscale_bordercolors; static int plfstrt_start, plfstrt, plfstop; static int sprite_minx, sprite_maxx; static int first_bpl_vpos; static int last_ddf_pix_hpos; static int last_decide_line_hpos; static int last_fetch_hpos, last_sprite_hpos; static int diwfirstword, diwlastword; static int plfleft_real; static int last_hdiw; static enum diw_states diwstate, hdiwstate, ddfstate; int first_planes_vpos, last_planes_vpos; int diwfirstword_total, diwlastword_total; int ddffirstword_total, ddflastword_total; int firstword_bplcon1; static int last_copper_hpos; static int copper_access; /* Sprite collisions */ static unsigned int clxdat, clxcon, clxcon2, clxcon_bpl_enable, clxcon_bpl_match; enum copper_states { COP_stop, COP_waitforever, COP_read1, COP_read2, COP_bltwait, COP_wait_in2, COP_skip_in2, COP_wait1, COP_wait, COP_skip1, COP_strobe_delay1, COP_strobe_delay2, COP_strobe_delay1x, COP_strobe_delay2x, COP_strobe_extra, // just to skip current cycle when CPU wrote to COPJMP COP_start_delay }; struct copper { /* The current instruction words. */ unsigned int i1, i2; unsigned int saved_i1, saved_i2; enum copper_states state, state_prev; /* Instruction pointer. */ uaecptr ip, saved_ip; int hpos, vpos; unsigned int ignore_next; int vcmp, hcmp; int strobe; /* COPJMP1 / COPJMP2 accessed */ int last_write, last_write_hpos; int moveaddr, movedata, movedelay; }; static struct copper cop_state; static int copper_enabled_thisline; static int cop_min_waittime; /* * Statistics */ unsigned long int frametime = 0, lastframetime = 0, timeframes = 0; unsigned long hsync_counter = 0, vsync_counter = 0; unsigned long int idletime; int bogusframe; /* Recording of custom chip register changes. */ static int current_change_set; static struct sprite_entry sprite_entries[2][MAX_SPR_PIXELS / 16]; static struct color_change color_changes[2][MAX_REG_CHANGE]; struct decision line_decisions[2 * (MAXVPOS + 2) + 1]; static struct draw_info line_drawinfo[2][2 * (MAXVPOS + 2) + 1]; #define COLOR_TABLE_SIZE (MAXVPOS + 2) * 2 static struct color_entry color_tables[2][COLOR_TABLE_SIZE]; static int next_sprite_entry = 0; static int prev_next_sprite_entry; static int next_sprite_forced = 1; struct sprite_entry *curr_sprite_entries, *prev_sprite_entries; struct color_change *curr_color_changes, *prev_color_changes; struct draw_info *curr_drawinfo, *prev_drawinfo; struct color_entry *curr_color_tables, *prev_color_tables; static int next_color_change; static int next_color_entry, remembered_color_entry; static int color_src_match, color_dest_match, color_compare_result; static uae_u32 thisline_changed; #ifdef SMART_UPDATE #define MARK_LINE_CHANGED do { thisline_changed = 1; } while (0) #else #define MARK_LINE_CHANGED do { ; } while (0) #endif static struct decision thisline_decision; static int fetch_cycle, fetch_modulo_cycle; enum plfstate { plf_idle, plf_start, plf_active, plf_passed_stop, plf_passed_stop2, plf_end } plf_state; enum fetchstate { fetch_not_started, fetch_started, fetch_was_plane0 } fetch_state; /* * helper functions */ STATIC_INLINE int ecsshres(void) { return bplcon0_res == RES_SUPERHIRES && (currprefs.chipset_mask & CSMASK_ECS_DENISE) && !(currprefs.chipset_mask & CSMASK_AGA); } STATIC_INLINE int nodraw (void) { return !currprefs.cpu_cycle_exact && framecnt != 0; } static int doflickerfix (void) { return currprefs.gfx_vresolution && doublescan < 0 && vpos < MAXVPOS; } uae_u32 get_copper_address (int copno) { switch (copno) { case 1: return cop1lc; case 2: return cop2lc; case -1: return cop_state.ip; default: return 0; } } void reset_frame_rate_hack (void) { jitcount = 0; if (currprefs.m68k_speed >= 0) return; rpt_did_reset = 1; is_syncline = 0; vsyncmintime = read_processor_time () + vsynctimebase; write_log (_T("Resetting frame rate hack\n")); } STATIC_INLINE void setclr (uae_u16 *p, uae_u16 val) { if (val & 0x8000) *p |= val & 0x7FFF; else *p &= ~val; } STATIC_INLINE void alloc_cycle (int hpos, int type) { #ifdef CPUEMU_12 #if 0 if (cycle_line[hpos]) write_log (_T("hpos=%d, old=%d, new=%d\n"), hpos, cycle_line[hpos], type); if ((type == CYCLE_CPU || type == CYCLE_COPPER) && (hpos & 1)) write_log (_T("odd %d cycle %d\n"), hpos); if (!(hpos & 1) && (type == CYCLE_SPRITE || type == CYCLE_REFRESH || type == CYCLE_MISC)) write_log (_T("even %d cycle %d\n"), type, hpos); #endif cycle_line[hpos] = type; #endif } STATIC_INLINE void alloc_cycle_maybe (int hpos, int type) { if ((cycle_line[hpos] & CYCLE_MASK) == 0) alloc_cycle (hpos, type); } void alloc_cycle_ext (int hpos, int type) { alloc_cycle (hpos, type); } void alloc_cycle_blitter (int hpos, uaecptr *ptr, int chnum) { if (cycle_line[hpos] & CYCLE_COPPER_SPECIAL) { static int warned = 100; uaecptr srcptr = cop_state.strobe == 1 ? cop1lc : cop2lc; if (warned > 0) { write_log (_T("buggy copper cycle conflict with blitter ch %c %08x <- %08x PC=%08x\n"), 'A' + (chnum - 1), *ptr, srcptr, m68k_getpc ()); warned--; } // if (currprefs.cpu_model == 68000) // *ptr = srcptr; } alloc_cycle (hpos, CYCLE_BLITTER); } static void hsyncdelay (void) { #if 0 static int prevhpos; while (current_hpos () == prevhpos) do_cycles(CYCLE_UNIT); prevhpos = current_hpos(); #endif } static void update_mirrors (void) { aga_mode = (currprefs.chipset_mask & CSMASK_AGA) != 0; direct_rgb = aga_mode; } STATIC_INLINE uae_u8 *pfield_xlateptr (uaecptr plpt, int bytecount) { if (!chipmem_check_indirect (plpt, bytecount)) { static int count = 0; if (!count) count++, write_log (_T("Warning: Bad playfield pointer\n")); return NULL; } return chipmem_xlate_indirect (plpt); } STATIC_INLINE void docols (struct color_entry *colentry) { int i; #ifdef AGA if (currprefs.chipset_mask & CSMASK_AGA) { for (i = 0; i < 256; i++) { int v = color_reg_get (colentry, i); if (v < 0 || v > 16777215) continue; colentry->acolors[i] = getxcolor (v); } } else { #endif for (i = 0; i < 32; i++) { int v = color_reg_get (colentry, i); if (v < 0 || v > 4095) continue; colentry->acolors[i] = getxcolor (v); } #ifdef AGA } #endif } extern struct color_entry colors_for_drawing; void notice_new_xcolors (void) { int i; update_mirrors (); docols (¤t_colors); docols (&colors_for_drawing); for (i = 0; i < (MAXVPOS + 1) * 2; i++) { docols (color_tables[0] + i); docols (color_tables[1] + i); } } static void do_sprites (int currhp); static void remember_ctable (void) { /* This can happen when program program crashes very badly */ if (next_color_entry >= COLOR_TABLE_SIZE) return; if (remembered_color_entry < 0) { /* The colors changed since we last recorded a color map. Record a * new one. */ color_reg_cpy (curr_color_tables + next_color_entry, ¤t_colors); remembered_color_entry = next_color_entry++; } thisline_decision.ctable = remembered_color_entry; if (color_src_match < 0 || color_dest_match != remembered_color_entry || line_decisions[next_lineno].ctable != color_src_match) { /* The remembered comparison didn't help us - need to compare again. */ int oldctable = line_decisions[next_lineno].ctable; int changed = 0; if (oldctable < 0) { changed = 1; color_src_match = color_dest_match = -1; } else { color_compare_result = color_reg_cmp (&prev_color_tables[oldctable], ¤t_colors) != 0; if (color_compare_result) changed = 1; color_src_match = oldctable; color_dest_match = remembered_color_entry; } thisline_changed |= changed; } else { /* We know the result of the comparison */ if (color_compare_result) thisline_changed = 1; } } static void remember_ctable_for_border (void) { remember_ctable (); } STATIC_INLINE int get_equ_vblank_endline (void) { return equ_vblank_endline + (equ_vblank_toggle ? (lof_current ? 1 : 0) : 0); } /* Called to determine the state of the horizontal display window state * machine at the current position. It might have changed since we last * checked. */ static void decide_diw (int hpos) { /* Last hpos = hpos + 0.5, eg. normal PAL end hpos is 227.5 * 2 = 455 OCS Denise: 9 bit hdiw counter does not reset during lines 0 to 9 (PAL) or lines 0 to 10 (NTSC). A1000 PAL: 1 to 9, NTSC: 1 to 10. ECS Denise and AGA: no above "features" */ int hdiw = hpos >= maxhpos ? maxhpos * 2 + 1 : hpos * 2 + 2; if (!(currprefs.chipset_mask & CSMASK_ECS_DENISE) && vpos <= get_equ_vblank_endline ()) hdiw = diw_hcounter; /* always mask, bad programs may have set maxhpos = 256 */ hdiw &= 511; for (;;) { int lhdiw = hdiw; if (last_hdiw > lhdiw) lhdiw = 512; if (lhdiw >= diw_hstrt && last_hdiw < diw_hstrt && hdiwstate == DIW_waiting_start) { if (thisline_decision.diwfirstword < 0) thisline_decision.diwfirstword = diwfirstword < 0 ? 0 : diwfirstword; hdiwstate = DIW_waiting_stop; } if (lhdiw >= diw_hstop && last_hdiw < diw_hstop && hdiwstate == DIW_waiting_stop) { if (thisline_decision.diwlastword < 0) thisline_decision.diwlastword = diwlastword < 0 ? 0 : diwlastword; hdiwstate = DIW_waiting_start; } if (lhdiw != 512) break; last_hdiw = 0 - 1; } last_hdiw = hdiw; } static int fetchmode; static int real_bitplane_number[3][3][9]; /* Disable bitplane DMA if planes > available DMA slots. This is needed e.g. by the Sanity WOC demo (at the "Party Effect"). */ STATIC_INLINE int GET_PLANES_LIMIT (uae_u16 bc0) { int res = GET_RES_AGNUS (bc0); int planes = GET_PLANES (bc0); return real_bitplane_number[fetchmode][res][planes]; } /* The HRM says 0xD8, but that can't work... */ #define HARD_DDF_STOP 0xd4 #define HARD_DDF_START 0x18 static void add_modulos (void) { int m1, m2; if (fmode & 0x4000) { if (((diwstrt >> 8) ^ vpos) & 1) m1 = m2 = bpl2mod; else m1 = m2 = bpl1mod; } else { m1 = bpl1mod; m2 = bpl2mod; } switch (bplcon0_planes_limit) { #ifdef AGA case 8: bplpt[7] += m2; bplptx[7] += m2; case 7: bplpt[6] += m1; bplptx[6] += m1; #endif case 6: bplpt[5] += m2; bplptx[5] += m2; case 5: bplpt[4] += m1; bplptx[4] += m1; case 4: bplpt[3] += m2; bplptx[3] += m2; case 3: bplpt[2] += m1; bplptx[2] += m1; case 2: bplpt[1] += m2; bplptx[1] += m2; case 1: bplpt[0] += m1; bplptx[0] += m1; } } static void finish_playfield_line (void) { /* The latter condition might be able to happen in interlaced frames. */ if (vpos >= minfirstline && (thisframe_first_drawn_line < 0 || vpos < thisframe_first_drawn_line)) thisframe_first_drawn_line = vpos; thisframe_last_drawn_line = vpos; #ifdef SMART_UPDATE if (line_decisions[next_lineno].plflinelen != thisline_decision.plflinelen || line_decisions[next_lineno].plfleft != thisline_decision.plfleft || line_decisions[next_lineno].bplcon0 != thisline_decision.bplcon0 || line_decisions[next_lineno].bplcon2 != thisline_decision.bplcon2 #ifdef ECS_DENISE || line_decisions[next_lineno].bplcon3 != thisline_decision.bplcon3 #endif #ifdef AGA || line_decisions[next_lineno].bplcon4 != thisline_decision.bplcon4 #endif ) #endif /* SMART_UPDATE */ thisline_changed = 1; } /* The fetch unit mainly controls ddf stop. It's the number of cycles that are contained in an indivisible block during which ddf is active. E.g. if DDF starts at 0x30, and fetchunit is 8, then possible DDF stops are 0x30 + n * 8. */ static int fetchunit, fetchunit_mask; /* The delay before fetching the same bitplane again. Can be larger than the number of bitplanes; in that case there are additional empty cycles with no data fetch (this happens for high fetchmodes and low resolutions). */ static int fetchstart, fetchstart_shift, fetchstart_mask; /* fm_maxplane holds the maximum number of planes possible with the current fetch mode. This selects the cycle diagram: 8 planes: 73516240 4 planes: 3120 2 planes: 10. */ static int fm_maxplane, fm_maxplane_shift; /* The corresponding values, by fetchmode and display resolution. */ static const int fetchunits[] = { 8,8,8,0, 16,8,8,0, 32,16,8,0 }; static const int fetchstarts[] = { 3,2,1,0, 4,3,2,0, 5,4,3,0 }; static const int fm_maxplanes[] = { 3,2,1,0, 3,3,2,0, 3,3,3,0 }; static int cycle_diagram_table[3][3][9][32]; static int cycle_diagram_free_cycles[3][3][9]; static int cycle_diagram_total_cycles[3][3][9]; static int *curr_diagram; static const int cycle_sequences[3 * 8] = { 2,1,2,1,2,1,2,1, 4,2,3,1,4,2,3,1, 8,4,6,2,7,3,5,1 }; static void debug_cycle_diagram (void) { int fm, res, planes, cycle, v; TCHAR aa; for (fm = 0; fm <= 2; fm++) { write_log (_T("FMODE %d\n=======\n"), fm); for (res = 0; res <= 2; res++) { for (planes = 0; planes <= 8; planes++) { write_log (_T("%d: "),planes); for (cycle = 0; cycle < 32; cycle++) { v=cycle_diagram_table[fm][res][planes][cycle]; if (v==0) aa='-'; else if(v>0) aa='1'; else aa='X'; write_log (_T("%c"),aa); } write_log (_T(" %d:%d\n"), cycle_diagram_free_cycles[fm][res][planes], cycle_diagram_total_cycles[fm][res][planes]); } write_log (_T("\n")); } } fm=0; } static void create_cycle_diagram_table (void) { int fm, res, cycle, planes, rplanes, v; int fetch_start, max_planes, freecycles; const int *cycle_sequence; for (fm = 0; fm <= 2; fm++) { for (res = 0; res <= 2; res++) { max_planes = fm_maxplanes[fm * 4 + res]; fetch_start = 1 << fetchstarts[fm * 4 + res]; cycle_sequence = &cycle_sequences[(max_planes - 1) * 8]; max_planes = 1 << max_planes; for (planes = 0; planes <= 8; planes++) { freecycles = 0; for (cycle = 0; cycle < 32; cycle++) cycle_diagram_table[fm][res][planes][cycle] = -1; if (planes <= max_planes) { for (cycle = 0; cycle < fetch_start; cycle++) { if (cycle < max_planes && planes >= cycle_sequence[cycle & 7]) { v = cycle_sequence[cycle & 7]; } else { v = 0; freecycles++; } cycle_diagram_table[fm][res][planes][cycle] = v; } } cycle_diagram_free_cycles[fm][res][planes] = freecycles; cycle_diagram_total_cycles[fm][res][planes] = fetch_start; rplanes = planes; if (rplanes > max_planes) rplanes = 0; if (rplanes == 7 && fm == 0 && res == 0 && !(currprefs.chipset_mask & CSMASK_AGA)) rplanes = 4; real_bitplane_number[fm][res][planes] = rplanes; } } } #if 0 debug_cycle_diagram (); #endif } /* Used by the copper. */ static int estimated_last_fetch_cycle; static int cycle_diagram_shift; static void estimate_last_fetch_cycle (int hpos) { int fetchunit = fetchunits[fetchmode * 4 + bplcon0_res]; if (plf_state < plf_passed_stop) { int stop = plfstop < hpos || plfstop > HARD_DDF_STOP ? HARD_DDF_STOP : plfstop; /* We know that fetching is up-to-date up until hpos, so we can use fetch_cycle. */ int fetch_cycle_at_stop = fetch_cycle + (stop - hpos); int starting_last_block_at = (fetch_cycle_at_stop + fetchunit - 1) & ~(fetchunit - 1); estimated_last_fetch_cycle = hpos + (starting_last_block_at - fetch_cycle) + fetchunit; } else { int starting_last_block_at = (fetch_cycle + fetchunit - 1) & ~(fetchunit - 1); if (plf_state == plf_passed_stop2) starting_last_block_at -= fetchunit; estimated_last_fetch_cycle = hpos + (starting_last_block_at - fetch_cycle) + fetchunit; } } static uae_u32 outword[MAX_PLANES]; static int out_nbits, out_offs; static uae_u32 todisplay[MAX_PLANES][4]; static uae_u32 fetched[MAX_PLANES]; #ifdef AGA static uae_u32 fetched_aga0[MAX_PLANES]; static uae_u32 fetched_aga1[MAX_PLANES]; #endif /* Expansions from bplcon0/bplcon1. */ static int toscr_res, toscr_nr_planes, toscr_nr_planes2, fetchwidth; static int toscr_delay1, toscr_delay2; /* The number of bits left from the last fetched words. This is an optimization - conceptually, we have to make sure the result is the same as if toscr is called in each clock cycle. However, to speed this up, we accumulate display data; this variable keeps track of how much. Thus, once we do call toscr_nbits (which happens at least every 16 bits), we can do more work at once. */ static int toscr_nbits; /* undocumented bitplane delay hardware feature */ static int delayoffset; STATIC_INLINE void compute_delay_offset (void) { delayoffset = (16 << fetchmode) - (((plfstrt - HARD_DDF_START) & fetchstart_mask) << 1); #if 0 /* maybe we can finally get rid of this stupid table.. */ if (tmp == 4) delayoffset = 4; // Loons Docs else if (tmp == 8) delayoffset = 8; else if (tmp == 12) // Loons Docs delayoffset = 4; else if (tmp == 16) /* Overkill AGA */ delayoffset = 48; else if (tmp == 24) /* AB 2 */ delayoffset = 8; else if (tmp == 32) delayoffset = 32; else if (tmp == 48) /* Pinball Illusions AGA, ingame */ delayoffset = 16; else /* what about 40 and 56? */ delayoffset = 0; //write_log (_T("%d:%d "), vpos, delayoffset); #endif } static void record_color_change2 (int hpos, int regno, unsigned long value) { int pos = hpos * 2; if (regno == 0x1000 + 0x10c) pos++; // BPLCON4 change needs 1 lores pixel delay curr_color_changes[next_color_change].linepos = pos; curr_color_changes[next_color_change].regno = regno; curr_color_changes[next_color_change].value = value; next_color_change++; curr_color_changes[next_color_change].regno = -1; } static bool isehb (uae_u16 bplcon0, uae_u16 bplcon2) { bool bplehb; if (currprefs.chipset_mask & CSMASK_AGA) bplehb = (bplcon0 & 0x7010) == 0x6000; else if (currprefs.chipset_mask & CSMASK_ECS_DENISE) bplehb = ((bplcon0 & 0xFC00) == 0x6000 || (bplcon0 & 0xFC00) == 0x7000); else bplehb = ((bplcon0 & 0xFC00) == 0x6000 || (bplcon0 & 0xFC00) == 0x7000) && !currprefs.cs_denisenoehb; return bplehb; } // OCS/ECS, lores, 7 planes = 4 "real" planes + BPL5DAT and BPL6DAT as static 5th and 6th plane STATIC_INLINE int isocs7planes (void) { return !(currprefs.chipset_mask & CSMASK_AGA) && bplcon0_res == 0 && bplcon0_planes == 7; } int is_bitplane_dma (int hpos) { if (fetch_state == fetch_not_started || hpos < plfstrt) return 0; if ((plf_state == plf_end && hpos >= thisline_decision.plfright) || hpos >= estimated_last_fetch_cycle) return 0; return curr_diagram[(hpos - cycle_diagram_shift) & fetchstart_mask]; } STATIC_INLINE int is_bitplane_dma_inline (int hpos) { if (fetch_state == fetch_not_started || hpos < plfstrt) return 0; if ((plf_state == plf_end && hpos >= thisline_decision.plfright) || hpos >= estimated_last_fetch_cycle) return 0; return curr_diagram[(hpos - cycle_diagram_shift) & fetchstart_mask]; } static void update_denise (int hpos) { toscr_res = GET_RES_DENISE (bplcon0d); if (bplcon0dd != bplcon0d) { record_color_change2 (hpos, 0x100 + 0x1000, bplcon0d); bplcon0dd = bplcon0d; } toscr_nr_planes = GET_PLANES (bplcon0d); if (isocs7planes ()) { if (toscr_nr_planes2 < 6) toscr_nr_planes2 = 6; } else { toscr_nr_planes2 = toscr_nr_planes; } } static int bpldmasetuphpos; static int bpldmasetupphase; /* set currently active Agnus bitplane DMA sequence */ static void setup_fmodes (int hpos) { switch (fmode & 3) { case 0: fetchmode = 0; break; case 1: case 2: fetchmode = 1; break; case 3: fetchmode = 2; break; } badmode = GET_RES_AGNUS (bplcon0) != GET_RES_DENISE (bplcon0); bplcon0_res = GET_RES_AGNUS (bplcon0); bplcon0_planes = GET_PLANES (bplcon0); bplcon0_planes_limit = GET_PLANES_LIMIT (bplcon0); fetchunit = fetchunits[fetchmode * 4 + bplcon0_res]; fetchunit_mask = fetchunit - 1; fetchstart_shift = fetchstarts[fetchmode * 4 + bplcon0_res]; fetchstart = 1 << fetchstart_shift; fetchstart_mask = fetchstart - 1; fm_maxplane_shift = fm_maxplanes[fetchmode * 4 + bplcon0_res]; fm_maxplane = 1 << fm_maxplane_shift; fetch_modulo_cycle = fetchunit - fetchstart; if (is_bitplane_dma (hpos - 1)) cycle_line[hpos - 1] = 1; curr_diagram = cycle_diagram_table[fetchmode][bplcon0_res][bplcon0_planes_limit]; estimate_last_fetch_cycle (hpos); if (bpldmasetuphpos >= 0 && debug_dma) record_dma_event (DMA_EVENT_BPLFETCHUPDATE, hpos, vpos); bpldmasetuphpos = -1; bpldmasetupphase = 0; ddf_change = vpos; } static void BPLCON0_Denise (int hpos, uae_u16 v, bool); // writing to BPLCON0 adds 4 cycle delay before Agnus bitplane DMA sequence changes // (Note that Denise sees the change after 1 cycle) // AGA needs extra cycle in some specific situations (Brian The Lion "dialog") but not // in all situations (Superstardust weapon panel) #define BPLCON_AGNUS_DELAY (4 + (bplcon0_planes == 8 ? 1 : 0)) #define BPLCON_DENISE_DELAY 1 static void maybe_setup_fmodes (int hpos) { switch (bpldmasetupphase) { case 0: BPLCON0_Denise (hpos, bplcon0, false); bpldmasetupphase++; bpldmasetuphpos += BPLCON_AGNUS_DELAY - BPLCON_DENISE_DELAY; break; case 1: setup_fmodes (hpos); break; } } STATIC_INLINE void maybe_check (int hpos) { if (bpldmasetuphpos > 0 && hpos >= bpldmasetuphpos) maybe_setup_fmodes (hpos); } static void bpldmainitdelay (int hpos) { int hposa; hposa = hpos + BPLCON_AGNUS_DELAY; ddf_change = vpos; if (hposa < 0x14) { BPLCON0_Denise (hpos, bplcon0, false); setup_fmodes (hpos); return; } if (bpldmasetuphpos < 0) { bpldmasetupphase = 0; bpldmasetuphpos = hpos + BPLCON_DENISE_DELAY; } } /* Expand bplcon0/bplcon1 into the toscr_xxx variables. */ static void compute_toscr_delay_1 (int bplcon1) { int delay1 = (bplcon1 & 0x0f) | ((bplcon1 & 0x0c00) >> 6); int delay2 = ((bplcon1 >> 4) & 0x0f) | (((bplcon1 >> 4) & 0x0c00) >> 6); int shdelay1 = (bplcon1 >> 12) & 3; int shdelay2 = (bplcon1 >> 8) & 3; int delaymask; int fetchwidth = 16 << fetchmode; delay1 += delayoffset; delay2 += delayoffset; delaymask = (fetchwidth - 1) >> toscr_res; toscr_delay1 = (delay1 & delaymask) << toscr_res; toscr_delay1 |= shdelay1 >> (RES_MAX - toscr_res); toscr_delay2 = (delay2 & delaymask) << toscr_res; toscr_delay2 |= shdelay2 >> (RES_MAX - toscr_res); } static void compute_toscr_delay (int hpos, int bplcon1) { update_denise (hpos); compute_toscr_delay_1 (bplcon1); } STATIC_INLINE void clear_fetchbuffer (uae_u32 *ptr, int nwords) { int i; if (! thisline_changed) { for (i = 0; i < nwords; i++) { if (ptr[i]) { thisline_changed = 1; break; } } } memset (ptr, 0, nwords * 4); } static void update_toscr_planes (void) { if (toscr_nr_planes2 > thisline_decision.nr_planes) { int j; for (j = thisline_decision.nr_planes; j < toscr_nr_planes2; j++) clear_fetchbuffer ((uae_u32 *)(line_data[next_lineno] + 2 * MAX_WORDS_PER_LINE * j), out_offs); thisline_decision.nr_planes = toscr_nr_planes2; } } STATIC_INLINE void maybe_first_bpl1dat (int hpos) { if (thisline_decision.plfleft >= 0) { // early bpl1dat crap fix (Sequential engine animation) if (plfleft_real < 0) { int i; for (i = 0; i < MAX_PLANES; i++) { todisplay[i][0] = 0; #ifdef AGA todisplay[i][1] = 0; todisplay[i][2] = 0; todisplay[i][3] = 0; #endif } plfleft_real = hpos; bpl1dat_early = true; } } else { plfleft_real = thisline_decision.plfleft = hpos; compute_delay_offset (); } } STATIC_INLINE void fetch (int nr, int fm, int hpos) { if (nr < bplcon0_planes_limit) { uaecptr p = bplpt[nr]; bplpt[nr] += 2 << fm; bplptx[nr] += 2 << fm; if (nr == 0) bpl1dat_written = true; #ifdef DEBUGGER if (debug_dma) record_dma (0x110 + nr * 2, chipmem_wget_indirect (p), p, hpos, vpos, DMARECORD_BITPLANE); #endif switch (fm) { case 0: fetched[nr] = bplxdat[nr] = last_custom_value1 = chipmem_wget_indirect (p); break; #ifdef AGA case 1: fetched_aga0[nr] = chipmem_lget_indirect (p); last_custom_value1 = (uae_u16)fetched_aga0[nr]; break; case 2: fetched_aga1[nr] = chipmem_lget_indirect (p); fetched_aga0[nr] = chipmem_lget_indirect (p + 4); last_custom_value1 = (uae_u16)fetched_aga0[nr]; break; #endif } if (plf_state == plf_passed_stop2 && fetch_cycle >= (fetch_cycle & ~fetchunit_mask) + fetch_modulo_cycle) { int mod; if (fmode & 0x4000) { if (((diwstrt >> 8) ^ vpos) & 1) mod = bpl2mod; else mod = bpl1mod; } else if (nr & 1) mod = bpl2mod; else mod = bpl1mod; bplpt[nr] += mod; bplptx[nr] += mod; } } else { // use whatever left in BPLxDAT if no DMA // normally useless but "7-planes" feature won't work without this fetched[nr] = bplxdat[nr]; } } STATIC_INLINE void toscr_3_ecs (int nbits) { int delay1 = toscr_delay1; int delay2 = toscr_delay2; int i; uae_u32 mask = 0xFFFF >> (16 - nbits); for (i = 0; i < toscr_nr_planes2; i += 2) { outword[i] <<= nbits; outword[i] |= (todisplay[i][0] >> (16 - nbits + delay1)) & mask; todisplay[i][0] <<= nbits; } for (i = 1; i < toscr_nr_planes2; i += 2) { outword[i] <<= nbits; outword[i] |= (todisplay[i][0] >> (16 - nbits + delay2)) & mask; todisplay[i][0] <<= nbits; } } STATIC_INLINE void shift32plus (uae_u32 *p, int n) { uae_u32 t = p[1]; t <<= n; t |= p[0] >> (32 - n); p[1] = t; } #ifdef AGA STATIC_INLINE void aga_shift (uae_u32 *p, int n, int fm) { if (fm == 2) { shift32plus (p + 2, n); shift32plus (p + 1, n); } shift32plus (p + 0, n); p[0] <<= n; } STATIC_INLINE void toscr_3_aga (int nbits, int fm) { int delay1 = toscr_delay1; int delay2 = toscr_delay2; int i; uae_u32 mask = 0xFFFF >> (16 - nbits); { int offs = (16 << fm) - nbits + delay1; int off1 = offs >> 5; if (off1 == 3) off1 = 2; offs -= off1 * 32; for (i = 0; i < toscr_nr_planes2; i += 2) { uae_u32 t0 = todisplay[i][off1]; uae_u32 t1 = todisplay[i][off1 + 1]; uae_u64 t = (((uae_u64)t1) << 32) | t0; outword[i] <<= nbits; outword[i] |= (t >> offs) & mask; aga_shift (todisplay[i], nbits, fm); } } { int offs = (16 << fm) - nbits + delay2; int off1 = offs >> 5; if (off1 == 3) off1 = 2; offs -= off1 * 32; for (i = 1; i < toscr_nr_planes2; i += 2) { uae_u32 t0 = todisplay[i][off1]; uae_u32 t1 = todisplay[i][off1 + 1]; uae_u64 t = (((uae_u64)t1) << 32) | t0; outword[i] <<= nbits; outword[i] |= (t >> offs) & mask; aga_shift (todisplay[i], nbits, fm); } } } #endif static void toscr_2_0 (int nbits) { toscr_3_ecs (nbits); } #ifdef AGA static void toscr_2_1 (int nbits) { toscr_3_aga (nbits, 1); } static void toscr_2_2 (int nbits) { toscr_3_aga (nbits, 2); } #endif STATIC_INLINE void toscr_1 (int nbits, int fm) { switch (fm) { case 0: toscr_2_0 (nbits); break; #ifdef AGA case 1: toscr_2_1 (nbits); break; case 2: toscr_2_2 (nbits); break; #endif } out_nbits += nbits; if (out_nbits == 32) { int i; uae_u8 *dataptr = line_data[next_lineno] + out_offs * 4; for (i = 0; i < thisline_decision.nr_planes; i++) { uae_u32 *dataptr32 = (uae_u32 *)dataptr; if (*dataptr32 != outword[i]) { thisline_changed = 1; *dataptr32 = outword[i]; } outword[i] = 0; dataptr += MAX_WORDS_PER_LINE * 2; } out_offs++; out_nbits = 0; } } static void toscr_fm0 (int); static void toscr_fm1 (int); static void toscr_fm2 (int); STATIC_INLINE void toscr (int nbits, int fm) { switch (fm) { case 0: toscr_fm0 (nbits); break; #ifdef AGA case 1: toscr_fm1 (nbits); break; case 2: toscr_fm2 (nbits); break; #endif } } STATIC_INLINE void toscr_0 (int nbits, int fm) { int t; if (nbits > 16) { toscr (16, fm); nbits -= 16; } t = 32 - out_nbits; if (t < nbits) { toscr_1 (t, fm); nbits -= t; } toscr_1 (nbits, fm); } static void toscr_fm0 (int nbits) { toscr_0 (nbits, 0); } static void toscr_fm1 (int nbits) { toscr_0 (nbits, 1); } static void toscr_fm2 (int nbits) { toscr_0 (nbits, 2); } static int flush_plane_data (int fm) { int i = 0; if (out_nbits <= 16) { i += 16; toscr_1 (16, fm); } if (out_nbits != 0) { i += 32 - out_nbits; toscr_1 (32 - out_nbits, fm); } i += 32; toscr_1 (16, fm); toscr_1 (16, fm); if (fm == 2) { /* flush AGA full 64-bit shift register */ i += 32; toscr_1 (16, fm); toscr_1 (16, fm); } if (bpl1dat_early) { // clear possible crap in right border if // bpl1dat was written "out of sync" toscr_1 (16, fm); toscr_1 (16, fm); } return i >> (1 + toscr_res); } STATIC_INLINE void flush_display (int fm) { if (toscr_nbits > 0 && thisline_decision.plfleft >= 0) toscr (toscr_nbits, fm); toscr_nbits = 0; } STATIC_INLINE void fetch_start (int hpos) { fetch_state = fetch_started; } /* Called when all planes have been fetched, i.e. when a new block of data is available to be displayed. The data in fetched[] is moved into todisplay[]. */ STATIC_INLINE void beginning_of_plane_block (int hpos, int fm) { int i; int oleft = thisline_decision.plfleft; static uae_u16 bplcon1t, bplcon1t2; flush_display (fm); if (fm == 0) for (i = 0; i < MAX_PLANES; i++) { todisplay[i][0] |= fetched[i]; } #ifdef AGA else for (i = 0; i < MAX_PLANES; i++) { if (fm == 2) todisplay[i][1] = fetched_aga1[i]; todisplay[i][0] = fetched_aga0[i]; } #endif update_denise (hpos); maybe_first_bpl1dat (hpos); bplcon1t2 = bplcon1t; bplcon1t = bplcon1; // writing to BPLCON1 1 cycle after BPL1DAT access will // not (except first BPL1DAT write) affect the display // until next display block if (bplcon1_hpos != hpos || oleft < 0) bplcon1t2 = bplcon1t; compute_toscr_delay (hpos, bplcon1t2); } #ifdef SPEEDUP /* The usual inlining tricks - don't touch unless you know what you are doing. */ STATIC_INLINE void long_fetch_ecs (int plane, int nwords, int weird_number_of_bits, int dma) { uae_u16 *real_pt = (uae_u16 *)pfield_xlateptr (bplpt[plane], nwords * 2); int delay = (plane & 1) ? toscr_delay2 : toscr_delay1; int tmp_nbits = out_nbits; uae_u32 shiftbuffer = todisplay[plane][0]; uae_u32 outval = outword[plane]; uae_u32 fetchval = fetched[plane]; uae_u32 *dataptr = (uae_u32 *)(line_data[next_lineno] + 2 * plane * MAX_WORDS_PER_LINE + 4 * out_offs); if (dma) { bplpt[plane] += nwords * 2; bplptx[plane] += nwords * 2; } if (real_pt == 0) /* @@@ Don't do this, fall back on chipmem_wget instead. */ return; while (nwords > 0) { int bits_left = 32 - tmp_nbits; uae_u32 t; shiftbuffer |= fetchval; t = (shiftbuffer >> delay) & 0xFFFF; if (weird_number_of_bits && bits_left < 16) { outval <<= bits_left; outval |= t >> (16 - bits_left); thisline_changed |= *dataptr ^ outval; *dataptr++ = outval; outval = t; tmp_nbits = 16 - bits_left; shiftbuffer <<= 16; } else { outval = (outval << 16) | t; shiftbuffer <<= 16; tmp_nbits += 16; if (tmp_nbits == 32) { thisline_changed |= *dataptr ^ outval; *dataptr++ = outval; tmp_nbits = 0; } } nwords--; if (dma) { fetchval = do_get_mem_word (real_pt); real_pt++; } } fetched[plane] = fetchval; todisplay[plane][0] = shiftbuffer; outword[plane] = outval; } #ifdef AGA STATIC_INLINE void long_fetch_aga (int plane, int nwords, int weird_number_of_bits, int fm, int dma) { uae_u32 *real_pt = (uae_u32 *)pfield_xlateptr (bplpt[plane], nwords * 2); int delay = (plane & 1) ? toscr_delay2 : toscr_delay1; int tmp_nbits = out_nbits; uae_u32 *shiftbuffer = todisplay[plane]; uae_u32 outval = outword[plane]; uae_u32 fetchval0 = fetched_aga0[plane]; uae_u32 fetchval1 = fetched_aga1[plane]; uae_u32 *dataptr = (uae_u32 *)(line_data[next_lineno] + 2 * plane * MAX_WORDS_PER_LINE + 4 * out_offs); int offs = (16 << fm) - 16 + delay; int off1 = offs >> 5; if (off1 == 3) off1 = 2; offs -= off1 * 32; if (dma) { bplpt[plane] += nwords * 2; bplptx[plane] += nwords * 2; } if (real_pt == 0) /* @@@ Don't do this, fall back on chipmem_wget instead. */ return; while (nwords > 0) { int i; shiftbuffer[0] = fetchval0; if (fm == 2) shiftbuffer[1] = fetchval1; for (i = 0; i < (1 << fm); i++) { int bits_left = 32 - tmp_nbits; uae_u32 t0 = shiftbuffer[off1]; uae_u32 t1 = shiftbuffer[off1 + 1]; uae_u64 t = (((uae_u64)t1) << 32) | t0; t0 = (uae_u32)((t >> offs) & 0xFFFF); if (weird_number_of_bits && bits_left < 16) { outval <<= bits_left; outval |= t0 >> (16 - bits_left); thisline_changed |= *dataptr ^ outval; *dataptr++ = outval; outval = t0; tmp_nbits = 16 - bits_left; aga_shift (shiftbuffer, 16, fm); } else { outval = (outval << 16) | t0; aga_shift (shiftbuffer, 16, fm); tmp_nbits += 16; if (tmp_nbits == 32) { thisline_changed |= *dataptr ^ outval; *dataptr++ = outval; tmp_nbits = 0; } } } nwords -= 1 << fm; if (dma) { if (fm == 1) fetchval0 = do_get_mem_long (real_pt); else { fetchval1 = do_get_mem_long (real_pt); fetchval0 = do_get_mem_long (real_pt + 1); } real_pt += fm; } } fetched_aga0[plane] = fetchval0; fetched_aga1[plane] = fetchval1; outword[plane] = outval; } #endif static void long_fetch_ecs_0 (int hpos, int nwords, int dma) { long_fetch_ecs (hpos, nwords, 0, dma); } static void long_fetch_ecs_1 (int hpos, int nwords, int dma) { long_fetch_ecs (hpos, nwords, 1, dma); } #ifdef AGA static void long_fetch_aga_1_0 (int hpos, int nwords, int dma) { long_fetch_aga (hpos, nwords, 0, 1, dma); } static void long_fetch_aga_1_1 (int hpos, int nwords, int dma) { long_fetch_aga (hpos, nwords, 1, 1, dma); } static void long_fetch_aga_2_0 (int hpos, int nwords, int dma) { long_fetch_aga (hpos, nwords, 0, 2, dma); } static void long_fetch_aga_2_1 (int hpos, int nwords, int dma) { long_fetch_aga (hpos, nwords, 1, 2, dma); } #endif static void do_long_fetch (int hpos, int nwords, int dma, int fm) { int i; flush_display (fm); switch (fm) { case 0: if (out_nbits & 15) { for (i = 0; i < toscr_nr_planes; i++) long_fetch_ecs_1 (i, nwords, dma); } else { for (i = 0; i < toscr_nr_planes; i++) long_fetch_ecs_0 (i, nwords, dma); } break; #ifdef AGA case 1: if (out_nbits & 15) { for (i = 0; i < toscr_nr_planes; i++) long_fetch_aga_1_1 (i, nwords, dma); } else { for (i = 0; i < toscr_nr_planes; i++) long_fetch_aga_1_0 (i, nwords, dma); } break; case 2: if (out_nbits & 15) { for (i = 0; i < toscr_nr_planes; i++) long_fetch_aga_2_1 (i, nwords, dma); } else { for (i = 0; i < toscr_nr_planes; i++) long_fetch_aga_2_0 (i, nwords, dma); } break; #endif } out_nbits += nwords * 16; out_offs += out_nbits >> 5; out_nbits &= 31; if (dma && toscr_nr_planes > 0) fetch_state = fetch_was_plane0; } #endif /* make sure fetch that goes beyond maxhpos is finished */ static void finish_final_fetch (int pos, int fm) { if (thisline_decision.plfleft < 0) return; if (plf_state == plf_end) return; plf_state = plf_end; ddfstate = DIW_waiting_start; pos += flush_plane_data (fm); thisline_decision.plfright = pos; thisline_decision.plflinelen = out_offs; finish_playfield_line (); } STATIC_INLINE int one_fetch_cycle_0 (int pos, int ddfstop_to_test, int dma, int fm) { if (plf_state < plf_passed_stop && pos == ddfstop_to_test) plf_state = plf_passed_stop; if ((fetch_cycle & fetchunit_mask) == 0) { if (plf_state == plf_passed_stop2) { finish_final_fetch (pos, fm); return 1; } if (plf_state == plf_passed_stop) { plf_state = plf_passed_stop2; } else if (plf_state == plf_passed_stop2) { plf_state = plf_end; } } maybe_check (pos); if (dma) { /* fetchstart_mask can be larger than fm_maxplane if FMODE > 0. This means that the remaining cycles are idle; we'll fall through the whole switch without doing anything. */ int cycle_start = fetch_cycle & fetchstart_mask; switch (fm_maxplane) { case 8: switch (cycle_start) { case 0: fetch (7, fm, pos); break; case 1: fetch (3, fm, pos); break; case 2: fetch (5, fm, pos); break; case 3: fetch (1, fm, pos); break; case 4: fetch (6, fm, pos); break; case 5: fetch (2, fm, pos); break; case 6: fetch (4, fm, pos); break; case 7: fetch (0, fm, pos); break; } break; case 4: switch (cycle_start) { case 0: fetch (3, fm, pos); break; case 1: fetch (1, fm, pos); break; case 2: fetch (2, fm, pos); break; case 3: fetch (0, fm, pos); break; } break; case 2: switch (cycle_start) { case 0: fetch (1, fm, pos); break; case 1: fetch (0, fm, pos); break; } break; } } if (bpl1dat_written) { // do this here because if program plays with BPLCON0 during scanline // it is possible that one DMA BPL1DAT write is completely missed // and we must not draw anything at all in next dma block if this happens // (Disposable Hero titlescreen) fetch_state = fetch_was_plane0; bpl1dat_written = false; } fetch_cycle++; toscr_nbits += 2 << toscr_res; if (toscr_nbits > 16) { uae_abort (_T("toscr_nbits > 16 (%d)"), toscr_nbits); toscr_nbits = 0; } if (toscr_nbits == 16) flush_display (fm); return 0; } static int one_fetch_cycle_fm0 (int pos, int ddfstop_to_test, int dma) { return one_fetch_cycle_0 (pos, ddfstop_to_test, dma, 0); } static int one_fetch_cycle_fm1 (int pos, int ddfstop_to_test, int dma) { return one_fetch_cycle_0 (pos, ddfstop_to_test, dma, 1); } static int one_fetch_cycle_fm2 (int pos, int ddfstop_to_test, int dma) { return one_fetch_cycle_0 (pos, ddfstop_to_test, dma, 2); } STATIC_INLINE int one_fetch_cycle (int pos, int ddfstop_to_test, int dma, int fm) { switch (fm) { case 0: return one_fetch_cycle_fm0 (pos, ddfstop_to_test, dma); #ifdef AGA case 1: return one_fetch_cycle_fm1 (pos, ddfstop_to_test, dma); case 2: return one_fetch_cycle_fm2 (pos, ddfstop_to_test, dma); #endif default: uae_abort (_T("fm corrupt")); return 0; } } static void update_bpldats (int hpos) { for (int i = 0; i < MAX_PLANES; i++) { #ifdef AGA fetched_aga0[i] = bplxdat[i]; fetched_aga1[i] = 0; #endif fetched[i] = bplxdat[i]; } beginning_of_plane_block (hpos, fetchmode); } static void update_fetch_x (int until, int fm) { int pos; if (nodraw ()) return; pos = last_fetch_hpos; update_toscr_planes (); // not optimized, update_fetch_x() is extremely rarely used. for (; pos < until; pos++) { toscr_nbits += 2 << toscr_res; if (toscr_nbits > 16) { uae_abort (_T("xtoscr_nbits > 16 (%d)"), toscr_nbits); toscr_nbits = 0; } if (toscr_nbits == 16) flush_display (fm); } if (until >= maxhpos) { finish_final_fetch (pos, fm); return; } flush_display (fm); } STATIC_INLINE void update_fetch (int until, int fm) { int pos; int dma = dmaen (DMA_BITPLANE); int ddfstop_to_test; if (nodraw () || plf_state == plf_end) return; /* We need an explicit test against HARD_DDF_STOP here to guard against programs that move the DDFSTOP before our current position before we reach it. */ ddfstop_to_test = HARD_DDF_STOP; if (ddfstop >= last_fetch_hpos && plfstop < ddfstop_to_test) ddfstop_to_test = plfstop; update_toscr_planes (); pos = last_fetch_hpos; cycle_diagram_shift = last_fetch_hpos - fetch_cycle; /* First, a loop that prepares us for the speedup code. We want to enter the SPEEDUP case with fetch_state == fetch_was_plane0, and then unroll whole blocks, so that we end on the same fetch_state again. */ for (; ; pos++) { if (pos == until) { if (until >= maxhpos) { finish_final_fetch (pos, fm); return; } flush_display (fm); return; } if (fetch_state == fetch_was_plane0) break; fetch_start (pos); if (one_fetch_cycle (pos, ddfstop_to_test, dma, fm)) return; } #ifdef SPEEDUP /* Unrolled version of the for loop below. */ if (plf_state < plf_passed_stop && ddf_change != vpos && ddf_change + 1 != vpos && dma && (fetch_cycle & fetchstart_mask) == (fm_maxplane & fetchstart_mask) && !badmode && !debug_dma # if 0 /* @@@ We handle this case, but the code would be simpler if we * disallowed it - it may even be possible to guarantee that * this condition never is false. Later. */ && (out_nbits & 15) == 0 # endif && toscr_nr_planes == thisline_decision.nr_planes) { int offs = (pos - fetch_cycle) & fetchunit_mask; int ddf2 = ((ddfstop_to_test - offs + fetchunit - 1) & ~fetchunit_mask) + offs; int ddf3 = ddf2 + fetchunit; int stop = until < ddf2 ? until : until < ddf3 ? ddf2 : ddf3; int count; count = stop - pos; if (count >= fetchstart) { count &= ~fetchstart_mask; if (thisline_decision.plfleft < 0) { compute_delay_offset (); compute_toscr_delay_1 (bplcon1); } do_long_fetch (pos, count >> (3 - toscr_res), dma, fm); /* This must come _after_ do_long_fetch so as not to confuse flush_display into thinking the first fetch has produced any output worth emitting to the screen. But the calculation of delay_offset must happen _before_. */ maybe_first_bpl1dat (pos); if (pos <= ddfstop_to_test && pos + count > ddfstop_to_test) plf_state = plf_passed_stop; if (pos <= ddfstop_to_test && pos + count > ddf2) plf_state = plf_passed_stop2; if (pos <= ddf2 && pos + count >= ddf2 + fm_maxplane) add_modulos (); pos += count; fetch_cycle += count; } } else { #endif #ifdef SPEEDUP } #endif for (; pos < until; pos++) { if (fetch_state == fetch_was_plane0) { beginning_of_plane_block (pos, fm); estimate_last_fetch_cycle (pos); } fetch_start (pos); if (one_fetch_cycle (pos, ddfstop_to_test, dma, fm)) return; } if (until >= maxhpos) { finish_final_fetch (pos, fm); return; } flush_display (fm); } static void update_fetch_0 (int hpos) { update_fetch (hpos, 0); } static void update_fetch_1 (int hpos) { update_fetch (hpos, 1); } static void update_fetch_2 (int hpos) { update_fetch (hpos, 2); } STATIC_INLINE void decide_fetch (int hpos) { if (hpos > last_fetch_hpos) { if (fetch_state != fetch_not_started) { switch (fetchmode) { case 0: update_fetch_0 (hpos); break; #ifdef AGA case 1: update_fetch_1 (hpos); break; case 2: update_fetch_2 (hpos); break; #endif default: uae_abort (_T("fetchmode corrupt")); } } else if (bpl1dat_written_at_least_once) { // "PIO" mode display update_fetch_x (hpos, fetchmode); bpl1dat_written = false; } maybe_check (hpos); last_fetch_hpos = hpos; } } static void reset_bpl_vars (void) { out_nbits = 0; out_offs = 0; toscr_nbits = 0; thisline_decision.bplres = bplcon0_res; } static void start_bpl_dma (int hpos, int hstart) { if (first_bpl_vpos < 0) first_bpl_vpos = vpos; if (doflickerfix () && interlace_seen > 0 && !scandoubled_line) { int i; for (i = 0; i < 8; i++) { prevbpl[lof_current][vpos][i] = bplptx[i]; if (!lof_current && (bplcon0 & 4)) bplpt[i] = prevbpl[1 - lof_current][vpos][i]; if (!(bplcon0 & 4) || interlace_seen < 0) prevbpl[1 - lof_current][vpos][i] = prevbpl[lof_current][vpos][i] = 0; } } plfstrt_sprite = plfstrt; fetch_start (hpos); fetch_cycle = 0; ddfstate = DIW_waiting_stop; compute_toscr_delay (last_fetch_hpos, bplcon1); /* If someone already wrote BPL1DAT, clear the area between that point and the real fetch start. */ if (bpl1dat_written_at_least_once && hstart > last_fetch_hpos) { update_fetch_x (hstart, fetchmode); bpl1dat_written_at_least_once = false; } else { reset_bpl_vars (); } #if 0 if (!nodraw ()) { if (thisline_decision.plfleft >= 0) { out_nbits = (plfstrt - thisline_decision.plfleft) << (1 + toscr_res); out_offs = out_nbits >> 5; out_nbits &= 31; } update_toscr_planes (); } #endif last_fetch_hpos = hstart; cycle_diagram_shift = hstart; } /* this may turn on datafetch if program turns dma on during the ddf */ static void maybe_start_bpl_dma (int hpos) { /* OCS: BPL DMA never restarts if DMA is turned on during DDF * ECS/AGA: BPL DMA restarts but only if DMA was turned off outside of DDF or during current line, otherwise display processing jumps immediately to "DDFSTOP passed"-condition */ if (!(currprefs.chipset_mask & CSMASK_ECS_AGNUS)) return; if (fetch_state != fetch_not_started) return; if (diwstate != DIW_waiting_stop) return; if (hpos <= plfstrt) return; if (hpos > plfstop - fetchunit) return; if (ddfstate != DIW_waiting_start) plf_state = plf_passed_stop; start_bpl_dma (hpos, hpos); } /* This function is responsible for turning on datafetch if necessary. */ STATIC_INLINE void decide_line (int hpos) { /* Take care of the vertical DIW. */ if (vpos == plffirstline) { diwstate = DIW_waiting_stop; ddf_change = vpos; } if (vpos == plflastline) { diwstate = DIW_waiting_start; ddf_change = vpos; } if (hpos <= last_decide_line_hpos) return; if (fetch_state == fetch_not_started && (diwstate == DIW_waiting_stop || (currprefs.chipset_mask & CSMASK_ECS_AGNUS))) { int ok = 0; if (last_decide_line_hpos < plfstrt_start && hpos >= plfstrt_start) { if (plf_state == plf_idle) plf_state = plf_start; } if (last_decide_line_hpos < plfstrt && hpos >= plfstrt) { if (plf_state == plf_start) plf_state = plf_active; if (plf_state == plf_active) ok = 1; /* hack warning.. Writing to DDFSTRT when DMA should start must be ignored * (correct fix would be emulate this delay for every custom register, but why bother..) */ if (hpos - 2 == ddfstrt_old_hpos) ok = 0; } if (ok && diwstate == DIW_waiting_stop) { if (dmaen (DMA_BITPLANE)) { start_bpl_dma (hpos, plfstrt); estimate_last_fetch_cycle (plfstrt); } last_decide_line_hpos = hpos; #ifndef CUSTOM_SIMPLE do_sprites (hpos); #endif return; } } #ifndef CUSTOM_SIMPLE if (hpos > last_sprite_hpos && last_sprite_hpos < SPR0_HPOS + 4 * MAX_SPRITES) do_sprites (hpos); #endif last_decide_line_hpos = hpos; } /* Called when a color is about to be changed (write to a color register), * but the new color has not been entered into the table yet. */ static void record_color_change (int hpos, int regno, unsigned long value) { if (regno < 0x1000 && nodraw ()) return; /* Early positions don't appear on-screen. */ if (vpos < minfirstline) return; decide_diw (hpos); decide_line (hpos); if (thisline_decision.ctable < 0) remember_ctable (); if ((regno < 0x1000 || regno == 0x1000 + 0x10c) && hpos < HBLANK_OFFSET && !(beamcon0 & 0x80) && prev_lineno >= 0) { struct draw_info *pdip = curr_drawinfo + prev_lineno; int idx = pdip->last_color_change; int extrahpos = regno == 0x1000 + 0x10c ? 1 : 0; bool lastsync = false; /* Move color changes in horizontal cycles 0 to HBLANK_OFFSET to end of previous line. * Cycles 0 to HBLANK_OFFSET are visible in right border on real Amigas. (because of late hsync) */ if (curr_color_changes[idx - 1].regno == 0xffff) { idx--; lastsync = true; } pdip->last_color_change++; pdip->nr_color_changes++; curr_color_changes[idx].linepos = (hpos + maxhpos) * 2 + extrahpos; curr_color_changes[idx].regno = regno; curr_color_changes[idx].value = value; if (lastsync) { curr_color_changes[idx + 1].linepos = hsyncstartpos * 2; curr_color_changes[idx + 1].regno = 0xffff; curr_color_changes[idx + 2].regno = -1; } else { curr_color_changes[idx + 1].regno = -1; } } record_color_change2 (hpos, regno, value); } static bool isbrdblank (int hpos, uae_u16 bplcon0, uae_u16 bplcon3) { bool brdblank; #ifdef ECS_DENISE brdblank = (currprefs.chipset_mask & CSMASK_ECS_DENISE) && (bplcon0 & 1) && (bplcon3 & 0x20); #else brdblank = false; #endif if (hpos >= 0 && current_colors.borderblank != brdblank) { record_color_change (hpos, 0, COLOR_CHANGE_BRDBLANK | (brdblank ? 1 : 0)); current_colors.borderblank = brdblank; remembered_color_entry = -1; } return brdblank; } static void record_register_change (int hpos, int regno, uae_u16 value) { if (regno == 0x100) { // BPLCON0 if (value & 0x800) thisline_decision.ham_seen = 1; thisline_decision.ehb_seen = isehb (value, bplcon2); isbrdblank (hpos, value, bplcon3); } else if (regno == 0x104) { // BPLCON2 thisline_decision.ehb_seen = isehb (bplcon0, value); } else if (regno == 0x106) { // BPLCON3 isbrdblank (hpos, bplcon0, value); } record_color_change (hpos, regno + 0x1000, value); } typedef int sprbuf_res_t, cclockres_t, hwres_t, bplres_t; static int expand_sprres (uae_u16 con0, uae_u16 con3) { int res; switch ((con3 >> 6) & 3) { default: res = RES_LORES; break; #ifdef ECS_DENISE case 0: /* ECS defaults (LORES,HIRES=LORES sprite,SHRES=HIRES sprite) */ if ((currprefs.chipset_mask & CSMASK_ECS_DENISE) && GET_RES_DENISE (con0) == RES_SUPERHIRES) res = RES_HIRES; else res = RES_LORES; break; #endif #ifdef AGA case 1: res = RES_LORES; break; case 2: res = RES_HIRES; break; case 3: res = RES_SUPERHIRES; break; #endif } return res; } /* handle very rarely needed playfield collision (CLXDAT bit 0) */ /* only known game needing this is Rotor */ static void do_playfield_collisions (void) { int bplres = bplcon0_res; hwres_t ddf_left = thisline_decision.plfleft * 2 << bplres; hwres_t hw_diwlast = coord_window_to_diw_x (thisline_decision.diwlastword); hwres_t hw_diwfirst = coord_window_to_diw_x (thisline_decision.diwfirstword); int i, collided, minpos, maxpos; #ifdef AGA int planes = (currprefs.chipset_mask & CSMASK_AGA) ? 8 : 6; #else int planes = 6; #endif if (clxcon_bpl_enable == 0) { clxdat |= 1; return; } if (clxdat & 1) return; collided = 0; minpos = thisline_decision.plfleft * 2; if (minpos < hw_diwfirst) minpos = hw_diwfirst; maxpos = thisline_decision.plfright * 2; if (maxpos > hw_diwlast) maxpos = hw_diwlast; for (i = minpos; i < maxpos && !collided; i+= 32) { int offs = ((i << bplres) - ddf_left) >> 3; int j; uae_u32 total = 0xffffffff; for (j = 0; j < planes; j++) { int ena = (clxcon_bpl_enable >> j) & 1; int match = (clxcon_bpl_match >> j) & 1; uae_u32 t = 0xffffffff; if (ena) { if (j < thisline_decision.nr_planes) { t = *(uae_u32 *)(line_data[next_lineno] + offs + 2 * j * MAX_WORDS_PER_LINE); t ^= (match & 1) - 1; } else { t = (match & 1) - 1; } } total &= t; } if (total) { collided = 1; #if 0 { int k; for (k = 0; k < 1; k++) { uae_u32 *ldata = (uae_u32 *)(line_data[next_lineno] + offs + 2 * k * MAX_WORDS_PER_LINE); *ldata ^= 0x5555555555; } } #endif } } if (collided) clxdat |= 1; } /* Sprite-to-sprite collisions are taken care of in record_sprite. This one does playfield/sprite collisions. */ static void do_sprite_collisions (void) { int nr_sprites = curr_drawinfo[next_lineno].nr_sprites; int first = curr_drawinfo[next_lineno].first_sprite_entry; int i; unsigned int collision_mask = clxmask[clxcon >> 12]; int bplres = bplcon0_res; hwres_t ddf_left = thisline_decision.plfleft * 2 << bplres; hwres_t hw_diwlast = coord_window_to_diw_x (thisline_decision.diwlastword); hwres_t hw_diwfirst = coord_window_to_diw_x (thisline_decision.diwfirstword); if (clxcon_bpl_enable == 0) { clxdat |= 0x1FE; return; } for (i = 0; i < nr_sprites; i++) { struct sprite_entry *e = curr_sprite_entries + first + i; sprbuf_res_t j; sprbuf_res_t minpos = e->pos; sprbuf_res_t maxpos = e->max; hwres_t minp1 = minpos >> sprite_buffer_res; hwres_t maxp1 = maxpos >> sprite_buffer_res; if (maxp1 > hw_diwlast) maxpos = hw_diwlast << sprite_buffer_res; if (maxp1 > thisline_decision.plfright * 2) maxpos = thisline_decision.plfright * 2 << sprite_buffer_res; if (minp1 < hw_diwfirst) minpos = hw_diwfirst << sprite_buffer_res; if (minp1 < thisline_decision.plfleft * 2) minpos = thisline_decision.plfleft * 2 << sprite_buffer_res; for (j = minpos; j < maxpos; j++) { int sprpix = spixels[e->first_pixel + j - e->pos] & collision_mask; int k, offs, match = 1; if (sprpix == 0) continue; offs = ((j << bplres) >> sprite_buffer_res) - ddf_left; sprpix = sprite_ab_merge[sprpix & 255] | (sprite_ab_merge[sprpix >> 8] << 2); sprpix <<= 1; /* Loop over number of playfields. */ for (k = 1; k >= 0; k--) { int l; #ifdef AGA int planes = (currprefs.chipset_mask & CSMASK_AGA) ? 8 : 6; #else int planes = 6; #endif if (bplcon0 & 0x400) match = 1; for (l = k; match && l < planes; l += 2) { int t = 0; if (l < thisline_decision.nr_planes) { uae_u32 *ldata = (uae_u32 *)(line_data[next_lineno] + 2 * l * MAX_WORDS_PER_LINE); uae_u32 word = ldata[offs >> 5]; t = (word >> (31 - (offs & 31))) & 1; #if 0 /* debug: draw collision mask */ if (1) { int m; for (m = 0; m < 5; m++) { ldata = (uae_u32 *)(line_data[next_lineno] + 2 * m * MAX_WORDS_PER_LINE); ldata[(offs >> 5) + 1] |= 15 << (31 - (offs & 31)); } } #endif } if (clxcon_bpl_enable & (1 << l)) { if (t != ((clxcon_bpl_match >> l) & 1)) match = 0; } } if (match) { #if 0 /* debug: mark lines where collisions are detected */ if (0) { int l; for (l = 0; l < 5; l++) { uae_u32 *ldata = (uae_u32 *)(line_data[next_lineno] + 2 * l * MAX_WORDS_PER_LINE); ldata[(offs >> 5) + 1] |= 15 << (31 - (offs & 31)); } } #endif clxdat |= sprpix << (k * 4); } } } } #if 0 { static int olx; if (clxdat != olx) write_log (_T("%d: %04X\n"), vpos, clxdat); olx = clxdat; } #endif } STATIC_INLINE void record_sprite_1 (int sprxp, uae_u16 *buf, uae_u32 datab, int num, int dbl, unsigned int mask, int do_collisions, uae_u32 collision_mask) { int j = 0; while (datab) { unsigned int col = 0; unsigned coltmp = 0; if ((sprxp >= sprite_minx && sprxp < sprite_maxx) || (bplcon3 & 2)) col = (datab & 3) << (2 * num); #if 0 if (sprxp == sprite_minx || sprxp == sprite_maxx - 1) col ^= (uaerand () << 16) | uaerand (); #endif if ((j & mask) == 0) { unsigned int tmp = (*buf) | col; *buf++ = tmp; if (do_collisions) coltmp |= tmp; sprxp++; } if (dbl > 0) { unsigned int tmp = (*buf) | col; *buf++ = tmp; if (do_collisions) coltmp |= tmp; sprxp++; } if (dbl > 1) { unsigned int tmp; tmp = (*buf) | col; *buf++ = tmp; if (do_collisions) coltmp |= tmp; tmp = (*buf) | col; *buf++ = tmp; if (do_collisions) coltmp |= tmp; sprxp++; sprxp++; } j++; datab >>= 2; if (do_collisions) { coltmp &= collision_mask; if (coltmp) { unsigned int shrunk_tmp = sprite_ab_merge[coltmp & 255] | (sprite_ab_merge[coltmp >> 8] << 2); clxdat |= sprclx[shrunk_tmp]; } } } } /* DATAB contains the sprite data; 16 pixels in two-bit packets. Bits 0/1 determine the color of the leftmost pixel, bits 2/3 the color of the next etc. This function assumes that for all sprites in a given line, SPRXP either stays equal or increases between successive calls. The data is recorded either in lores pixels (if OCS/ECS), or in hires or superhires pixels (if AGA). */ static void record_sprite (int line, int num, int sprxp, uae_u16 *data, uae_u16 *datb, unsigned int ctl) { struct sprite_entry *e = curr_sprite_entries + next_sprite_entry; int i; int word_offs; uae_u32 collision_mask; int width, dbl, half; unsigned int mask = 0; int attachment; half = 0; dbl = sprite_buffer_res - sprres; if (dbl < 0) { half = -dbl; dbl = 0; mask = 1 << half; } width = (sprite_width << sprite_buffer_res) >> sprres; attachment = sprctl[num | 1] & 0x80; /* Try to coalesce entries if they aren't too far apart */ if (!next_sprite_forced && e[-1].max + sprite_width >= sprxp) { e--; } else { next_sprite_entry++; e->pos = sprxp; e->has_attached = 0; } if (sprxp < e->pos) uae_abort (_T("sprxp < e->pos")); e->max = sprxp + width; e[1].first_pixel = e->first_pixel + ((e->max - e->pos + 3) & ~3); next_sprite_forced = 0; collision_mask = clxmask[clxcon >> 12]; word_offs = e->first_pixel + sprxp - e->pos; for (i = 0; i < sprite_width; i += 16) { unsigned int da = *data; unsigned int db = *datb; uae_u32 datab = ((sprtaba[da & 0xFF] << 16) | sprtaba[da >> 8] | (sprtabb[db & 0xFF] << 16) | sprtabb[db >> 8]); int off = (i << dbl) >> half; uae_u16 *buf = spixels + word_offs + off; if (currprefs.collision_level > 0 && collision_mask) record_sprite_1 (sprxp + off, buf, datab, num, dbl, mask, 1, collision_mask); else record_sprite_1 (sprxp + off, buf, datab, num, dbl, mask, 0, collision_mask); data++; datb++; } /* We have 8 bits per pixel in spixstate, two for every sprite pair. The low order bit records whether the attach bit was set for this pair. */ if (attachment && !ecsshres ()) { uae_u32 state = 0x01010101 << (num & ~1); uae_u8 *stb1 = spixstate.bytes + word_offs; for (i = 0; i < width; i += 8) { stb1[0] |= state; stb1[1] |= state; stb1[2] |= state; stb1[3] |= state; stb1[4] |= state; stb1[5] |= state; stb1[6] |= state; stb1[7] |= state; stb1 += 8; } e->has_attached = 1; } } static void add_sprite (int *countp, int num, int sprxp, int posns[], int nrs[]) { int count = *countp; int j, bestp; /* Sort the sprites in order of ascending X position before recording them. */ for (bestp = 0; bestp < count; bestp++) { if (posns[bestp] > sprxp) break; if (posns[bestp] == sprxp && nrs[bestp] < num) break; } for (j = count; j > bestp; j--) { posns[j] = posns[j - 1]; nrs[j] = nrs[j - 1]; } posns[j] = sprxp; nrs[j] = num; count++; *countp = count; } static int tospritexdiw (int diw) { return coord_window_to_hw_x (diw - (DIW_DDF_OFFSET << lores_shift)) << sprite_buffer_res; } static int tospritexddf (int ddf) { return (ddf * 2) << sprite_buffer_res; } static int fromspritexdiw (int ddf) { return coord_hw_to_window_x (ddf >> sprite_buffer_res) + (DIW_DDF_OFFSET << lores_shift); } static void calcsprite (void) { sprite_maxx = 0x7fff; sprite_minx = 0; if (thisline_decision.diwlastword >= 0) sprite_maxx = tospritexdiw (thisline_decision.diwlastword); if (thisline_decision.diwfirstword >= 0) sprite_minx = tospritexdiw (thisline_decision.diwfirstword); if (thisline_decision.plfleft >= 0) { int min, max; min = tospritexddf (thisline_decision.plfleft); max = tospritexddf (thisline_decision.plfright); if (min > sprite_minx && min < max) /* min < max = full line ddf */ sprite_minx = min; /* sprites are visible from first BPL1DAT write to end of line * (undocumented feature) */ } } static void decide_sprites (int hpos) { int nrs[MAX_SPRITES * 2], posns[MAX_SPRITES * 2]; int count, i; /* apparantly writes to custom registers happen in the 3/4th of cycle * and sprite xpos comparator sees it immediately */ int point = hpos * 2 - 3; int width = sprite_width; int sscanmask = 0x100 << sprite_buffer_res; int gotdata = 0; if (thisline_decision.plfleft < 0 && !(bplcon3 & 2)) return; if (nodraw () || hpos < 0x14 || nr_armed == 0 || point == last_sprite_point) return; decide_diw (hpos); decide_line (hpos); calcsprite (); count = 0; for (i = 0; i < MAX_SPRITES; i++) { int sprxp = (fmode & 0x8000) ? (spr[i].xpos & ~sscanmask) : spr[i].xpos; int hw_xp = sprxp >> sprite_buffer_res; if (spr[i].xpos < 0) continue; if (!((debug_sprite_mask & magic_sprite_mask) & (1 << i))) continue; if (! spr[i].armed) continue; if (hw_xp > last_sprite_point && hw_xp <= point) add_sprite (&count, i, sprxp, posns, nrs); /* SSCAN2-bit is fun.. */ if ((fmode & 0x8000) && !(sprxp & sscanmask)) { sprxp |= sscanmask; hw_xp = sprxp >> sprite_buffer_res; if (hw_xp > last_sprite_point && hw_xp <= point) add_sprite (&count, MAX_SPRITES + i, sprxp, posns, nrs); } } for (i = 0; i < count; i++) { int nr = nrs[i] & (MAX_SPRITES - 1); record_sprite (next_lineno, nr, posns[i], sprdata[nr], sprdatb[nr], sprctl[nr]); /* get left and right sprite edge if brdsprt enabled */ #if AUTOSCALE_SPRITES if (dmaen (DMA_SPRITE) && (bplcon0 & 1) && (bplcon3 & 0x02) && !(bplcon3 & 0x20) && nr > 0) { int j, jj; for (j = 0, jj = 0; j < sprite_width; j+= 16, jj++) { int nx = fromspritexdiw (posns[i] + j); if (sprdata[nr][jj] || sprdatb[nr][jj]) { if (diwfirstword_total > nx && nx >= (48 << currprefs.gfx_resolution)) diwfirstword_total = nx; if (diwlastword_total < nx + 16 && nx <= (448 << currprefs.gfx_resolution)) diwlastword_total = nx + 16; } } gotdata = 1; } #endif } last_sprite_point = point; #if AUTOSCALE_SPRITES /* get upper and lower sprite position if brdsprt enabled */ if (gotdata) { if (vpos < first_planes_vpos) first_planes_vpos = vpos; if (vpos < plffirstline_total) plffirstline_total = vpos; if (vpos > last_planes_vpos) last_planes_vpos = vpos; if (vpos > plflastline_total) plflastline_total = vpos; } #endif } STATIC_INLINE int sprites_differ (struct draw_info *dip, struct draw_info *dip_old) { struct sprite_entry *this_first = curr_sprite_entries + dip->first_sprite_entry; struct sprite_entry *this_last = curr_sprite_entries + dip->last_sprite_entry; struct sprite_entry *prev_first = prev_sprite_entries + dip_old->first_sprite_entry; int npixels; int i; if (dip->nr_sprites != dip_old->nr_sprites) return 1; if (dip->nr_sprites == 0) return 0; for (i = 0; i < dip->nr_sprites; i++) { if (this_first[i].pos != prev_first[i].pos || this_first[i].max != prev_first[i].max || this_first[i].has_attached != prev_first[i].has_attached) return 1; } npixels = this_last->first_pixel + (this_last->max - this_last->pos) - this_first->first_pixel; if (memcmp (spixels + this_first->first_pixel, spixels + prev_first->first_pixel, npixels * sizeof (uae_u16)) != 0) return 1; if (memcmp (spixstate.bytes + this_first->first_pixel, spixstate.bytes + prev_first->first_pixel, npixels) != 0) return 1; return 0; } STATIC_INLINE int color_changes_differ (struct draw_info *dip, struct draw_info *dip_old) { if (dip->nr_color_changes != dip_old->nr_color_changes) return 1; if (dip->nr_color_changes == 0) return 0; if (memcmp (curr_color_changes + dip->first_color_change, prev_color_changes + dip_old->first_color_change, dip->nr_color_changes * sizeof *curr_color_changes) != 0) return 1; return 0; } /* End of a horizontal scan line. Finish off all decisions that were not * made yet. */ static void finish_decisions (void) { struct draw_info *dip; struct draw_info *dip_old; struct decision *dp; int changed; int hpos = maxhpos; if (nodraw ()) return; decide_diw (hpos); decide_line (hpos); decide_fetch (hpos); record_color_change2 (hsyncstartpos, 0xffff, 0); if (thisline_decision.plfleft >= 0 && thisline_decision.plflinelen < 0) { if (fetch_state != fetch_not_started) { write_log (_T("fetch_state=%d plfleft=%d,len=%d,vpos=%d,hpos=%d\n"), fetch_state, thisline_decision.plfleft, thisline_decision.plflinelen, vpos, hpos); uae_abort (_T("fetch_state != fetch_not_started")); } thisline_decision.plfright = thisline_decision.plfleft; thisline_decision.plflinelen = 0; thisline_decision.bplres = RES_LORES; } /* Large DIWSTOP values can cause the stop position never to be * reached, so the state machine always stays in the same state and * there's a more-or-less full-screen DIW. */ if (hdiwstate == DIW_waiting_stop) { thisline_decision.diwlastword = max_diwlastword; if (thisline_decision.diwfirstword < 0) thisline_decision.diwfirstword = 0; } if (thisline_decision.diwfirstword != line_decisions[next_lineno].diwfirstword) MARK_LINE_CHANGED; if (thisline_decision.diwlastword != line_decisions[next_lineno].diwlastword) MARK_LINE_CHANGED; dip = curr_drawinfo + next_lineno; dip_old = prev_drawinfo + next_lineno; dp = line_decisions + next_lineno; changed = thisline_changed; if (thisline_decision.plfleft >= 0 && thisline_decision.nr_planes > 0) record_diw_line (thisline_decision.plfleft, diwfirstword, diwlastword); decide_sprites (hpos + 1); dip->last_sprite_entry = next_sprite_entry; dip->last_color_change = next_color_change; if (thisline_decision.ctable < 0) { if (thisline_decision.plfleft < 0) remember_ctable_for_border (); else remember_ctable (); } dip->nr_color_changes = next_color_change - dip->first_color_change; dip->nr_sprites = next_sprite_entry - dip->first_sprite_entry; if (thisline_decision.plfleft != line_decisions[next_lineno].plfleft) changed = 1; if (! changed && color_changes_differ (dip, dip_old)) changed = 1; if (!changed && /* bitplane visible in this line OR border sprites enabled */ (thisline_decision.plfleft >= 0 || ((thisline_decision.bplcon0 & 1) && (thisline_decision.bplcon3 & 0x02) && !(thisline_decision.bplcon3 & 0x20))) && sprites_differ (dip, dip_old)) { changed = 1; } if (changed) { thisline_changed = 1; *dp = thisline_decision; } else /* The only one that may differ: */ dp->ctable = thisline_decision.ctable; /* leave free space for possible extra color changes at the end of line */ next_color_change += (HBLANK_OFFSET + 1) / 2; diw_hcounter += maxhpos * 2; if (!(currprefs.chipset_mask & CSMASK_ECS_DENISE) && vpos == get_equ_vblank_endline () - 1) diw_hcounter++; if ((currprefs.chipset_mask & CSMASK_ECS_DENISE) || vpos > get_equ_vblank_endline () || (currprefs.cs_dipagnus && vpos == 0)) { diw_hcounter = maxhpos * 2; last_hdiw = 2 - 1; } if (next_color_change >= MAX_REG_CHANGE - 30) { write_log (_T("color_change buffer overflow!\n")); next_color_change = 0; dip->nr_color_changes = 0; dip->first_color_change = 0; dip->last_color_change = 0; } } /* Set the state of all decisions to "undecided" for a new scanline. */ static void reset_decisions (void) { if (nodraw ()) return; toscr_nr_planes = toscr_nr_planes2 = 0; thisline_decision.bplres = bplcon0_res; thisline_decision.nr_planes = 0; bpl1dat_written = false; bpl1dat_written_at_least_once = false; bpl1dat_early = false; plfleft_real = -1; thisline_decision.plfleft = -1; thisline_decision.plflinelen = -1; thisline_decision.ham_seen = !! (bplcon0 & 0x800); thisline_decision.ehb_seen = !! isehb (bplcon0, bplcon2); thisline_decision.ham_at_start = !! (bplcon0 & 0x800); /* decided_res shouldn't be touched before it's initialized by decide_line(). */ thisline_decision.diwfirstword = -1; thisline_decision.diwlastword = -1; if (hdiwstate == DIW_waiting_stop) { thisline_decision.diwfirstword = 0; if (thisline_decision.diwfirstword != line_decisions[next_lineno].diwfirstword) MARK_LINE_CHANGED; } thisline_decision.ctable = -1; thisline_changed = 0; curr_drawinfo[next_lineno].first_color_change = next_color_change; curr_drawinfo[next_lineno].first_sprite_entry = next_sprite_entry; next_sprite_forced = 1; last_sprite_point = 0; fetch_state = fetch_not_started; bplcon1_hpos = -1; if (bpldmasetuphpos >= 0) { // this can happen in "too fast" modes BPLCON0_Denise (0, bplcon0, true); setup_fmodes (0); } bpldmasetuphpos = -1; bpldmasetupphase = 0; ddfstrt_old_hpos = -1; if (plf_state > plf_active) plf_state = plf_idle; if (plf_state == plf_active && !(currprefs.chipset_mask & CSMASK_ECS_AGNUS)) plf_state = plf_idle; memset (todisplay, 0, sizeof todisplay); memset (fetched, 0, sizeof fetched); #ifdef AGA if (currprefs.chipset_mask & CSMASK_AGA) { memset (fetched_aga0, 0, sizeof fetched_aga0); memset (fetched_aga1, 0, sizeof fetched_aga1); } #endif memset (outword, 0, sizeof outword); last_decide_line_hpos = -1; last_ddf_pix_hpos = -1; last_sprite_hpos = -1; last_fetch_hpos = -1; /* These are for comparison. */ thisline_decision.bplcon0 = bplcon0; thisline_decision.bplcon2 = bplcon2; #ifdef ECS_DENISE thisline_decision.bplcon3 = bplcon3; #endif #ifdef AGA thisline_decision.bplcon4 = bplcon4; #endif } static int islinetoggle (void) { int linetoggle = 0; if (!(beamcon0 & 0x0800) && !(beamcon0 & 0x0020) && (currprefs.chipset_mask & CSMASK_ECS_AGNUS)) { linetoggle = 1; // NTSC and !LOLDIS -> LOL toggles every line } else if (!(currprefs.chipset_mask & CSMASK_ECS_AGNUS) && currprefs.ntscmode) { linetoggle = 1; // hardwired NTSC Agnus } return linetoggle; } int vsynctimebase_orig; void compute_vsynctime (void) { fake_vblank_hz = 0; vblank_hz_mult = 0; vblank_hz_state = 1; if (fabs (currprefs.chipset_refreshrate) > 0.1) { vblank_hz = currprefs.chipset_refreshrate; if (isvsync_chipset ()) { int mult = 0; if (!fake_vblank_hz && getvsyncrate (vblank_hz, &mult) != vblank_hz) { vblank_hz = getvsyncrate (vblank_hz, &vblank_hz_mult); if (vblank_hz_mult > 0) vblank_hz_state = 0; } } } if (!fake_vblank_hz) fake_vblank_hz = vblank_hz; if (currprefs.turbo_emulation) vsynctimebase = vsynctimebase_orig = 1; else vsynctimebase = vsynctimebase_orig = (int)(syncbase / fake_vblank_hz); #if 0 if (!picasso_on) { updatedisplayarea (); } #endif if (currprefs.produce_sound > 1) update_sound (fake_vblank_hz, (bplcon0 & 4) ? -1 : lof_store, islinetoggle ()); } static void dumpsync (void) { static int cnt = 100; if (cnt < 0) return; cnt--; write_log (_T("BEAMCON0=%04X VTOTAL=%04X HTOTAL=%04X\n"), new_beamcon0, vtotal, htotal); write_log (_T(" HSSTOP=%04X HBSTRT=%04X HBSTOP=%04X\n"), hsstop, hbstrt, hbstop); write_log (_T(" VSSTOP=%04X VBSTRT=%04X VBSTOP=%04X\n"), vsstop, vbstrt, vbstop); write_log (_T(" HSSTRT=%04X VSSTRT=%04X HCENTER=%04X\n"), hsstrt, vsstrt, hcenter); } int current_maxvpos (void) { return maxvpos + (lof_store ? 1 : 0); } static void checklacecount (bool lace) { if (!interlace_changed) { if (nlace_cnt >= NLACE_CNT_NEEDED && lace) { lof_togglecnt_lace = LOF_TOGGLES_NEEDED; lof_togglecnt_nlace = 0; //write_log (_T("immediate lace\n")); nlace_cnt = 0; } else if (nlace_cnt <= -NLACE_CNT_NEEDED && !lace) { lof_togglecnt_nlace = LOF_TOGGLES_NEEDED; lof_togglecnt_lace = 0; //write_log (_T("immediate nlace\n")); nlace_cnt = 0; } } if (lace) { if (nlace_cnt > 0) nlace_cnt = 0; nlace_cnt--; if (nlace_cnt < -NLACE_CNT_NEEDED * 2) nlace_cnt = -NLACE_CNT_NEEDED * 2; } else if (!lace) { if (nlace_cnt < 0) nlace_cnt = 0; nlace_cnt++; if (nlace_cnt > NLACE_CNT_NEEDED * 2) nlace_cnt = NLACE_CNT_NEEDED * 2; } } struct chipset_refresh *get_chipset_refresh (void) { int islace = interlace_seen ? 1 : 0; int isntsc = (beamcon0 & 0x20) ? 0 : 1; if (!(currprefs.chipset_mask & CSMASK_ECS_AGNUS)) isntsc = currprefs.ntscmode ? 1 : 0; for (int i = 0; i < MAX_CHIPSET_REFRESH_TOTAL; i++) { struct chipset_refresh *cr = &currprefs.cr[i]; if ((cr->horiz < 0 || cr->horiz == maxhpos) && (cr->vert < 0 || cr->vert == maxvpos_nom) && (cr->ntsc < 0 || (cr->ntsc > 0 && isntsc) || (cr->ntsc == 0 && !isntsc)) && (cr->lace < 0 || (cr->lace > 0 && islace) || (cr->lace == 0 && !islace)) && (cr->framelength < 0 || (cr->framelength > 0 && lof_store) || (cr->framelength == 0 && !lof_store) || (cr->framelength >= 0 && islace)) && ((cr->rtg && picasso_on) || (!cr->rtg && !picasso_on)) && (cr->vsync < 0 || (cr->vsync > 0 && isvsync_chipset ()) || (cr->vsync == 0 && !isvsync_chipset ()))) return cr; } return NULL; } static bool changed_chipset_refresh (void) { return stored_chipset_refresh != get_chipset_refresh (); } void compute_framesync (void) { int islace = interlace_seen ? 1 : 0; int isntsc = (beamcon0 & 0x20) ? 0 : 1; bool found = false; struct chipset_refresh *cr = get_chipset_refresh (); while (cr) { double v = -1; if (!picasso_on) { if (isvsync_chipset ()) { if (cr->index == CHIPSET_REFRESH_PAL || cr->index == CHIPSET_REFRESH_NTSC) { if ((fabs (vblank_hz - 50) < 1 || fabs (vblank_hz - 60) < 1 || fabs (vblank_hz - 100) < 1 || fabs (vblank_hz - 120) < 1) && currprefs.gfx_apmode[0].gfx_vsync == 2 && currprefs.gfx_apmode[0].gfx_fullscreen > 0) { vsync_switchmode ((int)vblank_hz); } } if (isvsync_chipset () < 0) { double v2; v2 = vblank_calibrate (cr->locked ? cr->rate : vblank_hz, cr->locked); if (!cr->locked) v = v2; } else if (isvsync_chipset () > 0) { if (currprefs.gfx_apmode[0].gfx_refreshrate) v = abs (currprefs.gfx_apmode[0].gfx_refreshrate); } } else { if (cr->locked == false) { changed_prefs.chipset_refreshrate = currprefs.chipset_refreshrate = vblank_hz; cfgfile_parse_lines (&changed_prefs, cr->commands, -1); if (cr->commands[0]) write_log (_T("CMD1: '%s'\n"), cr->commands); break; } else { v = cr->rate; } } if (v < 0) v = cr->rate; if (v > 0) { changed_prefs.chipset_refreshrate = currprefs.chipset_refreshrate = v; cfgfile_parse_lines (&changed_prefs, cr->commands, -1); if (cr->commands[0]) write_log (_T("CMD2: '%s'\n"), cr->commands); } } else { if (cr->locked == false) v = vblank_hz; else v = cr->rate; changed_prefs.chipset_refreshrate = currprefs.chipset_refreshrate = v; cfgfile_parse_lines (&changed_prefs, cr->commands, -1); if (cr->commands[0]) write_log (_T("CMD3: '%s'\n"), cr->commands); } found = true; break; } if (!found) { changed_prefs.chipset_refreshrate = currprefs.chipset_refreshrate = vblank_hz; } stored_chipset_refresh = cr; interlace_changed = 0; gfxvidinfo.drawbuffer.inxoffset = -1; gfxvidinfo.drawbuffer.inyoffset = -1; if (beamcon0 & 0x80) { int res = GET_RES_AGNUS (bplcon0); int vres = islace ? 1 : 0; int res2, vres2; res2 = currprefs.gfx_resolution; if (doublescan > 0) res2++; if (res2 > RES_MAX) res2 = RES_MAX; vres2 = currprefs.gfx_vresolution; if (doublescan > 0 && !islace) vres2--; if (vres2 < 0) vres2 = 0; if (vres2 > VRES_QUAD) vres2 = VRES_QUAD; int start = hbstrt; int stop = hbstop; gfxvidinfo.drawbuffer.inwidth = (((start > stop ? (maxhpos - (maxhpos - start + stop)) : (maxhpos - (stop - start) + 2)) * 2) << res2); gfxvidinfo.drawbuffer.inxoffset = ((stop + 1) & ~1) * 2; gfxvidinfo.drawbuffer.extrawidth = 0; gfxvidinfo.drawbuffer.inwidth2 = gfxvidinfo.drawbuffer.inwidth; gfxvidinfo.drawbuffer.inheight = (maxvpos - minfirstline) << vres2; gfxvidinfo.drawbuffer.inheight2 = gfxvidinfo.drawbuffer.inheight; } else { gfxvidinfo.drawbuffer.inwidth = AMIGA_WIDTH_MAX << currprefs.gfx_resolution; gfxvidinfo.drawbuffer.extrawidth = currprefs.gfx_extrawidth ? currprefs.gfx_extrawidth : -1; gfxvidinfo.drawbuffer.inwidth2 = gfxvidinfo.drawbuffer.inwidth; gfxvidinfo.drawbuffer.inheight = (maxvpos_nom - minfirstline + 1) << currprefs.gfx_vresolution; gfxvidinfo.drawbuffer.inheight2 = gfxvidinfo.drawbuffer.inheight; } if (gfxvidinfo.drawbuffer.inwidth > gfxvidinfo.drawbuffer.width_allocated) gfxvidinfo.drawbuffer.inwidth = gfxvidinfo.drawbuffer.width_allocated; if (gfxvidinfo.drawbuffer.inwidth2 > gfxvidinfo.drawbuffer.width_allocated) gfxvidinfo.drawbuffer.inwidth2 = gfxvidinfo.drawbuffer.width_allocated; if (gfxvidinfo.drawbuffer.inheight > gfxvidinfo.drawbuffer.height_allocated) gfxvidinfo.drawbuffer.inheight = gfxvidinfo.drawbuffer.height_allocated; if (gfxvidinfo.drawbuffer.inheight2 > gfxvidinfo.drawbuffer.height_allocated) gfxvidinfo.drawbuffer.inheight2 = gfxvidinfo.drawbuffer.height_allocated; gfxvidinfo.drawbuffer.outwidth = gfxvidinfo.drawbuffer.inwidth; gfxvidinfo.drawbuffer.outheight = gfxvidinfo.drawbuffer.inheight; if (gfxvidinfo.drawbuffer.outwidth > gfxvidinfo.drawbuffer.width_allocated) gfxvidinfo.drawbuffer.outwidth = gfxvidinfo.drawbuffer.width_allocated; if (gfxvidinfo.drawbuffer.outheight > gfxvidinfo.drawbuffer.height_allocated) gfxvidinfo.drawbuffer.outheight = gfxvidinfo.drawbuffer.height_allocated; if (target_graphics_buffer_update ()) { reset_drawing (); } memset (line_decisions, 0, sizeof line_decisions); compute_vsynctime (); write_log (_T("%s mode%s%s V=%.4fHz H=%0.4fHz (%dx%d+%d) IDX=%d (%s) D=%d RTG=%d\n"), isntsc ? _T("NTSC") : _T("PAL"), islace ? _T(" lace") : _T(""), doublescan > 0 ? _T(" dblscan") : _T(""), vblank_hz, (double)(currprefs.ntscmode ? CHIPSET_CLOCK_NTSC : CHIPSET_CLOCK_PAL) / (maxhpos + (islinetoggle () ? 0.5 : 0)), maxhpos, maxvpos, lof_store ? 1 : 0, cr ? cr->index : -1, cr != NULL && cr->label != NULL ? cr->label : _T(""), currprefs.gfx_apmode[picasso_on ? 1 : 0].gfx_display, picasso_on ); config_changed = 1; } /* set PAL/NTSC or custom timing variables */ void init_hz (bool fullinit) { int isntsc, islace; int odbl = doublescan, omaxvpos = maxvpos; double ovblank = vblank_hz; int hzc = 0; if (fullinit) vpos_count = 0; vpos_count_diff = vpos_count; doublescan = 0; programmedmode = false; if ((beamcon0 & 0xA0) != (new_beamcon0 & 0xA0)) hzc = 1; if (beamcon0 != new_beamcon0) { write_log (_T("BEAMCON0 %04x -> %04x PC=%08x\n"), beamcon0, new_beamcon0, M68K_GETPC); vpos_count_diff = vpos_count = 0; } beamcon0 = new_beamcon0; isntsc = (beamcon0 & 0x20) ? 0 : 1; islace = (interlace_seen) ? 1 : 0; if (!(currprefs.chipset_mask & CSMASK_ECS_AGNUS)) isntsc = currprefs.ntscmode ? 1 : 0; if (!isntsc) { maxvpos = MAXVPOS_PAL; maxhpos = MAXHPOS_PAL; minfirstline = VBLANK_ENDLINE_PAL; vblank_hz = VBLANK_HZ_PAL; sprite_vblank_endline = VBLANK_SPRITE_PAL; equ_vblank_endline = EQU_ENDLINE_PAL; equ_vblank_toggle = true; } else { maxvpos = MAXVPOS_NTSC; maxhpos = MAXHPOS_NTSC; minfirstline = VBLANK_ENDLINE_NTSC; vblank_hz = VBLANK_HZ_NTSC; sprite_vblank_endline = VBLANK_SPRITE_NTSC; equ_vblank_endline = EQU_ENDLINE_NTSC; equ_vblank_toggle = false; } // long/short field refresh rate adjustment vblank_hz = vblank_hz * (maxvpos * 2 + 1) / ((maxvpos + lof_current) * 2); maxvpos_nom = maxvpos; if (vpos_count > 0) { // we come here if vpos_count != maxvpos and beamcon0 didn't change // (someone poked VPOSW) if (vpos_count < 10) vpos_count = 10; vblank_hz = (isntsc ? 15734 : 15625.0) / vpos_count; maxvpos_nom = vpos_count - (lof_current ? 1 : 0); reset_drawing (); } if (beamcon0 & 0x80) { // programmable scanrates (ECS Agnus) if (vtotal >= MAXVPOS) vtotal = MAXVPOS - 1; maxvpos = vtotal + 1; if (htotal >= MAXHPOS) htotal = MAXHPOS - 1; maxhpos = htotal + 1; vblank_hz = 227.0 * 312.0 * 50.0 / (maxvpos * maxhpos); minfirstline = vsstop > vbstop ? vsstop : vbstop; if (minfirstline > maxvpos / 2) minfirstline = vsstop > vsstop ? vbstop : vsstop; if (minfirstline < 2) minfirstline = 2; if (minfirstline >= maxvpos) minfirstline = maxvpos - 1; sprite_vblank_endline = minfirstline - 2; maxvpos_nom = maxvpos; equ_vblank_endline = -1; doublescan = htotal <= 164 ? 1 : 0; programmedmode = true; dumpsync (); hzc = 1; } if (maxvpos_nom >= MAXVPOS) maxvpos_nom = MAXVPOS; if (currprefs.gfx_scandoubler && doublescan == 0) doublescan = -1; if (doublescan != odbl || maxvpos != omaxvpos) hzc = 1; /* limit to sane values */ if (vblank_hz < 10) vblank_hz = 10; if (vblank_hz > 300) vblank_hz = 300; maxhpos_short = maxhpos; if (beamcon0 & 0x80) { if (hbstrt > maxhpos) hsyncstartpos = hbstrt; else hsyncstartpos = maxhpos + hbstrt; if (hbstop > maxhpos) hsyncendpos = maxhpos - hbstop; else hsyncendpos = hbstop; } else { hsyncstartpos = maxhpos_short + 13; hsyncendpos = 24; } eventtab[ev_hsync].oldcycles = get_cycles (); eventtab[ev_hsync].evtime = get_cycles () + HSYNCTIME; events_schedule (); if (hzc) { interlace_seen = islace; reset_drawing (); } maxvpos_total = (currprefs.chipset_mask & CSMASK_ECS_AGNUS) ? 2047 : 511; if (maxvpos_total > MAXVPOS) maxvpos_total = MAXVPOS; #ifdef PICASSO96 if (!p96refresh_active) { maxvpos_stored = maxvpos; maxhpos_stored = maxhpos; vblank_hz_stored = vblank_hz; } #endif compute_framesync (); #ifdef PICASSO96 init_hz_p96 (); #endif if (vblank_hz != ovblank) updatedisplayarea (); inputdevice_tablet_strobe (); if (fullinit) vpos_count_diff = maxvpos_nom; } void init_hz (void) { init_hz (false); } void init_hz_full (void) { init_hz (true); } static void calcdiw (void) { int hstrt = diwstrt & 0xFF; int hstop = diwstop & 0xFF; int vstrt = diwstrt >> 8; int vstop = diwstop >> 8; // vertical in ECS Agnus if (diwhigh_written && (currprefs.chipset_mask & CSMASK_ECS_AGNUS)) { vstrt |= (diwhigh & 7) << 8; vstop |= ((diwhigh >> 8) & 7) << 8; } else { if ((vstop & 0x80) == 0) vstop |= 0x100; } // horizontal in ECS Denise if (diwhigh_written && (currprefs.chipset_mask & CSMASK_ECS_DENISE)) { hstrt |= ((diwhigh >> 5) & 1) << 8; hstop |= ((diwhigh >> 13) & 1) << 8; } else { hstop += 0x100; } diw_hstrt = hstrt; diw_hstop = hstop; diwfirstword = coord_diw_to_window_x (hstrt); diwlastword = coord_diw_to_window_x (hstop); if (diwfirstword >= diwlastword) { diwfirstword = 0; diwlastword = max_diwlastword; } if (diwfirstword < 0) diwfirstword = 0; plffirstline = vstrt; plflastline = vstop; plfstrt = ddfstrt; plfstop = ddfstop; /* probably not the correct place.. should use plf_state instead */ if (currprefs.chipset_mask & CSMASK_ECS_AGNUS) { /* ECS/AGA and ddfstop > maxhpos == always-on display */ if (plfstop > maxhpos) plfstrt = 0; if (plfstrt < HARD_DDF_START) plfstrt = HARD_DDF_START; plfstrt_start = plfstrt - 4; } else { /* OCS and ddfstrt >= ddfstop == ddfstop = max */ if (plfstrt >= plfstop && plfstrt >= HARD_DDF_START) plfstop = 0xff; plfstrt_start = HARD_DDF_START - 2; } diw_change = 2; } /* display mode changed (lores, doubling etc..), recalculate everything */ void init_custom (void) { update_mirrors (); create_cycle_diagram_table (); reset_drawing (); init_hz (); calcdiw (); } static int timehack_alive = 0; static uae_u32 REGPARAM2 timehack_helper (TrapContext *context) { #ifdef HAVE_GETTIMEOFDAY struct timeval tv; if (m68k_dreg (regs, 0) == 0) return timehack_alive; timehack_alive = 10; gettimeofday (&tv, NULL); put_long (m68k_areg (regs, 0), tv.tv_sec - (((365 * 8 + 2) * 24) * 60 * 60)); put_long (m68k_areg (regs, 0) + 4, tv.tv_usec); return 0; #else return 2; #endif } /* * register functions */ STATIC_INLINE uae_u16 DENISEID (int *missing) { *missing = 0; if (currprefs.cs_deniserev >= 0) return currprefs.cs_deniserev; #ifdef AGA if (currprefs.chipset_mask & CSMASK_AGA) { if (currprefs.cs_ide == IDE_A4000) return 0xFCF8; return 0x00F8; } #endif if (currprefs.chipset_mask & CSMASK_ECS_DENISE) return 0xFFFC; if (currprefs.cpu_model == 68000 && (currprefs.cpu_compatible || currprefs.cpu_cycle_exact)) *missing = 1; return 0xFFFF; } STATIC_INLINE uae_u16 DMACONR (int hpos) { decide_line (hpos); decide_fetch (hpos); decide_blitter (hpos); dmacon &= ~(0x4000 | 0x2000); dmacon |= ((blit_interrupt || (!blit_interrupt && currprefs.cs_agnusbltbusybug && !blt_info.got_cycle)) ? 0 : 0x4000) | (blt_info.blitzero ? 0x2000 : 0); return dmacon; } STATIC_INLINE uae_u16 INTENAR (void) { return intena; } uae_u16 INTREQR (void) { return intreq; } STATIC_INLINE uae_u16 ADKCONR (void) { return adkcon; } STATIC_INLINE int islightpentriggered (void) { if (beamcon0 & 0x2000) // LPENDIS return 0; return lightpen_triggered > 0; } STATIC_INLINE int issyncstopped (void) { return (bplcon0 & 2) && !currprefs.genlock; } STATIC_INLINE int GETVPOS (void) { return islightpentriggered () ? vpos_lpen : (issyncstopped () ? vpos_previous : vpos); } STATIC_INLINE int GETHPOS (void) { return islightpentriggered () ? hpos_lpen : (issyncstopped () ? hpos_previous : current_hpos ()); } // DFF006 = 0.W must be valid result but better do this only in 68000 modes (whdload black screen!) #define HPOS_OFFSET (currprefs.cpu_model < 68020 ? 3 : 0) STATIC_INLINE uae_u16 VPOSR (void) { unsigned int csbit = 0; uae_u16 vp = GETVPOS (); uae_u16 hp = GETHPOS (); if (hp + HPOS_OFFSET >= maxhpos) { vp++; if (vp >= maxvpos + lof_store) vp = 0; } vp = (vp >> 8) & 7; if (currprefs.cs_agnusrev >= 0) { csbit |= currprefs.cs_agnusrev << 8; } else { #ifdef AGA csbit |= (currprefs.chipset_mask & CSMASK_AGA) ? 0x2300 : 0; #endif csbit |= (currprefs.chipset_mask & CSMASK_ECS_AGNUS) ? 0x2000 : 0; if (currprefs.chipmem_size > 1024 * 1024 && (currprefs.chipset_mask & CSMASK_ECS_AGNUS)) csbit |= 0x2100; if (currprefs.ntscmode) csbit |= 0x1000; } if (!(currprefs.chipset_mask & CSMASK_ECS_AGNUS)) vp &= 1; vp = vp | (lof_store ? 0x8000 : 0) | csbit; if (currprefs.chipset_mask & CSMASK_ECS_AGNUS) vp |= lol ? 0x80 : 0; #if 0 if (M68K_GETPC < 0x00f00000 || M68K_GETPC >= 0x10000000) write_log (_T("VPOSR %04x at %08x\n"), vp, M68K_GETPC); #endif if (currprefs.cpu_model >= 68020) hsyncdelay (); return vp; } static void VPOSW (uae_u16 v) { #if 0 if (M68K_GETPC < 0xf00000 || 1) write_log (_T("VPOSW %04X PC=%08x\n"), v, M68K_GETPC); #endif if (lof_store != ((v & 0x8000) ? 1 : 0)) { lof_store = (v & 0x8000) ? 1 : 0; lof_changing = lof_store ? 1 : -1; } if (currprefs.chipset_mask & CSMASK_ECS_AGNUS) { lol = (v & 0x0080) ? 1 : 0; if (!islinetoggle ()) lol = 0; } if (lof_changing) return; vpos &= 0x00ff; v &= 7; if (!(currprefs.chipset_mask & CSMASK_ECS_AGNUS)) v &= 1; vpos |= v << 8; } static void VHPOSW (uae_u16 v) { #if 0 if (M68K_GETPC < 0xf00000 || 1) write_log (_T("VHPOSW %04X PC=%08x\n"), v, M68K_GETPC); #endif v >>= 8; // lets ignore hpos for now vpos &= 0xff00; vpos |= v; } STATIC_INLINE uae_u16 VHPOSR (void) { uae_u16 vp = GETVPOS (); uae_u16 hp = GETHPOS (); hp += HPOS_OFFSET; if (hp >= maxhpos) { hp -= maxhpos; vp++; if (vp >= maxvpos + lof_store) vp = 0; } if (HPOS_OFFSET) { hp += 1; if (hp >= maxhpos) hp -= maxhpos; } vp <<= 8; vp |= hp; if (currprefs.cpu_model >= 68020) hsyncdelay (); #if 0 if (M68K_GETPC < 0x00f00000 || M68K_GETPC >= 0x10000000) write_log (_T("VPOS %04x %04x at %08x\n"), VPOSR (), vp, M68K_GETPC); #endif return vp; } static int test_copper_dangerous (unsigned int address) { int addr = address & 0x01fe; if (addr < ((copcon & 2) ? ((currprefs.chipset_mask & CSMASK_ECS_AGNUS) ? 0 : 0x40) : 0x80)) { cop_state.state = COP_stop; copper_enabled_thisline = 0; unset_special (SPCFLAG_COPPER); return 1; } return 0; } static void immediate_copper (int num) { int pos = 0; int oldpos = 0; cop_state.state = COP_stop; cop_state.vpos = vpos; cop_state.hpos = current_hpos () & ~1; cop_state.ip = num == 1 ? cop1lc : cop2lc; while (pos < (maxvpos << 5)) { if (oldpos > pos) pos = oldpos; if (!dmaen(DMA_COPPER)) break; if (cop_state.ip >= currprefs.chipmem_size) break; pos++; oldpos = pos; cop_state.i1 = chipmem_wget_indirect (cop_state.ip); cop_state.i2 = chipmem_wget_indirect (cop_state.ip + 2); cop_state.ip += 4; if (!(cop_state.i1 & 1)) { // move cop_state.i1 &= 0x1fe; if (cop_state.i1 == 0x88) { cop_state.ip = cop1lc; continue; } if (cop_state.i1 == 0x8a) { cop_state.ip = cop2lc; continue; } if (test_copper_dangerous (cop_state.i1)) break; custom_wput_1 (0, cop_state.i1, cop_state.i2, 0); } else { // wait or skip if ((cop_state.i1 >> 8) > ((pos >> 5) & 0xff)) pos = (((pos >> 5) & 0x100) | ((cop_state.i1 >> 8)) << 5) | ((cop_state.i1 & 0xff) >> 3); if (cop_state.i1 >= 0xffdf && cop_state.i2 == 0xfffe) break; } } cop_state.state = COP_stop; unset_special (SPCFLAG_COPPER); } STATIC_INLINE void COP1LCH (uae_u16 v) { cop1lc = (cop1lc & 0xffff) | ((uae_u32)v << 16); } STATIC_INLINE void COP1LCL (uae_u16 v) { cop1lc = (cop1lc & ~0xffff) | (v & 0xfffe); } STATIC_INLINE void COP2LCH (uae_u16 v) { cop2lc = (cop2lc & 0xffff) | ((uae_u32)v << 16); } STATIC_INLINE void COP2LCL (uae_u16 v) { cop2lc = (cop2lc & ~0xffff) | (v & 0xfffe); } static void compute_spcflag_copper (int hpos); // vblank = copper starts at hpos=2 // normal COPJMP write: takes 2 more cycles static void COPJMP (int num, int vblank) { int oldstrobe = cop_state.strobe; #if CUSTOM_DEBUG > 0 if (dmaen (DMA_COPPER) && (cop_state.saved_i1 != 0xffff || cop_state.saved_i2 != 0xfffe)) write_log (_T("vblank without copper ending %08x (%08x %08x)\n"), cop_state.ip, cop1lc, cop2lc); #endif unset_special (SPCFLAG_COPPER); cop_state.ignore_next = 0; if (!oldstrobe) cop_state.state_prev = cop_state.state; if ((cop_state.state == COP_wait || cop_state.state == COP_waitforever) && !vblank) { cop_state.state = COP_strobe_delay1x; } else { cop_state.state = vblank ? COP_start_delay : (copper_access ? COP_strobe_delay1 : COP_strobe_extra); } cop_state.vpos = vpos; cop_state.hpos = current_hpos () & ~1; copper_enabled_thisline = 0; cop_state.strobe = num; if (nocustom ()) { immediate_copper (num); return; } if (dmaen (DMA_COPPER)) { compute_spcflag_copper (current_hpos ()); } else if (oldstrobe > 0 && oldstrobe != num && cop_state.state_prev == COP_wait) { /* dma disabled, copper idle and accessed both COPxJMPs -> copper stops! */ cop_state.state = COP_stop; } } STATIC_INLINE void COPCON (uae_u16 a) { copcon = a; } static void DMACON (int hpos, uae_u16 v) { int oldcop, newcop; uae_u16 changed; uae_u16 oldcon = dmacon; decide_line (hpos); decide_fetch (hpos); decide_blitter (hpos); setclr (&dmacon, v); dmacon &= 0x1FFF; changed = dmacon ^ oldcon; #if 0 if (changed) write_log (_T("%04x -> %04x %08x\n"), oldcon, dmacon, m68k_getpc ()); #endif oldcop = (oldcon & DMA_COPPER) && (oldcon & DMA_MASTER); newcop = (dmacon & DMA_COPPER) && (dmacon & DMA_MASTER); if (oldcop != newcop) { if (newcop && !oldcop) { compute_spcflag_copper (hpos); } else if (!newcop) { copper_enabled_thisline = 0; unset_special (SPCFLAG_COPPER); } } if ((dmacon & DMA_BLITPRI) > (oldcon & DMA_BLITPRI) && bltstate != BLT_done) set_special (SPCFLAG_BLTNASTY); if (dmaen (DMA_BLITTER) && bltstate == BLT_init) bltstate = BLT_work; if ((dmacon & (DMA_BLITPRI | DMA_BLITTER | DMA_MASTER)) != (DMA_BLITPRI | DMA_BLITTER | DMA_MASTER)) unset_special (SPCFLAG_BLTNASTY); if (changed & (DMA_MASTER | 0x0f)) audio_state_machine (); if (changed & (DMA_MASTER | DMA_BITPLANE)) { ddf_change = vpos; if (dmaen (DMA_BITPLANE)) maybe_start_bpl_dma (hpos); } events_schedule(); } static int irq_nmi; void NMI_delayed (void) { irq_nmi = 1; } static uae_u16 intreq_internal, intena_internal; int intlev (void) { uae_u16 imask = intreq_internal & intena_internal; if (irq_nmi) { irq_nmi = 0; return 7; } if (!(imask && (intena_internal & 0x4000))) return -1; if (imask & (0x4000 | 0x2000)) // 13 14 return 6; if (imask & (0x1000 | 0x0800)) // 11 12 return 5; if (imask & (0x0400 | 0x0200 | 0x0100 | 0x0080)) // 7 8 9 10 return 4; if (imask & (0x0040 | 0x0020 | 0x0010)) // 4 5 6 return 3; if (imask & 0x0008) // 3 return 2; if (imask & (0x0001 | 0x0002 | 0x0004)) // 0 1 2 return 1; return -1; } #define INT_PROCESSING_DELAY (3 * CYCLE_UNIT) STATIC_INLINE int use_eventmode (uae_u16 v) { if (!currprefs.cpu_cycle_exact) return 0; if (currprefs.cpu_cycle_exact && currprefs.cpu_model <= 68020) return 1; if (v & 0x8000) return 1; return 0; } static void send_interrupt_do (uae_u32 v) { INTREQ_0 (0x8000 | (1 << v)); } void send_interrupt (int num, int delay) { if (use_eventmode (0x8000) && delay > 0) { if (!(intreq & (1 << num))) event2_newevent_xx (-1, delay, num, send_interrupt_do); } else { send_interrupt_do (num); } } static void send_intena_do (uae_u32 v) { intena_internal = v; doint (); } static void send_intreq_do (uae_u32 v) { intreq_internal = v; doint (); } static void INTENA (uae_u16 v) { uae_u16 old = intena; setclr (&intena, v); if (!(v & 0x8000) && old == intena) return; if (use_eventmode (v)) { event2_newevent_xx (-1, INT_PROCESSING_DELAY, intena, send_intena_do); } else { intena_internal = intena; if (v & 0x8000) doint (); } #if 0 if (v & 0x40) write_log (_T("INTENA %04X (%04X) %p\n"), intena, v, M68K_GETPC); #endif } void INTREQ_nodelay (uae_u16 v) { setclr (&intreq, v); setclr (&intreq_internal, v); doint (); } void INTREQ_f (uae_u16 v) { if (use_eventmode (v)) { setclr (&intreq, v); send_intreq_do (intreq); } else { setclr (&intreq, v); setclr (&intreq_internal, v); } } void INTREQ_0 (uae_u16 v) { #if 0 if (!(v & 0x8000) && (v & (0x80 | 0x100 | 0x200 | 0x400) != 0x0780)) write_log (_T("audirq clear %04x %04x\n"), v, intreq); #endif uae_u16 old = intreq; setclr (&intreq, v); if (use_eventmode (v)) { // don't bother to waste time for interrupt queuing if nothing changes if (old == intreq && intreq_internal == intreq) return; event2_newevent_xx (-1, INT_PROCESSING_DELAY, intreq, send_intreq_do); } else { intreq_internal = intreq; if (intreq == old) return; if (v & 0x8000) doint (); } } void INTREQ (uae_u16 data) { INTREQ_0 (data); serial_check_irq (); rethink_cias (); #ifdef A2065 rethink_a2065 (); #endif #ifdef A2091 rethink_a2091 (); #endif #ifdef CDTV rethink_cdtv (); #endif #ifdef CD32 rethink_akiko (); #endif rethink_gayle (); } static void ADKCON (int hpos, uae_u16 v) { if (currprefs.produce_sound > 0) update_audio (); DISK_update (hpos); DISK_update_adkcon (hpos, v); setclr (&adkcon, v); audio_update_adkmasks (); if ((v >> 11) & 1) serial_uartbreak ((adkcon >> 11) & 1); } static void BEAMCON0 (uae_u16 v) { if (currprefs.chipset_mask & CSMASK_ECS_AGNUS) { if (!(currprefs.chipset_mask & CSMASK_ECS_DENISE)) v &= 0x20; if (v != new_beamcon0) { new_beamcon0 = v; if (v & ~0x20) write_log (_T("warning: %04X written to BEAMCON0 PC=%08X\n"), v, M68K_GETPC); } } } #ifndef CUSTOM_SIMPLE static void varsync (void) { if (!(currprefs.chipset_mask & CSMASK_ECS_AGNUS)) return; #ifdef PICASSO96 if (picasso_on && p96refresh_active) { vtotal = p96refresh_active; return; } #endif if (!(beamcon0 & 0x80)) return; vpos_count = 0; dumpsync (); } #ifdef PICASSO96 void set_picasso_hack_rate (int hz) { if (!picasso_on) return; vpos_count = 0; p96refresh_active = (int)(maxvpos_stored * vblank_hz_stored / hz); if (!currprefs.cs_ciaatod) changed_prefs.cs_ciaatod = currprefs.cs_ciaatod = currprefs.ntscmode ? 2 : 1; if (p96refresh_active > 0) { new_beamcon0 |= 0x80; } } #endif #endif static void BPLxPTH (int hpos, uae_u16 v, int num) { decide_line (hpos); decide_fetch (hpos); bplpt[num] = (bplpt[num] & 0x0000ffff) | ((uae_u32)v << 16); bplptx[num] = (bplptx[num] & 0x0000ffff) | ((uae_u32)v << 16); //write_log (_T("%d:%d:BPL%dPTH %08X COP=%08x\n"), hpos, vpos, num, bplpt[num], cop_state.ip); } static void BPLxPTL (int hpos, uae_u16 v, int num) { decide_line (hpos); decide_fetch (hpos); /* chipset feature: BPLxPTL write and next cycle doing DMA fetch using same pointer register -> * this write goes nowhere (same happens with all DMA channels, not just BPL) * (intro MoreNewStuffy by PlasmaForce) */ /* only detect copper accesses to prevent too fast CPU mode glitches */ if (copper_access && is_bitplane_dma (hpos + 1) == num + 1) return; bplpt[num] = (bplpt[num] & 0xffff0000) | (v & 0x0000fffe); bplptx[num] = (bplptx[num] & 0xffff0000) | (v & 0x0000fffe); //write_log (_T("%d:%d:BPL%dPTL %08X COP=%08x\n"), hpos, vpos, num, bplpt[num], cop_state.ip); } static void BPLCON0_Denise (int hpos, uae_u16 v, bool immediate) { if (! (currprefs.chipset_mask & CSMASK_ECS_DENISE)) v &= ~0x00F1; else if (! (currprefs.chipset_mask & CSMASK_AGA)) v &= ~0x00B0; v &= ~(0x0200 | 0x0100 | 0x0080 | 0x0020); #if SPRBORDER v |= 1; #endif if (bplcon0d == v) return; bplcon0dd = -1; // fake unused 0x0080 bit as an EHB bit (see below) if (isehb (bplcon0d, bplcon2)) v |= 0x80; if (immediate) { record_register_change (hpos, 0x100, v); } else { record_register_change (hpos, 0x100, (bplcon0d & ~(0x800 | 0x400 | 0x80)) | (v & (0x0800 | 0x400 | 0x80 | 0x01))); } bplcon0d = v & ~0x80; #ifdef ECS_DENISE if (currprefs.chipset_mask & CSMASK_ECS_DENISE) { decide_sprites (hpos); sprres = expand_sprres (v, bplcon3); } #endif if (thisline_decision.plfleft < 0) update_denise (hpos); } static void BPLCON0 (int hpos, uae_u16 v) { if (! (currprefs.chipset_mask & CSMASK_ECS_DENISE)) v &= ~0x00F1; else if (! (currprefs.chipset_mask & CSMASK_AGA)) v &= ~0x00B0; v &= ~(0x0080 | 0x0020); #if SPRBORDER v |= 1; #endif if (bplcon0 == v) return; if (!issyncstopped ()) { vpos_previous = vpos; hpos_previous = hpos; } if ((bplcon0 & 4) != (v & 4)) checklacecount ((v & 4) != 0); bplcon0 = v; bpldmainitdelay (hpos); if (thisline_decision.plfleft < 0) BPLCON0_Denise (hpos, v, true); } STATIC_INLINE void BPLCON1 (int hpos, uae_u16 v) { if (!(currprefs.chipset_mask & CSMASK_AGA)) v &= 0xff; if (bplcon1 == v) return; ddf_change = vpos; decide_line (hpos); decide_fetch (hpos); bplcon1_hpos = hpos; bplcon1 = v; } STATIC_INLINE void BPLCON2 (int hpos, uae_u16 v) { if (!(currprefs.chipset_mask & CSMASK_AGA)) v &= 0x7f; if (bplcon2 == v) return; decide_line (hpos); bplcon2 = v; record_register_change (hpos, 0x104, v); } #ifdef ECS_DENISE STATIC_INLINE void BPLCON3 (int hpos, uae_u16 v) { if (!(currprefs.chipset_mask & CSMASK_ECS_DENISE)) return; if (!(currprefs.chipset_mask & CSMASK_AGA)) { v &= 0x003f; v |= 0x0c00; } #if SPRBORDER v |= 2; #endif if (bplcon3 == v) return; decide_line (hpos); decide_sprites (hpos); bplcon3 = v; sprres = expand_sprres (bplcon0, bplcon3); record_register_change (hpos, 0x106, v); } #endif #ifdef AGA STATIC_INLINE void BPLCON4 (int hpos, uae_u16 v) { if (!(currprefs.chipset_mask & CSMASK_AGA)) return; if (bplcon4 == v) return; decide_line (hpos); bplcon4 = v; record_register_change (hpos, 0x10c, v); } #endif static void BPL1MOD (int hpos, uae_u16 v) { v &= ~1; if ((uae_s16)bpl1mod == (uae_s16)v) return; decide_line (hpos); decide_fetch (hpos); bpl1mod = v; } static void BPL2MOD (int hpos, uae_u16 v) { v &= ~1; if ((uae_s16)bpl2mod == (uae_s16)v) return; decide_line (hpos); decide_fetch (hpos); bpl2mod = v; } /* Needed in special OCS/ECS "7-plane" mode, * also handles CPU generated bitplane data */ static void BPLxDAT (int hpos, int num, uae_u16 v) { // only BPL0DAT access can do anything visible if (num == 0 && hpos >= 7) { decide_line (hpos); decide_fetch (hpos); } bplxdat[num] = v; if (num == 0 && hpos >= 7) { bpl1dat_written = true; bpl1dat_written_at_least_once = true; if (thisline_decision.plfleft < 0) { thisline_decision.plfleft = hpos & ~3; reset_bpl_vars (); compute_delay_offset (); } update_bpldats (hpos); } } static void DIWSTRT (int hpos, uae_u16 v) { if (diwstrt == v && ! diwhigh_written) return; decide_diw (hpos); decide_line (hpos); diwhigh_written = 0; diwstrt = v; calcdiw (); } static void DIWSTOP (int hpos, uae_u16 v) { if (diwstop == v && ! diwhigh_written) return; decide_diw (hpos); decide_line (hpos); diwhigh_written = 0; diwstop = v; calcdiw (); } static void DIWHIGH (int hpos, uae_u16 v) { if (!(currprefs.chipset_mask & (CSMASK_ECS_DENISE | CSMASK_ECS_AGNUS))) return; if (!(currprefs.chipset_mask & CSMASK_AGA)) v &= ~(0x0008 | 0x0010 | 0x1000 | 0x0800); v &= ~(0x8000 | 0x4000 | 0x0080 | 0x0040); if (diwhigh_written && diwhigh == v) return; decide_line (hpos); diwhigh_written = 1; diwhigh = v; calcdiw (); } static void DDFSTRT (int hpos, uae_u16 v) { v &= 0xfe; if (!(currprefs.chipset_mask & CSMASK_ECS_AGNUS)) v &= 0xfc; if (ddfstrt == v && hpos + 2 != ddfstrt) return; ddf_change = vpos; decide_line (hpos); ddfstrt_old_hpos = hpos; ddfstrt = v; calcdiw (); if (ddfstop > 0xD4 && (ddfstrt & 4) == 4) { static int last_warned; last_warned = (last_warned + 1) & 4095; if (last_warned == 0) write_log (_T("WARNING! Very strange DDF values (%x %x).\n"), ddfstrt, ddfstop); } } static void DDFSTOP (int hpos, uae_u16 v) { v &= 0xfe; if (!(currprefs.chipset_mask & CSMASK_ECS_AGNUS)) v &= 0xfc; if (ddfstop == v && hpos + 2 != ddfstop) return; ddf_change = vpos; decide_line (hpos); decide_fetch (hpos); decide_blitter (hpos); ddfstop = v; calcdiw (); if (fetch_state != fetch_not_started) estimate_last_fetch_cycle (hpos); if (ddfstop > 0xD4 && (ddfstrt & 4) == 4) { static int last_warned; if (last_warned == 0) write_log (_T("WARNING! Very strange DDF values (%x).\n"), ddfstop); last_warned = (last_warned + 1) & 4095; } } static void FMODE (int hpos, uae_u16 v) { if (! (currprefs.chipset_mask & CSMASK_AGA)) v = 0; v &= 0xC00F; if (fmode == v) return; ddf_change = vpos; fmode = v; sprite_width = GET_SPRITEWIDTH (fmode); bpldmainitdelay (hpos); } static void FNULL (uae_u16 v) { } static void BLTADAT (int hpos, uae_u16 v) { maybe_blit (hpos, 0); blt_info.bltadat = v; } /* * "Loading data shifts it immediately" says the HRM. Well, that may * be true for BLTBDAT, but not for BLTADAT - it appears the A data must be * loaded for every word so that AFWM and ALWM can be applied. */ static void BLTBDAT (int hpos, uae_u16 v) { maybe_blit (hpos, 0); if (bltcon1 & 2) blt_info.bltbhold = v << (bltcon1 >> 12); else blt_info.bltbhold = v >> (bltcon1 >> 12); blt_info.bltbdat = v; } static void BLTCDAT (int hpos, uae_u16 v) { maybe_blit (hpos, 0); blt_info.bltcdat = v; reset_blit (0); } static void BLTAMOD (int hpos, uae_u16 v) { maybe_blit (hpos, 1); blt_info.bltamod = (uae_s16)(v & 0xFFFE); reset_blit (0); } static void BLTBMOD (int hpos, uae_u16 v) { maybe_blit (hpos, 1); blt_info.bltbmod = (uae_s16)(v & 0xFFFE); reset_blit (0); } static void BLTCMOD (int hpos, uae_u16 v) { maybe_blit (hpos, 1); blt_info.bltcmod = (uae_s16)(v & 0xFFFE); reset_blit (0); } static void BLTDMOD (int hpos, uae_u16 v) { maybe_blit (hpos, 1); blt_info.bltdmod = (uae_s16)(v & 0xFFFE); reset_blit (0); } static void BLTCON0 (int hpos, uae_u16 v) { maybe_blit (hpos, 2); bltcon0 = v; reset_blit (1); } /* The next category is "Most useless hardware register". * And the winner is... */ static void BLTCON0L (int hpos, uae_u16 v) { if (! (currprefs.chipset_mask & CSMASK_ECS_AGNUS)) return; // ei voittoa. maybe_blit (hpos, 2); bltcon0 = (bltcon0 & 0xFF00) | (v & 0xFF); reset_blit (1); } static void BLTCON1 (int hpos, uae_u16 v) { maybe_blit (hpos, 2); bltcon1 = v; reset_blit (2); } static void BLTAFWM (int hpos, uae_u16 v) { maybe_blit (hpos, 2); blt_info.bltafwm = v; reset_blit (0); } static void BLTALWM (int hpos, uae_u16 v) { maybe_blit (hpos, 2); blt_info.bltalwm = v; reset_blit (0); } static void BLTAPTH (int hpos, uae_u16 v) { maybe_blit (hpos, 0); bltapt = (bltapt & 0xffff) | ((uae_u32)v << 16); } static void BLTAPTL (int hpos, uae_u16 v) { maybe_blit (hpos, 0); bltapt = (bltapt & ~0xffff) | (v & 0xFFFE); } static void BLTBPTH (int hpos, uae_u16 v) { maybe_blit (hpos, 0); bltbpt = (bltbpt & 0xffff) | ((uae_u32)v << 16); } static void BLTBPTL (int hpos, uae_u16 v) { maybe_blit (hpos, 0); bltbpt = (bltbpt & ~0xffff) | (v & 0xFFFE); } static void BLTCPTH (int hpos, uae_u16 v) { maybe_blit (hpos, 0); bltcpt = (bltcpt & 0xffff) | ((uae_u32)v << 16); } static void BLTCPTL (int hpos, uae_u16 v) { maybe_blit (hpos, 0); bltcpt = (bltcpt & ~0xffff) | (v & 0xFFFE); } static void BLTDPTH (int hpos, uae_u16 v) { maybe_blit (hpos, 0); bltdpt = (bltdpt & 0xffff) | ((uae_u32)v << 16); } static void BLTDPTL (int hpos, uae_u16 v) { maybe_blit (hpos, 0); bltdpt = (bltdpt & ~0xffff) | (v & 0xFFFE); } static void BLTSIZE (int hpos, uae_u16 v) { maybe_blit (hpos, 0); blt_info.vblitsize = v >> 6; blt_info.hblitsize = v & 0x3F; if (!blt_info.vblitsize) blt_info.vblitsize = 1024; if (!blt_info.hblitsize) blt_info.hblitsize = 64; do_blitter (hpos, copper_access); } static void BLTSIZV (int hpos, uae_u16 v) { if (! (currprefs.chipset_mask & CSMASK_ECS_AGNUS)) return; maybe_blit (hpos, 0); blt_info.vblitsize = v & 0x7FFF; } static void BLTSIZH (int hpos, uae_u16 v) { if (! (currprefs.chipset_mask & CSMASK_ECS_AGNUS)) return; maybe_blit (hpos, 0); blt_info.hblitsize = v & 0x7FF; if (!blt_info.vblitsize) blt_info.vblitsize = 0x8000; if (!blt_info.hblitsize) blt_info.hblitsize = 0x0800; do_blitter (hpos, copper_access); } STATIC_INLINE void spr_arm (int num, int state) { switch (state) { case 0: nr_armed -= spr[num].armed; spr[num].armed = 0; break; default: nr_armed += 1 - spr[num].armed; spr[num].armed = 1; break; } } STATIC_INLINE void sprstartstop (struct sprite *s) { if (vpos == s->vstart) s->dmastate = 1; if (vpos == s->vstop) s->dmastate = 0; } STATIC_INLINE void SPRxCTLPOS (int num) { int sprxp; struct sprite *s = &spr[num]; sprstartstop (s); sprxp = (sprpos[num] & 0xFF) * 2 + (sprctl[num] & 1); sprxp <<= sprite_buffer_res; /* Quite a bit salad in this register... */ if (0) { } #ifdef AGA else if (currprefs.chipset_mask & CSMASK_AGA) { sprxp |= ((sprctl[num] >> 3) & 3) >> (RES_MAX - sprite_buffer_res); s->dblscan = sprpos[num] & 0x80; } #endif #ifdef ECS_DENISE else if (currprefs.chipset_mask & CSMASK_ECS_DENISE) { sprxp |= ((sprctl[num] >> 3) & 2) >> (RES_MAX - sprite_buffer_res); } #endif s->xpos = sprxp; s->vstart = (sprpos[num] >> 8) | ((sprctl[num] << 6) & 0x100); s->vstop = (sprctl[num] >> 8) | ((sprctl[num] << 7) & 0x100); if (currprefs.chipset_mask & CSMASK_ECS_AGNUS) { s->vstart |= (sprctl[num] << 3) & 0x200; s->vstop |= (sprctl[num] << 4) & 0x200; } sprstartstop (s); } STATIC_INLINE void SPRxCTL_1 (uae_u16 v, int num, int hpos) { struct sprite *s = &spr[num]; sprctl[num] = v; spr_arm (num, 0); SPRxCTLPOS (num); #if SPRITE_DEBUG > 0 if (vpos >= SPRITE_DEBUG_MINY && vpos <= SPRITE_DEBUG_MAXY) { write_log (_T("%d:%d:SPR%dCTL %04X P=%06X VSTRT=%d VSTOP=%d HSTRT=%d D=%d A=%d CP=%x PC=%x\n"), vpos, hpos, num, v, s->pt, s->vstart, s->vstop, s->xpos, spr[num].dmastate, spr[num].armed, cop_state.ip, M68K_GETPC); } #endif } STATIC_INLINE void SPRxPOS_1 (uae_u16 v, int num, int hpos) { struct sprite *s = &spr[num]; sprpos[num] = v; SPRxCTLPOS (num); #if SPRITE_DEBUG > 0 if (vpos >= SPRITE_DEBUG_MINY && vpos <= SPRITE_DEBUG_MAXY) { write_log (_T("%d:%d:SPR%dPOS %04X P=%06X VSTRT=%d VSTOP=%d HSTRT=%d D=%d A=%d CP=%x PC=%x\n"), vpos, hpos, num, v, s->pt, s->vstart, s->vstop, s->xpos, spr[num].dmastate, spr[num].armed, cop_state.ip, M68K_GETPC); } #endif } STATIC_INLINE void SPRxDATA_1 (uae_u16 v, int num, int hpos) { sprdata[num][0] = v; #ifdef AGA sprdata[num][1] = v; sprdata[num][2] = v; sprdata[num][3] = v; #endif spr_arm (num, 1); #if SPRITE_DEBUG > 1 if (vpos >= SPRITE_DEBUG_MINY && vpos <= SPRITE_DEBUG_MAXY) { write_log (_T("%d:%d:SPR%dDATA %04X P=%06X D=%d A=%d PC=%x\n"), vpos, hpos, num, v, spr[num].pt, spr[num].dmastate, spr[num].armed, M68K_GETPC); } #endif } STATIC_INLINE void SPRxDATB_1 (uae_u16 v, int num, int hpos) { sprdatb[num][0] = v; #ifdef AGA sprdatb[num][1] = v; sprdatb[num][2] = v; sprdatb[num][3] = v; #endif #if SPRITE_DEBUG > 1 if (vpos >= SPRITE_DEBUG_MINY && vpos <= SPRITE_DEBUG_MAXY) { write_log (_T("%d:%d:SPR%dDATB %04X P=%06X D=%d A=%d PC=%x\n"), vpos, hpos, num, v, spr[num].pt, spr[num].dmastate, spr[num].armed, M68K_GETPC); } #endif } static void SPRxDATA (int hpos, uae_u16 v, int num) { decide_sprites (hpos); SPRxDATA_1 (v, num, hpos); } static void SPRxDATB (int hpos, uae_u16 v, int num) { decide_sprites (hpos); SPRxDATB_1 (v, num, hpos); } static void SPRxCTL (int hpos, uae_u16 v, int num) { decide_sprites (hpos); SPRxCTL_1 (v, num, hpos); } static void SPRxPOS (int hpos, uae_u16 v, int num) { decide_sprites (hpos); SPRxPOS_1 (v, num, hpos); } static void SPRxPTH (int hpos, uae_u16 v, int num) { decide_sprites (hpos); if (hpos - 1 != spr[num].ptxhpos) { spr[num].pt &= 0xffff; spr[num].pt |= (uae_u32)v << 16; } #if SPRITE_DEBUG > 0 if (vpos >= SPRITE_DEBUG_MINY && vpos <= SPRITE_DEBUG_MAXY) { write_log (_T("%d:%d:SPR%dPTH %06X\n"), vpos, hpos, num, spr[num].pt); } #endif } static void SPRxPTL (int hpos, uae_u16 v, int num) { decide_sprites (hpos); if (hpos - 1 != spr[num].ptxhpos) { spr[num].pt &= ~0xffff; spr[num].pt |= v & ~1; } #if SPRITE_DEBUG > 0 if (vpos >= SPRITE_DEBUG_MINY && vpos <= SPRITE_DEBUG_MAXY) { write_log (_T("%d:%d:SPR%dPTL %06X\n"), vpos, hpos, num, spr[num].pt); } #endif } static void CLXCON (uae_u16 v) { clxcon = v; clxcon_bpl_enable = (v >> 6) & 63; clxcon_bpl_match = v & 63; } static void CLXCON2 (uae_u16 v) { if (!(currprefs.chipset_mask & CSMASK_AGA)) return; clxcon2 = v; clxcon_bpl_enable |= v & (0x40 | 0x80); clxcon_bpl_match |= (v & (0x01 | 0x02)) << 6; } static uae_u16 CLXDAT (void) { uae_u16 v = clxdat | 0x8000; clxdat = 0; return v; } #ifdef AGA void dump_aga_custom (void) { int c1, c2, c3, c4; uae_u32 rgb1, rgb2, rgb3, rgb4; for (c1 = 0; c1 < 64; c1++) { c2 = c1 + 64; c3 = c2 + 64; c4 = c3 + 64; rgb1 = current_colors.color_regs_aga[c1] | (color_regs_aga_genlock[c1] << 31); rgb2 = current_colors.color_regs_aga[c2] | (color_regs_aga_genlock[c2] << 31); rgb3 = current_colors.color_regs_aga[c3] | (color_regs_aga_genlock[c3] << 31); rgb4 = current_colors.color_regs_aga[c4] | (color_regs_aga_genlock[c4] << 31); console_out_f (_T("%3d %08X %3d %08X %3d %08X %3d %08X\n"), c1, rgb1, c2, rgb2, c3, rgb3, c4, rgb4); } } static uae_u16 COLOR_READ (int num) { int cr, cg, cb, colreg; uae_u16 cval; if (!(currprefs.chipset_mask & CSMASK_AGA) || !(bplcon2 & 0x0100)) return 0xffff; colreg = ((bplcon3 >> 13) & 7) * 32 + num; cr = current_colors.color_regs_aga[colreg] >> 16; cg = (current_colors.color_regs_aga[colreg] >> 8) & 0xFF; cb = current_colors.color_regs_aga[colreg] & 0xFF; if (bplcon3 & 0x200) { cval = ((cr & 15) << 8) | ((cg & 15) << 4) | ((cb & 15) << 0); } else { cval = ((cr >> 4) << 8) | ((cg >> 4) << 4) | ((cb >> 4) << 0); if (color_regs_aga_genlock[num]) cval |= 0x8000; } return cval; } #endif static void checkautoscalecol0 (void) { if (!copper_access) return; if (vpos < 20) return; if (isbrdblank (-1, bplcon0, bplcon3)) return; // autoscale if copper changes COLOR00 on top or bottom of screen if (vpos >= minfirstline) { int vpos2 = autoscale_bordercolors ? minfirstline : vpos; if (first_planes_vpos == 0) first_planes_vpos = vpos2 - 2; if (plffirstline_total == current_maxvpos ()) plffirstline_total = vpos2 - 2; if (vpos2 > last_planes_vpos || vpos2 > plflastline_total) plflastline_total = last_planes_vpos = vpos2 + 3; autoscale_bordercolors = 0; } else { autoscale_bordercolors++; } } static void COLOR_WRITE (int hpos, uae_u16 v, int num) { bool colzero = false; v &= 0xFFF; #ifdef AGA if (currprefs.chipset_mask & CSMASK_AGA) { int r,g,b; int cr,cg,cb; int colreg; uae_u32 cval; /* writing is disabled when RDRAM=1 */ if (bplcon2 & 0x0100) return; colreg = ((bplcon3 >> 13) & 7) * 32 + num; r = (v & 0xF00) >> 8; g = (v & 0xF0) >> 4; b = (v & 0xF) >> 0; cr = current_colors.color_regs_aga[colreg] >> 16; cg = (current_colors.color_regs_aga[colreg] >> 8) & 0xFF; cb = current_colors.color_regs_aga[colreg] & 0xFF; if (bplcon3 & 0x200) { cr &= 0xF0; cr |= r; cg &= 0xF0; cg |= g; cb &= 0xF0; cb |= b; } else { cr = r + (r << 4); cg = g + (g << 4); cb = b + (b << 4); color_regs_aga_genlock[colreg] = v >> 15; } cval = (cr << 16) | (cg << 8) | cb; if (cval && colreg == 0) colzero = true; if (cval == current_colors.color_regs_aga[colreg]) return; if (colreg == 0) checkautoscalecol0 (); /* Call this with the old table still intact. */ record_color_change (hpos, colreg, cval); remembered_color_entry = -1; current_colors.color_regs_aga[colreg] = cval; current_colors.acolors[colreg] = getxcolor (cval); } else { #endif if (num && v == 0) colzero = true; if (current_colors.color_regs_ecs[num] == v) return; if (num == 0) checkautoscalecol0 (); /* Call this with the old table still intact. */ record_color_change (hpos, num, v); remembered_color_entry = -1; current_colors.color_regs_ecs[num] = v; current_colors.acolors[num] = getxcolor (v); #ifdef AGA } #endif } /* The copper code. The biggest nightmare in the whole emulator. Alright. The current theory: 1. Copper moves happen 2 cycles after state READ2 is reached. It can't happen immediately when we reach READ2, because the data needs time to get back from the bus. An additional 2 cycles are needed for non-Agnus registers, to take into account the delay for moving data from chip to chip. 2. As stated in the HRM, a WAIT really does need an extra cycle to wake up. This is implemented by _not_ falling through from a successful wait to READ1, but by starting the next cycle. (Note: the extra cycle for the WAIT apparently really needs a free cycle; i.e. contention with the bitplane fetch can slow it down). 3. Apparently, to compensate for the extra wake up cycle, a WAIT will use the _incremented_ horizontal position, so the WAIT cycle normally finishes two clocks earlier than the position it was waiting for. The extra cycle then takes us to the position that was waited for. If the earlier cycle is busy with a bitplane, things change a bit. E.g., waiting for position 0x50 in a 6 plane display: In cycle 0x4e, we fetch BPL5, so the wait wakes up in 0x50, the extra cycle takes us to 0x54 (since 0x52 is busy), then we have READ1/READ2, and the next register write is at 0x5c. 4. The last cycle in a line is not usable for the copper. 5. A 4 cycle delay also applies to the WAIT instruction. This means that the second of two back-to-back WAITs (or a WAIT whose condition is immediately true) takes 8 cycles. 6. This also applies to a SKIP instruction. The copper does not fetch the next instruction while waiting for the second word of a WAIT or a SKIP to arrive. 7. A SKIP also seems to need an unexplained additional two cycles after its second word arrives; this is _not_ a memory cycle (I think, the documentation is pretty clear on this). 8. Two additional cycles are inserted when writing to COPJMP1/2. */ /* Determine which cycles are available for the copper in a display * with a agiven number of planes. */ STATIC_INLINE int copper_cant_read2 (int hpos, int alloc) { if (hpos + 1 >= maxhpos) // first refresh slot return 1; if ((hpos == maxhpos - 3) && (maxhpos & 1) && alloc >= 0) { if (alloc) alloc_cycle (hpos, CYCLE_COPPER); return -1; } return is_bitplane_dma_inline (hpos); } static int copper_cant_read (int hpos, int alloc) { int cant = copper_cant_read2 (hpos, alloc); if (cant && debug_dma) record_dma_event (DMA_EVENT_COPPERWANTED, hpos, vpos); return cant; } static int custom_wput_copper (int hpos, uaecptr addr, uae_u32 value, int noget) { int v; value = debug_wputpeekdma (0xdff000 + addr, value); copper_access = 1; v = custom_wput_1 (hpos, addr, value, noget); copper_access = 0; return v; } static void dump_copper (const TCHAR *error, int until_hpos) { write_log (_T("\n")); write_log (_T("%s: vpos=%d until_hpos=%d vp=%d\n"), error, vpos, until_hpos, vpos & (((cop_state.saved_i2 >> 8) & 0x7F) | 0x80)); write_log (_T("cvcmp=%d chcmp=%d chpos=%d cvpos=%d ci1=%04X ci2=%04X\n"), cop_state.vcmp, cop_state.hcmp, cop_state.hpos, cop_state.vpos, cop_state.saved_i1, cop_state.saved_i2); write_log (_T("cstate=%d ip=%x SPCFLAGS=%x iscline=%d\n"), cop_state.state, cop_state.ip, regs.spcflags, copper_enabled_thisline); write_log (_T("\n")); } // "emulate" chip internal delays, not the right place but fast and 99.9% programs // use only copper to write BPLCON1 etc.. (exception is HulkaMania/TSP..) // this table should be filled with zeros and done somewhere else.. static int customdelay[]= { 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0, /* 32 0x00 - 0x3e */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0x40 - 0x5e */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0x60 - 0x7e */ 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0, /* 0x80 - 0x9e */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 32 0xa0 - 0xde */ /* BPLxPTH/BPLxPTL */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 16 */ /* BPLCON0-3,BPLMOD1-2 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 16 */ /* SPRxPTH/SPRxPTL */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 16 */ /* SPRxPOS/SPRxCTL/SPRxDATA/SPRxDATB */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* COLORxx */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* RESERVED */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }; static void copper_write (uae_u32 v) { custom_wput_copper (current_hpos (), v >> 16, v & 0xffff, 0); } static void update_copper (int until_hpos) { int vp = vpos & (((cop_state.saved_i2 >> 8) & 0x7F) | 0x80); int c_hpos = cop_state.hpos; if (nocustom ()) return; if (cop_state.state == COP_wait && vp < cop_state.vcmp) { dump_copper (_T("error2"), until_hpos); copper_enabled_thisline = 0; cop_state.state = COP_stop; unset_special (SPCFLAG_COPPER); return; } if (until_hpos <= last_copper_hpos) return; if (until_hpos > (maxhpos & ~1)) until_hpos = maxhpos & ~1; for (;;) { int old_hpos = c_hpos; int hp; if (c_hpos >= until_hpos) break; /* So we know about the fetch state. */ decide_line (c_hpos); decide_fetch (c_hpos); if (cop_state.movedelay > 0) { cop_state.movedelay--; if (cop_state.movedelay == 0) { custom_wput_copper (c_hpos, cop_state.moveaddr, cop_state.movedata, 0); } } if ((c_hpos == maxhpos - 3) && (maxhpos & 1)) c_hpos += 1; else c_hpos += 2; switch (cop_state.state) { case COP_wait_in2: if (copper_cant_read (old_hpos, 0)) continue; cop_state.state = COP_wait1; break; case COP_skip_in2: if (copper_cant_read (old_hpos, 0)) continue; cop_state.state = COP_skip1; break; case COP_strobe_extra: // Wait 1 copper cycle doing nothing cop_state.state = COP_strobe_delay1; break; case COP_strobe_delay1: // First cycle after COPJMP is just like normal first read cycle // Cycle is used and needs to be free. if (copper_cant_read (old_hpos, 1)) continue; cop_state.state = COP_strobe_delay2; alloc_cycle (old_hpos, CYCLE_COPPER); #ifdef DEBUGGER if (debug_dma) record_dma (0x8c, chipmem_wget_indirect (cop_state.ip), cop_state.ip, old_hpos, vpos, DMARECORD_COPPER); #endif cop_state.ip += 2; break; case COP_strobe_delay2: // Second cycle after COPJMP. This is the strange one. // This cycle does not need to be free // But it still gets allocated by copper if it is free = CPU and blitter can't use it. if (copper_cant_read (old_hpos, 1)) { alloc_cycle (old_hpos, CYCLE_COPPER); if (debug_dma) record_dma (0x1fe, chipmem_wget_indirect (cop_state.ip), cop_state.ip, old_hpos, vpos, DMARECORD_COPPER); } cop_state.state = COP_read1; // Next cycle finally reads from new pointer if (cop_state.strobe == 1) cop_state.ip = cop1lc; else cop_state.ip = cop2lc; cop_state.strobe = 0; break; case COP_strobe_delay1x: // First cycle after COPJMP and Copper was waiting. This is the buggy one. // Cycle can be free and copper won't allocate it. // If Blitter uses this cycle = Copper's address gets copied blitter DMA pointer.. cop_state.state = COP_strobe_delay2x; break; case COP_strobe_delay2x: // Second cycle fetches following word and tosses it away. Must be free cycle // but is not allocated, blitter or cpu can still use it. if (copper_cant_read (old_hpos, 1)) continue; cycle_line[old_hpos] |= CYCLE_COPPER_SPECIAL; if (debug_dma) record_dma (0x1fe, chipmem_wget_indirect (cop_state.ip), cop_state.ip, old_hpos, vpos, DMARECORD_COPPER); cop_state.state = COP_read1; // Next cycle finally reads from new pointer if (cop_state.strobe == 1) cop_state.ip = cop1lc; else cop_state.ip = cop2lc; cop_state.strobe = 0; break; case COP_start_delay: if (copper_cant_read (old_hpos, 1)) continue; cop_state.state = COP_read1; alloc_cycle (old_hpos, CYCLE_COPPER); if (debug_dma) record_dma (0x1fe, 0, 0xffffffff, old_hpos, vpos, DMARECORD_COPPER); cop_state.ip = cop1lc; break; case COP_read1: if (copper_cant_read (old_hpos, 1)) continue; cop_state.i1 = last_custom_value1 = chipmem_wget_indirect (cop_state.ip); alloc_cycle (old_hpos, CYCLE_COPPER); #ifdef DEBUGGER if (debug_dma) record_dma (0x8c, cop_state.i1, cop_state.ip, old_hpos, vpos, DMARECORD_COPPER); #endif cop_state.ip += 2; cop_state.state = COP_read2; break; case COP_read2: if (copper_cant_read (old_hpos, 1)) continue; cop_state.i2 = last_custom_value1 = chipmem_wget_indirect (cop_state.ip); alloc_cycle (old_hpos, CYCLE_COPPER); cop_state.ip += 2; cop_state.saved_i1 = cop_state.i1; cop_state.saved_i2 = cop_state.i2; cop_state.saved_ip = cop_state.ip; if (cop_state.i1 & 1) { // WAIT or SKIP cop_state.ignore_next = 0; if (cop_state.i2 & 1) cop_state.state = COP_skip_in2; else cop_state.state = COP_wait_in2; #ifdef DEBUGGER if (debug_dma) record_dma (0x8c, cop_state.i2, cop_state.ip - 2, old_hpos, vpos, DMARECORD_COPPER); #endif } else { // MOVE #ifdef DEBUGGER uaecptr debugip = cop_state.ip; #endif unsigned int reg = cop_state.i1 & 0x1FE; uae_u16 data = cop_state.i2; cop_state.state = COP_read1; #ifdef DEBUGGER if (debug_dma) record_dma (reg, data, cop_state.ip - 2, old_hpos, vpos, DMARECORD_COPPER); #endif test_copper_dangerous (reg); if (! copper_enabled_thisline) goto out; // was "dangerous" register -> copper stopped if (cop_state.ignore_next) reg = 0x1fe; cop_state.last_write = reg; cop_state.last_write_hpos = old_hpos; if (reg == 0x88) { cop_state.strobe = 1; cop_state.state = COP_strobe_delay1; } else if (reg == 0x8a) { cop_state.strobe = 2; cop_state.state = COP_strobe_delay1; } else { #if 0 event2_newevent2 (1, (reg << 16) | data, copper_write); #else // FIX: all copper writes happen 1 cycle later than CPU writes if (customdelay[reg / 2]) { cop_state.moveaddr = reg; cop_state.movedata = data; cop_state.movedelay = customdelay[cop_state.moveaddr / 2]; } else { int hpos2 = old_hpos; custom_wput_copper (hpos2, reg, data, 0); hpos2++; if (!nocustom () && reg >= 0x140 && reg < 0x180 && hpos2 >= SPR0_HPOS && hpos2 < SPR0_HPOS + 4 * MAX_SPRITES) { do_sprites (hpos2); } } #endif } #ifdef DEBUGGER if (debug_copper && !cop_state.ignore_next) record_copper (debugip - 4, old_hpos, vpos); #endif cop_state.ignore_next = 0; } break; case COP_wait1: #if 0 /* There's a nasty case here. As stated in the "Theory" comment above, we test against the incremented copper position. I believe this means that we have to increment the _vertical_ position at the last cycle in the line, and set the horizontal position to 0. Normally, this isn't going to make a difference, since we consider these last cycles unavailable for the copper, so waking up in the last cycle has the same effect as waking up at the start of the line. However, there is one possible problem: If we're at 0xFFE0, any wait for an earlier position must _not_ complete (since, in effect, the current position will be back at 0/0). This can be seen in the Superfrog copper list. Things get monstrously complicated if we try to handle this "properly" by incrementing vpos and setting c_hpos to 0. Especially the various speedup hacks really assume that vpos remains constant during one line. Hence, this hack: defer the entire decision until the next line if necessary. */ #endif #if 0 /* Above is not true anymore */ if (c_hpos >= (maxhpos & ~1) || (c_hpos & 1)) { break; } #endif cop_state.state = COP_wait; cop_state.vcmp = (cop_state.saved_i1 & (cop_state.saved_i2 | 0x8000)) >> 8; cop_state.hcmp = (cop_state.saved_i1 & cop_state.saved_i2 & 0xFE); vp = vpos & (((cop_state.saved_i2 >> 8) & 0x7F) | 0x80); if (cop_state.saved_i1 == 0xFFFF && cop_state.saved_i2 == 0xFFFE) { cop_state.state = COP_waitforever; copper_enabled_thisline = 0; unset_special (SPCFLAG_COPPER); goto out; } if (vp < cop_state.vcmp) { copper_enabled_thisline = 0; unset_special (SPCFLAG_COPPER); goto out; } /* fall through */ case COP_wait: { int ch_comp = c_hpos; if (ch_comp & 1) ch_comp = 0; if (copper_cant_read (old_hpos, 0)) continue; hp = ch_comp & (cop_state.saved_i2 & 0xFE); if (vp == cop_state.vcmp && hp < cop_state.hcmp) break; /* Now we know that the comparisons were successful. We might still have to wait for the blitter though. */ if ((cop_state.saved_i2 & 0x8000) == 0) { decide_blitter (old_hpos); if (bltstate != BLT_done) { /* We need to wait for the blitter. */ cop_state.state = COP_bltwait; copper_enabled_thisline = 0; unset_special (SPCFLAG_COPPER); goto out; } else { if (debug_dma) record_dma_event (DMA_EVENT_COPPERWAKE, old_hpos, vp); } } #ifdef DEBUGGER if (debug_copper) record_copper (cop_state.ip - 4, old_hpos, vpos); #endif cop_state.state = COP_read1; } break; case COP_skip1: { unsigned int vcmp, hcmp, vp1, hp1; if (c_hpos >= (maxhpos & ~1) || (c_hpos & 1)) break; if (copper_cant_read (old_hpos, 0)) continue; vcmp = (cop_state.saved_i1 & (cop_state.saved_i2 | 0x8000)) >> 8; hcmp = (cop_state.saved_i1 & cop_state.saved_i2 & 0xFE); vp1 = vpos & (((cop_state.saved_i2 >> 8) & 0x7F) | 0x80); hp1 = c_hpos & (cop_state.saved_i2 & 0xFE); if ((vp1 > vcmp || (vp1 == vcmp && hp1 >= hcmp)) && ((cop_state.saved_i2 & 0x8000) != 0 || bltstate == BLT_done)) cop_state.ignore_next = 1; cop_state.state = COP_read1; #ifdef DEBUGGER if (debug_copper) record_copper (cop_state.ip - 4, old_hpos, vpos); #endif break; } default: break; } } out: cop_state.hpos = c_hpos; last_copper_hpos = until_hpos; } static void compute_spcflag_copper (int hpos) { int wasenabled = copper_enabled_thisline; copper_enabled_thisline = 0; unset_special (SPCFLAG_COPPER); if (!dmaen (DMA_COPPER) || cop_state.state == COP_stop || cop_state.state == COP_waitforever || cop_state.state == COP_bltwait || nocustom ()) return; if (cop_state.state == COP_wait) { int vp = vpos & (((cop_state.saved_i2 >> 8) & 0x7F) | 0x80); if (vp < cop_state.vcmp) return; } // do not use past cycles if starting for the first time in this line // (write to DMACON for example) hpos+1 for long lines if (!wasenabled && cop_state.hpos < hpos && hpos < maxhpos) { hpos = (hpos + 2) & ~1; if (hpos > (maxhpos_short & ~1)) hpos = maxhpos_short & ~1; cop_state.hpos = hpos; } // if COPJMPx was written while DMA was disabled, advance to next state, // COP_strobe_extra is single cycle only and does not need free bus. // (copper state emulation does not run if DMA is disabled) if (!wasenabled && cop_state.state == COP_strobe_extra) cop_state.state = COP_strobe_delay1; copper_enabled_thisline = 1; set_special (SPCFLAG_COPPER); } /* Copper writes to BLTSIZE: 3 blitter idle cycles, blitter normal cycle starts (CPU write to BLTSIZE only have 2 idle cycles at start) BFD=0 wait: 1 cycle (or 2 if hpos is not aligned) delay before wait ends */ void blitter_done_notify (int hpos) { int vp = vpos; if (cop_state.state != COP_bltwait) return; hpos += 3; hpos &= ~1; if (hpos >= maxhpos) { hpos -= maxhpos; vp++; } cop_state.hpos = hpos; cop_state.vpos = vp; cop_state.state = COP_read1; if (debug_dma) record_dma_event (DMA_EVENT_COPPERWAKE, hpos, vp); if (dmaen (DMA_COPPER) && vp == vpos) { copper_enabled_thisline = 1; set_special (SPCFLAG_COPPER); } } void do_copper (void) { int hpos = current_hpos (); update_copper (hpos); } /* ADDR is the address that is going to be read/written; this access is the reason why we want to update the copper. This function is also used from hsync_handler to finish up the line; for this case, we check hpos against maxhpos. */ STATIC_INLINE void sync_copper_with_cpu (int hpos, int do_schedule) { /* Need to let the copper advance to the current position. */ if (copper_enabled_thisline) update_copper (hpos); } static void cursorsprite (void) { if (!dmaen (DMA_SPRITE) || first_planes_vpos == 0) return; sprite_0 = spr[0].pt; sprite_0_height = spr[0].vstop - spr[0].vstart; sprite_0_colors[0] = 0; sprite_0_doubled = 0; if (sprres == 0) sprite_0_doubled = 1; if (currprefs.chipset_mask & CSMASK_AGA) { int sbasecol = ((bplcon4 >> 4) & 15) << 4; sprite_0_colors[1] = current_colors.color_regs_aga[sbasecol + 1]; sprite_0_colors[2] = current_colors.color_regs_aga[sbasecol + 2]; sprite_0_colors[3] = current_colors.color_regs_aga[sbasecol + 3]; } else { sprite_0_colors[1] = xcolors[current_colors.color_regs_ecs[17]]; sprite_0_colors[2] = xcolors[current_colors.color_regs_ecs[18]]; sprite_0_colors[3] = xcolors[current_colors.color_regs_ecs[19]]; } sprite_0_width = sprite_width; if (currprefs.input_tablet && currprefs.input_magic_mouse) { if (currprefs.input_magic_mouse_cursor == MAGICMOUSE_HOST_ONLY && mousehack_alive ()) magic_sprite_mask &= ~1; else magic_sprite_mask |= 1; } } STATIC_INLINE uae_u16 sprite_fetch (struct sprite *s, int dma, int hpos, int cycle, int mode) { uae_u16 data = last_custom_value1; if (dma) { if (cycle && currprefs.cpu_cycle_exact) s->ptxhpos = hpos; data = last_custom_value1 = chipmem_wget_indirect (s->pt); alloc_cycle (hpos, CYCLE_SPRITE); #ifdef DEBUGGER if (debug_dma) record_dma ((s - &spr[0]) * 8 + 0x140 + mode * 4 + cycle * 2, data, s->pt, hpos, vpos, DMARECORD_SPRITE); #endif } s->pt += 2; return data; } STATIC_INLINE uae_u16 sprite_fetch2 (struct sprite *s, int hpos, int cycle, int mode) { uae_u16 data = last_custom_value1 = chipmem_wget_indirect (s->pt); s->pt += 2; return data; } STATIC_INLINE void do_sprites_1 (int num, int cycle, int hpos) { struct sprite *s = &spr[num]; int dma, posctl = 0; uae_u16 data; // fetch both sprite pairs even if DMA was switched off between sprites int isdma = dmaen (DMA_SPRITE) || ((num & 1) && spr[num & ~1].dmacycle); if (isdma && vpos == sprite_vblank_endline) spr_arm (num, 0); #ifdef AGA if (isdma && s->dblscan && (fmode & 0x8000) && (vpos & 1) != (s->vstart & 1) && s->dmastate) { spr_arm (num, 1); return; } #endif #if SPRITE_DEBUG > 3 if (vpos >= SPRITE_DEBUG_MINY && vpos <= SPRITE_DEBUG_MAXY) write_log (_T("%d:%d:slot%d:%d\n"), vpos, hpos, num, cycle); #endif if (vpos == s->vstart) { #if SPRITE_DEBUG > 0 if (!s->dmastate && vpos >= SPRITE_DEBUG_MINY && vpos <= SPRITE_DEBUG_MAXY) write_log (_T("%d:%d:SPR%d START\n"), vpos, hpos, num); #endif s->dmastate = 1; if (num == 0 && cycle == 0) cursorsprite (); } if (vpos == s->vstop || vpos == sprite_vblank_endline) { #if SPRITE_DEBUG > 0 if (s->dmastate && vpos >= SPRITE_DEBUG_MINY && vpos <= SPRITE_DEBUG_MAXY) write_log (_T("%d:%d:SPR%d STOP\n"), vpos, hpos, num); #endif s->dmastate = 0; #if 0 // roots 2.0 flower zoomer bottom part missing if this enabled if (vpos == s->vstop) { spr_arm (num, 0); //return; } #endif } if (!isdma) return; if (cycle && !s->dmacycle) return; /* Superfrog intro flashing bee fix */ dma = hpos < plfstrt_sprite || diwstate != DIW_waiting_stop; if (vpos == s->vstop || vpos == sprite_vblank_endline) { s->dmastate = 0; posctl = 1; if (dma) { data = sprite_fetch (s, dma, hpos, cycle, 0); switch (sprite_width) { case 64: sprite_fetch2 (s, hpos, cycle, 0); sprite_fetch2 (s, hpos, cycle, 0); case 32: sprite_fetch2 (s, hpos, cycle, 0); break; } //write_log (_T("%d:%d: %04X=%04X\n"), vpos, hpos, 0x140 + cycle * 2 + num * 8, data); if (cycle == 0) { SPRxPOS_1 (data, num, hpos); s->dmacycle = 1; } else { SPRxCTL_1 (data, num, hpos); s->dmastate = 0; sprstartstop (s); } } #if SPRITE_DEBUG > 1 if (vpos >= SPRITE_DEBUG_MINY && vpos <= SPRITE_DEBUG_MAXY) { write_log (_T("%d:%d:dma:P=%06X "), vpos, hpos, s->pt); } #endif } if (s->dmastate && !posctl && dma) { uae_u16 data; data = sprite_fetch (s, dma, hpos, cycle, 1); #if SPRITE_DEBUG > 1 if (vpos >= SPRITE_DEBUG_MINY && vpos <= SPRITE_DEBUG_MAXY) { write_log (_T("%d:%d:dma:P=%06X "), vpos, hpos, s->pt); } #endif if (cycle == 0) { SPRxDATA_1 (data, num, hpos); s->dmacycle = 1; } else { SPRxDATB_1 (data, num, hpos); spr_arm (num, 1); } #ifdef AGA switch (sprite_width) { case 64: { uae_u16 data32 = sprite_fetch2 (s, hpos, cycle, 1); uae_u16 data641 = sprite_fetch2 (s, hpos, cycle, 1); uae_u16 data642 = sprite_fetch2 (s, hpos, cycle, 1); if (dma) { if (cycle == 0) { sprdata[num][3] = data642; sprdata[num][2] = data641; sprdata[num][1] = data32; } else { sprdatb[num][3] = data642; sprdatb[num][2] = data641; sprdatb[num][1] = data32; } } } break; case 32: { uae_u16 data32 = sprite_fetch2 (s, hpos, cycle, 1); if (dma) { if (cycle == 0) sprdata[num][1] = data32; else sprdatb[num][1] = data32; } } break; } #endif } } static void do_sprites (int hpos) { int maxspr, minspr; int i; if (vpos < sprite_vblank_endline) return; if (doflickerfix () && interlace_seen && (next_lineno & 1)) return; #ifndef CUSTOM_SIMPLE maxspr = hpos; minspr = last_sprite_hpos + 1; if (minspr >= maxspr || last_sprite_hpos == hpos) return; if (maxspr >= SPR0_HPOS + MAX_SPRITES * 4) maxspr = SPR0_HPOS + MAX_SPRITES * 4 - 1; if (minspr < SPR0_HPOS) minspr = SPR0_HPOS; if (minspr == maxspr) return; for (i = minspr; i <= maxspr; i++) { int cycle = -1; int num = (i - SPR0_HPOS) / 4; switch ((i - SPR0_HPOS) & 3) { case 0: cycle = 0; spr[num].dmacycle = 0; break; case 2: cycle = 1; break; } if (cycle >= 0) { spr[num].ptxhpos = MAXHPOS; do_sprites_1 (num, cycle, i); } } last_sprite_hpos = hpos; #else for (i = 0; i < MAX_SPRITES * 2; i++) { spr[i / 2].dmacycle = 1; do_sprites_1 (i / 2, i & 1, 0); } #endif } static void init_sprites (void) { memset (sprpos, 0, sizeof sprpos); memset (sprctl, 0, sizeof sprctl); } static void init_hardware_frame (void) { int i; first_bpl_vpos = -1; next_lineno = 0; prev_lineno = -1; nextline_how = nln_normal; diwstate = DIW_waiting_start; ddfstate = DIW_waiting_start; first_planes_vpos = 0; last_planes_vpos = 0; diwfirstword_total = max_diwlastword; diwlastword_total = 0; ddffirstword_total = max_diwlastword; ddflastword_total = 0; plflastline_total = 0; plffirstline_total = current_maxvpos (); autoscale_bordercolors = 0; for (i = 0; i < MAX_SPRITES; i++) spr[i].ptxhpos = MAXHPOS; } void init_hardware_for_drawing_frame (void) { /* Avoid this code in the first frame after a customreset. */ if (prev_sprite_entries) { int first_pixel = prev_sprite_entries[0].first_pixel; int npixels = prev_sprite_entries[prev_next_sprite_entry].first_pixel - first_pixel; memset (spixels + first_pixel, 0, npixels * sizeof *spixels); memset (spixstate.bytes + first_pixel, 0, npixels * sizeof *spixstate.bytes); } prev_next_sprite_entry = next_sprite_entry; next_color_change = 0; next_sprite_entry = 0; next_color_entry = 0; remembered_color_entry = -1; prev_sprite_entries = sprite_entries[current_change_set]; curr_sprite_entries = sprite_entries[current_change_set ^ 1]; prev_color_changes = color_changes[current_change_set]; curr_color_changes = color_changes[current_change_set ^ 1]; prev_color_tables = color_tables[current_change_set]; curr_color_tables = color_tables[current_change_set ^ 1]; prev_drawinfo = line_drawinfo[current_change_set]; curr_drawinfo = line_drawinfo[current_change_set ^ 1]; current_change_set ^= 1; color_src_match = color_dest_match = -1; /* Use both halves of the array in alternating fashion. */ curr_sprite_entries[0].first_pixel = current_change_set * MAX_SPR_PIXELS; next_sprite_forced = 1; } static void do_savestate(void); static int rpt_vsync (int adjust) { frame_time_t curr_time = read_processor_time (); int v = curr_time - vsyncwaittime + adjust; if (v > syncbase || v < -syncbase) { vsyncmintime = vsyncmaxtime = vsyncwaittime = curr_time; v = 0; } return v; } static void rtg_vsync (void) { #ifdef PICASSO96 frame_time_t start, end; start = read_processor_time (); picasso_handle_vsync (); end = read_processor_time (); frameskiptime += end - start; #endif } static void rtg_vsynccheck (void) { if (vblank_found_rtg) { vblank_found_rtg = false; rtg_vsync (); } } // moving average algorithm #define MAVG_MAX_SIZE 128 struct mavg_data { int values[MAVG_MAX_SIZE]; int size; int offset; int mavg; }; static void mavg_clear (struct mavg_data *md) { md->size = 0; md->offset = 0; md->mavg = 0; } static int mavg (struct mavg_data *md, int newval, int size) { if (md->size < size) { md->values[md->size++] = newval; md->mavg += newval; } else { md->mavg -= md->values[md->offset]; md->values[md->offset] = newval; md->mavg += newval; md->offset++; if (md->offset >= size) md->offset -= size; } return md->mavg / md->size; } #define MAVG_VSYNC_SIZE 128 extern int log_vsync, debug_vsync_min_delay, debug_vsync_forced_delay; #ifdef FSUAE static bool framewait_2(void) #else static bool framewait (void) #endif { frame_time_t curr_time; frame_time_t start; int vs = isvsync_chipset (); int status = 0; is_syncline = 0; static struct mavg_data ma_frameskipt; int frameskipt_avg = mavg (&ma_frameskipt, frameskiptime, MAVG_VSYNC_SIZE); frameskiptime = 0; if (vs > 0) { static struct mavg_data ma_legacy; static frame_time_t vsync_time; int t; curr_time = read_processor_time (); vsyncwaittime = vsyncmaxtime = curr_time + vsynctimebase; if (!frame_rendered && !picasso_on) frame_rendered = render_screen (false); start = read_processor_time (); t = 0; if ((int)start - (int)vsync_time >= 0 && (int)start - (int)vsync_time < vsynctimebase) t += (int)start - (int)vsync_time; if (!frame_shown) show_screen (); int legacy_avg = mavg (&ma_legacy, t, MAVG_VSYNC_SIZE); if (t > legacy_avg) legacy_avg = t; t = legacy_avg; if (debug_vsync_min_delay && t < debug_vsync_min_delay * vsynctimebase / 100) t = debug_vsync_min_delay * vsynctimebase / 100; if (debug_vsync_forced_delay > 0) t = debug_vsync_forced_delay * vsynctimebase / 100; vsync_time = read_processor_time (); if (t > vsynctimebase * 2 / 3) t = vsynctimebase * 2 / 3; if (currprefs.m68k_speed < 0) { vsynctimeperline = (vsynctimebase - t) / (maxvpos_nom + 1); } else { vsynctimeperline = (vsynctimebase - t) / 3; } if (vsynctimeperline < 1) vsynctimeperline = 1; if (0 || (log_vsync & 2)) { write_log (_T("%06d %06d/%06d %03d%%\n"), t, vsynctimeperline, vsynctimebase, t * 100 / vsynctimebase); } frame_shown = true; return 1; } else if (vs < 0) { int freetime; extern int extraframewait; if (!vblank_hz_state) return status != 0; if (vs == -2 || vs == -3) { // fastest possible int max, adjust, flipdelay, val; frame_time_t now; static struct mavg_data ma_skip, ma_adjust; val = 0; if (!frame_rendered && !picasso_on) { frame_time_t start, end; start = read_processor_time (); frame_rendered = render_screen (currprefs.gfx_apmode[0].gfx_vflip == 0); end = read_processor_time (); val += end - start; } curr_time = vsync_busywait_end (&flipdelay); // vsync time status = vsync_busywait_do (NULL, (bplcon0 & 4) != 0 && !lof_changed && !lof_changing, lof_store != 0); vsync_busywait_start (); now = read_processor_time (); // current time adjust = (int)now - (int)curr_time; //write_log (_T("%d "), adjust); if (adjust < 0 || adjust >= vsynctimebase) adjust = 0; if (adjust > vsynctimebase * 2 / 3) adjust = vsynctimebase * 2 / 3; int adjust_avg = mavg (&ma_adjust, adjust, MAVG_VSYNC_SIZE); val += adjust_avg; int flipdelay_avg = mavg (&ma_skip, flipdelay, MAVG_VSYNC_SIZE); if (flipdelay > flipdelay_avg) flipdelay_avg = flipdelay; if (currprefs.gfx_apmode[0].gfx_vflip == 0) { val += flipdelay_avg; //write_log (_T("%d "), skipcnt); } val += frameskipt_avg; if (currprefs.gfx_apmode[0].gfx_vflip == 0) { if (debug_vsync_min_delay && val < debug_vsync_min_delay * vsynctimebase / 100) val = debug_vsync_min_delay * vsynctimebase / 100; if (debug_vsync_forced_delay > 0) val = debug_vsync_forced_delay * vsynctimebase / 100; } //write_log (_T("%d "), adjust); if (val > vsynctimebase * 2 / 3) val = vsynctimebase * 2 / 3; max = (int)((vsynctimebase - val) * (1000.0 + currprefs.m68k_speed_throttle) / 1000.0); if (max < 1) max = 1; vsyncmintime = now; vsyncwaittime = curr_time + (vsynctimebase - 0); vsynctimeperline = max / (maxvpos_nom + 1); if (status <= 0 || vsynctimeperline < 1) vsynctimeperline = 1; vsyncmaxtime = now + max; if (0 || (log_vsync & 2)) { write_log (_T("%05d:%05d:%05d=%05d:%05d/%05d %03d%%\n"), adjust_avg, frameskipt_avg, flipdelay_avg, val, vsynctimeperline, vsynctimebase, val * 100 / vsynctimebase); } frame_shown = true; } else { int max, adjust, flipdelay, flipdelay_avg; static struct mavg_data ma_skip; frame_time_t now; flipdelay = 0; curr_time = vsync_busywait_end (&flipdelay); if (!frame_rendered && !picasso_on) frame_rendered = render_screen (false); status = vsync_busywait_do (&freetime, (bplcon0 & 4) != 0 && !lof_changed && !lof_changing, lof_store != 0); vsync_busywait_start (); now = read_processor_time (); if (extraframewait && !currprefs.turbo_emulation) sleep_millis_main (extraframewait); adjust = (int)now - (int)curr_time; int adjustx = adjust; if (adjust < 0) adjust = 0; if (adjust > vsynctimebase) adjust = 0; if (adjust > vsynctimebase / 2) adjust = vsynctimebase / 2; vsyncmintime = now; vsyncwaittime = curr_time + vsynctimebase; if (currprefs.gfx_apmode[0].gfx_vflip == 0) { flipdelay_avg = mavg (&ma_skip, flipdelay, MAVG_VSYNC_SIZE); if (flipdelay > flipdelay_avg) flipdelay_avg = flipdelay; } else { flipdelay_avg = 0; } max = vsynctimebase - adjust - flipdelay_avg; if (currprefs.gfx_apmode[0].gfx_vflip == 0) { int val = vsynctimebase - max; if (debug_vsync_min_delay && val < debug_vsync_min_delay * vsynctimebase / 100) val = debug_vsync_min_delay * vsynctimebase / 100; if (debug_vsync_forced_delay > 0) val = debug_vsync_forced_delay * vsynctimebase / 100; max = vsynctimebase - val; } vsynctimeperline = max / 3; if (status <= 0 || vsynctimeperline < 1) vsynctimeperline = 1; vsyncmaxtime = now + max; if (0 || (log_vsync & 2)) { write_log (_T("%06d:%06d:%06d:%06d %06d/%06d %03d%%\n"), frameskipt_avg, flipdelay_avg, adjust, adjustx, vsynctimeperline, vsynctimebase, (vsynctimebase - max) * 100 / vsynctimebase); } frame_shown = true; } return status != 0; } status = 1; int clockadjust = 0; int vstb = vsynctimebase; if (currprefs.m68k_speed < 0) { #if 0 static uae_u32 prevtick; static int frametickcnt; uae_u32 tick = read_system_time (); // milliseconds uae_s32 tickdiff = tick - prevtick; uae_s32 framems = (frametickcnt * 1000) / (int)(vblank_hz + 0.5); if (abs (framems - tickdiff) >= 2000) { framems = 0; tickdiff = 0; prevtick = tick; frametickcnt = 0; write_log (_T("Clock sync reset!\n")); } else { frametickcnt++; } int diff = (framems - tickdiff) / 1; if (diff < -100) diff = -100; else if (diff > 100) diff = 100; clockadjust = -vsynctimebase * diff / 10000; //write_log (_T("%05d:%05d:%05d\n"), framems - tickdiff, diff, clockadjust); #endif if (!frame_rendered && !picasso_on) frame_rendered = render_screen (false); if (currprefs.m68k_speed_throttle) { // this delay can safely overshoot frame time by 1-2 ms, following code will compensate for it. for (;;) { curr_time = read_processor_time (); if ((int)vsyncwaittime - (int)curr_time <= 0) break; rtg_vsynccheck (); sleep_millis_main (1); } } else { curr_time = read_processor_time (); } int max; int adjust = 0; if ((int)curr_time - (int)vsyncwaittime > 0 && (int)curr_time - (int)vsyncwaittime < vstb / 2) adjust += curr_time - vsyncwaittime; adjust += clockadjust; max = (int)(vstb * (1000.0 + currprefs.m68k_speed_throttle) / 1000.0 - adjust); vsyncwaittime = curr_time + vstb - adjust; vsyncmintime = curr_time; if (max < 0) { max = 0; vsynctimeperline = 1; } else { vsynctimeperline = max / (maxvpos_nom + 1); } vsyncmaxtime = curr_time + max; if (0) write_log (_T("%06d:%06d/%06d\n"), adjust, vsynctimeperline, vstb); } else { int t = 0; if (!frame_rendered && !picasso_on) { start = read_processor_time (); frame_rendered = render_screen (false); t = read_processor_time () - start; } while (!currprefs.turbo_emulation) { double v = rpt_vsync (clockadjust) / (syncbase / 1000.0); if (v >= -4) break; rtg_vsynccheck (); sleep_millis_main (2); } curr_time = start = read_processor_time (); while (rpt_vsync (clockadjust) < 0) rtg_vsynccheck (); idletime += read_processor_time() - start; curr_time = read_processor_time (); vsyncmintime = curr_time; vsyncmaxtime = vsyncwaittime = curr_time + vstb; if (frame_rendered) { show_screen (); t += read_processor_time () - curr_time; } t += frameskipt_avg; vsynctimeperline = (vstb - t) / 3; if (vsynctimeperline < 0) vsynctimeperline = 0; else if (vsynctimeperline > vstb / 3) vsynctimeperline = vstb / 3; frame_shown = true; } return status != 0; } #ifdef FSUAE static bool framewait (void) { //printf("fw\n"); //if (currprefs.m68k_speed == -1) { // return framewait_2(); //} //currprefs.cpu_idle = 150; //rtg_vsync (); //if (!frame_rendered && !picasso_on) if (!frame_rendered) { frame_rendered = render_screen (false); } if (!frame_shown) { show_screen (); frame_shown = true; } static frame_time_t target_time = 0; frame_time_t curr_time; frame_time_t start; curr_time = start = read_processor_time (); if (target_time == 0) { target_time = curr_time; } else if (target_time < curr_time - vsynctimebase) { target_time = curr_time; } else if (target_time > curr_time + vsynctimebase) { target_time = curr_time; } target_time = target_time + vsynctimebase; //printf("%lld\n", vsynctimebase); //static frame_time_t last_time = curr_time; //while (rpt_vsync (clockadjust) < 0) // rtg_vsynccheck (); //idletime += read_processor_time() - start; curr_time = read_processor_time (); vsyncmintime = curr_time; //vsyncmaxtime = vsyncwaittime = curr_time + vsynctimebase; vsyncwaittime = target_time; vsyncmaxtime = target_time; //if (frame_rendered) { // show_screen (); // t += read_processor_time () - curr_time; //} //t += frameskipt_avg; frame_time_t t = 0; vsynctimeperline = (vsynctimebase - t) / 3; if (vsynctimeperline < 0) vsynctimeperline = 0; else if (vsynctimeperline > vsynctimebase / 3) vsynctimeperline = vsynctimebase / 3; frame_shown = true; vsynctimeperline = 0; return 1; } #endif static frame_time_t frametime2; #define FPSCOUNTER_MAVG_SIZE 10 static struct mavg_data fps_mavg, idle_mavg; void fpscounter_reset (void) { timeframes = 0; mavg_clear (&fps_mavg); mavg_clear (&idle_mavg); bogusframe = 2; lastframetime = read_processor_time (); idletime = 0; } static void fpscounter (bool frameok) { #ifdef FSUAE // the following code can crash with 0div error when running in benchmark // mode #else frame_time_t now, last; now = read_processor_time (); last = now - lastframetime; lastframetime = now; if (bogusframe || (int)last < 0) return; mavg (&fps_mavg, last / 10, FPSCOUNTER_MAVG_SIZE); mavg (&idle_mavg, idletime / 10, FPSCOUNTER_MAVG_SIZE); idletime = 0; frametime += last; timeframes++; if ((timeframes & 7) == 0) { double idle = 1000 - (idle_mavg.mavg == 0 ? 0.0 : (double)idle_mavg.mavg * 1000.0 / vsynctimebase); int fps = fps_mavg.mavg == 0 ? 0 : syncbase * 10 / fps_mavg.mavg; if (fps > 9999) fps = 9999; if (idle < 0) idle = 0; if (idle > 100 * 10) idle = 100 * 10; if (fake_vblank_hz * 10 > fps) { double mult = (double)fake_vblank_hz * 10.0 / fps; idle *= mult; } if (currprefs.turbo_emulation && idle < 100 * 10) idle = 100 * 10; gui_data.fps = fps; gui_data.idle = (int)idle; gui_data.fps_color = frameok ? 0 : 1; if ((timeframes & 15) == 0) { gui_fps (fps, (int)idle, frameok ? 0 : 1); } } #endif } // vsync functions that are not hardware timing related static void vsync_handler_pre (void) { if (bogusframe > 0) bogusframe--; handle_events (); #ifdef PICASSO96 if (isvsync_rtg () >= 0) rtg_vsync (); #endif audio_vsync (); blkdev_vsync (); CIA_vsync_prehandler (); if (quit_program > 0) { /* prevent possible infinite loop at wait_cycles().. */ framecnt = 0; reset_decisions (); return; } config_check_vsync (); if (timehack_alive > 0) timehack_alive--; inputdevice_vsync (); filesys_vsync (); sampler_vsync (); clipboard_vsync (); #ifdef RETROPLATFORM rp_vsync (); #endif if (!vsync_rendered) { frame_time_t start, end; start = read_processor_time (); vsync_handle_redraw (lof_store, lof_changed, bplcon0, bplcon3); vsync_rendered = true; end = read_processor_time (); frameskiptime += end - start; } bool frameok = framewait (); if (!picasso_on) { if (!frame_rendered && vblank_hz_state) { frame_rendered = render_screen (false); } if (frame_rendered && !frame_shown) { frame_shown = show_screen_maybe (isvsync_chipset () >= 0); } } fpscounter (frameok); vsync_rendered = false; frame_shown = false; frame_rendered = false; if (vblank_hz_mult > 0) vblank_hz_state ^= 1; else vblank_hz_state = 1; vsync_handle_check (); checklacecount ((bplcon0 & 4) != 0); } // emulated hardware vsync static void vsync_handler_post (void) { #ifdef FSUAE if (g_frame_debug_logging) { write_log("%6d vsync_handler_post %08x\n", vsync_counter, uae_get_memory_checksum()); } #endif static frame_time_t prevtime; //write_log (_T("%d %d %d\n"), vsynctimebase, read_processor_time () - vsyncmintime, read_processor_time () - prevtime); prevtime = read_processor_time (); #if CUSTOM_DEBUG > 1 if ((intreq & 0x0020) && (intena & 0x0020)) write_log (_T("vblank interrupt not cleared\n")); #endif DISK_vsync (); #ifdef WITH_LUA uae_lua_run_handler("on_uae_vsync"); #endif if (bplcon0 & 4) lof_store = lof_store ? 0 : 1; lof_current = lof_store; if (lof_togglecnt_lace >= LOF_TOGGLES_NEEDED) { interlace_changed = notice_interlace_seen (true); if (interlace_changed) { notice_screen_contents_lost (); } } else if (lof_togglecnt_nlace >= LOF_TOGGLES_NEEDED) { interlace_changed = notice_interlace_seen (false); if (interlace_changed) { notice_screen_contents_lost (); } } if (lof_changing) { // still same? Trigger change now. if ((!lof_store && lof_changing < 0) || (lof_store && lof_changing > 0)) { lof_changed = 1; } lof_changing = 0; } if (debug_copper) record_copper_reset (); if (debug_dma) record_dma_reset (); #ifdef PICASSO96 if (p96refresh_active) { vpos_count = p96refresh_active; vtotal = vpos_count; } #endif if ((beamcon0 & (0x20 | 0x80)) != (new_beamcon0 & (0x20 | 0x80)) || (vpos_count > 0 && abs (vpos_count - vpos_count_diff) > 1) || lof_changed) { init_hz (); } else if (interlace_changed || changed_chipset_refresh ()) { compute_framesync (); } lof_changed = 0; COPJMP (1, 1); init_hardware_frame (); vsync_cycles = get_cycles (); } static void copper_check (int n) { if (cop_state.state == COP_wait) { int vp = vpos & (((cop_state.saved_i2 >> 8) & 0x7F) | 0x80); if (vp < cop_state.vcmp) { if (copper_enabled_thisline) write_log (_T("COPPER BUG %d: vp=%d vpos=%d vcmp=%d thisline=%d\n"), n, vp, vpos, cop_state.vcmp, copper_enabled_thisline); } } } /* 0 0 - 1 1 -- 2 2 - 3 3 -- 4 4 - 5 5 -- 0 x - 1 0 -- 2 1 - 3 2 -- 4 3 - 5 4 -- */ static void hsync_scandoubler (void) { int i, idx1; struct draw_info *dip1; uaecptr bpltmp[8], bpltmpx[8]; next_lineno++; scandoubled_line = 1; debug_dma = 0; for (i = 0; i < 8; i++) { int diff; bpltmp[i] = bplpt[i]; bpltmpx[i] = bplptx[i]; if (prevbpl[lof_store][vpos][i] && prevbpl[1 - lof_store][vpos][i]) { diff = prevbpl[lof_store][vpos][i] - prevbpl[1 - lof_store][vpos][i]; if (lof_store) { if (bplcon0 & 4) bplpt[i] = prevbpl[lof_store][vpos][i] - diff; } else { if (bplcon0 & 4) bplpt[i] = prevbpl[lof_store][vpos][i]; else bplpt[i] = bplpt[i] - diff; } } } reset_decisions (); plf_state = plf_idle; // copy color changes dip1 = curr_drawinfo + next_lineno - 1; for (idx1 = dip1->first_color_change; idx1 < dip1->last_color_change; idx1++) { struct color_change *cs2 = &curr_color_changes[idx1]; int regno = cs2->regno; int hpos = cs2->linepos; if (regno < 0x1000 && hpos < HBLANK_OFFSET && !(beamcon0 & 0x80) && prev_lineno >= 0) { struct draw_info *pdip = curr_drawinfo + next_lineno - 1; int idx = pdip->last_color_change; pdip->last_color_change++; pdip->nr_color_changes++; curr_color_changes[idx].linepos = hpos + maxhpos + 1; curr_color_changes[idx].regno = regno; curr_color_changes[idx].value = cs2->value; curr_color_changes[idx + 1].regno = -1; } else { struct color_change *cs1 = &curr_color_changes[next_color_change]; memcpy (cs1, cs2, sizeof (struct color_change)); next_color_change++; } } curr_color_changes[next_color_change].regno = -1; finish_decisions (); hsync_record_line_state (next_lineno, nln_normal, thisline_changed); hardware_line_completed (next_lineno); scandoubled_line = 0; for (i = 0; i < 8; i++) { bplpt[i] = bpltmp[i]; bplptx[i] = bpltmpx[i]; } } static void events_dmal (int); static uae_u16 dmal, dmal_hpos; static void dmal_emu (uae_u32 v) { // Disk and Audio DMA bits are ignored by Agnus, Agnus only checks DMAL and master bit if (!(dmacon & DMA_MASTER)) return; int hpos = current_hpos (); if (v >= 6) { v -= 6; int nr = v / 2; uaecptr pt = audio_getpt (nr, (v & 1) != 0); uae_u16 dat = chipmem_wget_indirect (pt); #ifdef DEBUGGER if (debug_dma) record_dma (0xaa + nr * 16, dat, pt, hpos, vpos, DMARECORD_AUDIO); #endif last_custom_value1 = dat; AUDxDAT (nr, dat, pt); } else { uae_u16 dat; int w = v & 1; uaecptr pt = disk_getpt (); // disk_fifostatus() needed in >100% disk speed modes if (w) { // write to disk if (disk_fifostatus () <= 0) { dat = chipmem_wget_indirect (pt); last_custom_value1 = dat; DSKDAT (dat); } } else { // read from disk if (disk_fifostatus () >= 0) { dat = DSKDATR (); chipmem_wput_indirect (pt, dat); } } #ifdef DEBUGGER if (debug_dma) record_dma (w ? 0x26 : 0x08, dat, pt, hpos, vpos, DMARECORD_DISK); #endif } } static void dmal_func (uae_u32 v) { dmal_emu (v); events_dmal (0); } static void dmal_func2 (uae_u32 v) { while (dmal) { if (dmal & 3) dmal_emu (dmal_hpos + ((dmal & 2) ? 1 : 0)); dmal_hpos += 2; dmal >>= 2; } } static void events_dmal (int hp) { if (!dmal) return; if (currprefs.cpu_cycle_exact) { while (dmal) { if (dmal & 3) break; hp += 2; dmal >>= 2; dmal_hpos += 2; } event2_newevent2 (hp, dmal_hpos + ((dmal & 2) ? 1 : 0), dmal_func); dmal &= ~3; } else if (currprefs.cachesize) { dmal_func2 (0); } else { event2_newevent2 (hp, 13, dmal_func2); } } static void events_dmal_hsync (void) { if (dmal) write_log (_T("DMAL error!? %04x\n"), dmal); dmal = audio_dmal (); dmal <<= 6; dmal |= disk_dmal (); if (!dmal) return; dmal_hpos = 0; if (currprefs.cpu_cycle_exact) { for (int i = 0; i < 6 + 8; i += 2) { if (dmal & (3 << i)) { alloc_cycle_ext (i + 7, CYCLE_MISC); } } } events_dmal (7); } static bool is_custom_vsync (void) { int vp = vpos + 1; int vpc = vpos_count + 1; /* Agnus vpos counter keeps counting until it wraps around if VPOSW writes put it past maxvpos */ if (vp >= maxvpos_total) vp = 0; if (vp == maxvpos + lof_store || vp == maxvpos + lof_store + 1 || vpc >= MAXVPOS) { // vpos_count >= MAXVPOS just to not crash if VPOSW writes prevent vsync completely return true; } return false; } static void set_hpos (void) { maxhpos = maxhpos_short + lol; eventtab[ev_hsync].evtime = get_cycles () + HSYNCTIME; eventtab[ev_hsync].oldcycles = get_cycles (); } // this finishes current line static void hsync_handler_pre (bool onvsync) { int hpos = current_hpos (); if (!nocustom ()) { sync_copper_with_cpu (maxhpos, 0); finish_decisions (); if (thisline_decision.plfleft >= 0) { if (currprefs.collision_level > 1) do_sprite_collisions (); if (currprefs.collision_level > 2) do_playfield_collisions (); } hsync_record_line_state (next_lineno, nextline_how, thisline_changed); /* reset light pen latch */ if (vpos == sprite_vblank_endline) { lightpen_triggered = 0; sprite_0 = 0; } if (lightpen_cx > 0 && (bplcon0 & 8) && !lightpen_triggered && lightpen_cy == vpos) { vpos_lpen = vpos; hpos_lpen = lightpen_cx; lightpen_triggered = 1; } hardware_line_completed (next_lineno); if (doflickerfix () && interlace_seen > 0) hsync_scandoubler (); notice_resolution_seen (GET_RES_AGNUS (bplcon0), interlace_seen != 0); } #ifdef A2065 a2065_hsync_handler (); #endif #ifdef CD32 AKIKO_hsync_handler (); #endif #ifdef CDTV CDTV_hsync_handler (); #endif decide_blitter (-1); #ifdef PICASSO96 picasso_handle_hsync (); #endif { void ahi_hsync (void); ahi_hsync (); } DISK_hsync (); if (currprefs.produce_sound) audio_hsync (); CIA_hsync_prehandler (); hsync_counter++; if (islinetoggle ()) lol ^= 1; else lol = 0; vpos++; vpos_count++; if (vpos >= maxvpos_total) vpos = 0; if (onvsync) { vpos = 0; vsync_counter++; } set_hpos (); #if 0 static int ppp = 2; if (input_record && hsync_counter == 100 * 313 + 1) { ppp--; if (ppp == 0) activate_debugger (); } #endif } STATIC_INLINE bool is_last_line (void) { return vpos + 1 == maxvpos + lof_store; } // this prepares for new line static void hsync_handler_post (bool onvsync) { last_copper_hpos = 0; #ifdef CPUEMU_12 if (currprefs.cpu_cycle_exact || currprefs.blitter_cycle_exact) { memset (cycle_line, 0, sizeof cycle_line); } #endif bool ciasyncs = !(bplcon0 & 2) || ((bplcon0 & 2) && currprefs.genlock); CIA_hsync_posthandler (ciasyncs); if (currprefs.cs_ciaatod > 0) { #if 0 static uae_s32 oldtick; uae_s32 tick = read_system_time (); // milliseconds int ms = 1000 / (currprefs.cs_ciaatod == 2 ? 60 : 50); if (tick - oldtick > 2000 || tick - oldtick < -2000) { oldtick = tick - ms; write_log (_T("RESET\n")); } if (tick - oldtick >= ms) { CIA_vsync_posthandler (1); oldtick += ms; } #else static int cia_hsync; cia_hsync -= 256; if (cia_hsync <= 0) { CIA_vsync_posthandler (1); cia_hsync += ((MAXVPOS_PAL * MAXHPOS_PAL * 50 * 256) / (maxhpos * (currprefs.cs_ciaatod == 2 ? 60 : 50))); } #endif } else if (currprefs.cs_ciaatod == 0 && onvsync) { CIA_vsync_posthandler (ciasyncs); } if (vpos == equ_vblank_endline + 1) { if (lof_current != lof_store) { // argh, line=0 field decision was wrong, someone did // something stupid and changed LOF // lof_current = lof_store; // don't really know what to do here exactly without corrupt display } if (lof_store != lof_previous) { if (lof_togglecnt_lace < LOF_TOGGLES_NEEDED) lof_togglecnt_lace++; if (lof_togglecnt_lace >= LOF_TOGGLES_NEEDED) lof_togglecnt_nlace = 0; } else { if (lof_togglecnt_nlace < LOF_TOGGLES_NEEDED) lof_togglecnt_nlace++; if (lof_togglecnt_nlace >= LOF_TOGGLES_NEEDED) lof_togglecnt_lace = 0; } lof_previous = lof_store; } inputdevice_hsync (); last_custom_value1 = 0xffff; // refresh slots should set this to 0xffff if (!nocustom ()) { if (!currprefs.blitter_cycle_exact && bltstate != BLT_done && dmaen (DMA_BITPLANE) && diwstate == DIW_waiting_stop) { blitter_slowdown (thisline_decision.plfleft, thisline_decision.plfright - (16 << fetchmode), cycle_diagram_total_cycles[fetchmode][GET_RES_AGNUS (bplcon0)][GET_PLANES_LIMIT (bplcon0)], cycle_diagram_free_cycles[fetchmode][GET_RES_AGNUS (bplcon0)][GET_PLANES_LIMIT (bplcon0)]); } } if (onvsync) { // vpos_count >= MAXVPOS just to not crash if VPOSW writes prevent vsync completely if ((bplcon0 & 8) && !lightpen_triggered) { vpos_lpen = vpos - 1; hpos_lpen = maxhpos; lightpen_triggered = 1; } vpos = 0; vsync_handler_post (); vpos_count = 0; } // DIP Agnus (8361): vblank interrupt is triggered on line 1! if (currprefs.cs_dipagnus) { if (vpos == 1) send_interrupt (5, 1 * CYCLE_UNIT); } else { if (vpos == 0) send_interrupt (5, 1 * CYCLE_UNIT); } #ifdef CPUEMU_12 if (currprefs.cpu_cycle_exact || currprefs.blitter_cycle_exact) { int hp = maxhpos - 1, i; for (i = 0; i < 4; i++) { alloc_cycle (hp, i == 0 ? CYCLE_STROBE : CYCLE_REFRESH); /* strobe */ #ifdef DEBUGGER if (debug_dma) { uae_u16 strobe = 0x3c; if (vpos < equ_vblank_endline) strobe = 0x38; else if (vpos < minfirstline) strobe = 0x3a; else if (vpos + 1 == maxvpos + lof_store) strobe = 0x38; else if ((currprefs.chipset_mask & CSMASK_ECS_AGNUS) && lol) strobe = 0x3e; record_dma (i == 0 ? strobe : 0x1fe, 0xffff, 0xffffffff, hp, vpos, DMARECORD_REFRESH); } #endif hp += 2; if (hp >= maxhpos) hp -= maxhpos; } } #endif events_dmal_hsync (); #if 0 // AF testing stuff static int cnt = 0; cnt++; if (cnt == 500) { int port_insert_custom (int inputmap_port, int devicetype, DWORD flags, const TCHAR *custom); port_insert_custom (0, 2, 0, _T("Fire.autorepeat=0x38 Left=0x4B Right=0x4D Up=0x48 Down=0x50 Fire=0x4C Fire2=0x52'")); port_insert_custom (1, 2, 0, _T("Left=0x48 Right=0x50 Up=0x4B Down=0x4D Fire=0x4C")); } else if (cnt == 1000) { TCHAR out[256]; bool port_get_custom (int inputmap_port, TCHAR *out); port_get_custom (0, out); port_get_custom (1, out); } #endif if (currprefs.m68k_speed < 0) { if (is_last_line ()) { /* really last line, just run the cpu emulation until whole vsync time has been used */ if (currprefs.m68k_speed_throttle) { vsyncmintime = read_processor_time (); /* end of CPU emulation time */ is_syncline = 0; } else { vsyncmintime = vsyncmaxtime; /* emulate if still time left */ is_syncline_end = read_processor_time () + vsynctimebase; /* far enough in future, we never wait that long */ is_syncline = 1; } } else { static int linecounter; /* end of scanline, run cpu emulation as long as we still have time */ vsyncmintime += vsynctimeperline; linecounter++; is_syncline = 0; if (!vsync_isdone () && !currprefs.turbo_emulation) { if ((int)vsyncmaxtime - (int)vsyncmintime > 0) { if ((int)vsyncwaittime - (int)vsyncmintime > 0) { frame_time_t rpt = read_processor_time (); /* Extra time left? Do some extra CPU emulation */ if ((int)vsyncmintime - (int)rpt > 0) { is_syncline = 1; /* limit extra time */ is_syncline_end = rpt + vsynctimeperline; linecounter = 0; } } if (!isvsync ()) { // extra cpu emulation time if previous 10 lines without extra time. if (!is_syncline && linecounter >= 10) { is_syncline = -1; is_syncline_end = read_processor_time () + vsynctimeperline; linecounter = 0; } } } } } } else { if (vpos + 1 < maxvpos + lof_store && (vpos == maxvpos_nom * 1 / 3 || vpos == maxvpos_nom * 2 / 3)) { vsyncmintime += vsynctimeperline; if (!vsync_isdone () && !currprefs.turbo_emulation) { frame_time_t rpt = read_processor_time (); // sleep if more than 2ms "free" time while (!vsync_isdone () && (int)vsyncmintime - (int)(rpt + vsynctimebase / 10) > 0 && (int)vsyncmintime - (int)rpt < vsynctimebase) { sleep_millis_main (1); rpt = read_processor_time (); //write_log (_T("*")); } } } } if (!nocustom ()) { int lineno = vpos; if (lineno >= MAXVPOS) lineno %= MAXVPOS; nextline_how = nln_normal; if (doflickerfix () && interlace_seen > 0) { lineno *= 2; } else if (currprefs.gfx_vresolution && (doublescan <= 0 || interlace_seen > 0)) { lineno *= 2; nextline_how = currprefs.gfx_vresolution > VRES_NONDOUBLE && currprefs.gfx_scanlines == false ? nln_doubled : nln_nblack; if (interlace_seen) { if (!lof_current) { lineno++; nextline_how = nln_lower; } else { nextline_how = nln_upper; } } } prev_lineno = next_lineno; next_lineno = lineno; reset_decisions (); } if (uae_int_requested) { INTREQ (0x8000 | 0x0008); } { extern int volatile uaenet_int_requested; extern int volatile uaenet_vsync_requested; if (uaenet_int_requested || (uaenet_vsync_requested && vpos == 10)) { INTREQ (0x8000 | 0x2000); } } { extern void bsdsock_fake_int_handler (void); extern int volatile bsd_int_requested; if (bsd_int_requested) bsdsock_fake_int_handler (); } plfstrt_sprite = plfstrt; /* See if there's a chance of a copper wait ending this line. */ cop_state.hpos = 0; cop_state.last_write = 0; compute_spcflag_copper (maxhpos); serial_hsynchandler (); #ifdef CUSTOM_SIMPLE do_sprites (0); #endif gayle_hsync (); #ifdef A2091 scsi_hsync (); #endif #ifdef FSUAE filesys_hsync(); #endif //copper_check (2); if (GET_PLANES (bplcon0) > 0 && dmaen (DMA_BITPLANE)) { if (vpos > last_planes_vpos) last_planes_vpos = vpos; if (vpos >= minfirstline && first_planes_vpos == 0) { first_planes_vpos = vpos > minfirstline ? vpos - 1 : vpos; } else if (vpos >= current_maxvpos () - 1) { last_planes_vpos = current_maxvpos (); } } if (diw_change == 0) { if (vpos >= first_planes_vpos && vpos <= last_planes_vpos) { if (diwlastword > diwlastword_total) { diwlastword_total = diwlastword; if (diwlastword_total > coord_diw_to_window_x (hsyncstartpos * 2)) diwlastword_total = coord_diw_to_window_x (hsyncstartpos * 2); } if (diwfirstword < diwfirstword_total) { diwfirstword_total = diwfirstword; if (diwfirstword_total < coord_diw_to_window_x (hsyncendpos * 2)) diwfirstword_total = coord_diw_to_window_x (hsyncendpos * 2); firstword_bplcon1 = bplcon1; } } if (diwstate == DIW_waiting_stop) { int f = 8 << fetchmode; if (plfstrt + f < ddffirstword_total + f) ddffirstword_total = plfstrt + f; if (plfstop + 2 * f > ddflastword_total + 2 * f) ddflastword_total = plfstop + 2 * f; } if ((plffirstline < plffirstline_total || (plffirstline_total == minfirstline && vpos > minfirstline)) && plffirstline < vpos / 2) { firstword_bplcon1 = bplcon1; if (plffirstline < minfirstline) plffirstline_total = minfirstline; else plffirstline_total = plffirstline; } if (plflastline > plflastline_total && plflastline > plffirstline_total && plflastline > maxvpos / 2) plflastline_total = plflastline; } if (diw_change > 0) diw_change--; /* fastest possible + last line and no vflip wait: render the frame as early as possible */ if (is_last_line () && isvsync_chipset () <= -2 && !vsync_rendered && currprefs.gfx_apmode[0].gfx_vflip == 0) { frame_time_t start, end; start = read_processor_time (); vsync_rendered = true; vsync_handle_redraw (lof_store, lof_changed, bplcon0, bplcon3); if (vblank_hz_state) { frame_rendered = render_screen (true); } end = read_processor_time (); frameskiptime += end - start; } rtg_vsynccheck (); #if 0 { static int skip; if (M68K_GETPC >= 0x0C0D7A2 && M68K_GETPC < 0x00C0D7B2 && vpos == 0xf3) { if (!skip) activate_debugger (); skip = 1; } if (vpos != 0xf3) skip = 0; } #endif } static void hsync_handler (void) { bool vs = is_custom_vsync (); hsync_handler_pre (vs); if (vs) { vsync_handler_pre (); if (savestate_check ()) { uae_reset (0, 0); return; } } hsync_handler_post (vs); } void init_eventtab (void) { int i; nextevent = 0; for (i = 0; i < ev_max; i++) { eventtab[i].active = 0; eventtab[i].oldcycles = get_cycles (); } for (i = 0; i < ev2_max; i++) { eventtab2[i].active = 0; } eventtab[ev_cia].handler = CIA_handler; eventtab[ev_hsync].handler = hsync_handler; eventtab[ev_hsync].evtime = get_cycles () + HSYNCTIME; eventtab[ev_hsync].active = 1; eventtab[ev_misc].handler = MISC_handler; eventtab[ev_audio].handler = audio_evhandler; eventtab2[ev2_blitter].handler = blitter_handler; eventtab2[ev2_disk].handler = DISK_handler; events_schedule (); } void custom_prepare (void) { set_hpos (); hsync_handler_post (true); } void custom_reset (bool hardreset, bool keyboardreset) { int i; int zero = 0; target_reset (); reset_all_systems (); write_log (_T("Reset at %08X\n"), M68K_GETPC); memory_map_dump (); lightpen_active = -1; lightpen_triggered = 0; lightpen_cx = lightpen_cy = -1; if (!savestate_state) { extra_cycle = 0; hsync_counter = 0; vsync_counter = 0; currprefs.chipset_mask = changed_prefs.chipset_mask; update_mirrors (); if (!aga_mode) { for (i = 0; i < 32; i++) { current_colors.color_regs_ecs[i] = 0; current_colors.acolors[i] = getxcolor (0); } #ifdef AGA } else { for (i = 0; i < 256; i++) { current_colors.color_regs_aga[i] = 0; current_colors.acolors[i] = getxcolor (0); } #endif } clxdat = 0; /* Clear the armed flags of all sprites. */ memset (spr, 0, sizeof spr); nr_armed = 0; dmacon = 0; intreq_internal = 0; intena = intena_internal = 0; copcon = 0; DSKLEN (0, 0); bplcon0 = 0; bplcon4 = 0x0011; /* Get AGA chipset into ECS compatibility mode */ bplcon3 = 0x0C00; diwhigh = 0; diwhigh_written = 0; hdiwstate = DIW_waiting_start; // this does not reset at vblank FMODE (0, 0); CLXCON (0); CLXCON2 (0); setup_fmodes (0); sprite_width = GET_SPRITEWIDTH (fmode); beamcon0 = new_beamcon0 = currprefs.ntscmode ? 0x00 : 0x20; bltstate = BLT_done; blit_interrupt = 1; lof_store = lof_current = 1; } gayle_reset (hardreset); #ifdef AUTOCONFIG expamem_reset (); #endif a1000_reset (); DISK_reset (); CIA_reset (); gayle_reset (0); #ifdef A2091 a2091_reset (); #endif #ifdef NCR ncr_reset (); #endif #ifdef JIT compemu_reset (); #endif unset_special (~(SPCFLAG_BRK | SPCFLAG_MODE_CHANGE)); vpos = 0; vpos_count = vpos_count_diff = 0; inputdevice_reset (); timehack_alive = 0; curr_sprite_entries = 0; prev_sprite_entries = 0; sprite_entries[0][0].first_pixel = 0; sprite_entries[1][0].first_pixel = MAX_SPR_PIXELS; sprite_entries[0][1].first_pixel = 0; sprite_entries[1][1].first_pixel = MAX_SPR_PIXELS; memset (spixels, 0, 2 * MAX_SPR_PIXELS * sizeof *spixels); memset (&spixstate, 0, sizeof spixstate); cop_state.state = COP_stop; diwstate = DIW_waiting_start; dmal = 0; init_hz_full (); vpos_lpen = -1; lof_changing = 0; lof_togglecnt_nlace = lof_togglecnt_lace = 0; lof_previous = lof_store; nlace_cnt = NLACE_CNT_NEEDED; audio_reset (); if (!isrestore ()) { /* must be called after audio_reset */ adkcon = 0; serial_uartbreak (0); audio_update_adkmasks (); } init_sprites (); init_hardware_frame (); drawing_init (); reset_decisions (); bogusframe = 1; if (isrestore ()) { uae_u16 v; uae_u32 vv; audio_update_adkmasks (); INTENA (0); INTREQ (0); COPJMP (1, 1); v = bplcon0; BPLCON0 (0, 0); BPLCON0 (0, v); FMODE (0, fmode); if (!(currprefs.chipset_mask & CSMASK_AGA)) { for(i = 0 ; i < 32 ; i++) { vv = current_colors.color_regs_ecs[i]; current_colors.color_regs_ecs[i] = -1; record_color_change (0, i, vv); remembered_color_entry = -1; current_colors.color_regs_ecs[i] = vv; current_colors.acolors[i] = xcolors[vv]; } #ifdef AGA } else { for(i = 0 ; i < 256 ; i++) { vv = current_colors.color_regs_aga[i]; current_colors.color_regs_aga[i] = -1; record_color_change (0, i, vv); remembered_color_entry = -1; current_colors.color_regs_aga[i] = vv; current_colors.acolors[i] = CONVERT_RGB (vv); } #endif } CLXCON (clxcon); CLXCON2 (clxcon2); calcdiw (); write_log (_T("CPU=%d Chipset=%s %s\n"), currprefs.cpu_model, (currprefs.chipset_mask & CSMASK_AGA) ? _T("AGA") : (currprefs.chipset_mask & CSMASK_ECS_AGNUS | CSMASK_ECS_DENISE) == (CSMASK_ECS_AGNUS | CSMASK_ECS_DENISE) ? _T("Full ECS") : (currprefs.chipset_mask & CSMASK_ECS_DENISE) ? _T("ECS Denise") : (currprefs.chipset_mask & CSMASK_ECS_AGNUS) ? _T("ECS") : _T("OCS"), currprefs.ntscmode ? _T("NTSC") : _T("PAL")); write_log (_T("State restored\n")); for (i = 0; i < 8; i++) nr_armed += spr[i].armed != 0; if (! currprefs.produce_sound) { eventtab[ev_audio].active = 0; events_schedule (); } } sprres = expand_sprres (bplcon0, bplcon3); sprite_width = GET_SPRITEWIDTH (fmode); setup_fmodes (0); #ifdef ACTION_REPLAY /* Doing this here ensures we can use the 'reset' command from within AR */ action_replay_reset (hardreset, keyboardreset); #endif #if defined(ENFORCER) enforcer_disable (); #endif if (hardreset) rtc_hardreset(); #ifdef PICASSO96 picasso_reset (); #endif } void dumpcustom (void) { console_out_f (_T("DMACON: %04x INTENA: %04x (%04x) INTREQ: %04x (%04x) VPOS: %x HPOS: %x\n"), DMACONR (current_hpos ()), intena, intena_internal, intreq, intreq_internal, vpos, current_hpos ()); console_out_f (_T("COP1LC: %08lx, COP2LC: %08lx COPPTR: %08lx\n"), (unsigned long)cop1lc, (unsigned long)cop2lc, cop_state.ip); console_out_f (_T("DIWSTRT: %04x DIWSTOP: %04x DDFSTRT: %04x DDFSTOP: %04x\n"), (unsigned int)diwstrt, (unsigned int)diwstop, (unsigned int)ddfstrt, (unsigned int)ddfstop); console_out_f (_T("BPLCON 0: %04x 1: %04x 2: %04x 3: %04x 4: %04x LOF=%d/%d HDIW=%d VDIW=%d\n"), bplcon0, bplcon1, bplcon2, bplcon3, bplcon4, lof_current, lof_store, hdiwstate == DIW_waiting_start ? 0 : 1, diwstate == DIW_waiting_start ? 0 : 1); if (timeframes) { console_out_f (_T("Average frame time: %.2f ms [frames: %d time: %d]\n"), (double)frametime / timeframes, timeframes, frametime); if (total_skipped) console_out_f (_T("Skipped frames: %d\n"), total_skipped); } } static void gen_custom_tables (void) { int i; for (i = 0; i < 256; i++) { sprtaba[i] = ((((i >> 7) & 1) << 0) | (((i >> 6) & 1) << 2) | (((i >> 5) & 1) << 4) | (((i >> 4) & 1) << 6) | (((i >> 3) & 1) << 8) | (((i >> 2) & 1) << 10) | (((i >> 1) & 1) << 12) | (((i >> 0) & 1) << 14)); sprtabb[i] = sprtaba[i] * 2; sprite_ab_merge[i] = (((i & 15) ? 1 : 0) | ((i & 240) ? 2 : 0)); } for (i = 0; i < 16; i++) { clxmask[i] = (((i & 1) ? 0xF : 0x3) | ((i & 2) ? 0xF0 : 0x30) | ((i & 4) ? 0xF00 : 0x300) | ((i & 8) ? 0xF000 : 0x3000)); sprclx[i] = (((i & 0x3) == 0x3 ? 1 : 0) | ((i & 0x5) == 0x5 ? 2 : 0) | ((i & 0x9) == 0x9 ? 4 : 0) | ((i & 0x6) == 0x6 ? 8 : 0) | ((i & 0xA) == 0xA ? 16 : 0) | ((i & 0xC) == 0xC ? 32 : 0)) << 9; } } /* mousehack is now in "filesys boot rom" */ static uae_u32 REGPARAM2 mousehack_helper_old (struct TrapContext *ctx) { return 0; } int custom_init (void) { #ifdef AUTOCONFIG if (uae_boot_rom) { uaecptr pos; pos = here (); org (rtarea_base + 0xFF70); calltrap (deftrap (mousehack_helper_old)); dw (RTS); org (rtarea_base + 0xFFA0); calltrap (deftrap (timehack_helper)); dw (RTS); org (pos); } #endif gen_custom_tables (); build_blitfilltable (); drawing_init (); create_cycle_diagram_table (); return 1; } /* Custom chip memory bank */ static uae_u32 REGPARAM3 custom_lget (uaecptr) REGPARAM; static uae_u32 REGPARAM3 custom_wget (uaecptr) REGPARAM; static uae_u32 REGPARAM3 custom_bget (uaecptr) REGPARAM; static uae_u32 REGPARAM3 custom_lgeti (uaecptr) REGPARAM; static uae_u32 REGPARAM3 custom_wgeti (uaecptr) REGPARAM; static void REGPARAM3 custom_lput (uaecptr, uae_u32) REGPARAM; static void REGPARAM3 custom_wput (uaecptr, uae_u32) REGPARAM; static void REGPARAM3 custom_bput (uaecptr, uae_u32) REGPARAM; addrbank custom_bank = { custom_lget, custom_wget, custom_bget, custom_lput, custom_wput, custom_bput, default_xlate, default_check, NULL, _T("Custom chipset"), custom_lgeti, custom_wgeti, ABFLAG_IO }; static uae_u32 REGPARAM2 custom_wgeti (uaecptr addr) { if (currprefs.cpu_model >= 68020) return dummy_wgeti (addr); return custom_wget (addr); } static uae_u32 REGPARAM2 custom_lgeti (uaecptr addr) { if (currprefs.cpu_model >= 68020) return dummy_lgeti (addr); return custom_lget (addr); } STATIC_INLINE uae_u32 REGPARAM2 custom_wget_1 (int hpos, uaecptr addr, int noput) { uae_u16 v; int missing; #ifdef JIT special_mem |= S_READ; #endif addr &= 0xfff; #if CUSTOM_DEBUG > 2 write_log (_T("%d:%d:wget: %04X=%04X pc=%p\n"), current_hpos(), vpos, addr, addr & 0x1fe, m68k_getpc ()); #endif switch (addr & 0x1fe) { case 0x002: v = DMACONR (hpos); break; case 0x004: v = VPOSR (); break; case 0x006: v = VHPOSR (); break; case 0x00A: v = JOY0DAT (); break; case 0x00C: v = JOY1DAT (); break; case 0x00E: v = CLXDAT (); break; case 0x010: v = ADKCONR (); break; case 0x012: v = POT0DAT (); break; case 0x014: v = POT1DAT (); break; case 0x016: v = POTGOR (); break; case 0x018: v = SERDATR (); break; case 0x01A: v = DSKBYTR (hpos); break; case 0x01C: v = INTENAR (); break; case 0x01E: v = INTREQR (); break; case 0x07C: v = DENISEID (&missing); if (missing) goto writeonly; break; #ifdef AGA case 0x180: case 0x182: case 0x184: case 0x186: case 0x188: case 0x18A: case 0x18C: case 0x18E: case 0x190: case 0x192: case 0x194: case 0x196: case 0x198: case 0x19A: case 0x19C: case 0x19E: case 0x1A0: case 0x1A2: case 0x1A4: case 0x1A6: case 0x1A8: case 0x1AA: case 0x1AC: case 0x1AE: case 0x1B0: case 0x1B2: case 0x1B4: case 0x1B6: case 0x1B8: case 0x1BA: case 0x1BC: case 0x1BE: if (!(currprefs.chipset_mask & CSMASK_AGA)) goto writeonly; v = COLOR_READ ((addr & 0x3E) / 2); break; #endif default: writeonly: /* OCS/ECS: * reading write-only register causes write with last value in chip * bus (custom registers, chipram, slowram) * and finally returns either all ones or something weird if DMA happens * in next (or previous) cycle.. FIXME. * * OCS-only special case: DFF000 (BLTDDAT) will always return whatever was left in bus * * AGA: * only writes to custom registers change last value, read returns * last value which then changes to all ones (following read will return * all ones) */ v = last_custom_value1; if (!noput) { int r; uae_u16 old = last_custom_value1; uae_u16 l = currprefs.cpu_compatible && currprefs.cpu_model == 68000 ? regs.irc : 0xffff; decide_line (hpos); decide_fetch (hpos); decide_blitter (hpos); debug_wputpeek (0xdff000 + addr, l); r = custom_wput_1 (hpos, addr, l, 1); if (r) { // register don't exist if (currprefs.chipset_mask & CSMASK_ECS_AGNUS) { v = l; } else { if ((addr & 0x1fe) == 0) { if (is_cycle_ce ()) v = last_custom_value1; else v = l; } } } else { if (currprefs.chipset_mask & CSMASK_ECS_AGNUS) v = 0xffff; else v = l; } #if CUSTOM_DEBUG > 0 write_log (_T("%08X read = %04X. Value written=%04X PC=%08x\n"), 0xdff000 | addr, v, l, M68K_GETPC); #endif return v; } } last_custom_value1 = v; return v; } STATIC_INLINE uae_u32 custom_wget2 (uaecptr addr) { uae_u32 v; int hpos = current_hpos (); sync_copper_with_cpu (hpos, 1); v = custom_wget_1 (hpos, addr, 0); #ifdef ACTION_REPLAY #ifdef ACTION_REPLAY_COMMON addr &= 0x1ff; ar_custom[addr + 0] = (uae_u8)(v >> 8); ar_custom[addr + 1] = (uae_u8)(v); #endif #endif return v; } static uae_u32 REGPARAM2 custom_wget (uaecptr addr) { uae_u32 v; if (addr & 1) { /* think about move.w $dff005,d0.. (68020+ only) */ addr &= ~1; v = custom_wget2 (addr) << 8; v |= custom_wget2 (addr + 2) >> 8; return v; } return custom_wget2 (addr); } static uae_u32 REGPARAM2 custom_bget (uaecptr addr) { uae_u32 v; #ifdef JIT special_mem |= S_READ; #endif v = custom_wget2 (addr & ~1); v >>= (addr & 1 ? 0 : 8); return v; } static uae_u32 REGPARAM2 custom_lget (uaecptr addr) { #ifdef JIT special_mem |= S_READ; #endif return ((uae_u32)custom_wget (addr) << 16) | custom_wget (addr + 2); } static int REGPARAM2 custom_wput_1 (int hpos, uaecptr addr, uae_u32 value, int noget) { if (!noget) last_custom_value1 = value; addr &= 0x1FE; value &= 0xffff; #ifdef ACTION_REPLAY #ifdef ACTION_REPLAY_COMMON ar_custom[addr+0]=(uae_u8)(value>>8); ar_custom[addr+1]=(uae_u8)(value); #endif #endif switch (addr) { case 0x00E: CLXDAT (); break; case 0x020: DSKPTH (value); break; case 0x022: DSKPTL (value); break; case 0x024: DSKLEN (value, hpos); break; case 0x026: /* DSKDAT (value). Writing to DMA write registers won't do anything */; break; case 0x02A: VPOSW (value); break; case 0x02C: VHPOSW (value); break; case 0x02E: COPCON (value); break; case 0x030: SERDAT (value); break; case 0x032: SERPER (value); break; case 0x034: POTGO (value); break; case 0x040: BLTCON0 (hpos, value); break; case 0x042: BLTCON1 (hpos, value); break; case 0x044: BLTAFWM (hpos, value); break; case 0x046: BLTALWM (hpos, value); break; case 0x050: BLTAPTH (hpos, value); break; case 0x052: BLTAPTL (hpos, value); break; case 0x04C: BLTBPTH (hpos, value); break; case 0x04E: BLTBPTL (hpos, value); break; case 0x048: BLTCPTH (hpos, value); break; case 0x04A: BLTCPTL (hpos, value); break; case 0x054: BLTDPTH (hpos, value); break; case 0x056: BLTDPTL (hpos, value); break; case 0x058: BLTSIZE (hpos, value); break; case 0x064: BLTAMOD (hpos, value); break; case 0x062: BLTBMOD (hpos, value); break; case 0x060: BLTCMOD (hpos, value); break; case 0x066: BLTDMOD (hpos, value); break; case 0x070: BLTCDAT (hpos, value); break; case 0x072: BLTBDAT (hpos, value); break; case 0x074: BLTADAT (hpos, value); break; case 0x07E: DSKSYNC (hpos, value); break; case 0x080: COP1LCH (value); break; case 0x082: COP1LCL (value); break; case 0x084: COP2LCH (value); break; case 0x086: COP2LCL (value); break; case 0x088: COPJMP (1, 0); break; case 0x08A: COPJMP (2, 0); break; case 0x08E: DIWSTRT (hpos, value); break; case 0x090: DIWSTOP (hpos, value); break; case 0x092: DDFSTRT (hpos, value); break; case 0x094: DDFSTOP (hpos, value); break; case 0x096: DMACON (hpos, value); break; case 0x098: CLXCON (value); break; case 0x09A: INTENA (value); break; case 0x09C: INTREQ (value); break; case 0x09E: ADKCON (hpos, value); break; case 0x0A0: AUDxLCH (0, value); break; case 0x0A2: AUDxLCL (0, value); break; case 0x0A4: AUDxLEN (0, value); break; case 0x0A6: AUDxPER (0, value); break; case 0x0A8: AUDxVOL (0, value); break; case 0x0AA: AUDxDAT (0, value); break; case 0x0B0: AUDxLCH (1, value); break; case 0x0B2: AUDxLCL (1, value); break; case 0x0B4: AUDxLEN (1, value); break; case 0x0B6: AUDxPER (1, value); break; case 0x0B8: AUDxVOL (1, value); break; case 0x0BA: AUDxDAT (1, value); break; case 0x0C0: AUDxLCH (2, value); break; case 0x0C2: AUDxLCL (2, value); break; case 0x0C4: AUDxLEN (2, value); break; case 0x0C6: AUDxPER (2, value); break; case 0x0C8: AUDxVOL (2, value); break; case 0x0CA: AUDxDAT (2, value); break; case 0x0D0: AUDxLCH (3, value); break; case 0x0D2: AUDxLCL (3, value); break; case 0x0D4: AUDxLEN (3, value); break; case 0x0D6: AUDxPER (3, value); break; case 0x0D8: AUDxVOL (3, value); break; case 0x0DA: AUDxDAT (3, value); break; case 0x0E0: BPLxPTH (hpos, value, 0); break; case 0x0E2: BPLxPTL (hpos, value, 0); break; case 0x0E4: BPLxPTH (hpos, value, 1); break; case 0x0E6: BPLxPTL (hpos, value, 1); break; case 0x0E8: BPLxPTH (hpos, value, 2); break; case 0x0EA: BPLxPTL (hpos, value, 2); break; case 0x0EC: BPLxPTH (hpos, value, 3); break; case 0x0EE: BPLxPTL (hpos, value, 3); break; case 0x0F0: BPLxPTH (hpos, value, 4); break; case 0x0F2: BPLxPTL (hpos, value, 4); break; case 0x0F4: BPLxPTH (hpos, value, 5); break; case 0x0F6: BPLxPTL (hpos, value, 5); break; case 0x0F8: BPLxPTH (hpos, value, 6); break; case 0x0FA: BPLxPTL (hpos, value, 6); break; case 0x0FC: BPLxPTH (hpos, value, 7); break; case 0x0FE: BPLxPTL (hpos, value, 7); break; case 0x100: BPLCON0 (hpos, value); break; case 0x102: BPLCON1 (hpos, value); break; case 0x104: BPLCON2 (hpos, value); break; #ifdef ECS_DENISE case 0x106: BPLCON3 (hpos, value); break; #endif case 0x108: BPL1MOD (hpos, value); break; case 0x10A: BPL2MOD (hpos, value); break; #ifdef AGA case 0x10E: CLXCON2 (value); break; #endif case 0x110: BPLxDAT (hpos, 0, value); break; case 0x112: BPLxDAT (hpos, 1, value); break; case 0x114: BPLxDAT (hpos, 2, value); break; case 0x116: BPLxDAT (hpos, 3, value); break; case 0x118: BPLxDAT (hpos, 4, value); break; case 0x11A: BPLxDAT (hpos, 5, value); break; case 0x11C: BPLxDAT (hpos, 6, value); break; case 0x11E: BPLxDAT (hpos, 7, value); break; case 0x180: case 0x182: case 0x184: case 0x186: case 0x188: case 0x18A: case 0x18C: case 0x18E: case 0x190: case 0x192: case 0x194: case 0x196: case 0x198: case 0x19A: case 0x19C: case 0x19E: case 0x1A0: case 0x1A2: case 0x1A4: case 0x1A6: case 0x1A8: case 0x1AA: case 0x1AC: case 0x1AE: case 0x1B0: case 0x1B2: case 0x1B4: case 0x1B6: case 0x1B8: case 0x1BA: case 0x1BC: case 0x1BE: COLOR_WRITE (hpos, value & 0xFFF, (addr & 0x3E) / 2); break; case 0x120: case 0x124: case 0x128: case 0x12C: case 0x130: case 0x134: case 0x138: case 0x13C: SPRxPTH (hpos, value, (addr - 0x120) / 4); break; case 0x122: case 0x126: case 0x12A: case 0x12E: case 0x132: case 0x136: case 0x13A: case 0x13E: SPRxPTL (hpos, value, (addr - 0x122) / 4); break; case 0x140: case 0x148: case 0x150: case 0x158: case 0x160: case 0x168: case 0x170: case 0x178: SPRxPOS (hpos, value, (addr - 0x140) / 8); break; case 0x142: case 0x14A: case 0x152: case 0x15A: case 0x162: case 0x16A: case 0x172: case 0x17A: SPRxCTL (hpos, value, (addr - 0x142) / 8); break; case 0x144: case 0x14C: case 0x154: case 0x15C: case 0x164: case 0x16C: case 0x174: case 0x17C: SPRxDATA (hpos, value, (addr - 0x144) / 8); break; case 0x146: case 0x14E: case 0x156: case 0x15E: case 0x166: case 0x16E: case 0x176: case 0x17E: SPRxDATB (hpos, value, (addr - 0x146) / 8); break; case 0x36: JOYTEST (value); break; case 0x5A: BLTCON0L (hpos, value); break; case 0x5C: BLTSIZV (hpos, value); break; case 0x5E: BLTSIZH (hpos, value); break; case 0x1E4: DIWHIGH (hpos, value); break; #ifdef AGA case 0x10C: BPLCON4 (hpos, value); break; #endif #ifndef CUSTOM_SIMPLE case 0x1DC: BEAMCON0 (value); break; #ifdef ECS_DENISE case 0x1C0: if (htotal != value) { htotal = value; varsync (); } break; case 0x1C2: if (hsstop != value) { hsstop = value; varsync (); } break; case 0x1C4: if (hbstrt != value) { hbstrt = value; varsync (); } break; case 0x1C6: if (hbstop != value) { hbstop = value; varsync (); } break; case 0x1C8: if (vtotal != value) { vtotal = value; varsync (); } break; case 0x1CA: if (vsstop != value) { vsstop = value; varsync (); } break; case 0x1CC: if (vbstrt < value || vbstrt > value + 1) { vbstrt = value; varsync (); } break; case 0x1CE: if (vbstop < value || vbstop > value + 1) { vbstop = value; varsync (); } break; case 0x1DE: if (hsstrt != value) { hsstrt = value; varsync (); } break; case 0x1E0: if (vsstrt != value) { vsstrt = value; varsync (); } break; case 0x1E2: if (hcenter != value) { hcenter = value; varsync (); } break; #endif #endif #ifdef AGA case 0x1FC: FMODE (hpos, value); break; #endif case 0x1FE: FNULL (value); break; /* writing to read-only register causes read access */ default: if (!noget) { #if CUSTOM_DEBUG > 0 write_log (_T("%04X written %08x\n"), addr, M68K_GETPC); #endif custom_wget_1 (hpos, addr, 1); } return 1; } return 0; } static void REGPARAM2 custom_wput (uaecptr addr, uae_u32 value) { int hpos = current_hpos (); #ifdef JIT special_mem |= S_WRITE; #endif #if CUSTOM_DEBUG > 2 write_log (_T("%d:%d:wput: %04X %04X pc=%p\n"), hpos, vpos, addr & 0x01fe, value & 0xffff, m68k_getpc ()); #endif sync_copper_with_cpu (hpos, 1); if (addr & 1) { addr &= ~1; custom_wput_1 (hpos, addr, (value >> 8) | (value & 0xff00), 0); custom_wput_1 (hpos, addr + 2, (value << 8) | (value & 0x00ff), 0); return; } custom_wput_1 (hpos, addr, value, 0); } static void REGPARAM2 custom_bput (uaecptr addr, uae_u32 value) { static int warned; uae_u16 rval; if (currprefs.chipset_mask & CSMASK_AGA) { if (addr & 1) { rval = value & 0xff; } else { rval = (value << 8) | (value & 0xFF); } } else { rval = (value << 8) | (value & 0xff); } #ifdef JIT special_mem |= S_WRITE; #endif if (currprefs.cpu_model == 68060) { if (addr & 1) custom_wput (addr & ~1, rval); else custom_wput (addr, value << 8); } else { custom_wput (addr & ~1, rval); } } static void REGPARAM2 custom_lput (uaecptr addr, uae_u32 value) { #ifdef JIT special_mem |= S_WRITE; #endif custom_wput (addr & 0xfffe, value >> 16); custom_wput ((addr + 2) & 0xfffe, (uae_u16)value); } #ifdef SAVESTATE void custom_prepare_savestate (void) { int i; for (i = 0; i < ev2_max; i++) { if (eventtab2[i].active) { eventtab2[i].active = 0; eventtab2[i].handler (eventtab2[i].data); } } } #define RB restore_u8 () #define SRB (uae_s8)restore_u8 () #define RBB restore_u8 () != 0 #define RW restore_u16 () #define RL restore_u32 () uae_u8 *restore_custom (uae_u8 *src) { uae_u16 dsklen, dskbytr; int dskpt; int i; audio_reset (); changed_prefs.chipset_mask = currprefs.chipset_mask = RL & CSMASK_MASK; update_mirrors (); RW; /* 000 BLTDDAT */ RW; /* 002 DMACONR */ RW; /* 004 VPOSR */ RW; /* 006 VHPOSR */ RW; /* 008 DSKDATR (dummy register) */ JOYSET(0, RW); /* 00A JOY0DAT */ JOYSET(1, RW); /* 00C JOY1DAT */ clxdat = RW; /* 00E CLXDAT */ RW; /* 010 ADKCONR */ RW; /* 012 POT0DAT* */ RW; /* 014 POT1DAT* */ RW; /* 016 POTINP* */ RW; /* 018 SERDATR* */ dskbytr = RW; /* 01A DSKBYTR */ RW; /* 01C INTENAR */ RW; /* 01E INTREQR */ dskpt = RL; /* 020-022 DSKPT */ dsklen = RW; /* 024 DSKLEN */ RW; /* 026 DSKDAT */ RW; /* 028 REFPTR */ i = RW; lof_store = lof_current = (i & 0x8000) ? 1 : 0; lol = (i & 0x0080) ? 1 : 0; /* 02A VPOSW */ RW; /* 02C VHPOSW */ COPCON (RW); /* 02E COPCON */ RW; /* 030 SERDAT* */ RW; /* 032 SERPER* */ potgo_value = 0; POTGO (RW); /* 034 POTGO */ RW; /* 036 JOYTEST* */ RW; /* 038 STREQU */ RW; /* 03A STRVHBL */ RW; /* 03C STRHOR */ RW; /* 03E STRLONG */ BLTCON0 (0, RW); /* 040 BLTCON0 */ BLTCON1 (0, RW); /* 042 BLTCON1 */ BLTAFWM (0, RW); /* 044 BLTAFWM */ BLTALWM (0, RW); /* 046 BLTALWM */ BLTCPTH (0, RW);BLTCPTL(0, RW); /* 048-04B BLTCPT */ BLTBPTH (0, RW);BLTBPTL(0, RW); /* 04C-04F BLTBPT */ BLTAPTH (0, RW);BLTAPTL(0, RW); /* 050-053 BLTAPT */ BLTDPTH (0, RW);BLTDPTL(0, RW); /* 054-057 BLTDPT */ RW; /* 058 BLTSIZE */ RW; /* 05A BLTCON0L */ blt_info.vblitsize = RW;/* 05C BLTSIZV */ blt_info.hblitsize = RW;/* 05E BLTSIZH */ BLTCMOD (0, RW); /* 060 BLTCMOD */ BLTBMOD (0, RW); /* 062 BLTBMOD */ BLTAMOD (0, RW); /* 064 BLTAMOD */ BLTDMOD (0, RW); /* 066 BLTDMOD */ RW; /* 068 ? */ RW; /* 06A ? */ RW; /* 06C ? */ RW; /* 06E ? */ BLTCDAT (0, RW); /* 070 BLTCDAT */ BLTBDAT (0, RW); /* 072 BLTBDAT */ BLTADAT (0, RW); /* 074 BLTADAT */ RW; /* 076 ? */ RW; /* 078 ? */ RW; /* 07A ? */ RW; /* 07C LISAID */ DSKSYNC (-1, RW); /* 07E DSKSYNC */ cop1lc = RL; /* 080/082 COP1LC */ cop2lc = RL; /* 084/086 COP2LC */ RW; /* 088 ? */ RW; /* 08A ? */ RW; /* 08C ? */ diwstrt = RW; /* 08E DIWSTRT */ diwstop = RW; /* 090 DIWSTOP */ ddfstrt = RW; /* 092 DDFSTRT */ ddfstop = RW; /* 094 DDFSTOP */ dmacon = RW & ~(0x2000|0x4000); /* 096 DMACON */ CLXCON (RW); /* 098 CLXCON */ intena = intena_internal = RW; /* 09A INTENA */ intreq = RW; /* 09C INTREQ */ intreq_internal = intreq; adkcon = RW; /* 09E ADKCON */ for (i = 0; i < 8; i++) bplptx[i] = bplpt[i] = RL; bplcon0 = RW; /* 100 BPLCON0 */ bplcon1 = RW; /* 102 BPLCON1 */ bplcon2 = RW; /* 104 BPLCON2 */ bplcon3 = RW; /* 106 BPLCON3 */ bpl1mod = RW; /* 108 BPL1MOD */ bpl2mod = RW; /* 10A BPL2MOD */ bplcon4 = RW; /* 10C BPLCON4 */ clxcon2 = RW; /* 10E CLXCON2* */ for(i = 0; i < 8; i++) bplxdat[i] = RW; /* BPLXDAT */ for(i = 0; i < 32; i++) current_colors.color_regs_ecs[i] = RW; /* 180 COLORxx */ htotal = RW; /* 1C0 HTOTAL */ hsstop = RW; /* 1C2 HSTOP ? */ hbstrt = RW; /* 1C4 HBSTRT ? */ hbstop = RW; /* 1C6 HBSTOP ? */ vtotal = RW; /* 1C8 VTOTAL */ vsstop = RW; /* 1CA VSSTOP */ vbstrt = RW; /* 1CC VBSTRT */ vbstop = RW; /* 1CE VBSTOP */ RW; /* 1D0 ? */ RW; /* 1D2 ? */ RW; /* 1D4 ? */ RW; /* 1D6 ? */ RW; /* 1D8 ? */ RW; /* 1DA ? */ new_beamcon0 = RW; /* 1DC BEAMCON0 */ hsstrt = RW; /* 1DE HSSTRT */ vsstrt = RW; /* 1E0 VSSTT */ hcenter = RW; /* 1E2 HCENTER */ diwhigh = RW; /* 1E4 DIWHIGH */ diwhigh_written = (diwhigh & 0x8000) ? 1 : 0; hdiwstate = (diwhigh & 0x4000) ? DIW_waiting_stop : DIW_waiting_start; diwhigh &= 0x3fff; RW; /* 1E6 ? */ RW; /* 1E8 ? */ RW; /* 1EA ? */ RW; /* 1EC ? */ RW; /* 1EE ? */ RW; /* 1F0 ? */ RW; /* 1F2 ? */ RW; /* 1F4 ? */ RW; /* 1F6 ? */ RW; /* 1F8 ? */ i = RW; /* 1FA ? */ if (i & 0x8000) currprefs.ntscmode = changed_prefs.ntscmode = i & 1; fmode = RW; /* 1FC FMODE */ last_custom_value1 = RW;/* 1FE ? */ current_colors.borderblank = isbrdblank (-1, bplcon0, bplcon3); DISK_restore_custom (dskpt, dsklen, dskbytr); return src; } #endif /* SAVESTATE */ #if defined SAVESTATE || defined DEBUGGER #define SB save_u8 #define SW save_u16 #define SL save_u32 extern uae_u16 serper; uae_u8 *save_custom (int *len, uae_u8 *dstptr, int full) { uae_u8 *dstbak, *dst; int i, dummy; uae_u32 dskpt; uae_u16 dsklen, dsksync, dskbytr; DISK_save_custom (&dskpt, &dsklen, &dsksync, &dskbytr); if (dstptr) dstbak = dst = dstptr; else dstbak = dst = xmalloc (uae_u8, 8 + 256 * 2); SL (currprefs.chipset_mask); SW (0); /* 000 BLTDDAT */ SW (dmacon); /* 002 DMACONR */ SW (VPOSR ()); /* 004 VPOSR */ SW (VHPOSR ()); /* 006 VHPOSR */ SW (0); /* 008 DSKDATR */ SW (JOYGET (0)); /* 00A JOY0DAT */ SW (JOYGET (1)); /* 00C JOY1DAT */ SW (clxdat | 0x8000); /* 00E CLXDAT */ SW (ADKCONR ()); /* 010 ADKCONR */ SW (POT0DAT ()); /* 012 POT0DAT */ SW (POT1DAT ()); /* 014 POT1DAT */ SW (0) ; /* 016 POTINP * */ SW (0); /* 018 SERDATR * */ SW (dskbytr); /* 01A DSKBYTR */ SW (INTENAR ()); /* 01C INTENAR */ SW (INTREQR ()); /* 01E INTREQR */ SL (dskpt); /* 020-023 DSKPT */ SW (dsklen); /* 024 DSKLEN */ SW (0); /* 026 DSKDAT */ SW (0); /* 028 REFPTR */ SW ((lof_store ? 0x8001 : 0) | (lol ? 0x0080 : 0));/* 02A VPOSW */ SW (0); /* 02C VHPOSW */ SW (copcon); /* 02E COPCON */ SW (serper); /* 030 SERDAT * */ SW (serdat); /* 032 SERPER * */ SW (potgo_value); /* 034 POTGO */ SW (0); /* 036 JOYTEST * */ SW (0); /* 038 STREQU */ SW (0); /* 03A STRVBL */ SW (0); /* 03C STRHOR */ SW (0); /* 03E STRLONG */ SW (bltcon0); /* 040 BLTCON0 */ SW (bltcon1); /* 042 BLTCON1 */ SW (blt_info.bltafwm); /* 044 BLTAFWM */ SW (blt_info.bltalwm); /* 046 BLTALWM */ SL (bltcpt); /* 048-04B BLTCPT */ SL (bltbpt); /* 04C-04F BLTCPT */ SL (bltapt); /* 050-053 BLTCPT */ SL (bltdpt); /* 054-057 BLTCPT */ SW (0); /* 058 BLTSIZE */ SW (0); /* 05A BLTCON0L (use BLTCON0 instead) */ SW (blt_info.vblitsize);/* 05C BLTSIZV */ SW (blt_info.hblitsize);/* 05E BLTSIZH */ SW (blt_info.bltcmod); /* 060 BLTCMOD */ SW (blt_info.bltbmod); /* 062 BLTBMOD */ SW (blt_info.bltamod); /* 064 BLTAMOD */ SW (blt_info.bltdmod); /* 066 BLTDMOD */ SW (0); /* 068 ? */ SW (0); /* 06A ? */ SW (0); /* 06C ? */ SW (0); /* 06E ? */ SW (blt_info.bltcdat); /* 070 BLTCDAT */ SW (blt_info.bltbdat); /* 072 BLTBDAT */ SW (blt_info.bltadat); /* 074 BLTADAT */ SW (0); /* 076 ? */ SW (0); /* 078 ? */ SW (0); /* 07A ? */ SW (DENISEID (&dummy)); /* 07C DENISEID/LISAID */ SW (dsksync); /* 07E DSKSYNC */ SL (cop1lc); /* 080-083 COP1LC */ SL (cop2lc); /* 084-087 COP2LC */ SW (0); /* 088 ? */ SW (0); /* 08A ? */ SW (0); /* 08C ? */ SW (diwstrt); /* 08E DIWSTRT */ SW (diwstop); /* 090 DIWSTOP */ SW (ddfstrt); /* 092 DDFSTRT */ SW (ddfstop); /* 094 DDFSTOP */ SW (dmacon); /* 096 DMACON */ SW (clxcon); /* 098 CLXCON */ SW (intena); /* 09A INTENA */ SW (intreq); /* 09C INTREQ */ SW (adkcon); /* 09E ADKCON */ for (i = 0; full && i < 32; i++) SW (0); for (i = 0; i < 8; i++) SL (bplpt[i]); /* 0E0-0FE BPLxPT */ SW (bplcon0); /* 100 BPLCON0 */ SW (bplcon1); /* 102 BPLCON1 */ SW (bplcon2); /* 104 BPLCON2 */ SW (bplcon3); /* 106 BPLCON3 */ SW (bpl1mod); /* 108 BPL1MOD */ SW (bpl2mod); /* 10A BPL2MOD */ SW (bplcon4); /* 10C BPLCON4 */ SW (clxcon2); /* 10E CLXCON2 */ for (i = 0;i < 8; i++) SW (bplxdat[i]); /* 110 BPLxDAT */ if (full) { for (i = 0; i < 8; i++) { SL (spr[i].pt); /* 120-13E SPRxPT */ SW (sprpos[i]); /* 1x0 SPRxPOS */ SW (sprctl[i]); /* 1x2 SPRxPOS */ SW (sprdata[i][0]); /* 1x4 SPRxDATA */ SW (sprdatb[i][0]); /* 1x6 SPRxDATB */ } } for ( i = 0; i < 32; i++) { if (currprefs.chipset_mask & CSMASK_AGA) { uae_u32 v = current_colors.color_regs_aga[i]; uae_u16 v2; v &= 0x00f0f0f0; v2 = (v >> 4) & 15; v2 |= ((v >> 12) & 15) << 4; v2 |= ((v >> 20) & 15) << 8; SW (v2); } else { SW (current_colors.color_regs_ecs[i]); /* 180-1BE COLORxx */ } } SW (htotal); /* 1C0 HTOTAL */ SW (hsstop); /* 1C2 HSTOP*/ SW (hbstrt); /* 1C4 HBSTRT */ SW (hbstop); /* 1C6 HBSTOP */ SW (vtotal); /* 1C8 VTOTAL */ SW (vsstop); /* 1CA VSSTOP */ SW (vbstrt); /* 1CC VBSTRT */ SW (vbstop); /* 1CE VBSTOP */ SW (0); /* 1D0 */ SW (0); /* 1D2 */ SW (0); /* 1D4 */ SW (0); /* 1D6 */ SW (0); /* 1D8 */ SW (0); /* 1DA */ SW (beamcon0); /* 1DC BEAMCON0 */ SW (hsstrt); /* 1DE HSSTRT */ SW (vsstrt); /* 1E0 VSSTRT */ SW (hcenter); /* 1E2 HCENTER */ SW (diwhigh | (diwhigh_written ? 0x8000 : 0) | (hdiwstate == DIW_waiting_stop ? 0x4000 : 0)); /* 1E4 DIWHIGH */ SW (0); /* 1E6 */ SW (0); /* 1E8 */ SW (0); /* 1EA */ SW (0); /* 1EC */ SW (0); /* 1EE */ SW (0); /* 1F0 */ SW (0); /* 1F2 */ SW (0); /* 1F4 */ SW (0); /* 1F6 */ SW (0); /* 1F8 */ SW (0x8000 | (currprefs.ntscmode ? 1 : 0)); /* 1FA (re-used for NTSC) */ SW (fmode); /* 1FC FMODE */ SW (last_custom_value1); /* 1FE */ *len = dst - dstbak; return dstbak; } #endif /* SAVESTATE || DEBUGGER */ #ifdef SAVESTATE uae_u8 *restore_custom_agacolors (uae_u8 *src) { int i; for (i = 0; i < 256; i++) { #ifdef AGA uae_u32 v = RL; color_regs_aga_genlock[i] = 0; if (v & 0x80000000) color_regs_aga_genlock[i] = 1; v &= 0x00ffffff; current_colors.color_regs_aga[i] = v; #else RL; #endif } return src; } uae_u8 *save_custom_agacolors (int *len, uae_u8 *dstptr) { uae_u8 *dstbak, *dst; int i; if (dstptr) dstbak = dst = dstptr; else dstbak = dst = xmalloc (uae_u8, 256 * 4); for (i = 0; i < 256; i++) #ifdef AGA SL (current_colors.color_regs_aga[i] | (color_regs_aga_genlock[i] ? 0x80000000 : 0)); #else SL (0); #endif *len = dst - dstbak; return dstbak; } uae_u8 *restore_custom_sprite (int num, uae_u8 *src) { memset (&spr[num], 0, sizeof (struct sprite)); spr[num].pt = RL; /* 120-13E SPRxPT */ sprpos[num] = RW; /* 1x0 SPRxPOS */ sprctl[num] = RW; /* 1x2 SPRxPOS */ sprdata[num][0] = RW; /* 1x4 SPRxDATA */ sprdatb[num][0] = RW; /* 1x6 SPRxDATB */ sprdata[num][1] = RW; sprdatb[num][1] = RW; sprdata[num][2] = RW; sprdatb[num][2] = RW; sprdata[num][3] = RW; sprdatb[num][3] = RW; spr[num].armed = RB; return src; } uae_u8 *save_custom_sprite (int num, int *len, uae_u8 *dstptr) { uae_u8 *dstbak, *dst; if (dstptr) dstbak = dst = dstptr; else dstbak = dst = xmalloc (uae_u8, 30); SL (spr[num].pt); /* 120-13E SPRxPT */ SW (sprpos[num]); /* 1x0 SPRxPOS */ SW (sprctl[num]); /* 1x2 SPRxPOS */ SW (sprdata[num][0]); /* 1x4 SPRxDATA */ SW (sprdatb[num][0]); /* 1x6 SPRxDATB */ SW (sprdata[num][1]); SW (sprdatb[num][1]); SW (sprdata[num][2]); SW (sprdatb[num][2]); SW (sprdata[num][3]); SW (sprdatb[num][3]); SB (spr[num].armed ? 1 : 0); *len = dst - dstbak; return dstbak; } uae_u8 *restore_custom_extra (uae_u8 *src) { uae_u32 v = restore_u32 (); if (!(v & 1)) v = 0; currprefs.cs_compatible = changed_prefs.cs_compatible = v >> 24; cia_set_overlay ((v & 2) != 0); currprefs.genlock = changed_prefs.genlock = RBB; currprefs.cs_rtc = changed_prefs.cs_rtc = RB; currprefs.cs_rtc_adjust = changed_prefs.cs_rtc_adjust = RL; currprefs.cs_a1000ram = changed_prefs.cs_a1000ram = RBB; currprefs.cs_slowmemisfast = changed_prefs.cs_slowmemisfast = RBB; currprefs.cs_a2091 = changed_prefs.cs_a2091 = RBB; currprefs.cs_a4091 = changed_prefs.cs_a4091 = RBB; currprefs.cs_cdtvscsi = changed_prefs.cs_cdtvscsi = RBB; currprefs.cs_pcmcia = changed_prefs.cs_pcmcia = RBB; currprefs.cs_ciaatod = changed_prefs.cs_ciaatod = RB; currprefs.cs_ciaoverlay = changed_prefs.cs_ciaoverlay = RBB; currprefs.cs_agnusbltbusybug = changed_prefs.cs_agnusbltbusybug = RBB; currprefs.cs_denisenoehb = changed_prefs.cs_denisenoehb = RBB; currprefs.cs_agnusrev = changed_prefs.cs_agnusrev = SRB; currprefs.cs_deniserev = changed_prefs.cs_deniserev = SRB; currprefs.cs_fatgaryrev = changed_prefs.cs_fatgaryrev = SRB; currprefs.cs_ramseyrev = changed_prefs.cs_ramseyrev = SRB; currprefs.cs_cd32c2p = changed_prefs.cs_cd32c2p = RBB; currprefs.cs_cd32cd = changed_prefs.cs_cd32cd = RBB; currprefs.cs_cd32nvram = changed_prefs.cs_cd32nvram = RBB; currprefs.cs_cdtvcd = changed_prefs.cs_cdtvcd = RBB; currprefs.cs_cdtvram = changed_prefs.cs_cdtvram = RBB; currprefs.cs_cdtvcard = changed_prefs.cs_cdtvcard = RB; currprefs.cs_df0idhw = changed_prefs.cs_df0idhw = RBB; currprefs.cs_dipagnus = changed_prefs.cs_dipagnus = RBB; currprefs.cs_ide = changed_prefs.cs_ide = RB; currprefs.cs_mbdmac = changed_prefs.cs_mbdmac = RB; currprefs.cs_ksmirror_a8 = changed_prefs.cs_ksmirror_a8 = RBB; currprefs.cs_ksmirror_e0 = changed_prefs.cs_ksmirror_e0 = RBB; currprefs.cs_resetwarning = changed_prefs.cs_resetwarning = RBB; return src; } uae_u8 *save_custom_extra (int *len, uae_u8 *dstptr) { uae_u8 *dstbak, *dst; if (dstptr) dstbak = dst = dstptr; else dstbak = dst = xmalloc (uae_u8, 1000); SL ((currprefs.cs_compatible << 24) | (&get_mem_bank (0) != &chipmem_bank ? 2 : 0) | 1); SB (currprefs.genlock ? 1 : 0); SB (currprefs.cs_rtc); SL (currprefs.cs_rtc_adjust); SB (currprefs.cs_a1000ram ? 1 : 0); SB (currprefs.cs_slowmemisfast ? 1 : 0); SB (currprefs.cs_a2091 ? 1 : 0); SB (currprefs.cs_a4091 ? 1 : 0); SB (currprefs.cs_cdtvscsi ? 1 : 0); SB (currprefs.cs_pcmcia ? 1 : 0); SB (currprefs.cs_ciaatod); SB (currprefs.cs_ciaoverlay ? 1 : 0); SB (currprefs.cs_agnusbltbusybug ? 1 : 0); SB (currprefs.cs_denisenoehb ? 1 : 0); SB (currprefs.cs_agnusrev); SB (currprefs.cs_deniserev); SB (currprefs.cs_fatgaryrev); SB (currprefs.cs_ramseyrev); SB (currprefs.cs_cd32c2p); SB (currprefs.cs_cd32cd); SB (currprefs.cs_cd32nvram); SB (currprefs.cs_cdtvcd ? 1 : 0); SB (currprefs.cs_cdtvram ? 1 : 0); SB (currprefs.cs_cdtvcard); SB (currprefs.cs_df0idhw ? 1 : 0); SB (currprefs.cs_dipagnus ? 1 : 0); SB (currprefs.cs_ide); SB (currprefs.cs_mbdmac); SB (currprefs.cs_ksmirror_a8 ? 1 : 0); SB (currprefs.cs_ksmirror_e0 ? 1 : 0); SB (currprefs.cs_resetwarning ? 1 : 0); *len = dst - dstbak; return dstbak; } uae_u8 *restore_custom_event_delay (uae_u8 *src) { if (restore_u32 () != 1) return src; int cnt = restore_u8 (); for (int i = 0; i < cnt; i++) { uae_u8 type = restore_u8 (); evt e = restore_u64 (); uae_u32 data = restore_u32 (); if (type == 1) event2_newevent_xx (-1, e, data, send_interrupt_do); } return src; } uae_u8 *save_custom_event_delay (int *len, uae_u8 *dstptr) { uae_u8 *dstbak, *dst; int cnt = 0; for (int i = ev2_misc; i < ev2_max; i++) { struct ev2 *e = &eventtab2[i]; if (e->active && e->handler == send_interrupt_do) { cnt++; } } if (cnt == 0) return NULL; if (dstptr) dstbak = dst = dstptr; else dstbak = dst = xmalloc (uae_u8, 1000); save_u32 (1); save_u8 (cnt); for (int i = ev2_misc; i < ev2_max; i++) { struct ev2 *e = &eventtab2[i]; if (e->active && e->handler == send_interrupt_do) { save_u8 (1); save_u64 (e->evtime - get_cycles ()); save_u32 (e->data); } } *len = dst - dstbak; return dstbak; } uae_u8 *save_cycles (int *len, uae_u8 *dstptr) { uae_u8 *dstbak, *dst; if (dstptr) dstbak = dst = dstptr; else dstbak = dst = xmalloc (uae_u8, 1000); save_u32 (1); save_u32 (CYCLE_UNIT); save_u64 (get_cycles ()); save_u32 (extra_cycle); write_log (_T("SAVECYCLES %08lX\n"), get_cycles ()); *len = dst - dstbak; return dstbak; } uae_u8 *restore_cycles (uae_u8 *src) { if (restore_u32 () != 1) return src; restore_u32 (); start_cycles = restore_u64 (); extra_cycle = restore_u32 (); write_log (_T("RESTORECYCLES %08lX\n"), start_cycles); return src; } #endif /* SAVESTATE */ void check_prefs_changed_custom (void) { if (!config_changed) return; currprefs.gfx_framerate = changed_prefs.gfx_framerate; if (currprefs.turbo_emulation != changed_prefs.turbo_emulation) warpmode (changed_prefs.turbo_emulation); if (inputdevice_config_change_test ()) inputdevice_copyconfig (&changed_prefs, &currprefs); currprefs.immediate_blits = changed_prefs.immediate_blits; currprefs.waiting_blits = changed_prefs.waiting_blits; currprefs.collision_level = changed_prefs.collision_level; currprefs.cs_ciaatod = changed_prefs.cs_ciaatod; currprefs.cs_rtc = changed_prefs.cs_rtc; currprefs.cs_cd32cd = changed_prefs.cs_cd32cd; currprefs.cs_cd32c2p = changed_prefs.cs_cd32c2p; currprefs.cs_cd32nvram = changed_prefs.cs_cd32nvram; currprefs.cs_cdtvcd = changed_prefs.cs_cdtvcd; currprefs.cs_ide = changed_prefs.cs_ide; currprefs.cs_pcmcia = changed_prefs.cs_pcmcia; currprefs.cs_fatgaryrev = changed_prefs.cs_fatgaryrev; currprefs.cs_ramseyrev = changed_prefs.cs_ramseyrev; currprefs.cs_agnusrev = changed_prefs.cs_agnusrev; currprefs.cs_deniserev = changed_prefs.cs_deniserev; currprefs.cs_mbdmac = changed_prefs.cs_mbdmac; currprefs.cs_df0idhw = changed_prefs.cs_df0idhw; currprefs.cs_slowmemisfast = changed_prefs.cs_slowmemisfast; if (currprefs.chipset_mask != changed_prefs.chipset_mask || currprefs.picasso96_nocustom != changed_prefs.picasso96_nocustom || currprefs.ntscmode != changed_prefs.ntscmode) { currprefs.picasso96_nocustom = changed_prefs.picasso96_nocustom; currprefs.chipset_mask = changed_prefs.chipset_mask; if (currprefs.ntscmode != changed_prefs.ntscmode) { currprefs.ntscmode = changed_prefs.ntscmode; new_beamcon0 = currprefs.ntscmode ? 0x00 : 0x20; } init_custom (); } #ifdef GFXFILTER currprefs.gfx_filter_horiz_zoom = changed_prefs.gfx_filter_horiz_zoom; currprefs.gfx_filter_vert_zoom = changed_prefs.gfx_filter_vert_zoom; currprefs.gfx_filter_horiz_offset = changed_prefs.gfx_filter_horiz_offset; currprefs.gfx_filter_vert_offset = changed_prefs.gfx_filter_vert_offset; currprefs.gfx_filter_scanlines = changed_prefs.gfx_filter_scanlines; #endif } #ifdef CPUEMU_12 STATIC_INLINE void sync_copper (int hpos) { if (copper_enabled_thisline) update_copper (hpos); } STATIC_INLINE void decide_fetch_ce (int hpos) { if ((ddf_change == vpos || ddf_change + 1 == vpos) && vpos < current_maxvpos ()) decide_fetch (hpos); } #define BLIT_NASTY 4 // blitter not in nasty mode = CPU gets one cycle if it has been waiting // at least 4 cycles (all DMA cycles count, not just blitter cycles, even // blitter idle cycles do count!) extern int cpu_tracer; STATIC_INLINE int dma_cycle (void) { int hpos, hpos_old; blitter_nasty = 1; if (cpu_tracer < 0) return current_hpos (); if (!currprefs.cpu_cycle_exact) return current_hpos (); while (currprefs.cpu_cycle_exact) { int bpldma; int blitpri = dmacon & DMA_BLITPRI; hpos_old = current_hpos (); hpos = hpos_old + 1; sync_copper (hpos); decide_line (hpos); decide_fetch_ce (hpos); bpldma = is_bitplane_dma (hpos_old); if (bltstate != BLT_done) { if (!blitpri && blitter_nasty >= BLIT_NASTY && (cycle_line[hpos_old] & CYCLE_MASK) == 0 && !bpldma) { alloc_cycle (hpos_old, CYCLE_CPUNASTY); break; } decide_blitter (hpos); // copper may have been waiting for the blitter sync_copper (hpos); } if ((cycle_line[hpos_old] & CYCLE_MASK) == 0 && !bpldma) { alloc_cycle (hpos_old, CYCLE_CPU); break; } regs.ce020memcycles -= CYCLE_UNIT; do_cycles (1 * CYCLE_UNIT); /* bus was allocated to dma channel, wait for next cycle.. */ } return hpos_old; } STATIC_INLINE void checknasty (int hpos, int vpos) { if (blitter_nasty >= BLIT_NASTY && !(dmacon & DMA_BLITPRI)) record_dma_event (DMA_EVENT_BLITNASTY, hpos, vpos); } uae_u32 wait_cpu_cycle_read (uaecptr addr, int mode) { uae_u32 v = 0; int hpos; struct dma_rec *dr; hpos = dma_cycle (); x_do_cycles_pre (CYCLE_UNIT); #ifdef DEBUGGER if (debug_dma) { int reg = 0x1000; if (mode < 0) reg |= 4; else if (mode > 0) reg |= 2; else reg |= 1; dr = record_dma (reg, v, addr, hpos, vpos, DMARECORD_CPU); checknasty (hpos, vpos); } #endif if (mode < 0) v = get_long (addr); else if (mode > 0) v = get_word (addr); else if (mode == 0) v = get_byte (addr); #ifdef DEBUGGER if (debug_dma) dr->dat = v; #endif x_do_cycles_post (CYCLE_UNIT, v); return v; } uae_u32 wait_cpu_cycle_read_ce020 (uaecptr addr, int mode) { uae_u32 v = 0; int hpos; struct dma_rec *dr; hpos = dma_cycle (); x_do_cycles_pre (CYCLE_UNIT); #ifdef DEBUGGER if (debug_dma) { int reg = 0x1000; if (mode < 0) reg |= 4; else if (mode > 0) reg |= 2; else reg |= 1; dr = record_dma (reg, v, addr, hpos, vpos, DMARECORD_CPU); checknasty (hpos, vpos); } #endif if (mode < 0) v = get_long (addr); else if (mode > 0) v = get_word (addr); else if (mode == 0) v = get_byte (addr); #ifdef DEBUGGER if (debug_dma) dr->dat = v; #endif regs.ce020memcycles -= CYCLE_UNIT; return v; } void wait_cpu_cycle_write (uaecptr addr, int mode, uae_u32 v) { int hpos; hpos = dma_cycle (); x_do_cycles_pre (CYCLE_UNIT); #ifdef DEBUGGER if (debug_dma) { int reg = 0x1100; if (mode < 0) reg |= 4; else if (mode > 0) reg |= 2; else reg |= 1; record_dma (reg, v, addr, hpos, vpos, DMARECORD_CPU); checknasty (hpos, vpos); } #endif if (mode < 0) put_long (addr, v); else if (mode > 0) put_word (addr, v); else if (mode == 0) put_byte (addr, v); x_do_cycles_post (CYCLE_UNIT, v); } void wait_cpu_cycle_write_ce020 (uaecptr addr, int mode, uae_u32 v) { int hpos; hpos = dma_cycle (); x_do_cycles_pre (CYCLE_UNIT); #ifdef DEBUGGER if (debug_dma) { int reg = 0x1100; if (mode < 0) reg |= 4; else if (mode > 0) reg |= 2; else reg |= 1; record_dma (reg, v, addr, hpos, vpos, DMARECORD_CPU); checknasty (hpos, vpos); } #endif if (mode < 0) put_long (addr, v); else if (mode > 0) put_word (addr, v); else if (mode == 0) put_byte (addr, v); regs.ce020memcycles -= CYCLE_UNIT; } void do_cycles_ce (unsigned long cycles) { unsigned long c; c = cycles + extra_cycle; while (c >= CYCLE_UNIT) { int hpos = current_hpos () + 1; sync_copper (hpos); decide_line (hpos); decide_fetch_ce (hpos); if (bltstate != BLT_done) decide_blitter (hpos); do_cycles (1 * CYCLE_UNIT); c -= CYCLE_UNIT; } extra_cycle = c; } int is_cycle_ce (void) { int hpos = current_hpos (); return cycle_line[hpos] & CYCLE_MASK; } #endif bool ispal (void) { if (beamcon0 & 0x80) return currprefs.ntscmode == 0; return maxvpos_nom >= MAXVPOS_NTSC + (MAXVPOS_PAL - MAXVPOS_NTSC) / 2; } fs-uae-2.2.3+dfsg/src/a2091.cpp0000644000175000017500000007225112162366655016113 0ustar glaubitzglaubitz/* * UAE - The Un*x Amiga Emulator * * A590/A2091/A3000/CDTV SCSI expansion (DMAC/SuperDMAC + WD33C93) emulation * * Copyright 2007 Toni Wilen * */ #define A2091_DEBUG 0 #define A3000_DEBUG 0 #define WD33C93_DEBUG 0 #include "sysconfig.h" #include "sysdeps.h" #include "options.h" #include "uae.h" #include "uae/memory.h" #include "rommgr.h" #include "custom.h" #include "newcpu.h" #include "debug.h" #include "scsi.h" #include "a2091.h" #include "blkdev.h" #include "gui.h" #include "zfile.h" #include "filesys.h" #include "autoconf.h" #include "cdtv.h" #define ROM_VECTOR 0x2000 #define ROM_OFFSET 0x2000 /* SuperDMAC CNTR bits. */ #define SCNTR_TCEN (1<<5) #define SCNTR_PREST (1<<4) #define SCNTR_PDMD (1<<3) #define SCNTR_INTEN (1<<2) #define SCNTR_DDIR (1<<1) #define SCNTR_IO_DX (1<<0) /* DMAC CNTR bits. */ #define CNTR_TCEN (1<<7) #define CNTR_PREST (1<<6) #define CNTR_PDMD (1<<5) #define CNTR_INTEN (1<<4) #define CNTR_DDIR (1<<3) /* ISTR bits. */ #define ISTR_INTX (1<<8) /* XT/AT Interrupt pending */ #define ISTR_INT_F (1<<7) /* Interrupt Follow */ #define ISTR_INTS (1<<6) /* SCSI Peripheral Interrupt */ #define ISTR_E_INT (1<<5) /* End-Of-Process Interrupt */ #define ISTR_INT_P (1<<4) /* Interrupt Pending */ #define ISTR_UE_INT (1<<3) /* Under-Run FIFO Error Interrupt */ #define ISTR_OE_INT (1<<2) /* Over-Run FIFO Error Interrupt */ #define ISTR_FF_FLG (1<<1) /* FIFO-Full Flag */ #define ISTR_FE_FLG (1<<0) /* FIFO-Empty Flag */ /* wd register names */ #define WD_OWN_ID 0x00 #define WD_CONTROL 0x01 #define WD_TIMEOUT_PERIOD 0x02 #define WD_CDB_1 0x03 #define WD_CDB_2 0x04 #define WD_CDB_3 0x05 #define WD_CDB_4 0x06 #define WD_CDB_5 0x07 #define WD_CDB_6 0x08 #define WD_CDB_7 0x09 #define WD_CDB_8 0x0a #define WD_CDB_9 0x0b #define WD_CDB_10 0x0c #define WD_CDB_11 0x0d #define WD_CDB_12 0x0e #define WD_TARGET_LUN 0x0f #define WD_COMMAND_PHASE 0x10 #define WD_SYNCHRONOUS_TRANSFER 0x11 #define WD_TRANSFER_COUNT_MSB 0x12 #define WD_TRANSFER_COUNT 0x13 #define WD_TRANSFER_COUNT_LSB 0x14 #define WD_DESTINATION_ID 0x15 #define WD_SOURCE_ID 0x16 #define WD_SCSI_STATUS 0x17 #define WD_COMMAND 0x18 #define WD_DATA 0x19 #define WD_QUEUE_TAG 0x1a #define WD_AUXILIARY_STATUS 0x1f /* WD commands */ #define WD_CMD_RESET 0x00 #define WD_CMD_ABORT 0x01 #define WD_CMD_ASSERT_ATN 0x02 #define WD_CMD_NEGATE_ACK 0x03 #define WD_CMD_DISCONNECT 0x04 #define WD_CMD_RESELECT 0x05 #define WD_CMD_SEL_ATN 0x06 #define WD_CMD_SEL 0x07 #define WD_CMD_SEL_ATN_XFER 0x08 #define WD_CMD_SEL_XFER 0x09 #define WD_CMD_RESEL_RECEIVE 0x0a #define WD_CMD_RESEL_SEND 0x0b #define WD_CMD_WAIT_SEL_RECEIVE 0x0c #define WD_CMD_TRANS_ADDR 0x18 #define WD_CMD_TRANS_INFO 0x20 #define WD_CMD_TRANSFER_PAD 0x21 #define WD_CMD_SBT_MODE 0x80 /* paused or aborted interrupts */ #define CSR_MSGIN 0x20 #define CSR_SDP 0x21 #define CSR_SEL_ABORT 0x22 #define CSR_RESEL_ABORT 0x25 #define CSR_RESEL_ABORT_AM 0x27 #define CSR_ABORT 0x28 /* successful completion interrupts */ #define CSR_RESELECT 0x10 #define CSR_SELECT 0x11 #define CSR_SEL_XFER_DONE 0x16 #define CSR_XFER_DONE 0x18 /* terminated interrupts */ #define CSR_INVALID 0x40 #define CSR_UNEXP_DISC 0x41 #define CSR_TIMEOUT 0x42 #define CSR_PARITY 0x43 #define CSR_PARITY_ATN 0x44 #define CSR_BAD_STATUS 0x45 #define CSR_UNEXP 0x48 /* service required interrupts */ #define CSR_RESEL 0x80 #define CSR_RESEL_AM 0x81 #define CSR_DISC 0x85 #define CSR_SRV_REQ 0x88 /* SCSI Bus Phases */ #define PHS_DATA_OUT 0x00 #define PHS_DATA_IN 0x01 #define PHS_COMMAND 0x02 #define PHS_STATUS 0x03 #define PHS_MESS_OUT 0x06 #define PHS_MESS_IN 0x07 static int configured; static uae_u8 dmacmemory[100]; static uae_u8 *rom; static int rombankswitcher, rombank; static int rom_size, rom_mask; static int old_dmac = 0; static uae_u32 dmac_istr, dmac_cntr; static uae_u32 dmac_dawr; static uae_u32 dmac_acr; static uae_u32 dmac_wtc; static int dmac_dma; static uae_u8 sasr, scmd, auxstatus; static int wd_used; static int wd_phase, wd_next_phase, wd_busy; static int wd_dataoffset, wd_tc; static uae_u8 wd_data[32]; static int superdmac; static int scsidelay_irq; static uae_u8 scsidelay_status; static int wd33c93a = 1; struct scsi_data *scsis[8]; uae_u8 wdregs[32]; static int isirq (void) { if (superdmac) { if ((dmac_cntr & SCNTR_INTEN) && (dmac_istr & (ISTR_INTS | ISTR_E_INT))) return 1; } else { if ((dmac_cntr & CNTR_INTEN) && (dmac_istr & (ISTR_INTS | ISTR_E_INT))) return 1; } return 0; } void rethink_a2091 (void) { if (currprefs.cs_cdtvscsi) return; if (isirq()) { uae_int_requested |= 2; #if A2091_DEBUG > 2 || A3000_DEBUG > 2 write_log (_T("Interrupt_RETHINK\n")); #endif } else { uae_int_requested &= ~2; } } static void INT2 (void) { if (currprefs.cs_cdtvscsi) return; if (!(auxstatus & 0x80)) return; dmac_istr |= ISTR_INTS; if (isirq ()) uae_int_requested |= 2; } static void dmac_start_dma (void) { #if A3000_DEBUG > 0 || A2091_DEBUG > 0 write_log (_T("DMAC DMA started, ADDR=%08X, LEN=%08X words\n"), dmac_acr, dmac_wtc); #endif dmac_dma = 1; } static void dmac_stop_dma (void) { dmac_dma = 0; dmac_istr &= ~ISTR_E_INT; } static void dmac_reset (void) { #if WD33C93_DEBUG > 0 if (superdmac) write_log (_T("A3000 %s SCSI reset\n"), WD33C93); else write_log (_T("A2091 %s SCSI reset\n"), WD33C93); #endif } static void incsasr (int w) { if (sasr == WD_AUXILIARY_STATUS || sasr == WD_DATA || sasr == WD_COMMAND) return; if (w && sasr == WD_SCSI_STATUS) return; sasr++; sasr &= 0x1f; } static void dmac_cint (void) { dmac_istr = 0; rethink_a2091(); } static void doscsistatus (void) { wdregs[WD_SCSI_STATUS] = scsidelay_status; auxstatus |= 0x80; #if WD33C93_DEBUG > 0 write_log (_T("%s STATUS=%02X\n"), WD33C93, scsidelay_status); #endif if (currprefs.cs_cdtvscsi) { cdtv_scsi_int (); return; } if (!currprefs.cs_a2091 && currprefs.cs_mbdmac != 1) return; INT2(); #if A2091_DEBUG > 2 || A3000_DEBUG > 2 write_log (_T("Interrupt\n")); #endif } void scsi_hsync (void) { if (scsidelay_irq == 1) { scsidelay_irq = 0; doscsistatus(); return; } if (scsidelay_irq > 1) scsidelay_irq--; } static void set_status (uae_u8 status, int quick) { scsidelay_irq = quick <= 2 ? 2 : quick; scsidelay_status = status; } static TCHAR *scsitostring (void) { static TCHAR buf[200]; TCHAR *p; int i; p = buf; p[0] = 0; for (i = 0; i < wd_tc && i < sizeof wd_data; i++) { if (i > 0) { _tcscat (p, _T(".")); p++; } _stprintf (p, _T("%02X"), wd_data[i]); p += _tcslen (p); } return buf; } static void wd_cmd_sel_xfer (void) { int phase = wdregs[WD_COMMAND_PHASE]; #if WD33C93_DEBUG > 0 write_log (_T("* %s select and transfer, ID=%d phase=%02X\n"), WD33C93, wdregs[WD_DESTINATION_ID] & 0x7, phase); #endif if (!SCSIID) { set_status (CSR_TIMEOUT, 0); return; } SCSIID->buffer[0] = 0; if (phase >= 0x46) { phase = 0x50; wdregs[WD_TARGET_LUN] = SCSIID->status; SCSIID->buffer[0] = SCSIID->status; } wdregs[WD_COMMAND_PHASE] = phase; wd_phase = CSR_XFER_DONE | PHS_MESS_IN; set_status (wd_phase, 1); } static void dmacheck (void) { dmac_acr++; if (old_dmac && (dmac_cntr & CNTR_TCEN)) { if (dmac_wtc == 0) dmac_istr |= ISTR_E_INT; else dmac_wtc--; } } static void do_dma (void) { if (currprefs.cs_cdtvscsi) cdtv_getdmadata (&dmac_acr); if (SCSIID->direction == 0) { write_log (_T("%s DMA but no data!?\n"), WD33C93); } else if (SCSIID->direction < 0) { for (;;) { uae_u8 v; int status = scsi_receive_data (SCSIID, &v); put_byte (dmac_acr, v); if (wd_dataoffset < sizeof wd_data) wd_data[wd_dataoffset++] = v; dmacheck (); if (status) break; } } else if (SCSIID->direction > 0) { for (;;) { int status; uae_u8 v = get_byte (dmac_acr); if (wd_dataoffset < sizeof wd_data) wd_data[wd_dataoffset++] = v; status = scsi_send_data (SCSIID, v); dmacheck (); if (status) break; } } } static void wd_do_transfer_out (void) { #if WD33C93_DEBUG > 0 write_log (_T("%s SCSI O [%02X] %d/%d %s\n"), WD33C93, wdregs[WD_COMMAND_PHASE], wd_dataoffset, wd_tc, scsitostring ()); #endif if (wdregs[WD_COMMAND_PHASE] == 0x11) { wdregs[WD_COMMAND_PHASE] = 0x20; wd_phase = CSR_XFER_DONE | PHS_COMMAND; } else if (wdregs[WD_COMMAND_PHASE] == 0x30) { /* command was sent */ SCSIID->direction = scsi_data_dir (SCSIID); if (SCSIID->direction > 0) { /* if write command, need to wait for data */ wd_phase = CSR_XFER_DONE | PHS_DATA_OUT; wdregs[WD_COMMAND_PHASE] = 0x46; } else { scsi_emulate_cmd (SCSIID); if (SCSIID->data_len <= 0 || SCSIID->status != 0 || SCSIID->direction == 0) { wd_phase = CSR_XFER_DONE | PHS_STATUS; wdregs[WD_COMMAND_PHASE] = 0x47; } else { wd_phase = CSR_XFER_DONE | PHS_DATA_IN; wdregs[WD_COMMAND_PHASE] = 0x3f; } } } else if (wdregs[WD_COMMAND_PHASE] == 0x46) { if (SCSIID->direction > 0) { /* data was sent */ scsi_emulate_cmd (SCSIID); wd_phase = CSR_XFER_DONE | PHS_STATUS; } wdregs[WD_COMMAND_PHASE] = 0x47; } wd_dataoffset = 0; set_status (wd_phase, SCSIID->direction ? 0 : 1); wd_busy = 0; } static void wd_do_transfer_in (void) { #if WD33C93_DEBUG > 0 write_log (_T("%s SCSI I [%02X] %d/%d %s\n"), WD33C93, wdregs[WD_COMMAND_PHASE], wd_dataoffset, wd_tc, scsitostring ()); #endif wd_dataoffset = 0; if (wdregs[WD_COMMAND_PHASE] >= 0x36 && wdregs[WD_COMMAND_PHASE] < 0x47) { wdregs[WD_COMMAND_PHASE] = 0x47; wd_phase = CSR_XFER_DONE | PHS_STATUS; } else if (wdregs[WD_COMMAND_PHASE] == 0x47) { wdregs[WD_COMMAND_PHASE] = 0x50; wd_phase = CSR_XFER_DONE | PHS_MESS_IN; } else if (wdregs[WD_COMMAND_PHASE] == 0x50) { wdregs[WD_COMMAND_PHASE] = 0x60; wd_phase = CSR_DISC; } set_status (wd_phase, 1); wd_busy = 0; SCSIID->direction = 0; } static void wd_cmd_sel_xfer_atn (void) { int i, tmp_tc; tmp_tc = wdregs[WD_TRANSFER_COUNT_LSB] | (wdregs[WD_TRANSFER_COUNT] << 8) | (wdregs[WD_TRANSFER_COUNT_MSB] << 16); #if WD33C93_DEBUG > 0 write_log (_T("* %s select and transfer with atn, ID=%d PHASE=%02X TC=%d\n"), WD33C93, wdregs[WD_DESTINATION_ID] & 0x7, wdregs[WD_COMMAND_PHASE], tmp_tc); #endif if (wdregs[WD_COMMAND] & 0x80) wd_tc = 1; if (!SCSIID) { set_status (CSR_TIMEOUT, 0); return; } SCSIID->buffer[0] = 0; SCSIID->direction = 0; if (wdregs[WD_COMMAND_PHASE] <= 0x30) { wd_tc = 6; wd_dataoffset = 0; scsi_start_transfer (SCSIID, 6); for (i = 0; i < wd_tc; i++) { uae_u8 b = wdregs[3 + i]; wd_data[i] = b; scsi_send_data (SCSIID, b); wd_dataoffset++; } // command SCSIID->direction = (wdregs[WD_SOURCE_ID] & 0x20) ? 1 : -1; wdregs[WD_COMMAND_PHASE] = 0x30; wd_do_transfer_out (); wdregs[WD_COMMAND_PHASE] = 0x36; } if (wdregs[WD_COMMAND_PHASE] <= 0x41) { wd_tc = tmp_tc; wd_dataoffset = 0; wdregs[WD_COMMAND_PHASE] = 0x45; if (wd_tc == 0) { if (SCSIID->direction != 0 && SCSIID->status == 0) { wd_phase = CSR_UNEXP; if (SCSIID->direction < 0) wd_phase |= PHS_DATA_IN; else wd_phase |= PHS_DATA_OUT; set_status (wd_phase, 1); return; } } if ((wdregs[WD_CONTROL] >> 5) == 4) { if (wd_phase == (CSR_XFER_DONE | PHS_DATA_IN)) do_dma (); else if(wd_phase == (CSR_XFER_DONE | PHS_DATA_OUT)) do_dma (); } } wdregs[WD_COMMAND_PHASE] = 0x60; wdregs[WD_TARGET_LUN] = SCSIID->status; SCSIID->buffer[0] = SCSIID->status; wd_phase = CSR_SEL_XFER_DONE; set_status (wd_phase, 0); } static void wd_cmd_trans_info (void) { if (wdregs[WD_COMMAND_PHASE] == 0x47) SCSIID->buffer[0] = SCSIID->status; if (wdregs[WD_COMMAND_PHASE] == 0x20) wdregs[WD_COMMAND_PHASE] = 0x30; wd_busy = 1; wd_tc = wdregs[WD_TRANSFER_COUNT_LSB] | (wdregs[WD_TRANSFER_COUNT] << 8) | (wdregs[WD_TRANSFER_COUNT_MSB] << 16); if (wdregs[WD_COMMAND] & 0x80) wd_tc = 1; wd_dataoffset = 0; #if WD33C93_DEBUG > 0 write_log (_T("* %s transfer info phase=%02x len=%d dma=%d\n"), WD33C93, wdregs[WD_COMMAND_PHASE], wd_tc, wdregs[WD_CONTROL] >> 5); #endif scsi_start_transfer (SCSIID, wd_tc); if (wdregs[WD_COMMAND_PHASE] >= 0x36 && wdregs[WD_COMMAND_PHASE] <= 0x3f) wdregs[WD_COMMAND_PHASE] = 0x45; if ((wdregs[WD_CONTROL] >> 5) == 4) { do_dma (); if (SCSIID->direction < 0) wd_do_transfer_in (); else if (SCSIID->direction > 0) wd_do_transfer_out (); SCSIID->direction = 0; dmac_dma = 0; } } static void wd_cmd_sel_atn (void) { #if WD33C93_DEBUG > 0 write_log (_T("* %s select with atn, ID=%d\n"), WD33C93, wdregs[WD_DESTINATION_ID] & 0x7); #endif wd_phase = 0; wdregs[WD_COMMAND_PHASE] = 0; if (SCSIID) { wd_phase = CSR_SELECT; set_status (wd_phase, 1); wdregs[WD_COMMAND_PHASE] = 0x10; return; } set_status (CSR_TIMEOUT, 1000); } static void wd_cmd_reset (void) { int i; #if WD33C93_DEBUG > 0 write_log (_T("%s reset\n"), WD33C93); #endif for (i = 1; i < 0x16; i++) wdregs[i] = 0; wdregs[0x18] = 0; if (!wd33c93a) wdregs[0] &= ~(0x08 | 0x10); set_status ((wdregs[0] & 0x10) ? 1 : 0, 1); } static void wd_cmd_abort (void) { #if WD33C93_DEBUG > 0 write_log (_T("%s abort\n"), WD33C93); #endif set_status (CSR_SEL_ABORT, 0); } static int writeonlyreg (int reg) { if (reg == WD_SCSI_STATUS) return 1; return 0; } void wdscsi_put (uae_u8 d) { #if WD33C93_DEBUG > 1 if (WD33C93_DEBUG > 3 || sasr != WD_DATA) write_log (_T("W %s REG %02X (%d) = %02X (%d) PC=%08X\n"), WD33C93, sasr, sasr, d, d, M68K_GETPC); #endif if (!writeonlyreg (sasr)) wdregs[sasr] = d; if (!wd_used) { wd_used = 1; write_log (_T("%s in use\n"), WD33C93); } if (sasr == WD_COMMAND_PHASE) { #if WD33C93_DEBUG > 0 write_log (_T("%s PHASE=%02X\n"), WD33C93, d); #endif } else if (sasr == WD_DATA) { if (wd_dataoffset < sizeof wd_data) wd_data[wd_dataoffset] = wdregs[sasr]; wd_dataoffset++; if (scsi_send_data (SCSIID, wdregs[sasr])) wd_do_transfer_out (); } else if (sasr == WD_COMMAND) { switch (d & 0x7f) { case WD_CMD_RESET: wd_cmd_reset (); break; break; case WD_CMD_SEL_ATN: wd_cmd_sel_atn (); break; case WD_CMD_SEL_ATN_XFER: wd_cmd_sel_xfer_atn (); break; case WD_CMD_SEL_XFER: wd_cmd_sel_xfer (); break; case WD_CMD_TRANS_INFO: wd_cmd_trans_info (); break; default: write_log (_T("%s unimplemented/unknown command %02X\n"), WD33C93, d); break; } } incsasr(1); } void wdscsi_sasr (uae_u8 b) { sasr = b; } uae_u8 wdscsi_getauxstatus (void) { return (auxstatus & 0x80) | (wd_busy ? 0x20 : 0) | (wd_busy ? 0x01 : 0); } uae_u8 wdscsi_get (void) { uae_u8 v; #if WD33C93_DEBUG > 1 uae_u8 osasr = sasr; #endif v = wdregs[sasr]; if (sasr == WD_DATA) { int status = scsi_receive_data (SCSIID, &v); if (wd_dataoffset < sizeof wd_data) wd_data[wd_dataoffset] = v; wd_dataoffset++; wdregs[sasr] = v; if (status) wd_do_transfer_in (); } else if (sasr == WD_SCSI_STATUS) { uae_int_requested &= ~2; auxstatus &= ~0x80; cdtv_scsi_clear_int (); dmac_istr &= ~ISTR_INTS; if (wdregs[WD_COMMAND_PHASE] == 0x10) { wdregs[WD_COMMAND_PHASE] = 0x11; wd_phase = CSR_SRV_REQ | PHS_MESS_OUT; set_status (wd_phase, 1); } } incsasr (0); #if WD33C93_DEBUG > 1 if (WD33C93_DEBUG > 3 || osasr != WD_DATA) write_log (_T("R %s REG %02X (%d) = %02X (%d) PC=%08X\n"), WD33C93, osasr, osasr, v, v, M68K_GETPC); #endif return v; } static uae_u32 dmac_bget2 (uaecptr addr) { uae_u32 v = 0; if (addr < 0x40) return dmacmemory[addr]; if (addr >= ROM_OFFSET) { if (rom) { int off = addr & rom_mask; if (rombankswitcher && (addr & 0xffe0) == ROM_OFFSET) rombank = (addr & 0x02) >> 1; off += rombank * rom_size; return rom[off]; } return 0; } switch (addr) { case 0x41: v = dmac_istr; if (v) v |= ISTR_INT_P; dmac_istr &= ~0xf; break; case 0x43: v = dmac_cntr; break; case 0x80: if (old_dmac) v = (dmac_wtc >> 24) & 0xff; break; case 0x81: if (old_dmac) v = (dmac_wtc >> 16) & 0xff; break; case 0x82: if (old_dmac) v = (dmac_wtc >> 8) & 0xff; break; case 0x83: if (old_dmac) v = (dmac_wtc >> 0) & 0xff; break; case 0x91: v = wdscsi_getauxstatus (); break; case 0x93: v = wdscsi_get (); break; case 0xc1: v = 0xf8 | (1 << 0) | (1 << 1) | (1 << 2); // bits 0-2 = dip-switches break; /* XT IO */ case 0xa1: case 0xa3: case 0xa5: case 0xa7: case 0xc3: case 0xc5: case 0xc7: v = 0xff; break; case 0xe0: case 0xe1: if (!dmac_dma) dmac_start_dma (); break; case 0xe2: case 0xe3: dmac_stop_dma (); break; case 0xe4: case 0xe5: dmac_cint (); break; case 0xe8: case 0xe9: /* FLUSH (new only) */ if (!old_dmac && dmac_dma) dmac_istr |= ISTR_FE_FLG; break; } #if A2091_DEBUG > 0 write_log (_T("dmac_bget %04X=%02X PC=%08X\n"), addr, v, M68K_GETPC); #endif return v; } static void dmac_bput2 (uaecptr addr, uae_u32 b) { if (addr < 0x40) return; if (addr >= ROM_OFFSET) return; switch (addr) { case 0x43: dmac_cntr = b; if (dmac_cntr & CNTR_PREST) dmac_reset (); break; case 0x80: dmac_wtc &= 0x00ffffff; dmac_wtc |= b << 24; break; case 0x81: dmac_wtc &= 0xff00ffff; dmac_wtc |= b << 16; break; case 0x82: dmac_wtc &= 0xffff00ff; dmac_wtc |= b << 8; break; case 0x83: dmac_wtc &= 0xffffff00; dmac_wtc |= b << 0; break; case 0x84: dmac_acr &= 0x00ffffff; dmac_acr |= b << 24; break; case 0x85: dmac_acr &= 0xff00ffff; dmac_acr |= b << 16; break; case 0x86: dmac_acr &= 0xffff00ff; dmac_acr |= b << 8; break; case 0x87: dmac_acr &= 0xffffff00; dmac_acr |= b << 0; dmac_acr &= ~1; if (old_dmac) dmac_acr &= ~3; break; case 0x8e: dmac_dawr &= 0x00ff; dmac_dawr |= b << 8; break; case 0x8f: dmac_dawr &= 0xff00; dmac_dawr |= b << 0; break; case 0x91: wdscsi_sasr (b); break; case 0x93: wdscsi_put (b); break; case 0xe0: case 0xe1: if (!dmac_dma) dmac_start_dma (); break; case 0xe2: case 0xe3: dmac_stop_dma (); break; case 0xe4: case 0xe5: dmac_cint (); break; case 0xe8: case 0xe9: /* FLUSH */ dmac_istr |= ISTR_FE_FLG; break; } #if A2091_DEBUG > 0 write_log (_T("dmac_bput %04X=%02X PC=%08X\n"), addr, b & 255, M68K_GETPC); #endif } static uae_u32 REGPARAM2 dmac_lget (uaecptr addr) { uae_u32 v; #ifdef JIT special_mem |= S_READ; #endif addr &= 65535; v = dmac_bget2 (addr) << 24; v |= dmac_bget2 (addr + 1) << 16; v |= dmac_bget2 (addr + 2) << 8; v |= dmac_bget2 (addr + 3); #if A2091_DEBUG > 0 if (addr >= 0x40 && addr < ROM_OFFSET) write_log (_T("dmac_lget %08X=%08X PC=%08X\n"), addr, v, M68K_GETPC); #endif return v; } static uae_u32 REGPARAM2 dmac_wget (uaecptr addr) { uae_u32 v; #ifdef JIT special_mem |= S_READ; #endif addr &= 65535; v = dmac_bget2 (addr) << 8; v |= dmac_bget2 (addr + 1); #if A2091_DEBUG > 0 if (addr >= 0x40 && addr < ROM_OFFSET) write_log (_T("dmac_wget %08X=%04X PC=%08X\n"), addr, v, M68K_GETPC); #endif return v; } static uae_u32 REGPARAM2 dmac_bget (uaecptr addr) { uae_u32 v; #ifdef JIT special_mem |= S_READ; #endif addr &= 65535; v = dmac_bget2 (addr); if (!configured) return v; return v; } static void REGPARAM2 dmac_lput (uaecptr addr, uae_u32 l) { #ifdef JIT special_mem |= S_WRITE; #endif addr &= 65535; #if A2091_DEBUG > 0 if (addr >= 0x40 && addr < ROM_OFFSET) write_log (_T("dmac_lput %08X=%08X PC=%08X\n"), addr, l, M68K_GETPC); #endif dmac_bput2 (addr, l >> 24); dmac_bput2 (addr + 1, l >> 16); dmac_bput2 (addr + 2, l >> 8); dmac_bput2 (addr + 3, l); } static void REGPARAM2 dmac_wput (uaecptr addr, uae_u32 w) { #ifdef JIT special_mem |= S_WRITE; #endif addr &= 65535; #if A2091_DEBUG > 0 if (addr >= 0x40 && addr < ROM_OFFSET) write_log (_T("dmac_wput %04X=%04X PC=%08X\n"), addr, w & 65535, M68K_GETPC); #endif dmac_bput2 (addr, w >> 8); dmac_bput2 (addr + 1, w); } static void REGPARAM2 dmac_bput (uaecptr addr, uae_u32 b) { #ifdef JIT special_mem |= S_WRITE; #endif b &= 0xff; addr &= 65535; if (addr == 0x48 && !configured) { map_banks (&dmaca2091_bank, b, 0x10000 >> 16, 0x10000); write_log (_T("A590/A2091 Z2 autoconfigured at %02X0000\n"), b); configured = 1; expamem_next (); return; } if (addr == 0x4c && !configured) { write_log (_T("A590/A2091 DMAC AUTOCONFIG SHUT-UP!\n")); configured = 1; expamem_next (); return; } if (!configured) return; dmac_bput2 (addr, b); } static uae_u32 REGPARAM2 dmac_wgeti (uaecptr addr) { uae_u32 v = 0xffff; #ifdef JIT special_mem |= S_READ; #endif addr &= 65535; if (addr >= ROM_OFFSET) v = (rom[addr & rom_mask] << 8) | rom[(addr + 1) & rom_mask]; return v; } static uae_u32 REGPARAM2 dmac_lgeti (uaecptr addr) { uae_u32 v; #ifdef JIT special_mem |= S_READ; #endif addr &= 65535; v = (dmac_wgeti (addr) << 16) | dmac_wgeti (addr + 2); return v; } static int REGPARAM2 dmac_check (uaecptr addr, uae_u32 size) { return 1; } static uae_u8 *REGPARAM2 dmac_xlate (uaecptr addr) { addr &= rom_mask; addr += rombank * rom_size; return rom + addr; } addrbank dmaca2091_bank = { dmac_lget, dmac_wget, dmac_bget, dmac_lput, dmac_wput, dmac_bput, dmac_xlate, dmac_check, NULL, _T("A2091/A590"), dmac_lgeti, dmac_wgeti, ABFLAG_IO }; static void dmacreg_write (uae_u32 *reg, int addr, uae_u32 val, int size) { addr = (size - 1) - addr; (*reg) &= ~(0xff << (addr * 8)); (*reg) |= (val & 0xff) << (addr * 8); } static uae_u32 dmacreg_read (uae_u32 val, int addr, int size) { addr = (size - 1) - addr; return (val >> (addr * 8)) & 0xff; } static void mbdmac_write (uae_u32 addr, uae_u32 val, int mode) { if (currprefs.cs_mbdmac > 1) return; #if A3000_DEBUG > 1 write_log (_T("DMAC_WRITE %08X=%02X PC=%08X\n"), addr, val & 0xff, M68K_GETPC); #endif addr &= 0xffff; switch (addr) { case 0x02: case 0x03: dmacreg_write (&dmac_dawr, addr - 0x02, val, 2); break; case 0x04: case 0x05: case 0x06: case 0x07: dmacreg_write (&dmac_wtc, addr - 0x04, val, 4); break; case 0x0a: case 0x0b: dmacreg_write (&dmac_cntr, addr - 0x0a, val, 2); if (dmac_cntr & SCNTR_PREST) dmac_reset (); break; case 0x0c: case 0x0d: case 0x0e: case 0x0f: dmacreg_write (&dmac_acr, addr - 0x0c, val, 4); break; case 0x12: case 0x13: if (!dmac_dma) dmac_start_dma (); break; case 0x16: case 0x17: /* FLUSH */ dmac_istr |= ISTR_FE_FLG; break; case 0x1a: case 0x1b: dmac_cint(); break; case 0x1e: case 0x1f: /* ISTR */ break; case 0x3e: case 0x3f: dmac_stop_dma (); break; case 0x41: if (mode & 0x10) sasr = val; break; case 0x49: sasr = val; break; case 0x43: if (mode & 0x10) wdscsi_put (val); else sasr = val; break; } } static uae_u32 mbdmac_read (uae_u32 addr, int mode) { #if A3000_DEBUG > 1 uae_u32 vaddr = addr; #endif uae_u32 v = 0xffffffff; if (currprefs.cs_mbdmac > 1) return 0; addr &= 0xffff; switch (addr) { case 0x02: case 0x03: v = dmacreg_read (dmac_dawr, addr - 0x02, 2); break; case 0x04: case 0x05: case 0x06: case 0x07: v = 0xff; break; case 0x0a: case 0x0b: v = dmacreg_read (dmac_cntr, addr - 0x0a, 2); break; case 0x0c: case 0x0d: case 0x0e: case 0x0f: v = dmacreg_read (dmac_acr, addr - 0x0c, 4); break; case 0x12: case 0x13: if (!dmac_dma) dmac_start_dma (); v = 0; break; case 0x1a: case 0x1b: dmac_cint (); v = 0; break;; case 0x1e: case 0x1f: v = dmacreg_read (dmac_istr, addr - 0x1e, 2); if (v & ISTR_INTS) v |= ISTR_INT_P; dmac_istr &= ~15; break; case 0x3e: case 0x3f: dmac_stop_dma (); v = 0; break; case 0x41: case 0x49: v = wdscsi_getauxstatus (); break; case 0x43: v = wdscsi_get (); break; } #if A3000_DEBUG > 1 write_log (_T("DMAC_READ %08X=%02X PC=%X\n"), vaddr, v & 0xff, M68K_GETPC); #endif return v; } static uae_u32 REGPARAM3 mbdmac_lget (uaecptr) REGPARAM; static uae_u32 REGPARAM3 mbdmac_wget (uaecptr) REGPARAM; static uae_u32 REGPARAM3 mbdmac_bget (uaecptr) REGPARAM; static void REGPARAM3 mbdmac_lput (uaecptr, uae_u32) REGPARAM; static void REGPARAM3 mbdmac_wput (uaecptr, uae_u32) REGPARAM; static void REGPARAM3 mbdmac_bput (uaecptr, uae_u32) REGPARAM; static uae_u32 REGPARAM2 mbdmac_lget (uaecptr addr) { uae_u32 v; #ifdef JIT special_mem |= S_READ; #endif v = mbdmac_read (addr, 0x40 | 0) << 24; v |= mbdmac_read (addr + 1, 0x40 | 1) << 16; v |= mbdmac_read (addr + 2, 0x40 | 2) << 8; v |= mbdmac_read (addr + 3, 0x40 | 3); return v; } static uae_u32 REGPARAM2 mbdmac_wget (uaecptr addr) { uae_u32 v; #ifdef JIT special_mem |= S_READ; #endif v = mbdmac_read (addr, 0x40 | 0) << 8; v |= mbdmac_read (addr + 1, 0x40 | 1) << 0; return v; } static uae_u32 REGPARAM2 mbdmac_bget (uaecptr addr) { #ifdef JIT special_mem |= S_READ; #endif return mbdmac_read (addr, 0x10); } static void REGPARAM2 mbdmac_lput (uaecptr addr, uae_u32 l) { #ifdef JIT special_mem |= S_WRITE; #endif mbdmac_write (addr + 0, l >> 24, 0x40 | 0); mbdmac_write (addr + 1, l >> 16, 0x40 | 1); mbdmac_write (addr + 2, l >> 8, 0x40 | 2); mbdmac_write (addr + 3, l, 0x40 | 3); } static void REGPARAM2 mbdmac_wput (uaecptr addr, uae_u32 w) { #ifdef JIT special_mem |= S_WRITE; #endif mbdmac_write (addr + 0, w >> 8, 0x20 | 0); mbdmac_write (addr + 1, w >> 0, 0x20 | 1); } static void REGPARAM2 mbdmac_bput (uaecptr addr, uae_u32 b) { #ifdef JIT special_mem |= S_WRITE; #endif mbdmac_write (addr, b, 0x10 | 0); } addrbank mbdmac_a3000_bank = { mbdmac_lget, mbdmac_wget, mbdmac_bget, mbdmac_lput, mbdmac_wput, mbdmac_bput, default_xlate, default_check, NULL, _T("A3000 DMAC"), dummy_lgeti, dummy_wgeti, ABFLAG_IO }; static void ew (int addr, uae_u32 value) { addr &= 0xffff; if (addr == 00 || addr == 02 || addr == 0x40 || addr == 0x42) { dmacmemory[addr] = (value & 0xf0); dmacmemory[addr + 2] = (value & 0x0f) << 4; } else { dmacmemory[addr] = ~(value & 0xf0); dmacmemory[addr + 2] = ~((value & 0x0f) << 4); } } static void freescsi (struct scsi_data *sd) { if (!sd) return; hdf_hd_close (sd->hfd); scsi_free (sd); } int addscsi (int ch, const TCHAR *path, int blocksize, int readonly, const TCHAR *devname, int sectors, int surfaces, int reserved, int bootpri, const TCHAR *filesys, int scsi_level) { struct hd_hardfiledata *hfd; freescsi (scsis[ch]); scsis[ch] = NULL; hfd = xcalloc (struct hd_hardfiledata, 1); if (!hdf_hd_open (hfd, path, blocksize, readonly, devname, 0, sectors, surfaces, reserved, bootpri, filesys, 0, 0, 0)) return 0; hfd->ansi_version = scsi_level; scsis[ch] = scsi_alloc (ch, hfd); return scsis[ch] ? 1 : 0; } static void freenativescsi (void) { int i; for (i = 0; i < 7; i++) { freescsi (scsis[i]); scsis[i] = NULL; } } static void addnativescsi (void) { int i, j; int devices[MAX_TOTAL_SCSI_DEVICES]; int types[MAX_TOTAL_SCSI_DEVICES]; struct device_info dis[MAX_TOTAL_SCSI_DEVICES]; freenativescsi (); i = 0; while (i < MAX_TOTAL_SCSI_DEVICES) { types[i] = -1; devices[i] = -1; if (sys_command_open (i)) { if (sys_command_info (i, &dis[i], 0)) { devices[i] = i; types[i] = 100 - i; if (dis[i].type == INQ_ROMD) types[i] = 1000 - i; } sys_command_close (i); } i++; } i = 0; while (devices[i] >= 0) { j = i + 1; while (devices[j] >= 0) { if (types[i] > types[j]) { int tmp = types[i]; types[i] = types[j]; types[j] = tmp; } j++; } i++; } i = 0; j = 0; while (devices[i] >= 0 && j < 7) { if (scsis[j] == NULL) { scsis[j] = scsi_alloc_native(j, devices[i]); write_log (_T("SCSI: %d:'%s'\n"), j, dis[i].label); i++; } j++; } } int a3000_add_scsi_unit (int ch, const TCHAR *path, int blocksize, int readonly, const TCHAR *devname, int sectors, int surfaces, int reserved, int bootpri, const TCHAR *filesys) { return addscsi (ch, path, blocksize, readonly, devname, sectors, surfaces, reserved, bootpri, filesys, 2); } void a3000scsi_reset (void) { map_banks (&mbdmac_a3000_bank, 0xDD, 1, 0); } void a3000scsi_free (void) { freenativescsi (); } int a2091_add_scsi_unit (int ch, const TCHAR *path, int blocksize, int readonly, const TCHAR *devname, int sectors, int surfaces, int reserved, int bootpri, const TCHAR *filesys) { return addscsi (ch, path, blocksize, readonly, devname, sectors, surfaces, reserved, bootpri, filesys, 1); } void a2091_free (void) { freenativescsi (); xfree (rom); rom = NULL; } void a2091_reset (void) { configured = 0; wd_used = 0; superdmac = 0; superdmac = currprefs.cs_mbdmac ? 1 : 0; if (currprefs.scsi == 2) addnativescsi (); } void a2091_init (void) { int roms[5]; struct romlist *rl; struct romdata *rd; configured = 0; memset (dmacmemory, 0xff, 100); ew (0x00, 0xc0 | 0x01 | 0x10); /* A590/A2091 hardware id */ ew (0x04, old_dmac ? 0x02 : 0x03); /* commodore's manufacturer id */ ew (0x10, 0x02); ew (0x14, 0x02); /* rom vector */ ew (0x28, ROM_VECTOR >> 8); ew (0x2c, ROM_VECTOR); ew (0x18, 0x00); /* ser.no. Byte 0 */ ew (0x1c, 0x00); /* ser.no. Byte 1 */ ew (0x20, 0x00); /* ser.no. Byte 2 */ ew (0x24, 0x00); /* ser.no. Byte 3 */ roms[0] = 55; roms[1] = 54; roms[2] = 53; roms[3] = 56; roms[4] = -1; rombankswitcher = 0; rombank = 0; rl = getromlistbyids (roms); if (rl) { struct zfile *z; rd = rl->rd; z = read_rom (&rd); if (z) { int slotsize = 65536; write_log (_T("A590/A2091 BOOT ROM %d.%d\n"), rd->ver, rd->rev); rom_size = rd->size; rom = xmalloc (uae_u8, slotsize); if (rl->rd->id == 56) rombankswitcher = 1; zfile_fread (rom, rom_size, 1, z); zfile_fclose (z); for (int i = 1; i < slotsize / rom_size; i++) memcpy (rom + i * rom_size, rom, rom_size); rom_mask = rom_size - 1; } } else { romwarning (roms); } map_banks (&dmaca2091_bank, 0xe80000 >> 16, 0x10000 >> 16, 0x10000); } fs-uae-2.2.3+dfsg/src/aros.rom.cpp0000644000175000017500001426016212162366655017124 0ustar glaubitzglaubitzunsigned char arosrom[] = { 0x1f, 0x8b, 0x08, 0x08, 0xcb, 0xd8, 0xd0, 0x4e, 0x02, 0x03, 0x61, 0x72, 0x6f, 0x73, 0x2e, 0x72, 0x6f, 0x6d, 0x00, 0xdc, 0xfd, 0x0f, 0x7c, 0x53, 0xc7, 0x95, 0x37, 0x0e, 0x1f, 0x5d, 0xcb, 0x42, 0x18, 0xc5, 0x08, 0xc7, 0x71, 0x55, 0xd7, 0x4b, 0x6f, 0x54, 0xa1, 0x08, 0x59, 0x58, 0x42, 0x31, 0x8e, 0xeb, 0x78, 0x8d, 0x24, 0xcb, 0x46, 0x16, 0xc6, 0xeb, 0xc8, 0x34, 0x65, 0xb3, 0x34, 0xbd, 0x21, 0x20, 0x81, 0xf1, 0xbf, 0xba, 0x2e, 0xcb, 0xf2, 0xf8, 0xa1, 0xf2, 0x1f, 0x88, 0x21, 0x34, 0x10, 0x20, 0x2c, 0x9b, 0x66, 0xfb, 0xcb, 0xd3, 0x27, 0xbf, 0x96, 0xd2, 0xfc, 0x71, 0x08, 0x9b, 0x52, 0x4a, 0xf3, 0x38, 0x84, 0xe6, 0x21, 0x29, 0xcd, 0xe3, 0x38, 0x94, 0xa5, 0x2c, 0x9b, 0x38, 0x2c, 0x4b, 0x1c, 0xfe, 0x24, 0x34, 0xa5, 0x59, 0x16, 0x1c, 0xee, 0xfb, 0x3d, 0x73, 0xaf, 0x6c, 0x19, 0x48, 0xdb, 0xf4, 0x79, 0x9e, 0xcf, 0xfb, 0x7e, 0x5e, 0xc3, 0xd5, 0xbd, 0x77, 0x66, 0xee, 0xcc, 0x99, 0x33, 0x33, 0x67, 0xce, 0x99, 0x39, 0xe7, 0xcc, 0xb4, 0xdc, 0xba, 0xff, 0xa4, 0xcb, 0x24, 0x11, 0xa9, 0x2a, 0x15, 0x51, 0x16, 0x5f, 0x2a, 0xfe, 0x82, 0xb1, 0xbf, 0x6a, 0x90, 0xab, 0x16, 0x2d, 0x94, 0xab, 0x56, 0x77, 0x2c, 0x6b, 0xf9, 0xe6, 0x8a, 0xd6, 0x16, 0xb9, 0x76, 0xc5, 0x92, 0xf6, 0x07, 0xda, 0x57, 0x2c, 0xfb, 0x26, 0x55, 0xb6, 0xb6, 0xfd, 0x5d, 0xfb, 0x8a, 0xc4, 0xf2, 0x0e, 0xf9, 0x47, 0xb2, 0xdf, 0x37, 0x7b, 0xb6, 0x4c, 0x0b, 0x97, 0x2f, 0x93, 0xc5, 0x27, 0xe1, 0x65, 0xab, 0x96, 0x35, 0xb5, 0xb6, 0x35, 0x2f, 0x6b, 0xe9, 0x90, 0x17, 0x2e, 0x7b, 0xa0, 0xd9, 0x23, 0x53, 0xb0, 0xa9, 0x49, 0x8e, 0x71, 0xea, 0x6f, 0xca, 0xb1, 0x65, 0xdf, 0x5c, 0xd6, 0xbe, 0x6a, 0xd9, 0xd2, 0x22, 0x9a, 0xfd, 0xe5, 0xa2, 0xd9, 0xb3, 0x8b, 0xf8, 0x63, 0xfa, 0x3f, 0xfa, 0x17, 0x1d, 0xa5, 0x61, 0x1a, 0xa4, 0xe1, 0x69, 0x87, 0xbb, 0x66, 0x4e, 0x76, 0xe1, 0xf9, 0x22, 0x0d, 0x1b, 0x32, 0x71, 0x3d, 0xa2, 0xc5, 0xaf, 0x5c, 0xf6, 0x77, 0xcd, 0x0f, 0xb4, 0x15, 0x35, 0x89, 0xba, 0xfc, 0x1d, 0x39, 0xee, 0xad, 0x8a, 0x95, 0xc9, 0x13, 0x03, 0xe5, 0x62, 0x00, 0x26, 0xbb, 0xc6, 0x21, 0x9c, 0x79, 0x4b, 0xd6, 0xff, 0x09, 0xd0, 0x86, 0x27, 0x99, 0x69, 0xd8, 0x74, 0x1a, 0xd7, 0x49, 0x5c, 0xc3, 0x34, 0x6c, 0x45, 0x98, 0x79, 0x2f, 0x0d, 0x67, 0xcb, 0xb8, 0x0f, 0x30, 0xd6, 0x91, 0x2a, 0x04, 0x58, 0x1b, 0xf5, 0xf4, 0xe5, 0x37, 0xc9, 0xc5, 0x70, 0xdd, 0xbb, 0xf5, 0x86, 0x78, 0x2b, 0x4d, 0x4b, 0x7b, 0x37, 0xdf, 0x10, 0x6f, 0xa6, 0xc9, 0x13, 0xbe, 0x37, 0x93, 0xed, 0x86, 0xef, 0x39, 0x8d, 0x8d, 0x3e, 0x6f, 0x90, 0x24, 0xa3, 0x64, 0x34, 0x9a, 0x6f, 0x52, 0xbe, 0xf5, 0xba, 0xf2, 0xcc, 0xd7, 0xe5, 0x9f, 0xca, 0x57, 0xc4, 0xeb, 0xf9, 0x18, 0x33, 0x8c, 0xc6, 0x49, 0xdf, 0xf5, 0xad, 0xfd, 0xee, 0x6c, 0xdf, 0x5a, 0xf1, 0x38, 0x1b, 0x8f, 0xb3, 0xb5, 0x47, 0x3f, 0x1e, 0xfd, 0xda, 0xe3, 0x9d, 0x78, 0xbc, 0x53, 0x7b, 0x2c, 0xc6, 0x63, 0xb1, 0xf6, 0x38, 0x07, 0x8f, 0x73, 0xb4, 0xc7, 0x12, 0x3c, 0x96, 0x68, 0x8f, 0x77, 0xe1, 0xf1, 0x2e, 0xed, 0xb1, 0x14, 0x8f, 0xa5, 0xda, 0xe3, 0x97, 0xf1, 0xf8, 0xe5, 0xb5, 0x28, 0xd0, 0xfc, 0x5d, 0x3f, 0x8a, 0xbb, 0xd3, 0xa7, 0x3f, 0xa3, 0xbc, 0x3b, 0x67, 0x6b, 0xcf, 0xc5, 0x08, 0x9f, 0xa3, 0x87, 0x17, 0x23, 0x7c, 0x4e, 0x2a, 0x1c, 0x80, 0xcc, 0xf1, 0xeb, 0xcf, 0x80, 0x64, 0xce, 0x9d, 0xfa, 0x33, 0x40, 0x99, 0x53, 0xac, 0x3f, 0x03, 0x96, 0x39, 0x73, 0xd6, 0xa2, 0x4e, 0xa6, 0xef, 0x06, 0xbf, 0xbb, 0x50, 0xdc, 0x43, 0xdf, 0x6d, 0x90, 0x8c, 0x19, 0xa6, 0xef, 0x86, 0xbf, 0x2b, 0x07, 0xc5, 0x43, 0xe5, 0x77, 0xe5, 0x80, 0xc1, 0x28, 0x65, 0x4e, 0xfe, 0xee, 0x7d, 0x19, 0xd2, 0x77, 0xe7, 0xae, 0xa5, 0x61, 0x63, 0x16, 0xae, 0x28, 0x0d, 0x67, 0xf2, 0x15, 0xc3, 0x75, 0x1f, 0xae, 0xc7, 0xd1, 0x17, 0xf8, 0xfa, 0x7e, 0x46, 0xea, 0x4f, 0xd2, 0xff, 0x65, 0x48, 0xda, 0x25, 0x19, 0x48, 0x5c, 0x1c, 0x25, 0x49, 0x22, 0xce, 0x40, 0xfc, 0x2e, 0x49, 0x06, 0xb4, 0x06, 0xbf, 0x5d, 0xd3, 0xfa, 0x4e, 0xaa, 0x05, 0xb4, 0x7f, 0x64, 0xd0, 0x2e, 0x83, 0x94, 0x21, 0x2e, 0x8e, 0x32, 0x18, 0x44, 0x1c, 0x67, 0xc2, 0x6f, 0x5c, 0x02, 0xbf, 0x19, 0x33, 0x4d, 0x93, 0x0c, 0x63, 0x00, 0x64, 0x70, 0xaa, 0x8c, 0x49, 0x63, 0x7f, 0x5a, 0xe0, 0xd8, 0xab, 0xc1, 0x30, 0x49, 0xe4, 0x35, 0x16, 0xab, 0x75, 0x89, 0xb5, 0xca, 0x5a, 0xe5, 0xa7, 0xff, 0xed, 0xf6, 0xd9, 0x7b, 0x02, 0x01, 0xff, 0x0b, 0xff, 0xfd, 0x4b, 0x77, 0x1e, 0x78, 0xca, 0x51, 0xfc, 0xf3, 0x9f, 0xcf, 0x98, 0xf3, 0xd2, 0x4b, 0xf7, 0x97, 0xfc, 0xc7, 0x7f, 0x71, 0xde, 0xf5, 0x37, 0x7f, 0xe3, 0x2e, 0xfd, 0xda, 0xd7, 0x5c, 0x5f, 0xfe, 0xaf, 0xff, 0x75, 0xa6, 0xef, 0xeb, 0xb3, 0xbe, 0x3e, 0xab, 0xf0, 0x2f, 0x0b, 0xff, 0xb2, 0x73, 0x71, 0xe7, 0x62, 0xfe, 0xd6, 0x87, 0xbf, 0x7b, 0xbe, 0x71, 0xcf, 0x37, 0xbe, 0xfa, 0xb7, 0x5f, 0xfd, 0xdb, 0xaa, 0x65, 0x55, 0xcb, 0x62, 0xed, 0xb1, 0xf6, 0x85, 0x1d, 0x0b, 0x3b, 0xfe, 0xfa, 0xef, 0xfe, 0xfa, 0xef, 0xbe, 0xf2, 0xad, 0xaf, 0x7c, 0xab, 0x66, 0x45, 0xcd, 0x8a, 0xbf, 0x6a, 0xfd, 0xab, 0xd6, 0xfa, 0xb6, 0xfa, 0xb6, 0xff, 0xf2, 0x37, 0xff, 0xe5, 0x6f, 0xfe, 0xeb, 0xd7, 0xfe, 0xeb, 0xd7, 0xf8, 0xbb, 0xd9, 0xf8, 0xf3, 0xe3, 0xef, 0x4e, 0xfc, 0x05, 0x1f, 0x08, 0x3e, 0xd0, 0xf0, 0xcd, 0x86, 0x6f, 0x86, 0x97, 0x86, 0x97, 0x56, 0xc7, 0xab, 0xe3, 0xf3, 0x12, 0xf3, 0x12, 0x91, 0xe5, 0x91, 0xe5, 0xd1, 0xc6, 0x68, 0xe3, 0xfc, 0x95, 0xf3, 0x57, 0xd6, 0x36, 0xd5, 0x36, 0x95, 0xdd, 0x5d, 0x76, 0xb7, 0xfd, 0x0e, 0xfb, 0x1d, 0xa9, 0x72, 0x8b, 0xf1, 0x37, 0x07, 0x7f, 0x25, 0xf8, 0xab, 0x28, 0xaf, 0x28, 0xbf, 0x6f, 0xcd, 0x7d, 0x6b, 0x16, 0xad, 0x5e, 0xb4, 0xba, 0xf2, 0xc1, 0xca, 0x07, 0xef, 0x5d, 0x75, 0xef, 0xaa, 0xd0, 0x92, 0xd0, 0x92, 0xba, 0x96, 0xba, 0x96, 0x05, 0xcd, 0x0b, 0x9a, 0xcb, 0x3d, 0xe5, 0x9e, 0x8a, 0xa2, 0x8a, 0xa2, 0xb9, 0xde, 0xb9, 0x5e, 0xfe, 0xb6, 0x08, 0x7f, 0x77, 0xe1, 0xaf, 0x14, 0x7f, 0x5f, 0xc6, 0x1f, 0x28, 0x68, 0x86, 0x6a, 0xb8, 0x46, 0xea, 0xff, 0x50, 0x3f, 0xc4, 0xbf, 0xff, 0x20, 0x0a, 0x92, 0x51, 0xa2, 0x60, 0x30, 0xc8, 0x57, 0xfa, 0x1f, 0xb7, 0x0b, 0x05, 0x92, 0x13, 0xfe, 0x42, 0xc1, 0x70, 0x78, 0x62, 0x88, 0x8c, 0x3f, 0x33, 0xfe, 0x68, 0x38, 0xe3, 0xfe, 0x5b, 0xf0, 0x47, 0x94, 0x85, 0xeb, 0xbb, 0x5f, 0xf8, 0x36, 0xfe, 0x68, 0x58, 0xba, 0x84, 0x70, 0xd0, 0x88, 0x0c, 0xcb, 0x2c, 0xfc, 0xe1, 0x1d, 0x34, 0x25, 0xa3, 0x1c, 0x57, 0x18, 0xd7, 0x57, 0x70, 0xd5, 0x22, 0xac, 0x05, 0xd7, 0xdf, 0xe1, 0xea, 0xc5, 0xb5, 0x19, 0x17, 0xfa, 0x99, 0xf4, 0xff, 0xe2, 0xea, 0xc7, 0xf5, 0x33, 0x5c, 0xaf, 0xe2, 0x7a, 0xf3, 0x6f, 0x5c, 0x7f, 0xe3, 0xfa, 0xda, 0xcc, 0xaf, 0xcd, 0xf4, 0xe2, 0xcf, 0x8d, 0xbf, 0x42, 0xfc, 0xe1, 0xfb, 0x65, 0x7f, 0x3e, 0x9d, 0xcb, 0xb0, 0x21, 0xdf, 0x11, 0xdc, 0x1d, 0xb8, 0x7c, 0xff, 0xbb, 0x64, 0x73, 0xde, 0xef, 0xa8, 0x33, 0x8d, 0x72, 0xb7, 0x2f, 0xfb, 0x66, 0xeb, 0xb7, 0xda, 0x1f, 0x5c, 0x46, 0xdf, 0xfa, 0xe6, 0x03, 0x7c, 0xcd, 0xbe, 0x09, 0x85, 0x1c, 0x36, 0x47, 0xf8, 0xa1, 0x8d, 0xea, 0xbe, 0xc5, 0x97, 0x37, 0xbb, 0xa1, 0x85, 0x64, 0x6f, 0x76, 0xe8, 0x87, 0x91, 0xd5, 0xaa, 0x1a, 0x01, 0x46, 0x0c, 0x4b, 0xea, 0x7e, 0x4a, 0xea, 0x12, 0xeb, 0x5f, 0x7d, 0x48, 0xd6, 0x36, 0xf2, 0x7c, 0x9d, 0xd3, 0x78, 0xb3, 0x23, 0xab, 0xc9, 0x20, 0x2e, 0x4e, 0x71, 0xdf, 0x78, 0x8a, 0x68, 0x32, 0x61, 0x89, 0x21, 0x07, 0xa9, 0x08, 0xad, 0x9a, 0xad, 0x48, 0xff, 0xf8, 0x86, 0x9c, 0xcd, 0xdf, 0x44, 0xde, 0x23, 0xbf, 0x23, 0x30, 0xa7, 0x13, 0xb3, 0x67, 0xde, 0x84, 0x6f, 0xdd, 0xf3, 0xfe, 0x93, 0xd4, 0x07, 0x9e, 0xa8, 0xdb, 0x86, 0xaf, 0x2d, 0xf8, 0x3a, 0x94, 0x56, 0x72, 0x59, 0xdd, 0x36, 0x6f, 0x56, 0x7a, 0x6a, 0xd3, 0x20, 0xa7, 0x5e, 0x62, 0x15, 0xa9, 0x0b, 0xa2, 0xc9, 0xf8, 0x22, 0x6f, 0x56, 0x5a, 0xfa, 0x98, 0x08, 0xb7, 0x72, 0x88, 0x9e, 0x7b, 0x28, 0x95, 0x7b, 0x5a, 0x2a, 0x7f, 0xdd, 0xb6, 0x76, 0xf2, 0xbb, 0x29, 0xa7, 0x8d, 0x7c, 0x6e, 0xb2, 0xda, 0xa3, 0xdb, 0x06, 0x06, 0xbb, 0x3c, 0x7f, 0x07, 0x24, 0x18, 0xeb, 0x9e, 0x55, 0x8b, 0x90, 0x83, 0xed, 0xb1, 0xd7, 0xe5, 0xac, 0xda, 0x77, 0x6a, 0x05, 0x3e, 0xbc, 0x59, 0x6d, 0x45, 0xf6, 0x72, 0xa6, 0x04, 0x63, 0x69, 0xca, 0x1c, 0x01, 0x40, 0xea, 0x9b, 0xd1, 0x4a, 0x16, 0xca, 0x0a, 0xfe, 0x27, 0x5a, 0xae, 0xb1, 0xf2, 0x2c, 0x65, 0xb7, 0xc9, 0xa9, 0x14, 0x9f, 0x6c, 0xf1, 0x75, 0x52, 0xf1, 0x9b, 0x1f, 0x72, 0xee, 0x63, 0x5f, 0x65, 0xc9, 0x59, 0x8e, 0xaf, 0x8f, 0xe1, 0xa2, 0x95, 0xac, 0x33, 0x3a, 0xf9, 0x4b, 0xb2, 0xdf, 0xd6, 0x09, 0xfa, 0x5f, 0xc4, 0x6f, 0xa6, 0xdd, 0xe4, 0x0b, 0x9e, 0xa5, 0xe2, 0x19, 0x11, 0x2a, 0x0f, 0xed, 0xa6, 0x52, 0x3c, 0x97, 0xe2, 0xb9, 0x18, 0xb9, 0x3b, 0x53, 0xf9, 0x5c, 0xcb, 0x07, 0x4e, 0x18, 0x17, 0xfb, 0xe7, 0x5d, 0x51, 0x97, 0xd4, 0x6d, 0xab, 0xdf, 0x0c, 0x58, 0xac, 0x7a, 0xd8, 0x4b, 0xfc, 0xde, 0x66, 0x50, 0xa4, 0x36, 0x4a, 0xc1, 0x2f, 0x17, 0x91, 0x9d, 0x4b, 0xad, 0xfb, 0xc6, 0x5f, 0x7d, 0xa8, 0x26, 0x23, 0xef, 0xcd, 0xad, 0xf0, 0x22, 0x47, 0x6f, 0x80, 0x4a, 0x9d, 0x35, 0xde, 0x20, 0x2d, 0xde, 0x3b, 0x4a, 0x14, 0x37, 0x3a, 0x5a, 0xc8, 0x5e, 0xda, 0x49, 0xae, 0xdf, 0x9c, 0x25, 0xab, 0xbb, 0x91, 0x72, 0xe7, 0x5f, 0xa0, 0x27, 0x83, 0x1f, 0xd2, 0xa6, 0xca, 0x0f, 0xa9, 0x69, 0xc1, 0x87, 0xf4, 0x84, 0x62, 0xac, 0x3f, 0x5e, 0xff, 0x9b, 0x9f, 0x1f, 0x8e, 0x5f, 0x6e, 0xbf, 0x63, 0x55, 0x60, 0xdb, 0x6b, 0x6b, 0xd0, 0x63, 0xac, 0x0e, 0x79, 0x59, 0xc7, 0xd7, 0xab, 0xa5, 0x43, 0xc9, 0xd5, 0xf2, 0xbe, 0xee, 0x38, 0xd1, 0xce, 0xce, 0x49, 0x03, 0xeb, 0x1d, 0xf4, 0xfe, 0x46, 0x53, 0x37, 0xf0, 0xfc, 0xbd, 0x05, 0xc0, 0x8c, 0x34, 0x7d, 0x35, 0xd9, 0x4a, 0xcc, 0x74, 0xbc, 0xf7, 0x78, 0x9f, 0x37, 0x4a, 0x3e, 0x4f, 0x48, 0x59, 0x6e, 0xc1, 0x7c, 0x17, 0xbf, 0xbf, 0xc0, 0x45, 0x86, 0xb6, 0xa9, 0x03, 0xeb, 0x47, 0xb2, 0x73, 0x8b, 0xc8, 0xb0, 0x3f, 0xd9, 0x9c, 0x3d, 0x5d, 0xaa, 0x42, 0x89, 0x6f, 0xf8, 0xcd, 0xb4, 0x77, 0x52, 0x3c, 0x7f, 0xba, 0xe1, 0xed, 0x0c, 0xbc, 0x3f, 0x71, 0xdb, 0x43, 0x66, 0xe2, 0xf0, 0xdb, 0xba, 0xcd, 0xb4, 0x3f, 0xd9, 0x24, 0xb9, 0x29, 0x6a, 0x4a, 0xc8, 0x2f, 0x0c, 0x34, 0x67, 0x15, 0x48, 0x47, 0xee, 0x32, 0x37, 0xed, 0x35, 0xc5, 0x73, 0x0a, 0x0c, 0x27, 0x33, 0xbe, 0xb8, 0xde, 0xdc, 0xf9, 0xc5, 0x6e, 0x73, 0xd3, 0x0b, 0x03, 0x4d, 0x92, 0x3d, 0xb0, 0xb0, 0x6f, 0xe1, 0x23, 0xfb, 0xfa, 0xe2, 0xdb, 0x81, 0x67, 0x5f, 0x43, 0x57, 0x23, 0xa9, 0x31, 0x57, 0x0c, 0xf5, 0x32, 0xae, 0x0d, 0xbc, 0xd4, 0x13, 0xb7, 0xd6, 0x9c, 0xa7, 0xc0, 0xfc, 0x0b, 0x06, 0x6a, 0x9f, 0xbb, 0x8a, 0x14, 0x52, 0x4b, 0xe4, 0xcc, 0x58, 0x12, 0x18, 0xa9, 0x8d, 0xac, 0x20, 0x83, 0x97, 0xb8, 0x37, 0x3f, 0x68, 0xad, 0xdf, 0x8c, 0x10, 0xc5, 0xdb, 0x4a, 0x8b, 0xa9, 0x5c, 0xa1, 0x8c, 0x33, 0x72, 0x2b, 0x15, 0x4f, 0xb7, 0xfa, 0x81, 0xa3, 0xb7, 0x80, 0x23, 0x6f, 0x0d, 0x85, 0x5d, 0xc0, 0x13, 0x72, 0x7a, 0xd2, 0x5b, 0x4b, 0x91, 0x0e, 0x5a, 0xad, 0x76, 0xd2, 0x2a, 0x42, 0xbb, 0xdf, 0xd1, 0x1e, 0x00, 0x6e, 0x26, 0xe1, 0xeb, 0xfa, 0x36, 0x65, 0xe0, 0x39, 0xaa, 0xc7, 0xd3, 0x52, 0x4f, 0x95, 0xb7, 0x9a, 0x96, 0xcb, 0xe6, 0x86, 0xe7, 0x28, 0x8c, 0x9c, 0xc2, 0x6b, 0x28, 0xdf, 0xea, 0xad, 0xa2, 0xc0, 0x5f, 0x3f, 0x47, 0x11, 0x7b, 0x2b, 0x45, 0xe4, 0x7b, 0xa2, 0x99, 0xcd, 0x24, 0x1d, 0x35, 0x67, 0x52, 0x66, 0x82, 0x68, 0x68, 0x8d, 0x61, 0x7f, 0x0f, 0xde, 0x0f, 0x75, 0x4e, 0x3a, 0xf2, 0x1c, 0x05, 0xdc, 0xa6, 0xf7, 0xbf, 0xe3, 0xae, 0xfa, 0x97, 0x51, 0xc6, 0x6a, 0xe5, 0x08, 0x19, 0x6a, 0x04, 0x66, 0x91, 0x47, 0xf1, 0x72, 0x3a, 0xb1, 0xee, 0xc4, 0x06, 0xe4, 0xb4, 0xd0, 0x4d, 0x27, 0xba, 0x38, 0x47, 0x8f, 0x97, 0x96, 0xbb, 0x02, 0x4a, 0xa7, 0x75, 0xa6, 0xaa, 0x26, 0xcc, 0x16, 0x8c, 0xf1, 0x78, 0x93, 0x52, 0xf0, 0xd2, 0xb4, 0x78, 0x7c, 0x0d, 0x95, 0xdd, 0x26, 0x1b, 0x07, 0xd6, 0xed, 0x4f, 0xc6, 0xef, 0x43, 0xaa, 0x80, 0x8b, 0x3a, 0x68, 0x95, 0x41, 0xa9, 0x03, 0xb4, 0xd3, 0x06, 0xfb, 0x00, 0xa5, 0x6f, 0x0d, 0xa1, 0x47, 0x2c, 0x47, 0xff, 0xf0, 0x00, 0x46, 0x5f, 0xec, 0x39, 0xf2, 0xbd, 0x64, 0x8b, 0x4f, 0xc7, 0x38, 0xb9, 0x2d, 0xda, 0x93, 0xb0, 0xec, 0x5d, 0xb7, 0x2c, 0xc7, 0x6e, 0x3c, 0x98, 0xec, 0xef, 0x8a, 0x67, 0xf1, 0xf7, 0x8e, 0x4c, 0x17, 0xbe, 0x8f, 0xad, 0xdb, 0xff, 0x1c, 0x29, 0xcd, 0x6f, 0xd8, 0x51, 0x2e, 0xbe, 0xf2, 0x2c, 0xfc, 0xce, 0xc2, 0x0d, 0x2f, 0x7c, 0x48, 0x0b, 0xe3, 0xa4, 0xae, 0x15, 0x75, 0xb6, 0x28, 0x64, 0x18, 0x35, 0x7b, 0xc9, 0x44, 0x95, 0xa8, 0xd9, 0x7e, 0xad, 0x46, 0x28, 0x43, 0xd4, 0xca, 0x55, 0xf5, 0x1b, 0xad, 0x56, 0xa9, 0x1a, 0xcd, 0x16, 0x35, 0xea, 0x4b, 0xab, 0xd1, 0x22, 0xae, 0x11, 0xa0, 0xf3, 0x28, 0x8d, 0x8c, 0x35, 0x40, 0x8b, 0x9e, 0x63, 0x0f, 0xbc, 0xf5, 0x21, 0x05, 0x50, 0x72, 0x69, 0x4b, 0xfd, 0x8b, 0xeb, 0x5a, 0x6a, 0xdd, 0x68, 0x1d, 0xb4, 0x89, 0x6f, 0xdb, 0x6b, 0xde, 0xf9, 0x28, 0xd3, 0x4b, 0x1e, 0x27, 0x6a, 0xa0, 0x48, 0xb1, 0x0d, 0xfb, 0x37, 0xb4, 0x1a, 0x7f, 0x36, 0x25, 0xf1, 0x31, 0xde, 0x45, 0x2e, 0xfb, 0x37, 0xc4, 0x51, 0x4e, 0x59, 0xee, 0x8b, 0x1b, 0x9a, 0x2d, 0xd1, 0xee, 0xb8, 0x59, 0xc7, 0x08, 0xd7, 0x68, 0x91, 0x2b, 0xd3, 0x39, 0xb9, 0x83, 0xd0, 0x77, 0x36, 0x3d, 0xcf, 0x35, 0xd8, 0x22, 0xe0, 0x47, 0x5e, 0xa8, 0x41, 0x99, 0xd6, 0x22, 0x06, 0xbf, 0x06, 0xbf, 0xab, 0x5a, 0x40, 0x1c, 0xd7, 0x20, 0x06, 0x94, 0x3e, 0x77, 0x64, 0xdb, 0x6b, 0x0c, 0xa9, 0x1b, 0x98, 0x41, 0x39, 0x0b, 0x95, 0x3a, 0xdf, 0x2d, 0xfd, 0x93, 0xe2, 0x01, 0xce, 0x83, 0xdb, 0x05, 0xf9, 0x2c, 0xfc, 0xcd, 0x11, 0xfc, 0x7b, 0xed, 0x37, 0x47, 0xdc, 0x98, 0x7d, 0x24, 0x67, 0x59, 0xf1, 0x22, 0x92, 0xd6, 0xb1, 0x34, 0x61, 0xaf, 0x02, 0x24, 0xa6, 0xd7, 0x7b, 0x5f, 0xf8, 0x45, 0xdc, 0xed, 0xa1, 0x93, 0x5d, 0xfc, 0x8d, 0x6b, 0xb2, 0x68, 0x9d, 0x7c, 0xf9, 0x96, 0xe1, 0x3e, 0x77, 0x20, 0xc6, 0x38, 0xf5, 0x35, 0x3f, 0x9d, 0x9e, 0xdb, 0x9a, 0x49, 0xa8, 0x7f, 0x00, 0xe3, 0xee, 0x7b, 0xd1, 0xe7, 0x68, 0x29, 0xee, 0x3b, 0xd0, 0x4a, 0xa6, 0x68, 0x37, 0xb0, 0xbc, 0x29, 0x3a, 0xa9, 0x29, 0xdb, 0x63, 0x5e, 0x63, 0x3d, 0xfb, 0x92, 0xab, 0x1a, 0x7d, 0xd6, 0xa6, 0x98, 0x5c, 0x11, 0xdc, 0xcd, 0x9d, 0x73, 0xab, 0x4d, 0x6e, 0xcb, 0x91, 0x75, 0x72, 0x75, 0x67, 0xe0, 0x40, 0x5f, 0x3c, 0x1f, 0x10, 0xd7, 0xff, 0x6c, 0xfd, 0x9a, 0x2f, 0x1e, 0x59, 0x97, 0xc8, 0x2e, 0x9f, 0x8c, 0x36, 0x32, 0xf8, 0xab, 0xdd, 0x96, 0x61, 0xb4, 0x0b, 0x7a, 0xb2, 0x51, 0xc7, 0xbc, 0xcf, 0x6d, 0x51, 0xb2, 0x1a, 0xfa, 0xfa, 0x41, 0x29, 0x12, 0xae, 0xe1, 0xef, 0xb4, 0xcd, 0xad, 0xa6, 0x81, 0x75, 0xae, 0x40, 0x5b, 0xa0, 0x7f, 0x53, 0x7c, 0x44, 0x21, 0x3a, 0xef, 0xa0, 0xa3, 0x5d, 0xde, 0x10, 0x2d, 0x2f, 0x9b, 0x8c, 0xd1, 0x9e, 0x29, 0xe0, 0x36, 0xeb, 0xb8, 0xf3, 0x35, 0x24, 0x1b, 0xe9, 0x93, 0x2c, 0x7b, 0x4c, 0xc6, 0xe8, 0x43, 0x99, 0x5d, 0x71, 0x5b, 0xe5, 0xfb, 0xc0, 0x10, 0xc6, 0x4f, 0x70, 0xc4, 0x40, 0xe8, 0x07, 0x91, 0xb6, 0xb9, 0xed, 0x18, 0x85, 0xa3, 0x67, 0xdc, 0xd9, 0x5c, 0x1e, 0xea, 0x40, 0xb4, 0x31, 0xda, 0xfd, 0xd5, 0x97, 0x23, 0x5d, 0x3f, 0x3f, 0xf8, 0x95, 0x81, 0x48, 0x12, 0xbd, 0xaa, 0x7c, 0xcb, 0xcb, 0xc1, 0x8b, 0x74, 0x0d, 0xa9, 0xcb, 0x9b, 0xdb, 0x50, 0xc3, 0x68, 0xcd, 0x39, 0x32, 0xfc, 0xfc, 0xe0, 0x52, 0x9f, 0xd7, 0x4b, 0xb5, 0x5e, 0x49, 0x8c, 0xd8, 0x81, 0xfa, 0xcd, 0x79, 0x3f, 0x31, 0x77, 0x3a, 0x6b, 0xf3, 0xfe, 0xc3, 0xdc, 0x94, 0x16, 0x5e, 0x8c, 0xf0, 0xff, 0x30, 0x77, 0x72, 0xa8, 0x92, 0x03, 0x9a, 0xf6, 0x44, 0x5e, 0xbf, 0x8b, 0x9c, 0xb5, 0xa0, 0x6c, 0x9b, 0xf2, 0x7e, 0xeb, 0xa2, 0xbc, 0x57, 0xf3, 0x0e, 0xfd, 0x3d, 0xfa, 0xd1, 0x3f, 0x3f, 0x47, 0xc5, 0xc0, 0x63, 0x69, 0x9c, 0x46, 0xf3, 0x00, 0xf7, 0xe2, 0x2d, 0xcf, 0x61, 0xdc, 0x9b, 0xda, 0x08, 0xb4, 0x54, 0xad, 0x7d, 0xa7, 0x73, 0x14, 0xf3, 0x42, 0x12, 0xf4, 0x54, 0xaf, 0x15, 0xe3, 0xed, 0xe7, 0xeb, 0x3a, 0xbf, 0xf8, 0xfa, 0xfa, 0x04, 0xa9, 0x12, 0x68, 0x48, 0x7e, 0xdd, 0x37, 0xea, 0xbe, 0xa2, 0x8e, 0x44, 0xde, 0xf3, 0x95, 0x39, 0x23, 0x85, 0x35, 0xea, 0xd9, 0xc2, 0xa0, 0xfa, 0x41, 0xe8, 0x19, 0xf5, 0xa3, 0x71, 0xfa, 0x6a, 0x29, 0xc4, 0x2c, 0x62, 0x8c, 0x93, 0xe1, 0x07, 0x98, 0x53, 0xc8, 0x57, 0x48, 0x18, 0x14, 0xf8, 0x35, 0x79, 0x29, 0xd2, 0xac, 0x7e, 0x0c, 0x58, 0x87, 0xad, 0xd5, 0x62, 0x0e, 0x0d, 0x24, 0xc8, 0xd0, 0x8d, 0x7e, 0x3e, 0x4b, 0xfd, 0xb8, 0xfd, 0x8b, 0xd5, 0x86, 0x83, 0xc9, 0x0e, 0x79, 0x6f, 0x17, 0xb0, 0xb2, 0x33, 0xb7, 0x9c, 0x02, 0x78, 0xaa, 0x8f, 0x76, 0x21, 0x17, 0xa5, 0x9d, 0x72, 0x66, 0xa9, 0xa3, 0x08, 0x9b, 0x34, 0xd0, 0xfd, 0x5e, 0x9f, 0x1c, 0x7c, 0x13, 0x23, 0x29, 0x63, 0xa3, 0xd5, 0x67, 0xc6, 0xb4, 0x84, 0xb1, 0x4f, 0x86, 0x0a, 0xfb, 0x2c, 0xf5, 0x32, 0x9e, 0xaf, 0xc5, 0x4d, 0x92, 0x41, 0xfd, 0x7f, 0x94, 0xec, 0x48, 0x12, 0xad, 0x9a, 0xb1, 0x65, 0x40, 0x36, 0xbf, 0xd7, 0x37, 0xfc, 0xa3, 0x2f, 0x04, 0x45, 0x2a, 0x9b, 0xb2, 0x4a, 0xcb, 0xa9, 0x23, 0x3d, 0x9f, 0xd7, 0xc7, 0xf3, 0xa1, 0x8f, 0xe5, 0x66, 0xf5, 0xf2, 0x20, 0x45, 0x92, 0x7e, 0xa6, 0x6c, 0xbe, 0x9d, 0xe4, 0xe5, 0x5f, 0x43, 0xa4, 0xcd, 0x8c, 0x76, 0xa3, 0x57, 0xff, 0xc8, 0xd7, 0xfb, 0x3c, 0xfa, 0xd7, 0xbe, 0x80, 0xb5, 0xa4, 0x8f, 0xbe, 0xb0, 0xaa, 0xcf, 0xa0, 0xaa, 0x51, 0x8a, 0x5b, 0xc4, 0x2c, 0xdd, 0xac, 0xaa, 0xc8, 0xa3, 0x1b, 0x74, 0xca, 0xcc, 0xfd, 0x56, 0xd0, 0x2b, 0xa2, 0x5e, 0xc6, 0x90, 0xb5, 0x90, 0xa6, 0x78, 0xf9, 0x37, 0xcb, 0x4b, 0x4c, 0xf1, 0xa6, 0xd5, 0xd7, 0x6d, 0x2f, 0x26, 0xe6, 0x13, 0x2c, 0x01, 0xe4, 0xec, 0x2b, 0xa1, 0x91, 0xca, 0x44, 0x91, 0x9e, 0xf2, 0x16, 0x91, 0xd2, 0x02, 0xea, 0xbd, 0x7d, 0x2c, 0x45, 0x8e, 0x14, 0xa0, 0xa9, 0x52, 0x88, 0xa6, 0xfe, 0xe2, 0x95, 0xc1, 0x90, 0x62, 0x0a, 0x05, 0x14, 0xc9, 0x27, 0x09, 0x68, 0xd5, 0xe0, 0xc7, 0x44, 0xf6, 0x05, 0xb7, 0xfa, 0x6c, 0xc4, 0x50, 0x78, 0x27, 0x03, 0x8e, 0xb3, 0xa2, 0x05, 0x2c, 0x82, 0x0f, 0x09, 0x24, 0x4c, 0xbe, 0x59, 0xea, 0x25, 0xd1, 0xf6, 0x17, 0x16, 0x5b, 0xd4, 0xc1, 0xba, 0xaf, 0xf1, 0x5c, 0x3a, 0x2b, 0x92, 0x9a, 0x4b, 0xbd, 0x59, 0x5e, 0x09, 0x73, 0x8b, 0xc5, 0xe1, 0xa5, 0x5c, 0x59, 0x1a, 0xdc, 0x4d, 0xe6, 0xfe, 0xdd, 0x64, 0x6c, 0xc9, 0xf7, 0x4a, 0xe8, 0x79, 0xb9, 0xde, 0x1c, 0xee, 0x79, 0xca, 0x81, 0x5f, 0x23, 0x9c, 0xf3, 0xe3, 0x19, 0x39, 0x14, 0x70, 0x7c, 0xd1, 0x21, 0x66, 0xff, 0x72, 0x1f, 0x7a, 0x74, 0x01, 0xa8, 0xbe, 0xcb, 0xef, 0x25, 0xbb, 0xcf, 0x4b, 0xce, 0xa8, 0xa1, 0x99, 0xe8, 0x8c, 0x25, 0x48, 0xdf, 0x5e, 0x42, 0xf4, 0x76, 0xc8, 0x45, 0x26, 0x29, 0xa8, 0x7e, 0x5b, 0x4a, 0x32, 0x6d, 0xe8, 0xc8, 0x38, 0x94, 0x4c, 0x98, 0xa6, 0x75, 0xa2, 0xef, 0x98, 0x3a, 0x7c, 0xfc, 0x4c, 0x2e, 0x70, 0x51, 0xa6, 0xf0, 0x40, 0x23, 0x3f, 0x19, 0xc9, 0x84, 0xef, 0xe6, 0x2e, 0x09, 0x75, 0x50, 0xb1, 0xc1, 0x71, 0x8f, 0x75, 0x8f, 0x8b, 0x1c, 0xa1, 0x5f, 0x1f, 0x74, 0xae, 0x20, 0xe3, 0x3f, 0xbf, 0x7e, 0xfb, 0x37, 0x77, 0x11, 0x49, 0x67, 0x6a, 0xa4, 0x2e, 0xce, 0x69, 0xd5, 0xa4, 0x43, 0x3d, 0x79, 0xe0, 0x64, 0xfe, 0xfd, 0xc7, 0xb9, 0x19, 0x8e, 0x15, 0x64, 0xb6, 0x65, 0x1c, 0xf6, 0xdb, 0xc8, 0xbe, 0x82, 0x2c, 0x87, 0x66, 0xdb, 0x48, 0xa9, 0x2e, 0x33, 0x98, 0xaa, 0xd4, 0x01, 0xf0, 0x46, 0x99, 0x88, 0xb5, 0x5a, 0xf7, 0xd8, 0xc8, 0x11, 0xfc, 0xf5, 0xcb, 0xc8, 0x29, 0x77, 0x2c, 0xa7, 0x05, 0x1a, 0xbd, 0xea, 0x98, 0x74, 0xb0, 0x1b, 0xfd, 0xce, 0xf0, 0x6f, 0xbb, 0x91, 0xd2, 0x66, 0x93, 0x0e, 0xfb, 0x17, 0x71, 0x3e, 0x05, 0x87, 0x66, 0x2f, 0xa2, 0xf0, 0x40, 0x3c, 0x2b, 0x6a, 0x14, 0x50, 0x02, 0x62, 0x88, 0xba, 0x93, 0x13, 0xd9, 0x51, 0xe9, 0x5e, 0x8c, 0xe3, 0x70, 0x40, 0x6b, 0x83, 0x36, 0x43, 0xed, 0x3b, 0x96, 0x72, 0x60, 0xf1, 0x2b, 0xea, 0x65, 0xe0, 0x6b, 0x16, 0xf3, 0x95, 0xbe, 0x59, 0x94, 0xed, 0xe5, 0xdf, 0x2c, 0x31, 0x1a, 0x2e, 0xd7, 0xed, 0xbf, 0x76, 0x5c, 0x1f, 0x0b, 0x61, 0x31, 0x12, 0x2e, 0x23, 0xa7, 0xcc, 0x44, 0xa9, 0x68, 0xbd, 0x6b, 0x9f, 0xd2, 0xd7, 0xf2, 0xed, 0xcd, 0xea, 0x15, 0xee, 0x67, 0x6f, 0x1e, 0xb6, 0xcc, 0x26, 0x73, 0x1f, 0xc5, 0xcd, 0xa1, 0x80, 0x75, 0x76, 0x1f, 0xf3, 0x43, 0xaa, 0x03, 0xed, 0xc9, 0xad, 0x58, 0xf7, 0x0d, 0xe6, 0x73, 0x79, 0xed, 0x63, 0xda, 0x11, 0x7a, 0xb7, 0xe2, 0x74, 0xd7, 0xcc, 0xc9, 0x41, 0x3c, 0x9f, 0xa7, 0xe1, 0x9c, 0x0c, 0x1a, 0xbe, 0x6d, 0xab, 0xc6, 0x18, 0x27, 0xda, 0x1f, 0x68, 0x5b, 0xbe, 0xe2, 0xc1, 0x6f, 0x5e, 0xb7, 0xfa, 0x71, 0x7d, 0x30, 0xaf, 0x7f, 0x14, 0xff, 0xdf, 0x58, 0xff, 0x70, 0x2e, 0xc5, 0x15, 0xc0, 0x55, 0x8a, 0x0b, 0xb3, 0x45, 0xfd, 0x7a, 0x1a, 0xfe, 0xfa, 0x11, 0x1a, 0x7e, 0xd0, 0x42, 0xc3, 0xcb, 0x65, 0x1a, 0x3e, 0xd4, 0x47, 0xc3, 0x2f, 0xb7, 0xd1, 0xf0, 0xb3, 0x9b, 0x68, 0xf8, 0x09, 0xdc, 0x9b, 0xf6, 0xd2, 0x70, 0x18, 0x75, 0xda, 0x0b, 0xf9, 0xa5, 0x10, 0xdf, 0x14, 0x81, 0x9b, 0x6c, 0xc1, 0x73, 0x07, 0xbe, 0x7d, 0xf4, 0x29, 0x1a, 0xde, 0xea, 0xa2, 0xe1, 0x1f, 0x1e, 0xa7, 0x61, 0xb4, 0xe2, 0xf0, 0xb3, 0x8b, 0x90, 0xee, 0x00, 0x0d, 0xbb, 0x2f, 0xd3, 0x70, 0xf9, 0x30, 0x0d, 0x6f, 0x44, 0x1e, 0x8f, 0x42, 0x46, 0xfa, 0xe6, 0xdb, 0x34, 0x5c, 0x31, 0x48, 0xc3, 0xdb, 0x91, 0x76, 0x2b, 0xf0, 0xb1, 0x0d, 0xe9, 0xfe, 0x1e, 0xcf, 0xdb, 0x21, 0x9f, 0x6c, 0x7f, 0x92, 0x86, 0xef, 0x40, 0xda, 0x67, 0x71, 0xed, 0x40, 0xfa, 0x6f, 0x80, 0xc3, 0xab, 0xc4, 0xf7, 0x15, 0x5b, 0x68, 0x78, 0x2e, 0xe2, 0x5f, 0x3f, 0x4a, 0xc3, 0xdf, 0x07, 0xbc, 0x8f, 0xd6, 0xd3, 0xf0, 0xf3, 0x80, 0xe5, 0xfb, 0x28, 0xfb, 0xab, 0x28, 0xf7, 0xff, 0x85, 0x7c, 0xf3, 0x37, 0x80, 0xfb, 0xbf, 0x37, 0xd2, 0xf0, 0x91, 0xed, 0x34, 0xfc, 0x5f, 0x4e, 0x23, 0x0e, 0x75, 0x78, 0xd6, 0x8a, 0x0b, 0x32, 0xcf, 0xb3, 0x49, 0x94, 0x83, 0xef, 0x14, 0xc8, 0x60, 0xcd, 0x80, 0xbb, 0x19, 0x79, 0xdd, 0xb1, 0x0f, 0xf9, 0xac, 0x06, 0xac, 0xa8, 0xcf, 0xeb, 0x80, 0xf3, 0x11, 0xe4, 0xd7, 0x85, 0x3c, 0x1e, 0x40, 0xdc, 0x8e, 0x27, 0x10, 0x8f, 0xf2, 0xef, 0x40, 0xde, 0x2f, 0xe2, 0xbb, 0x66, 0xe0, 0xe9, 0xbf, 0x01, 0x86, 0x16, 0xd4, 0x6b, 0x5b, 0x31, 0x70, 0x00, 0xf8, 0x8b, 0x90, 0xcf, 0x0f, 0x3b, 0x68, 0x78, 0x0e, 0xea, 0xde, 0x85, 0xf4, 0x77, 0xa1, 0xcc, 0x7f, 0x3c, 0x44, 0xc3, 0x3b, 0x51, 0x9f, 0x07, 0x81, 0xc7, 0x04, 0xea, 0xda, 0x02, 0xd9, 0xaf, 0x1b, 0xe5, 0x7f, 0x1b, 0xf5, 0x5c, 0xf1, 0x03, 0x1a, 0xfe, 0xd5, 0x42, 0x1a, 0x4e, 0xa2, 0xae, 0x3d, 0xb9, 0x08, 0x73, 0xd2, 0xf0, 0xc3, 0xc8, 0xe7, 0xe9, 0x8b, 0x34, 0xfc, 0x0b, 0x23, 0xc2, 0x77, 0xd0, 0xf0, 0x57, 0x00, 0xc7, 0xff, 0x83, 0xef, 0xde, 0x18, 0xa0, 0xe1, 0xbb, 0xdd, 0x34, 0xbc, 0x07, 0xe5, 0x2d, 0x3a, 0x03, 0x5c, 0x03, 0x96, 0x67, 0x9b, 0x00, 0x0f, 0xca, 0xdb, 0x02, 0x19, 0x71, 0x33, 0xe0, 0xdc, 0xbc, 0x9c, 0x86, 0xa3, 0x76, 0xc0, 0x8f, 0x3a, 0x1c, 0x2c, 0xa0, 0xe1, 0x57, 0x38, 0x6e, 0x31, 0x0d, 0xbf, 0xaa, 0x00, 0x0e, 0x94, 0xd1, 0x04, 0xbc, 0xad, 0xc6, 0xf7, 0x3b, 0x9f, 0x06, 0xac, 0x3e, 0x5c, 0x80, 0xfb, 0x59, 0xb4, 0x57, 0x6f, 0x8c, 0x86, 0xff, 0x6b, 0x04, 0x38, 0x43, 0x99, 0xbf, 0x42, 0xdd, 0x9e, 0x5a, 0x85, 0x3b, 0x70, 0xb5, 0x19, 0xf1, 0x3b, 0x00, 0xdf, 0x2f, 0x11, 0xf7, 0x2d, 0xc0, 0xbb, 0xea, 0x5e, 0x1a, 0xfe, 0x27, 0x7c, 0xab, 0x20, 0xbc, 0x0a, 0xf0, 0xfe, 0x83, 0xde, 0x67, 0xfa, 0x51, 0x9f, 0x6e, 0xc8, 0xab, 0x3d, 0xf8, 0x66, 0x23, 0xf2, 0x7b, 0x18, 0x70, 0x6d, 0x43, 0xbd, 0x9f, 0x05, 0x3e, 0x9e, 0x41, 0x5d, 0x1e, 0xee, 0x18, 0xef, 0x5f, 0xde, 0xe9, 0x34, 0xbc, 0x16, 0xf2, 0xf2, 0x46, 0xf4, 0xa3, 0x66, 0xe0, 0x1e, 0x74, 0x67, 0xf8, 0x07, 0x68, 0xe3, 0xc7, 0xf1, 0x6d, 0x37, 0xf0, 0x3f, 0x07, 0x79, 0x25, 0x51, 0x8f, 0x67, 0x0f, 0xa3, 0xaf, 0xe0, 0xfd, 0x59, 0x94, 0xf7, 0x3c, 0xca, 0xdb, 0xfd, 0x12, 0x0d, 0xff, 0xed, 0x4e, 0x2d, 0x8f, 0x39, 0xc8, 0xff, 0x01, 0xc0, 0xda, 0x85, 0x76, 0xda, 0x03, 0x7c, 0x3e, 0x0c, 0xfc, 0x54, 0x2f, 0x41, 0x3b, 0xdb, 0x6e, 0xec, 0xcf, 0xcf, 0x21, 0x6d, 0x1c, 0x69, 0xc3, 0xdc, 0xde, 0xc0, 0xc7, 0xd3, 0xc0, 0xe1, 0x97, 0xd1, 0x9e, 0xe5, 0xe8, 0xcb, 0xdf, 0xc3, 0xfd, 0xbf, 0x01, 0x96, 0x5f, 0xa1, 0x7f, 0x0e, 0x22, 0x9f, 0xa5, 0x28, 0x23, 0x3e, 0x32, 0xe1, 0xfb, 0x77, 0x2b, 0x22, 0xb8, 0xda, 0x71, 0x3d, 0x8e, 0x0b, 0x6d, 0xf0, 0x6a, 0x89, 0xb6, 0x06, 0x68, 0xbc, 0x1f, 0xe3, 0x56, 0x5f, 0x03, 0x74, 0x32, 0x5c, 0xb7, 0xe1, 0xe2, 0x35, 0xb5, 0x29, 0xb8, 0x78, 0x28, 0x62, 0x42, 0xa1, 0x4c, 0x5c, 0xbc, 0x0e, 0x63, 0xd2, 0xd7, 0xde, 0x78, 0x7d, 0xc7, 0x88, 0xeb, 0x16, 0x5c, 0xd9, 0xb8, 0xa6, 0xe2, 0x2a, 0xc5, 0xb5, 0x08, 0x97, 0xa2, 0x3f, 0xf3, 0x9f, 0x5d, 0xac, 0x31, 0x12, 0x95, 0xe1, 0x7a, 0xf2, 0x0f, 0x84, 0x7d, 0xa6, 0x3f, 0xc7, 0xd8, 0x93, 0x8d, 0x0a, 0xc8, 0xf2, 0xd9, 0x65, 0xfe, 0xe9, 0xb4, 0xfa, 0x0f, 0xc6, 0x67, 0xdb, 0xda, 0x50, 0x23, 0x64, 0x5e, 0xf0, 0x8a, 0xad, 0x3c, 0xbe, 0xb6, 0x80, 0x2a, 0xd6, 0xae, 0x2d, 0xb7, 0xad, 0x5e, 0x6d, 0xa3, 0x0a, 0x22, 0x5f, 0x29, 0x05, 0x02, 0x03, 0x36, 0x9f, 0xc5, 0xf6, 0x8d, 0xb8, 0xed, 0x8b, 0xd3, 0x71, 0x8f, 0xf3, 0xb5, 0xfa, 0x1b, 0x1c, 0x42, 0x34, 0x97, 0x5f, 0x4c, 0x03, 0xa4, 0xc5, 0x13, 0xe9, 0xf1, 0xa4, 0xe8, 0xf1, 0x1c, 0x40, 0x16, 0xc6, 0x91, 0x2d, 0x1e, 0xaf, 0x88, 0x97, 0xd8, 0x6c, 0x36, 0x4e, 0x46, 0xa6, 0x72, 0x5b, 0xf9, 0x5a, 0xcb, 0xda, 0xf2, 0xb5, 0xe5, 0xe5, 0x36, 0x9b, 0x89, 0x14, 0xdc, 0x3a, 0xcb, 0x3b, 0x51, 0x6e, 0x7c, 0xad, 0x29, 0xae, 0x3c, 0x58, 0x5d, 0x8e, 0xb7, 0xf2, 0xb5, 0xf1, 0xf8, 0x83, 0xf1, 0xf8, 0x5a, 0x5b, 0xc0, 0x66, 0x03, 0x78, 0x0a, 0x9a, 0x23, 0x9b, 0x14, 0x9b, 0x49, 0x29, 0x1d, 0xc3, 0x87, 0x76, 0x43, 0x74, 0xf9, 0x5a, 0xb2, 0x94, 0xd8, 0xe3, 0x36, 0x25, 0xde, 0xe5, 0xb8, 0xd3, 0xd4, 0x45, 0x71, 0x9b, 0x05, 0x98, 0x5a, 0x43, 0xd4, 0x16, 0x3e, 0xf2, 0xea, 0xab, 0x5f, 0x42, 0x9a, 0xf8, 0x23, 0xe4, 0x28, 0xf7, 0xe1, 0xce, 0xcf, 0xd4, 0xf4, 0x06, 0x87, 0xc4, 0x5f, 0x8d, 0xdb, 0x6c, 0x0e, 0x32, 0x0f, 0x94, 0x6b, 0xf1, 0x44, 0x7a, 0x7c, 0x7c, 0xf4, 0x11, 0x11, 0x6f, 0x93, 0xf8, 0x05, 0xb9, 0x32, 0xfc, 0xaa, 0xd2, 0x54, 0x00, 0x44, 0x94, 0x73, 0xb1, 0x96, 0x78, 0x69, 0xdc, 0x52, 0xa0, 0x28, 0x26, 0xc4, 0xda, 0x6c, 0x6b, 0x91, 0xa8, 0x3c, 0x1e, 0x8f, 0x2b, 0x0a, 0x5e, 0x4d, 0x4d, 0xca, 0xdf, 0xc6, 0xf9, 0x4f, 0xb1, 0x09, 0xf8, 0x2d, 0x36, 0xc5, 0x56, 0x4e, 0xb6, 0x72, 0xa5, 0x1c, 0x95, 0xae, 0x00, 0x2a, 0x14, 0x5b, 0x27, 0x6a, 0x57, 0xd1, 0x59, 0x81, 0xfa, 0x85, 0xb8, 0x7e, 0x36, 0x9b, 0xff, 0x62, 0xdc, 0x56, 0xe1, 0x5b, 0x0d, 0xa4, 0xd0, 0x3f, 0x86, 0xe3, 0xf4, 0x53, 0xd4, 0xc7, 0x86, 0x52, 0xd7, 0xd8, 0xc8, 0x17, 0x8e, 0xd7, 0xd6, 0xc6, 0x6d, 0xe5, 0xda, 0x9f, 0xb2, 0x16, 0x7f, 0xfc, 0x10, 0x3f, 0x23, 0xde, 0x9b, 0x5a, 0xb8, 0xa0, 0x57, 0x46, 0xe3, 0x5a, 0xb4, 0x88, 0x2a, 0x4f, 0x43, 0x8d, 0xb6, 0xba, 0x23, 0x7e, 0x19, 0x44, 0x5b, 0xa9, 0xd5, 0x67, 0x51, 0xd7, 0xd2, 0x5a, 0xb2, 0xb5, 0xd8, 0x2c, 0xb6, 0xf2, 0xce, 0x4e, 0x4b, 0x79, 0x05, 0x77, 0x61, 0x93, 0xa5, 0x25, 0xde, 0xa9, 0xc4, 0x3b, 0x3b, 0x95, 0xb5, 0x36, 0xd3, 0x6a, 0xe5, 0xdb, 0xab, 0x38, 0xdb, 0x72, 0x7c, 0xb2, 0x92, 0xdb, 0xc7, 0x67, 0x5b, 0x4b, 0x66, 0x53, 0xa7, 0x52, 0x81, 0x16, 0xec, 0x2c, 0x35, 0x35, 0xd9, 0x1a, 0xc7, 0xea, 0x17, 0x2a, 0x8f, 0x5b, 0xda, 0x6c, 0xd9, 0xb5, 0xaf, 0xc4, 0x6d, 0x4d, 0xab, 0x65, 0x1b, 0xc5, 0xe9, 0xf9, 0xf2, 0x23, 0xf4, 0xff, 0xa2, 0x38, 0x9f, 0x85, 0xe2, 0x65, 0x80, 0xbf, 0xf4, 0xce, 0x45, 0x8b, 0x3c, 0x3e, 0xf1, 0x41, 0xbc, 0x55, 0xe1, 0x3f, 0xd4, 0xd7, 0xf6, 0xf1, 0xc7, 0x22, 0xa0, 0x74, 0xad, 0xb8, 0xbd, 0xda, 0x69, 0x12, 0x7f, 0x5f, 0x50, 0xf8, 0x8d, 0xe3, 0xd1, 0xfa, 0xa2, 0x42, 0x6f, 0x68, 0x1f, 0x32, 0xfe, 0x29, 0x6e, 0xf2, 0x41, 0x44, 0xd3, 0xf0, 0xef, 0x5b, 0x65, 0xb3, 0x59, 0x9a, 0x4c, 0x71, 0x74, 0x3e, 0x44, 0x01, 0x59, 0x40, 0x84, 0x02, 0xfc, 0xb7, 0xc4, 0x19, 0xfe, 0x95, 0xa8, 0x4d, 0xbc, 0xd3, 0x04, 0xf8, 0xbe, 0x5d, 0x0e, 0xe8, 0x6d, 0xfc, 0x45, 0x05, 0xe2, 0xb9, 0x9d, 0x10, 0xaf, 0xc1, 0xaf, 0x70, 0xfd, 0xee, 0xb3, 0x89, 0xe2, 0x68, 0x2a, 0xe3, 0xbf, 0x4d, 0xe0, 0x9f, 0x18, 0xff, 0x64, 0xeb, 0x5c, 0x4d, 0x71, 0xd0, 0x03, 0x1f, 0xc5, 0xfd, 0x15, 0xbf, 0x11, 0x78, 0x5f, 0xbb, 0xb6, 0xd3, 0xb7, 0x1a, 0x7f, 0xfc, 0x41, 0xfc, 0x6d, 0x01, 0x56, 0x93, 0x86, 0xa8, 0xd1, 0x78, 0x85, 0xf8, 0xfb, 0xb6, 0x48, 0x27, 0xe2, 0x75, 0xb0, 0x8f, 0x8d, 0xc1, 0x0f, 0x36, 0xa8, 0x33, 0x2e, 0x3a, 0x17, 0xf7, 0x66, 0x25, 0x6e, 0xf3, 0xc5, 0x51, 0x79, 0x1f, 0xba, 0x07, 0xf7, 0x7f, 0x52, 0xd6, 0xa6, 0xfa, 0x0f, 0xa4, 0x6f, 0xf4, 0x1a, 0xa5, 0xa9, 0x09, 0xf0, 0x97, 0xff, 0x2d, 0x3a, 0x1f, 0x5a, 0x0a, 0x5f, 0x8b, 0xfa, 0xd9, 0x2a, 0xb8, 0x7f, 0x31, 0xfc, 0x9d, 0x15, 0x0a, 0xc7, 0xaf, 0x2d, 0xaf, 0x10, 0xf5, 0x2b, 0x47, 0x87, 0xf7, 0xd9, 0x39, 0xab, 0xae, 0xb5, 0x77, 0x32, 0xfe, 0xf9, 0x8f, 0xe1, 0xa7, 0xce, 0x23, 0xf1, 0x25, 0x77, 0xea, 0x50, 0x1c, 0x99, 0x9e, 0xc2, 0x7f, 0x93, 0x86, 0xd8, 0x57, 0xc5, 0xaf, 0x6d, 0x40, 0x8f, 0x3f, 0x3e, 0xd6, 0x3e, 0x7a, 0x80, 0xed, 0x8c, 0xa8, 0x5f, 0x67, 0xb9, 0xc0, 0xbf, 0xad, 0xfa, 0x6e, 0x41, 0x7f, 0x00, 0x7f, 0xa0, 0x1c, 0xfd, 0xd0, 0x52, 0x5e, 0xee, 0x2b, 0x2f, 0x15, 0xd8, 0x05, 0x60, 0x3c, 0x7e, 0x15, 0x8c, 0x5f, 0xfc, 0x7f, 0x30, 0x5e, 0xae, 0x94, 0xa0, 0xff, 0x94, 0xdb, 0x1e, 0x8c, 0xdb, 0xd6, 0x4e, 0x37, 0xad, 0x46, 0x8f, 0xab, 0xe8, 0x2c, 0xaf, 0x28, 0xb7, 0x99, 0xe2, 0xe5, 0xf8, 0xdf, 0x88, 0x78, 0x93, 0xd2, 0x99, 0x5d, 0x81, 0x72, 0x2c, 0x6b, 0x99, 0xfe, 0x5c, 0x5c, 0x6b, 0xa3, 0xb5, 0x05, 0x68, 0x77, 0xa4, 0x24, 0x02, 0xf7, 0xc9, 0xb7, 0x6f, 0x67, 0x89, 0x7e, 0xfc, 0xbf, 0x0e, 0x25, 0xca, 0x35, 0x70, 0xfe, 0x97, 0x25, 0xd5, 0xff, 0x57, 0xbf, 0xaa, 0x75, 0xf5, 0x51, 0xfe, 0xb5, 0x0d, 0x74, 0x6a, 0xf8, 0xff, 0x5b, 0x11, 0x68, 0xc1, 0x5f, 0xb9, 0x36, 0x22, 0x48, 0x44, 0x00, 0x85, 0x13, 0x08, 0xde, 0x75, 0x24, 0xf4, 0xb3, 0x50, 0x54, 0x8c, 0x24, 0x6d, 0xe3, 0x48, 0x31, 0xe9, 0x21, 0x37, 0xa3, 0xad, 0x6b, 0xb5, 0x9b, 0xa2, 0xe5, 0x2d, 0x65, 0x1b, 0x68, 0x22, 0xc5, 0xba, 0xe1, 0x4f, 0xf9, 0xb4, 0xf8, 0xa4, 0x00, 0x50, 0xf1, 0x69, 0xbb, 0x4d, 0xfc, 0x4f, 0xdb, 0xfb, 0x31, 0x93, 0x8c, 0xcb, 0x85, 0xcb, 0x87, 0xab, 0x14, 0x57, 0x00, 0x57, 0x04, 0x57, 0x3d, 0xae, 0x45, 0xc4, 0x82, 0x96, 0x99, 0x96, 0xe3, 0x6a, 0xc3, 0xb5, 0x1a, 0x57, 0x12, 0x57, 0x1f, 0xae, 0x2d, 0xb8, 0x76, 0xe2, 0x7a, 0x12, 0xd7, 0x2e, 0x5c, 0xfd, 0xb8, 0xf6, 0xe1, 0x1a, 0xc0, 0x75, 0x18, 0xd7, 0x20, 0xae, 0xe3, 0xb8, 0x86, 0x71, 0x8d, 0xe0, 0xba, 0x88, 0xeb, 0x32, 0x99, 0x51, 0x05, 0xb3, 0x01, 0xe5, 0x1b, 0x50, 0xbe, 0x01, 0xe5, 0x1b, 0x50, 0xbe, 0x01, 0xe5, 0x1b, 0x50, 0xbe, 0x01, 0xe5, 0x1b, 0x50, 0xbe, 0x01, 0xe5, 0x1b, 0x50, 0xbe, 0x01, 0xe5, 0x1b, 0x50, 0xbe, 0x01, 0xe5, 0x1b, 0x50, 0xbe, 0x01, 0xe5, 0x1b, 0x50, 0xbe, 0x01, 0xe5, 0x1b, 0x50, 0xbe, 0x01, 0xe5, 0x1b, 0x50, 0xbe, 0x01, 0xe5, 0x1b, 0x50, 0xbe, 0x01, 0xe5, 0x1b, 0x50, 0xbe, 0x01, 0xe5, 0x1b, 0x50, 0xbe, 0x01, 0xe5, 0x1b, 0x50, 0xbe, 0x01, 0xe5, 0x1b, 0x50, 0xbe, 0x01, 0xe5, 0x4b, 0x28, 0x5f, 0x42, 0xf9, 0x12, 0xca, 0x97, 0x50, 0xbe, 0x84, 0xf2, 0x25, 0x94, 0x2f, 0xa1, 0x7c, 0x09, 0xe5, 0x43, 0x72, 0x33, 0x4b, 0x28, 0x5f, 0x42, 0xf9, 0x12, 0xca, 0x87, 0x88, 0x6d, 0x96, 0x50, 0xbe, 0x84, 0xf2, 0x25, 0x94, 0x0f, 0xd9, 0xc8, 0x2c, 0xa1, 0x7c, 0x09, 0xe5, 0x4b, 0x28, 0x5f, 0x42, 0xf9, 0x12, 0xca, 0x97, 0x50, 0xbe, 0x84, 0xf2, 0x25, 0x94, 0x2f, 0xa1, 0x7c, 0x09, 0xe5, 0x4b, 0x28, 0x5f, 0x42, 0xf9, 0x12, 0xca, 0x97, 0x50, 0xbe, 0x84, 0xf2, 0xc1, 0x02, 0xfc, 0x7f, 0xf5, 0xe2, 0xf6, 0xcf, 0x40, 0xfd, 0x33, 0x50, 0xff, 0x0c, 0xd4, 0x3f, 0x03, 0xf5, 0xcf, 0x40, 0xfd, 0x33, 0x50, 0xff, 0x0c, 0xd4, 0x3f, 0x03, 0xf5, 0xcf, 0x40, 0xfd, 0x33, 0x50, 0xff, 0x0c, 0xd4, 0x3f, 0x43, 0x6f, 0xff, 0x0c, 0xbe, 0x80, 0x83, 0x0c, 0xe0, 0x20, 0x03, 0x38, 0xc8, 0x00, 0x0e, 0x32, 0x80, 0x83, 0x0c, 0xe0, 0x20, 0x03, 0x38, 0xc8, 0x00, 0x0e, 0x32, 0x80, 0x83, 0x0c, 0xe0, 0x20, 0x03, 0x38, 0xc8, 0x00, 0x0e, 0x32, 0x80, 0x83, 0x0c, 0xe0, 0x20, 0x03, 0x38, 0xc8, 0x00, 0x0e, 0x32, 0x80, 0x83, 0x0c, 0xe0, 0x00, 0x2c, 0x90, 0xd9, 0x08, 0x18, 0x8c, 0x80, 0xc1, 0x08, 0x18, 0x8c, 0x80, 0xc1, 0x08, 0x18, 0x8c, 0x80, 0xc1, 0x08, 0x18, 0x8c, 0x80, 0xc1, 0x08, 0x18, 0x8c, 0x80, 0xc1, 0x08, 0x18, 0x8c, 0x80, 0xc1, 0x88, 0xf2, 0x8d, 0x28, 0xdf, 0x88, 0xf2, 0x8d, 0x28, 0xdf, 0x88, 0xf2, 0x8d, 0x28, 0xdf, 0x88, 0xf2, 0x8d, 0x28, 0xdf, 0x88, 0xf2, 0x8d, 0x28, 0xdf, 0x88, 0xf2, 0x8d, 0x28, 0xdf, 0x88, 0xf2, 0x8d, 0x28, 0xdf, 0x88, 0xf2, 0x8d, 0x28, 0xdf, 0x88, 0xf2, 0x8d, 0x28, 0xdf, 0x88, 0xf2, 0xc1, 0x96, 0x99, 0x33, 0x51, 0x7e, 0x26, 0xca, 0xcf, 0x44, 0xf9, 0x99, 0x28, 0x3f, 0x13, 0xe5, 0x67, 0xa2, 0xfc, 0x4c, 0x94, 0x9f, 0x89, 0xf2, 0x33, 0x51, 0x7e, 0x26, 0xca, 0xcf, 0x44, 0xf9, 0x99, 0x28, 0x3f, 0x13, 0xe5, 0x67, 0xa2, 0xfc, 0x4c, 0x94, 0x9f, 0x89, 0xf2, 0x33, 0x51, 0x7e, 0x26, 0xca, 0xcf, 0x44, 0xf9, 0x99, 0x28, 0x3f, 0x13, 0xe5, 0x67, 0xa2, 0xfc, 0x4c, 0x94, 0x9f, 0x89, 0xf2, 0x33, 0x51, 0x7e, 0x26, 0xca, 0xcf, 0x44, 0xf9, 0x99, 0x28, 0x3f, 0x13, 0xe5, 0x67, 0x5e, 0x1c, 0x6b, 0x03, 0xf1, 0x07, 0x16, 0x71, 0xd8, 0x31, 0x98, 0xda, 0x03, 0x4e, 0x06, 0x11, 0x63, 0xe2, 0x3d, 0x41, 0x59, 0xa5, 0xe1, 0xbc, 0x5a, 0x8c, 0xa4, 0xe1, 0x82, 0xda, 0x71, 0x4e, 0xf4, 0x4b, 0x4f, 0x69, 0x77, 0x72, 0x8a, 0xfd, 0x93, 0x77, 0x69, 0x87, 0xe0, 0x28, 0xdf, 0x35, 0x70, 0x7e, 0xd2, 0x78, 0x3a, 0xc3, 0x6e, 0xed, 0xfe, 0x17, 0x1f, 0x69, 0xe9, 0xfe, 0xa2, 0x5a, 0xc4, 0xbf, 0x5b, 0xb0, 0x51, 0x4b, 0xff, 0x85, 0x37, 0x04, 0x17, 0xfa, 0xee, 0x17, 0x72, 0x04, 0x87, 0xfa, 0x6e, 0xfe, 0xbd, 0x82, 0x43, 0x7d, 0xf7, 0xf3, 0x8f, 0x0b, 0x6e, 0xf5, 0x5d, 0xdb, 0xdb, 0x82, 0x46, 0xbc, 0x6b, 0xf3, 0x0b, 0x8e, 0xf6, 0xdd, 0xcf, 0x2d, 0x12, 0x1c, 0xed, 0xbb, 0x79, 0x4f, 0x09, 0xee, 0xf6, 0xdd, 0xdb, 0x2e, 0x0a, 0xd0, 0xdf, 0xbd, 0xcd, 0x2e, 0x38, 0xd9, 0x77, 0x73, 0x17, 0x0a, 0x6e, 0xf6, 0xdd, 0x5b, 0x8f, 0x09, 0x8e, 0xf6, 0xdd, 0x5b, 0x17, 0x89, 0x9d, 0xe5, 0x77, 0x73, 0x3e, 0xc0, 0x7d, 0x1a, 0xee, 0xbd, 0xb8, 0xe7, 0xe0, 0xce, 0x94, 0xee, 0x56, 0x7a, 0x77, 0x1a, 0x97, 0x93, 0x4b, 0xef, 0x5a, 0x4f, 0x08, 0xae, 0x59, 0x83, 0x37, 0x4f, 0xbf, 0x7f, 0x0e, 0xe1, 0xd3, 0x05, 0x01, 0x7b, 0x77, 0x2a, 0x44, 0x03, 0xfa, 0x3c, 0xbd, 0x9b, 0xfd, 0x03, 0xdc, 0xf3, 0xf5, 0xf8, 0x2f, 0xe8, 0xf7, 0x02, 0xfd, 0xfe, 0x17, 0xfa, 0x7d, 0xba, 0x7e, 0xff, 0xa2, 0x7e, 0x97, 0xf5, 0xfb, 0xed, 0xfa, 0xdd, 0xae, 0xdf, 0xbf, 0xa4, 0xdf, 0x1d, 0xfa, 0x7d, 0x86, 0x7e, 0x77, 0xea, 0xf7, 0x3b, 0xf4, 0xbb, 0x4b, 0xbf, 0xcf, 0xd4, 0xef, 0x6e, 0xfd, 0x5e, 0xa8, 0xdf, 0x3d, 0xfa, 0x7d, 0x96, 0x7e, 0x2f, 0xd2, 0xef, 0x5e, 0xfd, 0xee, 0xd3, 0xef, 0xb3, 0xf5, 0xbb, 0x5f, 0xbf, 0xdf, 0xa9, 0xdf, 0x8b, 0xf5, 0xfb, 0x1c, 0xfd, 0x5e, 0xa2, 0xdf, 0xef, 0xd2, 0xef, 0xa5, 0xfa, 0xfd, 0xcb, 0xf4, 0xee, 0x2d, 0x27, 0x04, 0xd7, 0xaf, 0xbd, 0xdf, 0xad, 0xdf, 0xcb, 0xf5, 0xfb, 0x5f, 0x8e, 0xb7, 0xfb, 0x8c, 0xed, 0x7a, 0xfb, 0x7b, 0xb4, 0x76, 0x37, 0x2c, 0xd4, 0xda, 0x9b, 0x85, 0x8d, 0xf1, 0xfe, 0xd1, 0xd1, 0xda, 0xf6, 0xc0, 0x9a, 0xa2, 0x78, 0x6b, 0x4b, 0x07, 0xcd, 0xd3, 0xd7, 0x14, 0xe4, 0x85, 0x7f, 0x55, 0x2d, 0x0b, 0x9d, 0x8f, 0x76, 0x6a, 0x7a, 0xe0, 0xef, 0x96, 0xb5, 0x8f, 0x2f, 0x3e, 0xb4, 0xb6, 0x8e, 0xab, 0x61, 0x2c, 0x5f, 0xb1, 0x74, 0x69, 0xd1, 0xd8, 0x3a, 0xc4, 0x92, 0x15, 0x1d, 0xcd, 0x0f, 0xb4, 0x5d, 0x17, 0xf8, 0x60, 0x6b, 0x53, 0x6b, 0xfb, 0x8d, 0xc1, 0xa9, 0x87, 0xeb, 0x83, 0x1f, 0xbc, 0x69, 0x9e, 0x45, 0x6d, 0x4d, 0x0f, 0xb4, 0x3c, 0xd0, 0xbe, 0xa4, 0x99, 0xbe, 0xd5, 0xb1, 0xa2, 0x69, 0x45, 0xc7, 0xdf, 0x7d, 0x0a, 0x04, 0x0f, 0xb6, 0x36, 0xb7, 0xb5, 0x7e, 0x73, 0x45, 0xc7, 0x8a, 0x96, 0x84, 0x1e, 0x13, 0x5f, 0x5d, 0xf4, 0x40, 0xf3, 0x8a, 0xc4, 0x03, 0xab, 0x56, 0x2c, 0x5d, 0xd6, 0x4a, 0x95, 0x0f, 0x34, 0x3d, 0x58, 0x73, 0xef, 0x3c, 0xa1, 0xf6, 0x12, 0xff, 0x56, 0xcb, 0x83, 0x1d, 0xac, 0x1f, 0x33, 0xe3, 0x9b, 0xae, 0x99, 0xf2, 0x8a, 0x6f, 0xca, 0x2d, 0xad, 0x1d, 0xf2, 0x8a, 0xe6, 0xb6, 0xa6, 0x65, 0xac, 0x04, 0xb3, 0x6c, 0x69, 0x51, 0x16, 0x55, 0x2e, 0x7f, 0xa0, 0x25, 0xb1, 0xac, 0xa1, 0xad, 0x7d, 0x45, 0xc7, 0xb2, 0x3f, 0xf9, 0x9b, 0xd6, 0x65, 0xed, 0x0f, 0x2e, 0x5b, 0xd0, 0xba, 0xf4, 0x4f, 0xfe, 0xa2, 0xee, 0xaf, 0x16, 0xca, 0x0d, 0xc1, 0x7b, 0x6b, 0xea, 0xe6, 0xc9, 0xa1, 0x60, 0xe5, 0xfc, 0x79, 0xb1, 0xbf, 0xfa, 0x4a, 0x5d, 0xf8, 0xf6, 0x2c, 0x8a, 0xcd, 0x0b, 0xf1, 0x25, 0xd7, 0x57, 0x52, 0x68, 0x5e, 0x8c, 0x2f, 0x7e, 0x0c, 0x72, 0x30, 0x9e, 0x83, 0x1c, 0x17, 0x24, 0x9f, 0xfe, 0xea, 0xe3, 0x57, 0x4c, 0xe5, 0x33, 0xbe, 0x29, 0xcf, 0xf0, 0x2f, 0x05, 0xd6, 0x50, 0x20, 0xb1, 0x66, 0x4f, 0x99, 0x3c, 0xa3, 0x69, 0xe9, 0x6a, 0xfd, 0xa2, 0xd5, 0x4d, 0x2d, 0x5f, 0xaf, 0x69, 0x41, 0xec, 0x83, 0x0f, 0x34, 0x35, 0x2d, 0x5b, 0x9a, 0x45, 0x4b, 0x97, 0xc5, 0x1f, 0xf8, 0x56, 0x53, 0x47, 0x51, 0x73, 0x2b, 0x42, 0x5b, 0xdb, 0xa9, 0x61, 0x59, 0x47, 0xe5, 0xf2, 0x15, 0x6d, 0xb1, 0x65, 0xab, 0xfe, 0x54, 0xf0, 0x1f, 0xfc, 0xbb, 0x25, 0xcb, 0xda, 0x6f, 0x58, 0xa2, 0xfa, 0xea, 0x03, 0x2b, 0x3a, 0x42, 0x7f, 0x75, 0x6f, 0xfd, 0x9f, 0x9a, 0x4b, 0x5a, 0x1f, 0xfc, 0xf4, 0x26, 0x1d, 0x0b, 0xe4, 0x24, 0x7f, 0x4a, 0xe7, 0x1b, 0xeb, 0x4e, 0xe8, 0x06, 0xdf, 0xfc, 0xbb, 0x96, 0xeb, 0x3b, 0x57, 0xdb, 0x8a, 0xd5, 0xf1, 0xe6, 0x8e, 0x3f, 0xd2, 0xe3, 0xfe, 0x60, 0xbf, 0x45, 0xbe, 0xf1, 0x07, 0x56, 0x2e, 0xa3, 0x58, 0x6b, 0x6b, 0xc7, 0xa7, 0xa5, 0x5c, 0xb0, 0xac, 0xe3, 0x01, 0x6a, 0x47, 0x82, 0x07, 0x9b, 0x1e, 0xf8, 0xa6, 0xfe, 0xa1, 0x5e, 0x08, 0x7f, 0x1b, 0x5f, 0x42, 0xdf, 0x5c, 0xd1, 0x8c, 0x34, 0x69, 0xd1, 0xd7, 0xd7, 0xea, 0x66, 0x7b, 0xe5, 0xae, 0xb2, 0xf1, 0xe7, 0x99, 0x15, 0xd7, 0x09, 0xf4, 0x77, 0xe8, 0x77, 0x97, 0xfe, 0x9c, 0x0a, 0xbf, 0xf3, 0xd3, 0xf7, 0xd6, 0x73, 0xfe, 0xe8, 0xde, 0xfa, 0x8c, 0xd1, 0x3f, 0x75, 0x6f, 0x7d, 0x46, 0x9d, 0xe1, 0xa9, 0x39, 0x9d, 0x98, 0x51, 0xf2, 0xf0, 0x9d, 0xba, 0xc4, 0x24, 0xbe, 0xa3, 0x45, 0xbc, 0x3b, 0xac, 0xa4, 0xe7, 0x98, 0xf3, 0x07, 0x76, 0xdc, 0x73, 0x6e, 0xd8, 0x71, 0x77, 0x9a, 0xaf, 0xdb, 0x71, 0x5f, 0x9a, 0xbe, 0xe3, 0x9e, 0x73, 0xc3, 0x8e, 0x7b, 0xce, 0x4d, 0x76, 0xdc, 0x73, 0xfc, 0x75, 0xdb, 0xd2, 0x60, 0x32, 0xfe, 0x91, 0xdd, 0xf7, 0x82, 0xf1, 0xdd, 0xf7, 0xba, 0x6f, 0x44, 0xde, 0x0b, 0x1c, 0xd4, 0x62, 0x83, 0x17, 0x28, 0x52, 0xf7, 0xec, 0x27, 0x03, 0xb5, 0xef, 0x54, 0x4a, 0x5c, 0xe7, 0x81, 0x89, 0xe1, 0x47, 0x10, 0x9e, 0xc1, 0xf8, 0x9b, 0x10, 0xfa, 0xaa, 0xc0, 0xa9, 0xe4, 0xff, 0x32, 0xbd, 0x73, 0xd1, 0x34, 0x5c, 0xe3, 0xe3, 0xbb, 0xb1, 0x58, 0x7b, 0x8b, 0xee, 0x0d, 0xc6, 0xcf, 0xf0, 0x4a, 0xf2, 0xbb, 0x7d, 0x49, 0x83, 0xe3, 0x8b, 0x75, 0xdf, 0x32, 0x7f, 0x19, 0xf4, 0xf9, 0x9d, 0x8b, 0x52, 0xdc, 0x83, 0x27, 0x13, 0x3f, 0x25, 0xe4, 0x3b, 0x47, 0x31, 0x6d, 0xbe, 0x73, 0x71, 0x47, 0xf4, 0xcb, 0xf4, 0x3f, 0x86, 0x0d, 0xa9, 0xf0, 0xf8, 0xc5, 0x3b, 0x47, 0x8d, 0x22, 0x5c, 0x7c, 0xa5, 0xa5, 0xbd, 0xa4, 0xa5, 0x51, 0x3e, 0xf0, 0x66, 0xcb, 0xad, 0x64, 0xf6, 0xb4, 0x92, 0x05, 0x10, 0x0c, 0x31, 0x04, 0xf7, 0x6c, 0x66, 0x3d, 0x02, 0x47, 0x2b, 0xe5, 0x46, 0x77, 0xd3, 0xe3, 0x71, 0x9f, 0xb7, 0x93, 0x86, 0xed, 0xb5, 0x64, 0x9e, 0xcb, 0x3b, 0xff, 0x96, 0x90, 0x97, 0xb2, 0x71, 0x4d, 0x0d, 0x7e, 0x88, 0xaf, 0xa2, 0xc0, 0xc2, 0x3e, 0xb4, 0x4a, 0xc7, 0x8c, 0x00, 0x3d, 0x2e, 0x07, 0xe6, 0x2e, 0xc7, 0x1c, 0x6d, 0x89, 0x36, 0x92, 0x1c, 0x0f, 0x07, 0xcf, 0xd2, 0xc0, 0x8c, 0x08, 0x1d, 0x0e, 0xed, 0xa6, 0x43, 0x78, 0x3e, 0x84, 0xe7, 0x01, 0xd6, 0x1a, 0x70, 0x5d, 0xa4, 0xc5, 0x33, 0xa2, 0xb4, 0x88, 0x9f, 0xed, 0x5f, 0xa5, 0x85, 0xb7, 0x75, 0x82, 0x4f, 0x68, 0xb8, 0x8d, 0x75, 0x2d, 0x62, 0x6d, 0x99, 0x95, 0x67, 0x69, 0x5c, 0x07, 0x61, 0x51, 0x74, 0xb7, 0xe1, 0x70, 0xbc, 0x80, 0xf7, 0x2e, 0xed, 0x2b, 0xd1, 0xe3, 0x52, 0xfa, 0x0a, 0xc7, 0x67, 0x04, 0x0c, 0x87, 0x15, 0xa3, 0xd8, 0xed, 0x32, 0xb0, 0x96, 0x42, 0xfd, 0x66, 0x5e, 0x9f, 0x27, 0x8a, 0xbc, 0x27, 0xdb, 0x1d, 0xd9, 0xb1, 0x1f, 0x19, 0x2e, 0x05, 0xdf, 0xa7, 0x81, 0xe7, 0xdf, 0xa7, 0xc3, 0x09, 0x9b, 0x63, 0x05, 0x0d, 0x28, 0xd9, 0xf6, 0x46, 0xca, 0x6a, 0xb3, 0x7a, 0x42, 0x75, 0xcf, 0x5e, 0x3b, 0xe0, 0x88, 0x45, 0xb7, 0xc6, 0x3f, 0x60, 0x9d, 0x83, 0xb0, 0x51, 0xdb, 0x29, 0x61, 0x0c, 0x20, 0x7f, 0x81, 0x03, 0xf5, 0x98, 0xd6, 0x4b, 0xe5, 0x0a, 0x60, 0x40, 0x2b, 0x7b, 0x4d, 0xdb, 0xcc, 0xf4, 0xb2, 0x8d, 0x15, 0x09, 0x32, 0x6c, 0xf1, 0x12, 0xf7, 0x16, 0xfb, 0xfa, 0x79, 0x57, 0xd4, 0x81, 0xba, 0x6d, 0x08, 0xad, 0xf6, 0xba, 0x8d, 0x15, 0x22, 0xec, 0xbb, 0xe2, 0x3d, 0x3a, 0xf6, 0xbe, 0x47, 0xbc, 0xc7, 0xc6, 0xde, 0x5f, 0x13, 0xef, 0x75, 0xdc, 0x7b, 0x8a, 0x76, 0xeb, 0x61, 0x27, 0x44, 0xd8, 0xbd, 0xa2, 0xbc, 0xcb, 0x13, 0xeb, 0x6a, 0x0c, 0xd5, 0x6f, 0x8e, 0xe7, 0xd8, 0x1b, 0x8d, 0x15, 0x63, 0x5a, 0x15, 0x4b, 0x14, 0x32, 0x64, 0x03, 0xab, 0xcf, 0x02, 0xab, 0x2f, 0x02, 0xc3, 0x7b, 0x80, 0xb7, 0x3d, 0x33, 0x6a, 0xe8, 0x59, 0x84, 0x6d, 0x42, 0xd8, 0x76, 0x84, 0x6d, 0x41, 0xd8, 0x16, 0x84, 0x6d, 0xaa, 0x39, 0x2b, 0x1d, 0xf3, 0x7e, 0x99, 0xbf, 0xf4, 0x5a, 0xe6, 0x5f, 0xb9, 0x66, 0xad, 0x7b, 0x6c, 0xde, 0xd9, 0x0c, 0xa3, 0x1e, 0x32, 0xa5, 0xee, 0x31, 0xed, 0x29, 0xd2, 0x98, 0xd1, 0x9e, 0xf6, 0xfc, 0x64, 0xdd, 0x63, 0xc1, 0xb3, 0x86, 0xe4, 0x8c, 0x88, 0xa1, 0x2f, 0xb4, 0xdb, 0xd0, 0x5b, 0x79, 0xd6, 0xd0, 0x3b, 0xa3, 0xc6, 0x90, 0x44, 0x3b, 0x19, 0x0d, 0x9b, 0x82, 0x67, 0xa5, 0x5d, 0x88, 0xd9, 0x2a, 0x6a, 0xf0, 0x53, 0x91, 0x8f, 0xb9, 0xee, 0xb1, 0x36, 0xf9, 0x7a, 0xcd, 0x13, 0xb4, 0xd3, 0x7d, 0xf5, 0x9b, 0x13, 0x4b, 0x66, 0xd4, 0x1a, 0x2e, 0xcf, 0x98, 0x6f, 0x78, 0x62, 0x2c, 0xf7, 0x37, 0xea, 0xf6, 0x7f, 0xd2, 0x27, 0x8b, 0xd4, 0xed, 0x53, 0xab, 0x0d, 0x8e, 0xb1, 0x6f, 0x3e, 0x89, 0xcc, 0x08, 0x64, 0x8c, 0xe2, 0x9b, 0xa2, 0xe0, 0x59, 0x23, 0xdd, 0x0e, 0x7e, 0x3a, 0xb4, 0x8b, 0x8c, 0x95, 0x23, 0x64, 0x94, 0x37, 0x78, 0xb3, 0x78, 0xcf, 0xeb, 0xd2, 0x30, 0xa8, 0x44, 0x20, 0x91, 0xed, 0x8d, 0x52, 0x41, 0xed, 0x3b, 0x9d, 0xc6, 0x3a, 0x60, 0xec, 0xe3, 0x01, 0x6e, 0x4d, 0x3c, 0x8b, 0x31, 0x28, 0xfb, 0x1d, 0xd9, 0xf2, 0xb4, 0x84, 0x45, 0x4e, 0xf2, 0xb7, 0xce, 0x7b, 0xee, 0x88, 0x90, 0xd1, 0xde, 0xe7, 0x5c, 0x4e, 0x0e, 0x25, 0xef, 0xae, 0x95, 0xa0, 0x39, 0x92, 0xbc, 0x92, 0xec, 0xf6, 0x28, 0xf7, 0x06, 0xf5, 0x49, 0xe7, 0x4a, 0x32, 0xbd, 0xc8, 0xbb, 0x9e, 0xa7, 0x31, 0x8a, 0x8d, 0x82, 0x3e, 0x95, 0x39, 0x23, 0x8e, 0x1a, 0x79, 0x05, 0xe5, 0x8a, 0x3d, 0xe4, 0x32, 0xfb, 0x72, 0x7c, 0x31, 0xad, 0x7f, 0x17, 0x99, 0xe2, 0x82, 0x1e, 0x7a, 0x27, 0xf3, 0xfe, 0xde, 0xc5, 0xfa, 0xba, 0xed, 0xfc, 0x26, 0x37, 0x52, 0xae, 0xd7, 0x45, 0x26, 0xb1, 0x93, 0x67, 0xcb, 0x3b, 0x40, 0x06, 0xe4, 0x9e, 0x63, 0xe7, 0x91, 0xf1, 0x78, 0xed, 0x3b, 0x8b, 0x05, 0x5d, 0xd0, 0xf6, 0x5a, 0xe7, 0x96, 0xb9, 0xcd, 0x85, 0x35, 0xea, 0xc5, 0xc2, 0xa8, 0x3a, 0xea, 0xac, 0x93, 0x5d, 0x94, 0x95, 0x20, 0xda, 0xca, 0xad, 0xff, 0x25, 0xb3, 0xa6, 0xc7, 0xf1, 0x75, 0x0f, 0xeb, 0xc7, 0xc4, 0x3b, 0x6b, 0x3e, 0x90, 0x2a, 0xe4, 0xda, 0x31, 0x9c, 0x1c, 0xf1, 0x4e, 0xf1, 0x66, 0x72, 0xdd, 0x7f, 0xbf, 0xca, 0x41, 0x69, 0xe1, 0xaf, 0x2a, 0x24, 0x15, 0xc8, 0x56, 0x53, 0xf2, 0xdb, 0xaa, 0xaa, 0xb6, 0x67, 0xee, 0x49, 0x2e, 0x5b, 0x34, 0x98, 0xf4, 0xdd, 0x6d, 0x36, 0xd5, 0x5d, 0xc5, 0x68, 0x72, 0x80, 0xdf, 0xce, 0x01, 0x8f, 0xeb, 0x23, 0x9b, 0xc3, 0x45, 0x46, 0xa5, 0xdc, 0xb5, 0x1c, 0xbf, 0x25, 0x4e, 0x7e, 0xf6, 0x95, 0x03, 0x62, 0xc5, 0x1d, 0x05, 0x7e, 0xee, 0x3d, 0x14, 0xe9, 0x0d, 0x87, 0x95, 0xe9, 0x85, 0x88, 0x55, 0x47, 0x94, 0xbc, 0xd0, 0x33, 0xea, 0x48, 0x28, 0x1c, 0xaa, 0x5e, 0xa5, 0x56, 0x57, 0x96, 0x76, 0x92, 0xa1, 0x43, 0x2d, 0xba, 0xe5, 0xaf, 0x1f, 0x92, 0xe7, 0x79, 0x56, 0x1a, 0x19, 0x5f, 0x83, 0x72, 0x00, 0x10, 0x6e, 0x0c, 0x9e, 0x93, 0x2a, 0x0a, 0x23, 0xea, 0xf9, 0x71, 0x18, 0xdb, 0xd4, 0xfe, 0xee, 0x78, 0x8e, 0x5c, 0x28, 0x79, 0x1c, 0x19, 0x87, 0x92, 0xfd, 0xdd, 0x0f, 0x9a, 0xe4, 0x8c, 0x50, 0x60, 0x7b, 0x92, 0x7f, 0xbd, 0x96, 0x70, 0x72, 0x5c, 0x53, 0xa5, 0x48, 0x7a, 0x3b, 0xe9, 0x5a, 0x29, 0x39, 0x14, 0x59, 0xf6, 0x90, 0x71, 0x6f, 0x72, 0x89, 0xf1, 0xa5, 0xe4, 0x92, 0xe9, 0xd1, 0xea, 0x78, 0xb6, 0x99, 0xb9, 0xd0, 0x69, 0x09, 0x53, 0xf4, 0x69, 0xca, 0x8b, 0xe7, 0xb8, 0x16, 0xee, 0xe3, 0x76, 0x39, 0x81, 0xbe, 0x1e, 0xee, 0x80, 0x48, 0x4d, 0x07, 0x3a, 0x20, 0x58, 0xd2, 0x8b, 0xc0, 0x86, 0xe8, 0x09, 0x97, 0x57, 0xb9, 0x02, 0x42, 0x9f, 0x08, 0x58, 0x9c, 0x19, 0x22, 0xe3, 0xcc, 0x4a, 0x32, 0x6f, 0x68, 0x22, 0xab, 0xbc, 0x52, 0x2a, 0x13, 0x2d, 0x97, 0xeb, 0x2d, 0x94, 0x4a, 0xc4, 0x8e, 0x29, 0xd5, 0x6d, 0x99, 0x19, 0xa0, 0x1c, 0x31, 0x87, 0x54, 0xc7, 0x3d, 0x55, 0xe7, 0x24, 0x07, 0xeb, 0xfb, 0x5c, 0xcd, 0x51, 0xb2, 0x1d, 0x5b, 0x90, 0x9f, 0xb9, 0x6e, 0x47, 0xfd, 0x66, 0x39, 0xea, 0x88, 0xc8, 0x31, 0xf1, 0x65, 0x96, 0xd9, 0x25, 0x20, 0xf9, 0x40, 0x19, 0xae, 0x44, 0x5a, 0xc5, 0x62, 0x07, 0xa4, 0x7b, 0x80, 0xad, 0x65, 0x59, 0xf6, 0x88, 0x7c, 0x0f, 0xa7, 0x89, 0x9f, 0x77, 0xf5, 0xd9, 0x37, 0xbd, 0xf4, 0x63, 0xc9, 0xf3, 0xa0, 0xf1, 0x8e, 0x79, 0x92, 0x27, 0x0a, 0xbc, 0x25, 0xf2, 0xe4, 0x66, 0x75, 0x44, 0xee, 0x56, 0xb2, 0xe5, 0x28, 0xf0, 0x55, 0x01, 0x7c, 0x1d, 0xea, 0x30, 0x28, 0x52, 0x07, 0x21, 0x7c, 0x1c, 0x57, 0xaf, 0x46, 0xbb, 0xe3, 0x4b, 0xa3, 0x3f, 0x36, 0x3c, 0x12, 0xbf, 0x5f, 0xab, 0x71, 0xfc, 0x5e, 0xb9, 0x4a, 0xf4, 0x87, 0x5c, 0xd1, 0x1b, 0xec, 0xe9, 0xbd, 0x21, 0x51, 0x26, 0x37, 0x51, 0x7e, 0xdb, 0xad, 0x83, 0x3f, 0x36, 0xc6, 0x0a, 0x03, 0xea, 0x25, 0xb4, 0xcf, 0x65, 0xfb, 0x72, 0x75, 0x34, 0xd2, 0xac, 0x5e, 0xf2, 0x9a, 0xd1, 0x4b, 0xf3, 0xeb, 0xb6, 0xf8, 0x3b, 0xe9, 0x73, 0x6f, 0x9d, 0x93, 0x36, 0xc9, 0x81, 0xaa, 0x73, 0x86, 0x47, 0xf4, 0x92, 0x9f, 0x44, 0x8d, 0xa4, 0xda, 0x0b, 0x8b, 0x47, 0x41, 0x9f, 0x40, 0xe5, 0xe4, 0xaa, 0x6d, 0xaf, 0x39, 0x9a, 0xd5, 0x8b, 0x7a, 0xec, 0x29, 0xd6, 0x0a, 0x8b, 0xd3, 0xb5, 0xbd, 0x1d, 0x10, 0x94, 0xd5, 0x25, 0xda, 0x3e, 0x23, 0x5f, 0x62, 0x7e, 0xae, 0x71, 0xd6, 0xdd, 0xda, 0x89, 0xfe, 0x63, 0x0e, 0xad, 0xa0, 0xe9, 0xd2, 0x4c, 0xfa, 0x36, 0x7d, 0x6e, 0x6c, 0x54, 0x77, 0x06, 0xcf, 0xd1, 0xa6, 0x34, 0x4d, 0x31, 0xeb, 0xd8, 0xd3, 0xaa, 0xf1, 0x79, 0xd0, 0xe7, 0x77, 0x44, 0xfc, 0x2e, 0xca, 0xf3, 0xb9, 0xc8, 0x56, 0x4c, 0xa6, 0x50, 0x92, 0xa4, 0x6e, 0xde, 0x8b, 0x75, 0x1a, 0x22, 0x95, 0xa1, 0xca, 0xa3, 0x3d, 0xd2, 0x72, 0x52, 0x29, 0x77, 0x76, 0x90, 0xac, 0xb3, 0xd1, 0x2e, 0x3c, 0xd6, 0x64, 0x8c, 0x32, 0x45, 0x92, 0xe7, 0x3b, 0xeb, 0xfd, 0x85, 0x64, 0x33, 0x05, 0xf1, 0x85, 0xd8, 0x07, 0x16, 0xba, 0x07, 0x79, 0x91, 0x40, 0x28, 0x30, 0xd8, 0xb5, 0x37, 0xd9, 0xf2, 0xf6, 0x1d, 0x51, 0x32, 0x3a, 0xb6, 0x80, 0xc6, 0x19, 0xe5, 0x8d, 0x98, 0xa7, 0x26, 0x6b, 0x7d, 0xe1, 0x62, 0x3d, 0x66, 0x20, 0xb1, 0x7b, 0x0d, 0x18, 0x2c, 0x62, 0xcf, 0x1b, 0x73, 0x18, 0xe8, 0xba, 0xc5, 0xde, 0x4a, 0x56, 0x9e, 0xcb, 0x40, 0xdd, 0x6d, 0x8c, 0x15, 0x4d, 0xab, 0x0d, 0x23, 0xb2, 0x97, 0x47, 0x24, 0x30, 0xba, 0xa5, 0xc8, 0xe0, 0x8a, 0x38, 0xeb, 0xda, 0x0c, 0x03, 0x3d, 0x78, 0xdb, 0x29, 0x67, 0xf0, 0x4e, 0xf6, 0xd4, 0xa4, 0x25, 0xc9, 0x82, 0x6d, 0x9c, 0x68, 0x8b, 0xbc, 0xe0, 0x76, 0xcb, 0x1a, 0x43, 0x27, 0xad, 0x56, 0xff, 0xe1, 0x88, 0x23, 0xa2, 0x34, 0xc9, 0x56, 0x4b, 0x12, 0x91, 0x19, 0x09, 0xff, 0x92, 0x1c, 0xf1, 0x44, 0x89, 0x02, 0x71, 0x37, 0xc4, 0xeb, 0x15, 0x9b, 0x78, 0x32, 0x25, 0xa6, 0x8b, 0xbb, 0x3f, 0x5e, 0xa1, 0xc8, 0xda, 0xb8, 0x13, 0x63, 0xd0, 0x27, 0x46, 0xd9, 0x4e, 0xc5, 0xc5, 0x23, 0xef, 0xab, 0xbf, 0x88, 0xac, 0x0b, 0x57, 0x29, 0x05, 0x68, 0x79, 0xa3, 0x67, 0x3e, 0xfa, 0x85, 0x9b, 0xfb, 0x72, 0xa6, 0x4d, 0x0e, 0x78, 0x10, 0xe2, 0xb2, 0xb6, 0xe5, 0xac, 0x4f, 0x8a, 0x7e, 0x34, 0x3e, 0xee, 0x7a, 0x15, 0x93, 0x06, 0x49, 0xbb, 0x79, 0x4f, 0xf7, 0x32, 0x1b, 0xc6, 0x5c, 0x6f, 0x3c, 0x87, 0x47, 0x09, 0xc6, 0x0c, 0x7a, 0x68, 0xb3, 0x29, 0x9a, 0xd1, 0x44, 0x46, 0x1e, 0x85, 0xbd, 0xa8, 0xcb, 0x93, 0x85, 0xcd, 0xea, 0x16, 0xf5, 0xa9, 0x58, 0x12, 0xcf, 0xbb, 0x0a, 0xe7, 0xa9, 0x4f, 0xb7, 0x1b, 0x0a, 0x83, 0xea, 0x3e, 0xf4, 0xa0, 0x03, 0xe2, 0x9b, 0x45, 0xfc, 0x4d, 0x53, 0xac, 0xea, 0x3c, 0x99, 0xe5, 0x18, 0x46, 0xf3, 0x28, 0xf7, 0xab, 0x17, 0xce, 0x49, 0xab, 0xe3, 0x79, 0xde, 0x42, 0xcc, 0x4b, 0xcd, 0xea, 0x28, 0x46, 0xd0, 0x93, 0x18, 0x1d, 0xfb, 0xaf, 0xed, 0x61, 0xce, 0x89, 0xf3, 0xbd, 0x9f, 0x73, 0xdb, 0x87, 0x9c, 0x47, 0xd5, 0x03, 0xed, 0xea, 0x9e, 0xde, 0xb8, 0xd1, 0xe5, 0xa6, 0x82, 0x36, 0x73, 0x7f, 0xf7, 0x32, 0xa3, 0xc3, 0x0d, 0x3c, 0xbb, 0x41, 0x6d, 0x91, 0x0e, 0x3d, 0xb6, 0x0b, 0x29, 0xfb, 0x0b, 0x43, 0xea, 0x5e, 0x40, 0x65, 0x67, 0x3a, 0x10, 0x09, 0x0c, 0x47, 0xe4, 0x40, 0xdb, 0x2d, 0xfd, 0x7d, 0xcb, 0xea, 0xdf, 0x3c, 0x6c, 0x8f, 0xbc, 0x35, 0x4a, 0xc3, 0xb7, 0x7d, 0x5f, 0x9e, 0xdd, 0x47, 0x71, 0x9f, 0x52, 0x21, 0x46, 0x7b, 0xa9, 0xa8, 0x53, 0xe9, 0x6a, 0xdb, 0xbe, 0xee, 0x65, 0x64, 0x9c, 0xde, 0x66, 0xed, 0xe7, 0x7b, 0x41, 0x02, 0xcf, 0xb6, 0x72, 0x32, 0xef, 0xeb, 0x5e, 0x4a, 0xc6, 0x7c, 0x6b, 0x39, 0x4d, 0x5e, 0x3d, 0xf9, 0x78, 0x57, 0x61, 0x58, 0x1d, 0x40, 0x19, 0x87, 0x56, 0xab, 0xca, 0x74, 0xfe, 0x2e, 0x91, 0xdd, 0x36, 0x45, 0x94, 0x3a, 0x80, 0x98, 0x43, 0x4a, 0x96, 0xa8, 0xef, 0x00, 0xea, 0x7b, 0x88, 0x21, 0x5f, 0xc8, 0x90, 0x1f, 0x6e, 0xcf, 0x39, 0xd8, 0x83, 0xd0, 0x27, 0xda, 0x72, 0xfa, 0xbb, 0xbe, 0x3a, 0xc0, 0xfb, 0xef, 0xa8, 0xf9, 0x91, 0xf0, 0x33, 0xea, 0x11, 0xa4, 0x1b, 0xc4, 0x75, 0xb4, 0xcd, 0xd5, 0x6e, 0x88, 0x04, 0xc7, 0x67, 0x31, 0x7c, 0xc5, 0xd8, 0xdc, 0x9e, 0xa0, 0x8c, 0x64, 0x74, 0x7d, 0xdc, 0xec, 0x99, 0x62, 0x5a, 0x0f, 0xe1, 0xd8, 0x11, 0xad, 0x4a, 0x14, 0xdb, 0xab, 0xd1, 0x77, 0x2d, 0x72, 0xa1, 0x31, 0x26, 0x72, 0x1f, 0xa9, 0xbc, 0x00, 0xac, 0xd7, 0xa8, 0xe7, 0xf5, 0x11, 0x3a, 0x92, 0x1a, 0xa1, 0x0e, 0x41, 0xa9, 0xe2, 0x26, 0x50, 0xec, 0xa6, 0xc7, 0x5e, 0x6f, 0x53, 0x91, 0x76, 0x14, 0xdf, 0x13, 0x1d, 0x65, 0x4c, 0xaf, 0xb9, 0x74, 0xe2, 0x3b, 0xde, 0x4c, 0xe0, 0xba, 0xd7, 0x9b, 0xb5, 0xe0, 0xca, 0x27, 0xd5, 0x75, 0x3b, 0x80, 0xdf, 0x4b, 0xea, 0x16, 0x8e, 0xf3, 0x66, 0x32, 0x36, 0x63, 0x5d, 0x5e, 0x03, 0x7a, 0xfa, 0x8e, 0xa2, 0x59, 0xea, 0x25, 0x31, 0xeb, 0xfe, 0x98, 0x63, 0x98, 0x2a, 0xe0, 0x1b, 0xe2, 0x18, 0xd6, 0x18, 0xd0, 0xd2, 0xb7, 0xe7, 0x0c, 0x71, 0xa8, 0x48, 0x6f, 0x47, 0x68, 0x43, 0x57, 0xea, 0x0b, 0xd6, 0x55, 0x68, 0xcb, 0x4a, 0x7d, 0x03, 0x2c, 0xf4, 0xd5, 0xed, 0x48, 0x6b, 0xe9, 0x2d, 0xde, 0x59, 0xea, 0xe5, 0xba, 0x1d, 0xa0, 0x55, 0xbd, 0xf5, 0x7d, 0xf2, 0xc6, 0xdb, 0x11, 0x4a, 0x96, 0xf1, 0xd2, 0x18, 0x87, 0x8b, 0x93, 0xe2, 0xcb, 0x88, 0xba, 0x49, 0xa4, 0xdb, 0x84, 0x34, 0x97, 0xc8, 0x7c, 0x7b, 0x88, 0x72, 0xb9, 0x7f, 0xa0, 0xb4, 0x3e, 0xc5, 0xd4, 0x3e, 0x15, 0x58, 0xdc, 0xe9, 0x9e, 0x85, 0x5c, 0xd6, 0xc9, 0x55, 0xb7, 0x57, 0x93, 0xf1, 0xf6, 0x30, 0x15, 0xd8, 0x91, 0xeb, 0x9d, 0xf3, 0x30, 0x93, 0x1a, 0xaa, 0x93, 0x43, 0xcf, 0xa8, 0x5b, 0x06, 0xba, 0xce, 0xf4, 0xf9, 0x93, 0x2e, 0x89, 0x7b, 0xce, 0x52, 0x69, 0xb5, 0x99, 0x4b, 0x9d, 0x16, 0xa6, 0x4c, 0xca, 0x50, 0x93, 0xd3, 0x2a, 0x31, 0x2f, 0x70, 0x0f, 0x25, 0x83, 0x55, 0xf4, 0x8a, 0x2c, 0xb4, 0xd6, 0x33, 0xea, 0x13, 0x71, 0x30, 0x0c, 0x1d, 0xb6, 0xa3, 0xeb, 0xe4, 0x10, 0x2d, 0x97, 0xd0, 0x04, 0xa2, 0x17, 0x2f, 0x11, 0xbd, 0x78, 0x71, 0xfd, 0x26, 0xa7, 0xa5, 0xbe, 0xc7, 0x5e, 0x29, 0x4f, 0x6b, 0xbf, 0x6b, 0xe8, 0xc7, 0xc6, 0x6a, 0xd4, 0x6e, 0x04, 0x58, 0x3e, 0x2f, 0x37, 0xea, 0x2d, 0x91, 0x05, 0x0a, 0x83, 0x96, 0x10, 0x34, 0x35, 0x0b, 0x63, 0x4c, 0xa7, 0xcf, 0x72, 0x95, 0xbd, 0xf2, 0xf6, 0x7b, 0x50, 0x07, 0xcc, 0x1c, 0x64, 0xc5, 0xaf, 0x85, 0x2c, 0xf8, 0xcd, 0xa5, 0xdc, 0x36, 0x83, 0x1c, 0xea, 0xda, 0x82, 0x19, 0x67, 0x13, 0xe6, 0x41, 0xeb, 0x6f, 0x7e, 0x01, 0x7e, 0x05, 0xcc, 0x43, 0xfb, 0x38, 0x6f, 0xb6, 0xd0, 0x85, 0xf1, 0x6a, 0xd8, 0x1a, 0x42, 0xee, 0xb8, 0xce, 0xe2, 0x3a, 0x8f, 0xeb, 0x03, 0x79, 0x96, 0x3a, 0xda, 0x2e, 0xed, 0x49, 0x26, 0x8c, 0x68, 0xf1, 0xba, 0x35, 0x86, 0xf7, 0x9f, 0x59, 0x45, 0x1d, 0xb4, 0x7a, 0xe4, 0xf8, 0x77, 0x16, 0x5c, 0x50, 0x8f, 0x7b, 0x80, 0x17, 0xd0, 0x81, 0x95, 0xc6, 0x6a, 0xf5, 0x38, 0x7a, 0xe9, 0x49, 0x8c, 0x8f, 0xe1, 0x36, 0x03, 0x20, 0x3d, 0xcd, 0x90, 0x0a, 0xaa, 0x25, 0xe0, 0x94, 0x17, 0xde, 0xfe, 0x8c, 0x7a, 0xb1, 0x94, 0x62, 0xdd, 0x8b, 0x7a, 0xea, 0x37, 0xef, 0xef, 0x5e, 0x72, 0xa4, 0xb0, 0x5a, 0xed, 0xc5, 0x2c, 0xb3, 0x13, 0xbd, 0xe6, 0x32, 0x63, 0xab, 0x0d, 0xb0, 0xd8, 0x23, 0x1d, 0xb4, 0x8a, 0x5c, 0xb3, 0xd4, 0x2d, 0xee, 0x49, 0x9d, 0xb4, 0x96, 0xaa, 0x27, 0x3d, 0xf6, 0x3a, 0xd3, 0x12, 0xf5, 0x14, 0xe0, 0x1e, 0x62, 0x9c, 0xe3, 0xbe, 0xff, 0xfa, 0x1e, 0xed, 0x08, 0x68, 0xfd, 0x99, 0xfa, 0xdb, 0xa6, 0x0e, 0xa2, 0x2d, 0xec, 0x34, 0xb2, 0x61, 0x28, 0x58, 0xdc, 0x35, 0x07, 0xed, 0x43, 0x19, 0x64, 0xbe, 0x0d, 0xf8, 0xbf, 0x2d, 0x44, 0x99, 0xa1, 0x46, 0x32, 0x89, 0x5e, 0xda, 0x77, 0xa6, 0xcf, 0x3b, 0x49, 0x68, 0xf8, 0x5c, 0x1b, 0x9f, 0xc7, 0xdd, 0x54, 0x73, 0x16, 0x32, 0x80, 0x05, 0xe5, 0x97, 0x93, 0xfa, 0xb5, 0x9d, 0x8a, 0x1b, 0x35, 0xdf, 0x62, 0x9f, 0xc4, 0xe5, 0x5f, 0xcb, 0x95, 0xab, 0x17, 0xad, 0x97, 0x07, 0x12, 0x05, 0x02, 0xe2, 0x6c, 0x6f, 0x26, 0xf8, 0x26, 0xb2, 0x87, 0xeb, 0x1e, 0x65, 0x1a, 0x1d, 0xeb, 0xd9, 0xdb, 0xb3, 0x64, 0x28, 0xe1, 0x5b, 0x45, 0x4a, 0x9e, 0xbc, 0x58, 0xcc, 0xb8, 0x96, 0xb4, 0x6f, 0xb3, 0x39, 0x3e, 0x7e, 0xc6, 0x1e, 0x6d, 0x73, 0x8d, 0xcb, 0x5a, 0xe8, 0x53, 0xdb, 0x91, 0x66, 0xbb, 0x98, 0xd1, 0x16, 0xf3, 0x8c, 0xd6, 0x76, 0x8b, 0x42, 0x57, 0xaf, 0xb4, 0x81, 0x27, 0xb8, 0x7a, 0xa9, 0x2d, 0x13, 0xbf, 0x1f, 0xb4, 0xdd, 0x86, 0xdf, 0x91, 0xf1, 0x31, 0x79, 0xaf, 0x18, 0x93, 0xe0, 0xb7, 0x6e, 0x18, 0x8f, 0xf5, 0x9b, 0x15, 0xba, 0x76, 0xca, 0x9b, 0xdd, 0x66, 0x88, 0x04, 0xda, 0x17, 0x8e, 0x63, 0x46, 0xd7, 0x97, 0xca, 0xf6, 0x4a, 0x1d, 0x53, 0x07, 0xbb, 0x51, 0x6b, 0xc3, 0xf5, 0xb5, 0x6e, 0x97, 0xd2, 0xf0, 0xf8, 0x45, 0x2d, 0x3d, 0x66, 0x93, 0x9d, 0x3c, 0x9b, 0x38, 0xeb, 0xb4, 0x5e, 0x2b, 0xdd, 0x07, 0x1a, 0x30, 0x0a, 0xce, 0xc3, 0x07, 0xb9, 0xb2, 0x59, 0x7d, 0x8a, 0xbf, 0xfd, 0xda, 0x4e, 0xae, 0x39, 0x6a, 0xf1, 0xf8, 0x2a, 0xe2, 0xfe, 0xb4, 0x9a, 0xd0, 0x57, 0xbe, 0x1f, 0xaa, 0x72, 0xdc, 0xf2, 0xd7, 0xdd, 0x4a, 0xbd, 0xe0, 0xe2, 0x90, 0x6d, 0x7b, 0x16, 0xb8, 0xb8, 0x50, 0x1a, 0x17, 0x97, 0x47, 0xa5, 0x54, 0x80, 0xcb, 0x8e, 0xcb, 0x4d, 0xa5, 0x92, 0x15, 0x77, 0xbf, 0x98, 0x51, 0x0a, 0x04, 0x27, 0x97, 0x27, 0x66, 0x94, 0xc7, 0x95, 0x6c, 0x17, 0xde, 0xd6, 0x18, 0x14, 0xd3, 0xdd, 0xe0, 0xd9, 0xd4, 0xef, 0xcb, 0xa1, 0x09, 0xf3, 0xc6, 0x93, 0x1e, 0x63, 0x14, 0xa5, 0xa1, 0x25, 0x7f, 0x10, 0xed, 0x4d, 0x98, 0xee, 0x0e, 0xab, 0xdf, 0xd3, 0x53, 0x7e, 0x6f, 0x35, 0x95, 0xce, 0x52, 0xbf, 0x17, 0xbc, 0x00, 0xba, 0x27, 0xb5, 0x5b, 0x1d, 0x62, 0x26, 0xba, 0xb6, 0xa6, 0xc8, 0xf8, 0x76, 0xef, 0xdb, 0x0f, 0xc9, 0x93, 0x04, 0x47, 0x9f, 0x56, 0x63, 0x37, 0x8f, 0xc9, 0xce, 0x45, 0x1b, 0xe5, 0xf0, 0x9b, 0x87, 0x82, 0x17, 0xcd, 0xd4, 0x6e, 0xdd, 0xba, 0xa9, 0xcd, 0xf0, 0x6f, 0xbb, 0xfc, 0x14, 0x0e, 0x16, 0x56, 0xa1, 0x37, 0x47, 0xd4, 0x61, 0x7b, 0x55, 0x28, 0xa0, 0xe4, 0x14, 0x1b, 0x0e, 0xc5, 0xfc, 0x07, 0xf1, 0xdb, 0x48, 0x92, 0xef, 0xe0, 0xa2, 0x8d, 0xb1, 0x40, 0x07, 0x15, 0xd3, 0x81, 0xee, 0x25, 0x67, 0xb8, 0x2c, 0xa4, 0x3b, 0x80, 0xf2, 0xad, 0xea, 0xae, 0xbb, 0x9b, 0xd5, 0xef, 0xa9, 0xbb, 0x3b, 0xbe, 0x5d, 0x2d, 0x01, 0x37, 0xdf, 0x63, 0xcc, 0x28, 0x31, 0xb4, 0xd8, 0x01, 0x39, 0xda, 0x6e, 0x66, 0x58, 0x46, 0x03, 0x77, 0x63, 0xf6, 0xc2, 0x1b, 0x8d, 0xbd, 0xed, 0xd6, 0x74, 0xcd, 0xd0, 0x33, 0xcd, 0xfd, 0xbd, 0x4b, 0x41, 0x53, 0xe9, 0xac, 0x8b, 0xa2, 0x98, 0x77, 0x9a, 0xb3, 0xd7, 0xd2, 0x1a, 0x4a, 0xe5, 0xa5, 0x64, 0x21, 0x9f, 0xef, 0x89, 0x10, 0x6a, 0xcb, 0x9d, 0x28, 0x9b, 0x7c, 0xb2, 0xd0, 0x11, 0xf0, 0xa0, 0x2e, 0xac, 0x85, 0xda, 0x6a, 0x6a, 0xb3, 0xbe, 0xb7, 0x4b, 0x31, 0x85, 0x7b, 0xda, 0xac, 0x67, 0x9e, 0x44, 0xfe, 0xfb, 0xd0, 0x67, 0x1f, 0x6f, 0x85, 0xbc, 0x08, 0x7a, 0xf6, 0xf8, 0xbf, 0xed, 0x52, 0xb2, 0xf8, 0x1e, 0xee, 0x6a, 0xb3, 0x9e, 0xe2, 0xd8, 0xfd, 0x02, 0xee, 0xa7, 0xc5, 0xef, 0xb3, 0xab, 0x0c, 0xeb, 0xbb, 0x65, 0x8b, 0xdd, 0xd8, 0xc1, 0xf4, 0xeb, 0x7b, 0x02, 0xc2, 0x46, 0x9e, 0x7f, 0x20, 0xbf, 0x5c, 0x50, 0x9f, 0x12, 0xb3, 0xfa, 0x7d, 0x73, 0xc2, 0x64, 0xe4, 0x91, 0x84, 0xcb, 0x8c, 0x2b, 0x4b, 0xb6, 0x8c, 0xf4, 0xcd, 0x09, 0xa0, 0x2f, 0x34, 0x52, 0xf6, 0x8c, 0x66, 0x75, 0x00, 0x35, 0xce, 0x1e, 0xe7, 0xa7, 0x3e, 0xa9, 0xeb, 0x24, 0xd1, 0x56, 0x79, 0xd1, 0x87, 0x12, 0x39, 0xf6, 0x2a, 0x79, 0xd2, 0xf8, 0x18, 0x50, 0xa4, 0x4e, 0x92, 0x4d, 0x62, 0x04, 0xb4, 0xf1, 0x08, 0xf8, 0xab, 0x0f, 0xd5, 0xf3, 0xac, 0x23, 0x0f, 0x6e, 0xc2, 0x8c, 0x76, 0x39, 0xef, 0xb2, 0x72, 0x9f, 0x28, 0xad, 0x2f, 0x01, 0x2f, 0x05, 0xee, 0xcb, 0x58, 0x0c, 0x2e, 0xbf, 0x6c, 0x26, 0x19, 0x7d, 0xd3, 0xfa, 0xab, 0x5a, 0xee, 0xab, 0x98, 0x49, 0xa6, 0xf2, 0x99, 0x24, 0x1d, 0x98, 0xd7, 0x52, 0xf7, 0xd2, 0xfc, 0xe6, 0xe8, 0x81, 0x50, 0x4b, 0xf5, 0xfe, 0xda, 0xe6, 0x50, 0x7f, 0xb0, 0xa5, 0xa2, 0xcc, 0xd2, 0x5f, 0xdb, 0x2a, 0x95, 0x91, 0x6f, 0x1d, 0xd2, 0x4b, 0xbe, 0x29, 0xfb, 0xe7, 0xb7, 0x4a, 0xbe, 0x4c, 0xf0, 0x66, 0x92, 0x0f, 0xdf, 0xf7, 0x07, 0x9b, 0x24, 0x3f, 0x81, 0x5b, 0x33, 0xfa, 0x91, 0x87, 0x4f, 0xda, 0x13, 0x6a, 0x92, 0x7c, 0x06, 0xc4, 0x9a, 0xf6, 0x6d, 0x89, 0xe7, 0x28, 0x66, 0x40, 0x7d, 0x11, 0x5c, 0x7a, 0xd3, 0x8b, 0xe0, 0x6a, 0x00, 0xc7, 0xd2, 0xb6, 0x6f, 0x7b, 0x03, 0x54, 0xee, 0x5e, 0x4e, 0x66, 0xef, 0x02, 0xf2, 0x54, 0x7d, 0x48, 0x81, 0xaa, 0xb3, 0xea, 0xf9, 0x42, 0x70, 0x6e, 0x65, 0xd3, 0x1e, 0xaf, 0x2d, 0x45, 0x09, 0x3b, 0xe7, 0x97, 0x20, 0xdf, 0x1d, 0xb5, 0xc5, 0xc8, 0x6f, 0xfb, 0x7c, 0x48, 0x58, 0xe6, 0x9d, 0x83, 0x3b, 0x46, 0xd0, 0xd3, 0xcc, 0xc8, 0xc7, 0xe2, 0xb8, 0x07, 0xa5, 0x66, 0xf7, 0x87, 0x9b, 0x17, 0xa2, 0xbc, 0xac, 0x3d, 0xa1, 0x96, 0x5a, 0x1f, 0x46, 0xf4, 0xfe, 0x48, 0x4b, 0x18, 0x75, 0x30, 0xbf, 0x54, 0xd9, 0x52, 0x5e, 0x56, 0xf5, 0x52, 0x15, 0xe0, 0x9d, 0x77, 0xe2, 0xc8, 0x9d, 0x0b, 0xc8, 0x5c, 0x91, 0xf1, 0x62, 0xa4, 0x55, 0xaa, 0x30, 0xbf, 0x5d, 0x8b, 0x19, 0xc6, 0xe2, 0x0b, 0xef, 0x09, 0x03, 0xfa, 0xe0, 0xe0, 0x2f, 0xef, 0x8c, 0x50, 0x96, 0x5f, 0xea, 0x0f, 0x31, 0xf4, 0x43, 0xf3, 0xef, 0x0c, 0x52, 0x36, 0xfa, 0xca, 0xd3, 0xa0, 0x00, 0xe0, 0x1d, 0x13, 0xa6, 0x19, 0xb8, 0x93, 0xd1, 0x8d, 0xdf, 0xfd, 0x3c, 0x6a, 0xf3, 0xe4, 0x59, 0x98, 0xc1, 0x68, 0x28, 0x39, 0xd4, 0x35, 0xd8, 0x35, 0x98, 0x1c, 0x4c, 0xda, 0x6f, 0xd9, 0x9a, 0x54, 0xa4, 0x76, 0x92, 0x67, 0x82, 0xf3, 0x09, 0xbc, 0x39, 0xf0, 0xe6, 0xe1, 0xc1, 0x3e, 0x0e, 0x97, 0x6b, 0x1e, 0x1d, 0x78, 0xfe, 0xe5, 0xc4, 0x12, 0x31, 0xd6, 0x6d, 0xb2, 0xfb, 0xba, 0xaf, 0xb2, 0xb6, 0x26, 0x65, 0x61, 0xd3, 0xf0, 0xfc, 0x40, 0xa2, 0x42, 0xe4, 0x9c, 0x7b, 0x7d, 0xce, 0xdf, 0x1d, 0x50, 0xa4, 0xef, 0xfe, 0xaa, 0x30, 0x3a, 0xf9, 0xbc, 0x37, 0x9b, 0x73, 0x4f, 0x8f, 0xdb, 0x36, 0xe0, 0x9d, 0xcc, 0x1c, 0xed, 0xd0, 0xe5, 0xfa, 0xcd, 0xf6, 0xe8, 0x1e, 0x9e, 0xfd, 0xe8, 0xda, 0x45, 0xb9, 0x1a, 0x7c, 0xac, 0xe7, 0xf6, 0x1a, 0xb4, 0xb3, 0x31, 0xf4, 0x23, 0x32, 0xea, 0x3a, 0xbe, 0xb9, 0x82, 0x93, 0xbd, 0x18, 0x79, 0xaf, 0xbc, 0xcc, 0x11, 0x71, 0xd6, 0x38, 0xb2, 0xd1, 0x12, 0xa3, 0xae, 0x40, 0x49, 0x21, 0x30, 0x7d, 0xeb, 0xfe, 0xca, 0x16, 0x32, 0x98, 0xc0, 0x4d, 0x9b, 0x4a, 0x0b, 0x31, 0x57, 0x06, 0x5b, 0x78, 0xde, 0x70, 0x0b, 0xcd, 0xd5, 0x8b, 0x62, 0xe6, 0x24, 0x1a, 0xd9, 0x1f, 0x6b, 0x59, 0xb2, 0x0f, 0x23, 0xb4, 0x65, 0xf1, 0x8b, 0x8d, 0x18, 0x3f, 0xf7, 0xee, 0x41, 0x3f, 0x6d, 0xae, 0xf7, 0x66, 0x47, 0x9a, 0x48, 0x93, 0x49, 0x87, 0x8f, 0x1e, 0xd5, 0x75, 0x4c, 0x31, 0x5b, 0x40, 0x12, 0x31, 0xf7, 0x6b, 0xb5, 0x76, 0x4d, 0x84, 0xfa, 0xd1, 0x01, 0xd9, 0x95, 0xc5, 0xeb, 0x31, 0x04, 0x39, 0xcb, 0x2c, 0xe7, 0xd8, 0x31, 0x1a, 0x5d, 0xc9, 0x99, 0xe8, 0x31, 0xac, 0x2f, 0x2b, 0xdf, 0x6a, 0x07, 0x44, 0x18, 0x17, 0x97, 0x31, 0x2b, 0x8f, 0x62, 0x6c, 0x5e, 0xc4, 0x75, 0xc9, 0x2b, 0x79, 0x2d, 0x5c, 0x0e, 0x28, 0xe4, 0x45, 0x2f, 0xe0, 0x0a, 0xfd, 0xd0, 0x07, 0x48, 0xbc, 0xb8, 0x17, 0xc7, 0x34, 0x0b, 0x91, 0x7f, 0xbe, 0xc4, 0x10, 0xfc, 0x4b, 0x2f, 0x20, 0x70, 0x01, 0x82, 0xa2, 0xe8, 0xf6, 0x44, 0x31, 0xc3, 0xa0, 0x14, 0xf8, 0x3c, 0x24, 0x85, 0x03, 0xfe, 0xdc, 0x70, 0xf0, 0x2d, 0xf4, 0x9d, 0x37, 0x97, 0x53, 0x16, 0xee, 0x16, 0xdc, 0xb3, 0xe5, 0x7a, 0x21, 0x9d, 0xbd, 0xad, 0x64, 0x41, 0x52, 0x06, 0x05, 0xfc, 0xe4, 0xec, 0x3f, 0x1c, 0x91, 0x2d, 0x18, 0x33, 0xe5, 0x29, 0xbd, 0xd8, 0xb4, 0xf5, 0xae, 0x8b, 0xba, 0x2c, 0x70, 0x49, 0x93, 0x7a, 0xc4, 0x38, 0x72, 0x47, 0x7f, 0x84, 0x5f, 0x07, 0x24, 0x17, 0x53, 0xff, 0x0a, 0x92, 0x9a, 0xf3, 0xf1, 0x24, 0xe1, 0xc9, 0xd4, 0x62, 0xc5, 0x93, 0xb1, 0xff, 0x9e, 0x66, 0xb3, 0xcf, 0x8a, 0x77, 0x63, 0x6b, 0x36, 0xcf, 0xd6, 0x75, 0xfb, 0xd5, 0x67, 0x79, 0x36, 0xa1, 0xef, 0x83, 0x9e, 0x5f, 0xc2, 0xf5, 0x31, 0xae, 0xcb, 0xb8, 0xae, 0xa0, 0x8e, 0x98, 0xcf, 0xe7, 0x5d, 0x40, 0x4d, 0xa7, 0x08, 0x0e, 0x0b, 0x7d, 0xd7, 0xeb, 0x22, 0xb3, 0x1f, 0xb9, 0x7a, 0x27, 0xfb, 0x97, 0x8b, 0xdf, 0x98, 0x77, 0xb2, 0xaf, 0xde, 0x6b, 0xbe, 0x49, 0x6d, 0x6b, 0xf5, 0xdc, 0xeb, 0x31, 0x8f, 0x58, 0x74, 0x99, 0x57, 0xfd, 0x1b, 0x9e, 0x45, 0x72, 0x41, 0x9f, 0x2e, 0x25, 0x7c, 0xa0, 0x38, 0xa3, 0x7e, 0xf0, 0x77, 0xe1, 0xa0, 0x6f, 0x96, 0xfa, 0x71, 0x18, 0x34, 0xf7, 0x53, 0x70, 0x31, 0xa2, 0x18, 0x75, 0x4d, 0xd6, 0x0b, 0xb5, 0xa4, 0x8e, 0x68, 0x7a, 0xa5, 0x91, 0xf7, 0x4a, 0xc5, 0x3a, 0x87, 0xd6, 0x63, 0x84, 0x14, 0xfd, 0x03, 0x79, 0xa5, 0xde, 0xbe, 0x44, 0x8f, 0xdb, 0x41, 0xad, 0xf6, 0x68, 0xcf, 0x8f, 0x94, 0xba, 0xd1, 0x7f, 0x56, 0x02, 0x03, 0x68, 0x4b, 0xf4, 0x2d, 0x09, 0x7d, 0xc5, 0xd4, 0xb2, 0xca, 0x9f, 0xb3, 0x67, 0x25, 0x19, 0x5b, 0x5a, 0x7c, 0xb7, 0xf6, 0xa3, 0xef, 0xb4, 0xc4, 0x01, 0xaf, 0x68, 0x4f, 0xc8, 0x64, 0x66, 0x5f, 0x18, 0x57, 0x25, 0xae, 0x20, 0xae, 0xc0, 0x4d, 0xeb, 0xc7, 0xad, 0xe9, 0xff, 0x93, 0x5b, 0xd3, 0x2c, 0xd7, 0x8e, 0xb5, 0xe5, 0x3b, 0x8b, 0x0b, 0x58, 0x4e, 0xf5, 0x55, 0x38, 0x27, 0x3b, 0xb2, 0x1d, 0xf5, 0xa0, 0x18, 0x3b, 0x62, 0xbb, 0xc9, 0xcc, 0x2b, 0xb4, 0x4c, 0x57, 0xd1, 0x8b, 0x72, 0xe6, 0x44, 0x28, 0xdb, 0x0f, 0x69, 0x64, 0x30, 0x88, 0x10, 0x2b, 0x62, 0xf2, 0x06, 0x07, 0x10, 0x96, 0x33, 0xd4, 0x48, 0xb6, 0x39, 0x41, 0x84, 0x37, 0x52, 0x3e, 0x62, 0xf2, 0xe4, 0x46, 0x92, 0x45, 0x8d, 0xa5, 0xba, 0x2d, 0xce, 0x46, 0x72, 0x20, 0xaf, 0x00, 0xe4, 0x4d, 0xa9, 0x21, 0x70, 0x57, 0x40, 0x5b, 0x27, 0xc2, 0x5c, 0x9b, 0x03, 0x29, 0xf0, 0xd4, 0x4f, 0xce, 0x92, 0x23, 0x6e, 0x9a, 0xb1, 0x92, 0xb2, 0xc9, 0x81, 0xf0, 0xec, 0xdb, 0x81, 0x0f, 0x32, 0xe9, 0x4f, 0x59, 0xa0, 0xea, 0xf8, 0x15, 0x39, 0x99, 0x6e, 0xe7, 0x34, 0x1c, 0x63, 0x4a, 0x7b, 0xe7, 0xf8, 0xec, 0xd9, 0xcb, 0xf5, 0xd5, 0xa7, 0x6c, 0xf0, 0x78, 0x76, 0x7b, 0xa5, 0xb6, 0x02, 0x95, 0x7a, 0xc7, 0x95, 0x33, 0xbb, 0x09, 0x33, 0xbe, 0x15, 0xbf, 0x36, 0xca, 0x31, 0x17, 0xf2, 0xda, 0x7d, 0x82, 0xa1, 0x2f, 0x78, 0xb3, 0x51, 0xd4, 0x62, 0x3a, 0xee, 0x39, 0x65, 0x78, 0xb6, 0xe3, 0x1b, 0xf4, 0xa3, 0x7c, 0xf9, 0x96, 0xc1, 0x0d, 0x67, 0x93, 0xbc, 0x99, 0x9b, 0x90, 0x16, 0x26, 0x4f, 0x25, 0x41, 0x93, 0xf3, 0x10, 0x9f, 0xa3, 0xc7, 0x17, 0xdc, 0x24, 0xde, 0xf6, 0xe5, 0xce, 0xa4, 0x81, 0xf2, 0xc4, 0xaf, 0x8d, 0x6b, 0x48, 0xf5, 0x46, 0x52, 0x4a, 0xfd, 0x5c, 0xc2, 0x4a, 0xe4, 0x38, 0x79, 0xb0, 0x2f, 0xfd, 0x8b, 0x2f, 0x23, 0x47, 0xc4, 0xe5, 0x20, 0xae, 0xe0, 0x26, 0x71, 0x9c, 0x43, 0xde, 0x18, 0x06, 0x53, 0x6b, 0x69, 0xc4, 0xab, 0xac, 0x7b, 0xb5, 0xa7, 0x38, 0x68, 0x95, 0x85, 0xd7, 0xb5, 0x41, 0x77, 0xad, 0x98, 0x91, 0xac, 0x7b, 0x51, 0xcf, 0x26, 0x57, 0x2c, 0x34, 0x3b, 0x84, 0x7a, 0x00, 0x23, 0xfe, 0x24, 0xff, 0x82, 0x3a, 0x4b, 0xb8, 0x5b, 0x72, 0x0e, 0x90, 0x61, 0x11, 0xe6, 0x91, 0xd8, 0x2e, 0xb2, 0x68, 0xf6, 0x0c, 0xbc, 0xda, 0xcd, 0xfd, 0x75, 0xae, 0x8f, 0x35, 0xbd, 0xd1, 0x17, 0xad, 0xfe, 0x70, 0x6c, 0x03, 0xb7, 0xf2, 0xf3, 0xaf, 0xb5, 0x12, 0x1d, 0x2e, 0x09, 0x54, 0x18, 0xca, 0xa5, 0xb2, 0x8c, 0x68, 0x38, 0x5e, 0xc1, 0x76, 0x1b, 0xbe, 0x24, 0xff, 0x62, 0xb6, 0x92, 0x70, 0xb7, 0x58, 0x0f, 0x50, 0x86, 0x78, 0x0f, 0x81, 0xea, 0xf3, 0xbd, 0x12, 0x6d, 0x83, 0xf0, 0x69, 0x9d, 0xe0, 0x74, 0x0d, 0xf5, 0xbb, 0xc9, 0xb8, 0x70, 0x37, 0x59, 0x16, 0xa2, 0xf6, 0x4a, 0xa7, 0xb6, 0x96, 0xf0, 0xfe, 0x11, 0xee, 0x49, 0x9c, 0xbf, 0x3f, 0x10, 0xdb, 0xb0, 0x68, 0x33, 0x4a, 0x59, 0x82, 0xd1, 0x60, 0x69, 0xd8, 0x10, 0x9d, 0x16, 0xcf, 0xfe, 0x6b, 0x7c, 0x31, 0xa3, 0x06, 0x6f, 0x01, 0xee, 0x59, 0x8c, 0xb5, 0xd8, 0x06, 0xa4, 0x08, 0x88, 0x92, 0x1f, 0x16, 0x25, 0xcc, 0xbb, 0xae, 0xe4, 0x6a, 0xbd, 0xe4, 0xaa, 0x4f, 0x2b, 0x39, 0x65, 0xb7, 0x61, 0x19, 0x65, 0xfa, 0x04, 0x4a, 0x6f, 0x96, 0xbd, 0x64, 0xb1, 0x7b, 0xc9, 0x0a, 0x3a, 0x95, 0xcb, 0xd6, 0x78, 0xda, 0x6e, 0x4b, 0x2a, 0x06, 0xa1, 0x56, 0x70, 0x69, 0xbb, 0x39, 0x14, 0x3c, 0xc0, 0x69, 0xe6, 0x01, 0x1c, 0x35, 0xee, 0x6c, 0x17, 0xf0, 0x13, 0x85, 0x1c, 0x03, 0x49, 0xf5, 0x2c, 0xa8, 0x98, 0x05, 0xf7, 0x53, 0xce, 0x85, 0x1e, 0x0f, 0xbe, 0xc2, 0x38, 0x1f, 0xfd, 0xc1, 0xdc, 0x00, 0xf9, 0xe7, 0xa2, 0x97, 0x53, 0x31, 0x7e, 0x9d, 0x54, 0xe2, 0xb5, 0x68, 0xf5, 0x9d, 0xcb, 0xb2, 0x4f, 0xf1, 0xa2, 0xcd, 0x6b, 0xd5, 0x10, 0x66, 0x99, 0x36, 0xf2, 0x79, 0xc9, 0xcf, 0x36, 0x77, 0xde, 0x5a, 0x2a, 0x77, 0x55, 0x2b, 0x94, 0xb1, 0x34, 0x36, 0xcf, 0x9a, 0xcb, 0xd6, 0x0e, 0x98, 0xdd, 0x3b, 0x96, 0xe5, 0xe0, 0x49, 0x4a, 0x14, 0xe3, 0x37, 0x23, 0x4e, 0x19, 0x3c, 0x66, 0x3e, 0x9e, 0x7f, 0x0e, 0xad, 0x17, 0xf5, 0xdd, 0x1a, 0x19, 0xf0, 0xdf, 0x16, 0x79, 0xd9, 0x53, 0xc5, 0xeb, 0x42, 0x73, 0x1b, 0x28, 0x80, 0x2b, 0x3c, 0xf7, 0x2b, 0x14, 0xc2, 0x85, 0x7c, 0x0c, 0xaf, 0x02, 0xab, 0x4e, 0x4e, 0xcb, 0x56, 0x5a, 0xfd, 0x7d, 0xcd, 0x39, 0x90, 0x7a, 0x09, 0xcf, 0xb7, 0x0a, 0x19, 0x76, 0xbf, 0x6a, 0x54, 0x64, 0x60, 0xd4, 0x31, 0xa7, 0x01, 0xd7, 0x57, 0xc8, 0x89, 0x58, 0xb3, 0x58, 0xe1, 0xd9, 0x7f, 0xed, 0x6c, 0x2a, 0x8c, 0xe5, 0xcc, 0x72, 0x2f, 0x79, 0x22, 0xaf, 0x96, 0xcd, 0x93, 0xab, 0x63, 0x7d, 0x3f, 0x3b, 0x8c, 0x3e, 0x70, 0xdc, 0xd7, 0x4a, 0xe1, 0x58, 0xdf, 0x16, 0x70, 0x1a, 0xb2, 0xb9, 0x7d, 0xea, 0x40, 0x97, 0xcb, 0x7c, 0x66, 0x13, 0xcb, 0x79, 0x52, 0x2f, 0x73, 0xef, 0x0b, 0x7b, 0x15, 0x93, 0xf6, 0xe4, 0x01, 0xfe, 0x91, 0xb6, 0x5a, 0xa4, 0x0d, 0x21, 0x77, 0x63, 0x8a, 0xaf, 0xef, 0x7f, 0x96, 0x8c, 0x4b, 0x40, 0xda, 0x50, 0xa6, 0x71, 0xee, 0xa4, 0x50, 0x62, 0xae, 0x97, 0x4a, 0x43, 0x89, 0x48, 0x2b, 0xd5, 0x6b, 0xbd, 0xe2, 0xcc, 0x09, 0x5e, 0xdf, 0x05, 0xdd, 0x6a, 0xe4, 0x36, 0xb4, 0x47, 0xe5, 0x7a, 0x60, 0x29, 0x80, 0xfa, 0x7a, 0x29, 0x14, 0x79, 0xb9, 0xd8, 0x4b, 0xe1, 0xc8, 0xc1, 0x12, 0x2f, 0x55, 0x47, 0x5e, 0xe1, 0xda, 0x5f, 0x3b, 0x6c, 0x76, 0xa3, 0x95, 0x6f, 0x4f, 0x94, 0xcb, 0x51, 0x7e, 0x1f, 0xdd, 0xce, 0x35, 0x15, 0x35, 0x29, 0x93, 0x6f, 0xd9, 0xb2, 0x1e, 0x30, 0x94, 0xbe, 0x79, 0xd8, 0x1e, 0x8d, 0x25, 0xdd, 0xad, 0x14, 0x79, 0xf3, 0xd7, 0xe2, 0x9b, 0x7e, 0xa4, 0xf1, 0x52, 0x44, 0xa4, 0x62, 0x79, 0xda, 0xb6, 0xe8, 0xe1, 0xd8, 0x26, 0x60, 0x6d, 0xdf, 0x1f, 0xc6, 0xda, 0x27, 0x6f, 0x7c, 0x1a, 0xd6, 0x3e, 0xd9, 0x9b, 0x8e, 0x35, 0xdf, 0xad, 0x28, 0x35, 0xd0, 0x4e, 0x7e, 0xda, 0xd3, 0xd7, 0x64, 0x44, 0x5f, 0x08, 0x88, 0x90, 0xb0, 0x16, 0xd2, 0xca, 0x21, 0x61, 0xdf, 0x6d, 0x08, 0x09, 0xa5, 0xa5, 0x09, 0x89, 0x90, 0xea, 0xb4, 0x34, 0xd5, 0x3a, 0x54, 0xb5, 0x9e, 0x29, 0x8b, 0xd6, 0xfb, 0x1b, 0xe4, 0xea, 0xad, 0x83, 0x73, 0x6b, 0x28, 0xe0, 0x9e, 0xef, 0xa9, 0xf6, 0xdd, 0x3b, 0xf8, 0xaf, 0x73, 0x23, 0x14, 0x5e, 0x70, 0x8e, 0x4c, 0xde, 0x3a, 0xf2, 0xf8, 0x6e, 0xdb, 0x72, 0x2f, 0xe7, 0xe1, 0xcf, 0x1b, 0xfa, 0xca, 0xdc, 0x20, 0x55, 0xfb, 0x22, 0xc0, 0xfb, 0x6b, 0x0e, 0xf3, 0xaa, 0xa9, 0x87, 0x7a, 0x44, 0x0b, 0x75, 0x7f, 0x4a, 0x0b, 0x05, 0x91, 0x6e, 0xe0, 0xc6, 0xd6, 0x31, 0xd8, 0x20, 0x13, 0xa2, 0xde, 0x80, 0xe6, 0x36, 0xb9, 0x1a, 0xf2, 0x04, 0x8f, 0x0f, 0xcf, 0x2a, 0x2a, 0xc9, 0x13, 0x3d, 0xae, 0x96, 0xdb, 0x0e, 0x73, 0x6d, 0x2b, 0xd5, 0x6a, 0x6d, 0xf6, 0x6f, 0x83, 0x69, 0x6d, 0xb5, 0x50, 0xb4, 0xd5, 0xbd, 0xa2, 0xad, 0x16, 0x89, 0xb6, 0xba, 0x2f, 0xd5, 0x56, 0x3c, 0xa7, 0xea, 0xed, 0x15, 0xb8, 0xbe, 0xbd, 0x46, 0x37, 0x5e, 0x5f, 0x26, 0x5a, 0xac, 0x14, 0x65, 0xde, 0x36, 0x56, 0xa6, 0xde, 0x66, 0xa3, 0x0a, 0xb7, 0x59, 0xfd, 0xc3, 0x0b, 0x37, 0x35, 0xb0, 0x3d, 0xe2, 0xbc, 0xf2, 0x79, 0xb1, 0xba, 0xb9, 0xc0, 0x82, 0x22, 0x7b, 0x33, 0xd1, 0x9b, 0x4a, 0x42, 0x09, 0x91, 0xaa, 0x6c, 0x0e, 0x5a, 0x01, 0xad, 0x02, 0x3c, 0x8b, 0x76, 0xb1, 0x28, 0x01, 0x4e, 0x1f, 0xc5, 0x15, 0xa7, 0xd1, 0x9d, 0xae, 0x56, 0x2a, 0x9f, 0xb9, 0x90, 0x8c, 0x33, 0x9b, 0xc4, 0x6e, 0x1b, 0x46, 0x66, 0xfa, 0xd7, 0x57, 0x47, 0xaf, 0xff, 0x7a, 0x82, 0xcd, 0x97, 0x36, 0x2f, 0xca, 0x0e, 0x72, 0x1a, 0x98, 0x56, 0x32, 0x1d, 0xc3, 0xdc, 0x9c, 0xd3, 0xb4, 0x1c, 0xfd, 0xb6, 0x94, 0x71, 0x11, 0x75, 0xa9, 0x6a, 0x3c, 0x7f, 0x4e, 0x88, 0x72, 0x31, 0x0b, 0xe6, 0x69, 0x74, 0x51, 0x1d, 0xd5, 0xe8, 0xa5, 0x7a, 0x4d, 0x29, 0x4f, 0x51, 0xc0, 0x45, 0x9b, 0xf1, 0x6d, 0x0e, 0xbe, 0xb5, 0xb6, 0x7a, 0x44, 0xea, 0x4a, 0x2d, 0xb5, 0xaf, 0x5b, 0xa7, 0xa1, 0xd2, 0xa2, 0xdd, 0x82, 0xaa, 0x59, 0x42, 0x56, 0xcc, 0xbd, 0x96, 0x58, 0x1a, 0x15, 0x33, 0x6a, 0xeb, 0xaf, 0x59, 0xb2, 0xb5, 0xff, 0xd1, 0x78, 0x88, 0x57, 0x37, 0xfb, 0xc1, 0xb1, 0xc6, 0x4b, 0x1d, 0x98, 0xdb, 0x31, 0x07, 0x98, 0x15, 0xa3, 0x23, 0x26, 0xd7, 0x0b, 0xee, 0x39, 0x5f, 0x5b, 0xa7, 0x67, 0xae, 0xb4, 0x1f, 0xbc, 0x57, 0x3c, 0x0b, 0x4f, 0x16, 0x3c, 0x59, 0x12, 0x27, 0x9f, 0x7f, 0xfd, 0xab, 0x9a, 0x15, 0x0e, 0xdb, 0x22, 0x31, 0xf5, 0xcb, 0x42, 0x8d, 0x8a, 0xe5, 0xdd, 0x24, 0xee, 0xb3, 0x1b, 0x29, 0x97, 0x8c, 0xfc, 0x34, 0xad, 0x11, 0x33, 0xa6, 0xc9, 0xce, 0x4f, 0x2b, 0xe8, 0x73, 0x34, 0x89, 0xd3, 0xa2, 0x94, 0x62, 0x6d, 0x1d, 0x5f, 0xd8, 0x5f, 0xe6, 0x55, 0x27, 0x53, 0x6b, 0xdb, 0x6c, 0xef, 0xe6, 0xaa, 0x71, 0x66, 0x83, 0xd3, 0x73, 0xc5, 0xd1, 0x9f, 0xda, 0xc2, 0x37, 0xb5, 0x96, 0x26, 0x83, 0x24, 0xd6, 0x9d, 0xa5, 0xc1, 0xe4, 0xc4, 0x95, 0x93, 0x19, 0x01, 0x2a, 0x19, 0x8b, 0xa1, 0x09, 0xe1, 0x65, 0x98, 0x23, 0x4a, 0x74, 0x8e, 0x69, 0x3b, 0xf2, 0xe8, 0x2c, 0x46, 0x2a, 0xf0, 0x37, 0x0e, 0xcc, 0xeb, 0xc6, 0x76, 0xa3, 0xa7, 0x92, 0xa5, 0x57, 0x4b, 0x80, 0x26, 0x2d, 0xc9, 0xd5, 0xe4, 0xd7, 0x76, 0xc3, 0xbb, 0x3f, 0x42, 0x5e, 0x52, 0x7f, 0x57, 0xab, 0x54, 0x6c, 0x00, 0xf6, 0xac, 0xc0, 0x67, 0xd9, 0x9b, 0x03, 0x7e, 0x6a, 0x08, 0xce, 0xee, 0x32, 0x53, 0x0c, 0x25, 0x80, 0x7b, 0x97, 0xf6, 0x24, 0x97, 0x9c, 0xb9, 0x23, 0x4a, 0x2e, 0x79, 0x5c, 0x46, 0x1c, 0x9a, 0x51, 0x4b, 0x15, 0x3e, 0x49, 0xcc, 0x41, 0x45, 0x68, 0x1f, 0xdf, 0x9c, 0x4e, 0x55, 0x25, 0x3f, 0x24, 0xca, 0x62, 0xbc, 0x85, 0x94, 0x8a, 0x14, 0x8c, 0xe3, 0xb2, 0x23, 0xa0, 0x2b, 0x13, 0xd0, 0xe5, 0xdc, 0x24, 0x2e, 0xda, 0x16, 0x4e, 0x93, 0x32, 0xf5, 0x9d, 0x55, 0xf0, 0x59, 0x16, 0xc1, 0x2f, 0x7b, 0xc9, 0x8c, 0xb9, 0xc8, 0x02, 0xbe, 0x39, 0x35, 0x1f, 0x9d, 0xd4, 0xf9, 0xe6, 0x88, 0x58, 0xf5, 0x30, 0x3b, 0xea, 0x20, 0xcf, 0x7f, 0x2c, 0x56, 0x35, 0x3f, 0xba, 0x1b, 0x90, 0xa8, 0xd7, 0xc4, 0xef, 0xa8, 0xf8, 0xbd, 0x02, 0xbe, 0xb0, 0xc8, 0xf0, 0x08, 0xfa, 0xd5, 0xbb, 0x33, 0x8b, 0x5c, 0x54, 0xbf, 0x19, 0x7c, 0xf1, 0xfd, 0x5f, 0xe0, 0xb5, 0x87, 0x06, 0x48, 0xfb, 0x87, 0x2b, 0xca, 0xa5, 0x64, 0xa7, 0x8a, 0x77, 0xa3, 0xfa, 0x35, 0xf1, 0xbb, 0xb8, 0xb0, 0x93, 0xc8, 0x9a, 0xad, 0x2e, 0x5a, 0x43, 0x7f, 0xff, 0xcb, 0x8e, 0x8f, 0x8f, 0x7e, 0x27, 0xf8, 0x81, 0xe4, 0x40, 0xfe, 0x0b, 0xe5, 0x8c, 0x55, 0xbc, 0x4e, 0x56, 0xc7, 0x2b, 0x5a, 0x63, 0x6b, 0xf0, 0xf5, 0x4b, 0x72, 0xb5, 0xb5, 0xf7, 0x84, 0x4b, 0xdc, 0x25, 0xf0, 0x6a, 0x4f, 0x28, 0x76, 0xf1, 0x6c, 0x49, 0xb8, 0x71, 0xd7, 0x6c, 0x94, 0xbb, 0x45, 0xc8, 0x94, 0xf8, 0x5a, 0x25, 0xdb, 0xcd, 0xeb, 0x26, 0xab, 0xc4, 0xba, 0xc9, 0x22, 0xa5, 0xe5, 0x0b, 0xcb, 0x69, 0x92, 0xba, 0x58, 0x89, 0x8b, 0xfb, 0xd7, 0x94, 0xfb, 0x9d, 0x08, 0xaf, 0x28, 0x24, 0x5b, 0x29, 0xf3, 0x42, 0xf3, 0x79, 0x87, 0x7b, 0x74, 0xc4, 0x43, 0xe0, 0x72, 0x44, 0x3b, 0xa2, 0x37, 0x19, 0x9b, 0x4c, 0x79, 0x2e, 0xfa, 0xa2, 0x62, 0xc4, 0x6f, 0x26, 0xf8, 0x2c, 0xa3, 0xc0, 0xaa, 0x15, 0x3d, 0xd0, 0x26, 0x9e, 0x4c, 0xae, 0x99, 0xbc, 0x2e, 0x13, 0xa5, 0x26, 0x93, 0xcb, 0x85, 0xd1, 0x6d, 0x71, 0xcd, 0x52, 0x17, 0x2a, 0x26, 0x51, 0xde, 0xfd, 0x72, 0xc8, 0xd3, 0x98, 0xb6, 0x2e, 0x43, 0x6a, 0xa9, 0x3c, 0x4b, 0xad, 0xfb, 0x42, 0xa5, 0xda, 0xe0, 0x24, 0xaf, 0xdb, 0x18, 0x02, 0xcd, 0x31, 0x79, 0xcb, 0x01, 0x29, 0xcf, 0x01, 0xeb, 0x3d, 0x24, 0x74, 0x2d, 0xd4, 0xfe, 0xf5, 0x89, 0x96, 0x47, 0x0f, 0x57, 0x5e, 0x50, 0xf7, 0xb7, 0x95, 0xda, 0x39, 0x96, 0x1c, 0x26, 0x86, 0xec, 0x13, 0x4b, 0xfb, 0x6d, 0x7b, 0x92, 0x4b, 0x79, 0xed, 0xec, 0x08, 0xf7, 0x29, 0x6b, 0xf6, 0xc6, 0xa4, 0xe0, 0xbf, 0x02, 0xb2, 0x16, 0xef, 0xe6, 0x52, 0x12, 0x46, 0x5e, 0x1b, 0xc2, 0xd7, 0x4b, 0xda, 0x16, 0xf1, 0xd7, 0xd6, 0xf1, 0xaf, 0x6f, 0xc7, 0xd7, 0xb9, 0x15, 0xb3, 0xd4, 0x64, 0x6c, 0xde, 0xf7, 0x9a, 0xd5, 0xce, 0xd2, 0x66, 0xb5, 0x3b, 0x56, 0xbb, 0xf3, 0x82, 0xba, 0x56, 0xc0, 0x92, 0xc1, 0xf3, 0xa0, 0x80, 0xc6, 0x38, 0xef, 0xca, 0x27, 0x97, 0xeb, 0xb6, 0x15, 0x93, 0x1e, 0x6e, 0xd1, 0xc3, 0x33, 0xeb, 0xb6, 0x95, 0x93, 0xbe, 0x8f, 0xcd, 0xe1, 0x92, 0x1e, 0x6e, 0xaa, 0xdb, 0x76, 0x77, 0x40, 0x5d, 0xa8, 0xa7, 0x36, 0xe9, 0xa1, 0x93, 0xea, 0xb6, 0x95, 0x06, 0xc6, 0x53, 0x0b, 0x4b, 0xb9, 0x06, 0xd4, 0x98, 0xe3, 0xcc, 0x75, 0xdb, 0xa6, 0x93, 0x33, 0xb3, 0xba, 0xe7, 0xd5, 0x67, 0xd4, 0x45, 0xf3, 0xce, 0x4a, 0x15, 0xc0, 0x7d, 0xaa, 0xb7, 0xdf, 0x27, 0xf4, 0x49, 0x7a, 0x13, 0x75, 0x90, 0x0a, 0xd9, 0x66, 0xae, 0x59, 0xac, 0xe5, 0x5d, 0xc3, 0xf5, 0x11, 0x43, 0x32, 0x17, 0xf8, 0xc5, 0x2f, 0x4a, 0x11, 0xe5, 0xcf, 0x52, 0xef, 0x17, 0x16, 0xed, 0x9c, 0xfb, 0xd7, 0xbc, 0x6c, 0x31, 0x69, 0xc4, 0xd3, 0x62, 0x94, 0x93, 0xc1, 0xf3, 0x03, 0xf7, 0xc3, 0x3b, 0xf6, 0x22, 0xc7, 0x30, 0xf0, 0xfa, 0x8c, 0xfa, 0x11, 0xfa, 0xcb, 0x26, 0xb9, 0x51, 0x72, 0x2c, 0xb8, 0xa0, 0x5e, 0xc1, 0x78, 0xb3, 0xb8, 0x82, 0x6c, 0xdf, 0xa7, 0x2e, 0x44, 0x4f, 0x5b, 0x24, 0xad, 0xe7, 0x71, 0xaa, 0xed, 0x5c, 0x15, 0x86, 0xd4, 0x85, 0xd2, 0x43, 0xac, 0x49, 0xdf, 0x41, 0xb9, 0xc8, 0x59, 0xa9, 0xdb, 0xd7, 0x97, 0x00, 0xdd, 0x87, 0xac, 0x9c, 0x06, 0x8f, 0xd7, 0x82, 0xf2, 0x17, 0xa1, 0x0d, 0x91, 0x03, 0x43, 0xe2, 0x9d, 0xe4, 0x95, 0x18, 0x02, 0x51, 0xd7, 0x14, 0x0c, 0x66, 0xf4, 0xe6, 0xe8, 0x38, 0x1c, 0x90, 0xe3, 0xa2, 0xba, 0x9c, 0xf3, 0x74, 0x5a, 0xad, 0x5f, 0x45, 0xab, 0x7e, 0x24, 0xd6, 0x7a, 0x64, 0x21, 0xb1, 0x7d, 0x45, 0xbd, 0x2c, 0x37, 0x83, 0xde, 0xdf, 0x35, 0xf8, 0x0c, 0x99, 0x85, 0x2c, 0xdd, 0x4c, 0x56, 0x6d, 0xcf, 0x86, 0xd7, 0xf5, 0xc7, 0x57, 0x36, 0x35, 0x29, 0xd7, 0x2b, 0x09, 0x3e, 0x2e, 0x1b, 0x75, 0xf2, 0x52, 0x0e, 0xe6, 0x2d, 0x2f, 0xe5, 0x69, 0x7b, 0x60, 0x9f, 0x2c, 0xd4, 0xd7, 0x2d, 0x53, 0xab, 0x96, 0x11, 0x57, 0x1d, 0xfa, 0xb6, 0x2d, 0xba, 0x9c, 0x4c, 0x71, 0x1b, 0x7a, 0x74, 0x41, 0x14, 0xd2, 0x6e, 0x3c, 0x3b, 0x8a, 0x5e, 0xd3, 0x6c, 0x8e, 0xa2, 0x37, 0x37, 0x91, 0xf4, 0x52, 0x54, 0xf4, 0x7c, 0x27, 0xe4, 0x57, 0x05, 0x72, 0x9e, 0xd7, 0xcc, 0xf0, 0xcf, 0xca, 0x77, 0x62, 0x3c, 0xcb, 0xfc, 0x85, 0x88, 0x75, 0x5c, 0x17, 0xeb, 0x40, 0x2c, 0xde, 0x3c, 0x52, 0x13, 0xcf, 0x2a, 0xbf, 0x5b, 0xe5, 0xa2, 0x22, 0x8b, 0x09, 0x38, 0x34, 0x5a, 0xe4, 0x79, 0xe3, 0x3b, 0xc7, 0xf5, 0x9b, 0xd9, 0x8a, 0xda, 0xf0, 0x31, 0xdb, 0x82, 0x4b, 0xb9, 0x68, 0x67, 0x32, 0x7c, 0x80, 0x3c, 0x6d, 0x22, 0xcf, 0xfc, 0xfa, 0x3e, 0x96, 0xca, 0xe3, 0xc6, 0x76, 0xd0, 0xa4, 0xf6, 0x40, 0x9b, 0x01, 0xa3, 0xd7, 0x72, 0x6e, 0x57, 0xb2, 0x0b, 0x14, 0xca, 0x38, 0x56, 0x72, 0x41, 0xe5, 0x08, 0x99, 0x59, 0x6e, 0x8f, 0x1b, 0xd7, 0x20, 0xdd, 0x9a, 0x40, 0xbb, 0xc1, 0x33, 0x93, 0x2c, 0x17, 0x7e, 0xd4, 0xbd, 0x0e, 0x5f, 0x19, 0xd7, 0x18, 0xf7, 0x27, 0x13, 0xa6, 0x4e, 0xf3, 0x81, 0x64, 0xdc, 0xb1, 0xc6, 0xb0, 0xbf, 0x0b, 0x25, 0x6c, 0xea, 0x0c, 0x1e, 0xe8, 0x8a, 0xe7, 0x41, 0x1e, 0xb7, 0xa2, 0x4d, 0x3c, 0xc6, 0x6a, 0x8c, 0xb7, 0xef, 0x89, 0x15, 0xda, 0x4c, 0xa5, 0x14, 0xe9, 0xbb, 0x44, 0xfa, 0xae, 0xb8, 0xbb, 0xdd, 0xb0, 0x87, 0xe7, 0x83, 0xc5, 0x6b, 0x82, 0xfb, 0x93, 0xf1, 0x02, 0x86, 0x4b, 0x7c, 0x23, 0xe9, 0xdf, 0x34, 0xf2, 0x37, 0xf9, 0x98, 0x43, 0x30, 0x4f, 0x55, 0xd9, 0x9b, 0xa4, 0xbe, 0x45, 0x1b, 0x78, 0xff, 0xa7, 0x33, 0xa3, 0xb0, 0x5a, 0x5b, 0xe5, 0xe0, 0xfd, 0x5a, 0x39, 0x5c, 0x75, 0x41, 0x1d, 0xf5, 0x34, 0x69, 0xfb, 0xb2, 0x78, 0x3e, 0x2f, 0x87, 0xed, 0x51, 0xfd, 0xfd, 0x71, 0xaf, 0x25, 0xcd, 0xbe, 0x3a, 0x57, 0xfc, 0x1a, 0xbd, 0xb4, 0xe0, 0xca, 0xb5, 0xf2, 0xba, 0x1d, 0x90, 0x42, 0xad, 0x7a, 0x7c, 0x96, 0x88, 0xc9, 0x4b, 0x59, 0x61, 0x8b, 0xb8, 0x1c, 0x86, 0x07, 0x10, 0xc8, 0x1a, 0xfe, 0x59, 0x7e, 0x52, 0x8c, 0x95, 0xe7, 0x25, 0xc7, 0x78, 0x9b, 0xc8, 0x22, 0x2c, 0x88, 0xb0, 0x05, 0xb8, 0x7e, 0xfe, 0x5a, 0xc2, 0x6c, 0x66, 0x5b, 0xd7, 0x69, 0x09, 0xa3, 0x1c, 0x52, 0x24, 0xb9, 0xb2, 0xad, 0x6c, 0xf0, 0x69, 0x63, 0x35, 0xfa, 0xd3, 0xf1, 0xc2, 0x4a, 0x6d, 0x37, 0xa2, 0x70, 0xbe, 0x7a, 0xba, 0x30, 0xac, 0x8e, 0xe8, 0x3d, 0xeb, 0x78, 0xaa, 0x67, 0xe9, 0x70, 0xe4, 0x08, 0x08, 0xac, 0xe2, 0x37, 0x5b, 0xfc, 0x5a, 0xd0, 0xaf, 0x25, 0x6f, 0x21, 0xb8, 0x0f, 0xb4, 0xf2, 0x2f, 0xb6, 0x8b, 0xbd, 0xc1, 0x8b, 0xe9, 0x35, 0x04, 0x84, 0xbc, 0x5b, 0x96, 0x17, 0xfa, 0x61, 0x0a, 0x6f, 0x9f, 0xf8, 0x05, 0xe7, 0x63, 0x44, 0x9b, 0x97, 0xa7, 0x60, 0x05, 0x5f, 0x6b, 0xe1, 0x78, 0xa9, 0x4d, 0xe8, 0x79, 0x6c, 0x14, 0xeb, 0x4e, 0x3d, 0x89, 0x82, 0x54, 0x5f, 0x10, 0xf1, 0x19, 0xd7, 0xc5, 0xf7, 0x26, 0x38, 0xd4, 0x98, 0xea, 0x63, 0x5a, 0x68, 0x5a, 0xef, 0x62, 0x1d, 0x89, 0x27, 0xbd, 0xd9, 0x37, 0xc3, 0x70, 0xd5, 0x95, 0xd1, 0x13, 0x75, 0x5b, 0x05, 0x86, 0xb3, 0x6f, 0x8a, 0x61, 0x8e, 0xcb, 0xd1, 0xe6, 0xea, 0x89, 0xb3, 0xbd, 0x9d, 0x69, 0x9e, 0x8c, 0xde, 0x5a, 0xcd, 0xab, 0x21, 0x18, 0x5b, 0xc0, 0xca, 0x6a, 0x2a, 0xc5, 0x57, 0xf6, 0x90, 0x6c, 0x3c, 0xd5, 0x17, 0x4e, 0x3a, 0x82, 0x8f, 0x1e, 0x56, 0xac, 0x83, 0xbd, 0x8a, 0x31, 0x56, 0xf9, 0xd6, 0xc1, 0x17, 0x06, 0x9a, 0x2f, 0x17, 0xbf, 0x12, 0xeb, 0xdb, 0xdb, 0xb7, 0xe4, 0xbc, 0x48, 0x6d, 0x15, 0xa9, 0x2d, 0xbe, 0xd0, 0xe0, 0x21, 0xe6, 0x2d, 0x79, 0x8f, 0xb4, 0x98, 0x57, 0xc8, 0x42, 0xea, 0x3e, 0x57, 0xb3, 0xba, 0xd7, 0x29, 0x9d, 0x7a, 0x38, 0xdc, 0xb3, 0x86, 0xca, 0xcc, 0x85, 0x55, 0xea, 0x61, 0xf0, 0xda, 0x07, 0x8f, 0x3d, 0xa3, 0xee, 0x53, 0x4c, 0xb1, 0xe4, 0x6f, 0x2e, 0xa8, 0x7b, 0x7f, 0xfa, 0x4a, 0xf3, 0xc7, 0x9d, 0x93, 0x8e, 0xf4, 0x7a, 0xaa, 0x3b, 0x26, 0x1d, 0x4a, 0x3a, 0x42, 0x7b, 0xd7, 0x2f, 0xcd, 0x02, 0x52, 0xd7, 0xaf, 0x99, 0x74, 0x64, 0x9d, 0x62, 0xf6, 0x50, 0xf5, 0xfa, 0x8e, 0x49, 0x47, 0xba, 0xe5, 0x5a, 0x7b, 0x65, 0x11, 0xad, 0x31, 0x38, 0xb2, 0x0b, 0xa3, 0x6a, 0xbf, 0x52, 0xfa, 0xd6, 0x05, 0x75, 0x9f, 0x63, 0x9e, 0xa7, 0x19, 0xcf, 0xa6, 0xd8, 0xc6, 0x37, 0x91, 0xcf, 0xf3, 0xaf, 0x35, 0x7f, 0x5c, 0x58, 0xa7, 0xf6, 0x7b, 0xe6, 0xc5, 0x1e, 0xf9, 0xa7, 0x37, 0xe2, 0xe6, 0xd8, 0xba, 0x86, 0xf5, 0x45, 0x59, 0x4a, 0xb6, 0x27, 0xe4, 0x40, 0xaa, 0x4e, 0xc3, 0x81, 0x75, 0xf1, 0x1c, 0xa5, 0x20, 0xba, 0x3e, 0x91, 0xe3, 0xa8, 0xfa, 0xf5, 0xa1, 0x7f, 0xba, 0xa0, 0x1e, 0x5e, 0xb6, 0x5f, 0x31, 0x39, 0x27, 0xbb, 0x22, 0x8a, 0x49, 0x4b, 0x23, 0x57, 0x35, 0xf4, 0x75, 0x24, 0x3d, 0xe6, 0xf3, 0xdf, 0x67, 0x1a, 0x49, 0x2a, 0xa0, 0x4a, 0x9e, 0xff, 0xfe, 0x17, 0x42, 0xea, 0x2b, 0x8e, 0xac, 0xed, 0x8f, 0xa0, 0x36, 0x47, 0xb8, 0xed, 0x98, 0xa2, 0x74, 0x52, 0xc1, 0x2c, 0xf5, 0x95, 0x68, 0x77, 0xab, 0xf1, 0xdf, 0x9f, 0x55, 0x8c, 0xe1, 0xee, 0xd3, 0x3f, 0xa8, 0x5e, 0x7f, 0xa6, 0x0f, 0xbd, 0x6e, 0x50, 0x36, 0x8a, 0xfb, 0xd1, 0x36, 0x7a, 0xec, 0x75, 0xde, 0x2f, 0x66, 0x3d, 0x0f, 0xbf, 0x15, 0xb9, 0x1f, 0x5a, 0xf8, 0x8c, 0x7a, 0xe8, 0xe0, 0x09, 0x50, 0xc1, 0x41, 0xbc, 0x3d, 0x31, 0xd8, 0xbf, 0xcb, 0xec, 0x08, 0x58, 0xfd, 0x36, 0x1a, 0x40, 0x4e, 0xdc, 0x2a, 0xa4, 0x46, 0x9f, 0x51, 0x8f, 0x20, 0xc7, 0x5d, 0x8a, 0x74, 0xfa, 0xc9, 0x2f, 0x04, 0xd4, 0x17, 0x40, 0xeb, 0xa6, 0x89, 0x96, 0xcc, 0x76, 0x04, 0x23, 0xed, 0x66, 0xf2, 0x66, 0x83, 0xd2, 0x3e, 0x8d, 0xf1, 0xb8, 0x2b, 0x25, 0x47, 0x0c, 0x3e, 0xa3, 0x1e, 0xb5, 0x37, 0xab, 0xbb, 0xec, 0xb3, 0x90, 0xe3, 0xf3, 0x36, 0xe4, 0x98, 0x93, 0x73, 0xd0, 0xf4, 0x85, 0xa0, 0x7a, 0x20, 0x67, 0x96, 0xfa, 0x42, 0xf7, 0x2c, 0xf5, 0x40, 0x6e, 0x57, 0xec, 0x11, 0x50, 0xe4, 0xa7, 0x95, 0xdc, 0xc2, 0xa0, 0x7a, 0xe8, 0x1f, 0xdf, 0x00, 0xf6, 0x78, 0x1f, 0xbd, 0x5f, 0x7d, 0x02, 0xef, 0x3b, 0xb5, 0x11, 0xd0, 0xff, 0xc8, 0x12, 0x52, 0x17, 0x03, 0x2a, 0x8e, 0x79, 0x42, 0xed, 0x47, 0x6e, 0x3b, 0x63, 0x1b, 0x17, 0x3d, 0xa3, 0xf6, 0x83, 0xce, 0xcf, 0xa4, 0xcc, 0xfe, 0x8d, 0x0f, 0x6a, 0x9c, 0x27, 0x9e, 0x96, 0xec, 0x3b, 0xbe, 0x4e, 0x9e, 0xb4, 0xef, 0x19, 0x60, 0x8f, 0xae, 0x95, 0x69, 0xdf, 0xdb, 0x83, 0xe9, 0xdc, 0xd7, 0xf8, 0x7a, 0xbe, 0xb6, 0x36, 0x69, 0x1f, 0x93, 0xf0, 0x47, 0x03, 0x9a, 0x2e, 0x5a, 0x39, 0x41, 0xf2, 0xcf, 0x75, 0x79, 0xc9, 0xe6, 0xf0, 0x92, 0xec, 0xf4, 0x92, 0x43, 0x70, 0x1a, 0x0e, 0xcc, 0x60, 0x1b, 0x12, 0x76, 0xbb, 0xb1, 0xba, 0xab, 0x6d, 0xd2, 0xc1, 0xa4, 0x95, 0x6d, 0xdc, 0x77, 0x9d, 0xd9, 0x34, 0x30, 0x3b, 0x42, 0x6c, 0xc1, 0x1e, 0x19, 0x08, 0x27, 0x75, 0x9f, 0x10, 0x06, 0xbb, 0x54, 0xdd, 0xb5, 0x7a, 0xd2, 0xc1, 0xde, 0x35, 0x86, 0x7f, 0x7b, 0xe6, 0xcc, 0x46, 0xb6, 0xe8, 0x7f, 0xf3, 0xa0, 0xcd, 0x9a, 0x93, 0x79, 0xd0, 0x78, 0xef, 0xc1, 0x48, 0x77, 0xe4, 0x60, 0xb8, 0xdb, 0x9c, 0x41, 0xc6, 0x44, 0x36, 0x78, 0x92, 0x2c, 0xcd, 0x9b, 0x45, 0x38, 0x08, 0x8a, 0x16, 0x44, 0x68, 0x66, 0x22, 0x8b, 0x77, 0xae, 0x31, 0x52, 0xa5, 0x76, 0x03, 0xde, 0x4d, 0xfc, 0xce, 0x9e, 0x3b, 0xe2, 0x78, 0x8f, 0x66, 0x34, 0x99, 0x99, 0xc3, 0xc0, 0x9b, 0x31, 0x1a, 0x4c, 0x18, 0x37, 0x1a, 0x15, 0x63, 0x75, 0xe6, 0xeb, 0x46, 0xeb, 0xba, 0xda, 0x77, 0xa8, 0x5c, 0xac, 0x4e, 0x0c, 0xf2, 0xea, 0x04, 0x73, 0xdd, 0xde, 0x6a, 0x2a, 0xf7, 0xce, 0xa3, 0x52, 0x6f, 0x94, 0x02, 0xc5, 0x81, 0x72, 0x03, 0x24, 0xf8, 0x50, 0xe4, 0x15, 0x31, 0xeb, 0xe4, 0xde, 0x38, 0xe3, 0x18, 0x4e, 0x08, 0xdd, 0x52, 0xb3, 0x77, 0x8a, 0xa3, 0x9c, 0x86, 0xff, 0x6a, 0xaf, 0x1c, 0x02, 0x05, 0xd2, 0x42, 0x2c, 0x5e, 0x48, 0xaa, 0xf6, 0x50, 0xdd, 0xa3, 0x45, 0x24, 0x42, 0x20, 0xf3, 0x71, 0x2c, 0x8f, 0xc9, 0xa2, 0x47, 0xc4, 0xbb, 0x85, 0x63, 0x99, 0x12, 0x00, 0x97, 0x1e, 0x96, 0x34, 0x9a, 0x4c, 0xdf, 0x7d, 0xfd, 0xf8, 0xc6, 0xc7, 0x5e, 0x8f, 0xae, 0x6f, 0x32, 0xed, 0x58, 0x7f, 0x62, 0x7d, 0x27, 0x69, 0x5c, 0xb0, 0x5c, 0xf5, 0xe6, 0xab, 0xfd, 0x90, 0x74, 0xdd, 0xf4, 0xf8, 0x7a, 0x84, 0x78, 0x44, 0xc8, 0x2b, 0x7a, 0x48, 0x8f, 0x6c, 0x1c, 0xdc, 0x08, 0xee, 0xdb, 0xe8, 0x32, 0xec, 0xdc, 0x88, 0xe7, 0xef, 0xbc, 0xc4, 0xcf, 0x93, 0x76, 0x7e, 0x27, 0xba, 0xae, 0x95, 0x32, 0xfa, 0xa2, 0xbd, 0xf8, 0xed, 0x66, 0x2f, 0x1c, 0x09, 0xca, 0x58, 0x13, 0x2d, 0x64, 0x6a, 0x5b, 0x84, 0x51, 0xad, 0x98, 0x8b, 0xb2, 0x79, 0x96, 0x93, 0x1c, 0x62, 0x67, 0xda, 0x04, 0x19, 0x80, 0x29, 0x30, 0xb8, 0xd8, 0x4a, 0x5c, 0x2f, 0xfc, 0xcf, 0x31, 0x0a, 0x2c, 0x15, 0x99, 0x99, 0x37, 0x4e, 0xcd, 0x8e, 0xa8, 0x55, 0xa0, 0x7e, 0x33, 0xf2, 0x72, 0x8b, 0xbc, 0xcc, 0xde, 0x95, 0x90, 0x00, 0x8b, 0x15, 0x50, 0x27, 0xef, 0x14, 0x6d, 0x3e, 0xe5, 0x5d, 0x15, 0xcc, 0x96, 0xcf, 0x51, 0x31, 0x38, 0xda, 0xef, 0x6b, 0xb9, 0x3b, 0x3c, 0x62, 0xce, 0xcd, 0x16, 0x6b, 0x39, 0xfa, 0x9c, 0x8b, 0xb6, 0x5a, 0x8e, 0x10, 0x2f, 0x95, 0xcb, 0xf3, 0x30, 0x5b, 0x59, 0x84, 0x84, 0xca, 0xb2, 0x71, 0x86, 0xf7, 0x16, 0x5e, 0x75, 0x07, 0x7f, 0x92, 0x85, 0xb0, 0xa5, 0x5a, 0xbe, 0x45, 0xaf, 0x02, 0x53, 0xc5, 0x45, 0x8f, 0xcc, 0xcd, 0x04, 0x07, 0x65, 0xc4, 0x95, 0x81, 0xeb, 0x16, 0x70, 0x52, 0x92, 0xb6, 0x3e, 0xf4, 0x8b, 0xed, 0x42, 0x9b, 0xd6, 0x23, 0x28, 0x30, 0xf8, 0x0a, 0x40, 0x9c, 0x4e, 0x81, 0x01, 0x6b, 0x73, 0xae, 0x28, 0xad, 0x74, 0x62, 0x8c, 0x06, 0x41, 0xaa, 0x7e, 0x5a, 0x18, 0xa8, 0x71, 0xad, 0xde, 0x8a, 0x66, 0xad, 0x5d, 0xb9, 0xa5, 0xd2, 0xdb, 0x95, 0x5b, 0x72, 0xbc, 0x5d, 0xf5, 0x76, 0x1c, 0x6b, 0x57, 0xc6, 0x80, 0xf8, 0x22, 0x40, 0xf5, 0x82, 0xd2, 0x43, 0x6a, 0xe6, 0x36, 0x7e, 0x7e, 0x60, 0xa9, 0xd1, 0x1b, 0xa1, 0xf0, 0xff, 0x9d, 0xb6, 0x36, 0x3c, 0xc1, 0x6d, 0x6d, 0xd8, 0xa1, 0xb5, 0xb5, 0xe1, 0x91, 0xe0, 0x79, 0x40, 0x1b, 0xa1, 0x48, 0xe5, 0x39, 0xdc, 0x6b, 0xa8, 0xf6, 0x1f, 0xdf, 0x08, 0xa1, 0x4d, 0x3a, 0x08, 0x3d, 0x7c, 0xa1, 0xb7, 0x92, 0x16, 0x15, 0x65, 0xba, 0x8d, 0x1e, 0xf6, 0x24, 0x54, 0x02, 0xf8, 0x22, 0x8b, 0x9e, 0xa3, 0x88, 0x6c, 0x6b, 0x48, 0xb6, 0x7f, 0xb2, 0x27, 0xb9, 0x8c, 0x0c, 0xf9, 0x18, 0x8d, 0x5e, 0x2a, 0xfe, 0xb7, 0x5d, 0x03, 0x5a, 0x6e, 0x59, 0xff, 0x70, 0xc4, 0xc5, 0xda, 0x6d, 0x97, 0x41, 0xbd, 0x6e, 0xf5, 0x1a, 0xf0, 0xc5, 0xa2, 0x48, 0x47, 0x1f, 0xfb, 0x36, 0x2a, 0x4e, 0x51, 0x2d, 0x8c, 0xfe, 0x5a, 0xe7, 0xb4, 0x63, 0x49, 0xb9, 0x1a, 0x70, 0x5b, 0xb9, 0xee, 0x5e, 0xa6, 0x08, 0x8b, 0x23, 0x1d, 0x3b, 0xc7, 0xf6, 0xa5, 0xb9, 0x24, 0x87, 0x4b, 0x1d, 0x3d, 0x9a, 0x14, 0x7d, 0xbe, 0x67, 0x99, 0x59, 0xce, 0x18, 0xec, 0xea, 0xef, 0x5e, 0x92, 0xf3, 0x62, 0xf7, 0x32, 0xa2, 0xad, 0x90, 0xe2, 0xea, 0x07, 0xbb, 0xfb, 0x7b, 0x1e, 0x24, 0x5a, 0x7f, 0x80, 0x79, 0x4d, 0x7b, 0x94, 0xfd, 0xf1, 0xd8, 0x64, 0x43, 0xfa, 0xcc, 0xe6, 0x61, 0xa9, 0xc4, 0x0c, 0x68, 0x76, 0x83, 0x02, 0x05, 0xf4, 0x35, 0xa6, 0x0c, 0x6f, 0x36, 0x97, 0xb2, 0x58, 0xec, 0x60, 0xaf, 0x22, 0x25, 0x9f, 0xdb, 0x35, 0xf2, 0xad, 0x52, 0xcc, 0xfa, 0x91, 0x76, 0xfc, 0x66, 0xd7, 0xed, 0xbf, 0xba, 0x38, 0xd6, 0xc3, 0xab, 0x28, 0xfb, 0x7b, 0x96, 0x9c, 0x52, 0xdc, 0x22, 0xbe, 0xed, 0x38, 0xc7, 0xb7, 0xed, 0xe2, 0xef, 0xd1, 0x32, 0x48, 0x53, 0x2a, 0x8b, 0x55, 0x3a, 0x4e, 0xa7, 0x48, 0x8f, 0x1e, 0xde, 0xdf, 0xb7, 0xe4, 0x58, 0x6c, 0xd3, 0x4b, 0x9b, 0x40, 0x4b, 0x4d, 0x0e, 0x63, 0xac, 0x3b, 0x06, 0x1c, 0x02, 0x57, 0xb5, 0x80, 0xb4, 0xb8, 0xff, 0x39, 0x0a, 0x83, 0x5e, 0x1e, 0x64, 0x48, 0x13, 0xd3, 0x35, 0x48, 0xed, 0x75, 0x0c, 0x4f, 0x9a, 0x9c, 0x6a, 0xea, 0x30, 0x0b, 0xdd, 0x3a, 0x49, 0x5f, 0xfd, 0xf0, 0xf1, 0xba, 0xc3, 0x5f, 0x6f, 0x8e, 0xbc, 0x57, 0x5a, 0xe1, 0x6a, 0x25, 0x17, 0xe8, 0x64, 0xb1, 0xbb, 0x95, 0xca, 0x9d, 0xa8, 0x09, 0xef, 0x33, 0x8c, 0xf1, 0xa8, 0x18, 0xa1, 0x8e, 0x29, 0xa6, 0x6e, 0x1e, 0xa1, 0x72, 0x88, 0x65, 0x34, 0xfb, 0x4a, 0xa9, 0xb7, 0x7e, 0x83, 0x5c, 0x59, 0x85, 0x9e, 0x96, 0xd2, 0x9e, 0x63, 0xbd, 0x3f, 0xc0, 0x2b, 0xbf, 0x70, 0x30, 0x61, 0x91, 0x81, 0xd7, 0xfe, 0x1f, 0x4b, 0x1d, 0x09, 0x49, 0x0e, 0xfb, 0xbf, 0x52, 0xdc, 0x4c, 0xc6, 0xd8, 0xc6, 0xc7, 0x5e, 0x2b, 0x6f, 0x26, 0xa9, 0xac, 0x99, 0x4c, 0xb1, 0xef, 0x7c, 0xf7, 0x0d, 0xef, 0x14, 0xd1, 0xd7, 0xcd, 0x5e, 0x8c, 0x12, 0x8c, 0xb1, 0x2c, 0xa1, 0x99, 0x96, 0xe1, 0xcd, 0x45, 0xe8, 0x22, 0x71, 0x79, 0x30, 0x1e, 0x30, 0x52, 0xc7, 0xc6, 0x5b, 0xa9, 0xd0, 0x61, 0xcd, 0xf2, 0xde, 0x92, 0x6a, 0x3f, 0xcd, 0x0b, 0x5a, 0x67, 0xc1, 0x22, 0xa1, 0xcb, 0xac, 0x1e, 0xd7, 0x39, 0xf3, 0x40, 0x91, 0xc1, 0x51, 0xa3, 0x73, 0x72, 0xcc, 0x5d, 0xf3, 0xa8, 0xd2, 0xb9, 0xeb, 0xfa, 0xcd, 0xac, 0xdd, 0x80, 0x1e, 0xd4, 0x0f, 0x5e, 0x53, 0x70, 0x6d, 0xc1, 0xb3, 0xc4, 0x92, 0xf8, 0x71, 0xb3, 0x9b, 0x4c, 0x24, 0x43, 0xb2, 0x79, 0x91, 0x57, 0x6b, 0xc4, 0x4a, 0x48, 0x40, 0xe4, 0xc1, 0xba, 0x25, 0x56, 0x21, 0x69, 0x98, 0x31, 0x3f, 0xb9, 0xe9, 0xf3, 0x8a, 0x4f, 0xbb, 0xdb, 0x8b, 0x8c, 0xd1, 0x58, 0x17, 0x66, 0xb8, 0xf3, 0xc8, 0xf3, 0xa2, 0xce, 0xf9, 0x9d, 0x4f, 0xd3, 0x96, 0x30, 0x73, 0x2a, 0x9e, 0x53, 0x30, 0x37, 0x1e, 0xbf, 0x3d, 0xa0, 0xad, 0x68, 0xff, 0x81, 0x9c, 0xf3, 0xf5, 0x9c, 0xf3, 0xff, 0xa4, 0x9c, 0xf3, 0xd3, 0x72, 0xe6, 0x9d, 0xf4, 0xe3, 0x62, 0x8d, 0xfc, 0xd6, 0x90, 0x8b, 0x72, 0xdb, 0x54, 0x84, 0x59, 0x90, 0xa6, 0x20, 0x87, 0x22, 0x5d, 0x91, 0x97, 0xd9, 0x18, 0x34, 0x61, 0x9e, 0xc6, 0xfa, 0xe2, 0xb9, 0x8a, 0x1d, 0x6f, 0x06, 0xb4, 0x8f, 0xf6, 0x45, 0x16, 0xdd, 0xaa, 0x58, 0x25, 0x52, 0xaf, 0xc6, 0xb3, 0xf4, 0x10, 0x03, 0xe5, 0x8a, 0x5c, 0x5b, 0xa4, 0xa4, 0x3a, 0xda, 0x16, 0x18, 0x58, 0x7f, 0xaa, 0xaf, 0xfd, 0xdb, 0xd5, 0x86, 0x83, 0xeb, 0xcf, 0x6c, 0x48, 0x76, 0xb5, 0xcb, 0x07, 0xd7, 0x0f, 0x75, 0xe1, 0x6e, 0x3d, 0xd2, 0xf5, 0xde, 0x23, 0xc9, 0xf5, 0x23, 0x7d, 0xd3, 0x02, 0x74, 0xeb, 0xdd, 0x21, 0xf5, 0xd2, 0xdd, 0x95, 0xea, 0xc7, 0x0d, 0xe1, 0xe3, 0xa1, 0xbb, 0xc3, 0xea, 0xe5, 0x86, 0xaa, 0x13, 0x95, 0x77, 0x57, 0xa9, 0x57, 0xee, 0xae, 0x55, 0x47, 0xef, 0x9e, 0xa7, 0x5e, 0x1b, 0xb7, 0x78, 0xf0, 0xf2, 0xce, 0xe5, 0xc9, 0xc8, 0x9a, 0x4f, 0x1e, 0x61, 0x5d, 0x4c, 0xb1, 0xc3, 0xc7, 0xab, 0x67, 0xef, 0x7e, 0xb9, 0x5e, 0xf0, 0xbb, 0x29, 0xba, 0x38, 0x4b, 0x1d, 0x99, 0x48, 0x17, 0xc5, 0x7c, 0xdf, 0x2f, 0xe6, 0xfb, 0x29, 0xde, 0x2c, 0x47, 0x8d, 0xb3, 0x46, 0xd4, 0x22, 0xd7, 0x4e, 0xa1, 0x60, 0x24, 0x38, 0x97, 0x40, 0x79, 0x0d, 0x63, 0x23, 0x9f, 0x4e, 0x6f, 0x00, 0x27, 0x69, 0x0c, 0x3d, 0x1e, 0xeb, 0xdb, 0xd3, 0xb7, 0x84, 0xfd, 0xca, 0x18, 0x12, 0xe6, 0xa1, 0xae, 0xa1, 0xae, 0xd0, 0x37, 0x6d, 0xe4, 0xf8, 0xba, 0x33, 0xa5, 0x7f, 0x72, 0x92, 0xfb, 0x4b, 0xd1, 0x2c, 0x32, 0xbb, 0x67, 0x81, 0x53, 0x68, 0xa6, 0x02, 0x67, 0x33, 0xc9, 0xbe, 0x26, 0x32, 0x3a, 0xcc, 0xb1, 0x6e, 0x39, 0xb4, 0xe5, 0xa8, 0xc3, 0x8c, 0x37, 0x93, 0xd3, 0x1c, 0xeb, 0xb1, 0x57, 0x6e, 0x3d, 0x4f, 0x92, 0x73, 0xb2, 0x63, 0x1e, 0xb7, 0xa1, 0xd6, 0xb7, 0xc4, 0x4a, 0x85, 0xd9, 0x35, 0xc5, 0xd4, 0x2b, 0x46, 0x45, 0xd8, 0x33, 0x3e, 0x2a, 0xaa, 0x84, 0xec, 0x92, 0x3e, 0x2a, 0x50, 0xd3, 0x17, 0x0e, 0x25, 0x2c, 0xba, 0xb6, 0x20, 0x8f, 0x8a, 0x6a, 0xe4, 0xe5, 0x26, 0x8b, 0x1f, 0x34, 0xd5, 0xbf, 0xd0, 0xe5, 0x26, 0x73, 0xe7, 0x5f, 0x9c, 0x64, 0x7d, 0xd5, 0x6a, 0x48, 0x14, 0x61, 0x75, 0xf8, 0xee, 0x66, 0xca, 0x56, 0x47, 0xf0, 0x9b, 0xa3, 0x9e, 0x05, 0x47, 0x7b, 0xfe, 0xee, 0x1a, 0xf5, 0xe2, 0xdd, 0x41, 0xf5, 0xa3, 0x14, 0xae, 0x75, 0x69, 0xd6, 0xa6, 0x9e, 0xd6, 0xfb, 0xc7, 0xc9, 0xf1, 0xfe, 0x21, 0xc6, 0x89, 0xe4, 0xcd, 0x98, 0x30, 0x4e, 0x18, 0x83, 0x7b, 0x75, 0xa9, 0x58, 0x8c, 0x14, 0x57, 0x84, 0x25, 0x98, 0x22, 0x83, 0xb3, 0x46, 0x50, 0xea, 0x97, 0x04, 0xd5, 0xde, 0xf7, 0x07, 0xc6, 0xcd, 0x69, 0x8c, 0x9b, 0x9d, 0x85, 0xb5, 0x18, 0x37, 0x51, 0x75, 0xa4, 0xea, 0x1c, 0xd5, 0x99, 0x0b, 0xf5, 0x31, 0xf3, 0x2c, 0x78, 0xd6, 0x4f, 0xef, 0xd9, 0x85, 0xfa, 0x98, 0x29, 0xfc, 0x93, 0xc6, 0x4c, 0xa1, 0x36, 0x66, 0x66, 0xf0, 0x78, 0xf9, 0xc3, 0xb9, 0xe6, 0xeb, 0xb9, 0xe6, 0xff, 0x49, 0xb9, 0xe6, 0xeb, 0xb9, 0x9a, 0x6f, 0xd3, 0xc6, 0x89, 0x9b, 0xc7, 0xc9, 0x0c, 0x1e, 0x27, 0x85, 0x13, 0xc7, 0xc9, 0x6d, 0xda, 0x38, 0xc9, 0x17, 0x3d, 0xcc, 0x7c, 0x9b, 0x36, 0x46, 0x2c, 0x62, 0x8c, 0x98, 0x6e, 0x13, 0xe3, 0x63, 0xc6, 0x9f, 0x38, 0x36, 0x6e, 0xfb, 0x03, 0x63, 0xc3, 0x37, 0x4b, 0x3d, 0x71, 0x77, 0xe0, 0x86, 0xf1, 0x91, 0xa5, 0x8f, 0x8f, 0x25, 0x63, 0xe3, 0x63, 0x4a, 0xda, 0xf8, 0xf0, 0x8c, 0x8d, 0x8f, 0xd3, 0x9f, 0x36, 0x3e, 0xd0, 0xba, 0x47, 0xb9, 0x75, 0x1d, 0xcd, 0x64, 0xf6, 0xcc, 0x22, 0xab, 0x8c, 0x7e, 0x5d, 0x66, 0x2d, 0x5d, 0x0e, 0xfa, 0xbb, 0x69, 0xe7, 0x2f, 0x4a, 0x5d, 0x24, 0x95, 0x80, 0x7b, 0x8c, 0x3d, 0xbc, 0xe3, 0x50, 0x91, 0x1b, 0x52, 0xdc, 0x24, 0xaf, 0x29, 0xd5, 0x4b, 0x78, 0x17, 0xe1, 0x5f, 0x07, 0x7c, 0x8d, 0xe0, 0x98, 0x67, 0x91, 0xe5, 0x68, 0x9f, 0xd4, 0xcd, 0x4a, 0xbd, 0x4d, 0xe6, 0x86, 0xee, 0xb6, 0x8b, 0xbd, 0xc9, 0x58, 0x77, 0x09, 0x30, 0x86, 0xd8, 0x7c, 0x7f, 0xa5, 0x77, 0x72, 0xa4, 0x6d, 0xb9, 0x36, 0x8b, 0x5e, 0x44, 0x6f, 0x0b, 0x35, 0x19, 0x4d, 0x21, 0xf6, 0xe4, 0xd4, 0x24, 0x0d, 0x56, 0x62, 0x7c, 0x98, 0xdb, 0x29, 0xc7, 0xcd, 0xda, 0x8b, 0x98, 0x19, 0x66, 0x1a, 0xab, 0xef, 0x5f, 0x8f, 0x3e, 0x7d, 0x54, 0xf4, 0xd5, 0xe3, 0xa0, 0xb4, 0x27, 0x81, 0x91, 0x61, 0xd4, 0xfc, 0x14, 0xb0, 0x72, 0xfa, 0xee, 0x46, 0xca, 0x53, 0xcf, 0x70, 0x7f, 0xba, 0x9b, 0x5b, 0xaf, 0x4e, 0xfd, 0xa0, 0x70, 0x9e, 0xfa, 0x91, 0x1f, 0x7d, 0x1f, 0xfd, 0xfd, 0x63, 0xe0, 0xe9, 0x32, 0x70, 0xa6, 0xd1, 0x91, 0xf9, 0xea, 0x35, 0xe4, 0x98, 0x2b, 0xaf, 0x10, 0xad, 0x7b, 0xd4, 0x3b, 0x59, 0xd3, 0xf9, 0x03, 0x7f, 0x33, 0x45, 0xab, 0x01, 0xaf, 0x78, 0x09, 0x3c, 0x3c, 0xad, 0xe3, 0x61, 0x50, 0xe0, 0xa1, 0xc6, 0xcd, 0x2b, 0x3f, 0x43, 0xe8, 0x1d, 0xc7, 0x9c, 0x21, 0x57, 0xa5, 0x27, 0x9b, 0xd7, 0xd3, 0xf5, 0x1d, 0xfb, 0xef, 0x57, 0xcc, 0x52, 0x8f, 0xfa, 0x83, 0x80, 0xea, 0x14, 0xc6, 0xd8, 0x19, 0x8c, 0xbb, 0xb3, 0xa0, 0x9a, 0x7f, 0xd1, 0x64, 0xe1, 0x51, 0x1e, 0x0a, 0xe6, 0x40, 0x1a, 0x51, 0xc0, 0xb1, 0x03, 0xb6, 0x8b, 0xdc, 0x7b, 0x9a, 0xa4, 0x70, 0x72, 0xb5, 0xe1, 0xdd, 0xa7, 0x01, 0xd3, 0x07, 0x68, 0xb7, 0x8f, 0x00, 0xe3, 0x25, 0xcc, 0x1b, 0x12, 0x15, 0xdc, 0x3b, 0x10, 0x26, 0x48, 0x53, 0x1f, 0xfb, 0x38, 0xaf, 0x13, 0xe3, 0x34, 0x02, 0xe3, 0xc8, 0xc6, 0xa3, 0x0f, 0x10, 0xbc, 0x8d, 0x2f, 0x2e, 0xe3, 0x8b, 0x2b, 0xa8, 0xc9, 0x28, 0x6a, 0x74, 0xcd, 0x6b, 0xd2, 0xad, 0xaa, 0x9a, 0xd5, 0x13, 0x91, 0x35, 0xd7, 0x22, 0xbc, 0x22, 0x05, 0x69, 0x5f, 0xd0, 0xc3, 0x0a, 0x21, 0x2d, 0x2b, 0xb1, 0xe8, 0xba, 0x44, 0x54, 0xec, 0x43, 0x3e, 0x5e, 0x44, 0x6d, 0x57, 0x07, 0x1e, 0xe2, 0x95, 0x95, 0x78, 0x56, 0x9b, 0x71, 0xe0, 0x21, 0xb6, 0x96, 0xb8, 0xf6, 0xbd, 0xd8, 0xc3, 0xb1, 0x4d, 0x72, 0x55, 0x1b, 0xd9, 0x8d, 0xf6, 0xa8, 0x63, 0x96, 0x3a, 0xe4, 0x9c, 0xa5, 0x1e, 0x73, 0x4d, 0xd9, 0xd9, 0xed, 0xb6, 0x3c, 0xde, 0xe3, 0xa9, 0xe6, 0x55, 0x67, 0x7b, 0x54, 0x9e, 0xc4, 0x4f, 0xd7, 0xbe, 0xa7, 0xb0, 0x15, 0xcc, 0x1b, 0x02, 0x43, 0xbb, 0x34, 0x7d, 0x06, 0x48, 0x1a, 0x17, 0x59, 0xd2, 0x28, 0x69, 0xa5, 0xea, 0xd2, 0x56, 0x8a, 0x62, 0xee, 0x0e, 0xb8, 0xeb, 0x59, 0xff, 0x26, 0x5e, 0xcc, 0x2b, 0xb7, 0xf2, 0x14, 0x3b, 0xeb, 0x82, 0xd7, 0x16, 0x7b, 0x29, 0x26, 0x76, 0x7f, 0xee, 0x8d, 0xbc, 0x02, 0x89, 0x6a, 0x91, 0xdb, 0x4b, 0x8b, 0x3d, 0x5e, 0x52, 0xd6, 0xaa, 0x8f, 0xbd, 0x0e, 0x9e, 0x67, 0xa9, 0xa6, 0x3b, 0x69, 0x18, 0xd2, 0x67, 0x6e, 0x25, 0xcd, 0xbf, 0xa6, 0x8f, 0xe3, 0xbd, 0xb7, 0xb8, 0x17, 0xa0, 0xec, 0x7a, 0xf7, 0xd7, 0xbd, 0xe8, 0x95, 0xe4, 0x71, 0x80, 0x5f, 0xab, 0xfa, 0xdd, 0x2e, 0x15, 0x52, 0x4d, 0x31, 0xe2, 0x17, 0x2f, 0xb8, 0x34, 0xa2, 0x7a, 0xeb, 0xa8, 0x14, 0x79, 0xb4, 0x17, 0xa3, 0xcf, 0x46, 0x0e, 0xb2, 0x9f, 0x49, 0x9f, 0x0b, 0x4f, 0x03, 0x76, 0xda, 0xda, 0x8d, 0x5e, 0x9b, 0x5b, 0xee, 0xa2, 0x1c, 0xf4, 0x8b, 0x9c, 0x32, 0x17, 0xe5, 0xed, 0x01, 0xd7, 0xb3, 0x84, 0x0c, 0x15, 0x91, 0x43, 0x3b, 0xbb, 0x7f, 0x72, 0xa8, 0x85, 0x0c, 0xc5, 0xfe, 0x9a, 0xf2, 0xea, 0x7f, 0x7c, 0xed, 0xe7, 0xe0, 0x11, 0x10, 0xee, 0x8c, 0xfc, 0xe2, 0xf1, 0x0d, 0x3f, 0xfd, 0x05, 0xc2, 0x0b, 0x78, 0x25, 0x47, 0xb4, 0xb5, 0x62, 0x9e, 0x85, 0x76, 0xfa, 0x62, 0xdc, 0xd5, 0x31, 0x75, 0xa0, 0x7b, 0xcf, 0xc3, 0x2d, 0x59, 0xf6, 0xf9, 0xdb, 0x5e, 0x1e, 0xdc, 0x10, 0x92, 0x14, 0xa3, 0xc3, 0xb0, 0xfd, 0xe1, 0x9f, 0x1f, 0x69, 0x32, 0xd9, 0x6b, 0xb7, 0xbd, 0xa1, 0x28, 0x8e, 0xba, 0xc7, 0x8e, 0x6c, 0x7b, 0x4d, 0xb9, 0x0f, 0x65, 0x79, 0x90, 0xce, 0x2c, 0x4f, 0xd9, 0xb2, 0xa1, 0x83, 0x14, 0xb3, 0x6c, 0xd8, 0xb2, 0x81, 0x53, 0x22, 0xbc, 0xe8, 0xe7, 0x47, 0x5a, 0xcc, 0x8e, 0xda, 0xc7, 0x5e, 0xb3, 0x47, 0x15, 0x1f, 0xd2, 0xf3, 0x7d, 0xba, 0x83, 0x39, 0x26, 0xb4, 0xfb, 0x9e, 0x87, 0x9b, 0x4d, 0x9c, 0x4e, 0x31, 0xc9, 0x53, 0x06, 0xbb, 0x3b, 0xe8, 0xe7, 0x47, 0x9a, 0xcd, 0xfe, 0x6a, 0xce, 0x55, 0x31, 0x55, 0x5e, 0xda, 0x09, 0x89, 0xfd, 0x27, 0x2f, 0x37, 0x19, 0xb7, 0x3e, 0xcc, 0x5a, 0x52, 0xfb, 0x50, 0x8f, 0xa5, 0xa6, 0x9d, 0x0f, 0xc7, 0x7a, 0x15, 0x23, 0xe3, 0x75, 0x67, 0xd7, 0x4f, 0xdf, 0x68, 0x32, 0xfe, 0xe3, 0x11, 0xb6, 0xfc, 0x63, 0xcf, 0x97, 0x4b, 0x4d, 0x8f, 0x6f, 0x8a, 0xad, 0x53, 0x8c, 0x8c, 0xef, 0xc7, 0x1f, 0x41, 0x0d, 0x88, 0xbe, 0x98, 0xc8, 0xe1, 0xfd, 0xbb, 0xe8, 0xb3, 0x64, 0x8e, 0x5b, 0xcd, 0x45, 0x6c, 0x89, 0x18, 0x67, 0xe9, 0x57, 0x29, 0xe0, 0xd5, 0x34, 0x13, 0xaf, 0xbe, 0x92, 0x6a, 0x9f, 0x2c, 0xb8, 0xdf, 0xac, 0xf4, 0xf6, 0x81, 0x24, 0x93, 0x99, 0x6a, 0x97, 0x47, 0x9f, 0x23, 0xf6, 0x50, 0xe7, 0xf1, 0xd6, 0x23, 0xa7, 0xe7, 0xc8, 0x93, 0x30, 0xe3, 0xd7, 0xd7, 0x42, 0xd7, 0x7a, 0xd3, 0x5a, 0x2b, 0xea, 0xfe, 0xba, 0xce, 0x23, 0x5a, 0xf5, 0xf9, 0xf2, 0xb4, 0x98, 0x35, 0x98, 0xae, 0xf0, 0x38, 0x04, 0x5d, 0x29, 0xb1, 0x96, 0x30, 0x5d, 0x79, 0x78, 0xc7, 0x2b, 0xc5, 0xa0, 0x2b, 0xc5, 0x4c, 0x57, 0x36, 0x6e, 0x3f, 0xe8, 0x02, 0x95, 0x2a, 0x2a, 0xe7, 0x92, 0x50, 0x26, 0x53, 0xa0, 0x79, 0x4c, 0x83, 0x07, 0xb7, 0xe7, 0x7b, 0x68, 0xf2, 0x89, 0x59, 0x34, 0x95, 0x3d, 0xcc, 0x91, 0x0a, 0x1a, 0xe1, 0x21, 0xf0, 0x1c, 0xa0, 0x11, 0x2e, 0x63, 0xf5, 0x7d, 0x4c, 0x23, 0x4e, 0x0b, 0x1a, 0x21, 0x34, 0x90, 0x31, 0x12, 0x2f, 0x62, 0xf4, 0x0b, 0xca, 0x09, 0x7a, 0x71, 0x19, 0x63, 0xe6, 0xca, 0xdd, 0x51, 0x8c, 0x9b, 0xa0, 0x7a, 0x4d, 0x6e, 0x11, 0x14, 0xe0, 0xb4, 0x37, 0x5b, 0xa7, 0x00, 0xe0, 0x08, 0xb8, 0x8c, 0xb1, 0xf1, 0x7f, 0x40, 0x1f, 0xff, 0xe7, 0x23, 0xef, 0x95, 0x4b, 0x6c, 0x71, 0x03, 0x6a, 0x73, 0x09, 0xe3, 0xff, 0xa2, 0x79, 0x66, 0xfa, 0x58, 0x15, 0xf9, 0x56, 0xaa, 0x57, 0x74, 0xca, 0x3c, 0xaa, 0x53, 0xe6, 0x6b, 0x9a, 0xfd, 0xa6, 0x18, 0x97, 0xe7, 0x23, 0x6b, 0x54, 0xb3, 0x3e, 0x2e, 0x27, 0x8f, 0x8f, 0xcb, 0xda, 0x0b, 0x81, 0x72, 0xf5, 0xb8, 0xae, 0x13, 0xc4, 0xd6, 0x27, 0x25, 0xe2, 0xb7, 0x82, 0xf1, 0xeb, 0xdd, 0x5a, 0xbf, 0x39, 0x14, 0xd0, 0x6c, 0x42, 0x9c, 0x6c, 0x11, 0x65, 0x8e, 0x2d, 0xa7, 0x02, 0xbe, 0xa3, 0x3f, 0x17, 0xf4, 0x2f, 0xa7, 0xe9, 0x6c, 0x1f, 0xe1, 0x10, 0x7b, 0x79, 0xf1, 0x40, 0x9b, 0xf3, 0xa6, 0x7b, 0x69, 0xed, 0xac, 0x55, 0x24, 0x27, 0xdb, 0xca, 0x6f, 0xb4, 0x0e, 0x23, 0x4b, 0x62, 0x21, 0x7e, 0xad, 0x73, 0x78, 0x5e, 0x9a, 0x2e, 0x6b, 0x7a, 0x2d, 0x66, 0x3b, 0xef, 0x5c, 0x3e, 0x9a, 0xfe, 0x76, 0xfb, 0x0a, 0xd4, 0x55, 0x12, 0xf9, 0x60, 0xd6, 0xf4, 0x1d, 0x18, 0x7f, 0xbe, 0x3d, 0x4a, 0xd2, 0xe2, 0xdd, 0x64, 0x8d, 0x35, 0x52, 0xc1, 0x1d, 0x51, 0xde, 0x5b, 0x5c, 0xbc, 0x0b, 0x98, 0xd3, 0xed, 0x50, 0x34, 0x9a, 0x20, 0x57, 0x38, 0x23, 0xd1, 0x46, 0xca, 0x02, 0xac, 0xaf, 0xce, 0x59, 0xc1, 0x5a, 0x3b, 0xf8, 0x35, 0xe3, 0x7b, 0x94, 0x30, 0x61, 0xdd, 0x3a, 0x3b, 0x7d, 0xdd, 0x9a, 0xf7, 0x51, 0x12, 0x1d, 0xa9, 0x7d, 0x1f, 0x9d, 0x4b, 0x12, 0x6b, 0xa9, 0x35, 0x90, 0xe2, 0x59, 0xa6, 0x6f, 0xcb, 0x1a, 0x7c, 0xd6, 0x18, 0x03, 0x5d, 0xb0, 0x79, 0x43, 0x54, 0x00, 0x09, 0x50, 0xc6, 0xe5, 0xe0, 0x19, 0x7b, 0xfe, 0x87, 0x08, 0xbb, 0x25, 0x35, 0x67, 0x97, 0x04, 0xf4, 0xdc, 0x5c, 0xe2, 0x2b, 0x4b, 0xea, 0xab, 0xb9, 0x3c, 0xff, 0x16, 0x70, 0xfa, 0xf1, 0xb4, 0xcc, 0xdf, 0xfc, 0xfd, 0x2f, 0x53, 0x90, 0x35, 0xe7, 0xdd, 0x28, 0x6f, 0x8b, 0xf8, 0x29, 0x6c, 0xed, 0xa6, 0xf5, 0x66, 0xd1, 0x5a, 0xcb, 0xc4, 0x6f, 0x7b, 0xaa, 0xcd, 0xf4, 0x3e, 0x7e, 0x09, 0x75, 0x4f, 0xad, 0xee, 0x3b, 0x6e, 0xaf, 0x01, 0x0d, 0x6c, 0x21, 0xbb, 0x9d, 0xb5, 0xc3, 0x5d, 0x72, 0x8b, 0xe1, 0x89, 0xf1, 0x15, 0x78, 0x7b, 0x13, 0xd9, 0xf5, 0x9d, 0xcb, 0xef, 0xcb, 0xf7, 0x40, 0xfa, 0xdb, 0xfe, 0x93, 0xc3, 0xbc, 0x2f, 0x62, 0xc6, 0x9c, 0x21, 0x78, 0xa2, 0x4d, 0x8c, 0x03, 0x41, 0x7b, 0xac, 0xbc, 0x53, 0xa0, 0xe9, 0x35, 0xf1, 0x4e, 0x99, 0x62, 0x9b, 0x88, 0x21, 0xa7, 0xc0, 0xd0, 0xbc, 0xf3, 0x92, 0x83, 0xe7, 0x32, 0x4d, 0x93, 0xf1, 0x93, 0xb7, 0x1d, 0xbc, 0x7f, 0x66, 0x91, 0x3d, 0x64, 0x6f, 0x2f, 0x18, 0x7a, 0x1a, 0x7c, 0x61, 0x10, 0x7d, 0x18, 0x3d, 0x96, 0xad, 0x20, 0xae, 0xb7, 0x65, 0x12, 0xdf, 0x21, 0xa5, 0xf0, 0x87, 0x3a, 0x3c, 0xca, 0x32, 0xa7, 0x43, 0xc9, 0xd2, 0xf7, 0x47, 0x48, 0x5d, 0x2e, 0x37, 0xa5, 0x41, 0xfe, 0x6a, 0x25, 0x6b, 0xa0, 0xa7, 0xac, 0x22, 0xd7, 0xe3, 0xcd, 0x35, 0xfe, 0x86, 0xf1, 0x63, 0x54, 0x87, 0xb9, 0x67, 0x63, 0xec, 0xf8, 0x1d, 0x35, 0xae, 0x6c, 0x6d, 0xf6, 0x71, 0x13, 0xd3, 0xb6, 0x76, 0x33, 0xaf, 0xaf, 0x01, 0xb2, 0xcc, 0x2c, 0x70, 0x67, 0xf6, 0xa8, 0x27, 0xcc, 0xf3, 0x4a, 0x49, 0x23, 0x39, 0x85, 0xad, 0x6f, 0xc5, 0xdf, 0x0f, 0x34, 0xf0, 0x5e, 0x77, 0x31, 0x7a, 0x7a, 0xae, 0x1c, 0xb0, 0x47, 0x11, 0xe6, 0x00, 0x05, 0x9f, 0x12, 0xfc, 0x5d, 0x9f, 0xea, 0x34, 0x8b, 0xd4, 0x6f, 0x60, 0x3e, 0xca, 0xd4, 0xbe, 0x43, 0x8f, 0x2b, 0xff, 0x14, 0xdd, 0xc2, 0xd3, 0xa2, 0xf4, 0x88, 0x7f, 0x26, 0x19, 0x4b, 0xee, 0xd9, 0x33, 0xbf, 0x99, 0x0c, 0x46, 0x1f, 0x6b, 0xd1, 0xa2, 0x4f, 0xf7, 0x47, 0x9a, 0x89, 0x3e, 0x66, 0xed, 0xba, 0xfe, 0x30, 0x9e, 0xce, 0x17, 0x43, 0x6e, 0xdb, 0xcb, 0x61, 0xa7, 0xca, 0x72, 0xf6, 0x54, 0xe1, 0x7e, 0x02, 0x7c, 0x8a, 0xf1, 0x45, 0x7c, 0x43, 0x83, 0xfb, 0xe7, 0x37, 0xe7, 0xef, 0x8b, 0x34, 0xe7, 0xbd, 0x18, 0x6c, 0xc9, 0xd9, 0x1b, 0x68, 0x49, 0xe9, 0x1e, 0x3e, 0x22, 0x74, 0x0f, 0xf7, 0xdc, 0x4c, 0xf7, 0x50, 0x9e, 0x66, 0x9f, 0x29, 0xb4, 0x2e, 0xcf, 0x33, 0xbd, 0x40, 0xc8, 0x69, 0xb6, 0xed, 0x9b, 0xa0, 0x91, 0xe8, 0x16, 0xda, 0x97, 0xa7, 0x53, 0x7a, 0x97, 0xbe, 0x18, 0xff, 0x72, 0x5f, 0xfa, 0xcd, 0xa1, 0x9b, 0xea, 0x22, 0xca, 0xff, 0x47, 0x75, 0x11, 0xcb, 0xd5, 0xc3, 0x1a, 0xdd, 0x99, 0x80, 0xb7, 0xb3, 0x3a, 0xde, 0x2e, 0x0a, 0x8e, 0x27, 0x4d, 0xab, 0x55, 0xec, 0xcb, 0xcb, 0x45, 0xac, 0xc1, 0x5a, 0xec, 0x87, 0x74, 0xe5, 0x6f, 0xd8, 0x53, 0xd3, 0xec, 0xe6, 0xb5, 0x7a, 0xdf, 0x4a, 0x81, 0xcb, 0xe9, 0x65, 0x8c, 0xc9, 0xaa, 0xe6, 0x3c, 0x60, 0xcd, 0xf4, 0x62, 0xa4, 0x39, 0xbb, 0x3c, 0x67, 0x4f, 0x75, 0xb3, 0x19, 0xf8, 0x35, 0xee, 0xab, 0x69, 0xaa, 0xf7, 0x4a, 0x42, 0x3b, 0x71, 0xd2, 0x75, 0x5a, 0xad, 0x07, 0xff, 0x4c, 0xad, 0xd6, 0x1d, 0x07, 0x6a, 0x9a, 0xb3, 0xf7, 0x47, 0x9a, 0xb3, 0xf6, 0x05, 0x5b, 0x4c, 0x2f, 0x06, 0x5a, 0x89, 0x7a, 0xff, 0xb0, 0x9e, 0xab, 0x8e, 0xed, 0x8b, 0xe9, 0x5a, 0xae, 0x37, 0xc5, 0x36, 0x6b, 0x46, 0x96, 0xfc, 0xc9, 0x9a, 0x91, 0x16, 0xb1, 0x4e, 0xb7, 0xff, 0xda, 0x81, 0xfa, 0xcd, 0xba, 0xa6, 0xeb, 0x68, 0x0a, 0xaf, 0x4c, 0x03, 0x84, 0x2d, 0x77, 0x8d, 0xdf, 0x45, 0xa6, 0x3d, 0xac, 0xcd, 0x4a, 0x34, 0x80, 0x67, 0x69, 0xcf, 0x0a, 0xa1, 0xcd, 0xb9, 0x97, 0xb5, 0xc4, 0xf7, 0xdc, 0x83, 0xd0, 0xdd, 0x7e, 0x2b, 0xc2, 0x8c, 0x08, 0x7b, 0xf2, 0xe6, 0x7a, 0xac, 0x63, 0x3c, 0xfc, 0x1f, 0xd1, 0x62, 0xbd, 0xbe, 0xe7, 0xc8, 0xbc, 0xd3, 0x7c, 0x91, 0xfb, 0x8d, 0x18, 0xe5, 0xe3, 0x3d, 0xc7, 0xf2, 0xe7, 0xf6, 0x1c, 0x07, 0xdb, 0x52, 0x02, 0x8f, 0x29, 0x3d, 0xd6, 0x72, 0xa1, 0xc7, 0x9a, 0xde, 0x4b, 0xe8, 0x03, 0x5d, 0xcf, 0xf9, 0xcc, 0x98, 0x46, 0xab, 0x83, 0xfb, 0xc6, 0x7e, 0xd6, 0x61, 0xcd, 0x17, 0xda, 0xd0, 0xac, 0xc1, 0x6a, 0x2d, 0xc9, 0x79, 0x91, 0x35, 0x58, 0xcd, 0xfe, 0x5b, 0xf7, 0x80, 0x22, 0xb4, 0xd6, 0xe9, 0x3d, 0xe4, 0x7a, 0xbd, 0xe7, 0x1d, 0x7f, 0x56, 0x0f, 0x59, 0x3e, 0xa6, 0x0f, 0x4b, 0x5e, 0xb3, 0xaf, 0x6a, 0xa2, 0x4e, 0xec, 0xa7, 0xb4, 0xfa, 0x9f, 0xab, 0xdd, 0xfc, 0xce, 0xe2, 0xf2, 0x94, 0xcd, 0xa3, 0x23, 0x82, 0x5f, 0x97, 0x58, 0x69, 0x1a, 0x3e, 0x5a, 0x1a, 0x8a, 0x85, 0xd0, 0xdb, 0x42, 0x8d, 0xba, 0x05, 0xc2, 0x6e, 0x32, 0xd7, 0x6f, 0x4e, 0xf9, 0xf5, 0xaf, 0xb0, 0x0b, 0x9a, 0xb8, 0x82, 0x8a, 0x3b, 0x09, 0x1c, 0x69, 0x2e, 0x28, 0x92, 0xf3, 0x64, 0x1f, 0xa8, 0xdf, 0x4c, 0xaa, 0x78, 0x22, 0xc9, 0x5a, 0xf2, 0xed, 0xc4, 0x34, 0xd2, 0x39, 0x81, 0x5e, 0x6a, 0x94, 0x52, 0x3d, 0x76, 0xa0, 0x67, 0x89, 0x4f, 0x16, 0xcf, 0x4c, 0x51, 0xd3, 0x69, 0x68, 0x43, 0x4f, 0x43, 0x37, 0xeb, 0x4c, 0xd9, 0x4d, 0x37, 0x52, 0xc9, 0x70, 0xa7, 0x06, 0x27, 0x8f, 0x75, 0xd6, 0x2b, 0x01, 0x7f, 0x16, 0xd0, 0xb8, 0x69, 0x4d, 0xc3, 0xf1, 0xba, 0xf0, 0x68, 0x2a, 0xfc, 0x7a, 0xfa, 0x20, 0xa0, 0x6f, 0x25, 0x99, 0xfd, 0xdc, 0xb3, 0xc5, 0x21, 0xf7, 0xe9, 0xc8, 0xcb, 0x3e, 0xf0, 0xd8, 0xe8, 0x91, 0x46, 0xd7, 0xe4, 0x58, 0xaf, 0x0f, 0x1c, 0x9c, 0xdb, 0x1c, 0x5b, 0x27, 0xc7, 0x58, 0x93, 0xd9, 0xe1, 0x25, 0xc7, 0xd1, 0xdd, 0x64, 0x71, 0x7a, 0xc9, 0x75, 0x0c, 0xfc, 0xc2, 0xce, 0xe4, 0xe3, 0x5d, 0xc8, 0xaf, 0x14, 0xf9, 0x7d, 0x5f, 0x78, 0x02, 0xe8, 0xd4, 0x68, 0xb5, 0x57, 0xb2, 0x43, 0x5e, 0x64, 0x7d, 0x7d, 0xde, 0xe5, 0xa7, 0x42, 0xcc, 0x52, 0x23, 0xe0, 0xe4, 0x72, 0x41, 0x43, 0x99, 0x9f, 0xbb, 0x88, 0xdf, 0x02, 0x70, 0x72, 0x41, 0x70, 0x5b, 0x01, 0x70, 0x5b, 0xc1, 0xa1, 0x66, 0xb2, 0xe3, 0x6d, 0xb4, 0x21, 0x30, 0xd8, 0x4c, 0x4e, 0x84, 0x5d, 0x03, 0x97, 0xe8, 0x61, 0x8e, 0x4b, 0x58, 0xfe, 0x9c, 0x06, 0xcf, 0x75, 0xaf, 0xce, 0x73, 0xcd, 0xd2, 0x56, 0xff, 0x34, 0xae, 0x0b, 0xf2, 0xcd, 0xb0, 0x6e, 0xc1, 0xc1, 0x2b, 0x37, 0x15, 0x45, 0xbc, 0x8e, 0xec, 0xf7, 0x86, 0xa9, 0xc8, 0x51, 0x37, 0x37, 0x40, 0x25, 0xa5, 0x81, 0xb9, 0x41, 0x2a, 0x2b, 0x09, 0x96, 0x4a, 0x91, 0x43, 0x65, 0x95, 0x5a, 0xab, 0x27, 0x5c, 0x80, 0xd8, 0x6f, 0xbf, 0x57, 0xcc, 0xd4, 0x05, 0x2f, 0x1c, 0x46, 0x6f, 0x5c, 0x4e, 0xe1, 0xe7, 0xdf, 0xa7, 0x70, 0x3c, 0xdb, 0xd3, 0x68, 0x38, 0x8c, 0x56, 0xe9, 0x2b, 0xef, 0xe4, 0x9d, 0xe8, 0x7f, 0x7c, 0x43, 0x9e, 0x27, 0x5b, 0x13, 0x59, 0xde, 0x2c, 0xf4, 0xe5, 0xfd, 0xd7, 0xb6, 0x8a, 0x15, 0x64, 0xbf, 0x3c, 0x0d, 0xb3, 0xf7, 0xbc, 0xfe, 0x2d, 0x63, 0xe1, 0x6b, 0xea, 0x37, 0xfb, 0xb2, 0x13, 0x56, 0xfb, 0x3c, 0xf9, 0x1e, 0xce, 0x49, 0xcf, 0x63, 0xd5, 0x4b, 0xcf, 0x91, 0x3f, 0x4e, 0x52, 0xbe, 0x6c, 0xfc, 0xe9, 0xa1, 0x56, 0x49, 0xb6, 0xf8, 0x02, 0x80, 0x28, 0x22, 0xdf, 0xf2, 0x93, 0x5f, 0xe1, 0x6d, 0x8a, 0x9f, 0xf0, 0x16, 0x45, 0x1b, 0x15, 0x0d, 0x6e, 0xe2, 0xd5, 0x78, 0xf1, 0xd4, 0xcb, 0x7b, 0x17, 0x3e, 0xf6, 0x9f, 0x1e, 0x40, 0x49, 0xe5, 0x2f, 0x7c, 0x48, 0x81, 0x26, 0x23, 0x24, 0xad, 0x92, 0xa3, 0x81, 0xb9, 0x21, 0xaa, 0x5d, 0xf0, 0xbb, 0x45, 0x04, 0x99, 0xa8, 0xa4, 0xf2, 0xf7, 0xb8, 0xd7, 0x50, 0xd8, 0x97, 0xd9, 0x10, 0x78, 0xe1, 0x8d, 0x56, 0xd3, 0x60, 0x2b, 0x95, 0x29, 0x90, 0xb3, 0x91, 0x63, 0x1d, 0xcf, 0x7b, 0x86, 0x47, 0xf6, 0x04, 0x9a, 0xc8, 0xd0, 0x27, 0xb4, 0x53, 0x46, 0x1d, 0x6c, 0x6b, 0xb4, 0x5f, 0x0e, 0x54, 0x7e, 0x48, 0x11, 0x0e, 0xb9, 0x26, 0x09, 0x5f, 0xe3, 0xf7, 0x7b, 0x42, 0xe0, 0x63, 0xcc, 0xb2, 0x71, 0xcb, 0xa6, 0x46, 0xc8, 0xb0, 0x83, 0xc9, 0xfe, 0xe7, 0xa8, 0xa8, 0x39, 0x5b, 0xbe, 0x65, 0xcb, 0xc3, 0xda, 0xfb, 0xfe, 0x64, 0xeb, 0xc2, 0x9f, 0xfd, 0x12, 0x32, 0x10, 0xca, 0x57, 0x8c, 0xf8, 0x0d, 0x37, 0x74, 0xed, 0xdb, 0x04, 0xf9, 0xd5, 0x4b, 0xe5, 0x8a, 0x11, 0xbf, 0x81, 0x86, 0x24, 0x53, 0x5e, 0xaf, 0xc1, 0x4b, 0x5c, 0xab, 0x26, 0xd4, 0x0a, 0x4f, 0xa8, 0x2d, 0x9e, 0x2c, 0x5e, 0xfa, 0xfb, 0x5f, 0x79, 0xa7, 0xfc, 0xc3, 0x21, 0xf0, 0x21, 0x3c, 0x53, 0xbc, 0x3b, 0xfb, 0xfb, 0x82, 0x03, 0x01, 0x2d, 0x01, 0x27, 0x60, 0x8e, 0x0c, 0x78, 0x42, 0xfe, 0x7b, 0x2b, 0x7f, 0x6b, 0xa6, 0x6d, 0x47, 0xd0, 0xe7, 0xb2, 0x22, 0x2f, 0x97, 0x14, 0xa1, 0xe7, 0xbd, 0xe2, 0x09, 0xfe, 0xeb, 0x2b, 0xff, 0xf8, 0x4b, 0x4d, 0x62, 0x01, 0x76, 0x4d, 0x25, 0x2e, 0xca, 0x8e, 0xbc, 0x12, 0xeb, 0xd9, 0xd1, 0xe5, 0xcd, 0x40, 0x4f, 0xb4, 0xc4, 0xfa, 0x1e, 0x1d, 0xc0, 0xa8, 0x5f, 0x75, 0x9c, 0x22, 0xdf, 0x88, 0x90, 0x77, 0x52, 0x64, 0xd5, 0x3e, 0x3c, 0x1d, 0xc6, 0x93, 0xf0, 0x84, 0x10, 0x42, 0x1d, 0xdb, 0x44, 0xad, 0x87, 0x74, 0x6a, 0xb0, 0x4a, 0x0e, 0x79, 0x30, 0xf6, 0xd9, 0xf7, 0xfe, 0x0a, 0xbf, 0x77, 0x01, 0x15, 0x29, 0xf7, 0xfb, 0x8a, 0xb8, 0x7c, 0x7b, 0xc8, 0x77, 0x0f, 0x5b, 0x5e, 0x3d, 0x7a, 0xc4, 0x5f, 0xc4, 0xe5, 0x33, 0x1d, 0xae, 0xfc, 0xad, 0x8d, 0xb6, 0xfd, 0x52, 0x94, 0x5b, 0x34, 0x5e, 0x2e, 0xe2, 0x2d, 0x91, 0x97, 0x63, 0x5d, 0x5b, 0x93, 0x5e, 0x83, 0xbb, 0x95, 0x2a, 0x22, 0xdf, 0x40, 0xe9, 0x6d, 0xa2, 0xf4, 0x6f, 0xa0, 0xf4, 0x36, 0x2e, 0x5d, 0xae, 0xaa, 0xdb, 0xe2, 0xb9, 0x97, 0xcb, 0x14, 0x7b, 0x02, 0x4f, 0xb0, 0xa7, 0xf0, 0xba, 0xfd, 0xa3, 0xcc, 0x87, 0x56, 0x78, 0xb3, 0xf4, 0xfa, 0x98, 0x84, 0x8e, 0x63, 0x19, 0xb8, 0x54, 0xa3, 0x77, 0x92, 0x62, 0xbb, 0x69, 0xb8, 0x97, 0xa2, 0xe0, 0x0b, 0x18, 0x67, 0xfb, 0x47, 0xf7, 0x71, 0x7e, 0xa9, 0x1e, 0xe7, 0x9e, 0xd7, 0xff, 0x58, 0xaa, 0xc7, 0x8d, 0xca, 0xf5, 0x9b, 0x3d, 0xf3, 0xe4, 0xbc, 0xb1, 0x77, 0xc8, 0x6f, 0xba, 0x5c, 0xe6, 0xd0, 0x7d, 0x37, 0xd8, 0x99, 0x92, 0x8b, 0x1e, 0xee, 0x1b, 0xb7, 0x38, 0x67, 0xcd, 0x77, 0xa1, 0xeb, 0x36, 0x1d, 0x72, 0xa2, 0x9b, 0x3d, 0x7e, 0x41, 0x4e, 0x14, 0xfe, 0x1b, 0xae, 0xe5, 0xa7, 0x5b, 0x9f, 0x87, 0x8d, 0xba, 0xfd, 0x7a, 0x64, 0xde, 0x08, 0xc5, 0xd3, 0x74, 0x69, 0x58, 0xa3, 0xdb, 0x97, 0xc8, 0x12, 0x79, 0xf8, 0x1e, 0x7b, 0x5d, 0x31, 0x82, 0xe4, 0x19, 0xd2, 0x75, 0x6d, 0x7c, 0x59, 0x91, 0x01, 0x4d, 0x6a, 0x60, 0xe9, 0x86, 0x25, 0x8b, 0x50, 0x3d, 0x5b, 0x3f, 0xb1, 0xcd, 0x93, 0xce, 0x63, 0xff, 0x83, 0xf8, 0x7d, 0x2a, 0xc5, 0x63, 0xb7, 0xa9, 0x5c, 0x16, 0xef, 0x6c, 0xba, 0xeb, 0x20, 0x17, 0x98, 0xa3, 0xbb, 0x48, 0x4e, 0x34, 0x99, 0x5d, 0x42, 0x32, 0xbf, 0x5f, 0x59, 0x12, 0x7d, 0x1a, 0x52, 0xed, 0xc2, 0x12, 0x0f, 0xe5, 0x44, 0x5e, 0x29, 0xf6, 0xf0, 0x3a, 0x80, 0x27, 0xf4, 0xc4, 0x39, 0xb2, 0x3a, 0x2a, 0xb7, 0x9f, 0x13, 0xfa, 0xf9, 0x16, 0x5f, 0x13, 0xe5, 0xba, 0xcc, 0xa0, 0x54, 0x4d, 0x94, 0x27, 0x28, 0xd5, 0x4a, 0x92, 0x91, 0xc2, 0x23, 0x67, 0x23, 0x45, 0x91, 0x3d, 0x0b, 0x92, 0x8f, 0x71, 0x67, 0xf7, 0xe3, 0x3d, 0x7c, 0x0a, 0x82, 0x6e, 0xd9, 0xb9, 0x80, 0xa5, 0x5f, 0xdd, 0x2f, 0xc2, 0xf7, 0x18, 0x73, 0xe3, 0xf0, 0x42, 0x2a, 0x32, 0x8c, 0x43, 0xcc, 0xb8, 0x04, 0x1e, 0xea, 0xc6, 0xb0, 0xd3, 0x07, 0xda, 0x7f, 0x80, 0x3d, 0x86, 0x3c, 0x7f, 0x96, 0x5e, 0x4c, 0xe4, 0x82, 0xa2, 0x3f, 0xcb, 0x56, 0x57, 0x6d, 0x63, 0xd6, 0xfb, 0xd7, 0x0e, 0x8c, 0xa5, 0xed, 0x1e, 0xb7, 0xe3, 0x97, 0xfd, 0x0e, 0xb3, 0xb3, 0x8e, 0x67, 0xf0, 0xaa, 0x0f, 0x32, 0xde, 0x48, 0xd3, 0x40, 0x3c, 0x22, 0xaf, 0xcc, 0x18, 0xb5, 0x87, 0xda, 0x2c, 0x63, 0x21, 0x25, 0x69, 0xb1, 0xaf, 0x6a, 0xbe, 0x34, 0x40, 0xdd, 0x0e, 0x33, 0x8e, 0x3c, 0xe3, 0xde, 0x34, 0x48, 0xba, 0x8f, 0x2d, 0xfd, 0x1d, 0xf5, 0xa2, 0x1d, 0x6f, 0x4b, 0x64, 0xb5, 0x19, 0x98, 0x8a, 0x28, 0x24, 0x95, 0xb5, 0x1b, 0xbd, 0x41, 0xf1, 0xe4, 0x63, 0x2d, 0x8d, 0xc8, 0x40, 0x87, 0x61, 0xa0, 0x3b, 0x2e, 0x75, 0x18, 0xcb, 0x0b, 0xc9, 0x16, 0x79, 0xb5, 0xac, 0x90, 0x0a, 0xc0, 0xc9, 0xd9, 0x22, 0x87, 0xfc, 0x99, 0x91, 0x97, 0xff, 0xfd, 0x47, 0x43, 0xeb, 0xf7, 0x75, 0x81, 0x56, 0x9c, 0x02, 0xcf, 0x5c, 0xe0, 0x07, 0xed, 0x07, 0x65, 0x2f, 0x7f, 0xef, 0x47, 0x43, 0xbd, 0x07, 0x38, 0xf4, 0x88, 0xbc, 0xe0, 0xd1, 0x23, 0xde, 0x46, 0xf2, 0x50, 0xc4, 0xbb, 0x12, 0xbf, 0xb5, 0x7a, 0x69, 0xd2, 0x48, 0x08, 0xfc, 0x81, 0x34, 0x52, 0xc5, 0xb0, 0xb4, 0xe6, 0x79, 0xcd, 0xac, 0x31, 0x96, 0x5a, 0x49, 0x70, 0x92, 0x6b, 0x01, 0x6b, 0x61, 0x22, 0x34, 0x73, 0x3c, 0x74, 0x15, 0x3d, 0xd1, 0xdb, 0x78, 0x5f, 0x78, 0xbd, 0xcb, 0x34, 0xd2, 0xdb, 0x3e, 0xf5, 0xe0, 0x7a, 0xc8, 0x78, 0x1e, 0xcd, 0xaf, 0x3c, 0x9f, 0x6c, 0x31, 0xd8, 0xfb, 0xe8, 0x61, 0xb7, 0x97, 0x3c, 0xb1, 0x75, 0x78, 0xab, 0x8f, 0xf5, 0x82, 0x82, 0x2f, 0xd4, 0xf4, 0xc5, 0x20, 0x13, 0xfa, 0xbc, 0xac, 0xab, 0x1b, 0xf6, 0x18, 0xc2, 0xeb, 0xbd, 0xd5, 0xb4, 0x68, 0xad, 0xf5, 0xed, 0x2e, 0xef, 0x3c, 0x5a, 0xdc, 0x61, 0xdd, 0xce, 0xe7, 0x4f, 0x28, 0x0e, 0xb1, 0xcf, 0xc6, 0x79, 0x86, 0xbb, 0x46, 0x38, 0x85, 0x67, 0x35, 0x29, 0x4f, 0x45, 0xbb, 0x5a, 0x3d, 0x98, 0x8f, 0xad, 0x78, 0x2f, 0x3d, 0xf5, 0x83, 0xb5, 0x54, 0x31, 0xed, 0xc8, 0x43, 0xf1, 0x55, 0xfb, 0x79, 0x4d, 0xa3, 0xdd, 0xe3, 0xa5, 0xd2, 0x22, 0x2f, 0x29, 0x1f, 0x3e, 0x8b, 0x70, 0xc8, 0xff, 0x47, 0x1e, 0x52, 0x4a, 0xa3, 0x5d, 0x71, 0x73, 0xb9, 0xf5, 0xc8, 0x3d, 0x09, 0xbf, 0x52, 0x8f, 0xef, 0xa6, 0xf1, 0x77, 0xe5, 0x56, 0xa4, 0x5a, 0xf4, 0xe1, 0xb3, 0x47, 0xf8, 0x84, 0x88, 0xb2, 0x7d, 0xcf, 0x51, 0xb8, 0xa5, 0x44, 0xcc, 0xf1, 0x12, 0xc2, 0x17, 0x7f, 0xf0, 0x03, 0x0e, 0x8f, 0xae, 0x8f, 0xcb, 0xb1, 0x75, 0xb1, 0xde, 0x85, 0x7d, 0x0b, 0x37, 0x78, 0x32, 0x1b, 0xd6, 0x1f, 0x40, 0x09, 0x4d, 0x56, 0x8f, 0x51, 0x3c, 0x41, 0x1a, 0x51, 0x57, 0x2b, 0x52, 0x87, 0xe1, 0x18, 0x42, 0x63, 0x9b, 0x06, 0x9f, 0xa3, 0xc0, 0x4f, 0x3f, 0xa4, 0xe2, 0x26, 0x17, 0x5b, 0x88, 0xbc, 0xf9, 0xab, 0xe7, 0x8f, 0xb4, 0x4e, 0x47, 0xad, 0xeb, 0x5d, 0x5e, 0x5a, 0x28, 0x2c, 0xe3, 0x3e, 0xa4, 0x5a, 0x7b, 0xe5, 0x5b, 0x1f, 0x92, 0xe7, 0xad, 0xd7, 0xf0, 0x1b, 0x51, 0x9e, 0x8d, 0x76, 0x27, 0xaa, 0xc1, 0xa3, 0xdb, 0x0f, 0x36, 0x92, 0x0c, 0x9c, 0x96, 0x88, 0xd5, 0x68, 0x27, 0xe8, 0x36, 0xfb, 0x79, 0xc8, 0x11, 0x3d, 0xc1, 0x29, 0x6c, 0xe9, 0xda, 0xcc, 0xa4, 0x71, 0x56, 0x42, 0xaa, 0x60, 0xba, 0x93, 0x1d, 0x4b, 0x76, 0x58, 0xf7, 0x26, 0x13, 0xa6, 0x53, 0x35, 0xd1, 0x60, 0xfc, 0x55, 0x67, 0x83, 0x90, 0x9d, 0x6d, 0xa5, 0x8d, 0x94, 0xc7, 0x2b, 0xb6, 0x6f, 0x1e, 0xe1, 0x13, 0x81, 0xca, 0x56, 0x52, 0xde, 0xcf, 0x0e, 0x37, 0xd3, 0x27, 0xc7, 0x1c, 0x31, 0x67, 0x4c, 0xe8, 0x3c, 0xbe, 0xad, 0x53, 0x92, 0xd2, 0x31, 0x9b, 0x38, 0xf0, 0x96, 0x64, 0x76, 0x62, 0xf6, 0x76, 0x60, 0xee, 0xb6, 0x63, 0xe6, 0x76, 0x6c, 0x28, 0x66, 0xeb, 0xc6, 0x59, 0x94, 0x53, 0x22, 0x1d, 0x03, 0x37, 0xe5, 0xbf, 0xc7, 0x3f, 0x8b, 0xb2, 0x4b, 0x27, 0x1f, 0x07, 0x87, 0x75, 0x14, 0xfc, 0x82, 0x5c, 0x3f, 0x74, 0x98, 0x57, 0x71, 0xd6, 0x64, 0x9d, 0xd8, 0x65, 0xac, 0x2e, 0xac, 0x12, 0xbe, 0x5a, 0x2e, 0x6d, 0x7d, 0xf9, 0xee, 0x1a, 0xf5, 0xf2, 0xf6, 0xc0, 0xdd, 0x21, 0xf5, 0xca, 0xce, 0x20, 0xaf, 0xae, 0xec, 0x08, 0xdc, 0x5d, 0xa9, 0x5e, 0x93, 0x57, 0x0a, 0xc9, 0xf5, 0xa2, 0x77, 0x8a, 0xb6, 0x76, 0x13, 0x62, 0xaa, 0x40, 0xb5, 0x17, 0x2c, 0xa9, 0xf5, 0x94, 0xaf, 0xa8, 0xc3, 0xe0, 0x53, 0xca, 0x1c, 0x35, 0xc5, 0x54, 0x12, 0x28, 0x31, 0xb0, 0xc6, 0x03, 0x78, 0x2c, 0x47, 0x99, 0x39, 0xf2, 0x0b, 0x48, 0x83, 0xce, 0x52, 0x43, 0xe4, 0xd0, 0x4f, 0x7e, 0xd1, 0x94, 0x05, 0xae, 0xe1, 0xf2, 0xdd, 0x11, 0x75, 0x54, 0x31, 0xe3, 0x97, 0xf9, 0x8a, 0xd1, 0x03, 0xbd, 0x08, 0xad, 0x54, 0xaf, 0xf0, 0x0a, 0x11, 0x42, 0x83, 0x78, 0x42, 0x79, 0x35, 0x67, 0xa9, 0x6e, 0x6c, 0x67, 0xef, 0xd9, 0xcf, 0xbc, 0xb3, 0x77, 0x91, 0xbd, 0x87, 0xe8, 0xd2, 0xf6, 0xc5, 0x9b, 0xed, 0xec, 0xcd, 0xfc, 0x73, 0x76, 0xf5, 0xfe, 0x50, 0xae, 0xf9, 0x7a, 0xae, 0xe6, 0xcf, 0x6b, 0xbb, 0x14, 0x1e, 0xde, 0xa5, 0x98, 0x79, 0x93, 0xdd, 0xbc, 0xcf, 0x4f, 0xd8, 0xa5, 0xf8, 0xfc, 0x84, 0x5d, 0x8a, 0xcf, 0x8b, 0x5d, 0x8a, 0x99, 0x62, 0x97, 0x42, 0x5b, 0x9f, 0x4e, 0xb0, 0xa5, 0x97, 0xbd, 0x3a, 0xa0, 0x18, 0xf9, 0xfe, 0xe5, 0x00, 0x59, 0x3f, 0xdf, 0x48, 0xd3, 0x79, 0x45, 0x55, 0xbd, 0xfc, 0xf8, 0x06, 0xb4, 0xda, 0xb0, 0x0f, 0x52, 0xcb, 0xce, 0xbe, 0xc2, 0xb0, 0x7a, 0xfa, 0xef, 0x5f, 0x2b, 0x9c, 0xaf, 0x8e, 0x3c, 0xd1, 0x57, 0x58, 0xad, 0x9e, 0x4f, 0xad, 0x85, 0x79, 0x59, 0x12, 0x19, 0x8e, 0xac, 0xf9, 0xe4, 0x44, 0xfa, 0x2a, 0xf5, 0x97, 0xeb, 0xed, 0xb3, 0xd4, 0xf3, 0xf2, 0x2c, 0x75, 0x84, 0x67, 0xa3, 0x3d, 0x49, 0xf0, 0x3a, 0x86, 0x1c, 0xcc, 0x3b, 0x5b, 0xc9, 0x6a, 0x90, 0x88, 0xa6, 0xde, 0x86, 0xd9, 0x67, 0x4e, 0x88, 0x1c, 0x73, 0x2a, 0xc9, 0x09, 0x19, 0xab, 0x53, 0x5f, 0x99, 0xfb, 0x86, 0xd6, 0xd7, 0x4a, 0x7d, 0xe8, 0x67, 0x66, 0xbb, 0xde, 0xd7, 0x78, 0x3d, 0xd1, 0xd1, 0xe7, 0x28, 0x44, 0xef, 0x83, 0x3c, 0xc8, 0xf6, 0x83, 0x83, 0xa1, 0x2d, 0xcd, 0x80, 0xd0, 0x3a, 0x54, 0xb9, 0xb5, 0x19, 0x5c, 0x3c, 0xfa, 0xd8, 0xea, 0x5b, 0x8e, 0x73, 0x1f, 0x0b, 0x6b, 0x7d, 0x2c, 0xc5, 0x51, 0xa2, 0x9d, 0x47, 0xd1, 0xcf, 0xae, 0xe9, 0x3b, 0x03, 0x17, 0x53, 0x3b, 0x03, 0x63, 0x7d, 0xab, 0x40, 0x3d, 0x39, 0xbe, 0x22, 0xe8, 0x93, 0x7c, 0x81, 0x2d, 0x07, 0xb9, 0xd7, 0xf8, 0x82, 0x5b, 0x5e, 0xc1, 0xfd, 0xca, 0x60, 0x88, 0xfb, 0xcf, 0x50, 0x25, 0xf7, 0x1c, 0x5f, 0xa8, 0x30, 0x02, 0x69, 0xb3, 0x12, 0xbf, 0x97, 0xd2, 0xfc, 0xb4, 0x69, 0x2b, 0x81, 0xd1, 0x9b, 0xae, 0x04, 0x5a, 0x34, 0xae, 0x94, 0xf7, 0xd0, 0xe7, 0x56, 0xb8, 0x6a, 0x8a, 0xb2, 0x53, 0x9e, 0x59, 0x78, 0xae, 0x10, 0xb3, 0x72, 0x9e, 0xe3, 0x1e, 0xa1, 0xb9, 0x9f, 0xcd, 0xeb, 0xad, 0x65, 0x68, 0x9b, 0xbf, 0xff, 0x25, 0xaf, 0x74, 0x3b, 0xea, 0xbf, 0xfb, 0x2b, 0xa6, 0x8c, 0xca, 0x45, 0xd1, 0x46, 0xb9, 0x62, 0x86, 0xd1, 0x74, 0xf0, 0xc9, 0x60, 0x36, 0x5b, 0xf9, 0x9c, 0x14, 0x03, 0x45, 0x77, 0x53, 0x71, 0x82, 0xf7, 0x69, 0x2c, 0xba, 0xd7, 0x16, 0x21, 0x07, 0xe2, 0x0b, 0x03, 0x68, 0x73, 0x44, 0xc4, 0x86, 0xc0, 0x9d, 0xac, 0x26, 0xde, 0xb9, 0xc9, 0xf7, 0x72, 0x3b, 0x17, 0x44, 0x06, 0xde, 0xef, 0xf3, 0x52, 0xe8, 0x87, 0xc2, 0xd3, 0x12, 0x4b, 0x9e, 0x6c, 0xdf, 0x07, 0xca, 0xcd, 0x7b, 0x3b, 0x5e, 0xb3, 0xa6, 0xa1, 0xb2, 0xf8, 0x22, 0x35, 0xa2, 0x23, 0xb1, 0xcd, 0x8c, 0x4b, 0xc9, 0x16, 0xf3, 0xf4, 0x2f, 0xb5, 0x79, 0x7a, 0xd1, 0x66, 0x8d, 0xf2, 0xc7, 0xf3, 0x19, 0x1e, 0xc0, 0x21, 0x25, 0x58, 0xcb, 0xde, 0x28, 0x6f, 0x95, 0x63, 0xb7, 0x37, 0xb2, 0xfd, 0x2f, 0xe4, 0xb4, 0x49, 0xc0, 0x83, 0x85, 0xa5, 0x73, 0xce, 0xeb, 0x83, 0x93, 0x5c, 0x4e, 0x29, 0x97, 0x7c, 0x48, 0xe6, 0x19, 0x92, 0xbd, 0x2c, 0xd4, 0x16, 0xf3, 0xcc, 0x73, 0xb0, 0xc4, 0x4d, 0x79, 0x91, 0x57, 0xde, 0xdf, 0x54, 0xc6, 0x7d, 0xfb, 0x17, 0x3c, 0x2f, 0x7b, 0xe6, 0xb1, 0x04, 0x31, 0xa7, 0x91, 0xed, 0xf5, 0xe6, 0xb0, 0x25, 0x02, 0xe7, 0x5e, 0xcc, 0x2b, 0x73, 0x9a, 0x57, 0x03, 0xaa, 0x97, 0x58, 0x7a, 0x2a, 0x96, 0xea, 0xff, 0x43, 0x15, 0xb6, 0xc0, 0x36, 0x41, 0xcd, 0x8c, 0x77, 0x44, 0x89, 0xf7, 0x65, 0xcc, 0xba, 0x3c, 0x97, 0xaf, 0xc8, 0x69, 0xe1, 0x31, 0xc6, 0x76, 0xf4, 0xd1, 0x44, 0x1e, 0xe3, 0xd8, 0x19, 0x65, 0x2c, 0x2b, 0xac, 0xe9, 0xe2, 0xf9, 0xfb, 0x5f, 0x7e, 0xf7, 0x57, 0x8a, 0xe4, 0x8c, 0x3a, 0x22, 0xd1, 0xad, 0x71, 0xba, 0xb6, 0x83, 0x29, 0x1e, 0xeb, 0x0b, 0xdc, 0xb3, 0x59, 0x58, 0x36, 0xd4, 0xb8, 0x58, 0x76, 0xb0, 0x41, 0x72, 0xc8, 0x07, 0xd7, 0x5d, 0x30, 0xb7, 0x92, 0xa6, 0x83, 0x03, 0xcb, 0x19, 0x97, 0xb1, 0xe4, 0x06, 0xd4, 0x68, 0x15, 0xeb, 0x5e, 0xd8, 0xe7, 0x57, 0x7d, 0x48, 0x36, 0x4f, 0x93, 0xe0, 0xf8, 0x5d, 0xf2, 0xad, 0x09, 0x8b, 0xa7, 0x76, 0x5c, 0xe6, 0x62, 0xcd, 0x7f, 0x5e, 0x45, 0x9c, 0x20, 0x77, 0xbd, 0xaa, 0xf9, 0x86, 0x63, 0xed, 0x0a, 0x67, 0xc4, 0x39, 0xd9, 0x5d, 0x97, 0x5a, 0xf1, 0xd4, 0x5b, 0x39, 0xdb, 0x91, 0xcd, 0x3a, 0x15, 0x19, 0x4f, 0x82, 0x73, 0x1d, 0xf7, 0x5c, 0x75, 0x8b, 0xd8, 0xd1, 0x1a, 0x3e, 0xbb, 0x54, 0xf3, 0xd5, 0x14, 0xcf, 0x15, 0x1a, 0x0f, 0xc3, 0x67, 0x0f, 0xb9, 0x02, 0xec, 0xed, 0x4f, 0xe8, 0x9a, 0xbc, 0x1a, 0x0a, 0x2b, 0xd2, 0x6a, 0x83, 0xe0, 0x98, 0x88, 0x76, 0x46, 0x7b, 0xe2, 0xa6, 0xbc, 0x72, 0x92, 0x8f, 0x6d, 0x6e, 0x2b, 0xb8, 0xde, 0x6f, 0x85, 0x90, 0xee, 0x77, 0xcc, 0xa8, 0xc5, 0x18, 0xab, 0xf4, 0x34, 0x0b, 0x4d, 0xfa, 0x7d, 0x62, 0x1d, 0xb9, 0xbd, 0xf8, 0xc0, 0x3b, 0xef, 0xcd, 0x98, 0x4f, 0x46, 0x61, 0xa1, 0x69, 0x16, 0xbb, 0xb9, 0x79, 0x09, 0x87, 0xd0, 0xfc, 0x29, 0x66, 0x8b, 0xb0, 0x9c, 0x72, 0x32, 0xee, 0x49, 0x32, 0x36, 0x34, 0x88, 0xce, 0x1d, 0x62, 0x4a, 0x54, 0xbf, 0x39, 0x71, 0x7f, 0x34, 0x9c, 0xc8, 0x15, 0x3a, 0x1b, 0x53, 0xb4, 0xde, 0x74, 0x96, 0x2d, 0xbd, 0xac, 0x8a, 0x71, 0x66, 0x94, 0xcc, 0x68, 0x8f, 0x6c, 0x2a, 0x54, 0x93, 0xe8, 0x71, 0x9a, 0xbf, 0x34, 0x89, 0x6d, 0xd1, 0xc4, 0xa9, 0x75, 0xd3, 0x21, 0xe3, 0x16, 0x8c, 0x6b, 0xa3, 0xa4, 0xc5, 0xbf, 0x2e, 0xc6, 0xea, 0x3b, 0x9d, 0x05, 0x8c, 0x43, 0xb6, 0x91, 0xd1, 0x21, 0xdd, 0xa3, 0x1c, 0x11, 0x76, 0x8c, 0xa5, 0x6e, 0x83, 0x68, 0xed, 0x98, 0xf0, 0x75, 0x63, 0x05, 0xdf, 0xe7, 0xd2, 0x56, 0x54, 0x57, 0x53, 0xa9, 0x8b, 0x42, 0x9a, 0xb6, 0x52, 0x7f, 0xef, 0x12, 0xa3, 0x8b, 0x1a, 0x7a, 0x8b, 0x3b, 0x55, 0x95, 0x3d, 0x7b, 0xb0, 0xcf, 0xb1, 0xf3, 0xbb, 0xc0, 0x73, 0x67, 0x78, 0x25, 0xf0, 0xdd, 0x53, 0x84, 0xbf, 0xb1, 0xdc, 0x7f, 0x1a, 0x78, 0xd0, 0xe8, 0x08, 0x14, 0x99, 0x62, 0xeb, 0xf7, 0xad, 0x5f, 0x7a, 0x4a, 0x91, 0xd6, 0x92, 0x3c, 0xa9, 0xf6, 0x9d, 0x82, 0x51, 0x4d, 0x03, 0xbc, 0x5d, 0x45, 0x8d, 0x4b, 0xe4, 0x16, 0xc9, 0xa1, 0x58, 0xed, 0x90, 0x5e, 0x1c, 0x86, 0x43, 0xc9, 0xbd, 0x6c, 0xa3, 0x9f, 0x5a, 0x4f, 0x3d, 0xab, 0xd8, 0xaa, 0xbb, 0x0e, 0x26, 0x83, 0x23, 0x90, 0x94, 0x4c, 0x48, 0x9b, 0x5d, 0xdf, 0x27, 0x5b, 0x3b, 0xd4, 0xbd, 0xc9, 0xf8, 0x47, 0xac, 0x37, 0x28, 0x9b, 0x35, 0x4d, 0x71, 0xb4, 0x39, 0x4b, 0xdb, 0x36, 0xf0, 0x58, 0x05, 0x98, 0xf3, 0x65, 0x2f, 0xef, 0xb6, 0x8e, 0xd9, 0x66, 0xd9, 0x33, 0xce, 0x74, 0x71, 0x2d, 0xdf, 0x1c, 0x68, 0x9b, 0x34, 0xd0, 0xc3, 0xde, 0x17, 0x86, 0xbf, 0x7f, 0xc8, 0x67, 0xa3, 0x78, 0x81, 0x23, 0x87, 0x65, 0x6f, 0x39, 0xc3, 0x6e, 0xf4, 0x34, 0x52, 0x01, 0xfa, 0xd6, 0xc1, 0xfe, 0xee, 0x71, 0xab, 0x1e, 0xf0, 0xeb, 0x05, 0xff, 0x67, 0xf3, 0xbe, 0xf7, 0xba, 0xbc, 0x41, 0x25, 0x47, 0x31, 0x32, 0xec, 0xbc, 0x7f, 0xcc, 0xfb, 0xc0, 0xce, 0x59, 0x62, 0x7c, 0x9a, 0x85, 0x9d, 0xb7, 0xd3, 0xcb, 0x63, 0x5c, 0x5b, 0x05, 0xb5, 0xe1, 0xca, 0x15, 0x98, 0x15, 0x34, 0x60, 0x78, 0xb1, 0xd0, 0x78, 0x0b, 0x24, 0x8a, 0x14, 0x8b, 0x96, 0xfb, 0xe8, 0x0f, 0xc4, 0x5a, 0x35, 0x97, 0x38, 0x4b, 0x1d, 0xd5, 0x4b, 0xdc, 0x2d, 0xde, 0x25, 0x7b, 0x86, 0xfe, 0x7e, 0x40, 0xc0, 0x3e, 0xa6, 0xa9, 0x60, 0x97, 0xce, 0x74, 0x0d, 0x25, 0x05, 0xf4, 0x2f, 0xb7, 0x4d, 0x3a, 0x94, 0x5c, 0xf5, 0xed, 0xea, 0x8c, 0xd3, 0xff, 0xfd, 0x21, 0x6b, 0xed, 0x85, 0xb0, 0x45, 0x3d, 0xaf, 0x49, 0xff, 0xa3, 0xc7, 0x85, 0xed, 0x66, 0x6b, 0xc6, 0x22, 0xa7, 0x37, 0x63, 0xb1, 0xdb, 0x9b, 0xa1, 0x74, 0x50, 0xcd, 0x15, 0x35, 0xe2, 0xa9, 0x8c, 0x3d, 0x52, 0x94, 0xe1, 0xc9, 0x70, 0x65, 0xbb, 0xab, 0x1a, 0xbe, 0xe3, 0xac, 0x8a, 0x3d, 0x2c, 0xf4, 0xf7, 0xb2, 0x98, 0x76, 0x89, 0xdd, 0x21, 0x4b, 0x34, 0x10, 0xb7, 0xba, 0xb2, 0x3d, 0xd9, 0xce, 0xaa, 0x86, 0x87, 0x8b, 0x32, 0x63, 0x0f, 0x61, 0x1c, 0x9d, 0xd4, 0xd2, 0x68, 0x67, 0x4a, 0x81, 0x87, 0x50, 0x84, 0x64, 0x36, 0xe1, 0x9b, 0x44, 0xad, 0xc7, 0xa8, 0x48, 0x1e, 0x83, 0xdd, 0x14, 0xeb, 0x42, 0xac, 0x41, 0x8b, 0x05, 0xdf, 0x5d, 0xaa, 0xa5, 0x60, 0xdd, 0x31, 0xe4, 0xfc, 0x76, 0xdb, 0xd2, 0xfe, 0x6e, 0xf6, 0x72, 0x28, 0x4b, 0xef, 0xf5, 0x05, 0x3f, 0xcc, 0x58, 0xf8, 0xe6, 0xc0, 0xed, 0xd5, 0xa3, 0xc3, 0xb1, 0xee, 0xb4, 0xf7, 0x05, 0xa3, 0x27, 0x5f, 0xe2, 0x32, 0xa6, 0xdc, 0x58, 0x46, 0x11, 0xca, 0x28, 0x32, 0xd8, 0x27, 0xa1, 0x8c, 0x29, 0x7f, 0xb4, 0x0c, 0x4f, 0x5a, 0x9e, 0xf3, 0xae, 0x2b, 0x63, 0xfe, 0xe8, 0xc9, 0x58, 0xaf, 0x42, 0xaa, 0x11, 0x35, 0xcb, 0xb8, 0xae, 0x14, 0xa2, 0xd7, 0xb5, 0x50, 0xbd, 0xbe, 0x3d, 0xcd, 0x8b, 0x50, 0xda, 0xf5, 0xa9, 0xc2, 0x9e, 0x0c, 0xef, 0x14, 0x77, 0x75, 0xc3, 0x77, 0x78, 0x84, 0x4f, 0x88, 0x31, 0x7a, 0x6e, 0x51, 0x4e, 0x6b, 0x30, 0xd0, 0xae, 0x3f, 0x50, 0x4f, 0xc0, 0xb0, 0xaf, 0xa7, 0xf5, 0x5e, 0xcc, 0x5a, 0xd7, 0xe7, 0x1d, 0x72, 0x65, 0x78, 0x27, 0xb9, 0xc3, 0x37, 0xcb, 0xdb, 0x95, 0xca, 0xbb, 0x36, 0x2d, 0xa7, 0xf0, 0x75, 0x39, 0xcf, 0x1b, 0x3d, 0xd9, 0xd0, 0x83, 0xda, 0x39, 0xc0, 0x2d, 0xbb, 0x1a, 0xd2, 0x62, 0x9c, 0xae, 0xd1, 0x61, 0x7e, 0xab, 0xfc, 0x30, 0x63, 0x71, 0xf0, 0xb7, 0x66, 0x72, 0xbb, 0x46, 0x4f, 0x2a, 0xf4, 0xc9, 0xf9, 0xd4, 0x79, 0x54, 0xcc, 0xe7, 0x66, 0xb8, 0x52, 0x1c, 0x26, 0xeb, 0x05, 0xb8, 0x24, 0x0f, 0xb9, 0x0d, 0xce, 0x6c, 0xe7, 0x0a, 0xb2, 0xbc, 0xa8, 0xd1, 0xe3, 0x52, 0xcd, 0x4f, 0x5d, 0x22, 0xab, 0x74, 0x39, 0xad, 0x2f, 0x5f, 0x4e, 0x7d, 0x8a, 0x4d, 0xac, 0xe9, 0x89, 0x75, 0x3c, 0x97, 0xd8, 0xdf, 0xd5, 0xd6, 0xf7, 0x3c, 0x81, 0x8e, 0xa9, 0x47, 0x37, 0xb5, 0x5d, 0x3c, 0x94, 0x3c, 0xc3, 0x1e, 0xd5, 0xa4, 0x31, 0x3f, 0x7d, 0xd4, 0xff, 0x63, 0xb6, 0xba, 0xa4, 0x0f, 0x78, 0xfe, 0xf5, 0xde, 0x3a, 0xee, 0xc5, 0xa6, 0x8d, 0xf7, 0x90, 0x1b, 0xea, 0x2f, 0xb2, 0x8d, 0xda, 0xde, 0xe4, 0x92, 0x4b, 0x72, 0x48, 0xc9, 0xb2, 0x37, 0xbc, 0x75, 0x98, 0xa6, 0xa9, 0xc9, 0x37, 0x0f, 0xbe, 0xd4, 0xb7, 0xe4, 0x23, 0xd9, 0xd2, 0x90, 0x6c, 0x9f, 0x34, 0xd0, 0xc5, 0x1a, 0x25, 0xc3, 0xff, 0x4d, 0x36, 0xd8, 0x43, 0xc1, 0xdf, 0xba, 0x54, 0xc5, 0xcc, 0xa9, 0xba, 0xa6, 0x89, 0x34, 0x97, 0x22, 0x2d, 0x90, 0x92, 0xc6, 0x4a, 0x1b, 0xcf, 0xf1, 0x25, 0xe4, 0x18, 0xed, 0x8d, 0xe7, 0x41, 0x9e, 0x64, 0x9b, 0xb9, 0xed, 0x18, 0x79, 0xc3, 0x85, 0x9d, 0x34, 0xbc, 0x7a, 0x97, 0x7a, 0x5a, 0xb1, 0xd9, 0xa3, 0xb2, 0xc9, 0x9e, 0xc9, 0x31, 0xd7, 0x0e, 0x8e, 0xc5, 0xd4, 0xaa, 0xa7, 0x0b, 0x1b, 0xd8, 0xc3, 0x88, 0x3a, 0x52, 0x18, 0x52, 0x2f, 0xea, 0x5f, 0xf2, 0x98, 0xbd, 0xa4, 0x3f, 0x3f, 0x29, 0x56, 0xe5, 0xc1, 0x5d, 0xa1, 0xcf, 0x98, 0x98, 0xff, 0xab, 0xdb, 0x3f, 0xda, 0x5d, 0x4c, 0xc8, 0x6d, 0x96, 0x7a, 0x49, 0xe4, 0xb6, 0x5b, 0xdb, 0x5d, 0x0b, 0x85, 0x7c, 0x9a, 0xd7, 0xbc, 0x7d, 0xa9, 0xf5, 0xe5, 0x8a, 0xf2, 0x35, 0x94, 0xef, 0xa2, 0xdb, 0x85, 0x46, 0xb7, 0xfc, 0x78, 0xb2, 0x8d, 0x56, 0x53, 0x28, 0x58, 0x52, 0xfe, 0x6d, 0xb5, 0xb8, 0x3c, 0x69, 0x50, 0x1a, 0x1d, 0xcb, 0xc9, 0x27, 0x78, 0x22, 0x53, 0x71, 0xbb, 0x19, 0x54, 0xf3, 0xb1, 0xd7, 0x5f, 0x8c, 0xb6, 0x4a, 0x25, 0x59, 0xce, 0xe5, 0xe4, 0xf2, 0xd0, 0xc9, 0xa4, 0xe7, 0x4e, 0x30, 0x50, 0xc2, 0x92, 0xa8, 0x34, 0x54, 0x9c, 0x15, 0x39, 0xe8, 0xae, 0x9e, 0xf7, 0x7b, 0x17, 0xfd, 0xf4, 0x97, 0xad, 0x92, 0xb3, 0xb6, 0x78, 0x0a, 0x52, 0x79, 0x44, 0x8b, 0x99, 0x8e, 0xfe, 0x0e, 0x5f, 0x1b, 0x8f, 0x8e, 0x90, 0x4d, 0xac, 0x22, 0x7c, 0x2e, 0x61, 0xda, 0x13, 0x6d, 0x35, 0x2b, 0xc6, 0x3d, 0xd1, 0x26, 0xc9, 0x9f, 0x05, 0x49, 0x2d, 0xb9, 0xbf, 0xb7, 0x69, 0xab, 0xbf, 0xeb, 0x4e, 0xf6, 0xb2, 0x2a, 0xdd, 0x59, 0x49, 0xc6, 0x86, 0xd0, 0x9d, 0x21, 0xb1, 0x17, 0x9b, 0x1f, 0x0e, 0xdc, 0x19, 0x20, 0x13, 0xef, 0x55, 0x35, 0x04, 0xb6, 0x80, 0x63, 0xc4, 0x5b, 0x56, 0xed, 0x3b, 0xe5, 0xda, 0xaa, 0xe6, 0x65, 0xe6, 0x0e, 0x1c, 0x11, 0x67, 0xb6, 0xae, 0x29, 0x72, 0x5e, 0xe8, 0x5c, 0x6b, 0xfa, 0x90, 0xc4, 0xfe, 0x41, 0xc1, 0xa7, 0x2e, 0x94, 0x3d, 0x28, 0x97, 0x2d, 0xfb, 0xdd, 0x02, 0x9a, 0xe5, 0x6d, 0x77, 0xc9, 0x95, 0x83, 0xbb, 0x84, 0x65, 0xc8, 0x65, 0xb1, 0x9b, 0xb4, 0x52, 0xb7, 0x33, 0x9a, 0x92, 0xf2, 0xa3, 0x05, 0x7e, 0x5d, 0x9c, 0x97, 0x66, 0x6f, 0x22, 0xeb, 0xb8, 0xf7, 0x1a, 0xf1, 0xb5, 0x5b, 0x6e, 0x02, 0x8f, 0xb5, 0x1c, 0x63, 0xbd, 0xd2, 0x39, 0xd3, 0x18, 0xbb, 0xb7, 0x07, 0x98, 0xbf, 0x0c, 0x4e, 0xfc, 0x26, 0xd6, 0x4a, 0xe3, 0x5e, 0x9e, 0x94, 0x3a, 0xb6, 0xae, 0x7d, 0x6f, 0x63, 0xcd, 0x08, 0x99, 0xc1, 0x55, 0x16, 0xc8, 0x8b, 0x65, 0xb3, 0xae, 0x35, 0x9b, 0x2d, 0xbc, 0xf0, 0x4a, 0xb2, 0x24, 0x5a, 0x2a, 0x3b, 0xf6, 0x30, 0x38, 0xf3, 0x4c, 0xb4, 0x87, 0xa1, 0xff, 0xe1, 0x25, 0xc7, 0xb5, 0xaf, 0x2d, 0x06, 0x32, 0x3f, 0x68, 0x5e, 0x98, 0x64, 0xa9, 0x12, 0xa3, 0xc4, 0x25, 0x3c, 0x70, 0x16, 0x89, 0xf3, 0xf0, 0x86, 0x35, 0xdd, 0xfa, 0x89, 0xd6, 0xf3, 0x6a, 0xd1, 0x98, 0x37, 0xe2, 0x88, 0x8e, 0x97, 0x3d, 0xda, 0x1c, 0x8e, 0xf9, 0x17, 0xf8, 0x97, 0x03, 0x7c, 0x62, 0x20, 0x28, 0xba, 0x71, 0xde, 0x15, 0xf5, 0x50, 0xdd, 0xb6, 0xb1, 0x38, 0xc0, 0x61, 0x0f, 0x44, 0xbe, 0x21, 0xe2, 0x2c, 0x75, 0xdb, 0x78, 0x3e, 0x61, 0xbb, 0x5f, 0x91, 0x07, 0x63, 0x20, 0x8e, 0x10, 0x6d, 0x3e, 0xaf, 0xbd, 0xc9, 0x37, 0x2e, 0x2a, 0x41, 0x7e, 0x1d, 0x13, 0xf3, 0xd3, 0xca, 0xe2, 0xef, 0x10, 0x5f, 0x96, 0x8a, 0x03, 0x1f, 0x1c, 0x46, 0x19, 0x2e, 0xe1, 0xb5, 0xd8, 0x31, 0x16, 0x56, 0x2c, 0x76, 0xe2, 0xfc, 0xba, 0xaf, 0x43, 0x1a, 0x5b, 0x37, 0x8b, 0x28, 0x2e, 0x31, 0x27, 0x5a, 0x78, 0xb5, 0xec, 0xe5, 0x51, 0x32, 0x4d, 0xb0, 0xef, 0x74, 0x8e, 0xbf, 0x39, 0x42, 0x62, 0xbf, 0x7e, 0x28, 0xb5, 0x5e, 0x26, 0xbe, 0x75, 0x3b, 0x72, 0xc0, 0x51, 0x9b, 0xdf, 0x3c, 0x6c, 0x67, 0xee, 0xd8, 0x3c, 0xd8, 0x37, 0xe1, 0xeb, 0xac, 0x1b, 0xbe, 0x1e, 0xd4, 0xbe, 0xe6, 0xb5, 0x7c, 0x21, 0x17, 0x58, 0xda, 0xc6, 0xbd, 0x68, 0x15, 0xdd, 0xcc, 0x5b, 0x41, 0x0a, 0xdf, 0xa5, 0x15, 0xc5, 0xe4, 0x5e, 0x4e, 0x0e, 0xcc, 0x72, 0x6f, 0x3b, 0x85, 0x66, 0x05, 0x66, 0xae, 0x53, 0x9e, 0x05, 0x7c, 0xe6, 0xa4, 0xb3, 0x91, 0x72, 0x4a, 0x0b, 0x29, 0xff, 0xb5, 0x73, 0x54, 0x70, 0xbc, 0x57, 0x86, 0xac, 0x0b, 0x69, 0x41, 0xe3, 0xab, 0x8c, 0xa9, 0xb3, 0x12, 0xe5, 0x42, 0xf2, 0xf4, 0xef, 0xbe, 0x59, 0x4c, 0x08, 0xa1, 0xa1, 0x1f, 0x93, 0xc7, 0xb7, 0x92, 0xa6, 0xb3, 0xed, 0xb8, 0x5c, 0xc9, 0xfd, 0x0b, 0x43, 0x16, 0x18, 0x06, 0x87, 0x97, 0x96, 0x1a, 0x29, 0x25, 0x3d, 0x2f, 0x57, 0x22, 0x5f, 0x8b, 0x61, 0xff, 0x16, 0x91, 0xb6, 0x3e, 0x12, 0xf1, 0x3f, 0x26, 0x97, 0xa0, 0xe4, 0x21, 0x61, 0x35, 0xad, 0x59, 0x29, 0x17, 0x31, 0x07, 0x95, 0x56, 0xaa, 0x41, 0x2b, 0x75, 0xac, 0x5d, 0x58, 0x82, 0xc8, 0x17, 0x79, 0xe7, 0x73, 0xb8, 0xa7, 0x85, 0xb2, 0x7f, 0xfe, 0xab, 0x38, 0xa9, 0x2e, 0x77, 0x33, 0x99, 0xf6, 0x6b, 0xbb, 0xd7, 0xf9, 0xcc, 0x15, 0x0a, 0x3b, 0x64, 0x89, 0xad, 0xe0, 0x07, 0x7b, 0x6e, 0xe6, 0x61, 0xcc, 0x1e, 0x4a, 0xb3, 0x0d, 0x79, 0x27, 0x60, 0xd1, 0xda, 0xa8, 0x98, 0x1c, 0x75, 0x6c, 0x3d, 0xdc, 0x32, 0xbe, 0xe2, 0xd9, 0x17, 0x39, 0x98, 0xb9, 0x9b, 0x7e, 0x90, 0xbe, 0x6e, 0x97, 0x6a, 0x13, 0x6f, 0x56, 0x82, 0x25, 0x1e, 0x6b, 0xaa, 0x57, 0x8e, 0x2e, 0x4d, 0xf7, 0x30, 0xa5, 0xfb, 0xc0, 0xfc, 0x86, 0x46, 0x1b, 0xa8, 0x4c, 0xac, 0xf0, 0x85, 0x04, 0x77, 0xdd, 0xe2, 0x42, 0x2f, 0x14, 0xde, 0x81, 0x16, 0xe2, 0x7b, 0x0f, 0x8f, 0xe1, 0xb6, 0x2f, 0xb0, 0xc6, 0x82, 0xa0, 0x9f, 0xb5, 0x37, 0x1b, 0xc1, 0xd1, 0x46, 0xf2, 0x35, 0xb1, 0x26, 0x1f, 0xeb, 0x3e, 0x4f, 0xd0, 0x55, 0xb0, 0xd7, 0x8e, 0xaf, 0x2f, 0xaa, 0x45, 0xc0, 0x8c, 0x4b, 0x48, 0x63, 0xb3, 0x13, 0x66, 0x50, 0x65, 0xf6, 0x8d, 0x15, 0xc7, 0xf8, 0xd4, 0x3d, 0xd2, 0x08, 0xea, 0xfa, 0x79, 0xdc, 0x8d, 0xfd, 0x5d, 0x09, 0xd7, 0x32, 0x53, 0xb4, 0x2b, 0x91, 0xa3, 0x04, 0xda, 0xcc, 0x78, 0xcb, 0xb1, 0x96, 0x93, 0xa5, 0xbf, 0x2b, 0xee, 0x57, 0x1c, 0xda, 0xd8, 0xe4, 0xd4, 0x3e, 0xeb, 0x7b, 0x7d, 0x75, 0xdf, 0x1a, 0xd3, 0x4c, 0x2b, 0xd0, 0x73, 0xc8, 0xd4, 0xef, 0xc6, 0xf6, 0xec, 0x81, 0x2e, 0xcd, 0xea, 0x9b, 0x7d, 0x9b, 0x22, 0x24, 0x5f, 0xe0, 0xdd, 0xee, 0xa4, 0xb6, 0xe2, 0x9b, 0xdb, 0x7c, 0xd3, 0x53, 0x8e, 0x8c, 0xa3, 0x3d, 0xe0, 0xe7, 0x6e, 0xd4, 0x53, 0x31, 0xde, 0x34, 0xd4, 0xc2, 0x63, 0x45, 0xf4, 0x7e, 0x5e, 0x55, 0xf4, 0x0b, 0x5d, 0x4b, 0xc3, 0x9c, 0x4a, 0x92, 0xea, 0xcf, 0xd2, 0xb4, 0x90, 0x9b, 0x72, 0x84, 0x86, 0xe5, 0xad, 0x42, 0x33, 0xd3, 0x31, 0x87, 0x9f, 0x3d, 0xe2, 0xb7, 0x68, 0x0e, 0x7b, 0xd2, 0xf6, 0x2b, 0x7e, 0x59, 0x9a, 0x60, 0x9f, 0x6d, 0xd1, 0x46, 0xd2, 0x84, 0xd0, 0x68, 0x5b, 0xf1, 0xf8, 0x9b, 0xe6, 0x6b, 0x3c, 0xfc, 0x27, 0xf8, 0x37, 0xf5, 0x4a, 0xe0, 0xb2, 0xcc, 0x21, 0xcc, 0xd3, 0x0e, 0x43, 0x43, 0xf7, 0xc1, 0xee, 0x18, 0x45, 0xbb, 0xe2, 0x97, 0x84, 0x27, 0x95, 0xaf, 0x60, 0x7e, 0x64, 0x3b, 0xd2, 0x69, 0xba, 0x1d, 0xe9, 0x45, 0x61, 0x47, 0x7a, 0x49, 0xec, 0x72, 0x5d, 0x6e, 0x33, 0xa7, 0xe9, 0x64, 0x5c, 0x9c, 0x68, 0x53, 0x8a, 0x2f, 0x07, 0xb4, 0x3d, 0x79, 0xcf, 0xe4, 0x22, 0x72, 0x1a, 0x5c, 0x92, 0xab, 0x8e, 0xfd, 0x65, 0xe2, 0x3a, 0x2e, 0xa4, 0x09, 0xab, 0x2c, 0xb1, 0xcd, 0xb1, 0x86, 0xcd, 0xcc, 0x0f, 0x14, 0x5e, 0x3d, 0x12, 0xb6, 0xc7, 0x7d, 0x5b, 0x99, 0xdb, 0x28, 0x44, 0x5f, 0x52, 0x07, 0xdc, 0x39, 0xb2, 0xc7, 0x18, 0x13, 0x5e, 0x44, 0x0f, 0xb1, 0x75, 0x5b, 0xf0, 0x82, 0x3a, 0xca, 0x1e, 0x38, 0x2b, 0x2f, 0xa0, 0x7f, 0xd5, 0xa8, 0x83, 0xf6, 0x66, 0x75, 0x40, 0x5f, 0xfd, 0x38, 0x94, 0x5a, 0xfd, 0x10, 0x5a, 0xc0, 0x94, 0xf9, 0x04, 0xfb, 0x66, 0xfd, 0xb6, 0x7a, 0x91, 0xda, 0x2d, 0xa7, 0x76, 0x69, 0xf2, 0xdc, 0x32, 0xca, 0x5c, 0xcf, 0x2b, 0x90, 0xba, 0x2f, 0xd1, 0x13, 0x8e, 0xd9, 0x7d, 0xa0, 0xe4, 0x99, 0xed, 0xb2, 0x34, 0x51, 0x72, 0x74, 0x6a, 0x30, 0xdd, 0xe7, 0xec, 0xb9, 0x23, 0x0c, 0xaa, 0x9b, 0x71, 0x07, 0xef, 0xd6, 0x4a, 0xf7, 0x27, 0xcf, 0xf4, 0xe1, 0xc9, 0x62, 0xe9, 0x61, 0xab, 0x68, 0xf0, 0x4c, 0xeb, 0x97, 0x88, 0x67, 0x1e, 0xab, 0xc6, 0x2b, 0x8a, 0x8d, 0x9f, 0x65, 0x5e, 0xb3, 0x1e, 0xe4, 0x27, 0x1f, 0x87, 0x9e, 0x56, 0x28, 0x63, 0x21, 0xef, 0xea, 0x0b, 0xbd, 0xcd, 0x4c, 0xef, 0x2c, 0x75, 0xc0, 0x8b, 0xfa, 0x40, 0xea, 0xdb, 0x15, 0x5a, 0x49, 0xd6, 0xf6, 0x40, 0x37, 0x30, 0x72, 0x47, 0x90, 0x72, 0x10, 0xca, 0x7e, 0x35, 0x2f, 0xad, 0xb6, 0x1c, 0x7f, 0x5a, 0xda, 0xc2, 0xda, 0x63, 0xe2, 0x9c, 0xd0, 0x28, 0xaf, 0xb4, 0xb4, 0xe5, 0xf5, 0xf3, 0xde, 0xb7, 0x89, 0x56, 0xf2, 0xaa, 0x85, 0x9e, 0x72, 0xd8, 0xee, 0x91, 0xb6, 0xdc, 0xc7, 0x7e, 0x3e, 0x91, 0xb2, 0xea, 0xca, 0x35, 0xb9, 0x6e, 0xab, 0x1e, 0x73, 0xd2, 0x85, 0x98, 0xc5, 0xbd, 0x7a, 0x1e, 0x9a, 0xd7, 0xed, 0xa7, 0x45, 0xcc, 0x45, 0x19, 0x31, 0xf7, 0xb3, 0x4f, 0x4e, 0x11, 0x83, 0xdf, 0x61, 0x7c, 0x69, 0xac, 0xdb, 0x9a, 0x4f, 0x9f, 0x0b, 0x90, 0xab, 0xe8, 0x19, 0xf5, 0x64, 0xdd, 0xd6, 0xf2, 0x00, 0x9e, 0x67, 0xe2, 0xf9, 0x62, 0xdd, 0x56, 0x1b, 0x87, 0xbb, 0xfd, 0xd9, 0x3c, 0x77, 0x6a, 0xba, 0x6b, 0x55, 0xff, 0xc9, 0x54, 0xa7, 0x68, 0x1d, 0xdb, 0x3b, 0xd6, 0x6f, 0x66, 0x1f, 0x1c, 0xa4, 0x0a, 0x2a, 0xb9, 0x95, 0xb9, 0x27, 0x9e, 0xd9, 0x2c, 0xc2, 0x02, 0xf2, 0x41, 0xcc, 0x55, 0xd5, 0xec, 0x15, 0x69, 0x7a, 0xaa, 0x66, 0x80, 0x6a, 0xd3, 0xfd, 0x1a, 0x54, 0xa3, 0x75, 0xfb, 0x3f, 0x69, 0xbb, 0xab, 0x93, 0xf2, 0x28, 0x4f, 0xfc, 0xda, 0x64, 0xcd, 0x4f, 0xa9, 0x15, 0x74, 0x97, 0xbc, 0xe5, 0x77, 0x3f, 0xfe, 0x3a, 0xa5, 0x4e, 0x37, 0x46, 0x0e, 0xf9, 0xe6, 0x59, 0x64, 0x52, 0xff, 0x59, 0x9c, 0x5a, 0x7b, 0x9c, 0x39, 0x5a, 0x84, 0x15, 0xdc, 0xb1, 0x12, 0xdf, 0xc9, 0xc0, 0x6e, 0x77, 0x2a, 0xff, 0xb6, 0xc9, 0x83, 0x8c, 0x39, 0x51, 0xb7, 0x05, 0x57, 0x3e, 0xb1, 0xd6, 0xed, 0xd0, 0x63, 0x2e, 0x02, 0x53, 0x9b, 0xea, 0x35, 0x4c, 0x8d, 0xd6, 0xed, 0x48, 0xc3, 0xc7, 0x49, 0x81, 0xed, 0x4d, 0x3a, 0x4c, 0xa9, 0xf4, 0xc3, 0xe8, 0xeb, 0x1c, 0x4a, 0x37, 0xa4, 0x3f, 0xdd, 0x7e, 0xeb, 0x10, 0xc7, 0x18, 0x26, 0xa4, 0x1f, 0x59, 0x9d, 0x93, 0x9e, 0x4b, 0x5a, 0xfa, 0xf3, 0x6d, 0xb9, 0xe9, 0x39, 0xdd, 0xd5, 0xac, 0x7e, 0x4c, 0x56, 0xfc, 0x9e, 0xa2, 0x1c, 0xfc, 0x9e, 0xa1, 0x5c, 0xfc, 0x9e, 0x05, 0x0e, 0x9a, 0xd5, 0x0f, 0xc8, 0x86, 0xfe, 0x90, 0x8f, 0xab, 0xc0, 0x3f, 0x4b, 0xfd, 0xa8, 0x21, 0x78, 0x57, 0x90, 0xa6, 0x97, 0xce, 0x52, 0xdf, 0x6e, 0x08, 0xdf, 0x15, 0x26, 0x19, 0xb5, 0xcd, 0x27, 0x3b, 0x7e, 0xa7, 0x93, 0x53, 0x3c, 0xbb, 0xc5, 0x73, 0x91, 0x78, 0xf6, 0x8b, 0xe7, 0x12, 0xf1, 0x5c, 0x26, 0x9e, 0x85, 0x5f, 0x23, 0x50, 0xb9, 0xe9, 0x02, 0xa7, 0x79, 0x02, 0xce, 0x95, 0x54, 0x0f, 0x3c, 0x3c, 0x25, 0x3c, 0xc3, 0x52, 0xdd, 0x0e, 0xa5, 0xe0, 0xfa, 0x1e, 0x39, 0x9a, 0x27, 0x2c, 0xd9, 0x4f, 0xdc, 0xa1, 0xd9, 0x4a, 0x59, 0xef, 0x00, 0xd5, 0xa6, 0x85, 0x0a, 0xd8, 0x0d, 0xfd, 0x7b, 0x6b, 0xdb, 0xe7, 0xd2, 0x6a, 0xb3, 0xff, 0x2a, 0x6b, 0xbe, 0x5b, 0xc7, 0xd6, 0xae, 0x0a, 0xee, 0x5a, 0x4e, 0x76, 0x72, 0xe0, 0xd7, 0x41, 0x4e, 0x94, 0x1d, 0xc2, 0xfc, 0x57, 0x7d, 0x07, 0xb7, 0x54, 0x10, 0xf0, 0x87, 0x69, 0xa1, 0xd0, 0x0c, 0xde, 0x45, 0xd3, 0x13, 0x66, 0xd4, 0xd2, 0xad, 0x90, 0xe1, 0xf0, 0xf5, 0x10, 0x5c, 0xdd, 0xce, 0xe5, 0x6b, 0xfd, 0x00, 0xbc, 0xa2, 0x99, 0xe5, 0x73, 0xb4, 0xb5, 0x3b, 0xac, 0xa5, 0xdf, 0x79, 0x17, 0x7b, 0xad, 0xe0, 0xa7, 0x47, 0x74, 0xcc, 0x9f, 0x6f, 0x9f, 0x3c, 0xc4, 0x6d, 0xae, 0x8f, 0x81, 0xab, 0x05, 0x63, 0x63, 0x60, 0x64, 0xc2, 0x38, 0x4a, 0x1f, 0x03, 0xa7, 0xdb, 0xac, 0x69, 0xb5, 0xd8, 0x2a, 0x23, 0x64, 0xac, 0x0e, 0x44, 0x47, 0xa3, 0x56, 0xfc, 0xbe, 0x61, 0x9f, 0xa5, 0x8e, 0xc8, 0x86, 0xaf, 0x26, 0x57, 0xdf, 0xba, 0x2f, 0xb9, 0x34, 0x2b, 0xca, 0xe7, 0x53, 0xf7, 0xb1, 0x2f, 0xf1, 0xd5, 0xd6, 0x7d, 0xc9, 0x65, 0x9d, 0x69, 0xfe, 0x36, 0xed, 0xe4, 0xc7, 0xe5, 0xc6, 0x6f, 0xd9, 0xd8, 0x3d, 0x44, 0x51, 0x8a, 0x51, 0x3b, 0xdd, 0x47, 0x4b, 0xa8, 0x51, 0x2e, 0xa7, 0xe1, 0x2f, 0xfd, 0x9b, 0x52, 0x27, 0xee, 0xef, 0x29, 0xd5, 0xe2, 0xfe, 0x81, 0x52, 0x21, 0xee, 0x1f, 0x29, 0x25, 0xe2, 0xfe, 0x9f, 0x4a, 0xb1, 0xb8, 0x5f, 0x53, 0x3c, 0x7c, 0x77, 0x64, 0x28, 0x0e, 0x71, 0x37, 0x83, 0xab, 0xe5, 0xfb, 0x2d, 0x4a, 0xae, 0xb8, 0xe7, 0x28, 0x16, 0x71, 0xff, 0xdc, 0xea, 0xbc, 0x7d, 0x5d, 0xe0, 0x2d, 0xb8, 0x0e, 0xe7, 0x35, 0xed, 0x10, 0x87, 0x4d, 0x59, 0x0a, 0xae, 0x42, 0xc6, 0x1b, 0x5a, 0x45, 0x3b, 0xa1, 0x59, 0x48, 0x28, 0x0a, 0xa8, 0xcf, 0x30, 0xae, 0x93, 0xa9, 0xde, 0x2d, 0xf3, 0x68, 0xd0, 0x68, 0xc0, 0x68, 0xd5, 0x95, 0xff, 0x1c, 0x19, 0xa7, 0x1b, 0xed, 0x96, 0xb4, 0xde, 0xad, 0xe1, 0xec, 0x19, 0xe4, 0x3f, 0x0b, 0xdf, 0x82, 0x52, 0x88, 0x52, 0x66, 0x70, 0x19, 0xa9, 0x12, 0xee, 0xe3, 0x7e, 0x62, 0x73, 0x84, 0x5e, 0xea, 0x5e, 0x2a, 0x39, 0xe6, 0xc9, 0xf3, 0xed, 0xd5, 0xf2, 0x18, 0xe7, 0xf7, 0xc9, 0x16, 0xfb, 0xfc, 0xf4, 0x99, 0x49, 0xa7, 0x88, 0xe6, 0x90, 0x7f, 0xb9, 0xca, 0x32, 0x0f, 0x66, 0x26, 0x96, 0x9a, 0x76, 0xf2, 0x4c, 0x81, 0xd9, 0xb6, 0x80, 0xd7, 0xfe, 0xc5, 0xdc, 0xab, 0x6a, 0x5c, 0x5f, 0x29, 0xb1, 0x07, 0xfe, 0x31, 0x8e, 0x6f, 0xbf, 0x6b, 0xbe, 0xbb, 0x89, 0x78, 0x65, 0x26, 0xa7, 0x18, 0x7c, 0xd3, 0x2f, 0xce, 0x52, 0xc1, 0xd1, 0x6e, 0x7d, 0x96, 0x95, 0xd2, 0x7d, 0x2f, 0x83, 0xd3, 0x23, 0xda, 0x89, 0x19, 0xd4, 0x03, 0xfe, 0x94, 0xf9, 0x3a, 0x49, 0xe3, 0xeb, 0x1c, 0x74, 0x93, 0xb4, 0x52, 0xa2, 0x09, 0xa9, 0x0a, 0x98, 0x7f, 0xbd, 0x3e, 0x16, 0x39, 0xb8, 0x12, 0x75, 0xd1, 0x70, 0xc2, 0xd7, 0x66, 0xb9, 0xd1, 0x1b, 0x2e, 0xe5, 0x27, 0xfc, 0x37, 0x96, 0xce, 0x16, 0x16, 0x89, 0x7c, 0x57, 0x13, 0x65, 0xff, 0xf4, 0x97, 0xe0, 0xde, 0xea, 0xc7, 0xfd, 0x9b, 0xa9, 0x21, 0xed, 0x94, 0x6c, 0x8d, 0x9f, 0x13, 0xfc, 0xc5, 0x17, 0xc4, 0x7e, 0xe7, 0x25, 0xc8, 0x8b, 0xa5, 0x0e, 0xb3, 0xa3, 0xc6, 0x49, 0x1e, 0xc3, 0xc9, 0x64, 0x0d, 0xa8, 0xfd, 0x1a, 0xc7, 0x89, 0xcd, 0xab, 0x5d, 0xc7, 0x37, 0xcf, 0xfb, 0x4f, 0x1a, 0xbe, 0x70, 0x52, 0x71, 0x7a, 0x33, 0xbc, 0x16, 0xb1, 0x52, 0x23, 0xd5, 0x6d, 0x73, 0x3c, 0x47, 0xe5, 0x33, 0x5a, 0xa9, 0x94, 0x8c, 0xf8, 0x2d, 0x26, 0x73, 0xac, 0xa7, 0xea, 0xac, 0xf0, 0xb9, 0x9c, 0x7b, 0xa0, 0x67, 0xc9, 0xb1, 0xda, 0x77, 0x0a, 0x3a, 0xb9, 0xcd, 0x19, 0x8f, 0xa2, 0x3f, 0xe7, 0x41, 0x0e, 0x62, 0xed, 0xad, 0x64, 0xab, 0x85, 0xe7, 0xd6, 0x37, 0x07, 0x7c, 0x7c, 0xaa, 0xb9, 0xd1, 0x87, 0x71, 0x24, 0x9b, 0x53, 0xbe, 0xc0, 0x7c, 0x15, 0x90, 0xf5, 0xea, 0xe6, 0x7f, 0x48, 0xa5, 0x85, 0x93, 0x51, 0xbe, 0x6b, 0x55, 0xc1, 0xb1, 0xcd, 0xec, 0x77, 0x5a, 0xce, 0x13, 0x3e, 0x50, 0x26, 0x01, 0x9f, 0x27, 0x96, 0xf8, 0x74, 0xff, 0x29, 0x44, 0x8f, 0xe8, 0x1e, 0x54, 0x20, 0xf3, 0xa5, 0x3c, 0xa8, 0x48, 0x01, 0x45, 0x7b, 0x66, 0xcf, 0x29, 0x5b, 0x96, 0x10, 0x7d, 0x4f, 0xe9, 0x10, 0xef, 0xdd, 0x4b, 0x3c, 0xe2, 0xde, 0xb5, 0x94, 0x0c, 0x26, 0xdd, 0xc7, 0x0a, 0x19, 0xae, 0x89, 0x27, 0xe6, 0xa0, 0x5e, 0x15, 0x4f, 0xe6, 0x38, 0xc2, 0x58, 0x43, 0x4e, 0xbc, 0x1d, 0x44, 0x8a, 0xa7, 0xc5, 0xd3, 0x2b, 0x08, 0x3f, 0xc3, 0xfe, 0xac, 0xe4, 0x16, 0x50, 0xb3, 0xdd, 0x54, 0x8c, 0xe7, 0x63, 0x8e, 0x22, 0x3c, 0x0b, 0x6e, 0x70, 0xf4, 0x07, 0x4a, 0x7e, 0xda, 0xdb, 0x93, 0x8a, 0x9c, 0xf6, 0xf6, 0xb8, 0x1c, 0x92, 0x93, 0x48, 0xff, 0x83, 0xb4, 0xb0, 0xed, 0xf6, 0x10, 0x42, 0x0e, 0x70, 0x6e, 0x62, 0x57, 0xca, 0xa6, 0x9c, 0x14, 0xd6, 0x1a, 0x36, 0xf6, 0xd4, 0x6c, 0x00, 0xc7, 0x93, 0xb0, 0xf8, 0xd0, 0xa2, 0xa7, 0x36, 0x0c, 0x26, 0xc1, 0xfd, 0x5c, 0xe6, 0x74, 0xca, 0x7e, 0xfe, 0x0d, 0xd5, 0x8b, 0x5f, 0x3e, 0xd7, 0x41, 0xbb, 0x1b, 0xf5, 0xbb, 0x89, 0xcf, 0x1a, 0xb0, 0xb7, 0xa4, 0xed, 0x83, 0x69, 0x5e, 0x28, 0x72, 0xb4, 0x7d, 0xb7, 0x31, 0xab, 0x6a, 0x32, 0x54, 0xb7, 0x11, 0xfb, 0x0a, 0x0c, 0xb5, 0x52, 0x11, 0x2e, 0x17, 0x2e, 0x37, 0xfb, 0x4e, 0x1b, 0xfb, 0x6e, 0xad, 0xf8, 0x6e, 0xb5, 0xf6, 0x5d, 0xc2, 0x69, 0xd9, 0xc1, 0x58, 0x8b, 0x9b, 0x20, 0x8b, 0xc4, 0x14, 0x23, 0x7e, 0xef, 0xe5, 0xbd, 0x85, 0xf6, 0xcf, 0xb1, 0xa7, 0x6a, 0x6f, 0x90, 0x0a, 0xbc, 0x01, 0xcc, 0x7d, 0x25, 0xa9, 0xdd, 0xb6, 0x44, 0x20, 0x95, 0x5e, 0xec, 0xe4, 0x19, 0xb5, 0xbd, 0x34, 0x7f, 0x40, 0x2e, 0x34, 0x46, 0x17, 0x26, 0x91, 0xb6, 0xc0, 0x3e, 0x19, 0xb3, 0x31, 0x1d, 0x4c, 0xe2, 0x5b, 0xd9, 0x5b, 0xab, 0x69, 0x1d, 0xa3, 0x5f, 0x8d, 0xf1, 0x6b, 0x1a, 0x4e, 0x7c, 0x5e, 0x72, 0x0b, 0xe9, 0x82, 0x40, 0x1e, 0x3c, 0xc2, 0x13, 0x48, 0x91, 0xf0, 0xaa, 0x4f, 0x91, 0x60, 0x28, 0x98, 0xec, 0x12, 0x21, 0x2e, 0x2d, 0xe4, 0xdd, 0x0d, 0xc9, 0x2e, 0x85, 0xae, 0x3d, 0x81, 0x1a, 0x54, 0x0b, 0x18, 0xa6, 0xff, 0xd3, 0x60, 0x3c, 0x5f, 0x89, 0x30, 0x36, 0x16, 0xf5, 0xd9, 0xfb, 0x14, 0xf7, 0x58, 0x8c, 0xf1, 0x9f, 0x06, 0x13, 0x65, 0x02, 0x63, 0x5b, 0x40, 0xc7, 0x70, 0x47, 0x2d, 0x33, 0x35, 0xec, 0x00, 0xc6, 0x0d, 0xe1, 0x2d, 0xf2, 0x82, 0x94, 0xf7, 0x61, 0x61, 0x4f, 0x4a, 0x9f, 0xac, 0x57, 0xb4, 0x35, 0x0d, 0x4b, 0xbc, 0x5f, 0x79, 0xd5, 0xae, 0xb5, 0x17, 0x5b, 0x98, 0x25, 0x95, 0xa3, 0xec, 0x1d, 0x50, 0xf3, 0x5c, 0x25, 0x7c, 0x52, 0xfa, 0x9d, 0x91, 0x31, 0x49, 0x67, 0xc9, 0xb8, 0xa4, 0x93, 0xe7, 0xa6, 0x1f, 0x58, 0x42, 0xaa, 0x1a, 0x77, 0xb7, 0x51, 0xbb, 0x41, 0x31, 0x0e, 0x19, 0x62, 0x49, 0x9b, 0xe1, 0x70, 0x46, 0xdc, 0xbc, 0xda, 0xbc, 0x2f, 0x19, 0xcf, 0x52, 0xdc, 0xe2, 0x3e, 0xa2, 0xd8, 0xbb, 0x33, 0x6e, 0x0b, 0xd2, 0x0f, 0x8a, 0x49, 0xb1, 0xb1, 0x56, 0x00, 0xfb, 0x26, 0xce, 0xa1, 0x83, 0x48, 0x97, 0xcc, 0xb8, 0x2d, 0x40, 0x3f, 0x50, 0xa4, 0x0e, 0x75, 0x5c, 0x5e, 0xe2, 0xb7, 0xbb, 0x42, 0x94, 0xe5, 0x93, 0x20, 0x49, 0x03, 0x02, 0xf6, 0x43, 0xa8, 0xf9, 0xf0, 0x91, 0x67, 0xb2, 0x46, 0x0a, 0xeb, 0x4d, 0x8f, 0xe9, 0x36, 0x5b, 0xeb, 0xfb, 0x38, 0x9e, 0x65, 0x8d, 0xe4, 0x8f, 0x58, 0xc7, 0x82, 0x29, 0x9b, 0x06, 0xb3, 0x8b, 0xc7, 0x7b, 0x9d, 0xa3, 0xc8, 0x70, 0x9f, 0x66, 0xd9, 0x2c, 0x76, 0x11, 0x4a, 0x9c, 0x34, 0x23, 0x8c, 0xbe, 0xd8, 0x62, 0xb8, 0x3c, 0xbe, 0x1f, 0x72, 0xac, 0xe7, 0x58, 0x8f, 0x1c, 0x7a, 0xf3, 0x15, 0x7b, 0x7d, 0xfd, 0x66, 0x51, 0x92, 0xf1, 0x4b, 0xe2, 0x3c, 0x83, 0xa3, 0x3d, 0x33, 0xd8, 0x3f, 0xe1, 0x46, 0x79, 0x65, 0x5a, 0xea, 0x57, 0x35, 0xa8, 0x84, 0x9c, 0x76, 0x5e, 0x5b, 0xa9, 0x70, 0xd6, 0xa1, 0x04, 0x71, 0x4a, 0xc4, 0x6d, 0x67, 0x79, 0xbe, 0x1c, 0xd7, 0xa6, 0xb4, 0xf0, 0xbe, 0x5b, 0x76, 0x7c, 0x11, 0xee, 0x39, 0x18, 0x81, 0xf5, 0x13, 0xcb, 0xd5, 0xcf, 0xb5, 0x30, 0x69, 0x7b, 0x5e, 0x63, 0xbd, 0x54, 0x92, 0xb7, 0x4e, 0x2c, 0x51, 0x8c, 0xa3, 0xa9, 0xc2, 0x8f, 0x6d, 0x54, 0x9e, 0x63, 0x3e, 0x9f, 0xee, 0xa5, 0xa0, 0x96, 0xb4, 0x95, 0x14, 0xb1, 0xde, 0x50, 0xc6, 0x7a, 0x21, 0xae, 0x96, 0x89, 0x35, 0x76, 0x04, 0x26, 0x94, 0x7a, 0xdf, 0xaf, 0x5f, 0xff, 0xf5, 0xeb, 0x8e, 0xf6, 0xc3, 0xc4, 0xab, 0x7b, 0x7b, 0x77, 0x93, 0x2d, 0x61, 0xd6, 0xbd, 0x42, 0x7e, 0x34, 0xb1, 0x54, 0x96, 0x6a, 0x16, 0xeb, 0x7a, 0x36, 0x8e, 0xbb, 0x52, 0x3b, 0x77, 0x42, 0x76, 0x13, 0x35, 0x97, 0xed, 0x0e, 0x34, 0xc7, 0x58, 0xcd, 0xaf, 0x8d, 0xd7, 0x5c, 0x96, 0x1a, 0x92, 0x5c, 0xfb, 0xf6, 0x0c, 0xc8, 0x02, 0xb5, 0xb2, 0x34, 0xd8, 0x3d, 0x98, 0x64, 0xb8, 0x4d, 0x5d, 0xc2, 0x97, 0xdc, 0x18, 0x25, 0x17, 0x7e, 0x90, 0x8a, 0xa6, 0x75, 0x32, 0x6e, 0x84, 0xed, 0x68, 0xf6, 0xb4, 0x10, 0x4d, 0xbd, 0x3d, 0x4a, 0xd6, 0xdb, 0x3b, 0x69, 0x78, 0xcb, 0x5e, 0xca, 0xfd, 0x4a, 0x77, 0x9b, 0xd4, 0xdf, 0xbd, 0x34, 0xeb, 0xf6, 0x46, 0xc3, 0x08, 0x15, 0xf0, 0x1e, 0x99, 0x6c, 0xae, 0xbd, 0x10, 0x36, 0xa6, 0xea, 0x0c, 0x69, 0x6b, 0x03, 0xeb, 0xd0, 0x17, 0x07, 0xb8, 0x56, 0x95, 0x1f, 0xed, 0x24, 0xf6, 0xc6, 0x8b, 0xcb, 0x02, 0xba, 0x21, 0x4e, 0xb1, 0x70, 0x68, 0xbe, 0xc3, 0xa5, 0x69, 0x01, 0xca, 0x9c, 0x1d, 0x22, 0x69, 0x1a, 0x4b, 0x79, 0x82, 0xaa, 0xe8, 0x27, 0x59, 0x4c, 0x1d, 0x4a, 0x9e, 0xe9, 0x92, 0x78, 0x67, 0xb6, 0x4b, 0xf3, 0x69, 0xe9, 0xcd, 0x9a, 0xdd, 0xc9, 0x6e, 0x9b, 0xc4, 0x6f, 0x8e, 0xf8, 0xcd, 0x13, 0xbf, 0xb6, 0x3b, 0x3b, 0xbf, 0xad, 0x92, 0x55, 0xfc, 0xe6, 0x88, 0xdf, 0x3c, 0xf1, 0x6b, 0x9b, 0x11, 0x21, 0x69, 0x46, 0x0d, 0x99, 0x04, 0x2c, 0x96, 0x2f, 0x45, 0x90, 0xff, 0x2e, 0xc8, 0x79, 0x3f, 0x22, 0xb3, 0x43, 0x3b, 0xb5, 0xc8, 0xef, 0xc8, 0x76, 0xf0, 0x49, 0x37, 0x05, 0xce, 0x28, 0xfb, 0xf6, 0x64, 0x6d, 0x0b, 0xe1, 0x65, 0xb4, 0x1b, 0x73, 0x57, 0xf6, 0x4f, 0x5e, 0x8f, 0x9f, 0x75, 0x34, 0x92, 0x69, 0xaf, 0xae, 0x2f, 0xa1, 0x9d, 0x77, 0x53, 0x8a, 0xf9, 0x42, 0x9c, 0x77, 0x72, 0x5b, 0x22, 0x9b, 0xed, 0x3a, 0x46, 0x02, 0x25, 0x81, 0x52, 0xe0, 0x48, 0x31, 0x97, 0x2c, 0xa7, 0x82, 0xd2, 0xe5, 0x34, 0x5d, 0xdb, 0x8d, 0x4d, 0xd9, 0xa6, 0xb1, 0xa6, 0xcc, 0xb1, 0xa4, 0x5c, 0xd9, 0x0e, 0xc6, 0x30, 0xdc, 0xed, 0x09, 0xfd, 0xeb, 0x41, 0xc5, 0xe3, 0x6e, 0x24, 0x87, 0xcb, 0x70, 0xbc, 0xab, 0x78, 0x4e, 0x84, 0xfe, 0xe5, 0xb0, 0x9f, 0x77, 0x2c, 0x4d, 0xbd, 0xdf, 0x1a, 0xa1, 0xd8, 0x86, 0x7f, 0x79, 0xe5, 0xa7, 0xaf, 0xb5, 0x5c, 0x82, 0x74, 0xeb, 0xb9, 0xb3, 0x3b, 0x42, 0xb1, 0xae, 0x85, 0x7d, 0xfd, 0x5d, 0x2d, 0x83, 0x35, 0xbf, 0xdb, 0x47, 0x76, 0x4b, 0x1b, 0x39, 0xa6, 0x84, 0xbb, 0xdd, 0xa1, 0x7f, 0x39, 0xa8, 0xf8, 0x38, 0x05, 0xe7, 0x5b, 0x3c, 0xbb, 0x94, 0xca, 0x51, 0xde, 0x5b, 0x2f, 0xfb, 0xb4, 0x5c, 0xbe, 0x71, 0x9c, 0x62, 0x7d, 0x6f, 0x1d, 0xf9, 0xf9, 0xe1, 0x96, 0x4b, 0xbc, 0x42, 0x36, 0xbb, 0xbb, 0x94, 0x62, 0xc9, 0x85, 0x5d, 0x3f, 0x19, 0x68, 0x39, 0xa2, 0xcd, 0xbe, 0x6c, 0xf3, 0xcd, 0xd2, 0x30, 0xfa, 0xc7, 0x52, 0xde, 0xd1, 0xf6, 0xd6, 0x50, 0xae, 0xb6, 0x56, 0xcd, 0x5e, 0x33, 0xea, 0xdf, 0x27, 0x1b, 0xae, 0xcf, 0xe3, 0xfa, 0xc2, 0xad, 0xc2, 0xe2, 0xe2, 0x4e, 0xe6, 0x3a, 0xed, 0xa0, 0x5b, 0x8f, 0x03, 0x2f, 0x2f, 0x71, 0xef, 0x61, 0x99, 0x99, 0xf7, 0x51, 0x81, 0x55, 0x96, 0xf5, 0xcd, 0x9a, 0x7c, 0x1d, 0xc4, 0x7c, 0x9d, 0x97, 0xd3, 0x96, 0x33, 0xce, 0x01, 0xe9, 0xeb, 0x5a, 0x11, 0x11, 0xe3, 0x18, 0xf7, 0x4e, 0xaf, 0xc5, 0x70, 0xdb, 0xb3, 0x3e, 0xf4, 0x9e, 0x9a, 0xe6, 0xf2, 0x3d, 0x68, 0xf5, 0x96, 0x92, 0x62, 0xeb, 0xde, 0x40, 0x8b, 0xaf, 0x1f, 0x54, 0xa3, 0xc5, 0xbd, 0x25, 0xb4, 0xb5, 0x86, 0x69, 0xbe, 0x92, 0x8f, 0xb8, 0xec, 0x96, 0x1c, 0xfc, 0x66, 0x35, 0xe7, 0x22, 0xce, 0xdc, 0x6c, 0xc2, 0xaf, 0x05, 0x33, 0xba, 0xb6, 0x27, 0x37, 0xac, 0x6b, 0x39, 0x7f, 0x51, 0xe8, 0x97, 0x95, 0x79, 0xcc, 0x45, 0x62, 0x85, 0x2d, 0x1e, 0x52, 0x6a, 0x35, 0x5f, 0x34, 0xae, 0xc0, 0xbc, 0xf7, 0x41, 0x33, 0xe6, 0xaf, 0x21, 0xa7, 0x1b, 0xed, 0xce, 0xe7, 0x6d, 0xe4, 0xc8, 0x99, 0x83, 0x9b, 0xe4, 0x6a, 0xde, 0x8d, 0x1e, 0x7d, 0x9a, 0x39, 0x88, 0xd8, 0xba, 0x7d, 0xeb, 0x96, 0x0c, 0xcb, 0xc6, 0xc1, 0x5e, 0x7b, 0xe0, 0xad, 0x43, 0x6f, 0xbd, 0xf6, 0xd6, 0x6b, 0x95, 0xbf, 0xdb, 0x49, 0xf2, 0x34, 0xb0, 0xf1, 0xe1, 0x48, 0x38, 0xda, 0x1b, 0xdf, 0x8b, 0x11, 0x37, 0xaa, 0xfb, 0x55, 0xb5, 0xbb, 0x41, 0xbf, 0x8a, 0xc8, 0x93, 0xbd, 0x9a, 0x94, 0xfb, 0x31, 0x27, 0xe4, 0xb7, 0x4d, 0x1d, 0xe8, 0x72, 0xd2, 0xfb, 0x0f, 0xa3, 0x95, 0x33, 0xde, 0xed, 0xe3, 0x5f, 0x3e, 0x7f, 0xe5, 0x58, 0xb2, 0x6d, 0x6a, 0x35, 0x0d, 0x74, 0x39, 0x68, 0x64, 0xe3, 0xd1, 0xa4, 0x2c, 0xbd, 0xdb, 0xc7, 0xbf, 0x1c, 0x73, 0x34, 0xc9, 0x3d, 0x7c, 0x2a, 0x0d, 0x77, 0xc9, 0x86, 0xf7, 0xfb, 0x86, 0x92, 0xb2, 0xe1, 0x5d, 0xf1, 0xcb, 0x71, 0xb8, 0x57, 0xc9, 0x46, 0xb6, 0xda, 0x1b, 0x7d, 0x3a, 0xd6, 0xfb, 0x52, 0x6f, 0x0b, 0x6b, 0x01, 0x8f, 0x6a, 0x6b, 0x31, 0x8e, 0xc9, 0x8e, 0xba, 0x89, 0x96, 0x28, 0xa0, 0x12, 0xf6, 0x84, 0x0d, 0xb4, 0xd0, 0xae, 0x79, 0x80, 0x1e, 0xdd, 0xa9, 0xd9, 0x81, 0x5c, 0x93, 0xc5, 0x7a, 0x5d, 0x63, 0xba, 0xed, 0x87, 0xbe, 0x12, 0x22, 0xd6, 0xb0, 0x4a, 0xcb, 0x5c, 0xa0, 0xc0, 0x6c, 0xdf, 0xa1, 0xad, 0x63, 0xc5, 0xed, 0x6d, 0xbc, 0x16, 0xd1, 0xa4, 0x7b, 0xf3, 0x2b, 0x16, 0xeb, 0x2e, 0x3e, 0xb9, 0xd6, 0x1e, 0x10, 0xeb, 0x4e, 0xca, 0x2a, 0xe6, 0xde, 0x2a, 0xa3, 0xbb, 0xc9, 0x15, 0xcf, 0x6b, 0xb3, 0xde, 0x64, 0x6d, 0xc7, 0xe5, 0x69, 0xd4, 0x74, 0x22, 0xf1, 0xb5, 0x71, 0x56, 0x94, 0xcc, 0xd1, 0x67, 0xc9, 0x18, 0x77, 0xa5, 0xfc, 0xf9, 0x4d, 0xb0, 0x2c, 0x9e, 0x32, 0x6e, 0x59, 0x3c, 0x0b, 0xfd, 0x67, 0x35, 0xe7, 0x1d, 0x9e, 0x90, 0xd2, 0x2c, 0x35, 0x62, 0xf4, 0xfa, 0x14, 0x13, 0x35, 0xa2, 0x09, 0x7d, 0x9c, 0x57, 0x82, 0x75, 0x78, 0x9a, 0x6e, 0xb4, 0xaa, 0x91, 0x35, 0xab, 0x9a, 0x89, 0xe5, 0x68, 0x3e, 0x9c, 0xce, 0x49, 0x60, 0xd7, 0xf5, 0x35, 0xb9, 0x7c, 0xfd, 0x3c, 0xa0, 0xcb, 0x85, 0x75, 0x37, 0xae, 0xc9, 0xb1, 0xfd, 0x52, 0x9c, 0x35, 0xc4, 0xb9, 0xae, 0x7b, 0x95, 0x12, 0x70, 0xbd, 0xf6, 0xf4, 0x1c, 0x9b, 0x73, 0x01, 0x33, 0xf8, 0x28, 0x6f, 0xe1, 0x04, 0x4f, 0x1e, 0x95, 0x09, 0x4b, 0x6a, 0x5d, 0x0e, 0x33, 0xa3, 0x24, 0x4e, 0x0f, 0xd2, 0xf5, 0x4d, 0x42, 0xe1, 0x0e, 0x83, 0xb2, 0x8f, 0xf5, 0xf9, 0x78, 0x87, 0xc8, 0x41, 0x8f, 0x1e, 0xae, 0xfc, 0x90, 0xcc, 0x29, 0x6f, 0x74, 0xc2, 0x97, 0x5c, 0xe9, 0x9e, 0x24, 0x6b, 0x09, 0x81, 0xe7, 0x60, 0x2b, 0x51, 0x89, 0x77, 0x8e, 0x75, 0x6d, 0xac, 0x6f, 0xdc, 0x19, 0x20, 0xc7, 0x9d, 0x41, 0x72, 0x62, 0xfc, 0x4d, 0xa5, 0xe9, 0x29, 0x8f, 0xdb, 0x3e, 0xa9, 0x98, 0x4a, 0x0c, 0xa2, 0xd6, 0xbe, 0xa3, 0xa0, 0x34, 0x77, 0x86, 0xc8, 0x74, 0x0c, 0xd4, 0xe6, 0xce, 0x4a, 0xa1, 0xd1, 0x78, 0x63, 0xfd, 0x3f, 0x90, 0x1c, 0xd1, 0x15, 0x94, 0x15, 0x0f, 0x28, 0x59, 0xbc, 0xdb, 0x81, 0x1c, 0xcd, 0x4a, 0xb1, 0xc0, 0xc6, 0x14, 0x7d, 0x85, 0xf2, 0xd2, 0x98, 0xaf, 0xb6, 0xcb, 0x52, 0x8f, 0x78, 0xaa, 0xbc, 0xd1, 0xc2, 0xa8, 0x7e, 0xb3, 0xd0, 0x74, 0x19, 0xf7, 0x83, 0x5d, 0xe1, 0xae, 0x71, 0xd4, 0x39, 0xef, 0x69, 0x23, 0x57, 0xb6, 0x66, 0xff, 0x0e, 0xde, 0x75, 0xaf, 0xb9, 0x50, 0xb7, 0x7d, 0xda, 0x35, 0x66, 0xb9, 0x9d, 0xd6, 0x4a, 0xe2, 0x34, 0x9f, 0xbc, 0x89, 0xb6, 0x4f, 0xc2, 0xb3, 0x84, 0xe4, 0x30, 0xf6, 0x77, 0x27, 0xda, 0x35, 0xcf, 0x81, 0x9f, 0x84, 0xe4, 0x80, 0xd3, 0x45, 0x2e, 0x7b, 0x65, 0xe8, 0x51, 0x57, 0x83, 0xb2, 0xd0, 0xec, 0x11, 0x79, 0x46, 0x6f, 0xda, 0xee, 0x5a, 0x8e, 0xd7, 0xf7, 0x2f, 0xe4, 0x28, 0x1b, 0xf7, 0x26, 0xe3, 0x79, 0x68, 0x4d, 0x91, 0xa3, 0x3d, 0x80, 0x5a, 0xb8, 0x42, 0x5b, 0xec, 0x95, 0xf6, 0x3e, 0xa7, 0x59, 0xd7, 0x05, 0xfd, 0x81, 0x2c, 0x69, 0x7a, 0x72, 0x90, 0x4c, 0x22, 0xe8, 0xf1, 0xf5, 0xda, 0xe8, 0xb9, 0xda, 0xa7, 0x69, 0x5b, 0x5c, 0x93, 0x1d, 0xac, 0xe1, 0x63, 0x89, 0x97, 0x4d, 0x18, 0x41, 0x47, 0x7e, 0x76, 0x96, 0xec, 0xf1, 0xdc, 0xb1, 0x91, 0x76, 0xcb, 0xa7, 0x8d, 0x34, 0xbd, 0x37, 0xe8, 0x6b, 0xd7, 0xac, 0x57, 0x3a, 0x8f, 0xb5, 0x41, 0xd3, 0xf4, 0x6b, 0xe5, 0xc6, 0x8c, 0xd1, 0x34, 0x5d, 0xd0, 0x72, 0x70, 0x02, 0x69, 0xda, 0xb5, 0x62, 0x77, 0x2c, 0xe7, 0x46, 0x5b, 0x84, 0xd4, 0xc9, 0x89, 0xde, 0x6c, 0xd6, 0x54, 0x40, 0x8f, 0x65, 0x4d, 0x85, 0x92, 0x47, 0x0f, 0x2b, 0xc5, 0xfa, 0x69, 0x48, 0x97, 0x44, 0x6d, 0x8d, 0x8a, 0x83, 0x3d, 0x0e, 0xd9, 0x03, 0xf5, 0x1b, 0x14, 0x3e, 0x0b, 0xae, 0x44, 0x9e, 0x26, 0x34, 0x1b, 0xb2, 0x38, 0x2e, 0xb9, 0x0b, 0xf1, 0xa0, 0x9d, 0x6d, 0x42, 0x8f, 0x30, 0x7e, 0xac, 0x4d, 0xd5, 0x68, 0xb1, 0xd0, 0x60, 0x8a, 0x78, 0x0c, 0xee, 0xc9, 0xe0, 0xcc, 0x96, 0x93, 0x6b, 0xaf, 0xbe, 0xf7, 0x25, 0x97, 0xf3, 0x12, 0x57, 0x3b, 0xc9, 0x35, 0x9e, 0x16, 0xc1, 0xa3, 0x9e, 0x74, 0x91, 0x08, 0x33, 0x20, 0xac, 0x4a, 0xe7, 0x5b, 0x4f, 0x16, 0x51, 0xba, 0xae, 0xab, 0xcf, 0x4d, 0xfe, 0x32, 0xcc, 0x1a, 0x6b, 0x54, 0xc5, 0x55, 0x1e, 0xc0, 0x08, 0x60, 0x4d, 0x01, 0x93, 0xa6, 0x2d, 0x72, 0x7e, 0x17, 0x4b, 0x6b, 0x3f, 0x1b, 0x78, 0xd0, 0xe8, 0xce, 0x76, 0x07, 0x84, 0x07, 0xcf, 0x37, 0x7c, 0xbe, 0x11, 0xb2, 0x04, 0xc0, 0xad, 0x0e, 0xb5, 0xa9, 0xfd, 0xeb, 0x12, 0x65, 0xfd, 0xbd, 0x71, 0x6d, 0x07, 0xc0, 0x27, 0xf6, 0x7b, 0x7c, 0x0b, 0xc4, 0x9a, 0x1b, 0x24, 0xf6, 0x5b, 0xf8, 0xdc, 0x31, 0x77, 0x00, 0xb2, 0xa0, 0x91, 0x9f, 0xc4, 0x2e, 0x57, 0x48, 0x5b, 0xcf, 0xa9, 0xdf, 0xdc, 0xff, 0x9d, 0xa5, 0x05, 0x72, 0x6d, 0x9b, 0x6a, 0x37, 0xad, 0xd6, 0xce, 0xbe, 0xa8, 0x16, 0x58, 0xca, 0x8d, 0x3e, 0x14, 0xcf, 0xdd, 0xb3, 0x2e, 0x91, 0x23, 0x57, 0xbd, 0xf9, 0x8b, 0x37, 0xcf, 0x52, 0x49, 0xac, 0x5e, 0x31, 0xb9, 0xd9, 0xeb, 0x9d, 0x9a, 0xae, 0x81, 0x2b, 0xde, 0x33, 0x35, 0x1d, 0x61, 0x5d, 0x4f, 0x99, 0x5c, 0xc1, 0x22, 0xa3, 0x87, 0xf9, 0x83, 0x74, 0x5f, 0xa2, 0x47, 0xf4, 0x33, 0x4b, 0xca, 0x05, 0x6c, 0xa1, 0xfe, 0x75, 0x4b, 0x2d, 0x0c, 0x35, 0xa4, 0x40, 0x5e, 0x99, 0xb1, 0xf0, 0xc1, 0xdb, 0x89, 0x38, 0x62, 0x8a, 0x56, 0x43, 0x4c, 0xdd, 0xdf, 0x1b, 0xaf, 0x6f, 0x68, 0x04, 0x25, 0x0d, 0xbf, 0x79, 0x08, 0x65, 0x97, 0xcd, 0xa9, 0xa7, 0x22, 0xdf, 0x01, 0x55, 0x45, 0xca, 0x3d, 0xec, 0x61, 0xd4, 0x17, 0x78, 0xf3, 0x70, 0xf0, 0xb7, 0x7d, 0xe4, 0xb3, 0x96, 0x05, 0x7e, 0xf6, 0x8b, 0xb8, 0xc3, 0x95, 0x69, 0xcf, 0x1c, 0x5a, 0xe7, 0x7b, 0xde, 0xc6, 0xbb, 0x5b, 0x65, 0xb3, 0x91, 0xd2, 0x46, 0xfc, 0xbd, 0x56, 0x82, 0x61, 0x2d, 0xbe, 0xdb, 0x25, 0x30, 0x75, 0x10, 0x4f, 0xfb, 0xdd, 0x55, 0xff, 0xf2, 0x0b, 0xa4, 0x2b, 0x89, 0xb6, 0x1d, 0xa7, 0x84, 0x53, 0xec, 0xee, 0x4b, 0xba, 0x4d, 0xfc, 0xf0, 0x85, 0x90, 0xb0, 0x36, 0x63, 0x0b, 0x80, 0xad, 0xff, 0xc2, 0xb5, 0xfe, 0x8a, 0x2b, 0x93, 0x77, 0x8e, 0x18, 0x32, 0xf6, 0x4e, 0xbc, 0xbf, 0x2b, 0xee, 0x73, 0x65, 0x72, 0x29, 0x73, 0xf0, 0x35, 0x15, 0x29, 0x9e, 0x89, 0xf0, 0xec, 0x67, 0x7d, 0x89, 0x4c, 0xdf, 0xf3, 0xc7, 0x49, 0x94, 0x9d, 0x8d, 0xf2, 0xa2, 0xa2, 0xe4, 0xe3, 0x2c, 0xc7, 0x09, 0xe8, 0x76, 0x93, 0xff, 0x38, 0xcd, 0xa9, 0x22, 0x3f, 0x43, 0x18, 0x6b, 0xa4, 0x62, 0x86, 0x65, 0xf6, 0x01, 0x32, 0x1c, 0x27, 0x3e, 0x4d, 0x47, 0x60, 0x22, 0x2c, 0x34, 0xc9, 0xc9, 0x80, 0xb9, 0xb2, 0x14, 0x25, 0x6b, 0x1a, 0xe5, 0x71, 0xb3, 0xf0, 0xbf, 0x5a, 0xa4, 0x58, 0x44, 0xfb, 0x1f, 0x9a, 0xd3, 0x16, 0x01, 0x04, 0x3c, 0xfb, 0xa6, 0x6a, 0x2d, 0x76, 0xf7, 0x4a, 0x42, 0x2c, 0xad, 0x13, 0xf5, 0xe1, 0x4b, 0xff, 0x7c, 0x5e, 0x0d, 0x08, 0x29, 0x9e, 0xc8, 0x21, 0xe1, 0x97, 0x49, 0xab, 0xe7, 0x63, 0x5c, 0x47, 0xc6, 0x2d, 0xea, 0x99, 0xa5, 0xb5, 0x6d, 0x9b, 0x41, 0x59, 0xc4, 0x35, 0x29, 0x9d, 0xdd, 0x47, 0x96, 0x30, 0xe0, 0x7d, 0x83, 0x73, 0xf0, 0x6b, 0xed, 0x61, 0xf8, 0x93, 0xca, 0x47, 0xbd, 0xcc, 0x34, 0x27, 0x48, 0xfe, 0x54, 0x7d, 0xcc, 0xc4, 0xb5, 0x0b, 0x05, 0xcc, 0x93, 0xc8, 0x10, 0x77, 0x46, 0x03, 0x71, 0x3b, 0x62, 0x2a, 0xf4, 0x73, 0x78, 0x8c, 0x76, 0x8b, 0x36, 0x5b, 0x23, 0xb7, 0xf9, 0x63, 0x6f, 0x05, 0xe9, 0x7d, 0x4b, 0x36, 0x6a, 0xfd, 0x8a, 0x71, 0x01, 0x8a, 0xd3, 0xb1, 0x5a, 0x55, 0x86, 0x59, 0x33, 0xac, 0xbc, 0xc2, 0x61, 0x76, 0xd7, 0x45, 0xb7, 0x60, 0x9c, 0x7d, 0x6f, 0x5c, 0x7b, 0xdf, 0xd9, 0x4c, 0x9b, 0x42, 0x95, 0xff, 0x70, 0xc4, 0x5d, 0xce, 0x67, 0xda, 0xad, 0x76, 0x1c, 0xdf, 0xac, 0x2c, 0x75, 0xac, 0xa4, 0x2c, 0x39, 0xe4, 0xb5, 0x82, 0xab, 0xae, 0xd2, 0xce, 0x64, 0x8a, 0xd7, 0xf9, 0x56, 0x52, 0x6e, 0x4e, 0x21, 0xe5, 0x59, 0x0b, 0xe9, 0x73, 0xde, 0x28, 0x39, 0xe6, 0x46, 0xc8, 0xf5, 0xc5, 0x20, 0xb9, 0xbf, 0x18, 0xa0, 0x42, 0x79, 0xfe, 0xb6, 0xd7, 0x58, 0xfb, 0x7d, 0x74, 0x50, 0x9c, 0xde, 0x04, 0x5e, 0xd6, 0xc1, 0x73, 0x02, 0xaf, 0x3b, 0x85, 0xec, 0x61, 0x11, 0x73, 0x92, 0x7b, 0x81, 0xaf, 0xf2, 0xf9, 0x97, 0x9b, 0x8c, 0x25, 0xe4, 0x9a, 0xef, 0x6c, 0x88, 0x6e, 0x8b, 0xef, 0x14, 0x3b, 0x59, 0xc6, 0x58, 0x13, 0x4d, 0x1f, 0xb7, 0x13, 0x50, 0x24, 0xcd, 0x66, 0xaa, 0xb3, 0x9c, 0xf5, 0xb3, 0x30, 0xa7, 0x3d, 0x29, 0xf8, 0xe6, 0x1a, 0x07, 0x39, 0xeb, 0x84, 0x4c, 0x16, 0x16, 0x72, 0x48, 0x44, 0xe8, 0x46, 0xaa, 0xf7, 0xdb, 0xc4, 0x89, 0x51, 0x0b, 0xc1, 0xa7, 0x6c, 0x1d, 0x97, 0x6c, 0x82, 0xe7, 0x0c, 0xc9, 0xf1, 0x1d, 0xb5, 0x6b, 0xe7, 0x41, 0xef, 0x56, 0xa6, 0xc5, 0xbf, 0xaa, 0xb8, 0xf8, 0x3c, 0xc4, 0xc4, 0x74, 0x31, 0x4f, 0x5a, 0xdb, 0x14, 0x9e, 0x27, 0x65, 0x6d, 0x9e, 0xbc, 0x75, 0x4f, 0x72, 0x69, 0x1e, 0xdb, 0x2e, 0x29, 0x46, 0xc7, 0x4a, 0xc3, 0x23, 0x62, 0xf4, 0x99, 0xd1, 0x1e, 0x3e, 0x7d, 0x15, 0x0d, 0x5c, 0x39, 0x7a, 0x81, 0x32, 0x6e, 0xa7, 0x2e, 0xb3, 0xdc, 0x57, 0xe3, 0x9f, 0xa6, 0xd9, 0xe7, 0x19, 0x88, 0x75, 0x98, 0xf7, 0x6a, 0xf6, 0x7b, 0x97, 0xb4, 0x93, 0x5f, 0xe8, 0xd9, 0x9b, 0xd9, 0xec, 0xd9, 0xa7, 0x39, 0xd8, 0xfe, 0x93, 0x7d, 0x51, 0x84, 0xd2, 0xed, 0x3f, 0x53, 0x96, 0x7c, 0xc2, 0xee, 0xdc, 0x25, 0xce, 0xdd, 0x58, 0x3e, 0x6e, 0xff, 0xc9, 0x75, 0xff, 0xb5, 0x6f, 0x82, 0x65, 0x1a, 0x9f, 0x81, 0xf7, 0x87, 0xad, 0xf8, 0x1a, 0x3f, 0x83, 0x15, 0x5f, 0x05, 0x20, 0x58, 0xae, 0xe9, 0x5a, 0xbe, 0xb5, 0x53, 0xd6, 0x4e, 0x70, 0x2c, 0xd2, 0x2c, 0x27, 0x1d, 0xc9, 0x19, 0x41, 0x21, 0x31, 0x99, 0x71, 0x65, 0xb1, 0x8d, 0xe7, 0xd6, 0x86, 0xd9, 0x41, 0xb2, 0x14, 0x17, 0x92, 0x69, 0xfb, 0x4a, 0x92, 0x20, 0x55, 0x65, 0xeb, 0xeb, 0x6e, 0x17, 0x6a, 0x8d, 0xea, 0x51, 0x7d, 0x57, 0xea, 0xa2, 0x90, 0x47, 0xaf, 0xb3, 0x14, 0xa5, 0x33, 0xbe, 0x5b, 0xfb, 0xd9, 0xba, 0x2f, 0x4b, 0xf8, 0x50, 0x5e, 0x49, 0xa6, 0xd6, 0x98, 0x6e, 0xdf, 0xa7, 0x6b, 0x7a, 0xfe, 0x5f, 0x3c, 0xd9, 0x24, 0xfb, 0x8f, 0x9d, 0x6c, 0x72, 0x1d, 0x86, 0xff, 0xf7, 0x4e, 0x36, 0x31, 0xea, 0x3a, 0xc1, 0xdf, 0x48, 0x9d, 0x64, 0xc2, 0xf6, 0x90, 0x62, 0xb7, 0x9a, 0xe8, 0x63, 0xe1, 0x15, 0x95, 0x4f, 0x74, 0x59, 0x81, 0x9a, 0x1b, 0xae, 0xab, 0xf7, 0x51, 0xd6, 0x5e, 0xf8, 0x63, 0xf5, 0xe6, 0x55, 0xd0, 0xf4, 0xf6, 0x51, 0xfe, 0x64, 0x1b, 0x51, 0xb6, 0x71, 0xf6, 0x9a, 0xd9, 0x3a, 0x17, 0xbf, 0xf7, 0x78, 0xcd, 0x25, 0x0d, 0xde, 0x29, 0x37, 0xa9, 0xfd, 0xff, 0x05, 0x1b, 0xd1, 0xf1, 0x93, 0x4e, 0x52, 0x7d, 0x63, 0xac, 0x67, 0xb4, 0xa0, 0x75, 0x48, 0xf4, 0x83, 0x42, 0xad, 0x2f, 0xe8, 0xf0, 0x89, 0x16, 0x62, 0x08, 0xff, 0x40, 0x1b, 0xfd, 0xb9, 0xe7, 0x95, 0x18, 0x53, 0x6b, 0xc3, 0x80, 0xa5, 0x0e, 0x94, 0x2c, 0x45, 0x37, 0x4e, 0x38, 0xc6, 0x7d, 0xaf, 0xf5, 0xd5, 0x9c, 0xa5, 0x67, 0xe7, 0x81, 0xfe, 0x6b, 0x21, 0x90, 0x4d, 0x0e, 0xc4, 0x73, 0x20, 0x09, 0x1d, 0xd0, 0x76, 0xf6, 0x17, 0x1b, 0xb5, 0x95, 0x60, 0xf6, 0x35, 0x00, 0x39, 0x86, 0xad, 0xf8, 0xb3, 0xda, 0xa8, 0x7d, 0xdc, 0x7e, 0xe7, 0x8d, 0x34, 0x5b, 0x9e, 0x83, 0xf6, 0x31, 0xee, 0x4b, 0x35, 0x2a, 0xcf, 0xb2, 0x8e, 0xa5, 0x6b, 0x32, 0x6b, 0x00, 0xf1, 0x19, 0x5c, 0x47, 0xbb, 0xf1, 0xaf, 0x4f, 0xc9, 0xf5, 0xe5, 0xb0, 0x4e, 0xcd, 0xa2, 0x8d, 0xf6, 0x70, 0x64, 0x20, 0xf2, 0x32, 0x6b, 0xd6, 0xa8, 0x59, 0x7b, 0x37, 0xc6, 0x47, 0x52, 0x7a, 0x99, 0xb2, 0x90, 0xcf, 0xc6, 0xe1, 0x03, 0x44, 0x65, 0xf1, 0x1c, 0xfc, 0x86, 0xe2, 0xc2, 0x7f, 0xf4, 0xb5, 0x52, 0x40, 0x57, 0xa6, 0xf0, 0x99, 0x16, 0x15, 0x72, 0x37, 0x9e, 0x2b, 0xae, 0xd7, 0x44, 0xb8, 0x69, 0x1e, 0x21, 0x91, 0x47, 0x59, 0x5a, 0x1e, 0x21, 0x91, 0x47, 0xb5, 0xc8, 0xa3, 0xfa, 0xfa, 0x3c, 0xf4, 0x35, 0x6d, 0x1f, 0x28, 0x26, 0xfb, 0xf9, 0x28, 0xb6, 0x7b, 0x85, 0xcd, 0x61, 0xc0, 0xd9, 0x4a, 0x61, 0x96, 0x7d, 0x41, 0x5f, 0x73, 0x12, 0xa1, 0x55, 0xf9, 0xc7, 0x78, 0x25, 0xb5, 0x92, 0x72, 0x56, 0x79, 0x8e, 0x6d, 0x6e, 0xe8, 0xc1, 0x53, 0xde, 0x2a, 0x03, 0x7e, 0xf3, 0xe7, 0x06, 0x69, 0xfa, 0xdc, 0x00, 0xc9, 0xc2, 0xdb, 0x82, 0x5d, 0xfc, 0x3a, 0x80, 0x43, 0xa7, 0x93, 0x57, 0x4c, 0x27, 0x43, 0x26, 0x58, 0xc9, 0x32, 0x81, 0xe2, 0xe8, 0x98, 0x7c, 0x94, 0x73, 0x08, 0x51, 0x0e, 0xbe, 0xc8, 0x63, 0x3d, 0xea, 0x89, 0x29, 0x30, 0x0b, 0xdd, 0xc9, 0x7a, 0xbd, 0x60, 0xdb, 0x0a, 0x1d, 0x49, 0xd6, 0xef, 0xb5, 0xa4, 0xd6, 0x2d, 0x05, 0x05, 0xc2, 0xec, 0xba, 0x42, 0xe8, 0x3c, 0xd9, 0xd8, 0x7f, 0xb9, 0x81, 0xd4, 0x8b, 0xac, 0x77, 0xef, 0x0b, 0x14, 0x07, 0x9d, 0x08, 0x17, 0x1e, 0x1d, 0xb3, 0xe6, 0x5d, 0x40, 0xe8, 0x7c, 0x75, 0x14, 0xbd, 0x14, 0xe3, 0x45, 0xf8, 0x4b, 0xbf, 0x2c, 0xac, 0x12, 0x30, 0x8a, 0x22, 0x6b, 0xd4, 0x3c, 0x6f, 0x16, 0x9f, 0xdc, 0xc0, 0xb2, 0xe4, 0x5d, 0xac, 0x8d, 0x56, 0x20, 0xb8, 0x5c, 0x93, 0x3c, 0x4b, 0xbd, 0x2c, 0x3c, 0xeb, 0x73, 0x9f, 0x3e, 0xad, 0xd3, 0xbc, 0x11, 0xb6, 0x2c, 0xf9, 0xe3, 0xfe, 0x4b, 0xdc, 0x1e, 0x32, 0xb3, 0x0f, 0x13, 0x4f, 0xba, 0x0f, 0x93, 0x6a, 0xe1, 0xc3, 0xe4, 0x19, 0xb2, 0x0c, 0x6e, 0x67, 0x4b, 0x84, 0xf6, 0xfc, 0xa1, 0x5d, 0xe3, 0xe7, 0x25, 0x0a, 0x6f, 0x25, 0x95, 0xea, 0xa5, 0xbb, 0x43, 0xea, 0xc7, 0x77, 0xcf, 0x57, 0x2f, 0xdf, 0x1d, 0x55, 0xaf, 0x14, 0x56, 0xa9, 0xa3, 0xba, 0xa7, 0x92, 0x91, 0x09, 0x9e, 0x4a, 0xaa, 0xc7, 0x3c, 0x95, 0x74, 0xaa, 0x87, 0x74, 0xc8, 0xd8, 0xdf, 0x41, 0x99, 0x3f, 0x50, 0x12, 0xfa, 0xc9, 0x6b, 0xcd, 0x6d, 0x2f, 0x06, 0x9b, 0x9b, 0x52, 0xf8, 0xe0, 0x53, 0xeb, 0x34, 0x9f, 0x95, 0x80, 0x08, 0x32, 0xe2, 0x6a, 0x42, 0x59, 0x97, 0x0a, 0xa3, 0xea, 0xe9, 0xaa, 0x73, 0x64, 0x7d, 0xec, 0x35, 0x57, 0xd6, 0x9a, 0x8b, 0x87, 0xd7, 0xb1, 0xe7, 0xe1, 0x4a, 0xc6, 0x53, 0x8d, 0xf0, 0x75, 0x72, 0x59, 0x58, 0xbf, 0x84, 0xd4, 0x51, 0xb6, 0x80, 0x61, 0x5c, 0xa5, 0xec, 0x6a, 0xaf, 0x8d, 0xea, 0x16, 0x0c, 0x69, 0x56, 0xb5, 0xba, 0x6f, 0xb0, 0x72, 0x1d, 0x96, 0x6f, 0x08, 0x7d, 0x0f, 0xc3, 0xd1, 0x64, 0x43, 0x37, 0xf8, 0x83, 0x4b, 0x63, 0xeb, 0x05, 0x17, 0x35, 0xab, 0x1c, 0x57, 0x5d, 0x39, 0x45, 0x06, 0x4a, 0x42, 0xfd, 0x0f, 0x63, 0x56, 0x5d, 0x5e, 0x6a, 0x88, 0xbc, 0x5c, 0x96, 0x11, 0x79, 0x65, 0x4f, 0x0f, 0xde, 0xee, 0x13, 0x67, 0x40, 0x65, 0x3f, 0x7a, 0xd8, 0x31, 0x65, 0x35, 0xf1, 0x09, 0x11, 0xbc, 0xe2, 0x3f, 0xef, 0x7d, 0xaa, 0x33, 0xcf, 0x1c, 0xb3, 0xbf, 0x59, 0xf1, 0x27, 0xd8, 0xdf, 0xcc, 0xfc, 0x93, 0xec, 0x6f, 0x66, 0x6a, 0xf6, 0x37, 0x77, 0x7c, 0x16, 0xfb, 0x1b, 0xcf, 0x9f, 0x6a, 0x7f, 0xc3, 0x9a, 0x0e, 0x9f, 0xd3, 0xec, 0x6f, 0x0a, 0xd9, 0xfe, 0xe6, 0x8e, 0x9b, 0xd8, 0xdf, 0x7c, 0x6e, 0x82, 0xfd, 0xcd, 0xe7, 0x26, 0xd8, 0xdf, 0x7c, 0x4e, 0xd8, 0xdf, 0xdc, 0xd1, 0x94, 0x66, 0x7f, 0x63, 0xba, 0x83, 0x3d, 0x93, 0x1a, 0xef, 0xae, 0xd6, 0x3d, 0x5a, 0x71, 0xeb, 0xb0, 0xaf, 0x19, 0x8b, 0x6e, 0x5f, 0x33, 0x45, 0x78, 0x35, 0x78, 0xb7, 0x70, 0xe1, 0x44, 0xfb, 0x1a, 0xd6, 0x62, 0x13, 0x3d, 0xe5, 0x88, 0x4e, 0x97, 0xfd, 0x0e, 0xd2, 0x77, 0x69, 0x07, 0x34, 0xbd, 0x9e, 0xfe, 0xee, 0x07, 0x21, 0x79, 0x5f, 0x2f, 0x9f, 0x30, 0xaf, 0xeb, 0x33, 0x28, 0x39, 0x7b, 0x79, 0xc6, 0xda, 0xe8, 0x0b, 0x30, 0x37, 0xfc, 0xd6, 0x61, 0x1f, 0xf3, 0xc3, 0xcc, 0xbf, 0x8f, 0xc8, 0xa1, 0x37, 0x0f, 0xf2, 0xd9, 0x0b, 0x08, 0x9b, 0x96, 0x58, 0xd4, 0x10, 0xf0, 0x27, 0xf9, 0x2d, 0xfa, 0x8d, 0x3e, 0x8a, 0xdf, 0xc7, 0x92, 0x1b, 0x9f, 0x00, 0x17, 0xcf, 0xd1, 0xa5, 0x15, 0xe6, 0xed, 0x8b, 0x7d, 0xbb, 0xc1, 0x2b, 0x97, 0x38, 0x91, 0x8f, 0x3f, 0xa0, 0xad, 0x8c, 0xf9, 0xa6, 0xf5, 0x07, 0xe3, 0xb9, 0xfe, 0x17, 0xfa, 0x58, 0x3a, 0x29, 0xe6, 0x12, 0xee, 0x44, 0x9a, 0x3e, 0x52, 0xac, 0xba, 0x8c, 0x60, 0x15, 0x61, 0x5d, 0x7d, 0x34, 0x27, 0x44, 0x45, 0xcc, 0xad, 0xdd, 0x68, 0xed, 0x38, 0x6e, 0xbf, 0x3a, 0xce, 0xfb, 0xa2, 0x3d, 0x35, 0xad, 0xcb, 0x5c, 0x4b, 0xfd, 0x3b, 0xef, 0xc5, 0xb3, 0xff, 0x69, 0x84, 0x8c, 0x71, 0xb3, 0x58, 0x6d, 0x95, 0xe2, 0x76, 0xb4, 0xc3, 0xe7, 0x9a, 0x73, 0x89, 0xd4, 0xe4, 0x6d, 0x01, 0xfa, 0x5c, 0xda, 0x99, 0xca, 0xbc, 0xc3, 0x85, 0x19, 0x7e, 0xf4, 0xf5, 0xeb, 0xad, 0x5b, 0xd3, 0x6c, 0xfc, 0x27, 0x63, 0x86, 0xcd, 0xd1, 0xac, 0x68, 0x50, 0x4a, 0x0e, 0xa7, 0x49, 0xad, 0x65, 0xa6, 0xec, 0x3f, 0xed, 0xf5, 0x5f, 0xe2, 0x13, 0xa7, 0x8c, 0xbc, 0x6f, 0x61, 0xdf, 0xe2, 0x88, 0x28, 0x12, 0xf8, 0x54, 0xd0, 0xcc, 0xf8, 0x65, 0x7b, 0x54, 0xc9, 0x01, 0x5d, 0x32, 0x3f, 0xff, 0x56, 0xdc, 0xcc, 0xd6, 0x26, 0xce, 0x47, 0x15, 0xb3, 0xfd, 0x1e, 0xb1, 0xce, 0x38, 0x82, 0x38, 0xeb, 0xf3, 0xef, 0x93, 0x25, 0x6e, 0xc6, 0xd7, 0x16, 0xf6, 0x0b, 0xa8, 0xc7, 0x9c, 0x95, 0x63, 0xd1, 0x2d, 0x71, 0xf6, 0x49, 0x93, 0xc5, 0x7b, 0x99, 0x1f, 0x3c, 0x52, 0xb7, 0x0d, 0xcf, 0x39, 0x42, 0x3f, 0xd1, 0x3a, 0xae, 0x8b, 0x58, 0x4a, 0x98, 0x2d, 0x8b, 0x4b, 0x0d, 0x87, 0x07, 0x74, 0x4b, 0x48, 0x49, 0xd7, 0xe7, 0x2f, 0xe6, 0x95, 0xe3, 0xc4, 0xf4, 0xb1, 0xf7, 0x8b, 0xf5, 0x9b, 0x63, 0xdd, 0xa7, 0xba, 0xf7, 0x26, 0x5b, 0xa4, 0x58, 0x8f, 0x2f, 0x43, 0x31, 0xa5, 0xf4, 0x9b, 0xf5, 0x73, 0x4c, 0x24, 0xd6, 0x6d, 0x02, 0xad, 0xcf, 0xb5, 0x6b, 0x9e, 0x8f, 0x0b, 0x9c, 0x5e, 0x92, 0x3d, 0xad, 0xe4, 0x10, 0xbe, 0xbf, 0x84, 0x66, 0xdc, 0x0d, 0x67, 0x22, 0x7d, 0x8f, 0x6b, 0xaf, 0xd9, 0x2f, 0x39, 0x6a, 0x3c, 0x54, 0x64, 0x70, 0x86, 0xdc, 0x95, 0xae, 0x2a, 0xc7, 0x98, 0xef, 0x97, 0x92, 0x29, 0x91, 0x57, 0x4a, 0xc2, 0x3f, 0x79, 0xa5, 0x99, 0x0c, 0x4d, 0x65, 0x0b, 0x4a, 0x6b, 0x7f, 0xfa, 0x2b, 0x3c, 0x2d, 0xd1, 0xf7, 0x47, 0xa6, 0xfb, 0x97, 0x53, 0xee, 0xd6, 0x11, 0xb2, 0xbe, 0xf0, 0xcb, 0x26, 0x09, 0x3c, 0xf7, 0x72, 0xca, 0xc3, 0x5b, 0xce, 0x0b, 0x47, 0x9a, 0xfc, 0xae, 0x1a, 0xa5, 0xc8, 0x05, 0xdc, 0xc9, 0x61, 0x4d, 0x83, 0xda, 0x1b, 0x20, 0x0f, 0x9e, 0x49, 0xb4, 0x53, 0xe0, 0x27, 0x1f, 0x92, 0x67, 0x99, 0x09, 0x73, 0x92, 0xa7, 0xe1, 0xe1, 0xfe, 0x4d, 0x4b, 0x8c, 0xae, 0x40, 0xc3, 0xa6, 0x76, 0xc3, 0xd6, 0x9e, 0xa1, 0x87, 0xa3, 0x5d, 0xad, 0x7c, 0x9a, 0x88, 0x61, 0xcb, 0x77, 0x06, 0x37, 0x45, 0x93, 0xad, 0xe0, 0xc8, 0x5c, 0xa6, 0x26, 0x29, 0xdc, 0xbb, 0xa7, 0xb7, 0x35, 0xcb, 0x3e, 0x09, 0x4f, 0x5d, 0xfd, 0x5d, 0x2d, 0x7e, 0xaf, 0xa4, 0xf9, 0xa1, 0xe1, 0x33, 0x67, 0x16, 0x5c, 0x51, 0xdd, 0x75, 0x3b, 0x34, 0x89, 0xd0, 0x7b, 0x8b, 0xd0, 0x70, 0xdf, 0x7f, 0xed, 0x23, 0xe1, 0x05, 0xb7, 0x1b, 0x32, 0x71, 0x56, 0xdd, 0x0e, 0x3e, 0xc5, 0x50, 0x9c, 0x2b, 0x60, 0x18, 0x4b, 0x33, 0x89, 0x7d, 0xfa, 0x8e, 0xdb, 0xab, 0x0b, 0xee, 0x6e, 0x53, 0x7a, 0xae, 0xc8, 0x43, 0xe3, 0xfb, 0xd6, 0x27, 0xfc, 0xc1, 0x2b, 0xd7, 0xbe, 0xdf, 0x9a, 0x9b, 0x2a, 0x81, 0x57, 0xeb, 0xb7, 0xbd, 0xca, 0x36, 0xe1, 0x0a, 0xfb, 0xb5, 0xb7, 0x54, 0xaf, 0xb7, 0x57, 0x47, 0xbe, 0x51, 0x4a, 0x7a, 0xd9, 0x5b, 0xc4, 0xb9, 0x47, 0x0f, 0x25, 0x8a, 0xf0, 0x55, 0x53, 0x6b, 0x8e, 0xf6, 0x95, 0xf8, 0xe6, 0x7f, 0xb2, 0x05, 0x3b, 0xfb, 0x1f, 0xa9, 0x7e, 0x28, 0xf2, 0xad, 0xd5, 0x34, 0x06, 0xad, 0xf8, 0x42, 0x58, 0xa9, 0x70, 0xa9, 0xf7, 0x6b, 0x9a, 0xaa, 0x9a, 0xa5, 0x92, 0xa0, 0xc9, 0x7f, 0xa0, 0x5d, 0x47, 0x8f, 0x69, 0xed, 0x7a, 0x8f, 0x68, 0xc1, 0xa2, 0xc9, 0x8c, 0x65, 0x6f, 0x90, 0x7c, 0x9e, 0xec, 0xe2, 0x10, 0x5a, 0xed, 0x75, 0xb4, 0x55, 0x69, 0x59, 0x65, 0x69, 0x95, 0x68, 0xb5, 0x22, 0x5d, 0xc3, 0xfd, 0xd3, 0x5b, 0xcd, 0x8d, 0x56, 0x73, 0xb2, 0x14, 0x24, 0x87, 0xb4, 0x56, 0x73, 0x12, 0x9e, 0x84, 0xd6, 0xfb, 0x8b, 0x0f, 0x2f, 0x31, 0x3a, 0x2b, 0x27, 0xb4, 0xd6, 0x46, 0xad, 0xb5, 0xe8, 0x58, 0x5a, 0x6b, 0xbd, 0x0e, 0xf8, 0x3c, 0x68, 0xa5, 0xee, 0x3d, 0xdd, 0xad, 0x6c, 0xb9, 0xe0, 0xd3, 0x5b, 0x2c, 0x97, 0xd7, 0x7f, 0x44, 0x8d, 0xb3, 0xd8, 0xe6, 0x5d, 0x75, 0xa3, 0x4d, 0x1e, 0xf7, 0x9a, 0xd2, 0xda, 0x24, 0x4b, 0x78, 0x5d, 0xe6, 0x6b, 0xd2, 0x84, 0x76, 0x59, 0x25, 0xbc, 0x94, 0x95, 0x00, 0x9b, 0x1f, 0xb7, 0xe6, 0xa5, 0x72, 0x11, 0xf8, 0xfc, 0x90, 0xca, 0x45, 0x2b, 0xe4, 0x70, 0x28, 0x7b, 0xc1, 0xad, 0x4e, 0x0a, 0x2f, 0xe6, 0x5a, 0x19, 0x5a, 0x3b, 0x3c, 0x47, 0xbe, 0x44, 0x31, 0xbe, 0xdd, 0xdf, 0xaa, 0x43, 0x30, 0xfe, 0xe5, 0x61, 0x6e, 0x3f, 0x93, 0xfe, 0xdd, 0xb7, 0xcc, 0x34, 0x06, 0x9d, 0xf8, 0x92, 0x5b, 0xe0, 0x06, 0x9b, 0x2e, 0xdd, 0x97, 0x06, 0xeb, 0xf4, 0xb9, 0x27, 0x97, 0x52, 0x89, 0xc1, 0x91, 0x1d, 0x5d, 0x17, 0xcf, 0x7d, 0xb3, 0x1e, 0xfc, 0xac, 0x04, 0x7e, 0xd6, 0x88, 0xbb, 0x69, 0x95, 0x81, 0xeb, 0x56, 0xf7, 0xec, 0xd5, 0xa7, 0x34, 0x2d, 0x3a, 0xda, 0xf4, 0x9b, 0x86, 0x7f, 0x06, 0xcf, 0xfc, 0x1b, 0x48, 0x57, 0xb8, 0x9b, 0xe4, 0x80, 0x9d, 0x4f, 0x51, 0x32, 0xcb, 0x51, 0x7b, 0x15, 0x8f, 0x86, 0xab, 0x49, 0xc1, 0x67, 0xdf, 0x2b, 0xcf, 0xb7, 0x07, 0x84, 0x9c, 0xf2, 0x04, 0x6a, 0x5d, 0x56, 0x91, 0x53, 0x8e, 0xd9, 0xa3, 0x0c, 0x23, 0xa8, 0xd4, 0x4d, 0x26, 0xde, 0xb9, 0x10, 0x3a, 0xb3, 0x96, 0x14, 0xb7, 0x5f, 0xfa, 0xd0, 0x97, 0xab, 0x49, 0xfa, 0x72, 0x15, 0x19, 0xbf, 0x1c, 0x26, 0xd3, 0xcc, 0x4a, 0xed, 0x34, 0x77, 0x6d, 0x9d, 0x5e, 0xf3, 0x70, 0xa3, 0x56, 0xb3, 0x77, 0x2c, 0xf1, 0x36, 0x05, 0x6f, 0xa5, 0xda, 0x9b, 0x2f, 0x43, 0xdf, 0xc9, 0xd0, 0x64, 0xe5, 0x32, 0x3e, 0xcb, 0x5d, 0x5b, 0x79, 0x15, 0xb0, 0x0e, 0x83, 0xba, 0xb9, 0xb8, 0x07, 0x60, 0x56, 0xf1, 0xf8, 0x9b, 0xa8, 0x80, 0x4f, 0xe6, 0xf5, 0x35, 0xd1, 0x74, 0x70, 0x67, 0x97, 0xe5, 0x22, 0xa9, 0xb7, 0xdd, 0x3a, 0x94, 0xc4, 0x3c, 0x7a, 0x1a, 0xe1, 0x23, 0xed, 0xd3, 0xc4, 0xf3, 0x79, 0xb6, 0x9b, 0x64, 0x39, 0x4e, 0x0e, 0x81, 0x13, 0x39, 0xed, 0x69, 0xd1, 0x4e, 0x31, 0x00, 0x95, 0x9d, 0x2e, 0xfa, 0x5b, 0x4c, 0x2e, 0x34, 0xde, 0x27, 0xce, 0xfb, 0x3e, 0xcd, 0xfe, 0x41, 0x2a, 0x59, 0x83, 0x11, 0xdc, 0x8a, 0xae, 0xc1, 0x98, 0xf2, 0xd9, 0x79, 0x7a, 0x82, 0x0f, 0x53, 0xdd, 0xe2, 0x71, 0xb4, 0x63, 0xd1, 0x66, 0xa5, 0x02, 0xfc, 0xaf, 0x3b, 0x9e, 0xf2, 0xa3, 0x34, 0x7c, 0xf5, 0x48, 0xfd, 0x66, 0xb4, 0xa2, 0xf5, 0xad, 0x73, 0x52, 0xaf, 0x1c, 0x4a, 0xf7, 0xb6, 0x8a, 0xd0, 0x69, 0x63, 0xa1, 0x97, 0x53, 0xa1, 0x5f, 0x6e, 0x56, 0xaf, 0x51, 0x01, 0x7e, 0xaf, 0xd0, 0x74, 0x21, 0xfd, 0x69, 0xe7, 0x5a, 0x4a, 0xb7, 0x06, 0xe8, 0xf3, 0xb7, 0x06, 0x29, 0xff, 0x56, 0x48, 0x08, 0xda, 0x4a, 0xbb, 0xb4, 0xe2, 0x7f, 0xa8, 0x24, 0x6b, 0x7b, 0x8d, 0x22, 0x36, 0x2d, 0x54, 0x0f, 0xcb, 0xbf, 0x3e, 0xcc, 0x2b, 0xec, 0x27, 0x1d, 0x8b, 0xc4, 0xef, 0x83, 0x63, 0xde, 0x0e, 0xc8, 0x5a, 0x44, 0xe7, 0x3d, 0xda, 0x39, 0x4c, 0x81, 0x5f, 0x0f, 0xd8, 0x57, 0x50, 0xce, 0x5b, 0xaf, 0x7f, 0xa9, 0x6f, 0x17, 0x89, 0xb3, 0x99, 0xb2, 0x67, 0x45, 0xa4, 0xb2, 0x59, 0x35, 0x52, 0x89, 0x36, 0xf7, 0xf0, 0xce, 0x2d, 0xf2, 0x2e, 0x48, 0xad, 0xf7, 0x6b, 0xba, 0x2b, 0x5f, 0x8a, 0x50, 0xf1, 0x9d, 0xe0, 0x8f, 0xa9, 0x5c, 0x58, 0x30, 0x94, 0xe1, 0x37, 0x9f, 0x2a, 0x38, 0x3d, 0x5a, 0x2a, 0x37, 0x64, 0x50, 0xcc, 0xa7, 0xfa, 0xfe, 0x6d, 0x32, 0xef, 0xc4, 0x44, 0x29, 0x7e, 0x69, 0x5a, 0x90, 0x6c, 0x1c, 0x97, 0xe3, 0xa2, 0x2f, 0x44, 0xba, 0xa6, 0x05, 0xe8, 0x0b, 0x84, 0x79, 0x8a, 0x64, 0x9f, 0x41, 0xd3, 0x2b, 0x4a, 0xd9, 0x35, 0xb8, 0xc4, 0xba, 0x8d, 0x83, 0x79, 0xef, 0xe8, 0xd8, 0x18, 0x8f, 0xa6, 0x2c, 0x5b, 0xf8, 0x54, 0xe0, 0x26, 0xcf, 0x98, 0x26, 0xb4, 0x9d, 0x35, 0x28, 0x62, 0x49, 0x21, 0xaf, 0x87, 0x6e, 0xa6, 0xcb, 0xac, 0x48, 0x32, 0x7a, 0x97, 0x6e, 0x2b, 0x9b, 0x81, 0xc1, 0xdb, 0xa2, 0xaa, 0x72, 0x65, 0x64, 0xb9, 0xaa, 0x32, 0xe7, 0xa9, 0xf9, 0x58, 0xff, 0xcb, 0xed, 0x3a, 0x27, 0x63, 0x49, 0xed, 0x0d, 0x6b, 0x76, 0x66, 0xbc, 0x86, 0x24, 0xb3, 0x9d, 0x9d, 0xd1, 0x9e, 0xfc, 0x12, 0xe4, 0x64, 0xa7, 0x7e, 0xde, 0x55, 0x07, 0x9f, 0x72, 0x0d, 0x59, 0x13, 0x12, 0xb4, 0x85, 0xfd, 0x1b, 0xdf, 0x1e, 0x24, 0x8b, 0xb3, 0xc1, 0x61, 0x96, 0xeb, 0x35, 0xbb, 0x0f, 0x4d, 0x62, 0xd4, 0xbd, 0xcf, 0x0d, 0x1f, 0x2d, 0x15, 0xfe, 0xdb, 0x4d, 0x0c, 0x9f, 0x62, 0xe6, 0x55, 0xf2, 0x31, 0xd9, 0x5a, 0xf3, 0x9f, 0x3a, 0x2e, 0xbf, 0x17, 0x45, 0xbb, 0xe3, 0x45, 0x2c, 0x1b, 0xff, 0x29, 0x12, 0x7c, 0x9a, 0x64, 0x6c, 0xd4, 0xac, 0xcf, 0xc6, 0xfd, 0x06, 0xbb, 0x22, 0x2e, 0x72, 0x1b, 0x3c, 0x52, 0x51, 0x86, 0xb3, 0x6e, 0xcc, 0xd3, 0x5b, 0xb6, 0x58, 0xf5, 0x6b, 0x12, 0x1a, 0x0f, 0x66, 0xce, 0x65, 0xe2, 0xde, 0x84, 0xf0, 0x99, 0xe7, 0x88, 0x26, 0xe3, 0xd9, 0xfa, 0x3e, 0x53, 0x48, 0x8c, 0xb7, 0x3d, 0xda, 0xfe, 0x84, 0xce, 0xd7, 0x3d, 0xc5, 0xfb, 0x24, 0xa1, 0xaa, 0x48, 0x15, 0xf8, 0xc3, 0xf3, 0xa1, 0xea, 0x48, 0x35, 0x78, 0xc6, 0x0f, 0x42, 0xf3, 0x22, 0xf3, 0xee, 0x9e, 0x87, 0x11, 0xd6, 0xac, 0x7e, 0x84, 0x1e, 0x9e, 0x75, 0x63, 0xbf, 0xb7, 0xaf, 0x94, 0xb6, 0x70, 0xbd, 0xd2, 0x7b, 0x3d, 0x4b, 0x41, 0x63, 0xa7, 0xaa, 0x47, 0xc5, 0xf9, 0xe9, 0x27, 0x83, 0x17, 0xc4, 0x58, 0x1d, 0x66, 0x4b, 0x6f, 0x71, 0x86, 0xfa, 0x88, 0x3d, 0xa4, 0xeb, 0x0e, 0x9f, 0xc4, 0xdc, 0xa7, 0x9d, 0xa3, 0xde, 0xc4, 0xda, 0x31, 0x64, 0x04, 0x56, 0xf9, 0x5c, 0x01, 0x2b, 0xaf, 0xae, 0xf2, 0x59, 0x4d, 0x6f, 0x1d, 0xfe, 0x12, 0x46, 0x78, 0x5f, 0xba, 0x2f, 0x61, 0xf6, 0x25, 0xa5, 0x9d, 0x06, 0xda, 0x22, 0x2c, 0x31, 0xa5, 0x7d, 0xc9, 0x07, 0x97, 0xda, 0x03, 0x6f, 0x0d, 0x80, 0x76, 0x18, 0x7f, 0xfd, 0x9a, 0xcb, 0xc0, 0x7b, 0xa7, 0x23, 0xb5, 0x52, 0x78, 0x2a, 0xc9, 0x52, 0x28, 0x10, 0x09, 0x0c, 0x47, 0xa4, 0x00, 0x5d, 0xec, 0x0b, 0xc8, 0x19, 0x6b, 0x0a, 0xce, 0xee, 0xea, 0x0b, 0xf8, 0x72, 0xa4, 0xc0, 0x45, 0xea, 0x0b, 0x14, 0xf7, 0x02, 0x47, 0x86, 0x84, 0x8b, 0xf7, 0xa6, 0x42, 0xa1, 0x48, 0x68, 0x24, 0x2a, 0x85, 0xe8, 0x22, 0x7b, 0x77, 0x96, 0x82, 0x53, 0xa9, 0x37, 0x18, 0xaa, 0x8c, 0x54, 0x0e, 0xcf, 0x97, 0x2a, 0x69, 0x6a, 0x6f, 0xe5, 0xec, 0xee, 0x9d, 0x90, 0x25, 0x8d, 0xe5, 0x3a, 0xef, 0x24, 0xb9, 0x32, 0xde, 0xdf, 0x74, 0xbc, 0xc7, 0x69, 0x7c, 0xf7, 0x61, 0xfe, 0x8d, 0x54, 0x86, 0x2a, 0x8f, 0xf5, 0xba, 0x24, 0x84, 0x75, 0x3b, 0x8c, 0xef, 0x6e, 0xe4, 0xdf, 0x48, 0x28, 0x14, 0x3a, 0xda, 0xeb, 0x32, 0xbc, 0xbf, 0x69, 0x08, 0xbf, 0xef, 0x6e, 0x3a, 0xde, 0x65, 0x37, 0xb2, 0x3e, 0xcf, 0x50, 0x2f, 0xaf, 0xda, 0x62, 0xfe, 0xd4, 0x75, 0x69, 0x7c, 0x5a, 0x5d, 0x8a, 0xfd, 0x01, 0x9d, 0xbb, 0xde, 0xd0, 0xea, 0x7a, 0xeb, 0x35, 0xad, 0x2e, 0xef, 0x46, 0x51, 0xba, 0xda, 0x5b, 0xa9, 0x41, 0xdc, 0x1b, 0x28, 0xee, 0x16, 0x10, 0x9b, 0x05, 0xc4, 0x6d, 0x02, 0x22, 0x8b, 0x90, 0xbd, 0x47, 0xd2, 0xf4, 0xc9, 0x8a, 0x0b, 0x27, 0xb3, 0x15, 0xea, 0xc7, 0x1d, 0x1d, 0x05, 0x47, 0x37, 0xaf, 0x72, 0x09, 0xad, 0x32, 0x49, 0xd7, 0x2a, 0x63, 0x2d, 0xbd, 0xd7, 0x97, 0x94, 0xdc, 0x44, 0xab, 0x6c, 0x49, 0x4a, 0xab, 0xcc, 0x70, 0x4c, 0x89, 0x8b, 0x67, 0x63, 0x62, 0xad, 0xa6, 0x5d, 0x86, 0xb0, 0x83, 0x4a, 0xea, 0x6c, 0xae, 0xee, 0x25, 0x72, 0x4a, 0xb7, 0x8c, 0x76, 0x8f, 0xe9, 0x96, 0x3d, 0xa2, 0xe9, 0x96, 0x21, 0xe5, 0x4e, 0x65, 0xf5, 0x98, 0x3e, 0x59, 0xd6, 0x98, 0x3e, 0x59, 0x37, 0x24, 0x33, 0xa1, 0x8b, 0x64, 0x17, 0x3b, 0x97, 0xea, 0x4b, 0x78, 0x6f, 0x91, 0x8b, 0x52, 0xef, 0xd7, 0x76, 0xe3, 0xfd, 0xfe, 0xb4, 0xf7, 0xa7, 0xf0, 0x5e, 0x97, 0xf6, 0xfe, 0x3d, 0xbc, 0x57, 0xc8, 0xe3, 0x3a, 0x65, 0x45, 0x0a, 0xf3, 0x15, 0xe3, 0xef, 0x2e, 0xbc, 0x4f, 0x17, 0xfb, 0xb5, 0x59, 0x52, 0x23, 0xd3, 0x48, 0xbc, 0x67, 0x53, 0x63, 0x80, 0xc4, 0xd3, 0xb8, 0xbc, 0x46, 0x74, 0x59, 0xb7, 0xa7, 0xba, 0x28, 0x72, 0x27, 0xad, 0xb5, 0x55, 0x9a, 0x1b, 0x24, 0xbb, 0x9d, 0x86, 0x37, 0xe8, 0xcf, 0x05, 0x7e, 0xd2, 0x9f, 0xa6, 0xbf, 0x1b, 0xe1, 0x75, 0x09, 0xa1, 0xd9, 0xcb, 0x76, 0xe6, 0x79, 0x83, 0xbc, 0xfe, 0x10, 0x20, 0x97, 0x37, 0x44, 0x9e, 0xeb, 0xf5, 0xb9, 0x74, 0x7d, 0x30, 0x33, 0x46, 0x72, 0x0c, 0x18, 0xdb, 0x84, 0xfb, 0xbd, 0xb8, 0xf7, 0x7a, 0xa7, 0xf8, 0x5a, 0xc8, 0xe4, 0x35, 0xb3, 0x15, 0xa4, 0x1c, 0x10, 0x74, 0x21, 0x99, 0x68, 0x62, 0x0d, 0x2b, 0xcd, 0x5a, 0x5f, 0xf3, 0x01, 0xc8, 0x5a, 0x0d, 0xa0, 0x3a, 0x66, 0x02, 0x84, 0xe0, 0xe7, 0x6b, 0x25, 0x97, 0x7a, 0x15, 0xf7, 0xb0, 0x46, 0xe9, 0x26, 0x7c, 0xeb, 0x63, 0xbd, 0x2c, 0x48, 0x7e, 0xa3, 0xa0, 0xb8, 0x96, 0x9c, 0x22, 0x9a, 0x24, 0x19, 0x28, 0xa3, 0x9b, 0x40, 0x8d, 0x2d, 0x4a, 0xae, 0xc0, 0x83, 0x99, 0x1a, 0x65, 0xae, 0xbd, 0x49, 0x6a, 0x7c, 0x07, 0xf8, 0xb8, 0x41, 0xd7, 0xeb, 0xa2, 0xae, 0xd1, 0x65, 0xd3, 0xf7, 0xf8, 0x99, 0x3e, 0x1b, 0x10, 0xff, 0xf4, 0xab, 0x94, 0x93, 0x51, 0x6d, 0x38, 0xe8, 0xa6, 0xd2, 0x57, 0x25, 0xa1, 0xa5, 0xc5, 0xb6, 0x35, 0xc5, 0xdd, 0x2e, 0xca, 0x63, 0x6d, 0xf4, 0x94, 0x5d, 0x83, 0x7e, 0x4e, 0x5f, 0x29, 0x7b, 0x1e, 0x70, 0xb0, 0x86, 0x5e, 0x0c, 0xf2, 0x9f, 0xcd, 0x14, 0x4c, 0x92, 0xae, 0x45, 0xc3, 0xbb, 0x54, 0x79, 0xac, 0x59, 0x30, 0xd8, 0x05, 0x0c, 0x7c, 0xcf, 0xef, 0x4a, 0x8f, 0xed, 0xa0, 0x62, 0xe4, 0xc7, 0x23, 0x64, 0xa8, 0x1b, 0xf4, 0xb7, 0x58, 0xb3, 0xaa, 0x97, 0x1a, 0x3e, 0x51, 0xf7, 0x24, 0x9b, 0xcd, 0xb2, 0xc1, 0x11, 0x91, 0xeb, 0x95, 0xe5, 0x90, 0xfc, 0x8c, 0x8e, 0x2d, 0xae, 0x7a, 0xb1, 0x3b, 0x90, 0x35, 0x33, 0x4a, 0x46, 0xc5, 0xe8, 0x04, 0x37, 0x23, 0x52, 0xcb, 0x25, 0x85, 0xc8, 0xb1, 0x12, 0x39, 0xf6, 0xe8, 0x39, 0x16, 0x6a, 0x39, 0x1e, 0xed, 0xd9, 0xd3, 0xdd, 0x7c, 0x5c, 0x09, 0x40, 0x6e, 0xca, 0x45, 0x6a, 0xe9, 0x8e, 0x08, 0x68, 0x3c, 0xfb, 0x47, 0xf8, 0x31, 0x49, 0xa1, 0x5d, 0xda, 0x33, 0xc2, 0x24, 0xc5, 0x34, 0x93, 0x63, 0xfa, 0x34, 0x99, 0x22, 0x4e, 0xea, 0xfd, 0x5c, 0x97, 0xdb, 0xa3, 0x64, 0xaa, 0x7d, 0xa7, 0x00, 0x75, 0xbc, 0x7d, 0x3e, 0x5a, 0x7c, 0x9b, 0xab, 0x41, 0xec, 0xdc, 0x1e, 0x55, 0x8e, 0x09, 0x59, 0x0d, 0x63, 0xcc, 0x55, 0xa7, 0x69, 0x0e, 0xce, 0xff, 0x20, 0xe3, 0x49, 0x60, 0x75, 0xdc, 0x86, 0x5e, 0xe7, 0x1d, 0xce, 0x2e, 0x15, 0x6b, 0xe5, 0x31, 0x39, 0xc0, 0x33, 0x0b, 0x9f, 0xf5, 0x24, 0xda, 0x78, 0x5c, 0x43, 0xb7, 0x2e, 0x95, 0xf2, 0x5c, 0x99, 0xee, 0x71, 0xd4, 0x39, 0x83, 0x25, 0xf5, 0x6c, 0xc9, 0x4d, 0xdf, 0x26, 0xde, 0xad, 0xb6, 0x78, 0x9a, 0x34, 0x4b, 0x74, 0xfb, 0xfc, 0x74, 0xdb, 0xf5, 0xb4, 0xd2, 0x20, 0xcb, 0x76, 0x52, 0x6a, 0xff, 0xf4, 0x0f, 0xfb, 0x36, 0xf2, 0xb3, 0x6f, 0xa3, 0x97, 0x7d, 0xec, 0xdb, 0x68, 0x40, 0xe4, 0x1d, 0x10, 0xfe, 0x8d, 0x82, 0xec, 0xdf, 0xc8, 0xcf, 0xbe, 0x8d, 0x26, 0xc7, 0x7a, 0xfd, 0xec, 0xdb, 0x68, 0x72, 0x6c, 0x1d, 0xcf, 0x1b, 0x76, 0xdd, 0xbf, 0x91, 0x43, 0xf8, 0x37, 0x72, 0x66, 0xb1, 0x0f, 0xb6, 0x3f, 0xec, 0xdb, 0x48, 0x93, 0xee, 0xf8, 0x14, 0x33, 0x71, 0x76, 0x27, 0x4a, 0xd3, 0xcf, 0x1f, 0xb4, 0x6a, 0x9a, 0x38, 0xde, 0x2c, 0x7b, 0xab, 0x76, 0x2e, 0x21, 0x4b, 0x13, 0x6c, 0x45, 0x8e, 0xf8, 0x82, 0x34, 0x0b, 0xa7, 0xaf, 0xa8, 0x4f, 0xa7, 0xfc, 0x87, 0x7b, 0x67, 0x51, 0xae, 0x58, 0x5d, 0x9e, 0x45, 0x56, 0x5c, 0x16, 0x61, 0x45, 0xf7, 0x52, 0xe9, 0x2c, 0x75, 0x34, 0x16, 0xde, 0x09, 0x1e, 0xa0, 0x64, 0x96, 0x7a, 0x2d, 0x56, 0xb9, 0x03, 0x5c, 0x55, 0x31, 0x7b, 0x00, 0x9f, 0x2a, 0x85, 0xd4, 0x8b, 0x3e, 0xb6, 0x12, 0xcb, 0x6d, 0x92, 0xee, 0x0f, 0x9c, 0x09, 0xdc, 0x1d, 0x50, 0x5f, 0x15, 0xbe, 0x34, 0x06, 0xfd, 0x61, 0x70, 0x79, 0x47, 0xe5, 0xc9, 0x76, 0xb1, 0xf6, 0x06, 0x1a, 0x92, 0x8b, 0x99, 0x67, 0x5f, 0x82, 0x32, 0x2c, 0xe5, 0x95, 0x85, 0x75, 0xea, 0x01, 0x5f, 0x98, 0xcf, 0x60, 0x68, 0x9b, 0x3a, 0xd8, 0x77, 0x26, 0xe9, 0xcd, 0x9e, 0x68, 0xdd, 0xb5, 0x68, 0x73, 0x51, 0x92, 0x7d, 0xc1, 0xa9, 0xfb, 0x34, 0x0d, 0x25, 0x1e, 0x01, 0x80, 0xe1, 0x72, 0x38, 0x2c, 0xd6, 0x75, 0x4a, 0xdb, 0xa5, 0x83, 0xcc, 0x81, 0x9e, 0xe4, 0xd1, 0x18, 0x1e, 0xd0, 0x6c, 0xe5, 0x4b, 0x02, 0xfe, 0x66, 0xf5, 0x55, 0xe6, 0x2c, 0x41, 0x71, 0x0e, 0xa1, 0x4c, 0x4b, 0xec, 0x19, 0xb2, 0x58, 0xa7, 0x83, 0x33, 0x92, 0xf7, 0xd0, 0x12, 0x53, 0xbf, 0x8b, 0x6e, 0xd7, 0xcf, 0x1b, 0xba, 0x3d, 0x96, 0xc4, 0xb8, 0x14, 0x67, 0x23, 0xf1, 0x78, 0x20, 0x75, 0x4b, 0x17, 0xcf, 0x5f, 0x68, 0x43, 0xd7, 0x6f, 0x5e, 0x73, 0x17, 0xef, 0x24, 0x7f, 0x26, 0xcf, 0xc6, 0x78, 0xf7, 0x69, 0x3b, 0x63, 0xc7, 0x21, 0x35, 0x94, 0x67, 0x9e, 0xa9, 0xd3, 0xec, 0x53, 0xf9, 0x1c, 0x89, 0xce, 0x49, 0xaf, 0xaf, 0x5f, 0xfb, 0xed, 0xea, 0x49, 0x67, 0x7f, 0x58, 0x38, 0x4f, 0x3d, 0xfd, 0x0f, 0x47, 0xb4, 0x71, 0xc5, 0x5c, 0x31, 0x4a, 0xcf, 0xf1, 0x4f, 0x49, 0x58, 0xcb, 0x5c, 0x94, 0xef, 0xcf, 0xec, 0x9c, 0x7a, 0x7e, 0xc5, 0x50, 0xd5, 0xa9, 0x20, 0xf8, 0x8a, 0x2a, 0xcc, 0x3d, 0xe1, 0x0a, 0x4b, 0xc2, 0x04, 0xc9, 0xab, 0x40, 0x91, 0xb6, 0xbd, 0x36, 0x54, 0x63, 0x6f, 0x56, 0x87, 0xdf, 0x1a, 0x21, 0x3b, 0xa0, 0x3e, 0x58, 0x6e, 0x00, 0x06, 0xab, 0xcf, 0x54, 0x57, 0x98, 0x22, 0xff, 0xd3, 0xd3, 0xac, 0xee, 0xab, 0xfc, 0x78, 0x35, 0x61, 0xee, 0x1f, 0x28, 0x6c, 0x56, 0x0f, 0xaa, 0x23, 0xec, 0xbd, 0xb4, 0x73, 0xd2, 0x91, 0x2e, 0x2e, 0xf3, 0xfc, 0x0f, 0x11, 0x3f, 0xf2, 0x85, 0x7b, 0xd5, 0xff, 0xe5, 0xa9, 0x41, 0xec, 0x88, 0x7a, 0xd0, 0x33, 0x4b, 0xec, 0x5a, 0x1d, 0x06, 0x86, 0xf7, 0x8a, 0x90, 0x7e, 0x3e, 0xd1, 0x49, 0x29, 0xb3, 0xce, 0x52, 0xff, 0xd7, 0xc0, 0xfa, 0x28, 0x25, 0xa4, 0xcd, 0x79, 0x6d, 0x86, 0xfe, 0x87, 0xe2, 0xe6, 0xd8, 0x23, 0x9c, 0x83, 0x22, 0x9d, 0xda, 0x8c, 0xf7, 0xf5, 0xf1, 0x9c, 0xd8, 0x33, 0xea, 0x41, 0xf0, 0x10, 0x07, 0xbf, 0x50, 0xaf, 0xfe, 0xaf, 0xce, 0x6f, 0x57, 0x9b, 0x10, 0xf3, 0x08, 0xc2, 0x0e, 0x83, 0x8f, 0x38, 0xdc, 0xff, 0x8c, 0x7a, 0xbe, 0xf9, 0x00, 0x9e, 0xf6, 0x8a, 0x93, 0x9d, 0x46, 0xf8, 0xbc, 0x27, 0xe1, 0x1f, 0xc9, 0xf9, 0xaf, 0xcf, 0xa8, 0x23, 0x6f, 0x5d, 0x50, 0x2f, 0x96, 0x4f, 0x49, 0xe4, 0x35, 0x54, 0x99, 0x33, 0x99, 0x0f, 0x6a, 0x08, 0x0a, 0xf8, 0x26, 0xbd, 0xb4, 0x3e, 0x2e, 0x35, 0x6c, 0x88, 0x01, 0xf2, 0x17, 0x71, 0xb5, 0x90, 0x1a, 0x8d, 0xd5, 0xae, 0xa1, 0x32, 0xde, 0xa3, 0x38, 0x79, 0xef, 0xcb, 0xbc, 0x9a, 0x16, 0xee, 0xda, 0xb3, 0xae, 0x89, 0xae, 0x9d, 0xc4, 0xd8, 0xf4, 0x88, 0xb1, 0x69, 0x1e, 0x4c, 0x1e, 0xff, 0x06, 0x6b, 0x68, 0x1f, 0x07, 0xdf, 0x7b, 0xbc, 0x91, 0x02, 0x0d, 0xcf, 0x90, 0x35, 0x8a, 0x2b, 0x4e, 0xd7, 0x4a, 0x85, 0x2d, 0x5c, 0x29, 0x5b, 0x22, 0x68, 0x1e, 0x67, 0x63, 0x49, 0xc0, 0x71, 0xa0, 0xa1, 0xef, 0xf9, 0x81, 0x56, 0x29, 0x96, 0x04, 0x8c, 0x07, 0x9a, 0x9a, 0x7c, 0x68, 0x79, 0xaf, 0x79, 0xdc, 0x36, 0x10, 0x29, 0xf6, 0xbd, 0x39, 0xd0, 0x4e, 0x7e, 0xab, 0xee, 0xa9, 0x7e, 0xea, 0x48, 0x68, 0x35, 0x29, 0x81, 0x86, 0x90, 0x25, 0x44, 0x86, 0x56, 0xf3, 0x2a, 0x2a, 0xc1, 0x28, 0x55, 0xa4, 0x55, 0xe4, 0xce, 0x68, 0x9b, 0x3a, 0xfc, 0x8c, 0x6c, 0x18, 0xec, 0xd2, 0x4f, 0x30, 0x5b, 0xb7, 0x66, 0xea, 0xb9, 0xa7, 0xc5, 0x19, 0xbb, 0xaa, 0xdb, 0x70, 0xea, 0x3b, 0xc7, 0xd7, 0x25, 0x7b, 0xab, 0x93, 0xc9, 0xa0, 0x6f, 0xc0, 0x65, 0xb0, 0x67, 0x44, 0x43, 0xf1, 0x03, 0xa5, 0x3c, 0x0a, 0x1a, 0xc9, 0x51, 0xe2, 0x26, 0x67, 0xe4, 0x15, 0xb1, 0xbf, 0x5d, 0xc1, 0xe5, 0xb5, 0x91, 0x7f, 0x96, 0xfa, 0x6a, 0xe4, 0x65, 0x7b, 0xd4, 0x61, 0x39, 0xfa, 0xf0, 0x8e, 0x5e, 0xd7, 0x2c, 0xf5, 0xb8, 0x7b, 0x96, 0x7a, 0x40, 0xeb, 0xfd, 0xea, 0x49, 0x4e, 0x03, 0x5c, 0x1e, 0xb5, 0xcf, 0xc2, 0x1c, 0xa0, 0x8d, 0x88, 0x6c, 0x1e, 0x6d, 0x7c, 0x6a, 0xb1, 0xf0, 0xe1, 0xe2, 0x18, 0xc4, 0xb8, 0xf3, 0x07, 0xb4, 0x33, 0x89, 0x47, 0x3d, 0x63, 0xbe, 0xad, 0x7b, 0xf5, 0x15, 0xe3, 0xc3, 0xa9, 0x31, 0x2a, 0xe3, 0xeb, 0xe8, 0x2e, 0x63, 0x59, 0x3c, 0xbf, 0x12, 0x7c, 0x86, 0x63, 0x63, 0xdb, 0xd8, 0xee, 0xc8, 0x27, 0xc7, 0xd9, 0xb7, 0xce, 0x97, 0x02, 0xc6, 0x32, 0xf6, 0xe7, 0x14, 0xfd, 0xb1, 0xb1, 0x2c, 0x01, 0x86, 0x46, 0x78, 0xb1, 0x9d, 0x30, 0xa2, 0xaf, 0x9e, 0x2f, 0xe6, 0x11, 0x1d, 0xda, 0x3e, 0x61, 0x44, 0x0b, 0x4f, 0x38, 0x27, 0xfc, 0x95, 0xe8, 0x8d, 0xc7, 0xf4, 0x15, 0x76, 0x60, 0x33, 0xdd, 0x0a, 0xe0, 0x13, 0x3e, 0xef, 0x91, 0x7d, 0xef, 0x15, 0x20, 0x5f, 0x31, 0x2f, 0xf9, 0x79, 0x54, 0x06, 0xb5, 0x51, 0xb9, 0x5a, 0x3a, 0x9c, 0x04, 0x8f, 0x79, 0x0a, 0x23, 0xf2, 0xd5, 0xc8, 0xfa, 0x70, 0xb5, 0x3f, 0xa4, 0x8f, 0xc6, 0x7b, 0x9d, 0xa9, 0xd1, 0xf8, 0x05, 0x1b, 0x46, 0xe3, 0xbe, 0x4f, 0x1f, 0x8d, 0xc2, 0xae, 0x6a, 0x0b, 0x6b, 0xe3, 0x0d, 0xb0, 0x5d, 0xf8, 0x3f, 0xbf, 0xe6, 0xbe, 0x73, 0x27, 0x95, 0x8a, 0xd1, 0x88, 0x77, 0x9f, 0x36, 0x4f, 0x0d, 0x41, 0xfa, 0x0f, 0xcd, 0xd3, 0xbc, 0x8b, 0x15, 0x56, 0xa9, 0x23, 0x5a, 0x6b, 0xa1, 0xe4, 0xf3, 0x9e, 0x00, 0x8f, 0x93, 0x68, 0x75, 0xc2, 0x0a, 0xbe, 0x34, 0xbf, 0xcc, 0x88, 0xb6, 0x6d, 0x3e, 0x11, 0x3e, 0x55, 0x85, 0xd1, 0x17, 0x0e, 0x55, 0x9d, 0x08, 0x46, 0xe7, 0x8d, 0x8f, 0x3e, 0x8c, 0xee, 0xc0, 0x6f, 0x2e, 0xa8, 0x23, 0x43, 0xbf, 0xf0, 0x4d, 0x8e, 0x0c, 0x38, 0x9b, 0xd5, 0xa1, 0xca, 0xdf, 0x99, 0xe9, 0xef, 0x7f, 0x29, 0x67, 0x2b, 0x0b, 0x43, 0x55, 0xf9, 0x79, 0xe0, 0xc5, 0xcf, 0xa0, 0xcd, 0xde, 0xc6, 0x68, 0x78, 0x1b, 0xef, 0xb6, 0x13, 0xcd, 0xea, 0x19, 0x4b, 0x15, 0x30, 0x62, 0x2c, 0x2b, 0x27, 0xb5, 0xe0, 0x17, 0x08, 0x7f, 0x1d, 0xed, 0xfb, 0xfa, 0x7e, 0x1e, 0x25, 0x6f, 0x20, 0xe5, 0x1b, 0xe8, 0xe5, 0x18, 0x1b, 0xef, 0x7d, 0xe7, 0x37, 0xbf, 0xe0, 0xb1, 0x01, 0x28, 0xb2, 0x1a, 0xc2, 0x42, 0x1b, 0x82, 0xc7, 0xc3, 0xfc, 0x17, 0xe7, 0xb7, 0xe6, 0x60, 0xbc, 0xd6, 0xaa, 0x6f, 0xaf, 0x21, 0xe0, 0xf9, 0x0d, 0x40, 0xfe, 0xba, 0xf2, 0x92, 0x27, 0x10, 0x9b, 0x87, 0xef, 0x26, 0x61, 0x74, 0x9c, 0xba, 0xf7, 0x50, 0xa4, 0x37, 0x72, 0x28, 0xdc, 0xbb, 0x0f, 0xa3, 0x43, 0x2d, 0x97, 0xb3, 0xd3, 0xc6, 0xc7, 0x23, 0x43, 0x62, 0x7c, 0x0c, 0x61, 0x7c, 0x0c, 0x4d, 0x1c, 0x1f, 0x3f, 0xd0, 0xc7, 0xc7, 0x92, 0xb4, 0xd1, 0x71, 0x2c, 0x6d, 0x74, 0x1c, 0x6b, 0x8a, 0x80, 0x8e, 0x9e, 0x98, 0x30, 0x36, 0x86, 0xde, 0x1c, 0xb0, 0x5a, 0x43, 0x19, 0x8a, 0x5b, 0x1f, 0x0f, 0x26, 0xd0, 0x48, 0x5e, 0x41, 0x60, 0x89, 0x32, 0x2b, 0x9a, 0x81, 0xcb, 0xf0, 0xd5, 0x57, 0x14, 0x53, 0xfd, 0x2b, 0x08, 0xcb, 0xb0, 0xbe, 0x92, 0x07, 0xbe, 0x03, 0x3d, 0x7f, 0xe8, 0x53, 0x7a, 0xfe, 0x50, 0x1b, 0xa1, 0x4f, 0x9f, 0x18, 0xeb, 0xf7, 0x06, 0x60, 0xe5, 0x18, 0xf7, 0x3f, 0x70, 0x3c, 0x65, 0xe8, 0xf9, 0x76, 0x50, 0xb9, 0xa1, 0xb4, 0xd9, 0xf7, 0x53, 0xfb, 0xfc, 0x7f, 0x96, 0x8e, 0xf5, 0xf9, 0x27, 0xb5, 0x3e, 0x7f, 0x75, 0x57, 0xaa, 0xcf, 0xbb, 0x90, 0x9f, 0x93, 0x75, 0x4d, 0x58, 0xc3, 0xa1, 0x56, 0xd7, 0x70, 0xa0, 0x0c, 0xd6, 0x3a, 0xcb, 0x16, 0xbb, 0x49, 0x98, 0xe7, 0xaf, 0x1e, 0x12, 0x3e, 0xab, 0x4e, 0xa7, 0xf7, 0xf4, 0xff, 0x94, 0x78, 0x15, 0x9f, 0xd7, 0xe8, 0x79, 0x8e, 0xe2, 0xb3, 0xd9, 0xe3, 0xf5, 0xe0, 0x59, 0x39, 0x87, 0xc7, 0x5d, 0x29, 0x7f, 0xac, 0xb5, 0xcc, 0xe1, 0x32, 0x4c, 0xe5, 0xa8, 0x9d, 0x6f, 0x16, 0xb8, 0xf9, 0x01, 0xf4, 0xeb, 0xb3, 0x91, 0x97, 0x31, 0x4a, 0xce, 0x47, 0x0e, 0x62, 0x84, 0x7c, 0x10, 0x79, 0xc5, 0x1e, 0x45, 0x2b, 0xf4, 0x1d, 0x7d, 0xe4, 0x58, 0x9f, 0x48, 0xcf, 0xfe, 0x5a, 0x8d, 0xda, 0x97, 0x98, 0x99, 0xce, 0x8b, 0xd9, 0x71, 0x04, 0xe9, 0x3f, 0x10, 0xa3, 0xea, 0x2c, 0xcf, 0x6e, 0x57, 0xf7, 0xf3, 0x08, 0xb8, 0xfa, 0xd2, 0xf8, 0x58, 0xaa, 0xdf, 0x3c, 0x71, 0x34, 0x15, 0xb1, 0x46, 0xd1, 0xab, 0x28, 0x6b, 0x24, 0x35, 0x86, 0x56, 0x49, 0xaf, 0x26, 0x0b, 0x2b, 0xaf, 0x1e, 0x4e, 0x8d, 0x21, 0x91, 0xcf, 0x51, 0x8c, 0xa1, 0xfb, 0xec, 0xa9, 0x31, 0xf4, 0xf9, 0xbc, 0x42, 0x92, 0x5f, 0xe4, 0x31, 0x54, 0xa8, 0x8f, 0xa1, 0xc2, 0x09, 0x63, 0xa8, 0x47, 0x8c, 0xa1, 0x1e, 0x61, 0xef, 0xb9, 0x92, 0x5c, 0x6f, 0x1d, 0x76, 0xce, 0xee, 0x23, 0x7f, 0x25, 0x4b, 0x53, 0x9e, 0x95, 0xe4, 0x3b, 0xa0, 0x8d, 0xa1, 0xb6, 0x11, 0x0a, 0x55, 0x69, 0xbc, 0xdb, 0xb1, 0x67, 0xae, 0x1e, 0x42, 0x99, 0x47, 0x40, 0x15, 0x27, 0xe3, 0x3e, 0x58, 0x18, 0xb8, 0xfa, 0x62, 0xe1, 0xbc, 0xab, 0x7b, 0x30, 0x96, 0x76, 0xf1, 0x58, 0x02, 0xa7, 0x97, 0x5f, 0xc1, 0x74, 0xb2, 0xf5, 0xed, 0xca, 0x53, 0xf3, 0x30, 0x96, 0x2a, 0x43, 0xf3, 0xfc, 0xf3, 0x86, 0x5e, 0x8e, 0x56, 0x25, 0xd8, 0xa7, 0xb4, 0xd0, 0x02, 0xf7, 0x34, 0x5f, 0x3d, 0x32, 0xf8, 0x9a, 0x8f, 0x3d, 0x6f, 0x36, 0x5f, 0xdd, 0xc3, 0xde, 0x38, 0x42, 0xf3, 0x0a, 0x9b, 0xaf, 0xbe, 0x78, 0xf5, 0x59, 0xa5, 0xda, 0x81, 0x7b, 0xec, 0x99, 0xab, 0x2f, 0x7e, 0xe1, 0xbe, 0xab, 0xaf, 0xc4, 0x8d, 0xd1, 0xaa, 0xb8, 0x69, 0xda, 0x33, 0x57, 0x5f, 0xd9, 0x49, 0xb1, 0x0d, 0x2f, 0x5c, 0xb8, 0x3a, 0xd8, 0x3c, 0x8c, 0xf2, 0x9e, 0x45, 0x9a, 0xdd, 0xc2, 0xa3, 0x8f, 0xf3, 0xbd, 0xbe, 0x7f, 0x1d, 0x78, 0xf3, 0xc2, 0xd5, 0xa3, 0x62, 0xfc, 0x54, 0x9a, 0x33, 0xc4, 0xf8, 0xe9, 0x8b, 0xcd, 0xdb, 0x3b, 0xaf, 0xd5, 0x5a, 0x58, 0x77, 0xf5, 0xc5, 0x6d, 0xaf, 0xc9, 0xb3, 0xae, 0x3e, 0x5b, 0x18, 0xbd, 0xba, 0x5b, 0xc1, 0xdc, 0x78, 0xf5, 0x59, 0xe4, 0x5d, 0xb5, 0x96, 0x2a, 0x32, 0xa3, 0xcf, 0x5c, 0x3d, 0x7c, 0xef, 0x2b, 0x91, 0x9e, 0xc8, 0x2b, 0xe1, 0x9e, 0x17, 0x1f, 0xc2, 0x08, 0xaa, 0x46, 0xba, 0x17, 0x8b, 0x66, 0x5d, 0xdd, 0x83, 0x3e, 0xe2, 0xe9, 0xd7, 0xe7, 0x99, 0x21, 0x61, 0x09, 0x34, 0xb4, 0xf2, 0x86, 0x71, 0xf4, 0x7d, 0x7d, 0xff, 0xed, 0xf2, 0x4d, 0x4f, 0xf2, 0x18, 0xd5, 0x6c, 0x37, 0xd8, 0x0f, 0x76, 0xf4, 0xc7, 0x54, 0x8e, 0xfb, 0xfe, 0x71, 0x9f, 0x49, 0xab, 0xa4, 0x17, 0x59, 0xa6, 0xdf, 0xa5, 0x4b, 0x36, 0x4f, 0xb2, 0xcd, 0xad, 0xe8, 0x61, 0x81, 0x76, 0xf3, 0x9e, 0x24, 0xe4, 0xb4, 0x47, 0x00, 0x41, 0xb9, 0x13, 0xb1, 0x0b, 0x2e, 0x5c, 0x3d, 0xde, 0x41, 0x9d, 0xc7, 0x4f, 0x7e, 0x67, 0xcd, 0xc5, 0x13, 0xdf, 0x51, 0xee, 0x93, 0x2b, 0x17, 0xf6, 0xf8, 0x6c, 0x7e, 0x1a, 0xae, 0x91, 0x82, 0x34, 0xf5, 0x95, 0xd1, 0x69, 0xd3, 0xee, 0x0e, 0xaa, 0xc7, 0xfd, 0x34, 0x92, 0xfe, 0x7e, 0x02, 0xd2, 0xf3, 0xd4, 0x97, 0xf9, 0x39, 0xa0, 0x9e, 0x4c, 0x93, 0x83, 0xb4, 0xf3, 0x48, 0x2f, 0x82, 0x1b, 0x11, 0x3b, 0x5b, 0x7c, 0x62, 0xae, 0x26, 0x07, 0x79, 0x06, 0xd8, 0xab, 0x4e, 0xac, 0x9b, 0x4b, 0xd5, 0x65, 0xda, 0xae, 0x96, 0xed, 0x41, 0x94, 0x0d, 0xba, 0x33, 0xea, 0x1b, 0xf3, 0xdd, 0xfe, 0xe8, 0x40, 0x09, 0xfa, 0xac, 0x1f, 0x7d, 0x9e, 0xf7, 0x76, 0x30, 0x76, 0x52, 0xfe, 0x78, 0x2f, 0x3b, 0x9b, 0xaf, 0xbe, 0x14, 0xf9, 0x66, 0x9f, 0x8a, 0xfb, 0xfe, 0xc8, 0x37, 0x77, 0xaa, 0xdc, 0x83, 0xd9, 0x2f, 0xb3, 0x77, 0x92, 0xb6, 0x7a, 0x5e, 0xde, 0x61, 0x1f, 0x3f, 0x3b, 0xb4, 0x0e, 0x23, 0xcb, 0xe3, 0xb5, 0xf8, 0x79, 0x4c, 0x4f, 0xd6, 0xc7, 0xf4, 0xe9, 0x92, 0x80, 0x58, 0xb7, 0xdb, 0xff, 0xfb, 0xa5, 0xa9, 0x31, 0x7d, 0x35, 0x39, 0xee, 0x63, 0xde, 0x69, 0x76, 0x90, 0x2b, 0x5b, 0xf3, 0x52, 0x05, 0x79, 0xa0, 0x58, 0xf7, 0x43, 0xe5, 0x1e, 0xc7, 0x29, 0x9f, 0x45, 0x1b, 0xcf, 0xe7, 0xdd, 0x43, 0xc6, 0xa6, 0xc0, 0x65, 0xf6, 0x9e, 0xe4, 0x42, 0x70, 0x7a, 0xbe, 0x40, 0xac, 0x8f, 0x7b, 0x9c, 0x3f, 0xe5, 0xbd, 0xaa, 0x40, 0xfb, 0x6a, 0xcd, 0xd4, 0x81, 0x75, 0x0d, 0x49, 0x3e, 0x63, 0x76, 0xbf, 0x48, 0x27, 0x2c, 0x90, 0xd0, 0x7a, 0xd1, 0x60, 0x22, 0x9b, 0xad, 0xc8, 0xb4, 0x1d, 0x82, 0xcb, 0xfb, 0x94, 0xe9, 0xe2, 0xac, 0xa4, 0xb1, 0x90, 0xab, 0x8f, 0x2b, 0x96, 0xf1, 0xb7, 0x4b, 0x97, 0xf4, 0x5d, 0x9a, 0x72, 0x4d, 0xe7, 0xdf, 0xa9, 0xc1, 0x0a, 0x18, 0x41, 0xc9, 0x5e, 0xf7, 0x53, 0x71, 0x12, 0x9c, 0x7c, 0xee, 0x9c, 0x00, 0xa6, 0x3f, 0x0f, 0xe5, 0x87, 0xc3, 0x73, 0xc2, 0x64, 0x6a, 0x08, 0x6c, 0x69, 0xa2, 0x7c, 0x84, 0x65, 0x09, 0xcd, 0xd5, 0xcf, 0xc5, 0xb3, 0xc1, 0xf9, 0xfb, 0xe2, 0x66, 0xfc, 0x7a, 0xd8, 0xda, 0x2b, 0x14, 0xcc, 0xf1, 0x60, 0x84, 0x06, 0x43, 0x01, 0xab, 0x87, 0xe4, 0xad, 0x01, 0x5d, 0xb7, 0xd3, 0xcc, 0x27, 0xf9, 0xd2, 0x1e, 0x7b, 0x65, 0x28, 0x60, 0xfb, 0x7c, 0x1e, 0x62, 0x5e, 0x34, 0x2e, 0xc9, 0xd9, 0x87, 0x94, 0x4b, 0x2c, 0x52, 0x18, 0xe3, 0xb8, 0x92, 0xd4, 0x9d, 0x95, 0x8a, 0x54, 0x6a, 0xf0, 0x85, 0xe7, 0x5f, 0xec, 0x23, 0x4f, 0x13, 0xf9, 0x06, 0x57, 0x1d, 0xa7, 0x7e, 0x7c, 0xdd, 0x64, 0x44, 0x69, 0x46, 0x3c, 0x99, 0x5b, 0xf9, 0xc9, 0xfc, 0xe6, 0x61, 0xc4, 0xba, 0xfe, 0xf5, 0xb0, 0xab, 0xa4, 0x8f, 0x8e, 0x07, 0xf6, 0x69, 0x29, 0xc2, 0x64, 0xdc, 0xa7, 0xa5, 0x08, 0x83, 0x67, 0x68, 0x22, 0xcf, 0x60, 0xdb, 0xcd, 0xbf, 0x1e, 0x5c, 0x49, 0x81, 0x9b, 0x85, 0x37, 0x74, 0x43, 0x2a, 0x8b, 0x37, 0xe0, 0x5d, 0xc9, 0x62, 0x98, 0x1b, 0x82, 0x73, 0x82, 0xc2, 0x67, 0x98, 0x01, 0xf3, 0x8d, 0x19, 0x78, 0x28, 0x78, 0xb3, 0x51, 0xbc, 0x4b, 0x78, 0x77, 0xe0, 0x3d, 0xff, 0x54, 0x84, 0x43, 0xc4, 0xa9, 0x81, 0xb9, 0xe0, 0xbe, 0x10, 0xb2, 0xa5, 0x4b, 0xa6, 0x46, 0xcc, 0x44, 0xa7, 0x92, 0x8f, 0x22, 0x07, 0x4d, 0x37, 0x36, 0x75, 0x06, 0x8d, 0xbb, 0xc6, 0x4d, 0xae, 0xa8, 0x37, 0x48, 0x9e, 0x22, 0xc9, 0x95, 0xcd, 0x67, 0xd3, 0x8b, 0x1e, 0x31, 0x24, 0x7c, 0x6b, 0xe7, 0xf6, 0xf7, 0x2c, 0x61, 0xdc, 0xe1, 0xab, 0xe2, 0x99, 0xc0, 0x74, 0x68, 0x4e, 0x88, 0x4c, 0x8c, 0x35, 0x8e, 0x03, 0xc6, 0x57, 0x68, 0x18, 0x0f, 0xc5, 0xfc, 0x78, 0x07, 0x5c, 0x92, 0xe0, 0x0d, 0xf2, 0xf6, 0xae, 0x24, 0x53, 0x33, 0x46, 0x5c, 0xff, 0x4a, 0xca, 0x6a, 0x21, 0x5a, 0xbf, 0x07, 0x12, 0xe8, 0x92, 0xb5, 0x4e, 0x5e, 0x5d, 0x6c, 0xb3, 0x2f, 0x90, 0x2b, 0xdb, 0x0c, 0x55, 0x1f, 0x02, 0xbc, 0x30, 0xf7, 0x5b, 0xdf, 0xc2, 0xe2, 0x56, 0xf2, 0x01, 0x56, 0xa3, 0xdf, 0x3c, 0xd4, 0x4a, 0xc5, 0xfd, 0xc1, 0x26, 0xc9, 0x4f, 0x90, 0xc5, 0xcc, 0x3e, 0xf3, 0x60, 0x2b, 0x95, 0xf6, 0xd7, 0x34, 0x49, 0xbe, 0xc9, 0xfe, 0x40, 0x6c, 0xc3, 0xd6, 0x97, 0x5f, 0xda, 0xb0, 0xac, 0x78, 0xf0, 0x75, 0xcd, 0xc7, 0x26, 0xf2, 0x34, 0x36, 0x3b, 0x51, 0x82, 0xb9, 0x45, 0x06, 0x3f, 0x7c, 0xab, 0xa3, 0xda, 0x1f, 0x79, 0xe1, 0xf5, 0x96, 0xdc, 0x63, 0xcf, 0x91, 0xa7, 0xb4, 0xef, 0xcb, 0x41, 0x32, 0x7e, 0x19, 0xd8, 0x8b, 0x75, 0xef, 0x5d, 0x17, 0xdf, 0x14, 0xed, 0x8e, 0xdb, 0x42, 0x0b, 0x43, 0x4d, 0x90, 0x7d, 0x9b, 0xd0, 0xea, 0x4d, 0xa8, 0x03, 0xf2, 0xc7, 0x95, 0x95, 0x76, 0x22, 0x9f, 0x55, 0x78, 0xea, 0x2e, 0x75, 0x92, 0x83, 0xc7, 0x82, 0x5b, 0xf4, 0x21, 0x4b, 0x74, 0x37, 0xfa, 0x90, 0x09, 0xbf, 0x9e, 0x44, 0x6d, 0xbe, 0x9b, 0x6e, 0x2f, 0x70, 0x93, 0x1c, 0x0a, 0xdb, 0x4c, 0xe8, 0x4d, 0x99, 0xb1, 0xe0, 0xd6, 0x70, 0x28, 0xa0, 0x14, 0xe5, 0xda, 0x0e, 0x48, 0x4b, 0x2c, 0xfb, 0xa5, 0x65, 0x66, 0x29, 0x44, 0xea, 0xf6, 0xb0, 0x22, 0x15, 0x1b, 0x4a, 0x42, 0xff, 0xfc, 0xcb, 0xc1, 0x15, 0x14, 0x70, 0x35, 0xa2, 0xbf, 0x74, 0xec, 0x23, 0xdc, 0x3d, 0x7c, 0x6f, 0xe8, 0x89, 0xf6, 0xc4, 0xdf, 0x50, 0xb2, 0x30, 0x42, 0x6d, 0x1c, 0xff, 0xf2, 0x2b, 0x6c, 0x37, 0x39, 0xe6, 0xbf, 0x36, 0xe2, 0xa0, 0xb1, 0x35, 0xcd, 0x02, 0xd0, 0x8c, 0xe9, 0x89, 0x3c, 0xc8, 0xb3, 0x96, 0x04, 0xdb, 0xec, 0x14, 0x30, 0xd5, 0xb9, 0x9d, 0x77, 0x39, 0xad, 0xca, 0xc2, 0x1b, 0xcf, 0x2f, 0x61, 0xcf, 0x0f, 0x89, 0x72, 0xa1, 0xff, 0x14, 0x98, 0x1d, 0xa2, 0xe9, 0xbc, 0x6e, 0xe0, 0x93, 0xd8, 0xb7, 0xca, 0xf5, 0x29, 0x79, 0x57, 0x7d, 0x3c, 0x2f, 0xdd, 0x32, 0x1a, 0x12, 0x11, 0xef, 0xb6, 0x6a, 0x27, 0xfb, 0xe9, 0xfe, 0x70, 0x85, 0xaf, 0x48, 0x48, 0xaa, 0x2e, 0xf6, 0xe7, 0x07, 0xe9, 0x35, 0x50, 0xe2, 0x25, 0x3f, 0x7b, 0xca, 0x86, 0x7c, 0x5b, 0x06, 0x49, 0xb7, 0x42, 0xac, 0x58, 0x9b, 0x1c, 0x8d, 0xac, 0xf1, 0x5e, 0xf5, 0xbe, 0xe4, 0xc0, 0xd3, 0x74, 0xd6, 0x0a, 0x12, 0x7a, 0x82, 0x1e, 0xd7, 0x4c, 0xe3, 0x7d, 0xc2, 0xcb, 0x6c, 0xae, 0x37, 0x42, 0xb6, 0xb9, 0x95, 0x54, 0x30, 0x17, 0x70, 0xcd, 0x0d, 0x92, 0x3c, 0x37, 0x40, 0x76, 0xb9, 0x91, 0xd7, 0x88, 0xbd, 0xac, 0x35, 0x90, 0xaf, 0x38, 0x57, 0xff, 0xe5, 0xf1, 0x1f, 0x19, 0xab, 0x39, 0x2d, 0xd2, 0xd9, 0x90, 0x8e, 0x75, 0x61, 0x0a, 0x90, 0x6e, 0xba, 0xa0, 0xaa, 0x53, 0xd2, 0xf4, 0xe1, 0xdf, 0xb1, 0x14, 0xa4, 0x5a, 0xcb, 0x27, 0x79, 0xb3, 0xc5, 0x09, 0xa0, 0x12, 0x2e, 0x03, 0x2e, 0x3e, 0x8f, 0xce, 0x25, 0x6c, 0xbc, 0xf6, 0xab, 0xe2, 0xf4, 0x76, 0x6d, 0x87, 0x8e, 0xf7, 0x58, 0x65, 0xb1, 0x6a, 0x31, 0x1f, 0x61, 0x85, 0x93, 0x3b, 0x88, 0x3d, 0x41, 0x1a, 0x65, 0xd9, 0x6a, 0x12, 0xeb, 0x7e, 0xec, 0x35, 0x80, 0xd6, 0x2d, 0x21, 0xa3, 0x65, 0xdc, 0xba, 0xda, 0xa8, 0xff, 0x93, 0xc2, 0x52, 0xb9, 0xd4, 0x24, 0x2d, 0xd5, 0xde, 0x0c, 0x96, 0x8c, 0x47, 0x32, 0x9e, 0xc8, 0xd8, 0x61, 0xb8, 0xd7, 0x50, 0x6b, 0x68, 0x33, 0xc4, 0x0d, 0xe5, 0x06, 0xa7, 0xb4, 0x49, 0xda, 0x2e, 0xd5, 0x4a, 0x1d, 0xd2, 0x13, 0xd2, 0x53, 0x86, 0xbc, 0x8c, 0xef, 0x67, 0xbc, 0x9a, 0xf1, 0x92, 0x51, 0xca, 0x38, 0x9d, 0x71, 0x34, 0xe3, 0x64, 0xc6, 0xaa, 0x8c, 0x78, 0x46, 0x8b, 0x61, 0xa3, 0xe1, 0xfb, 0x86, 0xe3, 0x86, 0x01, 0x43, 0xd2, 0xb0, 0xd3, 0xf0, 0x86, 0xe1, 0x45, 0xc3, 0xc7, 0x86, 0x33, 0x86, 0x0f, 0xa4, 0x6c, 0xc9, 0x86, 0xfc, 0x9d, 0xb8, 0x8a, 0xa5, 0xa7, 0xa5, 0xbd, 0xd2, 0x61, 0xe9, 0x25, 0x23, 0xfd, 0xff, 0xca, 0x3f, 0xe9, 0xb4, 0x74, 0x2d, 0xc3, 0x92, 0xe1, 0xcc, 0x28, 0xce, 0xa8, 0x9b, 0xc1, 0x3b, 0xf3, 0xb9, 0x0a, 0x49, 0x1f, 0xc8, 0x07, 0x80, 0xaa, 0x29, 0xb7, 0x37, 0x52, 0x2e, 0xeb, 0xd6, 0x49, 0x6f, 0xf3, 0x6a, 0xf5, 0x8c, 0x1a, 0x71, 0x3e, 0x4d, 0x2e, 0xcf, 0xb6, 0x9f, 0x28, 0x08, 0x3d, 0x2c, 0x52, 0xe5, 0x22, 0x95, 0x59, 0xa4, 0xda, 0x27, 0xbe, 0xb7, 0xe1, 0xe9, 0x59, 0x11, 0x63, 0xbd, 0x9d, 0x7d, 0x50, 0x72, 0xcc, 0xf7, 0x44, 0x4c, 0x01, 0x9e, 0xb6, 0x8b, 0x98, 0x1c, 0xc4, 0x14, 0x88, 0x98, 0xde, 0x39, 0xcb, 0x31, 0xaf, 0xf8, 0xf0, 0xb4, 0x46, 0xc4, 0xb8, 0x35, 0x6d, 0x74, 0x25, 0x4f, 0x84, 0xfb, 0x11, 0xbe, 0x44, 0x84, 0x17, 0x8a, 0x70, 0x3f, 0xaf, 0x1a, 0x22, 0xac, 0x4e, 0xc4, 0x16, 0xe1, 0x29, 0x2c, 0x62, 0x67, 0x89, 0xd8, 0x22, 0x65, 0x58, 0x84, 0x7b, 0x10, 0xee, 0x11, 0xe1, 0x1e, 0x11, 0xee, 0x51, 0x0e, 0x53, 0x0e, 0x41, 0x5a, 0x91, 0xf2, 0xa4, 0x1c, 0xf5, 0x7f, 0xe0, 0x9e, 0x6d, 0xce, 0xe1, 0x33, 0x83, 0x45, 0x1a, 0x2f, 0xf8, 0xbd, 0xdd, 0xe2, 0xc9, 0xa7, 0x4c, 0xbf, 0x6d, 0x39, 0x4d, 0xa2, 0x69, 0x08, 0x39, 0x2f, 0x42, 0x66, 0x0b, 0x3e, 0x71, 0x9a, 0xd2, 0x27, 0xde, 0xee, 0xe4, 0x15, 0x35, 0xc4, 0x0d, 0x8a, 0xb7, 0x39, 0xca, 0x45, 0xe4, 0xca, 0xef, 0x03, 0xc8, 0xf5, 0x2a, 0xdb, 0x10, 0x23, 0x57, 0x49, 0xcf, 0x35, 0x13, 0xef, 0x0b, 0xc5, 0x93, 0x51, 0x94, 0x6e, 0x66, 0xdf, 0x02, 0x48, 0xf7, 0x1f, 0xb8, 0x6f, 0x41, 0xba, 0x0c, 0x3d, 0xdd, 0x24, 0x85, 0xbd, 0xcd, 0xf1, 0x93, 0x49, 0x79, 0x52, 0xdc, 0x49, 0xd9, 0x29, 0xee, 0x92, 0xb2, 0x45, 0xdc, 0xcd, 0x7a, 0xe9, 0x59, 0x4a, 0x52, 0x9c, 0x6e, 0x43, 0x86, 0x7a, 0x62, 0xef, 0xa4, 0xb7, 0xb2, 0xfe, 0x8f, 0xe4, 0x56, 0xaf, 0x89, 0xa7, 0x72, 0x21, 0x99, 0xdc, 0xaa, 0xe7, 0x5a, 0x0a, 0x6e, 0xf2, 0x98, 0x78, 0x2a, 0x53, 0x48, 0x8d, 0x46, 0x85, 0x7f, 0x45, 0xa4, 0xfd, 0x44, 0xa4, 0xb5, 0x12, 0xeb, 0xcc, 0xf0, 0x93, 0xb0, 0xec, 0x11, 0xbe, 0x4e, 0x6f, 0xfd, 0xea, 0x80, 0x52, 0xa7, 0xa5, 0x43, 0xac, 0x91, 0x63, 0x69, 0x04, 0x5f, 0x5c, 0x15, 0x4f, 0x6f, 0xeb, 0xe9, 0xf0, 0xd5, 0xbd, 0x03, 0x8a, 0x73, 0x2c, 0x9d, 0x59, 0xc4, 0x0e, 0x20, 0xdd, 0x7f, 0x88, 0xa7, 0x17, 0xf5, 0x74, 0x19, 0x9c, 0x2e, 0x65, 0x79, 0xcb, 0x2b, 0xa2, 0xc0, 0x80, 0xcc, 0xd6, 0xd7, 0xc0, 0xc0, 0x3b, 0xb8, 0x3f, 0x02, 0x0c, 0x64, 0x26, 0xcc, 0x02, 0x42, 0x87, 0xe2, 0x16, 0xf7, 0x19, 0x0a, 0x5d, 0x7b, 0xd2, 0xab, 0xf5, 0xa0, 0x26, 0xa4, 0xb7, 0x2a, 0x71, 0xa4, 0xfe, 0x50, 0x51, 0x90, 0xd6, 0x98, 0xb0, 0x88, 0x34, 0xac, 0x69, 0x4b, 0x9f, 0x8c, 0x8a, 0xe7, 0x5b, 0x90, 0xbe, 0x4d, 0xf4, 0x2b, 0x59, 0x29, 0x17, 0x21, 0xd3, 0xd1, 0xab, 0x64, 0x60, 0xa8, 0x48, 0x84, 0x3a, 0x14, 0xa7, 0xe6, 0xe5, 0x46, 0x99, 0xde, 0xa6, 0xf6, 0xef, 0x26, 0x87, 0x66, 0x29, 0x2d, 0x28, 0x81, 0x5d, 0x4e, 0x22, 0xad, 0x83, 0xe9, 0x60, 0x87, 0x41, 0x5e, 0xa0, 0xaf, 0x40, 0x0e, 0xca, 0x62, 0xb5, 0xf8, 0xea, 0x90, 0x98, 0x79, 0xa4, 0xd0, 0x36, 0x31, 0x67, 0x18, 0x75, 0x1d, 0x01, 0xde, 0x7b, 0x7c, 0x52, 0xfc, 0xfe, 0x28, 0xfd, 0x4c, 0x23, 0x8d, 0x7e, 0x92, 0xdf, 0x39, 0x41, 0x87, 0x92, 0xcf, 0x52, 0x9a, 0xa8, 0x09, 0x39, 0xae, 0x6f, 0x88, 0x39, 0x31, 0x3b, 0x78, 0x8e, 0x06, 0xd2, 0x74, 0x6b, 0xb2, 0x26, 0xe8, 0x49, 0xa6, 0xe9, 0xdc, 0x4c, 0xf4, 0x7f, 0x9e, 0x3a, 0x2b, 0xcc, 0x2b, 0x41, 0x86, 0x9c, 0x64, 0x36, 0xa0, 0x0f, 0x67, 0x0b, 0x8d, 0xae, 0x49, 0x1d, 0xa1, 0x01, 0xe6, 0x6f, 0xfa, 0xf9, 0xf9, 0x79, 0x43, 0xf8, 0x65, 0xde, 0xe7, 0xea, 0xa0, 0x5c, 0x17, 0x99, 0xda, 0x29, 0x67, 0x26, 0x99, 0xcc, 0x12, 0xeb, 0xd1, 0xfb, 0xca, 0xbf, 0x7d, 0x55, 0x68, 0x57, 0x59, 0x31, 0x33, 0x95, 0xff, 0xad, 0xca, 0xcf, 0x71, 0x23, 0x42, 0xd5, 0xb1, 0x54, 0x86, 0x84, 0x85, 0x35, 0xae, 0xe2, 0x56, 0x29, 0x80, 0xbe, 0x9a, 0x25, 0xb4, 0xaf, 0x8c, 0x52, 0xe0, 0x13, 0x3d, 0x45, 0xf8, 0x60, 0x3c, 0x0b, 0xb9, 0x67, 0x23, 0xf6, 0x43, 0xc5, 0x1c, 0x7e, 0x39, 0x8e, 0xb8, 0xab, 0x6a, 0x31, 0xb8, 0x6d, 0x3f, 0xb8, 0x47, 0x5f, 0x68, 0xcb, 0x6b, 0xfd, 0xe2, 0xb4, 0x63, 0xbb, 0x39, 0xdc, 0x25, 0x07, 0xfd, 0x66, 0x4b, 0xd0, 0xa0, 0x2e, 0xb1, 0x69, 0xeb, 0x75, 0x7b, 0x6b, 0x96, 0x1a, 0x3f, 0xac, 0x51, 0xa4, 0x73, 0x35, 0xfd, 0xc1, 0x66, 0xe3, 0x16, 0x3e, 0xcb, 0x3b, 0xa0, 0xed, 0x03, 0x33, 0xef, 0xe7, 0x0f, 0x94, 0x86, 0x7e, 0xfa, 0x5a, 0xb3, 0xab, 0x24, 0x58, 0x56, 0xf9, 0xb3, 0x5f, 0x36, 0xcb, 0x9a, 0x77, 0xe0, 0xd0, 0x0f, 0xbd, 0xb7, 0x68, 0xa7, 0x36, 0xb1, 0x47, 0x47, 0x4d, 0xaf, 0xae, 0xfc, 0x63, 0xd6, 0x7e, 0x4d, 0xd9, 0x59, 0xb2, 0x7e, 0x31, 0xfb, 0x0e, 0x62, 0x5f, 0xda, 0xf2, 0x4c, 0x63, 0xb5, 0xd8, 0x49, 0xbd, 0x74, 0x77, 0x33, 0xe5, 0xa9, 0x97, 0xf1, 0x9b, 0xaf, 0x5e, 0x29, 0x84, 0x44, 0x7b, 0x33, 0x8b, 0xab, 0x36, 0xd2, 0xd7, 0x7a, 0x84, 0xbf, 0x29, 0x47, 0x4d, 0x49, 0xa0, 0x34, 0xc8, 0x3c, 0xf0, 0xa7, 0xe8, 0xce, 0x39, 0xaf, 0xd3, 0x9d, 0x4b, 0x3f, 0x29, 0x2a, 0x6d, 0xb7, 0x56, 0x83, 0xdb, 0x4b, 0x91, 0x35, 0x6a, 0xdc, 0x9b, 0xda, 0x4f, 0xd7, 0x75, 0x27, 0xc7, 0x3d, 0x4b, 0x69, 0x7a, 0x80, 0x63, 0x75, 0x64, 0x5b, 0x0b, 0x7c, 0xd3, 0x6e, 0x3d, 0xda, 0xb5, 0x3d, 0xd9, 0x76, 0x71, 0xa0, 0x9b, 0xb5, 0x63, 0x26, 0xd6, 0x36, 0x6c, 0xd1, 0x7d, 0x45, 0xa5, 0x74, 0x07, 0x3f, 0xd0, 0xc2, 0x58, 0x17, 0x95, 0xed, 0xdf, 0x64, 0xb3, 0xae, 0x8d, 0x1f, 0x1f, 0xd3, 0xc5, 0x5f, 0x1c, 0x6a, 0x25, 0x1b, 0xae, 0x7c, 0x5c, 0x05, 0xb8, 0xa6, 0xb3, 0x77, 0x5c, 0x4d, 0x03, 0x1f, 0x7c, 0xa0, 0x38, 0x21, 0x2c, 0xf8, 0x21, 0x39, 0x82, 0x23, 0xc8, 0x21, 0x22, 0xfc, 0xe6, 0x9a, 0x91, 0x2a, 0x07, 0x97, 0x95, 0x4f, 0x86, 0xda, 0x7a, 0x0f, 0xe6, 0xe6, 0x5c, 0xe4, 0x66, 0xda, 0xbe, 0x82, 0x24, 0xcc, 0xd5, 0x79, 0x48, 0x6d, 0xb3, 0x07, 0x40, 0xfd, 0x77, 0x68, 0xd6, 0xa0, 0xc2, 0x9a, 0xae, 0x20, 0xa5, 0x0f, 0x2b, 0xf8, 0x9a, 0x6c, 0xdf, 0xb4, 0xfe, 0x15, 0x42, 0xc3, 0x7d, 0xa6, 0x76, 0xa2, 0x4f, 0xeb, 0x12, 0xa1, 0x6f, 0x31, 0xea, 0x0c, 0x78, 0xa5, 0xc8, 0xca, 0x9b, 0x68, 0xba, 0x97, 0x8c, 0x9d, 0x87, 0xf3, 0x07, 0x76, 0x8b, 0xef, 0x18, 0xd3, 0x73, 0x77, 0x26, 0xef, 0x10, 0x27, 0xd9, 0xc8, 0xf3, 0x35, 0x7d, 0x73, 0xcc, 0xf0, 0x5c, 0x4f, 0x19, 0x97, 0x1d, 0x97, 0x03, 0x97, 0x13, 0x35, 0x71, 0x69, 0xbb, 0x4c, 0xec, 0xc3, 0x00, 0x75, 0x75, 0x00, 0x72, 0x8f, 0x5e, 0x4f, 0x17, 0x62, 0xad, 0x3a, 0x56, 0x6c, 0xe0, 0x6f, 0x8d, 0x5b, 0xee, 0x01, 0xff, 0x51, 0x00, 0x78, 0x4d, 0x5b, 0xb9, 0x9e, 0x41, 0x9a, 0x8e, 0xd4, 0x32, 0xfb, 0xea, 0xbb, 0xba, 0xde, 0x19, 0xe0, 0x73, 0xcd, 0x84, 0xf5, 0x43, 0x41, 0x4a, 0xc7, 0x95, 0xfb, 0x0a, 0xef, 0x7f, 0xe3, 0xba, 0x2c, 0x6c, 0x1d, 0xdc, 0x42, 0x33, 0xd3, 0x01, 0x3e, 0xce, 0xd4, 0xcf, 0xe7, 0x19, 0xe5, 0x0b, 0x29, 0x90, 0x5b, 0xc0, 0x8a, 0x27, 0x63, 0xff, 0x3d, 0xcd, 0x66, 0x9f, 0x95, 0xb1, 0xd2, 0x9a, 0xc5, 0xb9, 0x7e, 0xf2, 0x04, 0xef, 0xe7, 0x85, 0x9a, 0xd5, 0xf3, 0xb8, 0x3e, 0xc0, 0x25, 0x76, 0x9d, 0x35, 0x1d, 0xfd, 0x9a, 0x0b, 0xea, 0x79, 0xb1, 0xae, 0xf2, 0xa9, 0x67, 0x1a, 0xf9, 0xeb, 0xbd, 0x93, 0xb5, 0x93, 0x7a, 0x58, 0xdf, 0xed, 0x5f, 0x7a, 0x21, 0x65, 0x8e, 0x08, 0x6d, 0x37, 0x97, 0x0c, 0xf9, 0x12, 0xf8, 0x5c, 0x2a, 0x34, 0xfd, 0xb9, 0x4f, 0xba, 0x34, 0x6c, 0xeb, 0xdf, 0xb2, 0x2e, 0xb9, 0x38, 0x11, 0x29, 0x65, 0x51, 0xf1, 0x9b, 0x43, 0xda, 0x77, 0xf8, 0xc6, 0xa7, 0x7f, 0x73, 0x89, 0x3d, 0xd9, 0xb0, 0x67, 0x16, 0xd6, 0x2c, 0x10, 0x7a, 0xad, 0x9a, 0xce, 0xb9, 0x9e, 0x8e, 0xd7, 0xfe, 0x4b, 0x02, 0xb1, 0x87, 0xf9, 0xbc, 0x37, 0x71, 0x4a, 0xea, 0x28, 0xef, 0xbd, 0x1e, 0x2d, 0xad, 0xdb, 0x2e, 0xde, 0x2e, 0x0b, 0xef, 0x73, 0x56, 0x41, 0x3d, 0xa3, 0x13, 0xf4, 0xe7, 0xcf, 0x5f, 0xa7, 0x3f, 0x7f, 0x3e, 0xe1, 0x96, 0x79, 0x2d, 0x6a, 0x96, 0x7a, 0x5e, 0xe8, 0xcf, 0x7f, 0xf0, 0x87, 0xf4, 0xe7, 0x7d, 0x53, 0xc4, 0xb8, 0x39, 0x3e, 0xa6, 0x1f, 0x20, 0x74, 0x2c, 0xb4, 0xf3, 0x95, 0x3e, 0x23, 0xfe, 0xad, 0xf2, 0x7c, 0xed, 0x8c, 0x8e, 0xab, 0x5b, 0x9d, 0xec, 0x2b, 0xc3, 0xa2, 0x69, 0xe0, 0x3b, 0xd9, 0xa2, 0x96, 0x52, 0x6d, 0x2a, 0x74, 0xf1, 0xf5, 0x93, 0xc8, 0x58, 0x1f, 0x5f, 0xd3, 0xc2, 0xd7, 0x35, 0xf2, 0x81, 0x3b, 0x5f, 0x43, 0x0a, 0x7f, 0x0b, 0x44, 0x0b, 0x08, 0x6f, 0x4c, 0x2e, 0x81, 0x79, 0x49, 0xc7, 0xfc, 0x1f, 0xd1, 0xe2, 0x07, 0xe6, 0x77, 0x8c, 0x61, 0x3e, 0x75, 0x12, 0xd7, 0xcd, 0x31, 0xbf, 0x63, 0x1c, 0xf3, 0xc5, 0x81, 0xd8, 0x46, 0xb6, 0xc7, 0xc1, 0x17, 0x48, 0x37, 0x4f, 0xc3, 0xfc, 0x36, 0xf1, 0x76, 0x59, 0xd3, 0x77, 0xf4, 0x65, 0xfd, 0xb9, 0x56, 0x1b, 0xab, 0x48, 0xce, 0x48, 0xf7, 0x4b, 0x79, 0xbd, 0x8f, 0x6d, 0xc1, 0x57, 0x83, 0x8a, 0x38, 0xb2, 0x84, 0x3f, 0xed, 0x37, 0xd2, 0xfd, 0x69, 0x57, 0x9d, 0xc5, 0x14, 0x9c, 0x83, 0xb9, 0x73, 0x0b, 0xef, 0x38, 0xf8, 0x82, 0x76, 0xf3, 0xc1, 0xa4, 0x1c, 0x4c, 0x64, 0xb3, 0xc7, 0x93, 0xc3, 0x7b, 0xa3, 0xfd, 0x66, 0x8a, 0x13, 0xf5, 0x89, 0xb7, 0x7d, 0xe9, 0xe7, 0xba, 0x8b, 0xd9, 0x36, 0x77, 0xdc, 0x47, 0xb5, 0xba, 0x91, 0x69, 0x32, 0xb8, 0x83, 0x23, 0xf6, 0x4e, 0xa4, 0xdd, 0xf5, 0xd6, 0xe1, 0x2f, 0xd5, 0x08, 0x3f, 0x02, 0xc6, 0x9a, 0xf7, 0xc9, 0x68, 0xdf, 0xa4, 0xe5, 0xd7, 0x9e, 0x7b, 0x7b, 0x97, 0x99, 0x42, 0x81, 0xf9, 0x23, 0x64, 0x9e, 0xf7, 0x7b, 0x33, 0x39, 0x37, 0xdd, 0xc1, 0x27, 0x27, 0x1a, 0x3d, 0xf8, 0xf5, 0x3c, 0xfc, 0xa5, 0xf9, 0x64, 0x36, 0x31, 0xb3, 0x64, 0x66, 0x5e, 0xff, 0xf0, 0x93, 0xf1, 0x93, 0xf2, 0xd6, 0xdb, 0xa3, 0xf8, 0x3a, 0xc6, 0x7e, 0x09, 0x1c, 0x1a, 0x14, 0xbb, 0x9c, 0x6d, 0x66, 0x8a, 0x6e, 0xd3, 0xf8, 0x01, 0xfb, 0x94, 0x83, 0x49, 0x67, 0xd0, 0x0e, 0x29, 0xd3, 0xbe, 0xcd, 0xde, 0xf0, 0xa5, 0x95, 0x42, 0x37, 0x55, 0x94, 0x24, 0xfb, 0x6c, 0xd4, 0x90, 0xbc, 0x3d, 0x69, 0xa3, 0xb8, 0x43, 0xd3, 0x56, 0x4d, 0xe9, 0xae, 0x56, 0x9e, 0x85, 0x50, 0xb1, 0x41, 0xe3, 0x7b, 0xd9, 0xdf, 0xb2, 0xbd, 0x6f, 0x46, 0x84, 0xcc, 0x77, 0x44, 0xb2, 0x8c, 0x69, 0x1e, 0xb7, 0x0f, 0xc8, 0x53, 0xc4, 0x49, 0x32, 0x9a, 0xcd, 0x41, 0x99, 0x13, 0xd4, 0xc6, 0xc5, 0x18, 0x5c, 0x99, 0x65, 0x74, 0x58, 0x6e, 0xc4, 0xe2, 0x44, 0x0f, 0xf0, 0x3a, 0x04, 0x7e, 0x1b, 0xc5, 0x92, 0x33, 0x00, 0x81, 0xbf, 0x9c, 0x72, 0xd9, 0xce, 0xd2, 0x1e, 0xd5, 0xf0, 0x98, 0x76, 0xe2, 0x7c, 0x51, 0xcd, 0x79, 0x30, 0x3b, 0xdb, 0x67, 0xd4, 0xe2, 0xfb, 0x85, 0x5c, 0x57, 0xd7, 0xc6, 0x5f, 0x8f, 0x72, 0x2d, 0x83, 0x67, 0x79, 0xc7, 0xf7, 0x0e, 0x01, 0xa5, 0xf0, 0xeb, 0xfe, 0xf0, 0x0c, 0x60, 0xc7, 0x2b, 0xbe, 0xa4, 0x02, 0x50, 0x7f, 0x1b, 0x5b, 0x70, 0x80, 0x8b, 0xca, 0xe1, 0x59, 0xca, 0xa9, 0x9d, 0x72, 0x65, 0x75, 0x34, 0x08, 0x4f, 0x0c, 0x76, 0x71, 0x1a, 0x53, 0x16, 0xfb, 0x43, 0x4f, 0xac, 0x72, 0x04, 0x42, 0xbb, 0x41, 0x33, 0x77, 0x43, 0xa6, 0xde, 0x1a, 0xda, 0x3d, 0xf9, 0xfc, 0x8c, 0x00, 0xa8, 0xb2, 0xd2, 0xfe, 0xed, 0x3d, 0x08, 0x8d, 0x97, 0x73, 0xca, 0x4f, 0x86, 0x45, 0xca, 0x28, 0x28, 0xb4, 0x55, 0x0e, 0xbe, 0xf9, 0xf2, 0x9b, 0x87, 0x87, 0xfa, 0xf8, 0x44, 0xf0, 0xc7, 0x5e, 0x96, 0x03, 0xb7, 0x37, 0x66, 0x51, 0x16, 0x69, 0x79, 0xcc, 0x68, 0xe0, 0x3c, 0xe4, 0x06, 0x39, 0xc9, 0xf9, 0x28, 0x05, 0x80, 0x31, 0x37, 0xb4, 0x85, 0xa1, 0x46, 0xdb, 0xe0, 0xdb, 0x58, 0x12, 0x1c, 0xbe, 0x95, 0xb5, 0x82, 0x1f, 0x7b, 0xdd, 0xb9, 0x51, 0xce, 0xd2, 0x4e, 0x13, 0x07, 0xfe, 0xd8, 0xce, 0xc2, 0xea, 0xf0, 0xa6, 0x4e, 0x6c, 0xa1, 0xde, 0x31, 0xbf, 0x28, 0x52, 0xe8, 0x51, 0x9e, 0x37, 0x12, 0xf1, 0xf4, 0x99, 0xc3, 0x11, 0x79, 0x6c, 0xc0, 0xde, 0x38, 0xf9, 0xbc, 0xae, 0x71, 0x30, 0x73, 0xe2, 0xbc, 0x22, 0xd7, 0x3c, 0x3a, 0xc0, 0xab, 0x5a, 0x02, 0x86, 0x22, 0xfb, 0xf2, 0x4f, 0x4b, 0xe7, 0xa8, 0x79, 0x6c, 0x40, 0x1f, 0x71, 0xe6, 0xba, 0x6d, 0xf5, 0x9b, 0xe5, 0xa8, 0x62, 0x9c, 0x77, 0xe5, 0x9a, 0x5f, 0x8c, 0x9e, 0xc3, 0x90, 0x50, 0x8d, 0xe3, 0x23, 0x03, 0x6d, 0x2b, 0xf3, 0x89, 0x5e, 0xce, 0x85, 0xf3, 0xaf, 0x5c, 0xeb, 0x57, 0xfc, 0x42, 0x3f, 0xf0, 0x31, 0x61, 0x45, 0x98, 0xa3, 0xf9, 0x9f, 0x45, 0xc8, 0xad, 0xe8, 0xe5, 0xc5, 0xf5, 0x9b, 0x15, 0x3e, 0x57, 0xd4, 0xcc, 0xde, 0x15, 0x3d, 0x81, 0x59, 0xe8, 0x39, 0xb3, 0x6a, 0xc8, 0xa2, 0x7b, 0x21, 0x39, 0x3c, 0xe6, 0xc3, 0x69, 0xcc, 0x3e, 0x67, 0x6e, 0x85, 0xbb, 0x95, 0xca, 0x91, 0x7f, 0x00, 0xf9, 0x87, 0x9d, 0x20, 0x4e, 0x68, 0xab, 0x5a, 0x94, 0x59, 0x8f, 0x11, 0xba, 0xd0, 0xe3, 0xa5, 0x45, 0x2e, 0x2f, 0x2d, 0x76, 0x7b, 0x49, 0x29, 0x2a, 0x67, 0xfb, 0xb5, 0xb9, 0xb5, 0x54, 0x3c, 0x77, 0x01, 0x95, 0xb0, 0x0d, 0xa9, 0x8f, 0x4f, 0x2b, 0xbd, 0x65, 0xa8, 0x0f, 0xd4, 0xdf, 0xcc, 0xa7, 0xe3, 0xca, 0xf7, 0xbe, 0xf0, 0x72, 0x2b, 0xd1, 0x56, 0x4d, 0xff, 0x1b, 0x33, 0x43, 0xd6, 0xde, 0x0d, 0x71, 0x0b, 0xa8, 0xa4, 0x25, 0x32, 0xd0, 0xd0, 0xd5, 0xdf, 0xd5, 0x54, 0xec, 0xcd, 0xc4, 0xe8, 0x9f, 0x57, 0xb7, 0x45, 0xb7, 0x82, 0x23, 0xa9, 0xd8, 0xdf, 0x4a, 0x25, 0x43, 0xe7, 0xc8, 0x3c, 0x1b, 0xa3, 0x71, 0x36, 0x7b, 0xa6, 0xf1, 0x52, 0xc9, 0xe0, 0x4a, 0xb2, 0xcc, 0x0e, 0xe0, 0xaa, 0xa4, 0x6c, 0x45, 0x9e, 0x8b, 0x37, 0xf2, 0x23, 0x9d, 0xdf, 0x3f, 0x39, 0xf2, 0x72, 0xe5, 0xef, 0x6d, 0xf4, 0xc2, 0x40, 0x6b, 0x96, 0x7f, 0xc1, 0xd0, 0x87, 0xe4, 0xc7, 0x57, 0x16, 0xb9, 0x41, 0xb3, 0xe3, 0xf4, 0x15, 0x52, 0x56, 0x3f, 0xca, 0x44, 0xfb, 0x3d, 0x11, 0x5d, 0x0f, 0x9a, 0x7b, 0xc8, 0x5e, 0x6d, 0xef, 0x63, 0x7f, 0x49, 0x9a, 0x36, 0x9e, 0x8f, 0x4f, 0xaf, 0x1a, 0xd8, 0x9b, 0x1c, 0x83, 0x68, 0x43, 0xff, 0x86, 0x1b, 0x21, 0x32, 0x7c, 0x1f, 0x25, 0x15, 0x0f, 0x9d, 0x9d, 0x00, 0x51, 0xf1, 0x60, 0xe3, 0x04, 0x88, 0x1a, 0x27, 0x40, 0x74, 0x49, 0x87, 0x08, 0xef, 0x43, 0x47, 0x04, 0x44, 0x9a, 0x6e, 0x35, 0xaf, 0xcf, 0x68, 0x10, 0x65, 0x47, 0x7b, 0x13, 0xd9, 0xf6, 0x30, 0xa0, 0x31, 0x3b, 0x23, 0x8a, 0x49, 0xeb, 0x81, 0xba, 0xd7, 0xea, 0xe9, 0xa2, 0x65, 0xe8, 0xda, 0x5e, 0xc5, 0x88, 0x38, 0xb3, 0x86, 0xe5, 0xd2, 0x5b, 0xe4, 0x7b, 0x35, 0xae, 0x45, 0xc7, 0x22, 0x9f, 0x01, 0x6e, 0xf1, 0x03, 0xdf, 0x95, 0xbf, 0xdf, 0xa9, 0xfe, 0xf4, 0xb5, 0x26, 0x1f, 0xc3, 0xed, 0x98, 0x57, 0xb7, 0x35, 0x05, 0x37, 0x9d, 0xf5, 0x19, 0x81, 0x37, 0x33, 0xa0, 0x14, 0x50, 0xfb, 0x79, 0x65, 0xdc, 0xc2, 0xb6, 0x84, 0x02, 0xe6, 0x5c, 0x7c, 0x6b, 0xa9, 0xfa, 0xfd, 0x16, 0xfa, 0xa7, 0x23, 0xad, 0x66, 0xdf, 0x2d, 0x83, 0x35, 0x5c, 0x9b, 0x14, 0xe6, 0xfc, 0xc0, 0xdc, 0x1e, 0x81, 0x39, 0x75, 0x2d, 0x63, 0x8e, 0x1e, 0xd7, 0x30, 0x47, 0x5b, 0xaf, 0x87, 0xa2, 0x8c, 0xa1, 0xd0, 0x5a, 0x5b, 0xfd, 0xd9, 0x6b, 0x4d, 0x45, 0x0c, 0x85, 0x73, 0x5e, 0xdd, 0x36, 0x1d, 0x8a, 0xa5, 0x3e, 0x13, 0x30, 0x35, 0x0e, 0x83, 0x69, 0xa8, 0x31, 0x0d, 0x86, 0x1c, 0x7c, 0x69, 0x99, 0x77, 0x69, 0x0b, 0xfd, 0xe4, 0x57, 0xad, 0xa6, 0x4f, 0xc1, 0x54, 0x16, 0x30, 0x65, 0x64, 0x4c, 0x3d, 0x7a, 0xd8, 0x31, 0x86, 0x8d, 0x72, 0x8b, 0x86, 0x23, 0xb5, 0x7d, 0xac, 0xff, 0x8e, 0x6a, 0xb6, 0x61, 0x9a, 0xde, 0x3b, 0x7a, 0x6d, 0xb1, 0x43, 0x3b, 0x29, 0xa8, 0xdc, 0x93, 0xb2, 0x94, 0x6a, 0xa5, 0x08, 0x7a, 0x6d, 0x2d, 0x7a, 0x76, 0x3d, 0x7a, 0xf8, 0x42, 0x3e, 0xa1, 0x79, 0xc1, 0x95, 0xab, 0x1d, 0x73, 0x2b, 0xc9, 0x03, 0x6e, 0x93, 0xb5, 0x9e, 0xfc, 0xdc, 0x7f, 0x83, 0x17, 0x4b, 0x89, 0x6b, 0x64, 0x97, 0x86, 0x36, 0x30, 0x8e, 0x00, 0x09, 0xfa, 0xc6, 0x9e, 0xbe, 0xd6, 0x25, 0x95, 0xbf, 0x2d, 0x05, 0xe3, 0xf7, 0xe6, 0xc0, 0xf3, 0xaf, 0xb5, 0x78, 0xc4, 0xf9, 0xcb, 0x3b, 0xc6, 0xfa, 0x48, 0xad, 0x8f, 0xcf, 0x80, 0x4b, 0xd5, 0x74, 0x9e, 0xe8, 0x23, 0xfc, 0x6e, 0x01, 0xce, 0x9e, 0xdd, 0xb3, 0xa1, 0x45, 0xb9, 0x2e, 0x7d, 0x01, 0x72, 0x35, 0x0f, 0x86, 0xc6, 0x52, 0x17, 0x92, 0x65, 0xb0, 0x52, 0xf1, 0x0f, 0x76, 0x73, 0x19, 0x2f, 0x0c, 0xb4, 0xd4, 0x4f, 0x4c, 0x4f, 0xe7, 0x91, 0x9f, 0x67, 0xac, 0x35, 0xb5, 0xfc, 0x3d, 0x63, 0xa3, 0xa2, 0x1a, 0x73, 0x6c, 0x83, 0x8e, 0xb7, 0x54, 0x9f, 0xbf, 0x6f, 0x9f, 0x46, 0xb9, 0x76, 0xbb, 0xb8, 0xdd, 0x9e, 0x7a, 0x7e, 0xe0, 0x7a, 0x98, 0x69, 0x27, 0xd2, 0x9a, 0x07, 0x2b, 0xc7, 0x72, 0x44, 0x3d, 0x05, 0x44, 0x5a, 0x7e, 0x37, 0xf4, 0x58, 0x71, 0x76, 0x87, 0xc5, 0x7d, 0x63, 0x8f, 0xad, 0xd6, 0xfb, 0xeb, 0x21, 0x45, 0x72, 0x46, 0x6e, 0x80, 0xe3, 0xbc, 0x80, 0xa3, 0xc8, 0xc5, 0xde, 0xb3, 0x6e, 0x68, 0x5b, 0x91, 0xa7, 0xe4, 0x16, 0x6d, 0x2b, 0x72, 0x39, 0x39, 0xa6, 0xa3, 0xa9, 0x6b, 0xcb, 0xeb, 0xad, 0xe9, 0x43, 0x6b, 0x16, 0xa3, 0xc5, 0x4a, 0xd1, 0x82, 0xe5, 0x4e, 0xa6, 0x4d, 0x68, 0x51, 0xb4, 0x6c, 0x04, 0x34, 0xa9, 0x16, 0xad, 0x59, 0x8f, 0x96, 0x5e, 0x28, 0xd6, 0x07, 0x2d, 0xa5, 0x68, 0x85, 0x9a, 0x4b, 0x2e, 0x9e, 0xd9, 0xcf, 0xfe, 0xc3, 0x11, 0xfc, 0x9e, 0xf6, 0xf1, 0xc9, 0xbb, 0x19, 0x83, 0x7d, 0x3f, 0x1d, 0x68, 0x59, 0x2c, 0x46, 0x0c, 0x70, 0x0c, 0x2e, 0xc9, 0x02, 0xf9, 0xcf, 0xe4, 0x0a, 0xc4, 0x36, 0x29, 0x15, 0xc1, 0x8b, 0x2e, 0x7a, 0xfe, 0xb5, 0xe6, 0xfb, 0xd9, 0x86, 0xa0, 0x6e, 0xff, 0x7f, 0x2a, 0x63, 0xed, 0xe4, 0x9b, 0x5d, 0x0b, 0xec, 0x84, 0x45, 0x0b, 0x99, 0x1b, 0x02, 0x02, 0x5b, 0x96, 0xd9, 0x55, 0x94, 0xcd, 0x79, 0xd6, 0x5c, 0x2c, 0x35, 0x70, 0x3e, 0xe2, 0xeb, 0x23, 0xcd, 0xb5, 0x37, 0xd4, 0x3d, 0xae, 0x79, 0x4f, 0xa1, 0x93, 0x1e, 0x6e, 0x83, 0x63, 0x3f, 0x3d, 0xdc, 0xe2, 0xd2, 0x4a, 0xb8, 0x7c, 0x6d, 0xac, 0x15, 0xde, 0x18, 0x2b, 0x61, 0x1c, 0xff, 0x55, 0x9f, 0x8a, 0x7f, 0xa2, 0x1f, 0xb8, 0x39, 0xaf, 0x27, 0x31, 0xfa, 0x45, 0x2d, 0xb9, 0x1d, 0x9c, 0x11, 0xed, 0xa4, 0x66, 0x7d, 0x4c, 0xe4, 0xdc, 0xbc, 0x1d, 0x04, 0x2c, 0xf7, 0x01, 0x92, 0x7b, 0x05, 0x0c, 0xa9, 0x11, 0x5a, 0xfb, 0x27, 0x96, 0xaf, 0xb5, 0x95, 0x07, 0xa5, 0xbb, 0xd2, 0xca, 0xc6, 0xfc, 0x74, 0xd9, 0x2f, 0xca, 0xdd, 0x3d, 0x3e, 0x12, 0xeb, 0xbe, 0xf5, 0xd8, 0xeb, 0x0a, 0xa9, 0x4d, 0x8f, 0x1e, 0x56, 0x4e, 0xa6, 0xe6, 0x14, 0x6e, 0x2b, 0xb4, 0x5f, 0x2d, 0xda, 0x6e, 0x31, 0xda, 0x52, 0xc1, 0xfc, 0xba, 0x28, 0xb4, 0x65, 0x6d, 0xe9, 0xdb, 0x9b, 0xff, 0xfa, 0x21, 0xfb, 0xbc, 0xd0, 0xa3, 0xff, 0xf8, 0xc6, 0x77, 0x7f, 0xb5, 0x4a, 0x5d, 0xa3, 0x3e, 0xf6, 0x3a, 0xb7, 0x99, 0xe1, 0xa5, 0xe8, 0xba, 0x84, 0xb9, 0x6c, 0x05, 0x65, 0xcd, 0xff, 0xfd, 0x72, 0x8a, 0xf6, 0x24, 0xb2, 0xe4, 0x40, 0x39, 0xa0, 0x58, 0xf0, 0x71, 0x84, 0x7e, 0xfe, 0xab, 0x56, 0xbb, 0x6f, 0x05, 0x65, 0xdb, 0x4d, 0x43, 0x7d, 0xc1, 0x0f, 0x54, 0x75, 0x4f, 0x5f, 0x93, 0x24, 0x07, 0xbd, 0x0b, 0xc8, 0x07, 0x1e, 0xcd, 0xe0, 0xad, 0x61, 0x2f, 0x6f, 0x4a, 0x54, 0x0e, 0xf8, 0xf9, 0xfc, 0xc1, 0x97, 0x7f, 0xf6, 0x46, 0x6b, 0xc1, 0x50, 0x6f, 0xf0, 0xc2, 0x58, 0xba, 0x3a, 0xf2, 0x2d, 0x40, 0x3a, 0x3b, 0x89, 0xb3, 0x7a, 0xec, 0xe5, 0xc8, 0x69, 0xc1, 0xc7, 0xcb, 0x49, 0x0e, 0xbf, 0xf9, 0xf2, 0xcf, 0x0f, 0x23, 0x45, 0x1d, 0xc7, 0x72, 0x6e, 0xee, 0x3a, 0x3b, 0x9f, 0xd4, 0xe8, 0x81, 0x44, 0x94, 0x5d, 0xf9, 0xdb, 0xe5, 0xf4, 0xc2, 0xe1, 0xb8, 0x69, 0x4d, 0xfd, 0x89, 0xcd, 0x8a, 0xb4, 0x86, 0xec, 0x01, 0x48, 0x72, 0xd9, 0xe0, 0xe6, 0xc2, 0x6f, 0x0d, 0x70, 0xf8, 0xaa, 0x85, 0xc7, 0x36, 0xb3, 0xc6, 0x89, 0xd8, 0x69, 0xca, 0x04, 0x7e, 0x0d, 0x5e, 0x50, 0x1d, 0xaf, 0x19, 0xbf, 0xb5, 0xb8, 0x96, 0xf2, 0x25, 0xf3, 0xc9, 0xed, 0x5b, 0x52, 0xf6, 0xe4, 0x19, 0x25, 0x6c, 0xc9, 0xf9, 0xd3, 0xc3, 0xbc, 0x27, 0x22, 0xf4, 0xbd, 0x4a, 0xb4, 0x39, 0x69, 0x5c, 0x26, 0x15, 0x57, 0x97, 0x3d, 0xb2, 0xed, 0x65, 0xd6, 0x68, 0x70, 0xac, 0xc8, 0xa2, 0xbb, 0x1a, 0xc1, 0xd8, 0x48, 0x25, 0xbb, 0xc9, 0x7c, 0x17, 0xaf, 0xb1, 0xb3, 0x15, 0xf2, 0x56, 0xfb, 0x42, 0x40, 0x62, 0xee, 0x6f, 0x68, 0x92, 0x4a, 0x92, 0x3c, 0x8b, 0xb1, 0xbd, 0x77, 0xab, 0xf1, 0xae, 0x00, 0xf1, 0xc9, 0x50, 0xd9, 0xe2, 0x2c, 0xd0, 0xac, 0x86, 0x0d, 0xf6, 0xdc, 0x17, 0x06, 0xe2, 0x4b, 0x64, 0x83, 0x3d, 0x0a, 0x89, 0x54, 0x58, 0x93, 0x28, 0xf9, 0x02, 0x43, 0x66, 0xc8, 0xcc, 0xe6, 0x78, 0x18, 0x4f, 0x16, 0x3c, 0x59, 0xe2, 0x65, 0xf6, 0x7b, 0x64, 0xeb, 0x0b, 0x1f, 0xb2, 0x7f, 0x07, 0xe9, 0x22, 0x78, 0x89, 0x13, 0x8a, 0x6b, 0x2e, 0x38, 0x78, 0x7c, 0x03, 0x69, 0xae, 0x6e, 0xff, 0xc7, 0x67, 0x04, 0x57, 0x62, 0x9e, 0xdd, 0x4a, 0x9e, 0x31, 0xbe, 0xfe, 0x23, 0x2f, 0x38, 0x00, 0x85, 0xcf, 0x9a, 0xf4, 0x39, 0x82, 0x2e, 0xb6, 0x4f, 0xc5, 0x78, 0xd4, 0xce, 0xd2, 0x36, 0xe4, 0x83, 0xc7, 0x5b, 0x08, 0xda, 0xe0, 0x67, 0x9d, 0x51, 0xd1, 0xa6, 0xcb, 0xb5, 0x36, 0xf5, 0x4a, 0x90, 0x39, 0xd0, 0x07, 0xc4, 0xc9, 0x43, 0x66, 0x1f, 0xca, 0x88, 0xb4, 0x2d, 0x67, 0x3b, 0x8f, 0x9b, 0x62, 0x4b, 0x32, 0x8f, 0x61, 0xeb, 0xd0, 0xcd, 0xb1, 0xa5, 0x71, 0x50, 0xc0, 0xd6, 0xc0, 0x1f, 0xc0, 0x56, 0xef, 0x67, 0xc0, 0xd6, 0xc2, 0x14, 0xb6, 0x18, 0x53, 0x65, 0xc0, 0xd4, 0x7e, 0xc6, 0x54, 0x05, 0x9e, 0x2c, 0xfb, 0x19, 0x53, 0xc5, 0x8c, 0xa9, 0x3d, 0x1b, 0x50, 0xc7, 0xe3, 0xc0, 0xd3, 0x49, 0xc5, 0x81, 0x98, 0x6c, 0x0d, 0x4b, 0xbf, 0x1f, 0x10, 0x58, 0x32, 0x89, 0x71, 0xa4, 0xe1, 0xe8, 0x92, 0xc0, 0x91, 0xa4, 0xe1, 0x67, 0x8d, 0xaa, 0x18, 0xd7, 0x16, 0xbf, 0xbd, 0x19, 0x75, 0xd2, 0xcf, 0xf4, 0xbe, 0xc6, 0x3e, 0x21, 0x4d, 0xe8, 0xe7, 0xe6, 0x54, 0x2f, 0x67, 0xef, 0x2a, 0xc0, 0x4c, 0xa6, 0x57, 0xf3, 0x4d, 0x90, 0x2d, 0x4e, 0xad, 0xcc, 0xbe, 0x39, 0x76, 0xe8, 0xec, 0x18, 0x76, 0x5e, 0x12, 0xd8, 0x29, 0xfe, 0x33, 0xb0, 0xb3, 0xf6, 0x33, 0xe0, 0xa6, 0x9e, 0x71, 0xa3, 0xe4, 0xbb, 0x03, 0x25, 0xb3, 0xc8, 0xfc, 0xa2, 0xc0, 0x0b, 0x9e, 0x2c, 0x2f, 0xa6, 0xf0, 0x72, 0x1b, 0xe3, 0x85, 0x06, 0x35, 0xbc, 0x94, 0xe8, 0x78, 0x61, 0x9e, 0x4a, 0xc7, 0x4b, 0xe5, 0xcd, 0xf1, 0xb2, 0x4a, 0x55, 0xb2, 0x3b, 0x17, 0x9e, 0xdc, 0xbc, 0xa6, 0xf8, 0xc4, 0x66, 0x9e, 0xe7, 0x8f, 0x96, 0xa2, 0x5e, 0x0b, 0x75, 0x0c, 0x9d, 0xd6, 0xec, 0x60, 0xb8, 0xa6, 0xa2, 0x76, 0xe1, 0x68, 0x65, 0xc2, 0x7e, 0x17, 0xf7, 0x4d, 0xd3, 0x8d, 0xeb, 0x38, 0xe8, 0x81, 0x8b, 0xec, 0xbb, 0x20, 0x35, 0x4c, 0xf7, 0x4a, 0x37, 0xc6, 0x7a, 0x5d, 0x59, 0x90, 0x21, 0x2e, 0xe5, 0xd7, 0x6f, 0x66, 0xcb, 0x99, 0x14, 0xe7, 0xc0, 0xbb, 0x51, 0x4c, 0x91, 0x3f, 0xb1, 0x3a, 0x6a, 0x14, 0xfa, 0xa4, 0x34, 0xf5, 0x7e, 0xcd, 0xc5, 0xef, 0xd7, 0xd8, 0xa7, 0x10, 0xa9, 0xc5, 0xfc, 0xac, 0x2e, 0xd4, 0xd6, 0xd3, 0xd8, 0xe7, 0xb8, 0x53, 0xb3, 0xdf, 0xf2, 0xe8, 0xd6, 0x8a, 0x8f, 0xe7, 0xb8, 0xe9, 0x2f, 0x98, 0xdb, 0x6e, 0xad, 0x8e, 0x74, 0xf9, 0x83, 0xed, 0x06, 0xc7, 0xe4, 0x7f, 0xff, 0x51, 0x43, 0xd7, 0xc1, 0xe7, 0xa8, 0xa0, 0x63, 0xea, 0xa1, 0x9e, 0x33, 0xdd, 0x43, 0x5d, 0x47, 0xbb, 0xda, 0x29, 0x07, 0x08, 0xee, 0x98, 0xf4, 0x6a, 0x37, 0x9f, 0xe6, 0x73, 0xe6, 0xfb, 0x07, 0xbb, 0xc3, 0x03, 0xf1, 0xac, 0x68, 0xd7, 0x57, 0x75, 0x0d, 0xba, 0x68, 0x57, 0xdc, 0xce, 0xe7, 0x50, 0xc4, 0xed, 0x8a, 0xf0, 0xa6, 0xd9, 0x6e, 0xd4, 0x2c, 0xec, 0x42, 0xc0, 0x40, 0xcc, 0xd0, 0x6f, 0x58, 0x72, 0x05, 0x72, 0x6b, 0x16, 0x46, 0x96, 0xac, 0xb0, 0xad, 0x93, 0xa3, 0xdd, 0x20, 0xf3, 0x6e, 0x5a, 0xd2, 0x67, 0x18, 0x5b, 0xb7, 0x93, 0x59, 0x13, 0x14, 0x58, 0x90, 0xc1, 0x27, 0xe4, 0xf8, 0x5a, 0x29, 0xaf, 0xd8, 0x4b, 0xd3, 0xf1, 0x75, 0xa0, 0x3f, 0xb2, 0xd4, 0xce, 0x5e, 0x42, 0x62, 0x5d, 0x4e, 0xc3, 0xb1, 0xae, 0x73, 0x1b, 0xb6, 0xf6, 0xf8, 0x21, 0xf5, 0x69, 0x2b, 0xa6, 0x31, 0xd0, 0x9b, 0xbd, 0xdf, 0xb0, 0x51, 0xe2, 0xf8, 0x98, 0xee, 0xbb, 0x38, 0x9b, 0x07, 0x73, 0xac, 0xb2, 0x9a, 0x4a, 0xbd, 0x74, 0x9f, 0xdb, 0x18, 0x5b, 0xc7, 0x3e, 0x55, 0x1c, 0xc6, 0x73, 0x1b, 0xb7, 0x27, 0xab, 0x3e, 0x76, 0x91, 0xf0, 0x76, 0x75, 0xbf, 0x37, 0x40, 0xfe, 0x22, 0x29, 0xfc, 0xd0, 0xfc, 0x0f, 0xa9, 0xa4, 0xe6, 0x3f, 0x79, 0xe5, 0x45, 0x59, 0x1e, 0xfc, 0x68, 0x35, 0x95, 0xfb, 0x5c, 0xf6, 0x03, 0xa8, 0xc1, 0xd2, 0x85, 0x91, 0xd5, 0x34, 0x3d, 0xd2, 0xe6, 0x9a, 0xee, 0xbd, 0x45, 0x3b, 0x33, 0xc0, 0x19, 0x75, 0x66, 0x7a, 0xe7, 0x53, 0x11, 0x87, 0x7b, 0xa7, 0x44, 0x56, 0xd2, 0xf4, 0xba, 0xed, 0x0d, 0x3d, 0x1c, 0xb3, 0xaf, 0x27, 0x91, 0x3d, 0xef, 0x9c, 0x7a, 0x0a, 0x75, 0x2a, 0x3a, 0xb0, 0x5c, 0x3d, 0xb3, 0xec, 0x38, 0xe6, 0xee, 0x9e, 0x73, 0x0f, 0xef, 0x48, 0x8a, 0xb4, 0xb7, 0x44, 0x56, 0x95, 0xea, 0xa7, 0x1d, 0xc4, 0xd6, 0x55, 0x9d, 0xa5, 0xe9, 0xfb, 0x9f, 0x23, 0x7f, 0xeb, 0x56, 0xbd, 0x1d, 0x5d, 0x42, 0x0b, 0xa1, 0x1c, 0x1c, 0x41, 0x31, 0xe0, 0x72, 0x02, 0xe6, 0x22, 0xb6, 0xf7, 0x8f, 0x75, 0xfb, 0xe9, 0xe0, 0x28, 0x4d, 0xc7, 0xec, 0xe3, 0xfb, 0xe7, 0x97, 0x83, 0xe7, 0xc8, 0x54, 0x79, 0x8e, 0x8c, 0x55, 0xe7, 0x28, 0xb7, 0xe6, 0x1c, 0x38, 0xd0, 0x73, 0x94, 0x1f, 0x0a, 0xae, 0xa1, 0x32, 0x2f, 0x7b, 0x62, 0xa6, 0xa7, 0x59, 0x83, 0x50, 0x1d, 0x8d, 0xf5, 0x1c, 0xeb, 0xd9, 0xf7, 0xad, 0x52, 0x5a, 0x6a, 0x8a, 0x62, 0xbe, 0x8b, 0xb3, 0x8f, 0x43, 0x73, 0x34, 0x18, 0xef, 0x88, 0x05, 0x94, 0x76, 0x84, 0x48, 0x89, 0x46, 0xf4, 0xec, 0xbc, 0x63, 0xf5, 0xbe, 0x1e, 0xff, 0xad, 0x43, 0xf7, 0xf8, 0xbb, 0x10, 0x9f, 0x17, 0x6a, 0xb0, 0x2c, 0x27, 0x03, 0xe5, 0xa0, 0x35, 0x63, 0xad, 0x46, 0x7f, 0x8f, 0x22, 0xf9, 0xba, 0xfc, 0xb9, 0x2d, 0xf9, 0x43, 0x18, 0x3b, 0xa5, 0x5d, 0x22, 0xce, 0x1a, 0xb7, 0x73, 0x5c, 0xac, 0x5e, 0x39, 0xd3, 0x70, 0x8f, 0x72, 0x0a, 0x31, 0x96, 0xd2, 0x2e, 0x84, 0x98, 0x67, 0xb3, 0x95, 0x71, 0x9e, 0x62, 0x2c, 0x39, 0xa0, 0xaa, 0xc8, 0x3f, 0x95, 0xc7, 0x16, 0xe4, 0xf1, 0x68, 0xbb, 0x21, 0xd6, 0x1d, 0x1c, 0xa1, 0xe9, 0x95, 0xef, 0xd3, 0x74, 0xae, 0x73, 0xcd, 0x79, 0x9a, 0x0e, 0xa8, 0xa7, 0x3b, 0xa5, 0x86, 0x9e, 0xfd, 0x3d, 0x4d, 0xa4, 0xd6, 0xd5, 0xbe, 0x53, 0xae, 0x69, 0x35, 0xf0, 0xce, 0x6a, 0x81, 0xdf, 0x4b, 0xf6, 0x12, 0xd4, 0x1d, 0x38, 0xe4, 0x13, 0x92, 0x2d, 0x72, 0xbd, 0x3f, 0xc6, 0xf8, 0xd8, 0x52, 0x83, 0x7e, 0xe0, 0xde, 0x5e, 0xe3, 0x0f, 0x15, 0x37, 0x92, 0xb4, 0x37, 0xb0, 0x0c, 0xfc, 0xc4, 0xf6, 0xc0, 0x8e, 0xe8, 0xa9, 0x9a, 0x83, 0xaf, 0x94, 0xd0, 0xc8, 0x7c, 0x4d, 0x67, 0x68, 0xa8, 0x27, 0xc6, 0xba, 0x63, 0xd6, 0x07, 0xa5, 0x0e, 0xab, 0x66, 0xbf, 0xda, 0xd0, 0xed, 0x2c, 0x57, 0xd5, 0x24, 0x9d, 0xfe, 0xef, 0xe8, 0xc5, 0xc9, 0x84, 0x59, 0x4b, 0x77, 0xfa, 0xbf, 0x3b, 0x82, 0xbf, 0x7e, 0xf9, 0xa1, 0xb6, 0x5d, 0xe8, 0x4d, 0x26, 0xc8, 0xd1, 0x5b, 0x42, 0xc0, 0xf5, 0x64, 0x60, 0x8f, 0x5c, 0xd2, 0xce, 0x1e, 0xa7, 0x71, 0xf5, 0xd4, 0x7d, 0x3d, 0x4d, 0x76, 0x4e, 0x53, 0x75, 0x71, 0x17, 0x7a, 0x6c, 0xf1, 0x28, 0xf7, 0x31, 0x4e, 0xc9, 0x69, 0x9c, 0x95, 0xa8, 0xc1, 0xd4, 0xbd, 0x0f, 0xb7, 0x8c, 0xf4, 0xd7, 0x2c, 0x99, 0xae, 0x69, 0x68, 0x6e, 0x4f, 0xfa, 0xca, 0x93, 0x14, 0xed, 0x4e, 0x98, 0x65, 0xad, 0xbc, 0x27, 0x87, 0xba, 0xba, 0xda, 0x6c, 0xec, 0x69, 0x40, 0x5b, 0xf7, 0x1d, 0x16, 0x3e, 0xad, 0x40, 0x37, 0xd1, 0x92, 0x0b, 0x51, 0xd3, 0x45, 0xc8, 0xc9, 0x4d, 0x46, 0xdd, 0x9b, 0x54, 0x86, 0x37, 0x83, 0xbd, 0x46, 0x39, 0xa8, 0x88, 0xde, 0x4e, 0xca, 0x93, 0x06, 0x1f, 0xe2, 0x33, 0x99, 0xe7, 0x9f, 0x25, 0x13, 0x7a, 0xe9, 0x6d, 0x5e, 0xd2, 0x7c, 0x4a, 0x79, 0xc8, 0x4d, 0x27, 0x92, 0xec, 0x93, 0x89, 0xcf, 0x5a, 0xe5, 0xf9, 0x9a, 0x43, 0x5d, 0x74, 0x3c, 0x79, 0x6a, 0xfd, 0xc9, 0x87, 0x9e, 0x48, 0x9e, 0xea, 0x3e, 0xba, 0x6e, 0x7b, 0x2f, 0xf8, 0x3b, 0x53, 0xac, 0x6f, 0xcb, 0x39, 0x5e, 0x4b, 0x03, 0xc5, 0x55, 0x38, 0x8d, 0xdc, 0x44, 0x16, 0x71, 0x0e, 0x90, 0x75, 0xfc, 0x1c, 0xa0, 0x7f, 0x7c, 0xa3, 0x8d, 0x82, 0x67, 0x91, 0x2a, 0x42, 0xa5, 0xc0, 0xfa, 0xfd, 0xda, 0x48, 0x42, 0xce, 0x61, 0x79, 0x81, 0x77, 0x1e, 0x15, 0x7b, 0xab, 0x20, 0x75, 0x18, 0x5d, 0x19, 0xcc, 0x83, 0xb7, 0x1b, 0xf6, 0xf4, 0x36, 0xb5, 0x57, 0x90, 0x3f, 0xc6, 0x39, 0xb2, 0x94, 0xed, 0xbf, 0x6d, 0x6b, 0x80, 0x77, 0x98, 0xfd, 0x93, 0x1b, 0x82, 0x43, 0x61, 0xed, 0x89, 0xf7, 0xff, 0xf9, 0x09, 0x69, 0x16, 0x8a, 0xf3, 0x84, 0x03, 0x14, 0x41, 0xee, 0xb5, 0x75, 0xfb, 0xaf, 0xd9, 0xfd, 0x39, 0x08, 0xed, 0x7c, 0xfb, 0x2b, 0x73, 0x27, 0x85, 0x12, 0x15, 0x86, 0x86, 0x79, 0x6f, 0x87, 0xf9, 0x29, 0xed, 0x8b, 0x36, 0x71, 0x82, 0xdb, 0xfe, 0x4f, 0x2e, 0xb3, 0xdf, 0x39, 0x99, 0xfd, 0x45, 0xf0, 0xc9, 0xac, 0xc9, 0x7f, 0xfd, 0x90, 0x02, 0x98, 0x9f, 0x8b, 0x87, 0xd6, 0x47, 0xd7, 0x37, 0x99, 0x3c, 0x86, 0x93, 0x8f, 0x28, 0x39, 0x0d, 0xbd, 0x8f, 0x3f, 0x47, 0xe5, 0x5b, 0xd7, 0xf1, 0xdb, 0xd1, 0xe7, 0x28, 0xb2, 0x7d, 0xdd, 0xd1, 0x47, 0xa2, 0xdd, 0x4d, 0x59, 0xac, 0x59, 0xbb, 0x27, 0xd9, 0x42, 0x6a, 0xcc, 0x69, 0x74, 0x65, 0xba, 0x59, 0x66, 0x8a, 0xb0, 0xc7, 0x89, 0x70, 0x17, 0xe3, 0xeb, 0xa6, 0x75, 0x2d, 0x66, 0x6a, 0x7d, 0xea, 0x23, 0xfb, 0x02, 0x77, 0xd4, 0x51, 0xd5, 0xd0, 0x73, 0x1c, 0xf9, 0x22, 0x27, 0xa2, 0x4d, 0xa8, 0x31, 0x7a, 0x27, 0xed, 0x28, 0x23, 0xaf, 0xc6, 0xf3, 0x95, 0xfb, 0xad, 0x7a, 0x8d, 0x6f, 0x43, 0x8d, 0x2b, 0xf9, 0xc9, 0xf7, 0x95, 0x58, 0x64, 0xcb, 0x2b, 0x73, 0xcd, 0x02, 0xfe, 0xf0, 0x58, 0x8d, 0x6b, 0xa8, 0x96, 0x67, 0x0c, 0xff, 0x6d, 0x5c, 0x63, 0xe6, 0x16, 0x4f, 0xd4, 0xf3, 0x99, 0xb4, 0xbe, 0x60, 0x43, 0x64, 0x50, 0xa4, 0x46, 0xad, 0x2b, 0xf5, 0x5a, 0xf3, 0x09, 0x5c, 0x16, 0x21, 0xb3, 0x63, 0x6e, 0x14, 0xb5, 0x5d, 0x7d, 0x74, 0xe3, 0xd1, 0x47, 0xb6, 0xb3, 0xdf, 0x92, 0x52, 0x50, 0x41, 0x9f, 0x62, 0x8e, 0xf6, 0xb4, 0x66, 0x1f, 0xdd, 0xb8, 0xbd, 0x17, 0xb5, 0x9b, 0x26, 0x6a, 0x77, 0x9f, 0x4e, 0x31, 0x64, 0x21, 0x63, 0x94, 0xbb, 0x58, 0xbe, 0x68, 0xd5, 0x64, 0x0b, 0xb4, 0x4c, 0x04, 0x3d, 0x19, 0xe3, 0x07, 0xbd, 0xcb, 0x4b, 0xfe, 0x4e, 0x74, 0x13, 0x2a, 0x13, 0xf4, 0xa1, 0xba, 0xea, 0xca, 0xe8, 0x13, 0x4a, 0xdc, 0x41, 0x3c, 0x1a, 0x5f, 0x4c, 0x36, 0xb7, 0xc9, 0x52, 0x2c, 0x89, 0xd1, 0x9a, 0x9d, 0x38, 0x0f, 0x1e, 0xca, 0xc4, 0x7a, 0x79, 0xe7, 0xfa, 0xb6, 0xf4, 0x81, 0x9b, 0x1c, 0x50, 0xb2, 0xb4, 0x31, 0xfb, 0x62, 0x77, 0x73, 0x54, 0xa4, 0xb8, 0x88, 0x5e, 0x68, 0x88, 0x25, 0x91, 0xce, 0xb8, 0x96, 0x2a, 0x0c, 0xf2, 0xbc, 0xfe, 0xbe, 0xa6, 0x7c, 0x70, 0x3c, 0xa6, 0x86, 0xe0, 0x98, 0x96, 0x41, 0xa6, 0x68, 0x3f, 0xe1, 0xa7, 0x7c, 0x61, 0xf7, 0x8b, 0xdd, 0xad, 0x56, 0x48, 0xa1, 0xdd, 0xb2, 0x84, 0x3c, 0xbb, 0x44, 0x9e, 0x5b, 0x30, 0xce, 0x47, 0xc7, 0x57, 0x6a, 0x52, 0x10, 0x0b, 0x2a, 0x5c, 0xed, 0x08, 0x00, 0xe6, 0xe8, 0xf6, 0x40, 0x2c, 0x84, 0x9e, 0x6a, 0x65, 0x1f, 0xad, 0xbf, 0x1e, 0xf4, 0x4b, 0x4c, 0xf7, 0x98, 0xe3, 0x93, 0x0d, 0x13, 0x7d, 0x7e, 0xbb, 0x85, 0x75, 0xa8, 0xf4, 0xc4, 0x75, 0x3d, 0xbd, 0x7e, 0x4c, 0x97, 0xf4, 0xba, 0xde, 0x9e, 0xa2, 0x04, 0x47, 0xbb, 0xbd, 0x21, 0x0a, 0x2c, 0x38, 0xab, 0x9d, 0x1f, 0x03, 0xe4, 0x48, 0xed, 0xd4, 0xa6, 0xa2, 0x7f, 0x6f, 0x2f, 0xcb, 0xf3, 0xb5, 0x90, 0x71, 0x7f, 0x04, 0x73, 0x7f, 0xf7, 0x52, 0x53, 0x89, 0xa1, 0x78, 0xb2, 0x62, 0x2a, 0x36, 0x94, 0x4c, 0x2e, 0x33, 0xaf, 0x56, 0xf7, 0x25, 0x13, 0x4b, 0xe5, 0x05, 0xab, 0x89, 0xcf, 0xf5, 0x8d, 0xad, 0x3f, 0xb9, 0x7e, 0x7f, 0xfb, 0x72, 0x5a, 0xea, 0xf3, 0x50, 0x6c, 0x3d, 0x8f, 0x55, 0x37, 0x9d, 0xfb, 0xce, 0xe3, 0x0f, 0x9d, 0xf8, 0x4e, 0x51, 0xa6, 0xdb, 0x2c, 0xcf, 0x53, 0xac, 0xb3, 0xeb, 0x69, 0xfa, 0x6c, 0xd0, 0x58, 0x92, 0x1b, 0xd6, 0x07, 0x47, 0xd4, 0x53, 0xfb, 0xd6, 0x37, 0x9f, 0x97, 0xab, 0x94, 0xfc, 0x58, 0x2f, 0x63, 0xb4, 0xbf, 0xb7, 0x69, 0x9f, 0x8b, 0x62, 0xbd, 0x6e, 0xe3, 0x89, 0xde, 0x73, 0x9b, 0x76, 0xae, 0x0b, 0xfe, 0x3e, 0x42, 0xbe, 0x1e, 0xf6, 0x37, 0xab, 0x98, 0xca, 0x7a, 0xee, 0xc6, 0x9d, 0xbd, 0xa3, 0x2e, 0xdc, 0xb0, 0xe8, 0x91, 0x3d, 0xcf, 0x51, 0x71, 0x33, 0xa9, 0xcb, 0x83, 0x17, 0x28, 0xab, 0xf2, 0x02, 0x99, 0xd7, 0x50, 0x64, 0xc0, 0x33, 0x85, 0xf7, 0x90, 0xd9, 0x4a, 0x46, 0xbd, 0xec, 0x0c, 0xfd, 0xf3, 0xc1, 0x79, 0x1f, 0xed, 0x23, 0xf6, 0x29, 0xae, 0x7e, 0xec, 0x09, 0xfe, 0xeb, 0xcb, 0x0b, 0x3e, 0x1a, 0x21, 0xb4, 0xfa, 0xad, 0x98, 0xef, 0xf2, 0x76, 0xf4, 0x46, 0x7b, 0xbe, 0xfe, 0x4a, 0xa4, 0x87, 0x2a, 0xc9, 0x00, 0x9e, 0x25, 0x8b, 0xc3, 0x39, 0xb4, 0x51, 0x0a, 0xf7, 0x94, 0x66, 0xf8, 0x7b, 0x62, 0xc0, 0x45, 0x31, 0x3b, 0x23, 0xef, 0x4e, 0xcd, 0x9e, 0xe3, 0x73, 0xe9, 0xf6, 0x2e, 0xa4, 0xea, 0xf6, 0x75, 0xef, 0x0d, 0x37, 0x69, 0x94, 0x3d, 0x5b, 0xc9, 0xde, 0x1b, 0x6e, 0xcd, 0xf2, 0x77, 0xfb, 0x7a, 0x43, 0xec, 0xb7, 0xcb, 0x24, 0x42, 0x2d, 0x7e, 0x6b, 0x89, 0xe1, 0x58, 0xb0, 0x78, 0x5a, 0x69, 0xc6, 0xce, 0x10, 0xa4, 0x30, 0x09, 0xe5, 0x98, 0xb6, 0x86, 0x86, 0x82, 0xb3, 0x83, 0x64, 0xf6, 0xe7, 0xcd, 0x0e, 0xaa, 0xa3, 0xb8, 0xae, 0x88, 0xb4, 0x98, 0x7b, 0x53, 0x73, 0x40, 0x3f, 0x6b, 0x11, 0x57, 0x38, 0xab, 0x8b, 0x0b, 0x49, 0x02, 0xa4, 0x92, 0x7e, 0x1a, 0x73, 0x16, 0x24, 0xfc, 0x5b, 0xbc, 0x99, 0xbc, 0xcb, 0xb7, 0xe0, 0xca, 0x7f, 0x5c, 0x11, 0xab, 0xf9, 0xb9, 0x25, 0xbc, 0xb7, 0x77, 0x8b, 0xd7, 0xc8, 0xfd, 0x2b, 0xf4, 0x43, 0x17, 0x46, 0xea, 0xbb, 0x1f, 0xcb, 0x61, 0xc1, 0x3d, 0xe6, 0x62, 0x14, 0xd7, 0x8d, 0x8d, 0x62, 0x0f, 0x8f, 0xe2, 0x33, 0x2e, 0x65, 0xb9, 0x46, 0xdd, 0xd9, 0xd7, 0x9d, 0xb0, 0x66, 0x37, 0xd6, 0xed, 0xff, 0x8f, 0x8f, 0x79, 0x6f, 0x81, 0xdb, 0xfb, 0xf9, 0x57, 0x9b, 0x0a, 0xb8, 0x97, 0xe0, 0xf2, 0x89, 0xb1, 0x6a, 0xd2, 0xd2, 0xf0, 0xe8, 0xe3, 0xd1, 0x14, 0x0b, 0xa1, 0x85, 0x25, 0x3e, 0x87, 0x9d, 0x21, 0x61, 0x7a, 0x9c, 0x06, 0x83, 0x49, 0xf4, 0x71, 0xe4, 0x77, 0x99, 0x4f, 0x17, 0xcc, 0xe5, 0x94, 0xdc, 0xfb, 0x9e, 0x7f, 0xb5, 0x65, 0x93, 0x7d, 0x01, 0xc6, 0xee, 0xf8, 0x79, 0xe7, 0x45, 0xd7, 0xaf, 0xeb, 0x88, 0x93, 0x5e, 0xcc, 0xec, 0xf1, 0xac, 0x61, 0xa3, 0x25, 0x87, 0x0c, 0xf1, 0x00, 0xaf, 0xc8, 0x82, 0x8d, 0xca, 0xeb, 0x5f, 0xa1, 0x5e, 0x8b, 0x67, 0xf1, 0xb9, 0x5f, 0x78, 0x1a, 0x4d, 0x38, 0x62, 0xcb, 0xc9, 0xea, 0xdf, 0x45, 0xb9, 0x1c, 0x7f, 0x27, 0xe6, 0x64, 0x71, 0x72, 0xab, 0x25, 0xe7, 0x00, 0x49, 0x8b, 0x76, 0x01, 0x87, 0xbb, 0x58, 0xab, 0x28, 0x17, 0x6f, 0xba, 0xaf, 0xe2, 0x1b, 0xf6, 0x1e, 0xb4, 0x73, 0x63, 0x1c, 0x86, 0xe1, 0x8d, 0xb2, 0x81, 0x2d, 0x1c, 0x07, 0xa5, 0x41, 0x03, 0x5b, 0xb2, 0x0d, 0xd7, 0x0c, 0x1a, 0x72, 0xbc, 0x34, 0xb5, 0xc1, 0x30, 0x60, 0xd0, 0xb4, 0x71, 0x35, 0xff, 0xb4, 0xe5, 0x76, 0xb7, 0x6e, 0xbf, 0x0f, 0xbc, 0x5b, 0x31, 0x9b, 0xec, 0x57, 0x5f, 0xe2, 0xf9, 0xc4, 0x91, 0x21, 0x56, 0xdd, 0xdb, 0xd3, 0x56, 0xdd, 0xef, 0x3b, 0xde, 0x7b, 0xbc, 0x57, 0xae, 0x7c, 0xf3, 0x90, 0x63, 0x79, 0x86, 0x5f, 0x31, 0xef, 0xdf, 0xcd, 0xb6, 0x64, 0x29, 0x7f, 0xd0, 0x69, 0x3b, 0x13, 0x4d, 0x18, 0x7d, 0x7c, 0xca, 0x4d, 0x39, 0xef, 0x8d, 0xb4, 0x59, 0x27, 0x8e, 0xdb, 0xf4, 0xd3, 0x28, 0x75, 0xcf, 0x01, 0x0e, 0x51, 0x32, 0x7f, 0x19, 0xe6, 0x92, 0xd9, 0x8f, 0xf6, 0x0c, 0xf0, 0x7e, 0xa8, 0xc5, 0x8d, 0x30, 0x1c, 0x49, 0xc1, 0x10, 0x1c, 0xc9, 0xf0, 0x3b, 0xb6, 0xc8, 0x1b, 0x27, 0xae, 0xd0, 0x87, 0x0b, 0xc0, 0xeb, 0x9e, 0x47, 0xad, 0x24, 0xd4, 0x4a, 0x9c, 0x48, 0x99, 0xaa, 0xd5, 0xb5, 0x11, 0x9e, 0x59, 0x5d, 0x19, 0xec, 0x1f, 0x14, 0x39, 0x86, 0xd3, 0xf6, 0x12, 0xa4, 0xc1, 0x6e, 0xa6, 0x7c, 0xbc, 0x72, 0x66, 0x47, 0xcd, 0x20, 0xf7, 0x17, 0xed, 0xff, 0x11, 0x19, 0xe3, 0xda, 0xb9, 0xa8, 0x46, 0xf9, 0x51, 0xc5, 0xc2, 0x1e, 0x97, 0x50, 0xea, 0xc1, 0xdb, 0xef, 0xc9, 0xf0, 0xa7, 0x9f, 0x88, 0x04, 0x3e, 0xb6, 0x46, 0xf7, 0xad, 0x71, 0x64, 0x0c, 0x92, 0x30, 0x43, 0x12, 0x28, 0x07, 0x24, 0x4b, 0x40, 0xe9, 0x3a, 0x22, 0xef, 0x55, 0xf8, 0x51, 0xdb, 0x7e, 0x8f, 0x97, 0xf6, 0x82, 0x0a, 0xbb, 0x59, 0x0f, 0x5f, 0xcc, 0xfb, 0xb9, 0x62, 0xf6, 0xbe, 0xa9, 0xf6, 0xb5, 0x8b, 0xd7, 0x4a, 0x9e, 0x98, 0xf7, 0x21, 0xf5, 0x5a, 0xdd, 0x54, 0x12, 0x49, 0xca, 0xf3, 0x21, 0xad, 0x67, 0x8a, 0xbe, 0x7e, 0xd9, 0x91, 0xc1, 0xfe, 0xfc, 0xae, 0xad, 0x09, 0x7e, 0x48, 0x9b, 0xc4, 0x6e, 0x7b, 0x09, 0x64, 0xa3, 0xc0, 0x5b, 0x03, 0xf3, 0x7e, 0xb7, 0xd3, 0x1c, 0x32, 0xa0, 0xe7, 0xf9, 0x72, 0xe9, 0x90, 0x9b, 0xca, 0x12, 0x79, 0x1d, 0x94, 0x6b, 0xb0, 0x87, 0x30, 0xe2, 0xac, 0xec, 0x3f, 0x58, 0xde, 0xb3, 0x93, 0x62, 0x06, 0x25, 0x5b, 0xc4, 0xde, 0x7d, 0xef, 0xc1, 0x48, 0xb7, 0x3f, 0x24, 0x6f, 0x18, 0xa4, 0x45, 0x7d, 0x3f, 0x39, 0x1c, 0x3f, 0x52, 0x25, 0x76, 0x71, 0x39, 0x67, 0xb5, 0x0c, 0x39, 0x3f, 0x0d, 0xba, 0x75, 0x1c, 0x33, 0xa5, 0xa3, 0xa1, 0xc7, 0x91, 0xd9, 0xd0, 0x2d, 0x47, 0xf9, 0x14, 0x5d, 0x47, 0x78, 0xdb, 0x6b, 0xc2, 0x97, 0xe0, 0x25, 0xf6, 0x1f, 0x58, 0xcb, 0x27, 0x1b, 0x6c, 0x12, 0x7d, 0x48, 0xb6, 0x33, 0xa7, 0x06, 0x2e, 0xfe, 0xcd, 0xc3, 0x6c, 0xc7, 0x0d, 0x7a, 0xee, 0xef, 0x23, 0xe6, 0xc8, 0xda, 0xa7, 0x56, 0x1b, 0x5e, 0xed, 0x3a, 0x98, 0x7c, 0xbf, 0xaf, 0x83, 0xaa, 0xa5, 0x81, 0xee, 0xe8, 0x4c, 0x32, 0x24, 0x64, 0x3b, 0x24, 0x2d, 0xf6, 0x86, 0x08, 0xf8, 0xf0, 0xbb, 0x66, 0xea, 0xa1, 0x75, 0xeb, 0xbb, 0x8b, 0x8d, 0x23, 0xd1, 0x43, 0xeb, 0xba, 0xbb, 0x0f, 0xaf, 0x4b, 0xf6, 0x72, 0xbf, 0x60, 0xab, 0xdb, 0xe1, 0xe8, 0xf6, 0x4a, 0xee, 0x99, 0x9a, 0xb5, 0xed, 0x8e, 0x20, 0x7a, 0xb6, 0x43, 0xeb, 0xcb, 0x5b, 0x03, 0xff, 0xf3, 0x15, 0x6d, 0x9c, 0xff, 0xe2, 0xa0, 0x46, 0xbf, 0xc0, 0x65, 0x77, 0xbf, 0xf2, 0xb2, 0x46, 0x0d, 0x06, 0xbb, 0x34, 0x7b, 0x5c, 0x60, 0x5e, 0x96, 0x79, 0x17, 0x09, 0x79, 0xb0, 0xa4, 0x81, 0x59, 0xd2, 0x05, 0x48, 0x3d, 0x9a, 0x0d, 0x2d, 0xda, 0xc2, 0xbf, 0x93, 0x34, 0x3b, 0xcf, 0xe1, 0x9a, 0x55, 0x53, 0xab, 0x33, 0x0e, 0x82, 0xeb, 0xeb, 0x2c, 0x38, 0xff, 0xe3, 0xee, 0x1e, 0xa7, 0xc4, 0x65, 0x6a, 0x1c, 0xe5, 0x54, 0xea, 0xee, 0xd9, 0xb3, 0x2e, 0x1e, 0x10, 0xf6, 0xb5, 0x15, 0xcc, 0x8f, 0xa2, 0xf5, 0x7c, 0x3b, 0x89, 0x47, 0xd7, 0x48, 0x84, 0x6b, 0x38, 0xd0, 0xc5, 0xd0, 0x32, 0x1c, 0x53, 0x29, 0xd9, 0x6d, 0x37, 0x6a, 0x39, 0x76, 0x4c, 0x3d, 0xd8, 0x9d, 0xec, 0xea, 0xef, 0xd1, 0xcf, 0x4b, 0x1d, 0xf3, 0x8d, 0x62, 0xec, 0x14, 0x23, 0x80, 0x21, 0xcb, 0x05, 0x34, 0x0e, 0x0d, 0x1a, 0xc6, 0x19, 0x43, 0xa3, 0xf9, 0x61, 0x1e, 0xe9, 0xea, 0x98, 0x5a, 0x2d, 0x1d, 0x02, 0xde, 0x56, 0x51, 0x75, 0xc6, 0x40, 0x8f, 0x28, 0xdb, 0x39, 0x5e, 0xb6, 0x2b, 0x83, 0x2d, 0x4b, 0xa6, 0xd2, 0x70, 0x6f, 0x77, 0xef, 0xea, 0xa9, 0xd5, 0xc6, 0xc3, 0x3d, 0x23, 0xbd, 0xbd, 0x78, 0x7a, 0xb5, 0x37, 0xd9, 0xe3, 0x34, 0xbc, 0xfb, 0xf0, 0x10, 0x7e, 0xd9, 0xf2, 0x98, 0x39, 0xe8, 0xa1, 0x1e, 0xb9, 0xcb, 0x2e, 0xbd, 0xbb, 0xe1, 0x28, 0x7e, 0xd9, 0xca, 0x98, 0x31, 0x72, 0xb4, 0x4b, 0xee, 0xb6, 0xd3, 0xbb, 0x1b, 0x06, 0xbb, 0xec, 0xa4, 0x87, 0xc9, 0x83, 0x5d, 0x72, 0x12, 0xd0, 0x15, 0x5c, 0x4f, 0x57, 0x46, 0x97, 0x7a, 0x52, 0x9e, 0xc9, 0x01, 0xb1, 0x83, 0xc7, 0x15, 0x24, 0x44, 0xb1, 0x66, 0xe7, 0x67, 0xab, 0xf8, 0x44, 0x16, 0xe4, 0x63, 0x48, 0xa4, 0xea, 0x11, 0x8c, 0xfb, 0x42, 0xb2, 0x8c, 0xbd, 0x1f, 0xa8, 0xdf, 0x6c, 0x9f, 0xdf, 0x96, 0x3f, 0xe1, 0xfc, 0x30, 0xf3, 0x98, 0x1e, 0xa5, 0x90, 0xcd, 0x30, 0xfb, 0x2f, 0x02, 0x17, 0xb0, 0x18, 0x3c, 0xcb, 0x52, 0xf0, 0x00, 0x4b, 0x1c, 0xbc, 0xb3, 0xe8, 0x26, 0xc7, 0x9e, 0x1f, 0x43, 0xd2, 0x30, 0x09, 0x5f, 0xa1, 0x15, 0x7c, 0x86, 0x34, 0xa4, 0xf9, 0xdc, 0x78, 0xae, 0xdf, 0x4d, 0xf9, 0x7b, 0x56, 0x52, 0x5e, 0x9c, 0xd7, 0xf5, 0xa6, 0x23, 0xcc, 0x96, 0x58, 0xa3, 0x43, 0x70, 0x8b, 0x28, 0x31, 0x3a, 0x06, 0x81, 0xf6, 0x5e, 0x56, 0xbf, 0xb9, 0x18, 0x29, 0x23, 0x07, 0xf9, 0xcb, 0xc8, 0xcb, 0xa9, 0xd3, 0xa8, 0x57, 0x19, 0xd8, 0x2a, 0x5e, 0xf8, 0x9c, 0x6c, 0x64, 0x5d, 0x89, 0x9b, 0xa5, 0x09, 0x65, 0x4c, 0x48, 0x63, 0xb9, 0x8b, 0x75, 0xf0, 0x72, 0xf1, 0x9b, 0x4f, 0x79, 0x77, 0xf1, 0x69, 0xe5, 0xb6, 0x3b, 0x58, 0x27, 0xca, 0x5a, 0xf3, 0x21, 0x79, 0xac, 0x85, 0xec, 0xff, 0xc9, 0x5f, 0x48, 0xb9, 0xef, 0xd7, 0xc8, 0xb5, 0x91, 0x01, 0xd1, 0x0b, 0x2f, 0x6a, 0x76, 0xa7, 0x9c, 0xc3, 0xb5, 0x35, 0x5c, 0xa7, 0xe9, 0x6e, 0x4c, 0xca, 0x93, 0xd8, 0x0a, 0x00, 0x72, 0x9d, 0xe7, 0xf0, 0x87, 0x54, 0x84, 0x71, 0x56, 0x5c, 0x79, 0x9e, 0x5c, 0x6d, 0x86, 0x62, 0x8a, 0x1c, 0x74, 0x4b, 0xaf, 0xf7, 0x24, 0x4c, 0x72, 0xd7, 0x50, 0xaf, 0x92, 0x93, 0xef, 0xa6, 0x2f, 0x47, 0xd6, 0x45, 0x7e, 0x71, 0x68, 0x1d, 0x8f, 0xd3, 0xf2, 0x90, 0xfc, 0xc8, 0xa2, 0xbe, 0x17, 0x0e, 0x27, 0x8c, 0x83, 0x01, 0xe5, 0x68, 0xe4, 0xa1, 0xc8, 0xff, 0x2c, 0x45, 0x59, 0x91, 0x43, 0x72, 0xad, 0x38, 0xdb, 0x7a, 0x25, 0x7b, 0x28, 0x58, 0x45, 0xef, 0x6f, 0x2a, 0x63, 0x3b, 0x57, 0x71, 0xaa, 0x75, 0xca, 0x1a, 0x33, 0x75, 0xd6, 0xa8, 0x26, 0x59, 0x8e, 0xb7, 0x60, 0x5b, 0xfe, 0x4d, 0x4e, 0xd7, 0x9a, 0x7e, 0x47, 0x14, 0x94, 0x37, 0x20, 0xb4, 0xbf, 0x99, 0x53, 0x2f, 0x00, 0xf7, 0x24, 0x5a, 0xf2, 0x5a, 0x8c, 0xf7, 0xcb, 0x35, 0xdd, 0x0e, 0x6d, 0x8f, 0xa2, 0x82, 0xe9, 0xb7, 0x03, 0xbd, 0xd7, 0xe5, 0xd1, 0xce, 0xcc, 0x28, 0xf6, 0x59, 0xb5, 0xbe, 0x3b, 0x99, 0x12, 0x59, 0x52, 0xe0, 0x9a, 0xea, 0x4b, 0xb2, 0x95, 0xb3, 0xec, 0x46, 0x6b, 0xe4, 0x0b, 0x5f, 0x47, 0xbc, 0x1a, 0xe9, 0x42, 0x9b, 0x1c, 0x44, 0x2f, 0xb0, 0x88, 0xb3, 0xe5, 0xd0, 0x0f, 0x81, 0xed, 0xdc, 0xc8, 0x80, 0x58, 0x2d, 0xb8, 0x1f, 0xad, 0x90, 0x23, 0x4e, 0xe8, 0xb6, 0x02, 0x43, 0xe2, 0xf4, 0x6e, 0xed, 0x94, 0x6e, 0x3e, 0x77, 0x28, 0x21, 0xf6, 0x00, 0x85, 0xa7, 0x68, 0xd4, 0xf8, 0xfd, 0x4d, 0x5c, 0x47, 0x3e, 0xb7, 0x5b, 0x6a, 0xbc, 0xa6, 0xb2, 0xdf, 0xab, 0xf7, 0x37, 0xf1, 0x29, 0xbe, 0x72, 0x38, 0x78, 0xd1, 0xa5, 0x3a, 0xcc, 0x72, 0x65, 0xf0, 0xe2, 0x22, 0xd5, 0xc9, 0xbe, 0x24, 0x8e, 0x31, 0x6c, 0x54, 0x6f, 0x86, 0x0c, 0x16, 0xee, 0xd4, 0x74, 0xd3, 0x6e, 0x7e, 0xae, 0xe1, 0x84, 0x99, 0xf4, 0xc8, 0x0d, 0x21, 0xaf, 0x5e, 0x1f, 0xa2, 0xee, 0xd1, 0x46, 0x85, 0xcf, 0xef, 0x4c, 0xf9, 0xc0, 0x01, 0x46, 0xa2, 0x3d, 0x71, 0x60, 0x2f, 0x9e, 0xc5, 0xeb, 0xe5, 0xb8, 0x13, 0x0d, 0xb6, 0x55, 0x7f, 0xca, 0x59, 0x75, 0x2f, 0xf2, 0x8e, 0xf3, 0x18, 0xc5, 0x1f, 0x6a, 0x63, 0xcc, 0x97, 0x00, 0x37, 0x65, 0x3c, 0x16, 0x75, 0x8b, 0xec, 0x7d, 0x8e, 0x64, 0x62, 0x35, 0x5a, 0xc3, 0xa3, 0x9d, 0xb2, 0xfa, 0xf5, 0xa5, 0x8b, 0x36, 0xc7, 0x92, 0xe3, 0x5a, 0x01, 0x9f, 0x2c, 0xc4, 0x37, 0x15, 0x89, 0xa8, 0x68, 0x25, 0x8e, 0xaf, 0xaf, 0xdf, 0xac, 0x18, 0x67, 0x54, 0x52, 0x08, 0x78, 0x2f, 0xe1, 0x55, 0x23, 0x5e, 0x33, 0x9a, 0xd8, 0xd2, 0xf8, 0xc2, 0x8f, 0x39, 0x2d, 0x4b, 0x29, 0xb1, 0x37, 0x52, 0xc5, 0x0d, 0xf6, 0xc7, 0x85, 0xc6, 0x90, 0x37, 0x07, 0xad, 0x94, 0x57, 0xbf, 0x79, 0xec, 0x5c, 0xc4, 0x6a, 0xe1, 0x05, 0xe8, 0x75, 0xed, 0xdc, 0x58, 0xf4, 0x01, 0x6d, 0x8d, 0xa6, 0x2c, 0xb5, 0x8f, 0x3b, 0x0f, 0xf5, 0xd0, 0x67, 0xff, 0x29, 0x48, 0xb7, 0x8f, 0x3d, 0xd6, 0xb2, 0x27, 0xe4, 0x36, 0x52, 0x1c, 0x28, 0xc3, 0x5f, 0x3c, 0xdb, 0x66, 0x5c, 0xdc, 0x15, 0x0d, 0x25, 0x72, 0xf5, 0x19, 0x52, 0xf6, 0xce, 0x67, 0x1d, 0xe4, 0xc5, 0x16, 0x3e, 0xad, 0x24, 0x96, 0x7c, 0x7e, 0x60, 0xc9, 0xf1, 0x55, 0x98, 0x0b, 0x14, 0x3e, 0xef, 0xd0, 0x2f, 0xb7, 0x95, 0xd2, 0xe2, 0x1e, 0xcd, 0xb7, 0xb6, 0xa7, 0x49, 0x78, 0x8e, 0x38, 0x14, 0xeb, 0xde, 0x0b, 0xbc, 0x2c, 0x1b, 0xd6, 0x4a, 0xe1, 0xba, 0xf1, 0x7c, 0xfd, 0xe6, 0x80, 0x38, 0xed, 0xd1, 0x4d, 0x7e, 0x94, 0xea, 0xf1, 0x7a, 0x34, 0xc8, 0xaf, 0x2d, 0xe6, 0x7a, 0x31, 0x7f, 0x76, 0x43, 0xdd, 0xc6, 0x61, 0x74, 0x4e, 0xac, 0xdb, 0x27, 0x1f, 0x70, 0x7a, 0x86, 0x48, 0xd4, 0x8c, 0xa9, 0x92, 0xb6, 0x3b, 0x3d, 0x65, 0x51, 0x8f, 0xfe, 0x55, 0x06, 0x52, 0xbd, 0x0d, 0xda, 0x52, 0x52, 0xbf, 0x79, 0xdb, 0x6b, 0xed, 0xa4, 0xd8, 0xe5, 0x95, 0xe4, 0x7f, 0xf3, 0x35, 0x47, 0xbd, 0xd8, 0xb5, 0xb1, 0x2d, 0xde, 0x00, 0x19, 0xc9, 0x18, 0xcf, 0xd2, 0x38, 0x5d, 0xb4, 0xfe, 0xbe, 0x58, 0x57, 0x7f, 0xd7, 0x92, 0x13, 0xfd, 0x3f, 0xa6, 0xb2, 0xf8, 0x52, 0x0d, 0xda, 0xe0, 0xc5, 0x3e, 0x9b, 0x6c, 0xbe, 0xe9, 0x79, 0xe8, 0x7d, 0x9c, 0x73, 0x5a, 0x9d, 0x0a, 0xc9, 0x9f, 0xd2, 0x01, 0xd2, 0xeb, 0x7c, 0x43, 0x3c, 0xe0, 0x29, 0xc5, 0x78, 0xf5, 0x2f, 0xfa, 0x31, 0x95, 0xb0, 0xad, 0x3e, 0x52, 0x94, 0xb9, 0x02, 0xbf, 0x19, 0x18, 0xdc, 0xc4, 0xbf, 0xbf, 0x39, 0x47, 0x7e, 0xd0, 0x85, 0x0a, 0x47, 0x83, 0x76, 0x46, 0x09, 0x78, 0x1a, 0x13, 0x20, 0x0e, 0x6d, 0x7b, 0xcd, 0x1d, 0xf2, 0x34, 0x0b, 0xac, 0x9e, 0x72, 0x25, 0x13, 0xd9, 0x31, 0xc0, 0xf7, 0x65, 0x01, 0xb3, 0x63, 0xa1, 0xd8, 0xbb, 0x1f, 0xaf, 0xad, 0xa4, 0x71, 0x71, 0x9d, 0xda, 0xe9, 0x95, 0xbc, 0x2e, 0x23, 0x34, 0x0a, 0x26, 0xb6, 0xf6, 0xe8, 0xeb, 0xf5, 0x9b, 0x1f, 0x3d, 0x8c, 0x96, 0xce, 0xe3, 0x96, 0x7e, 0xeb, 0xb0, 0x7d, 0x5a, 0x22, 0x67, 0x6f, 0x57, 0xdc, 0x18, 0x02, 0x17, 0x10, 0x4b, 0x2e, 0xee, 0xeb, 0xdf, 0x4d, 0x25, 0xcb, 0x4e, 0xeb, 0xed, 0x9e, 0x8b, 0x76, 0xb7, 0xb2, 0x1e, 0x80, 0x42, 0xa3, 0x4f, 0x09, 0x3f, 0x68, 0x52, 0x5b, 0x71, 0xba, 0x8e, 0x8b, 0x83, 0x12, 0x4e, 0x3e, 0x99, 0xe1, 0x8b, 0x83, 0xf6, 0xc0, 0xf8, 0xa9, 0x89, 0x9f, 0x6c, 0xb1, 0x87, 0xb4, 0x31, 0x77, 0x4d, 0x9e, 0x15, 0xa2, 0xc7, 0x35, 0xde, 0x5a, 0x3b, 0xd7, 0x1c, 0xf3, 0xc8, 0x79, 0x71, 0xfe, 0x25, 0x28, 0x91, 0x8b, 0x29, 0x11, 0xef, 0x95, 0x79, 0xa4, 0xa7, 0xec, 0x85, 0xe4, 0x84, 0x1c, 0x6e, 0x05, 0x07, 0x93, 0x2b, 0xce, 0xdb, 0xb1, 0xf1, 0x19, 0x3d, 0xac, 0xd1, 0x27, 0x37, 0x49, 0x9d, 0xdb, 0x5e, 0x03, 0xb7, 0x93, 0xea, 0x5d, 0xa7, 0x40, 0xdd, 0xa7, 0xa3, 0xed, 0x59, 0x5f, 0x34, 0x57, 0x78, 0x47, 0xe7, 0x9e, 0x6d, 0x8b, 0xee, 0x96, 0x9e, 0x8a, 0xe7, 0x30, 0x34, 0x8e, 0x7f, 0xf1, 0x34, 0x8a, 0x94, 0x27, 0x67, 0x04, 0xa4, 0xa7, 0x38, 0x3c, 0x71, 0x7f, 0x74, 0xb7, 0xf1, 0xbe, 0xb8, 0x53, 0x8b, 0x6d, 0x23, 0x3d, 0xfe, 0xd8, 0x8c, 0x00, 0x42, 0xad, 0x13, 0xbe, 0x79, 0x5d, 0xf1, 0x83, 0x97, 0xcd, 0x95, 0x3a, 0x9d, 0x8d, 0x12, 0x9f, 0x98, 0x5a, 0xaf, 0xd8, 0x84, 0x55, 0xca, 0xb4, 0x44, 0x76, 0xf4, 0xc7, 0x34, 0x3d, 0x6e, 0xe6, 0x53, 0xeb, 0xeb, 0xb6, 0xd7, 0x6f, 0xd6, 0xbd, 0xbf, 0x9f, 0xe2, 0x53, 0xdb, 0x99, 0x6a, 0x2f, 0xa6, 0xeb, 0xe7, 0x61, 0xf5, 0xe4, 0x0d, 0x34, 0xe8, 0x50, 0xca, 0x8a, 0xfe, 0xd3, 0xcf, 0x91, 0x64, 0x0d, 0x30, 0xd6, 0xf8, 0x94, 0x67, 0x91, 0xf9, 0x3e, 0xcd, 0x6f, 0x0e, 0x9f, 0x16, 0x79, 0x13, 0x5d, 0x4c, 0xdd, 0xa7, 0x1f, 0x53, 0x76, 0x2b, 0x24, 0xab, 0x3c, 0x8c, 0xb3, 0xea, 0x44, 0xb6, 0x1c, 0xf8, 0xa7, 0xc1, 0xaf, 0x62, 0x0e, 0xf2, 0x85, 0x1c, 0x66, 0xf0, 0x6f, 0xc1, 0x84, 0x3d, 0x9a, 0x8c, 0x4f, 0xb7, 0x96, 0x53, 0xf6, 0x44, 0x8e, 0x15, 0xfd, 0x98, 0x7d, 0x5b, 0x54, 0xcb, 0x01, 0x79, 0xa3, 0xee, 0xe9, 0x4e, 0xe8, 0xff, 0xc9, 0x6c, 0xef, 0x6b, 0x16, 0xd6, 0xc0, 0xbf, 0x4f, 0xb7, 0x06, 0x16, 0xfb, 0x93, 0xbd, 0xc1, 0x73, 0xc6, 0x71, 0x9f, 0xf3, 0x43, 0xa0, 0x3e, 0x15, 0xac, 0xc9, 0x35, 0x23, 0x03, 0x98, 0x32, 0xd5, 0x6d, 0xbf, 0x23, 0x20, 0xf5, 0x8e, 0x85, 0xd9, 0xc4, 0x7b, 0xdf, 0xd8, 0xfb, 0x4c, 0xf1, 0xbe, 0x69, 0xec, 0xfd, 0x2e, 0xf1, 0xbe, 0x45, 0x9c, 0x91, 0xf6, 0x63, 0x3d, 0xac, 0x56, 0x84, 0x6d, 0x1f, 0x4b, 0xd3, 0x28, 0xde, 0x77, 0x8e, 0xbd, 0x77, 0x89, 0xf7, 0x27, 0x84, 0x5f, 0xae, 0x1f, 0x4b, 0xbd, 0x18, 0x89, 0x1f, 0xe1, 0xde, 0xc7, 0x7b, 0x12, 0xb8, 0x6f, 0xc2, 0xfd, 0x14, 0xee, 0xec, 0x0d, 0xfb, 0x04, 0xee, 0xdb, 0x79, 0xb7, 0x0b, 0xf7, 0x9d, 0xec, 0x29, 0x45, 0x8c, 0xdb, 0x43, 0xdc, 0xd6, 0x33, 0x6c, 0xba, 0x87, 0x9b, 0x4e, 0xe4, 0xc5, 0xa1, 0xcf, 0x06, 0xcf, 0x49, 0x15, 0x69, 0x94, 0x5d, 0x45, 0xb8, 0xeb, 0x8e, 0x4e, 0xb2, 0x12, 0x49, 0x9e, 0x47, 0x0f, 0x33, 0x2e, 0x66, 0x34, 0x62, 0x86, 0x5e, 0x99, 0xea, 0x7f, 0x92, 0x2f, 0xb1, 0xda, 0x5e, 0x28, 0x6d, 0x8f, 0x75, 0x39, 0x0a, 0xa5, 0xde, 0xfa, 0x6e, 0xf6, 0x49, 0x25, 0x3c, 0x79, 0x06, 0x35, 0x2f, 0x56, 0xac, 0x67, 0x27, 0x7c, 0x08, 0xb1, 0xb5, 0xf4, 0x88, 0x56, 0xb3, 0xd0, 0x0f, 0xab, 0x90, 0xcf, 0x6f, 0x9f, 0xaa, 0xdb, 0x8a, 0xef, 0xdb, 0xc4, 0x09, 0x7d, 0x4e, 0xdd, 0x6f, 0x23, 0x20, 0x0a, 0xfd, 0x50, 0x84, 0x37, 0x71, 0x78, 0x5c, 0x86, 0xa4, 0xab, 0x9f, 0x13, 0xf1, 0xd1, 0x13, 0xa0, 0xeb, 0xa8, 0x3d, 0xde, 0x7d, 0x18, 0xe3, 0x7b, 0x85, 0x0e, 0x99, 0xf0, 0x29, 0xb4, 0x78, 0xdc, 0x1b, 0xf3, 0x5e, 0x61, 0xd9, 0x8a, 0xfe, 0xe2, 0x40, 0xbf, 0x49, 0xe9, 0xf9, 0xa5, 0xbc, 0x4f, 0xcb, 0x6e, 0x63, 0x6c, 0x11, 0xf7, 0x23, 0x71, 0x6a, 0xa8, 0x2b, 0x24, 0x2f, 0x15, 0x67, 0x06, 0xea, 0xbe, 0x7a, 0x9c, 0x01, 0xf6, 0xa4, 0x50, 0xbf, 0x39, 0x41, 0x52, 0x48, 0x0e, 0xac, 0x42, 0xde, 0xb1, 0x9e, 0x76, 0x75, 0xcf, 0xce, 0xf8, 0x65, 0x39, 0xe3, 0xbd, 0xbe, 0xf6, 0x8a, 0xc1, 0x2e, 0x71, 0xae, 0xcf, 0x2b, 0x13, 0xac, 0xb6, 0xf7, 0xc6, 0xf9, 0x34, 0x0b, 0xc9, 0xeb, 0xe6, 0x13, 0x07, 0x3f, 0xa9, 0x17, 0x67, 0xe4, 0x91, 0x64, 0x92, 0x9b, 0xd5, 0xbd, 0xb7, 0x87, 0x28, 0xbf, 0xbc, 0x93, 0x4a, 0xfe, 0xf5, 0xf0, 0x1a, 0x0a, 0x85, 0x43, 0xd5, 0x6b, 0x8f, 0xbe, 0xfd, 0x1d, 0xcf, 0xb6, 0x59, 0x88, 0x21, 0xe3, 0x8b, 0xeb, 0x1e, 0x04, 0xe5, 0x8c, 0x56, 0xc7, 0x85, 0x17, 0xe7, 0xf6, 0x69, 0x43, 0xbb, 0x8d, 0x31, 0x60, 0xec, 0x28, 0x72, 0x3c, 0x1e, 0xbc, 0xa0, 0x9e, 0x2e, 0x8c, 0xa8, 0x27, 0xc5, 0x69, 0xa8, 0xc3, 0xf2, 0x42, 0xef, 0xa4, 0x14, 0x84, 0xe5, 0xb3, 0xd4, 0xb3, 0xf5, 0x9b, 0xa3, 0xe1, 0x78, 0x54, 0xbe, 0xd5, 0x8e, 0x12, 0xef, 0xef, 0x4a, 0xfb, 0xe6, 0x12, 0x7f, 0xa3, 0xfb, 0x2e, 0x9d, 0xf0, 0x15, 0x60, 0x13, 0xa7, 0x1b, 0x7a, 0xdd, 0xd2, 0x16, 0xef, 0x2c, 0xf5, 0x22, 0x28, 0xdf, 0x46, 0xd1, 0x6b, 0x9e, 0x51, 0xcf, 0xc7, 0xa5, 0xd5, 0x86, 0xd8, 0xba, 0x45, 0x0f, 0xd7, 0x3f, 0xf2, 0xe2, 0xba, 0xa5, 0xa4, 0x2e, 0x61, 0xdf, 0x10, 0xa9, 0xda, 0x8c, 0x76, 0xeb, 0x5f, 0x8e, 0xca, 0x6e, 0x69, 0xa7, 0x38, 0xe3, 0x4f, 0x9a, 0x77, 0x65, 0xb4, 0xae, 0x6e, 0x9b, 0x1e, 0x7e, 0xd9, 0x8e, 0xf0, 0xfb, 0xf9, 0x04, 0x48, 0x49, 0x68, 0x25, 0x7a, 0x90, 0xe3, 0x68, 0x22, 0x4b, 0xaf, 0xbb, 0x45, 0x99, 0x0e, 0xfa, 0xc0, 0x73, 0xff, 0xbb, 0xce, 0x3a, 0x3b, 0xc2, 0xbe, 0x04, 0x4e, 0x94, 0xb1, 0x4b, 0x07, 0x68, 0x05, 0xa8, 0x88, 0x15, 0xa9, 0x2f, 0xc7, 0xd7, 0x22, 0xef, 0xde, 0xf6, 0xa9, 0xc2, 0xf3, 0xd9, 0x81, 0x76, 0x03, 0x7e, 0x07, 0x72, 0xca, 0x69, 0x8a, 0x78, 0x3f, 0xc4, 0xbe, 0x17, 0x70, 0x1d, 0xc1, 0x35, 0x88, 0xbc, 0x66, 0xa9, 0x7b, 0x45, 0x6e, 0xc7, 0x30, 0x43, 0xb3, 0x6f, 0x5a, 0x3f, 0x6a, 0x7e, 0x98, 0x73, 0x06, 0x15, 0xb0, 0x70, 0xdb, 0x0a, 0xaf, 0x68, 0x47, 0x81, 0x83, 0x03, 0xc0, 0xc1, 0x71, 0x9d, 0x4a, 0x1c, 0x4d, 0xf7, 0xaf, 0xd5, 0x46, 0x02, 0xba, 0x00, 0x39, 0x85, 0x3f, 0x2f, 0x0d, 0x86, 0x2c, 0xce, 0x23, 0xfa, 0x23, 0x72, 0x26, 0x64, 0xb4, 0x48, 0x24, 0x1a, 0x4e, 0x84, 0x39, 0x15, 0xb1, 0x06, 0xa0, 0x55, 0xd7, 0xce, 0x1e, 0xfe, 0xbd, 0x03, 0xdf, 0x7b, 0x38, 0xa5, 0x19, 0x72, 0x20, 0xd3, 0x40, 0xc6, 0x82, 0x77, 0x26, 0x68, 0xd9, 0xfe, 0xab, 0x2e, 0x48, 0x0b, 0x88, 0x19, 0x9f, 0xaf, 0x01, 0xf1, 0x5e, 0xf6, 0xf0, 0x20, 0xac, 0xae, 0x37, 0x69, 0xd4, 0x49, 0xd0, 0xe6, 0x5c, 0xd6, 0x0e, 0x94, 0x57, 0x4a, 0x65, 0x1a, 0x97, 0x80, 0xbe, 0x5c, 0x02, 0x4e, 0x15, 0xdc, 0xa3, 0x58, 0xc3, 0xb1, 0x88, 0xfe, 0x0d, 0x8e, 0xbe, 0xe6, 0xca, 0x95, 0xa3, 0x75, 0xdb, 0xf5, 0x37, 0xa7, 0xa6, 0x6d, 0x2b, 0xac, 0x37, 0xa6, 0x25, 0x52, 0x69, 0x2c, 0x4c, 0x79, 0xf5, 0xe7, 0xfc, 0xba, 0xfd, 0x57, 0x9e, 0x4a, 0x3f, 0x63, 0x99, 0xf5, 0x11, 0x17, 0x6b, 0x27, 0x58, 0x5d, 0x62, 0xea, 0x99, 0x28, 0x06, 0x1d, 0xb5, 0x8a, 0x33, 0xd1, 0x9b, 0x29, 0xb7, 0xbd, 0x60, 0xe8, 0x47, 0xa2, 0xbf, 0x5d, 0xd2, 0x69, 0xaa, 0xe5, 0x66, 0x5a, 0xf3, 0x8c, 0x2d, 0x7d, 0x54, 0x5d, 0x12, 0x3c, 0x13, 0x68, 0x21, 0x7b, 0x1c, 0x10, 0x56, 0x1f, 0xd3, 0xd0, 0x8e, 0xeb, 0xc1, 0xf3, 0xd8, 0x45, 0x3d, 0xd6, 0x54, 0x8e, 0x90, 0x79, 0xc6, 0x3d, 0xe4, 0xee, 0xc8, 0x3d, 0xda, 0x27, 0x87, 0x66, 0xd4, 0x93, 0x7f, 0xc1, 0xfb, 0x08, 0xb9, 0x97, 0x8a, 0x04, 0xbd, 0x42, 0x1f, 0x6a, 0xcb, 0x1a, 0x04, 0x95, 0xf2, 0x32, 0xcf, 0xe3, 0x44, 0xed, 0xcc, 0x68, 0xa1, 0x4b, 0x75, 0xdb, 0x81, 0xb5, 0x4b, 0xf6, 0xdd, 0x98, 0xef, 0x90, 0xca, 0x79, 0xcb, 0x3d, 0x3d, 0xde, 0x0c, 0x60, 0x64, 0x8b, 0x38, 0x31, 0x72, 0xbb, 0x1c, 0x92, 0xd1, 0x3a, 0x29, 0x9a, 0xe8, 0xcd, 0x90, 0x41, 0x5f, 0x16, 0x27, 0xb5, 0x1c, 0xea, 0xb6, 0x7b, 0xb4, 0x38, 0xab, 0xd0, 0x65, 0x15, 0x1e, 0xc8, 0x31, 0x8f, 0xb0, 0xb7, 0x30, 0x77, 0xc2, 0x66, 0x5f, 0x4e, 0xf6, 0xfa, 0x0d, 0xf6, 0xe4, 0x97, 0x96, 0x93, 0x9f, 0x2c, 0xf8, 0x2d, 0x22, 0x73, 0x68, 0x17, 0xb9, 0xc7, 0xe8, 0x7a, 0x29, 0xfb, 0x2e, 0x46, 0x7d, 0xac, 0x6c, 0x4f, 0x1f, 0x6a, 0x56, 0xaf, 0xcd, 0xa8, 0xc5, 0x9c, 0xd1, 0x08, 0x1e, 0x31, 0x47, 0x3f, 0xd9, 0xe6, 0x6c, 0x61, 0xad, 0xfa, 0x81, 0x8e, 0x93, 0xb3, 0x69, 0xbe, 0xf4, 0x92, 0x18, 0xb1, 0x1f, 0xef, 0xd3, 0xf6, 0x78, 0x9b, 0x04, 0x57, 0xcf, 0xbb, 0x3c, 0x0e, 0xf6, 0x34, 0x26, 0x7b, 0xd8, 0x93, 0x4f, 0x1b, 0xb8, 0xc1, 0x31, 0x5f, 0x7d, 0xb9, 0x85, 0x2b, 0x8d, 0xf7, 0x69, 0x79, 0xa1, 0x57, 0x5e, 0x43, 0x9d, 0x3f, 0x52, 0x64, 0x71, 0xca, 0x10, 0x7b, 0x7d, 0x47, 0x79, 0xed, 0xd9, 0x43, 0x3f, 0x16, 0x2d, 0x71, 0x16, 0x65, 0x7e, 0x20, 0xbc, 0x88, 0x7d, 0x74, 0x7d, 0xa9, 0x2e, 0x4d, 0x5b, 0x64, 0x8d, 0xf0, 0x19, 0x53, 0xc0, 0xa7, 0x13, 0x2d, 0xda, 0x1c, 0x6d, 0xe6, 0x95, 0x37, 0xcd, 0x16, 0xf8, 0x9a, 0xa2, 0xf5, 0x03, 0x7c, 0x73, 0x05, 0xd8, 0xeb, 0xf5, 0x5a, 0xaa, 0xae, 0x5c, 0xde, 0x55, 0xb7, 0x55, 0x0f, 0xfb, 0x18, 0xd4, 0xb9, 0x57, 0x9c, 0xd3, 0x6a, 0xa9, 0xdb, 0xda, 0xf6, 0x97, 0xec, 0xe7, 0x89, 0xeb, 0x97, 0xd2, 0x48, 0xbf, 0x1b, 0x6d, 0xa3, 0x7e, 0x84, 0xdf, 0xcb, 0xe2, 0xcc, 0x5c, 0xf0, 0x18, 0x7a, 0xe9, 0x96, 0xd4, 0xe9, 0xc7, 0x8a, 0x11, 0x9c, 0xbd, 0x9d, 0x7d, 0x1b, 0x17, 0x18, 0x35, 0xdd, 0x6c, 0x61, 0x9d, 0xa0, 0x4b, 0x0e, 0xbc, 0x12, 0xe0, 0xa8, 0x57, 0x64, 0xcd, 0x92, 0x3b, 0x9e, 0xa7, 0xed, 0xc6, 0xb2, 0x07, 0xc4, 0x17, 0x77, 0x91, 0x27, 0xce, 0x3b, 0xc4, 0x2e, 0x25, 0x4b, 0x5f, 0x69, 0x3b, 0xc1, 0x3c, 0x78, 0x38, 0xc5, 0xa9, 0x7a, 0x49, 0x06, 0xdf, 0xe3, 0x60, 0x7b, 0xc4, 0x79, 0x67, 0xa5, 0x8a, 0xb4, 0x33, 0x5b, 0xee, 0x73, 0x83, 0xe3, 0x58, 0x70, 0x45, 0xdd, 0xa9, 0xb8, 0xa2, 0x3d, 0x18, 0x69, 0x2c, 0x13, 0x6b, 0xeb, 0x99, 0x16, 0xee, 0x95, 0xda, 0x3b, 0x9f, 0x95, 0x2e, 0x4e, 0x96, 0xb1, 0xc6, 0xb3, 0xdc, 0x5f, 0x11, 0x27, 0x9c, 0x0c, 0x01, 0xf7, 0x69, 0x27, 0xbf, 0x08, 0xab, 0x9e, 0x3f, 0x74, 0x5e, 0xf5, 0x29, 0xfd, 0xbc, 0xea, 0x74, 0xbe, 0xe4, 0xf5, 0x3f, 0x87, 0x53, 0x19, 0xf3, 0xaf, 0x8e, 0xfa, 0xb0, 0x1f, 0x56, 0xde, 0xeb, 0x73, 0xad, 0x34, 0xe4, 0x0a, 0xaf, 0x60, 0x9d, 0x6c, 0x99, 0x16, 0xe3, 0xb3, 0x32, 0x80, 0x0f, 0xf4, 0x34, 0x97, 0x62, 0xfa, 0xe9, 0x59, 0x72, 0xc5, 0x4d, 0xb1, 0x46, 0xca, 0x56, 0x8a, 0xbc, 0xb5, 0x54, 0x20, 0x3d, 0xad, 0xaa, 0xea, 0x87, 0x94, 0x0f, 0xb9, 0xca, 0x5a, 0xc9, 0x27, 0x8d, 0x84, 0x12, 0x66, 0xf1, 0xad, 0x55, 0x31, 0x79, 0xe6, 0xeb, 0x76, 0x43, 0xec, 0x31, 0xec, 0xa0, 0x78, 0x5b, 0x35, 0xee, 0x91, 0x3d, 0xf2, 0xde, 0x6c, 0xbf, 0x43, 0x5f, 0x27, 0x12, 0x67, 0xad, 0x71, 0x69, 0xd9, 0xe2, 0x64, 0x8e, 0x6c, 0x3f, 0xca, 0x15, 0xd6, 0xc5, 0x9e, 0x68, 0x20, 0xbe, 0x2a, 0x1a, 0x6c, 0x8e, 0x3b, 0x1b, 0x41, 0xf3, 0xb6, 0x25, 0xee, 0x07, 0x1f, 0x47, 0x34, 0x25, 0xc1, 0x32, 0x9b, 0x4b, 0x71, 0x3b, 0x6f, 0xd5, 0xdf, 0xa7, 0xdb, 0x85, 0xad, 0x85, 0x6a, 0x6c, 0xbb, 0xf6, 0xf2, 0x8f, 0x89, 0xcf, 0x85, 0xc8, 0x66, 0x09, 0x1d, 0x65, 0x23, 0xf4, 0xda, 0x01, 0x67, 0x65, 0x74, 0x5b, 0x7c, 0x48, 0x29, 0x4f, 0xa5, 0xe2, 0x78, 0xe1, 0xe3, 0xc9, 0x95, 0x9e, 0x4a, 0x29, 0xe0, 0x5c, 0xc5, 0x99, 0x20, 0x1e, 0xc5, 0x1a, 0x0d, 0x34, 0x59, 0x8a, 0xca, 0x0d, 0x90, 0x83, 0xc5, 0x37, 0xdb, 0xc5, 0x2f, 0xe0, 0xaf, 0xdd, 0xa4, 0x49, 0xf5, 0xce, 0x56, 0xcd, 0x77, 0xd2, 0xaf, 0xcf, 0x51, 0x0e, 0xb8, 0x36, 0x39, 0x91, 0x0b, 0x3e, 0x38, 0xcf, 0xeb, 0xc2, 0x88, 0x67, 0xe9, 0x7d, 0x35, 0xf2, 0x92, 0xeb, 0x37, 0x3b, 0xdc, 0xe4, 0x48, 0xc8, 0x18, 0xf9, 0xe5, 0xb8, 0x4a, 0x53, 0xeb, 0x8e, 0x83, 0x49, 0x7b, 0x68, 0x30, 0x99, 0xe6, 0x49, 0x8a, 0x25, 0xf6, 0x89, 0xdf, 0x97, 0xb2, 0xc4, 0xce, 0xd4, 0x90, 0xa5, 0x7f, 0xe1, 0xb1, 0xc9, 0xec, 0x48, 0x79, 0x6d, 0x9a, 0x49, 0x39, 0xf6, 0x15, 0x94, 0x67, 0x9f, 0x89, 0xd9, 0xad, 0x6b, 0xcf, 0x2e, 0xc8, 0x40, 0x16, 0xe1, 0x03, 0x20, 0x53, 0x4e, 0xf2, 0x0a, 0xb5, 0xbd, 0xdd, 0x4c, 0x8e, 0x15, 0xe0, 0x5c, 0x22, 0xa0, 0xcb, 0x35, 0x42, 0x8b, 0x37, 0x1f, 0xe1, 0x6f, 0xb2, 0x8f, 0x30, 0xee, 0x09, 0x6d, 0x99, 0x03, 0x6c, 0x1d, 0xc7, 0xd4, 0xc6, 0x6c, 0x3f, 0x20, 0xd6, 0xf1, 0x78, 0xbf, 0x57, 0x3c, 0xb5, 0x19, 0xea, 0xbe, 0x15, 0x0a, 0x8c, 0xd1, 0xa4, 0x1c, 0xee, 0x4d, 0x72, 0x9b, 0x99, 0x84, 0xed, 0x2b, 0xbe, 0x25, 0x33, 0x72, 0x35, 0xda, 0x79, 0x7c, 0xbf, 0xa9, 0xaf, 0xaf, 0x23, 0xf4, 0xd7, 0x23, 0x48, 0x99, 0x93, 0xc8, 0x41, 0x3e, 0x63, 0x35, 0xf8, 0x64, 0x55, 0x68, 0x2b, 0xea, 0xaf, 0xf9, 0xbe, 0xe4, 0x5c, 0x00, 0x39, 0xfb, 0x9d, 0x7a, 0xeb, 0x2c, 0xd2, 0x82, 0xea, 0x38, 0x1a, 0x29, 0xaf, 0x7f, 0xb7, 0xf4, 0x64, 0x9c, 0x69, 0x91, 0x59, 0x7e, 0x54, 0x71, 0x63, 0x56, 0xee, 0x45, 0x7d, 0xf8, 0x44, 0x23, 0x0e, 0xf9, 0x11, 0x9f, 0xec, 0x64, 0xbf, 0xe7, 0x66, 0x35, 0xe1, 0x5c, 0xff, 0x14, 0x08, 0x41, 0x35, 0xf7, 0x09, 0xaf, 0xe5, 0xfa, 0x0c, 0x80, 0xef, 0x4b, 0x99, 0x1a, 0x83, 0x82, 0x95, 0xb3, 0xa5, 0x0e, 0xf3, 0x4d, 0xa0, 0x6d, 0x07, 0x1c, 0x14, 0x63, 0xfe, 0x6f, 0x00, 0x9c, 0xc8, 0x21, 0x71, 0xc6, 0xfa, 0x61, 0x50, 0x36, 0x31, 0x7b, 0xf3, 0x49, 0xed, 0xa2, 0x75, 0xad, 0x62, 0xc6, 0x42, 0xbd, 0x46, 0xbf, 0xa7, 0xb5, 0x6c, 0x74, 0x37, 0x7b, 0xbd, 0x31, 0x6c, 0x8c, 0xf2, 0x8a, 0x3c, 0x19, 0xba, 0xe5, 0x98, 0xa7, 0x10, 0x33, 0xf9, 0xfa, 0xc2, 0x6a, 0xf5, 0x38, 0x68, 0x26, 0xe7, 0x7b, 0x52, 0xa7, 0x88, 0xc7, 0x53, 0x14, 0x11, 0xbc, 0xba, 0xcc, 0x9c, 0x84, 0xa1, 0xde, 0x71, 0xcb, 0x5f, 0x77, 0x8b, 0x1c, 0xa5, 0xb4, 0xf9, 0xc5, 0x58, 0x73, 0x65, 0x34, 0xa6, 0xcd, 0x9e, 0x3c, 0xa3, 0xb5, 0x4f, 0x1e, 0xfa, 0xb1, 0x7e, 0xaa, 0xf3, 0xa8, 0x98, 0x49, 0x35, 0x1e, 0x1b, 0x14, 0xcf, 0xc3, 0x33, 0xca, 0x7a, 0xaf, 0x09, 0xdf, 0x14, 0xe8, 0xb3, 0x6d, 0x7a, 0x3e, 0x05, 0x13, 0x52, 0x5f, 0x9c, 0x98, 0x4f, 0xea, 0x8c, 0xf1, 0x0e, 0xf3, 0xde, 0xe4, 0xd2, 0xfc, 0xbd, 0xcf, 0xa8, 0x17, 0x97, 0x99, 0x98, 0x9b, 0x48, 0x64, 0x77, 0xde, 0x32, 0xa3, 0x9a, 0x5c, 0xb7, 0x75, 0x82, 0x7b, 0xf0, 0x28, 0x05, 0xed, 0xb7, 0xcd, 0x08, 0x8a, 0x37, 0x03, 0x79, 0x3a, 0x8c, 0x7b, 0x93, 0xcb, 0xb2, 0x72, 0xcb, 0xc9, 0xf0, 0xee, 0xee, 0x7b, 0x42, 0x8a, 0xd4, 0x61, 0xf5, 0x34, 0x52, 0x81, 0xcb, 0x4d, 0x2e, 0x37, 0x7a, 0xb6, 0x13, 0x3d, 0x5b, 0xac, 0x89, 0x7b, 0x6a, 0x52, 0x7b, 0xea, 0xc4, 0x73, 0x3c, 0xaf, 0xbf, 0x01, 0x27, 0xd5, 0xf5, 0x02, 0x27, 0xec, 0x9f, 0x8b, 0xf9, 0x42, 0xd0, 0xee, 0xd3, 0xb8, 0xce, 0xdc, 0x5d, 0xa9, 0x8e, 0xdc, 0x5d, 0x85, 0xf9, 0x23, 0xac, 0x9e, 0xd7, 0xbd, 0xe4, 0x1f, 0x4f, 0x79, 0xc9, 0x07, 0x87, 0x7c, 0x5b, 0x3f, 0x9f, 0x32, 0xe7, 0xfe, 0xfb, 0x5f, 0x2a, 0x6c, 0x17, 0xee, 0x78, 0xf3, 0x97, 0x56, 0x6b, 0xc2, 0x38, 0x28, 0x59, 0x93, 0xb1, 0x87, 0x79, 0x24, 0xf1, 0x88, 0xe2, 0x32, 0xfa, 0x1f, 0x5e, 0x32, 0x3c, 0xee, 0xa3, 0x73, 0x71, 0xa7, 0xba, 0x5d, 0x9f, 0xf9, 0x8f, 0xa4, 0x3c, 0xc5, 0xf0, 0x4c, 0x79, 0x77, 0x33, 0x65, 0xab, 0x83, 0xa5, 0xcd, 0xe8, 0x2d, 0x85, 0x52, 0x9f, 0xe0, 0xa4, 0x2f, 0xb6, 0x67, 0x30, 0x1f, 0x91, 0xe2, 0xf2, 0xa3, 0x8d, 0x54, 0x04, 0xfe, 0xb9, 0x45, 0x6b, 0x55, 0x29, 0xae, 0xb5, 0xaa, 0x74, 0x3f, 0xea, 0x90, 0x8b, 0xf2, 0x6d, 0x18, 0xc7, 0xa5, 0xe8, 0x07, 0xe5, 0xa8, 0xb3, 0x0f, 0xf5, 0x2d, 0x76, 0x4b, 0xe1, 0x75, 0xfb, 0x7b, 0x5b, 0x48, 0x2a, 0x47, 0xb5, 0x29, 0xbc, 0xfe, 0x40, 0x0f, 0x9e, 0x7d, 0x7b, 0x7a, 0x5b, 0x49, 0x72, 0x3f, 0xff, 0x0a, 0x7e, 0x1d, 0xd1, 0xde, 0xa6, 0xac, 0x22, 0x63, 0xf8, 0xa1, 0xa3, 0xbd, 0xab, 0xc1, 0x91, 0xaf, 0xa5, 0x68, 0x4f, 0x93, 0xc5, 0x93, 0x11, 0x5e, 0xef, 0xa6, 0x13, 0x3d, 0xcc, 0xa3, 0x77, 0xd2, 0xd6, 0x6e, 0xd9, 0xbc, 0xa5, 0x7b, 0x4f, 0x6f, 0x93, 0x71, 0x7b, 0xef, 0xd1, 0xae, 0xfe, 0x9e, 0x26, 0xe3, 0x89, 0xe4, 0xe3, 0x3d, 0x3c, 0xbb, 0x32, 0x37, 0xac, 0x4b, 0x2a, 0x8f, 0x63, 0xc6, 0x1c, 0x44, 0x8f, 0x09, 0x89, 0x33, 0x7a, 0x3d, 0xa2, 0xee, 0xcc, 0x6d, 0x1e, 0x49, 0xd1, 0x12, 0x4f, 0x00, 0x6d, 0x6e, 0x1a, 0x7b, 0x63, 0xdf, 0x3b, 0x47, 0xd0, 0xd6, 0x93, 0x52, 0x21, 0x27, 0x93, 0x27, 0x77, 0x93, 0x43, 0x8e, 0xa1, 0x26, 0x72, 0x45, 0xc6, 0xdd, 0x61, 0x75, 0x10, 0xa3, 0xc0, 0xd8, 0x36, 0x55, 0xe7, 0x17, 0x86, 0xd8, 0xbb, 0x13, 0x42, 0xdf, 0x46, 0x7b, 0x0c, 0x23, 0xdf, 0x53, 0xdc, 0x36, 0xb8, 0x46, 0xee, 0x0e, 0xa9, 0x67, 0xd9, 0xff, 0x68, 0x21, 0xe0, 0x51, 0x4f, 0xe8, 0x3d, 0x79, 0x28, 0xd5, 0x93, 0xc5, 0xc9, 0x80, 0xab, 0xea, 0x37, 0x33, 0xe5, 0x12, 0xfa, 0x46, 0xb7, 0xec, 0xe1, 0xf6, 0x72, 0xd9, 0xd1, 0xde, 0x8b, 0x98, 0xbb, 0x1f, 0x42, 0xde, 0xc7, 0xd0, 0xee, 0x27, 0x0a, 0xeb, 0x90, 0x77, 0x58, 0x3d, 0x85, 0xfc, 0x4f, 0x23, 0xcf, 0x33, 0xc8, 0x73, 0x44, 0x29, 0x6a, 0xff, 0x3c, 0x9f, 0xe1, 0xfb, 0xc7, 0xd2, 0xa1, 0x65, 0xc4, 0x7c, 0x7f, 0x7d, 0xe9, 0xf5, 0x9b, 0x4b, 0x2c, 0xec, 0xff, 0x9e, 0x4b, 0xee, 0xfc, 0xcb, 0x93, 0x9c, 0x53, 0xb5, 0x3a, 0x04, 0x5e, 0x60, 0x10, 0x75, 0x99, 0xa7, 0x1e, 0xc7, 0xf7, 0x27, 0xf0, 0x7d, 0x6a, 0xfc, 0x0d, 0x29, 0x44, 0x1b, 0xd1, 0xc2, 0xab, 0xd8, 0x0b, 0xb3, 0x1c, 0x63, 0x98, 0x79, 0xf4, 0x03, 0x0f, 0x72, 0xe7, 0xd4, 0x93, 0x8c, 0x87, 0x6a, 0x0d, 0x0f, 0x28, 0xeb, 0x6d, 0x5c, 0x02, 0x0f, 0x80, 0x45, 0xeb, 0xa3, 0x29, 0x3c, 0x04, 0x34, 0x2c, 0x2c, 0xb8, 0x00, 0x38, 0xb2, 0xc7, 0x21, 0xf1, 0x59, 0x12, 0x25, 0xc2, 0x32, 0x06, 0xbd, 0x02, 0xb9, 0xfa, 0x56, 0xfd, 0x25, 0x9f, 0xa9, 0x51, 0x58, 0x09, 0x78, 0x82, 0x80, 0x26, 0x30, 0x11, 0x9a, 0xf4, 0x2f, 0x05, 0x8f, 0xfd, 0x94, 0xde, 0x5f, 0x8f, 0x0a, 0x8f, 0xb2, 0x3a, 0x77, 0x97, 0x92, 0xff, 0x98, 0x66, 0xfd, 0xf3, 0x79, 0xca, 0x09, 0x9e, 0xa3, 0x08, 0x68, 0xd3, 0x51, 0x6d, 0x0d, 0x48, 0x9c, 0xde, 0xb0, 0xff, 0x72, 0x35, 0xf8, 0x38, 0x41, 0x6d, 0x85, 0x25, 0x98, 0x4b, 0x7a, 0x92, 0x29, 0xc8, 0x82, 0x2b, 0x97, 0xad, 0x75, 0x3b, 0xd2, 0x62, 0x2e, 0xeb, 0x31, 0x56, 0xc1, 0x85, 0x08, 0x49, 0x27, 0x6e, 0x42, 0x9b, 0x1a, 0xd1, 0xe7, 0x59, 0x86, 0xe0, 0x67, 0xab, 0x7a, 0x99, 0x57, 0xf4, 0x31, 0xe2, 0x8c, 0xf1, 0x32, 0xd6, 0x4e, 0x7e, 0xfe, 0x1c, 0x05, 0x5a, 0x7c, 0xe2, 0x5c, 0x35, 0x5b, 0xf0, 0xa2, 0x4d, 0xc5, 0xbb, 0xaf, 0x59, 0x46, 0x4c, 0x36, 0x9e, 0xc2, 0x2d, 0x79, 0x22, 0x26, 0x5f, 0x8f, 0x29, 0x5e, 0x7c, 0x30, 0xd2, 0x1d, 0x06, 0x55, 0x08, 0x85, 0xfa, 0xd9, 0xda, 0xa6, 0x18, 0xe9, 0x72, 0x45, 0x0e, 0x9a, 0xa5, 0x3c, 0x72, 0x30, 0x6b, 0x39, 0xe4, 0x23, 0x26, 0x4f, 0xe4, 0x60, 0x15, 0x31, 0xf9, 0x7a, 0x4c, 0x71, 0x93, 0x51, 0xac, 0x54, 0x7a, 0x28, 0x4f, 0xf8, 0x0b, 0xe6, 0x35, 0xae, 0x0a, 0x41, 0xa3, 0x0c, 0x72, 0x03, 0xf0, 0x6a, 0x06, 0x5e, 0x0b, 0xee, 0x06, 0xed, 0x57, 0x3f, 0x2a, 0xc7, 0x58, 0x2c, 0x71, 0x53, 0x5e, 0x29, 0xc6, 0x65, 0x19, 0xf8, 0x85, 0x62, 0xb6, 0x50, 0xc1, 0x77, 0x6b, 0xff, 0xc2, 0x5e, 0xfd, 0x36, 0xcb, 0x06, 0x68, 0xfd, 0x42, 0xe6, 0x0c, 0x4f, 0xde, 0x1d, 0x45, 0x3f, 0xaa, 0x52, 0xcf, 0x14, 0x32, 0x87, 0x38, 0x82, 0xd6, 0x3c, 0x8f, 0xd6, 0xfc, 0xe0, 0xee, 0x3a, 0xc8, 0x99, 0x9a, 0xfc, 0x30, 0x7c, 0x3d, 0x75, 0x2e, 0x66, 0x7e, 0x75, 0x0c, 0x0e, 0xed, 0x4c, 0x06, 0xc8, 0x48, 0x7b, 0x19, 0x12, 0x7d, 0xf5, 0x6d, 0x16, 0xe4, 0xf5, 0xfd, 0xff, 0x51, 0x8d, 0x56, 0xcf, 0x8a, 0x0c, 0x88, 0xf6, 0x7b, 0x5a, 0x6f, 0xbf, 0x93, 0x7f, 0xa8, 0xfd, 0xd6, 0x46, 0xde, 0x7e, 0x78, 0xac, 0xed, 0x26, 0xd5, 0xed, 0xff, 0x78, 0xe3, 0xcd, 0xdb, 0xee, 0xe3, 0x85, 0xff, 0xff, 0xd0, 0x76, 0x57, 0xba, 0xd3, 0xdb, 0x8e, 0x4b, 0x43, 0xdb, 0xd9, 0xd4, 0x4b, 0x68, 0xbb, 0x3c, 0xde, 0x81, 0x2d, 0xd5, 0xdb, 0xcd, 0x8d, 0x6f, 0x3a, 0xa7, 0xda, 0xab, 0x4e, 0xfe, 0x48, 0x8c, 0xc0, 0x93, 0xa2, 0xdd, 0x86, 0xd1, 0x6e, 0xdc, 0x5a, 0x67, 0x45, 0xbb, 0x71, 0x9b, 0x5d, 0x44, 0x9b, 0x7d, 0x84, 0xb1, 0xf4, 0x31, 0x7b, 0x0e, 0xd7, 0xdb, 0xec, 0x64, 0x9a, 0x64, 0x73, 0x43, 0x8b, 0x5d, 0x91, 0xd2, 0x5a, 0x0c, 0xd8, 0xfe, 0xfd, 0x0e, 0x7d, 0xac, 0xed, 0xd5, 0xe5, 0x59, 0xd6, 0x7f, 0xc9, 0x75, 0x33, 0xef, 0xa9, 0xf3, 0x6f, 0x35, 0x67, 0x29, 0x32, 0xb6, 0x3a, 0xcd, 0xf2, 0xc6, 0xfe, 0x4b, 0x23, 0xc2, 0x0e, 0xb4, 0x19, 0xb3, 0x80, 0xcc, 0x73, 0x43, 0xbc, 0x54, 0x50, 0x3c, 0x48, 0x85, 0x94, 0xa7, 0xfb, 0xb9, 0x36, 0x08, 0x7f, 0x62, 0x3b, 0x94, 0x7c, 0x31, 0x77, 0xd8, 0x52, 0x31, 0xe2, 0xe4, 0x8e, 0xfd, 0xff, 0xb9, 0x36, 0x84, 0x50, 0x01, 0x87, 0xb6, 0x0e, 0x6b, 0x03, 0xb7, 0x9c, 0x5b, 0xfb, 0x4e, 0x39, 0x29, 0xf4, 0x7b, 0x93, 0x66, 0x21, 0xaa, 0xad, 0xd2, 0xb9, 0xd2, 0xfa, 0x0b, 0xaf, 0xfd, 0xe8, 0xfc, 0x24, 0x9f, 0x74, 0xba, 0x37, 0xc5, 0x11, 0x72, 0x2f, 0x69, 0xb7, 0x0e, 0xed, 0xc2, 0xfc, 0x6e, 0xf0, 0xd2, 0x82, 0x2b, 0x97, 0x3c, 0xe8, 0x27, 0xe3, 0x71, 0x97, 0xdb, 0xa6, 0x0d, 0xee, 0x4a, 0xf1, 0x10, 0x75, 0x3b, 0x3a, 0x22, 0x47, 0x37, 0x8a, 0xf9, 0xff, 0xa7, 0x63, 0x35, 0x92, 0x50, 0xa3, 0xbc, 0x74, 0x08, 0x41, 0x27, 0x4e, 0xd6, 0xed, 0xb0, 0x43, 0xf2, 0xdb, 0x8a, 0xb2, 0x67, 0xb0, 0xae, 0x8f, 0x87, 0xcc, 0x5b, 0x00, 0x03, 0x78, 0x14, 0x3e, 0xc1, 0xaf, 0xb4, 0xa1, 0xef, 0xcd, 0x97, 0x67, 0x44, 0x28, 0x80, 0xb1, 0x57, 0xde, 0xd0, 0x35, 0xc4, 0x67, 0x58, 0x85, 0xaf, 0xab, 0xbd, 0xb0, 0xfc, 0xd4, 0x4a, 0x11, 0x25, 0x14, 0x61, 0xde, 0xd6, 0x56, 0xb5, 0x4e, 0x8f, 0xcb, 0xdf, 0xa5, 0xa2, 0x96, 0x63, 0x35, 0x43, 0x6d, 0x59, 0xe6, 0x8c, 0xaf, 0x9d, 0x88, 0xaf, 0xcb, 0x75, 0x8c, 0x2f, 0x70, 0x56, 0xcc, 0x83, 0x17, 0xe3, 0xf2, 0xe1, 0x0a, 0xe3, 0x62, 0x9b, 0xbc, 0x72, 0x5c, 0x3c, 0xfb, 0xca, 0x62, 0xc5, 0x6d, 0x02, 0x9f, 0xfc, 0x3b, 0x6b, 0x1a, 0x9f, 0x4d, 0x06, 0xff, 0x1f, 0xe3, 0xb4, 0x91, 0xda, 0xa1, 0x90, 0x21, 0x2b, 0x1d, 0xb3, 0x18, 0x65, 0xbd, 0x5e, 0xa9, 0xe6, 0xca, 0x47, 0xc7, 0xc0, 0x1d, 0xa5, 0x61, 0x55, 0x46, 0x78, 0x4c, 0xac, 0x1e, 0x81, 0xc7, 0xd2, 0x6d, 0x5f, 0xb5, 0x7c, 0x59, 0x27, 0xf8, 0xba, 0xbd, 0x3c, 0x96, 0xe7, 0x5c, 0xdc, 0x66, 0xe3, 0x7d, 0x49, 0x78, 0x3e, 0xdf, 0xff, 0xd1, 0xf7, 0x26, 0xd6, 0xf4, 0x3f, 0x96, 0x82, 0x87, 0x70, 0x08, 0x9f, 0x89, 0x37, 0x93, 0x0b, 0xc2, 0xe9, 0xd0, 0x42, 0x66, 0x2e, 0xc0, 0x7c, 0xce, 0xed, 0x53, 0xca, 0x9e, 0xbc, 0xd1, 0x36, 0xdc, 0x16, 0xc0, 0x0e, 0x42, 0x02, 0x0d, 0xc9, 0x41, 0xe0, 0x0a, 0x61, 0xe1, 0x19, 0x95, 0xe4, 0xe0, 0x52, 0x84, 0x87, 0x2d, 0x8b, 0xde, 0xf3, 0x2d, 0xec, 0x65, 0x00, 0xe5, 0xef, 0xbc, 0xbe, 0xcf, 0x7e, 0x7c, 0x4a, 0xc8, 0xcb, 0xe0, 0x03, 0x15, 0x53, 0xea, 0x5c, 0xb8, 0xc5, 0x05, 0x29, 0x09, 0x99, 0xd8, 0x96, 0x8f, 0xed, 0x40, 0x65, 0x8c, 0x92, 0x82, 0x7f, 0xbe, 0x80, 0x36, 0x6b, 0x10, 0x33, 0x97, 0x65, 0xec, 0x9c, 0xdc, 0x80, 0xbd, 0x99, 0xf2, 0xda, 0xa6, 0x0c, 0xfe, 0x08, 0x9c, 0x34, 0xef, 0xd7, 0xae, 0x10, 0xfb, 0x66, 0xa7, 0x74, 0xeb, 0x94, 0x2d, 0xfa, 0x99, 0xa1, 0x7d, 0xec, 0x1b, 0xd8, 0xb5, 0x52, 0x1d, 0x65, 0x0a, 0x38, 0xff, 0x5c, 0x1a, 0x56, 0x6e, 0xa9, 0xdb, 0xff, 0xdb, 0xbe, 0x31, 0x3a, 0xb7, 0x92, 0x72, 0x45, 0x0b, 0x14, 0x92, 0xb1, 0xea, 0xca, 0x6f, 0x63, 0x75, 0x5b, 0xd3, 0x62, 0x6c, 0x63, 0x6d, 0x80, 0x58, 0xa1, 0xe3, 0xe6, 0x2a, 0x7a, 0x1a, 0xb1, 0x18, 0xe5, 0x97, 0x1c, 0xc5, 0x01, 0xbd, 0xa6, 0x9c, 0xdf, 0x1e, 0xa6, 0x01, 0x63, 0xb5, 0x44, 0xfc, 0xef, 0x47, 0x8b, 0xa3, 0xa2, 0x9e, 0x59, 0x9a, 0x6f, 0xde, 0xd4, 0x1e, 0x13, 0xa4, 0x77, 0x17, 0x4b, 0xbb, 0xdc, 0x1b, 0xdd, 0xa0, 0xa5, 0x35, 0x17, 0x26, 0xb6, 0xd7, 0xc5, 0x0f, 0xec, 0x95, 0xbc, 0x2e, 0x07, 0x2a, 0x67, 0x65, 0x1a, 0xd0, 0xff, 0x0c, 0xa8, 0x61, 0x84, 0xb5, 0xbd, 0x50, 0xd3, 0x40, 0xe5, 0xc7, 0x36, 0xf5, 0x85, 0x0b, 0xa0, 0x87, 0x25, 0xba, 0x27, 0xb5, 0x67, 0x40, 0x11, 0xdd, 0x22, 0xd6, 0x64, 0x0f, 0x04, 0x7f, 0x0b, 0xaa, 0x7a, 0x81, 0x8a, 0x9b, 0x05, 0x35, 0x10, 0xf4, 0x90, 0x47, 0xe4, 0xfe, 0xdf, 0xb7, 0x69, 0x14, 0x91, 0xe9, 0x2c, 0x38, 0xb1, 0x09, 0x5e, 0xaa, 0xdd, 0xda, 0xac, 0x93, 0xa7, 0x7d, 0x21, 0xa0, 0xd7, 0xbe, 0x29, 0x4f, 0xa3, 0x62, 0x0c, 0xd7, 0x20, 0xb8, 0xad, 0x5b, 0xc6, 0xf6, 0x86, 0xb8, 0x2e, 0x05, 0x6e, 0x6d, 0x15, 0x42, 0xe6, 0xba, 0x78, 0xb8, 0x2e, 0x1f, 0x5c, 0x57, 0x17, 0xbb, 0xaf, 0x59, 0xdb, 0xf7, 0x7d, 0xfe, 0x03, 0xd4, 0xa2, 0xc2, 0x8f, 0xd1, 0x17, 0xbc, 0xb8, 0x53, 0xc5, 0x9b, 0xaf, 0xd9, 0x87, 0xb8, 0x6c, 0x3c, 0x85, 0x5b, 0x9c, 0x08, 0xcf, 0xd1, 0xc3, 0x6f, 0x80, 0xfd, 0xd2, 0xde, 0x1b, 0x60, 0xbf, 0xe5, 0x8f, 0xc1, 0x7e, 0x29, 0x79, 0x1d, 0xec, 0xb9, 0x3a, 0xec, 0xc6, 0x3f, 0x1d, 0xf6, 0x0f, 0xe3, 0x80, 0xcf, 0x3a, 0x01, 0xf6, 0xdc, 0x09, 0xb0, 0xe7, 0x8c, 0xc1, 0x9e, 0xf7, 0x69, 0xb0, 0xff, 0xee, 0xf2, 0x67, 0x87, 0xfd, 0x77, 0x87, 0x26, 0xc2, 0xfe, 0xe1, 0xa2, 0xcf, 0x0e, 0xfb, 0x07, 0xbb, 0xff, 0x0f, 0xc0, 0x5e, 0xfe, 0x67, 0xc0, 0x6e, 0x9e, 0x08, 0xfb, 0x07, 0x4f, 0x7c, 0x76, 0xd8, 0x2f, 0x7c, 0x30, 0x01, 0xf6, 0x10, 0xfa, 0xf9, 0x2c, 0x86, 0xde, 0xac, 0x41, 0xef, 0x1f, 0x83, 0xde, 0x25, 0x62, 0xf2, 0xf4, 0x98, 0x1b, 0xe0, 0xff, 0xa8, 0xf3, 0xb3, 0xc3, 0xff, 0x51, 0x64, 0x22, 0xfc, 0x17, 0x4e, 0x8e, 0xc3, 0x2f, 0x3c, 0x67, 0xf9, 0xd2, 0x57, 0x5d, 0x30, 0xcf, 0xed, 0x4e, 0xed, 0x8b, 0xb2, 0xd6, 0x04, 0xd2, 0xfb, 0xf5, 0x92, 0x30, 0xc6, 0x53, 0x65, 0x4d, 0x2c, 0xc3, 0x1b, 0x20, 0x1f, 0xa8, 0xc5, 0xb0, 0x38, 0x17, 0x68, 0x6c, 0xe6, 0xba, 0xd0, 0x81, 0x72, 0xbc, 0x7c, 0xde, 0x8e, 0x45, 0xf8, 0xd2, 0x11, 0x65, 0x95, 0xf2, 0x8a, 0x37, 0xaf, 0x50, 0xdd, 0xbc, 0xac, 0xf3, 0xaf, 0xa6, 0xd7, 0xb7, 0xe6, 0xca, 0x6f, 0x37, 0x61, 0xf6, 0x48, 0x95, 0x5e, 0x9e, 0x2a, 0x5d, 0x94, 0xf3, 0xe3, 0xeb, 0x20, 0x90, 0x31, 0x9f, 0x8c, 0x69, 0xee, 0x9d, 0xbf, 0x2c, 0x76, 0x92, 0xbd, 0xbc, 0x4b, 0x5b, 0x30, 0x5e, 0xfa, 0x1f, 0xa9, 0xe9, 0xf9, 0xc8, 0x44, 0x6c, 0xff, 0x36, 0x7b, 0xac, 0xec, 0xd2, 0x09, 0x65, 0xeb, 0x75, 0x44, 0xa9, 0xb9, 0xf8, 0x6a, 0xd3, 0x4d, 0xea, 0xf9, 0x47, 0x4a, 0x3a, 0xf7, 0xf6, 0xc4, 0x92, 0x2e, 0x3e, 0xf5, 0x27, 0x95, 0x64, 0xff, 0xec, 0x18, 0x3d, 0xd7, 0x31, 0x11, 0xa3, 0x17, 0xcb, 0xfe, 0x3c, 0x8c, 0x9e, 0xfb, 0xc1, 0x4d, 0x31, 0xfa, 0x47, 0x4a, 0x3f, 0xfb, 0xf1, 0xc4, 0xd2, 0x3f, 0x3c, 0xf0, 0x67, 0x96, 0xee, 0xba, 0xbe, 0xf4, 0x3f, 0x75, 0xe4, 0x9d, 0xed, 0x00, 0x3d, 0x30, 0x63, 0x2e, 0x99, 0x45, 0x16, 0x8c, 0xb2, 0x2c, 0x8c, 0xae, 0x6c, 0xc7, 0xe4, 0xed, 0x5d, 0x3c, 0x16, 0xf7, 0x3e, 0xcb, 0x74, 0xa4, 0xf2, 0xb7, 0x36, 0x7a, 0x81, 0x47, 0x61, 0xb1, 0x2f, 0xa2, 0x59, 0x3f, 0xb0, 0x7d, 0xd6, 0x0b, 0x3c, 0x1a, 0xed, 0x18, 0x87, 0x74, 0xb3, 0x71, 0xf8, 0xc1, 0xa5, 0xcf, 0x3e, 0x0e, 0x3f, 0x18, 0x98, 0x38, 0x0e, 0xcf, 0x2e, 0xfc, 0xec, 0x74, 0xe4, 0xfd, 0x1f, 0xfc, 0x5f, 0xa9, 0x8d, 0xf3, 0xb3, 0xd7, 0xe6, 0xc2, 0x47, 0x13, 0x6b, 0xf3, 0xfe, 0xfa, 0xcf, 0x5e, 0x9b, 0x91, 0xe3, 0xa8, 0x83, 0x79, 0x8c, 0x2a, 0x96, 0xf0, 0xbc, 0x2a, 0xe8, 0xa1, 0x87, 0xeb, 0x26, 0xe8, 0xa1, 0x5d, 0x9f, 0x4f, 0x6f, 0x80, 0xf9, 0x42, 0xfb, 0x9f, 0x01, 0x73, 0xc5, 0x44, 0x98, 0x47, 0x86, 0xfe, 0x0c, 0x98, 0x1d, 0x7f, 0x3e, 0xcc, 0xe7, 0x5f, 0xfa, 0xec, 0x30, 0x9f, 0xdf, 0x78, 0x1d, 0xcc, 0xd3, 0xd3, 0x61, 0xd6, 0xb8, 0x2f, 0xc0, 0x3c, 0xc6, 0x7d, 0xdd, 0x0c, 0xe6, 0xf7, 0xda, 0xb8, 0xd7, 0x70, 0x9f, 0x61, 0xb8, 0x7d, 0x35, 0x7c, 0x6e, 0xd1, 0x9e, 0x9a, 0x56, 0x93, 0x3d, 0x22, 0x07, 0x14, 0xc9, 0xce, 0xd6, 0x83, 0x59, 0x88, 0xcd, 0xf6, 0x65, 0x44, 0x06, 0x8a, 0x0d, 0x91, 0x83, 0x7b, 0x2a, 0x11, 0x47, 0xb2, 0x84, 0x38, 0xe9, 0x05, 0xae, 0xa5, 0x5b, 0xd4, 0xd0, 0xb1, 0xe7, 0x59, 0xd4, 0x6e, 0x7a, 0xff, 0xb3, 0x37, 0xd6, 0xec, 0xdc, 0xe9, 0x4f, 0xaf, 0x99, 0x93, 0x6e, 0x5e, 0xb3, 0x73, 0xfd, 0x13, 0x6b, 0xf6, 0x5e, 0x18, 0x35, 0xcb, 0x98, 0xc8, 0x8b, 0x79, 0xd2, 0x5a, 0xe3, 0x66, 0x7c, 0xe5, 0x99, 0x1d, 0xfe, 0x16, 0x12, 0x7b, 0x1f, 0x82, 0x7f, 0x2c, 0xe2, 0x13, 0x48, 0x04, 0xaf, 0xe8, 0xc0, 0x7b, 0xa0, 0x65, 0x3a, 0x9e, 0xc3, 0x2d, 0xd7, 0xc3, 0x5a, 0x7a, 0x03, 0xac, 0xd9, 0x7f, 0xac, 0x15, 0xce, 0x19, 0x27, 0xc2, 0x7a, 0x66, 0xe7, 0x67, 0xef, 0x39, 0xff, 0x7e, 0xf6, 0x7f, 0x9f, 0x6f, 0x3c, 0xfb, 0x67, 0xcc, 0xff, 0x67, 0xaf, 0x9b, 0xff, 0xff, 0xfd, 0xe4, 0x9f, 0x01, 0x7b, 0x11, 0xe0, 0x73, 0x4c, 0x80, 0xdd, 0x35, 0x01, 0x76, 0xe7, 0x18, 0xec, 0xee, 0x4f, 0x83, 0xfd, 0xfd, 0x81, 0xcf, 0x0e, 0xfb, 0xfb, 0x9b, 0xae, 0x83, 0x5d, 0xfe, 0xec, 0xb0, 0x9f, 0x6e, 0xff, 0xdf, 0xe7, 0x1b, 0xdf, 0x37, 0x7e, 0x76, 0xd8, 0x47, 0x06, 0x27, 0xc2, 0x7e, 0x7a, 0xe9, 0x67, 0x87, 0xfd, 0xdf, 0x5e, 0x64, 0xf8, 0x26, 0xc0, 0x9e, 0x37, 0x01, 0xf6, 0xdc, 0x31, 0xd8, 0x6d, 0x9f, 0x06, 0xfb, 0x48, 0xe4, 0xcf, 0x80, 0x3d, 0x77, 0x22, 0xec, 0xff, 0xb6, 0xeb, 0xb3, 0xc3, 0x7e, 0xea, 0xca, 0xff, 0x3e, 0xde, 0xdf, 0xdb, 0xf4, 0xd9, 0x61, 0x7f, 0x6f, 0xd1, 0x44, 0xd8, 0x4f, 0x9d, 0xff, 0x33, 0x60, 0xaf, 0xf8, 0xdf, 0x87, 0xfd, 0xcc, 0xe0, 0x67, 0x87, 0xfd, 0xcc, 0x13, 0xd7, 0xc1, 0xee, 0xbb, 0x11, 0xf6, 0x3f, 0x46, 0x13, 0xdf, 0xed, 0x06, 0x4d, 0x34, 0x4f, 0xa0, 0x89, 0x59, 0x7f, 0x8c, 0x26, 0x9e, 0x71, 0x7c, 0x76, 0x9a, 0xf8, 0xef, 0x17, 0x27, 0xc2, 0xfa, 0x6e, 0xef, 0x67, 0x87, 0x75, 0xf8, 0xd8, 0x67, 0xa7, 0xdf, 0xff, 0xbe, 0xfa, 0xcf, 0x80, 0x35, 0x3c, 0x11, 0xd6, 0xe1, 0xe3, 0x13, 0x60, 0x2d, 0x4d, 0xe9, 0xe2, 0xb0, 0x0e, 0xc3, 0x1d, 0x21, 0x32, 0x26, 0x3c, 0x42, 0xab, 0x89, 0x57, 0x51, 0xdc, 0xda, 0x3a, 0xd6, 0x70, 0x36, 0xf8, 0x51, 0xb7, 0xbe, 0x7e, 0xe2, 0x1e, 0x5f, 0xc3, 0x62, 0xde, 0x95, 0x79, 0xd2, 0xb1, 0xb3, 0xb7, 0xc7, 0xd6, 0x1f, 0xc7, 0x56, 0xe7, 0x9a, 0xc8, 0xc8, 0x3e, 0xe1, 0x13, 0x45, 0xf6, 0x95, 0x94, 0x27, 0xbb, 0xd4, 0xd1, 0xfe, 0x1f, 0x49, 0xab, 0xe3, 0x32, 0xfb, 0x0e, 0xbb, 0x6e, 0xc5, 0xec, 0x49, 0xaf, 0x87, 0xa1, 0x7d, 0x87, 0xcf, 0xe7, 0xb4, 0x2e, 0x48, 0x5f, 0xf3, 0xca, 0x46, 0xe8, 0xee, 0x31, 0x3c, 0x64, 0x31, 0x55, 0x93, 0x63, 0xbc, 0xba, 0xc8, 0x79, 0xb6, 0x67, 0xeb, 0x1a, 0x3c, 0x17, 0xc5, 0x6a, 0xaf, 0xd0, 0xe3, 0xb9, 0xfe, 0x1c, 0x66, 0xf6, 0x5a, 0x29, 0xf8, 0xec, 0xa4, 0x37, 0x8b, 0xf3, 0xa9, 0xdb, 0xaf, 0x9a, 0x75, 0xaf, 0x7c, 0xa3, 0x09, 0x5e, 0xf3, 0x36, 0x03, 0x02, 0x7d, 0xb5, 0xeb, 0xd4, 0xf4, 0xeb, 0x57, 0xb7, 0x4e, 0xa7, 0x34, 0x65, 0x19, 0x8e, 0x27, 0xf4, 0x95, 0xae, 0x51, 0xe1, 0x9f, 0x4f, 0x3b, 0x77, 0xf0, 0x2b, 0xd7, 0x9e, 0x10, 0x5a, 0xf9, 0xa8, 0xfb, 0xbc, 0x0b, 0xea, 0x76, 0x7c, 0xe7, 0x62, 0xfd, 0x3d, 0xd9, 0x28, 0xce, 0x09, 0x54, 0xff, 0x66, 0xa7, 0xe3, 0x16, 0x53, 0xb7, 0xaa, 0x22, 0xd5, 0x6a, 0xba, 0x2c, 0x64, 0x03, 0x61, 0xcb, 0x58, 0xd8, 0x49, 0xef, 0x1a, 0xcc, 0xd7, 0x9e, 0xd0, 0xef, 0x4f, 0xb1, 0xce, 0xcb, 0xb5, 0x5d, 0xfc, 0xe6, 0xd8, 0x73, 0xed, 0xe9, 0x76, 0xa9, 0x30, 0x78, 0xad, 0x5f, 0x8f, 0xdb, 0x6b, 0x2d, 0xa7, 0x0c, 0xc4, 0xee, 0xd3, 0xdf, 0x0f, 0xb0, 0xcf, 0x7a, 0xc4, 0x0f, 0xe8, 0xef, 0x87, 0x10, 0x9f, 0x89, 0xf8, 0xc3, 0xfa, 0xfb, 0x11, 0xc4, 0x9b, 0x11, 0x3f, 0xa8, 0xbf, 0x1f, 0x45, 0xbc, 0x09, 0xf1, 0xc7, 0xf5, 0xf7, 0x93, 0x88, 0x9f, 0x84, 0xf8, 0x61, 0xfd, 0xfd, 0x34, 0xe2, 0x27, 0x23, 0x7e, 0x84, 0xdf, 0xa7, 0xd4, 0x5e, 0x3b, 0x8f, 0xf8, 0x2c, 0xc4, 0x5f, 0xe4, 0xf7, 0xac, 0xf8, 0xb5, 0x4b, 0x88, 0x9f, 0x82, 0xf8, 0xcb, 0xfc, 0x3e, 0xf9, 0xd4, 0xb5, 0x51, 0xc4, 0x5b, 0x80, 0x73, 0xd2, 0xbe, 0x57, 0x8d, 0x88, 0xbf, 0x05, 0x58, 0x36, 0xf3, 0xfb, 0xf4, 0x33, 0xaa, 0x05, 0xf1, 0xd9, 0x88, 0xb7, 0xf2, 0xbb, 0xb9, 0x44, 0xcd, 0x45, 0xfc, 0x54, 0xc4, 0xdb, 0xfe, 0x3f, 0xbc, 0xbd, 0x0b, 0x60, 0x53, 0xd7, 0x95, 0x28, 0xba, 0x74, 0x2c, 0x84, 0x10, 0x8a, 0xa3, 0xb8, 0x0e, 0xf5, 0x50, 0x0f, 0x39, 0x51, 0x84, 0x50, 0x64, 0xd9, 0x52, 0x54, 0xc7, 0x71, 0x8c, 0xc6, 0x48, 0xb2, 0x6c, 0x64, 0x61, 0x5c, 0xc7, 0xb8, 0xa9, 0x27, 0xa5, 0xe9, 0x09, 0xc1, 0x92, 0x31, 0xb2, 0xad, 0x71, 0x1c, 0x86, 0xf2, 0x3c, 0x19, 0x63, 0x08, 0x75, 0x09, 0x05, 0x87, 0x10, 0x4a, 0x19, 0x9a, 0x9b, 0xdb, 0xc9, 0xcd, 0x30, 0x24, 0x69, 0x1c, 0x97, 0x50, 0x86, 0xcb, 0x64, 0x1c, 0x4a, 0x18, 0x4a, 0x99, 0x5c, 0x97, 0x32, 0x94, 0xc9, 0xe3, 0x52, 0xa0, 0x4c, 0x4a, 0x09, 0x01, 0x4a, 0x29, 0xa5, 0xc4, 0xf8, 0xbc, 0xb5, 0xd6, 0x3e, 0x92, 0x8e, 0xf9, 0xb4, 0xe9, 0xdc, 0xf7, 0x9e, 0x41, 0xd2, 0xd9, 0xdf, 0xb3, 0xbf, 0x6b, 0xaf, 0xb5, 0xf6, 0xfa, 0x68, 0xf9, 0x0b, 0x31, 0xfd, 0x2e, 0x4c, 0x97, 0x29, 0x0c, 0xc7, 0x54, 0x07, 0xa6, 0xe7, 0x61, 0xba, 0x4b, 0x4b, 0xf7, 0x60, 0xfa, 0x67, 0x30, 0xdd, 0xa7, 0x85, 0x4b, 0x31, 0x9d, 0xbc, 0x3b, 0x95, 0x6b, 0xe1, 0x00, 0xa6, 0xdf, 0x8d, 0xe9, 0x41, 0x2d, 0x1c, 0xc1, 0xf4, 0x29, 0x98, 0x1e, 0xe5, 0xfa, 0x4e, 0xa8, 0x75, 0x98, 0xfe, 0x59, 0x4c, 0x6f, 0xd0, 0xd2, 0x9b, 0x30, 0xbd, 0x00, 0xd3, 0x9b, 0xb5, 0xf0, 0x7c, 0x4c, 0xff, 0x33, 0x4c, 0x57, 0xb4, 0xf0, 0x42, 0x4c, 0x9f, 0x8a, 0xe9, 0xad, 0x5a, 0x38, 0x89, 0xe9, 0x9f, 0xc3, 0xf4, 0x94, 0x16, 0xee, 0xc6, 0xf4, 0x42, 0x4c, 0x5f, 0x4a, 0x61, 0xd3, 0x12, 0xb5, 0x07, 0xd3, 0xff, 0x1c, 0xd3, 0x7b, 0x8b, 0xe6, 0xa8, 0xbb, 0x31, 0xee, 0xc4, 0xf4, 0x75, 0xea, 0xb0, 0x2d, 0xc0, 0xf7, 0xff, 0x7b, 0x8b, 0xc2, 0xea, 0x7e, 0x8e, 0xdb, 0xa0, 0xd2, 0x3c, 0x4c, 0xc3, 0x7c, 0x7c, 0xeb, 0x4f, 0x92, 0x96, 0xf8, 0x39, 0xc6, 0xd2, 0xa6, 0xaf, 0x69, 0x92, 0xc5, 0xaf, 0xd2, 0xbd, 0x11, 0xe7, 0x1e, 0x54, 0x4f, 0xdb, 0x81, 0xad, 0xac, 0x9e, 0x09, 0x91, 0xdc, 0x5e, 0x54, 0x3d, 0x27, 0xee, 0x95, 0x53, 0x4b, 0x89, 0xef, 0x9a, 0xbe, 0x57, 0xe6, 0xd2, 0xbb, 0x74, 0xb2, 0xcc, 0x2f, 0x13, 0x75, 0x98, 0x28, 0xd3, 0x24, 0x11, 0x4f, 0xb0, 0xe4, 0xe8, 0xbf, 0x85, 0xff, 0xa1, 0x7e, 0xd7, 0xb1, 0x29, 0x4e, 0xb2, 0x13, 0x6e, 0x8b, 0xf5, 0x26, 0x4c, 0x33, 0x62, 0x30, 0x45, 0xc9, 0xe7, 0x3c, 0x94, 0xbe, 0x8b, 0x52, 0x49, 0xae, 0xed, 0x5b, 0x3f, 0x96, 0x27, 0x93, 0x27, 0xca, 0xb1, 0x35, 0x62, 0x25, 0x5f, 0xdf, 0xc2, 0xb2, 0x3b, 0x37, 0xac, 0x64, 0xbb, 0xc3, 0x3b, 0x59, 0x58, 0x54, 0xa8, 0xdf, 0x20, 0xd6, 0x32, 0xe6, 0x5b, 0x6a, 0xb8, 0xca, 0xab, 0x9c, 0xb4, 0x1a, 0x36, 0xe8, 0xc7, 0x21, 0x35, 0x7e, 0x14, 0xfe, 0x43, 0x3d, 0xd8, 0x55, 0xf9, 0x5f, 0x1f, 0x83, 0x47, 0xd9, 0xbb, 0x7a, 0x97, 0x59, 0x7f, 0xb7, 0xce, 0x32, 0x9b, 0xbd, 0x09, 0xc7, 0xcd, 0x7d, 0xfe, 0xbf, 0xed, 0x5a, 0x8f, 0x2d, 0x72, 0xf0, 0x5e, 0xea, 0xb3, 0xf0, 0x44, 0x6f, 0xbc, 0xde, 0xaf, 0xd9, 0x78, 0xf4, 0x12, 0x05, 0x49, 0x32, 0x2b, 0x9a, 0xd6, 0xc8, 0x31, 0x4d, 0xba, 0xfa, 0x4c, 0xba, 0xdf, 0x4e, 0xed, 0xf6, 0x44, 0x6e, 0x63, 0xe8, 0x14, 0x26, 0x3e, 0x31, 0x42, 0xa7, 0x2d, 0xa4, 0xf3, 0xe2, 0x20, 0x5f, 0xbe, 0xec, 0xf7, 0x85, 0xe4, 0xfd, 0x48, 0x1e, 0x4d, 0x6b, 0x09, 0xc0, 0xb0, 0x33, 0xf8, 0xb3, 0xb3, 0x90, 0x87, 0x23, 0xb6, 0x94, 0xef, 0xac, 0x78, 0x87, 0xd3, 0x2d, 0x6b, 0x56, 0x82, 0x58, 0xab, 0x51, 0xc8, 0x91, 0xba, 0xa4, 0x4d, 0x8f, 0x0b, 0x28, 0xba, 0xeb, 0x03, 0xa2, 0x05, 0xc8, 0x02, 0xfe, 0x14, 0x86, 0x47, 0x66, 0xe2, 0x50, 0x37, 0xf5, 0x2a, 0xa6, 0xd4, 0x9d, 0x74, 0x07, 0x33, 0x23, 0x08, 0x36, 0x67, 0x5f, 0xa2, 0x14, 0xdb, 0x24, 0x7c, 0xe1, 0xce, 0xb3, 0x63, 0xce, 0xa2, 0x45, 0xc6, 0x46, 0xf6, 0x78, 0x4b, 0x32, 0xae, 0xe7, 0x34, 0x78, 0x77, 0x26, 0x0d, 0xef, 0x66, 0xb0, 0x7c, 0x69, 0xdc, 0x4d, 0x39, 0x79, 0xa4, 0xd7, 0xa5, 0x0c, 0x9e, 0x45, 0x42, 0xba, 0x9d, 0xe0, 0x23, 0xdf, 0x04, 0x8a, 0x5e, 0x4c, 0x13, 0xd2, 0x96, 0xb2, 0x35, 0x2b, 0x3b, 0xac, 0x79, 0x9b, 0xa4, 0x3b, 0x2d, 0xd6, 0x46, 0xc7, 0xf3, 0xa1, 0x9c, 0x61, 0xf9, 0x62, 0x6d, 0x44, 0x10, 0x4e, 0xf3, 0x1d, 0xe2, 0xae, 0xb1, 0x41, 0x27, 0x30, 0x24, 0x26, 0x9f, 0x72, 0x53, 0xec, 0xf7, 0x1b, 0x1b, 0x9b, 0x48, 0x3f, 0xdf, 0x41, 0xde, 0x13, 0xa9, 0x4d, 0x73, 0x2e, 0xe0, 0x73, 0xe6, 0xdc, 0x67, 0x09, 0xb5, 0xfc, 0x44, 0x2a, 0x56, 0x95, 0x48, 0xb9, 0xe8, 0x34, 0xf0, 0x20, 0xcc, 0x0f, 0x0a, 0x9b, 0xbc, 0x8d, 0xbd, 0x6c, 0xb5, 0x36, 0x06, 0x0e, 0xb2, 0x63, 0x4b, 0x56, 0x91, 0xbc, 0x1e, 0x63, 0xa5, 0xf7, 0x0e, 0x1c, 0x4b, 0x8f, 0xb4, 0xb4, 0x7e, 0xd7, 0x7f, 0xc4, 0x9c, 0x80, 0xe3, 0xf1, 0xba, 0x44, 0xda, 0xf4, 0x36, 0xbe, 0x59, 0xcc, 0x9b, 0x5e, 0x05, 0x66, 0x2f, 0x69, 0xf9, 0x5a, 0x35, 0xcf, 0x3e, 0xd6, 0xd8, 0x8a, 0x78, 0x41, 0xe6, 0x2e, 0x07, 0x47, 0xf6, 0x3f, 0x90, 0xaa, 0x52, 0x4c, 0x24, 0x1b, 0xe1, 0x24, 0x5b, 0x9f, 0x3f, 0x0f, 0x64, 0xfd, 0x21, 0xd2, 0xa9, 0x57, 0x40, 0xf4, 0xe3, 0x0d, 0xf3, 0xfc, 0x72, 0xed, 0xb5, 0xeb, 0x1f, 0xd4, 0x6f, 0x70, 0x82, 0x3e, 0x1e, 0x67, 0xe4, 0x65, 0x3a, 0xf3, 0x34, 0x29, 0xbb, 0x82, 0xd8, 0x8a, 0x84, 0x8b, 0xd7, 0xdf, 0x64, 0xaf, 0x17, 0x5b, 0xad, 0xad, 0x06, 0xcd, 0x73, 0xa3, 0x4d, 0x0e, 0xfe, 0x84, 0x24, 0x92, 0x56, 0xdc, 0x1b, 0x4e, 0xfb, 0x1c, 0x28, 0xb4, 0x66, 0x64, 0x96, 0xdc, 0xd2, 0xd2, 0x84, 0x8d, 0xe5, 0x65, 0xa1, 0x7e, 0xd7, 0xd1, 0x57, 0xc2, 0xdb, 0xa4, 0xa5, 0x24, 0xf3, 0x20, 0x75, 0xd3, 0xdd, 0x8d, 0x16, 0xbb, 0x56, 0xbf, 0x4f, 0x8f, 0x76, 0x60, 0x9e, 0x6e, 0xea, 0xb5, 0x43, 0xac, 0xd4, 0xcb, 0x58, 0x13, 0x9e, 0xae, 0x31, 0x8c, 0x8d, 0x7b, 0xf8, 0x66, 0xb0, 0x17, 0xa1, 0x40, 0x37, 0xfb, 0xf4, 0x0a, 0xe2, 0xd3, 0x52, 0x92, 0x24, 0xc2, 0xfa, 0xc8, 0x3f, 0xab, 0xf0, 0xae, 0xb7, 0xaa, 0x99, 0xe4, 0xc3, 0x9d, 0x45, 0x6d, 0xd2, 0x16, 0x3c, 0x1f, 0xc9, 0x32, 0xb4, 0x90, 0x43, 0x17, 0xbb, 0xe7, 0x32, 0xe1, 0x16, 0x52, 0x77, 0xfd, 0xae, 0x9f, 0x7d, 0xc8, 0x6f, 0xc1, 0x73, 0x53, 0xec, 0x95, 0x3f, 0x22, 0xe5, 0x77, 0x4c, 0xb3, 0xd2, 0xc8, 0x16, 0x30, 0x66, 0x7f, 0x0c, 0x65, 0x4b, 0x61, 0x09, 0x74, 0xab, 0xcf, 0x78, 0x8e, 0xaf, 0xeb, 0x89, 0x1c, 0x5b, 0x57, 0x7b, 0x4d, 0x7d, 0x67, 0x59, 0xf0, 0x83, 0x75, 0x73, 0x2f, 0x40, 0x40, 0x01, 0xd8, 0xc4, 0xf6, 0xaa, 0x59, 0x52, 0x9b, 0xb4, 0xbc, 0x89, 0x6b, 0x5a, 0x75, 0x01, 0xea, 0xbc, 0xb5, 0x50, 0x8a, 0xbf, 0x64, 0x69, 0xa1, 0x9c, 0xb1, 0x99, 0x89, 0x19, 0x2e, 0x2b, 0x8d, 0x86, 0x29, 0x35, 0x69, 0x64, 0x9b, 0x34, 0xe0, 0x25, 0xcb, 0x0d, 0xf3, 0x19, 0xdf, 0x28, 0xd8, 0xf9, 0x26, 0x44, 0x16, 0xd4, 0x70, 0xea, 0x04, 0xbb, 0x5b, 0x5a, 0xd3, 0xb0, 0x9c, 0xed, 0x5c, 0x35, 0x0b, 0x0c, 0xc5, 0x9b, 0x9b, 0xb2, 0x62, 0x89, 0x35, 0x5c, 0xa2, 0x15, 0xe3, 0xc8, 0x2e, 0x03, 0x59, 0xce, 0xe0, 0xfb, 0x30, 0xba, 0xed, 0xd9, 0xd1, 0xbb, 0xd0, 0xe8, 0xf8, 0x8c, 0x13, 0x5c, 0x5e, 0x88, 0x34, 0x3c, 0x27, 0x7f, 0x86, 0xe4, 0xa7, 0xe3, 0xa0, 0x2e, 0xc8, 0xf8, 0xca, 0x70, 0xf0, 0x28, 0x2b, 0xe9, 0xdb, 0x77, 0x67, 0x31, 0x38, 0x10, 0x26, 0x44, 0xa7, 0x15, 0xc3, 0x67, 0x0b, 0x8b, 0xe1, 0x73, 0x53, 0x8b, 0xe1, 0x9e, 0xfc, 0x62, 0xb8, 0x6f, 0x66, 0x3b, 0xf8, 0xd5, 0x38, 0x7e, 0x97, 0xa9, 0xad, 0xb8, 0x1e, 0xb2, 0xd2, 0xbd, 0x93, 0x47, 0x5e, 0x93, 0x36, 0xe1, 0xfb, 0x3d, 0x24, 0x0f, 0x3d, 0xb6, 0x8b, 0xee, 0xf8, 0xbc, 0x39, 0xac, 0xd7, 0xe5, 0x11, 0xd0, 0x22, 0x0e, 0x06, 0x5b, 0xf5, 0x39, 0x28, 0x23, 0x8f, 0x1a, 0x33, 0xc3, 0x6a, 0x5b, 0x51, 0x9d, 0xba, 0x00, 0x47, 0xe8, 0x92, 0xdc, 0xae, 0x2e, 0x58, 0xb5, 0x95, 0x3c, 0x9e, 0xe2, 0xbe, 0xde, 0x9b, 0x2a, 0xb7, 0x07, 0x48, 0xc1, 0xdb, 0x91, 0xc3, 0x5e, 0x7d, 0xad, 0x5d, 0x6e, 0xf6, 0xf4, 0x73, 0x20, 0xd6, 0xae, 0x1e, 0x8e, 0x03, 0xec, 0x41, 0x1c, 0xe4, 0x88, 0xbd, 0x18, 0x6c, 0x7b, 0x48, 0x0e, 0x77, 0xfb, 0xf0, 0x1b, 0x7c, 0xaf, 0x64, 0xc5, 0xe7, 0xad, 0x5c, 0x3e, 0x99, 0x6a, 0xa6, 0xf2, 0xb6, 0x4c, 0xf9, 0xee, 0x7b, 0xb7, 0x53, 0xf9, 0xd5, 0xfe, 0x62, 0x75, 0x75, 0x79, 0xb1, 0xba, 0xca, 0x57, 0xac, 0xae, 0xf1, 0xb7, 0xab, 0xfd, 0xef, 0x14, 0xab, 0xe7, 0x16, 0x74, 0xed, 0x2e, 0x56, 0x3f, 0x5e, 0x90, 0xdc, 0x55, 0xac, 0x9e, 0x5f, 0x10, 0xf7, 0xb5, 0xab, 0x3d, 0xa5, 0xc5, 0x6a, 0xdb, 0xf6, 0xe8, 0x82, 0xc7, 0xc8, 0xaa, 0xc7, 0x50, 0xbb, 0x1a, 0x6f, 0x69, 0x68, 0x0c, 0x0e, 0xd4, 0x0e, 0xb6, 0xab, 0xad, 0x2d, 0x35, 0xf6, 0x76, 0x08, 0x04, 0x1e, 0x29, 0xcd, 0xdd, 0x1e, 0x6d, 0xa9, 0xc0, 0xe7, 0x60, 0xe9, 0x5d, 0xdb, 0x43, 0x2d, 0x3e, 0x1c, 0xab, 0x88, 0xbf, 0x69, 0xb0, 0x76, 0x81, 0xb3, 0x3c, 0x77, 0x67, 0x74, 0x81, 0x79, 0x7b, 0x68, 0x81, 0x71, 0xb0, 0x76, 0x61, 0x01, 0xe6, 0x28, 0xb7, 0xaf, 0xc0, 0xd4, 0x40, 0x79, 0x3f, 0xae, 0x81, 0xa0, 0x6f, 0xb9, 0x9d, 0x72, 0xf6, 0x36, 0xac, 0x76, 0xe6, 0xa5, 0xd4, 0xc1, 0x15, 0x38, 0xf6, 0x66, 0xbe, 0x4b, 0x2f, 0xd7, 0x6e, 0x78, 0xd9, 0x83, 0xb3, 0xac, 0xdd, 0xf0, 0xb2, 0xec, 0xf0, 0x7c, 0xd9, 0x05, 0xcd, 0x89, 0x47, 0xd3, 0x32, 0xf8, 0x5d, 0x05, 0x87, 0x68, 0x86, 0x0d, 0x2c, 0x13, 0xf8, 0xd8, 0x8d, 0xf2, 0xb2, 0x72, 0x9b, 0xe4, 0x20, 0xfc, 0x8c, 0xd6, 0xb2, 0x62, 0x1e, 0xdc, 0x0a, 0x53, 0x13, 0xd6, 0xb4, 0x8d, 0xb0, 0x6e, 0x84, 0x04, 0x0e, 0xb3, 0x5e, 0x2e, 0x56, 0x91, 0xd8, 0x4b, 0x8a, 0xce, 0x17, 0xb3, 0x37, 0xd7, 0x23, 0xac, 0xc2, 0x9a, 0xbd, 0x77, 0xb8, 0x83, 0xf5, 0xdf, 0x1b, 0x6b, 0x70, 0x6b, 0x92, 0xb1, 0x37, 0xc4, 0xc7, 0xdc, 0x37, 0x49, 0xcc, 0x0a, 0x3f, 0xee, 0x22, 0xc6, 0x9e, 0x3d, 0x63, 0x36, 0xeb, 0x35, 0x78, 0x52, 0x0f, 0x8d, 0xbc, 0x01, 0xe6, 0x3f, 0xa6, 0xc1, 0xa3, 0x59, 0x68, 0x2f, 0xd7, 0x3c, 0x93, 0x59, 0x67, 0x9f, 0x85, 0x7a, 0xb3, 0x1b, 0x4c, 0x20, 0xe3, 0x0c, 0x7f, 0x2f, 0xe3, 0xed, 0x36, 0x78, 0x1b, 0xbb, 0xed, 0x3e, 0xf1, 0x6b, 0xf7, 0xfc, 0x61, 0xbb, 0xed, 0x8a, 0x99, 0x72, 0x91, 0x45, 0x60, 0x3c, 0x31, 0x8c, 0x7f, 0xa4, 0xd6, 0xa9, 0x5a, 0xad, 0x53, 0x3f, 0x55, 0xad, 0x53, 0xb5, 0x5a, 0xcd, 0x9f, 0xed, 0x21, 0xcf, 0x08, 0xe1, 0x22, 0xc8, 0x27, 0x0d, 0x1a, 0xb0, 0x92, 0xb7, 0xb4, 0x3c, 0x20, 0x1b, 0x53, 0x6c, 0x95, 0x9f, 0xd2, 0x25, 0xd2, 0xfd, 0x64, 0xab, 0xfb, 0x14, 0xb2, 0xc0, 0x67, 0x14, 0xf2, 0x7c, 0xfb, 0x49, 0xdc, 0xf4, 0x59, 0x92, 0x90, 0xc8, 0x9f, 0x91, 0x94, 0x7a, 0xf1, 0xc4, 0x44, 0x3c, 0xa5, 0x10, 0xb4, 0x59, 0x62, 0x6a, 0xc3, 0xe7, 0x23, 0x3f, 0x85, 0x38, 0x42, 0xa4, 0x7f, 0x6a, 0xf2, 0x23, 0xad, 0x43, 0xf6, 0xbe, 0x4b, 0xf3, 0x70, 0xb7, 0xca, 0x4b, 0xac, 0x9a, 0xcc, 0x14, 0x52, 0x05, 0x24, 0x29, 0x82, 0xfb, 0xec, 0xea, 0xcc, 0x5a, 0xf5, 0xda, 0xcc, 0x90, 0x3a, 0x3a, 0x33, 0xa8, 0x8e, 0xdd, 0x48, 0x21, 0xf8, 0xda, 0xc8, 0xfe, 0x08, 0x96, 0x37, 0x36, 0x7e, 0x63, 0xfd, 0x21, 0xef, 0xa4, 0x01, 0xb2, 0x30, 0x63, 0xce, 0x40, 0x0d, 0x5b, 0xdd, 0xc7, 0xd6, 0xb4, 0x97, 0x71, 0xf6, 0x6f, 0x5f, 0xc9, 0xb0, 0x81, 0xbc, 0x2c, 0x62, 0x1b, 0x0a, 0xcb, 0x6c, 0x65, 0xad, 0x58, 0xf2, 0xb9, 0x8d, 0x3f, 0x2c, 0x75, 0x61, 0x0b, 0x5a, 0xb1, 0xae, 0xd5, 0x1b, 0xf6, 0xb8, 0x91, 0x42, 0x71, 0xe1, 0xd9, 0xe8, 0x09, 0xb0, 0x0c, 0xa3, 0x91, 0xbc, 0xc6, 0xc9, 0x35, 0x34, 0x42, 0xb8, 0x02, 0xac, 0x23, 0x1b, 0xb0, 0xa4, 0x8c, 0x6b, 0x79, 0x2b, 0x4b, 0xad, 0x9d, 0xe6, 0x76, 0x0a, 0x7d, 0xa1, 0x88, 0x7a, 0x71, 0x66, 0x15, 0xb7, 0xf9, 0xca, 0xcc, 0x39, 0xd8, 0xee, 0x98, 0x7a, 0xad, 0xa8, 0x1a, 0x47, 0xa0, 0x43, 0xf3, 0x67, 0xaf, 0xc9, 0x34, 0xb2, 0x87, 0x99, 0x1a, 0x3e, 0x77, 0x6c, 0x2c, 0xa9, 0x38, 0xac, 0xb5, 0xef, 0x44, 0x1a, 0x76, 0xfd, 0xe1, 0xf6, 0x85, 0xab, 0xa7, 0x7a, 0x58, 0xd6, 0x89, 0x5b, 0x59, 0xa2, 0x6f, 0xe5, 0xec, 0x1b, 0x5a, 0xf9, 0x67, 0x5a, 0x2b, 0x4f, 0x71, 0x2b, 0x3f, 0x64, 0xad, 0x80, 0x88, 0x7a, 0x1e, 0x5b, 0x79, 0x09, 0x5b, 0x79, 0x19, 0x5b, 0x79, 0x05, 0x5b, 0x79, 0xb5, 0xa8, 0x06, 0x47, 0xb8, 0x5a, 0x1d, 0xd3, 0x5a, 0x7a, 0x6a, 0x5c, 0x4b, 0x67, 0x67, 0x5a, 0x3a, 0xaa, 0xee, 0x4c, 0xaf, 0x71, 0xb6, 0xc2, 0x8c, 0xeb, 0x3b, 0xab, 0xdb, 0xf4, 0x9b, 0x25, 0x0e, 0x21, 0xe5, 0x5f, 0x56, 0xb4, 0xd8, 0xf8, 0x28, 0xef, 0x12, 0x33, 0x61, 0x63, 0xda, 0x2a, 0x83, 0xb4, 0x3c, 0x67, 0x2c, 0xc8, 0xfa, 0x46, 0x96, 0x74, 0xb9, 0xcb, 0xc4, 0x2b, 0xb6, 0xbe, 0x78, 0x40, 0xb6, 0xd0, 0x09, 0xe6, 0xc4, 0x73, 0x4d, 0x48, 0x1f, 0x54, 0xd2, 0x6d, 0x94, 0x8b, 0xac, 0x77, 0x92, 0x75, 0x1d, 0x3c, 0xab, 0x02, 0x15, 0x5e, 0xa8, 0x88, 0x15, 0xb1, 0x77, 0x9f, 0x22, 0x30, 0x2b, 0x56, 0xd6, 0xdd, 0xdb, 0xa5, 0x76, 0x39, 0x80, 0x3d, 0xbe, 0x3f, 0xc6, 0x16, 0x4c, 0x72, 0xf8, 0x36, 0x4a, 0xa2, 0x6f, 0xdc, 0xcd, 0xe5, 0xf5, 0x03, 0x1e, 0x71, 0xf2, 0x57, 0xe3, 0x39, 0x6d, 0x49, 0x53, 0x87, 0xb3, 0x8c, 0xe1, 0x04, 0xf9, 0xe8, 0xc1, 0x7c, 0xec, 0x11, 0xfe, 0x3d, 0x96, 0x92, 0xa5, 0xba, 0xdb, 0xa7, 0x90, 0xc6, 0x0f, 0x9e, 0xab, 0xba, 0xb6, 0x29, 0x52, 0x8f, 0x2a, 0x9b, 0xea, 0x7e, 0x6e, 0x15, 0x96, 0x03, 0xe8, 0xf6, 0xc8, 0x43, 0x16, 0xe7, 0xa8, 0x4d, 0x65, 0xb7, 0x6c, 0xd3, 0xd8, 0x71, 0xad, 0x4d, 0x4b, 0x08, 0xcb, 0xc9, 0xb6, 0x28, 0xfd, 0x11, 0x2d, 0x73, 0x01, 0xbf, 0xb5, 0x2a, 0x51, 0xe6, 0x4b, 0x82, 0xe4, 0xcb, 0xf7, 0x5a, 0xfc, 0x1e, 0x9c, 0xe1, 0xd0, 0xfa, 0x28, 0xdb, 0x38, 0xc2, 0xb9, 0xc5, 0x67, 0xb6, 0x77, 0x44, 0x16, 0x8b, 0xd8, 0xfa, 0xc9, 0xa7, 0x6c, 0xef, 0x52, 0x20, 0x0b, 0x11, 0x85, 0x85, 0xe3, 0xe5, 0x5f, 0x71, 0x65, 0x15, 0x7a, 0x8a, 0xc1, 0x87, 0x27, 0x63, 0x39, 0xce, 0x5d, 0xa0, 0x64, 0xb2, 0xe9, 0xeb, 0x08, 0x4e, 0xad, 0x72, 0xd6, 0x63, 0xdb, 0x41, 0xf6, 0x9e, 0x44, 0x96, 0xae, 0xc9, 0x67, 0xb1, 0x39, 0x6e, 0xec, 0x42, 0xc8, 0xdb, 0x15, 0x4c, 0x19, 0x1c, 0x2e, 0xb0, 0xfe, 0xe7, 0xd6, 0xde, 0xe5, 0x88, 0x17, 0x19, 0x71, 0x65, 0x15, 0x30, 0xa4, 0x29, 0x6c, 0xe8, 0x17, 0xb9, 0x08, 0x3e, 0x77, 0x07, 0xbb, 0x0c, 0x2e, 0xcc, 0xf5, 0xab, 0x7f, 0x5c, 0xb9, 0xdc, 0x13, 0x56, 0x8c, 0x81, 0x1e, 0xb2, 0x3d, 0x37, 0x84, 0x34, 0x0c, 0xc9, 0x17, 0xc7, 0x5d, 0x4b, 0x0d, 0x3b, 0xd7, 0x26, 0x40, 0x2a, 0xec, 0x0a, 0x0d, 0xad, 0x8d, 0x4f, 0xa5, 0x3a, 0xbc, 0x2e, 0xcd, 0x1b, 0x63, 0x91, 0xb1, 0xa6, 0x7e, 0xd7, 0x35, 0xb6, 0x88, 0xa5, 0x94, 0x62, 0x99, 0xb5, 0x5c, 0x66, 0x6d, 0xdc, 0x89, 0x65, 0x48, 0x4f, 0xf1, 0x0c, 0x96, 0xe9, 0x8d, 0x17, 0x10, 0xee, 0xea, 0x4d, 0xe7, 0x6e, 0xa3, 0xdc, 0x61, 0xe3, 0x32, 0x83, 0xf0, 0xe0, 0xd9, 0x1d, 0xdc, 0xbb, 0xea, 0xd4, 0xea, 0xd4, 0xdf, 0xd6, 0xc0, 0xf0, 0xaa, 0x0f, 0xfb, 0x57, 0xf6, 0xa6, 0xe4, 0xe1, 0x55, 0x23, 0xbd, 0xf8, 0x6b, 0x3b, 0xd8, 0xfb, 0xcb, 0xb5, 0x2b, 0x57, 0x9d, 0x59, 0x8d, 0xf0, 0xf7, 0xa8, 0x9c, 0xdb, 0x15, 0x1a, 0x26, 0xb9, 0x72, 0x80, 0x83, 0x9e, 0x22, 0xa9, 0xdf, 0x61, 0x6a, 0xee, 0xc3, 0xf5, 0x50, 0xc0, 0xbe, 0xed, 0x0e, 0x0a, 0xdc, 0x9f, 0xe5, 0xb6, 0x0f, 0x22, 0x15, 0x74, 0x38, 0x95, 0x43, 0x7a, 0x69, 0x72, 0x95, 0x3d, 0x5c, 0xfd, 0xb1, 0x3a, 0xaa, 0x49, 0xe1, 0xbe, 0x6c, 0x5f, 0x2c, 0xf5, 0x37, 0x7d, 0x43, 0xae, 0xc2, 0xb8, 0xab, 0x99, 0x38, 0xec, 0x0d, 0xc2, 0xa3, 0x82, 0xa2, 0x06, 0x75, 0x44, 0x94, 0xd2, 0xb0, 0x8a, 0x83, 0xa4, 0xcb, 0xfb, 0xfb, 0xad, 0x5d, 0x56, 0x4d, 0xc6, 0xf5, 0x0c, 0x42, 0xb6, 0x73, 0xa5, 0xc5, 0x60, 0x9f, 0x49, 0xde, 0x91, 0xdb, 0xc1, 0x39, 0x33, 0xaa, 0x5e, 0xf2, 0x49, 0xf3, 0x82, 0xc4, 0x83, 0x3e, 0x34, 0x8c, 0x90, 0xee, 0xb2, 0xcf, 0x8c, 0xa1, 0x62, 0x28, 0x39, 0x14, 0x24, 0x49, 0x37, 0x4d, 0x97, 0xe5, 0x4c, 0x5a, 0x97, 0x85, 0x65, 0xe1, 0x46, 0x98, 0x63, 0x72, 0x94, 0x38, 0x1a, 0x88, 0x7f, 0x0c, 0x52, 0x4f, 0x9a, 0x57, 0x91, 0xa5, 0x15, 0xee, 0xc7, 0x19, 0x8d, 0x4b, 0x51, 0xa3, 0x9e, 0xc1, 0xb6, 0xd7, 0xe8, 0xdb, 0x89, 0xbd, 0x3a, 0x47, 0x2d, 0x9b, 0xfb, 0x31, 0xd6, 0x98, 0xeb, 0xcd, 0xa9, 0xbe, 0xf6, 0x7b, 0xd2, 0xa8, 0x49, 0x4b, 0x00, 0x1f, 0x64, 0x3d, 0xaa, 0x11, 0xc4, 0x8d, 0xf2, 0xd4, 0xa3, 0xec, 0x95, 0xe4, 0x03, 0xc4, 0x71, 0x8e, 0xf9, 0xa9, 0xbd, 0x21, 0xf5, 0x84, 0xd6, 0xde, 0x53, 0xd4, 0x56, 0x6c, 0xe9, 0x69, 0x1f, 0xb6, 0x12, 0x61, 0xf2, 0x87, 0xd8, 0xa7, 0xc3, 0x38, 0x02, 0xa5, 0xf2, 0x22, 0x6e, 0xeb, 0x41, 0xef, 0x24, 0xad, 0xad, 0xf8, 0xb6, 0x8c, 0xee, 0x13, 0xbe, 0x8d, 0xa5, 0x76, 0xac, 0xdd, 0x86, 0x58, 0x24, 0x51, 0x40, 0x3e, 0x9c, 0xd3, 0x33, 0x7f, 0xf5, 0x25, 0x9e, 0x79, 0x63, 0x38, 0xac, 0xe4, 0xe3, 0x3e, 0xb5, 0x11, 0x97, 0x4d, 0x4b, 0x59, 0xc9, 0x34, 0x4e, 0x76, 0x7d, 0xee, 0xf3, 0x49, 0x59, 0x59, 0x59, 0xc4, 0x65, 0xc9, 0xf3, 0x6d, 0x25, 0xee, 0xa6, 0x6e, 0xbb, 0x17, 0x96, 0x22, 0xac, 0xe8, 0xc1, 0xd3, 0xbb, 0x17, 0xf7, 0x66, 0x7f, 0xa9, 0x17, 0x56, 0xe1, 0xfe, 0x6c, 0x75, 0x36, 0xc6, 0xde, 0x84, 0x64, 0xdc, 0x8c, 0xdf, 0xa9, 0x04, 0x18, 0x77, 0xfb, 0xcc, 0xb3, 0xa2, 0x30, 0x7f, 0x56, 0x08, 0x1e, 0x2f, 0xcf, 0x99, 0x55, 0x05, 0x4a, 0xc5, 0xa4, 0x59, 0xb5, 0xb0, 0x80, 0x75, 0x7f, 0x01, 0x36, 0x60, 0xa9, 0xae, 0x48, 0xb8, 0x2c, 0x5c, 0x66, 0x38, 0x12, 0xde, 0x55, 0xd5, 0x0e, 0xc6, 0x35, 0x47, 0x7e, 0x34, 0x34, 0xa7, 0x03, 0x8c, 0x2b, 0x31, 0xa5, 0x23, 0x12, 0xf6, 0x87, 0x4b, 0xe1, 0x70, 0xed, 0xce, 0x30, 0xa6, 0x74, 0x1d, 0xda, 0x3b, 0x58, 0x8b, 0x29, 0x6d, 0x43, 0x55, 0x9d, 0x52, 0x99, 0x21, 0xfa, 0xc3, 0xc1, 0x70, 0xa7, 0x44, 0x76, 0x24, 0xe8, 0xad, 0x2c, 0x05, 0xec, 0x85, 0xe4, 0x48, 0x1f, 0xb6, 0x2b, 0x75, 0x68, 0x45, 0x29, 0x9e, 0x87, 0x2f, 0xee, 0xd9, 0x59, 0x9b, 0x94, 0xfc, 0x91, 0xaa, 0x4b, 0x03, 0xe0, 0x9a, 0x54, 0x81, 0x31, 0x7f, 0xf7, 0xc3, 0x5d, 0x73, 0x92, 0x52, 0x59, 0xb5, 0x3d, 0x3a, 0xfb, 0xb7, 0x83, 0xe0, 0x9e, 0xac, 0xf3, 0xe5, 0x5d, 0x47, 0x52, 0x54, 0x0a, 0xee, 0x4d, 0xf2, 0xca, 0x52, 0xbf, 0xeb, 0x77, 0x8e, 0x86, 0x75, 0xac, 0xdf, 0x72, 0x4f, 0xc2, 0x1e, 0x0b, 0x27, 0xa6, 0xf9, 0xa8, 0x35, 0x41, 0x3f, 0xb5, 0x36, 0x84, 0x74, 0xd3, 0x16, 0xc4, 0xc4, 0xe7, 0x47, 0x87, 0xa3, 0xef, 0x52, 0xb9, 0x4f, 0xb6, 0xf9, 0x17, 0x43, 0x9e, 0xbf, 0x08, 0x6c, 0x3e, 0xc3, 0x48, 0x27, 0xf6, 0x35, 0x08, 0xf3, 0x7d, 0xb5, 0x23, 0x17, 0xe0, 0x71, 0xec, 0xf9, 0xe3, 0x87, 0x3a, 0x41, 0xc1, 0xde, 0x2b, 0x87, 0x2e, 0xc0, 0x02, 0xea, 0xb9, 0x56, 0x2b, 0x69, 0xda, 0x86, 0xc9, 0xd6, 0x30, 0xc2, 0xb3, 0xae, 0xd2, 0x9c, 0xc3, 0xd1, 0xed, 0xd8, 0x37, 0x78, 0xff, 0xd0, 0x0f, 0x4b, 0xcd, 0xfc, 0xb4, 0x97, 0xfa, 0xef, 0x0b, 0x8f, 0x0c, 0x0f, 0x45, 0xdb, 0x01, 0x76, 0x1c, 0x0a, 0x0f, 0x86, 0x30, 0xf6, 0x7b, 0xec, 0x5d, 0x6b, 0x54, 0xd8, 0x02, 0x83, 0x97, 0x97, 0xce, 0x3f, 0xba, 0x4e, 0x0e, 0xda, 0x23, 0xec, 0xfb, 0x54, 0x42, 0x38, 0x0f, 0x39, 0xcd, 0xca, 0x33, 0x31, 0xc4, 0x9a, 0x12, 0x4b, 0xab, 0x2f, 0x40, 0x03, 0xf9, 0xd7, 0x40, 0xaa, 0x52, 0xd3, 0xac, 0x8f, 0x84, 0xff, 0xfd, 0x8b, 0x91, 0xaa, 0x9f, 0xb5, 0x83, 0xf4, 0xef, 0x38, 0x9c, 0xf8, 0x6b, 0x92, 0x63, 0xf6, 0xb9, 0xdc, 0x83, 0xdd, 0x9a, 0xb7, 0x95, 0x30, 0x97, 0x0d, 0xc8, 0x73, 0xb5, 0x3a, 0xcd, 0x1c, 0xf6, 0xf8, 0x8a, 0x20, 0x0f, 0x7b, 0x8f, 0x3d, 0x8c, 0x84, 0x7e, 0xfa, 0xc5, 0x9f, 0x60, 0x0d, 0x3f, 0xc5, 0x1a, 0x7e, 0x42, 0x35, 0xcc, 0x45, 0x7a, 0x76, 0x0b, 0xb7, 0x6a, 0x0b, 0x2c, 0x86, 0x5e, 0x98, 0x86, 0xe3, 0x77, 0x47, 0xfd, 0xae, 0x2b, 0x24, 0x75, 0x34, 0x87, 0x66, 0x84, 0xe6, 0xc3, 0x93, 0x34, 0xec, 0x27, 0x99, 0x3a, 0x2f, 0xe9, 0xfd, 0x78, 0x7c, 0x34, 0x8a, 0x41, 0x1c, 0xa5, 0x88, 0x98, 0xe3, 0x59, 0x61, 0xa8, 0xf1, 0xd6, 0x41, 0x54, 0x01, 0x69, 0x29, 0x59, 0xf1, 0x0c, 0xb8, 0x20, 0x8f, 0x6c, 0xa3, 0x0c, 0xd6, 0xe0, 0x8b, 0x1e, 0xc7, 0x73, 0x78, 0x8a, 0xaf, 0x13, 0x1e, 0xdf, 0x8e, 0xe3, 0x20, 0x35, 0x90, 0x35, 0x9b, 0xca, 0xfb, 0x59, 0x5f, 0x5b, 0x19, 0x9a, 0x8d, 0x31, 0x95, 0x65, 0xf7, 0x43, 0xbe, 0x1f, 0x47, 0x7d, 0x47, 0x2d, 0x86, 0x7c, 0xe5, 0xe6, 0xdd, 0xd1, 0x4e, 0xa9, 0xdc, 0x74, 0xb4, 0x13, 0x22, 0x83, 0x11, 0x8c, 0x99, 0x36, 0x18, 0x4e, 0xe2, 0x2a, 0x29, 0xc7, 0xf0, 0xd1, 0x3d, 0x38, 0xb6, 0x75, 0x1d, 0x20, 0x59, 0x2a, 0x26, 0xbd, 0x53, 0xdb, 0x29, 0x55, 0x4c, 0xfc, 0xa0, 0x13, 0x6a, 0x86, 0xaa, 0xdb, 0xc1, 0x70, 0x75, 0xa8, 0x0a, 0xd7, 0x85, 0xe1, 0x08, 0x86, 0xa9, 0x1e, 0xc3, 0x19, 0x07, 0x59, 0x13, 0xdd, 0x86, 0x7d, 0x7f, 0x8c, 0xad, 0x9a, 0x4c, 0x23, 0x0f, 0x49, 0x48, 0x8d, 0x8c, 0x44, 0xf6, 0xc4, 0x5d, 0x15, 0x8b, 0x91, 0xce, 0xbb, 0x23, 0xd2, 0xe7, 0x0e, 0x6f, 0xfe, 0x08, 0x3c, 0xa5, 0x38, 0xf7, 0x48, 0x8d, 0xfb, 0x22, 0x6f, 0x02, 0xd9, 0x0c, 0xf0, 0x91, 0xa7, 0x78, 0x0a, 0x2b, 0xf9, 0xd1, 0x7f, 0xed, 0xbe, 0x73, 0xef, 0xd7, 0xdd, 0xe1, 0xbf, 0xfb, 0xd7, 0xd2, 0x1a, 0x5d, 0x0e, 0x8f, 0x97, 0xac, 0xcf, 0x07, 0x15, 0xa2, 0x15, 0x5b, 0xbd, 0xe4, 0xcf, 0x21, 0x88, 0x54, 0xbc, 0xef, 0xef, 0xfe, 0x6d, 0x56, 0x35, 0x94, 0xee, 0xaa, 0x4d, 0x1a, 0x71, 0x95, 0x94, 0xce, 0x8a, 0x40, 0xd9, 0xce, 0x28, 0x3e, 0x47, 0xa1, 0x0c, 0x77, 0x4d, 0x39, 0xb6, 0xcf, 0x88, 0xab, 0xa8, 0x7c, 0x56, 0x1d, 0x54, 0x0c, 0xd6, 0xe1, 0x73, 0x10, 0x2a, 0x70, 0x54, 0x2a, 0x10, 0x13, 0xc3, 0x93, 0x0d, 0x31, 0xb1, 0x0b, 0x50, 0x8a, 0xb8, 0xd8, 0x05, 0xa8, 0x48, 0xe3, 0x62, 0x0d, 0xeb, 0x90, 0x72, 0x0c, 0xb8, 0xc8, 0xa7, 0xce, 0x5c, 0xa8, 0x23, 0x7b, 0xb5, 0x3e, 0x0f, 0x4c, 0x19, 0xec, 0x84, 0x32, 0x5c, 0x4f, 0x57, 0xcb, 0x3c, 0x90, 0xb7, 0x03, 0xcb, 0xe3, 0x9a, 0x3a, 0x87, 0xe7, 0x5e, 0xfe, 0x50, 0x27, 0x59, 0x5e, 0x83, 0x13, 0xa5, 0x1e, 0xb0, 0x6d, 0xc7, 0x1a, 0x31, 0xfe, 0x70, 0x29, 0xc6, 0x6d, 0x8f, 0xe1, 0x1e, 0x0b, 0x97, 0xc6, 0xca, 0xf1, 0x0c, 0x1d, 0x8a, 0x24, 0xd9, 0x03, 0xa6, 0xcb, 0xdc, 0xb8, 0x72, 0xd3, 0xea, 0x0a, 0xac, 0x69, 0xc7, 0x5c, 0x1c, 0xc5, 0xaa, 0x8a, 0xb9, 0x84, 0x27, 0x0c, 0x56, 0x27, 0xa5, 0x0a, 0xf0, 0x55, 0xbb, 0xcd, 0x8d, 0xcf, 0x6e, 0xfe, 0x26, 0xdb, 0x2e, 0xd7, 0xda, 0xf1, 0x3c, 0xd9, 0x17, 0x7c, 0x1d, 0xc7, 0xb2, 0x86, 0xbd, 0x83, 0x4e, 0x63, 0xeb, 0x27, 0xdd, 0x91, 0xe1, 0xb8, 0x1d, 0x47, 0xd6, 0x16, 0xdd, 0x13, 0xe9, 0x93, 0xc3, 0x03, 0x38, 0x92, 0x0e, 0x73, 0x19, 0xae, 0x33, 0xf2, 0x19, 0x6b, 0xaf, 0x5a, 0x8f, 0xa3, 0xe8, 0x9c, 0xa4, 0xe4, 0xfa, 0xa4, 0xe8, 0x30, 0xd9, 0xb0, 0xdc, 0xd0, 0xcb, 0xf1, 0x49, 0x84, 0x5a, 0xa4, 0x87, 0xd5, 0x4a, 0xd6, 0xc2, 0xc8, 0x86, 0x06, 0xef, 0xf9, 0xd5, 0xbc, 0xe7, 0xbf, 0x89, 0xf1, 0xc1, 0x91, 0x37, 0xa1, 0xee, 0x10, 0x8e, 0xe6, 0xe1, 0xd5, 0x47, 0xbe, 0xa9, 0xdb, 0xdd, 0x9d, 0x10, 0x65, 0x0b, 0x10, 0x4d, 0x08, 0x95, 0x02, 0x09, 0xf3, 0x4e, 0x61, 0xa3, 0xf6, 0x22, 0xad, 0x26, 0xef, 0x23, 0x38, 0xd3, 0x6f, 0x82, 0x27, 0x0e, 0xd7, 0x57, 0x22, 0x1c, 0x8b, 0x8a, 0xfd, 0xff, 0x9b, 0x00, 0xcb, 0xd3, 0x0a, 0x3a, 0xb7, 0xbc, 0xfe, 0x69, 0xdc, 0xf3, 0xcb, 0xd2, 0x7b, 0x85, 0xf6, 0xd9, 0xe8, 0x16, 0x05, 0xae, 0x4f, 0x49, 0x7b, 0xc6, 0x20, 0xca, 0x9f, 0x75, 0x1a, 0x17, 0x03, 0x5b, 0x57, 0x4f, 0x28, 0x3f, 0x38, 0x14, 0x9f, 0xaf, 0x2c, 0x20, 0x59, 0x62, 0xbb, 0x1b, 0xcc, 0x72, 0xef, 0xbd, 0x21, 0xf6, 0x7c, 0x06, 0x60, 0x4d, 0xe4, 0x92, 0x57, 0xa1, 0x91, 0x56, 0xf2, 0x2c, 0xf4, 0x40, 0x50, 0xf3, 0xaf, 0x66, 0x4d, 0xd8, 0x30, 0xd6, 0x84, 0xb1, 0xa6, 0x81, 0x45, 0x20, 0x61, 0xbc, 0xc9, 0x7f, 0xd7, 0x4f, 0x1b, 0x30, 0x4e, 0xfa, 0x49, 0x2b, 0x48, 0xf8, 0x4c, 0xd6, 0xd3, 0x44, 0x48, 0x93, 0x1b, 0x15, 0xbe, 0x2f, 0xd8, 0xeb, 0x9a, 0x35, 0xbe, 0x51, 0x39, 0xaf, 0x79, 0xbe, 0xb1, 0x23, 0xae, 0x61, 0x25, 0x39, 0x78, 0x47, 0x31, 0x6b, 0xa9, 0x5e, 0xc5, 0xcf, 0x35, 0xb9, 0xaa, 0xcb, 0x2c, 0x6c, 0xd2, 0xce, 0x0b, 0xe2, 0xf9, 0x31, 0x8a, 0x61, 0xd0, 0x85, 0xc7, 0x10, 0x4f, 0x23, 0x8c, 0xb1, 0x18, 0xc8, 0x63, 0xa2, 0x47, 0xc0, 0x82, 0xb8, 0x8d, 0xa4, 0x5e, 0x49, 0x02, 0xd6, 0x41, 0xf2, 0xc7, 0x46, 0x92, 0x2e, 0x8e, 0x58, 0x85, 0x7f, 0xaa, 0xb4, 0x3d, 0x43, 0x27, 0x79, 0x9e, 0x20, 0x7b, 0xfd, 0x5e, 0x88, 0x90, 0xdd, 0x49, 0x8f, 0x17, 0xea, 0x1c, 0x5e, 0x68, 0xc2, 0xdd, 0xd6, 0xe8, 0x5e, 0x0c, 0x46, 0xc7, 0x3c, 0xc6, 0x9f, 0x76, 0x5d, 0x9a, 0x5f, 0x82, 0xd8, 0xd9, 0xdc, 0x0b, 0xe0, 0x63, 0x8d, 0xce, 0xc7, 0x30, 0x36, 0x17, 0xe1, 0x12, 0xe1, 0x92, 0x31, 0xe6, 0x42, 0x06, 0x13, 0x2e, 0x5c, 0xcd, 0xfe, 0xb7, 0x7e, 0xd8, 0x41, 0xf6, 0x8f, 0x70, 0x65, 0xbd, 0xf5, 0x43, 0xdc, 0x85, 0xa5, 0xf8, 0xe4, 0x7b, 0x6b, 0x2f, 0xc6, 0xb9, 0xf1, 0xa9, 0xf4, 0xad, 0xbd, 0x18, 0x27, 0x7b, 0xa5, 0xf2, 0x3a, 0x9c, 0xa3, 0x1c, 0x5c, 0x61, 0x13, 0xc9, 0x46, 0x1d, 0xd9, 0x3a, 0xfb, 0x6d, 0x44, 0x9c, 0xcc, 0x06, 0x92, 0x81, 0xb2, 0xd4, 0xef, 0xfa, 0x75, 0xdc, 0x9b, 0x1b, 0x6d, 0x43, 0xdc, 0x85, 0x30, 0xc3, 0xf9, 0x64, 0x49, 0x07, 0xe9, 0x15, 0xdb, 0xfa, 0xb3, 0xe0, 0xf9, 0xe9, 0xde, 0xb2, 0x36, 0xc8, 0xdb, 0x78, 0x16, 0x4a, 0x8e, 0x3c, 0x47, 0x3c, 0x36, 0x3c, 0xcd, 0xb7, 0x21, 0xc6, 0x6f, 0xfb, 0xc1, 0x8f, 0x70, 0xc5, 0xbf, 0x14, 0x68, 0x85, 0xbc, 0x7f, 0xc6, 0x36, 0xc0, 0x06, 0xbf, 0x0b, 0xf2, 0xa3, 0xef, 0x0e, 0x7d, 0x03, 0xf7, 0x44, 0x3f, 0x3e, 0x4f, 0xc1, 0xe7, 0x15, 0xed, 0x3d, 0xdc, 0x4e, 0x2f, 0xf8, 0xa3, 0xc3, 0x83, 0x2b, 0x3a, 0x9e, 0x21, 0x4f, 0x17, 0xf4, 0xd4, 0xde, 0x8d, 0x4f, 0x3e, 0x7c, 0xfa, 0x46, 0x47, 0x1b, 0xf9, 0x9a, 0xa0, 0xa7, 0x76, 0x85, 0xf1, 0x34, 0x5b, 0xa6, 0xb5, 0x93, 0xa8, 0xb5, 0x8a, 0xf0, 0x38, 0x28, 0x76, 0x40, 0x45, 0x64, 0x38, 0x51, 0x21, 0xd2, 0x37, 0xae, 0xf5, 0xe6, 0xc8, 0x93, 0xc9, 0xd7, 0xee, 0xc0, 0x73, 0xd1, 0xbf, 0x32, 0x03, 0xe6, 0x45, 0xbc, 0x4e, 0xf4, 0xed, 0x72, 0x2b, 0xf7, 0x2d, 0x4f, 0xa3, 0xcc, 0x41, 0x6d, 0x24, 0x7d, 0x61, 0xc4, 0x0a, 0x55, 0xe6, 0xe8, 0x05, 0xa1, 0xb4, 0x7e, 0xd7, 0xc5, 0xb5, 0x2c, 0xf1, 0xe5, 0xa1, 0xd8, 0xac, 0x0d, 0x3e, 0x5c, 0x11, 0x23, 0x69, 0xcb, 0x06, 0x44, 0x4f, 0xd3, 0xaa, 0x40, 0x8c, 0xb4, 0xa0, 0x92, 0xb0, 0x0b, 0xc4, 0x2c, 0xd4, 0x13, 0xf6, 0x70, 0xd1, 0x22, 0x30, 0xaa, 0x47, 0x9d, 0x8f, 0x68, 0x7e, 0x24, 0x1a, 0x8a, 0x6a, 0xd5, 0x43, 0x38, 0x0a, 0x92, 0x62, 0xfa, 0xce, 0xfb, 0xe1, 0x37, 0xd4, 0x43, 0xa4, 0x5f, 0xad, 0x9d, 0xd5, 0x47, 0x84, 0x87, 0x2d, 0xf6, 0x73, 0x1c, 0x62, 0x1f, 0xf6, 0x2e, 0xec, 0x57, 0x31, 0x62, 0x5e, 0x52, 0xfd, 0xae, 0xeb, 0x7d, 0xda, 0x3c, 0x3e, 0xee, 0x23, 0xef, 0xf5, 0x48, 0x65, 0x0e, 0x12, 0xbc, 0xde, 0x58, 0x5e, 0xac, 0x8e, 0x05, 0x70, 0x8d, 0xee, 0x8e, 0x20, 0xdc, 0xed, 0x2f, 0xc3, 0x15, 0x45, 0xd4, 0xe7, 0x10, 0x9e, 0xf4, 0xd2, 0xb2, 0x0a, 0x5c, 0x5b, 0xfe, 0xc6, 0x5d, 0x04, 0xb7, 0x3b, 0x76, 0x20, 0x3c, 0xf6, 0x57, 0x21, 0x8e, 0x73, 0x71, 0x77, 0x34, 0x29, 0x05, 0xcc, 0x33, 0x6b, 0xd4, 0x4b, 0x43, 0x04, 0x51, 0x0c, 0x48, 0x25, 0x5d, 0x1e, 0x24, 0xc8, 0x03, 0x33, 0x23, 0xea, 0x15, 0xac, 0xfd, 0xe2, 0xc0, 0x21, 0xf2, 0x62, 0xfe, 0xd3, 0xfd, 0xf8, 0x7c, 0x89, 0xa8, 0xcf, 0xb9, 0x17, 0xcf, 0x40, 0xac, 0x5d, 0x3d, 0x91, 0x30, 0xc9, 0x61, 0xd7, 0x56, 0xd2, 0x14, 0x01, 0x97, 0x6f, 0xb6, 0xd7, 0xcc, 0x54, 0x6b, 0x31, 0x14, 0x72, 0x1b, 0xc9, 0x22, 0x93, 0x95, 0xfc, 0x9d, 0xe3, 0xde, 0xfe, 0x1e, 0xf3, 0x26, 0x49, 0x16, 0xfd, 0x12, 0xf7, 0x02, 0x57, 0xc9, 0x85, 0x52, 0x6f, 0x4e, 0x74, 0xb1, 0xb0, 0xca, 0x37, 0xea, 0x26, 0x1c, 0x2b, 0x80, 0xb0, 0x09, 0x4f, 0x3c, 0x0f, 0x9e, 0x25, 0x8d, 0x9b, 0x42, 0x15, 0x08, 0x99, 0x10, 0x76, 0x95, 0x94, 0x4d, 0x38, 0x82, 0x94, 0xf3, 0xc6, 0xe0, 0x31, 0x84, 0xdb, 0x5b, 0x42, 0x1f, 0x20, 0x2d, 0xbc, 0x39, 0x88, 0xbb, 0x9e, 0xee, 0xc8, 0xf2, 0xbb, 0xc1, 0x1f, 0xc1, 0xf1, 0x3b, 0xe3, 0xab, 0x22, 0x6e, 0xbc, 0x7f, 0x36, 0x3e, 0x23, 0x46, 0x61, 0x58, 0x56, 0xe9, 0x86, 0x29, 0xef, 0x60, 0x8f, 0x0d, 0x1d, 0xd8, 0xf7, 0xbc, 0xa1, 0x6a, 0x5c, 0xcf, 0x0b, 0xc9, 0x0e, 0x14, 0x9d, 0x4f, 0x86, 0xc7, 0x90, 0x9e, 0xb6, 0xed, 0xc6, 0xb1, 0x32, 0x34, 0xf8, 0x23, 0x08, 0xf1, 0x25, 0x7f, 0x94, 0x46, 0xc1, 0x57, 0x45, 0x58, 0x8e, 0x2f, 0x44, 0xd8, 0xaa, 0xdf, 0x34, 0x58, 0x43, 0xde, 0x70, 0x11, 0x23, 0xbc, 0xec, 0x9b, 0xf0, 0x0e, 0x8e, 0x8a, 0x6f, 0x22, 0xb6, 0xf0, 0x0a, 0xf6, 0xf9, 0xc3, 0x44, 0x72, 0x66, 0xbb, 0x3a, 0xa6, 0x1e, 0xa9, 0x2c, 0x56, 0x8f, 0xbc, 0x43, 0xb5, 0x58, 0x30, 0x7c, 0x4d, 0x3d, 0x36, 0xd8, 0xae, 0x1e, 0xc3, 0xb5, 0x3b, 0xca, 0x9a, 0xda, 0xc7, 0x31, 0xf5, 0xf8, 0x3b, 0x38, 0xce, 0x70, 0x0e, 0x9f, 0xae, 0xbe, 0x43, 0x98, 0xc4, 0x29, 0x3a, 0x01, 0xfd, 0xb3, 0xe9, 0x5d, 0x18, 0x77, 0xec, 0x1d, 0x3c, 0x35, 0x7d, 0xb3, 0xe9, 0x6d, 0x43, 0xed, 0xea, 0xf1, 0x4e, 0xa3, 0x1f, 0x4b, 0xd0, 0xfb, 0xb0, 0x9e, 0x23, 0x9d, 0x46, 0x5f, 0x31, 0x6b, 0x53, 0x5d, 0xc1, 0xda, 0x2e, 0xaa, 0x47, 0x70, 0xdc, 0x8f, 0x3c, 0x8f, 0xf8, 0x2c, 0xe6, 0xb9, 0xe4, 0x0f, 0xbd, 0xf0, 0xb1, 0x7a, 0x8e, 0x4e, 0xca, 0xb8, 0xcc, 0x73, 0x60, 0x74, 0xbd, 0x81, 0xa3, 0x4d, 0xa3, 0x5a, 0xac, 0x9e, 0xd2, 0xcf, 0x80, 0xd2, 0x28, 0xa0, 0xff, 0x33, 0x13, 0x86, 0xbf, 0x1e, 0x5f, 0xa0, 0xe5, 0xdd, 0x06, 0x56, 0x1c, 0x1d, 0x9b, 0x6f, 0x22, 0xf9, 0xd5, 0x1e, 0x98, 0x4d, 0xbd, 0x38, 0x1e, 0x9c, 0x39, 0x1b, 0xdb, 0x84, 0x23, 0xb5, 0x7e, 0x36, 0xb6, 0xe0, 0xd2, 0x4f, 0x90, 0x3e, 0xfd, 0x6f, 0xed, 0xea, 0x95, 0x9b, 0xea, 0x24, 0x3f, 0x1f, 0x4b, 0x36, 0x01, 0xad, 0x85, 0xe8, 0x5f, 0xf5, 0x43, 0x7a, 0x76, 0x7f, 0x3d, 0x72, 0x98, 0x24, 0xa0, 0x1d, 0x9a, 0xf6, 0x38, 0x8c, 0xf5, 0xa5, 0xe7, 0xf8, 0xe3, 0x56, 0xdc, 0x25, 0x92, 0x76, 0xcf, 0x31, 0xaa, 0x6e, 0xd5, 0x28, 0xeb, 0x33, 0xd1, 0x5f, 0x06, 0x80, 0xf6, 0x88, 0x1b, 0xf3, 0x21, 0xf4, 0xf4, 0x95, 0x23, 0x96, 0x4d, 0x3e, 0xf7, 0xb0, 0xc4, 0x2b, 0x72, 0xf0, 0x2e, 0xe6, 0xca, 0x30, 0x07, 0xea, 0x3c, 0x63, 0xeb, 0x67, 0xf1, 0xdb, 0xa1, 0x5e, 0xfa, 0x5c, 0x35, 0x8d, 0x47, 0xd6, 0x8f, 0x20, 0x7e, 0x4f, 0x53, 0x71, 0xbc, 0xc1, 0x8e, 0xf0, 0x34, 0x27, 0xfc, 0x0f, 0xec, 0xa3, 0x9b, 0x3c, 0x85, 0x9d, 0x8d, 0x2e, 0xbb, 0xb0, 0x91, 0xe0, 0xab, 0x90, 0x75, 0x1c, 0x25, 0x3a, 0xca, 0x53, 0xf7, 0x31, 0x04, 0x34, 0x9f, 0x65, 0xcc, 0x25, 0xf1, 0xf9, 0xb4, 0x1b, 0x15, 0x07, 0xb6, 0xc4, 0x53, 0x56, 0x0c, 0x6e, 0xde, 0x75, 0x85, 0x19, 0x0f, 0xe8, 0x79, 0x9a, 0x4f, 0xf4, 0x8b, 0x45, 0xad, 0xc4, 0xa5, 0x99, 0xfd, 0x31, 0x8e, 0x02, 0xc3, 0xba, 0x8f, 0x61, 0x5c, 0x1b, 0xcf, 0x70, 0x1b, 0x4f, 0x17, 0xcd, 0x51, 0xcf, 0xdd, 0xb6, 0x75, 0x12, 0xb6, 0xae, 0x4a, 0x6b, 0xdd, 0xe9, 0xe8, 0xb2, 0xf3, 0xcd, 0x5a, 0xeb, 0xc8, 0x03, 0xf7, 0x41, 0xd1, 0x3a, 0xab, 0x35, 0x63, 0x1d, 0x05, 0x4f, 0x95, 0x72, 0x1e, 0x1f, 0x1c, 0x1b, 0x17, 0x8e, 0x8d, 0x53, 0x8c, 0xcd, 0xb9, 0x7e, 0x39, 0x78, 0x6f, 0x3b, 0xf9, 0x69, 0xbd, 0xab, 0x1d, 0xee, 0x83, 0xcf, 0xb0, 0x9e, 0xe7, 0x55, 0xa6, 0x64, 0xae, 0xf1, 0x9b, 0x47, 0xf9, 0xcd, 0xba, 0xb1, 0x40, 0x5a, 0x69, 0xd9, 0xc7, 0xa9, 0xec, 0x48, 0x7c, 0xa2, 0x68, 0x23, 0x51, 0x28, 0x78, 0x55, 0x3c, 0x0f, 0x5e, 0xb6, 0xd1, 0xee, 0x43, 0x7c, 0xc3, 0x8d, 0x58, 0x85, 0x36, 0x0f, 0xe7, 0x0a, 0xbd, 0x39, 0xbe, 0x6a, 0xaf, 0x59, 0xd4, 0xc3, 0x32, 0xa1, 0xfa, 0x0f, 0xd5, 0x95, 0xcf, 0x75, 0xfd, 0x1c, 0x02, 0xc2, 0xaf, 0xb9, 0x37, 0xb7, 0xac, 0x9a, 0x79, 0x1e, 0xc6, 0xb4, 0xf7, 0x44, 0xdc, 0xff, 0xe3, 0x3c, 0x26, 0x0a, 0xaf, 0xe2, 0x95, 0x78, 0x12, 0xf9, 0x6b, 0x30, 0x6d, 0x82, 0x2e, 0x27, 0xe7, 0xfb, 0x0b, 0xa2, 0xf8, 0x1d, 0x75, 0x3f, 0x0f, 0xf6, 0x08, 0xcd, 0x0c, 0x6f, 0x6e, 0xf8, 0x1f, 0x2a, 0x82, 0x9a, 0xbf, 0x49, 0x4b, 0xba, 0xb6, 0x4a, 0x10, 0x37, 0xfb, 0x42, 0xcb, 0x41, 0xa6, 0xf7, 0x86, 0xb5, 0xf4, 0x4c, 0x4d, 0x9a, 0x77, 0x47, 0xd6, 0x26, 0x27, 0x3d, 0xf0, 0xd8, 0x28, 0x96, 0x3b, 0x03, 0x27, 0xfb, 0xa3, 0xcb, 0xfd, 0x93, 0x02, 0x70, 0x72, 0x96, 0x19, 0x3f, 0x7f, 0x0e, 0x27, 0x83, 0x15, 0xc0, 0x7f, 0xc9, 0x27, 0xbe, 0xd6, 0xd2, 0xf5, 0x54, 0x49, 0x72, 0xd1, 0x82, 0xae, 0x27, 0xba, 0xbe, 0x06, 0x8e, 0x47, 0xab, 0x1b, 0x2b, 0xe4, 0xf1, 0x91, 0xf2, 0x83, 0xbe, 0x12, 0x9f, 0xec, 0x7a, 0xe0, 0xe1, 0x92, 0x07, 0x1e, 0x28, 0xf1, 0xfb, 0x1e, 0x78, 0xe0, 0xfe, 0x3b, 0x2c, 0xf0, 0xff, 0xc2, 0xdf, 0xc9, 0xaa, 0x14, 0x7e, 0xea, 0xf0, 0x13, 0xc1, 0x4f, 0x14, 0x4e, 0xfe, 0xe5, 0x76, 0x38, 0xd9, 0x34, 0x80, 0x9f, 0x7c, 0x38, 0xb9, 0x38, 0x17, 0x4e, 0xd6, 0xf4, 0xc1, 0xc9, 0x2f, 0x8f, 0xc0, 0xc9, 0xc4, 0x39, 0xfc, 0x60, 0x7c, 0xe4, 0x1a, 0x9c, 0x6c, 0x3e, 0x8d, 0xe9, 0x57, 0x31, 0xbe, 0x07, 0x4e, 0xb6, 0x6d, 0xc5, 0xdf, 0x57, 0xf0, 0x17, 0xf3, 0x7c, 0x19, 0xd3, 0x17, 0x7d, 0x17, 0xcb, 0x6d, 0xc1, 0xf0, 0x6e, 0x38, 0xd9, 0xd2, 0x04, 0x27, 0x1f, 0x1d, 0xc4, 0x3a, 0x93, 0x18, 0xee, 0xc7, 0xf4, 0x2b, 0xf8, 0x7c, 0x11, 0x4e, 0x7e, 0xa5, 0x02, 0xcb, 0x37, 0xc3, 0xc9, 0x79, 0xc7, 0xe0, 0xe4, 0x63, 0x0e, 0xfc, 0x60, 0xbe, 0x45, 0x79, 0x98, 0xf7, 0x28, 0x9c, 0x9c, 0x8d, 0x69, 0x09, 0x4c, 0x6b, 0x7a, 0x19, 0x3f, 0x98, 0x36, 0x67, 0xb5, 0x68, 0xe7, 0x97, 0xb1, 0x8e, 0xc7, 0xb0, 0xde, 0xfa, 0x0f, 0x55, 0xfc, 0xc3, 0x98, 0x12, 0x1c, 0xc3, 0x3e, 0xad, 0x0f, 0xaf, 0xd4, 0xf1, 0x60, 0x7d, 0xb5, 0xf4, 0xc1, 0xaf, 0x56, 0x75, 0x26, 0x93, 0x2d, 0x4f, 0x76, 0x37, 0x2c, 0x5a, 0xda, 0x92, 0x7c, 0x8a, 0xa3, 0x61, 0xde, 0x93, 0x4f, 0x24, 0x5b, 0xf8, 0xb1, 0xea, 0x89, 0x64, 0x72, 0xc1, 0x13, 0x4f, 0x2e, 0x86, 0xaf, 0xce, 0x6b, 0xed, 0xfc, 0xeb, 0x86, 0x27, 0xba, 0xba, 0x9f, 0xfa, 0x42, 0x5c, 0x64, 0x4a, 0x74, 0x3d, 0x91, 0x6a, 0x5d, 0xf4, 0x64, 0x76, 0x16, 0x9e, 0xee, 0x5e, 0x94, 0x5c, 0xd4, 0xfd, 0xb5, 0x4c, 0xb8, 0xa9, 0xf1, 0x8b, 0xd5, 0x50, 0x13, 0xaa, 0x9b, 0x57, 0x0d, 0xd3, 0x9f, 0xd2, 0xa6, 0xe7, 0x2f, 0xa6, 0xa7, 0x3c, 0x5d, 0x2d, 0x89, 0x45, 0x9d, 0x1d, 0xf8, 0x64, 0x81, 0x64, 0x71, 0xe5, 0x53, 0xad, 0x4f, 0xa4, 0x5a, 0x38, 0x30, 0xaf, 0x76, 0x6e, 0x43, 0x5d, 0x75, 0x4d, 0x63, 0xf5, 0xbc, 0xa8, 0xc8, 0x2c, 0xc7, 0x3b, 0x9f, 0xee, 0x58, 0x78, 0xaf, 0x3c, 0x7d, 0xa1, 0x77, 0xfa, 0x42, 0xb9, 0x58, 0xfc, 0x62, 0xbe, 0x45, 0xed, 0xa9, 0x64, 0x4b, 0x63, 0x4b, 0xbc, 0xab, 0xe5, 0xa9, 0xd6, 0x0a, 0x99, 0x9a, 0xb8, 0xa8, 0x23, 0x21, 0x3f, 0xa9, 0x35, 0x55, 0xee, 0xe8, 0xfc, 0xeb, 0x7b, 0xe5, 0x05, 0xed, 0x5c, 0x67, 0x63, 0x4b, 0xf7, 0xd3, 0x5d, 0x1d, 0x2d, 0x0b, 0xe5, 0x78, 0x57, 0x67, 0x7b, 0x26, 0xcb, 0xbd, 0x58, 0xc9, 0xdc, 0x50, 0x63, 0x53, 0xe3, 0x2d, 0xde, 0x66, 0x81, 0x2f, 0x2c, 0x69, 0xe9, 0x4a, 0x3e, 0x91, 0x4a, 0x61, 0xa5, 0x15, 0xe2, 0x9d, 0xc5, 0xda, 0x9b, 0xab, 0x1a, 0x6f, 0x88, 0x68, 0xc4, 0x81, 0xbb, 0x21, 0xea, 0xd1, 0x45, 0x4f, 0x2d, 0x5a, 0x90, 0x6c, 0xc1, 0xd8, 0xa7, 0xf0, 0x2d, 0xed, 0x38, 0x62, 0x9f, 0xae, 0xa5, 0xb3, 0x3b, 0xbb, 0xe5, 0x96, 0xf6, 0x54, 0xf7, 0xd7, 0x64, 0x31, 0x3e, 0x9c, 0x68, 0x81, 0xc8, 0xa2, 0x2e, 0x7c, 0x47, 0xf2, 0x6b, 0xa2, 0x03, 0x4f, 0x3d, 0xd9, 0xd5, 0xd2, 0xd2, 0x21, 0x53, 0xe1, 0x44, 0x97, 0xd6, 0xdc, 0x5b, 0xd6, 0x8a, 0xd1, 0x9d, 0x34, 0x4a, 0xdd, 0x2d, 0xe9, 0xea, 0x5a, 0x9f, 0xe8, 0x58, 0x98, 0x6c, 0xc1, 0xd1, 0x2c, 0x96, 0xeb, 0x3b, 0xbb, 0x5b, 0xa9, 0x44, 0x77, 0xa7, 0xdc, 0xfd, 0xc4, 0xe2, 0x16, 0x7d, 0xd5, 0x58, 0xf0, 0xcb, 0x62, 0x69, 0x7c, 0x45, 0x8e, 0xb4, 0x50, 0x79, 0x0e, 0x55, 0xc8, 0x4d, 0xad, 0x2d, 0x5d, 0x2d, 0xf2, 0x13, 0xf8, 0x79, 0x0a, 0xa7, 0x39, 0x29, 0x3f, 0xd9, 0xba, 0x28, 0xb9, 0xb0, 0x0b, 0xdb, 0xf2, 0x84, 0x68, 0x07, 0x76, 0xae, 0xa3, 0x03, 0xbb, 0xb0, 0xb0, 0xe5, 0xa9, 0xee, 0xae, 0xce, 0xaf, 0x69, 0x43, 0x4a, 0x1d, 0xa3, 0xb9, 0xff, 0x42, 0x07, 0xf6, 0xa0, 0x65, 0x69, 0x0a, 0xbb, 0x42, 0x2f, 0xee, 0xec, 0x68, 0x91, 0xab, 0x92, 0x8b, 0x52, 0x34, 0x7c, 0xd8, 0x9e, 0x64, 0xcb, 0x13, 0x4b, 0x30, 0x1a, 0xdf, 0xcd, 0x8b, 0x41, 0x34, 0xb8, 0x82, 0x0b, 0x57, 0x37, 0x36, 0x7e, 0xa1, 0x11, 0xb3, 0x3c, 0xf5, 0x44, 0x7b, 0xba, 0x27, 0x4f, 0xdd, 0x7b, 0x2f, 0x8f, 0xed, 0x0d, 0x7f, 0x06, 0xdc, 0x69, 0x4b, 0xb5, 0x67, 0x07, 0x7e, 0xfc, 0xf8, 0x29, 0xd6, 0xc2, 0x2e, 0xfc, 0xcc, 0xd0, 0xe2, 0x81, 0xe0, 0x0b, 0x7d, 0xbc, 0xb9, 0xf3, 0x3a, 0x90, 0x38, 0xca, 0x25, 0xe9, 0x26, 0x55, 0x8d, 0x7e, 0x0d, 0x77, 0xc7, 0x32, 0xa2, 0xc7, 0x16, 0x30, 0x8f, 0x3e, 0x05, 0x9a, 0x75, 0x92, 0xdc, 0x34, 0x7f, 0x96, 0x73, 0x74, 0x65, 0x73, 0xc4, 0x7a, 0x13, 0xd6, 0x46, 0xac, 0x41, 0x2a, 0x51, 0x7f, 0x07, 0xb9, 0x8a, 0xf4, 0x9d, 0xf7, 0xe5, 0x5c, 0x61, 0xff, 0x11, 0xfc, 0x8e, 0x60, 0xb8, 0x0d, 0x31, 0xe2, 0xaf, 0x61, 0x5e, 0xd6, 0x7d, 0x5f, 0x00, 0xec, 0xdd, 0x4f, 0x19, 0x57, 0x57, 0x78, 0xf6, 0xef, 0x41, 0x7d, 0x62, 0x0b, 0xdb, 0x78, 0xa2, 0xbb, 0xde, 0xb0, 0xae, 0x25, 0x8d, 0xf5, 0x2f, 0x64, 0x39, 0xc3, 0x14, 0x53, 0x55, 0x40, 0xb9, 0x17, 0xd8, 0x38, 0x77, 0x61, 0xac, 0x37, 0xbe, 0xd0, 0x6b, 0xd1, 0xe5, 0x6f, 0x13, 0xfe, 0x2b, 0x85, 0xa4, 0x16, 0xc7, 0x3c, 0x96, 0xae, 0x5d, 0x97, 0x2b, 0x56, 0xff, 0x82, 0xae, 0x4d, 0x46, 0xd6, 0xb5, 0xcd, 0x63, 0x7c, 0xdb, 0x66, 0x8f, 0xbd, 0x30, 0x3c, 0xb2, 0x3c, 0xab, 0xdb, 0x47, 0x6f, 0x21, 0xfe, 0x37, 0x79, 0x4d, 0xce, 0xda, 0x80, 0xab, 0xfa, 0x3d, 0xc2, 0xe0, 0x35, 0xa9, 0xfb, 0xb3, 0x36, 0xdb, 0xa6, 0x07, 0xc1, 0x99, 0x88, 0x72, 0xfc, 0x77, 0xf4, 0xb6, 0xdc, 0x30, 0xde, 0x2d, 0x42, 0x71, 0x8b, 0xbd, 0x0d, 0x9c, 0xf5, 0xdf, 0x1b, 0x5b, 0xa0, 0xc8, 0x72, 0x00, 0xee, 0x02, 0x03, 0xf9, 0x66, 0x9c, 0x38, 0xe2, 0x30, 0x60, 0xbe, 0x28, 0xe6, 0xb3, 0x0b, 0x3f, 0x92, 0x91, 0x5e, 0x71, 0xbf, 0x4d, 0x76, 0xe2, 0x6e, 0xbe, 0x07, 0x13, 0x7e, 0xe9, 0xdd, 0xf5, 0xcf, 0xef, 0x27, 0x0f, 0xb0, 0xea, 0xcb, 0xd3, 0xc9, 0x2b, 0x23, 0x69, 0x82, 0x3e, 0xe3, 0xe9, 0x00, 0xa7, 0xb0, 0xfa, 0x84, 0xef, 0xd9, 0x82, 0xd4, 0xe7, 0x4b, 0x2e, 0xf2, 0x8b, 0x59, 0xa1, 0xb8, 0x85, 0xd7, 0x5c, 0x17, 0xdb, 0x31, 0xc5, 0x9c, 0x5b, 0xec, 0x41, 0x4f, 0x3b, 0xb5, 0xe4, 0xfa, 0x16, 0xa4, 0xdd, 0xa6, 0x7a, 0xe9, 0x9c, 0x26, 0xfa, 0x6a, 0x03, 0xf9, 0x70, 0x61, 0xdb, 0xa8, 0x9b, 0xc9, 0x7b, 0xa6, 0x81, 0xbc, 0xc3, 0xd8, 0x7e, 0xd2, 0x44, 0xb6, 0x47, 0xff, 0x9d, 0x78, 0xe0, 0x14, 0x4a, 0x82, 0x51, 0x0b, 0x9b, 0xe4, 0xba, 0xaa, 0xb3, 0x60, 0x13, 0x35, 0x8d, 0x91, 0x3f, 0xf7, 0x65, 0xf6, 0x3a, 0x11, 0xfa, 0xe4, 0x25, 0x67, 0x10, 0xc3, 0xeb, 0x33, 0xef, 0x19, 0x40, 0xac, 0x6f, 0x6d, 0x22, 0x46, 0x35, 0x3c, 0x3f, 0x8f, 0xca, 0xbf, 0xb8, 0x58, 0xd4, 0xf7, 0xfc, 0x62, 0x51, 0x1f, 0x86, 0x4d, 0x58, 0x62, 0xad, 0x7d, 0x4e, 0xba, 0x04, 0xbf, 0x8d, 0xf3, 0xfe, 0xbb, 0x96, 0xf7, 0x27, 0x5a, 0x5e, 0x0c, 0x93, 0x05, 0x72, 0x2b, 0x61, 0x21, 0xcc, 0x71, 0x3f, 0x99, 0x1a, 0x24, 0xcb, 0xac, 0x3c, 0x8b, 0xd3, 0xba, 0x4d, 0x7b, 0x88, 0xbe, 0xc8, 0xcf, 0x0f, 0x80, 0xb4, 0x7d, 0x79, 0x7c, 0x1a, 0x49, 0x3b, 0xa4, 0xff, 0xb1, 0xe6, 0x6d, 0xa9, 0xf0, 0xa3, 0xfc, 0x57, 0xef, 0xd3, 0x99, 0xcd, 0x7d, 0xb7, 0xd6, 0x5e, 0x1b, 0xdb, 0x44, 0xba, 0xa3, 0x3c, 0x0e, 0x1b, 0x00, 0xb1, 0x6c, 0x98, 0xc6, 0x6b, 0xdf, 0x20, 0xe4, 0xf9, 0x6e, 0xb0, 0x35, 0xb8, 0x96, 0xe6, 0x81, 0x75, 0x55, 0xfc, 0xe4, 0x39, 0x56, 0x5e, 0x04, 0x11, 0xb2, 0x3c, 0x43, 0xf6, 0x27, 0x98, 0xee, 0xb2, 0xe1, 0x6e, 0x71, 0x63, 0xdc, 0x2e, 0xf5, 0x00, 0xdb, 0x90, 0xab, 0x91, 0x1b, 0xc8, 0x72, 0xae, 0x22, 0x21, 0x5d, 0xd6, 0x0a, 0x85, 0x0b, 0xae, 0xce, 0xbe, 0xa6, 0x0e, 0xbe, 0xbd, 0x3f, 0x4e, 0xbe, 0x73, 0x5c, 0x98, 0xef, 0x05, 0xe2, 0x1f, 0x28, 0x32, 0xf9, 0x86, 0x14, 0x6d, 0x5b, 0xe9, 0xa0, 0x5b, 0x03, 0x88, 0x20, 0xc5, 0xe6, 0xe0, 0xf5, 0x9c, 0x2f, 0xf4, 0x54, 0xea, 0x58, 0x4f, 0x65, 0xdc, 0x9a, 0xb8, 0x78, 0xab, 0xbb, 0xd1, 0xeb, 0x03, 0xb7, 0x8a, 0xfd, 0x64, 0x8f, 0x76, 0x63, 0xba, 0x93, 0x28, 0x3d, 0x67, 0xd4, 0x31, 0xc9, 0x55, 0x2f, 0xb7, 0x8a, 0xb6, 0x87, 0x49, 0x62, 0x01, 0x31, 0xe7, 0x34, 0x17, 0x80, 0x35, 0x9d, 0x91, 0x2e, 0x48, 0x5b, 0x5a, 0xc0, 0xcf, 0x29, 0xb6, 0x72, 0xd7, 0xae, 0x9e, 0xc1, 0xcf, 0xd9, 0x8c, 0xcf, 0xe1, 0x37, 0xd8, 0xe7, 0xf0, 0x08, 0x7e, 0x0e, 0xe1, 0xe7, 0x30, 0x7e, 0x8e, 0x90, 0x34, 0x92, 0xb5, 0x08, 0xe1, 0xd0, 0xb7, 0xe3, 0x75, 0x62, 0x7e, 0xfe, 0x72, 0x83, 0x0b, 0xbc, 0x25, 0xe0, 0x24, 0xb9, 0x08, 0x7b, 0xd0, 0x7b, 0x3f, 0x2c, 0x73, 0x22, 0x2e, 0x33, 0xdb, 0x21, 0x57, 0xd5, 0x0f, 0x50, 0xbc, 0xc6, 0xf1, 0x2e, 0xc2, 0x15, 0x53, 0x55, 0xff, 0xbc, 0xd7, 0xaa, 0x69, 0xe1, 0xe6, 0x8a, 0xd2, 0x3d, 0x24, 0x15, 0xea, 0xa3, 0x7b, 0x13, 0x4f, 0x11, 0xac, 0x65, 0x9e, 0x49, 0x19, 0x4b, 0x43, 0xed, 0x2e, 0xaa, 0x51, 0x87, 0xf1, 0xb3, 0x37, 0xf4, 0x11, 0xd8, 0x90, 0x8e, 0xda, 0x8f, 0x9f, 0x83, 0x72, 0xcc, 0x31, 0x87, 0x2c, 0xb4, 0x79, 0x92, 0xe0, 0x66, 0xbb, 0x1c, 0x08, 0x9d, 0x66, 0xb4, 0xab, 0xc3, 0xb0, 0x56, 0x31, 0xce, 0x08, 0xc3, 0x5a, 0x79, 0x31, 0xac, 0xc6, 0x34, 0x27, 0xef, 0x27, 0xf1, 0x3b, 0x3a, 0x23, 0x08, 0xab, 0x13, 0x6e, 0xdf, 0x62, 0x58, 0x35, 0x2f, 0x8a, 0x74, 0x5c, 0xff, 0xbc, 0x10, 0xf6, 0x63, 0x37, 0x7e, 0xde, 0x41, 0x2a, 0x67, 0x18, 0x29, 0x8b, 0x3d, 0x72, 0x50, 0xab, 0x93, 0xd6, 0xba, 0x24, 0x63, 0x3b, 0x12, 0x79, 0x5e, 0x0f, 0xd9, 0x15, 0x83, 0xd5, 0x6c, 0x07, 0xe8, 0x19, 0xe6, 0x85, 0x63, 0xdd, 0xc4, 0xf9, 0xfc, 0x69, 0x03, 0x3d, 0x11, 0x27, 0x94, 0x38, 0x32, 0x99, 0xd8, 0x56, 0x30, 0xea, 0xe2, 0x4d, 0x5a, 0xf9, 0xf5, 0x54, 0x07, 0xd9, 0x11, 0x4e, 0x87, 0x31, 0x0f, 0xdd, 0xbe, 0xac, 0xc7, 0x38, 0xd6, 0x51, 0xd2, 0xc6, 0x12, 0xa4, 0x52, 0x47, 0x11, 0x14, 0x38, 0x22, 0x73, 0x7f, 0x4f, 0x63, 0xf2, 0xf6, 0x8f, 0x13, 0x11, 0xab, 0x9b, 0x53, 0x02, 0x58, 0x62, 0x3d, 0xee, 0xf9, 0xf5, 0xe4, 0x6b, 0x7b, 0xa8, 0xa1, 0xdd, 0x43, 0xfc, 0x21, 0x5c, 0x69, 0x52, 0xbb, 0xdd, 0x7f, 0xd7, 0x10, 0xbe, 0xb5, 0x63, 0x2a, 0xf1, 0x83, 0x30, 0xc6, 0xd4, 0x61, 0xa3, 0x7d, 0x43, 0x96, 0x29, 0x34, 0xbd, 0xf0, 0xfc, 0xed, 0xab, 0xe3, 0xb9, 0xa2, 0x9e, 0x84, 0xd5, 0xe1, 0x86, 0x82, 0x84, 0xc9, 0x81, 0x74, 0x84, 0xf2, 0xb2, 0x13, 0xdf, 0xe5, 0x89, 0x74, 0x43, 0xf5, 0xc7, 0xea, 0x65, 0x17, 0xcf, 0x56, 0x09, 0x7e, 0xd7, 0x8c, 0xba, 0xe9, 0x39, 0xb7, 0xa8, 0x5e, 0xdd, 0x29, 0xb7, 0xab, 0x3b, 0xad, 0x2e, 0x6e, 0x41, 0x0a, 0xd7, 0xd1, 0x7a, 0xf6, 0x90, 0x8c, 0x6b, 0xa1, 0xbd, 0x90, 0xb4, 0x6c, 0x91, 0x36, 0x3c, 0xd4, 0x9e, 0xe7, 0xb7, 0xe1, 0xef, 0xe1, 0x0e, 0x0b, 0xb9, 0x52, 0x18, 0x22, 0xfa, 0xd0, 0x8e, 0x39, 0xce, 0xb4, 0x07, 0xd9, 0xc3, 0x32, 0xae, 0xa3, 0xf6, 0x32, 0xce, 0x71, 0xae, 0xa3, 0x84, 0xb5, 0x74, 0x71, 0x45, 0x75, 0x38, 0x68, 0x1c, 0xa8, 0x6e, 0x1c, 0x83, 0x65, 0xf6, 0xd9, 0xb4, 0x1e, 0xd8, 0x36, 0xdf, 0x4e, 0x5a, 0x0b, 0x7f, 0x7d, 0x84, 0x39, 0x31, 0x53, 0xf4, 0x79, 0xbc, 0x16, 0x7b, 0xa4, 0xfe, 0x79, 0xb6, 0xc0, 0x6b, 0x18, 0xec, 0x8b, 0xfb, 0xb2, 0xed, 0x4a, 0x58, 0xed, 0x51, 0x5a, 0xe1, 0xdf, 0x3f, 0x83, 0xd0, 0xb7, 0x80, 0xca, 0xd0, 0x0d, 0x4c, 0xa6, 0xee, 0x6a, 0x51, 0x6a, 0xc7, 0x1b, 0xea, 0xce, 0x78, 0x9e, 0xae, 0x54, 0xd2, 0xe9, 0xc2, 0x71, 0x88, 0xff, 0xe0, 0x63, 0x75, 0x67, 0xa2, 0x2c, 0xd6, 0x17, 0x2f, 0xa5, 0x92, 0x76, 0x2a, 0x75, 0x3f, 0xce, 0xd6, 0xfd, 0xb0, 0x9a, 0x7c, 0x2c, 0xe8, 0xe3, 0xe8, 0x76, 0x89, 0x66, 0x4c, 0xae, 0xe6, 0xdb, 0xd8, 0x02, 0x45, 0xea, 0x36, 0x50, 0x9a, 0xf5, 0x7e, 0x1e, 0x1d, 0x82, 0x10, 0xeb, 0xed, 0x31, 0xb1, 0x7a, 0x3e, 0xd9, 0x4d, 0x6f, 0x42, 0xca, 0xcc, 0xa8, 0xee, 0x54, 0x60, 0x6c, 0xb7, 0x87, 0xea, 0x10, 0x2d, 0x3b, 0x56, 0x7d, 0x6d, 0xd4, 0x51, 0xbf, 0x5e, 0x0b, 0x5d, 0xe6, 0x1b, 0x19, 0xb2, 0x20, 0x78, 0x31, 0xe1, 0x36, 0x97, 0xd0, 0x4d, 0x40, 0xdc, 0x22, 0x77, 0x40, 0xe4, 0x9f, 0x45, 0x6f, 0x78, 0x97, 0xf0, 0xed, 0x13, 0xce, 0x14, 0x8d, 0xcd, 0xb2, 0x0a, 0x96, 0x48, 0xd6, 0x7a, 0x89, 0x74, 0xce, 0xd1, 0x86, 0x75, 0x5a, 0x68, 0x04, 0x43, 0x07, 0x70, 0x95, 0x30, 0xa7, 0x5e, 0x25, 0x0e, 0x90, 0x89, 0xe9, 0xda, 0x81, 0x9b, 0x7c, 0x34, 0x5f, 0xbc, 0x3d, 0xe4, 0xb8, 0x29, 0x76, 0x77, 0x56, 0xca, 0x6f, 0x56, 0x85, 0x23, 0xea, 0xc0, 0xee, 0xdd, 0x0a, 0x8e, 0xa4, 0xc0, 0xe6, 0x82, 0x6f, 0x6f, 0x27, 0x8f, 0x24, 0xa3, 0x69, 0x78, 0x73, 0x77, 0x18, 0xbe, 0xcd, 0xb3, 0x05, 0x86, 0x85, 0xb4, 0xea, 0x5c, 0x6d, 0x64, 0x57, 0x43, 0x7d, 0x89, 0xe0, 0x42, 0xcf, 0x45, 0xab, 0x87, 0xc7, 0x4d, 0x9c, 0x21, 0x49, 0xdc, 0x31, 0xb8, 0xae, 0x07, 0x1b, 0xda, 0x7d, 0x99, 0x75, 0xed, 0xf4, 0xdd, 0x35, 0x48, 0xeb, 0x7a, 0x5a, 0x66, 0x5d, 0xe7, 0x93, 0x7d, 0x4f, 0x5e, 0xd7, 0x56, 0x82, 0x2a, 0xbc, 0x4a, 0xf2, 0xbc, 0x64, 0xe9, 0xd6, 0x83, 0x2b, 0xc4, 0x8d, 0xbb, 0x89, 0xad, 0xbb, 0x6d, 0x5f, 0x83, 0xab, 0xdd, 0xa3, 0xad, 0x76, 0x0f, 0xad, 0x76, 0x17, 0x9e, 0x68, 0xca, 0x5a, 0xce, 0xe9, 0x86, 0x65, 0xb8, 0xe7, 0x2e, 0xb9, 0x1a, 0x1b, 0xd6, 0x31, 0xd7, 0x97, 0x64, 0x96, 0x79, 0x26, 0xb0, 0x1d, 0x11, 0x6c, 0xb9, 0x11, 0xe7, 0x98, 0x76, 0xea, 0x29, 0xbe, 0x11, 0xf3, 0x6b, 0xad, 0xa4, 0x3d, 0x4b, 0x10, 0xec, 0x32, 0xc2, 0x2b, 0x0f, 0xd7, 0xb0, 0x87, 0x6b, 0xa3, 0xd0, 0x7a, 0xcd, 0x36, 0x74, 0x81, 0x62, 0x74, 0x35, 0x29, 0xdb, 0xd8, 0x46, 0xe9, 0x65, 0x01, 0xe3, 0x79, 0x25, 0x5b, 0x99, 0xcf, 0x7b, 0x4f, 0x02, 0x0c, 0x07, 0xb4, 0x16, 0x6c, 0xc1, 0x0f, 0xbd, 0xe3, 0x19, 0x3e, 0x4f, 0xf1, 0xac, 0xf6, 0x2c, 0x16, 0xe7, 0x21, 0x9d, 0xdb, 0x7c, 0x62, 0x36, 0x68, 0x4f, 0x79, 0xcf, 0x13, 0x6c, 0x49, 0xc7, 0xb6, 0xb2, 0xa4, 0x49, 0x3a, 0xde, 0x84, 0x67, 0x58, 0x2f, 0x9f, 0x61, 0x56, 0x3c, 0xc7, 0x3b, 0x6e, 0x05, 0xb5, 0xa5, 0x36, 0xf5, 0x6f, 0x61, 0x1a, 0x41, 0x5f, 0x7a, 0x2b, 0xed, 0xf0, 0x39, 0x75, 0xbc, 0xae, 0x31, 0xa6, 0xfb, 0xf2, 0xe1, 0x6f, 0xf2, 0x09, 0xb4, 0x6c, 0xee, 0xb5, 0xeb, 0x97, 0xeb, 0x37, 0x52, 0xdb, 0x9e, 0x39, 0x73, 0xfc, 0x9b, 0xde, 0x89, 0x99, 0x91, 0x2c, 0x2c, 0x79, 0x8e, 0xc7, 0x7b, 0xa2, 0xe8, 0x4d, 0xcf, 0x45, 0xa7, 0x36, 0x8b, 0x34, 0xf2, 0x04, 0x23, 0xfe, 0xfa, 0x88, 0x87, 0xea, 0xec, 0xd6, 0x46, 0x29, 0x4a, 0xf0, 0x49, 0x4e, 0x6a, 0x50, 0xe2, 0x91, 0xf6, 0xf2, 0x8c, 0x8f, 0xf5, 0x12, 0xe1, 0x51, 0xbd, 0xc3, 0x99, 0xf1, 0xb5, 0x5e, 0x98, 0x9e, 0x37, 0x6e, 0x0f, 0x59, 0x3f, 0xb5, 0x6a, 0x3b, 0x4b, 0x3f, 0xa7, 0xc4, 0x49, 0x24, 0xbd, 0x0c, 0xab, 0x36, 0x9f, 0x16, 0xac, 0x3d, 0xf2, 0x4f, 0xb4, 0x37, 0x72, 0xf1, 0x09, 0x21, 0x47, 0x7a, 0xe4, 0x76, 0x64, 0xe7, 0xdc, 0xe5, 0xa4, 0x39, 0xb7, 0x6b, 0x6d, 0x12, 0x75, 0x49, 0x34, 0x4f, 0x9a, 0xc4, 0x87, 0x95, 0x57, 0x03, 0xa8, 0x75, 0xbc, 0xeb, 0x9c, 0x66, 0x8f, 0xb6, 0xeb, 0xd2, 0x35, 0xf3, 0x2a, 0x13, 0x37, 0xbe, 0xba, 0x1d, 0x57, 0x94, 0xde, 0x71, 0xa3, 0x3b, 0xc8, 0x52, 0xa2, 0xb6, 0x7b, 0x77, 0x8d, 0x6e, 0xa5, 0x75, 0xc3, 0xf6, 0xf4, 0xd6, 0x6a, 0x16, 0x37, 0x46, 0x35, 0x69, 0x92, 0xf1, 0xf8, 0xc4, 0x66, 0xb1, 0xbb, 0x10, 0xa3, 0xcb, 0xc6, 0xbd, 0xac, 0xc9, 0x03, 0xf2, 0x1d, 0xaa, 0x33, 0xea, 0xae, 0xf5, 0x58, 0xd2, 0x7b, 0x87, 0xce, 0x45, 0x82, 0xc5, 0xf5, 0x87, 0x48, 0xfa, 0x83, 0x78, 0xe3, 0x84, 0xd3, 0x06, 0x63, 0xfc, 0xbd, 0x13, 0x67, 0x52, 0xf5, 0xae, 0xd7, 0x20, 0x62, 0x81, 0x33, 0xd7, 0x71, 0x87, 0x02, 0x39, 0x83, 0xe9, 0x33, 0x24, 0xa7, 0xdf, 0xbe, 0x98, 0x6f, 0xc3, 0x57, 0x3b, 0xc2, 0xb8, 0x56, 0x68, 0x57, 0x41, 0xce, 0x7c, 0xe6, 0xc1, 0xd2, 0xbe, 0x82, 0x9c, 0x06, 0x7f, 0x1e, 0x9f, 0x18, 0x90, 0x53, 0x83, 0xb1, 0x62, 0x6f, 0x41, 0x4e, 0x05, 0x9d, 0x51, 0x5c, 0xff, 0x08, 0xcd, 0x89, 0x1c, 0xc6, 0x5a, 0x56, 0x3b, 0xaa, 0x3c, 0x6d, 0x02, 0xdb, 0x73, 0x07, 0x05, 0xbf, 0xae, 0x61, 0x1d, 0x71, 0xab, 0x71, 0x35, 0xdb, 0x7c, 0x24, 0x2f, 0x6a, 0xf6, 0x93, 0xb6, 0xc3, 0x24, 0xbe, 0xf5, 0xb2, 0xf8, 0x88, 0x63, 0x6a, 0xe6, 0x3a, 0xfe, 0x37, 0xb5, 0xce, 0x5d, 0x2c, 0x38, 0xa1, 0x0a, 0xdd, 0xfc, 0x57, 0xcb, 0x2e, 0x84, 0x2c, 0xc4, 0xc7, 0x0e, 0x42, 0x93, 0x37, 0x04, 0xcd, 0xbe, 0xbb, 0x7f, 0xd2, 0x09, 0x4d, 0xfe, 0x62, 0x90, 0x7e, 0xda, 0x09, 0x8f, 0x72, 0xa8, 0x59, 0x0b, 0x3d, 0xa6, 0xdd, 0x53, 0x79, 0xb0, 0xe4, 0xda, 0x68, 0x27, 0xcc, 0x8f, 0x26, 0xc1, 0x46, 0xbf, 0x84, 0xcb, 0xcf, 0x78, 0x59, 0xbb, 0x9d, 0x4c, 0xd1, 0x3d, 0x9f, 0xb7, 0x16, 0x7c, 0x74, 0x1f, 0xe8, 0x8d, 0x42, 0x69, 0x69, 0x27, 0x28, 0x8d, 0xab, 0x5f, 0xfc, 0x91, 0x37, 0x06, 0xe5, 0xf8, 0xbc, 0x00, 0x9f, 0xf7, 0xe3, 0x73, 0x00, 0xf3, 0x04, 0x31, 0x3d, 0xc2, 0xd6, 0xb1, 0x5d, 0xac, 0x27, 0x1c, 0xf5, 0xce, 0x81, 0xba, 0xf0, 0x9b, 0xd0, 0xe0, 0x05, 0x6a, 0x6f, 0x68, 0x02, 0xf7, 0xb9, 0x06, 0xf1, 0x8a, 0x0b, 0x50, 0xee, 0xae, 0x42, 0x0c, 0x95, 0x31, 0x0b, 0x4e, 0x7b, 0x40, 0xf3, 0xb7, 0x63, 0x75, 0x35, 0x89, 0x9b, 0x22, 0xb5, 0xc3, 0xdd, 0x09, 0x1e, 0x7b, 0xb5, 0xfb, 0xae, 0xd8, 0xb3, 0x18, 0x72, 0xe2, 0xfe, 0x7b, 0xbf, 0xcb, 0x34, 0xbc, 0x3c, 0x0f, 0xf1, 0x51, 0x92, 0x6d, 0x30, 0x0c, 0x53, 0xcf, 0xb9, 0x6c, 0x8c, 0xca, 0x36, 0xaf, 0x73, 0xcd, 0xc1, 0x3c, 0xdf, 0x75, 0x54, 0x93, 0xff, 0x77, 0x3c, 0x7b, 0xc9, 0x82, 0xde, 0x7c, 0x6c, 0x99, 0xc2, 0xbd, 0x9e, 0xaf, 0xf5, 0xfa, 0x71, 0x0e, 0x29, 0x5a, 0x68, 0x81, 0x33, 0x99, 0x1e, 0x03, 0x43, 0x33, 0xf6, 0xbd, 0x89, 0xf8, 0xd1, 0x51, 0xf2, 0x1c, 0xa9, 0x1f, 0x03, 0x30, 0xd0, 0xbd, 0xdf, 0x63, 0x38, 0x0f, 0x34, 0x16, 0x93, 0x4a, 0x69, 0x24, 0x2c, 0x18, 0xa3, 0x88, 0x79, 0x08, 0xb5, 0xd0, 0x3c, 0x94, 0xd2, 0x4c, 0x59, 0x2a, 0x68, 0xa6, 0xee, 0xf0, 0xd1, 0x4c, 0xd1, 0xac, 0xd9, 0xbc, 0x93, 0x38, 0xc7, 0xdf, 0x3a, 0x22, 0xc2, 0x9a, 0x07, 0x96, 0x5a, 0xc0, 0xf5, 0x2c, 0xe4, 0x7a, 0xe2, 0x5c, 0x4f, 0xab, 0x56, 0xcf, 0x80, 0xb6, 0xda, 0xf2, 0x91, 0xaa, 0x39, 0x19, 0x1c, 0x8a, 0xbd, 0x06, 0xe6, 0xb8, 0x89, 0x9f, 0xdf, 0xd0, 0x46, 0xf0, 0xef, 0xa9, 0x9e, 0x86, 0x75, 0x58, 0xf2, 0xb1, 0x00, 0xce, 0xa4, 0x8f, 0xe6, 0xd4, 0x8b, 0xad, 0x1e, 0xe6, 0xbc, 0x2c, 0xb7, 0x4a, 0x73, 0xd4, 0xb8, 0xf6, 0x3b, 0xc3, 0xde, 0x7a, 0x28, 0xcf, 0xcc, 0x4d, 0x50, 0x9b, 0x1b, 0xf2, 0x57, 0x45, 0xd6, 0x72, 0xa3, 0x4a, 0x79, 0xd7, 0x9d, 0x7b, 0x7a, 0xed, 0xa1, 0xf5, 0x88, 0xf1, 0xfd, 0x74, 0x98, 0xe6, 0xd7, 0x1e, 0xc5, 0xe7, 0x3c, 0x92, 0x78, 0xbd, 0x5d, 0x69, 0x2f, 0xf9, 0x14, 0x8f, 0x7a, 0xeb, 0xa0, 0xce, 0xdb, 0x83, 0xcb, 0x73, 0x98, 0x3d, 0x1c, 0x45, 0xb9, 0x5d, 0x83, 0xd4, 0x2e, 0x9c, 0xd9, 0xba, 0xf1, 0x33, 0x9b, 0xb1, 0x38, 0x0e, 0x63, 0xaf, 0xd0, 0x6c, 0xca, 0xd5, 0x6e, 0x1b, 0xcd, 0xe6, 0xd8, 0x7c, 0x67, 0x9d, 0x3c, 0xd7, 0x1e, 0xce, 0xac, 0xfc, 0xdd, 0xf2, 0x5c, 0xf1, 0x74, 0xfd, 0xac, 0x9b, 0xef, 0xc3, 0xe3, 0x4e, 0xae, 0xf7, 0xff, 0x16, 0x33, 0xab, 0x14, 0xd0, 0x6d, 0x0e, 0xe3, 0x30, 0x39, 0x6c, 0x2d, 0xcb, 0xe2, 0xc4, 0xdd, 0xc7, 0xfe, 0x22, 0x8a, 0xc0, 0x98, 0xb0, 0x90, 0x05, 0x3e, 0xf2, 0xeb, 0x8d, 0x50, 0x83, 0xd3, 0x3f, 0x39, 0x4b, 0xb6, 0x58, 0x1a, 0xd6, 0xb1, 0xff, 0x10, 0x07, 0x9d, 0xd7, 0x3f, 0x38, 0x43, 0xf9, 0xb4, 0xba, 0x61, 0xb4, 0xc2, 0x1d, 0x76, 0xe4, 0x68, 0x79, 0xdf, 0x21, 0xcb, 0xa9, 0x14, 0x26, 0x99, 0x34, 0xcd, 0x23, 0xf4, 0x2b, 0x4e, 0xde, 0xfd, 0x4b, 0x7d, 0x47, 0xd7, 0xe1, 0x1a, 0xf6, 0x04, 0xbe, 0x58, 0x81, 0xeb, 0xa5, 0xb4, 0xfa, 0xf0, 0x39, 0xc8, 0x2d, 0x8d, 0x55, 0xe6, 0x1e, 0xc7, 0x71, 0x8c, 0xfe, 0xeb, 0x07, 0x49, 0xb0, 0x44, 0xdf, 0x3b, 0x76, 0x0e, 0xcc, 0x81, 0x7a, 0xc4, 0xac, 0x26, 0x92, 0x5f, 0x6f, 0x31, 0x8f, 0x74, 0x72, 0xf2, 0xd3, 0x25, 0xc2, 0xc3, 0x5d, 0x4d, 0xe4, 0xe1, 0x4e, 0x9e, 0xdd, 0xd8, 0xff, 0xfc, 0xfb, 0x38, 0x8e, 0x0d, 0xa1, 0xb3, 0x60, 0x78, 0xfe, 0x3d, 0x7c, 0x6a, 0xc2, 0x51, 0x6e, 0xc6, 0x11, 0x9e, 0x8f, 0x7b, 0x44, 0xc1, 0xcf, 0x42, 0x2a, 0x13, 0xce, 0x77, 0x54, 0xd1, 0x58, 0xbe, 0x78, 0xc0, 0x1e, 0x71, 0x86, 0x11, 0xf6, 0xf2, 0x48, 0xd2, 0x49, 0xa1, 0xed, 0x8b, 0x6e, 0x92, 0xcc, 0x52, 0xf8, 0x4d, 0xe1, 0x22, 0x5a, 0xa7, 0xde, 0xf5, 0xcd, 0xeb, 0x18, 0x27, 0x21, 0xab, 0x34, 0x6b, 0xb3, 0xf7, 0xa7, 0xc2, 0x6e, 0x7d, 0xb9, 0xdf, 0xdb, 0xd3, 0x0b, 0x46, 0x03, 0x62, 0x56, 0x73, 0xa0, 0x90, 0x9f, 0x27, 0x64, 0x65, 0xd9, 0xab, 0x2f, 0xb0, 0xdc, 0x34, 0xd1, 0x44, 0x85, 0xc2, 0x36, 0x3d, 0xf9, 0xed, 0x2c, 0xf7, 0x7f, 0xeb, 0xc7, 0x18, 0x1b, 0xa4, 0x58, 0xe1, 0xbf, 0xc9, 0x6c, 0x04, 0x53, 0xc2, 0xb8, 0xcc, 0xa2, 0x48, 0xcb, 0xf2, 0x49, 0xf6, 0x7a, 0x1c, 0xef, 0x56, 0xe3, 0xcb, 0xfe, 0xcd, 0x11, 0xc1, 0xe5, 0x25, 0x9f, 0x4c, 0x7f, 0xc2, 0xbb, 0xa7, 0xdc, 0xf2, 0xdd, 0x35, 0xff, 0xf5, 0x77, 0xdf, 0x0e, 0x0f, 0xd3, 0x53, 0x9d, 0xc2, 0x56, 0x53, 0x65, 0x85, 0xa3, 0x16, 0x69, 0x37, 0x8d, 0xee, 0x14, 0x27, 0xf0, 0x5f, 0x6e, 0x68, 0x5e, 0x37, 0xb8, 0x3a, 0x61, 0xf7, 0x5a, 0x78, 0x84, 0x17, 0x8a, 0x11, 0xce, 0x50, 0xa2, 0x3b, 0x04, 0x2f, 0x07, 0xe1, 0x45, 0x9b, 0x46, 0x35, 0x80, 0xc1, 0x7e, 0x2b, 0x6c, 0xad, 0xe7, 0xf2, 0xb1, 0x6f, 0x32, 0xee, 0x51, 0x43, 0xfc, 0x04, 0xc2, 0xfd, 0x9c, 0x78, 0xaa, 0x13, 0x8e, 0x46, 0xb8, 0x59, 0xd3, 0xe1, 0xa5, 0x97, 0x8f, 0x7e, 0x53, 0x9c, 0xef, 0xda, 0x99, 0x52, 0xc3, 0x34, 0x8d, 0xc0, 0xfd, 0x2f, 0x6b, 0xe7, 0x3a, 0xd6, 0xc9, 0xe7, 0x3a, 0xd6, 0xab, 0x9d, 0xeb, 0x58, 0x3b, 0x9e, 0xeb, 0x82, 0xc2, 0x59, 0xc6, 0x74, 0x9f, 0x15, 0x47, 0x63, 0x72, 0xe6, 0x5c, 0xcf, 0x95, 0x6b, 0xf0, 0x4c, 0x59, 0xa6, 0xe1, 0xc8, 0x7b, 0x44, 0xdd, 0x09, 0x4b, 0x7a, 0x0f, 0xc4, 0x6d, 0x7c, 0xab, 0xde, 0x96, 0xa1, 0xdd, 0x06, 0xb6, 0x3f, 0x87, 0xa7, 0xba, 0xc8, 0xe5, 0x20, 0xba, 0x28, 0x31, 0x4d, 0x6b, 0x4f, 0x2e, 0x53, 0x43, 0x35, 0x69, 0x6c, 0x9b, 0x76, 0x14, 0xf9, 0x75, 0xcd, 0x60, 0xd5, 0xbb, 0xc6, 0x36, 0x61, 0xff, 0x56, 0x37, 0xac, 0xa3, 0x5b, 0xd7, 0x44, 0xa1, 0x9d, 0xde, 0xf0, 0x2b, 0x7c, 0x43, 0x1e, 0x73, 0x14, 0xcc, 0x82, 0xe6, 0x14, 0x27, 0xbb, 0xe6, 0x29, 0xdb, 0x7c, 0x2f, 0x49, 0x5e, 0x18, 0x15, 0x33, 0xe3, 0x81, 0xdb, 0x74, 0x32, 0xbd, 0x92, 0xbc, 0x1e, 0xfb, 0xc1, 0x23, 0x3c, 0xd6, 0x44, 0x74, 0x0a, 0x95, 0xed, 0xf0, 0x6b, 0xbc, 0x03, 0x92, 0x1e, 0x1d, 0x49, 0x9f, 0xf7, 0x5e, 0xc9, 0x61, 0x26, 0xad, 0x42, 0xca, 0xd1, 0x69, 0xb7, 0x87, 0x53, 0xf1, 0x2c, 0x8f, 0xa9, 0x61, 0x9d, 0xf0, 0xd8, 0x50, 0xff, 0x57, 0xb8, 0xfe, 0x4e, 0xd3, 0x89, 0x8f, 0xbb, 0xac, 0xc4, 0x59, 0xeb, 0xc8, 0x45, 0x1c, 0xb9, 0x1f, 0xe1, 0xf8, 0x59, 0xd7, 0x23, 0xbc, 0x8b, 0x1c, 0xde, 0x5c, 0x5f, 0x1b, 0xc9, 0xd0, 0xfa, 0x1a, 0x89, 0x82, 0xc3, 0xf6, 0x4e, 0x42, 0x58, 0x56, 0x43, 0x75, 0xb6, 0x93, 0x36, 0x43, 0x21, 0xf9, 0xd7, 0x46, 0x3c, 0x82, 0xb0, 0xfc, 0x97, 0xfd, 0x1e, 0xb0, 0xf9, 0x93, 0xe0, 0x29, 0x33, 0x1c, 0x69, 0xdc, 0x58, 0x5b, 0x8e, 0xa7, 0xb9, 0xcf, 0x03, 0x79, 0xbe, 0x24, 0x94, 0x54, 0xe0, 0xc9, 0x1f, 0xc0, 0x33, 0x7f, 0x47, 0x12, 0xf2, 0x3b, 0xc0, 0xb0, 0xf2, 0x68, 0x70, 0x53, 0x74, 0x67, 0x12, 0xa6, 0xe0, 0xf3, 0xd2, 0x0f, 0x42, 0x9b, 0x6b, 0xf9, 0xde, 0xb1, 0xe3, 0x58, 0x70, 0x4b, 0x74, 0xb0, 0x86, 0x6e, 0x20, 0x1d, 0x78, 0xda, 0xcc, 0xaa, 0xe2, 0xd3, 0xa6, 0xc1, 0x4b, 0xfc, 0xa6, 0xb2, 0x84, 0x45, 0xc3, 0x8d, 0xc0, 0x10, 0x98, 0x45, 0xfc, 0x12, 0xbf, 0xdf, 0xcb, 0xd2, 0x3a, 0xfe, 0xc1, 0x50, 0xa7, 0xe4, 0x87, 0x59, 0x21, 0x08, 0x62, 0x7c, 0x1e, 0x94, 0xfa, 0x8c, 0x3b, 0x3b, 0xc9, 0xfa, 0x1c, 0xdd, 0x76, 0xcf, 0x0a, 0x42, 0x98, 0x2c, 0xd7, 0xf9, 0xab, 0x77, 0x45, 0x31, 0x57, 0x74, 0x56, 0x2d, 0x44, 0xe8, 0xc6, 0xd3, 0x57, 0xf3, 0x4e, 0x4d, 0x52, 0xf2, 0xcd, 0x9e, 0x15, 0x85, 0x9a, 0x21, 0x92, 0x68, 0x3a, 0x33, 0x18, 0xa5, 0x7b, 0xc7, 0x59, 0x78, 0xb2, 0x43, 0x45, 0x00, 0xfb, 0x50, 0x99, 0xfb, 0x52, 0x27, 0x54, 0x1c, 0x0f, 0x61, 0x4c, 0x1e, 0x04, 0xf0, 0xbb, 0x04, 0x2a, 0xcb, 0xbc, 0x50, 0xb9, 0x91, 0x24, 0x4f, 0xab, 0x3e, 0x18, 0x8e, 0xbd, 0x89, 0x6d, 0x02, 0x18, 0x40, 0x58, 0x6f, 0x84, 0x32, 0x6c, 0x9b, 0x84, 0x58, 0xb5, 0xe7, 0xd8, 0x05, 0xa8, 0x58, 0x5f, 0x4f, 0x6d, 0xc1, 0xd6, 0x55, 0x1e, 0xc2, 0xbc, 0x03, 0x21, 0x6a, 0xc3, 0xfa, 0xf7, 0xe9, 0xcd, 0x03, 0xef, 0xd2, 0xfb, 0x66, 0x24, 0x41, 0xc6, 0xb9, 0xf5, 0x91, 0x37, 0x48, 0xa9, 0x0a, 0xee, 0x0c, 0x54, 0x6d, 0xb9, 0x00, 0xfe, 0x43, 0x5c, 0x6a, 0xa0, 0x53, 0xb4, 0xf9, 0x90, 0xc8, 0x7f, 0x01, 0x43, 0x54, 0x82, 0x64, 0x72, 0x8c, 0x5e, 0xa9, 0x62, 0x2e, 0x9e, 0x98, 0x74, 0x77, 0xdc, 0x09, 0x75, 0x7c, 0xd3, 0x93, 0x99, 0x89, 0x19, 0x9d, 0xd0, 0x88, 0x75, 0x16, 0xfe, 0xa1, 0x3c, 0x34, 0x5b, 0x99, 0x7b, 0xc7, 0xd7, 0xe5, 0x3a, 0x86, 0x82, 0x9b, 0x35, 0x28, 0x58, 0x28, 0x60, 0x8a, 0xcf, 0xef, 0x88, 0x96, 0xe2, 0x32, 0x46, 0xea, 0x79, 0x9a, 0x14, 0x52, 0x2f, 0x3c, 0x10, 0x82, 0x69, 0x84, 0x29, 0x25, 0x2a, 0x97, 0x98, 0xf6, 0xac, 0x98, 0x82, 0x18, 0xc5, 0x8e, 0xe5, 0x71, 0xbb, 0xe0, 0xdc, 0x12, 0xc7, 0x84, 0x31, 0x72, 0x17, 0xb9, 0xb7, 0x14, 0xeb, 0x4c, 0xf0, 0xb8, 0x14, 0xe2, 0x47, 0x69, 0x31, 0x29, 0xc6, 0x98, 0xa7, 0x93, 0xdf, 0x1f, 0x33, 0x59, 0x70, 0x8b, 0x85, 0x13, 0x79, 0x72, 0x96, 0xca, 0xd0, 0xa8, 0x02, 0x39, 0xc6, 0x58, 0xeb, 0x66, 0xe1, 0xcf, 0x86, 0x60, 0x97, 0x23, 0x9a, 0x5e, 0xbb, 0x1d, 0xc7, 0x48, 0x4a, 0x38, 0x61, 0x41, 0x0a, 0xc3, 0x00, 0xcd, 0x24, 0x5f, 0x92, 0x02, 0xa1, 0xbd, 0x62, 0x27, 0x4b, 0xbf, 0x8f, 0xc8, 0x93, 0x14, 0xa3, 0x6c, 0x16, 0x12, 0x08, 0x09, 0x8b, 0xff, 0x7e, 0xd8, 0x88, 0xf8, 0xe4, 0xc6, 0x96, 0x73, 0xe9, 0x7a, 0xaa, 0xce, 0x40, 0x3c, 0x5c, 0xf0, 0xfd, 0xfd, 0xf1, 0x6b, 0xd1, 0x36, 0x1e, 0x0b, 0xd5, 0xb5, 0x13, 0x4f, 0x96, 0x82, 0xac, 0x46, 0x57, 0xc3, 0x59, 0x78, 0xec, 0xc1, 0x1e, 0x03, 0x40, 0x73, 0xf3, 0x3a, 0xcd, 0x4f, 0x07, 0xc1, 0x57, 0xdc, 0x3f, 0xae, 0x49, 0xb8, 0xb6, 0x69, 0x9c, 0x5e, 0xa6, 0x3e, 0x63, 0x5f, 0x8d, 0xc2, 0xfe, 0xff, 0xff, 0xb5, 0xc1, 0x05, 0x72, 0x58, 0x3b, 0x6f, 0xf2, 0x49, 0xba, 0x36, 0x58, 0xa8, 0x79, 0xd2, 0x8b, 0xba, 0x26, 0x71, 0x4b, 0x0a, 0xd2, 0xfc, 0x52, 0x84, 0x64, 0x4b, 0xa6, 0x47, 0x60, 0x89, 0x4c, 0xa1, 0xcd, 0x9a, 0xa6, 0xc2, 0xcf, 0x23, 0x99, 0xfc, 0xce, 0x49, 0x8e, 0x5c, 0x4c, 0xe9, 0x77, 0xb9, 0xe1, 0xf1, 0xe9, 0x55, 0xf0, 0x38, 0x59, 0x61, 0x1d, 0xd2, 0x6a, 0xa0, 0xf2, 0xb4, 0xf7, 0xef, 0xad, 0xc2, 0xf2, 0xf8, 0x2b, 0xe6, 0x4c, 0x58, 0x24, 0x57, 0x97, 0xd0, 0x7b, 0x45, 0x3d, 0x32, 0x62, 0xec, 0xa5, 0xe0, 0xaa, 0x1f, 0x14, 0xa7, 0xf2, 0x76, 0x01, 0x49, 0x33, 0xb2, 0x78, 0xaf, 0x64, 0x28, 0xf1, 0x0d, 0x8e, 0x79, 0x4a, 0x07, 0x62, 0xce, 0x85, 0x83, 0x6d, 0x50, 0x18, 0x4f, 0x22, 0xc6, 0xbd, 0x71, 0x70, 0x31, 0x6c, 0x8c, 0x37, 0x6b, 0x1c, 0x19, 0x93, 0x35, 0x0c, 0x86, 0x78, 0x2c, 0xcd, 0xdf, 0xc9, 0xd0, 0xbf, 0xe5, 0x19, 0xba, 0xb7, 0x44, 0xa3, 0x8d, 0x33, 0x14, 0xb1, 0x7d, 0x6e, 0x1a, 0x86, 0x32, 0xf5, 0x3c, 0x37, 0x0d, 0x2f, 0x19, 0x83, 0xc8, 0xd5, 0x56, 0xdc, 0x1a, 0xc5, 0xfc, 0xe2, 0x01, 0xc5, 0x48, 0x92, 0x8f, 0x59, 0xae, 0x80, 0x9c, 0xce, 0x7b, 0x96, 0xbc, 0xdd, 0xf8, 0x2c, 0x69, 0xde, 0xa7, 0xe0, 0x8a, 0x7c, 0x49, 0xe3, 0x4d, 0xd3, 0x3c, 0x86, 0x7e, 0xa5, 0xd3, 0xc0, 0xd3, 0xfc, 0x41, 0x85, 0xce, 0xe8, 0xe6, 0xf0, 0xa0, 0xc6, 0xa9, 0xc6, 0xf1, 0x14, 0xa3, 0xe9, 0x68, 0x54, 0x88, 0xbe, 0x11, 0x23, 0xf5, 0x32, 0x71, 0x98, 0xb8, 0x1d, 0xe7, 0x34, 0x6f, 0x28, 0xb4, 0xd6, 0x25, 0xb9, 0x96, 0x3c, 0x75, 0x61, 0x7a, 0x1d, 0xce, 0x9f, 0xf5, 0x56, 0xa7, 0x1f, 0xf1, 0x5c, 0x69, 0x4f, 0x10, 0x64, 0xc4, 0x7d, 0x50, 0x30, 0xf8, 0x8f, 0x50, 0x10, 0x07, 0xd8, 0x84, 0xab, 0xac, 0x70, 0x88, 0x38, 0xab, 0x64, 0x37, 0xb6, 0x35, 0xcb, 0x8d, 0x95, 0x1b, 0x7e, 0xb0, 0x3f, 0x31, 0xf5, 0x6d, 0xfc, 0x68, 0x12, 0x31, 0x17, 0x05, 0x5f, 0x15, 0xcf, 0xc3, 0x57, 0x10, 0x7b, 0x7a, 0x9c, 0xfc, 0x8e, 0x2f, 0x81, 0x34, 0x8f, 0xb2, 0x79, 0x1d, 0xf9, 0xb4, 0x8d, 0x3b, 0xd8, 0x46, 0xa7, 0x2d, 0x93, 0x73, 0x19, 0x73, 0x67, 0x4b, 0xc9, 0x8f, 0x54, 0x9a, 0x3b, 0xab, 0x58, 0xb3, 0xa1, 0x55, 0xce, 0x86, 0x75, 0x25, 0x7d, 0x1a, 0xb7, 0xb6, 0x50, 0xf3, 0xb3, 0xe6, 0xc5, 0x13, 0x4d, 0x12, 0xfe, 0xa0, 0xd2, 0x7e, 0xb5, 0xc6, 0xf3, 0x4e, 0xc6, 0xa4, 0x8c, 0xf6, 0x8b, 0x99, 0x56, 0xc6, 0x4d, 0x3a, 0x2f, 0x17, 0x3f, 0x9d, 0x16, 0xcc, 0x1f, 0xe2, 0xf4, 0xde, 0x96, 0x5f, 0x33, 0x20, 0xf8, 0xbf, 0x25, 0x50, 0x14, 0x52, 0x5f, 0xf2, 0x48, 0xee, 0x1c, 0x57, 0xfd, 0x6d, 0x78, 0xbd, 0x37, 0xf1, 0x75, 0xf1, 0x77, 0x2f, 0x7e, 0xf6, 0xe1, 0x67, 0x3f, 0x7e, 0x0e, 0x90, 0xf7, 0x8c, 0x2c, 0x5d, 0xaa, 0x41, 0xa0, 0xc9, 0x62, 0x4f, 0x16, 0x05, 0x55, 0xba, 0xcd, 0xce, 0xcf, 0x48, 0xb1, 0x32, 0x6f, 0x01, 0x47, 0xc8, 0x82, 0x29, 0x88, 0xfb, 0x91, 0x2f, 0x59, 0x92, 0x8f, 0xb5, 0x07, 0xb5, 0xfd, 0xb1, 0x05, 0x77, 0x82, 0x4d, 0x6e, 0x57, 0xd7, 0xff, 0xa4, 0x21, 0xcd, 0x3b, 0x4d, 0xf3, 0x4d, 0xc7, 0xf1, 0x4c, 0xcd, 0x84, 0x43, 0x54, 0x5f, 0x1b, 0xbb, 0x2c, 0x78, 0x65, 0xde, 0x62, 0x95, 0x78, 0xa8, 0xeb, 0xeb, 0xd7, 0xfb, 0xb5, 0xf2, 0x2f, 0x70, 0xf9, 0xe7, 0xb5, 0xf2, 0x2f, 0x68, 0xe5, 0x89, 0x2f, 0xd2, 0x65, 0x58, 0xf1, 0x1a, 0x6c, 0x15, 0x1c, 0x19, 0x6c, 0xfb, 0x7a, 0x3c, 0xd9, 0x9c, 0x33, 0x91, 0x02, 0x52, 0xbf, 0x8b, 0xdf, 0x79, 0xea, 0xab, 0xe5, 0x13, 0x02, 0x48, 0x09, 0xe1, 0xb3, 0x4d, 0xfd, 0x5e, 0x99, 0x89, 0xbd, 0x1f, 0xcc, 0x77, 0x00, 0xb6, 0x35, 0x9c, 0xe6, 0xa1, 0xf8, 0x4c, 0x03, 0xed, 0xea, 0xf7, 0x46, 0xea, 0x67, 0x06, 0xd5, 0x73, 0xbe, 0x09, 0xf8, 0xfc, 0xea, 0x48, 0x3b, 0x96, 0x0e, 0xaa, 0xe7, 0x59, 0x32, 0xee, 0x0c, 0xf1, 0x25, 0xc6, 0xf2, 0x34, 0xb9, 0x38, 0x2b, 0x7b, 0x28, 0xd9, 0x35, 0x56, 0xde, 0xb0, 0xae, 0x1b, 0x90, 0xd6, 0x79, 0x19, 0xfb, 0xbc, 0x31, 0xf6, 0xf5, 0x38, 0x59, 0xf2, 0x7e, 0x29, 0x31, 0x2d, 0xb6, 0x2a, 0x6e, 0x8c, 0x3d, 0x9b, 0x30, 0xa6, 0x72, 0x94, 0xfc, 0x4c, 0xac, 0x99, 0xbd, 0x94, 0x0c, 0x2a, 0xa6, 0x94, 0x84, 0xe3, 0x34, 0x48, 0xbc, 0x66, 0xf2, 0x03, 0x43, 0x36, 0xd0, 0x43, 0x1f, 0xab, 0x67, 0x8a, 0xa2, 0xea, 0xee, 0x2a, 0xe2, 0x77, 0xd7, 0xaa, 0xc3, 0xfe, 0x89, 0xbe, 0x89, 0x23, 0xd8, 0x56, 0x7c, 0xfb, 0x19, 0x5f, 0xb1, 0xfa, 0xb2, 0x2f, 0x38, 0x82, 0xb4, 0xd0, 0xcc, 0xa8, 0x7a, 0xf6, 0x50, 0xd5, 0x21, 0xea, 0x47, 0x48, 0x3d, 0x37, 0x12, 0xc1, 0x1c, 0x53, 0xa8, 0x7d, 0x38, 0xd6, 0x2f, 0x33, 0x6f, 0x7c, 0x50, 0xc7, 0x1b, 0x37, 0xcd, 0x20, 0x4f, 0x24, 0x6b, 0x99, 0xa3, 0xcd, 0xbc, 0x43, 0xe1, 0xd5, 0xee, 0x3a, 0xcb, 0xfb, 0x97, 0xce, 0xa6, 0x19, 0xb1, 0x87, 0x47, 0x1e, 0x19, 0x99, 0xed, 0xef, 0x0d, 0xb4, 0xe3, 0x1b, 0x70, 0x1c, 0x47, 0x16, 0x81, 0x34, 0x52, 0xff, 0xf9, 0x20, 0xe2, 0x13, 0x98, 0x8a, 0x21, 0xe3, 0xc8, 0x6c, 0x0c, 0x19, 0xb5, 0x34, 0x13, 0xa7, 0x99, 0x62, 0xab, 0x3a, 0x49, 0x16, 0x38, 0xbf, 0x31, 0x38, 0x32, 0x1b, 0xdf, 0x7e, 0xd5, 0x9f, 0x8b, 0x2d, 0xca, 0xc3, 0x16, 0x5d, 0xf3, 0xe7, 0xcc, 0x0b, 0xb1, 0xfc, 0xfc, 0xa8, 0xcf, 0x38, 0x52, 0xaf, 0xb5, 0x6e, 0x2c, 0xf6, 0x2c, 0xe6, 0x8f, 0x61, 0xfb, 0x6d, 0xd8, 0xfe, 0x8b, 0x58, 0x72, 0x0a, 0x96, 0xa4, 0x51, 0xbe, 0xe4, 0xcf, 0x39, 0x14, 0xd3, 0x7a, 0x73, 0xd9, 0x6f, 0xd4, 0xca, 0x5e, 0xa1, 0xb6, 0xe2, 0x78, 0xec, 0xc5, 0xd5, 0x20, 0xe1, 0x98, 0x6c, 0x44, 0xea, 0xea, 0x9a, 0xc6, 0x15, 0xde, 0xe8, 0x35, 0x67, 0x79, 0xe8, 0xa3, 0xef, 0xa7, 0xf7, 0x37, 0x8e, 0xe0, 0x77, 0x59, 0x27, 0x38, 0x28, 0xe3, 0x8a, 0xd1, 0x38, 0xd7, 0xa4, 0x9f, 0x9e, 0xe6, 0xb8, 0x1e, 0x23, 0xae, 0x30, 0x96, 0x18, 0x62, 0xbe, 0x59, 0xee, 0x5b, 0x3f, 0x4e, 0x98, 0x88, 0xeb, 0xa7, 0x90, 0x07, 0x9c, 0xf5, 0x45, 0x58, 0xa3, 0xfa, 0x12, 0xd6, 0x6b, 0x2c, 0x0a, 0xab, 0xaf, 0x96, 0xe2, 0x49, 0xa6, 0xe1, 0xd1, 0x61, 0xc2, 0x26, 0x35, 0xfc, 0x77, 0x6f, 0x7b, 0xa9, 0xc6, 0xfb, 0xde, 0xd7, 0xee, 0x66, 0xfc, 0x77, 0x7f, 0x87, 0x5d, 0xe3, 0x7d, 0x1f, 0xe8, 0x28, 0x10, 0xbc, 0x77, 0x7c, 0xd3, 0xde, 0x34, 0xd7, 0x8c, 0x71, 0xdf, 0x7c, 0x1e, 0x77, 0x37, 0x2c, 0xa3, 0x14, 0x7c, 0x3f, 0x59, 0x57, 0xb1, 0xbe, 0xfd, 0xb1, 0xfa, 0x52, 0xdc, 0xa6, 0x9d, 0x03, 0xb9, 0x45, 0x64, 0x99, 0xf7, 0x25, 0x8d, 0x37, 0xbf, 0xaa, 0x34, 0xec, 0x28, 0x56, 0x5f, 0x4d, 0xdf, 0x17, 0x90, 0x5e, 0xa3, 0x77, 0x52, 0xe8, 0xda, 0x27, 0xd7, 0x68, 0x1c, 0x70, 0x5d, 0x6c, 0xce, 0x70, 0xa7, 0x37, 0x7b, 0x27, 0x11, 0x1d, 0x3e, 0x9f, 0x7a, 0xb0, 0xd9, 0x1e, 0xac, 0x7f, 0x1e, 0x7b, 0xb1, 0x5a, 0x7d, 0x69, 0x46, 0x18, 0x56, 0xf3, 0x49, 0x89, 0x63, 0xe5, 0x30, 0xdb, 0x71, 0x34, 0x66, 0x56, 0xa9, 0xaf, 0x96, 0x59, 0x1c, 0x73, 0x7c, 0xb9, 0x81, 0x48, 0x39, 0xa4, 0xdb, 0x83, 0xeb, 0x70, 0x33, 0x52, 0x9a, 0xad, 0x82, 0xd7, 0xcc, 0xdc, 0xbf, 0xd5, 0xe9, 0x96, 0xff, 0x0c, 0xb1, 0xbe, 0xff, 0x40, 0x0c, 0x0f, 0x7f, 0xf3, 0xf1, 0x97, 0xbc, 0x9b, 0x10, 0x3f, 0x87, 0xec, 0xa0, 0x6e, 0x56, 0xf2, 0x7e, 0xd6, 0x8a, 0xa9, 0xad, 0x40, 0xbf, 0xf9, 0xf8, 0x3b, 0x45, 0x83, 0xbf, 0x67, 0x30, 0x57, 0xf0, 0xf6, 0xa9, 0x6f, 0xff, 0x38, 0x51, 0x4f, 0xa3, 0xf9, 0x33, 0xe2, 0x71, 0xae, 0xfe, 0x0f, 0xc1, 0xdf, 0x5c, 0xfd, 0x33, 0xc1, 0xdb, 0xa4, 0xb0, 0x49, 0x6b, 0xd9, 0x7a, 0x6a, 0x09, 0xb5, 0x0e, 0x4f, 0xfd, 0x81, 0x74, 0x1c, 0x41, 0x7c, 0x31, 0xe7, 0xd7, 0x3e, 0xa0, 0x1d, 0x4e, 0x2d, 0xc1, 0x51, 0xfc, 0x2e, 0x8e, 0x5a, 0x23, 0x52, 0x00, 0x9e, 0xf2, 0xdc, 0x32, 0x1c, 0xb5, 0x9f, 0xe1, 0x4a, 0xfa, 0x0f, 0x5c, 0x73, 0xf8, 0xbb, 0x0a, 0x7f, 0xfb, 0x5d, 0x3c, 0x3e, 0x73, 0x3f, 0x56, 0x8f, 0x39, 0x99, 0xaa, 0x71, 0xe0, 0xf7, 0x57, 0x1c, 0x25, 0x06, 0x6d, 0x76, 0xfd, 0xe9, 0xb1, 0x20, 0x1e, 0x07, 0x62, 0x70, 0xa4, 0xbf, 0xab, 0xf1, 0x97, 0xb1, 0xb5, 0xd3, 0x38, 0x95, 0x68, 0xac, 0xf5, 0x88, 0x97, 0x3c, 0x2f, 0x34, 0x25, 0x30, 0x5e, 0xcc, 0xd3, 0xee, 0xa2, 0xd9, 0x62, 0x6d, 0x75, 0x1f, 0x63, 0x7e, 0x2a, 0x42, 0x2d, 0xe2, 0xdb, 0x7d, 0x25, 0x97, 0xf9, 0x76, 0x62, 0xaf, 0xe1, 0xfc, 0x85, 0xae, 0x5d, 0x7b, 0x94, 0x57, 0xf0, 0x00, 0x79, 0xf8, 0xa4, 0x7b, 0x17, 0x6a, 0xbd, 0xd6, 0xae, 0xdf, 0x53, 0x9b, 0x8a, 0xaa, 0xd5, 0xef, 0xba, 0x71, 0x96, 0x8a, 0xe6, 0xa8, 0xaf, 0x3a, 0xdb, 0xd5, 0x97, 0xb4, 0xb6, 0xb5, 0xe1, 0xfc, 0xbd, 0x6a, 0x6f, 0xe5, 0x9e, 0xaf, 0xd6, 0xf8, 0xaa, 0xe2, 0xee, 0x85, 0xf8, 0xaa, 0x74, 0xf7, 0x42, 0x7c, 0x55, 0x71, 0xf7, 0x82, 0xfb, 0xb2, 0x53, 0x1e, 0x9c, 0xd7, 0x5e, 0xc6, 0xf4, 0xd9, 0x62, 0x4c, 0xf7, 0x60, 0x3a, 0xbe, 0xaf, 0xc3, 0xc1, 0xf4, 0xd9, 0x62, 0xc4, 0x25, 0xa6, 0xa6, 0xfb, 0xca, 0x7c, 0x57, 0x2b, 0xcb, 0x8c, 0x6d, 0xd4, 0xb8, 0xae, 0x5a, 0x8a, 0x57, 0x22, 0x6e, 0x06, 0x73, 0x5d, 0xdd, 0x1a, 0x85, 0x86, 0x34, 0xd1, 0xdb, 0x67, 0x98, 0x7e, 0xa2, 0x3c, 0x93, 0x05, 0x17, 0xfd, 0xf7, 0x8c, 0x67, 0xee, 0xc8, 0xde, 0x2d, 0xb9, 0x88, 0x3f, 0x9c, 0xb0, 0x6b, 0x2d, 0xcf, 0xd3, 0x7a, 0x4f, 0xdc, 0x64, 0x2d, 0x2f, 0x8f, 0x18, 0xa8, 0x4e, 0xec, 0xdf, 0xab, 0xd8, 0xdf, 0xf5, 0xd8, 0xdf, 0xef, 0x66, 0x6f, 0x2f, 0xae, 0x9e, 0xc6, 0x53, 0x15, 0x7b, 0xce, 0x34, 0x9b, 0x3d, 0xf3, 0x4e, 0xed, 0x16, 0x04, 0x4f, 0x80, 0x97, 0x6e, 0xbe, 0x05, 0xa1, 0x58, 0x2c, 0xb9, 0x1b, 0xf1, 0xd5, 0x55, 0x1d, 0x08, 0x67, 0x3b, 0xe7, 0xb3, 0x77, 0xb9, 0x7b, 0xe2, 0x4c, 0x0b, 0x56, 0xe3, 0x8c, 0xb3, 0x45, 0x63, 0xa2, 0x04, 0x57, 0x75, 0xe6, 0x69, 0xef, 0xba, 0xca, 0x71, 0x8d, 0x0c, 0xbf, 0x9f, 0xed, 0xcc, 0xd7, 0x62, 0x2f, 0x12, 0x74, 0xc0, 0xf8, 0x0a, 0xf6, 0xa1, 0x94, 0xbe, 0x79, 0x39, 0xa6, 0xa7, 0x15, 0xd3, 0x30, 0x04, 0x73, 0x21, 0xb4, 0x47, 0x48, 0xbe, 0x3e, 0xd1, 0x43, 0x71, 0x18, 0x9e, 0xea, 0x08, 0xb2, 0xbf, 0x93, 0xad, 0xcd, 0xeb, 0xf8, 0xf6, 0xf2, 0x51, 0x3e, 0xf5, 0xb4, 0xfb, 0xa0, 0xeb, 0x5b, 0xb8, 0xad, 0x74, 0xc3, 0x85, 0x63, 0x71, 0xb5, 0x8e, 0x4f, 0xbc, 0x46, 0x3e, 0xef, 0xda, 0xb4, 0xf3, 0xaf, 0x4d, 0x3b, 0xff, 0xda, 0x70, 0xfd, 0xeb, 0x6e, 0xbd, 0x97, 0x55, 0x88, 0x92, 0xf5, 0xbb, 0x7e, 0x77, 0x94, 0xef, 0xb2, 0xb5, 0xb3, 0x10, 0xc3, 0xfb, 0xb9, 0x05, 0xdb, 0x12, 0x53, 0xb4, 0xdb, 0xbe, 0x62, 0x75, 0x5b, 0xfa, 0x54, 0xe6, 0x7d, 0x9f, 0xc1, 0xf9, 0x34, 0xae, 0x74, 0x6b, 0xc6, 0xbf, 0x5d, 0x6e, 0x2a, 0xde, 0x75, 0xa3, 0x3f, 0x4e, 0x9f, 0x1c, 0x64, 0xbc, 0xed, 0x14, 0xaf, 0x88, 0x0c, 0x0d, 0x10, 0xcf, 0xb3, 0xc7, 0xf4, 0x54, 0x2c, 0x62, 0x94, 0x26, 0x41, 0x15, 0xb0, 0x87, 0xeb, 0xf4, 0xbd, 0xb9, 0x17, 0x71, 0x10, 0xaf, 0xf0, 0x88, 0x82, 0x78, 0x48, 0x7e, 0xda, 0x3a, 0x04, 0x52, 0xba, 0x23, 0xd1, 0x5f, 0x06, 0xc8, 0x67, 0xb0, 0xcd, 0x89, 0x3b, 0xdc, 0x45, 0xfe, 0x23, 0xcc, 0x64, 0x0f, 0xc3, 0xbb, 0x3e, 0x36, 0x90, 0x98, 0xc2, 0x9c, 0xe2, 0x04, 0xf3, 0x32, 0xb6, 0x93, 0x07, 0x09, 0xe6, 0x5d, 0x34, 0x13, 0x9d, 0x62, 0x27, 0x9b, 0xe4, 0x88, 0xf5, 0x92, 0x37, 0x94, 0x6e, 0xc8, 0x77, 0xc1, 0x04, 0x9c, 0x7b, 0xb7, 0xd7, 0x88, 0x94, 0x65, 0x3f, 0x52, 0x5a, 0x4b, 0x83, 0x13, 0xe7, 0x5c, 0x53, 0xfb, 0xeb, 0x5f, 0x74, 0x42, 0x26, 0x7e, 0x15, 0xc7, 0x9b, 0xea, 0x5f, 0xb4, 0xe7, 0x2c, 0x01, 0xb9, 0x9a, 0xfc, 0xd6, 0xb2, 0x5c, 0x6f, 0x61, 0xc9, 0x6b, 0x94, 0x83, 0xe8, 0xa7, 0x20, 0xcc, 0xbd, 0xa6, 0x36, 0xd6, 0x6f, 0x44, 0x7a, 0xaf, 0x54, 0x94, 0xe3, 0x58, 0x03, 0xc7, 0xd4, 0x64, 0xf3, 0x66, 0x6a, 0x33, 0x72, 0x4a, 0xf9, 0x0d, 0xef, 0x9e, 0xc0, 0xb1, 0xb1, 0x59, 0x9d, 0x10, 0x85, 0x3a, 0x7c, 0xaa, 0xbf, 0xe1, 0x2d, 0x12, 0xa7, 0x07, 0x75, 0x6f, 0xc8, 0xe1, 0x98, 0xc6, 0x5b, 0xbc, 0xc1, 0xc4, 0x29, 0xd1, 0x1b, 0x7b, 0xc7, 0xb1, 0x8f, 0xd1, 0x68, 0x79, 0x71, 0x04, 0x60, 0xbe, 0x37, 0x2c, 0xb8, 0x70, 0xa1, 0x0b, 0x38, 0xab, 0x82, 0x8e, 0x7b, 0x2c, 0xed, 0x11, 0x56, 0x84, 0x47, 0x17, 0x52, 0x98, 0x7c, 0xa6, 0xf1, 0x5b, 0xb6, 0xc1, 0x5a, 0x1e, 0xd7, 0x13, 0xf5, 0x1b, 0x64, 0x37, 0xac, 0x25, 0xef, 0x35, 0x3d, 0x64, 0xc5, 0xd6, 0xc7, 0xb3, 0x72, 0x9a, 0x79, 0x55, 0xb5, 0x50, 0xe8, 0xad, 0x07, 0xd9, 0xdb, 0x03, 0x27, 0x5b, 0xf6, 0x80, 0x2d, 0xe5, 0x18, 0x59, 0xf7, 0x08, 0xfb, 0x8a, 0x64, 0xff, 0x90, 0x88, 0xb3, 0xaa, 0x76, 0x41, 0xf7, 0x09, 0x6a, 0x95, 0xf1, 0xf2, 0x5a, 0x27, 0x38, 0x0c, 0xce, 0xfa, 0x58, 0x2f, 0x62, 0x35, 0xcb, 0x13, 0x41, 0xc6, 0xf7, 0x89, 0x8e, 0x7c, 0x99, 0x35, 0x0f, 0xee, 0x49, 0x10, 0x5d, 0xc9, 0xed, 0x19, 0x8b, 0x7c, 0xab, 0x0d, 0x3c, 0x2f, 0xb6, 0x41, 0x49, 0x26, 0xa6, 0x52, 0x31, 0xeb, 0xe2, 0x74, 0xd4, 0x67, 0x9a, 0x36, 0x70, 0x80, 0xd3, 0x40, 0xfe, 0x6d, 0xb3, 0xf4, 0x01, 0x52, 0x3e, 0x79, 0x48, 0xf3, 0xe4, 0xcd, 0x67, 0x1f, 0xd2, 0x1c, 0x9e, 0x82, 0xe1, 0x29, 0x5f, 0xcd, 0x86, 0x6d, 0x18, 0xb6, 0xe9, 0xd2, 0xf3, 0x31, 0x9c, 0xff, 0xd5, 0xf1, 0xf9, 0xf3, 0xda, 0x6d, 0x5a, 0x4a, 0x26, 0x67, 0x38, 0x98, 0xa9, 0x7d, 0x4a, 0xc7, 0xed, 0x52, 0xb3, 0x65, 0x6d, 0xfa, 0x5a, 0x6f, 0x2a, 0x7b, 0x53, 0x2a, 0x51, 0x31, 0x01, 0xb6, 0x61, 0xe5, 0xf6, 0x82, 0x83, 0x66, 0x86, 0xe9, 0xc4, 0xb2, 0x39, 0x38, 0x92, 0xe1, 0xff, 0xe1, 0xba, 0x43, 0x91, 0xe4, 0xb0, 0xc3, 0x26, 0xbf, 0xe8, 0xee, 0x8f, 0xf5, 0x25, 0xa6, 0xba, 0x23, 0xce, 0xbb, 0x13, 0xe7, 0xe5, 0xb0, 0xbd, 0x2a, 0xba, 0x0c, 0x48, 0xca, 0xff, 0x69, 0xdc, 0x79, 0xc7, 0xdd, 0x55, 0xca, 0x99, 0xe9, 0x9d, 0x50, 0x40, 0x3e, 0xa3, 0x1d, 0x01, 0x61, 0xbd, 0xd4, 0x27, 0x3b, 0xcc, 0x4e, 0x88, 0x2d, 0xef, 0xb4, 0x47, 0x97, 0x8d, 0x9d, 0xf6, 0x9a, 0xab, 0xaf, 0xe1, 0x99, 0xb2, 0x1e, 0x77, 0xea, 0x8a, 0x4e, 0x53, 0x74, 0x99, 0x9a, 0xa7, 0x94, 0xc4, 0x56, 0x24, 0x62, 0xf8, 0x14, 0x51, 0x1c, 0x38, 0x3f, 0x4e, 0xcc, 0xf5, 0x3e, 0xe7, 0x4a, 0xe9, 0x72, 0x59, 0x14, 0x33, 0xe6, 0x72, 0xe0, 0x13, 0xc9, 0xca, 0xae, 0x57, 0x0a, 0x62, 0xbd, 0x14, 0x3f, 0xb6, 0x1d, 0xe3, 0x7b, 0x13, 0x56, 0x7c, 0xda, 0xc5, 0xde, 0xe8, 0x03, 0xb4, 0x6a, 0x8c, 0x56, 0x1d, 0x6d, 0x93, 0xf1, 0x19, 0x3c, 0x1a, 0x4c, 0xd3, 0x6a, 0xb3, 0x2a, 0xdd, 0x48, 0xab, 0xb9, 0xea, 0x5d, 0x74, 0xaf, 0x42, 0xf2, 0x1f, 0x4b, 0xf1, 0xf7, 0x7e, 0xb0, 0xe2, 0x3b, 0x0f, 0xd6, 0xaf, 0x77, 0xb0, 0x4c, 0x08, 0x42, 0xa7, 0x22, 0xa4, 0x6f, 0xd6, 0x3b, 0x81, 0xa8, 0x00, 0x96, 0x32, 0x33, 0x8b, 0x98, 0x2e, 0xdb, 0xc8, 0x72, 0xde, 0xaf, 0x11, 0xda, 0xaf, 0xb8, 0xf6, 0x1a, 0xfc, 0xa4, 0xf3, 0xf3, 0x2e, 0x61, 0x9d, 0xd1, 0x61, 0x1f, 0x9e, 0xe3, 0xa4, 0x5d, 0x44, 0x37, 0x4d, 0xa4, 0x47, 0x24, 0xb7, 0x83, 0x11, 0x69, 0x9d, 0x06, 0xd2, 0x00, 0xda, 0xd4, 0xbb, 0x79, 0xb9, 0x4e, 0xa3, 0x87, 0xe1, 0xac, 0x7a, 0x4a, 0x68, 0x0c, 0x09, 0x3d, 0xa2, 0x9b, 0x4a, 0x2f, 0x06, 0x6b, 0xea, 0xce, 0xe1, 0xbe, 0x2e, 0xb0, 0x63, 0x3d, 0x9b, 0xfa, 0x36, 0xaf, 0x48, 0x97, 0xa2, 0x14, 0xf1, 0x3c, 0xba, 0x70, 0x06, 0xd6, 0xcf, 0x7b, 0xc8, 0x41, 0x7c, 0x1a, 0x21, 0x8b, 0xa3, 0xe7, 0x8d, 0x74, 0xda, 0xa5, 0x36, 0x75, 0x0c, 0x9a, 0x1b, 0x32, 0x7c, 0x0b, 0xa6, 0x8b, 0xb3, 0xb4, 0xf2, 0xbe, 0x5b, 0xd0, 0xca, 0xfb, 0xd2, 0x1e, 0xc4, 0x9d, 0x48, 0x2b, 0x3b, 0x1a, 0x14, 0xab, 0xc6, 0x4f, 0xd8, 0x9c, 0xa1, 0x92, 0xcf, 0xcb, 0x73, 0x32, 0x5e, 0xad, 0x8c, 0xb7, 0xa5, 0x8b, 0xed, 0x7a, 0x59, 0xa4, 0x34, 0x4f, 0xd8, 0x1e, 0x94, 0x1f, 0x69, 0x5e, 0xc7, 0xeb, 0xab, 0x04, 0xf1, 0x80, 0xc2, 0x21, 0xe2, 0x33, 0x38, 0xca, 0xdc, 0xb0, 0x91, 0xf4, 0x42, 0xe4, 0xda, 0x1d, 0xad, 0xb0, 0x31, 0x2e, 0xa5, 0x0c, 0xf6, 0x06, 0xe6, 0x71, 0x10, 0xe6, 0x50, 0x98, 0x38, 0x83, 0x3b, 0x38, 0x4b, 0xff, 0xae, 0x67, 0xfa, 0xd7, 0x9e, 0x95, 0x4e, 0x5a, 0xe5, 0xd4, 0x49, 0x27, 0xed, 0x52, 0xbb, 0xb2, 0xf2, 0x49, 0x11, 0x6b, 0xda, 0x8e, 0xae, 0x2b, 0xea, 0x00, 0x77, 0xc8, 0x59, 0xcf, 0xb4, 0x7f, 0x53, 0x74, 0x4f, 0xc5, 0x5c, 0xc5, 0x98, 0xee, 0x4f, 0xa2, 0x50, 0xc3, 0x02, 0xce, 0x13, 0x87, 0x42, 0x96, 0xec, 0x77, 0x08, 0x18, 0xf0, 0xc9, 0x60, 0x2c, 0x98, 0xf8, 0x40, 0xae, 0x13, 0x1e, 0xc8, 0x64, 0xcb, 0x78, 0xd9, 0x2b, 0x1d, 0xed, 0x6c, 0xfe, 0xd3, 0x69, 0x63, 0xbd, 0xb7, 0xf6, 0x9b, 0xe8, 0xe2, 0x97, 0x6e, 0xe2, 0xb5, 0x2f, 0xd1, 0xfc, 0x57, 0x4b, 0xd4, 0x2f, 0x5c, 0xd9, 0xec, 0x17, 0x7c, 0x89, 0x41, 0x16, 0xf6, 0xe7, 0x64, 0x5a, 0x8f, 0x02, 0x06, 0xe1, 0x1a, 0xb7, 0x63, 0xac, 0x03, 0xf3, 0xb9, 0x30, 0x9f, 0x07, 0x6b, 0xf5, 0x61, 0xde, 0x52, 0xa7, 0x17, 0xca, 0x5d, 0x5e, 0x08, 0xe0, 0x0e, 0x0f, 0x7a, 0xbc, 0x10, 0x29, 0xf1, 0x42, 0x94, 0x75, 0xcb, 0x58, 0x77, 0x14, 0x47, 0x6a, 0x94, 0x6c, 0xd7, 0x90, 0x25, 0x18, 0x3f, 0x42, 0x11, 0xc4, 0xc0, 0x70, 0x45, 0x93, 0x3d, 0x18, 0xf2, 0x3d, 0x48, 0x52, 0x8a, 0x5e, 0x7c, 0x5f, 0x29, 0x42, 0x10, 0xbe, 0xb1, 0xb4, 0xe0, 0x53, 0x3e, 0x3e, 0x0d, 0x13, 0xc7, 0x97, 0xee, 0xbf, 0xbc, 0x06, 0xd6, 0xf9, 0x99, 0xe4, 0x25, 0x9b, 0x4b, 0x3e, 0x7c, 0x36, 0xe2, 0x3c, 0x2c, 0x21, 0xa9, 0x76, 0xe1, 0xc7, 0xeb, 0x4f, 0xaf, 0x97, 0xea, 0xc2, 0xb6, 0x3b, 0x70, 0x77, 0x1a, 0xf5, 0xef, 0xc0, 0x7a, 0xa7, 0xa5, 0xeb, 0x15, 0x77, 0x23, 0xb2, 0x4f, 0xd6, 0x7c, 0xea, 0xd1, 0x7d, 0x0e, 0xf5, 0xb7, 0xd4, 0x0b, 0x65, 0x7e, 0x2f, 0x54, 0x90, 0x06, 0x1b, 0xdf, 0x5c, 0x59, 0x98, 0xe2, 0x7f, 0x8d, 0x7c, 0x8f, 0x32, 0x5e, 0x5f, 0x59, 0x8a, 0xf8, 0xa8, 0xef, 0x11, 0xd2, 0x00, 0xe3, 0xdb, 0xf1, 0xa5, 0xa0, 0x86, 0xff, 0xa1, 0x0c, 0x31, 0xd2, 0xc6, 0xe7, 0xbe, 0x75, 0xc0, 0x3b, 0xd9, 0x4f, 0xfe, 0x90, 0xbf, 0xf1, 0xc2, 0x7e, 0x6c, 0x83, 0x45, 0xc8, 0xfe, 0x93, 0xa4, 0x1e, 0x52, 0xcd, 0xaf, 0xd0, 0x9b, 0x95, 0x00, 0xf3, 0xc0, 0xcb, 0xbc, 0x73, 0xc0, 0x3a, 0xeb, 0x11, 0xb0, 0xcd, 0x22, 0xdf, 0x9e, 0x79, 0xf8, 0x6d, 0x84, 0x7c, 0xfc, 0x36, 0xc1, 0x14, 0x7f, 0x18, 0x4f, 0xab, 0x02, 0x7f, 0x88, 0xce, 0x2c, 0xe2, 0x8e, 0x56, 0x21, 0x8e, 0xc6, 0xb0, 0x12, 0xea, 0x9f, 0x26, 0xbb, 0xd6, 0x69, 0xdf, 0xc5, 0x72, 0x25, 0x59, 0x95, 0x66, 0xeb, 0xb6, 0x84, 0x69, 0x5c, 0xbb, 0xfe, 0xa1, 0xe2, 0x94, 0x8b, 0xc1, 0x9a, 0xb0, 0xb0, 0x1c, 0x00, 0xfb, 0xc2, 0x72, 0xdc, 0x8d, 0xfb, 0xdd, 0x6e, 0x9f, 0x9b, 0x72, 0x65, 0xf6, 0x67, 0x99, 0x3b, 0xcc, 0xbe, 0xff, 0x0e, 0x23, 0xde, 0x11, 0x50, 0xf2, 0x5d, 0x8f, 0x50, 0x0e, 0x7d, 0xba, 0xbd, 0x8e, 0xf6, 0x4e, 0xfc, 0xc3, 0xb4, 0x04, 0x07, 0xd6, 0xbc, 0x90, 0xbc, 0x7d, 0x69, 0x12, 0x25, 0xe9, 0xa7, 0xd5, 0x99, 0xa7, 0xf5, 0xf5, 0x1b, 0xec, 0x31, 0xa4, 0xcb, 0xc0, 0x60, 0x1b, 0x27, 0x67, 0x2a, 0x8b, 0x15, 0xcf, 0x30, 0xa5, 0x93, 0x6d, 0x7a, 0x3c, 0xd6, 0x08, 0x77, 0xe3, 0x59, 0x1f, 0x77, 0xa6, 0x1a, 0x6e, 0xf4, 0x94, 0x3e, 0x3d, 0x08, 0x0b, 0x12, 0x79, 0x72, 0x30, 0xda, 0x0a, 0x41, 0xc1, 0x45, 0x6d, 0x5e, 0x97, 0xd6, 0xf6, 0x4b, 0xfb, 0x13, 0x4c, 0xd7, 0x32, 0x8f, 0x6b, 0x49, 0xfa, 0x33, 0xbc, 0x4c, 0xcb, 0xf3, 0xfb, 0x35, 0x2b, 0x2a, 0xaf, 0x86, 0xb7, 0xb1, 0x87, 0xa5, 0x05, 0x1c, 0x6f, 0x4b, 0x35, 0x8c, 0xf3, 0xc1, 0xb1, 0x40, 0xd4, 0x95, 0x96, 0x7a, 0x25, 0x8d, 0x0b, 0x0d, 0x3a, 0xf5, 0xb3, 0xe4, 0xca, 0x5f, 0xc6, 0x0b, 0x85, 0x66, 0x89, 0x5a, 0xc7, 0x18, 0x61, 0xae, 0x08, 0x8d, 0x6e, 0x6f, 0x58, 0xa7, 0xf9, 0xfa, 0x12, 0x52, 0xac, 0x16, 0xaf, 0x44, 0x6d, 0xc1, 0xf2, 0x36, 0xad, 0x9c, 0x45, 0x2b, 0xf7, 0x58, 0xc3, 0x3a, 0xc4, 0x5f, 0x6c, 0xde, 0x18, 0xa6, 0xde, 0xe3, 0xf8, 0xaa, 0x02, 0xa3, 0x4b, 0x35, 0x1f, 0xf4, 0x8b, 0x20, 0x20, 0x38, 0xb7, 0xf7, 0x35, 0x40, 0x60, 0xde, 0xfd, 0xb0, 0x29, 0xbc, 0x15, 0x1c, 0xe1, 0x01, 0xfc, 0x26, 0x5f, 0x9b, 0x56, 0x65, 0x0a, 0xad, 0x72, 0xc4, 0x71, 0xf4, 0x73, 0x11, 0x40, 0xda, 0x5e, 0x83, 0x0e, 0x76, 0xe1, 0xcb, 0xce, 0x8a, 0x74, 0xfe, 0x67, 0x60, 0xd3, 0x82, 0x5c, 0xfb, 0x56, 0x08, 0xdc, 0x5b, 0x0b, 0x81, 0x46, 0x17, 0x6c, 0x52, 0xf2, 0xd9, 0x3f, 0xdf, 0xf8, 0xb2, 0x65, 0xda, 0x9e, 0x0f, 0xf0, 0x2a, 0xf1, 0xb2, 0x0d, 0x64, 0x47, 0x37, 0x94, 0xba, 0x61, 0x5a, 0xca, 0xb4, 0xb7, 0xb7, 0xd1, 0x0d, 0x9b, 0x9c, 0x55, 0xb5, 0xd7, 0x3e, 0x21, 0x8e, 0x8c, 0x35, 0x91, 0xdf, 0x25, 0x0d, 0xf5, 0x61, 0x7f, 0x8b, 0xc5, 0xca, 0x09, 0xbf, 0x46, 0xb6, 0xc1, 0x62, 0x2f, 0x24, 0xcc, 0x9c, 0x6f, 0x9e, 0xf2, 0x81, 0x73, 0x1b, 0x04, 0xa6, 0x57, 0x41, 0x80, 0xec, 0x63, 0xa5, 0x4f, 0x43, 0xac, 0xb9, 0x14, 0xd7, 0x5f, 0x39, 0x8e, 0x43, 0xc0, 0xd5, 0x29, 0x64, 0x0e, 0xdc, 0xac, 0x9d, 0xfa, 0x0c, 0x2c, 0xb5, 0x1d, 0x7d, 0xce, 0x43, 0xfa, 0x9f, 0x93, 0x9d, 0x31, 0x47, 0x8d, 0x07, 0xb1, 0x5d, 0x20, 0x1a, 0xcc, 0x84, 0xfb, 0xe0, 0xa2, 0x27, 0xe8, 0xfb, 0xcc, 0x08, 0xae, 0xd9, 0xbf, 0x08, 0xb2, 0x9e, 0x99, 0x74, 0xa8, 0x0d, 0x2c, 0xb3, 0x42, 0x50, 0xf6, 0x17, 0x21, 0xc8, 0xf3, 0x7f, 0x06, 0x43, 0x56, 0x7c, 0xca, 0xf7, 0x23, 0x55, 0x77, 0xe8, 0x2c, 0xe4, 0xfe, 0x45, 0x2d, 0x4c, 0x29, 0x0e, 0x23, 0x2c, 0x5b, 0xd1, 0xb0, 0x6e, 0x89, 0x61, 0x47, 0x5f, 0x3c, 0x2c, 0xd7, 0x2c, 0x81, 0x32, 0x17, 0x4c, 0x5b, 0x66, 0xda, 0xf7, 0xec, 0xd4, 0x00, 0x48, 0xbb, 0x56, 0xc4, 0x4b, 0x98, 0x5a, 0xb8, 0x63, 0x09, 0x66, 0x45, 0xfc, 0x39, 0xc7, 0x5f, 0xcb, 0x7a, 0xc1, 0x15, 0xde, 0x49, 0xbe, 0x10, 0x9e, 0x4e, 0x77, 0x0d, 0x0c, 0x93, 0xef, 0xaa, 0x6b, 0x63, 0xc5, 0x41, 0x3e, 0xef, 0xf2, 0x1d, 0x8d, 0xce, 0x5c, 0x71, 0x57, 0xa1, 0x26, 0x1d, 0x73, 0x9c, 0x35, 0xb1, 0xaf, 0xc7, 0x83, 0x74, 0x2a, 0xc6, 0xde, 0x84, 0x60, 0x82, 0x70, 0xfb, 0x20, 0x71, 0xd7, 0xaf, 0x6f, 0x54, 0xcc, 0x72, 0x0c, 0x29, 0x65, 0xf2, 0x57, 0x4d, 0xf5, 0x1b, 0x69, 0x8e, 0xaf, 0x05, 0xd3, 0xb2, 0x79, 0x8f, 0xee, 0x89, 0xf6, 0x91, 0x0e, 0xef, 0x33, 0x06, 0xa4, 0xf4, 0xf2, 0xd9, 0x32, 0x33, 0x9f, 0xa2, 0x69, 0xbb, 0x57, 0x38, 0x3e, 0x4d, 0x38, 0x2e, 0xcd, 0x38, 0xf2, 0xdd, 0xe4, 0x5f, 0x8d, 0x3c, 0xd0, 0x28, 0x60, 0x5c, 0xe5, 0x4b, 0x22, 0xc4, 0xea, 0xf7, 0x27, 0x11, 0x5a, 0x7d, 0x63, 0xfd, 0x39, 0x92, 0x4e, 0x18, 0x38, 0x47, 0x92, 0x0a, 0x3a, 0xed, 0x65, 0xb2, 0xfb, 0x31, 0x3f, 0x74, 0x8e, 0xbd, 0x9a, 0x07, 0xb0, 0x4c, 0x41, 0x94, 0xf4, 0x73, 0x11, 0xfa, 0x92, 0x64, 0xc4, 0x78, 0xa9, 0x88, 0x9c, 0x97, 0x7d, 0x08, 0x87, 0x2b, 0x10, 0x22, 0xfb, 0xab, 0x03, 0x51, 0x4f, 0x6e, 0xe3, 0xaa, 0x2d, 0xdf, 0x28, 0xc3, 0x49, 0x2c, 0xf7, 0x42, 0x2c, 0x10, 0xa9, 0xcc, 0x89, 0xfe, 0x6b, 0xe3, 0xd7, 0x5f, 0x5a, 0x2b, 0xa4, 0x89, 0x49, 0x3e, 0x21, 0x01, 0x52, 0x30, 0x65, 0x18, 0x5e, 0x6e, 0x0f, 0x32, 0xf7, 0xee, 0x4d, 0x68, 0x8d, 0x47, 0x30, 0x9e, 0xac, 0x42, 0xf5, 0x93, 0xe5, 0x82, 0x38, 0xe4, 0x6c, 0xc5, 0xbc, 0xb6, 0xcd, 0xa1, 0x59, 0xd5, 0x10, 0xf4, 0xb7, 0x41, 0xde, 0xa6, 0xda, 0x59, 0x11, 0x08, 0xf3, 0xfd, 0x52, 0x64, 0x63, 0xed, 0xac, 0x2a, 0xa8, 0xa1, 0x3b, 0x16, 0x84, 0x4b, 0x69, 0x79, 0xe8, 0x2b, 0x0a, 0xe4, 0x74, 0xe3, 0x88, 0x50, 0x5d, 0x61, 0xd6, 0x77, 0x0e, 0x0c, 0x8a, 0x9a, 0x1e, 0xff, 0xd3, 0x6a, 0x1a, 0x93, 0xb0, 0x26, 0xf7, 0x12, 0xe3, 0x9e, 0x15, 0x09, 0x13, 0x79, 0xde, 0x51, 0x8c, 0xb4, 0x3a, 0xb9, 0xc6, 0xf9, 0xb1, 0xe5, 0xf1, 0x66, 0xba, 0x03, 0x8c, 0xbe, 0x1b, 0xc0, 0x31, 0x70, 0x1b, 0x36, 0xaf, 0x6d, 0x33, 0x45, 0x9e, 0x7d, 0x7e, 0x3f, 0xe6, 0xa9, 0x5e, 0x06, 0x87, 0xde, 0x04, 0x65, 0xe9, 0x9d, 0x7b, 0x56, 0x7e, 0xb0, 0x1c, 0xcf, 0xa9, 0x85, 0x47, 0xd7, 0x76, 0xdd, 0xb9, 0x7f, 0xf9, 0xd1, 0xfe, 0x40, 0x12, 0xf2, 0xb6, 0x7c, 0x04, 0x79, 0xbb, 0x71, 0xae, 0x93, 0x56, 0x67, 0x6e, 0x64, 0x85, 0x5c, 0x45, 0x76, 0xe3, 0x14, 0x13, 0x52, 0x03, 0x1e, 0xc4, 0xe8, 0x3d, 0x24, 0x51, 0x06, 0x2f, 0x57, 0x60, 0xbd, 0x24, 0xd1, 0xb3, 0x2b, 0xda, 0xe9, 0x8a, 0xbe, 0xe7, 0x8b, 0x22, 0x3e, 0x69, 0x0d, 0x20, 0xfe, 0xee, 0xca, 0x3d, 0xfa, 0xec, 0xa6, 0x7e, 0xa5, 0xc4, 0x53, 0xfd, 0x9d, 0xfd, 0xb8, 0x31, 0x16, 0x1e, 0xe9, 0x5f, 0x7a, 0xe7, 0xbe, 0x95, 0xae, 0x9c, 0xa3, 0x6b, 0x95, 0xa9, 0x15, 0xe6, 0xe8, 0x7b, 0x98, 0xcf, 0x5c, 0xee, 0x06, 0x4f, 0x74, 0xaf, 0x62, 0xe1, 0xf7, 0x3e, 0xbb, 0xe4, 0xce, 0xfd, 0x2b, 0x70, 0x7e, 0xf3, 0x02, 0x24, 0x7b, 0x82, 0xef, 0x20, 0x2c, 0x6d, 0x47, 0x34, 0x59, 0xe8, 0x8b, 0x7a, 0xa2, 0xdf, 0x41, 0xf8, 0x4f, 0x71, 0x58, 0xca, 0x8e, 0xe3, 0x52, 0x12, 0x7d, 0xf7, 0xa7, 0xd4, 0x16, 0xda, 0xf9, 0x14, 0x67, 0xc1, 0x37, 0x96, 0x50, 0xba, 0x62, 0xa4, 0x36, 0xda, 0xdd, 0x78, 0xa2, 0x87, 0xec, 0x25, 0x1a, 0x8c, 0x6b, 0xe2, 0x39, 0xaa, 0xc7, 0x1d, 0x40, 0xa3, 0x5c, 0xc3, 0x3b, 0x55, 0xb2, 0x87, 0x53, 0x60, 0xbb, 0x1f, 0x57, 0x3c, 0xe0, 0x6e, 0x99, 0x82, 0xab, 0x89, 0x64, 0x47, 0x26, 0x91, 0x9c, 0x52, 0xd5, 0xaf, 0xe0, 0x2e, 0x92, 0x2a, 0xc1, 0x53, 0x28, 0x84, 0x2b, 0x27, 0x4a, 0xb8, 0xcf, 0xef, 0xc6, 0x66, 0x68, 0xeb, 0x9f, 0xce, 0x59, 0x3c, 0xdf, 0x4b, 0xa9, 0x16, 0x3a, 0xbf, 0xf0, 0x33, 0xec, 0x9d, 0xe8, 0x35, 0xd1, 0x0a, 0xc3, 0x55, 0x0e, 0x78, 0x6e, 0x4d, 0xf0, 0x1a, 0xb0, 0xc4, 0x45, 0x8c, 0x9b, 0xa8, 0xd3, 0x66, 0x5f, 0x88, 0x54, 0xab, 0x9b, 0x6d, 0x32, 0x29, 0x3c, 0x2b, 0x8f, 0xe1, 0xb7, 0x35, 0xde, 0xe4, 0x25, 0xfa, 0x30, 0x88, 0xdf, 0x75, 0x88, 0x47, 0xdd, 0x41, 0x1a, 0xa7, 0x7c, 0x43, 0x68, 0x21, 0x4d, 0x45, 0xfc, 0x2c, 0xa9, 0xdf, 0x75, 0x75, 0x3d, 0xad, 0x84, 0x17, 0x70, 0x55, 0xb3, 0x4c, 0x5f, 0x27, 0x3c, 0x8e, 0xcf, 0x0a, 0xfe, 0x2e, 0xd0, 0x56, 0xc0, 0xfc, 0xf4, 0x0a, 0xd0, 0xee, 0x7d, 0x1d, 0x5c, 0x3f, 0x18, 0x0a, 0x23, 0xef, 0xc6, 0xa7, 0x91, 0xcf, 0xbc, 0x72, 0x6d, 0x8e, 0xc8, 0x3b, 0x6c, 0x74, 0x38, 0x10, 0xf1, 0x9b, 0xa3, 0xef, 0xee, 0x8c, 0x76, 0x04, 0x95, 0x08, 0xe9, 0xc6, 0xe3, 0x98, 0xdb, 0x68, 0x5d, 0xd8, 0xcd, 0xeb, 0xd7, 0x22, 0xf6, 0xa2, 0x8c, 0xf4, 0xc7, 0x96, 0x27, 0x2d, 0x4b, 0xee, 0x1c, 0x5e, 0x31, 0xb0, 0x5c, 0xae, 0x57, 0x8c, 0x4b, 0xef, 0x1c, 0x5e, 0x49, 0xab, 0x41, 0xe0, 0xdc, 0xee, 0xdc, 0xcd, 0xcb, 0xdb, 0xca, 0x23, 0xcf, 0x7a, 0x42, 0x4a, 0xe9, 0xc8, 0xda, 0x81, 0xe5, 0x8a, 0x71, 0x64, 0xf9, 0xc0, 0x5a, 0x5f, 0x94, 0x6c, 0x03, 0x50, 0x8e, 0x0a, 0x9a, 0x9d, 0xf7, 0x02, 0x55, 0xe5, 0x86, 0xe8, 0xde, 0xa1, 0xaa, 0xa4, 0xe9, 0x83, 0xb5, 0x9b, 0x57, 0x2a, 0xc6, 0x0f, 0x56, 0x6e, 0x5e, 0x1b, 0x08, 0x29, 0xd2, 0x32, 0xb8, 0x69, 0xdc, 0xc8, 0xbe, 0x2e, 0xc9, 0x3a, 0x11, 0x65, 0x30, 0x81, 0xe4, 0x21, 0xea, 0x77, 0x5d, 0xd9, 0xce, 0xe7, 0xfd, 0x63, 0x42, 0xef, 0x99, 0x64, 0xa6, 0x96, 0x48, 0x3b, 0x7a, 0xe3, 0xb1, 0xa5, 0x86, 0x9d, 0x62, 0x9f, 0xd0, 0x7c, 0x06, 0x78, 0x47, 0x96, 0x89, 0xd9, 0x94, 0xc3, 0x2c, 0x5b, 0x8a, 0xe5, 0x09, 0x8f, 0x6f, 0xec, 0x1f, 0xa0, 0xd9, 0x34, 0x13, 0x6e, 0xcf, 0x30, 0x8c, 0x66, 0x13, 0xa1, 0xd8, 0x95, 0xf2, 0xf4, 0x2c, 0x0a, 0xa9, 0x9e, 0x04, 0xd9, 0x1b, 0x29, 0x8f, 0xc3, 0x27, 0xc7, 0x5d, 0xf9, 0xbc, 0x07, 0x93, 0x71, 0x59, 0xc6, 0x75, 0x9d, 0xb0, 0x6a, 0xd0, 0x7c, 0xd7, 0x6f, 0x0f, 0x22, 0x4c, 0xb9, 0x43, 0xb3, 0x81, 0xb8, 0x83, 0xa5, 0xbb, 0x22, 0x42, 0x8a, 0xe5, 0x93, 0x25, 0x4e, 0x1c, 0x7d, 0x96, 0x5a, 0x32, 0x8b, 0xbb, 0x52, 0x45, 0x93, 0xb5, 0xd4, 0x5a, 0xfd, 0x4c, 0x8d, 0x41, 0xd8, 0xb0, 0x31, 0xb8, 0x18, 0x52, 0x80, 0x41, 0x16, 0x30, 0xc2, 0x40, 0xfe, 0xf0, 0x6c, 0x3f, 0x9b, 0x87, 0xab, 0x3f, 0xef, 0x3f, 0x74, 0x1a, 0x0d, 0xa4, 0x79, 0xf2, 0x53, 0xd2, 0x68, 0xa0, 0x11, 0xd2, 0xf4, 0xd0, 0x7f, 0x2b, 0xce, 0x15, 0xe6, 0xa5, 0xd5, 0x5e, 0xfb, 0xad, 0x2b, 0xad, 0x9b, 0x20, 0x70, 0x07, 0xaa, 0xe7, 0x5b, 0x5c, 0xcf, 0xb7, 0x75, 0x5a, 0x14, 0x54, 0xcf, 0x0b, 0x58, 0x8f, 0x4b, 0x68, 0x18, 0x3b, 0xe6, 0x5e, 0xbb, 0xd2, 0x80, 0x3b, 0x75, 0x33, 0x9e, 0x1c, 0x49, 0x30, 0xe3, 0xe9, 0x61, 0x7b, 0x38, 0x08, 0x66, 0x3e, 0x3d, 0x92, 0x60, 0xc1, 0x33, 0x23, 0xef, 0xe1, 0x10, 0x58, 0x7c, 0xf3, 0x46, 0xce, 0x81, 0x75, 0xe4, 0x2c, 0xa6, 0x46, 0x71, 0x4d, 0x60, 0x7d, 0x18, 0xce, 0xc5, 0x70, 0x1e, 0x86, 0x73, 0xbd, 0x77, 0xf8, 0x42, 0x5e, 0xb3, 0x3f, 0x88, 0xab, 0x93, 0xe4, 0xcd, 0xb2, 0xab, 0x73, 0xa3, 0x8f, 0xbc, 0x90, 0xcd, 0x1b, 0xd0, 0x6a, 0xc5, 0x90, 0x65, 0x00, 0xcb, 0x0e, 0x50, 0xad, 0x41, 0xac, 0x15, 0x47, 0x33, 0x93, 0x6a, 0xc5, 0x50, 0xae, 0x2e, 0x35, 0xd7, 0xd5, 0xa4, 0x93, 0x0a, 0x5a, 0x90, 0xb1, 0x9c, 0xe0, 0xe0, 0x1b, 0x58, 0x7f, 0xfa, 0xf4, 0x45, 0x78, 0xee, 0xd8, 0xb1, 0x0d, 0x96, 0xc5, 0xf3, 0x99, 0x13, 0xb4, 0x8c, 0x39, 0x16, 0xbf, 0x16, 0x52, 0x2d, 0xa4, 0xa7, 0xf2, 0xc2, 0x8f, 0x98, 0x4e, 0x68, 0x74, 0x80, 0x5c, 0x85, 0xab, 0x7d, 0x99, 0xc6, 0xf9, 0xd8, 0x92, 0xc6, 0xbb, 0x04, 0x6f, 0xf1, 0x72, 0x3e, 0x7b, 0xfc, 0xb2, 0x26, 0x02, 0x9a, 0x7c, 0xb0, 0x85, 0xe6, 0xf7, 0x6a, 0x97, 0x0b, 0x38, 0x5f, 0x4e, 0xfd, 0xae, 0xdf, 0xec, 0x64, 0x99, 0xce, 0xec, 0xfd, 0x39, 0x59, 0xe1, 0x34, 0xb3, 0x05, 0xc8, 0xb6, 0xe9, 0x11, 0x1e, 0xcb, 0x20, 0xd2, 0xe1, 0x16, 0x3c, 0xd7, 0xc2, 0xe2, 0x8d, 0xd4, 0x62, 0x92, 0xf1, 0xc9, 0x9e, 0xe9, 0x78, 0x66, 0x95, 0xd3, 0x6a, 0x66, 0x3a, 0xd7, 0x93, 0x79, 0xff, 0x6a, 0xac, 0x7d, 0x83, 0x33, 0xc8, 0x31, 0xa0, 0x71, 0xa7, 0x29, 0x8e, 0xf8, 0x9d, 0x05, 0x74, 0xd7, 0x49, 0x72, 0x34, 0xc9, 0x85, 0x24, 0x27, 0xdb, 0xde, 0x4d, 0x9c, 0xe1, 0x64, 0x3f, 0xf9, 0x67, 0x46, 0xd8, 0xe3, 0x71, 0xe3, 0x2c, 0xe2, 0x9e, 0x2e, 0x94, 0x93, 0xe3, 0xf1, 0x1b, 0xc6, 0x04, 0xda, 0x75, 0x98, 0x40, 0x3b, 0x58, 0x08, 0x0b, 0xc0, 0x79, 0xfc, 0x18, 0xb1, 0x80, 0x28, 0xe4, 0x23, 0x75, 0x2c, 0x61, 0x8e, 0x5c, 0xcc, 0xc1, 0x58, 0x40, 0x8c, 0x4e, 0x86, 0x2a, 0x79, 0xad, 0x62, 0x9c, 0x5e, 0x0f, 0x66, 0xb1, 0x4a, 0x63, 0x7d, 0xf1, 0x65, 0xfe, 0x0e, 0xdc, 0xb9, 0x25, 0x74, 0x3a, 0x44, 0x86, 0xe3, 0xf5, 0xcc, 0xbd, 0xd4, 0xf6, 0xa7, 0xaf, 0x04, 0xa6, 0x44, 0x87, 0x1b, 0x7b, 0x07, 0xbe, 0x81, 0xfb, 0xaa, 0x04, 0xf2, 0xf9, 0x79, 0x39, 0xcb, 0x2c, 0x19, 0xd8, 0x8f, 0x68, 0x90, 0x76, 0xed, 0xfa, 0xb3, 0x04, 0x39, 0xe5, 0xd0, 0x00, 0xb5, 0xd8, 0x8c, 0xbd, 0x95, 0x35, 0x5b, 0x64, 0x1e, 0x45, 0xf1, 0x12, 0x6d, 0x62, 0x88, 0x76, 0xb0, 0x77, 0x7b, 0x6d, 0xcd, 0x68, 0x12, 0xb6, 0x85, 0x4a, 0x58, 0x27, 0x0d, 0x59, 0x26, 0xb0, 0x04, 0x39, 0x92, 0xd9, 0xc7, 0x1d, 0xbc, 0x8f, 0xcf, 0xf3, 0x3e, 0xee, 0xd0, 0xf6, 0xf1, 0x79, 0x7a, 0x03, 0x49, 0x0a, 0xa5, 0xb1, 0x11, 0xf7, 0x17, 0x9d, 0xb9, 0xbb, 0x84, 0xe4, 0xc4, 0x09, 0xec, 0xcb, 0x14, 0x79, 0x0e, 0x59, 0xe7, 0xd0, 0xf8, 0xa9, 0x87, 0xc8, 0xff, 0xad, 0x02, 0x63, 0xef, 0x08, 0x7e, 0x74, 0xfd, 0xae, 0x5f, 0x1f, 0x49, 0xdb, 0xe7, 0xd0, 0x7b, 0x79, 0x21, 0xfe, 0x0b, 0xce, 0x9b, 0x8b, 0x2d, 0xb7, 0x80, 0xa1, 0x52, 0xbb, 0xa5, 0xb4, 0x69, 0xdc, 0x58, 0xba, 0x4f, 0xdc, 0xf5, 0xeb, 0xef, 0x29, 0xb9, 0x3c, 0x32, 0x24, 0x11, 0x49, 0xb6, 0x22, 0x96, 0x68, 0x98, 0xcc, 0x9b, 0xe0, 0x88, 0x37, 0x08, 0x1b, 0x36, 0xc4, 0x4f, 0x78, 0x91, 0xf9, 0xb5, 0xcf, 0x93, 0x9d, 0x3c, 0x0a, 0x69, 0xfc, 0x5a, 0x0c, 0x93, 0xd5, 0x1c, 0xb2, 0x79, 0xa3, 0x71, 0x7a, 0x29, 0xf5, 0xdf, 0x33, 0xbc, 0x5d, 0x0e, 0xe9, 0x79, 0xbb, 0xe9, 0x37, 0x2f, 0x9b, 0x73, 0xed, 0xd7, 0xa5, 0xf5, 0x2f, 0x32, 0xbe, 0xf2, 0x1a, 0xac, 0x4d, 0xd4, 0xfd, 0xe1, 0x77, 0x64, 0xca, 0xad, 0xad, 0x7f, 0xf1, 0x0f, 0xbf, 0x81, 0x6a, 0x24, 0xda, 0x67, 0xee, 0xb5, 0x4b, 0xa5, 0x4a, 0xc4, 0x97, 0x47, 0x2b, 0x69, 0x66, 0x90, 0x7d, 0x3f, 0xf2, 0x4a, 0x9a, 0x89, 0x10, 0xa1, 0x34, 0xef, 0xdf, 0xdb, 0xc1, 0x8a, 0x58, 0x2f, 0x59, 0xfe, 0xc9, 0xf5, 0x5a, 0x09, 0x02, 0xf8, 0x82, 0x64, 0x21, 0x01, 0x77, 0xc5, 0x64, 0xe2, 0xcc, 0xe0, 0x07, 0x21, 0x80, 0xfb, 0x8b, 0x34, 0x9b, 0x3c, 0x0b, 0x3b, 0xd2, 0x56, 0xcf, 0x2b, 0x2b, 0xd2, 0x74, 0x21, 0xed, 0x08, 0xc4, 0xa7, 0xfc, 0x88, 0x57, 0x95, 0x39, 0xdc, 0xf0, 0x4c, 0xdc, 0xcc, 0x90, 0x17, 0x0c, 0x3e, 0xc4, 0xff, 0x8d, 0x38, 0xce, 0x79, 0x72, 0x2c, 0x05, 0xcc, 0x83, 0x7e, 0x9d, 0xd2, 0x7b, 0x88, 0x72, 0xa9, 0xc1, 0x7d, 0xd6, 0x40, 0xbe, 0x28, 0x13, 0x11, 0x81, 0x7d, 0x2d, 0x33, 0xed, 0x11, 0xf8, 0xea, 0xf2, 0xb8, 0x83, 0x38, 0xd9, 0x62, 0x97, 0x92, 0x3e, 0x3a, 0x6b, 0x77, 0xbb, 0x21, 0xc8, 0xb7, 0xf0, 0xbb, 0x7e, 0x3b, 0xcc, 0x72, 0x2e, 0xd8, 0x5a, 0x11, 0xbe, 0x5c, 0xa1, 0x49, 0xb9, 0x60, 0xdf, 0xa6, 0xcf, 0xa1, 0xb7, 0x93, 0x87, 0x42, 0x84, 0x86, 0xaf, 0xb2, 0xb6, 0x5c, 0x50, 0xe8, 0x96, 0xe1, 0x99, 0x95, 0xf7, 0x7f, 0xeb, 0x20, 0xb1, 0x16, 0x36, 0xe9, 0xef, 0x31, 0x2e, 0x1c, 0x76, 0x8b, 0xdb, 0x30, 0x10, 0xfb, 0xf9, 0xc2, 0x16, 0x92, 0xe2, 0x61, 0x38, 0x42, 0xf6, 0x36, 0xdc, 0xa4, 0x77, 0xa6, 0x79, 0xbb, 0x73, 0x52, 0xcc, 0x85, 0xb6, 0xb4, 0xf6, 0xd2, 0xb8, 0x76, 0x8a, 0xb6, 0x52, 0x4b, 0xa7, 0x08, 0x1d, 0x38, 0x7a, 0xd7, 0xdf, 0xe9, 0xa0, 0xb7, 0x16, 0x36, 0xb1, 0xff, 0xd0, 0x9a, 0x04, 0x62, 0xd1, 0x3c, 0x36, 0x43, 0x24, 0x9b, 0x32, 0xbf, 0x47, 0xe8, 0xa9, 0x3b, 0x34, 0xaf, 0x78, 0x4e, 0xa2, 0xf9, 0x27, 0x6b, 0xd0, 0x8a, 0x6e, 0xa8, 0xfb, 0x1d, 0xc4, 0x07, 0x28, 0xcf, 0x42, 0xc1, 0x4f, 0x76, 0x8f, 0x87, 0x82, 0x17, 0x72, 0xdd, 0xac, 0x7b, 0x9e, 0x88, 0xea, 0xa1, 0xe0, 0x6f, 0x92, 0x1a, 0x14, 0xc4, 0x76, 0x9f, 0x1f, 0x62, 0x6d, 0xca, 0x95, 0x09, 0xec, 0x79, 0xc6, 0x4a, 0x3b, 0xd9, 0xc3, 0xcb, 0xd1, 0x43, 0xc4, 0xcb, 0xcd, 0x1a, 0x44, 0x74, 0xe0, 0x4c, 0xe5, 0x63, 0xff, 0x26, 0x63, 0xef, 0xcc, 0x82, 0x92, 0x63, 0x3c, 0x24, 0x9f, 0x61, 0x63, 0xe0, 0x0f, 0x4a, 0x36, 0x9c, 0xfd, 0x83, 0xba, 0x69, 0xdb, 0xd3, 0x56, 0x48, 0x4a, 0x8a, 0xa1, 0xc0, 0x53, 0x8c, 0x67, 0x41, 0x3b, 0x78, 0xe4, 0xb9, 0xf7, 0x16, 0x83, 0x6b, 0x19, 0x42, 0xcc, 0x6f, 0x1f, 0x5c, 0x0a, 0x64, 0xd1, 0x5d, 0xdd, 0x4d, 0x92, 0x07, 0xf8, 0xd9, 0x89, 0x9f, 0xfd, 0xf8, 0x19, 0x76, 0x44, 0x69, 0x7e, 0xed, 0x36, 0xeb, 0x72, 0x92, 0xdc, 0x4c, 0x34, 0x2e, 0x70, 0xd3, 0x13, 0xdc, 0x47, 0x52, 0x06, 0x0b, 0xac, 0xfc, 0x6c, 0x47, 0x8c, 0x7d, 0xa5, 0x92, 0xe4, 0x67, 0x47, 0xa2, 0x86, 0x7f, 0xef, 0x8f, 0xa7, 0x94, 0x28, 0x97, 0x99, 0x90, 0x70, 0x2e, 0xb0, 0xf0, 0x93, 0x31, 0x3e, 0x5f, 0x69, 0xe2, 0xa7, 0x7f, 0x4f, 0x38, 0xf9, 0xf7, 0x48, 0x3c, 0xa6, 0xd8, 0x58, 0x67, 0x67, 0xbf, 0x12, 0xe4, 0xdf, 0x61, 0xa5, 0xdc, 0x49, 0xd4, 0x89, 0xdf, 0x45, 0x37, 0xc4, 0x1e, 0x82, 0xfc, 0x8a, 0x33, 0xb6, 0x15, 0x8c, 0x69, 0x39, 0x19, 0x6a, 0xa3, 0x92, 0xef, 0xa6, 0xf8, 0x5c, 0x4d, 0xdb, 0xc7, 0xc4, 0xbf, 0x07, 0x99, 0xe7, 0x4d, 0xf7, 0xef, 0x23, 0x32, 0xe9, 0x67, 0x82, 0x5a, 0x67, 0x2e, 0x06, 0x09, 0x5b, 0x6a, 0x8e, 0x61, 0x3f, 0x12, 0x60, 0x3c, 0x1c, 0x5b, 0x41, 0x2d, 0x95, 0xc3, 0xf4, 0x86, 0xf8, 0xb2, 0xd8, 0x1b, 0xd8, 0xda, 0xee, 0x8c, 0x05, 0xb9, 0xd3, 0x69, 0x3b, 0xf7, 0xd4, 0x7a, 0xf5, 0x34, 0x8f, 0xc6, 0x19, 0xb2, 0xd9, 0xd2, 0x05, 0x1a, 0xb7, 0x3f, 0xe8, 0x08, 0x72, 0xd8, 0x9c, 0x0e, 0xb3, 0xde, 0xc9, 0x69, 0xbe, 0x7b, 0x6e, 0x53, 0xd5, 0x79, 0xbd, 0x1a, 0x8f, 0x85, 0x6c, 0xbc, 0x91, 0x74, 0x02, 0xdd, 0x05, 0x97, 0xc6, 0xc8, 0x9f, 0x7b, 0x18, 0x29, 0x6b, 0xa2, 0xb8, 0x1a, 0xed, 0x61, 0xe7, 0xfd, 0x60, 0x64, 0xa9, 0xe2, 0x5c, 0x3c, 0x33, 0x3c, 0x50, 0x38, 0x88, 0xad, 0xe8, 0x00, 0x63, 0x39, 0xae, 0x11, 0x9b, 0x23, 0xc2, 0xe7, 0x08, 0xc7, 0xb5, 0x83, 0xd1, 0xe1, 0x58, 0x2c, 0xee, 0xa1, 0xc6, 0x48, 0xb2, 0x63, 0x3b, 0x49, 0x76, 0x18, 0x6d, 0x69, 0xff, 0xe1, 0x81, 0xd9, 0xbe, 0x62, 0xa4, 0x29, 0x86, 0x67, 0xd6, 0xab, 0x67, 0xfc, 0x26, 0x5f, 0x3b, 0x4c, 0x59, 0x1f, 0x9d, 0x19, 0x52, 0xcf, 0xca, 0xed, 0xea, 0xf6, 0xaa, 0x8f, 0xd5, 0xd3, 0x9e, 0x58, 0xc6, 0x1e, 0xd9, 0x59, 0xaf, 0x45, 0xe9, 0x2e, 0xaa, 0x56, 0x0f, 0xe3, 0x87, 0x7c, 0xb3, 0x5f, 0x26, 0xdf, 0xec, 0xd5, 0x98, 0xa7, 0x28, 0xa6, 0x9e, 0x08, 0xb4, 0x43, 0x1e, 0xd6, 0x71, 0x99, 0x7c, 0xd9, 0xb1, 0x7d, 0x91, 0xd9, 0xea, 0xd5, 0x99, 0x35, 0xea, 0xb5, 0xf4, 0x7b, 0xd2, 0xf2, 0x19, 0xa4, 0x5d, 0xf5, 0xe2, 0x01, 0x2c, 0x3d, 0x92, 0x96, 0x41, 0x8e, 0xf5, 0x26, 0x8c, 0xee, 0x62, 0xf5, 0x70, 0xec, 0xd9, 0x84, 0x43, 0xae, 0xb6, 0xe3, 0x7b, 0xd3, 0x9a, 0x21, 0x74, 0x87, 0xc5, 0x3b, 0xa0, 0x58, 0xdd, 0x4e, 0x56, 0x6f, 0x1b, 0xd6, 0x21, 0x35, 0xf5, 0x28, 0x9e, 0x98, 0x53, 0xe5, 0x2a, 0x7f, 0x2b, 0xd8, 0xe4, 0x49, 0x3f, 0x79, 0x03, 0xf1, 0xe7, 0x56, 0xc8, 0xb3, 0x9b, 0x7f, 0xfa, 0x06, 0xe4, 0x1f, 0xff, 0xc6, 0xb1, 0x7e, 0xea, 0x0d, 0xbe, 0x7f, 0x2f, 0xb5, 0xff, 0x27, 0x0d, 0x5a, 0x6b, 0xf6, 0xb1, 0xac, 0x4a, 0xb1, 0xba, 0x97, 0x64, 0x55, 0x48, 0x4e, 0x45, 0x70, 0x77, 0x6e, 0xe4, 0xd9, 0xf0, 0x6d, 0x1a, 0x48, 0x57, 0xa6, 0x63, 0x1b, 0xe1, 0x65, 0xfc, 0x3e, 0x08, 0xae, 0xe9, 0xd5, 0xb0, 0xb6, 0xea, 0x2c, 0xbc, 0x3e, 0xbd, 0x36, 0x7d, 0x5b, 0xa3, 0x56, 0x10, 0x2e, 0x21, 0xaf, 0xa6, 0xef, 0x7b, 0xdb, 0x49, 0xd6, 0x10, 0x47, 0xcd, 0xfe, 0x60, 0x14, 0xa6, 0x4d, 0x0f, 0x43, 0x64, 0x3a, 0xe9, 0x32, 0xca, 0xf8, 0xbd, 0x1f, 0x96, 0xf8, 0x91, 0x02, 0x78, 0xb0, 0x16, 0xc8, 0x22, 0xa4, 0xce, 0x22, 0xfa, 0x74, 0x92, 0xe8, 0x58, 0x4d, 0xe3, 0xf5, 0x60, 0x3d, 0xd8, 0x1e, 0x9c, 0x8d, 0x38, 0x01, 0xb6, 0xf2, 0xc1, 0x20, 0x86, 0x6b, 0xf0, 0x74, 0x9d, 0xfd, 0x52, 0xbb, 0xba, 0x17, 0x63, 0x57, 0x35, 0xd6, 0x6c, 0x69, 0x57, 0xf7, 0x61, 0x5c, 0x7f, 0xf6, 0xa6, 0x86, 0x75, 0x99, 0xae, 0x8d, 0x86, 0xeb, 0x37, 0x22, 0x64, 0xdb, 0x42, 0x33, 0x29, 0x29, 0x14, 0xc7, 0xe1, 0x65, 0x1c, 0x6e, 0xc8, 0x84, 0x59, 0x86, 0x47, 0x0a, 0xe6, 0x15, 0xab, 0xff, 0x72, 0x77, 0x08, 0xbe, 0x2d, 0x87, 0x69, 0xfd, 0xc7, 0x8d, 0xf7, 0xc6, 0xc0, 0x38, 0xbd, 0x0a, 0x0a, 0x12, 0xb9, 0xf6, 0xaa, 0xc0, 0x22, 0xd8, 0xd8, 0x58, 0x8f, 0xed, 0xd8, 0x88, 0x34, 0x5a, 0x1b, 0x6c, 0x94, 0x05, 0x0e, 0xb5, 0xc1, 0x1e, 0x96, 0x85, 0x1d, 0xa1, 0x20, 0xe3, 0x81, 0x15, 0xb1, 0x95, 0xf1, 0x80, 0xab, 0xca, 0xde, 0xc4, 0x94, 0x9b, 0xc7, 0xb3, 0x08, 0x0a, 0xfe, 0xf9, 0x2c, 0x14, 0xc4, 0xed, 0x24, 0x11, 0xa7, 0xe4, 0x69, 0xf1, 0xf9, 0x78, 0x26, 0x14, 0x12, 0x87, 0xba, 0xc5, 0xe2, 0xaa, 0x1d, 0xc4, 0x9a, 0x9f, 0xfc, 0x50, 0x39, 0xc8, 0xe5, 0x4d, 0x58, 0xde, 0xa9, 0x18, 0xff, 0x69, 0x7f, 0xdc, 0x66, 0x0f, 0xdb, 0x57, 0x87, 0xd7, 0x4f, 0x8f, 0x82, 0x31, 0xe1, 0x96, 0x57, 0x2b, 0x4e, 0xc7, 0x86, 0xe9, 0x75, 0x60, 0x94, 0x9b, 0xa8, 0x55, 0xae, 0xd5, 0xca, 0x14, 0xc7, 0x4a, 0x4f, 0x44, 0xc6, 0x85, 0xcc, 0x39, 0x24, 0x1c, 0xe5, 0x08, 0xa5, 0xa4, 0x39, 0x73, 0x02, 0xca, 0x7f, 0x42, 0x34, 0x56, 0x01, 0x7b, 0x15, 0x65, 0xae, 0x98, 0xdc, 0x0a, 0xab, 0x49, 0xfe, 0x2e, 0xbd, 0x6e, 0xd2, 0x12, 0xd4, 0xb0, 0x9f, 0x34, 0x9e, 0xe8, 0x66, 0xdb, 0xde, 0x18, 0xba, 0xf6, 0x89, 0x87, 0x5b, 0x69, 0xcf, 0xc0, 0xde, 0xfb, 0xf1, 0x04, 0x19, 0x90, 0x1b, 0x49, 0x37, 0x52, 0x0f, 0x9b, 0x95, 0xfc, 0x74, 0x0e, 0x4f, 0xd8, 0xde, 0xc1, 0x37, 0x22, 0xab, 0x35, 0x1d, 0x12, 0xbd, 0xf6, 0x5b, 0x98, 0xa4, 0x9d, 0xe5, 0x64, 0xe6, 0x66, 0xdf, 0x9f, 0xb9, 0xd9, 0x77, 0x69, 0x1a, 0x53, 0x72, 0xfa, 0x66, 0xbf, 0x63, 0x8a, 0x06, 0xd7, 0xa9, 0x07, 0x56, 0x4d, 0x23, 0x25, 0x5f, 0xb1, 0x69, 0xfa, 0x73, 0x99, 0x37, 0xeb, 0x34, 0xa1, 0xac, 0x4e, 0x9d, 0xf6, 0x5b, 0xfa, 0x3e, 0x3d, 0xc1, 0xf6, 0x4a, 0x88, 0xc7, 0xbf, 0x94, 0x3c, 0xaf, 0x88, 0xb9, 0x5a, 0xab, 0x44, 0x34, 0xfe, 0xe8, 0xae, 0x6b, 0xe5, 0xec, 0x49, 0x7e, 0x4b, 0xc2, 0x9a, 0x89, 0x71, 0x72, 0xcc, 0x7a, 0x5d, 0x4c, 0x7e, 0xc3, 0xba, 0x9b, 0xb9, 0x9b, 0xac, 0x41, 0x4f, 0x37, 0xcd, 0xec, 0x11, 0x21, 0x46, 0x1a, 0x97, 0x30, 0x3a, 0x45, 0x81, 0xd1, 0x24, 0x96, 0x5e, 0x16, 0x7f, 0x49, 0xd9, 0x3a, 0x5e, 0x27, 0xea, 0xd3, 0xca, 0xbf, 0xfd, 0x11, 0x49, 0xb7, 0xcb, 0x2c, 0xe9, 0x26, 0xec, 0x8d, 0xb3, 0x4d, 0x2b, 0x4d, 0x5b, 0x63, 0xd4, 0x15, 0xbc, 0x95, 0xec, 0x7b, 0x5a, 0x52, 0xc8, 0x01, 0xae, 0x22, 0x30, 0xea, 0xee, 0x4e, 0x4c, 0xf7, 0x46, 0x70, 0x9c, 0x4c, 0x74, 0x6f, 0x2e, 0xaf, 0x94, 0x23, 0xb8, 0x7a, 0x9f, 0x77, 0x1b, 0x7f, 0xf0, 0x5e, 0xc2, 0xc7, 0xda, 0x54, 0xd5, 0xdf, 0x3f, 0x83, 0x6b, 0xb5, 0x40, 0x93, 0x28, 0xb2, 0xd9, 0xab, 0x59, 0xdf, 0xb3, 0x4e, 0x7b, 0xd7, 0x96, 0x1d, 0xcf, 0xe2, 0x79, 0x5e, 0xcd, 0x27, 0xc1, 0x41, 0xe6, 0xc3, 0x93, 0x16, 0x74, 0x98, 0x57, 0xc7, 0x2e, 0xd5, 0x47, 0xf3, 0xee, 0x91, 0x88, 0x12, 0x58, 0x99, 0x2b, 0x34, 0x7b, 0xe5, 0x1a, 0xad, 0xa6, 0x80, 0xbd, 0x86, 0x6a, 0x42, 0xe8, 0x4b, 0x12, 0x9e, 0x25, 0xf8, 0x2b, 0xa4, 0x3f, 0x1d, 0xbe, 0x7c, 0x96, 0xf5, 0x2c, 0xc4, 0x18, 0x21, 0x05, 0x9a, 0x47, 0x37, 0x03, 0x6c, 0x99, 0xd3, 0xa4, 0x49, 0x6c, 0x30, 0xc7, 0x5f, 0xae, 0x61, 0xfd, 0x58, 0x6b, 0x5a, 0xd3, 0xf5, 0x07, 0xfb, 0xb0, 0x25, 0x35, 0x1e, 0x6a, 0xc9, 0x66, 0x4a, 0x27, 0xfa, 0x76, 0x6c, 0x4b, 0xc3, 0x3a, 0x57, 0xe4, 0x99, 0xcb, 0xc7, 0xbf, 0x49, 0x74, 0xc8, 0x8a, 0xab, 0xd4, 0x92, 0x15, 0x87, 0x5d, 0x2c, 0x0b, 0x33, 0xf7, 0xda, 0xd8, 0xab, 0xda, 0x6a, 0xac, 0x61, 0xdd, 0xbd, 0x62, 0xf5, 0x2a, 0xb6, 0xa4, 0x02, 0x7f, 0xaf, 0x71, 0x4b, 0x7c, 0xf8, 0x74, 0x99, 0xdb, 0xe2, 0xc4, 0xa7, 0x2b, 0xdc, 0x96, 0x42, 0xae, 0x99, 0xb4, 0xf7, 0x10, 0x63, 0x67, 0xfd, 0x12, 0x6b, 0x5a, 0x3f, 0x48, 0xc9, 0x4b, 0xa7, 0x79, 0x27, 0xa6, 0x35, 0xee, 0x76, 0xac, 0x49, 0xc8, 0xda, 0x3b, 0x6c, 0x9c, 0x3a, 0x91, 0xf5, 0x26, 0x37, 0xea, 0xb4, 0xf1, 0x9e, 0x49, 0x8f, 0x1a, 0xc2, 0xe8, 0x63, 0xec, 0xf5, 0xd7, 0xd8, 0xb0, 0x4e, 0x93, 0xbf, 0x7f, 0x4e, 0xae, 0x9a, 0x41, 0x9a, 0x41, 0x46, 0xdc, 0xf7, 0xec, 0x1b, 0x40, 0x93, 0x68, 0x38, 0x98, 0xb5, 0x68, 0x2d, 0x56, 0x80, 0x0b, 0x57, 0x00, 0xfb, 0xf0, 0xfe, 0x03, 0xf3, 0x4e, 0xf6, 0xca, 0xe4, 0x88, 0xdb, 0x46, 0x33, 0x7f, 0x2f, 0x49, 0x92, 0x93, 0xbe, 0xb6, 0x51, 0x7e, 0x3e, 0xad, 0x3b, 0x20, 0x47, 0x84, 0x84, 0xd8, 0xf5, 0x65, 0x24, 0xf1, 0xa1, 0x69, 0x1f, 0x98, 0x1d, 0x93, 0x97, 0xc0, 0x8b, 0x07, 0x14, 0x33, 0x9e, 0x82, 0xeb, 0x97, 0x80, 0x12, 0xb4, 0x87, 0x35, 0xbd, 0x5f, 0x37, 0x73, 0x4c, 0x6d, 0x69, 0x2d, 0x73, 0x86, 0xfe, 0xf9, 0x4b, 0x0c, 0xb8, 0x7a, 0x74, 0xfa, 0xc0, 0xd7, 0xb7, 0x28, 0xd2, 0x12, 0xc3, 0x76, 0xd2, 0x37, 0x34, 0xd1, 0xbd, 0xaf, 0x32, 0x2c, 0xfc, 0x32, 0x1b, 0x5c, 0x9e, 0x88, 0x87, 0x57, 0x85, 0x43, 0x40, 0x85, 0x12, 0x4d, 0xd7, 0xbb, 0x43, 0xd3, 0xa1, 0x6c, 0xc4, 0xd1, 0x27, 0x59, 0x9e, 0x36, 0xd6, 0x87, 0xb5, 0xe1, 0x2f, 0xe9, 0xc3, 0x92, 0x2c, 0x4f, 0x1b, 0xeb, 0xc3, 0x5a, 0x35, 0x4c, 0x2f, 0x97, 0x64, 0xa4, 0x74, 0x52, 0x3c, 0x25, 0xac, 0x31, 0x5d, 0x23, 0x56, 0x84, 0x07, 0xe1, 0xcf, 0x3f, 0x7f, 0x84, 0x50, 0xfb, 0x65, 0xa4, 0x6a, 0x56, 0xc4, 0xad, 0x69, 0x89, 0x92, 0xd1, 0x55, 0x0d, 0xeb, 0xc8, 0xe2, 0x33, 0xe9, 0xb5, 0x96, 0xf0, 0xba, 0xe0, 0xd5, 0x71, 0x38, 0x2b, 0x23, 0xb5, 0x52, 0x93, 0xec, 0x89, 0x13, 0x47, 0xf2, 0xd3, 0xae, 0x8c, 0xb4, 0x7c, 0x51, 0x0d, 0xcb, 0x17, 0xe5, 0x62, 0x3b, 0xaa, 0x32, 0x2b, 0x23, 0x4d, 0x37, 0xe7, 0x6a, 0x74, 0xa4, 0xf5, 0x07, 0x07, 0x6e, 0x90, 0x17, 0x1a, 0x27, 0x67, 0xa5, 0xc9, 0x0b, 0xf5, 0x64, 0xf5, 0x3a, 0x3e, 0x19, 0x6e, 0x58, 0x87, 0x67, 0xbc, 0x45, 0xae, 0xbe, 0x17, 0x5b, 0xce, 0xfa, 0x1a, 0xb4, 0x5f, 0x71, 0x64, 0xf1, 0xcc, 0xbf, 0x68, 0x7f, 0x76, 0x06, 0xee, 0x61, 0x39, 0x22, 0x3f, 0xa7, 0xad, 0x90, 0xfd, 0xb4, 0x42, 0xd2, 0x36, 0x96, 0xfa, 0xeb, 0xe0, 0x17, 0x87, 0xfa, 0x97, 0xfb, 0x27, 0xdd, 0x89, 0xcf, 0x49, 0xfc, 0xac, 0x84, 0x93, 0xcf, 0xf5, 0x0b, 0xa3, 0x29, 0x8b, 0x3a, 0xba, 0x9f, 0x5e, 0xd4, 0xbd, 0xa8, 0xb3, 0xe3, 0x06, 0x33, 0x4b, 0x37, 0xc5, 0x93, 0xa5, 0x25, 0xff, 0xff, 0x07, 0x96, 0x96, 0x6e, 0xb2, 0xbc, 0xf4, 0xe6, 0x11, 0xfc, 0x0c, 0xc1, 0xc9, 0xcd, 0x2f, 0xe3, 0xe7, 0x95, 0x6c, 0xfc, 0xbb, 0x51, 0x38, 0xf9, 0x53, 0x6c, 0xfd, 0x4f, 0x97, 0xe2, 0x67, 0x10, 0x4e, 0xfe, 0xbb, 0x0d, 0x4e, 0xfe, 0x6c, 0x0c, 0x4e, 0x1e, 0xeb, 0x86, 0x93, 0xff, 0x7b, 0x3e, 0x7e, 0x06, 0xe0, 0xe4, 0xcf, 0xd7, 0xc0, 0xc9, 0x5f, 0x04, 0xf1, 0x73, 0x10, 0x4e, 0xfe, 0x67, 0x1d, 0x9c, 0xfc, 0x15, 0xe6, 0xf9, 0x78, 0x3b, 0x9c, 0x3c, 0x7f, 0x02, 0x4e, 0x5e, 0x3c, 0x07, 0x27, 0x7f, 0xbd, 0x05, 0x4e, 0xfe, 0xd6, 0x8c, 0x9f, 0x5e, 0x38, 0x79, 0xc5, 0x88, 0x9f, 0x1e, 0x38, 0x79, 0x0d, 0xdf, 0xf3, 0x49, 0x01, 0x7e, 0x30, 0xdf, 0xa8, 0x0b, 0x4e, 0x8e, 0xe5, 0xc1, 0xa9, 0xbb, 0x1b, 0xe1, 0x94, 0x6b, 0x29, 0x9c, 0x2a, 0x5e, 0x03, 0xa7, 0x4a, 0x56, 0xc2, 0xa9, 0xcf, 0x1f, 0x85, 0x53, 0x65, 0x32, 0x9c, 0x2a, 0x77, 0xc0, 0xa9, 0xc0, 0x6e, 0xfc, 0x1c, 0x84, 0x53, 0xc1, 0xc7, 0xe1, 0x54, 0xb4, 0x10, 0x3f, 0x98, 0xfe, 0x85, 0x3e, 0x38, 0xd5, 0xd0, 0x01, 0xa7, 0x1e, 0xc1, 0xfc, 0x4d, 0xf9, 0xf8, 0xc1, 0xbc, 0x8f, 0x1a, 0xf1, 0x73, 0x1e, 0x9f, 0x37, 0xc1, 0xa9, 0x58, 0x39, 0xbe, 0xdb, 0x8c, 0xcf, 0x2e, 0xfc, 0x44, 0xe0, 0xe4, 0xde, 0x9d, 0x70, 0xf2, 0x3d, 0x6c, 0xdb, 0xff, 0xf2, 0xc1, 0xc9, 0x33, 0x12, 0x9c, 0x3c, 0x77, 0x0c, 0x4e, 0x5e, 0xde, 0x8e, 0xef, 0x29, 0xc7, 0x77, 0x60, 0xdf, 0x7f, 0xd8, 0x80, 0x79, 0x5e, 0xc7, 0xf8, 0x66, 0x38, 0x79, 0x09, 0xeb, 0x9a, 0x87, 0xe5, 0x2f, 0xe0, 0xbb, 0x7d, 0x8f, 0xe3, 0x38, 0xec, 0x87, 0x53, 0x0f, 0x62, 0x3b, 0x87, 0x0f, 0xc3, 0x29, 0x3f, 0xd6, 0xf3, 0x0e, 0xf6, 0xe3, 0x77, 0x17, 0xb1, 0x9d, 0x38, 0x46, 0xbf, 0xdb, 0x01, 0x27, 0x0f, 0x2d, 0xc4, 0xb6, 0x6d, 0xc1, 0x76, 0x25, 0xe1, 0x54, 0xb3, 0x13, 0xcb, 0xe3, 0xf3, 0x3c, 0x1c, 0x8b, 0xdf, 0xf4, 0xe0, 0xbb, 0x31, 0xcf, 0xef, 0xf1, 0x77, 0x16, 0xf6, 0x61, 0x6e, 0x37, 0xf6, 0x6f, 0x2b, 0x86, 0x47, 0xb0, 0x9e, 0x11, 0x7c, 0x17, 0xd6, 0x11, 0xb2, 0xe3, 0x78, 0xa5, 0xe0, 0xe4, 0x2f, 0x71, 0x7c, 0xdf, 0x5b, 0x85, 0xe5, 0xb0, 0xcd, 0x4e, 0x05, 0x4e, 0xd9, 0x70, 0xfc, 0xfe, 0x13, 0x7f, 0x8b, 0x70, 0x6c, 0x7f, 0x85, 0x69, 0x57, 0xb1, 0xbd, 0x27, 0x6c, 0x58, 0x0f, 0xce, 0xc5, 0xc7, 0x1e, 0x7c, 0x1f, 0xb6, 0xf5, 0xf7, 0x0a, 0x9c, 0x3c, 0x8b, 0xf3, 0xf0, 0x1b, 0x1c, 0xcf, 0x77, 0xf1, 0x3d, 0x17, 0xb0, 0x9e, 0x73, 0x38, 0x6e, 0xe5, 0xd8, 0x9e, 0xcf, 0xe3, 0xbc, 0x7c, 0x54, 0xf8, 0xc7, 0xe7, 0xfe, 0x87, 0xef, 0x60, 0x19, 0x9c, 0xa3, 0x9f, 0xf8, 0x70, 0x8c, 0xa7, 0xe0, 0xa7, 0x15, 0x4e, 0xfd, 0x05, 0xf6, 0xf5, 0x52, 0x3e, 0xbe, 0x2f, 0x88, 0x6d, 0x7e, 0x19, 0xdb, 0x84, 0xe1, 0x0b, 0xb8, 0x82, 0x7f, 0xdd, 0x8b, 0xe3, 0xdd, 0x84, 0xf3, 0xba, 0x43, 0x94, 0xfd, 0x29, 0x8e, 0x6d, 0x10, 0xc7, 0xe2, 0x24, 0x96, 0xff, 0x68, 0x93, 0x88, 0xdb, 0x73, 0x19, 0x9f, 0x8f, 0xf0, 0xf3, 0xa9, 0xca, 0xd3, 0x70, 0x72, 0xc4, 0x24, 0x9e, 0x1f, 0xc1, 0xf6, 0xff, 0x2a, 0x2a, 0x9e, 0x9b, 0x14, 0xf1, 0xfb, 0x17, 0x38, 0x87, 0xb5, 0xb8, 0x36, 0x3e, 0xbe, 0x8a, 0x6d, 0x88, 0x0a, 0x6b, 0x5a, 0x13, 0xf3, 0x70, 0xb7, 0x8c, 0x8a, 0xba, 0x06, 0x2d, 0xdf, 0xd7, 0xfd, 0xe9, 0x9b, 0xad, 0xea, 0xfe, 0xe2, 0xf8, 0xd7, 0x8f, 0x7f, 0xff, 0x13, 0xff, 0xce, 0xe3, 0x5f, 0x44, 0xfb, 0xfb, 0x22, 0xfe, 0xfd, 0x6f, 0xfc, 0xa3, 0x5f, 0x2a, 0x43, 0x71, 0x14, 0xa6, 0x3c, 0xdf, 0xc6, 0x3f, 0x8a, 0xa3, 0x32, 0xe9, 0x3a, 0x29, 0x2d, 0xfd, 0x4c, 0x79, 0xd2, 0xcf, 0xdb, 0xb6, 0x7d, 0xf1, 0x8b, 0x0d, 0x5d, 0x9d, 0x89, 0xae, 0x27, 0xda, 0xe5, 0x27, 0x92, 0x2d, 0x5d, 0xdd, 0x15, 0x32, 0x20, 0xad, 0x64, 0xa4, 0xb4, 0x5e, 0xfe, 0x8f, 0x30, 0x45, 0xd7, 0x2e, 0xc2, 0xd1, 0x7b, 0x8d, 0x70, 0xcf, 0xad, 0x86, 0x1b, 0x33, 0x0f, 0xe8, 0xf3, 0x67, 0xfb, 0xf2, 0xa9, 0x76, 0xaa, 0x41, 0xab, 0x03, 0xc7, 0x34, 0x47, 0xc6, 0xdf, 0x89, 0x00, 0x52, 0x33, 0xfe, 0x92, 0x9a, 0xb4, 0x59, 0xcb, 0x93, 0x2f, 0xc6, 0x6e, 0x23, 0xae, 0xe9, 0x8d, 0xef, 0xc2, 0xc9, 0x6f, 0xdd, 0xc3, 0xa5, 0x0c, 0x48, 0x11, 0x1a, 0x20, 0x87, 0x9f, 0x25, 0xdd, 0xfb, 0x0d, 0xaa, 0x41, 0xfc, 0xa4, 0xeb, 0xfe, 0xe2, 0x17, 0xb7, 0x6d, 0xfb, 0xea, 0xb8, 0x97, 0x9a, 0x33, 0x4f, 0x5b, 0x82, 0xfc, 0x33, 0xf1, 0xbf, 0xcb, 0xba, 0x5f, 0xab, 0x0a, 0xea, 0xc5, 0x31, 0x50, 0x4f, 0x8c, 0x82, 0x3a, 0x7c, 0x15, 0xd4, 0xde, 0x8b, 0xa0, 0xc2, 0x09, 0x18, 0x83, 0x61, 0x18, 0xc5, 0xfa, 0xae, 0x62, 0x96, 0x8b, 0xf8, 0x39, 0xc1, 0xaa, 0xb2, 0x62, 0xb8, 0x6e, 0xf5, 0x37, 0x19, 0xee, 0x80, 0x3b, 0xb1, 0x21, 0x93, 0x70, 0x5e, 0x72, 0xcf, 0x9b, 0x9e, 0xcb, 0x8c, 0xd7, 0xff, 0x0f, 0x7f, 0x52, 0x2f, 0x0d, 0xcf, 0x2d, 0xc7, 0x89, 0x3e, 0x22, 0xde, 0xa0, 0x3d, 0xa5, 0xf3, 0x19, 0x7a, 0x25, 0x2a, 0x24, 0xe2, 0xfa, 0xfb, 0xed, 0x76, 0x1a, 0xb9, 0x6c, 0xaa, 0x78, 0xc2, 0x89, 0x9d, 0x64, 0x99, 0x30, 0xd1, 0x64, 0x36, 0xe4, 0x48, 0xc6, 0xc9, 0xd6, 0x3b, 0x54, 0xfa, 0x80, 0xba, 0xe8, 0xc9, 0x27, 0x93, 0x4f, 0x3c, 0xf5, 0x14, 0xb4, 0x77, 0x2e, 0x6c, 0x49, 0x8a, 0xc7, 0x45, 0xed, 0x4f, 0x24, 0x5a, 0xc4, 0x63, 0x1c, 0x57, 0x5a, 0xcb, 0x22, 0xf1, 0xfc, 0xd4, 0xd7, 0x9e, 0xd2, 0x9e, 0xe2, 0x8b, 0x92, 0x49, 0x32, 0x59, 0xa6, 0x65, 0xef, 0x6e, 0x59, 0xda, 0xad, 0xa5, 0x24, 0x9e, 0x58, 0x98, 0x68, 0xd1, 0xe2, 0x17, 0x3c, 0xdd, 0xdd, 0xdd, 0xd9, 0x91, 0x48, 0x57, 0x24, 0x82, 0x22, 0x94, 0xea, 0xea, 0x4c, 0x69, 0x09, 0x4f, 0x75, 0x77, 0x69, 0x4f, 0x64, 0xed, 0x2c, 0x1d, 0xdb, 0xde, 0xd2, 0xf1, 0xf4, 0x82, 0x27, 0xba, 0x92, 0x4f, 0x2c, 0x48, 0x37, 0xea, 0xaf, 0x17, 0x75, 0x2c, 0x6c, 0x79, 0xb2, 0xb3, 0x4b, 0x2b, 0xf5, 0x64, 0x97, 0x2e, 0x44, 0xb9, 0x75, 0xc1, 0xae, 0xce, 0x4e, 0xad, 0x09, 0xa9, 0x4e, 0x3c, 0xc9, 0x5a, 0x6e, 0x8a, 0xae, 0xab, 0x0d, 0x7f, 0xb5, 0xb6, 0x63, 0x11, 0xee, 0x9e, 0x27, 0xbb, 0x5a, 0x9e, 0x20, 0xfb, 0x69, 0xe9, 0x24, 0x0b, 0xd4, 0x7e, 0x35, 0xba, 0x68, 0xe1, 0x42, 0x68, 0xc5, 0xaf, 0x92, 0x8c, 0xf9, 0xbb, 0xf4, 0xc3, 0x0d, 0xd1, 0xa9, 0x45, 0x4b, 0xe3, 0xed, 0xdd, 0xba, 0xea, 0x16, 0x3c, 0xf1, 0x54, 0x8b, 0xec, 0x5b, 0x4a, 0x56, 0xcd, 0x6e, 0xb4, 0x94, 0x77, 0x93, 0x29, 0xbd, 0x1b, 0xec, 0x1b, 0x2e, 0x6e, 0xf9, 0x5a, 0xfb, 0x13, 0xa9, 0x4c, 0xb0, 0xb3, 0x33, 0xfb, 0x3c, 0xfe, 0xa5, 0x0b, 0x16, 0x75, 0x63, 0xc6, 0x9b, 0xfb, 0x40, 0x83, 0xa0, 0x59, 0x80, 0xeb, 0x92, 0xbb, 0x9f, 0x78, 0x6a, 0xb1, 0x45, 0x97, 0x27, 0xd9, 0xf9, 0xc4, 0x42, 0x79, 0x61, 0x4b, 0xfc, 0x89, 0xa7, 0x93, 0xdd, 0x72, 0xaa, 0xab, 0x25, 0xde, 0xd2, 0xd5, 0xd2, 0xf1, 0x64, 0x0b, 0xf6, 0xf7, 0x4f, 0x18, 0xd7, 0x6c, 0x75, 0xf3, 0x5a, 0xba, 0xd9, 0xc8, 0xdb, 0xd3, 0x29, 0x59, 0x1b, 0xe2, 0xa7, 0x4a, 0x4a, 0x4a, 0xf4, 0x2f, 0x5c, 0xd8, 0xd9, 0xd1, 0x62, 0x41, 0xfc, 0x22, 0xf5, 0x74, 0x77, 0xc9, 0xc2, 0x96, 0x25, 0x8b, 0x9e, 0x6c, 0x81, 0xee, 0x45, 0xed, 0x2d, 0x5d, 0xe9, 0xc0, 0xbc, 0xaf, 0x3d, 0xd5, 0xdd, 0xd2, 0x2e, 0x37, 0xb6, 0xfc, 0xd5, 0xd3, 0x2d, 0x4f, 0x75, 0x8f, 0x5b, 0x67, 0xe3, 0x97, 0xca, 0xc2, 0xce, 0xec, 0x18, 0x75, 0x77, 0xa6, 0x9e, 0x58, 0x56, 0x12, 0xef, 0xec, 0xe8, 0x86, 0x2f, 0x2c, 0x86, 0xaa, 0x27, 0xb0, 0x07, 0x49, 0xf8, 0x52, 0x67, 0xd7, 0xe2, 0x05, 0xd8, 0x99, 0x56, 0xdd, 0x93, 0xb7, 0xb5, 0xb3, 0xbd, 0xc5, 0xdb, 0xfd, 0xd7, 0x8b, 0x92, 0x2d, 0x1d, 0xde, 0x27, 0xba, 0x3a, 0x9f, 0xf2, 0x76, 0x75, 0xb6, 0x7b, 0x33, 0x58, 0x8d, 0xb7, 0xc4, 0xdb, 0x99, 0x6a, 0xe9, 0x10, 0xe6, 0xf0, 0x4a, 0x9e, 0x84, 0x2f, 0x67, 0x52, 0xbe, 0x22, 0xd7, 0x76, 0x2c, 0x79, 0x22, 0xb9, 0x68, 0x61, 0xba, 0x5f, 0x32, 0x86, 0x9e, 0x6e, 0x91, 0xa7, 0xa7, 0xe4, 0x27, 0xba, 0xe5, 0xe9, 0x4f, 0x79, 0xe4, 0xe4, 0xa2, 0x0e, 0x0c, 0x3e, 0x6d, 0xd1, 0xbd, 0x4d, 0xdf, 0xc4, 0x71, 0x8b, 0x3e, 0xbb, 0x63, 0x3e, 0x5d, 0x83, 0x68, 0x2e, 0x3a, 0xff, 0xfa, 0xff, 0xbc, 0x41, 0xff, 0xb5, 0xf7, 0x76, 0x3f, 0x91, 0x48, 0x2e, 0x7a, 0xaa, 0xfb, 0xff, 0xf8, 0xf5, 0xf2, 0x3c, 0x1e, 0x57, 0x5d, 0x7b, 0x34, 0xeb, 0x88, 0x5f, 0xe2, 0xd7, 0xd4, 0xd0, 0x54, 0x57, 0xc8, 0x22, 0x40, 0x9b, 0x25, 0xb9, 0xd4, 0x72, 0xeb, 0x1c, 0x6c, 0x96, 0xf0, 0x0f, 0xe5, 0x68, 0x6c, 0xe8, 0xec, 0xea, 0x16, 0x19, 0xe4, 0x70, 0x27, 0xae, 0xdc, 0x2e, 0x5d, 0xcc, 0x1f, 0x28, 0x32, 0xe3, 0x29, 0xcd, 0x76, 0xe1, 0x4d, 0x45, 0xc7, 0xa7, 0xb0, 0x6d, 0xc9, 0xd6, 0x45, 0x1d, 0x8b, 0x23, 0x8b, 0x9e, 0x4a, 0x61, 0x7c, 0x85, 0x1c, 0x7a, 0xb2, 0x7b, 0xd1, 0x92, 0x16, 0xd1, 0x41, 0x1a, 0x84, 0x06, 0x6d, 0x54, 0xf0, 0x71, 0x5e, 0xaa, 0x0b, 0x21, 0x21, 0x5b, 0x34, 0xc4, 0xed, 0x51, 0xdb, 0x80, 0x9b, 0xec, 0x29, 0xdc, 0x07, 0x4f, 0x74, 0x3f, 0x41, 0xa9, 0x38, 0xfe, 0x89, 0xee, 0x56, 0x79, 0x7a, 0xf2, 0x69, 0xb9, 0xfb, 0x6b, 0xa9, 0x16, 0x7a, 0x18, 0x97, 0xaf, 0xb6, 0xe1, 0xab, 0xb5, 0x55, 0x5f, 0xa8, 0x6f, 0x6a, 0xfc, 0x42, 0xdd, 0x57, 0x1f, 0xfd, 0xfc, 0x43, 0xe3, 0xd2, 0x22, 0x5d, 0x4f, 0x24, 0x64, 0x82, 0xcf, 0xf8, 0x8c, 0xed, 0xf2, 0x95, 0x26, 0x9b, 0x6f, 0x2c, 0x3b, 0xaf, 0xaa, 0xb1, 0xba, 0xba, 0x7e, 0xee, 0x17, 0x22, 0xd5, 0x37, 0x95, 0xc6, 0xd4, 0x86, 0x2f, 0xd4, 0xd6, 0x37, 0x55, 0x37, 0x62, 0xd2, 0xc3, 0xb7, 0x4f, 0xba, 0xb9, 0x54, 0xa8, 0xae, 0xba, 0xa9, 0x09, 0x2b, 0x9c, 0xbe, 0x90, 0x7a, 0xc0, 0x66, 0x39, 0x75, 0x19, 0xd2, 0x4b, 0x44, 0xae, 0xea, 0x4c, 0x76, 0x76, 0x7d, 0xde, 0x2f, 0x37, 0x3d, 0xb1, 0x20, 0x99, 0x86, 0x7e, 0xe3, 0x32, 0x2e, 0x6c, 0x59, 0x8a, 0xfd, 0x5d, 0x28, 0x37, 0xa6, 0x5b, 0x2f, 0xcf, 0xce, 0x3c, 0x85, 0x6f, 0xd9, 0x23, 0x7c, 0xcc, 0x54, 0x9b, 0x2d, 0x59, 0x8e, 0x73, 0x35, 0x3b, 0xf3, 0x14, 0x4e, 0x3f, 0x59, 0xe0, 0xcb, 0x99, 0xa2, 0x5f, 0x91, 0xbf, 0x98, 0xc2, 0x21, 0x27, 0xd8, 0x94, 0x5e, 0xb0, 0x4f, 0x52, 0x3d, 0x4f, 0xdd, 0xd4, 0xb9, 0xea, 0xfa, 0x79, 0x37, 0x8d, 0x47, 0x55, 0xe7, 0xd3, 0x1d, 0xdd, 0xfc, 0xc2, 0x26, 0x31, 0x47, 0xe3, 0xbb, 0xdc, 0x80, 0x20, 0xa3, 0xf4, 0xcb, 0x5f, 0xb9, 0x29, 0xae, 0xfc, 0xe6, 0x38, 0x31, 0x16, 0x2d, 0x1d, 0x0b, 0x69, 0x9b, 0xb4, 0x74, 0x74, 0x23, 0x05, 0x75, 0xab, 0xda, 0xbe, 0x8c, 0x91, 0x5f, 0x11, 0x29, 0xba, 0x3e, 0x8c, 0x9b, 0x98, 0x50, 0x5d, 0x43, 0x34, 0x74, 0x73, 0xf2, 0x17, 0x90, 0x4e, 0x9b, 0x57, 0x15, 0xaa, 0xbf, 0xd5, 0xc4, 0xd5, 0xe0, 0x3a, 0xba, 0x29, 0x5e, 0xf4, 0x68, 0xa1, 0x5c, 0x4f, 0x56, 0x36, 0x03, 0xd3, 0x9f, 0xaa, 0x94, 0xe7, 0x2d, 0x5a, 0xc6, 0x31, 0x35, 0x9d, 0xd4, 0xe9, 0xf1, 0x93, 0xf6, 0xc5, 0x8e, 0xc5, 0x1d, 0x9d, 0x7f, 0xdd, 0x21, 0x73, 0x90, 0xcb, 0x8e, 0x4b, 0x6e, 0x6c, 0x79, 0x8a, 0x0e, 0x12, 0x6d, 0x93, 0xdc, 0x00, 0xcb, 0xb3, 0x2b, 0x63, 0xd1, 0x53, 0xd8, 0xfd, 0x6e, 0xb2, 0x78, 0xaa, 0x99, 0x22, 0xc5, 0xed, 0x88, 0x33, 0xdb, 0xdd, 0xda, 0xa2, 0x99, 0x22, 0xf5, 0x58, 0x52, 0xc9, 0x16, 0x3a, 0x33, 0x9f, 0x4c, 0x76, 0xe2, 0xf7, 0x13, 0xc9, 0xa4, 0x2c, 0x60, 0xd1, 0x53, 0x72, 0xcb, 0xd2, 0x27, 0x5b, 0x52, 0xdd, 0xf2, 0x97, 0xf0, 0x40, 0xc3, 0xb3, 0xaa, 0x0b, 0x37, 0x26, 0x9e, 0x28, 0x4f, 0x95, 0xd0, 0x8e, 0xec, 0xfa, 0x5a, 0x8f, 0x06, 0xfb, 0xb1, 0x49, 0x5a, 0x8b, 0xc2, 0x4f, 0xc7, 0xe3, 0x62, 0xdb, 0xa6, 0x44, 0xc7, 0xf0, 0x69, 0x21, 0xae, 0xbd, 0x78, 0x67, 0x57, 0x7b, 0x7a, 0xe9, 0xa6, 0xb7, 0x53, 0xe7, 0xd3, 0x38, 0x39, 0x55, 0xc9, 0x45, 0x4f, 0x2e, 0xa6, 0xa1, 0x2f, 0x49, 0x4f, 0x8c, 0x96, 0x3c, 0xa7, 0xe5, 0x6b, 0x8d, 0xa9, 0xee, 0x48, 0x0b, 0xee, 0x77, 0x5e, 0x0a, 0x4f, 0xb5, 0x3c, 0xf9, 0x94, 0xdc, 0xbe, 0xe8, 0x49, 0x04, 0x9e, 0xf2, 0x2d, 0xb3, 0xce, 0x4b, 0xb5, 0xb4, 0x68, 0xd9, 0x28, 0xff, 0xad, 0xb3, 0x76, 0x74, 0x62, 0x63, 0xf0, 0x30, 0xac, 0xfd, 0x42, 0x49, 0x09, 0x9e, 0x8d, 0x33, 0xba, 0x65, 0x1a, 0x09, 0xac, 0x80, 0x4f, 0xe3, 0xa7, 0xf4, 0x59, 0xe7, 0xd1, 0xb2, 0xa9, 0xaf, 0xfe, 0x52, 0x43, 0x63, 0x75, 0xcd, 0x3c, 0xb9, 0x65, 0x09, 0x2e, 0x1f, 0x84, 0xae, 0x3c, 0x2c, 0x04, 0x7e, 0x3a, 0x3b, 0xa0, 0x09, 0x07, 0x30, 0xfe, 0x74, 0x07, 0x07, 0x10, 0x08, 0xbb, 0xee, 0xa7, 0x91, 0x26, 0xcb, 0xac, 0x6c, 0x35, 0x17, 0x4f, 0xed, 0xee, 0x96, 0x85, 0x78, 0x1a, 0x7f, 0x55, 0x37, 0x15, 0xfc, 0xf2, 0xa8, 0xc0, 0x0e, 0xe0, 0xcb, 0x1c, 0xff, 0x95, 0x71, 0x91, 0xd9, 0x39, 0xaf, 0xad, 0xae, 0xa2, 0xb3, 0xa3, 0x42, 0x7e, 0x62, 0xe1, 0xc2, 0x2e, 0xf9, 0x2f, 0xe4, 0xe9, 0x4b, 0x65, 0x99, 0x4f, 0x13, 0x7a, 0x5e, 0x28, 0xbb, 0x3a, 0xbb, 0x16, 0x25, 0xb2, 0xe1, 0xfb, 0x2d, 0xa0, 0x3b, 0x6f, 0x6e, 0xc0, 0xf9, 0xb2, 0x87, 0x7a, 0xb6, 0x25, 0x7a, 0x3c, 0x05, 0x2a, 0x2b, 0x21, 0x04, 0xda, 0x81, 0x81, 0x1d, 0x58, 0x14, 0xff, 0x9a, 0xac, 0xb5, 0x47, 0xfe, 0xf4, 0x28, 0xc2, 0xb8, 0xbf, 0xbb, 0xe1, 0xe4, 0x4b, 0x48, 0x1f, 0xbe, 0x84, 0x34, 0xf4, 0x4b, 0x85, 0x70, 0xf2, 0x3b, 0x67, 0xf0, 0xb3, 0x1b, 0x4e, 0x6e, 0x41, 0x1a, 0xf2, 0xef, 0x90, 0xe6, 0xde, 0x8c, 0x34, 0xef, 0x77, 0xfa, 0xf1, 0xd3, 0x86, 0x1f, 0xa4, 0x8b, 0xbf, 0x83, 0xb4, 0xff, 0x16, 0xa4, 0x0d, 0xb7, 0x20, 0x5d, 0xbb, 0x25, 0x8a, 0x79, 0x90, 0xd6, 0xfd, 0x3b, 0xa4, 0x67, 0xff, 0x0e, 0x69, 0xdb, 0xbf, 0x43, 0x5a, 0x7d, 0x33, 0xd2, 0x8a, 0x5b, 0x7a, 0xb4, 0xba, 0xa7, 0xc0, 0xc9, 0x1f, 0x60, 0x9e, 0xb7, 0xfc, 0xf8, 0xe9, 0xc2, 0x0f, 0xd6, 0x3b, 0x64, 0xc2, 0x0f, 0xbe, 0x6b, 0xfb, 0x11, 0x38, 0xb9, 0xa3, 0x06, 0x3f, 0x1f, 0x60, 0xf8, 0x25, 0xfc, 0xe0, 0x7b, 0xbf, 0x8f, 0xb4, 0xea, 0xf7, 0x5b, 0xf1, 0x83, 0xf4, 0xcf, 0xf7, 0x47, 0x31, 0xcf, 0x5a, 0x38, 0xf9, 0xb6, 0x8c, 0x1f, 0x8c, 0x7b, 0x1b, 0xe3, 0xde, 0xc6, 0xb8, 0x1d, 0x03, 0x18, 0x5f, 0x93, 0xb5, 0x6f, 0xbb, 0xbb, 0x2c, 0xfb, 0xfc, 0x83, 0xef, 0x69, 0xcf, 0xd3, 0xd3, 0x76, 0x6d, 0xb5, 0xbf, 0xb4, 0xdd, 0xdb, 0x19, 0x37, 0xd8, 0xc2, 0x4d, 0xdb, 0xbf, 0xbd, 0x57, 0x8b, 0x9f, 0xa1, 0x2b, 0xe7, 0x18, 0xc7, 0x71, 0x56, 0x6e, 0xe2, 0x41, 0x37, 0xdd, 0x14, 0x13, 0xb8, 0x29, 0x86, 0xe5, 0x48, 0x33, 0xb6, 0x75, 0x73, 0xbc, 0x92, 0xc3, 0x4b, 0xf7, 0x6c, 0x24, 0xbf, 0xb2, 0xb6, 0xb3, 0x7e, 0x97, 0xfa, 0x92, 0x13, 0x1a, 0xd6, 0x25, 0xf2, 0x85, 0x9e, 0xad, 0xba, 0x1d, 0x7f, 0x73, 0xf0, 0xf7, 0x1d, 0xf6, 0x12, 0x7a, 0x8f, 0xf3, 0x9e, 0x9b, 0xca, 0xfc, 0x35, 0xa6, 0xb6, 0x8d, 0x2b, 0xd3, 0xab, 0x95, 0x59, 0x7d, 0xdb, 0x32, 0x7d, 0x98, 0x5a, 0x36, 0xae, 0x4c, 0x9d, 0x56, 0xe6, 0xd1, 0xdb, 0x96, 0xf9, 0x26, 0xa6, 0x4a, 0xe3, 0xca, 0x14, 0x68, 0x65, 0xec, 0xb7, 0x2d, 0xf3, 0xed, 0xfa, 0x5d, 0x63, 0xef, 0xeb, 0xcb, 0x8c, 0x9d, 0x16, 0x65, 0xc6, 0xce, 0xdf, 0xb6, 0xcc, 0xdf, 0x63, 0xea, 0xe6, 0x71, 0x65, 0x06, 0xb5, 0x32, 0xbb, 0x6e, 0x5b, 0xe6, 0x2d, 0x4c, 0x8d, 0x8f, 0x2b, 0xd3, 0xa3, 0x95, 0x59, 0x75, 0xdb, 0x32, 0xff, 0x8c, 0xa9, 0xfe, 0x71, 0x65, 0xa2, 0x5a, 0x99, 0xc6, 0xdb, 0x96, 0xf9, 0x51, 0xfd, 0xae, 0xeb, 0x63, 0xe3, 0xca, 0xe4, 0x6b, 0x65, 0xa6, 0xdd, 0xb6, 0xcc, 0x11, 0x2c, 0x73, 0x40, 0x5f, 0xe6, 0xfa, 0x09, 0x51, 0xe6, 0xfa, 0xd9, 0xdb, 0x96, 0x39, 0x8d, 0xa9, 0x1b, 0xc7, 0x95, 0x79, 0x5d, 0x2b, 0xb3, 0xe3, 0xb6, 0x65, 0x2e, 0x60, 0xea, 0x82, 0x71, 0x65, 0x96, 0x6a, 0x65, 0xfa, 0x6e, 0x5b, 0xe6, 0xf7, 0x98, 0x5a, 0x32, 0xae, 0x4c, 0x44, 0x2b, 0x53, 0xaf, 0x2b, 0x93, 0xf6, 0xa1, 0x6b, 0x4f, 0xe4, 0x0a, 0xc9, 0x80, 0xeb, 0xbe, 0xf0, 0x36, 0xc9, 0x4e, 0x5a, 0x2c, 0xba, 0x54, 0x67, 0x26, 0x35, 0x0f, 0x53, 0x9d, 0x5a, 0xea, 0xb8, 0xf7, 0xad, 0x9b, 0x50, 0xbf, 0x6b, 0xf4, 0x1d, 0xfd, 0xfb, 0x46, 0x0f, 0x8b, 0xf7, 0x8d, 0x1e, 0xd7, 0xbf, 0x4f, 0x93, 0x06, 0x77, 0x4b, 0x27, 0x12, 0x05, 0x42, 0x43, 0x7e, 0xf4, 0x75, 0xed, 0x77, 0x07, 0xd6, 0x7d, 0x42, 0xe4, 0xbd, 0x45, 0xfd, 0x9f, 0xc5, 0x1c, 0x8f, 0x8f, 0xab, 0xbf, 0x5b, 0xab, 0xff, 0x99, 0xdb, 0x8d, 0xc1, 0xba, 0xe9, 0xe4, 0xa5, 0x63, 0x5c, 0x99, 0xa0, 0x56, 0x26, 0x76, 0xdb, 0x32, 0x9f, 0xaf, 0xdf, 0xf5, 0xc9, 0x95, 0x71, 0x65, 0xac, 0x5a, 0x99, 0x29, 0x37, 0x8f, 0x9b, 0xe9, 0x70, 0x7a, 0x64, 0x3e, 0xb9, 0x1a, 0xde, 0x66, 0x3a, 0x9c, 0x1e, 0x37, 0xf9, 0x2e, 0x2b, 0xb1, 0x9d, 0x26, 0x24, 0xc0, 0x50, 0xb2, 0xe0, 0x31, 0x7a, 0x36, 0x18, 0x13, 0x00, 0xbb, 0x16, 0x14, 0xf2, 0xb3, 0x84, 0xcf, 0x23, 0x0b, 0x00, 0xde, 0xe1, 0x90, 0x21, 0x0e, 0x86, 0x0d, 0x64, 0xd1, 0x8e, 0xcb, 0x88, 0xb4, 0x5c, 0x7e, 0xa6, 0x94, 0x65, 0x98, 0x32, 0xc4, 0xa1, 0x1c, 0x4c, 0xd9, 0xcb, 0x4f, 0x46, 0x8c, 0x27, 0x0f, 0xb7, 0x1c, 0xca, 0x37, 0xe0, 0x5b, 0x8c, 0xa2, 0x66, 0xe3, 0x44, 0xcc, 0x73, 0xb4, 0x05, 0x60, 0x1f, 0x87, 0xcc, 0x98, 0xaf, 0x02, 0xf3, 0x1d, 0xa1, 0x90, 0x83, 0x6a, 0x1e, 0x15, 0x35, 0x3b, 0xa8, 0x66, 0xf2, 0x51, 0x77, 0x8c, 0x43, 0x54, 0xf3, 0x25, 0x7e, 0xa2, 0x9a, 0xcd, 0x18, 0x7f, 0x59, 0x68, 0x64, 0xd4, 0xff, 0x13, 0xfc, 0xe2, 0x7f, 0x5e, 0x51, 0xac, 0xd9, 0xd0, 0x3f, 0xaf, 0xd5, 0x2c, 0x4b, 0x4a, 0xd9, 0xb8, 0x7f, 0x39, 0xaa, 0x9c, 0xcd, 0x86, 0xde, 0x35, 0x2a, 0xc7, 0xb2, 0xa1, 0x1f, 0x3a, 0x95, 0xf7, 0x75, 0xa1, 0x52, 0x65, 0x58, 0x17, 0x3a, 0xa5, 0x0c, 0x65, 0x43, 0x7b, 0x63, 0xca, 0x2b, 0xba, 0xd0, 0x7e, 0x65, 0x63, 0x36, 0xf4, 0x9e, 0x4f, 0xe9, 0xd7, 0x85, 0x4a, 0x15, 0x50, 0x97, 0xe9, 0xc2, 0x7d, 0x18, 0x6e, 0xd3, 0x85, 0xdf, 0xc7, 0xf0, 0x63, 0xd9, 0xf0, 0xbe, 0x32, 0x0c, 0xc7, 0x74, 0xe1, 0x57, 0x31, 0x5c, 0xa1, 0x0b, 0x1f, 0xc1, 0xb0, 0x3b, 0x1b, 0xfe, 0x57, 0x09, 0xc3, 0x53, 0x85, 0x06, 0x02, 0xdf, 0xc8, 0xe4, 0xc9, 0xad, 0x50, 0x40, 0xfa, 0x25, 0x69, 0xdd, 0x12, 0x61, 0xf9, 0x26, 0x3d, 0xd3, 0xbd, 0xd2, 0xbd, 0x57, 0x12, 0xad, 0xda, 0xdc, 0x1a, 0x13, 0x95, 0x1c, 0xf3, 0xdb, 0x44, 0x34, 0x3d, 0xbb, 0xb0, 0x41, 0x29, 0xe4, 0xb8, 0xab, 0x89, 0xc7, 0x5b, 0xea, 0xf9, 0xe9, 0xf7, 0x89, 0x05, 0xfc, 0x7b, 0x2d, 0xbe, 0x44, 0x89, 0x67, 0xdf, 0xfc, 0xfd, 0x8b, 0xfa, 0xb1, 0xde, 0x1e, 0xe3, 0xb1, 0xee, 0xd6, 0xc5, 0xbc, 0xaa, 0x9c, 0xcb, 0x86, 0xde, 0xee, 0x50, 0x8e, 0x67, 0x43, 0xbb, 0xfa, 0x94, 0x11, 0x5d, 0x68, 0x95, 0xb2, 0x47, 0x17, 0x5a, 0xad, 0x6c, 0xd7, 0x85, 0xd6, 0x2a, 0xaf, 0xfe, 0x29, 0xbd, 0xb3, 0x5f, 0xc5, 0xf5, 0xb1, 0x6a, 0x7c, 0xff, 0xec, 0xbf, 0x4b, 0x2c, 0xbc, 0xb1, 0x7f, 0xf6, 0x6b, 0x89, 0x65, 0x2d, 0x6d, 0xfc, 0xf4, 0x49, 0xc2, 0xcd, 0xbf, 0xa3, 0xd8, 0xbf, 0x92, 0xec, 0x9b, 0x5f, 0x1f, 0xd6, 0xf7, 0xef, 0x8d, 0xa9, 0x37, 0xf6, 0x6f, 0xe8, 0x90, 0xbe, 0x7f, 0x43, 0x47, 0xf4, 0xfd, 0x7b, 0x63, 0x89, 0xbe, 0x7f, 0x6f, 0x0c, 0xe9, 0xfb, 0x37, 0x78, 0x49, 0xdf, 0xbf, 0xa1, 0x67, 0xfe, 0xb4, 0xfe, 0xdd, 0x7b, 0x8d, 0xfc, 0xcd, 0x2f, 0x28, 0xe5, 0xe7, 0xdf, 0xe1, 0xf3, 0xea, 0x05, 0xf9, 0xa2, 0x6f, 0x89, 0xf9, 0xa2, 0xcf, 0xd8, 0xc7, 0x2b, 0xca, 0xe3, 0xda, 0x1c, 0x2e, 0x15, 0x33, 0x88, 0x71, 0xa7, 0x94, 0x65, 0xfc, 0x7c, 0x1d, 0xcb, 0x6c, 0x5b, 0x50, 0xc0, 0xcf, 0x9f, 0x90, 0xd4, 0x11, 0x3f, 0x8d, 0x62, 0x8e, 0x61, 0x25, 0x1d, 0x1a, 0xc3, 0xf8, 0x0d, 0xfc, 0xa4, 0x92, 0x4f, 0x69, 0x8c, 0xdf, 0x90, 0x6d, 0xf1, 0x86, 0x4d, 0xfa, 0x71, 0xd9, 0x70, 0x49, 0xec, 0x31, 0xf8, 0x6e, 0x36, 0xee, 0xc5, 0x7a, 0xfd, 0x1e, 0xdb, 0x68, 0xd1, 0xef, 0xb1, 0xff, 0x51, 0xa0, 0xdf, 0x63, 0x5b, 0xc7, 0xf4, 0x7b, 0xec, 0x1f, 0xb7, 0xe9, 0xf7, 0xd8, 0xb6, 0xcd, 0xfa, 0x3d, 0xf6, 0xfa, 0x12, 0xfd, 0x1e, 0x7b, 0x7d, 0x99, 0x7e, 0x8f, 0xbd, 0xfe, 0x0c, 0xed, 0xb1, 0x4f, 0x35, 0x8a, 0xe4, 0x8b, 0xd6, 0x62, 0xbf, 0xcb, 0xba, 0x9c, 0x21, 0x9b, 0x8f, 0x7f, 0x8d, 0x89, 0x29, 0xfc, 0x6b, 0x88, 0x67, 0x67, 0xff, 0xd4, 0x2f, 0xf5, 0x90, 0xe4, 0xd4, 0x59, 0x31, 0xfb, 0x1e, 0x5d, 0xcc, 0x46, 0xe5, 0x1c, 0xbf, 0x71, 0x4a, 0xac, 0xf7, 0x76, 0xef, 0x73, 0xea, 0xe0, 0xab, 0x21, 0x27, 0xe1, 0x59, 0x60, 0xd1, 0x56, 0x61, 0x83, 0x92, 0xa7, 0xad, 0x4f, 0x37, 0xfd, 0x4a, 0x52, 0xbc, 0x52, 0xbf, 0xf2, 0x4a, 0xad, 0xfa, 0x11, 0x2e, 0x65, 0x2d, 0x7f, 0x25, 0xa0, 0x8b, 0x79, 0x5d, 0xbf, 0xf2, 0x1e, 0x94, 0x94, 0xe3, 0x9f, 0x76, 0x05, 0xb1, 0x2f, 0xd5, 0xe6, 0x96, 0x3c, 0x21, 0xd7, 0x9a, 0x08, 0xe2, 0x6f, 0xce, 0x50, 0x6f, 0x7c, 0x81, 0xd2, 0xd8, 0x65, 0x1a, 0xea, 0x5d, 0xf0, 0x18, 0x86, 0x27, 0x0e, 0xf5, 0x2e, 0x9c, 0xa2, 0xb5, 0x33, 0x0b, 0x87, 0x4e, 0x8d, 0xbd, 0xa4, 0x1f, 0x8f, 0xdf, 0xbd, 0xce, 0x6d, 0xd2, 0xa5, 0xff, 0xbe, 0x59, 0xd7, 0xa6, 0x53, 0xd7, 0x6b, 0x74, 0xbb, 0xe1, 0xd4, 0x27, 0x07, 0x94, 0x91, 0x3f, 0xa9, 0x85, 0x8f, 0xb6, 0xd8, 0xb4, 0x16, 0x56, 0xb6, 0x34, 0xe3, 0xf8, 0x2e, 0x50, 0x3a, 0xb8, 0x7d, 0xad, 0x37, 0xb4, 0xaf, 0x59, 0xd7, 0xa2, 0xed, 0xb7, 0x68, 0x9f, 0x2e, 0xfd, 0xfc, 0xfb, 0xfa, 0xf6, 0xfd, 0xf6, 0xb4, 0xbe, 0x7d, 0xbf, 0x0e, 0xeb, 0x76, 0xeb, 0xa9, 0xdf, 0x0d, 0x2a, 0x7b, 0x3e, 0xfd, 0x8e, 0xe4, 0x9d, 0xb7, 0x70, 0x81, 0xaf, 0x0b, 0xc7, 0xb1, 0x65, 0x9a, 0x68, 0xf5, 0x93, 0x00, 0xdf, 0x63, 0x0b, 0x5a, 0x9b, 0x31, 0x6c, 0x60, 0x4f, 0xb1, 0xfb, 0x71, 0x87, 0xec, 0xa0, 0xbe, 0xe1, 0xf3, 0x6e, 0x7c, 0xde, 0xc2, 0x25, 0xcd, 0x89, 0x72, 0x6d, 0xf7, 0x4a, 0x89, 0xb0, 0x58, 0x25, 0x98, 0xbe, 0x45, 0xb1, 0xf3, 0xf3, 0xa4, 0x44, 0x80, 0x7f, 0x2d, 0xa4, 0xc1, 0xa3, 0x54, 0x66, 0x67, 0xfc, 0xe1, 0x3e, 0xfd, 0xfa, 0x78, 0xf8, 0xb8, 0xb6, 0x03, 0x57, 0x66, 0xe3, 0x2a, 0x76, 0xeb, 0x77, 0xe0, 0xcc, 0x4a, 0xfd, 0x0e, 0x0c, 0x80, 0x7e, 0x07, 0x06, 0x06, 0xf5, 0x3b, 0xf0, 0x2f, 0xba, 0xf4, 0x3b, 0xb0, 0x72, 0x58, 0xbf, 0x03, 0x67, 0x81, 0xb2, 0xf1, 0x4f, 0x1c, 0x97, 0xd8, 0x02, 0x4f, 0x17, 0xcd, 0x22, 0xc0, 0x9a, 0x16, 0x6b, 0x66, 0x2c, 0xb6, 0xe1, 0x6c, 0xe6, 0x70, 0xec, 0x4a, 0x8c, 0x13, 0x63, 0xb2, 0x91, 0xda, 0xaf, 0xed, 0x93, 0xd2, 0x16, 0x59, 0xdb, 0x1d, 0xe5, 0x62, 0x94, 0x10, 0x2e, 0xcb, 0xd9, 0xf9, 0x39, 0xb5, 0x4b, 0x3f, 0xd3, 0xa7, 0x0b, 0x6e, 0x80, 0xcb, 0xa7, 0x7e, 0xe9, 0xd4, 0xcf, 0xf4, 0xa9, 0xb0, 0x7e, 0xa6, 0x4f, 0xbf, 0xa2, 0x9f, 0xe9, 0x0f, 0x9f, 0xd1, 0xc1, 0xe5, 0x53, 0xa7, 0xdf, 0xd7, 0xc1, 0xe5, 0x53, 0xff, 0xb9, 0xe9, 0xd3, 0xc3, 0x65, 0x5e, 0xb3, 0x00, 0x9b, 0x5a, 0xa6, 0x68, 0xab, 0x36, 0xd5, 0xd2, 0x93, 0xe9, 0xed, 0x80, 0xd2, 0x74, 0xd3, 0xfe, 0x5f, 0x36, 0x7e, 0xff, 0x63, 0x0f, 0x5b, 0x95, 0xdc, 0xec, 0xbb, 0x7f, 0x64, 0xd2, 0xf7, 0xf0, 0xbd, 0x61, 0xee, 0x61, 0x5c, 0x97, 0x7e, 0x49, 0xdf, 0xc3, 0x83, 0xdb, 0xf5, 0x3d, 0x3c, 0x30, 0xa2, 0xef, 0xe1, 0x8f, 0xd7, 0xea, 0x7b, 0xf8, 0x6f, 0x1b, 0x95, 0xed, 0x7f, 0xe2, 0x0c, 0xca, 0x0b, 0xc8, 0xd3, 0x49, 0xb4, 0x8b, 0xfa, 0xd2, 0xa0, 0xf8, 0xb5, 0x9e, 0x14, 0x68, 0xad, 0xae, 0xd4, 0xb7, 0xfa, 0xa9, 0xa9, 0xfa, 0x56, 0x3f, 0x95, 0xba, 0x01, 0x6a, 0x9d, 0xea, 0x38, 0xa8, 0x6f, 0x75, 0xd7, 0xf0, 0x9f, 0x00, 0xb5, 0x68, 0xb5, 0xf4, 0xa4, 0x57, 0x50, 0x22, 0xda, 0x82, 0xf0, 0x4a, 0x6b, 0x5f, 0xe1, 0x02, 0x33, 0xef, 0xaa, 0x65, 0x4a, 0xdb, 0x0d, 0x6d, 0x1b, 0x37, 0xa2, 0x5f, 0xbd, 0xa4, 0x6f, 0x9b, 0x32, 0xff, 0xc6, 0x11, 0x7d, 0xc2, 0xaf, 0x6f, 0xdb, 0x82, 0x43, 0xfa, 0x11, 0x7d, 0xd2, 0xa3, 0x1f, 0xd1, 0x27, 0x0f, 0xe8, 0x47, 0xb4, 0xe5, 0xa5, 0x3f, 0x79, 0x44, 0x01, 0xd6, 0x2f, 0xa8, 0xbc, 0x01, 0x5a, 0x9c, 0x61, 0x68, 0x71, 0x31, 0xbd, 0x66, 0x0c, 0x7e, 0xdc, 0x0d, 0x3b, 0xbb, 0x26, 0xf0, 0xaa, 0x3a, 0x83, 0xb8, 0xf7, 0x2e, 0x01, 0xf7, 0x5a, 0xc0, 0x50, 0x80, 0x29, 0xaf, 0x73, 0x4d, 0x13, 0x13, 0x4b, 0x17, 0x4c, 0xd1, 0xfa, 0x5c, 0xd7, 0xb2, 0x4c, 0x77, 0xf6, 0x37, 0x66, 0x70, 0xf3, 0x5d, 0x0b, 0xac, 0xda, 0x68, 0x00, 0x1c, 0x57, 0x9c, 0x19, 0xcc, 0x7c, 0x28, 0x8d, 0x99, 0x33, 0x5c, 0xd2, 0xad, 0xfa, 0xa5, 0xe3, 0x4e, 0xbd, 0xaf, 0xcd, 0xd7, 0x20, 0x8b, 0xae, 0xc7, 0xcb, 0xcc, 0x3a, 0xc8, 0x72, 0xea, 0x6b, 0x5b, 0x75, 0x90, 0xe5, 0xd4, 0xd7, 0x0e, 0xea, 0x20, 0xcb, 0xa9, 0xbf, 0xd9, 0xaa, 0x83, 0x2c, 0xa7, 0xfe, 0xe6, 0x75, 0x1d, 0x64, 0x39, 0xf5, 0x37, 0x83, 0x3a, 0xc8, 0x72, 0xea, 0x6f, 0x5e, 0xd1, 0x9d, 0xed, 0xa7, 0xfe, 0x66, 0xbb, 0xee, 0x6c, 0x3f, 0xf5, 0x37, 0x3b, 0xc7, 0xe1, 0xcf, 0xa7, 0xfe, 0x66, 0xef, 0x38, 0xfc, 0xf9, 0xd4, 0xdf, 0x8c, 0x10, 0xfe, 0xfc, 0xe9, 0xcf, 0x7e, 0xeb, 0xf3, 0x7c, 0xde, 0xe6, 0x65, 0xe1, 0x5a, 0x35, 0xfb, 0x87, 0x56, 0xa6, 0xfd, 0x97, 0x4f, 0xf3, 0xb0, 0xd8, 0xcd, 0x92, 0xa4, 0x9d, 0xe6, 0xa6, 0xb8, 0x4f, 0x07, 0xaf, 0x7e, 0xf1, 0x50, 0x58, 0x0f, 0xad, 0x1f, 0x62, 0x99, 0x21, 0xfd, 0x69, 0x5f, 0xb6, 0x52, 0xc3, 0x24, 0x3e, 0xed, 0x1a, 0x92, 0x12, 0x95, 0x37, 0x61, 0x12, 0xda, 0xba, 0xbf, 0x11, 0x93, 0x68, 0xcc, 0xd7, 0xbf, 0x3b, 0x11, 0xbc, 0x11, 0x93, 0x88, 0x8f, 0xe9, 0x31, 0x89, 0x79, 0x5d, 0x9f, 0x7e, 0x4f, 0x6a, 0x3d, 0x6e, 0x5a, 0x90, 0x97, 0xde, 0x89, 0xda, 0xf9, 0xf5, 0xb8, 0x22, 0x8b, 0x51, 0x48, 0xd4, 0xf0, 0xef, 0xc4, 0x78, 0x9d, 0x1e, 0x7a, 0x77, 0xe4, 0xe9, 0x57, 0x58, 0xfb, 0xbe, 0x1b, 0xf1, 0x88, 0x76, 0x9b, 0x7e, 0x27, 0x76, 0xbc, 0xaa, 0xdf, 0x89, 0x1d, 0x7d, 0x9f, 0x1e, 0x8f, 0xe0, 0x77, 0xe7, 0x24, 0xba, 0x16, 0x4c, 0xd5, 0xc6, 0xa7, 0x42, 0x83, 0xb8, 0x11, 0x6d, 0xe4, 0xe2, 0x0a, 0xa7, 0x48, 0xe6, 0x44, 0x3d, 0xff, 0x4e, 0x12, 0xa7, 0x8d, 0x64, 0xc4, 0xf6, 0xea, 0xf0, 0xc0, 0xe7, 0x8c, 0xfa, 0xf6, 0x3e, 0x17, 0xbf, 0xb1, 0xbd, 0xcf, 0x75, 0xeb, 0xdb, 0xfb, 0xdc, 0x71, 0x7d, 0x7b, 0xd7, 0x54, 0x7e, 0xfa, 0xf6, 0x9a, 0x7a, 0x55, 0x75, 0x4c, 0xed, 0x9a, 0x84, 0xbb, 0xbc, 0x75, 0xa4, 0xd7, 0x37, 0xd3, 0x6c, 0xaa, 0xff, 0x04, 0x24, 0xc8, 0x07, 0x3b, 0x3c, 0xae, 0xfd, 0x6b, 0xc0, 0x7f, 0xa5, 0x10, 0xce, 0xce, 0x57, 0xf8, 0x9c, 0x7e, 0x76, 0xab, 0x2a, 0x6f, 0x68, 0xdb, 0x2f, 0xaa, 0xde, 0xd1, 0xcf, 0x6e, 0xc4, 0xa4, 0xa7, 0x50, 0x22, 0x95, 0x7f, 0xda, 0x58, 0x1a, 0xcc, 0x0b, 0x04, 0xf4, 0x9f, 0xb8, 0x70, 0xa1, 0xb6, 0x0a, 0xdb, 0x34, 0xe8, 0x42, 0x54, 0xd5, 0xab, 0x4a, 0x49, 0xfa, 0xf4, 0xce, 0x40, 0xa2, 0xf5, 0xca, 0xa3, 0x1a, 0xc4, 0x69, 0x13, 0xf0, 0x26, 0x91, 0x12, 0x90, 0x09, 0xcf, 0x73, 0x5d, 0x2b, 0x43, 0xdd, 0xfa, 0x5e, 0x84, 0x8e, 0xdf, 0x48, 0x67, 0x85, 0x4d, 0xfa, 0x5e, 0x84, 0x4b, 0xf4, 0xbd, 0x08, 0x77, 0xe8, 0xe9, 0xac, 0xf0, 0x36, 0x3d, 0x9d, 0x15, 0x1e, 0xd6, 0xd3, 0x59, 0xe1, 0x23, 0x9f, 0xf2, 0x3c, 0xbf, 0xc9, 0xcb, 0x58, 0xff, 0xe9, 0x3f, 0xe6, 0x65, 0xec, 0xdb, 0x57, 0x3f, 0x95, 0x97, 0xb1, 0x0a, 0x47, 0xf0, 0xc1, 0x1e, 0x9c, 0xd3, 0x9b, 0xfd, 0x8c, 0x2d, 0x1b, 0xef, 0x3b, 0xec, 0xdb, 0x9b, 0x74, 0xbe, 0xc3, 0xa8, 0xc6, 0xc7, 0xf4, 0xa9, 0xfd, 0xaf, 0xd7, 0x0a, 0x4f, 0x61, 0x1b, 0x34, 0x3f, 0x64, 0x01, 0x5d, 0x5b, 0x77, 0xd7, 0x6f, 0x18, 0x5f, 0xd7, 0x66, 0x63, 0xc6, 0x03, 0xd9, 0x32, 0xbd, 0x07, 0xb2, 0xfe, 0xc3, 0x37, 0x7a, 0x20, 0xeb, 0xdf, 0x7b, 0xb3, 0x07, 0xb2, 0xfe, 0xed, 0xe4, 0xd7, 0x2c, 0x1b, 0xfe, 0x76, 0x20, 0xd3, 0x53, 0x47, 0xc9, 0xee, 0x4f, 0xe7, 0x99, 0xac, 0x79, 0x9d, 0xf0, 0x4b, 0x36, 0x1f, 0x84, 0xb5, 0x07, 0x59, 0xf3, 0x2e, 0x8d, 0xb1, 0x5e, 0xc8, 0xef, 0x02, 0x4f, 0x27, 0xd9, 0x29, 0xbf, 0xfe, 0x98, 0x66, 0x0f, 0x82, 0xb9, 0x55, 0xdc, 0x87, 0xad, 0xcc, 0xe3, 0x0a, 0x87, 0xff, 0xa1, 0x7e, 0x97, 0xba, 0x5f, 0x0e, 0x6a, 0x63, 0x51, 0x30, 0x3d, 0x68, 0x3a, 0x7c, 0x6f, 0x0f, 0x9c, 0x7c, 0xe9, 0xbb, 0xc2, 0xc2, 0xc2, 0xbd, 0x31, 0x70, 0xa4, 0xed, 0xfb, 0x62, 0x79, 0xe2, 0x8f, 0x99, 0xbd, 0x12, 0xd9, 0xf0, 0x11, 0xe5, 0xd3, 0x9c, 0x32, 0x75, 0x65, 0xa6, 0x8e, 0x69, 0x54, 0xfe, 0xe5, 0x35, 0x5a, 0xf9, 0x30, 0x38, 0x04, 0xf7, 0xec, 0xcc, 0x6e, 0xb6, 0x21, 0x43, 0x35, 0xdd, 0x73, 0xdb, 0x9a, 0xa6, 0x63, 0x4d, 0x15, 0xe3, 0x6b, 0xfa, 0xef, 0x6d, 0x37, 0xd5, 0xd4, 0xf5, 0x29, 0x6a, 0xfa, 0x2c, 0xd9, 0x4c, 0x18, 0x5f, 0xd3, 0x77, 0x63, 0x37, 0xd5, 0xe4, 0x1a, 0x57, 0x53, 0x76, 0x74, 0xf4, 0x35, 0xd5, 0x61, 0x4d, 0xaf, 0x66, 0x6a, 0xb2, 0x4f, 0x0f, 0x4a, 0x27, 0xa8, 0xb6, 0xbf, 0x1f, 0xc8, 0x8e, 0x90, 0xe0, 0xfc, 0xfd, 0xf2, 0x83, 0x4c, 0x6d, 0xb7, 0x18, 0xab, 0xb5, 0x7d, 0x69, 0xee, 0xe8, 0x58, 0xf3, 0xf8, 0x76, 0xbd, 0x22, 0xdd, 0xd8, 0xae, 0x5f, 0x0e, 0xdc, 0xa6, 0x5d, 0x35, 0x82, 0xab, 0x4d, 0xb3, 0x36, 0x96, 0xa7, 0x9f, 0x35, 0xc9, 0xc9, 0x35, 0xad, 0xb9, 0xe5, 0xac, 0x65, 0xcb, 0x97, 0x65, 0xcb, 0x5f, 0x3f, 0x34, 0xae, 0xbc, 0x9d, 0xca, 0xff, 0x8f, 0x92, 0x3f, 0x32, 0xeb, 0x36, 0x51, 0x3e, 0xc3, 0x57, 0x5e, 0x3b, 0xbe, 0x27, 0xff, 0xe3, 0xd8, 0x8d, 0x3d, 0xf9, 0x70, 0xdf, 0x6d, 0xe6, 0x2a, 0xa6, 0xab, 0x89, 0xb8, 0xda, 0x91, 0xf1, 0x35, 0xbd, 0x7a, 0xf9, 0xa6, 0x9a, 0x7a, 0x6e, 0x53, 0x93, 0x5b, 0x57, 0xd3, 0x69, 0xb2, 0x00, 0x3a, 0xbe, 0xa6, 0x7f, 0x38, 0x75, 0x53, 0x4d, 0xfe, 0x5b, 0xd5, 0x84, 0xfb, 0x90, 0xb9, 0xff, 0x69, 0x7e, 0xfe, 0xe8, 0xd0, 0xf8, 0x7a, 0xb6, 0xee, 0xb8, 0xb1, 0x9e, 0xff, 0x3c, 0xfb, 0x07, 0xea, 0xf9, 0xe7, 0xf4, 0x5d, 0xc2, 0x68, 0xdb, 0xf8, 0x7a, 0xfe, 0x31, 0x7c, 0x53, 0x3d, 0xdf, 0xbd, 0x4d, 0xcf, 0xa2, 0xd9, 0x55, 0x48, 0x37, 0x19, 0xa3, 0xf2, 0xf8, 0x9a, 0xb6, 0x99, 0x6f, 0xaa, 0xa9, 0xf9, 0x0f, 0xb4, 0xa8, 0x2f, 0x7d, 0x8b, 0xf2, 0xc9, 0xd1, 0xf1, 0xf5, 0xbc, 0x76, 0xd3, 0x5e, 0xfd, 0x4f, 0xdb, 0x1f, 0xda, 0x61, 0x5a, 0x4d, 0x7f, 0x8f, 0x35, 0xdd, 0x30, 0xff, 0xaf, 0x8d, 0xdc, 0x58, 0xd3, 0xe9, 0xdb, 0xcd, 0x7f, 0x9e, 0xae, 0xa6, 0x6f, 0x63, 0x4d, 0x37, 0xcc, 0xff, 0xeb, 0x75, 0x37, 0xd5, 0x74, 0xbb, 0xf9, 0xb7, 0xe8, 0x6a, 0xfa, 0x66, 0xfd, 0xae, 0x6b, 0x37, 0xcc, 0xff, 0xeb, 0x47, 0x6e, 0xaa, 0xc9, 0x7f, 0x9b, 0x9a, 0xf2, 0x75, 0xe3, 0xdd, 0x87, 0x35, 0x0d, 0x8e, 0xaf, 0xe9, 0x8d, 0x25, 0x37, 0xd6, 0xf4, 0x8b, 0x33, 0xb7, 0xa9, 0xc9, 0x2a, 0x6e, 0xfa, 0xd2, 0x77, 0x77, 0xd7, 0xe2, 0xe3, 0x6b, 0xfa, 0x9e, 0xf3, 0xa6, 0x9a, 0x5e, 0xba, 0x4d, 0x4d, 0x36, 0x5d, 0x9b, 0x3a, 0xb1, 0xa6, 0xc2, 0x1b, 0x6a, 0xda, 0x73, 0x53, 0x4d, 0x4d, 0xe3, 0x6a, 0xca, 0xcd, 0xfa, 0x13, 0x1a, 0x5b, 0x70, 0xd3, 0x3d, 0xe5, 0xa1, 0xac, 0x05, 0x6a, 0xef, 0xc3, 0x74, 0xa6, 0x44, 0x3b, 0xa4, 0x28, 0xc2, 0xe0, 0x63, 0xa1, 0xf3, 0xd2, 0x92, 0x7b, 0xa3, 0x5c, 0xb7, 0xb1, 0xea, 0x0c, 0x18, 0xe5, 0x6f, 0x14, 0xf7, 0xc0, 0x2f, 0x82, 0x3d, 0xd2, 0x6a, 0xfc, 0x3d, 0xb9, 0xee, 0x2f, 0xa5, 0x97, 0x8a, 0xeb, 0xa5, 0x57, 0x1b, 0xd6, 0xc9, 0x7c, 0x12, 0x99, 0x5d, 0x60, 0x92, 0x16, 0x26, 0xd8, 0xaf, 0xc7, 0xba, 0x27, 0xd3, 0x7e, 0x3d, 0xb0, 0x8e, 0x3e, 0xba, 0x2f, 0x4d, 0x19, 0x34, 0x5b, 0x8f, 0x27, 0xa2, 0xbf, 0xf4, 0x91, 0xde, 0x75, 0x90, 0x2c, 0x0a, 0xae, 0xfb, 0x5b, 0x28, 0x0c, 0x7d, 0x64, 0x1a, 0xf6, 0x46, 0x85, 0x85, 0xc1, 0x75, 0xab, 0xc0, 0x51, 0xf5, 0x91, 0x69, 0xaf, 0xb7, 0x16, 0x5c, 0x1c, 0xfe, 0x0e, 0x78, 0x30, 0x7d, 0x3f, 0xa6, 0xfb, 0xc2, 0x6f, 0x42, 0x29, 0x7e, 0xca, 0xc7, 0xbd, 0xcd, 0x26, 0x7c, 0x1e, 0xad, 0x1b, 0x4a, 0xdb, 0x03, 0x20, 0xbf, 0x9b, 0xeb, 0xfe, 0x55, 0xef, 0x77, 0x73, 0x46, 0x10, 0x9a, 0x13, 0x90, 0x33, 0xc6, 0x29, 0x3f, 0xd3, 0x7b, 0xea, 0x74, 0x02, 0xa6, 0xcd, 0x8f, 0xe7, 0x8b, 0x5e, 0x7b, 0x8b, 0xa0, 0x19, 0x21, 0xea, 0x61, 0xd6, 0xfd, 0x1b, 0xe1, 0xdc, 0x67, 0xf4, 0xb9, 0x31, 0x6f, 0x53, 0xdc, 0x91, 0xc9, 0x3b, 0xbf, 0xfa, 0xda, 0xd8, 0xd6, 0xfa, 0xf5, 0xba, 0xb2, 0xec, 0xa5, 0x0d, 0xcb, 0x6e, 0xe0, 0xb2, 0xbf, 0xbb, 0xa1, 0xec, 0xc2, 0xb8, 0x2f, 0x93, 0xb7, 0x09, 0xcb, 0x26, 0x75, 0x65, 0xe7, 0xdf, 0x54, 0x0f, 0x52, 0xa1, 0x39, 0x75, 0x54, 0xcf, 0x80, 0x49, 0x5f, 0x8f, 0x83, 0x5a, 0xac, 0xc4, 0x03, 0x99, 0xdc, 0x0b, 0xb1, 0x26, 0xbb, 0xae, 0x74, 0xd3, 0x1f, 0xac, 0x55, 0x56, 0x40, 0xba, 0x12, 0xa2, 0x5a, 0x11, 0x93, 0x60, 0xeb, 0x4d, 0x47, 0x66, 0x04, 0x4d, 0x23, 0x14, 0xb3, 0x6e, 0x95, 0x2e, 0xe6, 0x60, 0x08, 0xf1, 0x19, 0x0e, 0x6d, 0x20, 0x3b, 0x39, 0xd2, 0x9e, 0x54, 0xc9, 0x8d, 0x1a, 0x8c, 0xd8, 0x0e, 0xd2, 0x60, 0xdc, 0xaa, 0xbd, 0x01, 0xaa, 0xaf, 0x5d, 0x7f, 0x3d, 0xfd, 0xbe, 0xe8, 0x62, 0xe3, 0x52, 0xdd, 0xf3, 0x36, 0xdd, 0xf3, 0xb1, 0xfa, 0xf5, 0x33, 0x7a, 0xe0, 0xd4, 0xa1, 0xcd, 0xb0, 0x2d, 0xfc, 0x1a, 0x7c, 0x6f, 0xc6, 0x1c, 0x18, 0xaa, 0xfa, 0x08, 0xbe, 0x3b, 0xa3, 0x16, 0x5e, 0xc2, 0xf0, 0x8e, 0xd0, 0x47, 0x70, 0x66, 0xfc, 0x8a, 0x63, 0x3b, 0x95, 0xff, 0x24, 0x4a, 0xc3, 0xae, 0x6c, 0x4d, 0x70, 0xa5, 0x7e, 0x7d, 0xe8, 0x23, 0x83, 0x63, 0x46, 0xd4, 0xe0, 0x09, 0xbf, 0x66, 0x70, 0x55, 0x7d, 0x64, 0x70, 0xcd, 0xa8, 0x35, 0x38, 0x42, 0x1f, 0x4d, 0x98, 0x3a, 0x23, 0x3a, 0xc1, 0x1e, 0x7e, 0x6d, 0xc2, 0xb4, 0xaa, 0x8f, 0x26, 0x4c, 0x9b, 0x51, 0x3b, 0x61, 0x6a, 0xba, 0x8c, 0xc1, 0x9f, 0x2d, 0x6f, 0x50, 0x78, 0x44, 0x32, 0x75, 0x1b, 0xd6, 0xea, 0xd2, 0x76, 0xeb, 0x9e, 0xcf, 0xe2, 0x7b, 0x70, 0x7c, 0x9e, 0xdb, 0x54, 0xf5, 0x51, 0x4e, 0x29, 0x5b, 0x13, 0x1e, 0xb8, 0x8f, 0xf5, 0x8c, 0xf0, 0x1b, 0x61, 0x6f, 0xe8, 0x0c, 0x58, 0xab, 0x7e, 0x05, 0xd6, 0xb7, 0x46, 0xe1, 0xe4, 0x9a, 0xc2, 0xf8, 0xa9, 0x87, 0x7a, 0xfe, 0xdb, 0x7f, 0xcb, 0xd9, 0x79, 0xf3, 0x8e, 0x18, 0x98, 0x91, 0xde, 0x11, 0xac, 0x63, 0xf4, 0x8b, 0xe7, 0xf1, 0x89, 0x3d, 0x33, 0xc5, 0x45, 0x78, 0xff, 0x42, 0x2d, 0xfc, 0xe8, 0x2d, 0xca, 0xce, 0x19, 0x57, 0xf6, 0x94, 0xba, 0x24, 0x65, 0x8b, 0x06, 0xc9, 0x67, 0xec, 0x67, 0x53, 0xdd, 0x81, 0xcc, 0xea, 0x88, 0xce, 0x08, 0x4a, 0xc3, 0xa4, 0x89, 0x69, 0xc8, 0x0b, 0xbf, 0x66, 0xda, 0xfe, 0xe2, 0x81, 0x39, 0x1f, 0x4d, 0x28, 0x25, 0x4c, 0xd6, 0xb5, 0x33, 0xfa, 0xf4, 0x56, 0xa8, 0xdf, 0x50, 0x7d, 0x16, 0xac, 0x64, 0x79, 0xd6, 0xd0, 0x1b, 0x3f, 0xff, 0xfc, 0x7e, 0x5e, 0x5d, 0x9d, 0x2f, 0x1e, 0x20, 0xdd, 0xbe, 0xeb, 0x2b, 0x67, 0x04, 0x8d, 0xaf, 0xd2, 0x6d, 0xa1, 0x16, 0xff, 0x37, 0x99, 0xd8, 0xa3, 0x18, 0xbb, 0x47, 0x8b, 0x7d, 0x2e, 0x1d, 0x3b, 0xc1, 0x82, 0xb1, 0xaf, 0xcf, 0x58, 0x6c, 0x7c, 0x75, 0x42, 0x2e, 0x7e, 0x1f, 0x9d, 0x90, 0x87, 0x71, 0x53, 0xc2, 0x8b, 0xa5, 0x77, 0x6e, 0xd1, 0xfa, 0xcd, 0x99, 0xd6, 0x17, 0x49, 0x7e, 0xef, 0xe4, 0xea, 0xdf, 0xc3, 0x2f, 0x62, 0x0e, 0x5c, 0x07, 0x41, 0xe9, 0xb4, 0x88, 0xe1, 0xe7, 0x33, 0x0c, 0xd1, 0x5e, 0x93, 0x4e, 0x27, 0x1a, 0x11, 0xae, 0xd5, 0xe3, 0xae, 0x3f, 0x3a, 0x7e, 0x25, 0xa4, 0x67, 0xc4, 0x84, 0xe7, 0xfb, 0x27, 0x41, 0x9c, 0x93, 0x5f, 0xfc, 0xcf, 0xb8, 0x7d, 0x8e, 0xa7, 0x0a, 0x5b, 0xb4, 0xf4, 0x06, 0x18, 0xc4, 0x30, 0x7c, 0x60, 0x77, 0xfa, 0xbd, 0x8a, 0x91, 0x6c, 0x1c, 0xb2, 0xe5, 0x07, 0xb2, 0x1a, 0x21, 0xeb, 0xec, 0x98, 0xb9, 0x61, 0x7e, 0x6c, 0x1b, 0x0c, 0xc4, 0xf3, 0x32, 0xa3, 0x18, 0x9f, 0x1e, 0x84, 0x01, 0x1c, 0xc3, 0x20, 0xc6, 0xaf, 0x89, 0x17, 0xc8, 0x6d, 0x30, 0x90, 0xf2, 0x65, 0x52, 0xbb, 0x30, 0x75, 0x0d, 0xa6, 0xda, 0x63, 0x6d, 0xb0, 0x29, 0x5e, 0xc2, 0x7b, 0xe9, 0x60, 0x4a, 0xb5, 0xb7, 0xc1, 0x9a, 0xae, 0x0c, 0xcc, 0x19, 0x8b, 0x90, 0x36, 0x37, 0x8c, 0x21, 0x2d, 0x62, 0x00, 0xf2, 0x31, 0xb3, 0x66, 0x7a, 0x2b, 0xd2, 0x99, 0xad, 0x58, 0xe3, 0xe6, 0xb8, 0x9f, 0xf5, 0x2a, 0x4f, 0xbd, 0x22, 0x61, 0x4d, 0x9b, 0xd9, 0xf6, 0xfd, 0x11, 0xca, 0x71, 0x6f, 0x10, 0x5c, 0xf4, 0xfb, 0x40, 0x0f, 0x4c, 0x82, 0x42, 0xaa, 0x2f, 0x53, 0x5b, 0x79, 0xac, 0x4d, 0x7a, 0x27, 0x6e, 0xab, 0x3a, 0x0b, 0x76, 0xda, 0x93, 0x63, 0x9b, 0xa8, 0x5e, 0xe9, 0x9d, 0xd8, 0x36, 0x29, 0x10, 0x27, 0xab, 0xcb, 0xf3, 0xb1, 0xf6, 0xcd, 0x52, 0x00, 0x6b, 0x4f, 0xc6, 0x9b, 0xc7, 0xf5, 0x23, 0x95, 0x58, 0x2a, 0x07, 0x75, 0x56, 0x43, 0xba, 0xec, 0x41, 0x8c, 0xed, 0x4e, 0x2c, 0xe0, 0x76, 0xff, 0x47, 0xca, 0x70, 0x43, 0x9b, 0x63, 0x58, 0x5b, 0x37, 0xb7, 0x35, 0x29, 0xb7, 0x49, 0x25, 0xb6, 0x80, 0x7a, 0x06, 0x73, 0x90, 0x5e, 0xf6, 0x6e, 0x7c, 0x5b, 0x59, 0x3c, 0x97, 0xdb, 0x9e, 0x5e, 0xbb, 0x85, 0xf8, 0xc6, 0x0d, 0xf1, 0xa9, 0x22, 0x4e, 0xac, 0xdf, 0x8c, 0xdf, 0x62, 0x53, 0x7a, 0xc4, 0x23, 0x6c, 0x0f, 0x42, 0xf6, 0xd1, 0x68, 0xe3, 0x99, 0x93, 0x6f, 0xc7, 0xb6, 0x3a, 0x17, 0x41, 0x2e, 0x8e, 0x7c, 0xbe, 0x9d, 0xf4, 0x65, 0xdb, 0xa0, 0x30, 0xdc, 0x06, 0x72, 0xec, 0x35, 0xf0, 0xc4, 0x7d, 0x48, 0x2f, 0x96, 0x6e, 0xef, 0x8d, 0xbb, 0xcc, 0xf7, 0x93, 0x7e, 0x42, 0x5c, 0xf6, 0x9a, 0xc9, 0x7e, 0x08, 0x9e, 0x68, 0xf8, 0x86, 0x7b, 0x5c, 0xe2, 0xcc, 0xa3, 0x77, 0x3c, 0x18, 0x04, 0x39, 0xd2, 0x46, 0x76, 0xf2, 0xac, 0x46, 0xd6, 0xee, 0x3b, 0x46, 0x74, 0x0f, 0x53, 0x9f, 0xac, 0x21, 0x1c, 0x37, 0x31, 0x0d, 0x1a, 0x45, 0x7a, 0xc9, 0x05, 0xb6, 0xae, 0x89, 0x6c, 0x67, 0x64, 0xc2, 0x50, 0x6f, 0xdc, 0x42, 0x2b, 0x04, 0x72, 0x13, 0x66, 0xc5, 0xc3, 0x5c, 0x4d, 0x67, 0x51, 0xad, 0x7a, 0xa9, 0x28, 0xa6, 0x5e, 0x29, 0x8a, 0xaa, 0xd7, 0x90, 0xe6, 0x6c, 0x57, 0x8f, 0x47, 0x97, 0xa9, 0x0d, 0xf4, 0xbe, 0xe2, 0x6b, 0xbe, 0x62, 0x75, 0x8c, 0x69, 0x65, 0xb2, 0xa5, 0xd7, 0xae, 0x1e, 0xf6, 0xb4, 0xab, 0x47, 0x49, 0x57, 0x0c, 0x4f, 0xb1, 0xcb, 0x64, 0xb1, 0x98, 0x2c, 0xb8, 0xc9, 0x8b, 0xb1, 0x3f, 0x2e, 0xa0, 0xf3, 0xb4, 0xd4, 0x85, 0x23, 0x27, 0xac, 0x26, 0xb0, 0x57, 0xc0, 0x5f, 0xdc, 0x59, 0x9e, 0xb6, 0x34, 0x26, 0x39, 0x58, 0x5b, 0xd1, 0x23, 0x38, 0x60, 0x5a, 0xab, 0xee, 0x24, 0x0b, 0x41, 0xd8, 0xae, 0x06, 0xe6, 0x48, 0x9e, 0x43, 0xf8, 0x3b, 0x87, 0xce, 0x67, 0x24, 0x99, 0x3d, 0xd8, 0xc6, 0x82, 0xb8, 0xc5, 0xbd, 0x18, 0x4a, 0x67, 0xd4, 0x41, 0xa9, 0x22, 0xfd, 0xdd, 0xbf, 0xfd, 0xd3, 0xbf, 0xe1, 0xaa, 0xcb, 0x0d, 0xbf, 0x96, 0xb3, 0x6f, 0x97, 0xd0, 0x2d, 0x9e, 0x4c, 0xfe, 0x8c, 0xbd, 0x01, 0x52, 0xf2, 0xf0, 0xde, 0x41, 0x6f, 0xfb, 0xf3, 0x26, 0xb9, 0x1d, 0x4a, 0xee, 0x6d, 0x85, 0xa9, 0x40, 0xb2, 0x09, 0xf9, 0xf0, 0x3a, 0x80, 0x0c, 0x50, 0xe0, 0xf6, 0x18, 0xa4, 0x58, 0xd2, 0x60, 0x4a, 0x18, 0xdd, 0x45, 0xd2, 0x19, 0x87, 0x07, 0x4a, 0x64, 0x0f, 0xb4, 0x26, 0xcc, 0x72, 0x18, 0xd7, 0xdc, 0x14, 0xc5, 0x6c, 0x0f, 0xdf, 0xb7, 0x88, 0xca, 0xc4, 0xfa, 0x68, 0x4f, 0xcb, 0x45, 0x50, 0x9e, 0x90, 0xb7, 0xf7, 0x26, 0x0a, 0xe5, 0xb0, 0x03, 0xe1, 0xdc, 0x5c, 0xdc, 0x67, 0x46, 0xb3, 0xc2, 0x5e, 0x62, 0x1d, 0x8d, 0xc2, 0x6e, 0x75, 0xfc, 0xd2, 0x8c, 0x30, 0x94, 0xc7, 0x9e, 0x8d, 0x53, 0x8d, 0xa7, 0xe5, 0x40, 0x6f, 0xce, 0x80, 0x4d, 0xae, 0xae, 0xba, 0x00, 0x1e, 0x86, 0x0f, 0x5d, 0xe4, 0x5d, 0xcd, 0x61, 0x44, 0x5c, 0xa4, 0x13, 0x3c, 0xe0, 0xb2, 0x87, 0x1d, 0x8b, 0xa4, 0x08, 0xcf, 0x47, 0x9d, 0xdc, 0xa6, 0x8e, 0x6a, 0x96, 0x19, 0x1d, 0x69, 0xbe, 0x00, 0xee, 0xf6, 0x52, 0xf6, 0x87, 0xe3, 0xa3, 0x5e, 0xc4, 0x36, 0x7a, 0x27, 0xcb, 0x61, 0xaf, 0x0b, 0x31, 0x10, 0x0a, 0xbd, 0x83, 0xe3, 0x1a, 0xc0, 0x16, 0x46, 0xa5, 0xe8, 0x9f, 0xb5, 0xc2, 0x04, 0x68, 0xc0, 0xef, 0x89, 0xf0, 0x08, 0xfb, 0x64, 0x62, 0x8f, 0x8a, 0x63, 0xf3, 0x79, 0x3c, 0x02, 0x38, 0x3e, 0xf3, 0xa5, 0x37, 0x54, 0xf5, 0xe7, 0x2a, 0x14, 0x08, 0x1d, 0x68, 0x9c, 0x07, 0x89, 0x47, 0xe6, 0x94, 0xef, 0x9c, 0x5c, 0x0c, 0x64, 0x57, 0x31, 0x7f, 0xf0, 0x75, 0x28, 0x21, 0x9c, 0x81, 0xed, 0x4a, 0x62, 0xfd, 0x12, 0x5b, 0xd8, 0xd7, 0xe5, 0xb7, 0x8a, 0xfc, 0x9c, 0x03, 0x47, 0x2a, 0x93, 0x47, 0xf6, 0xe6, 0xf0, 0x18, 0x83, 0x3d, 0xc8, 0xfc, 0x84, 0x69, 0x9f, 0xe9, 0x81, 0x1c, 0x30, 0x7e, 0x9e, 0x76, 0xb8, 0xe9, 0xbe, 0x3a, 0xb0, 0x84, 0x7e, 0x05, 0xb9, 0x78, 0x0e, 0xe4, 0xb1, 0xa6, 0xf4, 0xeb, 0xda, 0x0c, 0x7a, 0xb0, 0x5f, 0x56, 0x9e, 0x25, 0x23, 0xce, 0x92, 0x55, 0xcc, 0x92, 0x92, 0x77, 0xf3, 0xfb, 0xa8, 0x6d, 0x9a, 0xed, 0x65, 0xab, 0xf0, 0xa4, 0xea, 0xcd, 0xc5, 0x15, 0x39, 0xca, 0x5c, 0x90, 0x02, 0xf2, 0x26, 0x11, 0x5d, 0x76, 0x7d, 0x35, 0x95, 0xf7, 0x92, 0x65, 0x10, 0x9b, 0x87, 0xac, 0x3f, 0x7c, 0x45, 0xd8, 0x44, 0x86, 0x0a, 0x47, 0x54, 0xf3, 0x30, 0xe3, 0x9f, 0x7d, 0x5e, 0x8a, 0xca, 0x73, 0xb2, 0xde, 0x57, 0x42, 0xe7, 0xa4, 0x25, 0xf6, 0x58, 0xe6, 0xd4, 0xb6, 0xa5, 0x0c, 0xcb, 0xb7, 0x81, 0x4f, 0x97, 0x63, 0x9f, 0xe0, 0x1a, 0x50, 0x3d, 0x01, 0xbf, 0xa3, 0xd6, 0x0d, 0x5c, 0x4f, 0x9c, 0xf5, 0xd7, 0x95, 0x6e, 0x28, 0x05, 0x69, 0xd1, 0x05, 0x15, 0x6c, 0xb3, 0xcf, 0x40, 0x65, 0x96, 0x23, 0xc3, 0xde, 0xb1, 0x26, 0x51, 0xcb, 0x1f, 0x07, 0x57, 0xae, 0x69, 0x25, 0x80, 0xc1, 0x8f, 0xb3, 0x91, 0x79, 0xab, 0xf0, 0xaa, 0x31, 0xaf, 0xcf, 0x19, 0x2c, 0x9b, 0xb0, 0x31, 0x8c, 0xeb, 0xca, 0x28, 0x7f, 0x26, 0x7e, 0xd1, 0xf1, 0x82, 0x73, 0xb5, 0x2e, 0xd7, 0x3e, 0xdc, 0x55, 0x55, 0xbe, 0x1c, 0x61, 0x25, 0xa4, 0xfe, 0xaf, 0x84, 0x0d, 0x25, 0x57, 0xd4, 0x59, 0x5b, 0x82, 0xc0, 0xc0, 0x91, 0x3b, 0x24, 0x74, 0x5f, 0xcd, 0x01, 0x43, 0x85, 0x21, 0xfa, 0x1e, 0xae, 0xcc, 0x31, 0xcd, 0xb3, 0xdd, 0x15, 0x77, 0x8c, 0xd7, 0x92, 0x1b, 0x61, 0x84, 0x11, 0x6c, 0x09, 0xbb, 0x62, 0x83, 0x45, 0x36, 0x00, 0x9b, 0xfd, 0x91, 0x79, 0x21, 0x2e, 0x65, 0x8c, 0x85, 0xe2, 0xe7, 0xaa, 0xcf, 0x20, 0xac, 0xd8, 0x0a, 0x72, 0x5c, 0x56, 0xca, 0xe5, 0x39, 0x8a, 0x4d, 0x6a, 0xa5, 0x7e, 0xc8, 0x0d, 0xf3, 0x42, 0x83, 0xd9, 0x3c, 0xe7, 0xa0, 0xf2, 0xef, 0xfe, 0x8d, 0x31, 0x6c, 0xc3, 0x2c, 0x53, 0x38, 0x41, 0xbe, 0xc4, 0xc5, 0x09, 0xfb, 0x38, 0x59, 0x49, 0x29, 0x58, 0x02, 0x65, 0x13, 0x65, 0xc9, 0x44, 0xdc, 0x36, 0xbf, 0x37, 0x08, 0x1e, 0x39, 0x98, 0xed, 0x23, 0xf6, 0x6f, 0x85, 0x23, 0x58, 0x3e, 0x71, 0x53, 0x55, 0x6c, 0x05, 0xf6, 0x2f, 0x2f, 0x7e, 0x11, 0xdf, 0x22, 0xc9, 0x41, 0xd9, 0x96, 0x30, 0xce, 0xab, 0x89, 0x5f, 0x91, 0xd7, 0x3b, 0x9e, 0xe3, 0x95, 0x69, 0x8a, 0xbd, 0x01, 0x72, 0xa2, 0x84, 0x29, 0xb0, 0xa5, 0x6c, 0xe3, 0x8c, 0xdf, 0x82, 0xa7, 0xe0, 0x29, 0xef, 0x09, 0xc4, 0x33, 0x98, 0xa2, 0xc2, 0x11, 0xd5, 0xe2, 0x19, 0x2b, 0x29, 0x27, 0xbb, 0x76, 0xfa, 0x91, 0x5a, 0xaa, 0xfa, 0x8c, 0x69, 0xbb, 0x45, 0xe9, 0x39, 0x77, 0xd6, 0xcb, 0x1d, 0xd2, 0x70, 0x2a, 0x7b, 0xfe, 0x07, 0xd8, 0xaf, 0x7b, 0x19, 0xd6, 0x17, 0xd0, 0xd6, 0xb7, 0xfa, 0x95, 0x4d, 0x7f, 0xd6, 0x83, 0xbb, 0xc6, 0xfc, 0x70, 0x0f, 0x94, 0x03, 0xfb, 0x22, 0xe1, 0xb1, 0x23, 0x0b, 0x81, 0x8f, 0xb1, 0x85, 0xc0, 0x95, 0xf7, 0x07, 0x21, 0xf7, 0xfe, 0x18, 0xf6, 0xcd, 0x2a, 0x56, 0x02, 0xd9, 0xef, 0x76, 0x46, 0xc9, 0x7e, 0x77, 0xca, 0x9a, 0x3d, 0x1d, 0x32, 0xf6, 0xdf, 0x73, 0xec, 0x92, 0x2e, 0x0e, 0x12, 0xb9, 0x8e, 0x17, 0xc8, 0xf2, 0xcd, 0xf4, 0x2a, 0x30, 0x3a, 0x57, 0x2b, 0x64, 0x07, 0xde, 0x9a, 0xe5, 0x4b, 0xa5, 0x7d, 0x2a, 0xd5, 0x65, 0x7c, 0xf8, 0xdc, 0x68, 0x1b, 0x9a, 0xed, 0x66, 0x91, 0xff, 0x71, 0x70, 0x76, 0xc0, 0x7c, 0xcd, 0x4b, 0xd2, 0xa1, 0x94, 0xa5, 0xcb, 0x10, 0x0d, 0x65, 0xdf, 0xe3, 0x12, 0xde, 0x92, 0x76, 0x85, 0xce, 0x0a, 0x08, 0x33, 0x5a, 0x81, 0xad, 0x26, 0x09, 0xaa, 0xcd, 0x76, 0x5c, 0x5d, 0x71, 0xc5, 0x6c, 0xa4, 0x3e, 0xe1, 0x49, 0xd2, 0xac, 0x34, 0x3d, 0x4c, 0x3b, 0xd2, 0xcc, 0x50, 0x98, 0xac, 0xd5, 0x34, 0xcf, 0xb9, 0xa6, 0xae, 0xaa, 0x7f, 0xd1, 0x01, 0xbc, 0xa3, 0x31, 0x4c, 0xd6, 0xe0, 0xdd, 0xf8, 0xcb, 0x39, 0xcc, 0xde, 0x09, 0x6c, 0x09, 0xfe, 0x33, 0x72, 0x35, 0xd7, 0xdb, 0x66, 0x0f, 0xb2, 0x4d, 0x9b, 0xde, 0xb8, 0xd5, 0x9e, 0x04, 0x23, 0xc7, 0x95, 0x2a, 0x7e, 0xd7, 0x37, 0xf0, 0x0d, 0x86, 0x84, 0x13, 0x4f, 0xc7, 0x66, 0xb2, 0x3c, 0x4e, 0x16, 0xbb, 0xca, 0xdd, 0x48, 0xdf, 0xed, 0xad, 0x70, 0x43, 0x6e, 0xf4, 0x3d, 0xb6, 0x30, 0xad, 0x0a, 0x4c, 0x4a, 0x3d, 0x25, 0x5b, 0x15, 0x9b, 0xbd, 0x2e, 0x65, 0xc9, 0x8e, 0x03, 0xf9, 0xff, 0xe9, 0x21, 0x3b, 0xbf, 0xb9, 0xc5, 0x51, 0x58, 0x2a, 0xec, 0x41, 0xd3, 0x7a, 0xaf, 0xf4, 0xbb, 0x71, 0xff, 0x44, 0xf7, 0x44, 0x7f, 0x28, 0x1b, 0x7a, 0x9f, 0xa5, 0x93, 0xdd, 0x09, 0x3d, 0xf2, 0xb1, 0x75, 0x72, 0x95, 0xbd, 0x06, 0xe9, 0x25, 0xb2, 0x9e, 0xb9, 0xd5, 0x01, 0xa9, 0xb1, 0xc1, 0xbe, 0xc4, 0x39, 0x3c, 0x8b, 0xd5, 0xc1, 0xbe, 0xb8, 0xf5, 0xc0, 0x9b, 0x20, 0xa7, 0xad, 0x67, 0xca, 0x55, 0x94, 0x67, 0x6c, 0x8d, 0x8f, 0xc6, 0xb8, 0x27, 0xbd, 0x36, 0xd8, 0xd7, 0x52, 0x09, 0x34, 0xf1, 0x68, 0x92, 0x5f, 0xf7, 0x12, 0xc4, 0x51, 0x4f, 0x08, 0x5b, 0xad, 0xf6, 0x36, 0x49, 0xe6, 0x3d, 0x62, 0x7e, 0x7e, 0xbf, 0xf0, 0xc0, 0xf4, 0xfc, 0x7e, 0x8c, 0x13, 0xb8, 0xfe, 0xcb, 0x72, 0xfa, 0x69, 0x88, 0x46, 0x20, 0x13, 0x7a, 0x5d, 0x31, 0xc3, 0x36, 0x56, 0x96, 0x2b, 0xd0, 0xac, 0xb8, 0xea, 0xe8, 0xc9, 0xeb, 0xf5, 0x9a, 0x85, 0x05, 0x17, 0xdb, 0xeb, 0x99, 0x54, 0x14, 0x54, 0xe7, 0xbb, 0x27, 0x17, 0xd5, 0xab, 0x2e, 0x3a, 0x4f, 0x26, 0xcd, 0x2f, 0x5a, 0x04, 0x66, 0x35, 0x12, 0x9f, 0x22, 0xfc, 0xe7, 0x15, 0xb5, 0x82, 0x8c, 0xa1, 0xdc, 0x22, 0xa4, 0xed, 0x06, 0x3e, 0x54, 0x23, 0xc2, 0x37, 0x18, 0x9e, 0x9b, 0x25, 0x6c, 0xbd, 0xa3, 0x00, 0x5b, 0xd5, 0xae, 0xba, 0xc8, 0x0e, 0x8c, 0x98, 0xf3, 0x49, 0x85, 0x58, 0x5f, 0x25, 0x7b, 0xe8, 0xa9, 0x94, 0xc3, 0x2e, 0x17, 0x58, 0x9d, 0x73, 0xc3, 0x7f, 0x2f, 0x47, 0xec, 0xd5, 0xa5, 0x3d, 0x90, 0x59, 0x89, 0xd7, 0xaf, 0xc8, 0xc5, 0xea, 0x68, 0x63, 0xaf, 0x7e, 0xd5, 0x5c, 0x6f, 0x72, 0x02, 0x96, 0xad, 0x4f, 0x80, 0x79, 0x2f, 0xe5, 0x7f, 0xf1, 0x80, 0x33, 0xbb, 0x7b, 0xaf, 0xb8, 0xc1, 0x1e, 0x76, 0xdd, 0x0f, 0x36, 0xd2, 0xf9, 0x97, 0x23, 0xcf, 0x80, 0xbd, 0x58, 0x75, 0x29, 0x66, 0x2b, 0x40, 0x4f, 0x5c, 0x6a, 0xfc, 0xba, 0xad, 0x20, 0x7e, 0xb9, 0x28, 0xa4, 0xba, 0x7c, 0x13, 0x1b, 0x83, 0x33, 0x83, 0x6a, 0xd8, 0x17, 0x44, 0x58, 0x5c, 0xd6, 0xd8, 0x2f, 0x9b, 0x47, 0xfa, 0x47, 0x7a, 0xb3, 0xbb, 0xe2, 0x7a, 0x13, 0xbe, 0xc1, 0x87, 0x6f, 0x68, 0xf4, 0xb5, 0xab, 0xe1, 0x9f, 0xec, 0xff, 0xc9, 0xfe, 0xf0, 0xa0, 0x19, 0xd2, 0xad, 0x9b, 0xfd, 0xb1, 0x3a, 0x7a, 0x53, 0x0b, 0x75, 0x65, 0x1d, 0x10, 0xcf, 0xd3, 0xa8, 0xa7, 0x62, 0xd5, 0x87, 0x94, 0xe7, 0x36, 0x05, 0xcc, 0xa6, 0x9b, 0xdb, 0x6a, 0x6f, 0x57, 0x7d, 0x48, 0xc7, 0xb7, 0xab, 0x65, 0xf3, 0x56, 0x53, 0x3b, 0xe5, 0xb0, 0x92, 0x6f, 0xdf, 0xff, 0xf6, 0x70, 0xc2, 0xea, 0x30, 0x5b, 0x0b, 0xb0, 0xc5, 0x57, 0xe5, 0x70, 0xb8, 0xa0, 0xb1, 0x77, 0xf0, 0x0d, 0xb5, 0xac, 0xfd, 0x43, 0x05, 0x26, 0x5e, 0x99, 0x89, 0x7b, 0x40, 0x2d, 0x5d, 0xca, 0xbd, 0x92, 0xab, 0xb8, 0x5f, 0x16, 0xec, 0xd7, 0xca, 0x74, 0xbf, 0x64, 0x63, 0x23, 0x59, 0x25, 0x8a, 0x7d, 0x2e, 0x09, 0xf7, 0xa9, 0x4d, 0xf8, 0xed, 0x54, 0x9b, 0xb1, 0xfe, 0xfa, 0x70, 0xf5, 0x12, 0x98, 0x7d, 0x0e, 0x9a, 0x76, 0xae, 0x20, 0x2b, 0x77, 0xb8, 0x77, 0x69, 0x54, 0x6c, 0x8c, 0xdf, 0xa9, 0x5f, 0x45, 0xfc, 0xce, 0x01, 0x8a, 0xb5, 0xb1, 0x0f, 0xdf, 0x69, 0x89, 0x5f, 0xc5, 0xf2, 0x2e, 0xfb, 0x1c, 0x39, 0x26, 0x4b, 0x9e, 0x1a, 0x5c, 0x23, 0x07, 0x06, 0xab, 0x9f, 0x94, 0x2a, 0xa0, 0x71, 0xc5, 0x8e, 0x37, 0xd4, 0x58, 0xd2, 0x54, 0x7d, 0xc9, 0x65, 0x50, 0x76, 0x96, 0x4d, 0x30, 0x55, 0x81, 0x8c, 0x35, 0xfb, 0xc2, 0x61, 0x77, 0x80, 0xea, 0x50, 0x0a, 0xbc, 0x46, 0xb2, 0x06, 0xd1, 0xbc, 0x0e, 0xcb, 0x46, 0xb4, 0x92, 0xe1, 0x27, 0xa5, 0x52, 0x70, 0x4d, 0x8d, 0x9f, 0xf6, 0x49, 0xa6, 0x20, 0xe2, 0x45, 0xe0, 0x27, 0x7f, 0x54, 0x15, 0xe5, 0xc5, 0x6a, 0xa0, 0x21, 0x52, 0x5a, 0xac, 0x86, 0xdf, 0xdb, 0xfb, 0x48, 0x78, 0xaa, 0x07, 0x31, 0x86, 0x67, 0x03, 0x13, 0x4c, 0x35, 0x90, 0x3f, 0xb3, 0x46, 0x6d, 0xdc, 0x5e, 0xd5, 0x32, 0x15, 0x73, 0x4a, 0xd2, 0x0a, 0xd2, 0xd5, 0x5c, 0xbf, 0xc2, 0x6e, 0x68, 0x93, 0x1a, 0x97, 0x9f, 0x5a, 0xfe, 0xd3, 0x76, 0xb5, 0xb1, 0x0c, 0x17, 0x2e, 0x4c, 0x8f, 0xae, 0x3a, 0x56, 0xdd, 0x50, 0x73, 0xac, 0xca, 0xef, 0x01, 0x2b, 0x42, 0x72, 0x93, 0x2f, 0xf4, 0xd6, 0x0f, 0x93, 0x52, 0xc0, 0x20, 0x63, 0x7b, 0x62, 0x88, 0xe1, 0x9b, 0xd6, 0x54, 0x14, 0xab, 0x9e, 0x86, 0xea, 0xa2, 0x9e, 0x5e, 0x09, 0x3e, 0xa7, 0x0e, 0xb3, 0xb7, 0xa5, 0xbd, 0x1c, 0xca, 0x51, 0xf7, 0x4b, 0xbd, 0x54, 0x2f, 0xf6, 0xf2, 0x20, 0xc7, 0x18, 0xd5, 0x11, 0xc4, 0xda, 0x26, 0x60, 0xf8, 0x30, 0x79, 0xbf, 0xd2, 0xe8, 0xa1, 0xdf, 0x56, 0x7f, 0xac, 0x0e, 0x8b, 0x15, 0x7b, 0x7d, 0x25, 0xa6, 0x2d, 0xc0, 0x5a, 0xcb, 0x6c, 0xf4, 0xee, 0xde, 0x3c, 0x6a, 0xef, 0xf2, 0x25, 0x57, 0x37, 0x86, 0xca, 0xaa, 0x36, 0x0e, 0x1f, 0xd9, 0xe7, 0x33, 0x46, 0x82, 0x7e, 0xe3, 0x0f, 0xff, 0xf5, 0x91, 0x50, 0x25, 0xf6, 0x08, 0xdb, 0xe0, 0x52, 0x72, 0x0f, 0x05, 0xad, 0xb3, 0x11, 0xae, 0x58, 0xe6, 0xcd, 0x2e, 0x35, 0x1c, 0x8e, 0x6c, 0x9f, 0xb3, 0xe0, 0x3c, 0xae, 0x33, 0x17, 0x9e, 0xba, 0x13, 0xbd, 0x12, 0xae, 0x89, 0x32, 0xb6, 0x1e, 0x3a, 0xd0, 0xb0, 0x0e, 0xd7, 0x60, 0xd4, 0x2b, 0xcd, 0x82, 0x70, 0x22, 0x6d, 0x4f, 0x94, 0xe6, 0x3a, 0x69, 0x6c, 0x6c, 0x57, 0xa3, 0x54, 0xc3, 0x93, 0x53, 0xb1, 0x6d, 0x88, 0x35, 0x45, 0x5b, 0x55, 0x75, 0xe0, 0x0d, 0xb5, 0x42, 0xc0, 0x7e, 0x2a, 0x59, 0x16, 0x44, 0x1c, 0xb6, 0x74, 0xa4, 0x5d, 0xf5, 0x60, 0x1d, 0xca, 0x12, 0xf3, 0xc6, 0x76, 0xb5, 0x14, 0x63, 0xea, 0xde, 0xfd, 0x58, 0x55, 0x8e, 0x04, 0xe5, 0x3a, 0xad, 0xed, 0xf5, 0xb4, 0x1a, 0x1a, 0xaa, 0x67, 0x56, 0xab, 0x71, 0x4c, 0x8d, 0xbe, 0xfb, 0xde, 0x23, 0x41, 0x1c, 0x77, 0x8f, 0x29, 0x0c, 0x77, 0xe4, 0x15, 0xab, 0x4d, 0xd1, 0xe5, 0x87, 0x43, 0xf8, 0xdb, 0x4c, 0xbf, 0x87, 0xab, 0x0e, 0x07, 0x71, 0x44, 0x73, 0x97, 0x42, 0xb9, 0x84, 0x23, 0xba, 0x37, 0x39, 0xad, 0xd4, 0x50, 0x66, 0xc0, 0x7a, 0x3d, 0xa6, 0x2a, 0xf5, 0x37, 0x79, 0x64, 0x83, 0x61, 0xf9, 0xc6, 0x10, 0xfe, 0xde, 0x47, 0xbf, 0x1b, 0x83, 0x53, 0x29, 0xe6, 0xd9, 0xae, 0xd1, 0xf5, 0xd5, 0x15, 0x86, 0xcd, 0xc1, 0x0f, 0xc2, 0xd4, 0x52, 0x6a, 0xa3, 0x0c, 0x38, 0x5f, 0xbd, 0xa7, 0xfa, 0xb1, 0x5d, 0x8f, 0x86, 0xdb, 0xd5, 0x0a, 0xfc, 0x94, 0xbe, 0x48, 0x5e, 0xc4, 0x3c, 0x32, 0xad, 0xf4, 0x7e, 0x1c, 0x89, 0x56, 0x5a, 0xbf, 0x33, 0xab, 0xd4, 0x24, 0xce, 0x77, 0x47, 0xd9, 0xe4, 0x80, 0xa4, 0x80, 0x41, 0xce, 0xa7, 0x71, 0xed, 0x6b, 0x0e, 0x53, 0xbf, 0xe3, 0xc6, 0xc3, 0xed, 0xea, 0xa3, 0x7e, 0x2c, 0x89, 0x58, 0x7c, 0xd9, 0xec, 0x5f, 0x6f, 0x82, 0x9f, 0xfd, 0xf8, 0x67, 0x1f, 0xab, 0xbe, 0xa5, 0xa0, 0xcd, 0x55, 0x33, 0xad, 0x76, 0xf6, 0x2b, 0x6d, 0x1c, 0xc1, 0x11, 0xc3, 0x51, 0x43, 0xbc, 0x97, 0x46, 0xa4, 0x31, 0x48, 0x38, 0x3d, 0xce, 0x6c, 0x0e, 0xd8, 0xd4, 0x61, 0xde, 0xdf, 0x7b, 0x39, 0x74, 0x8f, 0xba, 0x1f, 0xa9, 0x81, 0x83, 0xfc, 0x6c, 0xe0, 0x39, 0x27, 0xdf, 0x5b, 0x87, 0x39, 0x9c, 0xa3, 0x1e, 0x2d, 0x6a, 0x57, 0x9b, 0xd5, 0x63, 0x1c, 0xb2, 0xa8, 0x27, 0x30, 0xb4, 0x40, 0x3d, 0xcd, 0xa1, 0x29, 0xea, 0x19, 0xb6, 0xbf, 0x75, 0x8e, 0x43, 0xf7, 0xaa, 0x17, 0x31, 0x2d, 0xa6, 0x5e, 0xc6, 0xfe, 0x5c, 0x15, 0x6b, 0xe5, 0x79, 0x83, 0x7e, 0xad, 0xe0, 0x69, 0x8a, 0xad, 0x8e, 0x1b, 0xb1, 0x84, 0x47, 0x58, 0xf9, 0xc8, 0x39, 0x2f, 0x7f, 0x8e, 0xcb, 0x4e, 0x52, 0x87, 0x31, 0x76, 0x2f, 0x59, 0x33, 0xc3, 0xf9, 0x2d, 0x95, 0x63, 0x55, 0xd9, 0x72, 0x4b, 0x1b, 0x57, 0xfa, 0x71, 0xf5, 0x0c, 0x61, 0x7c, 0xc2, 0x7c, 0xb8, 0x6a, 0xe7, 0xec, 0x16, 0x50, 0x9d, 0x34, 0x4a, 0x1f, 0xb4, 0xab, 0x71, 0xcc, 0x4d, 0x56, 0x37, 0xa2, 0x83, 0xf8, 0xbb, 0x00, 0xc6, 0x8e, 0x52, 0xdf, 0xcb, 0x8a, 0xd5, 0x64, 0xa9, 0x29, 0x50, 0xac, 0x76, 0xc8, 0x75, 0x08, 0x47, 0x62, 0x9e, 0x10, 0xf1, 0x09, 0x62, 0x38, 0xca, 0xf8, 0xc6, 0x35, 0xa9, 0xdc, 0xf1, 0x10, 0x53, 0x58, 0xa5, 0xca, 0x59, 0xb8, 0x0c, 0x2a, 0x4c, 0x34, 0xbf, 0x38, 0xcf, 0x11, 0x9f, 0xe1, 0x99, 0x3b, 0xcf, 0xb7, 0x8e, 0x84, 0x4e, 0x05, 0x03, 0xc1, 0x2d, 0xe7, 0xc0, 0x7c, 0xaa, 0x5e, 0x5a, 0x45, 0x3b, 0xe3, 0x3b, 0xfb, 0x30, 0xb5, 0xc6, 0x67, 0x10, 0x69, 0x65, 0xc1, 0x8d, 0xe7, 0xc0, 0x72, 0x2a, 0x26, 0xf5, 0x51, 0xda, 0xb7, 0xf6, 0x78, 0x8a, 0xd5, 0xf9, 0xd2, 0x2a, 0xf5, 0xe7, 0x9f, 0xfc, 0x0b, 0xd4, 0x18, 0x83, 0x25, 0x01, 0xdc, 0x4c, 0x29, 0x7c, 0x6b, 0x65, 0xc2, 0xc4, 0xcf, 0x5f, 0x73, 0xdc, 0x61, 0xea, 0x53, 0x55, 0x35, 0x85, 0x67, 0x70, 0x03, 0x9e, 0xcb, 0x92, 0xce, 0x92, 0x59, 0x5c, 0x4d, 0x15, 0x55, 0xab, 0xdd, 0xfc, 0x9c, 0x50, 0x97, 0x16, 0x45, 0xd4, 0x1e, 0x7e, 0x5e, 0xa8, 0xf6, 0xe2, 0xa9, 0xb2, 0x92, 0x9f, 0x5b, 0xd4, 0xfe, 0xa2, 0x39, 0xea, 0x1a, 0x7e, 0x6e, 0x53, 0x07, 0x8a, 0x6a, 0xd4, 0x0d, 0xfc, 0x9c, 0x54, 0x37, 0xe1, 0xb8, 0x7b, 0xd4, 0x2d, 0x1c, 0xea, 0x50, 0x5f, 0xc6, 0x50, 0x44, 0x7d, 0xa5, 0x68, 0xb6, 0xba, 0xb5, 0xa8, 0x4e, 0x7d, 0x9d, 0x63, 0x17, 0xab, 0x83, 0x78, 0xfa, 0x18, 0x6c, 0x26, 0x75, 0x3b, 0xf9, 0x90, 0xd4, 0x46, 0xf6, 0xbb, 0x08, 0x71, 0x85, 0x7d, 0x50, 0x90, 0x1e, 0xe5, 0x96, 0x92, 0x97, 0xc2, 0x76, 0xb5, 0x52, 0x4b, 0x1f, 0x9d, 0x11, 0x83, 0xa5, 0x8e, 0x37, 0xd4, 0xf9, 0xd3, 0x11, 0x7a, 0x80, 0x11, 0xbf, 0x3d, 0x60, 0x7e, 0x10, 0xa1, 0x3e, 0x58, 0x69, 0x2f, 0xbb, 0x5d, 0x30, 0x3f, 0xbf, 0x08, 0xca, 0xe8, 0x5c, 0xb6, 0x15, 0xc1, 0x43, 0xd1, 0xde, 0x40, 0xb0, 0x79, 0x6d, 0xe9, 0x62, 0x30, 0xbf, 0x48, 0xe1, 0xf2, 0x68, 0xef, 0x86, 0xe1, 0x47, 0x56, 0x63, 0x6f, 0xcb, 0xd9, 0x72, 0xdb, 0x70, 0xa6, 0xbf, 0x12, 0xae, 0xb2, 0xe1, 0xe6, 0xbe, 0xa2, 0xb0, 0x06, 0x79, 0x24, 0x5c, 0x7f, 0xf5, 0x1a, 0xcc, 0xc9, 0x51, 0x47, 0x70, 0x2d, 0x1e, 0xd6, 0xe0, 0xcf, 0x51, 0x01, 0xe9, 0x8a, 0xaa, 0x78, 0xfd, 0x49, 0x70, 0xb7, 0x7a, 0x82, 0x57, 0xdc, 0x69, 0x0e, 0x7d, 0x56, 0x3d, 0x93, 0xdd, 0xcd, 0x2e, 0xad, 0x27, 0x86, 0x65, 0xf6, 0xc5, 0xe0, 0x77, 0x04, 0xc9, 0xb3, 0x88, 0xa7, 0x1a, 0x61, 0xed, 0x3b, 0xe4, 0xab, 0x12, 0xa1, 0x26, 0xd2, 0xab, 0x4c, 0x83, 0x9a, 0x28, 0xbd, 0x1b, 0x28, 0x6d, 0x94, 0x3c, 0xf0, 0xf9, 0x89, 0x9b, 0xbc, 0xa6, 0x10, 0xc8, 0x5e, 0x8a, 0xff, 0x2e, 0xc2, 0xa4, 0xfe, 0xdc, 0x46, 0xbd, 0xea, 0xcd, 0xa3, 0x3e, 0x2d, 0xf7, 0x61, 0x7f, 0xf2, 0xa9, 0x37, 0x7d, 0xd8, 0x33, 0xcb, 0x94, 0x22, 0x78, 0x38, 0xba, 0x82, 0x6a, 0x88, 0x0e, 0x47, 0xdf, 0x1d, 0xd8, 0xe3, 0x30, 0x6f, 0xf8, 0xa1, 0xd3, 0x42, 0x75, 0x8d, 0xbd, 0x4f, 0xe5, 0xc9, 0x3e, 0x3b, 0xff, 0xba, 0xe0, 0xcf, 0x6f, 0x05, 0x2f, 0x9d, 0x90, 0x90, 0x29, 0xdd, 0x1e, 0x14, 0x38, 0x95, 0x23, 0xa2, 0xa5, 0x6c, 0x44, 0xbc, 0x46, 0x3c, 0x3d, 0x63, 0x8f, 0x90, 0x8d, 0x1f, 0x5d, 0x8b, 0x8d, 0xfa, 0x16, 0xf3, 0x99, 0x55, 0x55, 0x82, 0x27, 0xcb, 0x63, 0x1b, 0xf0, 0x04, 0x6e, 0xc4, 0x5d, 0xec, 0x53, 0x16, 0xd0, 0x6d, 0x80, 0xd7, 0x42, 0xde, 0xa9, 0x1a, 0x88, 0x52, 0x33, 0x39, 0x60, 0xc3, 0x6a, 0xc5, 0xaa, 0x3f, 0xc5, 0xa8, 0x0e, 0xac, 0x97, 0x3c, 0xb4, 0x4d, 0x6d, 0x08, 0x89, 0xf9, 0x3a, 0x14, 0x3c, 0x54, 0x85, 0xe7, 0x9d, 0x2f, 0xfa, 0x2e, 0x8f, 0x94, 0x8d, 0xf3, 0xd0, 0xe9, 0x46, 0xa1, 0xbd, 0xff, 0xbe, 0xc7, 0x9a, 0xc7, 0x67, 0xe8, 0xea, 0x23, 0xed, 0xaa, 0x12, 0xcb, 0x8b, 0x6f, 0xc6, 0x59, 0xf7, 0xd8, 0xe7, 0xbc, 0x78, 0x20, 0xa5, 0x6a, 0x18, 0x4b, 0x03, 0xee, 0xb0, 0x74, 0x0f, 0xa2, 0x99, 0x73, 0xbd, 0xbe, 0x7e, 0xd7, 0x95, 0x43, 0x0d, 0xeb, 0x94, 0x26, 0x2d, 0xc6, 0x82, 0xe1, 0x3d, 0x0d, 0xeb, 0x30, 0xc5, 0x85, 0x1f, 0x0f, 0xd1, 0x1a, 0xef, 0x37, 0x66, 0xc2, 0x3e, 0x0e, 0x3b, 0x31, 0xac, 0x2f, 0xbf, 0x9e, 0x7d, 0x38, 0xdd, 0xb4, 0x22, 0x7b, 0x40, 0x36, 0xb1, 0xfd, 0x1a, 0x20, 0x4a, 0x90, 0x76, 0xbb, 0x23, 0xe4, 0x71, 0xc3, 0x7c, 0x39, 0x09, 0xfd, 0x33, 0x5b, 0x21, 0x5f, 0xf5, 0x20, 0x34, 0xf0, 0x0c, 0xb4, 0xc2, 0x54, 0x84, 0xb1, 0xa5, 0x09, 0xf8, 0xdd, 0x59, 0x05, 0x7e, 0x77, 0x0e, 0xf1, 0xfb, 0x0a, 0x6f, 0x6e, 0x79, 0x95, 0xd7, 0x5a, 0x1e, 0x66, 0x2b, 0x99, 0x93, 0xc9, 0xe7, 0x03, 0x51, 0x74, 0x44, 0x5d, 0xfe, 0x28, 0x2c, 0x7c, 0x9a, 0xcc, 0xb7, 0x6a, 0x3e, 0x88, 0x0f, 0x6b, 0x9c, 0xb2, 0x2c, 0x95, 0x11, 0x77, 0x10, 0x8e, 0xbe, 0x0a, 0xb1, 0xed, 0xfc, 0x0c, 0x86, 0x4b, 0x5e, 0xd9, 0x88, 0xb3, 0x53, 0x20, 0x7c, 0x0a, 0x64, 0xf2, 0xd6, 0x7b, 0xc3, 0x30, 0xd5, 0xdb, 0x63, 0x26, 0xfd, 0x2c, 0x39, 0xfc, 0x26, 0x38, 0x88, 0x33, 0xd0, 0x6b, 0x00, 0x17, 0x59, 0xe9, 0xc6, 0x8f, 0x8f, 0xca, 0x91, 0xbf, 0x77, 0xc4, 0x52, 0x73, 0xc9, 0x5b, 0x43, 0x86, 0x1b, 0xb5, 0x5e, 0x0e, 0x67, 0x9e, 0x7b, 0x75, 0xcf, 0x6b, 0xb2, 0xcf, 0xd7, 0x15, 0xc2, 0x46, 0xc9, 0x4e, 0xa6, 0xa0, 0x98, 0xa9, 0x67, 0x0e, 0x20, 0xba, 0xa8, 0xf6, 0xbc, 0x71, 0x1b, 0xee, 0x86, 0x0c, 0xad, 0x66, 0xed, 0xa3, 0xb7, 0xc6, 0x01, 0xce, 0xcb, 0x8b, 0x27, 0xb8, 0x18, 0xe7, 0xf4, 0xbc, 0xbd, 0x3f, 0xe1, 0x8a, 0xb5, 0x42, 0x5e, 0xdc, 0x8e, 0x54, 0x62, 0x6e, 0xa2, 0x90, 0xa9, 0xed, 0xc9, 0x59, 0x6a, 0x5b, 0x35, 0x66, 0xa9, 0xed, 0x70, 0x1b, 0xe4, 0x21, 0xc5, 0x94, 0x9f, 0xe8, 0x11, 0x27, 0x2b, 0xad, 0xa2, 0x91, 0xde, 0x1b, 0xf1, 0x4d, 0xa4, 0x83, 0x0a, 0x12, 0x8f, 0x79, 0x16, 0x43, 0x03, 0xd9, 0x4c, 0x8f, 0x4f, 0x65, 0xa8, 0x7f, 0x67, 0xca, 0x91, 0xe5, 0xde, 0x7b, 0x82, 0x33, 0x82, 0xd0, 0x90, 0x20, 0x3b, 0xa8, 0xf9, 0x02, 0xe6, 0x89, 0x9a, 0x9c, 0x88, 0x37, 0xd9, 0x25, 0xf2, 0xac, 0x8d, 0xab, 0x7a, 0x67, 0x97, 0x3a, 0xd4, 0x1b, 0x9f, 0x82, 0xe3, 0x9b, 0xf5, 0x0c, 0x53, 0x1f, 0xde, 0x06, 0x05, 0xdd, 0x64, 0x19, 0x35, 0x4c, 0xfc, 0xed, 0x2c, 0x45, 0x3f, 0x76, 0x29, 0x16, 0x4e, 0x4c, 0x99, 0x11, 0x9b, 0xe0, 0x9a, 0xd1, 0x06, 0x85, 0xc6, 0x57, 0xf1, 0xdb, 0x31, 0xc1, 0x82, 0xdf, 0xb2, 0xf1, 0xa8, 0x6e, 0x04, 0xf6, 0xe1, 0x3a, 0xb1, 0x0a, 0x0f, 0xd4, 0x48, 0x3b, 0x56, 0xba, 0xa3, 0xae, 0x5a, 0x67, 0xbd, 0x27, 0x4d, 0x71, 0x3d, 0xca, 0xb3, 0xd6, 0x10, 0x5b, 0x2c, 0x55, 0xb0, 0x87, 0xd9, 0xcd, 0x34, 0x1b, 0x38, 0x2a, 0x9e, 0x78, 0x20, 0xf4, 0x31, 0x78, 0xec, 0x8f, 0x38, 0x92, 0x54, 0xcb, 0x68, 0x63, 0x9a, 0x43, 0xe5, 0x09, 0xe2, 0x38, 0xb9, 0xbc, 0xf9, 0xd1, 0x76, 0xd8, 0x49, 0xbd, 0xf8, 0xf2, 0xa6, 0xa2, 0x26, 0x68, 0x96, 0xeb, 0x05, 0x3f, 0x46, 0x58, 0xc6, 0x15, 0x5e, 0x4f, 0x7b, 0x34, 0xde, 0x82, 0xe0, 0xff, 0x91, 0xd7, 0x08, 0x27, 0xcd, 0x38, 0x53, 0xdc, 0x82, 0xef, 0x9d, 0xe5, 0x91, 0xc1, 0x06, 0xb6, 0xbc, 0xfb, 0xb9, 0xc4, 0x34, 0xb2, 0x55, 0xfe, 0xd6, 0x59, 0x90, 0x3b, 0xc9, 0x36, 0x9f, 0x8c, 0xfb, 0xbe, 0x08, 0xf2, 0x07, 0xb7, 0x81, 0x9c, 0x34, 0xe2, 0x18, 0x13, 0xcc, 0x28, 0xf1, 0xb5, 0x82, 0x95, 0x72, 0x24, 0x39, 0x87, 0xae, 0x5c, 0x1e, 0xc6, 0x3a, 0xb8, 0x9c, 0x83, 0xcb, 0x4d, 0xc1, 0x72, 0x0e, 0x2e, 0xe7, 0xd0, 0xca, 0xe5, 0x52, 0x0e, 0x2e, 0xe7, 0xd0, 0xda, 0xe1, 0xc6, 0x27, 0x37, 0xc8, 0xf8, 0x21, 0x8b, 0x65, 0x05, 0xa2, 0x5d, 0x45, 0xd4, 0x8f, 0xc2, 0x0c, 0x7f, 0xf1, 0x28, 0xf9, 0x80, 0xe1, 0xd1, 0x2a, 0xc5, 0x95, 0x72, 0x8e, 0x31, 0x86, 0x8b, 0xbe, 0x10, 0x7e, 0x5f, 0xf6, 0x85, 0xf1, 0xfb, 0xaa, 0xaf, 0x2a, 0xc3, 0xaf, 0x71, 0xe1, 0x0a, 0x3a, 0x4a, 0x1e, 0x94, 0xb2, 0x2b, 0xa8, 0xee, 0xe3, 0xa0, 0x55, 0x58, 0x22, 0x23, 0xdb, 0xb8, 0xce, 0x4e, 0x70, 0xb9, 0x90, 0xc2, 0x77, 0x78, 0xa0, 0xc9, 0xb1, 0x18, 0xf7, 0x51, 0x11, 0x14, 0xb8, 0x8a, 0xa0, 0x10, 0xe9, 0xd2, 0x12, 0xcd, 0x8f, 0x9d, 0x65, 0xdc, 0xd8, 0x04, 0x9c, 0x13, 0x4c, 0x2b, 0xc8, 0x14, 0x0b, 0x42, 0x46, 0xa6, 0xe3, 0x70, 0xdf, 0xf4, 0xd8, 0x6b, 0x10, 0x62, 0x52, 0xc8, 0x8e, 0xab, 0xaa, 0x40, 0x4b, 0x59, 0xe2, 0xad, 0x03, 0x8f, 0xb7, 0x9a, 0x3c, 0xc9, 0xcf, 0xef, 0xa9, 0xff, 0x3d, 0xfc, 0xc2, 0x39, 0x5f, 0xd8, 0x8d, 0xc5, 0x3e, 0x9c, 0x20, 0x1e, 0xa9, 0xd9, 0x05, 0x12, 0x4c, 0x8d, 0x3b, 0xa9, 0xe5, 0x88, 0x35, 0x5d, 0xc5, 0x13, 0x66, 0x94, 0xf9, 0x9e, 0x27, 0xb0, 0xc5, 0x0b, 0x05, 0xdf, 0x13, 0xe1, 0xe0, 0x55, 0xc1, 0xf7, 0x64, 0xba, 0xe3, 0xa8, 0x87, 0xbc, 0xd9, 0x7d, 0x85, 0xe8, 0xbe, 0x17, 0x7e, 0x84, 0x33, 0x3c, 0x96, 0xf5, 0xe9, 0xcb, 0x23, 0xe2, 0x70, 0xe4, 0x9a, 0x70, 0x87, 0x19, 0x14, 0xdd, 0xde, 0x3c, 0x88, 0x2b, 0xb6, 0x50, 0x17, 0xde, 0x97, 0xf5, 0x03, 0x27, 0x68, 0x3e, 0x3c, 0x1d, 0x62, 0x54, 0xdb, 0xe8, 0x48, 0xda, 0x3f, 0x12, 0xfb, 0xe9, 0xc8, 0xf0, 0x07, 0xd4, 0x92, 0x9b, 0xee, 0x29, 0xf7, 0xdd, 0x18, 0x33, 0x36, 0xff, 0xa6, 0x3c, 0xcf, 0xa4, 0x7d, 0x28, 0xe1, 0x7a, 0x2b, 0x20, 0x7e, 0xb3, 0x13, 0x21, 0xa1, 0x7d, 0xb1, 0x54, 0xc6, 0x6b, 0xbc, 0x2e, 0xb6, 0x08, 0xa6, 0x20, 0x1c, 0x38, 0x12, 0x7b, 0x0d, 0x48, 0x7e, 0xea, 0x7d, 0x1d, 0x04, 0xc3, 0x3c, 0x08, 0xc1, 0x2c, 0x37, 0x41, 0x30, 0x71, 0xeb, 0xb0, 0x14, 0xa6, 0x79, 0x8b, 0xa4, 0xb2, 0xfa, 0x5d, 0x6a, 0x73, 0xf8, 0x35, 0xa9, 0x8c, 0xb9, 0x86, 0x16, 0xe6, 0xe0, 0xf1, 0x6a, 0xc9, 0x3d, 0x91, 0x12, 0x7c, 0xf2, 0x05, 0xa1, 0xb3, 0xc0, 0x5c, 0x3c, 0x65, 0xfe, 0x0f, 0xde, 0x8d, 0x3f, 0x2a, 0xbf, 0xf0, 0x83, 0xb3, 0x50, 0x1e, 0x9f, 0x6a, 0xff, 0x4c, 0xc2, 0x34, 0x3d, 0x04, 0xe5, 0x8a, 0x2d, 0xb6, 0x0d, 0x02, 0xf8, 0x1c, 0xc5, 0x67, 0x23, 0x8e, 0x51, 0x39, 0xa6, 0xef, 0x88, 0x97, 0xe2, 0xd3, 0x0e, 0x9c, 0x53, 0xe1, 0xe7, 0xc4, 0x69, 0x76, 0x43, 0x8e, 0x74, 0x38, 0x31, 0x2d, 0xb6, 0x55, 0x2a, 0x4b, 0x14, 0xf0, 0xe9, 0x97, 0xdf, 0x9d, 0xb3, 0xa7, 0x2f, 0x61, 0xc5, 0x72, 0x3b, 0x14, 0x93, 0x1c, 0xb2, 0xdb, 0xe2, 0x2f, 0x7b, 0x63, 0xb8, 0x56, 0x83, 0xc4, 0x37, 0xac, 0x33, 0x2a, 0x30, 0x76, 0x46, 0xf8, 0x84, 0xc2, 0x79, 0x1e, 0x8c, 0xfe, 0xb2, 0xbc, 0xc2, 0x19, 0x75, 0xd5, 0x3b, 0x4a, 0x60, 0xbe, 0x33, 0xcd, 0x09, 0x00, 0xe9, 0xbb, 0x6f, 0x9d, 0x87, 0x9e, 0x44, 0x1e, 0xaf, 0x51, 0x49, 0xc0, 0xfb, 0xbb, 0xfa, 0x34, 0xdb, 0xd2, 0x38, 0x1a, 0xd2, 0x33, 0x2e, 0x2b, 0xf3, 0xf2, 0xd6, 0xea, 0x79, 0x79, 0x64, 0x7d, 0xf8, 0xfa, 0x15, 0xc4, 0xb6, 0x2e, 0xe1, 0xca, 0x64, 0xee, 0xf8, 0xd8, 0x77, 0xc5, 0x2a, 0xe1, 0x94, 0x8b, 0xa2, 0x3c, 0xb6, 0x33, 0x4d, 0xcb, 0x1a, 0x91, 0x92, 0x8d, 0xd1, 0x1d, 0xaa, 0x54, 0x42, 0x98, 0x89, 0x7d, 0x54, 0xbd, 0x52, 0xb4, 0x58, 0x5a, 0xa8, 0x8e, 0xda, 0x8a, 0x0c, 0x7f, 0x23, 0x01, 0x48, 0x9f, 0x0b, 0xaa, 0xd7, 0x1c, 0x8b, 0xa5, 0x24, 0xe3, 0xbd, 0xf9, 0x19, 0x8e, 0xf0, 0xc7, 0xea, 0x95, 0x34, 0x47, 0x58, 0xe3, 0xc2, 0xfd, 0x42, 0x9a, 0x86, 0xb3, 0x52, 0xa1, 0x59, 0xf8, 0x2b, 0xf0, 0x92, 0x8f, 0x80, 0xbc, 0xea, 0x6b, 0x63, 0xb6, 0xfa, 0xf5, 0xf8, 0x5c, 0x24, 0x55, 0x88, 0x1b, 0x57, 0x6a, 0xc7, 0xd8, 0xb2, 0xd0, 0x47, 0xe0, 0xa1, 0x1d, 0x70, 0xfd, 0x74, 0xb6, 0x1d, 0xd7, 0xf7, 0x64, 0x66, 0x8f, 0xac, 0x52, 0x36, 0x60, 0xcc, 0x66, 0xcc, 0x77, 0x82, 0xee, 0x8c, 0xd4, 0xc7, 0xb1, 0xee, 0xa5, 0xcc, 0x13, 0x66, 0x8e, 0x18, 0x95, 0x1d, 0x5d, 0x18, 0x7e, 0x0d, 0x9a, 0xa3, 0x8b, 0xa1, 0x89, 0xa0, 0x9a, 0x7b, 0x27, 0xbd, 0xc5, 0xf0, 0x4c, 0xf5, 0xb5, 0xeb, 0x2f, 0x89, 0x37, 0x1a, 0xfa, 0xea, 0xd7, 0xdb, 0x17, 0x1b, 0x52, 0x82, 0x47, 0x82, 0xf0, 0xc4, 0xc7, 0x6f, 0x1c, 0xe6, 0xd6, 0xa4, 0xf9, 0xd5, 0x45, 0xd2, 0x42, 0x82, 0x1c, 0x89, 0xcc, 0xad, 0xb2, 0xa4, 0xb0, 0xae, 0xa4, 0x4c, 0x23, 0x55, 0x7d, 0x0e, 0x4f, 0xa6, 0x58, 0x76, 0x74, 0x85, 0xe5, 0xeb, 0xb1, 0x05, 0x4e, 0x70, 0x15, 0x49, 0xdd, 0x3b, 0x5f, 0x9f, 0xe0, 0x22, 0x2f, 0xe1, 0xb1, 0x95, 0xf8, 0xfd, 0x3d, 0x39, 0x82, 0xf8, 0x4e, 0xde, 0xbc, 0xe0, 0x03, 0x41, 0x3c, 0xa5, 0x00, 0x5e, 0xe2, 0x73, 0x8a, 0xfc, 0x8e, 0x6c, 0x65, 0x5f, 0xd7, 0x6b, 0xc7, 0x9d, 0xc8, 0x88, 0x29, 0xe9, 0xd6, 0x72, 0xe4, 0x56, 0x67, 0x31, 0xe2, 0x98, 0xc3, 0x45, 0x7c, 0x16, 0xab, 0xfb, 0x90, 0xba, 0x38, 0x50, 0xc4, 0x67, 0xb1, 0xfa, 0x3e, 0x3e, 0x1f, 0xc2, 0xcf, 0x11, 0xc4, 0xb4, 0x3f, 0x60, 0x7c, 0x2b, 0x17, 0xe7, 0x62, 0xe8, 0x4f, 0x3b, 0x89, 0x71, 0x04, 0x48, 0x27, 0x72, 0x61, 0x16, 0xcb, 0x19, 0xad, 0x49, 0x8f, 0xbd, 0xd4, 0x47, 0xb6, 0xd7, 0x47, 0xa9, 0xff, 0x85, 0x3f, 0x38, 0x87, 0x2b, 0x90, 0x7d, 0x75, 0x4a, 0xc2, 0xdb, 0xb6, 0xb6, 0x02, 0x71, 0x2f, 0x08, 0x2f, 0x41, 0x1f, 0xcf, 0x2f, 0x54, 0x37, 0x08, 0x58, 0xa3, 0xdb, 0xe7, 0x95, 0x62, 0x9f, 0x23, 0xfe, 0x93, 0xf5, 0xcc, 0xf5, 0xaa, 0xc6, 0x77, 0x12, 0xe7, 0x3e, 0x9e, 0xfa, 0x62, 0x95, 0x1b, 0x02, 0xbc, 0xbe, 0xe5, 0xf4, 0xfa, 0x76, 0xb5, 0x31, 0xe7, 0xdf, 0x1a, 0x7b, 0x1d, 0xd7, 0x68, 0xae, 0x99, 0xac, 0x08, 0x7e, 0x9d, 0xf8, 0x67, 0x91, 0x30, 0x9d, 0xa6, 0x74, 0xe3, 0xc6, 0x9e, 0xa9, 0x8c, 0x8a, 0x4d, 0xae, 0x72, 0xba, 0x60, 0x03, 0xf3, 0xf0, 0x76, 0xc6, 0x56, 0xc4, 0x2f, 0x62, 0xda, 0x26, 0xae, 0xd3, 0xf5, 0xf6, 0x19, 0x58, 0x13, 0x37, 0xdf, 0xdb, 0x06, 0x1b, 0x60, 0x8d, 0x42, 0x37, 0x6e, 0x03, 0xfc, 0x4c, 0x9e, 0xc5, 0x37, 0x68, 0x56, 0x41, 0x31, 0x0e, 0x06, 0x9c, 0x6e, 0x78, 0xf4, 0x85, 0x1f, 0x65, 0x46, 0xe8, 0x83, 0xf4, 0x59, 0x3a, 0xb8, 0xd5, 0x20, 0x27, 0x72, 0x43, 0x1f, 0x19, 0xb2, 0x73, 0x76, 0x90, 0xe1, 0xee, 0x64, 0x81, 0x6b, 0x18, 0xa6, 0x8a, 0x1d, 0x75, 0xab, 0xb2, 0x6c, 0x7b, 0xf6, 0xe6, 0xf2, 0xfb, 0xf0, 0xdc, 0xb7, 0xe0, 0x78, 0xb0, 0x8f, 0xb4, 0xeb, 0xa3, 0xd8, 0xde, 0x3c, 0xa5, 0x24, 0xfc, 0x8f, 0x88, 0x55, 0x2d, 0x82, 0x02, 0xfc, 0x4c, 0xc5, 0x3a, 0x56, 0xe1, 0x99, 0x90, 0x99, 0x2d, 0xbb, 0xc6, 0x51, 0x8a, 0xf5, 0xc6, 0x8f, 0xca, 0x55, 0x3c, 0x67, 0x88, 0xed, 0x18, 0x85, 0xef, 0x72, 0x6d, 0x16, 0xf4, 0x58, 0x02, 0x43, 0xd0, 0x7c, 0x3c, 0xa9, 0x0a, 0x1c, 0x45, 0xd0, 0xa4, 0x59, 0x83, 0xfd, 0x85, 0x01, 0x71, 0x59, 0xf6, 0xe1, 0x38, 0x35, 0x5e, 0x22, 0xbb, 0xa5, 0xc2, 0x84, 0x45, 0xd3, 0x8e, 0x5e, 0x88, 0x38, 0xab, 0x1b, 0x2a, 0xc4, 0xbe, 0x41, 0xdc, 0xa5, 0x22, 0xb5, 0x50, 0x2f, 0x9f, 0xa8, 0xc8, 0xe3, 0x72, 0x97, 0x91, 0xad, 0x58, 0x49, 0xce, 0x84, 0x11, 0xe3, 0x8d, 0xb5, 0x19, 0xcc, 0xe4, 0x43, 0xd6, 0x20, 0x71, 0x8f, 0x9e, 0x11, 0xd0, 0x0c, 0x31, 0xd0, 0x33, 0x74, 0xd3, 0x46, 0x3e, 0x92, 0x9c, 0x1e, 0x98, 0x4f, 0x27, 0x26, 0xf9, 0x18, 0x22, 0xa8, 0xae, 0x9d, 0x94, 0x1a, 0xfc, 0x45, 0xac, 0x77, 0xb3, 0x03, 0xc7, 0xcb, 0xdd, 0x06, 0x1e, 0xea, 0xcb, 0x2e, 0xc1, 0x4b, 0x7e, 0x1d, 0xb1, 0x80, 0x62, 0xb0, 0xe1, 0xaa, 0xcf, 0xa5, 0x3d, 0x84, 0xd0, 0x36, 0x48, 0xba, 0x30, 0xda, 0x8d, 0x20, 0x69, 0x95, 0x74, 0x8b, 0x9b, 0xc1, 0x84, 0x45, 0xd3, 0x0d, 0xe8, 0x50, 0x16, 0xa4, 0x8c, 0x08, 0x57, 0x9d, 0x04, 0xc9, 0x11, 0x37, 0x75, 0xdb, 0x30, 0x1e, 0xc3, 0x25, 0xcb, 0x9c, 0x1f, 0xac, 0xc3, 0x75, 0x4e, 0x7c, 0xfa, 0xc9, 0xae, 0x00, 0xfc, 0xe2, 0xee, 0x14, 0xd9, 0xd7, 0xf5, 0xb4, 0x01, 0x59, 0x6e, 0xb5, 0xed, 0xe6, 0xfb, 0x17, 0x84, 0xe3, 0xbe, 0x14, 0xf9, 0x4a, 0xd0, 0xdf, 0x39, 0x4e, 0xe5, 0x52, 0xb9, 0xde, 0xc9, 0x9a, 0x3d, 0x5e, 0x9b, 0x62, 0x96, 0xda, 0xd5, 0xbf, 0xa5, 0xf3, 0xd5, 0x5d, 0x2f, 0xb5, 0xff, 0x8b, 0x0a, 0xb9, 0x58, 0x8e, 0x3c, 0x3d, 0x94, 0xa4, 0xe1, 0x81, 0x0b, 0x70, 0xa7, 0x94, 0xc6, 0x8d, 0xe1, 0xd7, 0xa1, 0xf4, 0x07, 0x67, 0x0d, 0x2e, 0x7c, 0xda, 0x66, 0x70, 0x21, 0x4d, 0x52, 0x23, 0xbc, 0xf3, 0xdd, 0xb7, 0x18, 0xc2, 0x10, 0xc6, 0x70, 0x38, 0x13, 0xae, 0x81, 0x9a, 0x18, 0xe6, 0x8e, 0xbb, 0xed, 0x45, 0x10, 0x4e, 0x98, 0xf0, 0x9d, 0x06, 0xa5, 0x20, 0x5d, 0x02, 0xd7, 0x77, 0x9e, 0x3d, 0x64, 0xbf, 0x1f, 0x6a, 0xe2, 0x57, 0xc9, 0x27, 0x03, 0xee, 0xc7, 0x97, 0x1b, 0xd6, 0x21, 0xee, 0x51, 0x42, 0x9e, 0xc0, 0xbe, 0xff, 0xe3, 0xb8, 0x69, 0xfa, 0x3c, 0x30, 0x2a, 0x53, 0x38, 0xaf, 0x55, 0xc9, 0xc5, 0xb3, 0xcb, 0x68, 0x7f, 0x41, 0x31, 0x61, 0x99, 0xbb, 0xe2, 0x97, 0x64, 0xf6, 0x11, 0x3b, 0x36, 0xdf, 0x75, 0x07, 0x9d, 0x0f, 0x88, 0x85, 0x44, 0x34, 0x6e, 0xf2, 0x62, 0xe8, 0x15, 0xef, 0x67, 0x88, 0x3a, 0x84, 0xf5, 0x39, 0x18, 0xaa, 0x4f, 0x9b, 0x7b, 0x6d, 0xb4, 0x91, 0xbc, 0x10, 0x25, 0xcc, 0x3c, 0xc3, 0x1b, 0x1b, 0xd6, 0x61, 0x0f, 0x65, 0x47, 0xe3, 0x76, 0xe1, 0x1f, 0x8d, 0xe0, 0xfb, 0xae, 0xeb, 0x5b, 0x66, 0xf4, 0x0c, 0x1f, 0xdf, 0x35, 0x02, 0x25, 0x08, 0x89, 0x63, 0x1a, 0x94, 0xe7, 0x9a, 0xae, 0x9f, 0xf5, 0xf6, 0x90, 0x8e, 0x24, 0xf8, 0xbd, 0x8b, 0xa5, 0x46, 0x28, 0xb7, 0x15, 0x8b, 0x93, 0xe3, 0x9e, 0x20, 0x94, 0x39, 0xda, 0xa5, 0xd6, 0x1b, 0x4e, 0x8e, 0x0b, 0x48, 0x81, 0x6a, 0x27, 0x07, 0x9e, 0xf4, 0x8d, 0xdc, 0xa2, 0x5c, 0x84, 0xc3, 0xf5, 0xd9, 0x15, 0x68, 0x9f, 0x43, 0x76, 0x88, 0xa5, 0x47, 0xb3, 0x31, 0xd8, 0x06, 0xbe, 0x35, 0x75, 0xce, 0xd7, 0x7a, 0xb3, 0x24, 0xe3, 0xfd, 0xb4, 0x40, 0xe0, 0x23, 0x9a, 0xdd, 0xfa, 0x2b, 0x59, 0xe9, 0xa8, 0xb4, 0x35, 0x62, 0xf6, 0x20, 0x47, 0xa7, 0x6b, 0xfa, 0x34, 0x35, 0x33, 0x36, 0xaf, 0xed, 0x22, 0xaf, 0x65, 0xf6, 0x35, 0x75, 0x4f, 0xfd, 0x0b, 0xcd, 0xeb, 0x42, 0xd7, 0xd4, 0xfd, 0xb1, 0xbe, 0x78, 0x21, 0xee, 0x9d, 0x01, 0x21, 0x51, 0x1a, 0xfe, 0x87, 0x4c, 0x3e, 0x1b, 0xf9, 0xb1, 0x85, 0x4d, 0x22, 0x8d, 0xb5, 0xbf, 0x76, 0xe0, 0xef, 0x0b, 0x88, 0x1f, 0xf7, 0xb0, 0x35, 0x5c, 0x1e, 0x47, 0x79, 0x0e, 0x61, 0x15, 0xea, 0x3b, 0x88, 0x03, 0x5a, 0x70, 0x04, 0x7b, 0xba, 0x0d, 0xdf, 0xfa, 0x31, 0x42, 0x20, 0xc4, 0x55, 0x1a, 0x5b, 0x61, 0x4a, 0x38, 0xec, 0xb5, 0xcc, 0xb9, 0x86, 0x58, 0xdb, 0x8b, 0xcd, 0xeb, 0x6a, 0x7f, 0x4f, 0xf5, 0x72, 0x29, 0x47, 0x2c, 0x1c, 0xf7, 0x68, 0x75, 0x36, 0xb1, 0x6f, 0xb5, 0x52, 0x2a, 0x31, 0x0f, 0x4b, 0x60, 0xe8, 0x45, 0x01, 0x6f, 0x31, 0x8f, 0x26, 0xe5, 0xaa, 0x98, 0xe8, 0x37, 0x48, 0xf0, 0x98, 0xe5, 0x9d, 0x7d, 0x52, 0x74, 0x58, 0xf8, 0x71, 0x78, 0x64, 0x9d, 0xe6, 0x8d, 0xd2, 0xec, 0xa8, 0x0d, 0xd1, 0x49, 0xdb, 0x01, 0x49, 0x6e, 0x4d, 0x5f, 0xc2, 0xe8, 0x7c, 0x13, 0x6c, 0x3c, 0x0f, 0x46, 0xc7, 0x9b, 0x02, 0x07, 0x69, 0xe0, 0xfb, 0x07, 0x84, 0xc8, 0x23, 0x84, 0xe3, 0x7a, 0xc0, 0x6d, 0x76, 0x19, 0x9c, 0xcc, 0xe9, 0x7f, 0xfe, 0x73, 0xea, 0xd5, 0x99, 0x3d, 0x60, 0x56, 0x47, 0xc3, 0xc5, 0xea, 0x18, 0x7e, 0xc8, 0xbb, 0x48, 0xbe, 0xb0, 0x61, 0x5f, 0xfd, 0x7b, 0xe2, 0x84, 0xd4, 0xaf, 0xff, 0x1c, 0xf1, 0xac, 0x4f, 0xf3, 0xf7, 0x87, 0x5c, 0xc6, 0xa9, 0x5e, 0xcc, 0xe4, 0x1a, 0xd1, 0xd2, 0x47, 0xf8, 0xfb, 0x10, 0xa7, 0xdf, 0xaf, 0x1e, 0xa3, 0xb9, 0x92, 0xab, 0x5f, 0x3c, 0xf0, 0x68, 0x7f, 0xac, 0x20, 0x3e, 0xda, 0xb8, 0x3a, 0x66, 0x4b, 0x18, 0x1b, 0xfb, 0x95, 0x8b, 0xb2, 0x65, 0x64, 0xf5, 0x48, 0x2f, 0x7f, 0x6e, 0xe0, 0xb8, 0xe3, 0xf9, 0x60, 0x93, 0x83, 0x38, 0xf2, 0xf5, 0xb6, 0xdd, 0x60, 0x08, 0xbb, 0xc0, 0xc0, 0x5c, 0x0e, 0xc9, 0x5e, 0xfd, 0xc0, 0x5f, 0x82, 0x31, 0xef, 0xae, 0xe8, 0xf2, 0xaf, 0x84, 0x1e, 0x08, 0x81, 0x09, 0x4f, 0xc0, 0xab, 0xf7, 0xd6, 0x82, 0xd9, 0x3e, 0xe1, 0xd1, 0xe5, 0xf7, 0x86, 0xc0, 0x6a, 0x0f, 0xc5, 0xfe, 0x2c, 0x3e, 0xea, 0x9e, 0xd4, 0xf8, 0x6c, 0xec, 0xae, 0x84, 0xa9, 0xea, 0x0c, 0xe4, 0x2b, 0xd2, 0x0b, 0x3f, 0xc2, 0x1c, 0xb6, 0xc6, 0xde, 0x10, 0x86, 0xde, 0x1e, 0x5e, 0xf0, 0x3d, 0xd2, 0xe2, 0x21, 0xb9, 0x8a, 0x35, 0xb2, 0x3d, 0x96, 0xba, 0x33, 0xf3, 0xd6, 0x01, 0x84, 0x4c, 0x96, 0xaa, 0xb3, 0x70, 0xa7, 0x3c, 0x21, 0x1b, 0x47, 0xf6, 0xee, 0xcb, 0x23, 0x24, 0xc3, 0xf2, 0xa3, 0x70, 0x6c, 0x55, 0xd2, 0xe6, 0xcd, 0xe1, 0x33, 0xb1, 0x17, 0xe9, 0x70, 0xa4, 0xc5, 0x15, 0x5d, 0x98, 0x7a, 0xef, 0x9d, 0x44, 0x9e, 0x15, 0x70, 0xed, 0x0c, 0xb0, 0xf7, 0x06, 0x47, 0xc2, 0x43, 0xb3, 0x3d, 0x32, 0xe4, 0xcd, 0xd1, 0x6e, 0x63, 0x27, 0xd4, 0x6f, 0x60, 0x9e, 0x8f, 0x2d, 0x35, 0x36, 0xb8, 0x32, 0x71, 0x06, 0x4b, 0x4f, 0xa0, 0xd9, 0x3f, 0xe4, 0x40, 0x3c, 0x4c, 0x5a, 0x0a, 0xf6, 0x98, 0x3c, 0x59, 0xb7, 0x17, 0xb2, 0xe7, 0x76, 0x3d, 0xa5, 0xfa, 0x8c, 0x08, 0xf7, 0x7b, 0xd4, 0xd7, 0x09, 0xee, 0xeb, 0x4f, 0x20, 0x17, 0xf9, 0xab, 0xc9, 0x70, 0x4d, 0x9c, 0x41, 0x37, 0x34, 0x3e, 0x3b, 0xfb, 0x23, 0xb0, 0xc9, 0x93, 0x6f, 0xbc, 0x17, 0x8c, 0x83, 0x6a, 0x5e, 0x0a, 0xca, 0xab, 0xbc, 0x2f, 0x98, 0xfe, 0x46, 0x1c, 0x52, 0x47, 0x7f, 0x87, 0xce, 0xaa, 0x6a, 0xea, 0xfa, 0x60, 0xff, 0x42, 0xb2, 0x8c, 0x1c, 0x40, 0x3a, 0x36, 0x10, 0x0e, 0x2b, 0xe5, 0x3e, 0xa4, 0x82, 0x11, 0x2e, 0x4f, 0x48, 0x98, 0xef, 0xee, 0x41, 0x7c, 0xb7, 0x57, 0x99, 0x06, 0x48, 0xdd, 0x3d, 0x18, 0x24, 0x19, 0x0a, 0xf6, 0x67, 0xf1, 0x62, 0xe3, 0x6b, 0x13, 0x3c, 0x22, 0x8d, 0x4f, 0xf0, 0x70, 0xc2, 0xe6, 0x68, 0x54, 0x4c, 0x73, 0x7e, 0x4f, 0x77, 0xf2, 0x0c, 0x49, 0x76, 0x8f, 0xa3, 0x71, 0x79, 0xcd, 0xfe, 0xe5, 0x3a, 0xf6, 0xc3, 0xda, 0x43, 0xfa, 0x13, 0x60, 0x1c, 0x14, 0x90, 0xa2, 0x35, 0x03, 0x29, 0x8c, 0x69, 0x48, 0xe1, 0xf8, 0x6a, 0xfa, 0xbe, 0x0c, 0x4f, 0x97, 0xa8, 0x6b, 0x92, 0xd3, 0xc2, 0x3b, 0x7a, 0x7e, 0x6c, 0x65, 0xdc, 0x22, 0x3c, 0xe5, 0xb8, 0x5c, 0x10, 0x15, 0x77, 0xce, 0x06, 0x0f, 0x7b, 0x3e, 0x40, 0x98, 0xbe, 0xa7, 0x77, 0xd9, 0x84, 0x5d, 0xcb, 0x13, 0x66, 0x6c, 0x37, 0xf9, 0x8a, 0xc9, 0x9f, 0x73, 0xd6, 0x58, 0xe9, 0xb6, 0x98, 0x9e, 0xe5, 0x1b, 0xf0, 0xea, 0x6c, 0x8f, 0xc9, 0x63, 0x14, 0xce, 0x82, 0x51, 0xc8, 0x1f, 0x7c, 0xa3, 0x9b, 0xf0, 0xcc, 0xd8, 0x36, 0x63, 0x2c, 0xe1, 0x77, 0x5a, 0x88, 0x92, 0xcb, 0xf9, 0xc0, 0x2e, 0xe8, 0xb5, 0x0a, 0xb9, 0xcd, 0x18, 0x9b, 0xde, 0x90, 0xf3, 0xc1, 0xf4, 0x56, 0x30, 0xe6, 0x1c, 0x9f, 0x5e, 0x65, 0x8c, 0x61, 0xcc, 0x7c, 0x7b, 0x15, 0x9e, 0xfd, 0x66, 0xce, 0xf1, 0x8e, 0xfc, 0x99, 0x8c, 0xa6, 0xa0, 0x99, 0xb5, 0x04, 0x15, 0x45, 0xd3, 0x04, 0x4a, 0xe4, 0xb6, 0x34, 0xb1, 0x56, 0xcb, 0xef, 0x29, 0xbe, 0x25, 0x3a, 0x63, 0x2e, 0x98, 0x95, 0x1a, 0x79, 0x2e, 0xc1, 0x8c, 0xeb, 0x87, 0x9c, 0x74, 0xfb, 0x87, 0x75, 0xf1, 0x18, 0x58, 0xed, 0xc1, 0x6c, 0x8d, 0x33, 0xaa, 0xc0, 0x8c, 0x79, 0x8d, 0x24, 0x9d, 0x20, 0xe0, 0xc4, 0xdd, 0x7e, 0xf2, 0x9e, 0xc4, 0xe5, 0x0e, 0x2a, 0x79, 0x37, 0xa7, 0x09, 0x6a, 0xb0, 0x1b, 0xec, 0x58, 0x9f, 0xc0, 0x2b, 0xb1, 0xe6, 0x4a, 0xce, 0x1f, 0xd5, 0xf5, 0x7b, 0x5f, 0xfa, 0xc6, 0xb7, 0x27, 0xa0, 0xf1, 0x8f, 0x2e, 0x92, 0xb4, 0xa7, 0x2b, 0xc6, 0x63, 0xdb, 0xac, 0xdd, 0xe9, 0xf7, 0x6a, 0x98, 0xda, 0x52, 0xcd, 0x13, 0x4c, 0x4a, 0x1b, 0xe5, 0xd6, 0xd8, 0x06, 0xfc, 0x5e, 0x40, 0xd4, 0x08, 0xfe, 0x3e, 0x46, 0x9e, 0xb8, 0x1a, 0x7b, 0xef, 0x0f, 0x82, 0xb5, 0x4b, 0xe8, 0xec, 0x91, 0x97, 0x44, 0x23, 0xf7, 0x60, 0x27, 0xc6, 0xd2, 0xf8, 0xfb, 0xe9, 0x96, 0x56, 0x6b, 0x4f, 0x30, 0x65, 0xe0, 0xb4, 0xbd, 0x29, 0x75, 0x70, 0x43, 0x22, 0xc0, 0x2b, 0xc0, 0x8c, 0x14, 0x7d, 0x12, 0xcc, 0x88, 0x0d, 0x2e, 0xc6, 0x6f, 0x07, 0x7e, 0x5b, 0xc1, 0xe5, 0x68, 0x12, 0x1c, 0x77, 0xf8, 0x50, 0x77, 0x82, 0x14, 0x66, 0xb4, 0x54, 0x90, 0x2a, 0xc4, 0xf7, 0x98, 0xb5, 0xbb, 0xe8, 0x3d, 0xe4, 0x95, 0x51, 0xc3, 0x25, 0x76, 0xc4, 0xde, 0x80, 0x47, 0x09, 0x33, 0x8f, 0x15, 0xc3, 0xbc, 0x24, 0xc0, 0xab, 0x72, 0xa0, 0xd7, 0x08, 0x39, 0xb8, 0xbf, 0xc5, 0xb8, 0x9e, 0x8a, 0xf5, 0x26, 0xcc, 0x72, 0xb0, 0xcc, 0x05, 0x26, 0x92, 0x6d, 0x60, 0xae, 0xc4, 0x9d, 0x09, 0x0b, 0xe2, 0x1f, 0x97, 0x06, 0xdb, 0xe1, 0x72, 0x67, 0xb7, 0x3b, 0xc9, 0x1c, 0x51, 0xf2, 0xc7, 0x6d, 0xa4, 0xb1, 0x1b, 0xed, 0xb7, 0x13, 0xc7, 0xbd, 0xf9, 0xbe, 0x1e, 0x36, 0x97, 0x9a, 0xff, 0xf9, 0x2a, 0x28, 0xf0, 0x05, 0x24, 0x10, 0x25, 0xe3, 0x52, 0x38, 0xf8, 0xf9, 0x20, 0x4c, 0xbd, 0x6f, 0x2e, 0x52, 0xd2, 0x5a, 0xa9, 0xcf, 0x23, 0x86, 0xc3, 0x1c, 0x90, 0x74, 0xc8, 0x0a, 0xf6, 0xfb, 0xda, 0x20, 0x0a, 0x0e, 0xfc, 0xae, 0x03, 0xd7, 0xb8, 0xda, 0x97, 0x20, 0xf6, 0x60, 0xce, 0xb4, 0x6e, 0x88, 0x42, 0xf3, 0x5e, 0x27, 0xde, 0x8c, 0x26, 0x07, 0x67, 0x13, 0xeb, 0xbf, 0x5c, 0x92, 0xc3, 0xcf, 0x0f, 0x2f, 0x35, 0xee, 0xec, 0x6f, 0xe9, 0x96, 0xc3, 0x83, 0x7d, 0x0b, 0x25, 0x39, 0xb8, 0x7e, 0xc5, 0x40, 0xbf, 0x0b, 0x96, 0x4c, 0xfa, 0xe5, 0xeb, 0x4e, 0xe3, 0x47, 0xcf, 0x6d, 0x24, 0xbf, 0x7d, 0xbd, 0x4e, 0xe3, 0xc7, 0xf8, 0x34, 0xb2, 0xe2, 0x50, 0xef, 0x86, 0x7e, 0xa7, 0xb4, 0x74, 0xd2, 0xaf, 0x5e, 0x93, 0x73, 0x3e, 0xea, 0x1f, 0x58, 0xe1, 0x84, 0x23, 0x7d, 0x72, 0xce, 0xc7, 0xf8, 0x74, 0xb8, 0x77, 0x7d, 0x5f, 0x9b, 0x14, 0x59, 0x2e, 0x77, 0x48, 0x7e, 0x1c, 0xd7, 0x7c, 0x27, 0x74, 0x4f, 0xfa, 0xcf, 0xd7, 0x1c, 0x39, 0x1f, 0xad, 0xde, 0xb0, 0xc2, 0x29, 0x1d, 0xe9, 0x75, 0xe4, 0x7c, 0x8c, 0x4f, 0x23, 0x7d, 0x23, 0x48, 0xc1, 0x0c, 0x2e, 0x6f, 0x62, 0x4f, 0xd8, 0x74, 0x0f, 0x53, 0xf7, 0xf3, 0x60, 0xa1, 0xb6, 0x5e, 0x0e, 0x92, 0x44, 0x80, 0x93, 0xee, 0xaf, 0xe7, 0xbb, 0x90, 0x72, 0xad, 0x84, 0xe8, 0xbf, 0x56, 0x84, 0xb4, 0xf5, 0xf2, 0xa8, 0xa3, 0x56, 0x5b, 0x41, 0x75, 0x9a, 0x97, 0x62, 0xba, 0xc5, 0x8e, 0xb0, 0xb7, 0x0a, 0xe2, 0xec, 0x4b, 0x50, 0x9e, 0x52, 0x46, 0xd6, 0xfd, 0x25, 0x79, 0x27, 0x0f, 0x70, 0x4c, 0x0e, 0x04, 0xbb, 0x94, 0x43, 0xeb, 0x1e, 0x59, 0xee, 0x0d, 0x41, 0x84, 0x63, 0x8c, 0x10, 0xc5, 0x93, 0x4c, 0x09, 0x9d, 0x51, 0x2f, 0x23, 0x6e, 0x57, 0x17, 0x7e, 0x13, 0x1a, 0xe4, 0x39, 0x38, 0xff, 0xe5, 0x34, 0x46, 0x9f, 0x9c, 0x4b, 0x81, 0xcd, 0x0d, 0x46, 0x3b, 0x7b, 0x59, 0x1e, 0xdb, 0xc6, 0xa1, 0x09, 0x5a, 0xe8, 0x15, 0x0e, 0x99, 0xb4, 0xd0, 0x4b, 0x15, 0x79, 0x1f, 0xcc, 0x0e, 0xdc, 0x71, 0xac, 0x0d, 0x24, 0xa4, 0x30, 0xcc, 0x4b, 0x20, 0x50, 0xed, 0xad, 0x07, 0x9f, 0xaf, 0x86, 0xb8, 0x99, 0xde, 0xb9, 0xe0, 0x51, 0xc2, 0xbe, 0x7c, 0x5f, 0x12, 0xa4, 0xe6, 0x35, 0x88, 0x9b, 0xe7, 0x8f, 0x54, 0x8f, 0xec, 0xb3, 0xcf, 0x89, 0x0e, 0x93, 0xe7, 0x3d, 0x9e, 0x0d, 0x9b, 0x22, 0xdb, 0xe7, 0xb8, 0x3b, 0xc1, 0x17, 0x08, 0xce, 0xb9, 0x72, 0x14, 0xe4, 0x3b, 0x2a, 0xa2, 0x88, 0x61, 0x94, 0xce, 0xf9, 0xed, 0x19, 0xb0, 0xdf, 0xc1, 0x39, 0x2c, 0x8d, 0x2b, 0xf0, 0x7d, 0x13, 0xa3, 0xbd, 0xbe, 0xe0, 0x5b, 0x3f, 0xec, 0x18, 0x72, 0x13, 0xbf, 0xa8, 0x4d, 0xc8, 0x6f, 0x20, 0xbc, 0x6d, 0x4e, 0xf7, 0xd8, 0xdb, 0x09, 0xf3, 0xb3, 0xbd, 0xc5, 0x50, 0x73, 0xb6, 0xa7, 0x18, 0x6a, 0xba, 0xa9, 0x8f, 0x97, 0xe4, 0x79, 0x1a, 0xa6, 0x15, 0x11, 0xbe, 0xd5, 0xd9, 0xe7, 0x5a, 0x69, 0x5a, 0x76, 0xa0, 0x1b, 0x5e, 0x3c, 0x40, 0x3c, 0xf8, 0x34, 0xbf, 0x06, 0xe7, 0x64, 0xa7, 0x90, 0xcc, 0x71, 0x87, 0xbd, 0x31, 0x08, 0x94, 0xe0, 0xcc, 0x78, 0x3b, 0xb0, 0x5e, 0xcf, 0xac, 0x20, 0xf6, 0x37, 0x88, 0xfd, 0xf5, 0x93, 0x07, 0xd2, 0x40, 0x08, 0xfb, 0x5f, 0x2e, 0x76, 0xb2, 0x94, 0xe7, 0xd4, 0x66, 0x4a, 0x32, 0x6b, 0x1e, 0x3b, 0x84, 0x9f, 0x59, 0x8f, 0x6e, 0xae, 0x82, 0xa9, 0x6e, 0x6d, 0xae, 0x22, 0x5a, 0xeb, 0xa3, 0x14, 0xc3, 0xbe, 0xe5, 0xeb, 0xb4, 0x1e, 0x34, 0xe0, 0x5c, 0x75, 0x6b, 0x73, 0xd5, 0x84, 0xfd, 0x68, 0x96, 0xeb, 0xd8, 0xe3, 0xe5, 0x6c, 0x9a, 0x2b, 0x5f, 0x11, 0x98, 0xad, 0x41, 0x55, 0x8d, 0xf3, 0x5e, 0x97, 0xb0, 0x46, 0x6f, 0x1d, 0x44, 0x66, 0xe1, 0x98, 0x42, 0x14, 0xbf, 0xcb, 0x20, 0x86, 0xf3, 0x50, 0x87, 0x63, 0x10, 0xc0, 0xfe, 0x2f, 0x16, 0x3b, 0xdd, 0x41, 0xe3, 0x10, 0xcc, 0xee, 0x75, 0x43, 0xde, 0x32, 0x98, 0x5a, 0x04, 0xb9, 0xae, 0x09, 0x35, 0x2b, 0xbb, 0x20, 0xaf, 0x08, 0xee, 0xdc, 0xbf, 0x3c, 0xf6, 0x6c, 0x3c, 0x60, 0xaf, 0x93, 0x8d, 0xf4, 0x96, 0xb1, 0x6d, 0xe4, 0x09, 0xcf, 0xee, 0x85, 0xf2, 0x43, 0xfd, 0xbe, 0x79, 0xb2, 0x17, 0xfc, 0x23, 0xfd, 0xa5, 0x08, 0x85, 0x30, 0xd6, 0x64, 0xaf, 0xab, 0xbe, 0x64, 0x56, 0x1d, 0x96, 0xd0, 0xc5, 0x02, 0xd5, 0x69, 0xe6, 0xdc, 0xef, 0x23, 0xf4, 0x20, 0x7f, 0xe4, 0xc6, 0x9e, 0x3b, 0x8f, 0xf5, 0x9f, 0x59, 0xf5, 0x6f, 0x1f, 0x81, 0xa9, 0x34, 0x88, 0x3b, 0xd0, 0xd8, 0xc5, 0xb5, 0x8d, 0x06, 0x9d, 0x90, 0x32, 0x0f, 0xae, 0x48, 0x4a, 0x4b, 0xcc, 0xb6, 0x9c, 0x68, 0x6f, 0x88, 0xda, 0x32, 0xdc, 0x05, 0xfe, 0x22, 0x30, 0x76, 0x43, 0x69, 0x11, 0x98, 0xb8, 0x96, 0x65, 0x18, 0x1f, 0x7d, 0xe1, 0x47, 0x29, 0x43, 0x38, 0xa4, 0xf8, 0x68, 0xbe, 0x3b, 0x0b, 0x1c, 0x13, 0xf6, 0xf6, 0x26, 0xf2, 0xe6, 0xad, 0x2e, 0x35, 0xbc, 0xb7, 0xef, 0x70, 0xdf, 0xe1, 0xd7, 0xc0, 0x22, 0xf7, 0x35, 0x86, 0x14, 0xab, 0xc3, 0xb8, 0xb7, 0x97, 0xa8, 0xd9, 0x40, 0x58, 0x5e, 0x3b, 0x12, 0x6c, 0xfc, 0x46, 0x73, 0xff, 0x8e, 0x6f, 0x74, 0x1c, 0x24, 0x79, 0x94, 0x94, 0x61, 0xf0, 0x9b, 0x71, 0x63, 0x61, 0x00, 0x57, 0xd8, 0x3c, 0x6c, 0xb1, 0x44, 0xef, 0xa2, 0x7b, 0x16, 0x7b, 0x9d, 0x03, 0x7b, 0x71, 0x78, 0x2d, 0xf9, 0xa5, 0x3e, 0xb2, 0xba, 0x1c, 0xdf, 0x1c, 0xdd, 0x5b, 0x81, 0x6f, 0x8e, 0xbe, 0x47, 0xef, 0xbe, 0xfe, 0x5d, 0xe7, 0x62, 0xb0, 0xed, 0x10, 0x1e, 0xd5, 0x32, 0x33, 0x85, 0x63, 0x98, 0xca, 0xce, 0x12, 0x86, 0x92, 0xd9, 0x19, 0xc2, 0x50, 0xeb, 0x4d, 0x73, 0x73, 0x49, 0x16, 0x3c, 0x27, 0xb3, 0x36, 0xe7, 0xe9, 0x55, 0x16, 0xd5, 0x3c, 0xfb, 0xe5, 0x0a, 0xcc, 0x51, 0xce, 0x23, 0x0e, 0x23, 0xf3, 0x50, 0xbe, 0xe7, 0x22, 0xb9, 0x89, 0x98, 0x80, 0xe1, 0xd7, 0xb7, 0x3a, 0x49, 0xea, 0x65, 0x45, 0xe2, 0x9c, 0xc0, 0xcd, 0xc7, 0xd6, 0x90, 0x87, 0xd8, 0xba, 0xc2, 0xac, 0x0f, 0x70, 0x8d, 0x07, 0xb0, 0x59, 0xf3, 0xd4, 0xeb, 0xd7, 0x49, 0xbc, 0x34, 0x97, 0x81, 0xd9, 0x45, 0xb2, 0x2a, 0x48, 0x03, 0xb4, 0x4a, 0x85, 0x78, 0x72, 0xe7, 0x08, 0x29, 0x16, 0x69, 0xdb, 0x18, 0x59, 0xeb, 0x2e, 0x88, 0x55, 0xd1, 0xe9, 0x25, 0x15, 0x4a, 0xad, 0xe4, 0xb5, 0x91, 0x3c, 0x98, 0x4b, 0x85, 0x88, 0xb1, 0x6f, 0xad, 0x7f, 0x81, 0x68, 0xd2, 0x86, 0x75, 0x1a, 0xcd, 0xf2, 0x02, 0xd2, 0xa8, 0x6d, 0x3a, 0xd9, 0x99, 0x25, 0x42, 0x8e, 0x89, 0x78, 0x6b, 0xb2, 0xf0, 0x18, 0xe7, 0x20, 0x6a, 0x14, 0x29, 0xd1, 0x02, 0xa4, 0x3b, 0xf3, 0x11, 0xf2, 0x3a, 0xde, 0xde, 0x1f, 0x37, 0xcf, 0x68, 0x04, 0x87, 0x82, 0x38, 0x26, 0xb7, 0x25, 0x29, 0xdb, 0xde, 0x1e, 0x8e, 0x5f, 0x52, 0x14, 0x57, 0x11, 0x94, 0xcc, 0x5b, 0x0c, 0x1e, 0xa9, 0xed, 0xe7, 0x2a, 0x14, 0x3a, 0x8d, 0xe3, 0xb9, 0xb9, 0xe4, 0xa3, 0x73, 0x9c, 0x54, 0xce, 0xab, 0xe1, 0xf5, 0x44, 0x2f, 0xe1, 0x09, 0x6c, 0xd4, 0x68, 0x94, 0x34, 0x77, 0xd7, 0x2a, 0x7c, 0x14, 0xda, 0x34, 0xee, 0xc9, 0x9f, 0xb3, 0x07, 0x45, 0xc5, 0x28, 0xaf, 0x57, 0xb6, 0xd4, 0xfd, 0x7c, 0x7e, 0x21, 0x73, 0x44, 0x4e, 0x7b, 0x85, 0xf4, 0x9c, 0x9d, 0xdb, 0x40, 0x37, 0x1b, 0x57, 0x8b, 0x6a, 0x35, 0x2e, 0xef, 0xe9, 0xe8, 0x32, 0xb5, 0x52, 0x70, 0x1b, 0xd8, 0xeb, 0x43, 0xbb, 0x7a, 0x22, 0x2d, 0x47, 0xe8, 0x4b, 0xf3, 0x73, 0x1b, 0x9d, 0xb9, 0xdc, 0xbe, 0x2b, 0x59, 0xfe, 0xc1, 0xf5, 0xe1, 0x52, 0x48, 0x04, 0xb0, 0x9d, 0xf6, 0x1b, 0xb9, 0x4a, 0x3a, 0xe9, 0x42, 0x63, 0xf6, 0xf9, 0x7a, 0xbd, 0xae, 0x2c, 0x61, 0x05, 0x06, 0x92, 0x51, 0x8a, 0x58, 0x99, 0xa2, 0x47, 0x9c, 0x20, 0x50, 0x81, 0x30, 0xbe, 0x96, 0xa4, 0xcc, 0xdc, 0x1a, 0xa4, 0xd7, 0xce, 0xdb, 0x3e, 0xae, 0x7f, 0xd9, 0x8d, 0xf0, 0xdd, 0xda, 0x86, 0x33, 0x67, 0x8e, 0xbb, 0x79, 0xa7, 0x1b, 0x71, 0x64, 0xe6, 0x80, 0x63, 0x56, 0x15, 0xb8, 0x66, 0x85, 0xc1, 0xad, 0x3b, 0xc5, 0xe5, 0xcc, 0xce, 0x76, 0xfb, 0x10, 0x32, 0x87, 0x2e, 0xca, 0x60, 0x37, 0xfb, 0x1a, 0x43, 0x17, 0x7d, 0x20, 0x9b, 0xcb, 0xc9, 0xff, 0x5d, 0x1b, 0x41, 0x70, 0x07, 0x1c, 0x5e, 0xe3, 0x34, 0x1c, 0xe9, 0xe7, 0x5b, 0xc4, 0x23, 0x37, 0xc2, 0xc3, 0xf9, 0x81, 0xec, 0xd9, 0xe8, 0xab, 0x40, 0xda, 0xa7, 0x3e, 0x11, 0xbc, 0x41, 0xae, 0xf2, 0x31, 0x47, 0x9b, 0xb4, 0x84, 0x24, 0xeb, 0xbf, 0xea, 0x41, 0x5c, 0x5d, 0xa2, 0x9b, 0x03, 0xf2, 0x19, 0x4e, 0xe7, 0xbf, 0xa3, 0xca, 0x99, 0x17, 0x3f, 0xf7, 0xe2, 0x01, 0xbd, 0x8c, 0xa5, 0x22, 0x69, 0xfa, 0x99, 0x56, 0x41, 0x53, 0x95, 0x57, 0x90, 0xf7, 0x36, 0xba, 0x01, 0x98, 0x7d, 0xce, 0x74, 0x5a, 0x5f, 0xaf, 0x2b, 0x69, 0x3a, 0xba, 0xb4, 0xf0, 0xe8, 0x3a, 0xc5, 0xc5, 0x32, 0xb4, 0x39, 0x88, 0xbf, 0x90, 0x04, 0x8d, 0x55, 0x4e, 0x6a, 0xf0, 0xab, 0xce, 0x1e, 0xc9, 0xca, 0xcd, 0xc6, 0xcd, 0xae, 0xa6, 0xd8, 0x86, 0xf8, 0x61, 0xc4, 0xb9, 0x74, 0x6f, 0x63, 0x4f, 0x71, 0x85, 0x0d, 0xec, 0xe1, 0x90, 0xe6, 0xd4, 0x29, 0x38, 0xee, 0x0b, 0x05, 0x97, 0x1e, 0xfb, 0xa1, 0xe3, 0xd2, 0xcb, 0x31, 0xa6, 0xb7, 0x49, 0x76, 0xdc, 0x15, 0xf7, 0xe3, 0xb7, 0x27, 0xee, 0xf1, 0xf5, 0x80, 0xeb, 0x27, 0x67, 0xa1, 0x60, 0xde, 0x00, 0xae, 0xff, 0xf2, 0x4c, 0xde, 0x30, 0xee, 0xce, 0x40, 0x96, 0x8a, 0x28, 0x45, 0xba, 0x89, 0xfb, 0x15, 0x1e, 0xdf, 0x4f, 0x9f, 0x45, 0xcc, 0x33, 0x7b, 0x1d, 0x8f, 0x22, 0xc5, 0xd8, 0x2c, 0x64, 0x9e, 0x49, 0x3f, 0x89, 0x30, 0x50, 0x01, 0x17, 0x18, 0x1f, 0xd9, 0x86, 0xfd, 0xf9, 0xea, 0x8d, 0x1c, 0x7c, 0x75, 0x28, 0xc3, 0xc1, 0x47, 0x4a, 0x82, 0xb0, 0x46, 0x2e, 0xf1, 0x98, 0x75, 0xab, 0xc0, 0x91, 0xe2, 0x36, 0x1c, 0x87, 0x0c, 0x27, 0x49, 0xdd, 0xc7, 0xbb, 0xb4, 0x54, 0xdc, 0x43, 0x10, 0xce, 0x91, 0x49, 0x79, 0x1d, 0x53, 0x16, 0x4b, 0xc3, 0xb8, 0x66, 0x4b, 0x53, 0xd9, 0x9b, 0xb4, 0x32, 0x8e, 0xd3, 0xf5, 0xe4, 0x7a, 0x99, 0xe0, 0x34, 0x21, 0x85, 0x9f, 0x59, 0xbb, 0x69, 0xa8, 0x82, 0x6b, 0x14, 0x1c, 0x0d, 0x8a, 0xcb, 0x99, 0x87, 0x14, 0x6f, 0x1e, 0xd6, 0x64, 0x26, 0xcf, 0xf6, 0x3a, 0x4a, 0x6a, 0x9c, 0xb4, 0xa3, 0xa3, 0x8a, 0xcf, 0xe6, 0x43, 0xe1, 0x17, 0x04, 0xa4, 0xd0, 0x64, 0xf1, 0x6a, 0x09, 0x97, 0xe1, 0xd5, 0xec, 0xb4, 0x2f, 0x12, 0xf8, 0xeb, 0x68, 0x69, 0x0c, 0xeb, 0x42, 0x5c, 0xb1, 0x51, 0x70, 0x9d, 0xb1, 0x1e, 0x9d, 0xb4, 0xa0, 0x76, 0xf2, 0x32, 0xac, 0x23, 0xef, 0xb8, 0x69, 0x4a, 0x4e, 0xdc, 0x93, 0xb0, 0x6c, 0xb0, 0x90, 0x74, 0x77, 0x89, 0x5d, 0xbe, 0x5d, 0xec, 0xf2, 0x5a, 0xf5, 0x1c, 0xf9, 0x66, 0x54, 0xcf, 0x50, 0xfe, 0xcf, 0x16, 0x96, 0xbe, 0xa1, 0x5e, 0x7d, 0xb0, 0x5d, 0xbd, 0x06, 0x12, 0xfb, 0x6f, 0x39, 0x9d, 0x96, 0x5b, 0xa7, 0x59, 0x11, 0x37, 0xa0, 0xa2, 0x4d, 0x8c, 0x27, 0x1b, 0x81, 0x38, 0x5e, 0x66, 0x6f, 0x2d, 0xcd, 0xd1, 0xcd, 0xb4, 0x92, 0xd0, 0x01, 0x15, 0xb2, 0xc9, 0x3c, 0x33, 0x66, 0x67, 0x3d, 0x71, 0x46, 0x1c, 0x1d, 0xb0, 0x43, 0x0e, 0x20, 0x2d, 0xce, 0xa7, 0x14, 0xf6, 0xa7, 0x4d, 0x2a, 0xc3, 0xb2, 0x16, 0x1c, 0x2d, 0xba, 0x59, 0x16, 0x37, 0x9c, 0x0d, 0xd8, 0x72, 0xe2, 0xe8, 0x5d, 0xa4, 0x1d, 0xc0, 0x37, 0x14, 0x84, 0x73, 0xda, 0x79, 0x5f, 0xf9, 0xcb, 0x20, 0x51, 0x92, 0x02, 0xc1, 0xf1, 0xb2, 0x56, 0xc1, 0x99, 0x27, 0x8d, 0x65, 0x01, 0x38, 0x43, 0xba, 0x07, 0xe4, 0x9f, 0x19, 0x21, 0x77, 0x96, 0x8a, 0x8e, 0xf0, 0xfd, 0xca, 0x7c, 0x5a, 0xdd, 0x91, 0x42, 0x6d, 0x1f, 0x55, 0xca, 0xb5, 0xae, 0x7a, 0xc4, 0xc2, 0x21, 0x68, 0xe8, 0x52, 0x69, 0xad, 0xe1, 0xf8, 0x1d, 0x73, 0xc0, 0x1c, 0xda, 0x55, 0x73, 0xb3, 0xbb, 0xca, 0x89, 0xbb, 0x6a, 0x89, 0x61, 0xa9, 0x8c, 0xfb, 0xaa, 0x04, 0xa9, 0x83, 0xbe, 0x84, 0x43, 0xdb, 0x5d, 0xb2, 0x37, 0x4c, 0xf7, 0x82, 0x69, 0xdc, 0x40, 0xbf, 0xb7, 0x12, 0x52, 0xe3, 0x0a, 0xe7, 0xbc, 0xd8, 0x0b, 0xf1, 0xf7, 0xe5, 0x9c, 0x91, 0x15, 0xe3, 0xf9, 0x08, 0x4e, 0xc2, 0xda, 0x1b, 0x68, 0xaf, 0x2e, 0x01, 0xae, 0xb5, 0xfc, 0x16, 0xb5, 0xde, 0x72, 0xc7, 0x26, 0xac, 0xa2, 0xb6, 0x19, 0x6b, 0xcc, 0xd0, 0xb8, 0x82, 0x77, 0xef, 0xde, 0x23, 0x2b, 0x8e, 0xac, 0x08, 0x7f, 0xbf, 0x1c, 0x74, 0x2d, 0xde, 0x27, 0x4f, 0xc6, 0x13, 0x53, 0xdb, 0xc3, 0x7f, 0x74, 0xac, 0xfc, 0x7f, 0x6c, 0xac, 0xe8, 0xee, 0xd2, 0x69, 0x96, 0x96, 0x93, 0xfc, 0x48, 0xb7, 0x61, 0xfb, 0xf2, 0xb8, 0x89, 0x78, 0x57, 0x8a, 0xb9, 0xfb, 0x4e, 0x7c, 0x2e, 0x74, 0x4c, 0xc2, 0xf9, 0x2a, 0x90, 0xc3, 0xf6, 0x2a, 0x21, 0xf3, 0x96, 0xad, 0x87, 0xa8, 0xb9, 0x58, 0x5f, 0x5a, 0xa7, 0x03, 0xb1, 0x74, 0x9c, 0x7f, 0x71, 0x7b, 0x27, 0x9b, 0x59, 0x2a, 0xba, 0x55, 0xd8, 0x36, 0x15, 0x1c, 0x78, 0x07, 0x68, 0x3c, 0xf8, 0x36, 0xd1, 0x4a, 0xb3, 0x44, 0x50, 0xb5, 0x0b, 0xeb, 0x50, 0x8c, 0x5d, 0xd0, 0x2d, 0xd5, 0xf4, 0x39, 0x0d, 0xab, 0xb6, 0xc1, 0xb5, 0x7d, 0x7d, 0xd3, 0xab, 0xe0, 0x9a, 0x39, 0x07, 0x53, 0xcb, 0x5d, 0x8b, 0x21, 0xa0, 0x78, 0x88, 0x8a, 0x53, 0xa6, 0x39, 0xef, 0xd7, 0x62, 0xf3, 0xe4, 0x45, 0x30, 0xf6, 0xd6, 0x59, 0x18, 0x8b, 0x9b, 0x57, 0x2d, 0xdf, 0xd7, 0x77, 0x1f, 0xe6, 0xb6, 0x3f, 0xc2, 0x9c, 0xc9, 0x63, 0xae, 0x26, 0x96, 0x13, 0x7d, 0x5f, 0x0e, 0x8a, 0xbb, 0x66, 0x01, 0x53, 0x05, 0xfc, 0x48, 0x81, 0x06, 0x41, 0x2c, 0x62, 0xff, 0x96, 0xd3, 0x3d, 0xab, 0x83, 0xb8, 0xd7, 0x74, 0x5e, 0x3b, 0xb2, 0xba, 0x19, 0xe3, 0xef, 0x56, 0x3b, 0x9c, 0x6e, 0x28, 0x91, 0xd9, 0xeb, 0xdd, 0xe8, 0x3b, 0x38, 0x43, 0x8f, 0xbb, 0x72, 0xc6, 0x73, 0x39, 0xf5, 0x9c, 0x6a, 0x75, 0x63, 0xc3, 0x3a, 0x81, 0x31, 0xd4, 0x5e, 0x53, 0x57, 0xd7, 0x6f, 0x40, 0x8c, 0xdc, 0xa1, 0x58, 0xf8, 0x04, 0x90, 0x31, 0xd4, 0xd8, 0x20, 0xf4, 0x23, 0xce, 0xa7, 0x79, 0x8a, 0x74, 0x4e, 0x11, 0x04, 0xe7, 0xb3, 0x39, 0x7d, 0x1b, 0x5b, 0x98, 0x96, 0xf0, 0xe7, 0xd1, 0x92, 0x6f, 0x94, 0xf3, 0x57, 0x6b, 0xb2, 0xf7, 0xc6, 0x74, 0x8f, 0x1e, 0x0e, 0xa6, 0xa5, 0xfd, 0x39, 0x7f, 0x1e, 0xe6, 0x4c, 0x69, 0xf2, 0x1a, 0xea, 0x57, 0x36, 0x69, 0x1a, 0x03, 0x84, 0xa7, 0x6f, 0xd1, 0x60, 0x56, 0x49, 0xfa, 0x5e, 0xbf, 0xfa, 0x02, 0xe4, 0xe3, 0x99, 0x2c, 0xf8, 0x0c, 0x69, 0x9a, 0x76, 0x8a, 0xa0, 0xa0, 0x9d, 0x90, 0xc8, 0xb5, 0xc7, 0x70, 0x1c, 0x99, 0x23, 0xa0, 0x48, 0x4b, 0x00, 0x31, 0x3f, 0x71, 0xef, 0xc6, 0xfc, 0x1e, 0x4c, 0x63, 0x4a, 0x47, 0x3d, 0x50, 0x1a, 0x8c, 0xad, 0x48, 0x58, 0x35, 0x7e, 0xc5, 0x50, 0xfa, 0x2c, 0xab, 0x23, 0x0a, 0x72, 0x21, 0xc3, 0xcd, 0x0e, 0xed, 0xf4, 0xb6, 0x10, 0xbe, 0x45, 0xf7, 0xc3, 0x8c, 0xd5, 0xb1, 0xce, 0xb8, 0xc0, 0xc8, 0x08, 0x4b, 0x4f, 0x34, 0xe2, 0x1a, 0xb8, 0x67, 0x6f, 0xaf, 0x62, 0x91, 0x1b, 0x38, 0x36, 0xdc, 0xb8, 0x7c, 0xfb, 0xf2, 0x8e, 0x4b, 0x4a, 0x58, 0x6e, 0x68, 0x5c, 0x2e, 0xb4, 0x17, 0x28, 0xdc, 0x35, 0xf9, 0x54, 0x6b, 0xd7, 0x3d, 0xe4, 0x39, 0x3b, 0x61, 0xb7, 0xb7, 0x42, 0x21, 0x43, 0xa9, 0x82, 0xb0, 0x41, 0xae, 0xcd, 0x94, 0xb4, 0x60, 0x7e, 0x2a, 0x29, 0x3d, 0xbf, 0x5f, 0x36, 0x93, 0x7e, 0x2b, 0x9e, 0x2b, 0x79, 0xa5, 0x70, 0x36, 0xd6, 0x35, 0x6b, 0xef, 0xf2, 0xb0, 0x41, 0x19, 0x12, 0x12, 0xfe, 0xf7, 0xd6, 0xc2, 0x61, 0x3e, 0x87, 0x24, 0x07, 0xc8, 0x1d, 0xd0, 0xab, 0x3b, 0xf5, 0x24, 0xc7, 0x3d, 0xb7, 0xe4, 0xea, 0x66, 0xa4, 0x14, 0x62, 0xeb, 0xc5, 0xaa, 0xb7, 0x5b, 0xf6, 0xf4, 0x3a, 0x42, 0x64, 0xb5, 0xe1, 0xf1, 0x02, 0x65, 0x1a, 0x42, 0x7f, 0x4b, 0xc2, 0x9a, 0xc6, 0x0e, 0x71, 0xad, 0x4c, 0x11, 0x1c, 0xed, 0x44, 0x6e, 0x6c, 0x7d, 0xc2, 0xcc, 0x33, 0x7f, 0x2c, 0x3d, 0x3e, 0x56, 0xa1, 0xf7, 0xc4, 0xf8, 0x03, 0xc1, 0x4a, 0x84, 0x19, 0x7d, 0xf1, 0x69, 0x2e, 0x84, 0x98, 0xbc, 0x82, 0x2d, 0xf8, 0xd4, 0xc3, 0xd4, 0x52, 0x89, 0x9c, 0x14, 0xdc, 0x5c, 0x85, 0x74, 0x77, 0x3f, 0x83, 0x6b, 0x8c, 0xb4, 0xd9, 0x08, 0xc2, 0xe4, 0x31, 0x1e, 0xfb, 0x99, 0xb8, 0x85, 0x52, 0x5d, 0xad, 0x64, 0xeb, 0xe2, 0xdb, 0x07, 0x99, 0x9f, 0x1b, 0x6d, 0x5e, 0xc7, 0xb5, 0x2c, 0x24, 0xef, 0xab, 0xa4, 0xeb, 0xf6, 0x7c, 0x85, 0x80, 0xb6, 0x8f, 0x17, 0x50, 0xbb, 0xe2, 0x75, 0xcc, 0x35, 0x2e, 0x61, 0xfe, 0xcc, 0x15, 0xa4, 0x4f, 0xf9, 0x4d, 0x71, 0xa7, 0x96, 0x93, 0xde, 0x91, 0xcf, 0xed, 0x2f, 0x94, 0x83, 0xda, 0x3b, 0xf2, 0xa8, 0xfe, 0x9d, 0x02, 0x8a, 0x6b, 0xed, 0x61, 0x3f, 0x9e, 0xc7, 0x9b, 0xd7, 0x31, 0x97, 0xb8, 0x57, 0x68, 0xaf, 0x08, 0x0e, 0x37, 0xeb, 0x0a, 0x18, 0xb5, 0xb1, 0xcd, 0x0d, 0x9d, 0x87, 0x5d, 0xfa, 0xb1, 0x25, 0xc8, 0x00, 0x67, 0xc4, 0x08, 0x13, 0xac, 0x9f, 0x45, 0xe7, 0xc5, 0x24, 0x67, 0xcc, 0x0d, 0x1e, 0x83, 0x2b, 0x17, 0xa9, 0x61, 0xb3, 0xc6, 0x7f, 0x39, 0x5f, 0x62, 0x34, 0x7d, 0x9d, 0x31, 0x92, 0xd9, 0x59, 0x58, 0x8d, 0xf8, 0x04, 0xc9, 0xbd, 0x2b, 0xac, 0x41, 0xb7, 0x5b, 0xf8, 0x4d, 0x13, 0x72, 0xee, 0xd7, 0x15, 0xa7, 0xd0, 0x03, 0x78, 0x35, 0x15, 0xb8, 0xd9, 0x9f, 0xa6, 0x93, 0x6a, 0x5c, 0x3b, 0x7d, 0x0e, 0x14, 0x4c, 0x0f, 0x43, 0x21, 0xd2, 0x86, 0xf6, 0x91, 0xc5, 0xcc, 0x4d, 0x94, 0x1f, 0xac, 0x06, 0xfb, 0xf4, 0x1a, 0xf0, 0x49, 0xcf, 0x12, 0x74, 0x13, 0x30, 0x4e, 0xae, 0x0e, 0x5d, 0x34, 0x5b, 0x1d, 0xe6, 0xe9, 0x44, 0xad, 0x9b, 0x89, 0xfb, 0xcd, 0x12, 0xb3, 0xa5, 0x02, 0x87, 0xeb, 0x92, 0x87, 0x7a, 0xdb, 0x4d, 0x8a, 0x89, 0xa5, 0x58, 0x64, 0x9e, 0x6f, 0x4d, 0xee, 0xd6, 0x0e, 0xa9, 0xbb, 0xa2, 0x59, 0xd9, 0xec, 0xe8, 0xf4, 0x20, 0x94, 0x27, 0x4c, 0x8d, 0xaf, 0x81, 0x4b, 0xb1, 0x8d, 0xc7, 0x8f, 0x96, 0x80, 0xae, 0x57, 0xfb, 0x68, 0x7f, 0x31, 0x0d, 0x33, 0xaa, 0x9d, 0x7f, 0xb8, 0x4f, 0x5d, 0x66, 0xc1, 0x71, 0x14, 0xd0, 0xd2, 0x09, 0xe4, 0x73, 0xd7, 0x57, 0x02, 0x7e, 0xa4, 0x06, 0xeb, 0xbe, 0x1f, 0x8c, 0x0c, 0xc7, 0x4d, 0x74, 0xe3, 0xaa, 0xd0, 0xf8, 0xda, 0xab, 0xb4, 0xdb, 0x6d, 0xd5, 0xe5, 0x00, 0xc2, 0xa6, 0x05, 0xaf, 0x4e, 0x40, 0x78, 0x41, 0x17, 0x69, 0x72, 0xff, 0x42, 0x7f, 0x67, 0x41, 0xa6, 0x1d, 0x3d, 0x88, 0xd3, 0x35, 0xc6, 0x9d, 0xb8, 0x4e, 0xec, 0xf8, 0xf4, 0x68, 0xbc, 0x70, 0x9c, 0x7e, 0xe0, 0xa3, 0xf1, 0x2c, 0xfe, 0xb2, 0x44, 0xf1, 0xe0, 0xc8, 0x35, 0xb2, 0xc6, 0xe3, 0xa3, 0x5c, 0x4b, 0x16, 0x23, 0x52, 0x10, 0x57, 0xcb, 0xde, 0x9d, 0x2c, 0x11, 0x50, 0x49, 0xe0, 0x29, 0x42, 0x6f, 0xc7, 0x19, 0x75, 0x4f, 0xf2, 0x58, 0xdc, 0x41, 0x6f, 0x08, 0x3c, 0xae, 0x70, 0x49, 0x8e, 0x33, 0x77, 0x9c, 0xe6, 0x1d, 0x59, 0x40, 0x6c, 0x40, 0x08, 0x2c, 0x70, 0x95, 0x9a, 0xd8, 0xb3, 0x89, 0xb0, 0x26, 0x33, 0x72, 0x56, 0x8f, 0x8d, 0x96, 0x7e, 0xd3, 0xe7, 0x85, 0x12, 0x9c, 0x33, 0xe9, 0xc1, 0x3a, 0x30, 0x3e, 0x38, 0x1b, 0x4c, 0x0f, 0x46, 0x10, 0xe7, 0x9a, 0x63, 0xaf, 0x76, 0xd4, 0xf0, 0x0d, 0x93, 0x7d, 0xbc, 0x44, 0x49, 0x56, 0x1f, 0xa6, 0x5c, 0xb2, 0x07, 0x1d, 0x86, 0x14, 0xd8, 0x27, 0xe1, 0x89, 0x8c, 0xe3, 0x39, 0x7a, 0x26, 0xcd, 0x53, 0xa2, 0x5d, 0xed, 0xd4, 0x76, 0x35, 0xc9, 0xda, 0x68, 0x32, 0x3f, 0xe3, 0xcf, 0x00, 0x1f, 0x69, 0xe7, 0x20, 0x6d, 0x60, 0xf1, 0x9a, 0xf1, 0xdb, 0xcc, 0xdf, 0xa6, 0x9f, 0x7c, 0x84, 0xd8, 0x37, 0x3d, 0x19, 0xf1, 0xa9, 0xc0, 0x6b, 0x16, 0x65, 0x6e, 0x90, 0x0b, 0x3a, 0x91, 0xd1, 0x3b, 0x2c, 0x2d, 0x0d, 0xfa, 0x43, 0xbc, 0x5e, 0x4d, 0x0c, 0xb3, 0x1c, 0x2c, 0x61, 0x13, 0xcb, 0xd0, 0x5e, 0x4b, 0x91, 0x3a, 0x11, 0x52, 0x36, 0x1d, 0x59, 0xf8, 0xae, 0x97, 0xae, 0x49, 0xd3, 0xb6, 0x59, 0xef, 0x95, 0x6a, 0xb3, 0x80, 0x4b, 0x81, 0x4a, 0x59, 0xf3, 0xa6, 0x4d, 0xa7, 0x19, 0x9d, 0x64, 0xb8, 0x5b, 0x0b, 0xe8, 0xdc, 0x72, 0xe3, 0x49, 0x94, 0x3e, 0xd5, 0x88, 0x2f, 0x7e, 0x67, 0xb9, 0xe6, 0x2d, 0x9c, 0xe4, 0xa9, 0x36, 0x66, 0x74, 0x11, 0xb3, 0x71, 0x7d, 0x37, 0x9e, 0x6e, 0xb8, 0xba, 0x3d, 0x58, 0xc7, 0x84, 0x39, 0xd7, 0xd4, 0xbe, 0xfa, 0x17, 0xe9, 0xac, 0x63, 0xd9, 0xd1, 0x5c, 0x8e, 0x97, 0x71, 0xe5, 0x73, 0x59, 0x84, 0x21, 0x0e, 0xcc, 0xa1, 0x28, 0xf9, 0xb2, 0x07, 0x64, 0x01, 0x03, 0x49, 0x77, 0x86, 0xd3, 0xc4, 0x99, 0xfc, 0xa1, 0x77, 0xb2, 0xd0, 0x91, 0xd3, 0xdf, 0xa8, 0xe1, 0xf9, 0xe7, 0xf1, 0xc6, 0x48, 0x1a, 0xa9, 0x27, 0x40, 0xe7, 0x9f, 0xbd, 0x5f, 0xe3, 0x0d, 0x33, 0x95, 0x2a, 0xa4, 0x5d, 0x86, 0xd2, 0xa7, 0x60, 0x76, 0xa4, 0x0a, 0x35, 0x4a, 0xd5, 0x34, 0x4e, 0xe3, 0xed, 0x84, 0x86, 0xc3, 0x9e, 0x11, 0x2b, 0xce, 0x33, 0x89, 0xd7, 0x9b, 0x8f, 0xd6, 0x9b, 0xe3, 0xe6, 0xf5, 0x46, 0xfc, 0xda, 0xad, 0x60, 0x67, 0x7e, 0xed, 0x2a, 0xfc, 0xde, 0x1a, 0x7d, 0x4f, 0xd0, 0xb5, 0xb8, 0xe6, 0xaa, 0x74, 0xf0, 0x6a, 0x31, 0xd8, 0xe7, 0x5e, 0x80, 0x00, 0xdd, 0xcf, 0x7a, 0x2d, 0x5e, 0x93, 0x37, 0x0a, 0x64, 0x81, 0xe7, 0xd4, 0xb3, 0x16, 0x6f, 0x27, 0xd4, 0x41, 0x04, 0xbf, 0x1b, 0x20, 0x4a, 0x5a, 0x88, 0xbe, 0x6f, 0x3e, 0xd0, 0x09, 0x61, 0x90, 0x1e, 0xc0, 0xb5, 0xf9, 0x00, 0xae, 0xcd, 0x07, 0x70, 0x6d, 0xd6, 0x5e, 0xc0, 0x1c, 0x9a, 0xce, 0xd8, 0x0f, 0xb6, 0xd2, 0x7d, 0x14, 0x8e, 0xf2, 0x14, 0xba, 0xad, 0xf1, 0x9a, 0xd8, 0xaf, 0x21, 0xa7, 0xec, 0x26, 0x5b, 0xde, 0x05, 0x29, 0xc3, 0xe0, 0xb3, 0xc9, 0x7c, 0x8d, 0xda, 0xb4, 0xda, 0x6b, 0xe4, 0x09, 0xf3, 0x7a, 0x99, 0xbb, 0xd1, 0xa0, 0xa7, 0x95, 0x35, 0x4e, 0x49, 0x81, 0x76, 0xa6, 0x5f, 0x16, 0xb0, 0xc2, 0x31, 0xc9, 0x95, 0x2b, 0x5a, 0x8f, 0xd0, 0x32, 0x9b, 0xfb, 0x31, 0xe6, 0xd4, 0xe4, 0xa6, 0x61, 0x26, 0xc3, 0x47, 0x23, 0x42, 0x23, 0x8f, 0xbe, 0x46, 0xe6, 0xb2, 0x33, 0xe5, 0x6c, 0x30, 0xe0, 0x3a, 0x8e, 0x41, 0x61, 0xf8, 0x4d, 0x90, 0xe5, 0x22, 0xda, 0x59, 0xcc, 0x0f, 0x2b, 0x48, 0xe3, 0xa7, 0xf3, 0x90, 0xfe, 0x13, 0x72, 0x7b, 0x75, 0x85, 0x69, 0xbc, 0x42, 0x40, 0x02, 0x7b, 0x83, 0xfd, 0xae, 0x84, 0x35, 0x65, 0x1d, 0xf9, 0x86, 0xbc, 0x3c, 0x6b, 0xd3, 0x9e, 0x71, 0x53, 0x6c, 0x9b, 0x33, 0xd7, 0xc5, 0x37, 0xa5, 0xb1, 0x95, 0x71, 0x13, 0x79, 0xcc, 0x24, 0x7f, 0xb3, 0x52, 0x99, 0x38, 0x85, 0xe5, 0x06, 0xc6, 0x22, 0x07, 0x12, 0xf9, 0x44, 0x43, 0x79, 0x91, 0x3a, 0xc8, 0xd2, 0x05, 0x94, 0xc2, 0xf4, 0xe7, 0xc5, 0x34, 0xa6, 0xca, 0x7d, 0x3e, 0xc7, 0x78, 0xcc, 0x0d, 0xd2, 0x4b, 0xb0, 0x15, 0xb1, 0x69, 0x2b, 0xfe, 0xbe, 0x8c, 0x2b, 0x2f, 0x97, 0xd6, 0x45, 0xd4, 0xef, 0x08, 0x32, 0xbc, 0x46, 0xb8, 0x1f, 0x3a, 0x6f, 0xf0, 0x67, 0xe7, 0xd4, 0x2e, 0xee, 0x80, 0x97, 0x3c, 0xbf, 0x9f, 0xa1, 0xc6, 0xcb, 0xbe, 0x22, 0x49, 0xf6, 0x43, 0x63, 0xe8, 0xa1, 0x90, 0x24, 0xc7, 0x82, 0x71, 0xb7, 0xdc, 0xf8, 0x50, 0x2b, 0xe0, 0xaa, 0xe7, 0xdf, 0x12, 0x69, 0x9a, 0xdc, 0x18, 0xc6, 0x30, 0x7f, 0x97, 0xc8, 0x8d, 0x2f, 0xfc, 0x88, 0x4b, 0x35, 0xce, 0x08, 0x4a, 0x05, 0xe4, 0x9b, 0xbe, 0x86, 0x39, 0x54, 0xa3, 0xae, 0xd9, 0x88, 0x4d, 0xa5, 0xed, 0x83, 0xac, 0xf1, 0x09, 0x4c, 0xe9, 0xcb, 0x9b, 0xe4, 0x98, 0xe0, 0x08, 0x7f, 0x22, 0xac, 0xf4, 0xea, 0xb1, 0xa3, 0xfc, 0xec, 0x1d, 0x48, 0x79, 0x85, 0x8b, 0xc6, 0xc9, 0x82, 0xe7, 0x5f, 0x5f, 0x42, 0xd8, 0xd2, 0x6b, 0xba, 0x49, 0x37, 0xb9, 0x64, 0x36, 0xdd, 0x43, 0xb0, 0x77, 0x6f, 0x51, 0xfb, 0x57, 0x36, 0x79, 0x49, 0x23, 0x20, 0x17, 0x5c, 0x29, 0x03, 0xeb, 0x1f, 0xd6, 0xd9, 0x89, 0x3b, 0x96, 0xe4, 0x37, 0x99, 0xa0, 0xd5, 0x00, 0x78, 0x16, 0x63, 0x9c, 0xa3, 0x4a, 0x68, 0x8b, 0x8d, 0x35, 0x10, 0x76, 0x29, 0xb8, 0x17, 0x5e, 0x09, 0xb1, 0xa2, 0x42, 0xc2, 0xb8, 0xba, 0xee, 0x19, 0x22, 0xcd, 0xde, 0x55, 0x88, 0x19, 0x19, 0x09, 0xd7, 0xda, 0xbe, 0xbc, 0x93, 0x31, 0xc1, 0xf8, 0x25, 0x25, 0x25, 0xf0, 0xf5, 0x34, 0xee, 0x34, 0xd4, 0x17, 0x37, 0x4b, 0xad, 0xea, 0x18, 0xd6, 0xfe, 0x28, 0xe1, 0x54, 0x5d, 0x70, 0x53, 0x89, 0x4a, 0x2e, 0x51, 0xae, 0xc3, 0xd2, 0x9c, 0x19, 0x2c, 0xad, 0x90, 0xb1, 0x34, 0x2e, 0x31, 0x98, 0x2d, 0x21, 0x3c, 0x27, 0x9b, 0xb0, 0x5e, 0xf2, 0xd5, 0x79, 0xcf, 0x6d, 0xc6, 0x44, 0xd3, 0x56, 0xbb, 0x69, 0x4c, 0x5c, 0xb7, 0x1f, 0x93, 0xf1, 0xa3, 0x21, 0xb5, 0x8e, 0xa9, 0xb7, 0x1f, 0x0d, 0x84, 0xad, 0x92, 0xb6, 0x8e, 0x36, 0xfe, 0xd7, 0xc6, 0x05, 0x5a, 0x11, 0xe3, 0xf8, 0xff, 0x60, 0x5c, 0xb0, 0x5e, 0x5b, 0x7a, 0x5c, 0x6e, 0x2d, 0x03, 0x49, 0xd4, 0x9b, 0x4c, 0xda, 0xf3, 0x78, 0x82, 0xd9, 0xbd, 0x50, 0x80, 0x27, 0x59, 0xa1, 0xd3, 0x0b, 0x32, 0xe6, 0x71, 0xe0, 0xba, 0x7c, 0x5d, 0xd0, 0x65, 0xe3, 0x71, 0xd9, 0x5b, 0xca, 0x44, 0x12, 0xdf, 0xb2, 0x00, 0x4f, 0x91, 0xc2, 0xf4, 0x09, 0x42, 0x23, 0x61, 0x6f, 0xd3, 0x64, 0x23, 0xf3, 0xee, 0x8b, 0x41, 0x2e, 0x85, 0x32, 0xe7, 0xbc, 0x25, 0x2d, 0xef, 0xeb, 0x00, 0x7b, 0x11, 0x04, 0x62, 0x1e, 0xb8, 0x33, 0x59, 0x88, 0x98, 0x48, 0x20, 0xb6, 0x3c, 0x6e, 0x9e, 0x11, 0x83, 0x72, 0x45, 0xb2, 0xd7, 0xb9, 0x1e, 0x61, 0xe8, 0x7f, 0xc5, 0xbe, 0x5a, 0xb1, 0x38, 0x96, 0x53, 0x2c, 0x7e, 0x28, 0x47, 0x01, 0x9d, 0x3e, 0x74, 0xd3, 0xaf, 0xaa, 0x48, 0x2f, 0x45, 0x68, 0xc7, 0xd6, 0xd0, 0x3d, 0xa8, 0xcd, 0x5c, 0xc4, 0xd2, 0x8d, 0x85, 0x6f, 0x63, 0x4d, 0xf1, 0x29, 0x64, 0x57, 0x20, 0x61, 0x63, 0xeb, 0x66, 0xf9, 0xa9, 0x9c, 0x3d, 0x08, 0xbf, 0xb0, 0xfc, 0x0e, 0xe1, 0x71, 0x7a, 0x6c, 0x3e, 0x9f, 0x60, 0x92, 0x38, 0x79, 0x73, 0x17, 0xb0, 0x8c, 0x52, 0x1a, 0xf3, 0xb4, 0xb0, 0x34, 0x98, 0x95, 0x30, 0x76, 0xec, 0x67, 0x3e, 0x6b, 0xd5, 0x7c, 0x55, 0xc8, 0x84, 0x8d, 0x01, 0xeb, 0x22, 0x46, 0x5d, 0xf5, 0x45, 0x1d, 0x30, 0x7f, 0x0c, 0xf0, 0xbb, 0x69, 0xcc, 0x89, 0xdf, 0xcd, 0x63, 0x24, 0x33, 0x24, 0xf3, 0xad, 0xfa, 0x4e, 0x9d, 0xce, 0x89, 0x59, 0xdd, 0xc9, 0xbf, 0x26, 0x92, 0x90, 0x23, 0xef, 0x8c, 0xea, 0x7e, 0x3e, 0x31, 0xbf, 0x27, 0x9d, 0x4e, 0x80, 0x6d, 0x97, 0x6c, 0x21, 0x4f, 0x8a, 0x71, 0xb7, 0x8e, 0xbf, 0x79, 0x16, 0xf1, 0xd3, 0xb2, 0x71, 0xf2, 0x5a, 0xc1, 0xb7, 0xcf, 0x40, 0x45, 0x8b, 0x09, 0xbf, 0x2b, 0x5b, 0x68, 0xc5, 0x6e, 0x64, 0x6c, 0x3b, 0xe2, 0x65, 0xcb, 0x44, 0xcf, 0x3f, 0x25, 0x6c, 0x51, 0x50, 0xff, 0xe9, 0x66, 0xdf, 0x9c, 0x91, 0xbb, 0x62, 0x59, 0x35, 0x0b, 0x49, 0x0c, 0x0b, 0x78, 0x42, 0xb0, 0xdf, 0xec, 0x06, 0x23, 0xd9, 0x28, 0x28, 0x6a, 0x03, 0x59, 0x1d, 0x65, 0xed, 0xc7, 0x51, 0x96, 0x5f, 0xe9, 0x1b, 0xaf, 0x17, 0xeb, 0x0c, 0x12, 0xef, 0x03, 0xdc, 0x5d, 0x20, 0xb7, 0xab, 0xa3, 0x9e, 0xf6, 0x31, 0xa2, 0x7e, 0x8f, 0x39, 0x81, 0x4f, 0x05, 0x87, 0x90, 0x8f, 0xd2, 0x49, 0x9c, 0x58, 0x91, 0x8e, 0x83, 0x3b, 0xcf, 0xa5, 0x72, 0xe4, 0x2a, 0xb9, 0x37, 0x0c, 0x0a, 0xdc, 0x79, 0x8a, 0xca, 0x89, 0x7d, 0x91, 0x73, 0x86, 0xeb, 0x9a, 0xdd, 0x05, 0xe9, 0x7a, 0x10, 0xb2, 0x3a, 0x67, 0x26, 0xa5, 0xfd, 0xea, 0x31, 0xfc, 0x3e, 0xa0, 0x1e, 0xc7, 0xef, 0x83, 0xea, 0x09, 0xb7, 0x47, 0xda, 0x6b, 0xf6, 0x60, 0x5b, 0xfe, 0x57, 0x62, 0x0a, 0xb4, 0x07, 0x41, 0xfd, 0x50, 0xc9, 0x5d, 0xa6, 0x86, 0xdb, 0xc7, 0xf2, 0x66, 0xf6, 0xa8, 0xea, 0x98, 0x4d, 0xb1, 0x92, 0xf6, 0x21, 0x85, 0xf0, 0xdb, 0xc6, 0xdf, 0x0e, 0x4c, 0xb5, 0x3c, 0x23, 0x91, 0xb6, 0xca, 0x98, 0x71, 0x29, 0x84, 0xdf, 0x18, 0x2b, 0xc4, 0x4f, 0x41, 0x0f, 0x3d, 0xe5, 0xe3, 0x47, 0x76, 0x14, 0x8f, 0x01, 0xd9, 0xbb, 0x91, 0xf3, 0x4c, 0xbd, 0x7f, 0xab, 0xaa, 0x3f, 0xef, 0xba, 0x8f, 0x2c, 0xb1, 0xe6, 0x04, 0x74, 0x56, 0x1a, 0xa3, 0xd0, 0x08, 0xf3, 0x21, 0x0e, 0x29, 0x58, 0x06, 0x2b, 0xe1, 0x55, 0xd8, 0x9b, 0xe3, 0x83, 0x41, 0x38, 0x08, 0x6b, 0xe1, 0x08, 0x9c, 0x97, 0x7c, 0x52, 0x5c, 0x1a, 0xce, 0x31, 0xe6, 0x58, 0x72, 0x7c, 0xd2, 0xcb, 0xd2, 0x79, 0x69, 0x55, 0x4e, 0x9e, 0xb4, 0x33, 0xc7, 0x97, 0x33, 0x15, 0x3f, 0x76, 0x8c, 0xdb, 0x27, 0xf5, 0x48, 0xc7, 0x60, 0x57, 0x8e, 0x7b, 0x26, 0xe2, 0x75, 0xea, 0x51, 0x05, 0xa4, 0x13, 0xfc, 0xf4, 0x01, 0x3e, 0x1d, 0xe1, 0xa7, 0x63, 0xf8, 0x74, 0x90, 0x9f, 0x8e, 0xe3, 0xd3, 0x1e, 0x7e, 0x3a, 0x81, 0x4f, 0x3b, 0x3f, 0xd7, 0x86, 0xab, 0xe1, 0x14, 0x3e, 0x7d, 0x8f, 0x9f, 0x7e, 0x81, 0x4f, 0xaf, 0xf8, 0x8a, 0xd5, 0x0f, 0xa5, 0xa0, 0x7a, 0x71, 0x66, 0x50, 0xfd, 0xb0, 0x17, 0x73, 0xd2, 0x2f, 0xc6, 0xaf, 0xc1, 0xf9, 0x32, 0xaa, 0xe7, 0xf0, 0xa9, 0x8f, 0x9f, 0xce, 0xe0, 0xd3, 0x52, 0x7a, 0x1a, 0x2b, 0xc4, 0xa7, 0x0e, 0x8f, 0x9b, 0xfc, 0x14, 0x4b, 0x71, 0xaa, 0x1b, 0xc7, 0x09, 0x24, 0xb2, 0x3c, 0x62, 0x4c, 0x80, 0xd4, 0x04, 0xed, 0x80, 0x35, 0x70, 0x99, 0xcb, 0x18, 0x1f, 0xa1, 0xf8, 0x78, 0x41, 0x6a, 0xda, 0xf8, 0xd9, 0xc6, 0xf3, 0xa8, 0x0c, 0x53, 0x9d, 0x42, 0x22, 0xd7, 0xd3, 0x26, 0xec, 0x70, 0x3d, 0xbf, 0x95, 0x4f, 0xc3, 0x34, 0xe5, 0x67, 0x8e, 0xbd, 0x0e, 0x3d, 0x89, 0x4a, 0x45, 0x96, 0xeb, 0x59, 0x66, 0x4b, 0x22, 0xad, 0x6d, 0xdc, 0x29, 0x41, 0x2e, 0x35, 0x4a, 0x92, 0x0d, 0xa9, 0x09, 0x34, 0xff, 0xe4, 0xf1, 0xfb, 0x93, 0x83, 0x37, 0xad, 0x11, 0x6c, 0xd7, 0x1d, 0x07, 0x38, 0x6d, 0xf0, 0xc6, 0xf7, 0xe3, 0xec, 0xb9, 0xa9, 0x0d, 0xcd, 0xeb, 0xe2, 0x79, 0xb4, 0x92, 0xa4, 0x2e, 0x1b, 0x62, 0x5a, 0x54, 0x17, 0xf5, 0x8a, 0xc6, 0xa4, 0xeb, 0xce, 0x3d, 0xbd, 0x72, 0xa8, 0xeb, 0xce, 0xa1, 0xfe, 0xb8, 0x95, 0xc6, 0x07, 0x10, 0x93, 0xa7, 0xb1, 0x49, 0x3d, 0x55, 0x03, 0x7a, 0xfe, 0x99, 0xdc, 0x3e, 0xe6, 0xbe, 0x37, 0x08, 0x2c, 0xc7, 0x84, 0x38, 0x9a, 0x25, 0xee, 0xe7, 0x76, 0x71, 0x5d, 0x37, 0xca, 0x5b, 0x5f, 0x3b, 0x77, 0x53, 0x1b, 0x0b, 0xb0, 0x8d, 0x4e, 0x86, 0xc7, 0xe4, 0x45, 0x9c, 0x25, 0xb7, 0x09, 0xaf, 0xc8, 0x60, 0x15, 0x60, 0x90, 0x8a, 0x30, 0x6e, 0xcc, 0x9d, 0x00, 0xc3, 0xfb, 0x76, 0x7c, 0x57, 0xec, 0x1f, 0xa1, 0x20, 0x9e, 0x3f, 0x6e, 0xb7, 0x8a, 0x16, 0x14, 0x50, 0xd9, 0xbb, 0x70, 0x5e, 0x01, 0x67, 0x08, 0x0e, 0x52, 0x48, 0xbb, 0x6b, 0xde, 0x78, 0x2f, 0x8e, 0x2f, 0xbd, 0x09, 0x76, 0xf0, 0x0c, 0xe6, 0x93, 0x55, 0x60, 0x9e, 0x2f, 0x0b, 0xb4, 0x1b, 0x68, 0xd5, 0x03, 0x6c, 0x91, 0xda, 0xc7, 0x54, 0x7e, 0x5a, 0x9f, 0x4e, 0x01, 0x1b, 0x87, 0xfb, 0xa4, 0x76, 0xf5, 0x02, 0x3e, 0x89, 0xd9, 0x2f, 0x50, 0x52, 0x6e, 0x9a, 0xfb, 0x36, 0x31, 0xdf, 0xd6, 0x25, 0xd0, 0x6e, 0xc4, 0x1a, 0xc4, 0x3e, 0x51, 0x9a, 0x38, 0xd6, 0x94, 0x32, 0xae, 0xed, 0x55, 0xa2, 0x5d, 0x9f, 0xbc, 0xbf, 0x5c, 0x09, 0x73, 0x8c, 0x19, 0x6b, 0xeb, 0xc5, 0x3a, 0x4a, 0x49, 0x56, 0x10, 0x7f, 0x3d, 0x2e, 0xaa, 0xc3, 0xc9, 0x35, 0x1a, 0x95, 0x69, 0xda, 0xde, 0x9b, 0xc2, 0xab, 0xc9, 0xa2, 0xe4, 0xf2, 0xaf, 0x43, 0x31, 0x71, 0xba, 0x1c, 0xfa, 0x38, 0x03, 0x0f, 0x46, 0x84, 0x84, 0xce, 0xe8, 0x2b, 0x45, 0x61, 0xdc, 0x65, 0xfe, 0x65, 0xea, 0x2d, 0xf7, 0x64, 0x66, 0xff, 0xde, 0xbc, 0x3b, 0x7d, 0x88, 0x79, 0x23, 0x76, 0xbe, 0x1b, 0x67, 0xf8, 0x18, 0x73, 0x72, 0xcc, 0xfe, 0x20, 0x62, 0xea, 0x7b, 0x89, 0x3e, 0x2e, 0x0a, 0xaa, 0xc3, 0x18, 0x7f, 0x5c, 0xc4, 0xb3, 0x56, 0xc4, 0x41, 0x2d, 0x7e, 0x7f, 0x97, 0x3a, 0xf4, 0x6c, 0xa2, 0x44, 0x9e, 0x80, 0xed, 0x40, 0x8a, 0xec, 0xba, 0x1b, 0x5b, 0xd1, 0x64, 0x7d, 0x96, 0x3c, 0xc3, 0x26, 0xcc, 0xfc, 0x6b, 0x8c, 0x47, 0xb0, 0xee, 0x63, 0xa4, 0x7b, 0xe9, 0x6f, 0x57, 0x8f, 0x63, 0x9d, 0x07, 0xb1, 0xdd, 0x3b, 0x45, 0xfe, 0x4f, 0x3e, 0x74, 0x43, 0x4a, 0x1d, 0x7c, 0x36, 0x2e, 0xd3, 0xda, 0xe8, 0x32, 0xe1, 0xda, 0x58, 0x7e, 0x33, 0x44, 0x53, 0x60, 0x32, 0x9d, 0x48, 0x4d, 0x45, 0xb5, 0x63, 0x56, 0x51, 0x4e, 0xad, 0xc8, 0xbe, 0x51, 0xe8, 0x33, 0x1a, 0x7a, 0xe5, 0x60, 0xd5, 0xc7, 0x6a, 0x49, 0xaa, 0xd9, 0x8e, 0x10, 0xce, 0x06, 0x8e, 0x74, 0xba, 0x95, 0x53, 0x17, 0x90, 0x74, 0x26, 0x79, 0x7d, 0x3f, 0x3b, 0x88, 0xab, 0x3b, 0xd2, 0x40, 0xf6, 0x93, 0xea, 0xe5, 0x62, 0xf5, 0x99, 0x93, 0xd1, 0x87, 0x82, 0x52, 0x25, 0xe2, 0xb4, 0x81, 0x54, 0xce, 0xe0, 0x1b, 0x63, 0xc6, 0x04, 0x59, 0x8c, 0xa1, 0xdf, 0x7c, 0x6c, 0x65, 0x09, 0xae, 0x7d, 0x89, 0x62, 0xe3, 0xb6, 0x82, 0x00, 0x54, 0x28, 0x56, 0x92, 0x8d, 0x54, 0x55, 0xb5, 0x59, 0xc9, 0x5d, 0xea, 0x3f, 0xda, 0xaf, 0x98, 0xb5, 0x70, 0x43, 0x7a, 0xd4, 0xe2, 0x56, 0x96, 0xe7, 0x36, 0x36, 0x06, 0x07, 0x1a, 0x94, 0xa9, 0x3e, 0xd2, 0xcb, 0x0d, 0x92, 0xa6, 0xf3, 0x50, 0x7f, 0x87, 0x15, 0x9f, 0x23, 0xe2, 0x39, 0x69, 0xc4, 0xfd, 0x72, 0x2c, 0x3d, 0xa2, 0xf1, 0x5c, 0x7b, 0xc4, 0x77, 0x3f, 0x98, 0xb0, 0xcc, 0x22, 0x90, 0xb4, 0x52, 0x61, 0x5d, 0xa9, 0x1a, 0x5d, 0xa9, 0xe3, 0x24, 0xbb, 0x4e, 0xbb, 0x10, 0xcf, 0x2a, 0x53, 0xc2, 0x87, 0x90, 0xfd, 0x72, 0x0c, 0xdf, 0x97, 0x9c, 0xba, 0x6b, 0x2b, 0x38, 0xe2, 0xf9, 0x33, 0xa2, 0xd0, 0xdc, 0x65, 0x14, 0x3d, 0x1f, 0x25, 0xad, 0xf6, 0x13, 0x8a, 0x15, 0xcf, 0x95, 0xcb, 0xb8, 0x4f, 0xff, 0x85, 0xf6, 0x68, 0x0c, 0x4b, 0xc7, 0x95, 0xd2, 0x62, 0xb5, 0xd2, 0x1a, 0x06, 0xf3, 0x93, 0x66, 0xa1, 0xc9, 0xa9, 0x98, 0x30, 0xe6, 0x44, 0x74, 0x0f, 0x9f, 0x8a, 0x7e, 0x75, 0x55, 0x51, 0xb5, 0xba, 0x1a, 0x4b, 0xad, 0xc5, 0xcf, 0x7a, 0xe7, 0x44, 0xa8, 0x9a, 0x08, 0x7e, 0x6c, 0x6b, 0xf4, 0x5d, 0xea, 0x65, 0x74, 0x18, 0xc7, 0x65, 0x95, 0xf6, 0x86, 0x36, 0xb2, 0xba, 0x86, 0xe3, 0xb9, 0x54, 0xa1, 0x53, 0xc7, 0x9a, 0x32, 0x31, 0x9c, 0x30, 0x92, 0x0e, 0x53, 0x37, 0x3c, 0xe3, 0x39, 0xfe, 0x9c, 0x3c, 0x5b, 0x9b, 0xaf, 0xd2, 0x94, 0xf5, 0x46, 0x38, 0x07, 0x0d, 0x64, 0x3b, 0xc0, 0x1c, 0x45, 0xac, 0xa3, 0x19, 0x7f, 0x79, 0x16, 0xcd, 0x15, 0xf6, 0xe0, 0x7d, 0x21, 0xda, 0xed, 0xd0, 0x8c, 0x33, 0xbe, 0x53, 0x67, 0xd5, 0x68, 0x80, 0xe2, 0xb2, 0x7d, 0xf3, 0x03, 0xf5, 0x2e, 0x86, 0xeb, 0x3b, 0xee, 0xb0, 0x06, 0xc1, 0xd8, 0x59, 0x30, 0xb3, 0xc7, 0x00, 0x63, 0x16, 0x7c, 0x36, 0x77, 0xe4, 0x45, 0xdf, 0x4d, 0x19, 0x7e, 0xb1, 0x75, 0x66, 0x10, 0xf7, 0x8c, 0x09, 0x77, 0x82, 0x3c, 0x66, 0xf1, 0x61, 0xce, 0xa2, 0xe8, 0x98, 0x5b, 0x36, 0x6b, 0xeb, 0x62, 0x1f, 0xb6, 0xc0, 0x97, 0x80, 0x89, 0xfb, 0xe5, 0xa0, 0x5d, 0x6b, 0x25, 0x73, 0x86, 0xc1, 0x7c, 0x40, 0x81, 0x89, 0x43, 0xbe, 0x1e, 0x28, 0xfc, 0xc9, 0xb0, 0x3d, 0x22, 0x3f, 0x7f, 0xef, 0x22, 0xb2, 0x03, 0xf6, 0x10, 0x9e, 0xdd, 0x10, 0xc5, 0xef, 0x0f, 0x20, 0xe6, 0xbf, 0x1f, 0x67, 0x38, 0xb4, 0xfe, 0x91, 0x87, 0x42, 0x10, 0xf1, 0xd3, 0xcc, 0x85, 0xd6, 0xe3, 0xcc, 0x61, 0xa8, 0x86, 0x47, 0x70, 0x32, 0x8e, 0xe0, 0x6c, 0x75, 0x35, 0x3f, 0xe7, 0xab, 0x6b, 0x71, 0x97, 0xac, 0xe7, 0x67, 0x9b, 0xba, 0xb1, 0x28, 0xa6, 0x6e, 0xe6, 0xe7, 0x7b, 0xd5, 0x97, 0x70, 0x94, 0xbf, 0xcb, 0xcf, 0x1e, 0xf5, 0x55, 0xfe, 0xb5, 0xaa, 0xdf, 0x2b, 0x6a, 0x1f, 0x93, 0xd5, 0x21, 0xde, 0x59, 0xdb, 0x48, 0xf3, 0xa0, 0x2a, 0x33, 0xd6, 0xd7, 0x03, 0xb4, 0xbf, 0x27, 0x4e, 0xad, 0x3e, 0x97, 0x13, 0xe8, 0x86, 0xb9, 0xd7, 0x7e, 0x3b, 0xe2, 0xc4, 0xf3, 0xd4, 0x9b, 0xe3, 0x45, 0xe8, 0x88, 0xf4, 0xb4, 0x5b, 0xbd, 0x8a, 0xf4, 0xe8, 0xc4, 0xfa, 0x8d, 0x8d, 0x7d, 0x64, 0xff, 0x8b, 0xe0, 0x27, 0xae, 0xe3, 0xbe, 0xf8, 0xf1, 0xa2, 0xaa, 0x31, 0xc0, 0x79, 0x3b, 0x81, 0xe3, 0x22, 0x75, 0xb6, 0x2d, 0xcb, 0xa9, 0x99, 0xc0, 0x23, 0x64, 0x89, 0x0e, 0x4f, 0x0d, 0x80, 0xe1, 0xe4, 0x1b, 0x7f, 0xf9, 0x2c, 0xd6, 0x98, 0x44, 0x08, 0x60, 0xdc, 0xf5, 0xc6, 0x98, 0x7b, 0x61, 0xa1, 0x33, 0xcf, 0x81, 0xf5, 0xd9, 0xb1, 0x3e, 0x7a, 0xbf, 0x3c, 0x61, 0x29, 0x68, 0x63, 0x53, 0xa3, 0x4c, 0xf5, 0xd2, 0x1b, 0xb3, 0xef, 0x9b, 0x80, 0xef, 0xdb, 0xf5, 0x5b, 0xb2, 0x9b, 0x53, 0xd0, 0x88, 0xe5, 0x1b, 0x9f, 0xa5, 0x37, 0xa7, 0x8c, 0xbc, 0x5f, 0x86, 0xac, 0xed, 0x88, 0x6f, 0x9d, 0xe8, 0x68, 0xc6, 0xda, 0xb7, 0x2c, 0xbb, 0x4b, 0x1b, 0x7d, 0x7a, 0x87, 0x31, 0x39, 0xed, 0xf6, 0xef, 0x88, 0xf5, 0x26, 0x6f, 0xf9, 0x96, 0xcb, 0xa7, 0xf8, 0x2d, 0xe2, 0x0d, 0xf9, 0x08, 0x2f, 0x76, 0xc4, 0x56, 0xc5, 0xed, 0x8a, 0x7f, 0x09, 0x94, 0xb9, 0xc1, 0xd4, 0x0d, 0xa5, 0x6e, 0x10, 0xb6, 0x73, 0xa5, 0xe8, 0x30, 0xae, 0x39, 0xa2, 0x0b, 0x4e, 0x34, 0xac, 0x56, 0x4c, 0x8e, 0x1a, 0x17, 0xd6, 0xe6, 0xcb, 0xe3, 0x7d, 0x76, 0xa8, 0x28, 0x32, 0x06, 0x31, 0x84, 0x7c, 0x89, 0x5c, 0x79, 0x36, 0x9e, 0x18, 0x85, 0xda, 0x5b, 0xd7, 0x86, 0xce, 0x81, 0x3d, 0xbd, 0x06, 0x54, 0xd7, 0x43, 0x8b, 0x11, 0x0f, 0x31, 0xe3, 0x77, 0x0c, 0x2c, 0xb8, 0x2f, 0x8e, 0x3d, 0x14, 0x06, 0x2b, 0xad, 0x7f, 0x9c, 0xdf, 0xdc, 0xcf, 0xb6, 0xab, 0xa7, 0x0c, 0x31, 0xfc, 0xfe, 0x85, 0x61, 0xce, 0x8c, 0x76, 0xf5, 0x0c, 0xb8, 0xf0, 0xfb, 0x1c, 0x4c, 0x15, 0xb8, 0xc2, 0x05, 0xf5, 0xa1, 0x20, 0xe4, 0x5b, 0xc3, 0x86, 0xdf, 0x74, 0x98, 0xac, 0x21, 0x43, 0x51, 0xa7, 0x19, 0x82, 0x12, 0x50, 0x1c, 0x6b, 0xd2, 0x15, 0xb1, 0xd6, 0x89, 0xa6, 0x4b, 0xf7, 0x59, 0xb2, 0x2c, 0x74, 0x1f, 0x7e, 0x1b, 0xc1, 0xc1, 0xdf, 0xd3, 0x3f, 0x4b, 0x36, 0x8d, 0x9d, 0x5c, 0xdf, 0x94, 0xea, 0x8f, 0xe0, 0x84, 0x1c, 0xc3, 0x16, 0x39, 0x49, 0xe2, 0x8c, 0xb1, 0x3a, 0x84, 0xd3, 0xd8, 0xee, 0x18, 0xb6, 0x3b, 0x5f, 0x8b, 0x2f, 0x7d, 0x08, 0xeb, 0x30, 0xb4, 0xe2, 0xb7, 0xd5, 0xd0, 0x56, 0xfd, 0x91, 0x34, 0x6d, 0x46, 0xcc, 0x90, 0xa4, 0xb9, 0xf6, 0x03, 0xcd, 0x71, 0xa7, 0xd4, 0x65, 0x7e, 0x28, 0x64, 0xe8, 0xc6, 0x74, 0x8f, 0x61, 0x09, 0x7f, 0x2f, 0xe5, 0x78, 0x53, 0x97, 0x34, 0x23, 0x64, 0x58, 0x36, 0x63, 0x8e, 0xe1, 0x25, 0xdc, 0x3f, 0xb6, 0x44, 0x39, 0xce, 0x15, 0x62, 0x71, 0xf1, 0xa9, 0xd1, 0xa4, 0x14, 0x10, 0x1c, 0xe0, 0xe8, 0xe6, 0x19, 0x41, 0x43, 0x0a, 0x16, 0x83, 0x4d, 0xaa, 0xc4, 0xb3, 0x76, 0x0a, 0xc2, 0x99, 0x33, 0x82, 0xa3, 0xa1, 0x8d, 0xd2, 0x4e, 0x4a, 0x8f, 0xbd, 0x66, 0x48, 0xc5, 0x31, 0x0d, 0x31, 0xf1, 0x56, 0xd8, 0xac, 0x2f, 0x89, 0x58, 0x0a, 0xa5, 0xc1, 0x84, 0xf5, 0x0a, 0x18, 0x1f, 0x0b, 0x9d, 0x93, 0xce, 0x29, 0x36, 0xda, 0xa5, 0x71, 0x53, 0xe8, 0x5c, 0x8e, 0x51, 0x31, 0xe2, 0x77, 0x61, 0x8a, 0xac, 0x15, 0x0f, 0xd0, 0xbb, 0xd5, 0x13, 0x9d, 0x78, 0x9a, 0x2c, 0x7f, 0xcd, 0xb0, 0x0c, 0x7b, 0x59, 0x90, 0xf0, 0x87, 0x83, 0xb6, 0x22, 0x43, 0x0c, 0xe1, 0xf2, 0x34, 0x7e, 0x9a, 0x83, 0x4f, 0x32, 0xf6, 0x9b, 0xe8, 0x74, 0x2b, 0x63, 0x91, 0x26, 0xdf, 0xbb, 0xf3, 0x82, 0x89, 0x88, 0xff, 0xcf, 0xac, 0x21, 0x9c, 0xd7, 0x4b, 0x4a, 0x05, 0xe5, 0xcf, 0xc3, 0x9c, 0x43, 0x10, 0xb7, 0x86, 0xf1, 0x19, 0xc7, 0xd2, 0x60, 0x98, 0x83, 0x50, 0xc9, 0x10, 0x37, 0x7f, 0x36, 0x68, 0x98, 0x43, 0x71, 0xb7, 0xaa, 0x55, 0x31, 0xd2, 0x79, 0xe9, 0xb9, 0xc3, 0xb4, 0x0a, 0x4f, 0xc5, 0x12, 0xf9, 0x0e, 0x92, 0xb3, 0x54, 0x4b, 0xe4, 0x1a, 0x3b, 0xbe, 0x25, 0x5c, 0x30, 0xd8, 0x1f, 0xbf, 0x56, 0x14, 0x1a, 0x03, 0x92, 0x47, 0x1e, 0x9b, 0xc5, 0xdf, 0x41, 0xfe, 0x0e, 0x95, 0x4c, 0x66, 0x9e, 0x76, 0xd9, 0x32, 0xa8, 0x98, 0x1a, 0xfa, 0x6d, 0x33, 0xc4, 0x5c, 0x63, 0x25, 0x71, 0x59, 0xac, 0x66, 0x61, 0x39, 0x66, 0xa9, 0x94, 0x5e, 0xd3, 0x94, 0x4e, 0xf2, 0xc7, 0x63, 0x25, 0xef, 0xac, 0x8e, 0xbf, 0x8f, 0x23, 0x9e, 0x97, 0x70, 0xe0, 0xa8, 0xac, 0x97, 0x6b, 0x1a, 0x57, 0xc5, 0x10, 0x63, 0x19, 0x57, 0x2a, 0x87, 0x25, 0x88, 0x6a, 0x1a, 0x9f, 0x55, 0x4c, 0xcb, 0xa0, 0x04, 0x5b, 0xb1, 0x0b, 0x77, 0x4e, 0xfb, 0xe1, 0xa2, 0xd9, 0x84, 0x3b, 0x1b, 0x1f, 0x67, 0x6d, 0xd3, 0x21, 0xbd, 0xb6, 0xa9, 0x13, 0xee, 0x27, 0x6d, 0xd3, 0xca, 0xd0, 0xb9, 0x09, 0x53, 0xdf, 0x3a, 0x37, 0xc1, 0x9e, 0x28, 0x75, 0x79, 0x26, 0x4c, 0x95, 0xad, 0xae, 0x88, 0x07, 0x4b, 0xbb, 0x40, 0x99, 0x6a, 0xf7, 0x40, 0x41, 0x22, 0xcf, 0x51, 0x04, 0x53, 0x70, 0xf6, 0xaa, 0xb0, 0xf6, 0xa1, 0x58, 0x30, 0x21, 0x39, 0xea, 0xf8, 0x5e, 0xf2, 0x94, 0x2b, 0x52, 0x54, 0x33, 0x06, 0x42, 0xd6, 0x9e, 0x34, 0x4a, 0xa5, 0x24, 0xe9, 0x98, 0x4a, 0xad, 0xa4, 0x63, 0x2a, 0xa5, 0x94, 0xbc, 0x19, 0x49, 0xe3, 0x51, 0x8c, 0x4b, 0x1a, 0x5f, 0xc5, 0xb8, 0xe4, 0x04, 0x8b, 0x94, 0x9a, 0x11, 0x93, 0xba, 0x13, 0xc6, 0x46, 0xd2, 0x96, 0xd5, 0xc9, 0x84, 0x22, 0x5d, 0x21, 0xdd, 0x4b, 0x58, 0x5a, 0x92, 0xa4, 0xaa, 0x19, 0x0f, 0xed, 0x22, 0x0d, 0x43, 0xa4, 0x39, 0x0e, 0xe2, 0x09, 0xa1, 0xdc, 0x84, 0xe5, 0x2e, 0x8c, 0x43, 0xce, 0x10, 0xe2, 0x94, 0x01, 0x5c, 0x29, 0x78, 0x0e, 0x48, 0xa5, 0x04, 0xdf, 0x8c, 0xa5, 0x18, 0xe3, 0xd6, 0x69, 0x8b, 0xad, 0xd2, 0xdd, 0xaa, 0x82, 0x64, 0xc3, 0x1a, 0xb7, 0x7c, 0x36, 0x08, 0xd3, 0x70, 0x07, 0xfe, 0x3d, 0xdc, 0x83, 0xdf, 0xff, 0x00, 0x32, 0x7e, 0xbf, 0x06, 0xf7, 0xe2, 0xf7, 0x9b, 0x60, 0xc7, 0xef, 0x41, 0xdc, 0x55, 0xed, 0xea, 0x5b, 0xb8, 0xab, 0xda, 0xd5, 0x21, 0xdc, 0x55, 0xed, 0xea, 0xf7, 0xc1, 0x19, 0xed, 0x2d, 0x0d, 0x36, 0x92, 0x66, 0x7e, 0x90, 0xa8, 0xc2, 0xb1, 0x92, 0x0c, 0x55, 0x98, 0x03, 0x96, 0xb1, 0x12, 0x61, 0xf7, 0x61, 0xac, 0x8c, 0x7f, 0x27, 0x8c, 0x55, 0x16, 0xc5, 0xc6, 0xc2, 0xfc, 0x3c, 0x71, 0xac, 0x06, 0x9f, 0x63, 0xfc, 0xfc, 0xe7, 0x63, 0xf5, 0x8c, 0x47, 0x35, 0x72, 0x68, 0xda, 0xd8, 0xa3, 0x5d, 0x0d, 0xb8, 0x36, 0x1e, 0x13, 0x76, 0x21, 0xc6, 0x1e, 0xc7, 0x14, 0xa6, 0x5c, 0x59, 0xaa, 0x33, 0x3f, 0x61, 0xec, 0x06, 0xc5, 0x85, 0x98, 0xcc, 0x62, 0x43, 0x2b, 0x62, 0xb8, 0x0b, 0xbd, 0x93, 0x6d, 0x45, 0x30, 0x2d, 0xda, 0xdb, 0x18, 0xf4, 0x05, 0xe9, 0x26, 0x02, 0x58, 0x72, 0x1b, 0xf6, 0xb3, 0xcc, 0x6d, 0x01, 0xae, 0x41, 0x3f, 0xe9, 0xdd, 0x8d, 0x95, 0x30, 0xae, 0xff, 0x4e, 0xfd, 0xae, 0x5f, 0x9b, 0x70, 0x84, 0x70, 0x94, 0x0c, 0x35, 0xcc, 0xa7, 0x6d, 0xb2, 0x07, 0x61, 0x51, 0x10, 0x4f, 0x10, 0xd6, 0xb5, 0xbb, 0xa6, 0xae, 0xd2, 0x69, 0xd9, 0xad, 0x2e, 0x5a, 0x6c, 0xa8, 0x57, 0x07, 0xf0, 0xbb, 0x46, 0xdd, 0xd0, 0x35, 0xa9, 0x28, 0xa4, 0x6e, 0x62, 0x4d, 0xbc, 0x2d, 0x19, 0xed, 0x3b, 0xc7, 0xad, 0xc6, 0x53, 0x21, 0x7e, 0x0c, 0xc9, 0x2f, 0x4b, 0xf5, 0xbb, 0x2e, 0xec, 0x6c, 0x58, 0x57, 0x7d, 0xce, 0xb0, 0x76, 0xbc, 0xce, 0x9a, 0xaf, 0x48, 0xf2, 0xe0, 0xae, 0x4b, 0xef, 0xf8, 0x29, 0xb8, 0x72, 0x1d, 0x09, 0x13, 0xc2, 0x04, 0x59, 0xaa, 0x4c, 0xeb, 0xee, 0xe5, 0x74, 0xf0, 0x4e, 0xaf, 0x4f, 0x28, 0x19, 0x0d, 0xc2, 0xcd, 0x88, 0x1f, 0x1c, 0x45, 0x6c, 0xef, 0x25, 0x3c, 0xc3, 0xbe, 0xcb, 0xda, 0x84, 0xf8, 0xce, 0x0b, 0xad, 0x42, 0x1a, 0x89, 0x68, 0x8e, 0x0b, 0x01, 0xcd, 0x96, 0x5c, 0x52, 0x3a, 0x5d, 0xf5, 0x91, 0x14, 0x15, 0x6b, 0x45, 0xa7, 0x5d, 0xb7, 0x51, 0xe8, 0xfa, 0x31, 0x9f, 0xb5, 0xf7, 0x4b, 0x59, 0x2d, 0xae, 0x98, 0x5e, 0x2f, 0x2a, 0x0e, 0x70, 0x89, 0xb5, 0xfc, 0x04, 0x2c, 0x7c, 0x9c, 0x76, 0x91, 0x26, 0x8d, 0x26, 0xce, 0xcb, 0x61, 0x6e, 0x97, 0x35, 0xab, 0x65, 0xd8, 0xb0, 0x4e, 0x2e, 0x32, 0x88, 0x3e, 0x43, 0xfd, 0xae, 0xf3, 0x7b, 0x39, 0xfc, 0x4c, 0x26, 0xbc, 0x9d, 0xc3, 0xab, 0x32, 0xe1, 0x57, 0x1a, 0xd6, 0x91, 0x16, 0xe0, 0x90, 0xae, 0x4e, 0xd2, 0x06, 0x94, 0x96, 0xf2, 0x5b, 0x6c, 0xe6, 0x62, 0xa4, 0x1d, 0x7f, 0x19, 0xd7, 0x52, 0x46, 0x17, 0xca, 0x45, 0xb8, 0x0b, 0xf3, 0x75, 0x9a, 0x88, 0x54, 0xc7, 0x14, 0xd6, 0x14, 0x29, 0x1e, 0xb3, 0x0a, 0x8d, 0x29, 0xd2, 0x1a, 0x6c, 0x5e, 0x77, 0xa3, 0xce, 0xe0, 0xc7, 0xac, 0x5d, 0x89, 0x35, 0x77, 0x0b, 0x5e, 0xea, 0xbc, 0x56, 0xc8, 0x1b, 0xaf, 0x55, 0xf7, 0xf1, 0xfb, 0x94, 0xe3, 0x5b, 0x3f, 0xd6, 0xeb, 0x42, 0xdd, 0xd5, 0x27, 0x4f, 0x4e, 0x6b, 0xef, 0x92, 0x7d, 0x80, 0xeb, 0x6c, 0xb3, 0x50, 0x6a, 0xff, 0x04, 0x69, 0x15, 0xc2, 0xf3, 0x15, 0xf8, 0xcd, 0xa9, 0x94, 0x06, 0x83, 0xae, 0x27, 0x69, 0x6f, 0xfd, 0xae, 0x44, 0x81, 0xb1, 0x0f, 0xc4, 0x18, 0xe2, 0xb8, 0x4f, 0xd3, 0xb0, 0x02, 0x43, 0x1c, 0xae, 0xc5, 0x15, 0xb8, 0x36, 0xdf, 0x91, 0x9c, 0xe0, 0x72, 0x5b, 0x49, 0xca, 0xdd, 0xb8, 0x4d, 0x2f, 0xe5, 0xee, 0xf4, 0x40, 0x43, 0x1c, 0x3e, 0x79, 0x59, 0x81, 0x4f, 0xfa, 0x1c, 0xd8, 0x83, 0x6a, 0x5a, 0x45, 0xcc, 0x5f, 0x11, 0xd6, 0x16, 0x34, 0x0b, 0x17, 0x77, 0xa8, 0xab, 0x52, 0xb6, 0xa2, 0x20, 0xe3, 0x3d, 0x12, 0x14, 0xa8, 0x6b, 0x43, 0x1f, 0x19, 0x5a, 0x71, 0x1d, 0xac, 0xe7, 0xb0, 0x8c, 0xb8, 0x4f, 0x58, 0xdd, 0x4c, 0xd2, 0xe6, 0xbc, 0xc6, 0x7f, 0x3c, 0xf7, 0xda, 0x79, 0x7b, 0xfd, 0x46, 0x5c, 0xe1, 0xcf, 0xa4, 0xee, 0xa2, 0x52, 0xd9, 0x14, 0x8e, 0xed, 0xeb, 0x9a, 0x8a, 0x2b, 0x99, 0x3c, 0x9e, 0xca, 0x25, 0x6b, 0xc6, 0xa5, 0xac, 0x12, 0xba, 0xa8, 0x86, 0x67, 0xb0, 0x4d, 0xfb, 0x14, 0xb8, 0x3e, 0x4a, 0x6b, 0x54, 0x26, 0x7d, 0x4d, 0x31, 0x47, 0xef, 0xe0, 0x49, 0x68, 0xe2, 0xb8, 0x98, 0x88, 0x19, 0x73, 0xce, 0x88, 0x81, 0x8b, 0x4e, 0x04, 0x84, 0x18, 0x64, 0x27, 0x4d, 0xe6, 0x93, 0xf6, 0x5e, 0x3e, 0x75, 0xed, 0xbc, 0xa3, 0x3e, 0x41, 0x8c, 0x6d, 0x8e, 0x3a, 0xa0, 0xdf, 0x55, 0x54, 0x23, 0xf3, 0x29, 0xf3, 0xb1, 0x75, 0x1b, 0xd8, 0x6a, 0xd0, 0xcb, 0xc4, 0xad, 0xc4, 0xdf, 0x57, 0xf2, 0x8a, 0xe0, 0xde, 0xe8, 0x72, 0xd6, 0x0b, 0xdf, 0x8a, 0xcf, 0xf6, 0xe8, 0x72, 0x7f, 0x08, 0xe9, 0x9a, 0xd7, 0x3f, 0xb7, 0x18, 0xee, 0x53, 0x07, 0xf1, 0xdb, 0xa1, 0xbe, 0x85, 0xdf, 0xd3, 0xd5, 0x21, 0xfc, 0x76, 0xaa, 0xdf, 0x47, 0x3c, 0x7a, 0x53, 0x13, 0xd9, 0x62, 0xda, 0xc2, 0x3b, 0x73, 0x7b, 0x7a, 0x67, 0x62, 0x0f, 0xa6, 0x60, 0x0f, 0x2a, 0x58, 0xde, 0xe7, 0x28, 0xdf, 0xed, 0x4d, 0x72, 0xd4, 0xe3, 0xd8, 0x3a, 0x98, 0xfb, 0x1c, 0x89, 0x0a, 0xba, 0x49, 0xe3, 0x19, 0x7d, 0xae, 0x23, 0x67, 0x82, 0xfa, 0x21, 0x7e, 0x4f, 0x54, 0x7f, 0xc9, 0x2b, 0x06, 0x31, 0x52, 0x21, 0xfb, 0xe7, 0x49, 0x5b, 0x45, 0x25, 0x7e, 0x92, 0x31, 0xe5, 0xa0, 0xfb, 0x4c, 0xdc, 0xeb, 0xc7, 0xe8, 0x7c, 0xa5, 0x5d, 0x8e, 0x23, 0x3f, 0x0a, 0xed, 0x36, 0x9b, 0x7a, 0x16, 0xf7, 0xe6, 0x31, 0xbe, 0x35, 0xae, 0xa8, 0xfb, 0x38, 0x62, 0x14, 0xba, 0xea, 0xe3, 0x74, 0x30, 0xa5, 0x9b, 0x6f, 0xcc, 0xb1, 0x6d, 0xdb, 0x89, 0xd3, 0xe6, 0x6a, 0x07, 0x6b, 0x89, 0x07, 0xe6, 0x7b, 0x48, 0x3b, 0x0f, 0xb1, 0x3b, 0xd2, 0xce, 0x73, 0xb9, 0x10, 0x7a, 0xb5, 0x42, 0xa1, 0xba, 0x9b, 0x6d, 0x7e, 0x6d, 0xc7, 0x6f, 0x07, 0xd2, 0x76, 0xad, 0xe0, 0x2a, 0x25, 0x5e, 0x7b, 0x11, 0x14, 0x10, 0x9d, 0x12, 0xb7, 0xc4, 0x20, 0x69, 0x21, 0x9d, 0x0b, 0xc5, 0xb8, 0xcc, 0x80, 0x27, 0x9b, 0xa4, 0x48, 0xcb, 0x8c, 0xac, 0x5d, 0x61, 0xec, 0x0a, 0xae, 0x5e, 0x8e, 0x4f, 0x16, 0xa4, 0xc7, 0x22, 0x0e, 0xa4, 0xdc, 0x8c, 0x13, 0x30, 0x9f, 0xd4, 0x6d, 0x48, 0xc3, 0x6a, 0x9d, 0x15, 0x15, 0x30, 0x1a, 0xd4, 0xe1, 0x67, 0x0c, 0x88, 0x5b, 0xef, 0xc5, 0x1e, 0xed, 0x2f, 0x8a, 0xa8, 0x07, 0xf1, 0x79, 0x04, 0x3f, 0x47, 0x39, 0xd5, 0x88, 0x14, 0xec, 0x1c, 0xb6, 0x94, 0x02, 0xc6, 0x23, 0xea, 0x99, 0xa2, 0x7a, 0xb6, 0xd3, 0x03, 0x70, 0xbf, 0x7a, 0xb1, 0x34, 0x86, 0x98, 0xf7, 0x65, 0x3f, 0x49, 0xc0, 0xbe, 0xeb, 0x23, 0x69, 0xd8, 0x61, 0xfb, 0x62, 0x28, 0x21, 0xcb, 0x2d, 0x81, 0xc5, 0x60, 0x59, 0x1a, 0xdc, 0xff, 0x6c, 0xe8, 0x57, 0x70, 0xc2, 0xbe, 0x08, 0x9a, 0x85, 0xb4, 0xef, 0xdc, 0x2b, 0x05, 0xaa, 0x33, 0xb7, 0xff, 0xeb, 0x6c, 0xc9, 0x84, 0xec, 0x57, 0x4d, 0x29, 0x49, 0xdb, 0x8d, 0xd9, 0x21, 0x07, 0x67, 0x90, 0x44, 0x3e, 0x9d, 0x61, 0x72, 0x51, 0xbb, 0xba, 0x5b, 0xdd, 0x1b, 0x7b, 0x43, 0xdd, 0x99, 0xc8, 0xe5, 0x77, 0xdd, 0x87, 0xed, 0x69, 0x57, 0x77, 0xaa, 0x87, 0x31, 0x6e, 0xbb, 0x16, 0x67, 0x67, 0x8b, 0x42, 0xdb, 0xd5, 0x63, 0xc2, 0x06, 0x09, 0x49, 0x15, 0x87, 0x2e, 0x62, 0xb4, 0x59, 0x58, 0x5d, 0x21, 0x49, 0x62, 0x0a, 0xcb, 0x66, 0x6a, 0x13, 0xb6, 0x27, 0x85, 0xed, 0xea, 0x4a, 0xb7, 0x67, 0xee, 0x15, 0x6c, 0x4f, 0x6e, 0xf5, 0x25, 0x6c, 0x8f, 0xc5, 0x35, 0x21, 0xdb, 0x1e, 0xa4, 0x5e, 0x7a, 0xe2, 0x60, 0xf0, 0x3c, 0xbf, 0x1f, 0x31, 0x57, 0x8a, 0x79, 0x15, 0x4f, 0xce, 0xa9, 0x9f, 0x66, 0x04, 0x45, 0x9b, 0xd3, 0x23, 0xc8, 0xb4, 0xc6, 0x08, 0x7e, 0x3e, 0xe5, 0x18, 0x0a, 0x5c, 0xf4, 0xd3, 0xf5, 0xf7, 0xc6, 0xf1, 0xc6, 0xbe, 0x99, 0xc9, 0xa6, 0xcc, 0xa7, 0xe9, 0x5b, 0xa2, 0x21, 0xb5, 0x50, 0xaf, 0x81, 0x84, 0x71, 0x15, 0x09, 0x87, 0x9d, 0x25, 0x8f, 0x59, 0xce, 0xa5, 0x42, 0x7e, 0x0d, 0x7a, 0xe8, 0x17, 0x6b, 0xee, 0xc1, 0xda, 0xac, 0x82, 0x4e, 0x53, 0x0a, 0x34, 0x88, 0x7f, 0xf2, 0x3f, 0x1e, 0xa5, 0x55, 0x4a, 0xb7, 0x3d, 0xcc, 0x2d, 0x32, 0x21, 0xed, 0xdb, 0x43, 0x96, 0x25, 0xcd, 0x13, 0x90, 0x72, 0x9e, 0x46, 0x76, 0x22, 0x78, 0xc7, 0xdc, 0x9d, 0xc8, 0xe3, 0x5b, 0x0b, 0xc2, 0xc3, 0x4a, 0x52, 0x06, 0x3e, 0x7b, 0x3e, 0x9c, 0x81, 0x75, 0x4a, 0x85, 0x74, 0x26, 0x09, 0xeb, 0xa0, 0xce, 0xf9, 0x98, 0xda, 0x73, 0xef, 0x1c, 0xd6, 0xbd, 0xe8, 0xe1, 0xf9, 0xf7, 0xa7, 0x4f, 0x16, 0xd3, 0x55, 0xb6, 0x58, 0x4b, 0xf7, 0xae, 0xeb, 0xd3, 0x9a, 0x9d, 0xf6, 0x24, 0x94, 0x0e, 0x89, 0x5b, 0x3b, 0xd2, 0xbe, 0x6c, 0xd5, 0xf4, 0x57, 0xf2, 0x1d, 0x8b, 0xa0, 0xe6, 0xbe, 0x39, 0x50, 0x23, 0x24, 0xe9, 0xa6, 0xcf, 0x81, 0x30, 0xdd, 0x25, 0x21, 0x7c, 0xaa, 0x99, 0x51, 0xcb, 0x9a, 0x9e, 0x25, 0xce, 0x7f, 0x04, 0x23, 0xe6, 0x30, 0xce, 0x48, 0xc2, 0x4a, 0x78, 0x4c, 0x0e, 0x0a, 0x9d, 0xcc, 0x71, 0x5a, 0xb0, 0x69, 0x3c, 0xc3, 0x08, 0x53, 0x13, 0x16, 0x79, 0x0e, 0xe7, 0xa8, 0x54, 0xcc, 0xda, 0x53, 0x39, 0xf5, 0xfa, 0x01, 0x82, 0x76, 0x25, 0x8a, 0x4d, 0xc4, 0xa9, 0x3b, 0xd3, 0x23, 0xc1, 0x96, 0x64, 0xd6, 0xf0, 0x3d, 0xf4, 0x17, 0xc7, 0x8e, 0xd1, 0xae, 0x46, 0xaa, 0xec, 0xb8, 0xc6, 0x41, 0xbf, 0x48, 0xbc, 0x73, 0xb5, 0x11, 0x4f, 0x36, 0x18, 0x3b, 0x19, 0x2f, 0xb1, 0x47, 0xc7, 0xf1, 0xc1, 0x03, 0x7a, 0xce, 0x1a, 0xc2, 0xd7, 0xe3, 0x72, 0xf0, 0xfb, 0xcc, 0x0b, 0xff, 0x3e, 0xf1, 0xc2, 0xa7, 0x61, 0xfb, 0x56, 0x30, 0x94, 0xfe, 0x77, 0x3c, 0xef, 0x8e, 0xd3, 0xd3, 0x7a, 0xe3, 0x78, 0x6e, 0xb8, 0x0d, 0x28, 0x25, 0xc3, 0x0f, 0xf7, 0x71, 0xbe, 0x76, 0xf5, 0x71, 0x01, 0xdd, 0x1c, 0x58, 0x63, 0x65, 0xde, 0xcc, 0x36, 0x90, 0xc6, 0x4e, 0xcd, 0x24, 0xee, 0xd6, 0x69, 0xe6, 0x75, 0x7d, 0xf8, 0xb9, 0x36, 0xa4, 0x23, 0x4d, 0xf8, 0x3d, 0x49, 0x9d, 0x58, 0xd4, 0x06, 0x16, 0xf5, 0x31, 0xd9, 0x0d, 0xb9, 0xf8, 0x94, 0x37, 0x76, 0x19, 0xbf, 0xa7, 0xaa, 0xf5, 0x6e, 0x37, 0x4c, 0xc3, 0x27, 0xbb, 0xfa, 0x28, 0x96, 0x70, 0xaa, 0x75, 0xf8, 0xed, 0x52, 0x63, 0xf8, 0xed, 0x56, 0xcd, 0xf8, 0xed, 0x51, 0x2d, 0xf8, 0x5d, 0x32, 0x76, 0xc6, 0x05, 0xd2, 0xca, 0x53, 0xea, 0xcf, 0x55, 0xe6, 0xbd, 0x03, 0xe4, 0x25, 0xa6, 0xd9, 0xdb, 0x10, 0xc9, 0xa9, 0x45, 0xdc, 0x68, 0x12, 0x73, 0xfe, 0x73, 0xc7, 0xf5, 0x97, 0xf9, 0xf1, 0xf6, 0x76, 0x75, 0x54, 0xe8, 0x38, 0x4c, 0xb8, 0x68, 0x9f, 0x64, 0x36, 0x60, 0x2e, 0xcf, 0x1f, 0x18, 0x95, 0x62, 0xac, 0x2b, 0x38, 0xb4, 0x95, 0x46, 0x05, 0xbf, 0xc5, 0xa8, 0xbc, 0x9d, 0x1e, 0x15, 0x75, 0xf4, 0xc6, 0x51, 0x71, 0xce, 0x65, 0x6e, 0xfc, 0x62, 0xbb, 0x51, 0x7e, 0xd2, 0xd3, 0xae, 0x36, 0x12, 0x3f, 0x5e, 0xea, 0xa5, 0x36, 0xf6, 0xf7, 0x86, 0xdb, 0xd5, 0x28, 0x7e, 0x6a, 0xb0, 0x15, 0x61, 0xd2, 0xe1, 0x57, 0x47, 0xd4, 0xca, 0x6e, 0xc0, 0x50, 0xe1, 0x12, 0x98, 0x89, 0x74, 0x9f, 0x1a, 0xc0, 0xef, 0x09, 0x6a, 0x45, 0x8a, 0xac, 0xd7, 0x15, 0xe0, 0x27, 0xff, 0xc5, 0x03, 0x98, 0x9f, 0x5a, 0x6d, 0xc3, 0xdf, 0x72, 0xfc, 0x2d, 0xc5, 0x8f, 0x0f, 0x3f, 0xc4, 0xe3, 0x1b, 0xc5, 0xcf, 0x39, 0xb2, 0xbb, 0x86, 0x1f, 0xe2, 0x08, 0xb9, 0xf0, 0xe3, 0xc0, 0x8f, 0xcc, 0x1c, 0xc0, 0xab, 0x48, 0x5b, 0x8c, 0xca, 0x36, 0xe6, 0xcb, 0xb3, 0x47, 0x45, 0xf8, 0xce, 0x02, 0x30, 0x9e, 0xcd, 0x72, 0xe6, 0x0d, 0x01, 0x43, 0xc4, 0x50, 0x6f, 0x68, 0xce, 0xf1, 0xe5, 0x44, 0x0c, 0x0b, 0x8c, 0xc7, 0x0d, 0x1b, 0x72, 0x4e, 0x18, 0x5e, 0x32, 0x6c, 0xcd, 0x69, 0xce, 0x89, 0x1b, 0x92, 0x86, 0x25, 0x86, 0x5e, 0xc3, 0x6a, 0xc3, 0x5e, 0xc3, 0xfb, 0x39, 0x1b, 0x73, 0x5e, 0xcd, 0x59, 0x65, 0x3c, 0x6e, 0x3c, 0x9e, 0x53, 0x90, 0xf3, 0x4e, 0xce, 0xf6, 0x9c, 0x23, 0x86, 0xa3, 0x86, 0x0f, 0x0d, 0xa3, 0x92, 0x45, 0x2a, 0x90, 0x4a, 0xa4, 0x88, 0xf4, 0x98, 0x94, 0x92, 0x56, 0x49, 0x5b, 0x72, 0x96, 0x18, 0x8f, 0x4b, 0x43, 0xd2, 0x5e, 0xc3, 0x90, 0x74, 0xc4, 0x98, 0x2b, 0x9d, 0xcb, 0x39, 0x9b, 0xb3, 0x1f, 0x4b, 0x1d, 0xc5, 0x7f, 0x85, 0x46, 0x77, 0xce, 0x65, 0xa3, 0x91, 0xea, 0x30, 0x8e, 0xe4, 0x48, 0xfc, 0x7b, 0xdc, 0xb8, 0xcd, 0xb8, 0x43, 0x7b, 0xfa, 0x3f, 0xfb, 0xb7, 0xe7, 0xff, 0x95, 0x5a, 0xfe, 0xf0, 0xbf, 0xa0, 0x31, 0x6a, 0x6c, 0x44, 0x22, 0xb7, 0xc3, 0xd8, 0x63, 0x5c, 0x6d, 0xdc, 0x54, 0x49, 0x9a, 0x62, 0x90, 0xb3, 0x65, 0x66, 0x2b, 0xae, 0xe7, 0x53, 0xf8, 0xb4, 0x9e, 0x9f, 0x4e, 0xe3, 0x53, 0x3f, 0x3f, 0x7d, 0x88, 0x4f, 0xcf, 0xe0, 0xc9, 0x69, 0x54, 0x1f, 0xc3, 0xa7, 0x6e, 0x8a, 0x53, 0xeb, 0xf0, 0xa9, 0x8d, 0x9f, 0x62, 0xf8, 0xa4, 0xf0, 0x93, 0x19, 0x9f, 0x1e, 0xe5, 0x27, 0x0b, 0xdd, 0xa3, 0x50, 0x89, 0xb1, 0xcb, 0xf8, 0x14, 0xe6, 0xb2, 0xf5, 0xf8, 0x54, 0xce, 0x4f, 0xe4, 0x9d, 0xa0, 0x24, 0xb6, 0x15, 0x8c, 0x8f, 0xb2, 0xee, 0xd5, 0xcc, 0xa0, 0x6a, 0xc4, 0x98, 0x42, 0x4e, 0xcb, 0xc7, 0xa7, 0x3c, 0x7e, 0x22, 0xdf, 0x03, 0x66, 0xca, 0x85, 0x67, 0xb0, 0x41, 0xb1, 0xa6, 0xc6, 0x14, 0x1b, 0x87, 0xcc, 0x5d, 0x52, 0xff, 0x72, 0x3c, 0x4b, 0xce, 0xa5, 0xae, 0xef, 0x27, 0x9e, 0xff, 0x69, 0x2d, 0x8f, 0x51, 0x39, 0x93, 0xfa, 0x44, 0x39, 0xa7, 0x85, 0xcc, 0xca, 0x07, 0xa9, 0xdf, 0x29, 0xc7, 0x45, 0x09, 0x88, 0x18, 0x90, 0x3a, 0x95, 0x76, 0x49, 0x91, 0x31, 0x15, 0x7f, 0x87, 0xd2, 0xb1, 0x12, 0xc5, 0xbe, 0x22, 0x45, 0xae, 0x53, 0xec, 0x16, 0x11, 0x6b, 0xde, 0x0b, 0x77, 0x61, 0x68, 0xad, 0x79, 0x25, 0xff, 0xae, 0x4a, 0xe7, 0x35, 0x53, 0xde, 0xa5, 0x52, 0xe4, 0x77, 0x94, 0x37, 0x95, 0x8e, 0xb5, 0x51, 0xec, 0x02, 0x29, 0x72, 0x81, 0x62, 0x1f, 0xcb, 0xd4, 0x40, 0xf7, 0x2a, 0x75, 0x58, 0x83, 0x8d, 0xef, 0x51, 0xd2, 0xb1, 0x7f, 0x86, 0xa1, 0x32, 0x8c, 0xa5, 0x5f, 0xee, 0x7f, 0xc2, 0xd4, 0x85, 0x39, 0x54, 0x7f, 0xea, 0x02, 0x7e, 0x97, 0x6a, 0x31, 0x32, 0x3e, 0xcb, 0xa9, 0x9f, 0xe3, 0xb7, 0x3d, 0xfd, 0x16, 0x23, 0xbe, 0x05, 0xd7, 0x68, 0xe4, 0x13, 0x7c, 0x8b, 0xe1, 0x72, 0xa6, 0xbe, 0xbb, 0x31, 0xf4, 0x21, 0xd6, 0x47, 0xbf, 0xc7, 0x33, 0xb1, 0xd3, 0x30, 0x34, 0x82, 0xb1, 0xf4, 0xbb, 0x9f, 0xe7, 0xe0, 0x1c, 0xc7, 0xff, 0x39, 0x86, 0x77, 0x62, 0x3c, 0xfd, 0x0e, 0x5a, 0x8b, 0x55, 0x55, 0x35, 0xe1, 0xf9, 0xfc, 0xea, 0xe7, 0x5a, 0x61, 0xa2, 0x8a, 0xf3, 0x6f, 0xd8, 0xc2, 0x71, 0x13, 0x31, 0x6e, 0x3d, 0xc7, 0x4d, 0xc4, 0xb8, 0x7e, 0x37, 0x9e, 0x40, 0xb8, 0x8f, 0xef, 0x1c, 0x3b, 0x83, 0xa1, 0x65, 0x5d, 0x7f, 0x5b, 0x63, 0xe8, 0x5f, 0xce, 0xb3, 0xf3, 0x28, 0x86, 0xdb, 0xf8, 0x9d, 0x60, 0x58, 0x90, 0x0a, 0xf6, 0xe3, 0x4c, 0x18, 0xb8, 0xff, 0x5f, 0x1a, 0x66, 0x5a, 0x16, 0x57, 0x85, 0x21, 0xc6, 0x39, 0x4b, 0xd9, 0x0e, 0x68, 0x39, 0x86, 0x2b, 0xb4, 0xda, 0x24, 0xae, 0xcd, 0xc3, 0xa9, 0x2e, 0x7c, 0xb2, 0xf3, 0x9a, 0xa9, 0xc0, 0xa7, 0x82, 0xcc, 0x7c, 0x2b, 0x38, 0xdf, 0x0b, 0x39, 0x3e, 0x80, 0xf1, 0xc0, 0x79, 0x49, 0x53, 0xfd, 0x0a, 0xf7, 0x68, 0x14, 0x9f, 0xce, 0x71, 0x5c, 0x21, 0xd7, 0x5e, 0x43, 0x5e, 0xc3, 0x39, 0x05, 0x21, 0x05, 0x1c, 0xca, 0xac, 0x88, 0xa9, 0xb8, 0x22, 0xa6, 0x65, 0x56, 0x84, 0x15, 0x57, 0x44, 0x7a, 0x0d, 0xd9, 0x56, 0xe1, 0x1a, 0x82, 0xad, 0xa9, 0x0b, 0xfb, 0xb0, 0xe5, 0xf0, 0xb2, 0xc3, 0x45, 0xb7, 0x62, 0xb0, 0x89, 0xeb, 0xac, 0x24, 0xbf, 0xe7, 0x99, 0x96, 0x44, 0xb0, 0x25, 0x35, 0x5a, 0x48, 0x52, 0xca, 0x52, 0xd7, 0x95, 0xf2, 0x4c, 0xfd, 0x2e, 0xac, 0xdf, 0x9d, 0xa9, 0x7f, 0x2a, 0xd6, 0x5f, 0xa8, 0x85, 0x6c, 0xf8, 0xb6, 0x0b, 0x4a, 0x6e, 0x7a, 0x4e, 0x57, 0x2e, 0x57, 0x2a, 0x52, 0x3f, 0xdf, 0xdb, 0xab, 0x94, 0xf2, 0x1b, 0x3c, 0x88, 0x35, 0xcb, 0x8a, 0x8b, 0x9f, 0xad, 0xf8, 0xec, 0x50, 0x0a, 0x3d, 0xd8, 0x02, 0xb9, 0x06, 0x63, 0x7a, 0x54, 0x9f, 0x92, 0xcb, 0x29, 0x61, 0xe6, 0x0d, 0x1b, 0x54, 0xd2, 0xf9, 0x10, 0xd0, 0x77, 0x44, 0xe6, 0x5b, 0x94, 0x6b, 0x57, 0x94, 0x8e, 0xff, 0x7f, 0xe1, 0x2f, 0xdb, 0x36, 0xb6, 0xa5, 0x7c, 0xc3, 0x2b, 0xe3, 0xd8, 0xb7, 0xfe, 0xe5, 0xbc, 0x9e, 0x8c, 0xa9, 0xff, 0xb5, 0xbf, 0x17, 0x53, 0x26, 0x63, 0x7f, 0xdf, 0xdf, 0xbf, 0x3c, 0x86, 0xb5, 0xc6, 0xad, 0xd6, 0x76, 0x9a, 0xdf, 0xf8, 0xb2, 0xd8, 0xb3, 0x71, 0x3f, 0x82, 0xd2, 0x5e, 0xc4, 0x42, 0x8a, 0xd5, 0xd2, 0xd9, 0xd7, 0x2e, 0x57, 0x08, 0x69, 0xd5, 0x78, 0xbe, 0x1f, 0x71, 0xe9, 0x49, 0x56, 0xb2, 0x48, 0x5e, 0xff, 0x82, 0x1b, 0x08, 0xf7, 0x31, 0x8f, 0xb9, 0x01, 0x6b, 0xfc, 0x9c, 0xd2, 0x26, 0xa8, 0x74, 0x7b, 0xb5, 0xbc, 0x48, 0x2a, 0xab, 0xbe, 0x76, 0xb9, 0x40, 0x68, 0x54, 0x90, 0x1c, 0x28, 0xd5, 0x45, 0x79, 0x18, 0xd3, 0xe8, 0x15, 0x9a, 0xe5, 0x77, 0xf5, 0x21, 0xbd, 0x2e, 0xfc, 0x9d, 0xf8, 0xe8, 0xa9, 0x99, 0xea, 0x5a, 0xca, 0xdc, 0xc2, 0x33, 0xf1, 0x69, 0x5e, 0xf6, 0x7c, 0xb3, 0xfe, 0xe1, 0xfa, 0x5d, 0xbf, 0x79, 0x87, 0xde, 0x93, 0x00, 0xf3, 0xfc, 0x2e, 0x69, 0xd5, 0x72, 0x7e, 0x93, 0x29, 0xf6, 0x2c, 0x86, 0xeb, 0x84, 0x3d, 0x86, 0x1b, 0xef, 0xb3, 0x8b, 0x82, 0x63, 0x67, 0x30, 0xb5, 0x84, 0x78, 0x46, 0xb2, 0x91, 0x5b, 0xd3, 0x7a, 0x03, 0xd7, 0x68, 0x2a, 0x62, 0xd7, 0xf5, 0x37, 0xf1, 0x8c, 0x1a, 0xb1, 0x54, 0x80, 0x28, 0xb6, 0x7b, 0xaf, 0xab, 0xc7, 0xe5, 0x6a, 0x9b, 0x2b, 0x43, 0xaf, 0x9d, 0x42, 0xca, 0xaa, 0x11, 0xf1, 0xd6, 0x56, 0xa4, 0xaf, 0xce, 0x15, 0x55, 0xab, 0x67, 0x1c, 0xad, 0x9a, 0x05, 0x09, 0x30, 0x5b, 0x74, 0xfc, 0x8f, 0xe3, 0x19, 0x7e, 0x12, 0xe2, 0x6b, 0x13, 0x2f, 0xce, 0xa8, 0x86, 0x12, 0x79, 0x0e, 0xbe, 0xf1, 0x31, 0xc6, 0x93, 0xda, 0x38, 0xf6, 0x83, 0x19, 0x61, 0x83, 0x75, 0x46, 0xbb, 0x5a, 0x69, 0xb0, 0x69, 0xfb, 0xd8, 0x42, 0x58, 0xdc, 0xe7, 0x5a, 0x0d, 0x31, 0xd5, 0xf4, 0xd9, 0x76, 0xd5, 0x04, 0x0b, 0xb4, 0xbd, 0x9c, 0x8e, 0x9f, 0xa3, 0x4e, 0xc4, 0xf8, 0x89, 0xf0, 0xe4, 0x8c, 0x08, 0x14, 0xcc, 0xa8, 0x82, 0x95, 0x34, 0x6b, 0x71, 0xd2, 0xe7, 0x2d, 0xf9, 0x2c, 0x52, 0x44, 0x50, 0x86, 0xdf, 0xd3, 0xa1, 0x1c, 0xbf, 0xef, 0x83, 0x87, 0xf0, 0xdb, 0x09, 0x0f, 0x23, 0xbe, 0x5c, 0x1f, 0x37, 0xa5, 0x72, 0xf7, 0xf7, 0x26, 0x9c, 0x94, 0x0f, 0x57, 0xb2, 0x2b, 0x61, 0x92, 0x5b, 0x0d, 0x29, 0xc5, 0x8c, 0xd8, 0xd5, 0x45, 0x79, 0x11, 0x6c, 0x26, 0x7a, 0x61, 0xc4, 0x05, 0x77, 0x37, 0xc2, 0x67, 0x83, 0xf0, 0x50, 0xec, 0x8d, 0xb1, 0xcb, 0xe4, 0x01, 0x58, 0x6e, 0x1f, 0xbb, 0x4c, 0xf8, 0x17, 0x62, 0xaf, 0x13, 0xe0, 0xce, 0x44, 0x01, 0xdd, 0x37, 0x8d, 0xb4, 0x82, 0x79, 0x5e, 0x30, 0x8f, 0xe8, 0x89, 0xe5, 0x43, 0xc1, 0x0e, 0x23, 0xe6, 0x2f, 0x63, 0x1f, 0x08, 0x22, 0xdd, 0x84, 0xe9, 0x16, 0x4e, 0x7f, 0x28, 0x93, 0xfe, 0x10, 0x63, 0xbf, 0x77, 0x26, 0xf2, 0xa9, 0x7c, 0x84, 0xd2, 0xca, 0x33, 0x69, 0xe5, 0x31, 0x17, 0xdc, 0x99, 0xa4, 0x14, 0x13, 0xa7, 0x3c, 0x9c, 0x49, 0x79, 0x58, 0x48, 0x67, 0xc7, 0xfb, 0x8a, 0x6a, 0x11, 0x03, 0x14, 0xf4, 0x9d, 0x31, 0x3e, 0x85, 0x7a, 0x40, 0x35, 0x0c, 0xb9, 0x60, 0x7a, 0xa7, 0xb9, 0xdb, 0xb6, 0xb2, 0x77, 0x46, 0x18, 0x0a, 0xb4, 0xf4, 0x09, 0x22, 0xbd, 0x00, 0xeb, 0xd9, 0xe9, 0x02, 0x67, 0xa7, 0xb9, 0x4b, 0xee, 0xeb, 0x9d, 0x11, 0x82, 0x82, 0x6e, 0x1b, 0x52, 0x21, 0x97, 0xf1, 0x73, 0x91, 0xd2, 0x79, 0xf6, 0xeb, 0x5d, 0x24, 0xbd, 0xb3, 0x59, 0xc3, 0xce, 0x0d, 0x90, 0xff, 0x25, 0xcd, 0x0a, 0x36, 0x52, 0x07, 0xef, 0xdc, 0x82, 0xeb, 0x50, 0xa0, 0xbe, 0x83, 0x54, 0xcc, 0x1e, 0x8d, 0x03, 0xb1, 0x2f, 0x45, 0x76, 0x5c, 0x0f, 0x70, 0x68, 0xb2, 0xfa, 0x3e, 0xd6, 0x7c, 0x48, 0xd8, 0xa4, 0x5c, 0x5f, 0xc5, 0xb5, 0xaf, 0x14, 0x3a, 0xee, 0x09, 0x0f, 0xad, 0x3c, 0xc8, 0x91, 0xc3, 0xb8, 0x22, 0x2e, 0x6b, 0xab, 0x8e, 0x62, 0x8c, 0x1c, 0x73, 0x51, 0x8b, 0x09, 0xf3, 0xef, 0x33, 0x8c, 0xc1, 0xb3, 0x6d, 0x94, 0xeb, 0xd1, 0x74, 0x8f, 0x13, 0xf9, 0x88, 0xeb, 0x5d, 0x16, 0x56, 0x32, 0x7d, 0xe1, 0xa1, 0xfe, 0x27, 0x8d, 0x9f, 0x0d, 0x41, 0x39, 0xdb, 0x39, 0xc8, 0xc7, 0xd5, 0x74, 0x51, 0x8c, 0x99, 0x2f, 0x34, 0x48, 0x29, 0x38, 0x6a, 0x0f, 0xb5, 0xab, 0x57, 0xe0, 0x0a, 0x7e, 0x5f, 0x82, 0xab, 0x33, 0x7a, 0x70, 0x67, 0x6d, 0x96, 0x02, 0x33, 0xe6, 0x48, 0xc1, 0x19, 0x75, 0x52, 0xa4, 0x4b, 0x1d, 0x7a, 0x43, 0xcd, 0x4f, 0x14, 0x8a, 0xda, 0x66, 0x86, 0xc7, 0x4e, 0x0b, 0xba, 0xf0, 0x27, 0xed, 0x63, 0xa7, 0xcb, 0x8b, 0xd5, 0x29, 0xff, 0x81, 0xbf, 0x29, 0x75, 0xf0, 0x0d, 0xb5, 0x20, 0x51, 0x28, 0xea, 0x9d, 0x19, 0x1a, 0xfb, 0x50, 0xd0, 0x92, 0x98, 0xe7, 0xc3, 0xd2, 0x62, 0x75, 0xea, 0xbf, 0xe3, 0x6f, 0x6c, 0x55, 0xc2, 0x2a, 0xd7, 0xf8, 0x71, 0x25, 0xf8, 0x70, 0xb6, 0x15, 0x2b, 0xb5, 0x1b, 0x43, 0x56, 0xb2, 0x86, 0x67, 0x6d, 0x57, 0xd5, 0xb1, 0xd3, 0x71, 0xb3, 0x6f, 0xd2, 0xc0, 0xec, 0x99, 0xc1, 0xb1, 0xd3, 0x0f, 0x61, 0x9d, 0x60, 0xe6, 0xd8, 0x0f, 0xe3, 0x16, 0xbf, 0x79, 0x7d, 0x3b, 0x62, 0xdd, 0x58, 0x2b, 0xc6, 0x7f, 0x08, 0x16, 0x84, 0x34, 0xc6, 0xc4, 0xfc, 0x52, 0xcc, 0xf3, 0xfd, 0x03, 0x49, 0xe3, 0x43, 0xb5, 0x48, 0xb5, 0x61, 0xfc, 0x5b, 0xf4, 0x1c, 0x05, 0x8b, 0x6f, 0x62, 0x4d, 0xb0, 0xfb, 0xce, 0xd3, 0xca, 0xfb, 0x41, 0x5f, 0xf1, 0xd8, 0xa9, 0x9a, 0xe0, 0x69, 0xe5, 0x5d, 0x2c, 0x4d, 0x7a, 0xba, 0xa5, 0xc1, 0xea, 0x4b, 0x29, 0xa0, 0x32, 0x95, 0x93, 0x5e, 0x0a, 0x62, 0x8c, 0xc5, 0x1f, 0x2c, 0xc7, 0x3c, 0xa5, 0x91, 0xaa, 0x4b, 0x9b, 0xe0, 0xad, 0x1f, 0x25, 0xcd, 0xf8, 0xa6, 0x20, 0xbe, 0xe7, 0x94, 0x9f, 0x72, 0x1b, 0x34, 0xfa, 0x37, 0x34, 0x30, 0x2c, 0xac, 0xa7, 0x0e, 0x0c, 0x63, 0xfd, 0x29, 0x2a, 0x47, 0x6d, 0x2c, 0xa0, 0x1e, 0xae, 0xf4, 0x05, 0x07, 0xf6, 0xd2, 0xca, 0x89, 0xae, 0x1c, 0xd8, 0x8b, 0xa9, 0x5d, 0xb1, 0xd9, 0xed, 0x60, 0x2c, 0x8f, 0xe1, 0x1b, 0xf1, 0xd7, 0xe7, 0x0f, 0x51, 0x2f, 0xe7, 0xfe, 0x3a, 0x05, 0xa5, 0xd8, 0xd3, 0xb7, 0xdf, 0xc7, 0xb8, 0xc2, 0x40, 0x10, 0x5b, 0x7b, 0xaa, 0xdc, 0x12, 0xdd, 0x5b, 0x7d, 0x25, 0x0a, 0x48, 0xb3, 0xe6, 0x63, 0x5a, 0xee, 0xdb, 0x1f, 0xab, 0xf9, 0xed, 0x90, 0x33, 0x16, 0x5b, 0x15, 0xb7, 0x3e, 0x34, 0x9b, 0xee, 0xf3, 0xc6, 0x4e, 0x21, 0x5e, 0x56, 0x50, 0x3e, 0xd1, 0x51, 0x73, 0x14, 0xe9, 0x8d, 0x87, 0x22, 0x58, 0x2d, 0xb6, 0x15, 0x9f, 0x4d, 0xf8, 0x6c, 0xc2, 0x3c, 0xfd, 0x9c, 0x67, 0x35, 0x8e, 0x46, 0x5d, 0xc2, 0xe8, 0x2f, 0x56, 0xeb, 0x1e, 0x0a, 0x21, 0x9d, 0xd7, 0xae, 0xc6, 0x12, 0x46, 0x5f, 0xb1, 0x1a, 0x7b, 0x28, 0x08, 0x79, 0x18, 0x32, 0xc7, 0x8d, 0x33, 0xc3, 0xaa, 0x19, 0xe7, 0xd6, 0x0c, 0xf9, 0x18, 0xb6, 0xc4, 0x4d, 0x33, 0x71, 0xe4, 0x54, 0x0b, 0xc6, 0x58, 0x80, 0xbc, 0x80, 0x14, 0xab, 0xe6, 0xef, 0x0f, 0x77, 0x1a, 0x1f, 0x0a, 0x43, 0x3e, 0x87, 0x2c, 0xff, 0x3c, 0xdc, 0x69, 0xe2, 0x19, 0x98, 0x82, 0x3b, 0xcc, 0xca, 0x9a, 0xc1, 0xf9, 0xfe, 0xe0, 0xf7, 0xdf, 0xc5, 0xf1, 0x0d, 0x02, 0xed, 0xba, 0x5c, 0x8e, 0x9b, 0xe2, 0x0b, 0xbe, 0x25, 0xe2, 0xa6, 0xe0, 0xde, 0x3f, 0x97, 0x28, 0xc4, 0x9d, 0x7f, 0xee, 0xa1, 0x06, 0xf8, 0xf0, 0xa1, 0x56, 0x90, 0xe0, 0xcc, 0x43, 0xe4, 0x9f, 0xe8, 0x2c, 0x7e, 0x9b, 0xe0, 0x9c, 0x52, 0x82, 0xed, 0xfd, 0x90, 0xdb, 0x7b, 0x06, 0xc7, 0xcf, 0x36, 0x88, 0x94, 0x76, 0xdc, 0x48, 0x16, 0x15, 0xb1, 0xf4, 0x59, 0xfc, 0xcd, 0xc3, 0x18, 0x0b, 0xc7, 0x4c, 0xc1, 0x98, 0x73, 0xd8, 0xb6, 0x0a, 0x38, 0x8f, 0xdf, 0x01, 0xb8, 0x84, 0x90, 0x08, 0x04, 0x24, 0x2b, 0x6a, 0x35, 0x3c, 0xa3, 0x02, 0x42, 0x3e, 0x80, 0x83, 0xf8, 0xc6, 0xd1, 0x4c, 0x6c, 0xdf, 0xd8, 0xe8, 0x8c, 0xf6, 0xb1, 0x51, 0xd8, 0x4f, 0xe1, 0x19, 0xad, 0x86, 0x55, 0x30, 0x82, 0xab, 0x4d, 0xb6, 0xd7, 0x20, 0x94, 0x5a, 0xa3, 0xe9, 0x61, 0xcc, 0x81, 0x01, 0x47, 0xcd, 0x8c, 0x36, 0x58, 0x03, 0x1b, 0x90, 0xae, 0x5d, 0x33, 0xa3, 0x06, 0x36, 0xe1, 0x68, 0xd4, 0xc4, 0x0b, 0xb0, 0xa6, 0xab, 0x48, 0x6f, 0xb7, 0xe3, 0x29, 0x47, 0x5a, 0x08, 0xd7, 0x13, 0x84, 0x7f, 0x8e, 0xa9, 0x85, 0x74, 0xe3, 0x03, 0xd7, 0xf0, 0x6d, 0x85, 0x30, 0x86, 0xdf, 0xf5, 0x20, 0x13, 0xfd, 0x4b, 0xd6, 0x52, 0xa2, 0x9b, 0xc9, 0xeb, 0x83, 0x34, 0x2b, 0x61, 0x21, 0x48, 0x18, 0x45, 0x48, 0xa8, 0x18, 0xa3, 0x8b, 0x0c, 0x29, 0x3c, 0x83, 0x06, 0xc8, 0x23, 0x15, 0x9d, 0x35, 0x52, 0xe9, 0x38, 0x49, 0x8f, 0xe4, 0x38, 0x1b, 0x5c, 0xe7, 0xf4, 0x36, 0xb8, 0xc2, 0xaf, 0x49, 0x31, 0xec, 0xa3, 0x1c, 0x37, 0xe1, 0xb7, 0x23, 0x61, 0x7a, 0x88, 0xfc, 0xea, 0x44, 0x63, 0x8b, 0xa5, 0x68, 0x3c, 0x9f, 0xf6, 0x33, 0xe9, 0x0a, 0x58, 0x21, 0x6e, 0xae, 0xfe, 0x48, 0x2a, 0xc5, 0xd5, 0x62, 0x2d, 0x9a, 0xa3, 0x7e, 0xb7, 0xa8, 0x5d, 0x7d, 0x54, 0x7d, 0x15, 0xbf, 0x5d, 0xea, 0x36, 0xb6, 0x35, 0xfc, 0x3d, 0xfc, 0xb6, 0xaa, 0x43, 0xf8, 0xed, 0x53, 0x77, 0xd0, 0x4d, 0x3e, 0x62, 0xd5, 0xbb, 0x98, 0xbb, 0xbd, 0x36, 0xba, 0xec, 0xdc, 0xf1, 0x5b, 0x58, 0xf6, 0x4a, 0xde, 0x64, 0xd9, 0xeb, 0xdc, 0x38, 0xcb, 0x5e, 0xed, 0xea, 0x6e, 0xc4, 0xed, 0x3a, 0x1c, 0x64, 0x1b, 0x97, 0xec, 0x71, 0xf6, 0x7a, 0xb0, 0xaf, 0xc4, 0xbf, 0xcc, 0x77, 0x43, 0x21, 0xc1, 0xbc, 0x3c, 0x37, 0x4c, 0x8d, 0x2e, 0x8f, 0xbe, 0x6b, 0x73, 0xc3, 0x9f, 0xb1, 0x96, 0x4a, 0x4c, 0xe4, 0x18, 0xed, 0x63, 0x1b, 0x05, 0x05, 0x72, 0x3a, 0xec, 0xe2, 0x93, 0x21, 0x85, 0x7d, 0x29, 0x11, 0xfa, 0x5a, 0x7c, 0x42, 0x5e, 0x43, 0xc8, 0x48, 0x67, 0xe2, 0x51, 0xb9, 0x3a, 0x8f, 0xce, 0x49, 0x03, 0x9e, 0x93, 0x21, 0x84, 0x94, 0x73, 0xd4, 0xfd, 0x45, 0x78, 0x82, 0xa8, 0x07, 0xf9, 0xae, 0x60, 0xa4, 0x68, 0xb1, 0xc1, 0xaa, 0x1e, 0x26, 0x5b, 0xd4, 0x99, 0x13, 0x53, 0x6f, 0xad, 0xef, 0x9d, 0xf4, 0x79, 0x29, 0xcf, 0xc1, 0xb9, 0xb8, 0x9c, 0x52, 0xbb, 0xc8, 0x03, 0x02, 0xf1, 0x19, 0x68, 0x4c, 0x6d, 0x09, 0x9b, 0x3c, 0xc7, 0xdf, 0xa3, 0xaa, 0x8e, 0x76, 0x55, 0x58, 0xe8, 0x3b, 0x27, 0x78, 0x14, 0x46, 0x73, 0xf3, 0x3a, 0xec, 0x61, 0x34, 0xa1, 0xe0, 0xbc, 0x1f, 0xb7, 0xb7, 0x6a, 0x74, 0x36, 0x73, 0x23, 0x46, 0x47, 0x14, 0xad, 0xe5, 0xea, 0xd0, 0xa7, 0xb7, 0xe4, 0x84, 0xf8, 0x84, 0xcd, 0x9c, 0x43, 0x76, 0xd4, 0x9f, 0xdf, 0x6f, 0xaf, 0x16, 0x72, 0x4e, 0x88, 0x39, 0x9d, 0x61, 0x7c, 0xc5, 0xe6, 0x2d, 0x1e, 0x3b, 0xa3, 0xd3, 0x5c, 0xc1, 0x10, 0x71, 0x3a, 0xc6, 0xb6, 0x13, 0xa7, 0x83, 0x30, 0x91, 0xdf, 0x75, 0x29, 0x70, 0x65, 0x4c, 0x9e, 0x23, 0xf8, 0x33, 0x6a, 0x5b, 0xda, 0xa6, 0x55, 0x1c, 0xd4, 0x25, 0xe4, 0x17, 0xbb, 0xfe, 0x8b, 0xea, 0x6e, 0x92, 0x73, 0x76, 0x9a, 0x49, 0x06, 0x1b, 0x6b, 0x2c, 0x65, 0x0e, 0xec, 0x52, 0x9c, 0xdf, 0xdd, 0x64, 0xbb, 0xe8, 0xcb, 0x9b, 0x18, 0x0f, 0x62, 0xd9, 0x3a, 0x38, 0x48, 0xfa, 0x6b, 0x71, 0xb7, 0xbd, 0xea, 0x0f, 0xc9, 0x09, 0xee, 0x60, 0x2e, 0xc0, 0x8e, 0xad, 0x42, 0x4e, 0xd0, 0x70, 0x07, 0xe3, 0x4a, 0x73, 0xbd, 0x39, 0xfc, 0xbb, 0x22, 0xcb, 0x03, 0x10, 0x65, 0xe4, 0x2a, 0xb6, 0xd8, 0x79, 0x67, 0xc2, 0x98, 0x2a, 0x55, 0xa4, 0x94, 0x4f, 0xae, 0xc2, 0xb1, 0xdf, 0xad, 0xf1, 0x6f, 0x01, 0x0e, 0x93, 0x96, 0x1d, 0xbe, 0x31, 0xfc, 0x87, 0xde, 0xb8, 0x9d, 0xdf, 0xb8, 0x3d, 0xfd, 0xc6, 0x7c, 0xed, 0x8d, 0xd2, 0x8d, 0x6f, 0xc4, 0x53, 0xf1, 0x9c, 0xf9, 0x63, 0x90, 0xd4, 0x1f, 0x2b, 0xcb, 0xe6, 0x7e, 0xcc, 0xf6, 0x97, 0xd8, 0xf3, 0xe0, 0x9a, 0x56, 0x6f, 0x6e, 0xfd, 0x7a, 0xe2, 0xf8, 0x89, 0x54, 0xee, 0x6f, 0x5f, 0xe2, 0xd1, 0xff, 0xc2, 0xbb, 0x67, 0xdc, 0xee, 0xdd, 0x7c, 0x3e, 0x5f, 0x25, 0x7e, 0x74, 0x08, 0xfb, 0xc7, 0xba, 0xd8, 0xa5, 0x75, 0x1f, 0x47, 0x0a, 0xd5, 0xad, 0x69, 0xdd, 0x88, 0xdb, 0xc9, 0xb7, 0x7e, 0xf2, 0x61, 0xd6, 0xb3, 0xa0, 0xec, 0x23, 0x49, 0x7d, 0xa4, 0x29, 0xe6, 0xb3, 0x7d, 0x02, 0x13, 0x58, 0xbd, 0x64, 0x0f, 0xc2, 0xc6, 0xa1, 0x89, 0x90, 0x8f, 0xa1, 0x52, 0x28, 0xe0, 0x10, 0xd9, 0x86, 0xe9, 0x84, 0x72, 0x61, 0x97, 0x18, 0x3f, 0x2e, 0xaf, 0x34, 0x9b, 0xf8, 0x51, 0x93, 0xab, 0xaf, 0xa9, 0xdf, 0xad, 0x5f, 0xdf, 0xb0, 0x8e, 0xed, 0xf0, 0xe6, 0xa6, 0x24, 0x6f, 0x10, 0x48, 0x07, 0x68, 0x32, 0xc5, 0x91, 0xde, 0x87, 0xf0, 0x20, 0x86, 0xef, 0x6b, 0x66, 0x29, 0xd3, 0x7a, 0xb2, 0x88, 0x21, 0x24, 0x45, 0xa5, 0x57, 0x58, 0xd3, 0xab, 0x03, 0x7a, 0x58, 0xe6, 0xbe, 0x10, 0x47, 0x6d, 0x97, 0x1a, 0x65, 0x8d, 0x06, 0xa3, 0xce, 0xda, 0x21, 0xd1, 0xa6, 0x3d, 0x81, 0x12, 0x69, 0x7f, 0x79, 0x89, 0x74, 0xa0, 0xa2, 0x44, 0x3a, 0xe8, 0x2c, 0x91, 0xf6, 0x72, 0x9b, 0xee, 0x83, 0x5e, 0x6c, 0xc9, 0x4a, 0x7e, 0x76, 0x40, 0x3f, 0x3e, 0xaf, 0xe1, 0xe7, 0xe9, 0x30, 0xe0, 0xab, 0xf6, 0x46, 0x61, 0x03, 0x87, 0xfc, 0xb0, 0x09, 0x53, 0xb6, 0xf0, 0xf3, 0x6c, 0x78, 0x99, 0x65, 0xc3, 0x5f, 0xe1, 0x50, 0x31, 0x6c, 0xc5, 0xe7, 0xd7, 0xf9, 0xd9, 0x05, 0x83, 0xe4, 0x41, 0x71, 0xfd, 0x4e, 0xd8, 0xce, 0x61, 0x2f, 0xec, 0xe4, 0xf0, 0x8f, 0x60, 0x37, 0x87, 0x83, 0x30, 0x8c, 0x79, 0xf7, 0x62, 0x4d, 0xfb, 0xf1, 0x73, 0x50, 0xe6, 0xfb, 0x65, 0x92, 0xd2, 0x42, 0x1a, 0x4d, 0x1d, 0x5a, 0x41, 0x1e, 0xa7, 0xad, 0x35, 0xaa, 0x1a, 0x37, 0x06, 0x02, 0x52, 0xaf, 0x35, 0x42, 0x4f, 0xe5, 0x01, 0x03, 0x58, 0xab, 0xf1, 0x49, 0x5a, 0x26, 0x59, 0x23, 0x86, 0x9f, 0x77, 0x78, 0x96, 0xb8, 0x8e, 0xac, 0x63, 0x7d, 0x0d, 0x5a, 0x25, 0xaf, 0xb3, 0xfe, 0x07, 0xee, 0x08, 0xef, 0x44, 0xb2, 0x06, 0xc9, 0x96, 0x80, 0xf3, 0x69, 0x14, 0x13, 0x54, 0xf2, 0x44, 0x79, 0x35, 0x59, 0x45, 0xf2, 0x45, 0xbc, 0x66, 0x5f, 0x8d, 0xd7, 0x3c, 0xfb, 0xda, 0x58, 0x7d, 0xfd, 0x0b, 0x4e, 0x61, 0xb5, 0x4a, 0x1d, 0x5c, 0x11, 0x2f, 0xa3, 0x54, 0xac, 0x6b, 0x3f, 0xd9, 0xbd, 0x4a, 0xa7, 0xf0, 0x1c, 0x14, 0x6a, 0x29, 0x2f, 0xd3, 0x47, 0x5f, 0x86, 0x76, 0x1c, 0x62, 0x71, 0x17, 0xc0, 0x95, 0x91, 0xed, 0x12, 0xbd, 0x20, 0xc9, 0xae, 0x14, 0xb5, 0x3e, 0x31, 0xcd, 0xe7, 0x85, 0x8a, 0xe8, 0x3e, 0x92, 0x93, 0xda, 0xbd, 0x3c, 0x69, 0x0c, 0x00, 0x52, 0x87, 0x80, 0x71, 0x95, 0x83, 0xab, 0x92, 0x92, 0x07, 0xa8, 0x5f, 0x9c, 0x27, 0x10, 0xdd, 0x4b, 0x79, 0x76, 0x62, 0x9e, 0xf2, 0x74, 0x9e, 0xe0, 0xe0, 0xca, 0xa4, 0xe4, 0xe2, 0x1e, 0x27, 0xa6, 0xc4, 0xaa, 0xdb, 0x6d, 0x1c, 0x5b, 0x1e, 0x7d, 0x6f, 0xf0, 0xd9, 0xa4, 0xc9, 0x0d, 0x8a, 0x14, 0xae, 0x7e, 0xb0, 0x46, 0xda, 0xff, 0x60, 0x44, 0x3a, 0xf0, 0x60, 0xb5, 0x74, 0x70, 0x7a, 0x95, 0xb4, 0x97, 0xed, 0xbf, 0xac, 0xc4, 0x3e, 0x46, 0x61, 0x8d, 0x36, 0x63, 0x55, 0x38, 0x53, 0x96, 0xe8, 0x52, 0x19, 0xd2, 0x72, 0x6b, 0xdc, 0xe2, 0x35, 0xac, 0x9b, 0xb7, 0xc5, 0x19, 0x14, 0x1e, 0xa6, 0xe3, 0x85, 0x8a, 0xad, 0x24, 0xb0, 0x12, 0x60, 0x52, 0x06, 0xae, 0x6d, 0x20, 0xfd, 0xbb, 0xeb, 0x16, 0xa4, 0xac, 0xea, 0xa6, 0x07, 0xa1, 0x87, 0xac, 0x96, 0x71, 0x99, 0xa3, 0x69, 0xeb, 0x6f, 0x6c, 0x65, 0xf3, 0x6c, 0xda, 0xce, 0x9b, 0xd0, 0xf5, 0xd3, 0xd9, 0x79, 0xdb, 0x35, 0xfa, 0xbe, 0xb0, 0xef, 0xa6, 0x5b, 0x79, 0x05, 0x8a, 0xf4, 0xad, 0x1f, 0x93, 0x6e, 0xf1, 0x7c, 0xd2, 0x31, 0xd9, 0x9a, 0xd5, 0x31, 0xf1, 0xf9, 0x34, 0xad, 0xf0, 0x56, 0x27, 0x84, 0xab, 0xa2, 0x55, 0xd6, 0x56, 0x9d, 0xbd, 0x85, 0x1c, 0xb0, 0xcd, 0xaa, 0x82, 0xfc, 0x59, 0x88, 0x6d, 0xe8, 0xb4, 0xc3, 0x6d, 0xd9, 0xfb, 0xf7, 0x47, 0x87, 0x15, 0xb7, 0xaf, 0x61, 0x47, 0xb4, 0xbd, 0xc4, 0x5f, 0x55, 0x86, 0x18, 0x53, 0xe8, 0x37, 0xbd, 0x88, 0xd3, 0xb5, 0xcb, 0x64, 0x83, 0x61, 0x30, 0xda, 0x5e, 0xe0, 0x0f, 0x96, 0x22, 0xee, 0x14, 0xba, 0x44, 0xb1, 0xf3, 0x85, 0xd5, 0x1f, 0x53, 0x5a, 0x87, 0xcc, 0x6a, 0x15, 0x9a, 0x26, 0x9a, 0xec, 0x7b, 0x56, 0xf7, 0xe9, 0x1d, 0x6d, 0x57, 0x1f, 0x66, 0x1f, 0x41, 0x9d, 0x30, 0xdf, 0xd9, 0x09, 0xca, 0xac, 0x4e, 0xe8, 0x40, 0xba, 0xac, 0x13, 0x52, 0x4e, 0xdc, 0xe3, 0x15, 0x9d, 0x10, 0x0f, 0x78, 0xa1, 0x2d, 0xba, 0x4f, 0xb3, 0x54, 0xe2, 0x4b, 0x35, 0x6b, 0x36, 0x65, 0x4a, 0x35, 0x6b, 0x25, 0xe5, 0x14, 0xf3, 0x48, 0xd6, 0x22, 0x90, 0x11, 0x82, 0xa1, 0x0b, 0xd0, 0xac, 0xd9, 0x94, 0x89, 0xe0, 0xca, 0x8f, 0xca, 0x31, 0xec, 0x8d, 0x8f, 0xe4, 0x1f, 0x3e, 0x39, 0xe7, 0x76, 0x43, 0xe9, 0x3d, 0x6d, 0x08, 0x15, 0x8a, 0x97, 0x42, 0xed, 0x35, 0x35, 0x59, 0x22, 0xbc, 0x96, 0x90, 0x4d, 0xd6, 0x4e, 0x28, 0x89, 0x17, 0x74, 0x03, 0xe2, 0xe2, 0x12, 0x5b, 0x8a, 0x31, 0xe0, 0x59, 0xfb, 0x19, 0x3b, 0xdb, 0x4f, 0x60, 0xdb, 0xf9, 0x42, 0xbb, 0xd6, 0xcf, 0xba, 0x23, 0x48, 0xcc, 0x24, 0xc8, 0xfe, 0x17, 0x49, 0x79, 0xb3, 0x4d, 0x3d, 0x91, 0x4f, 0x7d, 0xdd, 0x0e, 0x94, 0x13, 0x4b, 0x92, 0xed, 0x7d, 0x11, 0xf7, 0xaa, 0xef, 0x8e, 0x91, 0xc5, 0x40, 0x16, 0xd4, 0x4b, 0xe9, 0x56, 0xe4, 0x50, 0x2b, 0x4c, 0x3d, 0x54, 0x63, 0x8f, 0x91, 0x4d, 0x7d, 0x4e, 0xb7, 0x39, 0x8a, 0x10, 0x8a, 0x49, 0xf2, 0x6c, 0xf6, 0x9a, 0x12, 0x43, 0xda, 0x83, 0x62, 0xf7, 0xc6, 0x5e, 0x03, 0x73, 0xa2, 0x20, 0xb6, 0x32, 0x91, 0x4f, 0xd6, 0xde, 0xe8, 0x3d, 0x48, 0x89, 0xb0, 0x15, 0x46, 0x7a, 0x5f, 0xd6, 0x8a, 0x0b, 0xc2, 0x1f, 0x6d, 0x6c, 0xd8, 0x1a, 0x50, 0x66, 0x5c, 0x58, 0xaf, 0x29, 0x33, 0x26, 0x42, 0xd7, 0xe9, 0x86, 0xd1, 0xb8, 0xa4, 0xd5, 0xbc, 0x6b, 0x6c, 0x61, 0xb6, 0xfd, 0xd8, 0x76, 0x2f, 0x3c, 0x9c, 0x6e, 0xbb, 0x90, 0xc8, 0x67, 0x8d, 0x25, 0x8f, 0xf0, 0xda, 0x8e, 0x54, 0x98, 0x01, 0xfb, 0x3d, 0xc9, 0x6b, 0xc6, 0x72, 0x64, 0x4d, 0xbe, 0x20, 0xad, 0x07, 0xea, 0x63, 0xfd, 0x44, 0xcd, 0x1a, 0x45, 0x90, 0x57, 0x6b, 0x5a, 0x4b, 0x28, 0x5f, 0xe8, 0x8a, 0xc7, 0x70, 0xe5, 0xc6, 0xcd, 0x0f, 0x84, 0x21, 0x4f, 0xc8, 0x09, 0x0a, 0xdd, 0x20, 0xb6, 0x72, 0x17, 0x4c, 0xcb, 0xcb, 0xfb, 0xa4, 0xb4, 0x47, 0xbe, 0x8c, 0x3d, 0x91, 0xad, 0x5c, 0xb7, 0x99, 0xec, 0x89, 0xf0, 0xde, 0xb2, 0xa5, 0xa1, 0x01, 0x59, 0x38, 0xd7, 0xa0, 0x41, 0xbd, 0xb5, 0x0a, 0xa4, 0x84, 0xbd, 0xc3, 0x8c, 0xbf, 0x86, 0x78, 0x50, 0xc9, 0xc5, 0xdf, 0x9c, 0x44, 0x21, 0x7e, 0x1b, 0xe3, 0x7e, 0x65, 0x9a, 0xec, 0x85, 0xb0, 0xdd, 0x0b, 0x35, 0x4a, 0x21, 0x3e, 0xc5, 0xf0, 0xa9, 0x5e, 0xc9, 0x23, 0x6b, 0x3f, 0xf8, 0x54, 0xa6, 0x90, 0x46, 0x46, 0x05, 0x3e, 0x55, 0x3a, 0x7a, 0xa7, 0x87, 0xc0, 0x98, 0xb6, 0x6d, 0x1e, 0xa1, 0x95, 0xdb, 0xac, 0xd9, 0x69, 0xb0, 0xa4, 0x54, 0xd2, 0x38, 0xd1, 0xec, 0x59, 0xe4, 0x78, 0x49, 0x63, 0xc3, 0x8a, 0xe5, 0x6c, 0x76, 0xd2, 0x26, 0xee, 0x8d, 0x1b, 0x63, 0xcb, 0x13, 0xcf, 0x74, 0x43, 0x29, 0x62, 0xf0, 0x4e, 0xf6, 0x59, 0xd3, 0x7b, 0x31, 0x61, 0x36, 0x1b, 0x10, 0x6b, 0x31, 0x2b, 0x6d, 0x64, 0x93, 0x37, 0xbe, 0x10, 0xc7, 0xc0, 0xc4, 0x71, 0x46, 0x8c, 0x7b, 0x94, 0xa9, 0xe7, 0x06, 0x2e, 0x61, 0x5d, 0xb2, 0x74, 0x5f, 0x5f, 0xc2, 0x14, 0x79, 0x37, 0x6e, 0x52, 0x2a, 0x23, 0xc3, 0x89, 0x0a, 0xcc, 0x99, 0x4b, 0xe1, 0x36, 0x93, 0x52, 0x12, 0x19, 0x5e, 0xec, 0xe6, 0x5c, 0xb6, 0x25, 0x13, 0xf7, 0xae, 0x98, 0x12, 0x80, 0x09, 0x3b, 0xfa, 0xe2, 0x54, 0x0b, 0x7c, 0x69, 0x58, 0x31, 0xd1, 0xed, 0xc5, 0x97, 0xc6, 0xed, 0x38, 0xc7, 0x3d, 0xce, 0x7b, 0x6e, 0x6e, 0x21, 0xee, 0xbd, 0x82, 0x6c, 0x2d, 0xf3, 0xfa, 0xb0, 0x1e, 0xe3, 0x8e, 0xbe, 0x96, 0x05, 0x87, 0xfb, 0x4a, 0x67, 0xba, 0x4c, 0xf5, 0x9f, 0xc8, 0x12, 0x34, 0x43, 0x17, 0x58, 0xf0, 0x54, 0xaa, 0xf4, 0xd6, 0xe2, 0x09, 0x1a, 0xc2, 0xb3, 0x34, 0x88, 0x4b, 0x21, 0x4a, 0xba, 0x2b, 0x58, 0xe3, 0xef, 0xe1, 0xd4, 0xbb, 0xa3, 0xb7, 0x4b, 0xf9, 0xdf, 0x6d, 0xb7, 0x4b, 0xf9, 0xaa, 0xeb, 0x76, 0x29, 0x8f, 0xd9, 0x45, 0x4b, 0xb5, 0xdd, 0xef, 0x73, 0x7b, 0xa1, 0xd4, 0x83, 0xd0, 0xd7, 0x89, 0xb0, 0xba, 0x04, 0x61, 0x33, 0x42, 0x83, 0x88, 0xc3, 0x0b, 0x51, 0x97, 0x74, 0xb3, 0xff, 0xb9, 0x39, 0xd7, 0xc6, 0x9e, 0xc1, 0xdd, 0x5b, 0xc8, 0x1a, 0xd5, 0x93, 0xf1, 0x34, 0x12, 0x56, 0x2f, 0xe9, 0x26, 0x8e, 0xf4, 0x1a, 0x4d, 0x62, 0xbf, 0xb0, 0xfe, 0x65, 0xe3, 0xbc, 0x15, 0xc2, 0x16, 0x51, 0x6c, 0x45, 0xfc, 0x90, 0xde, 0x3b, 0x9d, 0xf0, 0xd8, 0xa5, 0x59, 0xd2, 0x9e, 0xa4, 0xad, 0xda, 0xa6, 0xf2, 0x20, 0xeb, 0x48, 0xd7, 0x31, 0x87, 0xc4, 0x96, 0xb0, 0xa6, 0xc6, 0x06, 0xd7, 0xc4, 0xcd, 0xce, 0x36, 0x3c, 0xd3, 0xa5, 0x17, 0x0f, 0x38, 0x72, 0x58, 0xa7, 0xd5, 0xaf, 0xd7, 0x69, 0xf5, 0xe6, 0x90, 0xaf, 0x3f, 0x92, 0x61, 0xf0, 0x12, 0x24, 0xde, 0xa5, 0xfa, 0xf4, 0x3a, 0xac, 0x42, 0x97, 0x94, 0x2c, 0x02, 0xe0, 0x2c, 0x18, 0x09, 0xa7, 0x41, 0xca, 0xa0, 0x32, 0x05, 0x8a, 0x79, 0xa8, 0x1f, 0x69, 0x76, 0xb3, 0xc6, 0x53, 0xb9, 0x94, 0x02, 0x0d, 0x56, 0x9f, 0x60, 0xdd, 0x47, 0xdc, 0xbb, 0x38, 0x1e, 0x4d, 0x38, 0x0e, 0xcd, 0x6e, 0x84, 0x8a, 0x8e, 0x62, 0x68, 0x72, 0x2d, 0x86, 0x0a, 0xd2, 0xac, 0x81, 0xa9, 0x71, 0x30, 0x30, 0x97, 0xc4, 0x33, 0x97, 0xb8, 0x26, 0xa4, 0x17, 0x6d, 0x58, 0x4d, 0xe1, 0xac, 0x17, 0x30, 0x61, 0xc7, 0x75, 0xfc, 0x98, 0xc9, 0xf9, 0x09, 0xd2, 0xcc, 0x21, 0xcb, 0xbe, 0x0d, 0xe4, 0x95, 0x63, 0x70, 0x20, 0x11, 0x15, 0xbe, 0x95, 0xd7, 0xff, 0x94, 0xf0, 0x5c, 0xef, 0xfa, 0xfa, 0xf5, 0xde, 0x22, 0xe8, 0xe1, 0x98, 0xdf, 0xf2, 0x73, 0x05, 0x7e, 0xfc, 0x14, 0x7e, 0xe1, 0xb3, 0x64, 0x17, 0x1b, 0xe8, 0xee, 0xd5, 0xef, 0xbd, 0x0b, 0xf7, 0xbe, 0xcd, 0x6b, 0xe6, 0xf8, 0x18, 0xe3, 0xc6, 0xa4, 0x7f, 0xd0, 0xa4, 0x79, 0x18, 0x6b, 0x9a, 0xd5, 0x0a, 0x1e, 0x28, 0xc1, 0xef, 0x12, 0xf0, 0xb1, 0xd6, 0x5d, 0x13, 0x6b, 0xdd, 0x35, 0x21, 0xd6, 0x48, 0x39, 0x1a, 0x3d, 0xc0, 0xb6, 0x5f, 0x7f, 0x0f, 0x7e, 0x6a, 0x73, 0x9a, 0x8f, 0x47, 0x96, 0x5f, 0xbd, 0x73, 0x10, 0x5e, 0xd5, 0x41, 0x30, 0x65, 0x1b, 0x7c, 0x96, 0xd6, 0xb4, 0x3f, 0x88, 0x6b, 0x27, 0x12, 0x79, 0x13, 0x22, 0x78, 0xc6, 0x96, 0xb3, 0xa5, 0xd8, 0xe8, 0x2d, 0x28, 0x15, 0x9d, 0x75, 0x58, 0xef, 0x1d, 0xde, 0x89, 0x29, 0x63, 0xef, 0xb3, 0xb8, 0x6c, 0x96, 0xaa, 0x2a, 0x69, 0x94, 0x61, 0x0f, 0x2a, 0x33, 0x9e, 0xf8, 0xee, 0xc0, 0xb4, 0xaf, 0x93, 0x5e, 0xab, 0x3e, 0xb5, 0x7e, 0xbd, 0xdc, 0x64, 0xaf, 0x11, 0x6d, 0x93, 0x9b, 0x1e, 0xc0, 0x13, 0x87, 0xda, 0xfc, 0x00, 0x59, 0xbd, 0xc2, 0x56, 0x73, 0xfc, 0x66, 0xfd, 0xba, 0x19, 0x37, 0xd2, 0x4b, 0x98, 0x43, 0x54, 0xc5, 0x33, 0x41, 0xd2, 0xb0, 0xe5, 0x1a, 0xac, 0x94, 0xd3, 0xb0, 0x92, 0xd7, 0x06, 0x41, 0x4a, 0x27, 0xe1, 0x4a, 0x69, 0xcb, 0x37, 0xce, 0x28, 0x6b, 0x86, 0x6b, 0x3a, 0x71, 0xb1, 0x81, 0x84, 0xcf, 0x57, 0x22, 0xc9, 0xf3, 0x82, 0x7f, 0x11, 0x94, 0xe4, 0x78, 0xa1, 0xdc, 0x60, 0xef, 0x90, 0x0a, 0xb4, 0x16, 0xcd, 0x7b, 0xa0, 0x4d, 0x2a, 0xc4, 0x16, 0xd1, 0xef, 0x34, 0x6c, 0xd1, 0x3c, 0xd1, 0xa2, 0xd0, 0x59, 0x9d, 0x3e, 0xe4, 0xbe, 0xb4, 0xf5, 0xe6, 0x68, 0x1b, 0x61, 0xb0, 0x19, 0x1b, 0x2c, 0x88, 0xbb, 0xba, 0x74, 0xfa, 0xe7, 0x88, 0xb7, 0x06, 0xba, 0xa1, 0xf6, 0x3c, 0xd8, 0x95, 0x7c, 0xb9, 0x8e, 0x35, 0xce, 0x09, 0x0b, 0x77, 0x91, 0x2d, 0x14, 0x84, 0xdb, 0xf3, 0xf8, 0x3c, 0xf9, 0x30, 0x86, 0xd0, 0x85, 0x75, 0xcf, 0x97, 0xa5, 0x2d, 0x46, 0x0a, 0x2d, 0xf4, 0xf9, 0x85, 0x19, 0x7b, 0x43, 0xe6, 0x5b, 0x59, 0x1a, 0x42, 0xfa, 0x68, 0xaa, 0xd9, 0x8d, 0xa1, 0xcf, 0x27, 0xf2, 0xf4, 0x36, 0xa3, 0x52, 0x63, 0xef, 0x92, 0x47, 0xca, 0xf1, 0x9e, 0x02, 0x18, 0x1f, 0x48, 0x19, 0xc8, 0x2b, 0xad, 0x86, 0x05, 0xb0, 0xce, 0x2f, 0xed, 0x77, 0xdc, 0xff, 0x75, 0xec, 0x09, 0x2e, 0xdf, 0xdb, 0x0a, 0x05, 0xe0, 0x71, 0xbb, 0xa0, 0x90, 0x7d, 0xab, 0x6e, 0x76, 0x23, 0x4d, 0x4d, 0xb2, 0x57, 0x86, 0xa6, 0x84, 0x45, 0x0e, 0xe3, 0xaa, 0xb2, 0xd3, 0xfd, 0x45, 0x49, 0x0e, 0xc9, 0x63, 0xe2, 0x5a, 0xcf, 0x6a, 0xe3, 0x1f, 0xf4, 0xf7, 0x40, 0xe5, 0x4f, 0xc9, 0xc7, 0xb8, 0x2f, 0x5c, 0xa3, 0x98, 0x1a, 0x6b, 0x10, 0xf6, 0x10, 0xdd, 0xe0, 0x93, 0x6d, 0x64, 0x7d, 0x7d, 0xf0, 0x4d, 0xf0, 0xc4, 0xcf, 0x7a, 0xab, 0x11, 0x1c, 0x76, 0x82, 0x47, 0xe9, 0xf9, 0xa7, 0x8f, 0xc1, 0x93, 0x30, 0xe1, 0xb7, 0x2f, 0xde, 0x96, 0xb6, 0x03, 0x9a, 0xd1, 0x4f, 0xac, 0x67, 0x5b, 0xd1, 0xe5, 0x78, 0x72, 0x06, 0xc8, 0x7e, 0x34, 0x42, 0xb2, 0x20, 0xf9, 0x81, 0x79, 0xf1, 0xc0, 0x6c, 0xb2, 0xb7, 0x57, 0xc5, 0xf6, 0xa5, 0xda, 0x35, 0xf9, 0x33, 0xfb, 0x4d, 0xda, 0x8d, 0x56, 0x7b, 0x24, 0x9b, 0x2f, 0xfc, 0x06, 0xf8, 0xa4, 0x24, 0x5b, 0x83, 0x7e, 0x03, 0x3c, 0xf3, 0xde, 0xc4, 0xf7, 0x37, 0x09, 0x8b, 0x0c, 0x31, 0x7c, 0xc6, 0x93, 0x7c, 0x29, 0x79, 0x85, 0xd4, 0x6c, 0x60, 0x18, 0xe7, 0x3d, 0x1b, 0xbf, 0x8c, 0x50, 0xdb, 0x67, 0xef, 0x57, 0xa4, 0x1e, 0x55, 0x6f, 0x6b, 0x40, 0x0e, 0x3f, 0x50, 0x03, 0x32, 0xdf, 0xf3, 0xdb, 0xb3, 0xda, 0xc4, 0x38, 0x86, 0xc7, 0x48, 0x93, 0x1c, 0xe7, 0x67, 0x92, 0x1b, 0x9c, 0xf5, 0xe5, 0x10, 0xdd, 0x8b, 0xbd, 0xdd, 0xcb, 0x74, 0xeb, 0x3b, 0x9a, 0x6e, 0xe4, 0x8e, 0xda, 0xf3, 0x38, 0x52, 0x75, 0xe3, 0xb4, 0xa3, 0x79, 0x5c, 0xab, 0xce, 0x42, 0x65, 0x38, 0xac, 0x18, 0x1b, 0xc3, 0xf6, 0xa0, 0x7c, 0x57, 0x22, 0xb2, 0xa3, 0x37, 0x7e, 0x19, 0xb1, 0xa2, 0x0d, 0x6f, 0xd1, 0xd8, 0x04, 0xf0, 0xdb, 0x97, 0x28, 0x93, 0x1b, 0xe6, 0x09, 0xcb, 0x9e, 0x26, 0xc6, 0xda, 0x4f, 0xcb, 0x55, 0xae, 0x09, 0x8d, 0x2b, 0x45, 0x7b, 0xbf, 0xf4, 0x6f, 0xea, 0xe5, 0x84, 0x39, 0x5c, 0x3d, 0xef, 0xd9, 0xb6, 0xb3, 0x4b, 0xc1, 0xde, 0xbf, 0xcc, 0xa0, 0x98, 0x97, 0x19, 0xba, 0x55, 0xc2, 0xa1, 0xf5, 0x36, 0x5c, 0x63, 0xd5, 0x71, 0xbf, 0x37, 0x86, 0xbb, 0xb9, 0x0a, 0xf7, 0x7a, 0x04, 0x82, 0xb5, 0x17, 0xc0, 0x41, 0xfe, 0xa2, 0x8b, 0xaf, 0x91, 0x3d, 0xd2, 0xe8, 0xb2, 0xeb, 0x57, 0x34, 0x6a, 0xbb, 0x13, 0x6a, 0x12, 0xe7, 0x4a, 0xbd, 0x10, 0x41, 0x3c, 0x41, 0xf5, 0x49, 0x9a, 0xe5, 0x66, 0x47, 0xfd, 0xd3, 0xbe, 0x6a, 0xb7, 0x79, 0xde, 0xb3, 0xf2, 0x04, 0xb9, 0x0a, 0xa9, 0xf7, 0xa5, 0x9a, 0xfe, 0xf2, 0x14, 0xdc, 0x91, 0x05, 0x44, 0xd9, 0xc0, 0x00, 0xa1, 0x42, 0xf5, 0x4f, 0x4b, 0x03, 0xaa, 0x7a, 0x5d, 0xa5, 0x7d, 0xf0, 0x08, 0xdb, 0x2f, 0x20, 0xaa, 0x11, 0xd7, 0x53, 0x13, 0x78, 0x70, 0x4c, 0xcb, 0x5d, 0x8b, 0x20, 0xdf, 0xbd, 0x08, 0x0a, 0xfc, 0xc5, 0x60, 0x8c, 0xbe, 0x6b, 0x2b, 0x26, 0x5e, 0x64, 0x59, 0xf0, 0x67, 0xef, 0x96, 0x4c, 0x2e, 0x6b, 0x07, 0x13, 0x86, 0x1f, 0x8a, 0xf6, 0x86, 0x7e, 0x83, 0x24, 0x55, 0x14, 0x7c, 0xbe, 0x76, 0x84, 0x31, 0x17, 0x0b, 0x54, 0x8c, 0x2d, 0x8f, 0xf6, 0xae, 0x1f, 0xc6, 0xb0, 0x25, 0xf4, 0x9b, 0x7e, 0x0a, 0x3f, 0x4c, 0x7c, 0x4b, 0x5e, 0x31, 0x85, 0x74, 0x0e, 0x27, 0xba, 0xca, 0x90, 0xe0, 0x88, 0xfe, 0xb0, 0xd4, 0x03, 0xb9, 0xd1, 0x3d, 0xa5, 0x49, 0x30, 0xe3, 0x9a, 0x72, 0xc5, 0x2b, 0x2b, 0x8a, 0xc9, 0x87, 0xe4, 0x07, 0xcb, 0x3f, 0x58, 0x11, 0x28, 0xc6, 0xf4, 0x7d, 0xb3, 0x7f, 0xd3, 0x0a, 0x3f, 0xdb, 0x33, 0xf7, 0x52, 0xb3, 0xfa, 0xfd, 0xf7, 0x93, 0x96, 0x00, 0xce, 0xe3, 0x77, 0x0e, 0xb8, 0x73, 0x3f, 0xf8, 0x06, 0x96, 0xb0, 0xcc, 0xfd, 0xcd, 0x56, 0xf5, 0xad, 0xf7, 0x93, 0xe5, 0x65, 0x18, 0xfb, 0xad, 0x03, 0x3f, 0xdb, 0xaf, 0x94, 0xb8, 0x27, 0x6e, 0x5e, 0xfd, 0xc1, 0x37, 0x4e, 0x3d, 0x8b, 0x67, 0x82, 0x8f, 0x7c, 0x70, 0x79, 0x26, 0x1f, 0xeb, 0x3f, 0xb5, 0xea, 0x83, 0x15, 0xce, 0x9a, 0x9f, 0xed, 0x51, 0x6c, 0x58, 0xc6, 0xe8, 0x9e, 0xf8, 0xc1, 0xea, 0xb2, 0x24, 0x98, 0x7e, 0x86, 0x90, 0xf8, 0x9d, 0x67, 0x3b, 0xcc, 0xdf, 0x7f, 0x0f, 0xa9, 0x97, 0x49, 0x8a, 0xe4, 0x9e, 0xf8, 0x03, 0x8c, 0x69, 0xc7, 0x12, 0x6f, 0xfd, 0x38, 0x69, 0xf6, 0x98, 0x15, 0x23, 0x9e, 0xaf, 0x3e, 0xcc, 0x69, 0xa6, 0x37, 0xcd, 0xfe, 0x4d, 0xb3, 0xea, 0x98, 0xfc, 0xfd, 0x1f, 0x27, 0x25, 0xc7, 0xa4, 0xf0, 0xeb, 0x20, 0xef, 0xea, 0xeb, 0x88, 0xf8, 0x63, 0x55, 0xbf, 0x6e, 0x55, 0x9d, 0x93, 0xde, 0xfa, 0x51, 0x52, 0x72, 0x9a, 0x77, 0xaf, 0xe8, 0xf0, 0x13, 0x96, 0xf2, 0xa5, 0xbd, 0xd1, 0x95, 0xd4, 0xca, 0x2d, 0x7b, 0x5d, 0xb9, 0xf6, 0x76, 0x84, 0x7e, 0x9a, 0x0c, 0x8f, 0x3c, 0xc1, 0x6e, 0xa2, 0x76, 0xbe, 0x78, 0x40, 0xb3, 0x02, 0x58, 0x73, 0x3f, 0x79, 0x6f, 0x49, 0x82, 0x2c, 0x2c, 0x7a, 0xdd, 0x3b, 0x17, 0x5c, 0xf7, 0xcf, 0x85, 0xe8, 0xe6, 0xd9, 0x0f, 0x57, 0x83, 0x11, 0x29, 0x2b, 0xff, 0x96, 0xe0, 0xc3, 0x35, 0x88, 0x17, 0x27, 0xc1, 0x86, 0x6f, 0xb4, 0xb9, 0xde, 0x00, 0x47, 0x51, 0x1d, 0x38, 0x1a, 0xdb, 0xf1, 0xc4, 0x48, 0xca, 0x00, 0x85, 0xf2, 0xdc, 0x14, 0x74, 0xa9, 0x8e, 0x3a, 0xac, 0x2f, 0x40, 0x7c, 0x26, 0x84, 0xa1, 0xec, 0x3f, 0xf7, 0xfd, 0x57, 0xc9, 0x26, 0x3c, 0xaf, 0xf8, 0xc2, 0x86, 0x75, 0x0a, 0x59, 0x50, 0x28, 0x0f, 0x2f, 0xa2, 0x93, 0xb5, 0x67, 0x94, 0xad, 0x52, 0xb3, 0x9d, 0x06, 0xe6, 0x26, 0x09, 0xef, 0x3f, 0xf6, 0xa2, 0x5a, 0xf5, 0x5a, 0x51, 0x54, 0xbd, 0xc2, 0x36, 0xf1, 0x4e, 0xe1, 0xba, 0xba, 0x76, 0xb3, 0xc7, 0xe7, 0xac, 0x5d, 0x06, 0x0d, 0xae, 0x4d, 0xba, 0xbd, 0xb7, 0x93, 0xe9, 0x55, 0xe3, 0xbd, 0x9d, 0xb0, 0xe7, 0x6b, 0x6b, 0x56, 0xa7, 0x57, 0xb3, 0x4c, 0x64, 0x17, 0x10, 0xbe, 0x72, 0x1c, 0xe4, 0xf5, 0x90, 0x75, 0x1a, 0xf6, 0xfc, 0x11, 0xcf, 0x0b, 0x7f, 0x0f, 0xec, 0x5e, 0xb2, 0x12, 0xbe, 0x4b, 0xdd, 0x4f, 0xf7, 0x73, 0x70, 0x1e, 0x21, 0x06, 0x9e, 0x79, 0x41, 0x90, 0x82, 0x3f, 0x57, 0x1f, 0x08, 0x42, 0x5d, 0x15, 0xc2, 0x67, 0xca, 0xaf, 0xe4, 0xf1, 0x2d, 0x4f, 0x5d, 0xdc, 0x3c, 0xfb, 0x0c, 0xae, 0xda, 0xe7, 0xec, 0x73, 0x34, 0x5c, 0xe1, 0x4c, 0xf8, 0xf9, 0x52, 0x37, 0xf8, 0xa5, 0xf0, 0xbf, 0x7c, 0x02, 0xe1, 0x20, 0x20, 0x6e, 0x62, 0x97, 0xe7, 0x28, 0x56, 0xac, 0x47, 0x96, 0x82, 0x60, 0x5c, 0x19, 0xd4, 0xf2, 0x9d, 0x0f, 0xb7, 0x21, 0xfc, 0x6b, 0x83, 0x92, 0x07, 0xc3, 0xe0, 0x5f, 0x02, 0x15, 0x92, 0x84, 0xb3, 0x50, 0x7b, 0x16, 0xa1, 0xa6, 0xcb, 0x57, 0x04, 0xb2, 0x5f, 0x7a, 0x2b, 0x84, 0x18, 0xe7, 0x54, 0x29, 0xa8, 0x7e, 0xd2, 0x5b, 0xfd, 0x10, 0xcd, 0x5c, 0x9d, 0x7d, 0x4e, 0xf6, 0x44, 0x70, 0xa6, 0x4f, 0x84, 0x43, 0x88, 0x39, 0x35, 0xce, 0xc6, 0x72, 0x5a, 0x6a, 0x89, 0x13, 0xe2, 0x61, 0x0d, 0xd7, 0x31, 0xde, 0xe0, 0x97, 0x7d, 0x1a, 0x59, 0x94, 0xb3, 0xb7, 0x4a, 0x51, 0xc6, 0x12, 0x04, 0x8e, 0xf0, 0x4d, 0x9d, 0x2c, 0x10, 0x9f, 0x52, 0xb3, 0xe7, 0x37, 0xaf, 0x5b, 0x02, 0x72, 0x8d, 0x76, 0xb6, 0xe4, 0x08, 0xff, 0x35, 0x64, 0x63, 0x4a, 0x26, 0xdd, 0xe5, 0x4e, 0x90, 0x49, 0xbe, 0xd0, 0xe1, 0x82, 0x82, 0xb4, 0xcf, 0x15, 0x27, 0x90, 0xef, 0x94, 0x6f, 0x1f, 0x7c, 0xe1, 0x47, 0xb8, 0x3e, 0xa4, 0x3d, 0x7d, 0x8a, 0x03, 0xb1, 0xed, 0x42, 0xf2, 0x61, 0x4a, 0x37, 0x45, 0xd2, 0xac, 0x84, 0xcd, 0x55, 0x2b, 0x9b, 0xc5, 0x73, 0xdc, 0xf8, 0xed, 0x83, 0x29, 0xb0, 0x47, 0x35, 0x38, 0x0a, 0x86, 0x25, 0x3f, 0xd8, 0x1f, 0x1f, 0x61, 0x4e, 0x16, 0xc0, 0x2a, 0xcd, 0xbe, 0xec, 0x00, 0x86, 0x0d, 0x09, 0x3f, 0x79, 0x5e, 0x91, 0x2a, 0x19, 0x4b, 0x9f, 0xc2, 0xba, 0x62, 0xab, 0xec, 0x03, 0x72, 0x2f, 0xc3, 0xe4, 0x46, 0x57, 0x3f, 0x9e, 0x2e, 0x4b, 0x08, 0xcf, 0x4e, 0x30, 0x4e, 0x18, 0xf7, 0x60, 0x38, 0x2e, 0x4a, 0xb0, 0xaf, 0x16, 0xd2, 0x77, 0x33, 0xd2, 0x7b, 0x39, 0x95, 0xee, 0xf9, 0xf1, 0x9d, 0xc4, 0xe7, 0xc6, 0xf6, 0x5c, 0x71, 0x0d, 0xc8, 0xdb, 0x20, 0x80, 0x74, 0x3d, 0xdd, 0xb1, 0xfb, 0xec, 0x22, 0x14, 0xe5, 0x90, 0x9d, 0xdf, 0xdd, 0xa1, 0x7b, 0xb7, 0x4b, 0x91, 0xe4, 0x3a, 0x57, 0x43, 0x2c, 0x29, 0x55, 0x26, 0xae, 0xfc, 0x60, 0x3f, 0xc2, 0xe9, 0x8b, 0xc2, 0xcf, 0xb1, 0xfd, 0x05, 0xc5, 0x38, 0x7d, 0x1e, 0x04, 0x9c, 0x03, 0xf2, 0x73, 0xb8, 0x56, 0x36, 0x73, 0x6b, 0x1c, 0xb1, 0x01, 0x7a, 0x1b, 0x1c, 0x64, 0x2f, 0x31, 0xd7, 0xb8, 0xb5, 0x46, 0x97, 0x96, 0x13, 0x7b, 0xd1, 0x21, 0xf7, 0x2a, 0x49, 0x2d, 0xcf, 0x56, 0xf2, 0x57, 0x1c, 0xbf, 0xa6, 0xd4, 0xe9, 0xda, 0x5d, 0xca, 0x76, 0x05, 0xb1, 0xdd, 0xf8, 0xd6, 0x86, 0x58, 0x2b, 0xbe, 0xf3, 0xaa, 0xdd, 0x96, 0xe8, 0xb1, 0x87, 0x14, 0xc9, 0x1e, 0x76, 0xdc, 0x95, 0xa9, 0x71, 0x39, 0xd6, 0x18, 0x82, 0x80, 0xbd, 0x37, 0x3c, 0xa0, 0x4c, 0xc3, 0xfa, 0x8c, 0x4a, 0xb3, 0xa8, 0x6d, 0x7c, 0xdb, 0xe4, 0xe7, 0xc2, 0x2f, 0x20, 0xee, 0xeb, 0x36, 0xed, 0x64, 0x0d, 0xf0, 0x47, 0xc9, 0x62, 0x4e, 0xc3, 0x3a, 0x81, 0x41, 0x64, 0x3c, 0xde, 0x4c, 0xd3, 0x3c, 0xde, 0x4c, 0x61, 0x8f, 0x37, 0x36, 0x21, 0x5d, 0xdb, 0x95, 0x33, 0xbc, 0x3c, 0x41, 0x7e, 0x9a, 0x76, 0xa4, 0xf1, 0x0c, 0xcd, 0xda, 0x97, 0x25, 0xad, 0x57, 0x4e, 0xe5, 0xbd, 0xae, 0xb4, 0x6e, 0xf9, 0x74, 0x0c, 0x41, 0x39, 0xf3, 0xd7, 0x5e, 0x26, 0xfb, 0x22, 0xa4, 0x37, 0xef, 0x30, 0x3b, 0x81, 0xb9, 0xb9, 0xa5, 0xb1, 0xbe, 0x84, 0x0f, 0xe1, 0x05, 0x62, 0x7e, 0x06, 0x10, 0x36, 0xf5, 0xee, 0xdc, 0x54, 0x14, 0x56, 0xaf, 0x16, 0x55, 0x8d, 0xb7, 0x39, 0x72, 0x7d, 0x53, 0xc6, 0xe6, 0x88, 0xcc, 0x5e, 0x9b, 0x8e, 0xa6, 0x61, 0x00, 0xd9, 0xd7, 0x21, 0x8a, 0x12, 0x29, 0x30, 0x5a, 0x4b, 0x13, 0x70, 0x1e, 0xcb, 0x19, 0xae, 0x5b, 0x1e, 0x0c, 0x41, 0x14, 0x77, 0x51, 0x4c, 0xc9, 0xf7, 0xb9, 0xc1, 0x3c, 0x12, 0x7a, 0x30, 0x08, 0x51, 0x7c, 0xb2, 0x8c, 0x84, 0xf1, 0x29, 0x46, 0x5e, 0x8b, 0x11, 0x26, 0x6c, 0x7f, 0x90, 0xec, 0x34, 0x9b, 0xf1, 0x3b, 0x06, 0x96, 0xb4, 0x1f, 0xdd, 0x94, 0x81, 0x7d, 0x20, 0x9d, 0x4f, 0xfb, 0x40, 0x4a, 0x81, 0x3e, 0xcc, 0xb8, 0xa0, 0xe6, 0xc7, 0x88, 0x74, 0xf6, 0xd9, 0x96, 0x99, 0xde, 0x26, 0x69, 0x3f, 0xd9, 0x31, 0x8d, 0xb9, 0xe0, 0x9e, 0xa4, 0x35, 0x8d, 0xe3, 0xdd, 0xb7, 0xe6, 0x16, 0x76, 0x4b, 0x8d, 0x69, 0x4f, 0x29, 0xe4, 0xe3, 0x5b, 0x78, 0xfe, 0xe2, 0x59, 0xaa, 0x40, 0x38, 0xcd, 0xde, 0xfb, 0xc8, 0x07, 0x71, 0x74, 0x6f, 0xf4, 0x3d, 0x7c, 0xf7, 0x94, 0x4c, 0x9d, 0x85, 0x9a, 0x8f, 0x92, 0xac, 0x65, 0xb2, 0x94, 0xde, 0xa3, 0x55, 0x5d, 0x40, 0x48, 0x09, 0x0b, 0x09, 0xe5, 0x59, 0x15, 0x8e, 0xda, 0xa2, 0x7a, 0xf5, 0x04, 0xc9, 0x0b, 0xaa, 0xa7, 0xb5, 0x7d, 0x14, 0xa8, 0x94, 0xca, 0xaa, 0x66, 0x46, 0xd4, 0x63, 0x33, 0xab, 0xd5, 0xe3, 0xe5, 0x41, 0x7b, 0x1d, 0xad, 0x9d, 0xa4, 0xc9, 0x61, 0x8d, 0xf4, 0xd9, 0xc3, 0x2c, 0x25, 0x7d, 0xb4, 0xbc, 0x58, 0x3d, 0xd6, 0x18, 0xd9, 0x34, 0x7b, 0x67, 0x6d, 0x27, 0xdb, 0xc5, 0xc0, 0x54, 0x73, 0xa4, 0x4f, 0x0e, 0x57, 0x14, 0xab, 0xc7, 0x1b, 0xab, 0x37, 0xcf, 0xd9, 0x15, 0xed, 0x0c, 0x6f, 0xaa, 0xdd, 0x1c, 0x8d, 0x05, 0xdb, 0x4d, 0x23, 0xb3, 0x4b, 0x27, 0x2a, 0xa6, 0xd2, 0x89, 0x1b, 0x82, 0xbe, 0x89, 0xb1, 0x50, 0xbb, 0xe9, 0xd0, 0x9c, 0xb2, 0xc9, 0x8a, 0xa9, 0x6c, 0xf2, 0xc6, 0x90, 0x7f, 0x32, 0xf6, 0x99, 0x7b, 0x62, 0x8f, 0xa6, 0xfb, 0x42, 0x56, 0x70, 0xd9, 0x72, 0x1a, 0xf1, 0xcc, 0xb4, 0x3e, 0xb5, 0xd7, 0xf8, 0x11, 0x03, 0x2b, 0x9b, 0x78, 0x24, 0x44, 0xbe, 0x75, 0x4a, 0x27, 0x1f, 0x0e, 0x1e, 0x42, 0x28, 0x3f, 0xd2, 0xae, 0x1e, 0x27, 0xdb, 0x94, 0xf6, 0x76, 0xf5, 0xa8, 0x32, 0x75, 0x47, 0x2b, 0xd8, 0xda, 0xf3, 0x86, 0x70, 0xbc, 0x3b, 0xac, 0xdb, 0x5b, 0x21, 0xaf, 0xdd, 0x34, 0xd8, 0x0a, 0x53, 0x3a, 0x6b, 0x34, 0xb8, 0x79, 0x02, 0xcf, 0x8e, 0xa3, 0xf4, 0xb6, 0x42, 0x84, 0x40, 0x61, 0xfc, 0xd8, 0xf1, 0x59, 0xb6, 0xda, 0x8b, 0xd5, 0xa3, 0xa5, 0x13, 0xa3, 0x7b, 0xca, 0x26, 0x47, 0x7f, 0x48, 0x7d, 0x8a, 0xee, 0xa5, 0x1e, 0x44, 0xdf, 0x13, 0x2d, 0x18, 0xeb, 0xa6, 0x12, 0x77, 0xd5, 0xe0, 0x5c, 0xa6, 0x47, 0x77, 0x1a, 0x8f, 0x2e, 0x69, 0x57, 0x66, 0xc6, 0x77, 0xcc, 0xa6, 0x1f, 0xdf, 0xf9, 0xa3, 0xea, 0x60, 0x66, 0xed, 0x91, 0x35, 0x4c, 0xb2, 0x24, 0x99, 0xe4, 0xfd, 0xd2, 0x23, 0xec, 0x9b, 0x64, 0xad, 0x3c, 0x21, 0xe5, 0x66, 0x80, 0xa9, 0xac, 0x7b, 0x73, 0x39, 0x1b, 0x1b, 0x3a, 0x2b, 0x39, 0x84, 0x7d, 0xb7, 0xac, 0xed, 0xa6, 0x8c, 0x75, 0x27, 0xbb, 0xf5, 0x35, 0x08, 0xb2, 0x45, 0x4d, 0x93, 0xf9, 0x2c, 0x22, 0x45, 0x05, 0xf6, 0x39, 0x59, 0x9f, 0x3f, 0xd3, 0xe7, 0xc0, 0xe3, 0x8a, 0x55, 0x17, 0xb3, 0x2a, 0x5b, 0x43, 0xc6, 0x33, 0xcb, 0xad, 0x6d, 0x49, 0xe6, 0x80, 0x11, 0x31, 0x6b, 0x33, 0x62, 0xc4, 0x9f, 0xc2, 0x96, 0x24, 0xf3, 0x6d, 0xea, 0xcd, 0x25, 0xb4, 0xfb, 0xe3, 0x3e, 0xdc, 0xa3, 0x2e, 0xe7, 0xc3, 0x19, 0x8f, 0xc9, 0x41, 0x3b, 0xf3, 0xba, 0xc6, 0xce, 0x09, 0xbb, 0xea, 0xd3, 0xc9, 0xf6, 0xf9, 0x0e, 0xe6, 0x73, 0x5e, 0x54, 0x8c, 0x78, 0x52, 0xee, 0x48, 0x9f, 0xb1, 0xbc, 0x37, 0xc9, 0x46, 0x62, 0x41, 0xb6, 0xef, 0xd3, 0xc3, 0x52, 0x40, 0xdf, 0x66, 0xde, 0x6f, 0x16, 0xb6, 0xaf, 0x44, 0xd6, 0x7a, 0x71, 0xde, 0x1c, 0x8b, 0xc0, 0x25, 0xa4, 0x6d, 0x11, 0xfa, 0x4c, 0x80, 0xc2, 0xb8, 0xf9, 0xbe, 0x20, 0x59, 0x5a, 0xa1, 0x16, 0xe2, 0x49, 0x5b, 0xe8, 0xf8, 0x6a, 0x1a, 0x73, 0xd0, 0x5b, 0xdb, 0x24, 0xac, 0x81, 0xb0, 0x87, 0x34, 0xe6, 0xa0, 0xbe, 0x7e, 0x7b, 0xcc, 0xc1, 0x9b, 0x2b, 0x97, 0xc0, 0x4b, 0xc5, 0x51, 0x78, 0x49, 0xec, 0x67, 0xc1, 0x6b, 0x85, 0x0a, 0x97, 0x18, 0xb5, 0x1a, 0xbe, 0x25, 0x08, 0x6a, 0xa3, 0x66, 0x43, 0xfa, 0x36, 0x1f, 0x47, 0x8d, 0xfd, 0x36, 0xc5, 0x4d, 0xdc, 0x32, 0xab, 0x5c, 0x47, 0x77, 0x12, 0x44, 0x1d, 0x28, 0x53, 0xd3, 0xa3, 0xe9, 0xa8, 0xd3, 0x73, 0x5f, 0x05, 0x2f, 0x6a, 0x3e, 0xa4, 0xed, 0xf5, 0xdc, 0xec, 0x1f, 0x0d, 0xdf, 0x3a, 0x42, 0x38, 0xae, 0x9b, 0xbd, 0xba, 0xbb, 0xea, 0x1d, 0x1d, 0x69, 0xcc, 0x83, 0xe9, 0x1e, 0xfd, 0xf9, 0x4c, 0x96, 0x8b, 0x72, 0xbc, 0x7c, 0x23, 0xf5, 0xc2, 0x0f, 0xb3, 0xe7, 0xb2, 0x2c, 0xcd, 0xeb, 0xed, 0x9a, 0x44, 0x36, 0x19, 0x26, 0x7c, 0xc8, 0x92, 0x9f, 0x56, 0x51, 0x8a, 0x2d, 0x33, 0xc4, 0x27, 0x28, 0x13, 0x22, 0x90, 0x6f, 0x78, 0x47, 0xaa, 0x31, 0x44, 0xa5, 0x1a, 0x63, 0x6c, 0x82, 0x53, 0xab, 0x2d, 0x97, 0xeb, 0xf9, 0x48, 0xd4, 0xd3, 0xbc, 0x4e, 0xce, 0xe9, 0xb2, 0x0d, 0xad, 0x58, 0x28, 0xa5, 0x6c, 0xf2, 0xdc, 0xaa, 0x73, 0xd2, 0x88, 0x4e, 0x7f, 0x57, 0xdf, 0x06, 0x98, 0xf0, 0x0a, 0xe1, 0xcc, 0xd2, 0x31, 0x84, 0xd5, 0x58, 0x7e, 0xc3, 0x44, 0x05, 0x8c, 0x6b, 0xf4, 0x35, 0x6e, 0x98, 0x91, 0xae, 0x91, 0xb5, 0x69, 0xee, 0xa8, 0x3e, 0x27, 0xed, 0x15, 0x92, 0x1f, 0x5f, 0x4e, 0x0a, 0x6e, 0x3a, 0xd6, 0xa1, 0x38, 0x3d, 0xd2, 0xde, 0x72, 0x8f, 0xb4, 0xbf, 0xc2, 0x23, 0x1d, 0x08, 0x78, 0xa4, 0x83, 0x95, 0x1e, 0xe9, 0x7d, 0x91, 0x1f, 0x57, 0x6d, 0x80, 0x2d, 0xf7, 0x84, 0xd9, 0x1b, 0x8f, 0x95, 0x2d, 0x26, 0xc0, 0x04, 0xf2, 0x08, 0xe3, 0x85, 0x52, 0xa4, 0xc5, 0xdf, 0x69, 0x58, 0x37, 0xe7, 0x02, 0x9e, 0xc5, 0xae, 0x8c, 0xb5, 0x9f, 0xfd, 0xde, 0x3b, 0x28, 0xf7, 0xf3, 0xfb, 0xed, 0x73, 0x5f, 0x3c, 0xf0, 0xad, 0x1f, 0xf3, 0x1d, 0xe3, 0x76, 0x2a, 0xcb, 0x9e, 0x09, 0xac, 0x7c, 0x73, 0x48, 0xba, 0x73, 0xef, 0x2b, 0x9e, 0xb4, 0x9c, 0xf7, 0xfd, 0x55, 0xd2, 0xde, 0x87, 0x23, 0xd2, 0xfe, 0x87, 0xab, 0xa5, 0x03, 0x0f, 0xd7, 0x48, 0x07, 0x1f, 0x9e, 0x2d, 0xbd, 0x2f, 0xf4, 0x87, 0xc6, 0x1e, 0x6f, 0x58, 0xd7, 0x4d, 0x3a, 0x7b, 0xe7, 0xb8, 0x5c, 0x49, 0xb7, 0x01, 0x9f, 0x4f, 0x8c, 0xeb, 0x61, 0x75, 0x66, 0xcc, 0xee, 0xf6, 0x93, 0x30, 0x03, 0x52, 0x1d, 0x64, 0xf5, 0x66, 0xc0, 0x80, 0xe7, 0x5d, 0x10, 0x82, 0xfc, 0x2c, 0x41, 0x04, 0xf7, 0x59, 0x94, 0x9f, 0x73, 0xa0, 0x0e, 0x69, 0x91, 0x06, 0x5c, 0x3d, 0xc2, 0x12, 0x77, 0x52, 0x3a, 0xf1, 0xc2, 0x8f, 0xaa, 0xb1, 0x0f, 0x42, 0xb6, 0x05, 0xe9, 0x98, 0xdc, 0x84, 0x29, 0x74, 0x4e, 0x3a, 0x43, 0xfa, 0x95, 0xd2, 0x69, 0x2f, 0x9e, 0x80, 0xb3, 0x0c, 0xe1, 0x84, 0xb2, 0x74, 0xdc, 0x5b, 0x95, 0xf4, 0x5b, 0x1d, 0x49, 0xc9, 0x5f, 0x8a, 0xb4, 0xcf, 0xe1, 0x30, 0xe2, 0x75, 0x64, 0xcb, 0x24, 0x9a, 0xb5, 0xbe, 0x43, 0xbd, 0xb6, 0x86, 0xc1, 0xf1, 0xa4, 0xd4, 0x4d, 0x1e, 0x16, 0x25, 0xf9, 0x8b, 0xf6, 0x39, 0x23, 0x59, 0xdb, 0x8a, 0x03, 0x77, 0xb7, 0xc3, 0x44, 0x58, 0x88, 0xdf, 0x93, 0xa0, 0x85, 0xee, 0x6d, 0x58, 0x6f, 0xcb, 0x21, 0xec, 0x34, 0xe5, 0xec, 0xc3, 0x39, 0x4d, 0x4a, 0xa7, 0x89, 0x1f, 0x46, 0xf1, 0x73, 0xcc, 0xe2, 0x36, 0x2c, 0xe7, 0x7b, 0x5a, 0x3b, 0x1c, 0x29, 0xf3, 0x60, 0x5f, 0xdc, 0x64, 0x0b, 0xc0, 0x0c, 0x5c, 0xd7, 0xd3, 0x69, 0x2d, 0x6a, 0xab, 0xe0, 0xff, 0xd2, 0xdd, 0x8b, 0x62, 0xeb, 0xc6, 0xad, 0x98, 0xbc, 0x68, 0x32, 0x87, 0x6f, 0x65, 0x37, 0x6c, 0x11, 0xb9, 0x1a, 0xd6, 0x55, 0x7f, 0x4c, 0xfe, 0xd7, 0xc1, 0x38, 0xff, 0x9b, 0xe1, 0x4e, 0x28, 0x71, 0x05, 0x28, 0x36, 0x74, 0x1e, 0xe2, 0x64, 0x9d, 0x1f, 0x7f, 0x3b, 0xbc, 0xe4, 0x7f, 0x0f, 0x0c, 0x8d, 0xe3, 0xea, 0x21, 0x4f, 0x93, 0x77, 0x23, 0x09, 0xf4, 0x19, 0xfc, 0xe4, 0xe1, 0xa7, 0x4a, 0x60, 0xa8, 0x1b, 0xde, 0xd3, 0xfc, 0x36, 0xe5, 0xa7, 0x4c, 0xd8, 0xba, 0x7c, 0x6b, 0x15, 0xd8, 0x3a, 0x4d, 0xa6, 0x2a, 0xf5, 0x77, 0x0a, 0x71, 0x93, 0x27, 0x76, 0x80, 0xc1, 0x88, 0xbf, 0x96, 0x05, 0x00, 0xa3, 0x15, 0x79, 0x81, 0xcf, 0xf8, 0xee, 0xee, 0x32, 0x0d, 0xf5, 0xc5, 0x9d, 0xfe, 0x09, 0xbf, 0xaa, 0xed, 0xab, 0xae, 0x34, 0xfd, 0xea, 0x0b, 0x6b, 0x6b, 0x02, 0xf0, 0xab, 0xfa, 0x35, 0xc1, 0x0a, 0xc3, 0xc9, 0xb9, 0xab, 0x43, 0xfe, 0x89, 0x27, 0x6b, 0xfb, 0x66, 0xfb, 0x4c, 0x27, 0xa3, 0xbd, 0x35, 0x8a, 0xe4, 0x37, 0xf9, 0xaa, 0x7a, 0x20, 0x30, 0xa1, 0xea, 0x62, 0x3f, 0xfc, 0x74, 0xff, 0x4f, 0x7f, 0xf4, 0xd3, 0x1f, 0x55, 0x5d, 0xde, 0x04, 0x25, 0xa6, 0xe8, 0xec, 0xf0, 0xec, 0xb5, 0xab, 0xee, 0x9b, 0x9d, 0x53, 0x1a, 0x30, 0xe8, 0x42, 0xe5, 0x01, 0x7d, 0x5a, 0x80, 0xbd, 0x4e, 0x45, 0x89, 0x97, 0xdd, 0x61, 0x26, 0xee, 0x68, 0x78, 0xb6, 0x32, 0x25, 0x90, 0xf3, 0x48, 0x8d, 0xb5, 0x06, 0xa4, 0x05, 0x3e, 0x8c, 0x29, 0x7d, 0xc6, 0x3c, 0x8b, 0x25, 0xfe, 0xfd, 0x55, 0xd2, 0xd7, 0x49, 0xa3, 0xff, 0x85, 0x7f, 0xfd, 0xe9, 0x8f, 0xce, 0xcc, 0x95, 0xaa, 0xef, 0x84, 0x13, 0xb5, 0x52, 0x08, 0x2e, 0xae, 0x0e, 0x75, 0x59, 0x4f, 0xb5, 0xae, 0x0e, 0x7e, 0xfe, 0xd9, 0x56, 0xb0, 0x8b, 0xd1, 0xb8, 0x9f, 0x47, 0xa3, 0x84, 0x5a, 0x14, 0xfa, 0x75, 0x3f, 0x90, 0x5f, 0xfb, 0xd0, 0xe5, 0x7e, 0xf0, 0xba, 0x72, 0x10, 0xdb, 0xca, 0x29, 0xc7, 0x4f, 0x69, 0x66, 0x6c, 0x7e, 0x9f, 0x1e, 0x9b, 0x86, 0xd5, 0x0d, 0xcf, 0x35, 0x7c, 0xb3, 0xcc, 0xad, 0x8e, 0x59, 0xab, 0x54, 0x35, 0x0e, 0x63, 0xaf, 0xd2, 0x8d, 0x09, 0xe2, 0x00, 0x47, 0xc6, 0x8d, 0x31, 0xaf, 0xb4, 0x17, 0x3f, 0x9f, 0x5e, 0x69, 0x62, 0x1d, 0xd4, 0xbe, 0x4c, 0x96, 0xf8, 0xc7, 0xe5, 0x68, 0xce, 0xec, 0x00, 0x7d, 0xe9, 0x42, 0xf6, 0xe6, 0x25, 0x79, 0x79, 0x9e, 0x38, 0x5f, 0x2a, 0xb3, 0x2e, 0x34, 0x98, 0x14, 0x6b, 0x07, 0x29, 0x9e, 0x5f, 0x7d, 0x2e, 0x27, 0x5d, 0xc6, 0xce, 0xf9, 0xd6, 0x29, 0x79, 0x18, 0x57, 0x38, 0xee, 0x1d, 0x7f, 0x9f, 0x7e, 0x47, 0xc3, 0x37, 0xbb, 0x61, 0x36, 0xf3, 0x38, 0x3d, 0x73, 0x7d, 0x77, 0x8b, 0x7a, 0x58, 0x2f, 0x7c, 0x5a, 0x1a, 0x26, 0x19, 0x6c, 0xe2, 0xc6, 0xfa, 0xc5, 0x1f, 0xa4, 0x57, 0x18, 0x62, 0xcf, 0xa3, 0xe9, 0xf5, 0x47, 0x9e, 0xd9, 0xb5, 0xf4, 0xff, 0x5d, 0xff, 0x02, 0xb5, 0xa5, 0xe9, 0x9b, 0xa5, 0x47, 0x1a, 0xfb, 0x52, 0x56, 0x5c, 0x2f, 0xaf, 0x93, 0x5c, 0xec, 0xb8, 0xf7, 0xfe, 0x2e, 0xfd, 0xde, 0x87, 0xbf, 0x98, 0xb3, 0x93, 0xee, 0x96, 0xd2, 0x6f, 0x81, 0x6d, 0x94, 0xbe, 0x71, 0x4a, 0x3a, 0x9d, 0xe4, 0x62, 0xf5, 0x25, 0x37, 0x96, 0x66, 0x46, 0x85, 0x7d, 0xbc, 0xa8, 0x3b, 0x1d, 0x30, 0x6e, 0x7c, 0x1c, 0x5e, 0xe0, 0x11, 0x32, 0xe2, 0xe8, 0xb4, 0x83, 0x19, 0xe1, 0x86, 0x47, 0xcc, 0xd3, 0xc6, 0xba, 0xcc, 0x38, 0x91, 0x1d, 0xb6, 0x20, 0x8e, 0x92, 0x27, 0x6e, 0xc2, 0xdd, 0xbd, 0x59, 0xc9, 0x9d, 0x7d, 0x4e, 0x0a, 0xd8, 0x93, 0x78, 0x5a, 0x52, 0x8d, 0x43, 0xce, 0x3e, 0xc5, 0x3e, 0xae, 0xce, 0x02, 0x2e, 0xbf, 0x2c, 0xd3, 0x26, 0x73, 0xb7, 0xaa, 0x98, 0xc4, 0xfd, 0x4c, 0x1a, 0x62, 0xfe, 0x7e, 0xcd, 0x0d, 0x74, 0x9e, 0x36, 0x5a, 0x1b, 0xbf, 0x9d, 0x1e, 0x2d, 0xf6, 0x09, 0x43, 0x9c, 0x28, 0x5f, 0xc6, 0x1f, 0xac, 0x17, 0x6c, 0xe4, 0x61, 0x0e, 0xc7, 0xfd, 0x17, 0x0f, 0xac, 0x51, 0xa6, 0x45, 0xdb, 0x10, 0xd2, 0xb4, 0xc1, 0x54, 0xfc, 0x14, 0xe0, 0x67, 0x8a, 0xd7, 0x0d, 0x79, 0x5e, 0xa9, 0xfe, 0x05, 0x47, 0x23, 0xf1, 0xaf, 0x84, 0x6d, 0x55, 0x61, 0x75, 0x11, 0xe9, 0x69, 0xa3, 0x52, 0x28, 0x2f, 0x82, 0x3c, 0x96, 0xf2, 0x2d, 0x24, 0x1b, 0x5a, 0x24, 0xa8, 0xa3, 0xe1, 0x67, 0xe7, 0x34, 0x5b, 0xc1, 0xc7, 0xd3, 0xfc, 0x48, 0x87, 0xa0, 0xdb, 0x2b, 0x34, 0xeb, 0x7f, 0x8a, 0xde, 0xfa, 0x1f, 0xe9, 0xb8, 0xaa, 0x83, 0x64, 0xaf, 0x0f, 0x7f, 0xdb, 0xc8, 0x72, 0xa8, 0xde, 0x72, 0x5e, 0xda, 0x93, 0x6d, 0xfa, 0xae, 0x49, 0x58, 0x9f, 0xf5, 0xb7, 0xc2, 0x79, 0xc4, 0x0f, 0xce, 0x2b, 0x46, 0x92, 0x6f, 0x91, 0x27, 0xa5, 0x6d, 0xda, 0x57, 0x22, 0x8e, 0xe6, 0x9a, 0xc4, 0xe7, 0x76, 0x3c, 0xb6, 0x32, 0xb1, 0xa0, 0x02, 0xa2, 0xef, 0x05, 0x0c, 0xd1, 0x7d, 0xde, 0x09, 0x5e, 0x93, 0xbf, 0xca, 0x3b, 0xc9, 0x1f, 0x46, 0x9a, 0xd7, 0x28, 0x6c, 0xd7, 0xd5, 0x4e, 0x11, 0xfa, 0xbd, 0x89, 0xc0, 0x6c, 0xb2, 0x5a, 0x7f, 0xa3, 0x7d, 0x33, 0x80, 0x6f, 0xe1, 0xcc, 0x85, 0xc1, 0x37, 0x3d, 0x02, 0xb1, 0xbb, 0x6b, 0xe0, 0x0b, 0x77, 0x57, 0x43, 0x3d, 0x59, 0x9a, 0x23, 0x19, 0x99, 0x07, 0x49, 0x83, 0xdd, 0x2c, 0x6e, 0xde, 0xea, 0x7a, 0xb2, 0xb6, 0xea, 0xa1, 0xc2, 0x59, 0x2b, 0x77, 0x08, 0x2f, 0x78, 0xb5, 0xe7, 0x0d, 0x67, 0xf5, 0x7c, 0xbc, 0x58, 0x9b, 0x21, 0x18, 0xcf, 0x65, 0x7c, 0x23, 0xcc, 0xe5, 0x83, 0x8a, 0x15, 0xe3, 0xc2, 0x89, 0x52, 0x8e, 0x73, 0x62, 0xdc, 0x04, 0x43, 0xd8, 0x37, 0x6f, 0x7a, 0xd4, 0x10, 0x21, 0x8f, 0x17, 0xf8, 0x1b, 0x25, 0xed, 0x33, 0xfc, 0xad, 0x2b, 0x5b, 0x0c, 0xa6, 0xe9, 0x73, 0x0c, 0x0d, 0x8a, 0x39, 0x8c, 0x25, 0xf0, 0x13, 0xd4, 0x73, 0xec, 0x04, 0xf6, 0x71, 0x83, 0xc5, 0x31, 0x85, 0x6f, 0xc1, 0x2c, 0x5e, 0x89, 0x6f, 0x0b, 0x3f, 0x63, 0x87, 0x43, 0xbd, 0x23, 0xcb, 0xc9, 0x1b, 0x97, 0x3d, 0x58, 0xf5, 0xab, 0x9c, 0xd2, 0x9f, 0x5e, 0x60, 0x9a, 0xc6, 0xca, 0xa9, 0x9f, 0x1d, 0xe9, 0x75, 0x98, 0x0f, 0xf7, 0x2a, 0x0b, 0x1d, 0x51, 0x0c, 0xdb, 0xba, 0xee, 0x1c, 0x5e, 0x6e, 0x87, 0x5f, 0x7d, 0x63, 0x04, 0xbf, 0x4f, 0x7e, 0xe3, 0x50, 0xaf, 0x6c, 0x88, 0x06, 0xc3, 0xc1, 0x43, 0xbd, 0xf6, 0xe5, 0xbe, 0x82, 0x33, 0xd1, 0x74, 0x2a, 0xc5, 0x9f, 0xec, 0xcf, 0xa6, 0x92, 0x65, 0x10, 0x5c, 0xf9, 0x79, 0xb7, 0x2b, 0x8d, 0xe9, 0xe6, 0xaa, 0x5f, 0x81, 0x75, 0x7b, 0x7f, 0x7c, 0x93, 0xe3, 0x1e, 0x0d, 0xb3, 0xdb, 0xa9, 0xf9, 0x21, 0x80, 0x0a, 0x83, 0xa3, 0x7e, 0xfc, 0x9a, 0xf7, 0x85, 0xbc, 0x66, 0xf2, 0x8d, 0x4d, 0xab, 0xf8, 0x5b, 0x9e, 0xec, 0xd9, 0x13, 0xeb, 0xeb, 0x04, 0xe9, 0xb2, 0xf0, 0x5b, 0x24, 0x9d, 0x4b, 0xf3, 0x1f, 0x5c, 0x90, 0x2a, 0x1c, 0xec, 0x5b, 0x18, 0xf6, 0xb4, 0x49, 0x7e, 0xd6, 0xd1, 0xec, 0xc0, 0xb5, 0xbc, 0x18, 0x0a, 0xc9, 0x43, 0xc0, 0x97, 0x93, 0xe2, 0x06, 0x38, 0xd6, 0xfb, 0xe8, 0x0f, 0xa3, 0x2b, 0x22, 0x55, 0x5d, 0xf1, 0xa1, 0xbe, 0x85, 0xa4, 0xfd, 0x63, 0xc2, 0x5c, 0x71, 0xcc, 0x15, 0x4f, 0xa7, 0x23, 0x45, 0x6e, 0x0a, 0x57, 0x29, 0xd2, 0x12, 0x83, 0x2c, 0x91, 0xc7, 0x6a, 0xb2, 0xf0, 0x9d, 0xfa, 0x6c, 0x0d, 0xc8, 0x73, 0xec, 0x58, 0xef, 0x2d, 0xac, 0x7b, 0x8f, 0x83, 0x8c, 0x64, 0x07, 0xdc, 0x8b, 0x58, 0x2d, 0x7e, 0x18, 0x67, 0xf9, 0xd6, 0x97, 0xb2, 0x90, 0x31, 0xb6, 0x0d, 0xd6, 0x20, 0x0c, 0xf3, 0x91, 0xad, 0x09, 0xd6, 0xfb, 0xdb, 0x95, 0x3d, 0xcb, 0x09, 0x46, 0x2d, 0x04, 0x58, 0x95, 0xb5, 0x0b, 0xeb, 0x82, 0xc4, 0x33, 0x64, 0xbf, 0xe7, 0x96, 0xf5, 0xdb, 0xf0, 0xc3, 0xd2, 0xdd, 0xdf, 0x5a, 0xa2, 0x83, 0xbc, 0x6d, 0xb0, 0xa6, 0x88, 0x3c, 0x8e, 0xbf, 0x8f, 0xdf, 0x05, 0xea, 0xa1, 0x99, 0x3d, 0x60, 0x55, 0x8f, 0x50, 0x09, 0xb2, 0xd9, 0x68, 0xc7, 0x52, 0x58, 0xdf, 0x07, 0x45, 0x21, 0xf5, 0x78, 0xd5, 0xc7, 0x6a, 0xc6, 0x56, 0xf0, 0x58, 0xb9, 0xde, 0x53, 0x2b, 0xf1, 0xed, 0xc8, 0x2e, 0x09, 0xb6, 0xe5, 0x95, 0x71, 0x6d, 0x01, 0xd8, 0x70, 0xdb, 0xd6, 0x98, 0xf1, 0xc3, 0x56, 0xb0, 0xbe, 0xf5, 0xdf, 0xff, 0x60, 0x6b, 0xee, 0xc8, 0xb4, 0xc6, 0x88, 0xad, 0x31, 0xff, 0xd1, 0xd6, 0x94, 0x62, 0x6b, 0x0a, 0x6f, 0x3e, 0xb7, 0xbe, 0x75, 0x30, 0x0d, 0x05, 0x63, 0x55, 0x89, 0x4a, 0x96, 0xae, 0xa0, 0xbb, 0x69, 0x73, 0x57, 0xfc, 0xd0, 0x36, 0x6c, 0x8f, 0x01, 0x4b, 0x5a, 0xbd, 0x6e, 0x7c, 0xb2, 0x08, 0xac, 0x47, 0xe8, 0xa9, 0x27, 0xf2, 0x11, 0x1a, 0xb7, 0x31, 0xd6, 0x63, 0xc9, 0x62, 0x3d, 0xa9, 0x6e, 0x1c, 0xf7, 0x82, 0xb4, 0x57, 0xc0, 0xae, 0x8e, 0x74, 0x0d, 0xa3, 0x07, 0x78, 0x9d, 0x55, 0x93, 0x3c, 0xb7, 0xde, 0xc3, 0xeb, 0x2d, 0x5a, 0x93, 0x39, 0x47, 0x10, 0xa2, 0x3f, 0x1e, 0x7e, 0x43, 0x3d, 0xfb, 0xb9, 0x1e, 0xc8, 0x55, 0xcf, 0x87, 0x8b, 0xd5, 0x0b, 0xe1, 0x76, 0xf5, 0x22, 0x7e, 0x2e, 0x91, 0x85, 0x1f, 0xd2, 0xe7, 0xbc, 0xc5, 0x98, 0x4c, 0x56, 0x8f, 0xa4, 0xa6, 0xe0, 0x48, 0x1c, 0x0f, 0x7d, 0xac, 0x9e, 0x45, 0xaa, 0xe6, 0xd4, 0x2d, 0x47, 0x03, 0xe1, 0xe3, 0xa8, 0x13, 0xe1, 0xf7, 0x64, 0xa4, 0x47, 0x03, 0xea, 0xa6, 0x2c, 0x3f, 0x14, 0x69, 0x89, 0xac, 0x54, 0x5e, 0x4f, 0xa9, 0x1b, 0x2e, 0x3f, 0x58, 0xa5, 0xa3, 0x3d, 0x97, 0xe8, 0xfc, 0x7d, 0x5c, 0x16, 0xf6, 0x5a, 0x5d, 0x93, 0x5c, 0xf5, 0xce, 0xb4, 0x3f, 0x07, 0x30, 0x38, 0x59, 0xc3, 0xed, 0x5b, 0x5d, 0x20, 0xd7, 0xb2, 0x2c, 0xc1, 0x31, 0xec, 0x23, 0xc5, 0x6c, 0xc2, 0x18, 0x21, 0xc9, 0x70, 0x0c, 0xf7, 0xcc, 0x7b, 0xd1, 0x67, 0x23, 0xd5, 0x69, 0x9c, 0xba, 0x04, 0x3c, 0x45, 0x06, 0x69, 0xfb, 0xaa, 0xb8, 0x79, 0xd7, 0x62, 0x83, 0x09, 0x47, 0xe8, 0x83, 0xd8, 0x62, 0x83, 0x59, 0x58, 0xea, 0x3e, 0xd8, 0x3b, 0x23, 0x6c, 0x90, 0x1e, 0xaa, 0x36, 0x98, 0xc2, 0x18, 0x17, 0x7e, 0x0d, 0x62, 0x48, 0x13, 0x4f, 0x40, 0x9a, 0x18, 0xe0, 0x75, 0xf2, 0xac, 0xc9, 0x75, 0x7f, 0x5b, 0x5f, 0x77, 0xc2, 0xf6, 0x3f, 0xcf, 0x41, 0x79, 0xdc, 0x92, 0x9a, 0x70, 0x7f, 0x30, 0x67, 0x1f, 0x9e, 0xb5, 0x2b, 0x63, 0x7d, 0x71, 0xa3, 0xc3, 0x23, 0x9d, 0xc6, 0xd1, 0xa7, 0xdf, 0x33, 0x9a, 0x35, 0x82, 0x30, 0xd2, 0x5b, 0xa5, 0x9a, 0x2d, 0x02, 0xb2, 0xf0, 0x6f, 0x44, 0xd8, 0x4c, 0x72, 0x64, 0x3e, 0x47, 0xbb, 0x14, 0x61, 0x78, 0x1f, 0xd5, 0xdd, 0x36, 0x7a, 0x74, 0x76, 0x29, 0x7c, 0x7c, 0x42, 0x96, 0x0b, 0xdb, 0x05, 0xa4, 0x8f, 0x91, 0xf1, 0x12, 0xdc, 0x09, 0x91, 0xa2, 0xa8, 0x14, 0xfd, 0x6c, 0x2b, 0xb6, 0xb1, 0x01, 0xbf, 0x27, 0xc2, 0x23, 0x4c, 0x69, 0xd5, 0x68, 0x92, 0xe5, 0xb3, 0x85, 0x76, 0xa7, 0x76, 0x6a, 0x0a, 0x5a, 0x59, 0x26, 0x2b, 0x90, 0x4e, 0xaf, 0xe0, 0x05, 0x31, 0x05, 0xeb, 0x82, 0x42, 0x96, 0xaf, 0x9a, 0x46, 0x7e, 0xd1, 0x13, 0x8f, 0xe2, 0x5a, 0x52, 0xa3, 0x6d, 0x86, 0x42, 0x61, 0xaf, 0x5a, 0x59, 0xa9, 0xc1, 0x95, 0x4a, 0xf6, 0x4e, 0xd0, 0x88, 0xa7, 0x5b, 0xab, 0xec, 0x26, 0xa9, 0x56, 0xcc, 0x8c, 0xe7, 0x00, 0x71, 0x89, 0x70, 0xe5, 0x98, 0xee, 0x0d, 0xc3, 0x14, 0xc5, 0x74, 0x6f, 0x2b, 0x4c, 0xc5, 0x53, 0x37, 0x07, 0x57, 0xa9, 0x5b, 0x68, 0xb6, 0x4a, 0x51, 0xa6, 0x67, 0xa7, 0xa6, 0xbd, 0x0c, 0xb2, 0x34, 0x25, 0xad, 0xe0, 0x53, 0xbe, 0x73, 0x84, 0x47, 0x28, 0x5b, 0xeb, 0x7e, 0x6e, 0xb4, 0xde, 0x60, 0x05, 0xd9, 0x71, 0x83, 0x5f, 0xf1, 0xac, 0xd5, 0xe3, 0xe0, 0xad, 0xad, 0x1e, 0x8f, 0xf3, 0xfd, 0xd1, 0x7f, 0x93, 0x37, 0x90, 0x25, 0x82, 0x63, 0x0e, 0x15, 0xb2, 0xe6, 0x8d, 0xd6, 0xb3, 0x58, 0x58, 0x40, 0x46, 0x68, 0xef, 0x46, 0x5c, 0x06, 0x57, 0x73, 0xdc, 0xc1, 0x72, 0xf7, 0x8f, 0xd7, 0x9e, 0x85, 0x13, 0x7c, 0x23, 0xb0, 0x4b, 0x7d, 0x1d, 0x29, 0xb5, 0x36, 0x43, 0x3d, 0x59, 0xaf, 0x97, 0xda, 0x48, 0x83, 0x57, 0xb1, 0xb3, 0x3c, 0x45, 0x85, 0x2e, 0x4f, 0x7f, 0x26, 0xcf, 0x08, 0xb4, 0x81, 0x8d, 0xbc, 0x03, 0x88, 0xfd, 0xe9, 0x9c, 0xcf, 0xbc, 0xe8, 0x7a, 0x84, 0xa5, 0x75, 0xe4, 0xd9, 0x72, 0x3e, 0xd2, 0x6a, 0x6a, 0x52, 0x9c, 0x72, 0x7a, 0xbb, 0xc5, 0xb1, 0xad, 0x86, 0x7a, 0xb6, 0x5b, 0x7c, 0x6d, 0x66, 0x50, 0x1d, 0xe3, 0xbe, 0x4e, 0xc5, 0xbe, 0x7e, 0x88, 0x7d, 0x6d, 0xb8, 0xd9, 0x6e, 0xb1, 0xe6, 0xa3, 0xc0, 0xf0, 0x5f, 0xf2, 0x51, 0xd0, 0xea, 0x1a, 0xe7, 0xa3, 0x20, 0xde, 0x7c, 0xa3, 0x07, 0xa1, 0xff, 0x8a, 0x8f, 0x02, 0xec, 0xef, 0x0d, 0xde, 0x85, 0xe8, 0x76, 0xf8, 0x8f, 0x7a, 0x27, 0xa8, 0xbb, 0x9d, 0x77, 0x02, 0x86, 0x0b, 0xc2, 0x0e, 0xaa, 0xab, 0x22, 0x58, 0x1a, 0x2a, 0x6f, 0x05, 0x33, 0xe2, 0x4a, 0x16, 0xd2, 0x22, 0x89, 0x0e, 0xfb, 0x5d, 0xa4, 0xf1, 0x5d, 0x7b, 0x79, 0x04, 0x1c, 0xd6, 0xaa, 0x5f, 0xbf, 0x0c, 0xce, 0x49, 0xb8, 0xbe, 0xa7, 0x92, 0x27, 0x3a, 0x1e, 0x1b, 0x2f, 0x42, 0x51, 0xd0, 0x49, 0x7f, 0x1d, 0xd3, 0x2c, 0x9f, 0x56, 0x90, 0xaf, 0x11, 0x82, 0x1a, 0x29, 0x97, 0x5e, 0xe7, 0xe7, 0x7a, 0x93, 0x66, 0xdb, 0x8d, 0xec, 0x5c, 0x49, 0x5e, 0xda, 0xdb, 0x26, 0xec, 0xed, 0xce, 0xfa, 0x0d, 0xb8, 0x13, 0x72, 0x33, 0x71, 0x13, 0xea, 0x37, 0xdc, 0x1d, 0x04, 0x67, 0x26, 0x6c, 0xe4, 0xf4, 0x3c, 0xb6, 0x1d, 0xb1, 0x42, 0x8b, 0x93, 0x38, 0x6e, 0x6a, 0x26, 0x4f, 0x0e, 0x87, 0xa7, 0x65, 0xc2, 0x66, 0x0e, 0x4f, 0x19, 0x57, 0x66, 0x22, 0xd7, 0x3b, 0x29, 0xbc, 0x0d, 0xec, 0x99, 0x7c, 0x06, 0x1c, 0x5b, 0x81, 0xd3, 0x55, 0x8a, 0xfd, 0x47, 0x5e, 0x14, 0x1a, 0x7b, 0xc7, 0xb7, 0x1a, 0x6b, 0xb2, 0xb3, 0x0c, 0x0a, 0x64, 0xac, 0x15, 0xda, 0xf4, 0x5e, 0x93, 0x5e, 0x3c, 0xa0, 0x78, 0x6a, 0x3f, 0x82, 0x2b, 0xe3, 0xbc, 0x67, 0x7e, 0x64, 0x70, 0x64, 0xf3, 0x8c, 0x5d, 0xd2, 0x63, 0x5f, 0x69, 0xaf, 0x42, 0x42, 0x06, 0xc9, 0x9b, 0x5b, 0x1a, 0xc4, 0xef, 0x49, 0x82, 0xbf, 0x3d, 0x32, 0xc4, 0x7b, 0xed, 0xab, 0x69, 0xde, 0xb2, 0xf0, 0xff, 0x91, 0xf6, 0x9c, 0x8d, 0x63, 0xae, 0xf7, 0x89, 0xb0, 0x4f, 0xb3, 0x34, 0xee, 0x77, 0x98, 0x49, 0xda, 0x85, 0xad, 0x39, 0x23, 0x34, 0x94, 0x23, 0x4a, 0x54, 0x0e, 0x3a, 0x1a, 0x3e, 0xa5, 0x3f, 0x84, 0x3c, 0xcd, 0x1f, 0x82, 0x25, 0xb6, 0x3e, 0x11, 0x11, 0x38, 0x3b, 0x87, 0xcb, 0x11, 0xd6, 0x88, 0xf5, 0x54, 0x22, 0xb7, 0x4a, 0x65, 0xb8, 0x22, 0xa6, 0xb0, 0x5f, 0xf3, 0x29, 0xf1, 0x69, 0x19, 0x4f, 0xe5, 0xf9, 0x5d, 0x90, 0x87, 0xf0, 0x8c, 0xac, 0xb3, 0x65, 0xfa, 0xba, 0x3b, 0x2d, 0x01, 0xe6, 0x25, 0x7b, 0xff, 0xa0, 0xf7, 0xb2, 0x8b, 0xb8, 0x6f, 0x40, 0xf4, 0x6b, 0x9c, 0xff, 0x81, 0x7d, 0xa2, 0x6f, 0x29, 0xfb, 0xc8, 0x5a, 0xd1, 0xef, 0x94, 0x67, 0x64, 0x2b, 0xc2, 0x33, 0xd1, 0xdf, 0x9e, 0x8c, 0xf7, 0x21, 0x8b, 0xb6, 0x76, 0xb5, 0xb1, 0x19, 0x97, 0x66, 0x1c, 0x9f, 0xd6, 0x45, 0xd6, 0xc4, 0x0b, 0x84, 0xb4, 0x06, 0xfb, 0x2d, 0x37, 0x67, 0x3c, 0x6f, 0xe5, 0x2b, 0x8c, 0x6b, 0x6d, 0x9a, 0xc2, 0xdf, 0xf7, 0xa5, 0xa9, 0x1d, 0x6d, 0x2c, 0xe5, 0xb4, 0xc5, 0x61, 0x6b, 0x18, 0x69, 0x49, 0xe2, 0x3b, 0x96, 0x94, 0xde, 0x0f, 0x56, 0xa6, 0x8f, 0x39, 0x54, 0x76, 0x3f, 0xe4, 0xd2, 0x6f, 0x39, 0xc6, 0x2e, 0x83, 0x0a, 0xa9, 0x34, 0xf2, 0xf6, 0x7b, 0x49, 0xa9, 0xd4, 0xe8, 0x5f, 0x04, 0xb9, 0x4b, 0xa1, 0x3c, 0xa7, 0xb4, 0xf6, 0xed, 0xbd, 0x49, 0xa9, 0x6c, 0x12, 0x79, 0xff, 0x1d, 0xc4, 0xdd, 0xd4, 0x61, 0xc6, 0x31, 0xd3, 0x76, 0x5d, 0x2c, 0x94, 0xc8, 0x1d, 0xc2, 0xdd, 0xd5, 0x61, 0x7a, 0x20, 0x84, 0x94, 0x10, 0xc5, 0x84, 0x13, 0xf9, 0xa4, 0xe3, 0xd3, 0x05, 0x7e, 0x69, 0xe8, 0x1b, 0xed, 0xa6, 0x07, 0xc2, 0xff, 0x0f, 0x6d, 0xff, 0x03, 0xdd, 0xd4, 0x75, 0xe5, 0x8b, 0xe3, 0xfb, 0x5e, 0xcb, 0x42, 0x08, 0xa1, 0x08, 0xd7, 0xf5, 0x78, 0x5c, 0x97, 0xdc, 0xa8, 0xc2, 0x11, 0xb2, 0xb0, 0x14, 0x55, 0x71, 0x14, 0x47, 0x63, 0xae, 0x64, 0xd9, 0x08, 0xd9, 0x68, 0x5c, 0xdb, 0x61, 0xfc, 0x78, 0x4c, 0x7a, 0x7f, 0x94, 0x4a, 0xc6, 0xc8, 0xd8, 0xf5, 0x63, 0x58, 0xac, 0x2c, 0x7f, 0x53, 0x63, 0x08, 0x71, 0x52, 0x1a, 0x1c, 0x87, 0x30, 0x99, 0x4c, 0x26, 0xbf, 0xac, 0xac, 0xfe, 0x32, 0x19, 0x42, 0x53, 0x87, 0xd2, 0x0c, 0xf5, 0x63, 0x78, 0x86, 0x50, 0x4a, 0x68, 0x9a, 0xe7, 0x50, 0x9a, 0xa1, 0x3c, 0x9a, 0x64, 0x98, 0x4c, 0x4a, 0x08, 0x24, 0x84, 0x12, 0x4a, 0x1c, 0xf0, 0xfd, 0xed, 0xbd, 0xcf, 0x95, 0x2c, 0x03, 0x49, 0xd3, 0xf9, 0xce, 0x5b, 0x5a, 0x92, 0xee, 0x3d, 0xf7, 0xdc, 0xf3, 0xff, 0xec, 0xb3, 0xf7, 0x39, 0x7b, 0x7f, 0x36, 0x79, 0xa9, 0xc5, 0xf0, 0x3a, 0x0e, 0xb7, 0x62, 0x78, 0x01, 0x87, 0xd7, 0x21, 0xbd, 0x67, 0x99, 0xc6, 0x14, 0xbe, 0xce, 0xab, 0xfa, 0x11, 0x83, 0x2e, 0x91, 0x8e, 0x91, 0xdb, 0xa0, 0x4b, 0x2e, 0xc6, 0x0b, 0xee, 0x94, 0xcb, 0x09, 0x71, 0xfe, 0x86, 0xf4, 0x69, 0xbd, 0xc5, 0x0b, 0x66, 0xb8, 0x39, 0x75, 0x9d, 0xef, 0x14, 0x0f, 0xd2, 0x9e, 0x25, 0x13, 0xfa, 0x93, 0x9a, 0x43, 0x59, 0x90, 0xef, 0x0d, 0xda, 0x73, 0x37, 0xf9, 0xd4, 0x4c, 0x9d, 0xc1, 0x7b, 0x1b, 0xce, 0xdb, 0xbe, 0xe4, 0xb6, 0x69, 0xbe, 0xd7, 0xb6, 0x21, 0x05, 0xbb, 0x31, 0x9a, 0xbc, 0xdb, 0x97, 0x00, 0x17, 0xf9, 0xc6, 0xc9, 0xa1, 0xc9, 0x4f, 0xa7, 0x57, 0xe5, 0xd7, 0xd1, 0xab, 0xe0, 0x34, 0x5a, 0xfc, 0x8e, 0xf0, 0x6e, 0x7e, 0x7d, 0xfd, 0x3c, 0x9f, 0x57, 0x3f, 0x80, 0x01, 0xd2, 0x2c, 0xc1, 0x1a, 0x6a, 0xd7, 0xd6, 0x10, 0x79, 0xf3, 0xe9, 0xbe, 0xdb, 0xc6, 0x69, 0x97, 0x50, 0x5c, 0x11, 0x6a, 0xbe, 0x56, 0x9c, 0x3b, 0xf1, 0xb6, 0x18, 0xe1, 0xed, 0x9f, 0x87, 0x98, 0x4f, 0xfa, 0x30, 0x52, 0xe9, 0x7f, 0xaa, 0xa6, 0x9e, 0xeb, 0x6b, 0xca, 0xb2, 0x76, 0x98, 0x10, 0xa3, 0x09, 0xfb, 0x99, 0xd7, 0x17, 0xf9, 0x86, 0xf5, 0x3b, 0x41, 0x7a, 0xbb, 0xb8, 0xa2, 0xbe, 0xcb, 0xfb, 0x1e, 0xa6, 0xea, 0x46, 0xcd, 0x52, 0xad, 0xde, 0xde, 0x09, 0x83, 0xf0, 0x6e, 0xa8, 0x13, 0xcc, 0xf8, 0xe4, 0xb4, 0x78, 0x12, 0x6a, 0xd2, 0x2c, 0x21, 0x7a, 0xf2, 0x10, 0x9c, 0x26, 0x5f, 0x09, 0xf8, 0xe4, 0x8c, 0x78, 0xe2, 0x8f, 0x6b, 0x15, 0x7e, 0x95, 0x75, 0x7c, 0xbe, 0x92, 0x2e, 0x09, 0xe0, 0x9a, 0xfa, 0xe3, 0xc3, 0xdf, 0x92, 0x95, 0xc5, 0x62, 0xa5, 0x1e, 0x19, 0x24, 0xbf, 0xa2, 0xf8, 0x9e, 0x05, 0xce, 0xe0, 0x33, 0x2b, 0x86, 0x9d, 0x15, 0xef, 0x05, 0x16, 0x6b, 0x15, 0x81, 0xdc, 0x7b, 0x35, 0x9d, 0x50, 0xf4, 0x3f, 0x5f, 0xf9, 0x96, 0xec, 0x5c, 0xc2, 0xef, 0x95, 0x8c, 0x3c, 0xb8, 0x52, 0x76, 0xd2, 0x7b, 0x56, 0x38, 0x6b, 0x94, 0x1d, 0xe9, 0x9b, 0x2f, 0x77, 0xde, 0x25, 0xfc, 0x31, 0x44, 0xce, 0x18, 0xa8, 0xc9, 0xa5, 0x69, 0x8b, 0x3c, 0xf4, 0xa1, 0x4e, 0xc8, 0x95, 0x30, 0xe4, 0xc0, 0x24, 0x9b, 0xde, 0x0a, 0x9b, 0x3e, 0xbf, 0xdd, 0x04, 0xf2, 0xc4, 0xf5, 0xed, 0xe6, 0x97, 0x9d, 0x9f, 0x89, 0xba, 0x3d, 0xf9, 0x5a, 0x16, 0x75, 0x7b, 0x3a, 0x62, 0xf7, 0xe4, 0x53, 0x53, 0x1c, 0x8c, 0x33, 0x4f, 0xbf, 0x12, 0x9f, 0x96, 0x92, 0x4e, 0xf7, 0x75, 0xd8, 0xdc, 0xaf, 0x1a, 0x3a, 0x5f, 0x4e, 0xe2, 0xed, 0xf0, 0x8d, 0x62, 0x7c, 0xa3, 0x14, 0xdf, 0x28, 0xc7, 0xfc, 0x14, 0x17, 0xe6, 0x85, 0xf1, 0xdc, 0x53, 0xfe, 0x38, 0xb3, 0xda, 0x90, 0x6e, 0xe4, 0x3f, 0x71, 0x04, 0xb3, 0x36, 0xa4, 0xa7, 0x1b, 0x54, 0xd7, 0x02, 0x58, 0x9e, 0xd8, 0x49, 0xdc, 0xae, 0xc4, 0xba, 0xc6, 0x48, 0xcf, 0x0c, 0x5f, 0xbf, 0xac, 0x7f, 0x62, 0x23, 0x4b, 0x26, 0x3f, 0x10, 0x7e, 0x83, 0x03, 0xd2, 0x1e, 0xfa, 0x57, 0xd8, 0xbb, 0x2d, 0x7b, 0x59, 0x39, 0xa1, 0x24, 0x9c, 0x19, 0x28, 0xf3, 0x7f, 0x09, 0x57, 0xe9, 0x4a, 0x90, 0xe3, 0xfb, 0x49, 0x5f, 0x8d, 0xec, 0xc3, 0x61, 0xac, 0xc2, 0x4b, 0x2b, 0xa3, 0x58, 0xcd, 0xdc, 0x6a, 0xd5, 0xf7, 0x7d, 0xb4, 0xde, 0x32, 0x0f, 0x78, 0xdf, 0x93, 0x1e, 0x3a, 0x75, 0x0f, 0x22, 0x9d, 0x72, 0x93, 0x97, 0x21, 0xe1, 0xb9, 0x71, 0x72, 0x07, 0x79, 0xd2, 0x60, 0x9d, 0xe1, 0x77, 0xc9, 0xab, 0xa5, 0x5f, 0xea, 0xbb, 0xe9, 0x6c, 0xc7, 0x78, 0xe4, 0x94, 0x3a, 0xde, 0xea, 0x29, 0xec, 0x94, 0x5b, 0xee, 0x3f, 0x75, 0xff, 0x50, 0xbd, 0xa1, 0xeb, 0x2c, 0x93, 0xae, 0x73, 0xb8, 0x12, 0xcc, 0x35, 0xe6, 0xfb, 0x6e, 0xfa, 0xa0, 0xeb, 0x44, 0xc3, 0xa9, 0xfa, 0xa3, 0xf5, 0xa7, 0xb6, 0x0c, 0xc7, 0x0c, 0xed, 0x67, 0xf6, 0x93, 0x4a, 0xbd, 0xeb, 0x5b, 0xc2, 0x9a, 0x7f, 0xa4, 0x15, 0x14, 0xc4, 0x59, 0xe1, 0x67, 0xdd, 0xcc, 0x4f, 0xb0, 0x0c, 0xe7, 0x7d, 0xb3, 0x89, 0x63, 0xa5, 0x1d, 0x0b, 0x9f, 0xa5, 0xba, 0x15, 0xc7, 0x04, 0x95, 0x97, 0x72, 0x7f, 0x41, 0x68, 0x56, 0x92, 0x0e, 0xa7, 0xb0, 0xe0, 0xa9, 0xad, 0xa9, 0xe8, 0x02, 0x0b, 0x21, 0x15, 0x61, 0x5b, 0x21, 0x07, 0x8a, 0xdc, 0xa4, 0x07, 0x96, 0xe3, 0x08, 0xb8, 0x8c, 0x6f, 0xc9, 0x42, 0x8f, 0xe4, 0x7e, 0x2b, 0x69, 0x19, 0xb1, 0xc7, 0x66, 0x93, 0x1b, 0x7c, 0x56, 0xf1, 0x64, 0xc9, 0x39, 0x7d, 0x1f, 0xef, 0xda, 0x9c, 0x7a, 0x70, 0xad, 0x92, 0x14, 0xbe, 0x95, 0x79, 0xa5, 0xf7, 0x62, 0x6b, 0x3f, 0x87, 0xb3, 0x5b, 0xf8, 0xd9, 0x49, 0x7a, 0x80, 0xb9, 0x67, 0x94, 0x98, 0xae, 0x9e, 0x61, 0x2b, 0x3d, 0xd6, 0x6c, 0xef, 0x29, 0x18, 0xdb, 0xd0, 0x27, 0xef, 0xed, 0x4f, 0x59, 0x15, 0xc2, 0xd9, 0x33, 0x25, 0xa4, 0x2e, 0x33, 0x5e, 0x15, 0xa5, 0xab, 0x03, 0x5d, 0xfa, 0x84, 0x1f, 0xf3, 0x8f, 0xed, 0xc7, 0xd5, 0xc5, 0xea, 0x2b, 0xf4, 0x99, 0x78, 0x64, 0x03, 0xa7, 0xf0, 0x01, 0xfb, 0x75, 0x2c, 0x12, 0xab, 0xb9, 0x11, 0xb6, 0x83, 0x56, 0x1c, 0x8a, 0x99, 0x2d, 0x35, 0x86, 0x9d, 0xe7, 0x1d, 0xbd, 0x2e, 0xfd, 0x4a, 0x37, 0xe1, 0xd8, 0x74, 0xe9, 0x93, 0xdd, 0x00, 0x93, 0x84, 0xd0, 0x06, 0xb6, 0x5e, 0x42, 0x53, 0xb7, 0xae, 0x97, 0xf6, 0x6c, 0xc0, 0x3e, 0xde, 0xa1, 0x85, 0x13, 0x90, 0x01, 0x78, 0x86, 0xb9, 0x79, 0x99, 0xdf, 0x8d, 0x65, 0x4b, 0xe0, 0x2b, 0x08, 0xe3, 0x9b, 0xf1, 0xef, 0x9c, 0xd6, 0xf1, 0xff, 0x4a, 0xbc, 0xe7, 0xb4, 0xce, 0xb9, 0x92, 0xec, 0x47, 0x5e, 0x22, 0x5d, 0x5a, 0x27, 0xbe, 0x9b, 0xca, 0x7b, 0xd3, 0x7a, 0xdd, 0x9b, 0x05, 0xc6, 0x9b, 0x05, 0xf1, 0x55, 0xf8, 0xdf, 0x81, 0x33, 0x4c, 0x76, 0x87, 0xe1, 0x54, 0x7b, 0x3b, 0xed, 0x0f, 0x67, 0x63, 0x0b, 0x1e, 0xea, 0xc6, 0x79, 0x39, 0x63, 0xc9, 0x47, 0x18, 0x7f, 0x85, 0x50, 0xf2, 0x6c, 0xe9, 0x10, 0xc6, 0x9f, 0x08, 0x2c, 0xc0, 0x1c, 0xac, 0x7e, 0xcb, 0x38, 0xbe, 0xd1, 0xaa, 0x06, 0x54, 0xdf, 0x4c, 0xbf, 0x84, 0xd7, 0x57, 0x8c, 0xeb, 0xb8, 0xcf, 0xc2, 0xfb, 0x34, 0x85, 0xcc, 0x17, 0x9c, 0x1a, 0x5c, 0x43, 0x6d, 0x46, 0xfd, 0xe1, 0xac, 0x17, 0x9e, 0xa9, 0x69, 0x07, 0x0a, 0xeb, 0x30, 0x84, 0x7c, 0x2d, 0x79, 0x38, 0x7f, 0xdc, 0x38, 0xad, 0xe6, 0xd1, 0xe0, 0xca, 0x1b, 0x0d, 0x15, 0x34, 0x1a, 0x2a, 0xe9, 0x54, 0x0c, 0x29, 0x8e, 0x8d, 0xf4, 0x0e, 0x76, 0x11, 0x6f, 0xf9, 0x04, 0xb7, 0xb3, 0x35, 0x6f, 0x74, 0x58, 0xf3, 0x46, 0xc7, 0x2c, 0xf1, 0xe4, 0x9a, 0xd1, 0xd1, 0x38, 0x6d, 0x74, 0xb4, 0xf3, 0xe8, 0x68, 0x9c, 0x3e, 0x3a, 0x3e, 0x7d, 0x95, 0xf1, 0x48, 0xa7, 0x8f, 0x0e, 0xc2, 0xae, 0xc9, 0x8e, 0x0e, 0xcf, 0x75, 0xa3, 0x63, 0xd6, 0xf4, 0xd1, 0xf1, 0xe9, 0xb8, 0x31, 0x3a, 0x66, 0xe5, 0x85, 0x6d, 0xe1, 0xd1, 0x31, 0xcb, 0x18, 0x1d, 0x5c, 0xf3, 0x4f, 0x8f, 0x4e, 0x8d, 0x0e, 0x78, 0xc9, 0x18, 0x1d, 0x2f, 0x4c, 0xd5, 0x32, 0x6d, 0xed, 0x93, 0xf6, 0x12, 0x05, 0x78, 0x42, 0xab, 0x9e, 0xea, 0xdd, 0x4f, 0xbd, 0x53, 0xbd, 0x1b, 0xe4, 0xbe, 0x7a, 0x4e, 0x0f, 0x72, 0x5f, 0x3d, 0x97, 0x1b, 0x17, 0x13, 0xa7, 0x78, 0x5c, 0x68, 0x53, 0x6f, 0x4d, 0x5c, 0xba, 0xee, 0xad, 0x02, 0xe3, 0xad, 0xbc, 0x31, 0x51, 0x3f, 0x31, 0xf1, 0x5c, 0x72, 0xf8, 0x8b, 0x8c, 0x07, 0xd6, 0xf3, 0x2b, 0x35, 0x7a, 0xb3, 0x91, 0x7b, 0x93, 0x47, 0xfc, 0xc4, 0x81, 0x69, 0xbd, 0xf9, 0x9d, 0xec, 0xfe, 0x02, 0x52, 0x44, 0xa6, 0x84, 0x6e, 0x1f, 0xc4, 0xbc, 0x3e, 0x68, 0x0e, 0xfa, 0x20, 0x51, 0x83, 0xac, 0x44, 0xfc, 0x67, 0xeb, 0xbc, 0x6f, 0xd0, 0x4e, 0xfa, 0x99, 0xeb, 0x74, 0x37, 0x3d, 0x53, 0xb4, 0x51, 0x5d, 0x9f, 0x2e, 0xef, 0x31, 0x93, 0x8f, 0x8d, 0xe8, 0x8f, 0xc0, 0x4f, 0xba, 0x9f, 0x4a, 0x93, 0x73, 0x89, 0x2b, 0x56, 0x51, 0x47, 0xb8, 0x53, 0x57, 0xde, 0x30, 0x3c, 0x80, 0x3f, 0x93, 0xd8, 0x84, 0xad, 0xf5, 0xa4, 0x3f, 0x03, 0xa6, 0x00, 0x72, 0x3c, 0xa4, 0xc3, 0x17, 0xc8, 0x80, 0x55, 0xa4, 0xc3, 0x52, 0xa8, 0x79, 0xfc, 0x1c, 0x58, 0x5a, 0xe3, 0xb1, 0xb1, 0x4e, 0xf3, 0xd1, 0x2e, 0xb0, 0xb6, 0x46, 0xd8, 0xf2, 0xdb, 0x74, 0x0c, 0x43, 0x19, 0x97, 0xd9, 0x74, 0xf4, 0x1c, 0xae, 0x7d, 0xf1, 0x6a, 0x1c, 0x7d, 0x73, 0x49, 0x63, 0xf0, 0x81, 0xed, 0x3f, 0xff, 0xe7, 0xc3, 0xdd, 0x81, 0x70, 0x04, 0x43, 0xac, 0x45, 0xa4, 0x33, 0xb8, 0x61, 0xfb, 0xfe, 0x7f, 0x7e, 0xad, 0x5b, 0xa9, 0x3f, 0xff, 0xb4, 0x5e, 0x44, 0x9a, 0x87, 0x1b, 0xfc, 0x91, 0x17, 0x8f, 0x64, 0x1c, 0x75, 0x97, 0x86, 0xe8, 0xfe, 0x0e, 0xbe, 0x7f, 0xa5, 0xcb, 0x61, 0x94, 0xda, 0x02, 0x19, 0xbc, 0xb0, 0x6b, 0x66, 0x39, 0xf3, 0x5d, 0x1d, 0xec, 0xee, 0xb6, 0xd6, 0x28, 0xeb, 0xe7, 0x98, 0x09, 0x07, 0x51, 0xb7, 0x4f, 0xed, 0x1f, 0x88, 0x3d, 0x6a, 0x08, 0xb0, 0xb5, 0x98, 0xcd, 0xa7, 0xf2, 0x0e, 0xac, 0xe2, 0x24, 0xee, 0x07, 0x57, 0x98, 0x45, 0x1f, 0xf2, 0x0a, 0xe6, 0xa5, 0xba, 0x22, 0x67, 0x0d, 0x86, 0x0f, 0x91, 0xfc, 0x95, 0xea, 0xe8, 0x8d, 0xd7, 0x2e, 0xd2, 0x49, 0xa7, 0xb9, 0xe0, 0x22, 0x6f, 0xa6, 0x1f, 0x82, 0xe5, 0x06, 0xbe, 0x3a, 0x48, 0xb6, 0xa6, 0x33, 0xee, 0x19, 0xe0, 0x62, 0xbe, 0x86, 0x3c, 0x32, 0xd3, 0x0e, 0x8a, 0x0a, 0x7e, 0x9e, 0x03, 0x34, 0x1e, 0xc9, 0x3d, 0xd8, 0xec, 0x2e, 0x39, 0x46, 0x96, 0x3a, 0xb6, 0xbc, 0xdd, 0x94, 0x9c, 0x6f, 0x1a, 0xd7, 0x37, 0x2b, 0xbe, 0x29, 0x34, 0xa7, 0xa9, 0x16, 0xb4, 0x5a, 0xba, 0x8c, 0x1d, 0x01, 0xe4, 0xa0, 0x5d, 0xde, 0x55, 0xd0, 0xce, 0x92, 0x46, 0x54, 0x21, 0xbf, 0x16, 0xf8, 0xae, 0xb3, 0x31, 0xf7, 0x26, 0x49, 0x8a, 0x64, 0xd7, 0x5f, 0x40, 0x88, 0xf3, 0xbc, 0x3b, 0x45, 0x9e, 0xda, 0xcb, 0x70, 0x15, 0x2a, 0x12, 0x88, 0x8d, 0xb7, 0x93, 0xbd, 0xb4, 0xe5, 0x76, 0xb2, 0x97, 0xb6, 0xe6, 0x3c, 0xb8, 0x40, 0xb6, 0xcd, 0xfc, 0xb5, 0xe4, 0xa7, 0x1b, 0x73, 0x22, 0x7d, 0xe0, 0x10, 0xd2, 0x0b, 0x97, 0x12, 0xf5, 0x76, 0x40, 0x3b, 0xef, 0x02, 0x97, 0x2a, 0x5d, 0x22, 0x3f, 0x57, 0xa3, 0xb3, 0x29, 0x9b, 0x63, 0x05, 0xb0, 0xbf, 0x2f, 0x91, 0x63, 0x26, 0x97, 0x23, 0x61, 0x1d, 0x88, 0x1c, 0x6d, 0x6c, 0xa1, 0x6d, 0x61, 0x0b, 0x6d, 0x6b, 0x62, 0x63, 0x5a, 0xb3, 0x6d, 0x23, 0x6f, 0xf5, 0x29, 0xf3, 0xff, 0x7c, 0x5f, 0xbf, 0x92, 0x6a, 0x21, 0x3f, 0xf1, 0x3c, 0xe2, 0xe2, 0x48, 0x61, 0x66, 0xe3, 0x6a, 0xb6, 0xde, 0x2d, 0x3c, 0xdd, 0x84, 0xb8, 0xf7, 0x68, 0x3d, 0x54, 0x70, 0x3d, 0x74, 0xe1, 0xb5, 0x9b, 0x4b, 0x51, 0x32, 0xcd, 0xbf, 0x75, 0xce, 0x97, 0x3d, 0x53, 0xae, 0xd1, 0xc9, 0xa6, 0xe6, 0xad, 0xa4, 0x45, 0x97, 0xf3, 0xf9, 0x7e, 0x37, 0xcd, 0x98, 0x70, 0x0d, 0x23, 0xf5, 0x21, 0x05, 0xf4, 0x20, 0x05, 0xc4, 0xfa, 0xb8, 0x48, 0x23, 0x51, 0xec, 0x6c, 0x4b, 0xbd, 0xd9, 0x56, 0xc4, 0x5a, 0xd5, 0xe7, 0xe3, 0xac, 0x4a, 0xed, 0x84, 0xc9, 0x01, 0x26, 0x63, 0x0f, 0x2f, 0x81, 0x6d, 0x4f, 0x7e, 0x1b, 0x4d, 0xce, 0x7a, 0xf7, 0x2a, 0xb0, 0x08, 0xef, 0xdf, 0x52, 0x10, 0x29, 0xd0, 0x45, 0x9c, 0xc3, 0xec, 0xfb, 0xe8, 0x3e, 0xf6, 0x27, 0xc5, 0x58, 0xbe, 0x97, 0x71, 0x8d, 0x2a, 0xe5, 0xab, 0x09, 0xbc, 0xb2, 0x8b, 0x55, 0x2a, 0x36, 0x96, 0xae, 0x72, 0xae, 0x86, 0x12, 0xa1, 0x35, 0x96, 0x80, 0x2e, 0x1b, 0xde, 0x15, 0x09, 0xfd, 0x21, 0xd8, 0xac, 0x34, 0xf9, 0x17, 0x60, 0x69, 0xc7, 0x70, 0x25, 0xb8, 0x14, 0xdf, 0x4f, 0x1c, 0x94, 0xd6, 0xc3, 0x6b, 0x2b, 0x4b, 0xb3, 0xfd, 0xe7, 0xd3, 0x25, 0xa2, 0x3c, 0xe4, 0xf3, 0xde, 0xe9, 0x86, 0x52, 0x79, 0x03, 0xef, 0x6d, 0x99, 0x1e, 0x39, 0xac, 0x99, 0xfc, 0x7d, 0x50, 0x98, 0x4b, 0x99, 0x70, 0x06, 0xcd, 0x2e, 0x4b, 0xcb, 0x80, 0x56, 0x9c, 0x4b, 0xbf, 0x22, 0x01, 0x7f, 0x3d, 0x46, 0x3a, 0xba, 0x2e, 0x8b, 0x52, 0x8f, 0xbc, 0xb1, 0x69, 0x7a, 0x6e, 0xae, 0x4e, 0x98, 0x4b, 0x9c, 0x97, 0xb1, 0x22, 0x2d, 0xbf, 0xab, 0x6f, 0x70, 0x50, 0xbf, 0x72, 0x57, 0x9f, 0xd3, 0xa9, 0x4f, 0x3a, 0x9b, 0x7a, 0x80, 0xb1, 0xa4, 0x9f, 0x72, 0xd6, 0x61, 0x3d, 0xe6, 0xe3, 0x78, 0x6b, 0xe2, 0xfb, 0x1d, 0x84, 0xbc, 0x3f, 0x3f, 0x0e, 0x96, 0x3f, 0xa7, 0x53, 0xd7, 0xaf, 0x8a, 0x94, 0x44, 0xaa, 0xd5, 0x48, 0xf1, 0x68, 0x55, 0x73, 0x36, 0x2d, 0xfa, 0xbd, 0x45, 0x77, 0xcd, 0x32, 0xfc, 0x86, 0xd3, 0x5b, 0xaf, 0x31, 0x52, 0x67, 0x58, 0x3f, 0x36, 0xe5, 0xa5, 0x95, 0x74, 0x1d, 0xc9, 0x2a, 0xc7, 0xb5, 0x0a, 0x8a, 0x78, 0x64, 0x07, 0x0d, 0x1f, 0xc8, 0x5e, 0xc3, 0x26, 0xcf, 0xb4, 0x10, 0x65, 0x3d, 0xb0, 0xe0, 0xaf, 0x15, 0xac, 0x79, 0x33, 0xc6, 0x94, 0xd7, 0x5f, 0xa6, 0x1e, 0x53, 0xbe, 0xbe, 0x8d, 0xe1, 0x77, 0x87, 0xc6, 0xb2, 0x97, 0x3c, 0x8a, 0xb9, 0xdd, 0x38, 0x96, 0x71, 0x6c, 0x13, 0x06, 0x4f, 0x7a, 0xad, 0x4f, 0xec, 0xf6, 0xda, 0x2a, 0x08, 0xb1, 0x25, 0x65, 0x5d, 0x0d, 0xfd, 0x74, 0xfa, 0x85, 0x63, 0xac, 0xd8, 0x17, 0x85, 0x52, 0xe4, 0xbd, 0xca, 0xc9, 0x12, 0x76, 0xda, 0x48, 0x2b, 0xce, 0x8d, 0x34, 0x13, 0x59, 0x7c, 0x7e, 0x7a, 0xaa, 0x79, 0x6b, 0x64, 0xe2, 0xd3, 0x0f, 0xb8, 0xc5, 0xec, 0xa9, 0x22, 0xe6, 0xd6, 0xc9, 0x72, 0x76, 0x48, 0xcc, 0x73, 0xad, 0x88, 0x56, 0xc0, 0xdc, 0x3d, 0xce, 0xb5, 0x1e, 0xb9, 0xe9, 0x2d, 0x9b, 0xe1, 0xa3, 0x47, 0x58, 0xb7, 0x84, 0xc2, 0x64, 0xd9, 0x83, 0x33, 0x8d, 0x7c, 0x6e, 0xa9, 0x15, 0x6e, 0xf6, 0xb2, 0x4d, 0x58, 0x47, 0x3f, 0xc0, 0x99, 0x64, 0x71, 0x60, 0x49, 0x6d, 0x58, 0xfd, 0xb4, 0xcd, 0x46, 0xe8, 0x91, 0x20, 0x0d, 0x6b, 0x20, 0xad, 0x27, 0x34, 0x12, 0x9b, 0x0a, 0xa7, 0xd3, 0x84, 0xf1, 0xae, 0x63, 0xe8, 0x72, 0xad, 0x97, 0xc6, 0x16, 0xf6, 0xf9, 0x52, 0x59, 0xd5, 0xbf, 0x7b, 0x07, 0x51, 0xbc, 0x02, 0x5e, 0xdb, 0xaa, 0xdc, 0x54, 0xbb, 0xa0, 0xf0, 0xa7, 0x44, 0x27, 0x6c, 0xbe, 0x18, 0x04, 0x7b, 0x65, 0x5f, 0x04, 0x42, 0xd3, 0x6a, 0x96, 0xdb, 0xc5, 0xc5, 0xf7, 0x4c, 0xf8, 0x9e, 0x05, 0xe7, 0x50, 0x06, 0xcb, 0xac, 0x2a, 0xfd, 0xeb, 0xb0, 0xdc, 0xeb, 0x64, 0xa3, 0x26, 0xa3, 0x9f, 0x82, 0xf0, 0x43, 0x20, 0x59, 0x71, 0xe5, 0xe0, 0x14, 0x17, 0x66, 0x90, 0xe2, 0x05, 0xf1, 0xb7, 0x08, 0xaa, 0x79, 0x3e, 0xf5, 0x34, 0xbe, 0xaf, 0x5f, 0xa4, 0xd9, 0x76, 0x7d, 0xea, 0xbd, 0x26, 0xf2, 0x8c, 0x27, 0xca, 0xda, 0x05, 0x70, 0x10, 0x69, 0x62, 0xff, 0x54, 0x69, 0x27, 0xfa, 0xdd, 0x59, 0x0f, 0x57, 0x3b, 0x8c, 0x99, 0x1f, 0x15, 0x33, 0x9f, 0x4b, 0xec, 0x9e, 0x96, 0x66, 0x6e, 0xd6, 0x6b, 0x46, 0x7a, 0x99, 0xb5, 0xd3, 0xeb, 0x3e, 0x11, 0x30, 0x52, 0x5b, 0x7e, 0xa3, 0xb4, 0x3e, 0x97, 0x8e, 0x14, 0x10, 0x1d, 0x99, 0x30, 0x35, 0x6f, 0xd5, 0x48, 0x7f, 0xdb, 0x16, 0x1d, 0x5a, 0x67, 0xd2, 0x4a, 0x73, 0xbd, 0x3b, 0xfa, 0x09, 0xaf, 0x31, 0x9a, 0x69, 0x9d, 0x9c, 0xf5, 0x73, 0x18, 0x2e, 0xcf, 0x59, 0x49, 0x53, 0x9f, 0x86, 0xb0, 0x4f, 0x55, 0xd2, 0xb1, 0x37, 0x46, 0x5c, 0x8c, 0x46, 0x9c, 0x31, 0x4a, 0xd6, 0xcb, 0xab, 0xf5, 0xef, 0xb2, 0x3d, 0xf9, 0x1a, 0x31, 0x02, 0x3f, 0x79, 0x88, 0x47, 0xa0, 0xc6, 0xa5, 0x74, 0x63, 0x29, 0xbd, 0x38, 0xf6, 0xfc, 0x64, 0xd3, 0xb9, 0x98, 0xda, 0x31, 0x93, 0x57, 0x67, 0xf7, 0xf4, 0xf1, 0xf7, 0xc9, 0x0a, 0x63, 0x9d, 0x61, 0x9b, 0x6e, 0x7c, 0xd3, 0x4d, 0x7d, 0x32, 0xed, 0x8d, 0x9c, 0x87, 0x70, 0x94, 0xb4, 0x51, 0x36, 0x2c, 0x37, 0xca, 0x99, 0xd5, 0xd3, 0xf6, 0xfb, 0xc0, 0x8e, 0xf3, 0xdf, 0x07, 0x45, 0x28, 0x7f, 0xb0, 0x57, 0x21, 0xdd, 0x21, 0xd6, 0xbd, 0xac, 0x9c, 0x87, 0xb2, 0x99, 0xe1, 0x6f, 0x48, 0xec, 0xe1, 0x5e, 0x27, 0x01, 0xee, 0x10, 0xa1, 0x3e, 0x39, 0x5f, 0xfe, 0x43, 0x69, 0xae, 0x14, 0x9f, 0x97, 0x93, 0xad, 0xa8, 0xf0, 0x8c, 0x29, 0xfc, 0x9c, 0xb1, 0xe5, 0x01, 0xdb, 0xb1, 0xd5, 0xfa, 0xa0, 0x25, 0xe4, 0x83, 0xa5, 0x0b, 0xbb, 0x61, 0x19, 0x84, 0x17, 0x92, 0x9d, 0x51, 0x2d, 0xdb, 0xb8, 0xfa, 0x60, 0x45, 0x6b, 0x7d, 0xa0, 0x1b, 0xee, 0x69, 0x5d, 0xbc, 0x70, 0x31, 0xae, 0xdf, 0x64, 0x83, 0x9c, 0x64, 0x0b, 0x57, 0x61, 0x59, 0x86, 0xdc, 0x9f, 0x2f, 0x0e, 0xd1, 0xe4, 0xa8, 0xbe, 0x25, 0x5c, 0x78, 0xb2, 0x1b, 0x9a, 0xc3, 0x31, 0x5f, 0x41, 0xa0, 0x01, 0xb9, 0x28, 0x2c, 0x43, 0xe3, 0x84, 0xee, 0x4e, 0x3e, 0x16, 0xea, 0x06, 0xcd, 0xd8, 0xbf, 0x24, 0x9f, 0x74, 0xc8, 0x85, 0xe9, 0xfe, 0xe4, 0x30, 0xa6, 0x13, 0x0d, 0x40, 0x7c, 0xff, 0xa2, 0x4b, 0xa5, 0x24, 0xd5, 0xd9, 0x98, 0xbf, 0x22, 0xae, 0xab, 0xbc, 0x6a, 0xe3, 0xc2, 0x19, 0xa4, 0xd1, 0x50, 0x85, 0x1c, 0x7c, 0xaa, 0xdf, 0xb9, 0x28, 0xf9, 0x48, 0xdd, 0xc5, 0x66, 0x20, 0x6b, 0x2b, 0x8c, 0x37, 0x53, 0xc4, 0xf3, 0xd8, 0x5b, 0xee, 0xc7, 0x3b, 0x1f, 0xb4, 0x33, 0xff, 0x4d, 0xef, 0x11, 0x4d, 0xa9, 0x4a, 0x74, 0x43, 0x2d, 0xce, 0x56, 0x59, 0x71, 0x9b, 0x77, 0xb3, 0x76, 0x54, 0x7b, 0x6b, 0x43, 0xb8, 0x01, 0x63, 0xda, 0xfd, 0xa6, 0x56, 0x75, 0xbc, 0x1b, 0x6a, 0x08, 0xe7, 0x1a, 0xdf, 0x78, 0xac, 0x65, 0x0b, 0xe5, 0x1a, 0x5f, 0xad, 0xeb, 0x53, 0xf9, 0xd2, 0x69, 0x09, 0xb6, 0x1c, 0xe6, 0x48, 0x6f, 0xb4, 0xc4, 0xc8, 0x5a, 0x9c, 0xe2, 0xb2, 0x14, 0x58, 0x07, 0xcd, 0x38, 0x5e, 0x9b, 0x90, 0x3b, 0x8b, 0x23, 0x3f, 0x37, 0xd4, 0x2b, 0xb3, 0x97, 0xbf, 0xc7, 0x7d, 0x05, 0x64, 0xab, 0x2d, 0xf0, 0xb3, 0xb3, 0x79, 0x90, 0x7c, 0x40, 0xef, 0x61, 0x89, 0xe2, 0xad, 0x83, 0x98, 0x96, 0x45, 0xe4, 0x83, 0x2d, 0x95, 0xcc, 0xe6, 0x85, 0xcf, 0x02, 0x18, 0xbe, 0x86, 0xf9, 0xd7, 0x61, 0xae, 0x4b, 0x5c, 0xd8, 0xd9, 0xfa, 0x0a, 0x5a, 0x1b, 0xa8, 0x05, 0xa7, 0xf2, 0x6f, 0x21, 0xee, 0xda, 0xcd, 0xed, 0x97, 0xad, 0xad, 0x23, 0x5b, 0x9e, 0xbb, 0xbf, 0x87, 0x5c, 0x4d, 0x1c, 0x47, 0x5b, 0xcc, 0xe0, 0xb6, 0x8a, 0x35, 0xb8, 0x3a, 0x9e, 0xbd, 0xe6, 0x9e, 0x3e, 0xce, 0x1c, 0xaa, 0x0f, 0x96, 0x93, 0xb5, 0x1e, 0xf6, 0x46, 0xaa, 0xba, 0x1b, 0x3a, 0x31, 0xff, 0x76, 0x2f, 0xce, 0x07, 0x67, 0x83, 0x6f, 0x15, 0x2c, 0x87, 0x50, 0xb8, 0x03, 0x94, 0x75, 0x51, 0xb6, 0xa7, 0x2f, 0x62, 0xad, 0xb3, 0x93, 0x59, 0x7b, 0x7a, 0x94, 0x55, 0x08, 0x75, 0xc0, 0x26, 0x50, 0xab, 0x0a, 0x4a, 0x6e, 0xee, 0x84, 0x3f, 0x87, 0x85, 0xf8, 0x5b, 0x06, 0x2a, 0xfe, 0x96, 0x43, 0x04, 0x29, 0x81, 0x43, 0xec, 0x6e, 0x54, 0x10, 0x85, 0x64, 0x5f, 0x65, 0x29, 0x8b, 0x52, 0x17, 0xc4, 0x71, 0xaf, 0xd9, 0x9c, 0x75, 0xc1, 0xf9, 0x60, 0xd6, 0x4c, 0xc8, 0x13, 0xc7, 0x95, 0xba, 0x5a, 0x0c, 0xc3, 0xf8, 0xb6, 0xd6, 0xc1, 0x9e, 0xc2, 0x91, 0xc1, 0x6f, 0x3b, 0x9c, 0xf1, 0x5f, 0x5d, 0xc1, 0xdc, 0x3e, 0x58, 0xf8, 0x9d, 0x41, 0x80, 0xb0, 0x66, 0x8a, 0xe2, 0x3c, 0xc5, 0x51, 0x66, 0xf7, 0xc6, 0x7e, 0x4b, 0x33, 0x21, 0xbc, 0x0b, 0x5b, 0x28, 0x6d, 0xf6, 0xcb, 0xc1, 0x19, 0xb5, 0x50, 0xb3, 0x00, 0xdf, 0x8d, 0x9d, 0x68, 0x46, 0x99, 0x5f, 0x3e, 0x8e, 0x1c, 0xab, 0xbf, 0x8a, 0x34, 0x65, 0x40, 0x4a, 0x2b, 0x6b, 0x2c, 0xe4, 0xf9, 0x10, 0xe9, 0xe0, 0xc3, 0xe4, 0x4f, 0x22, 0x1d, 0xc2, 0xdf, 0x02, 0xa4, 0xc4, 0x84, 0xf1, 0x76, 0x20, 0xfa, 0x8f, 0x1a, 0x21, 0x5f, 0x4b, 0x81, 0x46, 0x94, 0xda, 0x9a, 0x7c, 0x96, 0x40, 0x0c, 0xff, 0xeb, 0x7d, 0x16, 0x1a, 0x65, 0x0b, 0x65, 0x1c, 0x69, 0x56, 0x9f, 0x19, 0x57, 0x9e, 0x0f, 0xf0, 0xed, 0x26, 0xa1, 0xa5, 0x24, 0xbc, 0x8f, 0x28, 0xd1, 0xec, 0x5b, 0x81, 0x26, 0xfc, 0xe2, 0x5b, 0x81, 0x7a, 0xec, 0xd7, 0x19, 0xc2, 0xbf, 0xa2, 0x8b, 0x46, 0xe7, 0x1e, 0xec, 0xd1, 0x76, 0x67, 0x94, 0x65, 0x47, 0x17, 0xc5, 0xf6, 0xcf, 0x1a, 0x5a, 0x83, 0x5c, 0x39, 0xc9, 0x87, 0x36, 0xbc, 0x32, 0xf3, 0x55, 0x15, 0x58, 0x7a, 0x6f, 0x3a, 0xd5, 0x31, 0x8e, 0x4f, 0x4e, 0xa9, 0xe3, 0x31, 0x23, 0xcc, 0xcc, 0x21, 0x66, 0x0c, 0xa9, 0xa7, 0x10, 0x1a, 0x2b, 0xd8, 0xdb, 0x33, 0x78, 0xed, 0x5d, 0xef, 0xa3, 0x9e, 0xc1, 0x74, 0xb1, 0xfc, 0x7b, 0x02, 0x18, 0x2b, 0xf2, 0x09, 0xe8, 0xdf, 0x1a, 0xe2, 0x13, 0xdf, 0xef, 0x3c, 0x0e, 0xec, 0x25, 0x12, 0xe5, 0xca, 0x00, 0xe0, 0x33, 0x4b, 0x36, 0x94, 0xad, 0x88, 0x22, 0x10, 0xa4, 0x27, 0xa2, 0x1e, 0xce, 0x45, 0xa2, 0x26, 0x5c, 0xb2, 0x46, 0x1c, 0x9f, 0x58, 0x7b, 0x46, 0x40, 0xa8, 0xe7, 0x9c, 0xb8, 0x1e, 0x55, 0xa2, 0x1e, 0x2a, 0xce, 0xa4, 0xc5, 0xd0, 0x46, 0xe3, 0x2f, 0x5b, 0x17, 0xa4, 0x1e, 0x21, 0x7f, 0xe3, 0xd0, 0xd8, 0xd0, 0x18, 0xc9, 0xba, 0x48, 0x47, 0x82, 0xfe, 0xa6, 0xa1, 0xfd, 0x43, 0xfb, 0xe9, 0x6e, 0x3c, 0x46, 0xe3, 0xfd, 0x68, 0x3d, 0x4b, 0xc0, 0x44, 0x6b, 0xe2, 0xd8, 0x32, 0x56, 0x27, 0x95, 0x7c, 0x3e, 0xd2, 0x58, 0x23, 0x95, 0xc4, 0xd2, 0x54, 0xaf, 0xc1, 0xa1, 0xd8, 0x71, 0x65, 0xee, 0xc4, 0xd9, 0x19, 0x4e, 0x3b, 0x68, 0x96, 0x11, 0xe5, 0xe0, 0x70, 0xab, 0x66, 0xc9, 0xde, 0xb3, 0xbd, 0x3a, 0x6b, 0x73, 0xad, 0x85, 0xa0, 0x29, 0x80, 0xad, 0x16, 0xdf, 0x8f, 0x71, 0x0a, 0xab, 0xb1, 0xad, 0xe2, 0x2f, 0x57, 0x15, 0x34, 0x3c, 0xe0, 0x5d, 0xf4, 0xdb, 0xb1, 0x2a, 0xa9, 0xe1, 0x01, 0x65, 0xd1, 0xeb, 0x07, 0x9c, 0x89, 0xf1, 0x8d, 0x47, 0x07, 0x96, 0x5c, 0x1a, 0x03, 0x97, 0x3d, 0x72, 0x7e, 0x04, 0x2a, 0x48, 0x2e, 0x08, 0x11, 0x37, 0xa3, 0x2c, 0x40, 0xf9, 0x12, 0x67, 0x67, 0xda, 0xb6, 0x22, 0xf4, 0xcd, 0x7e, 0xb2, 0x8b, 0xdb, 0xd5, 0xff, 0xed, 0x2a, 0x9f, 0x99, 0x67, 0x67, 0x23, 0xcf, 0xd3, 0x42, 0xbc, 0x6a, 0xe2, 0x7e, 0xc0, 0xd6, 0xe0, 0x5e, 0x5d, 0x90, 0x3d, 0x5d, 0x14, 0x72, 0x3c, 0x95, 0xc9, 0xe1, 0x83, 0xfa, 0x78, 0x3f, 0xc5, 0xc7, 0xab, 0x38, 0x5b, 0x7c, 0xce, 0xc4, 0xab, 0x46, 0x11, 0x46, 0xfb, 0x3c, 0x13, 0x8f, 0xb3, 0x5e, 0x9e, 0x61, 0x91, 0xcd, 0x33, 0xce, 0x2d, 0x7c, 0xd2, 0x2a, 0xd5, 0xc4, 0x41, 0x55, 0x74, 0xf0, 0xe9, 0x5a, 0x3b, 0x5b, 0x14, 0xd0, 0x7e, 0x9a, 0xf2, 0xeb, 0xb1, 0x46, 0xc2, 0xd5, 0xf7, 0xa1, 0xf4, 0x0a, 0xb0, 0x57, 0x71, 0xd8, 0xfa, 0xfb, 0x65, 0xf8, 0xb3, 0x74, 0x05, 0xff, 0x7f, 0x25, 0xed, 0xe5, 0xff, 0x2f, 0x23, 0x5d, 0x79, 0x3a, 0x8b, 0x93, 0x49, 0xfe, 0x68, 0x63, 0x9d, 0x20, 0x63, 0xfc, 0x2d, 0xd9, 0xb0, 0x60, 0x7f, 0xac, 0x45, 0xeb, 0x43, 0x8e, 0xd3, 0x74, 0x7b, 0x04, 0x67, 0x40, 0x04, 0x67, 0x80, 0x6b, 0x8d, 0x39, 0x11, 0x49, 0x3b, 0xb4, 0x18, 0xde, 0xc9, 0x69, 0x17, 0xfe, 0x16, 0xa4, 0x42, 0x9a, 0x87, 0xb4, 0x6d, 0x50, 0xb6, 0xa0, 0x5f, 0xb3, 0xe6, 0x16, 0xff, 0x22, 0x4c, 0x2b, 0xbb, 0x9d, 0xd0, 0xc6, 0xcd, 0xfc, 0x8b, 0xb3, 0xf4, 0x76, 0xf2, 0xfb, 0x61, 0xe6, 0x5f, 0x4b, 0xe2, 0x79, 0xf3, 0xee, 0x6e, 0xda, 0x23, 0x35, 0x8f, 0xab, 0x98, 0xbf, 0xb9, 0x47, 0x1e, 0xc1, 0x90, 0x94, 0x95, 0xed, 0x0b, 0x28, 0xc4, 0xa2, 0x18, 0x7b, 0xcc, 0x02, 0x97, 0x50, 0x0f, 0x35, 0xbd, 0x95, 0x31, 0x91, 0x37, 0x5c, 0x92, 0xc5, 0xe8, 0xac, 0x94, 0x56, 0x1f, 0xec, 0x5d, 0xb2, 0x95, 0x31, 0x21, 0x6f, 0x6b, 0x11, 0x7e, 0x9e, 0xd3, 0x35, 0x01, 0x94, 0x80, 0x86, 0xcf, 0x20, 0xaf, 0x3b, 0xb3, 0x53, 0x6e, 0xe9, 0x3f, 0xd5, 0x5f, 0xdd, 0xfa, 0xc6, 0x58, 0xf0, 0x7b, 0xc4, 0xfd, 0x3a, 0x09, 0x1f, 0xac, 0x13, 0xcc, 0x43, 0xef, 0x81, 0x59, 0xb1, 0x88, 0xa7, 0x41, 0xac, 0xf7, 0xb1, 0xb1, 0xaf, 0x27, 0xb0, 0xf6, 0x6d, 0xc2, 0x73, 0x32, 0xed, 0x89, 0xfe, 0x6a, 0xac, 0xba, 0x75, 0x3b, 0xc6, 0xe2, 0xf7, 0x08, 0xed, 0xdb, 0x54, 0xbd, 0x1a, 0x64, 0x0c, 0xb1, 0xdc, 0xde, 0x08, 0x32, 0x85, 0x91, 0xd7, 0xa2, 0x71, 0x95, 0x9e, 0x10, 0xb6, 0x01, 0x96, 0xd7, 0x64, 0x84, 0x62, 0xe9, 0x89, 0x57, 0x1f, 0x47, 0xc9, 0x87, 0xeb, 0x25, 0x91, 0x5c, 0xc7, 0x27, 0x7d, 0xc4, 0x23, 0xf0, 0x2e, 0x2b, 0xf2, 0x7e, 0x8a, 0xc0, 0x4f, 0x61, 0xbf, 0xf4, 0xab, 0x0d, 0x49, 0x24, 0x7a, 0xad, 0x7c, 0xe5, 0xf3, 0x92, 0x7e, 0x02, 0xf1, 0x1f, 0x93, 0xb4, 0x4b, 0x68, 0x1b, 0xdf, 0x88, 0xeb, 0x39, 0x9f, 0x94, 0x43, 0xa8, 0xc2, 0x90, 0x0f, 0x31, 0xad, 0x52, 0x4e, 0xab, 0x99, 0x69, 0x67, 0x13, 0xa5, 0x46, 0x1a, 0x20, 0x46, 0x5a, 0x92, 0x21, 0x1d, 0x06, 0x59, 0x16, 0x51, 0x22, 0x17, 0x2c, 0x10, 0x6d, 0x8e, 0x76, 0x80, 0x8c, 0x5f, 0x13, 0xdb, 0x93, 0x99, 0xf9, 0xd7, 0xc2, 0x79, 0x59, 0x29, 0xaf, 0xab, 0x3f, 0xc8, 0xf7, 0xf3, 0x59, 0x4e, 0xf8, 0x47, 0xd8, 0xd2, 0x01, 0xc2, 0xdc, 0x98, 0x19, 0xa0, 0xfd, 0x75, 0xda, 0xbd, 0xc0, 0x15, 0x9f, 0xbe, 0xc4, 0x33, 0x89, 0x35, 0x80, 0xa4, 0x66, 0x7c, 0x6a, 0xe6, 0x38, 0xb4, 0x93, 0x43, 0x31, 0x2c, 0x22, 0xce, 0x27, 0x6f, 0x67, 0x7d, 0x85, 0xa2, 0x64, 0xc6, 0xc8, 0xcb, 0x24, 0x95, 0x55, 0xe0, 0x7c, 0x20, 0xfe, 0xce, 0x4d, 0x92, 0x99, 0x17, 0x96, 0xb3, 0x8d, 0x2b, 0xf5, 0xd1, 0x5c, 0x0f, 0xc9, 0x5b, 0x75, 0x95, 0x28, 0x6f, 0xe9, 0x27, 0xd3, 0x58, 0x54, 0xde, 0xef, 0xb9, 0x5e, 0xda, 0xba, 0xd2, 0x0d, 0x72, 0x05, 0x5f, 0x4d, 0xe2, 0x55, 0x39, 0xce, 0x68, 0x92, 0xb6, 0x0e, 0xa4, 0x83, 0x79, 0xd2, 0x96, 0x9c, 0x2f, 0x6d, 0x49, 0x9a, 0xd2, 0xc5, 0xbe, 0xa7, 0x2e, 0xb3, 0x04, 0x34, 0x81, 0x1c, 0x50, 0x13, 0x4b, 0x5c, 0x20, 0x35, 0xd4, 0x56, 0x22, 0x2d, 0xf8, 0x39, 0x21, 0x74, 0x2f, 0x39, 0x27, 0x2c, 0x16, 0x90, 0x5e, 0xd8, 0xf3, 0xd0, 0xf6, 0x0a, 0xf4, 0xb7, 0x2b, 0x17, 0x31, 0x3a, 0xb8, 0x4c, 0x9e, 0xef, 0x2a, 0x13, 0xfa, 0x59, 0xd7, 0x6a, 0x3e, 0x35, 0x15, 0xab, 0xd6, 0xda, 0x84, 0x9c, 0xe9, 0x31, 0x24, 0x18, 0xab, 0x92, 0x70, 0xb2, 0x77, 0xba, 0xab, 0xeb, 0x31, 0x9f, 0x2b, 0x7e, 0x69, 0xed, 0x4d, 0xef, 0xf0, 0x1e, 0x31, 0xed, 0x09, 0x11, 0xde, 0x39, 0xf9, 0xec, 0x09, 0xc8, 0x7d, 0x37, 0x9d, 0x5d, 0x75, 0x34, 0x7a, 0x2a, 0x32, 0xb4, 0x5f, 0xb1, 0x04, 0x17, 0xe8, 0x93, 0x01, 0x59, 0xdc, 0x93, 0x0c, 0x15, 0x39, 0xef, 0x80, 0x5a, 0x9c, 0x1d, 0xc1, 0x19, 0x67, 0x3b, 0x8f, 0x2d, 0x3a, 0x15, 0x1d, 0x3a, 0xe0, 0xc4, 0xd5, 0xce, 0x4b, 0x32, 0x1c, 0xd6, 0xc1, 0x99, 0x20, 0x9d, 0x6a, 0xd8, 0x8c, 0x25, 0x28, 0x32, 0x7c, 0x8d, 0x6f, 0x32, 0xf2, 0xb6, 0x29, 0x89, 0x3a, 0xac, 0xc1, 0x7f, 0x7d, 0xee, 0x89, 0x4a, 0x98, 0xfd, 0xd7, 0x06, 0x22, 0x61, 0x7e, 0x49, 0x5c, 0x6b, 0x60, 0x2e, 0xe7, 0xb6, 0xdd, 0x59, 0xcf, 0xf4, 0xd6, 0xe4, 0xc4, 0x70, 0xf2, 0xe9, 0x42, 0x92, 0xdf, 0x95, 0x01, 0x1f, 0x71, 0xe7, 0xb3, 0x90, 0xfa, 0xd1, 0xa9, 0xe2, 0xa9, 0xef, 0x0e, 0x18, 0x1e, 0x32, 0x49, 0xe2, 0x4c, 0xb1, 0xc4, 0xf9, 0x36, 0x4b, 0x9c, 0xa7, 0xe8, 0xad, 0xac, 0xcc, 0xa9, 0xd4, 0x33, 0x3d, 0x23, 0x7b, 0x95, 0x93, 0x39, 0xa9, 0xf3, 0x6d, 0xba, 0xfb, 0x1a, 0x4a, 0x9e, 0x5f, 0xca, 0x4a, 0x9e, 0x13, 0x2c, 0x79, 0x62, 0x6f, 0xd2, 0x3e, 0x1c, 0x96, 0x7b, 0x92, 0x62, 0x08, 0x14, 0xfb, 0xeb, 0x64, 0xcf, 0x2b, 0xfa, 0x6e, 0x63, 0x77, 0x74, 0x0b, 0x6b, 0xc5, 0xd1, 0xce, 0x68, 0x97, 0x31, 0x02, 0x89, 0x67, 0x27, 0x8e, 0x7d, 0xb9, 0x1b, 0xdb, 0x13, 0xf9, 0x8b, 0x76, 0xde, 0xd9, 0x28, 0x54, 0x3a, 0xc1, 0xc4, 0xba, 0x34, 0x62, 0x6f, 0x83, 0xc2, 0x66, 0xe4, 0x87, 0xe1, 0xea, 0x5f, 0x66, 0xec, 0x08, 0x14, 0x31, 0xb2, 0xc0, 0x6c, 0xbc, 0xb2, 0x60, 0x0c, 0x81, 0x94, 0x62, 0xc6, 0x79, 0x38, 0x57, 0x93, 0x7b, 0xc5, 0x3e, 0xc9, 0x2d, 0xb9, 0x37, 0x4f, 0xba, 0xd4, 0x28, 0xf6, 0x04, 0x7e, 0x27, 0xc4, 0x0e, 0xc1, 0xb4, 0xb3, 0x0b, 0x9b, 0x38, 0xbb, 0x40, 0xfa, 0xbc, 0x4f, 0x6b, 0x36, 0xfa, 0x76, 0x77, 0x45, 0x25, 0x94, 0xdd, 0xbb, 0xe5, 0xc4, 0xf7, 0x9d, 0xf5, 0x4c, 0x13, 0x6b, 0x9c, 0x74, 0xc2, 0x60, 0x9c, 0x7f, 0xd0, 0xd5, 0x5d, 0xa4, 0xf9, 0x34, 0x99, 0x3d, 0xc7, 0xa8, 0xda, 0x44, 0xa7, 0x18, 0x38, 0x6b, 0xb6, 0x88, 0x73, 0x8c, 0xbb, 0x54, 0xfd, 0x0a, 0xeb, 0xa1, 0x57, 0x21, 0x75, 0x28, 0xbb, 0x8b, 0xf0, 0x5f, 0xaf, 0x30, 0xfe, 0xed, 0xa4, 0x56, 0x1e, 0xe8, 0xd2, 0x2f, 0x62, 0xcb, 0x5d, 0xd2, 0x68, 0x9f, 0xcf, 0xe4, 0xcf, 0x80, 0x99, 0x30, 0x0f, 0x09, 0xeb, 0x50, 0x0b, 0x13, 0xf6, 0xab, 0x3c, 0x43, 0xdf, 0x82, 0x6d, 0x7f, 0xb9, 0x32, 0xae, 0x0f, 0xe1, 0xff, 0x79, 0xfc, 0xdf, 0x86, 0x63, 0xff, 0xf1, 0xe8, 0x0f, 0xf5, 0x27, 0x95, 0x4c, 0xce, 0x5e, 0xe3, 0x1c, 0xb6, 0x6a, 0x4e, 0x2a, 0x4f, 0xed, 0xd0, 0x76, 0xb1, 0xb4, 0x9f, 0xf9, 0xc2, 0xd2, 0xbe, 0xe5, 0x3f, 0x23, 0xed, 0xf3, 0x2a, 0x48, 0xb2, 0x7e, 0xb1, 0xcb, 0xa0, 0xac, 0x4c, 0x09, 0x83, 0xbb, 0xc5, 0x39, 0xbc, 0x41, 0x57, 0x9d, 0xd1, 0xbc, 0x14, 0xca, 0xd8, 0xaf, 0xf7, 0x2c, 0xda, 0x1d, 0x44, 0x4a, 0xc7, 0x88, 0xfe, 0x24, 0xd9, 0x88, 0xd5, 0xd5, 0xc6, 0xeb, 0x8b, 0xd8, 0x43, 0x08, 0xd3, 0x9e, 0x18, 0x51, 0xd9, 0xb0, 0x9b, 0xa4, 0xf4, 0x05, 0xe0, 0xe2, 0xb4, 0x3b, 0x6f, 0xb4, 0x1b, 0xe6, 0x82, 0x74, 0xdb, 0xb4, 0xfd, 0xad, 0x06, 0x8f, 0x17, 0x2c, 0x69, 0x55, 0xa9, 0xe7, 0xd3, 0xfd, 0xa3, 0x6e, 0x30, 0xe4, 0x71, 0x17, 0x72, 0xf6, 0x6e, 0x94, 0xc7, 0xbd, 0x6c, 0x97, 0x92, 0x2f, 0x89, 0xba, 0x72, 0x58, 0x73, 0xac, 0xbd, 0x75, 0xf5, 0x55, 0xd2, 0x3e, 0x56, 0xb2, 0x56, 0xdf, 0xac, 0xff, 0x4a, 0xb5, 0xf5, 0x57, 0xd3, 0x89, 0x19, 0x9d, 0xec, 0xd2, 0xde, 0x26, 0x8d, 0x54, 0x5c, 0xeb, 0xcb, 0x2b, 0x2b, 0xc1, 0xc4, 0xf6, 0x16, 0xbb, 0x9d, 0x2a, 0xef, 0x15, 0xcd, 0xc1, 0x35, 0xbe, 0x00, 0x8a, 0x91, 0x93, 0x5e, 0xb6, 0x02, 0xe0, 0x08, 0xdf, 0x59, 0x91, 0x92, 0x8e, 0xac, 0x58, 0xc9, 0xd7, 0x85, 0xe4, 0xff, 0x71, 0x45, 0x80, 0xaf, 0x65, 0xbc, 0x7e, 0x76, 0x85, 0x9d, 0xaf, 0xa5, 0x14, 0x98, 0x7a, 0x08, 0x7d, 0x99, 0xef, 0x0a, 0xf0, 0x49, 0x07, 0x5f, 0x99, 0x30, 0xbc, 0x1d, 0xc3, 0xb7, 0xf0, 0xdd, 0x0c, 0x0c, 0x4f, 0x7d, 0x3b, 0x7b, 0x67, 0x21, 0x6b, 0x52, 0xbe, 0x9a, 0x89, 0xb1, 0x02, 0x1a, 0xc8, 0xa5, 0x7c, 0x77, 0x13, 0xe6, 0xb7, 0x76, 0x45, 0x05, 0x5f, 0x93, 0xef, 0x88, 0xf6, 0x6f, 0x23, 0x25, 0xe7, 0x3b, 0x9c, 0x25, 0x05, 0x7b, 0xf9, 0xca, 0x8e, 0x6f, 0x10, 0xca, 0xf5, 0x13, 0x7c, 0x37, 0x07, 0xc3, 0xdf, 0xfc, 0x36, 0x14, 0xbc, 0xca, 0x77, 0x45, 0xf8, 0x8e, 0x97, 0xaf, 0xbe, 0x94, 0x82, 0x02, 0xf2, 0x63, 0xba, 0x8c, 0xef, 0xe6, 0x62, 0xac, 0x6d, 0x2b, 0xda, 0xf9, 0xfa, 0xcf, 0x31, 0xce, 0x84, 0x91, 0x47, 0x09, 0x5e, 0x3f, 0x8d, 0x79, 0x0c, 0xf0, 0xdd, 0x9f, 0xe1, 0xdd, 0x4e, 0xbe, 0x2a, 0xc5, 0xb7, 0x9f, 0x24, 0x3f, 0xa7, 0x7c, 0xf7, 0x15, 0x0c, 0xbf, 0x82, 0xb1, 0xde, 0xe4, 0xbb, 0x72, 0x4c, 0xcb, 0xcc, 0x57, 0x5f, 0xc5, 0x58, 0xeb, 0xb0, 0x86, 0x27, 0xf9, 0xce, 0x85, 0xe1, 0x26, 0x23, 0x5d, 0x05, 0xeb, 0x57, 0x8c, 0xb5, 0x2d, 0xe1, 0x3b, 0x27, 0xe9, 0xf5, 0xf1, 0xd5, 0xd7, 0xf0, 0x8d, 0x18, 0xbe, 0xa1, 0xf2, 0xdd, 0xad, 0x38, 0x4b, 0x1f, 0x5f, 0x21, 0x6a, 0x3e, 0x0f, 0xaf, 0x0f, 0xf3, 0x55, 0x05, 0xc6, 0x51, 0x48, 0xc7, 0x1d, 0xef, 0x4c, 0xc8, 0x41, 0x61, 0xaa, 0x7c, 0x25, 0x63, 0xb8, 0x05, 0xcb, 0x74, 0xe5, 0xf6, 0x38, 0x7b, 0x4c, 0x9d, 0xc0, 0x7f, 0x33, 0xfe, 0x5f, 0xc0, 0x7f, 0x8b, 0xdc, 0xa9, 0xbf, 0x45, 0xfb, 0x2d, 0xf2, 0x3b, 0x78, 0x67, 0xc5, 0xbb, 0xff, 0xc5, 0x77, 0x6f, 0x50, 0x5c, 0xd6, 0xe3, 0xa2, 0xbb, 0xc3, 0xf4, 0x06, 0xd0, 0x59, 0x33, 0xdd, 0x8d, 0xd2, 0x7b, 0x78, 0xa7, 0xf0, 0xdd, 0x4e, 0x7a, 0x0f, 0xef, 0x54, 0xbe, 0x7b, 0x4a, 0xe8, 0x74, 0x43, 0xa7, 0x0a, 0x7c, 0xff, 0xb0, 0xdc, 0xf9, 0xbf, 0x74, 0xbe, 0xda, 0x24, 0xf6, 0x38, 0xe5, 0xbe, 0xdb, 0x9b, 0xc1, 0x7f, 0x3b, 0xe1, 0x6a, 0x06, 0x78, 0x9f, 0x38, 0xc8, 0xfb, 0xc4, 0xd5, 0xc8, 0x73, 0x0a, 0x3a, 0x66, 0xed, 0x91, 0x37, 0x90, 0xdf, 0x74, 0x90, 0x5b, 0x7a, 0xae, 0xee, 0x17, 0x57, 0x71, 0xd7, 0x20, 0xe1, 0x8f, 0x1b, 0x29, 0x84, 0x6d, 0x8f, 0x92, 0xef, 0xf5, 0x14, 0xc8, 0x01, 0xd7, 0x90, 0xf2, 0x10, 0xf9, 0xb1, 0x9a, 0x17, 0xa7, 0xb3, 0x5a, 0x59, 0x91, 0x3b, 0xff, 0xb7, 0xc8, 0xad, 0xc4, 0x08, 0xb1, 0xd3, 0xd9, 0x8c, 0xac, 0x62, 0xa8, 0xea, 0x00, 0xad, 0x58, 0x84, 0x4a, 0x97, 0xa7, 0x42, 0x15, 0xb8, 0x9d, 0x4b, 0x2e, 0xbd, 0x83, 0xcf, 0x70, 0x14, 0x48, 0x27, 0x81, 0x3c, 0x95, 0x52, 0xc8, 0x51, 0x23, 0x84, 0x74, 0xde, 0x3e, 0xe5, 0x90, 0x31, 0x0c, 0x21, 0x99, 0x6c, 0x0f, 0xfe, 0x13, 0x1a, 0xc6, 0xae, 0x6c, 0x6d, 0x15, 0x20, 0xbb, 0x1b, 0xe9, 0x19, 0xb9, 0xf3, 0x2d, 0x9d, 0xaf, 0x1e, 0xcf, 0x3e, 0xe9, 0x17, 0x4f, 0x06, 0xe5, 0xce, 0xef, 0x8a, 0x27, 0xf7, 0x65, 0x9f, 0xd0, 0x7e, 0x20, 0xde, 0x67, 0x30, 0xf5, 0xef, 0xf2, 0xd5, 0x8a, 0xec, 0x13, 0x89, 0xdb, 0x4e, 0x6a, 0x91, 0x3b, 0x27, 0xb9, 0x36, 0x52, 0x3c, 0xf7, 0x8e, 0x09, 0xec, 0x84, 0x3f, 0xce, 0x25, 0xa2, 0x2b, 0x7f, 0xee, 0x89, 0xcc, 0xf7, 0xd8, 0x02, 0xfa, 0x55, 0xbe, 0x2a, 0xc9, 0x3d, 0x91, 0xf8, 0xde, 0x8c, 0x4f, 0x26, 0xe9, 0x0a, 0xae, 0xe4, 0x9e, 0x58, 0xf8, 0xfe, 0x2c, 0x3e, 0xf9, 0x03, 0x5f, 0x9d, 0xca, 0x3d, 0x71, 0xf0, 0xfd, 0x51, 0xd6, 0xf6, 0xa3, 0xab, 0xc3, 0xb9, 0x27, 0x0a, 0xdf, 0xef, 0xe1, 0x71, 0x43, 0x57, 0x2f, 0xe4, 0x9e, 0xa8, 0x7c, 0xff, 0x14, 0x8f, 0x21, 0xba, 0xda, 0x96, 0x57, 0x53, 0xba, 0xdf, 0xc4, 0x35, 0xb5, 0x6b, 0xf7, 0x0a, 0xed, 0x0d, 0xae, 0xa7, 0x5d, 0xcb, 0x70, 0x2d, 0xed, 0xda, 0xca, 0x6c, 0xa8, 0x4c, 0xb5, 0x5f, 0x2a, 0x77, 0x5e, 0xa5, 0xba, 0x27, 0x03, 0x16, 0x19, 0x39, 0x7f, 0xd1, 0x5f, 0xfa, 0x95, 0x01, 0x15, 0xe5, 0x03, 0x9b, 0x16, 0xe2, 0xd0, 0xf3, 0x18, 0xea, 0xc0, 0xd0, 0x9b, 0x38, 0xd4, 0xa1, 0x39, 0x79, 0x5c, 0x58, 0xd2, 0x65, 0x38, 0x22, 0x2b, 0xb8, 0xaf, 0xdd, 0x9a, 0x7d, 0x1e, 0x59, 0x26, 0x59, 0xd8, 0x16, 0x5c, 0x5e, 0x2b, 0x21, 0x97, 0x4f, 0x6b, 0xe2, 0x38, 0xad, 0xa6, 0x9f, 0x46, 0x89, 0xe2, 0x65, 0x6c, 0x44, 0x85, 0x09, 0xb1, 0x8d, 0x29, 0xbb, 0x0f, 0x4a, 0x2b, 0xb2, 0x94, 0xbd, 0x01, 0xf9, 0xe5, 0x68, 0x1e, 0xbf, 0x5c, 0x37, 0xed, 0x04, 0x04, 0x25, 0x11, 0xb2, 0x92, 0x20, 0x4d, 0x7f, 0x70, 0xf4, 0x58, 0xe6, 0xa9, 0xe0, 0x9d, 0x17, 0x65, 0x3d, 0x37, 0xab, 0xaf, 0x12, 0x5c, 0xc8, 0xab, 0xee, 0xcb, 0xe7, 0x6c, 0x6d, 0xcc, 0x49, 0xf3, 0x5e, 0x71, 0x4e, 0xf7, 0xe1, 0x86, 0x5c, 0x79, 0x2e, 0x17, 0x37, 0x72, 0xe5, 0xeb, 0x85, 0x3e, 0x9e, 0x48, 0x6f, 0x0d, 0x73, 0xe5, 0x9b, 0x68, 0x87, 0x77, 0xea, 0xd4, 0x86, 0x4e, 0x1a, 0x48, 0xcf, 0xa1, 0xfe, 0x3d, 0x5e, 0x3f, 0x4a, 0x91, 0x07, 0x7a, 0x82, 0x56, 0x17, 0x3a, 0x6f, 0xa1, 0x38, 0x59, 0xce, 0xdd, 0xbb, 0x1a, 0x5c, 0x91, 0x33, 0x24, 0x4f, 0x5e, 0xd9, 0xb6, 0xdb, 0xd8, 0x9b, 0x34, 0x56, 0xac, 0xee, 0xa9, 0x53, 0x21, 0xb1, 0x32, 0x35, 0x09, 0x2e, 0x5c, 0x68, 0x5c, 0x20, 0x87, 0x95, 0xa5, 0xef, 0xf2, 0xc0, 0x0a, 0x42, 0x31, 0xcc, 0xd2, 0x77, 0xdb, 0x0a, 0x41, 0x8d, 0xcc, 0x06, 0xed, 0x2a, 0x5c, 0x09, 0x92, 0xa0, 0x9a, 0x12, 0xd2, 0xd5, 0x36, 0x27, 0x72, 0xd4, 0x82, 0xe6, 0x7f, 0x0b, 0xa4, 0x6a, 0x1c, 0x81, 0xa1, 0x5c, 0x88, 0x05, 0x43, 0x6a, 0x31, 0xe4, 0x85, 0x1c, 0xed, 0x96, 0xa7, 0x68, 0xb7, 0x74, 0x0c, 0xe9, 0xdf, 0xbe, 0x2c, 0xed, 0x36, 0xe8, 0x2a, 0xd2, 0xee, 0x02, 0x94, 0x18, 0xa5, 0xb2, 0x2c, 0xed, 0x96, 0xaa, 0x31, 0x96, 0x2b, 0x4b, 0xbb, 0xa5, 0x97, 0xb2, 0xb4, 0x5b, 0x3e, 0x89, 0x23, 0xed, 0x74, 0x96, 0x76, 0x63, 0x89, 0xa7, 0x68, 0x77, 0xf1, 0x14, 0xed, 0x96, 0x8e, 0xe3, 0xdb, 0x07, 0xb3, 0xb4, 0x5b, 0x3a, 0x91, 0xa5, 0xdd, 0xf2, 0x53, 0x39, 0xaa, 0x4c, 0xb4, 0x5b, 0xc6, 0x58, 0x1f, 0x64, 0x69, 0xb7, 0x2c, 0x67, 0x69, 0xb7, 0xbc, 0x1e, 0x63, 0x69, 0x39, 0xea, 0x7b, 0xc8, 0x58, 0xdb, 0x90, 0x5a, 0xc3, 0x51, 0x63, 0x6d, 0x53, 0x30, 0x56, 0x0b, 0xcd, 0x13, 0x41, 0xbd, 0x09, 0x59, 0x51, 0xd0, 0x7a, 0x0c, 0x27, 0xff, 0x00, 0x87, 0x0c, 0x3a, 0x7e, 0x2f, 0xae, 0x0e, 0xe6, 0x2c, 0xbd, 0x96, 0x4e, 0x67, 0xe9, 0xb5, 0x4c, 0x54, 0xe6, 0x1d, 0x3f, 0xd2, 0x47, 0xcd, 0x8e, 0xbf, 0x66, 0xcd, 0x42, 0x6d, 0xe7, 0x27, 0x9b, 0x6a, 0xc2, 0x49, 0xb8, 0xc8, 0xb8, 0xd3, 0x17, 0x29, 0x2c, 0xe1, 0x46, 0x3e, 0x79, 0x4c, 0xb3, 0xd1, 0x35, 0xcb, 0xa4, 0x36, 0x92, 0xa7, 0xfd, 0xaa, 0x73, 0x30, 0xf6, 0x08, 0xc6, 0x3c, 0x42, 0xe1, 0xcc, 0xdd, 0x56, 0x90, 0x7c, 0x4e, 0x77, 0xce, 0xe7, 0x80, 0x7c, 0x15, 0x8c, 0x18, 0x6f, 0x98, 0xe9, 0x0d, 0xed, 0x55, 0xe3, 0x4e, 0x02, 0x1f, 0xde, 0xed, 0xe3, 0x78, 0x43, 0x1a, 0x21, 0x5d, 0xe1, 0x55, 0x94, 0xae, 0xfa, 0x19, 0xa3, 0xcb, 0x96, 0xb2, 0x6b, 0x31, 0x23, 0x6e, 0x21, 0xe9, 0x15, 0xe0, 0x08, 0x2a, 0xd3, 0x56, 0x18, 0x21, 0xc8, 0x93, 0xe2, 0x73, 0x57, 0xde, 0x1d, 0x8d, 0xb0, 0x22, 0x2d, 0x9a, 0x4b, 0x7d, 0x76, 0xda, 0x8c, 0x21, 0x25, 0x9a, 0xbf, 0x07, 0x34, 0xaf, 0x51, 0x1a, 0xa2, 0xa4, 0xce, 0x5c, 0x9a, 0x0e, 0xcc, 0x1f, 0xf4, 0x5a, 0xae, 0xaf, 0x1b, 0x1c, 0xf1, 0xb1, 0xf1, 0xfe, 0x47, 0xfa, 0x63, 0xfd, 0x4e, 0xda, 0xf9, 0xba, 0x92, 0x4b, 0xf9, 0x26, 0x8e, 0x55, 0x9a, 0x4b, 0x57, 0xdc, 0x5b, 0x72, 0xb5, 0xb5, 0xf7, 0x92, 0xc4, 0x32, 0x6c, 0x3c, 0x2f, 0x10, 0xcf, 0x27, 0x4f, 0x1b, 0xf7, 0x26, 0xe3, 0xfe, 0x78, 0x2e, 0x57, 0x71, 0x7f, 0x38, 0xd7, 0x26, 0xe2, 0x7e, 0x8f, 0xd1, 0xc2, 0x37, 0xfd, 0x35, 0xdd, 0xed, 0xc8, 0xb5, 0xb1, 0x9d, 0x9f, 0x3e, 0x91, 0xcb, 0xdd, 0xc6, 0xf7, 0x0f, 0xe5, 0x72, 0x67, 0x6d, 0x00, 0x0e, 0x5b, 0x97, 0x0b, 0x73, 0xf4, 0xde, 0xd4, 0x20, 0x1d, 0xe8, 0x77, 0x6e, 0xd0, 0x82, 0x46, 0xbd, 0x43, 0x9a, 0xc7, 0xb8, 0x0a, 0x6b, 0x0a, 0x5d, 0xb1, 0xdc, 0x38, 0x37, 0xf0, 0x1c, 0xf8, 0xbf, 0xde, 0x01, 0x01, 0x90, 0xf1, 0x37, 0x08, 0x26, 0xfc, 0xad, 0x26, 0xc9, 0x3e, 0xf9, 0x37, 0x84, 0x5a, 0xc6, 0xff, 0x26, 0xe3, 0x9f, 0xee, 0x65, 0xfc, 0xea, 0x62, 0xbe, 0xb6, 0x3c, 0x07, 0xb1, 0x1e, 0x63, 0xee, 0xb6, 0xe6, 0x5d, 0x63, 0x8b, 0xc7, 0xfe, 0xf8, 0x9e, 0xfc, 0x17, 0xd3, 0xd0, 0x22, 0xbd, 0x79, 0xa7, 0x41, 0x53, 0x48, 0x07, 0xae, 0x1a, 0xe9, 0x83, 0x7f, 0x23, 0xed, 0x87, 0xde, 0x16, 0xc5, 0x05, 0x79, 0x3e, 0x58, 0x6e, 0x8b, 0x60, 0xc8, 0x7c, 0xb0, 0xde, 0xa6, 0x82, 0xb0, 0xba, 0x8e, 0x12, 0xc6, 0x34, 0xf6, 0xbc, 0xe5, 0x8d, 0x4e, 0x28, 0x6d, 0xad, 0xf3, 0x6f, 0xc4, 0x7b, 0x9a, 0xdb, 0xd6, 0x63, 0x9d, 0x50, 0xd6, 0x1a, 0xa5, 0xf7, 0x30, 0xa4, 0x90, 0x62, 0x1c, 0xc5, 0x18, 0xf4, 0x3e, 0xd9, 0x4c, 0xd2, 0xfd, 0x38, 0xc6, 0xa0, 0x74, 0x84, 0x66, 0x3c, 0xd2, 0xcf, 0x80, 0x5b, 0xe8, 0x72, 0x11, 0x57, 0x4a, 0xfa, 0xfb, 0x6e, 0xda, 0xd3, 0x77, 0xc6, 0x94, 0x46, 0x45, 0x66, 0xca, 0x7e, 0x24, 0xa8, 0x3a, 0x63, 0x91, 0x4f, 0xe0, 0xdf, 0x1e, 0x27, 0x0d, 0x2a, 0x0e, 0xf1, 0xab, 0x9a, 0xd5, 0x26, 0xc1, 0x37, 0x53, 0xf2, 0x63, 0x87, 0x5b, 0x07, 0x90, 0xda, 0x9a, 0x8a, 0xbe, 0x92, 0xfa, 0x80, 0xcf, 0xa4, 0x05, 0xc6, 0x16, 0xe9, 0x2e, 0xb2, 0x6e, 0x18, 0xe1, 0x41, 0x91, 0x5c, 0xd6, 0x38, 0x31, 0xf9, 0x86, 0x96, 0x6a, 0xe9, 0x77, 0x2d, 0x2e, 0xfa, 0xf3, 0xb4, 0x99, 0xdf, 0xbd, 0xe0, 0x6c, 0x64, 0xf9, 0xe7, 0x60, 0xa2, 0x28, 0xdd, 0xd4, 0xf2, 0x90, 0xb3, 0x51, 0x31, 0x34, 0xb4, 0xf4, 0x23, 0x5e, 0xb5, 0xba, 0x12, 0x2a, 0xe2, 0x2f, 0x87, 0x90, 0xc2, 0xfa, 0x64, 0x7f, 0x41, 0x1b, 0xef, 0x9c, 0xb3, 0xcf, 0xaa, 0xc7, 0xc2, 0xc9, 0x25, 0x97, 0x0e, 0xeb, 0x8a, 0xdd, 0xd9, 0xe8, 0x2c, 0x68, 0xdb, 0xc0, 0xf1, 0xad, 0x6c, 0x13, 0xce, 0x4f, 0xe9, 0x0c, 0x01, 0xd3, 0xb3, 0xa0, 0xfc, 0x9e, 0xc0, 0xf9, 0x30, 0x24, 0xb4, 0xb7, 0x51, 0x66, 0xbc, 0x9c, 0xf5, 0x02, 0xe7, 0xc9, 0xd3, 0xa6, 0xe1, 0x33, 0x55, 0x8b, 0x38, 0x9f, 0xa5, 0x7d, 0x0b, 0x2f, 0xb6, 0xaa, 0xa1, 0xa3, 0xb6, 0xdd, 0xd8, 0xb3, 0xa0, 0xd3, 0x69, 0x2d, 0x77, 0x82, 0x3b, 0xd7, 0x99, 0x20, 0x14, 0x06, 0x6e, 0x85, 0x7d, 0x6b, 0x21, 0xe8, 0x15, 0x3a, 0x32, 0x8a, 0x3c, 0x4d, 0x02, 0xac, 0xce, 0x69, 0xaf, 0x9d, 0x60, 0x19, 0x33, 0x21, 0x34, 0x36, 0x49, 0x2e, 0xf7, 0x59, 0x02, 0x94, 0xee, 0x4c, 0x43, 0x0b, 0x0c, 0xa5, 0xbb, 0xca, 0x37, 0x85, 0xbf, 0x78, 0x89, 0x4e, 0x11, 0xcb, 0x58, 0x4f, 0x88, 0xf5, 0xb2, 0xc9, 0xae, 0x48, 0x72, 0x08, 0xf9, 0xff, 0xde, 0x9b, 0xce, 0x4c, 0x93, 0xff, 0x3d, 0x16, 0xd2, 0x8c, 0x17, 0x36, 0x81, 0x93, 0xb5, 0x2e, 0xd6, 0x72, 0xe3, 0x19, 0x51, 0x46, 0x7a, 0x2b, 0x75, 0x1f, 0x59, 0xc8, 0xe7, 0xf5, 0xa4, 0x5f, 0xba, 0xef, 0xa6, 0x0f, 0xf8, 0xbd, 0xba, 0x8f, 0x00, 0xaa, 0x66, 0x12, 0x62, 0xc9, 0xa9, 0xb8, 0xd8, 0x23, 0x7b, 0xaa, 0x5f, 0x69, 0xe0, 0x37, 0x4c, 0x02, 0x27, 0x73, 0x72, 0x87, 0xaf, 0x20, 0xb0, 0xc8, 0x37, 0xf3, 0xd4, 0x43, 0x4a, 0xfd, 0x23, 0x07, 0x68, 0xf7, 0x96, 0xb1, 0x5d, 0x9d, 0x7c, 0x0e, 0xf1, 0x3d, 0xcc, 0x2b, 0xab, 0xb5, 0xe6, 0x62, 0x39, 0x74, 0x1d, 0x69, 0xe3, 0x89, 0xb2, 0xad, 0xbb, 0xe9, 0x5d, 0x51, 0x36, 0x75, 0xe8, 0xf5, 0x10, 0x96, 0x4f, 0xb1, 0x8c, 0x6f, 0xa1, 0x11, 0x1c, 0x28, 0x58, 0x7f, 0xd3, 0xe9, 0x55, 0x47, 0xeb, 0x4e, 0x45, 0x14, 0x95, 0x76, 0x28, 0xaa, 0x69, 0x87, 0xa2, 0x40, 0x84, 0x84, 0x23, 0x4f, 0xbe, 0x07, 0x32, 0xb5, 0xc7, 0x6f, 0x0f, 0x63, 0x5c, 0x73, 0x36, 0xfc, 0xc9, 0xfd, 0x09, 0x39, 0xb7, 0x43, 0x51, 0xef, 0xa6, 0x1d, 0x8a, 0x84, 0xd3, 0xee, 0xca, 0x60, 0xcf, 0x34, 0xb2, 0x86, 0x21, 0xed, 0x02, 0x8c, 0x1b, 0xfa, 0xb1, 0xa4, 0x33, 0xaa, 0x84, 0xba, 0xa1, 0xaa, 0xba, 0x9b, 0xd7, 0xed, 0xa0, 0x1b, 0xc7, 0x59, 0xb5, 0x0f, 0x3c, 0xf1, 0x97, 0x83, 0xdd, 0x50, 0x41, 0xe7, 0x6d, 0x86, 0x76, 0xd5, 0x72, 0xba, 0x8e, 0x67, 0x74, 0x5d, 0x84, 0x34, 0x4e, 0x5c, 0xe9, 0xe0, 0x91, 0xe2, 0xaa, 0xda, 0xc4, 0x67, 0x2e, 0x36, 0x1e, 0x3d, 0x72, 0xf2, 0x31, 0xc2, 0x04, 0xa2, 0x71, 0x14, 0xef, 0xa4, 0x73, 0x43, 0x8e, 0xc3, 0xa7, 0xaf, 0xbe, 0x46, 0xfc, 0x4f, 0x80, 0xb7, 0x65, 0xa3, 0xaf, 0x4e, 0x68, 0xbd, 0xd2, 0xc9, 0x24, 0x9d, 0x21, 0x6a, 0x70, 0xa5, 0xdc, 0xd8, 0xcd, 0x63, 0x84, 0x4a, 0x1c, 0xf3, 0xa4, 0xc7, 0xaa, 0xa0, 0xcc, 0xe9, 0x10, 0xda, 0x3c, 0xd4, 0xde, 0x7d, 0x90, 0x1b, 0x11, 0xcf, 0xd8, 0x18, 0xd8, 0x38, 0x6d, 0x15, 0x63, 0x25, 0xa5, 0x6a, 0x25, 0x62, 0x3f, 0xef, 0xb6, 0xd5, 0x60, 0x03, 0x13, 0xfe, 0xda, 0x49, 0x92, 0x80, 0x2d, 0x8e, 0xf9, 0x84, 0xe9, 0x35, 0x4e, 0x3a, 0xaf, 0xfd, 0x78, 0x7d, 0x07, 0x5f, 0x9b, 0x71, 0xe6, 0xca, 0xb7, 0x11, 0x97, 0x69, 0xba, 0x8d, 0xf4, 0x4d, 0xcd, 0xda, 0x0a, 0x9c, 0xd7, 0x32, 0x8e, 0xd8, 0xb8, 0x88, 0x9f, 0x8d, 0x4b, 0xf1, 0x8a, 0xe6, 0xb3, 0x6e, 0x0e, 0xd2, 0x8f, 0xa1, 0x48, 0x00, 0x30, 0x9c, 0xd0, 0xbf, 0x54, 0xa2, 0x05, 0x45, 0xf3, 0x59, 0x4b, 0x07, 0x29, 0x8a, 0xf1, 0xe4, 0x4e, 0xe3, 0x89, 0x59, 0x2b, 0x32, 0x4a, 0xb3, 0x8a, 0xf3, 0x58, 0x45, 0x79, 0x88, 0x3d, 0x44, 0x9a, 0x43, 0x3e, 0x2b, 0xe9, 0xa4, 0xf1, 0xcc, 0x58, 0x00, 0xc5, 0xbc, 0x1f, 0xbe, 0x00, 0x6c, 0x3c, 0x2e, 0xae, 0x04, 0x3c, 0x7c, 0x02, 0x54, 0xcc, 0x3a, 0xae, 0x48, 0x67, 0xfc, 0x0b, 0x48, 0x0b, 0x8e, 0xb4, 0xb8, 0xc7, 0x23, 0xae, 0x2e, 0xfd, 0xa2, 0xb1, 0x77, 0xf3, 0x79, 0x69, 0xec, 0xc1, 0x34, 0xcc, 0x46, 0x1a, 0x05, 0x46, 0x1a, 0x93, 0x7f, 0x62, 0x1a, 0x6b, 0x31, 0x0d, 0x8b, 0x91, 0x06, 0xd1, 0x3f, 0x33, 0x95, 0xe3, 0x4f, 0x4a, 0x21, 0x80, 0x29, 0x58, 0x8d, 0x14, 0xcc, 0x46, 0x0a, 0x93, 0x37, 0x48, 0x61, 0x96, 0xcf, 0x4a, 0xfa, 0x9a, 0x98, 0x4e, 0xe9, 0x75, 0xe9, 0xd0, 0x2e, 0xec, 0x19, 0xda, 0xc7, 0x0e, 0x3e, 0x48, 0x1e, 0x13, 0x91, 0x7b, 0x96, 0xc9, 0x6b, 0x04, 0xed, 0xc4, 0x93, 0x87, 0x08, 0xda, 0x57, 0xe6, 0x1c, 0x2a, 0x45, 0x5b, 0x1d, 0x3d, 0x87, 0x6d, 0xb5, 0x38, 0xf8, 0x20, 0xa3, 0x63, 0x22, 0x15, 0x1f, 0x3f, 0x87, 0xf5, 0x8e, 0xd3, 0x5b, 0x6c, 0x21, 0x46, 0x31, 0xba, 0xf4, 0x2b, 0xf4, 0x36, 0xde, 0x0b, 0x2a, 0xde, 0xa5, 0x4f, 0x52, 0x2a, 0xb4, 0x7b, 0xf6, 0x7a, 0x0b, 0xfe, 0x4e, 0xbc, 0x8e, 0xf2, 0x0a, 0x96, 0xef, 0x7c, 0x85, 0x51, 0x46, 0x2e, 0x9f, 0xd8, 0x59, 0x21, 0x74, 0x6a, 0xa4, 0xf1, 0x18, 0xe2, 0xe3, 0x53, 0x8b, 0xf2, 0xe4, 0xa8, 0x5e, 0x4b, 0xf9, 0x33, 0xb7, 0x6c, 0x27, 0x1f, 0x87, 0x98, 0x06, 0xa6, 0xcc, 0x69, 0xf0, 0x6e, 0xb7, 0xa0, 0x98, 0x61, 0xc5, 0xb5, 0x00, 0x2c, 0x15, 0x58, 0x23, 0x37, 0xd6, 0x0c, 0x29, 0x67, 0x31, 0xd5, 0xd6, 0xd0, 0x04, 0xe5, 0x13, 0xfb, 0xc9, 0x4b, 0x5c, 0xf7, 0xdc, 0xfd, 0x95, 0x8b, 0x54, 0xa2, 0x47, 0xb8, 0x44, 0x8f, 0x60, 0x6a, 0x74, 0xda, 0xd1, 0x74, 0xce, 0x14, 0x16, 0x3a, 0xcb, 0x38, 0x33, 0x4c, 0x98, 0x3f, 0x9d, 0xee, 0xd8, 0x7c, 0x64, 0x19, 0x59, 0x65, 0x94, 0x66, 0xd8, 0xd8, 0x5f, 0xe6, 0x5c, 0x21, 0x44, 0x7d, 0x43, 0x27, 0x34, 0xd8, 0xbe, 0x0e, 0x27, 0xe6, 0x8a, 0x74, 0xbb, 0x34, 0xd1, 0x09, 0xb6, 0x0c, 0x59, 0xa2, 0x93, 0x16, 0xb6, 0x8f, 0x2d, 0xd1, 0x29, 0x67, 0x09, 0x6b, 0x05, 0x8c, 0x25, 0x7d, 0x2f, 0xf6, 0x9b, 0xff, 0xa8, 0xd0, 0xd9, 0xbb, 0xc1, 0x28, 0x3c, 0xaa, 0x72, 0x6d, 0xcd, 0x54, 0x5b, 0x71, 0x1f, 0xda, 0x80, 0x6f, 0x04, 0xf0, 0x8d, 0x89, 0xeb, 0xc7, 0x5b, 0x5e, 0x6c, 0xb3, 0xb8, 0xbf, 0x33, 0x82, 0x7d, 0xe8, 0x81, 0xe0, 0xf5, 0xe3, 0xea, 0x4e, 0x15, 0xa9, 0x9d, 0x07, 0xaa, 0xaf, 0x1f, 0x2f, 0xf8, 0x04, 0x67, 0x14, 0x52, 0x94, 0x5c, 0x29, 0x27, 0x3b, 0xa9, 0x74, 0x4d, 0xe7, 0xca, 0x41, 0x3f, 0xfb, 0xc7, 0x7b, 0x69, 0xf2, 0xfc, 0xf4, 0x5e, 0x7a, 0x84, 0x7b, 0xe9, 0x91, 0x3f, 0xb9, 0x97, 0xf4, 0x27, 0xa6, 0xf7, 0xd2, 0xa7, 0xc9, 0xcf, 0xeb, 0xa5, 0x2c, 0x86, 0x2b, 0xd2, 0xb0, 0x66, 0xec, 0xb1, 0xe5, 0x7c, 0xde, 0x5f, 0xe5, 0xa5, 0xdd, 0x55, 0x37, 0xb4, 0x79, 0x32, 0x10, 0xf0, 0x65, 0xa0, 0x06, 0x42, 0xca, 0x97, 0xf1, 0x69, 0x68, 0x64, 0x28, 0x65, 0xba, 0x4f, 0xd2, 0xcc, 0xf7, 0xc9, 0x8c, 0xed, 0x51, 0x1f, 0xed, 0x86, 0x6a, 0xfc, 0x06, 0x49, 0x4b, 0x51, 0x33, 0xd1, 0x1e, 0x9c, 0xeb, 0xee, 0x47, 0x0e, 0xe3, 0x2a, 0x43, 0xc8, 0x6b, 0x4f, 0x33, 0x46, 0x75, 0xd9, 0xc2, 0x4e, 0xf0, 0x42, 0x10, 0x7f, 0xab, 0xa0, 0x5a, 0x49, 0x3c, 0xfa, 0x0a, 0x3f, 0x6b, 0xa1, 0x3d, 0xb5, 0x8a, 0x0c, 0x90, 0x87, 0xad, 0x2b, 0xb6, 0x45, 0xc8, 0xbd, 0xd7, 0xf0, 0xee, 0xaa, 0x23, 0x51, 0x9f, 0x2a, 0xb3, 0x00, 0x72, 0xbe, 0x28, 0x4d, 0x73, 0x88, 0x9d, 0xf8, 0xbe, 0xb1, 0x0d, 0xe9, 0x32, 0x8c, 0x39, 0xce, 0x4f, 0x1c, 0xd3, 0xc2, 0x01, 0x46, 0xa7, 0xf6, 0x65, 0xd5, 0xf5, 0x3c, 0x56, 0xba, 0x21, 0xc6, 0x18, 0xb7, 0x5e, 0xb2, 0x9f, 0xc0, 0x96, 0x3d, 0x14, 0xf4, 0x01, 0xa3, 0xbf, 0x77, 0x23, 0xad, 0x45, 0xfe, 0x0d, 0x0b, 0x06, 0x9b, 0xfc, 0x18, 0x6b, 0x21, 0xca, 0xb5, 0xc8, 0xc9, 0x35, 0x2c, 0x8c, 0x40, 0xed, 0xb1, 0x78, 0x6b, 0x74, 0x61, 0x14, 0xb0, 0x27, 0x5b, 0xd5, 0x85, 0x2a, 0x44, 0xb1, 0x87, 0x65, 0xb8, 0x39, 0x55, 0x8c, 0xeb, 0xed, 0x93, 0x75, 0x84, 0x5d, 0xd2, 0x40, 0x5e, 0x67, 0x59, 0x1a, 0x9f, 0xcb, 0x35, 0x53, 0x13, 0xd8, 0x06, 0xe9, 0xb2, 0x38, 0x9d, 0xb2, 0xfa, 0xa0, 0x9d, 0x72, 0xa5, 0xf5, 0xfc, 0xd6, 0xa7, 0x0d, 0x2b, 0x06, 0xc5, 0xb9, 0x84, 0x91, 0xdc, 0x89, 0x57, 0xac, 0x8d, 0xef, 0xc7, 0x32, 0xa8, 0xf1, 0x03, 0xb8, 0x66, 0x45, 0xe3, 0x2f, 0x0b, 0x2d, 0x4e, 0x03, 0xb1, 0x0e, 0x74, 0x10, 0x68, 0xde, 0xb8, 0xfe, 0x75, 0xe3, 0x32, 0xc2, 0xed, 0x73, 0x3b, 0x59, 0x74, 0x7a, 0xf1, 0xb7, 0x9a, 0x2d, 0xed, 0x28, 0xec, 0x89, 0x96, 0xfa, 0x7d, 0xf5, 0x6b, 0x90, 0x6f, 0x9e, 0x42, 0x6d, 0xa5, 0x5d, 0xc6, 0x85, 0x4e, 0x97, 0xd8, 0x61, 0xf4, 0xd6, 0xfa, 0x20, 0x10, 0xf6, 0x41, 0x75, 0xc8, 0x07, 0x35, 0x35, 0x98, 0xa7, 0x93, 0x34, 0xf1, 0xe7, 0x63, 0x9f, 0xf6, 0x0d, 0x0e, 0x82, 0xb2, 0xb0, 0xcf, 0xe9, 0x04, 0xa7, 0xd8, 0x53, 0xa0, 0x33, 0xaf, 0x6a, 0x3a, 0x8b, 0x97, 0xd7, 0x49, 0xc4, 0x3b, 0xb1, 0xae, 0xfc, 0x53, 0xd8, 0x8e, 0x05, 0xd8, 0x77, 0xac, 0x37, 0xdf, 0xe3, 0x22, 0xe4, 0x72, 0x94, 0xca, 0x2d, 0x5f, 0xe6, 0xfd, 0x7b, 0xe4, 0xcc, 0xea, 0x8d, 0xb3, 0xe2, 0x06, 0xfc, 0x2e, 0x12, 0x3c, 0xc3, 0xc7, 0xb6, 0xe8, 0x0e, 0x94, 0x6f, 0x3c, 0xf0, 0x55, 0xe2, 0x6b, 0x9a, 0xde, 0x8a, 0x5d, 0xa1, 0xdd, 0x00, 0xe2, 0x99, 0x85, 0x2c, 0x92, 0xb2, 0x1b, 0xd2, 0x84, 0xe8, 0x2b, 0x37, 0x61, 0x25, 0xa0, 0x44, 0x6c, 0xd8, 0x7c, 0xa6, 0x4a, 0x05, 0xb7, 0x4f, 0xfe, 0x75, 0x53, 0x81, 0x04, 0x2c, 0x67, 0x9b, 0xae, 0xe5, 0xfd, 0xc9, 0xbf, 0x21, 0xfc, 0x37, 0xb0, 0xf5, 0x7c, 0xb7, 0x01, 0xc6, 0x36, 0x58, 0x24, 0xb0, 0xa4, 0x2d, 0x64, 0xb7, 0xdc, 0x63, 0x11, 0xe8, 0xee, 0x14, 0x2b, 0x86, 0xb1, 0x7a, 0x66, 0x08, 0xfe, 0x1d, 0xa9, 0x08, 0x59, 0x21, 0x94, 0xe2, 0xdc, 0xe2, 0xd3, 0x3a, 0x8f, 0x61, 0xa7, 0x80, 0x7c, 0x58, 0xcd, 0x94, 0x17, 0x26, 0xea, 0x15, 0x81, 0x15, 0x87, 0xe3, 0x2e, 0x2e, 0x34, 0x0b, 0x61, 0x94, 0xed, 0x68, 0x1c, 0x69, 0x07, 0xd6, 0xc3, 0xe4, 0xfa, 0x1e, 0xd6, 0xa4, 0x9c, 0x6a, 0xa3, 0x15, 0xcf, 0x6b, 0xc4, 0xfb, 0xe7, 0xa1, 0xea, 0xcb, 0xab, 0x61, 0x05, 0x94, 0xe3, 0xef, 0xb7, 0xe0, 0xab, 0xf3, 0x9a, 0x90, 0x52, 0xb5, 0x90, 0xf6, 0x34, 0x59, 0xe4, 0x31, 0xb2, 0x85, 0x03, 0xcb, 0x6e, 0x4f, 0xdb, 0x95, 0x16, 0xa5, 0x43, 0x4a, 0x32, 0xde, 0x43, 0x85, 0xe6, 0xe7, 0x51, 0x6a, 0xe7, 0xe7, 0xd9, 0x9a, 0x9b, 0xc9, 0xff, 0xab, 0x56, 0xba, 0x47, 0xb4, 0x7e, 0x06, 0x79, 0xef, 0x0e, 0xb0, 0x69, 0x16, 0x42, 0x28, 0xd6, 0xe4, 0x47, 0x0e, 0xcf, 0x8b, 0xa3, 0x2c, 0x68, 0x52, 0x1c, 0xb4, 0x7f, 0x80, 0x69, 0x3b, 0x22, 0x67, 0x70, 0x7d, 0x89, 0x23, 0xf7, 0x41, 0x5a, 0x95, 0xb4, 0x6b, 0xa5, 0xf8, 0x5a, 0x58, 0xcf, 0x12, 0xdb, 0xb8, 0x0f, 0x34, 0xf8, 0xc3, 0xbd, 0xf4, 0x9f, 0xdd, 0x67, 0x0e, 0x55, 0x18, 0xdc, 0x37, 0xa5, 0xea, 0xca, 0xed, 0x33, 0xfb, 0xc0, 0x1d, 0x8d, 0x6a, 0x4b, 0x15, 0x95, 0xce, 0x85, 0xd9, 0x67, 0xe6, 0x55, 0x5d, 0x5f, 0x6f, 0xde, 0xd3, 0xff, 0x6d, 0x75, 0xca, 0x5f, 0x26, 0x72, 0x20, 0x45, 0x50, 0x0a, 0x73, 0xc1, 0x05, 0x48, 0x51, 0x83, 0x1b, 0xb4, 0x0a, 0x5c, 0x79, 0x64, 0x4d, 0xa1, 0xf5, 0x47, 0x2b, 0xbb, 0x9d, 0xb8, 0x84, 0xe2, 0x2f, 0x47, 0xc0, 0xae, 0xd9, 0xf1, 0xf7, 0x26, 0xcd, 0x32, 0x2f, 0x42, 0x3a, 0xa9, 0xd3, 0x76, 0x82, 0x9e, 0x6a, 0x8d, 0xfa, 0x65, 0xea, 0x91, 0xa6, 0xb7, 0x56, 0x96, 0x8b, 0xdd, 0xa0, 0x1b, 0x9c, 0x78, 0x46, 0x59, 0x96, 0x09, 0xe7, 0x76, 0x4d, 0x9a, 0xa6, 0xed, 0x06, 0x11, 0xe2, 0x43, 0x33, 0x98, 0xf0, 0xd7, 0x4d, 0x67, 0xce, 0x74, 0xd6, 0xc0, 0x67, 0x9c, 0xc0, 0xb8, 0x8d, 0xe5, 0x37, 0x3a, 0xe3, 0xf4, 0x75, 0x88, 0x7d, 0xc6, 0xc9, 0xc9, 0x2c, 0x52, 0x3f, 0xd9, 0xd3, 0x8b, 0x5a, 0xf6, 0x9a, 0x77, 0xf5, 0x7f, 0x3b, 0xc9, 0xb5, 0xa4, 0xb1, 0x6e, 0xc9, 0xd5, 0xb4, 0x0c, 0x87, 0x5d, 0x05, 0x52, 0xa2, 0x50, 0xe0, 0x1b, 0x1a, 0xd9, 0xb5, 0xc9, 0xca, 0x83, 0x9a, 0x13, 0xff, 0x4d, 0xda, 0x25, 0xfc, 0x35, 0x6b, 0xe7, 0x7b, 0x88, 0x43, 0xb2, 0x6b, 0x66, 0xfe, 0xbf, 0x49, 0xe9, 0xd7, 0x4c, 0xca, 0x3f, 0x81, 0x35, 0x2b, 0x2d, 0x92, 0xb4, 0x43, 0x3a, 0xca, 0x1e, 0x63, 0x4f, 0x9f, 0xda, 0xdb, 0xdb, 0x01, 0xcb, 0xfd, 0x73, 0x48, 0x83, 0x1a, 0xa5, 0x37, 0x99, 0xf0, 0x56, 0x43, 0x98, 0x5e, 0x10, 0x53, 0x73, 0x76, 0x19, 0xde, 0x74, 0x95, 0xf1, 0xfd, 0xfe, 0xf8, 0x1b, 0x63, 0xd5, 0x8d, 0xad, 0x4d, 0xad, 0x09, 0x65, 0x96, 0xd3, 0xb2, 0xf8, 0xf7, 0x63, 0xe0, 0xb2, 0xd5, 0x9f, 0x7f, 0x1a, 0x2a, 0xac, 0x44, 0x09, 0x58, 0x5b, 0xc0, 0x38, 0x2b, 0x36, 0x4e, 0xcb, 0x4b, 0xe9, 0x6c, 0x2e, 0xd8, 0x3c, 0x92, 0xe8, 0xf2, 0x57, 0xab, 0x21, 0xac, 0x6b, 0xfd, 0xc5, 0xa7, 0xe1, 0x27, 0xbf, 0xe8, 0x76, 0xd2, 0x59, 0x76, 0x00, 0xb9, 0xb6, 0x91, 0xc5, 0x5d, 0x25, 0x41, 0x95, 0x76, 0x37, 0x22, 0xe7, 0x87, 0xe0, 0xc5, 0x23, 0xf7, 0x18, 0xf3, 0x42, 0xec, 0x41, 0x95, 0xc3, 0xf5, 0xba, 0x60, 0x7a, 0xd5, 0x8d, 0x75, 0xa6, 0xa7, 0x85, 0x1c, 0xba, 0x2e, 0x24, 0x9a, 0x95, 0x6e, 0xf3, 0xb5, 0xc7, 0x68, 0x97, 0x0f, 0x9f, 0x2b, 0x44, 0x97, 0xb2, 0xb6, 0x47, 0xd9, 0x3d, 0x2f, 0x23, 0xb7, 0xeb, 0xac, 0xa7, 0x05, 0xfe, 0xd7, 0xb4, 0x90, 0xda, 0xeb, 0x72, 0xbb, 0xcf, 0xb0, 0x98, 0x04, 0xe1, 0x5f, 0x65, 0x72, 0x85, 0xa1, 0x9d, 0x76, 0xd8, 0x58, 0xa5, 0x3a, 0x70, 0x64, 0x65, 0x3c, 0x95, 0x40, 0xbe, 0x10, 0xfe, 0xfd, 0xa6, 0x90, 0x3b, 0x4c, 0xb6, 0x8f, 0x91, 0xf7, 0x25, 0x0d, 0xe7, 0x4b, 0xa0, 0xf1, 0x2c, 0x84, 0xd7, 0xae, 0x38, 0xb6, 0x75, 0x5d, 0x35, 0xe9, 0xd8, 0xcb, 0x27, 0x15, 0x0f, 0xd9, 0x3d, 0xc8, 0xaf, 0x1a, 0x56, 0x74, 0x60, 0xe8, 0xa1, 0xb0, 0x8d, 0x99, 0xfc, 0x92, 0x17, 0x9f, 0x4e, 0x61, 0x06, 0x28, 0x0d, 0x91, 0xd3, 0xb2, 0xd7, 0x5b, 0x7f, 0x0d, 0x3e, 0x9d, 0x07, 0x8a, 0x6d, 0xec, 0x9e, 0x05, 0xdf, 0x88, 0xaf, 0x28, 0x26, 0x1d, 0x32, 0x94, 0xd5, 0x5a, 0x8a, 0xc2, 0xe0, 0x20, 0x7d, 0x2f, 0xb9, 0x5d, 0x2b, 0x36, 0xf8, 0x7d, 0xb2, 0x63, 0x52, 0x89, 0x9e, 0xcb, 0x31, 0x8d, 0x50, 0x1f, 0xbc, 0xad, 0x1d, 0x70, 0x9e, 0x3c, 0x7d, 0xfa, 0xfb, 0xa0, 0xf4, 0xf5, 0x33, 0xe0, 0x95, 0x87, 0x3e, 0x25, 0x4b, 0x30, 0x5c, 0xd0, 0xe9, 0x29, 0x8e, 0x9b, 0xaa, 0x7f, 0x79, 0xbf, 0xe0, 0x00, 0xc6, 0x2f, 0x76, 0x56, 0xc9, 0xed, 0x98, 0x93, 0x6b, 0x64, 0x03, 0xed, 0x67, 0xa5, 0x6c, 0x4a, 0x95, 0xbc, 0x7c, 0x64, 0x07, 0xb8, 0x57, 0x80, 0x74, 0x19, 0x9f, 0xb5, 0xb5, 0x6e, 0x58, 0x10, 0x91, 0xdb, 0x30, 0xb4, 0x69, 0x64, 0x30, 0xd5, 0x63, 0xa3, 0xdd, 0xea, 0xd2, 0x54, 0x07, 0xaf, 0x6d, 0x6f, 0xe0, 0x4a, 0x1a, 0xf0, 0x56, 0x81, 0xa9, 0x7d, 0xab, 0xe6, 0x51, 0x1a, 0x98, 0xee, 0xb6, 0xa5, 0xcb, 0xf7, 0xbe, 0x20, 0x37, 0xa5, 0x4b, 0x90, 0xbf, 0x30, 0x63, 0xcd, 0xdf, 0x23, 0x54, 0x08, 0x9f, 0x39, 0x8b, 0x8d, 0xa4, 0x34, 0x78, 0x1d, 0x89, 0xcd, 0xa9, 0xa3, 0xcc, 0x7d, 0x04, 0xc8, 0x33, 0x4a, 0x14, 0x63, 0xe3, 0xb7, 0x19, 0xbf, 0x6d, 0xf8, 0x6d, 0xc7, 0xef, 0xf2, 0xe8, 0xf3, 0x05, 0x07, 0xd8, 0x1f, 0xf5, 0xba, 0xc4, 0x06, 0x94, 0x6b, 0x7b, 0x90, 0x0e, 0xb9, 0x60, 0x19, 0xfe, 0xba, 0xe1, 0x1e, 0x6c, 0x4f, 0xe4, 0x17, 0x08, 0xbd, 0x12, 0x24, 0xb2, 0x56, 0x73, 0x9e, 0x30, 0xf0, 0xec, 0xcb, 0x0d, 0x9c, 0x06, 0x5c, 0x85, 0x90, 0x2b, 0xde, 0x3e, 0x7f, 0x8d, 0xdc, 0x24, 0xb9, 0xd8, 0x8f, 0x55, 0x4d, 0xf3, 0xd6, 0xcf, 0xca, 0x85, 0xd0, 0x96, 0xbc, 0x9d, 0x48, 0x79, 0xc9, 0xd6, 0xdf, 0xeb, 0xab, 0x84, 0x90, 0x6f, 0x36, 0xa5, 0x5a, 0x52, 0x86, 0x25, 0xb4, 0x1b, 0xd7, 0xb8, 0x4a, 0xf9, 0xab, 0x84, 0xbd, 0x04, 0xc9, 0xa9, 0x86, 0xcd, 0xc4, 0x3a, 0xe4, 0x3c, 0xaa, 0x6f, 0x26, 0x8d, 0x95, 0x9a, 0xa8, 0x0f, 0xee, 0x5a, 0xd8, 0x07, 0x1d, 0x10, 0x5e, 0x48, 0x9a, 0x68, 0xb5, 0x0b, 0x69, 0xaf, 0x5d, 0xc5, 0x5f, 0x27, 0x44, 0x7d, 0xab, 0x21, 0x0e, 0x31, 0xfc, 0x6d, 0x02, 0xb6, 0xdb, 0x60, 0x2b, 0x91, 0x02, 0x4a, 0xdb, 0x8b, 0xe3, 0xc7, 0x69, 0x55, 0x1a, 0x92, 0x43, 0x9c, 0x4a, 0x0b, 0xa6, 0xa0, 0x23, 0x67, 0xd3, 0x0d, 0xed, 0xf8, 0x5d, 0x66, 0xc4, 0x2d, 0x10, 0x71, 0x29, 0x96, 0x97, 0x3c, 0xa4, 0xf8, 0xe7, 0x27, 0xc1, 0xaf, 0x78, 0x21, 0x34, 0x5f, 0x05, 0xaf, 0xc8, 0x3d, 0x97, 0xf3, 0x54, 0x9e, 0x53, 0xf9, 0x80, 0xa8, 0x83, 0xd3, 0xca, 0xd2, 0xbf, 0x0b, 0xeb, 0xea, 0xe5, 0x9a, 0x55, 0x81, 0x1b, 0x79, 0xd9, 0xc3, 0x74, 0xcd, 0x78, 0x06, 0xfd, 0x38, 0x13, 0x44, 0x1f, 0x29, 0xc8, 0x7d, 0x10, 0x82, 0xa2, 0x83, 0x46, 0x0a, 0xae, 0x91, 0x17, 0xd3, 0x66, 0xb6, 0x50, 0xbe, 0x68, 0x58, 0xdd, 0x0f, 0x90, 0x1e, 0x7f, 0xce, 0x2e, 0x79, 0x8b, 0x8b, 0xb5, 0x6e, 0xae, 0x16, 0x19, 0x9c, 0x41, 0x28, 0x8b, 0x27, 0xb3, 0xb0, 0x06, 0x39, 0x44, 0x8b, 0x17, 0x39, 0x6b, 0x37, 0xed, 0x82, 0x20, 0xa7, 0xe8, 0x5d, 0x00, 0xe5, 0xc8, 0x41, 0x2a, 0xc8, 0x35, 0x86, 0x43, 0x0b, 0xa0, 0xa2, 0x7a, 0x01, 0x78, 0x2a, 0x3b, 0xa1, 0x43, 0x7f, 0x47, 0xd8, 0x69, 0x54, 0x79, 0xc1, 0xa5, 0xc9, 0xf7, 0x81, 0x52, 0x9f, 0xd3, 0x62, 0x06, 0xd3, 0x07, 0x2b, 0xca, 0xf0, 0x6a, 0x55, 0x1a, 0xcc, 0x3b, 0xf0, 0xbf, 0x33, 0x0d, 0x96, 0x63, 0xf8, 0xdf, 0x91, 0x82, 0xa2, 0x2b, 0x38, 0xfa, 0x55, 0x38, 0xf3, 0x2d, 0xb0, 0x1c, 0x10, 0xba, 0xce, 0x45, 0x67, 0x34, 0xb0, 0xc6, 0xfc, 0x1e, 0xf9, 0x28, 0x52, 0x3f, 0x5b, 0x60, 0xbe, 0xd4, 0x06, 0x11, 0x15, 0xbe, 0x1e, 0x91, 0xda, 0x70, 0x74, 0x38, 0x48, 0x4b, 0x5e, 0xd2, 0xc5, 0xae, 0xc4, 0xc8, 0x86, 0x74, 0x47, 0xa2, 0x53, 0xae, 0x49, 0x97, 0x11, 0xf7, 0xca, 0xf5, 0x97, 0xc5, 0x58, 0x22, 0x84, 0xf2, 0x68, 0xb3, 0x86, 0x8b, 0x16, 0xf3, 0x47, 0xcd, 0x8c, 0x2a, 0x16, 0x0c, 0xac, 0x01, 0x87, 0x7f, 0x0d, 0x14, 0x25, 0x06, 0x52, 0x66, 0xe7, 0x0c, 0xc5, 0xa6, 0x99, 0x7a, 0xa1, 0x07, 0xf9, 0x6c, 0x1c, 0x35, 0x66, 0xd6, 0x72, 0x21, 0x3f, 0x1f, 0x8c, 0x66, 0xf4, 0x67, 0xdb, 0x78, 0x67, 0xa8, 0x3f, 0x45, 0x67, 0x03, 0x65, 0x54, 0x8e, 0xaf, 0x25, 0xa5, 0x75, 0x5e, 0x4a, 0x75, 0xa9, 0x06, 0x45, 0xe4, 0x2d, 0x75, 0x9f, 0x66, 0xa9, 0x50, 0xd9, 0xa7, 0xea, 0xbe, 0x44, 0x1d, 0xf2, 0x9a, 0x03, 0x9c, 0x93, 0x13, 0xe3, 0x3b, 0xc9, 0x6e, 0x9d, 0x52, 0x29, 0x1f, 0x65, 0xbd, 0xdf, 0x24, 0xde, 0x03, 0x72, 0xd1, 0x89, 0xe6, 0xad, 0xee, 0x3a, 0x4d, 0xc5, 0xdc, 0xc3, 0x89, 0x58, 0x2a, 0xe4, 0xb3, 0x2a, 0xf5, 0x28, 0xd3, 0x14, 0xe1, 0xd7, 0xee, 0xf3, 0x14, 0xbc, 0x86, 0xdf, 0x23, 0xc9, 0xd1, 0x89, 0x13, 0x6c, 0xe1, 0xa4, 0xa6, 0x4b, 0x7b, 0x3a, 0x46, 0x76, 0x14, 0xbc, 0x91, 0xb6, 0x46, 0x77, 0x14, 0x1c, 0x9d, 0xa7, 0x16, 0xbc, 0xa1, 0x39, 0x5a, 0xf0, 0x4a, 0xb3, 0xf6, 0x76, 0xcc, 0x8b, 0x14, 0xbc, 0x41, 0xa1, 0x4a, 0x3d, 0x21, 0x48, 0x16, 0x1c, 0xc1, 0xdf, 0xa2, 0x82, 0xd7, 0x04, 0x3f, 0x52, 0xd0, 0x92, 0xc0, 0xb2, 0x21, 0x7d, 0xb1, 0x73, 0x6f, 0x54, 0x5b, 0xbc, 0xd8, 0xc3, 0x77, 0xa7, 0xab, 0x04, 0x6f, 0x2c, 0x78, 0x89, 0x75, 0x8e, 0x97, 0x84, 0x0f, 0xa2, 0x59, 0xdc, 0x66, 0x92, 0xc0, 0x2c, 0x13, 0xf6, 0xdf, 0x3d, 0x92, 0x06, 0x05, 0x0e, 0xdf, 0x0c, 0xe4, 0x7d, 0x3d, 0x38, 0x8b, 0xcc, 0xc6, 0x2c, 0x22, 0xcb, 0x41, 0x71, 0x9d, 0x08, 0x61, 0x3a, 0x72, 0x0c, 0x48, 0xd6, 0x28, 0xb7, 0xc5, 0x40, 0xf9, 0x2b, 0x46, 0x01, 0x62, 0xbc, 0xce, 0x9b, 0x90, 0x5e, 0x64, 0x53, 0x55, 0xf2, 0x53, 0xc5, 0x16, 0x32, 0x63, 0x5c, 0x47, 0x6a, 0x9d, 0x28, 0xc7, 0xfa, 0x19, 0x63, 0x9b, 0x7a, 0x69, 0xf6, 0x51, 0xca, 0x0b, 0x20, 0xc8, 0xa3, 0xbc, 0x30, 0x9b, 0x87, 0x18, 0xe5, 0x58, 0xf2, 0x42, 0x78, 0x20, 0x3d, 0x17, 0xff, 0x0b, 0x70, 0x1c, 0x97, 0x24, 0xea, 0x04, 0xdf, 0xe6, 0x9e, 0x75, 0xb8, 0x9f, 0xb4, 0x3d, 0x6f, 0x89, 0xa1, 0xc4, 0x60, 0xe1, 0xbe, 0x69, 0x04, 0x7f, 0xa2, 0x2e, 0x6d, 0xf5, 0x92, 0x96, 0xd1, 0x1a, 0x08, 0x6a, 0xac, 0x0d, 0x5a, 0xd1, 0x01, 0x21, 0x03, 0xd7, 0xa8, 0x96, 0x2d, 0x2c, 0x1c, 0x3d, 0x38, 0xf3, 0xd7, 0x16, 0xee, 0xee, 0xff, 0x36, 0x38, 0x36, 0xe7, 0xf9, 0xfb, 0x7e, 0x06, 0x6c, 0x8e, 0x7b, 0xa1, 0x0d, 0x5e, 0x90, 0x8a, 0x85, 0x5c, 0x40, 0xa3, 0x4b, 0x92, 0xd2, 0xa5, 0xc2, 0x62, 0x00, 0x4b, 0x38, 0x83, 0x77, 0x0b, 0x7f, 0x0a, 0xa7, 0x96, 0x93, 0x7d, 0x8f, 0x83, 0xe2, 0x30, 0x4e, 0x2e, 0x38, 0xc2, 0x84, 0x64, 0x7d, 0x87, 0x0a, 0x76, 0xca, 0x91, 0x34, 0xab, 0xa4, 0xb5, 0x1a, 0x4e, 0x95, 0x90, 0x17, 0x6c, 0xce, 0x86, 0xc7, 0x57, 0x41, 0x09, 0x8e, 0x2d, 0x5c, 0x85, 0x7d, 0x73, 0xc4, 0xfb, 0x1b, 0xad, 0xd5, 0xb4, 0x0b, 0x68, 0xf7, 0x36, 0x6c, 0x5b, 0x03, 0xc5, 0xf8, 0x0c, 0xa9, 0xae, 0xaf, 0x44, 0x3c, 0x1b, 0x60, 0xdf, 0x19, 0x55, 0x0f, 0x05, 0x4c, 0xc3, 0x75, 0x84, 0x65, 0xb8, 0x4d, 0x65, 0x4d, 0xd2, 0x5c, 0xde, 0xa3, 0xdb, 0x09, 0x3d, 0xdb, 0xd9, 0xa0, 0x7c, 0x23, 0xdc, 0x81, 0x32, 0xb1, 0x1d, 0x57, 0xf0, 0x22, 0xd2, 0x5d, 0xf6, 0x36, 0x60, 0x2a, 0x16, 0x4e, 0x89, 0xed, 0xf8, 0xff, 0xbc, 0x8d, 0x51, 0x7a, 0x54, 0xea, 0x0b, 0x94, 0xe3, 0x26, 0x09, 0xad, 0x4b, 0xa4, 0xf0, 0xdb, 0x09, 0xa4, 0x93, 0x1e, 0xa1, 0x9d, 0x9e, 0x5f, 0xab, 0xdf, 0x92, 0x96, 0x43, 0xd0, 0xbf, 0x17, 0x24, 0x81, 0x5e, 0x78, 0x53, 0x0a, 0x25, 0xbd, 0x7d, 0xad, 0x6a, 0x7c, 0x4c, 0xf4, 0x4e, 0xaf, 0x3c, 0xdc, 0x8f, 0x73, 0x83, 0xfb, 0x67, 0x31, 0xd9, 0x6e, 0x5b, 0x93, 0xdb, 0xd8, 0xcf, 0x13, 0x61, 0x01, 0xc1, 0x4d, 0x35, 0x62, 0xc4, 0xdd, 0x14, 0xe0, 0xfd, 0x89, 0x39, 0x29, 0xb8, 0x89, 0x3c, 0xfe, 0x9e, 0xfe, 0x0a, 0x52, 0x35, 0xfd, 0x6c, 0x74, 0x81, 0x7e, 0x0e, 0x67, 0x89, 0xae, 0x7f, 0xa0, 0xd4, 0xdf, 0x85, 0x7c, 0x94, 0x81, 0xe2, 0xd3, 0xa5, 0x93, 0x47, 0x7b, 0x42, 0x1e, 0xed, 0x84, 0x26, 0x7d, 0x42, 0x94, 0x94, 0xb5, 0x4e, 0xbb, 0xf4, 0xd3, 0x38, 0x0b, 0xcd, 0xd9, 0x1c, 0x34, 0xb0, 0x9f, 0xe8, 0xb9, 0xa9, 0x01, 0x0e, 0x10, 0xea, 0x50, 0x6e, 0x14, 0xce, 0xed, 0x15, 0x36, 0x0a, 0xf6, 0x7d, 0xb9, 0xbe, 0xb8, 0x41, 0x4f, 0x90, 0x4c, 0x47, 0x9e, 0x68, 0xd2, 0x60, 0xdf, 0x6e, 0xcd, 0xda, 0x21, 0x5c, 0xd7, 0x9b, 0x98, 0xca, 0x7a, 0xc3, 0x1f, 0x57, 0x07, 0xaf, 0x72, 0x79, 0xe3, 0x16, 0x9f, 0x2d, 0x8f, 0x0a, 0x0f, 0x29, 0x60, 0x6f, 0x4e, 0x3c, 0x90, 0xb6, 0x39, 0x17, 0xf1, 0x0e, 0xda, 0x57, 0xf1, 0x5e, 0x4d, 0xa8, 0x29, 0xb0, 0xd7, 0xe0, 0x7c, 0x06, 0x7b, 0x30, 0x9b, 0x02, 0xb6, 0xf0, 0x53, 0x34, 0x0e, 0xe5, 0x35, 0xff, 0x4b, 0x47, 0x8a, 0xf5, 0x82, 0xb4, 0x2e, 0x6d, 0x8f, 0xe2, 0x6f, 0x96, 0x22, 0xd9, 0x6d, 0x44, 0xb1, 0x52, 0x30, 0x73, 0xdc, 0xb0, 0x4c, 0x5a, 0xe7, 0x6d, 0x50, 0x96, 0x06, 0xa8, 0x47, 0x67, 0x86, 0xa9, 0x47, 0xed, 0xbe, 0x59, 0xce, 0x06, 0x1c, 0x33, 0x16, 0x1e, 0x37, 0x79, 0x3d, 0x2a, 0xc6, 0xf0, 0xda, 0x19, 0x07, 0x06, 0xd6, 0x49, 0x2f, 0x6d, 0x48, 0x2b, 0x5d, 0xd6, 0x04, 0xc9, 0xae, 0xa7, 0x34, 0x98, 0xbd, 0x67, 0x7d, 0xc1, 0x1e, 0xba, 0x7e, 0xba, 0xa7, 0x70, 0x04, 0x57, 0xda, 0xd9, 0xcf, 0x21, 0xe5, 0xdb, 0x65, 0x58, 0x23, 0xcc, 0xc5, 0x91, 0xb0, 0xf2, 0xb3, 0x46, 0xb2, 0x66, 0xc2, 0xa7, 0x0d, 0xf9, 0xb4, 0x21, 0x5d, 0x74, 0x5d, 0x2b, 0xd7, 0x62, 0xbd, 0x4b, 0x58, 0xdf, 0xe9, 0xa6, 0x34, 0x61, 0x72, 0xd8, 0x7c, 0x33, 0x92, 0xa3, 0x97, 0xa8, 0x4c, 0xb6, 0xdc, 0x6c, 0x57, 0x35, 0x9b, 0xd1, 0x02, 0xa7, 0xaf, 0x6d, 0x43, 0x79, 0x35, 0x79, 0x80, 0xc0, 0x52, 0x3a, 0xf2, 0xf3, 0x3f, 0xb8, 0x25, 0xa7, 0x17, 0x76, 0x53, 0x1a, 0x6c, 0x17, 0xa7, 0x52, 0x9a, 0xde, 0xfe, 0xb6, 0x13, 0x6c, 0x1b, 0x15, 0xf9, 0x5f, 0xfa, 0x1d, 0x28, 0x43, 0x30, 0x1e, 0x38, 0x59, 0x5a, 0xdb, 0x18, 0x47, 0xdc, 0x49, 0x5c, 0x98, 0x6d, 0x8f, 0x35, 0x82, 0x7d, 0x1b, 0xb9, 0x61, 0xfd, 0x9e, 0xe3, 0x18, 0xdb, 0xb5, 0xa7, 0xf3, 0x4b, 0xa7, 0x3d, 0x29, 0x7a, 0xd4, 0xd6, 0x4f, 0x3d, 0xaa, 0x2c, 0xe2, 0xf3, 0x2c, 0xec, 0x51, 0x5b, 0x4f, 0x36, 0x96, 0x06, 0x57, 0x2f, 0x11, 0x65, 0x81, 0x55, 0x0a, 0x60, 0x2f, 0x72, 0x8f, 0x15, 0x54, 0xdd, 0x98, 0x62, 0x7f, 0xec, 0xce, 0x51, 0xec, 0x55, 0x9f, 0x41, 0xb1, 0x57, 0xdd, 0x98, 0x62, 0x1b, 0xba, 0x64, 0x47, 0x12, 0x0f, 0xa4, 0x30, 0xab, 0xc4, 0x4e, 0x70, 0xa7, 0x61, 0xd6, 0x65, 0xa6, 0xd8, 0x7f, 0x9e, 0x82, 0x59, 0x1f, 0x70, 0xbe, 0x2b, 0xb1, 0x4c, 0x53, 0x79, 0xee, 0xc3, 0xef, 0x68, 0x72, 0xf4, 0xe2, 0x6e, 0x23, 0xcf, 0x06, 0xa6, 0x8e, 0x6d, 0xd4, 0x2f, 0x82, 0x96, 0xc7, 0xd7, 0x5b, 0x40, 0x2b, 0xc3, 0xb5, 0xdd, 0xed, 0x6c, 0x62, 0xfc, 0x43, 0x87, 0xa0, 0x04, 0xe4, 0x23, 0x9b, 0xf9, 0x83, 0xbc, 0xd6, 0x75, 0xd2, 0x98, 0xfc, 0x86, 0x06, 0xb3, 0xd6, 0x7b, 0xeb, 0xe7, 0xad, 0xc1, 0x72, 0x8d, 0xe2, 0x6f, 0x51, 0xc1, 0x3e, 0x0c, 0xe9, 0xcd, 0x96, 0x42, 0xf2, 0x52, 0xe9, 0xa4, 0x0a, 0x6f, 0x06, 0xaa, 0x88, 0xeb, 0x0a, 0x20, 0xf5, 0xea, 0xb2, 0x91, 0x75, 0x28, 0x7b, 0xc6, 0xed, 0xa0, 0x9d, 0xab, 0x5d, 0x19, 0xb0, 0xac, 0x71, 0x54, 0x7b, 0xc1, 0xfa, 0x52, 0x06, 0x6c, 0xcb, 0xf7, 0xc7, 0x37, 0x8c, 0x45, 0x28, 0x9c, 0x29, 0x78, 0x5b, 0xda, 0x93, 0xf0, 0x4a, 0x5f, 0xe9, 0x72, 0x61, 0x39, 0x84, 0xa7, 0xa9, 0x02, 0x1e, 0x43, 0x40, 0x1e, 0xe4, 0xb2, 0xa5, 0x69, 0xc1, 0x94, 0x85, 0x2d, 0x38, 0xd6, 0xad, 0xa1, 0x02, 0x5c, 0xcc, 0x8d, 0x0a, 0xce, 0xdc, 0xb9, 0x00, 0xc7, 0x60, 0x8d, 0x12, 0x35, 0xf8, 0x52, 0xef, 0x4f, 0x0f, 0xa4, 0xdd, 0x9c, 0x22, 0xad, 0xb3, 0xb2, 0x40, 0x2c, 0xc3, 0x94, 0xe4, 0xca, 0x88, 0x3e, 0x4a, 0x36, 0xd7, 0xd9, 0xb4, 0x9c, 0x0b, 0xf4, 0x51, 0x25, 0xea, 0x72, 0xe0, 0xfc, 0x3c, 0x50, 0x29, 0x46, 0x47, 0x41, 0x72, 0xf4, 0xf7, 0xbb, 0x9a, 0xb7, 0x26, 0x30, 0x46, 0xba, 0x7c, 0x5e, 0xb2, 0xe0, 0xc0, 0x82, 0x26, 0xb9, 0xa9, 0x47, 0x5e, 0xa0, 0xca, 0xcd, 0x0b, 0x90, 0x1a, 0xc9, 0xed, 0xf8, 0xdb, 0x24, 0x2f, 0xd7, 0xaa, 0x99, 0x27, 0xb0, 0x5d, 0xc7, 0x9b, 0xce, 0x15, 0xbc, 0x69, 0xbc, 0x53, 0xd2, 0x92, 0xa3, 0x17, 0x26, 0x78, 0x15, 0x42, 0xee, 0xf4, 0x76, 0x83, 0x3b, 0x75, 0xd6, 0x93, 0x64, 0x85, 0x5c, 0xcc, 0x7b, 0x69, 0xe6, 0x69, 0x70, 0x46, 0x9e, 0x21, 0x6e, 0x07, 0xb9, 0x83, 0xb3, 0x48, 0xbb, 0x07, 0x04, 0x5d, 0x78, 0x0b, 0xe9, 0x82, 0xdb, 0x53, 0x70, 0x00, 0x9f, 0xbe, 0x41, 0xf5, 0xfd, 0xfd, 0x52, 0x17, 0x61, 0x78, 0x75, 0x50, 0x8d, 0x2b, 0xb8, 0xc6, 0xc8, 0x85, 0x57, 0x41, 0x0b, 0xad, 0x42, 0x8a, 0x85, 0x25, 0x03, 0x4b, 0x8a, 0x7a, 0xd0, 0x9e, 0xe3, 0xc3, 0xed, 0xce, 0x3a, 0xb6, 0x0f, 0x28, 0xf6, 0x2e, 0x25, 0xce, 0x26, 0x35, 0x2e, 0x4e, 0x2e, 0x2e, 0xd0, 0x18, 0x3b, 0xe0, 0x8d, 0x19, 0x5c, 0x72, 0x9b, 0xc1, 0x29, 0x33, 0x97, 0x8c, 0x7c, 0x78, 0x8a, 0xca, 0x0b, 0x1d, 0x0e, 0x1c, 0xd1, 0x3e, 0xab, 0xb3, 0x1e, 0xe9, 0x4b, 0x11, 0x7e, 0xf3, 0x46, 0xf2, 0x85, 0x7b, 0x72, 0x23, 0xb9, 0xf3, 0x33, 0x46, 0x72, 0xe7, 0x8d, 0x47, 0xb2, 0x66, 0xa5, 0xd9, 0x22, 0xaf, 0xfa, 0x50, 0x17, 0xb3, 0xe5, 0x7a, 0x8e, 0x2c, 0xcb, 0x3b, 0x4d, 0x3c, 0xcc, 0x74, 0xcf, 0x6b, 0xd0, 0x1c, 0x63, 0x45, 0x4e, 0x81, 0xe5, 0x62, 0x8e, 0x13, 0x28, 0xc8, 0xe7, 0x04, 0x34, 0xf8, 0xe4, 0xb2, 0x98, 0x27, 0x96, 0xa3, 0xd3, 0x67, 0xab, 0xe5, 0x00, 0xd9, 0x52, 0xff, 0xf4, 0x34, 0x4a, 0x29, 0x60, 0x79, 0x89, 0xc6, 0x94, 0xa1, 0x8f, 0x6a, 0xf6, 0x01, 0xe6, 0x53, 0xed, 0xad, 0x4f, 0xac, 0x01, 0x4b, 0x06, 0x24, 0x1b, 0xd5, 0x3b, 0xe0, 0x96, 0xc2, 0x47, 0xd7, 0x80, 0xf5, 0xb6, 0x88, 0x14, 0xf2, 0xbb, 0xa5, 0xda, 0xf1, 0x35, 0xb8, 0x4a, 0xa8, 0x52, 0x0d, 0xa1, 0xe8, 0x25, 0x3a, 0xa0, 0x2f, 0xe3, 0x0f, 0x4a, 0xf1, 0x03, 0x19, 0x39, 0x36, 0xb0, 0x4e, 0x7e, 0x69, 0x20, 0x63, 0x3d, 0x1a, 0xe1, 0x75, 0x04, 0x63, 0x93, 0x45, 0x11, 0x86, 0x6f, 0x58, 0x2b, 0xef, 0xde, 0x90, 0xb1, 0x8e, 0xab, 0x1c, 0x6e, 0xbc, 0x89, 0x1c, 0x6e, 0x26, 0xc5, 0x75, 0x8f, 0xae, 0x92, 0xc2, 0x5a, 0x1f, 0xf5, 0x70, 0x75, 0x95, 0x14, 0x8a, 0xbf, 0xbc, 0x84, 0xac, 0x2b, 0xce, 0x33, 0x8e, 0x6a, 0x01, 0xe1, 0xc3, 0x18, 0x6f, 0x85, 0x83, 0x6e, 0xa9, 0x26, 0x7e, 0x80, 0xde, 0xe5, 0x9d, 0xab, 0x0c, 0xdb, 0xba, 0xe3, 0x73, 0x4a, 0xe3, 0xeb, 0xaa, 0x54, 0x3b, 0xf5, 0x84, 0x53, 0x18, 0x22, 0xcd, 0xce, 0xbc, 0xf7, 0x43, 0x9f, 0xf9, 0x66, 0x8d, 0xdf, 0x03, 0x0d, 0x94, 0xff, 0xf8, 0x1a, 0x29, 0xe4, 0xad, 0xff, 0x0b, 0x15, 0xac, 0x81, 0x4e, 0x88, 0xd1, 0x7b, 0x47, 0x4f, 0x4b, 0x35, 0x7f, 0xb1, 0x18, 0x67, 0x91, 0xe2, 0xad, 0x47, 0x09, 0xc8, 0x3a, 0xd4, 0x29, 0x62, 0xfe, 0x05, 0xa5, 0x57, 0x4f, 0x7e, 0xb3, 0x87, 0xcf, 0x40, 0xec, 0x2f, 0x16, 0x4b, 0x35, 0xf9, 0x7e, 0x0d, 0xd8, 0xb2, 0xce, 0xef, 0x55, 0x95, 0x35, 0x28, 0xa9, 0x74, 0xb0, 0x2e, 0x80, 0xd2, 0xa2, 0xde, 0xa5, 0xea, 0x84, 0x7c, 0x55, 0xfe, 0x68, 0x97, 0x3e, 0x16, 0x74, 0x83, 0xb3, 0x25, 0x7a, 0x57, 0x54, 0xdf, 0x57, 0xed, 0x86, 0xb9, 0x7f, 0x4b, 0x3c, 0xb1, 0x0d, 0xd7, 0xfa, 0xa7, 0xf5, 0x7d, 0x77, 0xe1, 0xb5, 0x3e, 0x46, 0x25, 0x53, 0x56, 0x49, 0xeb, 0x0c, 0xdb, 0xda, 0x2a, 0xe4, 0xe5, 0x43, 0xc1, 0xf9, 0x54, 0x52, 0xf9, 0xe4, 0x3a, 0xa8, 0x76, 0xcb, 0xb5, 0xee, 0x02, 0x79, 0x13, 0x79, 0x24, 0xb6, 0x6d, 0x12, 0x7e, 0x89, 0x43, 0x61, 0xb0, 0x1d, 0xee, 0x4f, 0x77, 0x52, 0x99, 0xd6, 0x43, 0x68, 0x81, 0x3e, 0xe6, 0x8d, 0xd1, 0xef, 0xe3, 0x78, 0x7f, 0x57, 0x4c, 0xdf, 0xf3, 0x2f, 0xaf, 0x64, 0xcc, 0xc8, 0x3b, 0xec, 0x41, 0xea, 0x12, 0x23, 0x64, 0xa0, 0x70, 0xe4, 0xe4, 0x2b, 0x77, 0x25, 0xf5, 0xa3, 0x89, 0x48, 0xa6, 0xc4, 0x52, 0x00, 0xb3, 0xd2, 0xa6, 0xd8, 0x58, 0xca, 0xb6, 0x67, 0x71, 0xa6, 0x62, 0x4f, 0x97, 0x7e, 0xb4, 0xdb, 0xa9, 0x95, 0x5a, 0x48, 0x53, 0x06, 0x43, 0x3b, 0x4b, 0x30, 0x9d, 0x3d, 0x7b, 0x16, 0x77, 0xdb, 0xe8, 0x49, 0xc6, 0x82, 0x5c, 0xd6, 0x62, 0x4c, 0x25, 0x22, 0x4a, 0x50, 0xc0, 0x25, 0x28, 0x10, 0x25, 0x28, 0xc0, 0x12, 0xf4, 0x60, 0xea, 0x76, 0x2e, 0xc1, 0x3e, 0x2e, 0xc1, 0x3e, 0x2c, 0x81, 0xfd, 0x06, 0x25, 0xb0, 0x86, 0xa3, 0x46, 0x09, 0xa2, 0x99, 0x32, 0xcc, 0x6b, 0x66, 0x9a, 0x3d, 0xd4, 0xa5, 0xed, 0x58, 0x06, 0x0f, 0x97, 0xa1, 0x22, 0x68, 0xd2, 0xca, 0x2d, 0xa4, 0x37, 0x69, 0x66, 0x5e, 0xa4, 0x04, 0x79, 0xab, 0x3d, 0x23, 0x58, 0x8e, 0x11, 0x2e, 0x47, 0x10, 0xb6, 0x51, 0x39, 0xa2, 0x3d, 0x40, 0x3e, 0x0b, 0xd6, 0xc1, 0x7a, 0x46, 0xe0, 0xbc, 0x72, 0x9a, 0xfc, 0x8a, 0x18, 0x68, 0x4b, 0xe3, 0xac, 0x0f, 0x51, 0x4c, 0x7a, 0x2e, 0x4e, 0xb7, 0x1c, 0xdb, 0xb5, 0xc3, 0xbc, 0x07, 0x29, 0xca, 0x68, 0xc8, 0xcd, 0x7d, 0x82, 0x33, 0x39, 0x38, 0x1f, 0xac, 0x5d, 0xb6, 0x40, 0xb4, 0x97, 0xce, 0x71, 0xc7, 0x76, 0x3d, 0xb8, 0x26, 0x18, 0x30, 0x51, 0xff, 0x0e, 0xe3, 0x48, 0xc0, 0x72, 0x59, 0x13, 0x91, 0x6f, 0x1e, 0x88, 0x0f, 0x1c, 0x88, 0x6a, 0x73, 0x03, 0xd1, 0xb5, 0x10, 0xc4, 0x38, 0xbb, 0x1f, 0x5c, 0x53, 0x14, 0xc0, 0x1e, 0x1c, 0x3e, 0x0d, 0xb6, 0x5d, 0x8b, 0x33, 0xe6, 0xc0, 0x4c, 0x4d, 0x0e, 0x98, 0x9c, 0xf5, 0xd5, 0xf3, 0xc1, 0x86, 0x29, 0xd5, 0x71, 0xac, 0x7d, 0x18, 0x2b, 0x14, 0x04, 0x4a, 0x69, 0xdb, 0x1a, 0xa9, 0x26, 0x51, 0x97, 0xb1, 0x27, 0xd4, 0x4c, 0x45, 0x22, 0xfa, 0x4d, 0xe4, 0xf8, 0x0f, 0xd6, 0x61, 0x6a, 0x75, 0xd8, 0x8b, 0x18, 0xef, 0x25, 0x91, 0xda, 0x3e, 0x4c, 0xcd, 0xbe, 0x1b, 0x53, 0x0b, 0x62, 0x6a, 0x41, 0xd8, 0x13, 0x49, 0x99, 0x46, 0xa2, 0x69, 0x47, 0x8f, 0x34, 0xbd, 0x66, 0x48, 0x25, 0x57, 0x31, 0xc2, 0x00, 0x96, 0x63, 0x64, 0x70, 0x8d, 0x35, 0x8c, 0xe5, 0x68, 0x4d, 0x7e, 0x3d, 0x49, 0x35, 0xc1, 0x27, 0x36, 0x7e, 0xb2, 0xcf, 0x78, 0xb2, 0x8f, 0x9f, 0xd8, 0x94, 0x7a, 0x9c, 0xa3, 0xd6, 0x8c, 0x29, 0xda, 0x41, 0xb1, 0x12, 0x18, 0x0b, 0xaf, 0xf1, 0x97, 0xca, 0x96, 0x58, 0x23, 0xa9, 0xe9, 0x66, 0x91, 0xaa, 0x52, 0x25, 0xc5, 0x46, 0x06, 0xbb, 0xcd, 0x5f, 0xc7, 0xd1, 0xaf, 0x15, 0xd1, 0x53, 0x0c, 0x69, 0x1a, 0x19, 0xcc, 0x98, 0x95, 0x7a, 0x94, 0x7d, 0x8d, 0x1c, 0x8c, 0xf0, 0xb8, 0x11, 0xd3, 0xa6, 0x15, 0xf1, 0x48, 0x9d, 0x2f, 0x35, 0x53, 0x4c, 0x9e, 0x3b, 0x98, 0xe3, 0xed, 0xa4, 0x99, 0xdc, 0x80, 0xbf, 0x36, 0x94, 0xfb, 0x19, 0x99, 0xa7, 0x68, 0x0b, 0xce, 0xa6, 0x10, 0xf1, 0xc9, 0xe2, 0xfe, 0x2b, 0x97, 0x5c, 0x28, 0xdf, 0xdd, 0x98, 0xde, 0x65, 0xd7, 0xd6, 0x8f, 0x9f, 0x32, 0xf6, 0x89, 0x2f, 0x0b, 0x0a, 0x38, 0x45, 0xf7, 0xd6, 0x15, 0xbc, 0x84, 0x23, 0xbd, 0x8b, 0xf0, 0x4c, 0x50, 0x22, 0x81, 0xe3, 0x9a, 0x8d, 0x25, 0x22, 0x80, 0xd7, 0x48, 0xa7, 0xef, 0x8b, 0xf2, 0xf9, 0x34, 0xbf, 0x47, 0x3a, 0xa4, 0xb5, 0x84, 0xca, 0x85, 0xf4, 0x61, 0xed, 0x67, 0x72, 0x7a, 0xeb, 0xfc, 0x19, 0x92, 0x49, 0x86, 0xde, 0xcb, 0x97, 0x49, 0x2a, 0xe3, 0x8c, 0x9c, 0xca, 0x72, 0x49, 0x38, 0x03, 0x76, 0x67, 0xc3, 0x93, 0xef, 0xb1, 0x5c, 0x92, 0x27, 0xb3, 0x64, 0xe5, 0x12, 0xa5, 0x4b, 0x1f, 0x1d, 0x7a, 0xd9, 0x67, 0x79, 0x72, 0x0c, 0x79, 0xd4, 0x5c, 0xea, 0x3f, 0x5d, 0xa3, 0x95, 0xde, 0x98, 0x72, 0x0b, 0xfe, 0x5d, 0xd4, 0x5a, 0x50, 0xf0, 0x02, 0x07, 0x72, 0x04, 0x12, 0x5c, 0x45, 0x5a, 0xf0, 0x81, 0xf0, 0x22, 0xa1, 0xbf, 0x41, 0xab, 0x5c, 0x0f, 0x20, 0x87, 0x71, 0x92, 0xd7, 0x5c, 0x94, 0x02, 0x59, 0x72, 0xae, 0xe2, 0x5d, 0x12, 0xc7, 0x4f, 0xc7, 0xd2, 0xcb, 0x48, 0x8b, 0x9b, 0xb9, 0x91, 0xab, 0xe9, 0x22, 0x4b, 0x15, 0xff, 0x5b, 0x15, 0x2f, 0x4c, 0x8e, 0xbc, 0x00, 0x93, 0xe9, 0x30, 0xd5, 0x3f, 0xf1, 0x9c, 0x74, 0x0f, 0xa6, 0xf9, 0x02, 0xa5, 0x80, 0x69, 0x84, 0x4d, 0x74, 0xe4, 0xc7, 0x9c, 0xc5, 0x97, 0x36, 0x31, 0x6d, 0xfe, 0x27, 0x69, 0x19, 0x7e, 0xef, 0xc1, 0xef, 0x0a, 0xfc, 0xa6, 0x04, 0x67, 0x29, 0xdd, 0x47, 0x73, 0xcc, 0x67, 0x15, 0xbc, 0xb7, 0x9f, 0x5a, 0xd9, 0x22, 0xe4, 0xf6, 0x3f, 0x1f, 0x73, 0x33, 0x5e, 0x04, 0x69, 0x54, 0x50, 0xfa, 0x8a, 0x5b, 0x5a, 0x36, 0xb2, 0x89, 0x6c, 0x40, 0x13, 0xfd, 0xa9, 0x8c, 0xb3, 0xde, 0xb9, 0x0a, 0xec, 0x95, 0x8b, 0xf5, 0x43, 0x95, 0xaa, 0x7e, 0xc0, 0xb5, 0x40, 0x3f, 0x50, 0xb1, 0x40, 0x3f, 0xf4, 0xc6, 0xc6, 0x5f, 0x0f, 0x28, 0x78, 0xfd, 0xc6, 0x0f, 0xf5, 0x43, 0xbf, 0xee, 0xa7, 0xbb, 0xec, 0xd7, 0x99, 0x0d, 0xdd, 0x40, 0x77, 0xb7, 0x44, 0xa5, 0x15, 0xb7, 0xd4, 0x49, 0xa9, 0xf8, 0xfa, 0xa4, 0x22, 0xd6, 0x60, 0x3a, 0x5b, 0xf8, 0x56, 0xb0, 0x79, 0x2b, 0xa6, 0x76, 0xbc, 0x07, 0xf0, 0xf7, 0x18, 0xa6, 0x73, 0x8c, 0xbc, 0x6f, 0x68, 0xf7, 0x51, 0xe9, 0xff, 0xe5, 0x3d, 0xe9, 0x1e, 0x1c, 0x15, 0x2f, 0x28, 0xf5, 0xe4, 0x63, 0x1d, 0x7b, 0xec, 0x35, 0x8e, 0x75, 0x04, 0x73, 0x3e, 0x82, 0x39, 0xbf, 0x66, 0xe4, 0x7c, 0x04, 0xf3, 0x78, 0xed, 0xba, 0x9c, 0x45, 0x28, 0xe7, 0xfc, 0x35, 0xcc, 0xf9, 0x6b, 0x9f, 0x95, 0xf3, 0xdb, 0x9c, 0xe6, 0x49, 0x7c, 0xe3, 0x24, 0xbe, 0xf1, 0xf6, 0xaf, 0x37, 0x44, 0xfb, 0x7b, 0xff, 0xfc, 0xe8, 0xc6, 0xd7, 0x07, 0x98, 0xc7, 0x51, 0xb1, 0xcc, 0x11, 0x29, 0xa5, 0xb9, 0xa9, 0x3c, 0x7b, 0xb0, 0x35, 0x53, 0x66, 0x2a, 0x55, 0x9a, 0x7a, 0xde, 0x9e, 0x6b, 0x71, 0xbb, 0x68, 0x71, 0xde, 0x1f, 0x64, 0xf9, 0x5c, 0x5a, 0x76, 0x4b, 0x52, 0xba, 0x47, 0x2b, 0xbe, 0x51, 0x1f, 0x60, 0x8f, 0x9a, 0xe0, 0xee, 0x34, 0x61, 0x8e, 0xd3, 0x98, 0x28, 0x4b, 0x15, 0x1b, 0xf3, 0xe4, 0x2c, 0x9f, 0x6a, 0xdf, 0x94, 0x42, 0xc9, 0x0f, 0xde, 0x16, 0x67, 0x99, 0xc6, 0x9c, 0xf1, 0x8f, 0x11, 0xee, 0xcf, 0xab, 0x98, 0xb6, 0xd7, 0xb1, 0x17, 0x64, 0x94, 0xa3, 0x3f, 0xd8, 0x9d, 0x81, 0xf3, 0x6b, 0x00, 0xb6, 0xe5, 0xed, 0xc1, 0x66, 0x0c, 0x6f, 0x20, 0x2b, 0x9c, 0x1d, 0x50, 0x4e, 0xe5, 0xd0, 0x92, 0xeb, 0x1c, 0x2f, 0xfd, 0x13, 0x14, 0xa7, 0x62, 0x3f, 0x7d, 0x0f, 0xbc, 0xa9, 0xda, 0xca, 0x38, 0xae, 0x97, 0x1d, 0x52, 0x1b, 0x94, 0x71, 0x19, 0x5a, 0xd3, 0x76, 0xbc, 0x0b, 0x81, 0x82, 0xbf, 0x35, 0xe0, 0xd4, 0x6c, 0x5f, 0xc7, 0x79, 0x80, 0x77, 0x38, 0x5b, 0xc0, 0x19, 0x79, 0x0f, 0x5c, 0x75, 0xef, 0x81, 0x9b, 0x39, 0xe9, 0x9d, 0x6b, 0x25, 0xcd, 0xee, 0x54, 0x49, 0x1f, 0x33, 0xb5, 0x93, 0x52, 0x89, 0x46, 0xa7, 0x76, 0x79, 0x13, 0xd1, 0x94, 0x9f, 0xe7, 0x81, 0x2d, 0x39, 0xfa, 0x1e, 0xa1, 0xbd, 0x09, 0x49, 0x42, 0x67, 0x8c, 0xd1, 0xfc, 0x9d, 0x10, 0x35, 0x6d, 0x69, 0xc1, 0x52, 0x1b, 0x7e, 0x8b, 0x49, 0x43, 0x65, 0x88, 0x4e, 0x51, 0xc5, 0x39, 0xde, 0xc7, 0xc8, 0x7b, 0x5f, 0xdc, 0x9c, 0xbc, 0x9b, 0xfc, 0x5b, 0x84, 0x48, 0xff, 0xc8, 0xd2, 0x53, 0xe2, 0x24, 0xa4, 0x40, 0x29, 0x97, 0x53, 0x0d, 0xf9, 0xbf, 0x94, 0x15, 0xf2, 0x19, 0x2f, 0xf5, 0x5d, 0xf7, 0x4c, 0x60, 0x48, 0x9e, 0xed, 0x71, 0x5e, 0xfb, 0x84, 0xf5, 0x83, 0xf6, 0x2a, 0x1c, 0xea, 0xa4, 0x77, 0xbd, 0xae, 0xdc, 0xd3, 0xab, 0xf1, 0x5b, 0x55, 0xc9, 0x8f, 0xcf, 0x07, 0x7b, 0x1c, 0x71, 0x95, 0x9e, 0xce, 0x18, 0xbf, 0xe6, 0x69, 0x10, 0x9f, 0x76, 0xd6, 0x9f, 0xd3, 0x4f, 0x1b, 0x96, 0x52, 0x56, 0xe2, 0x4e, 0xfe, 0xfa, 0xf1, 0xe4, 0xf6, 0x4a, 0xc2, 0x43, 0xf9, 0xaa, 0x7e, 0xba, 0x47, 0xc2, 0xf1, 0x73, 0x96, 0xef, 0xe6, 0xea, 0xe7, 0x1d, 0x61, 0x50, 0xf0, 0xfe, 0xa2, 0x88, 0x8d, 0x32, 0xfd, 0x78, 0x2e, 0xe6, 0x38, 0xc7, 0x3c, 0x66, 0xc4, 0x3c, 0x8e, 0x31, 0x09, 0x4b, 0xf9, 0xa4, 0x92, 0x91, 0x9d, 0x8f, 0xbe, 0x22, 0xbc, 0x3b, 0xdc, 0xaa, 0x42, 0x10, 0xef, 0x2b, 0x1e, 0x7d, 0x05, 0x73, 0x1c, 0xcf, 0x85, 0x85, 0x9c, 0x95, 0x10, 0x64, 0x3c, 0x4a, 0x80, 0x9d, 0x8c, 0x21, 0xf0, 0xac, 0x12, 0x9b, 0x43, 0x7b, 0xa7, 0xf6, 0x9e, 0xe2, 0xf1, 0x4d, 0xb7, 0xa8, 0x50, 0x1e, 0x7d, 0x0e, 0x4a, 0x7b, 0x4a, 0xf9, 0xba, 0xf8, 0xd6, 0x18, 0x98, 0xea, 0xdf, 0x07, 0xcb, 0xbc, 0x04, 0x58, 0xe8, 0x6c, 0x2e, 0xf2, 0x3e, 0xd8, 0x5c, 0x83, 0xf8, 0x5b, 0x7c, 0x4b, 0x1c, 0x43, 0x9e, 0x03, 0x53, 0xdd, 0xfb, 0x48, 0x3f, 0x1f, 0xc4, 0x10, 0x25, 0x2f, 0xc4, 0x45, 0x21, 0x52, 0xe9, 0xad, 0x71, 0xa9, 0x3c, 0xfa, 0xbc, 0x54, 0x7c, 0x47, 0x5f, 0x3f, 0xf2, 0xcb, 0xce, 0xba, 0xaf, 0xf5, 0xc1, 0xa9, 0x7f, 0x8c, 0x42, 0xd1, 0xd7, 0x1a, 0xc1, 0xfe, 0xa5, 0x3e, 0x08, 0xc0, 0x4c, 0x0c, 0xf9, 0xb7, 0xc7, 0x9b, 0x80, 0x10, 0x94, 0x46, 0x7f, 0x37, 0x5c, 0xb1, 0x45, 0xf8, 0xc2, 0xf8, 0x5d, 0xcb, 0xfc, 0xd5, 0x38, 0xaa, 0x36, 0xcd, 0x4f, 0xc0, 0x20, 0x4b, 0xcf, 0x6b, 0xe9, 0x3c, 0xbf, 0x7e, 0xe2, 0x77, 0xf7, 0x24, 0x87, 0xf1, 0xaa, 0x12, 0x42, 0xf8, 0x2f, 0x76, 0xb8, 0x2b, 0xa5, 0x60, 0xfd, 0xc4, 0xbb, 0xc7, 0xf3, 0xee, 0xfd, 0x6c, 0x87, 0xad, 0x18, 0x52, 0xc6, 0x7a, 0xf2, 0x9c, 0x96, 0x1c, 0x7d, 0xb7, 0x8f, 0x25, 0x6d, 0x23, 0x4c, 0xea, 0xa3, 0x3d, 0xfb, 0x77, 0x3b, 0xa2, 0xab, 0x25, 0x35, 0x3f, 0x9c, 0x90, 0x6e, 0x31, 0xbc, 0x99, 0xc2, 0x18, 0xb1, 0xe0, 0xdc, 0xf2, 0x72, 0x61, 0x01, 0x15, 0xff, 0x9d, 0x12, 0x72, 0x1b, 0x9a, 0xd5, 0x2e, 0x1c, 0xdb, 0x8c, 0x9b, 0x1a, 0x5c, 0x34, 0xf1, 0xee, 0xab, 0xc9, 0x47, 0xf9, 0x3a, 0x84, 0xff, 0xbc, 0x9e, 0x39, 0x47, 0x8c, 0x92, 0x78, 0x24, 0x3f, 0x3e, 0xaf, 0xc5, 0xf0, 0xec, 0x7d, 0x90, 0xbd, 0x00, 0x28, 0x55, 0x3f, 0xcd, 0x95, 0xcc, 0x03, 0xa6, 0x45, 0x13, 0xff, 0xf1, 0x76, 0x36, 0x0e, 0x97, 0xcc, 0x3a, 0x75, 0x87, 0xe5, 0xb1, 0xf1, 0x3b, 0xae, 0xa6, 0xb7, 0xca, 0x4d, 0x06, 0xf2, 0xa9, 0xd0, 0x18, 0x74, 0xb9, 0xdc, 0xd0, 0xc6, 0x67, 0x79, 0x49, 0x42, 0xaf, 0x55, 0x9a, 0x0c, 0xc4, 0xd7, 0x26, 0xe4, 0x60, 0x8b, 0xe2, 0x63, 0x01, 0x0f, 0x38, 0x0c, 0xac, 0xb4, 0xbe, 0x0a, 0xb5, 0x02, 0x8c, 0xe7, 0xeb, 0x12, 0x1b, 0xd3, 0x73, 0xff, 0xf9, 0x8c, 0x94, 0x4c, 0x97, 0x2a, 0x95, 0x28, 0x29, 0x17, 0x2b, 0x2a, 0xf3, 0x45, 0xa5, 0x4b, 0x51, 0xde, 0x8c, 0xef, 0x1f, 0xdb, 0x60, 0xf8, 0x8d, 0x11, 0xa8, 0x20, 0xfd, 0x8c, 0x2b, 0x67, 0x71, 0x2f, 0xae, 0xf8, 0x86, 0x6f, 0x35, 0xac, 0x84, 0xa5, 0x38, 0x93, 0xc3, 0xe4, 0x23, 0x03, 0x67, 0xf3, 0x3a, 0xdf, 0x62, 0x58, 0x11, 0xfd, 0x11, 0x3c, 0x13, 0xed, 0x86, 0xe7, 0xb0, 0xaf, 0xcf, 0x60, 0xf8, 0x3d, 0x46, 0x4d, 0x2d, 0xc9, 0xd1, 0xff, 0x70, 0xe2, 0x9a, 0xbe, 0x53, 0x52, 0x52, 0x0e, 0x1c, 0x8f, 0xd9, 0xfd, 0xf1, 0x13, 0xf3, 0x55, 0xc9, 0xd8, 0xd1, 0xc4, 0x56, 0x22, 0x4c, 0xb5, 0xd1, 0xff, 0x78, 0xc1, 0xc0, 0x56, 0xfb, 0x77, 0xdf, 0x6e, 0x4c, 0x69, 0x9f, 0x27, 0x03, 0x5e, 0x96, 0x61, 0xa3, 0x10, 0xac, 0x90, 0xa3, 0xdd, 0xec, 0x7d, 0x7a, 0xd9, 0xfa, 0xbe, 0xe3, 0x5b, 0xbd, 0xb3, 0xcc, 0x9b, 0x09, 0xa7, 0xdf, 0xd7, 0x40, 0xb6, 0x14, 0xb3, 0x4b, 0xd9, 0x7f, 0xc5, 0xb3, 0x4a, 0xa5, 0x79, 0x6f, 0x5a, 0x89, 0x3e, 0x6f, 0xde, 0x4b, 0x67, 0x4b, 0xc2, 0xff, 0x17, 0xa3, 0xa8, 0xfe, 0x7b, 0xc3, 0xda, 0x3b, 0x69, 0xff, 0xea, 0x5e, 0x96, 0x3a, 0xbb, 0x61, 0x47, 0xca, 0xc9, 0xed, 0x49, 0x48, 0x02, 0x26, 0x61, 0x3f, 0xcf, 0x1e, 0xb1, 0x7d, 0x10, 0xf4, 0x75, 0x43, 0x1f, 0x04, 0x39, 0x2f, 0x8c, 0x97, 0xc8, 0x48, 0xf7, 0xa6, 0xdd, 0x38, 0x0c, 0x65, 0xe8, 0x4f, 0x29, 0x51, 0xbc, 0xc3, 0xb7, 0x37, 0x75, 0x95, 0xdc, 0xd1, 0x0d, 0x9b, 0xa1, 0x01, 0x7f, 0x07, 0x91, 0x93, 0x99, 0x25, 0x38, 0x99, 0xf6, 0xad, 0xe2, 0xea, 0x2b, 0x97, 0xbc, 0x6a, 0x74, 0xa7, 0xe4, 0xbd, 0xb5, 0x1b, 0x1e, 0x86, 0x38, 0xfe, 0x0e, 0x43, 0x13, 0x6b, 0x9f, 0x98, 0x08, 0x67, 0x87, 0x4b, 0xd0, 0x9f, 0x56, 0x8d, 0x34, 0x43, 0x7c, 0x6a, 0xb3, 0x13, 0xbf, 0xbb, 0xe8, 0xeb, 0xac, 0x8b, 0xaf, 0xe2, 0xbe, 0x96, 0x78, 0xdd, 0xf5, 0xc1, 0x00, 0x7e, 0xef, 0xa3, 0x3d, 0x74, 0x1c, 0xe9, 0xf8, 0xfe, 0xef, 0xf6, 0xf9, 0x54, 0xa0, 0x11, 0x1d, 0x72, 0xe1, 0xcc, 0x4d, 0xac, 0xa6, 0x5d, 0x14, 0x69, 0x4b, 0x62, 0x27, 0xf8, 0xf1, 0x7f, 0x93, 0xe2, 0x83, 0x7e, 0xb9, 0x5f, 0x07, 0x5d, 0xb7, 0xf5, 0xcb, 0x40, 0x67, 0x01, 0x52, 0x0f, 0xa7, 0xff, 0x2c, 0xbe, 0x6f, 0x12, 0x5c, 0x80, 0x8b, 0xb9, 0x80, 0xdd, 0x44, 0xd3, 0xda, 0xb0, 0x07, 0xdc, 0x02, 0xb5, 0x4a, 0x72, 0x32, 0x95, 0x2b, 0x67, 0xbc, 0xe7, 0xe7, 0xe4, 0x36, 0x7c, 0xd3, 0x61, 0xa4, 0x6e, 0x31, 0x52, 0x17, 0x5e, 0x23, 0x84, 0x7c, 0x59, 0x40, 0xef, 0xc3, 0x0b, 0x5d, 0xd6, 0x7b, 0xa5, 0x51, 0xe2, 0xaf, 0x8e, 0x6b, 0x6d, 0x7d, 0xa6, 0xbd, 0xfd, 0xe9, 0xaa, 0xfb, 0x0a, 0xf7, 0xd1, 0xfd, 0x61, 0xf6, 0x78, 0x3a, 0x8c, 0x6d, 0x19, 0x82, 0xed, 0xbd, 0xe4, 0xf1, 0xf4, 0x09, 0x2e, 0xc7, 0x76, 0xdf, 0x6c, 0x9f, 0x17, 0x18, 0xe5, 0xf9, 0xcb, 0x3d, 0x5a, 0xa9, 0xdc, 0xc5, 0xfb, 0xa6, 0x84, 0xc8, 0x17, 0xa3, 0x70, 0x3e, 0x91, 0x39, 0xf5, 0xdb, 0x4e, 0xb1, 0x87, 0xc8, 0x78, 0x9a, 0x8c, 0xfe, 0x81, 0x2b, 0x50, 0x58, 0xf0, 0x14, 0x06, 0xe7, 0x36, 0x3b, 0xf7, 0xc6, 0xf4, 0xfd, 0xd9, 0xe4, 0x8d, 0x53, 0x5c, 0xee, 0xd7, 0x76, 0xd2, 0x5e, 0xd8, 0x54, 0x88, 0xb1, 0x57, 0xb6, 0x80, 0xf7, 0xca, 0x08, 0x3b, 0x6d, 0xb6, 0xb1, 0x53, 0x66, 0x94, 0xce, 0xd8, 0x67, 0xeb, 0x62, 0x4f, 0xab, 0x3b, 0xc1, 0xfb, 0xf7, 0xbf, 0xfc, 0xc9, 0x59, 0xc9, 0x9d, 0xb2, 0x33, 0xa2, 0xe4, 0xe8, 0xa9, 0xa3, 0xcd, 0x5b, 0xef, 0x95, 0x34, 0xab, 0x6b, 0x35, 0x8e, 0x14, 0x6c, 0xf3, 0x68, 0x3d, 0xf6, 0xb7, 0xdb, 0x65, 0x25, 0x4f, 0xa5, 0x89, 0x81, 0xb4, 0x45, 0x89, 0xba, 0x3a, 0xe8, 0xc4, 0xe6, 0xb1, 0x23, 0x0e, 0x7c, 0x6a, 0x03, 0x28, 0x59, 0x01, 0x33, 0xaf, 0xf4, 0x42, 0x11, 0x1c, 0xdd, 0x10, 0xb8, 0xab, 0xd4, 0x9c, 0xfc, 0xd4, 0x21, 0x5b, 0xfd, 0x52, 0x83, 0x64, 0x9e, 0x59, 0x0a, 0x55, 0x33, 0xcf, 0x22, 0x7b, 0x7f, 0x76, 0xda, 0x67, 0x2d, 0x7f, 0xf0, 0x0a, 0x02, 0xf4, 0x6b, 0xf5, 0x63, 0x2e, 0x1b, 0x30, 0xad, 0x0d, 0x36, 0x92, 0x77, 0xe6, 0x7e, 0xbb, 0x88, 0xf1, 0x6d, 0x00, 0xf6, 0xe1, 0x7f, 0x01, 0xb6, 0xf7, 0x4b, 0x5a, 0x13, 0x9f, 0x91, 0x0d, 0x10, 0x9f, 0x8b, 0xf4, 0x60, 0xb3, 0xb3, 0x99, 0xed, 0xa8, 0x3b, 0xc0, 0xb4, 0x50, 0xa5, 0xbb, 0x00, 0xca, 0x33, 0x47, 0x3b, 0xc0, 0xbc, 0x30, 0x02, 0x83, 0xbe, 0x59, 0x81, 0x08, 0xb6, 0x24, 0xa1, 0x19, 0x34, 0x4f, 0x79, 0xc6, 0xe3, 0xf7, 0x19, 0xb3, 0x42, 0xeb, 0x44, 0xaa, 0xb2, 0x99, 0xa9, 0x49, 0xdb, 0xfc, 0x84, 0xe4, 0x65, 0x54, 0x03, 0x07, 0x52, 0x27, 0x5b, 0x00, 0x25, 0x7c, 0x6c, 0x7d, 0x9c, 0xf3, 0x84, 0x5e, 0x40, 0x7e, 0xef, 0xbf, 0x15, 0xc4, 0xf0, 0x62, 0x1f, 0x10, 0x1a, 0x47, 0xf3, 0x56, 0xca, 0x0b, 0xef, 0x1d, 0x18, 0xcf, 0xce, 0x58, 0x09, 0x21, 0xf2, 0x47, 0x5f, 0xb5, 0x03, 0x4a, 0xc5, 0x29, 0x2f, 0xc7, 0x18, 0xe4, 0xb3, 0xb9, 0x7e, 0xc6, 0x90, 0x18, 0xb8, 0xd1, 0xe8, 0x8f, 0xfe, 0x23, 0x23, 0x1f, 0xf8, 0x60, 0x1f, 0x23, 0x87, 0xcc, 0x46, 0x8a, 0x6a, 0x8c, 0xfe, 0x77, 0xc6, 0x3c, 0x2a, 0xcf, 0x74, 0xd2, 0xd8, 0x0d, 0x69, 0x60, 0x39, 0x7b, 0x2f, 0xd4, 0xf8, 0x60, 0x53, 0xb8, 0x50, 0x6e, 0x28, 0xd0, 0xfd, 0x5e, 0xa9, 0x4d, 0x56, 0xaf, 0xc0, 0x16, 0xf5, 0xce, 0x06, 0xa9, 0x2d, 0x80, 0x73, 0xc7, 0x2f, 0x11, 0xba, 0x8d, 0xb7, 0xde, 0x52, 0x08, 0xe6, 0x74, 0xc8, 0xaf, 0x46, 0x4e, 0xeb, 0x47, 0x70, 0xc4, 0xc6, 0xbf, 0xed, 0xf5, 0xda, 0x2d, 0x66, 0x98, 0x99, 0x2a, 0x4f, 0x48, 0x5d, 0xa5, 0x36, 0x15, 0xaa, 0x91, 0x79, 0x6a, 0x24, 0x0d, 0x1b, 0x8d, 0xd0, 0xbf, 0xc2, 0x74, 0xad, 0x5b, 0xb1, 0x7c, 0xcf, 0x62, 0x1e, 0x83, 0xf8, 0x3c, 0xc5, 0xbb, 0x4f, 0x2b, 0xd3, 0x76, 0xfc, 0x4d, 0xa7, 0x2d, 0xf8, 0xfb, 0x6d, 0x6c, 0xf5, 0x67, 0xfc, 0x19, 0xa9, 0xfd, 0xce, 0xb8, 0xb4, 0x14, 0xe9, 0x42, 0xfb, 0x7d, 0xcd, 0x1e, 0xfb, 0x6b, 0xf7, 0x3b, 0x17, 0xdd, 0xd7, 0xbc, 0xef, 0xc1, 0x94, 0xf9, 0xce, 0x3e, 0x15, 0xa4, 0xf6, 0x7b, 0xbf, 0xd9, 0x50, 0x58, 0x65, 0x3f, 0xf2, 0x80, 0xed, 0x7e, 0x1c, 0x67, 0x4f, 0xa7, 0xcc, 0xe4, 0xa1, 0x54, 0x6a, 0xaf, 0xf1, 0x4a, 0xed, 0xb5, 0x96, 0xff, 0x55, 0xef, 0xaf, 0xc7, 0xd2, 0x5b, 0x14, 0x2a, 0x9d, 0x3d, 0x3d, 0x57, 0xa9, 0xe3, 0x75, 0xd7, 0x14, 0x75, 0x43, 0xa1, 0x3f, 0x0c, 0xa7, 0x09, 0x2d, 0x57, 0x6a, 0x4f, 0x7b, 0x70, 0x35, 0xef, 0xd0, 0x5c, 0x1e, 0x8b, 0x85, 0x74, 0xde, 0xaa, 0xae, 0x89, 0xf5, 0x1e, 0xed, 0x07, 0x62, 0x2c, 0x13, 0xc6, 0x5a, 0xe5, 0xac, 0x43, 0xc9, 0xcb, 0x8c, 0x32, 0x9c, 0x95, 0xe4, 0x38, 0x9a, 0x3f, 0xf7, 0x41, 0xad, 0xf9, 0xde, 0x85, 0x0d, 0x85, 0x47, 0x1e, 0xc0, 0xb1, 0x32, 0xe4, 0x8f, 0x60, 0xfd, 0x77, 0xf7, 0x49, 0x7b, 0xe3, 0x2b, 0x6d, 0xb6, 0x08, 0xfc, 0x65, 0xda, 0x8c, 0xbf, 0xc9, 0xd4, 0xba, 0xde, 0x82, 0xd7, 0x36, 0xa4, 0xcd, 0x45, 0x61, 0x70, 0x6b, 0x72, 0xaf, 0x94, 0x9f, 0xc3, 0x6d, 0x34, 0x26, 0xcc, 0xb7, 0x91, 0x4d, 0x90, 0x45, 0x9c, 0x0f, 0xfa, 0xfb, 0xf4, 0xdd, 0xaf, 0x8f, 0xd5, 0x7d, 0x02, 0xff, 0xb6, 0x65, 0xd2, 0x71, 0xdb, 0x20, 0xc4, 0xfb, 0xf7, 0xef, 0xe7, 0x7c, 0xad, 0x1c, 0x36, 0x21, 0xc2, 0x5e, 0x1e, 0x53, 0xea, 0x6e, 0x8b, 0x80, 0x4d, 0xac, 0xa1, 0x59, 0x0a, 0xcb, 0x3d, 0xf7, 0x92, 0x38, 0x65, 0x98, 0x11, 0x10, 0xd4, 0xc5, 0x7c, 0x16, 0xe9, 0xe9, 0xb3, 0x69, 0x98, 0xe1, 0x4c, 0x48, 0x99, 0x72, 0xc6, 0xfb, 0x9d, 0x8b, 0x33, 0x08, 0x66, 0x14, 0x39, 0xa3, 0xac, 0x3f, 0xdf, 0x4a, 0xe7, 0x6e, 0x18, 0x5f, 0x36, 0xd0, 0xf5, 0xae, 0x50, 0xaf, 0x4c, 0x51, 0xa2, 0x7b, 0x4d, 0xa3, 0xfd, 0x69, 0x5b, 0x5f, 0x21, 0x21, 0x14, 0x9a, 0xdf, 0xc4, 0x3a, 0x8f, 0xf2, 0x88, 0x7a, 0xc6, 0x47, 0xa7, 0xdd, 0x31, 0x83, 0x9e, 0x4c, 0x78, 0xa0, 0x67, 0xc5, 0xd8, 0xfd, 0x34, 0xa3, 0xd3, 0x60, 0xde, 0x63, 0xcc, 0x7a, 0x95, 0x66, 0x3d, 0x23, 0xe5, 0x3c, 0xcb, 0x67, 0xe6, 0xaa, 0x40, 0x8e, 0x16, 0x33, 0x7f, 0xb7, 0xf0, 0x38, 0xb9, 0x80, 0x77, 0xe8, 0x4b, 0x18, 0xe3, 0x13, 0xe7, 0xfd, 0x9b, 0xbb, 0xc4, 0xcc, 0xa6, 0x3a, 0xdc, 0x0b, 0xf8, 0x54, 0x22, 0xdb, 0x1e, 0xf3, 0x4a, 0xec, 0x9b, 0xc2, 0x34, 0x9d, 0xe9, 0x3b, 0x34, 0x1b, 0x8f, 0x35, 0x30, 0x37, 0xf3, 0x79, 0xdd, 0x6c, 0xde, 0x45, 0xc4, 0x54, 0xcb, 0x82, 0x1e, 0xd5, 0xa0, 0xfc, 0x60, 0xae, 0x16, 0xba, 0x88, 0xe2, 0xc9, 0xcd, 0x6e, 0x8f, 0xaa, 0x81, 0xb9, 0x8c, 0xcb, 0xfd, 0x02, 0x4b, 0x7c, 0x26, 0x7c, 0xcf, 0x07, 0x4d, 0x42, 0xe6, 0xf3, 0x18, 0x67, 0x36, 0x66, 0xa0, 0x76, 0x29, 0x9c, 0x10, 0xd8, 0xd9, 0xac, 0x07, 0xf7, 0x55, 0xbc, 0x3f, 0xad, 0xd8, 0x09, 0xb3, 0x53, 0xba, 0x87, 0x77, 0x73, 0x79, 0x7f, 0x19, 0x9e, 0xe3, 0xab, 0x36, 0x6c, 0xad, 0xa7, 0x72, 0x27, 0xff, 0xfe, 0xe4, 0xe8, 0x6f, 0x9f, 0x74, 0x46, 0x3d, 0xf3, 0x81, 0xbc, 0xe2, 0x1c, 0x6b, 0xde, 0x2a, 0x3c, 0x44, 0x93, 0x67, 0xec, 0xc4, 0xfd, 0x69, 0x4d, 0x89, 0xd5, 0x7d, 0x08, 0x4f, 0xf5, 0x0a, 0x3f, 0xbc, 0x4b, 0x49, 0x8a, 0x24, 0xc4, 0x96, 0x54, 0x5c, 0xe8, 0x68, 0xb0, 0x0f, 0x96, 0x67, 0xc9, 0xeb, 0x39, 0x95, 0x29, 0x40, 0xd2, 0xab, 0x83, 0x70, 0x79, 0xd3, 0xee, 0x9b, 0x09, 0x89, 0xa2, 0x1f, 0x7f, 0xbf, 0x0c, 0x1b, 0x70, 0x95, 0xde, 0x8c, 0xf3, 0x7b, 0x80, 0xfb, 0x79, 0x87, 0xd0, 0x2f, 0x98, 0x1f, 0x95, 0x5c, 0x1a, 0x14, 0x46, 0xa7, 0x95, 0xa3, 0x82, 0x3d, 0x23, 0xed, 0x34, 0x4a, 0xdc, 0x46, 0x38, 0x1a, 0xf9, 0xcf, 0x4f, 0x5e, 0x14, 0xe5, 0xf4, 0x70, 0x39, 0xb9, 0xdf, 0xcd, 0x9e, 0x05, 0x50, 0xae, 0xc9, 0x9e, 0x28, 0x96, 0x75, 0xd9, 0x67, 0x94, 0x35, 0xfa, 0x47, 0xca, 0xea, 0x64, 0xcd, 0x8a, 0x87, 0x68, 0xff, 0x90, 0xfd, 0x7b, 0xce, 0x16, 0xbd, 0x8d, 0xe3, 0x69, 0x94, 0x7a, 0xfc, 0x5e, 0x42, 0xcc, 0xae, 0x9f, 0x56, 0x8e, 0xfb, 0x90, 0x6b, 0xa9, 0x4f, 0x81, 0x69, 0x13, 0xc9, 0x53, 0x52, 0x5b, 0xda, 0xae, 0x44, 0xfd, 0x6e, 0xb8, 0x30, 0xd2, 0x01, 0x17, 0xbb, 0xc1, 0xb4, 0x26, 0x37, 0x42, 0xab, 0x3f, 0xa3, 0x44, 0x73, 0x45, 0x8e, 0xb9, 0x12, 0x21, 0x07, 0x9f, 0xc5, 0x27, 0xe7, 0x1d, 0xe9, 0x28, 0xef, 0xbb, 0x62, 0x3f, 0x99, 0x9c, 0xd9, 0x98, 0x38, 0x1a, 0x1f, 0xa2, 0xd1, 0x68, 0xca, 0xc5, 0xcb, 0x96, 0x4f, 0x83, 0x82, 0x2b, 0x48, 0xe1, 0xa2, 0x69, 0x5b, 0xab, 0x7a, 0xa7, 0x2a, 0x45, 0x53, 0x26, 0xa4, 0x3a, 0x6a, 0xe2, 0xf9, 0x82, 0x43, 0xe4, 0xa1, 0x9b, 0x38, 0xd8, 0x93, 0x9a, 0x17, 0x45, 0x84, 0x82, 0x43, 0xad, 0xfd, 0xb7, 0xaa, 0x05, 0x87, 0xda, 0xb7, 0x12, 0x85, 0xf2, 0x20, 0x97, 0x40, 0xb6, 0x13, 0x92, 0x5c, 0x35, 0x9f, 0x3c, 0x6d, 0xc1, 0x10, 0xeb, 0xc3, 0x99, 0x94, 0xd5, 0xf2, 0x3b, 0xb4, 0xeb, 0x23, 0x99, 0xd3, 0x74, 0x6d, 0x78, 0xb1, 0xa0, 0x5a, 0xb0, 0x9e, 0x7f, 0xd6, 0x87, 0x05, 0xad, 0xe0, 0x4f, 0xc1, 0x76, 0x65, 0x91, 0xab, 0xc3, 0xf0, 0x62, 0x91, 0xcc, 0xb3, 0x2b, 0x1f, 0xce, 0xb3, 0x0a, 0xaf, 0xe6, 0x1a, 0x3c, 0x63, 0x78, 0xb1, 0x98, 0xe5, 0x5c, 0xe4, 0x9b, 0x9f, 0xe7, 0xc7, 0xe2, 0x05, 0xe7, 0xa2, 0xaf, 0xc5, 0xe5, 0xb8, 0xb3, 0xfe, 0x4b, 0xec, 0xcb, 0xe2, 0x4b, 0x39, 0x5f, 0x16, 0xbc, 0xb7, 0x31, 0xfa, 0x7f, 0x7a, 0x9a, 0xb7, 0xba, 0x56, 0x17, 0x1c, 0xd8, 0x2d, 0xec, 0xc3, 0x3d, 0x72, 0x73, 0x6b, 0xff, 0x3c, 0x55, 0x6e, 0x5e, 0x93, 0x62, 0x1d, 0x91, 0xb5, 0xac, 0x23, 0xb2, 0x9e, 0x67, 0x48, 0xa7, 0xcf, 0x23, 0x37, 0x7d, 0x8e, 0x86, 0x0b, 0xf6, 0xdb, 0x89, 0xdd, 0xf3, 0x3b, 0xa7, 0x69, 0xb8, 0xec, 0x90, 0x9b, 0xf0, 0xdb, 0x8c, 0xdf, 0x36, 0xfc, 0xb6, 0xe3, 0x57, 0x68, 0xb8, 0x58, 0x04, 0x0d, 0x92, 0x3b, 0x3c, 0xd8, 0xea, 0xc8, 0x3b, 0x3d, 0xec, 0xf5, 0x4a, 0x2b, 0xaa, 0xbc, 0x52, 0xca, 0x69, 0x1e, 0x20, 0x8a, 0xb9, 0x93, 0xe4, 0x7a, 0x81, 0xc2, 0x4f, 0x32, 0x3d, 0x72, 0x34, 0x89, 0x1e, 0xc0, 0xdf, 0x06, 0x5f, 0x3d, 0x52, 0x0b, 0x15, 0xc2, 0xf8, 0x30, 0xec, 0xf4, 0x81, 0x7a, 0x74, 0xc3, 0xeb, 0xfd, 0x98, 0x46, 0xf8, 0xe8, 0x8f, 0x40, 0x7d, 0xfd, 0x7e, 0xba, 0xcb, 0x7e, 0xa7, 0x87, 0xfe, 0xea, 0x47, 0x90, 0xc0, 0x90, 0x86, 0xff, 0xd3, 0x8f, 0x29, 0x34, 0x44, 0xfb, 0x7b, 0x03, 0x47, 0x1f, 0x78, 0x7d, 0x33, 0x85, 0x78, 0x7d, 0x90, 0x78, 0x72, 0xc3, 0xdf, 0xf7, 0x7f, 0xbb, 0x5a, 0xc9, 0x48, 0xcb, 0x84, 0xd5, 0xa8, 0x61, 0xe1, 0x86, 0x3c, 0x38, 0xb6, 0x12, 0x21, 0xb8, 0x8a, 0x3d, 0x01, 0xaf, 0x74, 0x8f, 0xd8, 0x15, 0x40, 0x9e, 0x63, 0x05, 0x7e, 0x79, 0xef, 0x85, 0x67, 0x49, 0x95, 0xa0, 0x8b, 0x7d, 0x33, 0xc6, 0x36, 0x33, 0x1f, 0x36, 0xf7, 0xf3, 0x69, 0x4a, 0xe2, 0xf9, 0x42, 0x6f, 0x7a, 0x25, 0x8d, 0x9c, 0x13, 0x15, 0x1e, 0x40, 0x5e, 0x26, 0xdc, 0xbe, 0x15, 0x65, 0xd0, 0x7f, 0x97, 0xe3, 0x58, 0x1a, 0xaf, 0xe6, 0x67, 0x3d, 0xeb, 0x2f, 0xa7, 0x2b, 0x1c, 0x1e, 0xb9, 0xbf, 0x08, 0x5a, 0xa5, 0x2f, 0x47, 0xe4, 0xfe, 0x04, 0xa4, 0x4a, 0x5a, 0xf1, 0x3d, 0xb6, 0x94, 0x2d, 0x66, 0x9e, 0xca, 0x9a, 0xdc, 0x4e, 0xf4, 0xd0, 0x40, 0xf5, 0x37, 0x53, 0xaa, 0xa9, 0x83, 0xc4, 0x97, 0x13, 0xce, 0x6c, 0x72, 0xf4, 0x37, 0x28, 0xb9, 0x13, 0xe5, 0x92, 0x54, 0x63, 0xbc, 0x97, 0x22, 0x2f, 0x19, 0x64, 0x39, 0x83, 0x68, 0xbb, 0x87, 0x68, 0x2b, 0xed, 0x77, 0x90, 0x96, 0x96, 0x4f, 0xd6, 0x92, 0xd4, 0x27, 0x84, 0x06, 0x81, 0xfc, 0x31, 0xd2, 0x14, 0xe2, 0x3f, 0x89, 0x1b, 0xc1, 0x7a, 0xba, 0xa2, 0xf8, 0x24, 0xbf, 0x9f, 0x8f, 0xbf, 0x89, 0x73, 0xe3, 0x05, 0xc5, 0x43, 0x54, 0x22, 0x2d, 0xbb, 0xd4, 0x6b, 0xe7, 0x90, 0x04, 0x42, 0x06, 0xcb, 0x9e, 0x7b, 0xc2, 0x3e, 0x33, 0xe8, 0x1f, 0xb9, 0xc2, 0x64, 0xfd, 0x41, 0x7c, 0xd4, 0x8a, 0x12, 0x5a, 0xd3, 0x40, 0x57, 0xd4, 0xd7, 0xc7, 0x04, 0xbe, 0xd5, 0xf7, 0x65, 0x17, 0xae, 0x5f, 0xd4, 0x22, 0xbf, 0x29, 0xce, 0xb6, 0x08, 0x69, 0xb4, 0x7d, 0x69, 0x13, 0xb7, 0x88, 0xd3, 0xdb, 0x09, 0x26, 0x8d, 0x6b, 0xcd, 0xfb, 0x6a, 0x76, 0xe2, 0x7a, 0xbc, 0x4b, 0x29, 0x75, 0x3e, 0x33, 0x7a, 0x57, 0xb4, 0x41, 0xea, 0xf8, 0x54, 0xed, 0x8f, 0x6f, 0x47, 0x5a, 0x17, 0xe3, 0x3a, 0xd1, 0x2a, 0x62, 0xca, 0xdf, 0xcf, 0xc4, 0xd2, 0xbf, 0xa4, 0x29, 0x4a, 0x1d, 0xfb, 0x34, 0x30, 0xf9, 0x24, 0x51, 0x1a, 0xc6, 0x9d, 0x20, 0x4f, 0x01, 0xdf, 0x9a, 0xf2, 0x28, 0xa5, 0xc9, 0x7f, 0xff, 0x4b, 0x96, 0x5a, 0xaa, 0x78, 0xb5, 0x2c, 0xc5, 0xdf, 0x58, 0xca, 0x89, 0x23, 0xa5, 0x5c, 0xd9, 0x38, 0xbf, 0x4e, 0x2a, 0x67, 0x8a, 0x1b, 0xd3, 0x1c, 0x1c, 0x6e, 0x75, 0xd6, 0x39, 0x77, 0x4a, 0xc5, 0x18, 0x5e, 0xcc, 0xef, 0xc0, 0x85, 0x77, 0x12, 0x3f, 0x82, 0x20, 0xfe, 0x9f, 0x9c, 0xbf, 0x04, 0xbc, 0x18, 0xf6, 0x5c, 0xda, 0x2a, 0x24, 0x95, 0x06, 0x7b, 0xfb, 0x56, 0x4a, 0x25, 0x3a, 0x54, 0x7f, 0x16, 0x8a, 0xd9, 0xf3, 0xa5, 0x35, 0x9e, 0x01, 0x45, 0xac, 0xd7, 0x39, 0x29, 0xff, 0x2c, 0x4a, 0xb9, 0x83, 0x75, 0x67, 0xa5, 0xd2, 0xf9, 0x8b, 0x31, 0x2e, 0xa6, 0x9d, 0xeb, 0x85, 0x35, 0xc9, 0xd1, 0x7f, 0x6d, 0xe7, 0xdd, 0x29, 0xaf, 0x54, 0x6a, 0xe8, 0x39, 0xf5, 0x7f, 0x51, 0xab, 0xbb, 0xcf, 0x42, 0xc5, 0xbb, 0xb1, 0x26, 0xe4, 0x94, 0x0e, 0xe3, 0xd5, 0xf8, 0x14, 0xa6, 0x5e, 0xd6, 0x57, 0x8a, 0xc0, 0x54, 0x17, 0x5e, 0x4c, 0x6b, 0x49, 0xef, 0x78, 0x39, 0xe6, 0xa7, 0x79, 0xba, 0x61, 0x25, 0x69, 0x27, 0xe2, 0x0c, 0xcb, 0x60, 0x0f, 0xf6, 0x54, 0x74, 0xc3, 0x7a, 0x8c, 0xdf, 0xef, 0xaa, 0x82, 0xe5, 0xee, 0x2a, 0x68, 0xc7, 0xb6, 0xb8, 0x0f, 0x67, 0x40, 0x5f, 0xbf, 0x7c, 0xcb, 0xa7, 0xe0, 0x21, 0xe4, 0x70, 0x46, 0xd0, 0xa9, 0x72, 0xb8, 0xa5, 0xff, 0x07, 0xe5, 0x27, 0xf9, 0x66, 0x15, 0xaa, 0x7c, 0xab, 0xe4, 0x16, 0x68, 0xf6, 0x35, 0xa2, 0xa4, 0x98, 0x60, 0x84, 0x71, 0x15, 0xe7, 0x6e, 0x0c, 0x7b, 0x38, 0x8e, 0xb2, 0x68, 0x93, 0x6f, 0x09, 0xf8, 0x91, 0x36, 0x76, 0x08, 0x94, 0x11, 0xa9, 0x3a, 0x8f, 0x3a, 0x7a, 0x72, 0xf6, 0xc7, 0x20, 0xcd, 0x25, 0xcd, 0x7c, 0xb6, 0x9f, 0x28, 0x65, 0x4b, 0x07, 0x5f, 0xda, 0x41, 0x14, 0xd7, 0x31, 0x4b, 0x49, 0x60, 0xcc, 0x36, 0xa2, 0xb8, 0x58, 0xc7, 0xb6, 0x11, 0x81, 0xe7, 0x9a, 0x57, 0x1e, 0x6f, 0x9d, 0x73, 0x0d, 0x96, 0x67, 0x7e, 0x5e, 0x79, 0x3e, 0xa7, 0x24, 0x94, 0xab, 0xd0, 0x4a, 0xc7, 0xd1, 0xbe, 0xc3, 0xc0, 0x3d, 0x3a, 0x4e, 0x78, 0x9b, 0x93, 0xdb, 0xea, 0x27, 0x26, 0x3b, 0xb1, 0xc5, 0xd6, 0xb2, 0xdd, 0xa2, 0x94, 0x6e, 0xbf, 0xb5, 0x0f, 0xc7, 0xbb, 0x15, 0x2c, 0x7f, 0x66, 0x68, 0x92, 0x93, 0x5e, 0xac, 0x40, 0x29, 0x65, 0xfd, 0xde, 0x21, 0x45, 0xdc, 0xbb, 0xc1, 0x2e, 0xac, 0x04, 0x27, 0x7f, 0xe0, 0x93, 0x09, 0xdb, 0xc4, 0xc7, 0x28, 0x27, 0xbe, 0x99, 0xe1, 0x0c, 0xe0, 0x0c, 0x08, 0xb5, 0xf1, 0xae, 0xf5, 0x70, 0xf4, 0x79, 0x1c, 0x2b, 0x95, 0xf0, 0x55, 0xad, 0x2a, 0x2f, 0x25, 0xbb, 0x48, 0xe9, 0xf3, 0xde, 0x13, 0xbb, 0x19, 0x7d, 0x7d, 0xc2, 0xeb, 0x9f, 0xa1, 0x69, 0xeb, 0xa8, 0x10, 0xbe, 0xac, 0x9d, 0xdc, 0x56, 0x52, 0xda, 0x1a, 0xed, 0x84, 0x22, 0xfc, 0x16, 0x6b, 0x65, 0x2d, 0xad, 0x2d, 0xab, 0x41, 0xbe, 0x7b, 0x35, 0x98, 0xee, 0x5e, 0x6d, 0x60, 0x64, 0x15, 0xf1, 0x6f, 0xf1, 0xed, 0xb4, 0x47, 0x64, 0xc5, 0x5f, 0x33, 0xd8, 0xd8, 0x42, 0x45, 0x4a, 0x95, 0x28, 0x1d, 0xd3, 0xb0, 0x74, 0x4d, 0x8c, 0xa5, 0x6b, 0x26, 0x1f, 0x70, 0x42, 0x87, 0x05, 0x9e, 0xe1, 0x93, 0x25, 0x37, 0x52, 0x1f, 0xe2, 0x6d, 0x3d, 0x60, 0x1e, 0x3b, 0x03, 0x56, 0x83, 0xe2, 0xa3, 0xb4, 0x72, 0x87, 0xca, 0xc8, 0x75, 0x85, 0x6b, 0xcc, 0xb8, 0x96, 0x98, 0xb9, 0x56, 0x1e, 0xf6, 0x91, 0x81, 0xdc, 0x97, 0x4f, 0x52, 0xd4, 0xa1, 0xf7, 0x8d, 0x93, 0x03, 0x94, 0x8f, 0x9a, 0xb7, 0x2e, 0x16, 0xa7, 0x8b, 0x9c, 0x96, 0xf0, 0x4f, 0xf1, 0x7a, 0x2b, 0xa5, 0x99, 0x0e, 0xda, 0xd4, 0xef, 0x4e, 0xae, 0xa8, 0xe0, 0x93, 0xcb, 0xf0, 0x77, 0xf5, 0x7e, 0x7e, 0x66, 0xee, 0xd7, 0xf1, 0x8a, 0xa8, 0x7a, 0x36, 0xe4, 0x76, 0xc2, 0x1a, 0xb0, 0xb3, 0x9e, 0xb5, 0x5d, 0x13, 0x75, 0xa3, 0x7d, 0xda, 0xa2, 0xd8, 0x18, 0xae, 0xe4, 0x3f, 0xb8, 0xa6, 0xa4, 0x16, 0x2c, 0xa9, 0x6d, 0x5a, 0x49, 0xe9, 0x94, 0xbc, 0x80, 0x4b, 0x6a, 0xe2, 0x3a, 0x12, 0x7e, 0x37, 0x95, 0xd4, 0x64, 0x94, 0xd4, 0xfc, 0xb9, 0x25, 0xc5, 0x56, 0xa5, 0x54, 0xff, 0x84, 0xb2, 0x3a, 0x8c, 0xb2, 0x3a, 0x8c, 0xb2, 0x3a, 0x7a, 0x24, 0xa1, 0xe1, 0xfc, 0x8d, 0xad, 0x6c, 0xe9, 0xd9, 0x8d, 0xa3, 0xd7, 0x07, 0x21, 0x9c, 0x8b, 0x61, 0x9c, 0x73, 0xf1, 0x8a, 0x0c, 0x38, 0x0d, 0xfd, 0x1c, 0xb0, 0x7c, 0x49, 0x9c, 0xdf, 0xac, 0x75, 0x1f, 0x23, 0x2f, 0x44, 0x36, 0xc6, 0xf6, 0x13, 0xe8, 0xe9, 0x8c, 0x46, 0x7c, 0xf5, 0x72, 0x56, 0x13, 0x0a, 0x8e, 0x11, 0xc2, 0xeb, 0xd0, 0x07, 0x85, 0x7e, 0x0f, 0x69, 0x93, 0xc7, 0xf0, 0x2a, 0xe0, 0xb2, 0xd4, 0x7e, 0x69, 0x1d, 0x54, 0xcf, 0x58, 0x2f, 0x1f, 0xde, 0x68, 0x58, 0xa8, 0x58, 0xfd, 0xdd, 0xe0, 0x7d, 0x71, 0x2c, 0xed, 0x75, 0x16, 0xc6, 0x23, 0xd1, 0xc8, 0xd0, 0xa0, 0x0f, 0x86, 0xef, 0xf7, 0x49, 0xd9, 0xd6, 0xb1, 0xb1, 0xec, 0xd2, 0x8d, 0xfd, 0xd7, 0xa0, 0x7a, 0xa0, 0xe1, 0xfe, 0x13, 0xf7, 0xff, 0xfd, 0xfd, 0x47, 0xfa, 0x7b, 0x4c, 0x87, 0xfa, 0x8d, 0xf7, 0x6d, 0xf8, 0x7e, 0x15, 0xbf, 0x2f, 0xe7, 0xde, 0x1f, 0xb8, 0xf1, 0xfb, 0x2e, 0x68, 0x18, 0x38, 0x36, 0xf0, 0xd8, 0xc0, 0xc1, 0xfe, 0xc4, 0xa6, 0xb4, 0x95, 0xdf, 0x96, 0x47, 0xee, 0x4f, 0xd9, 0x13, 0x1b, 0xd3, 0x15, 0x7c, 0x67, 0x1a, 0x19, 0x48, 0x97, 0xaf, 0x87, 0x50, 0x25, 0x58, 0xb0, 0x94, 0x95, 0xdc, 0x17, 0x33, 0x94, 0x26, 0x67, 0x83, 0xb3, 0xf0, 0x5e, 0x09, 0xe7, 0x91, 0xb7, 0xe9, 0xad, 0xe5, 0x57, 0x9a, 0x73, 0x28, 0x39, 0x0b, 0xc9, 0x52, 0x57, 0xc5, 0x16, 0x6a, 0x23, 0x24, 0xf2, 0x6a, 0x1f, 0xb4, 0xe0, 0xba, 0xe3, 0x34, 0xe8, 0xc9, 0xc3, 0x7d, 0xc1, 0x93, 0x5b, 0x49, 0xd7, 0x0c, 0x69, 0x6d, 0x33, 0x7d, 0x45, 0x2b, 0x85, 0x50, 0xb6, 0x09, 0x22, 0xd7, 0xc0, 0x5a, 0x68, 0xc2, 0x1b, 0x1c, 0xb7, 0x96, 0x74, 0x4f, 0xa0, 0xfe, 0xe8, 0x41, 0x7f, 0xdd, 0xf8, 0x81, 0x10, 0xe1, 0x00, 0xce, 0x1c, 0x8a, 0xfd, 0x85, 0x5a, 0xe8, 0xc7, 0x34, 0xab, 0x6b, 0x2d, 0x4f, 0xd5, 0xfd, 0xc5, 0xa2, 0x42, 0xb2, 0xac, 0x93, 0x09, 0xbb, 0xca, 0x5f, 0x84, 0xb2, 0x27, 0xa0, 0xac, 0x22, 0xa5, 0xe3, 0x7d, 0x10, 0x9e, 0x19, 0x8a, 0xfd, 0xf4, 0x50, 0xb7, 0x2d, 0xec, 0x01, 0xfb, 0xde, 0xc8, 0x4a, 0xff, 0x70, 0x83, 0x16, 0xa8, 0x41, 0xe9, 0x7d, 0xf1, 0xc7, 0x87, 0xe1, 0xa7, 0x87, 0xd6, 0x54, 0x50, 0x38, 0xca, 0x92, 0x92, 0x7b, 0x51, 0xad, 0xd9, 0xb7, 0x08, 0xaa, 0xee, 0x83, 0x86, 0x45, 0x4f, 0xfd, 0x08, 0xaa, 0xf6, 0x6d, 0xe9, 0xb6, 0x1c, 0x6d, 0xd0, 0xcc, 0xd1, 0x08, 0x4a, 0x8e, 0x7a, 0x9f, 0xe9, 0xd5, 0xfb, 0xd3, 0x49, 0x8c, 0x67, 0x09, 0xd5, 0xfd, 0xf4, 0xe7, 0xdd, 0xb6, 0x5a, 0x0f, 0x38, 0xf6, 0x45, 0x57, 0x56, 0x6f, 0x5b, 0xa4, 0x85, 0x30, 0xb5, 0x1a, 0x4e, 0xed, 0xe7, 0x6b, 0xbc, 0x0b, 0x09, 0x89, 0x23, 0x80, 0xf1, 0x64, 0xcf, 0x22, 0xb2, 0x8e, 0x99, 0x96, 0xe2, 0xf7, 0xbb, 0xad, 0xc7, 0xba, 0x21, 0x80, 0x69, 0x46, 0x35, 0x79, 0xad, 0x1e, 0xfb, 0xd9, 0xea, 0xb2, 0xc4, 0x66, 0xe4, 0x79, 0x63, 0x0b, 0x63, 0x10, 0x6c, 0xc3, 0x32, 0x69, 0xd6, 0x96, 0xba, 0x85, 0x75, 0x50, 0x8d, 0xd7, 0x35, 0xd8, 0xca, 0x33, 0x03, 0x38, 0xce, 0x7e, 0x7c, 0x70, 0x8d, 0x07, 0xdb, 0xda, 0x82, 0xbd, 0x58, 0xfd, 0xe2, 0xcb, 0x6b, 0xe6, 0x86, 0x30, 0x1e, 0x79, 0xc8, 0xfd, 0xf1, 0xc1, 0xee, 0x22, 0x7c, 0x5e, 0x43, 0x1e, 0x6a, 0x5f, 0x7c, 0xb9, 0xdb, 0x0c, 0xaa, 0x04, 0x9a, 0x49, 0x56, 0x27, 0x75, 0xe0, 0x33, 0x3d, 0x7c, 0xdf, 0xc3, 0xbd, 0x84, 0xb3, 0x54, 0x60, 0x30, 0x0a, 0xff, 0x47, 0x42, 0xd6, 0x55, 0x1a, 0x9d, 0x84, 0xbb, 0x8a, 0x63, 0x37, 0xdb, 0x6f, 0xbc, 0xbe, 0x39, 0x72, 0xf8, 0x79, 0x36, 0x5a, 0xe3, 0xc8, 0x76, 0x93, 0x76, 0x63, 0xba, 0xcb, 0xd8, 0x26, 0x7f, 0x76, 0xba, 0x28, 0x88, 0x12, 0x78, 0x35, 0x52, 0x9a, 0x7f, 0x3d, 0x12, 0xef, 0xdf, 0x36, 0xf6, 0x93, 0x5f, 0x74, 0x7b, 0xc8, 0xf2, 0x93, 0xe3, 0xb8, 0xd8, 0x4e, 0x7f, 0x76, 0xba, 0x3c, 0x20, 0x90, 0x0f, 0x4c, 0xaf, 0xbf, 0x12, 0xef, 0x1f, 0x1e, 0xfb, 0xf1, 0xe1, 0x6f, 0x8e, 0xc5, 0xfb, 0x63, 0xaa, 0x66, 0x16, 0x7e, 0x7b, 0x72, 0xb6, 0x65, 0x9a, 0x81, 0xf4, 0x46, 0x36, 0x8e, 0xac, 0x2d, 0xec, 0x46, 0x39, 0x48, 0xe0, 0x6c, 0x55, 0x76, 0x40, 0xbb, 0x9e, 0xc1, 0x35, 0xc5, 0xd4, 0x0d, 0x85, 0x45, 0xf8, 0x6f, 0xc6, 0x7f, 0x2b, 0x5b, 0x2b, 0x3a, 0x52, 0xae, 0x7c, 0x6b, 0xac, 0x54, 0x09, 0xd3, 0xda, 0x51, 0x3d, 0x81, 0x9c, 0x98, 0xba, 0xf4, 0x50, 0x7c, 0x73, 0xfc, 0x50, 0x6c, 0xb3, 0x26, 0xf7, 0x49, 0x55, 0x95, 0xe0, 0x54, 0x16, 0xdd, 0xd5, 0xac, 0x77, 0xb2, 0x0f, 0x82, 0x98, 0xf0, 0x41, 0x80, 0xf2, 0xc8, 0x01, 0xb6, 0xc3, 0x5d, 0x00, 0xa5, 0x3e, 0x5b, 0xc5, 0x6c, 0xf3, 0x46, 0x5d, 0xd7, 0xd7, 0x32, 0x32, 0x16, 0xf9, 0x2f, 0xa8, 0xe3, 0x78, 0x47, 0x2b, 0x40, 0xc8, 0xd3, 0xa6, 0xcd, 0x8c, 0xe4, 0x6d, 0xc4, 0x16, 0xe3, 0xd3, 0xc0, 0xed, 0x77, 0xf8, 0x2d, 0xdd, 0x64, 0x8b, 0x37, 0xb1, 0xa6, 0x5c, 0x60, 0xef, 0x5e, 0x76, 0xe1, 0x7f, 0x21, 0x59, 0x80, 0xe1, 0xb5, 0x47, 0x70, 0x65, 0xa6, 0xa5, 0xe1, 0x06, 0x42, 0xd0, 0xba, 0x6b, 0xb1, 0x7e, 0x96, 0x90, 0xb0, 0xef, 0x8a, 0xe8, 0x1f, 0x8c, 0xbf, 0xd2, 0x1a, 0xbf, 0x2b, 0xae, 0x9f, 0x27, 0xab, 0xaf, 0xbb, 0x54, 0xfd, 0x42, 0xa0, 0x08, 0x43, 0xdf, 0x41, 0xfa, 0x24, 0xe3, 0xdd, 0xbb, 0x47, 0xb1, 0xce, 0xad, 0x11, 0x0c, 0x39, 0x4d, 0xf6, 0xb8, 0x1c, 0x83, 0x7c, 0x04, 0x61, 0xfa, 0x7f, 0x38, 0x8b, 0x35, 0xfc, 0x21, 0xc9, 0xe4, 0x70, 0x08, 0xd3, 0xea, 0x8c, 0xed, 0x5f, 0x5d, 0x44, 0xe7, 0x55, 0x2d, 0xcd, 0x2d, 0x1d, 0xb8, 0x6a, 0x60, 0x7b, 0xe3, 0xd7, 0xcc, 0x3a, 0xd0, 0x73, 0xf0, 0xfd, 0x93, 0xb8, 0x46, 0x51, 0x8a, 0x6f, 0x1e, 0x5d, 0x65, 0xa4, 0xf8, 0xf6, 0xf8, 0x2a, 0x23, 0xc5, 0x53, 0x9c, 0xe7, 0x31, 0x23, 0xcf, 0x37, 0x72, 0x79, 0x1e, 0xcf, 0xe5, 0x79, 0xa2, 0xee, 0x9c, 0xfe, 0x82, 0x6f, 0x26, 0xd6, 0xfe, 0x18, 0x7e, 0x4f, 0x56, 0x2e, 0xd6, 0x57, 0x10, 0x4f, 0x65, 0x5a, 0x8a, 0xcf, 0x88, 0x27, 0xb7, 0xf5, 0xe1, 0x92, 0x56, 0x19, 0xd7, 0x7b, 0x70, 0x4d, 0x34, 0xf9, 0x16, 0xe8, 0x3d, 0xbe, 0x02, 0xdf, 0x0c, 0x8c, 0xf9, 0x0e, 0x7e, 0xcf, 0x2a, 0xe6, 0xdf, 0x0d, 0xc6, 0xbf, 0x63, 0x41, 0x29, 0x95, 0xfa, 0x86, 0xdf, 0x1d, 0xfd, 0x43, 0xb4, 0x65, 0x33, 0xd9, 0x01, 0x3a, 0xbb, 0xf4, 0x15, 0x7b, 0xbb, 0xf4, 0x54, 0xd7, 0x61, 0x9c, 0x99, 0x58, 0x0b, 0x8b, 0x99, 0x35, 0x6e, 0x77, 0xe3, 0xbf, 0x65, 0xe9, 0xcf, 0xe3, 0x0f, 0xc4, 0x7f, 0x1e, 0x7b, 0xc0, 0x6f, 0xc7, 0x3a, 0x3e, 0xf4, 0xc7, 0xcb, 0x48, 0x58, 0x7b, 0xb7, 0x5c, 0xd1, 0x5f, 0xa0, 0xfe, 0x2d, 0x22, 0xae, 0x46, 0x02, 0xf9, 0x2b, 0x11, 0x7d, 0x57, 0x65, 0x46, 0x6e, 0xd1, 0xc7, 0x2b, 0x9b, 0xf4, 0x3d, 0x95, 0x75, 0xfa, 0xde, 0xca, 0x46, 0x7d, 0x0c, 0x6b, 0x73, 0x0c, 0xcb, 0x71, 0x10, 0xff, 0xcf, 0xe2, 0xff, 0xe1, 0xca, 0x45, 0xfa, 0xab, 0x95, 0xf5, 0xfa, 0xee, 0x29, 0xee, 0x46, 0x5e, 0x91, 0xe3, 0x6e, 0xb0, 0xe6, 0x53, 0xdc, 0x8d, 0x9c, 0x88, 0xfe, 0x50, 0xbf, 0x92, 0x58, 0x8d, 0xdc, 0x4d, 0x19, 0x9f, 0x34, 0xfa, 0xd2, 0x45, 0x06, 0x77, 0xd3, 0x88, 0x31, 0xaf, 0xf0, 0x78, 0xe9, 0x55, 0xba, 0x74, 0x81, 0xd1, 0xd3, 0xf3, 0xc5, 0x4b, 0xed, 0xcc, 0x4c, 0xf1, 0x3e, 0x5f, 0x51, 0xb1, 0xd4, 0x5f, 0xa4, 0xbc, 0x94, 0xe7, 0x0b, 0xde, 0x2e, 0x3d, 0x23, 0xf8, 0x20, 0x69, 0xa7, 0x52, 0xef, 0xc4, 0x9e, 0x8f, 0x4c, 0x7c, 0x3c, 0x14, 0x3b, 0xd4, 0xd9, 0x43, 0xfe, 0x66, 0x0d, 0x2e, 0xa7, 0x20, 0x39, 0x14, 0xe8, 0x04, 0x39, 0xdc, 0xe2, 0xc7, 0x32, 0x44, 0x2e, 0x0d, 0xea, 0x3e, 0x39, 0x8c, 0x65, 0x20, 0x3f, 0x13, 0x28, 0x6f, 0x91, 0xf6, 0x7a, 0x81, 0x37, 0x0c, 0xa7, 0x7e, 0xd2, 0xe3, 0x6c, 0x48, 0x3e, 0xe2, 0x6f, 0xc1, 0x67, 0x32, 0xc6, 0x37, 0xd7, 0x5d, 0x7a, 0x5c, 0xe7, 0x93, 0x9b, 0x01, 0xe4, 0x66, 0xf0, 0xcd, 0x78, 0xcf, 0xe9, 0x49, 0x11, 0x9b, 0x6c, 0x11, 0x5a, 0xa9, 0x3e, 0x9d, 0x6c, 0x5d, 0x4c, 0xe7, 0xad, 0x63, 0xd3, 0xf3, 0xa3, 0x71, 0x81, 0xfd, 0x28, 0xa5, 0x9b, 0x29, 0x67, 0x7f, 0xcb, 0xf5, 0x39, 0x56, 0x89, 0x1c, 0x51, 0xb2, 0xf8, 0x63, 0x65, 0xa3, 0x1d, 0xd5, 0x96, 0x96, 0xbb, 0x3b, 0xd9, 0xea, 0xdb, 0x1f, 0x3b, 0x94, 0x6a, 0xf1, 0xb7, 0xd0, 0x3b, 0x38, 0x17, 0xb2, 0xe5, 0xd2, 0x3f, 0xbf, 0x16, 0xd7, 0xc7, 0xa4, 0x1a, 0xb4, 0x60, 0x8c, 0xbb, 0x45, 0x0d, 0xfc, 0xc8, 0xcd, 0x31, 0xf2, 0x02, 0x73, 0x82, 0x66, 0xae, 0xc3, 0xe8, 0xc5, 0xf8, 0xb5, 0x65, 0x0f, 0x72, 0x1a, 0x86, 0xe7, 0x0f, 0x8a, 0x01, 0xec, 0xf9, 0xc3, 0x4f, 0xb8, 0x91, 0xfe, 0xa2, 0x21, 0x9c, 0xdd, 0x01, 0x46, 0x09, 0xdd, 0x76, 0x4e, 0xbf, 0x44, 0x38, 0xa1, 0x4a, 0x5d, 0x3e, 0x86, 0xfe, 0x5a, 0x70, 0xd5, 0xf3, 0x18, 0xc9, 0xa2, 0xe8, 0xbb, 0x7d, 0x26, 0xa4, 0x20, 0x17, 0x18, 0xa9, 0xe1, 0xbc, 0x6f, 0x26, 0x5e, 0x7f, 0xc0, 0xd7, 0x67, 0x31, 0xfd, 0x42, 0x41, 0x87, 0x0c, 0xfc, 0x57, 0xa6, 0x2a, 0xbf, 0x7f, 0x0d, 0x65, 0xf3, 0x1c, 0x5d, 0xf9, 0xfd, 0x51, 0xf6, 0xfc, 0x46, 0xa7, 0xc0, 0x21, 0xc3, 0x52, 0x7c, 0x67, 0xbe, 0x67, 0x1f, 0x77, 0x9e, 0x67, 0x9f, 0xcf, 0xa3, 0x96, 0x13, 0xe5, 0x4c, 0x2d, 0x0d, 0x2c, 0x04, 0xb6, 0xae, 0xcb, 0x79, 0xf1, 0xf1, 0xd2, 0x6c, 0xa8, 0x62, 0xad, 0x5e, 0x13, 0x7b, 0x77, 0x79, 0xe1, 0x5a, 0xdf, 0x3f, 0x1e, 0x83, 0x3a, 0x4a, 0xa7, 0x0c, 0x3f, 0x3c, 0xa6, 0x2c, 0x6d, 0xac, 0xc4, 0x7b, 0xfd, 0x3c, 0xfe, 0x5e, 0xd1, 0x2f, 0xf2, 0xee, 0x85, 0xf0, 0xcb, 0xf3, 0xaa, 0xf0, 0xbc, 0x22, 0x1d, 0x8c, 0x53, 0x9d, 0x31, 0xff, 0x8b, 0x17, 0x9b, 0xb7, 0x7a, 0x91, 0x13, 0x60, 0x2e, 0x68, 0xdb, 0x5e, 0xc1, 0x0f, 0x3c, 0x8b, 0x34, 0x04, 0xa5, 0xca, 0xdf, 0x9b, 0x9a, 0xb7, 0x5a, 0xaa, 0x88, 0x37, 0x4e, 0x2d, 0xf7, 0x15, 0x38, 0x1b, 0x72, 0x3d, 0x64, 0xe1, 0x7d, 0xaf, 0xd1, 0x0b, 0xcf, 0xfe, 0x29, 0x9e, 0x71, 0xa8, 0x5c, 0x1b, 0xda, 0x5a, 0xb0, 0x5c, 0xf8, 0x9d, 0xb8, 0x1b, 0x63, 0xe0, 0x77, 0x92, 0x7a, 0x10, 0x6b, 0x88, 0xe5, 0xa6, 0x12, 0x89, 0x5a, 0x24, 0x47, 0x3f, 0xc9, 0x18, 0x58, 0x19, 0xe5, 0x46, 0x89, 0x8a, 0x45, 0x89, 0x2e, 0xf4, 0xfe, 0x91, 0x12, 0x15, 0xff, 0xd7, 0x94, 0x88, 0xac, 0xa6, 0x91, 0x42, 0x9c, 0x16, 0x6f, 0xe1, 0xd5, 0x59, 0x5a, 0x5f, 0x68, 0x05, 0x10, 0x69, 0xe2, 0xd5, 0x07, 0x3e, 0x2b, 0x7b, 0xd1, 0x2e, 0x24, 0x3d, 0x8a, 0xc8, 0x39, 0xfd, 0x34, 0xa6, 0x68, 0x41, 0x4e, 0x89, 0x7b, 0xf5, 0x23, 0x3a, 0x39, 0x70, 0x6b, 0xcb, 0xaf, 0xed, 0x95, 0x3f, 0xa1, 0x74, 0x66, 0x51, 0x3e, 0x1e, 0x81, 0x5e, 0x8d, 0xb4, 0x94, 0xcc, 0x62, 0xe4, 0x7d, 0xd4, 0xce, 0x7b, 0xdb, 0xc5, 0x62, 0x14, 0xa7, 0x9e, 0x24, 0xfd, 0x25, 0x0c, 0xf5, 0x37, 0x6f, 0xd5, 0x4e, 0xb0, 0x37, 0x9a, 0x41, 0xb6, 0x37, 0x97, 0x59, 0x9a, 0x45, 0xe9, 0x46, 0xee, 0xa0, 0xb3, 0x2a, 0xe1, 0x79, 0x42, 0xfe, 0xc6, 0xa4, 0xee, 0xba, 0x59, 0x83, 0xab, 0x2d, 0xae, 0x9b, 0x05, 0x1a, 0x38, 0x73, 0x18, 0x7e, 0xe4, 0x3e, 0x04, 0xae, 0x88, 0x42, 0x5e, 0x52, 0x1c, 0x33, 0x91, 0x73, 0x0b, 0x58, 0xca, 0x04, 0x7f, 0xe2, 0x53, 0xb1, 0x75, 0x85, 0xef, 0x14, 0xc3, 0x3f, 0x0a, 0x86, 0x38, 0x50, 0x16, 0xcc, 0x7a, 0x52, 0x29, 0x27, 0x2f, 0x02, 0x75, 0xef, 0x61, 0x5a, 0x8b, 0xf1, 0x7d, 0x3a, 0x8b, 0x73, 0x11, 0xf2, 0xfa, 0x5f, 0x8d, 0x31, 0x4a, 0xf2, 0x62, 0x70, 0xc7, 0x7e, 0x04, 0xee, 0xac, 0x17, 0x8f, 0x7c, 0x2c, 0x7f, 0x46, 0x87, 0x74, 0x4f, 0xc7, 0xf6, 0x72, 0xa3, 0xfc, 0x8e, 0x9c, 0xa4, 0xe0, 0x71, 0x15, 0x57, 0xf4, 0xd7, 0x63, 0xbc, 0x07, 0x2d, 0xa5, 0xc9, 0xef, 0x9b, 0x49, 0x23, 0xbf, 0x70, 0x32, 0xd2, 0xaa, 0x72, 0xe4, 0x30, 0xe7, 0xee, 0x8a, 0x7f, 0xcb, 0x34, 0x1c, 0x27, 0x5d, 0xc0, 0xb1, 0xfd, 0x42, 0xca, 0x30, 0x63, 0x89, 0xbf, 0xab, 0x4f, 0xed, 0xa5, 0x8d, 0x74, 0x42, 0x59, 0xca, 0x94, 0xa8, 0x4b, 0xcf, 0x45, 0x49, 0xa2, 0xcc, 0x5f, 0xe7, 0x8b, 0xe3, 0x68, 0x8b, 0x61, 0x29, 0xa3, 0x38, 0xab, 0x1b, 0xc9, 0xa2, 0xd6, 0x56, 0xae, 0xc1, 0xe4, 0x65, 0x81, 0x0b, 0x86, 0xed, 0xf1, 0xaa, 0x81, 0x8e, 0x2e, 0xe4, 0xf9, 0x6e, 0xc8, 0x28, 0x31, 0x0f, 0xa1, 0x6f, 0xd7, 0xfb, 0x56, 0x41, 0x7b, 0xb6, 0x8d, 0x16, 0x5d, 0xb4, 0x80, 0x42, 0x9e, 0xed, 0x55, 0x58, 0x8e, 0x5c, 0x1d, 0xf9, 0xed, 0x21, 0x6f, 0xee, 0xc0, 0xed, 0x51, 0x00, 0x71, 0x0c, 0x6f, 0xf2, 0x21, 0x1d, 0x80, 0x66, 0x67, 0x0c, 0x47, 0x68, 0xa9, 0x81, 0xbc, 0xf9, 0x21, 0xc4, 0xa7, 0x70, 0x28, 0x59, 0x2f, 0x8a, 0xf1, 0xa6, 0x12, 0x1b, 0xe9, 0x1c, 0x7c, 0x24, 0x42, 0x6b, 0x6e, 0x6c, 0x11, 0xa1, 0x9c, 0xf2, 0xfa, 0xe5, 0xa9, 0x47, 0x89, 0x9d, 0xf5, 0xad, 0x0d, 0xdf, 0xd2, 0xd3, 0xfd, 0x3e, 0xfd, 0xf3, 0x73, 0x0b, 0x55, 0x48, 0xf0, 0x2c, 0xa1, 0x13, 0xae, 0x00, 0x4a, 0x00, 0x65, 0xd1, 0x06, 0x7c, 0x67, 0x39, 0x59, 0xd5, 0x33, 0x96, 0x74, 0x81, 0xa3, 0x10, 0xe7, 0xf4, 0x13, 0x2b, 0x42, 0x7c, 0x4d, 0xe7, 0x78, 0x63, 0x06, 0xee, 0xe1, 0x6c, 0xe2, 0x5c, 0x38, 0x54, 0x32, 0xb4, 0xd6, 0x36, 0xf1, 0x5d, 0x41, 0x9a, 0x11, 0xbf, 0x1c, 0x26, 0x0c, 0xdd, 0xa3, 0xb5, 0xf1, 0xb5, 0x25, 0xed, 0x5f, 0x51, 0xcc, 0x57, 0xe6, 0xb4, 0x08, 0x99, 0xc1, 0x5e, 0x9a, 0x18, 0x0f, 0xcc, 0x31, 0x93, 0x50, 0x50, 0xf1, 0xdf, 0x8a, 0x61, 0x9b, 0xb5, 0xa6, 0x6a, 0xa4, 0xde, 0x9a, 0x99, 0xe5, 0xdf, 0xf2, 0x96, 0x81, 0x3e, 0x49, 0xeb, 0xe1, 0xeb, 0xb9, 0xda, 0x05, 0xfe, 0x97, 0x8d, 0x67, 0xe6, 0x96, 0x01, 0x6d, 0x29, 0x5f, 0x99, 0xb4, 0x8b, 0xfc, 0x6f, 0xd1, 0xce, 0xfa, 0xbf, 0x24, 0xab, 0xfa, 0x27, 0xd5, 0xfd, 0xfd, 0x78, 0x5f, 0xdd, 0xaf, 0x55, 0x13, 0xbe, 0x75, 0xda, 0x0c, 0xad, 0x28, 0xf9, 0x79, 0xe4, 0x56, 0xfd, 0x43, 0xcd, 0x95, 0x0b, 0xb1, 0x68, 0xa5, 0x18, 0xf2, 0x07, 0xad, 0x88, 0xac, 0x7e, 0x59, 0x62, 0xb5, 0xf4, 0x4e, 0x1e, 0xe8, 0xbf, 0x25, 0x42, 0x38, 0x32, 0x28, 0xe3, 0x04, 0xa7, 0xd0, 0xa8, 0x27, 0x2f, 0x25, 0x1a, 0x08, 0x5b, 0x2c, 0x50, 0x09, 0x73, 0x83, 0xab, 0xa1, 0x7c, 0x57, 0xe2, 0x5b, 0x65, 0xc8, 0xef, 0xe0, 0x0a, 0x14, 0x96, 0xb0, 0x37, 0xad, 0x4e, 0xf5, 0xc9, 0x07, 0xf7, 0x0e, 0x66, 0x2c, 0xd5, 0xd2, 0xf6, 0x04, 0x8e, 0xa4, 0xba, 0x97, 0x56, 0x43, 0x59, 0x5a, 0xb9, 0xa3, 0x0e, 0xca, 0xd8, 0x2e, 0xea, 0x96, 0x74, 0x31, 0xdb, 0x59, 0x2d, 0x20, 0xcb, 0x08, 0x3a, 0x1b, 0xbc, 0xf2, 0xaa, 0x61, 0xfd, 0x40, 0x63, 0xd2, 0xba, 0xe4, 0x7d, 0xb0, 0xd4, 0xa3, 0x74, 0xae, 0x59, 0xf0, 0xca, 0x8c, 0x57, 0x72, 0x00, 0xdf, 0xc7, 0xbc, 0xca, 0x71, 0xf4, 0xce, 0xdd, 0xa5, 0xae, 0xac, 0xaa, 0x86, 0xed, 0x91, 0xb4, 0x47, 0xf0, 0xfb, 0x5e, 0x29, 0xde, 0x10, 0x6d, 0x50, 0x1a, 0x48, 0xea, 0x7d, 0x64, 0x3f, 0xce, 0xf1, 0xc5, 0x50, 0x9d, 0x1d, 0xa9, 0xc8, 0xe3, 0x57, 0x61, 0x4f, 0xd6, 0xf5, 0xe8, 0xe1, 0x7e, 0x1c, 0xaf, 0xe5, 0xfe, 0x82, 0x97, 0x16, 0x7f, 0x4b, 0xf6, 0xcf, 0x5c, 0x58, 0x10, 0x4d, 0x8f, 0x5d, 0xd1, 0xf3, 0xc6, 0x34, 0x71, 0xee, 0xc1, 0x7e, 0xb2, 0x84, 0x4b, 0x2c, 0x62, 0xbf, 0x34, 0xd9, 0x11, 0x73, 0x6f, 0xfd, 0x59, 0xfd, 0xe2, 0x9e, 0x1d, 0x64, 0x31, 0xcf, 0xb4, 0xe1, 0x96, 0x74, 0x07, 0x59, 0xb4, 0x12, 0x0f, 0x9d, 0x6e, 0xc6, 0x19, 0x19, 0x48, 0x9b, 0x23, 0x38, 0xa6, 0xc8, 0xe6, 0xfc, 0xd6, 0x38, 0x38, 0x19, 0xe7, 0x34, 0xc4, 0xe3, 0x34, 0xec, 0xab, 0x03, 0x35, 0xb1, 0x88, 0x66, 0xac, 0x1f, 0x65, 0xec, 0xa1, 0x31, 0x9c, 0x27, 0x31, 0x42, 0xab, 0xcd, 0x8d, 0xdc, 0x50, 0x0e, 0xf5, 0xb4, 0x8e, 0xd3, 0x7c, 0x55, 0xe4, 0x20, 0xec, 0xba, 0x0e, 0xf6, 0x33, 0xfe, 0x29, 0x49, 0x2d, 0x41, 0xd6, 0x5a, 0x21, 0x5b, 0xdd, 0x72, 0xd2, 0x19, 0x21, 0x8f, 0xc2, 0xb8, 0x9e, 0x91, 0xde, 0x48, 0xbb, 0x81, 0x90, 0x7b, 0x10, 0xef, 0xaf, 0xf1, 0x8a, 0xe4, 0x61, 0xdd, 0x27, 0xd8, 0xc9, 0x38, 0x3a, 0x4a, 0xfd, 0xc7, 0x16, 0xa8, 0x4c, 0x80, 0x33, 0xb8, 0x17, 0xbe, 0x1c, 0xed, 0x24, 0xbb, 0x70, 0xb2, 0x08, 0xc7, 0x2b, 0x99, 0xaf, 0xcc, 0x82, 0xe7, 0xeb, 0x05, 0xf2, 0x9f, 0xc4, 0xfa, 0x25, 0x27, 0xe7, 0xa9, 0x50, 0x81, 0xcf, 0xcb, 0x78, 0x7f, 0xa0, 0x9c, 0x7f, 0xe7, 0x72, 0xac, 0xb9, 0xf9, 0xb1, 0xd8, 0x03, 0x84, 0x99, 0xd1, 0x1e, 0x15, 0x7e, 0x7a, 0xf3, 0x0d, 0x9f, 0x4a, 0xa0, 0xd0, 0xee, 0x36, 0x8e, 0xc5, 0xcb, 0xa0, 0x42, 0xe1, 0x5d, 0x2a, 0x9f, 0x1e, 0xcc, 0xa6, 0xfd, 0x82, 0x4f, 0xdf, 0x16, 0xb6, 0xe8, 0x7f, 0xff, 0x4b, 0x65, 0x36, 0xd6, 0xd7, 0x94, 0x43, 0xf5, 0xb0, 0xb9, 0x0c, 0x8f, 0x89, 0x53, 0xd8, 0xdd, 0xa4, 0x6b, 0x66, 0xee, 0xff, 0xee, 0x95, 0x0f, 0xf5, 0x5e, 0xeb, 0x2e, 0xd2, 0x12, 0xdd, 0x96, 0x67, 0x77, 0xbf, 0x0e, 0x06, 0xa1, 0x01, 0x5a, 0xe0, 0x1e, 0x20, 0x6b, 0xd1, 0x1a, 0x28, 0xc1, 0x7b, 0x7f, 0x0e, 0xed, 0xac, 0x4c, 0xb3, 0xe6, 0xae, 0xe7, 0x3a, 0xfb, 0xb5, 0x36, 0x03, 0xe9, 0xac, 0x42, 0x4b, 0xe4, 0xc2, 0xcb, 0xb5, 0x77, 0x73, 0xd7, 0xb2, 0x76, 0x22, 0x77, 0x6d, 0xd6, 0x5e, 0xcb, 0x5d, 0x9b, 0xb4, 0x03, 0xb9, 0x6b, 0x8b, 0xf6, 0x92, 0x71, 0xed, 0xe8, 0x35, 0x13, 0x92, 0x1a, 0x4a, 0x80, 0x65, 0xdc, 0x23, 0x45, 0x59, 0xab, 0xfc, 0x7c, 0x1c, 0xc3, 0x2c, 0x12, 0x3a, 0xfb, 0x31, 0x63, 0xcf, 0x56, 0x8c, 0x77, 0xb4, 0x00, 0x29, 0x3b, 0x8d, 0x2f, 0x80, 0x27, 0x49, 0x63, 0x19, 0x94, 0xc5, 0xbf, 0x2f, 0x65, 0xdb, 0x26, 0x39, 0x82, 0xad, 0x15, 0x81, 0x82, 0x3b, 0x22, 0x40, 0x56, 0xab, 0x26, 0xc6, 0xf3, 0xf7, 0x40, 0x91, 0x8f, 0x7e, 0x1d, 0xb8, 0x36, 0x1b, 0x34, 0x2c, 0x6b, 0x0f, 0x47, 0x5a, 0x81, 0xd9, 0x16, 0xbe, 0x03, 0x5b, 0x98, 0xad, 0x06, 0x8b, 0x01, 0x52, 0xec, 0x6b, 0x80, 0x34, 0x94, 0xa8, 0xcd, 0x91, 0x0f, 0x78, 0x17, 0x53, 0xb3, 0xf1, 0xb8, 0x28, 0x53, 0xfa, 0xd9, 0xcf, 0xb3, 0x55, 0x53, 0xee, 0x24, 0xc9, 0xbe, 0x04, 0x7f, 0x8b, 0xb0, 0xe4, 0x9d, 0xc2, 0xe3, 0x12, 0x74, 0xe0, 0x84, 0x2c, 0xeb, 0x01, 0xe1, 0xc7, 0x27, 0x0c, 0x53, 0xa5, 0xcf, 0xa2, 0x43, 0x50, 0xe9, 0xa9, 0xcc, 0x58, 0x5f, 0x8b, 0x8d, 0x4e, 0x08, 0x88, 0xca, 0x4d, 0x88, 0x99, 0xb9, 0xf8, 0x42, 0x29, 0xa1, 0x4e, 0xd0, 0x49, 0xf5, 0x69, 0x92, 0x78, 0xf0, 0x5f, 0xc7, 0xa7, 0x27, 0xfd, 0xab, 0xc1, 0x81, 0x35, 0xf5, 0x42, 0xc9, 0xae, 0xc1, 0x94, 0x03, 0xef, 0x8a, 0xf8, 0xae, 0x74, 0xd7, 0x20, 0x69, 0x45, 0x90, 0xbe, 0x53, 0xb6, 0xe6, 0x84, 0xa2, 0x49, 0xa3, 0xc9, 0x07, 0x48, 0x01, 0x8a, 0x7c, 0x33, 0xf1, 0xd7, 0x81, 0xdc, 0x41, 0xb6, 0xde, 0x56, 0xa1, 0x71, 0x6b, 0xa0, 0x6e, 0x72, 0xbd, 0x69, 0x6f, 0xeb, 0xce, 0xd5, 0x5c, 0x93, 0xd5, 0x54, 0x93, 0xe8, 0x3f, 0xfa, 0x2a, 0x19, 0xd9, 0x1d, 0xeb, 0x7d, 0xf9, 0x03, 0xe6, 0x1f, 0x96, 0xdd, 0x38, 0x87, 0xe9, 0xa9, 0x1e, 0xdc, 0x72, 0x6d, 0xaa, 0xdc, 0x86, 0x53, 0x69, 0x3d, 0x83, 0x6f, 0xe5, 0xb7, 0xa1, 0xc2, 0xde, 0x8e, 0x40, 0xb4, 0x52, 0xd6, 0xaf, 0x58, 0x96, 0x0b, 0x60, 0x4f, 0x9e, 0xb8, 0xe2, 0xd1, 0x3a, 0x77, 0x6d, 0xee, 0xbd, 0xf2, 0xae, 0xe7, 0x91, 0xe3, 0x58, 0x2f, 0xf8, 0x82, 0xc5, 0x38, 0xca, 0x13, 0x3b, 0xc1, 0x99, 0xee, 0xa0, 0x52, 0xad, 0x75, 0xf1, 0x1e, 0x9b, 0x35, 0x5b, 0xb6, 0xc6, 0x4f, 0x68, 0xb5, 0x4a, 0x3e, 0xc6, 0x27, 0xda, 0xbc, 0x5e, 0x19, 0xbb, 0x47, 0x41, 0x8a, 0xbd, 0x84, 0xb8, 0x6a, 0xfb, 0x54, 0xec, 0xe4, 0x63, 0x5c, 0xb3, 0x82, 0x5c, 0xcd, 0x48, 0x17, 0x83, 0xdf, 0xdb, 0x4b, 0x27, 0xf9, 0xee, 0x28, 0xe6, 0xa3, 0x95, 0x5d, 0x13, 0x87, 0x9f, 0xef, 0xe7, 0xbd, 0x92, 0x6b, 0x5b, 0x80, 0xf6, 0x08, 0xb3, 0x3e, 0xc6, 0x68, 0xb7, 0xd7, 0x9d, 0xe7, 0xa3, 0x4d, 0xf1, 0x82, 0x0b, 0x67, 0xfb, 0xf3, 0x60, 0x49, 0xb5, 0xff, 0xe7, 0xda, 0x97, 0x62, 0xd1, 0x98, 0x93, 0x3b, 0xae, 0xea, 0x52, 0x59, 0x5e, 0x6b, 0x23, 0x8d, 0xf8, 0x43, 0x90, 0x5b, 0xd8, 0x40, 0x61, 0x60, 0x7f, 0xce, 0xd7, 0xe1, 0x1b, 0xb0, 0x87, 0x3a, 0x81, 0x45, 0x5f, 0xea, 0x6c, 0x99, 0xf2, 0xb8, 0x9d, 0xef, 0x7d, 0x5b, 0xf8, 0xca, 0x66, 0x84, 0x8f, 0x00, 0x51, 0x52, 0xc6, 0xed, 0xc3, 0x19, 0xb5, 0x68, 0x42, 0x7f, 0x61, 0x7d, 0xe9, 0xf1, 0xad, 0x1a, 0xf9, 0x15, 0x2a, 0x65, 0xbc, 0x72, 0x45, 0x49, 0x38, 0xd9, 0x67, 0xef, 0xd5, 0x5e, 0x6e, 0xed, 0x47, 0x29, 0xbe, 0xe1, 0x59, 0xfd, 0x84, 0xd8, 0xb1, 0xd0, 0xef, 0x25, 0x7f, 0xea, 0x4d, 0x06, 0x42, 0xc7, 0x42, 0xf2, 0xf4, 0xee, 0x75, 0x53, 0x8f, 0x67, 0x60, 0x39, 0xd6, 0x46, 0xa9, 0x22, 0x24, 0x16, 0x42, 0x9c, 0xfa, 0x2a, 0x61, 0x97, 0x38, 0x70, 0xed, 0x72, 0x2e, 0x62, 0xcd, 0x59, 0x42, 0x3a, 0x15, 0xd8, 0xc1, 0x6e, 0x5e, 0x0f, 0xbf, 0x9a, 0xc6, 0xba, 0xf5, 0x82, 0x73, 0xd1, 0x5a, 0x24, 0x62, 0xb4, 0xf7, 0x18, 0x3f, 0x58, 0x53, 0x09, 0xd6, 0xf8, 0xcf, 0xfa, 0x16, 0x36, 0x98, 0x59, 0x26, 0x79, 0x06, 0xa5, 0xb1, 0x26, 0xe1, 0x45, 0x9b, 0xe5, 0x9e, 0xaf, 0x92, 0xe5, 0x0f, 0xbd, 0xc3, 0x08, 0xfe, 0x0f, 0xe3, 0xd3, 0x62, 0x7e, 0x9a, 0x1f, 0xba, 0x0d, 0x73, 0x11, 0x3e, 0x63, 0xec, 0xf8, 0x3c, 0xee, 0x6a, 0xec, 0xd1, 0x29, 0x7c, 0xb2, 0x19, 0xef, 0x4a, 0xaf, 0x8b, 0xed, 0xa6, 0x9d, 0xcd, 0xeb, 0xda, 0xf6, 0xe8, 0x17, 0xc0, 0xb7, 0x48, 0xfe, 0xb1, 0x73, 0x1e, 0xc5, 0xf0, 0x93, 0x64, 0x60, 0x3b, 0x1e, 0x99, 0xfe, 0xc4, 0xc0, 0xb6, 0xd8, 0xf7, 0xc5, 0xbc, 0x2a, 0xc5, 0x7f, 0x17, 0x26, 0xae, 0xb6, 0x3c, 0xdb, 0x7b, 0x59, 0xc4, 0x45, 0xac, 0xab, 0x93, 0x90, 0x6f, 0x02, 0xea, 0xaf, 0xc6, 0x91, 0xe6, 0x38, 0x76, 0x75, 0x80, 0xe5, 0xaf, 0x0e, 0xc6, 0x37, 0xc5, 0x62, 0xc3, 0xea, 0x94, 0x15, 0xb3, 0x99, 0x91, 0xe4, 0x64, 0x03, 0x65, 0xde, 0x04, 0xe9, 0x06, 0x7f, 0x91, 0xd6, 0xe7, 0x2b, 0x20, 0xfb, 0x62, 0xf2, 0x27, 0x84, 0xe3, 0x20, 0x99, 0x7c, 0xb4, 0x86, 0xb5, 0xdd, 0x13, 0xb1, 0x74, 0x09, 0x7b, 0xbf, 0x94, 0xe8, 0x44, 0xef, 0xfb, 0x58, 0xb2, 0xe4, 0xa3, 0x27, 0x58, 0x0f, 0x84, 0xa4, 0xfa, 0xa1, 0x9f, 0x65, 0x3d, 0x68, 0x8c, 0xb7, 0x68, 0x35, 0xd3, 0x52, 0xb0, 0x7d, 0x81, 0x14, 0x8a, 0x08, 0x99, 0xae, 0x55, 0x1d, 0xaa, 0x47, 0x1e, 0x39, 0x2c, 0x30, 0xe2, 0x8d, 0x31, 0x49, 0x88, 0x3e, 0x7e, 0xc2, 0xe3, 0x23, 0x14, 0x94, 0x10, 0xce, 0x91, 0x3d, 0xc8, 0x31, 0xa4, 0xe4, 0x16, 0xe2, 0x79, 0x83, 0x64, 0x25, 0x04, 0xc5, 0x41, 0x1f, 0x54, 0xc5, 0x0f, 0xf8, 0x4d, 0xf1, 0x31, 0x45, 0x6d, 0x1d, 0x7c, 0xfd, 0x28, 0xf2, 0xa7, 0xa5, 0x7f, 0xfb, 0x8b, 0x5e, 0x9d, 0x5a, 0xfd, 0x71, 0xd5, 0x6f, 0xa2, 0x31, 0x99, 0xf3, 0x07, 0x77, 0x91, 0xce, 0xd4, 0x3c, 0x59, 0x2f, 0xc2, 0xe4, 0x79, 0x0d, 0x65, 0x67, 0xd2, 0xee, 0x72, 0xa3, 0x14, 0x83, 0xd4, 0xcb, 0x32, 0x92, 0x41, 0x29, 0xda, 0xa2, 0xb4, 0xcd, 0xd9, 0x4b, 0x1a, 0x0e, 0x14, 0x42, 0x96, 0x11, 0x23, 0xf1, 0x0c, 0xd9, 0x13, 0xce, 0x56, 0xea, 0x17, 0xe2, 0x9c, 0xbd, 0x7b, 0x2b, 0xcd, 0x42, 0x7d, 0x19, 0x52, 0x69, 0x42, 0x87, 0x73, 0xec, 0x52, 0x33, 0xf7, 0xfa, 0x25, 0x6d, 0x9d, 0xcf, 0x14, 0x50, 0x5b, 0x1e, 0xf4, 0xc7, 0x1f, 0x3d, 0xec, 0x9b, 0xf9, 0xfa, 0x31, 0xe4, 0xbd, 0xc8, 0x97, 0xa1, 0x4d, 0xa9, 0xc7, 0x1e, 0x30, 0x09, 0x7a, 0x46, 0x56, 0x64, 0x42, 0x67, 0x31, 0x13, 0x08, 0x7b, 0xd9, 0x2f, 0x91, 0x51, 0x0b, 0x42, 0xf7, 0x8b, 0x8f, 0xf9, 0x1b, 0x9c, 0x4b, 0x5e, 0x3f, 0x86, 0x35, 0x70, 0x53, 0x0d, 0x78, 0x27, 0x21, 0xde, 0xd2, 0xf0, 0xa4, 0x7a, 0x67, 0x03, 0xf2, 0x04, 0x24, 0x9f, 0xcd, 0xf6, 0x49, 0x8c, 0x22, 0x49, 0xb2, 0x9f, 0x03, 0xcb, 0x6a, 0xcb, 0x98, 0xee, 0x24, 0x7b, 0x94, 0x5c, 0x3a, 0x4a, 0x7d, 0x10, 0x73, 0x8b, 0x1f, 0x08, 0x62, 0x3d, 0xa8, 0xe4, 0x8f, 0x1d, 0xa6, 0x14, 0x15, 0xab, 0x91, 0xa6, 0x24, 0xd2, 0xc4, 0x77, 0x8a, 0xf0, 0xa9, 0xc3, 0xd9, 0x16, 0xbd, 0x6d, 0x10, 0x8c, 0x53, 0x2b, 0x81, 0xe0, 0x49, 0x5e, 0x7d, 0x1c, 0x01, 0x1f, 0x4a, 0x32, 0x3e, 0x28, 0xc1, 0x34, 0x7d, 0xc8, 0x59, 0x3b, 0xd6, 0x42, 0x10, 0xdc, 0xf2, 0xe3, 0x1b, 0xe7, 0x8c, 0xb8, 0x21, 0x0e, 0x2d, 0x2a, 0x72, 0x9d, 0x67, 0xc5, 0xaa, 0x16, 0xf5, 0x97, 0xe2, 0xfb, 0x20, 0x7c, 0x75, 0xbf, 0xc3, 0xa7, 0x25, 0x09, 0x65, 0x8e, 0x40, 0x31, 0x91, 0xdd, 0x6b, 0x65, 0xb2, 0xde, 0x33, 0x9f, 0xc5, 0x31, 0xe9, 0x50, 0xea, 0x08, 0x53, 0x11, 0xd7, 0xd2, 0x0a, 0xb2, 0x66, 0x44, 0x6a, 0x60, 0xf1, 0xcc, 0xfe, 0xc6, 0xfd, 0x64, 0x17, 0xc3, 0x48, 0x15, 0x55, 0xbe, 0x22, 0x96, 0x95, 0xdf, 0x0e, 0x56, 0x81, 0x7d, 0x1b, 0x61, 0x3f, 0x62, 0xcc, 0xca, 0x0e, 0xb0, 0xe9, 0xef, 0x56, 0x74, 0xe9, 0xef, 0x7a, 0x2b, 0x71, 0xdd, 0xe0, 0xf3, 0x04, 0xb6, 0x22, 0x99, 0x21, 0x76, 0x29, 0xee, 0xb7, 0x1a, 0x7e, 0xbe, 0xaa, 0x48, 0x6a, 0xbd, 0xb2, 0xbe, 0x0a, 0x7c, 0x26, 0x45, 0x65, 0xda, 0xba, 0x40, 0x7f, 0xd7, 0x13, 0x86, 0x53, 0xff, 0xfb, 0x0d, 0xa5, 0x9e, 0x3c, 0x5c, 0xe1, 0x1b, 0x22, 0x4e, 0x8a, 0xd1, 0x2f, 0x88, 0xb7, 0xb6, 0xa5, 0x69, 0x65, 0x2f, 0x55, 0x1c, 0x69, 0x87, 0x8f, 0x28, 0x32, 0xbe, 0x41, 0x71, 0x19, 0xbf, 0xa5, 0x12, 0x66, 0x77, 0x95, 0x2a, 0xc8, 0x23, 0xa4, 0x6d, 0xbe, 0x22, 0xc1, 0x17, 0x7f, 0xb3, 0xb9, 0x79, 0xab, 0xd8, 0x6b, 0xc7, 0xd4, 0x30, 0x6e, 0x76, 0x1f, 0xe1, 0x4a, 0x5f, 0x2d, 0x28, 0x75, 0x9e, 0x6b, 0x66, 0x1d, 0x5b, 0xb3, 0x9f, 0x21, 0x1b, 0x9d, 0x80, 0x7d, 0x98, 0x47, 0xf9, 0x0d, 0xe6, 0x9d, 0xcb, 0x98, 0x77, 0x6b, 0xaa, 0x49, 0x5e, 0x2f, 0x34, 0x66, 0x0d, 0xa6, 0x8d, 0x7c, 0xe0, 0xb1, 0xf1, 0x3a, 0x3e, 0x2f, 0x5f, 0x9e, 0x1f, 0xbe, 0x68, 0xe2, 0xd3, 0xbd, 0xc9, 0x47, 0xab, 0x79, 0x3e, 0xf9, 0x17, 0xe8, 0x67, 0x46, 0x92, 0xa9, 0x52, 0x5f, 0x61, 0xde, 0x9c, 0xa2, 0x77, 0x1f, 0x7d, 0x43, 0xcc, 0x2a, 0xf2, 0x82, 0x81, 0xe9, 0x8e, 0xc7, 0x71, 0x66, 0xbd, 0xec, 0xa4, 0xf9, 0xb9, 0xe1, 0xd4, 0x86, 0xa1, 0x88, 0x66, 0xe5, 0x50, 0xde, 0x0d, 0xf0, 0x47, 0x85, 0xdf, 0xa6, 0x7d, 0x83, 0x6b, 0x1a, 0x0c, 0xd4, 0x8c, 0xc1, 0xae, 0x58, 0x8d, 0x87, 0xd0, 0xf2, 0xf4, 0x77, 0x91, 0x32, 0xd2, 0xa8, 0x9a, 0x8f, 0x94, 0xc7, 0xb2, 0xed, 0x81, 0xea, 0x0c, 0x4a, 0x1c, 0xf5, 0x7f, 0x7b, 0xd8, 0x89, 0x4f, 0x5e, 0x3f, 0xaa, 0xcc, 0xaa, 0x3f, 0xa7, 0x9f, 0x9d, 0x1a, 0x51, 0x27, 0xd4, 0x3b, 0xeb, 0x91, 0xab, 0x2c, 0x46, 0x8e, 0xc9, 0x86, 0xff, 0x36, 0xe2, 0xcc, 0x70, 0x56, 0xdb, 0x70, 0xa4, 0x95, 0xf5, 0xce, 0x99, 0x1f, 0x81, 0xb9, 0x77, 0xd2, 0x69, 0x9e, 0x07, 0x5b, 0xda, 0x6c, 0xd4, 0xd0, 0x26, 0xf4, 0xe7, 0x4c, 0x47, 0x9d, 0xd8, 0x4a, 0xe4, 0xd1, 0xb4, 0xa2, 0x85, 0x38, 0x2d, 0x57, 0x27, 0x14, 0xf3, 0x69, 0x9f, 0x85, 0xf4, 0x9c, 0xc1, 0x83, 0x33, 0xa3, 0x94, 0xf4, 0xaa, 0x1c, 0x1e, 0x98, 0x61, 0x03, 0xf8, 0xcb, 0x54, 0xe9, 0xda, 0x82, 0x03, 0x03, 0x29, 0x95, 0x78, 0x8d, 0x6e, 0x30, 0xb5, 0x89, 0x74, 0x5b, 0x55, 0x4d, 0xc1, 0xa7, 0xc9, 0x94, 0xb3, 0xa7, 0xe0, 0x40, 0x7f, 0x2a, 0x48, 0x4f, 0x71, 0x7e, 0x94, 0x93, 0xeb, 0x5a, 0x11, 0xa3, 0x45, 0xa5, 0xb2, 0x60, 0x7e, 0x4e, 0x8c, 0xd7, 0x93, 0xb2, 0x25, 0x32, 0x50, 0xb6, 0x06, 0xe4, 0x6a, 0x0c, 0x71, 0x60, 0xc8, 0x77, 0x52, 0x65, 0xf8, 0x4e, 0x39, 0xbe, 0x83, 0xa9, 0x16, 0x4c, 0x52, 0x5c, 0xf1, 0x9e, 0x06, 0x05, 0xe7, 0xf1, 0x79, 0x34, 0x05, 0x05, 0xa7, 0x29, 0xe7, 0x34, 0x14, 0xbc, 0x8d, 0x4f, 0x66, 0x83, 0x07, 0x7f, 0x67, 0x42, 0x69, 0x4f, 0x84, 0xd0, 0xf9, 0x13, 0x52, 0xc6, 0x2e, 0x5a, 0x90, 0xd0, 0xd5, 0xf0, 0x9d, 0xbd, 0xb1, 0xfd, 0x28, 0x06, 0xd8, 0x08, 0x0f, 0x40, 0xfe, 0x57, 0x42, 0xa7, 0x76, 0xe1, 0x0c, 0x8f, 0x1d, 0x20, 0x74, 0x7b, 0xd6, 0x7c, 0x05, 0x69, 0x2f, 0x9d, 0xa3, 0xa4, 0xcc, 0x54, 0x52, 0x6d, 0x3d, 0x5e, 0x9b, 0x44, 0xa9, 0x91, 0xaa, 0x94, 0xef, 0x52, 0x31, 0x97, 0x7b, 0xa9, 0x5f, 0x5b, 0x23, 0xd4, 0xfb, 0x2d, 0x2a, 0x9f, 0x62, 0x22, 0xc5, 0x20, 0x04, 0xd2, 0x56, 0xac, 0xd7, 0x9d, 0xa4, 0xad, 0x86, 0x65, 0x93, 0xae, 0xe0, 0x9b, 0x85, 0xc8, 0x37, 0x1a, 0x65, 0x4f, 0x81, 0xde, 0x80, 0xb9, 0xd7, 0xb2, 0xbf, 0xc8, 0xa2, 0x6c, 0x2b, 0x60, 0x6a, 0xde, 0x16, 0x55, 0x03, 0xdd, 0x63, 0x23, 0x2c, 0xb4, 0x16, 0x0a, 0xb7, 0x90, 0x74, 0x69, 0x4b, 0xa8, 0x58, 0x5b, 0x47, 0x2b, 0x3d, 0xb3, 0xf3, 0xb5, 0x29, 0x48, 0xfd, 0xac, 0x22, 0xdd, 0xc8, 0xe0, 0x2c, 0xb2, 0xc6, 0xbf, 0x33, 0x08, 0xf8, 0xd5, 0x85, 0x1e, 0x05, 0xd2, 0x8c, 0xb2, 0xd6, 0xf8, 0x9d, 0x71, 0x28, 0xfb, 0xf5, 0x59, 0x94, 0x97, 0x02, 0xfd, 0x40, 0x65, 0x41, 0xd9, 0x7e, 0x3b, 0xa6, 0x3b, 0x2b, 0x45, 0x14, 0xa7, 0x8c, 0xde, 0x23, 0xaa, 0x42, 0xe8, 0xd4, 0x36, 0xc6, 0xd3, 0xbb, 0x93, 0x30, 0xd8, 0x3d, 0x51, 0x94, 0xc9, 0x7a, 0x0b, 0x30, 0xf4, 0x35, 0x0c, 0xfd, 0xb3, 0x54, 0x0f, 0xe5, 0x9f, 0x02, 0x79, 0x9b, 0xe8, 0x47, 0x79, 0x8b, 0x5f, 0x75, 0x59, 0x5a, 0x07, 0xe8, 0xed, 0xfa, 0x8f, 0x06, 0xa1, 0xf5, 0x21, 0x5b, 0x11, 0x28, 0x7f, 0x75, 0x44, 0xbf, 0x9c, 0x36, 0x47, 0xa3, 0xad, 0x03, 0x9d, 0x1f, 0x50, 0xb9, 0x1e, 0x3b, 0x9c, 0x2d, 0x91, 0x1b, 0x8c, 0x12, 0x61, 0xbd, 0x87, 0x30, 0xd7, 0xf1, 0x28, 0xf6, 0x58, 0xf9, 0x9d, 0x51, 0x51, 0xb2, 0xf8, 0x81, 0x28, 0x12, 0xdd, 0x3b, 0x49, 0xfb, 0xd3, 0x23, 0x46, 0x99, 0xec, 0xc5, 0x5c, 0xbf, 0x9c, 0xaa, 0xe1, 0x5c, 0x8d, 0xb1, 0x23, 0x97, 0x52, 0x9a, 0x01, 0xf5, 0xb1, 0x57, 0x14, 0x51, 0xd7, 0x9e, 0xc7, 0x41, 0x9c, 0x2c, 0xff, 0xf7, 0xc7, 0xb1, 0xb4, 0x64, 0x27, 0x6f, 0x89, 0xfa, 0x9f, 0x83, 0x3b, 0x13, 0x58, 0xc7, 0x5d, 0xf8, 0x7e, 0x69, 0xca, 0xcd, 0xad, 0x66, 0xa1, 0xa7, 0x1a, 0x5c, 0x7d, 0x3b, 0x17, 0xcb, 0x71, 0x27, 0x5e, 0x71, 0xaf, 0xd8, 0xb8, 0x57, 0x48, 0x9b, 0x19, 0xfb, 0x42, 0x7a, 0x09, 0xc3, 0xcb, 0x39, 0xee, 0x6e, 0x6e, 0xf9, 0x36, 0xca, 0x19, 0xfb, 0xfe, 0xa9, 0x00, 0xb5, 0xf2, 0xe2, 0xd6, 0x38, 0x8f, 0x28, 0x3b, 0xa5, 0x33, 0x3c, 0x76, 0xe7, 0x62, 0x2c, 0x0d, 0x68, 0x76, 0x6c, 0x5f, 0xfc, 0x6f, 0x8d, 0xdc, 0x19, 0xc1, 0xb9, 0x23, 0x51, 0xff, 0x2f, 0xb4, 0xe0, 0x37, 0x37, 0x02, 0x26, 0x96, 0xe5, 0x6a, 0x46, 0x1e, 0x0b, 0x5a, 0x30, 0xe5, 0xef, 0xa6, 0x92, 0x94, 0x32, 0xb6, 0x7f, 0xf9, 0x48, 0x1c, 0xd3, 0xaf, 0xe5, 0x74, 0x1d, 0xa2, 0x06, 0x00, 0xa2, 0x74, 0x9a, 0xc2, 0x23, 0x2a, 0x4e, 0xa9, 0xe5, 0x8f, 0xa8, 0x09, 0x2b, 0xf5, 0x22, 0xa5, 0x96, 0x1d, 0x55, 0x30, 0xc9, 0x3d, 0x57, 0x3c, 0xd5, 0x73, 0x3d, 0x05, 0xf3, 0x55, 0x5c, 0x09, 0x00, 0xde, 0xc1, 0x27, 0x33, 0xb9, 0x4f, 0x71, 0x06, 0xf4, 0xde, 0x42, 0x33, 0x1b, 0x43, 0x5f, 0xe3, 0xd3, 0x12, 0x7b, 0x3a, 0x8c, 0x4f, 0x17, 0xa4, 0x4a, 0x69, 0x6e, 0xa5, 0xaa, 0xf1, 0xb7, 0xbc, 0xbb, 0x9a, 0x7a, 0xd4, 0x36, 0x07, 0x43, 0xbd, 0x9a, 0xab, 0x08, 0xcc, 0x92, 0x3e, 0x6e, 0x93, 0x60, 0xe6, 0x8a, 0x52, 0x6c, 0x81, 0x32, 0x17, 0x3d, 0x0b, 0xc0, 0x82, 0xc7, 0x21, 0x65, 0xd7, 0xcc, 0xbd, 0x1a, 0xce, 0x5c, 0x33, 0xcf, 0x2a, 0x8f, 0x2d, 0x43, 0xbf, 0xe9, 0xb5, 0xbc, 0x87, 0xf5, 0xa5, 0xb4, 0x9b, 0x62, 0xff, 0x0a, 0x7b, 0x36, 0x31, 0x27, 0x5d, 0x5e, 0xd4, 0x8f, 0x71, 0x66, 0x30, 0x65, 0x28, 0x0b, 0x10, 0x42, 0x99, 0xb5, 0x75, 0xf0, 0xc5, 0x57, 0xba, 0xe3, 0x84, 0x9f, 0x4b, 0xed, 0x1a, 0x5c, 0x6c, 0x84, 0x1d, 0xe9, 0xae, 0xd2, 0x2c, 0x73, 0x46, 0x4a, 0xf5, 0x52, 0x68, 0x5d, 0x8c, 0x34, 0x65, 0x66, 0xd0, 0xe8, 0xaf, 0x9f, 0xec, 0xef, 0x3a, 0x3d, 0xa7, 0xbf, 0x94, 0x46, 0x88, 0x05, 0x29, 0x03, 0xbe, 0xd3, 0x42, 0x3d, 0x6a, 0x36, 0x28, 0x0e, 0xde, 0x67, 0x47, 0x31, 0x96, 0x03, 0x43, 0xd2, 0xe6, 0xb5, 0x73, 0xee, 0xdf, 0x09, 0x73, 0xb9, 0x34, 0xb7, 0xa4, 0xe7, 0x1a, 0xb5, 0x2d, 0xe1, 0xf6, 0xc3, 0xf1, 0xf2, 0xdf, 0x76, 0x62, 0xeb, 0x38, 0xdb, 0xb7, 0x6a, 0x26, 0x96, 0x0e, 0x25, 0xde, 0xb3, 0xdf, 0xcb, 0x7b, 0xa4, 0xb4, 0xf7, 0x69, 0x21, 0x0d, 0x10, 0x5e, 0xdf, 0x18, 0x8d, 0x99, 0xf8, 0xfb, 0x11, 0xe4, 0x63, 0x32, 0xe4, 0x29, 0xcc, 0xe2, 0x12, 0xe7, 0xa3, 0x4f, 0x1b, 0x98, 0xd2, 0x96, 0xaa, 0x05, 0xc2, 0x4b, 0xbb, 0x42, 0x67, 0xa4, 0xb8, 0xaa, 0x60, 0x1b, 0x39, 0x19, 0xaf, 0x5a, 0xf6, 0xcd, 0x58, 0x74, 0x4e, 0xdf, 0x25, 0xe4, 0xdb, 0x07, 0xd7, 0x32, 0x46, 0x2c, 0xae, 0x3f, 0x1f, 0xdf, 0xc3, 0xb6, 0x94, 0xe5, 0xb4, 0xbf, 0x51, 0x10, 0x75, 0xe2, 0x5b, 0x48, 0x4b, 0x97, 0xfb, 0x66, 0x2a, 0x8b, 0x08, 0x13, 0x15, 0x9f, 0xaf, 0xa8, 0x54, 0xf5, 0x67, 0x91, 0xc3, 0x54, 0x19, 0x37, 0x64, 0x56, 0xdd, 0xc4, 0xc7, 0xc3, 0x95, 0x8b, 0xf5, 0x67, 0x04, 0x46, 0x00, 0x52, 0xf3, 0x67, 0xb0, 0x56, 0xb4, 0x1a, 0x46, 0xb1, 0x65, 0x9c, 0xbc, 0x87, 0xea, 0x48, 0x17, 0xfb, 0x58, 0xe3, 0xa5, 0x32, 0x6e, 0xc4, 0x43, 0x0e, 0x43, 0x7f, 0x26, 0xe1, 0x85, 0xd9, 0x19, 0x7b, 0xb4, 0xbe, 0x0c, 0xa5, 0xd8, 0x68, 0x5d, 0x89, 0x1b, 0x66, 0x68, 0x61, 0xbe, 0x33, 0xf1, 0x5d, 0xa1, 0x56, 0x45, 0x65, 0x56, 0xdc, 0xb2, 0x9a, 0x36, 0xd3, 0xfb, 0x9a, 0x99, 0x57, 0xf6, 0x27, 0xb0, 0x94, 0x9c, 0x06, 0xe6, 0xf5, 0x2c, 0xed, 0xa6, 0xd7, 0xb8, 0x19, 0x1d, 0xd2, 0x9e, 0xbd, 0x0f, 0xbb, 0xc1, 0xfa, 0x52, 0x3d, 0x8e, 0x9a, 0xfa, 0xb4, 0xd5, 0x56, 0x0f, 0x05, 0x69, 0x5b, 0xb4, 0x4e, 0x33, 0x55, 0x17, 0xde, 0x2b, 0xf5, 0x48, 0xb4, 0x5f, 0x15, 0x55, 0x47, 0x1b, 0xd2, 0xa6, 0x97, 0x1a, 0x30, 0x86, 0x9a, 0x2a, 0xc2, 0x18, 0xf2, 0x5f, 0x1d, 0x8a, 0x6f, 0x76, 0x84, 0x41, 0x1a, 0x6a, 0x08, 0x63, 0x7b, 0xf7, 0x15, 0x08, 0xbc, 0x5c, 0x4c, 0xcd, 0xa8, 0xf3, 0xc5, 0xfe, 0x25, 0xe7, 0x70, 0x45, 0xb5, 0x8b, 0x56, 0x33, 0x76, 0x35, 0x89, 0x6f, 0xea, 0x65, 0x6b, 0xd5, 0x1f, 0xb2, 0xe7, 0x78, 0x3b, 0x85, 0x7c, 0x7c, 0x16, 0xf9, 0x57, 0xdb, 0xeb, 0x47, 0xb1, 0xa6, 0x2f, 0xd0, 0x0e, 0xab, 0xae, 0x57, 0xd6, 0xe9, 0x3b, 0x9c, 0x8d, 0x4a, 0x81, 0xf0, 0x34, 0xe5, 0x6c, 0xcc, 0x7a, 0xa1, 0xca, 0xf7, 0x30, 0x15, 0xce, 0x7a, 0x98, 0x6a, 0x5c, 0x72, 0xc9, 0xa2, 0x93, 0x3f, 0xc0, 0x29, 0xff, 0x52, 0xa2, 0x5f, 0x98, 0x3b, 0xc0, 0xf4, 0x2f, 0xde, 0x73, 0x17, 0xb6, 0x3e, 0xf2, 0x4f, 0x85, 0x9c, 0xf3, 0x26, 0xb1, 0xd3, 0xa7, 0x1b, 0x1a, 0x4d, 0x17, 0xe7, 0x22, 0xcf, 0x10, 0xac, 0xc1, 0x94, 0x4f, 0x74, 0xe0, 0xec, 0x5d, 0xa0, 0x4f, 0xc6, 0xc7, 0x18, 0x9b, 0xb2, 0x78, 0x68, 0xc3, 0xa9, 0xfe, 0x13, 0x6a, 0xa0, 0x1e, 0x7b, 0x0a, 0xcb, 0x80, 0x4f, 0x9e, 0x8d, 0x8f, 0x39, 0xf1, 0x3d, 0xd6, 0x89, 0x72, 0x08, 0x5b, 0x28, 0x2c, 0x65, 0x97, 0xfe, 0x02, 0x87, 0x1c, 0x64, 0xeb, 0x41, 0xea, 0x1f, 0x80, 0xc3, 0xd5, 0xb8, 0x76, 0x6e, 0xef, 0x14, 0x3b, 0xc6, 0xba, 0xce, 0x38, 0xad, 0x0b, 0xf4, 0x17, 0x28, 0xbf, 0xdf, 0xdf, 0x87, 0xeb, 0xfe, 0xb3, 0x54, 0x22, 0x9a, 0xed, 0x91, 0x89, 0xdf, 0x3f, 0x25, 0x6f, 0x36, 0xb4, 0x70, 0x78, 0x44, 0x76, 0x07, 0x7c, 0x6c, 0xb1, 0x83, 0x6b, 0x34, 0xfb, 0x2d, 0xbe, 0x3e, 0x67, 0x91, 0xe7, 0xeb, 0x2f, 0xf7, 0x48, 0x22, 0x5f, 0xad, 0x8d, 0xdf, 0x28, 0x9c, 0x7a, 0x83, 0xd0, 0xdd, 0xbf, 0x6f, 0xef, 0x91, 0x88, 0x3f, 0x10, 0xe7, 0xf0, 0xf2, 0xfd, 0x94, 0x07, 0x5b, 0x8d, 0x3f, 0x8b, 0xe9, 0x9d, 0xe7, 0xf6, 0xbb, 0x10, 0x34, 0x7c, 0x4d, 0x39, 0x1b, 0xc7, 0x07, 0x9c, 0x85, 0x47, 0x1f, 0x3e, 0xf6, 0x50, 0x45, 0xe1, 0x1b, 0x83, 0xa2, 0x0d, 0x19, 0x75, 0x97, 0x77, 0xaf, 0xd3, 0x2b, 0xa8, 0x3d, 0xb3, 0xfd, 0x7a, 0x61, 0xbb, 0x0b, 0x72, 0xe7, 0x1b, 0x18, 0xfe, 0x47, 0x4f, 0x38, 0x64, 0x31, 0x5b, 0xf8, 0x84, 0xc3, 0x95, 0x18, 0x48, 0x17, 0x73, 0xef, 0xc8, 0xa4, 0xd3, 0xcb, 0xe9, 0xf1, 0x39, 0x47, 0x76, 0x26, 0x5d, 0xa8, 0x40, 0x09, 0x96, 0x66, 0xee, 0x7a, 0x03, 0xb9, 0xf6, 0x20, 0xca, 0x57, 0x24, 0x85, 0x2c, 0x77, 0x93, 0x06, 0x9e, 0x0f, 0x56, 0xa2, 0x8c, 0xd5, 0xc1, 0x3b, 0x10, 0x85, 0x3e, 0xd3, 0xa2, 0x0f, 0x19, 0xfd, 0x55, 0xcc, 0x45, 0xee, 0xcd, 0x8f, 0x8e, 0xb1, 0x26, 0x41, 0x79, 0xba, 0xc6, 0xd9, 0x99, 0xf5, 0xb9, 0x4d, 0x27, 0x0a, 0x6c, 0xb5, 0x66, 0x8e, 0xef, 0xe7, 0x53, 0x86, 0xd9, 0x69, 0xab, 0x52, 0xc7, 0xfb, 0x81, 0x0f, 0x6b, 0x16, 0xe3, 0x6a, 0x9b, 0x90, 0xa0, 0x3f, 0x7a, 0xb6, 0x99, 0xf6, 0x37, 0x08, 0x59, 0xd7, 0x8a, 0xfc, 0xd1, 0x59, 0xea, 0x23, 0x94, 0x5e, 0xc8, 0xe7, 0x53, 0x98, 0x69, 0xc4, 0xde, 0x2c, 0x8d, 0x20, 0x7c, 0x5e, 0xd2, 0xa3, 0x40, 0x3a, 0x51, 0xaa, 0x44, 0xbd, 0x6e, 0x68, 0x47, 0x9e, 0x7a, 0x25, 0xe9, 0x25, 0x45, 0x7f, 0xa8, 0x4f, 0xd8, 0x08, 0x3b, 0xd8, 0xc4, 0xd8, 0x31, 0x1b, 0xf1, 0xf7, 0x20, 0xef, 0x2b, 0xae, 0xaf, 0x6c, 0xd2, 0xf7, 0x55, 0x36, 0xea, 0x07, 0x2a, 0x5b, 0xf5, 0x43, 0xf8, 0x3d, 0x82, 0x31, 0x5f, 0xab, 0x4c, 0xe8, 0x47, 0xa3, 0x5d, 0xfa, 0x1b, 0x77, 0xad, 0x46, 0x6e, 0xf5, 0x38, 0xfe, 0x3a, 0xf4, 0x13, 0x18, 0x7e, 0xb2, 0x72, 0x35, 0x94, 0xeb, 0x6f, 0xe3, 0x4c, 0x78, 0x87, 0x31, 0xcc, 0x4e, 0xb7, 0x6f, 0x35, 0x68, 0x44, 0x45, 0x55, 0x25, 0x94, 0x3a, 0x17, 0x29, 0xf3, 0x09, 0xd3, 0x14, 0xe9, 0xca, 0x21, 0xdf, 0x97, 0xa6, 0xb8, 0x63, 0x65, 0x51, 0x25, 0x71, 0xbd, 0xaf, 0x11, 0xbe, 0x1b, 0x72, 0x6b, 0x26, 0xe6, 0x73, 0xca, 0x99, 0xcb, 0x89, 0xdb, 0x3a, 0xa1, 0x03, 0x39, 0x12, 0xb5, 0x47, 0xc6, 0xb7, 0x26, 0x7a, 0xe7, 0x54, 0x46, 0xf4, 0x93, 0x5a, 0x20, 0x81, 0x3c, 0x5d, 0x97, 0x97, 0x6d, 0x3e, 0x27, 0xd8, 0xce, 0xb3, 0x4b, 0x3f, 0x5a, 0x77, 0x4e, 0xd7, 0x7b, 0x25, 0xe4, 0xf4, 0x95, 0x9c, 0xf6, 0xb9, 0x35, 0xaa, 0x3a, 0x16, 0xe8, 0x3a, 0x9d, 0xb1, 0x27, 0xb0, 0x7e, 0x69, 0x80, 0xf3, 0xeb, 0xf7, 0x1d, 0xff, 0xbe, 0x67, 0xf6, 0x5f, 0xdf, 0xef, 0x8c, 0x22, 0x05, 0x79, 0xca, 0x15, 0x73, 0xd6, 0x13, 0xe6, 0xad, 0xfe, 0x04, 0xa1, 0x11, 0x61, 0xf9, 0x56, 0xa1, 0xcc, 0xc6, 0xa7, 0x51, 0x53, 0x4f, 0xc8, 0x56, 0x42, 0x7f, 0x2b, 0xed, 0xc1, 0x18, 0x38, 0x9e, 0x14, 0x94, 0x48, 0x90, 0xb7, 0x07, 0xdf, 0x97, 0xb2, 0xa5, 0xbf, 0xa3, 0x4b, 0x3f, 0x0e, 0x16, 0xfc, 0x3d, 0x01, 0x8e, 0x5b, 0xbb, 0xf4, 0xb7, 0x69, 0x37, 0x4f, 0x3f, 0xd9, 0xbb, 0xe2, 0x40, 0x7f, 0xda, 0x2e, 0x67, 0xe8, 0x7c, 0x8b, 0xa8, 0x9b, 0xff, 0x87, 0xfa, 0x1b, 0x16, 0xe4, 0xd5, 0xd2, 0x29, 0x81, 0xc8, 0x4e, 0x96, 0x1b, 0x06, 0x56, 0x60, 0xad, 0xe8, 0xc5, 0x0f, 0x5f, 0x63, 0x9f, 0xdb, 0x0d, 0x5c, 0xab, 0x33, 0xd8, 0x86, 0x1f, 0x54, 0xc6, 0xf4, 0x0b, 0xbd, 0x84, 0x40, 0x43, 0xf8, 0xd6, 0x67, 0x18, 0x1d, 0x9e, 0xac, 0xc6, 0x02, 0x18, 0xdf, 0x84, 0xf1, 0x47, 0x58, 0x7b, 0xa4, 0xc4, 0x27, 0x2b, 0x75, 0xb9, 0x5d, 0x21, 0xd2, 0x1c, 0xe3, 0xbd, 0x48, 0x2a, 0x03, 0xef, 0xa4, 0xd1, 0xb8, 0xdc, 0xc6, 0xa7, 0xc0, 0x5f, 0x70, 0x4f, 0xc2, 0x79, 0xcd, 0x9e, 0x04, 0x8e, 0xe7, 0xb1, 0xf8, 0xef, 0xfc, 0x61, 0x1a, 0xcf, 0x2e, 0x0f, 0x94, 0x57, 0xc8, 0x19, 0x39, 0xb6, 0xb1, 0xf1, 0x43, 0x68, 0x67, 0x1d, 0xba, 0xf3, 0x8b, 0xb2, 0x1e, 0x5f, 0x09, 0x09, 0x87, 0x34, 0xe5, 0x50, 0xfc, 0xfd, 0x0a, 0x18, 0xf7, 0x8f, 0x36, 0x6f, 0xad, 0x80, 0xd4, 0xa9, 0xc4, 0x40, 0xc6, 0xf4, 0x95, 0x30, 0x2c, 0x88, 0xe0, 0x5b, 0x8f, 0xfc, 0x32, 0xd0, 0x09, 0xd6, 0x1f, 0x1f, 0x5e, 0x63, 0x8a, 0xbc, 0xa7, 0xeb, 0xce, 0x16, 0x5a, 0x2d, 0x49, 0xe6, 0x15, 0xeb, 0x9c, 0xb0, 0x42, 0x6c, 0x7a, 0x2b, 0x4c, 0x5c, 0xbe, 0x2a, 0x76, 0x99, 0x6a, 0x79, 0x07, 0xb0, 0x82, 0xd0, 0xf5, 0x51, 0xe2, 0x76, 0x12, 0x96, 0xec, 0xfc, 0xac, 0xaf, 0xd2, 0xfa, 0xdf, 0x5b, 0x00, 0xcb, 0xe2, 0xad, 0xf4, 0x92, 0xf7, 0x32, 0x77, 0x98, 0xfa, 0x84, 0xe4, 0xb7, 0xb7, 0xc9, 0x1b, 0x4b, 0x75, 0x1e, 0xc6, 0xec, 0x95, 0xb7, 0xf4, 0xbe, 0xa2, 0xbd, 0xfd, 0xdf, 0x06, 0x49, 0xc9, 0xdb, 0xed, 0xee, 0x81, 0xf5, 0x70, 0x1f, 0x6c, 0x86, 0x87, 0x61, 0x1b, 0x3c, 0x01, 0x4f, 0xc3, 0xb3, 0xb0, 0x1b, 0x0e, 0xc0, 0x61, 0x78, 0x0d, 0x4e, 0xc0, 0xbb, 0x30, 0x01, 0x15, 0xd0, 0x20, 0xc9, 0xec, 0x95, 0x8d, 0x74, 0x25, 0xdf, 0x9d, 0x17, 0x21, 0x84, 0x6c, 0x92, 0xf6, 0x60, 0x35, 0x21, 0xec, 0xb6, 0x93, 0x15, 0xc7, 0x68, 0xee, 0xf9, 0x21, 0x25, 0x0c, 0xff, 0xf6, 0xf8, 0xae, 0xc4, 0x86, 0xb4, 0xac, 0x10, 0xea, 0x5f, 0x11, 0xa1, 0x26, 0xca, 0xab, 0xff, 0xa0, 0x83, 0x9d, 0xed, 0x3d, 0x86, 0x6e, 0x27, 0x94, 0x5a, 0xc0, 0x71, 0xb7, 0x81, 0xfc, 0x79, 0xcd, 0x23, 0x2c, 0x5b, 0x0c, 0xc5, 0xff, 0x20, 0xfe, 0x0f, 0xe2, 0x53, 0x8b, 0xd6, 0xc9, 0x9e, 0x90, 0x56, 0x62, 0x98, 0xa2, 0xad, 0xc5, 0x5f, 0x97, 0xd6, 0xfe, 0xe5, 0x08, 0xb8, 0xa3, 0x91, 0x78, 0x04, 0xff, 0xe7, 0x6b, 0x09, 0xfc, 0xf5, 0x18, 0x77, 0x95, 0x5a, 0x18, 0x63, 0xf8, 0xb5, 0x26, 0xfc, 0xf5, 0x6a, 0x0d, 0x98, 0x2f, 0x61, 0x21, 0x95, 0xf4, 0x4d, 0x6a, 0x65, 0x7c, 0x2d, 0x6b, 0xd6, 0xbe, 0xab, 0x9a, 0x1d, 0xaf, 0x2d, 0x3d, 0x26, 0xf6, 0xbe, 0xe5, 0xec, 0xfb, 0xf4, 0x97, 0xf4, 0x5f, 0xb6, 0x71, 0x35, 0xd8, 0xd7, 0x4a, 0x5a, 0x11, 0x3d, 0x63, 0xec, 0xe8, 0x2a, 0xcd, 0xcc, 0x7e, 0x9c, 0xaa, 0xf2, 0x7d, 0x29, 0x4d, 0x8e, 0xf1, 0xe9, 0x49, 0x5f, 0x9e, 0xc7, 0xd4, 0xfc, 0xf3, 0x04, 0x3a, 0x6f, 0x34, 0xce, 0x13, 0xe8, 0xa4, 0x4d, 0x99, 0x43, 0x1e, 0x05, 0xf0, 0xbf, 0x28, 0xe5, 0xd1, 0x8a, 0xc8, 0xc3, 0x0c, 0x6b, 0xaf, 0xda, 0x51, 0x5e, 0x7e, 0x1e, 0xb9, 0x48, 0xfb, 0x54, 0x48, 0xca, 0xac, 0x3c, 0x8a, 0x25, 0x9d, 0x1b, 0x1d, 0xd2, 0x2e, 0x1b, 0x3b, 0xfd, 0x1d, 0x9f, 0xb5, 0xd3, 0xcf, 0xfb, 0x8c, 0xa4, 0x21, 0xe8, 0xc6, 0x9c, 0xbd, 0x1e, 0xda, 0xd7, 0x59, 0x9d, 0x7f, 0x6a, 0x23, 0x4d, 0x79, 0x3c, 0x5a, 0x32, 0x85, 0xdd, 0x4b, 0x96, 0xe9, 0x30, 0x29, 0xce, 0x3c, 0x68, 0x37, 0xf8, 0x4e, 0xc2, 0xf1, 0xb5, 0xb2, 0x35, 0x12, 0xe1, 0xe2, 0xef, 0x20, 0x5c, 0x29, 0x96, 0xd8, 0xb7, 0xa5, 0x14, 0x7f, 0x01, 0xad, 0x9e, 0xb9, 0xfd, 0xcd, 0x36, 0x77, 0x3f, 0xf7, 0xa5, 0x1a, 0x75, 0x00, 0xd9, 0xf2, 0xc7, 0x13, 0x3b, 0x51, 0xc6, 0x72, 0x5e, 0x1b, 0x0b, 0x39, 0x37, 0x13, 0xd9, 0x17, 0x19, 0xf1, 0x1c, 0x1c, 0x2f, 0x78, 0x7d, 0x6a, 0x18, 0x2f, 0x98, 0x5e, 0x67, 0xc4, 0xb2, 0x40, 0x9c, 0xf6, 0x45, 0x95, 0xa2, 0x5e, 0x20, 0xed, 0x62, 0x71, 0xbe, 0x83, 0x1c, 0x58, 0x11, 0x8e, 0x96, 0x62, 0x41, 0x51, 0xe4, 0x4e, 0x31, 0x5e, 0x38, 0xde, 0x9c, 0x5c, 0x2c, 0xe1, 0x3d, 0x52, 0x9d, 0x4f, 0xe7, 0x09, 0xe5, 0x34, 0xcf, 0xaf, 0x74, 0x40, 0xa7, 0x18, 0x83, 0xf3, 0x9a, 0xc0, 0x09, 0x9d, 0x26, 0x5c, 0xf5, 0x22, 0x67, 0xc1, 0x35, 0x3f, 0x0e, 0xa5, 0xe4, 0x61, 0x4a, 0x31, 0x69, 0x65, 0xe4, 0x13, 0xf0, 0x6b, 0x64, 0x97, 0x2f, 0x2b, 0x95, 0x60, 0x51, 0x72, 0xa7, 0x5a, 0x8c, 0xeb, 0x9b, 0xc3, 0x44, 0xce, 0xee, 0x40, 0x8b, 0x33, 0x2e, 0xee, 0xd1, 0x2f, 0x19, 0xd8, 0x6c, 0xf1, 0xb4, 0xdd, 0xd0, 0x74, 0x27, 0xac, 0xc9, 0x77, 0xb0, 0x54, 0x95, 0x58, 0xeb, 0x12, 0xc6, 0xe4, 0x9b, 0xfe, 0xec, 0x30, 0x3f, 0x0b, 0xf2, 0xb3, 0x82, 0x6b, 0x9e, 0xed, 0x14, 0x3b, 0xbe, 0x58, 0xfe, 0xcc, 0x67, 0xf9, 0xa6, 0xca, 0xa2, 0x27, 0xd3, 0xde, 0x35, 0xa1, 0x71, 0x93, 0x77, 0xe6, 0x1c, 0x55, 0x23, 0xff, 0xaf, 0xb8, 0x5e, 0xfe, 0xe6, 0x0d, 0xb1, 0x1f, 0xc2, 0x6b, 0xda, 0x45, 0xf2, 0xed, 0xe5, 0x5a, 0x30, 0xe5, 0x7f, 0x93, 0x4e, 0x06, 0x2a, 0x90, 0x17, 0xb1, 0x55, 0xf2, 0xf9, 0x49, 0x9c, 0x50, 0xea, 0x19, 0x0d, 0x34, 0x80, 0xd4, 0xf3, 0x12, 0x9f, 0xdb, 0xc8, 0xc2, 0xf7, 0x2b, 0x71, 0x2d, 0xd4, 0xf7, 0x23, 0xc8, 0x11, 0x64, 0xd6, 0x24, 0xd4, 0xae, 0x4e, 0xe2, 0x8b, 0xf0, 0xee, 0x4a, 0x46, 0x4b, 0xa8, 0x19, 0xbb, 0xb6, 0x8c, 0x51, 0x45, 0xdb, 0x08, 0x39, 0x34, 0xdd, 0xc2, 0x3e, 0x30, 0x27, 0x71, 0xf4, 0xe7, 0x52, 0xf8, 0xed, 0x04, 0x51, 0x77, 0xd6, 0x6e, 0x09, 0xc6, 0xc6, 0x3a, 0x4d, 0xbd, 0x26, 0x4d, 0xee, 0x95, 0xb1, 0x2f, 0xcc, 0x38, 0xe7, 0x14, 0xcd, 0x82, 0x57, 0x85, 0x78, 0xe5, 0x18, 0xe8, 0xef, 0xb1, 0xf4, 0x6f, 0xa0, 0x53, 0x22, 0xc6, 0xd0, 0x99, 0x54, 0x36, 0x68, 0x66, 0xe1, 0x7b, 0xb2, 0xe9, 0x9c, 0xcd, 0x96, 0xc3, 0xb9, 0x3f, 0x4c, 0x67, 0x1c, 0xd8, 0x07, 0xed, 0x38, 0xc6, 0xd9, 0xf3, 0x79, 0x85, 0x17, 0x5c, 0xa2, 0x2f, 0x96, 0x20, 0x75, 0x33, 0x90, 0x15, 0x89, 0x57, 0x45, 0xaa, 0x3f, 0x11, 0x26, 0x74, 0x18, 0xc3, 0x13, 0x64, 0xd0, 0x87, 0xa3, 0x03, 0x42, 0xbe, 0x28, 0x84, 0xf1, 0x4e, 0x9d, 0xe6, 0x0b, 0x32, 0x98, 0x6d, 0x5f, 0x81, 0xb6, 0x3f, 0x51, 0xd2, 0xbc, 0xd5, 0x90, 0x3e, 0x1c, 0xa4, 0x31, 0xa1, 0xcc, 0xc1, 0x51, 0xb4, 0x06, 0x65, 0x4c, 0x45, 0xb3, 0xf1, 0x7d, 0x11, 0xde, 0x2f, 0x15, 0x3a, 0x16, 0x38, 0x96, 0x85, 0x3e, 0x10, 0x69, 0x53, 0xb8, 0xa3, 0x3f, 0x02, 0xaf, 0xa1, 0x4d, 0x11, 0xa3, 0x33, 0xda, 0xc8, 0x69, 0xfd, 0xb0, 0x2f, 0x0e, 0x71, 0xce, 0xbb, 0x09, 0x9f, 0x36, 0x67, 0x7b, 0x95, 0xf3, 0x8d, 0x4d, 0x1b, 0x63, 0xb6, 0x1c, 0xea, 0xeb, 0x59, 0x9c, 0xc5, 0x8a, 0x53, 0xe8, 0x71, 0xd2, 0x8a, 0xe8, 0xa8, 0x20, 0xff, 0xdb, 0xf8, 0x56, 0xba, 0xcc, 0x68, 0x61, 0x98, 0x3a, 0xd7, 0xf8, 0xed, 0x04, 0xaf, 0x6d, 0x2b, 0x59, 0x6f, 0x4c, 0xa9, 0xc3, 0x11, 0xe9, 0x76, 0xb3, 0xdf, 0xc2, 0x7e, 0xe1, 0xb9, 0x0c, 0x57, 0xe0, 0x39, 0x53, 0xfc, 0x03, 0xdb, 0x57, 0x8e, 0x7e, 0xe2, 0xe4, 0x96, 0xf1, 0xf3, 0xfa, 0xc9, 0x6b, 0x67, 0x65, 0x54, 0xbf, 0x44, 0x1c, 0x42, 0x9e, 0xce, 0xde, 0x07, 0xd3, 0x5b, 0xe5, 0x13, 0x7c, 0x83, 0x7a, 0xc3, 0x54, 0xae, 0x9f, 0x34, 0x7a, 0x83, 0x4e, 0x9c, 0x68, 0x97, 0xd7, 0x8b, 0xbd, 0xe1, 0x27, 0x0d, 0xee, 0x9c, 0xd7, 0xce, 0xd2, 0x1b, 0x7b, 0xed, 0x24, 0x1f, 0x9b, 0xa4, 0x59, 0xc3, 0x67, 0x82, 0x2d, 0xc7, 0x68, 0x5c, 0xd8, 0xd2, 0xda, 0x34, 0x4f, 0x9e, 0x2d, 0x1e, 0x94, 0x0a, 0x47, 0x85, 0x65, 0x43, 0x01, 0x9f, 0x7b, 0xad, 0x73, 0xab, 0x8c, 0x84, 0x15, 0xe2, 0x7e, 0x2c, 0xf5, 0x2d, 0xc1, 0xd6, 0x6f, 0xc2, 0xd6, 0x57, 0x8d, 0xbc, 0x4a, 0xa6, 0xf5, 0x65, 0x69, 0x5e, 0xa9, 0x71, 0xe6, 0x5f, 0x4e, 0xe0, 0x5c, 0x93, 0x8d, 0x35, 0xd2, 0xc1, 0xab, 0xb8, 0x0f, 0xc8, 0xef, 0xb9, 0x8d, 0x3d, 0xc7, 0x89, 0xf3, 0x81, 0x93, 0x5e, 0x21, 0x1f, 0x3e, 0x99, 0xf5, 0x94, 0xec, 0xbd, 0xc6, 0x53, 0xb2, 0xcb, 0x0b, 0xed, 0x1e, 0xaf, 0x79, 0xdc, 0xd9, 0x50, 0x31, 0x9f, 0x4f, 0xb5, 0x0a, 0xc8, 0x06, 0xa9, 0xbf, 0x60, 0x48, 0x5a, 0x32, 0xa1, 0xbf, 0x90, 0xdc, 0xee, 0x52, 0xb3, 0x61, 0x1b, 0x00, 0xac, 0xc9, 0xed, 0xd8, 0x92, 0x4f, 0xb2, 0x2c, 0x32, 0xc0, 0xbb, 0xf1, 0x0e, 0x0e, 0x87, 0xe4, 0xf6, 0x2a, 0xc8, 0x8b, 0x67, 0x4e, 0x6e, 0x67, 0x8c, 0x1d, 0xda, 0x31, 0x50, 0x0c, 0x8c, 0x0e, 0xc3, 0xfb, 0x31, 0xc5, 0xd6, 0xc7, 0xf9, 0xdf, 0xac, 0x1f, 0xe7, 0x7f, 0xab, 0xfe, 0x36, 0xf7, 0xd6, 0x3b, 0x39, 0xff, 0xc7, 0x2a, 0xce, 0x93, 0xa7, 0xd2, 0xd6, 0xca, 0x45, 0xfa, 0xb1, 0xca, 0x24, 0x72, 0x30, 0x51, 0x25, 0xd1, 0xcb, 0xf2, 0xd1, 0x15, 0x2e, 0x4d, 0xef, 0x4d, 0xe3, 0x1b, 0x4e, 0x0f, 0x92, 0x16, 0x3e, 0x96, 0x13, 0xfb, 0x5c, 0x37, 0xbf, 0x37, 0x48, 0xb8, 0x1f, 0xc8, 0x7b, 0x1e, 0xe7, 0x5d, 0x8d, 0xa2, 0x1e, 0xe2, 0x2e, 0x8f, 0xf5, 0x4a, 0xc4, 0x27, 0xd6, 0x93, 0x44, 0xe1, 0xa8, 0x23, 0xb4, 0x0f, 0x4a, 0xc1, 0xe4, 0x12, 0x38, 0x26, 0x26, 0x9c, 0x91, 0x8e, 0xc4, 0x73, 0xe0, 0x48, 0xf5, 0x62, 0x29, 0xfd, 0x5c, 0xca, 0xa7, 0x45, 0x29, 0xfd, 0xde, 0x82, 0x3d, 0x75, 0x67, 0x0b, 0xb6, 0x45, 0xce, 0xe9, 0x3b, 0x51, 0x12, 0x1c, 0xa7, 0x72, 0xf9, 0x1f, 0xb9, 0x0d, 0x65, 0xcd, 0x9c, 0x37, 0x1a, 0x15, 0xcc, 0x75, 0xef, 0x21, 0xa5, 0x3d, 0x0d, 0xb6, 0x7f, 0x39, 0x9c, 0x3a, 0x45, 0x69, 0x11, 0x8e, 0x59, 0x65, 0xbd, 0x7e, 0x1e, 0x73, 0x7a, 0x1a, 0xe5, 0xae, 0x8b, 0x58, 0x9a, 0xcb, 0x3d, 0x26, 0x2c, 0xc7, 0x15, 0x67, 0x87, 0x7e, 0x85, 0xb5, 0xd9, 0x2c, 0xb8, 0xf6, 0x95, 0x91, 0xf5, 0x77, 0x5e, 0x3b, 0x17, 0x2c, 0x99, 0x98, 0x6c, 0x48, 0x6e, 0xf7, 0x40, 0x5e, 0x98, 0xcc, 0x96, 0x64, 0xe5, 0x55, 0x5b, 0x90, 0x9b, 0x37, 0x6c, 0xb7, 0x12, 0x29, 0x97, 0xc0, 0x0d, 0x8a, 0xf1, 0xc8, 0xa8, 0xa2, 0x39, 0x94, 0xd3, 0xdc, 0x69, 0x74, 0x36, 0xe4, 0xbc, 0x7d, 0x53, 0xed, 0xb8, 0x87, 0xc5, 0xca, 0x7c, 0xeb, 0x80, 0x05, 0xb4, 0x92, 0x2c, 0xd7, 0x98, 0xd8, 0xd7, 0xbc, 0xf5, 0x6f, 0x7f, 0xa1, 0x99, 0xa9, 0x25, 0x3e, 0xbd, 0x6c, 0x60, 0xc4, 0xac, 0xcd, 0xf3, 0xfe, 0xf1, 0x19, 0x7a, 0x02, 0xb4, 0x9e, 0x0f, 0x15, 0xb0, 0xdf, 0xf7, 0x82, 0x21, 0x87, 0x58, 0xdf, 0x87, 0xe4, 0x54, 0x85, 0xf0, 0x5c, 0xe7, 0x1c, 0xd2, 0xd8, 0x57, 0x9b, 0xd2, 0xcc, 0x3e, 0xed, 0xac, 0xb9, 0x6b, 0xb3, 0x73, 0xf0, 0x8b, 0x9c, 0xe2, 0xe7, 0xe7, 0x4d, 0xde, 0x10, 0x45, 0xde, 0xbe, 0x80, 0x05, 0xb2, 0x65, 0xbe, 0xce, 0xa7, 0x61, 0xf1, 0x0d, 0x52, 0xb1, 0x0b, 0x4c, 0x76, 0xbd, 0xcf, 0x9b, 0x7f, 0xb7, 0xee, 0x8f, 0x63, 0xc8, 0xeb, 0xdb, 0xae, 0x0b, 0x79, 0x38, 0x87, 0x2a, 0xff, 0x99, 0xd6, 0x5b, 0x7a, 0x53, 0xd6, 0x67, 0x5a, 0x2d, 0x61, 0xcf, 0xbb, 0xf1, 0xa9, 0x3f, 0xe4, 0x83, 0x2a, 0xb2, 0x32, 0xa0, 0x33, 0x21, 0x3a, 0x73, 0x0a, 0xf8, 0x60, 0x6e, 0x6b, 0x64, 0x24, 0xb2, 0x26, 0x91, 0x88, 0x76, 0x35, 0xf8, 0xbb, 0xc1, 0xd9, 0x1a, 0xdf, 0x13, 0x5f, 0x13, 0x4e, 0xd4, 0x75, 0x85, 0x6a, 0xa0, 0xa1, 0xbe, 0xef, 0xa6, 0xb3, 0xdf, 0x1e, 0xab, 0xdf, 0x15, 0xcd, 0xc8, 0x41, 0x69, 0x24, 0xba, 0xc6, 0x15, 0x30, 0x35, 0x44, 0xee, 0xbd, 0xe9, 0xcc, 0xff, 0xe7, 0x40, 0xec, 0xa5, 0x78, 0xb7, 0x5c, 0x6d, 0xd9, 0x55, 0xb7, 0x86, 0x7a, 0xc3, 0x15, 0x1f, 0x23, 0x9c, 0xb3, 0xf8, 0xcb, 0x86, 0xcd, 0x58, 0x1f, 0x9f, 0x91, 0x92, 0x75, 0x97, 0xdf, 0xeb, 0x83, 0x60, 0x95, 0x0f, 0xe2, 0x98, 0x6b, 0x4d, 0xd0, 0x07, 0xb5, 0x35, 0x3e, 0x88, 0x62, 0x29, 0x1a, 0x5e, 0xaa, 0xef, 0x36, 0xff, 0x73, 0xfd, 0xff, 0xac, 0xfb, 0xe7, 0xfa, 0xdd, 0xb1, 0x6e, 0xf3, 0x4f, 0x62, 0x3f, 0x8d, 0xfe, 0x24, 0x56, 0x53, 0x5f, 0x5d, 0xa7, 0x2c, 0x79, 0xe4, 0x17, 0x3d, 0x05, 0x23, 0x83, 0x19, 0x5b, 0x38, 0xe6, 0x8f, 0x3a, 0x93, 0x8f, 0x1e, 0x1e, 0x79, 0xb0, 0xcb, 0xe5, 0x9b, 0x41, 0xbe, 0x33, 0x7c, 0xb3, 0x59, 0x5f, 0x70, 0x96, 0xcf, 0xbc, 0xd0, 0x03, 0xf6, 0xbb, 0xb7, 0xe2, 0xaf, 0xed, 0xee, 0xad, 0x38, 0xbf, 0x68, 0x8f, 0xee, 0x49, 0x8c, 0x23, 0xb7, 0xb0, 0x7c, 0x8c, 0xfc, 0x93, 0xe5, 0xda, 0x58, 0x8b, 0x27, 0x26, 0x2f, 0x27, 0xb7, 0xb5, 0x45, 0xf9, 0x84, 0xaa, 0xbc, 0xea, 0x01, 0x42, 0x24, 0xf7, 0xc9, 0xfe, 0xc2, 0x56, 0xe1, 0x2f, 0x6d, 0x7a, 0x8a, 0xdb, 0xb2, 0x71, 0xee, 0xae, 0x0f, 0xd4, 0xa3, 0xbc, 0x6d, 0x32, 0x62, 0xcd, 0xba, 0x71, 0xbc, 0xbb, 0x63, 0x81, 0x98, 0x6f, 0x66, 0x4b, 0x9d, 0xbf, 0x4e, 0xc8, 0xe4, 0x37, 0x88, 0xa5, 0x90, 0x76, 0x4f, 0xce, 0x16, 0x4e, 0xce, 0xb7, 0x85, 0x63, 0x2f, 0x24, 0xc4, 0x39, 0x06, 0xb1, 0xbd, 0xc8, 0xaa, 0x4a, 0x25, 0x8c, 0x18, 0xa4, 0xed, 0xe1, 0xc6, 0x73, 0xf0, 0x36, 0x96, 0xbb, 0xac, 0xe7, 0x96, 0x1c, 0x16, 0xcb, 0x01, 0xd6, 0xd5, 0xf2, 0x0b, 0xae, 0x05, 0x39, 0xc4, 0x9d, 0xd1, 0xe7, 0x21, 0x30, 0x75, 0xa7, 0x24, 0x7a, 0xcc, 0x8f, 0xbe, 0x42, 0x56, 0x3c, 0x48, 0x49, 0x5a, 0xe8, 0xc4, 0xba, 0x8f, 0x7d, 0x8a, 0xf0, 0x5a, 0xbf, 0x07, 0xcb, 0x86, 0x54, 0xfd, 0xea, 0xb3, 0x64, 0x2d, 0x81, 0xd4, 0xf4, 0x6d, 0xc6, 0xa7, 0x8f, 0x29, 0x75, 0x3f, 0x39, 0x0d, 0x6e, 0xb2, 0xf5, 0x74, 0x7e, 0x89, 0x4e, 0x3b, 0x5f, 0xdc, 0x9f, 0xb2, 0x91, 0xde, 0xf1, 0x8f, 0xdf, 0x67, 0x29, 0x7b, 0xae, 0xe2, 0x91, 0x95, 0x74, 0x39, 0xd9, 0x7e, 0x46, 0xff, 0xd1, 0xb9, 0x1a, 0x4c, 0xc3, 0x67, 0x70, 0x64, 0xcf, 0x1c, 0x1e, 0x24, 0xc4, 0x70, 0xae, 0x5b, 0xa9, 0x78, 0x46, 0x67, 0xfa, 0x43, 0xf4, 0xcc, 0xe2, 0x6c, 0xc5, 0x38, 0x26, 0xec, 0x07, 0x8f, 0x5c, 0x9e, 0xdc, 0xe6, 0xed, 0x64, 0x3b, 0x7c, 0x5a, 0x3d, 0xbc, 0x6c, 0x4d, 0xbe, 0x06, 0x14, 0x03, 0xdd, 0xef, 0x29, 0xe7, 0x97, 0x02, 0x6b, 0xc0, 0xf4, 0xab, 0xfd, 0x5e, 0xe4, 0xd4, 0xfc, 0x55, 0x60, 0x8e, 0x8f, 0x8d, 0x6f, 0x0e, 0x55, 0xd1, 0x99, 0x78, 0xe3, 0x47, 0x71, 0xdd, 0x3d, 0xbb, 0xa6, 0x8a, 0x4e, 0xc6, 0x3d, 0x6a, 0xe3, 0xc7, 0xed, 0xba, 0x67, 0x76, 0xad, 0x87, 0xfc, 0xd6, 0x1f, 0x7d, 0xe0, 0xc7, 0xfb, 0xbb, 0x4c, 0xce, 0x48, 0xeb, 0x83, 0x78, 0x6f, 0x8d, 0xff, 0xfc, 0xe4, 0x03, 0x23, 0x9b, 0xbb, 0x4c, 0x8a, 0xb9, 0xb5, 0x7f, 0xcf, 0x86, 0x2e, 0x93, 0x5b, 0x6a, 0xdd, 0x34, 0x8a, 0xf7, 0x1e, 0x73, 0xeb, 0xfd, 0x61, 0xf2, 0xe0, 0x78, 0xa8, 0xd6, 0x0d, 0x45, 0xf1, 0x9f, 0xfb, 0x64, 0xcf, 0xa2, 0x27, 0x4e, 0x43, 0x89, 0x73, 0xf6, 0x70, 0xbf, 0x27, 0x12, 0xff, 0x9b, 0x76, 0xf0, 0x34, 0xe0, 0x7d, 0x31, 0xde, 0x3f, 0x48, 0xf7, 0x71, 0x18, 0x7a, 0xc0, 0x07, 0x8f, 0x1e, 0x22, 0xcd, 0x68, 0x51, 0x2b, 0x03, 0x5f, 0x14, 0xf4, 0x66, 0x5a, 0x67, 0x6f, 0x5f, 0x4d, 0xfc, 0x1a, 0x5b, 0xad, 0x99, 0x05, 0xc5, 0x33, 0x59, 0xda, 0xb7, 0x2a, 0x75, 0xc8, 0xcf, 0x99, 0x12, 0x1b, 0x51, 0x06, 0x19, 0x8d, 0xae, 0x26, 0x9f, 0x74, 0xd4, 0xc2, 0x57, 0x96, 0x52, 0xcb, 0x4e, 0x26, 0xbe, 0x91, 0x95, 0x0a, 0x83, 0x4e, 0xf2, 0xad, 0x4d, 0xde, 0x2e, 0x70, 0x45, 0xf3, 0x78, 0xb1, 0x77, 0x57, 0x19, 0x2b, 0x2d, 0xc8, 0xe4, 0x9d, 0xd2, 0x54, 0x91, 0xd5, 0xc2, 0x25, 0x4f, 0x80, 0xa1, 0x5f, 0x8f, 0xb9, 0x6d, 0xe6, 0x4d, 0xb8, 0x32, 0x3f, 0xac, 0xc4, 0x72, 0x1c, 0xfa, 0x18, 0xaf, 0x0a, 0x3b, 0x58, 0x37, 0xcb, 0x4f, 0xfe, 0xb2, 0x5c, 0xec, 0x2f, 0x6b, 0x5e, 0x1c, 0x4c, 0x61, 0xbc, 0x9b, 0x97, 0x44, 0xb1, 0x92, 0xee, 0x93, 0xe0, 0xf5, 0xae, 0x86, 0xaa, 0xf0, 0x1a, 0x28, 0xfa, 0x87, 0x57, 0xf0, 0xce, 0x82, 0x7d, 0x56, 0x15, 0x58, 0x05, 0x8e, 0x47, 0x0f, 0xcf, 0x5b, 0xcc, 0x1e, 0x63, 0x25, 0x28, 0xeb, 0x69, 0x1b, 0x7f, 0x1e, 0x70, 0x5a, 0x0a, 0x0c, 0x9f, 0x78, 0x60, 0x9e, 0x0a, 0xe5, 0xc8, 0x95, 0x80, 0x94, 0x20, 0x34, 0x0b, 0xf9, 0x58, 0x2a, 0x1e, 0x39, 0x2b, 0x9d, 0xc9, 0xe5, 0xfd, 0x2a, 0xbf, 0x55, 0x8a, 0x61, 0x81, 0x6b, 0xca, 0x23, 0x34, 0xc6, 0x4a, 0x7c, 0x85, 0xce, 0x4a, 0xa8, 0x32, 0xd3, 0xe2, 0xf9, 0xb6, 0x4f, 0x42, 0x5e, 0x3a, 0x2a, 0x6c, 0xfd, 0x9a, 0xc9, 0x26, 0xca, 0x43, 0xfe, 0x99, 0xae, 0x9a, 0x9b, 0xb7, 0x1a, 0x69, 0x87, 0xe8, 0x1c, 0xcc, 0x59, 0xe4, 0xb3, 0x91, 0x3d, 0x18, 0x9d, 0xdf, 0xf1, 0x9e, 0x16, 0x72, 0xfe, 0x64, 0x45, 0x12, 0x56, 0x7d, 0xf6, 0xdc, 0xfe, 0x16, 0xbe, 0x89, 0xf4, 0xb6, 0x0a, 0xd3, 0xdb, 0x45, 0x33, 0x4d, 0x58, 0xaf, 0x91, 0x8d, 0x21, 0x72, 0x3b, 0x76, 0x94, 0xa3, 0x65, 0x4f, 0xc1, 0x89, 0x8d, 0xbf, 0x19, 0xe0, 0xef, 0xfd, 0xbf, 0xd9, 0x94, 0xfb, 0x1a, 0xf7, 0x6c, 0x15, 0xbe, 0x60, 0x0a, 0xeb, 0x0d, 0xf9, 0x16, 0x2f, 0xdb, 0x85, 0xbb, 0x89, 0x1e, 0x22, 0xc5, 0xf4, 0x1e, 0xbd, 0xff, 0xf5, 0x4d, 0x58, 0x77, 0x85, 0x24, 0x58, 0x42, 0x44, 0xc3, 0xd2, 0xd1, 0x08, 0xcd, 0xc0, 0x13, 0x84, 0x37, 0xc7, 0x48, 0xda, 0xea, 0x2d, 0xc8, 0xad, 0x4b, 0x31, 0xa3, 0x15, 0x6d, 0xbf, 0x3a, 0x03, 0x96, 0xe1, 0xf7, 0xc1, 0x72, 0xcb, 0x62, 0xa9, 0x09, 0x9f, 0xd8, 0xa4, 0xb8, 0xf1, 0xc4, 0x8e, 0x4f, 0x6c, 0xf8, 0xc4, 0x8a, 0x4f, 0x9a, 0xb5, 0x54, 0xa2, 0x13, 0xf9, 0xee, 0xd2, 0x6b, 0xdb, 0x65, 0x22, 0x4c, 0xd6, 0x91, 0x84, 0x9b, 0x08, 0x25, 0x69, 0xc3, 0x3a, 0x37, 0x9e, 0x91, 0x02, 0xc8, 0x93, 0x4d, 0xe2, 0x13, 0xe4, 0x7e, 0x73, 0x61, 0x67, 0x16, 0x4d, 0x7c, 0x72, 0x26, 0xf9, 0x28, 0x86, 0x96, 0x72, 0x7c, 0x7f, 0xba, 0xc4, 0x90, 0x55, 0x4c, 0x1c, 0x4a, 0xda, 0xca, 0xa6, 0xac, 0xb6, 0x56, 0x5f, 0x1f, 0xd9, 0xa9, 0xf5, 0x08, 0x6d, 0xa4, 0x93, 0x44, 0x4f, 0x70, 0xc4, 0xb5, 0xf1, 0xde, 0xde, 0x2a, 0x94, 0x50, 0x32, 0xb0, 0x1c, 0xaa, 0x69, 0xdc, 0x51, 0xcb, 0x8b, 0xb9, 0x67, 0x5a, 0xe3, 0xc1, 0x7a, 0xad, 0x87, 0xd0, 0x7c, 0x1e, 0x73, 0xed, 0xbf, 0x3e, 0x58, 0x81, 0x6b, 0x63, 0x29, 0x72, 0xef, 0x36, 0xe4, 0x22, 0xd2, 0x36, 0xfc, 0x35, 0xa7, 0xb0, 0x20, 0x1a, 0x14, 0x3c, 0xe5, 0x5f, 0x90, 0xf3, 0x65, 0x10, 0x64, 0x69, 0xc3, 0x46, 0x92, 0x47, 0x0a, 0x0a, 0x7a, 0xf0, 0xe9, 0x3a, 0x37, 0xd6, 0x50, 0x89, 0x05, 0x69, 0x96, 0x1d, 0xd8, 0xb6, 0x03, 0x2c, 0xd5, 0x34, 0xeb, 0x5e, 0xde, 0xbe, 0x03, 0xf9, 0xbc, 0x25, 0xc8, 0x15, 0xd6, 0xf4, 0x94, 0xe4, 0xc6, 0xcc, 0x10, 0xfb, 0x79, 0x50, 0x45, 0x4b, 0xa7, 0x6d, 0x48, 0x31, 0xaa, 0x08, 0x59, 0x42, 0x0a, 0xa5, 0xda, 0x13, 0x03, 0x19, 0xf3, 0xaf, 0xf1, 0xed, 0xb5, 0x90, 0xd8, 0x98, 0x31, 0xff, 0xeb, 0x0e, 0x42, 0xf2, 0xc2, 0xf1, 0x8d, 0x5c, 0x15, 0x61, 0xd9, 0x28, 0xf2, 0xf8, 0xe0, 0x8f, 0xc7, 0x32, 0x38, 0x86, 0x15, 0xa4, 0x01, 0x43, 0x0f, 0x8e, 0x0f, 0x90, 0x6f, 0x25, 0x17, 0xe9, 0x88, 0x59, 0xbd, 0x31, 0xff, 0x1a, 0xb0, 0x2b, 0x05, 0xe3, 0x0f, 0xbe, 0x88, 0x31, 0x1e, 0x79, 0x05, 0x63, 0xd8, 0x86, 0x06, 0xc7, 0x37, 0x62, 0x0c, 0x5b, 0x85, 0x65, 0xf7, 0x70, 0xca, 0xf2, 0xd2, 0x0e, 0xa2, 0x64, 0x05, 0x7d, 0xe4, 0x57, 0x43, 0x8c, 0xc6, 0x89, 0xf5, 0xdc, 0xa6, 0x8e, 0xb4, 0xfa, 0x9f, 0x1f, 0x93, 0x9f, 0xcc, 0xa5, 0x31, 0xe9, 0x1a, 0x98, 0x57, 0x07, 0x26, 0x91, 0x0a, 0xce, 0x66, 0x67, 0x48, 0x7e, 0x1c, 0x67, 0x63, 0xb8, 0xee, 0xc9, 0xf7, 0xb1, 0xfd, 0xcc, 0x64, 0xfd, 0x53, 0x60, 0xaa, 0xc2, 0xd1, 0xda, 0x07, 0x2e, 0x73, 0xc5, 0x8c, 0x37, 0x1e, 0xf8, 0xf5, 0x66, 0xfe, 0xe6, 0x21, 0x15, 0x66, 0xef, 0x6f, 0x30, 0x5a, 0x03, 0xbd, 0xe0, 0x8b, 0x40, 0xd5, 0xbf, 0xfe, 0x08, 0x02, 0x38, 0x62, 0xab, 0x5e, 0x1f, 0xc0, 0xb0, 0x2a, 0xac, 0x9f, 0xe2, 0xf4, 0x80, 0x2b, 0x3a, 0xc0, 0xe3, 0xca, 0xfa, 0xfa, 0x00, 0xae, 0xec, 0x55, 0xb8, 0xee, 0x07, 0xb6, 0x6f, 0x78, 0xac, 0xff, 0x5b, 0x6e, 0xe2, 0xf2, 0x89, 0x4f, 0x93, 0x09, 0x83, 0x60, 0x96, 0xb0, 0xab, 0x47, 0x1a, 0x14, 0xc5, 0x11, 0xd1, 0x80, 0xd4, 0x42, 0x41, 0x2a, 0xe0, 0xe2, 0xfd, 0xf4, 0x1d, 0x10, 0x48, 0x07, 0xb3, 0x6b, 0xc7, 0x1f, 0x56, 0x38, 0x3b, 0x21, 0xd0, 0xa3, 0xe4, 0x56, 0x9a, 0xbd, 0xb9, 0x27, 0x4b, 0x19, 0xbb, 0xad, 0x8a, 0x52, 0xaa, 0x58, 0x4e, 0xfb, 0x55, 0xbe, 0x42, 0x85, 0x46, 0x75, 0x3f, 0x8f, 0x6a, 0x94, 0x9c, 0xff, 0xd0, 0xf6, 0x1b, 0xac, 0x73, 0xc0, 0xfe, 0x2b, 0xa4, 0x3f, 0x4a, 0xa5, 0xac, 0x20, 0x25, 0x29, 0x25, 0xcd, 0x87, 0xe8, 0x3f, 0xfa, 0x93, 0x3e, 0x0b, 0xad, 0x8d, 0x1c, 0xab, 0x85, 0x57, 0x01, 0x0e, 0x0f, 0x27, 0x7d, 0xf6, 0x70, 0x0c, 0xd7, 0xe0, 0x4a, 0xb9, 0x7c, 0xc9, 0xc4, 0x1f, 0x42, 0xc8, 0x5f, 0xae, 0x16, 0xab, 0x44, 0x15, 0x7b, 0xf5, 0x46, 0xfe, 0x30, 0xbb, 0x46, 0x3c, 0xed, 0x2a, 0x0a, 0xa0, 0x0c, 0xf7, 0xab, 0x03, 0x4e, 0xb2, 0x86, 0x5c, 0xc0, 0x6b, 0xc4, 0x86, 0xea, 0x05, 0xb8, 0x12, 0xbc, 0xbc, 0xe4, 0xa3, 0x90, 0x5e, 0x61, 0x0f, 0x2d, 0xc0, 0x55, 0xe0, 0xa0, 0x57, 0x5d, 0x72, 0x09, 0x57, 0x0c, 0x7b, 0x98, 0x34, 0xaa, 0x0e, 0x1d, 0xdb, 0xfc, 0xe3, 0x03, 0xb8, 0x46, 0x44, 0x5b, 0x1f, 0x0c, 0x93, 0x6e, 0xd5, 0xa1, 0xa3, 0x9b, 0x47, 0x70, 0x6d, 0x50, 0xa4, 0xd6, 0xfe, 0x97, 0x06, 0xba, 0x4c, 0x15, 0x72, 0xeb, 0xc6, 0xec, 0x5a, 0x11, 0xa4, 0xd1, 0x7a, 0x20, 0x4c, 0xa3, 0xf7, 0x90, 0xaf, 0xd0, 0xdb, 0xf0, 0x24, 0xad, 0x11, 0xf6, 0xe1, 0x7e, 0x6f, 0x24, 0xbe, 0x2e, 0x0e, 0xde, 0xe8, 0x93, 0xb4, 0x46, 0xd8, 0x87, 0x1f, 0xa4, 0xfb, 0x10, 0x0c, 0x6d, 0xc6, 0x35, 0xe2, 0x00, 0xad, 0x11, 0x86, 0x2f, 0x9c, 0x52, 0xcf, 0xdd, 0xa3, 0x62, 0x95, 0x48, 0xe6, 0xb7, 0xd2, 0xb5, 0x2d, 0x74, 0x29, 0x66, 0x20, 0x65, 0x5d, 0x16, 0x23, 0xac, 0x55, 0x1d, 0xaf, 0x23, 0x8e, 0x82, 0x46, 0x18, 0x5e, 0x47, 0x69, 0xb4, 0x85, 0xeb, 0x70, 0x94, 0x45, 0xf3, 0x47, 0xd8, 0xa5, 0xbd, 0x82, 0xe2, 0xd1, 0x38, 0x23, 0xff, 0xc9, 0xc6, 0x58, 0xc5, 0xf6, 0x11, 0xf6, 0xd4, 0x18, 0xf6, 0x03, 0xee, 0x45, 0x6c, 0x25, 0xe4, 0xb7, 0x09, 0xfd, 0x9f, 0xec, 0x0b, 0xcb, 0x52, 0x7d, 0xce, 0x99, 0x3d, 0xe0, 0x06, 0x8f, 0x74, 0x62, 0xc3, 0x6f, 0xfa, 0xf9, 0x9b, 0x4f, 0x1d, 0x8d, 0x7b, 0x1e, 0x6f, 0x96, 0xec, 0x68, 0xab, 0x80, 0xb5, 0xf0, 0xc6, 0xfd, 0xbf, 0xde, 0x94, 0x1b, 0x5d, 0x9b, 0x8c, 0xd1, 0xb5, 0x89, 0xa8, 0xec, 0x13, 0x1b, 0xfe, 0xae, 0xff, 0x5b, 0x15, 0x37, 0x1a, 0x59, 0x62, 0x3d, 0x99, 0x17, 0xc5, 0x71, 0x55, 0x27, 0xc6, 0x55, 0x7e, 0x3b, 0x30, 0x8d, 0x92, 0xc5, 0xde, 0x09, 0x6b, 0x37, 0xbb, 0x58, 0xbb, 0xb9, 0x86, 0x7c, 0xf7, 0x56, 0x90, 0xef, 0xf0, 0x4a, 0x94, 0xf0, 0x2a, 0xa1, 0x2d, 0xb7, 0xf6, 0x95, 0xff, 0x7a, 0xcc, 0xf0, 0x0c, 0x65, 0x22, 0x9f, 0xa6, 0x3c, 0x47, 0x93, 0x58, 0xa6, 0xf2, 0x74, 0x9c, 0xb4, 0xeb, 0xb0, 0xf6, 0x2a, 0xf3, 0x1d, 0xa3, 0x97, 0x5e, 0x32, 0x66, 0xec, 0x2c, 0xbf, 0x37, 0x6f, 0xc6, 0x7a, 0xc5, 0x8c, 0x9d, 0x76, 0x4a, 0x42, 0xed, 0xc9, 0x76, 0x1f, 0x1f, 0x93, 0x4d, 0x8c, 0x2b, 0x4a, 0x72, 0x15, 0xb5, 0x92, 0x9d, 0xd1, 0xc7, 0x72, 0x25, 0xcd, 0x8e, 0xf7, 0x8b, 0xed, 0x34, 0x13, 0xda, 0xb7, 0xf2, 0x09, 0x87, 0xa3, 0x47, 0x9a, 0x9a, 0x11, 0xd1, 0x1d, 0x53, 0xbc, 0xd6, 0x45, 0xb5, 0x9d, 0x28, 0x48, 0x51, 0xaa, 0x4c, 0x69, 0x72, 0xb6, 0x0c, 0x9f, 0x05, 0x93, 0x32, 0x13, 0xdf, 0x33, 0xe1, 0x95, 0xd9, 0x39, 0x93, 0x71, 0xa9, 0xda, 0xe9, 0x79, 0xda, 0x25, 0xca, 0x9d, 0x2e, 0xc7, 0x78, 0x9d, 0xe0, 0xce, 0xc5, 0xf4, 0xe6, 0xc7, 0x24, 0x34, 0xbd, 0x5c, 0xcb, 0xda, 0xf2, 0x5a, 0xb6, 0x88, 0x67, 0xaa, 0x58, 0x4b, 0x64, 0xc5, 0x9b, 0x3f, 0xa6, 0x7e, 0x7f, 0xfe, 0x06, 0x6b, 0xc9, 0x6a, 0x5a, 0x4b, 0x7e, 0xbf, 0x4b, 0xac, 0x25, 0xf8, 0xa4, 0x34, 0xef, 0xc9, 0x19, 0x7c, 0xf2, 0x78, 0xde, 0x7a, 0x32, 0xf5, 0xe4, 0x61, 0x3a, 0x3b, 0x13, 0x6b, 0x0a, 0xb7, 0xb5, 0xc3, 0x67, 0xf4, 0x6f, 0xbc, 0x13, 0xeb, 0x8c, 0x9c, 0x01, 0x52, 0x6a, 0x5e, 0x11, 0xa3, 0x1d, 0x92, 0x4a, 0x9a, 0xa1, 0xcb, 0x4d, 0x53, 0xfe, 0xa0, 0x8d, 0x33, 0xe0, 0x6e, 0xe3, 0x4c, 0xc2, 0xcd, 0xb2, 0x90, 0x33, 0xbb, 0x53, 0x4a, 0x96, 0xb7, 0x79, 0xe8, 0x33, 0x36, 0x45, 0x85, 0x8e, 0x7e, 0x05, 0x1c, 0x42, 0x2e, 0x62, 0x19, 0x86, 0xf6, 0xec, 0xcb, 0x0d, 0x8f, 0xca, 0x2e, 0xe2, 0x92, 0x5c, 0xb4, 0x52, 0xe1, 0x1a, 0xec, 0xe9, 0x20, 0xc4, 0x46, 0x2c, 0x51, 0x5e, 0xad, 0x2f, 0x9c, 0x56, 0x3a, 0x89, 0xc2, 0x70, 0x5e, 0x0d, 0xc8, 0x7d, 0xad, 0xeb, 0x91, 0x6e, 0x51, 0x61, 0x1d, 0xc6, 0x13, 0xfc, 0xa7, 0x15, 0xe7, 0x66, 0x2b, 0xfe, 0x5b, 0x7c, 0xe4, 0x1f, 0xce, 0x22, 0x38, 0x52, 0xd2, 0xdf, 0x1d, 0x22, 0x9e, 0x14, 0x47, 0x83, 0xac, 0x60, 0x2a, 0x87, 0x28, 0x95, 0x5b, 0xea, 0x60, 0x1d, 0xe3, 0x08, 0x77, 0xca, 0xe5, 0xff, 0xa9, 0x94, 0x70, 0x25, 0xb9, 0xd0, 0x47, 0x6f, 0x53, 0x4a, 0xc8, 0x1b, 0x5a, 0xc1, 0x7c, 0x3b, 0x79, 0xa5, 0x35, 0x31, 0xb7, 0x68, 0x61, 0x6e, 0xd1, 0xda, 0xa3, 0x6c, 0xd8, 0x21, 0x95, 0x2a, 0x0b, 0x18, 0x21, 0xb1, 0x34, 0x3d, 0xf7, 0x27, 0xe7, 0x40, 0x4d, 0x95, 0xc6, 0xbb, 0xa0, 0x99, 0x30, 0x59, 0x90, 0xe2, 0x87, 0x79, 0x8f, 0xe8, 0xd4, 0x86, 0xb7, 0xc5, 0xec, 0x61, 0x8c, 0x15, 0xd2, 0x3d, 0xa3, 0xa7, 0x1e, 0xa8, 0xa5, 0x67, 0xf7, 0xd0, 0xde, 0x8d, 0xf0, 0x72, 0x20, 0xe7, 0x61, 0xa5, 0xb8, 0x51, 0x02, 0xf7, 0xe4, 0x8d, 0x60, 0x9c, 0x85, 0x79, 0xad, 0x85, 0x3c, 0x1d, 0xed, 0xbe, 0x68, 0xf0, 0xd1, 0xa1, 0x2f, 0xc4, 0x89, 0xc6, 0xfe, 0x24, 0x4e, 0x74, 0x27, 0x8f, 0x4f, 0x15, 0xd7, 0x68, 0x2b, 0xae, 0x2a, 0xc5, 0xc4, 0x87, 0xd2, 0x7a, 0x8d, 0xff, 0x0e, 0xd7, 0xa0, 0x9f, 0x38, 0xd2, 0x38, 0x94, 0x93, 0x67, 0x3e, 0x83, 0x4b, 0x2d, 0xc5, 0x2f, 0xb5, 0x5e, 0x15, 0xa1, 0x0d, 0xd3, 0x3a, 0x64, 0x5c, 0x3b, 0xf0, 0x9a, 0xbd, 0x08, 0xe0, 0xea, 0x23, 0xe3, 0x9a, 0x1d, 0xed, 0x6d, 0x3b, 0x4a, 0xbc, 0xa9, 0x94, 0xc7, 0x9b, 0x06, 0x99, 0x37, 0xad, 0xb9, 0x01, 0x4f, 0xea, 0xbf, 0x01, 0x4f, 0x2a, 0x70, 0x26, 0xaa, 0xae, 0xa5, 0xc1, 0xe7, 0x05, 0xd5, 0xf4, 0x32, 0x47, 0x1a, 0xc4, 0x9e, 0x5b, 0x4b, 0xf6, 0x19, 0x48, 0xeb, 0x6c, 0x3e, 0xd2, 0xe7, 0x32, 0x67, 0x69, 0x88, 0x52, 0x74, 0x03, 0x0a, 0x12, 0x14, 0x14, 0xf9, 0x23, 0x0f, 0xa7, 0xe1, 0xfe, 0xcf, 0xf0, 0x9f, 0xd8, 0x1f, 0x5a, 0xf4, 0x47, 0xb0, 0x1c, 0x57, 0xf2, 0xe5, 0xc8, 0x7b, 0x6a, 0x06, 0xef, 0x19, 0x42, 0xde, 0x93, 0xb8, 0x42, 0xd2, 0x77, 0x09, 0xe6, 0x78, 0xd0, 0xdd, 0x59, 0x1e, 0x14, 0xcb, 0xa7, 0x0c, 0xe3, 0x1c, 0x24, 0xff, 0x66, 0x43, 0x3b, 0xa0, 0x54, 0xf0, 0xa4, 0xd1, 0xe7, 0xa6, 0x38, 0x52, 0xe2, 0x46, 0x7f, 0xb5, 0x9f, 0xf8, 0x51, 0x0c, 0xcd, 0x71, 0xa3, 0xc4, 0x89, 0xfe, 0x6a, 0x2c, 0xc7, 0x8b, 0x7a, 0xaf, 0xe7, 0x45, 0x3f, 0x1c, 0xc1, 0x5c, 0xbd, 0x4c, 0x0b, 0xaa, 0xa6, 0xf3, 0xa2, 0x1f, 0xf6, 0xe2, 0x93, 0xaa, 0xe9, 0xbc, 0xe8, 0x87, 0xf7, 0x64, 0xb9, 0x4e, 0x8c, 0xaf, 0x5e, 0xc3, 0x8b, 0xaa, 0xd7, 0xf3, 0xa2, 0x59, 0xaf, 0x92, 0x44, 0xcd, 0x49, 0x02, 0x74, 0x56, 0x61, 0xad, 0x3b, 0x0c, 0x8f, 0x7e, 0x20, 0x2d, 0x65, 0x54, 0x7d, 0xac, 0x1b, 0x8e, 0x3f, 0x53, 0xd6, 0x96, 0x40, 0x52, 0x85, 0x8e, 0x99, 0x58, 0x07, 0xa6, 0x3c, 0x68, 0x49, 0x2e, 0xe1, 0x1d, 0x4b, 0x2a, 0xc1, 0x15, 0xae, 0xaa, 0x1a, 0xc7, 0xcf, 0xbf, 0x9e, 0x01, 0xc7, 0xdf, 0x9e, 0x01, 0x25, 0x84, 0xe3, 0xe7, 0x37, 0x67, 0xa0, 0xf8, 0xef, 0xce, 0x88, 0x1d, 0xc9, 0x8c, 0xa9, 0x1a, 0xdb, 0x87, 0xac, 0x4f, 0xd2, 0x16, 0xbf, 0xfa, 0xe2, 0x2f, 0xbe, 0x25, 0x57, 0xc4, 0xf1, 0xae, 0x38, 0x6d, 0x33, 0xf4, 0xff, 0xbe, 0xb7, 0x52, 0xae, 0x60, 0x9f, 0x36, 0x19, 0x53, 0x48, 0xc4, 0x2c, 0xe2, 0x98, 0xaf, 0x7e, 0x4b, 0x76, 0x53, 0xcc, 0x92, 0x5c, 0xcc, 0x2d, 0x2b, 0x65, 0xb7, 0xfa, 0x53, 0x9c, 0xe9, 0x29, 0xf3, 0x3f, 0x1f, 0xc5, 0x15, 0xf6, 0x07, 0x3e, 0x49, 0x8c, 0x9b, 0xf3, 0x61, 0x6e, 0x03, 0x77, 0x3a, 0x94, 0x1b, 0x3f, 0xf6, 0x2f, 0x30, 0x7e, 0x16, 0xd0, 0xf8, 0xf9, 0xe0, 0x0c, 0xf3, 0x8c, 0xdf, 0x9b, 0xd7, 0x04, 0xa6, 0x68, 0x67, 0x76, 0xc4, 0xe7, 0xa5, 0x43, 0xdc, 0x40, 0x93, 0x38, 0xef, 0xc7, 0xab, 0xc6, 0xcf, 0x48, 0xe5, 0x07, 0x62, 0x14, 0x32, 0x5f, 0x60, 0xe5, 0x6b, 0x4f, 0x6e, 0x95, 0x05, 0x81, 0x7a, 0x4b, 0x7e, 0x10, 0x6f, 0xb8, 0xc2, 0x96, 0xf2, 0x0a, 0x5b, 0x9e, 0xb7, 0xc2, 0xba, 0xd3, 0x71, 0x1c, 0x5d, 0xc1, 0x74, 0x54, 0xac, 0xac, 0x1f, 0x2e, 0xcf, 0x95, 0x67, 0xd6, 0x17, 0xa8, 0x17, 0xaf, 0xac, 0x1f, 0x14, 0xb1, 0x1d, 0xb1, 0xc0, 0x17, 0xf1, 0x60, 0xcd, 0xdc, 0xc6, 0x98, 0xbb, 0x66, 0xcd, 0x3a, 0x17, 0xbe, 0xc1, 0x98, 0xe3, 0x35, 0xeb, 0xec, 0xa4, 0x18, 0x73, 0xd7, 0xac, 0x4c, 0xb8, 0x66, 0x9d, 0x7d, 0x27, 0x6f, 0xdc, 0x4d, 0x5b, 0xb3, 0xce, 0x1e, 0x11, 0x63, 0x2f, 0xbb, 0x3a, 0xe1, 0xd7, 0x2f, 0x6c, 0x35, 0x31, 0xae, 0x27, 0xa5, 0x18, 0x7e, 0x0b, 0xe9, 0x44, 0xa4, 0x08, 0x7f, 0xa9, 0xbc, 0x36, 0x41, 0x55, 0x2a, 0x97, 0xe7, 0xe4, 0x49, 0x0f, 0xd7, 0x7d, 0xfa, 0x8a, 0x17, 0xbc, 0x7e, 0xc5, 0x23, 0x1c, 0xdf, 0xff, 0xc4, 0x4a, 0xe7, 0x98, 0x5a, 0xe9, 0xa6, 0xb4, 0xe6, 0xa7, 0xf4, 0xe3, 0xaf, 0x0e, 0xfd, 0x71, 0x2f, 0x8f, 0x59, 0x9b, 0x87, 0x6b, 0x74, 0xee, 0xd7, 0x1b, 0xa1, 0x3e, 0xa1, 0x59, 0xef, 0xcc, 0xed, 0xa9, 0x5f, 0xed, 0xcd, 0xda, 0x48, 0x3c, 0x72, 0xd8, 0x69, 0xec, 0x5a, 0x1a, 0x4f, 0x36, 0x09, 0x9b, 0x88, 0x6b, 0xfd, 0x43, 0xe2, 0x5c, 0x25, 0x3d, 0x10, 0x47, 0x45, 0x27, 0x2c, 0xef, 0xf9, 0xb3, 0x06, 0xe8, 0x95, 0xe2, 0x91, 0x29, 0xf4, 0xec, 0x79, 0xaa, 0x5c, 0xd5, 0xab, 0xcf, 0x8b, 0xc8, 0x07, 0x6f, 0xef, 0x93, 0xfb, 0xe5, 0xc3, 0x81, 0xb0, 0x04, 0x6c, 0xbb, 0xf6, 0xbf, 0xd3, 0x26, 0x73, 0x44, 0x3f, 0x7c, 0x7b, 0x44, 0x3e, 0x82, 0x2d, 0x29, 0xcb, 0xaf, 0x46, 0x3b, 0xe5, 0xd7, 0xf0, 0x2a, 0x20, 0x8f, 0xe3, 0xaf, 0x2a, 0x1f, 0x9d, 0xd7, 0xe7, 0x90, 0xd4, 0xb9, 0xf2, 0xb1, 0x2f, 0xe3, 0xa0, 0x94, 0x8f, 0xe3, 0xef, 0x12, 0xf9, 0x37, 0xf8, 0xbb, 0x54, 0x3e, 0x81, 0xbf, 0x51, 0xf9, 0xff, 0x28, 0xea, 0x6d, 0xa4, 0xe9, 0x97, 0xc9, 0xe1, 0x26, 0x9f, 0xc6, 0x35, 0xb5, 0x8a, 0x75, 0x7d, 0xc9, 0xa3, 0xf3, 0xf8, 0x0d, 0xcb, 0x12, 0xc8, 0x8b, 0x0d, 0x14, 0x7f, 0xd1, 0xc4, 0xe4, 0xb3, 0x8c, 0xb6, 0x5c, 0x9e, 0x43, 0x68, 0x2e, 0x8d, 0x77, 0xca, 0x67, 0x29, 0x9d, 0x87, 0xcb, 0xf3, 0x50, 0x99, 0x31, 0xb4, 0xc0, 0xc4, 0xa1, 0xa6, 0xeb, 0xe3, 0x17, 0x94, 0xe7, 0x3d, 0x21, 0xbd, 0x14, 0xe1, 0xaf, 0x54, 0x26, 0x3d, 0x71, 0xd2, 0x17, 0x0f, 0xfa, 0x60, 0x6e, 0xb5, 0x0f, 0x9c, 0xc4, 0xa3, 0xd0, 0xce, 0xe9, 0x48, 0x74, 0x4d, 0xb1, 0xb1, 0xfb, 0xe9, 0xb8, 0x66, 0xf7, 0xd3, 0x96, 0xf5, 0x1f, 0x18, 0x0a, 0xe1, 0x3a, 0x51, 0x4e, 0xf2, 0x49, 0xb5, 0xe0, 0xce, 0x1d, 0x28, 0xed, 0x4a, 0x50, 0xfc, 0x57, 0x86, 0xad, 0x7a, 0xfd, 0x39, 0x8c, 0xb5, 0x1e, 0xdc, 0xb4, 0xd2, 0x2f, 0x16, 0x98, 0xe2, 0xdb, 0x08, 0x51, 0x01, 0x66, 0xeb, 0x7b, 0xfc, 0xb1, 0xca, 0xb8, 0xbe, 0x97, 0xef, 0x4a, 0xf5, 0xb1, 0xca, 0x2e, 0xfc, 0x3d, 0xc8, 0x77, 0xb3, 0xf4, 0xc3, 0x95, 0x51, 0xfd, 0x55, 0xbe, 0x56, 0xf4, 0x71, 0x7c, 0x52, 0xac, 0x1f, 0xf3, 0x15, 0xf8, 0xac, 0x8c, 0x45, 0xf6, 0x63, 0x6c, 0x37, 0x33, 0xef, 0xc4, 0x97, 0xa6, 0xd7, 0x57, 0x37, 0x62, 0x0e, 0x6f, 0x67, 0x51, 0xcb, 0x8d, 0xb4, 0x0b, 0xf4, 0xb7, 0xf9, 0xdf, 0xa4, 0x9f, 0xae, 0x6c, 0xd4, 0xcf, 0xf2, 0xa9, 0xd6, 0x15, 0x9f, 0xec, 0x0b, 0xd3, 0xb3, 0xc5, 0x13, 0x57, 0x5f, 0x48, 0x6e, 0xe3, 0xb0, 0xcb, 0x46, 0x98, 0x09, 0xef, 0x17, 0x60, 0x8c, 0x59, 0x02, 0x93, 0xa8, 0x7d, 0x6b, 0xd5, 0x0f, 0xf1, 0x99, 0x61, 0x4b, 0x69, 0x9c, 0x8a, 0xf8, 0xab, 0x36, 0x0a, 0x2f, 0x3c, 0x57, 0x97, 0xb1, 0x36, 0x9d, 0xdc, 0x74, 0xae, 0xbc, 0x5c, 0x7f, 0x5a, 0x20, 0x70, 0xfb, 0x6b, 0xd8, 0x86, 0xc3, 0x07, 0x4a, 0xfd, 0xfb, 0xf0, 0x64, 0xc5, 0x2c, 0xf3, 0x46, 0x6c, 0xf5, 0xc3, 0x98, 0x53, 0xb9, 0xb3, 0x85, 0x57, 0x83, 0x72, 0x85, 0x71, 0xab, 0xf4, 0x72, 0xa4, 0x16, 0x2d, 0xe4, 0xef, 0x29, 0x49, 0x1a, 0x43, 0x45, 0xbc, 0x0b, 0xe7, 0x68, 0x7f, 0xe8, 0xa5, 0x87, 0x52, 0x6f, 0x08, 0x6c, 0xeb, 0xac, 0xdd, 0x0f, 0x9f, 0x1f, 0x75, 0x40, 0x9b, 0xb3, 0x53, 0x4a, 0x0a, 0xab, 0xec, 0x47, 0x0e, 0xe3, 0xfb, 0xcf, 0x46, 0x77, 0x48, 0x86, 0xd5, 0x8f, 0xf0, 0xcb, 0xcd, 0xe7, 0xf1, 0x31, 0x77, 0x37, 0x34, 0x85, 0x7c, 0x90, 0xa8, 0x10, 0xa7, 0x49, 0x6d, 0xca, 0x6a, 0xe1, 0x6b, 0x18, 0x69, 0xfa, 0x25, 0x57, 0x07, 0x9f, 0xe5, 0xc6, 0x04, 0x0a, 0x77, 0x23, 0xf2, 0x12, 0xca, 0x92, 0x29, 0x0e, 0x03, 0xe7, 0x0f, 0xc6, 0xe5, 0x67, 0x4f, 0xb3, 0x25, 0xce, 0x97, 0xd3, 0xe4, 0x99, 0xd4, 0xd4, 0x6b, 0x22, 0xdd, 0x83, 0x2b, 0x6a, 0x22, 0x96, 0xb6, 0x2a, 0xd9, 0x18, 0xbb, 0x08, 0x0d, 0xcc, 0xf9, 0x09, 0x38, 0x7d, 0x18, 0x82, 0x5c, 0x46, 0x02, 0xfc, 0xb8, 0xda, 0x87, 0x7c, 0x8d, 0x10, 0x8c, 0xbc, 0x2f, 0x75, 0xb0, 0x3f, 0xe2, 0xd5, 0xf2, 0x4a, 0x08, 0x3b, 0x2a, 0x73, 0x18, 0x61, 0x15, 0xae, 0xd5, 0x72, 0x86, 0xa9, 0x48, 0x71, 0x1e, 0x1e, 0x99, 0x33, 0x67, 0x29, 0x5a, 0x29, 0x35, 0xa4, 0x8b, 0x98, 0x23, 0x9c, 0x25, 0x78, 0xc4, 0x6f, 0xba, 0xb3, 0xb6, 0x26, 0x94, 0x2f, 0xd3, 0xba, 0xb9, 0x74, 0x85, 0x52, 0x0a, 0x95, 0x61, 0x67, 0xae, 0x34, 0x4f, 0xe4, 0xd5, 0xe3, 0x10, 0x85, 0xe6, 0x6a, 0xb9, 0x8e, 0xce, 0xd4, 0x85, 0xff, 0xeb, 0xf8, 0xef, 0xc2, 0x74, 0xa2, 0xeb, 0xa6, 0xfd, 0x4d, 0xcf, 0x02, 0x58, 0xee, 0xed, 0x02, 0xd2, 0xe0, 0x2d, 0x4e, 0xec, 0x94, 0x92, 0xa9, 0x75, 0x91, 0xb3, 0xf0, 0xb6, 0x33, 0x03, 0xed, 0x41, 0x2f, 0xd8, 0xe2, 0x07, 0x4a, 0xbc, 0x30, 0x37, 0xbe, 0x91, 0x7d, 0x4d, 0x97, 0x90, 0x1d, 0x51, 0xeb, 0x40, 0xfc, 0xe5, 0xf5, 0x11, 0x5a, 0x6d, 0x1f, 0x3b, 0x82, 0xa9, 0x36, 0x68, 0xc5, 0x37, 0x08, 0x55, 0xe7, 0xab, 0x98, 0x73, 0xc6, 0x68, 0x6f, 0x97, 0x93, 0x5a, 0x3b, 0x23, 0xf5, 0x08, 0x2f, 0xb1, 0xac, 0x01, 0x57, 0x8c, 0x52, 0xd8, 0x6c, 0xf2, 0x37, 0x65, 0x20, 0x6e, 0xdb, 0xb0, 0x74, 0x61, 0x71, 0xee, 0xc9, 0x54, 0xad, 0x03, 0xb9, 0x99, 0xf9, 0xe0, 0x08, 0xce, 0x87, 0xa2, 0x00, 0xae, 0x56, 0x7e, 0x79, 0x68, 0xf1, 0x6d, 0x2a, 0xd8, 0x89, 0x37, 0xa8, 0x96, 0xb6, 0xab, 0xb7, 0xd5, 0x81, 0xad, 0xc4, 0x0d, 0xd5, 0xf1, 0x8d, 0xdb, 0x16, 0x6f, 0xab, 0xbb, 0x2d, 0x0a, 0x99, 0x62, 0x37, 0xdc, 0x11, 0x1f, 0x18, 0x56, 0x87, 0xa3, 0xb7, 0x45, 0x60, 0x8d, 0xeb, 0xe6, 0x8a, 0x9b, 0xf9, 0x2c, 0x42, 0x71, 0x76, 0xf3, 0xea, 0xc7, 0x36, 0x44, 0xfe, 0x39, 0xb5, 0xb8, 0x26, 0xec, 0x53, 0xbb, 0xa2, 0x35, 0xf3, 0x41, 0x0e, 0xe3, 0x1a, 0xb7, 0xb7, 0xbe, 0xab, 0xba, 0x7a, 0x3e, 0x98, 0x42, 0x45, 0x7b, 0xea, 0xd6, 0x78, 0x31, 0x47, 0x73, 0xd0, 0x03, 0xf2, 0xee, 0xc8, 0x1a, 0x65, 0x24, 0xd6, 0x2d, 0x87, 0x60, 0x34, 0xda, 0x2d, 0x07, 0x0b, 0xf7, 0xd5, 0x65, 0xe4, 0xea, 0x19, 0x7b, 0x23, 0x19, 0x39, 0x60, 0x1e, 0x8d, 0x76, 0x15, 0x47, 0x55, 0xcd, 0xa3, 0xcc, 0x71, 0xe2, 0x7b, 0x0a, 0x5b, 0x4e, 0xf7, 0x48, 0xda, 0x1a, 0x7f, 0xff, 0x6d, 0xab, 0x90, 0xa6, 0xc9, 0x7c, 0x1a, 0x67, 0xaa, 0x91, 0x5b, 0xeb, 0x6f, 0xab, 0x07, 0x73, 0xf3, 0x60, 0x8f, 0xb4, 0x6b, 0x15, 0x98, 0x33, 0x65, 0xfe, 0x47, 0x6a, 0xa4, 0x16, 0x0a, 0x33, 0x62, 0xe0, 0x2f, 0x59, 0x73, 0xab, 0xcd, 0x83, 0x35, 0x73, 0x46, 0x63, 0x99, 0x62, 0xff, 0xfd, 0x58, 0x0b, 0xb9, 0x35, 0x76, 0x5b, 0x0c, 0x9f, 0x45, 0xc4, 0x93, 0x97, 0x30, 0x66, 0xa6, 0xb8, 0xa5, 0xce, 0xbf, 0x91, 0x9e, 0x19, 0xef, 0xf1, 0xb3, 0xa6, 0xb7, 0x4c, 0x57, 0x98, 0xda, 0x64, 0xc8, 0x67, 0x82, 0x8b, 0xf4, 0x0b, 0xba, 0x80, 0x7c, 0xdc, 0xbb, 0xaa, 0x91, 0x43, 0x75, 0x78, 0xb0, 0x2d, 0xfa, 0x43, 0x2a, 0x52, 0x80, 0x38, 0x9f, 0x1f, 0x66, 0xa6, 0x79, 0x2e, 0xb0, 0xea, 0x19, 0xfe, 0x2f, 0xd7, 0xd7, 0xf2, 0x7f, 0x81, 0xde, 0xc7, 0xff, 0x33, 0xf4, 0x4d, 0x95, 0x4d, 0xfa, 0x20, 0x5f, 0x97, 0xe9, 0x5b, 0xf8, 0xec, 0x73, 0x88, 0xef, 0x6e, 0xd2, 0xb7, 0xf9, 0xeb, 0x90, 0x2e, 0x3d, 0xce, 0x77, 0x0e, 0xfd, 0x49, 0xa4, 0x3e, 0x38, 0xcf, 0xf9, 0xae, 0x44, 0xff, 0x01, 0xc6, 0x7b, 0x8e, 0x70, 0xc9, 0x19, 0x3b, 0x45, 0x50, 0xba, 0x97, 0xe3, 0x1b, 0xe3, 0x2f, 0xc7, 0x36, 0xba, 0x3d, 0x72, 0x0b, 0x96, 0x22, 0xc4, 0xa5, 0xd8, 0xcd, 0xf9, 0xcb, 0x20, 0xe9, 0xbb, 0x7b, 0x74, 0x7c, 0x67, 0x8f, 0x41, 0x8f, 0xf6, 0x62, 0xae, 0x63, 0x06, 0xfd, 0x3b, 0xc8, 0x14, 0xef, 0xb0, 0x41, 0xff, 0x5e, 0xc5, 0x3b, 0x07, 0x9d, 0xca, 0x32, 0xfd, 0x3b, 0x56, 0x59, 0x47, 0x27, 0xb3, 0x4c, 0xff, 0x4e, 0x56, 0xc6, 0x74, 0xb6, 0x29, 0xee, 0x29, 0x1c, 0xf9, 0x5e, 0xca, 0x42, 0x5a, 0xb3, 0x98, 0xe2, 0x7a, 0x9f, 0x4c, 0xf9, 0x08, 0x8a, 0xb8, 0x78, 0xe2, 0xf2, 0xc5, 0xe4, 0x36, 0xd6, 0x5d, 0x24, 0xbc, 0xa1, 0x87, 0xf0, 0x79, 0x0f, 0x3f, 0xcf, 0xf0, 0xf3, 0x7f, 0x49, 0x6e, 0x5b, 0xf4, 0x3e, 0xdc, 0xfa, 0xaf, 0xbf, 0x70, 0xcf, 0x3a, 0xfe, 0xbd, 0x79, 0xfd, 0x71, 0x8e, 0x97, 0xb2, 0x09, 0x6d, 0xb7, 0xcb, 0xeb, 0x91, 0xb3, 0x5d, 0xca, 0xb1, 0xaf, 0x88, 0xf3, 0x5c, 0x28, 0xc4, 0xd0, 0x87, 0x2a, 0x90, 0x22, 0xb6, 0x6e, 0xc4, 0x72, 0x5c, 0x59, 0x74, 0x4e, 0x3f, 0x4b, 0xe7, 0xcc, 0x34, 0x47, 0xb3, 0x67, 0xc8, 0x18, 0x4b, 0xd6, 0xcf, 0xa2, 0xc4, 0x57, 0x3c, 0xb4, 0x11, 0x73, 0x3b, 0xcf, 0x67, 0x42, 0x81, 0x38, 0xf2, 0x3f, 0x97, 0x6b, 0x14, 0x7c, 0x93, 0x2d, 0x53, 0x85, 0xd6, 0x5b, 0xb9, 0xde, 0x6c, 0x60, 0x9f, 0xb4, 0xe5, 0x10, 0xa4, 0x16, 0x80, 0xad, 0xac, 0x12, 0xee, 0x70, 0x57, 0x22, 0x5f, 0x81, 0xdc, 0x3c, 0xdb, 0x25, 0x26, 0xc9, 0xf3, 0x85, 0x79, 0xd2, 0x62, 0x02, 0x2b, 0xe1, 0x42, 0xc5, 0x1a, 0x78, 0x05, 0xfe, 0x0a, 0xf2, 0xc6, 0x99, 0xd0, 0x6a, 0xb8, 0x54, 0x5b, 0x09, 0x97, 0xe3, 0x3f, 0x77, 0xce, 0x36, 0x6f, 0xd0, 0x75, 0x7d, 0x39, 0x96, 0xa7, 0x1d, 0xcb, 0x23, 0x89, 0xde, 0xae, 0x8c, 0xe8, 0x6d, 0xb9, 0x1e, 0x5f, 0x6e, 0x94, 0x6e, 0x65, 0x8f, 0x34, 0xb4, 0x05, 0xcb, 0xd6, 0xc1, 0xf7, 0x26, 0x3d, 0x83, 0xf7, 0x0f, 0x50, 0xcb, 0xf0, 0x7d, 0x21, 0x8e, 0x88, 0x26, 0x7d, 0xbd, 0x31, 0x1a, 0xfa, 0x2a, 0x17, 0xe9, 0xfd, 0x86, 0x07, 0x8b, 0x4d, 0x3c, 0x1a, 0x06, 0x0d, 0x0f, 0x16, 0x5b, 0x0c, 0x0f, 0x16, 0x62, 0x74, 0x7c, 0x45, 0xdf, 0x66, 0xb4, 0xbf, 0x68, 0x83, 0x52, 0x1c, 0x1f, 0xaa, 0x31, 0x3a, 0x6e, 0xd2, 0x7f, 0xe0, 0x6f, 0xc0, 0x91, 0xf3, 0x5c, 0xe5, 0x6a, 0xb9, 0x45, 0x6f, 0xa7, 0x7a, 0xe5, 0x8d, 0x92, 0x83, 0xf1, 0x4d, 0xf1, 0x83, 0xb1, 0x4d, 0xb8, 0x5a, 0xed, 0x16, 0xa3, 0x84, 0xb0, 0x4a, 0x8d, 0xd5, 0x6a, 0x37, 0x63, 0x09, 0x65, 0x47, 0xc8, 0xa2, 0xa9, 0x11, 0xc2, 0xba, 0x96, 0x53, 0x23, 0xa4, 0xce, 0x18, 0x1f, 0x0a, 0x8e, 0x8f, 0x2e, 0xbd, 0xdd, 0x18, 0x21, 0xb3, 0xc4, 0x08, 0x21, 0xad, 0x56, 0x31, 0x1a, 0xea, 0x27, 0x2e, 0xbd, 0x9b, 0x1c, 0x66, 0x1f, 0x37, 0xa5, 0xce, 0x05, 0x7a, 0x1b, 0x72, 0x6a, 0x2e, 0x4c, 0x47, 0xc3, 0x18, 0x92, 0x31, 0x1e, 0x86, 0x6f, 0x55, 0xe1, 0x07, 0x3c, 0x0a, 0xec, 0x42, 0x87, 0xf1, 0x52, 0x6f, 0xf3, 0xd6, 0x68, 0x4c, 0x93, 0xd7, 0x4b, 0xf1, 0xfb, 0xfd, 0xf5, 0x58, 0x8b, 0x76, 0xd6, 0x3a, 0xa2, 0xd6, 0x2f, 0xc2, 0x32, 0x53, 0x7b, 0x37, 0x5f, 0xe7, 0x17, 0x24, 0xdb, 0xd6, 0x05, 0xfa, 0x4a, 0xa3, 0x4d, 0x33, 0x5c, 0xae, 0x1e, 0xa3, 0x55, 0xd7, 0xf2, 0xdd, 0x7a, 0xa3, 0x5d, 0xfb, 0xb8, 0x5d, 0xfb, 0x8d, 0x76, 0xdd, 0xd4, 0xab, 0x62, 0xaf, 0xe5, 0x66, 0xe0, 0xb4, 0xf9, 0xd7, 0x90, 0x9b, 0x7f, 0x25, 0xa2, 0x7d, 0x69, 0xa4, 0xfa, 0x2a, 0xe5, 0x16, 0x92, 0x50, 0x71, 0xa5, 0xc6, 0x9e, 0x4f, 0x8e, 0xfe, 0xa1, 0xbf, 0x8a, 0x91, 0x7d, 0xd2, 0x6b, 0x8c, 0xba, 0x59, 0x8d, 0xba, 0x8d, 0x7e, 0x7c, 0x1a, 0x6b, 0xf7, 0x64, 0x6e, 0x8c, 0xcf, 0xc0, 0x90, 0x6d, 0x38, 0xc6, 0x1b, 0xae, 0x1d, 0xe3, 0x1f, 0x3f, 0x4b, 0xf2, 0xd1, 0xdf, 0x9d, 0xd3, 0xaf, 0x18, 0xbd, 0xe2, 0xc8, 0xf5, 0x0a, 0x8d, 0x1f, 0xee, 0x15, 0xd6, 0x15, 0xae, 0x84, 0x27, 0x49, 0x0b, 0x9f, 0xc7, 0xb4, 0x39, 0x1a, 0xa3, 0xb7, 0x78, 0xad, 0x2c, 0x4d, 0xd9, 0x7b, 0x0a, 0xc7, 0x9e, 0x87, 0x52, 0xe1, 0xd9, 0x49, 0x72, 0xfc, 0x5f, 0x6a, 0x29, 0xed, 0x3f, 0xd7, 0x52, 0x84, 0x5c, 0xcf, 0xe8, 0xc4, 0xa3, 0x97, 0xda, 0x8c, 0xb6, 0xea, 0xbc, 0xb6, 0xad, 0x2e, 0xee, 0xc5, 0xb6, 0x7a, 0x3a, 0xbf, 0xad, 0x2e, 0x76, 0x60, 0x5b, 0x45, 0xaf, 0x6d, 0xab, 0x8b, 0xf7, 0x7e, 0xa1, 0x76, 0x7a, 0x1a, 0x63, 0xd6, 0x88, 0xb9, 0x1f, 0x8d, 0x91, 0x2d, 0xb0, 0x74, 0x53, 0xba, 0x82, 0xbd, 0x38, 0x16, 0xe2, 0x4a, 0xef, 0x68, 0xe9, 0x67, 0x74, 0xf3, 0x2f, 0xf9, 0x6c, 0xbe, 0x02, 0x7f, 0x03, 0x9d, 0x36, 0x27, 0x47, 0x27, 0x2a, 0xfe, 0x6e, 0xcc, 0xb0, 0xe8, 0x03, 0x8c, 0xed, 0xe4, 0xd8, 0xe4, 0x2d, 0x85, 0x2c, 0xd4, 0x8b, 0xf2, 0x63, 0x7e, 0x72, 0x25, 0x17, 0xb3, 0x30, 0x97, 0xee, 0x4c, 0x4a, 0x77, 0x99, 0x48, 0xf7, 0xcf, 0xa6, 0xc5, 0x7e, 0x2d, 0x17, 0xdb, 0x94, 0x8b, 0x6d, 0xa1, 0xd8, 0xed, 0x22, 0x76, 0xc9, 0xb4, 0xd8, 0x4f, 0xe7, 0x62, 0xcb, 0xb9, 0xd8, 0x66, 0x8a, 0xdd, 0x26, 0x62, 0x17, 0x4f, 0x8b, 0xdd, 0x9b, 0x8b, 0x5d, 0x80, 0xb1, 0x5d, 0x1c, 0x7b, 0x06, 0xc5, 0x5e, 0x2a, 0x62, 0x7f, 0x79, 0x5a, 0xec, 0x58, 0x36, 0x2e, 0xcd, 0x27, 0xb8, 0x50, 0x35, 0xdb, 0xfc, 0x40, 0x1e, 0x0d, 0x9b, 0x91, 0x47, 0x53, 0xb3, 0xe3, 0x44, 0x32, 0xc6, 0x49, 0x81, 0xb1, 0x7e, 0x15, 0x4e, 0x1b, 0x21, 0x44, 0xaf, 0xe8, 0xee, 0x33, 0x28, 0x56, 0x65, 0x1f, 0xd2, 0xcd, 0x7e, 0x63, 0x94, 0x94, 0xe9, 0xdb, 0x72, 0xd4, 0xea, 0x26, 0xfd, 0x49, 0x1e, 0x31, 0xd3, 0x56, 0xb3, 0x1b, 0x8c, 0x18, 0x42, 0xcd, 0x72, 0x7a, 0xc4, 0x88, 0x51, 0x8d, 0x11, 0x33, 0x23, 0x3b, 0x62, 0x2e, 0x3c, 0x84, 0x23, 0xe6, 0xb9, 0xdc, 0x88, 0x21, 0x3c, 0xa5, 0x6a, 0x1c, 0x31, 0xa5, 0xd7, 0x8e, 0x98, 0x0b, 0x71, 0x81, 0x16, 0x2c, 0xc6, 0x01, 0xd7, 0x7c, 0x8b, 0x31, 0x7e, 0xe2, 0x3c, 0x7e, 0xa6, 0x6a, 0x8d, 0xab, 0xa4, 0x51, 0xdb, 0xbd, 0xfc, 0x6f, 0x66, 0x39, 0x80, 0xea, 0xf9, 0x2a, 0xd7, 0x73, 0xdc, 0xa8, 0xe7, 0x31, 0xae, 0xe7, 0x71, 0xa3, 0x9e, 0x27, 0x7b, 0x15, 0x9c, 0x17, 0x6f, 0x1b, 0xb5, 0x7c, 0x07, 0x9f, 0x9c, 0x36, 0x6a, 0x79, 0x96, 0x6b, 0x79, 0x3e, 0x7f, 0x9c, 0x7f, 0x74, 0x0c, 0x4b, 0x4d, 0x36, 0x16, 0xa5, 0x84, 0x46, 0x72, 0x58, 0x25, 0xea, 0xec, 0x64, 0xdd, 0xfd, 0xab, 0x71, 0xe4, 0x35, 0xfb, 0x16, 0xbf, 0x0f, 0x87, 0xdd, 0xb3, 0x68, 0x1f, 0x10, 0x9e, 0xbc, 0x77, 0xf7, 0x89, 0xef, 0x6b, 0x2b, 0x14, 0x57, 0xfa, 0x1e, 0xc6, 0x7e, 0x9b, 0xc0, 0xd2, 0x35, 0xea, 0xfb, 0xc8, 0x1b, 0x58, 0x4f, 0x01, 0x69, 0xcc, 0x33, 0x7d, 0x7f, 0xad, 0x72, 0xb5, 0x64, 0xd3, 0x8f, 0x50, 0x3a, 0x79, 0x58, 0x76, 0x84, 0x08, 0x37, 0x9a, 0x43, 0xa9, 0x2b, 0xca, 0x72, 0xbc, 0xce, 0xfa, 0x1c, 0xbf, 0xdb, 0xe8, 0x6c, 0x43, 0xc9, 0x94, 0xb8, 0xd4, 0x37, 0xf6, 0x6c, 0x49, 0x3d, 0x81, 0xfc, 0x94, 0x4d, 0xd8, 0x1e, 0xfc, 0x7e, 0x14, 0x29, 0xb0, 0xca, 0xda, 0x40, 0x5e, 0x43, 0xaa, 0x50, 0x2a, 0x50, 0x8a, 0x5e, 0x6b, 0x72, 0x86, 0x37, 0x94, 0xff, 0xc3, 0xcf, 0xea, 0x85, 0xe7, 0x0b, 0x94, 0x4c, 0xa5, 0x47, 0x7d, 0x52, 0x72, 0xb8, 0x79, 0x6b, 0x2f, 0x34, 0x48, 0x07, 0x36, 0xbe, 0xb8, 0xe1, 0xed, 0xef, 0xb5, 0x0e, 0xa4, 0xde, 0xed, 0xb9, 0x79, 0x6c, 0x03, 0xf2, 0x4a, 0xc2, 0x06, 0x38, 0x60, 0xc8, 0x23, 0x2e, 0x94, 0xed, 0x9c, 0xa4, 0x81, 0xcf, 0x7e, 0x22, 0xe4, 0xd4, 0x72, 0xcd, 0x86, 0x12, 0xca, 0x71, 0x42, 0x23, 0x87, 0xb7, 0x35, 0x6b, 0xfd, 0xfb, 0xd2, 0x32, 0xbc, 0x96, 0xa5, 0x15, 0x8c, 0xc9, 0xf8, 0xb0, 0x1b, 0xe6, 0x35, 0x82, 0xb5, 0x6a, 0x20, 0x39, 0x7a, 0x7e, 0xac, 0x02, 0x94, 0x68, 0xe4, 0x74, 0x61, 0x50, 0x31, 0x8d, 0x6f, 0x3a, 0xde, 0x7f, 0x7c, 0xd3, 0xf1, 0x4d, 0xaf, 0x1f, 0x9c, 0xc2, 0x1e, 0xd0, 0xad, 0xed, 0xbc, 0x17, 0xeb, 0xab, 0xa3, 0x1d, 0xd8, 0xa6, 0x72, 0x0d, 0xce, 0xcf, 0xa5, 0x7f, 0xce, 0x5d, 0x76, 0x0b, 0x5b, 0xf7, 0x72, 0xcc, 0xbd, 0x2c, 0x2f, 0xf7, 0x6a, 0xcd, 0xc2, 0x2d, 0x7c, 0x5c, 0x33, 0xf3, 0x8e, 0xeb, 0x32, 0x92, 0xa7, 0xce, 0x2f, 0xad, 0x00, 0x67, 0x6e, 0xe7, 0x55, 0x37, 0x71, 0xba, 0xa5, 0x98, 0x6e, 0x31, 0xca, 0x99, 0x98, 0xee, 0x87, 0x87, 0xe8, 0x9f, 0x39, 0x79, 0xc8, 0xa6, 0x5b, 0x83, 0xe9, 0xb2, 0x07, 0x9b, 0x93, 0x15, 0xc0, 0xa5, 0x2d, 0x72, 0x16, 0x1c, 0xdd, 0xf8, 0xc6, 0x86, 0x37, 0x36, 0x2a, 0x75, 0xaf, 0xbf, 0x1c, 0x39, 0xef, 0x06, 0xa5, 0xa3, 0x30, 0xd8, 0xbe, 0x55, 0xb3, 0xef, 0x79, 0x0e, 0xac, 0x29, 0xf3, 0x68, 0x07, 0x58, 0x50, 0x8e, 0x89, 0x38, 0x1d, 0xa9, 0x0f, 0xa2, 0x75, 0x9a, 0xbc, 0x4e, 0xc2, 0x36, 0xa7, 0x7d, 0xa0, 0xce, 0xe6, 0xad, 0xfe, 0x82, 0xa6, 0xb7, 0x20, 0x9c, 0xc5, 0x6b, 0x5e, 0x58, 0x4b, 0x7a, 0x9f, 0x06, 0xb6, 0x53, 0xc6, 0x63, 0x33, 0x93, 0xb7, 0x8c, 0x4b, 0x4a, 0x7d, 0x4e, 0xd2, 0x58, 0x16, 0x39, 0x2b, 0xb9, 0x5e, 0x3c, 0x2b, 0x79, 0x71, 0x65, 0x7c, 0xc6, 0x95, 0x91, 0x5c, 0xd1, 0x68, 0x95, 0x49, 0x7e, 0x00, 0xa4, 0x59, 0x2f, 0xf7, 0x49, 0x1a, 0x48, 0x83, 0x89, 0x07, 0xd2, 0x89, 0xc4, 0x0e, 0x70, 0xa6, 0x63, 0xec, 0xd9, 0xea, 0x12, 0xfb, 0x09, 0x63, 0x9d, 0x09, 0xbd, 0x96, 0xf5, 0x9c, 0xd5, 0xb4, 0x53, 0xe9, 0x92, 0xab, 0x47, 0x84, 0x26, 0xa3, 0x1b, 0xac, 0xac, 0x73, 0xec, 0x01, 0x27, 0x6b, 0x51, 0x7a, 0x59, 0x1b, 0x51, 0x5e, 0x2b, 0xf1, 0xdb, 0xe7, 0x15, 0xd3, 0xd8, 0x0e, 0xb6, 0x37, 0xac, 0x4a, 0x44, 0x71, 0x85, 0x71, 0x63, 0xca, 0x84, 0xb6, 0x38, 0xda, 0xe3, 0x9d, 0xbe, 0x6b, 0x60, 0x78, 0x06, 0xb3, 0xdc, 0xda, 0x67, 0x21, 0xc3, 0xe4, 0xe2, 0x28, 0xae, 0x4a, 0xb7, 0x2e, 0x01, 0xd7, 0xad, 0x31, 0x28, 0xbf, 0xb5, 0x1b, 0x3a, 0x40, 0xb9, 0xb5, 0x13, 0xe6, 0x82, 0x1b, 0x7b, 0xdb, 0x0b, 0x45, 0xe2, 0xbd, 0x84, 0x07, 0xca, 0x33, 0xcb, 0x31, 0x97, 0x54, 0x85, 0xa1, 0x25, 0x9d, 0x8e, 0xdd, 0x4a, 0x1e, 0xb6, 0x3b, 0x09, 0x67, 0x19, 0x25, 0xfd, 0x61, 0xa5, 0x2e, 0x77, 0x32, 0xd4, 0x9f, 0x77, 0xbd, 0xc5, 0xd9, 0xd8, 0xe3, 0xcd, 0xe5, 0x5d, 0x35, 0xf5, 0xe4, 0xaa, 0x46, 0x28, 0x51, 0xf4, 0x94, 0xc2, 0xb5, 0xf5, 0xb7, 0x66, 0x60, 0x9b, 0x91, 0x9e, 0x4a, 0xe9, 0x69, 0xa9, 0x9c, 0x5d, 0x4d, 0x19, 0x72, 0xee, 0x15, 0x84, 0x0b, 0xe4, 0x34, 0xff, 0xdb, 0x3f, 0x29, 0x79, 0x27, 0x50, 0x5a, 0x14, 0xeb, 0x58, 0x92, 0x0e, 0xfb, 0x44, 0x4d, 0x54, 0x94, 0x30, 0x63, 0xbe, 0x25, 0xd0, 0xec, 0x8b, 0x41, 0xdc, 0x47, 0x75, 0x68, 0x5b, 0x48, 0x75, 0xa8, 0x8d, 0x7c, 0x88, 0x12, 0x68, 0x1c, 0xda, 0xe3, 0xdd, 0x4c, 0x45, 0x3d, 0x50, 0x42, 0xed, 0xe7, 0x76, 0x08, 0xfc, 0xf7, 0xc4, 0x70, 0x0a, 0x26, 0xd7, 0xe5, 0xf5, 0xdb, 0x21, 0xe3, 0x74, 0xce, 0x8f, 0x92, 0x97, 0x0f, 0x6c, 0xec, 0xcf, 0xc8, 0x41, 0x5f, 0xda, 0x4d, 0x10, 0xda, 0x9b, 0x38, 0x02, 0x4e, 0xd3, 0xc9, 0x9d, 0x7b, 0xb1, 0x61, 0xcf, 0xbc, 0xbc, 0x02, 0xa5, 0x39, 0x46, 0xc0, 0xd6, 0xa1, 0xc4, 0x38, 0xc9, 0x97, 0xa4, 0xff, 0x67, 0xe9, 0x58, 0x0c, 0x50, 0xb2, 0x25, 0x3b, 0x59, 0x5b, 0x10, 0x25, 0x95, 0x96, 0x87, 0xb6, 0xbd, 0x8e, 0xb2, 0xb0, 0x62, 0xdc, 0x9b, 0xf1, 0xfe, 0x3d, 0xec, 0xf1, 0x04, 0xb8, 0x50, 0x32, 0x2e, 0x47, 0x89, 0xb8, 0x05, 0xdc, 0x39, 0x9a, 0x50, 0x9a, 0x27, 0x05, 0x97, 0x4c, 0xd7, 0x5d, 0x55, 0x56, 0xcb, 0x09, 0xe1, 0x09, 0x03, 0xcb, 0x7b, 0xe6, 0xd6, 0xa8, 0x9c, 0x88, 0xae, 0x96, 0xe3, 0xf3, 0xa3, 0x24, 0x75, 0xd1, 0x79, 0x14, 0x51, 0xaf, 0xeb, 0x77, 0xc9, 0xf4, 0x9d, 0x7f, 0x7c, 0x7f, 0x4d, 0x1f, 0xbc, 0x2e, 0x64, 0x9d, 0xd8, 0x15, 0x53, 0x68, 0x07, 0xbb, 0xbc, 0x87, 0x7d, 0x77, 0x4e, 0xae, 0x70, 0x41, 0x45, 0x27, 0x84, 0x1b, 0x3f, 0x21, 0xcd, 0x1f, 0x2d, 0xa4, 0x54, 0xca, 0xb1, 0x11, 0xf2, 0x46, 0xea, 0x25, 0xdf, 0xb3, 0x43, 0xab, 0xc1, 0x72, 0x07, 0xa1, 0x0e, 0x78, 0x20, 0x86, 0xd7, 0x56, 0x42, 0xe4, 0x71, 0xaf, 0x26, 0x54, 0x2b, 0x94, 0x6c, 0x1f, 0x73, 0xb7, 0xb5, 0x6f, 0xa5, 0x3d, 0xe7, 0xd4, 0x85, 0x8a, 0x56, 0xf6, 0x75, 0x77, 0x40, 0xec, 0x96, 0xe8, 0x1d, 0xac, 0xa1, 0x65, 0x32, 0x72, 0xb7, 0x19, 0x36, 0x2d, 0x58, 0xee, 0x2b, 0xd7, 0x69, 0x05, 0x5e, 0x19, 0x30, 0x76, 0xea, 0x6a, 0x72, 0x28, 0x2c, 0x09, 0x3a, 0x3b, 0xbc, 0x32, 0xe8, 0xa6, 0xd1, 0x1d, 0xe5, 0xf6, 0xf3, 0x58, 0x3c, 0xec, 0xd5, 0xaf, 0x24, 0xbb, 0x7b, 0x79, 0x27, 0x7b, 0xf7, 0xbb, 0xd3, 0xf0, 0xee, 0x77, 0x67, 0x27, 0x79, 0xf7, 0x63, 0x1b, 0x76, 0xa7, 0x6f, 0x56, 0x3c, 0x03, 0x6e, 0xfc, 0xba, 0xb0, 0x8f, 0x8f, 0xf0, 0xae, 0x0d, 0xca, 0xde, 0xcb, 0x41, 0x60, 0xc9, 0xb9, 0xf2, 0xb0, 0xe4, 0x2a, 0x08, 0x37, 0x05, 0xa5, 0x66, 0x45, 0xc6, 0xd9, 0xd6, 0x92, 0x6e, 0xc7, 0x11, 0xb8, 0x34, 0xdd, 0x22, 0xfc, 0x2b, 0xe9, 0x3d, 0x8a, 0xd0, 0x10, 0x8e, 0x3a, 0x31, 0x47, 0xf2, 0x0d, 0x79, 0x4b, 0x14, 0x8a, 0x51, 0x76, 0x2d, 0xbd, 0x6d, 0x15, 0x79, 0x19, 0xb4, 0x0d, 0x10, 0x02, 0x40, 0xca, 0x7e, 0x4b, 0x1d, 0x84, 0xea, 0x4e, 0x43, 0xe8, 0x96, 0xc5, 0x50, 0xae, 0x99, 0xf0, 0xae, 0x9c, 0xde, 0x27, 0x8f, 0x63, 0xba, 0x99, 0xa5, 0x37, 0x46, 0xd3, 0x15, 0x18, 0x72, 0xd9, 0x5d, 0x09, 0xcc, 0xd7, 0xeb, 0xf1, 0x81, 0x1f, 0xcb, 0x10, 0x44, 0xba, 0x13, 0x42, 0xb9, 0xa8, 0x5d, 0x29, 0x18, 0xdb, 0x89, 0x65, 0x20, 0x6f, 0x94, 0x3b, 0xb1, 0x14, 0x00, 0x13, 0x02, 0x57, 0x6a, 0xf2, 0xb4, 0x4b, 0x94, 0x03, 0xe0, 0xb4, 0xd2, 0x05, 0x4f, 0xe0, 0xd8, 0xb4, 0xcf, 0x43, 0x2a, 0x79, 0x7b, 0x3d, 0x94, 0xde, 0xbe, 0x9a, 0x4b, 0xb2, 0x51, 0x94, 0x64, 0x5e, 0x0c, 0x42, 0x91, 0x33, 0x10, 0xa2, 0xd3, 0x29, 0xcd, 0x84, 0x77, 0xe5, 0x89, 0xe7, 0x89, 0x5e, 0xc1, 0x53, 0xec, 0x11, 0x91, 0xbc, 0x49, 0x6c, 0x43, 0x0a, 0x34, 0xd6, 0x53, 0x9a, 0x9b, 0x1d, 0x61, 0x3a, 0x81, 0x4a, 0xf7, 0x19, 0xfb, 0x68, 0x20, 0xd6, 0x66, 0x9c, 0xb7, 0x41, 0xe7, 0x6a, 0xc9, 0xeb, 0xff, 0x27, 0xe4, 0x9b, 0x8c, 0x6b, 0x94, 0xcc, 0xad, 0x20, 0x67, 0xef, 0x6e, 0x59, 0x85, 0xed, 0x6c, 0xca, 0xbb, 0x73, 0x4c, 0xc5, 0xc4, 0xbb, 0x62, 0xb0, 0xe5, 0xdd, 0x95, 0x82, 0xa3, 0xc2, 0x03, 0x41, 0x05, 0xef, 0xb0, 0xdf, 0xca, 0x79, 0x0d, 0xdc, 0xa3, 0xd4, 0x91, 0x2f, 0x3f, 0xb6, 0xe1, 0x9b, 0x4d, 0xe7, 0x7f, 0xc9, 0xd1, 0xab, 0xc7, 0xf3, 0x5b, 0x8b, 0x77, 0x4a, 0xc4, 0x9e, 0x18, 0xeb, 0xc4, 0x62, 0x7a, 0x73, 0x47, 0xc4, 0xda, 0xea, 0x16, 0xe3, 0x26, 0xa7, 0x85, 0xea, 0xc8, 0xce, 0xac, 0x29, 0xe4, 0x40, 0x43, 0x83, 0x94, 0xc6, 0xb8, 0x82, 0xed, 0x4b, 0x7d, 0xec, 0xa5, 0x93, 0x02, 0x1e, 0x49, 0x2e, 0x3a, 0x43, 0xc9, 0xcc, 0x15, 0x48, 0x9b, 0x45, 0x61, 0x50, 0x76, 0xf5, 0xa7, 0x8b, 0xf1, 0xdf, 0xb1, 0xab, 0x3f, 0x2b, 0xd3, 0x6b, 0xe6, 0x75, 0x40, 0xab, 0x45, 0xa2, 0x2e, 0x5d, 0x7c, 0xed, 0x29, 0xed, 0x95, 0xa7, 0x9b, 0xb7, 0x2e, 0x7e, 0x5f, 0x0a, 0x28, 0x4d, 0x53, 0xbb, 0x69, 0x48, 0x4f, 0xdc, 0x58, 0x0f, 0x5a, 0x4b, 0x9b, 0x2a, 0xd4, 0xbc, 0x27, 0x87, 0x98, 0xf2, 0x73, 0x2a, 0x4e, 0x4f, 0xfe, 0x09, 0xd5, 0x95, 0x4c, 0xf3, 0x56, 0x65, 0x16, 0xe9, 0xe7, 0xb3, 0xd5, 0x85, 0x89, 0x51, 0x64, 0x1e, 0xbc, 0xa5, 0x9b, 0xda, 0x15, 0x7f, 0x1d, 0xec, 0xb7, 0xd0, 0x36, 0x67, 0x95, 0x94, 0x80, 0x72, 0xfc, 0x6d, 0x84, 0xaf, 0xd6, 0xbd, 0x27, 0x75, 0xe0, 0x18, 0x9b, 0x3b, 0x35, 0x7b, 0x2b, 0xa6, 0xfc, 0xee, 0x2d, 0xc7, 0x96, 0xe5, 0x33, 0x65, 0xe1, 0x53, 0x93, 0xac, 0x52, 0xd2, 0x76, 0xa5, 0x45, 0xe9, 0x10, 0xfb, 0x53, 0xa9, 0x2a, 0x2d, 0x6c, 0x21, 0xbb, 0x70, 0x7b, 0x3e, 0xca, 0x28, 0xae, 0x8c, 0x84, 0x8f, 0xe5, 0x86, 0x1a, 0x4d, 0xa1, 0x73, 0x11, 0x61, 0x77, 0x87, 0x29, 0x29, 0x18, 0x66, 0xd3, 0x6c, 0xc6, 0xd3, 0x00, 0xc9, 0xf3, 0xa4, 0x71, 0xb4, 0xf8, 0x1c, 0x8c, 0x38, 0x85, 0xd7, 0xbe, 0x1a, 0xb2, 0xa9, 0xa8, 0x6c, 0x86, 0x11, 0xfe, 0x27, 0x8b, 0x98, 0xdd, 0xd4, 0x43, 0xce, 0x26, 0x3a, 0xfb, 0xe2, 0x18, 0xfb, 0xe8, 0xc9, 0xbc, 0x66, 0x70, 0xcc, 0x6b, 0xc2, 0xbe, 0xea, 0x44, 0x3e, 0x5a, 0x9c, 0x52, 0xd0, 0x79, 0xc5, 0xac, 0xa9, 0x33, 0x61, 0x41, 0x23, 0xb0, 0xaf, 0x42, 0x34, 0xef, 0x19, 0x19, 0x6e, 0xb5, 0xd0, 0x39, 0x02, 0x47, 0xca, 0x9a, 0xd5, 0xe9, 0x4a, 0xd9, 0x94, 0x96, 0x6a, 0x37, 0x14, 0x91, 0x46, 0x8b, 0x46, 0x5a, 0x58, 0x76, 0xbc, 0xb2, 0x6d, 0x9f, 0x9e, 0xaa, 0x4d, 0x78, 0xb5, 0xdd, 0xae, 0xde, 0x51, 0x07, 0x8e, 0x6d, 0x9d, 0xc8, 0xe7, 0x5f, 0xf3, 0x6c, 0xa3, 0x75, 0x9b, 0x7a, 0x47, 0x94, 0xf5, 0x0e, 0x94, 0xa6, 0xb7, 0xca, 0x6d, 0xd9, 0xbd, 0xd4, 0x85, 0xb5, 0x38, 0x9e, 0x9a, 0x31, 0xff, 0x36, 0xb2, 0x01, 0x21, 0x7f, 0x0d, 0x38, 0x3f, 0x3b, 0x42, 0x05, 0xbc, 0xc7, 0xb9, 0x04, 0xc2, 0x6b, 0x41, 0xf8, 0xb9, 0x95, 0x7a, 0x5d, 0x19, 0xb6, 0xdb, 0xaf, 0xc2, 0x32, 0xd6, 0xe2, 0x7f, 0x45, 0x62, 0x80, 0xbc, 0xdb, 0xb9, 0xd6, 0x48, 0x0d, 0x78, 0x57, 0xca, 0x88, 0xff, 0x36, 0x0c, 0xb1, 0x26, 0xba, 0xa1, 0x3a, 0x5d, 0x4b, 0x56, 0x2e, 0x19, 0x80, 0x2b, 0xa2, 0xb5, 0xd7, 0x39, 0x5e, 0xea, 0x4f, 0x7b, 0x8c, 0xf1, 0xe6, 0x2c, 0x09, 0x83, 0x8a, 0xf7, 0x65, 0x78, 0xdf, 0x8c, 0xf7, 0x45, 0x78, 0xaf, 0xe1, 0xbd, 0x95, 0x70, 0x45, 0x80, 0xbc, 0xd7, 0x1d, 0xf2, 0x15, 0xfa, 0x08, 0x97, 0x9c, 0x50, 0xd7, 0x6b, 0x85, 0x4d, 0xc6, 0x86, 0xb7, 0x69, 0xcd, 0x23, 0x0b, 0x2a, 0x61, 0x45, 0x13, 0xf0, 0xc1, 0x7d, 0xc3, 0x64, 0xd9, 0xe8, 0x83, 0x81, 0xa1, 0x2e, 0x28, 0xa1, 0x7a, 0xb1, 0x86, 0xba, 0x65, 0x98, 0x4e, 0xf9, 0x57, 0x83, 0x39, 0xd0, 0x0d, 0xb1, 0x5d, 0x8b, 0xbb, 0xd6, 0xfb, 0xbb, 0xa1, 0x61, 0x24, 0xde, 0xd5, 0x53, 0x2b, 0xc5, 0x7f, 0x1e, 0x46, 0x41, 0x25, 0x7e, 0x28, 0xb4, 0xf8, 0x37, 0x87, 0x7e, 0xfa, 0xf3, 0xee, 0x7b, 0x6a, 0x81, 0x43, 0x12, 0x18, 0x12, 0xe7, 0x90, 0xa6, 0x3e, 0x08, 0x63, 0xb9, 0xef, 0xbb, 0xa9, 0x61, 0xc6, 0x6b, 0x9b, 0xd7, 0x29, 0x2f, 0x3d, 0x90, 0x32, 0x63, 0x2d, 0xab, 0xb5, 0xc0, 0xba, 0x19, 0xaf, 0x6e, 0xc4, 0x52, 0x16, 0xbe, 0xb4, 0x39, 0x75, 0xef, 0xf0, 0xe2, 0x85, 0x11, 0x50, 0x87, 0xe2, 0x0b, 0x55, 0x88, 0x62, 0xf9, 0x32, 0x58, 0xae, 0xb0, 0xb0, 0xeb, 0xba, 0xf2, 0x90, 0xe1, 0x61, 0xca, 0xa4, 0xb5, 0xb9, 0xac, 0xae, 0x16, 0xcd, 0x71, 0x6f, 0xf1, 0x89, 0xef, 0x13, 0x56, 0xba, 0x2f, 0x89, 0xb5, 0x69, 0x82, 0x2a, 0x46, 0x9e, 0x82, 0xc9, 0x63, 0xd8, 0xe6, 0x01, 0x6c, 0xef, 0x2a, 0x5e, 0x3d, 0x6c, 0x5c, 0x6e, 0x6b, 0xb5, 0xe9, 0x6f, 0x7f, 0xa1, 0x59, 0xd6, 0x49, 0x9a, 0xa9, 0xda, 0xf4, 0x0f, 0xaf, 0xfd, 0xdd, 0xab, 0xc2, 0x7b, 0xea, 0xe4, 0xf0, 0x5e, 0xe3, 0x5f, 0x93, 0x5d, 0xd6, 0x1c, 0x9a, 0xa0, 0xc2, 0x7b, 0x4b, 0x97, 0xc9, 0x0a, 0xa9, 0x7a, 0x01, 0x94, 0x05, 0x17, 0xc0, 0x5c, 0xde, 0xdb, 0xc7, 0xd9, 0x4d, 0xfe, 0x5a, 0x19, 0x95, 0x71, 0x81, 0xb0, 0x5b, 0xda, 0xb4, 0x2e, 0x20, 0xd0, 0xc0, 0x8b, 0x5f, 0x5a, 0xdc, 0xe5, 0x21, 0x3b, 0xe4, 0xdd, 0xf1, 0x2e, 0x67, 0xb0, 0xae, 0x1a, 0x25, 0x97, 0xba, 0xdf, 0x0f, 0xc1, 0x8f, 0x8f, 0x74, 0x17, 0x07, 0xa2, 0xc1, 0x2e, 0x7d, 0x32, 0x72, 0xa1, 0x1f, 0x5e, 0x7c, 0xe5, 0x1e, 0x81, 0x84, 0x4e, 0x94, 0x88, 0xec, 0x84, 0x4e, 0x1b, 0xfe, 0x36, 0x19, 0xb9, 0xb0, 0x02, 0xd7, 0x95, 0xa0, 0x0f, 0x79, 0x98, 0x03, 0xe1, 0x6e, 0x70, 0x36, 0x4e, 0xe8, 0x7d, 0x5a, 0x14, 0xc7, 0x83, 0x43, 0xab, 0xc2, 0xd1, 0x51, 0xab, 0xb9, 0xd9, 0xc3, 0x86, 0x82, 0x63, 0x41, 0x02, 0x1f, 0x9d, 0x12, 0x32, 0x92, 0xd9, 0x2c, 0xa4, 0x71, 0x74, 0x9a, 0xf8, 0x98, 0xf0, 0x11, 0x98, 0x9a, 0x6b, 0x78, 0x69, 0x39, 0x2a, 0x3c, 0xe1, 0x1a, 0x6b, 0xe7, 0x1e, 0x6e, 0x8b, 0x3d, 0x8f, 0x1d, 0x51, 0xac, 0xc6, 0xda, 0x99, 0xb3, 0xf7, 0xa3, 0xb3, 0x1a, 0x9e, 0x9f, 0x66, 0x9c, 0x61, 0x38, 0x07, 0x68, 0xf5, 0xc4, 0xab, 0x5a, 0xe4, 0xaf, 0x1d, 0xac, 0xb3, 0xa8, 0x10, 0x22, 0x5d, 0x0f, 0x68, 0x6b, 0x95, 0xa2, 0x54, 0x4c, 0x53, 0x7f, 0x32, 0x96, 0x52, 0x14, 0x95, 0x2d, 0xd2, 0x6d, 0x84, 0xf7, 0x53, 0x00, 0xb6, 0x0d, 0xc4, 0x56, 0xfd, 0x55, 0xd6, 0xab, 0x26, 0xc0, 0x6e, 0x27, 0x3d, 0x9f, 0x3f, 0xfd, 0x39, 0xa1, 0xf7, 0x29, 0x73, 0x52, 0x63, 0x8a, 0x25, 0xd1, 0x9f, 0x1a, 0xc5, 0x58, 0x0f, 0xff, 0xe4, 0x70, 0x8a, 0xae, 0x91, 0xbf, 0xd3, 0x94, 0xeb, 0xd3, 0x4b, 0xc9, 0x8a, 0x45, 0x69, 0xe6, 0x39, 0xfa, 0x86, 0xb6, 0xd4, 0xd9, 0x4c, 0x3c, 0x1e, 0xed, 0xa2, 0x13, 0x9a, 0x0e, 0x9d, 0x36, 0x17, 0x18, 0x88, 0x39, 0xa9, 0x1a, 0x2d, 0x4c, 0xbb, 0xe8, 0xd7, 0xe6, 0x87, 0xef, 0xcf, 0x74, 0x7e, 0x83, 0xdf, 0x3a, 0x85, 0xb9, 0xcc, 0x15, 0x3e, 0x23, 0xf2, 0xdf, 0x24, 0x1f, 0x44, 0x9a, 0x59, 0xb1, 0x68, 0xb2, 0x62, 0x15, 0x5a, 0x35, 0x40, 0xbc, 0x3a, 0xa3, 0xf6, 0xd1, 0xce, 0xb7, 0x9b, 0x28, 0x20, 0xad, 0xe1, 0x5d, 0x50, 0x95, 0xd8, 0xb6, 0x06, 0x79, 0x26, 0x77, 0x7f, 0x62, 0x98, 0xfe, 0x5d, 0xfd, 0x61, 0xe4, 0xe3, 0xfe, 0xe5, 0x58, 0x46, 0x76, 0x3f, 0x8c, 0x57, 0xf6, 0x7f, 0x39, 0x9a, 0x91, 0x5d, 0x0f, 0xe3, 0xb8, 0xf3, 0x5a, 0xaa, 0x58, 0x4b, 0xd3, 0xe5, 0xc1, 0x77, 0xc8, 0xba, 0x58, 0x0a, 0xa5, 0x4b, 0x83, 0x18, 0xb7, 0xf5, 0xa1, 0x9f, 0xfc, 0x2a, 0x23, 0x57, 0x3c, 0xe4, 0xc7, 0xd8, 0xad, 0x83, 0x2f, 0xbe, 0x9e, 0xa9, 0xd1, 0xaa, 0x94, 0x2f, 0x39, 0x8b, 0x43, 0xf8, 0xcc, 0x13, 0xf9, 0x3f, 0x63, 0x3f, 0xfd, 0x65, 0xc6, 0xfc, 0x77, 0xfb, 0x2b, 0xb6, 0x68, 0xe6, 0x44, 0x7f, 0x46, 0x8e, 0x3e, 0xaa, 0xcc, 0x71, 0x16, 0x51, 0x5c, 0x57, 0xe4, 0xd7, 0x63, 0x2f, 0x1e, 0xc9, 0x98, 0x1f, 0xd9, 0xef, 0x1c, 0x34, 0x9e, 0x3d, 0x22, 0xce, 0xab, 0xc9, 0x92, 0x4e, 0x59, 0x05, 0x61, 0xcd, 0xa5, 0xb8, 0x91, 0xab, 0xfa, 0x27, 0xe4, 0xaa, 0x4a, 0xb1, 0x0d, 0x8b, 0xba, 0x8a, 0xb0, 0x85, 0x1c, 0x5d, 0xb6, 0x5d, 0x98, 0x72, 0xc6, 0x3c, 0x82, 0x69, 0x74, 0xe5, 0xda, 0x51, 0xb1, 0xe4, 0x56, 0x2f, 0xe6, 0x4e, 0xa8, 0xc4, 0x15, 0x55, 0x74, 0xce, 0xcd, 0xbc, 0x5a, 0x15, 0x04, 0x09, 0xa3, 0x21, 0x39, 0x7a, 0xc9, 0xd4, 0xbc, 0x95, 0xc7, 0x0f, 0x96, 0x64, 0xca, 0xef, 0xaa, 0xb0, 0x50, 0xfa, 0x78, 0xe2, 0x1a, 0xbf, 0xab, 0x64, 0x51, 0xda, 0xe7, 0x51, 0x8d, 0xa7, 0x84, 0x20, 0xe8, 0x60, 0xdd, 0x98, 0xd2, 0xff, 0x79, 0x46, 0x4a, 0x1a, 0xf3, 0xcf, 0xde, 0x23, 0x55, 0xf4, 0x6b, 0xb4, 0x4b, 0xeb, 0x66, 0xbe, 0x54, 0x16, 0xeb, 0x13, 0xf1, 0x33, 0x7c, 0xb6, 0x8b, 0x3c, 0xaf, 0xe6, 0x61, 0x7f, 0x69, 0x65, 0x69, 0xc5, 0x3f, 0x9f, 0x3c, 0x94, 0xd3, 0x99, 0x49, 0x75, 0x07, 0x58, 0x91, 0xff, 0xb5, 0xdf, 0xfd, 0x90, 0x63, 0x3e, 0xce, 0x41, 0xe1, 0x6f, 0x20, 0x5b, 0x9b, 0x71, 0xc5, 0x92, 0xc3, 0x8b, 0xac, 0x61, 0x9f, 0x2a, 0xab, 0x25, 0xe1, 0xd9, 0xce, 0x7c, 0x6b, 0x8b, 0x54, 0xac, 0x79, 0x90, 0x2f, 0xf0, 0xf7, 0xcc, 0x9d, 0xe2, 0x48, 0x98, 0xe7, 0x9b, 0x4b, 0xfe, 0x7c, 0x9d, 0xea, 0x94, 0xd4, 0x59, 0x7f, 0x96, 0x34, 0x6c, 0xa4, 0x72, 0xe5, 0xa1, 0x5b, 0x13, 0xf8, 0x6b, 0xcd, 0xf2, 0x73, 0x61, 0x3f, 0x9d, 0xbe, 0xb9, 0x7d, 0xc2, 0x36, 0x15, 0xe5, 0xc3, 0x0a, 0x5c, 0x33, 0x98, 0x47, 0x22, 0xdc, 0xe8, 0x85, 0x85, 0xd1, 0x34, 0xce, 0x40, 0xe4, 0xb6, 0xb0, 0xb5, 0x36, 0x31, 0xfa, 0x52, 0x71, 0x8a, 0x56, 0xe0, 0x59, 0x82, 0xbf, 0x6b, 0x17, 0x7c, 0xd5, 0x38, 0xf1, 0x72, 0x12, 0x6b, 0x64, 0xae, 0xa8, 0xe8, 0x21, 0xdf, 0x19, 0x00, 0x9b, 0xbf, 0x6d, 0x73, 0x84, 0x41, 0x1e, 0x41, 0x0a, 0x0f, 0x43, 0x5a, 0x6d, 0x8f, 0x82, 0xa1, 0x1d, 0x18, 0xa2, 0x62, 0xc8, 0x7d, 0xda, 0x52, 0x7c, 0x03, 0x17, 0xd4, 0x74, 0xed, 0x8a, 0x22, 0x7a, 0x17, 0x47, 0x69, 0x18, 0xff, 0x4d, 0x58, 0xdf, 0x15, 0x9a, 0xd3, 0x36, 0x20, 0x91, 0x25, 0x43, 0xc2, 0x36, 0x40, 0x3a, 0x6f, 0xa9, 0x66, 0xcd, 0x32, 0x87, 0xd0, 0x65, 0x4c, 0x5a, 0xc3, 0x1c, 0xf2, 0x51, 0x67, 0xd2, 0x6a, 0xf1, 0x7f, 0x0e, 0xfe, 0x57, 0xe3, 0x7f, 0x11, 0xfe, 0x57, 0xe1, 0xff, 0x2c, 0xfc, 0xaf, 0x98, 0x43, 0xa8, 0x26, 0x26, 0x6d, 0xee, 0x1c, 0x42, 0x49, 0x31, 0x69, 0x25, 0x73, 0x08, 0xab, 0xc5, 0xa4, 0xd9, 0xf1, 0xbf, 0x18, 0xff, 0xcd, 0xf8, 0x6f, 0x05, 0x13, 0x9d, 0xba, 0xdc, 0x46, 0x9c, 0x9f, 0xe5, 0x96, 0x18, 0x58, 0x7d, 0xd6, 0x78, 0x07, 0xf6, 0x33, 0xd6, 0x38, 0x39, 0xfa, 0xfb, 0x93, 0x6c, 0x2f, 0x55, 0x20, 0xd0, 0xd8, 0xe8, 0xec, 0xbb, 0x42, 0x58, 0x96, 0x96, 0x7a, 0x3b, 0x81, 0x34, 0x65, 0x85, 0xcd, 0xb0, 0x23, 0xc7, 0xfb, 0xd0, 0xda, 0x93, 0xea, 0xb2, 0xe2, 0x95, 0xba, 0xab, 0x1f, 0xeb, 0xe5, 0xee, 0xd5, 0x30, 0x24, 0x6e, 0xac, 0x42, 0x6b, 0x14, 0x81, 0x5c, 0x08, 0xa4, 0x9d, 0x25, 0x03, 0x8d, 0xb9, 0xc9, 0x87, 0xd9, 0x2e, 0xb0, 0x4d, 0xa0, 0x1c, 0xca, 0xe5, 0x3c, 0x26, 0x2f, 0xd3, 0x1d, 0x52, 0x35, 0x0b, 0x4b, 0x13, 0xaf, 0x69, 0xd5, 0xfc, 0x7f, 0x18, 0xe7, 0x0e, 0x21, 0xa8, 0xd2, 0xb5, 0x45, 0x23, 0x14, 0x36, 0x8f, 0x79, 0x0f, 0x7b, 0x7c, 0x5a, 0xaa, 0xb4, 0x36, 0x6f, 0x1d, 0x19, 0x14, 0xf1, 0x75, 0xab, 0xc6, 0xd8, 0x80, 0xba, 0x49, 0x9c, 0x4c, 0x23, 0x4d, 0x7f, 0x9b, 0x4e, 0x56, 0xdd, 0xc6, 0x79, 0x41, 0x05, 0x59, 0x2a, 0x22, 0x1d, 0x67, 0xaf, 0x48, 0x4f, 0xb8, 0xb0, 0x9e, 0x4b, 0xce, 0x40, 0x98, 0xf7, 0x96, 0x6e, 0x4a, 0x13, 0xf2, 0xf7, 0x2c, 0xd6, 0x1d, 0x53, 0xd8, 0xf2, 0xfe, 0x3c, 0xfb, 0x81, 0xca, 0x40, 0x15, 0xf2, 0xc0, 0x61, 0xe4, 0x3c, 0xd4, 0x79, 0x51, 0x88, 0x45, 0x77, 0x40, 0xfc, 0xcb, 0x1d, 0xc8, 0x49, 0xb5, 0xe3, 0x6f, 0x23, 0xfc, 0xb7, 0xc8, 0x69, 0xa9, 0x03, 0x9f, 0x2f, 0xa3, 0x77, 0x7d, 0xd8, 0x6a, 0x97, 0x46, 0x98, 0xf3, 0x14, 0xde, 0xc8, 0x05, 0x2a, 0x80, 0x09, 0x5b, 0xc1, 0x66, 0xa0, 0x03, 0x00, 0xbc, 0xa9, 0xc5, 0x08, 0x21, 0x4c, 0x60, 0x88, 0xe5, 0xb8, 0x50, 0xb2, 0x81, 0x74, 0xe4, 0x23, 0x8c, 0xa9, 0xc8, 0x75, 0xd1, 0xe9, 0x1e, 0xa3, 0x7c, 0xe7, 0xac, 0x65, 0x95, 0x59, 0x98, 0xc2, 0x76, 0xa4, 0xa4, 0x4f, 0xf0, 0xae, 0xfe, 0xa9, 0xca, 0xa4, 0xfe, 0x6e, 0xf4, 0x87, 0xfa, 0x99, 0xc8, 0x39, 0x7d, 0xa2, 0x32, 0xae, 0x7f, 0x10, 0xf4, 0x82, 0x1d, 0xb9, 0x95, 0x66, 0x96, 0x65, 0x55, 0xfc, 0x86, 0xc5, 0xdb, 0x03, 0x87, 0xb6, 0xa9, 0x77, 0x45, 0xf5, 0x0b, 0x74, 0x46, 0x89, 0xcf, 0x5b, 0xae, 0x7d, 0x4e, 0xdc, 0x0c, 0x3e, 0x27, 0x5b, 0xb7, 0x4b, 0x7c, 0xe2, 0xbf, 0x11, 0x57, 0xbf, 0x53, 0xc2, 0x87, 0xf1, 0xc7, 0x26, 0xc3, 0xa2, 0x73, 0x81, 0x3e, 0xc1, 0x78, 0x29, 0xd8, 0x73, 0xac, 0xc1, 0xea, 0xc6, 0xf1, 0x8e, 0x32, 0x39, 0xac, 0xa2, 0xb2, 0x22, 0x4f, 0xe7, 0x35, 0xce, 0x6a, 0x6c, 0xfa, 0x61, 0xc3, 0xfa, 0x92, 0xf0, 0xfb, 0x6a, 0xc9, 0x9e, 0x8a, 0xf0, 0x3e, 0x49, 0x36, 0x41, 0xfa, 0x1a, 0x23, 0x8d, 0x2d, 0x37, 0x72, 0x5d, 0xec, 0x43, 0xcd, 0x1b, 0x3b, 0x90, 0xa2, 0xf5, 0x47, 0xf5, 0xef, 0x05, 0x29, 0x76, 0xa0, 0x33, 0x66, 0x78, 0xc2, 0x14, 0x3c, 0xa5, 0xc3, 0x67, 0x63, 0x0e, 0x65, 0xf4, 0xea, 0x00, 0xe3, 0x37, 0x55, 0x18, 0x9e, 0x2e, 0xe7, 0x32, 0x26, 0x5b, 0x29, 0x3d, 0x5d, 0xe8, 0x83, 0x06, 0xf2, 0x7f, 0x88, 0xb5, 0x21, 0x7e, 0x9a, 0x50, 0x32, 0x8a, 0xd9, 0x57, 0xaf, 0x42, 0xb2, 0x33, 0x72, 0x5d, 0xee, 0x75, 0xca, 0x1b, 0x5b, 0x69, 0x27, 0x15, 0x53, 0xc2, 0xb7, 0x96, 0x4c, 0x5c, 0x0c, 0x26, 0xb7, 0x2b, 0x31, 0x9c, 0xd5, 0x7e, 0x6a, 0x51, 0xa6, 0x55, 0x6e, 0xe4, 0x8f, 0xfd, 0xd3, 0xfa, 0x8c, 0xfa, 0x8a, 0xf7, 0x76, 0x85, 0xa5, 0x30, 0xdb, 0xf1, 0x39, 0x34, 0x53, 0xc5, 0x12, 0xa2, 0x65, 0x58, 0xce, 0xb9, 0x39, 0x1e, 0xb7, 0x98, 0xcf, 0x38, 0x6e, 0x4a, 0xdb, 0x48, 0xab, 0x95, 0x51, 0x23, 0x07, 0xd7, 0x82, 0xbc, 0x9a, 0xfc, 0xec, 0xf2, 0xb8, 0xb2, 0xa5, 0x93, 0x16, 0x99, 0xd0, 0xa4, 0xd9, 0x9b, 0xa6, 0x15, 0xaf, 0x0b, 0xd3, 0x61, 0x1e, 0x63, 0xb3, 0xb2, 0x3c, 0x65, 0x72, 0xf4, 0xf2, 0x4a, 0x4a, 0x9f, 0xd1, 0x89, 0x9d, 0xe4, 0x23, 0x7c, 0xea, 0xc9, 0xd5, 0x5a, 0xe1, 0x67, 0x53, 0xb3, 0x42, 0x17, 0xb5, 0x73, 0x0e, 0x13, 0x78, 0x0a, 0xcd, 0xf0, 0x1d, 0xd2, 0x63, 0x22, 0x1b, 0x32, 0x6c, 0xe9, 0x20, 0x59, 0xac, 0xd1, 0x69, 0x7e, 0x56, 0xce, 0x64, 0xf9, 0xd2, 0xe2, 0x43, 0x9e, 0x0a, 0x39, 0x99, 0x04, 0xf2, 0xb8, 0x71, 0x28, 0xed, 0xf1, 0x8e, 0x6f, 0xfd, 0x6f, 0xfd, 0xa4, 0xf7, 0x88, 0xed, 0xe3, 0xf2, 0xc9, 0x8b, 0x59, 0x9f, 0x32, 0x39, 0x7a, 0xf1, 0x10, 0xf3, 0x16, 0xb2, 0xc8, 0xf9, 0xf7, 0x36, 0xe6, 0x17, 0x97, 0xe3, 0x37, 0xce, 0x3b, 0xf3, 0x34, 0x63, 0x49, 0x37, 0xd3, 0x4f, 0x5a, 0x3e, 0x34, 0x4a, 0x84, 0xb4, 0xc1, 0x34, 0xfc, 0x81, 0x74, 0x19, 0xc6, 0xb3, 0xf0, 0xec, 0x91, 0x0c, 0xfd, 0x5c, 0xc2, 0x94, 0xda, 0x49, 0xfd, 0xc1, 0xfc, 0x8e, 0x93, 0xa5, 0xaf, 0x4e, 0x50, 0xb4, 0x22, 0xa5, 0x73, 0x1a, 0x95, 0xae, 0x76, 0x46, 0x5d, 0x73, 0x52, 0x67, 0x9a, 0xde, 0x8a, 0x31, 0xf7, 0x1e, 0x22, 0x0a, 0x5c, 0x8c, 0x5c, 0x33, 0xeb, 0x42, 0x08, 0x7b, 0x47, 0x7f, 0xaf, 0x4b, 0xd0, 0xd7, 0xc0, 0xed, 0x31, 0x28, 0x9e, 0x87, 0x34, 0x08, 0x4a, 0x12, 0x1b, 0x19, 0x31, 0x9b, 0xd0, 0x24, 0x3b, 0xa1, 0x6c, 0x0a, 0x6d, 0xc2, 0xc0, 0x81, 0xfd, 0x77, 0xff, 0x0f, 0x9a, 0xb7, 0x66, 0x25, 0x40, 0x53, 0xb9, 0xc0, 0xd1, 0x24, 0x8d, 0x08, 0xb2, 0x1a, 0xc3, 0x59, 0x3b, 0xa5, 0x0d, 0xf9, 0x2a, 0x23, 0x6e, 0xb2, 0x6e, 0x82, 0xc0, 0xd3, 0x34, 0x64, 0xc5, 0x62, 0x0a, 0x67, 0xef, 0x7b, 0x45, 0x44, 0xf1, 0x68, 0x97, 0x24, 0x72, 0x26, 0xef, 0xbd, 0x43, 0x59, 0xd9, 0x50, 0xa9, 0xc9, 0x21, 0xff, 0x7a, 0xa0, 0x14, 0xf9, 0x0d, 0x19, 0xd4, 0xc8, 0x84, 0x3e, 0xd4, 0xab, 0xee, 0x62, 0x5f, 0x07, 0xd4, 0xd3, 0x72, 0x79, 0x72, 0x88, 0x9e, 0x3a, 0x01, 0x39, 0x16, 0x99, 0xb4, 0xb1, 0x52, 0x84, 0x9e, 0x50, 0x28, 0x7d, 0x25, 0xdd, 0x84, 0xc4, 0xdf, 0x9a, 0x72, 0xe2, 0xef, 0xac, 0xb4, 0x99, 0x28, 0x90, 0x56, 0x2e, 0x3c, 0xf2, 0x19, 0x3b, 0xdc, 0xa7, 0xfc, 0x67, 0x99, 0x4e, 0xce, 0x65, 0x3d, 0x2d, 0x99, 0xda, 0x78, 0xba, 0xd6, 0xab, 0x8f, 0xa4, 0x9f, 0xf2, 0x9e, 0xb7, 0xf6, 0xef, 0x60, 0xb9, 0x41, 0x82, 0x3f, 0x27, 0x69, 0x4c, 0x2e, 0x17, 0x7a, 0x0f, 0xbe, 0x59, 0x22, 0x4c, 0x20, 0x68, 0xc7, 0xfa, 0x7d, 0xa0, 0xb5, 0xe7, 0x97, 0xa8, 0x79, 0xeb, 0x7f, 0x4d, 0xfe, 0xac, 0xf3, 0xce, 0xba, 0xbe, 0x93, 0x63, 0x7c, 0x66, 0xc9, 0xb9, 0x22, 0xbd, 0xba, 0xcc, 0x3b, 0x21, 0x00, 0xc3, 0x8c, 0x7c, 0x73, 0x37, 0x5e, 0x0d, 0xe6, 0xd6, 0xe2, 0x3e, 0x9c, 0x47, 0xa4, 0xe3, 0x58, 0xac, 0x39, 0x7a, 0x4d, 0xbb, 0x9e, 0xc3, 0x15, 0xd5, 0xfc, 0x93, 0xd3, 0x50, 0x8e, 0xe5, 0x57, 0x15, 0x47, 0xea, 0x2c, 0xfb, 0x4c, 0xca, 0xed, 0xeb, 0xe9, 0xeb, 0x68, 0xff, 0x12, 0x9e, 0xa3, 0x5d, 0x1b, 0x9f, 0x9b, 0xd6, 0xa8, 0x3f, 0x5c, 0x36, 0xd6, 0x5d, 0xe7, 0x1c, 0xc2, 0x2c, 0x33, 0xdd, 0x46, 0xbf, 0xe6, 0x5b, 0x12, 0xb8, 0x92, 0xcd, 0x9a, 0x5a, 0xc9, 0xce, 0x15, 0xf1, 0xb8, 0x98, 0x65, 0x68, 0x06, 0x33, 0xae, 0xce, 0x07, 0x51, 0x6d, 0x19, 0xa5, 0xe3, 0xc6, 0x18, 0xf9, 0x3e, 0xdc, 0x47, 0xc8, 0xab, 0x7b, 0x8c, 0xf1, 0x75, 0x9f, 0xfc, 0x22, 0x69, 0x9f, 0x7d, 0xe9, 0xfa, 0xb4, 0xff, 0xf0, 0x92, 0x90, 0x46, 0x49, 0xfb, 0xfb, 0x1a, 0x9c, 0x96, 0x57, 0xbf, 0x80, 0x15, 0xeb, 0x13, 0x5f, 0x74, 0xe7, 0xed, 0xda, 0x5d, 0xbc, 0x49, 0xd9, 0xd8, 0xab, 0xf0, 0xf3, 0xde, 0x97, 0x61, 0xe9, 0xba, 0x68, 0x42, 0xff, 0x40, 0x9b, 0xfb, 0xaf, 0x48, 0x9d, 0x7e, 0xdd, 0x09, 0x66, 0xec, 0xf1, 0x2d, 0x69, 0x3e, 0xb5, 0xc7, 0xf9, 0xfc, 0x28, 0xef, 0x73, 0x76, 0xc2, 0x36, 0x96, 0x1f, 0x4e, 0xe2, 0x4a, 0x6f, 0x13, 0x16, 0xa9, 0x1e, 0x03, 0xa1, 0x85, 0xf6, 0x39, 0x96, 0x9c, 0x03, 0x3a, 0x17, 0xc6, 0xba, 0xea, 0x19, 0x57, 0x17, 0x59, 0x43, 0xba, 0xc3, 0xf0, 0xef, 0x5f, 0x0b, 0x56, 0xd0, 0xef, 0x3d, 0xe4, 0x4d, 0xf2, 0x6b, 0x5b, 0xc8, 0x1f, 0x8b, 0xff, 0xac, 0x27, 0x4c, 0xbe, 0x36, 0x09, 0x07, 0x30, 0xe1, 0x81, 0x9b, 0x51, 0x5a, 0x7d, 0xc8, 0xdd, 0x09, 0xee, 0x9f, 0x9c, 0x43, 0x9e, 0xb0, 0xc8, 0xd0, 0x31, 0x9c, 0x9d, 0xc5, 0xd6, 0xd4, 0x32, 0x2c, 0x07, 0xa7, 0x18, 0x51, 0xa8, 0x2c, 0x5d, 0xfd, 0x93, 0xb3, 0xb2, 0x92, 0xf2, 0x33, 0x2a, 0x49, 0x2c, 0x39, 0x24, 0xc6, 0x1f, 0xef, 0x79, 0xdb, 0xc8, 0x83, 0x0b, 0x63, 0x99, 0xcc, 0x35, 0xd2, 0xb0, 0x2a, 0x75, 0x9c, 0x86, 0x5b, 0x73, 0xe3, 0x5b, 0xe5, 0x29, 0x6a, 0x7d, 0x9b, 0xf0, 0xc6, 0xad, 0x95, 0xb8, 0x33, 0xe4, 0xa7, 0xdc, 0xdd, 0xc6, 0xa9, 0x5b, 0x7e, 0x72, 0x16, 0x65, 0x99, 0x0b, 0x5a, 0x39, 0xd6, 0xd1, 0x24, 0x64, 0x45, 0x3d, 0xe5, 0x8b, 0x22, 0xcf, 0x9b, 0x24, 0x2a, 0xd6, 0x77, 0x45, 0x83, 0xc9, 0x1d, 0x53, 0x79, 0x0a, 0xc9, 0xfe, 0xb5, 0x67, 0x6f, 0x98, 0x5b, 0xb9, 0x36, 0x9a, 0xc5, 0x36, 0x75, 0x09, 0xcf, 0x2b, 0xc5, 0x28, 0x25, 0xda, 0xc3, 0x0b, 0xa0, 0xc8, 0x6d, 0xe8, 0x88, 0xb3, 0xdd, 0xc9, 0x1b, 0xe9, 0xa8, 0xc3, 0x03, 0xd5, 0xf1, 0xfe, 0xbb, 0x54, 0xfd, 0x72, 0x11, 0x69, 0x96, 0x6c, 0xb8, 0x2b, 0xa2, 0x4f, 0x90, 0x2f, 0xba, 0x56, 0x15, 0xef, 0x43, 0xf1, 0x0d, 0x43, 0x91, 0xf1, 0x28, 0x3e, 0xbd, 0x42, 0xbe, 0xf7, 0x38, 0xec, 0x4e, 0x0e, 0x6b, 0xc0, 0xb0, 0xc9, 0xaa, 0xd9, 0xdf, 0x78, 0x80, 0x90, 0x93, 0x12, 0xd1, 0x6e, 0x33, 0xb6, 0x62, 0x68, 0x8d, 0x3d, 0xd1, 0xd0, 0x0d, 0xd2, 0x00, 0x5e, 0xdf, 0x89, 0xff, 0xf7, 0x56, 0x76, 0x42, 0x8d, 0xfe, 0x4e, 0x45, 0xa7, 0xcc, 0xd2, 0x79, 0xca, 0x84, 0x57, 0xe5, 0x8f, 0x1c, 0x76, 0x36, 0xb2, 0xae, 0xd0, 0xd3, 0x4a, 0x23, 0x8e, 0x65, 0xba, 0x6a, 0xa1, 0x93, 0xac, 0xbb, 0x56, 0x83, 0x57, 0x3f, 0x8b, 0xbf, 0x55, 0xfa, 0x07, 0x51, 0xbc, 0xc6, 0x6f, 0x15, 0xa6, 0x8b, 0xd2, 0x17, 0x95, 0xa3, 0xbb, 0x8f, 0xca, 0x14, 0xdf, 0xe0, 0x57, 0x87, 0xf6, 0x93, 0x6f, 0xaa, 0x68, 0x97, 0x7e, 0x81, 0xfd, 0x8d, 0x5c, 0x14, 0xe5, 0xc2, 0xab, 0x4b, 0x3e, 0xd3, 0x92, 0x73, 0xfa, 0x79, 0xb2, 0x3f, 0xa2, 0xd3, 0xeb, 0xab, 0x43, 0xcc, 0xb5, 0xcc, 0xe5, 0xd9, 0x2d, 0xea, 0x5a, 0xe2, 0xb3, 0xb3, 0x9c, 0x4c, 0x38, 0xac, 0xfa, 0xad, 0x4f, 0x67, 0xcf, 0x26, 0x9c, 0x5d, 0xfa, 0x3b, 0x02, 0xe3, 0x2b, 0xb0, 0x40, 0xbf, 0x10, 0xdf, 0x1f, 0x24, 0xef, 0x38, 0x07, 0xaa, 0xc9, 0x3b, 0xce, 0xcb, 0x6c, 0xbd, 0xff, 0x06, 0xd5, 0x8a, 0xcb, 0x71, 0x67, 0x77, 0x1f, 0xe6, 0x7c, 0x9e, 0xf2, 0xcc, 0x95, 0xe5, 0x02, 0xe1, 0x7e, 0xb2, 0x0f, 0xa5, 0x8b, 0x37, 0x2c, 0x87, 0xe5, 0xbf, 0xb0, 0x1c, 0x3f, 0xd4, 0x4f, 0xa7, 0x6d, 0x4a, 0x23, 0xc6, 0x3c, 0x2d, 0x5a, 0xee, 0x8e, 0x2e, 0xfd, 0x2c, 0x78, 0xf1, 0xf7, 0x03, 0xd2, 0x8d, 0xe7, 0x7d, 0x88, 0x15, 0xcd, 0x5b, 0x59, 0xbb, 0x6c, 0x86, 0xa0, 0x87, 0x9b, 0x47, 0x58, 0xf7, 0x31, 0x87, 0xee, 0x27, 0x76, 0x0e, 0xc2, 0xd9, 0x71, 0x51, 0x4a, 0xe3, 0xa2, 0x06, 0xc7, 0x05, 0x69, 0xd2, 0xb9, 0x0d, 0x1b, 0x0d, 0xda, 0x65, 0x9e, 0xde, 0x6b, 0x4e, 0x37, 0x78, 0xd3, 0x1e, 0xa4, 0x76, 0x6a, 0xca, 0xb5, 0xe4, 0x34, 0x34, 0x3b, 0x3b, 0x20, 0x8c, 0x9c, 0xa0, 0x3f, 0x45, 0x68, 0x43, 0x76, 0xa6, 0xaf, 0x33, 0xbf, 0x88, 0xc5, 0xc3, 0x8d, 0x46, 0x9b, 0x68, 0x3f, 0x07, 0x8d, 0xb6, 0xfe, 0x61, 0x15, 0x43, 0xae, 0x04, 0xa8, 0x4f, 0x29, 0xe4, 0x4e, 0x23, 0x64, 0x92, 0x91, 0xf0, 0x45, 0xeb, 0x99, 0x95, 0xd9, 0xdf, 0xe8, 0x67, 0xbf, 0xbc, 0x36, 0x1e, 0xf3, 0x90, 0x5f, 0xcf, 0x44, 0x34, 0x63, 0xe1, 0x91, 0x58, 0xa6, 0x59, 0x13, 0xd1, 0x34, 0x8d, 0xca, 0x3b, 0x70, 0x54, 0xd6, 0xe3, 0xfc, 0x3e, 0x24, 0x46, 0x25, 0xec, 0xe3, 0x11, 0x48, 0x48, 0x70, 0x4f, 0x63, 0x6c, 0x17, 0x8f, 0xae, 0x65, 0xd3, 0x46, 0xd7, 0x65, 0xec, 0xe3, 0x09, 0xee, 0x4b, 0x1e, 0xf5, 0xda, 0x5c, 0x4c, 0x29, 0x44, 0x7a, 0x57, 0xdd, 0x01, 0x7c, 0xc2, 0x4f, 0x73, 0x7d, 0x7e, 0x25, 0xde, 0xcf, 0x31, 0x27, 0x0d, 0xfd, 0x4a, 0xee, 0xf3, 0x4f, 0x8b, 0xa7, 0xfa, 0x1c, 0xf3, 0xe6, 0x59, 0xd3, 0x5d, 0x43, 0xef, 0x4e, 0x1b, 0x39, 0x79, 0xa9, 0x5c, 0x9f, 0xc6, 0xc4, 0xf8, 0x54, 0x1a, 0xe4, 0x0f, 0x0e, 0x43, 0x06, 0x91, 0x47, 0x60, 0xbb, 0x13, 0xec, 0xcd, 0xb0, 0x7e, 0xdc, 0xe8, 0xcd, 0xb3, 0x79, 0xb3, 0x5c, 0xb9, 0xab, 0x0b, 0xe6, 0xea, 0x93, 0x5e, 0xa3, 0x1f, 0x2b, 0xb1, 0x1f, 0xf5, 0x09, 0xea, 0x3f, 0xf2, 0x3a, 0x18, 0x3f, 0x50, 0x4b, 0x98, 0x6e, 0x3f, 0x0f, 0x23, 0x37, 0x18, 0xa2, 0x72, 0x1c, 0x24, 0xef, 0x42, 0x40, 0x56, 0x2b, 0xc5, 0xf8, 0x75, 0xe0, 0xd7, 0x26, 0xb8, 0x91, 0xaf, 0xc4, 0x15, 0x94, 0x3f, 0x86, 0x06, 0x70, 0x5e, 0x5e, 0xc0, 0x2b, 0xc7, 0xd0, 0x03, 0x55, 0xe0, 0x41, 0x49, 0xe4, 0x89, 0x87, 0xf1, 0xae, 0x74, 0x68, 0x93, 0x1b, 0x7c, 0xe6, 0xe9, 0x7b, 0xc3, 0x9f, 0x50, 0x0f, 0x29, 0x89, 0xfb, 0x53, 0xa6, 0xc4, 0x26, 0x94, 0x4d, 0x6c, 0x64, 0xd9, 0x4f, 0x67, 0xeb, 0x8c, 0x0a, 0x47, 0xf6, 0x38, 0x0e, 0x1c, 0xd3, 0x17, 0x7f, 0x85, 0x94, 0xed, 0x2d, 0xa4, 0xeb, 0xf8, 0x3f, 0x88, 0xff, 0x0f, 0x39, 0x31, 0x4d, 0x42, 0x9e, 0xa2, 0x54, 0x6f, 0x57, 0xc1, 0x5a, 0x4c, 0xa3, 0x63, 0x60, 0x38, 0x5a, 0x4c, 0x63, 0x01, 0xff, 0xf1, 0x59, 0x8f, 0x18, 0x27, 0x43, 0x91, 0x2c, 0xe5, 0xc1, 0x78, 0xbd, 0x64, 0xe7, 0xc3, 0xfc, 0x2c, 0x61, 0x8d, 0x5d, 0x70, 0xce, 0x70, 0x15, 0x56, 0x98, 0x18, 0x31, 0xad, 0x49, 0x69, 0xbc, 0x36, 0xa4, 0xa2, 0x13, 0x5c, 0x95, 0x09, 0x5c, 0x55, 0xe8, 0x0c, 0x60, 0x75, 0xce, 0x02, 0x71, 0x33, 0xe1, 0xd1, 0x91, 0xc5, 0xb5, 0x32, 0x73, 0x7c, 0x23, 0x61, 0x57, 0xe2, 0xb5, 0xd9, 0x39, 0xf3, 0xe8, 0x00, 0xfe, 0x5b, 0x96, 0x7c, 0x64, 0xd1, 0xc9, 0x0a, 0xb5, 0xee, 0xa3, 0x52, 0xfd, 0x8d, 0x1f, 0x42, 0xf1, 0xc8, 0xc6, 0x2e, 0x93, 0x52, 0xd0, 0xda, 0x7f, 0xec, 0x87, 0x50, 0xba, 0x6b, 0xa0, 0xcb, 0xe4, 0x94, 0x5b, 0x37, 0xfc, 0xcb, 0xcb, 0x5d, 0x26, 0x6f, 0x5d, 0xeb, 0xc3, 0x59, 0x9b, 0x44, 0x61, 0x21, 0x1b, 0xc4, 0xb5, 0x16, 0x73, 0xbb, 0xe4, 0xaa, 0xdb, 0x76, 0x1a, 0x25, 0x7e, 0xeb, 0xb6, 0x7e, 0x57, 0x97, 0x7e, 0x09, 0xaf, 0x4b, 0x1e, 0xdb, 0x3f, 0xb4, 0x71, 0x18, 0x25, 0x96, 0x63, 0x0f, 0x57, 0x58, 0xdf, 0x78, 0xd0, 0x28, 0x9b, 0xd8, 0xfd, 0x02, 0xbd, 0x03, 0x63, 0x7d, 0x80, 0xb3, 0xfb, 0x02, 0xb6, 0xdf, 0x03, 0x69, 0x25, 0x6b, 0x8b, 0x4e, 0xeb, 0x5f, 0xfb, 0x56, 0x94, 0x2c, 0x66, 0xa0, 0x3c, 0x73, 0x81, 0xda, 0xf9, 0x32, 0xe3, 0x82, 0x18, 0xed, 0x5c, 0x42, 0xb3, 0x2c, 0xbf, 0xa5, 0xaf, 0x64, 0x6d, 0xf5, 0xac, 0x39, 0xbb, 0x33, 0xeb, 0xa2, 0x4f, 0xc8, 0xae, 0x88, 0x57, 0xcf, 0x62, 0xf2, 0x72, 0x95, 0x56, 0xa7, 0x59, 0x1d, 0x3d, 0x4a, 0x92, 0x12, 0xdb, 0x1e, 0x81, 0x53, 0x35, 0x7c, 0x11, 0xcc, 0xfd, 0x12, 0xf3, 0x10, 0x5f, 0x27, 0x3d, 0x6e, 0xf3, 0xd7, 0x90, 0x87, 0x88, 0xbc, 0x07, 0xf6, 0xba, 0xf7, 0x90, 0xb3, 0x24, 0x89, 0x61, 0x27, 0xbe, 0xef, 0x61, 0x1f, 0x82, 0x9b, 0xae, 0x1d, 0x05, 0x97, 0xad, 0x39, 0x5a, 0x73, 0xd0, 0x90, 0xaa, 0x1e, 0x37, 0x76, 0x0f, 0x37, 0xe1, 0x2a, 0x3f, 0x88, 0xab, 0xf4, 0x16, 0xe2, 0x63, 0x3c, 0xd7, 0xf0, 0x31, 0x2e, 0x18, 0xf9, 0x21, 0x72, 0x32, 0xcc, 0x99, 0x10, 0x8e, 0x1b, 0xf6, 0xd5, 0x61, 0xda, 0x3d, 0x27, 0x7b, 0x60, 0x94, 0x61, 0x1d, 0x8b, 0xdf, 0x97, 0x0c, 0xcb, 0x55, 0xe6, 0x75, 0x08, 0xb5, 0x7a, 0x30, 0xff, 0x64, 0x3e, 0xef, 0x59, 0x4b, 0xd4, 0x07, 0xb4, 0x6a, 0x76, 0xdc, 0x4c, 0x38, 0xb0, 0xe9, 0xc8, 0x87, 0x30, 0x14, 0x39, 0xad, 0x9f, 0x44, 0x49, 0x62, 0x2d, 0xca, 0x0f, 0x3d, 0xc6, 0xfd, 0xdb, 0x78, 0x9f, 0x31, 0xae, 0x09, 0x51, 0xa8, 0x1a, 0x53, 0xdc, 0xe2, 0x43, 0xce, 0x0e, 0x65, 0xcc, 0x0e, 0xe4, 0xd7, 0xd5, 0x85, 0xb4, 0x2f, 0x11, 0xeb, 0x29, 0x21, 0x9f, 0x45, 0x46, 0xbc, 0x33, 0x18, 0xaf, 0x19, 0x53, 0xbf, 0x8f, 0xe9, 0x0c, 0x96, 0x2a, 0xe5, 0x24, 0x7c, 0x9c, 0x5c, 0x2d, 0x42, 0x9a, 0x2d, 0xcf, 0xd2, 0xf6, 0x00, 0xc5, 0x48, 0x7f, 0x40, 0xbb, 0x99, 0x18, 0xbf, 0x43, 0xec, 0xa2, 0x22, 0xa7, 0x52, 0xee, 0xce, 0x7a, 0x2d, 0xa0, 0x9d, 0xbb, 0xd5, 0x42, 0xae, 0x9f, 0xc6, 0xd3, 0xed, 0xc0, 0x96, 0xe0, 0x7d, 0xd3, 0xe4, 0x63, 0xd8, 0x12, 0x9d, 0x8a, 0x47, 0x0a, 0x3a, 0xe5, 0xec, 0xf3, 0x2b, 0x56, 0x46, 0x92, 0x69, 0x9f, 0xb7, 0x04, 0x6c, 0xd8, 0x32, 0x96, 0x9e, 0xe2, 0x91, 0x81, 0x95, 0x25, 0x91, 0xb3, 0x50, 0x5c, 0x77, 0x06, 0x65, 0xc9, 0xb3, 0xe3, 0x03, 0x53, 0x76, 0xd9, 0xd3, 0x5b, 0xed, 0x52, 0xc5, 0x67, 0xb7, 0xda, 0x25, 0x46, 0xd2, 0xcd, 0x9d, 0x40, 0x09, 0xc9, 0x86, 0xf4, 0xac, 0x5d, 0xb4, 0xbf, 0x94, 0x78, 0x1e, 0xe9, 0x3c, 0x72, 0xc4, 0x2e, 0x93, 0x99, 0x76, 0x8b, 0xf6, 0x36, 0x4e, 0x7c, 0x7c, 0x62, 0xf1, 0xfb, 0x60, 0x21, 0x9e, 0x6a, 0xde, 0x3e, 0x23, 0x15, 0x39, 0xf9, 0xd8, 0xd4, 0xe9, 0xcf, 0xe4, 0xa4, 0x4b, 0xcd, 0x86, 0x1b, 0x1c, 0x89, 0x83, 0x77, 0xbe, 0x9a, 0x08, 0x27, 0x92, 0xce, 0x47, 0x88, 0xff, 0x31, 0xce, 0xe4, 0xc9, 0x73, 0x8a, 0x9b, 0xb8, 0xeb, 0x1e, 0x09, 0xfb, 0x9b, 0xa4, 0x2e, 0xd2, 0xf8, 0xcc, 0xb3, 0x59, 0x9e, 0xe2, 0xa8, 0xb5, 0x61, 0xa5, 0x12, 0x5b, 0xc3, 0x4a, 0x88, 0x3a, 0xda, 0x66, 0x92, 0x2b, 0x0d, 0x9e, 0xd5, 0x97, 0xe3, 0x35, 0x5b, 0x0c, 0x5b, 0x08, 0xbf, 0x33, 0x8c, 0x1c, 0xbd, 0x34, 0x85, 0x85, 0x36, 0x85, 0x30, 0x28, 0xb4, 0xcb, 0xa7, 0x7c, 0x4a, 0xe4, 0xb8, 0x53, 0x9b, 0xd2, 0x21, 0x57, 0xf3, 0x79, 0x6d, 0x36, 0xef, 0xe1, 0x3c, 0x5e, 0x36, 0xa7, 0x0b, 0x40, 0x61, 0xda, 0x6e, 0x1a, 0xdb, 0x24, 0x7b, 0xe1, 0xa8, 0x5a, 0x76, 0x33, 0xcd, 0x97, 0x7b, 0x6e, 0xa6, 0x3d, 0xae, 0x6f, 0x2e, 0xec, 0x86, 0x7b, 0x41, 0x43, 0x19, 0x76, 0x2d, 0xac, 0xbc, 0x99, 0xd0, 0xb8, 0x55, 0x1c, 0x33, 0x0d, 0x3c, 0x1a, 0x17, 0xe5, 0xf7, 0x33, 0x8e, 0xac, 0x38, 0x8e, 0xac, 0x1e, 0x63, 0x74, 0xb6, 0x11, 0x9a, 0x95, 0x71, 0x4f, 0xa3, 0xb3, 0xa9, 0xfe, 0x43, 0x20, 0xcd, 0x24, 0xf2, 0x24, 0xd0, 0x8f, 0xf2, 0xc3, 0x16, 0xa1, 0x3f, 0xf4, 0xdf, 0x1f, 0xc7, 0x38, 0x7d, 0xc6, 0xa8, 0x75, 0xf2, 0x28, 0xf5, 0x1b, 0x21, 0x34, 0x3e, 0xc3, 0x3c, 0x62, 0x43, 0x53, 0xbd, 0x3c, 0x19, 0x62, 0xae, 0x19, 0x65, 0xbf, 0xec, 0x28, 0x64, 0x14, 0x01, 0xf6, 0x4f, 0x80, 0x7d, 0x1b, 0xc2, 0x56, 0x63, 0xbf, 0x02, 0x55, 0x3e, 0x88, 0xf9, 0xc3, 0xfd, 0x52, 0x20, 0xfc, 0x5d, 0x3d, 0x08, 0xd5, 0x92, 0x56, 0x5b, 0xdd, 0x01, 0xa6, 0x97, 0x1a, 0xbb, 0xe5, 0xea, 0x59, 0x48, 0xd3, 0xcc, 0xbb, 0x12, 0xdd, 0x72, 0xc0, 0x5a, 0x43, 0x67, 0x8d, 0x3f, 0x0b, 0xcf, 0x8a, 0x1f, 0x72, 0xd7, 0x2f, 0xba, 0xd8, 0xa1, 0xc7, 0x0f, 0xfc, 0xf3, 0x81, 0x6e, 0xd9, 0x35, 0x8b, 0xf6, 0x41, 0xeb, 0x7f, 0xff, 0xb4, 0x1e, 0x1f, 0xfb, 0xc9, 0x58, 0xb7, 0xac, 0x58, 0x8d, 0x1d, 0xd0, 0xbd, 0x48, 0xa3, 0x1c, 0xe4, 0xd1, 0xbb, 0xcc, 0x0d, 0xce, 0xf8, 0xfd, 0xdb, 0xeb, 0x95, 0x98, 0x7f, 0x23, 0x7b, 0xae, 0x23, 0x3c, 0xbe, 0xaa, 0x12, 0x37, 0xdc, 0x12, 0xdf, 0x38, 0x5c, 0x17, 0xde, 0x30, 0x9a, 0x0b, 0x2b, 0xa2, 0x98, 0x1b, 0x8e, 0x45, 0x6a, 0x06, 0x90, 0x0e, 0x3a, 0x8c, 0x90, 0x5b, 0xe2, 0x1b, 0xc6, 0x23, 0xee, 0x45, 0xa1, 0x7e, 0x03, 0x6f, 0x25, 0xab, 0x47, 0xde, 0xcd, 0x9e, 0x14, 0x68, 0x3f, 0xd9, 0x16, 0x1b, 0xeb, 0x34, 0x5b, 0xd9, 0xbf, 0x2c, 0x79, 0x99, 0xbd, 0x4d, 0x45, 0x1a, 0xf9, 0x1c, 0xd8, 0x53, 0xd5, 0x5a, 0x74, 0x77, 0x7f, 0xda, 0x85, 0xdc, 0x8b, 0x5d, 0x92, 0xd2, 0xe5, 0xb4, 0x07, 0x5f, 0x21, 0xb1, 0x57, 0x32, 0xc9, 0xc6, 0xbf, 0x29, 0x8b, 0x1c, 0x99, 0xd4, 0xbf, 0x1e, 0xc1, 0xd4, 0xbe, 0xd1, 0xd2, 0xdf, 0xab, 0xec, 0xea, 0x4f, 0x59, 0x35, 0x7b, 0x0f, 0x08, 0x7f, 0xb4, 0xbc, 0x3b, 0xbf, 0x2f, 0xa7, 0x6f, 0x1e, 0xc6, 0xb9, 0xeb, 0x0d, 0x1b, 0x48, 0x3b, 0x1e, 0x37, 0xe1, 0x40, 0x3a, 0x7c, 0xf0, 0x75, 0xc2, 0x4b, 0x6a, 0x9c, 0xb8, 0x7a, 0x6f, 0xf2, 0xb1, 0xb9, 0xc0, 0x3a, 0xa5, 0x00, 0xbb, 0x5d, 0x19, 0x28, 0x8a, 0xd6, 0x11, 0xde, 0x22, 0xae, 0x3f, 0xe5, 0xbc, 0x6f, 0x93, 0x8c, 0x46, 0x79, 0xf7, 0x65, 0x76, 0x3a, 0xe4, 0x2b, 0x64, 0x6f, 0x22, 0x65, 0x48, 0x33, 0x71, 0x8e, 0xef, 0x83, 0x54, 0x05, 0x7b, 0xe3, 0x1a, 0x62, 0xfd, 0xdf, 0xd9, 0x48, 0xef, 0xad, 0x0b, 0xe5, 0x68, 0x9a, 0xf7, 0x6a, 0xf9, 0xa4, 0xf8, 0x0e, 0xf2, 0xf0, 0xa4, 0x68, 0x6b, 0x2a, 0x5a, 0x5b, 0xa2, 0xbc, 0x62, 0xbc, 0xa4, 0xa9, 0x06, 0x32, 0xab, 0x48, 0xcb, 0x73, 0x4d, 0x5a, 0x51, 0x3e, 0x91, 0x9b, 0x9d, 0x2e, 0xf2, 0x79, 0xa1, 0x88, 0x7c, 0x65, 0xd1, 0xea, 0x30, 0x79, 0x98, 0xd2, 0xba, 0x5d, 0xa4, 0xa5, 0xb8, 0x5a, 0x5a, 0xea, 0x0c, 0x29, 0xe3, 0x1e, 0x77, 0x5b, 0x4b, 0x6c, 0x8f, 0xb8, 0x8e, 0xf7, 0xe8, 0x4d, 0x6f, 0x85, 0xb1, 0x95, 0xd7, 0xde, 0xec, 0x97, 0x7b, 0x67, 0xfd, 0x7b, 0x87, 0x1c, 0x83, 0x9b, 0xfb, 0x63, 0xbd, 0x0b, 0x0f, 0x6d, 0x78, 0xff, 0x7b, 0xfd, 0x75, 0xda, 0xa9, 0xe4, 0x77, 0xfe, 0x5f, 0xf9, 0x97, 0xcf, 0x43, 0x5d, 0xe2, 0x56, 0xf1, 0x32, 0x5d, 0xa8, 0xb8, 0x11, 0xca, 0x12, 0x61, 0x4a, 0xf5, 0x92, 0x1f, 0x25, 0x45, 0x51, 0xa3, 0x23, 0xa5, 0x30, 0xcd, 0x03, 0x13, 0x79, 0xb8, 0xce, 0xf9, 0x30, 0x72, 0xa2, 0x1c, 0xa5, 0x90, 0x5d, 0x4b, 0x29, 0xef, 0xbb, 0xae, 0x82, 0x76, 0x03, 0xb5, 0xd0, 0xce, 0x7e, 0x89, 0xf0, 0xfd, 0x79, 0xcf, 0x81, 0xa9, 0x14, 0x0c, 0xab, 0x8c, 0xeb, 0x3c, 0x6d, 0x09, 0x2b, 0x3b, 0xda, 0x57, 0xbf, 0x16, 0x69, 0x92, 0xac, 0xed, 0x6c, 0xff, 0x84, 0x29, 0x97, 0x81, 0x29, 0x55, 0xca, 0x28, 0x92, 0xd8, 0x47, 0xf2, 0xaf, 0x53, 0xe6, 0xe8, 0x10, 0xd2, 0x4b, 0xa5, 0x47, 0x52, 0xfa, 0x73, 0x58, 0x53, 0x1d, 0x9f, 0xed, 0x31, 0x2a, 0x4c, 0x76, 0xba, 0x6c, 0x93, 0x41, 0x7b, 0x5f, 0x94, 0x6a, 0x45, 0x25, 0x2c, 0x17, 0xf6, 0x7b, 0x8b, 0x3f, 0xb6, 0x40, 0x62, 0x1b, 0xf6, 0xff, 0x09, 0x97, 0x87, 0x71, 0x1d, 0x8f, 0x3a, 0xa3, 0x3d, 0x40, 0xe7, 0x16, 0x93, 0x4f, 0x11, 0xaf, 0x76, 0xf2, 0xd7, 0x35, 0xc8, 0xad, 0x9d, 0xe8, 0x02, 0x39, 0xd8, 0x05, 0xa6, 0xd6, 0xc4, 0xb1, 0xd7, 0x42, 0x0b, 0xc0, 0xdc, 0x1a, 0x3b, 0x5e, 0xef, 0x6c, 0x8b, 0x4c, 0x4c, 0x3e, 0x1e, 0x3f, 0x18, 0x4c, 0xe0, 0xac, 0x4c, 0x36, 0x4e, 0x4c, 0xa6, 0x8c, 0xd2, 0x39, 0x7d, 0x05, 0xce, 0x55, 0x86, 0x1f, 0x78, 0xd2, 0xb5, 0x92, 0xd9, 0x9f, 0x84, 0x89, 0x51, 0x80, 0xc9, 0x8b, 0xc9, 0x63, 0x5a, 0x47, 0x5e, 0x0c, 0x8b, 0x88, 0x51, 0x91, 0x24, 0x6f, 0x92, 0xf1, 0x4e, 0x5d, 0xcf, 0xc6, 0x72, 0x46, 0x15, 0xbb, 0x93, 0xed, 0x62, 0x26, 0xf7, 0x0a, 0xaf, 0x15, 0x4a, 0x1b, 0xd9, 0x18, 0xe6, 0xfc, 0x91, 0xca, 0x38, 0xaa, 0x4a, 0x8d, 0x94, 0x4d, 0xf1, 0xd5, 0xc8, 0x8d, 0x93, 0xbd, 0xd0, 0xdb, 0xf8, 0x9e, 0xd5, 0x59, 0x98, 0x7b, 0xcf, 0xc5, 0x36, 0x8c, 0x84, 0x07, 0xfc, 0x1d, 0xc2, 0x45, 0xf2, 0xd3, 0xfc, 0x61, 0x1f, 0x68, 0x59, 0x3c, 0xd5, 0xc6, 0x0f, 0xf9, 0x44, 0xcb, 0x5d, 0x39, 0x3f, 0x6b, 0xa7, 0x4c, 0xd8, 0xaa, 0x6b, 0x41, 0xf3, 0xb3, 0xc7, 0x3e, 0x19, 0xe6, 0xa4, 0x4b, 0xf9, 0xbf, 0x28, 0x5d, 0xc2, 0xff, 0x8e, 0x54, 0xc9, 0xad, 0x74, 0xf6, 0x6e, 0xd5, 0x6c, 0xc1, 0xe7, 0xc8, 0xb7, 0xde, 0xed, 0xec, 0x47, 0x6f, 0xad, 0x94, 0x45, 0x10, 0x65, 0x2f, 0x77, 0x07, 0xe8, 0x1c, 0x27, 0x63, 0x6b, 0x17, 0xde, 0xbe, 0x9f, 0xa4, 0x35, 0x0d, 0x73, 0x1e, 0xc4, 0x1e, 0xd8, 0x82, 0xb9, 0x0f, 0x51, 0xee, 0xee, 0xf9, 0xb0, 0x3c, 0x80, 0xf9, 0x31, 0xb6, 0x24, 0xc0, 0x16, 0xe1, 0x21, 0xa4, 0xf1, 0x42, 0x29, 0x2c, 0x16, 0x48, 0x72, 0x2b, 0x0d, 0x3c, 0x1d, 0xa4, 0xbc, 0x28, 0x29, 0xc9, 0xf1, 0x03, 0xbd, 0x80, 0x9c, 0xe8, 0x4d, 0x3c, 0xe7, 0xec, 0xce, 0x26, 0x96, 0xcb, 0x06, 0x7c, 0x9d, 0x60, 0x85, 0xe0, 0xcd, 0x5d, 0xb8, 0xe2, 0x2c, 0x66, 0x7c, 0x91, 0x16, 0x1c, 0xb5, 0xd6, 0xa3, 0x9d, 0x20, 0xd3, 0x8c, 0xb3, 0x3d, 0x8a, 0x7d, 0x22, 0xa7, 0xec, 0xc4, 0x83, 0xb7, 0x46, 0x8f, 0xa9, 0xe4, 0xef, 0x1a, 0xcb, 0x5d, 0x09, 0xc5, 0x7c, 0x57, 0x09, 0x25, 0xad, 0x75, 0x6f, 0x44, 0x9c, 0x4d, 0x59, 0x8b, 0x33, 0x81, 0x27, 0x2d, 0x70, 0x32, 0xf1, 0xfd, 0x95, 0xcc, 0x3b, 0xf8, 0x8d, 0xf3, 0x0c, 0xf6, 0xa8, 0x23, 0xd0, 0xd8, 0x84, 0x76, 0x10, 0xcd, 0x1c, 0x27, 0x8d, 0xe6, 0x28, 0x8f, 0x3b, 0x89, 0x10, 0x48, 0x19, 0xd5, 0x53, 0x66, 0xeb, 0x47, 0x71, 0x6e, 0x61, 0xd3, 0x64, 0x71, 0xb6, 0x6a, 0x13, 0x3a, 0x07, 0xfe, 0x8a, 0xec, 0xec, 0xc1, 0xb9, 0x4b, 0x76, 0x66, 0x1c, 0x73, 0x25, 0xdb, 0x98, 0x89, 0x13, 0xb1, 0x32, 0x63, 0xae, 0x64, 0xe7, 0x65, 0x5d, 0xfe, 0xa8, 0x1e, 0x1f, 0x10, 0xbb, 0x2f, 0xd7, 0xec, 0x17, 0xa5, 0x72, 0xbe, 0x99, 0x68, 0x67, 0x97, 0x2d, 0x73, 0xdc, 0x6e, 0x46, 0x56, 0xc3, 0x16, 0xa6, 0x3e, 0xae, 0x0c, 0x58, 0x20, 0x1a, 0x8d, 0xd6, 0x2d, 0x9a, 0xd0, 0x0f, 0x6b, 0xe4, 0x4b, 0xcb, 0x32, 0x8e, 0xbd, 0x38, 0x44, 0xba, 0x0e, 0x75, 0xb8, 0xd2, 0x50, 0x3c, 0x2b, 0x86, 0x98, 0x31, 0xc4, 0x3c, 0x42, 0xd6, 0x39, 0x80, 0x23, 0x6b, 0x76, 0xf2, 0x51, 0xa1, 0x8f, 0x94, 0x7a, 0xed, 0xf6, 0x3a, 0xb0, 0xdc, 0x1e, 0x05, 0xac, 0x87, 0x97, 0x11, 0x44, 0xf3, 0xf2, 0xca, 0xe5, 0x43, 0xb9, 0xfe, 0x7a, 0xac, 0xc2, 0x03, 0x36, 0xce, 0x91, 0x3c, 0x43, 0x2d, 0xd7, 0x4c, 0x2f, 0xf5, 0x93, 0x86, 0x33, 0xa5, 0xc5, 0x29, 0x9d, 0xd7, 0x9a, 0x6e, 0x74, 0x46, 0x8c, 0xb4, 0x3f, 0x48, 0x5e, 0xa4, 0x1a, 0x27, 0x74, 0x37, 0x5b, 0x09, 0x3c, 0xc6, 0xb1, 0x8f, 0x69, 0x15, 0xf8, 0x7e, 0xa9, 0xa2, 0xb2, 0x65, 0x83, 0x2d, 0xe5, 0xe0, 0x94, 0x86, 0xf9, 0xd9, 0xbb, 0x82, 0x76, 0x88, 0xf2, 0x88, 0x1c, 0xeb, 0x27, 0x26, 0xcf, 0x68, 0x27, 0xb9, 0x6c, 0x64, 0x99, 0x54, 0x3e, 0xd5, 0x06, 0x54, 0xd2, 0xd7, 0xc7, 0xb0, 0xac, 0x54, 0xb6, 0xd2, 0x4a, 0xc7, 0x3a, 0xc0, 0xb8, 0xfb, 0x34, 0xe7, 0xee, 0xfe, 0x94, 0xd9, 0x55, 0x90, 0x72, 0x6b, 0xa1, 0x1b, 0x96, 0x4a, 0xae, 0x10, 0xed, 0x20, 0x72, 0x3c, 0xaa, 0xb9, 0x95, 0x02, 0xcd, 0x95, 0x2d, 0x4d, 0xda, 0xe6, 0x02, 0xcd, 0xb2, 0xae, 0xf8, 0x0d, 0x2c, 0xf5, 0x64, 0x2f, 0xfb, 0xe4, 0x15, 0xa5, 0x7e, 0x93, 0x46, 0xbf, 0xab, 0x3c, 0x8b, 0x9f, 0x3b, 0x8d, 0xea, 0x0a, 0xcd, 0xb2, 0xf0, 0x67, 0x50, 0xdd, 0x8a, 0x2c, 0xd5, 0x7d, 0x7d, 0xff, 0x2d, 0x71, 0xd6, 0xc7, 0x31, 0xd5, 0x9d, 0x46, 0x49, 0xe9, 0x41, 0xa4, 0xc3, 0x1d, 0x78, 0x8f, 0xab, 0xfd, 0x14, 0x6d, 0x23, 0x6f, 0xa9, 0xc6, 0xcc, 0x6a, 0xc2, 0x3c, 0x08, 0x57, 0xab, 0x8d, 0xf0, 0x50, 0x83, 0x58, 0x5f, 0xc2, 0xb0, 0x0a, 0x11, 0x7e, 0x4c, 0x47, 0x0e, 0x33, 0x30, 0x87, 0x93, 0xeb, 0xa6, 0x3c, 0x4c, 0xc3, 0x49, 0xc2, 0x4a, 0x1d, 0x6a, 0x4a, 0x44, 0x52, 0xe6, 0x84, 0x8a, 0x33, 0x70, 0x93, 0xe1, 0x2d, 0x34, 0x84, 0x5c, 0x4d, 0x1c, 0xb9, 0x9a, 0xe3, 0xc4, 0xd5, 0xb0, 0x37, 0x46, 0x95, 0xf1, 0x41, 0x25, 0x03, 0x27, 0xb4, 0x80, 0xd1, 0x41, 0xfd, 0x62, 0x9d, 0xc6, 0xd6, 0x8c, 0x57, 0x7e, 0x1d, 0x33, 0x45, 0x8e, 0xf4, 0x8e, 0x93, 0xe1, 0x48, 0x48, 0x5d, 0xf4, 0x21, 0x84, 0xb4, 0x0a, 0x42, 0x3e, 0x7b, 0xfd, 0x35, 0xf2, 0x6e, 0x8a, 0x57, 0xe6, 0xd7, 0x5f, 0xc5, 0x2b, 0x2f, 0xe9, 0x4c, 0x39, 0xa7, 0xa8, 0xbf, 0xc4, 0xfc, 0xc4, 0x6c, 0x25, 0x9a, 0x1c, 0x12, 0xda, 0x66, 0xa9, 0x23, 0x8a, 0xc9, 0x98, 0x79, 0xee, 0xe4, 0xdf, 0x10, 0xc6, 0x42, 0x98, 0x38, 0x61, 0x3e, 0xaf, 0xa8, 0xc8, 0xe1, 0x04, 0xba, 0xa3, 0xbf, 0x19, 0xbb, 0xd7, 0x7d, 0x02, 0xdb, 0xfc, 0xca, 0xe4, 0x7a, 0xd7, 0xf1, 0xad, 0xbe, 0x36, 0x70, 0xb3, 0x2f, 0xde, 0xc7, 0x0c, 0x9d, 0x35, 0x17, 0xd7, 0xc3, 0x8c, 0xeb, 0x52, 0x36, 0xbf, 0x58, 0x36, 0x3f, 0x25, 0x41, 0x34, 0xea, 0xea, 0x7d, 0xda, 0x91, 0xc4, 0xc0, 0x14, 0xbe, 0xa0, 0x8b, 0xb0, 0x7c, 0x42, 0xd3, 0x10, 0x4c, 0xc3, 0xcd, 0x82, 0x72, 0x1d, 0xc3, 0xf9, 0x4f, 0xbc, 0x47, 0x0c, 0xcb, 0x11, 0xc7, 0xf6, 0x6d, 0x12, 0x08, 0xad, 0x9c, 0x43, 0x21, 0x84, 0xc6, 0xbf, 0x87, 0x3c, 0x5f, 0xd8, 0xd5, 0x25, 0x76, 0x0d, 0xa7, 0xe9, 0x5b, 0x86, 0xae, 0xc1, 0x0a, 0x15, 0x6d, 0xeb, 0xc5, 0xb6, 0x55, 0xb1, 0x6d, 0x8f, 0x61, 0x7b, 0x90, 0x3d, 0x63, 0xd0, 0x68, 0xd9, 0x62, 0x4a, 0x83, 0x64, 0x62, 0x6a, 0xb7, 0x5f, 0x1d, 0xf6, 0x2d, 0x86, 0x52, 0xa3, 0xad, 0xcb, 0x49, 0x3a, 0xa6, 0x36, 0xe4, 0x50, 0xf2, 0xb1, 0xe6, 0xca, 0xcb, 0xc5, 0x9b, 0xc3, 0x08, 0xe5, 0x33, 0xb8, 0x4f, 0x27, 0x0d, 0x8c, 0x50, 0x92, 0x7c, 0xbc, 0xd9, 0x11, 0xa2, 0xd0, 0x49, 0x8f, 0x4a, 0xb5, 0x30, 0x5a, 0x26, 0x88, 0x3c, 0xd2, 0xf5, 0x25, 0x0e, 0xde, 0xb0, 0xc4, 0x6e, 0x2c, 0x71, 0xc8, 0x18, 0x0d, 0x5e, 0xea, 0x77, 0xa3, 0xc4, 0x0e, 0x4a, 0x83, 0xbd, 0x79, 0xbd, 0x8f, 0xb2, 0x46, 0x9c, 0x7c, 0xef, 0x72, 0x79, 0x4b, 0xa9, 0xac, 0x18, 0x66, 0xc6, 0x30, 0x3a, 0x37, 0x52, 0xf2, 0x72, 0x70, 0xe7, 0x95, 0xd6, 0x07, 0x2a, 0x96, 0x37, 0x29, 0xca, 0xcb, 0xe7, 0x44, 0xee, 0x2c, 0x12, 0x2b, 0x23, 0x6b, 0x30, 0x6f, 0xcc, 0xf6, 0xa6, 0xb9, 0x39, 0x4c, 0xab, 0x35, 0xf5, 0x3c, 0xae, 0x0d, 0x24, 0xaf, 0x16, 0x8a, 0xb5, 0xa1, 0x7a, 0x01, 0x98, 0xde, 0x58, 0x0d, 0x16, 0x5c, 0x23, 0xcc, 0xc7, 0x56, 0x83, 0x15, 0x47, 0x64, 0xac, 0xb2, 0x58, 0xf8, 0xa1, 0x5f, 0x32, 0x31, 0x71, 0x42, 0x6b, 0x31, 0xfc, 0x12, 0x27, 0x02, 0x05, 0xa4, 0xa3, 0xb4, 0x30, 0x02, 0x7e, 0xbf, 0x4c, 0x9a, 0x4a, 0x0b, 0x55, 0x08, 0x24, 0x22, 0x5d, 0x81, 0x84, 0xda, 0x55, 0xb5, 0x0b, 0x53, 0xc8, 0xb8, 0x47, 0xf0, 0xfd, 0x8c, 0x73, 0x0a, 0x85, 0x75, 0x4a, 0x97, 0xde, 0x0b, 0x3d, 0xa6, 0x91, 0xcd, 0x29, 0xf3, 0xfc, 0x46, 0xa4, 0xe8, 0x76, 0xa6, 0x09, 0xdb, 0x2b, 0xc4, 0xa8, 0x7d, 0x5a, 0x31, 0x1b, 0x3e, 0xb1, 0x1c, 0xd9, 0x16, 0xf7, 0xd3, 0x69, 0x66, 0x9c, 0x2c, 0x65, 0x49, 0xcb, 0x4b, 0x89, 0x62, 0x6a, 0x2e, 0xa6, 0x2e, 0x4a, 0xe3, 0xc5, 0x52, 0x48, 0xfc, 0x10, 0x4b, 0x53, 0x8c, 0xed, 0x1a, 0xbb, 0xe5, 0xcb, 0x3e, 0x71, 0xfe, 0x15, 0xac, 0x44, 0xbe, 0xb9, 0x79, 0xeb, 0x22, 0xf2, 0x45, 0xbc, 0x1e, 0xfb, 0xde, 0x2e, 0xac, 0xdf, 0xfe, 0xfb, 0xe3, 0xfe, 0x2a, 0x70, 0x8c, 0x63, 0x4b, 0x13, 0x7e, 0x2e, 0x51, 0x6b, 0x2c, 0x73, 0x08, 0xc3, 0x8a, 0x30, 0x8c, 0x69, 0x35, 0xde, 0xd7, 0xe4, 0x70, 0x54, 0x4b, 0x72, 0x36, 0x00, 0x39, 0xfe, 0xaa, 0x82, 0x74, 0x0a, 0xc1, 0x52, 0x80, 0x6b, 0x2c, 0xfb, 0xb7, 0xc0, 0xbc, 0x1a, 0xa8, 0xdc, 0x9a, 0xfc, 0xb7, 0xbf, 0xc0, 0xd0, 0xc2, 0xb4, 0xcd, 0x08, 0x7d, 0x95, 0x42, 0x99, 0x42, 0xdd, 0x47, 0x79, 0xfd, 0xe4, 0x17, 0xe9, 0x75, 0x7c, 0x3e, 0x1a, 0xf4, 0xad, 0x21, 0xb4, 0x61, 0xec, 0xc9, 0xf0, 0x75, 0x96, 0xb5, 0xb9, 0x11, 0x53, 0x89, 0xad, 0xd2, 0x23, 0xd3, 0x49, 0x61, 0xb6, 0xbc, 0x43, 0xab, 0xb9, 0xac, 0xde, 0x5c, 0x59, 0x45, 0x7b, 0x57, 0x89, 0x15, 0x6e, 0x1a, 0xce, 0x6d, 0xf9, 0xf4, 0xb2, 0x2a, 0x05, 0x06, 0x82, 0xb0, 0x7b, 0x8a, 0x27, 0x14, 0xfd, 0x4f, 0xeb, 0xf0, 0xbf, 0x8e, 0xb9, 0x56, 0x5f, 0x57, 0xdb, 0x6b, 0xf0, 0x41, 0xa3, 0xcf, 0x93, 0xdc, 0x95, 0x45, 0x11, 0xf7, 0xd3, 0x2a, 0x45, 0x5c, 0xb2, 0xcb, 0x95, 0xbf, 0x22, 0x32, 0x92, 0x46, 0xa5, 0xdf, 0x02, 0x8b, 0x26, 0x2e, 0xbf, 0xa4, 0x15, 0xe5, 0x68, 0x45, 0x5d, 0x8e, 0x36, 0xf1, 0x9a, 0x65, 0x50, 0xa6, 0xb7, 0x71, 0x9d, 0x61, 0x6e, 0x86, 0x78, 0x70, 0x71, 0x46, 0x89, 0xb2, 0xf4, 0x7a, 0xde, 0xd1, 0x8a, 0x63, 0xba, 0x8e, 0x69, 0xfb, 0x08, 0x03, 0xe9, 0xe0, 0x23, 0x87, 0x49, 0xbf, 0xe0, 0xca, 0xa0, 0x93, 0x38, 0x82, 0x8a, 0xaf, 0x75, 0xc2, 0x26, 0xb0, 0x7f, 0x8d, 0x76, 0x75, 0x00, 0x8a, 0xbf, 0xce, 0xe8, 0x7f, 0xf4, 0xfe, 0x94, 0xb4, 0x4b, 0x3b, 0x00, 0x44, 0x79, 0xe8, 0x6c, 0x33, 0x79, 0xb7, 0xfe, 0x1c, 0xe7, 0xd2, 0xc5, 0x1a, 0xae, 0xeb, 0x8d, 0x7d, 0xb3, 0x1f, 0xdc, 0x20, 0x1f, 0x80, 0x87, 0x71, 0xbc, 0x38, 0xd9, 0x0e, 0xf4, 0x4d, 0xa1, 0x49, 0xfb, 0x15, 0x94, 0x7c, 0xf5, 0x77, 0xf9, 0xf7, 0x5c, 0x7e, 0x6c, 0xc2, 0x47, 0x8e, 0x9c, 0xd3, 0x2f, 0x54, 0xc6, 0xf5, 0x09, 0x3a, 0xbf, 0xc7, 0xeb, 0x4b, 0x78, 0x7d, 0x01, 0xff, 0xdf, 0xc4, 0xff, 0x3d, 0x95, 0x5c, 0x3a, 0x7d, 0xdf, 0x5d, 0xf8, 0xaf, 0x1f, 0xe8, 0x81, 0x5e, 0x47, 0xee, 0xdd, 0xd7, 0xa8, 0x14, 0x75, 0xe7, 0xf4, 0x1d, 0x53, 0xe5, 0xa5, 0xb7, 0xa6, 0xf4, 0xf5, 0xb3, 0x5a, 0xb4, 0x74, 0xae, 0x1f, 0x33, 0xe9, 0x4f, 0x0a, 0xdd, 0x35, 0x08, 0x28, 0x73, 0x48, 0xab, 0x43, 0x92, 0xd3, 0x0d, 0x2b, 0xd8, 0x6b, 0xa0, 0x24, 0xb1, 0x4e, 0x57, 0x11, 0x5f, 0x17, 0xa6, 0x9b, 0xf9, 0xdf, 0x9c, 0xea, 0xd1, 0x96, 0x61, 0x0e, 0x21, 0x42, 0x8e, 0x98, 0xd2, 0xc9, 0x21, 0x3e, 0x32, 0xbd, 0xf4, 0x96, 0x04, 0x58, 0x5a, 0x76, 0x20, 0xdd, 0x3c, 0x8d, 0xf3, 0x2e, 0x51, 0x41, 0x3d, 0xbe, 0x1a, 0x42, 0x75, 0x67, 0xf4, 0x8b, 0x84, 0x3b, 0x3e, 0x75, 0x36, 0xdc, 0xfa, 0x3c, 0x78, 0x71, 0x75, 0x46, 0xbe, 0x9a, 0x9e, 0x4d, 0xed, 0xb4, 0x68, 0xf6, 0x69, 0xf7, 0x26, 0xf2, 0x26, 0x4c, 0xfe, 0x86, 0x15, 0x8b, 0xa1, 0xf9, 0xc1, 0x7c, 0xb1, 0x52, 0x91, 0xc5, 0x56, 0x21, 0x84, 0x79, 0x1c, 0x1d, 0xc5, 0x95, 0xc8, 0x9d, 0x69, 0x73, 0x99, 0x07, 0x36, 0x81, 0x94, 0x16, 0xff, 0x72, 0xca, 0x36, 0x8f, 0x78, 0x5f, 0x93, 0x66, 0x72, 0xe1, 0xca, 0x8c, 0x1c, 0x6f, 0x34, 0xc7, 0xf1, 0x1e, 0x6b, 0x7a, 0x6b, 0xa5, 0x29, 0xcb, 0x19, 0x31, 0xc5, 0x65, 0x0f, 0xb5, 0xbc, 0xe7, 0x84, 0x6b, 0x17, 0x8f, 0xd8, 0x58, 0x6e, 0xd5, 0x6f, 0xca, 0x5b, 0xf3, 0xfd, 0xc6, 0x9a, 0x1f, 0x79, 0x7d, 0x2c, 0x3a, 0x44, 0x2b, 0x3e, 0x7e, 0x09, 0xf7, 0xd4, 0xcb, 0xa8, 0x48, 0x2a, 0xe1, 0xeb, 0xe9, 0xcb, 0x59, 0xa3, 0xdc, 0x27, 0xd0, 0x2f, 0x88, 0x5e, 0x52, 0x4e, 0x74, 0xaa, 0xee, 0x23, 0x5f, 0xe0, 0x84, 0xa3, 0x9b, 0xe3, 0xdf, 0xc7, 0x7f, 0x44, 0xa2, 0x31, 0xbe, 0xe3, 0x16, 0xbd, 0x62, 0xf4, 0x84, 0xb0, 0xf1, 0x37, 0xc6, 0x3f, 0xcd, 0x98, 0xfa, 0x8f, 0x2c, 0x40, 0xa5, 0xc4, 0x51, 0xfa, 0x44, 0x16, 0x9f, 0x21, 0xa7, 0xbb, 0x53, 0xec, 0x5d, 0x9d, 0x5d, 0x6f, 0x09, 0x13, 0x18, 0xe3, 0x6c, 0xbb, 0x86, 0x2b, 0xcd, 0xc3, 0x72, 0x27, 0x8b, 0x81, 0x26, 0x03, 0xc9, 0x9d, 0x74, 0xcf, 0x04, 0x7e, 0x37, 0xc9, 0xa0, 0xbf, 0x1a, 0x23, 0x9d, 0x15, 0xa3, 0x0d, 0x8b, 0x8c, 0x36, 0x64, 0xe4, 0x64, 0xe5, 0x9f, 0x48, 0xb7, 0x88, 0xaf, 0x1e, 0xa1, 0x32, 0x2a, 0xdd, 0xd9, 0xf2, 0x13, 0x57, 0xfb, 0xfa, 0x58, 0xcb, 0x73, 0x60, 0xbb, 0x3e, 0xb4, 0xf5, 0x06, 0xa1, 0x8a, 0xdf, 0x22, 0xf8, 0x61, 0x83, 0xd3, 0xa2, 0x56, 0x62, 0x2a, 0x13, 0xc2, 0xb6, 0xad, 0xce, 0xf2, 0xe8, 0x2e, 0x35, 0x47, 0x25, 0x24, 0x6e, 0xf5, 0xf2, 0xcf, 0xe2, 0xb4, 0xa6, 0xf8, 0x2b, 0xe6, 0x40, 0xd8, 0x33, 0x29, 0xe9, 0xa6, 0x4c, 0xe7, 0x40, 0x88, 0xf3, 0xb8, 0x57, 0x39, 0x41, 0xdc, 0x87, 0x4b, 0x89, 0x31, 0x57, 0x91, 0x62, 0xee, 0x3f, 0xcb, 0x7d, 0x28, 0x39, 0x8a, 0x52, 0x7f, 0x43, 0xee, 0xa3, 0x74, 0x1a, 0xf7, 0x11, 0xbc, 0x46, 0x1e, 0x66, 0xfe, 0xe3, 0x1b, 0x5b, 0x99, 0xfa, 0x39, 0x72, 0xfd, 0x5a, 0x6c, 0xf0, 0x1d, 0x44, 0x97, 0x49, 0x1b, 0xa6, 0xd4, 0xd5, 0x61, 0xac, 0xe3, 0xf9, 0x54, 0xd9, 0x34, 0xc5, 0xc9, 0xb8, 0xbe, 0xd9, 0xcc, 0x23, 0x12, 0xa5, 0x0c, 0x51, 0x2a, 0x13, 0xe9, 0x63, 0xe5, 0xde, 0x2a, 0xb9, 0xd1, 0x5b, 0xa2, 0xfe, 0x4c, 0xeb, 0xee, 0x26, 0x1b, 0x95, 0x85, 0x35, 0x9e, 0x05, 0x6c, 0x07, 0x6f, 0xab, 0x22, 0x2c, 0xf1, 0x7a, 0x5a, 0x8f, 0x9d, 0x31, 0x57, 0xce, 0x17, 0xc7, 0x62, 0x94, 0x17, 0x7f, 0x7a, 0x96, 0x7d, 0x30, 0x9f, 0x21, 0x6b, 0x40, 0x93, 0x49, 0xbf, 0xf2, 0x92, 0xc0, 0xa1, 0x98, 0xa2, 0xf2, 0xe7, 0xf4, 0x2b, 0x53, 0x23, 0x9e, 0x34, 0x8d, 0x5d, 0x8b, 0x48, 0xcf, 0x5a, 0xe8, 0xe5, 0x93, 0x2d, 0x36, 0xbc, 0xc0, 0xe8, 0xe2, 0x33, 0x90, 0x8e, 0x9d, 0x16, 0x2b, 0x1f, 0xa5, 0x25, 0x59, 0xf4, 0xd3, 0x95, 0x75, 0xfa, 0x59, 0x4e, 0x57, 0x66, 0x4b, 0x6f, 0xdb, 0x75, 0x48, 0xe9, 0x79, 0x69, 0x57, 0xb6, 0xe9, 0x97, 0x17, 0x9f, 0xd3, 0x2f, 0xf7, 0x9d, 0x3e, 0xf9, 0x7d, 0x6d, 0xaa, 0x07, 0x1a, 0x72, 0x3d, 0x50, 0xe7, 0x5a, 0xe4, 0xcc, 0xe6, 0xbb, 0x53, 0x61, 0x19, 0x52, 0xf4, 0x5b, 0xea, 0x28, 0xe7, 0x51, 0x60, 0x94, 0xfd, 0x33, 0xd2, 0x37, 0x3c, 0xf0, 0xec, 0x12, 0xc8, 0xf0, 0xce, 0xfa, 0x3c, 0x44, 0xee, 0x45, 0xd3, 0x7a, 0x90, 0xf6, 0xe1, 0xc7, 0x84, 0xff, 0x15, 0x42, 0x12, 0x20, 0x8d, 0x79, 0xa7, 0xf0, 0x65, 0xa1, 0xb8, 0x3a, 0xc1, 0xe5, 0xed, 0x84, 0xe5, 0x84, 0xbf, 0x9e, 0x8e, 0x62, 0x6b, 0x5a, 0x43, 0xcd, 0xd5, 0xab, 0xc0, 0xf2, 0x9b, 0x5f, 0x54, 0x77, 0x80, 0x1c, 0x58, 0x05, 0xd6, 0x7f, 0x7d, 0x05, 0x65, 0x5c, 0xf2, 0x78, 0x55, 0xd7, 0x8b, 0x92, 0x38, 0x4b, 0xb9, 0x56, 0x3e, 0x6f, 0x23, 0xad, 0x1b, 0x92, 0x32, 0x7e, 0x0a, 0xa7, 0x2a, 0xc9, 0xa7, 0x67, 0x69, 0x76, 0xd5, 0x58, 0x5e, 0x7e, 0x63, 0xab, 0x9c, 0xe9, 0xb8, 0x34, 0xa4, 0x69, 0xc5, 0x23, 0x0a, 0x47, 0x80, 0x79, 0x0f, 0x8f, 0x00, 0x6f, 0xa0, 0x03, 0x1a, 0xfc, 0x1d, 0x82, 0x33, 0x74, 0xc9, 0x38, 0xb2, 0x16, 0x23, 0xed, 0x89, 0x93, 0x2d, 0xc5, 0xf5, 0x23, 0xc3, 0xf5, 0x4d, 0xa1, 0x4b, 0xe4, 0xf4, 0xf1, 0x38, 0x22, 0x5f, 0xec, 0x61, 0xcd, 0xaa, 0xa8, 0xbb, 0x9e, 0x93, 0x63, 0x69, 0xb3, 0xe2, 0xc0, 0x56, 0xbc, 0x90, 0xe7, 0x8f, 0x55, 0xe8, 0x47, 0x06, 0x0d, 0x8c, 0xec, 0x80, 0xd2, 0x69, 0xde, 0xf3, 0xe2, 0x01, 0xf2, 0x52, 0xcd, 0xeb, 0x59, 0x19, 0xd9, 0x3a, 0xe1, 0x8a, 0x53, 0x8a, 0x9c, 0x05, 0xf3, 0x89, 0xbc, 0xa3, 0x4f, 0xfe, 0x7a, 0xd7, 0xcf, 0x8b, 0x9a, 0xf7, 0x60, 0xbc, 0xed, 0x86, 0x55, 0x0f, 0xca, 0x5e, 0xb6, 0x98, 0xae, 0xa7, 0x4c, 0x21, 0x0f, 0x34, 0xd8, 0xea, 0xe8, 0x0a, 0xe5, 0xf8, 0x58, 0x20, 0x0c, 0xff, 0xdf, 0x40, 0x04, 0x67, 0x5c, 0x99, 0x53, 0xc5, 0x7e, 0xf0, 0x13, 0x2d, 0xc1, 0xda, 0x28, 0xc3, 0xa7, 0x91, 0x67, 0x76, 0x83, 0x73, 0xb8, 0x03, 0xe6, 0xfa, 0x49, 0x4f, 0x6c, 0xe6, 0xc8, 0x60, 0x46, 0x0e, 0xcd, 0xf4, 0xd7, 0xe1, 0xb5, 0x44, 0xd7, 0xd5, 0xd2, 0xed, 0x31, 0x68, 0x40, 0x89, 0x36, 0xb6, 0x88, 0x50, 0xf6, 0x91, 0x9b, 0x64, 0xac, 0x9a, 0x60, 0x96, 0xe7, 0x52, 0xa2, 0xce, 0x46, 0x51, 0x12, 0xde, 0xbb, 0x3b, 0x22, 0xce, 0x84, 0x8a, 0xb6, 0x08, 0x6d, 0x8d, 0xe9, 0xfe, 0x61, 0xfd, 0x24, 0xa1, 0x78, 0x99, 0x2b, 0x5f, 0x2d, 0xbf, 0x63, 0x9c, 0x8c, 0x11, 0xa6, 0xbb, 0x83, 0xbc, 0x70, 0x90, 0x45, 0xd1, 0xd5, 0xde, 0xc4, 0x8f, 0xc8, 0x1a, 0x7a, 0xf1, 0xfb, 0xe6, 0x77, 0xf2, 0xac, 0x34, 0x96, 0x79, 0x56, 0x9b, 0x8f, 0xaf, 0x95, 0x96, 0x4c, 0x4c, 0xee, 0x5a, 0x57, 0xfe, 0xc6, 0x56, 0x2d, 0xc4, 0xbe, 0x04, 0xb6, 0x33, 0xb7, 0xe1, 0xe1, 0xde, 0x20, 0x8f, 0x1f, 0x38, 0x6e, 0x90, 0x92, 0x74, 0x19, 0x63, 0x71, 0xc9, 0xd4, 0x5e, 0x40, 0xa2, 0x9f, 0xf4, 0x74, 0x0e, 0xaa, 0x9e, 0xbb, 0x13, 0x8f, 0xa5, 0x0e, 0xe6, 0x5b, 0x7f, 0x90, 0x26, 0x8c, 0x5f, 0x36, 0x78, 0x28, 0xdb, 0x14, 0xaa, 0x39, 0x79, 0xfa, 0xed, 0x59, 0xd9, 0x3b, 0xa5, 0x25, 0x53, 0xe3, 0x82, 0xb4, 0xc5, 0xa9, 0xf2, 0xae, 0x4d, 0x0d, 0x71, 0xe1, 0xaa, 0x11, 0x1b, 0x79, 0xa5, 0xe2, 0xb4, 0xeb, 0xba, 0xb8, 0xc5, 0x4a, 0x9d, 0x53, 0xed, 0x59, 0x39, 0x75, 0xca, 0x91, 0xd5, 0xd7, 0x55, 0x6d, 0x79, 0x76, 0x33, 0x9d, 0xd0, 0x70, 0xed, 0x2e, 0xbf, 0x33, 0x31, 0xf5, 0x96, 0x5e, 0x25, 0xb4, 0xa1, 0x88, 0xb6, 0x2a, 0x4e, 0xa6, 0x61, 0x58, 0xae, 0x3c, 0x3d, 0x1f, 0xb2, 0xc6, 0x68, 0xe6, 0xb1, 0x19, 0x6d, 0xe9, 0x84, 0xb9, 0x53, 0x27, 0x10, 0xbc, 0xd3, 0x63, 0x5b, 0xd8, 0x09, 0xc5, 0xe0, 0xb8, 0xb9, 0x13, 0x4a, 0xa0, 0x08, 0x7f, 0xff, 0x0c, 0xbe, 0x84, 0x7c, 0xb4, 0xd0, 0xca, 0xda, 0xe3, 0x82, 0xa9, 0x74, 0x5a, 0xf1, 0x5d, 0x2a, 0xdf, 0xd4, 0xfb, 0x54, 0xd2, 0x98, 0xc9, 0x90, 0xeb, 0x0e, 0x53, 0x79, 0x71, 0x6e, 0xc4, 0x8c, 0xbd, 0xfe, 0xd0, 0x94, 0x95, 0x30, 0xc9, 0x31, 0x43, 0x28, 0x91, 0x61, 0xdb, 0xb7, 0x09, 0x29, 0x6c, 0x48, 0xe6, 0x9e, 0x68, 0x17, 0xf2, 0xef, 0x50, 0x01, 0xb8, 0xf0, 0x6e, 0x39, 0x4a, 0x9d, 0xec, 0xcd, 0x00, 0xbc, 0xec, 0xcd, 0xc1, 0xcf, 0x77, 0x80, 0xfc, 0x72, 0x37, 0x68, 0x10, 0xe2, 0x3b, 0x33, 0xca, 0xcf, 0xdd, 0xb0, 0x12, 0x54, 0x65, 0x8d, 0xfc, 0xf6, 0xa3, 0xaf, 0x10, 0x62, 0x54, 0xde, 0x99, 0x40, 0x68, 0xca, 0xf3, 0xb5, 0xa7, 0x12, 0x96, 0xb3, 0x06, 0x41, 0xd2, 0x0b, 0x6e, 0xe4, 0x6f, 0x84, 0x7d, 0x5b, 0x9a, 0x4e, 0x92, 0xdb, 0x7b, 0x4d, 0xa4, 0x6f, 0x70, 0x45, 0xed, 0xb5, 0xec, 0xea, 0xff, 0x36, 0x79, 0xdd, 0xf3, 0x23, 0xd5, 0xf5, 0xd6, 0xc2, 0x7b, 0x7f, 0xf9, 0x76, 0xfc, 0x61, 0xb5, 0xfe, 0xfd, 0x82, 0x27, 0x85, 0x57, 0x56, 0xf7, 0x8c, 0x96, 0x4d, 0xed, 0x0f, 0x2c, 0x3e, 0x0b, 0xde, 0x8a, 0x22, 0x97, 0x07, 0x29, 0x9f, 0x47, 0xbf, 0xac, 0x34, 0x29, 0xe2, 0xed, 0x9d, 0xf5, 0x67, 0xa0, 0xb4, 0x65, 0xd3, 0xbe, 0x4d, 0x29, 0xd2, 0xd6, 0x34, 0xa3, 0xe4, 0x75, 0x94, 0x6c, 0xe5, 0xc8, 0x6b, 0x35, 0xcd, 0x32, 0x9c, 0xab, 0x02, 0x8d, 0x9f, 0xe6, 0x5b, 0x86, 0x28, 0x31, 0x7d, 0x1d, 0x1e, 0xf8, 0x76, 0xbc, 0x9f, 0x70, 0x55, 0xf1, 0x6a, 0xa5, 0xb8, 0x8a, 0x77, 0x62, 0x5b, 0xd0, 0xde, 0xe3, 0x5e, 0x46, 0x5e, 0xbb, 0x59, 0x20, 0x71, 0xf5, 0xd8, 0xf2, 0xc7, 0x4a, 0x82, 0x77, 0x6c, 0x94, 0x1f, 0x81, 0xe5, 0xb6, 0x6e, 0x42, 0x6f, 0xc4, 0xdf, 0x22, 0x30, 0xf7, 0x4a, 0xb7, 0x44, 0x90, 0x3e, 0x7d, 0xd3, 0xc8, 0x91, 0xf6, 0x44, 0x7c, 0x22, 0xc7, 0x4f, 0xdb, 0x91, 0xc3, 0xb3, 0xb0, 0x2d, 0xae, 0x03, 0x5b, 0xd2, 0x46, 0xa9, 0x6a, 0xf0, 0xa9, 0x9f, 0x34, 0xe6, 0xb2, 0x16, 0x3a, 0xde, 0x0c, 0xb6, 0x10, 0x49, 0xb8, 0x5e, 0x9c, 0x10, 0x84, 0xf2, 0xda, 0x7f, 0xab, 0x4a, 0xef, 0xa4, 0x8a, 0x5d, 0xad, 0xe4, 0xdb, 0xc0, 0xd9, 0xd8, 0x63, 0x9b, 0x1a, 0x63, 0xbe, 0x26, 0x2c, 0x65, 0x14, 0x4a, 0x49, 0xb7, 0x4a, 0x83, 0x89, 0x77, 0xb3, 0x72, 0x65, 0x05, 0xa1, 0x35, 0x62, 0xaf, 0x7b, 0x51, 0x3a, 0x43, 0xba, 0x14, 0xe5, 0xb3, 0xfd, 0x13, 0x1e, 0x10, 0x33, 0x56, 0x69, 0x23, 0xb9, 0x5d, 0xcc, 0x59, 0x23, 0xa4, 0x81, 0xa4, 0x1c, 0x11, 0xe2, 0x59, 0x0d, 0xe1, 0xf6, 0xad, 0x6b, 0xdd, 0xc7, 0xb6, 0x2e, 0x99, 0xd0, 0x6b, 0xe9, 0x04, 0x2e, 0xb1, 0x4f, 0xeb, 0x23, 0x4f, 0x3d, 0x74, 0xaa, 0xa3, 0x95, 0x28, 0x6e, 0x49, 0x1e, 0xd9, 0x96, 0xb2, 0xcd, 0x59, 0x05, 0x85, 0xd0, 0x8c, 0xbf, 0x33, 0xe0, 0x1b, 0xc6, 0x69, 0xcc, 0x3b, 0x4a, 0x97, 0x1c, 0x7f, 0x11, 0x53, 0x4a, 0x25, 0x8c, 0x99, 0xed, 0xc6, 0x71, 0xe1, 0x47, 0xbe, 0xa2, 0x4b, 0x8e, 0xf1, 0x58, 0x0f, 0xe4, 0x64, 0x99, 0x68, 0x1e, 0x67, 0x58, 0xce, 0x72, 0x72, 0x30, 0xb9, 0x5d, 0xc8, 0xcb, 0x74, 0x9e, 0x57, 0x89, 0x52, 0xb1, 0xcc, 0xd6, 0xee, 0x39, 0xa4, 0xdc, 0xfb, 0x5c, 0xc5, 0xee, 0xcd, 0x89, 0x58, 0x8a, 0xed, 0xff, 0x3f, 0xed, 0x6c, 0xdf, 0xaa, 0x44, 0xb9, 0xc4, 0xf7, 0xb1, 0x8c, 0x3c, 0xfa, 0xc9, 0x69, 0xb6, 0x8a, 0x34, 0xe4, 0x53, 0xda, 0x37, 0x24, 0xce, 0xcc, 0xef, 0x03, 0x7b, 0x7c, 0x2c, 0xe0, 0x83, 0xa2, 0xf8, 0x7e, 0xc3, 0x77, 0x88, 0x23, 0xcf, 0xb7, 0x38, 0x8e, 0x07, 0xe7, 0x94, 0xd7, 0x71, 0x6b, 0xd6, 0x3b, 0xc2, 0x9f, 0x72, 0xf6, 0x30, 0xf5, 0xfe, 0xe4, 0xde, 0xe9, 0x29, 0xe7, 0x9f, 0x4a, 0xd0, 0x3a, 0xd2, 0x23, 0x8d, 0xfc, 0x08, 0x4c, 0xdf, 0x36, 0xd3, 0x1e, 0x64, 0xf2, 0x6f, 0xfc, 0xa4, 0xb1, 0xf7, 0x37, 0x8a, 0xb1, 0xc6, 0xb0, 0x6f, 0x68, 0x4b, 0x51, 0x18, 0xcc, 0xbb, 0xfa, 0x53, 0xd3, 0x62, 0x08, 0x9c, 0x7f, 0xd6, 0x65, 0xa5, 0xd3, 0x34, 0x1f, 0x10, 0xee, 0xa9, 0x5a, 0xe3, 0x83, 0x86, 0x5a, 0x1f, 0x24, 0x14, 0xb1, 0x17, 0xb6, 0x3c, 0x54, 0xd8, 0x1a, 0x3b, 0xde, 0x0d, 0xc9, 0xea, 0x45, 0xad, 0x8d, 0x6f, 0x7c, 0x08, 0x2d, 0xbd, 0xb3, 0x71, 0x16, 0x01, 0x1c, 0x61, 0x6f, 0x60, 0x45, 0x8b, 0x27, 0xf4, 0x4e, 0x7f, 0x23, 0xed, 0x6c, 0x84, 0x17, 0xb1, 0x67, 0xb0, 0x4e, 0xfc, 0xec, 0x82, 0x72, 0xfc, 0xd2, 0xbf, 0xf8, 0xbc, 0x04, 0xfb, 0xe8, 0xeb, 0x2b, 0x60, 0x3b, 0x11, 0xb1, 0xf7, 0xbe, 0xad, 0x26, 0xe6, 0x2b, 0xa0, 0x5d, 0x8a, 0x78, 0x87, 0xae, 0xfb, 0x66, 0x0b, 0xef, 0x07, 0x64, 0x23, 0x2e, 0xf6, 0xea, 0x39, 0xa6, 0xd8, 0xdb, 0xdf, 0xe6, 0x2b, 0xc0, 0xbe, 0x0b, 0x1b, 0xcf, 0x4f, 0xb5, 0xc6, 0x58, 0x47, 0x2c, 0x7e, 0x4d, 0x6a, 0xf5, 0x18, 0x2b, 0x9b, 0x46, 0x36, 0x27, 0xe3, 0x7d, 0xda, 0xc5, 0xaf, 0xda, 0x88, 0x69, 0xf8, 0x7d, 0xb3, 0xe3, 0x6b, 0x48, 0x37, 0x8e, 0x63, 0xf5, 0xb6, 0xd4, 0x13, 0x07, 0xf0, 0xf7, 0xbf, 0xd4, 0x4c, 0x35, 0x84, 0x2c, 0xf2, 0xaa, 0x66, 0xfe, 0xfb, 0x5f, 0x12, 0x5a, 0x48, 0xa2, 0x3e, 0xc5, 0x58, 0x8c, 0x89, 0x45, 0x29, 0x7e, 0x82, 0xad, 0xbb, 0x39, 0x6d, 0xeb, 0x35, 0xef, 0xda, 0x9c, 0xb2, 0x3a, 0xc2, 0x60, 0xd1, 0xcc, 0x3d, 0x16, 0xe4, 0x1a, 0xcc, 0xbe, 0x02, 0x7f, 0xc0, 0x02, 0x02, 0x9d, 0xd1, 0x38, 0x4f, 0xb8, 0xa7, 0xba, 0x31, 0xfe, 0xf3, 0x30, 0x96, 0xc5, 0xdf, 0xd4, 0x1a, 0xf7, 0xc7, 0xe3, 0xff, 0x63, 0x10, 0xb0, 0x54, 0x33, 0xe8, 0x44, 0x82, 0x74, 0xf6, 0x9a, 0x9a, 0x48, 0x2b, 0x2f, 0x7e, 0xd0, 0xf0, 0xa2, 0x3d, 0xc3, 0xbf, 0x84, 0x63, 0xf5, 0xc4, 0x01, 0xf9, 0x36, 0x2a, 0x99, 0x6c, 0x68, 0xed, 0x95, 0x5e, 0x93, 0xa7, 0x19, 0xf3, 0x34, 0x63, 0x9e, 0x96, 0xeb, 0xf3, 0xbc, 0x7a, 0x86, 0x75, 0xa7, 0x4d, 0xfe, 0xd9, 0xf1, 0x31, 0x65, 0x51, 0xbc, 0xc7, 0x42, 0xfb, 0xad, 0x14, 0x3e, 0x4c, 0xf5, 0xf6, 0xd5, 0x41, 0xdc, 0xd7, 0x08, 0xb1, 0xd6, 0x4d, 0xbe, 0x18, 0xa8, 0x78, 0x15, 0x5e, 0x72, 0x69, 0x0c, 0x7c, 0x49, 0xf6, 0x7e, 0x14, 0x14, 0xde, 0x18, 0x34, 0xb8, 0x9a, 0xc2, 0xb9, 0x4d, 0xbb, 0x84, 0x2e, 0x1c, 0x05, 0x6e, 0x37, 0xb6, 0x94, 0x47, 0x68, 0x38, 0x13, 0xee, 0xb1, 0x8b, 0x46, 0x41, 0x75, 0x37, 0x54, 0x51, 0x3e, 0x8c, 0x92, 0x21, 0xd7, 0x4f, 0x5c, 0xb9, 0x92, 0x1c, 0xa6, 0x3d, 0x43, 0x23, 0x2f, 0x9b, 0xd0, 0x65, 0xf7, 0xcd, 0x6a, 0x69, 0x10, 0x31, 0x92, 0x94, 0xbb, 0x03, 0x73, 0xf7, 0xfa, 0xea, 0xc1, 0xdd, 0x42, 0xb9, 0xbb, 0x08, 0x81, 0xa0, 0xe9, 0x2d, 0x5b, 0x9f, 0x06, 0x57, 0xb0, 0x97, 0xf5, 0x57, 0x71, 0xf4, 0xd1, 0x69, 0x8a, 0x86, 0x34, 0x65, 0x25, 0x9d, 0x67, 0x54, 0x5d, 0xeb, 0x9d, 0x8e, 0x3c, 0xc5, 0x77, 0x54, 0x92, 0xbf, 0xd3, 0x86, 0x68, 0x7d, 0x34, 0xb6, 0x8e, 0x4e, 0x55, 0x90, 0x47, 0x76, 0x3a, 0x6c, 0x1b, 0x08, 0x49, 0x07, 0x39, 0x9c, 0x9d, 0x2b, 0xfc, 0x7c, 0x6d, 0x4a, 0xb7, 0xac, 0xb0, 0xf3, 0x55, 0x01, 0xf2, 0xc6, 0x87, 0x31, 0xd6, 0x3e, 0xbe, 0x2b, 0x24, 0xf9, 0x9e, 0xaf, 0xcc, 0x18, 0x3e, 0xa2, 0x65, 0xef, 0x4a, 0xd3, 0x15, 0x28, 0x4f, 0xd3, 0xd5, 0x6c, 0x0c, 0x7f, 0x5c, 0x73, 0xf1, 0xf5, 0x9f, 0xa3, 0x3c, 0x4d, 0xff, 0x0a, 0xcb, 0xd8, 0xbd, 0x7d, 0x12, 0x52, 0x27, 0xe4, 0xf4, 0x5d, 0x83, 0xb8, 0xc2, 0x5a, 0xb4, 0x1e, 0x96, 0x5c, 0x6d, 0x24, 0x8f, 0x11, 0x82, 0x4c, 0x5a, 0xfb, 0x36, 0x59, 0x60, 0x14, 0xe0, 0x6c, 0x68, 0xd3, 0xda, 0x7a, 0xad, 0xbb, 0xfa, 0x57, 0x34, 0xe1, 0xfd, 0x9f, 0xed, 0xea, 0x5f, 0xd9, 0x80, 0xff, 0x65, 0x38, 0xdb, 0xc2, 0x5a, 0x98, 0x2d, 0x0e, 0xaa, 0x5d, 0xa0, 0x05, 0xc8, 0x2f, 0x83, 0xe6, 0x4d, 0xa0, 0x94, 0x94, 0xaa, 0xc0, 0xb9, 0x21, 0xa3, 0x24, 0x3a, 0x17, 0x7b, 0x99, 0xee, 0x4b, 0xf0, 0x5e, 0xc2, 0x7b, 0x3b, 0xe7, 0x80, 0xe3, 0xeb, 0x5e, 0x89, 0xb0, 0x7d, 0x50, 0x3a, 0x5e, 0x94, 0x93, 0x8e, 0x41, 0xb7, 0x2a, 0x2d, 0x62, 0x1f, 0x43, 0xea, 0x41, 0x5a, 0x05, 0x52, 0xa7, 0xad, 0x99, 0x6a, 0x2b, 0xad, 0xe8, 0xb5, 0xfb, 0x22, 0xd0, 0x86, 0xdf, 0x66, 0x6c, 0xbb, 0x62, 0x59, 0x05, 0x19, 0x79, 0x08, 0x61, 0x07, 0xf1, 0x60, 0x6a, 0x05, 0xa3, 0xc0, 0xfd, 0x01, 0x3c, 0x37, 0xab, 0xd8, 0x83, 0x11, 0xec, 0xf7, 0x3a, 0x9c, 0x4b, 0xd8, 0xf7, 0x3d, 0xcb, 0xc7, 0xb7, 0x7e, 0x83, 0x74, 0xd3, 0x55, 0xa4, 0xd0, 0xcb, 0xeb, 0xde, 0x43, 0xce, 0x76, 0x31, 0xc4, 0x90, 0x0f, 0x8b, 0x1b, 0x3b, 0xab, 0x64, 0x15, 0x5a, 0xed, 0xea, 0x30, 0xf0, 0xe0, 0x00, 0xde, 0xc9, 0xe3, 0x68, 0x3d, 0x39, 0x5e, 0x1d, 0xe0, 0xd5, 0xc6, 0xf7, 0xf4, 0xf3, 0x48, 0x65, 0xbe, 0xbf, 0xd2, 0xc2, 0xf5, 0x7e, 0x30, 0xb5, 0x9c, 0xad, 0xf0, 0x3f, 0x36, 0xf2, 0x5c, 0x7c, 0xa3, 0x3c, 0x91, 0xe7, 0x58, 0x1e, 0x39, 0x8d, 0x79, 0xc6, 0x8d, 0x3c, 0x5b, 0x90, 0xff, 0x6c, 0x31, 0x72, 0xec, 0xe1, 0x1c, 0x7b, 0x6f, 0x98, 0x9f, 0x48, 0xfb, 0x0f, 0x9f, 0x97, 0xf6, 0x1f, 0xa9, 0x4f, 0xc7, 0x75, 0xf2, 0x5e, 0x2e, 0x75, 0x9c, 0xf9, 0xe6, 0x3b, 0xba, 0x61, 0x29, 0x98, 0x12, 0x0d, 0x29, 0x1b, 0x5e, 0xb5, 0xe0, 0xcc, 0x33, 0x45, 0x55, 0xf6, 0x31, 0xfc, 0x56, 0x86, 0xa4, 0xa7, 0x60, 0xce, 0x12, 0x80, 0xd6, 0x42, 0xb2, 0x06, 0xe0, 0x7d, 0x56, 0x92, 0xf6, 0x0d, 0xbf, 0x7a, 0x81, 0x1b, 0xf8, 0xd5, 0xa3, 0xf0, 0xf2, 0x29, 0xd9, 0x37, 0xba, 0x13, 0x6c, 0xd1, 0x6d, 0xf8, 0x6b, 0x8a, 0x66, 0x70, 0x96, 0xcc, 0x16, 0x98, 0x22, 0x57, 0xce, 0x0a, 0x6d, 0xca, 0xd4, 0x5c, 0x5a, 0x33, 0xf3, 0xfd, 0xcf, 0xb9, 0xa2, 0x79, 0xed, 0x7d, 0xb4, 0xa7, 0x6c, 0x04, 0xdf, 0xff, 0x36, 0xa1, 0xd2, 0x7b, 0xc1, 0x96, 0xe7, 0x95, 0x71, 0xd4, 0xf8, 0x3c, 0xc5, 0x5f, 0xf1, 0xc9, 0x86, 0x55, 0xe7, 0xae, 0x46, 0xf3, 0xe2, 0xe1, 0xf3, 0x7a, 0xc1, 0xc1, 0x97, 0x4e, 0xe3, 0xdf, 0x64, 0xf8, 0x0a, 0xca, 0xea, 0xc4, 0x95, 0xb9, 0xf9, 0xee, 0xcf, 0xc0, 0x4b, 0x76, 0x55, 0x53, 0xbe, 0xd3, 0x1e, 0x39, 0x5c, 0xf7, 0x09, 0xfc, 0xdb, 0xe3, 0x47, 0x88, 0x23, 0x23, 0x8f, 0x7e, 0x8c, 0x30, 0x13, 0xfa, 0x9c, 0x72, 0x97, 0x7d, 0xf6, 0x33, 0xc3, 0x66, 0xcd, 0xb0, 0x74, 0xc0, 0xd6, 0xf5, 0xd3, 0xba, 0xa4, 0x74, 0x4b, 0x26, 0x4f, 0xb7, 0x64, 0x71, 0x76, 0x4b, 0xe0, 0x5b, 0x85, 0x5c, 0xfc, 0x52, 0xe4, 0x3b, 0x96, 0x92, 0xa6, 0xa7, 0xd8, 0x1d, 0x59, 0x7c, 0xde, 0x02, 0x28, 0x53, 0x9b, 0xc2, 0x5d, 0x60, 0x39, 0x39, 0xbe, 0x30, 0x09, 0x2d, 0x61, 0xbb, 0x7f, 0x01, 0x9f, 0xc1, 0xc9, 0x0b, 0x55, 0x68, 0x0b, 0x02, 0xf9, 0x3d, 0xae, 0x2d, 0x0c, 0xb9, 0xc1, 0x1c, 0x8c, 0x05, 0x0a, 0x5b, 0x23, 0x0b, 0x23, 0x10, 0xf5, 0xdb, 0x5f, 0xef, 0x86, 0xe8, 0x42, 0xfc, 0x42, 0x43, 0xc0, 0xc4, 0x61, 0xc9, 0x5f, 0xe3, 0xea, 0x86, 0x21, 0x49, 0x5c, 0xf3, 0xda, 0xb2, 0x33, 0x48, 0x58, 0xd6, 0x29, 0xad, 0x39, 0xeb, 0x4d, 0x37, 0xed, 0x79, 0xf1, 0xd8, 0xbb, 0x0c, 0xaf, 0x85, 0x55, 0x1c, 0x7d, 0x47, 0x91, 0x9a, 0x1e, 0x0f, 0xe0, 0x18, 0xc1, 0x71, 0x56, 0x8b, 0xdf, 0x93, 0x78, 0xdd, 0x86, 0xff, 0x35, 0xf8, 0x7d, 0x1b, 0xcb, 0x58, 0x88, 0xad, 0xb5, 0x0c, 0xbf, 0xef, 0xf4, 0x42, 0xc0, 0x84, 0x33, 0xef, 0xb4, 0x2f, 0x03, 0x36, 0x38, 0xeb, 0x24, 0x4d, 0xc5, 0xc5, 0x70, 0x1e, 0x47, 0xe4, 0x45, 0x5f, 0x1b, 0x1c, 0xcb, 0xe6, 0x20, 0xb7, 0x70, 0x0e, 0x71, 0xb8, 0xcc, 0x33, 0xf6, 0x32, 0x3c, 0xed, 0xb7, 0x63, 0x2e, 0x3f, 0xc0, 0x5c, 0x76, 0x20, 0xaf, 0x53, 0x0b, 0x2f, 0xe0, 0x6f, 0x0d, 0xec, 0xc2, 0xdf, 0x65, 0xf0, 0x12, 0xa6, 0x37, 0xca, 0xe9, 0xed, 0xc3, 0xb4, 0x0e, 0x60, 0x5a, 0x87, 0x30, 0xad, 0x67, 0x31, 0xc4, 0x02, 0x47, 0xb8, 0x94, 0x97, 0xa0, 0xf7, 0x66, 0xc2, 0x0e, 0x6f, 0x84, 0x3e, 0x7e, 0xbb, 0x9f, 0xdf, 0xde, 0xc4, 0x6f, 0x0f, 0xe2, 0xdb, 0x5b, 0xf0, 0x6a, 0x1f, 0x0c, 0xe1, 0xdb, 0xdb, 0xf0, 0xed, 0xc7, 0xf1, 0xed, 0xf5, 0x18, 0x72, 0x04, 0x9e, 0x64, 0x0f, 0xcc, 0x7c, 0x7e, 0xdf, 0x5b, 0xb6, 0x8b, 0xc7, 0xd9, 0x9c, 0x0f, 0xa6, 0x8f, 0x33, 0xc7, 0x05, 0xf1, 0x99, 0xf3, 0xe6, 0x9c, 0x72, 0xfc, 0xf2, 0xa7, 0xe0, 0x35, 0xf3, 0x25, 0xeb, 0xd2, 0xd9, 0xcf, 0xe1, 0x38, 0x3b, 0x35, 0xa7, 0x61, 0xce, 0x9a, 0x39, 0xa3, 0xb9, 0x8f, 0x88, 0xb1, 0x4d, 0x69, 0x74, 0x66, 0xd8, 0x5f, 0x82, 0x85, 0x74, 0x84, 0xc1, 0x1a, 0xdf, 0xbf, 0x16, 0x5c, 0x6d, 0xc8, 0xc9, 0x2c, 0xc5, 0x31, 0xb4, 0x1d, 0x29, 0x21, 0xed, 0xe9, 0xc3, 0x9c, 0x81, 0x77, 0x96, 0x04, 0x4d, 0xef, 0x24, 0x90, 0x37, 0x98, 0x3a, 0xad, 0xb7, 0x88, 0xd3, 0xe0, 0x3f, 0x40, 0x0d, 0x96, 0xfe, 0x89, 0x03, 0x35, 0x4b, 0xc2, 0xd1, 0x93, 0x1f, 0x82, 0x16, 0x4e, 0x06, 0xeb, 0x8f, 0x7d, 0x08, 0xf7, 0x04, 0x13, 0x38, 0x76, 0x67, 0xfb, 0xac, 0x8f, 0x47, 0x1f, 0x8f, 0x1e, 0xbe, 0xb2, 0xe3, 0xf9, 0x68, 0x2c, 0x1e, 0x3b, 0xd5, 0x44, 0xde, 0x12, 0xd8, 0x86, 0xd7, 0x27, 0xb9, 0x16, 0x4f, 0x7c, 0xa2, 0x08, 0x3e, 0x20, 0xfa, 0xb7, 0x3e, 0xbb, 0xbf, 0x1b, 0x12, 0x43, 0x3f, 0xc3, 0x75, 0x97, 0x39, 0x0f, 0xe4, 0xc7, 0x25, 0x8e, 0x55, 0x2a, 0xbc, 0x27, 0x69, 0xe0, 0x98, 0x24, 0x0d, 0x52, 0xe6, 0x9b, 0x8a, 0x05, 0xdf, 0xc4, 0x56, 0x65, 0xa6, 0xbe, 0x82, 0x68, 0x37, 0x34, 0x68, 0xd6, 0xde, 0x82, 0x3e, 0xd3, 0x42, 0xda, 0x81, 0x6e, 0x98, 0x56, 0x4a, 0xf6, 0xe0, 0x4d, 0xa7, 0x78, 0x4d, 0x5b, 0xb0, 0x7d, 0xa3, 0x74, 0x2a, 0x47, 0xe5, 0x0d, 0xe3, 0xc8, 0x62, 0x9b, 0x28, 0x3b, 0x72, 0x20, 0x2d, 0xf8, 0x5d, 0xe6, 0x9b, 0x55, 0x3f, 0xf1, 0xf1, 0x45, 0x5e, 0x21, 0x91, 0x0b, 0x70, 0xb6, 0xf9, 0x1b, 0x48, 0x9b, 0xe1, 0x57, 0x87, 0x31, 0x15, 0xf2, 0xe9, 0x8a, 0xa9, 0x38, 0xa3, 0xc9, 0x47, 0x22, 0x1f, 0xe8, 0x57, 0x71, 0x34, 0x2c, 0x45, 0xde, 0x2c, 0xb1, 0x94, 0xe8, 0xda, 0x0a, 0xe6, 0x83, 0x12, 0xb8, 0xba, 0x52, 0x3a, 0xd4, 0x22, 0xc3, 0xf8, 0xec, 0x9e, 0x16, 0x7a, 0x76, 0x1f, 0xae, 0x94, 0x2b, 0xda, 0x06, 0x0d, 0xbe, 0x82, 0xfc, 0xc2, 0xce, 0xf2, 0x52, 0x49, 0x7a, 0x31, 0x85, 0x5a, 0x67, 0x43, 0xf2, 0x91, 0x5c, 0x2a, 0x6b, 0xe8, 0xaa, 0x8d, 0xae, 0x7a, 0xab, 0x70, 0xf2, 0xb5, 0x3c, 0xc0, 0xa9, 0xf6, 0x22, 0x8f, 0x82, 0x3c, 0x08, 0xa5, 0x49, 0xbb, 0x35, 0x38, 0x2a, 0x1e, 0xc6, 0x78, 0x2b, 0xda, 0x39, 0x5f, 0x83, 0x7f, 0x9a, 0x89, 0xf1, 0x1a, 0x30, 0x16, 0xbe, 0x65, 0xc4, 0x9b, 0xc4, 0x78, 0x4b, 0xf1, 0xff, 0x2a, 0xfe, 0x0f, 0x70, 0x3a, 0xcb, 0x30, 0x8d, 0x99, 0xb9, 0x74, 0x74, 0x0c, 0x7f, 0x8a, 0xce, 0xd1, 0xe8, 0x6d, 0x2c, 0x61, 0x35, 0x95, 0x8b, 0xac, 0x0c, 0x7c, 0x05, 0xce, 0x36, 0xe4, 0x6e, 0x13, 0xfe, 0xc8, 0x67, 0xd4, 0x7c, 0x92, 0x53, 0xbb, 0x97, 0x3d, 0x5c, 0xc5, 0x61, 0x19, 0xd5, 0xa0, 0xca, 0xde, 0xfa, 0x00, 0x23, 0xcc, 0x13, 0x27, 0xb7, 0x02, 0xf3, 0xf0, 0xc1, 0x1a, 0x91, 0x13, 0xc7, 0x1d, 0xe0, 0xf6, 0xbd, 0x87, 0xcf, 0x7d, 0x86, 0x8d, 0x3c, 0x49, 0x3e, 0xa1, 0x78, 0xeb, 0xf2, 0xe2, 0x3d, 0xa4, 0x50, 0x7f, 0x50, 0xfb, 0x34, 0xb0, 0xad, 0x19, 0xd5, 0x6c, 0x36, 0xb7, 0x28, 0xfd, 0xa6, 0x8c, 0xb7, 0x4b, 0x13, 0xd8, 0xd3, 0x69, 0xb0, 0x5f, 0xc4, 0x1e, 0x6c, 0x59, 0xba, 0x24, 0x8c, 0x29, 0xfd, 0x55, 0x03, 0xf6, 0x64, 0xdb, 0xd2, 0x24, 0xf2, 0xc6, 0xc9, 0xbf, 0x5a, 0x34, 0xad, 0xe7, 0xad, 0x54, 0x72, 0xea, 0xef, 0xbf, 0xae, 0x67, 0x9d, 0x89, 0x7a, 0x30, 0x7d, 0x0b, 0x60, 0xf0, 0xaf, 0x63, 0xb6, 0x18, 0x5e, 0xdd, 0x17, 0x9c, 0x11, 0x3f, 0xe0, 0x91, 0xef, 0xbe, 0x3f, 0x9c, 0x74, 0xdb, 0xdb, 0x36, 0xd5, 0x2c, 0x61, 0xbe, 0x69, 0x36, 0x9d, 0x80, 0x51, 0x6e, 0xa4, 0x7f, 0x5b, 0x65, 0x6f, 0x79, 0x20, 0x72, 0x0e, 0xc7, 0x61, 0x01, 0x79, 0xf2, 0xc0, 0xd2, 0x52, 0xbd, 0x17, 0xc3, 0x8a, 0xe4, 0x70, 0xa8, 0xc1, 0xa8, 0x8b, 0x1c, 0xcf, 0x60, 0xab, 0xd8, 0xe3, 0x5d, 0x40, 0x6b, 0xc5, 0x70, 0xe4, 0x2c, 0xb6, 0x6e, 0x81, 0x93, 0xea, 0x92, 0x7b, 0x23, 0x57, 0xef, 0x42, 0xde, 0xe5, 0x22, 0x7b, 0xc6, 0x61, 0xad, 0xd4, 0x57, 0x10, 0x58, 0xe4, 0x9b, 0x19, 0x6a, 0xf0, 0xd9, 0xc8, 0xc7, 0x09, 0xe6, 0xce, 0x88, 0x17, 0xbf, 0x5f, 0x4b, 0xb5, 0xd4, 0xc0, 0x5e, 0x24, 0xfc, 0x2a, 0x2b, 0x6a, 0x6f, 0xc1, 0xd8, 0x86, 0x94, 0x87, 0x6b, 0x35, 0xb5, 0x4a, 0xc2, 0xec, 0x0b, 0x79, 0xeb, 0xe4, 0x6b, 0x53, 0xab, 0xd0, 0xec, 0x13, 0x58, 0x4b, 0x1b, 0xf2, 0x5c, 0xf5, 0x30, 0xeb, 0xee, 0xb1, 0x78, 0x7f, 0x58, 0x6d, 0x4b, 0x6a, 0xa6, 0x70, 0x1f, 0x14, 0x60, 0x9d, 0x29, 0x3c, 0x46, 0xe1, 0x45, 0x10, 0xdf, 0xd0, 0x16, 0xd1, 0xe4, 0xde, 0x02, 0x85, 0xbc, 0x7b, 0xd2, 0xd9, 0xc5, 0x0e, 0x6c, 0xe5, 0xa5, 0xa4, 0xf7, 0x4b, 0x7e, 0xcc, 0x78, 0x44, 0x61, 0x82, 0x4a, 0x1b, 0xfb, 0xb0, 0xc4, 0x59, 0xc7, 0xfe, 0x8f, 0x67, 0xe1, 0xfc, 0x59, 0x86, 0x65, 0xd4, 0xb0, 0xdd, 0xd7, 0xb5, 0x34, 0x04, 0x7d, 0xb0, 0xbe, 0x25, 0x8a, 0xf2, 0x56, 0xaa, 0x55, 0x45, 0xca, 0xde, 0x89, 0xf3, 0xb7, 0xb7, 0x35, 0xbe, 0x30, 0x0e, 0x6b, 0x6a, 0x0b, 0xef, 0x5e, 0x14, 0x8c, 0xdd, 0x9d, 0xa0, 0x7e, 0xc4, 0xf1, 0x54, 0xcd, 0x08, 0xae, 0x73, 0xd2, 0xb1, 0xa9, 0xf4, 0x30, 0xa5, 0xda, 0xe4, 0xe8, 0x85, 0x8b, 0xed, 0x5b, 0xab, 0x36, 0x2e, 0x04, 0xa1, 0x97, 0x76, 0x61, 0x0f, 0xb6, 0x09, 0xce, 0x4c, 0xdf, 0x4c, 0x3f, 0xfd, 0x5a, 0xc8, 0x87, 0x5b, 0x16, 0xfd, 0xed, 0xc2, 0xf2, 0x6c, 0x5a, 0x4a, 0x9b, 0x9b, 0xe7, 0x32, 0x3e, 0x45, 0x9a, 0x5e, 0x63, 0x8e, 0xff, 0xcc, 0x2f, 0x8f, 0x47, 0x30, 0xff, 0x5a, 0xbf, 0x3d, 0x46, 0xe5, 0x88, 0xc6, 0x22, 0x46, 0x7e, 0x84, 0xc5, 0x5e, 0x30, 0x9d, 0x5a, 0x31, 0x05, 0x88, 0x25, 0x87, 0xb0, 0xd4, 0xc9, 0x56, 0x75, 0x7c, 0xd1, 0x78, 0x43, 0x08, 0xe2, 0x07, 0x91, 0x7b, 0xa7, 0x39, 0x27, 0x7c, 0xc2, 0x99, 0x7c, 0xb3, 0x1a, 0x27, 0x3e, 0xda, 0x9d, 0x7c, 0xac, 0xd6, 0x7a, 0xea, 0x2f, 0xe3, 0x3f, 0xef, 0x83, 0xb0, 0xf5, 0xe4, 0x8f, 0x60, 0xe9, 0x93, 0x0f, 0x60, 0x2a, 0xf6, 0x13, 0xfd, 0x38, 0x16, 0xcc, 0x64, 0x15, 0xb1, 0x78, 0xe2, 0xa3, 0x17, 0x98, 0x32, 0xe1, 0xc8, 0xc7, 0x11, 0x18, 0xf5, 0xd9, 0x59, 0xa3, 0xfe, 0x31, 0xcc, 0xb1, 0x81, 0x29, 0x18, 0x59, 0x4e, 0x6c, 0xc3, 0x12, 0x2f, 0x3d, 0xb6, 0xff, 0x98, 0xf0, 0x25, 0xb7, 0xd1, 0x6f, 0xbd, 0x3b, 0x97, 0x47, 0xf2, 0x31, 0xef, 0x22, 0x0d, 0xcc, 0x0f, 0x4f, 0x6f, 0x91, 0x8f, 0x8e, 0x4c, 0xb5, 0x08, 0xdb, 0xe4, 0x4c, 0x6b, 0x11, 0x9e, 0x0f, 0x85, 0x5c, 0xbe, 0xa6, 0xe4, 0x63, 0x27, 0x93, 0xd4, 0xf6, 0xe3, 0xea, 0x9b, 0x2a, 0xe6, 0xb2, 0xec, 0x68, 0xe4, 0x68, 0x22, 0xb8, 0xa8, 0x35, 0x71, 0xec, 0x50, 0x8d, 0xd4, 0x5a, 0x7f, 0x02, 0xe9, 0x8e, 0xd0, 0x3b, 0x6a, 0xd9, 0x70, 0xea, 0x41, 0x5c, 0x4d, 0xb5, 0xeb, 0x74, 0xad, 0xb8, 0x3d, 0x9c, 0xb1, 0xe4, 0x23, 0x34, 0x37, 0xa2, 0x51, 0xb1, 0xd7, 0x12, 0xa2, 0x7d, 0x84, 0x30, 0x61, 0xa4, 0x2d, 0x61, 0x3f, 0xd8, 0xc1, 0x84, 0x2f, 0x01, 0xe4, 0xef, 0xaf, 0x96, 0x28, 0x16, 0x8d, 0xee, 0x40, 0x03, 0xb6, 0x7b, 0x02, 0x47, 0xc9, 0x62, 0xac, 0x73, 0x1c, 0x92, 0xda, 0xda, 0x20, 0xcd, 0x66, 0xb6, 0x20, 0xc2, 0xb2, 0x6f, 0xc1, 0x86, 0xdc, 0xde, 0xbc, 0x55, 0x81, 0x4e, 0xb9, 0xa5, 0xff, 0x54, 0x3f, 0xca, 0x2b, 0x0d, 0x4f, 0xf4, 0x7b, 0xa9, 0x05, 0x6b, 0x7d, 0x33, 0x90, 0x76, 0xb5, 0x0c, 0x3d, 0x84, 0xa2, 0xf5, 0xb4, 0xb8, 0xe3, 0x3f, 0x42, 0xea, 0x29, 0x5a, 0xd5, 0xcc, 0x7d, 0xa4, 0x42, 0x32, 0xf9, 0x18, 0xd5, 0x69, 0xf8, 0x21, 0x0c, 0x97, 0x30, 0x5c, 0x22, 0x8a, 0xca, 0xb4, 0xf5, 0xb1, 0x96, 0x28, 0x59, 0x60, 0xee, 0xc6, 0x72, 0x76, 0x6d, 0xd6, 0xc0, 0x7a, 0xe6, 0xf3, 0xe7, 0x89, 0xf5, 0xc8, 0x8d, 0xe7, 0x89, 0x75, 0x57, 0xfe, 0x3c, 0x99, 0x9a, 0x0f, 0xf9, 0xb3, 0x24, 0x7f, 0xf6, 0xfc, 0x09, 0xf3, 0x64, 0x56, 0x76, 0x9e, 0x9c, 0x0f, 0xfd, 0x57, 0xcd, 0x93, 0x0f, 0x5f, 0xcd, 0x9f, 0x27, 0x1f, 0x0e, 0x7d, 0xf6, 0x3c, 0xf9, 0x30, 0xf8, 0x39, 0xf3, 0xc4, 0x98, 0x1f, 0x81, 0x86, 0xa3, 0xfb, 0x17, 0x22, 0x6f, 0x94, 0x37, 0x4f, 0x8e, 0xde, 0x68, 0x9e, 0xb8, 0x63, 0xc9, 0x6d, 0xc6, 0x3c, 0x49, 0x8c, 0x47, 0x6b, 0x08, 0xed, 0x60, 0x36, 0xde, 0xb7, 0xb4, 0x18, 0x3e, 0x0e, 0x17, 0x4f, 0x7c, 0xf0, 0x70, 0x72, 0x1b, 0xcd, 0x0a, 0xe2, 0x16, 0x7e, 0x3b, 0x16, 0x9a, 0x81, 0xab, 0xfb, 0xc1, 0xb5, 0x10, 0x9c, 0x71, 0xec, 0xfe, 0x6d, 0x9b, 0x58, 0xee, 0x97, 0x69, 0x4d, 0xfd, 0x60, 0x33, 0x53, 0x40, 0x5a, 0x21, 0x66, 0x63, 0xb9, 0x1b, 0xc8, 0x33, 0x23, 0xef, 0x1e, 0xd8, 0x95, 0x28, 0xcf, 0x14, 0xa2, 0xb6, 0xd8, 0xaa, 0x6f, 0x46, 0xde, 0x6c, 0x30, 0xe4, 0xd5, 0xd9, 0xfe, 0x19, 0xc6, 0x4c, 0xc1, 0x98, 0x27, 0x38, 0x2d, 0xa5, 0x3e, 0x1b, 0x37, 0x1b, 0xa7, 0x75, 0x11, 0x51, 0xd0, 0x6c, 0x5a, 0x3c, 0xdf, 0x78, 0xed, 0xd6, 0xc0, 0x72, 0x6c, 0x7a, 0xfb, 0x7d, 0xb0, 0xf6, 0x8b, 0xcc, 0xaa, 0xba, 0x89, 0x73, 0x97, 0x68, 0xe5, 0x4c, 0x3e, 0x72, 0x2c, 0x29, 0x66, 0xd4, 0x9b, 0x11, 0xec, 0xc1, 0xd4, 0xc9, 0x86, 0x63, 0x87, 0xfc, 0x8b, 0x5a, 0xe3, 0xe3, 0x1f, 0xc2, 0x8a, 0x70, 0xa2, 0x35, 0x79, 0xf2, 0x80, 0x98, 0x2b, 0x2d, 0x0f, 0x9c, 0xda, 0xba, 0x70, 0x51, 0x76, 0x66, 0xb9, 0xdb, 0xdc, 0x19, 0x6e, 0x41, 0xaf, 0xd1, 0x82, 0x71, 0x64, 0x74, 0x63, 0x4c, 0x21, 0x6c, 0xd1, 0x18, 0x51, 0x91, 0x1a, 0x92, 0x49, 0x78, 0x6e, 0x31, 0x0a, 0xe1, 0x10, 0xd2, 0xfd, 0x24, 0x34, 0x54, 0xcd, 0x6e, 0x7d, 0x20, 0x1c, 0xc5, 0xab, 0x44, 0x88, 0x66, 0x59, 0x13, 0x90, 0x2e, 0x75, 0xc0, 0xbb, 0x18, 0xd7, 0xc3, 0x2a, 0x3f, 0xc9, 0x48, 0x51, 0xad, 0x37, 0x14, 0xc3, 0x99, 0x61, 0xa3, 0x3d, 0x08, 0xac, 0xc7, 0xf7, 0xb1, 0x4b, 0x86, 0xa7, 0x66, 0x98, 0x0b, 0xc7, 0xe0, 0xb6, 0x7e, 0x9f, 0x59, 0x99, 0x31, 0xb4, 0x85, 0xa0, 0xd3, 0xf3, 0xe3, 0xd0, 0xcc, 0x72, 0xda, 0x8e, 0xd2, 0xdc, 0x23, 0x4b, 0x7a, 0xb2, 0x6b, 0x92, 0x8c, 0xf9, 0xb5, 0x9d, 0xe7, 0xd7, 0x16, 0x11, 0xae, 0x10, 0x87, 0xc0, 0xcf, 0x92, 0xdb, 0x5b, 0x68, 0x1f, 0xc7, 0xbf, 0x87, 0xe6, 0xd7, 0xa0, 0x06, 0x33, 0x1e, 0xfa, 0xfc, 0xf9, 0x35, 0xa3, 0xf3, 0xc6, 0xf3, 0x6b, 0x46, 0xcb, 0xff, 0xb5, 0x75, 0xc8, 0x96, 0x9d, 0x5f, 0x67, 0x8f, 0xff, 0x57, 0xcd, 0xaf, 0xb3, 0x99, 0xfc, 0xf9, 0x75, 0xd6, 0xff, 0xd9, 0xf3, 0xeb, 0xfd, 0x63, 0x7f, 0x7c, 0x1d, 0x3a, 0x99, 0x5c, 0xd8, 0x00, 0xd1, 0xb0, 0x14, 0x6b, 0xc8, 0xcd, 0xaf, 0xe3, 0xd7, 0xce, 0x2f, 0x1a, 0x85, 0x21, 0xac, 0xd9, 0x8d, 0xd6, 0x9e, 0xf7, 0x43, 0xc9, 0xc7, 0xfc, 0xd6, 0x53, 0xf1, 0x80, 0x8a, 0xf1, 0xad, 0x8a, 0xfa, 0xfa, 0x87, 0xb0, 0xf4, 0x91, 0x57, 0xfc, 0xf6, 0x86, 0xfe, 0x13, 0xfd, 0x62, 0xe4, 0x9d, 0x20, 0xee, 0xd0, 0x22, 0x56, 0xa1, 0xf7, 0xdd, 0xc4, 0x89, 0x61, 0x19, 0xee, 0xf9, 0x8c, 0xd5, 0x08, 0xef, 0xa6, 0xd6, 0xa3, 0x63, 0x87, 0xf2, 0xd7, 0x22, 0x9e, 0xc7, 0x1c, 0x0f, 0xc7, 0x5c, 0xd4, 0xbb, 0xf8, 0xb7, 0x1f, 0x12, 0x25, 0x8e, 0xaf, 0xc9, 0xc6, 0x16, 0x31, 0x5b, 0x13, 0xb8, 0x0a, 0x58, 0xb3, 0xe9, 0x19, 0x33, 0x6d, 0x9b, 0x06, 0x57, 0xb6, 0x65, 0x5b, 0x11, 0xdb, 0xa5, 0x68, 0xaa, 0x05, 0x69, 0x4d, 0xc1, 0x5a, 0x89, 0xb6, 0xe3, 0x76, 0x9c, 0x5a, 0xb7, 0xce, 0x6c, 0x4b, 0x3e, 0xf6, 0x54, 0xf2, 0xa9, 0x24, 0xcd, 0xa9, 0xf0, 0x8c, 0xd6, 0x86, 0x93, 0xdd, 0x90, 0xaa, 0xb1, 0x8a, 0xf5, 0x8a, 0x6a, 0x8b, 0x23, 0x7a, 0x10, 0xdb, 0xf0, 0x33, 0x56, 0xab, 0xdc, 0x7c, 0x8a, 0xd2, 0x3a, 0x25, 0xda, 0x82, 0xf4, 0x1e, 0x1e, 0x79, 0x35, 0x7f, 0xcd, 0xe2, 0x15, 0xaa, 0x21, 0xd0, 0xcd, 0xd2, 0x5f, 0x6d, 0x80, 0x5a, 0x23, 0xb7, 0x62, 0x69, 0xeb, 0x69, 0xb5, 0x8a, 0xf7, 0x3c, 0x07, 0x64, 0xa1, 0x43, 0x25, 0x9d, 0x5a, 0x87, 0x3c, 0x70, 0xe2, 0x47, 0xd0, 0x90, 0x5d, 0xab, 0x7c, 0xd6, 0xe9, 0x4f, 0xb3, 0xf3, 0xed, 0x3f, 0xb3, 0x5a, 0xd1, 0x5c, 0xe6, 0x15, 0x6b, 0x40, 0x03, 0x53, 0xe8, 0xf3, 0x67, 0x94, 0xa9, 0xf4, 0xc6, 0x33, 0xca, 0x04, 0xff, 0xd7, 0x56, 0xac, 0xd9, 0xd9, 0x19, 0xf5, 0xde, 0xe6, 0xff, 0xaa, 0x19, 0xf5, 0x5e, 0x59, 0xfe, 0x8c, 0x3a, 0xfd, 0xe6, 0x67, 0xcf, 0xa8, 0xd3, 0x03, 0x9f, 0x3d, 0xa3, 0x8e, 0x25, 0x17, 0x46, 0xa1, 0x36, 0x68, 0x3e, 0x16, 0x89, 0xf1, 0x2e, 0x41, 0x6e, 0x3e, 0x1d, 0xb9, 0x76, 0x3e, 0xd1, 0xc8, 0x20, 0xdf, 0x0d, 0x34, 0x9f, 0x7c, 0x26, 0xf2, 0xef, 0x2b, 0xd6, 0xa8, 0xc6, 0x89, 0xdf, 0x9d, 0x49, 0x3e, 0x46, 0x6b, 0x54, 0x03, 0xf5, 0xdc, 0x52, 0x94, 0xf9, 0xad, 0x2e, 0xf5, 0xd7, 0xfb, 0xfd, 0x33, 0x4e, 0xc5, 0xfd, 0x34, 0xbf, 0x66, 0x78, 0xd5, 0xdf, 0xfe, 0xec, 0x1f, 0x0e, 0xb3, 0xbe, 0xb2, 0x9d, 0xe6, 0xd3, 0xef, 0x48, 0x1f, 0x70, 0x59, 0x76, 0x2e, 0xf9, 0x4c, 0xc2, 0x93, 0x30, 0x8f, 0x7c, 0x2b, 0xcf, 0x0c, 0x1c, 0xfb, 0x6f, 0xe2, 0x68, 0xcd, 0xad, 0x55, 0x26, 0x5a, 0xab, 0xc8, 0xf3, 0x23, 0xc5, 0xc2, 0x9e, 0xae, 0x5d, 0x72, 0xbe, 0x1d, 0xf2, 0x63, 0x67, 0xe3, 0xb5, 0x2e, 0xf2, 0x2f, 0xe2, 0x3a, 0x3f, 0x26, 0x72, 0xc3, 0x19, 0xb4, 0x67, 0x6a, 0x06, 0xfd, 0x6e, 0xfc, 0x8b, 0xcc, 0xa0, 0xa9, 0xdd, 0xea, 0x00, 0xf6, 0x0e, 0xad, 0x50, 0xdb, 0x5e, 0xdb, 0xf6, 0x1a, 0xaf, 0x4e, 0x07, 0x78, 0x6d, 0xc2, 0x35, 0x6a, 0x6a, 0x75, 0xca, 0x4a, 0xb2, 0xd3, 0xb4, 0xf2, 0x79, 0x65, 0xca, 0xf1, 0x7d, 0xb1, 0x9a, 0x45, 0x34, 0xef, 0x70, 0x14, 0xd7, 0x04, 0x70, 0x26, 0x3d, 0xfa, 0x4b, 0xef, 0x75, 0x2b, 0x54, 0x76, 0x5d, 0x8a, 0x1f, 0xf0, 0xd6, 0xe7, 0x56, 0xa5, 0x84, 0x76, 0x2f, 0xae, 0x4a, 0x3e, 0xa8, 0x89, 0x7f, 0xe7, 0x30, 0x50, 0x7f, 0x91, 0xfc, 0x38, 0xb5, 0xf2, 0x88, 0xb9, 0x44, 0xcf, 0x85, 0xfd, 0xfa, 0xf5, 0xeb, 0x16, 0xf6, 0x46, 0x2d, 0xae, 0x4d, 0x03, 0x2c, 0x75, 0x5d, 0xbb, 0x32, 0xad, 0xe0, 0x95, 0xa9, 0xf0, 0x46, 0x2b, 0x13, 0xad, 0x8e, 0xfb, 0x62, 0x6b, 0x70, 0x26, 0xc1, 0x07, 0xd7, 0xce, 0x1d, 0x38, 0x79, 0xe3, 0xb9, 0x03, 0x07, 0x73, 0x31, 0xb3, 0xbb, 0xa6, 0xbb, 0xf2, 0x62, 0x3e, 0x9d, 0x17, 0xf3, 0x89, 0x5c, 0xcc, 0x1e, 0x23, 0xe6, 0x60, 0x5e, 0xcc, 0xde, 0x5c, 0xcc, 0x9e, 0x6b, 0xe2, 0x69, 0x37, 0x8c, 0x95, 0xb8, 0x26, 0x56, 0xcd, 0x0d, 0x63, 0xb9, 0xae, 0xa9, 0x47, 0xf1, 0x8d, 0x6a, 0x91, 0xf3, 0x8c, 0x38, 0xfe, 0x59, 0xfa, 0x4c, 0x4a, 0xaf, 0x85, 0x4e, 0xa5, 0xef, 0xbb, 0xce, 0xc7, 0x78, 0xe9, 0x74, 0x1d, 0x9c, 0x26, 0xc3, 0xf3, 0x93, 0xdb, 0xc0, 0x07, 0xa5, 0xf3, 0x2e, 0xa1, 0xfd, 0xeb, 0xfa, 0x1f, 0x16, 0xd3, 0x35, 0x98, 0xcb, 0xb9, 0xdd, 0x40, 0x43, 0x7b, 0x24, 0x93, 0xd3, 0x0b, 0x89, 0x4e, 0x4f, 0xb5, 0xdc, 0xc0, 0x7a, 0xf8, 0x62, 0xbe, 0xcb, 0xf5, 0x3d, 0xde, 0xeb, 0x3c, 0x1d, 0x61, 0xbf, 0x17, 0x7b, 0x59, 0x6f, 0x4b, 0x77, 0x1b, 0xb8, 0x22, 0x74, 0x8e, 0x2e, 0x10, 0x2b, 0x7d, 0x50, 0xea, 0x34, 0x10, 0x51, 0x48, 0x1b, 0x1f, 0xe3, 0xb9, 0x69, 0x7f, 0x4a, 0xe8, 0x15, 0x7e, 0x9e, 0x77, 0x23, 0x3e, 0x9b, 0x9b, 0xc2, 0x79, 0xdd, 0x37, 0x15, 0x6a, 0x94, 0x64, 0xd7, 0x7f, 0xe6, 0x0c, 0x70, 0x9a, 0xfd, 0xd1, 0xb5, 0xa1, 0x4f, 0x19, 0x3a, 0x29, 0xaf, 0x32, 0x1a, 0xa2, 0x0f, 0x56, 0x62, 0x89, 0x33, 0xd8, 0xd2, 0x3d, 0x48, 0x51, 0x3b, 0xc9, 0x46, 0x87, 0xd0, 0x9c, 0x53, 0x66, 0x8f, 0x87, 0x10, 0x75, 0xf0, 0xb7, 0x58, 0xa9, 0x77, 0xb9, 0x21, 0xc0, 0xa1, 0x56, 0x5c, 0xcf, 0x4a, 0x5e, 0x3f, 0x43, 0x98, 0xa3, 0x91, 0x33, 0xe0, 0xae, 0xf5, 0x40, 0x26, 0xd0, 0x1c, 0xf2, 0xc0, 0x9a, 0x80, 0x1b, 0x64, 0x77, 0x03, 0xf7, 0x93, 0x8d, 0x7d, 0x7b, 0x83, 0xb4, 0x89, 0xce, 0x9b, 0x94, 0x31, 0xd2, 0x35, 0x54, 0xd4, 0xbf, 0x62, 0x94, 0xbd, 0x37, 0x91, 0x07, 0x7d, 0x6a, 0xb1, 0xb3, 0x13, 0xfc, 0x35, 0xab, 0xc0, 0x7c, 0x3c, 0x03, 0xe6, 0xc7, 0x23, 0xfe, 0x0c, 0x58, 0x87, 0x7e, 0xe9, 0xb4, 0xe0, 0xbc, 0xdb, 0x70, 0x6a, 0xc3, 0xf1, 0x48, 0x18, 0xa9, 0x81, 0xaf, 0x20, 0xfa, 0x8f, 0x3e, 0xda, 0x37, 0x0e, 0x25, 0x47, 0x75, 0xd5, 0xd0, 0xc1, 0xf3, 0x32, 0x7d, 0xb5, 0xa5, 0x5d, 0x02, 0x99, 0x87, 0x28, 0x28, 0xce, 0x71, 0x1b, 0x53, 0x2d, 0x0f, 0xf8, 0xf9, 0x24, 0x2d, 0x23, 0xf6, 0xe2, 0x24, 0xd2, 0xdf, 0xcc, 0xda, 0x2d, 0xd9, 0xf3, 0xa8, 0x71, 0xb1, 0xc6, 0x1e, 0xc3, 0xb8, 0x2e, 0xa6, 0x1e, 0xd2, 0xe9, 0xc7, 0xa7, 0x7e, 0xff, 0x35, 0xe7, 0x71, 0x7b, 0xd8, 0x02, 0x5d, 0xec, 0xda, 0xfa, 0x6f, 0xee, 0x84, 0xfb, 0x21, 0xe8, 0x8b, 0x42, 0x75, 0xf4, 0x47, 0x50, 0x83, 0xdf, 0x5a, 0x77, 0x3d, 0x71, 0xd1, 0xf1, 0xb1, 0x56, 0xda, 0xe7, 0x8a, 0x92, 0xdf, 0x4e, 0xe3, 0xba, 0xa1, 0x7a, 0x91, 0xaf, 0x11, 0x39, 0xe5, 0x18, 0xd2, 0xa3, 0x24, 0x52, 0xbb, 0x9f, 0x87, 0x93, 0x8a, 0x7d, 0xe8, 0x7b, 0xbc, 0xd7, 0xd6, 0xd2, 0xba, 0xe4, 0xc4, 0xc1, 0x9a, 0x25, 0xca, 0xec, 0xa1, 0x2d, 0x7c, 0xbf, 0x54, 0x69, 0x58, 0xd8, 0x01, 0x36, 0x58, 0x36, 0xba, 0x03, 0x8a, 0x53, 0x16, 0x5f, 0x27, 0xc4, 0x60, 0xb9, 0x56, 0x3c, 0x4a, 0x56, 0xb6, 0x74, 0xa7, 0xe2, 0x9d, 0x19, 0xff, 0xe3, 0x40, 0x7e, 0xcc, 0x4c, 0xb9, 0x39, 0x9a, 0xbf, 0xfe, 0xfa, 0x73, 0x27, 0x10, 0x6a, 0xaa, 0xd8, 0xd8, 0x2d, 0x24, 0xfe, 0x93, 0xce, 0xd6, 0x5e, 0xa3, 0x9d, 0x1a, 0x63, 0x4e, 0x06, 0x73, 0xda, 0x41, 0x35, 0x6e, 0x9f, 0xb0, 0xc7, 0x22, 0x6b, 0x48, 0xc6, 0x12, 0xc5, 0x76, 0x22, 0xed, 0x67, 0xd2, 0xe2, 0x71, 0xb2, 0xff, 0xa2, 0xab, 0xe6, 0x6a, 0x1c, 0x5d, 0x89, 0x4d, 0xe9, 0xce, 0x3d, 0x3b, 0x0c, 0x5c, 0xce, 0x72, 0x57, 0x07, 0x14, 0x69, 0xcd, 0x78, 0xa5, 0xe0, 0x55, 0xb9, 0xd6, 0xc0, 0xd8, 0x31, 0xb3, 0x89, 0x5e, 0x00, 0xd9, 0x80, 0x09, 0xa4, 0x25, 0xaf, 0xd0, 0x06, 0x71, 0x93, 0x2f, 0x31, 0x35, 0x9b, 0x16, 0x8e, 0x29, 0xd2, 0xf8, 0x03, 0x7f, 0xdd, 0x8b, 0xfb, 0x33, 0x72, 0x35, 0xb0, 0x8d, 0xc9, 0xb6, 0xe6, 0xad, 0xae, 0x16, 0xcd, 0xb4, 0x78, 0xe2, 0x6a, 0x09, 0xdb, 0xe3, 0x8d, 0x10, 0x8a, 0xd9, 0xf2, 0x69, 0xfa, 0x3d, 0x4c, 0x41, 0xca, 0x95, 0x4a, 0x70, 0x20, 0x8d, 0x7b, 0xc6, 0x47, 0x48, 0x43, 0x84, 0x1f, 0xb5, 0x3c, 0xfa, 0x3c, 0xe9, 0x48, 0x24, 0x15, 0x81, 0x64, 0xc4, 0x68, 0xd0, 0xe7, 0x91, 0x96, 0x50, 0xf9, 0xd9, 0xc7, 0xa8, 0x66, 0x91, 0x3b, 0x3e, 0xd4, 0x71, 0xbc, 0x08, 0x0d, 0x80, 0x0b, 0xdc, 0x8b, 0x13, 0x60, 0xbf, 0x79, 0x35, 0xf6, 0x62, 0x91, 0x6f, 0x35, 0xb6, 0x2b, 0xe9, 0x52, 0x4e, 0xb5, 0x67, 0x3e, 0x35, 0xb3, 0x67, 0xdb, 0xd3, 0x89, 0xf1, 0x76, 0x89, 0xbd, 0xfc, 0x4a, 0x08, 0x4f, 0xe9, 0x37, 0x60, 0xee, 0x84, 0x2a, 0x5f, 0x2e, 0x77, 0x4c, 0xea, 0x86, 0x8d, 0x62, 0x3b, 0x86, 0x29, 0x44, 0xb5, 0x6e, 0x58, 0xfa, 0xe2, 0xf4, 0x7d, 0xd9, 0xb2, 0x7f, 0xfa, 0xf4, 0xb5, 0xe5, 0x36, 0xca, 0xe6, 0xe4, 0xb2, 0x55, 0x60, 0xd9, 0x62, 0x6c, 0x1f, 0xcd, 0x65, 0xa3, 0xba, 0x7c, 0x6e, 0xf9, 0x62, 0x9f, 0x51, 0xbe, 0x18, 0x7e, 0x8b, 0xb9, 0x64, 0xcb, 0xf0, 0xca, 0x35, 0x55, 0x32, 0x3e, 0xab, 0x15, 0x56, 0x68, 0x21, 0xec, 0xe1, 0x0a, 0xe4, 0x47, 0x3c, 0x35, 0x3e, 0xa8, 0x42, 0x9e, 0x2a, 0xe0, 0x22, 0x3d, 0x18, 0x99, 0xcf, 0x72, 0x46, 0x3f, 0x65, 0x7b, 0x7b, 0xf6, 0xb1, 0xd9, 0x1c, 0x99, 0xf8, 0x74, 0x67, 0x6e, 0x16, 0xc9, 0xb9, 0x75, 0xba, 0x98, 0xf0, 0xec, 0x73, 0x77, 0x76, 0xc6, 0xa3, 0x60, 0xd4, 0x98, 0x79, 0x7d, 0xf0, 0x6f, 0x0f, 0xab, 0x60, 0xf9, 0x32, 0xed, 0x73, 0x7f, 0xd5, 0x27, 0x13, 0x17, 0x45, 0x96, 0xfa, 0x6c, 0xb1, 0x5f, 0x67, 0x60, 0x23, 0x04, 0xc9, 0x8a, 0x3b, 0xea, 0x81, 0xaf, 0x8a, 0x11, 0x6a, 0xeb, 0xe3, 0xb2, 0x91, 0xc5, 0x3c, 0x8f, 0x4c, 0x0f, 0xe6, 0x5c, 0xb1, 0x00, 0xcb, 0xe3, 0x05, 0x46, 0x0b, 0xf9, 0xe6, 0xca, 0xf6, 0xad, 0x48, 0xfc, 0x3b, 0x0d, 0x34, 0x36, 0x90, 0x3a, 0x2a, 0x3a, 0x20, 0xc0, 0x14, 0x82, 0xf4, 0x2e, 0x9c, 0xce, 0x05, 0xf2, 0x31, 0x3e, 0x01, 0x8b, 0x64, 0x3c, 0x18, 0xab, 0x34, 0xaa, 0x6a, 0xa6, 0x16, 0x55, 0xf4, 0x7f, 0xda, 0xf4, 0xd3, 0xc3, 0xa9, 0x0b, 0x48, 0x9f, 0x56, 0xb6, 0xc5, 0x82, 0x1e, 0x48, 0xb5, 0x44, 0xf7, 0x9f, 0x81, 0x96, 0x63, 0xaa, 0x46, 0x18, 0xc3, 0xa6, 0x52, 0x37, 0x28, 0xf1, 0x4d, 0x48, 0x85, 0x4c, 0xc5, 0x6e, 0xb8, 0x39, 0x3e, 0xc0, 0x34, 0x43, 0xc2, 0x31, 0x9f, 0x4f, 0x31, 0x8a, 0xb4, 0xb9, 0x74, 0x8d, 0xb4, 0xa7, 0x10, 0x69, 0x8f, 0xa9, 0xc7, 0x86, 0x34, 0xc3, 0x74, 0x0d, 0xcd, 0x20, 0x6d, 0x16, 0xd6, 0x30, 0x0a, 0xc8, 0x47, 0x57, 0x23, 0xdf, 0xd0, 0xe8, 0x37, 0x91, 0x65, 0x1b, 0x6b, 0x78, 0x39, 0xe2, 0x87, 0x9c, 0x8d, 0xb8, 0x2e, 0xd9, 0x15, 0x33, 0xdf, 0x1f, 0x4c, 0x2c, 0x90, 0xdf, 0xc8, 0xc4, 0x13, 0x3b, 0xa1, 0x28, 0x1d, 0x45, 0x4a, 0x18, 0x62, 0xdc, 0x33, 0x4b, 0xf4, 0x1f, 0xfd, 0x9d, 0xd0, 0x32, 0xf4, 0x1e, 0x98, 0x15, 0xcb, 0xa9, 0x7e, 0x45, 0x8d, 0xf7, 0x28, 0x54, 0x67, 0x93, 0x83, 0xac, 0x83, 0xfb, 0xc7, 0x3b, 0xa1, 0xf9, 0x6e, 0x75, 0x08, 0x5b, 0x9c, 0xf9, 0xc6, 0x99, 0xec, 0x71, 0x82, 0xb4, 0xbf, 0xcb, 0x99, 0x26, 0xce, 0x4e, 0xb5, 0xd4, 0x54, 0x42, 0x0d, 0xca, 0x29, 0x51, 0x4e, 0xbd, 0x68, 0xfa, 0x9b, 0xad, 0xaa, 0x56, 0x34, 0xad, 0x0c, 0x47, 0x5a, 0xd5, 0xf1, 0x18, 0x9f, 0x61, 0x88, 0xde, 0x21, 0x0f, 0xce, 0x51, 0xd1, 0x4b, 0x94, 0xf2, 0x55, 0xc2, 0xb2, 0x2b, 0x27, 0xdd, 0x95, 0xec, 0xa9, 0xe5, 0x42, 0xc2, 0xa7, 0x24, 0x5b, 0xa7, 0xe5, 0xd8, 0x4b, 0xb4, 0xbf, 0xda, 0xe2, 0xf4, 0xe2, 0x3a, 0xd1, 0x40, 0xeb, 0x84, 0x42, 0x78, 0xa8, 0x26, 0xfc, 0x2d, 0xae, 0xc2, 0x55, 0x02, 0xcb, 0x91, 0x79, 0xa2, 0x1b, 0x96, 0x86, 0x2a, 0x61, 0xcd, 0xe3, 0xc8, 0x1b, 0x32, 0x92, 0xf7, 0x6c, 0xb6, 0x76, 0x2d, 0x67, 0x24, 0xb2, 0xd9, 0xe9, 0x32, 0x7a, 0x8f, 0xf5, 0x70, 0x15, 0x0c, 0xc1, 0xa7, 0x59, 0xe4, 0x2b, 0xcd, 0xcc, 0xbe, 0x37, 0x25, 0xb2, 0x0f, 0xf1, 0x49, 0xec, 0x35, 0x63, 0xf4, 0x93, 0xa8, 0xb7, 0x93, 0x67, 0xb6, 0x6d, 0xaf, 0xe8, 0x7d, 0xb7, 0x41, 0x7b, 0x00, 0xc6, 0x5c, 0x55, 0x8c, 0x4a, 0x50, 0x9e, 0xf5, 0xa6, 0x98, 0x1c, 0xbd, 0x4c, 0xd8, 0xc6, 0x45, 0xd1, 0xe7, 0xc0, 0xd1, 0xbe, 0x95, 0xae, 0xa8, 0x75, 0xe4, 0x5f, 0xa7, 0xe7, 0xe2, 0x7c, 0xb1, 0xd0, 0x78, 0x25, 0x44, 0xaf, 0xa9, 0x5e, 0x74, 0xbc, 0x68, 0x91, 0xa2, 0x6e, 0xc2, 0x30, 0x0a, 0x74, 0x82, 0x39, 0xfe, 0x1d, 0xcc, 0x16, 0xdb, 0x2d, 0xfe, 0x9d, 0x66, 0x3a, 0x09, 0xc1, 0xbc, 0x2f, 0x83, 0xe1, 0x5f, 0xbc, 0x1c, 0x73, 0x1b, 0xc1, 0x34, 0x42, 0xec, 0x13, 0x5a, 0xf4, 0x95, 0x75, 0xaa, 0xaf, 0x6a, 0xc8, 0xd2, 0xea, 0x97, 0xf1, 0x1e, 0x15, 0x30, 0xdc, 0x82, 0xe1, 0xa6, 0x78, 0x0f, 0xa6, 0x31, 0x93, 0xd2, 0xf8, 0xc3, 0x09, 0x2a, 0xc7, 0x2d, 0xa4, 0x61, 0x95, 0xf5, 0x43, 0xfe, 0x10, 0xef, 0x02, 0xdd, 0x93, 0x40, 0x4e, 0x31, 0xe5, 0xb6, 0x21, 0x17, 0x0e, 0x96, 0x14, 0x59, 0x46, 0xc4, 0xa3, 0xff, 0x3f, 0xc6, 0xd3, 0xb3, 0xb3, 0xbf, 0xba, 0x32, 0x8c, 0x79, 0x98, 0x71, 0x17, 0x7e, 0x04, 0xb1, 0x14, 0xb6, 0x4c, 0xb4, 0x8e, 0x7c, 0x50, 0xaf, 0x93, 0x44, 0x19, 0x7c, 0x94, 0x97, 0xd9, 0xc8, 0x53, 0xe4, 0x67, 0xe7, 0xfc, 0x3a, 0x79, 0x05, 0x94, 0xa3, 0x75, 0xb4, 0x12, 0xb0, 0x14, 0x83, 0x73, 0xee, 0x72, 0x91, 0x0b, 0xfb, 0x8b, 0x52, 0xbb, 0xb6, 0xcf, 0x3c, 0x38, 0x97, 0x38, 0xcc, 0xc1, 0x2b, 0xfb, 0xfb, 0x50, 0xbe, 0x70, 0x35, 0x2c, 0x87, 0x90, 0x66, 0x8d, 0xbc, 0x0f, 0x6e, 0xbc, 0xbe, 0x07, 0x42, 0xf8, 0x9b, 0x81, 0x9a, 0x85, 0xcd, 0x10, 0xc6, 0xab, 0x35, 0xe0, 0xc7, 0x75, 0x4b, 0x86, 0xda, 0x85, 0x84, 0xbf, 0x5e, 0xcd, 0xf8, 0x6b, 0xd5, 0xb1, 0xb1, 0x14, 0x48, 0xeb, 0x7d, 0x5d, 0x10, 0x04, 0x95, 0xe4, 0xba, 0xb4, 0x7b, 0xda, 0xca, 0x50, 0x26, 0x56, 0x06, 0x2f, 0x18, 0x36, 0x9a, 0xb3, 0xb1, 0x9c, 0x66, 0x61, 0xa3, 0xd9, 0x47, 0xef, 0xfb, 0x87, 0x90, 0x87, 0xc7, 0x5e, 0xf7, 0x63, 0x1b, 0x07, 0xf1, 0xbe, 0x06, 0x47, 0xad, 0xe9, 0xaf, 0xd5, 0x71, 0x6a, 0x4d, 0xec, 0x35, 0x7c, 0x1a, 0xc6, 0x6f, 0x28, 0x8c, 0xd4, 0xe1, 0xe4, 0x19, 0xb6, 0xca, 0xb2, 0xb6, 0x0c, 0x52, 0xfb, 0x67, 0xb9, 0x86, 0x93, 0xfb, 0x99, 0x7a, 0xcd, 0x16, 0x1c, 0xc3, 0x1f, 0xec, 0xa2, 0x8d, 0x50, 0x06, 0x49, 0xd0, 0x2e, 0x33, 0xf2, 0x20, 0x1b, 0x98, 0x07, 0x61, 0x3c, 0xdc, 0xd8, 0x06, 0x9f, 0x44, 0x67, 0x1a, 0x48, 0x94, 0xe3, 0x3c, 0x9b, 0x2a, 0x71, 0x75, 0xa7, 0x37, 0xdb, 0x92, 0xa3, 0x97, 0xbc, 0xd8, 0x26, 0xc1, 0x30, 0xce, 0xf7, 0xf6, 0x24, 0x3e, 0x6f, 0x3b, 0x49, 0x48, 0x69, 0x44, 0x93, 0x2d, 0x62, 0x24, 0x11, 0x15, 0xbc, 0x8e, 0x32, 0x4c, 0x1b, 0x53, 0x48, 0xf3, 0xf2, 0x29, 0x03, 0xd6, 0xf4, 0x52, 0x27, 0x53, 0x06, 0x0f, 0x98, 0x8f, 0x76, 0x41, 0xed, 0x51, 0xac, 0x03, 0x95, 0x9f, 0x71, 0x14, 0x6b, 0x1e, 0x19, 0x53, 0x2c, 0x42, 0xde, 0x38, 0xaa, 0x3a, 0x97, 0xf8, 0xed, 0x4c, 0x35, 0xa8, 0xad, 0x1c, 0xce, 0x25, 0xc8, 0x5f, 0x95, 0x19, 0xfe, 0xf0, 0x0e, 0x26, 0x36, 0x33, 0xba, 0xb0, 0x39, 0x39, 0xfa, 0xf1, 0x3b, 0x8c, 0x71, 0xda, 0x44, 0x29, 0x7f, 0x7c, 0x80, 0xc7, 0x27, 0x8d, 0xa3, 0x70, 0xa2, 0x2e, 0x15, 0x3a, 0x8e, 0x23, 0xe2, 0x44, 0x27, 0xe1, 0x5b, 0xc4, 0x57, 0xb3, 0x57, 0x5a, 0xf2, 0xcf, 0x1e, 0xe3, 0xd9, 0xcd, 0xe8, 0x56, 0xe3, 0xf5, 0x7c, 0x9d, 0x45, 0x4f, 0xa1, 0xd9, 0x75, 0xd6, 0x98, 0xe9, 0x57, 0xc4, 0x29, 0x3a, 0xd2, 0xe1, 0x30, 0xe9, 0x0f, 0xe3, 0x2c, 0x57, 0x59, 0x7f, 0x18, 0xd3, 0xc6, 0x35, 0xa2, 0x3a, 0xd8, 0x0d, 0x35, 0x38, 0xeb, 0xc9, 0x3e, 0x2c, 0x46, 0x7a, 0x3d, 0x62, 0xe7, 0x83, 0xc7, 0x8d, 0x29, 0xa7, 0xd5, 0x74, 0x0d, 0x17, 0xf5, 0x71, 0x6f, 0xfc, 0x67, 0xd5, 0x8d, 0x2c, 0xf1, 0xce, 0x22, 0xd9, 0x90, 0x74, 0x7e, 0x1a, 0x27, 0x3e, 0xae, 0x4e, 0x3e, 0x16, 0x4c, 0xb4, 0x7c, 0xcf, 0x38, 0x73, 0xe4, 0x7d, 0x1b, 0x9f, 0xc0, 0xd2, 0xe0, 0x34, 0x69, 0x4d, 0x30, 0xd2, 0xcd, 0x6a, 0x2e, 0x5d, 0x9b, 0x6e, 0x19, 0xcb, 0xa7, 0x85, 0x9c, 0x2a, 0xde, 0x5f, 0x7c, 0xc7, 0xd0, 0x58, 0x0a, 0xfb, 0x12, 0x10, 0x6a, 0xbd, 0xdf, 0x57, 0x8f, 0xfd, 0x99, 0x00, 0x3f, 0x6b, 0x0f, 0x79, 0x91, 0x6f, 0x73, 0x37, 0xbd, 0x15, 0xee, 0xd3, 0xe0, 0xe2, 0x5e, 0xa4, 0x65, 0x7b, 0x89, 0x96, 0x61, 0xed, 0xd6, 0x22, 0x2d, 0xeb, 0x43, 0x0e, 0xba, 0x9f, 0xb1, 0x2b, 0xbc, 0x4a, 0x9d, 0x17, 0x6b, 0x65, 0xeb, 0x26, 0xbf, 0xca, 0xf9, 0xb3, 0x83, 0xf9, 0x5e, 0x11, 0x6a, 0xb9, 0xaf, 0xe4, 0xcd, 0xe7, 0x89, 0xef, 0xbd, 0xcf, 0xfd, 0xe6, 0xf7, 0x82, 0x38, 0x23, 0x9c, 0x8b, 0x6a, 0xe6, 0x10, 0x95, 0xf3, 0x2c, 0x0a, 0x74, 0x81, 0x4c, 0x7c, 0xaf, 0x87, 0x68, 0xdc, 0x02, 0xa6, 0x71, 0xc4, 0x03, 0x9b, 0x96, 0xe2, 0x78, 0x8b, 0x45, 0x70, 0x2e, 0x46, 0x30, 0x0d, 0x19, 0xd3, 0xb0, 0x7b, 0x88, 0xe6, 0x2d, 0x60, 0x8a, 0x08, 0xa6, 0x1f, 0x24, 0x22, 0xf8, 0xfb, 0x94, 0x55, 0x55, 0xe0, 0x4e, 0x15, 0xdf, 0xce, 0x20, 0xbd, 0xa2, 0x77, 0x2d, 0x48, 0x5b, 0x4b, 0xd2, 0xb2, 0x27, 0xb2, 0xed, 0x67, 0x0b, 0xb1, 0x46, 0xc1, 0xd8, 0xb6, 0x57, 0xf0, 0xbf, 0x06, 0x47, 0x73, 0xe8, 0x68, 0x86, 0xed, 0xe8, 0xc2, 0xc7, 0xce, 0x82, 0x19, 0xc3, 0x6a, 0xc3, 0x19, 0xec, 0xd7, 0xe4, 0xc9, 0xfd, 0x01, 0xe4, 0xa1, 0x5b, 0x17, 0x2f, 0x5c, 0x0c, 0x55, 0x01, 0xeb, 0xaf, 0x48, 0xe7, 0x4a, 0xf0, 0xae, 0x2a, 0x73, 0x16, 0x31, 0x6c, 0x83, 0x06, 0xe4, 0x5b, 0x13, 0xf8, 0x4d, 0x06, 0xc8, 0x5a, 0x7f, 0x7f, 0xeb, 0x06, 0x5f, 0x04, 0x5a, 0xf0, 0xda, 0x6a, 0x5c, 0x2f, 0xc5, 0x5e, 0x0e, 0xc7, 0x7f, 0x86, 0x6d, 0xb7, 0x2c, 0x44, 0x28, 0x49, 0x31, 0xb8, 0x27, 0x90, 0x44, 0xb9, 0xd9, 0xef, 0x9c, 0x39, 0x7c, 0x7f, 0x0b, 0xc5, 0x58, 0x11, 0xa4, 0x74, 0x13, 0xc8, 0x15, 0x58, 0x87, 0x37, 0x71, 0x48, 0x8a, 0xf6, 0x5e, 0x5e, 0x7c, 0x9f, 0xb9, 0x57, 0xe2, 0x5d, 0x32, 0x5a, 0x31, 0xde, 0x39, 0xf8, 0x4e, 0xc5, 0x3b, 0x33, 0xfe, 0xc7, 0x21, 0x33, 0x8d, 0xdb, 0x02, 0xa9, 0x22, 0x8f, 0x9f, 0x51, 0xa7, 0xf8, 0x57, 0x7c, 0x62, 0xf3, 0x99, 0x89, 0xeb, 0x4f, 0x8e, 0xfe, 0x3e, 0x69, 0x20, 0x87, 0x09, 0x3a, 0xbf, 0xd3, 0xbb, 0x00, 0xa9, 0xe0, 0x4e, 0xf6, 0xe7, 0x6e, 0xd0, 0xd0, 0x0b, 0xa1, 0xe8, 0x0f, 0x89, 0xc6, 0x47, 0x26, 0x2e, 0x2c, 0x77, 0xd6, 0x59, 0xe6, 0x33, 0x95, 0x77, 0x64, 0xa9, 0x7c, 0xd9, 0x3f, 0x41, 0x61, 0x74, 0x01, 0xc8, 0x6c, 0xa5, 0x5f, 0xc8, 0x7a, 0x7b, 0x43, 0x3c, 0x53, 0x76, 0x32, 0x25, 0xdf, 0xc4, 0x94, 0xbc, 0xc0, 0xa0, 0xe4, 0x99, 0x7c, 0x4a, 0x1e, 0x44, 0x89, 0xe4, 0xf5, 0x23, 0xd8, 0xd2, 0x0d, 0xc1, 0x48, 0xbc, 0x77, 0x10, 0xf0, 0x29, 0xd3, 0x73, 0xa4, 0x49, 0xf1, 0x00, 0xc4, 0xf7, 0xc7, 0x7b, 0x4a, 0x89, 0xae, 0x63, 0x19, 0x2f, 0xc8, 0x95, 0x0d, 0x53, 0x34, 0xfd, 0xa3, 0x97, 0x98, 0xa6, 0xbb, 0x95, 0xa8, 0x73, 0x89, 0x52, 0x28, 0xf0, 0x03, 0xae, 0x3e, 0x24, 0xf2, 0x60, 0x0b, 0x82, 0x6c, 0x39, 0x46, 0x3f, 0x3a, 0xc2, 0x58, 0x8c, 0x38, 0x27, 0x94, 0x45, 0x0b, 0x71, 0xed, 0xb9, 0x7b, 0xeb, 0x42, 0xc7, 0xdd, 0x5b, 0x03, 0x84, 0xa9, 0x3e, 0x93, 0xf4, 0x6c, 0x2f, 0x0f, 0x69, 0x20, 0x6f, 0x16, 0x72, 0x94, 0x4b, 0xed, 0x59, 0xd8, 0x00, 0x4e, 0xeb, 0xd8, 0x06, 0x03, 0xa9, 0x72, 0x52, 0x60, 0xf5, 0x62, 0x5b, 0xbd, 0x46, 0xba, 0x5d, 0xf2, 0x8a, 0x6c, 0x8b, 0x5d, 0x28, 0x9f, 0xd6, 0x62, 0x3b, 0xae, 0x6f, 0xb1, 0x8f, 0xcc, 0xd9, 0x16, 0xfb, 0xc8, 0xf3, 0xa7, 0xb6, 0x98, 0x34, 0xf1, 0x5f, 0xd1, 0x62, 0xe7, 0xc7, 0xf3, 0x5b, 0xec, 0xfc, 0x26, 0x8d, 0x0c, 0x9b, 0xff, 0x68, 0x7b, 0x9d, 0x7f, 0xc2, 0x90, 0xe8, 0xd6, 0x61, 0xc9, 0xab, 0xb3, 0x25, 0x4f, 0x55, 0xf8, 0xcc, 0x8c, 0xe6, 0x44, 0x28, 0x0f, 0x66, 0xa4, 0x87, 0x31, 0xfe, 0x9a, 0x04, 0x45, 0x38, 0x7f, 0x94, 0xbd, 0x38, 0x83, 0x14, 0x55, 0xac, 0x34, 0xa3, 0x96, 0xb2, 0xec, 0x19, 0x54, 0x8d, 0xd6, 0x1a, 0x22, 0x7a, 0x6e, 0xd0, 0x1a, 0xd2, 0xd7, 0x48, 0xe4, 0x24, 0x41, 0xf3, 0xb5, 0xb4, 0xe6, 0xfc, 0x0b, 0x37, 0x48, 0x7d, 0xad, 0x41, 0xbb, 0x3e, 0xa3, 0x07, 0x2f, 0xbd, 0x66, 0x68, 0x62, 0x26, 0x52, 0xc8, 0xa3, 0xf8, 0x0a, 0x88, 0x16, 0x73, 0x9d, 0x7c, 0xa0, 0xf2, 0xd7, 0x48, 0x67, 0x62, 0x9b, 0x38, 0x0d, 0x82, 0x27, 0x73, 0x75, 0x19, 0x3d, 0xcf, 0x58, 0xcb, 0x25, 0xc4, 0xb9, 0x6d, 0x2c, 0x25, 0x14, 0x98, 0x4d, 0xac, 0x75, 0x72, 0xd0, 0x1f, 0xaf, 0x31, 0xc5, 0x7f, 0xb6, 0xf8, 0x7c, 0x3b, 0x9c, 0x7c, 0x39, 0x9c, 0x44, 0xaa, 0x1c, 0xdf, 0xfe, 0x72, 0x75, 0x23, 0xbe, 0x97, 0xc1, 0x92, 0xda, 0xf9, 0xdc, 0x5f, 0xae, 0x9f, 0xf8, 0xf0, 0x44, 0x72, 0xf8, 0x78, 0x37, 0xb4, 0xd4, 0xc4, 0xe2, 0x2f, 0xbb, 0xed, 0x8f, 0x6f, 0xe4, 0x72, 0x6e, 0x16, 0x52, 0xa1, 0x12, 0x8b, 0x77, 0x30, 0x56, 0xc5, 0xb0, 0x77, 0xc9, 0x3f, 0xfc, 0x0c, 0x6b, 0x35, 0xdb, 0x67, 0x62, 0xdd, 0xd1, 0x59, 0x86, 0xd6, 0xa5, 0x17, 0x63, 0xda, 0xe3, 0xff, 0x23, 0xa4, 0x1b, 0x12, 0xe4, 0x70, 0x9e, 0xfc, 0x18, 0x13, 0x78, 0x1e, 0x84, 0xbc, 0x9e, 0xf5, 0xae, 0x41, 0x1c, 0x66, 0xe4, 0x34, 0xbc, 0x2d, 0x3c, 0xce, 0x66, 0xef, 0x70, 0x9d, 0xd1, 0x18, 0x85, 0x7c, 0x85, 0xb1, 0x8e, 0xf5, 0xb9, 0xd5, 0x0a, 0x98, 0x16, 0x77, 0x5d, 0x62, 0x63, 0x1a, 0xe4, 0x7b, 0x15, 0x2f, 0xb8, 0x71, 0x64, 0xc5, 0x46, 0x48, 0xfa, 0xb5, 0xdb, 0x3a, 0x49, 0x5e, 0x49, 0x9b, 0xdd, 0x9d, 0xd8, 0x6f, 0x25, 0x23, 0x24, 0x77, 0x22, 0xa7, 0xc7, 0xa1, 0xed, 0x18, 0x6b, 0x2e, 0x86, 0x2b, 0x86, 0x5f, 0x86, 0xa2, 0x00, 0xce, 0x8c, 0x75, 0x50, 0x2d, 0x59, 0x0a, 0xf8, 0x5e, 0xa6, 0xd8, 0x4b, 0x0f, 0xc4, 0x07, 0x7a, 0xa4, 0xa1, 0x68, 0x10, 0x62, 0x2f, 0x77, 0x9a, 0xad, 0x11, 0x09, 0x34, 0x2b, 0x3e, 0xb7, 0xa4, 0x1a, 0x00, 0xaf, 0xef, 0x8c, 0xb0, 0x25, 0xab, 0x57, 0x60, 0xcd, 0x67, 0x77, 0x24, 0xf0, 0xdd, 0x83, 0xd1, 0xba, 0x9a, 0x28, 0x7b, 0x70, 0x61, 0xef, 0x2b, 0x1f, 0x9c, 0x65, 0x7e, 0xab, 0x0e, 0x67, 0x4d, 0x2e, 0xec, 0x93, 0x57, 0x39, 0x6c, 0x27, 0x7b, 0x64, 0xda, 0x6e, 0x8b, 0xd2, 0x1e, 0x08, 0x49, 0xc4, 0x1e, 0x92, 0x88, 0x69, 0x97, 0x41, 0xc1, 0xab, 0xf2, 0xeb, 0x52, 0xa7, 0x39, 0x7a, 0x1f, 0xe9, 0x9e, 0xd6, 0xc8, 0xf1, 0x9f, 0x2d, 0x99, 0xf8, 0x60, 0x58, 0x0b, 0x63, 0x8d, 0xed, 0x33, 0x20, 0xed, 0xc1, 0x75, 0xdf, 0xc6, 0x28, 0xb3, 0x84, 0xc8, 0xc3, 0xbf, 0xa9, 0x12, 0x59, 0x9d, 0xd4, 0xef, 0x52, 0x05, 0x4e, 0x29, 0x8d, 0x7c, 0x81, 0x67, 0xec, 0xb9, 0xbb, 0x65, 0x63, 0xaf, 0xb2, 0x6b, 0x63, 0xda, 0xcc, 0x1a, 0xe7, 0xfb, 0x12, 0x31, 0xe4, 0x9f, 0x30, 0x06, 0xf1, 0xea, 0x5c, 0x36, 0x46, 0x48, 0x46, 0xb9, 0x66, 0xa9, 0x2d, 0xaa, 0xeb, 0xe4, 0x5f, 0x9e, 0x4a, 0x66, 0x70, 0xd9, 0x20, 0x95, 0x60, 0x3f, 0xb4, 0xdb, 0x22, 0xfc, 0xc4, 0x4a, 0x2d, 0xc8, 0x9e, 0x61, 0x88, 0x3e, 0x10, 0xc6, 0xdf, 0x32, 0x9b, 0x8a, 0x4f, 0x1c, 0xd4, 0xe2, 0x22, 0x3c, 0x65, 0xc3, 0xb1, 0x78, 0x8a, 0x66, 0x3c, 0x8e, 0xdb, 0x13, 0xeb, 0x66, 0xfd, 0xae, 0x43, 0x8e, 0xc2, 0xcd, 0xfd, 0xd1, 0xb5, 0x0b, 0x0f, 0x0c, 0xbc, 0xff, 0x60, 0x7f, 0x84, 0x64, 0x2b, 0x31, 0x37, 0x48, 0xcb, 0x5d, 0xef, 0x19, 0xd9, 0x82, 0xf1, 0x76, 0x51, 0x4a, 0xf1, 0x31, 0x8c, 0xfd, 0x1c, 0x95, 0x83, 0xde, 0xd8, 0xa4, 0x62, 0x58, 0x7b, 0x7c, 0xac, 0x77, 0xe1, 0xd8, 0x86, 0xf7, 0x07, 0x37, 0x11, 0xf6, 0x47, 0x1f, 0x5b, 0x0f, 0x99, 0x6f, 0x8f, 0x42, 0x9f, 0x16, 0xdd, 0xdd, 0x09, 0xf7, 0xa5, 0xc3, 0x7f, 0xff, 0x4b, 0x4d, 0xf6, 0xc4, 0x29, 0x4d, 0x6c, 0xbb, 0x02, 0x91, 0xa2, 0xa2, 0xee, 0xae, 0x4b, 0x15, 0x73, 0x5d, 0x2d, 0xb7, 0x77, 0x80, 0x82, 0xb1, 0xcd, 0x77, 0xd1, 0xbf, 0x52, 0x8d, 0x92, 0x1a, 0xa7, 0xf1, 0xea, 0x6d, 0x51, 0x50, 0x30, 0x9d, 0xfb, 0xee, 0x14, 0x98, 0x3e, 0xfe, 0xfc, 0xf6, 0xb8, 0xac, 0x50, 0x7b, 0xac, 0x93, 0x34, 0x98, 0xf4, 0x4c, 0x0b, 0xb7, 0x50, 0xf8, 0x7a, 0x0a, 0xef, 0x11, 0xa8, 0x2c, 0x59, 0x3f, 0x60, 0x6e, 0x43, 0x8f, 0x18, 0x65, 0xce, 0x8e, 0x2a, 0x94, 0x39, 0xa7, 0x76, 0xaf, 0xe4, 0xa5, 0x38, 0x13, 0x0d, 0x89, 0x53, 0x4e, 0x20, 0x77, 0x10, 0x20, 0x39, 0x13, 0x65, 0x4c, 0xe2, 0x10, 0x4b, 0x83, 0x95, 0xb0, 0x32, 0x24, 0x1f, 0x5f, 0x8d, 0xb2, 0x55, 0x8c, 0xf8, 0xf2, 0x96, 0x3a, 0xa5, 0x19, 0x25, 0xcd, 0xcb, 0x28, 0xfd, 0xb4, 0xfc, 0xfc, 0x67, 0x6f, 0xac, 0x86, 0x14, 0xca, 0x62, 0x75, 0x1a, 0x4b, 0xf3, 0xc5, 0x24, 0x65, 0x0e, 0x1c, 0xcb, 0x64, 0xe7, 0xf5, 0xb6, 0xba, 0x90, 0x17, 0x57, 0xed, 0xd8, 0xf1, 0x68, 0x99, 0x1b, 0xe6, 0xc6, 0xef, 0x6f, 0xad, 0x8f, 0xd6, 0xb1, 0xd4, 0xe9, 0xf6, 0xcd, 0x60, 0x3a, 0x80, 0x5c, 0xde, 0xd9, 0x26, 0xdf, 0x8c, 0x7c, 0xb9, 0x99, 0x6b, 0x82, 0xe1, 0xef, 0x5f, 0x46, 0xaa, 0xb6, 0x27, 0xcb, 0x31, 0xb0, 0xac, 0x47, 0xbb, 0x23, 0x62, 0xb5, 0xf7, 0xfa, 0x1a, 0x20, 0xc0, 0x2b, 0x3e, 0xe9, 0xad, 0xf2, 0x6e, 0x95, 0xd2, 0x9a, 0xb7, 0xde, 0xd7, 0xe6, 0xad, 0xf7, 0xd1, 0x60, 0x94, 0x34, 0x27, 0x02, 0x75, 0x74, 0xf6, 0x14, 0x8e, 0xb5, 0x3c, 0xfc, 0x0f, 0x47, 0x7c, 0x49, 0x48, 0x06, 0xeb, 0x5b, 0x1e, 0x7a, 0xec, 0x15, 0x7c, 0xd2, 0x82, 0x6b, 0xfb, 0xd2, 0xbc, 0xb5, 0xbd, 0x7d, 0xda, 0xda, 0xde, 0x6e, 0xac, 0xed, 0xed, 0xd3, 0xd6, 0xf6, 0xd2, 0x1b, 0xe1, 0x23, 0x04, 0x55, 0xc2, 0x61, 0xa1, 0x92, 0x76, 0xc9, 0x2d, 0x75, 0x7e, 0x6b, 0xaa, 0xcd, 0x37, 0x03, 0xa9, 0x30, 0xd5, 0xa5, 0x23, 0x9f, 0x0e, 0xe7, 0xe4, 0x6b, 0x41, 0x89, 0x67, 0x4c, 0xa3, 0xc4, 0x14, 0xdb, 0x75, 0xe3, 0x16, 0x39, 0xf3, 0x2e, 0x73, 0x7f, 0xb3, 0x05, 0x0e, 0xc3, 0x87, 0x7b, 0xf2, 0xd2, 0x02, 0x18, 0xc6, 0xfc, 0x00, 0xb6, 0x84, 0xeb, 0x83, 0xb1, 0x50, 0x5d, 0xfc, 0x00, 0xb7, 0xd7, 0x5c, 0x94, 0x7b, 0xb3, 0x14, 0x99, 0xfc, 0x06, 0xd8, 0x0c, 0xbe, 0xda, 0x2c, 0xa4, 0x32, 0xdf, 0x8c, 0x6c, 0xa9, 0x72, 0x88, 0x3f, 0x66, 0xb2, 0x39, 0xe9, 0x58, 0x47, 0x56, 0x20, 0x42, 0x27, 0x5f, 0xbc, 0xd3, 0x38, 0x71, 0xa6, 0x93, 0x7d, 0x7c, 0x28, 0x55, 0x0f, 0x4c, 0x7b, 0x87, 0x4e, 0x31, 0xcc, 0xb9, 0xd8, 0x94, 0x83, 0x15, 0x73, 0xa0, 0x98, 0xae, 0x3c, 0xff, 0x64, 0xb4, 0x9f, 0x62, 0xec, 0x2c, 0x93, 0xb5, 0xa1, 0xd8, 0x15, 0xbe, 0x32, 0x20, 0x10, 0xae, 0xc5, 0xf8, 0x64, 0x14, 0x8e, 0x76, 0x1c, 0xa3, 0xcb, 0xc9, 0x5f, 0x1d, 0xed, 0x89, 0x20, 0xe5, 0x0d, 0x18, 0xbd, 0xed, 0xba, 0x39, 0x83, 0x3d, 0xed, 0x46, 0xde, 0xce, 0x83, 0x3d, 0x5d, 0x85, 0xdf, 0x00, 0xe1, 0x38, 0xb6, 0x3e, 0x88, 0x3d, 0x5a, 0xed, 0x5f, 0x8d, 0xfc, 0xe0, 0x20, 0x9d, 0xa4, 0xd0, 0x7e, 0x25, 0x7e, 0xe9, 0xcc, 0xaa, 0x81, 0xce, 0x45, 0xa2, 0xdd, 0x90, 0xfc, 0xe7, 0xb3, 0xdc, 0xaf, 0x19, 0xec, 0xd7, 0x66, 0xad, 0x18, 0xef, 0x1c, 0x7c, 0xa7, 0xe2, 0x9d, 0x19, 0xff, 0xe3, 0xd0, 0xac, 0x64, 0xf2, 0xfa, 0xb5, 0x2c, 0xaf, 0x5f, 0x5d, 0x79, 0x3b, 0x8e, 0x20, 0x2d, 0x73, 0xe2, 0x6a, 0x1f, 0x99, 0xd0, 0x83, 0xc4, 0xf5, 0xe2, 0xaa, 0x0c, 0x92, 0x87, 0xd0, 0x29, 0x1c, 0x1e, 0x70, 0x96, 0xc2, 0x07, 0xb6, 0xe3, 0x70, 0xca, 0x14, 0x27, 0x0c, 0xd9, 0x5b, 0x1c, 0xd2, 0x07, 0x96, 0x71, 0xe9, 0x14, 0x94, 0x41, 0xfc, 0xfe, 0x3c, 0x14, 0xa6, 0x62, 0x81, 0xc2, 0x44, 0x7d, 0x16, 0xac, 0xe7, 0xb3, 0x66, 0x2e, 0xf7, 0x23, 0x47, 0xb0, 0x7f, 0xa9, 0x2e, 0x83, 0x8f, 0x1c, 0x24, 0xf9, 0x95, 0xe4, 0x83, 0x25, 0x13, 0xa7, 0xaf, 0x30, 0x55, 0x2c, 0xcd, 0xe6, 0x05, 0xc3, 0xbe, 0x02, 0x2c, 0xe7, 0x54, 0xbb, 0x0b, 0xd4, 0xa7, 0xd1, 0xd3, 0x13, 0x84, 0x38, 0xae, 0xeb, 0x94, 0x02, 0x9d, 0x2c, 0x33, 0x4e, 0xb6, 0xcc, 0xef, 0xe2, 0xaa, 0x3d, 0x95, 0x03, 0xad, 0x88, 0x38, 0xba, 0xac, 0xe2, 0x29, 0xc5, 0xf6, 0x15, 0x10, 0x02, 0x66, 0x7c, 0x95, 0xae, 0x8b, 0x27, 0x9c, 0xbb, 0x78, 0x66, 0x15, 0x3a, 0x72, 0x14, 0x2e, 0x5a, 0xf9, 0xd1, 0x83, 0xbe, 0x99, 0x94, 0x4a, 0x2e, 0xed, 0x52, 0x2d, 0x81, 0x23, 0x2b, 0xc3, 0x1c, 0x52, 0x25, 0x49, 0x5e, 0x2c, 0x6b, 0x91, 0xc5, 0x14, 0x5f, 0x19, 0xa5, 0x18, 0xbd, 0xf0, 0x14, 0x8f, 0xb3, 0xb9, 0x79, 0xad, 0x60, 0x9f, 0x6a, 0x85, 0x7b, 0x25, 0xa6, 0x52, 0x17, 0x89, 0x4a, 0x65, 0xc7, 0xc9, 0x23, 0x87, 0xa7, 0x4e, 0x03, 0xae, 0x3e, 0x43, 0xa3, 0x23, 0x79, 0xb7, 0x1e, 0xce, 0x7a, 0x59, 0x76, 0x77, 0x81, 0xcd, 0x9b, 0x81, 0x36, 0xa4, 0x48, 0x4b, 0xab, 0x2b, 0xc5, 0x8c, 0xa4, 0xb6, 0xb8, 0x43, 0x05, 0x0d, 0xe7, 0xbb, 0xe3, 0x0e, 0xe4, 0xdc, 0x69, 0xed, 0x25, 0xc9, 0x92, 0xd6, 0x63, 0xf2, 0x81, 0x61, 0xd9, 0xc5, 0x96, 0x9b, 0x6e, 0x41, 0xdd, 0x2c, 0x3f, 0x70, 0x57, 0x42, 0xf1, 0x9e, 0x41, 0x3a, 0x8b, 0x0d, 0x54, 0x82, 0xfb, 0xe8, 0x6a, 0xd0, 0x86, 0x51, 0xbe, 0x19, 0x26, 0x3f, 0xe5, 0x95, 0xe0, 0x19, 0x5f, 0x0d, 0x2b, 0x86, 0x50, 0xee, 0x1f, 0xea, 0x00, 0x92, 0x8c, 0x78, 0x07, 0x38, 0x1a, 0xad, 0x96, 0xe2, 0x2f, 0x07, 0x54, 0xcd, 0x4b, 0xbb, 0x0f, 0xbb, 0xe2, 0x5d, 0x0a, 0xa1, 0x76, 0x45, 0x2e, 0xf5, 0xc3, 0x8b, 0x2f, 0x77, 0x17, 0xd3, 0xce, 0xc4, 0x48, 0xbc, 0xcb, 0x86, 0x61, 0x56, 0x0e, 0x7b, 0x65, 0x8d, 0xcd, 0xd5, 0xd2, 0xc2, 0x08, 0x3c, 0xa9, 0xd7, 0xd6, 0xea, 0x98, 0xea, 0xb2, 0x91, 0x28, 0xe6, 0x7c, 0x2f, 0xaf, 0x41, 0x84, 0xde, 0xc9, 0xc8, 0xe5, 0xc8, 0xfd, 0xb9, 0xb0, 0x85, 0x96, 0x11, 0xb5, 0xbe, 0x23, 0x0a, 0xcb, 0x6e, 0x4d, 0x80, 0x0b, 0x63, 0xb5, 0xe5, 0x9e, 0x5b, 0xf1, 0x69, 0x58, 0x03, 0x4b, 0x2d, 0xd3, 0x22, 0x28, 0xd8, 0x85, 0x7c, 0x29, 0x21, 0xdc, 0x95, 0x70, 0x99, 0xb1, 0xbc, 0x58, 0xee, 0x95, 0x54, 0x76, 0x6c, 0xd5, 0xd2, 0x5c, 0xb9, 0x91, 0x1a, 0x53, 0xd9, 0x5d, 0xab, 0xa0, 0x28, 0x1a, 0xad, 0x91, 0xe2, 0x3f, 0xbb, 0x61, 0xb9, 0x7f, 0x76, 0xc3, 0x72, 0x17, 0x4f, 0x95, 0x3b, 0xb1, 0x29, 0x6d, 0x0a, 0x16, 0x68, 0x32, 0x97, 0xbf, 0x9d, 0xca, 0x3f, 0x63, 0x94, 0xcb, 0x5f, 0x6e, 0x94, 0x4f, 0xc2, 0xf2, 0x2b, 0xc8, 0x69, 0x3f, 0xc1, 0x3a, 0x94, 0xa3, 0xef, 0x91, 0xa7, 0x86, 0x52, 0xac, 0x47, 0x3b, 0xd6, 0x43, 0xc1, 0xd8, 0x5b, 0x72, 0xf1, 0xb0, 0x1e, 0x1f, 0xad, 0x35, 0x30, 0x35, 0x91, 0xbf, 0x9e, 0xd1, 0x4b, 0xed, 0x8a, 0x6b, 0x4c, 0x39, 0xce, 0x6f, 0x53, 0xce, 0xcb, 0xf9, 0xe6, 0x9c, 0xf7, 0x54, 0x80, 0x95, 0xfa, 0x66, 0xfe, 0xff, 0xb6, 0xfe, 0x30, 0xff, 0xa7, 0xf4, 0xed, 0xfc, 0x9f, 0xd6, 0x9f, 0xe2, 0xff, 0x21, 0xfd, 0x59, 0xf6, 0x9b, 0xba, 0x83, 0xef, 0x06, 0xf5, 0x17, 0xf0, 0x7a, 0x17, 0x5f, 0xf7, 0xe8, 0x2f, 0x55, 0x46, 0xf5, 0x51, 0xbe, 0xfe, 0xae, 0xf0, 0x70, 0xaa, 0x54, 0x82, 0x4d, 0x78, 0x11, 0x37, 0x5f, 0x46, 0x5a, 0x58, 0x85, 0x5f, 0x2f, 0x7e, 0x3d, 0xf8, 0x75, 0x93, 0xd6, 0x00, 0x59, 0xdd, 0xde, 0xb6, 0x85, 0xfd, 0xa2, 0xfe, 0x41, 0x7f, 0xed, 0x2b, 0xb8, 0xa2, 0xe8, 0x47, 0xa3, 0x3f, 0xd4, 0x8f, 0xe1, 0xf7, 0x38, 0x7e, 0x4f, 0xe2, 0xf7, 0xed, 0xbc, 0x7d, 0xea, 0xd2, 0x6b, 0xf6, 0xa9, 0xcf, 0xe9, 0xb9, 0x53, 0xc1, 0x8a, 0x05, 0xfa, 0xb1, 0x3b, 0xea, 0x20, 0x53, 0xb5, 0x40, 0x3f, 0x79, 0xc7, 0x22, 0xe8, 0x71, 0x2d, 0xd0, 0x8f, 0x63, 0x8b, 0xac, 0x71, 0x2e, 0xd0, 0xdf, 0xc6, 0x91, 0xd9, 0x8b, 0xfd, 0xe7, 0xf0, 0xd0, 0xd9, 0x20, 0xf6, 0x23, 0xca, 0xd2, 0xee, 0xf8, 0x41, 0x57, 0xbd, 0x9f, 0x70, 0x7b, 0xc7, 0xc8, 0xe7, 0x62, 0xfd, 0x05, 0x0b, 0xfc, 0xfa, 0x20, 0x21, 0xc9, 0x56, 0x26, 0xf4, 0x87, 0x68, 0x2c, 0xc6, 0xc7, 0xbc, 0xf5, 0x35, 0x55, 0x60, 0xc6, 0x3e, 0x5c, 0x05, 0xe6, 0xba, 0x8f, 0xda, 0xe1, 0x57, 0x63, 0xc3, 0xa7, 0xa1, 0xb4, 0x72, 0xb1, 0x3e, 0x8c, 0xb3, 0xd4, 0xdb, 0x82, 0x14, 0x23, 0xfe, 0x72, 0xe4, 0x7c, 0x08, 0xe2, 0x3f, 0x8f, 0x9c, 0x5f, 0x0f, 0x15, 0x96, 0xca, 0xb8, 0xfe, 0x84, 0x9f, 0xea, 0x78, 0x20, 0x72, 0xde, 0x2d, 0xc5, 0xf7, 0x47, 0xce, 0x97, 0xc2, 0x23, 0x63, 0x18, 0xfa, 0x0c, 0xe1, 0x9f, 0x79, 0xd5, 0x40, 0x15, 0xd8, 0xe2, 0xfb, 0xeb, 0x2f, 0x84, 0x60, 0xd7, 0x43, 0x2b, 0xcd, 0xc3, 0x1b, 0x2b, 0x23, 0xfa, 0x43, 0x5e, 0x35, 0xb8, 0x06, 0xec, 0x75, 0xe7, 0x1f, 0x87, 0x9f, 0xbc, 0xb2, 0xd2, 0xfc, 0xd8, 0x61, 0xcc, 0x7d, 0x38, 0xf1, 0x43, 0xfd, 0xa1, 0x8c, 0x09, 0x6b, 0xfe, 0x10, 0x5e, 0x0d, 0x67, 0x1c, 0x78, 0x35, 0xac, 0x59, 0x95, 0x06, 0xb9, 0xe3, 0x2d, 0x1d, 0x67, 0xa0, 0x23, 0xb1, 0x39, 0x75, 0x81, 0xb0, 0x85, 0x19, 0x27, 0xc3, 0xe4, 0x73, 0xcb, 0x3d, 0xb4, 0x8b, 0xa7, 0xa0, 0xa4, 0xf3, 0x8e, 0x6c, 0xf8, 0x4a, 0x77, 0xa4, 0xcb, 0x6e, 0x55, 0x21, 0x3c, 0xdd, 0xa7, 0x27, 0x86, 0xc4, 0xd2, 0x50, 0xd8, 0xc3, 0xad, 0xfd, 0x49, 0xb6, 0xb5, 0x29, 0x8d, 0xba, 0xd3, 0xd0, 0x86, 0xf5, 0x22, 0x2f, 0xe0, 0x0f, 0xe9, 0x27, 0xf1, 0x77, 0x58, 0x7f, 0x1b, 0x7f, 0x9f, 0xd0, 0xdf, 0xc1, 0xdf, 0x67, 0xf4, 0xd3, 0x95, 0xb8, 0x2e, 0xeb, 0x67, 0x2b, 0x3b, 0xe4, 0x95, 0xfa, 0x79, 0xac, 0xcf, 0xf1, 0x1b, 0x9c, 0x68, 0xe4, 0xf5, 0x04, 0x97, 0x6d, 0x73, 0x72, 0xf4, 0xd3, 0x11, 0xcc, 0x91, 0x67, 0x1c, 0x9d, 0x49, 0xfc, 0xc7, 0x19, 0xa4, 0x13, 0xf7, 0xd0, 0xde, 0x20, 0x9d, 0x55, 0x90, 0xc4, 0x97, 0x06, 0xd3, 0x3b, 0xd9, 0xa7, 0x9f, 0xdc, 0xeb, 0x93, 0x69, 0x65, 0xf3, 0xb9, 0xc9, 0x1f, 0x0f, 0xbe, 0x85, 0x5c, 0x50, 0x72, 0xf4, 0xdf, 0x9b, 0xb2, 0x54, 0x80, 0xfa, 0x7e, 0xc9, 0xc4, 0x7b, 0x6f, 0x22, 0x35, 0xc3, 0x37, 0x16, 0x62, 0xff, 0xa0, 0x2c, 0x84, 0xbd, 0x78, 0xf7, 0x56, 0x63, 0xb6, 0x6e, 0x77, 0xb5, 0x64, 0xc7, 0x47, 0xea, 0xa4, 0x06, 0xa6, 0x87, 0x70, 0xde, 0xda, 0x52, 0x60, 0x0a, 0x20, 0x9d, 0xe1, 0xf9, 0x8a, 0x14, 0x6b, 0xc5, 0x76, 0x9c, 0x9b, 0x09, 0x2f, 0xae, 0xcc, 0x4b, 0x69, 0xf6, 0x62, 0x2f, 0xa7, 0x12, 0x91, 0x2e, 0x80, 0xcd, 0xbb, 0x90, 0xbb, 0xca, 0xdc, 0xb7, 0x5d, 0x5d, 0x7d, 0x6f, 0x70, 0x35, 0xb4, 0xf8, 0xac, 0xe1, 0x3a, 0x81, 0x1e, 0xfe, 0xad, 0xa1, 0xe6, 0xad, 0x01, 0xe8, 0x5a, 0x39, 0xb2, 0x1a, 0xda, 0x32, 0xf7, 0xb8, 0x90, 0x1b, 0x7b, 0xe4, 0xb0, 0x26, 0xbb, 0x5a, 0x46, 0xe2, 0x69, 0x6b, 0xcb, 0x20, 0xe7, 0x75, 0x41, 0x6b, 0xe2, 0x96, 0x68, 0x08, 0x4a, 0xec, 0xaf, 0xab, 0x34, 0xaa, 0x06, 0x22, 0x9a, 0xc7, 0x98, 0xf3, 0x73, 0x73, 0x73, 0xfe, 0x95, 0xee, 0xa2, 0x44, 0x5d, 0x97, 0x9d, 0x5a, 0xbb, 0x94, 0x78, 0xb1, 0x4d, 0x7b, 0xea, 0x32, 0x0e, 0x9c, 0xf1, 0x2a, 0xa7, 0x32, 0xae, 0x99, 0x1f, 0x3b, 0xa2, 0xc9, 0x41, 0x3a, 0xbd, 0x5e, 0x4a, 0xf3, 0xbd, 0xa0, 0x93, 0xe7, 0xbb, 0xc2, 0xed, 0x53, 0x49, 0xf8, 0x20, 0x1f, 0xef, 0x11, 0x73, 0xfd, 0x3f, 0x9a, 0xc4, 0xff, 0xbb, 0x84, 0x7e, 0x57, 0x8e, 0x23, 0x7c, 0x29, 0xce, 0x79, 0x9c, 0xd9, 0x05, 0x21, 0x9f, 0x40, 0xf8, 0x1d, 0xfd, 0xf8, 0x61, 0x1e, 0xe3, 0x6e, 0x28, 0x43, 0x5e, 0xb6, 0x24, 0x88, 0x73, 0xbd, 0xc6, 0x8d, 0xe3, 0x56, 0xcc, 0xb1, 0xcd, 0xdc, 0xeb, 0x0f, 0xe1, 0x98, 0xda, 0x82, 0xdf, 0x21, 0xfc, 0x6e, 0xc3, 0xef, 0xe3, 0xf8, 0x7d, 0x12, 0xbf, 0x4f, 0xe3, 0xf7, 0x07, 0xf8, 0x7d, 0x2e, 0x6f, 0xce, 0xd9, 0xae, 0xeb, 0xe9, 0xcd, 0xb9, 0xb3, 0xa1, 0x2e, 0x7d, 0xcb, 0x1d, 0x8b, 0x21, 0xa3, 0x74, 0xe9, 0xdb, 0xee, 0x88, 0x43, 0x0f, 0xce, 0xb5, 0x21, 0x9c, 0x6b, 0x6b, 0x70, 0x14, 0x3e, 0x8e, 0xbd, 0xdd, 0xdb, 0x12, 0x7b, 0xbc, 0xee, 0xf8, 0xe2, 0xe3, 0xf1, 0x96, 0xe8, 0xb6, 0xfa, 0x63, 0x91, 0x63, 0xaa, 0xc7, 0x2b, 0x1f, 0xab, 0x28, 0x24, 0x84, 0xd0, 0x7e, 0x71, 0x2e, 0x6f, 0xc3, 0xf5, 0xc3, 0x34, 0xde, 0x01, 0x16, 0xb3, 0xaa, 0x9f, 0xc7, 0x35, 0xc4, 0xcc, 0x7c, 0x6c, 0x39, 0xce, 0x55, 0x93, 0x63, 0x3e, 0xf2, 0xb2, 0xfd, 0x84, 0x60, 0x87, 0xdf, 0x92, 0x22, 0xf2, 0x00, 0xb5, 0xc1, 0x52, 0x88, 0xb4, 0xd8, 0x74, 0xb4, 0x03, 0x4a, 0x5b, 0x22, 0x61, 0x29, 0x7e, 0x08, 0x79, 0x2d, 0x39, 0x7e, 0x90, 0xca, 0x6a, 0x50, 0xae, 0xda, 0x80, 0x8a, 0xe3, 0x38, 0x6a, 0xd0, 0xaf, 0x86, 0xca, 0x06, 0x3d, 0x61, 0xd0, 0xb0, 0x24, 0xce, 0xac, 0x16, 0x83, 0x8e, 0x2d, 0xad, 0x8c, 0xe9, 0xcb, 0x0c, 0x5a, 0x76, 0x4f, 0xaf, 0x84, 0xf3, 0x70, 0x85, 0x41, 0xcb, 0x52, 0x78, 0xdd, 0x69, 0xd0, 0xb2, 0x35, 0x38, 0xd2, 0x7b, 0x0d, 0x5a, 0xb6, 0x0e, 0xc3, 0xef, 0xc5, 0x76, 0xb9, 0x0f, 0xbf, 0x03, 0x28, 0x55, 0xc6, 0x70, 0x54, 0x2d, 0x7d, 0xf9, 0x7d, 0x68, 0x11, 0x28, 0xab, 0x81, 0xba, 0x5f, 0xed, 0x0f, 0xc8, 0xeb, 0x6e, 0x7a, 0x77, 0xd5, 0xd1, 0xe8, 0xa9, 0xc8, 0xf0, 0xfe, 0x93, 0x0f, 0x52, 0xce, 0x4b, 0x2e, 0x00, 0xfb, 0x2b, 0x8b, 0x8f, 0x8d, 0x3c, 0x9c, 0x29, 0xf2, 0x62, 0x6d, 0xc3, 0x6b, 0xc0, 0xb4, 0xe4, 0x03, 0x70, 0xfc, 0xc3, 0x91, 0xca, 0xa4, 0x1e, 0x25, 0x24, 0x3a, 0x94, 0x5d, 0x13, 0xbf, 0x3d, 0xa7, 0x47, 0x77, 0x3d, 0x8c, 0x14, 0xe1, 0x21, 0xcc, 0x25, 0x4a, 0x7e, 0xbf, 0xbc, 0x5d, 0x7a, 0xe2, 0xb7, 0x07, 0x5f, 0x7c, 0x6d, 0xa5, 0xf9, 0x91, 0x83, 0x58, 0x8a, 0x04, 0xd2, 0x81, 0x28, 0x53, 0x84, 0x28, 0x5e, 0x25, 0xf8, 0x2a, 0x91, 0x3d, 0x89, 0x34, 0x4e, 0xaa, 0x6a, 0x04, 0x75, 0xc8, 0x9d, 0x45, 0xde, 0x90, 0x3e, 0xbc, 0x75, 0xea, 0x8f, 0xd0, 0x07, 0xc2, 0x88, 0x3b, 0x7f, 0x3d, 0x7d, 0x58, 0x42, 0xf4, 0x21, 0xc9, 0xf4, 0x21, 0xca, 0xf4, 0x21, 0x81, 0xf4, 0x21, 0xa1, 0xbf, 0x13, 0x88, 0x62, 0x6b, 0x13, 0x75, 0x50, 0xff, 0x44, 0xea, 0x50, 0x9b, 0x1c, 0xfd, 0xc3, 0x30, 0xe6, 0xe7, 0xc8, 0xce, 0xff, 0x7f, 0x7b, 0x15, 0xc7, 0xcb, 0x72, 0x83, 0x3a, 0x38, 0x98, 0x3a, 0x2c, 0xcf, 0x3e, 0xfb, 0xf8, 0x9e, 0x69, 0xb4, 0xc1, 0x21, 0x68, 0xc3, 0x5b, 0x7e, 0x6a, 0x01, 0x97, 0x38, 0x8b, 0x45, 0xda, 0xf0, 0x1f, 0x07, 0x34, 0x57, 0xf6, 0x5c, 0x81, 0x69, 0x44, 0x6e, 0xbf, 0xc4, 0x58, 0x07, 0xf3, 0x29, 0xc4, 0x1b, 0xf4, 0x2e, 0x74, 0x48, 0x00, 0x36, 0xdb, 0x6a, 0x96, 0xfc, 0xdb, 0x13, 0xcf, 0x23, 0xa7, 0xda, 0xa2, 0xd9, 0x8d, 0x7b, 0x27, 0xdf, 0x5f, 0xb3, 0xde, 0x9e, 0xf1, 0x4c, 0x9d, 0xc3, 0x6a, 0x4e, 0x8e, 0xb9, 0x2c, 0x3d, 0x77, 0x3a, 0x4f, 0x71, 0xc6, 0x3c, 0x75, 0x22, 0x9a, 0xc3, 0xeb, 0x2e, 0x36, 0xf0, 0xba, 0xdb, 0x8d, 0xf3, 0xad, 0xe3, 0xee, 0x16, 0xe4, 0x7e, 0x97, 0x83, 0xbf, 0xe7, 0x2f, 0x1b, 0x60, 0x3a, 0x96, 0x32, 0xdb, 0xd6, 0xb7, 0x78, 0x54, 0x42, 0x77, 0x42, 0x0e, 0x6f, 0x01, 0xd8, 0x7b, 0xf4, 0x1c, 0x0a, 0xd3, 0x4b, 0x5f, 0x51, 0xe1, 0xa6, 0xe9, 0x88, 0x4f, 0xe0, 0x88, 0x9c, 0x83, 0xe2, 0x4a, 0x42, 0x62, 0xfb, 0x21, 0x94, 0xd6, 0x9d, 0xa3, 0x15, 0x0a, 0x8a, 0x17, 0x9d, 0x03, 0xe7, 0xbc, 0x25, 0x60, 0xb9, 0x9d, 0x4e, 0x47, 0x6d, 0x6b, 0x25, 0xcd, 0x1c, 0x8d, 0xfe, 0xfd, 0x2f, 0xff, 0xf6, 0x17, 0x84, 0x8c, 0x92, 0x87, 0xa3, 0xbd, 0x37, 0x11, 0x4d, 0xd9, 0x7a, 0x60, 0x0a, 0x57, 0x9b, 0xb4, 0xaa, 0xfa, 0xef, 0x21, 0xcb, 0x9c, 0xfb, 0x9c, 0x55, 0x37, 0x99, 0x1f, 0xc0, 0xf0, 0x1d, 0xae, 0xd9, 0x4a, 0x74, 0x0a, 0x07, 0x4a, 0x03, 0xf3, 0xa4, 0x7f, 0x01, 0x14, 0xb3, 0x1f, 0x6e, 0x1b, 0xfb, 0xe1, 0x06, 0xf3, 0xdb, 0x1a, 0x14, 0x6e, 0x57, 0xba, 0xa0, 0xa4, 0x62, 0x10, 0xc7, 0x64, 0xd5, 0xad, 0x71, 0xe1, 0xff, 0xe8, 0x6a, 0x92, 0x2c, 0xf8, 0x29, 0xfc, 0x56, 0xa4, 0xe1, 0xc8, 0xa1, 0x50, 0xcb, 0x2c, 0x15, 0x6d, 0x28, 0x5a, 0x49, 0x69, 0xc5, 0x27, 0xaf, 0x82, 0x1f, 0x7f, 0x0f, 0x43, 0x10, 0x7f, 0xc7, 0x21, 0x44, 0x23, 0xee, 0x0e, 0xec, 0x57, 0xd0, 0xf0, 0xd7, 0x01, 0x2b, 0x38, 0x66, 0x1f, 0xfb, 0x18, 0x1f, 0x40, 0xfe, 0x72, 0x4f, 0xaf, 0x09, 0x39, 0x54, 0x7f, 0x16, 0x2f, 0x81, 0x74, 0xfd, 0x70, 0xec, 0x6c, 0x8a, 0xad, 0x86, 0x4d, 0xdc, 0xa6, 0x24, 0x35, 0x9b, 0x02, 0x1d, 0x60, 0x73, 0x10, 0x9d, 0xed, 0x8f, 0x8f, 0xf9, 0x98, 0x36, 0x40, 0x90, 0xfd, 0x6e, 0x32, 0x65, 0x80, 0x30, 0x5e, 0xab, 0x7c, 0x9d, 0x82, 0x18, 0xca, 0x2b, 0x71, 0xbe, 0x4e, 0x43, 0x13, 0xeb, 0x4b, 0x34, 0xf3, 0xdd, 0x10, 0xb4, 0xad, 0x97, 0x7c, 0x28, 0x8f, 0xf2, 0xdd, 0x20, 0x2c, 0xc7, 0x6b, 0x8d, 0xaf, 0x7b, 0x60, 0x25, 0xca, 0x37, 0x1d, 0x7c, 0xfd, 0x5d, 0xc8, 0x60, 0x78, 0x0f, 0xa6, 0x47, 0x08, 0xe8, 0xeb, 0x09, 0x97, 0x0c, 0x47, 0x4e, 0x29, 0xae, 0x6d, 0xeb, 0x78, 0xa5, 0x01, 0x79, 0x5f, 0x4f, 0xdb, 0xf8, 0xf3, 0x38, 0x0f, 0x05, 0xd2, 0xe9, 0xbf, 0xc7, 0x03, 0x15, 0xd0, 0xbc, 0x15, 0x9f, 0x2f, 0x8d, 0xe2, 0xaa, 0xc2, 0x2b, 0x86, 0x49, 0xab, 0xf0, 0x76, 0x22, 0x6f, 0x9e, 0x3b, 0x83, 0x76, 0xd6, 0x29, 0x49, 0xf2, 0xce, 0x47, 0xe7, 0xa7, 0x23, 0xb1, 0x6e, 0x39, 0x04, 0x2d, 0x14, 0x57, 0xf8, 0x76, 0x3c, 0x46, 0xe8, 0x58, 0x44, 0x37, 0xcd, 0x2a, 0x58, 0xc7, 0x63, 0x58, 0xf7, 0x66, 0x67, 0x1d, 0x72, 0xa6, 0x35, 0x24, 0x43, 0xae, 0x87, 0x90, 0xe4, 0x57, 0x5f, 0x3c, 0x98, 0x31, 0x23, 0x1d, 0x6e, 0xd1, 0x4c, 0xf8, 0xb4, 0xa5, 0x8d, 0xd6, 0x34, 0x61, 0x93, 0xda, 0xc7, 0x32, 0x7b, 0x3f, 0xb5, 0x90, 0x38, 0xb3, 0x0d, 0xaa, 0x28, 0x81, 0x0f, 0x18, 0xf7, 0xb7, 0x90, 0xd6, 0x24, 0xca, 0xe6, 0x9b, 0xa7, 0x9e, 0xa3, 0x3c, 0x11, 0x87, 0x87, 0xa6, 0x9e, 0x07, 0x54, 0xb2, 0xbc, 0xc2, 0x9a, 0x0e, 0xe3, 0x77, 0x3b, 0x7e, 0x9f, 0xc0, 0xef, 0x53, 0xf8, 0x7d, 0x06, 0xbf, 0xcf, 0x7e, 0xa6, 0xb6, 0x43, 0x5f, 0x0e, 0x5d, 0xc7, 0x07, 0x03, 0x58, 0xa6, 0x95, 0x28, 0x67, 0x3c, 0x84, 0x2b, 0x47, 0x47, 0xb0, 0x1b, 0x06, 0xef, 0x48, 0x40, 0x4a, 0xe9, 0x86, 0x87, 0x71, 0x05, 0xe9, 0xc4, 0xb9, 0x31, 0x8c, 0xf7, 0x6b, 0xb1, 0xf6, 0x4f, 0xdc, 0x91, 0x84, 0xf5, 0x4e, 0x1f, 0x6c, 0xc7, 0x9a, 0xac, 0x73, 0xfb, 0xe0, 0xa9, 0x3b, 0x62, 0x70, 0xef, 0xb1, 0xd7, 0x8e, 0xbd, 0x0f, 0xcd, 0x18, 0xa3, 0xf9, 0x68, 0x0c, 0x39, 0xf1, 0x16, 0xaa, 0x65, 0x58, 0x0d, 0x2c, 0xae, 0xfb, 0xe8, 0x34, 0xd4, 0x7d, 0xf4, 0x34, 0xe9, 0xdf, 0xc5, 0xfd, 0x3e, 0x18, 0x0c, 0xab, 0xfe, 0x78, 0xe4, 0xfc, 0x69, 0x40, 0x1a, 0xdd, 0x76, 0x94, 0xac, 0x09, 0x9b, 0x31, 0xe7, 0x67, 0x46, 0x1e, 0xfc, 0x96, 0xed, 0xd8, 0xff, 0x9f, 0xba, 0x3f, 0x81, 0x8b, 0xb2, 0xea, 0x1e, 0xc0, 0xf1, 0x3b, 0xc3, 0x30, 0x0c, 0x30, 0xe0, 0x48, 0x88, 0xa4, 0x64, 0x8f, 0xe3, 0x34, 0x8e, 0xc3, 0xc0, 0x8c, 0x84, 0x48, 0x48, 0x3a, 0x0c, 0xdb, 0x38, 0x22, 0x22, 0xa0, 0x91, 0xaf, 0xd6, 0x23, 0xe9, 0x0c, 0xb2, 0x08, 0x11, 0x29, 0xf9, 0xf2, 0x1a, 0xae, 0x91, 0x2b, 0xae, 0x99, 0x99, 0xd9, 0xae, 0x66, 0x46, 0xa6, 0x66, 0x6a, 0x86, 0x66, 0xee, 0x19, 0xee, 0x4b, 0xa6, 0xa6, 0x64, 0x64, 0x9a, 0xa8, 0x64, 0x4a, 0xca, 0xf3, 0x3f, 0xe7, 0x3e, 0x77, 0x86, 0x01, 0x69, 0x79, 0x97, 0xef, 0xef, 0xf7, 0xfb, 0xc3, 0xe7, 0xcc, 0x7d, 0x96, 0xfb, 0xdc, 0xfd, 0x9e, 0x7b, 0xce, 0xbd, 0x67, 0xa9, 0x5e, 0xb8, 0x17, 0xbf, 0x47, 0x0b, 0xe1, 0xf0, 0xec, 0xbd, 0xaa, 0x49, 0xcf, 0xa0, 0xad, 0xa5, 0x34, 0x2c, 0x3b, 0xe4, 0x66, 0xe5, 0x24, 0x17, 0x2a, 0x60, 0xed, 0x0c, 0x58, 0x62, 0x36, 0xc9, 0x00, 0x17, 0xab, 0xa0, 0xfe, 0x66, 0x5c, 0x8f, 0xa2, 0x7b, 0x00, 0xe7, 0x68, 0x3e, 0xb6, 0x1d, 0xda, 0xcb, 0x10, 0x99, 0xb0, 0x01, 0x78, 0xb4, 0x51, 0x32, 0x93, 0xac, 0x32, 0x0e, 0xbe, 0x49, 0x03, 0x0a, 0xd1, 0xff, 0xd0, 0xf6, 0x4f, 0xf6, 0x8c, 0x92, 0x2f, 0xd8, 0x0e, 0x25, 0x30, 0x47, 0x90, 0xa4, 0xb8, 0xd2, 0x76, 0x75, 0x23, 0xab, 0xe3, 0x94, 0x1f, 0x11, 0xf2, 0x2f, 0x42, 0xcc, 0xcf, 0xc8, 0x70, 0xc4, 0xd1, 0xd6, 0x8c, 0xa6, 0xbe, 0x12, 0x71, 0x24, 0xe4, 0x02, 0x2e, 0x2c, 0x24, 0x67, 0x5a, 0x63, 0xe9, 0xd3, 0xb1, 0x50, 0xae, 0x3a, 0xc4, 0x55, 0x7f, 0x80, 0xa5, 0xad, 0x0e, 0x22, 0x0d, 0xa6, 0x3d, 0x7a, 0x87, 0xac, 0xa6, 0x3d, 0xba, 0x96, 0x8d, 0x31, 0x33, 0xa9, 0x32, 0x16, 0x92, 0x68, 0xb2, 0x09, 0x7e, 0xcd, 0x64, 0x2b, 0xfc, 0x5a, 0x49, 0x35, 0xfc, 0xa6, 0x91, 0x9d, 0x74, 0x17, 0x65, 0x0f, 0xcd, 0x0b, 0x30, 0x35, 0x39, 0x00, 0xf7, 0xe8, 0x5d, 0xd7, 0xbd, 0xc7, 0x9a, 0x65, 0xdd, 0x92, 0xdd, 0xb0, 0x75, 0x21, 0x9e, 0x73, 0x5e, 0xaf, 0x85, 0x7c, 0x95, 0xb8, 0x1f, 0x95, 0x36, 0x17, 0xe5, 0x5e, 0xdc, 0xd7, 0x1a, 0xf4, 0x79, 0xd3, 0xbc, 0x83, 0x25, 0x99, 0x08, 0x2b, 0x5d, 0xb0, 0x16, 0x70, 0xb4, 0x51, 0xe6, 0xc4, 0xda, 0x46, 0x8f, 0xd4, 0xcd, 0xa7, 0xca, 0x39, 0x03, 0x93, 0x9e, 0x30, 0xe7, 0xab, 0x18, 0x5d, 0x83, 0xfb, 0x28, 0x80, 0x51, 0x24, 0x66, 0x7a, 0xee, 0x49, 0xd0, 0xf2, 0x30, 0x7c, 0xe5, 0x92, 0xa0, 0x82, 0x39, 0xe3, 0x81, 0x32, 0x93, 0x7c, 0xa0, 0xdb, 0x53, 0xe4, 0x61, 0x3d, 0x50, 0xdf, 0x8e, 0xca, 0x8e, 0xe4, 0xa1, 0xff, 0x0e, 0x98, 0xed, 0xc8, 0x4b, 0x37, 0x41, 0x7f, 0x35, 0xf3, 0xe1, 0x1e, 0x89, 0x8d, 0xa7, 0x22, 0x53, 0xe7, 0x8b, 0xa5, 0x70, 0x7d, 0x1d, 0x84, 0x5f, 0x43, 0x69, 0xb0, 0x4f, 0x95, 0xa6, 0x31, 0xc8, 0xa1, 0x53, 0x6e, 0x7d, 0xaa, 0x51, 0x01, 0xbd, 0xa8, 0x40, 0x8e, 0x9c, 0x72, 0xda, 0x1e, 0xe2, 0xae, 0x34, 0x3b, 0xd5, 0xc7, 0x9d, 0x2f, 0xd9, 0x7d, 0xbb, 0x35, 0x90, 0xce, 0xc9, 0xdb, 0xf4, 0xb9, 0xd2, 0x84, 0x25, 0xc8, 0x11, 0x9a, 0x98, 0xaf, 0x2c, 0x0f, 0xa6, 0x3b, 0x39, 0xd5, 0xf2, 0x3e, 0x7b, 0xcb, 0xca, 0x45, 0xd7, 0x12, 0x8f, 0xfb, 0x4a, 0xa5, 0x60, 0xa9, 0xad, 0x66, 0xa5, 0x52, 0x38, 0x4b, 0x85, 0xb6, 0xa2, 0xb0, 0x66, 0x46, 0x71, 0x17, 0x49, 0xe1, 0x2c, 0x17, 0x2f, 0xb6, 0xa0, 0x7f, 0xea, 0xe6, 0xef, 0x4c, 0x86, 0xa1, 0x4e, 0x99, 0x05, 0xfb, 0x65, 0x7c, 0xaa, 0x49, 0x4c, 0x9d, 0x4f, 0xb1, 0x65, 0x39, 0xaf, 0xb1, 0xe5, 0xd1, 0x33, 0x1c, 0xb3, 0x32, 0x8c, 0x48, 0x49, 0x17, 0x3b, 0x91, 0x44, 0x01, 0xee, 0xe6, 0x00, 0x6b, 0x0b, 0x76, 0x2a, 0xbf, 0x65, 0x48, 0x44, 0x89, 0x6e, 0xe8, 0x81, 0x2e, 0x6a, 0xe8, 0x1d, 0xe9, 0x24, 0x3c, 0xf4, 0x81, 0xb7, 0x63, 0x1c, 0xe6, 0x6c, 0x1f, 0x08, 0x73, 0xe0, 0x0b, 0x19, 0xac, 0x89, 0x66, 0x52, 0xe7, 0xd0, 0xc2, 0xef, 0x4f, 0xc0, 0xb9, 0x37, 0xd8, 0x26, 0xc1, 0xef, 0x2f, 0x22, 0x15, 0x5a, 0x97, 0x99, 0x36, 0x57, 0x59, 0x40, 0x7e, 0xa2, 0x16, 0x09, 0x4e, 0xf3, 0x84, 0x34, 0xda, 0x26, 0xa1, 0xe7, 0x4b, 0x3e, 0x90, 0x86, 0x7b, 0x20, 0xff, 0xc9, 0x0e, 0x05, 0x60, 0x3a, 0x94, 0x52, 0xdd, 0xcc, 0xbe, 0xe1, 0xa8, 0x0f, 0x8a, 0x1a, 0xf4, 0x6e, 0x97, 0xba, 0xf9, 0x78, 0x03, 0xe2, 0xcc, 0xb4, 0xb9, 0x14, 0x5b, 0xa6, 0x31, 0x39, 0xa5, 0xd5, 0x74, 0xb4, 0x56, 0x89, 0x63, 0xfb, 0xaf, 0xc6, 0x28, 0xb4, 0x99, 0xf5, 0x0f, 0x24, 0x94, 0xac, 0x62, 0x8e, 0xa7, 0x83, 0x59, 0x78, 0x10, 0x4f, 0xa1, 0x70, 0x55, 0x66, 0xf1, 0xf3, 0xd8, 0x3a, 0x65, 0x85, 0xb8, 0x0a, 0xa3, 0xe8, 0xab, 0xb1, 0x0c, 0xfa, 0xe2, 0x01, 0xea, 0x35, 0xee, 0x38, 0x94, 0x9b, 0xda, 0x3d, 0x44, 0x59, 0x09, 0xfa, 0xe4, 0x28, 0x7a, 0xff, 0x61, 0x7e, 0xe8, 0xaa, 0xf5, 0xa2, 0xdd, 0x48, 0x72, 0xfb, 0x06, 0x4f, 0x6e, 0x9f, 0x45, 0x4e, 0xd7, 0x4e, 0x04, 0x03, 0x3f, 0x8b, 0xd9, 0x94, 0x45, 0x0b, 0x92, 0x78, 0x4e, 0xac, 0x6f, 0xe5, 0x97, 0x20, 0xdc, 0x52, 0x88, 0xb2, 0x0c, 0xc5, 0xcd, 0xab, 0xf0, 0x41, 0xa8, 0xb5, 0x8a, 0xc8, 0x61, 0x64, 0x97, 0x91, 0xef, 0x97, 0x1c, 0x27, 0x01, 0xf4, 0x5e, 0x0a, 0x63, 0xb5, 0x8c, 0x5c, 0x7c, 0x79, 0x35, 0xe9, 0x44, 0xef, 0x55, 0xa4, 0x0b, 0xb3, 0xd3, 0x7a, 0x03, 0xbd, 0x13, 0x00, 0x3e, 0xd1, 0xc2, 0xbd, 0xbf, 0xcb, 0x77, 0x45, 0xae, 0x86, 0x38, 0x74, 0x2d, 0x7c, 0x64, 0xa0, 0xb7, 0x68, 0x9f, 0x47, 0x0a, 0x49, 0x84, 0x34, 0xaa, 0x48, 0xc2, 0xfb, 0xab, 0x9b, 0x57, 0xf1, 0xf3, 0xe8, 0x89, 0x22, 0x81, 0x59, 0x90, 0xfd, 0x7f, 0xce, 0x5e, 0xcc, 0x5f, 0xcb, 0x8a, 0x32, 0x7b, 0x2f, 0x26, 0x03, 0xf3, 0x9e, 0xd0, 0xd7, 0x48, 0x2c, 0x31, 0x85, 0x24, 0x89, 0x43, 0x4f, 0xda, 0x68, 0xeb, 0x25, 0x39, 0x23, 0xe5, 0xe4, 0x35, 0x62, 0x8b, 0x1a, 0x48, 0x6d, 0xbd, 0xa4, 0x16, 0xdd, 0xaa, 0xf9, 0x88, 0x44, 0x16, 0xa3, 0x8d, 0x8b, 0xe0, 0x9a, 0xf2, 0xb8, 0x3b, 0xe4, 0xfb, 0x39, 0xd6, 0x68, 0x93, 0x82, 0xd0, 0xab, 0xb4, 0x18, 0xb8, 0xe2, 0x65, 0x68, 0x99, 0xc3, 0x96, 0x6c, 0x97, 0x96, 0x4a, 0x4c, 0x7e, 0x76, 0xe9, 0x04, 0x49, 0xb1, 0x64, 0xdd, 0x74, 0x87, 0xb2, 0x48, 0x5e, 0x75, 0xbf, 0xb5, 0x94, 0xa8, 0x96, 0x67, 0x72, 0x42, 0x52, 0xd4, 0x80, 0x98, 0x81, 0x91, 0xc9, 0x46, 0x0f, 0x5b, 0x02, 0x4a, 0x95, 0x5a, 0x9f, 0x43, 0x9f, 0x2f, 0xa8, 0xc9, 0x6d, 0x94, 0xa2, 0xb7, 0xb3, 0xf9, 0x65, 0xe8, 0x6b, 0x2c, 0x3a, 0x85, 0x9d, 0xd2, 0xf9, 0xd9, 0x12, 0x69, 0xac, 0x12, 0x88, 0x25, 0x6a, 0x6d, 0x4b, 0xf1, 0xfd, 0x5f, 0x58, 0x4b, 0x69, 0x95, 0x67, 0xd3, 0x61, 0x2a, 0xc5, 0xa0, 0xb4, 0x25, 0xe2, 0x59, 0xe2, 0xd2, 0x6a, 0xea, 0xc7, 0x1e, 0x9f, 0x2f, 0x64, 0xb2, 0x07, 0x09, 0xc6, 0x01, 0xc4, 0x9c, 0x31, 0xcb, 0x98, 0x02, 0xa3, 0x6b, 0x00, 0x89, 0xb6, 0x25, 0x60, 0xbc, 0x85, 0xd5, 0x78, 0x5e, 0x6e, 0xb4, 0xb8, 0x7c, 0x99, 0xd9, 0xff, 0xc8, 0xea, 0x8e, 0xf5, 0x47, 0x12, 0xab, 0x76, 0xca, 0x3b, 0x17, 0x02, 0xd5, 0xb8, 0x00, 0xa5, 0xe1, 0x51, 0xaa, 0x54, 0x53, 0xce, 0x8d, 0x21, 0x7d, 0xf9, 0x18, 0x05, 0x60, 0x37, 0xd2, 0xce, 0x61, 0xfa, 0xf8, 0x27, 0xb2, 0xd3, 0xa1, 0x8f, 0xce, 0xa1, 0x7e, 0x1d, 0xf1, 0xd4, 0x46, 0x15, 0x03, 0x78, 0xac, 0xff, 0xaf, 0x7b, 0xc8, 0x67, 0x47, 0x0a, 0x03, 0xb4, 0xb3, 0x78, 0xff, 0x98, 0x31, 0xf4, 0xbe, 0xe9, 0x33, 0xf4, 0x80, 0x3c, 0x8b, 0xad, 0x07, 0xd5, 0x29, 0xe7, 0x62, 0x89, 0x9b, 0x5f, 0x5e, 0x66, 0xdd, 0x09, 0xe6, 0x9a, 0xc6, 0x90, 0x43, 0xb2, 0xe8, 0x2c, 0x8e, 0xbc, 0xdf, 0x4a, 0x26, 0xb5, 0xac, 0xc8, 0x2c, 0x50, 0x24, 0xdf, 0x50, 0xa0, 0xbd, 0x26, 0x58, 0x0d, 0x8b, 0x09, 0xee, 0x0f, 0xc3, 0x78, 0x3b, 0xa3, 0x2d, 0x77, 0x7a, 0xe7, 0xa5, 0xf6, 0xed, 0x14, 0x1a, 0x26, 0xe3, 0x4c, 0xed, 0xcb, 0xf7, 0xa0, 0x16, 0x28, 0xa5, 0x9c, 0x87, 0x68, 0xc1, 0x9e, 0x63, 0xde, 0x04, 0xd0, 0x1a, 0x1c, 0xb7, 0x4e, 0x81, 0x7e, 0x9e, 0xe1, 0x8e, 0xfa, 0x14, 0xf8, 0x53, 0x6f, 0x02, 0xa2, 0xcf, 0x49, 0xb4, 0x4f, 0xa6, 0xce, 0xa1, 0x72, 0x33, 0x3d, 0x48, 0x60, 0x71, 0xc7, 0x75, 0x2b, 0x89, 0xff, 0x68, 0x42, 0x96, 0xa2, 0x9f, 0x8b, 0xc3, 0x93, 0x22, 0xfa, 0x04, 0xcb, 0x53, 0x7f, 0x57, 0x49, 0xc9, 0x50, 0xf6, 0x3f, 0x83, 0x82, 0xf8, 0xef, 0x7c, 0x66, 0x25, 0xb1, 0xc4, 0xe4, 0x76, 0x0f, 0xff, 0x6a, 0x72, 0xe1, 0x65, 0xb5, 0x39, 0x6b, 0x12, 0xe7, 0xcd, 0x2b, 0xd2, 0xcb, 0xd5, 0x66, 0x35, 0x39, 0x5c, 0xae, 0x91, 0xf0, 0xc1, 0x43, 0xcb, 0x35, 0xe4, 0x68, 0x79, 0x44, 0x19, 0xf1, 0x2f, 0xf6, 0xe7, 0x7d, 0xc4, 0xb0, 0xc8, 0xbf, 0xc4, 0x1f, 0x46, 0x7b, 0x80, 0x03, 0xed, 0x38, 0x06, 0x95, 0x4a, 0x36, 0x4d, 0xb1, 0xfb, 0x6b, 0x26, 0x43, 0x99, 0x3b, 0x71, 0xe5, 0xbc, 0x12, 0x9f, 0x69, 0x26, 0xd1, 0xbb, 0x97, 0x9d, 0xd6, 0x01, 0x65, 0xa2, 0x5d, 0x8a, 0x33, 0xa2, 0x5d, 0x0a, 0x32, 0x5c, 0x8d, 0xb6, 0x91, 0xc6, 0x88, 0x7e, 0x10, 0x34, 0xd0, 0xfb, 0x6a, 0x71, 0x57, 0x52, 0xa6, 0x03, 0xaa, 0xce, 0x08, 0x1c, 0x26, 0x8c, 0x15, 0xa4, 0xb0, 0xa3, 0xa1, 0x47, 0x82, 0xf4, 0x3a, 0xd2, 0x09, 0xed, 0x53, 0xf6, 0xbf, 0x5e, 0x27, 0xa0, 0x95, 0xec, 0x01, 0xd7, 0xb3, 0x04, 0x26, 0x15, 0x6d, 0xc5, 0xb5, 0xff, 0xee, 0x50, 0x26, 0xa5, 0x69, 0x28, 0xea, 0x50, 0xb5, 0x92, 0x74, 0x19, 0x4d, 0xfc, 0x0c, 0xd0, 0x76, 0x5d, 0x9a, 0xed, 0x2d, 0x78, 0x68, 0x24, 0x63, 0x3d, 0x87, 0x91, 0x4c, 0xbf, 0x90, 0xe6, 0x7f, 0xf9, 0x15, 0x45, 0x89, 0x8f, 0xcc, 0x77, 0xa1, 0xfb, 0x33, 0x62, 0x20, 0x06, 0xa3, 0x2f, 0x9e, 0xad, 0xa0, 0x54, 0x94, 0xa8, 0x01, 0x19, 0x85, 0xbf, 0xbe, 0xd4, 0xc3, 0x41, 0x29, 0xf1, 0xa0, 0xb6, 0xc2, 0x60, 0xfc, 0x4a, 0x02, 0xc5, 0x78, 0x11, 0xa9, 0xce, 0x18, 0xe8, 0x6b, 0x5e, 0xdc, 0xa1, 0x77, 0xc5, 0x3b, 0x8a, 0x67, 0x16, 0xe9, 0x33, 0xf5, 0x50, 0xdf, 0xf4, 0xd9, 0xa8, 0x93, 0xaf, 0x4b, 0x1c, 0x32, 0x2b, 0xfe, 0x66, 0x85, 0x10, 0xee, 0x3d, 0xf0, 0xd7, 0x3d, 0xc2, 0xa1, 0x3d, 0x54, 0xc7, 0xb0, 0x12, 0x35, 0xb6, 0xad, 0x45, 0x15, 0x54, 0x23, 0x30, 0x6d, 0xae, 0x81, 0xc4, 0x35, 0xec, 0x21, 0xe2, 0xb3, 0x3d, 0x44, 0x9d, 0x98, 0x3a, 0x4f, 0x4f, 0xa8, 0x86, 0xcb, 0x0c, 0x23, 0xd0, 0x5e, 0x77, 0x9b, 0xb5, 0x8e, 0xa5, 0xf1, 0x8d, 0xbf, 0xa3, 0xfe, 0x54, 0x2c, 0x6a, 0xa0, 0x50, 0x1b, 0x49, 0x78, 0xf2, 0x23, 0x8d, 0x6b, 0xfc, 0xdd, 0x07, 0x7d, 0x15, 0xa5, 0x56, 0x26, 0xdf, 0xcc, 0x21, 0xba, 0xe4, 0x57, 0x77, 0x0d, 0xf8, 0x35, 0x8b, 0xbc, 0xfe, 0x55, 0x6b, 0xab, 0x50, 0xd0, 0x92, 0xce, 0x2f, 0x95, 0xe2, 0x97, 0x88, 0xc3, 0x52, 0x2b, 0xd3, 0x67, 0xa6, 0xcf, 0xce, 0x98, 0x95, 0x81, 0x7e, 0x03, 0x34, 0xb6, 0xa9, 0x4c, 0xf6, 0xc8, 0xff, 0x7e, 0xab, 0x49, 0x8d, 0xfb, 0xdc, 0xbf, 0x65, 0x67, 0xf8, 0x1a, 0x9e, 0xf8, 0xae, 0x37, 0xfa, 0x46, 0x25, 0x42, 0x7b, 0xa4, 0x52, 0x8d, 0x98, 0xd6, 0x2d, 0x48, 0x7d, 0x44, 0x34, 0x6e, 0x6e, 0xdd, 0x32, 0x43, 0xa6, 0x61, 0xbb, 0x40, 0x6d, 0xb2, 0xe2, 0x7f, 0xcd, 0x12, 0x0c, 0xde, 0xb4, 0xb4, 0x50, 0x63, 0xa8, 0x49, 0x24, 0xb6, 0x64, 0x73, 0xad, 0x07, 0x36, 0x36, 0xa6, 0xa5, 0x2e, 0xa6, 0x7a, 0x5d, 0xe8, 0xed, 0x95, 0xe6, 0xde, 0xbf, 0xb1, 0x31, 0x28, 0x75, 0x61, 0xb8, 0xb3, 0x35, 0xe5, 0x68, 0x79, 0xcb, 0xa8, 0x10, 0xfd, 0x2c, 0x9a, 0xcc, 0xc9, 0xf5, 0x9b, 0x50, 0xec, 0x38, 0xab, 0xb2, 0x02, 0x56, 0xb7, 0x2c, 0x7c, 0x6f, 0xf4, 0xc4, 0x77, 0x26, 0xf3, 0x80, 0xfa, 0x93, 0x64, 0x59, 0x85, 0xde, 0x27, 0x6d, 0x9a, 0xa8, 0x43, 0xa4, 0x4e, 0x84, 0xf6, 0x69, 0x4f, 0xeb, 0xd7, 0x2a, 0x07, 0xd1, 0xf6, 0x05, 0xe0, 0xab, 0xa9, 0x0e, 0x1f, 0x68, 0x15, 0xc4, 0x91, 0x3e, 0x0c, 0x47, 0xb6, 0xd1, 0x36, 0x77, 0xd6, 0x0e, 0xa4, 0xb6, 0x08, 0x44, 0xfd, 0x72, 0x68, 0x69, 0x2b, 0xa5, 0xdb, 0xfc, 0x9d, 0x3e, 0x32, 0xee, 0xe4, 0xa8, 0xb1, 0xfe, 0x2f, 0x2f, 0xd8, 0xcf, 0x79, 0x8b, 0x32, 0x6f, 0x5c, 0x52, 0x7a, 0xc5, 0xbc, 0xaf, 0x0d, 0x28, 0x01, 0x37, 0xfd, 0xc2, 0xf4, 0x33, 0xb3, 0xd1, 0xa2, 0x29, 0xe6, 0x88, 0x2b, 0x47, 0x81, 0xac, 0x3f, 0xda, 0x37, 0xf7, 0xe0, 0xb0, 0x74, 0x2a, 0x96, 0x43, 0x0a, 0x2d, 0x9f, 0xab, 0xf5, 0xef, 0x04, 0x65, 0xce, 0x1c, 0x32, 0x2b, 0x63, 0xfa, 0x7d, 0xa5, 0x44, 0x4c, 0xee, 0xf3, 0x07, 0xa5, 0x54, 0xb0, 0x34, 0xfc, 0x01, 0x1f, 0xc7, 0x36, 0x8f, 0x67, 0x71, 0x24, 0x33, 0xfd, 0x5f, 0xe8, 0x35, 0xf1, 0xb4, 0xe6, 0x8e, 0x3c, 0x1c, 0xda, 0x30, 0xfd, 0x25, 0x58, 0xf9, 0x86, 0xa7, 0x4f, 0x1f, 0x32, 0x67, 0x08, 0x4a, 0x97, 0x65, 0x39, 0xfb, 0x09, 0xfa, 0xd4, 0xd4, 0xdc, 0x47, 0xa9, 0x9b, 0x6f, 0xaf, 0xa1, 0xde, 0xec, 0x04, 0x2a, 0x95, 0x21, 0x87, 0xb1, 0x89, 0xcf, 0x8a, 0x69, 0xdb, 0xbb, 0x76, 0x2e, 0x63, 0x88, 0xf5, 0x2b, 0x5d, 0xe2, 0xa9, 0xdd, 0xf4, 0x29, 0xa4, 0x2a, 0x3e, 0xc7, 0x5e, 0xc9, 0x81, 0xf1, 0xfa, 0xfa, 0x57, 0x7a, 0x23, 0xe1, 0x97, 0x56, 0x2c, 0xad, 0x88, 0x6b, 0xa8, 0x13, 0x0c, 0x0a, 0x1c, 0x17, 0xe1, 0xde, 0x71, 0x97, 0xa9, 0x6d, 0x50, 0x5e, 0xec, 0xaf, 0xe6, 0xf6, 0xb8, 0x1d, 0x6b, 0x2d, 0x15, 0xee, 0x89, 0xf6, 0xd8, 0x31, 0x6d, 0x94, 0x61, 0x04, 0x7a, 0x61, 0x68, 0x4d, 0x32, 0xe5, 0x08, 0x13, 0xe8, 0x5b, 0x7f, 0xb7, 0xb7, 0x59, 0xf0, 0x76, 0x58, 0x4d, 0x12, 0xe5, 0x78, 0xac, 0x68, 0xf9, 0x0b, 0x7d, 0x7d, 0x99, 0x52, 0x70, 0xe6, 0x50, 0x4b, 0x77, 0x56, 0x80, 0x34, 0x6a, 0x07, 0x44, 0x4a, 0xfd, 0x1a, 0x66, 0xd2, 0x96, 0xf5, 0x84, 0x96, 0x8d, 0x64, 0xb6, 0xd1, 0xc4, 0xb3, 0xaa, 0xcd, 0xbf, 0xed, 0xa0, 0x9a, 0x9b, 0x59, 0xd6, 0xa2, 0x52, 0xec, 0x69, 0xde, 0xfa, 0x6c, 0x8e, 0x60, 0x2d, 0x20, 0x12, 0x6b, 0xbe, 0xd8, 0xd7, 0xbf, 0x95, 0xd1, 0x75, 0x11, 0xe3, 0x44, 0x37, 0x97, 0xf7, 0xb7, 0x59, 0x71, 0x77, 0xd8, 0x68, 0x45, 0xed, 0x29, 0xe0, 0xe1, 0x70, 0xac, 0xea, 0x09, 0xbd, 0x47, 0x5d, 0x1b, 0x7a, 0x6f, 0x30, 0x1b, 0x7d, 0x51, 0x73, 0x9a, 0xca, 0x8e, 0xfb, 0xd5, 0x24, 0xa2, 0xe6, 0xa9, 0xc9, 0xbf, 0x26, 0x85, 0xca, 0x6a, 0xb6, 0x2a, 0x97, 0x5d, 0x0e, 0xbd, 0xed, 0xdf, 0x96, 0x55, 0xb5, 0xc4, 0xc6, 0xdf, 0xba, 0xa0, 0xed, 0x0e, 0x2e, 0x99, 0x8e, 0xc6, 0x24, 0x7a, 0xaa, 0xf7, 0x7c, 0x96, 0xc4, 0x5a, 0x52, 0x47, 0x4b, 0x78, 0xeb, 0xb4, 0x73, 0xd4, 0xd8, 0x89, 0xd7, 0xad, 0x56, 0x25, 0x9d, 0xef, 0xd6, 0x1a, 0xd0, 0xff, 0x00, 0xbc, 0x33, 0x67, 0x9e, 0xdc, 0xf5, 0x87, 0xf2, 0x25, 0xc2, 0x0c, 0x4f, 0x75, 0xe2, 0xbf, 0xe6, 0x51, 0xe3, 0x94, 0xe3, 0xb9, 0x75, 0x50, 0x1c, 0x37, 0x28, 0x31, 0x9d, 0x3e, 0x93, 0x5a, 0x26, 0xc1, 0xd3, 0x72, 0xcf, 0x21, 0xb8, 0x93, 0x31, 0xbc, 0x79, 0xfc, 0xfc, 0x56, 0xdf, 0x3c, 0x7e, 0x70, 0x7f, 0x67, 0xfe, 0x5b, 0xa2, 0x9d, 0x13, 0xd7, 0x28, 0xf2, 0xc5, 0x51, 0xd4, 0xbf, 0xf1, 0x96, 0x21, 0x75, 0xe1, 0x00, 0x67, 0xdb, 0x79, 0xd2, 0x71, 0xb3, 0x08, 0x67, 0xf9, 0xd9, 0x0a, 0x76, 0xcf, 0x63, 0xfa, 0xa9, 0x8b, 0x22, 0xcc, 0x03, 0x6f, 0x95, 0xde, 0xc3, 0x9e, 0x79, 0x7d, 0xcf, 0xeb, 0x7b, 0xe2, 0xae, 0x6f, 0x42, 0x3d, 0x52, 0x3e, 0xf9, 0x66, 0xd6, 0xbd, 0x57, 0xf6, 0x4e, 0x90, 0x2c, 0x7d, 0xe9, 0xf4, 0x9c, 0x22, 0x49, 0x65, 0x05, 0xf5, 0x9e, 0x90, 0x83, 0x74, 0x26, 0xed, 0xdb, 0x62, 0x77, 0x9b, 0x78, 0x98, 0x3f, 0xe7, 0x99, 0x80, 0xe5, 0x4c, 0x30, 0xa1, 0x6e, 0xaa, 0xa7, 0xda, 0x77, 0x7e, 0x85, 0x51, 0x42, 0x7b, 0x0b, 0x47, 0x92, 0xca, 0x40, 0xa5, 0xa2, 0x4b, 0x09, 0xaf, 0x47, 0x1f, 0xb5, 0xe8, 0x6f, 0x1c, 0xe5, 0x51, 0xa1, 0x85, 0x9f, 0xcd, 0xc2, 0xdc, 0x12, 0xb0, 0x64, 0x74, 0x04, 0xa2, 0xd4, 0xd7, 0xc2, 0x74, 0x94, 0x8b, 0x47, 0x0b, 0xdf, 0x06, 0x4e, 0x56, 0x53, 0x71, 0xe6, 0x23, 0x12, 0xfd, 0x69, 0x75, 0xfe, 0xae, 0x16, 0x96, 0xf6, 0x36, 0xff, 0x5a, 0x02, 0xbd, 0x37, 0x00, 0xda, 0x31, 0x59, 0x94, 0x14, 0xfb, 0x55, 0x4e, 0x6d, 0xae, 0x64, 0xe2, 0x19, 0x79, 0x62, 0xe3, 0xaf, 0x41, 0x2e, 0xfd, 0x7c, 0x5f, 0xea, 0xa3, 0x67, 0x3e, 0xa5, 0xc5, 0xbc, 0x98, 0x8c, 0x12, 0xc7, 0x13, 0x79, 0x54, 0x91, 0xb2, 0x6a, 0x4e, 0x81, 0xb2, 0xd8, 0x77, 0xdd, 0x9c, 0xa7, 0x76, 0x5b, 0x5f, 0xca, 0x4c, 0xe6, 0xa5, 0x13, 0x3d, 0xe0, 0xd9, 0x34, 0xfa, 0x6c, 0xda, 0x53, 0xbb, 0xac, 0xd3, 0x33, 0x93, 0x78, 0x69, 0x99, 0xc7, 0x9f, 0xae, 0x5f, 0xd4, 0xea, 0xed, 0xaf, 0xa8, 0xcb, 0x95, 0x45, 0x77, 0x9c, 0xb2, 0xc4, 0xde, 0xc3, 0x59, 0xdf, 0xdc, 0x63, 0xb7, 0xfa, 0x36, 0xf7, 0x98, 0x4e, 0xec, 0xb1, 0x84, 0x56, 0x3d, 0x86, 0xa3, 0x06, 0xfa, 0xac, 0xa1, 0x34, 0x75, 0x61, 0x31, 0x89, 0xf0, 0x0a, 0x97, 0x9c, 0xfd, 0x88, 0x5a, 0xa8, 0x93, 0x1b, 0xc8, 0x99, 0x99, 0xaf, 0x6f, 0x7f, 0x7d, 0x3b, 0x97, 0x38, 0xaf, 0x7a, 0x5e, 0x75, 0xfc, 0xad, 0x52, 0xc4, 0xfd, 0x7c, 0x72, 0x7d, 0x8e, 0x00, 0x34, 0xe3, 0xa8, 0xf4, 0x0a, 0x3d, 0x62, 0xc2, 0x69, 0x17, 0x66, 0xf7, 0x4b, 0x24, 0xc3, 0xd8, 0x69, 0x35, 0x6b, 0x23, 0xcc, 0x83, 0xf3, 0x17, 0x7b, 0x25, 0x8a, 0xea, 0x4f, 0x5b, 0xf3, 0x04, 0x41, 0xec, 0x0f, 0x0d, 0xea, 0x47, 0x05, 0x4e, 0x20, 0xa5, 0x44, 0x1c, 0x21, 0xc6, 0x64, 0x92, 0x10, 0x2e, 0x35, 0x26, 0x11, 0xab, 0xc1, 0x83, 0x7f, 0xca, 0xe8, 0xab, 0xf6, 0x9c, 0x3f, 0xc7, 0x28, 0xc1, 0x5e, 0x71, 0xd3, 0xc9, 0x8f, 0x5d, 0x58, 0xae, 0x95, 0x1d, 0x47, 0x2b, 0x67, 0xbe, 0xd6, 0xe2, 0x3a, 0xea, 0x47, 0x0b, 0x68, 0x76, 0xd4, 0xe3, 0xf7, 0x10, 0x7d, 0x0f, 0x43, 0xfb, 0x9a, 0x89, 0x95, 0x5a, 0x08, 0xc9, 0x9a, 0x3f, 0x15, 0x9e, 0x4b, 0x98, 0x26, 0x7e, 0x16, 0xbe, 0x63, 0xfd, 0x6a, 0x3a, 0x3d, 0xe7, 0x18, 0x70, 0x3f, 0x9b, 0x80, 0xa7, 0x29, 0x58, 0xcc, 0x13, 0xd9, 0xda, 0xff, 0x49, 0x3f, 0x50, 0xdc, 0x7e, 0x73, 0x56, 0x73, 0x3f, 0xa8, 0x11, 0xfb, 0xa2, 0xd4, 0xca, 0x70, 0x9c, 0x49, 0xda, 0xc4, 0x21, 0x33, 0x5b, 0xae, 0x94, 0x0d, 0xab, 0xdd, 0x57, 0xca, 0x9b, 0x5a, 0x5c, 0xc7, 0x5c, 0xfd, 0x21, 0xce, 0x61, 0xda, 0x23, 0x37, 0x2e, 0xa5, 0x2e, 0x14, 0xb5, 0x4f, 0x61, 0x0d, 0xce, 0xfa, 0x76, 0x37, 0xeb, 0x93, 0x8f, 0xa8, 0xc5, 0xc0, 0xb4, 0x79, 0xbb, 0xe7, 0xed, 0x7e, 0xa5, 0xfa, 0x95, 0xea, 0xf8, 0x5f, 0x91, 0x56, 0x89, 0xbf, 0x99, 0x83, 0xbd, 0x33, 0x3c, 0xbd, 0x82, 0x49, 0x68, 0xa3, 0xde, 0xf7, 0xb0, 0xfb, 0xac, 0x4c, 0x2e, 0xe6, 0x7c, 0x69, 0xaf, 0x58, 0x51, 0xab, 0x9d, 0x69, 0xd4, 0xb6, 0xea, 0x15, 0xe8, 0x0f, 0x73, 0xb8, 0xdc, 0x20, 0xe5, 0xb3, 0x81, 0xbb, 0xf2, 0x9c, 0x3f, 0xd3, 0x28, 0x71, 0x62, 0x64, 0xb7, 0xfe, 0x88, 0x5e, 0x58, 0x0e, 0x7d, 0x5a, 0xbc, 0x89, 0x38, 0xdf, 0xd5, 0xbc, 0xa4, 0x96, 0x1d, 0x9e, 0xed, 0x66, 0x17, 0x41, 0xde, 0xa2, 0x3f, 0x9c, 0x76, 0x11, 0x32, 0xc5, 0x77, 0xae, 0xfe, 0x98, 0x09, 0xfd, 0x11, 0x4b, 0xfb, 0x63, 0x3e, 0x4f, 0x3c, 0xba, 0xfc, 0x4f, 0xfa, 0x83, 0x72, 0x3a, 0xd7, 0xef, 0x8a, 0xd4, 0x0b, 0x87, 0x7d, 0x41, 0x7b, 0xa5, 0xe5, 0xbc, 0xb8, 0xa9, 0xfd, 0x8b, 0x79, 0x81, 0x32, 0xeb, 0x94, 0x52, 0xbb, 0xce, 0x8b, 0x94, 0x9a, 0xd8, 0x13, 0x27, 0x76, 0xc3, 0xd8, 0x1f, 0x2e, 0x9d, 0xee, 0xea, 0x95, 0x5d, 0xaf, 0xef, 0x7e, 0x7d, 0xb7, 0x3a, 0x71, 0xc1, 0xae, 0x05, 0xbb, 0x92, 0x6f, 0xd6, 0xe1, 0xcc, 0xe0, 0x93, 0x7f, 0x5d, 0x22, 0xce, 0x90, 0x97, 0xf5, 0xde, 0xad, 0x67, 0x88, 0x1b, 0x6d, 0x97, 0x90, 0x3a, 0x2f, 0x92, 0xce, 0x0d, 0xc0, 0x71, 0x33, 0x8c, 0x62, 0x4b, 0xaa, 0xc2, 0x89, 0xb3, 0x1f, 0xfa, 0xd3, 0xd9, 0x81, 0x98, 0x48, 0x6b, 0x35, 0x0e, 0x24, 0x09, 0x7a, 0x9b, 0xc6, 0xc2, 0xf3, 0x46, 0x3f, 0xb5, 0x17, 0x9d, 0x1f, 0x0b, 0x91, 0x0a, 0x85, 0xb1, 0x10, 0xab, 0x91, 0x1d, 0xc5, 0x99, 0xe0, 0xc7, 0x79, 0x56, 0xce, 0x81, 0x54, 0x16, 0xb6, 0xd0, 0x09, 0x8e, 0xa6, 0x2d, 0x2f, 0xa7, 0x5a, 0x0c, 0x3e, 0xb4, 0x47, 0x16, 0xb8, 0x7a, 0x04, 0xfb, 0xc8, 0x39, 0x43, 0x7c, 0x52, 0x17, 0x88, 0x3d, 0x72, 0x76, 0xce, 0xe9, 0x39, 0xce, 0xf9, 0x21, 0x99, 0x53, 0xac, 0x5c, 0x07, 0xfd, 0x51, 0xe4, 0x5b, 0xe5, 0xd6, 0x1f, 0xf0, 0x6c, 0x1a, 0x7d, 0xf6, 0x77, 0xfb, 0x43, 0x94, 0x8b, 0xcd, 0xff, 0xfb, 0xf3, 0xe3, 0xfa, 0x0c, 0xf7, 0xf9, 0x51, 0x2f, 0xff, 0xa3, 0xf9, 0x71, 0x6d, 0xd7, 0xff, 0x7e, 0x7e, 0xe0, 0xbc, 0x80, 0xfe, 0x98, 0x43, 0xb5, 0xa4, 0xee, 0x9f, 0x19, 0xb1, 0x74, 0x66, 0x8c, 0x82, 0x99, 0xe1, 0xe3, 0x3e, 0x33, 0x80, 0xfb, 0xc2, 0xb6, 0xf6, 0x87, 0x3e, 0x98, 0x69, 0x24, 0xad, 0xe7, 0xcb, 0x9f, 0xcc, 0x8d, 0xcc, 0x3f, 0x9e, 0x1b, 0xc7, 0xf6, 0x9f, 0x9e, 0xc9, 0x66, 0x86, 0x4c, 0xd4, 0x33, 0x62, 0xd2, 0x58, 0x9a, 0x66, 0x8b, 0xfb, 0x5c, 0x01, 0xf0, 0xb0, 0xe8, 0x23, 0x4d, 0x0f, 0x75, 0x2e, 0x20, 0x2a, 0xe0, 0xc2, 0xfc, 0x75, 0xc0, 0x75, 0x02, 0x5f, 0x27, 0x37, 0x00, 0xbf, 0x8d, 0xe7, 0x77, 0xd4, 0x5f, 0xb1, 0x12, 0x7a, 0x20, 0x85, 0x52, 0x89, 0x9e, 0xa9, 0x9b, 0x7f, 0xd9, 0xc7, 0x76, 0x25, 0x3d, 0x49, 0x27, 0x97, 0x04, 0x9b, 0x8c, 0x4b, 0x6a, 0x21, 0xc3, 0x86, 0xf1, 0x66, 0x19, 0x7d, 0x60, 0xf9, 0xec, 0x6d, 0x2d, 0x17, 0xad, 0xc7, 0x98, 0xc2, 0x84, 0x26, 0x51, 0x3a, 0x08, 0x79, 0x04, 0xb8, 0x6b, 0x64, 0x76, 0x36, 0x90, 0xa2, 0xbb, 0x48, 0xe6, 0xe0, 0xb9, 0x60, 0xe5, 0x87, 0xc2, 0x6d, 0x4a, 0x13, 0xcb, 0xd7, 0x95, 0xe7, 0x13, 0xb2, 0x5e, 0x0d, 0xa5, 0x02, 0xbe, 0x59, 0xae, 0x4e, 0x44, 0xed, 0x1a, 0xea, 0xd3, 0x79, 0x5b, 0x38, 0x7a, 0x46, 0xf2, 0x72, 0x9e, 0x53, 0x04, 0x61, 0x0e, 0x53, 0x4c, 0xf1, 0x5a, 0xc5, 0x90, 0x29, 0x1a, 0x48, 0x61, 0xc4, 0xe4, 0x85, 0x90, 0x06, 0xc4, 0x4f, 0x4e, 0xbc, 0x2a, 0x5c, 0x79, 0x65, 0x7f, 0xb1, 0x84, 0x5a, 0xdf, 0xb7, 0x02, 0x67, 0x3f, 0x6a, 0x28, 0xbc, 0x71, 0x96, 0xbb, 0x58, 0xc9, 0x4b, 0x8b, 0x65, 0x58, 0xee, 0x08, 0x53, 0x30, 0x11, 0xad, 0x33, 0xa1, 0xbd, 0x08, 0xf4, 0x54, 0x9e, 0xba, 0xf9, 0x6a, 0x8d, 0x51, 0xe6, 0xcc, 0x9b, 0x5a, 0x7c, 0x07, 0xfe, 0x34, 0x33, 0xce, 0x14, 0x07, 0xa3, 0xb4, 0x40, 0x68, 0xa4, 0x65, 0xde, 0x7c, 0x35, 0x15, 0x72, 0xc9, 0x07, 0xce, 0x3f, 0x4c, 0xa8, 0xa3, 0x25, 0x43, 0x8b, 0xb5, 0x21, 0xd0, 0xce, 0xcd, 0x56, 0xf9, 0xa9, 0x27, 0xee, 0xbe, 0x31, 0x06, 0x51, 0x72, 0x49, 0xa5, 0x1d, 0xcb, 0xb8, 0x61, 0x03, 0xf1, 0xd7, 0xe4, 0x43, 0x3b, 0xe7, 0x8b, 0xed, 0x2c, 0x72, 0xba, 0x90, 0x62, 0x91, 0x5e, 0x3e, 0x7c, 0x5a, 0x4b, 0x2e, 0xe0, 0x6a, 0x12, 0xb5, 0xb4, 0x86, 0xbe, 0xa9, 0xbb, 0xa0, 0x1f, 0x7a, 0x51, 0xb7, 0x05, 0xdb, 0x8d, 0xc9, 0x58, 0xd1, 0xb6, 0x73, 0xee, 0x13, 0x93, 0x0e, 0x76, 0x42, 0xde, 0x83, 0xd8, 0x51, 0x18, 0x5b, 0xd4, 0x89, 0x71, 0xca, 0x63, 0xb5, 0x8c, 0x8d, 0xde, 0xb8, 0x95, 0x84, 0x48, 0x0a, 0xa3, 0xac, 0xe5, 0x54, 0x8f, 0xab, 0xda, 0x04, 0xab, 0xa3, 0xe8, 0x91, 0x3b, 0x22, 0x97, 0xf8, 0xcc, 0xaf, 0x8e, 0xe8, 0x8f, 0x56, 0xd3, 0xd0, 0x2b, 0x36, 0x3d, 0x73, 0xf1, 0x66, 0xf4, 0x68, 0xf3, 0xf7, 0x8f, 0xb9, 0x7d, 0xef, 0x23, 0x7e, 0x4f, 0xe3, 0x47, 0x43, 0x7c, 0x28, 0xe5, 0x7c, 0x73, 0x44, 0x1c, 0x4b, 0x21, 0x4a, 0xb4, 0xea, 0xed, 0xfe, 0xbd, 0x4e, 0x9e, 0x06, 0x63, 0x57, 0x9d, 0xe0, 0xe2, 0xc6, 0x36, 0x5f, 0x19, 0xce, 0xa4, 0x19, 0xc5, 0x5a, 0x2c, 0x43, 0x2f, 0xdf, 0x85, 0x3a, 0x2c, 0x1b, 0xda, 0xff, 0x75, 0xd6, 0x46, 0x2c, 0x09, 0xdb, 0x89, 0x76, 0x4b, 0x8f, 0xfa, 0xfe, 0xc6, 0xd8, 0x3e, 0x62, 0x6c, 0xa7, 0x16, 0x90, 0x5b, 0xfc, 0x96, 0xa5, 0x8f, 0xa2, 0xa5, 0x8f, 0x44, 0xef, 0xde, 0x50, 0x36, 0x67, 0xcd, 0x21, 0x0f, 0xb7, 0x72, 0xf7, 0xc6, 0xb7, 0x6d, 0xd6, 0xbd, 0x77, 0xcb, 0xaf, 0xff, 0xb8, 0xde, 0x62, 0xfb, 0xb7, 0xe8, 0x27, 0x7d, 0x8b, 0x99, 0xe3, 0xa1, 0x4e, 0x32, 0xf5, 0x6c, 0xc9, 0xb5, 0xfd, 0x9c, 0x8e, 0x39, 0x50, 0x2b, 0x79, 0x84, 0x48, 0x0b, 0x75, 0x40, 0xb5, 0x94, 0x8b, 0xf6, 0x61, 0xb0, 0x4e, 0xe2, 0x6c, 0xc2, 0x1a, 0xb5, 0xae, 0x95, 0xab, 0xed, 0xd6, 0xb0, 0xfa, 0xd1, 0x6f, 0xb1, 0x4e, 0x43, 0xe8, 0xd8, 0x75, 0xce, 0xc4, 0xb6, 0xbe, 0x45, 0x2f, 0xe9, 0x4a, 0x09, 0x7c, 0x11, 0x41, 0xb1, 0x99, 0x2f, 0xb6, 0xe4, 0x10, 0x6c, 0x49, 0x85, 0xc9, 0x2c, 0x86, 0xf8, 0x45, 0xba, 0x19, 0x3d, 0x74, 0xb7, 0xae, 0x11, 0x7a, 0xee, 0x76, 0x7d, 0xeb, 0x03, 0xdf, 0xb2, 0x2f, 0xb0, 0xef, 0xc4, 0x2b, 0xf1, 0x3b, 0x67, 0xde, 0xee, 0xdf, 0x22, 0x7e, 0x41, 0x3c, 0x83, 0x52, 0x23, 0x3f, 0xd7, 0xd1, 0xb3, 0x99, 0x0f, 0x85, 0xbb, 0x8e, 0xbe, 0x2d, 0x67, 0xc1, 0x65, 0x33, 0xe0, 0x70, 0xf8, 0x12, 0x66, 0x5f, 0x93, 0x48, 0x35, 0xff, 0x54, 0x63, 0xf4, 0x10, 0x7b, 0xc8, 0x64, 0xc6, 0x53, 0x0f, 0x23, 0xcc, 0x7d, 0xfa, 0x1c, 0xb5, 0x39, 0x0d, 0x74, 0xd4, 0x54, 0x7c, 0x7c, 0x55, 0xb8, 0x4d, 0x53, 0x4a, 0x68, 0x4e, 0xe9, 0xa7, 0x5b, 0xae, 0x94, 0x1a, 0x59, 0x4a, 0xd3, 0xef, 0x4b, 0xe9, 0x36, 0x7d, 0x8e, 0x9e, 0x18, 0x0c, 0xb6, 0xd5, 0x84, 0x73, 0xe0, 0x49, 0x07, 0x5a, 0x53, 0xf1, 0x07, 0x1e, 0x78, 0xa7, 0xe8, 0xef, 0x06, 0x66, 0x79, 0x99, 0x70, 0x14, 0x67, 0x39, 0x95, 0x6b, 0x1d, 0x43, 0xfc, 0x15, 0x3d, 0x88, 0x84, 0xb6, 0x7e, 0x25, 0x7a, 0x22, 0xa7, 0x67, 0x2a, 0xaa, 0xe2, 0x76, 0x49, 0x92, 0xea, 0x49, 0x01, 0xb1, 0x04, 0x35, 0x5a, 0x0c, 0x05, 0x68, 0x0b, 0x19, 0x3d, 0xd0, 0x66, 0xf3, 0xd6, 0x62, 0x1e, 0x9e, 0xa8, 0x45, 0x0d, 0x17, 0x7b, 0xba, 0x25, 0x87, 0xc8, 0x7a, 0x02, 0xe6, 0x25, 0x0a, 0x69, 0x8e, 0xf0, 0x0d, 0x51, 0xf2, 0x66, 0xdc, 0x2f, 0x2d, 0x96, 0xf0, 0x0a, 0x31, 0x9c, 0x6f, 0x9e, 0x6f, 0xee, 0x19, 0x07, 0x71, 0xcc, 0x04, 0x9f, 0x28, 0xa5, 0x66, 0xe1, 0x1c, 0x31, 0x13, 0x15, 0x1f, 0x88, 0x5f, 0xa2, 0xcf, 0x3e, 0xf6, 0xf4, 0x1a, 0x3c, 0xe5, 0xd0, 0x3b, 0x2e, 0x94, 0xc6, 0x83, 0x74, 0x70, 0x38, 0x3d, 0xf5, 0x12, 0xa1, 0x48, 0xf4, 0xd1, 0xc3, 0xf5, 0x65, 0x5e, 0x42, 0x42, 0xd4, 0x63, 0x88, 0xc6, 0x30, 0x86, 0x0c, 0xd7, 0x43, 0xbe, 0xe8, 0xa3, 0x5a, 0x9b, 0x43, 0x82, 0xd4, 0x39, 0x24, 0x40, 0xd3, 0x83, 0xa8, 0x71, 0x05, 0x80, 0x95, 0x40, 0x06, 0x54, 0x1a, 0x93, 0xe0, 0xab, 0xa3, 0xe7, 0x66, 0x71, 0x8d, 0x75, 0x1b, 0xd5, 0x16, 0x48, 0x1b, 0x3d, 0xed, 0xe4, 0x52, 0xfd, 0xe7, 0x04, 0x97, 0xfe, 0xb3, 0xbf, 0xcb, 0xde, 0x16, 0xd3, 0x8f, 0x56, 0x84, 0xb9, 0x8f, 0x74, 0x53, 0xa4, 0x73, 0x94, 0xab, 0x6d, 0xa9, 0x6b, 0x9b, 0xde, 0x31, 0xfa, 0x9b, 0xf2, 0x80, 0x0b, 0x53, 0xa0, 0x3f, 0x3a, 0x58, 0x1d, 0xf2, 0x80, 0x97, 0x54, 0x44, 0x65, 0x88, 0xf2, 0x43, 0x75, 0x7a, 0x77, 0xad, 0x69, 0xde, 0xc4, 0xd2, 0x66, 0xba, 0xd7, 0x46, 0x7f, 0xf4, 0x56, 0x47, 0xbf, 0x91, 0xd1, 0xef, 0xa5, 0x40, 0x39, 0xb0, 0x2f, 0x7f, 0xac, 0x17, 0x39, 0x5d, 0xa7, 0x97, 0x6b, 0x13, 0xf5, 0xcb, 0x0a, 0xf5, 0xe5, 0xb0, 0xbe, 0xda, 0x1e, 0x64, 0xb8, 0x01, 0xeb, 0x0b, 0x2b, 0x9d, 0x86, 0xd5, 0x57, 0x37, 0x46, 0xac, 0xaf, 0x16, 0xeb, 0xeb, 0xe1, 0xdc, 0xbf, 0xfa, 0x11, 0xf5, 0xec, 0x94, 0x03, 0x1a, 0x7f, 0xdc, 0x05, 0xb3, 0xca, 0x03, 0x6a, 0x8b, 0xe7, 0x6f, 0x1e, 0x74, 0x6f, 0x58, 0xb4, 0xa6, 0xbe, 0x08, 0xc6, 0x18, 0xf2, 0x0e, 0x0a, 0xaa, 0x45, 0x4b, 0xcf, 0xec, 0x4c, 0xe9, 0x38, 0x2f, 0xfa, 0x37, 0xfe, 0x98, 0x9f, 0xba, 0xd0, 0x94, 0x2e, 0x52, 0x07, 0x54, 0xd7, 0x96, 0xbe, 0x85, 0x2b, 0xa9, 0x75, 0x0c, 0xc3, 0x5b, 0x0b, 0x59, 0x5a, 0x0a, 0x57, 0x5a, 0xb2, 0xe6, 0xf8, 0x88, 0x3d, 0x30, 0x36, 0xc3, 0x3b, 0x0b, 0x51, 0x52, 0xb3, 0xad, 0x9c, 0x60, 0xad, 0x4f, 0x4f, 0x87, 0x78, 0x19, 0xf0, 0x9c, 0x6a, 0xd6, 0xb4, 0x48, 0xd3, 0xa5, 0x23, 0x25, 0x71, 0x98, 0x21, 0xbe, 0xc7, 0xfd, 0x29, 0x0f, 0x68, 0xbc, 0xb4, 0x43, 0xcc, 0xbb, 0xad, 0xb7, 0xa9, 0x8b, 0xd2, 0xd3, 0x33, 0xc4, 0x72, 0x99, 0x20, 0x1d, 0x29, 0x4d, 0xc7, 0xad, 0xce, 0x18, 0xcb, 0x59, 0xe3, 0x4b, 0x13, 0x5a, 0x96, 0xb2, 0xf9, 0x1d, 0x94, 0x51, 0x2c, 0xa1, 0x9c, 0xa6, 0x13, 0xde, 0x12, 0xf7, 0x99, 0x1e, 0x6d, 0x89, 0xf9, 0x2e, 0x65, 0x39, 0x4b, 0x42, 0x4b, 0xc5, 0x4a, 0x13, 0x99, 0x2e, 0xfa, 0x68, 0xb9, 0x14, 0xe8, 0xea, 0x5b, 0x25, 0xfa, 0x83, 0x62, 0x40, 0x44, 0xff, 0x37, 0xff, 0xf9, 0x39, 0xd0, 0xff, 0xe2, 0x9c, 0xa0, 0xeb, 0xbf, 0x79, 0x4e, 0xd0, 0x95, 0x9d, 0x13, 0x74, 0xfd, 0x8f, 0xcf, 0x09, 0xa8, 0xc7, 0x3a, 0xcf, 0x2a, 0xf4, 0x82, 0x8d, 0x7b, 0xe1, 0x01, 0x8e, 0x40, 0x18, 0xcd, 0x41, 0x45, 0xfe, 0xea, 0x72, 0x71, 0x97, 0x5e, 0x15, 0x4b, 0xa0, 0x75, 0xf0, 0x59, 0xb1, 0xbf, 0x5a, 0xdc, 0xab, 0x9f, 0xe4, 0x6c, 0x2f, 0xe7, 0x3e, 0x3d, 0x94, 0x6c, 0x38, 0xdd, 0x49, 0x05, 0x2a, 0x90, 0x98, 0x71, 0x4f, 0x0a, 0x4f, 0xb8, 0x34, 0x80, 0xc5, 0xb9, 0x5c, 0x36, 0x23, 0x72, 0x89, 0x9a, 0x24, 0xe8, 0x72, 0x89, 0xbf, 0x3e, 0x97, 0x04, 0x84, 0xeb, 0x49, 0x10, 0x3c, 0xe9, 0x44, 0x62, 0x9b, 0x3d, 0x18, 0x43, 0x19, 0x56, 0xe3, 0xb9, 0xae, 0xf4, 0x4c, 0x84, 0x5f, 0xb4, 0x9f, 0x75, 0x67, 0xac, 0x32, 0x36, 0x05, 0x53, 0x02, 0x6a, 0x72, 0xb8, 0x49, 0x59, 0x93, 0x9c, 0x61, 0x06, 0x3e, 0xa5, 0xef, 0xd1, 0xaf, 0x33, 0x6c, 0xb6, 0xa4, 0x27, 0x80, 0xe6, 0x4f, 0x48, 0xb2, 0xc5, 0x3d, 0x41, 0x75, 0x45, 0xd1, 0x47, 0x62, 0xb1, 0x64, 0x1d, 0xf0, 0x1f, 0x0e, 0x15, 0xb5, 0x21, 0x8c, 0xba, 0xdf, 0x88, 0x23, 0x15, 0xbc, 0xbc, 0x58, 0x01, 0xf4, 0x99, 0xdc, 0xe8, 0x19, 0xf1, 0xa8, 0x1b, 0x75, 0xc6, 0x6c, 0xa4, 0x34, 0xc5, 0x50, 0x4b, 0x98, 0x66, 0xa3, 0x27, 0xa4, 0x08, 0x29, 0x45, 0xc4, 0xa1, 0xa6, 0xae, 0xf5, 0x59, 0xea, 0x47, 0x40, 0x26, 0xee, 0xa3, 0xdc, 0xab, 0xa7, 0x96, 0x7f, 0xd3, 0xe8, 0xee, 0x9f, 0xb8, 0x07, 0x35, 0xcd, 0x28, 0xb3, 0x15, 0x92, 0x68, 0x3c, 0x1f, 0x8b, 0x30, 0xd3, 0xd8, 0xa2, 0x4e, 0x18, 0xd3, 0xfe, 0xa2, 0x27, 0x55, 0x09, 0x0e, 0xff, 0x62, 0x5a, 0x0e, 0x87, 0x9c, 0x9e, 0xcb, 0xe1, 0x5e, 0x9b, 0x67, 0xcb, 0x51, 0x0a, 0x69, 0x6f, 0x4e, 0x9d, 0x6f, 0xf4, 0x64, 0x9a, 0x72, 0x29, 0x11, 0x85, 0xc4, 0x6a, 0xf2, 0xb6, 0x56, 0x73, 0x09, 0xd4, 0xaf, 0x00, 0x52, 0xe2, 0x94, 0x27, 0x5c, 0x33, 0x15, 0x79, 0x42, 0x96, 0x33, 0xf0, 0xbc, 0x30, 0x02, 0xcc, 0x74, 0xf6, 0x1a, 0x21, 0x1c, 0xc7, 0xb3, 0x7d, 0x0e, 0xbd, 0x32, 0x7d, 0x9a, 0xc1, 0x2f, 0x7d, 0xfa, 0xa9, 0xdd, 0x86, 0x81, 0xdf, 0x5d, 0x23, 0x99, 0xfa, 0xe4, 0x21, 0xb3, 0xc3, 0x21, 0x8d, 0x21, 0x2f, 0xb1, 0xd9, 0x2c, 0xee, 0x41, 0x32, 0x3b, 0xc8, 0xc0, 0x73, 0x37, 0x51, 0x1b, 0xb7, 0x68, 0xf1, 0x8c, 0xf2, 0x80, 0xfd, 0x9d, 0xfb, 0x64, 0x72, 0xa3, 0x1f, 0x72, 0x6f, 0xb1, 0xe6, 0xd3, 0x73, 0xe8, 0x9d, 0x17, 0xde, 0x99, 0xcc, 0x67, 0x2a, 0x5e, 0x3b, 0xf8, 0xda, 0x41, 0x43, 0x32, 0xdd, 0x21, 0xfb, 0x35, 0x4b, 0xc0, 0xbd, 0xd0, 0xf8, 0x5b, 0x94, 0x9b, 0x49, 0x89, 0xfb, 0x19, 0xe5, 0x22, 0x9c, 0x6b, 0x23, 0xe5, 0x53, 0xe7, 0xb3, 0x5d, 0x54, 0xf8, 0xb6, 0xa6, 0x90, 0x0c, 0xa3, 0x3b, 0xab, 0xc3, 0xe9, 0x33, 0x48, 0x1d, 0x9e, 0x3c, 0x45, 0x9f, 0xe4, 0x50, 0xab, 0x6e, 0x25, 0xd4, 0x8a, 0x5b, 0x29, 0xae, 0x92, 0x4c, 0xdb, 0x2f, 0x96, 0xb5, 0x49, 0x26, 0xae, 0xac, 0xe1, 0xb1, 0xb8, 0x83, 0xa8, 0x4e, 0xc6, 0x13, 0x08, 0xe8, 0x1f, 0x6b, 0xeb, 0x7c, 0x70, 0x17, 0x94, 0xf2, 0xa1, 0x66, 0x7a, 0x0d, 0xe9, 0xeb, 0xcc, 0xce, 0xb4, 0xa0, 0x4d, 0x63, 0x8c, 0xde, 0xe2, 0xaf, 0xc9, 0xbf, 0x26, 0x89, 0xf2, 0x0f, 0x4a, 0x71, 0x77, 0x14, 0xea, 0x4d, 0xd3, 0x74, 0xc3, 0xc5, 0x4e, 0x2b, 0xd1, 0xe8, 0x5f, 0x75, 0x0c, 0xdd, 0x8d, 0xa7, 0xa1, 0x75, 0x5c, 0x8e, 0xc4, 0x5a, 0x92, 0x25, 0x11, 0x5b, 0xca, 0xb9, 0x33, 0x27, 0xf6, 0xb3, 0xdd, 0xd4, 0x5c, 0x73, 0xe8, 0x4d, 0xe4, 0xd7, 0x9b, 0xf7, 0x40, 0x79, 0x80, 0x1c, 0xd7, 0xc9, 0xa9, 0xe6, 0x7e, 0x0e, 0x0a, 0xfd, 0xe1, 0xa2, 0x6e, 0x20, 0xae, 0xa5, 0xe8, 0xfd, 0x01, 0x6d, 0xcb, 0x68, 0xf2, 0x08, 0x9e, 0xe6, 0xd3, 0x75, 0x13, 0xc2, 0x80, 0x28, 0xb4, 0x92, 0x1e, 0x4f, 0x38, 0x94, 0x03, 0x1b, 0xf0, 0x93, 0x20, 0x70, 0x39, 0x92, 0x24, 0xdc, 0x47, 0x8c, 0x6d, 0x3e, 0xcd, 0x44, 0xcf, 0xf6, 0x0a, 0x6b, 0xf5, 0xc0, 0x5b, 0x0a, 0xb2, 0x69, 0x4e, 0xbe, 0xbf, 0xce, 0x9f, 0xf7, 0x19, 0x78, 0xbd, 0xae, 0x69, 0xcb, 0xc1, 0x42, 0xa9, 0x3e, 0x95, 0xad, 0xdc, 0x35, 0x6a, 0x1b, 0xcc, 0x34, 0x0b, 0xce, 0x34, 0x5b, 0x3c, 0x60, 0xce, 0x00, 0x28, 0x49, 0xa0, 0x51, 0xda, 0xbc, 0x9a, 0xd2, 0x35, 0x71, 0xf3, 0xef, 0x5a, 0x2a, 0xa1, 0x18, 0x20, 0x4a, 0x9c, 0x51, 0x4a, 0x46, 0x40, 0xae, 0xd7, 0xf2, 0x3e, 0xd3, 0x85, 0x84, 0x38, 0x8d, 0x67, 0xe8, 0x89, 0x8f, 0x33, 0x95, 0xa0, 0xfb, 0x53, 0x69, 0x3c, 0xaf, 0xc6, 0x34, 0x7a, 0x88, 0x69, 0x40, 0x5f, 0xa1, 0x44, 0x8a, 0xd2, 0x25, 0x91, 0x82, 0x31, 0x96, 0x60, 0x2e, 0x34, 0x9d, 0x95, 0x24, 0xc8, 0x31, 0x81, 0xa6, 0x16, 0x08, 0xa9, 0x05, 0xb4, 0x91, 0xda, 0x7c, 0x4a, 0xcf, 0xb9, 0x4a, 0xed, 0x4e, 0x01, 0xd0, 0x1a, 0xbd, 0xc3, 0x4a, 0xcc, 0x59, 0xcb, 0x03, 0xd0, 0x26, 0xc9, 0xa4, 0xc3, 0xb9, 0xa4, 0xaf, 0xda, 0xd6, 0x6c, 0x17, 0x00, 0xdf, 0x6b, 0x51, 0x62, 0xc6, 0xc3, 0x25, 0x97, 0x66, 0x63, 0xde, 0xd1, 0x76, 0xd2, 0xfe, 0x08, 0x69, 0xa6, 0xbf, 0x78, 0x73, 0x2b, 0x9a, 0x2b, 0x0d, 0x28, 0x2d, 0x35, 0xd2, 0x4f, 0x70, 0x2d, 0x69, 0x9b, 0x7e, 0x72, 0xa3, 0x94, 0x14, 0xac, 0xbd, 0x37, 0xbb, 0xd6, 0x15, 0x49, 0xb3, 0x5c, 0x42, 0xdb, 0x36, 0xab, 0xfe, 0xbf, 0xe2, 0xdd, 0xe6, 0xdf, 0xf5, 0x4b, 0x22, 0x58, 0xdc, 0xfd, 0x92, 0x08, 0xe9, 0xff, 0x9e, 0x5f, 0x12, 0x41, 0xfd, 0xff, 0x9f, 0xe7, 0xea, 0xa2, 0xad, 0x22, 0xea, 0xeb, 0x89, 0xce, 0x5b, 0x98, 0xa7, 0x1a, 0xf4, 0xf7, 0xc4, 0x01, 0x8e, 0x2d, 0x56, 0x01, 0x35, 0x8e, 0x1a, 0x7a, 0x41, 0xcc, 0x2b, 0x09, 0x21, 0x53, 0x2d, 0xa8, 0x39, 0xdd, 0xc9, 0x52, 0xc9, 0x24, 0xe5, 0x64, 0x1a, 0x92, 0x35, 0xd7, 0x31, 0x0e, 0x56, 0x97, 0x50, 0xb4, 0x65, 0x9e, 0xba, 0xf9, 0xde, 0x25, 0xb5, 0x05, 0x65, 0x3c, 0x96, 0x5c, 0x2d, 0x92, 0x26, 0x02, 0xfe, 0x41, 0x59, 0x53, 0x4c, 0x81, 0xda, 0x08, 0xe1, 0x38, 0x94, 0x70, 0xec, 0x04, 0x57, 0x6a, 0xae, 0x1c, 0x75, 0xe8, 0x44, 0x69, 0x3b, 0x6a, 0xb3, 0x09, 0x7d, 0x5f, 0x04, 0xc1, 0x3c, 0xf3, 0xc1, 0xb3, 0xfd, 0x0b, 0x56, 0x71, 0x46, 0x64, 0x95, 0x8b, 0x5f, 0xe0, 0x73, 0x66, 0x75, 0x48, 0x51, 0xe4, 0x2f, 0x3e, 0xe3, 0xca, 0x71, 0xac, 0x0f, 0x97, 0xb9, 0x6c, 0x2e, 0x51, 0x1b, 0x35, 0xb0, 0x4a, 0xa4, 0xc0, 0xd8, 0xc9, 0xe4, 0x92, 0x0d, 0xe8, 0x2b, 0x31, 0x49, 0x0b, 0xb4, 0x3c, 0x17, 0x0f, 0x54, 0xad, 0x8f, 0x3a, 0x1e, 0xf7, 0x2d, 0x00, 0x27, 0xc9, 0xf4, 0x30, 0x2f, 0x80, 0xbe, 0x0d, 0x30, 0x8e, 0x21, 0x41, 0x80, 0xa1, 0xc7, 0xe0, 0xca, 0x8d, 0x6b, 0x73, 0xdc, 0xaf, 0x15, 0x82, 0x1e, 0x6d, 0xbd, 0xc5, 0xc6, 0x37, 0x2c, 0x11, 0x74, 0xde, 0x14, 0xc7, 0x0c, 0x40, 0x1c, 0xc3, 0xc5, 0xe3, 0xb9, 0x7a, 0x71, 0x7b, 0xd4, 0xc0, 0x97, 0xe4, 0x88, 0xad, 0xe1, 0xf0, 0x87, 0x50, 0x85, 0xad, 0x22, 0x9b, 0x05, 0x74, 0xe6, 0x3b, 0x5c, 0x12, 0x6a, 0xdd, 0x4a, 0x8f, 0xd9, 0x95, 0x68, 0x8b, 0x9e, 0x95, 0x96, 0x2b, 0x92, 0x70, 0xf1, 0x40, 0x8d, 0xa8, 0xe9, 0x29, 0x95, 0x48, 0xdf, 0xc1, 0xdb, 0x16, 0xbc, 0x2d, 0xe0, 0x84, 0x7b, 0x7d, 0xd3, 0xe6, 0x86, 0xcf, 0xa4, 0x5a, 0xe1, 0x78, 0xb2, 0xe9, 0x83, 0x1e, 0x3d, 0xd0, 0x2e, 0xbc, 0x4b, 0xa7, 0x0d, 0xe3, 0x74, 0x6a, 0x2e, 0x0f, 0xc5, 0xec, 0x33, 0x81, 0x1a, 0x89, 0x3c, 0x59, 0x47, 0x3a, 0x45, 0xa7, 0x18, 0x95, 0xf4, 0x24, 0x8f, 0xc6, 0xbb, 0x3b, 0x41, 0x6d, 0x73, 0xf6, 0x00, 0xd5, 0xa9, 0x45, 0xde, 0x4c, 0xc5, 0x13, 0x8f, 0x4b, 0xff, 0x4d, 0x09, 0xef, 0x2e, 0xbb, 0xaf, 0x84, 0xb6, 0xd6, 0x25, 0xbc, 0x5b, 0x9a, 0x7c, 0x95, 0x48, 0xb0, 0x6c, 0x96, 0x57, 0xd0, 0xa6, 0x07, 0x5d, 0xc1, 0xa0, 0x3f, 0x9c, 0x7b, 0x77, 0xd6, 0x12, 0x05, 0xa1, 0xe7, 0xe1, 0x5e, 0xc9, 0x8d, 0x77, 0xb3, 0x53, 0x17, 0x00, 0xee, 0x54, 0xaa, 0x13, 0xa9, 0x14, 0x9d, 0x8c, 0x5a, 0xa7, 0x87, 0x37, 0xa9, 0x0b, 0xd0, 0x3b, 0x1b, 0x94, 0x36, 0x1a, 0xe5, 0x78, 0x3e, 0xc9, 0x6d, 0xa3, 0xcc, 0x01, 0xbc, 0x8f, 0xeb, 0x1a, 0x57, 0x3a, 0x1f, 0xf1, 0xbc, 0xdb, 0xbd, 0x74, 0x03, 0x1b, 0x7f, 0x5f, 0x23, 0x6a, 0xe4, 0x89, 0xa9, 0xa8, 0x93, 0x98, 0xcd, 0x00, 0x42, 0x0e, 0x14, 0x05, 0x1e, 0x2d, 0x67, 0x25, 0xc7, 0x75, 0xce, 0x07, 0xd7, 0x4d, 0x83, 0x9e, 0x44, 0x8e, 0x23, 0x41, 0xc0, 0xed, 0x53, 0xe9, 0xc7, 0xa5, 0x74, 0xed, 0x08, 0x01, 0x7c, 0x8c, 0xed, 0xb7, 0x46, 0x4d, 0xa0, 0xe5, 0x65, 0xf4, 0xfa, 0x3d, 0xba, 0xe3, 0xd2, 0xb7, 0x26, 0xa5, 0x98, 0x44, 0xe8, 0x09, 0xfa, 0x96, 0xcc, 0x9a, 0xb7, 0xdd, 0x69, 0x81, 0xa6, 0x86, 0xee, 0x01, 0xd0, 0x9d, 0x4f, 0x1c, 0x4f, 0x7c, 0xb3, 0x65, 0x97, 0x9a, 0x81, 0x74, 0x77, 0x80, 0xae, 0x36, 0xac, 0x77, 0xea, 0x8b, 0x24, 0x62, 0xef, 0x34, 0xe7, 0xc2, 0x79, 0xb0, 0xeb, 0xf7, 0xa8, 0x77, 0x81, 0x99, 0x40, 0xcf, 0xe0, 0x17, 0x0b, 0x59, 0x6d, 0xdb, 0xb3, 0x35, 0x2d, 0x40, 0xb4, 0xbf, 0x2f, 0xb9, 0xc0, 0x59, 0xd2, 0x50, 0xbf, 0xd3, 0x60, 0xf4, 0x6d, 0x51, 0x17, 0xcf, 0x8c, 0xe9, 0xd4, 0x23, 0x80, 0x95, 0xee, 0xb6, 0x2b, 0xe9, 0x49, 0x37, 0xe6, 0xbd, 0x98, 0x4b, 0xc8, 0xa8, 0x88, 0xbf, 0x02, 0x6f, 0xfa, 0xd3, 0x93, 0x3f, 0x18, 0x41, 0xd4, 0x42, 0xaf, 0x37, 0x00, 0x4a, 0x4e, 0xa4, 0x50, 0x5f, 0x67, 0x32, 0x88, 0x2f, 0xa3, 0x2b, 0xbd, 0x0f, 0x6d, 0x41, 0x03, 0x8c, 0x33, 0xa0, 0x1c, 0x20, 0xa6, 0x1f, 0xa5, 0x03, 0xfc, 0x9a, 0xe3, 0xb2, 0x3e, 0xf0, 0x77, 0xe6, 0xcc, 0x46, 0xa5, 0x18, 0x5b, 0x4e, 0xad, 0x56, 0xa7, 0x89, 0xf9, 0x0e, 0xa9, 0xc0, 0xdd, 0x20, 0x2a, 0x57, 0x90, 0x83, 0xb5, 0x82, 0x14, 0x46, 0xc1, 0x73, 0x65, 0x66, 0xb9, 0xc1, 0x2f, 0x73, 0xba, 0x98, 0x0b, 0x10, 0x1a, 0x05, 0x54, 0x1a, 0x5b, 0x4e, 0x77, 0xd5, 0x51, 0xd6, 0xc1, 0xd7, 0x0a, 0xb8, 0x10, 0x2d, 0x1c, 0x10, 0x0f, 0xda, 0x16, 0xac, 0x3c, 0xe8, 0xf3, 0x0d, 0xda, 0xbf, 0x3d, 0xd0, 0xbe, 0x34, 0xdf, 0x70, 0x4f, 0xa0, 0x0b, 0x7d, 0x91, 0xda, 0x65, 0xfe, 0x0c, 0x9c, 0x71, 0xb1, 0x34, 0xa8, 0xe1, 0x79, 0x97, 0xda, 0x75, 0x4f, 0xa0, 0x27, 0x5a, 0xf0, 0xa6, 0xaf, 0x91, 0x0c, 0x7d, 0x3a, 0xd9, 0xe4, 0x37, 0xcc, 0x1c, 0x9b, 0x92, 0x99, 0x1a, 0x61, 0x3e, 0xbc, 0xbb, 0x5f, 0x7f, 0x92, 0x79, 0x36, 0xd5, 0xba, 0x1b, 0xcf, 0x14, 0x9d, 0x3d, 0x75, 0x27, 0x22, 0xd6, 0x48, 0x46, 0x59, 0x77, 0x89, 0x7d, 0x81, 0x72, 0x31, 0x98, 0xee, 0xc0, 0xc6, 0x3b, 0xd1, 0xb4, 0x9d, 0xbc, 0x5c, 0xb9, 0x84, 0x84, 0xcf, 0x34, 0x29, 0x87, 0x8a, 0xbb, 0xb9, 0x90, 0x0b, 0xdb, 0xdb, 0x42, 0x8b, 0x4b, 0xf5, 0x18, 0x4f, 0x3c, 0x77, 0x76, 0x96, 0xe8, 0xef, 0xcd, 0xb6, 0x3b, 0xe1, 0x54, 0xba, 0xd1, 0xd7, 0x39, 0x9a, 0xef, 0xc8, 0x68, 0x9e, 0x4a, 0xec, 0x29, 0x67, 0x9e, 0x74, 0xb4, 0xfb, 0xb0, 0x3e, 0xf3, 0x6b, 0x4e, 0xbf, 0xd9, 0x92, 0x4f, 0x11, 0x69, 0x09, 0xb8, 0x6e, 0x8b, 0x3e, 0xbd, 0xd5, 0x4e, 0xcb, 0x9c, 0xa2, 0x2d, 0xcb, 0x15, 0xa2, 0x5f, 0xc8, 0x66, 0x5b, 0x97, 0x6c, 0x55, 0x5f, 0xda, 0xd6, 0xd3, 0x7b, 0xa5, 0x4c, 0xff, 0x14, 0x3d, 0x70, 0x72, 0xb8, 0x5b, 0x8e, 0x7e, 0x69, 0x34, 0x3d, 0xe4, 0x07, 0xd4, 0x3a, 0xb2, 0x02, 0xf0, 0xe4, 0x3b, 0xc0, 0x5d, 0x2d, 0xa3, 0x72, 0x9c, 0x21, 0xa8, 0xc1, 0x77, 0x78, 0x06, 0xfc, 0xca, 0x6b, 0x66, 0xa8, 0x07, 0x3f, 0x1a, 0x47, 0xe4, 0xf8, 0x0e, 0xae, 0xcc, 0x54, 0xc6, 0x16, 0x41, 0x39, 0xce, 0xf7, 0xf8, 0xe4, 0xd0, 0x78, 0xa1, 0x21, 0x34, 0x4e, 0xb8, 0x1d, 0x6a, 0x16, 0xee, 0xaa, 0x73, 0xe8, 0xfe, 0x7a, 0x83, 0x51, 0x01, 0xf8, 0xba, 0x13, 0xce, 0xec, 0x94, 0xab, 0x32, 0xa5, 0x50, 0x87, 0xbb, 0x4a, 0xe8, 0x7d, 0x18, 0xdf, 0xe3, 0xae, 0x45, 0x37, 0xab, 0x7c, 0xab, 0xd3, 0x6b, 0x3d, 0x9d, 0x89, 0x1a, 0xb4, 0x1e, 0x07, 0xbc, 0x8c, 0xde, 0x61, 0xa7, 0x9e, 0x87, 0x24, 0x54, 0x46, 0x3c, 0xd0, 0xf2, 0x11, 0xac, 0x7c, 0xf9, 0xf2, 0xa3, 0x0b, 0xf6, 0xc2, 0x7a, 0xa4, 0xa2, 0x52, 0xa5, 0x53, 0xb5, 0xb8, 0xf6, 0x5a, 0xb9, 0x7c, 0xe6, 0x35, 0xb4, 0xaf, 0xcb, 0x6b, 0x68, 0x08, 0x7d, 0x5f, 0xcc, 0x3c, 0x05, 0xaa, 0x8c, 0xb0, 0x8e, 0xa3, 0xad, 0x40, 0x37, 0x8f, 0xe9, 0x2a, 0xd7, 0x0a, 0xaa, 0xa0, 0x71, 0x27, 0xbe, 0xb2, 0x9f, 0xf3, 0xc5, 0x75, 0x9a, 0xf9, 0xf8, 0x1b, 0x22, 0x54, 0xe3, 0x29, 0x82, 0x0e, 0x4f, 0x11, 0xa0, 0x5d, 0xb4, 0x61, 0x44, 0xa5, 0xcd, 0x27, 0x9a, 0xd0, 0x3c, 0xc2, 0x0b, 0x3b, 0x75, 0xa1, 0xf2, 0x03, 0x9a, 0x50, 0xf9, 0x4e, 0x7d, 0xa8, 0x7c, 0x0f, 0xae, 0xf7, 0x44, 0x52, 0x4c, 0xe8, 0xba, 0x24, 0x33, 0xe4, 0x91, 0x2c, 0x5c, 0xf5, 0xa1, 0x05, 0xaa, 0x8b, 0xfc, 0x6a, 0x26, 0x43, 0x78, 0xc0, 0xf2, 0xa1, 0x50, 0x53, 0xac, 0x3c, 0x3c, 0x19, 0x5a, 0xe6, 0x68, 0x68, 0x19, 0xb9, 0xb8, 0x25, 0xb3, 0x59, 0xf7, 0xd2, 0xf6, 0xa1, 0x50, 0x8d, 0x9e, 0xa1, 0x98, 0x45, 0x1d, 0x97, 0xd5, 0xd3, 0x66, 0x2f, 0xa5, 0x1a, 0xa2, 0x41, 0xad, 0xa1, 0xbb, 0xa2, 0xdd, 0x54, 0xf4, 0x1d, 0xd5, 0xa3, 0x40, 0xa8, 0x26, 0x8a, 0x71, 0xc2, 0xf0, 0xa9, 0xa1, 0x09, 0xc2, 0x1e, 0x9d, 0xdf, 0xe0, 0xa9, 0x13, 0x6b, 0xcf, 0xce, 0x2e, 0x6b, 0x38, 0x33, 0xbb, 0x48, 0x79, 0xba, 0x7c, 0x60, 0xe3, 0xbd, 0x0b, 0x7c, 0x92, 0x31, 0x4c, 0xd8, 0x49, 0xf9, 0xa8, 0x30, 0xe1, 0x36, 0xcc, 0xd0, 0x30, 0xa1, 0x81, 0x4a, 0x6c, 0x66, 0xa9, 0x4c, 0x54, 0x2e, 0x47, 0xa5, 0x24, 0xa8, 0xfd, 0x86, 0x74, 0x70, 0x7c, 0x1d, 0x69, 0x7f, 0x64, 0xef, 0x91, 0xbd, 0xdd, 0x3e, 0x14, 0x6e, 0xef, 0x21, 0x43, 0x2b, 0x38, 0x45, 0x4d, 0x45, 0x4d, 0x79, 0xb1, 0xa4, 0xc7, 0x24, 0x05, 0x51, 0x43, 0x4e, 0x50, 0x2b, 0x65, 0x68, 0x81, 0xb0, 0x47, 0xa8, 0x85, 0xde, 0xad, 0x43, 0xdf, 0x30, 0xa1, 0xfd, 0x85, 0x2b, 0x90, 0x73, 0xbd, 0x9a, 0xce, 0x48, 0x67, 0xff, 0xa2, 0xd6, 0x45, 0x91, 0x50, 0x35, 0xc5, 0x3e, 0x35, 0xd4, 0x22, 0xd4, 0x60, 0xfe, 0xd0, 0xfb, 0x07, 0x38, 0x48, 0xc1, 0xa8, 0x43, 0x39, 0xf4, 0x7b, 0xb9, 0x1a, 0x5f, 0xf9, 0x64, 0x42, 0xe4, 0xb5, 0xcd, 0xda, 0x2e, 0xf7, 0x0e, 0xc4, 0xfd, 0x2c, 0x3f, 0xa9, 0x4e, 0x69, 0xf6, 0x35, 0xee, 0xf6, 0x6e, 0x97, 0x68, 0x55, 0x6c, 0xd1, 0x3e, 0xa0, 0x9f, 0xf0, 0xd4, 0x61, 0x09, 0x3b, 0x75, 0xa8, 0x47, 0x3a, 0xc7, 0xc0, 0xfa, 0x85, 0x9e, 0x63, 0x8c, 0x05, 0x0a, 0x41, 0x47, 0x78, 0x8d, 0x4e, 0x7e, 0x40, 0x97, 0x23, 0xaf, 0xd6, 0xe6, 0xc8, 0x77, 0x42, 0x6b, 0x85, 0x8b, 0x7e, 0xb7, 0x19, 0x8d, 0x45, 0x88, 0x0f, 0xb4, 0x6f, 0x74, 0xf6, 0x28, 0x7a, 0x8d, 0x5e, 0xe1, 0xae, 0x64, 0x47, 0xd0, 0x6b, 0x29, 0x5c, 0x6f, 0xcc, 0xf6, 0xa7, 0xd7, 0x12, 0x3b, 0x91, 0xec, 0x04, 0x2a, 0x60, 0x09, 0xbd, 0xf3, 0x40, 0xfb, 0x3b, 0xf4, 0x4a, 0x06, 0xcf, 0xd7, 0xf0, 0xce, 0x3b, 0x2f, 0xb4, 0x0b, 0x3d, 0x9a, 0x90, 0x4d, 0xf4, 0x0e, 0xbd, 0x36, 0xef, 0xa1, 0x57, 0xde, 0x10, 0x6b, 0x3a, 0xc4, 0xda, 0x45, 0xef, 0xda, 0x41, 0x7e, 0x24, 0x5b, 0x4b, 0xaf, 0xd1, 0x82, 0xc1, 0x51, 0xf8, 0x62, 0x27, 0xbd, 0x43, 0xbb, 0x1d, 0x87, 0xe9, 0x95, 0x3f, 0x7c, 0x91, 0x09, 0x5f, 0x1c, 0xa4, 0x77, 0xed, 0xd1, 0x26, 0xca, 0x68, 0x22, 0x91, 0xd2, 0xbb, 0x00, 0xb8, 0x43, 0x9f, 0xe9, 0x12, 0x5a, 0xaa, 0x70, 0x58, 0x29, 0xfc, 0x01, 0x53, 0xa2, 0x2c, 0x29, 0xe0, 0x51, 0xb4, 0x8b, 0xea, 0xba, 0xf3, 0x41, 0xb9, 0x70, 0xd7, 0x9d, 0x14, 0xee, 0xae, 0xb8, 0xee, 0xbc, 0xe1, 0xee, 0x2c, 0xbb, 0xcb, 0xa3, 0x77, 0x35, 0x30, 0xeb, 0x14, 0xe8, 0x0b, 0x5e, 0x5d, 0x81, 0xbe, 0xc4, 0xf0, 0x4e, 0xbd, 0x92, 0x94, 0x61, 0xb9, 0xd9, 0x75, 0x39, 0xca, 0x92, 0xb3, 0xeb, 0xa9, 0x70, 0xbd, 0x96, 0x5d, 0x63, 0xfc, 0xb7, 0xd8, 0x35, 0xd2, 0x4a, 0x8b, 0xd9, 0x35, 0xee, 0x09, 0xcf, 0x60, 0xd7, 0x0b, 0xf9, 0x89, 0xec, 0x6a, 0x09, 0x5f, 0xa2, 0x19, 0xd3, 0x8c, 0x1f, 0x8a, 0x02, 0xe9, 0x6c, 0xa8, 0x87, 0x51, 0xdf, 0x00, 0x70, 0x1b, 0xc0, 0x89, 0x23, 0xea, 0x9d, 0x63, 0xc8, 0x64, 0xd6, 0x54, 0xa4, 0xcd, 0xe5, 0x63, 0x5d, 0xe5, 0x55, 0xf0, 0x9c, 0xeb, 0xda, 0x97, 0x0f, 0x74, 0x5d, 0xfb, 0xf0, 0xac, 0xf6, 0xb0, 0x5e, 0xe4, 0x50, 0x1d, 0x08, 0x18, 0x61, 0x8d, 0x97, 0x71, 0x64, 0xbb, 0xd1, 0xca, 0x63, 0xef, 0xa7, 0x95, 0x61, 0x24, 0xc9, 0x84, 0x33, 0x4c, 0x5b, 0xac, 0x01, 0xed, 0x32, 0xe8, 0xd0, 0x7a, 0x2a, 0xac, 0x75, 0xc0, 0x57, 0xc4, 0xc2, 0xec, 0x43, 0x6e, 0x37, 0x4b, 0x0b, 0x23, 0x49, 0x9c, 0x6f, 0x48, 0xd1, 0x0f, 0x40, 0xbb, 0xea, 0x89, 0xe8, 0x85, 0xb0, 0x54, 0x7b, 0x12, 0x25, 0xeb, 0xb7, 0x52, 0x9f, 0xf6, 0x84, 0xf8, 0x3a, 0x72, 0xb2, 0xf5, 0x6c, 0x0c, 0x24, 0x65, 0x2b, 0xc5, 0xb1, 0x81, 0xa7, 0x3b, 0xbc, 0x49, 0x1c, 0x0f, 0x8e, 0x68, 0x71, 0xe4, 0xc1, 0xb3, 0x0a, 0x3e, 0x92, 0xf5, 0x7d, 0xc2, 0xe8, 0x18, 0xb1, 0xef, 0x1d, 0x16, 0xa4, 0xf9, 0x89, 0xd4, 0x9e, 0xcb, 0x9b, 0xbb, 0xa3, 0xdf, 0xbf, 0x32, 0x9e, 0xa7, 0x61, 0x39, 0x9f, 0x45, 0xc3, 0xa9, 0x7c, 0x1a, 0x0d, 0x2b, 0x78, 0x2b, 0x0d, 0x67, 0xb1, 0x78, 0x95, 0x7c, 0x34, 0x0d, 0x17, 0xf2, 0x26, 0x1a, 0x2e, 0xe1, 0x75, 0xcc, 0xfa, 0x93, 0xe8, 0x9b, 0x50, 0x79, 0x78, 0x8a, 0x31, 0x8e, 0x68, 0xfb, 0x99, 0x89, 0x9e, 0x1b, 0x03, 0x73, 0x54, 0x66, 0xf4, 0xc6, 0x1d, 0x32, 0xc4, 0xc1, 0xdc, 0x40, 0xca, 0x5f, 0x3a, 0x3d, 0x0a, 0x46, 0x33, 0x4d, 0x22, 0x27, 0xd6, 0x49, 0x6c, 0x69, 0x69, 0x99, 0x5a, 0x2e, 0x50, 0xd2, 0x59, 0x07, 0x54, 0xb9, 0x29, 0x06, 0xb0, 0x20, 0x9d, 0x75, 0x5c, 0x3c, 0xf2, 0x17, 0x9c, 0x81, 0xf0, 0xb0, 0x7e, 0xeb, 0xb0, 0x95, 0x82, 0x09, 0xe4, 0xba, 0x46, 0xbe, 0x13, 0x70, 0x5c, 0x2d, 0xf4, 0x6c, 0x1d, 0xc0, 0x15, 0x80, 0x7a, 0xa4, 0x06, 0x84, 0x5a, 0xa6, 0xa7, 0x82, 0x76, 0x6e, 0x46, 0x69, 0x94, 0xf7, 0x63, 0x01, 0xf5, 0x00, 0x17, 0x06, 0x90, 0x01, 0xc7, 0x52, 0x46, 0x35, 0xda, 0x35, 0xea, 0x50, 0x22, 0x6a, 0xcc, 0xfb, 0x8b, 0xab, 0x0a, 0x8e, 0x18, 0xaa, 0xdd, 0xd8, 0x40, 0x35, 0x9a, 0x4d, 0x54, 0x6a, 0x16, 0xe2, 0xd0, 0x98, 0x65, 0x34, 0xa6, 0x57, 0x9b, 0x31, 0xe5, 0x2c, 0x66, 0x39, 0x8d, 0xb9, 0x90, 0xc6, 0xf4, 0x6b, 0x2b, 0xe6, 0xed, 0x33, 0x2c, 0xe6, 0x42, 0x1a, 0xb3, 0x9c, 0xc6, 0x54, 0xb4, 0x19, 0x73, 0x1d, 0x8b, 0x39, 0x95, 0xc6, 0xac, 0xa4, 0x31, 0x95, 0x6d, 0xc6, 0xac, 0x60, 0x31, 0x2b, 0x69, 0xcc, 0xa9, 0x34, 0xa6, 0x77, 0x9b, 0x31, 0x9f, 0x62, 0x31, 0x67, 0xd1, 0x98, 0x15, 0x34, 0xa6, 0x4f, 0x9b, 0x31, 0x23, 0x59, 0xcc, 0x0a, 0x1a, 0x73, 0x16, 0x8d, 0xe9, 0xdb, 0x66, 0x4c, 0xb4, 0x76, 0xa1, 0xdc, 0x70, 0x45, 0xbe, 0xc9, 0xae, 0xe5, 0x0c, 0xf2, 0x93, 0xd0, 0xef, 0x95, 0x43, 0xa9, 0xed, 0x44, 0x88, 0x53, 0x2a, 0x08, 0x08, 0xd5, 0x93, 0x44, 0x3b, 0x01, 0x49, 0xd4, 0x8e, 0x81, 0x3b, 0x06, 0x16, 0x6d, 0xc1, 0xd0, 0x95, 0x4d, 0x1c, 0x1f, 0x05, 0x6e, 0xeb, 0xa6, 0x38, 0x9b, 0x94, 0xc2, 0x01, 0xb6, 0xa2, 0x2b, 0x71, 0x26, 0x02, 0xaf, 0x4a, 0x5c, 0x54, 0x85, 0x49, 0x2d, 0x62, 0x69, 0x3c, 0x69, 0x46, 0x5e, 0x9d, 0x57, 0xc3, 0xbc, 0x02, 0xec, 0xbc, 0x47, 0xf4, 0xdf, 0x07, 0x34, 0x87, 0xf2, 0x50, 0x75, 0x51, 0xfb, 0x9a, 0xd5, 0x44, 0x56, 0x53, 0x5e, 0x53, 0xae, 0x81, 0xb5, 0xc9, 0x31, 0xdc, 0x85, 0x2f, 0x82, 0x6a, 0x26, 0x01, 0xbe, 0x68, 0x80, 0xd5, 0xe4, 0xf6, 0xfd, 0xb4, 0x84, 0xcd, 0xec, 0xa0, 0x76, 0xa1, 0x8b, 0x3c, 0x78, 0x2d, 0x95, 0x80, 0xb8, 0x8b, 0xd8, 0x8d, 0xca, 0xeb, 0xd5, 0xd2, 0x5a, 0xe0, 0x3b, 0xef, 0x2a, 0x68, 0x8b, 0x74, 0x6a, 0x91, 0x34, 0x13, 0x38, 0x50, 0xe0, 0xa6, 0x73, 0xb1, 0x84, 0xf8, 0xcb, 0xa9, 0x52, 0xae, 0x2a, 0x95, 0x42, 0xad, 0x73, 0x4d, 0xa1, 0xfe, 0x94, 0x0b, 0xa8, 0x2e, 0xa5, 0x8a, 0x52, 0xfe, 0x1c, 0x52, 0x43, 0xea, 0x67, 0x15, 0xce, 0x59, 0xa5, 0x54, 0xeb, 0x44, 0x7d, 0x22, 0xf4, 0x3d, 0x5f, 0x12, 0x78, 0x74, 0xb5, 0xfc, 0x00, 0x94, 0x0c, 0xf5, 0x71, 0x5d, 0x14, 0x0f, 0xce, 0x35, 0x8a, 0xcd, 0x5c, 0xb3, 0xcd, 0x5a, 0xad, 0x09, 0x13, 0xea, 0x34, 0x05, 0xc2, 0x15, 0xcc, 0x07, 0xbd, 0xed, 0xc6, 0xe2, 0x4e, 0xa9, 0x46, 0x83, 0x5c, 0x3a, 0xb4, 0x89, 0x1e, 0xda, 0x44, 0x6c, 0x0b, 0xe0, 0xdb, 0x75, 0x27, 0xaa, 0x93, 0x7f, 0x26, 0x09, 0x25, 0xa4, 0x34, 0xe4, 0xe4, 0xdc, 0x71, 0xde, 0xc7, 0x57, 0xca, 0xf7, 0xf4, 0x6f, 0xbc, 0x15, 0xc4, 0x75, 0x76, 0x68, 0xe9, 0x6e, 0x86, 0x07, 0x4a, 0xb0, 0xd0, 0xba, 0x19, 0x49, 0x48, 0x15, 0xb4, 0x99, 0xdd, 0x9f, 0xd6, 0x64, 0x72, 0x91, 0x7f, 0xd5, 0x64, 0x7b, 0x00, 0xaf, 0x48, 0x17, 0xaf, 0x0e, 0xd2, 0xba, 0x0b, 0xc0, 0x5d, 0x8b, 0xf5, 0x3c, 0x17, 0x12, 0x9b, 0x35, 0xf7, 0x3f, 0xaa, 0x65, 0xc7, 0xff, 0xa4, 0x96, 0xac, 0xff, 0xeb, 0xb1, 0xef, 0xb1, 0x8e, 0x90, 0x2a, 0x62, 0x89, 0x1e, 0x62, 0x5e, 0x47, 0xb6, 0xc3, 0x18, 0xd8, 0x99, 0x3e, 0x09, 0x52, 0xab, 0x2f, 0xf6, 0x80, 0x5f, 0xd7, 0x5a, 0x40, 0x31, 0x45, 0x3d, 0xee, 0x77, 0x88, 0x98, 0xe2, 0xd7, 0x18, 0x8a, 0x7b, 0x46, 0xfc, 0xdd, 0xd4, 0xdc, 0xd7, 0x95, 0xd6, 0x69, 0x35, 0xfc, 0xe2, 0x9e, 0xd6, 0xbf, 0xd9, 0x0a, 0x1d, 0xfe, 0x93, 0x56, 0x40, 0x29, 0x14, 0xe0, 0x6a, 0x0a, 0xe8, 0x5e, 0x0e, 0x1b, 0xeb, 0x9a, 0x22, 0x05, 0x8e, 0x59, 0xa5, 0x6d, 0x35, 0x51, 0x3c, 0xc1, 0xec, 0xe4, 0xe2, 0xec, 0xa8, 0x86, 0xbe, 0x44, 0x4a, 0xb8, 0xb8, 0xfd, 0xe1, 0x55, 0x90, 0x53, 0x9c, 0x50, 0x07, 0x39, 0x5c, 0x01, 0x4a, 0xeb, 0x36, 0x50, 0x5a, 0xf5, 0x45, 0x0a, 0x9c, 0x05, 0x6c, 0x06, 0xd4, 0x35, 0xcf, 0x00, 0xb4, 0x3a, 0x2a, 0x34, 0x41, 0x7e, 0xb5, 0x2e, 0x8a, 0xba, 0x90, 0x96, 0x5e, 0x23, 0xe2, 0x64, 0xa4, 0xf6, 0x0f, 0x6d, 0xef, 0x0a, 0x34, 0x29, 0x59, 0x01, 0xbf, 0x0a, 0xf2, 0x0e, 0x70, 0x63, 0x28, 0x7b, 0x2c, 0xe3, 0x49, 0x03, 0x72, 0x0f, 0xa2, 0x66, 0x1c, 0x8d, 0xc7, 0x41, 0xc9, 0xd8, 0xd7, 0x8a, 0xea, 0x55, 0x44, 0x86, 0x3e, 0x69, 0x9d, 0x25, 0x74, 0xd2, 0x5c, 0x26, 0x2a, 0x51, 0x43, 0x25, 0x3d, 0x00, 0xf7, 0xab, 0x43, 0xe9, 0x0a, 0x09, 0xdf, 0xe3, 0x7a, 0x70, 0xac, 0x1a, 0x77, 0xbb, 0x3e, 0xbe, 0x4c, 0x96, 0x39, 0xec, 0xea, 0x34, 0xa0, 0xb8, 0x54, 0x6a, 0xb3, 0x0d, 0xe8, 0xae, 0xfc, 0xe1, 0xea, 0x5c, 0x71, 0x5d, 0x8a, 0xcd, 0x21, 0xf2, 0x28, 0x94, 0xba, 0xf9, 0x92, 0x33, 0x63, 0x2e, 0x25, 0x3e, 0x47, 0x27, 0xd1, 0x36, 0xc5, 0x19, 0x1e, 0x0f, 0x35, 0x4d, 0xbd, 0xbf, 0x4d, 0x23, 0x51, 0x8f, 0x57, 0xf5, 0x08, 0xa4, 0x4c, 0x96, 0x89, 0xe7, 0x9f, 0x37, 0xd3, 0xd3, 0xe6, 0x9a, 0xa4, 0xd6, 0x6a, 0x5e, 0xce, 0xf4, 0x32, 0x10, 0xff, 0x9c, 0xa4, 0xed, 0xfd, 0x2c, 0x50, 0x85, 0x68, 0xa9, 0x3b, 0xb0, 0x48, 0xdd, 0x5a, 0xdf, 0x9b, 0xee, 0xd0, 0xa5, 0x74, 0x10, 0xf5, 0xbd, 0xf5, 0x2d, 0xf5, 0xbd, 0x3b, 0xb4, 0xd2, 0xf7, 0x7e, 0x04, 0xf5, 0xbd, 0x2f, 0x93, 0xc0, 0x47, 0x50, 0xdf, 0x7b, 0x35, 0x09, 0x86, 0xeb, 0x60, 0xb8, 0x0e, 0xec, 0x6e, 0x23, 0x8a, 0xde, 0x4e, 0x5d, 0x6f, 0xa9, 0xc5, 0x82, 0x1a, 0xab, 0x7f, 0xa6, 0xe7, 0xcd, 0xd9, 0xdc, 0x34, 0xba, 0xfd, 0xd5, 0xe6, 0x22, 0x43, 0xb3, 0xde, 0x9c, 0xdb, 0xbb, 0x59, 0xb0, 0x0a, 0x5f, 0xe0, 0x0f, 0x03, 0x2d, 0xb2, 0x93, 0x69, 0xb4, 0xa5, 0x18, 0x6d, 0x24, 0xa6, 0x95, 0x46, 0x5b, 0x5f, 0xf4, 0x3a, 0xf9, 0x27, 0x1a, 0x6d, 0x37, 0x98, 0x46, 0x9b, 0x82, 0x04, 0x01, 0x97, 0x24, 0x6a, 0xb3, 0xc9, 0x48, 0x17, 0xe4, 0x7e, 0xcc, 0x84, 0xa8, 0x99, 0xb6, 0x9b, 0x16, 0xb5, 0xdd, 0x76, 0xaf, 0x24, 0x7a, 0xa6, 0xed, 0x16, 0x1e, 0x77, 0x8d, 0x58, 0x99, 0xb6, 0x5b, 0x04, 0x5a, 0x19, 0xfb, 0x4b, 0x6d, 0xb7, 0x24, 0xaa, 0xed, 0x66, 0x21, 0x0b, 0xff, 0x50, 0xdb, 0x2d, 0xd6, 0xe9, 0x21, 0x81, 0x79, 0x3c, 0x48, 0x67, 0x3c, 0xa6, 0xce, 0x29, 0x91, 0xa5, 0x2d, 0x20, 0x81, 0x30, 0x62, 0x82, 0xfb, 0x14, 0x10, 0xb5, 0x10, 0xd3, 0x37, 0x8c, 0x68, 0x45, 0xce, 0x47, 0x7e, 0xc9, 0xf6, 0x21, 0xda, 0x87, 0x97, 0x9f, 0xb5, 0xa1, 0x17, 0xd0, 0x60, 0xca, 0xcf, 0x29, 0x42, 0xd1, 0x62, 0x9c, 0x92, 0x57, 0x01, 0xd7, 0xf4, 0xfd, 0xab, 0xde, 0x78, 0x45, 0x9f, 0xfb, 0x00, 0xf5, 0x11, 0x8e, 0x36, 0x04, 0xed, 0xc1, 0xf3, 0xf6, 0x00, 0x27, 0xa0, 0x83, 0x32, 0x48, 0x75, 0xd8, 0xcb, 0x44, 0xbe, 0x1c, 0x46, 0x54, 0x14, 0x8f, 0x16, 0x1c, 0xa2, 0xa8, 0x1f, 0x89, 0x40, 0xe0, 0xd8, 0x70, 0x5d, 0x86, 0x79, 0x27, 0xe2, 0x86, 0x32, 0x29, 0xaf, 0xa4, 0x77, 0x14, 0x5b, 0x94, 0x49, 0xa0, 0x54, 0x3a, 0x3c, 0xcd, 0x83, 0x11, 0x5c, 0x11, 0x95, 0x43, 0x4b, 0xa7, 0xb2, 0x24, 0x58, 0xe2, 0xe3, 0xaf, 0x50, 0x9b, 0x2d, 0x11, 0xa1, 0xf0, 0x5e, 0x30, 0x6b, 0xf4, 0x44, 0xd4, 0x4b, 0x14, 0xf7, 0xe9, 0x0b, 0x84, 0x08, 0x58, 0x27, 0x13, 0x51, 0x7f, 0x1c, 0xbf, 0x83, 0xf9, 0x16, 0x18, 0xa9, 0x27, 0xb2, 0x42, 0x69, 0x8d, 0x05, 0x42, 0x79, 0xa1, 0xf4, 0xb0, 0xa5, 0x2a, 0xbe, 0x50, 0x1a, 0x45, 0xd6, 0xa1, 0x76, 0xb9, 0x04, 0xf0, 0x88, 0x8a, 0xea, 0x96, 0x6f, 0x02, 0x4e, 0xca, 0x4c, 0x74, 0x91, 0xbe, 0x47, 0x07, 0xc8, 0x2d, 0xe4, 0x21, 0x95, 0x81, 0x74, 0xb3, 0x96, 0x1f, 0x35, 0x43, 0xa8, 0xc5, 0xf0, 0x68, 0xc2, 0x36, 0xcb, 0x33, 0xd2, 0x48, 0x2f, 0x98, 0x59, 0x52, 0xa8, 0x47, 0x82, 0x29, 0x9f, 0xf8, 0x7f, 0x5c, 0x5d, 0x40, 0x3c, 0xd7, 0xcb, 0xe3, 0x81, 0x9b, 0xb9, 0x0a, 0xf5, 0xb0, 0x42, 0x59, 0xac, 0x96, 0x04, 0x5a, 0x2a, 0x2b, 0x1f, 0xd2, 0x2c, 0x2b, 0x46, 0xcb, 0x94, 0x2c, 0x96, 0xa9, 0x2a, 0xe1, 0x19, 0x69, 0x34, 0x09, 0xef, 0x64, 0x47, 0x2b, 0x33, 0x56, 0xa2, 0xeb, 0x2b, 0x93, 0x27, 0x13, 0xd5, 0x04, 0x12, 0xe3, 0xd5, 0x27, 0x09, 0x62, 0x79, 0xa6, 0x95, 0x6f, 0xdf, 0x35, 0xd8, 0x1c, 0x6c, 0x20, 0x1a, 0xeb, 0xd4, 0x88, 0x84, 0xf8, 0x9f, 0x48, 0x60, 0x9f, 0xfe, 0x42, 0xdf, 0xaa, 0xf8, 0xd1, 0x9d, 0xd0, 0xbe, 0x3f, 0xda, 0x0f, 0x11, 0x84, 0xf9, 0x53, 0xd4, 0x12, 0x71, 0x3f, 0xec, 0x48, 0x81, 0xd0, 0x37, 0x8a, 0x6c, 0x2c, 0x10, 0x62, 0x46, 0xc9, 0xa2, 0xc2, 0x84, 0x18, 0x28, 0xed, 0x23, 0xd6, 0xf2, 0x93, 0xe6, 0xb4, 0x84, 0x93, 0xf1, 0x50, 0x52, 0x19, 0x94, 0x52, 0xf9, 0x71, 0x75, 0x3e, 0xf1, 0x34, 0xf1, 0xc4, 0xd3, 0x47, 0xf4, 0x0b, 0xfc, 0x6a, 0xb0, 0xd8, 0x2f, 0xf7, 0xa6, 0x42, 0x3d, 0xac, 0x0e, 0x22, 0xbb, 0xa1, 0xc2, 0xdc, 0xca, 0x03, 0xf0, 0xdb, 0x49, 0xe3, 0x6e, 0x2f, 0x8e, 0x8b, 0x8a, 0x5f, 0x5c, 0x7d, 0x7c, 0x67, 0x96, 0x19, 0xb5, 0x05, 0xed, 0x7d, 0x21, 0x5f, 0xdf, 0xf9, 0xd3, 0xf4, 0x12, 0x2a, 0x13, 0x3a, 0xed, 0xb4, 0x79, 0x1c, 0x59, 0xb4, 0x0f, 0xfa, 0x27, 0x82, 0x93, 0x67, 0x94, 0x43, 0x0a, 0x29, 0x6a, 0xc8, 0x37, 0x01, 0xf1, 0x7c, 0x26, 0xf5, 0xc2, 0xb4, 0x0b, 0xda, 0x21, 0x8b, 0xb6, 0x81, 0x1e, 0x38, 0xa1, 0xd8, 0x18, 0xc4, 0x85, 0x11, 0xdb, 0x77, 0x2f, 0xae, 0xe6, 0x77, 0x6d, 0xfc, 0x50, 0x48, 0x71, 0xc8, 0x23, 0x3c, 0xd2, 0xa9, 0xb5, 0x5e, 0xb1, 0x65, 0x81, 0x0b, 0xcd, 0xac, 0xac, 0x86, 0x16, 0x4a, 0x88, 0xbb, 0x5e, 0x81, 0x6d, 0x98, 0x66, 0x2d, 0x25, 0xd1, 0xd4, 0x32, 0xd3, 0x1a, 0x48, 0x33, 0xdc, 0x65, 0x9d, 0xc9, 0x83, 0xa8, 0x84, 0x35, 0x90, 0x57, 0xb8, 0x29, 0x0e, 0x62, 0x55, 0xd1, 0x27, 0x0f, 0x0b, 0xeb, 0x43, 0x6d, 0xc2, 0x26, 0x7a, 0x2d, 0x11, 0xb6, 0xa2, 0x5f, 0x5f, 0xe4, 0xee, 0xe9, 0xbd, 0x87, 0xb0, 0x13, 0x5a, 0x38, 0x4d, 0xd8, 0x43, 0xef, 0x7c, 0x84, 0x03, 0xd8, 0xde, 0x42, 0x0d, 0xbd, 0x0b, 0x12, 0x8e, 0x52, 0x3b, 0x4e, 0x27, 0x21, 0x2f, 0x15, 0xcd, 0xab, 0xd6, 0x2d, 0x1f, 0x6f, 0xe0, 0xa7, 0x53, 0x85, 0x3a, 0xd6, 0x5a, 0x9a, 0xc4, 0xab, 0xc2, 0x1a, 0x43, 0x81, 0xa0, 0xc7, 0x16, 0xa3, 0x52, 0x95, 0xc1, 0xb6, 0x78, 0xbb, 0x0c, 0xbe, 0x8e, 0xa0, 0xe3, 0xc6, 0x07, 0xd2, 0xd5, 0x13, 0x1d, 0x4f, 0x3c, 0x96, 0x72, 0x36, 0x58, 0x19, 0x6a, 0x59, 0xdc, 0x52, 0x43, 0x7c, 0xfa, 0x9c, 0xad, 0x73, 0x1c, 0x51, 0xd8, 0x7e, 0xa7, 0x93, 0x81, 0xcf, 0x4f, 0xa9, 0x44, 0xef, 0xaf, 0x12, 0x67, 0xad, 0x70, 0xbf, 0xf6, 0xb4, 0x19, 0xea, 0x9f, 0x65, 0x2d, 0x8a, 0x26, 0x58, 0xb3, 0x66, 0xc9, 0xcc, 0xe3, 0xd5, 0x5a, 0x7f, 0x68, 0x13, 0x73, 0xd6, 0x87, 0x82, 0xd9, 0xf0, 0x24, 0xd5, 0x6f, 0x26, 0x4d, 0x3b, 0xc4, 0x9c, 0x6c, 0xd0, 0xf6, 0x0e, 0xe2, 0x11, 0x5b, 0xe4, 0xef, 0xae, 0x1d, 0x7f, 0x2f, 0x93, 0xe2, 0x52, 0xe2, 0x11, 0x38, 0x91, 0xf4, 0x95, 0xc1, 0x78, 0x92, 0xa2, 0x05, 0x4f, 0x93, 0x64, 0x5c, 0xbb, 0x4b, 0x39, 0x35, 0x71, 0x17, 0xcc, 0x51, 0xe6, 0x0b, 0x29, 0xd2, 0xa9, 0x38, 0x7a, 0x5e, 0xd9, 0x09, 0x6f, 0xfc, 0x4d, 0x12, 0xf1, 0x79, 0xac, 0xf9, 0x82, 0x4d, 0x3a, 0x19, 0x9f, 0xbf, 0xbe, 0x03, 0x78, 0x88, 0x10, 0xe9, 0x14, 0xe1, 0xdc, 0xef, 0x5f, 0x90, 0x78, 0x99, 0x59, 0x17, 0x8b, 0xf6, 0x1e, 0x20, 0xb7, 0x28, 0x87, 0x9c, 0x5e, 0xbf, 0xa0, 0xf1, 0x93, 0x4f, 0x16, 0x04, 0x61, 0x38, 0xb4, 0x5a, 0x1a, 0x93, 0xea, 0x73, 0x5a, 0xce, 0xb2, 0x0b, 0xc3, 0x43, 0x93, 0x05, 0x9e, 0x59, 0x99, 0x19, 0x15, 0x9a, 0x28, 0xe4, 0x30, 0xbb, 0x34, 0xf9, 0xa1, 0x03, 0x84, 0x22, 0x66, 0x95, 0xa6, 0x04, 0xda, 0xb5, 0x94, 0x5e, 0xe7, 0x0a, 0x65, 0xb0, 0xb6, 0x88, 0x54, 0x7c, 0xbe, 0x30, 0x15, 0x6a, 0x16, 0x21, 0x88, 0x54, 0xf5, 0x58, 0x61, 0x16, 0x8c, 0x1e, 0xa5, 0x50, 0x19, 0x9a, 0x20, 0x2c, 0x0c, 0x4d, 0x11, 0xc4, 0xf4, 0xf3, 0x84, 0x65, 0x80, 0x69, 0x24, 0x2a, 0xb9, 0xb0, 0x62, 0xde, 0x1e, 0xc0, 0x6f, 0xe2, 0x08, 0x7e, 0x4b, 0x6b, 0xa6, 0x92, 0xc7, 0xc0, 0xc3, 0x4b, 0x55, 0xb4, 0xa4, 0x68, 0xc7, 0xad, 0x40, 0x88, 0x62, 0xef, 0xef, 0xc2, 0xda, 0x50, 0xaa, 0xf9, 0x90, 0xae, 0x17, 0xb2, 0x47, 0x20, 0x0f, 0xa2, 0xe8, 0x95, 0x04, 0x6b, 0x29, 0xc3, 0x2b, 0x41, 0xa1, 0x24, 0xca, 0x3a, 0xc5, 0xfa, 0x65, 0x60, 0x28, 0xe9, 0x6d, 0x9d, 0x6c, 0xdd, 0x11, 0x0b, 0xbc, 0xd0, 0xeb, 0x5f, 0xaa, 0x42, 0x51, 0xa2, 0x6e, 0x59, 0xf5, 0x60, 0x94, 0x0c, 0x8d, 0x49, 0x28, 0x57, 0x9b, 0xe1, 0xc9, 0x63, 0xd6, 0xf2, 0xf9, 0xd5, 0x68, 0xa1, 0x6e, 0xde, 0x8e, 0xc4, 0xeb, 0x15, 0x57, 0x9a, 0xc7, 0xa8, 0xab, 0x0d, 0xa4, 0x30, 0x02, 0xd7, 0x64, 0x4d, 0x81, 0x5a, 0x55, 0xd1, 0x3b, 0xa9, 0xb0, 0x3e, 0x6b, 0x32, 0xac, 0xa3, 0x9b, 0xe8, 0x9d, 0x87, 0xb0, 0x15, 0xea, 0x5e, 0x4d, 0xaf, 0x65, 0x30, 0x32, 0x6d, 0x74, 0x5c, 0x4a, 0x49, 0x07, 0xe1, 0x00, 0xb5, 0xc2, 0x53, 0x43, 0xef, 0x3a, 0x0a, 0x47, 0xb9, 0x14, 0x56, 0xf6, 0x54, 0x1d, 0xab, 0x99, 0x24, 0x07, 0x56, 0xb4, 0x08, 0x8d, 0x19, 0x69, 0x46, 0x8a, 0x43, 0xb6, 0xa1, 0xa5, 0x57, 0x4a, 0x49, 0xf8, 0x8b, 0xfa, 0xf8, 0xf8, 0xbe, 0x84, 0xe0, 0xbb, 0xbb, 0x68, 0xcf, 0x22, 0xa2, 0x2b, 0xe0, 0xe4, 0x59, 0x21, 0xd4, 0x62, 0x4c, 0x44, 0x7b, 0x2a, 0x23, 0xa5, 0xc2, 0x9a, 0x96, 0x07, 0x60, 0x3d, 0x27, 0xa1, 0x0d, 0xbe, 0x40, 0xac, 0xe3, 0xe4, 0x48, 0xa8, 0x4f, 0x10, 0xd6, 0x6d, 0x0a, 0xa6, 0x80, 0xa7, 0x9f, 0x95, 0x3b, 0x34, 0x8a, 0x85, 0x5f, 0x6a, 0x7d, 0x30, 0xad, 0xa6, 0x83, 0xf8, 0xbd, 0x65, 0xa5, 0x98, 0x8e, 0x45, 0x47, 0x1e, 0x72, 0xe2, 0x0f, 0x71, 0x46, 0x88, 0x38, 0x44, 0x4b, 0x1c, 0x68, 0x57, 0x2c, 0x02, 0xd6, 0x51, 0x82, 0x16, 0x16, 0x35, 0x09, 0xec, 0xcd, 0x62, 0x2e, 0x9e, 0x5d, 0x4d, 0x54, 0x61, 0xbe, 0xe5, 0x69, 0xe6, 0x48, 0x33, 0x5a, 0x56, 0xc4, 0xd6, 0xc7, 0xd3, 0xc1, 0x66, 0x49, 0x0e, 0x75, 0x02, 0x37, 0x86, 0xd1, 0x3c, 0x32, 0xe8, 0x5b, 0x7c, 0xb6, 0xda, 0x18, 0x46, 0x74, 0xa2, 0x0c, 0x58, 0x24, 0xe0, 0x38, 0xa0, 0x0b, 0xc3, 0x88, 0x4a, 0xd4, 0x0e, 0x0a, 0x3d, 0x0b, 0x73, 0x26, 0x42, 0x3d, 0x60, 0xd1, 0x3e, 0xa0, 0x16, 0xc4, 0x15, 0x26, 0x8d, 0x4b, 0x51, 0x3b, 0xf3, 0xb5, 0xd2, 0xbd, 0xfb, 0x08, 0xb5, 0x6b, 0x25, 0xbf, 0x97, 0x8a, 0x69, 0x19, 0x01, 0x0b, 0xe1, 0xd7, 0x07, 0x81, 0x4e, 0x69, 0x6b, 0xa4, 0x4c, 0x24, 0x9c, 0x17, 0xdd, 0xcb, 0x22, 0x22, 0xa5, 0x6c, 0xf2, 0x85, 0x19, 0x1e, 0x03, 0x35, 0xc5, 0xd1, 0xce, 0x35, 0xfb, 0x5f, 0xa7, 0xfd, 0xd4, 0x59, 0x18, 0x4e, 0x7b, 0x8d, 0x67, 0x7d, 0x3b, 0x0a, 0x7d, 0x88, 0x41, 0xfc, 0x1c, 0xd6, 0xbf, 0xf9, 0x5a, 0x18, 0x39, 0x69, 0x38, 0x16, 0x8a, 0x98, 0x64, 0x61, 0x83, 0x63, 0x06, 0x4f, 0x1a, 0xcb, 0x81, 0x9a, 0xa8, 0x63, 0x16, 0x51, 0xad, 0xce, 0x73, 0x34, 0xf4, 0xa6, 0xc9, 0xc5, 0xc3, 0x78, 0x1c, 0xa5, 0xd3, 0x91, 0x2c, 0x66, 0x7f, 0x37, 0x1a, 0x70, 0xef, 0x2c, 0x08, 0x23, 0x81, 0x9b, 0xf2, 0x87, 0x75, 0x6c, 0x68, 0x33, 0xcd, 0x52, 0xd2, 0x54, 0x16, 0x7f, 0x66, 0xee, 0x80, 0xc6, 0xdb, 0x11, 0x3c, 0x21, 0xb7, 0xd1, 0xa2, 0x18, 0xb3, 0x5b, 0xbd, 0x19, 0xa5, 0xfa, 0x64, 0x80, 0x29, 0xc8, 0xd6, 0x87, 0xb1, 0xd7, 0x4d, 0x16, 0x23, 0xe9, 0xd9, 0x2f, 0x8f, 0x04, 0x43, 0xef, 0x15, 0x12, 0x3c, 0x1f, 0x0d, 0x31, 0xa6, 0x91, 0x28, 0xdb, 0x34, 0x88, 0xbb, 0x1e, 0x28, 0x0a, 0x83, 0x3a, 0x09, 0x4f, 0xa8, 0x17, 0xed, 0xa3, 0xa3, 0xea, 0x38, 0x5a, 0x07, 0x27, 0xcb, 0x14, 0xa1, 0x40, 0xbb, 0x74, 0x46, 0xab, 0x9e, 0x46, 0x99, 0xca, 0x48, 0x92, 0x45, 0x09, 0xda, 0xd4, 0x45, 0x91, 0x66, 0xa3, 0x8c, 0x83, 0x35, 0x45, 0xa5, 0x93, 0x9e, 0x06, 0x6e, 0x07, 0xa5, 0xbc, 0x54, 0x11, 0x3e, 0x55, 0x12, 0x7b, 0x00, 0x94, 0xae, 0x54, 0x99, 0x83, 0xf4, 0x57, 0xfa, 0x0e, 0x9c, 0x45, 0x09, 0x93, 0xff, 0xf0, 0xcb, 0x6f, 0xdd, 0xbf, 0x14, 0xfd, 0x51, 0xec, 0x2c, 0xe7, 0xa9, 0xd7, 0x8a, 0x12, 0x12, 0xa9, 0x23, 0x5a, 0xbe, 0x53, 0x71, 0xd3, 0xba, 0xc9, 0x76, 0xdc, 0xf5, 0x28, 0x55, 0x93, 0x1d, 0x95, 0x0e, 0x1f, 0xdb, 0x4b, 0x0e, 0x19, 0x97, 0xcc, 0x95, 0x97, 0x08, 0xcd, 0x3b, 0x11, 0x4d, 0xd3, 0x5b, 0xb4, 0xc8, 0x2c, 0x2d, 0xdd, 0x31, 0x69, 0xba, 0xc5, 0xcb, 0x4b, 0x08, 0x2f, 0x2d, 0x91, 0x50, 0x8f, 0xf5, 0xb8, 0x43, 0x1f, 0x4c, 0x25, 0x26, 0x22, 0x50, 0xd7, 0x1b, 0x4f, 0xbb, 0x8b, 0x24, 0x55, 0x33, 0x46, 0xa5, 0x68, 0x73, 0x01, 0x27, 0xa0, 0x97, 0x7b, 0x1b, 0x3d, 0x5d, 0x09, 0x25, 0x4a, 0x3a, 0xe2, 0x12, 0x74, 0xa1, 0x44, 0x06, 0x78, 0xa2, 0x14, 0x68, 0x40, 0xf4, 0xde, 0xb1, 0x09, 0x25, 0xdc, 0xc5, 0x11, 0x83, 0xf6, 0xba, 0xe9, 0x95, 0xb6, 0xb9, 0x0c, 0xf7, 0x52, 0xa9, 0x85, 0xa3, 0x73, 0x29, 0xec, 0x14, 0xc0, 0x76, 0x97, 0x5c, 0x3c, 0x3c, 0x8b, 0xd4, 0x4e, 0xbd, 0x32, 0xa9, 0x87, 0x37, 0x81, 0xeb, 0x35, 0x00, 0x5f, 0x92, 0x8b, 0x47, 0xd6, 0x11, 0xfa, 0xe7, 0x18, 0x39, 0xaa, 0xa4, 0xb0, 0x30, 0xff, 0xb9, 0xf0, 0xfc, 0x31, 0xd9, 0xc5, 0x23, 0x8b, 0x5f, 0x20, 0x9a, 0xa1, 0x89, 0xe9, 0x31, 0x5c, 0xeb, 0xc7, 0x5c, 0x64, 0xcf, 0xf0, 0x9e, 0x9c, 0xae, 0xe7, 0x63, 0xe1, 0x3d, 0x7b, 0x86, 0x47, 0x98, 0x7a, 0xf6, 0xec, 0xe1, 0xe7, 0x43, 0xfe, 0x0f, 0xfe, 0x2e, 0x5e, 0xd8, 0x0c, 0x00, 0x54, 0xe7, 0x85, 0x5f, 0xc8, 0xc5, 0x93, 0xbb, 0xc8, 0xc5, 0x9f, 0xa6, 0x92, 0x8b, 0xf5, 0xa5, 0xe4, 0xe2, 0x6f, 0x2b, 0xc8, 0xc5, 0x2b, 0xf0, 0xfc, 0xba, 0x95, 0x5c, 0xbc, 0x9d, 0x02, 0xb0, 0x95, 0x5c, 0xbc, 0x75, 0x1b, 0x9e, 0x97, 0x03, 0xe0, 0x73, 0xa8, 0xe7, 0x0d, 0x25, 0x40, 0x14, 0xdc, 0x47, 0xc3, 0x77, 0x66, 0x72, 0xf1, 0x1a, 0x7c, 0x77, 0xbd, 0x1a, 0x60, 0xe1, 0x1f, 0xe7, 0x77, 0xeb, 0x1d, 0x58, 0x39, 0x04, 0xb8, 0x5a, 0x09, 0x6d, 0x12, 0x23, 0x3e, 0xbb, 0xb8, 0xa2, 0x5c, 0x41, 0x74, 0x00, 0x7e, 0xce, 0x68, 0xe5, 0x1e, 0x2a, 0x6f, 0xb8, 0xf7, 0x74, 0xdd, 0xb3, 0x77, 0x10, 0x0e, 0x20, 0x17, 0x8f, 0xdf, 0x81, 0x70, 0x08, 0xbb, 0x8f, 0x61, 0xa1, 0x15, 0x02, 0x29, 0x84, 0xfd, 0x21, 0xf4, 0x82, 0xd0, 0xc6, 0xee, 0x53, 0x20, 0x1c, 0x05, 0xab, 0xb9, 0x8e, 0xc6, 0x23, 0x04, 0x3a, 0x05, 0x46, 0x36, 0xbc, 0x63, 0xdf, 0xf9, 0xb2, 0x50, 0xc9, 0x42, 0x67, 0xba, 0x8f, 0xfd, 0x49, 0xba, 0x98, 0x8e, 0x14, 0xca, 0x71, 0xaf, 0x55, 0xba, 0x7e, 0xae, 0x74, 0x81, 0xb6, 0x80, 0x40, 0x02, 0xa1, 0x3f, 0x4b, 0x47, 0x45, 0xef, 0x15, 0xa4, 0x3d, 0xbb, 0x0f, 0x60, 0xe1, 0x03, 0x2c, 0x0c, 0x64, 0x61, 0x12, 0xcb, 0x2f, 0x9d, 0x55, 0xdd, 0x99, 0x9e, 0x33, 0x1d, 0x6f, 0x16, 0xfa, 0xb0, 0xf0, 0x71, 0x4c, 0x77, 0xda, 0x03, 0x30, 0xef, 0xa0, 0x0c, 0x10, 0x62, 0x7c, 0x0f, 0x67, 0xb9, 0xda, 0xf8, 0xde, 0x19, 0xb6, 0x6b, 0x55, 0xce, 0x3f, 0x8a, 0x2f, 0x6b, 0xf3, 0xb9, 0x07, 0xe9, 0xe0, 0xfe, 0x7d, 0xf3, 0x7b, 0x95, 0x97, 0xb3, 0xff, 0x5a, 0x7c, 0x07, 0xd8, 0x91, 0x85, 0x32, 0x16, 0xb6, 0x63, 0x61, 0x67, 0x5a, 0x5f, 0x58, 0xf3, 0x58, 0x3a, 0xce, 0x3f, 0xc9, 0x5f, 0x84, 0xd2, 0x56, 0x71, 0xa5, 0xad, 0xbe, 0x27, 0x7f, 0x90, 0x6f, 0x47, 0xb7, 0x7c, 0x25, 0x7f, 0x12, 0x2f, 0x98, 0x85, 0xd8, 0xa7, 0xed, 0x9a, 0xc7, 0x25, 0xe9, 0xee, 0x5e, 0x5f, 0x98, 0xb6, 0x8e, 0xd1, 0x25, 0xcf, 0xe4, 0x8f, 0x7c, 0xee, 0x39, 0xf2, 0x5c, 0x49, 0xb1, 0x43, 0xbc, 0xb2, 0x17, 0x67, 0x3f, 0x5f, 0x52, 0x52, 0x38, 0x56, 0xbc, 0x2b, 0x2a, 0x2e, 0x2c, 0x62, 0x2f, 0x9e, 0x2f, 0x19, 0x93, 0x3f, 0xa6, 0xe4, 0x05, 0xd7, 0xdc, 0x77, 0x14, 0x8f, 0x2c, 0xca, 0x19, 0xf3, 0x4c, 0x33, 0x32, 0xc8, 0x1f, 0xf9, 0xc2, 0xe8, 0xe2, 0xe6, 0xdb, 0x31, 0x63, 0x4b, 0x9e, 0x1f, 0x53, 0x32, 0xa6, 0x70, 0xac, 0xeb, 0x89, 0xbd, 0x78, 0x64, 0xc1, 0xe8, 0x31, 0x62, 0x6a, 0x5b, 0xc8, 0x23, 0xf9, 0xa3, 0xc8, 0x23, 0xcf, 0x91, 0x82, 0xd1, 0x63, 0x9f, 0xcf, 0x1e, 0x59, 0x9c, 0x3f, 0x32, 0x7b, 0x74, 0xbe, 0xb3, 0x04, 0xcd, 0xd1, 0x30, 0x52, 0xe6, 0xe8, 0xd2, 0x12, 0x6e, 0xe0, 0x90, 0x8c, 0x4c, 0x2e, 0x7b, 0x34, 0x57, 0x04, 0x4f, 0x47, 0x8f, 0xe2, 0xc6, 0x8f, 0x29, 0xc9, 0xe1, 0x06, 0x0d, 0x7c, 0x3a, 0x35, 0xf1, 0x89, 0x16, 0xf1, 0xff, 0xe8, 0xfa, 0xb9, 0x17, 0x9e, 0xfb, 0x8b, 0x18, 0xa4, 0x6b, 0x57, 0x2e, 0xa5, 0x7f, 0x46, 0xe6, 0xd0, 0xfe, 0x89, 0x4f, 0x70, 0x09, 0xe9, 0x71, 0x4f, 0xf4, 0x4f, 0x4d, 0xe6, 0x32, 0x32, 0xe3, 0x32, 0x13, 0xb9, 0xd4, 0x41, 0x99, 0x5c, 0xc6, 0x90, 0xb4, 0xb4, 0x41, 0xe9, 0x99, 0x89, 0x09, 0x5c, 0xd7, 0xae, 0x3e, 0x7f, 0x23, 0xe9, 0xb6, 0x9f, 0xde, 0xff, 0xe7, 0x4b, 0x2e, 0x9e, 0xf6, 0x21, 0x17, 0x4f, 0x5d, 0x06, 0xd8, 0x07, 0xb0, 0x1a, 0x60, 0x06, 0x40, 0x2e, 0x80, 0x0d, 0x40, 0x0f, 0x00, 0xef, 0x4f, 0xc2, 0xfb, 0x93, 0xfb, 0xd8, 0x37, 0x80, 0xb9, 0x7e, 0x5c, 0x4e, 0x2e, 0xd6, 0x42, 0xfc, 0x1f, 0xe0, 0xdd, 0x0f, 0x10, 0xef, 0x07, 0xf8, 0xe6, 0x07, 0xb8, 0xbf, 0x04, 0xf7, 0x97, 0xe0, 0xfe, 0x12, 0xdc, 0x5f, 0x82, 0xfb, 0x1f, 0xe1, 0xfe, 0x47, 0x9b, 0x6b, 0xa4, 0x5d, 0xac, 0x1b, 0xd5, 0x7c, 0xfd, 0x53, 0x90, 0x6b, 0x34, 0x5e, 0xac, 0xb3, 0x90, 0xda, 0xe4, 0x7a, 0x76, 0xaf, 0x71, 0x0b, 0xbb, 0xb2, 0xeb, 0xee, 0xee, 0xcf, 0xdd, 0xfd, 0x1f, 0xde, 0x8b, 0x42, 0x1e, 0xbc, 0x88, 0xca, 0x1f, 0x69, 0x70, 0xaf, 0x47, 0x4f, 0xd4, 0x0e, 0x95, 0x51, 0x4f, 0x96, 0xe0, 0xfe, 0xb0, 0x70, 0x1c, 0x56, 0x23, 0x75, 0xda, 0x5c, 0x94, 0x21, 0x72, 0xbd, 0xd7, 0xba, 0xbd, 0xdf, 0x08, 0xef, 0xb5, 0xad, 0xde, 0xeb, 0xdd, 0xde, 0x2f, 0x86, 0xf7, 0xfa, 0x56, 0xef, 0xc3, 0xdd, 0xde, 0x8f, 0x83, 0xf7, 0xe1, 0xad, 0xde, 0x47, 0xb8, 0xbd, 0x1f, 0x0a, 0xef, 0x23, 0x5a, 0xbd, 0x8f, 0x72, 0x7b, 0x1f, 0x05, 0xef, 0xa3, 0x5a, 0xbd, 0x8f, 0x71, 0x7b, 0x1f, 0x04, 0xef, 0x63, 0x5a, 0xbd, 0xef, 0xdb, 0xfc, 0xbe, 0xe9, 0x16, 0xbc, 0xef, 0xdb, 0xea, 0xbd, 0xc5, 0xed, 0x3d, 0xd6, 0xdf, 0xd2, 0xea, 0x7d, 0x92, 0xdb, 0x7b, 0xac, 0x7f, 0x52, 0xab, 0xf7, 0x36, 0xb7, 0xf7, 0x58, 0x7f, 0x9b, 0xf3, 0x3d, 0xd7, 0x1e, 0x75, 0xbb, 0x80, 0xae, 0x59, 0x3a, 0x5a, 0x8b, 0x54, 0x0f, 0xbd, 0x5e, 0x96, 0x4d, 0xc8, 0x7b, 0x70, 0x27, 0xa5, 0x77, 0xab, 0xe1, 0xca, 0x83, 0xca, 0x60, 0x6d, 0x15, 0xcf, 0x13, 0xa1, 0xab, 0x3d, 0x1c, 0x29, 0xd9, 0x81, 0xf4, 0x4a, 0xe2, 0xe0, 0x68, 0x28, 0xa5, 0xa7, 0x48, 0x54, 0x83, 0x42, 0x22, 0x73, 0xc4, 0xd2, 0x50, 0x41, 0x4f, 0x91, 0xd4, 0x54, 0x3b, 0x5d, 0x01, 0x94, 0x42, 0xed, 0x84, 0x8d, 0xbc, 0xb2, 0xf9, 0xee, 0x9f, 0xd4, 0x37, 0x11, 0xa4, 0x39, 0xb5, 0xf9, 0xd9, 0x54, 0x1f, 0xfe, 0x72, 0xf3, 0xdd, 0x0b, 0xf5, 0xfc, 0x19, 0xb7, 0xf8, 0x1b, 0xf9, 0x83, 0xcd, 0x77, 0x13, 0x95, 0x7c, 0x75, 0xf3, 0x5d, 0xf9, 0x52, 0x7e, 0x9d, 0xdb, 0xdd, 0x5d, 0xfe, 0x9d, 0xe6, 0xbb, 0xc9, 0x52, 0x7e, 0x31, 0xdd, 0x85, 0x09, 0xfe, 0x73, 0x89, 0x34, 0x6c, 0x0d, 0xb1, 0x2e, 0x8e, 0xd8, 0xec, 0xe0, 0x62, 0xac, 0x7d, 0x11, 0xab, 0x63, 0x17, 0xb1, 0x6d, 0xec, 0x63, 0xf9, 0x34, 0x56, 0xc3, 0x98, 0xd1, 0x7a, 0x56, 0xc7, 0x61, 0x3c, 0xd7, 0x9c, 0x57, 0xde, 0x69, 0xf7, 0x1a, 0x8e, 0x15, 0xfd, 0x4c, 0x65, 0xb9, 0x3d, 0xc9, 0xe7, 0xaf, 0x34, 0xdf, 0x15, 0xe6, 0xf3, 0x67, 0xdd, 0xee, 0x4e, 0xf2, 0x35, 0xcd, 0x77, 0xcf, 0xad, 0xe5, 0x77, 0xfc, 0xdd, 0x52, 0x17, 0xcb, 0x68, 0x4f, 0x1d, 0x76, 0xeb, 0xc3, 0x39, 0xd0, 0x87, 0x4b, 0x5c, 0x7d, 0xb8, 0xac, 0x45, 0x1f, 0x2e, 0xfb, 0x6f, 0xfa, 0x30, 0x7b, 0xab, 0x7b, 0x0d, 0x47, 0x71, 0xf7, 0xf7, 0xe1, 0xa8, 0x09, 0xee, 0x7d, 0x38, 0x7a, 0x85, 0x7b, 0x1f, 0xda, 0xb5, 0xee, 0x7d, 0x38, 0x26, 0xd8, 0xbd, 0x0f, 0xc7, 0x24, 0xb8, 0xf7, 0xe1, 0x98, 0x6a, 0xf7, 0x3e, 0xcc, 0x4b, 0xfb, 0x37, 0xfb, 0x50, 0xe2, 0xb0, 0x65, 0x1b, 0x8a, 0xc5, 0xda, 0xcf, 0x1a, 0xad, 0x64, 0xfd, 0x07, 0xe3, 0x97, 0x1f, 0x8b, 0x16, 0x3e, 0xd0, 0x13, 0x0f, 0x3c, 0x93, 0xd1, 0x67, 0x8b, 0xb1, 0xfc, 0xac, 0x4d, 0x22, 0x47, 0x73, 0xac, 0xfe, 0xd1, 0xac, 0xfe, 0xe3, 0xdc, 0xfb, 0xf7, 0x29, 0x8d, 0x7b, 0xed, 0x9f, 0x8e, 0xa6, 0xb5, 0x2f, 0x69, 0x7e, 0x32, 0x5c, 0xe6, 0xde, 0xbf, 0x23, 0xaa, 0xdc, 0xfb, 0xf7, 0xe9, 0x59, 0xee, 0xfd, 0xfb, 0xf4, 0x6d, 0x7e, 0x47, 0xf3, 0x1d, 0x9f, 0xcd, 0xaf, 0x6f, 0xbe, 0x1b, 0xb9, 0x8c, 0x7f, 0xef, 0xdf, 0xac, 0xad, 0x25, 0x9b, 0x5a, 0x2e, 0x19, 0x1d, 0x28, 0xf6, 0xf9, 0x33, 0x65, 0xae, 0x1a, 0x57, 0xf2, 0xd9, 0xc5, 0x62, 0x3d, 0xa7, 0xf3, 0x25, 0xac, 0x96, 0xea, 0xd1, 0x66, 0x56, 0x4b, 0xe7, 0x28, 0xce, 0xe1, 0xfd, 0x9b, 0xf3, 0x4f, 0x9b, 0xe1, 0x5e, 0xcb, 0x61, 0xdb, 0x68, 0x2d, 0xed, 0xcd, 0x4f, 0xd2, 0x15, 0xee, 0xb5, 0x4c, 0xaf, 0x73, 0xaf, 0xe5, 0xd0, 0x7a, 0xf7, 0x5a, 0x66, 0xa4, 0xb9, 0xd7, 0x72, 0x28, 0xc7, 0xaf, 0xff, 0x37, 0x67, 0x62, 0x42, 0xb6, 0xaa, 0x18, 0x47, 0xb4, 0x4d, 0xac, 0xa7, 0x3d, 0x8d, 0x0f, 0x60, 0x75, 0xf0, 0x11, 0x6b, 0x60, 0xef, 0xeb, 0x5e, 0x72, 0x4b, 0x8b, 0xd1, 0x99, 0x48, 0xcf, 0x12, 0xf9, 0xd8, 0xe6, 0x27, 0x49, 0x6f, 0xb9, 0x97, 0x3c, 0x71, 0x0d, 0x7f, 0xf6, 0x6f, 0x95, 0xc7, 0x17, 0x4a, 0xe4, 0xa3, 0x6e, 0x4f, 0x3d, 0xa6, 0x48, 0x1d, 0x26, 0x1a, 0xca, 0x1c, 0x41, 0xcc, 0x83, 0x4a, 0x78, 0x73, 0x8a, 0xd1, 0x69, 0xee, 0xf9, 0xc7, 0x9c, 0xa5, 0xf9, 0x1b, 0x9a, 0x9f, 0xf4, 0x29, 0xe6, 0xaf, 0xd0, 0x1c, 0x83, 0x6c, 0xe5, 0x7f, 0x94, 0x9f, 0xb6, 0x65, 0x0b, 0x44, 0xb2, 0x16, 0x18, 0xc6, 0x5a, 0x80, 0xe7, 0x03, 0xef, 0xc3, 0x41, 0x29, 0xee, 0x63, 0xb4, 0xdf, 0x61, 0xf7, 0x32, 0xc4, 0x89, 0x65, 0xb0, 0xb9, 0xb5, 0x91, 0xde, 0xbd, 0x0d, 0xfa, 0x6e, 0x75, 0xef, 0xbd, 0xb8, 0x04, 0xbe, 0xe6, 0xdf, 0x1c, 0x79, 0xe1, 0x0c, 0x57, 0x66, 0x8b, 0x38, 0xc6, 0x91, 0xc3, 0x46, 0x5e, 0x19, 0x9f, 0xcf, 0x7a, 0xca, 0x30, 0x3a, 0x98, 0xf5, 0x55, 0x0e, 0xef, 0xd6, 0x56, 0x8f, 0xb6, 0x18, 0x65, 0xbd, 0x8f, 0xb7, 0x1e, 0x65, 0x11, 0xc3, 0xdc, 0xcb, 0xd9, 0xab, 0xda, 0xbd, 0x9c, 0xbd, 0x52, 0xdd, 0x47, 0x59, 0x54, 0x89, 0xfb, 0x28, 0xeb, 0x6d, 0xf9, 0xb7, 0x47, 0xd9, 0x7f, 0x8c, 0xef, 0xf5, 0x67, 0xdd, 0xeb, 0x60, 0xaa, 0x68, 0x8d, 0xef, 0x7b, 0xb6, 0xc0, 0x07, 0xfa, 0xe9, 0xee, 0x75, 0x08, 0x5b, 0xe7, 0x5e, 0x87, 0x9e, 0x3b, 0xff, 0x3e, 0xbe, 0x67, 0xa5, 0x8e, 0x60, 0x23, 0x23, 0x8b, 0x8d, 0x8c, 0xa7, 0x5c, 0x73, 0x43, 0xcf, 0xda, 0x3b, 0xc5, 0xbd, 0xbd, 0x1f, 0xd1, 0xba, 0x97, 0x55, 0x17, 0xd9, 0x7a, 0x5c, 0x68, 0x27, 0xbb, 0x97, 0xb5, 0xfb, 0x04, 0xf7, 0xb2, 0x76, 0xdf, 0xf5, 0x37, 0xc7, 0x85, 0xbf, 0xd1, 0x27, 0x63, 0x2c, 0xe1, 0x8c, 0xfe, 0x68, 0xd9, 0x52, 0x10, 0xac, 0x2f, 0x00, 0x5f, 0xab, 0xc6, 0x3d, 0xa2, 0x6c, 0x15, 0xf5, 0x39, 0x00, 0xef, 0xec, 0x2a, 0x45, 0x38, 0xf0, 0x17, 0xfe, 0x0e, 0x05, 0xe7, 0x9f, 0xba, 0x56, 0xf8, 0x45, 0xfc, 0x56, 0x94, 0xf8, 0x13, 0x35, 0x1c, 0x29, 0xc0, 0x97, 0x27, 0x4b, 0xdc, 0xbe, 0x2c, 0x77, 0x28, 0xd3, 0xe1, 0x6b, 0x69, 0xb8, 0xf0, 0x1b, 0x5a, 0xdd, 0x79, 0xfd, 0x20, 0xe7, 0xcf, 0x3c, 0x61, 0x47, 0x68, 0x52, 0x69, 0xba, 0x80, 0xc9, 0x35, 0xe1, 0x64, 0xa1, 0x33, 0x0d, 0x31, 0xf7, 0x93, 0x39, 0x2d, 0xd2, 0x28, 0x56, 0xa7, 0x36, 0x4b, 0x6e, 0x88, 0xd6, 0x37, 0x69, 0x19, 0xa5, 0xc9, 0x77, 0x88, 0x30, 0x72, 0x19, 0xca, 0x06, 0x3b, 0xbf, 0x3c, 0x7c, 0x23, 0x75, 0x01, 0x7a, 0xe8, 0x70, 0xde, 0x9f, 0xb8, 0xeb, 0x4a, 0x49, 0x13, 0xbe, 0x15, 0xae, 0xe4, 0xf4, 0x5e, 0x46, 0x25, 0x72, 0x03, 0xe8, 0xb9, 0xac, 0x4a, 0x6d, 0x5b, 0x50, 0x5d, 0x33, 0xa9, 0xf9, 0xe4, 0x2c, 0x6b, 0x2e, 0xaf, 0x20, 0x7a, 0x02, 0x7c, 0x66, 0x09, 0xc1, 0xfd, 0x97, 0x14, 0x99, 0xa8, 0xdf, 0xa6, 0x31, 0x53, 0x3b, 0xcc, 0x41, 0x8f, 0x58, 0xc9, 0x42, 0x48, 0xdb, 0x99, 0x16, 0xc9, 0x9a, 0x0b, 0x65, 0x9c, 0x60, 0xf4, 0x69, 0xd1, 0x0a, 0x26, 0x2c, 0x5b, 0xb6, 0x8a, 0x4a, 0x28, 0x63, 0x1d, 0x86, 0xb9, 0xbf, 0x3d, 0x7c, 0xb9, 0xbf, 0x58, 0xf2, 0x85, 0x74, 0x4f, 0xad, 0xdc, 0x11, 0xeb, 0x56, 0x83, 0xc6, 0xd4, 0x85, 0xad, 0xd2, 0x2a, 0xa7, 0xa9, 0x84, 0xd8, 0xca, 0xed, 0x13, 0xdc, 0xeb, 0x06, 0xad, 0x44, 0x53, 0xff, 0x7f, 0xa2, 0x45, 0xa8, 0x7c, 0x9c, 0xa8, 0x5f, 0x00, 0xa3, 0x85, 0x7a, 0x18, 0x51, 0xc2, 0x33, 0xea, 0x8b, 0x86, 0xf9, 0x27, 0x1f, 0xc6, 0xc6, 0x03, 0xa5, 0x5f, 0x91, 0x72, 0x85, 0x52, 0xc5, 0x60, 0x8e, 0xc7, 0x27, 0x00, 0x05, 0xbd, 0x8f, 0x33, 0xb3, 0xba, 0x06, 0x3f, 0x62, 0x26, 0xb6, 0xae, 0x65, 0xc0, 0xf1, 0xa0, 0x17, 0xdb, 0x95, 0x44, 0xd9, 0xd5, 0x86, 0x1a, 0x89, 0xcd, 0x73, 0xc5, 0xed, 0xfb, 0x28, 0xd7, 0xf7, 0x33, 0x5a, 0x7c, 0x9f, 0x84, 0xdf, 0x7f, 0x1b, 0xfd, 0x97, 0xdf, 0xfb, 0xbb, 0xbe, 0xb7, 0xb5, 0xf8, 0xde, 0x42, 0xbf, 0xff, 0xe5, 0x2f, 0xbf, 0x57, 0xba, 0xbe, 0xf7, 0x69, 0xf1, 0x7d, 0x5f, 0xfc, 0xfe, 0xcc, 0xdd, 0xbf, 0xfc, 0x3e, 0xdc, 0xf9, 0x7d, 0x53, 0xcb, 0xfa, 0xc7, 0xe0, 0xf7, 0xdf, 0x5d, 0xfe, 0x9b, 0xf9, 0x4f, 0x87, 0xef, 0x5b, 0xd6, 0x3f, 0x0a, 0xbf, 0x3f, 0xbb, 0xe3, 0x2f, 0xbf, 0x57, 0xd1, 0xef, 0x2b, 0xe1, 0xfb, 0x96, 0xf5, 0xc7, 0x7d, 0xf5, 0x8b, 0xe7, 0xd2, 0xff, 0xe6, 0xf7, 0xcb, 0xe1, 0xfb, 0x96, 0xf5, 0x0f, 0xa7, 0xdf, 0xef, 0xfc, 0x9b, 0xed, 0x0f, 0xdf, 0xdf, 0x6b, 0x59, 0x7f, 0x3d, 0x7e, 0x7f, 0x7e, 0xd4, 0x5f, 0x7e, 0xaf, 0x75, 0xb6, 0xdf, 0xbd, 0x96, 0xf5, 0xd7, 0xe2, 0xf7, 0xdf, 0xeb, 0xfe, 0xf2, 0x7b, 0x85, 0xb3, 0xfe, 0xf7, 0x5a, 0xd6, 0x5f, 0x4d, 0xbf, 0x3f, 0xdb, 0xd6, 0xf7, 0x4e, 0x7d, 0x25, 0x91, 0xaf, 0x6d, 0xca, 0x66, 0x38, 0x0e, 0x53, 0x55, 0xc6, 0xdf, 0x81, 0xd4, 0x56, 0x35, 0x9f, 0xc0, 0xdf, 0x3b, 0x09, 0x69, 0x2d, 0x73, 0x94, 0xd2, 0xe7, 0x9f, 0xb5, 0x7a, 0xbe, 0xc2, 0x91, 0x46, 0x9f, 0xef, 0x6b, 0xf5, 0xfc, 0x1d, 0x87, 0x8e, 0x3e, 0x3f, 0xd5, 0xea, 0xf9, 0x12, 0x7b, 0xa4, 0xe8, 0xeb, 0x10, 0xca, 0xfe, 0x0e, 0x8c, 0xb8, 0x09, 0x69, 0x73, 0x5d, 0xf7, 0x2b, 0xe0, 0x3e, 0xd7, 0xed, 0x7e, 0x19, 0xdc, 0x0f, 0x43, 0xe9, 0x0c, 0xd4, 0xa9, 0x73, 0xe1, 0x61, 0x5a, 0xc6, 0xb8, 0xcb, 0xc4, 0x85, 0x2d, 0xef, 0x1d, 0x06, 0xbe, 0xb1, 0xcc, 0x19, 0x03, 0xbd, 0x8c, 0x6b, 0x0a, 0xa9, 0xd4, 0x52, 0x99, 0x78, 0xf2, 0x6d, 0xc8, 0x25, 0x4b, 0xf0, 0x54, 0x03, 0x63, 0xb9, 0xd2, 0x5e, 0x92, 0xdc, 0xd8, 0xd4, 0x04, 0x38, 0xa3, 0xb9, 0x2c, 0x0b, 0xdc, 0xca, 0xb1, 0xc0, 0xad, 0x0c, 0x0b, 0x9c, 0x32, 0xe4, 0x29, 0xa2, 0x3e, 0xec, 0x79, 0xcc, 0x81, 0x4a, 0x53, 0x77, 0x44, 0xfd, 0x7e, 0x23, 0x7a, 0x06, 0x10, 0x65, 0xab, 0xa9, 0x5c, 0x35, 0xbd, 0x96, 0x92, 0x10, 0xb8, 0xe6, 0x00, 0x34, 0xf4, 0x0c, 0xe6, 0xe2, 0xf1, 0x9f, 0x13, 0xa1, 0x5f, 0xb4, 0x85, 0xc4, 0x64, 0xc8, 0xa3, 0xa5, 0x99, 0xca, 0x3c, 0x90, 0x73, 0xce, 0xbe, 0xb4, 0x41, 0xe9, 0xec, 0x4a, 0x94, 0xcc, 0x10, 0x96, 0x41, 0x3b, 0x95, 0x01, 0xbe, 0x85, 0x27, 0x4e, 0x1f, 0xd0, 0xce, 0x3e, 0x83, 0xb8, 0xd6, 0xa2, 0xa7, 0xdb, 0xb4, 0xc3, 0xdf, 0x85, 0x33, 0x77, 0x2d, 0x6b, 0xaf, 0x7e, 0x34, 0x81, 0x44, 0x77, 0x2d, 0x4b, 0x78, 0x54, 0xdd, 0x9e, 0xc4, 0xf6, 0x2c, 0x93, 0x78, 0x10, 0x25, 0xfc, 0x12, 0xa2, 0xd2, 0x94, 0x8b, 0xed, 0x93, 0x3a, 0x44, 0x58, 0x89, 0x12, 0x28, 0x1a, 0x18, 0x76, 0xba, 0xfe, 0x30, 0x7a, 0xb2, 0xe8, 0xb9, 0xd8, 0x4a, 0xb7, 0xf3, 0x54, 0x89, 0xb0, 0x92, 0x9d, 0xc8, 0x8a, 0xa7, 0xb6, 0x9e, 0xec, 0xc4, 0xd6, 0x8b, 0x9d, 0xd4, 0xaa, 0xd9, 0x19, 0xed, 0x28, 0xa1, 0x86, 0x9e, 0xca, 0x1e, 0x65, 0x67, 0xbb, 0x27, 0xd9, 0xa9, 0xef, 0x79, 0x1a, 0x76, 0x15, 0xea, 0x68, 0xd8, 0x5e, 0x40, 0x4d, 0x7b, 0xe5, 0x46, 0xd1, 0x67, 0x5c, 0xae, 0x78, 0x5e, 0x22, 0xcd, 0xb6, 0xad, 0x21, 0x41, 0x10, 0x0e, 0xb3, 0x2c, 0x50, 0x01, 0xb7, 0x53, 0x35, 0xd9, 0xe1, 0x53, 0x24, 0x81, 0x5f, 0x05, 0xdc, 0xe1, 0x79, 0xfd, 0x51, 0x53, 0x66, 0xa8, 0x55, 0x58, 0x63, 0xca, 0x87, 0x3b, 0xab, 0xb0, 0x1e, 0x42, 0x19, 0x84, 0x5b, 0x21, 0x94, 0x43, 0xb8, 0x13, 0xbe, 0x56, 0x38, 0x62, 0xb4, 0x06, 0xc0, 0xe5, 0xf0, 0x95, 0x5d, 0x51, 0x74, 0xae, 0x7a, 0x4a, 0x0f, 0x33, 0x09, 0xa0, 0x7e, 0xc5, 0xd0, 0xb6, 0xdf, 0xc5, 0xc6, 0x77, 0x50, 0x5e, 0x5c, 0xb4, 0xc1, 0x00, 0x31, 0x64, 0x3d, 0xe2, 0x49, 0x80, 0xed, 0x43, 0xe1, 0x80, 0xdd, 0x87, 0x27, 0x92, 0x5a, 0x5a, 0xee, 0x3d, 0xa1, 0x03, 0x84, 0x33, 0x54, 0x36, 0x55, 0x05, 0x77, 0xb5, 0x5c, 0x3e, 0x09, 0x0a, 0xcd, 0x21, 0x32, 0xe1, 0x4a, 0x68, 0x3e, 0xe9, 0x24, 0x34, 0x70, 0x06, 0xea, 0x79, 0x96, 0x38, 0x64, 0x45, 0x52, 0x3e, 0x98, 0xfa, 0x6f, 0x96, 0x15, 0x79, 0xf0, 0xfe, 0x09, 0xd5, 0x76, 0x59, 0x91, 0x8c, 0x97, 0x27, 0x54, 0xe7, 0xca, 0x8b, 0xf0, 0xfc, 0xfa, 0x68, 0x91, 0x5f, 0xd5, 0xe4, 0xd1, 0x44, 0x92, 0x73, 0x74, 0xb2, 0xa9, 0x8f, 0x8e, 0x5a, 0x19, 0x95, 0xf4, 0x25, 0x21, 0x24, 0x42, 0xe2, 0x2f, 0xd1, 0x92, 0x6c, 0xb2, 0x9a, 0x58, 0x49, 0x19, 0x39, 0x23, 0x19, 0x4e, 0x76, 0x92, 0x5b, 0xa4, 0x12, 0xca, 0x68, 0x20, 0x41, 0xd8, 0xe6, 0xb4, 0xa4, 0xb5, 0x12, 0x0b, 0x70, 0x79, 0xdb, 0xee, 0x7b, 0xba, 0x0b, 0x9e, 0xae, 0xa4, 0x4f, 0x95, 0x2d, 0xdf, 0x48, 0x4b, 0xe0, 0x4d, 0x43, 0x5b, 0x6f, 0x3c, 0x34, 0xf0, 0xe6, 0x74, 0xeb, 0x94, 0x64, 0x3b, 0xf8, 0xa7, 0xda, 0x8a, 0xed, 0xb9, 0x1a, 0x62, 0xaf, 0x69, 0xeb, 0x8d, 0x7c, 0x05, 0x8f, 0xe7, 0x49, 0x6d, 0xbc, 0xf1, 0x7a, 0x8f, 0x2f, 0x6d, 0x9d, 0xbe, 0xf2, 0x24, 0x3d, 0x65, 0x57, 0xf1, 0xb9, 0x6d, 0x7d, 0xd1, 0xbe, 0x96, 0x4f, 0x6a, 0xeb, 0x79, 0x20, 0x0f, 0x14, 0x60, 0x1b, 0xcf, 0x83, 0xce, 0xf0, 0x41, 0x6d, 0x3d, 0xef, 0x3c, 0x5f, 0xb4, 0x90, 0xc4, 0xcb, 0x16, 0xed, 0xe3, 0x45, 0x09, 0x10, 0x19, 0xaf, 0xd0, 0x98, 0xb9, 0x00, 0x7b, 0x23, 0x1f, 0x68, 0x59, 0xa0, 0x2e, 0x10, 0x0e, 0x34, 0x9f, 0xf5, 0xb8, 0x64, 0xdd, 0x95, 0x42, 0xa5, 0x28, 0xd3, 0x24, 0x6a, 0x45, 0xf4, 0xeb, 0xab, 0xb1, 0x6a, 0xbd, 0xb5, 0xa9, 0x5c, 0x6c, 0xb9, 0x82, 0xf4, 0x2d, 0x26, 0x5c, 0x7f, 0xc3, 0x58, 0x98, 0xe3, 0x6b, 0x85, 0x33, 0xe8, 0x5d, 0xbd, 0xff, 0x65, 0x22, 0x2d, 0x25, 0x25, 0x68, 0x31, 0xae, 0xb6, 0x6b, 0xc5, 0x40, 0xf8, 0x7d, 0xb8, 0x4e, 0x65, 0x10, 0x9a, 0xd0, 0x42, 0x8a, 0x83, 0xcb, 0x56, 0xda, 0x08, 0x70, 0x7b, 0x28, 0xd9, 0x6e, 0xe6, 0x83, 0x94, 0x44, 0x98, 0xec, 0x08, 0x81, 0xdf, 0x29, 0xc0, 0x6d, 0x11, 0xe2, 0x61, 0x37, 0x58, 0xcc, 0xc0, 0xef, 0x79, 0xa0, 0xd6, 0xc9, 0xc9, 0xf2, 0xb4, 0xb9, 0x7c, 0x48, 0x91, 0xa4, 0x58, 0x58, 0xb7, 0xd0, 0x2e, 0x4d, 0x9f, 0x0c, 0x5c, 0x9a, 0x07, 0xd3, 0x80, 0x59, 0x74, 0xb2, 0x9c, 0x52, 0x33, 0x66, 0xc4, 0x69, 0xfd, 0xaf, 0x90, 0x40, 0x9b, 0xd9, 0xb1, 0x8c, 0x93, 0xa6, 0x97, 0xa3, 0xd4, 0x66, 0xcd, 0xd4, 0x96, 0x12, 0x02, 0x40, 0x0b, 0xa9, 0x69, 0x49, 0xfb, 0x41, 0x49, 0xe3, 0x01, 0x73, 0xd0, 0x92, 0xa2, 0xd4, 0x80, 0x94, 0x2b, 0xf6, 0xe0, 0xcc, 0xdc, 0x24, 0x9e, 0x48, 0x83, 0x00, 0x03, 0x45, 0x72, 0x96, 0x43, 0x3b, 0x0e, 0xed, 0x89, 0xab, 0x57, 0xa0, 0xad, 0xc1, 0x68, 0x6e, 0x72, 0xd6, 0x47, 0x24, 0xba, 0x8c, 0xa4, 0x6d, 0x9f, 0x48, 0x5e, 0x3f, 0x58, 0x4a, 0x5e, 0x3d, 0x30, 0x81, 0xbc, 0xf6, 0x75, 0x09, 0x31, 0x0e, 0x20, 0xe1, 0xda, 0x24, 0x55, 0x00, 0xad, 0x4f, 0x78, 0xb6, 0xca, 0x86, 0x27, 0x97, 0x62, 0x8d, 0x88, 0x04, 0xb8, 0x07, 0x5a, 0x27, 0x1b, 0xad, 0x13, 0x21, 0xef, 0xd1, 0x5a, 0x11, 0x89, 0x05, 0xca, 0x4a, 0xc8, 0x52, 0xf8, 0x8d, 0x30, 0x7a, 0x58, 0xd1, 0x4e, 0x38, 0x9e, 0xac, 0xd6, 0x3e, 0xbc, 0x54, 0xef, 0x5c, 0x6b, 0x60, 0xe4, 0xdb, 0xa6, 0xc3, 0x2f, 0xd5, 0x54, 0xa2, 0xef, 0x12, 0xa8, 0xd5, 0xf4, 0x5b, 0x45, 0x12, 0xf4, 0xc2, 0xed, 0x50, 0x6c, 0x76, 0x9e, 0x91, 0xf6, 0x5b, 0xf7, 0xd2, 0x68, 0x94, 0xa8, 0x37, 0xa2, 0x9e, 0x29, 0xb5, 0xf0, 0x84, 0xba, 0xee, 0x85, 0xc4, 0xca, 0xd2, 0xbc, 0x42, 0xa5, 0x35, 0x30, 0xc5, 0x20, 0x8a, 0x27, 0x64, 0xba, 0x72, 0x5e, 0x49, 0xbf, 0x96, 0x85, 0xc2, 0xec, 0xd6, 0x93, 0xf4, 0x97, 0x74, 0x66, 0x8b, 0xb9, 0x84, 0xd6, 0x0a, 0xe7, 0x87, 0x33, 0x07, 0x11, 0xab, 0x90, 0xe3, 0x4a, 0x09, 0xb5, 0xc0, 0x71, 0xb0, 0xf8, 0xe1, 0x75, 0x30, 0x23, 0xc9, 0xe4, 0xbf, 0xce, 0x89, 0xac, 0xd9, 0x4a, 0xd3, 0x37, 0x94, 0xf3, 0xd1, 0x34, 0x15, 0x13, 0xe0, 0x91, 0x10, 0x94, 0xc5, 0x90, 0xc6, 0x09, 0xbf, 0xa3, 0x8f, 0x54, 0x05, 0xa6, 0xd9, 0x09, 0xb0, 0x43, 0x80, 0x6d, 0x25, 0x51, 0xd9, 0x55, 0xf1, 0x75, 0x24, 0xb0, 0x6b, 0x7f, 0xa2, 0xea, 0x06, 0xab, 0xeb, 0xf1, 0xdf, 0x88, 0x52, 0x47, 0xd2, 0x27, 0x1b, 0xcc, 0x7c, 0x30, 0xac, 0xae, 0x41, 0x06, 0x62, 0x31, 0x37, 0xb7, 0x39, 0x2f, 0x8f, 0x02, 0x5a, 0xda, 0x62, 0x0e, 0x08, 0xb0, 0x99, 0xed, 0x8a, 0xc4, 0xcb, 0x30, 0x7a, 0x49, 0xd3, 0x64, 0x8d, 0xdc, 0xe0, 0x0b, 0x2b, 0x41, 0xb8, 0xd8, 0xb3, 0xae, 0x7e, 0xbd, 0x00, 0xa5, 0x91, 0x03, 0x0e, 0x4f, 0x22, 0x32, 0xdb, 0x64, 0xbb, 0x54, 0xe3, 0x09, 0xbf, 0x31, 0x1a, 0x19, 0x1f, 0x85, 0x71, 0x35, 0xf2, 0x52, 0x29, 0xaf, 0x60, 0x57, 0x1e, 0x9c, 0x85, 0xea, 0xc4, 0xed, 0xfb, 0x83, 0x14, 0x12, 0x88, 0x4c, 0xa4, 0xe9, 0xe9, 0x99, 0xaa, 0x8a, 0xae, 0x5a, 0x27, 0xa9, 0x7c, 0xbe, 0x55, 0x47, 0xf4, 0x12, 0x7d, 0x7f, 0x36, 0xfe, 0x23, 0xdd, 0xc7, 0xbf, 0x28, 0x8d, 0x42, 0xf6, 0xd1, 0xf5, 0xcb, 0x83, 0x68, 0x4c, 0x16, 0x18, 0x49, 0x3a, 0x7a, 0x27, 0x23, 0x06, 0x53, 0x3c, 0xdc, 0x99, 0xe8, 0x5d, 0x07, 0x18, 0x6d, 0xf8, 0xf5, 0xa3, 0xf0, 0xf5, 0x40, 0xe7, 0x98, 0x44, 0x7b, 0x0b, 0xf4, 0x6d, 0x67, 0x12, 0x4b, 0xdf, 0x0e, 0x2c, 0x96, 0xb4, 0x78, 0x6b, 0x86, 0xb5, 0x30, 0x81, 0x0b, 0x74, 0xf8, 0xc3, 0xb3, 0x15, 0x46, 0x3f, 0xbd, 0x19, 0xa5, 0x00, 0xf4, 0x4f, 0x0f, 0xf8, 0x99, 0xa4, 0x42, 0x3c, 0x97, 0xf4, 0x3a, 0x97, 0x47, 0xca, 0xd0, 0x9f, 0x22, 0x5b, 0x25, 0x4b, 0xb9, 0x14, 0x35, 0x3c, 0x31, 0xc9, 0xac, 0xd5, 0x11, 0x9e, 0xd6, 0xed, 0x25, 0x44, 0x93, 0x4b, 0xf5, 0x82, 0x96, 0x50, 0x79, 0x85, 0xe6, 0xef, 0x76, 0xb5, 0x4a, 0xd9, 0xa6, 0x7f, 0x9a, 0x49, 0xdc, 0xeb, 0x98, 0x3c, 0x63, 0x5f, 0xbd, 0x55, 0x9b, 0x2a, 0x7a, 0x7d, 0x20, 0x9b, 0x17, 0xed, 0x03, 0xce, 0xe4, 0x62, 0xe3, 0x0c, 0x5e, 0xaa, 0xb7, 0x68, 0x3a, 0x50, 0x9f, 0xf3, 0x2a, 0x85, 0xa8, 0x7d, 0x32, 0xbd, 0xd8, 0x8b, 0xea, 0x84, 0x7b, 0x02, 0x8f, 0xad, 0xa1, 0x6f, 0xa8, 0xff, 0x5a, 0x13, 0xb1, 0xa3, 0x44, 0x43, 0x27, 0xa3, 0x2f, 0xb5, 0x7c, 0x37, 0x90, 0x95, 0x61, 0x22, 0xff, 0x94, 0xf2, 0x43, 0x71, 0xcd, 0xb5, 0x87, 0x28, 0x3f, 0x14, 0x57, 0x5d, 0x7b, 0x80, 0x7a, 0x20, 0xae, 0xd1, 0xcd, 0x9c, 0x05, 0x1f, 0x0d, 0xb1, 0x1e, 0x1d, 0x32, 0x1e, 0x62, 0x85, 0x2b, 0x3f, 0x1c, 0x3f, 0xe4, 0x51, 0x8c, 0xa5, 0x81, 0xf4, 0xcc, 0x98, 0x1e, 0xc4, 0x4e, 0x68, 0x8e, 0x0b, 0x33, 0xc7, 0x87, 0x72, 0xb2, 0x52, 0xcd, 0x6c, 0xcd, 0x40, 0x18, 0x03, 0x44, 0x18, 0x2e, 0xde, 0x5b, 0xe6, 0x8b, 0xb6, 0x6a, 0xa8, 0x0d, 0x93, 0x18, 0x9d, 0x58, 0x9b, 0xe8, 0xc4, 0x3a, 0xe1, 0xae, 0x56, 0x9d, 0x5c, 0x27, 0xdc, 0x2e, 0x21, 0x7c, 0x00, 0xf7, 0x0c, 0xa3, 0x79, 0xf2, 0xc5, 0xf2, 0xa5, 0x4f, 0xde, 0x38, 0xd9, 0x7e, 0x39, 0x61, 0xf2, 0x51, 0xf8, 0x8f, 0xbf, 0xa1, 0x6b, 0xa6, 0xc5, 0x52, 0x81, 0xcf, 0x51, 0x36, 0xd3, 0x14, 0x55, 0xa2, 0x47, 0xcb, 0x34, 0xf4, 0xb9, 0x03, 0x23, 0x02, 0xbf, 0xb5, 0xba, 0x4b, 0x64, 0x38, 0x69, 0x2b, 0xe0, 0x68, 0x15, 0xda, 0x54, 0x87, 0xae, 0x48, 0x51, 0x4c, 0x5a, 0x49, 0x32, 0x05, 0x6a, 0x26, 0xc3, 0xb8, 0x14, 0xdb, 0x25, 0x15, 0x28, 0x18, 0x19, 0xe7, 0x23, 0x6a, 0x3e, 0xa4, 0xc8, 0xc4, 0x7c, 0xc4, 0x74, 0x45, 0xdb, 0xf9, 0x78, 0x6f, 0xad, 0x66, 0x4f, 0xe6, 0x33, 0x9d, 0x3a, 0xa3, 0xa8, 0x3f, 0x8f, 0x9a, 0x78, 0x8c, 0xdb, 0x2a, 0x66, 0x14, 0x4b, 0x3d, 0x5a, 0x47, 0xd3, 0xf4, 0xd7, 0xfb, 0x73, 0x63, 0x88, 0xc1, 0xa0, 0x23, 0x7d, 0x79, 0x35, 0x97, 0xa4, 0x44, 0x9f, 0x48, 0x2a, 0x7b, 0xa0, 0x72, 0x25, 0xeb, 0x01, 0x1f, 0xe5, 0x4a, 0xb1, 0x07, 0x1c, 0x4a, 0x75, 0x92, 0xa1, 0xbd, 0x6d, 0xba, 0xfd, 0x34, 0x4f, 0x64, 0x41, 0x25, 0xe6, 0xa3, 0xd3, 0x51, 0xfe, 0x87, 0xda, 0x86, 0x01, 0x2a, 0xe7, 0x1f, 0x4b, 0x74, 0x49, 0x3d, 0x6c, 0xd4, 0x1e, 0x85, 0x92, 0xd3, 0x93, 0xc0, 0x62, 0x6e, 0x5d, 0xb9, 0x43, 0x33, 0x5a, 0x39, 0x4e, 0xb5, 0xb1, 0xdc, 0x4e, 0x3c, 0xe0, 0x1b, 0x8f, 0x58, 0x51, 0x42, 0x43, 0x8a, 0x3b, 0xae, 0x66, 0x94, 0xe5, 0xf2, 0xd8, 0x09, 0x98, 0x76, 0x2c, 0x97, 0x04, 0x94, 0xf4, 0x44, 0x6d, 0x2e, 0x11, 0x75, 0xd4, 0x55, 0x38, 0x32, 0x24, 0x5e, 0x74, 0x47, 0xc3, 0x13, 0xe2, 0xac, 0xe8, 0x3a, 0x80, 0x4c, 0x84, 0x18, 0x33, 0x00, 0xe6, 0xf4, 0x2c, 0x83, 0x59, 0xb4, 0x5c, 0x9d, 0x68, 0xec, 0x01, 0x34, 0x7a, 0x0e, 0x99, 0x01, 0x6b, 0x00, 0xca, 0x64, 0x79, 0x0f, 0x6c, 0x14, 0x82, 0x52, 0x17, 0xeb, 0x12, 0x61, 0x75, 0x5b, 0x82, 0x36, 0xa1, 0xc9, 0x1c, 0xf6, 0x06, 0xd6, 0x0d, 0x75, 0x12, 0xd7, 0x83, 0xcc, 0x40, 0xaa, 0xb0, 0xd8, 0x93, 0xea, 0x55, 0x97, 0x8d, 0xf6, 0x19, 0x27, 0xa3, 0xa5, 0x4a, 0xe0, 0x03, 0x8a, 0xbd, 0xe1, 0x99, 0x72, 0x9c, 0x2f, 0xbd, 0x8f, 0x44, 0x59, 0x3d, 0x2e, 0x49, 0xad, 0x23, 0x73, 0xc6, 0x79, 0x6f, 0x9c, 0x04, 0xd4, 0xd3, 0xa8, 0xaa, 0x49, 0x76, 0x22, 0xbd, 0xc1, 0x87, 0x63, 0x3c, 0xb8, 0xaa, 0xe3, 0x80, 0x7f, 0x84, 0x99, 0xd8, 0x81, 0x2c, 0x76, 0x95, 0x62, 0x3a, 0xcd, 0x0b, 0x9e, 0x01, 0xaf, 0x53, 0xa9, 0x4b, 0x82, 0x34, 0x4c, 0x2e, 0x89, 0xba, 0x7a, 0x91, 0x02, 0xa4, 0x94, 0x51, 0x43, 0x1b, 0xdf, 0xce, 0x67, 0xe5, 0xf4, 0x18, 0xd8, 0xd8, 0x94, 0xd9, 0xa2, 0x06, 0x93, 0xd9, 0x1b, 0xcf, 0xd4, 0xc5, 0x5a, 0xb9, 0x7c, 0x0a, 0x8c, 0x8a, 0xe9, 0xd4, 0x32, 0xed, 0x1a, 0xb2, 0x04, 0xad, 0x96, 0xc1, 0xf7, 0x93, 0x59, 0xae, 0x8b, 0x8b, 0x6e, 0xe9, 0x92, 0x6a, 0xd6, 0x10, 0x6a, 0x37, 0x00, 0x77, 0x88, 0x46, 0x07, 0xf4, 0x40, 0x69, 0x31, 0x39, 0x59, 0x4a, 0xa5, 0xc6, 0xe4, 0x42, 0x3d, 0x8c, 0x61, 0xcc, 0x9b, 0x10, 0x2f, 0xf6, 0xcc, 0x4b, 0xa8, 0x57, 0x27, 0xe9, 0x7a, 0x90, 0xe9, 0xd0, 0xf7, 0x93, 0x61, 0x7c, 0x1a, 0x16, 0xed, 0x4b, 0xbe, 0x2a, 0xd4, 0xeb, 0x12, 0xd9, 0x18, 0xcf, 0x2f, 0xf2, 0xe6, 0x92, 0xaa, 0xa0, 0xd5, 0x61, 0xad, 0x6a, 0xc0, 0x32, 0xc1, 0x1a, 0xac, 0x73, 0xe5, 0xb8, 0xf9, 0xde, 0x4a, 0xda, 0xaa, 0x58, 0x22, 0x15, 0x5a, 0x35, 0x96, 0xa4, 0x43, 0xad, 0x0f, 0xc0, 0x08, 0xc0, 0xfa, 0xe9, 0xc8, 0x62, 0x2e, 0x11, 0x62, 0x2f, 0xb1, 0xe6, 0xbb, 0xda, 0x46, 0x07, 0xdf, 0x94, 0xf0, 0x41, 0x62, 0xbd, 0x75, 0x49, 0x6e, 0x6f, 0xa0, 0x87, 0x1e, 0xcb, 0x27, 0x15, 0xd4, 0xd2, 0xb5, 0x0a, 0x52, 0xa9, 0x02, 0x6c, 0x14, 0xc2, 0x25, 0x6d, 0xa8, 0x23, 0x13, 0xed, 0x31, 0x9c, 0x8e, 0xcc, 0xa0, 0x3d, 0xa4, 0xc2, 0x1e, 0x72, 0xf8, 0xb0, 0x3d, 0x7c, 0x35, 0xaf, 0xa2, 0xa5, 0x9b, 0x63, 0x0f, 0xe9, 0x99, 0x83, 0xdf, 0xf2, 0xaa, 0x22, 0x99, 0xf8, 0x44, 0xf4, 0xbf, 0xce, 0xcb, 0x45, 0x5a, 0x40, 0x9d, 0x64, 0x59, 0x45, 0x26, 0x52, 0xff, 0xb1, 0xa8, 0x9f, 0x96, 0xa9, 0x4b, 0x82, 0x15, 0x67, 0x22, 0xb5, 0x34, 0xa1, 0xb0, 0xac, 0x21, 0x13, 0xd1, 0xf3, 0x0c, 0xf5, 0x76, 0xe0, 0x0f, 0xe3, 0x22, 0xaa, 0x68, 0x94, 0x3a, 0xa9, 0x6a, 0x15, 0xa4, 0x4a, 0x24, 0x7a, 0x53, 0x0f, 0xb2, 0xdc, 0xe1, 0x93, 0x61, 0x7e, 0xd4, 0x4c, 0x96, 0xc3, 0x9a, 0x58, 0x6f, 0xd3, 0x11, 0xbf, 0x7c, 0x42, 0xea, 0x74, 0x49, 0x40, 0x1f, 0x2f, 0xc5, 0xb6, 0x12, 0xfb, 0x58, 0xb4, 0x34, 0x09, 0x34, 0x7e, 0xbc, 0x50, 0x2f, 0xf6, 0x32, 0xbc, 0x47, 0xc9, 0x1c, 0xd6, 0xaa, 0xcd, 0x2d, 0xea, 0xea, 0xd9, 0xe9, 0xee, 0x2d, 0x79, 0xf7, 0x29, 0x57, 0x4b, 0x86, 0x54, 0x4d, 0xa1, 0xb8, 0x52, 0xd5, 0x2d, 0x8e, 0x64, 0x42, 0xbe, 0x59, 0xdd, 0xa0, 0x6f, 0xc8, 0x70, 0x3c, 0xc1, 0xe1, 0x92, 0x34, 0x39, 0x64, 0xe2, 0x7a, 0xb1, 0xdc, 0x2b, 0xb1, 0xdc, 0xa4, 0x42, 0xa1, 0xa7, 0xe5, 0x9e, 0xa8, 0x4e, 0xd2, 0x62, 0x3f, 0xf6, 0x70, 0xb6, 0x14, 0xb4, 0x91, 0x2f, 0x84, 0x0a, 0x3a, 0xc6, 0x79, 0x3e, 0x92, 0xb5, 0x94, 0xc1, 0x6d, 0xbc, 0xfa, 0x40, 0x09, 0x16, 0xa7, 0x6e, 0xfe, 0xfd, 0x02, 0xb4, 0x87, 0x41, 0xec, 0x45, 0x6c, 0x5d, 0x98, 0xbf, 0xc3, 0x1f, 0x43, 0x8f, 0xcb, 0x7a, 0xb5, 0x28, 0x3b, 0xbc, 0x10, 0xb0, 0x5f, 0x97, 0x96, 0xb3, 0x9c, 0xb3, 0x00, 0xcf, 0x1b, 0xdd, 0x13, 0x77, 0xb3, 0xa8, 0xee, 0x15, 0xac, 0x88, 0x68, 0x8b, 0x8d, 0xea, 0xd8, 0x14, 0xf5, 0xbd, 0x4f, 0xb2, 0x9d, 0xd8, 0xab, 0xf9, 0x33, 0xa9, 0xcf, 0xa2, 0x66, 0x49, 0x34, 0x60, 0x39, 0x4d, 0x2a, 0x50, 0x4b, 0xc1, 0xb6, 0xc9, 0x0e, 0x51, 0xf6, 0xd9, 0x34, 0x8e, 0x94, 0x06, 0x9f, 0x9c, 0xcb, 0x07, 0x73, 0x66, 0x35, 0xda, 0x6d, 0x41, 0xdd, 0x1e, 0x91, 0xaf, 0x2c, 0x06, 0xdc, 0x27, 0x4d, 0x9f, 0xc2, 0x25, 0xc0, 0x3d, 0xae, 0x76, 0x35, 0x40, 0xb5, 0x9d, 0xe6, 0xa5, 0xe3, 0x08, 0xe7, 0x81, 0xd2, 0x46, 0xa8, 0x2f, 0x02, 0x29, 0x4a, 0x75, 0x0a, 0xad, 0x3f, 0x1f, 0x2c, 0x4a, 0xcb, 0x09, 0x4b, 0x21, 0x4e, 0x17, 0x37, 0xa9, 0xef, 0xe9, 0x5c, 0x42, 0xb3, 0x74, 0x14, 0x94, 0xe4, 0x24, 0x2f, 0xd5, 0xd0, 0x15, 0xdc, 0x1c, 0xe2, 0xc4, 0xd1, 0x54, 0x7b, 0x38, 0x5c, 0x33, 0x86, 0x88, 0x7a, 0x66, 0x2a, 0xe5, 0x6a, 0x42, 0x38, 0x42, 0x02, 0xed, 0xf2, 0x5e, 0x63, 0x48, 0x30, 0x94, 0x74, 0x0c, 0xe0, 0x3d, 0x55, 0x51, 0x5f, 0xb7, 0x55, 0x87, 0xd2, 0xc0, 0x8c, 0xeb, 0x7b, 0x56, 0x4c, 0x87, 0xa6, 0x82, 0x56, 0x46, 0x16, 0xe2, 0xae, 0xa5, 0xda, 0xdc, 0x5c, 0x02, 0x8c, 0x45, 0xeb, 0x0e, 0x54, 0x82, 0xc6, 0x5b, 0xef, 0x5c, 0x2b, 0x2b, 0x99, 0xad, 0x14, 0xb7, 0x55, 0x11, 0xd6, 0x24, 0xf9, 0x7a, 0xd1, 0x27, 0x4d, 0x0a, 0x95, 0xec, 0xa4, 0x63, 0x86, 0x1f, 0xa5, 0x1e, 0xc0, 0x56, 0x8e, 0x52, 0x3e, 0x6b, 0x9c, 0xe6, 0xf8, 0xdc, 0x27, 0xa7, 0x70, 0xf1, 0xdc, 0x4c, 0x4b, 0x02, 0xcf, 0x71, 0x66, 0x65, 0x25, 0x4a, 0xa4, 0xd8, 0x83, 0x80, 0x82, 0x92, 0x39, 0x14, 0x24, 0x1f, 0xbd, 0xd9, 0xf1, 0x72, 0x69, 0x7e, 0x93, 0x40, 0x94, 0xa5, 0x12, 0x2a, 0x79, 0xe8, 0x6c, 0xbb, 0xc3, 0xb6, 0x04, 0x47, 0x70, 0xcb, 0x3c, 0x8a, 0x24, 0x62, 0x2e, 0x4d, 0x69, 0x68, 0xc9, 0x85, 0x6a, 0xe0, 0xd0, 0x35, 0x10, 0xd6, 0x22, 0x6f, 0xad, 0x15, 0xd6, 0xf2, 0x5a, 0xcd, 0x0d, 0xbe, 0x93, 0xed, 0x03, 0x12, 0xe2, 0x08, 0xa0, 0xbe, 0xa5, 0x3d, 0x70, 0x5d, 0xa5, 0x7b, 0x92, 0x66, 0x87, 0x46, 0x9b, 0x81, 0x3d, 0x68, 0x3f, 0xcf, 0xde, 0xe0, 0xe8, 0xa8, 0xed, 0xfa, 0x8e, 0xf8, 0x96, 0xcd, 0x41, 0x29, 0x4a, 0xdd, 0x3b, 0xd7, 0x43, 0x5c, 0x87, 0x80, 0xb6, 0x69, 0xd6, 0xf9, 0x3e, 0xc3, 0x56, 0xa1, 0x3d, 0xb8, 0x0a, 0x69, 0xad, 0x06, 0x6f, 0x5d, 0x2a, 0xca, 0x3f, 0x6a, 0x75, 0xd4, 0x5f, 0xb6, 0x28, 0x57, 0xba, 0xc7, 0xc5, 0x3f, 0x2b, 0x48, 0x2c, 0xe5, 0x2c, 0x0f, 0xd0, 0xeb, 0x9e, 0x54, 0x52, 0x54, 0x41, 0xe2, 0x85, 0x93, 0x74, 0xce, 0x9d, 0xa1, 0x77, 0x71, 0x94, 0x47, 0x56, 0x10, 0x0b, 0xe5, 0x91, 0x15, 0x24, 0x42, 0xe4, 0x91, 0x6d, 0x53, 0x90, 0xf2, 0x35, 0x86, 0x93, 0x65, 0x50, 0x52, 0x9c, 0x75, 0x3d, 0x61, 0xb5, 0x28, 0x4a, 0x5d, 0x8c, 0x3c, 0x26, 0xcc, 0x49, 0xe7, 0xd3, 0x78, 0xfa, 0xe4, 0x8c, 0xdb, 0x93, 0x38, 0xfa, 0xa4, 0x96, 0xea, 0xf7, 0xaf, 0x71, 0x3d, 0xb5, 0xd0, 0xa7, 0x57, 0x5c, 0x7e, 0x31, 0x45, 0x8a, 0x33, 0x82, 0xb3, 0xc1, 0x3c, 0x77, 0xd2, 0x8b, 0x9d, 0xdc, 0x52, 0x89, 0x48, 0xdd, 0x2c, 0x20, 0xef, 0xdd, 0x40, 0xf7, 0xdf, 0x51, 0xee, 0xbf, 0xbe, 0x84, 0x94, 0xee, 0x39, 0x39, 0x1b, 0x7d, 0x53, 0x3c, 0x3d, 0x8a, 0x2f, 0x42, 0x2b, 0x3b, 0x74, 0x5c, 0x04, 0x60, 0xfd, 0xd4, 0x49, 0x9a, 0x04, 0xd4, 0xf7, 0x06, 0x6e, 0xdc, 0xec, 0x78, 0xaa, 0xb7, 0x85, 0xc8, 0x2c, 0x79, 0x44, 0x8e, 0xd6, 0x8d, 0x8c, 0x3e, 0xe8, 0xbf, 0x22, 0x6b, 0x6e, 0x44, 0x19, 0xc9, 0xe4, 0x92, 0x8e, 0xd4, 0xd0, 0x1c, 0x57, 0x20, 0xc5, 0x0a, 0x18, 0x64, 0x70, 0x00, 0x7a, 0x6b, 0x9b, 0x74, 0x38, 0xee, 0xb0, 0xb9, 0x77, 0x1c, 0xac, 0xf8, 0xf1, 0xbd, 0x73, 0x48, 0x20, 0xf1, 0xe1, 0x06, 0x8b, 0xf6, 0x7d, 0x4c, 0x66, 0xe4, 0x63, 0x54, 0xe4, 0x68, 0x05, 0xeb, 0xb7, 0x19, 0xb8, 0x6b, 0x05, 0xfd, 0x83, 0x73, 0xf7, 0x1d, 0x91, 0x97, 0x6b, 0xd6, 0xbf, 0xe7, 0x5c, 0x76, 0x6f, 0xee, 0x55, 0xba, 0xd9, 0xbd, 0x69, 0xd3, 0x0a, 0x0f, 0xd3, 0xa3, 0x58, 0xe7, 0x7a, 0xa2, 0xa4, 0xb3, 0xc1, 0xa7, 0x99, 0xca, 0x61, 0xfd, 0xbc, 0x90, 0x69, 0xab, 0x2b, 0x71, 0x47, 0x40, 0xaf, 0x83, 0xd9, 0x8e, 0xad, 0x63, 0x2e, 0x46, 0xfd, 0x06, 0x15, 0xea, 0x21, 0x19, 0xc6, 0x30, 0x9a, 0xd9, 0x40, 0x14, 0x48, 0x03, 0x10, 0xd1, 0x2a, 0x1d, 0x8c, 0x80, 0x61, 0x40, 0x1d, 0x6a, 0x49, 0xb3, 0x76, 0x83, 0x06, 0x6d, 0xd7, 0x88, 0xde, 0xc6, 0x22, 0xd8, 0x97, 0xd8, 0x0e, 0x9b, 0xa8, 0xb6, 0x3d, 0x91, 0x46, 0xe0, 0x5b, 0x9d, 0xaa, 0x0f, 0xee, 0x3a, 0x2c, 0xe9, 0x02, 0xd8, 0xbd, 0x73, 0x0e, 0xac, 0x77, 0xaf, 0xf5, 0x01, 0x9c, 0x25, 0x2c, 0xe6, 0xbb, 0x70, 0x89, 0xda, 0x1c, 0xa2, 0xd0, 0x85, 0x12, 0x9f, 0x3e, 0x79, 0x24, 0x10, 0x62, 0x84, 0x92, 0xa0, 0xce, 0x79, 0xa4, 0xa3, 0xf0, 0x9a, 0xa5, 0x40, 0x58, 0x6c, 0x9b, 0x0a, 0xa3, 0xa5, 0x9e, 0x4a, 0x3a, 0xd2, 0xbc, 0x62, 0x89, 0x49, 0x2a, 0x37, 0x93, 0xd8, 0x9a, 0x24, 0x6b, 0x75, 0x4b, 0xec, 0x26, 0x52, 0x68, 0xf6, 0x10, 0x1b, 0x7c, 0x05, 0xdf, 0x6c, 0xc5, 0x92, 0x00, 0x86, 0x5d, 0x81, 0x7e, 0xa6, 0x9a, 0x6a, 0xa9, 0x4f, 0xad, 0x95, 0xb1, 0x49, 0x6c, 0xcf, 0xcb, 0xbf, 0x2c, 0xfa, 0x4c, 0x39, 0x5a, 0xbc, 0x80, 0x77, 0x4b, 0x1e, 0x49, 0x22, 0xba, 0x5e, 0x05, 0xc2, 0x12, 0x62, 0xe8, 0x90, 0x4c, 0xc2, 0x3b, 0x14, 0x08, 0xaf, 0x11, 0xa3, 0x3a, 0x11, 0x47, 0x3f, 0xce, 0x1f, 0x6a, 0x23, 0xb7, 0x83, 0x43, 0x56, 0xa4, 0x82, 0x15, 0x4c, 0x16, 0x58, 0xa5, 0x90, 0x88, 0xef, 0x3a, 0xe4, 0x90, 0x76, 0xc0, 0xf7, 0xe8, 0x89, 0xd4, 0x02, 0xf4, 0x24, 0x80, 0x3c, 0xee, 0x32, 0xd1, 0x3d, 0x62, 0x25, 0x8a, 0xb8, 0x5f, 0xc8, 0x63, 0xb6, 0x29, 0xf6, 0xf0, 0xb8, 0x1b, 0x15, 0x04, 0xee, 0x95, 0x96, 0xd5, 0x30, 0x0b, 0x2d, 0x0e, 0xd4, 0xc7, 0xa6, 0xb9, 0x47, 0x58, 0xa8, 0x4d, 0x41, 0x68, 0x57, 0xc8, 0xbd, 0x93, 0xb8, 0xce, 0x92, 0x1b, 0xd1, 0xd2, 0x8c, 0x84, 0x48, 0x8f, 0x85, 0xf9, 0xc4, 0xc7, 0xf9, 0x1d, 0x7c, 0x13, 0x7c, 0xff, 0x17, 0xf7, 0xd0, 0x2e, 0xa8, 0x6a, 0x7d, 0x82, 0x43, 0xcd, 0xde, 0x25, 0x98, 0x2c, 0x0b, 0xf6, 0x18, 0xbd, 0x0f, 0x5d, 0x26, 0x4a, 0x23, 0x8c, 0x34, 0xb4, 0x6f, 0x05, 0xb1, 0x76, 0x60, 0xac, 0x78, 0xd4, 0x4c, 0x02, 0x2e, 0x0e, 0x66, 0x70, 0xa0, 0xd1, 0xc7, 0x9a, 0x0b, 0x63, 0x88, 0xae, 0x1a, 0x50, 0x52, 0x13, 0x6a, 0x2c, 0x99, 0x12, 0xd2, 0x2b, 0xf0, 0x3b, 0xb8, 0xe6, 0xa0, 0x94, 0x9a, 0x47, 0x72, 0x81, 0x5a, 0x30, 0xc1, 0xaf, 0x81, 0x44, 0x12, 0x3d, 0xb4, 0x6e, 0x14, 0x9d, 0xb1, 0x16, 0xbb, 0x1c, 0xea, 0x17, 0xcc, 0x5b, 0x4a, 0x97, 0x9d, 0x9c, 0xad, 0x4e, 0x40, 0xbd, 0x1c, 0x43, 0x0e, 0xed, 0xe3, 0x98, 0xe6, 0x56, 0x06, 0xfc, 0xb0, 0x0c, 0xf2, 0x1d, 0x85, 0xfa, 0x56, 0x10, 0x27, 0x9f, 0xea, 0x7e, 0x29, 0x9c, 0x73, 0xa2, 0x97, 0x99, 0x04, 0xd3, 0xf5, 0x29, 0x97, 0x70, 0xea, 0x78, 0xd5, 0x2a, 0x60, 0xc9, 0xb1, 0x9f, 0x54, 0x18, 0x07, 0xea, 0x45, 0x7b, 0x09, 0xad, 0xe1, 0x30, 0x7a, 0x1a, 0x65, 0x9e, 0xf3, 0x71, 0x1e, 0x50, 0x0c, 0x88, 0x92, 0xb2, 0x85, 0x84, 0xd3, 0xa1, 0x7d, 0xb1, 0x42, 0xa2, 0xa3, 0xfb, 0x62, 0xb1, 0xdc, 0x07, 0xc0, 0xa3, 0x41, 0x2e, 0xb0, 0x22, 0x89, 0xa3, 0x8d, 0x38, 0xf4, 0xb8, 0xaf, 0x49, 0xad, 0x4d, 0x6f, 0xbe, 0x7b, 0x06, 0xdf, 0xa1, 0x7c, 0x2f, 0x91, 0xab, 0x07, 0x14, 0x0b, 0x2c, 0xd6, 0x7b, 0x74, 0xd6, 0xcb, 0x2d, 0x95, 0xda, 0x50, 0x12, 0x59, 0x42, 0x02, 0x0d, 0x44, 0x5a, 0x4c, 0x02, 0x0c, 0x44, 0x02, 0x31, 0x03, 0x01, 0xb7, 0xd3, 0x58, 0x77, 0x27, 0xe3, 0xaa, 0x86, 0x98, 0x92, 0x6a, 0xfe, 0x15, 0x8a, 0x96, 0xa7, 0x34, 0x46, 0x82, 0xfe, 0x01, 0x82, 0xa1, 0xdd, 0xc5, 0x5c, 0xa0, 0x95, 0xef, 0x8e, 0xa3, 0xf6, 0x3a, 0xe0, 0x2b, 0xa2, 0x32, 0x5a, 0x88, 0x52, 0xf3, 0xb0, 0xe6, 0x69, 0x9e, 0xdc, 0x1d, 0x87, 0x61, 0xb3, 0x65, 0x69, 0x2d, 0xb3, 0x07, 0xa1, 0x08, 0x85, 0xfe, 0x32, 0x3a, 0x82, 0x60, 0x9c, 0x9b, 0x84, 0xba, 0xc8, 0x50, 0x12, 0x11, 0x0d, 0xa5, 0x80, 0xbb, 0x28, 0xe1, 0x32, 0x1f, 0x08, 0xa1, 0x8c, 0x3e, 0x95, 0xc3, 0x53, 0x05, 0xdc, 0xf9, 0x08, 0x97, 0xd1, 0xde, 0x11, 0xf3, 0xe2, 0x77, 0x54, 0x94, 0x0a, 0x56, 0xa0, 0x6d, 0x00, 0xb9, 0x5e, 0x31, 0x91, 0xf0, 0x1a, 0xb8, 0xf6, 0xb3, 0xa7, 0xea, 0xd1, 0x6b, 0x2d, 0xda, 0x8c, 0x45, 0xef, 0x26, 0x61, 0x74, 0x4c, 0x1d, 0xa0, 0xfa, 0x07, 0x2a, 0xf8, 0xea, 0x2d, 0xdb, 0x34, 0x47, 0xb8, 0xe8, 0x25, 0x04, 0x67, 0x0f, 0x62, 0x4a, 0x75, 0x3c, 0x97, 0x98, 0x88, 0xb4, 0xa5, 0xab, 0x77, 0xee, 0xa5, 0x9a, 0xc2, 0x84, 0xfa, 0x88, 0x30, 0xe1, 0x06, 0x1f, 0x38, 0x91, 0x50, 0x4b, 0x4d, 0x80, 0x0f, 0xd0, 0xfb, 0xef, 0x04, 0x82, 0x7a, 0xd9, 0x65, 0x1e, 0x5b, 0x3f, 0x84, 0x35, 0x58, 0x6f, 0x4a, 0x88, 0x28, 0x80, 0x12, 0xf6, 0xef, 0x7f, 0xa3, 0xc2, 0xd3, 0x54, 0x20, 0x5c, 0x16, 0x2d, 0x11, 0xce, 0xdb, 0xee, 0xf4, 0xe2, 0x12, 0x61, 0x49, 0xbc, 0x9e, 0x23, 0x41, 0x9b, 0x48, 0x65, 0x32, 0xe7, 0x17, 0xa2, 0x75, 0x93, 0x79, 0xd5, 0x3a, 0x8c, 0x33, 0xf5, 0xc2, 0x54, 0x67, 0x0a, 0x56, 0x12, 0x69, 0x19, 0x32, 0x43, 0x4c, 0x61, 0xd1, 0x76, 0xbe, 0xa8, 0xcc, 0x93, 0x7e, 0xa1, 0xfd, 0xb3, 0x2f, 0x30, 0xcf, 0xc4, 0x7a, 0xce, 0x83, 0xb7, 0x44, 0xe3, 0x33, 0x4b, 0x84, 0xab, 0x0c, 0xe2, 0x37, 0x25, 0x92, 0xf5, 0x98, 0x46, 0x80, 0x29, 0xa1, 0xf9, 0xeb, 0xfe, 0x0d, 0x56, 0xc2, 0xcb, 0x9e, 0x9c, 0xf5, 0x6a, 0xf5, 0x82, 0xed, 0x06, 0x6f, 0xb1, 0x9c, 0x89, 0x37, 0x72, 0x24, 0x6e, 0xad, 0x19, 0xab, 0x8e, 0x2f, 0x92, 0xa0, 0x96, 0x40, 0xf3, 0xb8, 0xbe, 0x3b, 0x59, 0x1d, 0x6f, 0x52, 0x02, 0x3f, 0xee, 0x63, 0xdd, 0x8e, 0x9a, 0x9f, 0x6c, 0xf4, 0xa8, 0xb0, 0xed, 0xb8, 0x30, 0xe1, 0x0a, 0xbb, 0xdf, 0xc9, 0xc7, 0xaa, 0xd1, 0x22, 0x95, 0xf8, 0xdd, 0x12, 0xec, 0x0f, 0x87, 0x12, 0xe8, 0x01, 0xa5, 0xda, 0x07, 0xde, 0xce, 0x01, 0xdc, 0xe6, 0xbc, 0xd6, 0x51, 0x8b, 0xbc, 0x5e, 0xce, 0x1e, 0xba, 0xb7, 0x92, 0x59, 0x1e, 0x10, 0x71, 0x3e, 0xb3, 0x90, 0x4d, 0xf5, 0x7d, 0x71, 0xb4, 0xeb, 0x60, 0xb4, 0x9b, 0xa3, 0x8c, 0x24, 0x3c, 0xd2, 0x08, 0x63, 0xc4, 0x48, 0xa2, 0x62, 0x8c, 0x24, 0x26, 0xba, 0x90, 0xf4, 0xed, 0x57, 0x56, 0x51, 0x41, 0xb8, 0x7e, 0x65, 0x6a, 0x35, 0x51, 0x53, 0xab, 0x50, 0x79, 0x58, 0x8e, 0xa6, 0xe5, 0x90, 0x8b, 0x8d, 0x5d, 0xaf, 0x2e, 0xd2, 0xd4, 0xcc, 0x7d, 0xb2, 0x1c, 0x78, 0x53, 0x66, 0x89, 0x56, 0x6d, 0x33, 0x79, 0x40, 0x4d, 0xa4, 0xd6, 0xed, 0x91, 0x32, 0xeb, 0x8e, 0x28, 0x4f, 0xeb, 0x97, 0x2c, 0xe6, 0x41, 0xa7, 0x55, 0x59, 0x18, 0xeb, 0xa2, 0xc6, 0xef, 0xb3, 0x2d, 0xe4, 0x00, 0x27, 0xfe, 0xb1, 0x15, 0x98, 0x66, 0x3e, 0x96, 0xad, 0x40, 0x17, 0x9a, 0x9f, 0xc2, 0x5c, 0x41, 0xdf, 0x54, 0x4e, 0x4b, 0x6f, 0x67, 0x9a, 0x53, 0x61, 0x6b, 0x53, 0x8d, 0xf3, 0x8c, 0x03, 0xbf, 0x5f, 0xb0, 0x57, 0xd3, 0xcc, 0x09, 0x4f, 0x15, 0xe9, 0x38, 0xf1, 0xfc, 0x81, 0x8b, 0xd6, 0xa0, 0xa5, 0x05, 0x23, 0x31, 0x27, 0x5f, 0xa3, 0x18, 0x8c, 0xc3, 0x13, 0xa0, 0x63, 0xb9, 0x22, 0x85, 0xff, 0x8f, 0x25, 0x78, 0x6e, 0x61, 0x94, 0x02, 0xc5, 0x1f, 0x8b, 0x54, 0x57, 0xff, 0x46, 0x61, 0x72, 0xea, 0x42, 0xa3, 0x99, 0x98, 0x5a, 0x3c, 0xef, 0x40, 0x9f, 0x59, 0x8d, 0x85, 0x64, 0x14, 0xe5, 0x68, 0x74, 0xe1, 0xab, 0x81, 0x77, 0xf2, 0x85, 0x38, 0x6a, 0xa0, 0x03, 0xca, 0xd8, 0xde, 0x9e, 0x82, 0x33, 0x53, 0xdf, 0xc3, 0xa8, 0xfb, 0x2c, 0x13, 0xcf, 0x2b, 0xc4, 0xb9, 0x0b, 0x65, 0x10, 0x75, 0x10, 0x95, 0x9a, 0x30, 0x12, 0x08, 0x65, 0x08, 0xa6, 0x65, 0x48, 0x47, 0xcd, 0xda, 0xb6, 0x4b, 0xd1, 0x74, 0x37, 0x75, 0x21, 0xce, 0x32, 0xb7, 0xe7, 0x0a, 0x58, 0x9d, 0x16, 0x52, 0xbd, 0xd5, 0x01, 0xd4, 0xd7, 0x33, 0x96, 0xa1, 0xf9, 0x5d, 0x02, 0xa3, 0xe1, 0xca, 0xed, 0x2a, 0x55, 0x2c, 0x41, 0xff, 0xa2, 0x81, 0x10, 0xfa, 0x42, 0x18, 0x42, 0x4f, 0xbe, 0x50, 0x87, 0x57, 0x4f, 0xfa, 0xc2, 0xac, 0x3e, 0x78, 0x5f, 0x69, 0xaf, 0x86, 0xc8, 0x98, 0x36, 0xeb, 0x10, 0xa1, 0x06, 0xf5, 0xe7, 0x69, 0x69, 0xa1, 0xa4, 0x50, 0xda, 0x60, 0x28, 0xad, 0x89, 0x96, 0x56, 0x0d, 0x69, 0xd4, 0xb4, 0x55, 0xda, 0xe4, 0xc6, 0xa6, 0xd4, 0xd4, 0x05, 0x94, 0xee, 0x72, 0x2f, 0xad, 0x3f, 0x7d, 0x76, 0xe6, 0xbe, 0x92, 0xb6, 0xa3, 0xcf, 0xa9, 0xb6, 0x3c, 0xd0, 0x70, 0x72, 0xb4, 0xdd, 0x83, 0x7a, 0xb5, 0x68, 0xa3, 0x83, 0xea, 0x46, 0xdd, 0x65, 0xe5, 0xad, 0x81, 0xd0, 0x02, 0xe5, 0xed, 0x72, 0x7f, 0x79, 0x95, 0x4a, 0x97, 0x2d, 0xf8, 0x6a, 0x8a, 0xd9, 0x59, 0xeb, 0xba, 0x95, 0xd9, 0x8c, 0x65, 0x3e, 0x7a, 0x01, 0xd2, 0xa9, 0x6e, 0xbb, 0x85, 0xef, 0x2d, 0xa5, 0xad, 0xb9, 0xb3, 0x45, 0x99, 0xbd, 0x53, 0x17, 0x1a, 0xa8, 0xbd, 0x4c, 0xba, 0xaf, 0x1a, 0x89, 0xa7, 0x22, 0x2d, 0xde, 0xfb, 0xd0, 0x6f, 0x58, 0x3d, 0xa9, 0x06, 0x0f, 0x3e, 0x7d, 0x9c, 0x3e, 0x3d, 0x43, 0xed, 0x2a, 0xb9, 0xd7, 0x34, 0xd1, 0xd9, 0x27, 0x0e, 0x45, 0x68, 0x1e, 0x09, 0x11, 0x6a, 0xa1, 0x9e, 0xed, 0xb1, 0x67, 0xfa, 0xff, 0x4c, 0x74, 0x45, 0x0f, 0x57, 0xaf, 0x21, 0x32, 0x2a, 0xf3, 0x17, 0x28, 0x72, 0x0b, 0x0e, 0x26, 0xf5, 0x65, 0x0f, 0x28, 0x92, 0xf2, 0x3e, 0xc5, 0xb2, 0xd0, 0x38, 0xe1, 0x0a, 0x2f, 0x9e, 0x9a, 0x5c, 0x69, 0x6e, 0x29, 0xaa, 0x9b, 0x53, 0x8f, 0x63, 0x40, 0x2c, 0x05, 0xcd, 0x29, 0x19, 0xd6, 0x90, 0xf5, 0xac, 0x9d, 0xcc, 0x54, 0xd3, 0x59, 0x46, 0x25, 0x61, 0xb8, 0xd1, 0x3e, 0x4c, 0x06, 0x46, 0xcf, 0xab, 0x68, 0x5e, 0x01, 0x68, 0x09, 0x16, 0xee, 0x3b, 0x01, 0x6f, 0x2d, 0x85, 0xd4, 0x3c, 0x78, 0x9f, 0x22, 0x59, 0x0f, 0x33, 0x91, 0xf1, 0x5d, 0x8a, 0x3d, 0x7b, 0xc4, 0x41, 0x18, 0x94, 0xfc, 0x33, 0xe1, 0x8c, 0xa1, 0x40, 0xdd, 0xf8, 0xd0, 0xb3, 0xa1, 0x19, 0x96, 0x0f, 0x88, 0x2c, 0x6d, 0xae, 0x6d, 0xb9, 0xdd, 0xd9, 0x33, 0xd5, 0x10, 0x26, 0x41, 0x8e, 0x53, 0x59, 0x8e, 0x4a, 0x67, 0xcf, 0xb8, 0x74, 0xa3, 0x57, 0xb2, 0xde, 0xa9, 0x72, 0x8e, 0x7d, 0xd4, 0xaa, 0xa3, 0x3d, 0x32, 0x1f, 0xbe, 0xaf, 0x12, 0x7b, 0x04, 0xbf, 0xee, 0x7f, 0x95, 0x04, 0x26, 0x37, 0xde, 0xd5, 0x95, 0x48, 0xf8, 0x52, 0xe0, 0x16, 0x91, 0x7e, 0x44, 0x1b, 0x27, 0x0a, 0x12, 0x20, 0xca, 0x35, 0xa2, 0x8e, 0x81, 0x23, 0x3c, 0x1b, 0x2d, 0x97, 0x20, 0x4f, 0x94, 0xc9, 0x87, 0xd0, 0x67, 0x81, 0x8e, 0x98, 0xd1, 0x11, 0xf4, 0x2a, 0xc9, 0x11, 0x45, 0xc3, 0x74, 0x7b, 0x34, 0x1f, 0x01, 0x2d, 0xb3, 0x95, 0x37, 0xc1, 0xef, 0x4e, 0x4e, 0x7a, 0x71, 0x25, 0xb6, 0x1b, 0xaf, 0x86, 0xbb, 0x03, 0x7c, 0x08, 0xda, 0x40, 0xe2, 0x83, 0xe0, 0xf7, 0x0c, 0xaf, 0x42, 0x5b, 0x21, 0xbc, 0x0f, 0x6d, 0x5d, 0x6c, 0xe3, 0x06, 0xda, 0x8e, 0xca, 0xd4, 0x05, 0xa2, 0xd7, 0x4f, 0x61, 0x42, 0x8b, 0x51, 0x58, 0x05, 0xa1, 0x0d, 0x78, 0xea, 0x25, 0x6d, 0xce, 0x9a, 0x15, 0xac, 0x9e, 0x78, 0x4a, 0x48, 0xeb, 0xc9, 0xe6, 0x77, 0x16, 0xad, 0x6b, 0x8c, 0xf3, 0xac, 0x50, 0xac, 0xab, 0x25, 0x1e, 0x6a, 0x1b, 0x9c, 0xdc, 0xf8, 0x7b, 0x0c, 0x9f, 0xdb, 0xa2, 0xae, 0x56, 0x87, 0x2d, 0xbb, 0x13, 0xbd, 0x52, 0x3a, 0x0c, 0x34, 0x7c, 0xcc, 0x21, 0xd6, 0xce, 0xd7, 0x6e, 0xe6, 0xc5, 0x56, 0xb0, 0x39, 0x22, 0x50, 0x76, 0x09, 0x75, 0x39, 0xec, 0x06, 0x5e, 0x09, 0xe5, 0x5e, 0xc3, 0x6b, 0xe0, 0x77, 0x3d, 0xdf, 0x05, 0x6b, 0x3d, 0x4e, 0x42, 0x6b, 0xb7, 0x93, 0xd6, 0xee, 0x00, 0xad, 0xdd, 0x51, 0x5a, 0xbb, 0x33, 0x2d, 0x6a, 0x57, 0x61, 0x8b, 0xb7, 0xcb, 0x43, 0x0b, 0x84, 0x9d, 0xc2, 0x56, 0xe0, 0xd6, 0xe5, 0xa1, 0x16, 0x3a, 0xc2, 0x70, 0xee, 0xd5, 0xb5, 0xa8, 0xf5, 0x4a, 0x08, 0xb5, 0xa9, 0x9b, 0x1b, 0xdf, 0x6a, 0xa3, 0xd6, 0x4a, 0x61, 0xe1, 0x9f, 0xd5, 0xfa, 0xc8, 0x85, 0xb6, 0x6b, 0xdd, 0x98, 0xd0, 0xaa, 0x87, 0xfb, 0x3b, 0xb2, 0x58, 0xad, 0x63, 0xa8, 0x45, 0x1a, 0x6c, 0x07, 0x33, 0x0d, 0x81, 0x1a, 0x61, 0xfd, 0x3c, 0xc0, 0xd1, 0x69, 0x74, 0x34, 0xbd, 0x4a, 0x61, 0xfd, 0x3c, 0xc4, 0x1e, 0xc1, 0x6a, 0xaf, 0xa7, 0xb5, 0xd7, 0xb0, 0xda, 0x87, 0xd0, 0xda, 0x07, 0xd1, 0xda, 0xab, 0x68, 0xed, 0x7d, 0x68, 0x6f, 0x63, 0x1b, 0xd4, 0xb6, 0xee, 0xe1, 0x7f, 0xaf, 0x15, 0xee, 0x2c, 0xfb, 0xb3, 0x56, 0x68, 0xaa, 0x67, 0xb4, 0x19, 0xb6, 0x82, 0x12, 0xed, 0x14, 0x84, 0x43, 0x6b, 0xd0, 0xd3, 0x5c, 0x7f, 0xa1, 0x08, 0xe8, 0x9e, 0x12, 0xa6, 0x95, 0x5b, 0x4a, 0x73, 0x28, 0xa3, 0x77, 0x1d, 0x04, 0xd4, 0x2e, 0x9e, 0x4a, 0xf9, 0x59, 0xad, 0x50, 0x01, 0xb1, 0x66, 0xd1, 0xeb, 0xee, 0x42, 0x25, 0x60, 0xed, 0x76, 0xf0, 0x6e, 0x21, 0xbd, 0xd7, 0x09, 0x4b, 0xe0, 0xdd, 0x32, 0xfc, 0x46, 0x25, 0x11, 0x56, 0xb0, 0xf3, 0xde, 0x77, 0xe8, 0xbd, 0x54, 0x58, 0x89, 0xd6, 0xa8, 0xe1, 0x7e, 0x0d, 0xbd, 0xf7, 0x11, 0xaa, 0xe0, 0x7a, 0x3d, 0x4d, 0x5f, 0x2b, 0x6c, 0x8a, 0x43, 0x3b, 0x0e, 0x56, 0x61, 0x2b, 0xbd, 0xef, 0x28, 0x54, 0x23, 0xae, 0xa3, 0xf1, 0xba, 0x00, 0xc7, 0x6d, 0xa6, 0x1c, 0xb7, 0x87, 0xea, 0x61, 0xe0, 0xb8, 0x01, 0x9f, 0xb1, 0x74, 0xa9, 0x75, 0x30, 0xe8, 0xc7, 0x52, 0xe4, 0xd2, 0x9b, 0x6e, 0xbb, 0x9f, 0x72, 0x37, 0xdd, 0x66, 0xa7, 0xdc, 0x84, 0x9d, 0x72, 0x2b, 0xd8, 0x29, 0xb7, 0x8a, 0x86, 0x3a, 0x21, 0x38, 0x34, 0x59, 0x08, 0xa1, 0x65, 0x1e, 0x20, 0x70, 0x34, 0xb4, 0x09, 0x3a, 0xba, 0x27, 0x29, 0x11, 0x4c, 0x34, 0x0e, 0x27, 0x44, 0xb3, 0xb3, 0x6e, 0x33, 0x7d, 0xef, 0x27, 0x58, 0x99, 0x4d, 0x9a, 0xb4, 0x22, 0xd4, 0x47, 0xcc, 0x64, 0x27, 0xe3, 0x59, 0xf4, 0x69, 0x3b, 0x81, 0xa7, 0xa3, 0xa7, 0xa0, 0xe9, 0x56, 0xa9, 0x64, 0xc1, 0x5e, 0x4b, 0x62, 0x19, 0x19, 0x08, 0xe3, 0x28, 0xb1, 0xf1, 0xb7, 0xbb, 0x40, 0x19, 0x1e, 0x6f, 0x31, 0x92, 0x74, 0x28, 0x1d, 0x9c, 0x1d, 0x49, 0x71, 0x44, 0x90, 0x23, 0x87, 0xe2, 0x0d, 0x94, 0x4c, 0xcb, 0xa2, 0x21, 0xf5, 0xde, 0xc1, 0x67, 0xd1, 0x98, 0x5a, 0xc7, 0xd0, 0xec, 0x61, 0xf8, 0x54, 0x25, 0xa1, 0x32, 0xb5, 0x4f, 0xd1, 0xa7, 0xa1, 0x8e, 0x71, 0xd9, 0x01, 0xf4, 0xaa, 0x87, 0x63, 0x14, 0x0d, 0xf5, 0xf6, 0x62, 0x7e, 0x28, 0xbd, 0x4a, 0x73, 0x88, 0xe1, 0x60, 0x16, 0x1a, 0xec, 0x59, 0x7c, 0x3a, 0x8c, 0xa9, 0x12, 0x3e, 0x0d, 0x7e, 0xcb, 0x78, 0x1b, 0xfc, 0x4e, 0xe5, 0x13, 0xe0, 0x77, 0x16, 0xdf, 0x17, 0x7e, 0x17, 0xf2, 0xd1, 0xf0, 0xbb, 0xac, 0x4f, 0x5c, 0xd3, 0x2d, 0x3e, 0xbc, 0x48, 0x52, 0x35, 0x89, 0x5a, 0xea, 0x93, 0x22, 0xcf, 0x87, 0x3d, 0xc7, 0x77, 0x32, 0xc0, 0x4c, 0x8d, 0x91, 0xf0, 0x01, 0xea, 0x38, 0xde, 0x3f, 0x58, 0x42, 0x47, 0xa9, 0x81, 0x8e, 0xd2, 0x48, 0xc0, 0xb9, 0xcb, 0x8c, 0xfe, 0xa1, 0xfd, 0x9b, 0xea, 0x53, 0xe7, 0xa7, 0xcd, 0x55, 0x17, 0x34, 0xd5, 0xd3, 0xd1, 0x1a, 0x44, 0x9f, 0x3b, 0x57, 0x2e, 0x49, 0x62, 0xe3, 0xad, 0xf3, 0xa9, 0xf3, 0xfb, 0x98, 0x85, 0xdb, 0x2d, 0x9e, 0x7b, 0xd0, 0x67, 0x8d, 0x74, 0x0d, 0xfa, 0xc0, 0xed, 0xb9, 0x27, 0x7d, 0x7e, 0xb7, 0x45, 0x5c, 0x2f, 0xfa, 0xac, 0xa9, 0x39, 0xae, 0x2b, 0xe5, 0xa2, 0xd4, 0xf9, 0x9c, 0x39, 0x73, 0x25, 0xe0, 0xfe, 0x50, 0xd7, 0x73, 0x8f, 0x36, 0x9e, 0x79, 0xe2, 0xb3, 0x27, 0x57, 0x32, 0xfb, 0xfa, 0xcd, 0x69, 0x78, 0x39, 0x9f, 0xc3, 0x9c, 0x3a, 0x03, 0xf1, 0x71, 0x16, 0x15, 0x41, 0xa8, 0x4f, 0xdd, 0x7c, 0x6b, 0xa8, 0xa8, 0x5f, 0x2e, 0xd6, 0x0b, 0x56, 0xd7, 0x4b, 0x24, 0x17, 0xe7, 0x92, 0x6d, 0xba, 0x5d, 0x69, 0x4b, 0xb4, 0x2b, 0xd6, 0x31, 0xfe, 0x04, 0xa9, 0x23, 0xba, 0x4b, 0x74, 0x9e, 0xb6, 0x84, 0x73, 0x0c, 0xca, 0x60, 0x1c, 0x9d, 0xa7, 0xa1, 0x54, 0xa0, 0x1e, 0x2d, 0x68, 0x3a, 0xd3, 0xed, 0x72, 0xf4, 0x79, 0x77, 0xfc, 0x0e, 0xa4, 0x20, 0xeb, 0x84, 0xab, 0x27, 0xee, 0x82, 0x0c, 0x43, 0xab, 0x20, 0x68, 0xcf, 0x07, 0xad, 0x45, 0xf7, 0xc9, 0x21, 0xc1, 0x4d, 0x0d, 0xb6, 0x97, 0x1c, 0x1a, 0x2e, 0x59, 0xa4, 0x58, 0x85, 0x4d, 0x6a, 0x7a, 0x06, 0x13, 0xd5, 0x03, 0xde, 0x8e, 0xc1, 0xb7, 0xec, 0xf9, 0x3a, 0x86, 0x05, 0x82, 0xd1, 0x73, 0x52, 0xbf, 0xb0, 0xa6, 0x06, 0x8b, 0x43, 0xf4, 0x37, 0x04, 0xbd, 0x61, 0xc6, 0xf1, 0xcd, 0x4b, 0xc7, 0x29, 0x94, 0x50, 0x02, 0x87, 0x26, 0xdb, 0x07, 0x42, 0x1c, 0x43, 0x53, 0x79, 0x7f, 0xb8, 0x42, 0x39, 0x73, 0x19, 0x51, 0xd8, 0x61, 0x54, 0x44, 0xe8, 0x89, 0x6c, 0x44, 0xdc, 0xfc, 0xfe, 0xbc, 0x0f, 0x5e, 0x1d, 0xce, 0x25, 0x8a, 0xa7, 0xe2, 0xd0, 0x33, 0x5e, 0x3a, 0xda, 0xf9, 0xf7, 0x29, 0x25, 0xd1, 0x1e, 0xf3, 0x76, 0x3a, 0xb9, 0x8a, 0x9a, 0x04, 0x3e, 0x89, 0xeb, 0x5f, 0x79, 0x19, 0xa8, 0x5d, 0x66, 0x03, 0x14, 0x62, 0xca, 0x2a, 0xe3, 0x22, 0xa8, 0x2f, 0xbd, 0x27, 0xcd, 0x95, 0xf1, 0xbc, 0xb6, 0xd5, 0xfb, 0x5c, 0x78, 0xbf, 0x3d, 0x02, 0x7d, 0x96, 0xc8, 0x6b, 0x20, 0xbd, 0x61, 0x66, 0x5e, 0x66, 0x31, 0x5b, 0xe2, 0xd0, 0x6e, 0x40, 0xd3, 0x5d, 0x93, 0x19, 0x66, 0xbc, 0x2c, 0xb4, 0xbf, 0xa0, 0x14, 0x6d, 0x29, 0x00, 0xc5, 0x10, 0x18, 0x9a, 0x24, 0x68, 0x42, 0x6d, 0x42, 0x6c, 0x28, 0xb4, 0x89, 0x90, 0x60, 0x82, 0xf9, 0x04, 0x71, 0x52, 0x5a, 0x8c, 0x87, 0x87, 0x53, 0x37, 0x37, 0xcc, 0x82, 0x7a, 0x0f, 0x87, 0x78, 0xa3, 0xc4, 0x5e, 0x6b, 0xc2, 0xd1, 0x05, 0xb8, 0xaf, 0x61, 0x05, 0xb5, 0x1f, 0x8e, 0x92, 0x86, 0x68, 0xa3, 0x77, 0x09, 0xca, 0xdc, 0x34, 0xa8, 0xd3, 0xe6, 0xf2, 0x06, 0xba, 0x2f, 0x49, 0x65, 0x41, 0xd0, 0xb6, 0xe0, 0x91, 0x1d, 0x40, 0xab, 0x8a, 0xfd, 0x7d, 0x9e, 0xc6, 0x51, 0x89, 0x1c, 0xf2, 0xab, 0x07, 0x78, 0xa9, 0xce, 0xcc, 0x29, 0x91, 0x3b, 0x69, 0xda, 0xc3, 0x30, 0x26, 0xf5, 0xdf, 0xc3, 0xd6, 0x0d, 0x25, 0xc5, 0x05, 0x1d, 0x9a, 0x6e, 0x5b, 0x3e, 0x6c, 0xba, 0x4b, 0xaf, 0x83, 0x04, 0xe4, 0x16, 0x65, 0xf4, 0xba, 0xa3, 0xa0, 0x28, 0x42, 0xcc, 0xa4, 0x64, 0x18, 0x10, 0xf3, 0x73, 0xe2, 0xd6, 0x60, 0x88, 0x15, 0xc2, 0x70, 0x2b, 0xc7, 0x30, 0xa1, 0x86, 0x61, 0x57, 0x1d, 0x5c, 0x1b, 0x18, 0x76, 0x31, 0xc1, 0x3b, 0x6f, 0xb8, 0x8f, 0x64, 0x58, 0x33, 0x9a, 0xc5, 0x8d, 0x65, 0x58, 0xd3, 0x8c, 0x16, 0x2f, 0x18, 0xd6, 0xb4, 0x32, 0xac, 0x99, 0xc2, 0xb0, 0x66, 0x9a, 0x13, 0x2f, 0x01, 0xd6, 0xcc, 0xa2, 0x2d, 0x24, 0x62, 0x4d, 0x1e, 0xae, 0x47, 0x31, 0xac, 0x99, 0x03, 0xe5, 0xc8, 0x2f, 0xf3, 0xb6, 0xc4, 0x4f, 0x90, 0x8a, 0xd4, 0xcc, 0xcd, 0x61, 0xd4, 0x56, 0x5b, 0x33, 0x86, 0x42, 0xac, 0x44, 0xc8, 0xfc, 0x6c, 0x83, 0xcb, 0x26, 0xdf, 0x62, 0x66, 0xf7, 0xcf, 0x17, 0x46, 0xd0, 0x7c, 0xb4, 0x62, 0xc7, 0x30, 0x96, 0x9d, 0x61, 0xac, 0x32, 0x3e, 0x87, 0x62, 0x9b, 0x20, 0x87, 0x81, 0x62, 0x26, 0xa8, 0xbb, 0x23, 0x9c, 0x3e, 0xe9, 0x60, 0xe7, 0x79, 0x11, 0x57, 0x75, 0xa4, 0xb6, 0x9b, 0x15, 0xa4, 0x0f, 0xac, 0x96, 0xe6, 0xd0, 0xb8, 0xa6, 0xbb, 0x7c, 0x12, 0x60, 0x11, 0x19, 0x5e, 0x0b, 0x4a, 0x3e, 0x86, 0xe2, 0x1e, 0x25, 0x2b, 0x63, 0xe0, 0x04, 0x29, 0xaf, 0xa3, 0x18, 0x28, 0x70, 0x82, 0x8c, 0x52, 0x0c, 0x21, 0x7c, 0x30, 0xfc, 0x6a, 0xf8, 0x00, 0x8a, 0x7f, 0x94, 0x51, 0x12, 0x5e, 0x11, 0x2b, 0x61, 0x78, 0xa8, 0xe5, 0x6a, 0x19, 0xdd, 0x82, 0x72, 0x96, 0x24, 0x37, 0xde, 0xe0, 0x53, 0x17, 0x50, 0xfc, 0xa3, 0x6f, 0x81, 0x7f, 0x16, 0xb8, 0xf0, 0xcf, 0xea, 0x16, 0xf8, 0x67, 0x01, 0xc5, 0x3f, 0xfa, 0x16, 0xf8, 0x07, 0x9f, 0x35, 0x01, 0x8e, 0xc8, 0x47, 0xfc, 0xa1, 0x8c, 0x17, 0x04, 0x7b, 0xb4, 0x32, 0x91, 0xc8, 0xec, 0x9d, 0x5c, 0x94, 0xb5, 0xca, 0xf9, 0x75, 0x14, 0xdd, 0x83, 0xe0, 0x35, 0xad, 0xde, 0x78, 0x39, 0xdf, 0x70, 0x34, 0x1e, 0xfd, 0x5a, 0x4e, 0xaf, 0xbd, 0x18, 0x5d, 0x4c, 0x92, 0x1b, 0xaf, 0xaf, 0x48, 0x5d, 0x10, 0xe1, 0xf1, 0xe5, 0x5d, 0xa1, 0x89, 0x33, 0x1f, 0x59, 0x29, 0xca, 0xa8, 0x39, 0xb1, 0x5d, 0xea, 0x02, 0x86, 0xd5, 0xf4, 0x6e, 0x98, 0x8e, 0x3d, 0xa3, 0x58, 0x6d, 0xb5, 0x1b, 0xb6, 0x5b, 0x20, 0x62, 0x35, 0xb7, 0xb8, 0x5e, 0x6e, 0xcf, 0xc4, 0xf9, 0xa2, 0x27, 0xe1, 0xfd, 0x1b, 0xaf, 0x17, 0xa5, 0x2e, 0xd4, 0x9a, 0xa9, 0x25, 0x77, 0xdc, 0xb3, 0x0c, 0x20, 0x79, 0x14, 0xc7, 0xc5, 0xc3, 0xb5, 0x54, 0xe7, 0x27, 0x9f, 0x2a, 0x08, 0x42, 0x11, 0xd4, 0xa1, 0x08, 0x5a, 0x42, 0x36, 0xf0, 0x0e, 0xe2, 0xb6, 0xd4, 0xc5, 0x4c, 0x8e, 0xac, 0x88, 0xad, 0xb0, 0xa5, 0x6c, 0x85, 0x2d, 0x67, 0x2b, 0xac, 0x68, 0x39, 0xc2, 0x43, 0xa8, 0x64, 0xab, 0xe7, 0x12, 0xb6, 0x9a, 0xae, 0xa0, 0xcf, 0x3d, 0x99, 0xfc, 0x59, 0x90, 0x50, 0x45, 0x71, 0xd7, 0x7a, 0x36, 0x03, 0x36, 0xc1, 0xf5, 0x56, 0x26, 0x63, 0x56, 0xcd, 0x66, 0xc2, 0x1e, 0x53, 0x12, 0x8c, 0xed, 0x03, 0x6c, 0x9d, 0xad, 0x69, 0xc6, 0xb4, 0xb4, 0x0c, 0x68, 0x9b, 0xee, 0x3c, 0xb3, 0x7b, 0x57, 0x87, 0xbb, 0xb7, 0x54, 0xbe, 0x6b, 0x19, 0x70, 0x1a, 0xef, 0x00, 0xac, 0x69, 0xd1, 0x83, 0x0f, 0x0f, 0x6c, 0xac, 0x1f, 0x26, 0xee, 0xb5, 0x53, 0xa9, 0x61, 0xf7, 0x1e, 0x57, 0xd1, 0xe7, 0xd4, 0x6a, 0x34, 0xfa, 0x92, 0xb1, 0x7e, 0x49, 0xfb, 0x26, 0x7d, 0x48, 0x05, 0xe4, 0x5d, 0x82, 0x3e, 0x66, 0xd0, 0xd2, 0x44, 0xdc, 0xf5, 0x0a, 0x94, 0x55, 0x2b, 0x43, 0xcf, 0x2a, 0xd6, 0xea, 0x2c, 0x91, 0x1a, 0x8a, 0x17, 0x66, 0x51, 0x4a, 0x60, 0x21, 0xd5, 0x72, 0xc3, 0x96, 0x8d, 0x60, 0xfc, 0x18, 0x95, 0x9c, 0x21, 0x2b, 0xc8, 0x58, 0x6c, 0xcd, 0x13, 0x1f, 0x0a, 0x65, 0x45, 0x7e, 0x80, 0x69, 0xf3, 0x88, 0x82, 0xa5, 0x53, 0x82, 0x5e, 0x0b, 0xac, 0xd5, 0x43, 0xca, 0x29, 0x85, 0x15, 0x2f, 0x4c, 0x85, 0x7b, 0x1f, 0x96, 0xee, 0xac, 0x22, 0x9f, 0x3f, 0x4c, 0x33, 0xc5, 0x95, 0x62, 0x49, 0x91, 0x92, 0x52, 0x5d, 0xa9, 0xc2, 0x3b, 0xee, 0x31, 0x75, 0xce, 0x98, 0x6a, 0x86, 0xef, 0x52, 0x01, 0xdf, 0x89, 0x7c, 0xb9, 0x88, 0xeb, 0x7c, 0x53, 0x37, 0x5f, 0xd3, 0x50, 0x5c, 0xa7, 0xa5, 0xdf, 0xf9, 0x26, 0x37, 0x5e, 0x93, 0xe2, 0xdc, 0xa1, 0x92, 0x32, 0xa2, 0xbe, 0x9e, 0x3f, 0xde, 0xf3, 0x32, 0x9d, 0x99, 0x97, 0xbe, 0x7a, 0x80, 0xe2, 0xc2, 0xb2, 0xa6, 0xa3, 0x8c, 0x86, 0xae, 0x40, 0xab, 0xa2, 0x4e, 0x5c, 0x88, 0x56, 0x8a, 0x18, 0x76, 0x73, 0xd2, 0x84, 0xd8, 0x97, 0x95, 0x70, 0xbd, 0x90, 0xf5, 0xb2, 0x78, 0xe6, 0x4c, 0x29, 0x42, 0xa2, 0x81, 0x31, 0x20, 0x52, 0x83, 0x0a, 0x12, 0x26, 0xac, 0x84, 0x58, 0x6b, 0xe8, 0x75, 0xb8, 0x50, 0x05, 0xf3, 0xde, 0xcc, 0x46, 0x83, 0x82, 0xf4, 0x16, 0x36, 0xc1, 0x3b, 0x3a, 0x1a, 0xb8, 0x07, 0x84, 0x6a, 0xb8, 0xa6, 0x94, 0x20, 0xa7, 0x12, 0xf6, 0xc0, 0x35, 0x1d, 0x0f, 0x9c, 0x9f, 0x50, 0x03, 0xd7, 0x47, 0x19, 0x35, 0x47, 0x29, 0x41, 0x36, 0x6a, 0xce, 0x43, 0x5a, 0x4a, 0x11, 0xcf, 0x53, 0x1c, 0x59, 0xc7, 0x70, 0xe4, 0x15, 0x86, 0x5b, 0xa8, 0x05, 0x34, 0xa4, 0xcd, 0xfa, 0x37, 0xfe, 0xc2, 0x53, 0x4b, 0xe6, 0x6e, 0x98, 0x8f, 0xf3, 0xa3, 0x5a, 0x6c, 0x5a, 0x11, 0xaf, 0x39, 0xd2, 0x61, 0xdd, 0x14, 0x39, 0xb9, 0x32, 0xde, 0xcc, 0x30, 0x63, 0x02, 0x0d, 0x35, 0x68, 0x8d, 0x92, 0xe2, 0xb3, 0x30, 0x47, 0x5f, 0x11, 0xe7, 0x71, 0x2a, 0x47, 0x0a, 0x0d, 0x1f, 0x00, 0x0c, 0x17, 0x4b, 0xdf, 0x85, 0x3b, 0x74, 0x34, 0xec, 0x6d, 0x8f, 0xa5, 0x94, 0xff, 0x2c, 0x3e, 0x92, 0xd2, 0x5c, 0xe1, 0x48, 0x73, 0xf1, 0x3a, 0xf8, 0x7d, 0x87, 0x72, 0x7c, 0x6b, 0x28, 0x3f, 0xb0, 0x9e, 0xf2, 0x03, 0x5b, 0x29, 0x3f, 0xb0, 0x93, 0x52, 0x5a, 0x07, 0x28, 0x86, 0x13, 0xf9, 0x77, 0xea, 0x27, 0x83, 0x62, 0xb8, 0x34, 0x7a, 0x6a, 0x29, 0x47, 0x09, 0x47, 0x46, 0x01, 0x9c, 0x6c, 0x8d, 0xf3, 0xae, 0xe6, 0xff, 0x6f, 0x70, 0x5e, 0x73, 0x5c, 0x67, 0xca, 0x57, 0xee, 0x22, 0x26, 0xc9, 0xfa, 0x03, 0x4c, 0xe4, 0xf6, 0x8c, 0x62, 0xa1, 0xc1, 0xf7, 0x63, 0x27, 0x17, 0x26, 0x02, 0x7c, 0xda, 0xc0, 0xc6, 0x65, 0x05, 0x84, 0x51, 0xa9, 0x9b, 0xaf, 0x5c, 0x60, 0x92, 0x5b, 0x6e, 0x9c, 0xcb, 0x70, 0x99, 0x50, 0xf2, 0x3f, 0x1e, 0x7b, 0x46, 0xb7, 0xb1, 0x67, 0xa2, 0x63, 0xcf, 0xe7, 0x7f, 0x38, 0xf6, 0x3c, 0xfe, 0xde, 0xd8, 0xfb, 0xb9, 0xf6, 0x7f, 0x30, 0xf6, 0x8c, 0x7f, 0x32, 0xf6, 0x4c, 0xff, 0x6f, 0x8d, 0xbd, 0xcb, 0xf5, 0xff, 0x57, 0x63, 0xef, 0x72, 0xf9, 0xff, 0xdd, 0xd8, 0xbb, 0x6c, 0xff, 0xb3, 0xb1, 0xd7, 0x54, 0x47, 0xf7, 0xa8, 0x45, 0xcb, 0x7e, 0x4a, 0x03, 0x5a, 0xf7, 0x73, 0x71, 0xcd, 0x4d, 0x75, 0x40, 0x0b, 0x5e, 0xa1, 0xa3, 0xc7, 0xb3, 0x09, 0x7a, 0xb8, 0xa9, 0x81, 0x5e, 0xa7, 0xba, 0xd1, 0x88, 0x72, 0x37, 0x1a, 0x31, 0x0a, 0x68, 0x44, 0x81, 0xd1, 0x88, 0x0a, 0x32, 0x48, 0x50, 0xc1, 0x9b, 0x40, 0x7a, 0x9d, 0xe1, 0xa2, 0x11, 0x15, 0x24, 0x53, 0xe0, 0xe0, 0x5a, 0x43, 0xaf, 0xbd, 0x04, 0x1d, 0x5c, 0x23, 0x7d, 0xe8, 0x51, 0x2e, 0x15, 0x4c, 0x70, 0x1d, 0xc9, 0xc6, 0x5e, 0x34, 0x5c, 0xc7, 0xb2, 0xd1, 0x6e, 0xa6, 0xbd, 0xd1, 0x16, 0x65, 0xa8, 0x20, 0xbd, 0x80, 0x67, 0xc5, 0x3c, 0x33, 0x29, 0x75, 0x9a, 0x05, 0x5f, 0x0d, 0x2f, 0x51, 0x45, 0x95, 0x09, 0x42, 0x69, 0x30, 0x3d, 0x01, 0xae, 0x95, 0x04, 0xc2, 0x68, 0xdc, 0xd1, 0x82, 0x4b, 0x45, 0x89, 0xb9, 0xb5, 0xd9, 0x26, 0x7a, 0xed, 0xe9, 0x18, 0xe5, 0xe2, 0x52, 0x33, 0x31, 0x2c, 0x97, 0x52, 0x4a, 0x70, 0x22, 0x7d, 0x2b, 0x77, 0xa4, 0xd3, 0xd0, 0xcb, 0x3e, 0x91, 0xb7, 0xd3, 0xab, 0x54, 0x47, 0x0c, 0xe3, 0x50, 0x7b, 0x39, 0x78, 0x1a, 0x46, 0xd9, 0xb3, 0x79, 0x71, 0x8f, 0x28, 0x83, 0xed, 0x8c, 0x64, 0x3a, 0x22, 0x69, 0x38, 0xc8, 0x6e, 0x45, 0x0a, 0xaf, 0xe9, 0x0a, 0xa5, 0x0a, 0x1b, 0xf8, 0x18, 0x4a, 0x1b, 0x46, 0x52, 0xda, 0x30, 0x9c, 0xd2, 0x86, 0x38, 0x56, 0x03, 0xe9, 0x58, 0x0d, 0xa1, 0x63, 0x55, 0x43, 0xc7, 0xaa, 0x81, 0x8e, 0xd5, 0x48, 0xde, 0x47, 0x1b, 0x87, 0xf6, 0xce, 0x78, 0x69, 0xa4, 0x84, 0x8e, 0x00, 0x99, 0x3a, 0x31, 0x75, 0x1e, 0x1b, 0xad, 0xe2, 0xae, 0xb8, 0xd2, 0x39, 0x36, 0x75, 0x50, 0x53, 0xd2, 0x88, 0x1e, 0x97, 0x5c, 0xe3, 0xd3, 0xf9, 0xce, 0x03, 0xbd, 0x03, 0xb5, 0x18, 0xa1, 0xce, 0x37, 0x9e, 0x2c, 0xfe, 0xdd, 0x16, 0xf1, 0xbd, 0x58, 0x7c, 0x1c, 0xa5, 0x9c, 0x0d, 0x7a, 0xcd, 0xce, 0x78, 0x31, 0xdb, 0x14, 0x87, 0x12, 0x56, 0xf4, 0x58, 0x2e, 0x1e, 0x4f, 0x93, 0xf8, 0x00, 0xfa, 0x34, 0x9a, 0x1b, 0x2b, 0x72, 0x78, 0xf0, 0x2c, 0x10, 0x62, 0x07, 0xda, 0xe5, 0x94, 0xf7, 0xc1, 0xeb, 0x48, 0x3b, 0x9e, 0xc6, 0x33, 0x2a, 0x56, 0xcc, 0x51, 0x8b, 0xe5, 0xac, 0x55, 0xc7, 0xa7, 0xce, 0xd3, 0x13, 0xb7, 0xe7, 0x5e, 0x5c, 0x7c, 0x6a, 0xa5, 0x78, 0x0a, 0xab, 0x36, 0x47, 0xf4, 0x20, 0xf2, 0xf8, 0x9f, 0x05, 0x01, 0x47, 0xed, 0xb8, 0x7b, 0x1b, 0x5f, 0x1e, 0x1d, 0x15, 0x15, 0x26, 0xdc, 0xdd, 0x98, 0x47, 0x22, 0xed, 0x44, 0x72, 0x1b, 0x68, 0x8d, 0xa8, 0x75, 0xfd, 0x0b, 0x89, 0xe4, 0x97, 0xf9, 0xfd, 0xa3, 0xc3, 0x84, 0xdb, 0xbd, 0x13, 0x88, 0x29, 0x4a, 0x72, 0xbc, 0x40, 0x68, 0xec, 0x1d, 0x4f, 0x22, 0xb2, 0x12, 0xe0, 0x5e, 0x96, 0x19, 0x0f, 0xd7, 0xf2, 0x21, 0xd6, 0xca, 0x1d, 0x51, 0x56, 0x75, 0x62, 0xb7, 0x01, 0x44, 0x16, 0x11, 0xc7, 0x99, 0xbb, 0xf6, 0x87, 0xd9, 0x91, 0x22, 0x0c, 0x67, 0x74, 0x22, 0xee, 0xc2, 0xc7, 0xa4, 0x6e, 0xfe, 0xd1, 0xaa, 0x6d, 0x96, 0x08, 0x5e, 0xaa, 0xf5, 0x93, 0x4f, 0x01, 0xca, 0x90, 0x07, 0x8a, 0xcc, 0x0a, 0xed, 0xe1, 0x81, 0x32, 0x04, 0x23, 0x96, 0xa0, 0x5c, 0x00, 0xa3, 0x0d, 0x79, 0x46, 0x1b, 0xe6, 0x30, 0xda, 0xb0, 0x88, 0xd1, 0x86, 0xa5, 0x8c, 0x16, 0x2c, 0x67, 0x94, 0x5e, 0x05, 0xa3, 0x11, 0x2b, 0x19, 0x8d, 0xb7, 0xc4, 0xba, 0xa3, 0x74, 0xe5, 0xc9, 0xd9, 0x90, 0xae, 0x0e, 0x29, 0x4e, 0xec, 0x49, 0x3a, 0x7e, 0xfb, 0x00, 0xd5, 0x68, 0x61, 0xfb, 0x46, 0x12, 0xa0, 0x1c, 0xa5, 0x0c, 0x5f, 0xa3, 0x2d, 0xe1, 0x4d, 0xa8, 0x63, 0xc0, 0xa8, 0x47, 0xb4, 0xee, 0x4b, 0x77, 0x8e, 0x44, 0x3a, 0x16, 0xbd, 0x0a, 0x9a, 0x44, 0xaa, 0x4b, 0x02, 0xad, 0x3d, 0x0a, 0x7d, 0x0d, 0x42, 0x98, 0x0f, 0x69, 0x21, 0x65, 0xe7, 0x03, 0x9c, 0x67, 0x19, 0x60, 0xb2, 0xa9, 0xf4, 0x54, 0x4c, 0x8b, 0xb4, 0x57, 0x28, 0xf4, 0x13, 0xa5, 0xbd, 0x9a, 0x7b, 0x1a, 0xb8, 0xcd, 0x4b, 0x5d, 0x70, 0x1d, 0xa1, 0x94, 0xe3, 0x54, 0xa3, 0x28, 0x07, 0xbe, 0xf9, 0x7a, 0x1d, 0xa5, 0xb5, 0x70, 0xb7, 0x7c, 0xc2, 0xb8, 0xba, 0xe3, 0xb3, 0x99, 0x1c, 0x96, 0x07, 0x6b, 0x05, 0xb4, 0x87, 0x5c, 0x37, 0xf0, 0xaa, 0x93, 0x6a, 0x35, 0xfa, 0xb3, 0xba, 0xe0, 0xbe, 0x40, 0x0d, 0xdb, 0x17, 0x38, 0xc9, 0x65, 0x6a, 0x54, 0xd2, 0x7c, 0xd4, 0x2c, 0xc4, 0x3d, 0x3d, 0x4a, 0x7b, 0x79, 0x18, 0x7d, 0x69, 0xef, 0x1f, 0xc4, 0xbe, 0x86, 0xb2, 0x51, 0x4b, 0xf8, 0x47, 0x0e, 0xd3, 0xdd, 0x7a, 0x8e, 0x9e, 0xe2, 0xf8, 0x1b, 0xa5, 0x38, 0x32, 0x28, 0x0d, 0x27, 0xd2, 0x6b, 0x40, 0xd3, 0xfd, 0xd0, 0x17, 0x28, 0x36, 0x27, 0xb5, 0x16, 0x2b, 0x72, 0xae, 0xd6, 0x1f, 0x09, 0xfa, 0x76, 0x0b, 0x29, 0x4a, 0x68, 0x2d, 0x0f, 0xc5, 0x89, 0xf2, 0xc0, 0x8b, 0x7b, 0xe6, 0x12, 0x39, 0x91, 0x0d, 0x00, 0x7e, 0xbd, 0x67, 0x01, 0x5c, 0xc9, 0xfb, 0x5f, 0x26, 0xaa, 0x9e, 0xf9, 0x70, 0xa5, 0x48, 0xbe, 0x4c, 0x82, 0x7b, 0x42, 0x6b, 0x11, 0x9f, 0x9e, 0xb4, 0x95, 0x2d, 0x39, 0xc4, 0x5f, 0xd4, 0x35, 0xb1, 0xac, 0x24, 0x01, 0x00, 0x41, 0xf1, 0x97, 0x09, 0x47, 0xad, 0xa6, 0x76, 0x82, 0xbb, 0x2e, 0x00, 0x6a, 0x48, 0xad, 0x2f, 0xd1, 0x76, 0xcd, 0x25, 0x29, 0x44, 0x57, 0xe4, 0xd1, 0xd5, 0x4c, 0x0c, 0x34, 0x7d, 0x13, 0x4d, 0x3b, 0x82, 0xa6, 0x1b, 0x49, 0xd3, 0x8c, 0xea, 0x5a, 0x26, 0x4a, 0xcc, 0x76, 0x2d, 0x13, 0xe5, 0x65, 0x69, 0x3a, 0x66, 0x75, 0x2e, 0x89, 0x54, 0x57, 0x70, 0x8a, 0x94, 0x73, 0x65, 0xa4, 0x6d, 0xb9, 0x8e, 0x56, 0x67, 0x72, 0x72, 0x97, 0xdc, 0x6a, 0x21, 0x09, 0xd6, 0x42, 0x4d, 0xd1, 0x62, 0xac, 0x23, 0x58, 0xa3, 0x87, 0x52, 0xae, 0x06, 0x4e, 0xcb, 0x26, 0x4a, 0xac, 0x36, 0x6d, 0x7c, 0xc4, 0x02, 0x1c, 0x99, 0xba, 0xa5, 0x6d, 0x4a, 0x48, 0x2b, 0x10, 0x65, 0x58, 0x8e, 0xd4, 0x50, 0xc9, 0x56, 0x7a, 0x5a, 0x2f, 0xca, 0xb3, 0xfe, 0x91, 0x94, 0x10, 0xda, 0x82, 0x15, 0xa5, 0x3d, 0x94, 0x39, 0x82, 0x40, 0x14, 0x76, 0x3d, 0x97, 0x23, 0xdc, 0xa5, 0x4f, 0x38, 0x4e, 0x47, 0x42, 0x1c, 0x5d, 0xa8, 0x76, 0x22, 0x11, 0xbd, 0x37, 0x3f, 0x6d, 0x40, 0x1c, 0xf4, 0x04, 0x95, 0x41, 0x4a, 0x7d, 0xde, 0xc2, 0x00, 0xa8, 0x98, 0xa3, 0xb8, 0xff, 0x8a, 0x2b, 0x89, 0x3e, 0x8c, 0xda, 0xe5, 0x0f, 0x04, 0x4a, 0x26, 0x98, 0xf9, 0x35, 0x68, 0xe0, 0x6c, 0x16, 0x8b, 0x25, 0x81, 0x0f, 0x41, 0xdc, 0x51, 0x95, 0x90, 0x2f, 0x8d, 0x46, 0x09, 0x2d, 0x45, 0x95, 0xa5, 0x50, 0x1a, 0x49, 0x44, 0xdf, 0x54, 0x0e, 0xd9, 0xe6, 0x0a, 0xfb, 0x79, 0x63, 0x28, 0x59, 0x81, 0x96, 0x9e, 0x11, 0x17, 0x18, 0x21, 0xc6, 0xc0, 0xc6, 0xa6, 0x0b, 0x30, 0x9a, 0x8f, 0x52, 0xaf, 0x18, 0x4a, 0x9d, 0xcd, 0x12, 0x1f, 0x0e, 0xa3, 0x28, 0xa4, 0x54, 0x5d, 0x00, 0x23, 0xa8, 0xbf, 0x70, 0x12, 0xe5, 0xe9, 0x8b, 0x09, 0x4a, 0xbe, 0x17, 0x49, 0xab, 0x27, 0x25, 0x6c, 0xb7, 0xa7, 0xc5, 0x86, 0x09, 0x0d, 0xa8, 0xb7, 0x89, 0xb2, 0xef, 0x88, 0x99, 0x68, 0xda, 0xe1, 0xce, 0x1d, 0x27, 0x03, 0x8e, 0x10, 0x8e, 0xe5, 0x72, 0x86, 0x5a, 0xf0, 0x98, 0x0c, 0x5f, 0xe0, 0x1e, 0xd9, 0x0a, 0xf4, 0x80, 0xda, 0x94, 0x8d, 0xfa, 0x1a, 0xc8, 0x75, 0x99, 0x54, 0x59, 0xe6, 0x9a, 0x24, 0x3e, 0xc6, 0x99, 0x96, 0x21, 0x87, 0xa8, 0x28, 0x2f, 0x11, 0x1e, 0x52, 0xf9, 0x10, 0x5a, 0x22, 0x93, 0xc0, 0xaf, 0x94, 0x48, 0x1f, 0xcf, 0xc1, 0x11, 0x66, 0xf4, 0x85, 0xf1, 0x1b, 0x06, 0x23, 0x3f, 0x39, 0xb5, 0xf2, 0x71, 0x33, 0x5d, 0x9f, 0x95, 0x1b, 0xcd, 0xf9, 0xd2, 0x28, 0xa2, 0xcb, 0xa4, 0x12, 0xfa, 0xf2, 0xcd, 0xb3, 0x00, 0x6f, 0x0f, 0x85, 0x72, 0x9f, 0x44, 0x2e, 0x94, 0x6c, 0x95, 0x5b, 0x48, 0xe0, 0xd1, 0x78, 0xce, 0x16, 0x21, 0x9d, 0x1f, 0xaf, 0xf5, 0xe6, 0xfb, 0x2a, 0x74, 0x90, 0xa6, 0x9f, 0x23, 0x04, 0xbd, 0x76, 0xaa, 0xc7, 0x10, 0x15, 0xdd, 0x87, 0xf3, 0x2f, 0x6a, 0xaa, 0x84, 0x96, 0xa8, 0x49, 0xa8, 0xb1, 0x3c, 0x6a, 0x46, 0x9f, 0x19, 0x24, 0x84, 0x97, 0x1f, 0x41, 0x3c, 0x39, 0x98, 0xee, 0xb0, 0x35, 0xb0, 0xb6, 0xcb, 0x85, 0xb6, 0xdb, 0xc6, 0x8f, 0xea, 0x65, 0x21, 0x0a, 0x05, 0xca, 0x79, 0xf8, 0xd9, 0x53, 0xc3, 0xf5, 0x24, 0x00, 0xfd, 0x96, 0xe0, 0x7c, 0xa3, 0xf6, 0xb2, 0x63, 0x39, 0xc8, 0x1b, 0x6a, 0x21, 0x63, 0x33, 0x57, 0x89, 0xf8, 0x9f, 0xd9, 0x96, 0x3b, 0x13, 0x9a, 0x44, 0x79, 0x4e, 0x29, 0x09, 0x16, 0xed, 0x52, 0x72, 0xc9, 0xea, 0x14, 0xa7, 0x3c, 0x3b, 0xd6, 0x45, 0x93, 0x4e, 0xa5, 0x23, 0xbb, 0xf0, 0x6a, 0x75, 0x3c, 0xce, 0xe3, 0x90, 0x0b, 0xfd, 0xaf, 0x0a, 0x67, 0x74, 0x14, 0x3f, 0x9a, 0x2c, 0x06, 0xc5, 0x93, 0xd3, 0xb1, 0x37, 0x36, 0xcf, 0x80, 0x3a, 0x96, 0x51, 0x0b, 0xbd, 0x4e, 0xa9, 0x8f, 0x35, 0x4e, 0xeb, 0xc4, 0xbc, 0x94, 0x33, 0x73, 0x2a, 0x7b, 0x23, 0xf7, 0x11, 0x51, 0x50, 0xbf, 0x66, 0x32, 0x7a, 0xe6, 0x3c, 0x46, 0x94, 0xce, 0xb2, 0x2b, 0xba, 0x99, 0x49, 0x00, 0xc4, 0x8c, 0x53, 0x63, 0x9c, 0xf2, 0x16, 0x31, 0x42, 0x5c, 0x31, 0x42, 0xdc, 0x63, 0xc0, 0x0c, 0x31, 0xe1, 0x69, 0x33, 0xf5, 0xd6, 0xf5, 0x00, 0xea, 0x24, 0x36, 0xdb, 0x8b, 0x2c, 0xd2, 0x1e, 0x5a, 0xc0, 0x59, 0x2c, 0xf4, 0xe4, 0x03, 0x5a, 0x04, 0xf0, 0x27, 0x8e, 0x58, 0xf4, 0x88, 0x96, 0x90, 0x43, 0x94, 0x30, 0x97, 0xa5, 0xc4, 0x1f, 0x7e, 0x55, 0xa4, 0x0b, 0xce, 0x4b, 0x25, 0xcc, 0x8e, 0x22, 0xad, 0x53, 0xe7, 0xc0, 0x84, 0xd8, 0xc5, 0x0a, 0x33, 0x24, 0x45, 0x57, 0x48, 0xd2, 0xf4, 0x85, 0x64, 0x78, 0xa4, 0x91, 0x0c, 0x2d, 0x12, 0xaa, 0x56, 0x13, 0xa9, 0x43, 0x6e, 0xb3, 0x38, 0x14, 0x68, 0xff, 0x6d, 0x9c, 0x9e, 0x97, 0x8e, 0x4b, 0xd7, 0x0e, 0x15, 0x77, 0xf8, 0xa8, 0x97, 0x6b, 0x26, 0xab, 0x7a, 0x62, 0xb1, 0xf6, 0x4b, 0xf4, 0x15, 0x2c, 0x35, 0x4b, 0x1e, 0xf4, 0x31, 0x03, 0xb6, 0x26, 0x24, 0x8e, 0xa0, 0xdc, 0x98, 0x92, 0xae, 0x34, 0xab, 0x81, 0xae, 0x40, 0x3f, 0xc9, 0x52, 0xe2, 0x6b, 0x57, 0x11, 0x33, 0x49, 0xe8, 0x6d, 0xa6, 0x72, 0x34, 0xf2, 0x8e, 0x69, 0xa4, 0x53, 0xf7, 0x5c, 0xa2, 0x24, 0xfe, 0xdd, 0xb1, 0x64, 0x6a, 0x9b, 0xc5, 0x6e, 0xef, 0xff, 0x33, 0xd1, 0x76, 0x4f, 0x81, 0x9e, 0x0c, 0x03, 0xcc, 0x6d, 0x24, 0xc3, 0x9d, 0x32, 0x6f, 0x77, 0x23, 0x83, 0xcb, 0x2d, 0x06, 0x22, 0xed, 0x81, 0x35, 0x51, 0x92, 0x3c, 0xfc, 0x75, 0xa5, 0x4e, 0xc8, 0x1e, 0x31, 0x7d, 0xb8, 0xda, 0x36, 0xe0, 0x67, 0x12, 0x43, 0xe5, 0x85, 0x94, 0x46, 0x3f, 0xf1, 0x34, 0x28, 0x14, 0xb1, 0x97, 0xb2, 0xc7, 0x40, 0xa2, 0x62, 0xd6, 0x46, 0x96, 0x4a, 0xf3, 0x84, 0x7b, 0x54, 0xae, 0x5c, 0x5a, 0x2c, 0xa0, 0x6c, 0x6b, 0x77, 0xe8, 0x0b, 0x78, 0x3e, 0x39, 0x11, 0x68, 0x06, 0xb6, 0x66, 0x31, 0xcb, 0x84, 0x4c, 0x6b, 0x50, 0x57, 0x84, 0xde, 0x2a, 0x0d, 0x4c, 0x6f, 0xd0, 0x54, 0xec, 0x61, 0x8c, 0x23, 0x91, 0x4c, 0x0b, 0x03, 0xf7, 0xf5, 0x02, 0xe1, 0x6d, 0x2c, 0xd3, 0xc3, 0x30, 0xe3, 0x69, 0x2a, 0xbc, 0x4f, 0x80, 0x5c, 0x20, 0x3f, 0x51, 0xb7, 0xf0, 0x04, 0x61, 0x32, 0x98, 0x53, 0x31, 0x2f, 0x2c, 0x87, 0xa8, 0x35, 0xa8, 0xf6, 0xdd, 0x51, 0xae, 0x8d, 0xe3, 0x32, 0xb9, 0x0f, 0x48, 0x40, 0xd6, 0x42, 0xf4, 0xc8, 0x52, 0xa6, 0x14, 0x35, 0x22, 0x4c, 0x46, 0x42, 0xad, 0x56, 0x43, 0x09, 0x57, 0x42, 0x3f, 0xc8, 0x60, 0x44, 0xcb, 0x8a, 0xf4, 0xd0, 0x6f, 0xe9, 0x4e, 0xff, 0x04, 0xa2, 0xfc, 0x5b, 0x38, 0x7a, 0x6a, 0x01, 0xec, 0x43, 0x77, 0x56, 0xbd, 0x98, 0x4c, 0xe1, 0xe6, 0xdf, 0x65, 0x5a, 0x6a, 0xe9, 0xd2, 0xae, 0xc0, 0x3d, 0x69, 0xad, 0x8e, 0x74, 0x72, 0x7b, 0x1f, 0x97, 0xba, 0xb9, 0xb1, 0xd6, 0xe0, 0xf6, 0xde, 0x80, 0x5e, 0xf9, 0x9c, 0x98, 0x28, 0x5f, 0xc4, 0x44, 0x10, 0x07, 0x25, 0x0e, 0x94, 0xa1, 0x05, 0xb8, 0x02, 0x22, 0x9e, 0x2b, 0x95, 0x94, 0x90, 0x09, 0x84, 0x8b, 0xcf, 0xc2, 0x1d, 0x95, 0x7a, 0xa0, 0x2d, 0x80, 0xf3, 0x91, 0x94, 0xf7, 0x4a, 0x24, 0x32, 0x98, 0x87, 0x72, 0xaa, 0xaf, 0xad, 0xa4, 0xba, 0x78, 0xfe, 0xea, 0x24, 0x13, 0xcc, 0xd9, 0x4c, 0x8c, 0x77, 0x85, 0xca, 0x28, 0x5e, 0xd1, 0xe5, 0x52, 0x3d, 0x3d, 0xd4, 0xfb, 0xd9, 0xc6, 0xb4, 0x0b, 0x27, 0x30, 0x49, 0xc7, 0x64, 0x37, 0xcd, 0x18, 0xa0, 0xd9, 0x83, 0x57, 0x12, 0x2f, 0x5e, 0xa5, 0x46, 0x2f, 0x0a, 0x63, 0x28, 0xad, 0x25, 0x83, 0x27, 0x0f, 0xb8, 0x95, 0xbe, 0x27, 0x94, 0x4c, 0xdb, 0xc3, 0x4c, 0x14, 0xb1, 0x05, 0xc2, 0x2f, 0x26, 0xff, 0x4c, 0xf3, 0x63, 0x80, 0x29, 0x1e, 0x43, 0x59, 0x11, 0x39, 0xf5, 0x35, 0x14, 0x26, 0xd4, 0xa6, 0x6e, 0xbe, 0xb3, 0x2e, 0x2b, 0xf5, 0x4c, 0x75, 0xaf, 0x54, 0x82, 0xf5, 0x53, 0x20, 0x6d, 0x45, 0xe7, 0x54, 0xb0, 0x5b, 0xba, 0x0a, 0x53, 0x0e, 0x09, 0xcc, 0xb4, 0xf6, 0xb2, 0x12, 0x1f, 0xbe, 0xc8, 0x89, 0x2f, 0x29, 0x5d, 0x74, 0x9e, 0x33, 0x47, 0xe0, 0xbb, 0xfe, 0xbd, 0xfa, 0x13, 0x1f, 0x8a, 0x29, 0xd1, 0xab, 0x42, 0x34, 0xac, 0xcc, 0x56, 0x66, 0x49, 0x72, 0x1b, 0xe6, 0x04, 0xcf, 0x36, 0x52, 0x4c, 0xe3, 0xdf, 0xab, 0x0c, 0xbd, 0x3d, 0xc3, 0xaf, 0x17, 0xa4, 0xa5, 0x31, 0x85, 0x09, 0xbf, 0x00, 0x86, 0x96, 0x65, 0xc6, 0x1d, 0x36, 0xf7, 0x8a, 0x23, 0x0a, 0xb8, 0x96, 0x67, 0xc6, 0xc1, 0x95, 0x4f, 0xba, 0x39, 0xba, 0x9c, 0x96, 0x54, 0x8a, 0x7b, 0xf2, 0x47, 0x2b, 0x68, 0x69, 0x06, 0x43, 0x39, 0xfc, 0x3f, 0xde, 0x31, 0x2a, 0x02, 0xd2, 0xf4, 0x86, 0xd2, 0xa3, 0xbd, 0xf6, 0x30, 0xf4, 0x5b, 0x7f, 0x67, 0x19, 0x67, 0x8e, 0xab, 0xcf, 0x52, 0xe8, 0x15, 0x50, 0x46, 0x2a, 0xa1, 0x17, 0x09, 0xb3, 0xcc, 0xba, 0x23, 0x3d, 0x01, 0x71, 0x76, 0xa8, 0x0d, 0x7a, 0x45, 0xc4, 0x52, 0xa4, 0xa9, 0x4c, 0x07, 0x29, 0x61, 0x99, 0xd4, 0xf1, 0x56, 0xa8, 0x1d, 0x8c, 0x5f, 0x31, 0x85, 0x61, 0x6e, 0xed, 0x16, 0x9b, 0xba, 0xf9, 0xf6, 0x2f, 0x94, 0xca, 0xc5, 0x3a, 0x12, 0xce, 0xac, 0x01, 0xcc, 0xbb, 0xe1, 0x2a, 0x41, 0x1b, 0x3d, 0x37, 0x50, 0x06, 0x28, 0x32, 0xb6, 0x9c, 0x44, 0xc4, 0xbe, 0x28, 0xe8, 0x95, 0xbc, 0x1a, 0xea, 0x2f, 0x03, 0xba, 0x53, 0x1a, 0xe1, 0x1d, 0x05, 0x63, 0x21, 0x3a, 0x7e, 0x60, 0x43, 0x25, 0x30, 0x29, 0x9f, 0x1d, 0xcc, 0x97, 0x47, 0x7a, 0x1f, 0x8d, 0xcf, 0xb0, 0x30, 0xff, 0x8a, 0x27, 0x75, 0x89, 0xe9, 0x96, 0x85, 0x71, 0x6a, 0xb3, 0x16, 0xfd, 0x69, 0xb9, 0xfc, 0x3a, 0xd2, 0xf5, 0xf8, 0x28, 0xd5, 0x79, 0xa2, 0xeb, 0xf1, 0x7a, 0x73, 0x3e, 0x70, 0xc4, 0x11, 0xb2, 0x0b, 0x71, 0x26, 0x33, 0xca, 0x8d, 0x46, 0x24, 0x18, 0xbd, 0x2b, 0x77, 0x50, 0xdb, 0x10, 0xd4, 0x32, 0x6f, 0x24, 0x19, 0x27, 0x29, 0x12, 0x06, 0x36, 0xde, 0xb6, 0xf3, 0xc3, 0xa2, 0xf5, 0x44, 0x5e, 0x95, 0x50, 0x28, 0x4d, 0x8f, 0x37, 0x79, 0x64, 0x98, 0xb7, 0xef, 0x38, 0x94, 0x4b, 0x64, 0xc7, 0x72, 0x81, 0x5f, 0xc3, 0x11, 0x44, 0x71, 0xbd, 0x43, 0x05, 0x7d, 0x2a, 0x5a, 0xc6, 0x0e, 0x3a, 0x06, 0xe5, 0x04, 0xea, 0x09, 0x7b, 0x63, 0x31, 0xed, 0x0b, 0xd9, 0x31, 0x3c, 0x83, 0xc9, 0x15, 0x71, 0xa8, 0x43, 0x81, 0xef, 0xb9, 0x34, 0xfe, 0x86, 0x26, 0xdd, 0x24, 0xa3, 0x6d, 0xb5, 0x02, 0xcf, 0x2d, 0xa8, 0xff, 0x4f, 0xc4, 0xd6, 0x5b, 0x11, 0x5b, 0x03, 0x9e, 0x51, 0x39, 0x01, 0x25, 0x7f, 0x60, 0xf4, 0x87, 0xa0, 0xe7, 0x38, 0x51, 0xc6, 0xa9, 0x6d, 0xb9, 0x22, 0x98, 0x81, 0x07, 0xac, 0x3f, 0x46, 0xb7, 0x38, 0x7f, 0x15, 0x31, 0x07, 0x7a, 0x01, 0x72, 0xb3, 0x6a, 0xea, 0x41, 0xf7, 0x1a, 0xd0, 0x7e, 0xe9, 0x51, 0x1a, 0xb6, 0xa3, 0x7b, 0x0c, 0x68, 0xed, 0x54, 0xd4, 0x6f, 0xad, 0x53, 0xe7, 0x11, 0x0d, 0xdd, 0x3f, 0xee, 0x2a, 0xfa, 0x50, 0x74, 0xca, 0xad, 0x3a, 0x2d, 0xd5, 0x02, 0xff, 0xe0, 0x8c, 0xe1, 0xd9, 0x32, 0x06, 0x7c, 0x5d, 0xe3, 0x7a, 0xe7, 0x75, 0xdf, 0xbb, 0x93, 0xd4, 0x53, 0xba, 0x8e, 0xf8, 0x5b, 0xcd, 0x16, 0x33, 0xb5, 0x6c, 0xab, 0xa2, 0x1e, 0x26, 0xce, 0x43, 0xaf, 0x30, 0x8d, 0xe7, 0x13, 0x01, 0x89, 0x57, 0x85, 0x03, 0x4c, 0x22, 0x1c, 0xad, 0xce, 0x8e, 0x73, 0xd9, 0x75, 0x86, 0xb4, 0x29, 0x75, 0x7e, 0x94, 0x9e, 0xdf, 0x9c, 0xe4, 0x0c, 0x44, 0x01, 0x14, 0x2c, 0x91, 0x48, 0x84, 0x06, 0xe0, 0x48, 0x0f, 0xc0, 0xcc, 0xa6, 0x7e, 0x01, 0x6c, 0x93, 0x1d, 0xc1, 0x4e, 0x1f, 0x91, 0x1a, 0x4b, 0xfc, 0x55, 0xa1, 0xa1, 0x85, 0x4d, 0x0f, 0x62, 0x0f, 0x40, 0x7f, 0x92, 0xa8, 0xbd, 0x01, 0xa3, 0x63, 0x73, 0xd3, 0x26, 0x98, 0x43, 0x81, 0xa2, 0xef, 0x48, 0xce, 0x72, 0xa8, 0x9a, 0x9b, 0xda, 0x35, 0x1e, 0x57, 0x4a, 0xaa, 0x09, 0x77, 0x75, 0x78, 0x88, 0x50, 0xc5, 0x3c, 0xd5, 0xa0, 0xfc, 0x14, 0xda, 0x73, 0x8d, 0x45, 0x49, 0x32, 0x58, 0x91, 0x12, 0xd4, 0xf9, 0xac, 0x9e, 0xfe, 0x30, 0x52, 0x9d, 0xb5, 0xbc, 0x20, 0xea, 0x06, 0x1a, 0x29, 0xf7, 0x4e, 0x74, 0x9c, 0xd9, 0x88, 0xde, 0x61, 0x0c, 0x96, 0x8f, 0x88, 0x89, 0x0b, 0x23, 0x0a, 0xb4, 0x07, 0x2f, 0xf1, 0x20, 0xc1, 0x71, 0xd7, 0x48, 0x74, 0x5c, 0x1d, 0xcc, 0x2b, 0x2b, 0x09, 0x01, 0x3c, 0xcd, 0x89, 0x5a, 0xce, 0x64, 0xaa, 0xd3, 0x0b, 0x0c, 0xf5, 0x8f, 0x15, 0xec, 0x2a, 0x77, 0x2e, 0xcd, 0x4b, 0x94, 0x03, 0xc6, 0x76, 0x39, 0xac, 0x13, 0xbd, 0x6e, 0x41, 0x8a, 0xc5, 0x12, 0xc0, 0xeb, 0xc1, 0x46, 0x94, 0x6d, 0x4a, 0x21, 0x1c, 0x5d, 0x13, 0x34, 0x34, 0xb5, 0x20, 0xea, 0x7b, 0xe2, 0xbe, 0xb4, 0x38, 0x8b, 0x1a, 0xfd, 0xc6, 0xa4, 0xb0, 0x94, 0x0e, 0xb8, 0x3c, 0xcf, 0x32, 0x29, 0xad, 0xc4, 0x9f, 0x85, 0x06, 0xa0, 0x66, 0x15, 0x9f, 0xed, 0xb0, 0xd7, 0xf1, 0x15, 0x2d, 0xfd, 0x65, 0xa2, 0x1f, 0x27, 0x79, 0xf9, 0x8b, 0x82, 0xf0, 0x1b, 0xd5, 0xc1, 0xf1, 0x41, 0xef, 0x0e, 0xe8, 0xf3, 0x99, 0xe7, 0xfe, 0x8e, 0x25, 0x15, 0x18, 0x9b, 0xb1, 0xd0, 0x7e, 0xe8, 0x67, 0x43, 0x03, 0xed, 0xa7, 0x8b, 0x0c, 0x25, 0x4a, 0x6d, 0x28, 0xe9, 0x64, 0x92, 0x4a, 0xcd, 0xdf, 0x08, 0xb8, 0x02, 0x5b, 0x3e, 0x20, 0x9d, 0x28, 0x36, 0x0b, 0x6e, 0x6e, 0x07, 0xf5, 0x40, 0x67, 0x3a, 0x3a, 0x28, 0x69, 0x29, 0xe9, 0x1e, 0x4f, 0x3a, 0xf5, 0xb6, 0x10, 0x25, 0x95, 0x38, 0xc2, 0x16, 0xf5, 0x35, 0x1a, 0x88, 0x06, 0xa5, 0x73, 0x9a, 0x7c, 0xe8, 0x19, 0x88, 0x2c, 0xe5, 0x5c, 0x6c, 0x88, 0x68, 0xe1, 0x08, 0x72, 0x52, 0x22, 0x75, 0xc2, 0x7a, 0x37, 0x42, 0x21, 0x73, 0xa8, 0x5c, 0x7d, 0x0f, 0xf8, 0xf3, 0xee, 0xd6, 0xb4, 0xb9, 0xeb, 0xc5, 0xb6, 0x72, 0xfa, 0x14, 0x05, 0x3a, 0xa6, 0x0d, 0xdb, 0x45, 0x7f, 0x4b, 0x0a, 0xef, 0xde, 0x01, 0x26, 0x69, 0x77, 0x05, 0xb5, 0x21, 0xa0, 0x86, 0x28, 0x6d, 0x87, 0x35, 0x36, 0x53, 0x7d, 0x40, 0xea, 0xc7, 0xa8, 0x34, 0xf2, 0xe4, 0xdc, 0x27, 0xa7, 0x72, 0x09, 0xdc, 0x1a, 0x22, 0x1b, 0x47, 0x60, 0xad, 0x0a, 0x52, 0x9b, 0x35, 0xd0, 0xaa, 0x68, 0x01, 0x07, 0xa5, 0x3f, 0xb2, 0xc5, 0xfd, 0x8b, 0xc7, 0x46, 0x39, 0xfd, 0x54, 0x79, 0x3b, 0xb2, 0xd9, 0xf9, 0x18, 0xee, 0x8a, 0xd4, 0x01, 0x45, 0xb0, 0x4f, 0x94, 0x86, 0x71, 0x94, 0x32, 0xf9, 0x10, 0x42, 0x0e, 0xf3, 0x49, 0x4c, 0x2e, 0x86, 0x90, 0xf7, 0xb2, 0x83, 0x99, 0xfc, 0x08, 0x60, 0x37, 0x51, 0xb6, 0x04, 0x62, 0x54, 0xc1, 0x77, 0xd3, 0x99, 0xec, 0x08, 0x5a, 0xc6, 0xa3, 0xd6, 0xc1, 0xa8, 0x04, 0x09, 0x21, 0x0b, 0xf9, 0x32, 0x68, 0xcf, 0x2e, 0x78, 0xf2, 0xd6, 0x1d, 0x78, 0x19, 0x68, 0x09, 0xb1, 0x37, 0x4b, 0xd5, 0xa1, 0x44, 0x66, 0x97, 0xaa, 0x7d, 0xa8, 0xa4, 0xb4, 0x24, 0xb5, 0x12, 0xa8, 0x04, 0x15, 0xcc, 0x15, 0x5e, 0xb9, 0x90, 0x5a, 0x14, 0xca, 0x52, 0x84, 0x02, 0xdd, 0xd1, 0xd1, 0x11, 0x08, 0xf3, 0x5d, 0xd5, 0x2c, 0x0b, 0x2f, 0x0d, 0x15, 0x7e, 0x27, 0x1d, 0x31, 0x25, 0x3e, 0x0a, 0x66, 0x62, 0x24, 0xa1, 0xb1, 0x78, 0x43, 0x47, 0xa0, 0xb5, 0x79, 0x0d, 0xfc, 0x76, 0xe0, 0xbb, 0xc0, 0x6f, 0x10, 0xdf, 0x09, 0xe2, 0x28, 0xf9, 0x40, 0x88, 0xa3, 0x82, 0x38, 0x12, 0x88, 0xa3, 0x80, 0x72, 0xe0, 0xb9, 0xb2, 0x04, 0x38, 0x17, 0x0d, 0x97, 0xc0, 0x66, 0x54, 0x0d, 0xb5, 0xf9, 0x7b, 0xda, 0x36, 0xc5, 0x61, 0x4f, 0xbe, 0x2c, 0x34, 0xe8, 0x42, 0x89, 0x62, 0xcb, 0x4e, 0xfb, 0x30, 0x1a, 0x27, 0xbf, 0x79, 0x46, 0x68, 0x88, 0x03, 0x35, 0x7d, 0xc4, 0xf9, 0xc0, 0xe1, 0x2c, 0x30, 0x5a, 0x9c, 0x34, 0x12, 0xf3, 0xb0, 0x94, 0x27, 0xce, 0x07, 0x98, 0x0d, 0x9c, 0xb3, 0x8f, 0xa9, 0x45, 0x6a, 0x71, 0x3c, 0x48, 0x01, 0x17, 0x44, 0xa4, 0xcd, 0x15, 0xf5, 0x6f, 0xca, 0x42, 0x70, 0x3d, 0xc3, 0x51, 0xc4, 0x65, 0xa8, 0xca, 0xd3, 0x17, 0x88, 0x16, 0xac, 0x8c, 0x52, 0x8e, 0x8d, 0x28, 0x1c, 0x27, 0xe8, 0x79, 0x43, 0x8d, 0x33, 0x62, 0x12, 0xce, 0x88, 0x12, 0xc9, 0xfa, 0x49, 0xa3, 0x03, 0x71, 0x46, 0x88, 0x92, 0xb3, 0x91, 0xc5, 0x8a, 0x2e, 0xdc, 0x8c, 0xbf, 0xf0, 0x1a, 0xeb, 0x94, 0x69, 0xde, 0x83, 0x3b, 0x80, 0x3a, 0x86, 0xb7, 0x81, 0x77, 0x53, 0x31, 0x7a, 0x64, 0x16, 0xb4, 0x0e, 0x91, 0x56, 0xb8, 0x66, 0x83, 0xa5, 0xd9, 0x3b, 0x94, 0x06, 0xdf, 0x8f, 0x15, 0x3d, 0x64, 0x69, 0x2d, 0x27, 0xaa, 0xbb, 0x03, 0x2f, 0x7f, 0xa2, 0x0b, 0xcc, 0xa1, 0x50, 0xd2, 0xb1, 0x63, 0x19, 0xb4, 0x79, 0x60, 0x47, 0x5c, 0xfb, 0x3b, 0xc0, 0x9c, 0x52, 0x01, 0x04, 0x5b, 0xf2, 0x48, 0x08, 0xfa, 0xd6, 0x82, 0xba, 0x2e, 0xa3, 0xba, 0x6b, 0x32, 0xba, 0x07, 0x41, 0x50, 0xd6, 0xe1, 0x1e, 0x97, 0x3a, 0x1f, 0x7a, 0x97, 0x73, 0xbe, 0xa7, 0x7a, 0x54, 0xc8, 0xa3, 0x88, 0x3b, 0x9b, 0xa3, 0x52, 0xe7, 0x77, 0x84, 0xf6, 0x44, 0xfc, 0xd0, 0x66, 0x0a, 0xed, 0xe8, 0xd7, 0xb2, 0x96, 0x5f, 0xb3, 0x1d, 0x8e, 0xae, 0xa9, 0xf3, 0xb5, 0xe5, 0x6a, 0x33, 0xb6, 0x4b, 0x68, 0x0e, 0x60, 0xf1, 0xdb, 0x5c, 0x06, 0xd2, 0x39, 0x7d, 0x80, 0x96, 0x11, 0xee, 0x5a, 0xc2, 0x84, 0x26, 0x00, 0xe1, 0xfe, 0x94, 0x61, 0xc5, 0xba, 0x4d, 0xbf, 0xd7, 0xa5, 0xce, 0xa7, 0xb8, 0xcf, 0xec, 0xd4, 0x80, 0xe8, 0x2e, 0x4a, 0xbd, 0xa3, 0x24, 0x76, 0x49, 0x1b, 0x39, 0x2a, 0x88, 0x32, 0xb1, 0xf1, 0x6e, 0x9a, 0xe8, 0x61, 0x18, 0xdf, 0xa3, 0x75, 0x21, 0xb7, 0x74, 0x91, 0x8b, 0x56, 0xd3, 0x78, 0xbe, 0x50, 0x32, 0x51, 0xa6, 0x3b, 0x92, 0x71, 0xd5, 0x40, 0x25, 0xa4, 0x97, 0xbb, 0xeb, 0xa7, 0xe2, 0x88, 0x87, 0x7c, 0x94, 0x30, 0x3e, 0x65, 0xa4, 0x23, 0xf5, 0xfe, 0x83, 0xf1, 0xd2, 0x60, 0x16, 0x68, 0xb1, 0x5d, 0x79, 0xee, 0xbe, 0xdc, 0x7d, 0xc5, 0x9c, 0x21, 0x57, 0x19, 0x7e, 0x8d, 0x5e, 0xd4, 0x91, 0x2a, 0xfb, 0xfd, 0x32, 0xe5, 0x82, 0xe8, 0x38, 0x47, 0x5f, 0x77, 0x6d, 0xb4, 0x23, 0xac, 0xa5, 0x89, 0x8d, 0xbf, 0x2f, 0x4e, 0x9d, 0xaf, 0x23, 0x6d, 0xb6, 0x24, 0xca, 0x93, 0x64, 0x88, 0xd6, 0xe0, 0xad, 0x71, 0x96, 0xb8, 0x71, 0x04, 0xa8, 0x20, 0x15, 0x5b, 0xcf, 0xf7, 0x84, 0x26, 0xb8, 0xd6, 0xf4, 0x1a, 0x66, 0x59, 0x03, 0xd7, 0xf5, 0x93, 0x87, 0xa7, 0xa0, 0xe4, 0x17, 0x5b, 0xdd, 0xcf, 0xd3, 0xd5, 0xbd, 0x96, 0xd9, 0xa3, 0xa7, 0x1e, 0x6e, 0x50, 0x57, 0x07, 0xcf, 0x0d, 0x74, 0xf9, 0xae, 0xf5, 0xd7, 0x02, 0xeb, 0xef, 0x1e, 0xa6, 0xd1, 0x87, 0x9c, 0x01, 0x52, 0xaa, 0x9c, 0xb8, 0x1e, 0xf2, 0x5d, 0xe8, 0x7a, 0x2b, 0x85, 0x5e, 0x84, 0x99, 0xc6, 0xa5, 0xd0, 0xd5, 0xf5, 0xb6, 0x73, 0x44, 0x52, 0x6e, 0x33, 0xd6, 0x29, 0xef, 0xd8, 0x74, 0x86, 0xca, 0x82, 0x89, 0xa7, 0x29, 0x88, 0x55, 0x64, 0x40, 0xdb, 0x75, 0x01, 0xbe, 0x47, 0xd6, 0x54, 0x8b, 0x2b, 0x59, 0x29, 0x89, 0x86, 0x8a, 0x9e, 0x9c, 0xa2, 0x0f, 0x45, 0x4f, 0x8b, 0xb1, 0x50, 0xcf, 0xbe, 0x3d, 0x88, 0xbc, 0x0f, 0x8c, 0x93, 0xa6, 0xb3, 0xf0, 0xeb, 0xd3, 0x04, 0xa5, 0xad, 0xfa, 0x00, 0xb8, 0x01, 0x1b, 0x97, 0x00, 0x2b, 0x96, 0x28, 0x13, 0x13, 0x82, 0x3e, 0x07, 0x75, 0x63, 0x61, 0x3c, 0x24, 0x9a, 0xe4, 0xd6, 0xea, 0x08, 0x2f, 0xd4, 0xed, 0x66, 0x65, 0x5d, 0x8c, 0xb4, 0x85, 0x4a, 0x07, 0x2d, 0x47, 0x80, 0xc2, 0x54, 0x18, 0x3d, 0x98, 0x1e, 0x85, 0xdb, 0xda, 0xa0, 0x49, 0x00, 0xde, 0x4c, 0x65, 0xf7, 0x51, 0xe6, 0x12, 0x3f, 0xd2, 0x05, 0xe6, 0x8f, 0x46, 0x9b, 0x18, 0x9a, 0x47, 0x22, 0x9b, 0xae, 0x50, 0x5f, 0x86, 0xe8, 0xc3, 0x30, 0x51, 0x9b, 0x80, 0x6b, 0x01, 0x93, 0x46, 0xdf, 0x36, 0xf0, 0x6a, 0x53, 0x3d, 0xfa, 0xc5, 0x51, 0xe6, 0xe1, 0x17, 0x76, 0xe0, 0xc4, 0x24, 0x98, 0xba, 0xca, 0x5a, 0x20, 0xca, 0xe3, 0xf0, 0x5b, 0x61, 0xfc, 0x5e, 0xa3, 0x3c, 0x5c, 0x17, 0x8a, 0x4b, 0x94, 0x40, 0x67, 0xaa, 0x8e, 0xec, 0x84, 0x9e, 0xdc, 0x95, 0x7c, 0x55, 0xb8, 0xeb, 0x1a, 0x4b, 0xb7, 0x9c, 0x5f, 0x50, 0xed, 0x9e, 0x84, 0x62, 0x34, 0x4a, 0xd0, 0x51, 0xb4, 0x10, 0x30, 0x34, 0x69, 0x68, 0xb2, 0x36, 0x1e, 0x7d, 0x12, 0x8c, 0x48, 0xed, 0x93, 0xda, 0x74, 0x16, 0xcf, 0x84, 0x47, 0x58, 0xfb, 0x58, 0x9b, 0xce, 0xc3, 0x7b, 0xe2, 0x08, 0x57, 0xc7, 0x47, 0xf5, 0x00, 0x1a, 0xfb, 0xcb, 0xc8, 0xb0, 0xa6, 0xb3, 0xd6, 0x1d, 0xd6, 0x6a, 0x7a, 0x52, 0x90, 0x8b, 0x65, 0x8d, 0x83, 0xd2, 0xa1, 0xde, 0xc1, 0x2b, 0xfb, 0x8b, 0x25, 0x4c, 0xef, 0xc0, 0x1a, 0x65, 0x0e, 0x1d, 0xd0, 0x54, 0x97, 0x0c, 0x6f, 0x9a, 0xeb, 0xc4, 0x0d, 0xe0, 0xc2, 0x9a, 0xea, 0x58, 0x9d, 0xf6, 0x71, 0x09, 0x01, 0xc0, 0x5b, 0x51, 0x8b, 0x07, 0x0a, 0xf8, 0x95, 0xda, 0x39, 0xde, 0x27, 0xba, 0xa0, 0xe9, 0xec, 0xc9, 0x5d, 0x4b, 0xaa, 0xf9, 0x20, 0xbc, 0x5a, 0x52, 0xcd, 0x29, 0x45, 0x6f, 0xbb, 0xd1, 0x49, 0x27, 0xab, 0x79, 0x69, 0x74, 0x92, 0x1a, 0xdb, 0xb6, 0x07, 0xe9, 0x50, 0x53, 0xae, 0x29, 0x68, 0xaa, 0x35, 0x45, 0x38, 0x7d, 0xac, 0x62, 0x1e, 0xd4, 0xf7, 0x63, 0xa2, 0x9a, 0x94, 0x48, 0x9c, 0x92, 0xfe, 0xd8, 0x2f, 0xa6, 0x82, 0xa6, 0xf3, 0xa1, 0x50, 0x87, 0xc8, 0x24, 0xa7, 0xdf, 0x28, 0x28, 0x87, 0x4f, 0x2c, 0xa4, 0x1e, 0xe5, 0x6f, 0xfd, 0x72, 0xe0, 0x8d, 0x68, 0x41, 0xe3, 0x0f, 0x69, 0x9d, 0x4f, 0xbc, 0x11, 0x2c, 0x68, 0x7d, 0xc4, 0x2f, 0x9b, 0x0e, 0x1a, 0x30, 0x9f, 0x70, 0x12, 0x58, 0x53, 0xce, 0x61, 0x3e, 0x26, 0x97, 0x3f, 0x77, 0x57, 0x1a, 0x2c, 0xe6, 0x6a, 0x4d, 0x02, 0xd0, 0x37, 0xc1, 0x67, 0x73, 0x48, 0x27, 0x4a, 0x51, 0x06, 0x42, 0xfc, 0xf3, 0xcd, 0x5e, 0x82, 0xcf, 0x9a, 0x9b, 0x4b, 0x46, 0xb5, 0x0e, 0xa0, 0x44, 0x4c, 0xbf, 0x46, 0x85, 0xa3, 0x4f, 0x93, 0x73, 0x5f, 0xbb, 0xec, 0xa4, 0x9e, 0xd2, 0xc4, 0x72, 0x16, 0x34, 0x39, 0xf5, 0x11, 0xb6, 0x89, 0x7b, 0x28, 0x4d, 0xeb, 0xd9, 0xae, 0xa7, 0xcb, 0x2f, 0xb9, 0x48, 0x53, 0xf4, 0x87, 0x35, 0x5d, 0x61, 0xa0, 0xeb, 0xa0, 0x3f, 0xe0, 0x29, 0xb7, 0x75, 0x10, 0xee, 0x82, 0xe9, 0x98, 0x55, 0x32, 0xef, 0xe5, 0x54, 0xaa, 0x0a, 0x57, 0x2c, 0xba, 0xba, 0x2a, 0x91, 0x4a, 0x66, 0x6b, 0xd7, 0xc4, 0xfb, 0x68, 0x90, 0x90, 0x96, 0x3e, 0x00, 0x87, 0x13, 0xa7, 0x77, 0xd6, 0xe8, 0xbe, 0x90, 0x7f, 0xa4, 0x0e, 0x7d, 0x25, 0x02, 0x6d, 0x41, 0xe9, 0xbc, 0x2e, 0x8c, 0x62, 0x72, 0x52, 0xbc, 0x29, 0xad, 0x29, 0x26, 0xa3, 0x1f, 0x70, 0xa0, 0xbe, 0xa9, 0x9b, 0x7f, 0xb3, 0x53, 0x1b, 0x22, 0x4a, 0x47, 0x8e, 0x72, 0x11, 0xb5, 0xfb, 0xc7, 0x27, 0x5e, 0x11, 0x1a, 0x3e, 0xbd, 0x0c, 0xdc, 0xd6, 0x50, 0xf4, 0x2a, 0xe8, 0x48, 0xa3, 0x94, 0x7b, 0xbc, 0xdb, 0x8a, 0xda, 0x97, 0xda, 0x29, 0xe2, 0x8c, 0xf1, 0xe2, 0x6a, 0x8a, 0x6b, 0xe9, 0xa6, 0x96, 0xb4, 0x65, 0x8a, 0xfb, 0x6a, 0xea, 0xa2, 0xad, 0xd0, 0x07, 0xdc, 0xa5, 0xb4, 0xb9, 0x48, 0x8b, 0xd1, 0x95, 0x54, 0x05, 0xd8, 0x41, 0xfa, 0x67, 0x74, 0x94, 0x53, 0x3f, 0x41, 0xcb, 0x3c, 0x41, 0x02, 0x4a, 0xee, 0xdb, 0x1f, 0x53, 0x16, 0x77, 0xbe, 0x95, 0xae, 0x9d, 0x0f, 0xd4, 0xbd, 0x36, 0x50, 0x1b, 0x13, 0x26, 0x4a, 0x4b, 0x7b, 0x89, 0x74, 0xaf, 0xb1, 0x90, 0xa4, 0x10, 0x0d, 0x50, 0xd9, 0x3a, 0x97, 0xcd, 0xa0, 0x4e, 0xae, 0x55, 0x3f, 0x98, 0xad, 0xfa, 0x2e, 0xbf, 0x79, 0x2d, 0x74, 0x12, 0x4e, 0x52, 0xed, 0x4c, 0x51, 0xca, 0xdf, 0xc9, 0x33, 0x89, 0x3a, 0x09, 0x33, 0x60, 0x15, 0x3a, 0x29, 0xee, 0xd7, 0x88, 0xbd, 0xad, 0x89, 0x3f, 0x56, 0xad, 0x03, 0x2e, 0xda, 0xe0, 0xf7, 0xe4, 0x74, 0x2e, 0x89, 0xa3, 0x32, 0xdf, 0x16, 0x0b, 0x9e, 0x71, 0xf5, 0xbc, 0xc0, 0xe7, 0xa3, 0xa4, 0xb9, 0x5a, 0xa5, 0x9c, 0x84, 0xb2, 0xab, 0x68, 0x49, 0x93, 0x4a, 0x63, 0x06, 0xd2, 0x50, 0x6b, 0x4f, 0xed, 0x85, 0x72, 0xe5, 0x49, 0xf0, 0x2b, 0xe7, 0x51, 0xfa, 0x4d, 0x56, 0x65, 0xcd, 0x97, 0x9a, 0x14, 0x11, 0xc0, 0x59, 0xae, 0x33, 0xc3, 0x95, 0xa4, 0x0a, 0x5a, 0xd4, 0xa1, 0x53, 0xe2, 0x5e, 0x92, 0x8f, 0x43, 0x7e, 0xd8, 0x3a, 0xdf, 0x6c, 0x92, 0xf4, 0x32, 0x53, 0x4d, 0x2e, 0x05, 0xb5, 0x01, 0xe3, 0x01, 0xb4, 0x48, 0x62, 0x6a, 0x25, 0xb6, 0x66, 0x89, 0x84, 0xf6, 0x54, 0x92, 0x93, 0x42, 0xa2, 0x9e, 0x24, 0xcb, 0x6d, 0x16, 0x87, 0x26, 0x02, 0x38, 0xf2, 0xf4, 0x97, 0x31, 0xfd, 0x05, 0x7b, 0x42, 0xfb, 0x0b, 0x67, 0xe0, 0x5e, 0x41, 0xaf, 0x6a, 0x29, 0xcf, 0x74, 0xa5, 0xf4, 0xe4, 0xc9, 0xd9, 0x2e, 0xbe, 0xc9, 0x43, 0xa8, 0x87, 0x75, 0xa3, 0x01, 0xd6, 0x81, 0xdb, 0x40, 0x5d, 0x35, 0x8f, 0xa0, 0xf8, 0x78, 0xd4, 0xfd, 0x6e, 0xe9, 0x63, 0xb0, 0x4c, 0x58, 0xcf, 0x4e, 0xca, 0x0f, 0x50, 0x2f, 0x94, 0x2d, 0x79, 0x4c, 0xd3, 0xbf, 0xcf, 0x63, 0x32, 0x3f, 0x28, 0x57, 0xf0, 0xe4, 0xba, 0xd9, 0xce, 0x93, 0x64, 0x28, 0x52, 0x3c, 0x92, 0xf4, 0x66, 0xfe, 0x4d, 0x9d, 0xe2, 0x4e, 0xf1, 0x48, 0xa2, 0xc5, 0x9e, 0xd0, 0x4a, 0x8f, 0x97, 0xb3, 0xd1, 0xb6, 0x0c, 0x5a, 0xc8, 0x45, 0x6d, 0x0c, 0x6c, 0xbc, 0xb7, 0x2c, 0x75, 0xb1, 0xc6, 0xdc, 0xc6, 0x3b, 0xcf, 0xd4, 0xc5, 0x54, 0x06, 0xa6, 0x86, 0x52, 0x1b, 0xf7, 0xbf, 0xf7, 0x62, 0xef, 0x4f, 0xd2, 0x5d, 0x23, 0x27, 0x87, 0xaa, 0x6f, 0x83, 0x43, 0x4d, 0x75, 0xe7, 0x50, 0xb9, 0x78, 0xae, 0x5c, 0xa4, 0x47, 0xc8, 0x64, 0xf7, 0x54, 0x9d, 0xd4, 0x93, 0x0a, 0x35, 0x07, 0x15, 0x5c, 0x7c, 0x4f, 0x33, 0xf1, 0xb1, 0x00, 0x2f, 0xd8, 0xb3, 0x8c, 0xb4, 0x23, 0x72, 0xea, 0xff, 0xd7, 0x0c, 0xb8, 0x57, 0x66, 0x41, 0xfe, 0xab, 0x1d, 0x7d, 0xdf, 0xdc, 0xd7, 0x52, 0xaa, 0x6f, 0x77, 0x05, 0xe6, 0x2d, 0xbd, 0xba, 0x37, 0xac, 0xad, 0x94, 0x81, 0x2e, 0xdb, 0x7c, 0x77, 0x2d, 0x17, 0xdf, 0xde, 0x4c, 0xf7, 0x1d, 0x0d, 0x7c, 0x27, 0xf5, 0xc0, 0x6e, 0xb1, 0xb8, 0x3e, 0x73, 0xe8, 0xf5, 0x62, 0x80, 0xc6, 0xe2, 0x6c, 0x39, 0xc6, 0xcb, 0x2a, 0xc5, 0x3e, 0x44, 0x9d, 0x28, 0x13, 0xce, 0xb4, 0x10, 0x58, 0x2a, 0xa9, 0x06, 0x60, 0x14, 0xb4, 0x28, 0xb4, 0x7b, 0x6a, 0x5b, 0xad, 0x0e, 0x94, 0x4c, 0xb4, 0xb8, 0xbf, 0x0a, 0xdc, 0xf1, 0x97, 0x80, 0xd5, 0x94, 0xea, 0xf6, 0x87, 0xb1, 0x1e, 0x71, 0xb4, 0xbc, 0x32, 0x53, 0x9c, 0x58, 0x5e, 0xa4, 0xb8, 0xa1, 0x3c, 0xd1, 0xcc, 0x3b, 0x62, 0xa0, 0x88, 0xb9, 0x42, 0x94, 0xa8, 0x05, 0xe5, 0xce, 0x8b, 0x21, 0xe5, 0x2c, 0xf6, 0xa1, 0x9b, 0x67, 0x60, 0x94, 0x46, 0xe6, 0xb3, 0xfd, 0xdd, 0x78, 0x4b, 0xa7, 0x64, 0x5f, 0x77, 0x47, 0x5f, 0x51, 0xae, 0xd9, 0x9e, 0xca, 0xa3, 0x15, 0x0f, 0x45, 0x91, 0x2f, 0x57, 0x8e, 0x52, 0x8b, 0x7c, 0x16, 0x7a, 0xb6, 0x8d, 0x00, 0xca, 0x40, 0x89, 0x67, 0x00, 0x3e, 0x76, 0x19, 0xd7, 0x9f, 0xf7, 0x8f, 0x82, 0x92, 0x99, 0x72, 0x88, 0x3c, 0xee, 0x66, 0x05, 0x99, 0xb7, 0x57, 0x53, 0xc1, 0x07, 0xa2, 0x27, 0x5c, 0x7c, 0xc2, 0x2b, 0xd8, 0x95, 0x4c, 0x5d, 0xe1, 0x46, 0x95, 0xe7, 0xfd, 0x91, 0xbd, 0x5a, 0x11, 0xdf, 0x9a, 0x10, 0xdf, 0x9a, 0xa0, 0x9d, 0x28, 0xce, 0x35, 0x50, 0xfd, 0x47, 0x2c, 0xbb, 0xde, 0xf2, 0x6d, 0x75, 0xcb, 0x7d, 0x86, 0xe6, 0x16, 0xd3, 0x12, 0xaa, 0xc5, 0x1f, 0x4e, 0x64, 0xd2, 0x72, 0x01, 0xda, 0x4d, 0x09, 0x03, 0x9d, 0x08, 0x76, 0x1b, 0xc5, 0x57, 0x32, 0xc0, 0x57, 0x65, 0xd4, 0x7b, 0x02, 0x57, 0x64, 0x40, 0xad, 0x32, 0x6c, 0x37, 0x48, 0x29, 0xc8, 0x6d, 0xc7, 0xe2, 0x5a, 0x33, 0xfe, 0x8f, 0x08, 0xa3, 0x3b, 0xf0, 0x3a, 0x13, 0xcc, 0xb7, 0xca, 0xed, 0x55, 0x15, 0x0e, 0x7d, 0x4d, 0x1c, 0xef, 0x0f, 0xb3, 0x55, 0x8d, 0x1a, 0xc0, 0x9c, 0xaa, 0xa6, 0x80, 0xc8, 0xfa, 0x98, 0x59, 0x4f, 0xb8, 0x46, 0x4e, 0xe3, 0x3a, 0xda, 0x0b, 0x1e, 0x6c, 0xe7, 0x56, 0x45, 0x79, 0x6f, 0xdc, 0xbb, 0xd0, 0x68, 0x8d, 0x54, 0x13, 0xce, 0x00, 0xd4, 0x97, 0x01, 0xa9, 0x2f, 0x46, 0x63, 0x99, 0xc4, 0x13, 0x65, 0x58, 0x27, 0x75, 0x44, 0x6e, 0xdd, 0xae, 0x01, 0x6a, 0x4d, 0x8f, 0x54, 0x37, 0xd0, 0x24, 0x86, 0x04, 0xf5, 0xd0, 0x21, 0xe5, 0x43, 0x26, 0x51, 0x1b, 0x3a, 0x5d, 0xd8, 0x8e, 0xf1, 0x62, 0x8a, 0x2f, 0x9c, 0x5c, 0x49, 0xbc, 0x7a, 0x80, 0x6b, 0x8e, 0x9a, 0xa9, 0xf5, 0x00, 0x91, 0x12, 0x53, 0x3a, 0x29, 0xb1, 0x56, 0x1c, 0xba, 0x0f, 0xae, 0x0a, 0xa2, 0xc5, 0x3d, 0x2d, 0xf3, 0x9e, 0xce, 0x38, 0xf4, 0x62, 0x05, 0xf9, 0x1b, 0xab, 0x63, 0x70, 0xcb, 0xd5, 0x31, 0x85, 0x34, 0xeb, 0xdf, 0xff, 0x25, 0x8f, 0xee, 0xdc, 0x29, 0xcb, 0x47, 0x8e, 0xcb, 0x1d, 0x8b, 0xb5, 0x8d, 0x4d, 0x84, 0xd5, 0xa9, 0x8b, 0xf5, 0x04, 0xe6, 0xfb, 0x7a, 0xe7, 0x1e, 0xbc, 0x56, 0x3c, 0x8f, 0x8e, 0x77, 0x9d, 0xdb, 0xac, 0x67, 0x78, 0x6e, 0x2b, 0xc3, 0x73, 0x3b, 0x19, 0x9e, 0x3b, 0x40, 0xf1, 0x5c, 0x8d, 0x78, 0x8e, 0x0d, 0xd8, 0x31, 0xdf, 0xf5, 0x8d, 0x9f, 0x90, 0xcf, 0xce, 0x79, 0x4a, 0x98, 0x3f, 0xa9, 0x32, 0xe6, 0x49, 0x6a, 0x2a, 0x4b, 0x73, 0x16, 0x4b, 0x73, 0x21, 0x0d, 0x3d, 0xa9, 0x9c, 0x91, 0x94, 0xc8, 0x85, 0x77, 0x68, 0x9a, 0xa8, 0xe9, 0xa8, 0x73, 0x49, 0x2c, 0x9e, 0x61, 0xe9, 0x7a, 0x90, 0x6e, 0x14, 0xc7, 0xe2, 0x5e, 0x59, 0x2d, 0xdd, 0x27, 0xbb, 0xd2, 0x36, 0x16, 0x84, 0x37, 0x95, 0x00, 0x9b, 0xda, 0xc6, 0x81, 0xf0, 0x66, 0x09, 0xfa, 0x56, 0xe3, 0x12, 0xdb, 0xdc, 0xa9, 0xdb, 0xe3, 0x86, 0x07, 0x87, 0x35, 0xef, 0xd2, 0x21, 0xfe, 0x01, 0xec, 0xac, 0x6b, 0x85, 0xa7, 0x7c, 0x44, 0xcb, 0x2f, 0x78, 0xa6, 0x17, 0x4d, 0xa8, 0x54, 0x42, 0x51, 0x68, 0xa2, 0x50, 0xea, 0x96, 0x86, 0x1d, 0xda, 0x36, 0xdf, 0x99, 0x8e, 0x9e, 0xe9, 0xd8, 0x92, 0x65, 0x88, 0x71, 0xd1, 0xd7, 0x39, 0x5d, 0xb5, 0xea, 0xdd, 0x76, 0xf9, 0xce, 0xe0, 0x2e, 0x1f, 0xfa, 0x10, 0xfc, 0xab, 0x5d, 0x3e, 0x4c, 0x85, 0xad, 0xda, 0x96, 0x63, 0xd5, 0xf7, 0xd5, 0x95, 0x5a, 0xd4, 0xb9, 0x77, 0x20, 0x75, 0x31, 0xac, 0xb1, 0xca, 0x5e, 0x09, 0xc4, 0xbf, 0x8d, 0x18, 0xd0, 0x56, 0x8f, 0x30, 0xfe, 0xc7, 0xa1, 0xd0, 0x4c, 0x7b, 0x04, 0xf7, 0x05, 0x93, 0x9a, 0xf7, 0x0e, 0x81, 0x6f, 0x7e, 0x0f, 0xb5, 0x13, 0x6c, 0xd3, 0x1c, 0xfe, 0xae, 0xa7, 0x9e, 0xf4, 0xc9, 0x64, 0x87, 0x93, 0x53, 0x6a, 0x70, 0xe2, 0x62, 0xf7, 0x12, 0x32, 0x7c, 0x1c, 0x2b, 0xa4, 0xd0, 0xbd, 0xde, 0xbf, 0xc2, 0x8e, 0xe8, 0x2b, 0xdd, 0x42, 0x25, 0xb6, 0xd0, 0xb2, 0x5a, 0x02, 0xaf, 0x67, 0x3b, 0x43, 0x3e, 0xcc, 0xb3, 0x75, 0x04, 0xef, 0xc3, 0x70, 0x9b, 0x92, 0x0f, 0xa2, 0x38, 0x72, 0x14, 0xc3, 0x91, 0x11, 0xec, 0xb9, 0xbf, 0xba, 0x42, 0xc4, 0x7f, 0xea, 0x95, 0xf0, 0xf6, 0x6f, 0x60, 0x3f, 0x98, 0x9b, 0xd1, 0x2d, 0xe7, 0x26, 0x52, 0xba, 0x40, 0x39, 0xb4, 0xde, 0x41, 0x7b, 0x07, 0xa8, 0xbc, 0xc0, 0x56, 0xcf, 0x2a, 0xdb, 0xd8, 0x55, 0x6b, 0x35, 0x67, 0x43, 0xfe, 0x62, 0xce, 0x8a, 0x7b, 0x22, 0xfd, 0x5c, 0x7b, 0x22, 0xba, 0x30, 0x51, 0x5f, 0xb5, 0x15, 0x9d, 0xe1, 0xa1, 0xf2, 0x62, 0xda, 0x3b, 0xde, 0xa2, 0xcc, 0x9c, 0x4a, 0x21, 0x9c, 0xa1, 0x63, 0xbf, 0x96, 0x4b, 0x40, 0x7a, 0x0c, 0xf7, 0x83, 0xe9, 0xd9, 0x34, 0x77, 0x78, 0x32, 0x70, 0xc2, 0x7b, 0x44, 0xca, 0x03, 0xf1, 0xb0, 0x70, 0x85, 0x7d, 0x5f, 0x0f, 0x3d, 0x53, 0x03, 0x14, 0x12, 0xb5, 0x5e, 0x41, 0x31, 0x71, 0xbe, 0xdb, 0xa8, 0xba, 0xe2, 0x2c, 0x77, 0x8b, 0xaf, 0xbc, 0x05, 0xe4, 0xbb, 0x4e, 0x86, 0xda, 0x84, 0x86, 0xbf, 0xf9, 0x85, 0x42, 0xa8, 0x87, 0xd1, 0x7b, 0x1e, 0xfd, 0xd7, 0xfe, 0xf1, 0x17, 0x13, 0x08, 0x52, 0x96, 0xe3, 0xae, 0x1c, 0x9f, 0x1d, 0x4e, 0xb1, 0x0c, 0x4f, 0x24, 0xf9, 0x86, 0xb4, 0xcf, 0xef, 0x52, 0x4f, 0xe5, 0x84, 0xec, 0xc8, 0x0e, 0xa7, 0xd7, 0x5e, 0x70, 0x3d, 0x23, 0x5b, 0x49, 0xaf, 0xe5, 0x76, 0x22, 0xb1, 0xf2, 0x63, 0xe9, 0xb5, 0xb7, 0x23, 0x86, 0x86, 0x7e, 0xf0, 0x2c, 0x12, 0x3d, 0x00, 0xc0, 0x9d, 0x82, 0x74, 0x70, 0xc4, 0x66, 0xfb, 0xc3, 0x95, 0x07, 0xf5, 0x74, 0x1f, 0x82, 0x76, 0x75, 0xe8, 0xf3, 0x20, 0x47, 0x27, 0x1a, 0x76, 0x84, 0xa7, 0x72, 0x5e, 0xad, 0x2e, 0x10, 0xf6, 0x3c, 0x8a, 0xe7, 0xe8, 0x78, 0x1a, 0x79, 0x8b, 0xca, 0x3b, 0xd7, 0xa0, 0x17, 0x7b, 0x7a, 0x85, 0x67, 0xfc, 0x17, 0xe8, 0xd5, 0x79, 0xb8, 0x3a, 0xc9, 0x85, 0x09, 0x27, 0xa1, 0x0c, 0x35, 0x19, 0xe5, 0x7c, 0x20, 0x5e, 0xab, 0xc3, 0x84, 0x9a, 0xf9, 0x1f, 0x0a, 0xe7, 0xd7, 0x95, 0x3f, 0x43, 0xc8, 0xe6, 0x74, 0x4a, 0x45, 0x4d, 0x40, 0xad, 0xf5, 0xb5, 0x1a, 0x48, 0xf5, 0x11, 0xdc, 0x01, 0x97, 0xc1, 0xdd, 0x0a, 0xcc, 0xa3, 0x1b, 0xde, 0x29, 0xd0, 0x4e, 0xa4, 0x46, 0x3c, 0x07, 0x17, 0x25, 0x5b, 0x92, 0x01, 0x87, 0xa5, 0x42, 0x5b, 0xd9, 0xd0, 0xcf, 0xb0, 0xb0, 0x87, 0x59, 0x8a, 0x10, 0x2d, 0x60, 0x18, 0x34, 0x09, 0xe8, 0xc3, 0x16, 0x56, 0x5f, 0x0d, 0xe5, 0xa8, 0xf0, 0x6c, 0x5e, 0xb6, 0x68, 0x9f, 0x36, 0x9e, 0xe1, 0x8d, 0x7c, 0x18, 0xff, 0xce, 0xeb, 0x52, 0xf6, 0xb5, 0xe2, 0x3f, 0xf8, 0x32, 0xff, 0x3e, 0x9a, 0x9a, 0x34, 0x4d, 0xa6, 0xe3, 0xc8, 0x49, 0x2f, 0xa3, 0x47, 0xe0, 0x03, 0xe8, 0x11, 0x18, 0x75, 0x8f, 0xff, 0xb8, 0x1f, 0x39, 0x4f, 0x7a, 0x92, 0xb3, 0x82, 0x9d, 0x1c, 0xd4, 0x23, 0x67, 0xa3, 0x13, 0x7d, 0x4e, 0xd3, 0xd5, 0x37, 0x12, 0xc6, 0x23, 0xac, 0xf2, 0xa8, 0x27, 0xa8, 0xa4, 0x27, 0x6c, 0xfd, 0x49, 0x48, 0xb3, 0x96, 0x20, 0x60, 0x0c, 0xf4, 0x23, 0x2c, 0x4a, 0xca, 0x75, 0x70, 0xa4, 0x52, 0xe9, 0x38, 0xec, 0x5d, 0xce, 0xe5, 0xc9, 0x7e, 0x19, 0xaf, 0x67, 0x3a, 0x11, 0x69, 0xa2, 0xfe, 0x03, 0xf5, 0x69, 0x31, 0x0a, 0xd7, 0x6b, 0xd1, 0xc7, 0x63, 0x64, 0xb1, 0x4e, 0x49, 0x77, 0x1f, 0x09, 0x99, 0x85, 0x4f, 0x8b, 0xbc, 0x19, 0x46, 0x28, 0x63, 0xd4, 0x87, 0xb8, 0x57, 0x9f, 0xef, 0x2c, 0xbf, 0x6b, 0x76, 0x0e, 0xa7, 0xef, 0xbd, 0xd8, 0xfb, 0x94, 0xfb, 0xde, 0xc7, 0xd2, 0xf7, 0x0a, 0xf6, 0xde, 0x70, 0xdf, 0xfb, 0x90, 0x56, 0xde, 0xec, 0x07, 0xb4, 0x9a, 0xf7, 0x32, 0x91, 0x1e, 0xf9, 0x3f, 0xe7, 0x23, 0x64, 0x94, 0x8f, 0x20, 0x7f, 0xc4, 0x47, 0x90, 0x4b, 0x7f, 0xc5, 0x47, 0xfc, 0x3e, 0xea, 0xff, 0x9c, 0x8f, 0x28, 0x6a, 0x93, 0x8f, 0x30, 0x39, 0xa9, 0xfe, 0xc6, 0xbb, 0x7f, 0x44, 0xf5, 0x37, 0xee, 0xa1, 0x54, 0xbf, 0x3f, 0xca, 0x13, 0xfe, 0x5d, 0xaa, 0x9f, 0xee, 0x1d, 0x18, 0x81, 0x02, 0x84, 0x31, 0xa8, 0x43, 0xdf, 0xe7, 0xf1, 0xb8, 0xff, 0x06, 0xf4, 0xdf, 0x1a, 0xa0, 0xff, 0x86, 0x8a, 0x1e, 0x43, 0x4f, 0xce, 0x84, 0x36, 0x41, 0x2a, 0x30, 0x94, 0x52, 0x81, 0xb0, 0xf6, 0xea, 0x73, 0xd8, 0x2e, 0x7b, 0x9b, 0x54, 0x20, 0xa3, 0xf3, 0xfc, 0x81, 0xce, 0x33, 0xe0, 0x49, 0x8c, 0x3a, 0xbe, 0xe5, 0x7e, 0x1b, 0xed, 0x8b, 0x60, 0x43, 0x3c, 0x37, 0xd6, 0x75, 0x9a, 0x93, 0xd2, 0x72, 0x3c, 0xfc, 0xaf, 0xe9, 0x40, 0xb6, 0x4b, 0x12, 0x43, 0xa9, 0x76, 0xb6, 0x53, 0x02, 0xed, 0xe9, 0x83, 0xed, 0x79, 0x67, 0x8d, 0x46, 0x3c, 0xbf, 0x14, 0x4f, 0x30, 0x14, 0x76, 0xf9, 0xa7, 0x97, 0x85, 0xbb, 0xf6, 0x74, 0xe0, 0xe8, 0x15, 0x8e, 0x14, 0xca, 0x51, 0x27, 0x38, 0xf7, 0x3e, 0xb4, 0xc4, 0x11, 0x43, 0xf7, 0x3e, 0x42, 0x8c, 0x09, 0x6c, 0xff, 0xc3, 0x4c, 0x74, 0x6c, 0x6c, 0xe7, 0x0a, 0x77, 0xd9, 0x8e, 0x82, 0x8b, 0x4e, 0x6f, 0xb1, 0x73, 0x72, 0x00, 0x2d, 0x70, 0x0d, 0x0f, 0x71, 0x8d, 0xf4, 0x0a, 0xd7, 0x4a, 0xc6, 0x64, 0x23, 0x90, 0x96, 0xa4, 0x3b, 0x0c, 0x87, 0x61, 0xb4, 0x6f, 0x12, 0x67, 0xbe, 0x76, 0x20, 0x97, 0xdc, 0x5d, 0x27, 0x62, 0xbd, 0x32, 0x65, 0x29, 0x19, 0x47, 0x26, 0x48, 0x11, 0x67, 0xb6, 0x90, 0x9b, 0x0d, 0x73, 0x58, 0x99, 0x0c, 0x77, 0x57, 0xc7, 0x44, 0x46, 0x11, 0x78, 0xdb, 0x27, 0xf0, 0xe1, 0xf4, 0x99, 0xce, 0x31, 0x96, 0x86, 0xa3, 0xec, 0x39, 0xfc, 0x70, 0x26, 0xc3, 0xad, 0x65, 0xba, 0xe1, 0x26, 0x87, 0x9e, 0x49, 0x6c, 0xa7, 0xf0, 0x11, 0x06, 0x09, 0x9f, 0x44, 0xa5, 0xcd, 0x03, 0x84, 0x4d, 0x54, 0x32, 0x9b, 0x6a, 0xa3, 0x72, 0xed, 0x85, 0x6a, 0x2a, 0xa1, 0xad, 0xa7, 0x77, 0x12, 0x58, 0x81, 0xb7, 0x53, 0xbf, 0xee, 0x07, 0xf8, 0x60, 0xfa, 0xc4, 0x17, 0xd6, 0x49, 0xaa, 0x4d, 0xac, 0x97, 0xf0, 0x72, 0xad, 0x84, 0x97, 0xea, 0x24, 0x14, 0x67, 0x0e, 0x70, 0x3f, 0xa9, 0x11, 0xd2, 0xb8, 0x64, 0xba, 0x52, 0x9c, 0xa1, 0x78, 0x33, 0x8d, 0xae, 0x7b, 0x9b, 0xa8, 0xdf, 0x76, 0xb3, 0x70, 0x7b, 0x7d, 0x8b, 0xd3, 0x3d, 0xf7, 0x7d, 0x06, 0x0d, 0x7a, 0x74, 0x24, 0x5a, 0x0b, 0x97, 0xac, 0xac, 0xa4, 0xbe, 0x1f, 0xa0, 0x87, 0xe8, 0x1c, 0x96, 0x8a, 0x67, 0x1c, 0xe1, 0xd2, 0xb3, 0xe5, 0x30, 0x5f, 0x2a, 0x5c, 0x36, 0x18, 0xde, 0x12, 0xe5, 0x61, 0xfe, 0xb1, 0x04, 0xa5, 0x30, 0x21, 0xfd, 0x59, 0xb8, 0x6f, 0x0a, 0xe1, 0x42, 0xf4, 0x41, 0xd9, 0x06, 0xe5, 0xba, 0x8c, 0x4b, 0x6e, 0x9f, 0x08, 0x3c, 0x78, 0xa5, 0x65, 0x25, 0x70, 0xaf, 0x49, 0xe2, 0xaa, 0xc0, 0x66, 0x62, 0x99, 0x6b, 0x16, 0x26, 0xd3, 0x59, 0xa8, 0xb4, 0x3b, 0xe9, 0xb7, 0x7a, 0xb7, 0x9d, 0x6e, 0x57, 0x59, 0x5f, 0xd9, 0x6f, 0x9b, 0xea, 0xc8, 0xa1, 0x75, 0x4f, 0x70, 0x9e, 0x4b, 0x70, 0xc9, 0x5d, 0xcd, 0x40, 0x1d, 0xa5, 0x43, 0x19, 0xcf, 0xb3, 0x55, 0xad, 0xd9, 0x93, 0xa8, 0x07, 0xa7, 0x10, 0xce, 0xb3, 0x76, 0xa9, 0x75, 0xed, 0xbd, 0xd8, 0x44, 0xff, 0xd7, 0x2e, 0xac, 0x15, 0xe4, 0x76, 0xfa, 0xeb, 0x96, 0x1b, 0xe7, 0x4b, 0x57, 0x13, 0x9e, 0xed, 0xbf, 0x34, 0xd0, 0x7d, 0x32, 0x36, 0x9a, 0x10, 0x6f, 0x46, 0x86, 0xd2, 0x7d, 0x32, 0xa5, 0x11, 0x6d, 0xd6, 0x34, 0xb8, 0xad, 0x23, 0x61, 0xc2, 0x6d, 0x36, 0x6a, 0xc2, 0x5b, 0xf0, 0xd6, 0xe9, 0xbc, 0x8f, 0x38, 0x3a, 0x50, 0x3a, 0x1a, 0x67, 0xb7, 0x6b, 0xcd, 0x50, 0xd0, 0x35, 0x43, 0xc7, 0xc6, 0xc6, 0x6d, 0x76, 0xd5, 0x1e, 0xae, 0xba, 0xb8, 0xf6, 0xd1, 0xdc, 0xe8, 0x58, 0xaa, 0xf7, 0x5f, 0x8b, 0xe5, 0xa2, 0x72, 0x0c, 0x67, 0x8a, 0x08, 0x7f, 0x45, 0xf4, 0x7c, 0x1a, 0x8b, 0x7c, 0xb3, 0x19, 0x66, 0x5f, 0x02, 0xe0, 0x1c, 0xeb, 0x1f, 0xec, 0x53, 0xc6, 0x3b, 0xd3, 0xd1, 0x43, 0xdf, 0x4f, 0x20, 0x45, 0x12, 0x2e, 0xbe, 0x6a, 0x25, 0xb4, 0x3d, 0x21, 0xef, 0x01, 0x7f, 0x0a, 0xb5, 0x3a, 0x39, 0x2b, 0xf1, 0x1a, 0xd1, 0x30, 0x59, 0x39, 0x77, 0xe9, 0x27, 0x0f, 0x66, 0x53, 0x56, 0x46, 0xa2, 0x61, 0x6c, 0x28, 0xac, 0xd5, 0x69, 0xc8, 0x47, 0x47, 0xc2, 0x35, 0xd5, 0x74, 0x42, 0xc9, 0x27, 0x3d, 0xcc, 0x48, 0x75, 0x02, 0x37, 0x58, 0x6d, 0x63, 0xd8, 0xaa, 0x14, 0xde, 0xca, 0x9e, 0x34, 0xa3, 0xe4, 0xcb, 0x90, 0x38, 0x43, 0xbc, 0x66, 0x2c, 0x60, 0x37, 0x9c, 0xb5, 0x63, 0x45, 0xec, 0x86, 0x5e, 0x71, 0xdb, 0xc4, 0x6e, 0x3e, 0x46, 0x42, 0xf1, 0x9a, 0x02, 0xf0, 0x48, 0xa8, 0x1b, 0x76, 0x0b, 0x81, 0x55, 0x5e, 0xb4, 0x15, 0x1b, 0xfc, 0x47, 0x3b, 0xc3, 0x5c, 0xe6, 0xfd, 0x58, 0x0c, 0x46, 0x8d, 0xec, 0xfe, 0x7d, 0xe1, 0xbf, 0xb3, 0x03, 0xec, 0xb4, 0xbd, 0x0f, 0x34, 0x33, 0x93, 0x1d, 0x6d, 0x5a, 0x7d, 0x1f, 0x7f, 0x7b, 0xb8, 0xed, 0x53, 0xe9, 0xb6, 0x6d, 0xce, 0x88, 0x16, 0x52, 0xb9, 0x08, 0x97, 0x45, 0x16, 0x3d, 0xe4, 0x2f, 0xcd, 0x28, 0x2f, 0xbe, 0x07, 0xa3, 0xa4, 0xa8, 0xb5, 0x85, 0x4f, 0xa6, 0x5b, 0x85, 0xdc, 0xd8, 0xc5, 0x13, 0x15, 0x42, 0x03, 0xac, 0x69, 0xd4, 0x1e, 0x49, 0x81, 0x6e, 0x5d, 0x2e, 0xd1, 0xe7, 0xab, 0xd1, 0x5b, 0x31, 0x97, 0x66, 0x31, 0xf3, 0xaa, 0x75, 0x66, 0xbb, 0x78, 0xda, 0xd7, 0xc0, 0x2b, 0xd3, 0xcd, 0x5c, 0x7f, 0x75, 0x1a, 0x95, 0x94, 0xac, 0x13, 0xf5, 0x3b, 0xa0, 0x35, 0x64, 0xbc, 0x74, 0xc1, 0x5e, 0xce, 0x22, 0x5a, 0xe4, 0x44, 0x8d, 0x07, 0xf4, 0x4b, 0x9b, 0x72, 0x35, 0x05, 0xe8, 0x4b, 0xa7, 0xac, 0x62, 0xd7, 0x32, 0x52, 0x6b, 0x55, 0x90, 0x0a, 0x98, 0xad, 0xb3, 0xba, 0x5a, 0x49, 0x25, 0x4a, 0xbd, 0x38, 0x6d, 0x71, 0xeb, 0xad, 0x7a, 0x1f, 0x4d, 0x7f, 0xe5, 0x3c, 0x42, 0xa4, 0x52, 0xc0, 0x13, 0x51, 0x06, 0xe8, 0x1d, 0x1d, 0xf0, 0x4a, 0xfd, 0xc6, 0x10, 0x25, 0x09, 0xef, 0xdb, 0x83, 0xf8, 0x47, 0xf6, 0x20, 0xaa, 0xa8, 0x1e, 0x54, 0xfa, 0x54, 0x85, 0x67, 0x17, 0xec, 0xd4, 0x60, 0x39, 0xb5, 0xdb, 0x8a, 0x1e, 0x66, 0x3a, 0x65, 0x33, 0x0b, 0x23, 0x0e, 0x25, 0xb3, 0x02, 0x42, 0xc8, 0x19, 0x5e, 0x56, 0xe4, 0x05, 0xed, 0xed, 0x89, 0xb2, 0xa7, 0xb0, 0xee, 0xae, 0x60, 0x67, 0x0f, 0x49, 0x48, 0x8d, 0x1e, 0xaa, 0x6e, 0x3e, 0x8d, 0x80, 0xf5, 0x0e, 0xad, 0x9c, 0x15, 0x5b, 0xbf, 0xb4, 0xee, 0x88, 0x4e, 0x8e, 0x2c, 0x24, 0x31, 0xd4, 0xc2, 0x5b, 0x02, 0xe7, 0xa3, 0x56, 0x3a, 0x4f, 0x32, 0xd2, 0xa7, 0x2c, 0x9e, 0x95, 0x3e, 0x79, 0xe1, 0x0c, 0x6d, 0xa2, 0x06, 0xf0, 0x92, 0x38, 0x7a, 0xf1, 0xec, 0x47, 0x27, 0xc6, 0xb4, 0xc1, 0xc8, 0x8e, 0x75, 0x3f, 0xb7, 0xd1, 0x10, 0x67, 0xae, 0x62, 0x7e, 0xa2, 0x97, 0x64, 0x96, 0x93, 0x82, 0x9e, 0x4a, 0x45, 0xe2, 0x69, 0x87, 0x98, 0x93, 0xc9, 0x48, 0x92, 0x5a, 0x9e, 0x6a, 0xa0, 0xc4, 0xa7, 0x86, 0xbe, 0xd3, 0x26, 0x42, 0x5c, 0x1f, 0xe7, 0xa9, 0x06, 0xf5, 0x92, 0x4c, 0x3d, 0x4d, 0x9c, 0x78, 0x19, 0xcb, 0x60, 0x9c, 0x9f, 0x35, 0xd7, 0x25, 0xf3, 0xd1, 0x6c, 0xe7, 0xf9, 0x0c, 0xf3, 0x56, 0x9c, 0x85, 0xb2, 0x96, 0x06, 0x23, 0xc9, 0x89, 0x36, 0x92, 0xec, 0x18, 0x23, 0xb1, 0x43, 0x39, 0x8c, 0x64, 0x68, 0x72, 0x03, 0x8c, 0x66, 0xa0, 0x0d, 0xd8, 0xd8, 0x20, 0x12, 0x4e, 0x3d, 0xc4, 0x38, 0x86, 0x44, 0x52, 0x6f, 0xc3, 0x4a, 0x4d, 0x92, 0xf3, 0xb4, 0x04, 0x46, 0xbe, 0xba, 0x26, 0x8f, 0x70, 0x68, 0x15, 0x1d, 0xe7, 0x5b, 0x14, 0xcc, 0xb6, 0xa1, 0xf1, 0x11, 0x46, 0x12, 0xf1, 0xe5, 0xce, 0xe3, 0x71, 0x30, 0xf7, 0x14, 0xb6, 0x05, 0x0e, 0x75, 0x96, 0x19, 0xf7, 0xc2, 0xa4, 0x52, 0x58, 0x9b, 0x87, 0x90, 0x58, 0x23, 0xe0, 0x6f, 0x62, 0x86, 0x2f, 0x12, 0xe4, 0x71, 0xc2, 0x6f, 0x87, 0xcd, 0xfd, 0xe2, 0x88, 0x95, 0xda, 0xf5, 0x32, 0xd8, 0x65, 0x16, 0x29, 0xac, 0x0a, 0x32, 0x85, 0x01, 0x3d, 0x3a, 0x3a, 0x64, 0x28, 0xeb, 0x1b, 0x21, 0x3b, 0x8c, 0x27, 0xd9, 0x30, 0x86, 0x74, 0x69, 0x96, 0x04, 0x5e, 0x96, 0x9e, 0xa0, 0x33, 0x03, 0x07, 0x9a, 0xbb, 0x29, 0xce, 0xde, 0xc0, 0xa3, 0x7f, 0x66, 0x94, 0xca, 0xef, 0xf2, 0x71, 0xb5, 0x3d, 0xb0, 0x58, 0x58, 0xf7, 0x01, 0x09, 0xb6, 0x2b, 0xa8, 0x9c, 0x82, 0x81, 0x7e, 0x8d, 0x36, 0xc9, 0xa4, 0x68, 0x31, 0x3d, 0x0e, 0xb0, 0xfe, 0xb1, 0x46, 0x63, 0x91, 0x82, 0x90, 0x94, 0x7e, 0xf1, 0x24, 0x09, 0xcb, 0x9d, 0x61, 0xae, 0x89, 0x87, 0x52, 0xd8, 0xb8, 0x0c, 0xc0, 0x4d, 0xc9, 0xfa, 0x24, 0x66, 0x5b, 0x72, 0x69, 0x46, 0x62, 0x7a, 0xc2, 0xf1, 0x42, 0x12, 0x21, 0x95, 0x0a, 0x4d, 0xba, 0x4c, 0x5e, 0x31, 0x31, 0xfa, 0xec, 0x5c, 0xe3, 0x40, 0x12, 0x6e, 0x5b, 0xe8, 0x90, 0xd9, 0x12, 0xed, 0xb3, 0xa0, 0xc5, 0xc2, 0xd5, 0x43, 0x38, 0x3c, 0xb9, 0x70, 0xb5, 0x03, 0x6b, 0x5b, 0x8d, 0x93, 0xd2, 0x85, 0xf5, 0x3f, 0x8c, 0x9e, 0x30, 0xa8, 0x98, 0x04, 0x14, 0x87, 0x72, 0x92, 0xa7, 0xaa, 0x43, 0x07, 0x0a, 0x27, 0x9f, 0xfc, 0x10, 0x38, 0xa8, 0x02, 0xe1, 0xa4, 0x26, 0x5e, 0xbd, 0x1a, 0xa8, 0xc8, 0x02, 0xe1, 0xa8, 0xc5, 0x62, 0x49, 0x82, 0xf0, 0x38, 0xc0, 0xe1, 0x09, 0x64, 0xe2, 0x99, 0xb3, 0xb3, 0xa9, 0x2d, 0x8e, 0x83, 0x3c, 0xf1, 0x98, 0xc0, 0x99, 0xb5, 0xb0, 0x8a, 0x68, 0xd2, 0x36, 0xdc, 0xa5, 0xda, 0x31, 0x44, 0x62, 0xcb, 0x8e, 0xde, 0x80, 0xdc, 0xdd, 0x28, 0x07, 0x91, 0x36, 0x64, 0x07, 0x6d, 0x40, 0x0e, 0x50, 0xe1, 0xe0, 0x37, 0x30, 0x8e, 0xcf, 0xc3, 0xca, 0x13, 0x69, 0x2d, 0xde, 0x95, 0x4b, 0x21, 0xc6, 0x0e, 0xfa, 0x1d, 0x5a, 0x1d, 0x36, 0xf1, 0x36, 0x7a, 0x9d, 0x4a, 0xf5, 0xb1, 0x83, 0xe9, 0x35, 0x70, 0x96, 0x12, 0x33, 0xbd, 0x8a, 0x82, 0x18, 0xfe, 0xc0, 0x7f, 0xa6, 0xd0, 0xbb, 0x41, 0xf0, 0xe5, 0x1c, 0x7a, 0x95, 0x61, 0x27, 0xd2, 0x5b, 0x90, 0xe2, 0xf4, 0x1e, 0x03, 0x48, 0x20, 0xb5, 0x37, 0x78, 0x18, 0xd3, 0xef, 0x93, 0x4f, 0x42, 0x84, 0xa3, 0x91, 0xbe, 0x05, 0x31, 0x91, 0xf9, 0x44, 0x0f, 0xb5, 0x39, 0x68, 0x1a, 0x43, 0x7c, 0xa2, 0xf2, 0x89, 0x3a, 0x22, 0x1f, 0x56, 0xa7, 0xe7, 0x96, 0x10, 0x6b, 0x8e, 0xd0, 0xe8, 0x94, 0xad, 0xab, 0xb2, 0x15, 0x4a, 0x4d, 0x3e, 0x11, 0x16, 0x93, 0xad, 0xb2, 0xfa, 0xe3, 0xbd, 0xf9, 0x8a, 0x48, 0x9f, 0x85, 0x68, 0x4b, 0xd3, 0xb2, 0x1e, 0xea, 0x6e, 0x1f, 0x05, 0xe9, 0x2d, 0x74, 0xa5, 0x17, 0x0c, 0xa3, 0x48, 0x5f, 0x35, 0x60, 0x6c, 0x40, 0x24, 0xc9, 0xb0, 0x98, 0xa4, 0x49, 0xe6, 0xe2, 0x76, 0x17, 0xf8, 0x9d, 0xae, 0xd8, 0x05, 0x51, 0xce, 0xbc, 0x22, 0x9d, 0x79, 0x15, 0xb7, 0xcc, 0x0b, 0x72, 0x81, 0x78, 0x71, 0xf5, 0x84, 0x7c, 0xbc, 0x77, 0x2c, 0x91, 0x46, 0x16, 0x4b, 0xe6, 0x9b, 0x8f, 0xc6, 0x3d, 0x66, 0x21, 0x21, 0xb4, 0xf4, 0xc7, 0x5d, 0x75, 0xe8, 0x04, 0x35, 0x92, 0x59, 0x20, 0x5f, 0x00, 0x3d, 0xe7, 0xcb, 0x46, 0x7a, 0x10, 0x97, 0x01, 0xeb, 0xe8, 0x41, 0x5e, 0x9e, 0x8e, 0x4f, 0xd3, 0x6c, 0x95, 0xf6, 0x5b, 0x40, 0x4b, 0x1c, 0xe4, 0x12, 0x60, 0xa6, 0x6a, 0x9c, 0xeb, 0x02, 0x50, 0xe4, 0x1b, 0x29, 0xdd, 0x26, 0xe1, 0xab, 0x28, 0x8e, 0xf3, 0x21, 0x06, 0x60, 0x3e, 0x0c, 0xd0, 0x7e, 0xfb, 0xa4, 0x06, 0xa1, 0x89, 0x5e, 0x55, 0x43, 0x09, 0xbb, 0x3c, 0x36, 0x80, 0x74, 0x31, 0xf9, 0x56, 0xd9, 0xa0, 0x9d, 0x57, 0x37, 0xcb, 0x9e, 0x70, 0xf1, 0x4c, 0xba, 0x35, 0x4a, 0x4f, 0xd2, 0xe6, 0x22, 0xf7, 0x02, 0x2d, 0x17, 0x82, 0xf1, 0xc6, 0xe6, 0xc7, 0xda, 0x9c, 0x35, 0x84, 0x96, 0x50, 0xc3, 0x9c, 0xc7, 0x3a, 0x3e, 0xab, 0x68, 0x51, 0x47, 0xd3, 0x00, 0x5a, 0xbf, 0x83, 0x85, 0x7d, 0x17, 0xee, 0x7f, 0xcc, 0x46, 0x34, 0x54, 0x9e, 0x53, 0xab, 0x89, 0x07, 0x6c, 0xa7, 0xa0, 0x36, 0x92, 0xce, 0xd0, 0xfd, 0xb4, 0x44, 0xb6, 0x2f, 0x58, 0x87, 0x29, 0x72, 0x63, 0x44, 0x2a, 0x56, 0xd3, 0x5f, 0x9d, 0xec, 0x5c, 0x6b, 0x20, 0xd7, 0x2e, 0x91, 0x98, 0xb3, 0x0f, 0xb4, 0x78, 0x7e, 0xec, 0x80, 0xbf, 0x91, 0xb3, 0xcd, 0x99, 0xf3, 0xe2, 0x7d, 0x50, 0xb7, 0xff, 0x38, 0x67, 0x7a, 0x9a, 0xeb, 0xdc, 0x41, 0xdb, 0x7c, 0xc7, 0x9c, 0x36, 0xb7, 0x75, 0x0b, 0xdf, 0xc9, 0xa4, 0xa7, 0xec, 0xc5, 0x90, 0x0b, 0x47, 0x7f, 0xd5, 0x7c, 0xbe, 0x6e, 0x26, 0x9f, 0x63, 0xf2, 0x7d, 0xd0, 0x4c, 0xc2, 0x78, 0x9e, 0xd1, 0x5c, 0x5e, 0x6c, 0xad, 0xb2, 0x41, 0xce, 0x03, 0x80, 0xe6, 0xca, 0x27, 0x81, 0xae, 0x7d, 0x84, 0x18, 0x98, 0x61, 0xb9, 0x90, 0x2f, 0x5a, 0xdc, 0x6d, 0xb9, 0x1f, 0x90, 0xec, 0xda, 0x0f, 0x40, 0x2b, 0xaa, 0x4b, 0x8c, 0x5e, 0x46, 0xe8, 0x8d, 0xdb, 0x07, 0x44, 0x7b, 0xa6, 0x13, 0x80, 0xd2, 0x2d, 0x93, 0x50, 0x29, 0x04, 0x0d, 0x95, 0xdf, 0x77, 0xa3, 0x76, 0xef, 0x16, 0x87, 0x42, 0x8d, 0x88, 0xd2, 0x06, 0x33, 0x15, 0xe6, 0xd1, 0x4e, 0x75, 0x3c, 0xae, 0x4a, 0x12, 0xd4, 0x6f, 0xdb, 0x24, 0xe6, 0x83, 0xa7, 0x14, 0xae, 0x9d, 0xab, 0x33, 0x6e, 0x3b, 0x57, 0xde, 0xe2, 0x6e, 0xad, 0xca, 0xcb, 0x8d, 0x93, 0xc5, 0x7d, 0x22, 0x17, 0x27, 0x6b, 0x5b, 0x43, 0x02, 0x1d, 0x45, 0x7d, 0x61, 0xfc, 0x17, 0xc6, 0x98, 0xa0, 0x57, 0x80, 0xb6, 0x3d, 0x1f, 0x91, 0x1c, 0xda, 0x1f, 0x5b, 0x91, 0x28, 0xff, 0x6c, 0x7e, 0x6d, 0xc3, 0x13, 0x45, 0x2f, 0xba, 0xdf, 0x5a, 0x0f, 0x2b, 0xec, 0x19, 0x17, 0x4f, 0x1e, 0x88, 0x76, 0xda, 0x17, 0xed, 0x73, 0xd5, 0x36, 0x80, 0xd6, 0x16, 0x25, 0xe8, 0x02, 0x53, 0x37, 0xff, 0x76, 0x86, 0xe6, 0x0a, 0x78, 0x07, 0x4a, 0xff, 0x96, 0x2d, 0xc9, 0x8e, 0x3b, 0x36, 0x48, 0xdf, 0x6a, 0x34, 0xf1, 0x5a, 0x3d, 0xd5, 0xd9, 0xbb, 0xb5, 0x10, 0xe6, 0x12, 0xcc, 0x1d, 0x9d, 0x75, 0x47, 0xbe, 0x34, 0x61, 0xb2, 0x48, 0x37, 0x3a, 0x4b, 0xf3, 0x47, 0x33, 0xf0, 0x82, 0xd9, 0x64, 0xfe, 0x78, 0xc7, 0x58, 0x05, 0xcc, 0x2b, 0x5d, 0x29, 0xb4, 0x65, 0xa9, 0x94, 0xe6, 0xea, 0x01, 0x39, 0x26, 0x69, 0xe8, 0x78, 0x27, 0xcb, 0x99, 0x8d, 0xdb, 0x78, 0x18, 0x2b, 0x16, 0xa0, 0x90, 0x13, 0xc4, 0x3a, 0x36, 0x8f, 0x14, 0xa0, 0x3a, 0xcf, 0x38, 0xc7, 0x0a, 0x7e, 0xcd, 0x67, 0xdb, 0x92, 0x1c, 0x76, 0x71, 0x9c, 0x39, 0x9e, 0x72, 0x93, 0xe2, 0x22, 0xa9, 0x9b, 0x6f, 0xd5, 0xd3, 0x54, 0xad, 0xad, 0xc6, 0x20, 0xa6, 0x1b, 0x27, 0xd4, 0xd9, 0x3e, 0x84, 0x95, 0xa4, 0xd3, 0x1f, 0xa7, 0xee, 0x36, 0x12, 0xf1, 0x14, 0x7b, 0x23, 0x8c, 0x44, 0x71, 0x37, 0xe7, 0x1d, 0xb6, 0x9b, 0x83, 0xfb, 0x16, 0xb8, 0x52, 0x66, 0x6a, 0xd8, 0x6a, 0xe9, 0x92, 0x03, 0x45, 0x69, 0xd9, 0x66, 0x49, 0xd0, 0x33, 0x5a, 0xdc, 0x87, 0x30, 0x33, 0xed, 0x9b, 0x68, 0xd7, 0x8e, 0xc8, 0xc0, 0x16, 0xe7, 0x99, 0xea, 0x66, 0x09, 0x2e, 0x26, 0xe9, 0x6f, 0xba, 0x8f, 0xd6, 0x75, 0x7a, 0x53, 0x10, 0x69, 0xde, 0x76, 0x2e, 0x8f, 0x09, 0x66, 0xca, 0xa1, 0x26, 0x30, 0x9f, 0x42, 0x56, 0xb8, 0x4e, 0x71, 0xe3, 0x69, 0x36, 0x38, 0x79, 0x1a, 0x94, 0x43, 0x12, 0x79, 0x1a, 0xe0, 0x58, 0xd3, 0xd8, 0x5e, 0x01, 0xe3, 0x6a, 0x5c, 0x54, 0x26, 0x21, 0x8b, 0xbb, 0xc7, 0x43, 0xe9, 0x9c, 0x75, 0xd1, 0xb5, 0xac, 0x0b, 0x5a, 0xfc, 0xbd, 0x4f, 0x0e, 0x4b, 0xe9, 0x90, 0x53, 0xe9, 0x3e, 0x83, 0xed, 0x03, 0x2a, 0xb5, 0x1f, 0xdf, 0x3d, 0x07, 0x56, 0x72, 0xa4, 0x6b, 0x95, 0xd4, 0x36, 0xaf, 0xba, 0x63, 0x19, 0x94, 0x3a, 0xcc, 0x02, 0xf4, 0x00, 0xe4, 0xa7, 0x91, 0xa3, 0xc5, 0xdb, 0x72, 0x6d, 0x39, 0xcb, 0x43, 0x41, 0x7a, 0x15, 0x0b, 0xee, 0x79, 0xa0, 0x64, 0x97, 0xd1, 0x4f, 0x94, 0x97, 0xba, 0xbd, 0x8f, 0xce, 0x3d, 0x29, 0xf3, 0x47, 0x81, 0xa7, 0x58, 0x91, 0x7f, 0xeb, 0x1c, 0x51, 0x4e, 0xf5, 0x9c, 0x43, 0x44, 0xce, 0x78, 0xb4, 0x28, 0x03, 0x49, 0x88, 0xcf, 0x33, 0x1a, 0x51, 0xd7, 0xd4, 0x5e, 0xc6, 0x8b, 0x9a, 0xcb, 0x8b, 0xd9, 0xce, 0xd9, 0x2b, 0x0e, 0xb5, 0x4b, 0x87, 0xd4, 0x46, 0xf7, 0xce, 0x65, 0x6c, 0xa7, 0x2c, 0x9f, 0xed, 0x9d, 0x87, 0xf0, 0xe1, 0x5a, 0x3c, 0x69, 0xcc, 0x85, 0x11, 0x9e, 0x43, 0xd4, 0xf0, 0x04, 0x46, 0x78, 0x05, 0xb1, 0x8e, 0x71, 0xc3, 0x82, 0x66, 0x6d, 0x05, 0xdf, 0x85, 0xc5, 0xd7, 0xab, 0x2b, 0xf8, 0x00, 0x76, 0xdd, 0x85, 0xbf, 0xc1, 0x76, 0xdd, 0x65, 0x7f, 0x73, 0xd7, 0xbd, 0x6d, 0xf9, 0x12, 0x58, 0x4b, 0xc4, 0x3d, 0x76, 0x3c, 0x7f, 0x75, 0x93, 0x25, 0x51, 0xfd, 0xc7, 0xb2, 0x24, 0xb5, 0xd6, 0x1f, 0xfb, 0xf6, 0x05, 0x5e, 0xc0, 0xaa, 0x67, 0x3a, 0x36, 0x90, 0x5f, 0x38, 0xe1, 0x92, 0x7f, 0x55, 0x90, 0x22, 0x69, 0xd5, 0x42, 0xbb, 0x9a, 0x5a, 0x84, 0x25, 0xd2, 0x4a, 0x46, 0x89, 0xc1, 0x8a, 0x8f, 0xf4, 0x1f, 0x3c, 0x99, 0x48, 0xf5, 0x53, 0x88, 0x74, 0x5c, 0x44, 0x18, 0xb4, 0x08, 0x94, 0x31, 0x22, 0x8f, 0xa8, 0x81, 0x5b, 0xd3, 0x23, 0x27, 0x09, 0xfc, 0x92, 0x8c, 0x7a, 0x89, 0xf1, 0x51, 0xd2, 0xbd, 0x69, 0x69, 0x26, 0x1f, 0x00, 0xd4, 0x8e, 0x5c, 0x69, 0x26, 0x39, 0x0e, 0x05, 0xfc, 0x0a, 0xf0, 0x4c, 0x67, 0xb2, 0x24, 0xd6, 0x57, 0x12, 0x53, 0x9c, 0xd1, 0xc7, 0x1d, 0x4f, 0xc4, 0x00, 0x39, 0xb9, 0x09, 0x30, 0x57, 0xa4, 0x0c, 0xb0, 0x5d, 0x00, 0x7d, 0x77, 0xcf, 0xf9, 0x2e, 0x8a, 0xe4, 0x0f, 0x8f, 0x0a, 0x25, 0x21, 0x85, 0x44, 0xea, 0x9f, 0x28, 0x9e, 0x7e, 0xa9, 0x5a, 0xcc, 0x13, 0xe8, 0x5b, 0x12, 0x69, 0xfd, 0x32, 0x63, 0x8a, 0x31, 0x9e, 0x44, 0xe3, 0x39, 0x05, 0x93, 0xb4, 0x4e, 0x30, 0xda, 0xc4, 0x99, 0x01, 0x98, 0x5b, 0x9c, 0xed, 0x03, 0x61, 0x16, 0x24, 0x38, 0xdb, 0x44, 0xd4, 0xbe, 0x91, 0x6c, 0x5e, 0x6f, 0x1e, 0x9b, 0xbf, 0x24, 0x11, 0x73, 0x30, 0xc9, 0x44, 0x1a, 0x63, 0x8f, 0x79, 0x53, 0x7c, 0x61, 0xda, 0x9f, 0xe5, 0x95, 0xfe, 0x1f, 0xe4, 0x15, 0x25, 0xcd, 0x88, 0xcf, 0x23, 0x92, 0xbe, 0xeb, 0xe3, 0x0b, 0x01, 0x27, 0x40, 0x0f, 0x87, 0x40, 0x0b, 0x76, 0x89, 0x91, 0x5a, 0xbf, 0x42, 0x2d, 0x04, 0x13, 0xd9, 0x5c, 0x61, 0x0f, 0x60, 0x74, 0x2b, 0x91, 0xa0, 0x07, 0xcf, 0x85, 0x10, 0xaa, 0x6a, 0xe2, 0x7b, 0x9b, 0x49, 0x17, 0x94, 0x66, 0xa2, 0x78, 0x09, 0x72, 0x4c, 0xdd, 0x7c, 0xc3, 0x47, 0x27, 0xe2, 0xce, 0x5d, 0xbd, 0xe3, 0x89, 0xa6, 0x37, 0x5d, 0x77, 0xa9, 0x9c, 0xa2, 0x01, 0x4b, 0x44, 0xa5, 0x60, 0xa9, 0xbc, 0x8e, 0x31, 0x81, 0x98, 0xa8, 0x14, 0x6c, 0xe4, 0xb8, 0x86, 0xe3, 0xb3, 0xd5, 0xf1, 0x54, 0x66, 0xdb, 0x59, 0x36, 0x9d, 0xb3, 0x6c, 0xb1, 0x50, 0x92, 0xad, 0x96, 0xb1, 0x39, 0xa6, 0x02, 0xe8, 0x53, 0xe8, 0x4f, 0xe8, 0xd3, 0xfb, 0xf0, 0xb8, 0x29, 0x89, 0xae, 0xf5, 0x5f, 0x15, 0x5a, 0xd6, 0x03, 0x85, 0xed, 0x88, 0x5d, 0x98, 0xd4, 0xdb, 0xe2, 0xcc, 0xf9, 0x8f, 0xf2, 0xfc, 0xa3, 0xfc, 0x5c, 0x75, 0x81, 0x9a, 0x5c, 0x4f, 0x4f, 0x9b, 0x0b, 0x38, 0x5d, 0x83, 0xf5, 0xc2, 0x7d, 0xba, 0xeb, 0xa2, 0x17, 0xed, 0x60, 0x18, 0x2d, 0x75, 0xf6, 0x00, 0x3c, 0xe7, 0x8e, 0x82, 0xfc, 0xb8, 0x99, 0x45, 0x3e, 0xbc, 0xbc, 0x48, 0xca, 0xf6, 0x0d, 0xd1, 0xce, 0x68, 0x48, 0xea, 0xf3, 0x96, 0x78, 0x9e, 0x34, 0xad, 0x67, 0x7b, 0xec, 0xb8, 0xe7, 0x60, 0x80, 0xb9, 0x63, 0x82, 0x31, 0x1d, 0xd9, 0x3c, 0x7f, 0x8a, 0x84, 0xaa, 0x35, 0xd8, 0x9e, 0x64, 0x79, 0x2c, 0xd2, 0x37, 0x06, 0x12, 0xb2, 0x3e, 0x75, 0x2c, 0x21, 0x95, 0xb1, 0xa9, 0xa8, 0xf1, 0xf2, 0x27, 0xb4, 0x8d, 0x85, 0xd1, 0x36, 0xa3, 0x5c, 0xa7, 0x5b, 0x61, 0xd8, 0xf2, 0xf5, 0x95, 0x74, 0x7d, 0x49, 0x05, 0x6e, 0xa6, 0xcb, 0x7c, 0x58, 0x97, 0x1f, 0x8b, 0x73, 0xd2, 0x3d, 0x5c, 0x18, 0x6b, 0x05, 0x51, 0x1e, 0xdf, 0xe2, 0x94, 0xc7, 0x77, 0xdb, 0x31, 0x0c, 0x6e, 0x4b, 0x56, 0xaa, 0x3e, 0x0d, 0xbd, 0xd5, 0x31, 0x19, 0x7c, 0x71, 0xcf, 0x90, 0x4a, 0x4f, 0x86, 0x87, 0xc1, 0x6c, 0x47, 0x9e, 0xa1, 0x80, 0xca, 0x1d, 0x00, 0xd7, 0xa0, 0x4d, 0x3e, 0x51, 0x4d, 0xbd, 0x29, 0x28, 0x29, 0x17, 0xeb, 0xcf, 0xac, 0x64, 0x12, 0x0f, 0xf4, 0xfd, 0x30, 0xdc, 0x75, 0x26, 0x5c, 0xd7, 0x62, 0x07, 0xbd, 0x8e, 0xed, 0xa0, 0xd7, 0x3b, 0xa5, 0xe8, 0x90, 0xcb, 0xa4, 0xd2, 0xd0, 0x39, 0x8c, 0xcf, 0xf4, 0x37, 0x12, 0x4d, 0x92, 0x51, 0x8f, 0x34, 0xe8, 0xb5, 0x65, 0xba, 0x64, 0xdc, 0x23, 0xb1, 0x6e, 0x47, 0xfe, 0xcd, 0x5a, 0x1d, 0x89, 0xfb, 0x2b, 0x3b, 0x60, 0x6d, 0xf7, 0x71, 0x4a, 0xd4, 0xe9, 0x92, 0xd4, 0xb8, 0x23, 0x6c, 0x1e, 0x78, 0x4b, 0x27, 0x68, 0xfc, 0x5b, 0xca, 0xef, 0x61, 0x49, 0x29, 0xdd, 0x96, 0x4c, 0x29, 0x82, 0x3f, 0x18, 0x49, 0x11, 0x80, 0x2d, 0x44, 0xa9, 0xa7, 0x7e, 0xc4, 0xe2, 0xb0, 0xbc, 0xaf, 0x49, 0xb2, 0x02, 0x5d, 0x66, 0xf4, 0xc2, 0x3d, 0xd2, 0x7e, 0xb0, 0x1a, 0x0e, 0x99, 0x0b, 0xa3, 0x20, 0xdf, 0x90, 0x1c, 0x3b, 0x96, 0x28, 0xf0, 0x54, 0x88, 0x4b, 0x06, 0x5c, 0x8a, 0x7b, 0x7b, 0x78, 0x46, 0x67, 0x62, 0xd2, 0xb1, 0xa2, 0x1d, 0xd7, 0x50, 0x68, 0xaf, 0xcd, 0xd7, 0xd4, 0x25, 0x24, 0x30, 0x94, 0x18, 0x8a, 0x24, 0x3b, 0xcb, 0xa9, 0x1f, 0x09, 0x99, 0x16, 0xd6, 0x1b, 0xca, 0x47, 0x2b, 0x50, 0x3a, 0x5d, 0x97, 0x2c, 0xd6, 0x45, 0xac, 0x17, 0xee, 0xf1, 0xe8, 0xe2, 0x9d, 0x52, 0xa3, 0xc0, 0x11, 0x86, 0x92, 0x30, 0x23, 0x31, 0x24, 0xc1, 0x18, 0x84, 0x32, 0x38, 0x6b, 0xd0, 0xbc, 0xcf, 0x03, 0x2d, 0x5b, 0x03, 0xb3, 0x14, 0x2d, 0xeb, 0x9d, 0xb5, 0xee, 0xe0, 0xa4, 0x40, 0xf9, 0x94, 0x47, 0x9a, 0x11, 0xeb, 0x01, 0xa7, 0xc9, 0xe9, 0xbd, 0x4f, 0x57, 0x88, 0xb5, 0x35, 0x7a, 0xba, 0xd7, 0xb1, 0x8f, 0x59, 0x38, 0x0b, 0x2d, 0x99, 0x4f, 0xe4, 0x5a, 0xef, 0xa1, 0x53, 0xa2, 0x31, 0xff, 0x9d, 0xc0, 0x75, 0x0a, 0xcf, 0xa8, 0x60, 0x85, 0xf3, 0x84, 0xba, 0xd4, 0x02, 0x25, 0x77, 0x1e, 0xf5, 0x42, 0xd5, 0x44, 0x23, 0xcb, 0x9a, 0x2c, 0xee, 0x63, 0x19, 0x12, 0x06, 0xde, 0x52, 0xfc, 0xae, 0xf3, 0x07, 0x3a, 0xf9, 0x7c, 0xe6, 0xcb, 0x46, 0xcf, 0xe8, 0x02, 0xe1, 0xac, 0x51, 0x29, 0x7e, 0x87, 0xd6, 0x1b, 0x5d, 0xdf, 0xc0, 0x7b, 0xc8, 0xb9, 0xbc, 0x65, 0x9f, 0x14, 0x11, 0x75, 0x98, 0x50, 0xcb, 0xfa, 0xa2, 0x84, 0x59, 0x7e, 0x53, 0xd9, 0x74, 0xe4, 0xe1, 0x11, 0x3b, 0xac, 0x93, 0x13, 0x2c, 0xb6, 0x3c, 0xa2, 0x2b, 0x54, 0x98, 0xc2, 0x84, 0xb3, 0x95, 0x36, 0xb4, 0x93, 0x0c, 0x58, 0x45, 0xd3, 0xdb, 0x46, 0xb4, 0xb0, 0x42, 0xeb, 0x90, 0xa3, 0x82, 0x19, 0xa3, 0x51, 0x9a, 0x05, 0xc1, 0x61, 0xc2, 0x74, 0x71, 0x4e, 0x16, 0x13, 0xe8, 0x2b, 0xad, 0x51, 0x82, 0xb2, 0x25, 0xea, 0x24, 0xeb, 0x18, 0x6c, 0xa1, 0x7e, 0xe1, 0x62, 0x0f, 0x5d, 0xdb, 0xd7, 0xbb, 0x4c, 0x10, 0xa8, 0x5c, 0x78, 0x30, 0xda, 0x62, 0x27, 0xab, 0x35, 0x49, 0x74, 0x0f, 0x08, 0xf2, 0x54, 0xc0, 0x3a, 0x40, 0x1e, 0x46, 0xff, 0xb5, 0xd8, 0xa7, 0xb8, 0xe2, 0xc3, 0xfa, 0xf4, 0x0e, 0xae, 0x5a, 0x91, 0xc4, 0x8e, 0xd2, 0x83, 0x32, 0x4a, 0x05, 0xe4, 0xa0, 0x6e, 0x06, 0x7b, 0xb3, 0xc6, 0x99, 0xe7, 0x7f, 0x3f, 0x76, 0xae, 0x99, 0x58, 0x99, 0x5a, 0xe6, 0x24, 0x71, 0xe5, 0x94, 0xac, 0x08, 0xa7, 0x3b, 0x0a, 0xe9, 0xa6, 0xb1, 0x44, 0x1e, 0x11, 0x0e, 0x71, 0x98, 0xac, 0xb0, 0x26, 0x09, 0x29, 0x64, 0x58, 0xb3, 0x71, 0x35, 0x97, 0x45, 0x60, 0x7d, 0xbd, 0x4d, 0x8a, 0x9a, 0xb1, 0xc4, 0x27, 0xc3, 0x1c, 0x6d, 0x36, 0x2a, 0x4d, 0x12, 0xb8, 0x56, 0x64, 0x98, 0x63, 0xcd, 0x46, 0x7f, 0x93, 0xd5, 0xa8, 0xa0, 0xd2, 0x4f, 0x38, 0x6f, 0x3e, 0x23, 0xb5, 0x24, 0x06, 0x47, 0x0b, 0xd5, 0x7f, 0x30, 0x30, 0x5d, 0x2e, 0xe7, 0xc9, 0x8b, 0x09, 0x30, 0x53, 0xb0, 0xc6, 0x48, 0x42, 0xb4, 0x46, 0xa6, 0xeb, 0x13, 0xd2, 0x4a, 0x7a, 0x28, 0xbe, 0x95, 0xcc, 0xa6, 0x87, 0x78, 0x06, 0x74, 0x0d, 0x6d, 0xce, 0x2b, 0x6b, 0xa6, 0xa6, 0x9c, 0x53, 0x86, 0xfc, 0x3b, 0x3b, 0x7d, 0xee, 0xd2, 0x2e, 0xd4, 0x83, 0x17, 0x3b, 0x79, 0xd4, 0x1b, 0x89, 0x29, 0xda, 0x48, 0x62, 0xc6, 0x91, 0x28, 0x68, 0xab, 0xe3, 0x33, 0x6d, 0x85, 0x24, 0x0a, 0xb8, 0xa0, 0x3c, 0x12, 0x44, 0x77, 0xe8, 0x90, 0x92, 0x08, 0x28, 0x91, 0xf0, 0x72, 0x1a, 0x12, 0x5b, 0x82, 0x23, 0x00, 0xd6, 0x7f, 0x0f, 0x68, 0x29, 0x1f, 0x28, 0xaf, 0xac, 0x04, 0xb5, 0x6e, 0xa5, 0x54, 0x32, 0x28, 0xd1, 0xfd, 0xa4, 0xc8, 0x10, 0xaf, 0x19, 0xea, 0x92, 0x0c, 0x4a, 0x70, 0xa4, 0x8a, 0xdf, 0xd8, 0x93, 0xd0, 0x26, 0x42, 0x04, 0x5a, 0xcf, 0x35, 0x20, 0x0f, 0xa1, 0x4e, 0x6f, 0xd1, 0xa6, 0x79, 0xd8, 0xa6, 0xb4, 0x1d, 0x25, 0x70, 0x0d, 0x6d, 0x1a, 0x61, 0x86, 0xe7, 0xd0, 0xa6, 0x91, 0x40, 0x17, 0x50, 0xfb, 0xea, 0xac, 0x45, 0x71, 0x97, 0xb5, 0x59, 0xaf, 0x06, 0x4f, 0x74, 0xa0, 0x26, 0xb1, 0x80, 0xe3, 0xcd, 0x48, 0x3d, 0xa2, 0x24, 0x68, 0x09, 0xc1, 0x13, 0xd5, 0xa3, 0x33, 0xd5, 0x16, 0x45, 0x0f, 0xc0, 0xc3, 0xbe, 0x8e, 0x48, 0x17, 0x1d, 0xeb, 0xe3, 0xa6, 0x97, 0xd5, 0xc5, 0x89, 0x39, 0x00, 0x6b, 0x04, 0xa4, 0x6e, 0x6e, 0x3a, 0x6e, 0xf9, 0x80, 0x04, 0x14, 0xdd, 0xe3, 0x2c, 0xdb, 0x57, 0x12, 0x45, 0xda, 0x5c, 0x2a, 0x15, 0x2b, 0x71, 0x74, 0xd9, 0xf8, 0x87, 0x1a, 0x48, 0x5a, 0xc2, 0x97, 0x8c, 0x23, 0x7c, 0x11, 0x95, 0xf2, 0x44, 0x7b, 0x25, 0xd9, 0xd9, 0x01, 0xf4, 0xca, 0xc7, 0x91, 0x45, 0x43, 0xa5, 0x3d, 0x8b, 0x4f, 0xa5, 0x57, 0xa3, 0x1c, 0x1c, 0x95, 0xfc, 0x44, 0x7f, 0xf4, 0x78, 0xdf, 0xd5, 0xde, 0x57, 0x4c, 0xdf, 0x1e, 0xa5, 0xb6, 0x20, 0x3d, 0xc8, 0x87, 0xb3, 0x7b, 0xad, 0xda, 0xd2, 0x4d, 0x3c, 0x21, 0x0f, 0x61, 0x5e, 0x4e, 0xf2, 0x48, 0x39, 0xf5, 0x72, 0x92, 0x27, 0xbc, 0x48, 0x94, 0xe3, 0x24, 0xbc, 0xac, 0xd4, 0x74, 0x72, 0xae, 0xeb, 0xb4, 0xc1, 0xed, 0x74, 0x5a, 0x28, 0x85, 0x19, 0xad, 0xb0, 0xcb, 0x61, 0x0d, 0xee, 0x44, 0x14, 0x70, 0xed, 0x43, 0xaf, 0x7d, 0x89, 0x8f, 0x6d, 0x8a, 0x63, 0x2c, 0xd7, 0x81, 0xf9, 0xfe, 0x1e, 0xc5, 0xfc, 0x7c, 0xcb, 0x3f, 0xfb, 0x59, 0xb8, 0x6b, 0x1f, 0xea, 0x6a, 0x05, 0xd1, 0x6e, 0xfa, 0x1a, 0xba, 0x9a, 0x99, 0x5d, 0xba, 0x64, 0xad, 0x74, 0x67, 0xb8, 0x3c, 0x46, 0xcb, 0x0c, 0x68, 0x21, 0xe9, 0x9b, 0xdf, 0xbc, 0x7a, 0xdd, 0x2b, 0xbb, 0x4f, 0x6b, 0xe6, 0x3e, 0xad, 0x31, 0x46, 0x8f, 0x47, 0x31, 0x6a, 0x5c, 0x3c, 0x7f, 0x90, 0xd9, 0xb5, 0x4c, 0xa6, 0x4f, 0xca, 0x68, 0xee, 0x28, 0xbc, 0xb3, 0xe9, 0x89, 0xdf, 0x88, 0x6a, 0x6b, 0x79, 0x84, 0x99, 0x7b, 0x39, 0xa1, 0xf2, 0xef, 0x6a, 0x97, 0x89, 0xd6, 0x0f, 0xa2, 0x5d, 0xe7, 0x6c, 0xda, 0x30, 0x37, 0xed, 0xc7, 0xa3, 0x2d, 0xd6, 0xc3, 0xa3, 0x6c, 0x3d, 0x3c, 0xe3, 0xd2, 0xb6, 0x17, 0xa5, 0xb2, 0xae, 0x14, 0xf9, 0x3b, 0x79, 0x6f, 0xe6, 0x17, 0x70, 0xbd, 0xc8, 0xbd, 0x91, 0x35, 0x2e, 0xee, 0xcd, 0x35, 0x4f, 0xb5, 0x66, 0x7a, 0x8e, 0x3c, 0x1f, 0x7a, 0x4b, 0x42, 0xfc, 0x45, 0x2e, 0x4e, 0xe7, 0x7b, 0xb2, 0x9c, 0x4b, 0xa0, 0x27, 0x4c, 0x54, 0x5e, 0x17, 0x39, 0x99, 0x7b, 0x56, 0xca, 0x55, 0xc3, 0x48, 0xb3, 0xc7, 0xb0, 0x93, 0xaa, 0x93, 0xec, 0xa4, 0xea, 0x3c, 0x97, 0x10, 0x9a, 0x26, 0xd4, 0xb9, 0xf1, 0x6c, 0xdb, 0x13, 0xaf, 0x0a, 0x47, 0xdd, 0xf8, 0xb6, 0x00, 0x68, 0x99, 0x84, 0x49, 0x90, 0x1a, 0x97, 0x60, 0xab, 0x74, 0xc8, 0x69, 0x2a, 0xcd, 0xe7, 0xbd, 0x22, 0x0f, 0x37, 0xc0, 0xfd, 0xbc, 0x97, 0x49, 0xeb, 0x86, 0x08, 0x9b, 0x5a, 0x4b, 0x16, 0x89, 0xf4, 0x90, 0x22, 0x02, 0x06, 0x82, 0x2f, 0xe5, 0x0f, 0xc4, 0xfe, 0xd3, 0xe3, 0x4c, 0xf8, 0xfd, 0x80, 0x65, 0x35, 0x09, 0xf8, 0x7b, 0xba, 0x70, 0x4c, 0x4a, 0x9b, 0xf2, 0x28, 0x30, 0x17, 0x91, 0x7e, 0xe5, 0x50, 0xcb, 0xda, 0x5a, 0xad, 0x26, 0xe8, 0x39, 0x40, 0x42, 0x8c, 0x92, 0xe2, 0x17, 0x93, 0x24, 0x3b, 0xca, 0x8d, 0x12, 0x7a, 0x2a, 0x4c, 0xcf, 0x5e, 0x7f, 0x47, 0x7a, 0x2d, 0x90, 0x9d, 0x36, 0x73, 0x50, 0x16, 0xa9, 0x31, 0x42, 0x21, 0x63, 0xef, 0x5d, 0xa7, 0x2a, 0xd6, 0x6a, 0x6a, 0xdf, 0x90, 0xee, 0x4d, 0x87, 0xc8, 0x5a, 0x5a, 0x17, 0xa0, 0xa7, 0xe9, 0x5c, 0xb1, 0x64, 0xca, 0x27, 0x0a, 0x85, 0x93, 0x43, 0x87, 0x51, 0x16, 0x82, 0xfa, 0x33, 0xa9, 0x9b, 0x1b, 0x2f, 0xd1, 0x51, 0x0c, 0xbc, 0xb3, 0x2d, 0x94, 0xf8, 0x0d, 0x67, 0xde, 0x6f, 0xd1, 0xbb, 0x0a, 0xb6, 0x01, 0x3d, 0x4b, 0x77, 0xe3, 0xea, 0x1b, 0x91, 0xbb, 0x0c, 0xa1, 0xbb, 0xe0, 0x52, 0xd1, 0xf2, 0x00, 0x93, 0xd0, 0xa0, 0xb5, 0xc2, 0x54, 0xb1, 0x37, 0x51, 0xeb, 0x44, 0xd9, 0x03, 0xf8, 0x5b, 0x19, 0xd0, 0xe0, 0xfe, 0xe2, 0xce, 0x3f, 0xea, 0xf0, 0x99, 0x7a, 0x50, 0x7e, 0xa6, 0xce, 0x6e, 0xa0, 0xbc, 0x11, 0x6a, 0xf8, 0x37, 0x60, 0x0b, 0xf8, 0x98, 0x49, 0x39, 0x4a, 0x93, 0xc1, 0x08, 0x55, 0xda, 0x88, 0xdb, 0x08, 0xf6, 0x01, 0xee, 0xfa, 0xa8, 0xc8, 0xfb, 0x10, 0x94, 0xb0, 0x54, 0x15, 0x20, 0x4f, 0x14, 0x50, 0xa0, 0x5c, 0x07, 0x2b, 0x57, 0xbe, 0xbc, 0x0a, 0xa8, 0xd0, 0x82, 0x4c, 0x57, 0x5a, 0xef, 0xe0, 0x4c, 0x47, 0x3f, 0x56, 0xac, 0x66, 0x4a, 0x5a, 0x33, 0x83, 0xe5, 0x7d, 0xb1, 0x95, 0x5d, 0x6d, 0x2b, 0x45, 0x9f, 0xb5, 0xf0, 0x5e, 0xed, 0x3e, 0x17, 0xef, 0xd4, 0xd3, 0x9a, 0x35, 0x6d, 0xff, 0x80, 0x28, 0xf8, 0x2c, 0x31, 0x4d, 0x7b, 0x5a, 0xcb, 0x14, 0xef, 0x6c, 0x76, 0xa6, 0x88, 0x33, 0xad, 0x45, 0x5b, 0xd1, 0x14, 0xef, 0xd4, 0xb4, 0x48, 0x71, 0x39, 0xa6, 0x08, 0xed, 0x8e, 0x29, 0x62, 0xbd, 0xc7, 0x38, 0x64, 0xce, 0x96, 0xfb, 0x83, 0x3e, 0x6a, 0xfa, 0xb2, 0xcd, 0x3e, 0xba, 0x63, 0x71, 0xd5, 0x24, 0xb4, 0x55, 0x4d, 0x68, 0x1f, 0xdd, 0xc9, 0x72, 0xef, 0xa3, 0x3b, 0x5a, 0xb1, 0x8f, 0xc4, 0xfe, 0xf9, 0x33, 0x59, 0x31, 0xeb, 0x8f, 0x26, 0x29, 0xc5, 0x33, 0x46, 0x12, 0x08, 0xef, 0x5d, 0xeb, 0x2c, 0xc4, 0xd1, 0x20, 0x4d, 0x9a, 0x72, 0xce, 0xac, 0xfc, 0x7b, 0x6b, 0x27, 0xe0, 0x0f, 0xb4, 0xcc, 0x42, 0xf7, 0x16, 0xa2, 0x8c, 0xa4, 0x53, 0xa4, 0x91, 0x74, 0x81, 0xfe, 0x12, 0x75, 0x95, 0x94, 0x0a, 0x19, 0xf1, 0x74, 0xc8, 0x0e, 0x8f, 0x21, 0xc1, 0xd0, 0x7b, 0x3e, 0x70, 0x27, 0x77, 0xc8, 0x6a, 0xc6, 0x90, 0x4e, 0xb6, 0xf8, 0x82, 0x00, 0x9b, 0xa5, 0xc0, 0x7f, 0x5d, 0x7c, 0xa1, 0x4f, 0x95, 0xe5, 0x29, 0x37, 0xcf, 0x50, 0xc8, 0xa1, 0x88, 0x78, 0x89, 0x49, 0xba, 0xb8, 0xe1, 0x25, 0xea, 0x7b, 0xbb, 0x93, 0x13, 0x37, 0x89, 0x27, 0xb6, 0x4c, 0x76, 0x45, 0xcb, 0xf6, 0x8c, 0x5c, 0x67, 0xae, 0x6e, 0xd4, 0x01, 0xc5, 0x3a, 0x12, 0x99, 0x38, 0x9b, 0x13, 0xf1, 0x54, 0x86, 0xc9, 0x88, 0xd0, 0x3d, 0x64, 0xa7, 0x16, 0x5a, 0xbb, 0x81, 0x8d, 0x4d, 0x35, 0x54, 0xb6, 0x51, 0xd1, 0xe6, 0x7b, 0x7f, 0x2a, 0xd9, 0x28, 0x73, 0x97, 0x60, 0x11, 0xdf, 0xbb, 0x49, 0x99, 0x50, 0xc9, 0x48, 0x0b, 0x8c, 0x4d, 0xa4, 0xa1, 0xa8, 0x17, 0x3c, 0xa4, 0x10, 0xe4, 0xbc, 0x22, 0x1d, 0x9e, 0xd9, 0x96, 0xd8, 0x6f, 0xb7, 0x91, 0x32, 0xea, 0xeb, 0x6d, 0x6e, 0x1a, 0xca, 0x34, 0xe0, 0x54, 0x54, 0x2a, 0xc2, 0xb5, 0x63, 0xa4, 0x29, 0x07, 0xbe, 0x5e, 0xc4, 0x7f, 0xf9, 0x22, 0xfe, 0x73, 0x93, 0x85, 0xd9, 0xef, 0x8e, 0xf9, 0xd0, 0x23, 0xb3, 0xbd, 0xb5, 0x5c, 0x4b, 0x4a, 0x1b, 0x78, 0x4e, 0x29, 0x6a, 0xcb, 0xff, 0xc1, 0xe9, 0x6b, 0x2e, 0xf3, 0x3a, 0xd5, 0xf2, 0xfc, 0x35, 0xb3, 0x0d, 0xad, 0x9c, 0x36, 0x76, 0x4b, 0x5c, 0x3b, 0x25, 0x57, 0x90, 0x7e, 0xd2, 0x33, 0x4d, 0x5e, 0x18, 0x5b, 0x09, 0x4c, 0x9b, 0x17, 0xdb, 0xde, 0x42, 0xb5, 0xbb, 0x23, 0xd9, 0xc9, 0x76, 0x81, 0xeb, 0x64, 0xdb, 0xd2, 0x92, 0x9a, 0xb3, 0xc4, 0x4f, 0x88, 0x3c, 0x3d, 0x97, 0x4f, 0x62, 0x52, 0x1c, 0xfe, 0x0e, 0x51, 0xb6, 0xbd, 0x1d, 0xb5, 0x70, 0x8f, 0xa7, 0x34, 0x06, 0x5e, 0x87, 0xbc, 0x58, 0x77, 0x2b, 0xf5, 0x85, 0xe5, 0x03, 0xa0, 0x60, 0xad, 0xad, 0x4a, 0xcf, 0x13, 0x5b, 0x9b, 0x97, 0xf7, 0x46, 0xe9, 0x3c, 0x05, 0xd3, 0x8e, 0x4d, 0x6c, 0x41, 0x09, 0xbc, 0x67, 0x8b, 0x77, 0x8c, 0x45, 0x3b, 0x9f, 0x55, 0xf0, 0x65, 0x36, 0xa6, 0xa1, 0x80, 0xd2, 0x88, 0xf3, 0xcf, 0x22, 0x9e, 0x2d, 0xdc, 0x23, 0x5a, 0x71, 0x57, 0xd4, 0x82, 0x65, 0xa4, 0x2b, 0x3d, 0x95, 0x69, 0x31, 0xc6, 0x03, 0xb5, 0x8a, 0x2b, 0xbd, 0x89, 0x69, 0xf6, 0xe4, 0xb3, 0xf5, 0x1e, 0x35, 0x7b, 0x34, 0xae, 0xf5, 0xbe, 0xa0, 0x59, 0x63, 0xfe, 0xee, 0x9e, 0xb4, 0xb9, 0xa5, 0x84, 0xea, 0xf6, 0xc4, 0x3a, 0xb5, 0x64, 0x45, 0xcf, 0x23, 0x6e, 0xfb, 0x72, 0x3a, 0x51, 0xdf, 0xd9, 0xb5, 0x2f, 0xe7, 0xef, 0x88, 0x6a, 0x21, 0x83, 0x10, 0xc1, 0x64, 0x10, 0xda, 0xd9, 0x75, 0x8c, 0x06, 0xf0, 0x72, 0xca, 0xac, 0xd2, 0x3b, 0xec, 0x45, 0x05, 0x57, 0xce, 0xab, 0xe9, 0xfe, 0xc1, 0x07, 0x40, 0x1d, 0xfd, 0xe9, 0xfa, 0x8f, 0x2b, 0xd3, 0xe0, 0xb9, 0xec, 0x0c, 0x93, 0xd2, 0x87, 0x80, 0x01, 0xcc, 0x65, 0x24, 0x16, 0xf0, 0xf8, 0x99, 0x99, 0xb8, 0x26, 0x20, 0x07, 0x64, 0xdd, 0x91, 0x30, 0x99, 0x8b, 0x47, 0xfe, 0x10, 0x69, 0x58, 0x71, 0x6f, 0x02, 0x29, 0xdd, 0x16, 0x52, 0x4f, 0x6e, 0x12, 0x00, 0xc0, 0xcf, 0xa4, 0xeb, 0xe3, 0xa9, 0x5e, 0x18, 0xc4, 0xa7, 0x63, 0x49, 0xca, 0xfb, 0xeb, 0xe3, 0x91, 0xee, 0x84, 0x72, 0x74, 0x41, 0x4d, 0x56, 0xe7, 0x89, 0x9f, 0x78, 0x6a, 0xcb, 0x3c, 0x0b, 0x9d, 0xd5, 0xc4, 0xeb, 0x73, 0x69, 0x2d, 0x7a, 0x10, 0x05, 0x9e, 0x37, 0xd2, 0x93, 0x46, 0x43, 0xe2, 0x15, 0x96, 0x2b, 0xfd, 0x1a, 0x3d, 0x84, 0x19, 0x81, 0xf1, 0x14, 0x4f, 0x86, 0xa1, 0xc1, 0x12, 0x45, 0xed, 0x4e, 0xf1, 0xe4, 0x17, 0x71, 0xb0, 0x7a, 0x60, 0x09, 0x71, 0x79, 0xcf, 0x29, 0x20, 0x91, 0x68, 0xd9, 0x15, 0x31, 0x4e, 0x3f, 0x94, 0x75, 0x80, 0x71, 0x41, 0xd3, 0x0f, 0x6c, 0xd6, 0x7a, 0x3b, 0x54, 0x48, 0x22, 0xfb, 0xe5, 0xc1, 0x88, 0x8c, 0x42, 0x4a, 0xa3, 0xe4, 0xea, 0x51, 0xd4, 0x1c, 0xd6, 0x84, 0xe3, 0x99, 0xf2, 0x40, 0xe8, 0x1f, 0x13, 0x27, 0x33, 0x24, 0x53, 0x0d, 0x40, 0x4b, 0x65, 0xb5, 0x06, 0xbf, 0x99, 0x7c, 0x61, 0xf2, 0x31, 0xe0, 0x00, 0xd4, 0x03, 0x4d, 0x46, 0x12, 0x05, 0x2d, 0x60, 0x24, 0x91, 0x40, 0xcd, 0x63, 0x1c, 0x95, 0x81, 0xe6, 0xcf, 0xbe, 0x1a, 0x2b, 0x9e, 0x25, 0xc3, 0x5a, 0xaf, 0x38, 0x0a, 0xe9, 0xab, 0x13, 0x69, 0xce, 0x72, 0xb1, 0x8c, 0x4e, 0x8d, 0x3c, 0xb4, 0x67, 0x1b, 0x2d, 0x95, 0x27, 0x08, 0x57, 0xad, 0x3b, 0xb9, 0x84, 0xf4, 0x0a, 0x4c, 0x21, 0x7c, 0x2d, 0x59, 0x11, 0x0b, 0x25, 0xb5, 0x3e, 0x5b, 0x77, 0xcf, 0xa8, 0x00, 0xfe, 0x51, 0x0a, 0xfc, 0x92, 0x1f, 0xac, 0x5a, 0x29, 0x4c, 0xbe, 0x5c, 0xd1, 0x32, 0x0d, 0xe4, 0x18, 0xd8, 0x6a, 0xb5, 0x02, 0xad, 0xa8, 0x59, 0x8b, 0x96, 0xdc, 0x33, 0xca, 0xac, 0x39, 0xf0, 0x9d, 0xcc, 0xe8, 0x87, 0x9a, 0x56, 0xd9, 0x5d, 0xd0, 0xda, 0x19, 0xf4, 0x95, 0x8f, 0x49, 0x52, 0xda, 0xae, 0x2e, 0xa7, 0x26, 0xee, 0x82, 0x59, 0x6e, 0x11, 0x6e, 0x9a, 0x2c, 0x03, 0xeb, 0xa8, 0x5e, 0x8d, 0xa9, 0x94, 0xf4, 0x25, 0xd6, 0xdd, 0xc0, 0x17, 0x18, 0xdc, 0x2c, 0xec, 0x36, 0xcd, 0xdb, 0x3d, 0x6f, 0x27, 0xcc, 0x5e, 0xc3, 0xd1, 0xa9, 0xea, 0x74, 0xea, 0x5d, 0x4b, 0x61, 0xf4, 0xa7, 0xfa, 0x12, 0x7e, 0xa8, 0x55, 0x85, 0xf9, 0xc6, 0xd5, 0x97, 0x4a, 0x0e, 0xed, 0x6c, 0xfd, 0x16, 0x73, 0x4b, 0x9f, 0x9a, 0x31, 0x07, 0x53, 0x2e, 0x92, 0x55, 0x4d, 0xb5, 0xaf, 0xa6, 0xab, 0xaa, 0xd2, 0x91, 0xd6, 0x8a, 0xbb, 0x69, 0x8b, 0x6f, 0xa4, 0x3c, 0x4e, 0x8c, 0xd9, 0xe8, 0xd7, 0x16, 0x8f, 0xa3, 0x8f, 0xa7, 0x14, 0xb8, 0x8b, 0xcf, 0x71, 0xc9, 0xbf, 0x74, 0x51, 0x27, 0xd1, 0xf6, 0x45, 0xfd, 0x09, 0xdd, 0xfd, 0x16, 0x0e, 0xe8, 0x4e, 0xd1, 0xdd, 0xb4, 0xb9, 0x54, 0x4e, 0x42, 0x19, 0x91, 0x43, 0x7c, 0x8c, 0xde, 0xa8, 0x07, 0x63, 0xf4, 0x36, 0x8a, 0x23, 0x2a, 0x10, 0x56, 0xcf, 0x28, 0xe6, 0xc5, 0x50, 0x56, 0x84, 0x76, 0x95, 0x48, 0xb3, 0x1c, 0xaa, 0x96, 0xc9, 0xa1, 0xa2, 0x0c, 0x20, 0xc9, 0x45, 0x4e, 0xc3, 0x45, 0x0b, 0xd2, 0x7d, 0xc5, 0xdb, 0x27, 0x19, 0x3f, 0xe0, 0xdc, 0xd1, 0x53, 0x01, 0x6e, 0x08, 0x04, 0x7e, 0x20, 0x98, 0x62, 0x89, 0x10, 0xb7, 0xbd, 0x2c, 0x55, 0x5b, 0x7b, 0x59, 0xb7, 0x57, 0xa7, 0xcd, 0x6d, 0xa6, 0x0f, 0x5c, 0xf2, 0x05, 0xb5, 0xd4, 0x97, 0x32, 0x9b, 0x9b, 0x88, 0x49, 0x23, 0xc2, 0xa8, 0xce, 0xb7, 0x42, 0xa9, 0x63, 0x14, 0xd6, 0x70, 0xb6, 0x4f, 0x5c, 0x67, 0x8f, 0xc4, 0xf9, 0x9a, 0x4f, 0x24, 0xd8, 0x0a, 0x92, 0x13, 0xd5, 0x88, 0x09, 0xd2, 0x71, 0xaf, 0x42, 0x51, 0x85, 0x1c, 0x8e, 0x88, 0xdd, 0xf2, 0x89, 0xd2, 0x89, 0x23, 0x90, 0xbe, 0x92, 0x68, 0x44, 0xfa, 0x4a, 0xe2, 0x83, 0xbb, 0x1e, 0x11, 0x06, 0xa2, 0x02, 0x0a, 0x2e, 0x00, 0xf5, 0x01, 0x71, 0x1c, 0xf4, 0x8b, 0x23, 0x26, 0x94, 0x48, 0xa0, 0xeb, 0x2b, 0x37, 0xf0, 0x67, 0xa1, 0x01, 0xa5, 0x7e, 0x5c, 0x5c, 0x8d, 0x6b, 0x57, 0x92, 0x7a, 0x85, 0xe1, 0x91, 0x3a, 0xb1, 0x91, 0x7c, 0x42, 0xf6, 0x49, 0xcd, 0xc2, 0x8b, 0xd4, 0x32, 0x54, 0x81, 0x7b, 0x0b, 0xfd, 0xb6, 0x91, 0x9d, 0x5a, 0xad, 0x76, 0xb5, 0x51, 0xab, 0xfd, 0xbe, 0x8d, 0xa2, 0x6c, 0xad, 0x3b, 0xe7, 0xd4, 0x2c, 0xab, 0x98, 0x29, 0xa6, 0x5f, 0x90, 0x4b, 0x80, 0x5e, 0x6c, 0x23, 0xf5, 0x2c, 0x9a, 0x7a, 0xca, 0x1f, 0xa5, 0xdd, 0xa2, 0xe4, 0xc1, 0xf7, 0xe1, 0x67, 0xe8, 0x81, 0xdf, 0x74, 0x69, 0x73, 0x79, 0x25, 0x52, 0x6a, 0xb8, 0x5a, 0xa3, 0x67, 0x1b, 0xda, 0x1f, 0x32, 0xb6, 0xbf, 0x18, 0xd2, 0xf6, 0x58, 0x90, 0xe6, 0x22, 0xb7, 0xd9, 0x72, 0x2c, 0xdc, 0x3a, 0x40, 0xcb, 0x12, 0xfb, 0x9f, 0x8e, 0x85, 0x5b, 0xcb, 0xc5, 0x7d, 0x4d, 0xe7, 0x38, 0xb8, 0x9f, 0xe2, 0x12, 0xbd, 0x2c, 0xc5, 0xc6, 0xe8, 0xc3, 0x44, 0xea, 0x48, 0xe3, 0x4e, 0x1d, 0x59, 0x9a, 0xbd, 0x2c, 0x51, 0x1e, 0x6a, 0x1a, 0xfa, 0x2d, 0x64, 0xb4, 0x51, 0x1d, 0xb5, 0x55, 0x29, 0xae, 0xda, 0xcd, 0xab, 0xad, 0x59, 0x87, 0xef, 0x0e, 0x3c, 0x86, 0xf6, 0x0f, 0xfc, 0x35, 0x89, 0x22, 0x3d, 0x8a, 0x2b, 0xb5, 0x65, 0x01, 0x7a, 0xee, 0x01, 0x08, 0x41, 0x5b, 0x08, 0x74, 0xcf, 0x3a, 0xa2, 0x08, 0x35, 0xf4, 0x75, 0x68, 0x55, 0x17, 0x42, 0x83, 0x18, 0x97, 0x52, 0x54, 0x16, 0x2a, 0xa7, 0x77, 0x5b, 0xeb, 0x37, 0x78, 0x0a, 0x50, 0xee, 0x0b, 0xd9, 0xaa, 0xed, 0xed, 0xc8, 0xa4, 0x3e, 0x5a, 0x50, 0xce, 0x32, 0x42, 0x94, 0xb3, 0x64, 0x61, 0x57, 0xfb, 0x58, 0x5e, 0xf4, 0xde, 0xf2, 0x38, 0x7a, 0xc6, 0x98, 0xf6, 0x00, 0x91, 0x32, 0x0f, 0x19, 0x3e, 0xf6, 0x4c, 0x3e, 0x48, 0x83, 0xdc, 0x7e, 0x0a, 0x93, 0x82, 0x4f, 0xa0, 0xa1, 0x8e, 0x8f, 0xa5, 0x61, 0x08, 0x1f, 0x89, 0xeb, 0xfe, 0x23, 0x56, 0x12, 0x8c, 0xbe, 0x02, 0x79, 0x79, 0x3a, 0x7a, 0x19, 0xd3, 0x70, 0x7a, 0xc0, 0x89, 0xe4, 0x70, 0xf9, 0xe1, 0x49, 0xb6, 0xaa, 0x60, 0x62, 0xbf, 0xcc, 0xfb, 0xf7, 0xc2, 0xb5, 0x3f, 0x82, 0x97, 0xd3, 0xaf, 0x0c, 0x5c, 0x22, 0x3d, 0x8b, 0x8e, 0x6f, 0xb5, 0x1b, 0x90, 0x85, 0x52, 0x31, 0xa2, 0x9f, 0x4d, 0x4d, 0x22, 0xe0, 0x23, 0x8d, 0xfb, 0x59, 0x9d, 0xeb, 0x9d, 0xa2, 0x37, 0xa6, 0x61, 0x02, 0x7a, 0x02, 0xa8, 0x30, 0x62, 0xb2, 0xe5, 0xe3, 0x0e, 0x02, 0xb4, 0x58, 0x7b, 0xa2, 0x00, 0x6c, 0x16, 0x01, 0xa3, 0xd3, 0x54, 0x13, 0xb7, 0xfd, 0x67, 0xa2, 0xad, 0x8c, 0x7b, 0xcc, 0x0c, 0x58, 0x56, 0xa4, 0xd9, 0x8e, 0x8a, 0x29, 0x72, 0xb1, 0x50, 0x3b, 0x49, 0xb1, 0xb7, 0xc6, 0x82, 0x54, 0xa1, 0x9b, 0x65, 0x9f, 0x33, 0xa1, 0x19, 0x42, 0x2d, 0x87, 0xda, 0xd9, 0x4e, 0x8a, 0xee, 0x04, 0x50, 0x74, 0x35, 0x6e, 0xbc, 0x2c, 0x4a, 0xfe, 0xa8, 0x80, 0x83, 0x0d, 0x76, 0xf8, 0xa0, 0xbf, 0x79, 0xb8, 0xd2, 0xd8, 0x43, 0x9c, 0x34, 0x9e, 0x26, 0x11, 0x4f, 0x6b, 0xb9, 0xc4, 0x66, 0x2a, 0x0f, 0x29, 0x0c, 0x46, 0xe5, 0xc5, 0x8a, 0x36, 0x78, 0xda, 0xa6, 0xf2, 0xf0, 0x44, 0xec, 0x7f, 0xac, 0x67, 0x7d, 0xdf, 0x3e, 0x93, 0x73, 0x7f, 0xc9, 0x58, 0x80, 0x2d, 0xf7, 0xb7, 0xf6, 0x89, 0x0c, 0xe3, 0x08, 0xd0, 0x74, 0x66, 0xd7, 0x4e, 0x51, 0x30, 0xdd, 0x0d, 0xf2, 0xb1, 0x63, 0x5c, 0x19, 0x67, 0x01, 0x3c, 0xaf, 0x19, 0xa5, 0xec, 0x0a, 0x73, 0xa8, 0xed, 0xfd, 0x1d, 0xe8, 0xcf, 0x1d, 0x68, 0xf1, 0x84, 0x69, 0x6a, 0x8b, 0x3b, 0x37, 0x59, 0xad, 0xad, 0x00, 0x01, 0x2f, 0x90, 0x70, 0xff, 0xbe, 0x0d, 0x5c, 0x1b, 0x98, 0x3c, 0xe9, 0x5f, 0xee, 0xdd, 0xdc, 0x1d, 0xfb, 0xe7, 0x7b, 0x37, 0x40, 0x8f, 0x70, 0x6e, 0xfb, 0x37, 0xa6, 0x16, 0xfb, 0x37, 0x3e, 0x76, 0x8e, 0xd1, 0x6e, 0x9e, 0x8c, 0x76, 0xd3, 0x33, 0xda, 0x4d, 0xc2, 0xad, 0x53, 0x84, 0xfc, 0x85, 0xed, 0x93, 0xa7, 0x9d, 0xb6, 0xfe, 0xfa, 0xa1, 0x5c, 0x7a, 0x16, 0xb4, 0xf7, 0x70, 0x9d, 0x91, 0xf0, 0x4c, 0x7a, 0x97, 0xce, 0x5a, 0xa0, 0xde, 0xe4, 0xb8, 0x03, 0xc2, 0xa4, 0x42, 0xe7, 0x5b, 0x77, 0xd1, 0xfd, 0xe8, 0x08, 0xda, 0xfb, 0x26, 0x63, 0x28, 0x09, 0x51, 0xc7, 0xe1, 0xa9, 0x8d, 0xcb, 0x33, 0x09, 0x39, 0x3c, 0x9d, 0x52, 0x5e, 0x1a, 0x43, 0x02, 0xe2, 0x49, 0xe8, 0x7b, 0x85, 0xb8, 0xf3, 0x5f, 0x42, 0x34, 0x19, 0x4e, 0xaa, 0xae, 0x55, 0x1a, 0x1c, 0x17, 0x67, 0x2d, 0x6a, 0x99, 0x86, 0x3a, 0x5e, 0x8f, 0x52, 0x0f, 0x28, 0x09, 0xe0, 0x96, 0x46, 0x20, 0xd4, 0xb0, 0x39, 0x15, 0x9e, 0x48, 0x37, 0x03, 0x67, 0xa2, 0xd4, 0x27, 0x50, 0xff, 0xac, 0xf1, 0xfa, 0xb1, 0x44, 0xe3, 0x90, 0x71, 0x66, 0xde, 0x9f, 0x7e, 0x47, 0xad, 0x5d, 0xe0, 0xf7, 0x10, 0x9f, 0xd2, 0x87, 0x13, 0x08, 0x1f, 0xbe, 0x19, 0xf0, 0xcf, 0x13, 0x8c, 0x0e, 0x6d, 0x4e, 0x37, 0x02, 0x77, 0x50, 0x59, 0xaa, 0x50, 0xa6, 0x08, 0xa0, 0x14, 0x4c, 0x67, 0xcc, 0xe9, 0xd3, 0xf4, 0xd4, 0x2b, 0x28, 0xe4, 0x48, 0xd3, 0x86, 0x6f, 0x35, 0xa3, 0xb7, 0xa9, 0xad, 0x98, 0xb6, 0x3b, 0x9d, 0x58, 0x42, 0xc4, 0x1c, 0xee, 0x4e, 0x86, 0x31, 0x2a, 0xef, 0x97, 0x8f, 0x23, 0x34, 0xc6, 0x48, 0x4c, 0xa7, 0x61, 0x06, 0x64, 0x24, 0xc6, 0x4a, 0xcf, 0xc0, 0x2c, 0xcf, 0x48, 0x32, 0xc2, 0x98, 0x27, 0x51, 0xfd, 0x2c, 0x24, 0xc2, 0x52, 0x48, 0x62, 0x8c, 0x29, 0xc4, 0xac, 0x8b, 0x37, 0x26, 0x50, 0xb9, 0xa4, 0xf9, 0x1c, 0x7a, 0x46, 0x44, 0xca, 0xc1, 0xe5, 0x11, 0x36, 0xc6, 0x8c, 0xb4, 0x1b, 0x8c, 0x01, 0x03, 0xca, 0xcb, 0x70, 0x09, 0x9c, 0x5f, 0xe2, 0x35, 0x62, 0x15, 0xa9, 0xc0, 0x7b, 0xa9, 0xfd, 0x0a, 0x89, 0x95, 0x44, 0x46, 0x1b, 0x89, 0xad, 0x2f, 0xd2, 0x8b, 0xbb, 0xa9, 0x84, 0x60, 0x4c, 0xd5, 0x4b, 0xf9, 0x72, 0x78, 0x13, 0x49, 0x62, 0xa0, 0x55, 0x0c, 0xc5, 0x1e, 0xb0, 0x92, 0x76, 0x29, 0x50, 0x32, 0x8f, 0x6b, 0x84, 0x4c, 0xe6, 0xb3, 0xe8, 0xea, 0x1a, 0xcc, 0xbc, 0x41, 0x17, 0xc1, 0x58, 0x81, 0x16, 0x88, 0x8c, 0x3f, 0x5a, 0x47, 0x64, 0xc3, 0x6c, 0x7c, 0x3e, 0xbd, 0x03, 0xcc, 0xb4, 0x68, 0x37, 0xe7, 0x23, 0x52, 0xb3, 0xf0, 0xae, 0x7a, 0x5c, 0xd3, 0xe2, 0x04, 0x9e, 0x6f, 0xfb, 0x1d, 0x94, 0x59, 0x3e, 0x34, 0x9e, 0xb7, 0xb4, 0xfd, 0x16, 0x75, 0x7e, 0x2b, 0x77, 0x6a, 0x91, 0xca, 0x9d, 0x72, 0x61, 0x0a, 0x1f, 0x12, 0x19, 0xbf, 0xf0, 0x1a, 0x89, 0x7c, 0xd2, 0x86, 0xb1, 0x5b, 0xbe, 0x4b, 0x8f, 0x3f, 0x6e, 0xe1, 0xb0, 0xae, 0x39, 0xf4, 0x74, 0x2c, 0x32, 0xc2, 0xe3, 0x30, 0xca, 0x59, 0x42, 0x0b, 0x98, 0x7c, 0x50, 0x2a, 0xd8, 0x29, 0x61, 0x99, 0xf5, 0x11, 0x50, 0xca, 0x40, 0x89, 0x19, 0x30, 0xee, 0x58, 0xba, 0x8e, 0x25, 0x70, 0x43, 0x39, 0x3f, 0x7d, 0x1c, 0xeb, 0xe3, 0x9d, 0xd0, 0x0e, 0xa6, 0x2a, 0x5b, 0xa1, 0xac, 0x9f, 0x8d, 0x98, 0x36, 0x16, 0x92, 0x88, 0x7c, 0x59, 0xbf, 0x78, 0x12, 0x11, 0x63, 0x8b, 0xff, 0xb5, 0x54, 0x30, 0x25, 0xa2, 0xa4, 0x1b, 0xf4, 0x4c, 0x64, 0x46, 0xe2, 0x69, 0x9b, 0x29, 0x3e, 0xbe, 0xde, 0x2c, 0x98, 0x92, 0xe0, 0x99, 0x3c, 0x56, 0x96, 0x91, 0x74, 0x26, 0xde, 0xd9, 0xf3, 0x47, 0xcd, 0x46, 0xa0, 0xc8, 0x49, 0x02, 0xa4, 0x1e, 0xa5, 0x0b, 0xb2, 0x93, 0xa6, 0x6c, 0xad, 0x12, 0xe9, 0x25, 0x98, 0x1b, 0x86, 0xc7, 0x80, 0x1a, 0x27, 0x26, 0xf8, 0x8d, 0x20, 0x11, 0xe9, 0x89, 0x4b, 0xe1, 0xee, 0xb1, 0x44, 0x12, 0x99, 0x9e, 0xb4, 0x0c, 0x9e, 0x3c, 0x96, 0x44, 0xa2, 0x8a, 0x24, 0x93, 0xd6, 0x10, 0x43, 0x6f, 0xe8, 0x61, 0x82, 0x1e, 0x94, 0x74, 0x54, 0x86, 0x4a, 0x81, 0x16, 0xf8, 0x5a, 0xea, 0x65, 0x30, 0x79, 0x4a, 0x1b, 0xe0, 0x76, 0x39, 0x5a, 0x05, 0xd4, 0xc4, 0x1b, 0x71, 0xc5, 0xc9, 0x68, 0x41, 0xbb, 0xe6, 0xbb, 0xd1, 0xae, 0xf9, 0xad, 0xcf, 0x3c, 0xd4, 0x09, 0x28, 0x97, 0xe5, 0x4e, 0xbb, 0x32, 0x89, 0x47, 0x5d, 0xb3, 0x94, 0x2e, 0xfa, 0x99, 0x84, 0x99, 0x9d, 0x00, 0x18, 0x14, 0xb8, 0x4e, 0x26, 0xf5, 0x18, 0x7f, 0xaa, 0x9a, 0x72, 0x65, 0x26, 0x18, 0xfb, 0x11, 0x67, 0xca, 0x27, 0x48, 0x5f, 0xd9, 0x8f, 0xba, 0x6e, 0xcf, 0xa0, 0xbf, 0xde, 0xca, 0xc8, 0x02, 0x12, 0x60, 0x94, 0x5b, 0xf3, 0x88, 0x44, 0x9d, 0x8c, 0x76, 0xb6, 0xab, 0x66, 0x14, 0x96, 0x7e, 0x7a, 0x85, 0x84, 0x38, 0xc6, 0x32, 0xab, 0x65, 0xa2, 0xb4, 0x88, 0x68, 0x01, 0x8d, 0x38, 0xb2, 0x7a, 0x0c, 0x80, 0xd9, 0xeb, 0x3c, 0x73, 0x35, 0x50, 0x4f, 0x95, 0x09, 0x24, 0x92, 0xd2, 0x26, 0xd1, 0xa8, 0xa1, 0x8c, 0xbc, 0x16, 0xc3, 0x80, 0xf1, 0x80, 0x01, 0x0d, 0x2e, 0x6d, 0x0d, 0x8b, 0x4b, 0x5e, 0x08, 0x29, 0xae, 0x5c, 0x48, 0x57, 0x09, 0x69, 0x85, 0x70, 0x33, 0x8b, 0x14, 0x33, 0xca, 0xd3, 0xe6, 0x6a, 0xa1, 0xef, 0xd3, 0x67, 0x42, 0xce, 0x9a, 0xd1, 0x44, 0xc8, 0xa7, 0x72, 0xde, 0x4c, 0x52, 0x96, 0xfa, 0x0f, 0xff, 0x5b, 0xbb, 0x4d, 0xff, 0xa9, 0xa4, 0xb6, 0xb3, 0xf5, 0xe8, 0x6e, 0x03, 0x8c, 0x30, 0xe8, 0x77, 0xeb, 0x80, 0x6b, 0x24, 0x96, 0x4b, 0x08, 0xd5, 0xd1, 0xd3, 0x5a, 0x83, 0xc8, 0x59, 0x97, 0x10, 0x4b, 0xa2, 0x25, 0xd9, 0x12, 0x6f, 0x49, 0x82, 0x96, 0x5b, 0xdf, 0xca, 0x5f, 0x60, 0x6e, 0xb6, 0x8e, 0x51, 0x28, 0x13, 0xb3, 0x95, 0x22, 0xcd, 0x02, 0x73, 0x70, 0x0e, 0x5f, 0xca, 0xbc, 0x08, 0x6a, 0x69, 0xd8, 0xde, 0x3e, 0x81, 0x37, 0x31, 0x1f, 0x82, 0x69, 0xa3, 0xfb, 0x32, 0x1f, 0x82, 0x3c, 0xf3, 0x21, 0xf8, 0x14, 0x9f, 0x66, 0x4b, 0xb4, 0x67, 0xe1, 0x9e, 0x2e, 0x11, 0x8a, 0x24, 0x17, 0x57, 0x46, 0x95, 0x97, 0x48, 0xf8, 0xa4, 0x8e, 0x68, 0x65, 0xd9, 0xab, 0x63, 0x1c, 0x91, 0x97, 0x48, 0x26, 0x4a, 0xf8, 0x68, 0xb8, 0x52, 0xc0, 0x73, 0x53, 0xef, 0x38, 0xe2, 0x63, 0x4b, 0xb2, 0xeb, 0x8a, 0xa4, 0xb0, 0xd6, 0x47, 0xf0, 0x1c, 0xda, 0x5a, 0xe5, 0x3b, 0x75, 0x8f, 0x23, 0x11, 0x65, 0x12, 0x3e, 0x00, 0xc2, 0x70, 0x5e, 0x09, 0xbf, 0x40, 0x8d, 0x46, 0x4d, 0x9a, 0x20, 0x19, 0x27, 0x6a, 0x8e, 0x0c, 0x6c, 0xa1, 0x39, 0x12, 0x6b, 0x4b, 0x76, 0x98, 0x60, 0x7e, 0x4a, 0xe9, 0xca, 0xdd, 0x65, 0x02, 0x89, 0x79, 0x80, 0x57, 0xa5, 0x97, 0x87, 0x04, 0x6f, 0x05, 0xbe, 0xd7, 0x2e, 0xc7, 0x3c, 0x79, 0x55, 0x04, 0xd9, 0x5c, 0x3e, 0xf6, 0x32, 0xaf, 0x50, 0x01, 0xed, 0x3f, 0x0f, 0x9e, 0xdb, 0xe2, 0x1d, 0x09, 0x80, 0x0f, 0x1f, 0xa0, 0xe7, 0xb8, 0xf2, 0xaa, 0x49, 0x05, 0x0a, 0x0b, 0x84, 0x00, 0x5e, 0xa2, 0xe6, 0x5e, 0xb1, 0xdc, 0x39, 0x36, 0x80, 0x1b, 0x88, 0xbc, 0x4f, 0x83, 0xc7, 0x35, 0x26, 0xa8, 0x9c, 0x51, 0xb3, 0x3c, 0xb4, 0xb8, 0x2e, 0x15, 0xd2, 0x75, 0x89, 0x87, 0xfe, 0x1d, 0x05, 0xa3, 0xb8, 0x08, 0x70, 0x5e, 0x6e, 0xa4, 0x91, 0x8c, 0x8d, 0x09, 0x84, 0x11, 0x2c, 0xb5, 0x2d, 0xb0, 0xdb, 0xdd, 0x75, 0x4d, 0x26, 0x92, 0xbe, 0x3a, 0xa2, 0x3a, 0x5b, 0x9e, 0x88, 0xa9, 0x52, 0x89, 0xbf, 0x16, 0x72, 0x5c, 0x28, 0xb7, 0x95, 0xcc, 0x2c, 0xb2, 0xde, 0x27, 0xbb, 0x45, 0x2d, 0x9a, 0xa4, 0x18, 0x86, 0x30, 0xda, 0xe9, 0x7b, 0x97, 0x66, 0x35, 0xd5, 0x46, 0x31, 0x64, 0x50, 0xab, 0xc7, 0x13, 0xfb, 0xe2, 0x7a, 0xb1, 0x3b, 0x1a, 0x66, 0x2d, 0xcb, 0x43, 0x77, 0x9f, 0xac, 0x58, 0x73, 0x1e, 0x32, 0x62, 0x06, 0x3c, 0x2f, 0xe6, 0xd0, 0x01, 0x72, 0x48, 0xc0, 0x1c, 0x58, 0x7e, 0x69, 0x34, 0xbf, 0x4c, 0xdd, 0x10, 0x2e, 0x55, 0x6d, 0x63, 0x27, 0xe1, 0xa5, 0x3a, 0x94, 0x61, 0xce, 0x51, 0x67, 0x98, 0x3c, 0xc5, 0x35, 0x09, 0xd6, 0x4c, 0xd7, 0x29, 0x39, 0x96, 0xa2, 0x79, 0x86, 0x8b, 0x5a, 0x28, 0xfd, 0x5c, 0x3e, 0x0b, 0x34, 0xcc, 0xde, 0x2b, 0xa3, 0xfd, 0x57, 0x20, 0x0f, 0xe6, 0x94, 0x2b, 0xa0, 0x54, 0xc6, 0x0d, 0x2a, 0xbb, 0x64, 0x69, 0x96, 0xc3, 0x0f, 0xd0, 0x13, 0x2f, 0x4c, 0x73, 0x9d, 0x5e, 0xb4, 0x95, 0x3b, 0x8e, 0x44, 0xe9, 0x89, 0xb6, 0x94, 0x44, 0xeb, 0x89, 0x4e, 0x1a, 0x47, 0x04, 0x4b, 0x62, 0x27, 0x3d, 0xd1, 0x8b, 0x9e, 0x88, 0x27, 0x7f, 0xc5, 0x49, 0xac, 0xe6, 0x2f, 0x77, 0x1e, 0xce, 0x25, 0xc1, 0xb1, 0x71, 0xdb, 0xbf, 0xac, 0xc9, 0x25, 0x41, 0x31, 0xc4, 0xfa, 0x95, 0x33, 0x37, 0xeb, 0x38, 0xab, 0xc0, 0x25, 0x5a, 0x8b, 0xa2, 0x05, 0xeb, 0x58, 0xa1, 0xc9, 0x9a, 0x23, 0x34, 0xd1, 0x3c, 0xb3, 0x68, 0x9e, 0x90, 0x9f, 0x25, 0x0e, 0x72, 0x53, 0x58, 0xcc, 0x2a, 0xc8, 0xb3, 0x26, 0x0e, 0xd6, 0x4f, 0xa9, 0xd3, 0xf6, 0xaa, 0x43, 0x25, 0xee, 0xea, 0xab, 0x50, 0xb2, 0x1f, 0xf8, 0x47, 0x5e, 0x5a, 0x13, 0x67, 0xf4, 0x16, 0xcf, 0x31, 0x3c, 0x04, 0xdc, 0x99, 0x86, 0x74, 0xa2, 0x9c, 0xf9, 0x50, 0x0e, 0x41, 0x67, 0x1d, 0xa7, 0xb8, 0x07, 0xa1, 0x16, 0x73, 0x54, 0xdc, 0x33, 0xfa, 0xa3, 0x85, 0x2f, 0x66, 0xdf, 0x4b, 0xd3, 0x17, 0x9e, 0x5b, 0xe2, 0x83, 0xa0, 0x4e, 0x34, 0x37, 0xbd, 0x68, 0x37, 0x63, 0x7a, 0xb5, 0xce, 0xc3, 0x9a, 0xb0, 0x77, 0xf7, 0x49, 0x28, 0x77, 0x04, 0xa4, 0xb0, 0x7b, 0xfb, 0x71, 0xa8, 0xc9, 0x13, 0xc9, 0x67, 0x13, 0xac, 0xbb, 0x63, 0x65, 0xd6, 0x5d, 0x5c, 0xf2, 0xbc, 0x5d, 0x45, 0x9e, 0x55, 0x15, 0xc0, 0x71, 0x6e, 0x32, 0x49, 0x9e, 0x30, 0xd7, 0xc4, 0x53, 0xc9, 0xcd, 0x86, 0xd8, 0xf8, 0x79, 0x07, 0xd9, 0xf3, 0x15, 0x7f, 0xd4, 0xb2, 0xbf, 0x2f, 0x71, 0xbe, 0x31, 0x86, 0x01, 0x57, 0x9b, 0x84, 0x9e, 0xca, 0xa1, 0x4c, 0x72, 0xa3, 0x14, 0xf7, 0x4a, 0x4a, 0x66, 0x31, 0x8b, 0x31, 0x1a, 0xf7, 0x58, 0x46, 0x2f, 0xc0, 0x3a, 0xc9, 0xd0, 0x4e, 0x82, 0x51, 0x8a, 0xef, 0x87, 0xbc, 0x94, 0x39, 0xdd, 0xd5, 0x96, 0x63, 0xe1, 0x7b, 0x2f, 0x31, 0x05, 0xf6, 0xad, 0xa9, 0xe5, 0xb7, 0x5c, 0x01, 0xf4, 0x3d, 0x7e, 0xdb, 0x1c, 0x23, 0x78, 0x48, 0x42, 0x9f, 0x04, 0xe1, 0xf6, 0x90, 0xf8, 0x3e, 0xf1, 0x42, 0x23, 0xb6, 0x4d, 0xa6, 0x19, 0x7d, 0x1a, 0x60, 0x5d, 0x33, 0xe3, 0xfa, 0xc4, 0x41, 0x9f, 0xe4, 0x51, 0x2d, 0x1e, 0x09, 0xb5, 0xd9, 0xa8, 0xa4, 0xb6, 0xdd, 0xa4, 0xd6, 0x5c, 0xf4, 0x8c, 0x71, 0x77, 0x71, 0x07, 0xb4, 0x84, 0xec, 0x45, 0xcf, 0x79, 0xf1, 0xc4, 0xfc, 0xc0, 0xdf, 0xd2, 0x88, 0x07, 0xdc, 0xe5, 0x30, 0xb5, 0xd8, 0x4f, 0x2c, 0x66, 0xf6, 0x42, 0x02, 0x98, 0x5c, 0x5f, 0xba, 0x9d, 0xe7, 0x33, 0x29, 0x35, 0xaa, 0x60, 0xb4, 0x69, 0x2e, 0x4a, 0xe2, 0x42, 0xbf, 0xa0, 0xf7, 0xf2, 0x1c, 0xd1, 0x3b, 0x9e, 0xab, 0xff, 0x7b, 0xb2, 0xfe, 0x57, 0xc0, 0x58, 0x01, 0xbc, 0x50, 0x13, 0xc7, 0xce, 0xb2, 0x04, 0xcd, 0x24, 0xde, 0xa4, 0x1e, 0xc3, 0xbc, 0x9e, 0x2b, 0xd4, 0xe5, 0xbc, 0x9a, 0xc9, 0xf3, 0x49, 0x5d, 0xfb, 0x91, 0x7f, 0x66, 0x41, 0xa4, 0x16, 0x78, 0x96, 0x58, 0x77, 0x5d, 0xc4, 0x01, 0xa2, 0xdf, 0x65, 0x15, 0xe5, 0x6f, 0x73, 0x9d, 0xd6, 0xa0, 0x8d, 0x48, 0xb5, 0xe9, 0xa8, 0x14, 0x99, 0x84, 0xda, 0x0a, 0x8d, 0x34, 0x0e, 0x24, 0x26, 0xd7, 0x89, 0xc0, 0x70, 0x9a, 0x13, 0x8e, 0xe7, 0x60, 0xb5, 0xbb, 0xfd, 0x42, 0x09, 0xda, 0xdb, 0x00, 0x5e, 0xaa, 0x6f, 0x73, 0xfb, 0x98, 0xb6, 0x12, 0xa9, 0x05, 0x4a, 0x67, 0x81, 0x5a, 0x02, 0x78, 0x01, 0x28, 0x2c, 0x39, 0xd4, 0xf2, 0x8c, 0xb2, 0x48, 0x06, 0xfc, 0x46, 0x84, 0x4b, 0x1b, 0x72, 0x89, 0x28, 0x61, 0xb9, 0x68, 0x1f, 0xda, 0xe3, 0x88, 0x25, 0xe2, 0xce, 0x40, 0x9b, 0xba, 0x98, 0x51, 0xff, 0x99, 0x2e, 0x26, 0x5b, 0xc5, 0x50, 0xf6, 0x21, 0x12, 0x77, 0x7e, 0x50, 0x0b, 0x1f, 0x57, 0x6b, 0x07, 0x91, 0x46, 0x8a, 0x33, 0x3b, 0xf1, 0x66, 0x30, 0xb1, 0x7d, 0x88, 0xbe, 0x02, 0x5d, 0x3c, 0x09, 0x49, 0xdd, 0x7c, 0xfb, 0x34, 0xdd, 0x75, 0xe0, 0xd9, 0xb3, 0x15, 0x6e, 0xbb, 0xad, 0x2d, 0xc6, 0xfe, 0xed, 0x65, 0x11, 0xb9, 0x44, 0x65, 0xca, 0x25, 0xfe, 0x48, 0xad, 0x1a, 0xc3, 0xc9, 0x8a, 0xd8, 0x5c, 0x12, 0x68, 0x7d, 0xb6, 0x4e, 0x80, 0x30, 0xc0, 0x5a, 0x54, 0x27, 0x18, 0xbd, 0x71, 0x0f, 0x0f, 0x62, 0xa6, 0xd0, 0x39, 0xe0, 0xc6, 0xf7, 0xdc, 0xae, 0x48, 0x9b, 0x8b, 0xe9, 0x46, 0x86, 0x52, 0x4b, 0xd1, 0xfe, 0xb8, 0x53, 0xd8, 0xab, 0x3f, 0xf0, 0x3b, 0xb0, 0xaa, 0xf4, 0x8a, 0xa3, 0x3b, 0xc2, 0x3e, 0xbd, 0xcc, 0x24, 0x90, 0xd6, 0x3c, 0x41, 0x81, 0x72, 0x75, 0x7e, 0x0e, 0x9f, 0xa3, 0xc0, 0xc7, 0x64, 0x58, 0x30, 0x3e, 0x95, 0x70, 0x80, 0x27, 0x87, 0xeb, 0x48, 0xa7, 0x0c, 0xb4, 0xc9, 0x8c, 0x9e, 0xe8, 0x3d, 0xe1, 0x89, 0x02, 0x68, 0xc7, 0x60, 0x4c, 0x01, 0xee, 0xe5, 0x78, 0x5f, 0x03, 0xb4, 0x24, 0xa6, 0x84, 0xba, 0xc0, 0x59, 0x66, 0xb8, 0x0a, 0x82, 0x12, 0xab, 0xb2, 0xd0, 0xc6, 0x73, 0x30, 0x94, 0x3f, 0x60, 0x30, 0x7e, 0xdd, 0x29, 0x52, 0x4f, 0x02, 0x07, 0x63, 0xca, 0x21, 0x80, 0x07, 0x95, 0x0e, 0x2d, 0xbc, 0xe5, 0x20, 0x6e, 0x17, 0x78, 0xa7, 0xee, 0x15, 0x4f, 0x34, 0x45, 0x77, 0x2b, 0xe3, 0x6b, 0x2c, 0xf0, 0x24, 0xc4, 0xe4, 0x91, 0x65, 0xae, 0xb1, 0xc2, 0x55, 0x30, 0xaf, 0x87, 0x19, 0xe6, 0xe3, 0xd0, 0xd0, 0x78, 0x18, 0x3f, 0x0e, 0xe2, 0x5a, 0x88, 0xa6, 0xe4, 0xee, 0xc2, 0x38, 0x93, 0xa5, 0x66, 0x2f, 0x3c, 0xeb, 0x94, 0x25, 0xda, 0x7b, 0x0e, 0x82, 0xb5, 0x34, 0x20, 0x56, 0x4f, 0x3a, 0x45, 0x27, 0x01, 0x86, 0x0d, 0x89, 0x4a, 0x18, 0x20, 0x4a, 0x22, 0x79, 0x1a, 0x95, 0xa9, 0x8b, 0xb2, 0xe6, 0x86, 0xcf, 0x14, 0x2d, 0x1b, 0xa2, 0x7c, 0x0d, 0xac, 0xea, 0xa4, 0x2f, 0xe1, 0xa5, 0xe9, 0x16, 0x7a, 0x4a, 0x8b, 0x1e, 0x07, 0x16, 0xa5, 0xcd, 0xdd, 0x56, 0x9e, 0xff, 0x4b, 0x06, 0x7d, 0xd2, 0x45, 0xda, 0xc1, 0x42, 0xf4, 0xf4, 0xfb, 0x4a, 0x20, 0x7b, 0x10, 0x0b, 0x0a, 0x18, 0xa3, 0x13, 0xe9, 0x60, 0x26, 0xa1, 0x25, 0x24, 0xd0, 0x8b, 0x4a, 0xf0, 0xc2, 0x13, 0x28, 0x97, 0x56, 0x3a, 0x0d, 0xa9, 0x07, 0xc8, 0xc7, 0x97, 0x3d, 0xd1, 0xd1, 0x2f, 0xeb, 0x9d, 0x71, 0x22, 0xc9, 0x32, 0x73, 0xaf, 0x24, 0xd2, 0xc9, 0x19, 0x63, 0x89, 0xb9, 0x57, 0x02, 0x09, 0x81, 0x35, 0x5d, 0xbe, 0x28, 0x97, 0xa8, 0x79, 0x1f, 0x5b, 0x2e, 0xd4, 0x50, 0x36, 0x0f, 0x38, 0x3a, 0x71, 0xd7, 0xd3, 0x39, 0xab, 0xe8, 0xda, 0x8c, 0x72, 0xab, 0x99, 0xcc, 0xc6, 0x47, 0x21, 0x49, 0x3b, 0x56, 0x8d, 0xd8, 0x51, 0xa7, 0x23, 0x5d, 0x34, 0x78, 0x32, 0x6e, 0x68, 0x2d, 0x23, 0x27, 0xb9, 0x0d, 0xdc, 0x4e, 0x36, 0xfa, 0x32, 0x83, 0xdc, 0x81, 0xe3, 0x6c, 0x3e, 0x77, 0x8e, 0xbb, 0x4c, 0xa2, 0x70, 0x75, 0x1c, 0xf0, 0x33, 0x8c, 0x10, 0x3f, 0xcb, 0xfb, 0xe8, 0x1f, 0x04, 0xf0, 0x93, 0x3f, 0xc4, 0x53, 0x00, 0x7d, 0x78, 0x83, 0xae, 0x46, 0x8a, 0x7e, 0x80, 0xb5, 0x89, 0x3d, 0x2a, 0xa0, 0xf5, 0x5a, 0x66, 0x49, 0xee, 0xa2, 0x27, 0xa1, 0x68, 0x01, 0x85, 0xf3, 0xd5, 0x5a, 0xd4, 0x4a, 0x5d, 0x02, 0xfa, 0xbb, 0x81, 0x76, 0x0e, 0xb2, 0x58, 0x02, 0x61, 0x15, 0x88, 0x8d, 0x5f, 0x1f, 0x3f, 0x4a, 0x1a, 0x6b, 0x89, 0xf4, 0x8f, 0xf5, 0x8c, 0x40, 0xee, 0xab, 0x3f, 0xac, 0xcc, 0x66, 0xa0, 0x87, 0x26, 0x72, 0x43, 0x8c, 0x90, 0x06, 0x41, 0x7e, 0x51, 0xa4, 0x79, 0xf0, 0x94, 0x5e, 0xae, 0x06, 0x5a, 0x42, 0x65, 0x5a, 0x42, 0x4c, 0x66, 0xde, 0x87, 0xae, 0x23, 0x0a, 0x93, 0xb9, 0x66, 0x17, 0x94, 0x38, 0xa1, 0x9f, 0xc2, 0xe2, 0x00, 0xdc, 0x18, 0x87, 0xd6, 0xd4, 0x7f, 0x5d, 0x6e, 0x4a, 0x50, 0x0f, 0xc1, 0xbd, 0x6a, 0x71, 0x5d, 0x52, 0x9b, 0x81, 0xda, 0x4c, 0x03, 0x6e, 0xf8, 0x1e, 0xbd, 0xd7, 0xaa, 0xcd, 0x74, 0xef, 0x1c, 0xeb, 0xa9, 0xc0, 0xf9, 0xfe, 0xab, 0x35, 0x3d, 0x09, 0x56, 0x20, 0x6d, 0x86, 0x05, 0xe7, 0x02, 0x50, 0xae, 0x51, 0x36, 0x0b, 0xd0, 0x5c, 0x13, 0xe1, 0xab, 0xf0, 0xd3, 0xa9, 0x30, 0xfe, 0x74, 0xc7, 0xa0, 0x6c, 0x62, 0x89, 0x17, 0x5b, 0x32, 0x92, 0x6d, 0xc9, 0x48, 0x91, 0xe9, 0x94, 0x1a, 0x5f, 0xad, 0x59, 0x17, 0x87, 0xfd, 0x60, 0x97, 0xc3, 0xaf, 0xd2, 0xd1, 0xc5, 0xe8, 0xe7, 0xc2, 0xe5, 0xd8, 0x4a, 0x5d, 0x68, 0x6b, 0x66, 0xa6, 0x6e, 0xbe, 0x45, 0x4f, 0xd5, 0xa1, 0x7c, 0xb8, 0x57, 0xef, 0x03, 0xed, 0x76, 0x9a, 0xee, 0x41, 0x37, 0x7f, 0x39, 0x8e, 0xb6, 0x1c, 0xcc, 0x68, 0x5a, 0x2b, 0x79, 0x73, 0xad, 0x5b, 0xad, 0xc2, 0x0a, 0xba, 0x86, 0x2a, 0x6a, 0xe2, 0x8d, 0x12, 0x27, 0x1e, 0x16, 0xd7, 0xe2, 0x86, 0xd5, 0x30, 0x63, 0x38, 0x98, 0x3f, 0x5d, 0x50, 0x73, 0xd3, 0x18, 0x46, 0x56, 0xc4, 0xc0, 0xc8, 0xb0, 0x3e, 0x7b, 0xf2, 0x77, 0x08, 0xd5, 0xd6, 0xa2, 0x93, 0xbf, 0xa3, 0xa5, 0x71, 0x58, 0x03, 0xa9, 0x64, 0x01, 0xc4, 0xcf, 0xa4, 0xf3, 0x1e, 0xc6, 0x86, 0x42, 0x47, 0x39, 0x9e, 0x04, 0x9c, 0x7b, 0x30, 0x6b, 0xd0, 0x7f, 0xa7, 0x46, 0x9b, 0x80, 0x9a, 0x88, 0x2e, 0x7e, 0x07, 0x70, 0x07, 0xdb, 0x9f, 0x97, 0xc0, 0x75, 0x40, 0x86, 0x39, 0xca, 0x6c, 0xf4, 0x75, 0xc9, 0x78, 0x49, 0xdd, 0x78, 0x1d, 0xc2, 0x28, 0x21, 0x11, 0x5f, 0x46, 0xab, 0x45, 0x99, 0x01, 0x95, 0xc8, 0xe1, 0xa0, 0xef, 0x8f, 0x43, 0x78, 0xca, 0xef, 0x7f, 0x18, 0x65, 0xc0, 0x7b, 0x50, 0xa9, 0x71, 0x55, 0x44, 0x0e, 0x09, 0x5a, 0xd7, 0xbf, 0x50, 0x1b, 0x15, 0x17, 0x0d, 0xf8, 0x20, 0xbe, 0xa1, 0x52, 0xf8, 0x64, 0x7f, 0x61, 0x70, 0x8d, 0x0d, 0x9e, 0x07, 0x57, 0xf5, 0x2f, 0xf4, 0x8f, 0x34, 0xa3, 0xa4, 0x79, 0x5c, 0x7d, 0xa5, 0xf0, 0xf1, 0xbe, 0xb1, 0x32, 0xe7, 0x7e, 0x6d, 0x08, 0x69, 0x65, 0x87, 0x8a, 0x61, 0x52, 0x2a, 0xc9, 0x81, 0x1e, 0x15, 0x70, 0x57, 0xe4, 0x38, 0x62, 0x50, 0xa0, 0xa1, 0x0e, 0x8a, 0xad, 0x88, 0x7b, 0x62, 0x41, 0x06, 0x22, 0x7f, 0x30, 0x9e, 0x18, 0x80, 0xbf, 0x53, 0xd5, 0x5c, 0x05, 0x6c, 0x66, 0xa5, 0x7c, 0x83, 0x6e, 0x20, 0x9b, 0xb5, 0x95, 0x57, 0x48, 0x30, 0x8c, 0xec, 0xc5, 0x69, 0x73, 0xa1, 0xbf, 0x0d, 0x44, 0xff, 0x55, 0x35, 0xc4, 0xf4, 0x87, 0x98, 0x2a, 0x16, 0x53, 0x4b, 0xe3, 0x04, 0x89, 0x71, 0x6a, 0x2c, 0x79, 0x01, 0x11, 0x81, 0x26, 0xdc, 0x05, 0x93, 0xac, 0xaf, 0x18, 0xab, 0x30, 0x49, 0x32, 0xe8, 0xf9, 0x76, 0x95, 0x87, 0x63, 0xf8, 0x83, 0x66, 0xe8, 0xc7, 0x16, 0xd2, 0xb1, 0x37, 0x43, 0x28, 0xf6, 0xb6, 0xb8, 0xf8, 0x32, 0x6a, 0xdf, 0xda, 0x08, 0x78, 0x89, 0xf2, 0x65, 0xba, 0xb6, 0xb4, 0xe7, 0xdd, 0xf7, 0x8c, 0x6f, 0xfc, 0x82, 0xfe, 0x01, 0x5d, 0x72, 0xbe, 0x4a, 0x17, 0x45, 0x5e, 0xcf, 0x66, 0x3d, 0xe5, 0x8a, 0x90, 0xa7, 0xc4, 0x56, 0x30, 0x84, 0xc1, 0x4c, 0x4f, 0x72, 0x9d, 0x21, 0x1c, 0x6e, 0x6e, 0x83, 0x48, 0x03, 0xf1, 0x3f, 0x5a, 0x40, 0xcf, 0x01, 0xd0, 0x4a, 0x56, 0x00, 0xd4, 0x30, 0x68, 0xbd, 0x75, 0xac, 0x2c, 0x52, 0x91, 0x6e, 0x81, 0x95, 0x28, 0x78, 0x9d, 0xb9, 0x40, 0x66, 0x92, 0xa4, 0x9b, 0xa3, 0x15, 0xd6, 0x9d, 0x40, 0x57, 0x77, 0x42, 0x19, 0xec, 0x88, 0xe4, 0xf8, 0xeb, 0x56, 0xe1, 0x93, 0xaf, 0xc6, 0xca, 0x23, 0x15, 0x47, 0x93, 0x87, 0x58, 0x4c, 0x71, 0xb1, 0xf9, 0x24, 0x04, 0x69, 0xcd, 0xf8, 0xfa, 0xf3, 0xf4, 0x39, 0x8c, 0x8d, 0xd4, 0x21, 0x66, 0x43, 0x52, 0x44, 0x38, 0x91, 0x2b, 0xe3, 0xc8, 0x4f, 0xd0, 0xee, 0x4d, 0x10, 0x0a, 0x8e, 0x04, 0xf8, 0xad, 0x83, 0x12, 0xa4, 0xa1, 0x66, 0x09, 0x8c, 0x6f, 0x03, 0x3d, 0x1d, 0xfb, 0xa3, 0xf1, 0x1d, 0x17, 0x60, 0x70, 0xa7, 0x32, 0xd4, 0x93, 0xe8, 0x19, 0x46, 0xa7, 0x08, 0x73, 0xcb, 0x7e, 0x5a, 0xb0, 0xc7, 0xe8, 0x4d, 0x7b, 0x29, 0x1e, 0x7a, 0x54, 0xbf, 0xbb, 0xda, 0x64, 0x71, 0xf6, 0xce, 0xbc, 0x9d, 0xac, 0x6f, 0xe2, 0xff, 0xa0, 0x6f, 0x0c, 0x94, 0xae, 0xde, 0x71, 0x7f, 0xff, 0x5c, 0x2f, 0x63, 0xa7, 0x17, 0xef, 0xb5, 0xe2, 0x9c, 0x2d, 0x4e, 0xce, 0xf9, 0x4f, 0x78, 0x24, 0xb7, 0x7e, 0xba, 0x9e, 0x84, 0xb6, 0xa0, 0x1f, 0xcc, 0x27, 0x86, 0xfb, 0x72, 0xe8, 0xc4, 0xf4, 0x6f, 0xfe, 0xab, 0xf4, 0xeb, 0x2f, 0xd1, 0x71, 0xc0, 0x4e, 0x92, 0xdc, 0x38, 0xb3, 0xff, 0xd2, 0x0a, 0x66, 0xfd, 0x0a, 0x66, 0x05, 0x13, 0x3d, 0xcd, 0xb2, 0xdd, 0xd5, 0x4f, 0xaf, 0x08, 0x77, 0xed, 0x13, 0xa8, 0x0d, 0xcc, 0x12, 0x77, 0xdb, 0xf0, 0xf5, 0x69, 0x22, 0x25, 0xe2, 0xb2, 0x68, 0xdf, 0xca, 0xd2, 0x3b, 0xfa, 0x33, 0x61, 0x7b, 0xaf, 0xcc, 0x42, 0xa6, 0xa9, 0x8c, 0x48, 0x2a, 0xab, 0xf1, 0xcc, 0xa9, 0x8d, 0xd3, 0xf4, 0x36, 0xed, 0x64, 0x5e, 0x6b, 0x6a, 0x65, 0x27, 0x13, 0x6d, 0xee, 0xdd, 0x25, 0xb5, 0x53, 0xeb, 0xc9, 0x0f, 0xbd, 0x56, 0x4c, 0x35, 0x78, 0x4f, 0x27, 0xb5, 0xd3, 0x54, 0x00, 0xdd, 0x48, 0xed, 0x74, 0x7f, 0x42, 0xff, 0xc6, 0x3c, 0x53, 0x38, 0x36, 0x3c, 0x7f, 0x4c, 0x76, 0xf1, 0xc8, 0xe2, 0x17, 0x88, 0x66, 0x68, 0x62, 0x7a, 0x0c, 0xe7, 0xfe, 0x88, 0x8b, 0x8c, 0x0c, 0xef, 0xc9, 0xe9, 0x7a, 0x3e, 0x16, 0xde, 0xb3, 0x67, 0x78, 0x84, 0xa9, 0x67, 0xcf, 0x1e, 0x7e, 0x3e, 0xe4, 0x7f, 0xf0, 0x57, 0xfb, 0xb5, 0x1d, 0x40, 0x07, 0xb0, 0x14, 0x40, 0x73, 0xff, 0xfb, 0xf3, 0xc1, 0xcd, 0xd7, 0x35, 0x75, 0x70, 0x5f, 0x46, 0x6a, 0x1b, 0x4a, 0x48, 0xed, 0x39, 0xb8, 0x3e, 0x57, 0x49, 0x6a, 0x6f, 0x26, 0x90, 0xda, 0x43, 0x56, 0x16, 0x37, 0x13, 0xde, 0x99, 0x20, 0xac, 0x20, 0xb5, 0x87, 0xa7, 0x8a, 0xcf, 0x8e, 0x19, 0x48, 0xed, 0x0f, 0x50, 0xf7, 0x53, 0x5b, 0xe1, 0x79, 0x15, 0xc4, 0x5f, 0x43, 0x6a, 0xbf, 0x5f, 0x0f, 0xf1, 0x00, 0x7e, 0x49, 0x81, 0x78, 0xc3, 0x05, 0xf8, 0x23, 0x44, 0xaa, 0x87, 0xf6, 0x98, 0x2e, 0x7e, 0x73, 0x30, 0x12, 0x7e, 0xbb, 0x33, 0xe8, 0x81, 0x8f, 0xca, 0x49, 0x65, 0x2f, 0x82, 0x82, 0x68, 0xf4, 0xfd, 0x9e, 0x02, 0x80, 0x62, 0x80, 0x17, 0x00, 0x26, 0x02, 0x40, 0x7b, 0xee, 0x99, 0x0b, 0xb0, 0x18, 0xe0, 0x35, 0x88, 0xfb, 0x38, 0xc6, 0x85, 0xb0, 0xaf, 0xdb, 0x37, 0xed, 0x5d, 0x61, 0xed, 0x9e, 0xb7, 0x9d, 0x55, 0x1a, 0x4f, 0xc8, 0xd6, 0xf1, 0x24, 0x76, 0x1b, 0xc0, 0x17, 0x7f, 0x0c, 0x44, 0x84, 0x17, 0x85, 0x2f, 0x8a, 0x08, 0x79, 0x11, 0xf8, 0x13, 0xc1, 0x09, 0x70, 0xdf, 0xee, 0x3f, 0x01, 0xf8, 0xb6, 0x09, 0x3e, 0xaf, 0xff, 0xb1, 0x9c, 0x44, 0x03, 0xc4, 0xfe, 0x58, 0xde, 0xe5, 0xf1, 0x3f, 0x07, 0xf2, 0xf8, 0x8f, 0x84, 0x3c, 0x2e, 0x94, 0x93, 0x7f, 0xc1, 0x77, 0xf7, 0x10, 0xea, 0x09, 0x79, 0xe8, 0x3c, 0x21, 0x7e, 0x3f, 0x0a, 0xc2, 0xd5, 0x7f, 0x17, 0xca, 0x59, 0xfd, 0x8b, 0x88, 0xd7, 0xd6, 0x22, 0xc9, 0x8f, 0xdb, 0x00, 0xbe, 0xf8, 0x43, 0x20, 0x5e, 0x14, 0x9e, 0x13, 0xfe, 0xf7, 0xf5, 0xaf, 0x25, 0x1e, 0xb7, 0x01, 0xee, 0xd6, 0x92, 0x07, 0xee, 0xfd, 0x31, 0xdc, 0x04, 0xf0, 0xb8, 0x77, 0x1e, 0xa0, 0x09, 0xe0, 0x7f, 0x57, 0x7f, 0x0f, 0x80, 0x76, 0x70, 0xd9, 0x0f, 0x71, 0x79, 0x35, 0xf1, 0x00, 0x68, 0x27, 0x9c, 0x27, 0xfd, 0x00, 0xa0, 0x6c, 0x1e, 0x22, 0xdc, 0x96, 0x88, 0x70, 0x97, 0x88, 0xd0, 0x44, 0x5e, 0xa4, 0x20, 0x40, 0x3c, 0xc1, 0x04, 0x10, 0xfd, 0xb0, 0x20, 0x84, 0x3c, 0x2c, 0x34, 0xf9, 0xb7, 0x13, 0xee, 0x7a, 0xb5, 0x13, 0x6e, 0x7b, 0xbc, 0x24, 0xd4, 0x4b, 0x76, 0x43, 0x1a, 0x17, 0x21, 0xbd, 0xe7, 0xa0, 0xc7, 0x1e, 0x83, 0xe1, 0xfd, 0x50, 0x13, 0x21, 0xfe, 0x80, 0x3e, 0xbc, 0x6e, 0x43, 0xb6, 0x50, 0x72, 0xc9, 0xf9, 0xff, 0x28, 0x7f, 0x08, 0x9b, 0xbc, 0x20, 0x7f, 0xc8, 0x52, 0x78, 0xf8, 0x0b, 0x41, 0x80, 0xec, 0x9b, 0x8c, 0xe7, 0x84, 0x7b, 0x1d, 0x05, 0xa1, 0xd1, 0xf7, 0x9a, 0xd0, 0xe0, 0x29, 0x08, 0x75, 0xd2, 0xdf, 0x84, 0x1a, 0xc9, 0x8b, 0xc2, 0x0a, 0xb2, 0x45, 0x30, 0x93, 0xa7, 0x9b, 0xca, 0x49, 0xd8, 0x3d, 0x42, 0x3a, 0x36, 0x12, 0xe2, 0xd3, 0x40, 0x88, 0x67, 0x1d, 0x4c, 0xb5, 0x1a, 0xc8, 0x9f, 0xfb, 0xff, 0x48, 0xfd, 0x1f, 0x86, 0xbc, 0x5f, 0x2c, 0x87, 0x05, 0xb3, 0x9a, 0x78, 0x01, 0x3c, 0x0c, 0xdf, 0xbd, 0x28, 0x9c, 0x87, 0xfc, 0xea, 0xbd, 0x00, 0x20, 0xe9, 0xdb, 0x2f, 0x8a, 0x70, 0x17, 0xb2, 0xba, 0x0b, 0xf7, 0x4d, 0x30, 0x78, 0x9a, 0xa0, 0xbe, 0x42, 0x67, 0xa8, 0xff, 0xe3, 0x70, 0x1f, 0x8e, 0xf5, 0x7f, 0x11, 0xea, 0xff, 0x11, 0xd4, 0xff, 0x1c, 0xd4, 0xff, 0x47, 0xa8, 0xff, 0xf8, 0xbf, 0x53, 0xff, 0xff, 0xea, 0x4f, 0xc2, 0x2a, 0x20, 0x47, 0x9a, 0x0d, 0x00, 0xf1, 0xa4, 0x09, 0x80, 0x87, 0x0a, 0x55, 0x9f, 0x07, 0xf4, 0x13, 0x4d, 0xd0, 0x5d, 0x88, 0x9c, 0x78, 0x94, 0xc3, 0x6b, 0x44, 0xa3, 0xd1, 0xf0, 0xda, 0x1f, 0xf8, 0x08, 0x8f, 0x6a, 0x8a, 0xd1, 0xfe, 0xf4, 0xcf, 0x03, 0x6d, 0xc2, 0x41, 0x1b, 0xb5, 0x83, 0xf6, 0x7a, 0x18, 0xda, 0xae, 0x1f, 0xb4, 0xe3, 0x8b, 0xb4, 0x5f, 0xb0, 0x2f, 0x9a, 0xa0, 0x5f, 0xee, 0x41, 0xfb, 0xdc, 0x69, 0x27, 0x08, 0x37, 0xa0, 0x4d, 0x6a, 0xa1, 0x6d, 0xf6, 0x40, 0x1b, 0x55, 0x42, 0xb3, 0x70, 0xfd, 0x84, 0x26, 0xf3, 0x5c, 0xe1, 0x6e, 0x79, 0x37, 0xe1, 0x0e, 0x51, 0x08, 0x37, 0x88, 0xb4, 0x5f, 0x2d, 0x21, 0x73, 0xf7, 0x10, 0xd2, 0xad, 0x92, 0x00, 0x65, 0x45, 0x90, 0x60, 0xf9, 0xcb, 0xfc, 0xff, 0xdf, 0xae, 0xbf, 0xfb, 0x5f, 0x3b, 0x18, 0x37, 0x7d, 0x00, 0x03, 0xfe, 0xeb, 0x8d, 0xf3, 0xa4, 0xe9, 0xc5, 0xff, 0x69, 0xfd, 0xbd, 0x60, 0x28, 0x2a, 0x55, 0x04, 0x48, 0x4a, 0x42, 0x38, 0x28, 0x9a, 0x19, 0x8a, 0x66, 0xde, 0x0e, 0xb0, 0xa3, 0x9c, 0x98, 0x47, 0x55, 0x93, 0xb8, 0xe0, 0x6a, 0x12, 0x5f, 0x51, 0x4d, 0xb2, 0xbf, 0x2a, 0x27, 0x3d, 0x9f, 0x29, 0x27, 0xc1, 0x5f, 0x42, 0x7c, 0xa8, 0xb1, 0x52, 0x49, 0x24, 0xb2, 0x3d, 0xc4, 0x43, 0x56, 0x4e, 0xe4, 0x00, 0x4a, 0x19, 0xd4, 0x1f, 0x42, 0x13, 0x34, 0x0a, 0x3f, 0xf5, 0xdf, 0xa8, 0xbf, 0x0c, 0xf2, 0x96, 0xc0, 0xad, 0x17, 0x14, 0xad, 0x1d, 0x14, 0xed, 0x29, 0x28, 0x5a, 0x5f, 0x84, 0x38, 0xe8, 0x72, 0x09, 0x4f, 0x62, 0xe3, 0xb3, 0xc8, 0x88, 0xa8, 0x54, 0x92, 0x52, 0xf9, 0x46, 0xb9, 0x26, 0xeb, 0x8b, 0xf3, 0x01, 0x0f, 0xbe, 0x78, 0xdb, 0xf7, 0x86, 0xd0, 0xe4, 0xfb, 0x83, 0x70, 0xcf, 0xe3, 0x19, 0xe1, 0x8e, 0x6f, 0x77, 0xe1, 0x46, 0xc7, 0xb9, 0x42, 0x6d, 0xb7, 0x87, 0x85, 0x3d, 0xc9, 0x5f, 0x08, 0x95, 0x53, 0x5e, 0x14, 0x38, 0x0d, 0xd4, 0xff, 0xe5, 0xff, 0xa4, 0xfe, 0x39, 0x50, 0xef, 0x03, 0x0c, 0x66, 0x01, 0x94, 0x12, 0x12, 0x07, 0xef, 0xe2, 0x2b, 0x08, 0xc9, 0xde, 0x49, 0x48, 0xcf, 0x6c, 0xa8, 0xe4, 0x8e, 0xff, 0xa3, 0xfa, 0xa3, 0xcb, 0x09, 0xb8, 0x7e, 0x2a, 0x10, 0xea, 0x5e, 0x02, 0x30, 0x0a, 0xea, 0xaf, 0x20, 0x24, 0x16, 0x8a, 0x3a, 0xe2, 0xd1, 0xbb, 0x24, 0x65, 0xde, 0x8f, 0x50, 0xff, 0x37, 0xce, 0x07, 0x04, 0xff, 0xef, 0xea, 0xdf, 0x26, 0x9d, 0xe0, 0xfc, 0xfb, 0x81, 0x4c, 0xbf, 0x6f, 0x1c, 0xfe, 0xe0, 0x79, 0xe9, 0xfe, 0x67, 0x5e, 0x8d, 0x6d, 0x3c, 0x9b, 0xd5, 0xc6, 0x33, 0xf5, 0xfd, 0xcf, 0xc8, 0x8a, 0xfb, 0x9f, 0xc9, 0x26, 0xb7, 0xf1, 0xac, 0x8d, 0x6f, 0xa5, 0x17, 0xee, 0x7f, 0x26, 0x59, 0xd2, 0xc6, 0x33, 0xbd, 0xdb, 0xdd, 0x15, 0xec, 0x72, 0x91, 0x0e, 0xaa, 0xbc, 0x01, 0xbf, 0x22, 0xed, 0x59, 0x3b, 0x67, 0xb1, 0xdb, 0xf5, 0x6a, 0xb7, 0xeb, 0xc3, 0x6e, 0xd7, 0x97, 0x9a, 0xaf, 0xe7, 0xfa, 0xbb, 0x5d, 0x47, 0xb9, 0x5d, 0xab, 0xdd, 0xe2, 0x6f, 0x73, 0x7b, 0x6e, 0x73, 0xbb, 0x7e, 0x8a, 0x95, 0x05, 0x71, 0x85, 0x94, 0x5d, 0x4b, 0xdd, 0x40, 0xc6, 0x42, 0x39, 0xeb, 0x13, 0x05, 0x0b, 0xbd, 0x19, 0xbe, 0xf1, 0x61, 0xa1, 0x3f, 0x7b, 0x16, 0xc8, 0xe2, 0x6b, 0x59, 0xa8, 0x63, 0xa1, 0x9e, 0x85, 0x06, 0x16, 0x86, 0xb3, 0xbc, 0xfa, 0x36, 0xb7, 0xc1, 0xdc, 0x26, 0x96, 0x96, 0x89, 0x85, 0x91, 0x2c, 0x4e, 0xe0, 0xdf, 0x28, 0x9b, 0x94, 0x95, 0xcd, 0x9f, 0x96, 0xa9, 0x76, 0x4e, 0x23, 0x2b, 0xa7, 0x3f, 0x0b, 0xdb, 0xb1, 0x6b, 0x15, 0x7b, 0x87, 0x7f, 0xa9, 0x6d, 0xa4, 0xeb, 0x45, 0xd3, 0xad, 0x9d, 0x37, 0x96, 0x7d, 0x67, 0x62, 0xf5, 0x72, 0xa6, 0x15, 0xc1, 0xbe, 0xc7, 0xeb, 0x28, 0x76, 0x8d, 0x65, 0x8d, 0x61, 0x61, 0x5f, 0xf6, 0xce, 0xe2, 0x16, 0x2f, 0xc9, 0x2d, 0x9e, 0x8d, 0xe5, 0x67, 0x60, 0xe9, 0xca, 0xfe, 0xa4, 0x2e, 0x52, 0xd6, 0xbe, 0x52, 0x86, 0xd3, 0xa5, 0x2c, 0x3d, 0x29, 0xad, 0x87, 0x78, 0x1d, 0xe0, 0x96, 0x4f, 0x90, 0xdb, 0x75, 0x27, 0xb7, 0x3c, 0xbb, 0xb0, 0x67, 0x6a, 0xf6, 0xcc, 0xd9, 0x3f, 0x1e, 0xac, 0x7f, 0x48, 0xff, 0xf8, 0x41, 0xa9, 0x49, 0x71, 0xf1, 0x89, 0x18, 0xf6, 0x1f, 0x18, 0x97, 0x8c, 0x61, 0xd1, 0x58, 0x07, 0x87, 0x61, 0x5c, 0x7a, 0xb2, 0x25, 0x20, 0x72, 0x68, 0xe9, 0x98, 0x67, 0x06, 0x8d, 0x25, 0xb5, 0x7b, 0x73, 0x31, 0x3e, 0x37, 0x6a, 0xb4, 0x3d, 0x7f, 0x64, 0xc9, 0x68, 0x0e, 0x98, 0x9f, 0xf0, 0x5e, 0x5c, 0x7c, 0x61, 0xd1, 0x0b, 0xc5, 0x63, 0x1c, 0x39, 0x25, 0x5c, 0xcf, 0xc7, 0x1e, 0xeb, 0x15, 0x06, 0xfc, 0x90, 0x89, 0xb3, 0x8d, 0x1e, 0x39, 0x36, 0x2c, 0xbf, 0xf0, 0xf9, 0x22, 0x2e, 0x79, 0xe4, 0x98, 0xfc, 0xfc, 0x17, 0xb8, 0x91, 0x63, 0x47, 0x71, 0x03, 0x47, 0x16, 0xe7, 0x71, 0x71, 0xa3, 0xf2, 0x47, 0x17, 0xbb, 0xad, 0xf7, 0x3f, 0xc4, 0x5d, 0x46, 0xb9, 0x2d, 0xa8, 0xb1, 0x8c, 0xfc, 0xd0, 0x77, 0x17, 0xfc, 0x7a, 0x42, 0xed, 0x14, 0xec, 0x5a, 0x4e, 0x38, 0xf8, 0x17, 0xaf, 0x65, 0xf0, 0x5c, 0x45, 0x7e, 0x88, 0x39, 0x09, 0x6f, 0x55, 0xe2, 0x73, 0x76, 0x8d, 0xe8, 0x43, 0xbc, 0xe6, 0x48, 0x39, 0x74, 0x15, 0x5e, 0xe3, 0x95, 0x54, 0xc6, 0xae, 0x25, 0x52, 0x89, 0x54, 0x25, 0x5e, 0x4b, 0xa4, 0x1e, 0x32, 0x99, 0xa7, 0xa7, 0x1c, 0xfe, 0xbc, 0xe0, 0x4f, 0xc1, 0xfe, 0xbc, 0xd9, 0x9f, 0x4f, 0xab, 0x3f, 0xdf, 0x56, 0x7f, 0xca, 0xbf, 0xf8, 0xf3, 0xfb, 0x8b, 0x3f, 0xff, 0xff, 0xf2, 0xaf, 0xdd, 0x7f, 0xf9, 0x07, 0x43, 0xa7, 0x7d, 0x40, 0xc0, 0x03, 0x0f, 0x04, 0xc2, 0x5f, 0x07, 0xf8, 0x0b, 0x62, 0x7f, 0x1d, 0xd9, 0x5f, 0x70, 0xab, 0xbf, 0x07, 0x5b, 0xfd, 0x75, 0xfa, 0x8b, 0xbf, 0xce, 0x7f, 0xf1, 0x17, 0xf2, 0x5f, 0xfe, 0x3d, 0xf4, 0x5f, 0xfe, 0xd1, 0xfe, 0xf7, 0x94, 0x7b, 0x61, 0x8f, 0x63, 0xef, 0x3a, 0xfb, 0xcc, 0xd9, 0xb6, 0x2a, 0xf6, 0xd7, 0x9e, 0xfd, 0x05, 0xb0, 0xbf, 0x07, 0xd8, 0x5f, 0x60, 0xab, 0xbf, 0x0e, 0xad, 0xfe, 0x82, 0x5a, 0xfd, 0x75, 0x6c, 0xf5, 0x17, 0xfc, 0x17, 0x7f, 0x0f, 0xfe, 0xc5, 0xdf, 0x7f, 0xd9, 0xfe, 0x21, 0x80, 0x49, 0x14, 0x64, 0x16, 0x40, 0x0a, 0xc0, 0x01, 0x00, 0x03, 0xc0, 0x1a, 0x80, 0x7c, 0x80, 0x2b, 0x00, 0x21, 0x00, 0xcb, 0x00, 0x86, 0x03, 0x9c, 0x01, 0x88, 0x05, 0xd8, 0x0a, 0x50, 0x06, 0x70, 0x17, 0x40, 0x0a, 0x30, 0x19, 0xc0, 0x02, 0xb0, 0x03, 0x40, 0x0d, 0xf0, 0x16, 0x40, 0x36, 0xc0, 0x05, 0x80, 0x00, 0x80, 0xf9, 0x00, 0xe9, 0x00, 0x87, 0x01, 0x22, 0x00, 0xd6, 0x01, 0x14, 0x03, 0xdc, 0x00, 0xf0, 0x01, 0x98, 0x01, 0x60, 0x03, 0xd8, 0x07, 0xa0, 0x07, 0x58, 0x0d, 0x90, 0x0b, 0x70, 0x19, 0xa0, 0x13, 0xc0, 0x52, 0x80, 0x61, 0x00, 0xa7, 0x01, 0x62, 0x00, 0x36, 0x03, 0x4c, 0x00, 0x68, 0x04, 0x90, 0x03, 0x4c, 0x07, 0x48, 0x02, 0xd8, 0x05, 0xa0, 0x05, 0x78, 0x0f, 0xc0, 0x0e, 0x70, 0x09, 0x20, 0x08, 0x60, 0x31, 0xc0, 0x50, 0x80, 0xe3, 0x00, 0x51, 0x00, 0x1b, 0x01, 0xc6, 0x01, 0xdc, 0x02, 0xf0, 0x07, 0x98, 0x03, 0x90, 0x0a, 0x70, 0x10, 0x20, 0x1c, 0x60, 0x2d, 0xc0, 0x58, 0x80, 0x5f, 0x00, 0xba, 0x00, 0x2c, 0x07, 0x78, 0x0a, 0xe0, 0x2c, 0x40, 0x5f, 0x80, 0x6d, 0x00, 0x13, 0x01, 0x9a, 0x00, 0x24, 0x00, 0x93, 0x00, 0xe2, 0x00, 0xb6, 0x03, 0x74, 0x05, 0x78, 0x13, 0x60, 0x24, 0xc0, 0xf7, 0x00, 0xed, 0x01, 0xe6, 0x01, 0x0c, 0x06, 0x38, 0x04, 0xd0, 0x13, 0xe0, 0x63, 0x80, 0x67, 0x01, 0xae, 0x03, 0x78, 0x03, 0xbc, 0x0c, 0xd0, 0x1f, 0x60, 0x2f, 0x40, 0x0f, 0x80, 0x55, 0x00, 0x63, 0x00, 0x7e, 0x02, 0x78, 0x10, 0xe0, 0x55, 0x80, 0x27, 0x01, 0x4e, 0x01, 0x3c, 0x06, 0xf0, 0x19, 0xc0, 0x0b, 0x00, 0x40, 0x42, 0x01, 0x76, 0x54, 0x90, 0x69, 0x00, 0x89, 0x00, 0x5f, 0x01, 0x3c, 0x02, 0xf0, 0x2e, 0xc0, 0x68, 0xc4, 0x99, 0x00, 0x1d, 0x00, 0x16, 0x01, 0x0c, 0x01, 0x38, 0x06, 0xd0, 0x0b, 0x60, 0x03, 0xc0, 0xf3, 0x00, 0xbf, 0x02, 0xf8, 0x01, 0xcc, 0x06, 0x18, 0x08, 0xf0, 0x35, 0x40, 0x18, 0xc0, 0x87, 0x00, 0x05, 0x00, 0x57, 0x01, 0x1e, 0x02, 0x78, 0x1d, 0x60, 0x04, 0xc0, 0x77, 0x00, 0x8f, 0x03, 0x7c, 0x0e, 0xf0, 0x2f, 0x80, 0x7b, 0x00, 0x0f, 0x10, 0x6f, 0x09, 0x00, 0x59, 0x00, 0x21, 0x00, 0xc9, 0x80, 0x10, 0x80, 0x1c, 0x81, 0x10, 0x80, 0x3c, 0x0a, 0x21, 0x00, 0xf9, 0x04, 0x42, 0x00, 0xf2, 0x1c, 0x84, 0x00, 0xe4, 0x26, 0x84, 0x00, 0xc4, 0x17, 0x42, 0x00, 0x32, 0x13, 0x42, 0x00, 0x32, 0x00, 0x42, 0x00, 0xb2, 0x1f, 0x42, 0x00, 0x12, 0x0a, 0x21, 0x00, 0xf9, 0x00, 0x42, 0x00, 0x92, 0x07, 0x21, 0x00, 0xf9, 0x19, 0x42, 0x00, 0xd2, 0x19, 0x42, 0x00, 0xf2, 0x1a, 0x84, 0x00, 0xe4, 0x1f, 0x10, 0x02, 0x90, 0x6f, 0x21, 0x04, 0x20, 0x7d, 0x20, 0x04, 0x20, 0x5b, 0x20, 0x04, 0x20, 0xff, 0x84, 0x10, 0x80, 0xfc, 0x0e, 0x21, 0x00, 0xac, 0xf0, 0xde, 0x12, 0x00, 0xf2, 0x12, 0x84, 0x00, 0x24, 0x19, 0x42, 0x00, 0xb2, 0x1b, 0x42, 0x00, 0xd2, 0x1d, 0x42, 0x00, 0xf2, 0x3e, 0x84, 0x00, 0xc4, 0x01, 0x21, 0x00, 0xf9, 0x11, 0x42, 0x00, 0xd2, 0x11, 0x42, 0x00, 0xf2, 0x0a, 0x84, 0x00, 0xe4, 0x09, 0x08, 0x01, 0xc8, 0x09, 0x08, 0x01, 0x48, 0x6f, 0x08, 0x01, 0xc8, 0xa7, 0x10, 0x02, 0x90, 0xf1, 0x10, 0x02, 0x90, 0xdf, 0x20, 0x04, 0x00, 0x4a, 0xc4, 0x5b, 0x02, 0x40, 0xe6, 0x42, 0x08, 0x40, 0x06, 0x41, 0x08, 0x40, 0xbe, 0x81, 0x10, 0x80, 0x18, 0x21, 0x04, 0x20, 0x1f, 0x41, 0x08, 0x40, 0x0a, 0x21, 0x04, 0x20, 0xd7, 0x20, 0x04, 0x20, 0x0f, 0x43, 0x08, 0x40, 0xde, 0x80, 0x10, 0x80, 0x3c, 0x0d, 0x21, 0x00, 0x39, 0x07, 0x21, 0x00, 0xe9, 0x07, 0x21, 0x00, 0xf9, 0x02, 0x42, 0x00, 0xf2, 0x22, 0x84, 0x00, 0x44, 0x80, 0x50, 0xa0, 0x34, 0x87, 0x17, 0x31, 0x03, 0x70, 0x00, 0x3c, 0x80, 0x0a, 0x20, 0x0d, 0xc0, 0x04, 0x50, 0x04, 0xa0, 0x00, 0xb0, 0x02, 0xe8, 0x00, 0x72, 0x00, 0x82, 0x01, 0xb2, 0x00, 0xa2, 0x01, 0x4a, 0x01, 0x64, 0x00, 0x09, 0x00, 0x1a, 0x80, 0x51, 0x00, 0x81, 0x00, 0x99, 0x00, 0x91, 0x00, 0x25, 0x00, 0x1e, 0x90, 0xc2, 0x14, 0x80, 0x78, 0x80, 0x2f, 0x01, 0xba, 0x01, 0xbc, 0x0d, 0xf0, 0x0c, 0xc0, 0x45, 0x4a, 0xd7, 0xe0, 0xfa, 0xee, 0x49, 0x47, 0x72, 0x30, 0x00, 0xae, 0xf7, 0x81, 0x00, 0x4a, 0x80, 0x10, 0x00, 0x29, 0x40, 0x00, 0x80, 0x0f, 0x40, 0x27, 0x00, 0x39, 0x40, 0x10, 0x80, 0x3f, 0x40, 0x17, 0x00, 0x09, 0x40, 0x7b, 0x00, 0x6f, 0x80, 0x07, 0x01, 0xf0, 0xbf, 0x03, 0x9e, 0x0c, 0x03, 0x3c, 0x04, 0xe0, 0x01, 0xf0, 0x00, 0x80, 0x2f, 0x40, 0x67, 0x00, 0x2f, 0x80, 0x8e, 0xc4, 0x13, 0x56, 0x3d, 0xa2, 0xf0, 0xf2, 0x96, 0xfb, 0x78, 0xfa, 0xca, 0x94, 0x1e, 0x7e, 0x52, 0x7f, 0x49, 0xbb, 0xbf, 0xcb, 0x57, 0xbb, 0x83, 0xb4, 0x15, 0x78, 0xb4, 0x02, 0x59, 0x2b, 0xf0, 0x6c, 0x05, 0xee, 0xe9, 0x4a, 0xdd, 0xbe, 0xf1, 0x64, 0xb4, 0x9f, 0x17, 0xa3, 0xfd, 0x7c, 0x18, 0xcd, 0xe7, 0xcf, 0x68, 0xbd, 0x40, 0xc6, 0xd3, 0x87, 0x20, 0xf9, 0xc5, 0xe8, 0x36, 0xa4, 0x4d, 0xa3, 0x01, 0x90, 0x81, 0x4a, 0x43, 0x5e, 0x9f, 0x6e, 0x21, 0x8a, 0xcc, 0x1c, 0xf2, 0x32, 0xc8, 0xd8, 0x9d, 0xff, 0x8b, 0x7a, 0xb5, 0xae, 0x47, 0xeb, 0x72, 0xcb, 0xdd, 0xca, 0xe5, 0x2c, 0x9b, 0x82, 0xd1, 0xae, 0xde, 0xac, 0x9c, 0x08, 0xbe, 0x0c, 0x94, 0x0c, 0xfc, 0x18, 0xb4, 0x55, 0x57, 0x39, 0x4b, 0x43, 0xc9, 0xea, 0x16, 0xcc, 0xea, 0x64, 0x62, 0x75, 0xe1, 0x59, 0x1d, 0xaa, 0x59, 0x31, 0xcb, 0xff, 0xed, 0xcf, 0x6b, 0x17, 0x5d, 0x26, 0xb5, 0x4b, 0x6f, 0x51, 0x69, 0x0f, 0x22, 0xe9, 0x42, 0xe9, 0xff, 0xda, 0xa5, 0xb9, 0xa4, 0xf6, 0xb5, 0xb3, 0xac, 0x4c, 0x5d, 0x18, 0x4f, 0x00, 0x71, 0x5f, 0x77, 0x6e, 0xdd, 0x3f, 0xe0, 0xe2, 0x45, 0xfe, 0xbb, 0x3f, 0x67, 0x61, 0xbd, 0x48, 0xed, 0xbe, 0x47, 0x01, 0xe2, 0x01, 0x52, 0x01, 0x06, 0x01, 0x0c, 0x03, 0x70, 0x00, 0x14, 0x03, 0x4c, 0x07, 0x58, 0x40, 0xdf, 0xe1, 0xde, 0xb7, 0x97, 0x69, 0xf1, 0x2f, 0xfe, 0x23, 0x0d, 0xaf, 0x7a, 0x0f, 0xde, 0xec, 0x55, 0xb0, 0xf3, 0xc1, 0xa2, 0xdc, 0x86, 0xb9, 0x3f, 0x3d, 0xf3, 0x6e, 0xaf, 0xe5, 0xa3, 0x16, 0xbd, 0xed, 0xff, 0x6d, 0x45, 0xc4, 0x0b, 0x67, 0x36, 0xbd, 0x73, 0xfe, 0xd8, 0x4f, 0x5d, 0x5e, 0x39, 0x7c, 0xaa, 0xc2, 0x7b, 0x63, 0x4a, 0xe8, 0xc4, 0x8f, 0xcb, 0x3e, 0xff, 0x71, 0x53, 0x98, 0x57, 0xe5, 0x17, 0x0f, 0xcd, 0x7b, 0xe8, 0x53, 0xd5, 0xa8, 0xdc, 0x2a, 0xee, 0xc6, 0xcd, 0xcf, 0x9e, 0xb5, 0x4e, 0xdd, 0x16, 0x77, 0xb6, 0xd3, 0xe9, 0xa3, 0xff, 0x2a, 0xf8, 0xae, 0xf6, 0xe7, 0x86, 0xa3, 0x1b, 0x06, 0x4f, 0x39, 0x32, 0x6d, 0xf7, 0x03, 0xf9, 0x4b, 0x86, 0x8e, 0xca, 0x5b, 0x59, 0x7d, 0x2f, 0xfb, 0xce, 0x84, 0x19, 0xa3, 0xf7, 0x5e, 0x09, 0x94, 0x0c, 0x1f, 0xf4, 0x8c, 0x3c, 0xff, 0x54, 0x63, 0xbb, 0xc7, 0x9f, 0x99, 0xad, 0xf0, 0xfb, 0xb5, 0xcf, 0x58, 0x6e, 0x4f, 0xca, 0x18, 0xd5, 0x53, 0xc7, 0xf8, 0xb8, 0xda, 0xb7, 0x1c, 0xcf, 0x16, 0xc7, 0x7a, 0xd4, 0x1e, 0x1a, 0x20, 0x3b, 0x9a, 0x7c, 0xd8, 0x6f, 0xda, 0xbd, 0x77, 0x7d, 0x36, 0xe4, 0xf5, 0xda, 0xb0, 0xb2, 0xd1, 0xb2, 0x6e, 0x49, 0xfe, 0xb7, 0x5b, 0xf6, 0x1e, 0x5f, 0xb3, 0xf5, 0x8e, 0x39, 0xe2, 0x64, 0xfe, 0xc5, 0xc4, 0x73, 0xc3, 0x9f, 0x3f, 0x73, 0xdc, 0xef, 0x9b, 0x0f, 0x0e, 0x3d, 0xfe, 0xa4, 0xf6, 0x94, 0x69, 0xcd, 0xe0, 0xb3, 0x24, 0x66, 0xcf, 0x89, 0xc1, 0xe5, 0x5f, 0xd4, 0x8c, 0x0c, 0xea, 0xba, 0xbe, 0x61, 0xc3, 0xd0, 0x4f, 0x76, 0x76, 0xfb, 0x66, 0xf3, 0xa2, 0x57, 0x37, 0x7d, 0xfe, 0x6e, 0x3b, 0x9d, 0x74, 0xd3, 0xf2, 0xa7, 0x3d, 0x2b, 0x14, 0xbb, 0x94, 0xa7, 0xd6, 0x7d, 0xec, 0xfb, 0x93, 0xc6, 0x58, 0x58, 0xf6, 0x52, 0x56, 0x4e, 0x4a, 0xfb, 0xed, 0x23, 0x1f, 0xfa, 0x60, 0xa3, 0x3d, 0xec, 0xf1, 0x71, 0x67, 0xe2, 0x2a, 0x25, 0xdf, 0x3e, 0x2b, 0x5f, 0x72, 0x98, 0xdb, 0x7a, 0xed, 0x98, 0x4a, 0xff, 0xec, 0xc7, 0xd3, 0x5e, 0x96, 0x6f, 0xdc, 0xf0, 0xf0, 0x1b, 0x5f, 0xd4, 0xbe, 0x5b, 0xb7, 0xe9, 0xe8, 0xa3, 0xa5, 0x5e, 0x7b, 0xdf, 0x6a, 0x47, 0xee, 0x44, 0x2e, 0xf6, 0x5e, 0x39, 0xe7, 0x7b, 0xff, 0x25, 0xc1, 0x2f, 0xe6, 0xfa, 0x6d, 0x51, 0x14, 0x3c, 0x1e, 0x36, 0x6f, 0x54, 0xfe, 0x2b, 0x97, 0x9e, 0x19, 0x2e, 0xc9, 0xcb, 0x1b, 0xdc, 0x10, 0x92, 0x3f, 0x32, 0x7b, 0xda, 0x68, 0xd3, 0xc9, 0x1b, 0xd9, 0x24, 0x35, 0x5f, 0xbe, 0xe8, 0x6a, 0x67, 0xc9, 0xbb, 0xff, 0x9c, 0xac, 0x68, 0xd8, 0xfe, 0x6b, 0xbb, 0x9d, 0x4f, 0x8c, 0xae, 0x3a, 0xb5, 0x2b, 0xe0, 0xd3, 0x9f, 0xd2, 0x66, 0x6e, 0xdb, 0x74, 0xf9, 0xee, 0x67, 0x15, 0x65, 0xd9, 0xdf, 0x3d, 0x74, 0xae, 0xc3, 0xe9, 0xb0, 0xfe, 0xb3, 0x8e, 0x94, 0xdd, 0xfc, 0xfd, 0x68, 0xca, 0xe8, 0x81, 0xeb, 0x46, 0x66, 0xc5, 0x6c, 0x18, 0x7c, 0xf0, 0xed, 0xad, 0xa4, 0xe4, 0xe8, 0x16, 0xd3, 0x05, 0xdb, 0xb9, 0x77, 0xe3, 0x1e, 0x3f, 0xb9, 0xe8, 0xc4, 0x3b, 0x87, 0x76, 0x16, 0x1c, 0x39, 0xde, 0xf0, 0x7b, 0xfc, 0x98, 0x9f, 0x72, 0x23, 0xc7, 0x9e, 0xba, 0xfb, 0xa1, 0xa3, 0x22, 0xe9, 0x34, 0xbf, 0xa9, 0x26, 0x41, 0x16, 0xf6, 0xdc, 0xa3, 0x1e, 0x0f, 0xfd, 0xb0, 0xda, 0x27, 0xe5, 0xe9, 0xef, 0xfc, 0xca, 0xf6, 0xa6, 0x79, 0x3e, 0x1b, 0xdb, 0x5d, 0x1a, 0xb7, 0x7a, 0x9b, 0xaf, 0x4a, 0xb5, 0x57, 0xc9, 0x4d, 0x7f, 0x22, 0x67, 0xc3, 0x23, 0x5c, 0xe1, 0xb4, 0x4f, 0x3e, 0xb3, 0x1f, 0xf5, 0x3e, 0x38, 0xb2, 0xf6, 0x8d, 0xa7, 0xce, 0xde, 0xf1, 0xef, 0x71, 0x6a, 0xef, 0x92, 0xaa, 0x9a, 0x25, 0xea, 0xdd, 0x27, 0x56, 0xae, 0x7f, 0xf2, 0x93, 0xc7, 0x3b, 0x86, 0xaf, 0xf7, 0x9b, 0xf4, 0xe9, 0xe7, 0xc3, 0xfb, 0x54, 0x6f, 0xce, 0xff, 0xf0, 0xea, 0xa6, 0x29, 0xdc, 0xd2, 0x2f, 0x3e, 0xd9, 0xe8, 0xb1, 0xf1, 0x82, 0xb2, 0xe4, 0xe3, 0xc3, 0x4b, 0x2f, 0x1f, 0x4b, 0x7e, 0xec, 0xf5, 0xc3, 0xe3, 0x3f, 0x92, 0x7d, 0xab, 0xed, 0xf0, 0xdc, 0x99, 0xa0, 0x29, 0x17, 0x9f, 0xf1, 0x0d, 0x58, 0x38, 0xaa, 0xcf, 0x54, 0xbf, 0x82, 0xdc, 0xbe, 0x13, 0x72, 0x87, 0xad, 0xac, 0xf5, 0xff, 0xc6, 0x77, 0x81, 0xb7, 0x00, 0x03, 0x77, 0x6d, 0xf7, 0x7f, 0x79, 0x2d, 0xff, 0xb8, 0xbe, 0xdd, 0x82, 0x84, 0x97, 0x14, 0x6f, 0x1f, 0xee, 0x22, 0xb9, 0x91, 0x33, 0x46, 0xbe, 0xa3, 0xe9, 0xb7, 0xec, 0x27, 0x46, 0x94, 0x8f, 0x76, 0xec, 0x7f, 0x30, 0x3f, 0xea, 0xd9, 0xb1, 0x79, 0xf2, 0x1f, 0x9b, 0x8e, 0x76, 0x1e, 0xf7, 0xf2, 0x91, 0xd0, 0xf3, 0xaa, 0xd3, 0x13, 0x86, 0x39, 0xbe, 0xb3, 0x1d, 0xb8, 0xf3, 0xd9, 0xb9, 0xc2, 0x39, 0xdb, 0xae, 0xdd, 0xe9, 0xf8, 0xe9, 0xb6, 0x78, 0xbe, 0x6a, 0xce, 0xb1, 0xe3, 0xc7, 0xdf, 0xae, 0x7b, 0xf3, 0xd0, 0x82, 0x89, 0xd1, 0x27, 0x77, 0xec, 0x1c, 0x74, 0xee, 0x46, 0xfa, 0xa1, 0x2d, 0x8e, 0xeb, 0xef, 0x6d, 0x7d, 0xc2, 0xd1, 0x6f, 0x83, 0xfc, 0x3b, 0xeb, 0xba, 0xa8, 0x01, 0x27, 0xfd, 0x42, 0x4f, 0x7f, 0xe4, 0xd3, 0x39, 0x25, 0xca, 0xc3, 0x76, 0x2b, 0x4e, 0x36, 0x81, 0x3f, 0xc7, 0x5f, 0xfb, 0x72, 0xa5, 0xe3, 0xdc, 0x90, 0x9e, 0x63, 0xe7, 0x5c, 0x4b, 0x1a, 0xb3, 0xed, 0x85, 0xfd, 0x23, 0x3f, 0x99, 0xb5, 0xd5, 0x3e, 0xa5, 0xd3, 0x23, 0x85, 0x87, 0x57, 0xa4, 0xe7, 0x5c, 0x88, 0x3a, 0xa0, 0x1c, 0xbf, 0x68, 0x8b, 0x6f, 0xb2, 0x87, 0x5a, 0x1a, 0xf4, 0xd9, 0x10, 0x4f, 0xad, 0xf1, 0xab, 0xcd, 0x7d, 0xb6, 0xad, 0xfb, 0xdc, 0x57, 0x17, 0xba, 0x7e, 0xd8, 0xfc, 0xe1, 0x9f, 0xe4, 0xca, 0x76, 0x9c, 0x10, 0xde, 0xdf, 0x50, 0xf3, 0x4d, 0x4f, 0xc3, 0xa9, 0xe5, 0x33, 0xff, 0x71, 0x76, 0xed, 0x43, 0xaf, 0x8d, 0xda, 0x51, 0x75, 0xe5, 0x99, 0x1b, 0xda, 0xe7, 0x73, 0xdf, 0x5e, 0x26, 0x2d, 0x58, 0xe0, 0xb3, 0xcc, 0x5b, 0xbe, 0xea, 0x67, 0xff, 0xa8, 0x7e, 0xc5, 0x5e, 0x8e, 0x69, 0x9e, 0xe4, 0x89, 0x07, 0x16, 0x7d, 0x61, 0x9b, 0x7c, 0x61, 0xd3, 0x84, 0xc0, 0x7f, 0x7e, 0x1c, 0xba, 0x56, 0xb9, 0xb1, 0x73, 0xf4, 0xfc, 0xc3, 0x73, 0x5e, 0xfb, 0xe1, 0xd8, 0x36, 0xbf, 0xb2, 0x33, 0xd7, 0x3e, 0xf5, 0xfd, 0xf6, 0x5c, 0xd7, 0xe9, 0x47, 0x0e, 0x1f, 0xbd, 0x7e, 0xf4, 0x82, 0x25, 0xe7, 0xbb, 0x4f, 0x6e, 0x3f, 0x7c, 0x7a, 0xca, 0xd8, 0x49, 0xdb, 0x82, 0xbe, 0xbe, 0xf5, 0x99, 0xf6, 0x1f, 0x85, 0x55, 0xe3, 0xbf, 0x0f, 0xfe, 0x34, 0x79, 0x7c, 0x85, 0x62, 0xd8, 0x25, 0xa1, 0x5d, 0x6e, 0x91, 0x5d, 0xde, 0x67, 0x5f, 0x7b, 0x89, 0xef, 0xf0, 0xb9, 0xa3, 0x97, 0x0b, 0xb7, 0xb3, 0xd7, 0x8e, 0x19, 0x99, 0x27, 0x1c, 0x09, 0xca, 0xff, 0x26, 0x71, 0x85, 0xcf, 0x85, 0xd2, 0x13, 0x7e, 0x87, 0x7f, 0x49, 0x95, 0x4d, 0xc9, 0x7c, 0xcc, 0xe3, 0x93, 0x1d, 0xef, 0x3b, 0xb4, 0x23, 0x6b, 0xf8, 0xa0, 0xdf, 0xfa, 0x8f, 0x49, 0x1e, 0xd8, 0x77, 0xec, 0xf8, 0x6f, 0xd7, 0x1e, 0xca, 0xb5, 0x9d, 0x3a, 0x3e, 0xec, 0x8c, 0xf9, 0x9c, 0xaf, 0xbd, 0xf7, 0xc9, 0x3e, 0xf5, 0xab, 0xb6, 0xae, 0xcd, 0x38, 0xbb, 0x65, 0xf9, 0x57, 0xc9, 0xeb, 0xbe, 0x79, 0xd1, 0xb4, 0x41, 0xf8, 0xe9, 0xf3, 0xcf, 0x6f, 0x84, 0xec, 0xdb, 0xbc, 0x63, 0x46, 0xc6, 0x27, 0x0b, 0x4c, 0x9a, 0xf5, 0x6f, 0xbf, 0xb7, 0xb9, 0x26, 0xca, 0xf3, 0xeb, 0x13, 0xf2, 0x05, 0x99, 0x67, 0x9f, 0xe8, 0xd1, 0xed, 0x94, 0xe3, 0x8b, 0x4f, 0xec, 0x13, 0xc2, 0x77, 0x8e, 0xb4, 0x6d, 0x1a, 0x91, 0xd3, 0x59, 0xaa, 0x2f, 0x0c, 0x5d, 0xb8, 0xde, 0x77, 0x5b, 0xef, 0x2f, 0x95, 0x73, 0xde, 0x1c, 0xe6, 0x79, 0xae, 0x73, 0x98, 0xf4, 0xda, 0x6c, 0x9c, 0xff, 0x0f, 0x76, 0xee, 0x19, 0x17, 0x11, 0x95, 0x3d, 0x39, 0x34, 0x2c, 0xe3, 0xcb, 0x51, 0xf9, 0x5f, 0xc9, 0xfe, 0x35, 0xbe, 0x21, 0x71, 0xe8, 0xb0, 0xf7, 0xa7, 0x0f, 0x8a, 0x5b, 0xbc, 0x7b, 0xcf, 0xa9, 0x19, 0x8a, 0x43, 0x3b, 0xb6, 0xf4, 0x6f, 0xbc, 0x56, 0x37, 0xe3, 0x62, 0xc3, 0xa9, 0xfd, 0x6b, 0x36, 0x0c, 0x52, 0x6e, 0x58, 0x3b, 0x71, 0xe0, 0xf2, 0x29, 0x61, 0x73, 0x5e, 0x5a, 0x12, 0xf2, 0x8d, 0x6d, 0x47, 0xc0, 0xe0, 0x8c, 0x53, 0xdd, 0x54, 0xa5, 0x0d, 0x45, 0x47, 0x46, 0x5e, 0x8b, 0x9b, 0x1f, 0xbe, 0xf6, 0xc4, 0x90, 0xde, 0x1b, 0x2e, 0x05, 0x86, 0x2c, 0xd9, 0x70, 0xc2, 0x73, 0xca, 0xd4, 0xc5, 0x93, 0x3b, 0x2f, 0x79, 0xf2, 0x35, 0xb2, 0x2a, 0xb8, 0x2a, 0xac, 0xf1, 0xdb, 0x55, 0x51, 0xfb, 0x97, 0x5e, 0x1a, 0x3f, 0x62, 0x84, 0x90, 0x9f, 0x1f, 0x72, 0x34, 0xae, 0xdf, 0xb9, 0xaf, 0x87, 0xf9, 0x2f, 0x5f, 0x34, 0x55, 0xf3, 0xd6, 0xac, 0x37, 0x3a, 0x5c, 0x7c, 0x7f, 0x5d, 0x12, 0xb7, 0x6d, 0xd5, 0xf8, 0x91, 0xd7, 0xeb, 0xbe, 0x7f, 0xaf, 0xee, 0x66, 0xcd, 0x8f, 0x5f, 0x9e, 0x9d, 0xa2, 0x39, 0xfd, 0xd5, 0xba, 0xd1, 0x23, 0x46, 0xac, 0x5d, 0x9d, 0x90, 0xf4, 0xc6, 0xcf, 0x85, 0x79, 0x07, 0x74, 0xe3, 0x8a, 0xee, 0x8d, 0x79, 0xac, 0x67, 0xde, 0x5a, 0x4e, 0x3f, 0xec, 0x9a, 0xaf, 0x97, 0xb7, 0x21, 0x20, 0x24, 0xba, 0xe0, 0x5c, 0x52, 0xd4, 0xcd, 0x5d, 0x23, 0xbc, 0xd6, 0x5d, 0x2d, 0xca, 0x7c, 0xb6, 0x21, 0x6f, 0xb4, 0x69, 0x8b, 0xfe, 0xe6, 0x6f, 0x6f, 0xf5, 0xdc, 0xb1, 0xf1, 0xe5, 0x90, 0x79, 0xcf, 0x57, 0x7a, 0xad, 0x88, 0xec, 0xf8, 0xc6, 0xd6, 0xdf, 0xfd, 0xa7, 0xce, 0xde, 0xfc, 0xc8, 0xaa, 0xb3, 0x2f, 0xc4, 0xae, 0xbb, 0x16, 0xfd, 0xdc, 0xcd, 0x17, 0x84, 0xdc, 0x3a, 0xeb, 0xb6, 0xb8, 0xaf, 0x3a, 0xff, 0x2b, 0xeb, 0xac, 0x3e, 0xb6, 0xfe, 0x85, 0x41, 0x9e, 0x3f, 0x65, 0x4f, 0x4c, 0xd8, 0x31, 0x28, 0xec, 0xa5, 0x6f, 0x33, 0x43, 0x76, 0x2d, 0xec, 0x30, 0x43, 0x32, 0xdb, 0x7f, 0x8b, 0xf9, 0xbd, 0x6e, 0x75, 0x53, 0xbe, 0x88, 0x3e, 0xb5, 0x23, 0x7a, 0xc5, 0x57, 0x7e, 0x5d, 0xb7, 0x34, 0xa4, 0xf8, 0x2c, 0x7e, 0x7f, 0xee, 0x03, 0xb3, 0x17, 0x1f, 0x1c, 0x7e, 0x80, 0x78, 0x27, 0x9e, 0xe8, 0x69, 0x1d, 0xdb, 0x98, 0x3d, 0x73, 0xfc, 0xf7, 0x19, 0xfb, 0x36, 0x6f, 0x19, 0x91, 0xf9, 0xf6, 0x8a, 0xfc, 0x0e, 0x15, 0xb3, 0xfb, 0x1d, 0x9f, 0xb7, 0xd8, 0xff, 0x95, 0xb3, 0x27, 0x96, 0xa4, 0xed, 0x3e, 0xb0, 0xaa, 0xfd, 0x95, 0xef, 0x1b, 0x0f, 0xff, 0xda, 0xb8, 0x7f, 0x41, 0x71, 0xf6, 0x89, 0xe1, 0x79, 0x2f, 0x5c, 0x7a, 0xc8, 0x9c, 0xb9, 0xe1, 0xec, 0x93, 0x83, 0xa6, 0xbe, 0x11, 0xe4, 0x1f, 0x90, 0xd5, 0xae, 0x43, 0xb7, 0x07, 0x35, 0xd1, 0x45, 0xa7, 0x1f, 0xef, 0x16, 0xf7, 0xda, 0xe8, 0x7b, 0x79, 0xef, 0x97, 0x5d, 0x1a, 0x76, 0xe9, 0x89, 0xfd, 0xde, 0x8f, 0xa4, 0xd6, 0x44, 0x8f, 0x92, 0xcc, 0x5b, 0xfb, 0x76, 0xf0, 0x8c, 0x37, 0x2e, 0x3c, 0xfa, 0xfe, 0x81, 0xae, 0xfa, 0xad, 0xf7, 0xf8, 0x0f, 0x35, 0xdf, 0x7f, 0xb4, 0xbe, 0x5f, 0xcd, 0x2f, 0x6f, 0x04, 0x4c, 0x09, 0x9b, 0xee, 0xbd, 0x2e, 0x7f, 0xaf, 0x55, 0xf3, 0x41, 0x4d, 0x46, 0x87, 0xcb, 0xbf, 0x4f, 0x4c, 0xea, 0x71, 0x61, 0xf4, 0xf8, 0x1c, 0x63, 0xbf, 0x17, 0x6e, 0x45, 0x69, 0xac, 0x9f, 0x3e, 0xe4, 0xdd, 0xb9, 0x44, 0x16, 0xa0, 0xef, 0x35, 0x20, 0x63, 0xeb, 0x8d, 0x74, 0xeb, 0xec, 0x4f, 0x5e, 0x18, 0x7d, 0xb6, 0x88, 0x9f, 0x78, 0xad, 0xe7, 0x8f, 0x97, 0x6e, 0x36, 0x35, 0xdd, 0xdb, 0xf1, 0xc5, 0xb1, 0x9a, 0x79, 0x65, 0x07, 0xf6, 0xaf, 0x78, 0x7c, 0xca, 0x8c, 0xa8, 0xc6, 0xa5, 0xf3, 0xbc, 0xb6, 0x7c, 0xbc, 0x35, 0xb3, 0x74, 0xe5, 0xfb, 0xa3, 0x1f, 0xeb, 0x33, 0x65, 0xc9, 0x00, 0xf5, 0x92, 0x55, 0x3e, 0xde, 0x1b, 0x1a, 0xf7, 0xaa, 0xd6, 0xee, 0xaf, 0x78, 0xfa, 0xda, 0x88, 0x41, 0x49, 0x0d, 0xf9, 0xfe, 0x05, 0xa7, 0xfa, 0x7d, 0x5d, 0xb2, 0xc3, 0x7f, 0xd6, 0xcd, 0x61, 0x01, 0xf1, 0x97, 0xe3, 0xba, 0x49, 0xb7, 0xe7, 0x17, 0x6d, 0x3f, 0x39, 0x3e, 0xae, 0xfc, 0x95, 0xa8, 0x13, 0xc9, 0x73, 0xc2, 0x2e, 0xc9, 0xdf, 0x25, 0x1b, 0xbe, 0xda, 0xda, 0x79, 0xea, 0xd4, 0x67, 0xe3, 0x66, 0x74, 0xca, 0x19, 0xb6, 0xe5, 0x1f, 0xf1, 0xe3, 0xeb, 0x96, 0x0c, 0xcb, 0x3f, 0x75, 0xaa, 0x43, 0xd8, 0xa0, 0x2e, 0xca, 0xa8, 0x89, 0x4f, 0x77, 0xef, 0x1c, 0xb6, 0xac, 0x2f, 0x09, 0xf9, 0xee, 0xb3, 0x25, 0x24, 0x60, 0xc5, 0x94, 0x9e, 0x19, 0x33, 0xd7, 0x66, 0x57, 0xce, 0xdf, 0x90, 0x71, 0xe8, 0xbb, 0x86, 0xaf, 0x82, 0x76, 0x5e, 0x6b, 0x78, 0xe2, 0xda, 0x8e, 0xf7, 0x17, 0xde, 0x3a, 0xb5, 0xf8, 0xd8, 0x5a, 0xaf, 0xad, 0x3f, 0x7d, 0x1a, 0x32, 0x7b, 0xe5, 0xb2, 0x9e, 0x67, 0xf3, 0xa6, 0xe9, 0xaf, 0xe9, 0xf7, 0xe5, 0xbd, 0x70, 0xf5, 0x48, 0x91, 0x75, 0xcd, 0xed, 0x11, 0x9d, 0x0b, 0xbf, 0x4f, 0xd2, 0x87, 0xdb, 0xcf, 0x46, 0x7d, 0xff, 0xe2, 0x57, 0x5e, 0x2b, 0x32, 0xeb, 0x32, 0x9f, 0x19, 0x78, 0x73, 0xb4, 0x5a, 0xba, 0xee, 0xe6, 0x0f, 0x9d, 0x57, 0xed, 0x78, 0xc7, 0x34, 0x75, 0x9e, 0xa3, 0xc7, 0x1b, 0x2b, 0xb4, 0xb5, 0x5f, 0xad, 0xdd, 0x74, 0xef, 0xec, 0x1b, 0x77, 0x8e, 0xdf, 0x3c, 0x10, 0xf3, 0x4d, 0xdd, 0xbd, 0x7f, 0x96, 0xaf, 0xca, 0xdb, 0xfa, 0xea, 0xba, 0x61, 0xf7, 0xd6, 0xbd, 0xe1, 0xdd, 0xf7, 0x83, 0xa9, 0xd1, 0x2f, 0x1a, 0x42, 0x34, 0x55, 0xbd, 0xbc, 0x3a, 0x5c, 0xef, 0xa2, 0x4f, 0x8a, 0xf0, 0xea, 0x39, 0xfe, 0x39, 0x6b, 0xd1, 0xf7, 0xeb, 0x07, 0xe7, 0xd5, 0xfc, 0x3a, 0x21, 0x69, 0x4a, 0xd4, 0x33, 0x23, 0xd6, 0x8d, 0xdf, 0xdf, 0x78, 0x22, 0xf5, 0xf0, 0xf7, 0x97, 0xda, 0xdd, 0x39, 0xb0, 0xe1, 0xc0, 0xf9, 0x13, 0x53, 0x67, 0x7f, 0xb4, 0x38, 0xc0, 0xb6, 0x71, 0x76, 0x37, 0xdf, 0xd7, 0x57, 0x14, 0xed, 0x99, 0xba, 0x25, 0xee, 0x65, 0x8f, 0x6e, 0x23, 0x92, 0x3a, 0x45, 0xe7, 0x7b, 0xf5, 0xec, 0xd0, 0x6f, 0xa7, 0xce, 0xdf, 0x7f, 0x9a, 0x63, 0xd0, 0x12, 0xcb, 0xc4, 0xcc, 0x55, 0x1e, 0x43, 0x5e, 0x68, 0xac, 0x4e, 0xc9, 0xde, 0x3f, 0x69, 0x52, 0xf4, 0x57, 0x0f, 0x2f, 0xe9, 0xd6, 0xf0, 0xd4, 0x27, 0xfe, 0xef, 0xbf, 0xbe, 0xba, 0xc3, 0xe2, 0x33, 0x3f, 0x64, 0x92, 0xce, 0x77, 0x07, 0xf5, 0x1c, 0x76, 0x22, 0x3b, 0xfb, 0xd5, 0x83, 0x2f, 0x64, 0x9c, 0xec, 0xff, 0xfd, 0xa0, 0x8e, 0x69, 0x8d, 0x13, 0x87, 0xfe, 0xf3, 0x44, 0xd8, 0xa2, 0xec, 0x03, 0x21, 0x47, 0xc3, 0x66, 0xcf, 0x78, 0x20, 0x72, 0xf1, 0x96, 0xf4, 0x87, 0xb7, 0xd4, 0xcd, 0x93, 0xaf, 0x38, 0x55, 0xf3, 0xd4, 0xc4, 0x9b, 0x57, 0x92, 0x47, 0xef, 0xf8, 0x30, 0xdf, 0x3a, 0x6f, 0xec, 0xf3, 0x19, 0x2b, 0x8c, 0x31, 0x01, 0x51, 0x75, 0xdd, 0xbc, 0xbd, 0x56, 0x29, 0x34, 0x99, 0xb9, 0xed, 0xfb, 0x8d, 0x0e, 0x5d, 0xfc, 0xfe, 0x0b, 0xb5, 0x73, 0xb7, 0x5a, 0xdf, 0x7d, 0x67, 0x5e, 0x67, 0xfb, 0xe7, 0x33, 0xf4, 0xdd, 0x6f, 0xec, 0xdf, 0x7a, 0xfe, 0xe7, 0x9a, 0xd9, 0x6f, 0x56, 0xdf, 0x3b, 0x9b, 0x7d, 0xea, 0xd2, 0xb5, 0x6e, 0x81, 0x5b, 0xbf, 0xff, 0xdc, 0xef, 0xfd, 0x9a, 0xbb, 0xda, 0x19, 0x53, 0xfa, 0xf5, 0x9b, 0xb7, 0x6e, 0x62, 0x51, 0x8d, 0xe6, 0xb3, 0x31, 0xfb, 0x3b, 0xdc, 0xb6, 0x5c, 0x4a, 0xea, 0xf3, 0x8f, 0x7b, 0xe3, 0x27, 0x9c, 0x19, 0x9d, 0xb7, 0xe1, 0xab, 0x89, 0xc3, 0x1a, 0x7e, 0xc9, 0xf0, 0xee, 0xfd, 0x9b, 0x35, 0x7a, 0xdc, 0x26, 0xef, 0xb5, 0x1f, 0xbf, 0x19, 0xf0, 0x46, 0xfd, 0x8c, 0x7e, 0x07, 0x1e, 0x5d, 0xa0, 0xb9, 0x57, 0x4c, 0x89, 0xa4, 0x1d, 0xb9, 0xbd, 0x3d, 0xa6, 0x1e, 0x1d, 0x2b, 0x4d, 0xda, 0xf6, 0xa4, 0x97, 0xf7, 0xca, 0x33, 0xf2, 0xfd, 0x3b, 0x7e, 0x96, 0xcd, 0x2e, 0x5b, 0xe7, 0x39, 0x28, 0x68, 0x9a, 0xff, 0x03, 0x83, 0x37, 0xb5, 0x3b, 0xd4, 0x67, 0xae, 0xdf, 0x2b, 0xd3, 0x8e, 0x2b, 0x87, 0x5c, 0xfb, 0xde, 0xbb, 0xd3, 0x9d, 0x51, 0x8a, 0x93, 0x0b, 0x32, 0x7c, 0x96, 0x87, 0xf9, 0xf8, 0x0e, 0x4f, 0x7e, 0x3c, 0x44, 0xfb, 0x76, 0xd1, 0x43, 0xb5, 0x7b, 0x93, 0x1f, 0x7e, 0x6b, 0x7c, 0x97, 0x2e, 0xfc, 0x43, 0x3d, 0x3a, 0x1b, 0x7d, 0xd7, 0x74, 0xba, 0x3a, 0xf2, 0xb5, 0xe0, 0x0f, 0xce, 0xed, 0x78, 0x70, 0xcc, 0x86, 0x5f, 0x03, 0x7a, 0xdd, 0xd8, 0xf3, 0xc0, 0x6f, 0x4b, 0x84, 0xf6, 0x1f, 0x6b, 0xdf, 0x53, 0x3d, 0x97, 0x32, 0xaf, 0x43, 0xec, 0xb0, 0xc0, 0xc0, 0x26, 0x53, 0xb7, 0xa0, 0x4d, 0x73, 0x26, 0x74, 0x9c, 0x50, 0x3b, 0x30, 0x7a, 0x60, 0xd2, 0xf9, 0xc7, 0xe6, 0x1a, 0x4e, 0xf4, 0xd9, 0x3b, 0x7f, 0x4e, 0x8c, 0xef, 0xed, 0xcf, 0xfa, 0x25, 0xfc, 0x12, 0xdb, 0x77, 0xfa, 0x54, 0xdf, 0xd8, 0xea, 0x98, 0xf4, 0xc7, 0xa5, 0x69, 0xa3, 0xa3, 0x9e, 0xea, 0x98, 0xd5, 0x7b, 0xd9, 0xbf, 0x0a, 0x7b, 0x9d, 0xfe, 0x32, 0x2a, 0x32, 0x78, 0x95, 0xa4, 0xe7, 0x13, 0x5f, 0x4c, 0x35, 0x2d, 0x3a, 0xf6, 0x49, 0xc4, 0x91, 0xbc, 0xcb, 0x8f, 0xb6, 0x97, 0x7c, 0xa7, 0xc9, 0xfb, 0xa1, 0xf2, 0x91, 0x55, 0x73, 0xdf, 0xef, 0x7e, 0xad, 0x67, 0x93, 0x36, 0xec, 0x1f, 0x7b, 0xbb, 0x65, 0x0f, 0x4c, 0x51, 0xaf, 0xe8, 0xfe, 0x4f, 0xee, 0xd2, 0xab, 0xea, 0xae, 0x9a, 0x9b, 0x1d, 0xf4, 0xa5, 0xeb, 0x75, 0xa1, 0x9b, 0xcf, 0x3e, 0xdc, 0xe3, 0x2e, 0x9f, 0xa4, 0xeb, 0xeb, 0xf3, 0x6c, 0xd8, 0xb3, 0x21, 0x0d, 0x86, 0x4f, 0xc6, 0x7d, 0x19, 0xfe, 0xeb, 0x9e, 0xa5, 0xc6, 0xde, 0x6f, 0x7d, 0x58, 0xb4, 0x74, 0x76, 0xf5, 0xb3, 0x59, 0x3f, 0xfe, 0xf6, 0x5c, 0x97, 0x27, 0xd7, 0x16, 0x9f, 0x79, 0xf4, 0xd5, 0xf1, 0x0b, 0x1e, 0x09, 0x19, 0x37, 0x78, 0x50, 0x68, 0x49, 0xc7, 0xeb, 0xc5, 0xcf, 0x1f, 0x7b, 0x2d, 0x71, 0xe2, 0xcb, 0x67, 0x4a, 0x5f, 0x1c, 0xb0, 0x71, 0xd0, 0xbf, 0xfc, 0x14, 0x41, 0x65, 0xdf, 0x64, 0x77, 0x7d, 0xa1, 0xbc, 0xe4, 0x9d, 0x52, 0x4b, 0x97, 0x05, 0x13, 0x64, 0x2b, 0xf6, 0xfd, 0x73, 0xd7, 0xbe, 0x7b, 0xf9, 0x5b, 0xc3, 0xab, 0x0a, 0x26, 0x26, 0xbc, 0x54, 0x18, 0xdd, 0x78, 0x76, 0x6c, 0x63, 0xe5, 0x4f, 0x79, 0x1b, 0xa6, 0xe7, 0xe7, 0x8e, 0xbf, 0xf2, 0x8f, 0x9c, 0x9e, 0xe9, 0xd2, 0x31, 0x37, 0xa3, 0x7b, 0x65, 0x7f, 0xf4, 0xa2, 0xe2, 0x99, 0x82, 0x0e, 0xfd, 0x46, 0x86, 0x7e, 0x60, 0xe7, 0x7f, 0xda, 0x3e, 0x78, 0xf4, 0x7b, 0x27, 0x8e, 0x8e, 0x1a, 0xf5, 0xf9, 0x45, 0xbb, 0xda, 0x63, 0xb3, 0xe3, 0xfc, 0x98, 0xd9, 0xd6, 0x13, 0xfb, 0xb9, 0xfe, 0x1d, 0xde, 0xec, 0x38, 0x20, 0xe3, 0xe1, 0x54, 0xdb, 0xbc, 0xe7, 0x5f, 0x18, 0x74, 0xf6, 0x99, 0xbb, 0xa9, 0x21, 0xde, 0xfb, 0x53, 0x86, 0x7d, 0x3a, 0x7f, 0xe0, 0x92, 0xef, 0xde, 0x4d, 0xda, 0xb9, 0x74, 0x49, 0xb2, 0xbc, 0xfe, 0xa3, 0x44, 0x73, 0xea, 0xad, 0x84, 0xc9, 0x9a, 0xed, 0x71, 0x5f, 0x47, 0x24, 0x98, 0xdb, 0x65, 0x3d, 0x67, 0xe9, 0x7f, 0x49, 0x1f, 0x3f, 0x73, 0xd6, 0x43, 0x99, 0xd7, 0x73, 0xd2, 0x86, 0x3c, 0x2a, 0x75, 0x3c, 0xf1, 0xfc, 0xd6, 0xbe, 0x43, 0x3f, 0x3d, 0xee, 0x9d, 0x71, 0xbb, 0x7a, 0x56, 0x7a, 0xcc, 0xea, 0x2d, 0x69, 0x65, 0x81, 0x17, 0x06, 0x6f, 0x9b, 0x78, 0x6c, 0xd8, 0x85, 0xc7, 0xea, 0xfe, 0xc1, 0x65, 0x9c, 0x7b, 0xd2, 0x7e, 0x75, 0x7a, 0xd6, 0x3b, 0x2f, 0x7d, 0x3c, 0xe2, 0xe7, 0x79, 0x91, 0xc3, 0x7b, 0xfc, 0xee, 0xf1, 0x54, 0x61, 0xe2, 0xb0, 0xa7, 0x3f, 0x34, 0x16, 0x7c, 0xdf, 0xab, 0x73, 0xf9, 0xf9, 0xdf, 0x9e, 0xfd, 0xf4, 0xc2, 0xc7, 0xdf, 0xfc, 0x72, 0xf1, 0xb9, 0x77, 0x4f, 0x5d, 0x8a, 0xfd, 0x64, 0xf8, 0x8f, 0x4d, 0xa7, 0xf2, 0x7e, 0xd8, 0xe4, 0x88, 0xa8, 0x9d, 0xe0, 0xe7, 0x79, 0x4d, 0x6b, 0x8b, 0xfe, 0xa5, 0x96, 0x6b, 0x77, 0xe5, 0xad, 0xe5, 0x43, 0xaf, 0xf2, 0x0d, 0x23, 0xeb, 0x8c, 0x17, 0x6a, 0x7f, 0xba, 0x5a, 0x71, 0xe4, 0xe7, 0x0f, 0xa2, 0x66, 0x5c, 0x1e, 0x33, 0xfc, 0xf3, 0x7b, 0x0f, 0x6c, 0xaa, 0xbf, 0x7b, 0xe8, 0xf0, 0xee, 0xa6, 0x57, 0xf2, 0x97, 0x0b, 0x43, 0xe4, 0xab, 0x1a, 0x3b, 0xa9, 0x0c, 0xbf, 0x9f, 0x9c, 0xd0, 0xf9, 0xce, 0xf2, 0x9d, 0x96, 0xdb, 0xc3, 0xd7, 0x3e, 0x7f, 0x93, 0xfc, 0x64, 0xbd, 0xb1, 0x63, 0xca, 0x8b, 0xf5, 0x53, 0x1f, 0xd7, 0x5e, 0x4f, 0x7a, 0xa2, 0x7d, 0x83, 0x77, 0xdc, 0xc2, 0x5f, 0xf7, 0x87, 0xbe, 0xfd, 0xdb, 0xec, 0x45, 0x8d, 0xb7, 0x06, 0x09, 0x5f, 0x9f, 0x2a, 0x1d, 0xc1, 0x9f, 0xdc, 0xdc, 0xfb, 0x89, 0xd3, 0x77, 0x5f, 0xf6, 0xff, 0xb6, 0xef, 0xc5, 0xc7, 0xce, 0x3e, 0xfb, 0xeb, 0xd6, 0x73, 0x9f, 0xbc, 0x31, 0xf3, 0xbb, 0x5f, 0xbb, 0x1e, 0x3e, 0xd3, 0x7b, 0xc0, 0x0f, 0x27, 0xf2, 0x94, 0x27, 0x8f, 0xaf, 0xb2, 0x5f, 0x3b, 0x7a, 0xed, 0xe4, 0xc6, 0x63, 0x61, 0xeb, 0x26, 0xd5, 0x64, 0xbf, 0x23, 0x3b, 0xb4, 0xe2, 0xe0, 0xa3, 0x47, 0x2e, 0x15, 0xe5, 0x1e, 0xd6, 0x74, 0x1a, 0xf1, 0xd5, 0x53, 0x4d, 0xaa, 0x9d, 0xcb, 0x16, 0x76, 0xdf, 0x75, 0x5a, 0x3f, 0x71, 0x77, 0xb0, 0xb9, 0xff, 0x8e, 0x27, 0x86, 0x1e, 0xf8, 0x72, 0x51, 0xec, 0xef, 0xdb, 0x8f, 0x4c, 0x7e, 0xab, 0xba, 0x7d, 0xdd, 0xa2, 0xfd, 0x03, 0x3f, 0x5a, 0xb9, 0x6f, 0xee, 0x57, 0x6f, 0xec, 0xd9, 0xfb, 0xcf, 0x5d, 0x7b, 0x7d, 0xdb, 0x5f, 0x3f, 0x90, 0xe0, 0x55, 0xf2, 0xf5, 0xf4, 0x82, 0xf8, 0x6f, 0xaa, 0x8f, 0x74, 0x3a, 0x28, 0xfd, 0x2c, 0x6c, 0xde, 0x47, 0x8b, 0xcd, 0x95, 0x05, 0x77, 0xc7, 0xcf, 0x0f, 0xb5, 0x84, 0x2f, 0xf8, 0x49, 0xf7, 0xe0, 0xe2, 0xf7, 0xfa, 0x2e, 0x7b, 0x65, 0x54, 0xe6, 0x07, 0x8b, 0xd4, 0x97, 0x6f, 0x2c, 0x3c, 0x5f, 0xfe, 0xd5, 0x1b, 0x5b, 0x77, 0xdf, 0x5e, 0x3e, 0xf1, 0xc3, 0x6f, 0x96, 0x45, 0x3f, 0xb0, 0xf8, 0xf5, 0xc6, 0x17, 0xde, 0x5c, 0xb2, 0xa1, 0x50, 0xf3, 0xea, 0x78, 0xcf, 0x07, 0x5e, 0xeb, 0xb9, 0xc5, 0xb6, 0xf4, 0xe6, 0xa1, 0x7f, 0xcd, 0x7e, 0xb9, 0x97, 0x69, 0xd6, 0x80, 0xa7, 0xbd, 0xe6, 0xf8, 0x7d, 0xff, 0xd4, 0xdc, 0x6f, 0x66, 0x8e, 0x99, 0x51, 0xfe, 0xfa, 0x95, 0x99, 0x96, 0xdf, 0xbe, 0x7d, 0x59, 0xd6, 0x7f, 0x72, 0xc5, 0xae, 0x6e, 0x1b, 0xa6, 0x2c, 0x1d, 0x55, 0x31, 0x39, 0xcb, 0xff, 0x8b, 0xf2, 0x2e, 0x55, 0x97, 0x26, 0x9d, 0x39, 0x7d, 0x68, 0xea, 0x82, 0x03, 0x99, 0xd3, 0x06, 0xbf, 0xf7, 0xcc, 0x4b, 0x1d, 0x83, 0x63, 0xa6, 0x1f, 0x2b, 0xf6, 0x5b, 0x75, 0xa1, 0x66, 0xc5, 0x4a, 0x6e, 0xf3, 0x2b, 0xab, 0xed, 0xb2, 0x83, 0x1f, 0xbc, 0x33, 0xf6, 0xce, 0xda, 0x9f, 0x4b, 0xcb, 0x3e, 0xea, 0x11, 0x30, 0xe0, 0xc3, 0xc2, 0x35, 0x01, 0x6b, 0x3e, 0xdc, 0xf5, 0xc8, 0xfb, 0xd7, 0x27, 0x05, 0xbf, 0xf7, 0xe8, 0xcf, 0xc6, 0x77, 0x9e, 0x1f, 0x32, 0xee, 0xdd, 0x4f, 0xfb, 0xc5, 0xad, 0xb8, 0xdd, 0x63, 0xe7, 0x9b, 0x31, 0xf1, 0x37, 0xdf, 0x2e, 0xbb, 0xb7, 0xfa, 0xad, 0x6d, 0xaf, 0xbc, 0xbe, 0x61, 0xe7, 0x73, 0x35, 0xeb, 0xe5, 0x0f, 0xfe, 0xb8, 0xd1, 0xfc, 0xfe, 0xb6, 0x4f, 0x27, 0x7f, 0xfd, 0xf2, 0xba, 0xaf, 0xbf, 0x55, 0x7e, 0xd2, 0xee, 0xe3, 0x3e, 0x1f, 0xf7, 0x6f, 0x97, 0x5d, 0x35, 0x73, 0xf4, 0x90, 0x2d, 0x27, 0xd4, 0x39, 0x9b, 0x3b, 0x58, 0x9f, 0xde, 0x94, 0x71, 0x4b, 0xfe, 0xd9, 0xbc, 0x65, 0x3d, 0xb7, 0x9e, 0x9d, 0xb1, 0xfe, 0xf3, 0x90, 0xf3, 0x53, 0xbe, 0x18, 0xf6, 0xd4, 0xe9, 0x6d, 0x4b, 0x22, 0xaf, 0xe2, 0xfc, 0xdf, 0xb4, 0xd5, 0x31, 0x7a, 0xb5, 0xf7, 0x9e, 0x99, 0x01, 0x1b, 0x3e, 0xfa, 0x65, 0x6e, 0xf6, 0x2b, 0x4f, 0xf4, 0x3e, 0x5b, 0x1f, 0xf1, 0x48, 0xde, 0xd3, 0x67, 0x5e, 0x3f, 0x11, 0xfd, 0xd9, 0x57, 0xeb, 0x75, 0xd7, 0xfe, 0xa5, 0x18, 0x34, 0xa3, 0xf0, 0xf3, 0xf3, 0xa3, 0x4e, 0x48, 0x5e, 0x92, 0xd8, 0x8e, 0x7f, 0xb1, 0xe9, 0x46, 0xee, 0xc9, 0xef, 0xce, 0x9f, 0x1b, 0xff, 0x68, 0xd6, 0x33, 0xaa, 0xa1, 0x69, 0x0f, 0x3e, 0xf1, 0x46, 0xdd, 0xbb, 0xa6, 0xc6, 0x46, 0xd5, 0x1b, 0x81, 0x96, 0x35, 0xb7, 0x9f, 0x3d, 0xf7, 0xcf, 0xea, 0x3d, 0x8e, 0xdd, 0xef, 0x7f, 0xf8, 0x7c, 0xb1, 0x22, 0xfe, 0xeb, 0x83, 0x85, 0xda, 0x45, 0x1f, 0xbe, 0x58, 0x14, 0xd6, 0x3e, 0xb8, 0x43, 0xbf, 0x77, 0x3e, 0xfd, 0xfd, 0xa5, 0xe0, 0x9a, 0xe5, 0x9d, 0xbe, 0xa9, 0xeb, 0xfe, 0xd6, 0x73, 0x73, 0x2d, 0x55, 0xbb, 0xb8, 0x35, 0x8a, 0x09, 0xc9, 0x7b, 0x57, 0x44, 0x7c, 0xd4, 0x37, 0x78, 0xce, 0x9e, 0x7f, 0xf8, 0xf4, 0x71, 0x6c, 0x58, 0xf7, 0x12, 0xa9, 0x31, 0xa6, 0x45, 0x8f, 0x79, 0xe5, 0xca, 0xd3, 0xca, 0x69, 0x4f, 0xd6, 0x5f, 0x78, 0xfc, 0x87, 0x57, 0x5e, 0x1a, 0x3d, 0xfd, 0xa5, 0x43, 0xdf, 0xc5, 0x9c, 0x5f, 0xff, 0xcd, 0xdc, 0x41, 0xc3, 0xc6, 0x3f, 0xaa, 0xeb, 0x77, 0xb9, 0x56, 0x35, 0x3d, 0x3d, 0x6b, 0xfc, 0x45, 0xf3, 0xd5, 0x93, 0x7e, 0xb7, 0x07, 0x7f, 0x91, 0x53, 0x1f, 0x7a, 0xfb, 0x4d, 0xeb, 0x2b, 0x6f, 0xec, 0x1c, 0xa6, 0x36, 0xe9, 0x2f, 0x2c, 0x7f, 0x62, 0xd0, 0x8b, 0xfd, 0x0b, 0x6f, 0xed, 0xfe, 0x55, 0xb1, 0xe0, 0x98, 0xf9, 0xfd, 0x7f, 0x15, 0xdc, 0xad, 0x0e, 0xee, 0xf5, 0x46, 0x4d, 0xea, 0xec, 0x6e, 0x9f, 0x86, 0xbe, 0xb1, 0x38, 0xf8, 0xab, 0xee, 0xfa, 0x17, 0x57, 0x6c, 0xbe, 0x97, 0xfc, 0xa0, 0x34, 0x8e, 0x2b, 0x53, 0x35, 0xcc, 0x9d, 0xbf, 0xd2, 0x5a, 0xf7, 0xdb, 0x6b, 0x81, 0x59, 0x8f, 0x77, 0x5b, 0xd9, 0x2f, 0xab, 0xe7, 0x43, 0x95, 0x1b, 0x5f, 0x7e, 0xf3, 0xb7, 0x23, 0x81, 0xe3, 0xbe, 0xc9, 0x5d, 0xb3, 0x6f, 0x65, 0xbb, 0x6d, 0x2f, 0x7a, 0x7d, 0x2f, 0xff, 0x92, 0x9f, 0xfa, 0xd4, 0x8a, 0xa2, 0xc3, 0x97, 0x42, 0x3a, 0x7e, 0xda, 0xb0, 0x6a, 0xd3, 0x93, 0x29, 0x1d, 0xce, 0xc5, 0x1e, 0xda, 0xf1, 0xe3, 0xb4, 0x31, 0x13, 0xcb, 0xcf, 0xff, 0x73, 0xbf, 0xd1, 0xff, 0xcb, 0xf1, 0xd6, 0xbc, 0xfd, 0x7e, 0xed, 0xde, 0x7a, 0xee, 0xe3, 0x9c, 0xdd, 0x23, 0x65, 0xbb, 0x7b, 0x9c, 0xda, 0xb4, 0x22, 0x25, 0xa1, 0x70, 0xc9, 0xaf, 0x77, 0x8f, 0x08, 0x95, 0xbf, 0xd8, 0xd3, 0x26, 0x0e, 0x3d, 0xdd, 0xbb, 0xb3, 0xff, 0x67, 0xdd, 0x07, 0x6e, 0xf4, 0x34, 0xeb, 0xde, 0xa9, 0xba, 0xb6, 0x2b, 0x44, 0x59, 0xf1, 0xf6, 0xa4, 0x6f, 0xab, 0x3a, 0x3d, 0xe6, 0x38, 0xf1, 0x62, 0xe8, 0xe1, 0xd2, 0x79, 0x0b, 0xc6, 0x3e, 0xdc, 0xd0, 0x47, 0xfb, 0x9b, 0xc7, 0x94, 0xa5, 0x95, 0xf6, 0x79, 0xc6, 0x7e, 0x15, 0x3d, 0x16, 0x64, 0x5d, 0x5d, 0x9f, 0xc0, 0x67, 0x2a, 0x6f, 0x7b, 0xf5, 0xec, 0x32, 0x70, 0xe5, 0xb9, 0xf7, 0xae, 0x7f, 0xb3, 0xb9, 0x69, 0xfe, 0xb9, 0x2b, 0x49, 0xe1, 0x9b, 0x5e, 0xce, 0x7c, 0xad, 0xa3, 0xe3, 0x4a, 0xf7, 0x22, 0xe9, 0xb3, 0xf5, 0xd6, 0x2d, 0x7b, 0x53, 0x8c, 0x67, 0xbf, 0xbd, 0x53, 0x6e, 0x7a, 0x26, 0xf1, 0xc7, 0x21, 0x79, 0xfd, 0x56, 0x2c, 0x3b, 0x32, 0x65, 0xf7, 0x9d, 0xed, 0x51, 0x39, 0x1d, 0x5f, 0x98, 0xd1, 0xae, 0xb8, 0x76, 0x44, 0xef, 0xfd, 0xc3, 0xbf, 0x4f, 0x5b, 0x9b, 0x9a, 0x29, 0x98, 0x6f, 0xd5, 0x2d, 0x79, 0x64, 0xed, 0xcc, 0x8a, 0xe7, 0x82, 0x7a, 0x5f, 0x0b, 0x92, 0x4d, 0x36, 0xdf, 0xde, 0xda, 0xb7, 0xfb, 0xeb, 0x5d, 0x7f, 0x7a, 0x58, 0xf3, 0xea, 0x90, 0xd2, 0xb8, 0x99, 0xe7, 0x4f, 0x7c, 0xf4, 0xe8, 0xf0, 0xaa, 0x7d, 0x57, 0x9f, 0xdc, 0xd8, 0x67, 0xc8, 0x0f, 0x87, 0x9e, 0x4a, 0x4e, 0x9b, 0x58, 0x25, 0x5c, 0x79, 0xf0, 0x58, 0x76, 0x9f, 0xae, 0xf9, 0xa7, 0x5f, 0x4a, 0xf2, 0xde, 0x13, 0xf1, 0xd3, 0x8f, 0x45, 0x73, 0xe6, 0x4c, 0xd6, 0x5d, 0x5d, 0x7e, 0xb4, 0x72, 0xf0, 0x9d, 0x8f, 0x27, 0xd7, 0x0e, 0x7d, 0x3a, 0x26, 0xab, 0x67, 0xcc, 0xfb, 0x73, 0xbd, 0xa7, 0x3c, 0xfc, 0xe8, 0xd8, 0x4b, 0x7e, 0xd3, 0xb7, 0x2b, 0x36, 0xc4, 0xbc, 0x57, 0xf0, 0xb9, 0xf9, 0xfb, 0x77, 0x3c, 0xef, 0x4e, 0xdf, 0xde, 0xb1, 0x7f, 0x0f, 0xe3, 0x47, 0xbf, 0xa6, 0xda, 0x22, 0xd4, 0xe3, 0x6e, 0xce, 0x58, 0xde, 0x7e, 0xf1, 0x92, 0xd0, 0x6d, 0xa5, 0xdc, 0x2b, 0xa7, 0x1e, 0x2a, 0x6d, 0xd8, 0x3b, 0xa0, 0xda, 0xba, 0x36, 0xfc, 0xf0, 0x3d, 0x49, 0x75, 0x6e, 0x9c, 0xfd, 0xdd, 0xdf, 0x16, 0x3f, 0x15, 0x32, 0x48, 0xff, 0xd8, 0x0b, 0x23, 0xde, 0x58, 0xfc, 0xca, 0x0f, 0xdd, 0xae, 0xdf, 0x18, 0x98, 0xf7, 0xa0, 0xe7, 0xaf, 0x27, 0x26, 0xf2, 0x3f, 0x66, 0x1f, 0x9a, 0xf3, 0xf4, 0xd9, 0x8d, 0x3f, 0xef, 0xf0, 0x9e, 0x93, 0x3e, 0x61, 0xc3, 0x4f, 0xbd, 0x73, 0x48, 0xd2, 0xa9, 0x9a, 0xad, 0x5d, 0xb7, 0x56, 0x9c, 0xeb, 0x79, 0xd9, 0xf4, 0xcc, 0xd0, 0xb9, 0xea, 0xe3, 0x77, 0x46, 0x2e, 0xcd, 0x5d, 0x2e, 0xf3, 0xfa, 0xfc, 0xbd, 0xcf, 0xbf, 0x90, 0x6c, 0x3f, 0xf9, 0xe1, 0xfa, 0xb1, 0x51, 0x1d, 0x14, 0xde, 0x19, 0x0f, 0x15, 0xa7, 0x2e, 0x7d, 0xf7, 0x60, 0x0f, 0xe1, 0xd3, 0x7f, 0x4e, 0x6f, 0xdf, 0x6e, 0xf7, 0xf7, 0x25, 0xf3, 0x55, 0xa7, 0xbe, 0xd6, 0xaf, 0xd9, 0xb6, 0x32, 0xfa, 0xc1, 0xf6, 0x49, 0xe5, 0xef, 0x8e, 0xeb, 0x76, 0x72, 0x97, 0xfd, 0x79, 0x7e, 0x82, 0x44, 0x55, 0xfc, 0xcd, 0xda, 0xa6, 0x7d, 0xcf, 0xed, 0x7d, 0xed, 0x89, 0x77, 0xae, 0xab, 0xaf, 0x05, 0x2f, 0x4e, 0xbe, 0xf7, 0xe1, 0x63, 0xab, 0x12, 0xdb, 0x3f, 0x75, 0x60, 0xdc, 0xc0, 0x5f, 0xe4, 0x07, 0xaf, 0xbf, 0xfc, 0xcc, 0x99, 0x04, 0xed, 0xec, 0x51, 0xb7, 0xe3, 0xea, 0xee, 0x18, 0x5f, 0x18, 0x1c, 0xb7, 0xa0, 0x4b, 0x64, 0x86, 0xf6, 0xe3, 0xd3, 0x3f, 0x2f, 0x3d, 0xfe, 0xc5, 0x27, 0x77, 0x76, 0xfd, 0xe4, 0x9b, 0xf8, 0xe6, 0xac, 0x07, 0xeb, 0xfd, 0xb3, 0xdf, 0x4c, 0x19, 0xe3, 0x15, 0xfb, 0xda, 0xe0, 0x6d, 0x53, 0xbb, 0x47, 0x7d, 0xbb, 0x78, 0xfe, 0xab, 0xbd, 0xc2, 0xc3, 0x9b, 0xd2, 0xb4, 0x99, 0x9f, 0xbd, 0xba, 0xbc, 0xee, 0xec, 0xdd, 0x59, 0x23, 0x9e, 0x0d, 0x88, 0xfc, 0x3e, 0x68, 0xfc, 0xaa, 0xa8, 0xf0, 0x83, 0xed, 0x67, 0xf4, 0xff, 0xc0, 0xa3, 0xdf, 0xa5, 0xc4, 0x2d, 0x53, 0x26, 0x71, 0x17, 0xcf, 0xcf, 0x1b, 0xf7, 0x8f, 0xe1, 0xb7, 0x1e, 0xe8, 0xff, 0xd3, 0x93, 0xf7, 0xae, 0x0f, 0xe9, 0xbb, 0x24, 0x7f, 0xb2, 0xbc, 0xeb, 0xd1, 0xbe, 0x23, 0x13, 0x76, 0xcd, 0x3c, 0xb8, 0x7a, 0x62, 0xef, 0x55, 0xdf, 0x1c, 0x7f, 0x31, 0x2e, 0x7a, 0xec, 0x97, 0xda, 0x11, 0x65, 0xe3, 0x5e, 0xfe, 0x64, 0xe7, 0xbe, 0x5f, 0x8e, 0x3f, 0xf9, 0xd0, 0xf1, 0xc2, 0xef, 0xdf, 0xfc, 0xd8, 0xe7, 0x66, 0x60, 0x97, 0xda, 0x01, 0x2b, 0x5f, 0x98, 0xf4, 0xc0, 0xfe, 0x31, 0x27, 0x3e, 0x18, 0xef, 0xbf, 0xee, 0xb3, 0x1d, 0x6f, 0x0e, 0x97, 0x4c, 0xdc, 0xf5, 0xd8, 0xb2, 0x55, 0x4d, 0xe5, 0x9a, 0x0e, 0xaf, 0xfe, 0x10, 0xb5, 0x22, 0xca, 0x77, 0x4e, 0xc8, 0xe0, 0xb1, 0xd3, 0xed, 0x41, 0xef, 0xf7, 0x3d, 0xfd, 0xec, 0x0e, 0x43, 0xe1, 0x59, 0xc3, 0xc2, 0x23, 0x9f, 0xf5, 0xf7, 0x96, 0x4d, 0xaa, 0xff, 0x78, 0xd3, 0xa5, 0x45, 0x6f, 0xfb, 0xf5, 0xff, 0x67, 0xe7, 0x8f, 0xc3, 0xbb, 0xc4, 0x1f, 0xee, 0x6b, 0xfd, 0x7d, 0xec, 0x93, 0x61, 0x3f, 0x7d, 0x7b, 0xeb, 0xcb, 0xc1, 0x8e, 0x79, 0xef, 0x1d, 0xa8, 0x5a, 0xf5, 0x70, 0x89, 0xf2, 0xe0, 0x04, 0xfb, 0x67, 0x23, 0x17, 0x9e, 0xf5, 0x94, 0x5f, 0xc7, 0xf9, 0xbf, 0xd8, 0xe4, 0x35, 0xde, 0x30, 0xd2, 0xff, 0x97, 0xcd, 0x83, 0xbd, 0x5f, 0x7d, 0x70, 0x67, 0x81, 0xd7, 0xdc, 0x86, 0xdc, 0xa2, 0x5e, 0xef, 0x3e, 0xf3, 0xd3, 0xdb, 0x8b, 0x46, 0x2d, 0x8f, 0xa8, 0xf8, 0xd6, 0xff, 0x9d, 0x4d, 0x67, 0x5e, 0xe8, 0xf2, 0xd3, 0xb1, 0xf3, 0x15, 0xa7, 0x0e, 0xbf, 0x12, 0x9a, 0xb2, 0xd1, 0xfb, 0xf3, 0xb2, 0x8f, 0x27, 0x7a, 0x85, 0x6d, 0xfa, 0x71, 0xde, 0x43, 0x5f, 0x54, 0x8e, 0x52, 0x7d, 0xfa, 0xd0, 0x0d, 0xae, 0x2a, 0xd7, 0xfa, 0xec, 0x67, 0x37, 0xcf, 0xc6, 0x6d, 0x9b, 0xfa, 0xaf, 0xa3, 0xa7, 0x3b, 0xfd, 0x5c, 0xfb, 0x5d, 0xc1, 0xe0, 0x0d, 0x47, 0x1b, 0x76, 0x4f, 0x3b, 0x32, 0x65, 0xe8, 0x92, 0xfc, 0x07, 0xaa, 0x57, 0xe6, 0x8d, 0x9a, 0x70, 0x27, 0xfb, 0xde, 0x95, 0xbd, 0xa3, 0x67, 0x0c, 0x1a, 0x2e, 0x09, 0x3c, 0x95, 0x2f, 0x7f, 0xe6, 0x99, 0xc7, 0xdb, 0x35, 0xfe, 0xea, 0xa7, 0x98, 0xbd, 0x87, 0x1b, 0xdb, 0xe7, 0x29, 0xd5, 0x98, 0x94, 0xda, 0x38, 0xfe, 0x58, 0xf1, 0xb3, 0x8e, 0xb7, 0x0e, 0xd5, 0x7a, 0xc4, 0x26, 0x1f, 0x95, 0x0d, 0xb8, 0x37, 0xcd, 0xef, 0x70, 0xde, 0x06, 0x9f, 0x77, 0x1b, 0x57, 0x6e, 0xe8, 0x95, 0xbf, 0x64, 0x9d, 0xe5, 0xf8, 0xde, 0x2d, 0xdf, 0x9a, 0xef, 0x6c, 0x5d, 0x73, 0x31, 0xff, 0x64, 0xc4, 0xf3, 0xc3, 0xcf, 0x25, 0x7e, 0xe3, 0x77, 0xfc, 0xcc, 0x93, 0x8f, 0x1f, 0xfa, 0x60, 0x8d, 0xe9, 0x94, 0x36, 0x86, 0x9c, 0x1d, 0x5c, 0x3e, 0xf8, 0xc4, 0x9e, 0xa0, 0x91, 0x35, 0x5f, 0x6c, 0x68, 0x58, 0xdf, 0xb5, 0xdb, 0xce, 0x4f, 0x86, 0xbe, 0xba, 0x68, 0xf3, 0x37, 0xed, 0xde, 0xfd, 0x7c, 0xd3, 0xf2, 0x4d, 0x52, 0x9d, 0xa2, 0xc2, 0xf3, 0xe9, 0x75, 0xa7, 0x94, 0xbb, 0x34, 0x3f, 0xf9, 0x7e, 0xfc, 0x52, 0x59, 0xa1, 0xb1, 0x7d, 0x4a, 0x4e, 0xd6, 0x07, 0x0f, 0x8d, 0xdc, 0xfe, 0x78, 0x98, 0x7d, 0x63, 0x65, 0xdc, 0x99, 0x71, 0xf2, 0x67, 0xbf, 0x95, 0x6c, 0xe5, 0x0e, 0x2f, 0xd1, 0xab, 0x8e, 0x5d, 0x7b, 0x79, 0xda, 0xc7, 0xcf, 0x3e, 0xbc, 0x61, 0xa3, 0xfc, 0xdd, 0xda, 0x2f, 0xde, 0x78, 0xf4, 0xe8, 0xa6, 0xba, 0xb7, 0xf6, 0x7a, 0x95, 0x46, 0xde, 0x21, 0xed, 0xe6, 0xac, 0xf4, 0x5e, 0x1c, 0xbc, 0xc4, 0xff, 0xfb, 0x2d, 0x7e, 0xb9, 0x2f, 0x86, 0x3d, 0x5e, 0xa0, 0x78, 0x25, 0x7f, 0xd4, 0x3c, 0xc9, 0xf0, 0x67, 0x2e, 0x35, 0x0c, 0xce, 0xcb, 0xcb, 0x1e, 0x99, 0x1f, 0x72, 0xd2, 0x34, 0x7a, 0x5a, 0x2a, 0xc9, 0xbe, 0x71, 0x75, 0x91, 0x3c, 0xff, 0x9f, 0xef, 0x4a, 0x3a, 0x6f, 0x6f, 0x50, 0x4c, 0x7e, 0x62, 0x67, 0xbb, 0x5f, 0x77, 0x9d, 0xaa, 0x1a, 0x9d, 0xf6, 0xd3, 0xa7, 0x01, 0x97, 0x37, 0x6d, 0x9b, 0x59, 0x56, 0xf1, 0xd9, 0xdd, 0x73, 0x0f, 0x7d, 0x97, 0xdd, 0x3f, 0xec, 0x74, 0x87, 0x9b, 0x65, 0x47, 0x66, 0x8d, 0x4e, 0x39, 0xfa, 0x7b, 0xd6, 0xc8, 0x75, 0x03, 0x0f, 0x0e, 0xde, 0x10, 0x53, 0x42, 0xb6, 0xbe, 0x7d, 0xc1, 0xb4, 0xe5, 0x68, 0xdc, 0xbb, 0xe7, 0x6c, 0x27, 0x16, 0x9d, 0x7c, 0xbc, 0x60, 0xe7, 0xa1, 0x77, 0x7e, 0x6f, 0x38, 0x7e, 0x24, 0xf7, 0xa7, 0x31, 0xf1, 0x77, 0x4f, 0x8d, 0x8d, 0x4c, 0xaa, 0x70, 0x7c, 0x58, 0xb3, 0x89, 0x3f, 0xfd, 0x5c, 0x98, 0x2c, 0xe1, 0x87, 0x87, 0x3c, 0x1e, 0x7d, 0x3a, 0xc5, 0x67, 0xf5, 0xde, 0x32, 0xbf, 0xef, 0x62, 0x9f, 0xf5, 0x4c, 0x5b, 0x1d, 0x27, 0xed, 0xae, 0x52, 0xf9, 0x6e, 0x9b, 0xce, 0x29, 0xf7, 0x3e, 0xb2, 0x21, 0xe7, 0x89, 0x4f, 0xa6, 0x15, 0x72, 0xde, 0x47, 0xed, 0x9f, 0xbd, 0x51, 0x3b, 0xf2, 0xa0, 0xff, 0x9d, 0xb3, 0x4f, 0x2d, 0xd9, 0x7b, 0xaa, 0x87, 0x7a, 0x49, 0x4d, 0xd5, 0xfa, 0x95, 0x27, 0x76, 0x77, 0x7c, 0xfc, 0x93, 0x27, 0x27, 0xf9, 0xad, 0x0f, 0xef, 0x33, 0xfc, 0xf3, 0x4f, 0x3f, 0xcc, 0xdf, 0x5c, 0xcd, 0x4d, 0xd9, 0x74, 0x75, 0xe3, 0x27, 0x5f, 0x2c, 0x55, 0x5e, 0xd8, 0xe8, 0xb1, 0xf4, 0xf0, 0xc7, 0x25, 0x8f, 0x25, 0x1f, 0xbb, 0xfc, 0xd1, 0xf8, 0xc3, 0xaf, 0x77, 0xd0, 0x7e, 0x2b, 0x9b, 0x12, 0x74, 0xe6, 0xb9, 0x00, 0xdf, 0x67, 0x2e, 0x4e, 0xed, 0x33, 0x6a, 0x61, 0xdf, 0xdc, 0x02, 0xbf, 0x95, 0xc3, 0x72, 0x27, 0xf8, 0x7e, 0xe3, 0x5f, 0xfb, 0xba, 0xe0, 0xbd, 0xa0, 0xfb, 0x5a, 0xe2, 0xf3, 0xf1, 0x72, 0xaf, 0x7f, 0x25, 0x2c, 0x68, 0x57, 0x7f, 0xf8, 0x6d, 0xc5, 0x4b, 0x39, 0x37, 0x24, 0x5d, 0x9a, 0x76, 0xc8, 0xc7, 0x8c, 0x78, 0x22, 0xfb, 0xb7, 0xfd, 0x8e, 0xd1, 0xe5, 0xcf, 0x46, 0xe5, 0x3f, 0xf8, 0xa3, 0x3c, 0x6f, 0xec, 0xb8, 0xce, 0x47, 0x9b, 0xce, 0x87, 0x1e, 0x79, 0x79, 0xd8, 0x84, 0xd3, 0xaa, 0x03, 0xb6, 0xef, 0x1c, 0x85, 0xe7, 0x3e, 0xbb, 0x73, 0xe7, 0xda, 0xb6, 0x39, 0xf1, 0xdb, 0x3e, 0xed, 0x78, 0x6c, 0x4e, 0x15, 0x5f, 0xf7, 0xf6, 0xf1, 0xe3, 0x13, 0x17, 0x1c, 0x7a, 0x73, 0xe7, 0x8e, 0x93, 0xd1, 0xe9, 0x37, 0xce, 0x0d, 0xba, 0xee, 0xd8, 0x72, 0xc8, 0xf1, 0xc4, 0xd6, 0xf7, 0xbe, 0x93, 0x6f, 0xe8, 0x37, 0x20, 0x6a, 0x9d, 0xf5, 0x74, 0xa8, 0xdf, 0xc9, 0x94, 0xce, 0x3e, 0x1f, 0xdd, 0xb2, 0x79, 0x44, 0xf1, 0x13, 0x64, 0x71, 0x5f, 0x5e, 0xe3, 0xcf, 0x0d, 0x39, 0xe7, 0x58, 0x79, 0x6d, 0xce, 0xd8, 0x9e, 0x2f, 0x6c, 0x1b, 0x93, 0x34, 0xeb, 0x93, 0x91, 0xfb, 0x3b, 0x4d, 0xb1, 0x6f, 0x5d, 0x71, 0xb8, 0xf0, 0x91, 0xa8, 0x0b, 0x39, 0xe9, 0x8b, 0xc6, 0x2b, 0x0f, 0x78, 0x24, 0xfb, 0x6e, 0xf9, 0x2c, 0x48, 0xaa, 0x36, 0x6a, 0x3d, 0x87, 0x6c, 0xeb, 0xb3, 0xf9, 0x2b, 0x9d, 0xef, 0xe7, 0xeb, 0xe6, 0x0f, 0x5b, 0x1f, 0x2a, 0xcb, 0xfd, 0x64, 0xf8, 0xfb, 0xc2, 0x89, 0x1d, 0x3d, 0xbf, 0xa9, 0xd9, 0x30, 0x73, 0xf9, 0x29, 0xc3, 0x43, 0x6b, 0xcf, 0xfe, 0xa3, 0x6a, 0xc7, 0xa8, 0xd7, 0xb4, 0x37, 0x9e, 0xb9, 0xb2, 0xec, 0xed, 0xdc, 0xe7, 0x7d, 0x16, 0x14, 0x48, 0x57, 0xc9, 0xbd, 0x97, 0xf5, 0x8b, 0xf2, 0xff, 0x79, 0x9a, 0xc3, 0xab, 0xf8, 0x81, 0x27, 0x88, 0xe7, 0x64, 0xdb, 0x17, 0x8b, 0x02, 0x27, 0x6c, 0xba, 0xb0, 0x36, 0xf4, 0xe3, 0x7f, 0x46, 0x77, 0xde, 0xa8, 0x7c, 0x6d, 0xce, 0xe1, 0xf9, 0x7e, 0xdb, 0x8e, 0xfd, 0xf0, 0xe9, 0xb5, 0x33, 0x65, 0x5d, 0xcf, 0x7d, 0xeb, 0x7b, 0xf4, 0xf0, 0x91, 0xe9, 0x96, 0x0b, 0x47, 0xaf, 0xdf, 0xfe, 0xe4, 0xbb, 0x9c, 0xb1, 0x53, 0x4e, 0x3f, 0xfc, 0x75, 0xd0, 0xb6, 0x49, 0xff, 0xd0, 0x7e, 0x76, 0xeb, 0xfb, 0xf1, 0x55, 0x85, 0xe3, 0x93, 0x3f, 0x0d, 0xbe, 0x34, 0x4c, 0x51, 0x51, 0x94, 0xdb, 0x4e, 0xd8, 0xd7, 0x47, 0x6e, 0x1f, 0xee, 0x2b, 0x69, 0x2f, 0x2c, 0x1f, 0x3d, 0x77, 0xcc, 0xda, 0xec, 0xdb, 0x47, 0x84, 0xbc, 0x91, 0x89, 0xdf, 0xe4, 0x07, 0x95, 0x5e, 0xf0, 0x59, 0xf1, 0xcb, 0x61, 0xbf, 0x13, 0x99, 0x53, 0x64, 0xa9, 0x3b, 0x3e, 0xf1, 0x78, 0x6c, 0xa4, 0xd6, 0xf1, 0xfe, 0x6f, 0x41, 0x7c, 0xcd, 0xc0, 0xe4, 0x31, 0xfd, 0xbf, 0x1d, 0x3f, 0xb6, 0xaf, 0x2d, 0xf7, 0xd0, 0xda, 0x33, 0xc3, 0x8e, 0x9f, 0xb2, 0xfb, 0x9e, 0x33, 0xd7, 0xf7, 0x39, 0xd9, 0x3b, 0x63, 0xed, 0xd6, 0x55, 0x5f, 0x2d, 0xdf, 0x72, 0xf6, 0xc5, 0x6f, 0xd6, 0x25, 0xff, 0x24, 0x6c, 0x30, 0x85, 0xdc, 0xf8, 0xfc, 0xf3, 0x19, 0x3b, 0x36, 0xef, 0x33, 0x2d, 0xf8, 0x24, 0xe3, 0xbd, 0xb7, 0xd7, 0x6b, 0x3c, 0xa3, 0x6a, 0x36, 0x2f, 0x90, 0x9f, 0xf8, 0xba, 0xc7, 0x13, 0x67, 0x33, 0xbf, 0x70, 0x9c, 0xea, 0x16, 0x3e, 0xc1, 0xfe, 0xc9, 0x26, 0xdb, 0xc8, 0x9d, 0xd2, 0xce, 0x39, 0x23, 0x16, 0x86, 0x16, 0xea, 0x7b, 0x6f, 0xf3, 0x5d, 0xff, 0xe6, 0x1c, 0xe5, 0x97, 0x9d, 0xcf, 0x79, 0x0e, 0x9b, 0x7d, 0x4d, 0x1a, 0x86, 0xf3, 0x3f, 0xae, 0x67, 0xe7, 0x07, 0x27, 0x67, 0x47, 0x45, 0x7c, 0x99, 0x11, 0x16, 0x2a, 0xfb, 0x2a, 0x7f, 0x54, 0x62, 0xc3, 0xf8, 0x7f, 0x4d, 0x7f, 0x7f, 0xd8, 0xd0, 0xdd, 0x8b, 0xe3, 0x06, 0x29, 0x66, 0x9c, 0xda, 0xd3, 0x7f, 0xcb, 0x8e, 0x43, 0x33, 0xea, 0xae, 0x35, 0xee, 0x3f, 0xd5, 0x70, 0x51, 0x39, 0x68, 0xc3, 0x9a, 0x81, 0x13, 0xd7, 0x6e, 0x98, 0x13, 0x36, 0x65, 0xf9, 0x37, 0x21, 0x4b, 0x5e, 0x1a, 0x1c, 0xb0, 0xc3, 0xa6, 0xea, 0x76, 0x2a, 0xe3, 0x48, 0x51, 0x43, 0xe9, 0xfc, 0xb8, 0x6b, 0x23, 0x87, 0x9c, 0x58, 0x1b, 0x1e, 0x78, 0x69, 0x43, 0xef, 0x13, 0x1b, 0x96, 0x84, 0x2c, 0x9e, 0x3a, 0xc5, 0xf3, 0xc9, 0x25, 0x9d, 0x27, 0x07, 0xaf, 0x22, 0xaf, 0x7d, 0xdb, 0x18, 0x56, 0xb5, 0x74, 0x7f, 0xd4, 0xaa, 0x11, 0x23, 0xc6, 0x5f, 0x0a, 0xc9, 0xcf, 0x17, 0xce, 0xf5, 0x8b, 0x3b, 0xba, 0xdc, 0x7f, 0xd8, 0xd7, 0x6f, 0x69, 0xa6, 0x2e, 0xba, 0xd8, 0xe1, 0x8d, 0x59, 0x5c, 0xd2, 0xba, 0xf7, 0x47, 0x8e, 0x5f, 0xb5, 0xed, 0xbd, 0xef, 0xeb, 0xae, 0xff, 0x58, 0x73, 0xb3, 0x4e, 0x33, 0xe5, 0xec, 0x97, 0xa3, 0xd7, 0x7d, 0x75, 0x7a, 0xf5, 0xda, 0x11, 0x23, 0x7e, 0x7e, 0x23, 0x29, 0x41, 0x77, 0x20, 0xaf, 0x70, 0xcc, 0xbd, 0xa2, 0x71, 0x6b, 0xf3, 0x7a, 0x3e, 0x76, 0x6d, 0x98, 0x9e, 0x33, 0x78, 0x7b, 0xf9, 0x16, 0x44, 0x87, 0x04, 0xdc, 0x8c, 0x4a, 0x3a, 0xb7, 0xce, 0x6b, 0xc4, 0xae, 0x67, 0x33, 0x8b, 0xae, 0x9a, 0x46, 0xe7, 0x35, 0xfc, 0x76, 0x53, 0xbf, 0x65, 0xe3, 0x8e, 0x9e, 0x6f, 0x3d, 0x3f, 0x2f, 0xe4, 0xe5, 0xc8, 0x15, 0x5e, 0x95, 0xbf, 0x6f, 0x7d, 0xa3, 0xe3, 0xe6, 0xd9, 0x53, 0xfd, 0x5f, 0x38, 0xbb, 0xea, 0x91, 0xe8, 0x6b, 0xeb, 0x62, 0x85, 0x17, 0x6e, 0x3e, 0xb7, 0xcd, 0x5a, 0x97, 0xfb, 0xaf, 0xce, 0x5f, 0xc5, 0xc5, 0xea, 0xcf, 0x66, 0x79, 0x0e, 0x7a, 0xa1, 0x3e, 0x61, 0x62, 0xf6, 0x4f, 0x2f, 0x85, 0x0d, 0xda, 0xb1, 0x2b, 0x24, 0xf3, 0x5b, 0xc9, 0x8c, 0x0e, 0x0b, 0xcd, 0x5b, 0xfc, 0x67, 0x4f, 0xa9, 0xeb, 0xf6, 0xde, 0x8e, 0x53, 0xd1, 0x5f, 0xf8, 0x7d, 0xb5, 0x22, 0x3a, 0xa5, 0x61, 0x4b, 0xd7, 0xb9, 0xef, 0x2f, 0xf6, 0x39, 0xb8, 0x78, 0xf6, 0x03, 0xde, 0xe4, 0xc0, 0x70, 0x6b, 0xcf, 0x13, 0x89, 0x33, 0xb3, 0x1b, 0xc7, 0xee, 0xcb, 0xf8, 0x7e, 0x7c, 0xe6, 0x88, 0x2d, 0x9b, 0x3b, 0xe4, 0xaf, 0x78, 0xfb, 0x78, 0xbf, 0xd9, 0x15, 0xaf, 0xf8, 0x2f, 0x9e, 0x97, 0xb6, 0xe4, 0xc4, 0xd9, 0xf6, 0xab, 0x0e, 0xec, 0x3e, 0xdc, 0xf8, 0xfd, 0x95, 0x05, 0xfb, 0x1b, 0x7f, 0x1d, 0x7e, 0x22, 0xbb, 0xf8, 0xa1, 0x4b, 0x2f, 0xe4, 0x9d, 0xdd, 0x90, 0x69, 0x7e, 0x63, 0xea, 0xa0, 0x27, 0xb3, 0x02, 0xfc, 0x83, 0x1e, 0xec, 0xd6, 0xa1, 0xdd, 0xe9, 0xa2, 0x68, 0xcd, 0x6b, 0x71, 0xdd, 0x1e, 0x7f, 0x3f, 0xef, 0xde, 0x68, 0x60, 0xff, 0xcb, 0x1e, 0xf1, 0xde, 0xff, 0xc4, 0xa8, 0xe8, 0x9a, 0xd4, 0xb7, 0xd7, 0xce, 0x93, 0x5c, 0x78, 0x63, 0x46, 0x70, 0xd7, 0x03, 0xef, 0x3f, 0xca, 0xdf, 0xdb, 0xaa, 0xff, 0xe8, 0x7b, 0xcd, 0x87, 0xbf, 0xd4, 0xf4, 0x5b, 0x1f, 0x36, 0x25, 0xe0, 0x8d, 0xfc, 0x75, 0xde, 0xd3, 0x3f, 0xd0, 0x58, 0xf7, 0x5e, 0xee, 0x90, 0x51, 0xd3, 0x23, 0x69, 0xe2, 0xef, 0x39, 0xe3, 0x47, 0x5f, 0xb8, 0xf5, 0x42, 0x3f, 0xe3, 0xa7, 0x56, 0x4d, 0x54, 0x49, 0x67, 0xef, 0x87, 0x7a, 0xe9, 0x03, 0x64, 0x37, 0xb6, 0x66, 0x0c, 0xf8, 0x64, 0xb6, 0x35, 0xbd, 0xe8, 0xec, 0xe8, 0x17, 0x7a, 0x5e, 0x9b, 0xc8, 0x37, 0xdd, 0xbc, 0xf4, 0xe3, 0x17, 0x3b, 0xee, 0x35, 0x95, 0xcd, 0xab, 0x39, 0xf6, 0xf8, 0x8a, 0xfd, 0x07, 0x1a, 0xa3, 0x66, 0x4c, 0xd9, 0xe2, 0x35, 0x6f, 0x69, 0x69, 0xe6, 0xd6, 0x8f, 0x1f, 0x1b, 0xfd, 0xfe, 0xca, 0x01, 0x4b, 0xa6, 0xf4, 0xf1, 0x59, 0xb5, 0x44, 0xbd, 0xb7, 0x71, 0x83, 0x77, 0xc5, 0xfe, 0xb5, 0xaa, 0x41, 0x23, 0xae, 0x3d, 0xed, 0x9f, 0xdf, 0x90, 0xf4, 0x75, 0xbf, 0x53, 0x05, 0xb3, 0xfc, 0x77, 0x94, 0xc4, 0x07, 0x0c, 0xbb, 0x29, 0xed, 0x16, 0x77, 0x79, 0x7b, 0x51, 0xfe, 0xf6, 0xf2, 0xb8, 0xf1, 0x27, 0x93, 0x4f, 0x44, 0xbd, 0x22, 0xbf, 0x14, 0x36, 0xe7, 0xab, 0x0d, 0xe4, 0xdd, 0xa9, 0x53, 0x3b, 0x6f, 0xed, 0x34, 0x23, 0xee, 0xd9, 0x7f, 0x6c, 0x19, 0x96, 0xb3, 0xa4, 0x6e, 0x7c, 0xfc, 0xa9, 0x53, 0xf9, 0xc3, 0xba, 0x0c, 0x0a, 0xeb, 0xf0, 0xf4, 0xc4, 0x28, 0xe5, 0xb2, 0xb0, 0xce, 0xdd, 0xbf, 0x0b, 0x21, 0x7d, 0x03, 0xc8, 0x92, 0xcf, 0x32, 0x7a, 0x4e, 0x59, 0x51, 0x99, 0xbd, 0x76, 0xe6, 0xa1, 0x8c, 0x0d, 0xf3, 0x83, 0xbe, 0x6a, 0xf8, 0xee, 0x89, 0x86, 0x6b, 0x3b, 0x17, 0xbe, 0xbf, 0xe3, 0xda, 0xb1, 0xc5, 0xa7, 0x6e, 0xfd, 0xb4, 0xd5, 0x6b, 0xed, 0xca, 0xd9, 0x21, 0x9f, 0xe6, 0x9d, 0xed, 0xb9, 0x0c, 0xd8, 0xff, 0x69, 0x57, 0x5f, 0xc8, 0xdb, 0xb7, 0xc6, 0x5a, 0x74, 0xa4, 0xb0, 0xf3, 0x88, 0xdb, 0xe1, 0xfa, 0xa4, 0xef, 0xbf, 0x8f, 0x3a, 0x6b, 0x5f, 0xe1, 0xf5, 0xd5, 0x8b, 0xcf, 0x64, 0xd6, 0x65, 0xaa, 0x47, 0xdf, 0x1c, 0xf8, 0xc3, 0xcd, 0x75, 0xd2, 0x77, 0x76, 0xac, 0xea, 0xec, 0x98, 0x37, 0xd5, 0xa4, 0x5d, 0xf1, 0x46, 0x8f, 0x4d, 0x6b, 0xbf, 0xaa, 0xbd, 0xf3, 0xc6, 0xd9, 0x7b, 0x31, 0x07, 0x6e, 0x1e, 0xff, 0xe7, 0xbd, 0xba, 0x6f, 0xb6, 0xe6, 0xad, 0x2a, 0xbf, 0x37, 0x6c, 0xdd, 0xab, 0x7d, 0xbd, 0xdf, 0x58, 0xf7, 0x62, 0xf4, 0xd4, 0x0f, 0xaa, 0x34, 0x21, 0x86, 0xeb, 0x1d, 0xbc, 0x7a, 0x45, 0x24, 0xe9, 0xbb, 0x3c, 0x37, 0xbe, 0xa7, 0xd7, 0xfa, 0xef, 0x8b, 0xac, 0xbf, 0xd6, 0xe4, 0x0d, 0x8e, 0x9a, 0x92, 0x34, 0x61, 0xfc, 0xba, 0x11, 0xcf, 0xa4, 0x9e, 0x68, 0xdc, 0xdf, 0xee, 0xd2, 0xf7, 0x87, 0x81, 0xfd, 0xbf, 0x33, 0x7b, 0xea, 0x89, 0xf3, 0xb6, 0x80, 0xc5, 0x1f, 0xf9, 0x76, 0x9b, 0xbd, 0x71, 0x4f, 0xd1, 0x8a, 0xd7, 0x5f, 0x8e, 0xdb, 0x32, 0x35, 0x69, 0x44, 0x37, 0x0f, 0xaf, 0xfc, 0xe8, 0x4e, 0x3b, 0xfb, 0x75, 0xe8, 0x39, 0xcd, 0xdf, 0x5f, 0x67, 0x59, 0x32, 0xc8, 0xe1, 0xb1, 0x2a, 0x73, 0x62, 0x75, 0xe3, 0x0b, 0x43, 0x26, 0xed, 0xcf, 0x4e, 0x79, 0xf8, 0xab, 0xe8, 0x49, 0x4f, 0x35, 0x74, 0x5b, 0xf2, 0xfa, 0xfb, 0xfe, 0x9f, 0x9c, 0x59, 0xdc, 0x61, 0x75, 0x67, 0x92, 0xf9, 0xc3, 0xb0, 0x9e, 0x83, 0xee, 0xbe, 0x9a, 0x9d, 0x7d, 0xe2, 0x64, 0xc6, 0x0b, 0x07, 0x3b, 0x0e, 0xfa, 0xbe, 0xff, 0xd0, 0x89, 0x8d, 0x69, 0x8b, 0xc2, 0x4e, 0xfc, 0xf3, 0x68, 0xc8, 0x81, 0xec, 0x07, 0x66, 0xcc, 0x0e, 0x4b, 0xdf, 0xb2, 0x38, 0x72, 0x5e, 0xdd, 0x96, 0x87, 0x6b, 0x4e, 0xad, 0x90, 0x5f, 0xb9, 0x39, 0xf1, 0xa9, 0x0f, 0x77, 0x8c, 0x4e, 0x1e, 0x3b, 0xcf, 0x9a, 0x6f, 0x5c, 0x91, 0xf1, 0x7c, 0x5d, 0x54, 0x40, 0xcc, 0x2a, 0x2f, 0xef, 0x6e, 0xb9, 0x99, 0x1a, 0x45, 0xe8, 0xe8, 0x7e, 0xed, 0x6b, 0x5f, 0x78, 0x7f, 0xf1, 0xbb, 0xd6, 0xad, 0x73, 0xed, 0x9d, 0xe7, 0xbd, 0xd3, 0x5d, 0x3f, 0xe3, 0xf3, 0xf3, 0x5b, 0xf7, 0xdf, 0x78, 0x73, 0x76, 0xcd, 0xcf, 0xd9, 0x67, 0xef, 0x55, 0x77, 0xbb, 0x76, 0xe9, 0xd4, 0xe7, 0xdf, 0x6f, 0x0d, 0xbc, 0x5b, 0xf3, 0xbe, 0x5f, 0xbf, 0x29, 0x33, 0xb4, 0x13, 0xd7, 0xcd, 0xeb, 0xf7, 0x99, 0xa6, 0xa6, 0xe8, 0x76, 0x87, 0xfd, 0x63, 0xfa, 0x24, 0x5d, 0xb2, 0x4c, 0x18, 0x7f, 0xef, 0x1f, 0x1b, 0xf2, 0x46, 0x9f, 0x69, 0x18, 0x36, 0xf1, 0xab, 0xde, 0xde, 0x19, 0xbf, 0x8c, 0x8b, 0xb6, 0xfe, 0xf6, 0xf1, 0x5a, 0xef, 0x4d, 0xf5, 0x6f, 0x04, 0xbc, 0xf9, 0xe8, 0x81, 0x7e, 0x33, 0x8a, 0xef, 0x69, 0x16, 0xe0, 0xfc, 0xef, 0x9d, 0xbb, 0x43, 0x32, 0xf6, 0xe8, 0x54, 0x8f, 0x27, 0xb7, 0x25, 0x49, 0xcf, 0xac, 0xf4, 0xf6, 0xfa, 0x79, 0xc7, 0x7e, 0xf9, 0xba, 0xb2, 0xd9, 0xb2, 0x69, 0x41, 0x83, 0x3c, 0x37, 0x0d, 0x7e, 0xc0, 0x7f, 0x6e, 0x9f, 0x43, 0xed, 0x8e, 0x4f, 0x7b, 0xc5, 0xef, 0xfb, 0x6b, 0x43, 0x94, 0xa3, 0xee, 0x74, 0xf2, 0xce, 0x58, 0x70, 0x52, 0xe1, 0x13, 0xb6, 0xdc, 0xe7, 0xf1, 0xe4, 0xe1, 0xbe, 0x45, 0x6f, 0x6b, 0x43, 0x92, 0xf7, 0xd6, 0x3e, 0xd4, 0x65, 0xfc, 0x5b, 0x0f, 0xf7, 0x78, 0x88, 0xef, 0xb2, 0xc6, 0xd7, 0xd8, 0xf9, 0xb5, 0x91, 0x57, 0x3b, 0xed, 0x38, 0xf7, 0x41, 0xf0, 0xaf, 0x1b, 0xc6, 0x3c, 0xb8, 0xe7, 0x46, 0xaf, 0x00, 0x61, 0xc9, 0x6f, 0x0f, 0xbc, 0xa7, 0xfd, 0xb8, 0xfd, 0xbc, 0x94, 0xe7, 0x54, 0x81, 0xc3, 0x62, 0x3b, 0x74, 0x33, 0x35, 0x05, 0x4e, 0x98, 0xb3, 0x29, 0x68, 0x60, 0xed, 0x84, 0x8e, 0xe7, 0x93, 0x06, 0x46, 0x9f, 0x30, 0xcc, 0x7d, 0x6c, 0xce, 0xfc, 0xbd, 0x7d, 0x3e, 0xbb, 0xed, 0x1b, 0x13, 0xfb, 0x4b, 0x42, 0x3f, 0xdf, 0xa9, 0xd3, 0xfb, 0xa6, 0xc7, 0x54, 0xc7, 0x8e, 0x4e, 0x93, 0x3e, 0x9e, 0xd5, 0xf1, 0xa9, 0xa8, 0xc2, 0x7f, 0x2d, 0xeb, 0x1d, 0xf5, 0xe5, 0xe9, 0x5e, 0x92, 0x55, 0xc1, 0x91, 0x53, 0xbf, 0x78, 0xa2, 0xe7, 0x27, 0xc7, 0x16, 0x99, 0x2e, 0xe7, 0x1d, 0x89, 0xf8, 0x4e, 0xd2, 0xfe, 0xd1, 0xca, 0x1f, 0xf2, 0x34, 0xef, 0xcf, 0x5d, 0xf5, 0x48, 0x53, 0xcf, 0x6b, 0xdd, 0xf7, 0xfe, 0x23, 0x4c, 0x9b, 0x32, 0x30, 0xbb, 0xdb, 0x3f, 0xbb, 0xaf, 0x50, 0xab, 0x5f, 0xbd, 0xc4, 0x75, 0xb8, 0xa9, 0xe9, 0xaa, 0x5b, 0x5f, 0xaa, 0x7f, 0xf8, 0xec, 0xe6, 0xd0, 0x24, 0xfe, 0x6e, 0x8f, 0x67, 0x7d, 0xfa, 0xea, 0x1a, 0x42, 0x9e, 0x0d, 0xfb, 0x72, 0xdc, 0x27, 0x86, 0xa5, 0x7b, 0x7e, 0x0d, 0xff, 0xf0, 0xad, 0xde, 0xc6, 0xea, 0xd9, 0x4b, 0x8b, 0x7e, 0xfb, 0x31, 0xeb, 0xd9, 0xb5, 0x4f, 0x76, 0x79, 0xee, 0xd5, 0x47, 0xcf, 0x14, 0x87, 0x3c, 0xb2, 0x60, 0x7c, 0xe8, 0xa0, 0xc1, 0xe3, 0x8a, 0xaf, 0x77, 0x2c, 0x49, 0x7c, 0xed, 0xd8, 0xf3, 0xa5, 0x67, 0x5e, 0x9e, 0x38, 0x68, 0xe3, 0x80, 0x17, 0x83, 0x14, 0x7e, 0xff, 0xea, 0x9a, 0xfd, 0x4d, 0xd9, 0x3b, 0x25, 0xe5, 0x2f, 0x2c, 0xe8, 0x62, 0x29, 0xdd, 0xb7, 0x42, 0x36, 0xe1, 0xde, 0xbe, 0x5d, 0xff, 0xac, 0x0a, 0xdf, 0x9a, 0xff, 0x52, 0xc2, 0xc4, 0x82, 0xb3, 0x8d, 0xd1, 0x85, 0x3f, 0x55, 0x36, 0x8e, 0xcd, 0x9f, 0xbe, 0x21, 0xef, 0x1f, 0x57, 0xc6, 0xe7, 0x4a, 0xd3, 0x7b, 0xe6, 0xf4, 0x8a, 0xbe, 0x39, 0x46, 0xf1, 0xe2, 0x47, 0xd9, 0xfd, 0x3a, 0x14, 0x3c, 0x63, 0xff, 0x20, 0x74, 0xe4, 0xe0, 0xed, 0x3f, 0xf1, 0x47, 0x4f, 0xbc, 0x37, 0xfa, 0xe2, 0xe7, 0xa3, 0x46, 0x6d, 0xf6, 0x50, 0xdb, 0x67, 0x8f, 0x39, 0xef, 0xe0, 0xf6, 0x9f, 0xb0, 0x76, 0x7c, 0xb3, 0x43, 0xff, 0xd4, 0x87, 0x33, 0x06, 0xbc, 0xf0, 0xfc, 0x3c, 0xdb, 0xdd, 0x67, 0xce, 0x0e, 0xda, 0xef, 0x1d, 0x92, 0x3a, 0xff, 0xd3, 0x61, 0x29, 0xef, 0x7e, 0xb7, 0x64, 0xe0, 0x92, 0xa5, 0x3b, 0x93, 0x3e, 0xaa, 0x97, 0x27, 0xdf, 0x4a, 0x35, 0x27, 0x6e, 0xd7, 0x4c, 0x4e, 0x48, 0x88, 0xf8, 0x3a, 0xee, 0xb9, 0xac, 0x76, 0x66, 0xfd, 0xa5, 0xfe, 0x96, 0x87, 0x66, 0xcd, 0x8c, 0x4f, 0xcb, 0xb9, 0x9e, 0xe9, 0x90, 0x3e, 0x3a, 0xa4, 0xef, 0xd6, 0xe7, 0x9f, 0xf0, 0x3e, 0xfe, 0xe9, 0xd0, 0x59, 0xd5, 0xb7, 0x33, 0xb6, 0xac, 0x8e, 0x49, 0xbf, 0x10, 0x58, 0x96, 0x76, 0x6c, 0xe2, 0xb6, 0xc1, 0x75, 0x8f, 0x5d, 0x18, 0x76, 0x2e, 0x83, 0xfb, 0xc7, 0xf4, 0xab, 0xf6, 0x27, 0x3f, 0x7e, 0xe9, 0x9d, 0xac, 0xc8, 0x79, 0x3f, 0x8f, 0xf0, 0xf8, 0xbd, 0xc7, 0xf0, 0x61, 0x89, 0x85, 0x4f, 0x15, 0x18, 0x3f, 0x7c, 0xba, 0xbc, 0x73, 0xaf, 0xef, 0x3f, 0x7d, 0xf6, 0xb7, 0xf3, 0xbf, 0x7c, 0xf3, 0xf1, 0x85, 0x53, 0xef, 0x3e, 0x77, 0x71, 0xf8, 0x27, 0xb1, 0x97, 0xf2, 0x4e, 0x35, 0xfd, 0x18, 0xe1, 0xd8, 0xf4, 0x83, 0xa7, 0xdf, 0x84, 0xda, 0x68, 0x9b, 0xf6, 0x5a, 0x3b, 0xae, 0xf6, 0x97, 0xa1, 0xcb, 0xdf, 0xba, 0x32, 0xb2, 0x81, 0xbf, 0x5a, 0x7b, 0xc1, 0x58, 0x77, 0xa4, 0xe2, 0xea, 0x4f, 0x33, 0xa2, 0x3e, 0xf8, 0xf9, 0xf3, 0xe1, 0x63, 0x2e, 0xd7, 0x6f, 0x7a, 0xe0, 0xde, 0xee, 0xc3, 0x87, 0xee, 0x2e, 0xcf, 0x7f, 0xa5, 0x69, 0x95, 0x7c, 0x88, 0x60, 0x50, 0x75, 0x6a, 0xec, 0x3c, 0xe1, 0xe4, 0xef, 0x96, 0x9d, 0xcb, 0xef, 0x3c, 0xbf, 0x76, 0xf8, 0x6d, 0xeb, 0x4f, 0xe4, 0xe6, 0x8b, 0x53, 0x76, 0xdc, 0xd0, 0x3e, 0x3e, 0xb5, 0xbe, 0xfd, 0x13, 0x49, 0xd7, 0x17, 0xc6, 0x79, 0x37, 0xbc, 0x1d, 0xba, 0xff, 0xd7, 0xc6, 0x45, 0xb3, 0x7f, 0xfb, 0x5a, 0x18, 0x74, 0x8b, 0x1f, 0x51, 0x7a, 0xea, 0x89, 0xde, 0x9b, 0x4f, 0xfa, 0xbf, 0x7c, 0xf7, 0xf4, 0x63, 0x17, 0xfb, 0x7e, 0xbb, 0xf5, 0xd7, 0x67, 0xcf, 0xce, 0x7c, 0xe3, 0x93, 0x73, 0x87, 0xbb, 0xfe, 0xfa, 0xdd, 0x0f, 0x03, 0x7a, 0x9f, 0x39, 0xa9, 0xcc, 0x3b, 0x71, 0xcd, 0xbe, 0xea, 0xf8, 0xc6, 0x93, 0xd7, 0x8e, 0x4e, 0x5a, 0x17, 0x76, 0x4c, 0xf6, 0x4e, 0x76, 0xcd, 0xa3, 0x07, 0x57, 0x1c, 0xca, 0x2d, 0xba, 0x74, 0x64, 0x44, 0x27, 0xcd, 0x61, 0x55, 0xd3, 0x53, 0x5f, 0x75, 0x5f, 0xb8, 0x6c, 0xe7, 0x44, 0xfd, 0xe9, 0x5d, 0xfd, 0xcd, 0xc1, 0xbb, 0x0f, 0x0c, 0x7d, 0x62, 0xc7, 0xef, 0xb1, 0x8b, 0xbe, 0x7c, 0x6b, 0xf2, 0x91, 0xed, 0x8b, 0xea, 0xda, 0x57, 0xaf, 0xfc, 0x68, 0xe0, 0xfe, 0x37, 0xbe, 0x9a, 0x0b, 0x3d, 0xb5, 0x77, 0xcf, 0xf5, 0xf6, 0xbe, 0x7b, 0x4b, 0xbc, 0x12, 0x0e, 0xc4, 0x17, 0x4c, 0xff, 0xba, 0xd3, 0x91, 0xea, 0x6f, 0xc2, 0x3e, 0x93, 0x1e, 0x34, 0x2f, 0xfe, 0x68, 0xde, 0xf8, 0xbb, 0x05, 0x95, 0xe1, 0x96, 0xd0, 0xf9, 0x0f, 0xea, 0x7e, 0x5a, 0xb0, 0xac, 0xef, 0x7b, 0x8b, 0x3f, 0xc8, 0x1c, 0xf5, 0xca, 0x8d, 0xcb, 0xea, 0x45, 0x5f, 0x95, 0x9f, 0x5f, 0x78, 0x7b, 0xf7, 0xd6, 0x37, 0xbe, 0xf9, 0x70, 0xe2, 0xf2, 0xc5, 0x0f, 0x44, 0x2f, 0x7b, 0xf3, 0x85, 0xc6, 0xd7, 0x35, 0x85, 0x1b, 0x96, 0x3c, 0xe0, 0x39, 0xfe, 0x55, 0xdb, 0x96, 0x9e, 0xaf, 0xfd, 0xeb, 0xd0, 0xcd, 0xa5, 0xa6, 0x5e, 0x2f, 0xcf, 0xf6, 0x7a, 0x7a, 0xc0, 0xac, 0xa7, 0xbe, 0xf7, 0x9b, 0x33, 0x66, 0xe6, 0x37, 0x73, 0xaf, 0xbc, 0x5e, 0x3e, 0xe3, 0xdb, 0xdf, 0x2c, 0x33, 0x27, 0xf7, 0x97, 0xbd, 0xbc, 0xa1, 0xdb, 0xae, 0x8a, 0x8a, 0x51, 0x4b, 0xa7, 0x7c, 0xe1, 0x9f, 0x35, 0xf9, 0x52, 0x55, 0x97, 0xf2, 0x43, 0xa7, 0xcf, 0x4c, 0xca, 0x3c, 0xb0, 0x60, 0xea, 0x33, 0xef, 0x0d, 0x9e, 0x16, 0x13, 0xdc, 0xf1, 0x25, 0xbf, 0xe2, 0x63, 0xd3, 0x57, 0xd4, 0x5c, 0x58, 0xf5, 0xca, 0x66, 0x6e, 0xe5, 0x41, 0x99, 0x7d, 0xf5, 0x9d, 0xb1, 0xef, 0x7c, 0x50, 0x56, 0xfa, 0xf3, 0xda, 0x01, 0x01, 0x3d, 0x3e, 0x0a, 0x58, 0x53, 0xf8, 0xe1, 0x23, 0xbb, 0x3e, 0x5c, 0x13, 0x3c, 0xe9, 0xfa, 0xfb, 0xc6, 0x9f, 0x1f, 0x7d, 0x6f, 0xdc, 0x90, 0xe7, 0xdf, 0x89, 0xeb, 0xf7, 0xe9, 0xbb, 0x3b, 0x7b, 0xdc, 0x5e, 0x71, 0x33, 0x3e, 0xe6, 0xcd, 0xd5, 0xf7, 0xca, 0xde, 0x7e, 0xfd, 0x95, 0x6d, 0x6f, 0xd5, 0x3c, 0xb7, 0x73, 0xc3, 0x8f, 0x0f, 0xca, 0xd7, 0x6f, 0x7b, 0xdf, 0xbc, 0xf1, 0xe5, 0xaf, 0x27, 0x7f, 0xaa, 0xfc, 0xf6, 0xeb, 0x75, 0x7d, 0x3e, 0x6e, 0xf7, 0x49, 0x76, 0xbb, 0xfe, 0x1f, 0x0f, 0x19, 0x3d, 0xb3, 0x2a, 0x47, 0x7d, 0x62, 0xcb, 0xd3, 0xd6, 0x0e, 0x9b, 0xe5, 0xb7, 0x32, 0x36, 0xf5, 0x5c, 0x36, 0xef, 0xb3, 0xf5, 0x33, 0xce, 0x6e, 0x9d, 0x72, 0x3e, 0xe4, 0xf3, 0xd3, 0x4f, 0x0d, 0xfb, 0xe2, 0x6a, 0xe4, 0x12, 0x94, 0xcd, 0x24, 0xa3, 0x1d, 0x5b, 0x37, 0xcd, 0xdc, 0xe3, 0xbd, 0xfa, 0x97, 0x8f, 0x36, 0x04, 0x3c, 0xf1, 0x4a, 0xf6, 0xdc, 0x88, 0xfa, 0xb3, 0xbd, 0xcf, 0x3c, 0x9d, 0xf7, 0xc8, 0x67, 0xd1, 0x27, 0x5e, 0xbf, 0xa6, 0x5b, 0xff, 0xd5, 0x8c, 0x41, 0x8a, 0x7f, 0x8d, 0x3a, 0xff, 0x79, 0x21, 0xb0, 0xff, 0x27, 0x36, 0x7d, 0x71, 0xdc, 0xf6, 0xdd, 0xc9, 0xdc, 0x1b, 0x8f, 0x8e, 0x3f, 0x77, 0x7e, 0xa8, 0xea, 0x99, 0xac, 0x37, 0x9e, 0x78, 0x30, 0xad, 0xd1, 0xf4, 0x6e, 0x5d, 0xe0, 0x1b, 0xaa, 0xc6, 0x67, 0x6f, 0xaf, 0xb1, 0xec, 0xa9, 0xfe, 0xe7, 0xb9, 0x0f, 0xdf, 0xdf, 0xed, 0x88, 0x57, 0x14, 0x3f, 0xaf, 0x2d, 0x3c, 0xf8, 0x75, 0xd1, 0x8b, 0x1f, 0x2e, 0xea, 0x10, 0xdc, 0x3e, 0xec, 0xf7, 0x4f, 0xdf, 0xe9, 0xb7, 0xbc, 0x26, 0xf8, 0xa5, 0xee, 0x75, 0xdf, 0x74, 0xb2, 0xcc, 0x7d, 0xee, 0xad, 0x35, 0xdc, 0xae, 0xaa, 0xbd, 0xc9, 0x13, 0x14, 0x7d, 0x3f, 0x8a, 0x58, 0xf1, 0x8f, 0x3d, 0x73, 0x82, 0x37, 0x38, 0xfa, 0xf8, 0xd4, 0x90, 0x97, 0xd6, 0x8d, 0x89, 0x4e, 0x33, 0x2a, 0x9f, 0xbe, 0xf2, 0xca, 0x85, 0xfa, 0x27, 0xa7, 0xbd, 0xf4, 0xca, 0x0f, 0x8f, 0x1f, 0x7a, 0x69, 0xfa, 0xe8, 0xf5, 0xe7, 0x63, 0xbe, 0x1b, 0x36, 0x68, 0xee, 0x37, 0xfd, 0x74, 0x8f, 0x8e, 0x9f, 0xae, 0xaa, 0xbd, 0x7c, 0x71, 0x7c, 0x56, 0xba, 0xdf, 0xc9, 0xab, 0xe6, 0x9c, 0x2f, 0x06, 0xdf, 0x7e, 0xf3, 0x76, 0x68, 0xfd, 0xce, 0x37, 0x5e, 0xb1, 0xea, 0x4d, 0xea, 0x61, 0x83, 0x9e, 0x58, 0x7e, 0xe1, 0x56, 0x61, 0xff, 0x17, 0x17, 0x28, 0x7e, 0xdd, 0xfd, 0xaf, 0xf7, 0xcd, 0xc7, 0x82, 0xab, 0xef, 0x16, 0xa4, 0xd6, 0xbc, 0xd1, 0x2b, 0xf4, 0xd3, 0x6e, 0xb3, 0xbf, 0x0a, 0x5e, 0xfc, 0xc6, 0x8a, 0x17, 0xf5, 0xdd, 0x1f, 0x4c, 0xbe, 0xb7, 0xb9, 0x8c, 0x8b, 0x93, 0xce, 0x9f, 0xdb, 0xa0, 0xfa, 0xad, 0xce, 0xba, 0xf2, 0xf1, 0xac, 0xc0, 0xd7, 0xb2, 0xfa, 0xad, 0xec, 0xb6, 0xb1, 0xf2, 0xa1, 0x9e, 0x47, 0x7e, 0x7b, 0xf3, 0xe5, 0xdc, 0x6f, 0xc6, 0x05, 0xb6, 0x5b, 0xb9, 0x6f, 0xcd, 0xf7, 0x5e, 0x2f, 0x6e, 0x9b, 0xca, 0x7f, 0x29, 0x3f, 0x5c, 0xb4, 0xe2, 0xa9, 0x4f, 0x3b, 0x86, 0x5c, 0x7a, 0x72, 0xd3, 0xaa, 0x86, 0xd8, 0x73, 0x1d, 0x52, 0xa6, 0xfd, 0xb8, 0xe3, 0xd0, 0xf9, 0xf2, 0x89, 0x63, 0xfc, 0x8d, 0xfb, 0xff, 0x99, 0x67, 0x1d, 0xff, 0xe5, 0x5b, 0xed, 0xfc, 0xf6, 0xef, 0xce, 0xf9, 0xf8, 0xb9, 0x1e, 0xbb, 0x65, 0x23, 0x53, 0x56, 0x6c, 0x3a, 0xf5, 0xeb, 0x92, 0xc2, 0x84, 0x4a, 0xe1, 0xc8, 0xdd, 0x89, 0x69, 0xf6, 0x5f, 0x3a, 0xf7, 0x3e, 0x3d, 0x74, 0x60, 0xf7, 0xcf, 0xfc, 0x75, 0x66, 0xcf, 0x8d, 0xbb, 0xae, 0x55, 0xbd, 0xf3, 0x76, 0x85, 0x32, 0xa4, 0x53, 0xd5, 0xb7, 0x93, 0x5e, 0x3c, 0xe1, 0x78, 0x6c, 0x5e, 0xe9, 0xe1, 0xd0, 0x86, 0x87, 0xc7, 0x2e, 0xf0, 0xf8, 0x4d, 0xdb, 0xc7, 0x5e, 0xb9, 0x74, 0x4a, 0x45, 0x3f, 0xe3, 0xbc, 0xab, 0x59, 0x0b, 0x7a, 0x64, 0xf2, 0x09, 0xeb, 0x7b, 0x7a, 0xdd, 0x56, 0x9e, 0x5b, 0x39, 0xb0, 0xcb, 0xe6, 0x6f, 0xae, 0xbf, 0x77, 0xe5, 0xdc, 0xfc, 0xa6, 0x97, 0x37, 0x85, 0x27, 0x39, 0x3a, 0xbe, 0x96, 0x29, 0x2d, 0xea, 0x7e, 0x65, 0x8b, 0xb5, 0xfe, 0xd9, 0xb3, 0xc6, 0x94, 0xbd, 0xa6, 0xf2, 0x3b, 0xdf, 0x0e, 0xf9, 0x31, 0xf1, 0x99, 0x65, 0x2b, 0xfa, 0xe5, 0xdd, 0xd9, 0x3d, 0xe5, 0x48, 0xc7, 0x9c, 0xa8, 0xed, 0xc5, 0xed, 0x66, 0xbc, 0xb0, 0xbf, 0xf7, 0x88, 0xda, 0xb5, 0x69, 0xdf, 0x0f, 0x37, 0x0b, 0x99, 0xa9, 0x8f, 0x2c, 0xa9, 0xbb, 0xf5, 0x5c, 0xc5, 0xcc, 0xb5, 0x41, 0xd7, 0x7a, 0x07, 0xdd, 0x36, 0x4f, 0x96, 0xbd, 0xde, 0xbd, 0xef, 0x56, 0xcd, 0xc3, 0x3f, 0x75, 0x8d, 0x2b, 0x1d, 0xf2, 0xea, 0x47, 0x27, 0xce, 0xcf, 0xdc, 0x57, 0x35, 0xfc, 0xd1, 0x3e, 0x1b, 0x9f, 0xbc, 0xfa, 0xd4, 0xa1, 0x1f, 0x86, 0x54, 0x4d, 0x4c, 0x4b, 0x3e, 0xf6, 0xe0, 0x15, 0x21, 0xbf, 0x6b, 0x9f, 0x6c, 0xef, 0xa4, 0x97, 0x4e, 0xff, 0xf8, 0x53, 0xc4, 0x9e, 0xc9, 0x73, 0xe6, 0x14, 0x1d, 0x5d, 0x7e, 0x55, 0xf7, 0xf1, 0x9d, 0xc1, 0x95, 0x4f, 0x0f, 0xad, 0x9d, 0x1c, 0xd3, 0x33, 0x2b, 0x66, 0x8a, 0xf7, 0xdc, 0xf7, 0x2f, 0x8d, 0x7d, 0xf4, 0x61, 0xc5, 0xf6, 0xe9, 0x7e, 0x05, 0xef, 0xc5, 0x6c, 0x78, 0xe7, 0x7b, 0xf3, 0xe7, 0xdb, 0xa7, 0xdf, 0xf5, 0x34, 0xf6, 0xe8, 0xdf, 0xd1, 0x96, 0xfa, 0xeb, 0x47, 0x37, 0xc7, 0xa9, 0x23, 0x16, 0xb7, 0x5f, 0x3e, 0xa3, 0x74, 0x5b, 0xe8, 0x92, 0x87, 0x4e, 0xbd, 0xc2, 0x0d, 0xd8, 0xdb, 0x50, 0xfa, 0xff, 0x63, 0xef, 0xef, 0x03, 0xa3, 0x2c, 0xae, 0xc5, 0x71, 0xfc, 0x3c, 0x4f, 0x36, 0xcb, 0x66, 0xb3, 0xc6, 0x25, 0xc4, 0x18, 0x63, 0x0a, 0x0f, 0xdb, 0x65, 0x5d, 0x96, 0x25, 0xbb, 0xa4, 0x31, 0x4d, 0x73, 0x53, 0xdc, 0x6c, 0xde, 0x36, 0x4b, 0x58, 0xe2, 0x26, 0x62, 0x4a, 0x29, 0x7d, 0x08, 0xc9, 0x2e, 0x89, 0x21, 0x59, 0x97, 0x90, 0x46, 0x3e, 0xf9, 0xd2, 0xdd, 0x4d, 0x80, 0xf0, 0x52, 0x41, 0x40, 0x4a, 0x2d, 0xf5, 0x52, 0xaf, 0xb7, 0x45, 0x44, 0x8d, 0x48, 0x29, 0xa5, 0x94, 0x1b, 0x11, 0x29, 0x5a, 0xca, 0x0d, 0x48, 0x91, 0x5a, 0x6a, 0x11, 0x01, 0x11, 0x50, 0x50, 0x91, 0x62, 0x0c, 0xd9, 0xdf, 0x39, 0xf3, 0x3c, 0xfb, 0x92, 0x88, 0xf5, 0xf6, 0xde, 0xfb, 0xf9, 0xfc, 0xf5, 0x23, 0x3c, 0xfb, 0xcc, 0x33, 0x2f, 0x67, 0x66, 0xce, 0x9c, 0x39, 0x73, 0xce, 0xcc, 0x99, 0x99, 0xec, 0xe7, 0x1d, 0x7d, 0x7d, 0xdc, 0xcd, 0x63, 0xff, 0xee, 0x29, 0x6a, 0xca, 0x9a, 0xb3, 0xf1, 0xef, 0x8f, 0x7c, 0xcb, 0x34, 0xe3, 0xc7, 0x1b, 0xff, 0xf5, 0x7b, 0x1f, 0x7f, 0xf4, 0xf5, 0x73, 0x89, 0x77, 0x3d, 0x34, 0x5d, 0x5c, 0xf2, 0xe6, 0xa7, 0x8f, 0x1e, 0xad, 0x7b, 0xef, 0xd2, 0xae, 0xb7, 0xbf, 0xef, 0x7e, 0x34, 0x69, 0xff, 0x37, 0xdf, 0xff, 0xd5, 0xe2, 0x3f, 0x97, 0xc1, 0x7c, 0x54, 0xff, 0xfb, 0x2f, 0x4e, 0xf9, 0x5b, 0xcf, 0x9a, 0x99, 0xf3, 0xac, 0x73, 0x3f, 0x3b, 0xa1, 0x53, 0x3c, 0xd9, 0xf4, 0x04, 0xaa, 0xff, 0xa3, 0x4e, 0xbe, 0xcc, 0xfd, 0x47, 0x5e, 0xcb, 0xce, 0xe7, 0xaa, 0x93, 0x54, 0x77, 0x3c, 0xe1, 0xf2, 0x7f, 0x2d, 0x3c, 0xf1, 0xc8, 0xbf, 0x8f, 0x5e, 0xf6, 0x7f, 0x7e, 0xdd, 0xf6, 0xce, 0xef, 0x6f, 0xff, 0xe3, 0x9f, 0xb5, 0xeb, 0xb6, 0xee, 0xdb, 0x6e, 0x2a, 0x1b, 0x7d, 0x57, 0xfe, 0xd7, 0xdb, 0xff, 0x3d, 0xb0, 0xc8, 0x73, 0xf0, 0xa4, 0x96, 0x5b, 0x2c, 0x0e, 0x3d, 0xff, 0x9f, 0xfe, 0x9f, 0xbe, 0xb6, 0xf0, 0x75, 0xdd, 0x47, 0x4f, 0x3f, 0x58, 0xbe, 0x31, 0xe3, 0xca, 0x33, 0xdf, 0x7a, 0xee, 0xe6, 0xe1, 0x39, 0xa3, 0x4b, 0x95, 0x1f, 0x4e, 0x6f, 0x9f, 0xb7, 0xe2, 0xa3, 0x23, 0x3f, 0x32, 0x94, 0x9c, 0xba, 0x50, 0x74, 0xa3, 0xfe, 0xfe, 0x47, 0x2c, 0x9f, 0xe5, 0x8e, 0x5d, 0x5f, 0xf4, 0xd6, 0x8b, 0x86, 0xea, 0xff, 0x38, 0xf1, 0xc4, 0xa5, 0xf7, 0x0f, 0x7e, 0xf6, 0xd2, 0xea, 0x9f, 0x97, 0x26, 0xd7, 0xa5, 0x5c, 0xbd, 0x6b, 0x54, 0x63, 0xe5, 0xcf, 0xf7, 0xdd, 0xff, 0xd3, 0xc2, 0xbf, 0xe4, 0xdd, 0xd3, 0x7d, 0xef, 0x4f, 0xd6, 0x6d, 0xac, 0x1a, 0xca, 0xce, 0xfe, 0xc9, 0x6f, 0x6a, 0x0c, 0x83, 0x6f, 0x5f, 0x78, 0x32, 0xf5, 0xe1, 0xef, 0xad, 0xfe, 0x41, 0xfa, 0x3b, 0xb9, 0x47, 0xb2, 0xf3, 0x9e, 0x79, 0xb6, 0x62, 0xe5, 0xe8, 0xd2, 0xf3, 0xf7, 0x25, 0x08, 0xc1, 0xae, 0xdf, 0xb6, 0x3f, 0x76, 0xfa, 0xdd, 0x31, 0xd7, 0x67, 0x7f, 0xf7, 0xe6, 0x77, 0xde, 0xaf, 0xd8, 0x34, 0xf5, 0x81, 0x8f, 0xc6, 0x2b, 0x43, 0xcd, 0x25, 0x73, 0xa7, 0x1e, 0xdf, 0x76, 0x64, 0xd5, 0xc1, 0xff, 0x7c, 0xe6, 0x9b, 0x4b, 0xf2, 0x8b, 0x7e, 0x78, 0xe2, 0x7b, 0x86, 0x57, 0x5a, 0x5e, 0x5a, 0xd1, 0xde, 0x79, 0xe2, 0xc3, 0xd7, 0x0f, 0xb4, 0x9e, 0xf8, 0xda, 0x77, 0xd4, 0x2f, 0xfe, 0xfc, 0x9d, 0xb3, 0x63, 0xd3, 0x3e, 0x09, 0x3e, 0xb2, 0x75, 0xda, 0x9b, 0x8d, 0x7f, 0x18, 0xb3, 0x23, 0xe5, 0x07, 0xcf, 0xce, 0xfe, 0xf9, 0xfe, 0xdf, 0x7c, 0xeb, 0xe0, 0x12, 0x2e, 0x30, 0xf4, 0xcc, 0xe6, 0x73, 0x3f, 0xb9, 0x43, 0x9f, 0x9c, 0xb7, 0x25, 0xaf, 0xe5, 0xfe, 0xac, 0x47, 0x7f, 0x99, 0xee, 0x59, 0xb6, 0xff, 0xe1, 0xb7, 0xa6, 0x9a, 0xdf, 0x6e, 0x35, 0x57, 0xfc, 0xe6, 0x8d, 0x0d, 0x57, 0x83, 0x8a, 0xa4, 0xc7, 0xcf, 0xef, 0x7e, 0xf1, 0xff, 0x54, 0xdc, 0xf6, 0x6f, 0x63, 0xb3, 0x5f, 0xbc, 0xdb, 0x31, 0xf5, 0x58, 0xf1, 0xe4, 0xef, 0xb4, 0x7c, 0xfe, 0xca, 0xf5, 0xbf, 0xbc, 0xff, 0x8b, 0xc7, 0xbc, 0xf7, 0x8f, 0x7b, 0xa6, 0xf7, 0xf0, 0xe2, 0x23, 0x9a, 0xb6, 0x0d, 0x73, 0x7f, 0xe3, 0xf9, 0x48, 0x99, 0xf8, 0x36, 0x68, 0x61, 0x34, 0xa4, 0x32, 0xb3, 0x06, 0xb2, 0x4c, 0x52, 0x32, 0xdb, 0x97, 0x64, 0x50, 0x80, 0x86, 0xce, 0x40, 0xa0, 0x93, 0x16, 0x81, 0x83, 0xdb, 0xb5, 0x89, 0xc0, 0xdd, 0x99, 0xc8, 0x71, 0x63, 0x12, 0x61, 0xf4, 0xdd, 0x89, 0x5a, 0x6e, 0x74, 0x22, 0x24, 0xde, 0x95, 0xa8, 0xe0, 0xee, 0x48, 0x84, 0xa2, 0xaf, 0x25, 0xda, 0x38, 0x0c, 0x4f, 0xc8, 0x48, 0xe4, 0xb9, 0xb4, 0x44, 0x18, 0x9f, 0x95, 0x28, 0x70, 0xa9, 0x89, 0x90, 0x94, 0x99, 0xa8, 0xe2, 0xd2, 0x13, 0x21, 0x68, 0x4b, 0x04, 0xc0, 0x70, 0x1e, 0xd3, 0x07, 0x31, 0xfd, 0x5d, 0x77, 0x27, 0x66, 0x50, 0xfa, 0x51, 0x77, 0x25, 0x2a, 0x29, 0xfd, 0xdc, 0xaf, 0x25, 0x8a, 0x94, 0x5e, 0x91, 0x91, 0x98, 0x40, 0xe9, 0xa7, 0x64, 0x25, 0x5a, 0x29, 0xfd, 0x6d, 0x99, 0x89, 0x1a, 0x4a, 0xff, 0x32, 0xa5, 0x17, 0x25, 0xfb, 0x8f, 0x2a, 0xb2, 0xb8, 0x4d, 0x53, 0xc1, 0xc2, 0xd4, 0x51, 0x30, 0x0e, 0xdd, 0x3e, 0x7c, 0xac, 0x58, 0xea, 0x3e, 0xed, 0x28, 0x66, 0xdb, 0x27, 0x32, 0x2b, 0xdc, 0x24, 0xd8, 0x22, 0xdb, 0x8a, 0x04, 0xe8, 0xee, 0x51, 0xfc, 0x3e, 0x8d, 0xe1, 0x64, 0xbb, 0x57, 0x8b, 0x4f, 0x06, 0x7e, 0xaf, 0x1d, 0x33, 0x0a, 0xfe, 0x05, 0xdd, 0x1d, 0xf8, 0xe4, 0xe3, 0x77, 0xff, 0xe8, 0x51, 0xcc, 0x76, 0x8e, 0x6e, 0x38, 0x33, 0xe2, 0x77, 0x2f, 0xbe, 0xe9, 0xaf, 0x07, 0x1f, 0x07, 0x7e, 0x5f, 0xd5, 0x8e, 0x62, 0x56, 0xc2, 0x35, 0xf8, 0xa4, 0xdd, 0xa1, 0x82, 0x77, 0x31, 0xfd, 0x24, 0xa0, 0x63, 0x9a, 0x54, 0x90, 0x8b, 0xe1, 0x87, 0x30, 0x3d, 0xd9, 0xb6, 0xd5, 0xe3, 0xa3, 0xc7, 0xef, 0xad, 0xcc, 0xa2, 0x58, 0x05, 0xdd, 0xf8, 0x94, 0xe0, 0xf7, 0x05, 0xed, 0x28, 0x06, 0x6f, 0x36, 0xb3, 0x71, 0x4c, 0x82, 0x4d, 0x69, 0xa3, 0xa0, 0x5a, 0xb6, 0x6b, 0x2c, 0xc4, 0xef, 0x93, 0x58, 0x9f, 0x3b, 0x65, 0x3b, 0x48, 0x33, 0x7e, 0xef, 0xa6, 0x9b, 0xd6, 0xa2, 0xb6, 0x92, 0x49, 0x70, 0x43, 0x2b, 0xd9, 0x36, 0x91, 0x5d, 0x63, 0x2a, 0xe6, 0xff, 0x6f, 0x98, 0xff, 0xd7, 0x65, 0xbb, 0xc6, 0x1c, 0x0c, 0x3f, 0x80, 0xf9, 0x27, 0xcb, 0x76, 0x90, 0x3a, 0xfc, 0x7e, 0x7a, 0x98, 0xad, 0x64, 0x12, 0x9c, 0xc5, 0xf4, 0xa3, 0x64, 0xbb, 0xc6, 0x4c, 0xfc, 0xde, 0x80, 0xf9, 0x17, 0xcb, 0x76, 0x8d, 0x05, 0xf8, 0x7d, 0x1c, 0xf3, 0x1f, 0x23, 0xdb, 0x41, 0x9a, 0xf0, 0x7b, 0xe7, 0x30, 0x5b, 0xc9, 0x24, 0xb8, 0xa6, 0x1d, 0xc5, 0xac, 0xa6, 0xc8, 0xae, 0x31, 0xdd, 0x86, 0xb8, 0xc5, 0xfc, 0xbf, 0x21, 0xdb, 0x35, 0xe6, 0x61, 0xf8, 0x61, 0xcc, 0xff, 0x76, 0xd9, 0x0e, 0xd2, 0x80, 0xdf, 0xdb, 0x87, 0xd9, 0x4a, 0x26, 0xc1, 0x65, 0xed, 0x28, 0x66, 0x7b, 0x38, 0x87, 0xd9, 0x38, 0x26, 0xc1, 0x66, 0xcc, 0x7f, 0x9e, 0x6c, 0xd7, 0x38, 0x15, 0xbf, 0x4f, 0x61, 0xfe, 0x77, 0xcb, 0x76, 0x90, 0xd9, 0xf8, 0xbd, 0x77, 0x98, 0xad, 0x64, 0x12, 0x0c, 0xca, 0xed, 0x4f, 0x76, 0x8d, 0xa3, 0xb1, 0xfe, 0x5d, 0x72, 0xfb, 0x3f, 0xcc, 0x6c, 0x1c, 0x93, 0x60, 0xbf, 0xdc, 0xfe, 0x73, 0x99, 0x4d, 0x64, 0x12, 0xb3, 0x09, 0x8d, 0xd9, 0x4a, 0x26, 0xc1, 0x19, 0xb9, 0xfd, 0xbf, 0xc3, 0x6c, 0x1c, 0x93, 0x60, 0x9d, 0xdc, 0xfe, 0x8f, 0x30, 0x1b, 0xc7, 0x24, 0x38, 0x26, 0xb7, 0x7f, 0x23, 0xb3, 0x89, 0x4c, 0x62, 0x36, 0xa3, 0x31, 0x5b, 0xc9, 0x24, 0xf8, 0x58, 0x6e, 0x7f, 0xb2, 0x6b, 0xbc, 0x43, 0xab, 0xe2, 0x78, 0xb9, 0xfd, 0x17, 0x31, 0x1b, 0xc7, 0x24, 0x78, 0x5d, 0x6e, 0xff, 0x06, 0x66, 0x13, 0x99, 0xc4, 0x6c, 0x4a, 0x63, 0xb6, 0x92, 0x49, 0x70, 0x51, 0x6e, 0xff, 0xef, 0x31, 0x1b, 0xc7, 0x24, 0x78, 0x42, 0x6e, 0xff, 0xff, 0x8f, 0xd9, 0x38, 0x26, 0xc1, 0x5b, 0x72, 0xfb, 0x2f, 0x60, 0x36, 0x91, 0x49, 0xcc, 0xe6, 0x34, 0x66, 0x2b, 0x99, 0x04, 0x03, 0x72, 0xfb, 0x53, 0x9a, 0x31, 0x58, 0xff, 0x57, 0xe4, 0xf6, 0x5f, 0x88, 0x0f, 0xd9, 0x3b, 0x1e, 0x94, 0xdb, 0x7f, 0x1e, 0xb3, 0x79, 0x4b, 0x62, 0x36, 0xa9, 0x31, 0x5b, 0xb8, 0x24, 0x38, 0x2f, 0xb7, 0xff, 0x77, 0xf1, 0x21, 0xfb, 0xc5, 0x8d, 0x72, 0xfb, 0xff, 0x1f, 0x7c, 0xc8, 0x5e, 0xf1, 0x84, 0xdc, 0xfe, 0x74, 0x57, 0x2f, 0xd9, 0x3f, 0x92, 0xcd, 0x2a, 0xc1, 0x5b, 0x85, 0x0f, 0xd9, 0x47, 0x5e, 0x97, 0xdb, 0xff, 0x41, 0x7c, 0xee, 0x8c, 0x6b, 0xff, 0x1f, 0xe0, 0x43, 0xf6, 0x86, 0x47, 0xe4, 0xf6, 0xf7, 0xe2, 0x43, 0xf6, 0x8b, 0xcf, 0x33, 0x6e, 0xa2, 0x82, 0xe5, 0xf8, 0x90, 0x7d, 0xe3, 0x87, 0x72, 0xfb, 0x7f, 0x1f, 0x1f, 0xb2, 0x1f, 0x7c, 0x52, 0x6e, 0xff, 0x1f, 0xe2, 0x43, 0xf6, 0x82, 0x6f, 0xcb, 0xed, 0xdf, 0x8a, 0x0f, 0xd9, 0x1f, 0x92, 0xcd, 0x2b, 0xc1, 0x5b, 0x83, 0x0f, 0xd9, 0x27, 0x0e, 0x7d, 0x45, 0xff, 0x7f, 0x79, 0x44, 0xff, 0xff, 0xf9, 0x88, 0xfe, 0xff, 0xce, 0x88, 0xfe, 0xff, 0xd8, 0x88, 0xfe, 0x7f, 0x74, 0x44, 0xff, 0x7f, 0x71, 0x44, 0xff, 0xff, 0xe8, 0x2b, 0xfa, 0xff, 0x6b, 0x23, 0xfa, 0xff, 0x33, 0x23, 0xfa, 0xff, 0xfb, 0x23, 0xfa, 0xff, 0x4f, 0x46, 0xf4, 0xff, 0x3f, 0x8f, 0xe8, 0xff, 0xbf, 0x19, 0xd1, 0xff, 0x3f, 0xfb, 0x8a, 0xfe, 0xff, 0xea, 0x88, 0xfe, 0xff, 0xef, 0x23, 0xfa, 0xff, 0xb9, 0x11, 0xfd, 0xff, 0xf1, 0x11, 0xfd, 0xff, 0x4f, 0x23, 0xfa, 0xff, 0xaf, 0x46, 0xf4, 0xff, 0x4f, 0xbf, 0xa2, 0xff, 0xff, 0x71, 0x44, 0xff, 0x7f, 0x6e, 0x44, 0xff, 0xff, 0x60, 0x44, 0xff, 0xff, 0xd9, 0x88, 0xfe, 0xff, 0xd7, 0x11, 0xfd, 0xff, 0x77, 0x23, 0xfa, 0xff, 0xcd, 0xaf, 0xe8, 0xff, 0xaf, 0x8c, 0xe8, 0xff, 0xff, 0x36, 0xa2, 0xff, 0xbf, 0x3b, 0xa2, 0xff, 0xaf, 0x1f, 0xd1, 0xff, 0xdf, 0x18, 0xd1, 0xff, 0x5f, 0x1a, 0xd1, 0xff, 0x3f, 0xf9, 0x8a, 0xfe, 0xff, 0x87, 0x11, 0xfd, 0xff, 0xd9, 0x11, 0xfd, 0xff, 0xd2, 0x88, 0xfe, 0xff, 0xd3, 0x11, 0xfd, 0xff, 0x2f, 0x23, 0xfa, 0xff, 0x6f, 0x47, 0xf4, 0xff, 0xcf, 0xbf, 0xa2, 0xff, 0xff, 0x7e, 0x44, 0xff, 0xff, 0xe5, 0x88, 0xfe, 0xff, 0xde, 0x88, 0xfe, 0xff, 0xe3, 0x11, 0xfd, 0xff, 0xcd, 0x11, 0xfd, 0xff, 0xd7, 0x23, 0xfa, 0xff, 0xdf, 0xbf, 0xa2, 0xff, 0xff, 0xe7, 0x88, 0xfe, 0xff, 0xc2, 0x88, 0xfe, 0x7f, 0x65, 0x44, 0xff, 0xff, 0xd7, 0x11, 0xfd, 0xff, 0x6f, 0x23, 0xfa, 0xff, 0x7f, 0x8c, 0xe8, 0xff, 0x61, 0xa1, 0xb1, 0xe5, 0xab, 0x76, 0xfd, 0x0c, 0xdf, 0xe0, 0xa3, 0x95, 0xff, 0x46, 0x33, 0xe9, 0x26, 0x15, 0x6b, 0x37, 0x06, 0xd2, 0xf0, 0xef, 0x0e, 0xfc, 0x4b, 0xc7, 0xbf, 0x3b, 0xf1, 0x2f, 0x03, 0xff, 0xee, 0xc2, 0xbf, 0x4c, 0xfc, 0xbb, 0x1b, 0xff, 0xb2, 0xf0, 0xef, 0x6b, 0xf8, 0x67, 0xc3, 0x3f, 0x0e, 0xe8, 0xbc, 0x3d, 0x05, 0xb3, 0xe1, 0x4d, 0xc2, 0xb6, 0x18, 0x8d, 0xf1, 0xc6, 0x23, 0xad, 0x15, 0x21, 0x8d, 0x05, 0xe1, 0x65, 0x8e, 0xe3, 0x82, 0x3c, 0x97, 0xc0, 0x29, 0x38, 0x25, 0xa7, 0xe2, 0x34, 0x9c, 0x96, 0xcb, 0xe0, 0x04, 0xce, 0xca, 0xd9, 0x38, 0x51, 0xda, 0x3d, 0xa8, 0x1d, 0xf1, 0x37, 0x5a, 0xfe, 0x4b, 0x95, 0xff, 0xc6, 0xc8, 0x7f, 0x69, 0xf2, 0xdf, 0x1d, 0xf2, 0x9f, 0x16, 0xe9, 0xed, 0x15, 0x39, 0x67, 0x25, 0xc3, 0x61, 0x12, 0x52, 0x76, 0x32, 0x96, 0xe0, 0x76, 0x4c, 0x3d, 0x06, 0x4b, 0x7d, 0x37, 0x62, 0xf0, 0xeb, 0xd8, 0x4a, 0xdf, 0xc0, 0x96, 0x2b, 0x46, 0x8a, 0x98, 0x87, 0x54, 0xd0, 0x85, 0x14, 0xff, 0x0a, 0xbc, 0xcb, 0xb1, 0x1d, 0x65, 0x8b, 0xda, 0x1a, 0x9b, 0x1b, 0xdb, 0x1e, 0x89, 0x1e, 0x21, 0x51, 0xdf, 0xba, 0x30, 0xea, 0xf6, 0xfa, 0xe7, 0xfa, 0xe6, 0x37, 0xce, 0x8b, 0x79, 0x34, 0xb6, 0xb4, 0x2d, 0x6a, 0x6c, 0x6b, 0x8c, 0x3b, 0x71, 0x62, 0x1e, 0xe2, 0xf6, 0xfb, 0xd2, 0x6f, 0xab, 0x47, 0x76, 0xe4, 0x30, 0x67, 0xec, 0x7b, 0x42, 0x73, 0xfd, 0x84, 0x85, 0x90, 0x8d, 0x8d, 0xd2, 0x0a, 0x3f, 0x68, 0xf5, 0x3f, 0x54, 0xd7, 0xd0, 0x32, 0x6f, 0x7e, 0x0c, 0xc2, 0x23, 0x75, 0x0d, 0xfe, 0x2f, 0xe4, 0x54, 0xd2, 0xb8, 0xf0, 0xa1, 0x5b, 0x44, 0x26, 0x6f, 0x09, 0x90, 0xf4, 0x6b, 0x29, 0x80, 0x52, 0xd7, 0xcc, 0x82, 0xea, 0xef, 0x54, 0xc3, 0x84, 0x85, 0x96, 0xfa, 0x06, 0xcf, 0xf7, 0x27, 0x2c, 0x94, 0x42, 0x6e, 0x0d, 0xb6, 0x80, 0xc1, 0x35, 0x99, 0x4c, 0x42, 0xc9, 0x0c, 0xd7, 0x3d, 0x35, 0x42, 0x69, 0x49, 0x45, 0x8d, 0x50, 0xe3, 0x28, 0x15, 0xca, 0x66, 0x54, 0x56, 0xce, 0x78, 0xb0, 0xc2, 0x55, 0x2e, 0x54, 0x56, 0xb8, 0x4a, 0xab, 0xc7, 0x8f, 0x17, 0x30, 0x92, 0x54, 0x8a, 0x12, 0xff, 0xdc, 0x1f, 0x34, 0xf8, 0xa1, 0xa6, 0xb5, 0xb5, 0x19, 0xaa, 0xfc, 0xad, 0x4d, 0x0d, 0xf3, 0xda, 0xa0, 0xc6, 0x3f, 0x77, 0xe1, 0xfc, 0x79, 0x73, 0x5b, 0xa0, 0xa4, 0xa1, 0xbd, 0x71, 0x5e, 0x03, 0x4c, 0x6b, 0x9c, 0xf7, 0x10, 0x14, 0xf9, 0x7c, 0x15, 0xf3, 0x5a, 0x5b, 0xa8, 0x44, 0x45, 0xee, 0x62, 0x56, 0x28, 0x7c, 0x0a, 0xaa, 0x1f, 0x59, 0xd8, 0xd6, 0xb0, 0xc0, 0x42, 0xb0, 0x88, 0x12, 0x51, 0x81, 0xf6, 0xfb, 0x5b, 0xfd, 0x42, 0x7d, 0xc3, 0xbc, 0xd6, 0xfa, 0xc6, 0x16, 0xaf, 0xd0, 0xd2, 0xf0, 0x03, 0x76, 0x64, 0x87, 0x50, 0x3f, 0xb7, 0x6d, 0x2e, 0x34, 0x7a, 0x3c, 0xbe, 0xb9, 0xfe, 0x85, 0x0d, 0xd1, 0x22, 0xbb, 0x1a, 0x7e, 0x50, 0x11, 0x09, 0x15, 0xda, 0xfc, 0x8b, 0x5a, 0xe6, 0x21, 0x65, 0xd7, 0x0f, 0xf7, 0x6e, 0x6c, 0x69, 0x9f, 0xdb, 0xdc, 0x58, 0x0f, 0xff, 0xf5, 0x9a, 0x51, 0xc1, 0x8a, 0x9b, 0xe7, 0x2e, 0x5c, 0xd8, 0x80, 0x68, 0x43, 0x10, 0x6d, 0x8f, 0xf8, 0xd0, 0xe5, 0x6b, 0xf1, 0x66, 0x47, 0xbe, 0x80, 0xed, 0xa3, 0x8b, 0x86, 0x45, 0xcb, 0xe3, 0x2e, 0x9a, 0x5e, 0x40, 0x3f, 0xf8, 0x94, 0x40, 0x49, 0x19, 0x94, 0x35, 0xb7, 0xfa, 0xb0, 0x56, 0xc5, 0x25, 0xf8, 0xdf, 0x3d, 0x63, 0x3a, 0x94, 0x38, 0xc0, 0x51, 0x02, 0xa5, 0xd3, 0x1f, 0x00, 0xc7, 0x5c, 0x7f, 0x7d, 0x3d, 0x61, 0xd0, 0x31, 0x63, 0x7a, 0x29, 0x38, 0x5a, 0x17, 0x34, 0x40, 0x59, 0x51, 0x0d, 0x54, 0x97, 0x55, 0x43, 0x11, 0x26, 0x64, 0xc8, 0x7d, 0xa0, 0xda, 0x0e, 0xd9, 0xfe, 0x86, 0x79, 0x8f, 0xcc, 0x6b, 0xc6, 0x4a, 0x49, 0xa8, 0x82, 0x9a, 0x86, 0x8e, 0x36, 0x28, 0x69, 0x9d, 0xb7, 0x68, 0x41, 0x43, 0x4b, 0x1b, 0x54, 0xb7, 0x2e, 0x6a, 0xa9, 0x87, 0x8a, 0x96, 0x85, 0x58, 0x79, 0xe6, 0x31, 0x7d, 0xd1, 0xc2, 0xc6, 0x79, 0x50, 0xd5, 0x38, 0xaf, 0x6d, 0x91, 0xbf, 0x01, 0x8a, 0x5a, 0x1a, 0x17, 0xcc, 0x25, 0x9a, 0x84, 0xe9, 0xad, 0xed, 0x8d, 0x0d, 0xc0, 0xfa, 0xfc, 0xb0, 0xdf, 0x96, 0x86, 0x86, 0x7a, 0xa1, 0x1e, 0xa3, 0x63, 0x24, 0xaa, 0x01, 0x02, 0x6a, 0x98, 0xbb, 0x40, 0x68, 0x40, 0xa8, 0xe0, 0x69, 0x6c, 0x6e, 0x10, 0x58, 0x83, 0x44, 0xbd, 0xd9, 0x07, 0x43, 0xab, 0xe4, 0x6c, 0x6c, 0x59, 0xb8, 0xc8, 0xe3, 0x69, 0x9c, 0xd7, 0x88, 0x79, 0x0b, 0x0b, 0x1a, 0x16, 0xb4, 0x22, 0x88, 0x3a, 0xf4, 0x41, 0xd6, 0x11, 0x89, 0x30, 0xaf, 0x75, 0x81, 0x0f, 0xcb, 0x50, 0x87, 0xb0, 0xda, 0x1b, 0xfc, 0x0b, 0xa9, 0x30, 0xe4, 0xe9, 0xc7, 0x8a, 0xb5, 0x09, 0xf3, 0x1b, 0xe6, 0xd6, 0x63, 0xdc, 0x79, 0xf3, 0x1b, 0x90, 0x46, 0x16, 0xb5, 0x3c, 0xd4, 0xd2, 0xfa, 0x83, 0x16, 0x81, 0x52, 0xf8, 0x1b, 0x16, 0x52, 0x54, 0x84, 0xd9, 0x36, 0xbf, 0xb5, 0x1e, 0xe4, 0x46, 0x14, 0x7e, 0xd0, 0xd8, 0x52, 0xdf, 0xfa, 0x03, 0x61, 0x61, 0xe3, 0xe2, 0x86, 0x68, 0x74, 0x19, 0x06, 0x72, 0x35, 0xef, 0x42, 0x61, 0x61, 0x43, 0x1b, 0x44, 0x80, 0xfa, 0xe7, 0x09, 0x0b, 0x1a, 0x17, 0x22, 0x02, 0xe6, 0xcd, 0x8f, 0x02, 0xa8, 0x6b, 0x6e, 0x9d, 0xf7, 0x90, 0x20, 0xb5, 0xa1, 0xec, 0xb5, 0xb0, 0xad, 0xd5, 0xdf, 0x10, 0x09, 0x69, 0x6e, 0x68, 0xf1, 0xb6, 0xcd, 0x5f, 0x08, 0x6d, 0xad, 0xad, 0xc2, 0x82, 0xb9, 0x2d, 0x8f, 0xc8, 0x1e, 0x02, 0x11, 0x65, 0xe3, 0xc2, 0xb6, 0xb9, 0x2d, 0xf3, 0x1a, 0x84, 0x85, 0x8f, 0x2c, 0xa8, 0x6b, 0x6d, 0x5e, 0x18, 0x05, 0x80, 0xb4, 0xda, 0x10, 0x49, 0xc8, 0x0a, 0x10, 0xcd, 0xac, 0xb1, 0x2d, 0x92, 0xde, 0xdf, 0xe0, 0x6b, 0x98, 0xdb, 0x36, 0x3c, 0xc9, 0xe4, 0xc9, 0x54, 0xbe, 0x85, 0x44, 0xe7, 0x88, 0xef, 0xc9, 0xad, 0x9e, 0xc9, 0xac, 0x0c, 0xd1, 0x48, 0xc8, 0x7b, 0x1a, 0xfc, 0x73, 0x9b, 0x2d, 0xb7, 0x02, 0x1d, 0x29, 0xcc, 0x70, 0xdf, 0xe1, 0x29, 0x58, 0x2e, 0x5f, 0x48, 0xf1, 0x25, 0xbe, 0x54, 0x61, 0xcf, 0x5c, 0xbf, 0x50, 0x37, 0x97, 0x95, 0x20, 0xd2, 0x40, 0xac, 0xad, 0xa5, 0xe6, 0x89, 0x79, 0x46, 0xc0, 0xcb, 0xde, 0xff, 0x18, 0xd2, 0x3f, 0xca, 0xfd, 0x56, 0xe5, 0x1d, 0xb9, 0xc3, 0xe1, 0xec, 0x7f, 0xea, 0xe2, 0xdc, 0x47, 0x64, 0x37, 0x9d, 0xaa, 0x33, 0x41, 0x7e, 0xeb, 0xe5, 0x9d, 0xb8, 0xf4, 0x1e, 0x2f, 0xef, 0xaa, 0xb8, 0x47, 0xfe, 0x86, 0xb8, 0xf8, 0xf4, 0x6f, 0x22, 0x9d, 0x1b, 0x64, 0x49, 0xb1, 0xa8, 0xab, 0x5b, 0x40, 0xb0, 0xa4, 0xd8, 0x7f, 0xe9, 0xe8, 0x08, 0x87, 0x1d, 0x8f, 0xc0, 0xd9, 0xa5, 0x4b, 0xe8, 0x64, 0xbf, 0x3a, 0x2d, 0x3b, 0x8b, 0x0d, 0xc3, 0x3c, 0x5a, 0x55, 0x36, 0x6d, 0xb6, 0xf7, 0xaa, 0x84, 0x14, 0xd7, 0xf3, 0xe1, 0x0f, 0xa5, 0xf3, 0x2a, 0xa5, 0xb3, 0x88, 0x2d, 0x29, 0x91, 0x93, 0xdd, 0x58, 0xca, 0xf6, 0xb8, 0x94, 0x01, 0xaf, 0xc6, 0x8d, 0xa9, 0xf9, 0xec, 0xf0, 0xdf, 0x21, 0x45, 0xe4, 0x7f, 0x76, 0x44, 0x48, 0x91, 0x6e, 0xcc, 0x12, 0x72, 0xf4, 0x2e, 0x06, 0x77, 0x89, 0x3e, 0x9b, 0x57, 0x46, 0x20, 0x48, 0x79, 0x1f, 0xee, 0x1f, 0x06, 0x61, 0xb6, 0xce, 0x65, 0x7e, 0x84, 0xb6, 0x49, 0x60, 0xbe, 0x0a, 0x2a, 0xa1, 0x9c, 0xcf, 0x9c, 0xf2, 0xcf, 0x20, 0x3c, 0x77, 0xb3, 0x6b, 0x7d, 0x5c, 0xa9, 0x5d, 0xae, 0xf5, 0xf8, 0x0e, 0xd7, 0x29, 0x19, 0x04, 0x3a, 0xf1, 0xdc, 0x04, 0xa9, 0xec, 0x64, 0x3b, 0xad, 0xce, 0xb9, 0xbe, 0xaf, 0x3f, 0x18, 0x85, 0x94, 0xcd, 0xee, 0x68, 0x95, 0x76, 0xea, 0xa5, 0x48, 0xf7, 0x85, 0x57, 0x2a, 0xa4, 0x93, 0x2c, 0xf5, 0xb6, 0x7b, 0xe9, 0xa6, 0x87, 0xf4, 0x09, 0x0e, 0x5e, 0x19, 0x07, 0x0d, 0x6a, 0xd7, 0x60, 0x69, 0xc4, 0x61, 0x75, 0x2d, 0x8b, 0x94, 0x81, 0xdd, 0x34, 0x11, 0xf0, 0xda, 0xe3, 0xca, 0x32, 0xd3, 0xb5, 0xde, 0xa2, 0x8e, 0x8f, 0x7d, 0xf8, 0x14, 0xc5, 0xae, 0xd3, 0xb2, 0xd8, 0x59, 0xce, 0x80, 0xa7, 0xde, 0xa2, 0x8e, 0xc5, 0xc7, 0x5a, 0x93, 0xbf, 0xf6, 0x7f, 0xb7, 0x86, 0xd2, 0x39, 0x9d, 0x74, 0xae, 0x26, 0xdd, 0x85, 0xa6, 0x8b, 0x9e, 0x1a, 0x3d, 0x54, 0xc7, 0xda, 0x4e, 0xad, 0xa7, 0xf3, 0xa6, 0x4d, 0x7c, 0xa6, 0x37, 0xc5, 0xf2, 0x2d, 0x4a, 0x47, 0x27, 0x69, 0x86, 0x4f, 0x56, 0xad, 0x41, 0x3f, 0xdd, 0x30, 0xbf, 0x03, 0xcc, 0x6f, 0xec, 0x30, 0xbf, 0x5e, 0xe6, 0x67, 0x18, 0xe6, 0xb7, 0x99, 0xf9, 0xa5, 0x0e, 0xf3, 0xeb, 0x61, 0x7e, 0x29, 0xc3, 0xfc, 0xda, 0x98, 0x9f, 0x7a, 0x98, 0x9f, 0x78, 0x8b, 0xb4, 0x95, 0x55, 0x6b, 0x7c, 0x9c, 0x5e, 0xba, 0xe5, 0x7c, 0x2a, 0xdd, 0xe1, 0x30, 0xa1, 0x13, 0xce, 0xa9, 0xb6, 0x83, 0x69, 0x82, 0x13, 0x72, 0xe8, 0x04, 0xc6, 0x48, 0x7d, 0x6f, 0x1e, 0xfb, 0xf1, 0x1f, 0xa6, 0x5d, 0x84, 0xfa, 0x0a, 0xc4, 0x99, 0x71, 0xb7, 0x63, 0xd1, 0x6e, 0x70, 0x6d, 0x28, 0xbf, 0x04, 0x9a, 0xda, 0x35, 0xbb, 0x06, 0xb9, 0x80, 0xe7, 0x43, 0xfb, 0x36, 0xee, 0x82, 0x4f, 0x3b, 0xc1, 0xc6, 0x5d, 0xbe, 0xb7, 0x33, 0x3c, 0xc8, 0x5d, 0xc5, 0x36, 0x56, 0x70, 0xd7, 0x98, 0xfb, 0x63, 0xe6, 0xbe, 0x6e, 0x6f, 0xe2, 0x6e, 0x60, 0xac, 0x01, 0x6d, 0x21, 0xdc, 0x85, 0xf1, 0x86, 0x88, 0x0a, 0x78, 0x9e, 0xfd, 0x2a, 0x8a, 0x3f, 0x83, 0xb3, 0xbf, 0xaf, 0xb2, 0x43, 0x34, 0xb7, 0x93, 0x13, 0x6c, 0x7c, 0xba, 0xb7, 0x83, 0xf9, 0x8b, 0xbe, 0xe1, 0xfe, 0x6a, 0x6f, 0x15, 0xf3, 0x6f, 0xf6, 0xdd, 0x33, 0xcc, 0x3f, 0xc5, 0x6b, 0x64, 0xfe, 0xff, 0xdf, 0x88, 0xf8, 0xa9, 0x9e, 0x5c, 0xb9, 0xc6, 0x88, 0x25, 0xd7, 0x9e, 0xa1, 0xda, 0xaa, 0x35, 0xd1, 0x6f, 0x35, 0x7e, 0x3b, 0xe2, 0xbe, 0xd3, 0xf1, 0x3b, 0x5f, 0xbe, 0x2b, 0x87, 0x4e, 0x4f, 0x67, 0x27, 0xa6, 0x0a, 0x05, 0x06, 0x87, 0x3e, 0xc9, 0x38, 0x1f, 0xd4, 0xce, 0x2a, 0x4f, 0xb6, 0x4f, 0xf4, 0x73, 0x8e, 0xa2, 0x28, 0x1d, 0x14, 0x18, 0xe9, 0xb4, 0xd7, 0x1c, 0x61, 0x9a, 0x75, 0x10, 0xd4, 0xdf, 0xea, 0x44, 0xa9, 0x2f, 0x45, 0x67, 0x8b, 0x86, 0xaa, 0x73, 0xc6, 0x38, 0x5e, 0x16, 0x38, 0x77, 0xe0, 0xbd, 0x9e, 0x89, 0x21, 0x15, 0xbc, 0xb7, 0x62, 0xe2, 0xca, 0x0c, 0x4d, 0x75, 0xb5, 0x8f, 0x93, 0xee, 0xa2, 0x9b, 0xad, 0x60, 0xe7, 0x36, 0x1f, 0x76, 0xbc, 0x67, 0xcd, 0xd7, 0x3b, 0x0c, 0x15, 0x48, 0x9b, 0x89, 0x44, 0x87, 0xbf, 0x5f, 0x63, 0x49, 0x22, 0x4c, 0x8b, 0xdd, 0xae, 0x0d, 0x32, 0xed, 0x03, 0x6c, 0xc3, 0x50, 0x15, 0x0b, 0x7d, 0xdc, 0x92, 0x1c, 0xf1, 0xf7, 0xe8, 0x2a, 0x3e, 0x08, 0x1f, 0x61, 0xbe, 0x4f, 0x5a, 0x34, 0xec, 0xae, 0x80, 0x2a, 0xc7, 0x43, 0x74, 0xbe, 0x3c, 0x73, 0xd3, 0x09, 0xee, 0xab, 0x8b, 0x2e, 0x41, 0xa2, 0xbd, 0xf8, 0x27, 0x87, 0xc5, 0x8c, 0xe2, 0x6b, 0x87, 0xe0, 0x8d, 0xd7, 0x2a, 0x3e, 0x3a, 0x04, 0x7f, 0x3e, 0x4c, 0xe7, 0xdf, 0x41, 0xb8, 0xe2, 0x9a, 0xaa, 0xbf, 0x9d, 0xd3, 0xab, 0xb4, 0x19, 0xa9, 0xa0, 0xe4, 0xc2, 0xfd, 0x1a, 0x0e, 0x92, 0xe6, 0x9d, 0xc4, 0x9c, 0x14, 0x0c, 0xe6, 0x33, 0xec, 0x8c, 0x45, 0x2c, 0x87, 0x9c, 0x9b, 0xde, 0x59, 0xec, 0x15, 0x2c, 0xbc, 0xa3, 0x59, 0xea, 0x43, 0xbf, 0x7f, 0x1e, 0x63, 0xe6, 0x38, 0x16, 0x84, 0x8f, 0x50, 0xac, 0x59, 0x55, 0x74, 0x5b, 0x85, 0x38, 0x56, 0x2a, 0x23, 0xf9, 0x52, 0x1d, 0xbe, 0x5f, 0xe5, 0xda, 0x60, 0x49, 0xc6, 0xaf, 0x13, 0xac, 0xcc, 0x74, 0xd2, 0xee, 0x58, 0x0a, 0x93, 0xce, 0xc8, 0x16, 0xf7, 0xda, 0x4d, 0x30, 0x96, 0xa0, 0x63, 0x4f, 0xfa, 0x20, 0x4b, 0x23, 0xdd, 0x91, 0xa9, 0xd5, 0x9e, 0x51, 0x29, 0x01, 0x7e, 0xa8, 0x0d, 0x68, 0x8d, 0xc0, 0x49, 0xee, 0xd1, 0x28, 0xdd, 0xe3, 0x17, 0x1f, 0xfd, 0xe2, 0xd9, 0x69, 0xb6, 0xba, 0x6c, 0x95, 0xde, 0x65, 0x51, 0x45, 0x6e, 0x49, 0x98, 0x1d, 0x88, 0x6f, 0x9d, 0x9b, 0x35, 0x06, 0x76, 0x53, 0xa8, 0x65, 0x94, 0x74, 0x96, 0x2a, 0xe2, 0x86, 0xca, 0xf6, 0x1b, 0x4b, 0x82, 0x84, 0x1d, 0x5d, 0x42, 0xdb, 0x90, 0xb9, 0x09, 0xa9, 0xe0, 0xf9, 0xf0, 0x76, 0x23, 0x9d, 0xb6, 0xab, 0xf5, 0xb6, 0xe8, 0x40, 0xf6, 0xc9, 0x36, 0x81, 0xd7, 0xad, 0x4b, 0x90, 0xbf, 0x76, 0xe7, 0x82, 0x37, 0xdf, 0xb9, 0x8d, 0x37, 0x78, 0xd2, 0x19, 0x95, 0xfd, 0xc7, 0x08, 0x2a, 0x33, 0x98, 0xa9, 0xaf, 0xa6, 0xeb, 0x46, 0x49, 0xf1, 0x07, 0x9f, 0x10, 0x6c, 0x74, 0x23, 0x97, 0xb9, 0x8c, 0x4e, 0xa5, 0xd3, 0x25, 0xca, 0x50, 0x7e, 0x41, 0x37, 0x3a, 0xeb, 0x14, 0xc3, 0xbe, 0x8a, 0xa3, 0x70, 0x5c, 0xec, 0xbe, 0x67, 0xe4, 0x95, 0x25, 0x83, 0xd2, 0xb8, 0x21, 0xc8, 0x37, 0x7e, 0xd0, 0xc9, 0xbf, 0xc8, 0x59, 0x32, 0xd8, 0x8d, 0x7d, 0xf2, 0xb8, 0xf0, 0x8f, 0x6e, 0x5e, 0x34, 0x58, 0x20, 0x43, 0x48, 0xf0, 0x73, 0x31, 0x2a, 0xd5, 0x83, 0x37, 0xc3, 0x62, 0x81, 0x2c, 0x4b, 0x82, 0x05, 0x7c, 0xae, 0xfe, 0x17, 0xd0, 0xc5, 0xf8, 0x09, 0x1b, 0x05, 0x42, 0xde, 0x54, 0x3a, 0x21, 0x53, 0x67, 0x17, 0x12, 0xa2, 0x65, 0x59, 0x4b, 0x3c, 0x9b, 0x4e, 0xcd, 0x67, 0xf7, 0xb7, 0xb6, 0xb2, 0xd3, 0x5c, 0xf5, 0x08, 0xd7, 0x6a, 0xb5, 0x80, 0x29, 0xd7, 0x02, 0xd9, 0xf2, 0x2d, 0xac, 0x7d, 0x4e, 0xbb, 0x47, 0xe9, 0xb4, 0xa1, 0x6b, 0x97, 0x2f, 0x2d, 0x3e, 0x47, 0x03, 0xf5, 0x8b, 0x34, 0x4b, 0x02, 0xb6, 0x77, 0x9a, 0x05, 0x90, 0x62, 0x5c, 0x98, 0x9f, 0x99, 0xf2, 0x93, 0x6e, 0x54, 0x84, 0x6e, 0x16, 0x42, 0xe7, 0x1e, 0xb3, 0xf3, 0x96, 0xed, 0xcf, 0xb2, 0x53, 0x40, 0x95, 0xd6, 0x26, 0x50, 0xe4, 0xe3, 0xb8, 0xc1, 0x28, 0xce, 0xee, 0xad, 0xb5, 0x3a, 0x7c, 0xb7, 0xf7, 0xf7, 0x9c, 0x0f, 0xb0, 0xf3, 0x1a, 0x87, 0x2c, 0xf0, 0xda, 0xcb, 0xd2, 0x9d, 0x18, 0x74, 0x2f, 0x88, 0x1e, 0xfc, 0x09, 0x71, 0x3d, 0x11, 0xbc, 0xa9, 0xec, 0x8e, 0x66, 0x39, 0xb7, 0xa1, 0x7d, 0x94, 0xdb, 0x3d, 0x25, 0xa0, 0xf6, 0xa6, 0xa3, 0xaf, 0x09, 0xd4, 0x52, 0x4a, 0xe9, 0xe6, 0x22, 0xfd, 0xb4, 0xc8, 0x39, 0xcb, 0xb3, 0xd9, 0x99, 0xa1, 0xf9, 0xbc, 0x1e, 0xb1, 0xe6, 0xad, 0x94, 0x28, 0x9e, 0x68, 0xc9, 0x00, 0xee, 0xae, 0xe1, 0x58, 0x34, 0x8e, 0xc4, 0xa2, 0x40, 0x58, 0x94, 0xef, 0x56, 0xec, 0xf6, 0x6a, 0xe8, 0x94, 0x55, 0x89, 0xce, 0xe8, 0xfc, 0x40, 0xe9, 0xb4, 0x4c, 0x1b, 0x42, 0xff, 0x8e, 0x74, 0x0b, 0x1e, 0x72, 0x11, 0x83, 0x4b, 0xba, 0x8d, 0x4e, 0xa1, 0x66, 0xa7, 0x57, 0x5b, 0x11, 0xaa, 0x5b, 0x6f, 0x43, 0x4a, 0x83, 0x84, 0x01, 0x6c, 0x71, 0xea, 0xb5, 0x67, 0x07, 0x6b, 0x4d, 0x36, 0xc4, 0x8d, 0x8b, 0x4e, 0x85, 0x36, 0x14, 0x52, 0x79, 0x85, 0x62, 0x76, 0xa6, 0x77, 0xda, 0x1e, 0xe9, 0x9e, 0x25, 0xb7, 0x25, 0x9b, 0xc7, 0x1a, 0xb1, 0xd3, 0x5e, 0x0b, 0xe9, 0xf4, 0x1b, 0xd7, 0x9e, 0x9b, 0x74, 0xc7, 0xa8, 0xd6, 0xcf, 0xee, 0xf5, 0xe0, 0x72, 0xa6, 0x5f, 0x0c, 0xdf, 0xb8, 0x77, 0x01, 0x84, 0x60, 0x31, 0xfe, 0x76, 0x43, 0xe7, 0x1d, 0x0b, 0x60, 0x19, 0x2c, 0x99, 0xbc, 0x00, 0x56, 0xc3, 0x6a, 0xfc, 0x5d, 0x0b, 0x6b, 0xed, 0xcf, 0x43, 0x8f, 0xf3, 0x39, 0x68, 0xf2, 0xe8, 0xa6, 0x7f, 0x08, 0x07, 0x0c, 0xb7, 0x29, 0xbb, 0xb0, 0x8e, 0xbd, 0x45, 0x1f, 0xc0, 0x55, 0x3a, 0x27, 0xd1, 0xcc, 0x6e, 0x7f, 0x30, 0x16, 0xc2, 0xd9, 0x37, 0x36, 0x89, 0xd9, 0x74, 0x83, 0xbd, 0x63, 0x01, 0x34, 0x39, 0x9a, 0xa0, 0x4e, 0x57, 0xec, 0x7a, 0xcc, 0x92, 0x6c, 0x99, 0x0c, 0x2d, 0xf8, 0x34, 0xd1, 0x89, 0xb2, 0x37, 0xd7, 0x4e, 0xb6, 0x41, 0x13, 0x8d, 0x86, 0x9e, 0x9d, 0x22, 0x24, 0x98, 0x84, 0xe2, 0x6c, 0x23, 0x68, 0xbc, 0x66, 0x16, 0x6b, 0x2d, 0x3e, 0xab, 0x75, 0x65, 0x74, 0x6f, 0x84, 0x60, 0x3b, 0xda, 0xe7, 0xf0, 0xf5, 0x00, 0xf6, 0x45, 0xb5, 0x50, 0xe2, 0xc2, 0x54, 0xe1, 0x1b, 0xac, 0xc7, 0x01, 0x7f, 0x5d, 0x57, 0x3c, 0xf9, 0xfe, 0xf0, 0xe5, 0xc9, 0x8d, 0xe1, 0xc1, 0xf0, 0x05, 0x3a, 0x4d, 0xdc, 0x6b, 0x10, 0xee, 0x97, 0xee, 0x1b, 0xb0, 0x24, 0x17, 0x5f, 0xed, 0x01, 0xc7, 0xc3, 0x98, 0x0e, 0xa2, 0xe9, 0xae, 0xca, 0xe9, 0xf6, 0xe9, 0x8a, 0xb3, 0x27, 0x82, 0xca, 0x6b, 0x60, 0x79, 0xad, 0xa6, 0xfc, 0x84, 0x32, 0xd7, 0xda, 0xda, 0x35, 0xd9, 0x01, 0xca, 0x45, 0x57, 0xe2, 0x7a, 0x0c, 0x63, 0x5f, 0x93, 0x63, 0xaf, 0xb5, 0x6f, 0xc4, 0x5a, 0x2b, 0xec, 0xcf, 0x87, 0x07, 0xb1, 0xce, 0x82, 0x4f, 0x38, 0x11, 0xd8, 0xf5, 0x02, 0x98, 0x3d, 0x10, 0x76, 0x59, 0x26, 0x0d, 0xc3, 0xe7, 0x7d, 0xae, 0x3d, 0x83, 0x5b, 0x64, 0xf9, 0x68, 0xac, 0x73, 0x1b, 0xe4, 0x60, 0xab, 0xd3, 0x7d, 0x6f, 0x39, 0xac, 0xbe, 0x27, 0x26, 0xd8, 0x20, 0x47, 0x3a, 0xad, 0x92, 0x2f, 0x1c, 0x91, 0xb2, 0x08, 0x53, 0x7a, 0xe2, 0x52, 0x96, 0xc9, 0x29, 0xcb, 0x58, 0xca, 0xcd, 0x98, 0xb2, 0x4c, 0x4e, 0xc9, 0x8f, 0x48, 0x59, 0x88, 0x29, 0xcd, 0x72, 0xca, 0x7a, 0xe7, 0x76, 0xb0, 0x7b, 0xe7, 0xf8, 0xa6, 0x0e, 0xeb, 0x4f, 0x80, 0xbd, 0x29, 0x19, 0xe3, 0x4f, 0x45, 0xfa, 0x6e, 0x22, 0xfa, 0xfe, 0xfc, 0x6d, 0x8a, 0x3f, 0xa1, 0x18, 0xe3, 0x02, 0xb7, 0x03, 0xdb, 0x7e, 0x3b, 0xd6, 0x46, 0xd1, 0x31, 0x55, 0xe4, 0x3b, 0xf2, 0x29, 0x9e, 0xfd, 0x97, 0x12, 0x9f, 0xfb, 0xde, 0x26, 0x0b, 0x9d, 0xbd, 0x6b, 0xc7, 0x1e, 0x60, 0x8f, 0xd2, 0x7f, 0x06, 0xe6, 0x91, 0xee, 0x1d, 0x59, 0xf3, 0xa9, 0xd3, 0x06, 0x3e, 0xff, 0x85, 0xeb, 0x71, 0x03, 0x8c, 0xf0, 0xff, 0xb6, 0xeb, 0x71, 0x6a, 0xe1, 0xec, 0x55, 0xd6, 0x62, 0x8b, 0x8a, 0xce, 0xe3, 0x45, 0x78, 0xe9, 0x54, 0xa7, 0xcf, 0xcf, 0x60, 0x9d, 0xd2, 0x89, 0x36, 0xb1, 0x0c, 0xd9, 0x08, 0x33, 0xf3, 0x96, 0x30, 0xdd, 0xff, 0x45, 0x98, 0x99, 0x0c, 0xe6, 0xa3, 0x08, 0x33, 0x53, 0x82, 0x09, 0x6f, 0x8d, 0x48, 0x65, 0xc3, 0x70, 0x85, 0x8c, 0x27, 0x80, 0x75, 0x42, 0x33, 0x48, 0x27, 0xa1, 0x03, 0x2c, 0x6b, 0xc7, 0x51, 0xdb, 0xa0, 0x30, 0x26, 0xb8, 0xbb, 0x9d, 0x9b, 0x3c, 0xd7, 0x4f, 0x76, 0x9f, 0xec, 0x16, 0x14, 0xf1, 0x18, 0x34, 0x11, 0x47, 0x4a, 0xc5, 0xf6, 0x50, 0x44, 0x30, 0x38, 0xc0, 0xf8, 0xdf, 0x84, 0xe9, 0x90, 0xe7, 0xf5, 0xfd, 0xf4, 0x8f, 0x1d, 0x30, 0x7d, 0xe0, 0xf3, 0x1b, 0xa2, 0xc9, 0x6c, 0x82, 0xbc, 0x53, 0x3f, 0xb2, 0x24, 0x13, 0x6c, 0x8b, 0xf5, 0x24, 0xd2, 0x9d, 0x6b, 0xa3, 0x50, 0x26, 0x04, 0x84, 0x26, 0xc8, 0x13, 0xf0, 0xbb, 0xf6, 0x47, 0xac, 0x0d, 0xa7, 0xba, 0xbb, 0x77, 0x75, 0xb7, 0x1c, 0x13, 0x4a, 0x8e, 0x1e, 0xd0, 0x61, 0xc8, 0x1b, 0x87, 0xec, 0x2f, 0xf6, 0xc8, 0x75, 0x64, 0xf7, 0xae, 0xc2, 0x5a, 0x37, 0xe6, 0x50, 0x2b, 0x97, 0x35, 0x53, 0x70, 0xea, 0x1e, 0xe2, 0x2e, 0x3c, 0xfe, 0xba, 0x79, 0x1a, 0x96, 0xc5, 0x26, 0xaa, 0x05, 0x27, 0x73, 0xfd, 0x62, 0x31, 0x48, 0x77, 0x99, 0xd4, 0xae, 0x89, 0xdc, 0x50, 0x82, 0x1c, 0x36, 0x85, 0xdd, 0xfb, 0x98, 0xea, 0x78, 0x59, 0xe6, 0xec, 0x5a, 0x89, 0xe7, 0x47, 0xee, 0x2f, 0x41, 0xbe, 0x1f, 0xe1, 0xf9, 0xea, 0xe1, 0x21, 0x23, 0x6e, 0x36, 0xf9, 0x92, 0x31, 0x62, 0xc6, 0x95, 0xf0, 0x6e, 0xe2, 0x48, 0xd8, 0xd7, 0xb3, 0x2d, 0x15, 0x50, 0x62, 0x50, 0x5b, 0x6c, 0xe0, 0x30, 0x73, 0x46, 0x97, 0xf3, 0x79, 0x94, 0xa3, 0x20, 0x71, 0x9b, 0x84, 0xd3, 0xc4, 0xa7, 0x90, 0x27, 0x25, 0x45, 0x78, 0x92, 0x0e, 0xb9, 0x4e, 0xd5, 0x1a, 0x67, 0x0b, 0x77, 0xc3, 0x93, 0xe2, 0x44, 0xbe, 0x32, 0x53, 0xbe, 0xa5, 0x98, 0x64, 0x25, 0x0b, 0x87, 0x78, 0x05, 0x56, 0xeb, 0xb2, 0xd2, 0x81, 0xf0, 0x32, 0xd7, 0x3a, 0x13, 0x58, 0xcc, 0x88, 0x8b, 0x64, 0x19, 0x17, 0xd5, 0xae, 0x75, 0xf9, 0xa0, 0x43, 0x1f, 0xba, 0xdf, 0xd6, 0xd9, 0x1c, 0x81, 0xf1, 0x60, 0x0c, 0x06, 0xc4, 0xc1, 0x28, 0x47, 0x18, 0x76, 0xd7, 0xba, 0xfb, 0x6c, 0xe0, 0x1e, 0x06, 0x05, 0xfd, 0xf4, 0xb6, 0xe2, 0x0f, 0x80, 0x24, 0x09, 0xc1, 0x0f, 0x8f, 0x1d, 0x2a, 0xbf, 0x02, 0x55, 0xd2, 0xb9, 0xf7, 0x4c, 0x4a, 0xe7, 0x5f, 0xec, 0x6b, 0xd6, 0x98, 0x71, 0x04, 0xf9, 0xe6, 0x2e, 0x9a, 0x26, 0x14, 0x15, 0xdf, 0x7c, 0x2c, 0x03, 0xdc, 0x3d, 0x35, 0xc1, 0x9a, 0x15, 0x3e, 0x4d, 0x6f, 0x8f, 0xe7, 0x38, 0xe2, 0x29, 0x9b, 0xee, 0xfa, 0xf4, 0x2b, 0xcc, 0xcd, 0x28, 0x0d, 0x3e, 0x3f, 0x48, 0xa7, 0x7e, 0x57, 0x3a, 0x4b, 0x3c, 0xf9, 0xf7, 0x95, 0x82, 0xed, 0xbe, 0x66, 0xee, 0x2a, 0x4c, 0xc5, 0xdf, 0x8f, 0xa1, 0x10, 0x7f, 0xaf, 0x41, 0x01, 0xfe, 0x5e, 0x87, 0x7c, 0x67, 0xa9, 0x27, 0xbb, 0xba, 0x15, 0xa6, 0xe2, 0x53, 0xe8, 0x6e, 0x85, 0x02, 0x7c, 0xf2, 0xef, 0x23, 0x2d, 0xc6, 0x2e, 0xa6, 0xdb, 0xd1, 0x4d, 0xf7, 0x37, 0xe1, 0x53, 0x88, 0xcf, 0x54, 0xe6, 0x6f, 0xf3, 0x71, 0xbd, 0xa1, 0x07, 0xd9, 0xad, 0xc3, 0x58, 0x87, 0x3c, 0x67, 0x17, 0xd2, 0xe7, 0x45, 0x59, 0xea, 0xc0, 0x91, 0x25, 0x0f, 0xe3, 0x6f, 0xbc, 0x02, 0x53, 0xdf, 0xfc, 0x00, 0x56, 0x5b, 0x31, 0xfd, 0xda, 0x2b, 0x50, 0x98, 0xad, 0x7a, 0xfb, 0x39, 0x58, 0xab, 0x33, 0x73, 0x43, 0x26, 0xd8, 0x11, 0x68, 0xe6, 0x4d, 0x1c, 0x2b, 0x6b, 0xb1, 0x90, 0x58, 0x7a, 0x05, 0xe6, 0x4b, 0xa5, 0xbd, 0xe9, 0x6a, 0x03, 0x1c, 0x7b, 0xe7, 0xff, 0x7a, 0x7f, 0x73, 0xca, 0x86, 0x55, 0x7a, 0x5e, 0xba, 0x2d, 0xb4, 0x03, 0x44, 0xcd, 0x8f, 0xf7, 0x1b, 0x93, 0xf1, 0xab, 0xfb, 0x4c, 0x77, 0x1b, 0xb0, 0xbb, 0x9f, 0x9a, 0xde, 0x0e, 0x20, 0xe6, 0x52, 0xd0, 0x25, 0x22, 0x4e, 0x2d, 0x74, 0xaf, 0xc3, 0xcd, 0xb7, 0x08, 0x0a, 0x1b, 0x57, 0x5b, 0x91, 0xe2, 0x55, 0x2c, 0x9e, 0x48, 0x37, 0x11, 0xe2, 0xbb, 0x06, 0x69, 0x24, 0x1b, 0xf1, 0x91, 0xcd, 0xbe, 0xe6, 0x50, 0xde, 0x52, 0x9e, 0x43, 0x4f, 0x13, 0x9c, 0xb7, 0xcb, 0xac, 0xe5, 0x16, 0xd5, 0xc9, 0x56, 0x70, 0xe7, 0x94, 0x60, 0x4f, 0xb5, 0x40, 0x01, 0xc2, 0x73, 0x63, 0xac, 0xa9, 0x54, 0x42, 0x29, 0x66, 0xf8, 0x80, 0x74, 0x53, 0x38, 0x96, 0x11, 0x71, 0xb1, 0x79, 0xa5, 0xa5, 0x0c, 0x72, 0x0a, 0x31, 0x86, 0xa1, 0x15, 0x1c, 0x3f, 0x3e, 0xf2, 0xe6, 0x7e, 0xcc, 0x15, 0xc7, 0x73, 0x82, 0xc6, 0xf2, 0xa8, 0x8b, 0x96, 0xcb, 0x2e, 0xe0, 0x98, 0x54, 0xdd, 0x83, 0x7e, 0x25, 0x39, 0xe0, 0x78, 0xb9, 0xe8, 0x6a, 0x06, 0x18, 0x54, 0x27, 0x96, 0xa1, 0xef, 0xea, 0xea, 0x9e, 0x42, 0x0b, 0x94, 0xe5, 0x94, 0x15, 0x7d, 0xd4, 0x03, 0x7a, 0xd5, 0xf1, 0x55, 0x98, 0x63, 0x81, 0x90, 0xdc, 0xff, 0x28, 0x52, 0xf5, 0xd4, 0x63, 0x2b, 0xe5, 0x12, 0x1e, 0xa1, 0x3a, 0xc9, 0x63, 0xa3, 0x98, 0x4b, 0xb7, 0xa6, 0xee, 0xf7, 0xa9, 0x7a, 0x5f, 0x80, 0xca, 0x7a, 0x80, 0xf3, 0xa5, 0x97, 0xf9, 0x4c, 0xe7, 0x76, 0x3e, 0xd3, 0x93, 0xc1, 0xe4, 0xb6, 0xa3, 0xc2, 0xb7, 0xe0, 0xec, 0x32, 0x43, 0x4c, 0x76, 0xd3, 0x07, 0x28, 0x14, 0xdb, 0x67, 0xaf, 0xc0, 0xbf, 0xd7, 0xe3, 0xfc, 0x95, 0xaa, 0xdd, 0x5b, 0x28, 0xf0, 0x97, 0x7a, 0xa6, 0x7f, 0xaa, 0x02, 0x1c, 0x27, 0xf6, 0x3a, 0x37, 0x7a, 0xcc, 0x16, 0x0d, 0x9d, 0x3f, 0x8f, 0x63, 0xe0, 0x5a, 0x7c, 0x56, 0x53, 0x3c, 0x1d, 0x8e, 0x7e, 0xc7, 0x7e, 0xa5, 0xf2, 0x23, 0xcd, 0x5a, 0x60, 0x36, 0xb6, 0xeb, 0xb9, 0xf1, 0x95, 0x66, 0x3a, 0xc3, 0x38, 0x8b, 0xd2, 0x16, 0x61, 0x5a, 0xe7, 0x56, 0xd8, 0xeb, 0xf5, 0xfc, 0xe3, 0x9c, 0x4d, 0x38, 0x6a, 0x5d, 0x5a, 0x59, 0xf4, 0xa9, 0x11, 0x72, 0x13, 0x8f, 0x97, 0x1e, 0xb7, 0x0b, 0xf3, 0x61, 0xaf, 0x0f, 0xfc, 0xc0, 0x87, 0xe8, 0x6c, 0x6a, 0x6a, 0x83, 0x76, 0xc8, 0x4b, 0x46, 0x0c, 0xe4, 0x76, 0x40, 0xbe, 0x92, 0xce, 0xed, 0x0f, 0x87, 0x3b, 0xa1, 0x70, 0x32, 0xac, 0x5b, 0x02, 0x58, 0xf7, 0x4c, 0xc4, 0xb9, 0x11, 0x25, 0xfc, 0xdd, 0x97, 0x56, 0x16, 0x23, 0x0c, 0xa4, 0xeb, 0x03, 0x38, 0x1e, 0x1e, 0x62, 0xb7, 0x14, 0xd3, 0xa9, 0xc8, 0x07, 0xb2, 0x27, 0x4b, 0x5f, 0x5e, 0xc7, 0x9c, 0xe5, 0xbe, 0x1b, 0x47, 0x02, 0x84, 0x2f, 0x23, 0xe6, 0x89, 0xf9, 0xae, 0x75, 0x2e, 0xf7, 0x66, 0x52, 0x5e, 0x94, 0x8b, 0x3e, 0x19, 0x25, 0xbb, 0x9c, 0xce, 0x71, 0x65, 0x4a, 0x7d, 0x39, 0xdd, 0x70, 0x23, 0xd6, 0x8f, 0x08, 0xb9, 0xaf, 0x4c, 0x89, 0xfe, 0x4f, 0x89, 0x95, 0xd8, 0x83, 0x53, 0xe2, 0xa8, 0x67, 0xa6, 0x4c, 0x3d, 0xb5, 0x88, 0x07, 0xb9, 0x35, 0x3f, 0x6f, 0x33, 0x20, 0xf4, 0xea, 0xae, 0x13, 0x2f, 0xa0, 0x46, 0x89, 0x79, 0x55, 0x87, 0x22, 0xad, 0x46, 0x6d, 0x16, 0xdf, 0x62, 0x08, 0xc7, 0x86, 0xd2, 0xca, 0x54, 0xa2, 0x91, 0x53, 0x7f, 0xc8, 0x5d, 0x00, 0x8f, 0x56, 0x3b, 0x8f, 0x5f, 0x81, 0x82, 0xe3, 0x7f, 0x40, 0x88, 0xb9, 0x79, 0x16, 0x28, 0x3c, 0x61, 0x2b, 0x58, 0x00, 0xeb, 0xaa, 0xa7, 0xbf, 0x75, 0x05, 0xf2, 0xdf, 0xea, 0x1b, 0x91, 0x77, 0xad, 0x9c, 0xf7, 0xcc, 0x58, 0xde, 0x03, 0x37, 0x0a, 0x5d, 0x8c, 0xea, 0x6f, 0xab, 0xb6, 0x59, 0x6d, 0xec, 0xbe, 0x58, 0xa4, 0x1e, 0xf4, 0xdf, 0x9a, 0x57, 0x4c, 0xfe, 0xc8, 0x5f, 0xc8, 0x67, 0xa6, 0x1e, 0x25, 0x9b, 0x3f, 0xfb, 0x75, 0x76, 0xd7, 0x63, 0xb9, 0x4e, 0xba, 0x3d, 0x27, 0x7b, 0x3b, 0x85, 0x39, 0x9a, 0xc2, 0x61, 0xa2, 0x6c, 0xc1, 0xee, 0x5a, 0x4b, 0x79, 0x31, 0xce, 0xfd, 0x0f, 0xea, 0xca, 0xa0, 0xac, 0x26, 0x28, 0x04, 0xdb, 0x5d, 0x4c, 0xe3, 0x18, 0xca, 0xb3, 0x52, 0x8e, 0x79, 0x05, 0xd3, 0x59, 0x8e, 0xb7, 0x31, 0x9f, 0x99, 0x06, 0x29, 0x47, 0x94, 0x9e, 0xa2, 0xf9, 0xdd, 0xc6, 0xee, 0x75, 0xa1, 0xfc, 0x50, 0xba, 0x8b, 0xf6, 0x0a, 0x3f, 0x83, 0x5d, 0x46, 0x50, 0x11, 0x6b, 0x4e, 0x21, 0x45, 0x77, 0x9b, 0x8c, 0xb3, 0xbd, 0xec, 0x5b, 0xad, 0x4b, 0x8e, 0x7c, 0xb3, 0xfb, 0x59, 0xa4, 0x53, 0xb8, 0x1d, 0x4c, 0xee, 0x2f, 0x40, 0x1d, 0x32, 0xc9, 0x28, 0x49, 0x98, 0x53, 0x91, 0xe7, 0x14, 0x30, 0xde, 0xcd, 0x38, 0x8e, 0x1e, 0x44, 0x9d, 0xae, 0x58, 0xe0, 0x31, 0x6d, 0x3a, 0x52, 0x4d, 0x2d, 0xea, 0x72, 0xa9, 0x42, 0xb5, 0xc6, 0x0a, 0xdf, 0x36, 0x82, 0x07, 0xb9, 0x88, 0xa0, 0xea, 0x0f, 0x89, 0x1a, 0x83, 0x53, 0x98, 0xc5, 0xa8, 0xe7, 0x38, 0xbb, 0x79, 0x51, 0x23, 0xdd, 0xad, 0x25, 0xe4, 0x30, 0x88, 0x42, 0xf9, 0x85, 0xf0, 0x8d, 0xf5, 0xaf, 0x3d, 0xfe, 0x3a, 0x8d, 0x5f, 0x88, 0xc7, 0x64, 0x36, 0x2e, 0x8c, 0x45, 0xed, 0x72, 0x26, 0xdd, 0x5f, 0x5c, 0xb5, 0x26, 0x32, 0xc7, 0x23, 0xe4, 0xe8, 0x1d, 0x0c, 0x8a, 0x20, 0x1a, 0xf5, 0xc8, 0x93, 0x75, 0xf6, 0xd8, 0x0c, 0x93, 0x10, 0x73, 0x67, 0x89, 0x8a, 0xf2, 0x0b, 0xc0, 0xff, 0xfa, 0x22, 0xa8, 0x3d, 0x27, 0xa5, 0xb4, 0x38, 0x2e, 0x5d, 0x43, 0xc8, 0x9d, 0xc8, 0xe9, 0x27, 0xa3, 0x3e, 0x6e, 0x03, 0x95, 0xfd, 0x05, 0xd0, 0x3c, 0x76, 0xa8, 0xf8, 0x0a, 0x4b, 0x51, 0x69, 0xfe, 0x3e, 0xd1, 0x0d, 0x8d, 0x6c, 0xeb, 0x5f, 0x93, 0xbe, 0x87, 0xa5, 0xb1, 0xa0, 0x74, 0xf7, 0x82, 0x94, 0x66, 0x64, 0x0a, 0xd7, 0xc3, 0x14, 0x8f, 0x49, 0xe1, 0x2a, 0x7d, 0x92, 0xc9, 0x25, 0xb0, 0x91, 0xca, 0x0f, 0x42, 0xa5, 0xb9, 0x85, 0x61, 0xe4, 0x94, 0x01, 0x98, 0x5f, 0x35, 0xf3, 0x5b, 0x20, 0xf9, 0x39, 0x6d, 0x9e, 0xb1, 0x53, 0x27, 0x73, 0x57, 0x0b, 0x27, 0x73, 0x1f, 0x17, 0x4c, 0xe6, 0xae, 0xe5, 0x2f, 0xe0, 0xae, 0x3b, 0x8b, 0x3d, 0xa9, 0xd5, 0xe5, 0xd5, 0x65, 0xee, 0x52, 0x77, 0xa5, 0xa8, 0xfa, 0xc9, 0x61, 0x7b, 0xa9, 0xbd, 0xcc, 0x5e, 0x8e, 0xed, 0xcc, 0x4b, 0xe3, 0xa4, 0x60, 0xab, 0x5a, 0xc3, 0xa4, 0xbf, 0xad, 0xd0, 0xe3, 0xcd, 0xc8, 0x5b, 0xfe, 0xcd, 0x32, 0xe0, 0xad, 0x46, 0xa4, 0x6d, 0x5b, 0x7f, 0xe9, 0x37, 0x6d, 0xa0, 0x40, 0xf7, 0x3a, 0x51, 0xf6, 0x17, 0xec, 0xf8, 0xa5, 0x89, 0x0b, 0x49, 0x41, 0x77, 0x25, 0xba, 0x95, 0x6c, 0x4c, 0x2b, 0x91, 0x74, 0x64, 0x6a, 0x3f, 0xdd, 0x64, 0x6e, 0x88, 0x46, 0x05, 0x81, 0xd3, 0x95, 0x08, 0x4e, 0xba, 0x69, 0x0a, 0xcb, 0xc8, 0x46, 0x04, 0xa4, 0x99, 0xec, 0xa3, 0x74, 0xa7, 0xb2, 0x05, 0xcc, 0x7e, 0xc8, 0x01, 0xeb, 0x43, 0xa0, 0x70, 0xf7, 0xbc, 0xf8, 0x72, 0xb3, 0xb2, 0x9a, 0xee, 0xe7, 0x55, 0x44, 0x6f, 0x81, 0xd3, 0xb0, 0xb9, 0x86, 0x43, 0x74, 0x47, 0x94, 0x51, 0x65, 0x42, 0x4d, 0x64, 0x52, 0x45, 0x78, 0xd0, 0xfe, 0x5c, 0xf8, 0x06, 0x3e, 0x87, 0x96, 0x70, 0x93, 0xca, 0xc3, 0xfd, 0xf8, 0x1c, 0x7e, 0xfc, 0xf5, 0x4e, 0xae, 0x0d, 0xda, 0xc3, 0x15, 0x1f, 0x84, 0x07, 0x91, 0xb7, 0x3c, 0xc9, 0xee, 0x2f, 0x83, 0xb5, 0x56, 0x6f, 0x4b, 0x9d, 0x81, 0xb9, 0x26, 0x7b, 0x0b, 0xea, 0xd4, 0xcc, 0xc5, 0x79, 0x96, 0x88, 0xed, 0xcc, 0x95, 0xcd, 0x6e, 0x5d, 0xc5, 0x16, 0xf0, 0x34, 0x8b, 0x92, 0x2b, 0xc7, 0x5b, 0xd6, 0x90, 0xcd, 0x5c, 0xdf, 0xf0, 0x96, 0xb0, 0x77, 0xa9, 0xa7, 0x4a, 0xb4, 0xf9, 0xc2, 0xbd, 0x5d, 0x1e, 0x87, 0xc1, 0x08, 0x0a, 0xd1, 0xee, 0x0c, 0x79, 0xa6, 0xea, 0xc9, 0x95, 0x6f, 0xa6, 0xdf, 0x1c, 0xba, 0x03, 0x9c, 0xd5, 0xdb, 0x68, 0x5f, 0x27, 0xea, 0xd9, 0x7d, 0xaf, 0x87, 0xc5, 0x2c, 0xf6, 0xee, 0x17, 0xd3, 0xb2, 0x29, 0x4e, 0x8a, 0x74, 0x0b, 0xac, 0xa8, 0x64, 0xef, 0x43, 0xd8, 0x52, 0x0f, 0xb1, 0x96, 0x8a, 0xdc, 0xb6, 0x5a, 0xe3, 0x0f, 0xef, 0xe8, 0x42, 0x7d, 0x34, 0x44, 0xf3, 0x25, 0xf8, 0x5b, 0x42, 0x12, 0x73, 0xc2, 0x07, 0x52, 0xdb, 0xdc, 0x30, 0x99, 0x6d, 0xf2, 0x6c, 0x0a, 0x69, 0x27, 0x34, 0x23, 0x70, 0x76, 0x40, 0x61, 0xb4, 0x11, 0x57, 0x60, 0xe1, 0xc4, 0x95, 0xb4, 0xac, 0x04, 0x88, 0x35, 0x7d, 0x80, 0x4e, 0x8b, 0xf7, 0x00, 0x3f, 0x44, 0x30, 0x69, 0xfc, 0xc6, 0xf2, 0x02, 0x9c, 0x65, 0xa3, 0xf8, 0xd9, 0xcf, 0x9b, 0xd9, 0x7c, 0x25, 0xc0, 0xf1, 0x49, 0x44, 0x79, 0xd9, 0xe1, 0xe3, 0x93, 0x6c, 0xe1, 0x93, 0x88, 0xc9, 0x53, 0x48, 0xad, 0x1f, 0x84, 0x8f, 0x33, 0xd9, 0xae, 0xd2, 0xc8, 0x4a, 0xc5, 0xef, 0xc5, 0x1c, 0x58, 0xaa, 0x30, 0x18, 0x91, 0x3a, 0x64, 0xcd, 0x79, 0x1d, 0xe5, 0x81, 0x18, 0x5e, 0x89, 0x9a, 0x63, 0xa7, 0x5c, 0x4e, 0xd2, 0x1e, 0xcf, 0xfe, 0x1d, 0xb5, 0x75, 0x26, 0x61, 0xb6, 0x8f, 0x28, 0xa5, 0x54, 0x8b, 0x34, 0x2a, 0x25, 0x3b, 0xc9, 0x7e, 0xa6, 0xd3, 0x0c, 0x56, 0x84, 0x3f, 0x9b, 0x52, 0xa3, 0x6e, 0xcc, 0x52, 0x0f, 0xf4, 0xc9, 0xa9, 0x81, 0x2f, 0x91, 0xd3, 0x9f, 0x9b, 0xbc, 0xa3, 0x6a, 0x0d, 0xd6, 0x22, 0xe0, 0x55, 0xdc, 0x45, 0xa7, 0xfe, 0xcb, 0x90, 0x3e, 0xaf, 0xa9, 0x5a, 0x23, 0x02, 0x3f, 0x96, 0x95, 0xd5, 0x6d, 0xb4, 0xc9, 0xf5, 0x4d, 0x71, 0x2e, 0x43, 0xae, 0x7c, 0x0a, 0x4b, 0x05, 0xdc, 0xe0, 0x70, 0xc8, 0x58, 0xc7, 0xb3, 0x12, 0x6c, 0xee, 0x8c, 0x1f, 0xc7, 0x79, 0xc4, 0x3e, 0xcd, 0x63, 0x64, 0xa1, 0xff, 0x65, 0x72, 0x63, 0xad, 0x2e, 0xe8, 0x26, 0x87, 0xcf, 0xea, 0x01, 0x7d, 0x9f, 0x60, 0xf8, 0x39, 0x30, 0x89, 0xf5, 0x77, 0xc4, 0x08, 0x86, 0x4f, 0x72, 0x85, 0x4f, 0x4e, 0xc2, 0x16, 0x0b, 0x9f, 0x9a, 0x34, 0x2d, 0x7c, 0x7a, 0x52, 0x69, 0xf8, 0x1a, 0xc5, 0xa6, 0xb9, 0x16, 0x84, 0x70, 0xc1, 0x93, 0x21, 0xc3, 0xeb, 0x44, 0xac, 0x69, 0x84, 0x05, 0xe1, 0xcb, 0x74, 0x47, 0xd4, 0x78, 0xa4, 0x61, 0x9d, 0x02, 0x79, 0x2d, 0x24, 0x7c, 0x20, 0x87, 0x9f, 0xc1, 0xd8, 0x57, 0x85, 0x87, 0xb8, 0x01, 0xc6, 0x97, 0x72, 0xe8, 0x2c, 0xff, 0xc7, 0x5f, 0x27, 0xac, 0xc7, 0xee, 0x1c, 0x26, 0x89, 0x9b, 0xb4, 0x42, 0x84, 0x1e, 0x5f, 0xff, 0x74, 0xaa, 0xbf, 0xa8, 0x65, 0xf3, 0x51, 0xc7, 0x29, 0xc4, 0x9a, 0x47, 0x2d, 0x82, 0xa5, 0xb8, 0xe0, 0x55, 0xc9, 0xd0, 0x7f, 0x81, 0x5f, 0x57, 0xbd, 0x1a, 0xf9, 0xeb, 0x94, 0xc8, 0xff, 0xe4, 0xb0, 0x9f, 0xd7, 0x4f, 0x96, 0x6a, 0x88, 0x3e, 0xe9, 0x6d, 0x20, 0xaa, 0xa8, 0x94, 0x7a, 0xf8, 0xc9, 0xe1, 0x68, 0x1e, 0x0c, 0x9b, 0x0c, 0x83, 0x0e, 0x67, 0x57, 0x6b, 0xea, 0xf0, 0x16, 0xc7, 0xfa, 0xe4, 0x20, 0x3e, 0x33, 0x8b, 0x48, 0x0e, 0x78, 0x4f, 0x57, 0x22, 0x53, 0xed, 0x1c, 0xf4, 0x57, 0xb2, 0x7b, 0xb0, 0x78, 0x9f, 0x22, 0xd2, 0xd6, 0x91, 0x14, 0xde, 0xd9, 0xce, 0xe5, 0x1e, 0x8d, 0xf3, 0xb9, 0xf0, 0x61, 0xa4, 0xe7, 0xe7, 0xc2, 0xfd, 0x5e, 0x23, 0xfe, 0xde, 0xf0, 0x18, 0x18, 0xbd, 0x25, 0x84, 0x8f, 0x17, 0x7d, 0x10, 0xbe, 0x31, 0xc9, 0xf1, 0x05, 0x9a, 0xab, 0x17, 0x15, 0xd4, 0xa7, 0x11, 0x1a, 0x9b, 0x4b, 0xb8, 0x71, 0x56, 0xa8, 0xd4, 0x2d, 0x08, 0xdf, 0xd0, 0x97, 0x4a, 0x7a, 0x07, 0xdd, 0xdf, 0xd0, 0x86, 0xe5, 0x46, 0x58, 0x87, 0xbc, 0x4a, 0xc4, 0xf1, 0x21, 0x21, 0xa4, 0xe3, 0xa5, 0x9a, 0x0d, 0xe5, 0x08, 0x1a, 0x76, 0xdf, 0xd7, 0x16, 0x9a, 0x83, 0xc3, 0x5a, 0x42, 0x38, 0x8f, 0xfd, 0x76, 0x58, 0x52, 0xfc, 0x80, 0xfa, 0x83, 0x8a, 0xe2, 0xc8, 0x3c, 0xf7, 0xb2, 0xac, 0x3f, 0x58, 0xf5, 0x38, 0xe2, 0xa0, 0x0e, 0x51, 0x28, 0x8d, 0x11, 0x74, 0x43, 0xbb, 0xc4, 0x07, 0x0d, 0x52, 0x2d, 0xd2, 0x0d, 0xc0, 0xe6, 0x16, 0xb6, 0x4f, 0xbb, 0x04, 0x87, 0x45, 0xcd, 0x4f, 0xff, 0xd8, 0x0e, 0x3f, 0xfe, 0x83, 0xa8, 0xa0, 0x37, 0xe3, 0xb7, 0x1c, 0xf2, 0x5b, 0xbb, 0x3c, 0x2a, 0x9d, 0x32, 0x4a, 0x7e, 0xd3, 0xe2, 0xfd, 0xcc, 0x40, 0x37, 0xb8, 0xda, 0xd7, 0xb6, 0x01, 0xdd, 0x9e, 0x76, 0xee, 0xf2, 0x92, 0xfc, 0xb7, 0xd7, 0x14, 0x5f, 0xe6, 0xae, 0x62, 0x9e, 0xb9, 0x22, 0x8c, 0x9a, 0xcd, 0x6e, 0xf3, 0x85, 0xb5, 0x5f, 0xf3, 0x82, 0xe2, 0xad, 0x3a, 0xe0, 0x78, 0xf6, 0x75, 0xbb, 0x17, 0x12, 0xf2, 0xeb, 0x3a, 0x99, 0x5b, 0x85, 0x3d, 0xc1, 0x57, 0x57, 0xc0, 0xdc, 0x74, 0xcf, 0x95, 0xa1, 0x2e, 0x83, 0xb9, 0x79, 0xa2, 0x62, 0xe6, 0x4a, 0xf0, 0xc0, 0x28, 0x8d, 0x88, 0xd4, 0xce, 0xbe, 0x94, 0x18, 0x27, 0x5d, 0x87, 0xfc, 0xa5, 0x0e, 0xe3, 0xa2, 0xef, 0x10, 0xf3, 0x4d, 0x46, 0xdf, 0x90, 0x9c, 0x32, 0x89, 0xa0, 0x30, 0x97, 0xda, 0x03, 0xca, 0x63, 0xd8, 0x87, 0x44, 0xf6, 0x75, 0x1b, 0xfa, 0x1b, 0x31, 0xd5, 0x53, 0xe8, 0x23, 0xc5, 0x4c, 0xc7, 0x72, 0xd4, 0xd6, 0xe5, 0x31, 0x77, 0x2a, 0x86, 0x5e, 0x90, 0x21, 0xd0, 0x7c, 0xc4, 0x4e, 0xe6, 0x1a, 0x8d, 0x10, 0xd6, 0x62, 0xfc, 0x5d, 0xec, 0x0b, 0x35, 0x5e, 0x7e, 0xa0, 0x0e, 0x12, 0x54, 0xe8, 0x73, 0x98, 0xf9, 0xdc, 0x85, 0x10, 0x96, 0xc8, 0xa9, 0xee, 0x44, 0x77, 0x16, 0x73, 0x65, 0x60, 0xaa, 0x59, 0x34, 0xdb, 0xc2, 0xbe, 0xee, 0x46, 0xff, 0x5e, 0x4c, 0x75, 0x08, 0x7d, 0x5a, 0x98, 0xcf, 0x24, 0xd4, 0xdd, 0x9a, 0xea, 0x3a, 0x98, 0x5b, 0x8f, 0x98, 0x29, 0x90, 0xcb, 0x20, 0x60, 0xcc, 0x21, 0x19, 0xda, 0x58, 0x74, 0x1f, 0x60, 0xae, 0x71, 0x08, 0x0d, 0xeb, 0x9f, 0x70, 0x88, 0x7d, 0xe9, 0xb0, 0xd7, 0x5e, 0xae, 0xc3, 0x9e, 0x8c, 0x3e, 0x67, 0x99, 0xcf, 0x3d, 0x08, 0xc1, 0x2d, 0xa7, 0x9a, 0x40, 0x10, 0x98, 0xcb, 0xe0, 0x81, 0xc4, 0x13, 0x22, 0x28, 0x24, 0xff, 0x89, 0x18, 0xc7, 0x5f, 0x07, 0x8a, 0x95, 0xe8, 0x53, 0xc2, 0x7c, 0x66, 0x60, 0x19, 0x74, 0x75, 0x36, 0xe6, 0x2e, 0x46, 0x5c, 0x0b, 0x32, 0x04, 0x33, 0xc6, 0xbc, 0xc8, 0x5c, 0x53, 0x10, 0xc2, 0x06, 0x8c, 0xff, 0x14, 0xfb, 0x9a, 0x8e, 0x71, 0x72, 0xb1, 0x05, 0xab, 0xd8, 0x57, 0x09, 0x86, 0x75, 0x20, 0x77, 0xfc, 0x98, 0xbe, 0x1e, 0xcb, 0x46, 0x58, 0xbc, 0x9c, 0xbe, 0x0a, 0xd3, 0xd7, 0x30, 0xdf, 0xc9, 0x18, 0xa7, 0x06, 0xd3, 0x1f, 0x61, 0x5f, 0x56, 0x8c, 0x93, 0xd1, 0x00, 0x8a, 0xcb, 0x9a, 0x20, 0x5d, 0x5d, 0x81, 0x61, 0xf9, 0x62, 0x3e, 0xea, 0x53, 0x17, 0xe8, 0x76, 0xe7, 0xde, 0x20, 0x86, 0x5a, 0xa9, 0xbf, 0xd9, 0xb7, 0x73, 0x17, 0x44, 0xb5, 0x33, 0x88, 0xe1, 0xc2, 0x44, 0x1b, 0x77, 0xc1, 0x1d, 0x12, 0x21, 0x31, 0x9d, 0xee, 0x31, 0x63, 0x14, 0x7c, 0x55, 0xa0, 0xf0, 0x8b, 0x13, 0xf1, 0x9b, 0xbb, 0x2c, 0x9e, 0x61, 0x37, 0xd2, 0x9d, 0xd2, 0x6d, 0x47, 0xf7, 0x09, 0x8a, 0x83, 0x32, 0x58, 0xae, 0x4f, 0x15, 0x9b, 0x25, 0xc5, 0x12, 0x2e, 0x13, 0x46, 0xfa, 0x6d, 0xff, 0xd6, 0x7c, 0x50, 0x72, 0x37, 0xc4, 0xa6, 0x28, 0xd4, 0x27, 0x72, 0x9a, 0xe9, 0xa6, 0x2b, 0x7e, 0x3b, 0x83, 0x3b, 0x20, 0x56, 0x45, 0x43, 0x02, 0x98, 0xdf, 0x00, 0xf6, 0xb1, 0xc5, 0x2c, 0x64, 0x48, 0xcc, 0x8b, 0x86, 0x40, 0xd8, 0x83, 0x61, 0x43, 0x18, 0x36, 0x87, 0xe0, 0xf1, 0xbc, 0x98, 0x19, 0x17, 0xe6, 0xcc, 0x69, 0x46, 0x1f, 0xe0, 0x67, 0xb1, 0x30, 0x85, 0x3b, 0x84, 0xfc, 0x45, 0x29, 0x94, 0x60, 0x9b, 0xed, 0x41, 0x59, 0x52, 0xad, 0x2b, 0x75, 0x3d, 0x56, 0x8b, 0xdc, 0x5d, 0x51, 0x18, 0x97, 0x26, 0x1d, 0xd3, 0x28, 0x30, 0x8d, 0x81, 0xf4, 0x51, 0x85, 0x2e, 0x16, 0x32, 0x34, 0x88, 0xb2, 0xe1, 0x33, 0x90, 0x25, 0xc2, 0xd0, 0xc7, 0x92, 0x1e, 0xa5, 0x50, 0xc4, 0x85, 0xbe, 0x2d, 0x3c, 0xc7, 0xc2, 0x4e, 0x50, 0xba, 0x84, 0x8b, 0xba, 0x62, 0x1d, 0xdd, 0x9e, 0x0e, 0xfc, 0x62, 0xea, 0x25, 0xe8, 0x97, 0xbf, 0x43, 0x8a, 0xb7, 0x4b, 0x28, 0xd6, 0x21, 0x46, 0x86, 0x9e, 0x97, 0x60, 0x24, 0xf4, 0x99, 0xa4, 0x78, 0x6e, 0x8a, 0xc7, 0xfc, 0x52, 0xe4, 0x98, 0xab, 0x75, 0x8f, 0x63, 0xbc, 0x65, 0xf2, 0xd7, 0x12, 0x5f, 0x18, 0x63, 0x6d, 0x64, 0xd0, 0x57, 0xeb, 0x8a, 0xbf, 0x4e, 0x77, 0xa1, 0x53, 0x0f, 0xc8, 0x64, 0x3e, 0x8b, 0xe3, 0x4a, 0x52, 0xc3, 0xca, 0x89, 0x61, 0x43, 0x4e, 0x39, 0x8f, 0xd9, 0x93, 0xe4, 0xd8, 0xdc, 0x65, 0xd9, 0xc7, 0x19, 0x17, 0x5f, 0x8f, 0x25, 0xa7, 0xd8, 0x59, 0x0c, 0x92, 0xd5, 0x22, 0xdd, 0xd4, 0x8e, 0x92, 0x52, 0x75, 0x40, 0xc3, 0xd6, 0x3f, 0xb0, 0xd7, 0x64, 0xa2, 0xbc, 0x98, 0x8f, 0x6d, 0x68, 0x5d, 0xff, 0x9a, 0xbe, 0xdc, 0x5c, 0x49, 0x5c, 0x52, 0x28, 0x1e, 0xdf, 0x0a, 0x66, 0x2a, 0x3b, 0xb7, 0x51, 0xae, 0x23, 0xf0, 0xcf, 0x4b, 0xa5, 0xbd, 0xd9, 0x2f, 0xc8, 0xf5, 0xbf, 0x79, 0x50, 0xca, 0x91, 0x3f, 0x79, 0x2b, 0xb8, 0xfc, 0xfe, 0x2f, 0xc2, 0x9d, 0x14, 0x81, 0x6a, 0x8b, 0x62, 0x04, 0xf8, 0x99, 0x32, 0xdc, 0x0e, 0xdd, 0x73, 0x0c, 0xaa, 0x8f, 0xe5, 0xd6, 0x2d, 0xe3, 0x81, 0xf8, 0x52, 0x2a, 0xf3, 0xf1, 0xc7, 0xea, 0x75, 0xb3, 0x92, 0xe1, 0x01, 0xc3, 0x6e, 0xda, 0x65, 0x28, 0x35, 0x93, 0xe4, 0xd8, 0x70, 0x56, 0xf6, 0xb1, 0xc7, 0xc5, 0xcf, 0x42, 0x3c, 0x50, 0xec, 0x34, 0x69, 0xee, 0x9d, 0x37, 0x7c, 0x93, 0xee, 0xae, 0xef, 0xc6, 0xd8, 0xbb, 0x64, 0x9f, 0xb4, 0x58, 0xec, 0xc1, 0x0f, 0x73, 0x1e, 0x82, 0x6e, 0x61, 0x85, 0x08, 0x83, 0x67, 0xa5, 0x50, 0xee, 0xfa, 0x9d, 0x74, 0xae, 0xe3, 0x32, 0xf4, 0x39, 0x46, 0x25, 0x67, 0xbe, 0x5a, 0xa9, 0xdc, 0x83, 0x7d, 0xa9, 0xcf, 0xb2, 0x90, 0xdd, 0xf2, 0x77, 0xaf, 0x7d, 0x34, 0x7e, 0x6d, 0x93, 0x53, 0xee, 0xa5, 0xde, 0xa7, 0x83, 0xea, 0xa0, 0x26, 0x28, 0xe1, 0x85, 0xdb, 0x76, 0x8f, 0x0d, 0x56, 0x8b, 0x85, 0x72, 0xf8, 0x66, 0x61, 0x12, 0xac, 0xc6, 0xf7, 0x86, 0x48, 0xfe, 0x1e, 0x11, 0x53, 0x37, 0xcb, 0xa1, 0x4b, 0xbe, 0x90, 0xba, 0x19, 0x53, 0xaf, 0xb5, 0x3f, 0x0b, 0x2d, 0x18, 0xab, 0x4c, 0x8e, 0x55, 0x1b, 0x57, 0xf6, 0x1c, 0xe1, 0x59, 0x40, 0x1a, 0x1c, 0x34, 0xb1, 0xb0, 0x4c, 0xe7, 0xb3, 0xb0, 0xdb, 0x1b, 0x5f, 0xb7, 0x54, 0x1f, 0x27, 0xa0, 0xd4, 0x35, 0xa8, 0x8e, 0xe6, 0x07, 0x80, 0x72, 0xee, 0xe7, 0x03, 0xd1, 0x7a, 0xa1, 0xcc, 0x22, 0xd5, 0xe4, 0xf3, 0xf3, 0x3e, 0x4e, 0x87, 0x71, 0x3f, 0x7f, 0x3b, 0x2e, 0x6c, 0xab, 0x1c, 0xf6, 0x3a, 0xca, 0xd9, 0x21, 0x5d, 0x0f, 0x86, 0xf6, 0xc5, 0x85, 0xae, 0x94, 0x43, 0xb7, 0xeb, 0x9e, 0x05, 0x0a, 0x7b, 0x7a, 0x8f, 0x54, 0x0a, 0xc4, 0x7e, 0x7c, 0x29, 0xe0, 0x17, 0x52, 0x29, 0x50, 0xba, 0x8e, 0xf9, 0xad, 0xb3, 0x13, 0x37, 0x59, 0x2d, 0xd3, 0xdb, 0x54, 0x19, 0x52, 0x1d, 0xa3, 0x36, 0x2d, 0xc2, 0xaa, 0x45, 0x5f, 0xa7, 0x4c, 0x15, 0x5a, 0xc4, 0x40, 0x3b, 0x72, 0xb7, 0x08, 0x15, 0xc9, 0x6d, 0xf1, 0x79, 0x2e, 0xd2, 0x10, 0xc5, 0x35, 0xcb, 0xdf, 0x7a, 0xfb, 0x63, 0xf8, 0x35, 0x56, 0xea, 0x7b, 0x93, 0x22, 0x29, 0x97, 0x10, 0xfe, 0x90, 0x5f, 0xa8, 0x84, 0x12, 0xca, 0x73, 0x60, 0x28, 0x9e, 0x63, 0x0c, 0x5c, 0x75, 0x2e, 0xf3, 0x2a, 0x74, 0x65, 0xba, 0x9e, 0xa2, 0x2b, 0x50, 0x28, 0x8f, 0xc2, 0xb2, 0x7c, 0x7d, 0x63, 0x43, 0xf4, 0x46, 0xde, 0xb4, 0x91, 0x6b, 0xde, 0x37, 0x5d, 0xb1, 0x99, 0x48, 0xc9, 0x27, 0x5c, 0x30, 0xf2, 0x36, 0xe5, 0xc1, 0x7a, 0x39, 0x8e, 0x25, 0xba, 0x52, 0x1e, 0x91, 0x27, 0xea, 0x23, 0xf2, 0x04, 0x8e, 0xeb, 0x66, 0x8b, 0x13, 0x0a, 0x51, 0xaa, 0x18, 0x29, 0x4b, 0x80, 0x62, 0x1f, 0xb6, 0xe7, 0x6a, 0x8f, 0x0a, 0x71, 0x9f, 0x76, 0x8f, 0x03, 0x56, 0xe3, 0xd7, 0x5a, 0x8f, 0x0a, 0xa9, 0x35, 0xfd, 0x9e, 0x0a, 0x1c, 0xe8, 0xb0, 0x77, 0xfd, 0xea, 0x12, 0x6a, 0x5d, 0xa0, 0xd8, 0x88, 0xd2, 0x46, 0x9f, 0x31, 0x59, 0xd9, 0x4d, 0x86, 0x1c, 0xfa, 0xe9, 0x66, 0x94, 0x1c, 0x3e, 0x34, 0x92, 0x0e, 0xfe, 0xa1, 0x42, 0x30, 0x81, 0xc2, 0xab, 0x65, 0xba, 0x39, 0xd0, 0x6a, 0x81, 0x7d, 0x1b, 0x28, 0x10, 0xfa, 0x3a, 0x2f, 0xca, 0x3a, 0x8b, 0x01, 0x79, 0xac, 0x5b, 0xa0, 0x2b, 0xe3, 0x1e, 0x82, 0x1e, 0x6c, 0x1b, 0xab, 0x3c, 0x4b, 0x58, 0xe9, 0x5e, 0x5a, 0x1b, 0xda, 0xb3, 0x2d, 0x7c, 0xb5, 0xe1, 0xb4, 0xbc, 0x56, 0x9c, 0x4a, 0xba, 0xbc, 0x7d, 0x1d, 0xad, 0xa9, 0x83, 0xca, 0x9b, 0x1a, 0x59, 0x53, 0x27, 0x5d, 0x1e, 0x21, 0xaa, 0xaa, 0xd6, 0x94, 0x5e, 0x04, 0x61, 0xf7, 0x4a, 0x0f, 0xd1, 0x6a, 0x8f, 0xf3, 0x05, 0xa0, 0x51, 0x0f, 0xe8, 0x46, 0x73, 0x84, 0x98, 0xca, 0xb0, 0x45, 0xbc, 0xea, 0x63, 0xd4, 0x9e, 0x37, 0xf8, 0x40, 0x87, 0x9a, 0x68, 0xce, 0x44, 0xe0, 0xf5, 0x65, 0xba, 0x26, 0x50, 0xec, 0x08, 0xb4, 0xaa, 0x75, 0x70, 0x2c, 0x60, 0x7d, 0x31, 0x03, 0x44, 0xde, 0xfa, 0x98, 0x3b, 0x50, 0xd3, 0xe3, 0xd7, 0xec, 0x08, 0x78, 0x4e, 0x52, 0x7a, 0xe4, 0x35, 0x56, 0xb0, 0x65, 0x27, 0x2b, 0x97, 0x63, 0x8e, 0x07, 0x8a, 0x2f, 0xc1, 0x6e, 0x92, 0x84, 0x16, 0x83, 0x60, 0xe6, 0x2e, 0x5b, 0x3a, 0xd9, 0xa5, 0x4d, 0x5b, 0x51, 0x73, 0xde, 0xce, 0xdc, 0x1c, 0xf4, 0x22, 0x17, 0xda, 0xc9, 0xee, 0xf8, 0xda, 0x6d, 0x69, 0x85, 0x42, 0xd8, 0x2b, 0x94, 0xb5, 0x41, 0x2e, 0x6a, 0x9d, 0xba, 0x49, 0x28, 0x0e, 0x60, 0xdf, 0x6b, 0xa7, 0x79, 0x46, 0xb3, 0xd0, 0x08, 0xb5, 0x72, 0x5d, 0x9b, 0xf4, 0xe5, 0x7a, 0xc4, 0x35, 0x67, 0xa2, 0x71, 0xcd, 0xb9, 0x16, 0xfb, 0xc7, 0x35, 0x1f, 0xd7, 0xbb, 0xd4, 0x43, 0x6b, 0x84, 0x56, 0x95, 0x11, 0x61, 0x8e, 0xf6, 0x2a, 0x51, 0x83, 0xcb, 0x14, 0x53, 0x75, 0xe4, 0x83, 0xe5, 0x46, 0x1f, 0xe0, 0xcf, 0x18, 0x26, 0x42, 0x3a, 0xe3, 0x54, 0x27, 0x59, 0x7c, 0x6a, 0x77, 0x2b, 0xcb, 0x4b, 0x7b, 0x20, 0x40, 0xb3, 0x82, 0x84, 0x73, 0x47, 0x2b, 0x38, 0x68, 0x26, 0x52, 0x57, 0x6e, 0xb9, 0x1f, 0xaa, 0x90, 0xc2, 0x90, 0x93, 0xd1, 0x5c, 0x93, 0xbe, 0x4c, 0xc6, 0xcb, 0x46, 0xdf, 0xed, 0xfd, 0xd8, 0xc6, 0xe7, 0x7b, 0x2c, 0x58, 0xbe, 0xc8, 0x9a, 0x9f, 0xb4, 0xde, 0x67, 0x04, 0x3f, 0x1f, 0xbf, 0x1e, 0x22, 0xaf, 0xeb, 0x34, 0x21, 0x94, 0x3e, 0x9d, 0x4d, 0x90, 0x67, 0x74, 0x87, 0xcc, 0xa8, 0x1d, 0xf7, 0x21, 0x05, 0x55, 0xe9, 0xca, 0x68, 0xa6, 0x57, 0xba, 0x9d, 0xb4, 0xf8, 0x0a, 0x94, 0xc8, 0xe1, 0xdb, 0xc8, 0xdd, 0xc6, 0x51, 0xae, 0xb2, 0xcf, 0x2e, 0xe4, 0xa6, 0x8a, 0x98, 0x65, 0x07, 0x8e, 0x3c, 0xe9, 0xce, 0xc7, 0x3d, 0x99, 0x02, 0xea, 0x01, 0xfd, 0x81, 0xfe, 0x80, 0x0e, 0x25, 0x74, 0xe0, 0x62, 0x6b, 0xca, 0xa6, 0x80, 0xf3, 0x71, 0xaf, 0xba, 0x03, 0x1e, 0x7f, 0x9d, 0x38, 0xbc, 0x38, 0x87, 0x7a, 0x8f, 0xa3, 0x03, 0xbc, 0x58, 0x2f, 0x03, 0x69, 0x54, 0xd8, 0xab, 0x17, 0x84, 0xaf, 0x1d, 0x7d, 0xdd, 0x0f, 0xa9, 0xda, 0x77, 0x2a, 0x1c, 0x45, 0xf6, 0xa2, 0x36, 0x48, 0x43, 0xbc, 0xbd, 0xe3, 0x74, 0xd8, 0xed, 0xf6, 0x76, 0x48, 0x37, 0x02, 0xff, 0xce, 0x34, 0x47, 0xb1, 0xbd, 0x18, 0x31, 0x64, 0xc3, 0xd2, 0x6c, 0x95, 0x31, 0xbf, 0x5b, 0x78, 0x40, 0x5a, 0x95, 0x1f, 0x1f, 0x70, 0x80, 0x1b, 0x61, 0xcf, 0x5c, 0x59, 0xdb, 0x8d, 0xa3, 0x4a, 0x7e, 0xef, 0x73, 0x48, 0x79, 0xdb, 0x08, 0x23, 0xf8, 0xac, 0x8e, 0xac, 0x7e, 0xfa, 0x63, 0x2b, 0xd0, 0x35, 0x74, 0xe7, 0xac, 0xc7, 0x44, 0x18, 0xbe, 0xf4, 0xa3, 0x37, 0x5f, 0x2d, 0xbf, 0x04, 0x07, 0x2c, 0x63, 0x5c, 0x7b, 0x06, 0xbb, 0xed, 0xeb, 0x63, 0xa5, 0x1b, 0xec, 0x61, 0x16, 0x30, 0x76, 0x1c, 0x51, 0x6a, 0x46, 0xc2, 0x22, 0xb9, 0x46, 0xb8, 0x5f, 0xe7, 0x8c, 0x49, 0x31, 0x66, 0x27, 0xca, 0xfe, 0x99, 0x92, 0xbf, 0x0f, 0xb4, 0xd4, 0x27, 0x6c, 0x47, 0xfb, 0x74, 0x0f, 0xbc, 0x71, 0x28, 0xeb, 0xa3, 0x9e, 0x04, 0x77, 0x68, 0x24, 0x84, 0xde, 0x50, 0xdd, 0xb1, 0x58, 0x0b, 0x7f, 0x7e, 0x43, 0x28, 0xb7, 0x54, 0x41, 0x95, 0x11, 0x63, 0x18, 0x26, 0xd1, 0x7c, 0xa0, 0x5e, 0x51, 0x1d, 0xa2, 0xf6, 0x8e, 0xe1, 0xfd, 0xf3, 0x48, 0x5f, 0xa2, 0x35, 0x9f, 0x5d, 0x6c, 0xb6, 0xed, 0xb9, 0xf0, 0xe5, 0x05, 0x00, 0x9b, 0x74, 0xe5, 0xc2, 0xfd, 0x48, 0x39, 0x5a, 0x96, 0x07, 0x1f, 0xc9, 0xa1, 0x56, 0x6a, 0x89, 0xd8, 0x1a, 0x75, 0xcd, 0x24, 0x1b, 0xa8, 0x3c, 0xa9, 0xb1, 0x1a, 0x7e, 0xfe, 0x0b, 0x86, 0xff, 0xcd, 0x74, 0x27, 0xa3, 0x21, 0x55, 0xb0, 0xcd, 0xe9, 0x11, 0x54, 0xfe, 0x1b, 0x7d, 0x41, 0xc1, 0xe6, 0x87, 0xdc, 0x4e, 0xd4, 0xb3, 0xb2, 0x11, 0xfb, 0x77, 0xed, 0xc2, 0x5c, 0xbc, 0xd8, 0x20, 0xe7, 0xbb, 0x0d, 0x50, 0xd6, 0xe5, 0x1f, 0x75, 0x30, 0xa8, 0x53, 0xbf, 0xf7, 0x4c, 0x97, 0x15, 0x71, 0x1e, 0x30, 0x24, 0xf5, 0x22, 0xf5, 0x35, 0x9c, 0xd4, 0xa5, 0xb8, 0x83, 0x47, 0xf7, 0xef, 0x40, 0xfe, 0x52, 0xaf, 0x22, 0x0a, 0x35, 0x17, 0x89, 0x67, 0xdd, 0x4b, 0x7d, 0xc2, 0xdb, 0x81, 0xa3, 0x2f, 0x40, 0xee, 0xb4, 0x0f, 0x40, 0xf0, 0xf3, 0x3b, 0x96, 0x7a, 0x60, 0x70, 0xe5, 0x3d, 0x34, 0xa6, 0xf7, 0xb4, 0x71, 0xd4, 0x37, 0x75, 0x11, 0x2a, 0x76, 0x68, 0xec, 0xc0, 0x49, 0x25, 0xb3, 0xff, 0x12, 0xcb, 0x95, 0x82, 0xe5, 0x52, 0xb6, 0x71, 0x91, 0xf5, 0x7d, 0xc6, 0x41, 0x37, 0xb3, 0x39, 0xbb, 0xa9, 0xa4, 0x3f, 0x89, 0x4a, 0x0d, 0x40, 0xa7, 0xb7, 0x52, 0x7b, 0x97, 0xe7, 0xba, 0xde, 0x41, 0xb7, 0xb1, 0x7e, 0xbf, 0x5e, 0x2c, 0xc0, 0x9a, 0x3f, 0x4e, 0xab, 0xd0, 0x06, 0xa7, 0xe0, 0xd4, 0xd9, 0xe3, 0x66, 0xee, 0x52, 0xb4, 0x39, 0xf9, 0xc0, 0x52, 0x8c, 0x75, 0xe2, 0xe8, 0xa2, 0x9f, 0xa6, 0xbd, 0x9b, 0x7d, 0x29, 0x9d, 0xe0, 0xf9, 0x58, 0xe4, 0xf5, 0xd3, 0x9c, 0xa9, 0x9e, 0xfd, 0x76, 0x9b, 0x6c, 0xc3, 0x22, 0xad, 0xe1, 0xeb, 0x8c, 0x60, 0x48, 0x41, 0x4e, 0x53, 0x48, 0x27, 0xe2, 0xea, 0x63, 0xd4, 0xec, 0x40, 0xbe, 0x3a, 0x4b, 0xb0, 0xf9, 0xc6, 0x94, 0xc5, 0xa8, 0xa9, 0x90, 0xdd, 0x60, 0x5c, 0x82, 0x38, 0xbd, 0x6c, 0xff, 0xa5, 0xd4, 0xfb, 0xbe, 0xb7, 0xe9, 0x8e, 0x12, 0xc8, 0x2f, 0xba, 0x08, 0xb5, 0x13, 0x1c, 0x20, 0x22, 0x87, 0x9b, 0x8d, 0xee, 0xd9, 0xe8, 0xae, 0xf5, 0x85, 0x27, 0x20, 0xb7, 0xc1, 0xe7, 0xb0, 0x25, 0x81, 0xcd, 0x57, 0x9d, 0xfd, 0xfc, 0x90, 0xa0, 0xae, 0x0a, 0x30, 0x5b, 0x10, 0xb6, 0x02, 0x5e, 0x92, 0x25, 0xcf, 0xbf, 0x5d, 0x26, 0x9b, 0x06, 0x69, 0xdd, 0x9b, 0xcd, 0xd7, 0xe5, 0x81, 0x0a, 0xf9, 0x92, 0x86, 0xb9, 0xef, 0x05, 0x2d, 0xbb, 0x7d, 0x3d, 0x0d, 0xfb, 0x54, 0xc6, 0x63, 0x87, 0xd6, 0xbf, 0x86, 0xbd, 0x98, 0xb4, 0xec, 0x32, 0xb2, 0x77, 0x88, 0x8c, 0x37, 0x11, 0x18, 0xa5, 0x92, 0x1d, 0x89, 0x86, 0xac, 0x39, 0x96, 0x65, 0x5b, 0xd4, 0x38, 0x6e, 0x64, 0x20, 0x17, 0x4c, 0x93, 0x56, 0x37, 0xb1, 0x25, 0x32, 0x74, 0xd2, 0x6a, 0x17, 0x5b, 0x6d, 0x8d, 0x41, 0x90, 0xf5, 0xd6, 0x02, 0x83, 0x8a, 0x56, 0xe2, 0x91, 0x47, 0xe4, 0xd3, 0x4c, 0x11, 0x77, 0xcc, 0x5e, 0xfe, 0x93, 0xc3, 0x8b, 0xa1, 0x23, 0xdc, 0x99, 0x7f, 0x6a, 0x8d, 0x58, 0x2b, 0xcf, 0x78, 0xe5, 0x79, 0x0d, 0x75, 0xa9, 0xd2, 0x3c, 0x97, 0xd7, 0xcc, 0xde, 0xf7, 0x7a, 0x0a, 0x45, 0x2b, 0x73, 0x7d, 0xd3, 0x2b, 0xc5, 0x71, 0x78, 0x4c, 0xa2, 0xde, 0x48, 0x33, 0x53, 0x0a, 0x93, 0x91, 0xe6, 0xda, 0x70, 0x54, 0xcf, 0x88, 0x8e, 0xe9, 0x29, 0x38, 0xba, 0xaa, 0xf3, 0x51, 0xd2, 0x12, 0x15, 0x53, 0x8d, 0xa0, 0x14, 0xca, 0x86, 0xcd, 0x56, 0x6d, 0xf2, 0x85, 0x7b, 0xbb, 0xbd, 0xf9, 0xd2, 0xdc, 0x4a, 0x64, 0x3e, 0x89, 0x2b, 0x63, 0xd8, 0xf8, 0x26, 0x18, 0x11, 0x17, 0x66, 0xc6, 0xb7, 0xad, 0x58, 0xce, 0xdc, 0xc7, 0x0e, 0xe9, 0xec, 0x58, 0x6b, 0x23, 0xd3, 0xe2, 0xcb, 0xf2, 0x41, 0x5c, 0xe2, 0x5c, 0xea, 0xcd, 0x65, 0xb3, 0x46, 0x1f, 0x5a, 0x12, 0xa5, 0xd9, 0x2d, 0x93, 0x3c, 0xef, 0xc3, 0xf1, 0x74, 0x57, 0x37, 0xd9, 0x41, 0xb0, 0xd1, 0x73, 0x77, 0x3e, 0xe0, 0xb7, 0x14, 0xe7, 0x88, 0x68, 0x67, 0x6b, 0x51, 0xa7, 0x9d, 0xe5, 0xb4, 0x3a, 0x65, 0x49, 0xb6, 0x76, 0x26, 0x7c, 0xb0, 0xb6, 0xcf, 0xa2, 0x92, 0x66, 0x2b, 0xfe, 0x5e, 0x10, 0x81, 0x01, 0xfb, 0xbe, 0x14, 0x46, 0x1a, 0x5b, 0x3d, 0x2e, 0xc1, 0x38, 0x9b, 0x19, 0xac, 0x8d, 0x56, 0x8a, 0xbf, 0xb6, 0xf4, 0x12, 0xea, 0x15, 0xcf, 0xf2, 0x06, 0x4f, 0x1a, 0x5b, 0xed, 0xb8, 0x1c, 0x6f, 0x1f, 0xa3, 0x0f, 0x50, 0x88, 0xb7, 0x89, 0xd9, 0xdb, 0x48, 0xb3, 0x28, 0xdb, 0xf5, 0xe0, 0x9d, 0xa5, 0x8b, 0xcc, 0x20, 0x91, 0xad, 0xcd, 0xd4, 0x2f, 0x4f, 0xad, 0x7f, 0x88, 0x37, 0xe8, 0x12, 0xa4, 0xb8, 0xb2, 0x65, 0x0d, 0x67, 0x76, 0xca, 0x96, 0x35, 0x91, 0x59, 0x1b, 0x3e, 0xe2, 0xc2, 0x5e, 0x56, 0x62, 0x55, 0x54, 0xfe, 0x6d, 0x76, 0x9c, 0x9c, 0x12, 0x93, 0x41, 0x6e, 0x1e, 0x1c, 0x29, 0x95, 0x84, 0x7f, 0xf1, 0x8f, 0x57, 0x4b, 0x91, 0xe2, 0x78, 0xf2, 0xd7, 0xc7, 0x56, 0x5d, 0xcf, 0xe8, 0xc7, 0x7d, 0x49, 0xc8, 0x76, 0x29, 0x84, 0xac, 0x70, 0x68, 0x95, 0x16, 0x43, 0xd2, 0xda, 0xc3, 0xb2, 0xed, 0xce, 0xbe, 0xa8, 0x45, 0x0d, 0xdd, 0xe7, 0x9d, 0x65, 0xb0, 0x48, 0x56, 0x35, 0x92, 0x05, 0x0c, 0xcd, 0xf2, 0x6a, 0xbe, 0x01, 0x05, 0xaa, 0xb0, 0xc7, 0x4d, 0x96, 0x69, 0x6c, 0xde, 0x2d, 0x99, 0x6c, 0x74, 0x0c, 0xb6, 0xa8, 0x0d, 0xd8, 0xc6, 0xa8, 0x75, 0x52, 0xc8, 0x08, 0x14, 0xcb, 0x92, 0xc0, 0x2c, 0x9a, 0x86, 0x30, 0xde, 0x2c, 0x3d, 0x44, 0x2d, 0x8b, 0x42, 0xba, 0xe4, 0x88, 0x8d, 0x11, 0xbb, 0x51, 0x7c, 0x8e, 0x1e, 0x66, 0x87, 0x04, 0xde, 0x1f, 0x37, 0x8a, 0x19, 0xc1, 0x5b, 0x68, 0xe1, 0xe5, 0x59, 0xa7, 0xf0, 0xf7, 0x0f, 0x5b, 0x78, 0x82, 0x74, 0x48, 0x25, 0x5b, 0xb0, 0xb4, 0x49, 0xd0, 0xf1, 0x6b, 0x4f, 0x18, 0x10, 0x72, 0x49, 0xcc, 0x4a, 0x89, 0xee, 0xef, 0x15, 0x35, 0x7e, 0xaf, 0x94, 0xc3, 0x50, 0x8e, 0x6c, 0xdf, 0x99, 0x15, 0x91, 0xec, 0xc8, 0x6a, 0xc9, 0x3c, 0x5f, 0x9a, 0x3d, 0x93, 0xa5, 0x3b, 0x70, 0xbc, 0x57, 0x58, 0x68, 0xb4, 0x70, 0x7a, 0x93, 0x85, 0x33, 0x9a, 0x5a, 0x39, 0x33, 0xcb, 0x2b, 0x45, 0xca, 0x4b, 0xbc, 0xca, 0x66, 0xc8, 0x7c, 0xa5, 0xd8, 0xf2, 0xcb, 0xda, 0x35, 0x4b, 0x69, 0xa6, 0xcf, 0xab, 0x64, 0x5f, 0x2d, 0x42, 0x21, 0xdd, 0xf8, 0x68, 0xe7, 0xdb, 0x85, 0x13, 0x6b, 0xc8, 0x9a, 0x6c, 0x56, 0x55, 0xf9, 0xc0, 0x90, 0x4f, 0x9c, 0xca, 0xd6, 0xf0, 0x09, 0xc6, 0x5d, 0x8e, 0x0e, 0x0e, 0x90, 0x7a, 0x69, 0x45, 0x38, 0x4d, 0xd6, 0xbd, 0x52, 0x2d, 0x93, 0xb1, 0xec, 0x89, 0xe8, 0x2b, 0x5b, 0x8e, 0x7a, 0xd2, 0xdd, 0xc8, 0x89, 0xb4, 0x3c, 0x8d, 0xe6, 0x42, 0x8e, 0x0a, 0xd0, 0x67, 0x9f, 0xc4, 0x9b, 0x0a, 0x0b, 0x67, 0x5c, 0xe1, 0xe0, 0xcb, 0x4a, 0x8e, 0xa5, 0xa6, 0xdb, 0xd2, 0x8d, 0x26, 0xd4, 0xec, 0xca, 0x2f, 0x87, 0x6f, 0x68, 0xcd, 0x60, 0xad, 0x26, 0xce, 0xcb, 0xd5, 0xd5, 0x90, 0x8d, 0x86, 0xc7, 0xe5, 0x9b, 0x3a, 0x5c, 0x3a, 0x90, 0xad, 0x0c, 0xb4, 0x45, 0x97, 0xc1, 0xa5, 0xb3, 0xe1, 0x98, 0x33, 0xd5, 0x5c, 0x4a, 0x56, 0x5b, 0x13, 0xa7, 0x83, 0xbd, 0x60, 0x2f, 0xe4, 0x08, 0xcd, 0x60, 0x9f, 0xd2, 0x09, 0x39, 0xc0, 0x4b, 0x2e, 0x6e, 0x2d, 0x28, 0x64, 0xbf, 0x8d, 0xec, 0x76, 0x5a, 0x3b, 0xe3, 0x1c, 0x69, 0xf6, 0xad, 0x90, 0x4a, 0x5f, 0xf8, 0x1e, 0x2b, 0xbf, 0x75, 0x28, 0xed, 0x1e, 0x47, 0x69, 0x6c, 0x19, 0xbe, 0x4f, 0x7a, 0x96, 0xe0, 0xef, 0x4e, 0x6f, 0x07, 0xd3, 0x6f, 0xfc, 0x38, 0xca, 0xf6, 0x1a, 0x14, 0x27, 0xba, 0x4f, 0x74, 0x8f, 0xb4, 0xfa, 0x32, 0xd9, 0xbc, 0x29, 0x52, 0x59, 0xf4, 0xc5, 0x52, 0x49, 0x90, 0xe3, 0xd9, 0xef, 0x29, 0x81, 0xfe, 0x7b, 0x1e, 0x82, 0xed, 0x70, 0x18, 0x7f, 0x77, 0xc3, 0x49, 0x94, 0x76, 0x77, 0x0e, 0xb7, 0xfe, 0x6a, 0x07, 0x31, 0x75, 0xd7, 0xb3, 0x70, 0x18, 0x75, 0x04, 0x3b, 0x4b, 0x57, 0xe0, 0xee, 0x9a, 0x19, 0x42, 0x9f, 0xfe, 0x86, 0x0b, 0xf7, 0x4c, 0x87, 0xe3, 0x38, 0xae, 0x14, 0xb2, 0xf5, 0x84, 0x41, 0xc7, 0x7b, 0x82, 0x4e, 0x3f, 0x19, 0x54, 0xfa, 0x05, 0xa0, 0xc1, 0x5e, 0x4b, 0xbd, 0xd2, 0x3d, 0xc9, 0x16, 0x1e, 0x24, 0x8d, 0x86, 0x68, 0x08, 0x47, 0x10, 0x1e, 0x65, 0x8f, 0xab, 0xd4, 0x5a, 0x6b, 0xfc, 0x48, 0x65, 0x0b, 0x30, 0x4d, 0x13, 0xe8, 0xa8, 0xe5, 0xa7, 0xf8, 0x98, 0xad, 0xae, 0xcd, 0x53, 0x83, 0xbc, 0x66, 0x72, 0x78, 0x10, 0xe3, 0xcd, 0x47, 0x5a, 0xd8, 0xc6, 0x67, 0x7a, 0x32, 0x89, 0x0f, 0x1c, 0x32, 0x8e, 0x5c, 0x33, 0x9d, 0x60, 0xe3, 0x33, 0x29, 0xdc, 0x9b, 0x3b, 0x2c, 0x2f, 0x43, 0x94, 0x57, 0x9d, 0xd3, 0x1d, 0x63, 0x6d, 0x6e, 0xf3, 0x2a, 0x51, 0x7e, 0x1b, 0x14, 0x53, 0xa2, 0x90, 0x53, 0xc8, 0xae, 0xb3, 0xf2, 0x83, 0x12, 0x45, 0xf8, 0x2a, 0xcd, 0x6f, 0x4a, 0x54, 0x99, 0x9f, 0xaf, 0x6f, 0xe5, 0xb2, 0x90, 0x32, 0x05, 0x63, 0x2b, 0xa7, 0x67, 0x33, 0xf3, 0xcd, 0x34, 0x6a, 0xd3, 0x6d, 0xd9, 0xe5, 0x03, 0x83, 0x82, 0x6b, 0xbd, 0x34, 0x9b, 0xee, 0xa9, 0x8d, 0xad, 0xc5, 0x18, 0xc0, 0xa7, 0xe8, 0xed, 0xaa, 0x2f, 0x63, 0xf4, 0x37, 0xd5, 0xe1, 0xcf, 0xff, 0x9c, 0x42, 0xe6, 0x64, 0x30, 0x2a, 0xb6, 0x3e, 0xd8, 0xa5, 0xe9, 0x22, 0xc1, 0xbb, 0xce, 0x40, 0xe3, 0x61, 0x5a, 0x21, 0x08, 0xc7, 0xd7, 0xc8, 0x36, 0x65, 0x87, 0x65, 0xc8, 0xbc, 0x0c, 0x35, 0x83, 0xa4, 0x62, 0xea, 0x3b, 0x59, 0x59, 0xf1, 0x54, 0xe8, 0xd5, 0xc4, 0xd1, 0x21, 0xe3, 0x4d, 0xc8, 0x99, 0x14, 0xd5, 0x01, 0xff, 0xa8, 0x1d, 0x81, 0x86, 0x54, 0x26, 0x85, 0x39, 0xde, 0x18, 0x44, 0xbc, 0x14, 0x08, 0x53, 0x7a, 0x40, 0xba, 0x9d, 0x16, 0xf9, 0x8d, 0x80, 0xfc, 0x44, 0xdb, 0xa6, 0xd0, 0x15, 0x06, 0xb3, 0x7e, 0xf6, 0x6a, 0xa9, 0x74, 0x97, 0x7c, 0x21, 0x92, 0xe6, 0x7a, 0x0b, 0xe7, 0x5a, 0x47, 0xd2, 0x62, 0x19, 0xb7, 0xbf, 0xeb, 0xc5, 0xe0, 0xe9, 0x55, 0xd5, 0x21, 0xcf, 0x79, 0xdf, 0xb8, 0xbe, 0x60, 0xe5, 0xdf, 0x14, 0x1a, 0xd9, 0xbe, 0x15, 0xf9, 0x13, 0xd2, 0x79, 0x16, 0x59, 0x8e, 0x62, 0x7f, 0xdf, 0x49, 0xeb, 0x85, 0xa5, 0x97, 0x21, 0x4f, 0x88, 0xc9, 0x83, 0x87, 0x05, 0xbe, 0x3f, 0x74, 0x3c, 0x70, 0x3c, 0x74, 0x3c, 0x54, 0x74, 0xcd, 0x58, 0xaf, 0x9b, 0x16, 0xb3, 0x71, 0xb5, 0x30, 0x17, 0x64, 0xe1, 0x38, 0x95, 0x41, 0x36, 0xad, 0xa8, 0x43, 0xae, 0x95, 0xad, 0x10, 0xb5, 0x6d, 0x79, 0xc7, 0x5f, 0x80, 0xb4, 0xd8, 0xaa, 0xdf, 0xcd, 0xc3, 0x31, 0x7b, 0xc7, 0xb0, 0x42, 0x4e, 0x99, 0x66, 0xb1, 0x83, 0x96, 0x78, 0x23, 0xa6, 0x9c, 0x89, 0x29, 0x73, 0xc8, 0x7e, 0x91, 0x38, 0x24, 0xdd, 0xf7, 0x1b, 0x36, 0xb0, 0xd2, 0x5c, 0x1a, 0x56, 0x9a, 0x59, 0xb1, 0xd2, 0x08, 0x0b, 0x8d, 0xf5, 0xa2, 0xba, 0xf8, 0x02, 0xa8, 0x5e, 0x7a, 0xc5, 0xab, 0x16, 0x6c, 0x82, 0xd6, 0xf3, 0x31, 0x4a, 0xae, 0xbc, 0x5e, 0x15, 0x93, 0x2e, 0x07, 0x00, 0xf5, 0x34, 0xe2, 0x51, 0x1a, 0xd6, 0xee, 0x17, 0xe8, 0xb6, 0x62, 0xa3, 0x05, 0x75, 0x4c, 0x94, 0xbf, 0x4d, 0xad, 0x50, 0x82, 0x5c, 0xd8, 0x41, 0xd6, 0xbf, 0x74, 0xcf, 0x3c, 0xb3, 0x33, 0x41, 0x09, 0xf6, 0xb3, 0xab, 0x11, 0x0b, 0x79, 0x89, 0x1b, 0x43, 0x01, 0xf1, 0xc2, 0x01, 0xe3, 0x34, 0xd4, 0x1e, 0x26, 0x99, 0xa1, 0x40, 0xa7, 0xd0, 0xdf, 0xd6, 0x1e, 0xe1, 0xb7, 0xfd, 0x44, 0x23, 0x7e, 0x05, 0xb3, 0xbe, 0x3b, 0x22, 0xc7, 0x9f, 0x4a, 0xf1, 0x3f, 0xbb, 0x41, 0xf1, 0x46, 0xc6, 0x7a, 0x70, 0xbf, 0x23, 0x54, 0x42, 0x72, 0xf8, 0xd3, 0xe5, 0x74, 0x03, 0x71, 0x07, 0xa4, 0x31, 0x49, 0x66, 0x56, 0xc4, 0x16, 0x52, 0xa8, 0x44, 0xfc, 0x12, 0x75, 0x37, 0x19, 0x6c, 0x48, 0xbf, 0x64, 0x63, 0x78, 0xd1, 0x68, 0x1b, 0x56, 0xc2, 0x7c, 0x84, 0xcd, 0x38, 0x31, 0x71, 0x1b, 0xfe, 0xa1, 0xf0, 0x67, 0x4c, 0xb3, 0x4f, 0xc7, 0x27, 0x53, 0x4c, 0x47, 0xae, 0x90, 0xee, 0xd1, 0xfa, 0x27, 0x95, 0x71, 0x11, 0x1e, 0x8d, 0x79, 0xe5, 0xb1, 0x35, 0x23, 0xdd, 0x30, 0x28, 0xdf, 0x42, 0x28, 0x2a, 0xb9, 0x9e, 0x2a, 0xfb, 0x76, 0xd8, 0x8d, 0xcf, 0x49, 0x4c, 0x9d, 0xe7, 0x75, 0x0e, 0x8b, 0x57, 0xe0, 0xda, 0x73, 0xe3, 0xb4, 0x14, 0xcf, 0x93, 0x25, 0x66, 0x33, 0xca, 0x2f, 0x91, 0xb4, 0x5d, 0x94, 0xcb, 0x1f, 0x25, 0x99, 0x54, 0xb0, 0xa3, 0xb4, 0x93, 0xf6, 0xb3, 0x23, 0x64, 0xb1, 0xf8, 0x7d, 0xb3, 0x7e, 0x12, 0xe4, 0x1d, 0x7f, 0x54, 0xb0, 0x63, 0x6b, 0x1c, 0x63, 0xf9, 0x2e, 0x19, 0x06, 0xef, 0x5f, 0xa6, 0x0f, 0xdc, 0x58, 0xeb, 0xda, 0x28, 0xf9, 0x45, 0x6d, 0xbb, 0x6a, 0x5c, 0x1b, 0x99, 0x75, 0x10, 0x1b, 0xe9, 0x2c, 0x64, 0xad, 0xb9, 0xe7, 0xf3, 0x27, 0x4d, 0x36, 0x99, 0x8b, 0xe0, 0xd7, 0x8d, 0x6d, 0x51, 0x2b, 0xc8, 0xf6, 0x7b, 0x16, 0xd0, 0x8e, 0x40, 0xfc, 0xcd, 0xc4, 0x1a, 0xcf, 0x47, 0x6e, 0xdc, 0xee, 0xcd, 0xc2, 0x5f, 0xbf, 0x27, 0x9d, 0x6c, 0x4a, 0xd9, 0xc8, 0x72, 0xce, 0xb8, 0x2e, 0x97, 0xf5, 0x5e, 0x31, 0xeb, 0xa7, 0x7f, 0x94, 0xf9, 0x8f, 0x82, 0xd6, 0xf9, 0x25, 0xee, 0xf3, 0xcd, 0x0b, 0x2c, 0x54, 0xcb, 0xe0, 0xa9, 0x31, 0xd5, 0x6d, 0xae, 0x3d, 0x7f, 0xbf, 0x50, 0xb5, 0x86, 0xd9, 0xa4, 0xee, 0xf9, 0xfb, 0xdb, 0x28, 0xb3, 0x47, 0xe4, 0x75, 0xba, 0x07, 0x3a, 0xc3, 0xb5, 0xe8, 0xa7, 0x7f, 0xc4, 0x1c, 0x9a, 0x3c, 0xeb, 0xc4, 0x1d, 0xae, 0x87, 0x91, 0xf7, 0xb5, 0x51, 0xdf, 0x21, 0xde, 0x47, 0xd6, 0x9a, 0x64, 0x1f, 0x12, 0x6e, 0xa7, 0x7e, 0xf7, 0xbd, 0x4d, 0xae, 0x75, 0x15, 0x1f, 0xa0, 0xa4, 0x89, 0xed, 0x8a, 0xe5, 0xd6, 0xb8, 0xd6, 0x95, 0x7f, 0x10, 0x3e, 0x29, 0x7f, 0x25, 0xbb, 0xd6, 0x09, 0x7c, 0x35, 0x49, 0xc7, 0x7a, 0x7f, 0x02, 0xf6, 0x67, 0xe0, 0xd2, 0xfe, 0xa5, 0xf3, 0x5d, 0x6d, 0xb8, 0xfd, 0x5f, 0x3a, 0x39, 0x2e, 0xdc, 0x71, 0xb7, 0x3d, 0xfc, 0x0b, 0x5a, 0xe1, 0xc1, 0x61, 0xac, 0x57, 0x7e, 0xef, 0x9c, 0x54, 0x19, 0x5e, 0x3d, 0x69, 0x5a, 0x78, 0xed, 0xbf, 0x74, 0x82, 0x10, 0x0e, 0xb1, 0xdf, 0x6e, 0xfc, 0x55, 0x84, 0x97, 0xb1, 0xd1, 0x71, 0x7f, 0x2a, 0x8e, 0x40, 0x3b, 0x42, 0x1e, 0x25, 0xfb, 0x7a, 0x1e, 0xf9, 0xe1, 0x56, 0x0c, 0xe5, 0xc3, 0xd7, 0x58, 0xcc, 0xab, 0xec, 0xf7, 0xe3, 0xbb, 0x3b, 0x21, 0x21, 0x3c, 0xc0, 0x7e, 0x3f, 0x67, 0xa1, 0xa7, 0x99, 0xff, 0x29, 0xf6, 0xfb, 0x36, 0xf3, 0x3f, 0xcf, 0x7e, 0xdf, 0xf3, 0x25, 0xf4, 0x86, 0xbc, 0x25, 0x48, 0xa5, 0x21, 0xaf, 0x59, 0x5b, 0x08, 0x3c, 0x7e, 0xa5, 0x4e, 0xea, 0x44, 0xea, 0x0c, 0x85, 0xaf, 0xd3, 0x7b, 0x79, 0x28, 0x7c, 0x46, 0xcc, 0x25, 0x57, 0x8f, 0xec, 0xb3, 0x82, 0x7c, 0x74, 0xe4, 0x5a, 0x29, 0xfb, 0xac, 0x22, 0x1f, 0x2d, 0xb9, 0x56, 0xcb, 0x3e, 0x3f, 0x42, 0x9f, 0xd2, 0x0f, 0xc2, 0x07, 0x22, 0xb4, 0xfe, 0x68, 0x48, 0xe2, 0xa7, 0xdf, 0xdd, 0x54, 0xf4, 0x41, 0xb8, 0x1d, 0xf5, 0xce, 0x05, 0x4c, 0x12, 0x6b, 0x62, 0xad, 0x45, 0x23, 0xf3, 0x07, 0xb3, 0x15, 0x61, 0x91, 0xf8, 0xf4, 0x3f, 0xb6, 0x83, 0x16, 0xee, 0x77, 0xa2, 0x8e, 0xef, 0x49, 0xd1, 0x54, 0xbd, 0xab, 0x8d, 0xd8, 0x92, 0x21, 0x47, 0xe4, 0x24, 0x9b, 0x5b, 0x94, 0xb3, 0x2a, 0x84, 0x26, 0x54, 0x5e, 0xc9, 0xa6, 0x54, 0xa5, 0xb1, 0xa1, 0x4e, 0x56, 0x2f, 0x9a, 0x75, 0x13, 0x41, 0xd9, 0x96, 0x71, 0x7c, 0x4d, 0x3b, 0xd7, 0xa1, 0x90, 0xb8, 0xec, 0xd0, 0x5e, 0xd6, 0x77, 0x2b, 0x85, 0x6a, 0x27, 0x6a, 0x1f, 0x64, 0xd7, 0x96, 0x63, 0x13, 0x56, 0x94, 0xac, 0x15, 0xf3, 0x74, 0xf7, 0x3b, 0x1f, 0x43, 0xda, 0xe8, 0x7c, 0xf6, 0xb9, 0xd7, 0x87, 0x90, 0x5f, 0x93, 0x7d, 0x41, 0x86, 0x6e, 0xd2, 0x17, 0xd2, 0xef, 0x62, 0xbd, 0x3a, 0x62, 0xcb, 0xa6, 0x24, 0xfb, 0x7e, 0x92, 0x2e, 0x2a, 0xb3, 0x98, 0x55, 0x9f, 0x9a, 0xf2, 0xa7, 0xdc, 0xbd, 0x05, 0xf8, 0xcb, 0x7b, 0x05, 0x1c, 0xf1, 0x5c, 0x16, 0x13, 0x68, 0x2d, 0x58, 0x12, 0xac, 0xdd, 0xe8, 0xfb, 0x03, 0xd2, 0xd8, 0x35, 0x76, 0x1b, 0xb3, 0xa0, 0xca, 0xa1, 0xb0, 0x98, 0xef, 0x38, 0x33, 0x52, 0xe2, 0xd8, 0x5b, 0xc5, 0x1f, 0x67, 0xb4, 0xda, 0x58, 0x0a, 0x05, 0xdd, 0x71, 0x2e, 0xa8, 0xf4, 0xdf, 0xff, 0x67, 0x72, 0x1b, 0xf3, 0xf4, 0xad, 0x72, 0xbb, 0xfb, 0xe4, 0x97, 0xe5, 0x96, 0x91, 0xf5, 0xc5, 0xdc, 0x24, 0x09, 0xa0, 0x50, 0x27, 0x60, 0xfb, 0x19, 0x26, 0x63, 0x0b, 0xcd, 0xc7, 0x74, 0x09, 0x34, 0xc6, 0x4b, 0x36, 0xf9, 0xd6, 0xb3, 0xf2, 0x68, 0x5c, 0xa5, 0xc7, 0x51, 0x38, 0x5e, 0x02, 0x45, 0x49, 0x09, 0xbc, 0xe9, 0xd2, 0xb8, 0xed, 0x73, 0xf5, 0x3f, 0x87, 0xba, 0x20, 0xf1, 0xb9, 0x54, 0xca, 0x41, 0x48, 0xf4, 0xea, 0x74, 0x09, 0xfa, 0x44, 0x03, 0xa6, 0xe9, 0x88, 0xf0, 0xb0, 0xbd, 0xb4, 0x82, 0x2b, 0xd9, 0x1c, 0xf6, 0x2d, 0x95, 0x68, 0xa4, 0xa4, 0x30, 0x7c, 0x96, 0x68, 0x24, 0x22, 0x51, 0x1b, 0x49, 0xa2, 0xb6, 0x80, 0x5e, 0xff, 0x10, 0x96, 0x42, 0xb6, 0xe3, 0x26, 0x2b, 0xee, 0xec, 0x6e, 0x1c, 0x8b, 0x19, 0x6f, 0xfd, 0xa6, 0x43, 0x2e, 0x4f, 0xa6, 0x4e, 0x11, 0x85, 0xbc, 0x2b, 0x06, 0x59, 0xb2, 0x44, 0x94, 0xa4, 0x59, 0xa9, 0x6e, 0xf9, 0x05, 0xc6, 0x0a, 0x03, 0x62, 0xc3, 0x70, 0xbf, 0xf9, 0x21, 0xc8, 0xdb, 0x2b, 0xcd, 0x38, 0xa7, 0x33, 0x8a, 0xd2, 0x30, 0x8a, 0x02, 0x4e, 0x25, 0xd2, 0x9c, 0x1b, 0x62, 0x8b, 0xd5, 0x5b, 0x3d, 0xac, 0xde, 0x00, 0x1f, 0x52, 0xcd, 0xcf, 0xae, 0xa4, 0x5e, 0x4f, 0xb2, 0x4a, 0xb3, 0x0a, 0x79, 0x74, 0x1e, 0xa6, 0x38, 0xc6, 0x46, 0x2f, 0x7e, 0xb8, 0x7d, 0xb9, 0xd9, 0x16, 0xb5, 0x61, 0x7f, 0x88, 0x2c, 0x54, 0x6f, 0xf2, 0xb2, 0x6d, 0x39, 0xc0, 0x2f, 0xda, 0x00, 0x79, 0xeb, 0x39, 0x5e, 0x29, 0x66, 0x59, 0xcc, 0xd4, 0x32, 0x96, 0x64, 0xe2, 0xbf, 0x42, 0x49, 0x6d, 0xb7, 0xd0, 0x27, 0x6b, 0x6d, 0x21, 0x77, 0x68, 0xe7, 0x73, 0xe1, 0xc1, 0x86, 0xb7, 0x09, 0xb6, 0x7d, 0x97, 0x11, 0xee, 0x71, 0x41, 0x9e, 0x4f, 0x08, 0x3e, 0x0b, 0x73, 0xd8, 0x3a, 0x73, 0x9d, 0x1d, 0x43, 0x45, 0xa5, 0x9b, 0x95, 0x84, 0xe4, 0x23, 0x9a, 0x67, 0x3c, 0x16, 0x74, 0xee, 0xca, 0x00, 0xcf, 0x45, 0x82, 0xea, 0x0e, 0x44, 0xed, 0xb4, 0xd5, 0xc3, 0xf0, 0x65, 0x68, 0x03, 0x94, 0xbc, 0x37, 0x89, 0x69, 0x96, 0xb1, 0x52, 0xee, 0xd1, 0x5d, 0x59, 0x1a, 0x39, 0xcf, 0xf3, 0x32, 0xd5, 0x7f, 0x30, 0x3b, 0x2b, 0x7c, 0x5a, 0x6a, 0x15, 0xc8, 0x37, 0x54, 0x18, 0xef, 0x17, 0xcc, 0x50, 0xe6, 0x2d, 0xcb, 0x91, 0xfa, 0x60, 0x11, 0x62, 0xac, 0x40, 0x34, 0x4a, 0xb4, 0x85, 0xbc, 0x71, 0xcf, 0xcd, 0x7d, 0x32, 0x1c, 0xe3, 0x44, 0x1b, 0x94, 0x09, 0xd5, 0xf7, 0xf7, 0xf8, 0xb4, 0xc1, 0xad, 0xe0, 0x61, 0xe5, 0x4d, 0xb7, 0x80, 0x14, 0x13, 0x29, 0x83, 0x78, 0xb0, 0x26, 0xd2, 0xb3, 0xb2, 0x60, 0x18, 0xfc, 0x9c, 0x7f, 0x00, 0x7f, 0x4e, 0x1c, 0xfc, 0x1c, 0x06, 0x5f, 0x75, 0x2b, 0xf8, 0x37, 0xf7, 0x8e, 0x84, 0x8f, 0xed, 0x7f, 0x03, 0x69, 0xbb, 0xc0, 0xb8, 0x00, 0x54, 0x06, 0xa4, 0x6f, 0x23, 0xd2, 0xb7, 0x61, 0x12, 0x68, 0x7d, 0x69, 0x23, 0x65, 0x7e, 0x3d, 0x8c, 0xdc, 0xe9, 0xf0, 0x39, 0xd9, 0x95, 0x69, 0x27, 0xd9, 0xc3, 0x03, 0xd8, 0x2a, 0xbd, 0xc4, 0xf1, 0xd6, 0x3e, 0x61, 0x51, 0x20, 0x7d, 0x0c, 0x48, 0x74, 0xc8, 0x24, 0x5f, 0x2d, 0xa3, 0x8f, 0x75, 0x7a, 0xf4, 0xa5, 0x9d, 0x0f, 0xaf, 0x5c, 0x04, 0x15, 0xed, 0x7e, 0xa0, 0xfd, 0x0e, 0x17, 0xb0, 0xcf, 0x09, 0x45, 0x0e, 0x5f, 0x06, 0xc4, 0xf6, 0x3a, 0x78, 0xc5, 0xf8, 0xdd, 0x0e, 0xa6, 0x11, 0xbb, 0x1d, 0x06, 0x4e, 0x32, 0x5b, 0xe6, 0x52, 0x50, 0x7b, 0xa7, 0x9e, 0x59, 0xf9, 0xf8, 0xeb, 0x86, 0xdb, 0x1e, 0xe8, 0x22, 0x8d, 0x29, 0xef, 0xaa, 0xa8, 0xc3, 0x51, 0x2f, 0x21, 0xba, 0x67, 0xc8, 0xe6, 0x1d, 0x2b, 0x60, 0x8e, 0xc2, 0x7c, 0x50, 0x1f, 0x7d, 0x7d, 0xca, 0x73, 0xe1, 0xa1, 0xad, 0xe0, 0x5e, 0xb9, 0x73, 0x65, 0xdd, 0x5b, 0x1e, 0x92, 0x98, 0x07, 0xe4, 0x36, 0x2c, 0x0c, 0x9f, 0xa4, 0x36, 0x94, 0xfa, 0x80, 0xb5, 0xc0, 0x50, 0xa1, 0xc7, 0x3e, 0xc0, 0x70, 0x6d, 0xc7, 0x32, 0xf7, 0xc4, 0x61, 0x7b, 0xb1, 0x38, 0xfb, 0x16, 0x96, 0xea, 0xbc, 0x6c, 0xa9, 0x2e, 0x95, 0xad, 0x90, 0x61, 0xa3, 0x18, 0x25, 0x75, 0x37, 0xc3, 0x45, 0xbb, 0x65, 0x52, 0x7c, 0x6f, 0x89, 0x62, 0x23, 0x77, 0x22, 0xfa, 0x81, 0x9d, 0xb5, 0x12, 0x47, 0xad, 0x24, 0x66, 0xc9, 0xf1, 0xa9, 0x95, 0x22, 0x34, 0x79, 0x41, 0xe6, 0x43, 0x2a, 0xe2, 0x43, 0x22, 0xff, 0xd8, 0x21, 0x41, 0x85, 0x25, 0xd6, 0x44, 0x79, 0x41, 0x3e, 0xca, 0x8f, 0x8c, 0x17, 0x20, 0x4f, 0xd0, 0x47, 0x70, 0x2f, 0x5b, 0x64, 0x60, 0x6a, 0x39, 0xaf, 0x5a, 0xb2, 0x94, 0x8a, 0xe0, 0xda, 0x3a, 0x09, 0x54, 0x2f, 0x5f, 0x62, 0xd6, 0x23, 0x51, 0x7c, 0x3f, 0xfe, 0x3a, 0xe1, 0xaf, 0x30, 0x1f, 0xb9, 0xa1, 0x02, 0x35, 0x24, 0xc4, 0x96, 0x0f, 0xac, 0xd6, 0xad, 0xb4, 0x13, 0x21, 0x21, 0x8a, 0x4b, 0x25, 0xc3, 0xdd, 0xdb, 0x3b, 0x57, 0x3e, 0x38, 0x8c, 0x7f, 0x64, 0x65, 0x0d, 0xa3, 0xcf, 0x4c, 0x8f, 0x4a, 0x65, 0x66, 0x33, 0xe7, 0x8e, 0x9c, 0x49, 0x51, 0xcc, 0x15, 0x22, 0x9d, 0x4e, 0x8a, 0xd2, 0xe9, 0x3a, 0x99, 0x4e, 0x4d, 0x48, 0xa7, 0x99, 0x0c, 0x03, 0x8a, 0x28, 0x9d, 0x66, 0x60, 0x9e, 0x93, 0x24, 0x3a, 0x0d, 0x0b, 0x6c, 0x8c, 0x54, 0x7e, 0x49, 0x4f, 0x48, 0x67, 0x39, 0xd1, 0x8c, 0x7c, 0x55, 0x5c, 0x4e, 0x25, 0xc3, 0x72, 0x32, 0xc6, 0xe5, 0x94, 0xce, 0x72, 0xe2, 0xa3, 0x39, 0x65, 0x91, 0xcd, 0x46, 0x2c, 0xb7, 0xa1, 0x1d, 0x72, 0x6e, 0xf2, 0x8e, 0xb8, 0x11, 0xb9, 0x99, 0xa3, 0x1a, 0x2b, 0xc0, 0x5a, 0xd2, 0x30, 0xfa, 0x82, 0x64, 0x89, 0xcf, 0x24, 0x92, 0x80, 0xa7, 0x33, 0x6e, 0xdc, 0xf5, 0x89, 0xd9, 0x8c, 0x43, 0xce, 0x87, 0xfc, 0x11, 0x1c, 0x72, 0x16, 0xe5, 0xe5, 0x2b, 0xec, 0x47, 0x7d, 0x3a, 0xd2, 0xc2, 0x48, 0xb3, 0x56, 0xd6, 0xe2, 0xc6, 0x48, 0xec, 0x28, 0x1f, 0x32, 0x53, 0x6c, 0xca, 0x95, 0xcd, 0xeb, 0x17, 0x46, 0x52, 0x14, 0xe6, 0x4b, 0xe1, 0x33, 0xbf, 0x30, 0x06, 0x4b, 0x25, 0xb6, 0x12, 0x17, 0x9f, 0x4f, 0xe3, 0x1c, 0xed, 0x91, 0xf1, 0x66, 0xd4, 0xa9, 0xb1, 0x8c, 0x3c, 0x96, 0xb1, 0x40, 0xcc, 0xd2, 0xa9, 0x65, 0xfb, 0x97, 0x23, 0x62, 0xb6, 0x1e, 0x4b, 0x1c, 0xfd, 0x3e, 0x24, 0x8e, 0x8d, 0xba, 0x37, 0xe9, 0xcd, 0x14, 0xd2, 0x1e, 0x99, 0xb1, 0x92, 0xe7, 0x0f, 0x22, 0x36, 0x92, 0xb1, 0xd9, 0x1e, 0xd2, 0x5d, 0x50, 0x46, 0xc9, 0x8a, 0xcd, 0xf7, 0x7c, 0xe5, 0x4e, 0xae, 0x56, 0x50, 0x61, 0x98, 0x46, 0x88, 0xcd, 0x22, 0x1d, 0xf8, 0xd2, 0x90, 0x7d, 0x5f, 0x36, 0x7b, 0xc5, 0x76, 0x9b, 0x6a, 0x9c, 0xeb, 0x3c, 0x69, 0x94, 0x0f, 0xa6, 0x48, 0x8b, 0x9f, 0x41, 0x13, 0x52, 0xa5, 0xdc, 0xe4, 0xdd, 0x5c, 0x7a, 0x8c, 0x6b, 0x44, 0x18, 0x02, 0xc3, 0x49, 0x2a, 0x49, 0xa2, 0x5e, 0x03, 0x62, 0x04, 0xa5, 0x18, 0xaf, 0x4d, 0xc6, 0xcc, 0x1c, 0xa3, 0x09, 0x73, 0x4f, 0xc3, 0x7e, 0xaf, 0x68, 0xe7, 0x64, 0x2c, 0xec, 0x15, 0xd3, 0x6e, 0xe1, 0xbb, 0xab, 0x77, 0x1b, 0xa8, 0xa2, 0x98, 0x37, 0xea, 0xd2, 0x22, 0x38, 0xb3, 0x4c, 0x62, 0x92, 0x3b, 0xa6, 0xb0, 0xa4, 0x21, 0x2d, 0xbd, 0xc5, 0xf6, 0x28, 0x85, 0x49, 0x52, 0x12, 0x8f, 0x31, 0xec, 0x65, 0xc9, 0x7b, 0x82, 0x11, 0x23, 0xb4, 0x03, 0xcd, 0x50, 0xa5, 0xab, 0x96, 0x4b, 0x63, 0x96, 0x4b, 0x33, 0x55, 0x2e, 0x4d, 0xa1, 0x50, 0x41, 0x6b, 0x63, 0xb4, 0xda, 0x16, 0xb7, 0x47, 0x0d, 0xbf, 0x8e, 0xae, 0x17, 0x05, 0xe1, 0x0b, 0x21, 0x3a, 0xfc, 0x7a, 0x63, 0xbd, 0xa8, 0x7c, 0x03, 0x79, 0xaa, 0x61, 0x05, 0x1b, 0xd1, 0x19, 0x1d, 0xdc, 0x67, 0x65, 0xfb, 0xd8, 0xb0, 0xf6, 0xd8, 0x4e, 0x66, 0xe4, 0x11, 0x56, 0xb3, 0x05, 0x72, 0x7d, 0xdc, 0xfb, 0x5b, 0xb3, 0xa1, 0x7a, 0xb9, 0x1f, 0xd6, 0xbf, 0xe6, 0x83, 0xc7, 0x0e, 0xa1, 0xfe, 0xe8, 0x71, 0x86, 0x3c, 0xb9, 0x8b, 0x47, 0xed, 0x09, 0x2c, 0x50, 0xbd, 0xb3, 0x22, 0x94, 0x59, 0xdd, 0x55, 0x15, 0xb8, 0x3f, 0x60, 0xe2, 0x4e, 0x3f, 0xe7, 0x4c, 0x5c, 0xa0, 0x6a, 0x83, 0xb4, 0x44, 0x77, 0x48, 0x4c, 0xd3, 0x24, 0x86, 0x03, 0xf3, 0x0a, 0xc9, 0x2e, 0x1b, 0xe9, 0x19, 0xe5, 0xf7, 0xc7, 0x5e, 0x15, 0x79, 0x77, 0xcf, 0xee, 0x40, 0x6b, 0x34, 0xcd, 0xda, 0x6e, 0x4a, 0xf3, 0xfa, 0x28, 0x51, 0x99, 0xfe, 0xaa, 0x7b, 0x45, 0x75, 0x0f, 0xeb, 0x2b, 0x8a, 0xbd, 0x2b, 0x5a, 0xae, 0x3a, 0x43, 0x5e, 0xbe, 0x3a, 0xe4, 0xec, 0xf2, 0xa8, 0xd0, 0xa5, 0xda, 0x1d, 0x68, 0x21, 0xdf, 0x95, 0x4c, 0x86, 0x7f, 0x65, 0xef, 0x0a, 0x0f, 0xa3, 0x2e, 0x8d, 0xb4, 0x0f, 0x90, 0x27, 0xea, 0x11, 0x0a, 0xe9, 0x6e, 0xe5, 0x08, 0x95, 0xc9, 0x34, 0x24, 0xcf, 0x36, 0x22, 0x97, 0xbe, 0xea, 0x78, 0x6f, 0x6a, 0x0e, 0x4a, 0x60, 0x2a, 0x92, 0xc4, 0xb0, 0xdf, 0xac, 0xc5, 0x27, 0xba, 0x36, 0xd3, 0x1f, 0xd0, 0xc3, 0xf1, 0x00, 0x8e, 0x46, 0x24, 0x81, 0xc1, 0xb0, 0x39, 0x40, 0x80, 0xcb, 0x38, 0x86, 0xe0, 0xc8, 0xc6, 0xb8, 0x31, 0x93, 0xf3, 0xf2, 0xf2, 0x64, 0x4d, 0x0f, 0xa0, 0x8f, 0x78, 0x02, 0xca, 0x0a, 0x1f, 0xeb, 0x50, 0x56, 0xa8, 0x0e, 0x4e, 0x2a, 0x0a, 0x5f, 0xb7, 0xe3, 0xd8, 0x61, 0xa6, 0x59, 0x99, 0xb1, 0xa6, 0xc9, 0x90, 0xa6, 0xc4, 0xba, 0xf3, 0x63, 0x2d, 0x4a, 0xa6, 0x11, 0x9e, 0xb6, 0x24, 0x96, 0x0e, 0xdc, 0x6c, 0x77, 0xad, 0x43, 0xbe, 0xdf, 0x11, 0x0e, 0x5b, 0x0a, 0xe9, 0x26, 0x68, 0xa6, 0xc3, 0x17, 0xca, 0x7b, 0xb2, 0x5b, 0x62, 0x31, 0xa5, 0x58, 0xa0, 0xc6, 0x7c, 0x3f, 0xb6, 0x24, 0x94, 0x0f, 0xdc, 0x4c, 0x95, 0x76, 0x6e, 0xfb, 0xd5, 0xd8, 0xda, 0xc6, 0xe1, 0xf1, 0x68, 0x06, 0x87, 0xc6, 0x30, 0x29, 0x46, 0x2f, 0x4a, 0x1b, 0x33, 0x51, 0x83, 0x76, 0xdb, 0x49, 0x3f, 0x8b, 0x8b, 0xb9, 0x67, 0x70, 0x80, 0xf1, 0xe6, 0x3d, 0x83, 0xa7, 0xa5, 0xd5, 0x07, 0xbb, 0x3d, 0x7e, 0xde, 0x52, 0xd6, 0xe6, 0x3e, 0xa8, 0xec, 0x0c, 0xf7, 0x4b, 0x9a, 0x05, 0xcd, 0xf8, 0xe2, 0xc8, 0x15, 0xb7, 0x5a, 0x4d, 0xab, 0xd0, 0xd9, 0x48, 0x11, 0x88, 0xe3, 0x42, 0xa4, 0x12, 0x9b, 0x81, 0x3f, 0x11, 0x92, 0xe7, 0x11, 0xa8, 0x1e, 0x47, 0xf4, 0xd2, 0x4a, 0x34, 0xed, 0x02, 0x2c, 0x89, 0xee, 0x02, 0x2c, 0x24, 0xc9, 0x75, 0x30, 0x33, 0x6a, 0x3d, 0x0a, 0x5c, 0x46, 0x3b, 0xfc, 0xf4, 0x8f, 0x8c, 0x9a, 0x38, 0x1a, 0xa3, 0x76, 0xf6, 0xcc, 0x33, 0xd2, 0xde, 0xa3, 0x8c, 0x6f, 0xf4, 0x84, 0x77, 0x7f, 0xa3, 0x07, 0x3c, 0x2a, 0x77, 0xc0, 0xdd, 0x83, 0x32, 0xe0, 0x5e, 0x23, 0xbc, 0xb7, 0x7a, 0xb1, 0x76, 0x4f, 0x77, 0x83, 0xea, 0x8d, 0x3e, 0x37, 0x8e, 0x79, 0xe2, 0xf1, 0x9d, 0x3d, 0x9e, 0x2c, 0x13, 0xbc, 0xb5, 0x82, 0xe6, 0x41, 0x21, 0xd0, 0xa2, 0x35, 0x42, 0x75, 0xf7, 0x7b, 0xab, 0x3b, 0x55, 0x7b, 0xbb, 0x1b, 0x14, 0xb4, 0xa3, 0x94, 0xad, 0xec, 0x67, 0x1a, 0x93, 0xf0, 0x1d, 0x68, 0x55, 0x74, 0xfc, 0xb0, 0x4c, 0x61, 0xe2, 0xde, 0xf9, 0x91, 0x4e, 0x51, 0x1d, 0x0c, 0x2d, 0x5d, 0x7f, 0x40, 0xd4, 0x9b, 0x6d, 0x6c, 0x16, 0x14, 0xc3, 0x0a, 0x3b, 0x21, 0x60, 0xe4, 0xde, 0x59, 0x4d, 0x6b, 0x3e, 0x1c, 0xb7, 0xee, 0xd1, 0x50, 0xf7, 0xda, 0x47, 0xa7, 0x7d, 0x7a, 0x21, 0xdc, 0xc1, 0xdd, 0x11, 0xcc, 0x47, 0xa9, 0xd8, 0x9c, 0x7c, 0xea, 0x47, 0xd3, 0x3f, 0xce, 0x07, 0x93, 0x42, 0x54, 0xbf, 0xb3, 0xc2, 0x58, 0xe6, 0x5e, 0x16, 0xca, 0xca, 0x7a, 0xf9, 0xfe, 0x3f, 0x86, 0xaf, 0xd9, 0x4b, 0xab, 0x97, 0xd6, 0x5f, 0xfe, 0xcb, 0x81, 0x13, 0xdd, 0x58, 0xf2, 0x74, 0xca, 0xd1, 0xc3, 0xe8, 0x21, 0x9c, 0xef, 0xee, 0x61, 0xa3, 0x04, 0x84, 0xb3, 0xd9, 0xb7, 0x91, 0x85, 0x41, 0x58, 0xd8, 0xd9, 0x55, 0x9f, 0x6e, 0xe0, 0x85, 0x72, 0xbb, 0x56, 0x70, 0x0a, 0xea, 0xfe, 0x90, 0xc8, 0x6b, 0xff, 0xd2, 0xdb, 0xe3, 0x19, 0x10, 0x95, 0xc6, 0xf2, 0x8c, 0xbd, 0x40, 0xab, 0x63, 0xf9, 0x42, 0x17, 0xed, 0xb6, 0xec, 0x1c, 0x64, 0xf4, 0x7a, 0x19, 0xe9, 0x35, 0x1f, 0x25, 0x2a, 0x26, 0x59, 0xe9, 0x17, 0xa0, 0x64, 0x85, 0xd4, 0x84, 0xd2, 0xe9, 0x75, 0xfb, 0xe4, 0xf0, 0x10, 0x5b, 0x53, 0xcf, 0x26, 0xfc, 0x52, 0xcf, 0x8e, 0xec, 0x00, 0x44, 0x4a, 0xb9, 0x8e, 0xcf, 0x90, 0x34, 0x4b, 0x35, 0x34, 0x93, 0xad, 0x55, 0x64, 0x20, 0xb6, 0xdb, 0xdb, 0x78, 0xd4, 0xcc, 0xf8, 0xc5, 0xe0, 0x5c, 0xb7, 0x40, 0x81, 0x63, 0x1f, 0x87, 0x29, 0x4d, 0xd8, 0x0b, 0x26, 0xc1, 0x6a, 0x5a, 0x41, 0x94, 0x7a, 0x01, 0xed, 0x0a, 0x24, 0xf9, 0x0b, 0x9f, 0xb0, 0x0c, 0x21, 0xcd, 0x1c, 0x81, 0x90, 0xab, 0xe2, 0xb1, 0x1e, 0x4a, 0xad, 0x09, 0x12, 0x44, 0xbe, 0xaa, 0xef, 0x6e, 0x5b, 0xf8, 0x32, 0xba, 0x47, 0x55, 0x03, 0xba, 0x3e, 0x40, 0x9d, 0xfc, 0xc3, 0xbb, 0x31, 0x55, 0xf8, 0x0a, 0xfe, 0x0e, 0x85, 0xaf, 0xa2, 0x9e, 0xac, 0x0a, 0x7f, 0x44, 0xb2, 0x12, 0x59, 0xa6, 0x34, 0x29, 0x95, 0xcc, 0x36, 0xe5, 0x74, 0xf0, 0xee, 0xa2, 0xf0, 0xc7, 0x2c, 0xc5, 0x27, 0x18, 0x76, 0xfd, 0x0b, 0x61, 0xd7, 0x58, 0xd8, 0xa7, 0x7a, 0x9a, 0xe9, 0x19, 0x4b, 0x36, 0x91, 0xd8, 0x6f, 0xd4, 0x32, 0xed, 0x22, 0xfd, 0x0f, 0x4c, 0x75, 0xad, 0x8f, 0xf4, 0x1b, 0xba, 0x51, 0x9d, 0xe6, 0x3b, 0x06, 0x15, 0x72, 0xbf, 0xa1, 0xb9, 0xd4, 0x68, 0x5c, 0x29, 0x1e, 0xeb, 0x39, 0x97, 0x2d, 0x8a, 0x8a, 0x81, 0xcf, 0x4e, 0x32, 0x69, 0x44, 0xea, 0x39, 0xba, 0xe1, 0xf1, 0xb0, 0xe7, 0x0c, 0x58, 0x94, 0x08, 0x6b, 0x83, 0xdc, 0x73, 0x06, 0xbc, 0x35, 0x76, 0xbb, 0x68, 0xf8, 0x42, 0xac, 0xeb, 0x96, 0xc4, 0xb8, 0x58, 0xd7, 0xa5, 0xfe, 0x15, 0x17, 0x6b, 0xcf, 0x67, 0x4f, 0x62, 0x3c, 0x9a, 0xd1, 0xea, 0x8e, 0xf4, 0x2d, 0xea, 0x4b, 0x59, 0x9d, 0xe1, 0xc3, 0xd4, 0x97, 0x9c, 0x4b, 0x3d, 0xdb, 0xdb, 0x38, 0xf1, 0x88, 0x2c, 0x2f, 0xe6, 0x93, 0xcc, 0xac, 0x9f, 0x0c, 0x19, 0xd8, 0xba, 0x82, 0x0f, 0xb4, 0x93, 0x61, 0x8c, 0xa4, 0x59, 0x30, 0xf7, 0x9d, 0x3a, 0x9b, 0xa3, 0x11, 0x38, 0xd2, 0x32, 0x22, 0x1c, 0x8a, 0xf4, 0x11, 0xb9, 0x9f, 0xd1, 0x6c, 0xb1, 0x47, 0xee, 0x67, 0x64, 0x47, 0x1b, 0x95, 0x70, 0x6f, 0xec, 0x8e, 0xf5, 0x30, 0xe8, 0xb1, 0x30, 0x1e, 0x24, 0x95, 0xcf, 0xf1, 0x10, 0x3f, 0x16, 0xc3, 0x91, 0x7f, 0x61, 0x6c, 0x35, 0x72, 0x33, 0x94, 0x72, 0x6e, 0x6c, 0xa5, 0xba, 0xec, 0x0c, 0x78, 0x66, 0x93, 0x16, 0x19, 0xeb, 0xc3, 0x83, 0x6a, 0x3d, 0x54, 0xad, 0x61, 0x90, 0x13, 0xa2, 0x90, 0xe7, 0xc8, 0xfb, 0xa0, 0xad, 0x6c, 0x17, 0x99, 0x52, 0xb0, 0xa1, 0x9c, 0xc2, 0x39, 0x9a, 0x18, 0x8e, 0x07, 0x99, 0x26, 0x79, 0xae, 0x35, 0x32, 0xff, 0xa5, 0x41, 0x0e, 0x9b, 0x25, 0x84, 0x24, 0xbb, 0x5d, 0xbb, 0x8d, 0xed, 0x5a, 0xbf, 0x20, 0x49, 0x9e, 0x8c, 0x77, 0xd0, 0x08, 0x63, 0xc3, 0x31, 0xb6, 0x32, 0xcd, 0x04, 0x9c, 0x1f, 0x52, 0x91, 0x8e, 0xb0, 0xd6, 0x08, 0xf5, 0x9d, 0x1e, 0xa1, 0xa8, 0xe8, 0xaa, 0x8a, 0x33, 0xab, 0x54, 0x26, 0x3a, 0xa9, 0xca, 0x9b, 0xce, 0x42, 0x93, 0x58, 0xa8, 0x8a, 0x42, 0xa7, 0x63, 0x28, 0x9d, 0xe3, 0x31, 0xed, 0xfa, 0x7c, 0x90, 0x4b, 0x7c, 0x1b, 0xea, 0x12, 0xb5, 0x06, 0x2a, 0x71, 0x9a, 0x45, 0x63, 0xb9, 0x0d, 0x7b, 0x44, 0x39, 0x96, 0x0d, 0xcb, 0xfc, 0x77, 0x36, 0x57, 0x40, 0x2b, 0x70, 0x5c, 0xdd, 0x30, 0x5c, 0x34, 0x13, 0x2e, 0xfe, 0x7e, 0x15, 0x71, 0x71, 0x1b, 0xd6, 0xd0, 0x02, 0x95, 0xf8, 0x45, 0xfb, 0x1c, 0xb3, 0x7e, 0xdb, 0x87, 0xba, 0x6a, 0x1e, 0xed, 0x2d, 0x82, 0xb0, 0xc1, 0xee, 0x5e, 0x25, 0x97, 0x22, 0xaf, 0xe8, 0x93, 0xdd, 0x60, 0x54, 0x9d, 0x5c, 0x25, 0xe7, 0x48, 0xb3, 0x9c, 0xe7, 0xf5, 0x91, 0x1c, 0x15, 0x71, 0x39, 0xe6, 0x4b, 0x58, 0xf2, 0x28, 0x91, 0x73, 0x7d, 0x48, 0xfb, 0xcc, 0xb4, 0x16, 0xb8, 0x0f, 0xeb, 0x60, 0x81, 0x7f, 0x41, 0x5d, 0x05, 0x31, 0x26, 0xe1, 0x2d, 0xd2, 0xa6, 0x26, 0x88, 0x9d, 0x34, 0x31, 0xb0, 0xc1, 0x18, 0x81, 0x98, 0x18, 0x83, 0x78, 0xfd, 0x7c, 0x54, 0xbb, 0x7d, 0xd2, 0x89, 0x7d, 0xcf, 0x93, 0x4a, 0xab, 0x36, 0xf1, 0xbb, 0xb4, 0x51, 0xf2, 0x4d, 0x64, 0xf8, 0xc1, 0x54, 0x44, 0xc7, 0xd4, 0x82, 0x37, 0x0a, 0x88, 0x02, 0xe5, 0xd2, 0xd7, 0x08, 0xc5, 0x47, 0x0f, 0x62, 0x5a, 0x85, 0xc7, 0xa0, 0x43, 0x99, 0x50, 0xcc, 0xcc, 0xd4, 0xa6, 0x1b, 0x81, 0x4b, 0x35, 0x02, 0x3f, 0xb3, 0x27, 0x75, 0xe9, 0x98, 0x62, 0xe0, 0xc6, 0x14, 0xa1, 0x7b, 0x85, 0x3b, 0xf0, 0xeb, 0xbe, 0xba, 0x33, 0xa2, 0xbe, 0x18, 0x6b, 0xeb, 0x78, 0x78, 0x37, 0xf5, 0x20, 0xda, 0x1f, 0xc4, 0x5b, 0x54, 0x34, 0xeb, 0x47, 0x10, 0x9d, 0xf2, 0x0c, 0xce, 0x81, 0x00, 0x72, 0xab, 0x12, 0xa1, 0x1b, 0x7f, 0x1d, 0x42, 0x28, 0x72, 0x56, 0x03, 0xf1, 0x2d, 0xe4, 0x59, 0x56, 0x9a, 0x5f, 0x88, 0xc8, 0x0e, 0x59, 0x16, 0x98, 0xb4, 0xf8, 0xf6, 0xb7, 0xba, 0x84, 0xc4, 0xf3, 0x01, 0x8b, 0x62, 0xb8, 0xb5, 0x0a, 0xe3, 0x37, 0x1d, 0x10, 0x96, 0xe6, 0x21, 0xbe, 0xb7, 0xc9, 0x77, 0xf5, 0x75, 0x9a, 0xf5, 0xd3, 0x34, 0xf3, 0x73, 0x96, 0x9e, 0xff, 0x11, 0xd2, 0x88, 0xe0, 0x87, 0xbc, 0x52, 0x71, 0xec, 0xde, 0x4c, 0x8f, 0x32, 0x13, 0xca, 0x12, 0xff, 0xa0, 0x3d, 0x63, 0xf3, 0x28, 0x89, 0xbf, 0x86, 0x03, 0xee, 0x15, 0xbb, 0x56, 0xb4, 0x9c, 0x3f, 0xbe, 0xca, 0x1d, 0xdc, 0x1d, 0x6c, 0x55, 0x0b, 0xf6, 0xf5, 0xaf, 0x59, 0x0b, 0x21, 0x20, 0x5e, 0x44, 0x89, 0xa0, 0x33, 0x6e, 0xdc, 0x8a, 0x8e, 0xe3, 0x71, 0x96, 0x57, 0xd1, 0xd1, 0x4e, 0x5e, 0x79, 0xeb, 0x25, 0xaa, 0xc4, 0xdc, 0x02, 0x58, 0xe6, 0x1e, 0x1c, 0xd1, 0x56, 0xdb, 0x5f, 0x80, 0x0e, 0x7c, 0xda, 0xf0, 0xf1, 0xe1, 0xd3, 0x8c, 0xcf, 0x7c, 0x7c, 0xea, 0x25, 0x59, 0x8d, 0xf6, 0x0c, 0x57, 0x0c, 0x7c, 0x6a, 0x75, 0x6d, 0xd0, 0xd3, 0x5e, 0x56, 0x76, 0xc2, 0x0a, 0xdb, 0x47, 0xcc, 0x38, 0x43, 0xf6, 0xb3, 0x91, 0x38, 0x2e, 0x6c, 0xcf, 0x4d, 0x21, 0x29, 0x06, 0x72, 0x2c, 0x5e, 0x8e, 0x21, 0x38, 0xbb, 0x5b, 0x21, 0xe1, 0x7a, 0xc5, 0x25, 0xe4, 0x6d, 0x71, 0x34, 0x49, 0x5a, 0xc7, 0xa7, 0x11, 0x3d, 0x1c, 0x12, 0x8e, 0x15, 0xa1, 0x54, 0xc6, 0xf6, 0x9e, 0x46, 0x29, 0xee, 0x46, 0x5b, 0xb4, 0x57, 0x4a, 0xbb, 0x73, 0x67, 0xba, 0xf6, 0x5c, 0x3b, 0x44, 0xd4, 0x61, 0xb1, 0x83, 0x88, 0x69, 0x9e, 0xd4, 0x25, 0x18, 0x14, 0xb2, 0xec, 0x7d, 0x62, 0x37, 0x72, 0xc4, 0x84, 0xd5, 0x13, 0x5a, 0x41, 0x84, 0xa6, 0x09, 0x25, 0xd0, 0x62, 0xe9, 0xc4, 0xa1, 0x68, 0x0b, 0x14, 0xe0, 0xfb, 0x9c, 0xda, 0x81, 0x7a, 0xe7, 0x34, 0xd4, 0x25, 0x46, 0xe4, 0x7f, 0xed, 0x6d, 0xb3, 0x8d, 0x56, 0x6e, 0x4d, 0xd1, 0xd5, 0xd4, 0x04, 0x57, 0xd1, 0x15, 0xe8, 0x2c, 0xba, 0x10, 0x3e, 0x6b, 0xea, 0xf9, 0x42, 0xec, 0x5e, 0xb3, 0x4d, 0x98, 0xee, 0x53, 0x14, 0x5f, 0x81, 0xa9, 0xb4, 0xc3, 0xe1, 0x0b, 0xe1, 0x6b, 0x59, 0x38, 0xed, 0x73, 0x38, 0xc5, 0xd6, 0xc3, 0x69, 0x9f, 0x47, 0xc1, 0x17, 0x62, 0x35, 0x51, 0x2c, 0x5a, 0xc9, 0x7a, 0x6c, 0xc8, 0x47, 0xba, 0x71, 0xa7, 0xbc, 0x1e, 0x09, 0x7c, 0x4a, 0x1b, 0xd8, 0xcb, 0xed, 0x65, 0xf6, 0x56, 0x30, 0xdb, 0x8b, 0xed, 0x25, 0xa6, 0x42, 0x38, 0x97, 0xf4, 0xa8, 0x48, 0xab, 0x07, 0xc3, 0x60, 0x08, 0xa5, 0xae, 0xb5, 0xc2, 0x74, 0x56, 0x72, 0xb7, 0x60, 0xa3, 0x9d, 0x0e, 0x04, 0x41, 0x13, 0x28, 0x2b, 0x2a, 0x2e, 0xf5, 0x14, 0xf8, 0x13, 0x77, 0x6c, 0x05, 0x6d, 0x7d, 0xce, 0x17, 0xd3, 0xb0, 0x11, 0x42, 0xe9, 0x68, 0x45, 0xdc, 0x20, 0x07, 0xf9, 0x84, 0xf5, 0x7f, 0xbf, 0x92, 0xad, 0x4f, 0x34, 0x63, 0x2e, 0x73, 0xd8, 0xfa, 0xfd, 0x3e, 0x4d, 0x80, 0x46, 0x1a, 0x1c, 0x5d, 0x76, 0xfa, 0x92, 0x7a, 0x09, 0x12, 0x76, 0xde, 0x2f, 0xc2, 0x62, 0x65, 0x2e, 0xf6, 0x2a, 0xfc, 0x65, 0x22, 0xef, 0xaf, 0x3a, 0xb6, 0x46, 0x1a, 0x7d, 0x2c, 0x1c, 0x83, 0x6c, 0x67, 0x32, 0xbd, 0x9a, 0x41, 0x56, 0x15, 0x0d, 0x0c, 0x0c, 0x62, 0xcc, 0x1c, 0x4b, 0x32, 0xe6, 0x3c, 0x1f, 0x9f, 0x36, 0x7c, 0xdc, 0xf7, 0xaf, 0x19, 0xd7, 0x0a, 0x0b, 0x61, 0x14, 0xfe, 0xfa, 0x21, 0x01, 0xb9, 0x92, 0x05, 0x9c, 0x0c, 0x2a, 0xcd, 0x4c, 0x02, 0x1c, 0x42, 0x6e, 0x72, 0x84, 0xa5, 0x68, 0xc6, 0xa7, 0x03, 0x9f, 0xd9, 0x5f, 0x91, 0xe2, 0x49, 0xb2, 0xf1, 0xd1, 0x04, 0x48, 0xba, 0xf4, 0xcc, 0x2e, 0x1e, 0xf8, 0x6c, 0xb5, 0xb3, 0xcc, 0x6b, 0x62, 0x10, 0x3a, 0x50, 0xea, 0xd5, 0xb2, 0xd4, 0xad, 0x2c, 0x75, 0x8b, 0x9c, 0xba, 0x8c, 0xed, 0xbb, 0xa3, 0x95, 0x46, 0x8f, 0xd8, 0xc4, 0x62, 0x76, 0x7e, 0x65, 0x4c, 0x9b, 0x88, 0x92, 0x94, 0xaf, 0xc5, 0x2b, 0x78, 0xf2, 0x69, 0x37, 0xef, 0x82, 0x4c, 0xb6, 0xef, 0xd3, 0x02, 0xe2, 0xba, 0x6d, 0x48, 0x75, 0x41, 0x95, 0x9f, 0xbe, 0x27, 0x20, 0xd6, 0x54, 0xed, 0xa4, 0x0b, 0xb0, 0x7d, 0xbf, 0x66, 0x91, 0x6f, 0xe7, 0x3a, 0x38, 0x51, 0xb9, 0x04, 0xb9, 0x46, 0x27, 0xf7, 0x45, 0x5c, 0x46, 0xa9, 0xe6, 0x44, 0x84, 0x0a, 0x87, 0xb4, 0xa2, 0x26, 0x9e, 0x12, 0x46, 0xd2, 0xd0, 0xc7, 0x06, 0xb9, 0xfd, 0x5f, 0x67, 0x29, 0x4a, 0xbc, 0x63, 0x19, 0xdf, 0x9d, 0xe5, 0x0e, 0x4c, 0xb0, 0xc1, 0x6a, 0xe6, 0xfe, 0x2e, 0x73, 0xaf, 0xbd, 0xa3, 0x15, 0xbe, 0x07, 0xcb, 0x10, 0x17, 0x4a, 0xec, 0x19, 0x1d, 0xb0, 0xd7, 0x59, 0xce, 0x5c, 0x6d, 0x70, 0x0a, 0xdb, 0x44, 0x44, 0x97, 0x0f, 0x76, 0x63, 0xf9, 0xe7, 0x4f, 0x28, 0xc2, 0xf6, 0xa6, 0x74, 0xf7, 0xb3, 0x74, 0xbd, 0x6d, 0x34, 0x6d, 0x55, 0x35, 0xc1, 0x0e, 0xdb, 0x9d, 0x58, 0x06, 0x6f, 0x1e, 0xc6, 0x6c, 0x86, 0x93, 0xcc, 0xb7, 0x0c, 0x7d, 0x0f, 0x23, 0x1f, 0xac, 0x97, 0xec, 0x59, 0x26, 0x38, 0xe0, 0x38, 0x4b, 0x59, 0xee, 0x0e, 0x88, 0x0a, 0x84, 0x73, 0x1c, 0xd3, 0xf7, 0xa3, 0xec, 0x15, 0xb1, 0x35, 0x22, 0x8b, 0x8b, 0x2a, 0x26, 0xdf, 0x9d, 0x25, 0x4d, 0x53, 0x2f, 0x49, 0x01, 0x5a, 0x94, 0x02, 0xd2, 0x8c, 0x4c, 0xee, 0x31, 0x24, 0xcb, 0x92, 0x8f, 0x26, 0x26, 0x59, 0x7c, 0x54, 0x12, 0xed, 0x91, 0xed, 0x6c, 0x75, 0x46, 0xb6, 0xfa, 0x94, 0x6c, 0x3e, 0x13, 0x48, 0x0f, 0x6d, 0xf1, 0xea, 0x75, 0x3c, 0xea, 0x9c, 0x4d, 0x31, 0x9d, 0xd3, 0x19, 0x58, 0x00, 0x09, 0x65, 0xa8, 0x79, 0xb6, 0x44, 0x56, 0xd3, 0x12, 0x0a, 0x9c, 0xdb, 0x60, 0x37, 0xea, 0x53, 0xdb, 0x60, 0x2f, 0xa6, 0x33, 0x4c, 0x62, 0x5c, 0x21, 0xfc, 0x21, 0xbe, 0xcf, 0x25, 0xed, 0x0a, 0x7f, 0x3c, 0x69, 0x1a, 0x4a, 0x39, 0x71, 0xf9, 0x5e, 0x3d, 0x2c, 0x71, 0x04, 0x63, 0x94, 0x23, 0xf0, 0xd7, 0x8d, 0xa1, 0x61, 0xf8, 0xa7, 0x58, 0xbf, 0xc0, 0x36, 0xab, 0x44, 0x4e, 0xf0, 0x41, 0xf8, 0xfc, 0x17, 0x38, 0x01, 0x85, 0x2f, 0x63, 0xe1, 0xdc, 0x30, 0x4e, 0xf0, 0xbc, 0x9e, 0xc5, 0x92, 0x6d, 0x2a, 0x30, 0x9e, 0x91, 0xf5, 0x6f, 0x3a, 0xbf, 0x22, 0x22, 0xe3, 0x95, 0xcd, 0x70, 0x4f, 0xb7, 0x68, 0xa6, 0x0f, 0x7c, 0x2c, 0xb0, 0x55, 0x2f, 0x26, 0xe5, 0xf1, 0xed, 0xb1, 0x14, 0x91, 0xb8, 0xa0, 0xc4, 0xb8, 0xd8, 0xdb, 0x91, 0x16, 0xa2, 0xf1, 0x38, 0x1b, 0x8e, 0x88, 0x6b, 0x98, 0x3c, 0x39, 0x80, 0x12, 0xc4, 0xfa, 0x6a, 0x0e, 0xe5, 0xcb, 0xcf, 0x9d, 0x4d, 0xb4, 0x27, 0xbf, 0x84, 0x7c, 0x07, 0xef, 0x6e, 0x82, 0x65, 0xe1, 0x9b, 0x28, 0xcb, 0xec, 0x40, 0x6c, 0x9c, 0xf4, 0xa6, 0xe2, 0xef, 0x71, 0xaf, 0x06, 0xb5, 0xe2, 0x7e, 0xab, 0xed, 0xc5, 0x97, 0xeb, 0x79, 0x2b, 0x97, 0x03, 0xc7, 0x6c, 0xc7, 0x6c, 0xf9, 0x5c, 0x75, 0x89, 0x55, 0xd1, 0xac, 0x50, 0xda, 0x50, 0x4a, 0xb5, 0x61, 0xca, 0xa1, 0xbb, 0x4b, 0x88, 0x9f, 0x47, 0x4a, 0x31, 0x7d, 0xe0, 0xca, 0x2f, 0x5c, 0x1b, 0x65, 0x6e, 0x42, 0xb3, 0x97, 0x48, 0x91, 0x57, 0xe6, 0x53, 0x39, 0x58, 0x8d, 0x3a, 0x25, 0x9e, 0x02, 0x9b, 0x62, 0x29, 0x28, 0x36, 0xd2, 0x7a, 0x89, 0x74, 0x62, 0x09, 0xb5, 0x88, 0x37, 0x9f, 0xb5, 0xea, 0x76, 0x9a, 0x7d, 0x9a, 0x3e, 0x70, 0x4d, 0xc1, 0xea, 0x41, 0x33, 0x70, 0x02, 0x2b, 0xdb, 0x58, 0x16, 0x7a, 0x98, 0xcd, 0x4d, 0xc9, 0x21, 0x33, 0xa5, 0x16, 0x55, 0xa2, 0xa4, 0xca, 0xb7, 0x71, 0xac, 0x3d, 0xdd, 0x2c, 0xd6, 0x5e, 0x09, 0xc6, 0x47, 0xda, 0x28, 0x0c, 0x6a, 0xf3, 0x53, 0x8c, 0xe3, 0x34, 0xc1, 0xa9, 0x78, 0x18, 0x9e, 0xb1, 0xe2, 0xd8, 0x2f, 0x2b, 0x55, 0x14, 0x6e, 0xbb, 0xb7, 0xd9, 0x28, 0xb5, 0x94, 0x22, 0x26, 0x89, 0x7f, 0xb8, 0x33, 0x26, 0x89, 0x53, 0xff, 0xa7, 0x3a, 0x5f, 0x5d, 0x2c, 0xe3, 0xbe, 0x30, 0x16, 0x93, 0x49, 0xce, 0x26, 0x68, 0x47, 0x6d, 0xa5, 0xa9, 0x7f, 0x1b, 0xdb, 0xb9, 0x8b, 0x31, 0x3f, 0x74, 0xc6, 0xc7, 0xa0, 0x75, 0xbe, 0xec, 0x00, 0xf3, 0xaf, 0x24, 0xcb, 0x06, 0x58, 0x72, 0xcb, 0x1c, 0xed, 0xb7, 0xc8, 0x51, 0xf5, 0xa5, 0x39, 0x2e, 0xc1, 0x76, 0x6c, 0x3a, 0xb6, 0x0d, 0x16, 0x23, 0x0f, 0xc6, 0x98, 0x1f, 0x9c, 0xbc, 0x75, 0x8e, 0x1f, 0xbc, 0xc5, 0x4e, 0xb6, 0x1a, 0x46, 0xad, 0x18, 0x97, 0x95, 0xf2, 0x83, 0x7d, 0x4c, 0x8a, 0x8f, 0xd9, 0x24, 0xd2, 0xac, 0xfd, 0x21, 0x36, 0xe3, 0xbb, 0xc8, 0xf5, 0x30, 0xf6, 0x78, 0x85, 0xa0, 0xf5, 0xd2, 0xaa, 0xba, 0x42, 0x77, 0x97, 0xf0, 0xb2, 0x67, 0x20, 0x72, 0x86, 0x0d, 0x4a, 0x10, 0xb9, 0x28, 0xdb, 0xe6, 0xd3, 0xea, 0x79, 0x61, 0x2b, 0x94, 0x91, 0x95, 0xce, 0x6b, 0x5f, 0x43, 0xbe, 0xe1, 0xf4, 0xa6, 0xe4, 0x76, 0x42, 0xd2, 0x9f, 0xde, 0x60, 0x36, 0x4b, 0x7d, 0xb5, 0x6b, 0x68, 0x4e, 0xa5, 0x3a, 0x40, 0x56, 0x6c, 0xed, 0xb0, 0x18, 0x48, 0x5a, 0x2c, 0x74, 0x4d, 0xff, 0x10, 0xa6, 0x4c, 0x1b, 0x08, 0x3f, 0x95, 0xad, 0x28, 0x59, 0x8e, 0x3c, 0x7c, 0x03, 0x4a, 0xaf, 0x8a, 0xea, 0x2e, 0x51, 0x74, 0xa6, 0x7a, 0xf2, 0xf4, 0xd5, 0xb2, 0x64, 0xbf, 0x52, 0x93, 0x0a, 0x15, 0x48, 0x53, 0x21, 0x8d, 0x09, 0xa6, 0x03, 0xe7, 0xe9, 0x60, 0xf2, 0x1f, 0xff, 0xbb, 0x3e, 0x4f, 0x0b, 0xfa, 0x7c, 0x1b, 0xa5, 0x44, 0x4f, 0xed, 0x4a, 0xcc, 0xe5, 0x71, 0xcc, 0x03, 0x52, 0x33, 0xbd, 0xa2, 0x86, 0x0b, 0xff, 0x6b, 0x9d, 0x52, 0xc9, 0x85, 0x4f, 0x8b, 0x19, 0xe8, 0xee, 0x67, 0xee, 0x17, 0x44, 0x4d, 0x3b, 0xa4, 0x73, 0xca, 0x2e, 0xd4, 0xdb, 0x2c, 0x76, 0xee, 0xca, 0x8f, 0x78, 0xa6, 0x89, 0xbd, 0x15, 0x9c, 0x13, 0x10, 0xb5, 0xfd, 0xcb, 0x75, 0x89, 0xa7, 0x7f, 0x8e, 0xd2, 0x9b, 0xe5, 0x30, 0x97, 0x71, 0xd0, 0x1d, 0xda, 0x1d, 0x68, 0x51, 0xee, 0x7c, 0x01, 0x6c, 0x0b, 0xce, 0xb3, 0x5f, 0x08, 0xcf, 0x47, 0x49, 0x32, 0x85, 0xcd, 0xc5, 0x7c, 0x24, 0xb2, 0x75, 0xd5, 0xd7, 0x54, 0x91, 0x33, 0x3a, 0x22, 0xfb, 0x88, 0x11, 0x13, 0x85, 0x28, 0xed, 0x3b, 0xf2, 0x2c, 0x60, 0xf7, 0x2a, 0x2b, 0x68, 0x77, 0x9b, 0x02, 0x7f, 0xb7, 0x93, 0xec, 0x58, 0x90, 0xe0, 0x78, 0x35, 0xa7, 0x13, 0xa6, 0xbc, 0xf1, 0xaa, 0x28, 0xb0, 0xda, 0x64, 0xca, 0x75, 0x49, 0x95, 0xea, 0xf2, 0x52, 0x9f, 0x47, 0x25, 0xd5, 0xc5, 0xab, 0x65, 0x7b, 0xe8, 0x6a, 0x77, 0xb2, 0x5d, 0xd7, 0x38, 0x32, 0x3b, 0xb0, 0x6e, 0x51, 0x4b, 0x13, 0x5a, 0x55, 0xc4, 0x31, 0x39, 0x17, 0x79, 0x31, 0x4a, 0xbb, 0x26, 0xfb, 0xb4, 0x0f, 0xc2, 0x7f, 0xeb, 0x80, 0x0c, 0x84, 0xe0, 0xfb, 0xdb, 0xc9, 0x00, 0x72, 0x75, 0xed, 0x6f, 0x2f, 0xc1, 0x6a, 0xe4, 0x07, 0xa9, 0xbb, 0xc9, 0x12, 0x1e, 0x38, 0xf5, 0xb8, 0x26, 0x48, 0x80, 0x7b, 0xf1, 0x57, 0x01, 0x79, 0xe3, 0xdc, 0xf0, 0x4d, 0x1c, 0xd3, 0xa2, 0xa7, 0x25, 0x51, 0x5b, 0x98, 0x93, 0xab, 0x96, 0x8d, 0x38, 0x17, 0x2a, 0xd5, 0xda, 0x09, 0xae, 0xa3, 0x07, 0x75, 0x36, 0xb2, 0x9f, 0x37, 0x97, 0x33, 0x6b, 0x25, 0x3b, 0x5b, 0x4d, 0xda, 0xeb, 0x2c, 0xf6, 0xa4, 0xdd, 0x33, 0x1d, 0x56, 0xdf, 0x53, 0x02, 0x6b, 0xbf, 0x49, 0xe3, 0x5b, 0xf7, 0x9d, 0x9d, 0x30, 0x1a, 0x96, 0x31, 0x99, 0x3f, 0x8f, 0x8d, 0x04, 0xf7, 0xb6, 0xfd, 0xad, 0x3f, 0xf4, 0x01, 0xea, 0x2e, 0xe5, 0x57, 0x55, 0x7f, 0x23, 0x4d, 0xc2, 0xa0, 0x3a, 0xb1, 0xea, 0x0b, 0x67, 0x4f, 0x69, 0xa3, 0x79, 0x14, 0x47, 0x73, 0x50, 0x79, 0x67, 0x69, 0x10, 0x77, 0xf0, 0x4d, 0x92, 0xba, 0xad, 0x36, 0x63, 0xcf, 0xc4, 0x69, 0xa0, 0x60, 0xb6, 0x00, 0x89, 0x6c, 0x2d, 0x45, 0x85, 0x52, 0xa5, 0x05, 0x4a, 0x5c, 0x7b, 0x6e, 0x2e, 0x23, 0xbe, 0xea, 0xe3, 0xfc, 0x48, 0xab, 0xee, 0x80, 0x9e, 0x7b, 0x67, 0xdb, 0xaf, 0xf7, 0xb7, 0x5c, 0x47, 0x29, 0x34, 0x11, 0xc3, 0x73, 0xb1, 0x11, 0xcd, 0xa8, 0xeb, 0x4b, 0x31, 0x67, 0x4b, 0x31, 0x23, 0x12, 0xbb, 0xb4, 0xeb, 0x19, 0xf5, 0xd1, 0x42, 0xbd, 0x64, 0x6f, 0x67, 0x64, 0x23, 0x84, 0x68, 0x6c, 0x82, 0xa9, 0xcc, 0xca, 0xd6, 0xcc, 0x76, 0x6c, 0xa6, 0x8a, 0x2e, 0xea, 0x21, 0xaf, 0x8d, 0x25, 0xaa, 0x62, 0xa3, 0x8e, 0x46, 0xaf, 0x31, 0xcc, 0xa6, 0x3d, 0x1d, 0x9e, 0xf3, 0x62, 0x8e, 0x7d, 0x0c, 0xad, 0xb3, 0x60, 0x7e, 0xea, 0xf2, 0x81, 0x21, 0x5e, 0x3a, 0x47, 0x90, 0x56, 0x51, 0xc8, 0x97, 0x95, 0x57, 0x1d, 0xf1, 0x9b, 0xc9, 0x4e, 0xfc, 0x90, 0xe6, 0x9e, 0xa9, 0x04, 0x85, 0x1a, 0x69, 0x2d, 0xfa, 0x1f, 0xcc, 0x11, 0xf7, 0x47, 0x6c, 0x02, 0xff, 0xf1, 0x0c, 0x72, 0xc4, 0x36, 0x51, 0x3a, 0xdf, 0x25, 0xb2, 0xb3, 0xe2, 0x1f, 0xcd, 0x2b, 0x93, 0x16, 0x8e, 0xa9, 0x32, 0xf4, 0xf2, 0x3a, 0x08, 0xc6, 0xca, 0x7a, 0xec, 0x90, 0x38, 0x16, 0xdb, 0xee, 0xae, 0x17, 0x83, 0xed, 0x50, 0x96, 0xb0, 0xbf, 0x4b, 0x5f, 0xf4, 0xa7, 0x97, 0x8d, 0xd5, 0x7f, 0x7e, 0xfd, 0x74, 0x8f, 0x2e, 0x77, 0x2b, 0xbc, 0x14, 0x70, 0xf7, 0xec, 0xec, 0xa9, 0x7b, 0xbb, 0xf2, 0x6f, 0x59, 0x98, 0xe7, 0xfd, 0xd8, 0xdf, 0x85, 0x7c, 0xcc, 0x53, 0x40, 0x28, 0x7a, 0xb2, 0x82, 0x23, 0xfa, 0x40, 0x48, 0x56, 0x3d, 0x67, 0xb7, 0x3b, 0xec, 0xa7, 0x9d, 0xe3, 0xec, 0x98, 0x2f, 0x73, 0xa3, 0x6b, 0xb4, 0x9e, 0x3b, 0xbd, 0x12, 0xdf, 0xa9, 0xe3, 0x8a, 0x60, 0x8c, 0x0e, 0xec, 0x45, 0x8e, 0xa2, 0xd3, 0x15, 0xe8, 0x4e, 0x93, 0xdc, 0xe8, 0xba, 0x43, 0x07, 0xa7, 0x57, 0xe0, 0x3b, 0x7d, 0x9c, 0x0d, 0xee, 0x94, 0x75, 0x0b, 0x15, 0xad, 0xa3, 0xb3, 0x76, 0x36, 0xba, 0xf6, 0x0c, 0xb1, 0xf3, 0x8c, 0xfc, 0x2a, 0x1c, 0x51, 0xb2, 0xaa, 0x36, 0x38, 0x1e, 0xe2, 0xce, 0xca, 0x54, 0x90, 0x8a, 0x1c, 0x85, 0x4e, 0x5c, 0xd2, 0xea, 0x03, 0x11, 0xcc, 0x66, 0x29, 0xaa, 0xd6, 0x48, 0x3c, 0xa9, 0x70, 0x2a, 0x59, 0xe7, 0x61, 0x2d, 0xad, 0x88, 0x37, 0xc6, 0x9b, 0xb0, 0x9c, 0x6c, 0xee, 0x2e, 0x72, 0xde, 0x8a, 0x11, 0x04, 0x4c, 0xe3, 0xb0, 0x9d, 0x76, 0x60, 0xce, 0x46, 0xc9, 0x8d, 0xae, 0x89, 0x02, 0x7f, 0xba, 0x07, 0xdf, 0x26, 0x2c, 0xf5, 0x24, 0xd2, 0x6c, 0xe8, 0xd4, 0xbb, 0x69, 0x57, 0xc0, 0x8c, 0x7d, 0x26, 0x51, 0x8f, 0xa3, 0xdb, 0x38, 0x2b, 0x9d, 0x04, 0xc1, 0xca, 0x44, 0xd6, 0x01, 0x55, 0xee, 0xee, 0xe9, 0x97, 0xb8, 0xb3, 0xec, 0x34, 0x4d, 0xd4, 0xcb, 0x2d, 0xa9, 0xd3, 0x06, 0x86, 0x36, 0xb3, 0x33, 0x8c, 0xb0, 0x5c, 0x54, 0x1f, 0xb6, 0xca, 0x96, 0x48, 0x69, 0x98, 0x75, 0x97, 0x16, 0xb5, 0x94, 0x2c, 0x6c, 0x23, 0x40, 0xdf, 0xd4, 0x48, 0x3c, 0x21, 0xad, 0x36, 0xd0, 0x1f, 0x32, 0x46, 0xeb, 0xd1, 0x59, 0x28, 0xf3, 0x94, 0xab, 0xc4, 0x53, 0x4c, 0xa8, 0x71, 0x62, 0x2d, 0x2a, 0x49, 0x63, 0x78, 0xad, 0xdc, 0x37, 0x31, 0x6e, 0x06, 0x9f, 0x9d, 0xfb, 0x45, 0xbc, 0xc5, 0x47, 0xe7, 0x82, 0x54, 0x61, 0x1d, 0x6b, 0xb0, 0x8f, 0xd9, 0x49, 0x2e, 0xa4, 0x59, 0x5c, 0xce, 0x80, 0x3a, 0x5c, 0x2e, 0x3e, 0x56, 0x81, 0x76, 0x14, 0xe4, 0x96, 0x5e, 0x01, 0xeb, 0x8f, 0xff, 0xf0, 0x93, 0xc3, 0x2c, 0xc6, 0x01, 0x5f, 0xb8, 0xf7, 0x71, 0x4f, 0x8a, 0x50, 0xdc, 0xbb, 0xd6, 0xa3, 0x32, 0x61, 0x3c, 0x81, 0xe2, 0x95, 0x60, 0xbc, 0xfc, 0xc7, 0x5f, 0x67, 0x31, 0xf6, 0x59, 0xee, 0xd0, 0x15, 0x5b, 0x46, 0xc7, 0xe6, 0x8b, 0xcd, 0x70, 0x2a, 0x20, 0x69, 0x67, 0x8c, 0xc2, 0x95, 0xd8, 0xb7, 0x3a, 0x65, 0xdb, 0x60, 0x9a, 0xfb, 0xac, 0x45, 0x5d, 0x5c, 0x9a, 0xfb, 0xac, 0x24, 0xed, 0xfe, 0x66, 0x3b, 0xa3, 0xff, 0xa5, 0xc8, 0x33, 0x36, 0x98, 0x1f, 0xf8, 0x19, 0xe6, 0x2f, 0xa4, 0x34, 0x61, 0x5f, 0x3d, 0x13, 0x40, 0xd9, 0xa8, 0xd8, 0x58, 0xf5, 0x13, 0x2c, 0x8d, 0xa0, 0x91, 0x7c, 0x8c, 0x36, 0xa1, 0xf4, 0xf1, 0xd7, 0xc5, 0x7a, 0xb3, 0xfa, 0xd4, 0x6a, 0x41, 0x59, 0x16, 0xe8, 0x0f, 0x3c, 0x16, 0x38, 0x1c, 0x40, 0x1a, 0xb3, 0xf6, 0x2e, 0x6b, 0x51, 0x98, 0xa1, 0x7a, 0xd9, 0x8f, 0xff, 0x20, 0xda, 0xb2, 0x93, 0xdf, 0x7e, 0x54, 0x18, 0x25, 0x85, 0x1e, 0xa1, 0xd0, 0xdc, 0xde, 0xe5, 0x2d, 0x0a, 0x9a, 0xa3, 0x67, 0xf3, 0x00, 0x0e, 0xc8, 0x8d, 0x94, 0xf5, 0xed, 0x80, 0xae, 0xfc, 0x8d, 0xdf, 0xd3, 0x2e, 0x89, 0xfe, 0x15, 0x64, 0x83, 0x2f, 0x7c, 0xa4, 0x02, 0xf7, 0xaa, 0x5f, 0xff, 0x69, 0xc1, 0x5e, 0xf7, 0x4a, 0x5d, 0xf1, 0xaf, 0x8e, 0x2e, 0xd8, 0x28, 0x94, 0xb0, 0x3a, 0xee, 0x16, 0xf9, 0xc5, 0x10, 0x3b, 0x8b, 0x62, 0xa8, 0x8e, 0xbe, 0xa5, 0xb3, 0x97, 0xa8, 0xf4, 0x4c, 0x6a, 0x3d, 0x4d, 0xd6, 0xe1, 0x28, 0xb1, 0x6a, 0x50, 0x62, 0xd5, 0xda, 0x9f, 0x0b, 0x5f, 0xc6, 0xe7, 0x6a, 0x9c, 0x1e, 0xcc, 0x97, 0x0e, 0x0c, 0xce, 0x74, 0xad, 0x93, 0x66, 0x82, 0x16, 0x40, 0xe2, 0x92, 0x88, 0x06, 0xcc, 0xac, 0x1c, 0xd7, 0x19, 0x21, 0x0e, 0x67, 0x34, 0x27, 0xec, 0x60, 0x38, 0xcb, 0xf2, 0x42, 0x62, 0x0d, 0xc9, 0xc2, 0xf7, 0xaf, 0xec, 0x74, 0x9d, 0x22, 0x4b, 0x07, 0xa6, 0xe5, 0x12, 0x56, 0x07, 0x0b, 0x51, 0xae, 0x4d, 0x8c, 0x69, 0xb6, 0x32, 0xdd, 0x40, 0xa2, 0x7e, 0x42, 0xa9, 0xa4, 0xdb, 0xda, 0x51, 0xb2, 0xc0, 0x77, 0xbb, 0x2f, 0x4c, 0x73, 0x64, 0xf8, 0xdc, 0x60, 0xbb, 0xd7, 0x2f, 0x13, 0xc7, 0x5a, 0x67, 0x40, 0xd7, 0x0d, 0x36, 0x47, 0x95, 0x68, 0x99, 0x4c, 0x73, 0x9a, 0x37, 0x77, 0xa1, 0x44, 0xbe, 0x57, 0xca, 0x53, 0x71, 0x9a, 0x66, 0xed, 0x51, 0x4a, 0x5f, 0x2d, 0x4c, 0x0e, 0xdf, 0x20, 0x0d, 0x41, 0xc0, 0x32, 0x58, 0xf7, 0xbe, 0xab, 0xbd, 0xb7, 0x93, 0xe3, 0x40, 0x6d, 0x37, 0x41, 0xfe, 0x04, 0x66, 0x63, 0x04, 0x76, 0xf9, 0x5d, 0x76, 0x2f, 0xf6, 0xd8, 0x7b, 0x6d, 0x90, 0x3e, 0xa1, 0x13, 0xc0, 0x06, 0xe0, 0xc6, 0x94, 0x97, 0x51, 0x96, 0x6e, 0x33, 0xda, 0x0c, 0x69, 0x7e, 0xe1, 0x58, 0x60, 0x52, 0x51, 0xf8, 0xda, 0x4f, 0x0e, 0x23, 0x56, 0xce, 0xb2, 0x1e, 0x12, 0x32, 0x29, 0x8c, 0x09, 0x22, 0xed, 0xb9, 0x5c, 0x10, 0xbe, 0xb6, 0x04, 0xc6, 0x6a, 0xdf, 0x99, 0xe1, 0x28, 0xb7, 0x97, 0x3f, 0x6a, 0x84, 0x04, 0x66, 0xe7, 0xcf, 0x39, 0x6c, 0x76, 0xdb, 0xa3, 0x01, 0xe6, 0xe6, 0xdf, 0xe9, 0x79, 0x34, 0xf0, 0x9d, 0xee, 0xda, 0x9e, 0x49, 0x8e, 0xf0, 0x35, 0xcd, 0xf2, 0x00, 0x68, 0x93, 0xeb, 0x72, 0xd8, 0x5b, 0x5d, 0x0f, 0xb0, 0x96, 0xb9, 0x46, 0xd5, 0xa5, 0xb1, 0x77, 0x42, 0xbd, 0x9d, 0xbd, 0xb9, 0x06, 0x50, 0x64, 0x8a, 0x52, 0xac, 0x24, 0x0f, 0x28, 0x52, 0x44, 0x03, 0x73, 0x6b, 0xeb, 0xd4, 0xec, 0x7d, 0x7b, 0x7d, 0x3a, 0x8e, 0xf9, 0xe4, 0x4a, 0x9d, 0xa7, 0xa5, 0xf7, 0xe8, 0x51, 0x1e, 0x48, 0xb8, 0x10, 0xd1, 0x48, 0xfc, 0x09, 0x3b, 0xba, 0xeb, 0x21, 0xe1, 0x24, 0x4a, 0x02, 0x5a, 0x69, 0xc7, 0xcd, 0x32, 0x2c, 0x19, 0x72, 0x40, 0x2a, 0x59, 0x91, 0xbd, 0x68, 0x59, 0x90, 0xb9, 0xf9, 0x77, 0x56, 0x2c, 0x0b, 0x46, 0x4a, 0x86, 0x92, 0xa3, 0x20, 0x2e, 0x31, 0xa8, 0x62, 0x67, 0x4a, 0xea, 0xa0, 0x2c, 0x78, 0x32, 0x28, 0x14, 0xd3, 0xdc, 0x1d, 0xc5, 0x40, 0x79, 0x65, 0x1b, 0x38, 0x3d, 0xb3, 0xe4, 0xd9, 0x0b, 0x66, 0x0b, 0x40, 0xab, 0xdd, 0x74, 0xda, 0x57, 0xf4, 0x84, 0x89, 0xd4, 0xc8, 0x59, 0x6d, 0x16, 0x65, 0x84, 0x8b, 0x4c, 0x70, 0xa1, 0x94, 0x84, 0xb8, 0x2a, 0xdc, 0x0b, 0x69, 0x42, 0x13, 0x38, 0xa7, 0x74, 0x42, 0x1a, 0xf0, 0x92, 0x8b, 0x33, 0xa3, 0xc4, 0x25, 0xf9, 0x1d, 0x02, 0xa5, 0x72, 0xf9, 0x0f, 0xc3, 0x57, 0xc2, 0xbe, 0xdb, 0x7b, 0x97, 0x37, 0x00, 0xf7, 0xe1, 0xdb, 0xcb, 0xad, 0xff, 0xd2, 0xa1, 0x74, 0x7d, 0x0e, 0x3c, 0x08, 0x60, 0x84, 0x7c, 0x1c, 0x33, 0x5d, 0x30, 0x0b, 0x3c, 0xdc, 0x19, 0xb0, 0xc2, 0x06, 0xb8, 0xc6, 0x9d, 0x91, 0xfe, 0xe0, 0x0c, 0x9d, 0x05, 0x87, 0x32, 0xc4, 0x5e, 0x7c, 0x97, 0xe1, 0x7b, 0x27, 0xbe, 0xdd, 0xf8, 0xde, 0x4e, 0x90, 0xad, 0x5d, 0xe8, 0x7a, 0x8a, 0xe5, 0x51, 0x0c, 0x3c, 0xed, 0x6c, 0x95, 0xdd, 0xb4, 0x1f, 0x75, 0xa5, 0xec, 0x56, 0x8a, 0xb4, 0xe7, 0x12, 0xdd, 0xaa, 0x04, 0x00, 0x69, 0x36, 0xac, 0x26, 0x30, 0xde, 0x06, 0xf9, 0xb2, 0x1f, 0xe7, 0x51, 0x9e, 0x5d, 0x55, 0xd3, 0x45, 0x5a, 0x2e, 0xc6, 0x2e, 0xc4, 0xd8, 0x55, 0x11, 0x2e, 0x6b, 0xb6, 0xb9, 0x1f, 0xcd, 0xfe, 0x4d, 0x0c, 0x23, 0x96, 0x14, 0xd7, 0x9e, 0xcf, 0x1c, 0xd9, 0x12, 0xcf, 0xd0, 0xb2, 0x93, 0x77, 0xe2, 0x71, 0x51, 0x0e, 0x05, 0xa8, 0x6f, 0x4d, 0x45, 0xde, 0x38, 0x2a, 0x72, 0x62, 0x22, 0x42, 0xe3, 0x9d, 0x5d, 0x34, 0x86, 0x22, 0x05, 0x76, 0x96, 0x34, 0x41, 0x27, 0xca, 0x88, 0x57, 0x91, 0x02, 0xcf, 0x32, 0x7b, 0x95, 0x0b, 0xee, 0x40, 0xef, 0xea, 0x79, 0xf3, 0xcd, 0x38, 0x76, 0x57, 0x5c, 0x06, 0x75, 0xd1, 0xb5, 0x43, 0xa0, 0x53, 0x1d, 0xeb, 0x89, 0x6f, 0x05, 0x0b, 0x87, 0xf4, 0x79, 0xda, 0xb5, 0xe7, 0x46, 0xbf, 0x94, 0x2f, 0xd2, 0xff, 0x69, 0xb2, 0x8f, 0xc4, 0xdc, 0xb9, 0x11, 0xb9, 0x4f, 0x45, 0x9e, 0xd9, 0xc7, 0xac, 0x79, 0xd2, 0x31, 0x87, 0x0b, 0xe7, 0x7a, 0x04, 0x97, 0xae, 0xfc, 0x3b, 0x81, 0x28, 0xc7, 0x5d, 0x69, 0x5e, 0x10, 0x3e, 0xfb, 0xd7, 0x23, 0x7f, 0x3d, 0x82, 0x35, 0x9f, 0x7a, 0xf4, 0x08, 0xb6, 0xfb, 0xd9, 0x48, 0x4d, 0x75, 0xe0, 0x0e, 0x0e, 0xab, 0x69, 0x24, 0xd7, 0x59, 0xff, 0x38, 0x57, 0xec, 0x23, 0x67, 0x85, 0xe5, 0x04, 0x4f, 0xb0, 0x5e, 0x20, 0x9e, 0x6d, 0xa3, 0x19, 0xe8, 0x48, 0xed, 0x27, 0x2d, 0x08, 0x5f, 0x08, 0x9f, 0xf5, 0x25, 0xf4, 0x76, 0x37, 0xc0, 0xe0, 0x0e, 0x63, 0xa2, 0xae, 0x09, 0x9a, 0x30, 0xae, 0xbf, 0xaa, 0x87, 0xce, 0xbe, 0x32, 0x24, 0x9d, 0x40, 0x4d, 0x57, 0x9c, 0x19, 0xdb, 0x53, 0x16, 0x1a, 0xd6, 0xc7, 0x42, 0xd1, 0x3e, 0x26, 0xbb, 0x14, 0xef, 0x38, 0xc8, 0x9f, 0xed, 0x3c, 0x4b, 0xa4, 0x7d, 0x67, 0x81, 0x50, 0xc0, 0x08, 0xa3, 0xd8, 0xb7, 0xf2, 0x9d, 0x95, 0x81, 0x50, 0xd1, 0xd5, 0x0c, 0x8d, 0x26, 0x50, 0x51, 0xea, 0x2a, 0xf1, 0x2a, 0x76, 0xf5, 0xd4, 0xfd, 0xa2, 0xe2, 0x02, 0xa8, 0x7e, 0xf3, 0x4a, 0x7d, 0x8e, 0xd1, 0xf1, 0x93, 0xd7, 0x26, 0x54, 0x42, 0x3b, 0x3e, 0x8b, 0x37, 0xad, 0x46, 0xce, 0xb3, 0x84, 0x4e, 0x5f, 0xb3, 0xff, 0x12, 0xf5, 0xab, 0xb5, 0xf8, 0xac, 0xb6, 0xa8, 0x24, 0x4e, 0xf3, 0x59, 0x25, 0x72, 0x94, 0x53, 0x4c, 0x47, 0x41, 0x0d, 0xcc, 0xd3, 0x8e, 0x7a, 0xc9, 0x6a, 0x7c, 0xd6, 0xc6, 0xec, 0x27, 0x8c, 0x70, 0x32, 0x70, 0xb2, 0x3b, 0x8e, 0x23, 0x2a, 0x5c, 0x7b, 0xfe, 0x9e, 0x67, 0x88, 0x51, 0x84, 0xcc, 0x03, 0xa5, 0x79, 0x65, 0xa1, 0x18, 0xa9, 0xf5, 0x94, 0x37, 0x1b, 0xeb, 0xbd, 0x57, 0x1c, 0x8b, 0x5a, 0x07, 0x77, 0xa6, 0x87, 0x0f, 0xc0, 0x0f, 0x7f, 0xf8, 0x43, 0x3e, 0x18, 0x46, 0x10, 0xca, 0x20, 0x04, 0x02, 0x81, 0x63, 0x01, 0xe1, 0xe5, 0xea, 0x90, 0x33, 0xe4, 0x79, 0x3b, 0x3a, 0xeb, 0x40, 0x27, 0x56, 0xec, 0x96, 0x2d, 0xba, 0x4f, 0xb3, 0xd9, 0x4e, 0x0b, 0x54, 0xe1, 0xf8, 0x5f, 0x83, 0x63, 0x64, 0x6d, 0xc5, 0xa5, 0xf0, 0x0d, 0x83, 0x19, 0x9a, 0x8c, 0x66, 0xf0, 0xb3, 0x5d, 0xef, 0x2b, 0xa7, 0x5d, 0x84, 0x3c, 0x61, 0x7a, 0xcc, 0x1e, 0xd9, 0xb9, 0x8d, 0x3b, 0xeb, 0xa9, 0x91, 0x4a, 0x49, 0x27, 0x41, 0x2b, 0x90, 0x6f, 0x5f, 0x5f, 0x3b, 0xc1, 0xc6, 0x49, 0x27, 0x9d, 0x14, 0x3c, 0x76, 0xc8, 0x0f, 0x02, 0xb7, 0xfe, 0x35, 0x13, 0x9c, 0xf9, 0x11, 0x5d, 0x4f, 0xe3, 0x55, 0x0b, 0x89, 0xea, 0xc0, 0x07, 0xbb, 0xbb, 0x04, 0x91, 0x17, 0x12, 0xdd, 0x2b, 0x16, 0xab, 0xf6, 0xac, 0xf0, 0x9c, 0xd1, 0x35, 0x71, 0x67, 0xbf, 0x1e, 0xe8, 0x41, 0xca, 0xa8, 0xed, 0xa1, 0xbd, 0xca, 0x1c, 0x78, 0x5e, 0x8f, 0xcb, 0xe5, 0x20, 0xe5, 0x82, 0xb9, 0x6b, 0xcc, 0xc5, 0x7f, 0x3d, 0x20, 0xdb, 0x07, 0xb3, 0xd9, 0x67, 0xb3, 0x24, 0x67, 0x94, 0xc9, 0x72, 0x06, 0xc9, 0x3e, 0x90, 0x70, 0xbe, 0xea, 0xd1, 0x8e, 0xc2, 0x93, 0x6b, 0x8a, 0x2e, 0xa2, 0xb4, 0xe1, 0x80, 0xfc, 0xc5, 0x8e, 0xb7, 0xd6, 0x90, 0xd5, 0x31, 0x59, 0x7f, 0x8d, 0x3b, 0x6d, 0xa9, 0x04, 0x2b, 0x52, 0x41, 0xba, 0x4c, 0x05, 0xd9, 0x8c, 0x0a, 0xb2, 0xe3, 0xa8, 0x20, 0x3b, 0x4a, 0x05, 0xd9, 0x11, 0x2a, 0x40, 0xce, 0x9c, 0x8d, 0x54, 0x80, 0x9c, 0x39, 0xb0, 0x3c, 0x90, 0x0d, 0xa3, 0xd8, 0xb7, 0xf2, 0x9d, 0x35, 0x81, 0xe5, 0xf9, 0x9d, 0xa0, 0xf9, 0xf3, 0xcb, 0x12, 0x1d, 0x60, 0xce, 0x1a, 0x5f, 0x98, 0x4e, 0x02, 0x44, 0x39, 0xa2, 0x44, 0xb2, 0xba, 0x95, 0xac, 0xf7, 0x3f, 0xad, 0x43, 0xdf, 0x92, 0xc8, 0xf9, 0xc3, 0xeb, 0xc6, 0x46, 0x66, 0xe8, 0xa3, 0x35, 0x51, 0x58, 0x78, 0xb9, 0x0e, 0x66, 0xb9, 0x0e, 0x3a, 0x94, 0x12, 0xf2, 0xd9, 0x39, 0xc2, 0x64, 0x5b, 0x6d, 0x81, 0x1a, 0x84, 0xd2, 0xc2, 0xe6, 0x73, 0x11, 0xbe, 0x85, 0x76, 0x67, 0xdc, 0x86, 0xa3, 0x75, 0xa1, 0x75, 0x3e, 0x74, 0x23, 0x45, 0x15, 0x12, 0x4f, 0xb7, 0xf0, 0xf2, 0xf9, 0x58, 0x19, 0x64, 0x17, 0xc5, 0x9f, 0x96, 0x62, 0x59, 0x26, 0x81, 0x93, 0x85, 0x27, 0x61, 0x1e, 0xd2, 0x39, 0xa8, 0x52, 0x78, 0x9f, 0x30, 0x09, 0x0a, 0x68, 0x17, 0x16, 0x3b, 0x27, 0x54, 0x8a, 0xcb, 0x4e, 0x0f, 0xd4, 0x72, 0x23, 0x20, 0x6d, 0xc4, 0x98, 0x53, 0x6f, 0x19, 0x93, 0x1f, 0x01, 0xb3, 0x59, 0x78, 0x28, 0x6a, 0xcf, 0x22, 0xe7, 0x6f, 0xad, 0x92, 0xcb, 0x97, 0x30, 0x02, 0xaa, 0x4d, 0xae, 0x05, 0xa6, 0xc0, 0x5a, 0xf0, 0x72, 0x2c, 0xc5, 0x08, 0x88, 0x99, 0xc3, 0x62, 0x29, 0xe4, 0x58, 0x89, 0xc3, 0x61, 0x71, 0xd7, 0x86, 0xc5, 0x52, 0xca, 0xb1, 0x94, 0xc3, 0x61, 0x71, 0x47, 0x28, 0x9c, 0xed, 0xc0, 0xfd, 0x97, 0x99, 0x2f, 0x3b, 0x82, 0x8e, 0x97, 0x4b, 0x82, 0x64, 0x03, 0xc3, 0xec, 0x6b, 0x14, 0x3e, 0x5e, 0xd4, 0xb0, 0x15, 0x88, 0xf0, 0x03, 0x01, 0xda, 0xe7, 0x12, 0x08, 0x0e, 0xab, 0xe9, 0xa8, 0x11, 0x39, 0x86, 0x10, 0x27, 0x39, 0x23, 0xb0, 0xa1, 0xa6, 0xb6, 0xbe, 0xb6, 0x3d, 0x1a, 0x67, 0x0e, 0xe6, 0x97, 0x97, 0x8d, 0x54, 0x27, 0x74, 0xb3, 0x9d, 0xf2, 0x46, 0xd1, 0x34, 0x2c, 0x3e, 0xad, 0xcd, 0x39, 0xa0, 0x44, 0x57, 0x2e, 0xc1, 0x25, 0xe9, 0x8b, 0xa5, 0x33, 0x08, 0x19, 0x9e, 0x13, 0x28, 0x91, 0x39, 0xca, 0x48, 0xff, 0x77, 0xc4, 0x69, 0x03, 0x85, 0x51, 0x6d, 0xe0, 0xdb, 0xb2, 0x36, 0x30, 0x15, 0x25, 0xf0, 0xfb, 0x64, 0x3a, 0x52, 0xc4, 0xd1, 0x91, 0x24, 0x73, 0xd3, 0xf9, 0x9f, 0x26, 0x79, 0x8d, 0xc1, 0x02, 0x85, 0x54, 0xbe, 0x8f, 0x4f, 0x44, 0xa4, 0x2f, 0xd8, 0x87, 0x79, 0x94, 0xfc, 0x0f, 0xa0, 0x77, 0xca, 0x21, 0x9c, 0x44, 0xe5, 0x1f, 0x77, 0xca, 0x90, 0xeb, 0x51, 0xd3, 0x54, 0x6b, 0x02, 0x74, 0xef, 0x86, 0x57, 0x6f, 0x2f, 0x62, 0x3b, 0xa1, 0x34, 0x6c, 0xad, 0x08, 0xf3, 0x88, 0x40, 0x40, 0xcd, 0xc8, 0xfc, 0x9b, 0x3e, 0x4f, 0xbe, 0xb3, 0xc8, 0xa3, 0xfc, 0xeb, 0x61, 0x3a, 0xb3, 0x00, 0x75, 0x0f, 0xab, 0x60, 0x86, 0xc5, 0xad, 0x46, 0xe4, 0x38, 0x4b, 0xa4, 0xfd, 0x53, 0xfd, 0xdb, 0xa1, 0x89, 0x56, 0x25, 0x11, 0x3a, 0xd3, 0x09, 0x76, 0x05, 0x1e, 0x94, 0x75, 0xc4, 0x61, 0x73, 0xa6, 0x82, 0xa4, 0x23, 0xc6, 0xef, 0x8c, 0x8f, 0xd8, 0xf5, 0xc4, 0x7c, 0x6e, 0x36, 0x7f, 0xc1, 0xf6, 0xe7, 0xc4, 0x3f, 0x63, 0xfb, 0x43, 0xda, 0x92, 0x95, 0xd6, 0x82, 0x98, 0x36, 0xc7, 0xce, 0x6f, 0x6a, 0x96, 0xce, 0x6f, 0x62, 0x67, 0x35, 0xd3, 0xd9, 0x4d, 0x6a, 0x7d, 0xc4, 0x4f, 0x3a, 0xbd, 0x69, 0x37, 0x52, 0x89, 0x82, 0x59, 0x4c, 0x01, 0xec, 0x70, 0x06, 0x5a, 0xf0, 0xd7, 0x40, 0x33, 0x4a, 0x26, 0xbd, 0x46, 0x19, 0x02, 0x40, 0x95, 0x95, 0xed, 0x3f, 0x7b, 0xad, 0xd5, 0xc2, 0x4f, 0x1f, 0x08, 0x77, 0xb0, 0xb9, 0x37, 0x92, 0x7e, 0x9a, 0x91, 0x5f, 0x09, 0xf6, 0x7f, 0x8f, 0x85, 0xba, 0x36, 0x9a, 0x6d, 0x3e, 0x5e, 0x70, 0xea, 0xa6, 0xd3, 0x3c, 0x69, 0x74, 0x0d, 0xa6, 0x84, 0xd6, 0x52, 0x35, 0x5b, 0x17, 0x3e, 0xb2, 0xb0, 0x0d, 0xb4, 0x9e, 0x54, 0xcd, 0xd6, 0x86, 0x8e, 0x86, 0x79, 0x90, 0x46, 0x38, 0xca, 0xb5, 0xd5, 0xae, 0x14, 0x15, 0xb9, 0x9d, 0xd8, 0x6e, 0x2c, 0xc7, 0x28, 0xa4, 0x3d, 0x61, 0x2d, 0xad, 0x6d, 0xa2, 0xbe, 0x78, 0x9d, 0xcd, 0x61, 0xe9, 0x54, 0x93, 0xb0, 0x47, 0xfc, 0x80, 0xe4, 0x06, 0x8c, 0x9d, 0xb0, 0xa1, 0x4f, 0xd4, 0xe6, 0x76, 0x86, 0xc3, 0xa2, 0x9a, 0xed, 0xf8, 0x25, 0x08, 0xbc, 0x9f, 0xd7, 0x27, 0xcb, 0xf5, 0x4a, 0x27, 0x9f, 0x70, 0x98, 0x59, 0x22, 0x68, 0x48, 0xf7, 0xa2, 0xfd, 0x26, 0x6c, 0x35, 0x2e, 0x49, 0xb2, 0x06, 0xbe, 0xe9, 0xc7, 0x72, 0xb5, 0xe8, 0x80, 0x4e, 0x83, 0x6e, 0x57, 0xc9, 0x7e, 0x35, 0xb4, 0x3f, 0x42, 0xb0, 0x19, 0x50, 0x95, 0x44, 0xd9, 0x27, 0x2c, 0xd3, 0x4d, 0x12, 0x96, 0x41, 0xac, 0x5a, 0xe3, 0xec, 0xf2, 0xd8, 0x7c, 0xfa, 0x91, 0x36, 0xa1, 0x0c, 0xa7, 0x46, 0x6c, 0xbd, 0x2c, 0x7d, 0x64, 0xcf, 0xde, 0xa3, 0xe8, 0xa3, 0x30, 0x4c, 0x82, 0x0c, 0xdd, 0x34, 0x9f, 0x3e, 0x6e, 0xbf, 0x39, 0x42, 0x14, 0x12, 0xa4, 0xdd, 0x29, 0x64, 0xc9, 0x4c, 0x73, 0x15, 0xf2, 0x2a, 0xa3, 0xd1, 0x9f, 0x68, 0x2e, 0x96, 0xcb, 0x34, 0x47, 0xb0, 0x1f, 0xdd, 0x6f, 0xb4, 0xf6, 0x68, 0x74, 0x36, 0x31, 0xc7, 0xd0, 0x08, 0xc6, 0x37, 0xff, 0xf0, 0xe6, 0x1f, 0x8a, 0x2e, 0x01, 0x87, 0x63, 0xfa, 0x98, 0xdd, 0xcf, 0x80, 0xca, 0x93, 0xa5, 0x73, 0x0a, 0x7c, 0xcc, 0x06, 0xea, 0x8e, 0xbd, 0x50, 0x60, 0x04, 0x7b, 0x8e, 0x91, 0x6b, 0xe3, 0xc4, 0x54, 0x5d, 0x52, 0x9b, 0x04, 0xcb, 0xa5, 0xa3, 0xdd, 0xa7, 0xfb, 0xec, 0x3c, 0x9b, 0x65, 0x49, 0xa4, 0x73, 0x89, 0x63, 0x3b, 0x1d, 0xc8, 0xee, 0x39, 0xee, 0x44, 0x3d, 0x1c, 0x41, 0x2c, 0xad, 0x28, 0xa5, 0xc6, 0x9d, 0xc3, 0x27, 0xcf, 0x4c, 0x44, 0x4f, 0xd6, 0x1b, 0x71, 0x66, 0xdf, 0x57, 0xc4, 0x46, 0x1d, 0xcb, 0x48, 0x36, 0xb5, 0x7a, 0xd9, 0xa6, 0x16, 0x25, 0x9c, 0x0c, 0x3a, 0xe3, 0x43, 0x3a, 0xb9, 0x9a, 0x6f, 0x66, 0x7a, 0xb4, 0x89, 0xed, 0xee, 0x6d, 0xae, 0xf8, 0x20, 0xbc, 0x81, 0xe6, 0x2a, 0x87, 0x2e, 0x47, 0x6c, 0x65, 0x79, 0xa3, 0x4e, 0x13, 0xdb, 0x41, 0x6a, 0xa2, 0x3d, 0xa9, 0x20, 0x98, 0x20, 0xa3, 0x2a, 0xc0, 0x6c, 0xc7, 0xf3, 0x8c, 0x6c, 0xcd, 0x92, 0x59, 0x02, 0xed, 0x92, 0x53, 0x33, 0x89, 0x8d, 0xb8, 0x93, 0x3f, 0x91, 0xed, 0xb6, 0x78, 0x8a, 0xd1, 0x51, 0x50, 0x0a, 0x91, 0xf7, 0x6c, 0xd1, 0xb9, 0x90, 0x26, 0x10, 0x58, 0xc8, 0x32, 0xb1, 0x12, 0xf3, 0x96, 0xe8, 0x76, 0xa5, 0x45, 0x33, 0x9d, 0x4e, 0xe1, 0x37, 0x46, 0xe8, 0x7a, 0x58, 0xcc, 0x95, 0xa2, 0x0e, 0x63, 0xb2, 0x19, 0xe6, 0xd7, 0x1e, 0x95, 0xe7, 0x9d, 0x29, 0x4e, 0x5a, 0x5c, 0x9c, 0xc7, 0xc8, 0x82, 0x12, 0xe5, 0x5a, 0x4f, 0x34, 0xe6, 0xa6, 0xb8, 0x98, 0xf1, 0xd0, 0x7e, 0x2a, 0x1e, 0x8f, 0xc6, 0xf9, 0x79, 0x2c, 0x8e, 0xd7, 0x1c, 0xf5, 0x7d, 0x3a, 0xce, 0x37, 0x3d, 0x5a, 0xc6, 0x5f, 0x7e, 0x09, 0xbc, 0x67, 0xc5, 0x6e, 0xf6, 0xde, 0x39, 0xac, 0xa6, 0xda, 0xb8, 0x18, 0xbf, 0x11, 0x21, 0x5c, 0xc7, 0xd6, 0xde, 0x8f, 0x15, 0x0d, 0x0c, 0x69, 0x34, 0xdd, 0x65, 0x45, 0x35, 0x7c, 0x8b, 0xc0, 0xde, 0xd0, 0x6c, 0xd5, 0x74, 0x17, 0x97, 0x94, 0x55, 0x7b, 0x6b, 0x16, 0x88, 0xca, 0xee, 0xdf, 0xf6, 0x6e, 0x0f, 0xfb, 0x14, 0x28, 0x99, 0xd6, 0x88, 0x79, 0x9a, 0x6e, 0xba, 0x37, 0xc8, 0x3b, 0x56, 0xd3, 0xbd, 0xd0, 0xb3, 0x10, 0xa5, 0x67, 0x4d, 0xf7, 0xf4, 0xea, 0x12, 0xf0, 0x14, 0xc4, 0x41, 0xde, 0x27, 0xfa, 0xe3, 0xbe, 0xf6, 0x8b, 0x30, 0x34, 0x10, 0xf7, 0x7d, 0x50, 0xac, 0x19, 0x56, 0xef, 0xb2, 0xb8, 0xaf, 0xd7, 0xc5, 0xfc, 0x68, 0xcd, 0xfe, 0x53, 0x2a, 0xb9, 0xc8, 0xac, 0x55, 0x8b, 0x06, 0x6e, 0x36, 0x8d, 0xa8, 0xe1, 0x7f, 0x8a, 0x9a, 0xf8, 0xfa, 0xba, 0xd6, 0x46, 0xd6, 0x71, 0x3c, 0x99, 0xb2, 0x3f, 0x72, 0x76, 0xa4, 0x6e, 0x31, 0x6e, 0x7d, 0xe7, 0xed, 0xbb, 0x68, 0x16, 0xd3, 0x2a, 0x02, 0x7f, 0xdc, 0x19, 0x68, 0xc5, 0x31, 0x5e, 0x67, 0x62, 0xa7, 0x4c, 0xef, 0x8c, 0xec, 0x43, 0x66, 0xb6, 0x36, 0x4f, 0x90, 0xaf, 0xec, 0x13, 0x32, 0xd1, 0x9e, 0xf9, 0xb3, 0xaf, 0xbd, 0x11, 0xa3, 0x3b, 0x23, 0x60, 0xb8, 0x36, 0xad, 0x30, 0xbc, 0xe1, 0xf8, 0x8f, 0xda, 0x9b, 0xe5, 0xf5, 0x28, 0x3a, 0x4f, 0xa5, 0x92, 0xf6, 0x7a, 0x29, 0x43, 0xe1, 0x70, 0xd8, 0x18, 0xf1, 0x45, 0xdd, 0xdc, 0x88, 0xcf, 0x86, 0xb8, 0x36, 0x48, 0x8f, 0x96, 0x8e, 0xe8, 0x74, 0xbf, 0x54, 0x3a, 0x3a, 0x65, 0x4e, 0x9a, 0x43, 0x42, 0xc9, 0x7a, 0x80, 0xfa, 0xe3, 0x4f, 0x0e, 0x47, 0xf7, 0x36, 0x87, 0x76, 0x4b, 0xa3, 0xaf, 0x86, 0xc5, 0x40, 0x4a, 0xff, 0xec, 0x64, 0xd5, 0x9a, 0x28, 0x14, 0xb2, 0x97, 0xe9, 0x8c, 0xd5, 0x91, 0x1b, 0xc0, 0x3a, 0xf2, 0x54, 0x47, 0xee, 0x2a, 0x5b, 0x69, 0x30, 0x99, 0x92, 0x99, 0x95, 0x9e, 0x4e, 0x5a, 0x25, 0x40, 0x1e, 0x9a, 0x58, 0x31, 0xf0, 0xd9, 0xe1, 0xd8, 0xcd, 0x12, 0xdc, 0x12, 0xd4, 0xe7, 0x37, 0xc4, 0x42, 0x5d, 0x1b, 0xcc, 0x36, 0xda, 0x35, 0xe3, 0xe3, 0x8b, 0xb1, 0x0f, 0x49, 0xe7, 0xb2, 0xc9, 0x3b, 0xcb, 0x6b, 0x04, 0x9b, 0x79, 0x3e, 0x72, 0xec, 0xe7, 0x65, 0x8e, 0x9d, 0xad, 0x79, 0x5e, 0xe2, 0xd8, 0x1e, 0x7d, 0xb4, 0x3c, 0x09, 0xae, 0x3d, 0x9f, 0x5f, 0x8e, 0x95, 0x07, 0x06, 0xb1, 0x3c, 0x09, 0x54, 0x1e, 0xf8, 0x58, 0x8a, 0x63, 0x49, 0xc7, 0x18, 0x9b, 0xa3, 0xad, 0x05, 0x70, 0x5c, 0xc8, 0x06, 0xad, 0x26, 0xb0, 0x60, 0xd1, 0xc2, 0x46, 0xef, 0xe2, 0x3a, 0x93, 0x26, 0x50, 0xdf, 0x3a, 0x6f, 0x91, 0xb7, 0xb6, 0x0e, 0xf5, 0x93, 0xb9, 0x2d, 0x8d, 0x0b, 0xa8, 0x45, 0x44, 0x3f, 0x8e, 0xc7, 0x2d, 0x0b, 0xdb, 0xbc, 0x6e, 0x8c, 0xd7, 0xda, 0xde, 0x48, 0xfb, 0x60, 0x45, 0x8f, 0x26, 0xb0, 0xb0, 0x75, 0x51, 0x8b, 0x37, 0x8f, 0xce, 0xa3, 0xf4, 0x35, 0xce, 0x6b, 0xf3, 0xf8, 0x44, 0x3b, 0xfa, 0x61, 0xd9, 0xbc, 0xe8, 0xd3, 0xd6, 0xd0, 0xd1, 0xe6, 0x99, 0x23, 0xaa, 0xd8, 0xfc, 0xfd, 0x5f, 0xc5, 0xa9, 0xec, 0x7d, 0x56, 0xcc, 0x63, 0xef, 0xf7, 0xc5, 0x6c, 0xf6, 0xfe, 0x58, 0x34, 0xb0, 0xf7, 0x0d, 0x71, 0x2c, 0xbd, 0x5f, 0x4f, 0x10, 0xd3, 0xd9, 0x3b, 0x49, 0x9a, 0xff, 0x7f, 0x7d, 0xb4, 0x34, 0xff, 0xff, 0xfa, 0xdd, 0x72, 0xd9, 0xc9, 0x96, 0xe5, 0x74, 0xb4, 0xec, 0x19, 0xd1, 0x5a, 0x93, 0xd5, 0xcc, 0xf5, 0x68, 0xad, 0x95, 0x58, 0x67, 0x05, 0x58, 0x87, 0x8d, 0x5c, 0xd8, 0xda, 0x37, 0x66, 0x4a, 0x36, 0x54, 0x37, 0xc8, 0x1e, 0x32, 0x8d, 0xb5, 0xaa, 0x13, 0xf5, 0x9d, 0x8c, 0xa2, 0x81, 0x81, 0x3d, 0xaa, 0x89, 0x34, 0x8a, 0x79, 0xc6, 0xc6, 0xe1, 0x31, 0x4a, 0xd1, 0x5e, 0xbd, 0x8c, 0xc3, 0xac, 0xb8, 0xfc, 0xd6, 0x8e, 0xcc, 0x8d, 0x9d, 0xde, 0x57, 0x18, 0x56, 0xb1, 0x55, 0x9c, 0x87, 0x69, 0x57, 0x28, 0xf2, 0xe6, 0x43, 0x8e, 0xf7, 0x04, 0x2b, 0x6a, 0x43, 0x95, 0xc8, 0x99, 0xab, 0x40, 0x83, 0xbf, 0x35, 0x28, 0x83, 0xa3, 0x4c, 0x0e, 0x19, 0x96, 0x6a, 0xc8, 0x42, 0x4e, 0x6d, 0xa6, 0x59, 0x43, 0x9a, 0x3d, 0x44, 0xa8, 0xf9, 0x54, 0xd6, 0xd7, 0xc7, 0xa3, 0xac, 0x25, 0x96, 0x22, 0xcf, 0x64, 0x2b, 0x11, 0xe7, 0x1e, 0xf4, 0x49, 0xf3, 0x99, 0x9e, 0x3c, 0x26, 0x45, 0x31, 0xbf, 0x72, 0x05, 0xd9, 0x6b, 0x14, 0x7d, 0x06, 0xe7, 0x6a, 0x3c, 0xb4, 0x3a, 0xee, 0x45, 0x19, 0x84, 0x4e, 0xde, 0x47, 0xcd, 0x4c, 0xdb, 0xf6, 0xb9, 0xa8, 0x31, 0xd0, 0xdd, 0x08, 0x6a, 0x9a, 0x09, 0xad, 0x65, 0x3b, 0x2f, 0x35, 0x64, 0xc9, 0x96, 0x8f, 0xe3, 0x9b, 0x24, 0xc9, 0xa5, 0xc5, 0x3f, 0x38, 0xa2, 0xd7, 0x4a, 0x3b, 0xf5, 0xd9, 0x6e, 0x7a, 0x95, 0xc0, 0xb5, 0x69, 0xce, 0x6e, 0xd5, 0x15, 0x15, 0x7d, 0xa4, 0xba, 0x4d, 0xe0, 0xd2, 0x0a, 0x21, 0xe5, 0xec, 0xd6, 0xfe, 0x1e, 0x7c, 0xdf, 0x75, 0xf6, 0x99, 0xfe, 0xa0, 0x7e, 0x1c, 0xc5, 0x63, 0x96, 0xd1, 0xb4, 0x57, 0xdf, 0x08, 0x69, 0xba, 0xf9, 0xa0, 0xa2, 0xd9, 0xe7, 0x31, 0x21, 0x15, 0xb8, 0x03, 0xf4, 0x35, 0x26, 0x48, 0xae, 0xf1, 0x36, 0x48, 0xa3, 0xd8, 0x88, 0x85, 0x93, 0xa4, 0x17, 0xa2, 0x6c, 0x54, 0x8b, 0xe3, 0xea, 0x6c, 0xdd, 0x44, 0x58, 0x6c, 0x69, 0x84, 0x3c, 0xc8, 0x33, 0x4d, 0x44, 0x1d, 0xbb, 0x15, 0xf2, 0x8e, 0xbe, 0x6a, 0x9c, 0x08, 0xed, 0x82, 0x02, 0x7d, 0x1f, 0x85, 0x02, 0xf3, 0x44, 0x30, 0x19, 0x94, 0xb4, 0x72, 0x34, 0x34, 0xb0, 0x6b, 0x69, 0xbd, 0xc6, 0x90, 0x48, 0x6b, 0xd6, 0x9c, 0x72, 0xe3, 0x32, 0x1c, 0xa9, 0x01, 0xe3, 0x4c, 0x45, 0x0d, 0xa6, 0x11, 0x72, 0xa0, 0x92, 0xfa, 0x15, 0xc7, 0xbf, 0xf5, 0x02, 0xe4, 0x59, 0x4a, 0x61, 0x6a, 0xa6, 0xd5, 0x11, 0xce, 0xb2, 0x3a, 0x00, 0xc7, 0xe2, 0x95, 0x0d, 0xfc, 0xd9, 0x15, 0x08, 0xd3, 0xbf, 0xfb, 0x05, 0x28, 0xa8, 0x57, 0x5b, 0x4a, 0xa0, 0x40, 0x54, 0x64, 0x29, 0x44, 0x5a, 0x35, 0xc5, 0x14, 0x9b, 0x5e, 0x80, 0xa9, 0xe8, 0x47, 0xb3, 0xb8, 0x53, 0x4b, 0x2f, 0x0e, 0x0d, 0x59, 0x9c, 0x60, 0xcf, 0x4e, 0xc2, 0x56, 0xca, 0x7b, 0x73, 0x7f, 0xc6, 0x37, 0x54, 0xb0, 0x57, 0x81, 0xf4, 0x7d, 0x63, 0xdc, 0x42, 0x55, 0x18, 0xca, 0xf7, 0x58, 0x80, 0x2c, 0x34, 0x3e, 0xce, 0x1a, 0xb3, 0x57, 0x8b, 0xef, 0x8b, 0xee, 0x55, 0xe8, 0x32, 0xd2, 0xbe, 0x23, 0x78, 0xbb, 0xf4, 0x02, 0xf0, 0xee, 0x55, 0x66, 0xd5, 0xcc, 0x65, 0xa8, 0xbd, 0x27, 0x4d, 0x43, 0x0d, 0x7e, 0xfa, 0x05, 0x18, 0x55, 0x7c, 0x01, 0x94, 0x26, 0xd5, 0xac, 0xa5, 0xb5, 0x3d, 0x74, 0x02, 0x37, 0xea, 0x8b, 0xd9, 0x28, 0xef, 0xe5, 0x64, 0xa5, 0xed, 0x45, 0x39, 0xc9, 0x33, 0x2b, 0x4b, 0x8b, 0x6f, 0xde, 0x33, 0xcb, 0x58, 0xca, 0x7c, 0x12, 0x3c, 0x35, 0x59, 0xa3, 0xf1, 0xad, 0xf0, 0x54, 0x65, 0xa5, 0xe3, 0x3b, 0xd1, 0x53, 0x99, 0x75, 0x07, 0xbe, 0x95, 0x1e, 0x07, 0xa6, 0xca, 0x66, 0x71, 0x46, 0x79, 0x6c, 0x55, 0x2b, 0xab, 0x56, 0x65, 0xa5, 0xee, 0x1d, 0xe3, 0x29, 0xac, 0x7a, 0x01, 0x72, 0xf0, 0xc9, 0xae, 0xfa, 0x51, 0xd5, 0xa3, 0x55, 0x2b, 0xaa, 0x96, 0x56, 0xf5, 0xfc, 0xea, 0x0a, 0x4c, 0x6d, 0xd8, 0x2c, 0xea, 0xcc, 0x16, 0xc8, 0xd1, 0x97, 0x89, 0x99, 0x7a, 0x87, 0x98, 0xae, 0x2f, 0x15, 0x53, 0xf5, 0x15, 0x62, 0x8a, 0xde, 0x25, 0xaa, 0xf5, 0xd3, 0x45, 0x25, 0xc1, 0xd2, 0x57, 0xfe, 0xe9, 0x0a, 0x54, 0x21, 0xbe, 0xed, 0xbd, 0x2b, 0x9b, 0xb3, 0x74, 0xe5, 0x5f, 0xb7, 0x43, 0x0b, 0xa6, 0x2d, 0x68, 0xce, 0xcd, 0xb4, 0x6e, 0x0d, 0x67, 0x58, 0xb7, 0x82, 0xa0, 0x16, 0x55, 0x19, 0x4a, 0x51, 0x91, 0x89, 0x75, 0x3e, 0xf0, 0x02, 0x54, 0x1e, 0x0f, 0x61, 0x9b, 0x39, 0x72, 0xa7, 0x18, 0xe5, 0x13, 0xb1, 0x77, 0x85, 0xea, 0x53, 0xaa, 0x83, 0x1e, 0x18, 0xda, 0x25, 0x2a, 0x75, 0xe5, 0x18, 0x9b, 0xd7, 0x95, 0x63, 0x6b, 0xfa, 0x77, 0x04, 0xea, 0x79, 0x21, 0x22, 0x4b, 0x1b, 0x69, 0x0f, 0x9c, 0x85, 0x27, 0x89, 0x18, 0xb9, 0x58, 0x16, 0x51, 0x08, 0xed, 0x5d, 0xe9, 0x0d, 0xd5, 0xf3, 0x7a, 0x70, 0x86, 0xbc, 0x36, 0x94, 0xe3, 0x8d, 0xd8, 0x07, 0x4c, 0xa0, 0x91, 0xb4, 0xd8, 0x3f, 0x6d, 0x93, 0x62, 0xfe, 0x69, 0x2b, 0x68, 0xd1, 0x9d, 0xf6, 0xf8, 0x36, 0x94, 0xa1, 0xf1, 0xfb, 0xf1, 0xad, 0x6c, 0x9e, 0x8e, 0xed, 0x3b, 0x72, 0xa2, 0xdb, 0xa3, 0x1c, 0x4f, 0x37, 0xcd, 0x6a, 0xf5, 0xe3, 0xf4, 0xb2, 0xa5, 0xb0, 0x9e, 0x56, 0x43, 0x4c, 0x60, 0x32, 0xf2, 0x27, 0x43, 0xb4, 0x57, 0xe4, 0xbb, 0x9b, 0x50, 0x5e, 0x38, 0xd7, 0xb6, 0x73, 0x1a, 0xfe, 0x3e, 0xdc, 0x46, 0xeb, 0xc2, 0x06, 0x13, 0x14, 0x6c, 0xdc, 0x06, 0xfe, 0x8d, 0x01, 0x1d, 0x7f, 0x6c, 0x1b, 0x98, 0x94, 0x41, 0xa2, 0xaa, 0x1d, 0x81, 0xba, 0xd9, 0x74, 0x9b, 0x80, 0x85, 0x77, 0xf8, 0x50, 0x66, 0x51, 0xb9, 0x36, 0x60, 0x9e, 0x2d, 0xf8, 0x34, 0xe1, 0x33, 0x0b, 0xd3, 0x39, 0xc9, 0x56, 0xf2, 0xe8, 0x45, 0xb0, 0xb3, 0x1d, 0xc3, 0x90, 0x23, 0xec, 0x0c, 0xd6, 0x29, 0xd6, 0x91, 0xbd, 0x73, 0x91, 0x35, 0x58, 0x1d, 0xf0, 0x5c, 0x66, 0xb3, 0x52, 0x07, 0xc8, 0x9a, 0xfb, 0x8b, 0x61, 0x27, 0x42, 0x06, 0x37, 0xc9, 0xed, 0x74, 0x23, 0x83, 0xc9, 0x04, 0x79, 0x66, 0x2c, 0x47, 0xb6, 0x09, 0xfc, 0xbb, 0x02, 0xf5, 0x4a, 0x67, 0x97, 0x77, 0xa6, 0xc8, 0x1b, 0x60, 0x6d, 0xd7, 0x3d, 0x36, 0xa0, 0x5d, 0x2d, 0x84, 0x9f, 0x0c, 0x26, 0x7d, 0x69, 0x2c, 0x09, 0x96, 0x31, 0xa8, 0x6d, 0x5b, 0x5d, 0x8f, 0x8b, 0x5a, 0x3f, 0xd9, 0xdc, 0xa7, 0x46, 0x7d, 0x36, 0x62, 0x6c, 0x2b, 0x95, 0xe5, 0xd4, 0x72, 0xf2, 0x13, 0x4a, 0x1d, 0xbe, 0xf9, 0xe0, 0xda, 0xf0, 0xe6, 0xfa, 0x37, 0x9f, 0x95, 0x2c, 0x92, 0xa8, 0x67, 0x9c, 0xa0, 0x99, 0xea, 0x62, 0xf0, 0xfb, 0xf8, 0xde, 0xae, 0xfa, 0x5c, 0x76, 0x5b, 0x02, 0xe6, 0xec, 0x87, 0x54, 0xab, 0x0a, 0x26, 0x14, 0x41, 0x99, 0xd6, 0xaa, 0xe2, 0xa4, 0xf3, 0x8d, 0xb0, 0x54, 0x33, 0x2f, 0x3d, 0xf3, 0x52, 0xa0, 0x6f, 0x1b, 0xb8, 0xe9, 0x4e, 0x0c, 0xb6, 0x63, 0x3e, 0xb1, 0x4e, 0x2d, 0xb8, 0x11, 0xcf, 0x48, 0xfb, 0x43, 0x07, 0x05, 0x53, 0xfa, 0x1e, 0xc4, 0x6c, 0xc1, 0xce, 0xc0, 0xbc, 0xf9, 0x08, 0xb7, 0x69, 0x57, 0x60, 0x9e, 0x69, 0x43, 0x97, 0x26, 0x44, 0xbd, 0x67, 0x9e, 0x52, 0xcf, 0x7a, 0x11, 0xad, 0xc9, 0x61, 0x0e, 0x79, 0xfd, 0x5d, 0x91, 0x33, 0x6a, 0x8e, 0x77, 0x4d, 0xb0, 0xa7, 0xef, 0x11, 0x73, 0x74, 0x09, 0x64, 0x77, 0xcb, 0x61, 0x1d, 0xe6, 0x99, 0x98, 0xf5, 0x33, 0xbf, 0x2e, 0xb0, 0x21, 0x70, 0x22, 0xb8, 0xb3, 0xab, 0x9e, 0x37, 0xa0, 0xdc, 0x6b, 0xff, 0x65, 0xff, 0x36, 0xc4, 0xbe, 0x9c, 0xea, 0xcd, 0x6d, 0xe9, 0x7b, 0xa8, 0x0e, 0x92, 0x8d, 0x9f, 0xb4, 0xce, 0x4d, 0x27, 0x08, 0x21, 0xaf, 0xc8, 0x27, 0x2b, 0x87, 0x6f, 0xb1, 0x7d, 0x77, 0x79, 0xdb, 0xb0, 0x85, 0xcf, 0x35, 0x55, 0x96, 0x0f, 0xdc, 0x7c, 0x0a, 0x5b, 0xf9, 0xec, 0x86, 0x8b, 0x9a, 0x6d, 0x54, 0x6a, 0xf0, 0xd7, 0x09, 0xd2, 0xcd, 0x24, 0x58, 0x16, 0x7f, 0xed, 0x1a, 0xb2, 0xbe, 0xc6, 0xba, 0x68, 0xe8, 0x64, 0x99, 0x84, 0x0d, 0x4c, 0xea, 0xf8, 0x10, 0x31, 0x82, 0xb8, 0xa9, 0xaf, 0xc1, 0x7a, 0xd3, 0x9c, 0x1e, 0xad, 0x9c, 0x5a, 0x6b, 0x79, 0x94, 0x22, 0xca, 0xb0, 0x6d, 0x66, 0x7e, 0x10, 0x87, 0x09, 0x0c, 0xb5, 0x1f, 0xed, 0xb3, 0x22, 0xc6, 0x24, 0x5d, 0x5e, 0x97, 0xb8, 0x7f, 0x1b, 0x36, 0x31, 0xb5, 0xf6, 0xcb, 0x53, 0x02, 0x19, 0x64, 0x0f, 0x4d, 0x67, 0x84, 0xd9, 0xdf, 0x38, 0xf4, 0x8d, 0x6d, 0xd0, 0xdc, 0x43, 0xbb, 0x72, 0x48, 0x1a, 0x99, 0x83, 0xf8, 0x6d, 0x9f, 0xd0, 0x04, 0x2d, 0x50, 0xb7, 0x84, 0x9f, 0x50, 0x0e, 0x73, 0x30, 0x5f, 0xf7, 0x8e, 0x6d, 0xb0, 0xa4, 0xbe, 0x12, 0x53, 0x34, 0x3d, 0xd6, 0x87, 0x71, 0x22, 0xb4, 0xd7, 0xd3, 0x90, 0xcf, 0xee, 0x52, 0x29, 0x76, 0xad, 0xc5, 0x1c, 0xe7, 0x54, 0xad, 0x61, 0x92, 0xb1, 0x7e, 0x31, 0xb7, 0x67, 0x1b, 0x2c, 0xf3, 0xa6, 0x77, 0x26, 0xec, 0x45, 0x19, 0x85, 0x5a, 0x6e, 0x2d, 0xd2, 0x24, 0xd5, 0x46, 0x0b, 0xf3, 0x94, 0x12, 0x54, 0x84, 0xd2, 0x8e, 0x75, 0x09, 0xd6, 0x03, 0xd7, 0x8e, 0xd0, 0xe7, 0xa0, 0x3c, 0xdd, 0x42, 0x31, 0x91, 0x5a, 0x2f, 0x82, 0xff, 0xc1, 0x1e, 0xba, 0x3b, 0xe6, 0x41, 0xae, 0xda, 0xb6, 0xb6, 0x09, 0xea, 0x75, 0x4d, 0xe9, 0x9b, 0x4d, 0xa6, 0xf4, 0x2d, 0x6f, 0xad, 0xf8, 0x46, 0xa0, 0x16, 0xe4, 0xaf, 0x0d, 0x63, 0x82, 0xb5, 0xe0, 0x5e, 0x31, 0xa1, 0x22, 0x7d, 0x73, 0xb5, 0x4d, 0x5a, 0x91, 0x4f, 0xcd, 0xcb, 0x00, 0xc9, 0xc5, 0xda, 0x8c, 0x3b, 0x16, 0xc4, 0xbf, 0x95, 0x42, 0x91, 0x7b, 0x3e, 0xac, 0xd3, 0xd8, 0x50, 0x44, 0xcd, 0x90, 0x30, 0x81, 0x7d, 0xea, 0xec, 0xba, 0x8b, 0xda, 0x7b, 0x25, 0xcc, 0xa0, 0x5c, 0x98, 0xfe, 0xa1, 0x43, 0x0a, 0x51, 0x06, 0x28, 0x44, 0xb0, 0xd1, 0xbc, 0x27, 0x07, 0x34, 0xf7, 0xd1, 0xbf, 0xd2, 0x64, 0x73, 0x2f, 0x48, 0x5a, 0x66, 0x36, 0xa5, 0x6f, 0xaa, 0x5e, 0x86, 0x25, 0x6c, 0xc7, 0x92, 0xfb, 0xdd, 0xc1, 0x75, 0x01, 0xc4, 0x93, 0xff, 0x01, 0xb2, 0x7a, 0x22, 0x9f, 0x26, 0x77, 0x10, 0xbf, 0x9b, 0x76, 0xe0, 0x18, 0x58, 0x57, 0x49, 0x94, 0xc4, 0x60, 0x58, 0x33, 0x78, 0x6c, 0xa7, 0x32, 0xec, 0x31, 0x33, 0xaf, 0x3c, 0xf7, 0xdb, 0x68, 0xcb, 0x50, 0x3b, 0xa0, 0xff, 0xd4, 0xb7, 0x82, 0x18, 0x62, 0x7f, 0x3b, 0x20, 0x94, 0x9a, 0xca, 0xa7, 0xfc, 0x8a, 0x2e, 0xa6, 0xc6, 0x94, 0x65, 0x08, 0xcd, 0x7e, 0x2c, 0x20, 0x14, 0x4d, 0xc1, 0x56, 0x51, 0x91, 0x4f, 0x7b, 0x35, 0xcb, 0xc5, 0xb3, 0xc9, 0xbe, 0x8d, 0xed, 0xac, 0xe2, 0x09, 0xd7, 0xb1, 0x3c, 0xf7, 0xae, 0xf0, 0xc0, 0xcd, 0x3e, 0x8c, 0x37, 0x6b, 0x5d, 0xc0, 0x19, 0x58, 0xa0, 0x24, 0x7a, 0xa4, 0xb6, 0xb4, 0xff, 0x92, 0xcd, 0x19, 0xab, 0x5d, 0x1b, 0xb0, 0x35, 0x9b, 0x60, 0x96, 0x25, 0xd5, 0xb5, 0x5e, 0x70, 0x33, 0x3d, 0x17, 0xa0, 0xc7, 0x89, 0xb0, 0x50, 0xa2, 0x5a, 0x4d, 0x34, 0x84, 0x18, 0xa7, 0xbe, 0x65, 0x44, 0x5d, 0x16, 0x71, 0x8b, 0xf8, 0xdd, 0xf2, 0xc6, 0x21, 0xfb, 0xc3, 0x3d, 0x98, 0x77, 0xfa, 0x66, 0xf4, 0xd9, 0x30, 0x9a, 0x8d, 0x81, 0x13, 0x6c, 0xf8, 0x55, 0x74, 0xf4, 0xd0, 0xd1, 0x43, 0x45, 0x1f, 0xf7, 0x00, 0xe1, 0x54, 0x47, 0x38, 0x09, 0x62, 0xef, 0xce, 0xa6, 0xdc, 0xa9, 0x44, 0x5f, 0x5d, 0x02, 0xca, 0xdf, 0x8d, 0xbd, 0xb0, 0x1a, 0xa9, 0x98, 0xf5, 0x51, 0x1c, 0x89, 0x6e, 0xf2, 0x58, 0xa2, 0x9d, 0x7e, 0x0e, 0x6b, 0xe3, 0x89, 0x84, 0x89, 0x30, 0x78, 0x99, 0x95, 0xd1, 0x16, 0x29, 0x21, 0xb5, 0xc9, 0xc8, 0x12, 0xea, 0x22, 0x25, 0x44, 0x7a, 0x26, 0x6c, 0xe0, 0x97, 0x2d, 0xbe, 0x84, 0x84, 0xb1, 0xc5, 0x8a, 0x3d, 0xa1, 0xc8, 0x8e, 0x3a, 0x2c, 0xe3, 0x2c, 0x46, 0xc5, 0x2f, 0x2f, 0x50, 0x1e, 0x63, 0xa5, 0xf4, 0xd3, 0x1e, 0x3c, 0x95, 0x85, 0x93, 0x64, 0x91, 0xa6, 0xca, 0x68, 0x49, 0xf7, 0x0c, 0x28, 0x25, 0x6c, 0xb1, 0x32, 0xaa, 0x3b, 0x15, 0x7b, 0x43, 0x9e, 0x14, 0x1f, 0x2f, 0x6a, 0x97, 0x28, 0xf6, 0x85, 0x3c, 0x2a, 0x5f, 0x42, 0x6c, 0x27, 0x9b, 0x64, 0xcd, 0x11, 0xe5, 0xe2, 0xb4, 0x76, 0x1c, 0xd7, 0xd7, 0xa5, 0x1e, 0x2e, 0xd1, 0x5c, 0xa4, 0xdf, 0x7f, 0xb6, 0xed, 0xab, 0x7b, 0x3c, 0x7f, 0x88, 0xf5, 0x78, 0x8f, 0xdc, 0xe3, 0x3b, 0xfe, 0xf7, 0x7b, 0x3c, 0xc2, 0xd7, 0xdd, 0xa2, 0x4f, 0xa7, 0x0c, 0xef, 0xd3, 0x98, 0x2f, 0xa3, 0x36, 0x99, 0x1a, 0xb6, 0x74, 0xf2, 0x7b, 0x97, 0x62, 0xaf, 0xb5, 0x3f, 0x98, 0xb8, 0xae, 0x09, 0x7c, 0xfd, 0x81, 0x29, 0x48, 0x1d, 0x72, 0xab, 0x6c, 0x18, 0xb3, 0x14, 0xf1, 0xde, 0x33, 0xc1, 0x91, 0xbe, 0xd9, 0x8a, 0x7d, 0x57, 0xda, 0xcd, 0x84, 0x94, 0x95, 0x57, 0x0b, 0x52, 0x8f, 0xd4, 0x15, 0xbd, 0xf1, 0xf2, 0x1b, 0xaf, 0x15, 0x7f, 0xbc, 0x09, 0xdc, 0x8d, 0x72, 0x9f, 0x4c, 0x95, 0xca, 0x7a, 0xab, 0xde, 0xa8, 0xb3, 0xd1, 0xd9, 0x24, 0xeb, 0x2e, 0x62, 0x8d, 0x27, 0x52, 0x6f, 0xc4, 0xef, 0x3e, 0x29, 0x6d, 0x12, 0xf6, 0x44, 0xa4, 0xbd, 0x40, 0x6f, 0xcf, 0x83, 0xf2, 0xec, 0x25, 0xe2, 0x6f, 0x0e, 0xad, 0x71, 0x3c, 0xd6, 0x37, 0xc1, 0x01, 0x7e, 0xc4, 0xd8, 0x92, 0xba, 0xf9, 0x4b, 0xf8, 0x7d, 0x3d, 0xf5, 0x75, 0xac, 0xf7, 0xcc, 0x21, 0xec, 0xb9, 0x97, 0xd2, 0x4a, 0x68, 0x0c, 0x87, 0xe6, 0x48, 0xdf, 0x7c, 0xfe, 0x77, 0x51, 0x1c, 0xbe, 0x1e, 0xc1, 0xd8, 0xab, 0x0c, 0x53, 0x7d, 0x53, 0x5e, 0xa4, 0x4b, 0xe3, 0x47, 0x62, 0x8e, 0x72, 0x93, 0xe0, 0x7a, 0x7e, 0x21, 0x2e, 0xe9, 0x27, 0x2b, 0x4e, 0x1b, 0x34, 0x21, 0xb5, 0x51, 0x19, 0xf2, 0x16, 0x43, 0x26, 0x8d, 0x53, 0xa5, 0xf1, 0xe3, 0x14, 0x6b, 0xab, 0x38, 0x1e, 0x20, 0x56, 0xd2, 0x4d, 0x3f, 0xa9, 0x53, 0x22, 0x1c, 0xab, 0x3f, 0x60, 0xf7, 0xa9, 0x6e, 0xdd, 0xe3, 0x5e, 0xfe, 0x62, 0x8f, 0x8b, 0xd4, 0x9a, 0x7a, 0x0a, 0xf5, 0x18, 0x67, 0xd0, 0x0b, 0x37, 0x9f, 0xff, 0xaf, 0xf7, 0xc2, 0x38, 0xca, 0x86, 0x9b, 0xed, 0xe2, 0x6c, 0xa2, 0xe9, 0xff, 0x4e, 0x1f, 0xb9, 0x7e, 0x26, 0x0e, 0x92, 0x06, 0xf5, 0x7a, 0x94, 0xd9, 0x89, 0x43, 0x89, 0x5a, 0xea, 0x75, 0x23, 0x7b, 0x49, 0xcc, 0x7e, 0x86, 0x59, 0x92, 0xa0, 0xd4, 0xf4, 0x5d, 0x76, 0xc2, 0x4d, 0x78, 0x68, 0x9e, 0xa2, 0x1d, 0xca, 0x8a, 0xa7, 0x0d, 0x5c, 0xbf, 0x1e, 0xe9, 0x21, 0xd7, 0x7b, 0x50, 0x17, 0xc0, 0xda, 0x35, 0xd0, 0xdd, 0x50, 0x8f, 0xd7, 0x92, 0xbd, 0x9b, 0xdf, 0xa3, 0x66, 0xe7, 0xe6, 0x6f, 0x43, 0x7d, 0x94, 0x56, 0x38, 0xfd, 0xc4, 0x15, 0xb0, 0xb5, 0x09, 0xef, 0x7e, 0x56, 0xf7, 0x84, 0x63, 0x01, 0x69, 0x57, 0xdc, 0x8e, 0x9e, 0xba, 0x82, 0xc7, 0x5e, 0x26, 0x4a, 0x20, 0x0e, 0xf9, 0xcf, 0xe0, 0x83, 0xce, 0x65, 0x8d, 0xe1, 0x11, 0x73, 0x31, 0x15, 0x5d, 0x18, 0x1a, 0x78, 0xf1, 0xe5, 0x3a, 0x08, 0xfb, 0xfe, 0x19, 0xac, 0x86, 0xed, 0xe2, 0x1c, 0xc2, 0xc7, 0x7f, 0x07, 0xab, 0x9f, 0xae, 0xfe, 0x02, 0x56, 0x53, 0x19, 0x56, 0x53, 0x99, 0x5b, 0x8d, 0xee, 0x38, 0xbc, 0x16, 0x4a, 0x73, 0x7d, 0xa4, 0x99, 0x65, 0x44, 0x76, 0x2b, 0xcb, 0x67, 0xc8, 0x5e, 0xd3, 0xa3, 0x54, 0x26, 0xdb, 0xc2, 0x5d, 0x60, 0x27, 0xac, 0x9d, 0xa1, 0x39, 0x2e, 0x92, 0xc8, 0xd0, 0x7d, 0x42, 0xde, 0x5b, 0xab, 0xf1, 0x99, 0x10, 0xd3, 0xa4, 0x27, 0x1c, 0x10, 0x15, 0x6c, 0xcf, 0x2e, 0x59, 0x9f, 0x90, 0xac, 0xf6, 0x1b, 0x92, 0x3d, 0x23, 0xf2, 0x1a, 0xa6, 0xea, 0xae, 0x07, 0x78, 0x9a, 0xa4, 0xd4, 0x9d, 0xdd, 0xf5, 0xca, 0x4d, 0xa1, 0x13, 0xdd, 0x22, 0xaf, 0x57, 0x90, 0xc5, 0x3e, 0x4a, 0xc0, 0x79, 0x92, 0x04, 0x3c, 0xc1, 0x8e, 0x6d, 0x62, 0x67, 0x75, 0xcd, 0xa3, 0x15, 0x46, 0x92, 0xd6, 0xa4, 0xb5, 0x45, 0x6c, 0xef, 0x99, 0xef, 0xc5, 0x71, 0x2b, 0x49, 0x1e, 0x7d, 0x30, 0x24, 0x96, 0x45, 0x7a, 0x64, 0x06, 0x8f, 0x71, 0xca, 0x8c, 0x18, 0xef, 0xfd, 0x67, 0x7f, 0x1d, 0x8d, 0x67, 0xe0, 0x0e, 0x46, 0xfa, 0xe4, 0x2b, 0xb1, 0x3e, 0x99, 0x1f, 0xdf, 0x27, 0x83, 0xb4, 0x5a, 0xb6, 0x33, 0x58, 0xbf, 0x4b, 0x54, 0xf8, 0x86, 0xa4, 0xdd, 0xb4, 0x1a, 0x3a, 0x43, 0x2c, 0xd9, 0xa2, 0x46, 0xac, 0x68, 0xe4, 0xb3, 0x7d, 0x75, 0x31, 0x6c, 0x70, 0x74, 0xae, 0x8d, 0x80, 0xef, 0x14, 0x7c, 0xeb, 0xf1, 0xad, 0xb4, 0x3f, 0x0b, 0x69, 0xf8, 0xd0, 0x89, 0x0a, 0x19, 0x3e, 0x1e, 0xeb, 0x6c, 0x46, 0xaa, 0x4a, 0xc3, 0x36, 0x41, 0x29, 0x9d, 0x70, 0xd6, 0xac, 0x2c, 0xa1, 0xfe, 0x9e, 0x41, 0x6e, 0xaf, 0xc2, 0x6f, 0xc2, 0xf6, 0x7b, 0x18, 0xeb, 0xa6, 0x60, 0xd2, 0x6d, 0x0a, 0xad, 0x6e, 0xd9, 0x7f, 0x49, 0xf8, 0x6a, 0xdb, 0x29, 0x6a, 0x62, 0x5f, 0x0f, 0xb7, 0x51, 0x2d, 0x09, 0x83, 0x08, 0xcd, 0x20, 0xb5, 0xb4, 0xa7, 0x00, 0x61, 0x98, 0xfa, 0x09, 0x5a, 0x01, 0xad, 0x85, 0x57, 0xf7, 0x48, 0xb5, 0x60, 0x23, 0x2e, 0x7e, 0x1f, 0x1d, 0xfc, 0x61, 0x38, 0x1c, 0xa6, 0x1d, 0x4d, 0x6c, 0xbf, 0xab, 0x5d, 0x92, 0x2c, 0x31, 0x4d, 0x88, 0xf8, 0x1f, 0xfe, 0xbd, 0xf6, 0xc6, 0x6b, 0x42, 0xc5, 0x51, 0xe2, 0x8c, 0x7e, 0xb6, 0x73, 0x99, 0xe4, 0x81, 0x25, 0xe5, 0x34, 0xbe, 0xf8, 0xad, 0x53, 0x76, 0x03, 0x7e, 0xad, 0x44, 0x5f, 0x05, 0xbe, 0x1f, 0xc5, 0xb7, 0x12, 0xdf, 0x8b, 0x31, 0x77, 0xea, 0x25, 0xb3, 0xa8, 0xa7, 0xf8, 0x28, 0x7e, 0x3b, 0xf1, 0x2e, 0x1a, 0x1d, 0xf1, 0x29, 0x63, 0x67, 0x79, 0x12, 0x35, 0x0d, 0xe9, 0xbf, 0x6f, 0xa0, 0x93, 0x50, 0x5a, 0xe5, 0x53, 0x07, 0xb3, 0x84, 0xf9, 0x90, 0xc5, 0x5c, 0xa9, 0x38, 0x0a, 0x6d, 0x85, 0x0c, 0x4f, 0xca, 0x78, 0xd4, 0x96, 0x51, 0xd7, 0xa7, 0xb3, 0xa2, 0x86, 0xa4, 0x87, 0x62, 0x93, 0xae, 0xcd, 0xe2, 0xe9, 0x51, 0x67, 0xce, 0x62, 0xfb, 0x0a, 0xc7, 0x7e, 0xbd, 0x28, 0x7d, 0x17, 0xa5, 0xf7, 0x71, 0xef, 0x6e, 0xad, 0xb6, 0xf5, 0xb5, 0x42, 0xca, 0x14, 0x5b, 0xfa, 0x4e, 0xdf, 0x88, 0x94, 0x2c, 0x95, 0x21, 0x9a, 0x8f, 0xc0, 0xe0, 0xaf, 0xc4, 0x5f, 0x0d, 0x2c, 0xc1, 0x5f, 0x2d, 0x3c, 0x3a, 0x9e, 0xe6, 0x81, 0x17, 0xc7, 0xa7, 0x43, 0x6a, 0x17, 0x68, 0x8f, 0x2f, 0xcd, 0xab, 0x1b, 0xf8, 0x39, 0x5d, 0x42, 0xc2, 0xf9, 0x1e, 0xbd, 0xbd, 0xf8, 0x63, 0x55, 0xa2, 0xff, 0xbe, 0x63, 0xa1, 0xcb, 0x2b, 0x84, 0xa4, 0xfe, 0x20, 0x83, 0xa6, 0x8e, 0xc0, 0xf5, 0x28, 0x67, 0xd3, 0x19, 0xc9, 0x74, 0x02, 0x37, 0x69, 0x28, 0x2b, 0xbc, 0xda, 0x0e, 0x7e, 0xf7, 0x0a, 0x6f, 0x1a, 0xdb, 0x73, 0xe8, 0xb6, 0x73, 0x62, 0x0d, 0xf6, 0xb5, 0x26, 0xaf, 0xc3, 0xaf, 0x16, 0x9d, 0xd1, 0x1a, 0x4c, 0x75, 0x3e, 0x83, 0xfc, 0x40, 0xe5, 0x4f, 0x3b, 0xf6, 0x0c, 0xed, 0x52, 0xf3, 0xa7, 0xea, 0x1b, 0x65, 0xfa, 0x51, 0xba, 0x83, 0xce, 0x4c, 0xcf, 0x00, 0x7e, 0xeb, 0xe3, 0xbf, 0x31, 0xbe, 0xd9, 0xab, 0xae, 0x09, 0x8a, 0x4a, 0xbf, 0x92, 0xe2, 0x77, 0xdc, 0xbe, 0x7b, 0x2b, 0x64, 0x7b, 0xb2, 0xf0, 0xd7, 0x85, 0x72, 0x30, 0xdf, 0xa1, 0xb9, 0xb0, 0xb5, 0xbf, 0xcb, 0xc8, 0xb7, 0xa7, 0x9c, 0xdf, 0xde, 0xdf, 0xdd, 0x71, 0xd7, 0x85, 0x6d, 0xfd, 0xa1, 0x7e, 0x3a, 0x3b, 0x2b, 0x6b, 0xb8, 0x2d, 0x28, 0xd6, 0xcb, 0x26, 0xd1, 0xac, 0xa6, 0x36, 0x46, 0xb3, 0x9a, 0x4a, 0x5f, 0x62, 0x6f, 0x68, 0x01, 0x68, 0x4a, 0x9c, 0xf4, 0x3b, 0x15, 0x29, 0x57, 0xe3, 0xcd, 0x72, 0xae, 0xf7, 0x28, 0xd1, 0xa5, 0xf0, 0xa4, 0xd2, 0x69, 0xc4, 0x24, 0x3f, 0xf0, 0x4f, 0x78, 0x52, 0xd9, 0x99, 0x3b, 0x9a, 0x7b, 0x1e, 0x81, 0xb3, 0x3f, 0xf3, 0x40, 0x86, 0x08, 0x1a, 0x2d, 0xc6, 0x41, 0xde, 0xa6, 0xcc, 0xd1, 0xaf, 0xc2, 0xfe, 0x65, 0xc0, 0x1e, 0x6a, 0x68, 0x37, 0xed, 0xa2, 0x79, 0xf2, 0xe3, 0x4c, 0xbe, 0xc8, 0x40, 0x57, 0x7a, 0x3c, 0x15, 0x13, 0xcd, 0x22, 0x5d, 0x92, 0xd6, 0xaa, 0x1a, 0xbd, 0x17, 0xc6, 0xe1, 0xa8, 0xbb, 0x42, 0x72, 0x87, 0x57, 0xc5, 0xdc, 0xa0, 0xda, 0xc4, 0x64, 0xf0, 0x98, 0x76, 0xcb, 0xb0, 0x4d, 0x76, 0x1f, 0x2a, 0xbb, 0x75, 0x13, 0xe8, 0x92, 0xdc, 0x41, 0xc9, 0x4d, 0xf2, 0xd9, 0x3f, 0x76, 0x61, 0x6f, 0x62, 0xb9, 0x1d, 0x7d, 0x99, 0x68, 0x3d, 0xbd, 0x10, 0x92, 0x76, 0x05, 0xbc, 0x5a, 0x7c, 0x73, 0xbb, 0x50, 0x9b, 0x58, 0xa0, 0xde, 0x15, 0x58, 0xa0, 0x16, 0x69, 0x6d, 0x52, 0xe9, 0x53, 0xa0, 0x86, 0x0a, 0xda, 0x80, 0x94, 0x1a, 0x4b, 0xc1, 0x45, 0xd2, 0xfb, 0x1e, 0xc6, 0xb1, 0xa1, 0xcc, 0x88, 0xbe, 0x7f, 0x7e, 0xcd, 0xb9, 0x96, 0x2c, 0xd8, 0xb1, 0x5d, 0xcd, 0x5e, 0x45, 0x3b, 0x8f, 0x29, 0x12, 0xfa, 0x13, 0x18, 0x47, 0x55, 0xd8, 0x13, 0x50, 0xc7, 0x54, 0x9c, 0xa0, 0xb0, 0x2c, 0xfc, 0xe2, 0xb0, 0xad, 0x54, 0x27, 0x38, 0xfc, 0xd2, 0xcb, 0x5f, 0xda, 0x13, 0x5c, 0x46, 0x57, 0xd1, 0xfb, 0xc0, 0xe1, 0x08, 0x92, 0x86, 0x58, 0x50, 0x21, 0xc4, 0xac, 0x31, 0xdb, 0x61, 0x94, 0x24, 0xdd, 0xc4, 0xfc, 0x04, 0x33, 0x28, 0x4e, 0xf7, 0x8c, 0x09, 0x8c, 0xf4, 0xc7, 0xb8, 0x89, 0xb7, 0xf0, 0x53, 0xc4, 0xfb, 0xbd, 0x71, 0x88, 0xea, 0xe9, 0x4f, 0x42, 0x5e, 0x9c, 0xd2, 0xfe, 0x25, 0x75, 0x4c, 0x0d, 0x08, 0x2a, 0xb6, 0xb3, 0x82, 0x61, 0x06, 0x53, 0x65, 0x8d, 0x7e, 0x06, 0x6e, 0x97, 0x64, 0x03, 0x09, 0xe7, 0x6c, 0xcc, 0x32, 0x12, 0xbc, 0x31, 0x5b, 0xe1, 0xce, 0xb8, 0x10, 0x16, 0x5b, 0x37, 0x11, 0xd2, 0x4e, 0xaf, 0x88, 0x48, 0x13, 0xd1, 0x14, 0x66, 0x6f, 0x26, 0x72, 0x96, 0x34, 0xb6, 0x9b, 0x5e, 0xe6, 0xf3, 0x52, 0x8b, 0x53, 0x0b, 0x22, 0x47, 0x10, 0x7c, 0xa5, 0x18, 0x5b, 0x41, 0x67, 0xba, 0x63, 0x19, 0xb3, 0xef, 0x0f, 0xf8, 0x35, 0xef, 0x6e, 0xd5, 0x31, 0x19, 0x4e, 0x05, 0x72, 0x59, 0xf5, 0x54, 0xfa, 0x5d, 0x81, 0xe6, 0x2c, 0x6c, 0xa1, 0x44, 0x7c, 0x67, 0xe0, 0x5b, 0xb9, 0x2b, 0x30, 0xf3, 0x15, 0x47, 0x97, 0xb5, 0x13, 0xf8, 0xb5, 0xaf, 0x18, 0x54, 0xa2, 0x92, 0xee, 0x51, 0x6c, 0xe7, 0x3e, 0x58, 0xb5, 0x2c, 0x88, 0xe3, 0x77, 0x93, 0x57, 0xe1, 0x13, 0x96, 0xd1, 0x4e, 0xb6, 0x71, 0x92, 0xfd, 0xcb, 0xbc, 0xbe, 0xaa, 0x35, 0x18, 0x77, 0xdc, 0xd1, 0x57, 0x24, 0x5e, 0xfa, 0x18, 0x9d, 0x1e, 0xaa, 0xae, 0x18, 0xb8, 0xdc, 0xec, 0xda, 0xc0, 0x2c, 0xdc, 0x9b, 0xbc, 0x82, 0x8f, 0xce, 0xd3, 0xb0, 0x4a, 0x23, 0xad, 0x80, 0x2e, 0x49, 0x32, 0x94, 0xbe, 0xa5, 0x5b, 0xb8, 0x63, 0xbc, 0x36, 0x52, 0x83, 0xf6, 0xd2, 0x5d, 0xd2, 0x78, 0x76, 0x3a, 0x8a, 0x21, 0x80, 0x23, 0x58, 0xde, 0xb4, 0x69, 0x03, 0x1f, 0x5a, 0x2b, 0xd8, 0xbc, 0x8a, 0x28, 0xd2, 0xcc, 0x3c, 0x6a, 0x9e, 0x1a, 0x4f, 0x0e, 0xc3, 0x48, 0x16, 0xea, 0xa2, 0x19, 0xeb, 0x02, 0x16, 0x0e, 0x47, 0x78, 0x15, 0x3b, 0xb5, 0xc2, 0xea, 0xda, 0x10, 0x81, 0x48, 0xd6, 0xbc, 0x94, 0xbe, 0x76, 0x0d, 0xf6, 0x15, 0x8d, 0x37, 0x9f, 0xd2, 0x46, 0x70, 0x6c, 0x6e, 0x04, 0x2d, 0xbe, 0x85, 0xd1, 0xbb, 0x36, 0x41, 0x84, 0x0e, 0x51, 0x26, 0xa3, 0x93, 0x04, 0xb2, 0x74, 0x46, 0x48, 0x23, 0xf9, 0x2e, 0x1c, 0xc6, 0x9c, 0x84, 0xba, 0xd5, 0x51, 0xfc, 0xeb, 0x09, 0x02, 0xe6, 0x98, 0x35, 0x22, 0xc7, 0x61, 0x2d, 0xc1, 0x20, 0x20, 0xe4, 0x97, 0x2e, 0x40, 0x9a, 0x27, 0x95, 0xb5, 0x4b, 0x05, 0x6b, 0x17, 0xa5, 0xbf, 0x82, 0xf0, 0xd5, 0x5e, 0x21, 0xd7, 0xf3, 0x98, 0x0c, 0x37, 0x8b, 0x6e, 0xd1, 0x95, 0xea, 0xf9, 0x81, 0x43, 0xaa, 0x67, 0xb4, 0x96, 0x79, 0xd1, 0xbc, 0xff, 0x99, 0x9a, 0x5a, 0x71, 0x44, 0x66, 0x35, 0x21, 0x4e, 0x9a, 0x6a, 0xa5, 0xbd, 0xde, 0x13, 0x8a, 0x99, 0xec, 0x26, 0x71, 0x86, 0xa0, 0xec, 0x93, 0xe6, 0xe4, 0x3c, 0x1b, 0xa4, 0xd6, 0xfe, 0xe7, 0xea, 0xe8, 0xec, 0x92, 0x6b, 0xf6, 0x5d, 0xb9, 0x66, 0xdf, 0x65, 0x35, 0xfb, 0xae, 0x5c, 0xb3, 0x23, 0x32, 0x34, 0x3d, 0xbb, 0x55, 0x8f, 0xd5, 0xec, 0x72, 0xcb, 0xff, 0x7a, 0xcd, 0xf4, 0xff, 0x97, 0x6a, 0x96, 0xe2, 0xf3, 0xca, 0xb5, 0xf2, 0xb2, 0x5a, 0x79, 0x59, 0xad, 0xfc, 0x51, 0x38, 0x75, 0x54, 0x9e, 0x9a, 0x00, 0x95, 0x67, 0x9e, 0x8a, 0x76, 0x3b, 0x5c, 0x5a, 0x57, 0x4b, 0xa7, 0xc0, 0xa7, 0xe9, 0xa0, 0x26, 0x48, 0x75, 0xab, 0x2b, 0x63, 0x65, 0x79, 0x16, 0xbe, 0x31, 0xac, 0x67, 0x63, 0x5e, 0xf1, 0xbd, 0x7a, 0x24, 0xdf, 0xf6, 0x3d, 0x4c, 0xb9, 0x4a, 0xa7, 0xad, 0x48, 0x3d, 0x0b, 0xfb, 0x52, 0x1a, 0xd9, 0x11, 0x62, 0x0e, 0x56, 0x94, 0xa5, 0x71, 0x2c, 0xf0, 0xa4, 0x89, 0x90, 0xa8, 0x60, 0x23, 0x87, 0x7a, 0x77, 0x68, 0x81, 0xb2, 0x5d, 0xb1, 0x2b, 0x34, 0x6c, 0x0c, 0x49, 0xa3, 0x30, 0x6f, 0x0a, 0x1b, 0x43, 0xfc, 0x28, 0x13, 0x7d, 0x8e, 0xf1, 0x8f, 0xb3, 0xf8, 0xe9, 0x4c, 0x16, 0xa7, 0x3d, 0xce, 0x90, 0xb8, 0x57, 0x8a, 0xed, 0x05, 0xc5, 0x7e, 0x4c, 0xbb, 0x8c, 0x49, 0x43, 0xc0, 0x8d, 0x9d, 0x3e, 0x70, 0xc9, 0x3c, 0x8d, 0x49, 0xf2, 0x15, 0x03, 0x17, 0xf7, 0xb1, 0xf8, 0x24, 0xc7, 0x6f, 0x1c, 0x26, 0xc7, 0x6f, 0x14, 0x21, 0xa1, 0x37, 0xa2, 0x33, 0xc5, 0xe6, 0xf7, 0xfe, 0xb9, 0x39, 0x08, 0x0c, 0xdb, 0x54, 0xdd, 0x43, 0x7a, 0x50, 0x6c, 0x46, 0xe4, 0xc5, 0x3e, 0xcf, 0xea, 0x7f, 0x30, 0x1f, 0xf2, 0x78, 0x54, 0xd2, 0xde, 0x30, 0x4c, 0x62, 0xa7, 0x5b, 0x70, 0x04, 0xc2, 0xc3, 0x7f, 0x47, 0x66, 0x7f, 0xff, 0x64, 0x1c, 0x2c, 0x2d, 0x93, 0xd3, 0x81, 0x3f, 0xc6, 0xa4, 0x76, 0xe0, 0x3f, 0xa6, 0xf1, 0x18, 0xbf, 0x0f, 0xa2, 0x7b, 0x77, 0x7b, 0x02, 0x1b, 0x77, 0xf7, 0xa1, 0xc4, 0xfb, 0x2d, 0xd2, 0x6e, 0x69, 0x96, 0xa9, 0xe8, 0x63, 0x15, 0x14, 0x5d, 0x48, 0x5a, 0x46, 0xd6, 0xc8, 0xe6, 0x64, 0x36, 0x37, 0xc0, 0x49, 0x73, 0x03, 0x08, 0xf9, 0x4c, 0xdc, 0xdc, 0x00, 0x27, 0xcf, 0x0d, 0xb4, 0xb3, 0xb9, 0x81, 0x34, 0xc2, 0x1e, 0x6a, 0xb6, 0x34, 0x4f, 0x8a, 0x3a, 0x39, 0x7c, 0x88, 0xd4, 0xdb, 0x84, 0x3d, 0xe5, 0xbc, 0x01, 0x31, 0x5a, 0xf4, 0x49, 0x7e, 0x58, 0xe7, 0xc0, 0x5c, 0xee, 0x42, 0xbc, 0x8e, 0x66, 0x16, 0x30, 0x47, 0xdc, 0x2b, 0xa2, 0xee, 0xfd, 0xc6, 0x24, 0x77, 0xb7, 0xae, 0x24, 0xfa, 0xbd, 0x83, 0xad, 0x4c, 0xf0, 0x6f, 0xbe, 0x62, 0x99, 0x06, 0x56, 0x83, 0xaa, 0xb6, 0xab, 0xfc, 0x02, 0xa8, 0xa7, 0xcb, 0x6b, 0x01, 0x15, 0xf2, 0x5a, 0xc0, 0xac, 0x1e, 0x8b, 0x13, 0xcc, 0xba, 0x04, 0x7d, 0xf1, 0x12, 0x18, 0x9b, 0xba, 0x2f, 0xe0, 0x99, 0xa3, 0x53, 0x91, 0xad, 0x2e, 0xba, 0x6a, 0x74, 0x49, 0xe8, 0x1a, 0x8d, 0x2e, 0xa7, 0x4e, 0x83, 0xae, 0x34, 0x74, 0xd9, 0x74, 0xb7, 0xa1, 0xeb, 0x0e, 0x74, 0xe5, 0xe9, 0x52, 0xd0, 0x95, 0x8e, 0x2e, 0xb3, 0x2e, 0x19, 0x5d, 0x63, 0xd0, 0xa5, 0xab, 0xea, 0xd6, 0x29, 0xf4, 0x25, 0x32, 0xa4, 0xb4, 0xaa, 0xae, 0xaa, 0x55, 0x55, 0x8f, 0x56, 0xfd, 0xa8, 0x6a, 0x75, 0xd5, 0x8a, 0xaa, 0x9e, 0xdd, 0x2f, 0x80, 0xb5, 0x61, 0x23, 0xed, 0x13, 0x10, 0xd8, 0xac, 0xeb, 0x5a, 0xfc, 0x3e, 0x46, 0x73, 0x6e, 0x73, 0xf6, 0x04, 0xeb, 0x15, 0xa8, 0x5b, 0xd3, 0x9c, 0xc4, 0x9c, 0xc8, 0x9c, 0x44, 0x3b, 0xbf, 0x2b, 0x58, 0xdf, 0xf2, 0x20, 0xd7, 0x1f, 0x98, 0x82, 0xd2, 0xc0, 0xad, 0xf4, 0x68, 0x49, 0xcb, 0x2e, 0x62, 0x73, 0x31, 0xa9, 0xd6, 0xe1, 0xf3, 0x84, 0x23, 0x74, 0xec, 0x56, 0xc8, 0x75, 0xdf, 0x1f, 0xd5, 0xb4, 0x63, 0xb4, 0x30, 0x67, 0x3d, 0x52, 0xd9, 0x1b, 0x92, 0x24, 0x3d, 0x47, 0xac, 0x22, 0xfd, 0x9d, 0x68, 0xee, 0xbf, 0xad, 0xc3, 0xcb, 0x90, 0xa3, 0x3a, 0x3c, 0xed, 0xe0, 0x54, 0x7e, 0x85, 0x0e, 0x3f, 0x82, 0xea, 0xde, 0xab, 0x1b, 0xa6, 0xc9, 0x1f, 0x12, 0x67, 0x1b, 0xca, 0xfe, 0xbb, 0x5a, 0xe7, 0x7b, 0xe9, 0xf1, 0xf3, 0x5d, 0x8c, 0x62, 0xb5, 0x28, 0x89, 0xe4, 0x32, 0xce, 0xa0, 0x46, 0x4d, 0xde, 0x84, 0xb0, 0x41, 0xd4, 0xfb, 0x38, 0x51, 0x60, 0xda, 0x08, 0x1c, 0x0b, 0xf4, 0x07, 0xfb, 0xd9, 0x59, 0x0c, 0x4c, 0x1b, 0x59, 0x4c, 0x27, 0x26, 0x08, 0x55, 0x74, 0x8e, 0xa7, 0x0e, 0x1e, 0x08, 0xa2, 0x9c, 0x10, 0x6c, 0xd0, 0x92, 0xf5, 0x37, 0xff, 0x84, 0xa4, 0x27, 0x79, 0x95, 0x22, 0x3b, 0xf5, 0x80, 0xf1, 0x1f, 0xe0, 0x48, 0x22, 0x0f, 0x61, 0x2c, 0xa2, 0xbe, 0x6e, 0xcc, 0x43, 0x23, 0x95, 0xc9, 0x7b, 0xaa, 0x76, 0x8d, 0x38, 0x8b, 0x64, 0x5d, 0x6f, 0x8d, 0xc4, 0xd9, 0x64, 0xbd, 0x89, 0xdd, 0x09, 0xeb, 0x4f, 0xc0, 0x72, 0x15, 0xfe, 0xd7, 0xf5, 0x26, 0xc6, 0x89, 0x89, 0xe7, 0xa8, 0x22, 0x3a, 0x10, 0x71, 0xc1, 0xf3, 0x26, 0x99, 0x0b, 0xaa, 0xdb, 0xc2, 0x24, 0x0b, 0xd3, 0x8a, 0x32, 0xab, 0x27, 0xc0, 0x45, 0xd2, 0xf0, 0x5a, 0xb1, 0x0f, 0x11, 0x97, 0x6d, 0xe3, 0x77, 0x52, 0xe9, 0x1e, 0x15, 0xa2, 0xa3, 0xc2, 0x3f, 0xe2, 0xc3, 0x32, 0xaf, 0x9e, 0x32, 0xe2, 0xdb, 0x3a, 0xe2, 0x3b, 0x79, 0x04, 0x0c, 0xd5, 0x2d, 0x60, 0x24, 0x8d, 0xf8, 0x56, 0x45, 0xbe, 0x45, 0x1d, 0xd9, 0xa5, 0x51, 0xfb, 0x55, 0x0c, 0xbc, 0x5b, 0x72, 0x6b, 0x99, 0x88, 0x6a, 0x78, 0xce, 0x41, 0xf5, 0xa8, 0x5d, 0xd3, 0x2a, 0xeb, 0xad, 0x34, 0x02, 0x44, 0xcf, 0x15, 0x53, 0xa3, 0x96, 0x1c, 0x37, 0x2f, 0x13, 0xdd, 0xdb, 0x64, 0x8d, 0x6a, 0x55, 0x16, 0x59, 0x1f, 0x43, 0x3e, 0xa1, 0x9f, 0x1f, 0x9d, 0x43, 0xd8, 0xe5, 0x0b, 0x23, 0x5f, 0x53, 0xb4, 0x29, 0x45, 0x95, 0x2f, 0xa9, 0x37, 0xd4, 0x00, 0xf0, 0xb4, 0xb3, 0x6b, 0x01, 0xc0, 0x93, 0x74, 0x8a, 0x31, 0xbe, 0x37, 0xc6, 0xd3, 0x05, 0xd3, 0x56, 0x19, 0x5d, 0xe8, 0x46, 0x93, 0xc4, 0x48, 0x1a, 0x10, 0xea, 0x3b, 0xa1, 0xf8, 0x90, 0x1d, 0x8f, 0x79, 0x89, 0xde, 0x54, 0x5e, 0xda, 0x09, 0x93, 0x48, 0xe7, 0x27, 0x7c, 0x7c, 0x83, 0x2c, 0x16, 0x7c, 0xb0, 0x73, 0x1b, 0x84, 0xbc, 0x53, 0xb1, 0x6d, 0x42, 0x3a, 0xfb, 0x1b, 0xfb, 0xf1, 0x2f, 0x4e, 0xeb, 0xf5, 0x43, 0x0e, 0x69, 0xbd, 0x45, 0x11, 0xad, 0x37, 0x87, 0xb4, 0xde, 0x22, 0x58, 0x99, 0x43, 0x5a, 0x6f, 0x11, 0x3c, 0x9a, 0x43, 0x5a, 0x6f, 0x11, 0x2c, 0xc6, 0xd1, 0x7b, 0x19, 0x69, 0xb5, 0x95, 0x7f, 0xd3, 0x68, 0x62, 0x2b, 0x79, 0x72, 0x5d, 0xf6, 0xd3, 0x28, 0x2c, 0xd7, 0x71, 0x17, 0xdd, 0x1d, 0xe9, 0x33, 0x21, 0xc5, 0x59, 0x91, 0x63, 0x97, 0xe2, 0xdb, 0x88, 0xef, 0x0a, 0x7c, 0x0b, 0xf8, 0xfe, 0x2e, 0xbe, 0x33, 0xf0, 0xed, 0xc5, 0x37, 0xcd, 0x6e, 0x3d, 0x8c, 0x6f, 0x15, 0xad, 0x1f, 0xe1, 0x28, 0xb9, 0x98, 0xf6, 0xd1, 0x7b, 0x53, 0xd8, 0x5e, 0x4a, 0x23, 0x42, 0xd4, 0x13, 0xf5, 0xcb, 0x6b, 0x85, 0xf6, 0x2f, 0xf1, 0x9f, 0xfa, 0x25, 0xfe, 0x79, 0x23, 0xfd, 0xd1, 0x9d, 0x15, 0xfb, 0x46, 0xda, 0xcd, 0xaa, 0x5a, 0xe3, 0xc3, 0xdc, 0x3d, 0x2a, 0xdf, 0x4d, 0x6c, 0x3f, 0x36, 0xd3, 0x11, 0x59, 0x41, 0x2c, 0xcc, 0x37, 0xd0, 0x19, 0x5c, 0x16, 0xd0, 0x0b, 0x16, 0x30, 0xea, 0xe9, 0x54, 0x89, 0x56, 0xb0, 0x1a, 0x2d, 0x90, 0x4b, 0xe7, 0xe5, 0xa0, 0x7e, 0x2e, 0xdd, 0xaa, 0x07, 0xdc, 0x35, 0x8d, 0x16, 0xa6, 0x60, 0xef, 0xbb, 0xbc, 0x38, 0x7f, 0x4f, 0x10, 0xdf, 0x91, 0x7b, 0x99, 0x4e, 0xd3, 0xcc, 0x07, 0xcd, 0x8a, 0x78, 0x34, 0xf7, 0x74, 0xc2, 0x39, 0xdf, 0x16, 0x10, 0xd0, 0xc7, 0x48, 0xf3, 0x23, 0x1e, 0x15, 0xf3, 0xd9, 0x03, 0x7a, 0x76, 0x27, 0x26, 0xdf, 0xae, 0x74, 0x86, 0x9a, 0x95, 0x25, 0xa1, 0xc5, 0x20, 0xa6, 0x2e, 0xbe, 0x7d, 0x4f, 0xa8, 0x59, 0xed, 0xbf, 0x7a, 0x3c, 0x98, 0x49, 0x63, 0x1d, 0xbf, 0x98, 0x2b, 0xba, 0x1c, 0x0e, 0xfb, 0x55, 0x3b, 0x7a, 0x1a, 0x80, 0x5b, 0xcd, 0xa4, 0x81, 0x65, 0xbe, 0x51, 0xbd, 0xa1, 0x66, 0xe0, 0x96, 0xa4, 0x16, 0xc2, 0xed, 0x3b, 0x50, 0x77, 0xe5, 0xda, 0x88, 0x6a, 0xb8, 0x16, 0xc4, 0x65, 0x12, 0xd1, 0x0d, 0x57, 0xef, 0xec, 0xc6, 0xdf, 0x39, 0xec, 0x9c, 0x2e, 0x72, 0xd5, 0x60, 0x88, 0x0a, 0xeb, 0xc9, 0xb7, 0x25, 0x39, 0x3a, 0xd2, 0xf7, 0x31, 0x8b, 0xef, 0x49, 0x88, 0x87, 0x87, 0x40, 0x70, 0xad, 0xd5, 0xc7, 0xec, 0x53, 0xac, 0x28, 0xed, 0x64, 0xe9, 0x57, 0xe1, 0x68, 0x90, 0x41, 0xd8, 0x41, 0x6a, 0xc9, 0x5e, 0xcc, 0xe9, 0x12, 0xcf, 0x3d, 0xa3, 0xa7, 0xb5, 0x04, 0x53, 0x35, 0x49, 0x03, 0x39, 0x82, 0x66, 0x0e, 0xf5, 0x00, 0x97, 0x2e, 0xf1, 0x9d, 0x67, 0x04, 0xf2, 0x77, 0xb2, 0x99, 0x5b, 0x37, 0xb3, 0x0e, 0x6a, 0x06, 0x76, 0xaf, 0xed, 0xbc, 0xdc, 0xaa, 0x35, 0xe8, 0x37, 0x93, 0x6c, 0x60, 0x90, 0x8b, 0x45, 0xf3, 0x42, 0xbf, 0x3c, 0xe6, 0x67, 0x02, 0xd3, 0x30, 0xdf, 0xa9, 0xb2, 0xaf, 0x73, 0x98, 0xaf, 0xdd, 0xbe, 0x2d, 0x7d, 0x8f, 0xa0, 0x99, 0x1d, 0x78, 0xe7, 0xb9, 0x09, 0xa5, 0xe9, 0xc4, 0x7b, 0xf4, 0xcc, 0xce, 0x21, 0x71, 0x58, 0x2c, 0x15, 0x8d, 0x00, 0x7a, 0xee, 0x78, 0xd0, 0xc4, 0xbf, 0x15, 0xc2, 0xb2, 0x6b, 0x64, 0x1e, 0x95, 0xe7, 0xd5, 0xe2, 0xef, 0x54, 0xaf, 0x1a, 0x7f, 0xed, 0x5e, 0x05, 0x59, 0x1f, 0x45, 0xb8, 0x27, 0x93, 0xc2, 0x5a, 0x20, 0x83, 0x7a, 0xf6, 0xcd, 0x7c, 0xe4, 0x8f, 0xb9, 0x8b, 0x87, 0x5e, 0x0f, 0xbe, 0x15, 0xc0, 0x5c, 0xb6, 0x1c, 0x0b, 0xf5, 0x07, 0x71, 0x94, 0xd9, 0x80, 0xd4, 0x1e, 0x9a, 0x50, 0x02, 0xcb, 0xee, 0xe8, 0x44, 0x25, 0x4d, 0x8f, 0xa3, 0xb8, 0x50, 0xf9, 0xb7, 0xac, 0x42, 0x11, 0x2e, 0x0f, 0xf8, 0x06, 0x64, 0x6a, 0x19, 0x24, 0x1f, 0xec, 0x09, 0x16, 0xe4, 0x11, 0x16, 0xd2, 0x9d, 0x98, 0x1d, 0x76, 0x07, 0xdc, 0xce, 0x2c, 0xaf, 0x2d, 0x20, 0xd0, 0x83, 0x39, 0xec, 0x90, 0xec, 0x48, 0x1d, 0xef, 0x09, 0x34, 0x1f, 0x91, 0x45, 0xa7, 0xbb, 0xc9, 0xd4, 0x13, 0xb9, 0x4d, 0xab, 0xde, 0x88, 0x5c, 0x61, 0xb7, 0x7c, 0x67, 0x16, 0x59, 0x7b, 0xe0, 0x98, 0x92, 0x3c, 0x8d, 0xad, 0x5b, 0xbb, 0x1e, 0xff, 0x92, 0x36, 0xcb, 0x60, 0x6d, 0x96, 0x4d, 0x6d, 0x46, 0x31, 0x2c, 0x1a, 0x0b, 0xb8, 0x1e, 0xd7, 0xaf, 0xba, 0x25, 0x7e, 0xbf, 0x04, 0xeb, 0x32, 0x46, 0x6f, 0x81, 0x79, 0x86, 0x67, 0xc4, 0x6b, 0xcc, 0xd7, 0x6c, 0x23, 0x5c, 0xd3, 0x5a, 0x1c, 0x3b, 0x99, 0x29, 0x95, 0xe1, 0x56, 0xc3, 0x70, 0xab, 0xa4, 0xdd, 0x1a, 0x1e, 0xd2, 0x08, 0xf6, 0x7c, 0x7e, 0x91, 0x6e, 0xaa, 0x82, 0x4d, 0x34, 0xd3, 0xcb, 0xce, 0x2a, 0x35, 0xb3, 0xd5, 0xdc, 0xc7, 0xe3, 0xbe, 0xa7, 0x62, 0x6e, 0x53, 0x99, 0x8f, 0x53, 0xf6, 0xb1, 0xb3, 0xf1, 0x85, 0xf6, 0xe1, 0x09, 0xd9, 0x28, 0xa5, 0xa3, 0x8f, 0x8a, 0x74, 0x69, 0xd7, 0xe3, 0x74, 0x56, 0x9c, 0x60, 0x06, 0xed, 0xda, 0xed, 0xa0, 0xa2, 0x56, 0xa1, 0xb9, 0xc3, 0xf4, 0x4d, 0x6d, 0x43, 0x07, 0x02, 0x7f, 0xdd, 0x3f, 0xc1, 0x95, 0xbe, 0x85, 0xce, 0x4e, 0xeb, 0x0f, 0x91, 0x1c, 0x93, 0xbe, 0xa1, 0xe8, 0x22, 0xac, 0x9b, 0xe0, 0x48, 0x4e, 0x2f, 0xba, 0x98, 0xb4, 0x0c, 0xdf, 0xba, 0xa2, 0x8b, 0xea, 0xc5, 0xf8, 0xce, 0x66, 0x67, 0x87, 0x42, 0xac, 0xc5, 0x3a, 0x15, 0xd2, 0x9e, 0xcf, 0xc2, 0xa9, 0x82, 0xbc, 0x73, 0x12, 0x7b, 0xb3, 0x55, 0xe0, 0xfa, 0x83, 0x6c, 0x3d, 0xe4, 0xea, 0x26, 0xd0, 0x35, 0x26, 0xcf, 0x32, 0x18, 0xd3, 0x5c, 0xfa, 0xa4, 0xe3, 0x2b, 0xcc, 0xf6, 0xbf, 0xee, 0x9f, 0xfe, 0xf1, 0x05, 0x98, 0x86, 0xfe, 0x74, 0xb6, 0xc5, 0xae, 0x40, 0xab, 0x5b, 0x0f, 0xee, 0x10, 0xd9, 0x15, 0x18, 0x4a, 0xde, 0x3c, 0x50, 0x7e, 0x75, 0x37, 0x18, 0x1f, 0x4a, 0x9e, 0x65, 0xd4, 0x9c, 0x5c, 0x7d, 0xb2, 0xbb, 0x20, 0xc7, 0xc1, 0xf6, 0x56, 0x44, 0x42, 0x0c, 0x14, 0x92, 0x7c, 0x72, 0xd5, 0xc9, 0xee, 0x7c, 0x0c, 0xd9, 0x5d, 0x5a, 0x97, 0xe6, 0x49, 0xab, 0xb8, 0x7a, 0x08, 0x28, 0x2c, 0xc3, 0x9c, 0x36, 0x73, 0xf7, 0xa4, 0xb4, 0x99, 0x75, 0xbc, 0xc0, 0xe7, 0xcf, 0xa4, 0x9a, 0x18, 0xec, 0x6f, 0xee, 0xa7, 0x10, 0xfd, 0x24, 0xcc, 0x1f, 0xdd, 0x6f, 0xfe, 0x21, 0x6f, 0xe1, 0x56, 0xc8, 0x4f, 0xde, 0x5d, 0x59, 0x67, 0xf4, 0xa4, 0x94, 0x5f, 0x35, 0x42, 0xc6, 0x64, 0x29, 0xcd, 0xbc, 0x8c, 0x63, 0x41, 0x43, 0xd1, 0x9b, 0x2f, 0x53, 0xec, 0x7b, 0xec, 0xc9, 0xb3, 0x74, 0xd0, 0x1f, 0xd8, 0x15, 0x68, 0x86, 0x70, 0x1d, 0xad, 0xd1, 0x1e, 0x7d, 0x79, 0x7c, 0x45, 0xf2, 0x2c, 0xe9, 0x1e, 0x00, 0xc9, 0xce, 0x88, 0xad, 0xa4, 0xcd, 0x37, 0xb5, 0x42, 0xb3, 0xf1, 0x01, 0xda, 0x69, 0x66, 0xae, 0x32, 0x18, 0x69, 0x66, 0x22, 0xcd, 0xc5, 0x7a, 0xc4, 0xb7, 0xd3, 0xdc, 0xc5, 0x17, 0xd3, 0x66, 0x0a, 0x95, 0x1d, 0x61, 0xe4, 0x80, 0x1a, 0xd1, 0xe4, 0xac, 0xf2, 0x66, 0xe9, 0x4c, 0x69, 0x2e, 0x92, 0xff, 0xd3, 0x5c, 0xd2, 0xba, 0xaf, 0xa1, 0xe8, 0x1e, 0x5b, 0xf2, 0x2c, 0xfb, 0x68, 0x23, 0x88, 0x0a, 0xfb, 0x7c, 0xe0, 0xdd, 0x01, 0xf7, 0x8a, 0xda, 0x9e, 0x5d, 0x81, 0x96, 0x63, 0x06, 0xbb, 0xe8, 0xa2, 0xd1, 0x34, 0xcd, 0xe5, 0xe7, 0x90, 0xdf, 0x28, 0xdd, 0xdd, 0x42, 0x09, 0x9d, 0xfd, 0x19, 0x5b, 0x61, 0xfa, 0xba, 0x23, 0x79, 0x96, 0xa0, 0xea, 0xef, 0xe9, 0x0f, 0x7c, 0x8b, 0xc9, 0x93, 0x24, 0xbb, 0xd9, 0x8d, 0x69, 0x33, 0xab, 0xb7, 0xa5, 0x3f, 0xcd, 0x76, 0xfa, 0xa4, 0x58, 0xf3, 0x54, 0xbc, 0x34, 0xee, 0x3e, 0xb6, 0x2d, 0x7d, 0xab, 0x60, 0x62, 0xb0, 0x02, 0xcd, 0x5b, 0x27, 0x95, 0x80, 0x42, 0x8f, 0x5f, 0x4d, 0xbc, 0x3b, 0x74, 0x26, 0x34, 0x7d, 0x60, 0xc8, 0x21, 0x92, 0xb5, 0x37, 0xc9, 0x36, 0x1b, 0xab, 0x43, 0xac, 0xa7, 0x87, 0x5a, 0x3e, 0x34, 0x25, 0xbc, 0xd5, 0x25, 0x94, 0x1e, 0x7d, 0xd5, 0xa4, 0x79, 0xab, 0x47, 0x28, 0x2e, 0xba, 0x90, 0x36, 0xd3, 0xac, 0x3e, 0xd5, 0xa3, 0x4f, 0xa0, 0x15, 0xc3, 0xef, 0x50, 0xdf, 0xb5, 0x9a, 0x9b, 0x92, 0xe7, 0x10, 0x54, 0x1a, 0x4d, 0x49, 0x7e, 0xa4, 0x12, 0x4c, 0x98, 0x9f, 0x3c, 0x2b, 0x99, 0xad, 0x3b, 0xa5, 0xb9, 0x58, 0xff, 0xd2, 0x48, 0xeb, 0x74, 0x82, 0x14, 0xd7, 0x5d, 0x1d, 0xa0, 0xd8, 0xb4, 0xc6, 0xc6, 0xea, 0xe0, 0x4a, 0x9e, 0xc5, 0xe2, 0xba, 0x87, 0xd7, 0xab, 0xf8, 0xfa, 0x05, 0x78, 0xe3, 0xb5, 0xe2, 0x6b, 0x9b, 0x40, 0xaa, 0x61, 0xff, 0x6a, 0x83, 0x2d, 0x67, 0xcc, 0xb1, 0xfb, 0x0d, 0xa5, 0x79, 0x41, 0xa2, 0x9c, 0xb1, 0xd9, 0x69, 0x33, 0x29, 0xb7, 0x54, 0xac, 0x2f, 0x95, 0x77, 0xc7, 0xa8, 0x3a, 0x3e, 0x75, 0x94, 0x9b, 0x13, 0xca, 0xdc, 0xcb, 0xb4, 0x2f, 0x1b, 0x6c, 0xdf, 0xb4, 0x03, 0xff, 0x0d, 0x7c, 0x26, 0xd8, 0x93, 0xe7, 0x44, 0x4a, 0x61, 0x2e, 0x46, 0xdd, 0x6e, 0xa9, 0x74, 0xea, 0x6d, 0x2f, 0xb6, 0x52, 0xb3, 0x92, 0xee, 0xc2, 0x0c, 0xd3, 0xde, 0x59, 0xab, 0x8e, 0x4a, 0x46, 0xed, 0xe2, 0x16, 0x4c, 0xc9, 0x73, 0x8e, 0x05, 0x23, 0xb5, 0x19, 0x8f, 0xad, 0x63, 0x7c, 0xc0, 0xb2, 0x80, 0xd9, 0x9b, 0x61, 0x1b, 0x67, 0x6b, 0xd9, 0xdd, 0x87, 0xf9, 0x16, 0xb2, 0x8c, 0xc9, 0xc5, 0x11, 0x59, 0x3b, 0xfd, 0x62, 0x72, 0x81, 0xe0, 0xf2, 0x6b, 0xed, 0xb5, 0xd5, 0x41, 0xcf, 0x00, 0xe9, 0x49, 0xf6, 0x36, 0x15, 0x6f, 0x40, 0x78, 0xee, 0x2e, 0x73, 0xc2, 0xa9, 0xae, 0x53, 0xcb, 0x84, 0xb2, 0xa2, 0x0b, 0xc9, 0xb3, 0x08, 0x77, 0x8b, 0xc1, 0xe2, 0x82, 0x42, 0x4b, 0x09, 0x98, 0x11, 0x7b, 0x36, 0x43, 0x99, 0x39, 0xd1, 0x44, 0xab, 0xca, 0x1b, 0x84, 0xbb, 0xa5, 0xbd, 0x43, 0xc5, 0xd7, 0x1c, 0x20, 0xdd, 0x8c, 0x46, 0xd4, 0x91, 0x93, 0x9b, 0xc1, 0x4b, 0xf3, 0x32, 0x42, 0x91, 0xbb, 0x67, 0x4f, 0x4f, 0xb3, 0xc2, 0xbd, 0x4c, 0x28, 0xfd, 0x86, 0x03, 0xf8, 0x5e, 0xd4, 0x33, 0x5a, 0x66, 0x4d, 0xbb, 0x90, 0xf8, 0x33, 0xdd, 0x6d, 0xc7, 0x7e, 0xe4, 0xf6, 0x67, 0x00, 0xfa, 0xe4, 0x2e, 0x48, 0x45, 0xfd, 0x23, 0x97, 0x4a, 0x60, 0xc6, 0xd1, 0xd4, 0xd4, 0xae, 0x42, 0xd9, 0xe9, 0xa7, 0x7f, 0x6c, 0x83, 0xdc, 0xd1, 0x16, 0xde, 0xb1, 0x28, 0x76, 0xf6, 0xd8, 0x51, 0xa4, 0x0f, 0xe7, 0x72, 0x6f, 0xa6, 0x50, 0x4e, 0xe7, 0xbb, 0x3a, 0x78, 0x0a, 0x55, 0xc5, 0x87, 0x6e, 0x75, 0xb3, 0x15, 0x2f, 0xbe, 0xb0, 0x15, 0xc2, 0x1e, 0x1c, 0x9d, 0xcd, 0x66, 0x9a, 0xef, 0x4d, 0xa4, 0x3d, 0xc6, 0x26, 0x25, 0xb3, 0x92, 0xb7, 0xa3, 0x5c, 0xcb, 0x93, 0x5e, 0x92, 0xf8, 0xb3, 0x63, 0xc1, 0xe2, 0x8f, 0x33, 0xb0, 0x95, 0x4c, 0x15, 0x22, 0x5f, 0x1d, 0x28, 0x9c, 0xe0, 0x1d, 0xc8, 0x06, 0xba, 0xab, 0x2d, 0xf1, 0x67, 0x6f, 0x2f, 0xaf, 0x2e, 0xbb, 0x77, 0x59, 0x07, 0x28, 0x91, 0x02, 0x13, 0x9f, 0xec, 0x0f, 0xd4, 0xf8, 0x55, 0x50, 0x8d, 0x65, 0x7d, 0x60, 0xa9, 0x73, 0x69, 0xcb, 0x11, 0x33, 0xaf, 0x5c, 0x46, 0xfe, 0x42, 0xd9, 0xd1, 0x83, 0x84, 0x9b, 0xec, 0x64, 0xb1, 0xf6, 0x81, 0x65, 0x86, 0xb2, 0xc5, 0x50, 0x30, 0xc6, 0x50, 0xfc, 0xe6, 0x2b, 0x6f, 0xfe, 0xa1, 0xfc, 0x52, 0xf2, 0xac, 0xf2, 0x8f, 0x77, 0x83, 0x58, 0x50, 0xdd, 0x65, 0x9a, 0xf7, 0xdb, 0x2b, 0x58, 0x67, 0xeb, 0x5f, 0xfe, 0xf8, 0x97, 0x3f, 0x4e, 0xbb, 0x76, 0x12, 0xb0, 0xe4, 0x93, 0x01, 0xe5, 0x5e, 0x6f, 0x16, 0xe2, 0xeb, 0x0e, 0x0b, 0xa7, 0xe3, 0x69, 0x96, 0x23, 0xbe, 0x86, 0xff, 0x82, 0xad, 0x5f, 0x8d, 0x39, 0x79, 0xf6, 0xb3, 0xfd, 0x53, 0x4f, 0x1b, 0xca, 0x8b, 0xae, 0x40, 0xd9, 0xb4, 0x2b, 0x50, 0x6f, 0xb7, 0xf5, 0xcf, 0xe9, 0xb7, 0x59, 0xfb, 0x7e, 0x7b, 0xc8, 0x73, 0xfd, 0xb1, 0x43, 0x62, 0x1e, 0x9b, 0xbd, 0xe3, 0x99, 0xf5, 0x3a, 0x52, 0x66, 0xf1, 0xdf, 0x33, 0x4a, 0x72, 0x46, 0xb7, 0x43, 0x1e, 0xe7, 0x2e, 0xca, 0x09, 0xb6, 0x81, 0x9f, 0xdb, 0xdf, 0x15, 0x0a, 0x9d, 0x59, 0x45, 0x63, 0x61, 0x75, 0xc0, 0x73, 0xf5, 0xcc, 0xca, 0xbc, 0x90, 0xbb, 0xa7, 0x76, 0xd5, 0xee, 0x9e, 0xe6, 0x83, 0xb2, 0x5c, 0x9a, 0xcf, 0x4e, 0xca, 0xa2, 0xd9, 0xfe, 0x2c, 0xb2, 0xac, 0x37, 0xa3, 0x7c, 0xc3, 0xce, 0x55, 0x23, 0x98, 0xaa, 0x36, 0x45, 0x4e, 0x27, 0x8c, 0x12, 0x95, 0x6d, 0x09, 0xf8, 0x5e, 0xa9, 0x53, 0xba, 0xa9, 0xdf, 0x07, 0xef, 0xdd, 0x1b, 0x0e, 0x67, 0xf0, 0xb3, 0x57, 0xfa, 0xa1, 0x23, 0x8c, 0x12, 0xca, 0x62, 0xcc, 0x2f, 0xd5, 0x1d, 0x7c, 0xe9, 0xe5, 0x56, 0xc5, 0xae, 0x80, 0xd7, 0xb3, 0x33, 0xd8, 0xaa, 0x65, 0xf2, 0xe7, 0x6b, 0xc4, 0x39, 0xdf, 0x68, 0x54, 0x2f, 0x16, 0xcd, 0x74, 0x0a, 0xe3, 0xee, 0x80, 0x37, 0x25, 0xe6, 0xef, 0x46, 0x7f, 0xf7, 0x7c, 0xf5, 0x1e, 0x51, 0xdb, 0xa6, 0xde, 0x19, 0x44, 0x0e, 0x31, 0x5f, 0xbd, 0x4f, 0x54, 0xe0, 0xef, 0x7e, 0x67, 0x97, 0x37, 0x05, 0x35, 0x96, 0x34, 0x63, 0x02, 0xcb, 0x55, 0x29, 0xa6, 0x1a, 0x41, 0xca, 0x5f, 0x54, 0xa1, 0x8b, 0x95, 0xc8, 0x0f, 0xee, 0xa5, 0xb5, 0x2b, 0x85, 0x84, 0xbd, 0x4b, 0x9b, 0x43, 0x95, 0x7f, 0x53, 0x74, 0x4a, 0xb6, 0x01, 0x74, 0x87, 0x1d, 0xd9, 0x02, 0x11, 0x05, 0x45, 0xeb, 0xa0, 0x6c, 0x53, 0xf8, 0x59, 0x0d, 0xfc, 0x8b, 0xca, 0xb8, 0xd9, 0x2b, 0x7f, 0xfc, 0x07, 0x56, 0x66, 0x48, 0x38, 0x46, 0xa5, 0x2e, 0xbe, 0x04, 0xdc, 0x8e, 0x15, 0xad, 0xca, 0x5d, 0x74, 0x76, 0xcd, 0xee, 0x9d, 0x2b, 0x5a, 0xd9, 0xad, 0x3d, 0x44, 0x1b, 0xfc, 0xbf, 0x1e, 0x0b, 0x66, 0x73, 0x6f, 0x07, 0x0d, 0xb6, 0x37, 0xfb, 0xb0, 0x35, 0x91, 0xab, 0x96, 0x5f, 0x52, 0x2f, 0x46, 0x7a, 0xb4, 0x76, 0x80, 0xce, 0x98, 0xbe, 0xab, 0x43, 0xbb, 0x29, 0xb4, 0x3b, 0xd8, 0xec, 0xc4, 0x81, 0x79, 0x8c, 0x59, 0xf1, 0xee, 0xf3, 0x3a, 0x65, 0xa1, 0x31, 0x7d, 0xe7, 0xea, 0xa2, 0x29, 0x65, 0xe9, 0x3b, 0x69, 0x4e, 0xd2, 0x84, 0x7d, 0xec, 0xee, 0x65, 0x34, 0x5b, 0x89, 0xe3, 0xb8, 0xea, 0xae, 0xad, 0xe9, 0x3b, 0xc9, 0x3d, 0xbe, 0x08, 0xd2, 0x8c, 0xf3, 0xd3, 0x77, 0xf9, 0xb5, 0xeb, 0x56, 0x9f, 0x79, 0x7a, 0x4a, 0x49, 0xfa, 0xce, 0x8a, 0x6b, 0xc6, 0xab, 0xe3, 0x2b, 0xd3, 0x77, 0x89, 0x5a, 0x82, 0xf4, 0xee, 0xf6, 0x15, 0xf3, 0xd3, 0x77, 0x1e, 0x0f, 0x8e, 0xb7, 0xa7, 0xef, 0xaa, 0x5e, 0xc1, 0xd6, 0x4e, 0x56, 0x8b, 0xc0, 0x0f, 0xb2, 0x71, 0x7d, 0xce, 0x6e, 0x5a, 0x53, 0x5c, 0x1d, 0x2b, 0xdf, 0xb1, 0x20, 0x95, 0x27, 0x23, 0x5a, 0x1e, 0xc2, 0x2e, 0x96, 0xc9, 0x25, 0x61, 0x18, 0xe1, 0x4d, 0x54, 0x2f, 0xce, 0x56, 0xbc, 0xfb, 0xc2, 0xa3, 0x08, 0x73, 0x4a, 0xb9, 0x54, 0x2e, 0x66, 0x71, 0xb9, 0x9c, 0xca, 0xc2, 0x5c, 0x71, 0xe5, 0xd2, 0x49, 0xe5, 0x5a, 0x21, 0x95, 0xab, 0xf8, 0x23, 0x2c, 0x57, 0x05, 0x96, 0x2b, 0x23, 0x1e, 0x5a, 0x7c, 0xf9, 0x74, 0xd3, 0xe8, 0xbe, 0x40, 0xf5, 0x5e, 0xca, 0x7d, 0x89, 0xf6, 0xc9, 0x10, 0xc6, 0x30, 0xaa, 0xf7, 0xec, 0x0b, 0x36, 0xdb, 0x47, 0xe6, 0x69, 0xc0, 0x9c, 0xee, 0x64, 0x79, 0x32, 0x57, 0x5c, 0x9e, 0x06, 0x29, 0xcf, 0x55, 0x52, 0x9e, 0xe5, 0x9f, 0x60, 0x9e, 0xd3, 0x30, 0x4f, 0xcd, 0xb0, 0x7c, 0x10, 0x7e, 0x5b, 0xca, 0x4e, 0xc4, 0xf5, 0x83, 0x2b, 0x30, 0xc7, 0x24, 0x23, 0xff, 0xee, 0xf6, 0x1e, 0x82, 0x5e, 0x12, 0x57, 0xa3, 0xee, 0x5b, 0xd6, 0x48, 0xc2, 0x4b, 0xf0, 0xc2, 0x53, 0x53, 0xec, 0xe9, 0x3b, 0x3b, 0x3f, 0x3e, 0x15, 0x1c, 0x5f, 0x86, 0xd0, 0x81, 0xdb, 0xfe, 0x60, 0x05, 0x41, 0x7a, 0x77, 0xdb, 0x52, 0x84, 0x53, 0x13, 0x64, 0x37, 0xc7, 0x52, 0x2e, 0xea, 0x9d, 0x2b, 0x50, 0xc7, 0x3a, 0xc0, 0xea, 0xd5, 0x17, 0xad, 0xd3, 0xbe, 0xff, 0x3b, 0x75, 0xea, 0xbc, 0x6d, 0x6f, 0xb0, 0xb9, 0xe4, 0x7f, 0x56, 0xa7, 0xb6, 0x4f, 0x90, 0x03, 0xef, 0x8f, 0xaf, 0xcd, 0x4c, 0xac, 0x0d, 0x1c, 0x62, 0x35, 0x38, 0x10, 0xad, 0xc1, 0xfe, 0xff, 0x4b, 0x35, 0x48, 0xc2, 0x1a, 0x38, 0x8b, 0xdf, 0x0f, 0x7f, 0xfa, 0x3f, 0xaa, 0xc3, 0xdf, 0x25, 0x88, 0x62, 0x5a, 0x04, 0x92, 0x54, 0x93, 0x39, 0x18, 0x37, 0x7d, 0x17, 0x72, 0x03, 0x0d, 0x72, 0x83, 0x54, 0xe2, 0x06, 0x7e, 0xa5, 0xa8, 0x25, 0x5e, 0x40, 0x3d, 0x59, 0x54, 0x12, 0x2f, 0xf0, 0x8f, 0x5a, 0xff, 0x1a, 0x71, 0x02, 0x43, 0x85, 0x90, 0xf0, 0xbb, 0x57, 0x9b, 0x61, 0xd0, 0x1c, 0xb1, 0x82, 0x88, 0x71, 0x03, 0xe7, 0xd6, 0xf4, 0xcd, 0x5e, 0xe0, 0xf7, 0xad, 0x7f, 0x2d, 0x66, 0x27, 0xf4, 0x04, 0x59, 0x41, 0x9c, 0xfd, 0xe9, 0xdb, 0x82, 0x31, 0x7d, 0x4b, 0xff, 0x0a, 0xc4, 0xd1, 0x14, 0x15, 0xa0, 0x7b, 0x83, 0x76, 0x4a, 0xc4, 0x46, 0xc6, 0xbd, 0xc2, 0x84, 0xa5, 0x74, 0x76, 0x7b, 0x9a, 0x25, 0x1b, 0x35, 0x83, 0x0d, 0x79, 0x35, 0x72, 0xda, 0x36, 0xed, 0x86, 0x20, 0xf2, 0x96, 0x31, 0x3b, 0x97, 0x36, 0x97, 0x19, 0xe0, 0xd2, 0xb3, 0xcb, 0xa8, 0xc6, 0xc5, 0xe9, 0x3b, 0x71, 0x34, 0x4d, 0x33, 0xa2, 0xa6, 0x6a, 0x28, 0xb9, 0xb3, 0xcb, 0x88, 0xd2, 0xa0, 0x81, 0xdc, 0xc5, 0x84, 0x55, 0xfa, 0x1a, 0x6f, 0x47, 0xad, 0x1f, 0xe1, 0xb5, 0x6b, 0x37, 0x86, 0xce, 0x6f, 0xa1, 0x55, 0x5a, 0x43, 0x11, 0xe1, 0x15, 0xfb, 0xb6, 0xe6, 0xd2, 0xd6, 0x20, 0xc2, 0x38, 0xb6, 0x14, 0xdd, 0x29, 0x64, 0xc9, 0xa3, 0x02, 0x03, 0xc7, 0x66, 0x0a, 0xb9, 0x13, 0x5d, 0xf8, 0xb7, 0xd2, 0x50, 0x8c, 0x38, 0xc1, 0x9c, 0x3b, 0xb5, 0x9b, 0x43, 0xc8, 0xb3, 0xc6, 0x20, 0xcf, 0x73, 0x98, 0x13, 0x2e, 0x3d, 0xbf, 0x9a, 0x72, 0x46, 0x6e, 0x63, 0xc2, 0x9c, 0xb3, 0x29, 0xb7, 0xf2, 0x3b, 0x97, 0xd5, 0x22, 0x5f, 0x34, 0x93, 0xbb, 0x8c, 0x72, 0xa6, 0xaf, 0xf1, 0xa5, 0xc8, 0x8b, 0xa8, 0xad, 0xb4, 0x9b, 0x97, 0x5e, 0xfe, 0x37, 0x2a, 0xa9, 0xc1, 0x5e, 0xfe, 0x49, 0xad, 0xdc, 0xa2, 0x97, 0x9e, 0x5d, 0x4e, 0x2d, 0xba, 0x94, 0xf0, 0x4f, 0xfc, 0x44, 0x7f, 0x6f, 0x06, 0x78, 0x7d, 0xa4, 0xf3, 0xff, 0xb4, 0x69, 0xed, 0x4b, 0x12, 0x67, 0xa1, 0x32, 0x4b, 0x72, 0xd8, 0xae, 0x60, 0xb3, 0xc3, 0x00, 0xef, 0x46, 0xeb, 0xcc, 0xf8, 0x1c, 0xe5, 0x56, 0x7a, 0x67, 0x17, 0xa3, 0xa3, 0x68, 0x9d, 0xe3, 0x5b, 0x1a, 0xd3, 0x07, 0xe5, 0x3a, 0x63, 0xce, 0x19, 0x11, 0x5a, 0x62, 0xb5, 0x96, 0x39, 0x5d, 0xb7, 0xa6, 0x9b, 0xdd, 0x05, 0x96, 0xc2, 0x66, 0x1b, 0xc8, 0x1a, 0x09, 0x05, 0x05, 0x31, 0x55, 0x50, 0x7c, 0xd8, 0x23, 0xd9, 0x0b, 0x1a, 0xc8, 0xd6, 0x6f, 0x12, 0x07, 0x06, 0x38, 0x11, 0x40, 0x9c, 0xbc, 0x00, 0xf9, 0x11, 0xac, 0x50, 0x0e, 0x8b, 0xb5, 0x4f, 0x30, 0xcc, 0xec, 0xc1, 0xf2, 0x99, 0x12, 0xde, 0x7d, 0x6e, 0x25, 0x95, 0xaf, 0x54, 0x2a, 0x9f, 0x8c, 0x8d, 0xa5, 0x54, 0x22, 0xb9, 0xac, 0x23, 0xca, 0x87, 0xa9, 0x83, 0x17, 0xa3, 0x98, 0x89, 0x96, 0x4f, 0xc2, 0x0c, 0x2b, 0x1f, 0xbb, 0x57, 0x34, 0x57, 0x25, 0x63, 0x66, 0xf3, 0xcc, 0x4d, 0x2f, 0x31, 0x6a, 0xd9, 0x45, 0xb4, 0xc0, 0x77, 0x13, 0x66, 0x76, 0x06, 0x9a, 0x1d, 0x7a, 0xc5, 0x3b, 0xdb, 0xba, 0x29, 0x67, 0xa4, 0x69, 0xb2, 0x63, 0x96, 0xb1, 0xc1, 0xec, 0xdc, 0xf5, 0xe4, 0xb6, 0x53, 0xce, 0x11, 0x5b, 0x77, 0x39, 0x7d, 0xe0, 0x2c, 0xeb, 0x63, 0x44, 0x0d, 0x2a, 0x39, 0xe7, 0x77, 0x58, 0x2f, 0x3b, 0x16, 0x20, 0xea, 0x7f, 0xe9, 0x42, 0xfa, 0xe6, 0x06, 0xb8, 0x39, 0xab, 0xf4, 0xa2, 0x82, 0x64, 0x2b, 0x1c, 0xd1, 0x28, 0x1d, 0x8e, 0x80, 0xda, 0xf5, 0x2f, 0x63, 0xfd, 0x53, 0x5f, 0xea, 0x6b, 0xb6, 0x1b, 0xf8, 0x77, 0xa2, 0x2d, 0x12, 0xb1, 0xb0, 0x1f, 0xd3, 0x15, 0xb5, 0xae, 0x8f, 0xcb, 0x93, 0x38, 0xbc, 0x4f, 0xbb, 0x76, 0xc5, 0x69, 0xd6, 0xef, 0x8a, 0x3f, 0xca, 0x90, 0x38, 0xbc, 0xe6, 0x1d, 0xd6, 0xdf, 0xa4, 0x1c, 0xa5, 0x71, 0x73, 0xbc, 0x2d, 0xbd, 0x57, 0xea, 0x49, 0x64, 0x41, 0x50, 0x7c, 0x01, 0xd6, 0xa1, 0xfe, 0x90, 0x3e, 0xbe, 0x13, 0x6b, 0x7f, 0x24, 0x79, 0x6c, 0xf1, 0x85, 0xa4, 0x65, 0xf8, 0xad, 0x63, 0xdf, 0x67, 0x92, 0x4d, 0xc5, 0x17, 0xd4, 0x8b, 0xf1, 0x3b, 0x9b, 0x7d, 0x5f, 0x4f, 0xce, 0xb3, 0x23, 0x34, 0xfb, 0x56, 0x84, 0xa5, 0x22, 0x38, 0x94, 0xda, 0x5a, 0xc8, 0x8d, 0xb5, 0xdf, 0x5f, 0x1d, 0xa8, 0x5d, 0xe1, 0xb9, 0x41, 0xa9, 0xb5, 0x85, 0x10, 0xf7, 0xad, 0x5e, 0x8c, 0xdf, 0x63, 0x22, 0xdf, 0x53, 0x3a, 0x81, 0x53, 0xac, 0xc3, 0xf4, 0x5b, 0xf1, 0x79, 0x1a, 0x9f, 0xed, 0xf8, 0x48, 0xf7, 0x6f, 0x92, 0x94, 0xa2, 0xa5, 0xdb, 0x22, 0xe9, 0xac, 0x1c, 0xc6, 0xb1, 0xe9, 0x48, 0xa1, 0xb1, 0xed, 0xb7, 0x21, 0x65, 0x22, 0x1e, 0x86, 0x53, 0xa6, 0x1e, 0x6b, 0x7f, 0x07, 0xa3, 0x4b, 0xe6, 0xba, 0x15, 0x55, 0xca, 0x3c, 0x54, 0xe6, 0x3f, 0x9a, 0x08, 0x07, 0x25, 0x3c, 0xb0, 0x38, 0x2a, 0x84, 0x9b, 0x15, 0x85, 0xb5, 0x35, 0xfd, 0x57, 0xc3, 0xa1, 0x89, 0xa9, 0xce, 0x60, 0x6b, 0xda, 0xc8, 0x70, 0xca, 0x21, 0x82, 0x01, 0xbf, 0x0a, 0x61, 0xf5, 0xea, 0x23, 0x31, 0x02, 0xc4, 0x0b, 0x72, 0x80, 0xdc, 0x79, 0x70, 0x7a, 0xda, 0x1d, 0x8c, 0x53, 0xd0, 0x57, 0x3a, 0x94, 0x25, 0xc4, 0xbe, 0xca, 0x8a, 0x4e, 0x57, 0xdc, 0x11, 0x8c, 0xf0, 0x0d, 0x31, 0x96, 0xc3, 0x4f, 0x22, 0xf0, 0xab, 0x03, 0xce, 0x80, 0xe7, 0x82, 0x74, 0x27, 0x18, 0x9d, 0x6c, 0xc4, 0xce, 0x1c, 0xc7, 0x12, 0xfb, 0x6f, 0x43, 0x0d, 0xa9, 0x8c, 0x4e, 0x61, 0xa7, 0x93, 0x97, 0xe2, 0xa9, 0x91, 0xd1, 0x42, 0xe8, 0x56, 0x54, 0x11, 0xa5, 0xc4, 0x9f, 0x4f, 0x29, 0x62, 0xd8, 0x08, 0x30, 0x6c, 0xa4, 0xf8, 0xf9, 0x77, 0x9e, 0xe9, 0x22, 0x7c, 0x60, 0x2c, 0x86, 0xe9, 0x6f, 0xc1, 0xd9, 0x9f, 0x5c, 0xd6, 0x45, 0xe8, 0x6f, 0x3f, 0x52, 0x0a, 0xf9, 0x5c, 0x7c, 0xe9, 0x65, 0xc4, 0xfd, 0x08, 0xae, 0x20, 0xd1, 0xe0, 0x3f, 0x94, 0x32, 0x18, 0x47, 0x88, 0x4a, 0x19, 0xc3, 0xf8, 0x01, 0xab, 0x89, 0x76, 0x47, 0xc0, 0x63, 0x8a, 0x96, 0x1c, 0x71, 0x7b, 0xab, 0xb2, 0x47, 0xf0, 0x2c, 0x1a, 0xdb, 0x46, 0x61, 0x1f, 0xd4, 0x8d, 0x8c, 0xcf, 0xe2, 0xd8, 0xb4, 0x28, 0x99, 0x51, 0x6e, 0xf7, 0x6f, 0x95, 0x61, 0x27, 0x1f, 0xdb, 0x9a, 0xde, 0xbb, 0x2e, 0xd0, 0xa6, 0x42, 0xc9, 0x13, 0x38, 0xfd, 0xff, 0x1f, 0x6b, 0x5f, 0x85, 0x35, 0xdf, 0x28, 0xea, 0xc9, 0xfa, 0x71, 0x86, 0x71, 0x6c, 0x26, 0xb4, 0x90, 0xed, 0x4b, 0xb6, 0x48, 0xe7, 0xf2, 0xd3, 0x69, 0x4e, 0xce, 0x6d, 0x10, 0x6a, 0xa5, 0x3d, 0xc9, 0x6e, 0x1f, 0xdf, 0xfb, 0x0c, 0x98, 0x3d, 0x55, 0x34, 0xf7, 0xe2, 0x17, 0x84, 0xc2, 0x4f, 0xc2, 0x7d, 0x3f, 0x64, 0x27, 0x31, 0x28, 0x9c, 0x55, 0x1e, 0x6b, 0x75, 0xb0, 0xb6, 0xc7, 0xab, 0x38, 0xd3, 0x23, 0x5e, 0x76, 0x36, 0xc1, 0x2e, 0x8f, 0x1e, 0x7f, 0xf7, 0x78, 0xc6, 0xe2, 0xef, 0x41, 0x4f, 0x46, 0xd1, 0x45, 0x2e, 0xd5, 0x37, 0xae, 0x0c, 0x30, 0x9e, 0x06, 0x39, 0x41, 0x8f, 0xe7, 0x7a, 0x64, 0x06, 0xfd, 0xeb, 0x36, 0x30, 0x3b, 0x9a, 0x92, 0xd3, 0xe9, 0x4c, 0xaf, 0x2b, 0x76, 0xd7, 0x7a, 0x74, 0xeb, 0xe8, 0x1c, 0x2f, 0x8b, 0x29, 0x39, 0xd3, 0xd1, 0x44, 0xa7, 0x6d, 0x57, 0x0c, 0x7c, 0x52, 0xe8, 0xda, 0x80, 0xdf, 0x06, 0x47, 0x53, 0xd2, 0x32, 0x79, 0x96, 0xde, 0x88, 0xf1, 0xb2, 0x29, 0x1e, 0x9d, 0xd0, 0xf4, 0xc4, 0xa7, 0xcc, 0x12, 0x82, 0xce, 0x74, 0x1b, 0x4f, 0x3a, 0x1d, 0xff, 0xaf, 0xc4, 0xd5, 0x9d, 0xa8, 0xd5, 0x79, 0x54, 0xd5, 0x3d, 0x7e, 0x7e, 0x47, 0x8f, 0xe7, 0x2c, 0x72, 0x2a, 0xae, 0xfc, 0x23, 0xd4, 0x59, 0x2e, 0xa6, 0x3f, 0x5d, 0xfc, 0xd1, 0xee, 0x94, 0x09, 0x15, 0xe9, 0x4f, 0xfb, 0xd4, 0xfd, 0x2b, 0xce, 0xf7, 0xf8, 0xd5, 0xc7, 0x50, 0xb3, 0x3c, 0xbf, 0xa2, 0x37, 0x58, 0xaf, 0x11, 0x35, 0xba, 0x84, 0x59, 0x41, 0x81, 0x43, 0xed, 0x8b, 0x17, 0x38, 0x5d, 0x71, 0xed, 0x8a, 0xde, 0x15, 0x0d, 0x63, 0x9d, 0xdd, 0xde, 0x4c, 0x66, 0xa7, 0x27, 0xdd, 0x90, 0x5c, 0x43, 0xab, 0x04, 0x84, 0x03, 0x1f, 0xe9, 0x1a, 0x19, 0xed, 0x0a, 0x9a, 0x9f, 0xf7, 0x2a, 0x7b, 0x83, 0x1e, 0x80, 0x1e, 0xc1, 0x84, 0xf2, 0xcf, 0x6d, 0xbb, 0x03, 0xcd, 0x95, 0x3a, 0xbe, 0x26, 0x28, 0x69, 0xc9, 0x06, 0x0e, 0xb9, 0x78, 0x53, 0xfa, 0xce, 0x7b, 0x89, 0x8b, 0x47, 0xd6, 0x42, 0x18, 0x17, 0x67, 0xae, 0x6d, 0x52, 0xeb, 0xb1, 0xf5, 0x0a, 0x13, 0xe3, 0x5e, 0x81, 0xf3, 0x3f, 0xbf, 0x17, 0x29, 0xcf, 0xff, 0x09, 0x9b, 0xeb, 0xda, 0x25, 0xa6, 0xe7, 0xf0, 0x35, 0x45, 0x12, 0x2c, 0xa4, 0xc0, 0x26, 0xa2, 0xc0, 0x09, 0x48, 0x81, 0xb4, 0x47, 0xec, 0x89, 0x26, 0xfa, 0x7d, 0xfc, 0x22, 0x95, 0x8c, 0x9d, 0xe2, 0xac, 0x11, 0x21, 0x5c, 0xcf, 0xe0, 0xdc, 0xb6, 0x8b, 0x95, 0xa2, 0xf6, 0x4b, 0x4a, 0xc1, 0xac, 0x5e, 0xa4, 0xb1, 0x84, 0x5c, 0x5f, 0x5a, 0x8a, 0x8e, 0x4f, 0x4e, 0x06, 0x26, 0x94, 0x48, 0xa5, 0xa8, 0xbd, 0x45, 0x29, 0xdc, 0x3d, 0x06, 0x6c, 0x1b, 0x5d, 0x53, 0x72, 0x26, 0xb3, 0x57, 0xa2, 0xfa, 0x27, 0x63, 0xfd, 0x5d, 0xcc, 0x22, 0x3a, 0x2c, 0xc5, 0x37, 0x72, 0xef, 0x6c, 0xef, 0xa1, 0xbc, 0x4b, 0xa4, 0xbc, 0x0d, 0x98, 0xe3, 0x9d, 0xdd, 0x94, 0x1f, 0x73, 0x8d, 0xc8, 0x1b, 0xe5, 0xc7, 0xc0, 0x05, 0x09, 0x03, 0x9f, 0x46, 0x30, 0xa0, 0x2c, 0x8a, 0xc0, 0x92, 0xf2, 0x9e, 0xc5, 0xf2, 0x8e, 0xe6, 0x46, 0xf7, 0xb6, 0x27, 0xfc, 0x8f, 0x73, 0xd1, 0x12, 0x94, 0x2f, 0xc0, 0xd7, 0x20, 0xfc, 0x99, 0x3a, 0xd5, 0x77, 0x82, 0xff, 0xc3, 0xba, 0x5c, 0x93, 0x72, 0xf1, 0x01, 0x49, 0x1a, 0x4f, 0x9c, 0xa1, 0xbb, 0xaa, 0x72, 0x54, 0xdf, 0x19, 0x86, 0xd1, 0x5a, 0x96, 0xab, 0x78, 0x4a, 0x27, 0x51, 0x51, 0xb0, 0x79, 0x76, 0x07, 0xd0, 0x3e, 0x34, 0x65, 0x37, 0x51, 0xf5, 0xc9, 0x6e, 0x69, 0x66, 0x51, 0x92, 0x4b, 0x4c, 0x0a, 0x94, 0x86, 0xa8, 0x1c, 0x24, 0x0d, 0x61, 0x39, 0xc8, 0x6e, 0xeb, 0x2e, 0x26, 0x0b, 0x31, 0xd7, 0x36, 0x89, 0xc3, 0x90, 0x3d, 0x0d, 0x41, 0x63, 0x92, 0xd0, 0xd3, 0x54, 0x66, 0x6c, 0xcf, 0x20, 0x6b, 0x4f, 0xc3, 0x97, 0xc3, 0x46, 0x6d, 0x80, 0xda, 0x97, 0xf6, 0x04, 0xec, 0x72, 0x07, 0x5e, 0xec, 0x6b, 0x81, 0x70, 0x4b, 0x39, 0x52, 0xbc, 0x25, 0x89, 0xac, 0x42, 0xa7, 0x0d, 0x5c, 0x6d, 0x71, 0x3d, 0x5e, 0x71, 0x11, 0x7b, 0x63, 0x02, 0x9b, 0x9b, 0x7b, 0xdc, 0x42, 0x3b, 0x80, 0x91, 0x02, 0xaf, 0xd5, 0xb3, 0x3b, 0x69, 0x61, 0xf0, 0x8c, 0xbd, 0xca, 0x8d, 0xfd, 0x9c, 0xad, 0xba, 0x8f, 0xf5, 0x7c, 0x4c, 0xb3, 0xb4, 0x56, 0x92, 0x0b, 0xaa, 0x58, 0xef, 0xbf, 0x41, 0xb3, 0xb5, 0x52, 0x0c, 0xff, 0x18, 0xe4, 0x6a, 0xd7, 0xee, 0x95, 0xe4, 0x02, 0xec, 0x87, 0xf8, 0x3c, 0x8d, 0xcf, 0x76, 0x7c, 0x36, 0x3b, 0x43, 0xde, 0x32, 0x46, 0x8b, 0x2a, 0xb2, 0x94, 0x8a, 0xf6, 0x9c, 0x6d, 0x12, 0x27, 0x8b, 0xf5, 0x1d, 0x1c, 0xab, 0x03, 0xad, 0x69, 0x23, 0xc3, 0x99, 0x6d, 0x07, 0xd6, 0x02, 0x21, 0xed, 0xa2, 0xfb, 0x65, 0x69, 0x0d, 0x2b, 0xba, 0x5b, 0xd1, 0x82, 0xb2, 0xc6, 0xfc, 0xf4, 0xcd, 0xfa, 0xf9, 0xe9, 0x5b, 0xfe, 0xf4, 0xda, 0xbd, 0xc1, 0x4d, 0x20, 0x7f, 0x6d, 0xb8, 0x23, 0x40, 0x36, 0x79, 0xc8, 0x81, 0x37, 0x3b, 0x83, 0x1e, 0x6d, 0x7f, 0x40, 0x6f, 0xfb, 0x53, 0x5f, 0xe9, 0xd5, 0xad, 0xe0, 0x46, 0x5e, 0x24, 0xce, 0x71, 0xa3, 0xc4, 0x52, 0x1d, 0x2c, 0x65, 0xba, 0x86, 0x36, 0x27, 0xa2, 0x4f, 0x28, 0x99, 0x6d, 0x01, 0xc5, 0xfc, 0xd3, 0xeb, 0x91, 0xb8, 0x9a, 0xa0, 0x24, 0xf5, 0x96, 0x46, 0xa4, 0xde, 0x1c, 0x94, 0x29, 0xb4, 0x1f, 0xae, 0xd0, 0x17, 0xfd, 0x29, 0x62, 0x95, 0x6f, 0x22, 0xab, 0xfc, 0x18, 0xfc, 0xa4, 0x65, 0xc8, 0xe5, 0xc9, 0x2a, 0x7f, 0x45, 0x64, 0xa5, 0x91, 0xdd, 0xeb, 0xf6, 0xf0, 0x7f, 0x7d, 0xef, 0x68, 0x74, 0xdf, 0xe8, 0x3d, 0xa5, 0x57, 0x20, 0x4d, 0x5a, 0xf7, 0xed, 0x9c, 0x23, 0xdf, 0x9b, 0x5a, 0x16, 0xdb, 0x33, 0xda, 0xf9, 0x56, 0x64, 0xcf, 0xe8, 0x9a, 0x6c, 0xb6, 0x67, 0x34, 0x53, 0xda, 0x33, 0xea, 0xa3, 0x3b, 0x06, 0xb3, 0x7c, 0x9f, 0xf7, 0x86, 0x3c, 0x19, 0xce, 0x17, 0x40, 0xeb, 0xd5, 0x8a, 0xda, 0xf8, 0xfd, 0xa3, 0x22, 0xdf, 0x76, 0x33, 0x7e, 0x0f, 0xa9, 0xeb, 0x61, 0xb6, 0x23, 0x77, 0xb2, 0x6b, 0x91, 0xef, 0x01, 0xd7, 0x22, 0xb2, 0x5b, 0x7b, 0xec, 0x0a, 0x28, 0x8e, 0x1e, 0x92, 0x6e, 0x45, 0xfd, 0xd9, 0x4c, 0xe9, 0x56, 0x54, 0x8b, 0x85, 0xad, 0x8e, 0x68, 0xe3, 0x4e, 0xbf, 0x54, 0xb8, 0x30, 0xef, 0x31, 0x8b, 0x2d, 0x64, 0xad, 0x2a, 0xb9, 0xd7, 0xd2, 0x1c, 0xfd, 0x54, 0xc1, 0x68, 0x91, 0xac, 0xdb, 0xd9, 0xad, 0xa9, 0x7d, 0x96, 0x42, 0x44, 0xe1, 0x47, 0xec, 0x4c, 0xc2, 0x75, 0x55, 0x6b, 0x0c, 0x60, 0x52, 0xd0, 0x9e, 0x88, 0x70, 0x98, 0x4e, 0xae, 0x8f, 0x9e, 0xed, 0xbe, 0x97, 0xc5, 0x01, 0x8a, 0xa1, 0x4b, 0xa4, 0xd9, 0x93, 0xf0, 0x55, 0x33, 0xcf, 0x2f, 0xa3, 0x78, 0xc7, 0x96, 0xd9, 0x4b, 0x1c, 0x25, 0x44, 0xdf, 0xe1, 0x8f, 0xe8, 0x74, 0xc4, 0xe3, 0xdd, 0x1b, 0xba, 0xfa, 0x43, 0x1a, 0x16, 0xc7, 0x9b, 0x46, 0xfc, 0x09, 0x6e, 0x97, 0xbe, 0xe6, 0x29, 0xe5, 0xaf, 0x00, 0x70, 0xe1, 0x77, 0xf0, 0x2b, 0x10, 0x1e, 0x82, 0xb1, 0x44, 0xbd, 0x2c, 0x2c, 0x40, 0x61, 0x74, 0x7e, 0x4f, 0x20, 0x18, 0x99, 0x91, 0xb2, 0xe6, 0xd3, 0x4a, 0x2f, 0x3b, 0xcd, 0x92, 0x56, 0x0e, 0x79, 0x7b, 0xb1, 0xa3, 0x58, 0xda, 0x1b, 0x89, 0x18, 0x5d, 0xe5, 0x31, 0x63, 0xfb, 0xa6, 0x1e, 0x0f, 0xd0, 0x3a, 0x27, 0x83, 0x10, 0x22, 0x08, 0x02, 0xdf, 0xdf, 0x25, 0xc3, 0x04, 0xee, 0x63, 0x09, 0xaa, 0x08, 0xdc, 0x05, 0xd9, 0xaa, 0xfa, 0x82, 0xff, 0xf6, 0x1d, 0xab, 0xea, 0x53, 0xe8, 0x4c, 0x7f, 0x4c, 0x9d, 0x79, 0x3c, 0x70, 0x22, 0x54, 0xbd, 0x8a, 0x9d, 0x7d, 0x79, 0x75, 0x38, 0x1c, 0x19, 0x2f, 0x51, 0x2b, 0x40, 0x76, 0x7f, 0xe9, 0xa5, 0x8b, 0x55, 0x82, 0x9a, 0x28, 0xf1, 0x8e, 0x5e, 0xc1, 0x49, 0xb6, 0xe3, 0xc7, 0x83, 0x27, 0x42, 0x74, 0xbe, 0x9a, 0xfc, 0xe6, 0xe5, 0x77, 0x82, 0xfc, 0x56, 0xc8, 0xef, 0x44, 0xf9, 0xad, 0x94, 0xdf, 0xa3, 0xe4, 0xb7, 0x4a, 0x7e, 0x27, 0xc9, 0x6f, 0xb5, 0xfc, 0x4e, 0x96, 0xdf, 0x1a, 0xf9, 0x7d, 0x9b, 0xfc, 0x4e, 0x91, 0xdf, 0xb7, 0xd3, 0xbb, 0xe8, 0x02, 0x68, 0x7b, 0x7b, 0x3c, 0x10, 0xee, 0x28, 0xbd, 0x78, 0x47, 0xaf, 0x5c, 0x5e, 0x9e, 0xec, 0x12, 0xf5, 0x10, 0x2d, 0xfd, 0x06, 0x6a, 0x53, 0x51, 0x59, 0xc1, 0xda, 0x7a, 0xd7, 0xe0, 0x1d, 0x2f, 0xd4, 0x41, 0xb8, 0x40, 0x48, 0x16, 0x9c, 0x74, 0x12, 0x02, 0x62, 0x61, 0x65, 0xf9, 0xa5, 0xf0, 0x55, 0xac, 0x49, 0x2a, 0x83, 0x6c, 0x92, 0x6b, 0x62, 0x92, 0x6b, 0x62, 0x92, 0x6b, 0x62, 0x92, 0x6b, 0x62, 0x92, 0x6b, 0x62, 0x92, 0x6b, 0x62, 0x92, 0x6b, 0x62, 0x92, 0x6b, 0x62, 0x92, 0x6b, 0x62, 0x92, 0x6b, 0x62, 0x92, 0x6b, 0x62, 0x92, 0x6b, 0x62, 0x92, 0x6b, 0x62, 0x92, 0x6b, 0x62, 0x92, 0x6a, 0x52, 0x7a, 0x11, 0xb4, 0xd4, 0x2e, 0x0d, 0x10, 0xf6, 0xfb, 0xaf, 0xee, 0x0f, 0x1c, 0x7d, 0xd9, 0x7f, 0x7b, 0x5f, 0x50, 0x54, 0x63, 0xb9, 0x32, 0x28, 0x9c, 0x49, 0xeb, 0x1f, 0x0f, 0xa3, 0x57, 0x9e, 0x68, 0x31, 0xae, 0x9e, 0x8c, 0x76, 0x85, 0x04, 0x46, 0x3f, 0x21, 0xf9, 0xf6, 0x2e, 0x94, 0xed, 0x45, 0xb8, 0x89, 0x6d, 0x7d, 0x53, 0x1d, 0xdb, 0x43, 0x4d, 0x67, 0xdd, 0xaa, 0x38, 0x92, 0xa7, 0xf4, 0xda, 0x5f, 0x05, 0xce, 0xac, 0xa8, 0xed, 0x41, 0x1e, 0xf4, 0xa1, 0x7e, 0x5c, 0x94, 0xde, 0xb2, 0xf4, 0x76, 0xb6, 0x4f, 0x81, 0xa7, 0x39, 0x04, 0x08, 0x54, 0x0c, 0x84, 0x0f, 0x58, 0x32, 0x25, 0xbc, 0x1a, 0xfa, 0x76, 0xad, 0xf4, 0x7c, 0x2c, 0x41, 0x96, 0xef, 0xf9, 0xb6, 0x9a, 0x2c, 0x1c, 0xf6, 0x26, 0x4e, 0xdf, 0xda, 0x69, 0xe9, 0xa4, 0x73, 0xb2, 0x20, 0xa3, 0xe8, 0x0a, 0x64, 0x15, 0x5f, 0x81, 0x4d, 0x3e, 0x4e, 0xe8, 0xeb, 0x0f, 0xbc, 0x74, 0xc8, 0x73, 0xa3, 0x23, 0xe3, 0xe4, 0x1a, 0x8b, 0xc2, 0x70, 0x3b, 0x83, 0xb8, 0x99, 0xce, 0x40, 0x0e, 0x6f, 0x40, 0xe9, 0x8b, 0xee, 0x7e, 0x60, 0x67, 0xa9, 0x96, 0x0e, 0x84, 0x45, 0xe9, 0xc6, 0x9f, 0xaa, 0x35, 0x74, 0x37, 0x8b, 0x57, 0xba, 0xcf, 0x7b, 0x1d, 0xdd, 0x2a, 0x71, 0x06, 0xb9, 0x85, 0x14, 0x33, 0x2e, 0x4c, 0x11, 0x09, 0xf3, 0x1c, 0x12, 0x2c, 0x9c, 0xf0, 0xe2, 0x52, 0x3a, 0xd9, 0x51, 0x23, 0xdf, 0xee, 0x4d, 0xfc, 0xe2, 0x67, 0x4b, 0xe4, 0xf3, 0x42, 0xad, 0x02, 0x9d, 0x69, 0x4a, 0x77, 0x60, 0x61, 0x0f, 0x97, 0x56, 0x48, 0x15, 0x1b, 0x0d, 0x20, 0x9d, 0x0f, 0x18, 0x39, 0x4d, 0xe8, 0x44, 0x90, 0x4e, 0x10, 0x62, 0x63, 0x24, 0x1c, 0xeb, 0x62, 0x73, 0x15, 0xf0, 0x4e, 0x4f, 0x7f, 0xb0, 0x2c, 0x40, 0x92, 0xdf, 0xcf, 0x96, 0x88, 0xba, 0x48, 0xcc, 0x76, 0x48, 0xcf, 0xf8, 0x75, 0x90, 0x38, 0x80, 0x02, 0x68, 0xbe, 0xe3, 0x9d, 0x1e, 0xdd, 0x94, 0x0c, 0x78, 0x29, 0x40, 0xb3, 0xec, 0x5e, 0x95, 0x4e, 0xd5, 0x9e, 0xb0, 0xbf, 0xcb, 0x73, 0xac, 0xfc, 0x42, 0x78, 0x50, 0x37, 0x4d, 0x6f, 0x2f, 0x92, 0x52, 0x43, 0x42, 0xb6, 0x71, 0x22, 0x28, 0x7e, 0x13, 0xa0, 0x5c, 0xa4, 0xb3, 0x58, 0xd9, 0xea, 0x01, 0x42, 0x30, 0x72, 0x27, 0x83, 0x12, 0x6c, 0xc9, 0x4f, 0xc9, 0xa0, 0x1e, 0x0c, 0x10, 0xa6, 0x14, 0x40, 0xf3, 0x37, 0xd2, 0x59, 0xa6, 0xd4, 0xe7, 0x46, 0xb1, 0xdd, 0x8e, 0x82, 0x55, 0x05, 0x06, 0x6b, 0x3e, 0xfc, 0x3a, 0x60, 0x98, 0x08, 0xaa, 0x5f, 0x07, 0x8c, 0x56, 0x07, 0x20, 0x64, 0x2b, 0x95, 0x82, 0xe0, 0x77, 0x40, 0x99, 0x62, 0x7f, 0xf7, 0x17, 0xe1, 0xc7, 0xf2, 0xfd, 0x27, 0xf3, 0xd0, 0xfc, 0x3f, 0xc8, 0x43, 0xfb, 0xff, 0x20, 0x8f, 0xb4, 0xff, 0x07, 0x79, 0x64, 0xfc, 0x3f, 0xc8, 0x23, 0xeb, 0xbf, 0x9b, 0x87, 0x89, 0x7b, 0x2b, 0x58, 0xfc, 0x3e, 0x08, 0xff, 0x28, 0x27, 0x1d, 0xe6, 0x42, 0xb9, 0xbd, 0x18, 0x14, 0x46, 0xbf, 0x18, 0x64, 0xf9, 0x04, 0x4d, 0xd6, 0x5a, 0xf8, 0x2d, 0xea, 0x2b, 0x14, 0x97, 0x20, 0xf6, 0x75, 0x51, 0x7c, 0x25, 0xc6, 0x67, 0xeb, 0xd2, 0x1c, 0x8d, 0x4a, 0xa7, 0xa7, 0x11, 0xcc, 0x51, 0x08, 0x93, 0xd6, 0x4d, 0x29, 0xd6, 0xc1, 0x60, 0x24, 0x17, 0x21, 0xa1, 0xbf, 0x8b, 0x60, 0x32, 0x38, 0x81, 0x91, 0x3d, 0xe0, 0x58, 0x50, 0xaa, 0x87, 0x54, 0xa7, 0xd2, 0x8b, 0xe1, 0xd3, 0x1d, 0xe3, 0x76, 0xaf, 0x6c, 0x80, 0xc1, 0x23, 0xfe, 0xd3, 0xfb, 0x43, 0x6f, 0xbe, 0x7c, 0xa0, 0xbb, 0xe8, 0x12, 0x28, 0x0c, 0xbc, 0xdc, 0x13, 0x9b, 0x75, 0x19, 0x2f, 0xca, 0x65, 0xa1, 0x5a, 0xf7, 0x75, 0x47, 0xca, 0x62, 0x82, 0xb7, 0x02, 0x46, 0x8e, 0xc6, 0xe2, 0xd3, 0x95, 0x34, 0x1a, 0x8f, 0x82, 0x93, 0xdd, 0x82, 0xa2, 0xbf, 0x9b, 0x62, 0x1d, 0x0a, 0x92, 0x8f, 0x02, 0xf4, 0x25, 0x7f, 0x3a, 0xf0, 0xa7, 0xd7, 0x85, 0x29, 0x2a, 0x30, 0xe6, 0x6c, 0xc2, 0xdc, 0x46, 0x62, 0x0e, 0xcb, 0xc2, 0x7a, 0xb3, 0x69, 0x0a, 0x95, 0xf4, 0x3b, 0x5d, 0xfe, 0x84, 0x1d, 0x5d, 0x0d, 0x8f, 0xa2, 0x5e, 0x9f, 0x45, 0x25, 0x69, 0x4f, 0x38, 0xd0, 0xe5, 0x35, 0xd7, 0xae, 0x92, 0x7a, 0x75, 0x1c, 0x47, 0xb8, 0x7b, 0x04, 0x47, 0xb0, 0x4a, 0x1c, 0xc1, 0x73, 0xaa, 0x2c, 0xa0, 0x87, 0x77, 0x9c, 0x74, 0x1e, 0x63, 0x24, 0xf6, 0xf1, 0x78, 0x4e, 0x13, 0x8a, 0x71, 0x1a, 0x79, 0x47, 0x14, 0x3b, 0x1f, 0x58, 0x84, 0x81, 0xa7, 0xf1, 0xd9, 0xe2, 0x78, 0x0f, 0xdb, 0xa2, 0x15, 0xb4, 0x74, 0x42, 0xb4, 0x8e, 0xcd, 0x5a, 0x21, 0xef, 0x16, 0xd2, 0xee, 0xea, 0xe0, 0x76, 0x07, 0x1f, 0x38, 0xb0, 0x53, 0xe1, 0x51, 0xb8, 0x83, 0x62, 0x8a, 0x93, 0xf7, 0xa8, 0xda, 0x14, 0x1b, 0x82, 0x3a, 0x9e, 0x2c, 0x07, 0xdd, 0x81, 0x5d, 0x81, 0x79, 0xca, 0x8e, 0x84, 0xdd, 0xc1, 0xfa, 0x13, 0x02, 0xca, 0x11, 0x90, 0x25, 0xf1, 0x75, 0xe2, 0xe8, 0xb4, 0x4f, 0x05, 0xf5, 0xec, 0x5c, 0x0f, 0xd9, 0x67, 0x70, 0x3e, 0x0e, 0xe5, 0x79, 0xfd, 0xbb, 0x5b, 0x99, 0x5d, 0x74, 0xcc, 0x4a, 0x23, 0x57, 0xbe, 0x5b, 0x76, 0x0f, 0xc6, 0x34, 0x7a, 0xd2, 0x22, 0xb1, 0x30, 0xc4, 0x68, 0xdf, 0xc6, 0xf6, 0x48, 0x99, 0xc9, 0xf2, 0x6c, 0xe3, 0xb3, 0x6c, 0xcf, 0x95, 0xb1, 0xb7, 0xab, 0x2e, 0xd3, 0x02, 0xba, 0x49, 0xa0, 0xa1, 0x15, 0x48, 0x8b, 0x49, 0x3a, 0xa9, 0xf7, 0xbb, 0xb4, 0x0f, 0xda, 0x2a, 0xda, 0x31, 0xad, 0x75, 0x6d, 0x50, 0x9f, 0xd0, 0xdb, 0x45, 0xa7, 0x31, 0xe0, 0x18, 0x84, 0xf1, 0xd6, 0x76, 0x59, 0xe0, 0x18, 0x96, 0xc2, 0xc2, 0x49, 0x67, 0x28, 0xb8, 0x36, 0x6c, 0x64, 0x6b, 0xee, 0x5e, 0xc1, 0x92, 0xc0, 0xe0, 0x74, 0xc9, 0x70, 0xc8, 0x5a, 0xc6, 0x3a, 0xa1, 0x09, 0x8c, 0x60, 0x66, 0x1a, 0xa7, 0x09, 0x25, 0x1b, 0x84, 0x3a, 0x81, 0x76, 0xbd, 0x60, 0xce, 0x28, 0xd1, 0x2b, 0x28, 0x17, 0x2c, 0x85, 0x79, 0x47, 0x60, 0x9e, 0xe6, 0x78, 0x60, 0x82, 0x1d, 0xcc, 0xa2, 0x22, 0x7a, 0x13, 0x24, 0x8e, 0x51, 0x88, 0x33, 0x05, 0xdb, 0x27, 0x34, 0x5f, 0x68, 0x94, 0x2d, 0xc9, 0xea, 0xec, 0x5b, 0x51, 0x96, 0x7d, 0x06, 0xa5, 0xf6, 0x67, 0x40, 0x85, 0x4f, 0x06, 0x9b, 0x1d, 0xb0, 0xda, 0xd7, 0xa2, 0xbf, 0x02, 0x1f, 0xcd, 0xf8, 0x4e, 0x1c, 0xf4, 0x00, 0xc3, 0xb7, 0x82, 0x80, 0x8f, 0x11, 0x1f, 0x33, 0x3e, 0x56, 0x7c, 0xf2, 0xf1, 0x29, 0x2c, 0xbe, 0x90, 0x68, 0x1d, 0x5f, 0x01, 0xcd, 0xf8, 0x54, 0xe1, 0x53, 0x39, 0xde, 0x76, 0x77, 0x9f, 0x2f, 0x8c, 0xbf, 0x07, 0x86, 0xef, 0x7f, 0xb2, 0x92, 0x2c, 0xcd, 0x2c, 0xf5, 0x98, 0x3d, 0x4e, 0x5d, 0x74, 0x97, 0x50, 0xad, 0x64, 0x99, 0xd5, 0x8e, 0x1a, 0x85, 0x81, 0xbf, 0xd0, 0xe5, 0xee, 0xf2, 0x59, 0x7a, 0x43, 0x0b, 0x94, 0xfe, 0xdb, 0x0f, 0x04, 0xbd, 0x6a, 0x81, 0xbf, 0x3f, 0xe0, 0x1f, 0xb5, 0x23, 0xd0, 0x90, 0x83, 0xf5, 0xca, 0xf5, 0x66, 0xec, 0xdc, 0x06, 0x7a, 0x6f, 0x6a, 0xb4, 0x8d, 0x24, 0x1b, 0x33, 0xb2, 0x84, 0x2a, 0x06, 0x15, 0xd6, 0x97, 0xec, 0x10, 0xd2, 0xc8, 0x76, 0x0e, 0xf5, 0xf1, 0xb4, 0x88, 0x15, 0xdd, 0x77, 0xe8, 0xb4, 0x20, 0x3a, 0x23, 0x4e, 0x8b, 0xd4, 0x93, 0x21, 0xdb, 0xcf, 0xad, 0x96, 0x6c, 0xca, 0xa0, 0xdb, 0x97, 0xdf, 0xfb, 0x02, 0x64, 0x79, 0x16, 0xb3, 0xb2, 0x74, 0x20, 0x34, 0xb2, 0x3b, 0x14, 0x3c, 0x9a, 0x09, 0x11, 0x8b, 0xb2, 0x6d, 0xec, 0xdc, 0x74, 0xbd, 0x47, 0x35, 0x41, 0xb6, 0x28, 0x73, 0x74, 0xdc, 0x7d, 0x98, 0x59, 0x11, 0x48, 0x76, 0x6e, 0x48, 0x27, 0x86, 0x88, 0x7d, 0x57, 0x21, 0xb6, 0x46, 0x96, 0xfd, 0x59, 0x6c, 0x4d, 0x0b, 0xd3, 0x05, 0xf6, 0x84, 0x55, 0xec, 0x44, 0x75, 0x03, 0x3b, 0xb9, 0x86, 0x59, 0xc5, 0xa1, 0x24, 0xae, 0x8d, 0x58, 0xc6, 0xd1, 0xb9, 0xe6, 0xa2, 0x3a, 0x66, 0xeb, 0x44, 0x7b, 0xd9, 0xd8, 0x9d, 0xd9, 0x16, 0x76, 0xa6, 0xbb, 0x86, 0xec, 0x9c, 0x98, 0x14, 0x2f, 0xdd, 0x21, 0xa8, 0x8d, 0xcd, 0x4d, 0xd2, 0x69, 0xe9, 0xac, 0x26, 0x8e, 0xe8, 0x3e, 0xb4, 0xa9, 0xce, 0x60, 0xb3, 0x3a, 0xd2, 0x2a, 0xa2, 0xd9, 0xa7, 0xed, 0x0d, 0x2e, 0x30, 0x19, 0x8c, 0x50, 0xa8, 0xe7, 0x8e, 0x77, 0x69, 0x0b, 0x41, 0xe8, 0x0d, 0x35, 0x64, 0xd2, 0xbd, 0x5d, 0xef, 0x6e, 0xad, 0x0e, 0xf4, 0xbd, 0x00, 0x69, 0xef, 0x6d, 0x3d, 0x8a, 0xb1, 0xc7, 0xdb, 0xa1, 0xd0, 0x27, 0xed, 0xa4, 0x63, 0xb3, 0x51, 0x28, 0xc7, 0xf4, 0xc9, 0xbb, 0xba, 0x7c, 0x92, 0xe5, 0x54, 0xaa, 0x35, 0xb6, 0xa3, 0x2b, 0x55, 0xcf, 0xf6, 0x70, 0x41, 0x2a, 0xed, 0xe2, 0x52, 0x31, 0xdb, 0x7a, 0x94, 0x7a, 0x7d, 0xc9, 0xbd, 0xeb, 0x3c, 0x0a, 0xbf, 0x46, 0x1f, 0x34, 0x3e, 0x04, 0x1a, 0xf3, 0x24, 0x54, 0xb3, 0xc6, 0x58, 0x1e, 0x42, 0x06, 0x50, 0x63, 0x30, 0x41, 0xbe, 0xde, 0x04, 0x85, 0xe6, 0x32, 0xd4, 0x32, 0x6a, 0x96, 0xc0, 0x34, 0xb6, 0x0f, 0xa2, 0xe8, 0x62, 0xa2, 0x95, 0xce, 0x4e, 0x2c, 0xbe, 0xc8, 0x5f, 0xb5, 0x54, 0x80, 0xa3, 0xe8, 0x22, 0x34, 0xe3, 0x77, 0x65, 0xf1, 0x45, 0xa8, 0xc1, 0xef, 0x5a, 0xfc, 0xf6, 0xe1, 0xf7, 0x6c, 0xfc, 0xae, 0xc5, 0x6f, 0x11, 0xf1, 0xd4, 0xf6, 0x5d, 0x3a, 0x4d, 0xb1, 0xde, 0x3f, 0x76, 0xc7, 0xba, 0x06, 0x18, 0xfd, 0xa4, 0x90, 0xda, 0x1f, 0xb0, 0xfe, 0x8b, 0x4a, 0x3a, 0x17, 0xb8, 0x0a, 0x9c, 0xbc, 0x8a, 0x5f, 0xcc, 0x5f, 0x48, 0xa8, 0x53, 0x68, 0x14, 0x3b, 0x13, 0x6b, 0xa1, 0x44, 0x69, 0x52, 0xce, 0x57, 0xfa, 0x47, 0x99, 0x46, 0xf5, 0x8c, 0x5a, 0x0d, 0x53, 0x55, 0x53, 0x93, 0x0c, 0xc9, 0x4f, 0x26, 0x3f, 0x75, 0x5b, 0xd5, 0x6d, 0x6b, 0x53, 0x9e, 0x4f, 0xb9, 0x70, 0x7b, 0xfd, 0xed, 0x1d, 0xda, 0x02, 0xed, 0x4a, 0xed, 0x32, 0xed, 0x31, 0xa1, 0x54, 0x84, 0x51, 0x4f, 0xd3, 0x6f, 0xe2, 0x53, 0xf4, 0xcb, 0xd9, 0xd9, 0xfd, 0x7b, 0x0a, 0x74, 0x67, 0xf8, 0x90, 0x8e, 0x6e, 0x4f, 0xa3, 0x53, 0xc2, 0xb4, 0xb9, 0xd5, 0xdd, 0x24, 0x7d, 0x9e, 0x7b, 0xe6, 0x44, 0xb0, 0x2a, 0x64, 0x52, 0xa1, 0x74, 0x1a, 0xaa, 0x3f, 0xaf, 0x42, 0x15, 0xd4, 0x6b, 0x23, 0xeb, 0x88, 0x55, 0xe3, 0x3c, 0xf9, 0xf2, 0x9e, 0x86, 0xc7, 0xc9, 0x76, 0x75, 0x5c, 0x27, 0x8c, 0x83, 0xb6, 0x71, 0x9d, 0xe1, 0x55, 0xb0, 0x88, 0x9d, 0x61, 0x46, 0xb7, 0xf3, 0x80, 0x14, 0xe6, 0xe3, 0xf4, 0x74, 0x17, 0x56, 0x46, 0x1b, 0xd8, 0x8b, 0xe9, 0x2e, 0x41, 0xbb, 0x74, 0xe2, 0x8a, 0x64, 0xaf, 0xa6, 0xf4, 0x87, 0xc7, 0x17, 0x81, 0x55, 0x65, 0x42, 0xc9, 0x30, 0xd9, 0xab, 0x17, 0x12, 0xde, 0xe9, 0x91, 0x77, 0x96, 0x27, 0x9c, 0x5e, 0x41, 0xfb, 0x90, 0x04, 0x5b, 0xf4, 0x5e, 0xe4, 0x3e, 0xe9, 0xb4, 0xfe, 0x7b, 0x3a, 0x51, 0x1f, 0xdc, 0x4a, 0x7b, 0xe6, 0x52, 0x94, 0xbe, 0xdb, 0xfb, 0xba, 0xe8, 0x0c, 0x52, 0xd9, 0xf7, 0x3f, 0xc8, 0xf7, 0xb6, 0xab, 0x17, 0x56, 0x91, 0x7f, 0x15, 0xd9, 0x56, 0xeb, 0x3d, 0xb4, 0xbb, 0x52, 0x2f, 0xa6, 0xee, 0x08, 0xd4, 0xa7, 0x7c, 0x27, 0xc4, 0x62, 0xbd, 0x45, 0xb1, 0x6e, 0x37, 0xf9, 0xb9, 0x77, 0x9e, 0xa1, 0x99, 0x8b, 0xf8, 0xfd, 0x49, 0x54, 0xde, 0xc8, 0xee, 0x10, 0x55, 0x02, 0x24, 0x79, 0x15, 0xbe, 0x24, 0xa4, 0x95, 0x64, 0x7d, 0xa0, 0x0d, 0xb0, 0xc7, 0xc2, 0x90, 0x8f, 0xb0, 0x73, 0x7b, 0x7a, 0x75, 0x37, 0x6a, 0x4f, 0x19, 0xe7, 0xb6, 0x9e, 0x08, 0x10, 0x76, 0x7c, 0xb7, 0xf7, 0x22, 0x76, 0xb0, 0x4f, 0x6a, 0x35, 0x09, 0x88, 0xcb, 0xb8, 0xb2, 0xa4, 0x1c, 0x10, 0x12, 0xa8, 0x3e, 0xa7, 0x41, 0xf6, 0xfd, 0x90, 0x95, 0xd0, 0x15, 0xad, 0xbf, 0x5a, 0x48, 0x38, 0xdd, 0xe3, 0xe7, 0xf6, 0x07, 0x84, 0x20, 0xbb, 0xe3, 0x2c, 0xd5, 0x2b, 0x8c, 0x2b, 0x86, 0xf9, 0xa7, 0x57, 0xe1, 0x6f, 0xa3, 0x8c, 0xc9, 0x66, 0xec, 0x4b, 0x19, 0x12, 0x2e, 0x99, 0xfd, 0x0e, 0x2f, 0x95, 0x06, 0x5b, 0x2c, 0x95, 0x4a, 0x93, 0xd2, 0x33, 0xbc, 0x34, 0xfe, 0x71, 0xd4, 0x56, 0xd1, 0x1c, 0x14, 0xe3, 0x8b, 0x41, 0x21, 0xc3, 0xce, 0x23, 0xd8, 0x94, 0xe3, 0x38, 0x1b, 0x34, 0x0a, 0x09, 0xf2, 0xd9, 0xf8, 0x4d, 0xd2, 0x08, 0x8e, 0x61, 0x0f, 0xc9, 0x67, 0xb8, 0x8e, 0xcc, 0x31, 0x61, 0x44, 0x8e, 0x23, 0xea, 0x2f, 0x51, 0x47, 0x34, 0xc7, 0x74, 0x1f, 0x94, 0x41, 0x5f, 0xd7, 0x78, 0xb2, 0xed, 0x43, 0x3f, 0xca, 0x0f, 0xdd, 0x9a, 0xff, 0x6a, 0xfd, 0xfc, 0x0a, 0x7d, 0x90, 0x72, 0xc3, 0xf8, 0x3c, 0xc6, 0x9f, 0x15, 0xc9, 0xf5, 0xb6, 0x2d, 0x5f, 0x82, 0x75, 0xdb, 0xb0, 0xba, 0xa6, 0xc9, 0xf9, 0xe4, 0x7c, 0x55, 0x3e, 0x62, 0x8c, 0x0a, 0x89, 0x8f, 0x68, 0x45, 0x05, 0xe5, 0xea, 0x4f, 0xd4, 0x07, 0xe5, 0x9c, 0x01, 0x9e, 0xb0, 0x34, 0x01, 0x8e, 0x89, 0x3a, 0xc5, 0xee, 0x17, 0x20, 0x77, 0x1e, 0xed, 0xa1, 0xcd, 0x75, 0x06, 0xbd, 0x8b, 0x69, 0xc7, 0x17, 0x1b, 0x57, 0xca, 0x70, 0x5c, 0x91, 0xf8, 0x52, 0xa1, 0x80, 0x12, 0x26, 0x59, 0x20, 0x59, 0x28, 0x7e, 0x23, 0x64, 0xf4, 0x07, 0x5f, 0xea, 0xab, 0x57, 0xae, 0xbf, 0x02, 0xb9, 0x22, 0xaf, 0x2b, 0xb2, 0x24, 0x59, 0x12, 0x71, 0x34, 0x2a, 0x74, 0xf8, 0x36, 0x01, 0x9d, 0x2b, 0x1a, 0xbb, 0xf3, 0x8e, 0x2c, 0x05, 0xe5, 0x12, 0x67, 0x5a, 0xe8, 0x36, 0x0c, 0x2c, 0x23, 0x8b, 0x11, 0x2d, 0x27, 0xc5, 0xd8, 0x14, 0x7c, 0x2b, 0xb8, 0x7e, 0x1b, 0xd8, 0x90, 0x33, 0xdb, 0x3c, 0xa0, 0xd9, 0x88, 0x7d, 0xc8, 0xe6, 0x53, 0xea, 0x03, 0x98, 0x32, 0x81, 0x95, 0x74, 0x25, 0x61, 0x48, 0xb3, 0xc4, 0x52, 0x0a, 0x85, 0x7e, 0x92, 0x1a, 0x0a, 0xdd, 0x2f, 0x40, 0xe1, 0xb8, 0x5a, 0xb2, 0x63, 0xd1, 0x5a, 0x20, 0x9f, 0x4a, 0xc5, 0xf6, 0x62, 0x4a, 0xf5, 0x15, 0xa2, 0x3b, 0x68, 0xe9, 0xec, 0x17, 0x5b, 0x2f, 0x8e, 0x75, 0xf5, 0x9a, 0x31, 0x2f, 0x40, 0xbe, 0x3c, 0xa7, 0x65, 0x73, 0x62, 0x4d, 0xbc, 0x8a, 0xdd, 0xc1, 0xba, 0x9d, 0xff, 0xb5, 0xb2, 0xb1, 0xf8, 0xa9, 0x22, 0x24, 0x0f, 0xc6, 0xda, 0x82, 0x8d, 0xb4, 0x58, 0x4e, 0xff, 0x28, 0x86, 0x51, 0x45, 0xac, 0x9c, 0xc9, 0x27, 0xfe, 0x89, 0x72, 0xea, 0x87, 0x95, 0xd3, 0xf8, 0xbf, 0x54, 0xce, 0x9a, 0x61, 0xe5, 0xd4, 0xfb, 0x55, 0x7a, 0x3a, 0x9f, 0x42, 0x8b, 0x1c, 0x2e, 0x09, 0xdb, 0x52, 0xa6, 0xb8, 0xe4, 0xec, 0x5b, 0x71, 0x41, 0xe4, 0x2a, 0x19, 0xf2, 0x8e, 0xc1, 0x2e, 0xa9, 0x57, 0xff, 0x61, 0x14, 0xf5, 0xea, 0xa4, 0x0e, 0xd6, 0x47, 0x22, 0x70, 0x33, 0xfc, 0x49, 0x67, 0xb6, 0xd0, 0xfe, 0xfd, 0xfd, 0x01, 0xe4, 0x70, 0x66, 0xf2, 0xf7, 0x71, 0xe3, 0x49, 0xd6, 0x88, 0xe3, 0x9b, 0xc4, 0x6b, 0xfc, 0xc9, 0x7a, 0xb2, 0x20, 0xb9, 0x4a, 0x39, 0xaa, 0xf7, 0x8e, 0xa0, 0xf1, 0x71, 0x44, 0xe3, 0xba, 0x04, 0xe9, 0xfc, 0x67, 0xa9, 0xc7, 0x9e, 0x76, 0x1c, 0x0b, 0x50, 0x9f, 0x92, 0xa4, 0xc7, 0xfe, 0x20, 0xdf, 0xc5, 0xa4, 0xc8, 0x55, 0xfd, 0x5d, 0x51, 0x88, 0x6a, 0xa9, 0x07, 0x39, 0x69, 0xef, 0x5d, 0xd6, 0x3d, 0x95, 0xa0, 0xb9, 0xa7, 0x0c, 0xe5, 0xc8, 0xa5, 0xf7, 0x94, 0x80, 0x02, 0xfb, 0x4b, 0x3e, 0x4a, 0x0e, 0x85, 0x4b, 0x78, 0xc4, 0x42, 0xe5, 0xad, 0x78, 0x1f, 0x71, 0x3b, 0xd6, 0x0f, 0xb9, 0x1d, 0x2f, 0x40, 0x7d, 0x3d, 0xa8, 0x49, 0x1e, 0x40, 0x69, 0x13, 0xb1, 0xa2, 0xf3, 0x8d, 0xea, 0x0b, 0x9d, 0x7e, 0xd6, 0x77, 0xe3, 0x40, 0xc0, 0x9f, 0x89, 0x35, 0xbe, 0xc0, 0xca, 0xac, 0x1a, 0x51, 0x66, 0x9e, 0xca, 0x4c, 0x96, 0x63, 0xb4, 0xaf, 0x4d, 0x48, 0x38, 0xd3, 0xa3, 0xb3, 0x91, 0xcd, 0x9c, 0x2f, 0x41, 0x97, 0xd4, 0x17, 0x64, 0xbb, 0x4c, 0x1c, 0x88, 0x17, 0xba, 0xf7, 0xb9, 0x4c, 0x3a, 0xdf, 0x00, 0xb9, 0xec, 0x6d, 0x62, 0x09, 0xca, 0x1b, 0x67, 0xf7, 0xe9, 0xa1, 0xd2, 0x9f, 0x84, 0xe9, 0x6a, 0xe8, 0xeb, 0x77, 0x4f, 0x43, 0x95, 0x2f, 0x11, 0xcb, 0x55, 0x8b, 0xf1, 0xc6, 0xe8, 0x83, 0x38, 0x9a, 0x2b, 0x51, 0x7a, 0x69, 0xf3, 0x64, 0x9e, 0x5f, 0xf5, 0x60, 0x08, 0xf3, 0x7f, 0xd4, 0xaf, 0x45, 0xdc, 0x49, 0x6d, 0x70, 0x37, 0x8e, 0x34, 0x5f, 0xd3, 0x07, 0x0c, 0x49, 0x67, 0x57, 0xe9, 0x55, 0x0f, 0x60, 0xe8, 0x8d, 0x03, 0x52, 0x69, 0xfd, 0x37, 0x0e, 0x04, 0x23, 0x2d, 0x9a, 0x34, 0xfb, 0xd6, 0xf8, 0x95, 0x2d, 0x0d, 0x19, 0x7e, 0xcb, 0x6c, 0xbd, 0x41, 0xb9, 0x5d, 0xb3, 0x59, 0xbb, 0xd2, 0xce, 0x05, 0x9b, 0x2f, 0x45, 0x1f, 0xf0, 0x2b, 0x11, 0x23, 0x6d, 0x08, 0x45, 0x43, 0xd8, 0xf5, 0xdd, 0xae, 0x0f, 0x10, 0x55, 0x7a, 0x0b, 0x75, 0xca, 0xde, 0x65, 0xf5, 0xbc, 0x0e, 0x50, 0xea, 0xe6, 0x75, 0x0a, 0x3a, 0xe9, 0x43, 0x75, 0x8d, 0xd1, 0xa1, 0x26, 0xd6, 0xd7, 0xc9, 0xbe, 0x9f, 0x28, 0x70, 0x73, 0xf0, 0xcf, 0x2f, 0x53, 0x4f, 0x96, 0x56, 0x51, 0x6e, 0x08, 0xfe, 0x64, 0x11, 0x54, 0x5b, 0xa8, 0x6c, 0xaa, 0xbe, 0x11, 0x65, 0xbb, 0x8d, 0xe1, 0x71, 0xdc, 0xfe, 0x2e, 0x5d, 0x51, 0xf1, 0xfb, 0x1c, 0x37, 0x01, 0x25, 0x83, 0x8b, 0xab, 0x10, 0x07, 0xe3, 0xfa, 0xba, 0x18, 0xf5, 0xd7, 0x5f, 0x5c, 0xe5, 0xbf, 0x7d, 0x7f, 0x97, 0x50, 0x54, 0x4b, 0x3b, 0x96, 0x67, 0x5f, 0x58, 0xe5, 0xff, 0xf8, 0x78, 0x70, 0xc7, 0x20, 0x37, 0xb6, 0x4e, 0x89, 0x72, 0x43, 0xa0, 0x5e, 0xaa, 0xc3, 0x34, 0xaa, 0x83, 0xf2, 0x14, 0xf6, 0xc4, 0xf9, 0xfe, 0xd1, 0xfa, 0x20, 0x52, 0xef, 0x6c, 0xd2, 0xa5, 0x7e, 0xb7, 0xc4, 0x52, 0x8e, 0xbc, 0xc9, 0xc1, 0x72, 0x2e, 0xab, 0xee, 0x5e, 0x0c, 0x99, 0x19, 0xe7, 0x9e, 0x3b, 0xb1, 0x34, 0xd6, 0x82, 0x14, 0x4e, 0x37, 0x6d, 0xd0, 0xee, 0xa1, 0x25, 0x30, 0xd5, 0xba, 0x09, 0x84, 0xf2, 0xa2, 0x0b, 0x90, 0x7f, 0xf4, 0xd0, 0xd4, 0x04, 0xbe, 0x1c, 0x46, 0xdd, 0xbb, 0xbc, 0x47, 0xea, 0x85, 0xf3, 0xa9, 0x35, 0x10, 0x13, 0xf3, 0x51, 0x0e, 0xcf, 0x16, 0x4a, 0xe9, 0x46, 0x65, 0xec, 0xc7, 0xf9, 0xe2, 0x2e, 0xb2, 0x28, 0xcc, 0x91, 0xf7, 0x5e, 0x91, 0x1d, 0xa7, 0x94, 0xda, 0xee, 0x8f, 0xa4, 0x13, 0x95, 0x52, 0x49, 0x28, 0xad, 0x9f, 0x46, 0xe8, 0x23, 0x13, 0x5a, 0xa1, 0x04, 0x9a, 0xd9, 0x6f, 0xe5, 0x92, 0x51, 0x13, 0xca, 0x51, 0x3e, 0xb2, 0xb0, 0x13, 0xc5, 0x67, 0xd3, 0xa9, 0xe2, 0xc8, 0xc7, 0xc7, 0xe0, 0xbb, 0x59, 0xa2, 0xd8, 0xf5, 0xf9, 0xd9, 0xd2, 0x8d, 0xbe, 0x52, 0x3d, 0x5b, 0xa9, 0x9e, 0x89, 0xd7, 0x58, 0x3d, 0x53, 0x59, 0x6f, 0xae, 0x47, 0x7d, 0x41, 0x64, 0x25, 0x01, 0xee, 0x17, 0xc8, 0xc9, 0x2b, 0x51, 0xf2, 0x23, 0x7d, 0xa6, 0xe6, 0x5d, 0xe9, 0xae, 0x2a, 0x9b, 0x50, 0x8a, 0xd2, 0x56, 0x95, 0x49, 0x85, 0xb5, 0xb4, 0xf5, 0x75, 0x31, 0x3b, 0x1d, 0xe4, 0x46, 0x3a, 0xdb, 0xb8, 0x46, 0xe4, 0x25, 0xb9, 0x64, 0x89, 0xca, 0xb8, 0x52, 0xee, 0xce, 0x40, 0x3d, 0x93, 0x8a, 0x46, 0x8d, 0x8d, 0x6f, 0x21, 0xf1, 0x20, 0xdd, 0xcd, 0x72, 0x1f, 0xb6, 0xb0, 0xa6, 0x08, 0x6e, 0xaf, 0x9b, 0x2a, 0x51, 0x98, 0x72, 0x60, 0x38, 0x2e, 0x7b, 0x43, 0x75, 0x17, 0x28, 0x0e, 0xbb, 0x45, 0x29, 0xf7, 0xcc, 0xb3, 0x1b, 0x02, 0x45, 0xef, 0x13, 0x16, 0xee, 0xc5, 0x9c, 0x7a, 0xa4, 0x9d, 0xf9, 0xf3, 0xb1, 0x7c, 0x4a, 0x0d, 0x9d, 0xa4, 0x50, 0xe8, 0xa9, 0x64, 0xe3, 0x07, 0xd4, 0x04, 0x65, 0x68, 0xdb, 0x87, 0x43, 0xdb, 0x81, 0xd0, 0x74, 0x32, 0x9c, 0x1d, 0x92, 0x64, 0xbf, 0x05, 0xe1, 0x7d, 0xf3, 0xe8, 0x21, 0x1f, 0x58, 0x73, 0x7a, 0xc0, 0x9f, 0x40, 0xf4, 0x30, 0xb3, 0xe7, 0xec, 0x2a, 0xec, 0x01, 0x8b, 0x11, 0xe6, 0x68, 0x28, 0xf4, 0xaa, 0x25, 0x98, 0x73, 0x82, 0xa2, 0x43, 0x72, 0xcd, 0x8c, 0x40, 0x77, 0x7d, 0x19, 0x74, 0xff, 0x28, 0x09, 0xce, 0xf9, 0x55, 0xfe, 0x9b, 0xa2, 0x99, 0xc5, 0xd5, 0x7d, 0x69, 0xdc, 0x1f, 0x52, 0x5c, 0x6c, 0xdb, 0xe4, 0x0f, 0x57, 0xf9, 0x3f, 0x5b, 0x17, 0x38, 0x1e, 0xf4, 0x01, 0x59, 0xfc, 0xbd, 0x74, 0x05, 0xf2, 0xe7, 0xa5, 0xb0, 0xb6, 0xe9, 0x91, 0xfa, 0xa6, 0x68, 0x42, 0xec, 0xcf, 0xcf, 0xe9, 0x84, 0x7c, 0x3a, 0x63, 0xe8, 0x5e, 0x5a, 0x05, 0xa1, 0xb5, 0xa3, 0xf9, 0xd2, 0x4d, 0xe9, 0x74, 0xae, 0x3e, 0xcc, 0xa7, 0x54, 0x0d, 0x30, 0xe4, 0xf6, 0x7f, 0x6d, 0xc7, 0x3a, 0x2f, 0x7c, 0x0a, 0xce, 0x26, 0xde, 0xe7, 0x91, 0x5a, 0xf8, 0x29, 0xd6, 0xc2, 0x6d, 0xc3, 0x68, 0x24, 0x69, 0x24, 0x8d, 0x20, 0xef, 0x17, 0x89, 0x46, 0x48, 0x63, 0xa1, 0xd5, 0x87, 0xf5, 0xf9, 0x28, 0x59, 0x3b, 0x5c, 0x6b, 0x25, 0x5a, 0x21, 0x9b, 0x2e, 0x99, 0x5e, 0x7e, 0x4f, 0xd0, 0x12, 0x0e, 0xa0, 0x86, 0xd9, 0x0c, 0x55, 0x7e, 0xda, 0x8d, 0x54, 0x2b, 0xc3, 0xa9, 0x97, 0xe1, 0xd4, 0xfb, 0xf2, 0x89, 0x82, 0xfa, 0x03, 0x0e, 0xbf, 0x0a, 0xd8, 0xd9, 0xab, 0x6b, 0x87, 0x51, 0xdc, 0xbb, 0x0c, 0x42, 0xc8, 0x8f, 0x9c, 0xc9, 0xc7, 0xf8, 0x92, 0x17, 0x14, 0x83, 0xfe, 0x34, 0xfc, 0x4a, 0xec, 0xed, 0xae, 0x77, 0x6b, 0x96, 0xd1, 0x8a, 0xcd, 0x3c, 0xe7, 0xad, 0xf9, 0xaf, 0x25, 0xc5, 0x92, 0x4c, 0x54, 0xfc, 0x63, 0x5b, 0x4c, 0x87, 0x30, 0x4e, 0x02, 0x45, 0x44, 0x83, 0xa8, 0x5a, 0xe3, 0x4f, 0xde, 0xb1, 0xce, 0x03, 0x9f, 0x0c, 0xf9, 0xc2, 0x13, 0x50, 0xbb, 0x14, 0xe1, 0x13, 0xa4, 0xed, 0xbb, 0x0f, 0xdc, 0x82, 0x8e, 0x73, 0x75, 0xa5, 0xa6, 0x24, 0xba, 0x35, 0x87, 0x68, 0x98, 0xed, 0xf5, 0xbb, 0x82, 0x63, 0x6a, 0x15, 0x54, 0xd1, 0x99, 0x2e, 0xf7, 0xcd, 0x47, 0x59, 0x26, 0x1f, 0xa9, 0x0f, 0x84, 0xa2, 0x9d, 0x3d, 0x12, 0x1d, 0x2b, 0x66, 0x32, 0x3a, 0xbe, 0x4b, 0xa6, 0xe3, 0xfd, 0x3a, 0x95, 0xd5, 0x26, 0x70, 0x4e, 0x0b, 0x54, 0x91, 0xcc, 0xc3, 0x28, 0xb5, 0x0a, 0x39, 0x57, 0xae, 0xff, 0xf6, 0x32, 0x6e, 0x3f, 0x8e, 0x98, 0xa4, 0x37, 0x9a, 0x10, 0xfe, 0x5b, 0x01, 0xe2, 0xd7, 0x97, 0x9e, 0xa9, 0x0e, 0x62, 0xa8, 0x0d, 0xfb, 0x4e, 0xee, 0x62, 0x28, 0xa0, 0x51, 0xbb, 0x14, 0x7b, 0x11, 0x86, 0x23, 0x3d, 0xd8, 0xf6, 0x77, 0x9d, 0x7e, 0xe6, 0xd8, 0x0b, 0x50, 0x25, 0x9d, 0x23, 0xf5, 0x06, 0x95, 0xe4, 0x7e, 0x30, 0xa7, 0x4e, 0x04, 0xce, 0x5a, 0x74, 0x5f, 0x23, 0x95, 0x45, 0xda, 0x89, 0x89, 0x3c, 0xed, 0x23, 0x15, 0xec, 0x5c, 0x51, 0x9f, 0x49, 0x25, 0x4a, 0x38, 0x50, 0xdd, 0x2d, 0x94, 0xa2, 0x2c, 0x90, 0x1b, 0x1b, 0x6f, 0xc5, 0xed, 0xe3, 0x5a, 0xc1, 0x0c, 0x55, 0xa7, 0x91, 0xd6, 0x09, 0x03, 0x39, 0x2a, 0x2c, 0x33, 0x47, 0x5f, 0x47, 0x11, 0x0f, 0x56, 0xcc, 0x97, 0x49, 0x00, 0x58, 0x56, 0x8f, 0xd2, 0x77, 0x97, 0x08, 0xfc, 0x2c, 0xa9, 0xe4, 0x2a, 0x0e, 0x12, 0xbd, 0x1a, 0x7f, 0x78, 0x42, 0x11, 0xea, 0xe4, 0xc8, 0x5d, 0x79, 0x3b, 0xfa, 0x28, 0xe5, 0x36, 0xfb, 0x8c, 0xb5, 0x59, 0x36, 0xea, 0x07, 0xb4, 0xf7, 0xc3, 0xe1, 0xbf, 0x83, 0x71, 0x0a, 0x87, 0xd7, 0x1a, 0x19, 0x21, 0x12, 0x0a, 0x86, 0x8f, 0xf9, 0xd4, 0x7f, 0x49, 0x53, 0xa8, 0x0e, 0xee, 0xef, 0x7a, 0x03, 0xf9, 0x76, 0x24, 0x7f, 0xa4, 0x1b, 0xdb, 0xdd, 0x87, 0x7c, 0xe9, 0xfa, 0x00, 0xb6, 0x48, 0x95, 0xdc, 0x22, 0xb5, 0x31, 0xce, 0x12, 0xe3, 0x2a, 0xcc, 0x66, 0x59, 0xc2, 0x43, 0x2e, 0xe1, 0x41, 0xc2, 0x02, 0xd5, 0x25, 0xc2, 0x57, 0xf8, 0x83, 0xc3, 0xf8, 0xca, 0x81, 0x71, 0x45, 0x88, 0x7f, 0x1b, 0x98, 0x25, 0xee, 0xa3, 0xb3, 0x51, 0x3b, 0xf4, 0x05, 0x3d, 0x8b, 0xe9, 0xee, 0xab, 0xb7, 0x56, 0xc4, 0xb7, 0x41, 0x0c, 0xff, 0x98, 0x9b, 0x99, 0x4e, 0xe4, 0xfb, 0xd2, 0x36, 0x88, 0xcb, 0x1b, 0xfb, 0x31, 0xa7, 0x2b, 0x95, 0xf1, 0x2f, 0x95, 0xc0, 0x16, 0x5f, 0x6b, 0x71, 0x17, 0xe5, 0x44, 0xa5, 0x88, 0xd4, 0x56, 0xc2, 0x2c, 0x72, 0x9d, 0xe0, 0x1b, 0xdb, 0x68, 0xa6, 0x83, 0xca, 0x85, 0xb2, 0x92, 0xd2, 0xab, 0x26, 0xac, 0x1e, 0xbe, 0x03, 0xb1, 0xda, 0xe1, 0x87, 0x1c, 0x6a, 0x93, 0x22, 0x28, 0xc1, 0x51, 0x89, 0xf6, 0x01, 0x3b, 0x7c, 0x77, 0xb2, 0x11, 0x32, 0x0e, 0xbb, 0xdc, 0xa9, 0x7f, 0x88, 0xdd, 0x92, 0x68, 0x7e, 0x19, 0xfa, 0xa0, 0x73, 0x19, 0xc6, 0xdf, 0xae, 0x4b, 0x59, 0x47, 0x67, 0xfa, 0x95, 0xe0, 0xe8, 0x50, 0xb0, 0x36, 0xd8, 0xbb, 0x0d, 0xcc, 0xf3, 0x52, 0x9d, 0xdb, 0xee, 0xee, 0x93, 0xda, 0xf3, 0xf0, 0x24, 0xe2, 0x2c, 0xe2, 0x1c, 0xe4, 0x1c, 0x56, 0x92, 0xb7, 0xd7, 0xae, 0x40, 0x97, 0x71, 0x7d, 0xdf, 0x1b, 0x17, 0x11, 0x6f, 0x38, 0x36, 0xd3, 0x28, 0x28, 0x70, 0xa2, 0x4a, 0x57, 0xb9, 0x9e, 0x4e, 0x5d, 0xb0, 0xed, 0xa5, 0xb3, 0x43, 0x95, 0x9b, 0x03, 0x8f, 0x61, 0x4b, 0xea, 0x40, 0xa8, 0xd4, 0xfe, 0x99, 0xf6, 0x2d, 0xfc, 0xb9, 0x4f, 0x92, 0xab, 0xaf, 0xae, 0x43, 0xdc, 0xa6, 0x21, 0x37, 0xd6, 0xb2, 0xbc, 0xad, 0x19, 0x17, 0xa1, 0xb8, 0x7a, 0x99, 0x2f, 0x0d, 0x39, 0x17, 0x5c, 0x6d, 0xc7, 0x38, 0x2a, 0x66, 0xff, 0x1f, 0xa9, 0x8b, 0xf6, 0x96, 0x7a, 0x57, 0xca, 0xda, 0x65, 0x47, 0x9f, 0x85, 0xb4, 0xa3, 0xdb, 0xe8, 0x3e, 0x47, 0x2f, 0x72, 0xdb, 0x12, 0x3a, 0x59, 0x43, 0x4b, 0x3b, 0x07, 0x1d, 0x6d, 0x19, 0x20, 0xe9, 0x20, 0xa2, 0x36, 0xee, 0x2b, 0x7a, 0x0a, 0x51, 0x44, 0x02, 0xa3, 0xf8, 0x9e, 0x6c, 0x49, 0x73, 0xa4, 0xf9, 0xc1, 0xa8, 0xfc, 0x57, 0xa4, 0x4b, 0x90, 0xe6, 0x11, 0x8f, 0xbe, 0x4c, 0xfa, 0xb1, 0x3c, 0x8f, 0xd8, 0x73, 0x2c, 0x80, 0x3a, 0x46, 0xc2, 0x8e, 0x6d, 0xb4, 0x87, 0x8a, 0x61, 0xa5, 0x42, 0xe2, 0xb7, 0xe6, 0x32, 0x11, 0xae, 0xec, 0x33, 0x97, 0x31, 0xbd, 0xe6, 0x6e, 0x7d, 0x90, 0xd5, 0xa0, 0x90, 0x95, 0x26, 0x0f, 0x6b, 0x41, 0x77, 0x71, 0x3b, 0x6f, 0x21, 0x0f, 0x5d, 0xd8, 0x85, 0x65, 0xf7, 0x6a, 0x19, 0xa4, 0x39, 0x90, 0xe1, 0xff, 0x1a, 0xc9, 0xa7, 0x57, 0xda, 0x09, 0xca, 0x92, 0x2c, 0xfd, 0xf2, 0xb1, 0x74, 0x17, 0x7a, 0xea, 0x92, 0x9b, 0x62, 0xca, 0x12, 0x4e, 0x54, 0x33, 0xbd, 0x58, 0x41, 0xf4, 0x72, 0x6b, 0x3e, 0xc7, 0xe6, 0x11, 0x35, 0xbe, 0xbb, 0x7a, 0xd7, 0x35, 0x8c, 0xfd, 0xdd, 0x25, 0xcc, 0x39, 0x83, 0x71, 0xbe, 0x3d, 0x97, 0x9a, 0x98, 0x36, 0xaf, 0xf6, 0x8f, 0xd5, 0x07, 0x97, 0x0c, 0x8a, 0x00, 0x7d, 0x06, 0xe4, 0xba, 0x1b, 0x9f, 0x05, 0x85, 0x3e, 0x65, 0xc3, 0xb3, 0xa0, 0xa5, 0xb3, 0x46, 0xff, 0x84, 0x78, 0xfc, 0xd3, 0x36, 0x36, 0x6b, 0xa9, 0xf2, 0xda, 0x9c, 0x21, 0x94, 0xcc, 0xf9, 0x92, 0x00, 0x2b, 0x7f, 0x9a, 0x85, 0xef, 0x7f, 0x16, 0x34, 0x96, 0x28, 0x06, 0xdb, 0x76, 0x8a, 0xa9, 0x23, 0xfd, 0x86, 0x63, 0x15, 0x25, 0x70, 0x2a, 0x8d, 0x02, 0xa5, 0x4d, 0xba, 0x8d, 0x01, 0x8a, 0xae, 0xaa, 0x40, 0x48, 0xed, 0x48, 0xf6, 0xff, 0xb0, 0x8c, 0xdb, 0x1d, 0xf0, 0xf2, 0x7e, 0x40, 0xac, 0xd2, 0x4e, 0x76, 0x58, 0x3c, 0x66, 0x4f, 0xc0, 0xab, 0xe9, 0x48, 0xd9, 0x2d, 0xef, 0x00, 0xa7, 0x15, 0xb9, 0x7b, 0xb0, 0x6f, 0x39, 0xbb, 0x3c, 0x0a, 0x5a, 0xe7, 0x59, 0xac, 0xd8, 0x43, 0x52, 0xa8, 0xc6, 0xb9, 0xdc, 0xab, 0x14, 0x95, 0x4b, 0x86, 0x44, 0x7e, 0xc9, 0xe7, 0xc2, 0x28, 0x79, 0x3f, 0x84, 0x8d, 0x6c, 0x00, 0xf4, 0xad, 0xa0, 0x62, 0x33, 0x48, 0x85, 0x74, 0xfe, 0x08, 0x1b, 0xa9, 0xe9, 0x7c, 0x2c, 0x3d, 0xd3, 0x0c, 0x8c, 0xa8, 0x2b, 0xe6, 0xe2, 0xa8, 0xcc, 0x76, 0x92, 0x7e, 0xe9, 0x2e, 0x52, 0xf9, 0xb4, 0x27, 0xb6, 0xc7, 0x8f, 0x76, 0xe9, 0x64, 0x18, 0xe5, 0x53, 0xd9, 0xe4, 0x93, 0xc3, 0x9e, 0x8c, 0x3b, 0x39, 0x6c, 0x1d, 0xc3, 0x90, 0xca, 0xa7, 0xee, 0x5d, 0xc7, 0xe6, 0xf8, 0xe8, 0x2d, 0x48, 0xb2, 0xbd, 0x74, 0x3a, 0xad, 0xeb, 0x71, 0xb6, 0xc3, 0x09, 0xd8, 0x8e, 0xb8, 0x0c, 0x76, 0x9a, 0x90, 0x68, 0x99, 0x24, 0xed, 0x43, 0x7e, 0xff, 0x34, 0x6b, 0x09, 0x95, 0x6f, 0xac, 0x3e, 0xe0, 0x1b, 0x14, 0x9d, 0x34, 0xbb, 0x5a, 0xc4, 0xe6, 0x66, 0x91, 0x9e, 0xd3, 0x37, 0x04, 0x2d, 0x9c, 0xa3, 0xcd, 0x08, 0x6c, 0x4e, 0x76, 0xad, 0x34, 0x1f, 0x2b, 0xa6, 0xae, 0x0b, 0x11, 0x3c, 0x69, 0x1e, 0x17, 0x7d, 0xed, 0xd2, 0x1c, 0xad, 0x8f, 0x43, 0x5c, 0x6b, 0xec, 0x91, 0x9d, 0x71, 0x37, 0x2b, 0xff, 0x56, 0xa8, 0x90, 0x4f, 0x9f, 0x6a, 0x95, 0x4f, 0x9f, 0x1a, 0x1b, 0x9d, 0xbf, 0x4b, 0x63, 0x77, 0x9b, 0x24, 0x7b, 0xb5, 0xe3, 0x2b, 0x40, 0xb0, 0x3f, 0x83, 0x7a, 0x47, 0xdc, 0xfc, 0xa9, 0xeb, 0x81, 0xf0, 0x20, 0x9b, 0x43, 0x5d, 0x00, 0x2a, 0xb9, 0xbe, 0x07, 0xe2, 0xea, 0xbb, 0x5b, 0x3a, 0x15, 0xc3, 0x37, 0x0a, 0x6b, 0x52, 0x58, 0x0f, 0xb0, 0xbd, 0x6d, 0xdc, 0xce, 0x75, 0xde, 0x59, 0xfa, 0x10, 0x96, 0xbd, 0x30, 0xad, 0x10, 0x46, 0x1d, 0x20, 0xae, 0x9e, 0x7f, 0x8e, 0xe6, 0xad, 0xf3, 0x7d, 0x37, 0x18, 0xaf, 0x2f, 0x2c, 0xfa, 0x20, 0x3c, 0x88, 0x58, 0xa5, 0xf3, 0x81, 0xf3, 0xb5, 0xfb, 0xdd, 0x81, 0xd3, 0x2b, 0xb1, 0xdc, 0xf9, 0xf7, 0x93, 0x04, 0x52, 0x48, 0xe9, 0xda, 0x46, 0xed, 0x0c, 0x36, 0x9c, 0x21, 0xf9, 0x11, 0xfb, 0xe6, 0x02, 0xcc, 0x1f, 0xa5, 0x11, 0xd7, 0x9e, 0x0b, 0x8b, 0xd9, 0xc9, 0x24, 0x38, 0x32, 0x5b, 0xc6, 0xc8, 0x3e, 0xf3, 0x1f, 0xc3, 0xdc, 0x8f, 0xae, 0xd7, 0xc3, 0x71, 0xa4, 0xd1, 0x7b, 0xec, 0xd2, 0x99, 0xb8, 0x3e, 0x05, 0x96, 0x65, 0xbe, 0x47, 0x6f, 0x98, 0x04, 0x69, 0x0c, 0xab, 0xdd, 0x14, 0x72, 0x4f, 0x31, 0xa4, 0xb5, 0x25, 0xeb, 0x43, 0x74, 0x7b, 0xa9, 0xbc, 0xa7, 0xfb, 0x73, 0x86, 0x99, 0x0f, 0x34, 0x9a, 0xf0, 0x65, 0x3a, 0xbb, 0x3b, 0x7a, 0xc2, 0x56, 0x1c, 0x66, 0x50, 0xf2, 0x5f, 0xeb, 0x49, 0x75, 0x6e, 0x85, 0xc2, 0x88, 0x95, 0x86, 0x8c, 0x19, 0x90, 0xa8, 0xc1, 0x24, 0x53, 0xc3, 0x1e, 0xf9, 0xd4, 0x34, 0x79, 0x97, 0x67, 0xa6, 0xbe, 0x39, 0x7a, 0x7a, 0x5a, 0x8a, 0xd0, 0x1c, 0xdd, 0x11, 0xca, 0x3b, 0xb7, 0xb3, 0xd3, 0x59, 0x06, 0xa2, 0x33, 0xb9, 0x66, 0xa2, 0x3b, 0x43, 0xec, 0xd4, 0xf6, 0xb3, 0xb4, 0x2e, 0xe0, 0xcd, 0x19, 0xb1, 0x2e, 0x80, 0xb1, 0x08, 0x8a, 0x7c, 0xc3, 0xa1, 0x86, 0xdd, 0x75, 0x20, 0xf9, 0xb1, 0xbd, 0xcf, 0x22, 0xe1, 0x1d, 0xd8, 0xce, 0x52, 0x8d, 0xe5, 0xb6, 0xc8, 0x6c, 0x3e, 0xe5, 0x61, 0x51, 0x23, 0x06, 0x36, 0x60, 0x0b, 0x54, 0xd2, 0xcc, 0x27, 0x51, 0xdc, 0x8b, 0x7d, 0x75, 0xb9, 0xc5, 0x17, 0xef, 0xde, 0xfb, 0x52, 0x5f, 0x83, 0x79, 0x6d, 0xcf, 0xd9, 0x00, 0xb3, 0x66, 0xa9, 0x64, 0x12, 0xf7, 0x2a, 0xec, 0x9b, 0x74, 0x1e, 0x6b, 0xd5, 0x2d, 0xfc, 0xab, 0x28, 0x3d, 0x86, 0x35, 0xdf, 0x22, 0xac, 0x19, 0x7b, 0x62, 0x66, 0x5c, 0x69, 0x91, 0x3e, 0x2d, 0x7c, 0x6c, 0x5e, 0x05, 0xb1, 0x9f, 0x3b, 0x69, 0x1a, 0x64, 0xc5, 0xef, 0xd3, 0x8c, 0x50, 0xa3, 0x84, 0xe5, 0x28, 0xbe, 0x53, 0x48, 0x2f, 0xbf, 0xbb, 0xcf, 0x77, 0x33, 0x46, 0x7f, 0xd2, 0x7a, 0xb9, 0x2f, 0x8c, 0xba, 0x20, 0xc5, 0xc8, 0x8d, 0xc6, 0x35, 0x09, 0xc6, 0xbb, 0x0f, 0xd0, 0x2a, 0xbb, 0x4e, 0xdb, 0x76, 0xfb, 0xce, 0xa0, 0x47, 0xa9, 0x33, 0x82, 0x4d, 0x4c, 0x6d, 0xcb, 0x40, 0xb7, 0x5a, 0x67, 0xbc, 0xfb, 0xd0, 0xba, 0xad, 0xf8, 0x8d, 0xbc, 0x44, 0x3a, 0xbb, 0x7c, 0xc6, 0x95, 0xf0, 0x6a, 0x9a, 0x5d, 0x36, 0x5b, 0xe0, 0x69, 0xe4, 0x6f, 0xdb, 0xb1, 0x1f, 0xf4, 0x22, 0x6f, 0xd8, 0x5d, 0x74, 0x05, 0x02, 0xc6, 0xdb, 0x69, 0x55, 0x0a, 0xb6, 0xd8, 0x6b, 0x77, 0xf7, 0x78, 0x06, 0xcc, 0xad, 0xb0, 0x55, 0x70, 0x61, 0x69, 0xc9, 0x3e, 0x2c, 0xe3, 0x58, 0xb0, 0x1c, 0x63, 0xb8, 0x17, 0x66, 0xb0, 0x15, 0x9d, 0xba, 0xcb, 0xd8, 0xda, 0x3b, 0x75, 0x69, 0xd3, 0xae, 0xc0, 0x16, 0x6b, 0x27, 0xdc, 0xee, 0x6c, 0xf0, 0xb2, 0xde, 0xe4, 0xd1, 0x88, 0x69, 0xb2, 0xec, 0x7c, 0x59, 0x54, 0x57, 0x5c, 0x81, 0x90, 0xa1, 0xb2, 0x8d, 0x13, 0xf3, 0x85, 0xfb, 0xb5, 0x7b, 0xc1, 0x36, 0x9a, 0x6e, 0x3f, 0xe0, 0x68, 0x5f, 0x65, 0x6d, 0xcf, 0xc8, 0x6f, 0x5d, 0x8f, 0x8f, 0xc3, 0x1a, 0xee, 0x14, 0x02, 0x76, 0xb2, 0x2f, 0x9c, 0xe9, 0xfc, 0xae, 0x47, 0xe9, 0x0e, 0xbd, 0xb8, 0xbf, 0xee, 0xba, 0xa1, 0xd2, 0xc7, 0xf5, 0x07, 0x50, 0xae, 0xb8, 0x7b, 0xed, 0xd2, 0x87, 0x20, 0x21, 0x6f, 0xf7, 0x2a, 0xcf, 0x55, 0xa4, 0x91, 0x14, 0x1a, 0x11, 0x13, 0x8c, 0x3e, 0x8e, 0x2c, 0x2e, 0x12, 0x04, 0x7b, 0x2b, 0xd4, 0x61, 0x09, 0xeb, 0xb0, 0x44, 0x4b, 0xac, 0x77, 0xf7, 0xcf, 0xce, 0x0b, 0xfc, 0xf6, 0x0f, 0x9e, 0xeb, 0x58, 0x7a, 0x5d, 0xfe, 0x58, 0x6f, 0x96, 0x64, 0xdf, 0x75, 0xb2, 0xbb, 0xfc, 0xef, 0x0e, 0x31, 0x7f, 0x0c, 0xc2, 0x52, 0xbc, 0xb5, 0xf4, 0xde, 0x40, 0x2d, 0xb8, 0x4b, 0xf2, 0xba, 0x59, 0x7d, 0xde, 0x42, 0x68, 0xf9, 0x1d, 0xdc, 0xee, 0x65, 0x9e, 0x4c, 0x4b, 0x27, 0x71, 0x5c, 0x6c, 0x3b, 0x1c, 0x6d, 0x0e, 0x1c, 0x83, 0x32, 0x7a, 0xbf, 0xaa, 0x05, 0xbb, 0x68, 0x60, 0xb7, 0x53, 0x31, 0xff, 0x83, 0x35, 0x92, 0xff, 0xc1, 0x0d, 0xe8, 0x9f, 0x62, 0x71, 0xe2, 0x97, 0x13, 0xec, 0x1d, 0x63, 0x2c, 0x25, 0xa8, 0xa1, 0xaa, 0x76, 0xf4, 0xd0, 0x79, 0xe0, 0x46, 0xd4, 0x59, 0xe7, 0xf1, 0x46, 0xc8, 0x1e, 0xed, 0xe7, 0xde, 0x7f, 0x46, 0xe0, 0x98, 0x1c, 0x56, 0x83, 0xe5, 0x5d, 0xe6, 0xd1, 0x90, 0xfd, 0x4d, 0x42, 0xf5, 0x3c, 0x1c, 0xd9, 0xf9, 0x26, 0xd4, 0x6d, 0x97, 0x79, 0xd4, 0xe4, 0xc3, 0xcf, 0xa8, 0x43, 0x99, 0x11, 0x21, 0x4d, 0x35, 0x29, 0xf2, 0x3b, 0xc3, 0x61, 0x1f, 0x8e, 0x64, 0x74, 0x8b, 0x8c, 0xb9, 0xc4, 0x54, 0x24, 0x2a, 0x74, 0x1a, 0x63, 0x51, 0x2a, 0xbf, 0x2e, 0x01, 0xa5, 0xa0, 0x6a, 0xe4, 0xbe, 0x53, 0x6b, 0x5e, 0x80, 0xa9, 0xf7, 0x7d, 0x97, 0x24, 0x69, 0x92, 0x72, 0x76, 0xd0, 0x8e, 0xc3, 0xcc, 0xd6, 0xb1, 0xc7, 0x82, 0x18, 0x56, 0x36, 0x6e, 0x61, 0x06, 0x07, 0x16, 0x74, 0xd9, 0xef, 0xc3, 0x16, 0x43, 0x7d, 0x53, 0x6b, 0x47, 0x82, 0x14, 0xd5, 0x88, 0xa5, 0xfc, 0x71, 0x9d, 0x88, 0x60, 0x8b, 0xc1, 0xfe, 0xe3, 0x57, 0x74, 0x6a, 0x63, 0xf2, 0xfb, 0xcf, 0xa0, 0xd4, 0x36, 0x5b, 0xa7, 0xbe, 0x44, 0xef, 0x02, 0x23, 0xea, 0x2c, 0x25, 0xdd, 0x58, 0x0b, 0xe7, 0xba, 0x17, 0x50, 0x7b, 0x29, 0x02, 0x17, 0xed, 0xf2, 0x7d, 0xf3, 0x0f, 0x96, 0x69, 0x50, 0xab, 0x83, 0xf3, 0xcf, 0x18, 0x8a, 0xde, 0xbc, 0x02, 0x05, 0x3f, 0xbe, 0x02, 0xb3, 0xe9, 0xf6, 0x97, 0xf2, 0x4f, 0x3a, 0xc0, 0xd2, 0x0a, 0xb3, 0xc1, 0x9a, 0x81, 0xd0, 0xd3, 0xbb, 0xef, 0x6c, 0x85, 0x6a, 0xe0, 0xbe, 0x89, 0x79, 0xd0, 0x75, 0x0f, 0xe0, 0x7c, 0xe3, 0x05, 0x70, 0x61, 0xfc, 0x5a, 0x74, 0xbb, 0x50, 0xfa, 0xb3, 0x7a, 0x4e, 0xe9, 0xf8, 0xea, 0xa0, 0x51, 0xfd, 0xee, 0x76, 0x9d, 0x42, 0xe4, 0xcf, 0xac, 0x30, 0x72, 0x87, 0x02, 0x9e, 0x1b, 0xce, 0xa0, 0x57, 0x63, 0xe4, 0xaa, 0xbb, 0x0f, 0x05, 0x04, 0x85, 0xb4, 0xee, 0xa8, 0xe3, 0x8f, 0x85, 0x88, 0xda, 0xca, 0x3f, 0xc9, 0x80, 0x9c, 0x31, 0xd5, 0x45, 0x79, 0x41, 0x4f, 0xe6, 0x8b, 0xfb, 0x91, 0x6f, 0x8c, 0xa5, 0x7a, 0x63, 0x7d, 0xc7, 0xb0, 0x5a, 0x6e, 0x6d, 0x83, 0xdc, 0x6f, 0x64, 0xc0, 0xef, 0xf6, 0xd7, 0xc3, 0xd0, 0x59, 0xcc, 0xa3, 0x66, 0x7f, 0xe0, 0x37, 0x2f, 0x7b, 0x61, 0xe8, 0x2d, 0x1c, 0x15, 0x79, 0x43, 0x8a, 0x89, 0x7f, 0xa2, 0xcb, 0xa8, 0xbe, 0xb4, 0xdd, 0x50, 0x4a, 0xbb, 0x17, 0x91, 0x16, 0x03, 0x6f, 0x1e, 0xc6, 0x16, 0x70, 0x8a, 0x5a, 0xd4, 0x4c, 0xef, 0x36, 0xda, 0x36, 0xad, 0x76, 0x76, 0xb7, 0x6a, 0xdc, 0x4b, 0x4f, 0x76, 0x1b, 0x4b, 0xff, 0xfc, 0xca, 0x8b, 0x87, 0xeb, 0x2e, 0xa0, 0xc4, 0xea, 0xa4, 0x14, 0x7f, 0x39, 0xc0, 0x28, 0x41, 0xbd, 0x67, 0x10, 0xdb, 0x28, 0x15, 0xb9, 0xca, 0xc1, 0x0e, 0x1e, 0xbf, 0x55, 0x7b, 0x06, 0xa9, 0x85, 0x60, 0x37, 0x62, 0xa9, 0x80, 0x2c, 0x07, 0xdf, 0xee, 0xa6, 0x95, 0xed, 0x93, 0x84, 0xaf, 0x02, 0xc3, 0xfd, 0x77, 0x2e, 0x75, 0x80, 0xe1, 0xfe, 0xfc, 0x14, 0xec, 0x19, 0x05, 0x77, 0x76, 0x1f, 0xe2, 0x8c, 0xf7, 0x1b, 0xca, 0x7f, 0x7c, 0xd8, 0x98, 0x7c, 0xb6, 0xdb, 0x50, 0x42, 0x29, 0xbe, 0xb5, 0xca, 0xc1, 0x8b, 0x30, 0x54, 0xe8, 0xec, 0xf2, 0xa6, 0xa1, 0x74, 0x52, 0xf3, 0x7a, 0xe0, 0x37, 0xaf, 0x7a, 0xd5, 0xd9, 0xa3, 0xc7, 0x95, 0x40, 0xb5, 0x5e, 0xd1, 0x0e, 0x26, 0x38, 0xff, 0xdc, 0x5b, 0x4b, 0x69, 0x87, 0x6f, 0xd1, 0xd5, 0x0e, 0x60, 0xfd, 0x83, 0xe1, 0x93, 0xfa, 0x87, 0x89, 0xaf, 0x5e, 0x6a, 0x56, 0x5f, 0x7a, 0xde, 0xa4, 0x44, 0xbc, 0xfd, 0xc8, 0x9c, 0x78, 0x98, 0xf0, 0xb6, 0xd4, 0x9b, 0x61, 0x4e, 0xac, 0x5e, 0x76, 0x38, 0x20, 0x28, 0xfb, 0x97, 0x8a, 0x2a, 0x63, 0x8a, 0xee, 0x36, 0xa2, 0x16, 0x67, 0xc0, 0xb3, 0x99, 0xd6, 0x7d, 0xdf, 0x78, 0x8c, 0xf5, 0xa7, 0x6e, 0xc6, 0x6f, 0xc2, 0x71, 0xe7, 0x76, 0xb4, 0xc9, 0xf6, 0x75, 0x87, 0x89, 0x0f, 0x60, 0x69, 0xeb, 0x89, 0x4b, 0xeb, 0x6a, 0xaa, 0x57, 0xd0, 0xc9, 0x74, 0xdf, 0x0d, 0xf4, 0xaf, 0x20, 0x49, 0x1f, 0x79, 0xaa, 0xa6, 0xba, 0x87, 0xf6, 0xa5, 0xeb, 0x00, 0x69, 0x61, 0xfe, 0xb1, 0x1e, 0xa4, 0x86, 0x12, 0xb2, 0xde, 0x1a, 0x0a, 0xf7, 0xf7, 0x60, 0x0c, 0xab, 0x85, 0x46, 0xde, 0x5c, 0xfc, 0x35, 0x83, 0x03, 0x75, 0x44, 0xfa, 0xce, 0x05, 0x3a, 0xe5, 0x2c, 0x1f, 0xf9, 0x63, 0xa1, 0xa4, 0x15, 0x32, 0x4d, 0xc4, 0xd6, 0x86, 0x7d, 0xc1, 0x84, 0xda, 0xe1, 0xa5, 0xed, 0xd5, 0x84, 0xab, 0xca, 0x6c, 0xd4, 0x4b, 0xae, 0x6c, 0xab, 0x0e, 0x59, 0xec, 0x50, 0xd5, 0xc9, 0x21, 0x2e, 0xf2, 0xab, 0x97, 0xd2, 0x09, 0xc8, 0xc7, 0xbb, 0xd0, 0xa7, 0x96, 0xa4, 0x9c, 0x86, 0x74, 0xf7, 0x8a, 0x36, 0x48, 0xbb, 0xeb, 0x9d, 0x6d, 0xc7, 0x42, 0x55, 0x01, 0x74, 0x8d, 0x96, 0x5c, 0x18, 0xab, 0xf2, 0x40, 0xf0, 0x78, 0x88, 0xed, 0x1c, 0x47, 0x2d, 0x22, 0x63, 0xcc, 0xd8, 0x49, 0xc0, 0xd1, 0xae, 0x19, 0x7e, 0x39, 0xe9, 0x70, 0x1f, 0x3e, 0xb3, 0x76, 0x39, 0xcf, 0x76, 0xde, 0x78, 0x54, 0xee, 0x1e, 0x6d, 0x08, 0xfb, 0xd7, 0x62, 0x95, 0x82, 0xce, 0xa2, 0xe7, 0x0b, 0x25, 0x3b, 0xb5, 0x25, 0xb7, 0x1f, 0x5a, 0xee, 0x1d, 0xbb, 0x3b, 0x30, 0x4f, 0xe3, 0x5e, 0x41, 0x67, 0x0f, 0xbd, 0xf3, 0xc2, 0xb1, 0xe5, 0x55, 0x81, 0x6c, 0xe5, 0xfb, 0x2f, 0x54, 0x2f, 0x3f, 0x12, 0x3c, 0xbe, 0xfc, 0xc2, 0x33, 0x6b, 0xbb, 0x23, 0x25, 0xe8, 0x80, 0x8c, 0xbb, 0xde, 0xd9, 0x7e, 0xac, 0xbb, 0x2a, 0x80, 0xae, 0xd1, 0x92, 0x0b, 0x5b, 0xb2, 0xea, 0x10, 0xb6, 0xb9, 0xa9, 0xe4, 0x2f, 0x07, 0xfe, 0x82, 0xb2, 0xd5, 0xd8, 0x3b, 0xf2, 0xca, 0xc7, 0x4e, 0x06, 0x2e, 0x7f, 0x32, 0xf0, 0x66, 0x7b, 0xac, 0x14, 0xb9, 0x74, 0x62, 0x11, 0xaf, 0x1a, 0xc5, 0xce, 0xc1, 0x0f, 0xe8, 0x53, 0x64, 0xeb, 0xd5, 0x92, 0x8e, 0xdb, 0x8f, 0x74, 0xef, 0x0b, 0xcc, 0xcb, 0x62, 0xd0, 0x65, 0x98, 0xfb, 0x58, 0x69, 0xe2, 0xf2, 0x50, 0x5e, 0xd9, 0x6e, 0x28, 0xa9, 0x5e, 0x65, 0x4c, 0x3e, 0x14, 0x44, 0xda, 0xb9, 0xed, 0xe4, 0x2a, 0x82, 0x68, 0x70, 0x60, 0xbf, 0x2b, 0xf9, 0xf5, 0x01, 0x94, 0x2e, 0x06, 0xb2, 0x15, 0x4f, 0xae, 0xda, 0xf7, 0x02, 0x38, 0x22, 0x9a, 0xc7, 0x44, 0x92, 0x8c, 0x17, 0x91, 0x26, 0xc9, 0xb9, 0x0c, 0xa5, 0x48, 0xff, 0x74, 0x53, 0x72, 0xee, 0x8f, 0x7f, 0x5f, 0xfe, 0x49, 0x2d, 0xec, 0x5c, 0x3e, 0x0f, 0xe0, 0xf9, 0x0d, 0xcb, 0xdd, 0xab, 0xa6, 0x5f, 0x00, 0xce, 0x54, 0x9e, 0xf5, 0x97, 0xea, 0x1f, 0xd1, 0x38, 0xed, 0xb9, 0x2e, 0x2e, 0x36, 0xb8, 0x90, 0xba, 0xd7, 0xed, 0xeb, 0x9a, 0x57, 0x85, 0xdc, 0xbe, 0xf6, 0x67, 0xbf, 0x9f, 0x7e, 0xbd, 0x16, 0x9e, 0xec, 0xc2, 0x14, 0xe7, 0x31, 0xfe, 0xa3, 0xd3, 0x30, 0xbe, 0x65, 0x3a, 0xd4, 0x98, 0xca, 0x51, 0xb3, 0x9e, 0x8d, 0x23, 0x45, 0x4d, 0xea, 0xdb, 0x91, 0xb4, 0xf8, 0x35, 0xfb, 0xe8, 0xef, 0x77, 0x76, 0xcd, 0x73, 0x6f, 0xe8, 0xc2, 0xd1, 0x3f, 0xbf, 0x1c, 0xe3, 0x66, 0x27, 0xa4, 0xff, 0xb5, 0x7a, 0xb9, 0x67, 0xe0, 0xe8, 0x2b, 0xa2, 0xce, 0x50, 0x1c, 0xcd, 0xdd, 0x7a, 0xab, 0xbc, 0x8f, 0xfe, 0x1e, 0xeb, 0x73, 0x40, 0x4c, 0x1b, 0xfd, 0x10, 0x8d, 0x01, 0xf8, 0xcb, 0x03, 0x3f, 0xb3, 0x67, 0xe6, 0x2a, 0xed, 0xfa, 0x07, 0x43, 0xd8, 0xdb, 0x42, 0x0d, 0xe7, 0xe9, 0xcc, 0x2a, 0xd8, 0xeb, 0xee, 0x71, 0xa3, 0xdf, 0xee, 0x90, 0x37, 0x07, 0x4b, 0xfa, 0x3c, 0xa5, 0xb9, 0x55, 0x8a, 0x25, 0xfc, 0xbe, 0x48, 0x8a, 0x95, 0x52, 0x8a, 0x7d, 0x21, 0xcf, 0x12, 0xa4, 0x80, 0x67, 0x51, 0x33, 0x68, 0xc7, 0x56, 0x50, 0x7a, 0xcc, 0x7a, 0xe5, 0x95, 0x6d, 0xd9, 0x3c, 0xb5, 0xb2, 0x3c, 0x1a, 0x2c, 0x8f, 0xb5, 0x62, 0xc6, 0x1d, 0x79, 0x25, 0x91, 0x56, 0xc4, 0x3e, 0x5a, 0xc0, 0xf0, 0xb9, 0x1e, 0x32, 0x16, 0x7f, 0x4d, 0xbf, 0x54, 0x2c, 0x41, 0x0a, 0x52, 0x7a, 0xd2, 0x89, 0x46, 0x8c, 0xa3, 0x90, 0x4f, 0x05, 0x25, 0x4a, 0x3a, 0xde, 0x2d, 0xc2, 0xcd, 0x76, 0x0c, 0x4b, 0xf4, 0x2a, 0x49, 0xa2, 0x12, 0xb3, 0x58, 0xaa, 0x67, 0x20, 0xa3, 0xe3, 0x6b, 0xfa, 0x6e, 0x31, 0xe5, 0xa5, 0x2b, 0x60, 0xae, 0x57, 0xbd, 0x78, 0x05, 0xac, 0x0d, 0x70, 0xd3, 0xac, 0x87, 0xf3, 0x2b, 0xd7, 0xef, 0x7f, 0x6f, 0xe5, 0xda, 0x50, 0x1b, 0xf7, 0x0e, 0xd2, 0x7e, 0xf9, 0xfb, 0xc0, 0x19, 0x57, 0x11, 0x86, 0x27, 0x4e, 0x07, 0x0d, 0xed, 0x3a, 0x98, 0xd5, 0xb5, 0x71, 0xc5, 0xc4, 0x62, 0x26, 0x99, 0x5a, 0x69, 0x76, 0x75, 0xfd, 0xa1, 0x89, 0x15, 0xa0, 0x3d, 0x10, 0x24, 0x99, 0x90, 0xa4, 0x45, 0xb9, 0xf7, 0xe6, 0xba, 0x16, 0x39, 0x07, 0xe1, 0xdc, 0x13, 0xf8, 0xbc, 0x2a, 0x06, 0x26, 0x27, 0xf5, 0xc0, 0xb9, 0x9f, 0x66, 0xe1, 0x93, 0x0b, 0xe7, 0x36, 0x6b, 0x80, 0xfd, 0xfb, 0x41, 0xab, 0xff, 0xa1, 0xba, 0x86, 0x96, 0x79, 0xf3, 0xb3, 0x9b, 0x1b, 0xeb, 0xfc, 0x73, 0xfd, 0x8f, 0x80, 0x7e, 0x66, 0xa9, 0xbb, 0x40, 0xf8, 0x82, 0xbf, 0x90, 0x7b, 0x6f, 0xb6, 0x55, 0x30, 0x4e, 0xf9, 0x56, 0xf6, 0x94, 0x29, 0xd9, 0x39, 0xd6, 0x29, 0x53, 0x26, 0xde, 0xa6, 0x86, 0xff, 0x85, 0x7f, 0xe7, 0x9e, 0x9c, 0x8d, 0x4f, 0x3e, 0x3e, 0x56, 0x7c, 0xb0, 0x64, 0xbf, 0x53, 0xc0, 0xb9, 0x97, 0x6c, 0x70, 0xee, 0xd7, 0xcd, 0x70, 0xee, 0xe9, 0xed, 0x70, 0x6e, 0x27, 0xfa, 0xff, 0xbc, 0x1f, 0xfd, 0x36, 0xc1, 0xb9, 0x7f, 0xc3, 0x9a, 0xbc, 0x74, 0x16, 0xce, 0xfd, 0xa6, 0x04, 0x1f, 0x4c, 0xf7, 0x5c, 0x1b, 0x9c, 0xfb, 0x45, 0x3d, 0xba, 0xb7, 0xc0, 0xb9, 0x7f, 0x37, 0x63, 0xdc, 0xad, 0xf8, 0x2d, 0xc2, 0xb9, 0x5f, 0x22, 0xdc, 0x97, 0x6a, 0xe0, 0xdc, 0x6e, 0x0c, 0xdf, 0xbd, 0x1b, 0xce, 0xfd, 0xaa, 0x00, 0xfd, 0xe7, 0x87, 0xf1, 0x1f, 0x8e, 0xd7, 0x26, 0xc4, 0xc0, 0x66, 0x39, 0xef, 0xb5, 0x0f, 0x46, 0xea, 0x29, 0x38, 0xe6, 0xb6, 0xd4, 0x37, 0x37, 0xf8, 0x01, 0xbe, 0xeb, 0x6d, 0x68, 0x6b, 0x69, 0xe8, 0x68, 0x9b, 0xeb, 0xf3, 0x35, 0xce, 0x6b, 0x6d, 0xf9, 0x9e, 0x20, 0x3b, 0x04, 0x4f, 0xeb, 0xa2, 0x96, 0xfa, 0x02, 0x61, 0xc2, 0x42, 0x41, 0x0d, 0xc5, 0x33, 0x5c, 0x05, 0x16, 0xfc, 0x37, 0x63, 0x51, 0x9b, 0x6f, 0x51, 0x9b, 0xf0, 0x60, 0x63, 0x4b, 0x7d, 0xeb, 0x0f, 0x2c, 0xc5, 0x95, 0x33, 0xaa, 0x4b, 0x2d, 0x45, 0x0f, 0xd4, 0xcc, 0xb0, 0x3c, 0x58, 0x54, 0x51, 0x03, 0xa8, 0xa5, 0xeb, 0xa0, 0xb8, 0xb2, 0x02, 0x6a, 0x66, 0xcc, 0xa8, 0xac, 0x72, 0x57, 0x40, 0x76, 0x63, 0x8b, 0xa7, 0x15, 0x2c, 0x05, 0x70, 0xff, 0xa2, 0xd6, 0xb6, 0x86, 0x68, 0xe6, 0x46, 0x6b, 0xc7, 0x04, 0x6b, 0x7e, 0xc7, 0x44, 0x35, 0x54, 0xb7, 0xcd, 0xf5, 0xb7, 0x45, 0xfd, 0x0b, 0x04, 0x5f, 0x9b, 0x5f, 0xf8, 0xb6, 0x30, 0xc1, 0xa7, 0x06, 0xe6, 0xd9, 0xda, 0xfa, 0xd0, 0x17, 0xa2, 0x94, 0xcc, 0xa8, 0xb6, 0xcf, 0x5d, 0xd8, 0xc0, 0xa2, 0x99, 0x85, 0xea, 0x06, 0xef, 0x82, 0x86, 0x96, 0xb6, 0xf8, 0x44, 0x14, 0x0d, 0x1e, 0xb4, 0x17, 0xb7, 0xb6, 0x78, 0x1a, 0xbd, 0xc6, 0x89, 0x42, 0x4b, 0x6b, 0x9b, 0xd0, 0xb8, 0xc0, 0xd7, 0xdc, 0x40, 0x11, 0x1b, 0xea, 0xb3, 0x85, 0xaa, 0x29, 0xdf, 0xa6, 0xec, 0x85, 0xaa, 0x1c, 0xf6, 0xc6, 0x64, 0x45, 0xae, 0x92, 0x52, 0x37, 0xd2, 0x41, 0x4d, 0x6b, 0x6b, 0xf3, 0x42, 0x4b, 0x05, 0x15, 0x7a, 0x84, 0x5f, 0x49, 0xe3, 0xc2, 0x87, 0x98, 0xbf, 0x73, 0xf2, 0x03, 0x45, 0xa5, 0x42, 0x69, 0x47, 0xc3, 0xbc, 0x45, 0x6d, 0x0d, 0xf0, 0x80, 0xaf, 0x7e, 0x6e, 0x7c, 0xc5, 0x74, 0x13, 0x16, 0xea, 0xcc, 0x42, 0xe5, 0x8c, 0xe2, 0x69, 0xac, 0x74, 0xd1, 0x7a, 0x46, 0x63, 0x58, 0x8a, 0xea, 0xeb, 0x1d, 0x8d, 0xf5, 0xf5, 0x0d, 0x2d, 0x25, 0x0d, 0xed, 0x8d, 0xf3, 0x1a, 0x0a, 0x84, 0x72, 0x2c, 0x9e, 0xeb, 0x81, 0xca, 0x4a, 0xc1, 0xd7, 0xda, 0x88, 0xe5, 0xf3, 0x2f, 0x1c, 0x1f, 0x1f, 0xdd, 0xdd, 0xb0, 0xa0, 0xb5, 0xbd, 0xe1, 0xab, 0x53, 0xc4, 0xfe, 0x71, 0x70, 0x6e, 0x4b, 0x49, 0xcc, 0xfd, 0xaf, 0x3d, 0xb2, 0xdb, 0x8c, 0x8f, 0x7e, 0x84, 0x9b, 0x7d, 0x33, 0x5d, 0x8e, 0xec, 0xb2, 0x53, 0xaa, 0x5b, 0x40, 0xb0, 0xa4, 0xd0, 0x39, 0x36, 0xe1, 0xb0, 0xe3, 0x11, 0xa4, 0x1b, 0x76, 0x3b, 0x56, 0x9d, 0x96, 0xec, 0x3b, 0x7c, 0x20, 0xdf, 0x68, 0x48, 0x67, 0x4b, 0x71, 0xec, 0xc1, 0x18, 0x3f, 0x1b, 0x8c, 0xc5, 0xa0, 0xf5, 0x7e, 0x37, 0x42, 0xe0, 0xb3, 0xc3, 0x7f, 0x87, 0x14, 0x91, 0xff, 0xd9, 0x11, 0x21, 0x45, 0xba, 0xef, 0x1e, 0x72, 0xf4, 0x36, 0x7b, 0x13, 0xa4, 0x63, 0x8a, 0x70, 0x9d, 0x92, 0xa5, 0x80, 0x5a, 0xd2, 0x63, 0xc5, 0x78, 0x58, 0x3f, 0x9d, 0x5d, 0x8e, 0x7a, 0xc9, 0xdc, 0xcd, 0xcc, 0xce, 0x94, 0x74, 0x1d, 0x7b, 0x5c, 0x49, 0x9a, 0x5d, 0xeb, 0x2d, 0xea, 0xf8, 0xd8, 0x4f, 0xaa, 0x28, 0x76, 0x9d, 0x96, 0xc5, 0xce, 0xc2, 0x91, 0xbd, 0xde, 0xa2, 0x8e, 0x8b, 0xdf, 0x2d, 0x59, 0xab, 0xb2, 0x33, 0x79, 0x24, 0xe8, 0x6d, 0x11, 0xe8, 0x71, 0xb1, 0xea, 0x5d, 0xeb, 0xe3, 0xca, 0xa4, 0x60, 0xbb, 0x2e, 0x53, 0xd9, 0xae, 0x48, 0xad, 0xce, 0xb9, 0xbe, 0xaf, 0x3f, 0x18, 0xbb, 0x0b, 0x90, 0x72, 0x79, 0xfc, 0x75, 0xba, 0x9d, 0xb0, 0x92, 0xe1, 0x4a, 0x17, 0xbd, 0xeb, 0x71, 0xa8, 0x6e, 0xe4, 0xed, 0x8f, 0x37, 0x8f, 0x31, 0x1f, 0xc9, 0xb2, 0x47, 0x63, 0x6f, 0xe2, 0xd2, 0x8b, 0x2e, 0x42, 0xfb, 0x04, 0x07, 0x2c, 0x41, 0x8d, 0x75, 0x31, 0xba, 0x17, 0xa3, 0xbb, 0x1d, 0xdf, 0xdd, 0xf8, 0x5e, 0x8d, 0x7e, 0x3d, 0xe8, 0xa6, 0x75, 0xa1, 0x6e, 0xe9, 0x14, 0x1b, 0x78, 0x02, 0xfd, 0x36, 0xa2, 0x7b, 0x23, 0xba, 0xd7, 0xe1, 0xfb, 0x69, 0x7c, 0x6f, 0x47, 0xbf, 0xad, 0xe8, 0xde, 0x8a, 0xee, 0xa7, 0xe5, 0xbb, 0x7b, 0x9b, 0xc0, 0x51, 0x3e, 0x10, 0x5e, 0x86, 0xb8, 0x89, 0x7c, 0xef, 0x89, 0x73, 0x5f, 0x70, 0xad, 0xbf, 0x03, 0x35, 0x10, 0x98, 0x82, 0x29, 0x73, 0xee, 0x60, 0x77, 0x8f, 0x61, 0xfa, 0x3c, 0x4c, 0x3f, 0x15, 0x7d, 0x0a, 0xd0, 0x5d, 0x80, 0xee, 0x3c, 0xf9, 0x46, 0x71, 0x3a, 0xa5, 0x88, 0xec, 0x3f, 0xd8, 0x99, 0xd5, 0xd2, 0xcd, 0x4c, 0x02, 0x9d, 0x1b, 0x53, 0x52, 0x7e, 0x11, 0xf6, 0x08, 0xd3, 0x62, 0xf7, 0xf2, 0xd2, 0xfd, 0xe2, 0xfb, 0x8e, 0xa1, 0x36, 0x91, 0x51, 0x71, 0x11, 0x04, 0x1c, 0x57, 0x4d, 0xbe, 0x51, 0x91, 0xd0, 0xc1, 0x13, 0x13, 0x6c, 0x5c, 0x26, 0xc9, 0xa3, 0x3e, 0xc5, 0x30, 0xbf, 0xb1, 0xde, 0x32, 0x5f, 0xc2, 0x30, 0x1f, 0x9d, 0x57, 0xef, 0x4b, 0x1c, 0xe6, 0x63, 0xf0, 0xd0, 0xdd, 0x31, 0xd2, 0xad, 0xd1, 0x26, 0x4e, 0xe7, 0xda, 0x33, 0xf4, 0x44, 0xd5, 0x9a, 0xe8, 0xf7, 0x58, 0xfc, 0x5e, 0x19, 0xf7, 0x9d, 0x89, 0xdf, 0x8b, 0x99, 0x66, 0xbb, 0xc3, 0xa2, 0x16, 0x6c, 0x16, 0x23, 0xa8, 0xe8, 0x3e, 0x67, 0x1c, 0x0f, 0xb6, 0x60, 0xac, 0xce, 0x00, 0x24, 0x5c, 0x82, 0x0c, 0xd4, 0x44, 0xce, 0xf5, 0x0d, 0x40, 0x16, 0xfb, 0xbe, 0x86, 0xd4, 0x8d, 0xdf, 0x9b, 0xb3, 0x40, 0x4f, 0xdf, 0x0a, 0x1e, 0x8c, 0x74, 0xfe, 0x22, 0x0b, 0xfb, 0x04, 0xa5, 0x34, 0xc4, 0xc3, 0xb8, 0x97, 0x21, 0xd7, 0xfe, 0x02, 0xe4, 0xdb, 0x69, 0x6d, 0xe9, 0x36, 0x73, 0x13, 0xe6, 0xfa, 0xfc, 0x50, 0x0a, 0xcd, 0x7d, 0xb9, 0x6b, 0x68, 0x4f, 0x0a, 0x97, 0x2e, 0x16, 0x44, 0x4b, 0x60, 0xa8, 0x18, 0xb8, 0x79, 0xc3, 0xb5, 0x21, 0xae, 0xc4, 0x1b, 0xe2, 0x4a, 0xbb, 0x21, 0xae, 0xa4, 0xb4, 0x43, 0x4d, 0x10, 0x55, 0x4e, 0xa4, 0x04, 0x94, 0xc2, 0x8f, 0xc5, 0x61, 0xf3, 0xa0, 0xd5, 0xc4, 0xa5, 0x3b, 0xfa, 0xe8, 0x5c, 0x22, 0xe9, 0x86, 0x24, 0x39, 0xcf, 0x34, 0xba, 0x7f, 0x2d, 0x6c, 0x14, 0x21, 0x9c, 0x77, 0xff, 0x1a, 0xc7, 0x7b, 0x53, 0x0b, 0x8c, 0x60, 0xe2, 0xcc, 0x2a, 0x7d, 0x92, 0xde, 0x65, 0xa9, 0x04, 0xa3, 0x7c, 0x6e, 0xd4, 0x76, 0x1a, 0xd7, 0xb9, 0x5f, 0x38, 0x9f, 0x05, 0x84, 0xcb, 0x3d, 0xe9, 0x33, 0xf9, 0x39, 0x47, 0x51, 0x14, 0x76, 0x8d, 0xd1, 0x66, 0xa0, 0x58, 0x3d, 0x13, 0x4b, 0x20, 0x65, 0x62, 0x29, 0xa4, 0x4e, 0x2c, 0x83, 0xcc, 0x89, 0x76, 0x30, 0xf8, 0xf8, 0x89, 0x36, 0x48, 0x6f, 0x33, 0x1e, 0x27, 0xec, 0x5d, 0x17, 0xb4, 0xca, 0xc0, 0x0f, 0xc3, 0xdf, 0x0f, 0xd3, 0xce, 0xc8, 0x06, 0x80, 0xf3, 0x71, 0xd6, 0x4b, 0x59, 0x24, 0xc7, 0x42, 0x19, 0xd4, 0x42, 0x1d, 0x34, 0xc3, 0x62, 0xe8, 0x81, 0x8d, 0xf0, 0x34, 0xec, 0x80, 0x3e, 0x38, 0x42, 0xf7, 0x01, 0xd1, 0xec, 0x8e, 0x8f, 0x17, 0xd3, 0x65, 0xf7, 0x76, 0xbf, 0x42, 0xcc, 0x92, 0xdd, 0x5b, 0x7c, 0xaa, 0xe0, 0x76, 0x48, 0xa7, 0x53, 0xc2, 0x65, 0x9f, 0x47, 0xfd, 0xda, 0x2e, 0xc9, 0xa7, 0x9b, 0xf9, 0x74, 0xfa, 0x04, 0xf1, 0x14, 0x73, 0xf9, 0xfd, 0x36, 0xf1, 0x2c, 0x73, 0xcd, 0xc7, 0x5c, 0x02, 0x28, 0xab, 0x89, 0xec, 0x6b, 0x16, 0x34, 0xa3, 0xb6, 0x99, 0x21, 0xb2, 0xbb, 0x87, 0xbc, 0x95, 0xd0, 0xcc, 0xd3, 0x57, 0x09, 0xfb, 0x9a, 0x0a, 0xcd, 0x0a, 0xfa, 0xca, 0x63, 0x5f, 0x56, 0xba, 0xdb, 0x05, 0xbf, 0x8c, 0xec, 0x4b, 0x07, 0xcd, 0x5a, 0xfa, 0xca, 0x74, 0x6e, 0x07, 0x9d, 0x37, 0x6d, 0x22, 0x9d, 0x83, 0xa3, 0x13, 0x35, 0x2c, 0x4c, 0x09, 0xcd, 0x02, 0x86, 0x09, 0x76, 0xc4, 0x73, 0x26, 0xf6, 0xeb, 0x7e, 0x81, 0xee, 0xdc, 0x84, 0xa1, 0x41, 0x15, 0x4a, 0xf8, 0x90, 0xe1, 0x35, 0x60, 0xcb, 0xeb, 0x85, 0x69, 0xc5, 0x57, 0x40, 0x8f, 0x31, 0x0c, 0x18, 0xa3, 0x09, 0x71, 0x35, 0xd6, 0x93, 0xaa, 0xab, 0x8c, 0xe2, 0xd5, 0x25, 0xe6, 0x4c, 0x9c, 0x06, 0x63, 0xb1, 0x5f, 0x5c, 0x88, 0xef, 0x17, 0xd4, 0x9f, 0x63, 0xb1, 0xc2, 0xea, 0xf8, 0x56, 0xa6, 0x5b, 0x98, 0xe8, 0x26, 0xd1, 0xd9, 0x9d, 0x55, 0x6b, 0xa4, 0xf3, 0xa7, 0x84, 0x02, 0x23, 0x59, 0xee, 0xb7, 0x22, 0xef, 0x4a, 0xf3, 0x4e, 0x2d, 0xbd, 0x84, 0xb0, 0x9c, 0x31, 0x58, 0xc2, 0x43, 0xb0, 0x4e, 0xd4, 0x0a, 0xf3, 0x21, 0xd3, 0xa9, 0xf5, 0x2a, 0x53, 0xb5, 0x3b, 0xd2, 0xbc, 0x48, 0xe3, 0x82, 0xd6, 0x73, 0xd9, 0x6e, 0x17, 0xf9, 0x36, 0x2e, 0x2e, 0xee, 0xc1, 0xc8, 0x0d, 0xa1, 0xb3, 0x15, 0xb2, 0x1d, 0x7d, 0x81, 0x01, 0xf4, 0x9c, 0x51, 0x65, 0x22, 0x5a, 0x99, 0x06, 0x82, 0x4f, 0x37, 0x9c, 0x2a, 0xd8, 0xfd, 0xa7, 0x9d, 0xf7, 0x14, 0x43, 0xca, 0x3d, 0x76, 0x48, 0xbd, 0xa7, 0x04, 0xd2, 0xef, 0x29, 0x85, 0xb1, 0x6d, 0xc2, 0xf1, 0x35, 0x15, 0x03, 0xe1, 0xf9, 0xa2, 0x51, 0xb0, 0x69, 0xd6, 0x06, 0x60, 0xcb, 0xed, 0x9e, 0xb1, 0x06, 0x23, 0xed, 0x10, 0x92, 0x76, 0x66, 0x38, 0x6d, 0x6c, 0xfd, 0xe0, 0xdc, 0xe6, 0x6c, 0xc8, 0x14, 0x15, 0x98, 0x3a, 0x33, 0x86, 0x43, 0xc4, 0xe0, 0xeb, 0x15, 0x84, 0x8d, 0xca, 0x61, 0xd8, 0x58, 0xa7, 0x9b, 0x16, 0x87, 0x8d, 0x58, 0xd8, 0x41, 0x21, 0x19, 0x4b, 0x5b, 0x28, 0xdd, 0xf2, 0x52, 0xc8, 0x28, 0xdb, 0x80, 0x94, 0x6d, 0x70, 0xa1, 0xfe, 0x57, 0x8f, 0x14, 0x2d, 0xfa, 0xcc, 0xc3, 0x4b, 0xac, 0xa7, 0x12, 0x57, 0x4e, 0x40, 0x2a, 0x9e, 0x80, 0x54, 0x3c, 0xa1, 0x18, 0xd2, 0x51, 0xf2, 0x33, 0x22, 0x87, 0xcb, 0x24, 0xbe, 0x6d, 0xdc, 0x5d, 0x71, 0x69, 0x44, 0xde, 0x97, 0xa0, 0x5d, 0xe7, 0xbc, 0x75, 0xde, 0xb4, 0x6b, 0x49, 0xe2, 0xe3, 0xb3, 0x0b, 0xe5, 0x9b, 0x77, 0x0b, 0x8c, 0x0e, 0xc2, 0x98, 0xc1, 0x65, 0xa1, 0xb9, 0x78, 0xd3, 0x2d, 0xf2, 0x46, 0xbe, 0x84, 0xb9, 0xa6, 0x60, 0xae, 0xa9, 0x6d, 0x19, 0xac, 0xd7, 0xec, 0x94, 0x7b, 0xcd, 0x79, 0x3a, 0x71, 0x9c, 0x4e, 0x6e, 0x8c, 0xeb, 0x35, 0x69, 0x90, 0x89, 0xfd, 0x26, 0x1b, 0x0a, 0x01, 0xb5, 0x38, 0x98, 0x09, 0xf5, 0xf0, 0x28, 0x8e, 0x7e, 0x63, 0x45, 0xe5, 0xbd, 0xc4, 0x83, 0xc7, 0xde, 0x3b, 0x1f, 0x94, 0xd8, 0x0f, 0x7c, 0xe8, 0x27, 0x30, 0x3f, 0x05, 0x08, 0xcc, 0x2f, 0x43, 0x9c, 0x8d, 0x7e, 0x3a, 0xe6, 0x97, 0x08, 0x3a, 0xe6, 0x97, 0x29, 0x3a, 0xd0, 0x4f, 0xcf, 0xfc, 0x94, 0xa0, 0x67, 0x7e, 0x59, 0x62, 0x2e, 0xc1, 0xa3, 0xf4, 0x14, 0x9f, 0xc2, 0x91, 0x52, 0xa4, 0x99, 0xb2, 0x4c, 0x41, 0xab, 0x93, 0x6e, 0x2b, 0x48, 0x9f, 0x50, 0x84, 0xa9, 0xd5, 0x74, 0x87, 0xab, 0x97, 0xbe, 0x0d, 0xd8, 0x5e, 0x0f, 0xc5, 0xd3, 0x7c, 0x78, 0x6a, 0xf9, 0xa5, 0x11, 0x14, 0x7c, 0x19, 0x32, 0x87, 0xe1, 0x2d, 0x8e, 0x82, 0x19, 0xc6, 0xd8, 0xbd, 0xbc, 0x76, 0x9b, 0xf4, 0x20, 0x0d, 0xeb, 0xf4, 0x49, 0xba, 0x16, 0x58, 0x5d, 0xfa, 0x21, 0x74, 0xff, 0xea, 0x35, 0x6f, 0xfd, 0x8b, 0xef, 0xc3, 0x58, 0xef, 0x1c, 0x7d, 0x0b, 0xf6, 0xf0, 0x75, 0x1e, 0xc5, 0xfa, 0xd7, 0x44, 0x5e, 0xe7, 0x24, 0x3f, 0x4f, 0xa1, 0xfe, 0x7e, 0x36, 0xd7, 0x99, 0xe2, 0x5c, 0x37, 0x93, 0xcd, 0x92, 0xea, 0xd4, 0xfb, 0x03, 0xfa, 0x22, 0x8b, 0x09, 0x32, 0x69, 0x1c, 0xde, 0x6c, 0xa1, 0x76, 0xb4, 0xac, 0xa3, 0x6f, 0x69, 0x5e, 0xf0, 0xfb, 0x55, 0xa8, 0x29, 0x8f, 0xa5, 0x11, 0x5c, 0xd4, 0xea, 0xee, 0xdf, 0x21, 0xa5, 0x7d, 0xcc, 0xb3, 0x43, 0x54, 0x91, 0xbd, 0x70, 0x09, 0x52, 0xfa, 0xb0, 0xb8, 0x98, 0x23, 0xd6, 0x73, 0x2c, 0x8e, 0x06, 0x67, 0x5c, 0x0f, 0x53, 0xd9, 0xe2, 0xc7, 0xe7, 0x9b, 0x2e, 0x79, 0x7c, 0xa6, 0x1b, 0x0c, 0xd1, 0x07, 0x7d, 0xb5, 0x58, 0xbb, 0x33, 0x5f, 0xb8, 0xb3, 0xb9, 0x7f, 0xe4, 0xbd, 0xce, 0x5f, 0xbc, 0xe9, 0x39, 0xbc, 0xe5, 0x0b, 0x3e, 0xa1, 0x2f, 0xf8, 0x64, 0x8f, 0xf4, 0x19, 0x7c, 0x22, 0x96, 0x97, 0x2e, 0x56, 0x02, 0x19, 0x96, 0xdf, 0x8b, 0xdf, 0x2a, 0xe4, 0xf9, 0x39, 0x91, 0xbb, 0xa0, 0xef, 0x9b, 0x8a, 0x5a, 0x0f, 0xed, 0xbb, 0xb6, 0x49, 0xfb, 0xf3, 0xfe, 0xe3, 0xb8, 0xc1, 0x56, 0x2b, 0xdd, 0x87, 0xcb, 0xc6, 0xc1, 0xf0, 0x61, 0x3a, 0x65, 0x8f, 0xb7, 0x93, 0xc4, 0x43, 0xe1, 0xaf, 0x66, 0x18, 0x6d, 0x55, 0xf1, 0xe1, 0xdb, 0x59, 0xf8, 0x54, 0x76, 0x47, 0x49, 0x88, 0x46, 0x20, 0x4b, 0x02, 0xdd, 0x0b, 0x9e, 0xf0, 0xc9, 0xb4, 0x81, 0xa1, 0x1b, 0xae, 0xc7, 0xf5, 0x10, 0xe7, 0xf7, 0xa9, 0xeb, 0x71, 0x93, 0x74, 0x9e, 0x60, 0xc8, 0x43, 0xf7, 0x95, 0x54, 0xe1, 0x38, 0x2d, 0xf5, 0xeb, 0x7d, 0xc8, 0xf9, 0xb2, 0xb0, 0x3f, 0x2a, 0x05, 0xbb, 0x4e, 0x2b, 0xf2, 0x7e, 0x4e, 0x67, 0xd3, 0x05, 0x05, 0x9a, 0x11, 0xb1, 0x8f, 0x6f, 0x44, 0xaa, 0x55, 0x90, 0xbb, 0xaa, 0x87, 0xcd, 0x6c, 0x2b, 0x84, 0x3b, 0x68, 0x1e, 0x45, 0x08, 0x90, 0xdf, 0x78, 0x3a, 0x85, 0x4c, 0x43, 0x2e, 0xb2, 0xd5, 0x43, 0x49, 0xc1, 0x3a, 0x29, 0xc1, 0xc7, 0xd1, 0x49, 0x85, 0x6d, 0x30, 0x7d, 0x60, 0x68, 0x35, 0xf2, 0x18, 0x2d, 0xdd, 0xfa, 0xbe, 0x45, 0x4b, 0xb7, 0x81, 0xe2, 0x7b, 0xb4, 0x27, 0x5d, 0x54, 0xd2, 0xa9, 0xa1, 0x62, 0x0a, 0x96, 0x42, 0xc9, 0x38, 0xb5, 0xc2, 0xfd, 0x2c, 0xad, 0xb4, 0x60, 0x39, 0x6f, 0x73, 0x6d, 0x14, 0xa4, 0xfa, 0x1d, 0x12, 0x26, 0x41, 0xd6, 0x7b, 0x3d, 0xf1, 0x3d, 0x34, 0x5c, 0x60, 0x96, 0x7a, 0xa8, 0x12, 0xe1, 0xeb, 0xa9, 0xfe, 0x74, 0xbf, 0x3d, 0xc9, 0x28, 0xbf, 0xac, 0x22, 0x79, 0xc0, 0x1c, 0xa8, 0x5a, 0x83, 0xa1, 0x02, 0xf2, 0x31, 0xc4, 0xa9, 0x89, 0x64, 0x97, 0xd5, 0xba, 0x52, 0xd7, 0x63, 0x93, 0x6d, 0xa0, 0x60, 0x21, 0x4a, 0xa9, 0x7c, 0x1d, 0x5c, 0x3b, 0x64, 0xf3, 0x62, 0xf3, 0x17, 0x4a, 0x36, 0x4b, 0x54, 0x12, 0x1f, 0xc4, 0x51, 0xa8, 0x4b, 0x2e, 0x99, 0xc3, 0x8c, 0xdf, 0x7a, 0xc5, 0x7b, 0x2b, 0x11, 0xbf, 0xe9, 0x2c, 0xc7, 0x04, 0xa1, 0xdc, 0xb5, 0x76, 0x72, 0xc0, 0x08, 0x55, 0x6b, 0x3c, 0x2a, 0x92, 0x48, 0xec, 0xbb, 0x8c, 0xc0, 0x62, 0x2c, 0xf3, 0xa6, 0x61, 0xce, 0x4a, 0x96, 0x63, 0xc0, 0xa8, 0x90, 0xc3, 0xd7, 0x61, 0xb8, 0xc2, 0xdd, 0x2d, 0xd7, 0x6e, 0xcf, 0xcd, 0xc5, 0x72, 0xfd, 0x42, 0xa2, 0x43, 0xb8, 0xc3, 0xab, 0x61, 0x30, 0x81, 0xee, 0xb1, 0xaa, 0x5a, 0x23, 0x4c, 0xa6, 0x73, 0xc3, 0x65, 0x59, 0x02, 0xe8, 0xa6, 0xf8, 0xaa, 0x35, 0xee, 0x50, 0xd5, 0x8f, 0x08, 0x13, 0xbd, 0xa1, 0x96, 0x7e, 0x9d, 0xeb, 0xbd, 0x9e, 0x98, 0x94, 0x6a, 0x7f, 0x96, 0xd9, 0x78, 0xeb, 0x45, 0x1b, 0x8e, 0x50, 0x19, 0xc8, 0x83, 0x75, 0xb1, 0x11, 0x69, 0x68, 0x9d, 0x8f, 0x13, 0x53, 0xb0, 0x34, 0x1a, 0x46, 0x33, 0xf6, 0xaa, 0x35, 0x76, 0x5b, 0xe4, 0xb6, 0x2d, 0x93, 0xab, 0x0d, 0xe8, 0x96, 0xad, 0x5f, 0x4e, 0xa5, 0x33, 0xf3, 0x7e, 0xa9, 0x10, 0xb7, 0xb0, 0x75, 0x01, 0xa2, 0xbd, 0xb3, 0x55, 0x6b, 0xd8, 0x7d, 0xa8, 0x07, 0xc5, 0x7e, 0xba, 0x69, 0x9d, 0xf6, 0xa5, 0xb5, 0x0d, 0xc9, 0x14, 0xbc, 0x5d, 0x3f, 0xce, 0x2c, 0x49, 0x8b, 0xbb, 0xe5, 0x53, 0x06, 0x69, 0x85, 0x7d, 0x07, 0xe4, 0xea, 0x10, 0xca, 0xe6, 0x1a, 0xba, 0x0d, 0x30, 0xe1, 0x03, 0x49, 0xa2, 0x09, 0x9f, 0xa1, 0x99, 0x31, 0x2f, 0xf0, 0xbb, 0x10, 0xdf, 0x6d, 0x93, 0x2c, 0xd0, 0x89, 0xed, 0xd1, 0x81, 0xed, 0x11, 0xfe, 0x7e, 0xbd, 0x50, 0x4a, 0xbb, 0x4d, 0x0d, 0xb6, 0x99, 0xab, 0xec, 0xf6, 0x8a, 0x81, 0xc1, 0xa7, 0xe8, 0x66, 0xfb, 0x7d, 0x0a, 0x33, 0x2b, 0xcf, 0xf4, 0x81, 0xc1, 0x5c, 0xcb, 0x74, 0xc8, 0x17, 0x3b, 0x85, 0xe2, 0x2f, 0xb4, 0xcd, 0x7c, 0x51, 0x25, 0x14, 0x33, 0xba, 0x99, 0x83, 0x74, 0x3a, 0x8b, 0xe1, 0x8d, 0x77, 0x6d, 0x30, 0xd9, 0xc8, 0x25, 0x14, 0xa3, 0x4c, 0xa8, 0xc0, 0xde, 0xe0, 0x34, 0xb0, 0x5b, 0x52, 0xbd, 0x56, 0xac, 0x13, 0x50, 0x4b, 0x51, 0x3b, 0x61, 0xcb, 0x01, 0xe5, 0x5b, 0xfe, 0x89, 0x2a, 0x21, 0xfb, 0x37, 0x0c, 0xbb, 0x0a, 0xd7, 0x46, 0x5a, 0xdf, 0x63, 0xed, 0x59, 0x26, 0xad, 0xf5, 0xa1, 0xfb, 0x36, 0x1a, 0xfd, 0x58, 0x4b, 0x21, 0xfd, 0xb8, 0xf6, 0x7c, 0x7e, 0xc4, 0x40, 0xad, 0x0c, 0x61, 0xbf, 0x90, 0xec, 0x87, 0x11, 0xa3, 0x2a, 0xc0, 0x0d, 0xfb, 0x18, 0xc6, 0xd1, 0x16, 0x5b, 0x80, 0x56, 0x59, 0xbe, 0xaf, 0x45, 0x39, 0xd0, 0x82, 0x58, 0x49, 0x76, 0x6d, 0x90, 0xfd, 0xd1, 0x85, 0x18, 0x58, 0x8d, 0x18, 0xd8, 0x20, 0x59, 0x5a, 0x4f, 0x1f, 0xf8, 0xbc, 0x37, 0xbe, 0xc6, 0x26, 0xd6, 0x02, 0x58, 0x67, 0x33, 0x51, 0xca, 0x2d, 0x6a, 0xdd, 0x19, 0xad, 0xb5, 0x1f, 0x6b, 0xdd, 0x22, 0xd7, 0x7a, 0xe3, 0xf0, 0x5a, 0x0f, 0xd5, 0xc8, 0xb5, 0x2e, 0x19, 0x56, 0x6b, 0x13, 0x2b, 0x45, 0x27, 0x95, 0xc2, 0xa2, 0x18, 0x5e, 0x2a, 0x99, 0xc6, 0x14, 0x84, 0x15, 0x92, 0x57, 0x6f, 0x81, 0x89, 0x8d, 0x51, 0x4c, 0x58, 0x5d, 0x7b, 0x06, 0x0e, 0xc8, 0x98, 0x98, 0x23, 0xca, 0x7c, 0xe7, 0xf3, 0x5c, 0x76, 0xfa, 0xe7, 0x69, 0xe7, 0x0b, 0xd0, 0x89, 0xf9, 0x4a, 0x31, 0x03, 0x12, 0xe7, 0xc1, 0xf8, 0x4b, 0x64, 0xbd, 0x4e, 0x85, 0xd2, 0x3a, 0xc9, 0x64, 0xb9, 0xc3, 0x62, 0x7c, 0x8a, 0x31, 0x66, 0xc7, 0x62, 0xd0, 0xb8, 0x45, 0x33, 0xde, 0x24, 0x9d, 0xc3, 0xd7, 0xa1, 0xd0, 0xcf, 0x31, 0x3b, 0x16, 0xfa, 0x1a, 0x0f, 0x25, 0x96, 0x56, 0xb0, 0x82, 0x83, 0x7d, 0xe9, 0xa0, 0x12, 0x65, 0xb6, 0x2a, 0xe6, 0x36, 0x40, 0x0d, 0xba, 0x6b, 0x65, 0x89, 0x7e, 0x36, 0xc6, 0xca, 0x05, 0x91, 0x7d, 0x7d, 0x0a, 0xf5, 0x48, 0x7f, 0xf3, 0x31, 0xb4, 0x59, 0x97, 0xdc, 0x56, 0x78, 0x7c, 0x8d, 0x44, 0x95, 0x37, 0x9f, 0xf2, 0x87, 0x77, 0x04, 0xbc, 0x66, 0xb9, 0xee, 0xc9, 0xae, 0x3d, 0x9f, 0x1d, 0xac, 0x5a, 0x83, 0xfd, 0x44, 0x1b, 0xe7, 0xb3, 0x33, 0xd2, 0x53, 0xb0, 0x74, 0x0e, 0xd7, 0x22, 0xb2, 0x4f, 0x95, 0x69, 0xfa, 0x14, 0xdb, 0x8d, 0x7b, 0x5c, 0x3c, 0xed, 0x7a, 0x20, 0x7c, 0x00, 0x7b, 0x40, 0x81, 0x41, 0x65, 0x44, 0xa9, 0xcb, 0x67, 0x9a, 0x64, 0x0b, 0x0f, 0x4e, 0xa2, 0x9b, 0xd7, 0x2d, 0xe1, 0x43, 0xf6, 0xe7, 0xc2, 0x87, 0x99, 0x7b, 0x4a, 0xb8, 0xbf, 0xf8, 0x03, 0xf4, 0xaf, 0x08, 0x1f, 0x47, 0xbf, 0x93, 0xe8, 0x3e, 0x64, 0x6e, 0x61, 0x32, 0x66, 0xa5, 0xc1, 0x46, 0x7d, 0x6d, 0xcf, 0x35, 0x94, 0xb2, 0x0c, 0x4c, 0xe2, 0xc2, 0xaf, 0xdf, 0xf2, 0x4c, 0xea, 0x4a, 0xa7, 0x6f, 0xa4, 0x4d, 0xf4, 0xd9, 0xeb, 0x23, 0xfc, 0xb4, 0x71, 0x22, 0x24, 0x56, 0x49, 0x1a, 0x80, 0x62, 0xa7, 0x76, 0x12, 0x58, 0xab, 0x41, 0x83, 0x65, 0xad, 0x03, 0xc5, 0x46, 0x69, 0xff, 0x79, 0x9c, 0x2c, 0xa2, 0xc6, 0xbf, 0x47, 0xb9, 0x83, 0xa0, 0x96, 0xb4, 0xe7, 0xf8, 0xd1, 0xc2, 0x5b, 0x26, 0x69, 0xcc, 0x40, 0xa3, 0xe8, 0xb9, 0x3e, 0xb7, 0xd9, 0x26, 0xad, 0x1d, 0xb2, 0x7e, 0xc2, 0x4a, 0xb0, 0x6f, 0x35, 0x8b, 0x27, 0x20, 0xaf, 0xcc, 0x98, 0xe8, 0xfa, 0x22, 0x3f, 0xa1, 0x92, 0x28, 0xf4, 0x6d, 0x20, 0xe1, 0x0a, 0xc7, 0xa2, 0x3d, 0x37, 0x7a, 0xe8, 0x5c, 0x68, 0x06, 0xaf, 0x2d, 0xc6, 0x69, 0x88, 0xce, 0x45, 0x48, 0xb8, 0xe1, 0x7c, 0x2e, 0x3c, 0x48, 0xf7, 0x19, 0x90, 0xee, 0xc4, 0xe8, 0xee, 0x87, 0x96, 0x49, 0x90, 0x87, 0xa9, 0xce, 0x47, 0x6e, 0x9c, 0x46, 0xfd, 0x8f, 0x51, 0x1d, 0xd2, 0xd2, 0x86, 0x6c, 0xa2, 0x57, 0x48, 0xd8, 0x2f, 0x71, 0x43, 0x8c, 0xb5, 0xd9, 0xcc, 0x7c, 0xe0, 0x30, 0xca, 0x06, 0x3b, 0x4c, 0x93, 0xc0, 0xd9, 0xbb, 0x74, 0x1e, 0x6f, 0x02, 0xc4, 0xe5, 0x8d, 0x28, 0xc4, 0x2e, 0x19, 0x62, 0xe4, 0x0e, 0x6d, 0x83, 0x0e, 0xf4, 0xb7, 0xdd, 0x1f, 0x92, 0xda, 0x6b, 0xb0, 0xdf, 0x17, 0xe8, 0xc5, 0xd8, 0xad, 0x0a, 0x6c, 0x9f, 0x1b, 0xbe, 0x1f, 0x92, 0xbb, 0x99, 0xb9, 0x27, 0x31, 0x8a, 0x09, 0x1f, 0x9a, 0x54, 0x2a, 0xb5, 0x55, 0xc2, 0xa7, 0xe1, 0xfe, 0x49, 0x0b, 0xc2, 0x37, 0xc2, 0xc7, 0x7d, 0x3c, 0x86, 0x9f, 0x9c, 0x54, 0x12, 0x3e, 0x85, 0xf9, 0x9c, 0xc6, 0xe7, 0xac, 0xb3, 0xdb, 0xa3, 0xa2, 0xbd, 0x2a, 0xe4, 0x1f, 0x29, 0xed, 0x8d, 0x54, 0x8b, 0xba, 0x02, 0xdb, 0x93, 0xd6, 0xed, 0x2d, 0x4a, 0xfc, 0x2e, 0xc8, 0x65, 0xd6, 0x67, 0x1e, 0x2d, 0x61, 0x81, 0x62, 0x0c, 0x9c, 0x62, 0x3e, 0x12, 0x6f, 0xc7, 0x18, 0x7f, 0xdf, 0x44, 0x27, 0x73, 0xdb, 0xed, 0xec, 0x7b, 0x14, 0x7e, 0xf7, 0x90, 0x2e, 0xcb, 0x9f, 0xc0, 0xf8, 0x0a, 0x16, 0x7f, 0xbb, 0x14, 0x1f, 0xfd, 0xf6, 0xa3, 0x36, 0x90, 0x23, 0xad, 0x0f, 0xf3, 0x3b, 0x51, 0x1f, 0x00, 0xfe, 0xf9, 0x48, 0xbe, 0x03, 0x2d, 0x26, 0xc2, 0x49, 0x4a, 0x04, 0x47, 0x7f, 0xef, 0x30, 0x83, 0x38, 0x5f, 0xda, 0x09, 0xfe, 0xfd, 0xfa, 0xda, 0x35, 0xb3, 0x02, 0xf1, 0x3c, 0xca, 0xc8, 0x78, 0x14, 0xef, 0xb3, 0xa7, 0x21, 0x45, 0xc1, 0x74, 0x89, 0x3f, 0x6d, 0x64, 0x78, 0x5b, 0x45, 0xb7, 0xd5, 0x33, 0x28, 0x1a, 0x84, 0x9a, 0x61, 0x92, 0x6c, 0xe7, 0xb4, 0x51, 0xb8, 0x02, 0xe1, 0x5e, 0xe4, 0x3b, 0xe5, 0xb6, 0xa6, 0x58, 0xd7, 0x37, 0x23, 0x75, 0x2c, 0x43, 0x78, 0x74, 0x7e, 0xfd, 0x8e, 0x6c, 0x6a, 0x8f, 0xe5, 0xf3, 0xf8, 0xec, 0x5b, 0xb6, 0xc7, 0xdf, 0x15, 0xff, 0x5c, 0x7b, 0xe8, 0x27, 0x33, 0x18, 0xac, 0x8e, 0xd7, 0x77, 0x45, 0x5b, 0xa7, 0x3c, 0xae, 0x75, 0xec, 0xe1, 0xe3, 0xe4, 0xde, 0xa2, 0xc5, 0xd6, 0x29, 0x0b, 0x9f, 0x62, 0xee, 0xd1, 0xe1, 0xd3, 0x98, 0xfa, 0x2c, 0x6b, 0xb3, 0x0b, 0xd8, 0x66, 0x97, 0xb1, 0x2c, 0x57, 0xf1, 0xb9, 0x86, 0x25, 0x8d, 0xb5, 0xda, 0x85, 0x91, 0xf4, 0x77, 0xdd, 0x13, 0xa5, 0x3f, 0x23, 0xcb, 0x75, 0x12, 0xe4, 0x60, 0xbf, 0x4f, 0x65, 0x14, 0x98, 0x1b, 0xc1, 0xc1, 0xf5, 0x2c, 0xe2, 0x77, 0xd8, 0x3f, 0xa3, 0x31, 0xae, 0x67, 0x61, 0xaf, 0x5a, 0x80, 0xad, 0x0e, 0xac, 0x9c, 0x65, 0x52, 0x9b, 0x77, 0x70, 0x74, 0x53, 0x8f, 0xbd, 0x44, 0x6e, 0xdb, 0x84, 0x8a, 0x81, 0x4f, 0xb7, 0xd3, 0x79, 0x35, 0xac, 0x9d, 0xd9, 0x89, 0xf2, 0xce, 0x12, 0x0f, 0x40, 0x3f, 0x2b, 0xc1, 0x63, 0x0c, 0x12, 0xb6, 0x96, 0x78, 0x95, 0x49, 0x00, 0xa8, 0x51, 0xc7, 0x66, 0x00, 0x90, 0xd6, 0xb7, 0x09, 0x36, 0x3a, 0x53, 0xf2, 0xcf, 0x87, 0xff, 0x7c, 0x78, 0xfa, 0xc0, 0xa7, 0x3d, 0x4b, 0x0e, 0xbd, 0xfd, 0x23, 0x71, 0xb1, 0x41, 0x53, 0xdb, 0x45, 0xf0, 0x74, 0xc5, 0x96, 0xd1, 0xae, 0x8d, 0x58, 0xa3, 0x03, 0x32, 0xe7, 0xd7, 0xba, 0xf6, 0x7c, 0xea, 0x36, 0x40, 0xac, 0x84, 0x37, 0x5c, 0x46, 0xa9, 0x25, 0xcd, 0x48, 0x57, 0xa3, 0xc8, 0x8f, 0x4a, 0xfa, 0xe9, 0xe6, 0x5c, 0x29, 0x0e, 0x8e, 0x13, 0x9f, 0x6a, 0x23, 0x78, 0xfe, 0x54, 0x49, 0x5c, 0xdf, 0x5e, 0x4c, 0x77, 0xb3, 0x30, 0xbf, 0xc9, 0xe1, 0x03, 0xae, 0x8d, 0xc6, 0x9a, 0xaa, 0x35, 0x9a, 0x62, 0xe0, 0x3c, 0x63, 0xa9, 0x0c, 0x4c, 0x12, 0x08, 0x88, 0xa9, 0x8c, 0x4a, 0xa5, 0x1c, 0x14, 0xf1, 0x74, 0x5d, 0x31, 0x70, 0xad, 0x4f, 0xae, 0x6b, 0xa2, 0x54, 0x57, 0xa2, 0x71, 0xd4, 0x23, 0x24, 0x5d, 0xfa, 0x17, 0x34, 0x1f, 0x20, 0xd7, 0x3b, 0x21, 0xae, 0xd6, 0x4b, 0xe2, 0xea, 0xec, 0xd7, 0xd9, 0x0c, 0x8d, 0xa0, 0xa2, 0x55, 0x54, 0x92, 0x06, 0xae, 0x6d, 0x90, 0x46, 0x45, 0xd1, 0x2d, 0xd7, 0x4a, 0xe1, 0x42, 0xce, 0x10, 0x29, 0xf3, 0xdf, 0x5b, 0x4c, 0xd2, 0x28, 0x97, 0x25, 0x14, 0xeb, 0x4a, 0xcc, 0x4e, 0x92, 0xaa, 0xe5, 0xba, 0x25, 0x4a, 0x23, 0x97, 0xbd, 0x94, 0x4e, 0x51, 0x8f, 0x60, 0xdf, 0x50, 0x8d, 0xb5, 0x29, 0xc5, 0xda, 0xa4, 0x10, 0x7c, 0xc6, 0xbd, 0xb7, 0xca, 0xfa, 0xf3, 0x07, 0xb3, 0x07, 0xc3, 0x9b, 0xc9, 0xca, 0xc3, 0x02, 0xac, 0x84, 0x1b, 0x24, 0x9d, 0x84, 0x46, 0x03, 0xa6, 0xeb, 0x14, 0xe8, 0x55, 0x7a, 0x97, 0x37, 0xbb, 0xfc, 0x43, 0x70, 0xc4, 0xeb, 0x4c, 0xce, 0x6d, 0x50, 0xe2, 0xa1, 0xfd, 0x7d, 0x25, 0xc8, 0x0d, 0xa5, 0xba, 0xde, 0x52, 0x33, 0x27, 0x9d, 0xdf, 0xca, 0xeb, 0x55, 0xde, 0x42, 0x43, 0x0a, 0xdb, 0x5b, 0x7f, 0x41, 0x28, 0x8e, 0x41, 0xd1, 0xd9, 0xa3, 0x32, 0x9c, 0x22, 0xce, 0xff, 0x60, 0xcc, 0xff, 0xa6, 0x8b, 0x76, 0x4b, 0xd2, 0x38, 0x64, 0x93, 0x6e, 0x17, 0xf8, 0xdf, 0x84, 0x95, 0xa3, 0x77, 0x18, 0x52, 0xa4, 0x3d, 0x97, 0xfa, 0x14, 0x65, 0x88, 0x41, 0x8c, 0xc5, 0x3e, 0x5c, 0x7e, 0x11, 0x35, 0xc9, 0x4c, 0x1d, 0xea, 0xdb, 0xce, 0xc7, 0x64, 0xfd, 0x2d, 0x69, 0x7f, 0x40, 0x57, 0x24, 0x38, 0xcd, 0xc5, 0x98, 0x4b, 0xcf, 0xaf, 0x71, 0x5c, 0xf0, 0x9c, 0x8e, 0xd3, 0x1c, 0x15, 0x71, 0xa9, 0x0f, 0xc6, 0xfc, 0x63, 0xf9, 0x56, 0x6a, 0x24, 0x9c, 0x1a, 0x1d, 0x34, 0xa3, 0x25, 0xed, 0xed, 0x20, 0xfd, 0xc3, 0xdf, 0x26, 0xce, 0x46, 0x0c, 0x0f, 0xd3, 0x4a, 0x75, 0xcd, 0x98, 0xbb, 0x72, 0xe7, 0x0a, 0xaf, 0x4a, 0x67, 0x13, 0x46, 0x7b, 0xae, 0x8b, 0xa6, 0xb8, 0x7c, 0xa6, 0x7d, 0x59, 0xfd, 0x24, 0xac, 0xc7, 0x87, 0xfb, 0x73, 0xca, 0x38, 0x99, 0xce, 0x72, 0xec, 0x36, 0xf1, 0xed, 0x2f, 0xea, 0x88, 0x28, 0xc7, 0x9e, 0x26, 0x39, 0xd6, 0xe4, 0x40, 0x0a, 0xab, 0x80, 0x6c, 0x94, 0x38, 0xf2, 0x2d, 0x64, 0xff, 0x5b, 0x8c, 0x92, 0x47, 0x09, 0x4a, 0x1d, 0xa5, 0xe0, 0x30, 0xb8, 0x98, 0xb6, 0x31, 0x50, 0x84, 0xa5, 0x64, 0xf7, 0xcb, 0x44, 0xe0, 0xcf, 0xa2, 0x59, 0x87, 0x17, 0x2f, 0xc1, 0x12, 0x0c, 0x7d, 0x5d, 0x3f, 0x09, 0xda, 0x7d, 0x33, 0x6f, 0x39, 0x93, 0xf0, 0xfc, 0x4f, 0x0e, 0x8b, 0x69, 0x82, 0xfd, 0xb7, 0x17, 0x20, 0x9d, 0xee, 0x1d, 0xcd, 0x2f, 0xd2, 0x69, 0xf6, 0x87, 0x8c, 0x45, 0x7a, 0xec, 0x7a, 0x82, 0xd6, 0xab, 0x62, 0xf6, 0x41, 0xa7, 0x45, 0x95, 0x6c, 0x27, 0xd4, 0x22, 0x8c, 0x1a, 0xae, 0xef, 0x20, 0x17, 0x07, 0xb2, 0x1b, 0x13, 0x81, 0x73, 0xa3, 0x3e, 0x99, 0xad, 0xd3, 0xa2, 0x56, 0x4f, 0xbc, 0xf4, 0x89, 0x49, 0x74, 0x6f, 0x38, 0xfa, 0xd4, 0xbe, 0x00, 0xd9, 0xfa, 0x0c, 0x1d, 0x2f, 0xfb, 0xd3, 0x4d, 0xd7, 0x2e, 0x33, 0x6c, 0x0e, 0x09, 0x4a, 0x77, 0x60, 0xc4, 0x4c, 0x10, 0x20, 0x77, 0x53, 0x5a, 0x78, 0xe9, 0xf4, 0x14, 0x71, 0xaf, 0x2e, 0x01, 0x25, 0x7b, 0x96, 0x2a, 0xbc, 0xdd, 0xc4, 0xf6, 0x95, 0x78, 0x94, 0xf7, 0x91, 0x25, 0x4a, 0x8e, 0xcc, 0xf5, 0xb1, 0xc7, 0x0d, 0xbd, 0x5e, 0xb5, 0xa6, 0xea, 0x47, 0xee, 0xa5, 0xa2, 0xca, 0x64, 0xb3, 0xb7, 0x42, 0xce, 0x62, 0xd8, 0xb7, 0xb4, 0x0e, 0xc2, 0xed, 0x4e, 0x74, 0x63, 0xb9, 0xd6, 0xe9, 0xcd, 0x60, 0x9c, 0x50, 0x0e, 0x63, 0x27, 0x94, 0x80, 0x6e, 0x42, 0x33, 0xa4, 0x40, 0x26, 0xfe, 0xa6, 0x42, 0xfa, 0xbd, 0x9d, 0x30, 0x0a, 0xd2, 0x68, 0x0e, 0x15, 0x0c, 0x56, 0x0b, 0x14, 0xdc, 0x6b, 0x03, 0x63, 0x8e, 0x05, 0xa6, 0xde, 0x5b, 0x04, 0x26, 0x6b, 0x2b, 0xd8, 0xef, 0x75, 0x80, 0x99, 0xd9, 0x89, 0x67, 0x4f, 0xa0, 0x73, 0x6c, 0x72, 0xa2, 0xa5, 0xf4, 0x60, 0x29, 0x0b, 0x26, 0xd8, 0x20, 0x05, 0xb5, 0x50, 0x67, 0x4c, 0xf6, 0x88, 0x51, 0xf6, 0x50, 0x20, 0xce, 0xbd, 0x3a, 0x8e, 0xe2, 0x45, 0xa9, 0x47, 0x1a, 0x4b, 0xda, 0x41, 0xd4, 0xea, 0xd2, 0xbc, 0x2a, 0xb9, 0x6e, 0xbf, 0xa8, 0x5a, 0xed, 0xee, 0xda, 0xd7, 0xe5, 0xb9, 0x1c, 0x91, 0x78, 0x51, 0x03, 0xbb, 0x26, 0x8f, 0xc6, 0x92, 0x8f, 0x1a, 0x7d, 0xce, 0x48, 0x3e, 0x42, 0x6b, 0x5c, 0x1b, 0x47, 0x7b, 0x34, 0x93, 0x05, 0x85, 0xc8, 0x8e, 0x54, 0xab, 0x4e, 0xef, 0xb2, 0xb0, 0x55, 0x86, 0xcd, 0xdb, 0x25, 0xae, 0x11, 0xa5, 0xd0, 0x4e, 0xe4, 0x6f, 0x4d, 0x5c, 0x06, 0xdd, 0x06, 0xca, 0x74, 0xa2, 0x83, 0x6d, 0xd0, 0x2e, 0x53, 0xe1, 0xe0, 0x35, 0x49, 0xd2, 0xa5, 0xf3, 0x22, 0x45, 0xbe, 0x0d, 0x0c, 0xfc, 0x89, 0xd0, 0x89, 0x2e, 0xba, 0xfd, 0x93, 0x1b, 0xcb, 0x60, 0xfd, 0xa7, 0x04, 0x4b, 0x3a, 0xe5, 0x9c, 0x69, 0xf2, 0xd2, 0xac, 0xb6, 0x16, 0xe9, 0x31, 0x8d, 0xb9, 0xff, 0x0e, 0x19, 0xcc, 0xf2, 0x46, 0x9a, 0xdf, 0xbe, 0x8e, 0x24, 0xf4, 0x82, 0x34, 0xb7, 0x9d, 0xf0, 0x31, 0x18, 0xe9, 0x14, 0x20, 0x79, 0xde, 0xdb, 0xca, 0xe6, 0xbd, 0x3f, 0x27, 0x0b, 0x1d, 0xfc, 0x1e, 0x80, 0x7c, 0x1f, 0x87, 0xa9, 0x0a, 0x65, 0xc9, 0xd8, 0x86, 0xee, 0x12, 0x8c, 0xed, 0xc0, 0xa7, 0xd2, 0xaf, 0x3d, 0xb6, 0x26, 0x6e, 0xde, 0x5b, 0xc3, 0x66, 0xbd, 0x33, 0xc8, 0x7a, 0x82, 0xe6, 0xcd, 0xa2, 0xf5, 0x6a, 0xb7, 0xaa, 0x2b, 0xff, 0x56, 0xa2, 0x91, 0x6c, 0x28, 0xa5, 0xf9, 0xcc, 0x5b, 0xf3, 0xc7, 0x9d, 0x8c, 0x3f, 0xda, 0xb7, 0xfd, 0x97, 0xf8, 0x63, 0x8e, 0x5e, 0x65, 0xe0, 0xa4, 0x15, 0x26, 0x49, 0x52, 0xd5, 0x4b, 0x92, 0xaa, 0x5b, 0x5a, 0x95, 0x82, 0x04, 0x49, 0x52, 0x8d, 0x5a, 0xc3, 0xd9, 0x49, 0x23, 0x95, 0x24, 0x55, 0xd4, 0xfe, 0x33, 0x70, 0x74, 0xb6, 0xde, 0x53, 0x0c, 0x59, 0x13, 0x48, 0xf7, 0xfd, 0x10, 0x65, 0x55, 0xe7, 0x08, 0xdd, 0x57, 0xb6, 0xe3, 0xef, 0x6b, 0x93, 0x24, 0x7a, 0xe2, 0x42, 0xe8, 0xa7, 0x8e, 0xe8, 0xc3, 0x6c, 0x3c, 0x78, 0x4b, 0x3c, 0xeb, 0x7a, 0x98, 0xee, 0x07, 0x62, 0xeb, 0x5b, 0x89, 0xb1, 0x36, 0xa0, 0x79, 0x25, 0x6c, 0xef, 0xcb, 0x98, 0x82, 0xc9, 0x1d, 0x48, 0x27, 0x0e, 0x50, 0x31, 0xf7, 0x68, 0x1c, 0xff, 0x2a, 0x40, 0x8b, 0xf8, 0x4b, 0xa3, 0x7d, 0x0c, 0x3f, 0x2b, 0x73, 0x8e, 0xf6, 0x2a, 0x99, 0x2b, 0xa7, 0xf8, 0x0a, 0xc3, 0xd7, 0x16, 0xf3, 0xf7, 0xe9, 0x36, 0x20, 0xaa, 0x27, 0x9b, 0x73, 0x9c, 0xaa, 0x77, 0xa1, 0x16, 0x28, 0x4c, 0x4a, 0xa2, 0x99, 0x8a, 0xdf, 0x3d, 0x45, 0x77, 0xb0, 0xfd, 0x2e, 0x8f, 0x74, 0xef, 0xff, 0xc8, 0x2d, 0xff, 0x8c, 0xd6, 0x57, 0x44, 0xba, 0xa1, 0x4d, 0xd2, 0xfc, 0xd2, 0xbd, 0x8b, 0xeb, 0xd2, 0x99, 0x2b, 0xcd, 0x3b, 0xb3, 0x6e, 0x0e, 0x73, 0x8d, 0x41, 0x8a, 0xda, 0x2c, 0x1a, 0x99, 0x7b, 0xb2, 0xb7, 0xb9, 0x4e, 0xc3, 0x5c, 0x66, 0xf4, 0x5d, 0x26, 0xd6, 0x30, 0xb7, 0xc5, 0x5b, 0xcf, 0xde, 0x56, 0x8f, 0x5f, 0x6c, 0x32, 0xa3, 0xbe, 0xc5, 0x4e, 0xda, 0xd7, 0xe0, 0xc8, 0x6d, 0x82, 0x2d, 0xae, 0xf5, 0xe6, 0x80, 0x68, 0x8b, 0xb8, 0xc5, 0x3c, 0x74, 0xa1, 0xbe, 0x25, 0x14, 0x8b, 0xa6, 0xe8, 0x4c, 0x62, 0xa1, 0xb0, 0x0d, 0x76, 0x88, 0x79, 0x13, 0x48, 0x53, 0xdb, 0x21, 0x66, 0x4b, 0x31, 0x5c, 0x1b, 0x44, 0xb5, 0x1c, 0xd7, 0xce, 0xec, 0x0a, 0xd3, 0xa3, 0xf1, 0x35, 0x18, 0x7f, 0x97, 0xa8, 0x64, 0xf1, 0x77, 0x09, 0xd3, 0x87, 0xcf, 0xaf, 0x87, 0xf3, 0x98, 0x8d, 0x0d, 0x9b, 0x3f, 0xb4, 0xa4, 0x14, 0x13, 0x66, 0xe6, 0x44, 0xdb, 0x66, 0xb1, 0xb4, 0x4a, 0x88, 0x23, 0x9a, 0x05, 0xd2, 0x50, 0x52, 0x91, 0x66, 0xf5, 0xea, 0x75, 0x74, 0x9f, 0x25, 0xfa, 0x44, 0xd7, 0x88, 0xd4, 0x06, 0xc8, 0x0e, 0x49, 0xbc, 0xea, 0xfb, 0x55, 0x42, 0x82, 0x74, 0xb3, 0x8d, 0x34, 0x86, 0xa1, 0x96, 0xbf, 0xcd, 0x19, 0xa0, 0xb1, 0xa9, 0xc4, 0x26, 0xcd, 0xa1, 0xe5, 0xeb, 0xe8, 0x84, 0x73, 0x1d, 0x9d, 0x91, 0x33, 0x6c, 0x16, 0xc2, 0x08, 0xde, 0x4a, 0x1d, 0xe4, 0x16, 0x42, 0xda, 0xf1, 0x35, 0xed, 0x0a, 0xd9, 0xf7, 0x84, 0x5f, 0x41, 0x67, 0x29, 0x3a, 0x31, 0x37, 0x8f, 0x1e, 0x7f, 0xef, 0xf0, 0x8c, 0x45, 0x41, 0x3e, 0x01, 0xd2, 0x3d, 0xe9, 0x1a, 0x4b, 0xf8, 0x13, 0xb8, 0xd3, 0x93, 0xa2, 0x8b, 0xc4, 0x3d, 0x85, 0x94, 0xa4, 0x89, 0x7d, 0x11, 0x1d, 0x95, 0x64, 0x51, 0xbd, 0xa4, 0x99, 0x3b, 0xda, 0x51, 0x65, 0x6c, 0x85, 0x42, 0x36, 0xab, 0x64, 0x81, 0xfc, 0x36, 0x10, 0x79, 0x77, 0x08, 0xf1, 0xd1, 0x1c, 0x9d, 0x2b, 0xbf, 0xca, 0x7a, 0xf3, 0x3e, 0x6b, 0xe1, 0xa8, 0xfe, 0xe1, 0xfc, 0xd8, 0x44, 0xf6, 0xb2, 0xbf, 0xd0, 0xf1, 0x58, 0xef, 0x51, 0xef, 0xad, 0x88, 0xd5, 0xdb, 0x08, 0x06, 0x9b, 0x67, 0xa6, 0xd8, 0x29, 0xa4, 0x8e, 0x98, 0x09, 0xa8, 0x64, 0xbb, 0x74, 0x14, 0xfa, 0x44, 0xa4, 0x1c, 0x18, 0xd5, 0x8f, 0x79, 0x50, 0xbf, 0x6d, 0x21, 0x3f, 0xc9, 0x1d, 0xfe, 0x85, 0x61, 0x2f, 0xa5, 0xb0, 0x24, 0x8a, 0x4a, 0x43, 0x00, 0x5b, 0x5b, 0x81, 0x52, 0xd0, 0xe3, 0xf7, 0xb0, 0xb9, 0x2f, 0xf7, 0xb2, 0xaa, 0x55, 0xa2, 0xb2, 0x93, 0x9b, 0x36, 0x30, 0xd4, 0xad, 0x57, 0x56, 0x87, 0x8a, 0xae, 0x40, 0x7e, 0xa4, 0x94, 0x34, 0x56, 0x79, 0xd6, 0xbe, 0xb7, 0x52, 0x28, 0x39, 0xba, 0x5f, 0x3a, 0x6f, 0x41, 0x57, 0x1a, 0xb7, 0xfe, 0xc1, 0x77, 0x80, 0xa0, 0x88, 0xdd, 0xd4, 0x2e, 0xe8, 0x84, 0x42, 0xb2, 0x3c, 0x21, 0x8b, 0x6c, 0x15, 0x10, 0xbe, 0x15, 0x31, 0xad, 0xc3, 0xa1, 0x07, 0xef, 0x7c, 0xbf, 0x10, 0xab, 0x8d, 0xde, 0x86, 0xd2, 0x52, 0x16, 0xea, 0xfd, 0x19, 0xec, 0x24, 0x02, 0x1e, 0xc7, 0x94, 0x83, 0x64, 0xf7, 0xcd, 0x6e, 0x4c, 0xc1, 0xaf, 0x9b, 0xd7, 0xe9, 0xa4, 0xb6, 0x18, 0x07, 0x45, 0x9f, 0x23, 0xd4, 0x77, 0x24, 0x1f, 0x5a, 0x8b, 0x13, 0x6c, 0x3a, 0x27, 0xf5, 0x69, 0x51, 0x89, 0x54, 0xf8, 0xfc, 0xcd, 0x98, 0xbc, 0xd3, 0x2e, 0xcd, 0x0d, 0x63, 0xff, 0x85, 0x37, 0x5e, 0x73, 0x3c, 0xbc, 0x09, 0x2c, 0x2a, 0xd6, 0x8b, 0x9b, 0xa3, 0xbd, 0x58, 0x4b, 0xd2, 0x1c, 0x86, 0x7f, 0x61, 0xec, 0x97, 0xe9, 0x8f, 0x4e, 0xf0, 0x48, 0xc3, 0xf6, 0x51, 0xd0, 0x4d, 0x8a, 0xc4, 0x35, 0x7f, 0xb6, 0x01, 0xb4, 0x8c, 0xc6, 0x3e, 0x23, 0x08, 0x4c, 0xda, 0x7a, 0x1a, 0x65, 0xcd, 0x68, 0x9e, 0x43, 0x97, 0x11, 0x53, 0x74, 0xbf, 0x51, 0xca, 0xf0, 0x59, 0x49, 0x1d, 0x8d, 0xf6, 0xda, 0xaf, 0xdb, 0x41, 0x1d, 0x1b, 0x91, 0xc2, 0x6a, 0x89, 0x5a, 0xd9, 0x3c, 0x1a, 0x9d, 0xe2, 0xda, 0x0a, 0x5a, 0x36, 0xb7, 0xad, 0x64, 0x76, 0xa1, 0x52, 0x7e, 0xaf, 0x80, 0x86, 0xcd, 0xaa, 0xb1, 0xfc, 0x8a, 0x2e, 0xc0, 0xd3, 0xb1, 0x9c, 0xf4, 0xb4, 0xcb, 0xd6, 0x16, 0x93, 0x7e, 0x2c, 0xcc, 0x85, 0xe3, 0x81, 0x5d, 0x4a, 0x23, 0x42, 0xd8, 0x28, 0xcd, 0xc8, 0x39, 0xde, 0x9b, 0x9a, 0x43, 0xa7, 0xfb, 0x63, 0x1f, 0x30, 0x76, 0x80, 0x09, 0x5b, 0x84, 0x87, 0xf2, 0x81, 0xb0, 0x5a, 0x74, 0x45, 0xc7, 0xbc, 0xf5, 0x55, 0x6b, 0x84, 0xc4, 0x61, 0xda, 0x21, 0x10, 0x4d, 0x7b, 0xf5, 0x3a, 0xa5, 0x1e, 0x0c, 0x89, 0x44, 0x47, 0x4e, 0x9b, 0x47, 0x2f, 0xd3, 0x79, 0xa7, 0xbf, 0x03, 0x7b, 0xc8, 0x58, 0xe5, 0x52, 0x82, 0x24, 0xaa, 0xfc, 0x5e, 0x92, 0xa2, 0x44, 0x25, 0x6a, 0x55, 0xcf, 0x8b, 0xbb, 0x89, 0x16, 0x2a, 0x3b, 0xb1, 0x5e, 0xd1, 0xf1, 0x74, 0x68, 0x4b, 0xd5, 0x9a, 0x0e, 0x10, 0xcf, 0x63, 0x3f, 0xe4, 0x09, 0xa3, 0xde, 0x9c, 0x98, 0x4e, 0x6a, 0x04, 0x77, 0xb7, 0xa0, 0xf0, 0x73, 0x71, 0x92, 0x11, 0x59, 0xf8, 0x16, 0xa3, 0x74, 0x17, 0x5d, 0x33, 0xbe, 0xb9, 0x96, 0x46, 0x44, 0x3a, 0x5b, 0xce, 0x96, 0x15, 0xbb, 0x39, 0xc7, 0x84, 0x3d, 0x9a, 0xe4, 0xf6, 0x36, 0x40, 0x19, 0x6a, 0xaa, 0x4f, 0x15, 0x5f, 0x7a, 0x26, 0x5d, 0x59, 0xed, 0xeb, 0x74, 0xa8, 0x21, 0x98, 0x17, 0xb0, 0x32, 0x6f, 0xa1, 0x7b, 0x1b, 0x05, 0xf5, 0xd9, 0x1e, 0x26, 0x4b, 0x29, 0x8c, 0x01, 0x91, 0xc7, 0x9a, 0x55, 0x13, 0x04, 0xa3, 0x93, 0xf1, 0xfa, 0xbd, 0x94, 0x03, 0xdd, 0x08, 0xc3, 0xc6, 0x2f, 0xd9, 0x52, 0xfb, 0x4f, 0xaf, 0xff, 0xe9, 0xf5, 0xf2, 0x81, 0x9b, 0x6f, 0x8b, 0x82, 0x3e, 0xf5, 0x78, 0xe8, 0x78, 0x28, 0xbe, 0x37, 0x45, 0xe5, 0x83, 0xf5, 0x7a, 0x1c, 0x2f, 0x76, 0xb2, 0xf1, 0x22, 0x32, 0x7e, 0xdd, 0x6a, 0xcd, 0xc1, 0x42, 0x34, 0xa5, 0x11, 0x78, 0x1d, 0xeb, 0x1f, 0x31, 0xea, 0xa0, 0xbb, 0x0a, 0x04, 0xdb, 0x14, 0x3b, 0xa4, 0x4a, 0xed, 0x25, 0xa5, 0x65, 0xb4, 0x40, 0x36, 0x98, 0x13, 0x21, 0x35, 0x36, 0xa7, 0xcb, 0xc2, 0x2d, 0xa0, 0xc0, 0xf1, 0xcf, 0x48, 0x73, 0xfb, 0x55, 0x52, 0x9f, 0xa3, 0xd9, 0xd6, 0x2c, 0x2c, 0xaf, 0xc0, 0x56, 0x56, 0x66, 0x1a, 0x9a, 0x40, 0xdf, 0x06, 0xd3, 0x06, 0xc2, 0x8b, 0x45, 0x9d, 0x6e, 0x0c, 0xca, 0x3a, 0x72, 0x89, 0x05, 0xc4, 0x07, 0x72, 0x7d, 0x79, 0xfe, 0xd8, 0xf5, 0x38, 0x9b, 0x3d, 0x5e, 0x85, 0x1a, 0x7b, 0x56, 0x6f, 0xa8, 0xee, 0x04, 0xca, 0xf4, 0xfa, 0xf8, 0xf9, 0x63, 0x4b, 0x25, 0xf6, 0x41, 0x27, 0x64, 0x11, 0x56, 0x90, 0x9a, 0x9a, 0x24, 0xec, 0xc8, 0xe7, 0x7d, 0xe8, 0x31, 0xf7, 0x6c, 0x36, 0x1e, 0xa7, 0x08, 0xb6, 0xf1, 0xad, 0x48, 0x79, 0x69, 0xec, 0x7e, 0xe9, 0x94, 0xd8, 0x6d, 0x60, 0xd4, 0x83, 0x58, 0x79, 0xe8, 0x06, 0xca, 0x34, 0xb6, 0x7f, 0x58, 0x25, 0xed, 0x1f, 0xf6, 0xa4, 0xb1, 0xbb, 0xbe, 0xa3, 0x33, 0xd9, 0x48, 0x23, 0xfd, 0x55, 0x6b, 0x90, 0x72, 0xb5, 0x98, 0x9f, 0x86, 0xee, 0xdd, 0x12, 0x61, 0x68, 0x40, 0xba, 0x7f, 0x6b, 0x38, 0x2e, 0x87, 0x96, 0x7d, 0xc1, 0xbe, 0x42, 0x1c, 0xe9, 0x33, 0xd4, 0x22, 0xcb, 0xef, 0x6b, 0xd9, 0x3c, 0x74, 0xca, 0xfa, 0xd7, 0xd0, 0xef, 0x2d, 0x94, 0xad, 0xe6, 0x43, 0xad, 0x1f, 0xe4, 0xb9, 0xbe, 0xc1, 0x61, 0x32, 0x25, 0x8e, 0xaf, 0xb1, 0x6f, 0xa3, 0xcd, 0x48, 0x3e, 0xdb, 0x63, 0x3e, 0x64, 0xe9, 0x49, 0x3b, 0xec, 0x68, 0xce, 0x8b, 0xce, 0xff, 0xf0, 0x43, 0xaa, 0x09, 0xa6, 0xf8, 0x38, 0x23, 0xbc, 0xbb, 0x9d, 0xd9, 0x32, 0x17, 0xd3, 0xd9, 0x76, 0xf2, 0x57, 0x7e, 0xaa, 0x39, 0xea, 0x2e, 0xc4, 0x52, 0x99, 0x29, 0xec, 0xdd, 0xad, 0xb4, 0xbb, 0x8c, 0x6c, 0x38, 0x57, 0xbe, 0x00, 0xb9, 0x2b, 0xbb, 0x57, 0x06, 0xd6, 0xbf, 0x16, 0xed, 0xcb, 0x6f, 0x21, 0x6d, 0xe6, 0xd8, 0x4d, 0x60, 0x35, 0x32, 0x7c, 0x60, 0x48, 0x09, 0xf9, 0x62, 0x1f, 0x28, 0xa4, 0x33, 0x6d, 0xd8, 0xd7, 0x5e, 0xb2, 0x29, 0x90, 0xe6, 0x5a, 0xc3, 0x69, 0x55, 0x6b, 0x48, 0x0f, 0xee, 0x3b, 0x60, 0x4c, 0x10, 0x21, 0x21, 0xb5, 0x83, 0x74, 0x5c, 0x1d, 0xcd, 0xb8, 0x0d, 0x0d, 0x48, 0x96, 0x1d, 0x64, 0xe3, 0x41, 0xb3, 0x1c, 0x51, 0x0c, 0x53, 0x2f, 0x3c, 0x8c, 0x3e, 0x5d, 0x5e, 0xe0, 0x07, 0xe2, 0xe4, 0xf7, 0xdd, 0x6c, 0x9e, 0xe9, 0x82, 0x60, 0xc6, 0x5e, 0x49, 0xfb, 0xc6, 0x69, 0xd6, 0x83, 0xb4, 0x89, 0x26, 0x43, 0x33, 0x64, 0xa0, 0xf4, 0x9e, 0x45, 0x67, 0xd7, 0xb0, 0xf9, 0xd9, 0x12, 0x4b, 0x15, 0x54, 0xb1, 0xf9, 0x7c, 0x07, 0x72, 0x44, 0xa7, 0xc0, 0xe6, 0x71, 0xa3, 0xab, 0xbe, 0x67, 0xe2, 0x66, 0x72, 0x1d, 0x2c, 0xec, 0xd3, 0x61, 0x61, 0x6a, 0x39, 0xcc, 0x2a, 0x2a, 0xe8, 0x2c, 0xca, 0x68, 0xd8, 0x0e, 0xf9, 0x1b, 0x73, 0x41, 0xdd, 0x45, 0xe2, 0x2e, 0x21, 0x3d, 0x22, 0x19, 0x4a, 0xe4, 0xaf, 0x26, 0x92, 0xe5, 0x10, 0xf7, 0x3b, 0xd0, 0xaf, 0x4a, 0xf6, 0xdb, 0xc2, 0x66, 0x43, 0xb6, 0x60, 0xef, 0xce, 0x60, 0x52, 0xeb, 0xfb, 0x50, 0x63, 0x29, 0x92, 0x67, 0x7a, 0xaf, 0xb1, 0x99, 0xde, 0x12, 0x79, 0xa6, 0xf7, 0x86, 0x34, 0xd3, 0x2b, 0xcf, 0x01, 0x37, 0xb3, 0x53, 0x31, 0x7d, 0xb2, 0xa4, 0xdb, 0xc6, 0xe6, 0x8d, 0x3b, 0xd8, 0xd7, 0x65, 0xe8, 0xc4, 0x72, 0x04, 0x98, 0xfb, 0x03, 0xe8, 0x46, 0x77, 0x8f, 0x2c, 0x39, 0xaf, 0x46, 0xf7, 0x5a, 0x7c, 0x36, 0xe0, 0xb3, 0xc9, 0x5f, 0x33, 0x4c, 0x1e, 0xce, 0xb3, 0x76, 0xc2, 0xec, 0xa3, 0x7d, 0xf7, 0x38, 0x20, 0xed, 0x9e, 0x12, 0x48, 0x89, 0xad, 0x70, 0xe3, 0x68, 0x94, 0x49, 0xa5, 0xc3, 0x9e, 0x27, 0x95, 0xb8, 0x3e, 0x7e, 0x05, 0x05, 0xb5, 0x31, 0xb9, 0xa6, 0x62, 0x3a, 0xea, 0xb3, 0x19, 0x5f, 0x2f, 0x46, 0x7d, 0xa6, 0x09, 0x6b, 0x1c, 0x4d, 0x1d, 0xbf, 0x2e, 0x83, 0xba, 0x55, 0xb9, 0x41, 0x93, 0x9d, 0x68, 0xa2, 0x9d, 0x0d, 0x95, 0xe6, 0x52, 0xd2, 0x6b, 0x8c, 0x92, 0x9d, 0x82, 0x53, 0x9f, 0x68, 0x2c, 0x36, 0x8d, 0xca, 0xbe, 0x8d, 0x76, 0x7b, 0xf7, 0x2d, 0xf7, 0xe8, 0x44, 0xb3, 0x60, 0xd3, 0x18, 0x51, 0xb7, 0x52, 0xd1, 0x8d, 0x8f, 0x4c, 0x3a, 0xc2, 0x1c, 0x45, 0x15, 0x69, 0x75, 0xd2, 0x0c, 0x88, 0x50, 0x62, 0xb6, 0x13, 0x04, 0x4c, 0x7f, 0x1c, 0x53, 0x15, 0x62, 0xaa, 0x5c, 0xd1, 0xa6, 0x99, 0xc4, 0xd2, 0x08, 0x3e, 0xae, 0xf7, 0x59, 0x94, 0x7a, 0x34, 0xec, 0x9e, 0x36, 0x41, 0x9e, 0xed, 0x57, 0x47, 0xe4, 0x64, 0x06, 0x27, 0x59, 0x86, 0x53, 0x29, 0xc1, 0xa1, 0x95, 0x0e, 0x4f, 0xdf, 0x91, 0x17, 0xc0, 0x86, 0x2d, 0xd2, 0x23, 0xfa, 0x35, 0xcf, 0x22, 0xfd, 0x01, 0xc2, 0x98, 0x65, 0xc5, 0xfa, 0x6b, 0x6c, 0xc0, 0x79, 0x55, 0xf8, 0xcb, 0x7b, 0x9c, 0xd2, 0x6a, 0x93, 0xb4, 0x46, 0xd9, 0xe7, 0x16, 0x69, 0x25, 0x4c, 0x13, 0x91, 0xed, 0xfb, 0xdc, 0xc8, 0x43, 0xa6, 0x81, 0x20, 0x4b, 0xf2, 0x63, 0x09, 0x1b, 0xd2, 0x5e, 0x8f, 0xd8, 0x08, 0x37, 0xb4, 0x4e, 0x43, 0xb6, 0xac, 0x31, 0xae, 0x11, 0x29, 0x09, 0xf6, 0xb0, 0xb8, 0xb2, 0x40, 0x78, 0x89, 0x90, 0xc8, 0xbe, 0xf7, 0x67, 0x03, 0xdb, 0x5b, 0xbb, 0x1c, 0x31, 0xb5, 0x0f, 0xf9, 0xc9, 0x29, 0x5f, 0x9a, 0xac, 0xab, 0xf9, 0x88, 0x5f, 0xf8, 0x84, 0x5b, 0xf0, 0x61, 0xe4, 0x65, 0x53, 0x3a, 0x41, 0x80, 0x54, 0xc6, 0xcb, 0xd2, 0x46, 0x70, 0x63, 0x8d, 0x4f, 0x18, 0xce, 0x89, 0x5d, 0x0f, 0x93, 0xad, 0x1c, 0xd9, 0x99, 0xbe, 0x5a, 0x0f, 0xe7, 0xff, 0xc3, 0x17, 0x9c, 0x98, 0x74, 0x12, 0xdd, 0xdd, 0xf8, 0x6c, 0x82, 0x73, 0x07, 0xb5, 0x92, 0x81, 0x5d, 0x5e, 0xbe, 0xb5, 0xc3, 0x3a, 0xc2, 0xc6, 0x74, 0x98, 0x9f, 0x90, 0x3b, 0x25, 0x3b, 0xe7, 0xff, 0x86, 0x7d, 0xe9, 0xef, 0x57, 0xe3, 0x33, 0x1f, 0x1f, 0x11, 0x9f, 0x7a, 0xc9, 0x06, 0x14, 0x74, 0x58, 0xba, 0x41, 0x39, 0xbc, 0x0f, 0xce, 0xff, 0x6e, 0x03, 0x3e, 0x5b, 0xf0, 0xd9, 0x26, 0x3d, 0xff, 0x31, 0x07, 0x9f, 0x4a, 0x7c, 0x0a, 0xf0, 0x31, 0xe2, 0x93, 0x8e, 0x8f, 0x02, 0xce, 0xef, 0xfb, 0x18, 0x9f, 0xd3, 0xf8, 0x1c, 0xc1, 0x67, 0x2f, 0x3e, 0x18, 0x77, 0xdf, 0x26, 0x82, 0x89, 0x75, 0xc9, 0x8b, 0xd5, 0x0f, 0xbf, 0x72, 0x87, 0x7d, 0x75, 0x58, 0x0b, 0x84, 0x07, 0x5a, 0x16, 0x2d, 0x6c, 0xa8, 0x9f, 0x92, 0xa7, 0x1e, 0xe1, 0x71, 0xef, 0x48, 0x8f, 0xdc, 0x91, 0x1e, 0xdf, 0x18, 0xe9, 0x91, 0x33, 0xd2, 0x63, 0xca, 0x48, 0x0f, 0xeb, 0x08, 0x8f, 0x6f, 0x8d, 0xf8, 0xce, 0x1f, 0xf1, 0xfd, 0xcd, 0x11, 0xdf, 0x23, 0x4b, 0x79, 0xef, 0x17, 0x1b, 0x83, 0x43, 0x5c, 0x3d, 0xff, 0x8f, 0xed, 0x25, 0x5f, 0xbd, 0xf6, 0x55, 0xf6, 0x92, 0xaf, 0x5e, 0xfe, 0xaf, 0xda, 0x4b, 0x32, 0x5b, 0x91, 0xaf, 0xb0, 0x98, 0x7c, 0x75, 0xef, 0x97, 0x5b, 0x4c, 0xbe, 0x7a, 0x78, 0xa4, 0xc5, 0xe4, 0xef, 0x6b, 0xfe, 0x91, 0xc5, 0xe4, 0xab, 0x67, 0x47, 0x5a, 0x4c, 0xbe, 0x7a, 0xfc, 0x8b, 0x16, 0x93, 0xaf, 0x1e, 0xf8, 0xef, 0x5a, 0x4c, 0xba, 0x1e, 0x9e, 0x3e, 0xa3, 0x66, 0x86, 0x7b, 0x46, 0x65, 0x91, 0x30, 0xbd, 0xa2, 0xd8, 0x3d, 0xa3, 0xca, 0x3d, 0xa3, 0xb8, 0xb4, 0xba, 0x7a, 0x86, 0x5b, 0x30, 0x08, 0xd3, 0x4b, 0xa7, 0xcf, 0x70, 0x7f, 0x47, 0xa8, 0x29, 0x2d, 0x76, 0xb8, 0x66, 0x54, 0xce, 0x28, 0xff, 0x8e, 0x50, 0xee, 0x9e, 0xf1, 0x40, 0x95, 0x7a, 0x3a, 0xb6, 0x89, 0xd5, 0x2a, 0x38, 0x1a, 0x27, 0x57, 0x35, 0xf8, 0x3d, 0xad, 0xfe, 0x05, 0x73, 0x5b, 0xe6, 0x35, 0x08, 0xd3, 0x1b, 0xe7, 0xf9, 0x5b, 0x7d, 0xfe, 0xd6, 0x79, 0x0d, 0x0b, 0x17, 0xb6, 0xfa, 0x85, 0x92, 0xc6, 0xf6, 0xc6, 0x85, 0x8d, 0xad, 0x2d, 0x2c, 0x76, 0x9e, 0x55, 0xa8, 0x6e, 0xf5, 0xb4, 0xfd, 0x60, 0xae, 0xbf, 0x41, 0xa8, 0x9a, 0x3b, 0xef, 0xa1, 0xb9, 0x5e, 0x7c, 0xfb, 0x5b, 0xeb, 0x17, 0xcd, 0x6b, 0xc3, 0x28, 0x82, 0xbb, 0xa1, 0xb9, 0x81, 0x6c, 0x87, 0xd5, 0x5f, 0x1a, 0xb9, 0xb8, 0xd5, 0xf7, 0x88, 0xbf, 0xd1, 0x3b, 0xbf, 0x4d, 0x30, 0x16, 0x4f, 0x14, 0xa6, 0x7c, 0xeb, 0x5b, 0xdf, 0x30, 0xd3, 0x6f, 0x2e, 0xfb, 0xbd, 0x97, 0xfd, 0xe6, 0x09, 0xd3, 0x5b, 0xdb, 0x5a, 0xfd, 0xad, 0xcd, 0x73, 0x85, 0x8a, 0x96, 0x79, 0xd9, 0xea, 0xa2, 0xe6, 0x66, 0x81, 0x25, 0x59, 0x28, 0xf8, 0x1b, 0x16, 0x36, 0xf8, 0xdb, 0x1b, 0xea, 0xb3, 0xd5, 0xea, 0x1a, 0x47, 0xa9, 0x50, 0x3d, 0xa3, 0xac, 0xe6, 0xc1, 0x22, 0x77, 0xa9, 0xd0, 0xb8, 0x50, 0xc0, 0x02, 0xb7, 0x37, 0xd6, 0x37, 0xd4, 0x0b, 0x58, 0x8c, 0xb9, 0x2d, 0x82, 0xae, 0xa8, 0x5a, 0xa8, 0xa8, 0xd6, 0x09, 0x75, 0x73, 0x17, 0x62, 0xe0, 0xdc, 0x96, 0x7a, 0xe1, 0x07, 0x8d, 0x6d, 0xf3, 0x5b, 0x17, 0xb5, 0x09, 0x58, 0x1c, 0xff, 0xdc, 0x96, 0xb6, 0x47, 0xb2, 0xd5, 0x35, 0xad, 0x42, 0xdb, 0xfc, 0x06, 0x61, 0xc1, 0xdc, 0x8e, 0xc6, 0x05, 0x8b, 0x16, 0x08, 0x0d, 0x1d, 0x6d, 0x64, 0xe9, 0xec, 0x6b, 0xf0, 0x2f, 0x68, 0x6c, 0x6b, 0x43, 0x48, 0x75, 0x8f, 0x90, 0xad, 0x76, 0x73, 0xe3, 0xbc, 0xb9, 0x75, 0xcd, 0x0d, 0x42, 0xf3, 0xdc, 0x1f, 0x98, 0xd5, 0x51, 0x1c, 0x97, 0x54, 0x54, 0x17, 0x57, 0x16, 0x55, 0x4c, 0xaf, 0x16, 0x8a, 0x2a, 0x2b, 0x05, 0x2c, 0x84, 0xbb, 0xc8, 0x55, 0x53, 0x51, 0x5a, 0x2d, 0x3c, 0xe8, 0x28, 0xc5, 0xa2, 0xb9, 0x85, 0xd2, 0xda, 0x2a, 0x37, 0xe2, 0x5f, 0xc0, 0x06, 0xa8, 0x98, 0x5e, 0x55, 0x59, 0x51, 0x5a, 0x62, 0x56, 0x57, 0xb8, 0x8a, 0x2b, 0x1f, 0x28, 0xa9, 0x70, 0x95, 0x47, 0xbc, 0xe2, 0x13, 0xce, 0x28, 0xc3, 0x76, 0x72, 0x17, 0x3b, 0xf0, 0xb3, 0xc8, 0x5e, 0x51, 0x59, 0x51, 0xf3, 0x1d, 0x4a, 0x5b, 0x56, 0x51, 0xe3, 0x42, 0x30, 0xea, 0x32, 0x74, 0x17, 0x09, 0x55, 0x45, 0xee, 0x9a, 0x8a, 0xe2, 0x07, 0x2a, 0x8b, 0xdc, 0x42, 0xd5, 0x03, 0xee, 0xaa, 0x19, 0xd5, 0xa5, 0xac, 0x6a, 0x73, 0x5b, 0x1e, 0x89, 0x56, 0x4b, 0x98, 0xeb, 0x9d, 0xdb, 0xd8, 0xb2, 0xb0, 0x4d, 0x68, 0x6c, 0xf1, 0xf8, 0x1b, 0x5b, 0xbc, 0xcc, 0x2a, 0x9b, 0x55, 0x5e, 0xed, 0x6f, 0xf0, 0xce, 0xf5, 0xd7, 0x0b, 0x6d, 0x52, 0xb5, 0xa3, 0xc8, 0x33, 0xc6, 0x8a, 0x55, 0xe4, 0xfa, 0x8e, 0x30, 0x7d, 0x46, 0x49, 0x45, 0x19, 0x95, 0x0d, 0x99, 0x6a, 0x75, 0xc5, 0x0c, 0x57, 0xb5, 0x40, 0xf5, 0x29, 0x9d, 0x51, 0x36, 0x51, 0x1d, 0xc9, 0x6b, 0xee, 0xbc, 0x79, 0xad, 0x0b, 0x7c, 0xe8, 0x42, 0xf8, 0xc2, 0x0f, 0xfc, 0x84, 0xad, 0x16, 0x44, 0x63, 0x5b, 0x83, 0xbf, 0x71, 0x6e, 0xf3, 0xc2, 0x6c, 0x6c, 0xfe, 0xff, 0x06, 0x6a, 0x2b, 0x5c, 0x82, 0x6b, 0x86, 0x50, 0x3a, 0xb3, 0xd4, 0x55, 0x23, 0x54, 0x3b, 0x08, 0xab, 0x51, 0x64, 0xdb, 0x4b, 0x85, 0xca, 0x8a, 0x22, 0x7b, 0x65, 0xa9, 0xc0, 0xd0, 0x80, 0x85, 0x2c, 0x29, 0x9a, 0x5e, 0x54, 0xce, 0xb0, 0x5d, 0x54, 0x53, 0x3d, 0x03, 0x13, 0xb9, 0xd5, 0x71, 0xd5, 0x78, 0xb0, 0xa2, 0xc6, 0x31, 0xe3, 0x81, 0x1a, 0x4c, 0x34, 0xbd, 0xa2, 0xa6, 0xa8, 0x06, 0x2b, 0x61, 0x8e, 0xa6, 0x20, 0x08, 0x95, 0x33, 0xaa, 0x19, 0xbe, 0xed, 0x0f, 0x54, 0x57, 0x10, 0x76, 0x05, 0xec, 0x2c, 0x88, 0xe8, 0x6a, 0xb3, 0x3a, 0xea, 0x53, 0xe1, 0xaa, 0x29, 0x75, 0xbb, 0x1f, 0xa8, 0x92, 0x12, 0x7f, 0x21, 0x41, 0x85, 0x0b, 0xe1, 0x4c, 0x97, 0x41, 0x23, 0xc4, 0x19, 0xac, 0xcd, 0xab, 0x4a, 0x8b, 0x1f, 0x70, 0x55, 0x14, 0x61, 0x57, 0xa3, 0x04, 0x13, 0xd5, 0x45, 0xee, 0x8a, 0x6a, 0x2a, 0x0f, 0xa6, 0x24, 0x72, 0x7d, 0x00, 0x9b, 0x8b, 0xc8, 0xc1, 0x15, 0x69, 0xdf, 0x9a, 0x19, 0xcc, 0x2f, 0x9e, 0x94, 0x91, 0xb2, 0xa3, 0xd4, 0x3f, 0x77, 0xe1, 0xc2, 0x45, 0x0b, 0x1a, 0x16, 0x0a, 0x2d, 0xad, 0x44, 0xf8, 0xbe, 0xd6, 0x96, 0x85, 0x8d, 0x75, 0x8d, 0xcd, 0x8d, 0xd8, 0xc6, 0xd8, 0x57, 0x65, 0xfc, 0x92, 0x81, 0x7a, 0x0b, 0xeb, 0xb6, 0xd4, 0x38, 0x0b, 0x17, 0xf9, 0x7c, 0xad, 0xfe, 0x36, 0x75, 0xab, 0x67, 0x58, 0x13, 0x67, 0x0b, 0xd8, 0x24, 0xdf, 0x69, 0x5d, 0x24, 0x50, 0x4f, 0x9c, 0xdf, 0xe0, 0x6f, 0x40, 0xf4, 0x7b, 0x89, 0x5a, 0xb0, 0x25, 0xe6, 0x0a, 0xf3, 0xa2, 0x5d, 0x12, 0xdb, 0xa3, 0xa1, 0x05, 0xbb, 0x2f, 0x52, 0x08, 0x32, 0x69, 0xb3, 0xb0, 0xa0, 0xb5, 0xbe, 0xd1, 0xf3, 0x88, 0x99, 0x81, 0xae, 0x6f, 0x5c, 0xd8, 0xe6, 0x6f, 0xac, 0x5b, 0xd4, 0xd6, 0x40, 0xa0, 0xd5, 0x51, 0xea, 0x59, 0xd8, 0x2a, 0x34, 0xb7, 0x22, 0x19, 0xcc, 0x5d, 0x88, 0xfe, 0xd8, 0xd5, 0xb0, 0x9d, 0x1b, 0x31, 0x97, 0x96, 0xd6, 0x36, 0x04, 0x46, 0x1d, 0xd3, 0xdf, 0xd0, 0x86, 0xa5, 0x6c, 0x88, 0x75, 0xc0, 0xb9, 0xcd, 0x48, 0x28, 0x73, 0x89, 0x5f, 0xa8, 0x1b, 0x5b, 0x18, 0x3d, 0xb1, 0x7c, 0x1a, 0xa9, 0x30, 0x2d, 0xf5, 0x16, 0xac, 0x9a, 0xbf, 0x21, 0x96, 0x5b, 0xbd, 0xd0, 0xde, 0xe0, 0x27, 0xfe, 0xb3, 0x50, 0x2a, 0x47, 0xdb, 0xfc, 0xb9, 0x6d, 0x58, 0xcf, 0x79, 0xf3, 0xa3, 0xa9, 0xd4, 0x91, 0x08, 0xac, 0x7a, 0xf3, 0x90, 0x03, 0xf9, 0x9b, 0x1f, 0x11, 0x90, 0x17, 0x60, 0x49, 0x24, 0xa8, 0x0b, 0x59, 0x82, 0x6c, 0xb5, 0xab, 0x35, 0x52, 0x45, 0x29, 0x6e, 0x04, 0x07, 0x88, 0x0e, 0xda, 0xc0, 0x80, 0xd4, 0x48, 0xa5, 0x32, 0x0b, 0x0d, 0x0b, 0xdb, 0x5a, 0x7d, 0xbe, 0x86, 0x66, 0x01, 0xcb, 0xd2, 0x8a, 0xb5, 0xf5, 0xff, 0xa0, 0x11, 0xb1, 0xb2, 0xa8, 0xa5, 0xbe, 0xc1, 0x4f, 0xe5, 0x55, 0xfb, 0xe6, 0x12, 0x39, 0x2f, 0xa4, 0xe0, 0x36, 0xff, 0xdc, 0xfa, 0x86, 0x05, 0x73, 0xfd, 0x0f, 0xe1, 0x97, 0x27, 0xca, 0xb8, 0xcc, 0x12, 0xe7, 0x02, 0xc0, 0xb1, 0x46, 0x69, 0xee, 0x00, 0xc5, 0xb4, 0x01, 0x66, 0xb9, 0x76, 0xa6, 0xf2, 0x6f, 0x22, 0xf1, 0xea, 0xc5, 0x3d, 0x5c, 0xf1, 0x40, 0xe6, 0xe5, 0xf1, 0xf3, 0xc1, 0x0c, 0xa7, 0xc7, 0x57, 0x80, 0x19, 0xbf, 0x9e, 0xc7, 0xf7, 0x49, 0xf9, 0xdd, 0x2f, 0xbf, 0x8f, 0xcb, 0xef, 0xc3, 0xf2, 0xfb, 0x90, 0xfc, 0x3e, 0x80, 0xef, 0x5d, 0xf8, 0x3e, 0x25, 0xbf, 0xaf, 0x16, 0x0f, 0x70, 0x85, 0xf8, 0xbe, 0xe6, 0x5a, 0x88, 0x63, 0xc9, 0x7b, 0x7d, 0xe0, 0x5a, 0x9c, 0xc1, 0x59, 0x2d, 0x90, 0xc2, 0xdb, 0x6e, 0x0f, 0x9f, 0x73, 0x1c, 0xb3, 0xa1, 0x2c, 0xaf, 0xaa, 0xfc, 0x1b, 0x24, 0xb8, 0x16, 0xd9, 0x7f, 0x69, 0x51, 0x51, 0xfe, 0xa8, 0x3b, 0x9c, 0x46, 0xed, 0x1d, 0xc7, 0xc3, 0xd4, 0x93, 0xd5, 0x01, 0xcf, 0x80, 0x1f, 0xe2, 0x5d, 0x7e, 0x1c, 0x85, 0xb5, 0x5a, 0xe9, 0x6d, 0x65, 0x6f, 0x81, 0xfd, 0x6a, 0x03, 0xf4, 0x6b, 0x65, 0xbf, 0x42, 0x80, 0xce, 0x67, 0x0d, 0xaf, 0xc5, 0x67, 0xb5, 0x6b, 0xa1, 0xf3, 0xce, 0x26, 0xcd, 0xb8, 0x4e, 0xd0, 0xc3, 0x28, 0x91, 0x04, 0x98, 0x8b, 0x22, 0xad, 0x59, 0x0c, 0xf7, 0x3b, 0x81, 0x7e, 0x75, 0x22, 0xc9, 0x4b, 0x4f, 0xb0, 0xdf, 0xcd, 0x76, 0x84, 0x40, 0x0f, 0x86, 0x1d, 0xc0, 0xe7, 0x24, 0x3e, 0x7b, 0xf0, 0xd9, 0x87, 0xcf, 0x7e, 0x7c, 0x2e, 0xe3, 0xf3, 0x31, 0x3e, 0x37, 0xf0, 0x19, 0xfc, 0x47, 0x42, 0x19, 0x86, 0xf7, 0xc8, 0xcf, 0x12, 0x7c, 0x9e, 0xc0, 0xe7, 0x29, 0x7c, 0xd6, 0xc5, 0xb9, 0xb7, 0xe2, 0xf3, 0x3c, 0x3e, 0x3b, 0x6f, 0x95, 0x9e, 0x4a, 0xc3, 0xe7, 0x49, 0xef, 0x74, 0x83, 0xf4, 0x4e, 0x3d, 0x25, 0xbd, 0x47, 0x5f, 0x94, 0xde, 0xda, 0xb7, 0x65, 0xff, 0xa7, 0xe5, 0xf7, 0x4c, 0xf9, 0x6d, 0x02, 0xb8, 0x7f, 0xf0, 0x7f, 0xf6, 0x87, 0x9a, 0x44, 0xc1, 0xd0, 0xa0, 0xe3, 0xff, 0x24, 0x59, 0xc3, 0xe1, 0xa1, 0x1b, 0x28, 0x61, 0x2b, 0x5c, 0x6d, 0xa4, 0xc3, 0xa3, 0xef, 0x45, 0xd9, 0xf7, 0xcc, 0x30, 0xdf, 0x93, 0xb2, 0xef, 0xe1, 0x61, 0xbe, 0x07, 0x65, 0xdf, 0x5d, 0xc3, 0x7c, 0x77, 0xca, 0xbe, 0x5b, 0x86, 0xf9, 0x3e, 0x25, 0xfb, 0xae, 0x1c, 0xe6, 0xbb, 0x56, 0xf6, 0x6d, 0x1b, 0xe6, 0xbb, 0x44, 0xf6, 0x9d, 0x33, 0xcc, 0xb7, 0x59, 0xf6, 0x75, 0x0c, 0xf3, 0x6d, 0x97, 0x7d, 0x73, 0x86, 0xf9, 0xd6, 0xcb, 0xbe, 0x59, 0xc3, 0x7c, 0xdd, 0xb2, 0xaf, 0x72, 0x98, 0xaf, 0x4d, 0xf2, 0xbd, 0x79, 0x75, 0x98, 0x6f, 0xb6, 0xec, 0xfb, 0xd6, 0x30, 0xdf, 0x2c, 0xd9, 0xf7, 0xc0, 0x30, 0x5f, 0xb5, 0xec, 0xfb, 0x7c, 0xbc, 0xef, 0xcd, 0x1b, 0xb2, 0xef, 0xa6, 0x61, 0xbe, 0xe7, 0x65, 0xdf, 0xd0, 0x30, 0xdf, 0xe3, 0xb2, 0x6f, 0xf3, 0x30, 0xdf, 0xfd, 0xb2, 0xef, 0xcc, 0x88, 0xaf, 0x6b, 0x66, 0x78, 0x8b, 0xe3, 0xc3, 0xfb, 0xc2, 0xe1, 0xbe, 0xc9, 0x33, 0xc3, 0x37, 0x54, 0xd9, 0x90, 0x08, 0x0a, 0x8f, 0xca, 0x35, 0x7f, 0xb2, 0x23, 0x3c, 0x28, 0xaa, 0x8a, 0x3e, 0x04, 0x0d, 0xb9, 0xec, 0xd9, 0xe1, 0x6d, 0xdf, 0x6e, 0x01, 0x45, 0x78, 0xeb, 0xe4, 0x16, 0x50, 0x86, 0x9f, 0x16, 0x5a, 0xc2, 0x4f, 0xd7, 0x3e, 0x1f, 0x7e, 0x7a, 0x2e, 0xf5, 0x09, 0xc3, 0x64, 0x5b, 0x78, 0x8b, 0x0a, 0x60, 0xac, 0x77, 0x3e, 0xfe, 0xa6, 0x7b, 0x8c, 0x73, 0x91, 0xa6, 0x34, 0xbd, 0x12, 0x2c, 0x9a, 0x31, 0x41, 0x17, 0x1f, 0xde, 0x86, 0xae, 0xa7, 0xd0, 0x35, 0x8a, 0xce, 0x5c, 0xe5, 0x96, 0x89, 0xc0, 0xf5, 0x52, 0x3c, 0xb5, 0x51, 0x0a, 0xf5, 0xa4, 0x50, 0x7c, 0x7c, 0x03, 0xa7, 0x16, 0x01, 0x3a, 0xe4, 0xd4, 0x17, 0xa3, 0xbe, 0x06, 0x67, 0x36, 0x28, 0x1e, 0x02, 0xae, 0x12, 0x53, 0xb6, 0x93, 0x25, 0xbf, 0x57, 0x4d, 0xe9, 0x47, 0x3d, 0x8f, 0xb1, 0x9d, 0xf8, 0x7d, 0xb7, 0xd7, 0xea, 0xb0, 0x69, 0x00, 0x06, 0x25, 0xff, 0x94, 0x75, 0xe8, 0x9f, 0x43, 0xe5, 0xac, 0x91, 0xcb, 0x39, 0x34, 0xdf, 0x49, 0xb7, 0xaf, 0x6f, 0xa2, 0xd0, 0xdb, 0x04, 0x0c, 0x4d, 0x23, 0x97, 0xea, 0x80, 0x26, 0x1b, 0xb4, 0x94, 0x03, 0x28, 0xc4, 0xd9, 0x5f, 0x6b, 0x09, 0x3f, 0x03, 0x89, 0x32, 0x16, 0x94, 0x98, 0x7a, 0xd0, 0x25, 0x56, 0x32, 0xec, 0xc8, 0x25, 0x4f, 0x9d, 0x8c, 0x10, 0x91, 0x1f, 0x3e, 0x1f, 0xbe, 0xe1, 0x9a, 0x43, 0x1c, 0xe1, 0x66, 0x1d, 0xfa, 0xdc, 0x08, 0x0f, 0x12, 0x76, 0x00, 0x08, 0x3b, 0xa0, 0x62, 0x71, 0xf8, 0x6f, 0x77, 0x0a, 0x7a, 0x50, 0x7e, 0xe7, 0x51, 0x39, 0x5e, 0x8a, 0x04, 0x5b, 0x82, 0x56, 0xf8, 0x3c, 0x28, 0x46, 0xc4, 0xcd, 0x40, 0xa8, 0x08, 0xe9, 0x6f, 0xc4, 0x25, 0x44, 0x4a, 0x31, 0xd8, 0xfb, 0x15, 0x29, 0xd2, 0xbe, 0x90, 0x62, 0x43, 0x7c, 0x0a, 0x16, 0x5b, 0xc3, 0xe2, 0xa9, 0xe5, 0x52, 0x47, 0x62, 0xd7, 0xb3, 0xd8, 0x9e, 0x5b, 0xc6, 0xd6, 0x7f, 0x49, 0x6c, 0x57, 0x7c, 0xec, 0x6f, 0x77, 0xc2, 0x35, 0x48, 0x61, 0xf1, 0xd4, 0xac, 0xe6, 0xaa, 0x68, 0xec, 0xf9, 0x2c, 0x76, 0xa5, 0xb9, 0x07, 0xa9, 0x62, 0x70, 0xc6, 0x87, 0xe1, 0xbe, 0xca, 0xbf, 0xfd, 0x30, 0xcc, 0x4e, 0x04, 0x6e, 0x65, 0xf3, 0xd0, 0xad, 0xa0, 0x41, 0x5a, 0x24, 0x3d, 0x5a, 0x63, 0xf9, 0x3e, 0x28, 0xee, 0xeb, 0xb4, 0xa9, 0x40, 0x29, 0x1a, 0x25, 0xb8, 0xae, 0x39, 0xf7, 0xcf, 0xc8, 0x7e, 0x01, 0x54, 0xf7, 0xb1, 0x58, 0x52, 0x18, 0xc6, 0xe5, 0x69, 0x0d, 0x2d, 0xc9, 0x1e, 0xe0, 0x40, 0xa3, 0xba, 0x93, 0x76, 0x8c, 0xaa, 0xae, 0xa0, 0xdf, 0x6d, 0x94, 0xd3, 0xe7, 0x87, 0xb1, 0xfd, 0x6c, 0xd8, 0x7e, 0x1a, 0x7b, 0x40, 0x9b, 0x1d, 0x7e, 0x76, 0xf2, 0xf3, 0xe1, 0xed, 0x9a, 0xd3, 0xae, 0x45, 0x82, 0xcd, 0x9a, 0x1d, 0xde, 0x92, 0x03, 0xbc, 0x0d, 0xee, 0x63, 0x27, 0x54, 0x8d, 0xb2, 0xfe, 0x0b, 0xaf, 0x76, 0x7d, 0x0e, 0x4a, 0xd4, 0xcb, 0x6d, 0x5f, 0xa9, 0x23, 0x07, 0x60, 0x19, 0xac, 0x86, 0x75, 0xb0, 0x09, 0x9e, 0x84, 0xa7, 0x61, 0x1b, 0xf4, 0xc2, 0x11, 0xb8, 0xcc, 0xa9, 0x39, 0x23, 0x57, 0xc6, 0xd5, 0x73, 0x21, 0x6e, 0x23, 0xb7, 0x93, 0x3b, 0xc6, 0x5d, 0xe5, 0x53, 0x78, 0x33, 0xef, 0xe4, 0xe7, 0xf3, 0x9d, 0xfc, 0x13, 0xfc, 0x6e, 0xfe, 0x04, 0x7f, 0x2d, 0x21, 0x35, 0xc1, 0x9a, 0xe0, 0x4a, 0x68, 0x1e, 0xf1, 0x77, 0x22, 0xe1, 0xaa, 0x42, 0xad, 0x30, 0x25, 0xbc, 0x2e, 0x81, 0x47, 0xca, 0xa2, 0x32, 0xb6, 0x84, 0xcf, 0xb2, 0xdf, 0x0b, 0xec, 0xf7, 0x32, 0xfb, 0xbd, 0xca, 0x7e, 0xaf, 0xb1, 0xdf, 0x1b, 0xec, 0x97, 0x6e, 0xdd, 0x53, 0x51, 0x8a, 0x7e, 0xc2, 0xe9, 0x69, 0xec, 0x8f, 0xdb, 0xbf, 0xd6, 0x89, 0x23, 0xc6, 0xb3, 0xf8, 0x8b, 0x35, 0x97, 0x43, 0xcf, 0xb2, 0xd0, 0xb3, 0x72, 0x28, 0x37, 0x22, 0xf4, 0x02, 0x0b, 0xbd, 0x20, 0x87, 0xf2, 0x23, 0x42, 0x2f, 0xb3, 0xd0, 0xcb, 0x72, 0x68, 0xc2, 0x88, 0xd0, 0xab, 0x2c, 0xf4, 0xaa, 0x1c, 0xaa, 0x18, 0x11, 0x7a, 0x8d, 0x85, 0x5e, 0x93, 0x43, 0x13, 0x47, 0x84, 0xde, 0x60, 0xa1, 0x37, 0xe4, 0x50, 0x65, 0x2c, 0x94, 0x41, 0xda, 0xc6, 0xe2, 0x0c, 0xb2, 0x38, 0x54, 0xcb, 0x6c, 0xac, 0x9d, 0x2d, 0xbc, 0x7d, 0x2d, 0xab, 0xa7, 0x60, 0x1b, 0x51, 0xcb, 0x6c, 0xac, 0x5d, 0x24, 0xf4, 0x2c, 0x0b, 0xe5, 0x86, 0x85, 0x5e, 0x88, 0x86, 0x5e, 0x60, 0xa1, 0xfc, 0xb0, 0xd0, 0xcb, 0xd1, 0xd0, 0xcb, 0x2c, 0x34, 0x61, 0x58, 0xe8, 0xd5, 0x68, 0xe8, 0x55, 0x16, 0xaa, 0x18, 0x16, 0x7a, 0x2d, 0x1a, 0x7a, 0x8d, 0x85, 0x26, 0x0e, 0x0b, 0xbd, 0x11, 0x0d, 0xbd, 0xc1, 0x42, 0x87, 0xd7, 0x52, 0x85, 0xb5, 0xcc, 0x0e, 0x0f, 0xb2, 0xf0, 0x41, 0xc1, 0xc6, 0x5a, 0x34, 0xca, 0x93, 0x3e, 0x3b, 0x8e, 0x3c, 0x89, 0xb8, 0x83, 0xc2, 0x6a, 0x3b, 0xfa, 0xa1, 0x4c, 0x13, 0xb1, 0xd0, 0x5d, 0x52, 0xe8, 0xe0, 0x79, 0x16, 0x7a, 0x76, 0x44, 0xe8, 0x26, 0x39, 0xf4, 0x10, 0x0b, 0xbd, 0x30, 0x22, 0x74, 0xb1, 0x1c, 0xba, 0x8d, 0x85, 0x5e, 0x1e, 0x11, 0x3a, 0x5b, 0x0e, 0x5d, 0xcd, 0x42, 0xaf, 0x8e, 0x08, 0x9d, 0x2a, 0x87, 0xb6, 0xb0, 0xd0, 0x6b, 0x23, 0x42, 0x05, 0x39, 0xb4, 0x8a, 0x85, 0xde, 0x18, 0x11, 0xca, 0xcb, 0xa1, 0x39, 0x2c, 0x14, 0x5b, 0xd5, 0xc2, 0xc5, 0x87, 0xdf, 0x38, 0x23, 0x87, 0xa7, 0xea, 0xc6, 0x09, 0xed, 0x69, 0xa7, 0x91, 0x73, 0xab, 0xbc, 0x29, 0x8e, 0xf7, 0x0a, 0xc1, 0x04, 0x06, 0x15, 0x93, 0xa9, 0x2e, 0x5b, 0x78, 0x1d, 0xbc, 0xff, 0x1d, 0xbe, 0x08, 0x6e, 0xd7, 0xe5, 0xa5, 0xf5, 0x61, 0x8c, 0x64, 0x0f, 0xef, 0x78, 0x59, 0x0f, 0x57, 0x66, 0xd1, 0xde, 0x71, 0x48, 0x38, 0xf7, 0x4c, 0x45, 0x5f, 0x7f, 0xf0, 0x68, 0x1f, 0x9d, 0xc8, 0x82, 0x18, 0x0e, 0x20, 0x86, 0x31, 0x87, 0xe1, 0xe5, 0xb8, 0x21, 0xd7, 0xff, 0x73, 0xac, 0xbf, 0x14, 0x12, 0x19, 0xaf, 0x6e, 0xb4, 0xcb, 0x21, 0x6b, 0x47, 0xb6, 0xc6, 0x8d, 0x32, 0x39, 0xa4, 0x9d, 0x95, 0xfd, 0xe9, 0x07, 0x7a, 0x46, 0x84, 0x1b, 0xe4, 0xf0, 0x99, 0xe4, 0xfb, 0x40, 0xcf, 0x2d, 0xca, 0x6e, 0xfd, 0x67, 0xca, 0xae, 0x4a, 0x04, 0xa5, 0x57, 0x61, 0x0f, 0x89, 0xe9, 0xef, 0xbf, 0xaa, 0x57, 0xe8, 0xf3, 0xf4, 0x7d, 0xe8, 0x43, 0xf1, 0xf7, 0xbf, 0xff, 0x6a, 0xa2, 0xfd, 0x9d, 0x6d, 0xf8, 0x35, 0xca, 0xcb, 0xdb, 0xbb, 0xde, 0x7f, 0x55, 0x19, 0xc2, 0x91, 0x8d, 0x5f, 0x90, 0xeb, 0xcd, 0x88, 0xaf, 0xc9, 0xdf, 0xb7, 0x4b, 0xe5, 0x19, 0x38, 0x28, 0x66, 0xc4, 0x97, 0xf3, 0xef, 0x4b, 0x64, 0xff, 0xe7, 0x1d, 0x7d, 0x27, 0x02, 0xef, 0xbf, 0x3a, 0x8a, 0xd6, 0x92, 0x9b, 0x6e, 0x09, 0xa1, 0x49, 0x8e, 0xd9, 0x2d, 0x66, 0x0d, 0x83, 0x50, 0x28, 0xfb, 0x37, 0x3b, 0xfa, 0x44, 0xde, 0x1e, 0x30, 0x02, 0x96, 0x85, 0xf7, 0xa6, 0x0a, 0xc5, 0x2c, 0x94, 0x30, 0xa8, 0xef, 0x0f, 0xf5, 0x77, 0x8b, 0xe9, 0x27, 0x42, 0xb2, 0x5f, 0x1d, 0xbb, 0xfb, 0xaa, 0x5b, 0x54, 0xa0, 0x4f, 0x82, 0x60, 0x43, 0x49, 0xbd, 0x10, 0xb1, 0x57, 0x2c, 0x14, 0x72, 0x1c, 0x70, 0xc4, 0xa9, 0x3f, 0xbb, 0x9a, 0x83, 0x1c, 0x59, 0xcb, 0x21, 0x47, 0x1e, 0x25, 0xb4, 0x2b, 0x4e, 0xf7, 0x7f, 0x18, 0x7e, 0x4a, 0xc5, 0x61, 0x0d, 0x01, 0x56, 0x5b, 0xb9, 0x2b, 0xb5, 0xcc, 0x3f, 0x4f, 0xd1, 0xc7, 0x4e, 0xf7, 0x73, 0xeb, 0x41, 0xef, 0x78, 0xe7, 0x09, 0x81, 0x67, 0xb0, 0xb3, 0x68, 0xe4, 0x86, 0xc1, 0x1a, 0xa7, 0xe0, 0x8c, 0xfa, 0xa9, 0x98, 0xdf, 0x85, 0x78, 0xbf, 0xeb, 0xd7, 0x98, 0xdf, 0xf1, 0x61, 0x7e, 0xa7, 0x99, 0x5f, 0x9f, 0x6b, 0x11, 0x41, 0x3c, 0xed, 0x60, 0x7e, 0x87, 0x99, 0xdf, 0x76, 0x8a, 0x27, 0xc7, 0xda, 0xc3, 0x7c, 0x9e, 0xc0, 0x36, 0xa1, 0xdc, 0x67, 0xeb, 0xa5, 0x78, 0x75, 0xcc, 0x77, 0x9d, 0x1e, 0x28, 0x26, 0xf3, 0xa9, 0x62, 0x3e, 0x81, 0x77, 0x9c, 0x69, 0x31, 0xbf, 0x42, 0xe6, 0xd7, 0xfc, 0xce, 0xca, 0x38, 0x3f, 0x23, 0xf3, 0xab, 0x25, 0xbf, 0x54, 0xac, 0xf5, 0x99, 0x24, 0xa4, 0x88, 0x51, 0x93, 0x43, 0x69, 0x54, 0x0e, 0x09, 0xb6, 0x92, 0xc5, 0xc8, 0x8b, 0xc1, 0xfe, 0x54, 0x2a, 0xbd, 0x9e, 0x60, 0xc7, 0xd2, 0x7c, 0x3b, 0x94, 0xb6, 0x1f, 0xf1, 0xe8, 0x14, 0x0a, 0xe1, 0xe7, 0x12, 0x1e, 0x6f, 0x6c, 0xa5, 0x2f, 0x6e, 0xbc, 0xfc, 0xf5, 0x04, 0xeb, 0x75, 0x69, 0x38, 0xf6, 0x3d, 0xf5, 0x7e, 0x06, 0xe2, 0xf0, 0x76, 0x3d, 0xe2, 0x50, 0x43, 0x32, 0xd5, 0x96, 0x05, 0x55, 0x5e, 0xa3, 0x94, 0xdb, 0xa7, 0x07, 0x18, 0xec, 0x27, 0x0d, 0x50, 0xbb, 0x52, 0xce, 0x6d, 0x07, 0xf3, 0x59, 0xad, 0x03, 0x21, 0x01, 0x65, 0x21, 0x87, 0x1c, 0x6f, 0x33, 0xf3, 0x6d, 0xcf, 0x01, 0x87, 0xcd, 0xd1, 0xe7, 0x78, 0x99, 0xa4, 0x9e, 0xf0, 0x53, 0xe8, 0x63, 0x74, 0xec, 0xc7, 0x58, 0x3a, 0x39, 0x96, 0xc8, 0x62, 0xcd, 0x49, 0x85, 0xd3, 0x8e, 0x8a, 0xbe, 0x8a, 0x48, 0x2c, 0xbe, 0x62, 0xff, 0x86, 0x80, 0xfd, 0x15, 0x3e, 0x01, 0x14, 0xeb, 0x02, 0x3b, 0x42, 0xf6, 0x03, 0xcb, 0x14, 0xe8, 0x4e, 0xcc, 0xcf, 0x0e, 0x6f, 0xe5, 0x15, 0x90, 0xd9, 0x93, 0xf0, 0xed, 0x92, 0xf0, 0x56, 0x8c, 0x9b, 0x40, 0x71, 0x11, 0xd3, 0x28, 0x2f, 0xd1, 0x1b, 0x7b, 0xb0, 0x96, 0x71, 0x52, 0x67, 0x8c, 0x56, 0xfe, 0x7e, 0x80, 0x7d, 0x15, 0xc9, 0x5f, 0xbb, 0xb0, 0x76, 0x3f, 0xe7, 0x01, 0xf2, 0x3d, 0xc0, 0xab, 0x98, 0x1b, 0x69, 0x25, 0x1b, 0xeb, 0x89, 0xb4, 0xd3, 0x87, 0xdf, 0xff, 0x86, 0xf8, 0x7a, 0x8a, 0xfc, 0x2e, 0x48, 0x38, 0xb3, 0x85, 0x77, 0x7c, 0xbb, 0x28, 0xbc, 0xd3, 0x84, 0x31, 0xcc, 0xd4, 0x0b, 0x59, 0x9e, 0xde, 0x4c, 0xe7, 0xf2, 0xef, 0x7d, 0x18, 0xee, 0x6d, 0xe2, 0x4b, 0x96, 0x3b, 0x97, 0xa2, 0xeb, 0xc5, 0x26, 0x55, 0x09, 0x4a, 0x2c, 0xb6, 0x65, 0xb6, 0xa5, 0xce, 0xa5, 0x9e, 0x74, 0xb2, 0x53, 0x06, 0xc7, 0xbe, 0x65, 0xf3, 0x94, 0x7f, 0x28, 0xc3, 0xba, 0xa6, 0x56, 0x96, 0x8b, 0x89, 0xa2, 0x7a, 0xdf, 0xd2, 0x79, 0x2e, 0x92, 0x13, 0x61, 0xbe, 0x0c, 0x45, 0xef, 0xcc, 0x0e, 0xbf, 0xe8, 0xe5, 0x4b, 0x96, 0x62, 0xbe, 0xbd, 0x2f, 0x92, 0x5b, 0xa3, 0x59, 0x46, 0x26, 0xf5, 0x75, 0x86, 0x92, 0x65, 0xa2, 0x52, 0xa5, 0x84, 0x71, 0x9e, 0xac, 0x92, 0x0f, 0xc3, 0x5b, 0x9d, 0xcb, 0xec, 0xf8, 0x8b, 0x52, 0xc8, 0x0e, 0xa4, 0xfb, 0x9d, 0x93, 0x97, 0x2a, 0xfa, 0x26, 0x2f, 0xa3, 0xf6, 0x57, 0x7d, 0x88, 0xe3, 0xd6, 0x33, 0xaa, 0xe7, 0x71, 0x6c, 0x7b, 0xc6, 0xb5, 0x88, 0xcf, 0x86, 0xb1, 0x28, 0x57, 0x65, 0x83, 0x40, 0x38, 0xd0, 0x2c, 0x27, 0x4d, 0xb0, 0x6e, 0xac, 0x3d, 0xe8, 0x28, 0x75, 0x94, 0x15, 0x28, 0x57, 0xfe, 0x3e, 0x27, 0x51, 0x7a, 0x3b, 0x8a, 0x72, 0x12, 0xed, 0xa5, 0x8e, 0x52, 0x33, 0x87, 0xfa, 0xe6, 0xf3, 0xe1, 0xbd, 0x28, 0x91, 0xef, 0xb2, 0x07, 0x55, 0xa3, 0x30, 0xb7, 0x14, 0x37, 0x7e, 0xbf, 0xbb, 0xe6, 0xdd, 0x47, 0xdf, 0x7d, 0x1c, 0xb5, 0xd3, 0x0f, 0x0d, 0xa3, 0xf4, 0x89, 0x0e, 0xbb, 0xa3, 0x78, 0x67, 0xb1, 0x47, 0x99, 0x53, 0x18, 0x0e, 0x8b, 0x6a, 0x5d, 0x62, 0xe8, 0x15, 0xe9, 0xcc, 0x5e, 0x8b, 0xd2, 0x5e, 0xe6, 0x28, 0xc3, 0x18, 0xdc, 0x81, 0xdf, 0x3b, 0x8a, 0x0f, 0xbe, 0x6c, 0x4c, 0xdc, 0xd4, 0xe5, 0x28, 0xb1, 0x2a, 0xf2, 0x95, 0x4e, 0x1b, 0xb6, 0xa8, 0x7a, 0x67, 0xf7, 0x3c, 0x45, 0x75, 0x50, 0x7c, 0xdb, 0x92, 0x68, 0xe6, 0x1c, 0x65, 0xa6, 0x51, 0xac, 0xe6, 0x4d, 0xfa, 0x44, 0x83, 0xd2, 0x34, 0xce, 0x3c, 0x6e, 0x73, 0xd7, 0x4f, 0x43, 0xf5, 0xe4, 0x93, 0x59, 0x1d, 0xb4, 0x87, 0x0c, 0xa3, 0xe8, 0xce, 0xa5, 0x53, 0x5d, 0x7f, 0x41, 0x17, 0x9d, 0x38, 0xff, 0x56, 0x17, 0x62, 0x66, 0x97, 0x27, 0x1d, 0x31, 0xbf, 0x3b, 0x52, 0x7e, 0x7b, 0x59, 0xd5, 0x87, 0xe1, 0x5d, 0x58, 0xaa, 0x66, 0xf4, 0xdd, 0x53, 0x88, 0x75, 0x71, 0x94, 0x66, 0x67, 0x87, 0xf7, 0x7a, 0xd5, 0xd5, 0xcb, 0xcf, 0xfc, 0xe8, 0xcc, 0xc6, 0xfb, 0xff, 0x33, 0x3c, 0x60, 0x52, 0x9a, 0xb3, 0xc3, 0xbb, 0xb1, 0x5f, 0x28, 0x0d, 0x4a, 0x63, 0xa2, 0xa3, 0xd8, 0x51, 0x72, 0xf8, 0xd5, 0xd7, 0x5f, 0x39, 0x70, 0xe0, 0xe0, 0x01, 0x7b, 0xb7, 0xa3, 0xec, 0x54, 0xe9, 0x9b, 0x25, 0xa7, 0xec, 0x6f, 0x96, 0x38, 0xca, 0xec, 0xa5, 0x76, 0x3b, 0x42, 0xb5, 0xbf, 0x15, 0x7a, 0xab, 0xcb, 0xb5, 0xc8, 0xa7, 0x60, 0xbd, 0x28, 0x0b, 0x29, 0x1d, 0xf9, 0xbf, 0x37, 0x55, 0xa2, 0xcc, 0x8f, 0x4f, 0x21, 0x65, 0x8e, 0xcd, 0x06, 0x11, 0x6e, 0x9e, 0x8f, 0xf0, 0xb8, 0x8f, 0x97, 0x49, 0xbc, 0xec, 0xd3, 0x2d, 0xcc, 0xff, 0x08, 0xa3, 0xe0, 0x23, 0xf1, 0xd4, 0xf6, 0xe9, 0x4c, 0xa2, 0x29, 0xe4, 0x8f, 0xa3, 0x5a, 0x00, 0x76, 0x12, 0x1d, 0x19, 0x90, 0x72, 0x72, 0x91, 0xa6, 0xec, 0x45, 0xa9, 0xfc, 0xfb, 0xb3, 0x78, 0x3b, 0x8c, 0x32, 0x22, 0x77, 0xa6, 0x53, 0x22, 0xa1, 0x47, 0xda, 0x31, 0x87, 0xf8, 0xef, 0x95, 0x29, 0x22, 0xc3, 0xd9, 0xd5, 0xac, 0x2a, 0xe9, 0xc2, 0x36, 0xe4, 0xc2, 0xbd, 0xce, 0x6e, 0x74, 0x77, 0xab, 0x99, 0xdb, 0x94, 0x60, 0x4e, 0xc8, 0x56, 0x60, 0x9d, 0xcb, 0x0f, 0x1e, 0x38, 0x74, 0xf0, 0xf5, 0xdf, 0x1f, 0xfe, 0xbd, 0x7d, 0xb9, 0xa3, 0xf8, 0x44, 0xc9, 0x5f, 0x97, 0x9f, 0x28, 0xfd, 0x2b, 0xba, 0xec, 0x25, 0xd8, 0xa2, 0x25, 0x8e, 0xd2, 0x93, 0x4b, 0x4f, 0x2e, 0x43, 0xdc, 0xf5, 0x7a, 0x55, 0x65, 0x5d, 0x65, 0xdd, 0xee, 0xae, 0x3f, 0x2f, 0x9f, 0xdc, 0xa5, 0xef, 0x23, 0xda, 0x9c, 0xdc, 0x9d, 0xd6, 0x67, 0xff, 0x3d, 0x3f, 0x0a, 0x54, 0x59, 0xd9, 0xe1, 0x67, 0x78, 0x25, 0x68, 0x57, 0x8f, 0xfa, 0x5a, 0x19, 0xd1, 0x8d, 0x7d, 0x97, 0xbe, 0xcf, 0xbe, 0x2b, 0xad, 0x6f, 0x89, 0x42, 0x3c, 0x2b, 0xe1, 0xe2, 0x53, 0xad, 0x8c, 0x8b, 0x34, 0x09, 0x17, 0x1f, 0xf5, 0xb3, 0x5e, 0x2a, 0x18, 0xb0, 0xd6, 0xe1, 0xdc, 0x08, 0x36, 0x3e, 0xea, 0x90, 0xb0, 0x71, 0x6d, 0x1d, 0xf3, 0xcf, 0x22, 0xbf, 0x6b, 0x7d, 0xf1, 0xd8, 0xb8, 0xe6, 0x40, 0x49, 0x65, 0x27, 0x8e, 0x62, 0xc4, 0x91, 0x6f, 0xd7, 0xb5, 0x23, 0xdd, 0x56, 0x84, 0x7b, 0x05, 0xee, 0x72, 0x05, 0xf5, 0x2d, 0x13, 0xf6, 0xa7, 0x08, 0x86, 0xb0, 0x9f, 0xed, 0x41, 0xfa, 0x7e, 0x2a, 0x12, 0x57, 0xa0, 0xb8, 0x8e, 0xf0, 0xde, 0x48, 0x5c, 0xa3, 0x1c, 0x57, 0x2f, 0xc5, 0xdd, 0xad, 0x22, 0xac, 0x6c, 0x99, 0xf9, 0x7b, 0x49, 0xbf, 0x9a, 0x79, 0x50, 0xef, 0x30, 0x54, 0xe8, 0x46, 0x09, 0x4a, 0x2a, 0xc3, 0xd5, 0xd9, 0x82, 0xd3, 0x19, 0xf0, 0xd0, 0x69, 0x24, 0x87, 0xc8, 0x4f, 0x98, 0xc6, 0x7c, 0xcb, 0x84, 0x69, 0xe8, 0xab, 0x16, 0x9c, 0xba, 0x69, 0x54, 0x36, 0x52, 0xa8, 0x59, 0x28, 0xe3, 0x61, 0x57, 0xa7, 0x0a, 0xe3, 0x84, 0x69, 0x34, 0xee, 0x72, 0x1b, 0x24, 0xd8, 0x1e, 0x07, 0xf5, 0xbc, 0x5e, 0xbb, 0x87, 0xdf, 0x51, 0x4c, 0xbd, 0xcf, 0xa9, 0xf0, 0x68, 0xf3, 0xb2, 0xc3, 0x7b, 0xbe, 0x1d, 0xcc, 0xdd, 0x8f, 0xed, 0xb9, 0xfb, 0xdb, 0x01, 0xfd, 0x7e, 0x39, 0xf7, 0xfd, 0x02, 0x7f, 0xff, 0xcb, 0x38, 0xe6, 0xed, 0x25, 0x48, 0x57, 0xae, 0xc9, 0x5f, 0xbd, 0xec, 0xeb, 0xbc, 0x6b, 0x11, 0x83, 0x13, 0x42, 0x38, 0x5d, 0xf1, 0x70, 0x26, 0x07, 0x73, 0x89, 0x2e, 0x76, 0x4f, 0x0e, 0xe8, 0xfb, 0x62, 0x70, 0xaa, 0x62, 0x70, 0xb6, 0xcb, 0x5f, 0x12, 0x9c, 0x27, 0x99, 0x7c, 0xb8, 0x53, 0x84, 0xa1, 0xe7, 0xe5, 0xf2, 0x69, 0x7d, 0x6c, 0xbc, 0xf9, 0xa4, 0x1e, 0xf1, 0xb4, 0xf3, 0xfe, 0xdf, 0x8b, 0x29, 0x52, 0xdb, 0xfd, 0xff, 0x98, 0x7b, 0x1a, 0xa8, 0xa6, 0xae, 0x34, 0x6f, 0x42, 0x4c, 0x5f, 0x31, 0x93, 0x46, 0xea, 0x2f, 0xa3, 0x12, 0x53, 0x56, 0x19, 0x0e, 0x04, 0xc6, 0xa5, 0x96, 0xb5, 0x20, 0x21, 0xa4, 0x36, 0xc5, 0x34, 0xa0, 0x65, 0x38, 0xe8, 0xb8, 0x35, 0xe3, 0xd8, 0x84, 0x75, 0x10, 0x19, 0xab, 0xae, 0x87, 0x72, 0x34, 0x28, 0xe3, 0x32, 0x8c, 0xb5, 0xd4, 0x63, 0x3d, 0xd6, 0x3a, 0x2b, 0xa2, 0x75, 0x95, 0x75, 0xa9, 0xd5, 0xae, 0xf5, 0x07, 0x35, 0xa5, 0xae, 0x3f, 0x1d, 0xd7, 0x65, 0xac, 0x63, 0x9d, 0x1e, 0xeb, 0xc4, 0x9f, 0xb1, 0x6a, 0x95, 0xda, 0x08, 0xae, 0x05, 0xca, 0xdb, 0xef, 0xfb, 0xee, 0x7b, 0xf9, 0x23, 0xc1, 0xd2, 0xb3, 0xe7, 0xec, 0xa2, 0x2f, 0x79, 0xdf, 0xbd, 0xdf, 0xbd, 0xf7, 0xfb, 0xbb, 0xdf, 0xfd, 0xee, 0xcf, 0x7b, 0xb9, 0x5f, 0x84, 0x70, 0xe1, 0x49, 0x2e, 0xcd, 0x3b, 0x56, 0x59, 0x6a, 0xb2, 0x14, 0xb1, 0x4f, 0x05, 0xa4, 0x26, 0xcb, 0xec, 0xeb, 0x24, 0x7a, 0x1a, 0x60, 0x83, 0x3e, 0x1f, 0x65, 0xd3, 0xde, 0x2e, 0xb5, 0x91, 0x42, 0xb4, 0x5b, 0x88, 0x6e, 0x85, 0x53, 0x98, 0x44, 0x7c, 0x67, 0xb4, 0x02, 0x55, 0x1f, 0x4c, 0xff, 0x48, 0xaa, 0xc5, 0x83, 0xe5, 0xdb, 0x7b, 0x25, 0x3e, 0x6b, 0x82, 0x71, 0x53, 0xdd, 0x19, 0x1e, 0xc4, 0x2d, 0x0c, 0xc5, 0x3d, 0x67, 0x5f, 0x62, 0x7f, 0xcd, 0xc1, 0xe0, 0x52, 0x80, 0x9d, 0xf5, 0x88, 0x5b, 0x5d, 0x38, 0xf7, 0x4f, 0x44, 0x4c, 0x59, 0xaf, 0x60, 0x4f, 0x26, 0x19, 0x27, 0xd1, 0x9a, 0xc6, 0xa8, 0xf7, 0xcd, 0xd3, 0x27, 0x94, 0xbc, 0x31, 0xfd, 0x8d, 0xe9, 0x6b, 0x17, 0xc5, 0xe7, 0x7e, 0xcd, 0x84, 0xbc, 0xaf, 0x61, 0x18, 0xb9, 0x38, 0xfd, 0x34, 0xcc, 0x98, 0x71, 0x76, 0x17, 0x9b, 0x9a, 0xcf, 0x34, 0xa9, 0x26, 0xa6, 0x93, 0xe7, 0x7f, 0xc8, 0xc9, 0xdd, 0x87, 0x66, 0x77, 0x5e, 0xb7, 0xa2, 0x82, 0xb1, 0x41, 0xcd, 0xfb, 0x4e, 0x2d, 0xd0, 0xf2, 0x7b, 0xa6, 0x7b, 0xff, 0xf4, 0x02, 0x18, 0x2f, 0x2a, 0x44, 0xfb, 0x92, 0x7c, 0xb5, 0x93, 0xff, 0x32, 0xd0, 0xa0, 0x7c, 0x88, 0x1f, 0x14, 0xd7, 0xd1, 0x92, 0x92, 0xac, 0xc9, 0x2f, 0x14, 0xaf, 0x29, 0x7e, 0xdd, 0x10, 0x6b, 0x3a, 0xc9, 0xaa, 0x1e, 0x63, 0xf6, 0x4a, 0xa4, 0x84, 0xe1, 0xa5, 0xe8, 0xac, 0xeb, 0x5c, 0xd3, 0xf9, 0xbb, 0xce, 0xd7, 0x3b, 0xe6, 0x77, 0x94, 0x75, 0xfc, 0xaa, 0x63, 0x41, 0x62, 0x6e, 0x71, 0x75, 0x52, 0x6e, 0xe7, 0x27, 0x9d, 0x67, 0x12, 0xf1, 0x99, 0x30, 0x36, 0xbe, 0xaa, 0x01, 0x3e, 0x93, 0xaa, 0x68, 0x6e, 0x86, 0x3f, 0x4b, 0x17, 0xe3, 0x1a, 0x8d, 0xf1, 0x12, 0xf4, 0xf4, 0x0d, 0x0e, 0xa6, 0x50, 0x4e, 0xef, 0xb1, 0xbf, 0xd6, 0x20, 0x68, 0xdf, 0xd4, 0x31, 0x6d, 0x3d, 0x4c, 0xb6, 0x95, 0x0e, 0x2d, 0xd8, 0xc6, 0xe8, 0xbd, 0xab, 0x9c, 0x23, 0xb5, 0x6f, 0x96, 0x10, 0x6c, 0x7f, 0x6d, 0x8f, 0xa0, 0xad, 0xb7, 0x42, 0x6b, 0x1e, 0xc1, 0x91, 0x21, 0xc3, 0x02, 0x87, 0xe3, 0x00, 0xfe, 0x75, 0xf0, 0x3f, 0xc7, 0x1e, 0x59, 0x4e, 0x53, 0x4f, 0x4e, 0x3f, 0x4e, 0xeb, 0x03, 0xe6, 0x40, 0x4a, 0x21, 0x4f, 0x49, 0x0f, 0x5e, 0x5f, 0x8b, 0xd0, 0x7e, 0x0a, 0xb4, 0x9f, 0x24, 0xb7, 0x6f, 0xb5, 0x68, 0x4b, 0xb0, 0xf5, 0x3d, 0x82, 0xd5, 0x82, 0xb0, 0xb6, 0x50, 0xa2, 0x85, 0x89, 0x3b, 0xa1, 0x3d, 0xad, 0xd5, 0xa4, 0x2d, 0x11, 0x78, 0xbe, 0x89, 0xe7, 0x0b, 0x72, 0xfe, 0x52, 0xcc, 0x0f, 0xa3, 0xaf, 0x3e, 0x42, 0x7b, 0x59, 0xd0, 0x5e, 0xa6, 0xdc, 0xde, 0x95, 0xcd, 0xda, 0x91, 0x56, 0xc6, 0x5b, 0xe5, 0x30, 0x71, 0xac, 0x03, 0x48, 0x45, 0xf5, 0xf1, 0xba, 0x53, 0xa4, 0xfa, 0xb4, 0x57, 0x36, 0x6a, 0x47, 0x0a, 0x8c, 0x53, 0x41, 0xf8, 0x1b, 0x39, 0xbe, 0x10, 0x82, 0xdf, 0x7b, 0x5b, 0xc2, 0xd7, 0x84, 0x50, 0xc3, 0xc4, 0x45, 0xb2, 0x86, 0x67, 0xac, 0x99, 0xf1, 0xbf, 0xa0, 0x61, 0xfc, 0x05, 0x6a, 0x8c, 0xf7, 0x1c, 0xc3, 0x43, 0xe4, 0x3b, 0x1d, 0xf8, 0x2d, 0x94, 0xf8, 0x35, 0x83, 0x7e, 0xf3, 0x40, 0xbf, 0xd3, 0x83, 0xf4, 0x5b, 0x18, 0xa6, 0xdf, 0xc2, 0xef, 0xaf, 0xdf, 0xee, 0xb9, 0xe1, 0xfa, 0xed, 0x2e, 0xec, 0xa3, 0xdf, 0xd0, 0xf6, 0x53, 0xa0, 0xfd, 0x24, 0xb9, 0x7d, 0x2f, 0xc9, 0x1b, 0x5b, 0xbd, 0xb2, 0x99, 0xf4, 0xa7, 0x0b, 0xd5, 0xaf, 0x97, 0xe4, 0x4b, 0xf9, 0x1b, 0x79, 0x7e, 0xff, 0xfa, 0x0d, 0xee, 0x41, 0x20, 0x89, 0x13, 0x06, 0x88, 0x00, 0x67, 0xd4, 0x8d, 0x57, 0x7a, 0xf3, 0x23, 0xc8, 0xf6, 0xb7, 0x9d, 0x75, 0x1d, 0xff, 0xd0, 0x31, 0xdf, 0x40, 0x92, 0x4c, 0x24, 0x49, 0x8e, 0x27, 0x49, 0x06, 0xcb, 0xaf, 0x5e, 0x40, 0xda, 0xf7, 0x58, 0x9c, 0x89, 0xd4, 0xfe, 0xc8, 0x24, 0x46, 0x3c, 0xe9, 0x32, 0xfd, 0xf2, 0x73, 0xd8, 0xfc, 0xed, 0xfb, 0xe9, 0x6d, 0x08, 0xa1, 0x17, 0x70, 0x86, 0xf3, 0xfc, 0x30, 0x7a, 0x1b, 0x82, 0xe4, 0xf9, 0x11, 0x49, 0x6f, 0x78, 0x90, 0x3c, 0x79, 0x8a, 0x0a, 0x79, 0x28, 0xae, 0x33, 0x08, 0xf8, 0x7b, 0x98, 0xc0, 0x53, 0xeb, 0x78, 0xa5, 0xd5, 0x3c, 0x20, 0x6e, 0x46, 0x06, 0xeb, 0x03, 0xf8, 0x01, 0xdb, 0xdf, 0x53, 0x23, 0xf1, 0x53, 0x22, 0xf1, 0x53, 0x18, 0x99, 0x1f, 0x6e, 0xd9, 0x56, 0x13, 0xe2, 0x04, 0xfa, 0xd7, 0xf7, 0xe7, 0xa7, 0x6b, 0x6a, 0x38, 0x3f, 0x5d, 0x19, 0xc9, 0x4a, 0x6f, 0xdd, 0x80, 0x79, 0x18, 0x1a, 0x85, 0x7e, 0xd0, 0x87, 0xb6, 0x24, 0x93, 0xf9, 0xe9, 0xd3, 0x95, 0x70, 0xfa, 0x98, 0x58, 0x1b, 0xad, 0x7f, 0x36, 0x84, 0xf4, 0x4f, 0xc2, 0xcd, 0x97, 0xf9, 0xed, 0xe3, 0x2f, 0x5e, 0xbd, 0x3f, 0x21, 0xa7, 0x0a, 0xe2, 0x66, 0xe5, 0xfd, 0x39, 0x0e, 0x76, 0x63, 0xca, 0xfd, 0x09, 0xbe, 0x09, 0x3b, 0x99, 0x72, 0x04, 0xeb, 0xf5, 0x25, 0xd4, 0x32, 0x5a, 0x19, 0xd4, 0x40, 0xfa, 0x78, 0xb8, 0xcc, 0x98, 0x6f, 0x7f, 0x15, 0x58, 0xbc, 0x0c, 0x57, 0x5b, 0x94, 0xeb, 0x01, 0x8a, 0x00, 0x97, 0x6d, 0x45, 0xf1, 0x46, 0x2d, 0x5c, 0x6b, 0xe0, 0xfe, 0x6c, 0xe8, 0x8e, 0xc9, 0x8d, 0x62, 0xe9, 0xb2, 0xc1, 0x55, 0x0a, 0x57, 0x05, 0x5c, 0x8e, 0xa0, 0xfb, 0xa5, 0x70, 0x55, 0xc1, 0xb5, 0x32, 0xda, 0x8e, 0xc9, 0x08, 0x13, 0xff, 0x1e, 0xd6, 0x21, 0xed, 0xa0, 0xec, 0xe7, 0xdf, 0xaa, 0x0a, 0xfe, 0xfd, 0x63, 0x1d, 0xff, 0x1e, 0xd5, 0x24, 0xc1, 0xb3, 0xf8, 0xb7, 0xda, 0x28, 0xed, 0xa8, 0xa4, 0xfc, 0xf0, 0x9d, 0x13, 0x5c, 0x8f, 0x17, 0x53, 0x22, 0xee, 0x98, 0xf8, 0x22, 0xee, 0x98, 0x78, 0x23, 0xee, 0x98, 0x9c, 0x8b, 0xb8, 0x63, 0xb2, 0x3d, 0xe2, 0x8e, 0xc9, 0x86, 0x88, 0x3b, 0x26, 0x55, 0x11, 0x77, 0x4c, 0x96, 0x46, 0xdc, 0x31, 0x29, 0x8d, 0xb8, 0x63, 0x52, 0x1c, 0x71, 0xc7, 0xc4, 0x12, 0x71, 0xc7, 0x64, 0x62, 0xc4, 0x1d, 0x13, 0x7d, 0xc4, 0x1d, 0x93, 0xb1, 0x11, 0x77, 0x4c, 0x34, 0x91, 0x76, 0x4c, 0xbe, 0xeb, 0x8a, 0xb8, 0x63, 0x72, 0x33, 0xe2, 0x8e, 0xc9, 0x85, 0x88, 0x3b, 0x26, 0xc7, 0x23, 0xee, 0x98, 0xec, 0x0d, 0xdf, 0x31, 0xa1, 0xd4, 0x06, 0x29, 0xd5, 0x14, 0x92, 0xba, 0x56, 0x4a, 0x4d, 0x0e, 0x49, 0x95, 0xe4, 0xfb, 0xdd, 0xd0, 0x90, 0xd4, 0xf9, 0x3c, 0xb5, 0xa7, 0x57, 0x4e, 0x35, 0x9d, 0x48, 0xcd, 0xfc, 0xf4, 0xc2, 0xd4, 0x8c, 0xec, 0x85, 0xf5, 0xcd, 0xef, 0x7f, 0x39, 0xfb, 0x24, 0x2e, 0x52, 0x9f, 0x7e, 0xe2, 0xf3, 0xc6, 0x71, 0xa5, 0xad, 0x4f, 0xa3, 0xbd, 0xe6, 0x88, 0x61, 0xf0, 0xf5, 0x39, 0xe9, 0x0b, 0x4e, 0x9f, 0x5a, 0x65, 0x2f, 0x16, 0x4d, 0xf7, 0x8d, 0x62, 0x99, 0xb5, 0x3d, 0x26, 0x46, 0xdc, 0xec, 0x33, 0xb6, 0x30, 0xd1, 0xe1, 0x33, 0xde, 0xf3, 0x88, 0x97, 0x52, 0xcb, 0xc5, 0x52, 0xd1, 0x02, 0x11, 0x9a, 0x05, 0xa2, 0x7f, 0x0b, 0xed, 0xd5, 0xa8, 0x20, 0xb6, 0x37, 0xd1, 0x9e, 0x8a, 0xd9, 0xc9, 0x14, 0xc3, 0x73, 0xdb, 0xc5, 0x32, 0x9c, 0xe3, 0x0d, 0x1a, 0x2d, 0xdf, 0x7d, 0x74, 0x69, 0x8c, 0x49, 0xb4, 0x13, 0x46, 0x9e, 0x6b, 0xfc, 0xad, 0x76, 0xc5, 0x2a, 0xd1, 0x8c, 0xe9, 0x47, 0x0c, 0x80, 0xb1, 0x8c, 0x30, 0x0e, 0x41, 0x64, 0xa4, 0x76, 0xaa, 0xe9, 0x7e, 0x2c, 0x60, 0x17, 0xd0, 0xca, 0xfb, 0x2f, 0x61, 0x0e, 0x9e, 0x07, 0xf1, 0xea, 0x0a, 0x65, 0x33, 0x13, 0x15, 0xa2, 0x38, 0xcf, 0x97, 0x55, 0x4f, 0xfd, 0xcc, 0x97, 0xc5, 0x5f, 0x2f, 0x87, 0x2d, 0xe4, 0x41, 0x1d, 0x86, 0x67, 0x87, 0xa5, 0x33, 0xf6, 0xeb, 0x38, 0xfb, 0xe1, 0x51, 0xf8, 0x1d, 0x1b, 0xd4, 0x06, 0xb6, 0xab, 0x12, 0xe7, 0x3a, 0x0d, 0x14, 0x51, 0xce, 0x75, 0x5a, 0x7c, 0xc6, 0x36, 0xe0, 0xc3, 0x67, 0xdc, 0x0c, 0x3c, 0xd9, 0x88, 0x3f, 0x1e, 0x21, 0xf6, 0x9c, 0x00, 0x0e, 0x4d, 0x30, 0xab, 0xac, 0xf2, 0x0e, 0x12, 0xcb, 0xfb, 0x62, 0xdd, 0x2f, 0x17, 0xcb, 0x24, 0xcc, 0xbd, 0x1c, 0x73, 0x4c, 0x15, 0x3b, 0xce, 0x06, 0x03, 0xbe, 0xe2, 0x11, 0xf8, 0xcd, 0xb4, 0xea, 0x6c, 0xe7, 0x3c, 0x29, 0x9b, 0x45, 0x91, 0x45, 0xe1, 0x05, 0x29, 0xde, 0x7b, 0x56, 0xa2, 0x98, 0x89, 0x15, 0x12, 0xcd, 0x4c, 0xac, 0x8f, 0x44, 0xb5, 0x30, 0x82, 0x3d, 0x86, 0x11, 0x73, 0x8f, 0xc6, 0x97, 0xb6, 0x9d, 0x31, 0x21, 0x87, 0x76, 0x87, 0xa8, 0xc5, 0x3b, 0x03, 0xd1, 0xe0, 0x77, 0xe6, 0x10, 0x0d, 0x4e, 0x94, 0x29, 0x89, 0x99, 0x25, 0xdf, 0x79, 0xe2, 0x83, 0x34, 0x68, 0x24, 0xfa, 0xf2, 0x9c, 0x41, 0x9a, 0x3c, 0x5c, 0x22, 0x6b, 0xf2, 0xd8, 0xbd, 0x80, 0x26, 0x8f, 0x15, 0xfd, 0x50, 0x4d, 0x2e, 0xb4, 0x72, 0x4d, 0x2e, 0x34, 0x05, 0xb5, 0x51, 0x43, 0x73, 0xe3, 0x80, 0x26, 0xed, 0xd1, 0x34, 0xd9, 0xd5, 0x43, 0x98, 0x4e, 0x17, 0x13, 0x2f, 0xf8, 0x75, 0x1a, 0xd3, 0xbf, 0x8e, 0xba, 0x3a, 0xa8, 0x56, 0x2c, 0xd3, 0x34, 0x30, 0xed, 0x76, 0xb5, 0x0d, 0x44, 0xbb, 0x7b, 0xee, 0x49, 0x5c, 0xe0, 0x0b, 0x71, 0xbf, 0x97, 0x76, 0xbb, 0x8c, 0xe1, 0xda, 0xed, 0xd6, 0x46, 0xd7, 0x6e, 0xc8, 0x6e, 0xeb, 0x45, 0xda, 0x6d, 0xd5, 0xe1, 0x5d, 0x5f, 0xad, 0x77, 0xdb, 0x50, 0xeb, 0x66, 0xa3, 0x98, 0x2f, 0x6b, 0x5e, 0x29, 0xdc, 0x6a, 0x67, 0x6a, 0xd1, 0x0c, 0x1a, 0x7c, 0xd2, 0xc5, 0x54, 0xff, 0x8c, 0xba, 0xea, 0x8f, 0x17, 0xc5, 0x64, 0xf9, 0xee, 0x48, 0x57, 0x40, 0xeb, 0x47, 0x5e, 0x46, 0x5b, 0xe1, 0x7a, 0x93, 0x2c, 0x26, 0x09, 0x66, 0x77, 0x93, 0xe1, 0x5b, 0x8f, 0xf9, 0x07, 0x53, 0x64, 0x5b, 0x39, 0x72, 0x3c, 0xa8, 0x54, 0x52, 0xc0, 0x56, 0x6e, 0xb5, 0xeb, 0x9e, 0x17, 0xf3, 0x02, 0x16, 0x31, 0x06, 0x2c, 0x61, 0xc1, 0x24, 0x6e, 0x11, 0x0b, 0x8c, 0x80, 0x31, 0xd7, 0x99, 0xa1, 0x43, 0x7b, 0x62, 0x2c, 0x13, 0x6a, 0xc8, 0x74, 0x69, 0x02, 0x56, 0x72, 0xf0, 0xe5, 0x68, 0x56, 0xf1, 0xf0, 0x86, 0xc7, 0x28, 0x3a, 0xef, 0x7a, 0xd4, 0x82, 0x73, 0x28, 0x59, 0xb0, 0xd3, 0x75, 0x88, 0x6b, 0xc0, 0xb5, 0x17, 0x62, 0x0c, 0xa7, 0x0a, 0xc3, 0x9e, 0x91, 0x44, 0xd1, 0x50, 0x6e, 0x3f, 0x4e, 0xdc, 0x05, 0x26, 0x4c, 0xb8, 0x9b, 0x8a, 0x73, 0x4f, 0xc6, 0x1e, 0xf3, 0xea, 0x13, 0xb2, 0x5f, 0x53, 0x1a, 0xfa, 0xb7, 0x89, 0x87, 0x95, 0x5e, 0xe6, 0x55, 0x7b, 0x55, 0xde, 0x41, 0xde, 0x18, 0xaf, 0xd2, 0xab, 0xf0, 0x2a, 0xd2, 0xb3, 0x98, 0xca, 0xd1, 0x02, 0x9f, 0x31, 0x8e, 0xfd, 0x7e, 0x29, 0x0f, 0x71, 0x09, 0xf0, 0x39, 0xcc, 0x55, 0x68, 0x5f, 0x92, 0x9e, 0x04, 0x91, 0x82, 0x69, 0x85, 0xa8, 0x31, 0xe5, 0xb8, 0xf1, 0x1c, 0xb3, 0x69, 0x85, 0x2b, 0xc5, 0xbe, 0x44, 0xb9, 0x73, 0x05, 0x9e, 0xa4, 0x55, 0xb9, 0x46, 0x52, 0x0f, 0x68, 0xb1, 0x98, 0xd4, 0xa6, 0x9c, 0x6a, 0x65, 0x29, 0x92, 0x5a, 0x5d, 0x0a, 0x71, 0xdb, 0x12, 0x7e, 0x0f, 0xdf, 0x49, 0x6c, 0x05, 0x53, 0xb1, 0xd2, 0x15, 0x22, 0x42, 0x81, 0xda, 0xb2, 0x18, 0xd6, 0x96, 0x27, 0xba, 0x2e, 0x07, 0x6a, 0xa3, 0xf7, 0x09, 0x09, 0xae, 0xe3, 0x54, 0x67, 0x29, 0xd6, 0x99, 0xa5, 0x08, 0xae, 0x13, 0xe8, 0xfb, 0x98, 0xe8, 0x8b, 0x01, 0x2b, 0x68, 0xc4, 0x35, 0x2c, 0xf8, 0xde, 0x14, 0xcd, 0xb2, 0xd3, 0xc1, 0x0e, 0xb1, 0x2d, 0x97, 0x4e, 0xb6, 0x86, 0xc3, 0xb3, 0xd1, 0x02, 0x1c, 0x6a, 0xda, 0xf3, 0x92, 0xfa, 0x05, 0xe6, 0xa5, 0x16, 0x8b, 0xe7, 0x31, 0xff, 0xdf, 0xee, 0x90, 0x0e, 0x19, 0x5b, 0x9d, 0xd2, 0x2c, 0x9e, 0x97, 0x2c, 0x76, 0x3c, 0xd8, 0xe6, 0x45, 0xbb, 0x23, 0x5a, 0x4f, 0x70, 0x56, 0xd2, 0xaa, 0xad, 0x01, 0x2c, 0x49, 0x10, 0xf3, 0x9d, 0x17, 0xc1, 0xda, 0xdd, 0x62, 0x59, 0x5f, 0xec, 0x94, 0xe2, 0xb4, 0x85, 0xd0, 0x6f, 0x0f, 0xc0, 0xe7, 0x29, 0xd6, 0x92, 0x86, 0xbf, 0x0e, 0x74, 0x9c, 0x4e, 0xdf, 0x9f, 0xa2, 0xb7, 0xb2, 0x9c, 0xa1, 0xa8, 0xf1, 0x00, 0xd5, 0x98, 0x84, 0x35, 0x3e, 0x68, 0xf3, 0x5b, 0x45, 0xb2, 0x64, 0x15, 0x4c, 0x9c, 0x2f, 0xd9, 0x05, 0xd4, 0x0a, 0x33, 0x75, 0x27, 0xef, 0x79, 0xbc, 0x17, 0x12, 0x15, 0x6b, 0xb9, 0xad, 0x04, 0xed, 0xfe, 0x0a, 0x24, 0x8a, 0xc9, 0x6c, 0x1e, 0x5b, 0x0f, 0xfd, 0x02, 0x86, 0xd9, 0xbe, 0x94, 0x65, 0x57, 0xa5, 0x5f, 0x64, 0xb1, 0xe0, 0x4f, 0xd4, 0x62, 0x79, 0xc0, 0x52, 0x1e, 0x9c, 0x8f, 0x88, 0xd9, 0x46, 0x98, 0xaa, 0x10, 0xcc, 0xf5, 0xdc, 0x2f, 0x45, 0xc4, 0x3f, 0x4f, 0xf8, 0x83, 0x42, 0xf0, 0x35, 0x41, 0xd2, 0x85, 0x5e, 0x22, 0xcb, 0x37, 0x6a, 0x1d, 0x67, 0xa8, 0x8e, 0x98, 0xe0, 0x3a, 0x3a, 0x2f, 0x4b, 0xf2, 0x3e, 0x25, 0xcb, 0x1b, 0x4a, 0x2f, 0xeb, 0xb7, 0x74, 0x25, 0x94, 0x5e, 0xd6, 0x47, 0x0b, 0x67, 0x98, 0x27, 0x9a, 0x2e, 0xa8, 0x9d, 0xa5, 0xfd, 0xd0, 0x75, 0x9c, 0x6a, 0x56, 0x84, 0xd0, 0x35, 0x3b, 0x9a, 0x6f, 0x22, 0x5f, 0x72, 0x48, 0xb6, 0xc4, 0x83, 0x73, 0xfb, 0xf7, 0x45, 0x1f, 0x34, 0xc8, 0xbe, 0xe8, 0x60, 0x66, 0xc0, 0x17, 0x1d, 0xd8, 0xdc, 0xbf, 0x2f, 0x2a, 0x6d, 0xe2, 0xbe, 0xa8, 0xb4, 0x51, 0xb2, 0xe3, 0xba, 0x68, 0xde, 0xe8, 0x83, 0x36, 0xbf, 0xfc, 0x93, 0x1f, 0x61, 0xdf, 0x4c, 0x31, 0x9e, 0x56, 0x4a, 0x4d, 0x74, 0x76, 0x25, 0xdf, 0x75, 0x21, 0x12, 0xa6, 0xff, 0xbc, 0x03, 0xcc, 0x7c, 0xf8, 0xfc, 0x87, 0x97, 0x65, 0xb7, 0xa9, 0xac, 0xca, 0x6f, 0xcb, 0x23, 0xfd, 0xb6, 0xec, 0xf4, 0xdb, 0xf2, 0x6c, 0xf0, 0x72, 0xe5, 0x01, 0x2f, 0xb7, 0x20, 0xe0, 0xe5, 0x1c, 0x7e, 0x2f, 0x67, 0xf7, 0xd3, 0x5b, 0xc4, 0xe9, 0x05, 0x5f, 0x97, 0x1c, 0xdd, 0xd7, 0x49, 0xad, 0x97, 0x61, 0xeb, 0xf7, 0x57, 0x47, 0xf0, 0x79, 0x31, 0x30, 0xbf, 0x6b, 0x26, 0xdf, 0xc7, 0xc4, 0x1d, 0x12, 0x67, 0xbb, 0xa1, 0xce, 0x0b, 0xd1, 0xeb, 0x8c, 0xc2, 0x23, 0x8d, 0x7c, 0xf7, 0x0d, 0xe1, 0x7d, 0xb1, 0x43, 0x19, 0xcd, 0x2f, 0x05, 0xb4, 0xb0, 0x37, 0x59, 0xb6, 0x87, 0x0f, 0x67, 0x04, 0xb4, 0xbc, 0x7f, 0x3f, 0xda, 0x46, 0x5f, 0xef, 0xb4, 0xcb, 0x2e, 0x69, 0xb5, 0x26, 0xa8, 0xff, 0x24, 0x3d, 0x4a, 0x7b, 0x22, 0x9d, 0x51, 0xf1, 0xad, 0x24, 0x99, 0x46, 0xd4, 0x5e, 0x9f, 0x3e, 0x91, 0x49, 0xbd, 0x21, 0x8b, 0x7a, 0x83, 0x29, 0xc4, 0x33, 0x31, 0x31, 0x9e, 0x6a, 0xcb, 0x90, 0xf5, 0x09, 0xda, 0x5b, 0x8c, 0xd4, 0x00, 0xf5, 0xf1, 0xe5, 0x8c, 0xdd, 0x74, 0x31, 0xb6, 0x48, 0xa2, 0x2c, 0x96, 0x53, 0xe6, 0x60, 0xdd, 0x6b, 0xa5, 0xbe, 0xca, 0xba, 0x6b, 0x1e, 0xed, 0x7d, 0xa2, 0xf4, 0xd0, 0x88, 0x34, 0x11, 0x2d, 0x29, 0x7e, 0xcb, 0xd0, 0xf8, 0x5b, 0x9c, 0xea, 0x6f, 0x31, 0xeb, 0xd1, 0x5e, 0x6c, 0xa0, 0x2d, 0x7e, 0xb3, 0x3d, 0x42, 0x8b, 0x9f, 0xfb, 0x5b, 0x6c, 0x7b, 0xb4, 0xaf, 0x18, 0x70, 0x8b, 0x6a, 0xff, 0xc8, 0xa7, 0xa0, 0x91, 0x79, 0x90, 0x2b, 0x03, 0xc6, 0x52, 0x79, 0x7c, 0x1b, 0x8f, 0x63, 0x73, 0xb9, 0x9e, 0x8f, 0xc1, 0x06, 0xa3, 0x58, 0xe1, 0xdd, 0x25, 0x7c, 0xc4, 0x12, 0x52, 0x73, 0xc5, 0x0a, 0x65, 0xb9, 0x9b, 0x89, 0x65, 0xac, 0x3c, 0x07, 0x7c, 0x64, 0x50, 0x89, 0xc9, 0x38, 0xfe, 0x96, 0x67, 0xe4, 0x03, 0xfc, 0xf3, 0x76, 0xb1, 0x3c, 0x1b, 0x3c, 0x9c, 0xd9, 0x8d, 0xb6, 0x36, 0x31, 0x2b, 0x4b, 0x81, 0xb6, 0xf6, 0x7e, 0x71, 0x7a, 0x56, 0x16, 0x83, 0xfc, 0x72, 0x97, 0x4a, 0xf0, 0xb0, 0x27, 0x84, 0x76, 0xf6, 0x98, 0x58, 0x81, 0x78, 0xf6, 0x25, 0xd2, 0x69, 0x35, 0xa4, 0x6b, 0x69, 0x2a, 0x8c, 0xcb, 0xe2, 0x32, 0xf8, 0x54, 0x89, 0x55, 0xf0, 0x29, 0x88, 0x6e, 0x73, 0x35, 0xbe, 0x31, 0xc6, 0x5e, 0x29, 0xe0, 0xba, 0xa3, 0xc2, 0x09, 0x1d, 0x4c, 0x9f, 0x80, 0x51, 0x61, 0xa4, 0x78, 0x1f, 0xa2, 0x8d, 0x90, 0xc8, 0xef, 0x9b, 0x19, 0x18, 0xf9, 0xe5, 0x9b, 0x7e, 0xc5, 0x94, 0x5a, 0xd9, 0x8f, 0x42, 0x2d, 0xb1, 0x4e, 0xdc, 0xc7, 0xb7, 0x80, 0x9f, 0x2b, 0xab, 0xd0, 0xd0, 0x5e, 0xc8, 0x39, 0xdc, 0xed, 0x51, 0xad, 0x73, 0x58, 0xc3, 0xd2, 0x69, 0x67, 0x5b, 0x55, 0x09, 0xd2, 0x2a, 0x10, 0xcb, 0x34, 0x24, 0x1b, 0xe8, 0x33, 0x0b, 0xc1, 0x03, 0x3e, 0xe1, 0xd4, 0xe4, 0x37, 0x8b, 0x15, 0x10, 0x61, 0x34, 0x8b, 0x8b, 0x03, 0x11, 0xc1, 0x81, 0x35, 0x7c, 0xfc, 0x50, 0xe3, 0x93, 0x2c, 0x1a, 0xd1, 0x22, 0xa7, 0xef, 0x6b, 0xc5, 0x3e, 0x48, 0x7d, 0x92, 0x4e, 0xd8, 0xed, 0x33, 0x50, 0x9f, 0x34, 0x8a, 0x2f, 0x49, 0xde, 0xda, 0x2a, 0xcd, 0x35, 0x52, 0x02, 0xbd, 0xb9, 0xf9, 0x8e, 0xec, 0xb3, 0xf7, 0xd5, 0xa0, 0x9f, 0xa6, 0xd2, 0xe4, 0xcd, 0xf7, 0x5e, 0x47, 0xd8, 0xc1, 0xfd, 0x5a, 0x9e, 0x4b, 0x53, 0xd8, 0x4e, 0xf5, 0x28, 0xe0, 0xde, 0x13, 0x3a, 0x0b, 0xe9, 0x7f, 0xf6, 0x31, 0xf7, 0x13, 0xee, 0xdf, 0xe7, 0xb6, 0x92, 0x27, 0x30, 0x81, 0x7e, 0x5e, 0x72, 0x06, 0x79, 0xf5, 0xe6, 0x2e, 0x92, 0x69, 0x29, 0xc4, 0xd4, 0x16, 0xf0, 0x45, 0x51, 0x7d, 0x02, 0xdb, 0x40, 0x7b, 0x28, 0xe5, 0x7e, 0xaf, 0x1c, 0x27, 0x79, 0xe5, 0x66, 0xc9, 0x27, 0xef, 0x76, 0x64, 0x04, 0x45, 0x9d, 0x3a, 0xc9, 0x0b, 0xeb, 0x25, 0xbf, 0xac, 0x07, 0x3f, 0x09, 0xbd, 0xd5, 0x31, 0x16, 0xbc, 0x69, 0x88, 0x5f, 0xe5, 0x23, 0xbd, 0x43, 0xcd, 0x47, 0xeb, 0xfe, 0x69, 0x09, 0xf2, 0xd3, 0xe4, 0x41, 0xef, 0x7a, 0xd3, 0x46, 0xe4, 0xe0, 0x49, 0x39, 0x55, 0xb8, 0x27, 0x6d, 0x3f, 0x00, 0x36, 0xa0, 0x75, 0x31, 0x85, 0xb4, 0x9b, 0xe5, 0x1c, 0xce, 0xe7, 0x10, 0xc8, 0xf1, 0x5b, 0xf3, 0xe4, 0x1e, 0xa8, 0x68, 0xc2, 0x19, 0x83, 0x74, 0x86, 0x93, 0xe7, 0x59, 0x79, 0x9f, 0x04, 0x9f, 0xb4, 0x5a, 0x83, 0x1c, 0xe4, 0xe3, 0x93, 0x9d, 0xd2, 0xd9, 0xc6, 0x49, 0xd9, 0xcd, 0x4c, 0x25, 0xa8, 0x52, 0xc1, 0xf2, 0x04, 0x75, 0x76, 0x0b, 0xbb, 0x27, 0xc4, 0xe6, 0x3e, 0x00, 0xd8, 0xca, 0x54, 0x91, 0xe4, 0x66, 0x9c, 0x43, 0x34, 0x66, 0x51, 0x29, 0x46, 0xa5, 0x94, 0xd9, 0x2d, 0xfa, 0x44, 0x41, 0x9d, 0xda, 0xcc, 0xd4, 0x82, 0x00, 0x65, 0xd9, 0x23, 0xca, 0xfa, 0xc6, 0xe4, 0xb2, 0xd8, 0x31, 0x26, 0x36, 0xb8, 0x2f, 0x4e, 0xda, 0xf0, 0x34, 0x96, 0xa6, 0x48, 0x33, 0x8a, 0x16, 0xb4, 0x06, 0x36, 0xd8, 0xe2, 0xe6, 0x54, 0xba, 0x46, 0xcb, 0xed, 0x61, 0x1b, 0xa9, 0x5b, 0xe4, 0x36, 0xad, 0x4b, 0x05, 0xe6, 0x18, 0x2a, 0x71, 0xb0, 0x45, 0xa6, 0x1f, 0x52, 0x55, 0xe6, 0xea, 0x38, 0x23, 0x8b, 0xcd, 0x57, 0xcc, 0xd7, 0xf8, 0x26, 0xdd, 0x73, 0x0b, 0x1a, 0xfc, 0xdd, 0x29, 0xa6, 0xb9, 0xf6, 0x38, 0xc1, 0xa6, 0x30, 0x58, 0x1f, 0x06, 0xeb, 0xc2, 0x60, 0x21, 0x0c, 0x56, 0x85, 0xc1, 0xca, 0x20, 0x58, 0x0d, 0xb0, 0x42, 0xc0, 0xdf, 0xaa, 0x56, 0xe9, 0xa5, 0xf7, 0xbc, 0x1a, 0xe7, 0xc8, 0x33, 0xc5, 0x3b, 0x2a, 0x94, 0xc0, 0x9d, 0x7b, 0xa8, 0x95, 0x77, 0x3e, 0xef, 0xcb, 0xbf, 0xa4, 0x13, 0x2d, 0xb7, 0x15, 0x1e, 0x49, 0x7d, 0xd5, 0x96, 0x52, 0x9c, 0x83, 0x5e, 0x12, 0x3d, 0xe3, 0x09, 0xf2, 0x89, 0x2a, 0xd6, 0x4a, 0xb6, 0x71, 0x82, 0x3c, 0xa3, 0x87, 0xea, 0xdc, 0x1c, 0xec, 0x5d, 0xfa, 0x7a, 0x94, 0xbb, 0x4c, 0xf2, 0x28, 0xaa, 0x0a, 0x9d, 0x63, 0x3c, 0xda, 0x91, 0x53, 0x77, 0xcb, 0x33, 0xf4, 0xe3, 0x0a, 0x8d, 0x46, 0x01, 0x96, 0x37, 0xb4, 0xc4, 0xed, 0xd0, 0x99, 0xdd, 0x48, 0xd7, 0x86, 0x2a, 0x3d, 0xc8, 0xbf, 0x1e, 0x24, 0x9d, 0x6d, 0x62, 0xb1, 0xb2, 0xee, 0xa6, 0xbf, 0x91, 0xc6, 0x72, 0xe4, 0x53, 0x9c, 0x5a, 0xa6, 0x36, 0xbb, 0xd3, 0xd3, 0x58, 0x1c, 0xdc, 0xab, 0x99, 0xee, 0x8f, 0xef, 0x31, 0x75, 0x4e, 0x95, 0x29, 0x85, 0xc5, 0xea, 0x13, 0x88, 0xe2, 0xeb, 0x7e, 0xaf, 0xa7, 0xe1, 0xdc, 0x71, 0x4e, 0xfd, 0x75, 0x0d, 0xf0, 0xb4, 0xe7, 0x57, 0x17, 0x0a, 0xda, 0x45, 0x93, 0xbd, 0x72, 0x24, 0xae, 0xf1, 0x53, 0x9d, 0x24, 0xb7, 0xb4, 0xcd, 0x8c, 0xe9, 0xa5, 0x11, 0xa4, 0x25, 0x07, 0x47, 0x10, 0x0f, 0xd5, 0xd6, 0x9a, 0x66, 0x65, 0xc7, 0x73, 0x4c, 0xec, 0x14, 0xbd, 0xa1, 0xe8, 0x13, 0xdb, 0xd7, 0x31, 0x31, 0x6c, 0xf6, 0xe5, 0x1e, 0xd6, 0xe2, 0xd8, 0x31, 0x90, 0x35, 0x97, 0xaf, 0xce, 0xd2, 0x9a, 0x0b, 0x63, 0x3f, 0x72, 0x26, 0x71, 0x6f, 0x08, 0x7e, 0xf9, 0x76, 0x7f, 0x73, 0xca, 0xdb, 0xeb, 0x27, 0xe2, 0xb8, 0x92, 0x0b, 0xb3, 0x3a, 0xb8, 0x9c, 0xf1, 0xe8, 0x61, 0x9d, 0x1a, 0x1c, 0x87, 0x94, 0xd5, 0x38, 0xaf, 0x73, 0xe1, 0x29, 0xde, 0x0a, 0xb1, 0xc8, 0x11, 0x67, 0xc8, 0x42, 0x18, 0x47, 0x9d, 0xf9, 0xca, 0x19, 0xd5, 0x30, 0x3e, 0x15, 0xdd, 0xf2, 0xa8, 0x3e, 0x06, 0xdf, 0x97, 0x9b, 0x0e, 0x1e, 0xc5, 0xde, 0x5d, 0xab, 0x64, 0x65, 0xb4, 0xda, 0xbd, 0x91, 0x4d, 0xc1, 0x3d, 0x50, 0xf8, 0x6f, 0x14, 0x8b, 0x50, 0x53, 0x0b, 0x87, 0xeb, 0xcb, 0x19, 0xf9, 0xf8, 0xaf, 0xe8, 0x84, 0x03, 0x63, 0x2d, 0x3b, 0xf1, 0x79, 0x7c, 0xdc, 0x33, 0x46, 0xed, 0xed, 0xc4, 0x38, 0x6e, 0x76, 0x7a, 0x5f, 0xec, 0x72, 0x09, 0xbb, 0x16, 0xf2, 0xb3, 0x64, 0xec, 0x7f, 0xd9, 0x04, 0x90, 0x51, 0xdf, 0x17, 0xbb, 0x58, 0xc2, 0x2e, 0x85, 0x7c, 0xad, 0x1f, 0x3b, 0x1d, 0x20, 0x36, 0x10, 0x19, 0xde, 0xae, 0xf3, 0xcb, 0x10, 0xe2, 0x6b, 0x59, 0x8a, 0xf7, 0xb6, 0xf7, 0x27, 0xc5, 0x5b, 0xf3, 0xfa, 0xc8, 0x62, 0x31, 0xdb, 0xa1, 0x98, 0x05, 0x72, 0x30, 0x2b, 0x54, 0x92, 0x2c, 0x2a, 0x60, 0x2c, 0x56, 0x87, 0xd2, 0x7c, 0x7b, 0x29, 0xa7, 0xf9, 0xf0, 0x46, 0xa0, 0xb2, 0x41, 0xa6, 0x79, 0x47, 0x07, 0x40, 0xeb, 0xd2, 0x79, 0x09, 0x6d, 0x58, 0x89, 0x59, 0x52, 0x89, 0xc5, 0x80, 0x53, 0xee, 0x2f, 0xb1, 0x1a, 0x20, 0x87, 0x9e, 0x97, 0x18, 0x1b, 0x56, 0x62, 0x8a, 0x54, 0xa2, 0x30, 0x58, 0x8a, 0x3b, 0x46, 0xa2, 0x14, 0x09, 0x13, 0x65, 0x59, 0xa6, 0x74, 0xbb, 0xe9, 0x34, 0xf1, 0x0a, 0x0f, 0x63, 0x14, 0x85, 0xfc, 0xd6, 0x5d, 0x2d, 0xd7, 0x70, 0xab, 0x47, 0xaa, 0x41, 0x8b, 0x6f, 0x35, 0x08, 0xc7, 0x4e, 0x53, 0xc8, 0xf8, 0x86, 0x04, 0xb9, 0xf6, 0x77, 0x0f, 0x01, 0x66, 0x5b, 0x08, 0xe6, 0x43, 0x5e, 0x2f, 0xc8, 0xb6, 0xa6, 0x62, 0xb0, 0x77, 0xd7, 0xaa, 0x66, 0xb1, 0x86, 0x5b, 0x19, 0x83, 0xe0, 0xc4, 0x7b, 0x10, 0xec, 0xa9, 0x16, 0xe0, 0xc5, 0x94, 0x53, 0x0b, 0x52, 0xaf, 0x31, 0x40, 0xeb, 0x15, 0x02, 0xb6, 0x7f, 0xf3, 0x0c, 0x6f, 0xff, 0xd0, 0x66, 0xa8, 0xb5, 0x12, 0x47, 0x8a, 0x6c, 0x90, 0xbc, 0x58, 0x63, 0x2e, 0x17, 0x57, 0xcb, 0x3c, 0x43, 0xbd, 0xb5, 0xa0, 0xcb, 0xc5, 0xe2, 0x1a, 0x69, 0x9c, 0xc9, 0xe4, 0xe3, 0x8c, 0x1c, 0x7f, 0x6f, 0x5c, 0x67, 0xb0, 0x82, 0x8f, 0x97, 0x62, 0x3e, 0x8c, 0x7a, 0xb1, 0x0d, 0x1e, 0x79, 0xdc, 0x2c, 0x93, 0xea, 0xcf, 0x87, 0xfa, 0xe3, 0xfd, 0x25, 0x1c, 0xbc, 0x04, 0x45, 0xc8, 0x3c, 0x3e, 0x3c, 0x13, 0xd9, 0x06, 0x52, 0xca, 0xc5, 0xf3, 0x11, 0x63, 0x42, 0x0b, 0xc5, 0x84, 0x56, 0xf2, 0x7f, 0xb6, 0xe0, 0x98, 0xf0, 0xcb, 0x8c, 0x81, 0x58, 0xe4, 0x97, 0x0f, 0x03, 0x16, 0xa9, 0x50, 0xa3, 0xa5, 0x39, 0x0d, 0x9a, 0x72, 0xd3, 0x58, 0xb1, 0xcc, 0x19, 0xef, 0x8f, 0x39, 0x8c, 0x26, 0x26, 0x56, 0xf8, 0x8c, 0xa5, 0x8c, 0xd6, 0x25, 0x21, 0x56, 0x95, 0x2d, 0xf7, 0xee, 0xed, 0x68, 0xab, 0xa3, 0x30, 0x0b, 0xc5, 0x15, 0x23, 0x05, 0x1b, 0x81, 0xa7, 0x07, 0xe4, 0xe8, 0xa9, 0xa9, 0xa6, 0xff, 0x55, 0xd9, 0x77, 0x5b, 0xe5, 0x48, 0xa9, 0x69, 0x56, 0x60, 0xde, 0xb3, 0xeb, 0x68, 0xdf, 0x55, 0xd9, 0xd0, 0xf8, 0x67, 0xa6, 0x14, 0xff, 0xcc, 0x6c, 0x0d, 0xd4, 0xb5, 0x43, 0xdd, 0x5f, 0xaf, 0xfa, 0xeb, 0x99, 0xa0, 0xfa, 0xf0, 0x64, 0xfc, 0x0a, 0x2c, 0x93, 0x77, 0xd6, 0x71, 0x34, 0xd2, 0xda, 0xa8, 0x4c, 0xff, 0x3b, 0xd7, 0x1d, 0x4d, 0x03, 0x91, 0xee, 0x8d, 0x4d, 0x28, 0x5d, 0x59, 0x5a, 0x77, 0x5a, 0xfa, 0xa5, 0x68, 0x9d, 0x66, 0xa1, 0x3e, 0x85, 0xa9, 0x5d, 0x78, 0xb6, 0xac, 0x49, 0xb3, 0xd0, 0x44, 0xf7, 0x90, 0xbe, 0xa3, 0xbf, 0x71, 0xec, 0x46, 0xe6, 0x2d, 0x8f, 0x2e, 0x56, 0x93, 0x1b, 0x73, 0xca, 0x09, 0x7e, 0x62, 0x28, 0xfa, 0x80, 0x11, 0xce, 0x59, 0xf2, 0x78, 0xe3, 0x4a, 0x0e, 0x8c, 0x57, 0x53, 0x60, 0x8c, 0x01, 0x5b, 0x89, 0x65, 0x4a, 0x1a, 0x9b, 0xf8, 0x18, 0xa3, 0x29, 0x79, 0x8f, 0x29, 0xa9, 0x75, 0x93, 0x8c, 0xe9, 0x4b, 0xab, 0x61, 0x4c, 0x89, 0xe9, 0x69, 0x23, 0xe8, 0x09, 0x05, 0x55, 0x02, 0x3e, 0xf5, 0xaf, 0xa6, 0x93, 0xbd, 0x71, 0xc1, 0xeb, 0x93, 0xd7, 0x1f, 0x44, 0x8e, 0xdf, 0xc3, 0x56, 0x74, 0x35, 0xfe, 0x15, 0x5d, 0xab, 0x78, 0xbe, 0xaf, 0x8c, 0xfe, 0xba, 0x14, 0x65, 0x14, 0x6e, 0x3f, 0xb4, 0xca, 0x8b, 0xcf, 0xd1, 0x30, 0x05, 0x9e, 0x32, 0x7b, 0x49, 0x8e, 0xfa, 0x65, 0x1e, 0xf1, 0xbd, 0x50, 0x14, 0xcb, 0xf5, 0x84, 0xd8, 0x45, 0xce, 0x97, 0x2f, 0xac, 0x34, 0x8a, 0x76, 0xb4, 0x0c, 0x9a, 0xb5, 0x3c, 0xfb, 0xa4, 0x5e, 0xb9, 0xd7, 0x7e, 0x78, 0x88, 0x5e, 0xb9, 0x5b, 0x9a, 0x23, 0x37, 0x06, 0x2c, 0x64, 0xdb, 0xf5, 0xbe, 0xfa, 0xe0, 0xf1, 0xa0, 0x2b, 0x59, 0x8a, 0x10, 0x0d, 0x81, 0x55, 0xed, 0x6b, 0x25, 0xf7, 0x27, 0x50, 0xec, 0x39, 0xf4, 0xfe, 0x9c, 0xc0, 0xca, 0xf6, 0xf5, 0x0c, 0x89, 0x5b, 0x4d, 0x9a, 0xc0, 0xfb, 0xbf, 0x7e, 0x8e, 0xe3, 0x93, 0x34, 0x06, 0xbe, 0xe3, 0x62, 0x3d, 0xf4, 0x6e, 0x88, 0xd0, 0x40, 0x15, 0xa9, 0x14, 0x91, 0x65, 0xe3, 0x5b, 0x76, 0x12, 0xec, 0x2f, 0x5f, 0xfe, 0xcc, 0xd1, 0x14, 0xc9, 0xfa, 0x72, 0xd1, 0x8b, 0xce, 0xf2, 0xc7, 0xde, 0xc3, 0xfd, 0x2b, 0x22, 0x76, 0xff, 0x8a, 0x88, 0xc5, 0x31, 0x25, 0x42, 0xfc, 0x9d, 0x2c, 0xc5, 0xdf, 0xe9, 0xfc, 0xb4, 0xd1, 0x37, 0xed, 0xb4, 0xe2, 0x8b, 0x91, 0x78, 0x72, 0x78, 0x24, 0x4e, 0xf9, 0x67, 0xa5, 0x78, 0x9c, 0x3c, 0xd4, 0x37, 0x9e, 0xfe, 0xf6, 0x1a, 0xc0, 0x6b, 0xb5, 0xdf, 0xf2, 0xc4, 0xad, 0x02, 0x99, 0x2b, 0x40, 0xe6, 0xc5, 0x14, 0x1d, 0x31, 0xb6, 0xec, 0x96, 0xe7, 0xc9, 0x3c, 0xb8, 0x57, 0x2e, 0x60, 0x8c, 0x7a, 0xc6, 0xca, 0x65, 0x1a, 0xbe, 0x56, 0xc2, 0xd8, 0x39, 0x0d, 0x52, 0x8b, 0x31, 0x35, 0x43, 0x6d, 0xd3, 0xf3, 0x34, 0xa3, 0x59, 0x6c, 0xb4, 0x55, 0xee, 0xab, 0x97, 0xd0, 0x1a, 0x8a, 0x24, 0x6b, 0xb8, 0x36, 0x83, 0x66, 0x6a, 0x55, 0x56, 0x0f, 0xd6, 0xba, 0xdc, 0xe1, 0xaf, 0x15, 0x77, 0xd5, 0xe9, 0x59, 0xa9, 0xdf, 0xcc, 0xf5, 0xa7, 0x95, 0x86, 0xaf, 0x28, 0x30, 0xff, 0x8a, 0x02, 0xab, 0x89, 0x3a, 0xcb, 0x89, 0xfb, 0xd9, 0x1b, 0x46, 0xb4, 0x6e, 0x8c, 0xd5, 0x28, 0xfe, 0xbc, 0xb2, 0x9c, 0xa7, 0xe4, 0x50, 0x4a, 0xf8, 0x2c, 0xe3, 0xea, 0x8c, 0xec, 0x2a, 0xe6, 0xa1, 0xe7, 0x7c, 0x4a, 0xe5, 0xe7, 0x7c, 0x40, 0x62, 0x2c, 0xfa, 0x7a, 0x50, 0xc9, 0x1b, 0x54, 0xab, 0x3b, 0x2a, 0x05, 0x64, 0x39, 0x57, 0x04, 0xde, 0x46, 0xe0, 0xb9, 0xca, 0x2b, 0x37, 0xf3, 0x7b, 0x14, 0x9e, 0x47, 0x3d, 0x94, 0x93, 0xb4, 0x7d, 0xda, 0xd8, 0x69, 0xb6, 0x02, 0xdb, 0x4f, 0x56, 0x16, 0x64, 0xfd, 0x90, 0x17, 0x5f, 0x3c, 0x7d, 0x02, 0xca, 0xaf, 0x2c, 0xb0, 0x3d, 0x13, 0x1f, 0xb9, 0x7c, 0xe2, 0x1e, 0xc8, 0x5f, 0x53, 0x60, 0x9b, 0xe0, 0xe4, 0xf9, 0x3f, 0xa9, 0x05, 0x78, 0x7d, 0x81, 0x2d, 0xf9, 0x1e, 0x87, 0xe3, 0x0f, 0x00, 0xdc, 0x56, 0x60, 0x1b, 0xfd, 0x20, 0x72, 0xf9, 0xd1, 0x3d, 0xd3, 0xc6, 0x3e, 0x6f, 0x29, 0xb0, 0x8d, 0x69, 0xe2, 0xf9, 0xcf, 0xe8, 0x39, 0xfc, 0x4c, 0x23, 0x87, 0x55, 0xa5, 0x1c, 0x56, 0xdb, 0x38, 0xfc, 0x44, 0x32, 0x87, 0x75, 0x6b, 0x39, 0x6c, 0xf0, 0x4e, 0xdb, 0x34, 0xad, 0xb2, 0xc0, 0x96, 0xb8, 0x86, 0xc3, 0xd9, 0x4a, 0x0e, 0x67, 0x5f, 0x92, 0xe0, 0x2e, 0x0e, 0xe7, 0x24, 0x47, 0x6e, 0xff, 0x6f, 0x57, 0x3f, 0x3f, 0x11, 0xf9, 0x7b, 0x3a, 0x53, 0x6a, 0xff, 0x14, 0x87, 0x9f, 0x79, 0xc8, 0xe1, 0xcc, 0x91, 0x1c, 0xce, 0x5c, 0xf4, 0xfd, 0xe4, 0x37, 0xe1, 0x06, 0xb4, 0x37, 0xa3, 0xc0, 0x96, 0x54, 0xf7, 0xfd, 0xf0, 0xc7, 0xec, 0x99, 0x76, 0x01, 0xf9, 0x19, 0x6b, 0x92, 0xf8, 0x5d, 0x34, 0x6d, 0x13, 0xf1, 0x3b, 0x83, 0xc3, 0x13, 0xca, 0x38, 0xbf, 0x13, 0x6a, 0x25, 0xb8, 0x41, 0x82, 0xcf, 0x46, 0xae, 0xdf, 0xb6, 0xdd, 0xf6, 0xf9, 0x8b, 0x71, 0xf6, 0xab, 0xb6, 0xed, 0xf6, 0x8e, 0x1f, 0xa2, 0xef, 0x17, 0x77, 0xbf, 0x78, 0xd5, 0x1e, 0x6f, 0xbf, 0xfa, 0xe2, 0x6e, 0x5e, 0xde, 0x6e, 0xb7, 0xaf, 0xb6, 0x1f, 0xb5, 0x5f, 0x85, 0xef, 0x0e, 0xf6, 0xff, 0xf0, 0x4f, 0xed, 0x98, 0xe6, 0xb3, 0xe9, 0x6d, 0xe9, 0xc2, 0x03, 0x9b, 0xe9, 0xff, 0x02, 0xb6, 0x49, 0xe3, 0x59, 0x60, 0x9e, 0x46, 0x3d, 0x1f, 0x66, 0x9f, 0x81, 0x75, 0x88, 0x47, 0xcf, 0xd1, 0x2e, 0x4f, 0x3c, 0x32, 0xbf, 0xe9, 0x1f, 0xcf, 0x9c, 0x5e, 0xdf, 0x99, 0x7d, 0x23, 0xee, 0xf1, 0xca, 0xe6, 0xd7, 0xb7, 0x1e, 0x9d, 0x75, 0xe3, 0xb9, 0xe4, 0x21, 0x75, 0xd7, 0xa7, 0x9c, 0x1c, 0x73, 0xed, 0xdd, 0x8c, 0x61, 0x3f, 0x3d, 0x96, 0xac, 0x68, 0x88, 0x57, 0xfc, 0x6e, 0xa6, 0xcc, 0x77, 0x0e, 0x44, 0xb1, 0xb5, 0xf4, 0x37, 0xf3, 0x3d, 0x84, 0x8f, 0x41, 0x44, 0xd7, 0xc4, 0xff, 0xde, 0x26, 0xbb, 0x4f, 0x3e, 0xde, 0x76, 0x41, 0x31, 0xf6, 0xda, 0x91, 0x5d, 0x7f, 0xb7, 0x70, 0xcb, 0x73, 0xbb, 0x47, 0x4d, 0x19, 0xd7, 0xfe, 0x67, 0x75, 0xdc, 0xe9, 0x45, 0x47, 0xd7, 0x2d, 0x2f, 0xf8, 0xf0, 0xf7, 0x5b, 0xfe, 0x6b, 0x4a, 0x17, 0xd6, 0x77, 0xfe, 0x29, 0xb9, 0xbe, 0x63, 0x9d, 0x8c, 0xed, 0x1f, 0xec, 0xd8, 0x3f, 0xf8, 0x17, 0xe7, 0x33, 0xa9, 0xfe, 0x2e, 0xb9, 0xbe, 0x7f, 0x7d, 0xf9, 0x18, 0xc0, 0xa9, 0x74, 0x52, 0x4a, 0x9c, 0xed, 0x10, 0xe8, 0x4e, 0x21, 0xce, 0xf6, 0xe9, 0xac, 0x8c, 0xa2, 0xbc, 0x1a, 0x83, 0x6e, 0x62, 0x12, 0x53, 0xf1, 0x59, 0x9a, 0xa6, 0x3a, 0xe7, 0x33, 0x37, 0x2b, 0x83, 0x79, 0x94, 0x62, 0x99, 0xa6, 0xda, 0xa4, 0x6a, 0x59, 0xbe, 0x00, 0xee, 0x55, 0xa5, 0x3e, 0x88, 0xbc, 0x7d, 0x93, 0x8b, 0xb6, 0x5d, 0x5e, 0xce, 0x4f, 0xa6, 0x0a, 0x4e, 0x9f, 0xd1, 0xe1, 0x16, 0x4b, 0x20, 0xd2, 0x2e, 0xb9, 0x55, 0xfd, 0xe9, 0x47, 0xbe, 0x51, 0xd6, 0x24, 0xdf, 0x10, 0x4b, 0x12, 0xc2, 0xe7, 0x9a, 0xc5, 0xd9, 0x57, 0xdf, 0xc6, 0xdf, 0x27, 0x66, 0x0c, 0x46, 0x8c, 0x5a, 0xdf, 0x04, 0xaf, 0x86, 0xb7, 0x04, 0xb5, 0x3c, 0xe5, 0x9b, 0xfc, 0x33, 0x77, 0xef, 0x39, 0xf8, 0x64, 0xbd, 0xe7, 0xa9, 0x56, 0xa6, 0xda, 0x76, 0xf5, 0x6d, 0x65, 0x35, 0x0e, 0x74, 0xfb, 0x9a, 0x11, 0x67, 0xd0, 0x36, 0xb8, 0x10, 0xaf, 0xb1, 0xf7, 0x10, 0x7c, 0x1a, 0x7a, 0x5b, 0x42, 0xd2, 0xf6, 0xfb, 0x26, 0xbf, 0x60, 0xe8, 0xf5, 0xf8, 0x98, 0x06, 0xd2, 0x14, 0x90, 0x66, 0x6d, 0xec, 0x6d, 0xf5, 0x19, 0xad, 0x4f, 0x61, 0x59, 0xa1, 0x11, 0xea, 0x7b, 0xca, 0x97, 0xd0, 0x96, 0xee, 0x63, 0xf5, 0xc0, 0x9f, 0xd5, 0x20, 0xd6, 0x60, 0x2c, 0x93, 0x37, 0x8f, 0xa8, 0xe0, 0xed, 0xb3, 0xde, 0x46, 0xa2, 0x62, 0xbb, 0xdc, 0x3e, 0xa7, 0x4e, 0xa6, 0x02, 0x5b, 0x42, 0x4a, 0xfc, 0xd0, 0x36, 0x56, 0x9d, 0x03, 0xb7, 0x38, 0x53, 0x25, 0x7a, 0x16, 0x13, 0x1d, 0x4b, 0x89, 0x22, 0xa4, 0x0c, 0xd3, 0x2a, 0x80, 0xaa, 0xc6, 0xde, 0x4a, 0x9e, 0x06, 0x94, 0x21, 0x8d, 0x55, 0xbe, 0xc9, 0x96, 0xc6, 0xde, 0x95, 0x40, 0x15, 0xa4, 0xa9, 0x0c, 0x12, 0x8d, 0x7e, 0xda, 0x2c, 0x06, 0x98, 0x0d, 0x03, 0x6d, 0xe6, 0x53, 0x20, 0x75, 0xd1, 0xcd, 0xca, 0xf1, 0x4c, 0x03, 0xce, 0x6d, 0x66, 0x73, 0xd9, 0x95, 0x0f, 0x45, 0x3c, 0x7c, 0x4f, 0x1c, 0x94, 0x64, 0x9c, 0x0f, 0xf3, 0x5a, 0x5f, 0x96, 0x85, 0x21, 0x35, 0x54, 0x47, 0x96, 0xc5, 0x80, 0xd3, 0x22, 0xca, 0xa9, 0xc3, 0xcf, 0x5c, 0x9d, 0x9c, 0x4f, 0x69, 0x4b, 0x49, 0xdb, 0xaa, 0x47, 0x6b, 0x5b, 0x69, 0x0a, 0x68, 0x5b, 0x59, 0x29, 0x6b, 0xfb, 0x52, 0x3d, 0xd7, 0xb6, 0x7a, 0x59, 0x74, 0x6d, 0xcb, 0x9a, 0x2e, 0x83, 0x19, 0x05, 0xc8, 0x58, 0x15, 0xac, 0xe9, 0x22, 0x77, 0xcf, 0x4d, 0x94, 0xf7, 0x77, 0x13, 0x01, 0x26, 0x6d, 0xa5, 0x29, 0x13, 0x15, 0x57, 0x37, 0x29, 0x57, 0x92, 0xb6, 0x57, 0xf2, 0x6f, 0xc0, 0x6b, 0xec, 0x39, 0x85, 0x52, 0xfc, 0x2e, 0x0e, 0xf1, 0xfe, 0x1d, 0x64, 0x9f, 0x98, 0x80, 0xd8, 0xb2, 0x46, 0x52, 0xab, 0x90, 0x23, 0xb1, 0x08, 0xb4, 0x52, 0x44, 0xd8, 0xa8, 0x3f, 0x43, 0xcf, 0x1d, 0xb9, 0x56, 0x6a, 0xb3, 0x9e, 0x72, 0xea, 0x01, 0xa7, 0x9e, 0x72, 0x2f, 0xf8, 0x73, 0x31, 0xdd, 0x4d, 0x69, 0x9f, 0x04, 0xd2, 0xac, 0x8d, 0x3d, 0x55, 0xa8, 0xa5, 0x9e, 0x13, 0x21, 0x69, 0xcb, 0x28, 0xad, 0x95, 0xa7, 0x81, 0xde, 0x8c, 0xd6, 0x6d, 0xc0, 0xcd, 0x64, 0x8b, 0xa1, 0xe7, 0x10, 0xe9, 0xaf, 0x1e, 0xf4, 0xa7, 0x97, 0x6c, 0xab, 0x51, 0xac, 0xc1, 0x18, 0xc5, 0xb2, 0x36, 0xa0, 0x4b, 0x53, 0x4f, 0x04, 0x19, 0x64, 0xa0, 0x0c, 0xba, 0x2f, 0x53, 0x9d, 0x9c, 0xd2, 0x20, 0xde, 0x88, 0xba, 0x78, 0xa4, 0xae, 0xfb, 0x38, 0x5a, 0x1d, 0xd1, 0x0f, 0x98, 0x41, 0x36, 0x27, 0xf1, 0xd0, 0xdd, 0x43, 0x58, 0x3b, 0x82, 0xf9, 0xea, 0xbe, 0x47, 0x69, 0x9b, 0x42, 0xd2, 0xae, 0x53, 0xda, 0xda, 0x60, 0xbe, 0xba, 0xbd, 0xc8, 0x57, 0x77, 0x5d, 0x48, 0xda, 0x25, 0x4a, 0x5b, 0xed, 0xe7, 0x15, 0xac, 0xb5, 0xfb, 0xbc, 0x64, 0xa5, 0xc8, 0x77, 0x10, 0xaf, 0x96, 0x46, 0xb1, 0x88, 0xe6, 0x4c, 0x8d, 0x81, 0x3e, 0x65, 0xd2, 0x49, 0x76, 0xcb, 0x98, 0x15, 0xac, 0xce, 0x1d, 0x64, 0x95, 0x3b, 0x99, 0x9b, 0xef, 0x75, 0xe6, 0x2d, 0xf2, 0xb1, 0x3d, 0x61, 0x36, 0x9c, 0x03, 0x11, 0xb3, 0x8c, 0x4f, 0x38, 0x76, 0x5c, 0x39, 0x63, 0x6c, 0x4a, 0x11, 0xc8, 0x2e, 0x2b, 0x4d, 0x89, 0x79, 0x68, 0x51, 0x9a, 0xea, 0x15, 0xbd, 0xa2, 0xe8, 0x84, 0x88, 0x0c, 0xbe, 0x6b, 0x52, 0xab, 0xf0, 0x24, 0x98, 0x58, 0x6b, 0x6e, 0x16, 0xd7, 0x40, 0xca, 0x25, 0xb1, 0x3e, 0xb5, 0xea, 0x37, 0xdb, 0x84, 0x4f, 0xc5, 0xf5, 0x90, 0xb2, 0x11, 0x78, 0x98, 0xec, 0x5b, 0xcf, 0xb4, 0x0c, 0x9f, 0x07, 0xa9, 0xa1, 0xcf, 0x7a, 0x4e, 0x29, 0xd9, 0x32, 0xde, 0xa1, 0x54, 0x77, 0x92, 0xd6, 0xea, 0xb9, 0x7e, 0x26, 0x1a, 0xa1, 0x37, 0xe4, 0x62, 0x44, 0xbe, 0x42, 0x54, 0x55, 0xe3, 0x69, 0x33, 0xb2, 0xe4, 0xd1, 0x0b, 0xb5, 0x08, 0xb1, 0x1f, 0xd3, 0xdc, 0xb0, 0xc4, 0x21, 0x98, 0xab, 0xe9, 0xb9, 0xdb, 0x12, 0x7c, 0x83, 0x6b, 0x4e, 0xef, 0xfa, 0xea, 0xd4, 0xaa, 0xc6, 0x6f, 0x57, 0x95, 0x8b, 0xb5, 0xa9, 0x55, 0x76, 0xcb, 0xb0, 0x64, 0xa0, 0xc6, 0x8c, 0xad, 0x28, 0x40, 0x4a, 0x2f, 0x80, 0xe4, 0x12, 0x1f, 0xb7, 0x9a, 0xb9, 0x5d, 0xb3, 0x95, 0x73, 0xd0, 0x76, 0xcd, 0xa0, 0x41, 0xe3, 0x73, 0x06, 0xfa, 0x4c, 0x12, 0x8b, 0x12, 0x15, 0xf8, 0x26, 0xf9, 0x1c, 0x11, 0x4b, 0x05, 0xf3, 0xa4, 0x46, 0x0a, 0xbe, 0xc8, 0xce, 0x0d, 0xe5, 0x0b, 0xe6, 0x0c, 0x25, 0x3e, 0x98, 0xc6, 0xf9, 0x8c, 0xf9, 0xe4, 0xdf, 0x62, 0x81, 0x97, 0x7c, 0xd4, 0x0c, 0x1b, 0x02, 0x9e, 0x6b, 0x18, 0x78, 0x3b, 0x6d, 0x12, 0xf8, 0x1b, 0xb8, 0x86, 0x1b, 0x80, 0x06, 0x48, 0xd3, 0xed, 0x44, 0x5f, 0x03, 0xd1, 0x3a, 0xea, 0x45, 0x0b, 0x69, 0x00, 0x6b, 0x1a, 0x61, 0xae, 0x01, 0x3e, 0xf8, 0x17, 0xc0, 0x0f, 0xf4, 0xac, 0x84, 0xb6, 0x2c, 0xbf, 0x97, 0x51, 0x2d, 0x60, 0x5d, 0x36, 0x07, 0xeb, 0x99, 0x34, 0xa5, 0xe1, 0xc3, 0x99, 0x9d, 0x4f, 0xac, 0xae, 0x3d, 0xea, 0x3b, 0xf4, 0xee, 0xce, 0x75, 0x05, 0xaa, 0x63, 0x19, 0x0b, 0x67, 0xee, 0x7b, 0x67, 0xc7, 0x1c, 0xff, 0x88, 0xf5, 0x80, 0x31, 0xef, 0xab, 0x9f, 0xf6, 0x8c, 0xda, 0x9c, 0xcf, 0xe1, 0x6f, 0x21, 0xf8, 0xcf, 0xba, 0x50, 0x33, 0xec, 0xcf, 0x73, 0xb6, 0xca, 0x23, 0x58, 0xed, 0x5b, 0x3b, 0xfe, 0xa3, 0xdb, 0xfc, 0x2c, 0x3d, 0xf1, 0x7d, 0xec, 0x3b, 0xc6, 0xda, 0x3b, 0x97, 0xff, 0x68, 0xe7, 0xb4, 0x53, 0x74, 0x86, 0x35, 0x07, 0xf2, 0x51, 0x6e, 0x28, 0x33, 0x84, 0x4d, 0x0a, 0x7e, 0xb6, 0xcf, 0x5f, 0xff, 0x5f, 0x20, 0xda, 0xdf, 0x26, 0x9c, 0x97, 0x61, 0x8f, 0x2a, 0x70, 0xf6, 0x6f, 0x9c, 0x9b, 0xc3, 0xad, 0x27, 0x7f, 0xfe, 0x9f, 0xba, 0xbf, 0xaf, 0x7a, 0xaa, 0xa1, 0x8d, 0xc3, 0x2d, 0xcb, 0x2f, 0xfd, 0xb7, 0x38, 0x63, 0xd2, 0x90, 0xad, 0x37, 0x39, 0xbc, 0x7f, 0xd2, 0xcb, 0x86, 0xf6, 0xa9, 0xf7, 0xd8, 0x38, 0x2b, 0x87, 0xdf, 0xbb, 0xfb, 0x97, 0x17, 0xbf, 0x78, 0x76, 0x57, 0xfb, 0x56, 0x3d, 0x87, 0x77, 0xbd, 0xeb, 0x58, 0x76, 0x26, 0xfd, 0x97, 0x5f, 0x8c, 0xeb, 0xe1, 0xf0, 0xb6, 0xd9, 0x57, 0xb6, 0x1d, 0xfe, 0x9b, 0x31, 0x7f, 0x18, 0xa7, 0xe3, 0xf0, 0xef, 0x87, 0xce, 0x3d, 0xdb, 0x34, 0xea, 0xb3, 0x83, 0x5b, 0x4b, 0x38, 0xbc, 0xe1, 0x0f, 0xd7, 0xbe, 0x7d, 0x5b, 0xfb, 0xe6, 0xce, 0x71, 0x5e, 0x0e, 0xd7, 0xaf, 0x7a, 0x25, 0xb1, 0x36, 0x66, 0xda, 0x06, 0xfd, 0x1e, 0x0e, 0xd7, 0x4d, 0xbe, 0x51, 0xb0, 0xf4, 0xe1, 0xa0, 0x9a, 0xad, 0xb5, 0x1c, 0x5e, 0xe5, 0x73, 0x55, 0xbe, 0x72, 0xe7, 0xd8, 0xab, 0xe3, 0x8e, 0x03, 0x1c, 0xc3, 0x58, 0xf7, 0x4b, 0x7f, 0xcc, 0xdf, 0xd5, 0xea, 0x6b, 0xd5, 0x33, 0x0e, 0xb7, 0xb7, 0x7e, 0xda, 0xf0, 0x4f, 0xbb, 0x9d, 0x5b, 0xc6, 0x65, 0x72, 0xf8, 0xea, 0x4f, 0xff, 0xf4, 0xe0, 0x95, 0xb7, 0x3e, 0x7f, 0x6d, 0x6b, 0x3a, 0x87, 0xff, 0xd4, 0x70, 0xd1, 0x96, 0xb7, 0xc2, 0x5e, 0xb2, 0xc5, 0xc3, 0x61, 0x3f, 0xff, 0x52, 0x79, 0x3f, 0xbf, 0xa5, 0x1c, 0x96, 0xf9, 0x6b, 0x68, 0xf8, 0x1f, 0xf6, 0xbe, 0x3b, 0x20, 0x8a, 0x6b, 0x8d, 0xf7, 0xec, 0x82, 0x48, 0x13, 0x17, 0x44, 0x44, 0x12, 0xdd, 0x75, 0x21, 0x06, 0x11, 0x01, 0x8d, 0x41, 0x44, 0x64, 0x97, 0xa2, 0x02, 0xd7, 0x6b, 0x0b, 0x1a, 0x24, 0xa8, 0xab, 0x41, 0x54, 0x44, 0xc0, 0x1a, 0xa3, 0x46, 0x97, 0x22, 0x62, 0x47, 0x45, 0xc5, 0x06, 0x88, 0xc6, 0x80, 0x22, 0xd6, 0x58, 0x10, 0x58, 0x50, 0xc4, 0xae, 0xd8, 0x0d, 0x41, 0xc4, 0x12, 0xc4, 0x9a, 0x04, 0x11, 0xe9, 0xfb, 0x4e, 0x99, 0x73, 0x76, 0x28, 0x1a, 0x73, 0x73, 0xef, 0x7b, 0xff, 0x3c, 0x71, 0x77, 0xe7, 0x37, 0xdf, 0x7c, 0xa7, 0x9f, 0xf3, 0xb5, 0x33, 0x33, 0x04, 0xd3, 0xfa, 0x48, 0xe2, 0x08, 0x66, 0xe5, 0x57, 0x10, 0xcc, 0xca, 0x0b, 0x8d, 0xed, 0x5c, 0xa1, 0xa6, 0x7c, 0x62, 0x25, 0xc1, 0xb4, 0x3c, 0xc9, 0x07, 0x09, 0xa6, 0xf9, 0x4b, 0x38, 0x3a, 0xcb, 0x4f, 0x42, 0x30, 0x4d, 0x5f, 0x82, 0xda, 0x47, 0xc0, 0x4b, 0x0f, 0x10, 0xcc, 0xf8, 0x39, 0xcc, 0xae, 0x47, 0xe5, 0xe1, 0xed, 0xf5, 0x44, 0xf9, 0xab, 0x78, 0x7b, 0x3d, 0xc5, 0xad, 0x68, 0x8a, 0xfc, 0xbd, 0xa0, 0x49, 0x00, 0xbf, 0x9b, 0x55, 0x83, 0x95, 0x64, 0x3c, 0xd1, 0xf4, 0x93, 0x15, 0x9a, 0xf1, 0x85, 0xe8, 0xc9, 0xdc, 0x78, 0xa3, 0xe5, 0xc3, 0xfc, 0xbc, 0xf2, 0x27, 0x97, 0x12, 0x4c, 0xeb, 0x27, 0x91, 0x10, 0xcc, 0xf8, 0x95, 0x04, 0xd3, 0xf6, 0x41, 0xfd, 0x2f, 0xe7, 0xb5, 0x1f, 0xce, 0x9f, 0xd7, 0xbe, 0xdd, 0x74, 0x09, 0xa6, 0xe9, 0xef, 0x54, 0x10, 0x4c, 0xfb, 0x27, 0x39, 0x8e, 0x60, 0x96, 0x5f, 0x32, 0xc1, 0xb4, 0x7f, 0xbb, 0x4d, 0x25, 0x98, 0xe6, 0x8f, 0x26, 0x98, 0x9c, 0x37, 0x3e, 0xc4, 0xb9, 0x04, 0xd3, 0xf2, 0x74, 0x73, 0x20, 0x98, 0x8e, 0xaf, 0x9d, 0x4e, 0x04, 0xd3, 0xf2, 0xe1, 0xfa, 0xf3, 0xc6, 0xe7, 0xce, 0x7c, 0x82, 0x59, 0x79, 0x63, 0x09, 0xa6, 0xe3, 0x1b, 0xf5, 0xbf, 0x9c, 0x37, 0xfe, 0x77, 0x96, 0x12, 0x4c, 0xe7, 0x47, 0x37, 0x3f, 0x82, 0x69, 0x7d, 0x76, 0x8a, 0x08, 0xa6, 0xf3, 0x6b, 0x67, 0x3d, 0xc1, 0xb4, 0x7e, 0xdd, 0x24, 0x04, 0xd3, 0xf9, 0xb9, 0xd3, 0x8b, 0x60, 0x56, 0xdf, 0x72, 0x82, 0xe9, 0xfc, 0x96, 0x14, 0x12, 0xcc, 0xea, 0x8f, 0x24, 0x0b, 0xd4, 0x60, 0xde, 0xa3, 0xa9, 0xf6, 0xd5, 0xe8, 0x2e, 0x02, 0x4f, 0xaa, 0xbb, 0xdc, 0xbc, 0xe5, 0x51, 0xdb, 0x90, 0x55, 0x21, 0x50, 0x28, 0xf9, 0x1a, 0xcb, 0x73, 0x2a, 0x75, 0xa1, 0x36, 0xc8, 0x34, 0xd4, 0x59, 0x4c, 0x0f, 0x84, 0x5a, 0x61, 0x6d, 0x35, 0x92, 0xd6, 0xb5, 0xb5, 0x7c, 0x9d, 0xb3, 0xb6, 0x12, 0x49, 0xca, 0xda, 0x46, 0xcd, 0x39, 0xef, 0x94, 0x3a, 0x80, 0xa5, 0xa7, 0x7e, 0x93, 0x73, 0x86, 0x58, 0xb6, 0x62, 0xcd, 0x54, 0x57, 0x0a, 0xe5, 0x58, 0x0a, 0x96, 0x89, 0x54, 0xe3, 0x03, 0xda, 0x12, 0x24, 0xe7, 0x9c, 0xee, 0x91, 0xfc, 0x88, 0x2e, 0x5c, 0x1b, 0x8b, 0xf3, 0x83, 0x92, 0x59, 0xc0, 0x49, 0x66, 0x98, 0x5f, 0x34, 0xce, 0x6f, 0x8d, 0xe6, 0x9c, 0x77, 0x4a, 0x6d, 0x1c, 0x3e, 0xb7, 0xb5, 0xc9, 0xb9, 0xed, 0x9c, 0xbe, 0x69, 0x89, 0x35, 0x5f, 0xa8, 0x0d, 0xb2, 0xfc, 0x3e, 0x9f, 0xaa, 0xd4, 0xdf, 0x4c, 0xf4, 0x57, 0x98, 0xb3, 0xd8, 0x8b, 0xe4, 0x3c, 0x9e, 0x93, 0xd8, 0x9f, 0x42, 0x3a, 0x60, 0xda, 0xa5, 0xd8, 0x0b, 0x6b, 0x8b, 0x4e, 0x7d, 0xd0, 0xb7, 0xe3, 0xd5, 0xff, 0x2f, 0x85, 0xff, 0xe7, 0x52, 0xd8, 0x97, 0x49, 0x61, 0xdf, 0x47, 0x5b, 0x14, 0xa0, 0x61, 0x96, 0xaa, 0x6a, 0xea, 0xe2, 0xde, 0xde, 0xcb, 0xee, 0xc9, 0x85, 0xe9, 0xd3, 0xfa, 0xa6, 0xcc, 0x38, 0xa2, 0x3a, 0x3d, 0x24, 0x6c, 0x58, 0x97, 0x94, 0x35, 0xb2, 0x23, 0x9e, 0x9e, 0x4b, 0x96, 0x4d, 0x5b, 0xae, 0x3a, 0xee, 0xf9, 0x7a, 0xc9, 0x81, 0x41, 0xbf, 0xca, 0xb2, 0x66, 0x16, 0x0c, 0x8e, 0x17, 0x4a, 0x54, 0xa7, 0xbd, 0xad, 0xd6, 0x9b, 0xcf, 0xaa, 0x91, 0x5d, 0xd8, 0x02, 0xff, 0xad, 0x4d, 0x53, 0xdd, 0x1e, 0x8d, 0xff, 0xa9, 0x8e, 0x1b, 0xbc, 0x49, 0xf8, 0x2a, 0x31, 0x18, 0x5e, 0xb7, 0x6c, 0x53, 0xaf, 0x2e, 0x3f, 0xa0, 0xeb, 0x22, 0x67, 0xb6, 0x3d, 0x81, 0xaf, 0xdb, 0xd4, 0xdd, 0x95, 0xbb, 0xce, 0xb1, 0xf9, 0xce, 0x7a, 0x55, 0x33, 0x0c, 0x1b, 0x12, 0x28, 0xf9, 0x0f, 0x87, 0x69, 0x86, 0x65, 0x75, 0x70, 0x35, 0xb9, 0x3e, 0xea, 0xac, 0x8e, 0xc1, 0x82, 0x91, 0x14, 0xaf, 0x3c, 0xef, 0x3b, 0x68, 0xb2, 0xf7, 0xca, 0x95, 0x14, 0x6f, 0xc8, 0x91, 0x2b, 0x3a, 0x4d, 0x9a, 0xde, 0x8e, 0xe2, 0x6d, 0x47, 0xda, 0xae, 0xfe, 0x32, 0xe3, 0xb4, 0x90, 0xe2, 0x5d, 0x7b, 0xb6, 0x8e, 0x1a, 0x57, 0xfc, 0xb4, 0x84, 0xe2, 0x7d, 0x09, 0xcf, 0x3c, 0x26, 0xcd, 0x1b, 0xd3, 0x99, 0xe2, 0x23, 0xcb, 0x7f, 0x13, 0xd6, 0x9c, 0x4d, 0x98, 0x44, 0xf1, 0xa9, 0xef, 0x17, 0x7b, 0x4c, 0xd7, 0x2b, 0xab, 0xa3, 0xf8, 0xcc, 0x94, 0x1f, 0xcf, 0xf5, 0xff, 0xad, 0x72, 0x30, 0xc5, 0x97, 0x7c, 0x87, 0x4e, 0xbc, 0xf6, 0xee, 0x76, 0x01, 0xc5, 0x37, 0x65, 0x93, 0xaa, 0xad, 0x62, 0xbf, 0x72, 0xa5, 0xf8, 0x57, 0xeb, 0xa2, 0x88, 0x49, 0xf2, 0xa1, 0xdf, 0x51, 0xfc, 0x58, 0xb4, 0xbb, 0xed, 0x8a, 0x9b, 0xc3, 0xcd, 0x29, 0x7e, 0x5e, 0x75, 0x30, 0xd5, 0x7c, 0xcd, 0xc3, 0x17, 0x14, 0x57, 0x14, 0xfd, 0x19, 0xbf, 0x23, 0xe7, 0xfb, 0xdb, 0x14, 0xd7, 0x66, 0xfb, 0x75, 0x98, 0x78, 0x6b, 0xb1, 0x2b, 0xd5, 0x66, 0xa2, 0x06, 0xa7, 0x77, 0xd3, 0x1b, 0xfb, 0x32, 0x9f, 0xe2, 0x95, 0x96, 0x36, 0xba, 0x0e, 0xee, 0x91, 0xf7, 0x28, 0x5e, 0x5f, 0x17, 0x7e, 0xe2, 0xc6, 0xd6, 0x47, 0x35, 0x14, 0x6f, 0xbd, 0x36, 0x24, 0x2c, 0xe0, 0xca, 0xa7, 0x47, 0x99, 0x36, 0x94, 0x38, 0xcf, 0xc1, 0xdb, 0xb7, 0x42, 0x46, 0xf1, 0xde, 0xa9, 0x67, 0x0b, 0x57, 0x9c, 0x18, 0xe5, 0x40, 0xf1, 0xe1, 0x5e, 0xea, 0x86, 0x1d, 0x5f, 0x25, 0x45, 0x51, 0x7c, 0xf2, 0xd5, 0xef, 0x83, 0x5c, 0xe3, 0x8c, 0x7e, 0xa4, 0x38, 0x2f, 0x75, 0xc2, 0xa7, 0xe7, 0xc6, 0xbb, 0x32, 0x7c, 0x61, 0xdc, 0x27, 0xe5, 0xd6, 0x1d, 0x56, 0x97, 0x51, 0x7c, 0xdd, 0xe0, 0x0d, 0x88, 0x6e, 0xd7, 0xeb, 0x09, 0xc5, 0xf7, 0x8e, 0x1e, 0xce, 0x9c, 0x9e, 0x3b, 0x7e, 0x01, 0xc5, 0xa5, 0x5f, 0xdb, 0x4c, 0x3f, 0x6a, 0xf9, 0x65, 0x15, 0xc5, 0x4f, 0xdf, 0xd8, 0x84, 0x3f, 0xdf, 0xbe, 0x77, 0x2d, 0xc5, 0xbf, 0xc7, 0x46, 0xf7, 0x09, 0x7c, 0xf9, 0xfb, 0x5e, 0x8a, 0xdf, 0x75, 0xd2, 0xb7, 0x7e, 0x99, 0x8b, 0xb6, 0xe1, 0x41, 0x0c, 0xb5, 0xbb, 0x08, 0xfb, 0x1b, 0xb1, 0x5f, 0xf4, 0xda, 0xdf, 0x87, 0xe2, 0xd8, 0xd4, 0xeb, 0x87, 0xba, 0xad, 0xf9, 0x77, 0x20, 0xc5, 0x71, 0x26, 0xfb, 0x64, 0x96, 0x4f, 0x32, 0xca, 0x29, 0xde, 0x1c, 0x72, 0xe6, 0x96, 0xf1, 0xd3, 0x3f, 0x4f, 0x52, 0x9c, 0x78, 0x6c, 0xb9, 0xb7, 0xd3, 0xf2, 0x94, 0xcf, 0x29, 0xfe, 0xf1, 0xf7, 0x59, 0x67, 0x3c, 0x97, 0x39, 0x7e, 0x42, 0xf1, 0xfe, 0x4e, 0x20, 0xf3, 0x8f, 0x05, 0xb3, 0x18, 0xfd, 0xa8, 0x6d, 0x56, 0x6d, 0x43, 0xbf, 0xdf, 0x8f, 0x53, 0x7c, 0xca, 0xc1, 0x39, 0xde, 0x20, 0xb5, 0xfd, 0x72, 0x8a, 0x4f, 0x77, 0xeb, 0x58, 0x50, 0x9f, 0x71, 0xea, 0x00, 0xc5, 0xe7, 0x1b, 0xdf, 0x94, 0xc5, 0x7c, 0x61, 0xd2, 0x8d, 0xe2, 0x6b, 0x17, 0xa2, 0x1c, 0x8e, 0x02, 0xc3, 0x70, 0x8a, 0xef, 0x28, 0x17, 0xec, 0x14, 0xd9, 0x7e, 0x53, 0x43, 0xf1, 0x7d, 0xcb, 0x2d, 0x59, 0xbd, 0x3f, 0xb3, 0xd9, 0x45, 0xf1, 0xe3, 0xc3, 0xa9, 0xa3, 0xa7, 0xaf, 0x3d, 0xdb, 0x89, 0xe2, 0xe7, 0xbd, 0xe6, 0x0d, 0x0f, 0xec, 0x3d, 0x96, 0xe5, 0xf7, 0x46, 0xf5, 0x4d, 0x75, 0xe6, 0xf5, 0x94, 0x2e, 0x18, 0x37, 0xc2, 0xf9, 0xf1, 0xe9, 0xe3, 0xc4, 0x76, 0x92, 0x80, 0xad, 0x14, 0xc7, 0x38, 0xa4, 0x14, 0x15, 0x75, 0x2d, 0x0c, 0xa2, 0x78, 0x95, 0xc5, 0xad, 0x41, 0x6f, 0x4a, 0xb7, 0xad, 0xa2, 0x78, 0xdd, 0xaf, 0x6b, 0xcd, 0x02, 0xdf, 0x8c, 0x78, 0x44, 0xf1, 0xe6, 0xd9, 0xa6, 0x12, 0xc7, 0xf1, 0x5f, 0x31, 0xfa, 0xf6, 0x87, 0xe7, 0xcb, 0x92, 0x4f, 0x5c, 0xc9, 0xa4, 0x38, 0xc5, 0xba, 0xcf, 0xaf, 0x17, 0x8b, 0x32, 0xf4, 0x28, 0xfe, 0x69, 0x70, 0xc5, 0xfd, 0xe3, 0x0a, 0x69, 0x3c, 0xc5, 0xe9, 0xae, 0xb9, 0x75, 0x5b, 0x7e, 0xb8, 0x93, 0x42, 0xf1, 0x21, 0xd1, 0xd4, 0x15, 0x2f, 0x8a, 0xc3, 0x82, 0x29, 0xfe, 0x39, 0x2b, 0x3f, 0x0e, 0x0e, 0xd7, 0x83, 0x14, 0x67, 0x7a, 0x66, 0xfd, 0x70, 0x2b, 0x7c, 0xbe, 0x3d, 0xc5, 0x39, 0x69, 0x6e, 0x9e, 0x0d, 0xda, 0x5b, 0xd3, 0x29, 0x3e, 0xfd, 0xc2, 0xe7, 0x54, 0x90, 0x99, 0xf5, 0x31, 0x8a, 0xcf, 0x19, 0xdc, 0x1e, 0x5a, 0x26, 0x7c, 0x6d, 0x4a, 0xf1, 0x15, 0xd0, 0xc6, 0x7b, 0xff, 0xcb, 0x99, 0x63, 0x29, 0xbe, 0x15, 0xfd, 0xf5, 0x8d, 0x7b, 0xcf, 0x87, 0xed, 0xa2, 0xf8, 0xd7, 0xf8, 0xd5, 0x3f, 0x99, 0x94, 0x5c, 0x1d, 0x40, 0xf1, 0x23, 0xa7, 0xd1, 0x35, 0xd3, 0xca, 0xf5, 0x58, 0x79, 0xca, 0xbf, 0x33, 0xee, 0x91, 0xff, 0x65, 0x1f, 0xc6, 0xff, 0xfa, 0xeb, 0xbc, 0xd0, 0x76, 0xfd, 0xb6, 0xb7, 0xa3, 0xf8, 0xcd, 0x43, 0xa1, 0x71, 0xea, 0xa2, 0x7e, 0xdf, 0x53, 0x5c, 0xd3, 0x59, 0x6b, 0xc7, 0xdc, 0x95, 0xab, 0xdd, 0x28, 0x6e, 0x6c, 0xb3, 0x72, 0x6d, 0xe0, 0x86, 0x09, 0x47, 0xa8, 0x76, 0x18, 0x31, 0xba, 0xce, 0x7b, 0xe1, 0xd4, 0x71, 0xda, 0x14, 0x47, 0xc5, 0x26, 0x7e, 0xe9, 0x7d, 0x5d, 0xf7, 0x21, 0xc5, 0x4b, 0xb7, 0xd7, 0xce, 0x1b, 0xd9, 0x65, 0xd6, 0xbf, 0x28, 0x5e, 0xb6, 0xd1, 0xee, 0x9a, 0x3a, 0xa2, 0xf7, 0x53, 0x8a, 0x97, 0xcf, 0xb6, 0xbf, 0xbe, 0xf1, 0xeb, 0xc0, 0x4f, 0x28, 0x5e, 0xe9, 0x74, 0xf1, 0xba, 0x60, 0x83, 0x0d, 0xbb, 0x13, 0x69, 0xd5, 0xd3, 0xd4, 0x7b, 0x0e, 0x5d, 0xcb, 0x7e, 0xa6, 0x78, 0xed, 0xe0, 0x5d, 0x89, 0x76, 0x19, 0xa3, 0x22, 0x28, 0x5e, 0xdf, 0xeb, 0xa7, 0xbb, 0xeb, 0x62, 0xa3, 0x97, 0x51, 0x1c, 0x7f, 0x3d, 0xe9, 0x52, 0xc9, 0x83, 0x51, 0x6e, 0x14, 0x6f, 0x76, 0x3e, 0xe9, 0xd9, 0xf9, 0x46, 0xf2, 0x4a, 0x8a, 0xb7, 0x84, 0xfd, 0x61, 0xa4, 0xfb, 0xd0, 0x60, 0x13, 0xc5, 0xdb, 0xbe, 0x93, 0x6d, 0x34, 0xe9, 0xd3, 0xe5, 0x27, 0x8a, 0x77, 0x8c, 0xbe, 0xdc, 0xa7, 0xfd, 0x86, 0x31, 0x56, 0x14, 0x27, 0x89, 0xda, 0xcc, 0x05, 0x21, 0x67, 0x67, 0x52, 0x9c, 0x9c, 0x76, 0x3a, 0xee, 0x97, 0x45, 0xb9, 0x21, 0x14, 0xa7, 0x74, 0x1f, 0xfb, 0xe2, 0x45, 0xee, 0xb7, 0xfa, 0x14, 0xef, 0x8a, 0x3d, 0x7a, 0xa0, 0xea, 0x77, 0xa3, 0x0b, 0x14, 0xef, 0xbe, 0x39, 0x41, 0x34, 0xf1, 0xc6, 0xfa, 0x7c, 0x8a, 0xf7, 0xe8, 0x6e, 0x2c, 0xae, 0x7b, 0x6c, 0xbe, 0x98, 0xe2, 0x9f, 0x6c, 0x46, 0x16, 0xcf, 0x9e, 0x92, 0x93, 0x4e, 0x71, 0xaa, 0xf3, 0xc8, 0xaf, 0xf4, 0xc6, 0x98, 0xad, 0xa5, 0x38, 0xcd, 0x59, 0xd2, 0x76, 0x6e, 0x7f, 0xdf, 0x50, 0x8a, 0xf7, 0x26, 0xce, 0x1a, 0x24, 0x1c, 0xd0, 0xbd, 0x0d, 0xc5, 0xe9, 0x43, 0xa3, 0x33, 0xc3, 0x9e, 0xdc, 0x66, 0xd7, 0xef, 0xbf, 0xea, 0xe3, 0xa3, 0x98, 0xbe, 0xd9, 0x84, 0xe2, 0x03, 0x36, 0xbd, 0xae, 0xac, 0xee, 0xee, 0xb2, 0x9d, 0xe2, 0x83, 0x93, 0xc3, 0x22, 0x2a, 0xa4, 0x93, 0xcf, 0x51, 0x7c, 0x28, 0x7a, 0x72, 0xc7, 0xf6, 0x33, 0xbd, 0x83, 0x29, 0x3e, 0xbc, 0x62, 0x6f, 0xc7, 0xb0, 0xad, 0x45, 0xac, 0xfd, 0x8f, 0x2c, 0xf4, 0x54, 0xf7, 0x0b, 0x3a, 0xb1, 0x91, 0xe2, 0xa3, 0x7e, 0x67, 0x8a, 0x9f, 0x7d, 0xab, 0xfd, 0x05, 0xc5, 0x3f, 0x7f, 0x36, 0x6a, 0xc7, 0x18, 0xe9, 0xe0, 0x6c, 0x86, 0x1f, 0x5d, 0x4e, 0x9b, 0xb0, 0x23, 0xf6, 0x32, 0xc5, 0xc7, 0xd6, 0x5f, 0x2c, 0x5a, 0x70, 0xd1, 0xa2, 0x88, 0xe2, 0xe3, 0x8e, 0x19, 0x3f, 0xed, 0x59, 0xef, 0xe7, 0xc4, 0xf0, 0xb5, 0x7d, 0xd6, 0x8b, 0x93, 0x16, 0x3a, 0x52, 0x7c, 0x62, 0xfc, 0xe5, 0xa0, 0x4b, 0xdd, 0x12, 0x58, 0xfe, 0x27, 0x9e, 0x34, 0xf8, 0x4b, 0x7e, 0xdc, 0xc0, 0xf8, 0x4f, 0x26, 0xb9, 0x55, 0xf9, 0xa8, 0xb7, 0xb1, 0xf1, 0x90, 0xb9, 0xa4, 0x6b, 0xa7, 0xe8, 0x9e, 0x39, 0x0b, 0x29, 0x3e, 0x35, 0xc4, 0x64, 0xe9, 0xbc, 0x7e, 0x0f, 0x7f, 0x60, 0xb8, 0x36, 0x67, 0xc5, 0x90, 0xd8, 0x07, 0x61, 0x14, 0x67, 0xed, 0x68, 0xbf, 0xbf, 0xe7, 0xd4, 0x1d, 0xdf, 0x53, 0x9c, 0xed, 0x10, 0xdc, 0x7f, 0x48, 0xd7, 0x2b, 0x31, 0x0c, 0x1f, 0x3b, 0xd7, 0x7b, 0x69, 0xf0, 0x9f, 0x2b, 0x28, 0xce, 0xe9, 0x7d, 0xf1, 0xac, 0xb0, 0xbc, 0x5d, 0x38, 0xc3, 0x29, 0xb7, 0x03, 0x1e, 0xf7, 0x8e, 0x7f, 0x44, 0xb1, 0xca, 0x40, 0x74, 0x3c, 0xb7, 0xb7, 0xf5, 0x1f, 0x0c, 0x4f, 0x5f, 0x60, 0x5e, 0x74, 0xe9, 0xbb, 0xd5, 0x0c, 0xe7, 0x3f, 0x1f, 0xfc, 0x6d, 0xad, 0x79, 0x15, 0xc5, 0xb9, 0xe6, 0x9f, 0x94, 0xac, 0x5c, 0xbe, 0xdb, 0x97, 0xe1, 0xc9, 0x07, 0x83, 0xae, 0xa9, 0x02, 0xfb, 0x33, 0x9c, 0xd1, 0x77, 0xc2, 0x98, 0xbe, 0xfa, 0x65, 0x0c, 0x57, 0x48, 0xd7, 0x6d, 0x3f, 0x59, 0x86, 0xc7, 0xa7, 0x46, 0x1b, 0x27, 0x5a, 0x1c, 0xd3, 0xc9, 0xeb, 0x88, 0x4e, 0x0e, 0x0a, 0xa1, 0x4e, 0x2e, 0x54, 0xab, 0xc3, 0x90, 0x4e, 0x3e, 0x54, 0x98, 0x51, 0x8d, 0xbc, 0xcf, 0xb1, 0x20, 0x43, 0x1b, 0xff, 0x72, 0xde, 0xe8, 0x55, 0x9c, 0x56, 0xb8, 0x0b, 0xfb, 0x9b, 0xac, 0xe1, 0x37, 0xd5, 0x98, 0xd1, 0xf6, 0x31, 0xa1, 0x95, 0x00, 0x69, 0x85, 0xf3, 0x81, 0x30, 0x12, 0xdd, 0x35, 0xa2, 0x1d, 0x89, 0x64, 0xf0, 0xa3, 0xc8, 0x1b, 0x91, 0xaf, 0x23, 0x3c, 0x6a, 0xdf, 0x29, 0x6f, 0xe6, 0xf5, 0x1a, 0x0b, 0xb5, 0xb4, 0xb1, 0xea, 0x78, 0xf8, 0x49, 0x80, 0x9a, 0x14, 0xe7, 0xaf, 0x8d, 0xca, 0x50, 0xc7, 0x41, 0xed, 0x0a, 0x79, 0xe1, 0x34, 0x5a, 0x3d, 0xa8, 0x4a, 0x86, 0x9a, 0xb2, 0x94, 0x68, 0xcb, 0x00, 0x7b, 0x6c, 0xab, 0x36, 0x21, 0x2b, 0xa1, 0x0a, 0xea, 0xac, 0xba, 0xbb, 0xb0, 0x77, 0x56, 0xe3, 0xd7, 0x83, 0x5a, 0x2a, 0xd2, 0x84, 0x7b, 0x39, 0x30, 0xff, 0xd6, 0x0a, 0x62, 0x6d, 0xa0, 0xf8, 0x27, 0xf3, 0x23, 0xf3, 0x53, 0xf7, 0x47, 0x9a, 0x7c, 0x55, 0x00, 0xdf, 0x23, 0x5c, 0x35, 0x06, 0x69, 0xf2, 0x55, 0x7e, 0x1a, 0x8f, 0x30, 0x3c, 0x37, 0x0a, 0xf9, 0xe7, 0xaa, 0x88, 0x47, 0xef, 0x2f, 0x3c, 0xd6, 0xb6, 0x87, 0x5b, 0x7a, 0x7f, 0x6d, 0xe3, 0x60, 0xab, 0x7e, 0x8b, 0x4b, 0xb4, 0x06, 0x97, 0x03, 0xea, 0xe8, 0x2a, 0xdc, 0x5e, 0x00, 0xd6, 0x4f, 0x1b, 0xe0, 0x72, 0xd9, 0x4d, 0x55, 0x72, 0xfa, 0x36, 0x67, 0xd1, 0xbc, 0x7d, 0x89, 0xca, 0xf8, 0xf6, 0x35, 0xdf, 0xa2, 0x79, 0x8b, 0xfc, 0xb2, 0xd2, 0xb7, 0xcf, 0x35, 0x5e, 0x74, 0xdf, 0x94, 0xb7, 0x4f, 0x9a, 0x95, 0x89, 0x68, 0xee, 0x5c, 0xc9, 0x7c, 0x44, 0xc1, 0x86, 0x15, 0xce, 0x5e, 0xd2, 0xb7, 0x77, 0x70, 0x49, 0xac, 0xf0, 0x71, 0x26, 0x3e, 0x16, 0x41, 0x9a, 0x19, 0xc4, 0xe0, 0x6d, 0x26, 0xae, 0x03, 0xa2, 0xe4, 0x22, 0x4a, 0xcf, 0x46, 0x7c, 0x36, 0x9e, 0x9d, 0xc5, 0xd7, 0xf7, 0x2c, 0x45, 0xdf, 0x36, 0x41, 0xad, 0x58, 0x74, 0xb0, 0xb5, 0x43, 0x86, 0xb1, 0xb6, 0x5e, 0xa4, 0xf1, 0x2a, 0x42, 0x9b, 0x01, 0xf5, 0xa8, 0xcb, 0x20, 0xce, 0xf7, 0x2d, 0x90, 0xe2, 0x7e, 0xc3, 0x7d, 0xa6, 0x1d, 0x8d, 0xc6, 0x0b, 0xa4, 0x0b, 0xdc, 0xee, 0xe2, 0xfb, 0x05, 0x83, 0xb8, 0x7b, 0xaf, 0x51, 0x5e, 0x21, 0x90, 0xd7, 0x1c, 0xa6, 0xe3, 0x84, 0xf9, 0x6e, 0x00, 0xd0, 0xe3, 0x16, 0x2a, 0xd3, 0xd9, 0x3d, 0x52, 0x11, 0x19, 0x2f, 0xc4, 0xcf, 0x6a, 0x2f, 0x20, 0x76, 0x92, 0xa7, 0x25, 0xe6, 0x72, 0x64, 0x6d, 0x2f, 0x22, 0xb6, 0x51, 0x4f, 0x33, 0xf4, 0xdd, 0xe3, 0xf0, 0x7b, 0xca, 0xec, 0xc9, 0x2b, 0x29, 0x6c, 0x3b, 0x60, 0xc1, 0x6c, 0x31, 0x54, 0x32, 0xfc, 0x66, 0x17, 0x77, 0xa5, 0xa6, 0x84, 0xf5, 0xf9, 0xa4, 0x84, 0x15, 0x62, 0x64, 0x15, 0x02, 0x29, 0x6e, 0x8f, 0x8b, 0x2d, 0x4a, 0x6a, 0x03, 0xdb, 0xd5, 0x1c, 0x95, 0x36, 0xbf, 0x9c, 0x7a, 0xfb, 0x01, 0xe7, 0xd9, 0xb7, 0xd9, 0x8e, 0x5b, 0xbe, 0x9c, 0x6b, 0x59, 0x90, 0x8f, 0x7b, 0xc5, 0x26, 0x46, 0x56, 0x0c, 0x0d, 0x9e, 0xc7, 0xba, 0x93, 0x3d, 0x26, 0xe6, 0x13, 0x3d, 0xf8, 0x47, 0xa4, 0xee, 0x0f, 0xcd, 0x93, 0x9d, 0x45, 0xbf, 0x3e, 0xbe, 0xb2, 0x08, 0x63, 0x63, 0xe3, 0x4e, 0x1e, 0x4b, 0xc9, 0xf9, 0xe1, 0xfe, 0xe4, 0xfc, 0xe8, 0xd1, 0x54, 0xaf, 0xc7, 0xf1, 0xaa, 0xef, 0x06, 0x47, 0xa2, 0xf8, 0x52, 0xe7, 0xbb, 0x97, 0xa6, 0xca, 0x70, 0xdc, 0x6a, 0xc7, 0x1b, 0xd9, 0x98, 0xbc, 0x10, 0xb3, 0xbc, 0xf0, 0x47, 0x98, 0x1f, 0xfe, 0x23, 0xfc, 0xa3, 0x47, 0xcb, 0x34, 0x71, 0xab, 0x7d, 0x88, 0xdf, 0xeb, 0x20, 0x49, 0xa7, 0x9f, 0x83, 0xc6, 0x6b, 0xa3, 0x6c, 0xe6, 0xc5, 0x89, 0x08, 0xbc, 0xfe, 0x26, 0x4b, 0xab, 0xed, 0x9c, 0xa4, 0x68, 0x8b, 0x6d, 0x08, 0x47, 0x5e, 0x89, 0x49, 0x48, 0xef, 0xb9, 0xf3, 0x5e, 0x52, 0xde, 0xed, 0x93, 0x08, 0x47, 0x3b, 0x5b, 0x9f, 0x49, 0x2f, 0x91, 0x7b, 0x25, 0xcf, 0x8a, 0x9a, 0x86, 0xe5, 0xf6, 0xde, 0x33, 0x53, 0x2e, 0x7b, 0x2d, 0x34, 0x15, 0x9f, 0xbd, 0x10, 0x80, 0xe5, 0xb6, 0x78, 0xe2, 0xa6, 0xc4, 0xd5, 0x22, 0x51, 0xd7, 0xf2, 0x80, 0x24, 0x84, 0x63, 0x13, 0x8c, 0x94, 0xeb, 0x8b, 0x96, 0x5a, 0x27, 0xa5, 0xb4, 0xed, 0x81, 0xf0, 0x0a, 0xd3, 0xdb, 0x73, 0xbd, 0x43, 0x1b, 0xb6, 0x27, 0x2f, 0xac, 0x39, 0x80, 0xe5, 0xf8, 0xc6, 0xbc, 0xc7, 0xcf, 0x57, 0xde, 0x29, 0x4f, 0x16, 0xb6, 0xbb, 0x86, 0xf0, 0x6a, 0x8b, 0x07, 0xdf, 0x2c, 0xfe, 0x26, 0xed, 0x89, 0xc4, 0xff, 0xdb, 0x22, 0x84, 0xd7, 0xec, 0xee, 0xbf, 0x72, 0xd0, 0x95, 0xaf, 0x72, 0xbb, 0x1e, 0x07, 0x23, 0x11, 0x8e, 0xeb, 0x5d, 0xec, 0x61, 0x1a, 0x74, 0xa8, 0x58, 0x1c, 0x7a, 0x10, 0xa7, 0xb7, 0xee, 0xcc, 0xcd, 0xd9, 0xfb, 0x8c, 0xcf, 0x38, 0x25, 0xcf, 0x37, 0x8d, 0x47, 0x78, 0x83, 0x7f, 0x4f, 0xfb, 0x0e, 0x65, 0xcf, 0x6c, 0x13, 0x8f, 0x74, 0x3e, 0x88, 0xe5, 0x7c, 0xe5, 0xef, 0xa9, 0x8d, 0xef, 0xf4, 0x14, 0x92, 0x4e, 0x83, 0x7e, 0x40, 0x78, 0x53, 0x7c, 0xaf, 0x7e, 0x12, 0x73, 0x7f, 0x20, 0x36, 0xbe, 0xdd, 0x0f, 0xe1, 0x84, 0x7e, 0x7f, 0x8c, 0x5c, 0x7d, 0x22, 0x2d, 0x3c, 0xe9, 0xe4, 0xa8, 0xfb, 0x58, 0xee, 0x97, 0x0e, 0xda, 0x20, 0x39, 0x5e, 0x1b, 0x28, 0x7e, 0xe2, 0xb0, 0x0c, 0xcb, 0xfd, 0xd5, 0xfd, 0x4f, 0xde, 0x1e, 0x36, 0xda, 0x49, 0x9c, 0x92, 0x6a, 0x8e, 0xe5, 0xbe, 0xeb, 0x2f, 0x3f, 0xd9, 0xaa, 0x8f, 0x8f, 0x10, 0x97, 0x78, 0xff, 0x1b, 0xe1, 0xc4, 0xb7, 0x7d, 0x14, 0xeb, 0x76, 0x1a, 0xa7, 0x4b, 0x46, 0x78, 0xc5, 0x61, 0xb9, 0x7f, 0x70, 0x64, 0xfb, 0x93, 0x33, 0x87, 0xe7, 0x27, 0xcf, 0x9e, 0xf6, 0x29, 0x96, 0xfb, 0xe1, 0x1e, 0x5a, 0x86, 0xde, 0x53, 0xcd, 0xc5, 0xdb, 0x16, 0xb4, 0xc1, 0x72, 0xfe, 0xcb, 0x8e, 0x19, 0x7a, 0x65, 0xca, 0xe4, 0xe4, 0xef, 0x67, 0x76, 0x47, 0xf8, 0xc7, 0xc6, 0x3b, 0x69, 0x87, 0x46, 0x3a, 0xbd, 0x4c, 0x9e, 0xb9, 0x53, 0x8e, 0xe5, 0xfc, 0x95, 0x0d, 0x47, 0x9f, 0x4d, 0xfe, 0x72, 0xaa, 0x64, 0xf8, 0x24, 0x5c, 0xff, 0xb4, 0x9d, 0xfe, 0x47, 0x9f, 0x2f, 0x32, 0xaa, 0x16, 0x5b, 0xbb, 0xf8, 0x20, 0xbc, 0x6f, 0x41, 0xff, 0x9f, 0xd3, 0x5c, 0x6f, 0x3a, 0x25, 0x6d, 0x5d, 0x52, 0x8c, 0xe5, 0xb8, 0x9f, 0xeb, 0x73, 0xf7, 0x9d, 0x3e, 0xe7, 0x93, 0xbf, 0x91, 0xa5, 0x63, 0x39, 0x3e, 0x60, 0xfe, 0xfe, 0x69, 0xfa, 0x1e, 0x73, 0xc4, 0x0f, 0xba, 0x8b, 0xb0, 0xdc, 0xb6, 0x7c, 0x1b, 0x71, 0x23, 0xfd, 0xb3, 0xb8, 0xa4, 0xf0, 0x09, 0xb8, 0x7c, 0x47, 0x8c, 0xf3, 0x4d, 0xd2, 0x8c, 0xad, 0x62, 0x25, 0xe2, 0x29, 0x2b, 0xb0, 0x1c, 0xd6, 0x7e, 0xf3, 0x45, 0x4d, 0x49, 0x60, 0xb4, 0xb8, 0x4f, 0x5d, 0x07, 0x2c, 0x87, 0x1b, 0xd6, 0x3d, 0xb6, 0xbe, 0xfe, 0x5d, 0x9c, 0x44, 0x6b, 0xa5, 0x03, 0x96, 0xab, 0x75, 0x07, 0x86, 0x4c, 0xaa, 0x4b, 0x2c, 0x97, 0xb4, 0x3b, 0x73, 0x19, 0xcb, 0x51, 0xb5, 0xff, 0xe1, 0x0e, 0xae, 0x83, 0xea, 0x93, 0x56, 0xda, 0x94, 0x61, 0x39, 0xa8, 0xbb, 0x2b, 0xc9, 0xcf, 0xd0, 0x31, 0x37, 0xb9, 0xa7, 0x2a, 0x1c, 0xcb, 0xb1, 0x4e, 0x5b, 0x8e, 0x2d, 0x98, 0x2d, 0x8a, 0x4e, 0x36, 0x78, 0x8b, 0xdb, 0x2b, 0xcf, 0x76, 0xe8, 0xc5, 0xa0, 0xf0, 0x78, 0xbf, 0x64, 0xb7, 0xfb, 0x6e, 0x08, 0x9f, 0x19, 0x7c, 0xb9, 0xc8, 0x6a, 0x73, 0xa0, 0x6e, 0xd2, 0x83, 0x0e, 0x0b, 0x11, 0x3e, 0x3b, 0xc5, 0xc6, 0x78, 0xb4, 0x4e, 0x51, 0xb1, 0x44, 0xdc, 0x71, 0x2a, 0xc2, 0xe7, 0x56, 0xcf, 0x39, 0xbf, 0xef, 0xe4, 0xa1, 0x00, 0x71, 0x9e, 0xb3, 0x1d, 0xb6, 0x83, 0x4f, 0x66, 0xc7, 0x84, 0xda, 0x7f, 0xbe, 0x3b, 0x59, 0xb6, 0x56, 0x0b, 0xe1, 0x4b, 0x2f, 0x4d, 0x1b, 0x2b, 0x66, 0x2d, 0x0a, 0x10, 0x57, 0xc6, 0xe1, 0xfe, 0xbc, 0x6a, 0xb5, 0xaa, 0xa3, 0x38, 0x5a, 0xf9, 0x24, 0x31, 0xf4, 0xab, 0x27, 0x08, 0x17, 0x7e, 0xfb, 0x45, 0xd1, 0xef, 0x3d, 0x3f, 0x8b, 0x17, 0xdf, 0xb9, 0x85, 0xc7, 0xe3, 0x8d, 0xd4, 0x2e, 0xeb, 0xfe, 0xb4, 0x79, 0x12, 0x90, 0x3c, 0xef, 0x15, 0x1e, 0xbf, 0xb7, 0xde, 0xf8, 0xef, 0xbb, 0xf6, 0xaa, 0x56, 0x92, 0xb4, 0xa7, 0xa4, 0x1b, 0xc2, 0x77, 0x3d, 0xeb, 0x2f, 0xde, 0xd9, 0x11, 0x5c, 0xd9, 0xb5, 0x6c, 0xab, 0x3d, 0xc2, 0xbf, 0xec, 0xe8, 0x78, 0x7a, 0xfe, 0x81, 0xbb, 0x47, 0x25, 0x4b, 0x3c, 0xf0, 0xf8, 0xfd, 0xb5, 0xee, 0xf8, 0xe6, 0xa2, 0x8a, 0x7e, 0xbe, 0x92, 0xae, 0xa7, 0xdb, 0x22, 0x5c, 0xa2, 0xa8, 0x8c, 0x1c, 0x6f, 0xb4, 0xce, 0x2a, 0x71, 0xe5, 0xc3, 0xb9, 0x08, 0x97, 0x5e, 0x2e, 0x79, 0x69, 0x13, 0xff, 0x50, 0x24, 0xd1, 0xb2, 0xfd, 0x17, 0xc2, 0x8f, 0x65, 0xcb, 0x67, 0xe5, 0xac, 0xf0, 0x1f, 0x21, 0xd1, 0x7e, 0xf0, 0x16, 0xe1, 0xdf, 0x4e, 0xea, 0x3c, 0x5d, 0x14, 0xe5, 0x95, 0xda, 0x75, 0x56, 0xe5, 0x02, 0x84, 0xcb, 0xfb, 0x07, 0x8f, 0x70, 0xf9, 0x57, 0xf1, 0x54, 0xf1, 0x2c, 0x7b, 0x29, 0xc2, 0xcf, 0x73, 0x0b, 0x9e, 0xde, 0xb7, 0xea, 0xef, 0x90, 0xdc, 0xe9, 0xd9, 0x20, 0x84, 0x5f, 0x0d, 0x77, 0xe8, 0xfa, 0x4b, 0x7c, 0xcf, 0x68, 0xb1, 0xdc, 0xe2, 0x1b, 0x84, 0x7f, 0x7f, 0x72, 0x72, 0x5b, 0x71, 0xd1, 0xdb, 0xcb, 0x49, 0x27, 0xd3, 0x1e, 0x23, 0x5c, 0x11, 0xf1, 0x9d, 0xcb, 0x58, 0xf5, 0x21, 0x27, 0xc9, 0x9c, 0xa1, 0x78, 0x3c, 0xbd, 0xfd, 0xec, 0x87, 0x8e, 0x56, 0x31, 0x97, 0x6d, 0xc5, 0xdf, 0x39, 0x77, 0x46, 0xf8, 0x5d, 0xe1, 0x83, 0xd9, 0xfa, 0xd7, 0x07, 0x9c, 0x10, 0x37, 0xc6, 0xdd, 0x46, 0xb8, 0x36, 0xea, 0xf0, 0xaf, 0xb3, 0x6c, 0xb4, 0x5c, 0x92, 0xdd, 0x5e, 0xe1, 0xfc, 0x1a, 0x5c, 0x0d, 0x0d, 0x2b, 0x63, 0xf2, 0xe6, 0x88, 0x97, 0xca, 0x9c, 0xd1, 0x2a, 0x8b, 0xa4, 0x37, 0x5c, 0x27, 0x73, 0xa0, 0xf0, 0xc4, 0xfb, 0xca, 0x04, 0xba, 0x68, 0xfd, 0x84, 0x92, 0xcc, 0xf0, 0xd0, 0x94, 0x19, 0xe4, 0x8c, 0x21, 0x8e, 0x4f, 0x22, 0x99, 0xe5, 0xe2, 0x69, 0xe9, 0x7e, 0x62, 0xef, 0x00, 0x24, 0xdd, 0x38, 0x2d, 0xc1, 0xaf, 0x42, 0xa0, 0x00, 0x1e, 0xb5, 0x75, 0xc7, 0x2a, 0x04, 0x72, 0x1c, 0x0f, 0xc3, 0x7b, 0xa8, 0x64, 0xcf, 0x96, 0xdf, 0xcc, 0x43, 0xfe, 0x93, 0x97, 0x11, 0x3a, 0xb0, 0xd7, 0x07, 0x2e, 0xa8, 0xd3, 0xc1, 0x91, 0x32, 0xb4, 0x4a, 0x5a, 0x66, 0xf5, 0x9e, 0x05, 0xd7, 0x4d, 0x6f, 0xcb, 0xda, 0x0a, 0x2c, 0xd9, 0x91, 0x2f, 0x8e, 0xca, 0x43, 0x28, 0x41, 0x9c, 0x8f, 0x19, 0x84, 0x73, 0x92, 0x1a, 0xe6, 0x37, 0x68, 0x97, 0x8b, 0x6e, 0xec, 0x46, 0x24, 0x0d, 0x6b, 0x6f, 0x61, 0xdf, 0xdb, 0x1d, 0x44, 0x1b, 0xe8, 0x86, 0xfc, 0x42, 0xf8, 0xb5, 0xf1, 0xd8, 0x2f, 0x84, 0x65, 0xa7, 0xcb, 0x20, 0xa9, 0x0c, 0x7b, 0xd4, 0x04, 0xbb, 0x38, 0xa9, 0x2e, 0xad, 0xe8, 0xec, 0xa5, 0x24, 0xe9, 0x73, 0x32, 0xdc, 0xd8, 0x13, 0x1d, 0x4b, 0x51, 0x64, 0xd4, 0x27, 0x62, 0x8a, 0x0e, 0x17, 0x33, 0x24, 0xd2, 0x04, 0x10, 0xf9, 0x8a, 0x6a, 0x6c, 0x55, 0x50, 0x21, 0x2a, 0x54, 0xd2, 0x55, 0x9d, 0xc6, 0x6b, 0xad, 0x0a, 0x50, 0xab, 0x1c, 0x5e, 0x14, 0x1a, 0xf4, 0xde, 0xf6, 0x10, 0xd0, 0xf6, 0xa8, 0xdd, 0xf3, 0xbe, 0xf6, 0x40, 0xe7, 0x1e, 0x45, 0x6c, 0xc8, 0x50, 0xfb, 0xe2, 0x96, 0xc1, 0xbe, 0x2c, 0x5c, 0x13, 0xec, 0xcb, 0x42, 0xd7, 0xa0, 0xf3, 0x0a, 0xd0, 0x78, 0xc3, 0x47, 0x34, 0x1d, 0xe6, 0x6a, 0x19, 0x8e, 0xf3, 0x36, 0xb1, 0x17, 0x09, 0xb1, 0xc7, 0x10, 0x6c, 0x46, 0x4b, 0x76, 0x93, 0x38, 0xb3, 0xd8, 0x13, 0xcb, 0x28, 0xab, 0xee, 0xbc, 0xfe, 0x6c, 0x60, 0xfd, 0x39, 0x9e, 0xeb, 0x4f, 0xed, 0xd3, 0x1d, 0xc3, 0xf0, 0x19, 0x61, 0x48, 0x6b, 0xe5, 0x27, 0xe5, 0xae, 0x79, 0xfd, 0xa1, 0x72, 0x37, 0xef, 0xc1, 0x1a, 0x07, 0xda, 0x83, 0xa8, 0xcc, 0xfc, 0x5e, 0xec, 0x3f, 0x42, 0x6f, 0x21, 0xbf, 0x17, 0x61, 0xaf, 0x06, 0xa3, 0x5e, 0xac, 0xe9, 0x8a, 0x7a, 0xb1, 0x46, 0xd2, 0x4a, 0x0f, 0x5a, 0xa2, 0x7c, 0x3c, 0xdd, 0x50, 0x5f, 0xe2, 0xd4, 0xd0, 0xd5, 0x30, 0xb7, 0x41, 0x29, 0x32, 0x2e, 0xea, 0x0f, 0xdc, 0x94, 0xa0, 0x79, 0x7b, 0x31, 0x0d, 0x89, 0x8e, 0x24, 0xdc, 0xcb, 0x5e, 0x38, 0x2d, 0xec, 0xa9, 0x94, 0x85, 0x59, 0x54, 0xf4, 0xf0, 0x54, 0x42, 0x69, 0x4e, 0xbc, 0x9a, 0xe8, 0x3a, 0x63, 0x2f, 0xdc, 0x5e, 0xa0, 0xaf, 0x61, 0x04, 0x52, 0x48, 0x42, 0xcc, 0xe0, 0x15, 0x52, 0x78, 0x05, 0x3c, 0xaf, 0xd1, 0x2f, 0x81, 0x19, 0x1e, 0x3d, 0x68, 0xc4, 0x68, 0x38, 0x89, 0x0e, 0xc8, 0x8d, 0x12, 0x69, 0x06, 0x37, 0x6f, 0x42, 0x60, 0x4e, 0xd0, 0xce, 0x99, 0x61, 0x0b, 0x4b, 0x26, 0x80, 0x25, 0x6b, 0x5a, 0x33, 0xdc, 0xd6, 0x78, 0x84, 0x09, 0x35, 0xfa, 0xa3, 0x34, 0x10, 0x9f, 0x77, 0xf6, 0xb5, 0xac, 0x0e, 0x69, 0x95, 0x8b, 0xf3, 0xcb, 0x72, 0x23, 0x13, 0x5d, 0x37, 0x14, 0xf3, 0xd9, 0x72, 0x7d, 0x67, 0x49, 0x35, 0x4c, 0x7b, 0x87, 0x8b, 0xa9, 0x58, 0x6b, 0x86, 0xad, 0xde, 0xbb, 0x7d, 0x64, 0x1c, 0xd2, 0xd2, 0xfb, 0xdc, 0xed, 0x23, 0x21, 0xad, 0x82, 0xcf, 0x4b, 0xfb, 0x6e, 0xa8, 0x88, 0x40, 0x3a, 0xe4, 0xbb, 0x5c, 0x76, 0x16, 0xb6, 0xee, 0xbb, 0x4c, 0x7c, 0x2e, 0xab, 0xc9, 0xb9, 0x63, 0xf8, 0xdc, 0x89, 0x26, 0xe7, 0x0e, 0xa3, 0x78, 0xf4, 0xbb, 0xa3, 0xec, 0x1c, 0xfa, 0x15, 0x79, 0xed, 0x42, 0x23, 0x81, 0xf4, 0x0d, 0xd4, 0x48, 0xb1, 0x1e, 0xca, 0xb5, 0x90, 0x88, 0xb4, 0x6f, 0xb7, 0x35, 0x52, 0x11, 0xb7, 0x57, 0x02, 0xd4, 0xa5, 0xa3, 0x11, 0xab, 0xe2, 0xed, 0x8c, 0xa0, 0xba, 0x52, 0xb7, 0xf9, 0xe8, 0x5b, 0x5c, 0x85, 0xee, 0x3a, 0xd7, 0x55, 0x82, 0xf6, 0xda, 0x72, 0x34, 0x92, 0x46, 0x80, 0x19, 0x42, 0xee, 0x69, 0xc5, 0x81, 0xc3, 0xe6, 0xa2, 0x38, 0xf4, 0xa2, 0x7a, 0x4f, 0x39, 0xa5, 0xd1, 0xf3, 0x88, 0x07, 0xc8, 0x97, 0xa8, 0x21, 0x9f, 0x11, 0xbe, 0xbf, 0x2d, 0x16, 0xdf, 0xdf, 0xb6, 0x6a, 0xa0, 0x1c, 0xdb, 0x2c, 0xb0, 0x4d, 0xa7, 0x37, 0x4f, 0xe5, 0x98, 0xe2, 0xe2, 0x92, 0xba, 0xa6, 0x5a, 0x4f, 0x4b, 0xad, 0x11, 0xad, 0x7d, 0xa1, 0xee, 0x48, 0xe3, 0x6b, 0xaa, 0x19, 0xd6, 0xde, 0xe0, 0x34, 0x43, 0xae, 0xe6, 0x12, 0x31, 0xea, 0x01, 0x57, 0xa6, 0xe3, 0x73, 0xbd, 0x0c, 0xdb, 0x01, 0xd5, 0x49, 0xa2, 0xc4, 0xeb, 0xc5, 0x91, 0x50, 0x17, 0xac, 0x3b, 0x3a, 0xfb, 0x5a, 0x67, 0x66, 0xe0, 0xef, 0x83, 0xcd, 0x52, 0x5d, 0x44, 0x52, 0x85, 0xa9, 0xb1, 0xfe, 0x86, 0x63, 0xcc, 0x1f, 0xa7, 0xe1, 0x82, 0xbf, 0x4d, 0x9b, 0xef, 0x2b, 0xa1, 0xad, 0x27, 0xe9, 0xa3, 0x29, 0x3d, 0xf2, 0xd3, 0xf3, 0xca, 0x3f, 0x09, 0xe5, 0xea, 0xf5, 0x54, 0x29, 0x27, 0x39, 0xa1, 0x3b, 0x68, 0xd4, 0xea, 0xba, 0x52, 0x5a, 0x03, 0xb2, 0xc7, 0x77, 0xe8, 0x03, 0xa1, 0x80, 0x5b, 0x09, 0x88, 0x6d, 0x87, 0x23, 0x0f, 0xda, 0x12, 0xa9, 0x1e, 0xd3, 0xbf, 0x51, 0x0b, 0x89, 0xbd, 0xa4, 0x44, 0x07, 0xc7, 0xa5, 0xe3, 0xf4, 0x70, 0x71, 0x32, 0x57, 0x3f, 0x74, 0x3c, 0x94, 0xd6, 0xf1, 0xe4, 0x45, 0x7b, 0xbc, 0x77, 0xce, 0xde, 0x05, 0xf1, 0x6b, 0xd2, 0x41, 0xad, 0x0e, 0xd3, 0x40, 0x57, 0x34, 0xab, 0x7f, 0x4d, 0xcb, 0xfa, 0x8b, 0xbd, 0x48, 0x0e, 0xae, 0xe8, 0xbb, 0x4b, 0x51, 0xf3, 0xfd, 0x31, 0x70, 0x2d, 0x8a, 0xe6, 0xc7, 0x99, 0xa0, 0x35, 0x32, 0x07, 0xe9, 0xfa, 0xf7, 0xaf, 0x42, 0xdb, 0x2b, 0x18, 0x59, 0x9b, 0xf0, 0x8a, 0x00, 0xb2, 0x16, 0xea, 0x44, 0x20, 0x6f, 0x39, 0xe6, 0xc8, 0xc0, 0xf3, 0x2b, 0x80, 0x8c, 0x8c, 0x66, 0x7d, 0x70, 0x5e, 0x53, 0x06, 0xd2, 0x1a, 0x28, 0x82, 0x89, 0xe2, 0xf0, 0xc4, 0x62, 0x23, 0x7b, 0x9f, 0xf0, 0xec, 0x97, 0x90, 0x19, 0xdc, 0xf5, 0x20, 0xb1, 0x2e, 0xd0, 0x1e, 0x2a, 0xb4, 0xba, 0xae, 0xd8, 0x09, 0xf3, 0x5e, 0xff, 0x57, 0x79, 0x93, 0x14, 0x5b, 0xe6, 0x5f, 0x3d, 0x9f, 0xe6, 0x8f, 0xaf, 0xe0, 0xa4, 0x8e, 0x7e, 0x04, 0x8a, 0xc3, 0x56, 0x08, 0x3c, 0x51, 0x3c, 0x2a, 0x19, 0x51, 0x88, 0x3d, 0x04, 0xcf, 0x80, 0xe6, 0xa3, 0xad, 0xab, 0xa4, 0xa5, 0x45, 0xda, 0xa5, 0x51, 0x63, 0x79, 0x6b, 0x38, 0x09, 0xd6, 0x8f, 0x50, 0xd2, 0xf1, 0x24, 0x20, 0xf2, 0xa3, 0x4b, 0x09, 0xfa, 0xfe, 0x34, 0x04, 0x7b, 0x27, 0x67, 0x75, 0x7a, 0x77, 0xfd, 0xda, 0xf7, 0xc4, 0xdb, 0xc4, 0x4d, 0x96, 0x25, 0x28, 0x0e, 0x0c, 0x3f, 0xb2, 0xd3, 0xde, 0x5b, 0x7f, 0x7e, 0xa2, 0x6d, 0xa0, 0x3a, 0x3b, 0xfa, 0xe7, 0xe8, 0x55, 0xc7, 0x7f, 0x45, 0xd1, 0x8b, 0x84, 0x1f, 0x96, 0x39, 0xa8, 0xae, 0xc1, 0x8a, 0x84, 0x2d, 0xde, 0x2c, 0x23, 0x51, 0x8c, 0xdd, 0xaa, 0x52, 0xcc, 0xa6, 0x2b, 0xeb, 0xe4, 0xbb, 0x69, 0xff, 0xdd, 0xa2, 0x3b, 0x32, 0x97, 0x99, 0xa7, 0x1b, 0x95, 0xe7, 0x4a, 0x65, 0x93, 0xbc, 0xad, 0xd6, 0xaf, 0xbc, 0xac, 0x96, 0x2d, 0x47, 0xd1, 0x91, 0x8d, 0x2f, 0x65, 0x3f, 0x13, 0x6b, 0x85, 0x3e, 0x04, 0x5f, 0xb6, 0xa5, 0x99, 0x55, 0x82, 0xbc, 0x89, 0x5a, 0xd5, 0xed, 0x4b, 0x65, 0xca, 0x46, 0x8c, 0xdf, 0xc1, 0x96, 0x14, 0x7c, 0xe5, 0x17, 0xe5, 0x32, 0x84, 0x79, 0x67, 0x6b, 0x2d, 0x6d, 0x2b, 0x46, 0x75, 0x58, 0x91, 0x4b, 0xf7, 0x3e, 0x64, 0x9f, 0xbf, 0xe7, 0xba, 0x3f, 0xf6, 0xb6, 0x37, 0xa5, 0x57, 0x29, 0x06, 0x26, 0xb4, 0x0f, 0xd2, 0x2a, 0xa2, 0xbb, 0xef, 0xb6, 0x57, 0x0e, 0xbc, 0xf6, 0xf6, 0x79, 0x83, 0x17, 0xa5, 0x57, 0x9c, 0xbc, 0xe3, 0xd5, 0xbe, 0xe7, 0x8e, 0xc9, 0x94, 0x5e, 0x64, 0xf6, 0x22, 0xf6, 0xd2, 0xea, 0x2a, 0xe6, 0x4d, 0xfd, 0xdd, 0xee, 0xb8, 0x38, 0xbf, 0xef, 0x28, 0x27, 0x16, 0x4d, 0xe9, 0x71, 0x7c, 0xee, 0x27, 0x77, 0xdb, 0x7a, 0x50, 0xfa, 0x8b, 0xec, 0xc3, 0x3f, 0xe6, 0x4d, 0xdc, 0xbe, 0x8a, 0xd2, 0x53, 0xef, 0xf5, 0xaf, 0x76, 0xc8, 0xab, 0x63, 0xf9, 0x97, 0x4f, 0x4e, 0x5f, 0x38, 0x4f, 0x6b, 0xe7, 0x66, 0x4a, 0x2f, 0xb0, 0xb0, 0x3b, 0xb4, 0xea, 0x97, 0xb6, 0xfb, 0x29, 0xfd, 0xb7, 0xcf, 0x12, 0x6c, 0xde, 0x19, 0xc6, 0x1a, 0x51, 0xfa, 0xa3, 0x8a, 0xdd, 0x0b, 0x4a, 0x9c, 0xcd, 0x0f, 0x50, 0xfa, 0xc3, 0xfa, 0xf9, 0x46, 0xe2, 0x73, 0xca, 0x47, 0x94, 0xae, 0x0e, 0x5c, 0xbe, 0xe6, 0xc1, 0xe8, 0xdb, 0x23, 0x29, 0xbd, 0xe4, 0x59, 0xc0, 0xd0, 0xe4, 0x7e, 0x99, 0x5f, 0xd3, 0x68, 0xc0, 0xea, 0x93, 0x63, 0xd2, 0x16, 0x0e, 0x14, 0xb0, 0xfa, 0xfd, 0xfa, 0x62, 0xe2, 0xeb, 0xeb, 0xdb, 0xc7, 0xfa, 0x51, 0xfa, 0xb6, 0xb5, 0x0f, 0x41, 0xe5, 0xc2, 0x9d, 0x25, 0x94, 0xfe, 0x8b, 0xe0, 0xb0, 0x56, 0xa0, 0xce, 0x79, 0x23, 0x4a, 0x4f, 0xeb, 0x67, 0xdf, 0xa5, 0xdd, 0xce, 0xec, 0x4e, 0x94, 0x7e, 0xa7, 0xa7, 0x12, 0xfd, 0xb7, 0xa5, 0xf4, 0x63, 0x07, 0x97, 0x38, 0x5d, 0x8d, 0x7b, 0x32, 0x9d, 0xd2, 0x6f, 0x4e, 0x6d, 0xe7, 0xa8, 0x84, 0x5f, 0x94, 0x7e, 0xa6, 0x41, 0xab, 0x87, 0x8e, 0x57, 0x74, 0x04, 0xa5, 0x17, 0x1e, 0x4b, 0xba, 0x74, 0xc3, 0xaf, 0x9d, 0x01, 0x8b, 0x7e, 0x74, 0x29, 0x55, 0x77, 0xdc, 0x67, 0x7e, 0x91, 0xd2, 0xaf, 0x9a, 0xad, 0xf8, 0xee, 0x33, 0x5d, 0xc3, 0x87, 0x94, 0x5e, 0x62, 0xfa, 0xc5, 0xce, 0x90, 0xa0, 0x43, 0x23, 0x28, 0xfd, 0xd2, 0xb2, 0xcf, 0x73, 0x27, 0x9f, 0xd9, 0x50, 0x4a, 0xe9, 0xcf, 0x1f, 0x1a, 0xf8, 0xff, 0x50, 0xbc, 0xe2, 0x3e, 0xa5, 0x5f, 0x68, 0x5b, 0x34, 0x6c, 0x99, 0xf1, 0xe0, 0xfd, 0x2c, 0x1a, 0xb2, 0x34, 0x74, 0xfc, 0xa3, 0x0b, 0x87, 0xd7, 0x51, 0x7a, 0x41, 0x82, 0xe1, 0x34, 0x25, 0xfc, 0xa2, 0xd1, 0x81, 0x48, 0x81, 0xed, 0x8f, 0x7b, 0x22, 0x75, 0xee, 0x52, 0x7a, 0x7e, 0x3f, 0xfb, 0xa5, 0xe3, 0x22, 0x87, 0xee, 0x61, 0xd1, 0x12, 0xdb, 0x09, 0x57, 0x66, 0x8d, 0x49, 0x3d, 0x4b, 0xe9, 0x79, 0x4f, 0x4e, 0xdd, 0xde, 0x58, 0xf5, 0x6c, 0x08, 0xa5, 0xaf, 0xf1, 0x2c, 0x30, 0x18, 0x7a, 0xed, 0x2e, 0x6b, 0x3f, 0x55, 0xb2, 0x7d, 0xb9, 0x41, 0xad, 0x50, 0x4d, 0xe9, 0xf1, 0x3e, 0x85, 0x89, 0x95, 0x5f, 0x5a, 0x54, 0x51, 0x7a, 0xf6, 0x34, 0xd1, 0x90, 0xb6, 0x41, 0x16, 0x2c, 0x7a, 0xb1, 0xd5, 0xf5, 0xe5, 0xad, 0x33, 0xcf, 0xf7, 0x1c, 0xa6, 0xf4, 0x53, 0xae, 0x4f, 0xbb, 0xfd, 0xf8, 0xef, 0x58, 0x56, 0xbe, 0xe4, 0x6e, 0xd1, 0x7d, 0xbf, 0x94, 0x75, 0x29, 0xa7, 0xf4, 0x93, 0xdd, 0x3c, 0x6a, 0x1d, 0xdf, 0x96, 0xda, 0xb1, 0x68, 0x4c, 0x45, 0xfd, 0xbe, 0x53, 0x67, 0x75, 0x8a, 0x28, 0xfd, 0x78, 0xfb, 0x53, 0xfe, 0x9d, 0x73, 0x1c, 0xc7, 0x52, 0xfa, 0xbe, 0x23, 0x27, 0x32, 0x6d, 0x6e, 0x4e, 0xfa, 0x91, 0x45, 0x17, 0xf4, 0xca, 0x56, 0x6c, 0x8b, 0x8f, 0x14, 0x53, 0xfa, 0xa1, 0xc0, 0x4e, 0x1b, 0xaf, 0xba, 0xa4, 0x2d, 0xa4, 0xf4, 0x23, 0xed, 0xbf, 0x1d, 0xb5, 0xbc, 0xd3, 0x79, 0x03, 0x4a, 0x3f, 0xae, 0x3d, 0x77, 0xe4, 0xb8, 0xf6, 0x9f, 0x4e, 0x64, 0xd1, 0x0a, 0xf1, 0xcd, 0x13, 0x06, 0xc6, 0x0d, 0x2e, 0x94, 0x9e, 0xb5, 0xd1, 0xa6, 0xf1, 0xf9, 0xc0, 0x0e, 0x0f, 0x29, 0xfd, 0x80, 0xf3, 0xfd, 0x02, 0xe5, 0x01, 0xe7, 0x12, 0x16, 0xed, 0x31, 0x5b, 0x53, 0x58, 0xe9, 0x97, 0xe9, 0x43, 0xe9, 0xfb, 0x15, 0x3d, 0xfd, 0xf4, 0xef, 0x08, 0x8f, 0x51, 0xfa, 0xb9, 0xd8, 0xca, 0xfe, 0x47, 0xcc, 0x06, 0xfc, 0x49, 0xe9, 0xfb, 0xd6, 0x4e, 0x7b, 0x14, 0x35, 0xf6, 0x8a, 0x31, 0xa5, 0x5f, 0x7e, 0x99, 0xae, 0xab, 0xd2, 0x1e, 0x33, 0x8e, 0xd2, 0xd3, 0xce, 0xfb, 0x0c, 0x49, 0x5e, 0x32, 0xc6, 0x89, 0xd2, 0x6f, 0xb8, 0x6b, 0x2f, 0xeb, 0x75, 0x6f, 0xa4, 0x82, 0xd2, 0x53, 0xf5, 0x95, 0xe8, 0x3f, 0x2b, 0xff, 0xdd, 0xe5, 0xde, 0xeb, 0x07, 0x9c, 0xf1, 0x5b, 0x41, 0xe9, 0x7b, 0x46, 0xe7, 0xf7, 0xef, 0xb5, 0x70, 0x76, 0x2a, 0xa5, 0x17, 0x9f, 0xce, 0x3f, 0x9a, 0xb0, 0xac, 0xe8, 0x32, 0xa5, 0xef, 0x4e, 0xbb, 0xd6, 0x65, 0x53, 0x54, 0xbf, 0x91, 0x94, 0xfe, 0xf0, 0x75, 0xb6, 0xeb, 0x8c, 0xe0, 0xe9, 0x89, 0x94, 0xbe, 0x4b, 0x67, 0xbc, 0x2c, 0x63, 0x51, 0x61, 0x29, 0xa5, 0x3f, 0x6d, 0x37, 0x3f, 0xc0, 0x3e, 0xe9, 0x9b, 0x62, 0x4a, 0xdf, 0x39, 0xbd, 0xb7, 0x5d, 0x6a, 0x7d, 0xbf, 0x1f, 0x28, 0xfd, 0xa5, 0xb8, 0xbf, 0xed, 0xc8, 0xef, 0x2b, 0xa2, 0x28, 0x3d, 0xe9, 0x9e, 0x5e, 0x83, 0x32, 0xe9, 0x9e, 0x3e, 0xa5, 0xff, 0x69, 0x25, 0xbf, 0xf9, 0x78, 0xa2, 0x43, 0x19, 0xa5, 0x27, 0x0e, 0xdd, 0x6f, 0x79, 0x7f, 0x82, 0xb3, 0x84, 0xd2, 0xab, 0x3e, 0xbd, 0xba, 0xbe, 0x6f, 0x10, 0x38, 0xc5, 0xa2, 0x4d, 0xe7, 0x1f, 0x2a, 0xce, 0xd4, 0x75, 0x66, 0xd1, 0xb9, 0x3a, 0x3d, 0xf1, 0xcd, 0x88, 0x41, 0x5c, 0x34, 0x01, 0xd2, 0xb7, 0x0d, 0x0d, 0x4b, 0xfc, 0xc3, 0xd9, 0x65, 0x2f, 0xa5, 0xab, 0x9f, 0x85, 0xbb, 0xab, 0x76, 0x9f, 0x66, 0xeb, 0xcb, 0x96, 0xbb, 0xd2, 0xa2, 0xec, 0xdf, 0xd6, 0xea, 0x50, 0x1c, 0x39, 0xbe, 0xfe, 0x95, 0xb7, 0xe3, 0x06, 0x07, 0x8a, 0x13, 0xa6, 0x9e, 0xd7, 0x8b, 0x59, 0xa5, 0x4c, 0xa0, 0x38, 0xfa, 0xcc, 0x82, 0x05, 0x27, 0xd3, 0xda, 0x5c, 0x60, 0xd1, 0x2f, 0x81, 0x9d, 0x30, 0x40, 0xfb, 0x04, 0x8b, 0x6e, 0x2d, 0x93, 0x0e, 0xb5, 0x5b, 0x13, 0x38, 0xe1, 0x38, 0xc5, 0x1b, 0x93, 0x3f, 0x9b, 0xaa, 0xe7, 0x2f, 0xfc, 0x9a, 0xe2, 0xe5, 0x0b, 0x57, 0xa5, 0x27, 0xfd, 0xf0, 0x88, 0xa5, 0x17, 0x3f, 0x48, 0x89, 0xfe, 0x0f, 0xa6, 0x78, 0xe5, 0xb5, 0xd1, 0x25, 0xf9, 0x57, 0xda, 0x34, 0x52, 0xbc, 0xfe, 0xcf, 0x0e, 0xd1, 0xda, 0x9b, 0x63, 0xb7, 0x53, 0xbc, 0xa6, 0x4b, 0x6e, 0xdd, 0xf2, 0x87, 0x9f, 0xfd, 0xc6, 0xa2, 0x71, 0x29, 0x47, 0xf2, 0x6f, 0x97, 0x55, 0xb3, 0xfc, 0xe3, 0x82, 0xca, 0x56, 0x6d, 0xfc, 0x26, 0x64, 0x1b, 0xc3, 0xfe, 0x4e, 0xdf, 0xba, 0xea, 0xe4, 0xb3, 0x68, 0xd6, 0xfa, 0xbd, 0x25, 0x73, 0xce, 0xe5, 0x8c, 0x2d, 0xa5, 0x78, 0x6d, 0xa7, 0xef, 0x7f, 0x69, 0x38, 0x93, 0xd2, 0x99, 0x95, 0xe7, 0x99, 0xaa, 0xaa, 0x63, 0xf4, 0x18, 0xb6, 0x7e, 0xaf, 0x2e, 0x1a, 0x25, 0xec, 0x37, 0xcd, 0x8b, 0xa5, 0xbf, 0xd9, 0x72, 0xe7, 0x71, 0x49, 0x07, 0x77, 0x2d, 0x16, 0x1d, 0x4c, 0xd9, 0xae, 0x3d, 0xd9, 0xb4, 0xd4, 0x92, 0xb5, 0xa7, 0xdf, 0x96, 0xf3, 0x71, 0x2f, 0x96, 0xc7, 0xb1, 0xfa, 0x84, 0xf7, 0xf5, 0xe9, 0xb0, 0xed, 0x9c, 0x3f, 0xeb, 0x8f, 0xd8, 0xec, 0xbd, 0xce, 0x03, 0x33, 0x58, 0xf4, 0x6e, 0x85, 0x7b, 0x75, 0xf8, 0x98, 0x69, 0xbf, 0xb2, 0xfa, 0xef, 0x38, 0x2a, 0x1d, 0xae, 0x7e, 0xd8, 0x71, 0x11, 0x6b, 0x2f, 0x8b, 0x73, 0xce, 0xcf, 0x22, 0xb6, 0xb1, 0xf5, 0x2e, 0xa9, 0xa8, 0xb8, 0xfb, 0xca, 0x05, 0x26, 0x6c, 0x7e, 0x2f, 0x7b, 0xa7, 0x44, 0xff, 0xab, 0xd9, 0x78, 0xab, 0x57, 0x77, 0xba, 0x3a, 0x7b, 0xc0, 0x2d, 0x16, 0xcd, 0xfc, 0xa5, 0x8d, 0xe7, 0x82, 0xbe, 0xe9, 0x05, 0x6c, 0x3c, 0x5b, 0x24, 0xae, 0xf5, 0x1d, 0x5c, 0x97, 0x44, 0xf1, 0x52, 0x55, 0xbf, 0x89, 0xb6, 0xaf, 0x5d, 0x58, 0x7b, 0xed, 0xf9, 0xe2, 0xca, 0xe2, 0x29, 0x33, 0xaf, 0xac, 0x64, 0xfd, 0x9d, 0x56, 0x73, 0x5e, 0xd7, 0x27, 0x69, 0x07, 0x9b, 0x4f, 0x5e, 0x89, 0x0a, 0x03, 0x0f, 0xff, 0xf1, 0x14, 0x47, 0x6d, 0x71, 0x18, 0x25, 0xcb, 0xf9, 0x62, 0x2a, 0xc5, 0x7b, 0xc7, 0x5a, 0xba, 0x5c, 0xde, 0x9d, 0xcd, 0xe4, 0x5b, 0xe4, 0x2a, 0x55, 0xce, 0xc9, 0x64, 0x09, 0x8b, 0x2e, 0xa6, 0x4f, 0x9e, 0x91, 0x31, 0xfd, 0xb2, 0xf7, 0x52, 0x8a, 0x23, 0xa2, 0x57, 0xa7, 0xd6, 0xfe, 0x71, 0xe3, 0x3b, 0x8a, 0x33, 0x66, 0xac, 0x79, 0xac, 0x38, 0x65, 0xc5, 0xd2, 0x53, 0x92, 0x7f, 0x4c, 0x5e, 0x1c, 0x9c, 0xb9, 0x39, 0xc5, 0x65, 0x70, 0x81, 0x2f, 0xd5, 0xcf, 0x39, 0x6f, 0x83, 0x2f, 0xa7, 0xff, 0x8d, 0x80, 0x5a, 0x16, 0x4f, 0xdf, 0xa7, 0x7b, 0x85, 0x04, 0x91, 0x50, 0x27, 0x6b, 0xfc, 0xe3, 0x87, 0x19, 0xfa, 0x48, 0x37, 0x8b, 0x75, 0x0b, 0x83, 0x82, 0xb4, 0x34, 0xa2, 0x34, 0x82, 0xec, 0x5c, 0xb9, 0x01, 0x6d, 0x6e, 0xb7, 0x5a, 0x68, 0xcd, 0x08, 0xe4, 0xca, 0x5e, 0x8b, 0x90, 0x2f, 0x04, 0xa6, 0x12, 0xaa, 0x8e, 0x55, 0xc7, 0x0b, 0x33, 0x1a, 0xb1, 0x45, 0x09, 0x32, 0x04, 0xf8, 0x17, 0x6a, 0x4d, 0xf1, 0xc2, 0x08, 0x14, 0x7a, 0x43, 0xdc, 0xe5, 0x11, 0xd7, 0xf3, 0x88, 0x4e, 0xc5, 0x71, 0xc5, 0x61, 0xcb, 0x13, 0xc5, 0x44, 0xe2, 0xb0, 0x15, 0x26, 0xf2, 0x42, 0x3b, 0x76, 0x77, 0x55, 0x9d, 0xc7, 0xf6, 0x31, 0xd0, 0x63, 0x5e, 0x7e, 0x3d, 0xe4, 0x7d, 0xc0, 0xfb, 0x9d, 0xaa, 0x2e, 0x43, 0x4b, 0xca, 0xb2, 0xea, 0x2a, 0x8e, 0x30, 0x14, 0xe2, 0x68, 0xc3, 0x0d, 0x62, 0xbb, 0xb6, 0xc3, 0xde, 0x7d, 0x4c, 0x97, 0x42, 0x3a, 0x3c, 0x77, 0x1d, 0x69, 0x82, 0x22, 0x4c, 0x21, 0x7b, 0x7f, 0xa5, 0x30, 0x87, 0xa6, 0x16, 0x16, 0xb3, 0x23, 0x4d, 0x6d, 0x2a, 0x5c, 0xfc, 0x9c, 0x80, 0xa0, 0x22, 0x0f, 0x1a, 0xac, 0xf3, 0xc9, 0xee, 0x2a, 0xcf, 0xd4, 0xaa, 0x61, 0x68, 0x4f, 0x74, 0x95, 0x17, 0xbc, 0x3e, 0x05, 0x5b, 0x26, 0x38, 0x2a, 0xf2, 0xbe, 0x08, 0x44, 0x95, 0x02, 0x47, 0x49, 0x26, 0xf1, 0x23, 0x10, 0x55, 0x01, 0xb8, 0x3c, 0xe3, 0xf9, 0x11, 0x88, 0x2a, 0x3f, 0x5e, 0x04, 0x82, 0x94, 0xc6, 0xb2, 0x69, 0x69, 0x3a, 0x60, 0xbf, 0xb7, 0x89, 0xa8, 0xd7, 0x22, 0xa8, 0x09, 0x6e, 0x57, 0xfb, 0x7a, 0x3d, 0x95, 0x81, 0xee, 0x22, 0x6b, 0xd8, 0x63, 0x36, 0xd6, 0x40, 0xd7, 0x3d, 0xd2, 0x27, 0x3a, 0xa8, 0xaf, 0x75, 0x1b, 0xf7, 0xa5, 0x73, 0x24, 0xee, 0x31, 0xaf, 0xf2, 0x15, 0xe0, 0x55, 0xfa, 0xad, 0x98, 0x5e, 0x1e, 0xb0, 0x5d, 0x3d, 0x61, 0x4f, 0x0e, 0x52, 0xaf, 0xf2, 0x8c, 0x24, 0x3b, 0x81, 0x50, 0x5b, 0x0f, 0x7d, 0x00, 0xea, 0xd1, 0xbd, 0xbb, 0x0a, 0xd0, 0x68, 0x48, 0xae, 0xb6, 0xd2, 0x79, 0x95, 0x6e, 0xd7, 0xe6, 0xd5, 0x7e, 0xcf, 0x18, 0x1d, 0x14, 0x85, 0x93, 0xbc, 0x3c, 0x10, 0xbb, 0xec, 0xaf, 0xb9, 0x1b, 0xae, 0x72, 0x16, 0x33, 0xf2, 0xd5, 0x3b, 0xbd, 0xdd, 0x5d, 0xb1, 0x1e, 0x98, 0x36, 0x8f, 0x1f, 0x98, 0xdc, 0xe1, 0x8f, 0x31, 0xae, 0x15, 0xa5, 0x6f, 0x75, 0x89, 0xcd, 0x31, 0x10, 0x8d, 0x91, 0x18, 0xa4, 0x49, 0x93, 0x71, 0x06, 0x47, 0x55, 0x11, 0x1a, 0x67, 0x48, 0xf7, 0x6f, 0x48, 0x41, 0x23, 0x2d, 0x17, 0x5a, 0xb8, 0x0d, 0x09, 0xdc, 0xd8, 0x03, 0xc0, 0x82, 0x8c, 0xbe, 0x50, 0xdc, 0x8b, 0xb0, 0x07, 0x60, 0x5a, 0x95, 0x59, 0xb0, 0x1e, 0xf3, 0x5a, 0x1f, 0x6d, 0x2c, 0x4a, 0xe1, 0xec, 0x09, 0x2a, 0xeb, 0x5b, 0x8e, 0xb1, 0xe6, 0xa3, 0x11, 0xa7, 0x49, 0x7a, 0x54, 0xea, 0x56, 0x5b, 0xf9, 0x08, 0x8e, 0x4e, 0x67, 0x4f, 0x65, 0x65, 0x10, 0xac, 0xeb, 0x3c, 0x9c, 0xc6, 0x88, 0x8f, 0x4a, 0x43, 0x8a, 0xd2, 0x80, 0xfc, 0x29, 0x1c, 0x7f, 0x57, 0xc8, 0xef, 0xc8, 0xcd, 0x24, 0x11, 0x4e, 0x07, 0xb7, 0x13, 0x7e, 0xaa, 0xac, 0x29, 0xc2, 0x6f, 0xea, 0x19, 0xb6, 0xc3, 0xdf, 0xee, 0xad, 0xc4, 0x5a, 0xc6, 0xc0, 0x96, 0x34, 0xe7, 0x46, 0x17, 0xda, 0xf7, 0x2e, 0xe5, 0x47, 0x0d, 0x79, 0x51, 0x1d, 0x64, 0x21, 0x0a, 0x9a, 0xda, 0x40, 0x8d, 0xfe, 0x2d, 0xed, 0x40, 0x62, 0x69, 0x1a, 0x3b, 0xe2, 0x54, 0x79, 0xd1, 0x97, 0xf6, 0xe9, 0xe8, 0x7c, 0xfb, 0x45, 0xf8, 0x3b, 0x13, 0x49, 0xbc, 0x92, 0x6f, 0xee, 0xa5, 0xf5, 0xb3, 0x9e, 0xc9, 0xe2, 0xcf, 0x27, 0xf6, 0x0e, 0xe8, 0x11, 0xd0, 0xe9, 0x8f, 0x2c, 0x72, 0x27, 0x2b, 0x54, 0x7c, 0x05, 0x30, 0x0d, 0x27, 0x34, 0x4f, 0x3a, 0x8c, 0x90, 0x8a, 0x60, 0x2f, 0xc5, 0xa1, 0xdc, 0xb1, 0x4d, 0x9c, 0x82, 0x23, 0x3d, 0xc8, 0xe6, 0x3e, 0x81, 0xeb, 0x75, 0x07, 0xd3, 0xc3, 0x29, 0xbd, 0xa1, 0x2f, 0xa3, 0x27, 0x60, 0x7a, 0x01, 0xa6, 0x8f, 0x90, 0xc2, 0x31, 0x1d, 0x64, 0x27, 0x65, 0x2d, 0x10, 0x24, 0xed, 0x23, 0xe2, 0xef, 0x94, 0x43, 0x77, 0x0f, 0x9b, 0x3c, 0x21, 0x16, 0x96, 0x9c, 0xb4, 0xdb, 0x22, 0x96, 0xa7, 0x1d, 0x4b, 0x13, 0xdf, 0x99, 0x20, 0xc2, 0xef, 0x70, 0x34, 0xc2, 0x39, 0xab, 0xab, 0xe8, 0x55, 0xf5, 0x99, 0xec, 0x2a, 0xd2, 0xe2, 0x43, 0xe5, 0xc1, 0x1b, 0x86, 0xeb, 0x7d, 0xbf, 0x6b, 0xa6, 0x6c, 0xb6, 0x67, 0x87, 0x11, 0x49, 0x4a, 0xa0, 0xba, 0x02, 0x40, 0x6e, 0xb7, 0x1d, 0x79, 0x45, 0x5b, 0x86, 0xdf, 0x00, 0xdc, 0xbe, 0xdb, 0x0d, 0xe3, 0x56, 0xdf, 0xdf, 0x9b, 0x9a, 0xce, 0x74, 0xf7, 0x26, 0xb6, 0xdc, 0x98, 0xbc, 0x19, 0x61, 0x0b, 0x0b, 0x0f, 0xcb, 0x22, 0x8c, 0x4d, 0x1c, 0x6c, 0x67, 0xda, 0xb6, 0x88, 0x40, 0x95, 0xb6, 0xdc, 0xd7, 0x4b, 0x6d, 0x31, 0xd9, 0x6c, 0x25, 0x3f, 0x42, 0x34, 0x5b, 0x96, 0xf3, 0xee, 0x22, 0x2f, 0x42, 0x74, 0x57, 0x96, 0x5d, 0x9d, 0xc6, 0x8b, 0x10, 0x0d, 0x96, 0x65, 0xdd, 0xbd, 0xc0, 0x8b, 0x10, 0x75, 0x54, 0x65, 0x97, 0x17, 0xf1, 0x23, 0x44, 0xb2, 0xec, 0xf2, 0x00, 0x5e, 0x84, 0xe8, 0x73, 0x59, 0xce, 0xa9, 0x3f, 0x79, 0x11, 0xa2, 0xad, 0xb2, 0x53, 0xca, 0x8b, 0xbc, 0x08, 0xd1, 0x53, 0x55, 0x66, 0xd4, 0x6c, 0x5e, 0x84, 0xa8, 0x4c, 0x95, 0xb3, 0x29, 0x9c, 0x1f, 0x21, 0x92, 0x65, 0x1f, 0x07, 0xfc, 0x08, 0x91, 0x2c, 0xe7, 0xf5, 0x41, 0x5e, 0x84, 0xc8, 0x51, 0x76, 0xaa, 0x61, 0x06, 0x3f, 0x42, 0xa4, 0xca, 0x3e, 0xd2, 0x99, 0x17, 0x21, 0x9a, 0x28, 0xcb, 0xce, 0xec, 0xc9, 0x8f, 0x10, 0xc9, 0x72, 0xd6, 0xdd, 0xe6, 0x45, 0x88, 0xc2, 0x64, 0x39, 0xab, 0xfd, 0x79, 0x11, 0xa2, 0xc9, 0xaa, 0xac, 0x92, 0x85, 0xbc, 0x08, 0x51, 0x7f, 0x55, 0x4e, 0xe6, 0x01, 0x5e, 0x84, 0x68, 0xa4, 0x2a, 0x3b, 0xa6, 0x88, 0x17, 0x21, 0xca, 0x50, 0xe5, 0xe4, 0xdc, 0xe7, 0x45, 0x88, 0x4e, 0xcb, 0xb2, 0x2e, 0x84, 0xf2, 0x22, 0x44, 0x9d, 0x55, 0x39, 0x17, 0x0c, 0x78, 0x11, 0xa2, 0x44, 0xd9, 0xa9, 0xeb, 0xbf, 0xf2, 0x22, 0x44, 0xcf, 0x65, 0x59, 0xbf, 0xbd, 0xe0, 0x45, 0x88, 0x82, 0x55, 0x39, 0xa7, 0xe7, 0xf0, 0x23, 0x44, 0xb2, 0x9c, 0x54, 0x17, 0x5e, 0x84, 0xa8, 0x9f, 0x2c, 0xe7, 0x12, 0xe0, 0x45, 0x88, 0x0a, 0x64, 0x39, 0x1b, 0x04, 0xbc, 0x08, 0xd1, 0x5c, 0x55, 0x76, 0xd4, 0x14, 0x7e, 0x84, 0x48, 0x95, 0xf3, 0xc7, 0x04, 0x5e, 0x84, 0x68, 0xb9, 0x2c, 0xbb, 0xce, 0x85, 0x1f, 0x21, 0x92, 0xe5, 0x1c, 0xae, 0xe3, 0x45, 0x88, 0xd6, 0xc9, 0x32, 0x1f, 0x5d, 0xe2, 0x45, 0x88, 0x9e, 0xc9, 0xb2, 0x8a, 0x5d, 0x78, 0x11, 0xa2, 0x3a, 0x59, 0xce, 0xb3, 0xbd, 0xbc, 0x08, 0x91, 0x4a, 0x95, 0x93, 0xd1, 0xc0, 0x8b, 0x10, 0x45, 0xa9, 0xb2, 0x54, 0x23, 0x79, 0x11, 0xa2, 0x31, 0xb2, 0x9c, 0xea, 0x15, 0xbc, 0x08, 0x51, 0x5b, 0x59, 0x76, 0xd4, 0x61, 0x5e, 0x84, 0xe8, 0x3e, 0x1c, 0x5f, 0xfb, 0x78, 0x11, 0xa2, 0x71, 0xaa, 0xec, 0xba, 0x4e, 0xbc, 0x08, 0xd1, 0x2e, 0x55, 0x4e, 0xa3, 0x0b, 0x2f, 0x42, 0x34, 0x4e, 0x75, 0xea, 0x58, 0x35, 0x3f, 0x42, 0xa4, 0xca, 0x7a, 0xfd, 0x15, 0x2f, 0x42, 0xb4, 0x51, 0x95, 0xbd, 0x3b, 0x83, 0x17, 0x21, 0xf2, 0x97, 0x65, 0xad, 0xb3, 0xe2, 0x45, 0x88, 0xc4, 0xb0, 0xbe, 0x1e, 0xfc, 0x08, 0x91, 0x2c, 0xbb, 0x6c, 0x2b, 0x2f, 0x42, 0x74, 0x4c, 0x75, 0x22, 0x6b, 0x22, 0x2f, 0x42, 0x34, 0x5a, 0x96, 0x5d, 0x25, 0xe2, 0x47, 0x88, 0x54, 0xd9, 0x2b, 0x1f, 0xf2, 0x22, 0x44, 0xc6, 0xb2, 0xcc, 0x4b, 0x26, 0xbc, 0x08, 0xd1, 0x48, 0xd9, 0xa9, 0x6d, 0x8d, 0xfc, 0x08, 0x91, 0x2c, 0xab, 0xa2, 0x92, 0x1f, 0x21, 0x92, 0xe5, 0x54, 0xd8, 0xf3, 0x22, 0x44, 0xf6, 0xaa, 0x6c, 0x95, 0x0f, 0x3f, 0x42, 0x24, 0xcb, 0xc9, 0xb5, 0xe0, 0x45, 0x88, 0x2e, 0xc9, 0x72, 0x56, 0xa5, 0xf3, 0x22, 0x44, 0xce, 0xaa, 0xac, 0x53, 0x32, 0x7e, 0x84, 0x08, 0xce, 0x57, 0x67, 0x5e, 0x84, 0xe8, 0xa4, 0xea, 0xc4, 0xf1, 0x8d, 0xbc, 0x08, 0x91, 0x33, 0x6c, 0xff, 0x7f, 0xf1, 0x22, 0x44, 0x73, 0x55, 0x39, 0x6f, 0x23, 0x50, 0x1c, 0xa4, 0xd5, 0x9d, 0x24, 0x27, 0xb9, 0x9d, 0x24, 0xc8, 0xf7, 0xd5, 0x4e, 0x99, 0x8b, 0x76, 0x92, 0x80, 0x45, 0x9c, 0xef, 0x6c, 0x97, 0x3b, 0x5a, 0xa5, 0xd1, 0x3d, 0x69, 0xbe, 0xf6, 0x42, 0x8f, 0xda, 0xba, 0xac, 0x0a, 0x3b, 0x39, 0x3c, 0x46, 0x3e, 0x79, 0xb2, 0x6b, 0x04, 0xc8, 0xd0, 0xae, 0xef, 0x97, 0x91, 0x52, 0xe1, 0xa3, 0x88, 0xf8, 0x08, 0xb2, 0xd7, 0x97, 0xf3, 0x67, 0xef, 0x42, 0x6e, 0xc3, 0x5e, 0x63, 0xa1, 0x54, 0x1f, 0x0b, 0xa5, 0xfa, 0x58, 0xf5, 0xaa, 0x81, 0x63, 0xb1, 0xef, 0xdd, 0x1a, 0xfe, 0xc6, 0xbb, 0x87, 0xaa, 0x37, 0x21, 0x99, 0x76, 0x33, 0x14, 0xdd, 0xf5, 0xe5, 0x65, 0x59, 0x27, 0x85, 0x47, 0x71, 0x0a, 0xa8, 0x75, 0x71, 0x7b, 0x41, 0x4c, 0x9a, 0xc7, 0x6c, 0x0c, 0x4c, 0x34, 0x72, 0x9b, 0x44, 0xb3, 0xf4, 0xcf, 0xe3, 0x6f, 0x0b, 0xee, 0x4a, 0xec, 0xdd, 0x92, 0x8a, 0x40, 0x04, 0x5c, 0xe6, 0x04, 0xd4, 0x13, 0xa6, 0x5f, 0xfc, 0x57, 0xf5, 0x56, 0xa3, 0xbd, 0x1e, 0x06, 0xdb, 0xda, 0xa2, 0x7a, 0x73, 0xda, 0x14, 0xd4, 0xf2, 0x6a, 0x27, 0x69, 0x6a, 0x5d, 0x5b, 0xf0, 0xd1, 0xb5, 0x06, 0x6d, 0x00, 0xe6, 0xb6, 0x45, 0xf5, 0xc6, 0x91, 0x31, 0x1b, 0x5a, 0x7b, 0xae, 0xe6, 0xb0, 0x05, 0x74, 0x9b, 0xb4, 0x00, 0xaa, 0x7d, 0xad, 0x29, 0x6a, 0x07, 0xd4, 0x02, 0xfc, 0xdd, 0x2e, 0xb5, 0x5d, 0xf1, 0xbe, 0x75, 0x09, 0x7f, 0xb7, 0x4b, 0xad, 0x05, 0x8e, 0x9d, 0x7d, 0xda, 0xe4, 0x9c, 0x59, 0x93, 0x48, 0x19, 0x8d, 0x9d, 0xd0, 0xfb, 0xcb, 0xa4, 0x9a, 0xbd, 0xe1, 0x71, 0x00, 0xed, 0xc3, 0xb6, 0x12, 0xf3, 0xe3, 0x13, 0x4d, 0xe3, 0x65, 0x7a, 0x9b, 0x3e, 0xd4, 0x9a, 0x7a, 0x6b, 0xec, 0x05, 0xe5, 0xba, 0x52, 0x20, 0x74, 0x03, 0x5a, 0x42, 0x39, 0x30, 0xf4, 0x92, 0x3b, 0x08, 0xa4, 0x62, 0x1f, 0xc1, 0x14, 0xf4, 0x04, 0x1b, 0xfd, 0x30, 0x13, 0xf8, 0x6d, 0x14, 0xe6, 0x02, 0xbf, 0xed, 0xc3, 0xd0, 0xf3, 0x24, 0x64, 0x61, 0x58, 0x16, 0x1a, 0xec, 0xf5, 0x01, 0x41, 0x86, 0x6e, 0xe4, 0x4d, 0x2b, 0x77, 0x14, 0xe8, 0xf9, 0x60, 0xe8, 0x99, 0xb2, 0xfa, 0xdc, 0x99, 0x42, 0xc5, 0x1c, 0xee, 0xe8, 0x86, 0x22, 0x58, 0x5b, 0x00, 0x0c, 0xe0, 0xd5, 0x22, 0xee, 0xcc, 0x65, 0xf4, 0x34, 0x84, 0x30, 0x5f, 0x85, 0x7f, 0x13, 0x8e, 0x0a, 0x45, 0x39, 0x39, 0x12, 0x58, 0x29, 0x4a, 0x20, 0x87, 0x03, 0xe4, 0x30, 0xe3, 0xce, 0x0c, 0x43, 0xcf, 0x54, 0x08, 0x93, 0xe2, 0xe7, 0xe4, 0x58, 0x29, 0x2c, 0xf8, 0x7c, 0x82, 0x0a, 0xc5, 0x23, 0x72, 0x24, 0x4c, 0x55, 0xdc, 0x03, 0x19, 0xf0, 0x57, 0x57, 0x1d, 0x78, 0xba, 0x1e, 0xd5, 0x03, 0xa6, 0xa0, 0x5b, 0xe1, 0x50, 0xa8, 0x14, 0x81, 0x61, 0x73, 0xbd, 0xe4, 0x03, 0xc3, 0x45, 0x70, 0x5c, 0xf4, 0x0a, 0x17, 0x69, 0xab, 0xe3, 0xe1, 0xb7, 0xae, 0x3a, 0x41, 0x0a, 0xf0, 0x13, 0xfb, 0xe2, 0xdc, 0xa7, 0x02, 0x21, 0x8a, 0x3e, 0x4c, 0xc2, 0x71, 0xc5, 0x61, 0x73, 0x47, 0xd6, 0xf3, 0xef, 0x8f, 0xe1, 0x1d, 0xf7, 0xe5, 0x9f, 0xc7, 0x7e, 0x22, 0xc9, 0xd6, 0xe8, 0xba, 0x6b, 0xef, 0x12, 0xd0, 0xf9, 0xfd, 0xd5, 0xbe, 0x7e, 0x29, 0xa7, 0x7c, 0xb6, 0xf2, 0xb5, 0x9b, 0xe6, 0x9a, 0x0f, 0x93, 0xdb, 0x7f, 0xcd, 0x7b, 0xea, 0x23, 0x78, 0xb7, 0xf0, 0x78, 0xb7, 0x7d, 0x54, 0xbe, 0x3c, 0x7d, 0x83, 0xaf, 0x8b, 0xf0, 0xf5, 0x08, 0x74, 0x6f, 0x4e, 0x32, 0x3d, 0x6e, 0x03, 0xc0, 0x79, 0x7a, 0x0c, 0x9b, 0x7d, 0x3b, 0xe7, 0x04, 0x96, 0x43, 0x4b, 0x3d, 0x27, 0x4b, 0x42, 0x8e, 0xfb, 0x42, 0x19, 0xff, 0xc9, 0x05, 0x15, 0xda, 0x9d, 0x26, 0x9f, 0x06, 0xe5, 0xeb, 0xd9, 0xfd, 0xa9, 0x3d, 0xc3, 0x7f, 0x4e, 0x94, 0xdf, 0x04, 0xe0, 0xf4, 0x7c, 0xb1, 0xb7, 0xfa, 0xda, 0x9e, 0xdb, 0x6e, 0xa9, 0x30, 0xaf, 0xcc, 0x21, 0x17, 0x94, 0xcf, 0x56, 0x95, 0x7a, 0x8c, 0x84, 0xf6, 0xe9, 0xe2, 0x17, 0x75, 0x3b, 0x6a, 0x4a, 0xd6, 0x0c, 0x86, 0x16, 0xe9, 0xe3, 0xce, 0xc9, 0x19, 0x7b, 0x8c, 0xd6, 0x9d, 0xfb, 0xb7, 0x17, 0x6c, 0xdb, 0x79, 0x73, 0x63, 0x22, 0xe6, 0x1a, 0x76, 0xf2, 0x5f, 0x0f, 0xe5, 0xf2, 0xca, 0x01, 0xe3, 0xce, 0x0e, 0x1c, 0xf7, 0xdb, 0xdc, 0xcf, 0x00, 0xc8, 0x57, 0x8c, 0x12, 0xae, 0x90, 0x6c, 0xde, 0xc6, 0x2b, 0xff, 0x3e, 0x5e, 0xf9, 0xcd, 0xfe, 0x07, 0xe5, 0xdf, 0xf1, 0x9e, 0xf2, 0x3f, 0xe0, 0x95, 0x7f, 0x35, 0xaf, 0xfc, 0x05, 0xef, 0x29, 0xff, 0x13, 0x5e, 0xf9, 0xb7, 0xfe, 0x3f, 0x6a, 0xff, 0x3b, 0x7f, 0xb3, 0xfd, 0xcd, 0xdf, 0xd7, 0xfe, 0xf6, 0xa0, 0x4f, 0x0f, 0x00, 0xbe, 0x79, 0x4d, 0xe2, 0xcf, 0x4b, 0xd4, 0xbc, 0x27, 0x5b, 0xab, 0xa1, 0xce, 0x9d, 0x6b, 0x28, 0x97, 0x1b, 0x42, 0xbb, 0x6a, 0x77, 0x85, 0xb5, 0x97, 0x16, 0xb2, 0x29, 0x14, 0xec, 0x29, 0x35, 0x3e, 0x3d, 0x80, 0xf6, 0xf4, 0xf1, 0xf6, 0x60, 0xe0, 0x34, 0x6c, 0xd7, 0x4f, 0xc3, 0xde, 0x81, 0x69, 0xc8, 0x3b, 0x80, 0xec, 0x40, 0x34, 0xfb, 0x14, 0x99, 0x9e, 0xca, 0xc2, 0xa4, 0x0a, 0xbb, 0x42, 0x68, 0xff, 0x1a, 0xca, 0x73, 0x05, 0x21, 0x8e, 0x48, 0xbb, 0x96, 0xe2, 0x38, 0x95, 0xb6, 0x52, 0xad, 0xce, 0x15, 0x78, 0x2a, 0x61, 0x13, 0x48, 0x42, 0xf4, 0x4b, 0xd3, 0xdc, 0x7f, 0xb2, 0x17, 0xb8, 0xff, 0xa4, 0xb0, 0x86, 0x75, 0x96, 0x94, 0xa6, 0xa1, 0x63, 0x88, 0x2c, 0x2a, 0x7a, 0x14, 0xe2, 0x3b, 0x78, 0xe2, 0x80, 0x0e, 0x2c, 0x8f, 0x97, 0x1c, 0x5e, 0x85, 0xb9, 0xed, 0x01, 0x77, 0x1f, 0x2d, 0x8b, 0x5c, 0x69, 0x5f, 0x95, 0x88, 0xf3, 0xbc, 0x61, 0x99, 0x00, 0x8a, 0xe1, 0x6b, 0xad, 0x42, 0xe7, 0xb4, 0xf2, 0x51, 0x19, 0x83, 0xcd, 0x98, 0x7d, 0xa3, 0x55, 0xd1, 0xc3, 0x8b, 0x7b, 0xef, 0x87, 0x76, 0xa2, 0x44, 0x2c, 0xf1, 0xc6, 0xd1, 0xf9, 0x47, 0xcd, 0xef, 0xee, 0x70, 0xb7, 0x53, 0x4f, 0xb6, 0x47, 0xdf, 0x01, 0x0a, 0x43, 0x72, 0x8c, 0xef, 0xb5, 0x09, 0x40, 0xd6, 0xb5, 0x23, 0x6c, 0x9f, 0x81, 0x1e, 0x6a, 0x3f, 0x61, 0x14, 0x6a, 0x2d, 0x6a, 0x69, 0xfb, 0x44, 0x05, 0xb9, 0x74, 0xc7, 0x77, 0xe2, 0x40, 0x8b, 0xdb, 0x0c, 0x59, 0xdc, 0xda, 0xc8, 0x13, 0xc9, 0xac, 0xee, 0x4d, 0x31, 0x0a, 0x29, 0x39, 0xde, 0x14, 0xd3, 0xd2, 0xa6, 0x56, 0xe8, 0xe8, 0x44, 0x21, 0x5e, 0x07, 0x58, 0xfa, 0x81, 0x72, 0xb5, 0x7f, 0x1f, 0x3b, 0xb5, 0xdf, 0xa1, 0x08, 0xd4, 0x1f, 0x38, 0xfe, 0x3e, 0x5e, 0xa8, 0x44, 0x79, 0x49, 0x61, 0x5d, 0xac, 0x7a, 0xc0, 0xbc, 0x94, 0x41, 0x2e, 0x12, 0x92, 0x57, 0x44, 0x90, 0x99, 0x54, 0xe8, 0x1e, 0x89, 0x9f, 0x8a, 0x83, 0xf2, 0xca, 0x83, 0x79, 0xa5, 0xc5, 0x91, 0xbc, 0xe0, 0x71, 0x5c, 0xcc, 0xab, 0x34, 0x3b, 0xe1, 0xab, 0xbd, 0x9a, 0xbc, 0x22, 0x51, 0x5e, 0x28, 0xa2, 0xd4, 0x08, 0xed, 0x78, 0x5f, 0x7b, 0x10, 0x17, 0xe5, 0x1e, 0xe3, 0x1e, 0x25, 0xc5, 0x76, 0xb8, 0x8f, 0x32, 0x44, 0x47, 0x22, 0x86, 0xeb, 0x7e, 0xb0, 0xdf, 0x5a, 0x9f, 0x98, 0x50, 0xa3, 0xc3, 0xd1, 0x41, 0xba, 0x47, 0x97, 0x06, 0xa1, 0x1d, 0xab, 0x8e, 0x93, 0x75, 0xe3, 0x97, 0x6e, 0x88, 0x76, 0x8f, 0x19, 0x15, 0xe5, 0xa3, 0x9c, 0x62, 0x74, 0x27, 0xea, 0x56, 0xe4, 0xe3, 0x75, 0xa3, 0x0b, 0x46, 0x2d, 0xff, 0x4a, 0xa9, 0xb8, 0x85, 0x9e, 0x18, 0xf7, 0xde, 0x92, 0x7c, 0x4a, 0x8e, 0xa7, 0x9b, 0xb6, 0x56, 0x16, 0x43, 0x78, 0xb5, 0x5b, 0x63, 0x88, 0x0d, 0xac, 0x73, 0x5c, 0x2f, 0x37, 0xb8, 0x86, 0xbb, 0xab, 0x13, 0x6c, 0x61, 0x6a, 0x03, 0x07, 0x6b, 0x7c, 0x0c, 0xd8, 0xbb, 0x10, 0x87, 0xdb, 0x7f, 0x9c, 0xc2, 0x91, 0x5e, 0xa5, 0x8d, 0xeb, 0x80, 0xf8, 0xd0, 0xf5, 0xda, 0x31, 0xb8, 0x46, 0x83, 0x39, 0x5f, 0x44, 0x1c, 0x9f, 0x1f, 0xf6, 0xdf, 0x38, 0x1f, 0xd8, 0x93, 0x53, 0xa4, 0xe8, 0xca, 0xaf, 0x62, 0x0e, 0xc6, 0xcc, 0x30, 0xe7, 0xd7, 0x0d, 0x2c, 0x98, 0xac, 0x4b, 0x76, 0xdb, 0x8e, 0x8a, 0x72, 0xb1, 0x53, 0xfb, 0x87, 0xa0, 0x7d, 0xb2, 0x16, 0xee, 0x31, 0xf0, 0x78, 0xfc, 0x62, 0xdd, 0xd7, 0x19, 0xa8, 0x9f, 0xc1, 0x92, 0x98, 0x98, 0x2e, 0x1e, 0xea, 0xc9, 0xc8, 0xc7, 0x41, 0xc6, 0x12, 0x4c, 0x71, 0xdc, 0x14, 0x11, 0x8d, 0x1c, 0x37, 0xe0, 0xdd, 0x9d, 0xc2, 0xa1, 0x78, 0x84, 0x71, 0xe3, 0x4b, 0xe8, 0x3a, 0x2a, 0x0a, 0xd5, 0x0f, 0xe8, 0x86, 0x68, 0x3f, 0xdc, 0xa7, 0x10, 0xba, 0x47, 0x21, 0x69, 0xcd, 0x8d, 0xae, 0x71, 0x50, 0x87, 0x89, 0xb7, 0xd5, 0x12, 0xa2, 0x96, 0x10, 0xa0, 0xb7, 0x4e, 0xaa, 0x63, 0x48, 0xee, 0xfa, 0x31, 0xb8, 0xcf, 0x07, 0xab, 0xfd, 0xd1, 0x1b, 0xaf, 0x50, 0x44, 0x53, 0xcd, 0xfd, 0xf3, 0x81, 0xe3, 0x6e, 0xba, 0x09, 0x4a, 0x03, 0x45, 0x05, 0x41, 0x86, 0x10, 0x68, 0x8b, 0x50, 0x8c, 0x1d, 0x9d, 0x51, 0xe3, 0x33, 0xfa, 0xdc, 0x19, 0xe4, 0xe5, 0x90, 0x28, 0xd5, 0x81, 0x15, 0xce, 0x70, 0xde, 0xe5, 0x20, 0x0c, 0x0b, 0x01, 0xd4, 0x81, 0x0a, 0x5d, 0x74, 0xa4, 0x6f, 0xad, 0x0e, 0x94, 0x7a, 0x41, 0xdd, 0x40, 0x00, 0x72, 0x83, 0x8c, 0x50, 0xaa, 0xc1, 0xe6, 0xba, 0xaf, 0x81, 0x16, 0xa4, 0x8b, 0xec, 0xf5, 0x10, 0xfe, 0x26, 0x0f, 0xbf, 0x2d, 0x60, 0x93, 0x74, 0x02, 0x92, 0x9d, 0xe8, 0xc9, 0x51, 0x42, 0xf4, 0xb4, 0x59, 0xe1, 0xb0, 0xb9, 0xef, 0x9f, 0xe9, 0x01, 0x85, 0x68, 0x54, 0x29, 0x00, 0x7e, 0xb2, 0x6e, 0x74, 0x04, 0xd2, 0x16, 0xed, 0x0a, 0xe5, 0xea, 0x68, 0x92, 0x3b, 0xca, 0xd3, 0x47, 0xc4, 0xa5, 0xeb, 0x8a, 0x77, 0xfa, 0x70, 0x77, 0xd3, 0x69, 0xe8, 0x23, 0x09, 0x55, 0xd2, 0x92, 0x2a, 0xf2, 0x52, 0x07, 0x9a, 0xe0, 0xf2, 0x4e, 0x09, 0x80, 0xe5, 0xd3, 0x9e, 0x6e, 0x35, 0x70, 0x2a, 0x2e, 0x07, 0xcf, 0x1f, 0x89, 0xca, 0xe1, 0xf5, 0x34, 0x17, 0x3f, 0xb3, 0x32, 0xc0, 0x73, 0xe8, 0x03, 0x81, 0x16, 0xd4, 0x2c, 0xe4, 0xb0, 0x7e, 0xa9, 0x40, 0x37, 0xc8, 0x14, 0x72, 0xb5, 0x0d, 0x32, 0x52, 0x74, 0x45, 0xfe, 0x03, 0xf2, 0x5c, 0xbc, 0x29, 0x26, 0x58, 0xaf, 0x60, 0xad, 0x62, 0x02, 0xf3, 0xd0, 0xd4, 0x7d, 0x42, 0xf7, 0x2e, 0x72, 0xd8, 0x7e, 0x2d, 0x4a, 0x82, 0xae, 0x22, 0xe5, 0x9c, 0xa0, 0xdd, 0xf2, 0x8a, 0x37, 0x9f, 0xfb, 0xd8, 0x03, 0xe1, 0x74, 0x3b, 0x2e, 0xde, 0x1f, 0x0f, 0x8c, 0x2a, 0x22, 0x80, 0x29, 0x08, 0x85, 0xda, 0x4b, 0x10, 0xe2, 0xd7, 0xc5, 0x7a, 0x0c, 0xf7, 0xde, 0xeb, 0x40, 0x76, 0x1e, 0xff, 0xa2, 0x34, 0x0d, 0x32, 0x08, 0x27, 0x4b, 0xe9, 0x39, 0x97, 0x12, 0x48, 0x05, 0x11, 0x19, 0xa4, 0x67, 0x49, 0x5b, 0x41, 0xbd, 0x4e, 0x54, 0x8e, 0xde, 0x51, 0xd7, 0x5e, 0x29, 0x90, 0x82, 0xc7, 0x7a, 0x5d, 0x16, 0x02, 0x7d, 0x75, 0xa0, 0x5b, 0x9d, 0x99, 0x64, 0xd8, 0x5c, 0x6d, 0x6d, 0x6d, 0x40, 0x3f, 0xf8, 0x7e, 0x45, 0x43, 0x5d, 0x43, 0xfa, 0xf9, 0x07, 0x0f, 0xa6, 0x11, 0x60, 0x5d, 0x23, 0xa2, 0x99, 0xaf, 0xe2, 0xa3, 0xb0, 0x80, 0x61, 0x17, 0x41, 0x53, 0xfa, 0xc7, 0x63, 0xdd, 0xff, 0xca, 0xd3, 0x75, 0x94, 0x1f, 0x8f, 0x05, 0xad, 0xd1, 0x55, 0x11, 0x1f, 0x83, 0x05, 0xef, 0xa5, 0x67, 0x09, 0x3e, 0x16, 0xeb, 0xb6, 0x4a, 0xc7, 0x6b, 0x80, 0x88, 0xae, 0x23, 0x64, 0x1c, 0x91, 0x15, 0x40, 0x49, 0xb0, 0x21, 0xc2, 0x58, 0x06, 0x3e, 0x57, 0xdc, 0xd3, 0x5c, 0x8d, 0x56, 0x0c, 0xfc, 0x36, 0x74, 0xde, 0x7a, 0x01, 0xb1, 0x7e, 0x8b, 0xab, 0x77, 0x2b, 0x0a, 0xf1, 0x2f, 0xa8, 0xcb, 0x52, 0x14, 0xe0, 0x23, 0x33, 0x45, 0x0e, 0xfe, 0x35, 0xa2, 0xb6, 0x06, 0x5c, 0xbd, 0xb8, 0x54, 0x54, 0x24, 0x15, 0x3c, 0xa6, 0xf9, 0xf7, 0x4f, 0xf2, 0xef, 0x9d, 0xe4, 0x78, 0xb9, 0x5d, 0xd9, 0xea, 0x22, 0x05, 0xa8, 0xff, 0x83, 0xa1, 0x7b, 0x10, 0x3d, 0xa7, 0x3b, 0xc5, 0xf1, 0x4a, 0x24, 0x6a, 0x5a, 0x17, 0x85, 0xbc, 0x69, 0x5d, 0x15, 0x0e, 0x90, 0x4f, 0x59, 0xfb, 0x1c, 0xbf, 0x93, 0xd6, 0x5a, 0x01, 0xea, 0xcc, 0xa0, 0x56, 0xc2, 0x3d, 0x35, 0x03, 0x98, 0x2b, 0x80, 0x96, 0x11, 0x0f, 0xeb, 0xc2, 0xd5, 0xe8, 0x35, 0x7e, 0xd2, 0xbf, 0x1c, 0xb4, 0x75, 0x18, 0x80, 0x9e, 0x1e, 0x0a, 0x27, 0xbc, 0x08, 0x98, 0x03, 0x09, 0xe8, 0x0e, 0x6c, 0x41, 0x1f, 0xe0, 0x04, 0x5c, 0xf1, 0x7b, 0x0c, 0x8a, 0x61, 0x7d, 0xd0, 0x6f, 0x39, 0xfc, 0x85, 0x96, 0x21, 0xfe, 0x56, 0xa2, 0x6f, 0x1d, 0x7c, 0xac, 0x83, 0x8f, 0xdb, 0xe2, 0xe3, 0xb6, 0xf0, 0xd8, 0xc4, 0x4e, 0x3d, 0x1c, 0x3d, 0x13, 0xef, 0x5d, 0x31, 0xf7, 0x5c, 0xb8, 0x4d, 0xc8, 0xfa, 0xc1, 0xef, 0x7e, 0x89, 0x85, 0x47, 0xf8, 0x19, 0xe0, 0xef, 0x72, 0xe1, 0x51, 0x1b, 0xe4, 0x8f, 0x14, 0xca, 0xb1, 0x34, 0xf0, 0xa1, 0x5c, 0xb5, 0x81, 0x98, 0x0b, 0x1d, 0xf9, 0x33, 0xbe, 0x11, 0x94, 0xaf, 0x76, 0x30, 0x3c, 0xd2, 0xc2, 0x7c, 0xe6, 0x98, 0x4f, 0x48, 0xf8, 0xd0, 0x02, 0x43, 0xf8, 0x50, 0xcd, 0x19, 0x9f, 0x39, 0xe1, 0x43, 0xaf, 0xf5, 0xa0, 0x7c, 0x02, 0x7c, 0x37, 0x81, 0xe0, 0xa2, 0x09, 0x6c, 0x4f, 0x11, 0xec, 0xdb, 0x43, 0x02, 0xb8, 0x72, 0x2a, 0xbb, 0xb8, 0xa9, 0x27, 0xfb, 0x80, 0x60, 0xd0, 0x00, 0x35, 0x90, 0x86, 0x42, 0xa2, 0xd3, 0xb4, 0xbc, 0x02, 0x3f, 0xff, 0x6f, 0x38, 0xb4, 0x01, 0x9f, 0xa1, 0x9d, 0x56, 0xf8, 0x8d, 0xdd, 0x05, 0xd8, 0x1f, 0x8a, 0xb5, 0x26, 0x3c, 0x52, 0x78, 0xbb, 0xbb, 0x68, 0x8d, 0xaa, 0x4a, 0x49, 0x3b, 0xa8, 0xd7, 0xd0, 0x72, 0xd5, 0x28, 0x69, 0x7d, 0xaa, 0xf2, 0x59, 0xb9, 0xbc, 0x70, 0xb9, 0xfa, 0x50, 0xae, 0x9a, 0x00, 0xda, 0x0e, 0x35, 0xa3, 0x18, 0x9f, 0x17, 0xe5, 0xab, 0x71, 0x65, 0x7c, 0x22, 0xbc, 0x37, 0xb0, 0x16, 0xf3, 0x01, 0xf5, 0x60, 0x2e, 0x2f, 0x29, 0xe3, 0x31, 0xa5, 0x3c, 0x6a, 0x5b, 0xca, 0x03, 0x8a, 0x31, 0x4f, 0x01, 0xcd, 0xeb, 0x6d, 0x57, 0x9a, 0x57, 0x7d, 0x19, 0xe5, 0x6b, 0xd0, 0xa7, 0x7c, 0x6f, 0x01, 0xe3, 0xdb, 0x8d, 0xf9, 0xd6, 0x50, 0xbe, 0xca, 0x32, 0xc6, 0x97, 0x41, 0xf9, 0xea, 0x6f, 0x50, 0xbe, 0xca, 0xf3, 0x8c, 0x2f, 0x04, 0xf3, 0x8d, 0xa1, 0x7c, 0xd5, 0x4a, 0x46, 0x19, 0x45, 0xc7, 0x01, 0x70, 0xc2, 0x6f, 0x9a, 0x09, 0x42, 0xd7, 0x60, 0x6a, 0x5f, 0x4c, 0xe9, 0xaa, 0xf0, 0x63, 0x67, 0x74, 0xf1, 0x19, 0x43, 0x85, 0x23, 0x92, 0xe0, 0x72, 0x25, 0x92, 0xc8, 0xa4, 0xe5, 0x35, 0x12, 0x80, 0xd7, 0x13, 0xba, 0x58, 0x27, 0x22, 0xf2, 0x44, 0x0f, 0xd3, 0xac, 0x9b, 0x5d, 0x8b, 0x31, 0x9e, 0x81, 0xc5, 0xcd, 0xaf, 0x85, 0x79, 0x0e, 0x43, 0x25, 0xfd, 0xc5, 0x91, 0xd6, 0xb0, 0x6e, 0x0f, 0xad, 0x61, 0xdd, 0x45, 0x5a, 0xc3, 0x5f, 0xaa, 0x48, 0x3d, 0xe0, 0xbf, 0x63, 0xa8, 0xf4, 0xea, 0x64, 0xca, 0x57, 0x26, 0x61, 0x7c, 0xa1, 0x8c, 0xef, 0x3c, 0xe5, 0x7b, 0x3a, 0x86, 0xf1, 0x2d, 0xc6, 0x7c, 0x53, 0x29, 0xdf, 0xad, 0x1b, 0x8c, 0xcf, 0x91, 0xf1, 0x6d, 0xa5, 0x7c, 0x77, 0x83, 0x19, 0xdf, 0x60, 0xcc, 0xe7, 0xc0, 0xca, 0x39, 0x8b, 0xcd, 0x9a, 0x46, 0xc6, 0x17, 0x4c, 0xf9, 0x8a, 0xb2, 0x18, 0x9f, 0x11, 0xe2, 0x6b, 0xac, 0xa6, 0x7c, 0x17, 0x83, 0x19, 0x5f, 0x01, 0xe3, 0x0b, 0xa5, 0x7c, 0x97, 0x57, 0x50, 0xbe, 0xc6, 0x3b, 0x98, 0x2f, 0x97, 0xf2, 0x5d, 0x9e, 0xc7, 0xf8, 0xd8, 0xa8, 0xae, 0xda, 0x4b, 0xf9, 0xae, 0xe8, 0x30, 0xbe, 0x44, 0xcc, 0x17, 0xcb, 0xda, 0x65, 0x12, 0xe3, 0x1b, 0xc3, 0xf8, 0x66, 0x51, 0xbe, 0xb2, 0x02, 0xc6, 0x17, 0x84, 0xf9, 0x46, 0x50, 0xbe, 0x23, 0x9a, 0xfa, 0x75, 0x65, 0x7c, 0xce, 0x94, 0xef, 0x67, 0x27, 0xc6, 0x67, 0x87, 0xf9, 0xcc, 0x29, 0x5f, 0x76, 0x3d, 0x9b, 0x45, 0x6c, 0x64, 0x57, 0x09, 0x29, 0x9f, 0xca, 0x9d, 0xf2, 0x35, 0x54, 0xe1, 0xf7, 0xc9, 0x96, 0x52, 0xbe, 0xeb, 0x0b, 0x58, 0x7e, 0x36, 0x6c, 0x35, 0x01, 0x94, 0xef, 0xa6, 0x2e, 0xe3, 0xcb, 0xc1, 0x7c, 0xa9, 0x94, 0xef, 0x05, 0x5b, 0xbd, 0x6a, 0x2a, 0xd8, 0x0c, 0x64, 0xfd, 0xfe, 0x52, 0xc2, 0xf8, 0x62, 0x30, 0x5f, 0x38, 0xe5, 0x7b, 0x69, 0xc5, 0xf8, 0x32, 0x19, 0x5f, 0x1c, 0xe5, 0x7b, 0xe5, 0xc8, 0xf8, 0x86, 0x61, 0x3e, 0x27, 0xca, 0xf7, 0x70, 0x3e, 0xe5, 0x7b, 0x6b, 0xc1, 0xf8, 0x14, 0x94, 0xef, 0xb1, 0x21, 0xe3, 0x33, 0xc3, 0x7c, 0x80, 0xf2, 0xfd, 0x16, 0x49, 0xf9, 0x2a, 0x1f, 0x31, 0x3e, 0x6b, 0xca, 0xf7, 0x5b, 0x3c, 0xe5, 0xab, 0x2f, 0xc1, 0xef, 0x5f, 0x3b, 0xcf, 0xf8, 0xb6, 0x32, 0xbe, 0xbd, 0x94, 0xaf, 0xfa, 0x0f, 0xc6, 0x77, 0x87, 0xf1, 0xed, 0xc1, 0x7c, 0x71, 0x94, 0xef, 0xb6, 0x03, 0xe5, 0xab, 0x2e, 0x62, 0x7c, 0x4c, 0x1a, 0xdc, 0x3e, 0xc6, 0xf8, 0x42, 0x31, 0x9f, 0x1f, 0x1b, 0x9f, 0xa7, 0x19, 0x5f, 0x09, 0xe5, 0xab, 0x74, 0xa7, 0x7c, 0x97, 0xfa, 0x32, 0x3e, 0x47, 0xcc, 0x27, 0xa1, 0x7c, 0x87, 0x86, 0x32, 0xbe, 0x60, 0xc6, 0xc7, 0x56, 0xb4, 0x23, 0x46, 0x94, 0xaf, 0xae, 0x11, 0xbf, 0x81, 0xac, 0x9c, 0xcd, 0x3f, 0x23, 0xca, 0xf7, 0xee, 0x18, 0xe5, 0x7b, 0xc3, 0x56, 0xb4, 0x5b, 0xac, 0x3d, 0xeb, 0x0a, 0x30, 0xdf, 0x41, 0xc6, 0xa7, 0xcf, 0xf8, 0x16, 0x33, 0x3e, 0x36, 0x6f, 0x6f, 0x59, 0x30, 0xbe, 0x35, 0x98, 0x6f, 0x3e, 0xe5, 0x3b, 0xbc, 0x9e, 0x95, 0x93, 0xf5, 0x5f, 0xb5, 0x2b, 0x1b, 0xd7, 0xfa, 0x94, 0xaf, 0xda, 0x19, 0xaf, 0x8e, 0x9e, 0x94, 0xaf, 0x3a, 0x91, 0xf1, 0x5d, 0x64, 0x7c, 0xd5, 0x94, 0x8f, 0xae, 0xaf, 0x70, 0xcc, 0x1e, 0xc5, 0xef, 0x74, 0x63, 0xf3, 0xb6, 0x26, 0x94, 0x8d, 0xb3, 0xad, 0x2d, 0xc7, 0x67, 0xcd, 0x08, 0xc6, 0xb7, 0x08, 0xf3, 0xb1, 0x79, 0x5b, 0x73, 0x8f, 0xcd, 0x07, 0x1d, 0x36, 0x1f, 0xfa, 0x32, 0xbe, 0x4c, 0xc6, 0xe7, 0xa9, 0x20, 0xf2, 0xda, 0x1e, 0x2a, 0x04, 0x5a, 0x53, 0x5c, 0xc9, 0xf3, 0x92, 0xf1, 0xf7, 0x70, 0xfc, 0xce, 0x8c, 0xf9, 0x6e, 0xbf, 0x03, 0x6d, 0xf4, 0x04, 0x5e, 0xcc, 0x61, 0x86, 0xd3, 0xd2, 0x45, 0xfa, 0x88, 0x10, 0x90, 0xfd, 0xd0, 0x9f, 0x24, 0x92, 0xdf, 0x36, 0x4f, 0x38, 0x4b, 0x60, 0x98, 0x22, 0xd7, 0xa7, 0x1e, 0x6d, 0x6a, 0x6d, 0x83, 0xa2, 0xac, 0xe7, 0x61, 0xea, 0x28, 0x8c, 0x1d, 0x02, 0x80, 0xa5, 0x29, 0x79, 0xc7, 0x69, 0xed, 0x1e, 0xee, 0xb7, 0x04, 0xbd, 0xf3, 0x16, 0x7e, 0x86, 0x11, 0x5c, 0x17, 0x03, 0x3f, 0x39, 0xf0, 0x53, 0x05, 0x47, 0x86, 0x1d, 0xfc, 0x04, 0xc1, 0x4f, 0x22, 0xfc, 0xdc, 0x21, 0xf4, 0x06, 0x23, 0xf8, 0x19, 0x0c, 0x3f, 0x8b, 0x89, 0xf6, 0x68, 0x6c, 0x02, 0x8f, 0x8f, 0x41, 0x8b, 0x20, 0x95, 0xa3, 0xbf, 0x86, 0x2b, 0x49, 0x77, 0xf4, 0x7e, 0x4f, 0xf8, 0xd9, 0x04, 0x15, 0x26, 0xc8, 0xab, 0xd6, 0x81, 0x25, 0x8c, 0x86, 0x52, 0xb7, 0x04, 0x2a, 0x54, 0xbe, 0x10, 0xbb, 0xc2, 0xcf, 0x3c, 0x00, 0x3a, 0x9a, 0xa0, 0x1d, 0xc7, 0x1f, 0xd2, 0xad, 0x61, 0x1a, 0x57, 0x3f, 0xf4, 0x01, 0xa0, 0x03, 0x77, 0x2f, 0x5c, 0xfb, 0x31, 0xad, 0xa7, 0xd0, 0x26, 0x17, 0xd6, 0x59, 0xc8, 0xc3, 0x17, 0x21, 0x36, 0x04, 0xff, 0xb5, 0x7f, 0xc6, 0xdc, 0xaf, 0xe1, 0x26, 0x0e, 0xeb, 0x73, 0x98, 0x73, 0xcd, 0xe9, 0xae, 0x22, 0xbf, 0x9f, 0xcc, 0x82, 0xf5, 0xbf, 0x0c, 0x31, 0x77, 0xdd, 0x27, 0xb0, 0x77, 0x05, 0xb0, 0x4d, 0xc5, 0xce, 0x4d, 0xd3, 0x13, 0x7b, 0x22, 0x0f, 0x16, 0x6c, 0x9f, 0x08, 0xd8, 0xe6, 0x02, 0x12, 0x09, 0x06, 0x4b, 0x00, 0x34, 0xa5, 0x61, 0x25, 0xd0, 0x3e, 0x2f, 0xb9, 0x42, 0x97, 0x3b, 0x52, 0xf6, 0x92, 0xab, 0x03, 0xdc, 0xdd, 0x90, 0xa4, 0x7f, 0xaa, 0x87, 0x9e, 0xd1, 0x1c, 0x04, 0x84, 0x4f, 0xb0, 0x35, 0x1d, 0x87, 0xad, 0xe9, 0x78, 0x6c, 0x4d, 0x27, 0xb4, 0xb4, 0x6b, 0xd1, 0x48, 0xb1, 0xba, 0x4a, 0xde, 0x65, 0xf7, 0xd9, 0xac, 0xeb, 0x9b, 0xfb, 0xd8, 0xa9, 0xc7, 0xbf, 0xd4, 0x93, 0x88, 0x0f, 0x9e, 0x32, 0x8d, 0x9e, 0x02, 0x04, 0x5d, 0xe1, 0xb0, 0x99, 0x44, 0x8e, 0x85, 0x16, 0xa1, 0x40, 0xe0, 0x83, 0x7d, 0x6d, 0x71, 0x15, 0x76, 0x71, 0x68, 0xd7, 0x35, 0xe7, 0xa7, 0xe3, 0x22, 0x0c, 0x82, 0x54, 0x40, 0xf7, 0xa0, 0x47, 0x41, 0xfd, 0x00, 0x8f, 0xd6, 0x68, 0x7b, 0x21, 0x7a, 0xde, 0x0c, 0x89, 0x96, 0x2c, 0x51, 0x0b, 0xdd, 0x95, 0x60, 0xbd, 0x32, 0xd2, 0x1d, 0xdd, 0x2b, 0x62, 0x25, 0x26, 0x7e, 0x3b, 0xa4, 0x1b, 0x7f, 0x6c, 0x9a, 0xcc, 0x5a, 0x47, 0x3e, 0x03, 0x01, 0xe8, 0x10, 0xf4, 0x29, 0x7e, 0x36, 0x73, 0xe0, 0x98, 0x3c, 0x89, 0x9d, 0x3a, 0x00, 0xd5, 0x61, 0xf8, 0xe5, 0x08, 0x3b, 0x62, 0x37, 0x0f, 0x9b, 0x8b, 0x76, 0x57, 0x63, 0x2f, 0x44, 0x5f, 0x7e, 0x59, 0xfa, 0x72, 0x65, 0x59, 0xaf, 0x44, 0x31, 0x7d, 0xa8, 0xc3, 0xbb, 0x91, 0x72, 0xf1, 0x4a, 0x25, 0x57, 0x47, 0x2b, 0xf6, 0x90, 0x52, 0x71, 0x69, 0x38, 0x54, 0x08, 0xe8, 0x7d, 0x22, 0xb4, 0x3c, 0x8a, 0xbd, 0x7f, 0xa3, 0x2d, 0x00, 0x48, 0xa8, 0x70, 0xf1, 0x3b, 0x01, 0x84, 0x15, 0x1b, 0xd4, 0x2e, 0x0a, 0xd0, 0xf8, 0x04, 0x7b, 0x44, 0x82, 0xb8, 0x14, 0xc8, 0x95, 0xa2, 0x0f, 0xa7, 0xc1, 0xd5, 0xd9, 0x20, 0x48, 0x42, 0x6a, 0x83, 0x9f, 0xb4, 0xcf, 0xd5, 0xfa, 0xdf, 0xf7, 0x70, 0xad, 0x35, 0xed, 0x29, 0x67, 0x25, 0xcf, 0x0d, 0x1a, 0xd5, 0xa2, 0x84, 0xbb, 0x34, 0xb5, 0xc0, 0x76, 0x49, 0xab, 0xbd, 0xa4, 0xc3, 0x5a, 0xa7, 0x59, 0xcb, 0x40, 0xeb, 0x8e, 0xdf, 0x2a, 0xb4, 0xa5, 0xfe, 0x66, 0x3b, 0xac, 0x6f, 0x28, 0xad, 0x88, 0x6f, 0xac, 0x6d, 0x5a, 0x56, 0x68, 0xda, 0x8a, 0x70, 0x4b, 0xb7, 0x5e, 0x56, 0xa0, 0xcd, 0x5a, 0xb1, 0x21, 0x05, 0xb6, 0x62, 0x56, 0x9f, 0x01, 0x26, 0xfa, 0xc3, 0xea, 0x44, 0xe8, 0x8d, 0x7b, 0x0e, 0x0d, 0x26, 0x60, 0x16, 0xb8, 0x0c, 0x42, 0xe0, 0x2f, 0x7e, 0x02, 0x08, 0x44, 0xb3, 0x60, 0x05, 0x42, 0xe0, 0x37, 0xc1, 0x89, 0x10, 0x25, 0x42, 0x9c, 0xc8, 0xe1, 0x10, 0xf6, 0x87, 0x71, 0x0b, 0xfe, 0x20, 0xde, 0x1f, 0xe7, 0x73, 0xb3, 0x34, 0xc2, 0x77, 0xec, 0x90, 0xfb, 0x7d, 0x16, 0x8b, 0xa0, 0xe6, 0x6b, 0x82, 0xed, 0x9b, 0xe6, 0x76, 0x25, 0xb1, 0x5f, 0x9b, 0xd8, 0xd0, 0xd8, 0xcf, 0xdc, 0x84, 0x03, 0xed, 0x5f, 0x02, 0xc0, 0x82, 0xda, 0xc9, 0x08, 0x33, 0x1b, 0xda, 0xba, 0xd9, 0xd5, 0x8f, 0x14, 0x85, 0xad, 0xcf, 0x79, 0x13, 0x32, 0xd7, 0x91, 0x07, 0x2d, 0x17, 0x16, 0x73, 0x11, 0xb6, 0x72, 0x75, 0x88, 0xbf, 0x8d, 0xa4, 0x32, 0x6c, 0x2e, 0x47, 0x53, 0x90, 0x31, 0xd7, 0xf2, 0x0a, 0xee, 0x0d, 0xa4, 0xc8, 0xff, 0xd6, 0xaa, 0xdf, 0x0b, 0x8d, 0x30, 0xef, 0x11, 0xe8, 0x3d, 0x57, 0x0a, 0x80, 0xc6, 0x89, 0xd0, 0x4d, 0x89, 0x3d, 0xf8, 0x4a, 0x37, 0x72, 0x57, 0x0e, 0xf1, 0xc3, 0xc1, 0x85, 0x54, 0x1e, 0xb4, 0xb8, 0xf5, 0x15, 0x46, 0x12, 0x82, 0x3d, 0x95, 0x4b, 0xa0, 0xd0, 0x59, 0x6f, 0xa8, 0x44, 0x2b, 0x1a, 0x5c, 0x5b, 0xe6, 0xc3, 0xb5, 0xa5, 0x52, 0xd3, 0xd3, 0x71, 0xec, 0x3e, 0x8e, 0xe6, 0xa3, 0xc6, 0x5e, 0x48, 0x46, 0x7c, 0xd3, 0xd9, 0x8b, 0x46, 0x69, 0xb4, 0x1b, 0x89, 0x63, 0xd2, 0x91, 0xdf, 0x7a, 0xee, 0xe2, 0xd7, 0x28, 0x77, 0x2d, 0x35, 0xcc, 0xdd, 0x14, 0xe5, 0x5e, 0x8f, 0x6c, 0xea, 0x5a, 0x98, 0xfb, 0x3c, 0x34, 0x96, 0xb9, 0x56, 0x81, 0x69, 0xd3, 0x56, 0x61, 0x33, 0xcd, 0x82, 0x3f, 0xc7, 0x7c, 0xe6, 0xf0, 0xe7, 0x18, 0xd9, 0xf7, 0x05, 0xbf, 0x57, 0xa9, 0x13, 0x50, 0xb9, 0xec, 0x85, 0x4d, 0x4b, 0xa6, 0x99, 0x3d, 0xb8, 0x8c, 0x71, 0x64, 0x9c, 0x5b, 0x89, 0x15, 0xe9, 0xad, 0xd6, 0x98, 0x8e, 0x70, 0x58, 0xf3, 0x8f, 0x5b, 0xe7, 0x7c, 0x9e, 0x68, 0xd6, 0xb9, 0xd6, 0x66, 0xaf, 0xf6, 0xfb, 0x66, 0xef, 0xb1, 0x8f, 0x69, 0xf1, 0x26, 0xeb, 0xd5, 0x1c, 0x38, 0xd3, 0x16, 0x63, 0x4d, 0x05, 0x34, 0x1c, 0xa3, 0xd6, 0xa6, 0x38, 0x81, 0x5a, 0xa0, 0xe2, 0x14, 0x8d, 0x5d, 0xf8, 0x30, 0x01, 0x79, 0x2d, 0x51, 0x34, 0x94, 0xfc, 0x91, 0xdd, 0x46, 0x00, 0xea, 0x07, 0x5a, 0x8d, 0x7c, 0x59, 0xf6, 0x51, 0xf2, 0xeb, 0xce, 0xc7, 0xca, 0xaf, 0xae, 0x46, 0x44, 0x7e, 0x75, 0x3d, 0xec, 0xb9, 0xb9, 0x89, 0x04, 0x5b, 0x13, 0x06, 0xc0, 0x9c, 0x83, 0xa7, 0x3a, 0x4a, 0xd4, 0x0b, 0xa0, 0xfc, 0x32, 0x84, 0xf2, 0xcb, 0xe5, 0x3d, 0x6b, 0x95, 0xe4, 0x9f, 0xc8, 0x2f, 0x44, 0x41, 0x37, 0xad, 0x01, 0xe0, 0xa1, 0x96, 0x88, 0x15, 0x05, 0xf6, 0xe0, 0x03, 0xb9, 0x00, 0x4d, 0x2e, 0xc8, 0x8a, 0x46, 0x7b, 0xe5, 0x1c, 0x3a, 0x11, 0x3f, 0x2c, 0x89, 0xc2, 0xc4, 0x6d, 0x86, 0x25, 0xcf, 0x98, 0x71, 0x4c, 0x22, 0xfe, 0xeb, 0x51, 0xe0, 0x55, 0xf2, 0x3f, 0x95, 0x76, 0x12, 0xbe, 0xb4, 0xfb, 0x0b, 0x89, 0x25, 0xf9, 0x7b, 0x12, 0x6b, 0x48, 0xf7, 0xbf, 0x25, 0xb1, 0x92, 0xff, 0xaf, 0x48, 0x2c, 0xc9, 0x07, 0x66, 0x82, 0x00, 0x4a, 0xac, 0xd7, 0x1f, 0x25, 0xb1, 0x92, 0x5b, 0x91, 0x58, 0x02, 0x28, 0xb1, 0x0e, 0xb6, 0x90, 0x58, 0x12, 0x28, 0x8b, 0xa0, 0x8c, 0x82, 0xbf, 0x54, 0x62, 0x85, 0x60, 0x99, 0x45, 0x25, 0x56, 0x21, 0xfc, 0x0b, 0x81, 0xb8, 0x90, 0xc3, 0x0a, 0xf6, 0x47, 0x24, 0x56, 0x73, 0xfe, 0x56, 0x24, 0xd6, 0x27, 0xf7, 0xf0, 0xf7, 0x0d, 0x7c, 0x1f, 0xd8, 0x88, 0xbf, 0x23, 0xb1, 0x40, 0xa8, 0xb6, 0x48, 0x1d, 0xd4, 0x9c, 0x83, 0xef, 0xd9, 0x6d, 0xee, 0xf9, 0x45, 0xbe, 0x3e, 0xe4, 0xf3, 0x83, 0xd7, 0x9a, 0x71, 0x71, 0xd5, 0xe6, 0x32, 0x8e, 0x9d, 0xa5, 0x3c, 0x1f, 0x94, 0x6a, 0xf3, 0x38, 0xc9, 0x15, 0xc7, 0x9f, 0xf1, 0x28, 0x7e, 0xac, 0x2f, 0x57, 0x42, 0x19, 0x46, 0xfc, 0x84, 0x9c, 0x0c, 0xc2, 0xe3, 0x08, 0x5f, 0xcf, 0xc9, 0xb9, 0x8f, 0xe3, 0xd1, 0xc8, 0x3e, 0x2a, 0xe9, 0xdc, 0x83, 0xfe, 0x89, 0xa4, 0xeb, 0x1c, 0xc9, 0x24, 0x5d, 0xdc, 0x5f, 0x48, 0x3a, 0x8b, 0xff, 0xbe, 0xa4, 0xeb, 0xac, 0xcd, 0x49, 0x3a, 0x13, 0x26, 0xe7, 0xea, 0x61, 0xde, 0xf3, 0xe1, 0x0c, 0x88, 0x24, 0xad, 0xa2, 0x8f, 0x9f, 0x14, 0xf9, 0x61, 0x49, 0xe7, 0xb1, 0xe2, 0xc3, 0x92, 0xee, 0x83, 0xb3, 0xee, 0x43, 0x92, 0xce, 0xe2, 0x3f, 0x91, 0x74, 0x1e, 0xb5, 0x7f, 0x4f, 0xd2, 0x91, 0x5e, 0x82, 0xf9, 0x1f, 0xfb, 0x98, 0x16, 0xff, 0x6b, 0x49, 0x67, 0x9e, 0x41, 0x25, 0x9d, 0xf9, 0x09, 0x28, 0xe9, 0x2c, 0x9a, 0x4a, 0x3a, 0x3c, 0x52, 0x45, 0xd8, 0x07, 0xca, 0xf3, 0x5c, 0x63, 0x5b, 0x5f, 0x8e, 0x6d, 0x73, 0x2b, 0x96, 0x4e, 0x10, 0x4b, 0x27, 0xbc, 0xf9, 0xf5, 0x18, 0xeb, 0xd2, 0x39, 0xc1, 0x22, 0x27, 0xf4, 0xac, 0x36, 0x77, 0xd6, 0x90, 0xe5, 0x68, 0x8d, 0x66, 0x0b, 0xd9, 0xa1, 0xc5, 0xd5, 0xd1, 0xda, 0x4b, 0x00, 0x80, 0x66, 0xdd, 0xa1, 0x3e, 0x5a, 0x5c, 0x12, 0x3b, 0x5c, 0x92, 0x61, 0xb8, 0x66, 0x22, 0x5a, 0x9e, 0x4e, 0xf8, 0x09, 0x36, 0x9d, 0x9e, 0x90, 0x91, 0x04, 0x53, 0x57, 0x92, 0xb7, 0x77, 0x29, 0x76, 0x7f, 0x5c, 0x14, 0x88, 0xe8, 0x8e, 0xad, 0x97, 0x1c, 0x97, 0xd1, 0x9c, 0x57, 0x36, 0xad, 0x8f, 0x2c, 0x93, 0x3b, 0x2e, 0xd3, 0x88, 0x16, 0x65, 0x3a, 0xfa, 0xcf, 0xcb, 0xf4, 0xc1, 0x95, 0x26, 0x00, 0xaf, 0x1c, 0x8b, 0xf9, 0xf3, 0xa9, 0x0f, 0xba, 0x7b, 0x3d, 0x02, 0xb4, 0xe7, 0xc6, 0x94, 0x66, 0x7d, 0xf1, 0x6b, 0x7d, 0x7d, 0x41, 0x77, 0xba, 0x7f, 0x68, 0x5d, 0x71, 0x35, 0xfa, 0x27, 0xeb, 0x4a, 0x47, 0x9b, 0x56, 0xd6, 0x95, 0x70, 0x38, 0xb7, 0x5f, 0xb6, 0x18, 0xe5, 0xe6, 0x1f, 0x5e, 0x57, 0xac, 0xfe, 0x83, 0x75, 0xc5, 0x34, 0xbd, 0xc5, 0xba, 0x52, 0x89, 0xf6, 0xd3, 0x6b, 0xd6, 0x15, 0xdd, 0x0c, 0xd0, 0x56, 0x1d, 0xdd, 0xfa, 0x7a, 0x22, 0x73, 0xfe, 0x1f, 0xad, 0x27, 0xe6, 0xff, 0xc9, 0x7a, 0x22, 0xdb, 0xfb, 0x5f, 0x5b, 0x4f, 0xcc, 0x3f, 0x62, 0x3d, 0x89, 0xe1, 0xd6, 0x93, 0x02, 0x3a, 0xc6, 0x4d, 0xc7, 0xd3, 0x75, 0xc0, 0x74, 0x2a, 0x9c, 0x19, 0xe6, 0x00, 0x10, 0x1f, 0x1e, 0x6f, 0x9e, 0xe3, 0x71, 0xdb, 0x44, 0x1b, 0x36, 0xe7, 0x24, 0xa7, 0xb5, 0x97, 0x53, 0xd3, 0xf5, 0x87, 0xaf, 0x4f, 0xa8, 0x8b, 0xd1, 0x1f, 0x2c, 0x7c, 0x35, 0xc0, 0xcf, 0x0c, 0x64, 0x78, 0x51, 0xeb, 0x98, 0xa7, 0x4f, 0x60, 0x2c, 0x30, 0x05, 0xdb, 0xe1, 0x9f, 0x02, 0x64, 0x71, 0xf4, 0x50, 0xde, 0x1f, 0xf7, 0x2e, 0xf5, 0x0e, 0xb1, 0x42, 0x3b, 0xf0, 0x8e, 0x3e, 0x7b, 0xa1, 0xc3, 0x02, 0x8a, 0xc8, 0xb8, 0x91, 0x58, 0x03, 0xf4, 0xde, 0x62, 0x31, 0x7e, 0xa7, 0x1f, 0xb3, 0x1f, 0xe1, 0x28, 0x71, 0xef, 0x85, 0x77, 0x76, 0x48, 0x7a, 0xf0, 0xe8, 0x78, 0x7f, 0x87, 0x07, 0xa1, 0x4b, 0x89, 0xae, 0xcf, 0xa5, 0xa2, 0xb9, 0x2a, 0xbe, 0x49, 0x8a, 0xd8, 0x06, 0x20, 0xe9, 0x42, 0xbe, 0x38, 0xee, 0x5e, 0xa2, 0x32, 0x8d, 0x8e, 0x32, 0x1d, 0xa8, 0xe7, 0xfb, 0x34, 0x59, 0x59, 0x9b, 0xd0, 0x16, 0xf9, 0x80, 0x60, 0x1e, 0xad, 0x15, 0x9b, 0x23, 0xf9, 0x63, 0x6d, 0x0e, 0xe3, 0xad, 0xc4, 0xe6, 0x30, 0x71, 0x2d, 0x4c, 0x32, 0xc4, 0x3b, 0xcd, 0xe0, 0x9c, 0xa8, 0x86, 0x73, 0x22, 0x10, 0xcd, 0x14, 0x39, 0x80, 0xb3, 0xb3, 0x28, 0x14, 0x3d, 0x35, 0xad, 0x75, 0x4d, 0xf3, 0xf3, 0xff, 0x81, 0xbf, 0xec, 0xf3, 0x8f, 0xf0, 0x97, 0x49, 0xf8, 0xb3, 0x01, 0xad, 0x83, 0xa8, 0x0e, 0x2e, 0x09, 0x9a, 0x19, 0xd1, 0x5a, 0x29, 0xfe, 0xc2, 0x76, 0x48, 0xff, 0x1b, 0x75, 0xe4, 0xcf, 0x8e, 0x40, 0xf4, 0x74, 0xe6, 0xbf, 0xb0, 0x2a, 0x3e, 0xff, 0x3f, 0xcc, 0x5d, 0x0f, 0x78, 0x54, 0x55, 0x76, 0xbf, 0xef, 0xce, 0x30, 0x19, 0xc6, 0x21, 0x8e, 0xd9, 0x18, 0x63, 0x36, 0xc0, 0x33, 0x9b, 0xc6, 0xd9, 0x34, 0x84, 0x98, 0xa6, 0x34, 0x0b, 0x11, 0x26, 0x43, 0x96, 0x1d, 0x63, 0x8c, 0x21, 0xc6, 0x18, 0x29, 0xc5, 0x59, 0x9a, 0x9d, 0xa1, 0x6c, 0x18, 0x53, 0x1a, 0x68, 0xea, 0xa6, 0x71, 0x12, 0x22, 0x46, 0x96, 0x75, 0x03, 0x46, 0x8c, 0xca, 0x22, 0xcb, 0xa6, 0x98, 0xa5, 0x34, 0x4b, 0x59, 0x4a, 0xad, 0x6b, 0x69, 0x64, 0xd1, 0x5a, 0xd7, 0x65, 0x23, 0x45, 0x89, 0x48, 0x11, 0x91, 0xba, 0x09, 0x8b, 0x31, 0x4d, 0x2d, 0xa5, 0x9a, 0xe6, 0xed, 0x39, 0xe7, 0xde, 0x37, 0xf3, 0xe6, 0x1f, 0x81, 0xc5, 0xfd, 0xbe, 0xfd, 0xe6, 0xbb, 0xf3, 0xee, 0xbd, 0xe7, 0xdc, 0x73, 0xcf, 0xbd, 0xef, 0xfc, 0xee, 0xbf, 0x77, 0xdf, 0x7d, 0x57, 0x37, 0xab, 0x58, 0x50, 0x1b, 0x3b, 0xab, 0x88, 0xd1, 0xeb, 0xf9, 0x6b, 0x9c, 0x4b, 0x6c, 0xfa, 0x8d, 0xca, 0xbb, 0x75, 0x52, 0x1d, 0xef, 0xd6, 0x52, 0xa6, 0x9c, 0x3d, 0x3c, 0x9f, 0x60, 0xbd, 0xeb, 0x2c, 0x58, 0xfa, 0xf1, 0x88, 0xd9, 0x43, 0x2d, 0x8c, 0xfd, 0x9b, 0x59, 0x03, 0x5c, 0xe3, 0xaf, 0x77, 0xb5, 0x42, 0xa8, 0x15, 0xc2, 0xad, 0x09, 0xd6, 0xbb, 0xa2, 0xd3, 0xc7, 0x99, 0x3d, 0x38, 0x66, 0xd1, 0xdb, 0x58, 0xdd, 0xf4, 0x4f, 0x4f, 0x5e, 0x3e, 0xa2, 0xe7, 0x9f, 0x1f, 0xad, 0xa4, 0xff, 0xfc, 0x38, 0x08, 0x6a, 0xb9, 0x52, 0x04, 0x25, 0xd7, 0x09, 0x04, 0x25, 0x4f, 0x18, 0x67, 0xed, 0x02, 0x4b, 0x0f, 0x4a, 0x1c, 0x2d, 0xd2, 0x00, 0x47, 0x07, 0x03, 0x74, 0xca, 0x78, 0xdc, 0x3a, 0xcf, 0xfe, 0x2d, 0xe0, 0x28, 0x9e, 0x4c, 0x98, 0xa5, 0x17, 0xea, 0xb3, 0x74, 0x89, 0x09, 0x3b, 0x5d, 0xd7, 0x74, 0xb1, 0x00, 0x20, 0xcc, 0x77, 0x79, 0x84, 0x7d, 0x65, 0xde, 0xe5, 0x11, 0x36, 0xc5, 0x9a, 0xcd, 0xde, 0x29, 0x50, 0x92, 0x7d, 0x75, 0x28, 0x29, 0x2e, 0xb8, 0x02, 0x94, 0xf4, 0x5e, 0x13, 0x4a, 0x36, 0x5d, 0x45, 0xdd, 0x1a, 0x66, 0xd8, 0x93, 0x65, 0x80, 0x91, 0x54, 0xa1, 0x91, 0xbb, 0x2d, 0x0e, 0x3a, 0x7a, 0xe3, 0xcf, 0xad, 0x27, 0xed, 0x80, 0x8e, 0x53, 0x11, 0xe8, 0x78, 0x88, 0xac, 0xdb, 0x0b, 0x57, 0x61, 0xdd, 0x60, 0xe9, 0x18, 0x06, 0xa7, 0xa3, 0xa3, 0x95, 0xe6, 0xd6, 0xad, 0x09, 0xe6, 0xd6, 0xd1, 0xe9, 0xe3, 0xa0, 0xc3, 0x4e, 0xef, 0x2a, 0xda, 0xd7, 0xd3, 0xff, 0x27, 0x88, 0x88, 0xb1, 0xa3, 0xf4, 0xbf, 0x9d, 0xfe, 0x3f, 0xb9, 0xa2, 0x55, 0xae, 0x0a, 0xbc, 0x23, 0xb6, 0xe5, 0xfa, 0xbd, 0x8d, 0x1a, 0x61, 0x64, 0xc5, 0x8e, 0x70, 0xc6, 0xdb, 0x18, 0x7e, 0x2d, 0x00, 0x2d, 0x92, 0x30, 0x53, 0x74, 0x13, 0x6f, 0xc7, 0x3b, 0xd2, 0x1d, 0x3c, 0xf0, 0x93, 0xd4, 0xec, 0x86, 0x62, 0xf8, 0xcf, 0x85, 0x7e, 0xe8, 0x05, 0x40, 0x4e, 0x47, 0xe1, 0x4d, 0x38, 0xd2, 0x6c, 0x77, 0x2f, 0x6c, 0x1b, 0x9f, 0x3d, 0x18, 0xcc, 0x9e, 0x5d, 0xb9, 0x2e, 0x72, 0xb5, 0x2a, 0xbc, 0x8b, 0xae, 0x44, 0x89, 0xe9, 0x2b, 0xb2, 0x85, 0xbd, 0x47, 0x8f, 0x9f, 0xe6, 0xad, 0xd6, 0x6d, 0x19, 0xe5, 0xa5, 0xe8, 0x6b, 0x36, 0x19, 0x22, 0x2f, 0x73, 0x3b, 0x59, 0x84, 0x1b, 0x2d, 0x82, 0x72, 0x75, 0x79, 0x0f, 0xc5, 0x5d, 0x5b, 0x32, 0x94, 0x4c, 0xee, 0x42, 0x84, 0x12, 0x79, 0x5f, 0x14, 0x96, 0x2e, 0x63, 0x12, 0xd9, 0x7b, 0x9c, 0x5a, 0x09, 0xd9, 0x7b, 0x56, 0xac, 0xbd, 0x17, 0xbd, 0x18, 0xb6, 0x77, 0xd4, 0x39, 0x6a, 0xb5, 0xa9, 0x32, 0xc6, 0x4a, 0x77, 0x45, 0xdb, 0xfe, 0xd4, 0x96, 0x1f, 0xea, 0x1d, 0xda, 0x23, 0x56, 0x9a, 0xf6, 0xe8, 0xb9, 0xf8, 0xd9, 0x64, 0x13, 0x7e, 0xa5, 0xdd, 0x4e, 0x6f, 0xcb, 0xfa, 0xd8, 0xa4, 0xaf, 0xfc, 0x47, 0xcc, 0x0a, 0xd7, 0x15, 0xf4, 0xf5, 0x51, 0x1f, 0xd0, 0x6b, 0xa6, 0xec, 0x1b, 0x8c, 0x7a, 0xd1, 0xca, 0x0a, 0x20, 0x80, 0x99, 0x8b, 0x01, 0x37, 0xaf, 0x83, 0xfd, 0xa7, 0x46, 0xd8, 0xff, 0x1e, 0x76, 0x4e, 0xc9, 0x04, 0xfb, 0xdd, 0x23, 0xed, 0xf7, 0x25, 0xd6, 0x80, 0x61, 0xb8, 0x52, 0x58, 0x29, 0x80, 0x9f, 0x9d, 0x79, 0x95, 0x82, 0x04, 0xf6, 0x1f, 0x9d, 0x3e, 0x8e, 0xfd, 0x4f, 0x27, 0xfb, 0x9f, 0xbe, 0xde, 0x38, 0xc6, 0x62, 0x69, 0x30, 0xfe, 0xca, 0x8f, 0x9e, 0xa7, 0xc1, 0xdd, 0x79, 0x00, 0xeb, 0x04, 0x46, 0xba, 0xaa, 0x7f, 0xca, 0x59, 0x5c, 0xfc, 0xfe, 0xc2, 0xea, 0x74, 0x07, 0xe8, 0xfd, 0x67, 0x3a, 0x25, 0xce, 0xcb, 0x26, 0x8e, 0xc6, 0xf6, 0x34, 0xc4, 0xb7, 0x17, 0xf8, 0x3a, 0x80, 0x87, 0xde, 0x6a, 0x02, 0xbe, 0xdd, 0xba, 0x7e, 0x3f, 0xa6, 0x9d, 0xfb, 0xd3, 0xcb, 0xc3, 0xb3, 0xc4, 0xd5, 0x99, 0x91, 0x2b, 0x53, 0xb8, 0xef, 0x69, 0xb5, 0x55, 0x8f, 0xbb, 0xfc, 0x1a, 0x55, 0x3c, 0x1c, 0x5b, 0xba, 0x13, 0xe0, 0xd8, 0xf9, 0xbb, 0x87, 0xe3, 0xc2, 0x5d, 0x9f, 0x0b, 0x8e, 0x9d, 0xd7, 0x80, 0x63, 0xe7, 0xd5, 0xe1, 0xb8, 0x60, 0xfc, 0x2a, 0x71, 0xdc, 0xf7, 0x3b, 0x8a, 0xe3, 0xbe, 0xab, 0xc2, 0xf1, 0x59, 0x25, 0xc3, 0x80, 0xc3, 0x17, 0x01, 0xc7, 0x10, 0x86, 0x6b, 0x18, 0xc7, 0xb6, 0xcb, 0xe2, 0x38, 0x32, 0x7d, 0x1c, 0x1c, 0x4f, 0x3b, 0x40, 0xff, 0xfd, 0x61, 0x9c, 0xac, 0x4e, 0xfd, 0x6d, 0xa1, 0xd8, 0xbc, 0x32, 0x0a, 0xc5, 0x83, 0xf1, 0x51, 0x6c, 0xfe, 0x30, 0x0a, 0xc5, 0x7d, 0x06, 0xed, 0x50, 0xdb, 0x0e, 0x81, 0x62, 0x3a, 0xfb, 0xf9, 0x09, 0x36, 0xeb, 0x1a, 0x71, 0x8c, 0x08, 0x6e, 0xa2, 0x75, 0x23, 0x94, 0xed, 0xa4, 0x75, 0x1e, 0x4f, 0x94, 0x3d, 0x39, 0x3c, 0x66, 0xdd, 0x4a, 0xe5, 0xda, 0x1c, 0xea, 0x39, 0x41, 0xbc, 0x99, 0xf1, 0x4b, 0x6b, 0xea, 0xf7, 0x32, 0xb6, 0x90, 0xd6, 0x75, 0x18, 0xeb, 0x48, 0xc0, 0xb3, 0x89, 0x56, 0x76, 0x5a, 0x61, 0xfe, 0xd8, 0x03, 0xd3, 0xec, 0x1d, 0xb4, 0xba, 0x13, 0x04, 0xd4, 0xf7, 0xae, 0xc1, 0xb7, 0x15, 0xa2, 0x5b, 0x12, 0xf3, 0xe7, 0xbf, 0xba, 0x63, 0xb2, 0xd2, 0xea, 0xce, 0x24, 0x68, 0x90, 0x16, 0xc8, 0xa4, 0x15, 0x1e, 0x9c, 0xbf, 0x66, 0x43, 0xeb, 0xb3, 0x13, 0x90, 0xd0, 0x0a, 0x96, 0xcd, 0xb4, 0x47, 0x7c, 0x4c, 0x6b, 0x92, 0xe3, 0xd0, 0x58, 0x24, 0x9b, 0xaf, 0x6e, 0x04, 0x3a, 0xc7, 0xf9, 0xb9, 0xac, 0x08, 0xed, 0x8e, 0x5b, 0x3b, 0x57, 0xbd, 0x22, 0x34, 0xa7, 0xe7, 0x37, 0x5d, 0x11, 0x0a, 0xd5, 0x4c, 0xf3, 0x95, 0xdc, 0x27, 0xf1, 0x2e, 0xb5, 0x18, 0xb1, 0x6a, 0xab, 0x01, 0xe9, 0x1e, 0xb9, 0x36, 0x74, 0x80, 0x56, 0x44, 0xc5, 0x5e, 0xae, 0x79, 0xa1, 0x7d, 0xdd, 0xf3, 0x68, 0x7f, 0x76, 0xd9, 0x15, 0xee, 0xc9, 0x97, 0xf6, 0xc8, 0x1b, 0x04, 0x2e, 0x74, 0x9b, 0x97, 0xf7, 0x5a, 0xa0, 0x8b, 0xee, 0xb8, 0xc0, 0x18, 0xae, 0x58, 0x16, 0x8a, 0xb7, 0xc1, 0x3a, 0xb0, 0x4e, 0x71, 0x35, 0x12, 0x4b, 0x08, 0xe1, 0x1a, 0x08, 0xd7, 0xee, 0x2b, 0x6d, 0xc0, 0x5e, 0x85, 0xea, 0x47, 0x59, 0x36, 0x97, 0xd1, 0xce, 0xed, 0x4a, 0x9f, 0x43, 0x5f, 0xcd, 0xfc, 0xb2, 0xab, 0xcc, 0x85, 0xbc, 0x05, 0xf9, 0x5a, 0xad, 0xd9, 0xc5, 0xdc, 0xfb, 0x02, 0x5a, 0x4d, 0x43, 0x06, 0x84, 0x6a, 0x06, 0x1f, 0x64, 0x5c, 0x5f, 0xe3, 0x14, 0xeb, 0x9b, 0x2a, 0xb4, 0xd5, 0xe2, 0xbd, 0x1d, 0xb0, 0x1f, 0xa8, 0x2f, 0x0c, 0xd3, 0x0e, 0xfa, 0x5a, 0x29, 0xf7, 0x6e, 0x92, 0xdb, 0x85, 0x71, 0xce, 0x61, 0x92, 0x5b, 0x8b, 0x92, 0xa4, 0xdc, 0x5a, 0x92, 0x5b, 0x2b, 0xe5, 0x76, 0x85, 0xe4, 0x76, 0x85, 0xe4, 0x76, 0x91, 0xdc, 0x2d, 0x18, 0xc6, 0x9c, 0x0b, 0xf4, 0xbb, 0xe7, 0xc2, 0xa5, 0x98, 0x45, 0x58, 0xa6, 0x0e, 0xa1, 0xbf, 0xdf, 0x46, 0xef, 0xb5, 0x69, 0x5d, 0x6d, 0xe1, 0x75, 0x59, 0xe7, 0xfa, 0xb2, 0x60, 0x16, 0xf3, 0x7e, 0x28, 0x39, 0xe6, 0x93, 0xee, 0x22, 0xbd, 0xd0, 0x59, 0x61, 0xcc, 0x9f, 0xc2, 0x02, 0x8b, 0x34, 0x28, 0x89, 0x4c, 0x7d, 0x36, 0x88, 0xcf, 0xc7, 0x16, 0x4d, 0xca, 0x98, 0x49, 0x11, 0x13, 0x92, 0x98, 0x8d, 0x6f, 0x57, 0xf8, 0x1d, 0x22, 0x0d, 0xbd, 0x0d, 0xa7, 0x85, 0x53, 0x88, 0xb7, 0xe3, 0x30, 0x8c, 0xa5, 0x89, 0xa3, 0x6b, 0x97, 0xa8, 0x93, 0x28, 0x5d, 0xa9, 0x76, 0x6e, 0x7d, 0x3d, 0xa4, 0xeb, 0x34, 0xe0, 0x28, 0xb4, 0xa3, 0x25, 0xdf, 0xed, 0x5f, 0x48, 0xd7, 0x4a, 0x7f, 0x2a, 0xd4, 0x83, 0x45, 0x6b, 0xd4, 0x77, 0x77, 0x43, 0xaa, 0x06, 0xaf, 0x5b, 0x9e, 0x49, 0x23, 0x42, 0x45, 0x3a, 0x8d, 0x38, 0x5b, 0x20, 0xae, 0xd9, 0xab, 0xe2, 0x3f, 0x49, 0xac, 0xf4, 0xe1, 0x5d, 0xb1, 0x23, 0x62, 0x90, 0x47, 0x4f, 0x69, 0x75, 0xb2, 0x24, 0x28, 0x8f, 0x15, 0xdf, 0x30, 0xc2, 0xb0, 0x40, 0x4a, 0xe8, 0x2d, 0xb0, 0x05, 0x83, 0x41, 0x7a, 0x1b, 0xdb, 0x5a, 0xb9, 0xce, 0xf8, 0x3e, 0xd9, 0x1c, 0x61, 0x1d, 0x6e, 0x77, 0x1b, 0x20, 0xaf, 0xfe, 0xcc, 0xd3, 0xe3, 0x4a, 0x27, 0x2b, 0xa4, 0xb7, 0x24, 0x1c, 0x9c, 0x17, 0x31, 0x17, 0xbf, 0x64, 0xb2, 0x9b, 0x54, 0x53, 0x91, 0xc9, 0x63, 0x5a, 0x6e, 0xf2, 0x99, 0xaa, 0x4d, 0x0b, 0x4d, 0xb9, 0xa6, 0x34, 0x13, 0x67, 0xe5, 0xbc, 0x98, 0xcf, 0xe7, 0xeb, 0x59, 0x0d, 0xdb, 0xa1, 0x70, 0xa5, 0x42, 0xd9, 0xaf, 0x4c, 0xf0, 0x74, 0x65, 0x48, 0xd9, 0xac, 0x38, 0xd9, 0x69, 0xf6, 0x10, 0x3f, 0xc8, 0x97, 0xc1, 0xd8, 0xc9, 0xe2, 0x65, 0xa6, 0x5c, 0xc0, 0xc1, 0xe3, 0xe4, 0x53, 0xc1, 0xb7, 0x95, 0x65, 0x11, 0x1e, 0xeb, 0xfd, 0xcc, 0xe4, 0xc0, 0x32, 0x04, 0xb1, 0x9c, 0xf9, 0x2c, 0x49, 0x5b, 0xe9, 0x63, 0xa6, 0x3c, 0x40, 0xf0, 0xa7, 0xc0, 0xf5, 0x3d, 0xe4, 0xe7, 0x63, 0x92, 0x33, 0x25, 0x86, 0xcf, 0x0c, 0x3c, 0x4f, 0x84, 0x25, 0xf1, 0x57, 0xa3, 0x39, 0xf8, 0x59, 0x48, 0xbf, 0x2f, 0x51, 0x7a, 0x7e, 0x04, 0xd2, 0x6f, 0xa7, 0x3c, 0x36, 0x27, 0xe4, 0xd9, 0x09, 0x3c, 0xdd, 0x86, 0x3c, 0x56, 0xc6, 0x70, 0xb4, 0x42, 0xfa, 0x0a, 0xe0, 0x7a, 0x96, 0x24, 0xb9, 0x13, 0x4a, 0xaa, 0x05, 0x9e, 0x27, 0x0d, 0x92, 0xd2, 0x63, 0x38, 0x8a, 0x20, 0x3d, 0x4f, 0x98, 0x3e, 0x0d, 0xd2, 0x3f, 0x83, 0x79, 0x28, 0xa7, 0x75, 0x19, 0x2c, 0x35, 0x9a, 0x4b, 0x19, 0x03, 0xae, 0x6d, 0xe1, 0x5c, 0x94, 0xfd, 0x31, 0x1c, 0x47, 0x41, 0xc2, 0x76, 0xe0, 0x7a, 0x9a, 0x64, 0x6d, 0x4d, 0x94, 0x9f, 0xb2, 0x1b, 0x78, 0x9e, 0x62, 0x31, 0x5a, 0x2a, 0x8f, 0x43, 0xaa, 0xe5, 0x40, 0xeb, 0xa1, 0xf4, 0xd5, 0x31, 0xf4, 0x40, 0xe5, 0x3a, 0x88, 0x9f, 0x5f, 0xb9, 0x2e, 0xa4, 0x43, 0x7e, 0x0c, 0x4f, 0x39, 0x70, 0xa4, 0x27, 0xcc, 0x39, 0x0f, 0xa4, 0x6f, 0x09, 0x97, 0x81, 0x8d, 0xc6, 0x70, 0xd8, 0xa0, 0xaf, 0x1e, 0x4a, 0x94, 0x9e, 0x5d, 0x80, 0xf4, 0x3b, 0x0c, 0xe9, 0xfb, 0x63, 0x38, 0x60, 0xec, 0xc6, 0x7a, 0x12, 0xd7, 0x22, 0xdb, 0x03, 0x12, 0xda, 0xb1, 0x7c, 0x6c, 0x2d, 0xf8, 0xbe, 0x43, 0xbe, 0x55, 0xe0, 0xdb, 0x40, 0xbe, 0x15, 0xe0, 0xdb, 0x4c, 0xbe, 0x1a, 0xf0, 0x75, 0x90, 0xaf, 0x1c, 0x7c, 0xdf, 0x26, 0x9f, 0x0b, 0x7c, 0x8f, 0x90, 0x6f, 0x1e, 0xf8, 0x36, 0x91, 0x0f, 0x4b, 0xb4, 0x91, 0x7c, 0x59, 0xe0, 0x7b, 0x8c, 0x7c, 0xe9, 0xe0, 0x7b, 0x94, 0x7c, 0xc9, 0xe0, 0xeb, 0x24, 0x9f, 0x99, 0x46, 0x6e, 0xa5, 0xbc, 0x94, 0x25, 0x61, 0x1b, 0x32, 0xd3, 0x77, 0x8f, 0x8b, 0xae, 0x83, 0x76, 0x97, 0xa6, 0xe1, 0x13, 0x2a, 0x7c, 0xbf, 0x76, 0xb0, 0x5f, 0x5b, 0x55, 0x07, 0xe3, 0x21, 0x66, 0x91, 0xe3, 0x25, 0xc8, 0x3b, 0x21, 0x7a, 0x67, 0x01, 0x7a, 0xcf, 0xf1, 0x31, 0x3e, 0x61, 0xb2, 0x9a, 0x52, 0x01, 0xc3, 0x39, 0xa6, 0x0c, 0x53, 0xb2, 0x89, 0xf3, 0x8b, 0xfc, 0x3c, 0x5b, 0xc2, 0x55, 0x9e, 0xcd, 0xbd, 0xac, 0x82, 0x6d, 0x65, 0x97, 0x94, 0x85, 0x4a, 0xaf, 0x72, 0x9e, 0x73, 0xe5, 0x88, 0xd2, 0xaa, 0xa4, 0xb3, 0x63, 0xac, 0x81, 0xef, 0xe2, 0xae, 0xf1, 0x36, 0x7e, 0x1e, 0x91, 0xcb, 0xcf, 0x21, 0x6a, 0xf9, 0xe9, 0x84, 0xd6, 0xf9, 0x06, 0xe1, 0xd5, 0x1c, 0xbe, 0xeb, 0x3c, 0xc6, 0xf2, 0x78, 0x1f, 0xd8, 0xf7, 0x76, 0x1c, 0x01, 0x26, 0x94, 0xb2, 0xd1, 0x90, 0x7e, 0x6d, 0x0c, 0x75, 0x15, 0xa4, 0x5f, 0x0e, 0x88, 0x35, 0xe6, 0x52, 0x11, 0xc3, 0xe5, 0x06, 0xae, 0x79, 0xe3, 0xdd, 0xbc, 0x30, 0x61, 0x2e, 0x2a, 0xa1, 0xd5, 0x28, 0xc5, 0x12, 0x63, 0x61, 0x13, 0x60, 0xa1, 0x63, 0x80, 0xd7, 0x84, 0xba, 0x2a, 0x27, 0x0d, 0x16, 0x1e, 0xd3, 0xf2, 0x28, 0x2f, 0x41, 0xfa, 0x7d, 0x80, 0x57, 0x43, 0x2e, 0xca, 0xce, 0x18, 0xae, 0x6d, 0xc0, 0xb5, 0x69, 0x7c, 0x9b, 0xb2, 0x31, 0x61, 0x2e, 0x4d, 0x84, 0x54, 0xa3, 0x94, 0x65, 0x31, 0x3c, 0x55, 0xf4, 0x6d, 0xcf, 0xa7, 0x14, 0x57, 0x0c, 0x65, 0x1e, 0xe1, 0xd4, 0x2c, 0xde, 0x16, 0x8d, 0xa0, 0x64, 0x42, 0x1a, 0x07, 0x21, 0xd5, 0x96, 0x10, 0x47, 0x97, 0xc2, 0xb9, 0xb2, 0x73, 0x31, 0xd4, 0x93, 0x60, 0xaf, 0x47, 0x01, 0xa7, 0xea, 0x65, 0x70, 0x74, 0xd0, 0x20, 0x61, 0x57, 0x0c, 0x15, 0xe6, 0x14, 0x6c, 0x33, 0x20, 0xf5, 0x72, 0x12, 0x9a, 0x0c, 0x12, 0xbc, 0x31, 0xd4, 0x5a, 0x44, 0x1e, 0x20, 0x75, 0x09, 0xa1, 0xd4, 0x45, 0x08, 0x9d, 0x4f, 0xe8, 0x2c, 0x22, 0x64, 0xe6, 0x13, 0x2a, 0x9d, 0x84, 0xc8, 0x2c, 0x42, 0x63, 0x26, 0x21, 0x31, 0x8d, 0x50, 0xe8, 0x20, 0x04, 0xda, 0x08, 0x7d, 0x66, 0xc2, 0x92, 0x82, 0x58, 0x9a, 0x12, 0x53, 0x56, 0xc0, 0xd4, 0x5e, 0xfe, 0x06, 0xbf, 0x00, 0xbd, 0x62, 0x9e, 0xa9, 0x02, 0xfa, 0xc4, 0x12, 0x53, 0x26, 0x9f, 0xe0, 0xa7, 0xf8, 0x4b, 0xac, 0x8a, 0x27, 0xf3, 0x54, 0x5e, 0x06, 0xba, 0xf6, 0xb2, 0x4f, 0x01, 0x53, 0xdd, 0xd0, 0x1b, 0x8e, 0x29, 0x07, 0x95, 0xb5, 0x4a, 0x26, 0x1b, 0x62, 0xed, 0xbc, 0x99, 0xe7, 0x41, 0x8f, 0x68, 0x75, 0x03, 0x83, 0x29, 0xbf, 0x6a, 0x00, 0xfe, 0x9d, 0xd0, 0x2f, 0x8a, 0xf0, 0x2c, 0x0a, 0xa7, 0x43, 0xef, 0x98, 0xe1, 0x66, 0xa1, 0xfe, 0xd1, 0xaa, 0x97, 0x1a, 0xec, 0x7a, 0x1c, 0x39, 0xf8, 0x45, 0x40, 0x1a, 0xa5, 0xe0, 0x17, 0xaa, 0x06, 0x42, 0x36, 0x7c, 0xc6, 0xc0, 0xf7, 0x3a, 0xa0, 0xcc, 0x20, 0x83, 0x1f, 0x31, 0xd0, 0xfa, 0x0d, 0x69, 0xf6, 0x1a, 0xe2, 0xb7, 0x01, 0xb2, 0x84, 0xd4, 0x6d, 0x06, 0x8e, 0x4d, 0x06, 0x8e, 0x26, 0xe8, 0x09, 0x8d, 0x52, 0x03, 0x06, 0x5a, 0x1d, 0x69, 0xb6, 0x1c, 0x70, 0x25, 0x64, 0x54, 0x1b, 0x64, 0x2c, 0x31, 0xf0, 0x15, 0x00, 0xa6, 0x8c, 0x32, 0x72, 0x0d, 0xb4, 0x54, 0x43, 0x9a, 0x94, 0x70, 0xbc, 0x32, 0x01, 0x38, 0x22, 0xa9, 0xca, 0x44, 0x98, 0x43, 0x19, 0x33, 0x70, 0x9c, 0x84, 0x3e, 0xcf, 0x20, 0x55, 0x39, 0x6e, 0xa0, 0x1d, 0x42, 0xcd, 0x94, 0xc3, 0x80, 0x22, 0x21, 0xe3, 0x05, 0x83, 0x0c, 0x43, 0xf9, 0x95, 0x6d, 0xd0, 0xdb, 0x39, 0xdc, 0xcc, 0x10, 0xd3, 0x41, 0x29, 0x3b, 0x01, 0x41, 0x22, 0x65, 0x6b, 0xd5, 0x80, 0x81, 0xea, 0xa3, 0xb8, 0xd5, 0xc4, 0x53, 0x6f, 0xc8, 0xbb, 0xce, 0xc0, 0xe3, 0x36, 0xe4, 0xe5, 0x32, 0xc4, 0xe7, 0x02, 0x6e, 0x8c, 0xfa, 0x66, 0x1b, 0x68, 0xc9, 0x86, 0x34, 0xf6, 0x70, 0x3c, 0xbb, 0x08, 0x48, 0x31, 0xa4, 0x61, 0x86, 0xf2, 0xb3, 0x93, 0xe1, 0x34, 0x6c, 0xc8, 0x10, 0x7f, 0x18, 0xb0, 0x41, 0xba, 0xb3, 0xc3, 0xa8, 0x27, 0x7b, 0x09, 0x50, 0x22, 0xc2, 0xfb, 0x29, 0xbc, 0x17, 0xf0, 0x22, 0xc2, 0xbb, 0x28, 0xbc, 0x1d, 0x90, 0x23, 0xc2, 0x5b, 0x29, 0xbc, 0x19, 0x30, 0x24, 0xc2, 0xed, 0x14, 0x6e, 0x01, 0x34, 0x89, 0xf0, 0x5a, 0x0a, 0x37, 0x00, 0xae, 0x44, 0x78, 0x25, 0x85, 0x97, 0x03, 0xc2, 0x44, 0xb8, 0x9a, 0xc2, 0x15, 0x80, 0x35, 0x11, 0x76, 0x53, 0xb8, 0x04, 0x50, 0x27, 0xc2, 0x85, 0x14, 0xce, 0x03, 0xfc, 0x89, 0x70, 0x16, 0x85, 0x33, 0x01, 0x89, 0x22, 0x9c, 0x42, 0x61, 0x7b, 0x08, 0xe9, 0x9d, 0xaa, 0x0b, 0x7b, 0x46, 0x15, 0xdf, 0x4f, 0x2d, 0xf6, 0x39, 0xe8, 0x3c, 0xa3, 0x24, 0x95, 0xde, 0xa6, 0xb9, 0x29, 0x97, 0xf6, 0xa9, 0xa4, 0xfb, 0x33, 0x68, 0xb5, 0xa3, 0x58, 0xb5, 0xaa, 0x01, 0x66, 0xc7, 0x13, 0xfc, 0x96, 0xb5, 0x94, 0xb7, 0xf9, 0xa8, 0x97, 0x36, 0xc4, 0xad, 0xa2, 0x38, 0x97, 0xde, 0xcf, 0x36, 0x2a, 0x24, 0x23, 0x2b, 0x82, 0xa7, 0x8c, 0x78, 0x32, 0xa3, 0x78, 0x2a, 0xc3, 0x6d, 0xc3, 0xed, 0x2d, 0xec, 0xfb, 0xcc, 0x46, 0x5f, 0xbf, 0xda, 0x98, 0x82, 0xef, 0x15, 0x97, 0xb2, 0xc6, 0xe1, 0xe9, 0xb4, 0xfb, 0x63, 0x3f, 0xa7, 0x83, 0x9a, 0xe6, 0x32, 0xc7, 0x82, 0xe9, 0xaa, 0xe2, 0x11, 0x4f, 0xce, 0x4c, 0x2e, 0x75, 0x76, 0xd6, 0x6c, 0xb8, 0xa3, 0x45, 0x56, 0x1c, 0xbd, 0xbb, 0xe1, 0x3e, 0xbd, 0x60, 0xc5, 0xb9, 0x83, 0x1b, 0xf2, 0xc9, 0x48, 0x59, 0x70, 0x83, 0xca, 0xb1, 0xa7, 0x99, 0x06, 0x73, 0x4c, 0x1b, 0x8c, 0xef, 0xad, 0x5a, 0x39, 0xf6, 0xf6, 0x59, 0x9e, 0xe7, 0x06, 0x4a, 0x4f, 0x94, 0x2b, 0xab, 0xed, 0xea, 0xa8, 0x76, 0x0a, 0xdc, 0x19, 0x70, 0xe7, 0x3e, 0x98, 0x4e, 0xe1, 0x61, 0x70, 0x17, 0xc0, 0x8d, 0x41, 0xd8, 0x36, 0xee, 0x18, 0x53, 0xe9, 0xe4, 0x52, 0xbb, 0x0c, 0x39, 0x22, 0x42, 0xd6, 0x88, 0x90, 0x39, 0x22, 0xc4, 0x23, 0x42, 0x8a, 0x08, 0xcd, 0xb9, 0x43, 0xab, 0x29, 0x3d, 0x81, 0xba, 0x6b, 0x5a, 0xdd, 0x7e, 0x75, 0xf6, 0x7b, 0x03, 0x58, 0x23, 0x49, 0xb3, 0x60, 0x96, 0xea, 0xd1, 0x6a, 0x9e, 0x1b, 0x58, 0x7c, 0x02, 0xcf, 0x8f, 0x24, 0x6a, 0xab, 0x3a, 0x9b, 0x68, 0xc9, 0x59, 0xb3, 0x85, 0xae, 0x73, 0xea, 0xb4, 0x53, 0xe0, 0xce, 0x80, 0x23, 0x5d, 0xe1, 0x3a, 0x0c, 0xee, 0x02, 0x38, 0xd4, 0xd5, 0x3c, 0x9e, 0x3e, 0xa8, 0xca, 0xab, 0x43, 0x5e, 0xad, 0xf2, 0x6a, 0x96, 0x57, 0x2e, 0xaf, 0xca, 0x7b, 0x03, 0xb4, 0x7e, 0x6a, 0xb7, 0xa7, 0xdb, 0xd3, 0xd3, 0xb3, 0xd1, 0xa5, 0x67, 0x67, 0x17, 0xe8, 0x57, 0x74, 0xd9, 0x05, 0x05, 0x25, 0xd1, 0x61, 0xfd, 0x8a, 0xae, 0xa0, 0xa4, 0xc4, 0x33, 0x15, 0x3d, 0x3a, 0xac, 0x5f, 0xd1, 0x95, 0x78, 0x3c, 0x35, 0xd7, 0x9a, 0x7e, 0x2a, 0x7a, 0x74, 0x58, 0xbf, 0xa2, 0xf3, 0xd4, 0xd4, 0x78, 0x59, 0xd0, 0x35, 0xa0, 0xee, 0xf4, 0x9e, 0x71, 0x74, 0x55, 0x0d, 0x16, 0xec, 0x6b, 0x1c, 0xb3, 0x76, 0x7a, 0x5e, 0x73, 0xf6, 0xad, 0x1a, 0x4e, 0xef, 0xa9, 0x1b, 0x2a, 0x7e, 0xa1, 0xf9, 0x92, 0xb9, 0xa3, 0xec, 0x48, 0x76, 0x6f, 0xfd, 0xb9, 0xd4, 0xee, 0x9a, 0xe3, 0x45, 0x07, 0x9a, 0x3e, 0xb1, 0x6f, 0xae, 0x78, 0x23, 0x6f, 0x6f, 0xc3, 0x85, 0xcc, 0xed, 0xcb, 0x4f, 0x95, 0xbc, 0xd4, 0x32, 0xc1, 0xdb, 0xdd, 0x87, 0xb3, 0x76, 0xad, 0x3c, 0x9b, 0xb2, 0xb5, 0xfa, 0x58, 0xe1, 0xfe, 0xb5, 0xe3, 0xb6, 0x4d, 0xe5, 0xaf, 0xe7, 0xee, 0x59, 0x7d, 0x3e, 0xe3, 0x99, 0x65, 0x27, 0xe7, 0xbf, 0xf8, 0xd0, 0xa7, 0x96, 0x8d, 0x4b, 0x5e, 0xcd, 0xd9, 0xed, 0xfb, 0x30, 0x6d, 0x5b, 0xed, 0xdb, 0xf3, 0x0e, 0xae, 0xbf, 0x98, 0xfc, 0x78, 0xe5, 0xd1, 0xfc, 0xfe, 0xc0, 0xe8, 0xac, 0x1d, 0x2b, 0x4e, 0x2f, 0x3c, 0xd4, 0x3a, 0xa9, 0xb4, 0x95, 0xbe, 0x7c, 0xcb, 0xf7, 0xbf, 0xfe, 0xfe, 0x0d, 0x5b, 0x96, 0xbe, 0x79, 0xdb, 0xdf, 0xff, 0xf9, 0x7f, 0x4d, 0x7f, 0xec, 0x8e, 0x7f, 0xfb, 0xf2, 0x0f, 0xff, 0x6c, 0xe4, 0xe6, 0xa7, 0xef, 0x7f, 0xe7, 0x2b, 0xff, 0xf4, 0x57, 0xff, 0x37, 0xed, 0x91, 0xaf, 0xbe, 0xf2, 0x7b, 0x7f, 0xf3, 0x8d, 0xff, 0xbc, 0xf1, 0xc9, 0x7b, 0xdf, 0xfa, 0xc3, 0x7f, 0x58, 0xf7, 0x3f, 0x33, 0xbe, 0x73, 0xd7, 0xcf, 0xe7, 0xfc, 0xdd, 0x9a, 0x8f, 0x66, 0x7e, 0xef, 0x4f, 0xfe, 0xe3, 0xf6, 0x7f, 0xfe, 0xeb, 0xff, 0x37, 0x6d, 0x58, 0xfc, 0xd3, 0x2f, 0xfd, 0xe0, 0x4f, 0x3f, 0xf8, 0xc2, 0x13, 0xf7, 0xfc, 0xfb, 0x1f, 0xfc, 0xf8, 0x2f, 0xfe, 0xfb, 0xba, 0x6f, 0xdf, 0xf9, 0xb3, 0xdf, 0xff, 0xdb, 0x6f, 0xfe, 0xea, 0x8b, 0xcf, 0xfe, 0xf1, 0xbb, 0x0b, 0x7e, 0xf2, 0xad, 0xcf, 0x92, 0x1e, 0xfd, 0xda, 0xbf, 0xde, 0xfa, 0xbc, 0xff, 0x97, 0x37, 0x3d, 0x75, 0xdf, 0x89, 0x3f, 0xfa, 0xc7, 0xbf, 0xfc, 0xdf, 0xeb, 0xbf, 0x7b, 0xf7, 0x2f, 0xe6, 0xfe, 0xe8, 0xc1, 0x8f, 0x67, 0x3f, 0xf7, 0xc0, 0x7b, 0x8b, 0xfe, 0xe5, 0x61, 0x4d, 0x75, 0x41, 0x5f, 0xec, 0x2a, 0x64, 0xdc, 0xc5, 0x16, 0xd1, 0x59, 0x6e, 0xf8, 0x0e, 0xbf, 0xad, 0xf2, 0x33, 0x86, 0xeb, 0xae, 0xae, 0x2b, 0x38, 0xea, 0x61, 0x23, 0xdb, 0xcc, 0xba, 0x58, 0x37, 0xeb, 0x61, 0xdb, 0xd9, 0x4e, 0xb6, 0x9b, 0x1d, 0x64, 0xaf, 0xc2, 0x08, 0xf7, 0x34, 0x3b, 0xcf, 0x2e, 0x42, 0x83, 0x92, 0xae, 0xe4, 0x28, 0x45, 0xd0, 0x57, 0x7b, 0x94, 0x6a, 0x65, 0xb9, 0xe2, 0x53, 0x1e, 0x52, 0x7a, 0xa0, 0xc7, 0x3e, 0xa6, 0x8c, 0x72, 0x1b, 0xcf, 0xe1, 0x6e, 0xee, 0x8d, 0xfa, 0x0d, 0xf0, 0x93, 0xfc, 0x13, 0x53, 0xaa, 0x2e, 0x5e, 0x0d, 0x68, 0xbd, 0xd0, 0x7a, 0x04, 0xb4, 0x3e, 0xf8, 0x87, 0xb6, 0x41, 0xbd, 0x13, 0x1c, 0xcc, 0x08, 0xd5, 0xbb, 0xc0, 0xd5, 0x12, 0x65, 0x88, 0x46, 0xee, 0xbd, 0x59, 0xec, 0x58, 0xe7, 0x9c, 0x52, 0xad, 0x57, 0x75, 0x51, 0xb8, 0x4f, 0x86, 0xfb, 0x28, 0x6c, 0xc3, 0x50, 0x76, 0x29, 0xf9, 0xaf, 0x43, 0x7f, 0x8e, 0xf0, 0xdb, 0xd1, 0xef, 0x14, 0xfe, 0x19, 0xe8, 0xcf, 0x15, 0xfe, 0x34, 0xf4, 0xe7, 0xb5, 0xa1, 0x9f, 0x56, 0x9a, 0xca, 0x41, 0xe2, 0x90, 0x94, 0x38, 0x24, 0x73, 0xe8, 0xed, 0xea, 0x84, 0xb9, 0x7d, 0x28, 0x3f, 0x0a, 0xc9, 0xdc, 0xba, 0x3a, 0xb3, 0x5d, 0x22, 0xaf, 0xae, 0xce, 0x1c, 0xe1, 0xb3, 0x77, 0x75, 0x3a, 0x85, 0x6f, 0x46, 0x57, 0x67, 0xae, 0xf0, 0xa5, 0x75, 0x75, 0xe6, 0x05, 0x65, 0x1e, 0x56, 0x91, 0x07, 0x49, 0x11, 0x39, 0x04, 0xb4, 0xb2, 0x9a, 0x7e, 0xad, 0x0c, 0xdb, 0x81, 0x9a, 0x5d, 0xd0, 0x0a, 0xe0, 0xeb, 0xdd, 0x6a, 0x81, 0xeb, 0xcd, 0x51, 0x59, 0x23, 0x61, 0x6a, 0x87, 0xa4, 0x72, 0xa2, 0xf6, 0x45, 0x51, 0x7d, 0x82, 0xea, 0x3f, 0x07, 0xd4, 0xd7, 0xa3, 0x68, 0xe5, 0x92, 0xf6, 0x1a, 0xd0, 0x7e, 0x16, 0x45, 0xcb, 0x97, 0xb4, 0xbd, 0x40, 0x7b, 0x23, 0x8a, 0x96, 0x22, 0x69, 0x5d, 0x40, 0xfb, 0x79, 0x24, 0xed, 0x9e, 0x8b, 0x92, 0xd6, 0x04, 0xb4, 0xb7, 0xa3, 0x68, 0x27, 0x25, 0xad, 0x8e, 0x34, 0x85, 0x3b, 0x57, 0xd5, 0x86, 0x2d, 0xf8, 0xf5, 0x27, 0xe7, 0xb2, 0x08, 0xbe, 0xfd, 0x92, 0xaf, 0x40, 0x7d, 0xc0, 0xca, 0xf0, 0xb9, 0x02, 0xfb, 0x10, 0xd7, 0x51, 0xb2, 0xd8, 0xc8, 0xfd, 0xd0, 0x1b, 0x5c, 0x4f, 0x69, 0x76, 0xcf, 0xe5, 0xd9, 0x30, 0x63, 0xb3, 0x72, 0x76, 0x9d, 0x8f, 0x7b, 0x06, 0xb2, 0xf8, 0xc7, 0xf7, 0x93, 0xfd, 0x9a, 0x3e, 0xe8, 0xbb, 0xe3, 0xf0, 0x60, 0xfb, 0x9b, 0x03, 0xf8, 0x6c, 0x24, 0x42, 0xea, 0x72, 0x21, 0xd5, 0x77, 0xb2, 0x40, 0xd6, 0x6f, 0x9d, 0x4e, 0xa9, 0x93, 0x94, 0x81, 0xe8, 0x9a, 0xbf, 0xc7, 0x29, 0x29, 0xbb, 0x49, 0xe3, 0xb2, 0x7b, 0x3b, 0xa3, 0xe8, 0x56, 0x49, 0xdf, 0x88, 0xb1, 0xf7, 0x76, 0x4a, 0x6d, 0x8b, 0xa3, 0xb5, 0x4d, 0xbe, 0x74, 0x25, 0xda, 0x42, 0x6a, 0x8b, 0xdf, 0xee, 0xf9, 0x65, 0x09, 0xcb, 0x65, 0x39, 0x56, 0x77, 0xbb, 0xd7, 0x89, 0x72, 0x46, 0x06, 0x52, 0xcd, 0x24, 0xe3, 0x00, 0x52, 0xb2, 0x59, 0x2e, 0xc8, 0xc9, 0xb1, 0x5a, 0xa7, 0x91, 0xa4, 0xc3, 0x23, 0xaf, 0x4c, 0x73, 0xbf, 0xbf, 0x07, 0x42, 0x49, 0x7e, 0xee, 0xde, 0x30, 0xf2, 0x8a, 0xa5, 0xdd, 0xce, 0x18, 0x5f, 0x53, 0xe4, 0x4f, 0x37, 0x96, 0xb0, 0x7a, 0x3d, 0xea, 0x09, 0xf9, 0xed, 0xf3, 0xa6, 0x1b, 0xf5, 0xaf, 0xf6, 0xc8, 0xf8, 0x1e, 0xcf, 0xc0, 0xdb, 0xc1, 0x91, 0x57, 0x92, 0xda, 0xa1, 0xf7, 0x0c, 0xc4, 0x95, 0x50, 0x24, 0x39, 0x03, 0xde, 0xcc, 0x08, 0x09, 0x16, 0x19, 0x5f, 0xeb, 0x19, 0xf0, 0x72, 0x77, 0xd0, 0xc9, 0x40, 0x17, 0xee, 0x4f, 0x55, 0x17, 0x13, 0xd5, 0x45, 0xbd, 0xbd, 0x73, 0xb0, 0x7d, 0xb0, 0xc3, 0x9b, 0xfe, 0x76, 0xbb, 0x8c, 0xcd, 0xa5, 0xd8, 0x14, 0x88, 0x33, 0x43, 0x9c, 0x49, 0x75, 0x55, 0xbc, 0xc7, 0x4a, 0xa0, 0x66, 0x17, 0xe3, 0xb5, 0xa0, 0x44, 0x51, 0x70, 0xe7, 0xc0, 0x37, 0xda, 0x31, 0x44, 0x3e, 0x27, 0x96, 0xff, 0x4b, 0xaf, 0x16, 0x94, 0xb0, 0xf7, 0xbd, 0x36, 0xf2, 0xbf, 0x08, 0x5c, 0x5f, 0x07, 0x3d, 0x6a, 0x88, 0x5e, 0xe7, 0x80, 0xf9, 0x04, 0x1e, 0xf2, 0x06, 0xda, 0xef, 0x87, 0x6b, 0x8f, 0x1f, 0xbf, 0x9b, 0xc3, 0x58, 0xb7, 0x7f, 0x9e, 0xb1, 0x0c, 0x4b, 0x1b, 0xc5, 0xdd, 0xaa, 0x1f, 0x82, 0x7a, 0xad, 0x8f, 0xa0, 0xd4, 0x4a, 0xca, 0x21, 0xa0, 0xac, 0x8a, 0xb4, 0x8e, 0xa5, 0xf3, 0x25, 0x6d, 0x17, 0xd0, 0xbc, 0x11, 0x14, 0x55, 0x52, 0x3a, 0xe3, 0xa4, 0x32, 0x4b, 0x5a, 0x43, 0x74, 0xaa, 0xaa, 0xf3, 0x92, 0x52, 0x3d, 0x87, 0xf6, 0x2e, 0x46, 0xd0, 0x8e, 0x4a, 0xda, 0xbc, 0x98, 0x54, 0x07, 0x24, 0x25, 0x33, 0x5a, 0xf7, 0xaa, 0x67, 0x24, 0x85, 0x4b, 0x2d, 0x5c, 0x50, 0x1b, 0xa5, 0x59, 0xd8, 0xa2, 0x17, 0x8b, 0x16, 0x1d, 0x6a, 0x22, 0xdd, 0x9f, 0x8d, 0x27, 0xc0, 0xf9, 0xf3, 0x82, 0xa5, 0x70, 0x2d, 0xf1, 0x5b, 0x70, 0x3c, 0x46, 0x2d, 0x4f, 0x50, 0x2b, 0x2f, 0xbd, 0xa8, 0xac, 0xd4, 0x56, 0xe1, 0x3c, 0x4d, 0x8c, 0xfa, 0x66, 0x34, 0x0a, 0xaa, 0x0c, 0xed, 0xc7, 0x10, 0xa4, 0xb2, 0xfb, 0x61, 0xdc, 0xb4, 0xb4, 0x73, 0x8e, 0x07, 0x69, 0x71, 0xf3, 0x48, 0xa6, 0x3c, 0x18, 0x5b, 0x2f, 0xd2, 0x17, 0x2e, 0x48, 0x49, 0x26, 0x9f, 0x78, 0x8a, 0x67, 0x65, 0x0e, 0x96, 0x01, 0x06, 0x9c, 0xc7, 0x8a, 0x58, 0x09, 0x2b, 0x63, 0x95, 0x96, 0x7e, 0x1c, 0x0f, 0x61, 0x7b, 0x26, 0x7d, 0xd0, 0x76, 0xbd, 0x25, 0xcf, 0x66, 0x3a, 0x21, 0xaf, 0xef, 0xc8, 0xeb, 0xbb, 0xf2, 0x2a, 0x39, 0x8f, 0xeb, 0x2d, 0xb3, 0x0c, 0x0f, 0x51, 0x6e, 0xa9, 0x98, 0xdb, 0xd2, 0xce, 0xa5, 0xfd, 0x11, 0x79, 0xa6, 0xb1, 0x4c, 0xa6, 0x42, 0xbe, 0x4e, 0x3c, 0x8d, 0x06, 0xc6, 0x58, 0xbd, 0x34, 0xd2, 0x82, 0xbc, 0xb2, 0x3d, 0x95, 0xeb, 0x72, 0xc0, 0x39, 0xc1, 0xe5, 0x7a, 0x28, 0xf6, 0x38, 0xfd, 0x0f, 0x89, 0x16, 0x99, 0xe6, 0xc7, 0x16, 0x18, 0x47, 0xd6, 0xe3, 0xf9, 0x36, 0x80, 0xce, 0x69, 0xfe, 0x3c, 0xf8, 0x87, 0x71, 0x24, 0x94, 0xfb, 0x61, 0x3b, 0x94, 0xdd, 0x97, 0x39, 0x32, 0xaa, 0x6c, 0xd0, 0xdc, 0x54, 0x4f, 0xab, 0x69, 0x27, 0xa4, 0xc5, 0x8e, 0x28, 0xce, 0x9a, 0xe9, 0xd2, 0xee, 0x1e, 0x19, 0x65, 0x3f, 0x15, 0x34, 0xfb, 0x21, 0xda, 0x2d, 0x79, 0x9e, 0x68, 0xc9, 0x40, 0xab, 0x14, 0x6b, 0xff, 0x37, 0x78, 0xbc, 0x6f, 0xd3, 0xd5, 0xe5, 0x3d, 0x8f, 0x73, 0xe2, 0x29, 0xf3, 0xb0, 0x10, 0xf7, 0x2e, 0x92, 0x93, 0x13, 0xce, 0x63, 0x64, 0x34, 0x65, 0x83, 0x86, 0x4f, 0xd7, 0x0e, 0xb9, 0xf3, 0xb5, 0xca, 0x91, 0xd1, 0x2f, 0x2c, 0xd6, 0x5c, 0xd0, 0x8f, 0xa7, 0x40, 0x3f, 0x9e, 0x8c, 0x29, 0x1c, 0x67, 0xbc, 0xc7, 0x64, 0x6d, 0xd0, 0x77, 0xae, 0x19, 0x7e, 0x6f, 0xa5, 0x42, 0xec, 0x65, 0xb5, 0x2d, 0x1f, 0x87, 0x8e, 0x9e, 0x9e, 0x4e, 0x35, 0xc0, 0xfc, 0x59, 0x9f, 0xad, 0x4b, 0x0d, 0x6d, 0x0b, 0xf1, 0xbb, 0x64, 0x09, 0xa9, 0xea, 0x38, 0xab, 0x4b, 0x4c, 0x45, 0x8b, 0xac, 0x29, 0x1d, 0xd5, 0x6a, 0x48, 0xeb, 0xd3, 0x58, 0x6e, 0x3b, 0x96, 0x90, 0x29, 0xbd, 0x76, 0x2c, 0x23, 0x53, 0x56, 0x8c, 0x3b, 0xca, 0x64, 0xfa, 0xca, 0x75, 0xa8, 0xbb, 0x61, 0xf4, 0x81, 0xda, 0x9e, 0xe5, 0x6b, 0xf9, 0x3e, 0x56, 0xab, 0xec, 0x84, 0xd1, 0x05, 0x6b, 0x34, 0xd3, 0xa9, 0xe5, 0x59, 0x76, 0x7c, 0x7b, 0xa3, 0xdc, 0x9f, 0x83, 0xa1, 0xbb, 0x4e, 0x8b, 0xf6, 0x67, 0xd6, 0x85, 0xc4, 0xa5, 0x00, 0xae, 0xf5, 0x02, 0x23, 0x81, 0x4d, 0xde, 0xa1, 0x46, 0x4e, 0x27, 0x90, 0x9f, 0x8a, 0x90, 0xd2, 0x2e, 0xa5, 0xf4, 0x24, 0x2e, 0x2d, 0x70, 0x65, 0x48, 0x29, 0x65, 0x20, 0x45, 0x21, 0x29, 0xdb, 0x22, 0xa4, 0xe4, 0x48, 0x29, 0xee, 0xc4, 0xb5, 0xa2, 0x69, 0x15, 0xc7, 0x85, 0x94, 0x35, 0x93, 0x20, 0x85, 0x4a, 0x34, 0x51, 0x25, 0xa5, 0x2c, 0x24, 0x29, 0x76, 0xac, 0x35, 0x29, 0x29, 0x4d, 0xaf, 0x3d, 0xc7, 0x4e, 0x59, 0x7b, 0x50, 0x6b, 0xcc, 0x29, 0x6a, 0x91, 0xad, 0x18, 0xcf, 0x2f, 0xc3, 0x73, 0xfd, 0x65, 0xfd, 0x91, 0xf4, 0xcd, 0x52, 0xfa, 0x4e, 0xef, 0x11, 0x77, 0x40, 0x6b, 0x18, 0x19, 0xe4, 0xf7, 0xbd, 0x8f, 0xed, 0x53, 0xa3, 0xbb, 0x5f, 0x6b, 0xc2, 0x18, 0xab, 0x03, 0xfa, 0x0a, 0x7c, 0xf3, 0x25, 0x49, 0x6b, 0xc0, 0xa7, 0x21, 0xd4, 0xb7, 0x34, 0x17, 0x96, 0x2c, 0x6a, 0xdb, 0xea, 0xda, 0x00, 0x74, 0x71, 0xd6, 0x02, 0xce, 0xc3, 0x1e, 0xd6, 0xa2, 0xd3, 0x1b, 0xd3, 0x56, 0xae, 0x6b, 0xb4, 0xd2, 0x89, 0xef, 0x5b, 0xa5, 0xf6, 0xae, 0xc5, 0xa0, 0xab, 0x88, 0xbb, 0xf3, 0x88, 0xd0, 0x7f, 0x66, 0xbd, 0xae, 0xff, 0xf5, 0x8d, 0x06, 0xfd, 0xf3, 0xa5, 0xfe, 0xab, 0xc6, 0xf3, 0x6b, 0x0c, 0xfa, 0x1b, 0xd2, 0x07, 0x44, 0x29, 0x1a, 0x4e, 0x7a, 0x0f, 0x89, 0x52, 0x98, 0x70, 0xef, 0x73, 0xe3, 0xc8, 0x30, 0x7f, 0x8b, 0x99, 0xd7, 0x5e, 0xf7, 0x41, 0x1f, 0x84, 0x9a, 0xe2, 0x95, 0x64, 0x46, 0x7f, 0x61, 0x49, 0x89, 0x12, 0xbf, 0x24, 0x53, 0xc9, 0x80, 0x12, 0xd1, 0x1c, 0xf5, 0xd3, 0x01, 0xd0, 0xa4, 0x41, 0xf8, 0xcb, 0x3f, 0x15, 0x25, 0xc9, 0xec, 0x0b, 0xd5, 0x55, 0x36, 0xa1, 0xcf, 0x12, 0x46, 0xf1, 0x8c, 0xf6, 0xb0, 0x3f, 0xa5, 0x26, 0xa4, 0xc9, 0x44, 0x0c, 0xdf, 0x32, 0xe1, 0x1f, 0x19, 0x75, 0x00, 0x66, 0x0b, 0xbf, 0x85, 0xfb, 0x1b, 0x7a, 0x84, 0xa5, 0x9f, 0x51, 0xce, 0x28, 0x1e, 0x8b, 0xca, 0x9a, 0xcd, 0x19, 0xcc, 0x61, 0x51, 0xcb, 0xf1, 0x59, 0x7c, 0x85, 0xfe, 0x6c, 0x1f, 0xbf, 0xd6, 0xdc, 0xcc, 0x22, 0x9e, 0xe8, 0x06, 0x68, 0xaf, 0x65, 0x29, 0xce, 0xd8, 0xfd, 0xa9, 0xfa, 0xdc, 0xba, 0x7c, 0x58, 0xea, 0x6a, 0x8b, 0x5c, 0xeb, 0x4e, 0x82, 0x5e, 0x26, 0x0b, 0xcf, 0x1b, 0x95, 0xdf, 0x28, 0x60, 0xf2, 0x7b, 0x69, 0xde, 0xde, 0xd8, 0x7c, 0x1a, 0xaf, 0x24, 0x9f, 0x6d, 0x22, 0x9f, 0x2f, 0xee, 0x8b, 0xcc, 0xc7, 0x32, 0x70, 0xe5, 0xf9, 0x78, 0xaf, 0x24, 0x9f, 0x32, 0x99, 0x4f, 0x6d, 0x54, 0x3e, 0x99, 0x89, 0xf2, 0x11, 0x4f, 0xf6, 0xc1, 0x62, 0x36, 0x1a, 0x9f, 0xee, 0x8b, 0x7c, 0xe9, 0x8b, 0x7c, 0x15, 0x59, 0x1e, 0x7c, 0x3e, 0xd9, 0x68, 0x17, 0x2b, 0x01, 0x02, 0xb7, 0x77, 0xe4, 0xd1, 0x78, 0xa4, 0x9a, 0xb4, 0x84, 0x3e, 0x4e, 0x3c, 0xdf, 0x0f, 0x9d, 0xc8, 0x98, 0x26, 0x90, 0x75, 0x5f, 0x27, 0x71, 0xe5, 0x11, 0xd7, 0xa9, 0xf0, 0x73, 0xce, 0xeb, 0x4a, 0xca, 0x5c, 0xf4, 0xdc, 0x38, 0xe6, 0x4c, 0xc6, 0xbc, 0x7e, 0xed, 0x38, 0xae, 0x63, 0x64, 0xec, 0xd7, 0xf7, 0x5c, 0xe0, 0x4e, 0x8b, 0xf0, 0xc9, 0xaf, 0xae, 0xd6, 0x00, 0x8c, 0x6c, 0xa1, 0x15, 0xac, 0xb6, 0xbb, 0x16, 0xb5, 0xad, 0x61, 0xac, 0x4e, 0xd6, 0x50, 0xe4, 0x8e, 0x0b, 0x56, 0x7f, 0x05, 0x75, 0x75, 0x47, 0xba, 0xa8, 0xab, 0x8c, 0xdc, 0xc8, 0xba, 0x32, 0x8f, 0xe9, 0xe5, 0x89, 0xdd, 0xf5, 0x30, 0xd7, 0xea, 0x0e, 0xca, 0x27, 0xda, 0x36, 0xbd, 0x34, 0xb6, 0x80, 0x71, 0x87, 0x82, 0x7d, 0xa3, 0x1e, 0x6f, 0xaa, 0x88, 0xcd, 0xd3, 0xd3, 0x2b, 0xf2, 0xbc, 0xf9, 0xa0, 0x37, 0x39, 0x22, 0xcf, 0x16, 0xb9, 0xcb, 0xc0, 0x06, 0xf5, 0xf5, 0x42, 0xdd, 0x77, 0xe9, 0xb9, 0x7c, 0x92, 0x3c, 0x25, 0xd2, 0x2a, 0x76, 0x0a, 0x7b, 0x2d, 0x2c, 0x90, 0x02, 0xd7, 0xb9, 0x56, 0x71, 0x1e, 0xa4, 0xbe, 0x0b, 0x61, 0x46, 0x8a, 0xf8, 0x42, 0x6d, 0x3d, 0x8b, 0x93, 0x9f, 0x1c, 0x83, 0xde, 0xbc, 0x24, 0x2a, 0x3f, 0xbb, 0x21, 0xbf, 0x16, 0xcc, 0x0f, 0xdf, 0x5a, 0xc2, 0x27, 0xe4, 0x4c, 0x7c, 0x89, 0x36, 0xa2, 0xd4, 0x71, 0xdf, 0x38, 0xa7, 0x6f, 0xa0, 0xd7, 0x15, 0x33, 0x3e, 0xde, 0x3d, 0xd9, 0xe2, 0x65, 0x5a, 0x95, 0xfa, 0x40, 0x6c, 0x7d, 0xc9, 0xba, 0xca, 0xd3, 0xeb, 0x64, 0xba, 0xbb, 0x2c, 0x88, 0x77, 0xf2, 0xe3, 0x51, 0x76, 0xb7, 0xd6, 0xe1, 0x4d, 0x8d, 0x97, 0x46, 0xbc, 0x11, 0x54, 0x3b, 0xaa, 0x51, 0x4d, 0xe2, 0xde, 0xa1, 0xe1, 0xe9, 0xa0, 0xb7, 0xdd, 0x53, 0x1a, 0xf2, 0x9b, 0xdc, 0x74, 0x9e, 0x66, 0x52, 0x3b, 0x58, 0xd6, 0x46, 0xd9, 0x16, 0x85, 0x6c, 0xc8, 0xb8, 0x47, 0x27, 0x6c, 0x39, 0x8b, 0x27, 0xc1, 0x72, 0x5e, 0x03, 0xcb, 0x51, 0xed, 0xae, 0x12, 0x05, 0x2c, 0x67, 0x49, 0x5c, 0xcb, 0xc9, 0x6f, 0xc2, 0xd6, 0xd5, 0xf8, 0x36, 0x1c, 0xd8, 0x4e, 0x16, 0xd4, 0x66, 0x69, 0xa8, 0xa5, 0x5d, 0x52, 0x20, 0xea, 0x34, 0x9d, 0x5d, 0x9d, 0x9d, 0x58, 0x97, 0x18, 0xed, 0xc4, 0xb6, 0x42, 0x8f, 0x67, 0xc7, 0xb0, 0xf7, 0x82, 0x79, 0x72, 0x5d, 0x64, 0x3e, 0x5f, 0x7d, 0x4d, 0xe4, 0x73, 0x53, 0x4f, 0xf8, 0x5e, 0x4d, 0x6e, 0xc7, 0x7b, 0x05, 0xa5, 0x82, 0xb1, 0x4e, 0x92, 0x36, 0x95, 0x65, 0xd8, 0x2e, 0x91, 0x65, 0x50, 0x99, 0xa2, 0x64, 0x37, 0x48, 0xd9, 0x25, 0x06, 0xd9, 0x4d, 0xd7, 0x6c, 0x07, 0xfd, 0x60, 0x07, 0xf5, 0xee, 0x20, 0xd6, 0x3a, 0x7e, 0x9f, 0xd5, 0xe2, 0x32, 0x69, 0x74, 0x2e, 0x2a, 0xbf, 0xc7, 0xe5, 0x71, 0x8d, 0x74, 0xd2, 0xce, 0x49, 0x7a, 0x2b, 0x07, 0xbf, 0x94, 0x32, 0xf2, 0xb2, 0xa3, 0x26, 0xd8, 0x46, 0xf3, 0x3e, 0x08, 0x35, 0xde, 0xf8, 0xfe, 0x0f, 0xa9, 0x0e, 0x60, 0x3a, 0x34, 0xf2, 0x32, 0xbb, 0x11, 0xbf, 0xcb, 0xdc, 0x1e, 0xc4, 0x27, 0x8c, 0x30, 0xca, 0x31, 0x48, 0x64, 0x0f, 0x87, 0x25, 0x7e, 0x1c, 0x25, 0x91, 0x4e, 0xe6, 0x67, 0x67, 0x1e, 0x0b, 0xb6, 0x89, 0xf6, 0xe7, 0x93, 0xae, 0xb9, 0x56, 0x07, 0xed, 0xd1, 0x62, 0xed, 0x62, 0x7d, 0xd3, 0x9f, 0x82, 0xeb, 0xa3, 0x64, 0x43, 0x84, 0x03, 0xb6, 0xd5, 0x6b, 0xc6, 0x91, 0xea, 0xaf, 0x06, 0x2c, 0x5f, 0x9b, 0xcb, 0x42, 0xfd, 0xd5, 0x20, 0xef, 0xff, 0x85, 0x36, 0x76, 0x3d, 0xee, 0x40, 0x01, 0x0b, 0x7b, 0xd4, 0x97, 0x56, 0xde, 0xaf, 0x75, 0xfa, 0x1c, 0xf0, 0xbf, 0xd9, 0x67, 0x2b, 0x0f, 0xfa, 0x2c, 0x3c, 0x30, 0xc6, 0xe4, 0xce, 0xa4, 0x07, 0x42, 0x2d, 0x63, 0x32, 0xe6, 0x59, 0x86, 0x33, 0x7d, 0xf6, 0x59, 0xb1, 0xd0, 0xa0, 0x7a, 0x23, 0x85, 0x72, 0xe9, 0x1d, 0x3d, 0xe8, 0xc7, 0xb5, 0x87, 0x30, 0x0f, 0x68, 0x6d, 0x03, 0xd4, 0x9f, 0x73, 0xef, 0x00, 0x0b, 0xb8, 0x82, 0x70, 0x23, 0x69, 0xff, 0x85, 0x77, 0x7f, 0xc1, 0x82, 0x14, 0x71, 0x1a, 0xa4, 0x38, 0x09, 0xb2, 0x00, 0xc6, 0xfd, 0xc5, 0x30, 0xf2, 0x77, 0xc1, 0xd8, 0xbf, 0x1c, 0x86, 0x59, 0x35, 0x30, 0x48, 0x5a, 0x0e, 0x1d, 0x41, 0x3d, 0xd4, 0xcb, 0x76, 0x5a, 0x45, 0xd9, 0x09, 0xff, 0xf8, 0x24, 0xd6, 0x04, 0x0e, 0x67, 0x23, 0xd3, 0xc0, 0x59, 0xc0, 0x25, 0x89, 0x15, 0x17, 0xb1, 0xd2, 0x82, 0x2b, 0x2c, 0xb8, 0xb6, 0x82, 0xab, 0x2a, 0xb8, 0x9e, 0x82, 0x2b, 0x29, 0x44, 0x11, 0x73, 0x00, 0x7a, 0x8e, 0x14, 0x35, 0xea, 0x2f, 0x80, 0xfb, 0xb2, 0x9d, 0xde, 0x74, 0x82, 0x1c, 0xb2, 0xc1, 0xd2, 0x73, 0xc0, 0x39, 0xc1, 0xe5, 0x82, 0xcb, 0x03, 0x97, 0xcf, 0x12, 0xa7, 0xbd, 0xdd, 0xa5, 0xed, 0x80, 0x31, 0x84, 0x4b, 0xdb, 0x55, 0xb9, 0xae, 0x08, 0xf8, 0xe6, 0x81, 0x2b, 0x06, 0x37, 0x1f, 0x5c, 0x09, 0xb8, 0x85, 0x97, 0x49, 0x0b, 0xfd, 0xfd, 0x73, 0x30, 0xfa, 0x73, 0x69, 0x3f, 0xa8, 0x5c, 0x97, 0x0a, 0x7c, 0x69, 0xe0, 0x10, 0x69, 0x19, 0xe0, 0x32, 0xc1, 0xcd, 0xba, 0x4c, 0xda, 0x37, 0xfb, 0xb1, 0xc4, 0xf0, 0x8f, 0xb3, 0x22, 0xe8, 0x59, 0x4f, 0x80, 0x7b, 0x07, 0xdc, 0xbb, 0xe0, 0xde, 0xdc, 0xa6, 0xcf, 0x7f, 0xa0, 0xe6, 0x15, 0xbf, 0x05, 0xb8, 0xa0, 0xf4, 0x35, 0xfd, 0x97, 0xab, 0x83, 0x2d, 0x24, 0x6f, 0x0b, 0xc9, 0x7b, 0x12, 0x64, 0x3c, 0x05, 0xee, 0x69, 0x70, 0xcf, 0x82, 0xdb, 0xb2, 0x4d, 0x5f, 0x85, 0x12, 0xf2, 0xb6, 0x90, 0xa4, 0x7b, 0xe9, 0xdf, 0x70, 0xa6, 0xa7, 0x13, 0xee, 0x5d, 0x05, 0xdc, 0xb5, 0x7a, 0x18, 0x26, 0xb4, 0xcc, 0x09, 0x68, 0xa7, 0xb4, 0x06, 0xf8, 0x3f, 0xa3, 0x35, 0xc2, 0xff, 0x39, 0xad, 0x09, 0xad, 0x81, 0xf6, 0xb1, 0x0d, 0x53, 0xfc, 0x05, 0x8a, 0x1f, 0xd3, 0xe3, 0x61, 0x94, 0xa7, 0x8a, 0x71, 0x1a, 0xf9, 0x1d, 0x06, 0xbf, 0xd5, 0xe0, 0x37, 0x1b, 0xfc, 0xdc, 0xe0, 0x57, 0x74, 0xff, 0x65, 0xf5, 0x69, 0x26, 0x7d, 0x5a, 0x48, 0x1f, 0xfc, 0x42, 0x41, 0xb3, 0xd4, 0xa7, 0x99, 0xf4, 0x69, 0x21, 0x7d, 0x64, 0x3c, 0xe9, 0xd3, 0x1c, 0xf2, 0x3b, 0x0c, 0x7e, 0xab, 0xc1, 0x6f, 0x36, 0xf8, 0xb9, 0xc1, 0xaf, 0xe8, 0xfe, 0xa8, 0x33, 0x4f, 0x73, 0xc1, 0xca, 0x17, 0x32, 0x0f, 0xab, 0xa6, 0x51, 0xed, 0x29, 0xf9, 0xa6, 0x0b, 0x9e, 0x79, 0x7a, 0xeb, 0x19, 0x65, 0x7c, 0xf6, 0xa0, 0x1a, 0xf2, 0x39, 0x42, 0x3e, 0x6b, 0xc8, 0x67, 0x0e, 0xf9, 0x78, 0xc8, 0xa7, 0xe0, 0x2e, 0xe7, 0x45, 0x6d, 0x25, 0xca, 0x39, 0x6b, 0xe1, 0x02, 0x7e, 0xb1, 0x40, 0xe9, 0x82, 0x16, 0x1a, 0x66, 0x86, 0xee, 0xd5, 0x69, 0xee, 0xa0, 0xdc, 0x6f, 0x8b, 0xad, 0xc6, 0x4c, 0x6a, 0x03, 0x32, 0x00, 0x0b, 0x25, 0x78, 0xbe, 0xfd, 0x6d, 0xa5, 0x8c, 0xb9, 0xfb, 0x98, 0x19, 0x9c, 0x95, 0x76, 0xc0, 0x59, 0xa1, 0x5d, 0x76, 0x69, 0x75, 0xaa, 0xb2, 0x15, 0xd2, 0x3f, 0xe8, 0xb0, 0x97, 0x32, 0x75, 0x0d, 0xfe, 0xbb, 0xd6, 0x54, 0x79, 0xf1, 0xc3, 0x08, 0xd0, 0x46, 0xe1, 0xce, 0xbf, 0xdb, 0x5c, 0x30, 0xd3, 0x52, 0xbb, 0x4a, 0x81, 0x32, 0x73, 0x8d, 0x35, 0x15, 0x62, 0x1f, 0xc9, 0xd7, 0xee, 0x1b, 0x19, 0x56, 0x55, 0x68, 0xe5, 0x86, 0xd3, 0x01, 0xf9, 0x23, 0xa3, 0x56, 0x68, 0x83, 0x6f, 0x71, 0x33, 0xf3, 0x2d, 0xa5, 0xcc, 0x3a, 0x3c, 0xc0, 0x76, 0x88, 0xfc, 0x79, 0x10, 0x3f, 0xb2, 0x84, 0x2b, 0x59, 0x42, 0x8a, 0x19, 0x72, 0x40, 0x49, 0xf1, 0x64, 0x0c, 0xbf, 0xcc, 0x76, 0xf8, 0xec, 0xc3, 0xa3, 0xd6, 0xd9, 0x5a, 0x8d, 0xcf, 0xac, 0x2a, 0x5e, 0x8b, 0xaa, 0xa0, 0x0c, 0xd4, 0x18, 0x24, 0x5b, 0xc3, 0xb2, 0x50, 0x12, 0xe8, 0x52, 0xba, 0x26, 0xc5, 0x9f, 0xad, 0x97, 0x47, 0x94, 0x10, 0x4a, 0x8a, 0x5f, 0x87, 0x66, 0x3c, 0x88, 0x9f, 0xc7, 0xe5, 0x6d, 0x8b, 0xa0, 0x8d, 0xf2, 0xa6, 0x60, 0x1c, 0xc7, 0x4f, 0x00, 0xb3, 0xb3, 0x9d, 0xf2, 0xfb, 0x55, 0x69, 0x34, 0xf2, 0x70, 0x40, 0xeb, 0x57, 0xe7, 0xb3, 0x85, 0xeb, 0x44, 0xcf, 0x4f, 0x84, 0x68, 0x8f, 0x9f, 0xa3, 0x3c, 0x88, 0xa7, 0xe2, 0x88, 0xd3, 0xa2, 0x61, 0x84, 0x0e, 0x77, 0xb6, 0x87, 0x83, 0x95, 0x9d, 0x07, 0x14, 0x61, 0x7f, 0xc4, 0xbf, 0xc9, 0xd8, 0xa9, 0x46, 0xcd, 0x53, 0x2a, 0xf6, 0x2c, 0xb2, 0x85, 0xd0, 0x0f, 0x77, 0x43, 0xed, 0xe1, 0xa9, 0xd6, 0x1c, 0xa6, 0xd6, 0x03, 0x06, 0x1a, 0x74, 0x52, 0x78, 0xe6, 0x00, 0xf3, 0x7c, 0x10, 0xac, 0x67, 0x6c, 0x77, 0x28, 0xde, 0x06, 0xf1, 0x5e, 0x88, 0x2f, 0xb0, 0xf4, 0xd1, 0x29, 0xc6, 0xe6, 0x7a, 0xfb, 0xb9, 0x61, 0x66, 0x06, 0x67, 0xa9, 0x5e, 0x85, 0xe7, 0xc3, 0x43, 0x8b, 0xbc, 0x6a, 0x12, 0x86, 0xb9, 0xbc, 0x0f, 0x94, 0x67, 0xba, 0x7e, 0xd5, 0xf0, 0x5f, 0x9f, 0x01, 0xff, 0xe6, 0xfa, 0x54, 0x9d, 0x1f, 0x9c, 0x15, 0x9c, 0x2d, 0x94, 0xee, 0xd7, 0xec, 0xfd, 0x7d, 0x7c, 0x54, 0xe5, 0xb5, 0x28, 0x8e, 0xaf, 0x3d, 0x99, 0x0c, 0xc3, 0x30, 0xc6, 0x31, 0xc6, 0x34, 0xa5, 0x29, 0x6e, 0xc6, 0x21, 0x0e, 0x61, 0xc8, 0x44, 0x9a, 0x72, 0x72, 0x68, 0x8a, 0x33, 0x93, 0xb7, 0xc9, 0x10, 0x86, 0x38, 0x09, 0x98, 0x5a, 0xaa, 0x3b, 0x90, 0xcc, 0x24, 0x90, 0x97, 0x71, 0x32, 0x20, 0x72, 0x73, 0x75, 0x12, 0x22, 0xc6, 0x97, 0x1a, 0x04, 0xe4, 0x7a, 0xfc, 0x7a, 0x7b, 0x3d, 0x9e, 0x5e, 0x4b, 0xf1, 0xa5, 0xd4, 0x72, 0xbc, 0x94, 0xc3, 0xd1, 0x48, 0xa9, 0x22, 0xb5, 0x16, 0x15, 0x29, 0xe5, 0x50, 0xa5, 0xd4, 0x12, 0xa4, 0x08, 0x94, 0x52, 0xa5, 0x31, 0x64, 0xff, 0xd6, 0x5a, 0xcf, 0x9e, 0xb7, 0x00, 0x96, 0x9e, 0x73, 0x7f, 0x9f, 0xcf, 0xfd, 0xc3, 0xc0, 0x9e, 0xbd, 0x9f, 0xf7, 0xf5, 0xac, 0x67, 0x3d, 0xeb, 0xe5, 0x79, 0xb5, 0xc3, 0x18, 0x20, 0x67, 0xa4, 0x9c, 0x69, 0x2c, 0xf2, 0x6f, 0xc6, 0x6f, 0x3d, 0x43, 0x66, 0x3a, 0x96, 0x73, 0x9e, 0x57, 0xae, 0xc5, 0x61, 0x54, 0xd7, 0x76, 0x9e, 0x20, 0x97, 0x4f, 0x0a, 0xea, 0xbd, 0x6e, 0xfc, 0x1a, 0x2e, 0xe6, 0x53, 0x2b, 0x83, 0xd6, 0x8f, 0x8e, 0xcf, 0xd6, 0x81, 0x3e, 0x3a, 0xe5, 0x0f, 0xcf, 0xda, 0x08, 0xcf, 0x7d, 0xb4, 0xe0, 0x3e, 0x68, 0x67, 0xfc, 0x5a, 0x31, 0xc7, 0x29, 0x8a, 0xfc, 0xd1, 0xf1, 0xaf, 0x63, 0xfb, 0x69, 0x31, 0x8c, 0x14, 0x03, 0x09, 0xd4, 0x80, 0x61, 0x3a, 0x45, 0x6f, 0xfc, 0x19, 0x7c, 0x55, 0xce, 0xa8, 0xfd, 0x80, 0xf4, 0x1f, 0xa2, 0x12, 0x67, 0x06, 0xb7, 0x20, 0xc6, 0xfb, 0x78, 0x48, 0x86, 0xd0, 0xe4, 0x3f, 0x6c, 0xfe, 0xe8, 0xd5, 0x62, 0x6b, 0x6c, 0xcd, 0x1f, 0x7e, 0x38, 0xd5, 0x25, 0xa8, 0x4b, 0xd6, 0x15, 0x5c, 0x4f, 0x54, 0xf0, 0xf1, 0xab, 0x32, 0xfc, 0xe1, 0x87, 0x74, 0xb7, 0x0c, 0xc8, 0xe8, 0x2f, 0xa8, 0x20, 0x1e, 0x46, 0xb7, 0xc9, 0xea, 0x83, 0x59, 0xfc, 0x36, 0xd2, 0xd8, 0x1f, 0x4a, 0x56, 0xd9, 0xd3, 0x2b, 0xa4, 0xff, 0xbd, 0xea, 0x56, 0x77, 0x67, 0xfe, 0x7a, 0x97, 0xd0, 0x9e, 0x62, 0xd0, 0xe7, 0xa2, 0x9e, 0x41, 0xf2, 0x4c, 0xed, 0xb3, 0x94, 0x11, 0x15, 0xd1, 0xdc, 0x66, 0x27, 0xc2, 0x6d, 0xa4, 0x32, 0xf1, 0x41, 0x98, 0x8c, 0xbf, 0xdf, 0x8c, 0x5f, 0x46, 0x5d, 0x2b, 0xd1, 0x11, 0xc6, 0xc2, 0x7e, 0x49, 0xd4, 0x9c, 0x08, 0xe1, 0xf2, 0x53, 0x43, 0x13, 0xdf, 0x92, 0xb8, 0xbd, 0x5d, 0xe8, 0x69, 0xf7, 0xaa, 0x21, 0x2f, 0xaf, 0x1b, 0xd4, 0x87, 0x0c, 0xa2, 0x2c, 0x9f, 0x2b, 0x98, 0x87, 0xd8, 0xd2, 0x07, 0xcd, 0x8c, 0x33, 0x83, 0x48, 0x21, 0xf2, 0x60, 0xff, 0x6c, 0xf6, 0x37, 0xa7, 0xe6, 0x87, 0xbf, 0x06, 0x0e, 0x35, 0x06, 0x35, 0xea, 0x66, 0xaa, 0xa6, 0xb4, 0x64, 0xad, 0xd8, 0xc1, 0xa0, 0xe5, 0x9f, 0xc1, 0x71, 0x33, 0xb9, 0x5f, 0x00, 0xf5, 0x8b, 0x7b, 0xb1, 0x79, 0x43, 0x59, 0x66, 0xf1, 0xb6, 0x0b, 0x08, 0x74, 0xbd, 0x70, 0x35, 0xa6, 0x26, 0x5e, 0x91, 0xc3, 0x25, 0xd2, 0x97, 0x29, 0x15, 0x8e, 0xcb, 0xc6, 0xa0, 0xd2, 0x68, 0xed, 0x70, 0xdc, 0x9d, 0xc9, 0x29, 0x32, 0x52, 0xca, 0x8b, 0x69, 0xe5, 0xd1, 0x7b, 0x4a, 0xa2, 0xbc, 0x7b, 0xb5, 0xdc, 0xc6, 0x97, 0x92, 0xea, 0x2f, 0xf2, 0xce, 0xbd, 0x38, 0x6f, 0xa7, 0x24, 0x56, 0x5e, 0x2e, 0x3a, 0x0e, 0xba, 0x78, 0x8b, 0xae, 0xe7, 0x36, 0x74, 0x1a, 0x65, 0x27, 0x62, 0xc3, 0x05, 0x43, 0xc7, 0xbd, 0x6c, 0xb7, 0x1f, 0x95, 0x6f, 0x9d, 0xe5, 0xc4, 0x7e, 0xe3, 0x46, 0x9f, 0x1a, 0xaf, 0x5b, 0xfb, 0x2e, 0x3e, 0x5e, 0xc3, 0xa3, 0x2c, 0x56, 0xf9, 0x0e, 0xe3, 0x66, 0xca, 0x89, 0xfa, 0x6a, 0xc8, 0x64, 0x3c, 0x4e, 0xdf, 0x1e, 0xfc, 0xf6, 0xc4, 0xb8, 0x96, 0x26, 0xc6, 0x30, 0x71, 0x32, 0x9d, 0xc6, 0x55, 0x49, 0x17, 0xcf, 0x54, 0x43, 0xa4, 0x49, 0x7e, 0x1e, 0x14, 0xe2, 0x4e, 0xbb, 0x91, 0x66, 0x2c, 0x1d, 0x6b, 0x36, 0xbe, 0xdc, 0xcf, 0xb6, 0xfc, 0x57, 0xca, 0x15, 0x67, 0xd0, 0xf7, 0x41, 0xb1, 0xf4, 0xfb, 0x89, 0x4a, 0x16, 0xb9, 0xfa, 0xc0, 0xeb, 0x12, 0x6e, 0xcb, 0x37, 0xc0, 0x28, 0x4e, 0xa3, 0xd7, 0xd1, 0x11, 0xd6, 0xda, 0x43, 0x7a, 0xac, 0xc9, 0x98, 0xfc, 0x77, 0xaf, 0x9a, 0x3e, 0x65, 0x77, 0xef, 0x58, 0x72, 0x75, 0xea, 0x25, 0xdd, 0xe3, 0xe3, 0x8f, 0x73, 0xbb, 0xee, 0xe1, 0xf8, 0x97, 0x75, 0xff, 0xad, 0xf4, 0xe5, 0x89, 0xf2, 0xce, 0x5f, 0xd2, 0x3d, 0x3e, 0xfe, 0x7f, 0xf5, 0x4f, 0x1d, 0x97, 0x9f, 0x3a, 0xae, 0xbe, 0x7f, 0x6f, 0xf8, 0xd0, 0xb8, 0xfa, 0xfe, 0xbd, 0xe1, 0x3f, 0x1b, 0x57, 0xdf, 0xbf, 0x15, 0x2e, 0xc6, 0xa1, 0x8e, 0x3b, 0x92, 0x63, 0x52, 0xa5, 0x41, 0x61, 0xef, 0x98, 0x72, 0x3e, 0x22, 0xcb, 0xb3, 0x9d, 0xf8, 0x0c, 0x8d, 0x5b, 0xa0, 0xee, 0xdf, 0x45, 0xb7, 0x15, 0xa0, 0xa5, 0xfd, 0x82, 0x1a, 0x0e, 0x1a, 0xf1, 0x37, 0xaa, 0x9d, 0xbd, 0xc1, 0x96, 0x00, 0xe4, 0xc7, 0x47, 0xda, 0x28, 0x5f, 0x5d, 0x06, 0xfd, 0xa3, 0x1f, 0x5d, 0xc6, 0xcc, 0xcb, 0xdc, 0xf4, 0x50, 0x06, 0xa4, 0x83, 0x44, 0x75, 0x2b, 0xf5, 0x76, 0x8b, 0xa7, 0xb7, 0xb6, 0xcc, 0x42, 0x4b, 0xa1, 0x4d, 0x1f, 0xed, 0x36, 0xee, 0x7e, 0x27, 0xd6, 0x98, 0x71, 0xcb, 0x5e, 0xf5, 0x94, 0x51, 0x0f, 0x53, 0x42, 0xba, 0x0a, 0xbe, 0x89, 0x16, 0x2c, 0xed, 0x59, 0x15, 0xbd, 0xd0, 0xcf, 0xd3, 0xc6, 0xeb, 0x5c, 0x7c, 0x13, 0x66, 0x44, 0x8a, 0xaf, 0xd9, 0xff, 0x68, 0xdf, 0x04, 0xfd, 0x59, 0x40, 0x93, 0xa8, 0x38, 0x1f, 0x56, 0x42, 0x74, 0x02, 0xfa, 0xdf, 0xe0, 0x46, 0x31, 0x4e, 0xb9, 0x91, 0x3f, 0xe7, 0x77, 0x32, 0xd0, 0xcb, 0x77, 0x9a, 0xe9, 0xba, 0x0e, 0x1a, 0x2d, 0x70, 0x7d, 0x88, 0x6f, 0x09, 0xb1, 0x7e, 0x89, 0xfd, 0xbe, 0xd2, 0x05, 0xf0, 0x21, 0xfa, 0x4e, 0x09, 0x46, 0x3d, 0xbd, 0x76, 0xcb, 0x47, 0xbb, 0x27, 0xe8, 0x83, 0xb6, 0x40, 0xef, 0x6a, 0xc9, 0x5e, 0xbc, 0x18, 0x82, 0xc6, 0xba, 0xde, 0xc0, 0x7d, 0xf4, 0xe5, 0x59, 0x13, 0x9d, 0x40, 0x79, 0x06, 0x8d, 0x8d, 0x6b, 0x02, 0xbd, 0x98, 0xe7, 0x39, 0x59, 0xb2, 0x7e, 0x69, 0x7d, 0xac, 0xdd, 0x52, 0x81, 0xa9, 0x52, 0xa1, 0x2b, 0xe7, 0xdb, 0xaf, 0x0c, 0x41, 0xbe, 0x33, 0x84, 0x4f, 0xc7, 0x8f, 0x66, 0x1c, 0x8d, 0x35, 0x1b, 0xce, 0xde, 0xe4, 0xfd, 0x97, 0x52, 0xa0, 0xbb, 0x62, 0xc0, 0x8c, 0x72, 0xeb, 0x24, 0xdd, 0x07, 0xab, 0xb4, 0x7a, 0x7a, 0x57, 0xeb, 0x44, 0x49, 0xf5, 0xf7, 0xd5, 0xf5, 0xd2, 0xd7, 0xca, 0xfc, 0x78, 0x49, 0xdf, 0x4a, 0x2b, 0xa9, 0x93, 0x4b, 0xd2, 0xf5, 0xbf, 0x82, 0x6d, 0xa5, 0x5b, 0x47, 0xbf, 0xa2, 0xa4, 0xcc, 0xd1, 0x2b, 0x28, 0x49, 0x2e, 0x28, 0x52, 0x95, 0x8f, 0x7e, 0x56, 0xd0, 0x67, 0xb7, 0xfc, 0xa1, 0xef, 0xa3, 0xdd, 0xa0, 0xdb, 0x1f, 0x2b, 0x1f, 0x19, 0xab, 0xb3, 0xdc, 0x64, 0xc7, 0x9a, 0x9d, 0xfe, 0x99, 0xa1, 0xef, 0x6c, 0xc6, 0x3a, 0xc0, 0xb4, 0x26, 0x0d, 0xfa, 0x0a, 0x25, 0x37, 0xc5, 0xf5, 0x8e, 0x62, 0xd4, 0xca, 0x5a, 0x27, 0x4b, 0xcb, 0x8c, 0x15, 0x31, 0x51, 0xd3, 0x64, 0xb9, 0x97, 0x2a, 0x95, 0x70, 0x1a, 0x32, 0x50, 0xd9, 0x8a, 0x5e, 0xdc, 0x7d, 0xbb, 0x99, 0xce, 0x71, 0x99, 0x18, 0x42, 0x4b, 0x5c, 0x42, 0x3d, 0xa8, 0x71, 0x90, 0x76, 0xbe, 0xd1, 0x6c, 0x5c, 0xc2, 0x4e, 0xd6, 0x46, 0x18, 0xfc, 0x2b, 0x52, 0xef, 0xe3, 0x1a, 0x7f, 0xc7, 0x16, 0xbb, 0xc7, 0x5d, 0xee, 0x30, 0x7e, 0x49, 0x81, 0x5b, 0x4e, 0x77, 0x57, 0x3e, 0x61, 0xbf, 0xa8, 0x07, 0x67, 0x10, 0x89, 0xea, 0x04, 0xb5, 0x7a, 0x87, 0x6f, 0x96, 0x91, 0x26, 0x27, 0x68, 0x90, 0xc8, 0x33, 0xeb, 0xd4, 0xc6, 0x22, 0xba, 0x2d, 0xa1, 0x4e, 0x1b, 0xa1, 0x40, 0xbd, 0xaa, 0xd8, 0x42, 0xd2, 0x97, 0x6c, 0x68, 0xd2, 0x40, 0xea, 0x5d, 0xbf, 0x7f, 0xf0, 0xf7, 0x8f, 0xfa, 0x7a, 0xdb, 0x3f, 0xf1, 0xb9, 0x3a, 0xf5, 0x75, 0xa7, 0xd4, 0x3a, 0x0a, 0x2d, 0x8e, 0x91, 0x16, 0x41, 0x9a, 0x26, 0xe6, 0x20, 0x4e, 0xd6, 0x12, 0x3b, 0x43, 0x1e, 0xd7, 0xbd, 0x40, 0xd2, 0x55, 0x5d, 0x87, 0xda, 0x62, 0x5d, 0xc8, 0xe8, 0x28, 0x53, 0xd5, 0x93, 0xff, 0xa6, 0x94, 0x16, 0x17, 0xa9, 0xeb, 0xbe, 0xd9, 0x83, 0x1a, 0xe6, 0x3a, 0x71, 0xf7, 0x0d, 0xd9, 0xef, 0x67, 0xa1, 0xce, 0x7a, 0x76, 0x4e, 0x85, 0x5d, 0xcd, 0x3f, 0xbb, 0x01, 0xb2, 0xf8, 0x36, 0x53, 0xdd, 0x59, 0x83, 0x02, 0x8a, 0x89, 0xbe, 0xc7, 0x8e, 0xd1, 0x77, 0x1c, 0x53, 0x9e, 0x4a, 0xdf, 0xfd, 0x5d, 0x7a, 0xfb, 0x04, 0xc5, 0x60, 0x37, 0x3c, 0x7e, 0x7f, 0xa0, 0xdf, 0xd7, 0xdf, 0x95, 0x67, 0xee, 0xa7, 0xe3, 0x71, 0xbb, 0xb2, 0x57, 0x5d, 0x83, 0x61, 0xbc, 0x1e, 0x8d, 0x76, 0x12, 0x28, 0xba, 0x55, 0x92, 0xef, 0xfe, 0x4e, 0xc3, 0xcb, 0x6b, 0x3b, 0x74, 0x8e, 0x09, 0xb2, 0x21, 0x10, 0x5b, 0xd7, 0xef, 0xad, 0xf4, 0x54, 0x7a, 0x3c, 0xbe, 0x58, 0x7b, 0x4e, 0xa0, 0x92, 0x76, 0x26, 0x9d, 0xdc, 0xdf, 0x69, 0xa4, 0x1d, 0x14, 0x90, 0x17, 0xcd, 0xab, 0xa0, 0x3b, 0x7d, 0x63, 0x63, 0x8f, 0x7f, 0x74, 0x2a, 0xb7, 0x4f, 0x55, 0x7e, 0x5f, 0xf3, 0x4e, 0xe5, 0xef, 0x6b, 0xb0, 0xe7, 0x37, 0xb6, 0xeb, 0x02, 0xbd, 0x95, 0x23, 0x63, 0x43, 0xb9, 0xb3, 0xf2, 0xe0, 0xa3, 0x87, 0x88, 0x6a, 0x8e, 0x3f, 0xe4, 0xcb, 0x08, 0x6a, 0x94, 0x92, 0x11, 0x46, 0xba, 0x99, 0x14, 0xa7, 0x9b, 0x8c, 0xb1, 0x38, 0xdd, 0xe8, 0xd7, 0x79, 0xd6, 0x1c, 0x1d, 0xb8, 0x04, 0x65, 0xc6, 0xc7, 0x94, 0xe2, 0xbb, 0x9e, 0xb4, 0xbb, 0x87, 0x7d, 0x95, 0x41, 0x23, 0x53, 0x0e, 0xc0, 0x23, 0x8c, 0x31, 0x80, 0x08, 0xb6, 0x8f, 0x6e, 0xf6, 0x97, 0x74, 0xe5, 0xc8, 0xc9, 0xeb, 0x62, 0x70, 0xa0, 0x4e, 0x5f, 0x7e, 0xb3, 0x7a, 0xa0, 0x0d, 0x6c, 0xda, 0xbb, 0x98, 0xde, 0xa8, 0x47, 0x7b, 0x75, 0xb7, 0xc6, 0xe0, 0xfe, 0x5b, 0x75, 0x75, 0xf7, 0xaa, 0x4e, 0x6c, 0x27, 0x7c, 0xf4, 0x4e, 0xbe, 0xe7, 0x92, 0x76, 0x77, 0xd2, 0x7d, 0x53, 0xce, 0xe9, 0xe0, 0xc0, 0xc7, 0x2e, 0x7c, 0xf1, 0xab, 0x14, 0x9f, 0x92, 0x78, 0x1c, 0xef, 0x0d, 0x7c, 0x27, 0x55, 0xae, 0x32, 0xe6, 0xf3, 0x84, 0xcc, 0x67, 0xa7, 0x7b, 0x6f, 0x00, 0x1b, 0xff, 0x16, 0xc7, 0x69, 0x98, 0x6f, 0x38, 0x5c, 0x57, 0x79, 0x4a, 0x5d, 0x87, 0xba, 0xf0, 0xc4, 0x50, 0x16, 0x6c, 0xe1, 0x6b, 0x43, 0x8c, 0xa2, 0x05, 0xd1, 0x16, 0x54, 0xd4, 0x06, 0x1d, 0xcd, 0x1f, 0x16, 0xab, 0x8a, 0x77, 0x78, 0x68, 0xc8, 0x59, 0xa4, 0x36, 0xe0, 0xd3, 0x48, 0xfb, 0x4c, 0xce, 0x5a, 0x5a, 0x81, 0xb1, 0x68, 0x80, 0x75, 0x7c, 0x13, 0x16, 0xef, 0xd4, 0x5a, 0x07, 0xaa, 0x92, 0xb2, 0xdf, 0x4b, 0xa2, 0x1b, 0x0a, 0xc5, 0xa8, 0xda, 0x57, 0x6f, 0x55, 0x9b, 0x1b, 0x07, 0x67, 0xde, 0xa1, 0x36, 0xe2, 0xd3, 0x50, 0xfb, 0x41, 0x46, 0x06, 0xe6, 0xdf, 0xc8, 0xa5, 0x34, 0x60, 0xee, 0x95, 0x88, 0x27, 0xe2, 0xc0, 0x6b, 0xcf, 0xce, 0xa9, 0x84, 0xd1, 0x93, 0xb2, 0xbe, 0x3e, 0x16, 0xc7, 0x73, 0xcd, 0x0d, 0xa9, 0x78, 0x66, 0x1c, 0x9a, 0x08, 0xb3, 0x7c, 0xd7, 0x81, 0x5d, 0xec, 0x8c, 0x34, 0x96, 0xd2, 0xaa, 0xd3, 0xfa, 0xb5, 0x73, 0x50, 0x7f, 0x8a, 0x53, 0x3e, 0xe6, 0x74, 0xc3, 0xe8, 0x2e, 0x05, 0x2e, 0x6c, 0xe6, 0xaf, 0xed, 0x1c, 0x6b, 0x23, 0x2c, 0x3e, 0xbb, 0x1e, 0xcc, 0x48, 0x11, 0xf2, 0xe8, 0x33, 0x81, 0xb5, 0x4a, 0x6d, 0x20, 0x2d, 0x0d, 0xc6, 0x5e, 0xcd, 0x10, 0x2c, 0x93, 0xf5, 0x97, 0x2e, 0x3f, 0x51, 0xde, 0x23, 0x90, 0xcd, 0xb9, 0x28, 0x81, 0xb5, 0x81, 0x7e, 0x2e, 0x61, 0x51, 0xa2, 0xed, 0x51, 0xf5, 0x26, 0xf9, 0x40, 0x38, 0x22, 0x2b, 0xa0, 0x80, 0xee, 0xc0, 0x8e, 0x5b, 0x66, 0x16, 0xaf, 0x2b, 0x94, 0xc3, 0xf7, 0x46, 0x5d, 0xf0, 0xc5, 0x3a, 0x4d, 0x15, 0xb1, 0xa3, 0x0f, 0x1e, 0xdd, 0x70, 0xcb, 0x1e, 0x75, 0xc4, 0xd7, 0x17, 0xd4, 0xfb, 0xd6, 0x84, 0x50, 0x8e, 0x70, 0x69, 0xb1, 0xf7, 0x7a, 0x75, 0x6b, 0x68, 0x8f, 0x9f, 0xac, 0x5f, 0x34, 0xc0, 0x27, 0x77, 0x6f, 0xe5, 0xba, 0x53, 0x8d, 0xe7, 0x9c, 0xed, 0xc5, 0x3a, 0xa0, 0x12, 0xcf, 0x78, 0x28, 0xf2, 0xdd, 0xdf, 0x61, 0xa4, 0x7b, 0x9a, 0x3f, 0xfb, 0x50, 0xb1, 0x26, 0x7c, 0xf3, 0x38, 0xde, 0x23, 0x60, 0xe2, 0x90, 0x27, 0x14, 0x63, 0x3c, 0x04, 0x69, 0x40, 0xc6, 0x5f, 0x6e, 0x7b, 0x5b, 0x21, 0x42, 0x57, 0x08, 0xc6, 0xe2, 0xec, 0x50, 0x16, 0xf6, 0xd8, 0x0b, 0x15, 0xae, 0x38, 0x34, 0xe3, 0xa1, 0x08, 0xeb, 0xe3, 0x33, 0x55, 0x3a, 0x3b, 0x8d, 0xd3, 0x45, 0xcc, 0x47, 0x37, 0x9f, 0x3e, 0x25, 0x99, 0xd5, 0x7e, 0x7a, 0xeb, 0xf5, 0x6a, 0xbf, 0x8f, 0xf7, 0xfe, 0x88, 0x3e, 0xea, 0x89, 0xe9, 0x8a, 0x50, 0x47, 0xee, 0x17, 0xfd, 0x2c, 0xac, 0xf3, 0xad, 0xc5, 0xde, 0x16, 0x3b, 0x7d, 0x0a, 0x74, 0x34, 0x96, 0xa8, 0xd1, 0xc7, 0xf5, 0xfb, 0x8e, 0xd4, 0x7e, 0xa0, 0x1f, 0xf5, 0xaf, 0xf8, 0x7f, 0xf9, 0x5e, 0xc0, 0xff, 0x97, 0xef, 0xcc, 0xfb, 0x7f, 0xf9, 0x3e, 0x42, 0xef, 0xb0, 0x0a, 0xf7, 0x48, 0xf5, 0x31, 0xbb, 0xae, 0x30, 0xe3, 0xa3, 0x5d, 0x96, 0x8c, 0xe1, 0xbe, 0x8f, 0x7e, 0xa6, 0x64, 0x0c, 0xaf, 0xe9, 0x5f, 0xfb, 0xfb, 0xfb, 0x7e, 0xbf, 0xd1, 0x5b, 0xf5, 0x6e, 0xd5, 0x81, 0xfb, 0xfc, 0x77, 0xbe, 0xd7, 0xef, 0xbf, 0xf3, 0xdd, 0x2a, 0x6f, 0x95, 0xaf, 0x3a, 0x94, 0xed, 0xad, 0xfe, 0xa8, 0xfa, 0x7d, 0xb7, 0xe5, 0x75, 0x6f, 0xb5, 0xa7, 0x1a, 0x29, 0x70, 0x8f, 0x82, 0x3e, 0x73, 0x25, 0x6f, 0x75, 0x80, 0x5c, 0x3b, 0x30, 0x74, 0x81, 0xe5, 0x75, 0x94, 0xb1, 0xaa, 0x7f, 0x45, 0x58, 0x6a, 0x02, 0x38, 0xf0, 0xcd, 0x1e, 0x69, 0x2a, 0xd0, 0x6e, 0x9c, 0x7b, 0xc2, 0x3a, 0x74, 0xbf, 0x86, 0x6e, 0x37, 0xba, 0x3b, 0xc3, 0x7a, 0x74, 0x6d, 0x47, 0x97, 0x84, 0x2e, 0x25, 0x6c, 0x44, 0xd7, 0x16, 0x74, 0x35, 0xa1, 0x2b, 0x80, 0xfa, 0x21, 0xa2, 0x46, 0x73, 0x55, 0x70, 0x3e, 0x8f, 0x68, 0xeb, 0x69, 0x67, 0x73, 0x2e, 0x31, 0x74, 0xbd, 0x8a, 0x2e, 0x3b, 0xe7, 0x12, 0x41, 0x57, 0x2f, 0xba, 0x26, 0x73, 0x2e, 0xcd, 0xe8, 0xfa, 0x1d, 0xba, 0xcc, 0x9c, 0xcb, 0x22, 0xe1, 0x42, 0xfe, 0xd5, 0x0a, 0x86, 0xb3, 0x45, 0xfb, 0x86, 0xd4, 0xc3, 0x67, 0x8b, 0x9e, 0x44, 0xfe, 0x57, 0x7b, 0x2a, 0x23, 0x43, 0x7d, 0xd2, 0x7f, 0xbb, 0xf3, 0x4b, 0xce, 0x2e, 0x30, 0x22, 0xcf, 0xee, 0x02, 0x33, 0x72, 0xef, 0x1e, 0xe6, 0xad, 0xe6, 0x9b, 0xbb, 0xd0, 0x1a, 0x35, 0xdf, 0xdc, 0xe3, 0x32, 0x82, 0xc1, 0xf8, 0x25, 0xc8, 0x44, 0x5b, 0xe6, 0x34, 0xda, 0x24, 0x57, 0xd1, 0x3a, 0x9d, 0x99, 0x7d, 0xf1, 0x39, 0x1d, 0x5e, 0x53, 0x4c, 0x97, 0x66, 0x49, 0xbc, 0x5e, 0x44, 0x49, 0xce, 0x59, 0xfd, 0x67, 0x47, 0x2f, 0x51, 0xfa, 0x17, 0x83, 0x29, 0x98, 0x2d, 0x56, 0xfa, 0x06, 0x4d, 0xfe, 0xd5, 0x03, 0xf0, 0xe8, 0x90, 0xff, 0xbf, 0x0d, 0xa0, 0x8e, 0x52, 0x11, 0x53, 0x9e, 0x4a, 0xd5, 0x27, 0x9c, 0x59, 0x81, 0x4e, 0xb4, 0xe5, 0xb3, 0x1c, 0x77, 0xa0, 0x5d, 0x97, 0x55, 0x8f, 0xdf, 0xf4, 0x15, 0xa6, 0xbb, 0x4e, 0x87, 0x61, 0x56, 0x41, 0x17, 0x58, 0xe4, 0xbb, 0x69, 0x44, 0x21, 0x0c, 0xc5, 0x76, 0xc9, 0x1e, 0xb9, 0xab, 0x4a, 0xda, 0x45, 0xa3, 0x42, 0xaf, 0xd1, 0xea, 0x0c, 0x5a, 0x63, 0xc1, 0xeb, 0xb4, 0x68, 0x07, 0xc6, 0x4f, 0xe1, 0x0f, 0x6f, 0x39, 0x1c, 0x1c, 0xd7, 0x57, 0x24, 0x4d, 0x6f, 0xaf, 0x70, 0xff, 0x15, 0xfe, 0xf0, 0x9a, 0xbc, 0xe1, 0x8d, 0xc7, 0xf6, 0x86, 0xad, 0x11, 0xf0, 0xbf, 0xa0, 0x3e, 0x67, 0x75, 0xf9, 0x62, 0x21, 0xc7, 0x0d, 0x3d, 0xe8, 0xdf, 0x0c, 0x26, 0xed, 0x9d, 0xf7, 0xb5, 0xe5, 0x90, 0x03, 0x39, 0xf8, 0x9b, 0x0b, 0xb9, 0x5f, 0xeb, 0x41, 0xbc, 0xc9, 0x22, 0x17, 0xff, 0x0b, 0x63, 0xd1, 0xf4, 0x3c, 0xe2, 0xfe, 0x69, 0x39, 0x45, 0xb4, 0x9c, 0x22, 0x9f, 0x9f, 0x53, 0x60, 0x39, 0xd6, 0x92, 0x5d, 0xd0, 0x8a, 0x06, 0xa3, 0x3d, 0x2c, 0x29, 0xba, 0x30, 0xd4, 0x7e, 0x50, 0x4b, 0x35, 0xbd, 0x1b, 0xd3, 0xc7, 0xb0, 0x06, 0xaa, 0x73, 0x7d, 0xe3, 0x60, 0x38, 0xee, 0xf3, 0xe8, 0x45, 0x3e, 0x4f, 0x5f, 0xe4, 0xf3, 0x93, 0x8b, 0x7c, 0x76, 0x5f, 0xe4, 0xf3, 0xde, 0x45, 0x3e, 0xc7, 0x2e, 0xf2, 0xf9, 0x74, 0xbc, 0xcf, 0xeb, 0x13, 0x2e, 0xf2, 0xf9, 0xd2, 0x45, 0x3e, 0x37, 0x5e, 0xe4, 0xf3, 0x0f, 0xa9, 0x3e, 0xf4, 0xf8, 0x46, 0xe1, 0xd8, 0x2b, 0x51, 0x38, 0xf6, 0xda, 0x9e, 0xd8, 0xf4, 0x89, 0x03, 0xf8, 0xbd, 0x11, 0x9f, 0x2d, 0x70, 0x6c, 0xa8, 0x41, 0xb4, 0x7f, 0x47, 0x53, 0xb4, 0x35, 0x18, 0x0c, 0x17, 0xb5, 0xb7, 0x2d, 0x89, 0x34, 0x45, 0xee, 0x06, 0xdb, 0xa2, 0xca, 0xc0, 0x1c, 0x79, 0x9c, 0xaf, 0x5c, 0x72, 0x53, 0xd1, 0x4d, 0xb2, 0xfd, 0xa6, 0x7f, 0x2c, 0xba, 0xe9, 0xa6, 0xa2, 0x59, 0xc5, 0x37, 0xdd, 0x34, 0xfd, 0x2a, 0xd3, 0xff, 0x0d, 0x73, 0xf4, 0xd8, 0xd0, 0xe3, 0xf8, 0x20, 0x74, 0x43, 0xed, 0xf8, 0x84, 0xe1, 0xd8, 0xcf, 0xf6, 0xc1, 0xb1, 0xdd, 0x67, 0xe0, 0xd8, 0xab, 0xfd, 0xf8, 0x3c, 0x87, 0xcf, 0x36, 0x84, 0x7c, 0x15, 0xbe, 0x0f, 0xe3, 0x7b, 0x2b, 0x1c, 0xfb, 0x39, 0x42, 0xbf, 0xeb, 0x24, 0xc6, 0x59, 0x8c, 0xef, 0x83, 0x9a, 0x55, 0x6a, 0xc5, 0xb4, 0x16, 0x2d, 0xbf, 0x37, 0xf1, 0x77, 0x2a, 0x5b, 0x8a, 0x5a, 0xfd, 0x05, 0x4d, 0x3b, 0xb3, 0x3c, 0x3f, 0xf0, 0xae, 0x52, 0x55, 0xc4, 0xd1, 0xb1, 0x21, 0x23, 0xe1, 0x68, 0x89, 0x65, 0xc1, 0x69, 0xb0, 0x84, 0x41, 0xd0, 0xbd, 0x33, 0xcb, 0xbb, 0x0a, 0x24, 0x7e, 0x28, 0x06, 0x24, 0x63, 0x20, 0x9d, 0x99, 0xa9, 0x87, 0xe8, 0x8a, 0xd4, 0x4f, 0x21, 0x4b, 0xd1, 0xfd, 0xcf, 0xb7, 0x44, 0x5f, 0xa1, 0xde, 0x61, 0x73, 0x7d, 0x9d, 0xa8, 0x2c, 0x37, 0x35, 0xed, 0x2b, 0xfb, 0xaa, 0xff, 0x0a, 0x6a, 0xd3, 0x93, 0xfe, 0x0d, 0x98, 0x1a, 0xb5, 0x88, 0x90, 0x27, 0x59, 0xf2, 0x2b, 0x47, 0xfc, 0x1b, 0x9c, 0xa6, 0xb4, 0xd8, 0x67, 0x28, 0xf6, 0x12, 0x0b, 0xc7, 0xce, 0x47, 0x9d, 0xa3, 0xd1, 0x69, 0x4a, 0x89, 0x7f, 0x9e, 0xfd, 0x2d, 0xe4, 0xa3, 0xc5, 0x3f, 0x1e, 0xcf, 0x3d, 0x25, 0xd6, 0x41, 0xff, 0x86, 0x08, 0xcc, 0x2a, 0x84, 0x6c, 0xec, 0xa3, 0x85, 0x60, 0xb1, 0xfa, 0x36, 0x0c, 0xed, 0xeb, 0x4d, 0xf4, 0x95, 0x22, 0xcc, 0x21, 0xef, 0xb1, 0xbd, 0xb2, 0x49, 0xa3, 0xf5, 0x61, 0x62, 0x23, 0x61, 0x75, 0x9b, 0xd4, 0x99, 0x13, 0x96, 0xb6, 0x49, 0x1d, 0x59, 0xdb, 0x7a, 0x43, 0x26, 0x74, 0xf7, 0x76, 0xea, 0xd1, 0xdd, 0x8b, 0x5c, 0x57, 0xef, 0x5f, 0xe1, 0xbf, 0x33, 0x0c, 0x7c, 0x1b, 0xd2, 0x7e, 0xc4, 0x8d, 0xce, 0xa6, 0xf5, 0xbc, 0xa0, 0x3e, 0xac, 0x57, 0x8c, 0xe1, 0x58, 0x15, 0xec, 0x8e, 0x85, 0x21, 0x92, 0x85, 0xb9, 0x87, 0x65, 0x9d, 0xed, 0x7a, 0x81, 0x8f, 0xb9, 0x3a, 0xbb, 0x54, 0x08, 0xe4, 0x9f, 0x28, 0x3b, 0x1c, 0x55, 0xab, 0x74, 0xbb, 0xfb, 0xc3, 0x6a, 0x15, 0x0c, 0xdd, 0x97, 0xaf, 0xd7, 0x19, 0xe0, 0xde, 0xdc, 0x4c, 0x5d, 0x06, 0xdc, 0x9b, 0x6d, 0x58, 0x9f, 0xe1, 0x93, 0xba, 0x68, 0x27, 0xc5, 0x94, 0x4e, 0xb3, 0xb7, 0xb7, 0xd8, 0x6d, 0x35, 0x06, 0x7a, 0x8f, 0x6e, 0xa6, 0x3e, 0x79, 0xf4, 0xc1, 0x5c, 0x83, 0x92, 0x67, 0x96, 0xd4, 0xa3, 0x1d, 0x59, 0x18, 0x82, 0x18, 0x5e, 0xf7, 0xaa, 0xd5, 0x78, 0x74, 0x8b, 0xa2, 0x8b, 0xc2, 0xd1, 0x81, 0x40, 0xc6, 0x4f, 0xef, 0xf3, 0x65, 0x76, 0xe4, 0xee, 0x8f, 0xf9, 0xfa, 0xba, 0xf4, 0xf5, 0x19, 0xfb, 0xfb, 0x7c, 0x7d, 0xa1, 0x92, 0xf0, 0xbd, 0x55, 0xb0, 0x27, 0xa6, 0x54, 0xf9, 0xf4, 0xed, 0x86, 0x75, 0x7d, 0x36, 0x50, 0x74, 0x1b, 0x31, 0xbc, 0x3d, 0xb7, 0xa2, 0x2f, 0x6c, 0x4c, 0x85, 0x67, 0xd5, 0xbd, 0x55, 0x7a, 0xb4, 0x29, 0x00, 0xf5, 0xaf, 0xdc, 0xb0, 0x3e, 0x35, 0x04, 0xeb, 0x5b, 0xbc, 0xbf, 0xaf, 0x3e, 0xc3, 0xd7, 0xd7, 0x79, 0xde, 0x97, 0xd1, 0x9e, 0x1b, 0xd6, 0x45, 0x0c, 0x29, 0xa1, 0x58, 0xe7, 0x58, 0xbf, 0x92, 0xc5, 0x35, 0xe9, 0x8b, 0xf5, 0x7b, 0xd7, 0x78, 0x7f, 0x16, 0x5b, 0x53, 0xfb, 0x81, 0xab, 0x87, 0x70, 0xe5, 0xcc, 0x32, 0xb9, 0x20, 0x86, 0xf1, 0x9e, 0xa1, 0x37, 0x61, 0xc3, 0x7f, 0x27, 0xe1, 0x03, 0xdb, 0xd3, 0x48, 0xe3, 0x7b, 0x91, 0x2c, 0xc5, 0xe4, 0xeb, 0x0d, 0x36, 0x86, 0x75, 0xd9, 0x65, 0x90, 0x8a, 0x1d, 0xde, 0x21, 0x23, 0x57, 0x3e, 0xba, 0x7b, 0xeb, 0x28, 0xf6, 0xc4, 0xc9, 0xfd, 0x6b, 0x0a, 0x8d, 0x8a, 0xfe, 0xd0, 0x7d, 0x47, 0x1f, 0xf2, 0xdd, 0xd7, 0x79, 0x5e, 0xd1, 0x1f, 0xec, 0x3f, 0xb0, 0xc6, 0xd7, 0x4f, 0x5f, 0x47, 0x1f, 0x3e, 0xfa, 0x50, 0xcf, 0xcd, 0x3b, 0xd7, 0xb4, 0xd8, 0x73, 0x81, 0xf0, 0x67, 0xc8, 0x00, 0x77, 0x9e, 0xa4, 0xd3, 0xc3, 0xbd, 0x9b, 0xf4, 0xca, 0x94, 0xd5, 0x6a, 0x55, 0xe6, 0xde, 0xd8, 0x2a, 0xb5, 0x4a, 0xbf, 0xa7, 0xb7, 0x80, 0xef, 0xaa, 0x8d, 0x82, 0xef, 0xbe, 0xe0, 0x33, 0xca, 0x3b, 0x89, 0x1a, 0xe9, 0xda, 0x0d, 0x34, 0x5e, 0x2c, 0x01, 0xc7, 0xea, 0x8b, 0xde, 0xbb, 0x7b, 0xcd, 0x8f, 0x7b, 0x09, 0x6b, 0xbb, 0x62, 0xfd, 0xbd, 0xfd, 0xfd, 0x18, 0x6e, 0x41, 0x48, 0xd3, 0x70, 0x85, 0x58, 0xc8, 0x41, 0x2c, 0xa4, 0xf8, 0xf4, 0xc4, 0xaa, 0x0c, 0xfd, 0x6b, 0x65, 0x5d, 0xb2, 0xde, 0x4e, 0x5d, 0xe4, 0xde, 0x5d, 0xb1, 0xa8, 0xb2, 0xad, 0xb7, 0xdd, 0xa6, 0xf1, 0xfe, 0x58, 0xbb, 0x85, 0x52, 0x51, 0x7c, 0x1b, 0xc3, 0xa2, 0x2c, 0x8e, 0xbb, 0x95, 0x5a, 0x83, 0xa4, 0x0e, 0x61, 0xbb, 0xe7, 0x30, 0x5d, 0xc4, 0xb8, 0x75, 0x65, 0xd1, 0xba, 0xc1, 0xec, 0xf4, 0xf6, 0x40, 0xdc, 0xd8, 0xcc, 0x7d, 0x94, 0x3e, 0x94, 0xeb, 0x83, 0xf6, 0xbc, 0xf1, 0x2d, 0xa9, 0x18, 0x6c, 0x65, 0x64, 0x9b, 0x26, 0xe9, 0xaf, 0x58, 0x57, 0x00, 0x0c, 0x8d, 0x6b, 0x5b, 0x6f, 0x47, 0x81, 0x06, 0x0d, 0x20, 0x34, 0x46, 0x8d, 0x52, 0x09, 0x9a, 0x57, 0x95, 0x66, 0x2a, 0x47, 0x6b, 0xf1, 0xc6, 0xe8, 0x2b, 0xef, 0xf4, 0x09, 0x28, 0x8f, 0x3e, 0x1d, 0x81, 0x2a, 0xa9, 0xbf, 0x17, 0x53, 0x38, 0x64, 0x5d, 0x55, 0x6c, 0x68, 0x4d, 0xc8, 0x66, 0xcd, 0x10, 0x69, 0x30, 0xf6, 0xcb, 0x05, 0x10, 0xbe, 0x77, 0x68, 0x4d, 0xf4, 0x95, 0x7d, 0x5a, 0xfc, 0x23, 0x4f, 0x87, 0xa1, 0x0a, 0xfa, 0x63, 0x88, 0xa5, 0xac, 0x74, 0xc8, 0x64, 0xdd, 0x10, 0x51, 0x86, 0x99, 0x60, 0x2a, 0x25, 0x1a, 0xc8, 0x11, 0x34, 0x90, 0x56, 0xb7, 0x7b, 0x10, 0x4f, 0xc6, 0x8a, 0x58, 0x9c, 0x1e, 0x23, 0xaa, 0x27, 0x43, 0xd1, 0x07, 0x32, 0xde, 0xe9, 0xb5, 0x49, 0xbb, 0x63, 0xc1, 0x4f, 0x7c, 0x19, 0xa1, 0x9c, 0xec, 0x8c, 0x24, 0x7e, 0x7e, 0xbf, 0x19, 0xe1, 0x32, 0x2b, 0x28, 0x85, 0xc5, 0x5d, 0xba, 0x12, 0x20, 0x05, 0xb8, 0x72, 0x32, 0xbc, 0x7d, 0xde, 0x5d, 0xfd, 0xfd, 0x11, 0xb5, 0x4a, 0x1a, 0xea, 0x45, 0x58, 0x74, 0xe3, 0x61, 0x31, 0x67, 0xc0, 0xb7, 0xba, 0xb2, 0x8d, 0xbb, 0xe0, 0xfa, 0xf4, 0x96, 0xe4, 0x36, 0xcc, 0x17, 0x74, 0x7a, 0xf3, 0xdc, 0x42, 0xa9, 0x00, 0xf2, 0x25, 0xea, 0x9d, 0xa8, 0x64, 0xde, 0x7b, 0x18, 0xf2, 0x0c, 0x06, 0xbd, 0xfa, 0x8a, 0x2c, 0x79, 0x5c, 0x5e, 0xd7, 0x71, 0xaf, 0xdd, 0x25, 0x67, 0x88, 0xaf, 0x02, 0x97, 0x4d, 0x3a, 0xf2, 0x20, 0xcd, 0x62, 0x5c, 0xad, 0x16, 0x65, 0x1c, 0x19, 0xd4, 0xdd, 0x4f, 0x5f, 0x95, 0xc8, 0x91, 0x96, 0x5a, 0x9c, 0x66, 0xe7, 0x04, 0xff, 0xfa, 0xba, 0xc1, 0xe3, 0x03, 0x85, 0x2e, 0xe7, 0x24, 0xa7, 0x4e, 0x7c, 0xff, 0xc7, 0x10, 0xfa, 0x4f, 0xa2, 0xef, 0xdf, 0x0d, 0x54, 0xff, 0xc5, 0x08, 0x4e, 0x9d, 0x88, 0x45, 0xf9, 0xd9, 0x26, 0xed, 0x8f, 0x51, 0x7f, 0xda, 0x1d, 0xeb, 0xd2, 0xef, 0xef, 0x53, 0x0c, 0x5c, 0xea, 0x10, 0x59, 0x46, 0xc8, 0x65, 0x4a, 0xff, 0x6d, 0x0d, 0x51, 0xe7, 0x6b, 0xb1, 0xb5, 0x7d, 0x3e, 0x7d, 0x87, 0xc1, 0x8c, 0x94, 0x1e, 0xcc, 0x4d, 0xaf, 0x43, 0x34, 0x56, 0xa5, 0xeb, 0x5f, 0xa3, 0x4c, 0xf6, 0xf6, 0x97, 0xe8, 0x11, 0x0b, 0x6b, 0x2e, 0xae, 0x3d, 0xd5, 0xb2, 0x67, 0x94, 0xf9, 0x3b, 0xf2, 0xb0, 0xa0, 0x39, 0x49, 0x61, 0x4a, 0xae, 0xc9, 0x83, 0x3d, 0x55, 0xd0, 0x88, 0xae, 0x5d, 0x1f, 0x36, 0x12, 0xe7, 0x49, 0xe7, 0x68, 0x82, 0xbe, 0x6d, 0x92, 0x15, 0x99, 0xbf, 0xd6, 0xbf, 0x5f, 0x16, 0x21, 0x71, 0xb9, 0xfa, 0xda, 0x9b, 0x70, 0x6c, 0xdf, 0x99, 0x5e, 0xfb, 0x44, 0x94, 0x3c, 0xaf, 0xa1, 0x54, 0x7a, 0xdd, 0x84, 0xcf, 0xce, 0xa4, 0x5c, 0x6d, 0x6b, 0x69, 0x69, 0xe9, 0x6e, 0xeb, 0x0c, 0x2d, 0x69, 0xea, 0xbe, 0x84, 0x7c, 0xbd, 0x44, 0xa8, 0x5c, 0x52, 0x5c, 0xf4, 0xb5, 0xff, 0x7f, 0xc8, 0xd9, 0x3d, 0x46, 0x84, 0xec, 0x43, 0x7c, 0x50, 0x8e, 0xbe, 0x7e, 0x04, 0x8e, 0xfd, 0xb2, 0x04, 0x8e, 0xbd, 0x85, 0x32, 0xf6, 0x17, 0x28, 0x5f, 0xf7, 0xa1, 0x5c, 0xdd, 0xdb, 0x80, 0xef, 0x46, 0x7c, 0xf7, 0xe0, 0xfb, 0x29, 0x38, 0xf6, 0xab, 0x32, 0x38, 0xf6, 0x66, 0x1e, 0xc6, 0xc3, 0xb8, 0xbf, 0x78, 0x38, 0x29, 0x67, 0x5f, 0x5f, 0xa5, 0xe5, 0x57, 0xc6, 0x1a, 0xee, 0xb1, 0x37, 0xee, 0x89, 0x17, 0x71, 0x79, 0x79, 0xfb, 0x7a, 0xf8, 0x6f, 0xc9, 0xdb, 0xd7, 0x5b, 0xff, 0x0e, 0x79, 0x9b, 0x91, 0x2e, 0x6f, 0x5f, 0x2f, 0xbd, 0xbc, 0xbc, 0x7d, 0xdd, 0x3b, 0x5e, 0xde, 0xbe, 0xfe, 0xe6, 0xe7, 0xc9, 0xdb, 0xd7, 0x95, 0xf1, 0xf2, 0xf6, 0xf5, 0xba, 0x8b, 0xe5, 0xed, 0xeb, 0xae, 0xbf, 0x47, 0xde, 0x9e, 0x85, 0x0a, 0x5a, 0x8f, 0x77, 0x03, 0xad, 0xe2, 0xa2, 0xb1, 0x66, 0xcd, 0x2d, 0x8f, 0x73, 0x5b, 0xc7, 0xb9, 0xed, 0x29, 0xee, 0xc9, 0x29, 0xdf, 0x79, 0x69, 0xf1, 0x50, 0x7e, 0x88, 0x6f, 0x17, 0x08, 0x7f, 0xa2, 0x59, 0x2b, 0x5a, 0x22, 0x32, 0xda, 0x21, 0xb2, 0x13, 0x2c, 0x8e, 0x2e, 0xc8, 0x41, 0xed, 0x77, 0x31, 0x63, 0xdd, 0x84, 0xd4, 0xec, 0x44, 0xff, 0x54, 0x7d, 0x3e, 0x3c, 0xd4, 0x4b, 0xfb, 0x04, 0x9c, 0x46, 0xaa, 0xd9, 0x1b, 0xb5, 0x58, 0xc7, 0xa3, 0x4e, 0x5d, 0xe5, 0x88, 0xba, 0xc3, 0xbf, 0xde, 0xf9, 0x8f, 0x14, 0x8f, 0xfd, 0x1b, 0xd1, 0xff, 0x30, 0xf5, 0x69, 0xc2, 0x5a, 0xd1, 0x4f, 0x13, 0xfe, 0x2e, 0xf4, 0xdf, 0x4b, 0xfe, 0x29, 0x71, 0x4b, 0xd0, 0x6f, 0xf7, 0x25, 0xe2, 0xe6, 0xa0, 0xff, 0xcb, 0xe3, 0xe2, 0xda, 0xd0, 0x6f, 0xfb, 0xc5, 0x71, 0xf7, 0x9c, 0x43, 0xff, 0x17, 0xc7, 0xc5, 0xd5, 0xa3, 0xdf, 0x73, 0x5a, 0x5c, 0x39, 0x2c, 0xd9, 0xae, 0xb7, 0x25, 0xfb, 0x68, 0xaa, 0x7e, 0x62, 0x30, 0xf6, 0x21, 0xb7, 0xbb, 0xa8, 0x2f, 0xb3, 0x7e, 0x02, 0x85, 0x52, 0xba, 0x7e, 0x52, 0xa0, 0xd7, 0xad, 0xa1, 0xf9, 0x39, 0x47, 0xa6, 0x6e, 0x2d, 0xbd, 0xad, 0x19, 0xeb, 0xd7, 0x7a, 0xdd, 0xa7, 0xdc, 0xde, 0x57, 0x7d, 0xfd, 0xa1, 0x5c, 0x73, 0x3f, 0xcb, 0x9f, 0x2c, 0x1b, 0xcd, 0xed, 0xa2, 0xb0, 0x41, 0x3e, 0xfa, 0x25, 0xd2, 0x42, 0x7c, 0xf7, 0x61, 0xd8, 0x7d, 0x22, 0x4c, 0xce, 0xd4, 0xc5, 0x38, 0x6c, 0x88, 0xc2, 0xc2, 0xe0, 0xeb, 0xed, 0xd2, 0x1f, 0x7d, 0x4a, 0x31, 0x54, 0xf4, 0x1e, 0x7d, 0xba, 0xc0, 0xf0, 0xd3, 0xfb, 0x3a, 0xf2, 0x74, 0x9c, 0xcb, 0xfe, 0x98, 0x51, 0x87, 0x76, 0x5e, 0xd4, 0xb0, 0x86, 0x56, 0x68, 0x1e, 0xed, 0x53, 0x96, 0xf9, 0xfa, 0xd3, 0x74, 0x95, 0x8b, 0x24, 0x9c, 0x5d, 0x48, 0x4f, 0x2b, 0xea, 0x37, 0xfa, 0x55, 0x80, 0x76, 0x69, 0x9a, 0x0c, 0x41, 0x9f, 0x59, 0xfb, 0xfb, 0x0c, 0x6b, 0xe8, 0xf6, 0x05, 0xcc, 0xf9, 0x4b, 0xa1, 0xb3, 0xbe, 0x35, 0xe3, 0xb5, 0x16, 0xe8, 0x27, 0x09, 0xa9, 0x98, 0x04, 0xf4, 0x03, 0x6b, 0x06, 0xfa, 0x64, 0x7d, 0x52, 0x76, 0x9b, 0x63, 0xf7, 0x0e, 0x60, 0x0d, 0xf2, 0x0c, 0xbc, 0x3e, 0x80, 0xb4, 0x17, 0xec, 0x3d, 0x46, 0xe1, 0xa2, 0x9a, 0xc4, 0x79, 0xe0, 0x8b, 0xb1, 0xf1, 0xb2, 0x19, 0xa5, 0x90, 0x17, 0xe5, 0xd7, 0x14, 0x5f, 0x6f, 0xfb, 0x94, 0x8a, 0x58, 0x85, 0x46, 0xfb, 0x2f, 0xc6, 0xda, 0x0d, 0x84, 0x5d, 0xa5, 0x80, 0xea, 0xa1, 0x60, 0xba, 0xae, 0xec, 0xf4, 0x1a, 0x85, 0x55, 0xc5, 0x92, 0x8e, 0xff, 0xb0, 0x14, 0xd7, 0x1d, 0x0b, 0xb0, 0x6d, 0x82, 0x0e, 0x94, 0xe9, 0x03, 0x34, 0x1b, 0x1f, 0x42, 0xe6, 0x92, 0x5e, 0xa6, 0x2d, 0x43, 0xc7, 0xda, 0x00, 0xf4, 0xdd, 0xcb, 0xb7, 0x7e, 0xc3, 0x11, 0xec, 0xbd, 0xcd, 0xe9, 0x12, 0xc1, 0x96, 0xf1, 0x6f, 0x7d, 0x22, 0x16, 0x86, 0x0f, 0xc9, 0xee, 0x47, 0x87, 0x34, 0xbd, 0xaa, 0xdf, 0x8a, 0x7a, 0xd5, 0x3b, 0xbd, 0x47, 0x1f, 0xf6, 0xf5, 0x92, 0x36, 0xb5, 0x2f, 0x76, 0xb0, 0xdf, 0x17, 0x63, 0xbd, 0x6a, 0xe0, 0xe8, 0xc3, 0xa8, 0x57, 0xf5, 0xb7, 0xcc, 0xb5, 0x67, 0xe8, 0xfa, 0x29, 0x67, 0x43, 0x3f, 0x8d, 0xd2, 0x53, 0xab, 0x92, 0xeb, 0xf1, 0x98, 0x32, 0xcb, 0x0a, 0x62, 0x76, 0xd6, 0xf8, 0x2a, 0x7c, 0xe9, 0x77, 0x0f, 0xa4, 0xb6, 0xf7, 0xef, 0x06, 0xec, 0x71, 0x6d, 0xab, 0x37, 0xb8, 0x4e, 0xd9, 0x89, 0xed, 0xd1, 0x4f, 0xed, 0x81, 0x1a, 0xd7, 0xb9, 0xa4, 0xc6, 0x75, 0xa4, 0x4f, 0xe0, 0xbf, 0xbf, 0xff, 0xdf, 0xd6, 0xe8, 0xd6, 0x50, 0xfc, 0xfe, 0x35, 0xe3, 0x25, 0x15, 0xd2, 0x42, 0x16, 0xd6, 0xc5, 0x34, 0x4e, 0x42, 0xf7, 0x08, 0xd9, 0x45, 0x10, 0x10, 0x34, 0xe6, 0x5e, 0xac, 0x17, 0x74, 0x15, 0x5e, 0x56, 0xd3, 0x5a, 0x99, 0x74, 0x73, 0xcb, 0x07, 0xa9, 0x45, 0xcd, 0xdc, 0xa2, 0x97, 0xd0, 0xaf, 0xbc, 0x82, 0xd2, 0x8b, 0x7b, 0xd4, 0xbe, 0xb7, 0x5f, 0xb5, 0x81, 0x80, 0x72, 0x16, 0xdd, 0xc3, 0x99, 0xd7, 0x95, 0x45, 0xb4, 0xee, 0x3e, 0xae, 0x1e, 0x47, 0xdd, 0x63, 0x8b, 0x62, 0x22, 0x57, 0x24, 0x6f, 0xfd, 0xc0, 0xd1, 0xa7, 0xa9, 0xd4, 0xf1, 0x94, 0x9a, 0xaa, 0x83, 0xd9, 0x40, 0xa3, 0x2b, 0x80, 0x47, 0x92, 0x70, 0xdf, 0x8c, 0x39, 0x77, 0x16, 0xa4, 0xc0, 0x6d, 0x8c, 0xc3, 0x49, 0x37, 0x3a, 0x2b, 0x4b, 0xe2, 0x3a, 0x19, 0x42, 0xb5, 0x48, 0x40, 0xb5, 0xf2, 0x81, 0x77, 0xd6, 0x08, 0x5d, 0xf6, 0xe8, 0xbf, 0x60, 0x8a, 0xb9, 0xd6, 0x8c, 0xaa, 0xde, 0x5d, 0xb1, 0x90, 0xdd, 0xca, 0x29, 0x58, 0x16, 0x6b, 0x73, 0xec, 0x5e, 0xd7, 0x29, 0x97, 0x77, 0x28, 0xf2, 0xc0, 0x3e, 0x4d, 0xf7, 0x3d, 0xf2, 0x2f, 0xd8, 0x9b, 0xc6, 0xe1, 0x77, 0xf7, 0x1a, 0xc6, 0x67, 0x52, 0x27, 0xcb, 0xbd, 0x84, 0x4e, 0x06, 0xb0, 0x1e, 0x4b, 0x32, 0x55, 0xc4, 0xb4, 0x9e, 0xc7, 0x7a, 0xd9, 0xa3, 0x7b, 0x50, 0x2f, 0x1b, 0x88, 0xeb, 0x65, 0x91, 0x2f, 0xbf, 0x38, 0xd0, 0x9e, 0x15, 0x19, 0x7e, 0x67, 0x40, 0xd0, 0x04, 0xf6, 0x74, 0x73, 0xe4, 0xcb, 0xeb, 0x35, 0xd7, 0xef, 0x37, 0xf3, 0x29, 0x4f, 0xe6, 0x40, 0xcc, 0x1c, 0xa3, 0xa9, 0xe7, 0xa0, 0x2e, 0x30, 0x60, 0xc3, 0xbe, 0xbe, 0xf2, 0x9e, 0x03, 0x03, 0xa7, 0xe7, 0x79, 0xcb, 0x3d, 0xe5, 0x1a, 0x25, 0xac, 0xe9, 0xef, 0xbf, 0x48, 0x53, 0x5b, 0x53, 0x8b, 0x85, 0x76, 0x65, 0x7d, 0xae, 0x9e, 0x06, 0x76, 0x09, 0x5b, 0x94, 0x76, 0x53, 0xe5, 0x8f, 0xeb, 0x1d, 0x99, 0x3f, 0x4d, 0x52, 0xfe, 0xf1, 0x02, 0xd0, 0xad, 0x01, 0xf5, 0x0c, 0x84, 0xcd, 0x47, 0xfe, 0x05, 0xca, 0x8d, 0xe0, 0x90, 0x74, 0x6b, 0xc9, 0x7d, 0xe4, 0x19, 0xa8, 0x32, 0x32, 0x6d, 0x93, 0xde, 0x56, 0xe0, 0x92, 0x25, 0xf1, 0x65, 0x77, 0x15, 0x65, 0xea, 0xee, 0x27, 0x5c, 0x92, 0x0f, 0xbd, 0xdf, 0x8f, 0xd9, 0x26, 0x18, 0xfa, 0x86, 0xf0, 0x4b, 0xd3, 0xee, 0x32, 0x9c, 0x06, 0xa1, 0xc5, 0xa1, 0x76, 0x67, 0x76, 0x66, 0x08, 0xed, 0xae, 0xe0, 0xaa, 0x03, 0x31, 0xd4, 0xf5, 0xcc, 0x71, 0x8d, 0x8e, 0x5d, 0x06, 0x11, 0x76, 0x20, 0xe6, 0x5b, 0xd3, 0xa5, 0x3f, 0xb0, 0x46, 0x31, 0x52, 0x4e, 0xaf, 0xd2, 0xad, 0xc0, 0x19, 0xd8, 0x23, 0xd6, 0x70, 0x8f, 0xc0, 0x7e, 0x40, 0x78, 0xf8, 0xb7, 0x7e, 0xc1, 0x1b, 0xd7, 0xf6, 0x63, 0x8b, 0x4d, 0x19, 0xdf, 0x97, 0xd3, 0xfa, 0x7b, 0xf6, 0xc5, 0x7d, 0x26, 0xae, 0xdd, 0xc5, 0x65, 0x40, 0x82, 0xd2, 0xc7, 0x59, 0x76, 0x06, 0x81, 0x97, 0xc9, 0xe2, 0x2d, 0xfc, 0x97, 0x5d, 0x52, 0xe3, 0x73, 0x66, 0x19, 0x7a, 0x35, 0x5e, 0xf8, 0xb2, 0x70, 0x23, 0x3d, 0x5c, 0xcc, 0xc3, 0xac, 0x71, 0x3a, 0x0e, 0x66, 0x09, 0x2a, 0xd2, 0x78, 0xa2, 0x29, 0x9e, 0x9f, 0xe0, 0x6a, 0x64, 0x43, 0x0b, 0x3d, 0x71, 0xdf, 0x39, 0x18, 0x76, 0x5b, 0x24, 0xc9, 0xa8, 0xc2, 0xb1, 0xb7, 0x73, 0xf0, 0xb1, 0xc3, 0xb1, 0xc3, 0x2f, 0x0b, 0xbd, 0x69, 0x69, 0x73, 0xa4, 0xab, 0x63, 0x66, 0x6b, 0x53, 0x67, 0x73, 0x7b, 0x4b, 0x44, 0xd3, 0x0e, 0xd9, 0xaf, 0x48, 0xf3, 0x93, 0x6f, 0x2a, 0x9a, 0xfd, 0x9f, 0x50, 0x09, 0xaf, 0x4a, 0xcf, 0x18, 0xcc, 0xe5, 0x15, 0x55, 0x6d, 0xed, 0x2d, 0xf5, 0x77, 0x77, 0x47, 0x5b, 0x3a, 0x48, 0x04, 0x4d, 0xd5, 0x6e, 0x9b, 0xb7, 0x6a, 0xef, 0x1b, 0xd2, 0xae, 0x91, 0x3f, 0xf6, 0xd7, 0x7b, 0x60, 0x38, 0x73, 0x33, 0x0c, 0x1b, 0x1f, 0x84, 0xe1, 0x09, 0x4f, 0xa2, 0xfb, 0x09, 0x38, 0x36, 0xba, 0x07, 0x8e, 0x8d, 0x9c, 0x81, 0x61, 0xdd, 0x4a, 0x74, 0xbf, 0x85, 0xdf, 0xa8, 0xef, 0x8e, 0xa0, 0x56, 0x38, 0xd2, 0x8c, 0xcf, 0x2a, 0x38, 0xf6, 0xd9, 0x39, 0x7c, 0xef, 0xc4, 0xe7, 0xfb, 0xf8, 0x3c, 0xb9, 0xfb, 0xe7, 0xaf, 0xbf, 0xf1, 0xf6, 0x81, 0xc3, 0xbf, 0x3b, 0x72, 0xf4, 0xc3, 0xdf, 0xff, 0x61, 0xf8, 0xa3, 0xe3, 0x27, 0xfe, 0xf8, 0xf1, 0xc9, 0x53, 0xa7, 0xff, 0xf4, 0xe7, 0xb3, 0xe7, 0x3e, 0xf9, 0xcb, 0xc8, 0x5f, 0x3f, 0x1b, 0x7d, 0x65, 0xeb, 0xd3, 0xff, 0xf2, 0x83, 0xff, 0xf3, 0xd2, 0x07, 0x2f, 0xfc, 0xf0, 0x95, 0x6d, 0x9b, 0x5f, 0x79, 0xed, 0xe0, 0x2b, 0x3f, 0x7e, 0xe5, 0x95, 0xff, 0xfd, 0xaf, 0x67, 0x5e, 0xc1, 0xbf, 0x2d, 0x3b, 0x5e, 0x39, 0x76, 0xfe, 0x95, 0x7f, 0x7e, 0x8e, 0xbe, 0x9f, 0xfd, 0xb7, 0x57, 0x9e, 0x1a, 0xfa, 0xd9, 0x7b, 0xaf, 0xbc, 0xf2, 0xfc, 0x4c, 0xab, 0x55, 0xd9, 0xf6, 0xe9, 0x2b, 0xea, 0x2b, 0xce, 0xef, 0x53, 0xc0, 0x2b, 0x45, 0xdb, 0x5f, 0x79, 0x65, 0xd7, 0xde, 0x57, 0x7f, 0xb1, 0xe7, 0x97, 0x6f, 0xfd, 0xea, 0xcd, 0x77, 0xf7, 0xbf, 0xf2, 0xce, 0xa1, 0xff, 0xf8, 0xcd, 0x2b, 0xb7, 0xdf, 0xf3, 0xfc, 0x2b, 0xff, 0x67, 0xeb, 0x2b, 0xd6, 0xa2, 0x57, 0x60, 0x38, 0xeb, 0x00, 0x0c, 0x7f, 0x29, 0x06, 0xc3, 0x5f, 0x99, 0x02, 0xc3, 0x93, 0xbd, 0xe8, 0x3e, 0x0b, 0xc3, 0xd7, 0xe8, 0x60, 0xf8, 0xfa, 0x11, 0x18, 0xfe, 0x6a, 0x2b, 0x0c, 0x5f, 0x5d, 0x86, 0xcf, 0x10, 0x0c, 0x5b, 0x2c, 0x30, 0x3c, 0x35, 0x1f, 0xdf, 0x18, 0x37, 0x1b, 0xe3, 0x58, 0xbe, 0x87, 0xcf, 0x3e, 0x7c, 0x1e, 0x89, 0x41, 0xc6, 0x1f, 0x61, 0xf8, 0x1b, 0xd8, 0x11, 0x32, 0xb0, 0x6e, 0x87, 0x5a, 0xf0, 0xfd, 0x67, 0x00, 0x4b, 0x2a, 0xa2, 0xc5, 0xfe, 0xec, 0x63, 0x87, 0xfe, 0x2c, 0xde, 0xff, 0x31, 0x21, 0xad, 0x19, 0xa4, 0xaf, 0xde, 0x51, 0x07, 0xc0, 0x47, 0x35, 0x68, 0xbf, 0x53, 0x7e, 0xfa, 0xa7, 0x33, 0x00, 0xc5, 0xa7, 0xaf, 0xce, 0x03, 0x28, 0xda, 0x72, 0xf6, 0x38, 0xfe, 0x9e, 0xfa, 0x64, 0x3b, 0xfe, 0x3e, 0x3b, 0x19, 0xc3, 0x8b, 0x7e, 0x78, 0x62, 0x3b, 0xff, 0xa2, 0x7f, 0xf1, 0x96, 0xaf, 0x60, 0x9c, 0xeb, 0xff, 0x91, 0xe2, 0x5f, 0xfc, 0x97, 0xa1, 0x3e, 0xfb, 0xa8, 0x05, 0xae, 0xd6, 0xbf, 0xd7, 0x56, 0x5c, 0x51, 0xbc, 0x65, 0xcb, 0x43, 0xdf, 0x07, 0x57, 0xc3, 0xfe, 0x06, 0x57, 0xc3, 0x66, 0xd3, 0xe6, 0xcd, 0x3d, 0x13, 0x17, 0x56, 0xbc, 0xd7, 0xe0, 0x0d, 0x6c, 0x79, 0xaa, 0x30, 0x96, 0x63, 0xdd, 0xf2, 0x83, 0xfd, 0xb0, 0xa4, 0x4e, 0x9a, 0xbf, 0x6c, 0xcb, 0xfe, 0x2d, 0x5b, 0x26, 0x7c, 0xb0, 0xd0, 0x17, 0xa8, 0x1b, 0x70, 0x8e, 0xed, 0xdf, 0x9e, 0x79, 0xeb, 0x97, 0x2e, 0x8c, 0x2c, 0x2c, 0x7c, 0x61, 0xd2, 0x67, 0xfb, 0x4f, 0x3f, 0xb6, 0xb8, 0xf2, 0xf7, 0xa7, 0xbe, 0xb3, 0x64, 0xbb, 0xe9, 0xfa, 0xc5, 0xea, 0x6f, 0x17, 0x2e, 0xfc, 0x6c, 0xec, 0xae, 0xbb, 0x3e, 0xbd, 0xeb, 0xd7, 0x2b, 0xd5, 0x31, 0x75, 0xec, 0xde, 0x31, 0x5e, 0x80, 0x31, 0x96, 0x5e, 0x7c, 0xce, 0x55, 0x16, 0x68, 0x58, 0xe8, 0x02, 0x7d, 0x83, 0xa0, 0x9a, 0x85, 0xee, 0x76, 0x7d, 0x66, 0xc3, 0xc0, 0xa0, 0xe5, 0xcc, 0x91, 0x81, 0x85, 0xdf, 0x5e, 0x98, 0x79, 0x5d, 0xc3, 0x96, 0x47, 0xaf, 0xb9, 0x53, 0xb7, 0x65, 0xe1, 0x2d, 0x0d, 0x7f, 0x58, 0xd8, 0x70, 0xea, 0xed, 0x85, 0x8f, 0x55, 0x9d, 0x5a, 0xf8, 0xed, 0x86, 0xeb, 0xae, 0x6b, 0x50, 0x7f, 0xb5, 0xf0, 0xc3, 0xe1, 0xb1, 0x85, 0x2e, 0x8a, 0x2f, 0x72, 0xfe, 0x2d, 0xfd, 0x1d, 0x16, 0xdf, 0xea, 0xe8, 0xc2, 0xb1, 0xce, 0x53, 0xea, 0x27, 0x2f, 0x7c, 0xf6, 0xfe, 0xa9, 0x7f, 0xfb, 0x5f, 0xea, 0xa7, 0x2b, 0x6e, 0x53, 0xd5, 0x97, 0x4f, 0xfd, 0xe8, 0xe5, 0x2d, 0xea, 0xa7, 0xbf, 0xbd, 0x63, 0xd7, 0xa7, 0xea, 0xc8, 0x0e, 0xf5, 0xa5, 0x1f, 0xaa, 0xea, 0xa7, 0xea, 0x89, 0x0f, 0x16, 0x36, 0xde, 0xac, 0xee, 0xdc, 0xb2, 0xe5, 0xa5, 0x0f, 0xd4, 0x2d, 0xf5, 0x7f, 0xf9, 0x6c, 0xcb, 0x96, 0xfd, 0xcf, 0x9e, 0xbe, 0xf7, 0x5c, 0xa6, 0xaf, 0xf2, 0xb3, 0x0b, 0x23, 0xba, 0xdd, 0xcf, 0x7e, 0xf0, 0xd7, 0x0b, 0x57, 0x15, 0x5a, 0x4e, 0x9f, 0x7d, 0x79, 0x87, 0xe5, 0xe9, 0xdf, 0xfe, 0xe1, 0xd3, 0x13, 0x4f, 0xc3, 0xb5, 0x23, 0xcf, 0x7a, 0x61, 0xe0, 0x7e, 0xe3, 0x83, 0x5e, 0x94, 0x4f, 0xfb, 0x4c, 0xb1, 0xc4, 0x9a, 0x14, 0x2e, 0x57, 0xfc, 0x8e, 0x1d, 0x7d, 0xea, 0x47, 0x08, 0xc3, 0xbd, 0x0c, 0x09, 0xff, 0x1e, 0xa9, 0xca, 0xba, 0x7a, 0x4c, 0xdd, 0x57, 0x99, 0xf9, 0xa5, 0x31, 0x75, 0xa8, 0xc2, 0x3c, 0x61, 0x4c, 0xdd, 0x5d, 0x61, 0xae, 0xc6, 0xdf, 0xca, 0x1c, 0xc4, 0xcc, 0xee, 0x2a, 0x3d, 0x7e, 0x0f, 0x55, 0xe9, 0xd1, 0x7f, 0x5f, 0xc5, 0x75, 0x18, 0xe7, 0xc8, 0x6b, 0x14, 0x3f, 0x35, 0xcf, 0xf8, 0xef, 0xb3, 0xf4, 0x7b, 0xcb, 0x7b, 0x98, 0xea, 0x0c, 0x6c, 0x7e, 0xe8, 0x65, 0x75, 0xc8, 0xfd, 0x76, 0xc3, 0x3d, 0xea, 0x66, 0xe3, 0xd3, 0x9b, 0xef, 0x51, 0x17, 0x56, 0xfe, 0xbc, 0xe1, 0x9e, 0x31, 0x6a, 0xaf, 0xb9, 0x63, 0x5b, 0xbe, 0xdf, 0x00, 0xf7, 0x5c, 0x58, 0x38, 0x6f, 0xcb, 0x96, 0xb1, 0x31, 0x93, 0xfe, 0x8e, 0x85, 0x73, 0xc7, 0x2c, 0x9b, 0x9d, 0x63, 0x2f, 0x8f, 0xe9, 0x33, 0x6e, 0xbd, 0x30, 0x77, 0x4c, 0x36, 0x3c, 0x3b, 0x72, 0x8f, 0x6a, 0xb9, 0x6a, 0xe1, 0x87, 0x63, 0xea, 0xd3, 0x93, 0xb7, 0x5c, 0x33, 0xa6, 0x7e, 0xbc, 0x70, 0xe1, 0xfd, 0x63, 0xea, 0x79, 0x75, 0xf4, 0x66, 0xcc, 0x1f, 0xa4, 0x78, 0x89, 0xc9, 0xee, 0x5e, 0x14, 0x69, 0xe9, 0xee, 0x5a, 0x11, 0x59, 0xda, 0x72, 0xa5, 0xfc, 0xa5, 0xad, 0x33, 0xbc, 0x22, 0x5a, 0xd4, 0xdc, 0xb2, 0xb2, 0x0d, 0xd3, 0x4c, 0x58, 0xd8, 0xd9, 0xd9, 0xd4, 0xd1, 0x82, 0xe6, 0x45, 0x4d, 0xed, 0x1c, 0x28, 0x6f, 0xea, 0xec, 0xec, 0x8a, 0xca, 0xe1, 0x96, 0x48, 0xb0, 0x2b, 0xd2, 0x21, 0x87, 0xdb, 0x9b, 0xee, 0x96, 0x9b, 0x56, 0x34, 0xb7, 0x75, 0xc9, 0x4b, 0xbb, 0x3a, 0x3a, 0x30, 0xcb, 0xa9, 0xd0, 0xd6, 0xde, 0xde, 0x12, 0x6a, 0x6a, 0xbf, 0xa3, 0xbd, 0xad, 0x73, 0x39, 0x94, 0x57, 0xcc, 0xac, 0x70, 0x43, 0x73, 0x57, 0xd2, 0x02, 0x5e, 0x11, 0x6d, 0x6b, 0x6f, 0x8b, 0xde, 0x9d, 0x70, 0x47, 0xdb, 0x3a, 0x5a, 0x22, 0xf1, 0xc2, 0xe6, 0x80, 0x3b, 0x1c, 0x6e, 0x6f, 0xb9, 0xc3, 0x5b, 0x55, 0x0f, 0x45, 0x91, 0xee, 0xc8, 0x52, 0xf4, 0x29, 0xaf, 0x28, 0x2e, 0xbe, 0x09, 0x7f, 0x03, 0x0b, 0xe6, 0xe3, 0x6f, 0xc3, 0x22, 0x70, 0xcf, 0xaf, 0xa9, 0x76, 0x43, 0x79, 0x2d, 0x2c, 0x58, 0x11, 0x95, 0xbb, 0x82, 0x72, 0x47, 0x4b, 0x47, 0x57, 0xe4, 0x6e, 0xac, 0x97, 0x80, 0xad, 0xa9, 0xbd, 0xbd, 0x6b, 0x69, 0x53, 0xb4, 0x45, 0x5e, 0xb2, 0x22, 0x18, 0x6c, 0x89, 0x74, 0x9b, 0xec, 0x0d, 0x68, 0x5a, 0x2f, 0xc5, 0xfa, 0x86, 0xd0, 0xdc, 0x96, 0x3d, 0x2b, 0x82, 0xf3, 0x5b, 0x3a, 0x1a, 0xee, 0x0e, 0xb7, 0xc8, 0x5d, 0xe1, 0x68, 0x5b, 0x57, 0x67, 0xd1, 0xf4, 0x78, 0xad, 0xba, 0xc2, 0x2d, 0x9d, 0x72, 0xb4, 0xb5, 0x05, 0x73, 0xec, 0xee, 0x6e, 0x0a, 0xb5, 0xc8, 0xe1, 0xae, 0x48, 0xb4, 0xe8, 0xa2, 0xd0, 0x1a, 0xe7, 0x02, 0x39, 0xd2, 0x72, 0xe7, 0x8a, 0x96, 0xee, 0xa8, 0xdc, 0x1d, 0x8d, 0xac, 0x58, 0x1a, 0x5d, 0x11, 0x69, 0x49, 0x8f, 0x66, 0x9d, 0xd6, 0x6d, 0x95, 0x57, 0x74, 0xb6, 0x45, 0xe5, 0x69, 0xed, 0xcd, 0xf1, 0x90, 0xa6, 0xa5, 0x4b, 0x31, 0x5f, 0x99, 0x6b, 0x22, 0x37, 0x47, 0xda, 0x56, 0xb6, 0xcc, 0x91, 0x35, 0x64, 0xc9, 0x4b, 0x10, 0xe6, 0xe5, 0xdd, 0x6d, 0xab, 0x31, 0x9f, 0x66, 0xc4, 0xec, 0x72, 0x88, 0xf0, 0x6f, 0xa0, 0xb2, 0x21, 0xf0, 0x2d, 0x67, 0xbd, 0xa3, 0xf6, 0x9b, 0xb5, 0x0b, 0x6e, 0xad, 0x0c, 0x94, 0xbb, 0xeb, 0x2b, 0xd1, 0x35, 0xbf, 0xf6, 0x9b, 0xf3, 0xdd, 0xdf, 0xf2, 0x54, 0xa6, 0xfa, 0x05, 0xbe, 0x19, 0x58, 0x50, 0x3e, 0x2f, 0x50, 0x53, 0x51, 0x4d, 0x2e, 0xdf, 0x37, 0x7d, 0x0b, 0x6a, 0x6b, 0x2a, 0x1b, 0x28, 0x72, 0x0d, 0x46, 0x2e, 0x6f, 0x58, 0x50, 0x53, 0xbf, 0x00, 0x5d, 0xe5, 0xf5, 0xdf, 0x2c, 0x5f, 0xe0, 0x47, 0x32, 0x68, 0xa8, 0xaf, 0x73, 0x97, 0x57, 0xd6, 0xa3, 0x57, 0xfd, 0xa2, 0x6f, 0xd6, 0x7b, 0x17, 0xdc, 0x8a, 0x7e, 0xf5, 0x35, 0x0b, 0xfc, 0xe8, 0xe1, 0xad, 0xfa, 0x26, 0xe2, 0xbf, 0xaa, 0x26, 0x50, 0x4f, 0xe9, 0xab, 0x3c, 0xdf, 0xac, 0xaa, 0xa9, 0xad, 0xf4, 0x2c, 0xac, 0xaa, 0xc2, 0x18, 0xce, 0x79, 0x4e, 0xbf, 0xa3, 0xa2, 0xf2, 0x9b, 0x15, 0xee, 0x06, 0x77, 0x65, 0x63, 0x83, 0x73, 0x9e, 0x23, 0x50, 0xf9, 0xcd, 0x40, 0x65, 0xfd, 0x82, 0x85, 0x81, 0xf2, 0x4a, 0xe1, 0x51, 0x5f, 0xf3, 0xcd, 0xfa, 0x72, 0xb7, 0xbf, 0xc6, 0xdf, 0x50, 0x19, 0x58, 0xe4, 0xae, 0xe5, 0x14, 0x75, 0xe5, 0xdf, 0xac, 0xab, 0x75, 0x7f, 0xab, 0xbc, 0xa2, 0xc2, 0x8d, 0x31, 0x1a, 0xbf, 0xd9, 0x58, 0xb7, 0x40, 0x64, 0xf5, 0xad, 0x6f, 0x7e, 0x2b, 0xfe, 0x09, 0x0b, 0xb8, 0x39, 0xba, 0xe5, 0x5a, 0x19, 0xe9, 0x48, 0x9e, 0x8f, 0xaf, 0x08, 0x36, 0xc5, 0x8a, 0xe8, 0x0a, 0x6c, 0xd1, 0xbb, 0xe5, 0x96, 0x55, 0x4b, 0xdb, 0x57, 0x74, 0x23, 0xd2, 0xa6, 0x42, 0x8d, 0x86, 0xb4, 0xce, 0x15, 0x1d, 0x4b, 0x90, 0x82, 0x91, 0x04, 0x82, 0x48, 0xec, 0xf1, 0xf6, 0x9e, 0xc3, 0x38, 0x8f, 0x17, 0x17, 0xa7, 0x4b, 0x99, 0x88, 0x58, 0x8e, 0x76, 0x75, 0xc9, 0xed, 0x5d, 0x9d, 0xa8, 0x9d, 0x56, 0x46, 0x22, 0x5d, 0x11, 0xf9, 0xae, 0x56, 0x4a, 0x18, 0x6e, 0x8a, 0xd0, 0x48, 0x8c, 0x6c, 0x2d, 0xef, 0xea, 0x8c, 0x46, 0xba, 0xda, 0xad, 0x98, 0x5f, 0x4b, 0x7b, 0xb3, 0xdc, 0xd6, 0x29, 0xcf, 0xef, 0x5a, 0xd1, 0x19, 0x6d, 0x6f, 0xeb, 0x8e, 0xce, 0x31, 0x4d, 0xeb, 0x4e, 0x27, 0x38, 0xa8, 0xa8, 0xa9, 0x84, 0x05, 0x75, 0x95, 0xfe, 0x99, 0x81, 0x5b, 0xc5, 0x7b, 0x41, 0x6d, 0x85, 0xf8, 0xf0, 0x57, 0xde, 0x8a, 0x4d, 0xe7, 0xae, 0x80, 0x5b, 0x03, 0x35, 0x0d, 0x95, 0x48, 0xaa, 0x0b, 0xea, 0x2b, 0xa1, 0xbe, 0xb2, 0x72, 0x1e, 0x54, 0x36, 0x22, 0xf5, 0xfa, 0x2b, 0x65, 0x3f, 0xe2, 0x2a, 0xe1, 0x58, 0xe0, 0xf1, 0x41, 0x8d, 0xbf, 0x6a, 0x01, 0xe6, 0x58, 0x3f, 0x4f, 0xe6, 0xaf, 0x3a, 0x77, 0xa0, 0xd2, 0xdf, 0x50, 0x51, 0x13, 0x80, 0x8a, 0xca, 0xda, 0x4a, 0xca, 0x03, 0xf3, 0x6b, 0xa8, 0x24, 0x8f, 0x5a, 0x6c, 0x67, 0xa8, 0x58, 0x58, 0xc7, 0xef, 0xaa, 0x40, 0x65, 0x25, 0x7f, 0xd4, 0x57, 0x36, 0xd4, 0x05, 0x16, 0x34, 0x54, 0x96, 0x37, 0xd0, 0x67, 0xf9, 0x82, 0xf9, 0xf3, 0x31, 0x3d, 0x02, 0xe1, 0x77, 0xcf, 0xaf, 0xc4, 0xcc, 0xbd, 0x35, 0x9e, 0x9a, 0xb8, 0x53, 0xa6, 0x62, 0x60, 0xfe, 0x82, 0x40, 0xa5, 0x5c, 0xee, 0x2e, 0xf7, 0x56, 0xc2, 0xad, 0xee, 0x9a, 0x06, 0xb9, 0x6a, 0x41, 0x40, 0x2e, 0xf7, 0xba, 0x03, 0x50, 0x55, 0xbb, 0xb0, 0xde, 0x0b, 0xf5, 0x58, 0x60, 0xa5, 0x7f, 0xfe, 0x82, 0x0a, 0x4c, 0x5d, 0x7f, 0x07, 0x51, 0x40, 0xfd, 0xb7, 0xea, 0x1b, 0x2a, 0xe7, 0x43, 0x3d, 0xe6, 0x70, 0x07, 0x17, 0x59, 0xbe, 0xa0, 0xee, 0x5b, 0x77, 0x20, 0x44, 0x77, 0x54, 0x79, 0x35, 0x78, 0xe9, 0x4b, 0xab, 0x14, 0x7d, 0x56, 0x79, 0xef, 0xa8, 0x42, 0x5a, 0xd7, 0x62, 0x2f, 0x0c, 0x70, 0x94, 0x45, 0x0b, 0x6a, 0x17, 0x22, 0x48, 0x84, 0x1e, 0xb9, 0xb6, 0xc6, 0x8f, 0x80, 0xb8, 0xe7, 0x55, 0x8a, 0xaf, 0x85, 0xf5, 0x95, 0x01, 0x98, 0x19, 0xff, 0x5b, 0xe8, 0x9f, 0xe7, 0x5f, 0x70, 0xab, 0x5f, 0x73, 0x81, 0x7f, 0x3e, 0xb8, 0xeb, 0xa1, 0xae, 0x11, 0xea, 0x6b, 0xc1, 0x09, 0xdd, 0x77, 0x77, 0xcf, 0x21, 0x6e, 0x11, 0x67, 0x05, 0x75, 0xb5, 0x09, 0x3e, 0xb1, 0xa8, 0xa2, 0xaa, 0x5e, 0x0e, 0x47, 0x5a, 0x82, 0xdd, 0x72, 0x47, 0x17, 0x76, 0xc1, 0xae, 0x08, 0x2c, 0xed, 0x6a, 0x6e, 0xe9, 0x6e, 0x89, 0x26, 0x99, 0xd0, 0xc2, 0x86, 0xaa, 0x99, 0x37, 0xcd, 0x46, 0x46, 0x17, 0x5d, 0xd1, 0xc6, 0x3c, 0x20, 0x1e, 0x70, 0x17, 0xf6, 0xba, 0x25, 0x2d, 0x9d, 0x4b, 0x5b, 0x13, 0x3e, 0x6d, 0x4b, 0x53, 0x82, 0x5b, 0x3a, 0x57, 0xce, 0x59, 0xda, 0xdc, 0xdc, 0x04, 0x50, 0x83, 0xdd, 0x88, 0x71, 0x5b, 0xdf, 0xda, 0x75, 0xd7, 0x1d, 0x44, 0x69, 0x77, 0xd4, 0x60, 0x4c, 0x64, 0x42, 0x48, 0x9c, 0xcd, 0x72, 0xf4, 0x2e, 0x64, 0x67, 0x53, 0x05, 0xd7, 0x92, 0xbd, 0x1a, 0xab, 0x65, 0x9a, 0x03, 0xf7, 0x12, 0xe4, 0x2a, 0x29, 0xa2, 0xd4, 0x86, 0xcf, 0x34, 0xed, 0x9d, 0xfa, 0x80, 0xb3, 0x14, 0x75, 0xce, 0x9f, 0xc2, 0xb1, 0x33, 0x36, 0x5a, 0xfd, 0xba, 0x6e, 0x9d, 0x7f, 0xa1, 0xba, 0x1f, 0xed, 0x97, 0x39, 0xde, 0x55, 0x60, 0xf3, 0xfc, 0xc0, 0xdb, 0xa1, 0xee, 0xa7, 0x71, 0xb3, 0xef, 0x3c, 0x2e, 0x97, 0xa1, 0x4e, 0xd9, 0xf3, 0xe1, 0xc0, 0x0c, 0x97, 0x7a, 0x70, 0x46, 0x0f, 0xea, 0x20, 0xc5, 0xea, 0xd1, 0x19, 0x3d, 0x84, 0x08, 0xf5, 0x18, 0x87, 0xb5, 0x73, 0xd8, 0x89, 0xaf, 0xd0, 0xe9, 0xd7, 0xa7, 0xb5, 0x18, 0xe7, 0x3c, 0xcf, 0xab, 0xe7, 0xf1, 0x19, 0x2d, 0xff, 0x2b, 0x1c, 0x7b, 0xaf, 0x33, 0x31, 0x53, 0x9a, 0xa5, 0x8d, 0xa3, 0x81, 0x64, 0xa8, 0xfe, 0x58, 0xfd, 0x6d, 0x14, 0xec, 0x65, 0xa0, 0x16, 0xda, 0x4b, 0x7b, 0x20, 0xfb, 0x37, 0x43, 0xe1, 0xb9, 0x11, 0xc9, 0xeb, 0x4e, 0x68, 0xc3, 0x73, 0x6c, 0x2e, 0xde, 0x23, 0x70, 0xd8, 0x3a, 0x53, 0x3d, 0x27, 0xcf, 0x54, 0x8f, 0xae, 0x04, 0xc5, 0xb0, 0xb5, 0x37, 0x64, 0x5c, 0x29, 0x6d, 0x5b, 0xd3, 0xf9, 0x89, 0x82, 0x8a, 0xa2, 0x9c, 0xb1, 0x6f, 0xcd, 0xbe, 0xd8, 0xfc, 0xbf, 0x18, 0xcf, 0xfb, 0x36, 0x05, 0x73, 0xe4, 0x8c, 0xe1, 0x01, 0x72, 0x3b, 0xbf, 0x6e, 0x3c, 0x2a, 0x57, 0xf8, 0xd7, 0x39, 0x62, 0x8d, 0x83, 0x07, 0xd6, 0x1c, 0x58, 0x23, 0x7f, 0xbd, 0xf4, 0x7c, 0x30, 0xc7, 0xea, 0x43, 0x7d, 0x7a, 0x6e, 0x72, 0x24, 0x8d, 0xce, 0x03, 0x9b, 0x86, 0xd0, 0xbe, 0xd7, 0x07, 0xa6, 0xeb, 0x96, 0xa3, 0x6c, 0x9b, 0x38, 0x6d, 0x39, 0x8d, 0x0a, 0x4e, 0xa3, 0x59, 0x37, 0x03, 0x64, 0x4f, 0xa3, 0x5b, 0xd2, 0x37, 0x43, 0xae, 0x75, 0x06, 0x48, 0x21, 0x33, 0xbb, 0xb6, 0x43, 0xee, 0x34, 0x37, 0x14, 0x62, 0xbc, 0xcf, 0xa0, 0x20, 0xfb, 0x5a, 0x9a, 0x59, 0x9a, 0xe6, 0x85, 0xa2, 0x69, 0x2e, 0x98, 0x1d, 0x56, 0xf1, 0x77, 0x4e, 0x22, 0xf7, 0x1e, 0xb9, 0xd6, 0xea, 0x4b, 0xd4, 0xfa, 0x6c, 0xc2, 0x7f, 0x65, 0xa0, 0xaf, 0xfa, 0x8f, 0x90, 0x1d, 0xd6, 0x6d, 0xed, 0x0b, 0x82, 0x6a, 0xa9, 0xfd, 0x78, 0x71, 0xbe, 0xba, 0xdd, 0xff, 0x1d, 0x6d, 0xfc, 0x0c, 0xbc, 0x77, 0x83, 0xba, 0xc4, 0xc0, 0xe3, 0x95, 0xd0, 0x38, 0x88, 0xb5, 0x2f, 0x4b, 0x1d, 0x5f, 0x7c, 0xdb, 0x57, 0x29, 0xc6, 0x0b, 0xd7, 0x6b, 0x58, 0x9c, 0x92, 0x1c, 0x37, 0x7c, 0xfb, 0x36, 0xff, 0x7a, 0xff, 0x8e, 0xb1, 0x32, 0x0a, 0x21, 0x8b, 0x83, 0xc6, 0xaf, 0x92, 0x23, 0x8d, 0x6f, 0x2f, 0x89, 0xa7, 0x4c, 0x49, 0x11, 0xf0, 0xaf, 0x4f, 0x29, 0x4f, 0x4f, 0xa3, 0x64, 0x68, 0xa7, 0xee, 0x72, 0x66, 0x59, 0x9d, 0x60, 0x74, 0x74, 0x81, 0x99, 0xda, 0x40, 0x58, 0x2a, 0xe8, 0x32, 0x52, 0xad, 0xd2, 0x5c, 0x2b, 0x85, 0x8b, 0x46, 0x04, 0x45, 0xec, 0xb1, 0x25, 0xc2, 0x47, 0x4e, 0xf8, 0x5c, 0x68, 0xbf, 0xc8, 0x47, 0x11, 0xb6, 0xbc, 0x6c, 0x45, 0x3f, 0x8b, 0xad, 0x0b, 0x72, 0xde, 0xde, 0xf3, 0xf6, 0x9e, 0x28, 0xe4, 0xe4, 0x59, 0x7d, 0xb2, 0x2e, 0x8e, 0xa7, 0x0b, 0xeb, 0x3c, 0xb3, 0xec, 0x50, 0xfb, 0x41, 0x85, 0x9e, 0x6d, 0xea, 0xb9, 0x85, 0x5d, 0x60, 0x2b, 0xe8, 0x02, 0x3b, 0xc6, 0x77, 0x60, 0x3e, 0xc5, 0x35, 0x7f, 0x04, 0xa3, 0xad, 0x10, 0x8c, 0xe1, 0x65, 0x5b, 0xfb, 0xda, 0x75, 0xd1, 0x65, 0xbe, 0x2d, 0xa0, 0x0f, 0x19, 0x23, 0x19, 0x37, 0xba, 0x41, 0xaf, 0x64, 0xf9, 0xd6, 0x87, 0xf4, 0x61, 0x1d, 0x5a, 0x60, 0x17, 0x6e, 0x44, 0x15, 0x32, 0x2c, 0x21, 0xae, 0x67, 0x99, 0x0b, 0xb1, 0x3f, 0x9b, 0x83, 0x85, 0xe4, 0x23, 0x77, 0x40, 0x89, 0xc5, 0x92, 0x03, 0x34, 0xbf, 0x91, 0x37, 0xe4, 0xd4, 0x59, 0x67, 0x42, 0x49, 0xa0, 0xd7, 0x29, 0xa1, 0xad, 0x89, 0x98, 0x50, 0x76, 0x12, 0x0e, 0x95, 0x88, 0xef, 0x79, 0xd8, 0x1f, 0x9c, 0xec, 0x3e, 0x01, 0x66, 0xb4, 0xbe, 0x8c, 0x68, 0x75, 0xe7, 0xc1, 0x37, 0x42, 0x46, 0x2b, 0x6c, 0x8b, 0x75, 0x9e, 0x55, 0x74, 0x36, 0x29, 0x6f, 0x97, 0x53, 0xe7, 0x5d, 0x06, 0xe6, 0xd4, 0x54, 0xbe, 0x0e, 0xd8, 0x1b, 0x32, 0x62, 0x89, 0x2f, 0x80, 0x31, 0x64, 0x47, 0xd7, 0x9e, 0x50, 0xa1, 0xef, 0x05, 0xc8, 0x0b, 0xe5, 0x2b, 0x56, 0xb9, 0xdc, 0x62, 0xf1, 0xc6, 0xbc, 0x43, 0x8e, 0x0e, 0xc6, 0x6c, 0xad, 0x5c, 0x1e, 0x58, 0x63, 0x19, 0x0a, 0xf4, 0x2b, 0xfa, 0x02, 0xf3, 0x2a, 0xd8, 0xd6, 0xdf, 0xf9, 0xbe, 0xa7, 0xc4, 0x0e, 0x37, 0x2e, 0x07, 0x3d, 0xac, 0xba, 0x71, 0x99, 0x94, 0x03, 0x51, 0xfc, 0xb5, 0x40, 0x8f, 0x5c, 0x28, 0x59, 0x22, 0x93, 0x8e, 0x6e, 0x46, 0xc8, 0x63, 0xf3, 0xc8, 0x5e, 0x2e, 0x71, 0x96, 0x81, 0x74, 0x4b, 0xcc, 0x59, 0x28, 0x99, 0xfd, 0x8f, 0xd5, 0x0d, 0xa2, 0x7f, 0x7f, 0x0d, 0xf9, 0x0f, 0xa5, 0xf8, 0x6f, 0xac, 0x1b, 0xc4, 0xb6, 0x2f, 0x73, 0x82, 0x16, 0x63, 0x80, 0x5d, 0x5a, 0x88, 0x15, 0xde, 0x89, 0xbd, 0x13, 0x1b, 0x7e, 0x60, 0x5f, 0xef, 0xbe, 0x18, 0x86, 0x3d, 0x8c, 0x14, 0xb9, 0xce, 0x56, 0x28, 0xe5, 0x85, 0xfd, 0x8c, 0x4d, 0x7f, 0x2e, 0xd7, 0x4c, 0xca, 0x77, 0x4e, 0x12, 0x35, 0xf3, 0x7c, 0xcd, 0x0e, 0x54, 0x3b, 0xb4, 0x88, 0xf3, 0x45, 0xdb, 0xd9, 0xa8, 0xed, 0x9c, 0x90, 0xe3, 0xd4, 0x39, 0x4d, 0xc4, 0x43, 0x3e, 0x39, 0x13, 0x31, 0x39, 0x96, 0x11, 0x55, 0x5c, 0x88, 0xd4, 0x11, 0xdd, 0x4e, 0xb1, 0xea, 0x34, 0xb7, 0x92, 0xf8, 0xf2, 0x24, 0xe2, 0xb4, 0x8b, 0x96, 0x45, 0xcb, 0xda, 0x44, 0x39, 0xc9, 0xcb, 0x40, 0x6f, 0x0d, 0x84, 0x17, 0xef, 0xfb, 0x11, 0x98, 0xb1, 0x17, 0xe9, 0x6f, 0xf0, 0x81, 0xc9, 0xf3, 0xa8, 0xe7, 0x87, 0xa0, 0x4f, 0xf4, 0xa0, 0xf5, 0xb6, 0x3b, 0x92, 0x94, 0x64, 0xad, 0xfb, 0x5a, 0x0f, 0x4c, 0x84, 0x7c, 0x6b, 0x5d, 0x58, 0xba, 0xc1, 0x05, 0xb2, 0xb5, 0x0e, 0xe3, 0xda, 0xac, 0x75, 0x89, 0xd8, 0xb3, 0x28, 0xee, 0x82, 0xd3, 0xea, 0x71, 0x84, 0x75, 0x56, 0x82, 0xa6, 0x82, 0x36, 0x1a, 0x37, 0x7a, 0x5c, 0x76, 0x85, 0x8b, 0x13, 0x7e, 0x11, 0xe6, 0x31, 0xb4, 0x12, 0xe4, 0xd8, 0x7b, 0x3f, 0x0c, 0x83, 0xd5, 0x97, 0x5c, 0x07, 0x32, 0x56, 0x81, 0x36, 0x78, 0x6d, 0xf5, 0x69, 0xc8, 0x46, 0xdc, 0xe5, 0x7a, 0x7e, 0x20, 0xb0, 0xf1, 0x9d, 0xc7, 0xb9, 0x9d, 0x7f, 0x04, 0x8e, 0x5b, 0x87, 0x0c, 0x68, 0xac, 0x5d, 0xef, 0x82, 0xdc, 0xaf, 0xf7, 0xc0, 0x24, 0xc8, 0x9f, 0x36, 0x0f, 0xec, 0xe1, 0x5c, 0x84, 0xdf, 0x96, 0xd2, 0xf3, 0x4b, 0x53, 0xbe, 0xe7, 0x8a, 0xf1, 0x66, 0xc4, 0xd8, 0x8e, 0xd1, 0xc3, 0x75, 0x83, 0x9a, 0x4b, 0x87, 0xae, 0x23, 0x75, 0x83, 0xb5, 0x1f, 0xd4, 0x52, 0x0f, 0xcc, 0x23, 0x4e, 0x60, 0xa3, 0x31, 0xf6, 0x65, 0x60, 0x9f, 0xda, 0x4a, 0xeb, 0x71, 0x18, 0xc3, 0xc3, 0xae, 0x67, 0x90, 0x1f, 0x6c, 0x81, 0xda, 0x90, 0xc7, 0x59, 0x08, 0xc5, 0xe4, 0x63, 0x3a, 0x86, 0x71, 0x1c, 0xe8, 0xbb, 0x19, 0xf2, 0x83, 0x32, 0xfe, 0xca, 0xc1, 0xc9, 0x18, 0x56, 0x4b, 0xf9, 0x8f, 0x2d, 0xc6, 0x2f, 0x07, 0xc7, 0x7a, 0x8a, 0xa9, 0x99, 0xf2, 0xab, 0xa5, 0x55, 0x83, 0x1e, 0xcc, 0xc3, 0xf3, 0x03, 0x8c, 0x71, 0x14, 0xbf, 0x30, 0xb5, 0x4d, 0xcc, 0x7e, 0xcc, 0xa1, 0x9e, 0x58, 0x10, 0x08, 0xe7, 0x58, 0x91, 0x86, 0x40, 0x4a, 0xe0, 0xa7, 0xc1, 0xee, 0xc2, 0x94, 0x96, 0x00, 0x96, 0x21, 0xe0, 0xb8, 0x6a, 0xff, 0x74, 0x6c, 0x21, 0xfb, 0x83, 0xe1, 0x31, 0x7c, 0x1b, 0xb1, 0xcd, 0x9e, 0x85, 0x32, 0xfc, 0x32, 0xcb, 0x33, 0xa0, 0xf6, 0xc3, 0x01, 0xfc, 0xb2, 0x70, 0x7f, 0x38, 0xf6, 0xe7, 0xf5, 0x75, 0x83, 0x32, 0x52, 0xcc, 0x62, 0x9a, 0xb5, 0xa1, 0x99, 0x01, 0x23, 0x62, 0x71, 0x0e, 0xd6, 0x16, 0x71, 0x78, 0xdb, 0x46, 0xa6, 0x11, 0x63, 0x44, 0x5a, 0xdf, 0xb7, 0xaf, 0x97, 0x46, 0x4a, 0x68, 0x6f, 0x11, 0xb6, 0xd7, 0x61, 0xef, 0x70, 0xf1, 0x5c, 0x84, 0xa4, 0x02, 0xa1, 0xb7, 0x53, 0x69, 0xd3, 0xeb, 0x98, 0x0b, 0xe6, 0x68, 0x38, 0x30, 0x24, 0xb1, 0xd2, 0x38, 0x58, 0xbc, 0x0c, 0x5e, 0x73, 0x1a, 0xf1, 0x77, 0xb7, 0xd3, 0x18, 0x8f, 0x3f, 0xf1, 0x05, 0xc4, 0xbf, 0x83, 0x6a, 0x8c, 0x12, 0x66, 0x24, 0x2c, 0xa1, 0xeb, 0x60, 0x0a, 0x26, 0xe3, 0x38, 0xd9, 0x83, 0xfe, 0x98, 0x03, 0xc6, 0x39, 0x80, 0x50, 0xc9, 0xd8, 0xc6, 0x37, 0x38, 0x27, 0xc5, 0x43, 0xaf, 0x7a, 0xcd, 0x39, 0x89, 0xfa, 0xd3, 0x1d, 0xcd, 0xfe, 0x8d, 0x98, 0xb6, 0xc4, 0x12, 0x2b, 0x7a, 0x08, 0xbf, 0xe6, 0x59, 0xf1, 0x3b, 0xf0, 0x40, 0x92, 0x43, 0x91, 0x9b, 0xe7, 0x94, 0xae, 0x09, 0x66, 0x33, 0xfd, 0xbc, 0x14, 0x36, 0x26, 0x43, 0x39, 0x25, 0xf6, 0x77, 0x4f, 0x31, 0x48, 0xbe, 0x65, 0xc8, 0x15, 0x88, 0xca, 0x1d, 0xc8, 0x19, 0x78, 0x07, 0x0a, 0x4a, 0x32, 0x1b, 0xfa, 0xee, 0x09, 0x15, 0x93, 0x2f, 0xb6, 0x5d, 0x5e, 0xe8, 0xa4, 0x62, 0xfb, 0xf5, 0xcf, 0x2c, 0xd7, 0x32, 0x87, 0x58, 0x26, 0x38, 0x44, 0x6e, 0x4c, 0xce, 0x28, 0xa0, 0x52, 0xd7, 0x08, 0x59, 0xf3, 0xe3, 0xa1, 0xce, 0xc3, 0xe8, 0x76, 0x88, 0x3e, 0x77, 0xee, 0x49, 0xec, 0xbb, 0xf9, 0x49, 0xf7, 0x27, 0x32, 0xba, 0xe5, 0x44, 0x2d, 0xd6, 0x17, 0x80, 0x5c, 0x88, 0x69, 0x63, 0x4e, 0x10, 0xe1, 0x9f, 0x2a, 0x05, 0x2e, 0x84, 0x37, 0x07, 0xf1, 0x69, 0x17, 0xb4, 0xe7, 0xdf, 0x31, 0x52, 0x80, 0x54, 0x5b, 0x8b, 0xad, 0xb8, 0x05, 0xca, 0x30, 0xb5, 0x31, 0xe1, 0x9f, 0x5f, 0x37, 0x48, 0x3b, 0x15, 0xad, 0x94, 0x43, 0x6f, 0x34, 0xde, 0x83, 0xbd, 0x05, 0x2e, 0xc4, 0x5c, 0x4a, 0xfc, 0x1b, 0x51, 0x0f, 0x40, 0x5b, 0x4a, 0x4e, 0xe3, 0x4b, 0x19, 0x1a, 0xcf, 0xb1, 0xa4, 0x71, 0xa5, 0x8c, 0x8b, 0x78, 0x52, 0x0e, 0xbb, 0x32, 0x2e, 0xc1, 0x91, 0xf2, 0xac, 0x93, 0xb4, 0x12, 0x6f, 0x4b, 0xd4, 0x61, 0x92, 0x56, 0xcb, 0x87, 0x59, 0xc2, 0x61, 0xad, 0xa7, 0x22, 0x45, 0x83, 0x2d, 0xd9, 0xba, 0x24, 0xeb, 0xb0, 0x2f, 0x99, 0x1a, 0xb1, 0x2f, 0xf5, 0x98, 0x31, 0x96, 0x2d, 0xde, 0x97, 0xb0, 0xdf, 0x1c, 0x0c, 0x3a, 0xe2, 0x34, 0x32, 0xf5, 0x38, 0xd3, 0x94, 0x2c, 0xa8, 0x83, 0x7a, 0xcb, 0x85, 0xb5, 0xa2, 0x6f, 0x2d, 0x1a, 0x22, 0xec, 0x57, 0xc4, 0x14, 0x83, 0x58, 0xbf, 0x65, 0xbb, 0x23, 0x9e, 0x43, 0x32, 0x2d, 0x95, 0xd7, 0x38, 0x68, 0xb5, 0x83, 0xe3, 0xc5, 0xcd, 0x50, 0x1c, 0x5a, 0x84, 0x39, 0x95, 0x8a, 0x9c, 0xb8, 0x77, 0x1a, 0xb9, 0x77, 0xcf, 0x6d, 0x1c, 0xc4, 0x14, 0x44, 0xf1, 0xb3, 0xfc, 0x3b, 0xce, 0x6f, 0x8d, 0xa7, 0x9e, 0x96, 0x47, 0xb0, 0x3b, 0x7d, 0x28, 0xbb, 0xee, 0x50, 0xe0, 0x82, 0x05, 0x7b, 0xe0, 0x41, 0x4f, 0xa1, 0xe4, 0xe0, 0x34, 0xa6, 0x54, 0xda, 0xe6, 0xd9, 0xa7, 0x85, 0xa3, 0xa8, 0x8f, 0xdd, 0x3c, 0xc7, 0xd6, 0x01, 0xc6, 0x82, 0x99, 0x58, 0xe7, 0x8c, 0xa1, 0x2d, 0xd0, 0x18, 0xba, 0x07, 0xe3, 0x25, 0x39, 0xdd, 0xc3, 0x88, 0x9f, 0xe6, 0x40, 0x0c, 0xcb, 0x6f, 0xc6, 0xf2, 0xed, 0xc1, 0x1c, 0x1e, 0x23, 0xce, 0x22, 0x19, 0x2f, 0xfa, 0xcc, 0xcc, 0x60, 0x1d, 0xd5, 0xcd, 0x1e, 0x2a, 0xf3, 0x6d, 0x91, 0xc2, 0x21, 0x53, 0xbc, 0x27, 0x71, 0x8d, 0x17, 0x87, 0x0a, 0x30, 0xbd, 0x12, 0x91, 0x5e, 0x8c, 0x05, 0x73, 0xd1, 0xbd, 0x23, 0xc8, 0xf0, 0xab, 0xe6, 0xc6, 0xc1, 0x69, 0xcb, 0x68, 0xc7, 0xb8, 0x62, 0xa8, 0xa7, 0xbc, 0x15, 0x94, 0x73, 0x0d, 0x48, 0x15, 0x7d, 0x8d, 0x83, 0x04, 0x85, 0xd4, 0x1e, 0x04, 0x78, 0x04, 0xe9, 0xe3, 0x35, 0xea, 0x3d, 0xac, 0x4b, 0x3c, 0xe8, 0xd4, 0xfb, 0x37, 0x58, 0x3d, 0x09, 0xb8, 0xd6, 0x32, 0x97, 0x2c, 0x84, 0xc3, 0xa1, 0x02, 0xe4, 0x28, 0xc7, 0xde, 0x7b, 0xc5, 0x56, 0x06, 0x90, 0xf1, 0xb1, 0x68, 0x55, 0xd4, 0x1f, 0x5d, 0xa3, 0x1f, 0x5a, 0x0d, 0x36, 0xbd, 0xd6, 0xca, 0x4f, 0x2b, 0x41, 0x1f, 0xe2, 0x01, 0xa1, 0x43, 0x4c, 0xc9, 0x95, 0xfe, 0x75, 0x0a, 0x63, 0xdc, 0x5a, 0xed, 0x7f, 0x94, 0xda, 0x2a, 0x98, 0xed, 0xbc, 0x8a, 0x4a, 0x79, 0x6f, 0x37, 0x42, 0xb7, 0x91, 0xf9, 0xd9, 0x6c, 0x8a, 0x7f, 0xeb, 0x50, 0x05, 0x5c, 0xe7, 0x92, 0x1c, 0x8a, 0xdd, 0x7e, 0x95, 0xa1, 0x5f, 0x55, 0x47, 0x8f, 0xd0, 0x7c, 0xea, 0xb7, 0x1f, 0x47, 0xba, 0x1b, 0xbe, 0xb9, 0xbf, 0xa8, 0x0c, 0xf9, 0xc7, 0xf7, 0x0b, 0xf1, 0xf7, 0xc6, 0x98, 0xc3, 0x64, 0x58, 0x8b, 0x90, 0x1d, 0x96, 0x97, 0x49, 0xcd, 0x49, 0xdc, 0xd9, 0x00, 0x75, 0xb0, 0xb9, 0xaf, 0x6d, 0x81, 0x8a, 0x10, 0x4c, 0x7c, 0x11, 0xf5, 0x57, 0x69, 0xf4, 0x03, 0xd4, 0x47, 0x8f, 0xfd, 0x6e, 0x8e, 0xed, 0x2a, 0x43, 0x1f, 0xe5, 0x87, 0xa9, 0x8f, 0xfd, 0xf6, 0x60, 0x41, 0x19, 0x71, 0xdb, 0x9a, 0x8f, 0x55, 0x50, 0x60, 0x62, 0xbe, 0xec, 0x2a, 0x68, 0x05, 0x53, 0x58, 0x45, 0x3a, 0x35, 0x7b, 0x9e, 0xc5, 0xfe, 0x4f, 0x78, 0x9f, 0x1c, 0xc9, 0x7c, 0xf1, 0x59, 0xde, 0x11, 0xf9, 0x22, 0xfa, 0x99, 0x6f, 0xa4, 0x35, 0x9a, 0xef, 0x80, 0x85, 0x47, 0xfd, 0x11, 0xaf, 0xa1, 0x22, 0xe4, 0x8f, 0xc6, 0x9e, 0xec, 0x9d, 0xa4, 0xcf, 0xae, 0xeb, 0xd0, 0x47, 0x32, 0x15, 0x53, 0xcf, 0x97, 0xd9, 0xd5, 0x17, 0xb9, 0xfe, 0xc5, 0x58, 0x68, 0x75, 0x22, 0xd5, 0xef, 0x30, 0xd5, 0x62, 0xa2, 0xa5, 0x60, 0x90, 0xd3, 0x50, 0xac, 0xc5, 0x1d, 0x39, 0x91, 0xab, 0x31, 0x56, 0x43, 0x7e, 0x19, 0x50, 0x1e, 0xb5, 0xd9, 0x65, 0x40, 0x39, 0x5c, 0x8f, 0xdf, 0xae, 0x0e, 0x63, 0xe4, 0x2b, 0x34, 0x8b, 0xa6, 0xcc, 0xa6, 0x5b, 0x55, 0xf4, 0x19, 0xa1, 0x22, 0x33, 0xcf, 0xda, 0x85, 0x0a, 0x28, 0x4f, 0xa2, 0xfd, 0x5b, 0x91, 0xae, 0x8b, 0x7b, 0xe0, 0x77, 0xeb, 0x86, 0x6e, 0xf4, 0x22, 0x7f, 0x26, 0x4e, 0x57, 0x86, 0x74, 0xd9, 0x47, 0x7d, 0xdc, 0xb8, 0x83, 0x4a, 0x89, 0x7c, 0x15, 0x73, 0x87, 0x8c, 0x53, 0x1d, 0xd8, 0xae, 0x3d, 0xd7, 0x12, 0x5c, 0x99, 0xb9, 0x1d, 0x2e, 0x2c, 0x65, 0x22, 0xf9, 0x1b, 0x9f, 0xe9, 0xc8, 0xc7, 0x92, 0x27, 0xb0, 0xff, 0xe1, 0x0e, 0xd0, 0x07, 0xa8, 0x7c, 0x2c, 0x13, 0x8c, 0x1b, 0x31, 0x87, 0xef, 0xf7, 0x5c, 0xcd, 0x21, 0xc5, 0x9d, 0x60, 0xec, 0x8f, 0x5c, 0xf3, 0x62, 0x0c, 0x09, 0xb6, 0x07, 0xfd, 0xc3, 0x3d, 0x79, 0xe4, 0xaf, 0x5b, 0xd4, 0x91, 0x1b, 0xb9, 0xee, 0xc5, 0x18, 0x86, 0x06, 0x31, 0x97, 0xdc, 0x9d, 0xb1, 0x76, 0x30, 0x36, 0x28, 0xa0, 0x5b, 0x1f, 0x99, 0x4c, 0xb9, 0xeb, 0x4e, 0x76, 0x82, 0xee, 0x54, 0xcf, 0x57, 0x28, 0xee, 0x84, 0xef, 0x63, 0xce, 0xf9, 0x9c, 0xf3, 0x1c, 0xcc, 0x81, 0x6b, 0x92, 0x71, 0x1a, 0xf9, 0xf4, 0xd3, 0x9d, 0xb7, 0xf5, 0x04, 0x28, 0x86, 0xd4, 0xdc, 0x21, 0x47, 0xac, 0x0c, 0x95, 0x05, 0x73, 0xb3, 0x73, 0xc9, 0x27, 0x31, 0xd5, 0xf5, 0x9c, 0x4a, 0xaf, 0x40, 0xe6, 0x62, 0x4e, 0x75, 0x12, 0xfd, 0x9f, 0xee, 0x34, 0xf7, 0xdc, 0xba, 0x13, 0xfd, 0x27, 0x9c, 0x54, 0x60, 0xc2, 0x11, 0xf6, 0xff, 0x18, 0x71, 0x3e, 0xc0, 0x5f, 0xa7, 0xd0, 0x7f, 0x3f, 0xc6, 0xef, 0x61, 0xbc, 0x01, 0xe5, 0x43, 0xb7, 0xd1, 0x60, 0xc8, 0x19, 0x2c, 0x47, 0x31, 0xd0, 0xbd, 0x34, 0x19, 0xd4, 0x37, 0x5a, 0x60, 0xc2, 0x73, 0x98, 0xfe, 0x29, 0x8e, 0x37, 0x81, 0xee, 0x68, 0xe8, 0xcc, 0x12, 0xb8, 0xc6, 0x1c, 0xd6, 0x2b, 0x60, 0x38, 0xc5, 0x2e, 0x13, 0xa6, 0x7a, 0x59, 0xe0, 0x1e, 0xfd, 0x57, 0x3b, 0x67, 0xa0, 0xcc, 0x9c, 0x01, 0x79, 0xf8, 0x68, 0xf2, 0xeb, 0xa6, 0xd5, 0xb3, 0x48, 0x8f, 0xb2, 0x84, 0xc0, 0xb0, 0x13, 0x53, 0xbd, 0x40, 0x7d, 0xed, 0xb3, 0xdb, 0x1b, 0x07, 0x67, 0x95, 0xc1, 0x51, 0xb2, 0x74, 0x0c, 0x4f, 0xca, 0xcb, 0x21, 0x8f, 0xf4, 0x61, 0x9a, 0x59, 0x0c, 0xe9, 0x1d, 0x75, 0x0a, 0xf5, 0x90, 0x62, 0x0c, 0x3f, 0xe4, 0x28, 0x02, 0xcb, 0x4e, 0x94, 0xd8, 0x41, 0x30, 0xac, 0x74, 0x9a, 0x29, 0x6f, 0xff, 0x8e, 0x73, 0x3b, 0x50, 0xd6, 0xee, 0x38, 0xff, 0x74, 0xe3, 0xa0, 0x37, 0x6a, 0x04, 0x67, 0x16, 0x95, 0x61, 0x36, 0x6a, 0xeb, 0x1c, 0xc0, 0x30, 0x05, 0xd3, 0x7d, 0x24, 0xbb, 0x78, 0xcf, 0x23, 0x18, 0x5c, 0x06, 0xb7, 0xfa, 0x47, 0xde, 0x05, 0x09, 0x86, 0x12, 0xe2, 0x9f, 0x28, 0xd3, 0x65, 0x2c, 0x0f, 0xf5, 0xef, 0xa9, 0xb1, 0x01, 0x14, 0xd0, 0xc4, 0x5d, 0xff, 0x92, 0x87, 0xf8, 0x38, 0x4a, 0xbe, 0x48, 0x15, 0x79, 0xd6, 0xe5, 0x90, 0xcf, 0x65, 0xdb, 0xe3, 0x65, 0x67, 0x8e, 0x38, 0x27, 0x22, 0x2f, 0xa6, 0x35, 0x8e, 0xc3, 0x93, 0xcc, 0xd4, 0x03, 0xb8, 0x37, 0x22, 0xe6, 0x1c, 0x98, 0x86, 0xe2, 0xca, 0x9d, 0x60, 0xf9, 0xf1, 0x09, 0x8e, 0xfb, 0x16, 0x43, 0x74, 0xec, 0x2f, 0x4f, 0xa0, 0x8d, 0x50, 0xee, 0x7f, 0x94, 0xca, 0xac, 0xc7, 0x32, 0x89, 0xea, 0x32, 0x77, 0x7e, 0x4e, 0x19, 0x9b, 0x6e, 0x6c, 0x85, 0x1c, 0xe4, 0x93, 0x89, 0x92, 0xae, 0x3a, 0x46, 0xa5, 0x60, 0xac, 0xff, 0xa0, 0x7a, 0x65, 0xae, 0xa4, 0x36, 0x73, 0x60, 0x5a, 0x01, 0xfd, 0xa5, 0xb0, 0x95, 0x02, 0x85, 0xf7, 0x3b, 0x6e, 0xd4, 0xc0, 0xf5, 0x98, 0x6e, 0xee, 0xe1, 0xb5, 0x87, 0xd7, 0x3a, 0x0d, 0xa8, 0xb3, 0x32, 0xa6, 0x26, 0x15, 0x6b, 0xb9, 0x1e, 0xe7, 0x5c, 0x65, 0xa5, 0x96, 0xf2, 0xa4, 0x7a, 0x68, 0xad, 0x99, 0xfd, 0xdb, 0xb7, 0x7e, 0xfb, 0xd6, 0x4e, 0x91, 0xf7, 0xa2, 0x94, 0xbc, 0xb1, 0x25, 0xb6, 0x32, 0xa4, 0xfa, 0x93, 0x94, 0xa3, 0x5c, 0xe5, 0x59, 0x97, 0xc8, 0x73, 0x0a, 0x6b, 0x36, 0x90, 0xd9, 0xef, 0xc4, 0x58, 0xe8, 0x6b, 0x70, 0x9a, 0xac, 0x95, 0xfe, 0x47, 0xa9, 0x4d, 0x14, 0xd0, 0xbf, 0x86, 0xb9, 0xe7, 0x61, 0x4e, 0x58, 0x06, 0xe5, 0x2d, 0x2c, 0x6d, 0x4e, 0x89, 0x7a, 0x25, 0x6a, 0x32, 0xdb, 0x67, 0x7a, 0x41, 0xcf, 0x9c, 0x93, 0x78, 0x86, 0x69, 0x66, 0x8f, 0x67, 0x61, 0xfd, 0xb7, 0x30, 0x85, 0x8f, 0x28, 0xe5, 0xaf, 0x25, 0x2c, 0xb7, 0x4a, 0x67, 0xf6, 0x54, 0x2c, 0xa8, 0x07, 0xa4, 0xab, 0xb8, 0xa4, 0xdf, 0x32, 0x13, 0xdb, 0x21, 0xe1, 0xda, 0x8e, 0xae, 0x1c, 0xe4, 0xea, 0xa8, 0x8d, 0xe1, 0x57, 0x7e, 0xb8, 0x0e, 0x7f, 0x8d, 0x88, 0x73, 0x43, 0x44, 0x9d, 0xe9, 0x86, 0xbc, 0x99, 0x9d, 0x60, 0x66, 0x58, 0xe6, 0x50, 0x9e, 0xe7, 0x8f, 0x24, 0xa9, 0x4f, 0x3f, 0x85, 0xe0, 0x22, 0x2a, 0xe1, 0x3a, 0x83, 0x3e, 0xcb, 0xfc, 0x2c, 0xd1, 0x3b, 0x72, 0xb5, 0xcb, 0x60, 0x22, 0x49, 0x93, 0x19, 0x47, 0xb5, 0xfa, 0x7f, 0xc2, 0x30, 0x1a, 0x89, 0x2f, 0x2a, 0x20, 0xe5, 0x6a, 0xbe, 0x3b, 0x98, 0x8b, 0x03, 0x8c, 0x62, 0xaa, 0x5f, 0xd2, 0xce, 0xe4, 0xad, 0x5b, 0x24, 0x05, 0x53, 0x3d, 0x87, 0xfd, 0x36, 0xa4, 0x40, 0xc6, 0xf7, 0x19, 0x96, 0x86, 0x24, 0x2c, 0x19, 0xeb, 0x2f, 0xdf, 0xb6, 0x56, 0x6c, 0xdb, 0x9f, 0x70, 0xdb, 0x66, 0xb4, 0x73, 0x4f, 0xc8, 0xf3, 0xef, 0xf8, 0xd3, 0x56, 0xea, 0x09, 0x7f, 0x79, 0xdc, 0xfd, 0x17, 0x23, 0x5b, 0x2a, 0x3e, 0xbb, 0x0a, 0x41, 0xb3, 0x56, 0xba, 0xa7, 0x71, 0x50, 0xc9, 0x4a, 0xed, 0x21, 0xdc, 0x46, 0x79, 0xa9, 0xbd, 0x23, 0x03, 0x4d, 0x5e, 0x6b, 0x85, 0xff, 0x51, 0xba, 0x49, 0x00, 0xed, 0x2d, 0x85, 0x68, 0xad, 0x47, 0x47, 0xbc, 0x25, 0xc3, 0x88, 0x18, 0xf9, 0x14, 0x39, 0x0d, 0x72, 0x16, 0xdd, 0x01, 0xa4, 0xd8, 0x9c, 0xd0, 0xdc, 0x7d, 0x31, 0xd9, 0xf5, 0xf6, 0x90, 0x80, 0x4c, 0x46, 0xc8, 0xe4, 0x38, 0x64, 0xad, 0x71, 0xc8, 0x74, 0xef, 0x68, 0x7d, 0xc4, 0xc3, 0xf8, 0x80, 0x8c, 0xd5, 0x4e, 0xa0, 0x11, 0x09, 0x94, 0x07, 0x5b, 0x88, 0x2b, 0x63, 0x5e, 0x3b, 0x8a, 0x30, 0xaf, 0xf7, 0xef, 0x7f, 0xff, 0x7e, 0x6b, 0xb5, 0xe3, 0x96, 0x19, 0x8b, 0x46, 0x0f, 0x39, 0x27, 0xb0, 0x56, 0x67, 0x25, 0xda, 0xc5, 0x7e, 0x92, 0x4f, 0xd8, 0x45, 0x79, 0xdb, 0x31, 0x7a, 0x68, 0xe7, 0x66, 0x70, 0x84, 0x7c, 0xd6, 0x2a, 0xdf, 0x0f, 0x51, 0xd3, 0xf7, 0xe0, 0xaf, 0x1c, 0x2c, 0x8b, 0x6b, 0x6a, 0x67, 0x9a, 0xe5, 0x2a, 0xa7, 0x1d, 0x6c, 0xce, 0x99, 0xa3, 0x87, 0xfc, 0x3b, 0xce, 0x36, 0x27, 0xfc, 0x6f, 0x13, 0xbd, 0xce, 0x69, 0x10, 0x56, 0x00, 0xe9, 0xfc, 0x67, 0x4f, 0x91, 0x8d, 0x8f, 0xb2, 0x35, 0x4b, 0x2e, 0xf7, 0xaf, 0x43, 0x2d, 0xa6, 0x3a, 0xa1, 0xaf, 0xfa, 0x15, 0xda, 0x8d, 0x43, 0xb5, 0xcb, 0x12, 0x9c, 0xe0, 0x93, 0xe0, 0x87, 0x03, 0x88, 0x8d, 0x77, 0x04, 0x25, 0x51, 0x4f, 0xc7, 0x18, 0x06, 0xdf, 0xb3, 0x18, 0xc3, 0x1e, 0x40, 0xea, 0x4c, 0x6a, 0x3b, 0x7f, 0x46, 0x1d, 0x3d, 0x6e, 0xa3, 0x90, 0x0e, 0x13, 0x1e, 0x9b, 0x8a, 0xda, 0x35, 0xa6, 0x7d, 0x02, 0xd3, 0xee, 0x08, 0x09, 0x0d, 0x62, 0x07, 0x6b, 0x17, 0x20, 0xed, 0x26, 0x9d, 0x87, 0x52, 0x7d, 0xb2, 0x19, 0x63, 0xac, 0x8a, 0x73, 0xb2, 0xd3, 0x67, 0xa8, 0xfd, 0xfe, 0x7c, 0x50, 0xeb, 0x91, 0x07, 0x78, 0x84, 0xe8, 0x11, 0x6a, 0xcd, 0x85, 0x6e, 0x6a, 0x4b, 0x74, 0xc5, 0x1a, 0xdc, 0x98, 0x62, 0x75, 0x3a, 0x5d, 0xc8, 0x16, 0xc4, 0x3e, 0xda, 0x43, 0xe9, 0x7c, 0xd3, 0x8a, 0xbe, 0xa8, 0xb9, 0x16, 0xd3, 0xe9, 0xde, 0xdc, 0x27, 0xda, 0xa9, 0xc5, 0x49, 0xbb, 0x2b, 0x76, 0xa1, 0x04, 0xc4, 0x9a, 0x48, 0x65, 0xe3, 0xe8, 0x0b, 0x53, 0x38, 0x30, 0x05, 0xf6, 0x80, 0x7c, 0x6c, 0x17, 0x99, 0x5b, 0xb3, 0xca, 0xda, 0x16, 0x6f, 0x4f, 0x49, 0x47, 0x25, 0x38, 0x8d, 0x33, 0xbc, 0xa3, 0x07, 0x10, 0xce, 0x62, 0x6e, 0x97, 0x03, 0xde, 0x30, 0xd2, 0x94, 0x41, 0xd0, 0x94, 0x03, 0xea, 0xd0, 0x9e, 0x80, 0x2d, 0xde, 0x55, 0x12, 0xad, 0x43, 0xe4, 0x72, 0x4b, 0x4b, 0xb5, 0x71, 0x9a, 0x52, 0xa7, 0xce, 0xcd, 0x16, 0x05, 0xa7, 0x5f, 0x87, 0xda, 0xcf, 0x21, 0xa1, 0x59, 0x17, 0xf5, 0x6a, 0xfe, 0x6e, 0xf2, 0xc7, 0x16, 0xc1, 0xd6, 0x76, 0xff, 0xc9, 0x28, 0x59, 0x67, 0x8e, 0x1e, 0x78, 0x79, 0x60, 0xc9, 0x64, 0xb9, 0xda, 0xdb, 0x2a, 0x46, 0x6b, 0xde, 0x1b, 0x16, 0x7c, 0x42, 0x1b, 0x9d, 0xb0, 0x99, 0x67, 0xc2, 0x9c, 0xd1, 0x23, 0xc1, 0x2c, 0xac, 0x23, 0xfb, 0xdf, 0x51, 0x87, 0x7d, 0x5c, 0xe7, 0xc9, 0xd5, 0x38, 0x91, 0x7a, 0x87, 0xa5, 0x6e, 0xd0, 0x33, 0x7b, 0x95, 0xea, 0x34, 0x30, 0x15, 0x08, 0xbf, 0xe6, 0x46, 0xd2, 0xbb, 0x51, 0xbb, 0x53, 0xe6, 0x68, 0x54, 0xfe, 0x4e, 0x8f, 0x1e, 0xa9, 0xdc, 0xfa, 0x6d, 0x37, 0x52, 0xb8, 0x01, 0xbf, 0xf2, 0x48, 0xde, 0x61, 0x3d, 0xf6, 0xce, 0x2a, 0x93, 0xe6, 0xa3, 0xdf, 0x44, 0x94, 0x9e, 0x7a, 0xec, 0x01, 0x4f, 0x12, 0xd5, 0x16, 0xbb, 0x49, 0x7f, 0x08, 0x67, 0x6e, 0x25, 0x4d, 0x27, 0x2b, 0xae, 0x47, 0x9c, 0x99, 0x83, 0x25, 0xeb, 0xd1, 0x8e, 0xf0, 0xa2, 0x8e, 0xb1, 0xf8, 0xed, 0x13, 0x50, 0x96, 0xd4, 0xb0, 0xa8, 0xd7, 0x7f, 0xb2, 0xcf, 0x37, 0x73, 0xf4, 0x83, 0x60, 0x9d, 0xa6, 0x11, 0x37, 0xfb, 0x77, 0x7c, 0xfc, 0xbd, 0x38, 0x95, 0x7e, 0xfc, 0x8c, 0xc6, 0xed, 0xec, 0x21, 0x92, 0x49, 0x65, 0xe5, 0xc7, 0x21, 0xfa, 0x93, 0xe3, 0x10, 0x0e, 0xe6, 0x92, 0xb4, 0xe0, 0xb6, 0xc9, 0x67, 0xfb, 0xd6, 0x40, 0xf6, 0x6d, 0xc8, 0x92, 0x48, 0xd7, 0xd3, 0x38, 0xa8, 0xed, 0xb1, 0xf8, 0x78, 0xf1, 0xe8, 0xe8, 0x73, 0x34, 0x82, 0x46, 0x74, 0xa3, 0x80, 0xda, 0x88, 0xef, 0xb7, 0xe9, 0x5c, 0xb1, 0x88, 0x8a, 0xbf, 0xbe, 0x08, 0xf2, 0x17, 0xb5, 0xc2, 0x83, 0x10, 0xe0, 0xbb, 0x8a, 0xc6, 0x03, 0x68, 0xdc, 0x82, 0x6e, 0xba, 0xd2, 0xe5, 0x6a, 0xb6, 0xae, 0x27, 0x31, 0xd6, 0x68, 0xe4, 0xf1, 0xc0, 0x73, 0x50, 0x4a, 0x5a, 0xf9, 0x86, 0x37, 0x28, 0x64, 0xec, 0x10, 0x52, 0x6f, 0x19, 0x8f, 0x62, 0x8e, 0x84, 0xa7, 0x91, 0xcf, 0x85, 0x83, 0xe8, 0x63, 0x24, 0x9f, 0x03, 0x86, 0x14, 0x1f, 0x33, 0x52, 0x76, 0x3e, 0xbb, 0x82, 0xd3, 0x5c, 0xd2, 0x18, 0xdb, 0xd9, 0x5b, 0xa4, 0x4f, 0xf0, 0x19, 0x49, 0xe0, 0x85, 0xf2, 0x8b, 0xa5, 0xb9, 0x1e, 0x16, 0xda, 0x24, 0x52, 0x57, 0x3e, 0x51, 0xe3, 0x34, 0x2f, 0xb8, 0x84, 0x75, 0x45, 0x67, 0x62, 0x88, 0x5e, 0xf5, 0xcd, 0x03, 0xac, 0xab, 0xa3, 0x45, 0x0b, 0x6f, 0xe2, 0x9b, 0x74, 0xcc, 0xdd, 0xa8, 0xcb, 0xd3, 0xed, 0x79, 0x3b, 0x05, 0xdd, 0x7b, 0xc3, 0x03, 0x90, 0xa2, 0xed, 0x53, 0xfb, 0x3d, 0x9d, 0xd4, 0x4f, 0x11, 0x92, 0x1d, 0xf8, 0x34, 0x26, 0xc7, 0x41, 0x10, 0x5a, 0xda, 0x3d, 0x7a, 0x5c, 0x76, 0x85, 0xed, 0xc9, 0x91, 0x10, 0x2b, 0xd9, 0x76, 0x0d, 0xa1, 0x06, 0xb2, 0x65, 0x0f, 0xe4, 0x86, 0xa5, 0x71, 0x23, 0x21, 0x0e, 0xb2, 0x3b, 0x22, 0x90, 0x6d, 0x87, 0xab, 0x89, 0x83, 0xff, 0x7e, 0x33, 0xc6, 0x6e, 0x14, 0x76, 0xc1, 0xa9, 0x65, 0xc2, 0x5a, 0xc0, 0x52, 0x90, 0xc2, 0x68, 0x7f, 0xaa, 0x36, 0xb6, 0x51, 0x48, 0xa1, 0x7f, 0x3c, 0x93, 0x18, 0xeb, 0x28, 0x84, 0x3a, 0x74, 0x9f, 0x45, 0x7a, 0x59, 0x16, 0xd7, 0x77, 0xa5, 0xf9, 0x3c, 0xfe, 0xe3, 0xa2, 0xb1, 0x89, 0x38, 0x45, 0x7d, 0x7c, 0x9c, 0x46, 0x45, 0xfe, 0xf8, 0xa0, 0x46, 0x1b, 0x58, 0x63, 0xe9, 0x71, 0x51, 0xbf, 0x9b, 0xe7, 0x22, 0xdd, 0x8e, 0xa1, 0xe5, 0x6e, 0xe2, 0x3e, 0xb6, 0xe3, 0x8f, 0xcf, 0xd4, 0x0d, 0x62, 0xff, 0x37, 0x27, 0xdc, 0x11, 0x2c, 0x4b, 0x47, 0x94, 0x86, 0xdf, 0x41, 0xd2, 0x34, 0xa4, 0xdb, 0x69, 0xa5, 0x6f, 0xb2, 0xa5, 0x2f, 0x34, 0x20, 0xdc, 0x4c, 0x6b, 0x5c, 0x97, 0xe5, 0x61, 0x51, 0x93, 0x0a, 0x2c, 0x1b, 0xd3, 0x7c, 0xdc, 0x29, 0xca, 0x29, 0xf3, 0x10, 0x9f, 0x4a, 0xd0, 0x26, 0xf3, 0xb9, 0x3f, 0x6d, 0x6b, 0x1c, 0xac, 0x1e, 0x39, 0xbb, 0x0c, 0xcb, 0x6b, 0x8c, 0xa1, 0xcd, 0x10, 0x43, 0x3b, 0x88, 0xdb, 0x70, 0x17, 0x5b, 0xd8, 0x1b, 0x08, 0xf3, 0xc1, 0xa3, 0x3e, 0xb2, 0xd1, 0x16, 0x5b, 0x11, 0x2f, 0x09, 0xec, 0x39, 0x68, 0x2d, 0x47, 0x9a, 0x8f, 0x9c, 0xe6, 0x2a, 0x48, 0x73, 0xcd, 0x4d, 0xc5, 0xdd, 0x89, 0x6d, 0xa9, 0x98, 0x3b, 0xb1, 0x9d, 0x75, 0xbb, 0x04, 0x44, 0x1f, 0x23, 0x65, 0xd0, 0x28, 0x04, 0xd7, 0xcb, 0x8f, 0x70, 0xd9, 0x11, 0x0f, 0xcc, 0x79, 0xac, 0xcf, 0xc4, 0x79, 0xf2, 0xcd, 0x73, 0x31, 0xad, 0x57, 0xe0, 0xf5, 0xe4, 0x3a, 0xad, 0x76, 0xdf, 0x23, 0x1c, 0x49, 0x63, 0x98, 0x63, 0x10, 0x53, 0xe5, 0xd3, 0xb8, 0x53, 0x1c, 0x83, 0x27, 0x8a, 0x35, 0x0c, 0x9a, 0xab, 0x47, 0x4e, 0xd8, 0xfc, 0x1b, 0x34, 0x6c, 0x6e, 0xb0, 0xfa, 0x44, 0x9f, 0x49, 0x5b, 0x89, 0x6a, 0xe1, 0x3d, 0x4e, 0xfa, 0xf8, 0x28, 0xb0, 0xec, 0x04, 0xb3, 0xa3, 0x0b, 0x2c, 0x14, 0xaa, 0xad, 0xaa, 0x9d, 0x6b, 0xef, 0x82, 0xbc, 0xc2, 0x86, 0x82, 0x85, 0x61, 0x4b, 0x44, 0x1a, 0x37, 0xb2, 0xbf, 0x0c, 0x75, 0x9f, 0x99, 0x28, 0xbd, 0x69, 0x6c, 0xe2, 0x49, 0xea, 0x53, 0x28, 0x7f, 0xd8, 0xd6, 0x17, 0xbc, 0x2a, 0x10, 0x4b, 0x4d, 0x41, 0xe3, 0x82, 0xd4, 0x1e, 0xc1, 0x5c, 0x6d, 0xd5, 0xe6, 0x2a, 0xd4, 0xaf, 0xc8, 0x56, 0x65, 0x4b, 0x53, 0x99, 0x62, 0x9d, 0xa1, 0x8d, 0xe1, 0x8a, 0xd4, 0x75, 0xb6, 0x87, 0xa7, 0x2d, 0x97, 0x4e, 0x21, 0x8d, 0xf9, 0xa4, 0x53, 0x34, 0xba, 0xd6, 0x23, 0x76, 0xa7, 0x14, 0xf3, 0x9e, 0xb3, 0x7a, 0x6b, 0x9d, 0xad, 0x4d, 0x3a, 0xf5, 0xe8, 0x1e, 0xe5, 0xb6, 0xff, 0xf3, 0x4e, 0xb0, 0x8e, 0xf9, 0x8c, 0x71, 0xea, 0x32, 0xd4, 0x8c, 0xcc, 0x8a, 0xe1, 0x06, 0x7c, 0x4b, 0xa7, 0xb8, 0xd6, 0x08, 0xd9, 0xf9, 0x39, 0xb4, 0xb3, 0x55, 0x8c, 0x5b, 0xdd, 0xd1, 0x2c, 0x56, 0x91, 0xf2, 0x78, 0x84, 0xae, 0x7a, 0x44, 0xc5, 0x56, 0x4f, 0x83, 0x86, 0xd7, 0xfd, 0x2a, 0x66, 0xd9, 0x67, 0xc3, 0x3c, 0xb6, 0x61, 0xae, 0xc1, 0xa7, 0x6a, 0x3f, 0x30, 0xeb, 0x69, 0x6c, 0x6b, 0x6c, 0x3f, 0x8d, 0x6d, 0x15, 0x74, 0x49, 0xb5, 0x36, 0x84, 0x2b, 0x0a, 0xf3, 0x89, 0xef, 0x3b, 0x56, 0xe6, 0x1f, 0x18, 0x9c, 0x87, 0xfd, 0xed, 0xfc, 0x23, 0x64, 0xb3, 0x9a, 0x8d, 0x8a, 0x0b, 0xcb, 0xd5, 0x27, 0xf0, 0xb0, 0x89, 0x69, 0xca, 0x1e, 0xe8, 0x43, 0xa9, 0xe2, 0x70, 0x66, 0x30, 0x4c, 0x8f, 0x69, 0x32, 0x25, 0x1f, 0xdd, 0x33, 0xa0, 0xd8, 0x2f, 0xc6, 0xd2, 0xf4, 0x72, 0x40, 0x8e, 0x25, 0x4a, 0xdd, 0xc1, 0xab, 0x97, 0x50, 0x37, 0xa7, 0x5b, 0xc8, 0x68, 0x74, 0xcf, 0x4e, 0xa3, 0x7b, 0x0d, 0x97, 0x68, 0x83, 0xdb, 0xd3, 0x71, 0xde, 0x38, 0x98, 0x8e, 0x75, 0x5b, 0x6c, 0x3c, 0xbe, 0xc7, 0x72, 0x19, 0xdf, 0x05, 0xe3, 0xf1, 0x3d, 0xad, 0x16, 0xf4, 0xd3, 0x96, 0x43, 0x2d, 0x18, 0x11, 0xef, 0x27, 0x18, 0xef, 0x27, 0x08, 0xef, 0x8b, 0xc5, 0x5e, 0x3f, 0x1a, 0xc1, 0xcf, 0x2b, 0x58, 0x88, 0x75, 0x3f, 0xf1, 0x4f, 0x6f, 0x8a, 0xba, 0x2b, 0x4b, 0xfe, 0xed, 0x04, 0x5a, 0x23, 0x8b, 0x9c, 0xd9, 0xe3, 0xea, 0x5b, 0xb1, 0x9d, 0xdb, 0x63, 0xba, 0xd6, 0x1e, 0x37, 0x52, 0x7b, 0x9c, 0x28, 0x08, 0x88, 0xf1, 0xd7, 0xb4, 0x36, 0x98, 0x54, 0x3d, 0x72, 0x61, 0xed, 0x25, 0xda, 0x20, 0x4f, 0x31, 0xdb, 0x93, 0x6d, 0xf0, 0x78, 0xa2, 0xf5, 0x4b, 0xb1, 0xf5, 0x73, 0x08, 0x86, 0x28, 0xd4, 0x08, 0x18, 0xac, 0x29, 0xa5, 0x33, 0x26, 0x83, 0xe6, 0x40, 0x1f, 0x8d, 0x47, 0x4f, 0x5d, 0x0e, 0x0e, 0xb0, 0x24, 0xf2, 0x38, 0x48, 0x18, 0xcd, 0xc7, 0x96, 0x44, 0x3a, 0xd7, 0xcb, 0xb7, 0xc8, 0xad, 0xd2, 0x09, 0xc5, 0x82, 0x92, 0x4a, 0x1f, 0x34, 0xd0, 0x49, 0x45, 0xfe, 0x15, 0x72, 0x2b, 0x98, 0x89, 0x8e, 0x82, 0x27, 0xc4, 0xee, 0xc6, 0x62, 0xda, 0xdd, 0x98, 0x57, 0x80, 0x6a, 0x5f, 0xd8, 0x7c, 0x11, 0xd6, 0xe7, 0x4e, 0xeb, 0x82, 0x7c, 0xa4, 0xaa, 0x8c, 0x38, 0xd6, 0x6d, 0x80, 0xa5, 0xea, 0xd2, 0x31, 0x2f, 0x97, 0x5b, 0x5d, 0xa9, 0x33, 0x22, 0x88, 0xd7, 0xb3, 0x60, 0x44, 0xbc, 0x9e, 0xc5, 0x3e, 0x67, 0x16, 0xd4, 0x6c, 0x25, 0x6a, 0x46, 0x79, 0x86, 0xd4, 0x7c, 0x16, 0xa9, 0xb9, 0x0e, 0xed, 0x12, 0x7d, 0xb0, 0x22, 0x41, 0xcf, 0x46, 0x30, 0x32, 0x3d, 0x1b, 0xa5, 0xb3, 0xb6, 0xec, 0x4b, 0xd3, 0xf0, 0x68, 0x55, 0x0a, 0xfe, 0xcc, 0x49, 0xfc, 0x31, 0x0d, 0x1b, 0xb9, 0xee, 0x5b, 0x04, 0x0d, 0x93, 0xec, 0x64, 0xfc, 0x39, 0x21, 0x0f, 0x71, 0x78, 0x56, 0x99, 0x2c, 0x07, 0xac, 0x1e, 0xd4, 0x98, 0x68, 0xac, 0xf2, 0x76, 0x3a, 0xe3, 0x0a, 0x79, 0x89, 0x5e, 0x31, 0x27, 0xd2, 0x1d, 0x89, 0x73, 0x07, 0xff, 0x9d, 0x74, 0x7a, 0x50, 0x68, 0x0a, 0xdd, 0x5c, 0x1c, 0x32, 0xc8, 0x2e, 0xc2, 0x98, 0xec, 0x52, 0x0c, 0x81, 0x75, 0x88, 0x35, 0x23, 0x63, 0xed, 0x5c, 0x7c, 0x57, 0xa8, 0x6c, 0x25, 0xf9, 0x7c, 0x09, 0x9c, 0x05, 0xc2, 0x92, 0x2d, 0x16, 0xaf, 0xc3, 0x78, 0x3a, 0x25, 0xee, 0xa0, 0xcd, 0xf0, 0x99, 0x93, 0x1c, 0xea, 0xb1, 0xbd, 0x4a, 0xbe, 0xa6, 0x8b, 0x21, 0x85, 0x22, 0xb7, 0x71, 0x92, 0xae, 0xa9, 0x46, 0x89, 0xd7, 0x10, 0xf7, 0xa2, 0x55, 0xf4, 0x62, 0x86, 0xa9, 0x78, 0x96, 0x0d, 0x5b, 0xab, 0x9a, 0x75, 0x31, 0x86, 0x5d, 0xaf, 0x94, 0xda, 0x3c, 0x34, 0xc3, 0x24, 0x67, 0xd7, 0xc7, 0xb0, 0x17, 0x14, 0x14, 0x14, 0x72, 0x7b, 0x6d, 0x40, 0x8e, 0x5b, 0x1e, 0x88, 0x25, 0xcb, 0xb0, 0xfa, 0xc2, 0x29, 0x25, 0xfa, 0xfa, 0x82, 0x7b, 0xe2, 0xad, 0x53, 0x3c, 0x17, 0x6b, 0x22, 0x63, 0xcf, 0xb3, 0x05, 0xb3, 0x49, 0x83, 0x3b, 0x70, 0x83, 0x98, 0x29, 0x62, 0x4d, 0xad, 0xa7, 0xc0, 0x53, 0xd2, 0x03, 0xd2, 0x3c, 0x2e, 0x11, 0xfb, 0xb1, 0xde, 0xff, 0x58, 0xe3, 0x60, 0xe5, 0x59, 0xa3, 0x54, 0xb0, 0x1c, 0x8c, 0x2f, 0x31, 0x1d, 0xfd, 0xeb, 0x69, 0xb0, 0x77, 0x36, 0x16, 0x78, 0x44, 0x1c, 0xc5, 0x50, 0x15, 0xc3, 0x70, 0x28, 0x98, 0xc1, 0x70, 0x60, 0x6c, 0xab, 0x69, 0x3d, 0xd2, 0x48, 0xf9, 0xb9, 0x3c, 0x35, 0x49, 0x23, 0xee, 0x73, 0x9b, 0xd5, 0x6d, 0x0f, 0x05, 0xf5, 0x1e, 0x5a, 0x63, 0xed, 0xb4, 0xc4, 0xe2, 0x39, 0x27, 0x72, 0xdd, 0x91, 0xb7, 0x13, 0xe6, 0xc4, 0x77, 0xa7, 0xf6, 0x98, 0x53, 0xd6, 0xf4, 0x8f, 0xe3, 0xdd, 0xda, 0x4c, 0x4b, 0xda, 0x4a, 0xff, 0x0b, 0xeb, 0xd2, 0x43, 0xb4, 0xf8, 0xb7, 0xb3, 0x6f, 0x9c, 0x86, 0xb6, 0xd0, 0xee, 0x00, 0xb4, 0x48, 0x2c, 0x88, 0x69, 0xd6, 0xee, 0x30, 0x6c, 0x92, 0xd3, 0x54, 0x40, 0xbe, 0xf1, 0x38, 0x4f, 0x91, 0xd6, 0x5f, 0x39, 0xa2, 0xae, 0x4d, 0xac, 0xc1, 0x5f, 0x05, 0x32, 0xed, 0xe4, 0x21, 0xda, 0xb3, 0xdd, 0x51, 0x20, 0x76, 0x71, 0xe8, 0xc2, 0x77, 0x54, 0x41, 0x1a, 0x1d, 0xa0, 0x36, 0x98, 0x92, 0x07, 0x60, 0x7b, 0xa2, 0xed, 0xa7, 0x2e, 0xe2, 0xb6, 0xd4, 0x89, 0x79, 0x04, 0x82, 0x45, 0xa6, 0x3e, 0xda, 0x8a, 0xb6, 0x2f, 0x8d, 0xb6, 0xeb, 0x6f, 0xd5, 0x46, 0x75, 0x85, 0x3f, 0xda, 0x68, 0xf9, 0x96, 0xe9, 0x30, 0x87, 0xea, 0x40, 0x71, 0xb6, 0xda, 0x61, 0x4e, 0x90, 0xce, 0x99, 0x96, 0x82, 0x66, 0xd4, 0xf7, 0x5d, 0xd8, 0xa7, 0x5d, 0xb7, 0x0e, 0x29, 0x26, 0xfc, 0xf6, 0xe3, 0xb7, 0x3f, 0x99, 0x9a, 0xe8, 0x53, 0xcb, 0xd9, 0x82, 0x14, 0xac, 0x33, 0xc4, 0xa2, 0x6f, 0x59, 0x62, 0x69, 0x7e, 0x39, 0x91, 0x89, 0x47, 0x37, 0x47, 0x60, 0x96, 0x1d, 0xb2, 0xe3, 0x9c, 0x71, 0x29, 0xea, 0xe1, 0x74, 0x4e, 0x20, 0x1d, 0x17, 0x95, 0x84, 0xcc, 0xb7, 0x2e, 0x44, 0x7c, 0xa3, 0x81, 0xcf, 0xf3, 0xba, 0x3d, 0x65, 0x9c, 0x5a, 0x1f, 0xca, 0x13, 0x32, 0x5a, 0x58, 0xd2, 0xc1, 0x1c, 0xe4, 0x45, 0xf9, 0x18, 0xc7, 0xa5, 0x98, 0xb5, 0x2f, 0x7f, 0x62, 0x64, 0x5a, 0xc3, 0x2a, 0xcd, 0xa0, 0xa1, 0xb6, 0xa2, 0xb7, 0x3d, 0xcb, 0x92, 0x23, 0xbf, 0x2e, 0xc1, 0xcd, 0x89, 0xce, 0x45, 0x6f, 0x77, 0x02, 0xcd, 0x54, 0x26, 0x42, 0x77, 0x8c, 0x59, 0x59, 0x93, 0x58, 0x1f, 0xca, 0x42, 0xfd, 0xd4, 0x42, 0xda, 0x27, 0xe6, 0x5c, 0xa1, 0x4c, 0xa1, 0x2f, 0x84, 0xcd, 0x38, 0xad, 0x15, 0x1a, 0x24, 0x8b, 0x62, 0xc0, 0xf7, 0xed, 0x89, 0xf0, 0xa0, 0xa8, 0x31, 0x6a, 0xb7, 0x66, 0xec, 0x8b, 0xa2, 0x95, 0xc4, 0x9e, 0x0f, 0x84, 0x3d, 0x02, 0xa4, 0x11, 0xbf, 0x7d, 0x4a, 0x99, 0x6d, 0xb1, 0xb4, 0x9b, 0xc5, 0xed, 0x51, 0x96, 0x1f, 0x1b, 0x63, 0x8a, 0x15, 0x71, 0x3b, 0x27, 0x68, 0xb0, 0xec, 0x84, 0x22, 0x25, 0x17, 0xbf, 0x9d, 0xfc, 0x3d, 0x53, 0x31, 0xe1, 0xf7, 0xf5, 0x4b, 0xf4, 0x96, 0x9d, 0xea, 0x2b, 0x81, 0xde, 0xc0, 0xc0, 0xb6, 0xde, 0xce, 0xd7, 0xc4, 0x79, 0x86, 0x44, 0x8d, 0x9c, 0x6b, 0x4d, 0x18, 0x94, 0xdc, 0xec, 0x3c, 0xde, 0xb9, 0x6e, 0x30, 0x4b, 0xea, 0x53, 0x41, 0xc3, 0xb5, 0x3b, 0xe1, 0x0e, 0x23, 0x04, 0x62, 0xdb, 0x62, 0x9d, 0xc7, 0x28, 0x36, 0xf1, 0xc0, 0xf8, 0x3c, 0x72, 0x41, 0x1d, 0xb5, 0x42, 0x18, 0x2c, 0x68, 0x0d, 0x13, 0x8f, 0xaa, 0xef, 0xa3, 0xd9, 0x4c, 0x1b, 0xc4, 0xe7, 0xd9, 0x9c, 0x26, 0x6f, 0x2b, 0x4c, 0xf3, 0xef, 0xb8, 0x50, 0x40, 0x73, 0xcb, 0x5c, 0xff, 0x67, 0xa5, 0x46, 0xd6, 0x7b, 0x48, 0x8f, 0x98, 0x8d, 0xdc, 0xff, 0x59, 0x69, 0x31, 0xda, 0x18, 0x1e, 0xc8, 0x71, 0xfa, 0xc0, 0x42, 0x5c, 0x0f, 0x6d, 0x86, 0xb0, 0xe0, 0x7e, 0x3c, 0x3f, 0x4f, 0xd8, 0x76, 0x12, 0xad, 0x7d, 0x38, 0xa0, 0xcd, 0xaa, 0x0c, 0x4f, 0xdb, 0xce, 0xf2, 0x37, 0x3b, 0x9c, 0xb1, 0x3b, 0x86, 0xdc, 0x67, 0xe2, 0xef, 0xb6, 0x10, 0x17, 0xdc, 0xd7, 0x27, 0xa8, 0x91, 0xdb, 0x49, 0xa7, 0xd1, 0x9a, 0x25, 0x0a, 0x25, 0x76, 0xc8, 0xdf, 0xbf, 0x19, 0x9e, 0x8e, 0xd3, 0x0a, 0xd3, 0xb0, 0x25, 0x4e, 0x27, 0xfb, 0xfa, 0x44, 0x9d, 0x6e, 0xa6, 0x39, 0xb0, 0x62, 0x7b, 0x80, 0x5b, 0xdc, 0x12, 0x32, 0x14, 0x22, 0xa5, 0x28, 0x7a, 0xfc, 0xbd, 0x1d, 0x39, 0x52, 0xce, 0x8e, 0x3e, 0x5e, 0x13, 0xb1, 0x0c, 0x2c, 0x05, 0x6d, 0xb4, 0x4e, 0x38, 0x64, 0xa4, 0xdd, 0x36, 0xd0, 0xaf, 0x18, 0xf8, 0xbd, 0x0e, 0xf3, 0x9c, 0x88, 0xf5, 0x79, 0xb0, 0x6e, 0x10, 0x4b, 0xd8, 0xb2, 0x3f, 0x66, 0x77, 0x42, 0xe9, 0x4a, 0xd2, 0x37, 0x10, 0xd6, 0x79, 0x23, 0xa3, 0x76, 0xd4, 0xcf, 0x37, 0x69, 0x35, 0x98, 0xa4, 0x49, 0x5c, 0x73, 0x8f, 0x6e, 0x7a, 0x95, 0xa4, 0xac, 0x44, 0x8b, 0x09, 0xfa, 0x11, 0xfe, 0x1c, 0xde, 0x95, 0x00, 0x92, 0x2a, 0xbb, 0x1d, 0x99, 0x4f, 0xc6, 0x8a, 0xf4, 0x3b, 0xfb, 0xdb, 0x75, 0x45, 0x06, 0xa2, 0xe2, 0x18, 0xac, 0x1b, 0xb0, 0xea, 0x7a, 0x26, 0x7e, 0xfc, 0x43, 0x71, 0x8f, 0xf0, 0xba, 0xde, 0xad, 0xf7, 0x63, 0x58, 0x1c, 0xcb, 0x13, 0xb0, 0xf5, 0xca, 0xbc, 0x77, 0x96, 0x42, 0x38, 0x63, 0xa8, 0x2f, 0x32, 0xf1, 0xf7, 0x9b, 0xad, 0xcb, 0x41, 0xff, 0xee, 0x90, 0xf7, 0xce, 0x01, 0xf0, 0x3f, 0x76, 0xe0, 0x7e, 0x79, 0x02, 0xda, 0x36, 0x39, 0x48, 0x97, 0x39, 0x84, 0xff, 0x1d, 0xb1, 0xa5, 0x39, 0x8f, 0xdf, 0xdf, 0xe3, 0xda, 0xbf, 0x36, 0x3c, 0xb4, 0x3b, 0xe6, 0xeb, 0x0f, 0x82, 0xda, 0x2a, 0x56, 0x75, 0x88, 0xb5, 0xd7, 0x5e, 0xb4, 0xa0, 0x51, 0x82, 0xe6, 0xd3, 0xcc, 0x8e, 0x33, 0xa3, 0x72, 0x64, 0xac, 0xc7, 0xbf, 0x5e, 0x76, 0x69, 0x16, 0xce, 0x93, 0x66, 0x0b, 0xd4, 0x05, 0x01, 0x36, 0x9a, 0xed, 0x30, 0x1f, 0x7b, 0x2f, 0xc0, 0x83, 0x76, 0x3b, 0xe8, 0xa3, 0x60, 0xf7, 0xf1, 0x2c, 0x40, 0xbb, 0x12, 0x0d, 0xf4, 0xd1, 0xb9, 0x87, 0xfe, 0x8d, 0x36, 0x91, 0xa6, 0xd5, 0x9c, 0x8d, 0x29, 0x96, 0x98, 0x0b, 0x39, 0xfe, 0x6d, 0x98, 0xeb, 0x44, 0xe6, 0xcb, 0xd3, 0xb0, 0x6f, 0x14, 0xc7, 0x77, 0x78, 0x05, 0xe7, 0x12, 0xd7, 0x6f, 0x10, 0x29, 0x77, 0x8c, 0x99, 0x38, 0x65, 0x91, 0xec, 0xc2, 0xd2, 0x3c, 0xc1, 0x02, 0x2c, 0xab, 0x02, 0xd3, 0x4e, 0x49, 0x70, 0xa1, 0xa7, 0xb1, 0xfd, 0xec, 0xd4, 0xa3, 0x46, 0xf6, 0xf1, 0x18, 0x9f, 0x61, 0x7b, 0x5f, 0xe7, 0x40, 0x54, 0x65, 0x6d, 0x81, 0x56, 0xd6, 0x2f, 0x54, 0x17, 0x7b, 0x3b, 0xd4, 0xdb, 0x51, 0xcf, 0x45, 0xeb, 0x42, 0x45, 0xdd, 0x3a, 0xa2, 0xa2, 0x7d, 0x6d, 0x96, 0x3b, 0xc0, 0xbc, 0x30, 0x26, 0xc7, 0x04, 0x27, 0xe6, 0xf5, 0x1f, 0x44, 0x25, 0x1a, 0x85, 0x2c, 0xec, 0x4b, 0xe3, 0x25, 0x9b, 0x52, 0x79, 0xc9, 0xbe, 0x3e, 0x9a, 0x25, 0x67, 0xba, 0x31, 0x23, 0x2d, 0x2f, 0x63, 0xf8, 0x92, 0x5c, 0xd1, 0x41, 0x32, 0x8e, 0xe1, 0x71, 0xb1, 0x7e, 0x2e, 0xc5, 0x67, 0x57, 0xbd, 0xc3, 0x73, 0xcb, 0x1c, 0x08, 0x2b, 0xca, 0x23, 0x07, 0x51, 0x57, 0xa1, 0x13, 0x4a, 0x50, 0xa6, 0xe5, 0x84, 0x27, 0x1e, 0x79, 0xb6, 0xfa, 0x04, 0x3c, 0x1e, 0x85, 0x55, 0xc0, 0xb3, 0x78, 0x16, 0x45, 0x67, 0x07, 0xa4, 0xa4, 0x6b, 0xb1, 0x0c, 0x9e, 0xc9, 0xdb, 0xd7, 0xbf, 0xf5, 0xbe, 0xa5, 0xb3, 0x79, 0x37, 0x5a, 0xbe, 0xfb, 0x9c, 0x71, 0xec, 0xd0, 0xc0, 0xfe, 0xbe, 0xfd, 0x7d, 0xef, 0xed, 0x42, 0xf7, 0x26, 0x8e, 0xa3, 0x41, 0x76, 0x28, 0xf6, 0x44, 0xbf, 0xb3, 0x12, 0x21, 0xa8, 0x02, 0x7b, 0xed, 0x07, 0x65, 0x3d, 0x0a, 0x8c, 0xbe, 0x19, 0xe8, 0x6b, 0x7c, 0x28, 0x92, 0xf1, 0x62, 0x5f, 0xf0, 0x39, 0x92, 0x37, 0x65, 0x3d, 0x09, 0x1e, 0x6c, 0x41, 0x38, 0x8d, 0xce, 0x89, 0xf2, 0x74, 0x78, 0xba, 0x81, 0x34, 0x11, 0x3b, 0x59, 0xf5, 0xea, 0x62, 0x82, 0x59, 0xc3, 0x85, 0xd9, 0xea, 0xa4, 0xde, 0x5c, 0x05, 0xeb, 0x7a, 0xf7, 0xc5, 0x66, 0x85, 0x8d, 0x60, 0x29, 0x7e, 0x1c, 0xbc, 0xb1, 0xf2, 0x3f, 0x81, 0x24, 0x4f, 0xe4, 0x59, 0x2e, 0x1d, 0xea, 0x30, 0x5c, 0xef, 0xa8, 0x54, 0xa5, 0xdb, 0xd8, 0x6b, 0xd5, 0xbd, 0xd3, 0x37, 0x2b, 0x9c, 0x07, 0x1b, 0x86, 0x9c, 0x13, 0xa9, 0x57, 0xd1, 0xe8, 0x8c, 0x7f, 0xc7, 0x5f, 0x69, 0x0c, 0xc6, 0xa2, 0xf1, 0x8a, 0x32, 0xd6, 0x5d, 0x50, 0xf7, 0x72, 0x66, 0xb3, 0xfe, 0x1e, 0xf5, 0x6f, 0xb0, 0xc7, 0xe9, 0xe9, 0x29, 0xac, 0x8f, 0x3e, 0xe0, 0xfa, 0x3a, 0x6a, 0x12, 0x5b, 0xdb, 0xc1, 0x14, 0x9c, 0x2c, 0xe7, 0xa0, 0xef, 0x83, 0x36, 0xd6, 0x93, 0x12, 0xf1, 0x56, 0x79, 0x96, 0xf1, 0xee, 0x36, 0x8c, 0x4b, 0x3b, 0x7a, 0x51, 0x02, 0x4b, 0xfb, 0x7a, 0xe7, 0xd0, 0xd8, 0x62, 0xbc, 0x05, 0xb2, 0x90, 0x9a, 0x0c, 0x4e, 0xb4, 0x9e, 0xce, 0xbf, 0x1c, 0xd7, 0xac, 0x2c, 0x25, 0x07, 0x81, 0xc6, 0x9e, 0x90, 0xff, 0x48, 0x18, 0xba, 0xda, 0x1b, 0x3d, 0x08, 0x4c, 0x6f, 0xb2, 0xc8, 0x09, 0x4b, 0x30, 0xa3, 0x7f, 0x0e, 0x62, 0xc0, 0x40, 0x54, 0x88, 0x14, 0x3a, 0x05, 0x62, 0x4b, 0x2d, 0xd7, 0xf5, 0xd0, 0xdb, 0x53, 0x08, 0xff, 0x8b, 0xf7, 0xe6, 0xea, 0xc2, 0x12, 0xe2, 0x90, 0xf5, 0x15, 0x28, 0x23, 0x7d, 0x05, 0x6b, 0xc1, 0x12, 0x70, 0xec, 0xb9, 0x02, 0x01, 0x5d, 0xf3, 0x45, 0x90, 0x75, 0x5f, 0x04, 0xd9, 0xa4, 0x9a, 0x91, 0xf3, 0x36, 0xff, 0x46, 0x0d, 0xb2, 0xaf, 0x8d, 0x83, 0xac, 0x1b, 0x21, 0xdb, 0x98, 0x06, 0xd9, 0x24, 0x01, 0xd9, 0x58, 0x3b, 0x41, 0x16, 0xd7, 0x1c, 0xca, 0x84, 0x8e, 0x4b, 0xd6, 0x9d, 0x6c, 0xa3, 0xb5, 0x39, 0x48, 0x59, 0x05, 0x0d, 0x72, 0x3b, 0x62, 0xda, 0x0e, 0xcf, 0x60, 0xdf, 0x31, 0xcf, 0x1b, 0x19, 0xcb, 0x55, 0x2a, 0x2c, 0x45, 0x60, 0x0c, 0x3a, 0x90, 0x8a, 0x8b, 0xc0, 0x54, 0x7e, 0x4a, 0x07, 0x51, 0x95, 0x78, 0x7a, 0x71, 0x93, 0xfb, 0x93, 0x01, 0xf0, 0x59, 0x42, 0xa6, 0x97, 0x36, 0x83, 0x6e, 0x69, 0x0e, 0xa6, 0x29, 0x08, 0xc4, 0x5e, 0x44, 0x9e, 0xae, 0x18, 0xcd, 0xa0, 0xaa, 0xc1, 0xa8, 0x92, 0x17, 0x56, 0xb7, 0xf6, 0x85, 0xda, 0x29, 0x27, 0xff, 0x63, 0x0e, 0xae, 0x5d, 0xf0, 0xc5, 0xb0, 0x4e, 0xe9, 0xb4, 0xf5, 0x51, 0x0b, 0x8c, 0xab, 0x53, 0xd6, 0xbc, 0x91, 0x4f, 0xeb, 0xfc, 0x8f, 0x69, 0x75, 0x2a, 0x42, 0xdf, 0xd4, 0x3a, 0x75, 0x42, 0x16, 0x5b, 0x4d, 0xf9, 0x9e, 0xff, 0xe1, 0xcc, 0x12, 0xb5, 0xb9, 0xf0, 0x3d, 0xaa, 0xcd, 0xbc, 0x91, 0x0b, 0x27, 0x91, 0xdb, 0xf5, 0xbc, 0x14, 0x0b, 0x4d, 0x69, 0xd6, 0x87, 0x4d, 0x0a, 0xda, 0x0f, 0x4e, 0x5e, 0x53, 0x83, 0xa5, 0x1d, 0x43, 0x6e, 0x6e, 0xba, 0xd1, 0x25, 0x29, 0xa8, 0x4b, 0xe5, 0x68, 0x2d, 0x62, 0x4a, 0xb6, 0x08, 0xb5, 0x05, 0xeb, 0x4f, 0xd4, 0xc3, 0x87, 0x6f, 0x9e, 0x53, 0xd0, 0x81, 0x52, 0x0b, 0x7b, 0x75, 0xd1, 0x4c, 0x14, 0x40, 0xf5, 0x62, 0xfe, 0x50, 0xbd, 0x9d, 0x66, 0x1f, 0x51, 0x07, 0xa4, 0xdf, 0x13, 0xf3, 0x47, 0xc6, 0xde, 0x92, 0xab, 0x0b, 0x2c, 0x41, 0x9a, 0x75, 0xc9, 0x47, 0x8a, 0x77, 0x61, 0xed, 0x66, 0x20, 0xbd, 0x6f, 0x4a, 0xac, 0x89, 0x7b, 0x3c, 0xb7, 0x0c, 0x32, 0x94, 0x06, 0x39, 0xe3, 0x08, 0xad, 0xa8, 0xbb, 0xbd, 0x38, 0x83, 0xee, 0x8a, 0xfb, 0x86, 0x4b, 0x5d, 0x12, 0xbe, 0x99, 0x76, 0x2b, 0x9f, 0x7c, 0xc8, 0x57, 0x1e, 0xcc, 0x11, 0xa9, 0x68, 0x34, 0x99, 0xe1, 0x2c, 0x50, 0x40, 0x52, 0x84, 0x1f, 0xcd, 0x34, 0x08, 0x6a, 0x96, 0xfc, 0x2c, 0xb3, 0x67, 0xaa, 0x87, 0x50, 0x03, 0x72, 0x05, 0x41, 0x9a, 0x6b, 0x99, 0xa9, 0x46, 0xf8, 0xc4, 0xe9, 0xc9, 0x74, 0xe7, 0x54, 0x30, 0xdf, 0x57, 0x1e, 0x32, 0xf8, 0x9e, 0x57, 0x1f, 0x0e, 0x66, 0xe1, 0xef, 0xa6, 0x90, 0x79, 0xa5, 0xa4, 0x98, 0x56, 0xea, 0x14, 0x83, 0xa7, 0x1c, 0x39, 0x70, 0x46, 0x0f, 0x94, 0xcd, 0x54, 0x97, 0x58, 0x67, 0xaa, 0xb7, 0xff, 0xee, 0x01, 0xb9, 0xea, 0xed, 0x57, 0x67, 0x65, 0x78, 0x5f, 0xfd, 0xf8, 0x81, 0xb7, 0x5f, 0xb5, 0x56, 0x5b, 0x07, 0xcc, 0xe5, 0x90, 0x11, 0x02, 0x75, 0x36, 0xe9, 0x1c, 0x94, 0x23, 0xcf, 0x2e, 0xba, 0x6c, 0x03, 0x15, 0xeb, 0x51, 0xf6, 0xce, 0x54, 0xdf, 0x27, 0xad, 0x63, 0xfe, 0x89, 0xb8, 0xb6, 0x87, 0x14, 0x94, 0x85, 0x1c, 0xf0, 0x03, 0xff, 0x8e, 0xbf, 0xbc, 0xc0, 0x32, 0xf7, 0x39, 0x94, 0xb9, 0x34, 0x5b, 0x61, 0x74, 0x66, 0xf9, 0x77, 0x7c, 0x3a, 0x84, 0xf0, 0x3e, 0x87, 0x52, 0x37, 0x8b, 0x47, 0x07, 0x69, 0xdd, 0xc3, 0x8e, 0x4f, 0xc7, 0xd0, 0x6f, 0x7d, 0xc8, 0xc4, 0x9a, 0xc9, 0x4c, 0xb5, 0x07, 0xdb, 0xbc, 0x0c, 0x8e, 0xfd, 0xd5, 0x2f, 0xb4, 0xf3, 0xdf, 0x9e, 0x40, 0x3d, 0xa9, 0x3c, 0x58, 0x58, 0x73, 0x52, 0x9a, 0x8d, 0x6d, 0xb5, 0x21, 0xae, 0xdf, 0xa0, 0xbe, 0x68, 0x96, 0x3d, 0xfe, 0x75, 0xe4, 0xd7, 0x38, 0xf8, 0xf6, 0x16, 0xb4, 0x43, 0x3b, 0xd4, 0x87, 0x51, 0x87, 0xb1, 0x63, 0xcc, 0xea, 0xf1, 0x31, 0xad, 0x1e, 0xff, 0xa3, 0x69, 0x31, 0x37, 0x49, 0xbc, 0x3f, 0x18, 0xcb, 0xfb, 0x5e, 0x52, 0xcb, 0xf1, 0x6c, 0xd1, 0xe5, 0x27, 0x47, 0x19, 0xd5, 0x12, 0xe2, 0xd3, 0x62, 0x95, 0xa4, 0x3c, 0x8b, 0x66, 0xe5, 0x6d, 0x33, 0xc1, 0x5c, 0x10, 0xf0, 0xcd, 0x90, 0x66, 0x07, 0xf3, 0xf0, 0xb7, 0x5a, 0xd3, 0xf3, 0x9d, 0xde, 0xe5, 0x52, 0x75, 0x5c, 0xd3, 0xa7, 0x11, 0x45, 0x2c, 0xc3, 0x1c, 0x5e, 0x98, 0xae, 0xcb, 0x22, 0x96, 0x2c, 0x41, 0x33, 0x8d, 0xa4, 0x69, 0x34, 0xb6, 0x4a, 0x76, 0x4d, 0xf5, 0x20, 0x37, 0xec, 0xe3, 0x11, 0x17, 0xe4, 0x86, 0x9f, 0x3e, 0x22, 0x64, 0x4f, 0x8a, 0xac, 0x29, 0x44, 0xbe, 0x89, 0x3c, 0xed, 0x5c, 0x33, 0xad, 0xce, 0x64, 0x97, 0x16, 0xf7, 0xaf, 0xbb, 0xa8, 0xcf, 0x22, 0x35, 0x58, 0xe9, 0x7c, 0x57, 0xca, 0x31, 0xa9, 0x8f, 0x53, 0x3c, 0x4c, 0x33, 0x99, 0xfb, 0x2f, 0x28, 0x34, 0xda, 0x66, 0x99, 0xda, 0xa1, 0x7e, 0x08, 0xcf, 0xf0, 0xba, 0x85, 0xbc, 0xda, 0x8f, 0x6b, 0xf5, 0xea, 0x6e, 0xaa, 0x5b, 0xfc, 0x4c, 0x9e, 0xb0, 0x9c, 0xbe, 0x0a, 0x48, 0x58, 0x60, 0x41, 0x63, 0x98, 0x61, 0x55, 0x66, 0xdb, 0x1e, 0x22, 0xcd, 0x7c, 0x7c, 0x1c, 0xcc, 0x2b, 0x3f, 0x98, 0x97, 0xa2, 0xcf, 0xd3, 0xdc, 0xc0, 0xf7, 0xa9, 0x54, 0xb4, 0xc3, 0x74, 0xb6, 0x87, 0xe2, 0x7b, 0x96, 0x13, 0xd6, 0xc0, 0xb5, 0xc8, 0xef, 0x1e, 0xb1, 0xb9, 0x78, 0x86, 0x64, 0x16, 0xc3, 0x42, 0xa3, 0xc8, 0x04, 0x5f, 0x3e, 0x9d, 0xfb, 0xcb, 0xb8, 0xfc, 0x3a, 0x8d, 0x4f, 0x25, 0x34, 0xda, 0x3a, 0x0a, 0x0b, 0xeb, 0x30, 0x14, 0x39, 0x82, 0x6c, 0x12, 0x3a, 0x28, 0xb6, 0x88, 0x83, 0x7a, 0xa0, 0x1d, 0x5b, 0xc4, 0x4e, 0x2d, 0x82, 0x3d, 0xd0, 0xd6, 0xe0, 0xcc, 0xd0, 0xfa, 0xa0, 0x83, 0x79, 0xc8, 0x8e, 0xcf, 0x02, 0x89, 0x5e, 0x16, 0xac, 0xfe, 0x58, 0x7d, 0xab, 0xc8, 0x64, 0xb8, 0x1f, 0x89, 0x77, 0x36, 0x8f, 0x45, 0x58, 0xc4, 0xfa, 0x00, 0xa9, 0x9a, 0xe6, 0xfb, 0x3f, 0x7b, 0x2d, 0x67, 0xa6, 0xea, 0xb2, 0xe8, 0xea, 0x81, 0xa8, 0x7b, 0x09, 0xc0, 0xf6, 0x97, 0x9e, 0x57, 0x37, 0x87, 0x4c, 0x61, 0xc3, 0x34, 0xaa, 0x3d, 0x48, 0x05, 0xa2, 0x8e, 0x4c, 0xed, 0xcf, 0x31, 0x87, 0xec, 0x50, 0x9f, 0xf7, 0xef, 0x38, 0xfb, 0x96, 0xf0, 0xf1, 0x7c, 0xdd, 0xf8, 0x96, 0x18, 0xa7, 0x63, 0xed, 0x92, 0xb4, 0xac, 0x1d, 0xe7, 0x0e, 0xd2, 0x2a, 0x0c, 0xd2, 0x2e, 0x93, 0xa9, 0x68, 0x9d, 0x43, 0xdd, 0xa0, 0x59, 0x87, 0x00, 0xe5, 0xd2, 0x78, 0x1b, 0xe2, 0x05, 0x5b, 0xf2, 0xec, 0xd3, 0x9a, 0x1e, 0xe2, 0x52, 0x6e, 0x73, 0x4e, 0x20, 0x0d, 0x2d, 0x25, 0x6c, 0xad, 0xb6, 0x7e, 0xa7, 0x34, 0x59, 0x92, 0xd3, 0x30, 0x2e, 0xce, 0x12, 0x2d, 0xce, 0x64, 0x84, 0xca, 0x41, 0x35, 0xff, 0x2b, 0xcf, 0x77, 0xa1, 0x6e, 0x55, 0xa8, 0x2c, 0x8b, 0xea, 0x56, 0x49, 0x8a, 0x1e, 0x7f, 0x81, 0xc7, 0x72, 0x2c, 0x84, 0x7d, 0x82, 0x40, 0xf4, 0xe1, 0x69, 0x5e, 0xd0, 0x57, 0x60, 0xaf, 0x9e, 0x56, 0x2b, 0x5a, 0x41, 0xee, 0xe7, 0xb6, 0x28, 0xc7, 0xb6, 0xe8, 0x50, 0xdf, 0x4a, 0x6f, 0x89, 0x44, 0x3b, 0x07, 0xc3, 0x73, 0x50, 0xa7, 0x43, 0x9d, 0x03, 0xe3, 0xb8, 0xfc, 0x3b, 0xfe, 0xb4, 0x87, 0xc7, 0x0f, 0x74, 0xbc, 0x47, 0x9d, 0x7a, 0x8d, 0x5e, 0xeb, 0x35, 0x0e, 0x5e, 0x65, 0x46, 0x6b, 0x59, 0x02, 0x9a, 0x25, 0xa3, 0x8f, 0xe8, 0x5e, 0x8c, 0x05, 0xb3, 0x04, 0x7d, 0x5e, 0x38, 0xc1, 0x23, 0xc7, 0x3b, 0x9d, 0x50, 0xf3, 0x31, 0xc1, 0x2d, 0x7c, 0xff, 0xfa, 0x64, 0xbc, 0xd5, 0xe0, 0xa9, 0xf9, 0x23, 0xe7, 0xe7, 0x72, 0xca, 0x99, 0xea, 0x66, 0xb2, 0xeb, 0x42, 0xa6, 0x88, 0xe9, 0x46, 0x37, 0xb5, 0x08, 0xf4, 0x9b, 0x67, 0x42, 0x86, 0xea, 0x0a, 0xb6, 0xa6, 0xb4, 0x8c, 0xdf, 0x09, 0xf3, 0xb1, 0x9d, 0x91, 0xfb, 0xb4, 0xc3, 0x0d, 0x08, 0x57, 0xb1, 0xf0, 0x4d, 0xb4, 0xce, 0xb3, 0x5a, 0xeb, 0x20, 0x17, 0xfa, 0xf3, 0x1c, 0x4d, 0xf7, 0xcf, 0x8e, 0xa7, 0xa4, 0xfa, 0xa2, 0x7f, 0xb4, 0x6e, 0xd0, 0x39, 0x53, 0xf5, 0x91, 0x4b, 0x83, 0x52, 0xac, 0x3e, 0xc9, 0xd1, 0xe0, 0xdb, 0xa4, 0x61, 0x76, 0x99, 0xc6, 0x23, 0x40, 0xcd, 0xa7, 0xda, 0xc6, 0xed, 0x4c, 0xe7, 0x74, 0xe4, 0xf1, 0xce, 0xb8, 0x35, 0x7c, 0xa1, 0x51, 0xb3, 0x86, 0x2f, 0x69, 0x6f, 0x2f, 0x38, 0x3d, 0x76, 0x10, 0x25, 0x2a, 0xca, 0x75, 0xa9, 0xc2, 0xe6, 0x94, 0xea, 0x0a, 0xba, 0xa4, 0x86, 0xc2, 0x2e, 0xa9, 0xd1, 0x1e, 0x40, 0xfe, 0xb8, 0x2a, 0x94, 0x1d, 0x5f, 0x69, 0x39, 0x26, 0x46, 0xa9, 0x00, 0xb6, 0x69, 0x2b, 0xa2, 0x86, 0xaf, 0x3d, 0x2a, 0xb4, 0xdb, 0xb0, 0xa5, 0x30, 0xe6, 0xfb, 0x91, 0xe4, 0x0d, 0xcd, 0x45, 0xeb, 0x25, 0x9f, 0x38, 0x8b, 0xd3, 0x05, 0x32, 0x8f, 0x8a, 0x5d, 0xeb, 0xf9, 0xc1, 0x4a, 0xdb, 0x81, 0x41, 0xd6, 0xd5, 0x86, 0xaf, 0x5b, 0xcf, 0xba, 0x2d, 0x7e, 0x95, 0xdc, 0x86, 0xd6, 0x51, 0x06, 0x42, 0xeb, 0x92, 0xeb, 0xfc, 0xeb, 0xf8, 0xcc, 0x82, 0xbe, 0x60, 0x15, 0xe6, 0x51, 0x1b, 0xaa, 0x70, 0x5e, 0xe5, 0xbc, 0x56, 0xe4, 0x3f, 0xe7, 0x43, 0x8d, 0x22, 0x4b, 0x28, 0x4f, 0xa5, 0x4c, 0xf8, 0x5e, 0x57, 0xcb, 0xf6, 0xa9, 0x8d, 0xa0, 0x0b, 0x5a, 0xd3, 0xa1, 0x0b, 0xe5, 0x29, 0x39, 0xe1, 0x0c, 0x25, 0x1b, 0x79, 0x67, 0x56, 0x38, 0x53, 0x31, 0xa1, 0xdc, 0x36, 0xb0, 0xfe, 0xa2, 0x47, 0xcd, 0x81, 0x46, 0x25, 0xed, 0xbc, 0xda, 0xef, 0x9c, 0x77, 0xb8, 0x8c, 0x2c, 0x9d, 0x12, 0xd4, 0xca, 0x48, 0xcf, 0x2f, 0x43, 0xca, 0x40, 0x0b, 0x43, 0xb2, 0xa7, 0xf2, 0x49, 0x3b, 0x71, 0x1e, 0x93, 0xc6, 0x79, 0x00, 0xb6, 0xda, 0x1f, 0x9a, 0xee, 0x03, 0xbd, 0xe7, 0x39, 0x94, 0xe6, 0xcf, 0x81, 0x3c, 0xef, 0x34, 0xd8, 0x9c, 0x57, 0xad, 0x76, 0x1c, 0x1a, 0x74, 0x66, 0xae, 0x2a, 0x39, 0x38, 0xe8, 0xd4, 0x3b, 0x33, 0x08, 0x96, 0xea, 0x91, 0xb1, 0xad, 0xfe, 0x0d, 0xd3, 0xc5, 0x38, 0x4f, 0x1e, 0xf6, 0xaf, 0xab, 0x9c, 0x99, 0xf1, 0xb0, 0xa4, 0xbf, 0xec, 0x40, 0xbb, 0x35, 0x03, 0xf5, 0xf1, 0xdc, 0x16, 0x43, 0x36, 0xd5, 0xcd, 0x14, 0xd1, 0xa3, 0xcb, 0xaa, 0xad, 0x6e, 0x21, 0x5d, 0xda, 0x86, 0x0f, 0xbd, 0x4b, 0x78, 0xec, 0x06, 0x71, 0xc7, 0x5a, 0x7e, 0x16, 0xfb, 0xb2, 0x8f, 0x9e, 0x67, 0x5c, 0x92, 0xa3, 0xa4, 0x92, 0x9d, 0xfa, 0xdc, 0x18, 0x8d, 0xa9, 0x9b, 0xff, 0xe9, 0x4d, 0x5a, 0x01, 0xd9, 0x53, 0xa6, 0xb5, 0x7b, 0x7c, 0x5d, 0xa7, 0xd9, 0x69, 0x22, 0x7c, 0xa7, 0xa4, 0xa0, 0x35, 0x68, 0x27, 0x58, 0x4f, 0xbd, 0x23, 0x41, 0x3d, 0x66, 0xa7, 0x51, 0x46, 0xfb, 0x8e, 0x66, 0x05, 0x11, 0xa3, 0x06, 0x99, 0x66, 0x48, 0xf2, 0x52, 0xd6, 0xa3, 0xe5, 0x89, 0xd1, 0xe9, 0xc6, 0x41, 0xe2, 0xe7, 0x34, 0xfa, 0x48, 0xeb, 0xca, 0x48, 0xb3, 0xc6, 0x3c, 0xde, 0x8e, 0x6b, 0xd9, 0xd6, 0x36, 0xa0, 0x51, 0x8d, 0x9c, 0x8b, 0x7c, 0xf2, 0x2e, 0xf2, 0xc9, 0xf7, 0xbf, 0x9d, 0xe4, 0xff, 0x17, 0x8d, 0xbe, 0x35, 0xc8, 0xf3, 0xac, 0xae, 0xb0, 0x9c, 0xb2, 0xbe, 0x71, 0xb9, 0x56, 0xea, 0x0c, 0xec, 0x91, 0xad, 0x20, 0xfb, 0xd7, 0x11, 0xff, 0x6f, 0x1c, 0x1c, 0x2f, 0x01, 0x2e, 0x64, 0x6b, 0x12, 0x20, 0xdb, 0xf3, 0x03, 0x9e, 0xab, 0x8f, 0x8f, 0xf6, 0xe7, 0x11, 0x07, 0x4f, 0x97, 0x08, 0x89, 0x3c, 0x27, 0xd1, 0xaf, 0x7f, 0x9d, 0x26, 0x1b, 0x72, 0xd8, 0xfe, 0xbb, 0x28, 0xad, 0xe0, 0xfe, 0xe3, 0x6a, 0x61, 0xf3, 0xbf, 0x8d, 0x94, 0xf5, 0x24, 0x5a, 0x3b, 0x73, 0x31, 0x64, 0x1d, 0xe6, 0xba, 0xd1, 0x51, 0x57, 0x88, 0xe1, 0xe6, 0x6b, 0x61, 0x4e, 0x70, 0x0a, 0xd9, 0x5d, 0xce, 0xab, 0x64, 0xba, 0x81, 0x31, 0x9e, 0xbb, 0x1e, 0xf5, 0x98, 0xbc, 0xc0, 0x43, 0x48, 0x5b, 0x23, 0x34, 0x03, 0x34, 0x36, 0x2a, 0xfc, 0xb1, 0x87, 0x9d, 0x08, 0x4b, 0x33, 0x05, 0xc7, 0xa7, 0x9b, 0x06, 0x9d, 0x21, 0x83, 0x75, 0x9e, 0xec, 0x51, 0xfc, 0xd8, 0x7a, 0x55, 0x5a, 0xab, 0xa0, 0x4c, 0x10, 0x31, 0xe0, 0x28, 0xe7, 0x6c, 0x12, 0x70, 0xdb, 0x45, 0xce, 0x00, 0x6f, 0x32, 0xe4, 0xd8, 0x56, 0xc4, 0xeb, 0x91, 0xea, 0xf2, 0x30, 0x46, 0xb9, 0x7f, 0x5d, 0xe0, 0x21, 0xb1, 0x6a, 0x06, 0xfa, 0x2d, 0x43, 0x05, 0x35, 0x96, 0x2f, 0x87, 0x38, 0xff, 0xe0, 0x59, 0x8f, 0xc5, 0x47, 0x56, 0xcd, 0x43, 0x9c, 0x97, 0x8e, 0x73, 0x33, 0x52, 0x6e, 0xdc, 0xa7, 0x6a, 0x59, 0xd6, 0xe7, 0x91, 0xde, 0x97, 0xcc, 0x89, 0x7b, 0xe6, 0xb5, 0xa1, 0x39, 0xbe, 0xe7, 0xc0, 0x18, 0xb2, 0x70, 0x3a, 0x33, 0x8d, 0x34, 0xf8, 0xd7, 0x85, 0x27, 0x2a, 0x39, 0xe8, 0xab, 0xd7, 0xea, 0x1c, 0xf7, 0x15, 0xf0, 0x1a, 0xb8, 0x65, 0x5e, 0x42, 0x8e, 0x6b, 0xb7, 0xd5, 0x2a, 0xf9, 0x8e, 0x32, 0x1a, 0x6f, 0x22, 0xd9, 0xf7, 0xe9, 0x93, 0x62, 0xad, 0x5b, 0xd4, 0xbe, 0x7f, 0x90, 0x56, 0xc2, 0x7d, 0xba, 0xdb, 0x72, 0x2d, 0xf2, 0x37, 0x9d, 0xc6, 0xcf, 0x3f, 0xe8, 0xe9, 0xc1, 0x12, 0x9b, 0x89, 0x0a, 0xe3, 0x63, 0x80, 0x36, 0xcc, 0xf7, 0x5f, 0x3f, 0x22, 0x5d, 0x86, 0xc6, 0xca, 0xad, 0xcb, 0xc0, 0x4e, 0xf4, 0x27, 0x46, 0xa8, 0xe2, 0x94, 0x8c, 0xed, 0xe2, 0x78, 0x91, 0xc6, 0xa4, 0x75, 0x14, 0x92, 0xe6, 0x5f, 0x9c, 0xa0, 0x43, 0x1e, 0x7d, 0x4b, 0x73, 0x95, 0x5c, 0x44, 0xa3, 0xa5, 0x44, 0xa3, 0xc5, 0xc5, 0x36, 0x6d, 0x14, 0x9a, 0xc6, 0x06, 0x58, 0x9a, 0x08, 0xaa, 0x21, 0x7c, 0x95, 0x71, 0xcb, 0xd0, 0x38, 0x1a, 0xed, 0xc1, 0x9e, 0xec, 0x5b, 0x13, 0x9a, 0x12, 0x91, 0x5e, 0x5c, 0x13, 0x72, 0xa1, 0xdd, 0xbd, 0x26, 0xe8, 0xf3, 0xf5, 0x75, 0xe8, 0xb7, 0xf6, 0x35, 0xd7, 0x86, 0x27, 0x68, 0x5a, 0x97, 0xd7, 0xd7, 0xd7, 0x6e, 0x96, 0x75, 0x15, 0xb1, 0xad, 0x5b, 0x20, 0x67, 0x69, 0x8e, 0x92, 0xe5, 0xeb, 0x0b, 0x65, 0xa1, 0x25, 0x89, 0xae, 0xad, 0xbd, 0xcd, 0xfa, 0xc8, 0x04, 0x25, 0x6f, 0x3f, 0x7e, 0x63, 0x4e, 0x7d, 0x9d, 0x7b, 0xad, 0xba, 0x8a, 0xde, 0xad, 0xbd, 0x2d, 0xbb, 0xf6, 0xc7, 0x90, 0x53, 0x18, 0x49, 0xf6, 0xd0, 0x89, 0x49, 0xd3, 0x3c, 0x68, 0x45, 0xa3, 0x35, 0x60, 0x36, 0x8b, 0x9a, 0x39, 0x5b, 0x21, 0x0f, 0xe9, 0x8b, 0x67, 0x75, 0xfe, 0xfe, 0xb1, 0xd5, 0xe4, 0x6e, 0x8a, 0x0b, 0xfe, 0xd4, 0x71, 0x55, 0xa3, 0x21, 0x65, 0x5c, 0x75, 0x4b, 0xfa, 0xb8, 0x2a, 0xeb, 0xfa, 0x75, 0x09, 0xd9, 0x67, 0xa1, 0x75, 0x53, 0x95, 0x23, 0x6a, 0x7f, 0xca, 0xe8, 0xaa, 0x91, 0xd7, 0x59, 0x5c, 0x3c, 0xda, 0x6a, 0x13, 0xbd, 0x28, 0xd1, 0xf3, 0x8d, 0x17, 0xf5, 0x7c, 0x25, 0x25, 0x0f, 0xd6, 0x65, 0x54, 0x8f, 0x5c, 0x4f, 0xa5, 0xa4, 0xcf, 0x56, 0x10, 0xf7, 0x4a, 0x99, 0x2b, 0x12, 0xeb, 0x48, 0x75, 0x62, 0x6e, 0x4e, 0xae, 0x17, 0xfe, 0x11, 0xc8, 0xb6, 0xd0, 0x58, 0x86, 0xe8, 0x67, 0x62, 0x04, 0x3e, 0x79, 0x4e, 0x22, 0xcd, 0xac, 0xf8, 0x7e, 0x88, 0x2d, 0xe7, 0x41, 0xbe, 0x87, 0xf5, 0xe1, 0x91, 0x3c, 0xc3, 0xef, 0xbc, 0x5e, 0x97, 0xc7, 0xc5, 0x73, 0xb5, 0x13, 0xbc, 0x6e, 0x8f, 0xbb, 0x2f, 0xc6, 0xfe, 0xc6, 0xdf, 0x0d, 0xc4, 0x7a, 0x63, 0x76, 0x98, 0x88, 0x71, 0xa9, 0xf5, 0x2d, 0xa8, 0x11, 0x3c, 0x9d, 0x3e, 0x56, 0x9b, 0x18, 0x77, 0xc3, 0xbc, 0x38, 0xbd, 0xe1, 0x77, 0x35, 0x94, 0x03, 0xa7, 0x9f, 0x40, 0xb9, 0xc6, 0x7a, 0xd9, 0xdf, 0xf8, 0xbb, 0x07, 0xfa, 0x62, 0x7d, 0x94, 0x17, 0xe1, 0xb2, 0x75, 0x7c, 0xd9, 0x51, 0xc8, 0xa1, 0xf8, 0x1e, 0x8f, 0xa7, 0x3f, 0x59, 0x76, 0x1f, 0x95, 0xbd, 0xb5, 0x37, 0x5e, 0x22, 0xdf, 0x80, 0x9c, 0x1c, 0x07, 0x6e, 0x48, 0xba, 0x78, 0x4c, 0xae, 0x2f, 0x39, 0xf2, 0x7b, 0xa5, 0xf5, 0xba, 0x28, 0x45, 0x56, 0x4a, 0x8a, 0xab, 0x53, 0x52, 0x58, 0xb4, 0x14, 0xd7, 0x24, 0x47, 0x0e, 0x8b, 0x50, 0x5e, 0xd9, 0x03, 0x85, 0x34, 0x42, 0xd8, 0x81, 0xfd, 0x07, 0x2d, 0x5e, 0xd6, 0x9b, 0xae, 0x30, 0x9f, 0xad, 0x0f, 0xd0, 0x3d, 0x79, 0x85, 0x1d, 0x60, 0x29, 0x99, 0x69, 0xd4, 0xaf, 0x84, 0x5c, 0x3b, 0x48, 0xab, 0x20, 0x8f, 0x60, 0xae, 0xf5, 0x56, 0x78, 0x2a, 0x52, 0x60, 0xee, 0x4f, 0x87, 0x79, 0xdf, 0x1a, 0x9f, 0x27, 0x94, 0x33, 0x4b, 0xe7, 0x7d, 0xb5, 0x47, 0xfa, 0xfd, 0x0b, 0xf5, 0x6b, 0xdf, 0x8c, 0xad, 0x9c, 0xb4, 0xa9, 0x77, 0xf8, 0x05, 0x45, 0xd7, 0x03, 0x87, 0x1f, 0x28, 0x30, 0x44, 0x26, 0x1d, 0x7d, 0xd6, 0xbb, 0xeb, 0xc3, 0xcd, 0x07, 0x62, 0x3a, 0xd4, 0xb6, 0x27, 0xa8, 0x85, 0x3c, 0x9e, 0xf8, 0xc4, 0x5a, 0x39, 0xe3, 0xf7, 0x9b, 0x69, 0xc4, 0xf8, 0x5e, 0xf5, 0x09, 0x1e, 0xad, 0x8c, 0x26, 0x47, 0x2b, 0x0f, 0x20, 0x97, 0x7c, 0x19, 0xe5, 0x76, 0x62, 0xa4, 0x72, 0xa5, 0x6e, 0x7a, 0xb9, 0xa4, 0x44, 0x69, 0xa4, 0x72, 0xeb, 0xf6, 0xfb, 0xda, 0x75, 0x85, 0xfa, 0xbf, 0xa7, 0x6e, 0xeb, 0xa8, 0x5f, 0x53, 0xaa, 0xf8, 0x78, 0x65, 0xa6, 0x5c, 0xed, 0x0d, 0xdb, 0xe1, 0xf0, 0xb3, 0xf8, 0x6d, 0xf0, 0x3f, 0xb6, 0xff, 0x3e, 0x6b, 0xe5, 0xbb, 0x27, 0x20, 0x67, 0x5a, 0xcd, 0xdf, 0x87, 0x33, 0xa2, 0xe5, 0xad, 0x0f, 0x2c, 0xcd, 0x7f, 0xfc, 0xbe, 0xb0, 0xe5, 0x40, 0x2c, 0x72, 0xe6, 0xb5, 0x5e, 0x51, 0xb7, 0x1e, 0xe0, 0x51, 0x4d, 0x17, 0x9d, 0xeb, 0x93, 0x38, 0x2f, 0x8c, 0xe9, 0xd2, 0x8a, 0x3c, 0x21, 0x6c, 0xdf, 0xb7, 0x19, 0x2c, 0xd1, 0xcc, 0x6d, 0xb4, 0x06, 0x2d, 0x97, 0x7b, 0x25, 0xf5, 0x0e, 0x1a, 0x0f, 0x1e, 0xfe, 0x46, 0x3b, 0x6b, 0x1a, 0xa9, 0xd2, 0x94, 0x46, 0x01, 0x77, 0x7c, 0xb6, 0x9b, 0xc7, 0xf5, 0x64, 0xa2, 0x38, 0xd4, 0xaa, 0x8f, 0xd0, 0x08, 0x38, 0x8d, 0x3b, 0xa0, 0x2d, 0x6a, 0xe1, 0xbd, 0x0c, 0x1f, 0xab, 0x47, 0x90, 0x2f, 0x88, 0xf1, 0xc6, 0x4d, 0xbf, 0x1e, 0x12, 0xbb, 0x3f, 0xcc, 0x37, 0x80, 0x1c, 0x34, 0xd4, 0xc7, 0x10, 0x83, 0xe7, 0xb6, 0x22, 0x0f, 0xac, 0xef, 0x43, 0x8b, 0x0c, 0x7c, 0x7d, 0x5d, 0xb9, 0x29, 0xa3, 0xe3, 0x1d, 0xea, 0x11, 0xcc, 0xbf, 0x99, 0xcf, 0xa8, 0xa2, 0xdd, 0x57, 0x1f, 0x9b, 0xf5, 0xea, 0x7e, 0xd2, 0x67, 0xbf, 0x35, 0x48, 0x9c, 0x26, 0x31, 0xce, 0xde, 0x85, 0x52, 0xc8, 0xae, 0x69, 0x4e, 0x36, 0x4d, 0x57, 0x2a, 0x41, 0x7c, 0x14, 0x22, 0x8c, 0x62, 0xbc, 0x68, 0x6a, 0x5a, 0x1d, 0xca, 0x78, 0x4c, 0x12, 0x73, 0x10, 0x6b, 0xe2, 0x66, 0xcf, 0x11, 0x2b, 0x54, 0x3b, 0x6d, 0x5a, 0x9a, 0xf8, 0x38, 0x81, 0x48, 0xe9, 0xa2, 0x11, 0xad, 0x91, 0xf7, 0x99, 0x3b, 0x38, 0xc1, 0xe8, 0xf9, 0x9a, 0x11, 0x88, 0x47, 0xd1, 0x1e, 0x45, 0xac, 0xef, 0x28, 0xf2, 0x7f, 0x61, 0x45, 0x60, 0x9d, 0x11, 0xe2, 0x51, 0xa1, 0x8d, 0xda, 0x57, 0xdb, 0xa0, 0x6e, 0xb0, 0xdd, 0xe5, 0xd9, 0xa0, 0xcd, 0x02, 0x27, 0x47, 0xe6, 0x51, 0x9f, 0x44, 0xbf, 0x4c, 0xb6, 0x26, 0xff, 0x81, 0xc6, 0xe6, 0xe3, 0xb3, 0xdd, 0x4a, 0xbf, 0xd0, 0x6b, 0xe3, 0x7d, 0x18, 0xe5, 0x3c, 0x9f, 0x0d, 0x04, 0xe7, 0xe3, 0x9a, 0xf5, 0x8c, 0x97, 0x39, 0x87, 0x92, 0xb0, 0x65, 0xdf, 0x86, 0x71, 0xe3, 0xfd, 0xf2, 0xe7, 0xe7, 0x19, 0xf2, 0xd6, 0xf7, 0x15, 0xe8, 0x0e, 0xf4, 0x1d, 0x58, 0x23, 0x28, 0x99, 0x66, 0x9b, 0x95, 0x7e, 0x19, 0xe1, 0x95, 0xc3, 0xa5, 0x50, 0x30, 0xe0, 0x6d, 0x65, 0x28, 0x99, 0xa6, 0x43, 0xc5, 0x97, 0xc8, 0x6b, 0xa3, 0xa6, 0x73, 0xe7, 0x68, 0xd8, 0x99, 0xa9, 0x8e, 0xa2, 0x35, 0x84, 0x9a, 0x3e, 0xea, 0xd4, 0x8d, 0xdf, 0x5a, 0x73, 0xcb, 0x5e, 0x75, 0x9b, 0xc7, 0x53, 0xdf, 0xd7, 0xfc, 0x5c, 0x5a, 0xf8, 0xae, 0xd4, 0xda, 0x6b, 0xeb, 0x80, 0xff, 0x46, 0xed, 0x83, 0x46, 0xcf, 0x06, 0xd6, 0xeb, 0x85, 0x05, 0x63, 0x56, 0x3f, 0x14, 0xbb, 0x11, 0x49, 0xcb, 0xbc, 0x08, 0x97, 0xc9, 0xbc, 0xbe, 0x19, 0x9e, 0x88, 0x56, 0x9f, 0xfe, 0x32, 0x98, 0xd4, 0x66, 0xa8, 0x90, 0x36, 0x69, 0x5f, 0x51, 0x5e, 0x41, 0x80, 0x46, 0x41, 0xde, 0xe9, 0x44, 0xee, 0x8a, 0xbd, 0xc2, 0x68, 0xb8, 0x68, 0x1c, 0x24, 0x2b, 0x65, 0x1c, 0x04, 0x24, 0x9a, 0x63, 0xb1, 0xed, 0xff, 0x11, 0xc8, 0x35, 0x8c, 0x3b, 0x6d, 0x8c, 0x43, 0xd8, 0x3d, 0xc6, 0x88, 0x8e, 0x6d, 0xbe, 0x56, 0x9a, 0xa3, 0x27, 0x3d, 0xce, 0x62, 0xc9, 0x86, 0x7a, 0xc9, 0x2c, 0xa1, 0xa5, 0xee, 0x4a, 0xc8, 0x4a, 0xe0, 0xb1, 0x11, 0xec, 0x01, 0xe7, 0x37, 0xf1, 0x68, 0x47, 0x17, 0x38, 0x8c, 0x40, 0x5f, 0x84, 0x13, 0xe2, 0xc7, 0x66, 0x97, 0x0e, 0x42, 0x15, 0x66, 0x97, 0x1e, 0x08, 0xe6, 0x0a, 0xd7, 0x4d, 0x2e, 0xa3, 0x5e, 0x99, 0x43, 0x63, 0x8f, 0x21, 0xa3, 0xb9, 0x0f, 0x20, 0xe3, 0x78, 0x97, 0x1c, 0xce, 0x48, 0x1d, 0x47, 0x31, 0x1a, 0x84, 0x05, 0x78, 0xbe, 0x48, 0x1b, 0x47, 0x69, 0x0e, 0xf4, 0xd1, 0xad, 0x85, 0x37, 0xf5, 0x80, 0xce, 0x48, 0x6b, 0x10, 0x45, 0x7f, 0x70, 0x89, 0xfe, 0x10, 0x2a, 0xb5, 0x61, 0xec, 0xba, 0x3e, 0xc4, 0x97, 0x18, 0xc7, 0x28, 0x77, 0xea, 0xaa, 0x99, 0x06, 0x12, 0x27, 0xc9, 0xe5, 0x26, 0x70, 0xe9, 0xa5, 0xf1, 0xe5, 0x78, 0x6b, 0x88, 0x31, 0x19, 0xc5, 0x40, 0x5a, 0x29, 0x69, 0x15, 0x8b, 0xc5, 0x78, 0xef, 0x1c, 0x9a, 0x79, 0xff, 0x1b, 0xe3, 0x32, 0x2b, 0x6d, 0x0f, 0xa5, 0xcb, 0x6f, 0xbb, 0x8b, 0xc7, 0x64, 0x72, 0xd3, 0x35, 0xf2, 0x4f, 0x79, 0x24, 0x57, 0xa9, 0xc2, 0xde, 0x95, 0x97, 0x16, 0x3b, 0x46, 0x1c, 0xcf, 0xb7, 0x2e, 0x58, 0x24, 0xf2, 0x4b, 0x91, 0xe5, 0x68, 0xf9, 0x57, 0x8f, 0x7c, 0x5a, 0x92, 0xb2, 0x52, 0x40, 0x8e, 0xaf, 0x14, 0x10, 0x7a, 0xe1, 0x62, 0x4d, 0x8b, 0xa7, 0x19, 0x32, 0xc2, 0x33, 0x73, 0xc7, 0x27, 0xb1, 0xcf, 0x64, 0x93, 0xbe, 0xa0, 0x8d, 0x4e, 0xcf, 0xa2, 0x7c, 0x41, 0x7f, 0xa3, 0x0f, 0xf9, 0xcb, 0xb3, 0xcc, 0x5f, 0x2d, 0x09, 0x9d, 0x85, 0x63, 0xd3, 0x5a, 0x70, 0xe7, 0x35, 0xd8, 0x37, 0x9e, 0xf4, 0xef, 0xf8, 0xe4, 0x30, 0x73, 0x80, 0x49, 0x42, 0x3f, 0x41, 0x9d, 0x1e, 0xa8, 0xe7, 0xdb, 0xbb, 0xa4, 0x7c, 0xb4, 0x90, 0x6d, 0x05, 0x0d, 0xb4, 0xce, 0x92, 0x56, 0xcf, 0xa0, 0x6c, 0x70, 0x0a, 0x9b, 0xeb, 0x33, 0xb4, 0x66, 0xe5, 0x72, 0xab, 0x4f, 0x5b, 0x91, 0xd0, 0x28, 0xe8, 0x3f, 0x68, 0xf0, 0x21, 0x2f, 0x0b, 0x2d, 0x0a, 0x67, 0x6c, 0x7d, 0x8e, 0xb8, 0xac, 0xfb, 0xb4, 0x94, 0xf7, 0xf6, 0x2e, 0xb3, 0x1d, 0xbe, 0x31, 0x36, 0x16, 0xac, 0xc0, 0xf7, 0x4d, 0x63, 0x6a, 0xb0, 0xac, 0xbe, 0xcf, 0x4d, 0xa3, 0x16, 0x26, 0x73, 0x31, 0x7c, 0x03, 0x63, 0x1b, 0xeb, 0xfb, 0x50, 0x2f, 0x3c, 0xab, 0xd8, 0x28, 0x3f, 0x59, 0x17, 0xcf, 0x91, 0x76, 0xa2, 0x50, 0x6e, 0xb7, 0x8e, 0xdb, 0x27, 0x84, 0xf5, 0x27, 0xab, 0x56, 0x8c, 0x89, 0xb3, 0x76, 0x4a, 0xb8, 0xb5, 0xb1, 0x76, 0x6a, 0xd5, 0xad, 0x9c, 0x74, 0xec, 0x87, 0x54, 0xd7, 0x95, 0x30, 0xdb, 0x6e, 0xd4, 0x1f, 0xdb, 0x2c, 0xbb, 0x79, 0xdd, 0x68, 0x21, 0xef, 0xbe, 0xd6, 0x7a, 0x16, 0x8f, 0x04, 0xea, 0xb4, 0x1e, 0x50, 0x4a, 0xb4, 0x4d, 0xe7, 0x60, 0x4e, 0x50, 0x89, 0xc2, 0xdf, 0xde, 0x45, 0xda, 0x16, 0x59, 0xd5, 0x71, 0x4e, 0x89, 0x7c, 0xd2, 0x4e, 0xd4, 0xfd, 0x17, 0xee, 0xe3, 0x8a, 0xde, 0x53, 0x08, 0x76, 0x94, 0x25, 0x0f, 0x0a, 0x1d, 0x14, 0xb5, 0x00, 0x5a, 0xe7, 0x62, 0x2f, 0x44, 0x1b, 0xd5, 0x71, 0x2d, 0xd9, 0x54, 0x3b, 0x50, 0x37, 0x0a, 0x1a, 0x6b, 0x3f, 0xc8, 0x1f, 0x55, 0x60, 0xec, 0x36, 0xb4, 0xc3, 0x32, 0x9d, 0x93, 0x50, 0x3f, 0x6c, 0x48, 0xec, 0x23, 0xa6, 0xf5, 0xad, 0x2e, 0x4d, 0x73, 0xcc, 0x24, 0xcd, 0x50, 0x76, 0x25, 0xc6, 0x5d, 0x8e, 0x5f, 0x4e, 0x77, 0x62, 0xcd, 0xc0, 0xf8, 0xbb, 0x87, 0xd6, 0xc6, 0xd6, 0xa2, 0xec, 0xe7, 0x58, 0x59, 0x29, 0xb1, 0xae, 0x16, 0xb1, 0x58, 0x7b, 0xb2, 0xfc, 0xee, 0xc1, 0xfe, 0x58, 0x3f, 0xca, 0xc9, 0x55, 0x60, 0xf7, 0x6d, 0xeb, 0x5f, 0x0a, 0xb0, 0x9e, 0xad, 0xf1, 0x49, 0x34, 0x37, 0xa7, 0x95, 0x74, 0xcf, 0x94, 0xec, 0xa0, 0x59, 0x57, 0x71, 0x1e, 0x0c, 0xfd, 0x74, 0xa3, 0x9a, 0x72, 0x90, 0xa5, 0x43, 0x52, 0x4f, 0x2a, 0x4c, 0xd1, 0x93, 0x0a, 0x35, 0x9d, 0xa3, 0x90, 0xcb, 0x9d, 0xb0, 0x03, 0xad, 0xb8, 0x83, 0xbd, 0xca, 0x33, 0x28, 0x21, 0x0d, 0xfe, 0x1d, 0xa3, 0xef, 0x68, 0x16, 0x13, 0xd2, 0x31, 0xed, 0x55, 0x9c, 0x3e, 0x0f, 0xe9, 0xed, 0x39, 0xc8, 0x49, 0xd0, 0x5a, 0xb6, 0x13, 0xe4, 0x76, 0xa4, 0x34, 0x5e, 0xcf, 0x74, 0x2e, 0xca, 0x38, 0xd4, 0x09, 0x5b, 0x3d, 0x7f, 0x34, 0xb9, 0x4e, 0x88, 0xe7, 0xc2, 0x51, 0x2f, 0x08, 0xcd, 0x92, 0xeb, 0xb8, 0x16, 0xd2, 0x95, 0x69, 0x6e, 0x68, 0x1d, 0xd0, 0x6d, 0x28, 0x7a, 0xc4, 0x33, 0x8f, 0xca, 0xd7, 0x8c, 0x5c, 0x38, 0x91, 0x52, 0xcf, 0x4e, 0xce, 0xb3, 0x44, 0xc0, 0xa1, 0xcd, 0x00, 0x24, 0x43, 0xeb, 0xa8, 0xbd, 0x90, 0x56, 0xf9, 0x16, 0xbd, 0xb8, 0xc4, 0x9c, 0xb3, 0x95, 0xea, 0xd3, 0x5e, 0x70, 0x65, 0x18, 0xc1, 0x5c, 0x67, 0xf0, 0x78, 0xd3, 0x79, 0x5a, 0x11, 0x4c, 0xd4, 0x99, 0xcf, 0x3c, 0xa4, 0x8c, 0x66, 0x6b, 0x98, 0x2a, 0x0a, 0x69, 0xa6, 0x06, 0x75, 0x1b, 0xd6, 0xea, 0xae, 0xb0, 0x56, 0x07, 0x63, 0x57, 0xd6, 0xc2, 0x58, 0x6b, 0xbd, 0xd3, 0x01, 0x96, 0xca, 0x91, 0xd1, 0x73, 0x29, 0xf4, 0x55, 0x21, 0xbb, 0x90, 0x5e, 0xe8, 0xa4, 0x2f, 0x0e, 0x4d, 0x09, 0x29, 0x14, 0x94, 0x77, 0x20, 0x36, 0x7f, 0x64, 0x74, 0xf2, 0xb6, 0x35, 0x4b, 0xd0, 0xa6, 0x9e, 0x21, 0xac, 0xee, 0x94, 0xd8, 0x05, 0x49, 0x7a, 0x1c, 0xf1, 0x5d, 0x8b, 0x74, 0x52, 0x7e, 0x9e, 0x6f, 0xd2, 0x40, 0x3a, 0x79, 0xd3, 0x38, 0x03, 0x74, 0xf0, 0xe5, 0x60, 0x36, 0x52, 0x2e, 0x70, 0xec, 0x4d, 0x09, 0x5e, 0x0a, 0x96, 0x6b, 0x0f, 0xc4, 0x94, 0x2d, 0x34, 0x2f, 0x85, 0xdc, 0x99, 0x6f, 0xce, 0xe3, 0x75, 0x9e, 0x84, 0xd3, 0x1e, 0xc2, 0x69, 0x47, 0x36, 0xea, 0x1b, 0x0e, 0x67, 0x3b, 0xdd, 0x70, 0x49, 0x23, 0x35, 0x0a, 0x8c, 0x52, 0x6f, 0xa3, 0xb9, 0xcf, 0xab, 0x50, 0x0b, 0x19, 0xb0, 0xc5, 0x67, 0x07, 0xd7, 0xa2, 0xef, 0x0c, 0xf8, 0x72, 0x44, 0xb7, 0x2b, 0x36, 0xcd, 0x8d, 0x54, 0x74, 0x6f, 0x15, 0x60, 0xb9, 0x80, 0xe5, 0x22, 0x86, 0x69, 0xf5, 0x2f, 0x95, 0xa1, 0xb5, 0x9b, 0xcc, 0xbb, 0xc2, 0xb5, 0x72, 0xfe, 0xe1, 0xfb, 0x1a, 0xe4, 0xa6, 0x88, 0x84, 0x29, 0x69, 0xff, 0xad, 0x3e, 0x41, 0x89, 0x58, 0x0e, 0xf1, 0x5c, 0xa4, 0x44, 0xb4, 0xab, 0xfe, 0x74, 0x62, 0x1a, 0xc1, 0x41, 0x6b, 0x39, 0x72, 0xb4, 0x75, 0x9e, 0xfa, 0x20, 0xaf, 0xfa, 0x98, 0x5a, 0x01, 0xfa, 0x84, 0x05, 0x5e, 0xc6, 0xdc, 0xf0, 0x0c, 0x9f, 0x58, 0xda, 0x05, 0x32, 0x6a, 0x65, 0x36, 0x8f, 0x0b, 0x5b, 0xe3, 0x4b, 0x37, 0xbb, 0x20, 0x8b, 0xbf, 0x72, 0xf1, 0xcb, 0xc2, 0x5f, 0xd7, 0xe1, 0x57, 0x36, 0x7f, 0xe5, 0xe0, 0x57, 0x8e, 0xa7, 0x0b, 0x26, 0xb3, 0xeb, 0x5a, 0x74, 0xe5, 0xf2, 0x57, 0xb6, 0xc1, 0x35, 0xa1, 0x1d, 0x5d, 0x79, 0xd5, 0xa7, 0x21, 0x4b, 0x9e, 0xa7, 0xed, 0x3c, 0xed, 0xa1, 0x73, 0x52, 0x13, 0xae, 0xbe, 0xb8, 0x8d, 0x26, 0x66, 0x67, 0x53, 0xe7, 0xfd, 0x0a, 0x91, 0xa2, 0x1c, 0x0d, 0x34, 0xce, 0x10, 0x32, 0xf0, 0x18, 0x84, 0x39, 0x6c, 0x9c, 0xa9, 0xc9, 0x71, 0x5d, 0xb3, 0xef, 0xb1, 0x20, 0xc0, 0x16, 0x41, 0x6b, 0x9e, 0x1f, 0xfc, 0x3d, 0x7d, 0x48, 0xf6, 0x30, 0x8f, 0xc4, 0xd6, 0xac, 0x1e, 0x19, 0x79, 0x2e, 0x21, 0x33, 0x41, 0x97, 0x25, 0x93, 0x3d, 0x66, 0x11, 0x79, 0x3a, 0x75, 0xc2, 0x3a, 0xb9, 0xc2, 0x3c, 0xcb, 0xe3, 0x79, 0x26, 0xf3, 0x93, 0x5e, 0x16, 0xd4, 0xb7, 0xaf, 0xaf, 0x30, 0x66, 0x2b, 0x83, 0xe1, 0xbc, 0x7e, 0x91, 0xb3, 0x75, 0xe1, 0x95, 0xe9, 0xfd, 0x3f, 0x19, 0x6a, 0x06, 0x69, 0xb5, 0x73, 0xe2, 0x7f, 0x0e, 0x0e, 0x9a, 0xaf, 0x4a, 0x52, 0xb6, 0x34, 0xcb, 0x72, 0x6d, 0x30, 0x5b, 0xbe, 0x4e, 0xe7, 0x42, 0xda, 0xa6, 0x5d, 0x64, 0x50, 0x18, 0xa3, 0xf5, 0x27, 0x62, 0x2d, 0xcd, 0xdb, 0x8f, 0x69, 0x74, 0x0e, 0xea, 0xed, 0x24, 0xfb, 0x34, 0x1a, 0x73, 0xf0, 0xdc, 0x8e, 0x12, 0x5f, 0xd1, 0x36, 0x9e, 0x2e, 0xa5, 0x9c, 0x74, 0xba, 0x94, 0x72, 0x2e, 0x43, 0x97, 0x7a, 0xcf, 0x7a, 0xa5, 0x2c, 0x2d, 0x2e, 0x69, 0x26, 0xfe, 0x44, 0x6f, 0x51, 0xb4, 0xd8, 0x4c, 0xbf, 0x11, 0x49, 0xc9, 0xa2, 0x77, 0xb2, 0x4f, 0xd8, 0x7a, 0xf9, 0x3b, 0x89, 0xaf, 0x19, 0x29, 0xf8, 0x9a, 0xa1, 0xe1, 0x6b, 0x06, 0x5c, 0x83, 0x10, 0xd1, 0xfe, 0xc3, 0x2c, 0xe4, 0x4e, 0x65, 0x34, 0xc3, 0x46, 0x25, 0xa2, 0x4e, 0x2b, 0xca, 0xb4, 0x89, 0x7a, 0x49, 0xf9, 0xa9, 0x70, 0xce, 0xde, 0x2b, 0xe6, 0x33, 0xba, 0x68, 0xf6, 0x25, 0x0f, 0x65, 0xdd, 0x16, 0x29, 0x6f, 0xda, 0xbc, 0xc4, 0xbc, 0x1c, 0xcf, 0xc1, 0xc6, 0xd7, 0xf5, 0x92, 0xe4, 0xa5, 0x9e, 0x74, 0xfa, 0xa5, 0x46, 0x8d, 0xff, 0x13, 0x5e, 0xae, 0xeb, 0xa1, 0x93, 0x1f, 0x6c, 0x31, 0x9a, 0x4f, 0x64, 0xce, 0xc8, 0xbb, 0xa3, 0xc5, 0xfc, 0x9e, 0x94, 0x43, 0xf9, 0xf1, 0xcc, 0xc3, 0x33, 0xc4, 0xef, 0x6d, 0x96, 0x04, 0x6e, 0x05, 0x67, 0xde, 0xf1, 0x67, 0x3d, 0xe5, 0x41, 0x6b, 0xab, 0xa6, 0x2d, 0xa7, 0x3b, 0x38, 0xc4, 0x58, 0xcb, 0x95, 0x51, 0x07, 0xd5, 0x96, 0xe7, 0x7a, 0x2d, 0x34, 0xd7, 0x35, 0xea, 0xa3, 0x32, 0x31, 0x17, 0xb3, 0x44, 0xb2, 0x85, 0x74, 0xd1, 0xbc, 0x4b, 0xd6, 0x5c, 0x77, 0xf9, 0x9a, 0xf3, 0x38, 0x93, 0x3e, 0x7d, 0xdd, 0x15, 0xea, 0xa2, 0x79, 0x56, 0xd7, 0xbb, 0x43, 0xef, 0xbe, 0xb1, 0xef, 0x01, 0x7a, 0x5b, 0xf2, 0x78, 0x95, 0xc4, 0x3e, 0x79, 0x62, 0xa0, 0x77, 0x5b, 0x6f, 0xe7, 0x87, 0xda, 0xde, 0x7a, 0xe2, 0x18, 0xb4, 0xea, 0xcd, 0x66, 0xab, 0xb3, 0xb7, 0xb2, 0xad, 0xa8, 0xf3, 0xb6, 0x67, 0xfc, 0x63, 0xf5, 0x88, 0xba, 0x8d, 0xd6, 0xae, 0x13, 0xa7, 0xd0, 0xfc, 0xfe, 0x41, 0x73, 0xe7, 0x68, 0xee, 0xaf, 0x6b, 0xee, 0x5c, 0xcd, 0xfd, 0x35, 0xcd, 0x9d, 0x87, 0xfc, 0x64, 0x8a, 0xe6, 0x77, 0x93, 0xe6, 0x37, 0x99, 0x35, 0xde, 0xf6, 0x8c, 0x99, 0x9a, 0x3b, 0x9f, 0xce, 0x4f, 0xf8, 0x7c, 0xbe, 0xb2, 0x58, 0xe3, 0x2b, 0xce, 0x2c, 0xb2, 0xf7, 0xac, 0x89, 0xb1, 0xb2, 0x0b, 0x0d, 0x97, 0x19, 0x11, 0xcb, 0x4a, 0xe8, 0x99, 0x15, 0xa8, 0x7d, 0x5f, 0x05, 0xf9, 0x56, 0xfc, 0x4a, 0x9e, 0xb8, 0x40, 0x33, 0x15, 0x14, 0x36, 0xad, 0x15, 0x64, 0x70, 0x60, 0x8c, 0xac, 0x4b, 0xc4, 0xc8, 0xa6, 0x18, 0xb4, 0xa7, 0x24, 0xdd, 0x66, 0xd1, 0xce, 0x26, 0x29, 0x25, 0xab, 0x85, 0xd6, 0xa1, 0xf2, 0x2d, 0xa8, 0x9b, 0x50, 0x17, 0x53, 0x55, 0x95, 0x77, 0xb3, 0x97, 0x78, 0x57, 0x5d, 0xb3, 0x11, 0xf5, 0x75, 0xb4, 0x46, 0x72, 0x62, 0xd5, 0xbc, 0xbf, 0x5d, 0xf3, 0xc1, 0xfa, 0xda, 0x00, 0x6b, 0x3f, 0x4f, 0xac, 0x24, 0xbe, 0xce, 0xc5, 0xe7, 0xb6, 0xcc, 0x13, 0x21, 0xe8, 0xd2, 0xd6, 0x0f, 0xc7, 0xa1, 0xf7, 0x2d, 0x83, 0x60, 0x28, 0x2b, 0x0d, 0x2e, 0x9a, 0xdd, 0x12, 0x6b, 0x77, 0x13, 0x27, 0xb5, 0x5e, 0x68, 0xa7, 0xbd, 0x11, 0xe3, 0xfc, 0x14, 0xb4, 0x36, 0x4a, 0x43, 0x59, 0x71, 0x6d, 0xd0, 0xbf, 0x63, 0xec, 0x30, 0xef, 0x82, 0x28, 0x49, 0xf3, 0xdb, 0xc3, 0x7e, 0xc6, 0x34, 0xbf, 0x6d, 0xec, 0x67, 0x49, 0xf3, 0x7b, 0x4a, 0xdb, 0x41, 0x91, 0xea, 0xf7, 0x70, 0x62, 0xc7, 0x06, 0xcd, 0x12, 0xde, 0x83, 0x35, 0xd3, 0x30, 0x53, 0x4a, 0xbb, 0x67, 0x6c, 0x76, 0x5a, 0xed, 0x41, 0x33, 0x20, 0x1c, 0x47, 0xd6, 0x43, 0x8c, 0xac, 0x12, 0x27, 0xd5, 0xbe, 0xb5, 0x7a, 0x64, 0xac, 0xd4, 0xbf, 0xc1, 0x96, 0xe4, 0x6a, 0x61, 0xdb, 0x8f, 0x20, 0xff, 0xeb, 0xe5, 0x50, 0xa8, 0x8d, 0x01, 0x4a, 0x7d, 0xfd, 0x4e, 0x49, 0xce, 0x88, 0x5c, 0xfd, 0xfb, 0xcd, 0x32, 0xad, 0xd1, 0xb8, 0xda, 0xbf, 0x61, 0x9a, 0xb6, 0x8f, 0x14, 0x63, 0x7b, 0xb4, 0x72, 0xd9, 0x8a, 0xe3, 0x10, 0x8b, 0x16, 0x62, 0xa7, 0x93, 0x7c, 0x12, 0xf6, 0x87, 0x44, 0x6b, 0x71, 0x35, 0xae, 0x47, 0xa1, 0xa6, 0x8b, 0x42, 0x4a, 0x44, 0x08, 0x9c, 0xd1, 0x72, 0x64, 0xcb, 0x49, 0x0b, 0x2b, 0xd5, 0xc2, 0xf6, 0x23, 0x76, 0x8d, 0xe1, 0xab, 0xd1, 0x92, 0x35, 0x47, 0xce, 0xec, 0x8a, 0xc9, 0xbd, 0x74, 0x6a, 0xc3, 0x4a, 0x55, 0x5e, 0x13, 0x06, 0xe4, 0x71, 0x53, 0x84, 0x6b, 0xea, 0x1a, 0xb6, 0x1d, 0x8d, 0x05, 0xc5, 0xc6, 0x51, 0xd2, 0x39, 0x62, 0x40, 0x3e, 0x81, 0xde, 0xc6, 0x58, 0xf1, 0x32, 0x28, 0xfc, 0xf1, 0xab, 0x9d, 0x07, 0xd3, 0x76, 0xd6, 0xb8, 0x42, 0x3d, 0x28, 0x53, 0x4a, 0xc7, 0xed, 0xab, 0xa9, 0x08, 0x05, 0x65, 0x92, 0xd6, 0xba, 0x71, 0xbb, 0x6a, 0xea, 0xf8, 0x8e, 0x8f, 0xa0, 0x46, 0xcb, 0x99, 0xe3, 0x29, 0x95, 0x4f, 0x15, 0x72, 0x44, 0xc6, 0x90, 0x43, 0xd3, 0x28, 0x81, 0x49, 0xac, 0x7f, 0x5e, 0xba, 0x8e, 0x4f, 0x52, 0x30, 0x69, 0xab, 0xc2, 0xce, 0xd4, 0x0d, 0x7e, 0xdd, 0x05, 0x76, 0xe4, 0xc8, 0x65, 0x8a, 0x89, 0x47, 0xf6, 0x9f, 0x6c, 0x1c, 0xd4, 0xce, 0x08, 0xcf, 0x8f, 0x8f, 0x37, 0x31, 0x9f, 0xc8, 0xb2, 0xb6, 0x42, 0x49, 0x54, 0xbd, 0xa1, 0x2f, 0x0f, 0x02, 0xb1, 0xc6, 0xde, 0x59, 0xad, 0x50, 0xf8, 0x93, 0xa1, 0xce, 0x13, 0xda, 0xea, 0x28, 0x3e, 0xd5, 0x05, 0xfb, 0x5f, 0x3e, 0xf6, 0x43, 0x99, 0x20, 0x8a, 0x4e, 0xfa, 0x03, 0xdd, 0xc0, 0x4b, 0x67, 0x2c, 0x54, 0xa0, 0x0d, 0x9d, 0x03, 0x76, 0xfa, 0x92, 0x25, 0xf6, 0xa5, 0xfd, 0x40, 0x15, 0x1e, 0xb7, 0xd7, 0x7d, 0xa2, 0x66, 0xaa, 0x5b, 0xc4, 0xe7, 0x3d, 0x5a, 0xfa, 0x70, 0x1e, 0xf6, 0x25, 0xba, 0x95, 0xfa, 0xa2, 0x5e, 0x17, 0x32, 0xf3, 0xa8, 0x70, 0x98, 0xee, 0x8f, 0x11, 0xab, 0x99, 0xb4, 0xf3, 0x7d, 0xa8, 0xbf, 0xe5, 0xd3, 0x5a, 0xf9, 0x82, 0xc0, 0x2c, 0xc4, 0xe9, 0xa3, 0x7b, 0x10, 0xff, 0x67, 0x76, 0xad, 0x51, 0x1a, 0x6c, 0xc6, 0xc6, 0x3e, 0x3b, 0xb6, 0xc2, 0x8b, 0xdb, 0x06, 0x20, 0x64, 0x08, 0xc4, 0x64, 0x8f, 0xe2, 0xb2, 0x72, 0x9b, 0xbd, 0x16, 0x8b, 0x4c, 0xfa, 0xfd, 0xb3, 0x07, 0x7e, 0x3c, 0x00, 0xd3, 0xca, 0xd1, 0x46, 0x3a, 0x01, 0xa5, 0x0d, 0xeb, 0x1e, 0xdd, 0x83, 0x7a, 0x47, 0x36, 0x86, 0x97, 0xbe, 0xbb, 0xc7, 0x7a, 0x4d, 0x48, 0x5f, 0xdf, 0x6b, 0xed, 0xc5, 0x7a, 0x0e, 0x50, 0x9e, 0x58, 0xcf, 0x63, 0x28, 0x33, 0x00, 0x76, 0xe2, 0xd7, 0x66, 0xc6, 0x06, 0xf1, 0x80, 0x12, 0x39, 0x9c, 0x07, 0x8d, 0xbd, 0x51, 0x75, 0xdb, 0x00, 0xe5, 0x4f, 0xd8, 0xf8, 0xc9, 0x50, 0xb0, 0xe0, 0xd1, 0x3d, 0xb3, 0x7a, 0x54, 0x35, 0x0a, 0x11, 0x50, 0x72, 0xb0, 0xfc, 0x52, 0x7b, 0xc9, 0x00, 0xfc, 0x64, 0xf7, 0x52, 0xbd, 0xb5, 0xc2, 0x26, 0x61, 0xcb, 0x0f, 0x6c, 0xed, 0xed, 0x3c, 0x4e, 0x23, 0x68, 0xab, 0xce, 0xec, 0x59, 0x23, 0xcf, 0x00, 0x47, 0x28, 0x57, 0xdb, 0x69, 0xb8, 0x45, 0xec, 0x7f, 0x5d, 0xd7, 0x4f, 0xfb, 0xf5, 0xdb, 0x75, 0x61, 0x0b, 0xad, 0x95, 0x43, 0x6d, 0x92, 0xe9, 0x99, 0xa8, 0xc8, 0x59, 0x6c, 0x17, 0x73, 0xef, 0xeb, 0xb4, 0x79, 0xfa, 0x42, 0x82, 0x62, 0x2a, 0xaa, 0xce, 0x14, 0x1a, 0xb9, 0xfa, 0xb5, 0xde, 0xec, 0x32, 0xa0, 0x9a, 0x6d, 0xb5, 0x73, 0xcd, 0xd0, 0xb7, 0x74, 0xea, 0x4e, 0x1a, 0x91, 0xa0, 0xf3, 0x90, 0xf2, 0xf3, 0xb5, 0xb3, 0xea, 0x69, 0xdd, 0x7f, 0x97, 0xc0, 0x70, 0x78, 0xca, 0x0d, 0x74, 0xe6, 0x0c, 0x7e, 0x55, 0x9f, 0x00, 0xef, 0x0d, 0xf3, 0xc0, 0x4e, 0xdf, 0x5f, 0xeb, 0x81, 0x7c, 0xc8, 0x9f, 0x46, 0xad, 0xe6, 0xc5, 0xdf, 0x3c, 0xa8, 0x45, 0xe3, 0xee, 0x46, 0x3a, 0x27, 0x14, 0x79, 0xd1, 0xe2, 0x72, 0x31, 0xc6, 0x79, 0x3b, 0x52, 0x5f, 0x0e, 0x2c, 0xf1, 0x2c, 0x83, 0xe6, 0x69, 0x5e, 0x68, 0xf8, 0x7a, 0x17, 0x58, 0xa1, 0xb1, 0x18, 0xad, 0x49, 0xef, 0xd0, 0x1f, 0x07, 0x7a, 0x51, 0xa3, 0xb9, 0x88, 0x6f, 0x1a, 0x7c, 0x85, 0xf0, 0x1d, 0xd1, 0x8e, 0x17, 0x36, 0x27, 0xdb, 0x91, 0xc6, 0xef, 0xfd, 0x0b, 0xf9, 0xc4, 0xaf, 0x11, 0x4f, 0x87, 0x3a, 0xf6, 0x95, 0x1e, 0xf8, 0x8a, 0x3a, 0xa2, 0x9d, 0x5d, 0x65, 0xf0, 0x76, 0xa0, 0xef, 0x0f, 0x78, 0xb7, 0x0f, 0x8d, 0x4a, 0xba, 0xf8, 0x9c, 0x1b, 0xb1, 0x2a, 0xe0, 0x1c, 0x8f, 0x6d, 0x74, 0x80, 0xb1, 0xe6, 0x63, 0xf5, 0x13, 0xa2, 0x69, 0x8c, 0x65, 0x16, 0xfb, 0xa1, 0x6d, 0x28, 0x23, 0x31, 0x9f, 0x72, 0xf5, 0x13, 0xfc, 0xd5, 0xab, 0x63, 0x5a, 0x6e, 0x26, 0xa7, 0x99, 0x64, 0x0c, 0xda, 0x46, 0x28, 0xe9, 0xc7, 0xce, 0xd1, 0x1c, 0x06, 0x62, 0x31, 0x4c, 0xf6, 0x14, 0xca, 0xdd, 0x42, 0x90, 0x1a, 0x90, 0x32, 0x5e, 0x8c, 0xb5, 0xe4, 0xb0, 0x55, 0x94, 0xd1, 0x10, 0x63, 0x4b, 0x49, 0xb7, 0xae, 0x77, 0x78, 0xa0, 0x31, 0xc6, 0xbb, 0xf3, 0xb1, 0xc2, 0x56, 0x38, 0xf2, 0xc0, 0x57, 0xdc, 0xea, 0x85, 0xaf, 0xb8, 0x92, 0xf9, 0x22, 0x94, 0x9f, 0xd0, 0x28, 0x1f, 0xe7, 0x4b, 0xeb, 0x0e, 0xf2, 0xc8, 0xe6, 0x96, 0x7d, 0xd6, 0x0e, 0x30, 0x87, 0xf5, 0x29, 0x33, 0x9f, 0xa6, 0xc6, 0x58, 0x62, 0xbe, 0xff, 0x43, 0xad, 0x1e, 0xa3, 0xbc, 0x56, 0x35, 0x3e, 0x26, 0x29, 0xea, 0x69, 0xd5, 0x6c, 0x87, 0x2d, 0xb3, 0x67, 0xaa, 0xa3, 0xc7, 0xe6, 0xe9, 0xd6, 0xd0, 0x69, 0xa0, 0x36, 0x17, 0x69, 0x9c, 0x51, 0x50, 0x72, 0xcd, 0x76, 0x58, 0x0a, 0xba, 0x25, 0x26, 0xa3, 0x1d, 0xf5, 0x3a, 0x29, 0xa4, 0x0b, 0xf4, 0x05, 0x62, 0x75, 0x03, 0x2f, 0xc5, 0x3a, 0x8f, 0xf9, 0xfa, 0x42, 0x2b, 0x93, 0xfc, 0x4c, 0xf6, 0xbc, 0xbd, 0x8b, 0x76, 0xf8, 0xf9, 0x77, 0x9c, 0x7f, 0xbf, 0x20, 0xc6, 0x9c, 0x6b, 0xd1, 0xa3, 0x7b, 0x36, 0xbc, 0xa1, 0xf8, 0xcc, 0x85, 0x9c, 0xc3, 0x5c, 0x63, 0x21, 0xe7, 0x30, 0xdb, 0x5e, 0x2f, 0x1b, 0xf7, 0x0d, 0xd8, 0xe1, 0xa0, 0xb0, 0x08, 0xf5, 0x29, 0x96, 0x62, 0x66, 0x8a, 0xa5, 0x68, 0xd0, 0x2c, 0xc5, 0x09, 0xd3, 0x63, 0x5e, 0x08, 0x0c, 0x04, 0x1e, 0xa8, 0x7b, 0xf0, 0xa5, 0x07, 0x3a, 0x5f, 0x54, 0x74, 0xbc, 0x6e, 0xf5, 0xe3, 0xfc, 0xfc, 0x64, 0xad, 0x9c, 0xba, 0x64, 0x7d, 0xc6, 0x02, 0x62, 0x14, 0x67, 0x16, 0xd5, 0xa6, 0x26, 0x0a, 0x25, 0x92, 0x8c, 0x79, 0x2b, 0x53, 0x50, 0xe3, 0xd1, 0x99, 0x01, 0x96, 0x2e, 0xb1, 0x88, 0x9a, 0x04, 0x8d, 0x42, 0x63, 0x55, 0x4c, 0x81, 0xde, 0x3a, 0x5a, 0xd7, 0xfd, 0x3e, 0x4a, 0xd6, 0x99, 0xea, 0x79, 0x2d, 0x4f, 0xd4, 0x43, 0x4a, 0x65, 0xdb, 0x4c, 0x1e, 0x5d, 0x34, 0xf1, 0x39, 0x73, 0x67, 0x45, 0x7b, 0x63, 0x2b, 0x57, 0xab, 0x67, 0xb9, 0x3c, 0x1d, 0x52, 0xd7, 0x87, 0xd6, 0xf8, 0x69, 0x35, 0x00, 0x6f, 0x15, 0x53, 0x99, 0x98, 0xa0, 0x14, 0xe4, 0x1a, 0x2c, 0xb3, 0x42, 0xc3, 0x5d, 0xa9, 0x56, 0x62, 0x31, 0xeb, 0xdf, 0xfa, 0xdf, 0xf1, 0x29, 0xd8, 0xac, 0x83, 0x65, 0xb2, 0x6d, 0xba, 0x86, 0xfd, 0x0d, 0xda, 0x18, 0xc5, 0x84, 0xb0, 0xba, 0x75, 0x0d, 0x5a, 0x24, 0x0f, 0x2b, 0x3d, 0x04, 0xd9, 0xf6, 0xde, 0xce, 0xed, 0x4a, 0xc4, 0x6c, 0x89, 0x43, 0xae, 0xaa, 0x41, 0xa3, 0xe6, 0x7f, 0x62, 0xf8, 0x01, 0xb4, 0x8d, 0x6f, 0xca, 0xd3, 0x8b, 0x19, 0x0f, 0xcc, 0xf1, 0xa6, 0x3c, 0x91, 0x63, 0x3f, 0xfb, 0x1b, 0x7e, 0xf7, 0xf0, 0x40, 0x6c, 0xe0, 0xa6, 0xbc, 0x09, 0x08, 0xed, 0x5f, 0x68, 0x65, 0xf2, 0xa7, 0x6f, 0xfa, 0xd7, 0xe3, 0xf7, 0x79, 0xb9, 0x82, 0xf6, 0xeb, 0xe2, 0x77, 0x92, 0xa6, 0xce, 0x32, 0xe5, 0xd3, 0x29, 0x4f, 0x5e, 0xac, 0x8f, 0x5d, 0x50, 0x8e, 0x3e, 0x5f, 0x3d, 0xc2, 0x2b, 0x45, 0xa4, 0xe1, 0x01, 0xf7, 0x9f, 0x8c, 0x3a, 0xd4, 0xf3, 0x57, 0x51, 0xff, 0x61, 0xed, 0x00, 0x7b, 0x43, 0x4a, 0x3f, 0xca, 0x56, 0x47, 0xf0, 0x57, 0x49, 0xd0, 0x29, 0xf7, 0x26, 0x7c, 0x2b, 0x3c, 0xc6, 0x49, 0x27, 0x48, 0x9c, 0x49, 0xd0, 0xea, 0x32, 0xe4, 0xdf, 0x44, 0xad, 0xb6, 0x24, 0xb5, 0x6a, 0x2b, 0x80, 0x3b, 0xd4, 0x33, 0x8e, 0x0e, 0xf5, 0x9c, 0xd6, 0x06, 0x27, 0x53, 0x56, 0xb0, 0x59, 0xe2, 0x65, 0x55, 0x7f, 0xac, 0x9e, 0xa2, 0x3d, 0x40, 0xc9, 0x93, 0xae, 0xb0, 0xdc, 0xeb, 0xb8, 0x74, 0x8b, 0xfa, 0x19, 0x9f, 0xee, 0x47, 0xf0, 0x18, 0xd5, 0x3f, 0x7d, 0xa5, 0x03, 0xae, 0x56, 0xcf, 0xca, 0x3a, 0xaf, 0xcb, 0x3b, 0x84, 0x3d, 0xe8, 0x53, 0x59, 0x77, 0x24, 0x86, 0xef, 0xf3, 0x5f, 0xf1, 0xa8, 0x7f, 0xe5, 0x73, 0x92, 0x2c, 0xc9, 0x3d, 0x31, 0x17, 0xd6, 0xf1, 0x29, 0x74, 0x71, 0xa8, 0xcd, 0x09, 0xa8, 0x69, 0x16, 0xc0, 0xc6, 0x6b, 0xcf, 0x0e, 0x13, 0x54, 0x62, 0x3d, 0x08, 0x94, 0x91, 0x65, 0x89, 0xba, 0xbc, 0x6d, 0x9e, 0x38, 0x77, 0x8b, 0xf8, 0xc1, 0x55, 0x1a, 0x3f, 0x40, 0x5b, 0xe1, 0x7a, 0xe4, 0x07, 0x30, 0xe5, 0x7a, 0xbe, 0x7d, 0xcd, 0xb3, 0x01, 0xdf, 0x66, 0x28, 0x48, 0xf0, 0x85, 0xab, 0xc4, 0x0e, 0x26, 0x1a, 0x0b, 0x1c, 0x39, 0xac, 0xf1, 0x85, 0xb9, 0x4c, 0xf1, 0x99, 0x91, 0x0c, 0xba, 0xc3, 0x06, 0x39, 0x6b, 0xce, 0x8b, 0xb1, 0x60, 0x91, 0x36, 0x5e, 0x92, 0xec, 0x1d, 0x13, 0xa9, 0x77, 0x70, 0x9f, 0x98, 0xc4, 0x6e, 0xd3, 0xef, 0x1e, 0x88, 0xf5, 0x16, 0xc4, 0x52, 0x56, 0xdd, 0x82, 0x98, 0x71, 0xbd, 0x65, 0x50, 0x1b, 0xe5, 0xcc, 0xc1, 0x7a, 0xec, 0xc3, 0xe7, 0x4d, 0x7c, 0x5e, 0xa6, 0x93, 0x1b, 0x9c, 0xb4, 0x7a, 0xb1, 0x55, 0x8c, 0x96, 0xdf, 0xb0, 0x04, 0xa5, 0xb6, 0x9d, 0x77, 0x55, 0x16, 0x39, 0x01, 0xb5, 0xc4, 0xe1, 0xa9, 0xc7, 0x69, 0xad, 0x21, 0x8f, 0xe7, 0xd3, 0x59, 0x40, 0xfc, 0xbd, 0x28, 0xa9, 0x79, 0xf2, 0xf9, 0x41, 0xb4, 0x2e, 0x1f, 0xb5, 0xc2, 0x5d, 0xa1, 0xc9, 0x72, 0xa1, 0x54, 0xc4, 0xfb, 0xb0, 0x2d, 0x08, 0xb1, 0x0e, 0xdf, 0x46, 0x7c, 0x67, 0x20, 0xe4, 0x51, 0x0a, 0xa9, 0x8f, 0xd1, 0x2a, 0x95, 0x96, 0xf6, 0x7d, 0xb1, 0x59, 0xdf, 0x30, 0x5a, 0xe4, 0xab, 0xeb, 0x62, 0x6e, 0x3e, 0xef, 0x86, 0xef, 0xf2, 0x33, 0x21, 0x3f, 0x9f, 0x02, 0x76, 0xf0, 0x38, 0x81, 0x2d, 0xb8, 0x5b, 0x94, 0xd9, 0xda, 0xd7, 0x13, 0x8a, 0x43, 0xfb, 0xda, 0xae, 0x58, 0x51, 0x22, 0x6e, 0x47, 0x69, 0xd1, 0xea, 0x9c, 0x87, 0x12, 0xa9, 0x86, 0xd6, 0x93, 0x73, 0xc8, 0x07, 0x8a, 0x51, 0xfb, 0xfa, 0x2b, 0xd6, 0x84, 0x57, 0x17, 0x20, 0x0e, 0xb4, 0xb3, 0x90, 0x0a, 0xee, 0xa8, 0xe3, 0x39, 0x98, 0xb1, 0xa1, 0xf8, 0xa9, 0x44, 0x76, 0xe2, 0x77, 0xab, 0xc0, 0xc5, 0xbd, 0x78, 0x67, 0xf2, 0x74, 0x34, 0xec, 0x67, 0x0f, 0x87, 0x20, 0xe3, 0x7d, 0xb4, 0xee, 0xf4, 0xb4, 0xab, 0x19, 0xfb, 0x8c, 0x25, 0xb2, 0xe0, 0xc5, 0xfe, 0x16, 0xc8, 0xd8, 0x5b, 0xd0, 0x0e, 0xc6, 0x5f, 0xff, 0xe2, 0xd7, 0xbf, 0x08, 0x0c, 0xa0, 0x0c, 0x6a, 0x95, 0xf5, 0xa9, 0x27, 0xfe, 0x79, 0x5b, 0xbf, 0xde, 0x8e, 0xfd, 0x79, 0xfb, 0x34, 0xda, 0x7b, 0xf7, 0x26, 0xff, 0xee, 0xc3, 0xdf, 0x62, 0x78, 0x19, 0x25, 0xd4, 0x2e, 0x7c, 0xf6, 0xb2, 0xb6, 0xb4, 0x87, 0x7f, 0x77, 0xf3, 0xef, 0x6b, 0xa8, 0xf5, 0xec, 0x47, 0xcb, 0x68, 0x55, 0xcd, 0x09, 0x69, 0x36, 0x41, 0xfe, 0xeb, 0x1b, 0x9d, 0x66, 0x5e, 0xd3, 0x57, 0xe7, 0xdf, 0xa4, 0xad, 0xf1, 0xab, 0x66, 0xff, 0x99, 0xce, 0x09, 0xfe, 0x4d, 0x18, 0xb3, 0x11, 0x9f, 0xc5, 0xe1, 0x0c, 0xc4, 0xf8, 0x62, 0x4f, 0x21, 0x1c, 0x9e, 0xd6, 0x43, 0xcc, 0x4a, 0x3a, 0xaa, 0xbd, 0x8f, 0xa1, 0x65, 0xe6, 0xe5, 0xd9, 0x3c, 0x3e, 0x03, 0x23, 0xc3, 0x42, 0xf0, 0xaf, 0x86, 0xc9, 0x16, 0xf3, 0x7d, 0x18, 0xfc, 0xd7, 0xa5, 0xfa, 0xd5, 0x86, 0xaa, 0x4c, 0xc7, 0x55, 0x86, 0xb5, 0xaa, 0x3a, 0xb6, 0x2b, 0x30, 0x60, 0xad, 0x92, 0x33, 0x53, 0x76, 0x5f, 0xfd, 0xa5, 0x11, 0x3c, 0xf6, 0xb1, 0x5d, 0xe2, 0x34, 0xa2, 0xb1, 0x5d, 0xd6, 0x8a, 0x47, 0xf7, 0x28, 0xf9, 0x96, 0x2f, 0x23, 0x77, 0x94, 0x43, 0xd9, 0xf8, 0x6b, 0x0d, 0x66, 0xbb, 0xff, 0x32, 0x00, 0xd7, 0xf4, 0x80, 0x3c, 0xb6, 0x4b, 0x31, 0x04, 0x06, 0x76, 0x0c, 0x74, 0x1e, 0x91, 0x33, 0xeb, 0x63, 0xee, 0x8f, 0xd1, 0x6d, 0xcb, 0x2e, 0x36, 0x02, 0xef, 0x76, 0xa1, 0x3d, 0x2f, 0xd6, 0xa0, 0x89, 0xce, 0x3f, 0x10, 0x71, 0xc3, 0xc0, 0x31, 0xe6, 0x62, 0xdb, 0xab, 0x48, 0x07, 0x07, 0x94, 0x53, 0xe5, 0x18, 0x96, 0x3d, 0x7d, 0x6c, 0x17, 0xc6, 0x9c, 0x11, 0xb4, 0x5a, 0x51, 0x1f, 0xdd, 0xd1, 0xdb, 0x95, 0x53, 0xfe, 0x97, 0x3c, 0x30, 0x4f, 0x87, 0x19, 0x63, 0xbb, 0x82, 0x46, 0xcb, 0x28, 0xcc, 0x90, 0x25, 0x85, 0xde, 0xb2, 0xa2, 0xb3, 0xbc, 0x1a, 0x88, 0xed, 0x88, 0x75, 0xee, 0xb1, 0xec, 0xc4, 0x3e, 0x85, 0x92, 0x3d, 0x92, 0x19, 0x05, 0xed, 0x34, 0xa6, 0xfc, 0x02, 0x3e, 0x67, 0x53, 0x87, 0x52, 0xae, 0xf7, 0x59, 0xc8, 0xa7, 0x92, 0x0a, 0x06, 0xd8, 0x06, 0x8d, 0x9f, 0x18, 0xa0, 0xf7, 0x3c, 0x8b, 0x96, 0x59, 0x19, 0x62, 0xf1, 0x6b, 0xd1, 0x9d, 0xfb, 0xbf, 0x5b, 0xa0, 0x9d, 0xce, 0x35, 0xca, 0x67, 0x75, 0x48, 0x03, 0xbe, 0xe7, 0xd5, 0x9d, 0x44, 0xcd, 0xa8, 0x85, 0xee, 0xaa, 0xc0, 0x96, 0x42, 0xf7, 0xd0, 0xa2, 0x57, 0xbd, 0xbd, 0x15, 0xee, 0xaf, 0xbb, 0x61, 0x2f, 0xba, 0x76, 0x2f, 0xe2, 0x59, 0x16, 0x0c, 0xdf, 0xe3, 0x73, 0x87, 0xa6, 0xf8, 0x5c, 0xbc, 0x3a, 0x71, 0x94, 0xda, 0xe5, 0xa0, 0xac, 0xed, 0x53, 0xe6, 0x39, 0xa4, 0x55, 0xc0, 0x77, 0x32, 0x3f, 0xaf, 0xee, 0xd1, 0xf2, 0xdb, 0x8d, 0xf9, 0xed, 0x46, 0xf7, 0x9b, 0x9a, 0xfb, 0x35, 0x74, 0xbf, 0x86, 0xee, 0x83, 0x8b, 0xe2, 0x2b, 0x16, 0xf7, 0x57, 0x20, 0x05, 0xa0, 0xcf, 0xe1, 0xb8, 0x8f, 0xb4, 0xaa, 0x02, 0xe9, 0x41, 0xee, 0x50, 0x8f, 0x70, 0x1b, 0xda, 0x64, 0x0b, 0xb6, 0xf5, 0xbe, 0xce, 0x7c, 0x79, 0xfe, 0x54, 0xea, 0xaf, 0x7c, 0x17, 0xcd, 0xc1, 0x9a, 0xf4, 0x52, 0xe5, 0x99, 0xea, 0x87, 0x21, 0xda, 0x55, 0x91, 0xd8, 0xa1, 0x87, 0x3e, 0xc7, 0xd9, 0x67, 0x42, 0xdc, 0x07, 0xcb, 0xd8, 0x97, 0x28, 0xa3, 0x11, 0xcb, 0x68, 0x44, 0x9f, 0xfd, 0x09, 0x9f, 0xc5, 0xe8, 0xb3, 0x18, 0x4b, 0x3d, 0xc9, 0xa5, 0x9a, 0xb9, 0xd4, 0xc5, 0xed, 0xb4, 0xba, 0x68, 0x71, 0xe1, 0x4c, 0xf5, 0x4c, 0xa8, 0xd4, 0x99, 0x19, 0xc7, 0x28, 0xf6, 0x85, 0x58, 0x73, 0x12, 0x03, 0x1d, 0xe3, 0x30, 0x90, 0xe5, 0xcc, 0x44, 0x5e, 0x72, 0x38, 0x01, 0x09, 0xf2, 0x6d, 0x71, 0x4a, 0xc5, 0xb4, 0x3a, 0xe9, 0x28, 0xba, 0xce, 0x27, 0x5c, 0xc7, 0xe2, 0xe7, 0xa4, 0x8d, 0x3e, 0xa3, 0xcc, 0x29, 0x44, 0x9e, 0xe6, 0xa8, 0x24, 0x2b, 0xdb, 0x0a, 0xb4, 0x62, 0xfa, 0xe0, 0xc3, 0x05, 0xfa, 0x55, 0x99, 0x55, 0x7a, 0xf2, 0x1b, 0x73, 0xc8, 0xf3, 0x1b, 0xd6, 0x4e, 0x35, 0x68, 0xb5, 0xff, 0x6e, 0x6a, 0x89, 0x1e, 0x7d, 0x24, 0xd3, 0xa6, 0xe5, 0xa3, 0xe6, 0xfa, 0xfa, 0x83, 0x93, 0x15, 0x6b, 0x02, 0xb6, 0x5d, 0xa9, 0x31, 0x85, 0x75, 0x31, 0x32, 0xda, 0x38, 0x18, 0x5f, 0x13, 0x3d, 0xf6, 0x78, 0x62, 0xef, 0x0a, 0xaf, 0x67, 0xa1, 0x3d, 0x1b, 0x34, 0xc7, 0x97, 0x31, 0x1c, 0x35, 0x6c, 0x7b, 0xa0, 0xc5, 0xff, 0xee, 0x1b, 0xc5, 0xdf, 0x78, 0xdc, 0xe0, 0xff, 0x0c, 0x7b, 0x75, 0x16, 0x72, 0xa6, 0xc9, 0x68, 0x91, 0x17, 0x60, 0xaf, 0x2e, 0xb9, 0x09, 0xe9, 0x42, 0x29, 0x9a, 0xea, 0x96, 0x1a, 0x15, 0x3b, 0xfe, 0x2e, 0x56, 0xac, 0x68, 0x43, 0xec, 0x57, 0xf2, 0xf1, 0x7b, 0x95, 0x92, 0xeb, 0x94, 0xbc, 0xad, 0xd2, 0x6c, 0xc5, 0xc0, 0xef, 0xc4, 0x4a, 0x6a, 0xb1, 0x8f, 0xc5, 0xa9, 0xa3, 0xd3, 0x49, 0xe9, 0xdc, 0xd9, 0xdf, 0x38, 0xa2, 0x5f, 0xdd, 0xd6, 0x8b, 0x74, 0xeb, 0xe9, 0xa0, 0x53, 0x5b, 0xc8, 0xa7, 0x36, 0xa7, 0x0c, 0xae, 0x65, 0xbf, 0xa2, 0x8e, 0x95, 0xec, 0xd3, 0x87, 0x3e, 0x13, 0xd9, 0x27, 0xbf, 0xa3, 0x90, 0x7d, 0xc6, 0xd0, 0x67, 0x02, 0xfb, 0x88, 0x34, 0xd5, 0xdb, 0x7a, 0x31, 0xfd, 0x18, 0x7d, 0x1f, 0xdc, 0x97, 0x43, 0xe7, 0x6a, 0xc5, 0x73, 0x9b, 0x1d, 0xb5, 0x50, 0x3c, 0xe9, 0x68, 0x47, 0x16, 0xbb, 0x1b, 0x30, 0xf4, 0x6a, 0xe4, 0xd2, 0x27, 0xd9, 0xd5, 0x1d, 0xbd, 0x86, 0x43, 0x77, 0xb3, 0xeb, 0x11, 0x0c, 0xcb, 0xc6, 0xb0, 0x7d, 0xec, 0xd2, 0x47, 0xf3, 0x38, 0x6c, 0x73, 0xc7, 0x1c, 0x76, 0x7f, 0x07, 0x43, 0xaf, 0x63, 0x9f, 0x4d, 0xec, 0xfe, 0x27, 0xd4, 0x8a, 0x40, 0x7a, 0x90, 0xbf, 0xbf, 0x89, 0x61, 0xb9, 0x1c, 0xb6, 0x9a, 0xdd, 0xd7, 0xa0, 0xfb, 0x4b, 0x98, 0xd3, 0x5a, 0x76, 0x7d, 0x35, 0x3a, 0x99, 0xc3, 0x6e, 0x67, 0x97, 0x95, 0xd3, 0x05, 0xf8, 0xfb, 0x07, 0x18, 0xef, 0x2b, 0x1c, 0xe6, 0x61, 0x77, 0x2b, 0xba, 0xf3, 0x15, 0x3f, 0xd7, 0xe3, 0xaf, 0xe6, 0x5e, 0xed, 0xdc, 0xac, 0x82, 0x4e, 0x80, 0x75, 0xec, 0xf7, 0xe7, 0xe8, 0xad, 0x1c, 0x3b, 0xa7, 0xa3, 0x84, 0xe3, 0xbf, 0x86, 0xf1, 0xed, 0xec, 0xa3, 0xe3, 0xf0, 0x53, 0xe8, 0x0e, 0x90, 0x1b, 0xce, 0x72, 0xf8, 0x6a, 0x74, 0x5f, 0xbf, 0xad, 0x17, 0xf5, 0xa5, 0xc3, 0x08, 0xcd, 0xfb, 0x1c, 0x67, 0x3f, 0xe7, 0x7b, 0x92, 0x34, 0xb2, 0xce, 0x1c, 0x8e, 0xf5, 0x3c, 0xfb, 0x1c, 0xc5, 0x58, 0x2f, 0x61, 0xac, 0xed, 0x1c, 0xeb, 0x30, 0xfb, 0xd1, 0x39, 0x5b, 0x9b, 0xd9, 0xfd, 0x07, 0x76, 0x9f, 0xc2, 0x38, 0xeb, 0x31, 0xce, 0x46, 0x4e, 0xb7, 0x9d, 0xfc, 0xf4, 0x19, 0x18, 0xa7, 0xbf, 0x73, 0x2e, 0xf9, 0x1c, 0xfa, 0x12, 0xc7, 0xba, 0x10, 0x8a, 0x74, 0x5a, 0x38, 0x95, 0xca, 0xee, 0x33, 0xc1, 0xc5, 0x8a, 0xc2, 0xe1, 0x57, 0x71, 0x0a, 0x08, 0x89, 0xda, 0xff, 0x89, 0x5d, 0xba, 0xe0, 0x5c, 0x45, 0xd4, 0x9e, 0xcb, 0xd4, 0x4f, 0x08, 0x95, 0x88, 0xd4, 0xbf, 0xd9, 0xc7, 0x6e, 0x43, 0x70, 0x8a, 0x62, 0x65, 0xf7, 0x31, 0x76, 0x9b, 0x42, 0x0c, 0xf5, 0xa1, 0xa9, 0xe4, 0x32, 0xea, 0x42, 0x06, 0x76, 0x15, 0xf0, 0x5a, 0x8a, 0x3b, 0x2f, 0xbf, 0x2a, 0x8b, 0x56, 0xe2, 0x78, 0x7e, 0xc0, 0xbb, 0x96, 0xa6, 0xc3, 0xd3, 0x62, 0x74, 0x2e, 0x2f, 0x3e, 0xd3, 0x1f, 0x94, 0xc5, 0x08, 0xa0, 0x6c, 0x75, 0xbb, 0x3f, 0x82, 0xa9, 0x56, 0xa3, 0x51, 0xa2, 0xde, 0x89, 0xdf, 0x56, 0x2b, 0x85, 0x5c, 0xf3, 0xe2, 0x40, 0x97, 0xc7, 0x7d, 0x06, 0x39, 0xbb, 0x05, 0xea, 0x83, 0xa5, 0xa8, 0xb9, 0xd6, 0x91, 0xc6, 0x8a, 0xef, 0x09, 0xa0, 0x0b, 0xda, 0xf1, 0x2d, 0x41, 0x46, 0x50, 0x36, 0xdb, 0xd5, 0x97, 0x41, 0x1f, 0xcc, 0xc3, 0xf7, 0x69, 0xc8, 0x0c, 0xe6, 0x88, 0xb1, 0x64, 0x5e, 0xc1, 0x14, 0x0b, 0x4b, 0x62, 0x45, 0x13, 0x3d, 0x62, 0x24, 0xef, 0xe6, 0xb9, 0x05, 0xb4, 0x6a, 0xb7, 0x0b, 0x2a, 0x50, 0x5f, 0xf2, 0xda, 0x9c, 0xd0, 0xc0, 0xb3, 0x77, 0x2e, 0x28, 0xc5, 0x54, 0xb2, 0xcd, 0x85, 0xb2, 0x75, 0xaa, 0xb6, 0x4b, 0x4a, 0x8f, 0xdf, 0x56, 0xb2, 0xa5, 0x0a, 0x27, 0x1e, 0xda, 0x62, 0x04, 0x5a, 0x25, 0x5b, 0x39, 0xa2, 0xe6, 0xcc, 0x3f, 0x0d, 0xc5, 0x2b, 0x4b, 0xf9, 0xf4, 0x81, 0xe1, 0x69, 0xdb, 0xb1, 0x5d, 0x3e, 0x44, 0x58, 0x8b, 0x1b, 0x75, 0xe5, 0x67, 0x1a, 0xc1, 0x72, 0xcd, 0x3d, 0xa8, 0x44, 0xe4, 0xe7, 0x78, 0xd7, 0x7a, 0x5f, 0xdb, 0x79, 0x7f, 0xd0, 0x85, 0xae, 0xe2, 0x46, 0x29, 0xdf, 0x81, 0x7a, 0x96, 0xf0, 0x29, 0xa2, 0x5b, 0xa3, 0xea, 0xfb, 0x14, 0x6d, 0x25, 0xfc, 0x8b, 0x3f, 0x82, 0x86, 0x2e, 0x3d, 0xf6, 0xcb, 0x06, 0xa7, 0xe4, 0xa4, 0xdf, 0x89, 0x68, 0x2d, 0xbc, 0xa8, 0xed, 0x3f, 0x03, 0x78, 0x1c, 0x25, 0x5f, 0x79, 0x30, 0x62, 0x2e, 0x86, 0xca, 0x46, 0x29, 0xb8, 0x2a, 0x61, 0xd9, 0xd0, 0x28, 0x4f, 0xb8, 0xd1, 0xe8, 0xf4, 0x42, 0x59, 0xca, 0xca, 0x34, 0x3d, 0xb7, 0x83, 0x17, 0x43, 0x2c, 0x18, 0x52, 0x9b, 0x76, 0x7b, 0x17, 0x85, 0xd2, 0x7a, 0xe5, 0x52, 0x0c, 0xcd, 0xc3, 0x34, 0x4e, 0xa8, 0x10, 0x3b, 0x9c, 0x35, 0x0d, 0xb8, 0x10, 0xa5, 0x37, 0xaf, 0x0a, 0x28, 0x74, 0x42, 0xb1, 0x62, 0xc1, 0x72, 0xeb, 0x83, 0x46, 0x2c, 0xb7, 0xa1, 0x51, 0x0a, 0x65, 0x1d, 0xea, 0x95, 0x33, 0x17, 0xc5, 0xb6, 0xfe, 0x08, 0x4a, 0x5b, 0x40, 0xcd, 0xe1, 0xb1, 0xe3, 0x51, 0x31, 0xf2, 0x88, 0x38, 0xb5, 0xf3, 0x0d, 0x38, 0x5d, 0x92, 0xd1, 0xde, 0x25, 0x99, 0x0b, 0x9d, 0x92, 0xa5, 0xc0, 0x29, 0xe5, 0xd0, 0x9e, 0xb8, 0x9e, 0x99, 0x87, 0x07, 0xab, 0x47, 0xc6, 0x1e, 0x2c, 0x32, 0xdc, 0x76, 0x7f, 0xe5, 0xc8, 0x85, 0xc3, 0x64, 0xc9, 0xc3, 0xaf, 0x9d, 0x06, 0xe2, 0x8e, 0x87, 0xe6, 0x3a, 0xcd, 0xa8, 0x9d, 0x6e, 0xd0, 0x4a, 0x9f, 0x13, 0xa6, 0xed, 0x19, 0xce, 0x6f, 0xc7, 0x1c, 0xe5, 0x5b, 0xd7, 0xb4, 0xeb, 0x1c, 0x2e, 0x3e, 0x31, 0x2b, 0x5b, 0x1b, 0x7f, 0x42, 0xae, 0x4e, 0xb7, 0x13, 0x52, 0x89, 0xfb, 0x1f, 0x41, 0x35, 0x0b, 0xe0, 0xa6, 0x90, 0xe9, 0xd0, 0x23, 0x9b, 0x1e, 0x09, 0xf4, 0x2b, 0x5b, 0xc4, 0x8e, 0x41, 0x86, 0xe7, 0x20, 0xc3, 0x23, 0x13, 0x3c, 0x45, 0x4e, 0x29, 0x0f, 0x61, 0xc9, 0x47, 0x58, 0x64, 0x82, 0xa5, 0xf2, 0x34, 0xdc, 0x34, 0x7f, 0xe4, 0xc2, 0x58, 0xcd, 0x09, 0xc8, 0x74, 0x5c, 0xcd, 0x3b, 0x16, 0x8c, 0xd5, 0x23, 0x17, 0xbc, 0xf3, 0x4e, 0xc0, 0x44, 0x0d, 0x2e, 0x13, 0xc3, 0xe5, 0x76, 0x3a, 0x25, 0x1b, 0x3d, 0x3c, 0x17, 0x46, 0xb0, 0xad, 0xe2, 0x12, 0xbf, 0x1e, 0xb2, 0xa6, 0xe0, 0xd9, 0x40, 0x3b, 0x60, 0xc2, 0x23, 0x43, 0x3f, 0x92, 0xf2, 0xe4, 0x6a, 0x99, 0x57, 0xf0, 0x59, 0xe7, 0x2b, 0x3a, 0x6b, 0x2d, 0xc6, 0x95, 0x30, 0x6e, 0x85, 0xe5, 0x1a, 0x92, 0x6d, 0xf5, 0x03, 0x2f, 0x0d, 0xb4, 0xeb, 0xe4, 0x72, 0x71, 0x1a, 0x8f, 0x56, 0x1b, 0x23, 0xca, 0xa8, 0x36, 0x90, 0xb8, 0xed, 0xf8, 0x56, 0x3b, 0x6c, 0x15, 0xc7, 0xfe, 0x01, 0x4c, 0xa9, 0xc3, 0x94, 0xe6, 0x43, 0x03, 0x9b, 0x06, 0xb0, 0x5e, 0xa0, 0x2e, 0x4b, 0xa9, 0xd9, 0x11, 0xb6, 0x3d, 0x0e, 0xb3, 0x85, 0x23, 0x6e, 0xc1, 0xb3, 0xa1, 0x9c, 0x39, 0xcc, 0x10, 0x57, 0xa0, 0x8d, 0x69, 0x16, 0x76, 0xe6, 0x85, 0x29, 0x1a, 0xcc, 0x8b, 0x3d, 0xeb, 0x49, 0x2e, 0xd3, 0x1d, 0xd0, 0x41, 0x7d, 0x44, 0x67, 0xeb, 0xc5, 0x2f, 0x23, 0x7e, 0x19, 0xd7, 0xac, 0xaf, 0x18, 0x5a, 0x66, 0x80, 0x65, 0x3a, 0x00, 0x1d, 0xdd, 0x14, 0x1d, 0xc2, 0x6f, 0xa3, 0xf8, 0x06, 0xfa, 0x96, 0xf1, 0xbb, 0x62, 0x28, 0x88, 0x5f, 0xa8, 0xd3, 0xe9, 0xd0, 0x1a, 0xcd, 0x38, 0x03, 0x64, 0xf9, 0x3f, 0x05, 0x69, 0xa3, 0xbd, 0x1d, 0xea, 0x41, 0x61, 0x79, 0x7c, 0x76, 0x52, 0xb4, 0xbe, 0xbe, 0x02, 0xd5, 0xe6, 0xa2, 0x28, 0xe1, 0xb9, 0xa8, 0xb0, 0x8c, 0x64, 0x35, 0xed, 0xdc, 0x9a, 0xb4, 0xa3, 0xe0, 0x6a, 0x1a, 0xf7, 0xd3, 0xb9, 0x68, 0x2d, 0x8f, 0xe9, 0x18, 0xef, 0x43, 0xb2, 0xa0, 0x65, 0x4c, 0x63, 0xf6, 0x5d, 0x19, 0x5e, 0x86, 0xbf, 0x5a, 0xee, 0xe0, 0x71, 0xfe, 0x99, 0x34, 0x67, 0x30, 0xba, 0x58, 0xd4, 0x20, 0x98, 0xe5, 0xeb, 0x5b, 0x94, 0x5c, 0x5d, 0xf4, 0x52, 0x69, 0x0f, 0x64, 0x3a, 0x4d, 0xb4, 0x16, 0xb8, 0x71, 0xd0, 0xcc, 0xf7, 0x6c, 0x2e, 0x01, 0xe9, 0x7b, 0xbe, 0x3e, 0xe4, 0x8c, 0x3b, 0xc3, 0x99, 0x5b, 0x1f, 0xa6, 0x55, 0xfd, 0x44, 0x43, 0x19, 0x95, 0x08, 0xbd, 0xd7, 0x79, 0x15, 0xad, 0xf5, 0x2d, 0x02, 0x3e, 0xa7, 0x76, 0x95, 0x38, 0x3f, 0xcc, 0x21, 0x5c, 0xcb, 0xf8, 0x94, 0xa9, 0x0c, 0x31, 0xe6, 0x94, 0xd5, 0x9f, 0x18, 0x6b, 0x0d, 0x90, 0x8e, 0xeb, 0x34, 0xe0, 0x93, 0xa1, 0xad, 0xcf, 0xb0, 0x28, 0x7e, 0xc4, 0x15, 0x4b, 0xfd, 0x43, 0xb5, 0x8a, 0x1f, 0x31, 0xa4, 0x0f, 0x09, 0xd7, 0x2d, 0x8a, 0x4b, 0x94, 0xa0, 0xe5, 0x99, 0x7b, 0xe9, 0x3c, 0x61, 0x2c, 0x2d, 0x3f, 0xb3, 0x0f, 0x29, 0x3c, 0x64, 0xe6, 0x1c, 0x7c, 0xda, 0xa9, 0x37, 0x88, 0xb3, 0x50, 0x61, 0xbc, 0x5e, 0xee, 0xd3, 0x7a, 0xd7, 0xdb, 0x43, 0x16, 0xfb, 0x67, 0x1f, 0xd3, 0xbe, 0x6f, 0xd6, 0x7a, 0xc7, 0xc5, 0xe7, 0x18, 0x6f, 0xa2, 0xc5, 0x9d, 0xa9, 0x82, 0x16, 0x52, 0x2f, 0x42, 0x44, 0x1e, 0x0e, 0x10, 0xbd, 0x1d, 0xe3, 0x55, 0xba, 0xcf, 0xec, 0x81, 0x22, 0x9a, 0xc7, 0xb5, 0xab, 0x80, 0x96, 0x49, 0xa4, 0x15, 0xdc, 0xa7, 0x33, 0x6a, 0xbd, 0xe1, 0x3d, 0xb4, 0xc3, 0xb5, 0x4e, 0xae, 0x26, 0xce, 0xab, 0xa2, 0x9f, 0xbe, 0xee, 0xed, 0xd7, 0xde, 0x7e, 0xd5, 0x63, 0xff, 0xec, 0x54, 0xcd, 0xb9, 0x3c, 0x1d, 0xe3, 0x30, 0xc0, 0x5a, 0xfc, 0xc3, 0x9d, 0x30, 0xc6, 0xbd, 0x2d, 0xa3, 0x22, 0x64, 0xa0, 0x15, 0x3b, 0x63, 0x5e, 0x6d, 0xd4, 0xba, 0x4b, 0x5f, 0x47, 0xb6, 0xba, 0xd3, 0xa9, 0xaf, 0x63, 0xad, 0x06, 0x75, 0x18, 0x7d, 0xa3, 0xec, 0xd4, 0x2f, 0xf6, 0x14, 0x1b, 0xd5, 0xe4, 0xde, 0x59, 0x41, 0xbb, 0xfa, 0x1c, 0x3a, 0x4d, 0x9d, 0x2d, 0x79, 0x27, 0xe4, 0xc5, 0x1f, 0x4c, 0x15, 0x11, 0x67, 0x36, 0xd3, 0x48, 0x16, 0x53, 0x34, 0x8d, 0xff, 0x9c, 0xe3, 0x3a, 0x7d, 0x2b, 0x49, 0xd1, 0x23, 0xb5, 0x1a, 0x45, 0x1b, 0x90, 0x9e, 0x47, 0x31, 0x57, 0x35, 0x3e, 0xfa, 0x35, 0x2e, 0xcd, 0xe2, 0x94, 0x34, 0x79, 0x97, 0x4a, 0x83, 0x76, 0x3b, 0xcd, 0xbd, 0xe6, 0xd3, 0xc9, 0x12, 0x25, 0x3d, 0x70, 0x8d, 0xb6, 0x4e, 0x92, 0x57, 0x16, 0x79, 0x23, 0x76, 0xd2, 0x5f, 0xc5, 0x9a, 0xb2, 0x45, 0x68, 0x67, 0xe9, 0xe3, 0x2b, 0x8c, 0x0e, 0xdd, 0xe1, 0x5d, 0x0e, 0x52, 0xfc, 0xe4, 0x98, 0xe0, 0x1c, 0xcb, 0xb5, 0xbc, 0xd2, 0x69, 0x16, 0xef, 0x04, 0xb4, 0x9b, 0x97, 0x4f, 0x73, 0x42, 0x63, 0x50, 0xb6, 0xcc, 0x80, 0xdb, 0xd0, 0xc7, 0x15, 0x32, 0x13, 0xbf, 0xe6, 0x35, 0xe9, 0x95, 0x41, 0x5a, 0xf5, 0x67, 0x93, 0x1f, 0x44, 0x5c, 0x18, 0x02, 0x0f, 0x2a, 0x4f, 0x32, 0x3e, 0xc4, 0x98, 0x2d, 0xd0, 0xfc, 0x48, 0x01, 0x62, 0x01, 0xad, 0x3b, 0x27, 0x5c, 0xaf, 0xed, 0xae, 0xa0, 0x13, 0x36, 0xe8, 0xcc, 0xaa, 0x42, 0xc2, 0x20, 0xdb, 0x2a, 0x56, 0x6b, 0xb9, 0xec, 0xa1, 0xd1, 0x56, 0x9f, 0x25, 0x68, 0x40, 0x39, 0x89, 0x58, 0x8d, 0xdc, 0x91, 0x8d, 0xd6, 0x48, 0xc3, 0x00, 0x9d, 0xfa, 0xbb, 0xbd, 0xb7, 0xf3, 0x58, 0xed, 0x07, 0xa0, 0x8d, 0x6b, 0x6e, 0x78, 0x23, 0x31, 0xda, 0x78, 0x08, 0xeb, 0xb7, 0xf8, 0xbd, 0x21, 0x39, 0x79, 0x7e, 0x76, 0x2c, 0xe5, 0xfb, 0x61, 0xab, 0xcb, 0xd6, 0x06, 0xa6, 0xe4, 0x79, 0xb3, 0x64, 0x65, 0x97, 0x9d, 0x24, 0x3a, 0x22, 0xfd, 0xb3, 0x38, 0x39, 0xca, 0xbe, 0xab, 0x71, 0x10, 0xa9, 0xde, 0x1c, 0xfa, 0x30, 0xe5, 0x6c, 0xfe, 0x65, 0xd2, 0x58, 0xf9, 0x09, 0x9d, 0x2e, 0x79, 0xba, 0xb8, 0xb6, 0x0f, 0x41, 0x9b, 0x9b, 0x21, 0x4b, 0xe7, 0x9d, 0x17, 0x85, 0x46, 0x3c, 0x96, 0x35, 0xcd, 0x25, 0x7d, 0x12, 0x9a, 0x33, 0x0d, 0xd3, 0xe8, 0x2c, 0xd3, 0x7c, 0x3a, 0x33, 0x9f, 0xdf, 0x35, 0x94, 0x9e, 0x9e, 0x72, 0x4c, 0x81, 0x33, 0xd5, 0xf5, 0x70, 0xfc, 0xe4, 0x72, 0x2d, 0xef, 0x65, 0xd2, 0x27, 0xbc, 0x16, 0x7e, 0x36, 0xc1, 0x69, 0x49, 0xc2, 0xb9, 0xf3, 0xf3, 0xf2, 0x88, 0x34, 0x6b, 0xfa, 0xf9, 0x9c, 0xf4, 0xdc, 0x7c, 0x5b, 0x20, 0x3f, 0x58, 0x48, 0x27, 0x2f, 0x1c, 0x5a, 0x1d, 0x4e, 0xe4, 0xc5, 0xe7, 0x91, 0xe5, 0x87, 0xf8, 0x54, 0xea, 0x43, 0x0f, 0x21, 0x4e, 0x5d, 0x98, 0xf2, 0x09, 0xac, 0xc7, 0x88, 0x48, 0x8d, 0xf2, 0x65, 0xbf, 0x36, 0xde, 0x5f, 0x96, 0xed, 0x84, 0x79, 0x61, 0xd5, 0x49, 0x67, 0x62, 0x15, 0x4a, 0x23, 0xa1, 0xb0, 0xb3, 0x67, 0xec, 0x0d, 0xe9, 0x33, 0xa4, 0x42, 0x3a, 0xc9, 0x9b, 0xbe, 0x3f, 0x81, 0x1c, 0x27, 0xea, 0x1a, 0xd8, 0xc8, 0xe4, 0xfa, 0x0b, 0xe4, 0x63, 0xef, 0xe2, 0x9d, 0x45, 0xec, 0x1e, 0x01, 0x5b, 0xb8, 0x74, 0xdf, 0xe0, 0xb7, 0x62, 0x4e, 0x9a, 0x81, 0xf8, 0x11, 0x38, 0xdc, 0x48, 0x63, 0x08, 0x6b, 0x3e, 0x9d, 0x0b, 0x62, 0x83, 0x90, 0x2c, 0xbb, 0x50, 0xa3, 0xaa, 0x40, 0x8d, 0xaa, 0x24, 0x65, 0x04, 0xd5, 0x83, 0x30, 0x89, 0x38, 0xcf, 0x50, 0x08, 0xcd, 0x03, 0x20, 0xbd, 0x38, 0x2e, 0x7d, 0x9b, 0x80, 0xa8, 0x29, 0xd7, 0x71, 0x7d, 0x78, 0x5a, 0x5a, 0x1d, 0x2d, 0xec, 0xfb, 0xfd, 0x71, 0xbe, 0x79, 0xec, 0xfb, 0xd2, 0x38, 0xdf, 0x9c, 0x90, 0x85, 0xf1, 0xf1, 0x33, 0xc6, 0xc6, 0x8b, 0x88, 0x8d, 0x28, 0xc2, 0x90, 0xb3, 0x53, 0x58, 0x6b, 0xcb, 0xa4, 0x28, 0x9f, 0x43, 0x83, 0x1a, 0xfc, 0xf8, 0x11, 0x01, 0xcf, 0x32, 0xa9, 0x07, 0x9f, 0x7b, 0xbe, 0xde, 0x03, 0x4e, 0x29, 0x86, 0xbf, 0x36, 0xa9, 0x8f, 0x6e, 0x8a, 0x95, 0xfa, 0x79, 0x55, 0xe3, 0x31, 0x69, 0x6d, 0xdd, 0x09, 0xe9, 0x41, 0x4f, 0xa1, 0xf4, 0x90, 0x67, 0x8b, 0xf4, 0xf0, 0xd7, 0x7b, 0x7e, 0x6f, 0x91, 0x36, 0xd2, 0xd8, 0x84, 0x44, 0xa3, 0x0d, 0x8f, 0x63, 0xca, 0x27, 0xf1, 0xf9, 0x1e, 0xa7, 0x7e, 0x0a, 0x7f, 0xa7, 0x49, 0x4f, 0xe3, 0xaf, 0x5e, 0xfa, 0x3e, 0xe7, 0xf1, 0x0c, 0xc7, 0xdc, 0xec, 0x3e, 0x21, 0xf5, 0xa0, 0x0d, 0xb9, 0x05, 0x53, 0xbc, 0x80, 0xcf, 0x8b, 0xf8, 0xbc, 0x84, 0xcf, 0x0e, 0x4c, 0xf9, 0x32, 0xbe, 0x87, 0x30, 0xf7, 0xdd, 0x54, 0xda, 0xa1, 0x37, 0xa5, 0xd7, 0x30, 0xee, 0x3a, 0x8c, 0xbb, 0x57, 0x83, 0xef, 0x2d, 0xed, 0xfd, 0x0e, 0xc6, 0x3b, 0x80, 0xcf, 0x21, 0x7c, 0xde, 0xc7, 0x38, 0x1b, 0x31, 0x4e, 0x54, 0xc9, 0x45, 0x6d, 0x68, 0x36, 0xe3, 0xe3, 0x97, 0x58, 0xeb, 0xa7, 0x68, 0xbf, 0x0b, 0xcd, 0x7f, 0x61, 0x9c, 0x66, 0x7c, 0xda, 0xf1, 0x69, 0xd5, 0x28, 0x4a, 0xec, 0x4e, 0x2a, 0x84, 0xbc, 0xb4, 0x99, 0xc0, 0x30, 0xcf, 0x0e, 0xe6, 0xa4, 0xf9, 0x2d, 0xbe, 0xc4, 0x2c, 0xa2, 0xb7, 0x8e, 0xcf, 0xac, 0x46, 0xca, 0x3a, 0x49, 0xfd, 0x18, 0x25, 0x28, 0x8d, 0x0c, 0xe5, 0x10, 0xf7, 0x79, 0xe7, 0x1d, 0xb6, 0x21, 0xd5, 0x6f, 0x3f, 0x8e, 0xbc, 0xa4, 0xd8, 0xd1, 0x2a, 0x66, 0xf4, 0x18, 0xef, 0x93, 0x7d, 0x2f, 0x40, 0x59, 0x88, 0xe8, 0xcb, 0x0e, 0x79, 0x8f, 0xee, 0xb1, 0xfa, 0x1e, 0xdb, 0x8b, 0x7a, 0xad, 0x03, 0x5b, 0x6c, 0x9b, 0xb6, 0xde, 0x24, 0x27, 0x79, 0x7a, 0x54, 0x18, 0x22, 0x80, 0x52, 0xb6, 0xd4, 0xda, 0x21, 0x35, 0x63, 0xbc, 0x0e, 0x29, 0xfa, 0x4f, 0x6f, 0x3a, 0x3a, 0x90, 0xfb, 0xbe, 0xa0, 0xee, 0x9e, 0xe1, 0x92, 0x5a, 0xc5, 0x29, 0x4f, 0xfe, 0x85, 0x00, 0xf1, 0x51, 0x54, 0xec, 0x1d, 0xb4, 0x87, 0xbf, 0x0f, 0xdf, 0x79, 0xa1, 0xd5, 0x3e, 0xac, 0x2b, 0x96, 0xc5, 0x27, 0x49, 0x1f, 0x3a, 0xc0, 0x33, 0x51, 0xbc, 0x27, 0x14, 0xed, 0x0b, 0x6c, 0xfd, 0xa9, 0xcb, 0xa4, 0xa3, 0x30, 0x47, 0xfb, 0x3a, 0x96, 0xbc, 0x27, 0x84, 0x4f, 0xf3, 0x6b, 0x0e, 0x95, 0x69, 0x5a, 0xfe, 0xd5, 0xe2, 0xbc, 0x38, 0xa9, 0x9d, 0xd3, 0x07, 0x69, 0xaf, 0x89, 0xd4, 0x1a, 0x9c, 0x9c, 0x7a, 0xae, 0xf4, 0x05, 0x85, 0xb0, 0x4b, 0x63, 0x7a, 0x52, 0x98, 0x67, 0xed, 0xc3, 0xa8, 0x69, 0x9c, 0x77, 0xa0, 0x45, 0xcd, 0xb6, 0xb2, 0x46, 0xcf, 0xe4, 0xcf, 0xf0, 0x05, 0x90, 0x0a, 0xf3, 0x18, 0x1b, 0x5e, 0xcc, 0xa5, 0x55, 0xd8, 0xf6, 0x74, 0x47, 0x20, 0xe6, 0xdc, 0x1c, 0x34, 0x2a, 0x05, 0x56, 0x17, 0xf1, 0xb7, 0xf4, 0x93, 0xab, 0x13, 0x77, 0x04, 0x1e, 0x25, 0xff, 0x78, 0x99, 0xe9, 0x2d, 0xaa, 0xdd, 0x0f, 0x38, 0xec, 0xce, 0x81, 0xe1, 0xbe, 0xef, 0xeb, 0xa7, 0x1b, 0xef, 0xc3, 0xef, 0x12, 0x7c, 0x6e, 0x81, 0xe1, 0x79, 0xeb, 0xc4, 0xe5, 0x30, 0xdd, 0xad, 0x2d, 0xed, 0xed, 0xda, 0x15, 0x46, 0xdd, 0xe3, 0x2f, 0xf2, 0xba, 0x74, 0xa0, 0x5c, 0x72, 0x53, 0xd1, 0x4d, 0xff, 0xf5, 0x5b, 0xa4, 0xb5, 0x5b, 0x9f, 0xc5, 0xdf, 0x70, 0xf9, 0x26, 0x18, 0x5e, 0xb0, 0x89, 0x66, 0xa7, 0xf0, 0x1b, 0xe5, 0x47, 0xf9, 0x61, 0x18, 0xae, 0xbb, 0x9d, 0xef, 0x0c, 0x1c, 0x2e, 0x7f, 0x17, 0x86, 0x2b, 0xae, 0x86, 0xe1, 0xc0, 0x3d, 0xc2, 0x5d, 0x31, 0x09, 0x9f, 0x72, 0x18, 0x5e, 0x38, 0x19, 0xdd, 0x99, 0xf8, 0x2d, 0xe3, 0x83, 0x75, 0xba, 0x75, 0xaf, 0x16, 0xbe, 0x04, 0x9f, 0x30, 0x0c, 0x37, 0x36, 0x6b, 0xee, 0x2e, 0x7c, 0x1e, 0x83, 0xe1, 0x6f, 0xad, 0xd6, 0xdc, 0x1b, 0xf1, 0xd9, 0x0c, 0xc3, 0xb7, 0x95, 0x69, 0xee, 0x1f, 0xe0, 0xf3, 0x32, 0x0c, 0x7f, 0x3b, 0x5b, 0x73, 0xff, 0x3b, 0x0c, 0x57, 0x2e, 0x87, 0x61, 0x65, 0x8f, 0x80, 0xa7, 0xb2, 0x11, 0x9f, 0x7b, 0x61, 0xb8, 0x69, 0x95, 0x08, 0xaf, 0xfc, 0x08, 0x86, 0xab, 0xb2, 0x60, 0x78, 0xc9, 0x7a, 0xe1, 0xae, 0x8a, 0xe2, 0xf3, 0x0e, 0x0c, 0x37, 0x0f, 0xa0, 0xdb, 0x84, 0xdf, 0xff, 0x03, 0x86, 0xab, 0xb1, 0x4e, 0x21, 0x93, 0x16, 0xae, 0xa2, 0x7b, 0x01, 0xba, 0xcf, 0x89, 0xfc, 0xaa, 0x11, 0xf6, 0xea, 0x6f, 0xc1, 0x70, 0x07, 0x85, 0x4f, 0xc0, 0xef, 0x35, 0xf8, 0x60, 0xfa, 0x8e, 0x93, 0x22, 0x7e, 0xf5, 0x2f, 0xf0, 0x39, 0x01, 0xc3, 0x9d, 0xaf, 0x69, 0xee, 0x3f, 0xc0, 0xb0, 0x17, 0xdb, 0x2d, 0x5c, 0xaa, 0xc5, 0xff, 0x0c, 0xdd, 0x3b, 0x60, 0x78, 0x85, 0x41, 0xe4, 0x57, 0x73, 0x07, 0x3e, 0xdf, 0x83, 0xe1, 0x55, 0xdb, 0x34, 0xf7, 0x3a, 0x7c, 0xf6, 0xc2, 0xf0, 0x6a, 0xba, 0x2b, 0x3c, 0x03, 0xbf, 0xff, 0x15, 0x9f, 0xb7, 0x61, 0xb8, 0x27, 0x1e, 0x7e, 0x0a, 0x86, 0x7d, 0x08, 0xff, 0x7f, 0x5f, 0x2c, 0xf2, 0xf7, 0x61, 0x9e, 0xbe, 0x3b, 0x61, 0xf8, 0xde, 0x3c, 0xcd, 0xdd, 0x8e, 0x0f, 0xb6, 0x07, 0xa9, 0xdb, 0x14, 0xdf, 0xf7, 0x20, 0x3e, 0xcf, 0xa1, 0x5b, 0xc3, 0xaf, 0xef, 0xd9, 0xf1, 0x77, 0xac, 0xa5, 0xde, 0xbf, 0xe6, 0x6f, 0xb9, 0xab, 0x9e, 0xe8, 0x86, 0x3e, 0xca, 0x6b, 0x6b, 0xc0, 0xdd, 0xde, 0xd6, 0xd4, 0x0d, 0xd3, 0xba, 0x4d, 0x30, 0x6d, 0xe6, 0xac, 0xe2, 0xee, 0x89, 0xfc, 0x6b, 0x4a, 0x4f, 0xe2, 0x9e, 0x5f, 0xe9, 0xa8, 0x6f, 0x08, 0xd4, 0xf8, 0xab, 0x9d, 0x55, 0x69, 0x21, 0x75, 0x81, 0x05, 0xf3, 0xeb, 0x1a, 0x9c, 0x6e, 0x70, 0x77, 0x2f, 0xbf, 0xe8, 0x66, 0xb7, 0x69, 0xdd, 0x32, 0xdc, 0x0d, 0x9d, 0xd0, 0xd9, 0x05, 0x77, 0xb7, 0x74, 0xa7, 0xa5, 0xa3, 0x7b, 0xac, 0xca, 0x2b, 0x20, 0xbd, 0x18, 0xe7, 0x7c, 0x87, 0x7f, 0x41, 0x6d, 0x8d, 0x9f, 0x2e, 0x30, 0x13, 0xb7, 0x8f, 0xd1, 0xb5, 0x60, 0xb5, 0x95, 0x7e, 0x7e, 0x37, 0x2c, 0x70, 0xce, 0x83, 0xca, 0xa5, 0xad, 0x5d, 0x50, 0x53, 0xe5, 0xa8, 0xf4, 0x57, 0xd4, 0x54, 0x41, 0x65, 0x7b, 0x77, 0x4b, 0x5a, 0x0e, 0xe9, 0x8e, 0xca, 0xce, 0x66, 0xaa, 0x60, 0x43, 0x53, 0xf7, 0x72, 0xba, 0x12, 0x4c, 0x6e, 0xe9, 0x6c, 0x6e, 0xeb, 0x0c, 0x99, 0x2e, 0x8a, 0x54, 0x13, 0xbc, 0xc8, 0x4b, 0x60, 0xe8, 0x22, 0xdf, 0xe5, 0x6d, 0x61, 0xfc, 0x68, 0xac, 0x2c, 0x5f, 0xd8, 0x50, 0xc9, 0xf7, 0xcd, 0xdd, 0xa8, 0xdd, 0xf7, 0x46, 0xe8, 0x6b, 0x98, 0x03, 0x73, 0x1a, 0x9c, 0x58, 0xeb, 0x86, 0x8e, 0xf0, 0xb4, 0xf6, 0x15, 0xc9, 0xff, 0xcd, 0xc9, 0x24, 0x2d, 0x29, 0xb7, 0x8e, 0x2d, 0x8d, 0xb4, 0x34, 0x45, 0xe9, 0xda, 0xb1, 0x68, 0x4b, 0x47, 0xb8, 0x8b, 0xef, 0x7f, 0xa7, 0x6b, 0xcc, 0x4c, 0xc9, 0xd8, 0xe5, 0x5c, 0x40, 0x5b, 0xe7, 0xb2, 0x96, 0xa5, 0xd1, 0xc4, 0x3d, 0x66, 0xed, 0x6d, 0x9d, 0x2d, 0x17, 0x37, 0x8f, 0xd3, 0xed, 0x70, 0x07, 0xaa, 0x17, 0xd2, 0xa5, 0x5f, 0xf5, 0xd8, 0x46, 0x95, 0xab, 0x5a, 0x96, 0xae, 0x88, 0xa6, 0x23, 0xa7, 0xaa, 0xa9, 0xad, 0xdd, 0x1d, 0xd5, 0x5e, 0x73, 0xe4, 0xfa, 0x96, 0x28, 0xdf, 0x66, 0x17, 0x69, 0x89, 0xae, 0x88, 0x74, 0xca, 0x74, 0x45, 0x96, 0x1c, 0xc4, 0xb0, 0x15, 0x91, 0x16, 0x2c, 0xa3, 0xa3, 0x8d, 0x6f, 0x3a, 0xa3, 0x08, 0x4b, 0x57, 0x44, 0x22, 0x2d, 0x9d, 0x51, 0xb9, 0x7b, 0x69, 0xa4, 0x2d, 0x1c, 0x35, 0x05, 0x10, 0xa7, 0xf3, 0x9d, 0xfe, 0x89, 0x0d, 0x18, 0xd4, 0xd9, 0x72, 0x57, 0x5a, 0x7a, 0x4e, 0x67, 0x02, 0x2d, 0x0a, 0x17, 0x25, 0xfc, 0xf8, 0x4e, 0x36, 0xd3, 0x38, 0x70, 0x56, 0xb4, 0x47, 0xc5, 0xef, 0x1c, 0xb9, 0xa2, 0xad, 0x9b, 0xaf, 0x12, 0x14, 0x97, 0xef, 0x35, 0x75, 0x12, 0x5a, 0xb0, 0xf8, 0x26, 0xb9, 0x62, 0x41, 0xbd, 0x86, 0x34, 0x2a, 0xc0, 0xe4, 0x5f, 0x38, 0xdf, 0x43, 0xb7, 0xd0, 0xf9, 0x9d, 0xf3, 0x19, 0x00, 0x11, 0x24, 0xee, 0x81, 0xeb, 0x96, 0xef, 0xee, 0x5a, 0x21, 0xdf, 0xd5, 0xd6, 0xdd, 0x2a, 0x47, 0xbb, 0xe4, 0x3b, 0x57, 0xb4, 0x44, 0xee, 0x36, 0x41, 0x4a, 0x02, 0x51, 0x16, 0x5f, 0x0e, 0x97, 0x8e, 0xbe, 0x05, 0x74, 0xcd, 0xdd, 0xad, 0xee, 0x00, 0xdd, 0x7d, 0x57, 0x19, 0x08, 0x2c, 0x08, 0x10, 0xfd, 0xb9, 0x6b, 0x6a, 0xf1, 0xe5, 0xa8, 0xbc, 0xc5, 0x39, 0xcf, 0x51, 0x4d, 0xd7, 0xda, 0x55, 0x57, 0xe2, 0x0f, 0xdd, 0x67, 0x87, 0x91, 0x1a, 0x6b, 0xea, 0x11, 0xcd, 0xf3, 0x00, 0x29, 0x67, 0x3c, 0xd1, 0x13, 0x71, 0xd6, 0xd6, 0x57, 0x6a, 0x14, 0x9a, 0x46, 0x41, 0xb5, 0x4d, 0x4b, 0xa0, 0x7c, 0x81, 0x7f, 0xce, 0x4d, 0xc5, 0xce, 0x59, 0xc5, 0xce, 0xd9, 0x25, 0xc5, 0xce, 0x92, 0xd2, 0x62, 0xa7, 0x3b, 0xb0, 0xa0, 0x7e, 0x26, 0xd3, 0x9b, 0x53, 0xbb, 0x27, 0x6e, 0x0e, 0xbb, 0x66, 0xd6, 0x47, 0x9b, 0x22, 0x51, 0x14, 0x12, 0xa9, 0x79, 0xdc, 0x5a, 0xe3, 0xaf, 0x58, 0x70, 0xab, 0x83, 0x6e, 0x55, 0x4b, 0x76, 0x64, 0xa8, 0x6b, 0x8a, 0xb6, 0x42, 0xb9, 0xd6, 0x4c, 0x15, 0x6d, 0x11, 0x24, 0x97, 0x2e, 0xaa, 0xbc, 0x09, 0xca, 0xe7, 0xa4, 0x23, 0xbd, 0xce, 0xdd, 0xe0, 0xc5, 0x6e, 0xe6, 0xae, 0xa8, 0xa0, 0x8b, 0xff, 0xbc, 0x0b, 0x6e, 0xa5, 0x9b, 0x03, 0x2b, 0xeb, 0xf9, 0xa2, 0xc0, 0x40, 0xe5, 0xfc, 0x05, 0x8b, 0xa8, 0xef, 0xdd, 0xb2, 0x50, 0xdc, 0x1c, 0xe8, 0xad, 0x74, 0x63, 0x34, 0x98, 0xe6, 0x2f, 0x9a, 0x56, 0x3f, 0x57, 0xbe, 0x44, 0xbf, 0x87, 0xba, 0x48, 0x57, 0x47, 0x38, 0x9a, 0x16, 0x12, 0x28, 0xc7, 0x86, 0xbf, 0x65, 0x45, 0x5b, 0xf4, 0x62, 0x0e, 0x42, 0x97, 0xc8, 0x25, 0x4b, 0x11, 0x30, 0x04, 0x2a, 0xeb, 0x6a, 0xdd, 0xe5, 0xe4, 0xae, 0x5b, 0x18, 0xa8, 0xfc, 0x66, 0xd5, 0x82, 0x00, 0x3b, 0xc4, 0x5d, 0x73, 0x58, 0x78, 0xa0, 0xa5, 0xbb, 0xad, 0x19, 0xab, 0x05, 0x91, 0xf8, 0xc7, 0xd2, 0xf6, 0x36, 0xce, 0x4e, 0xbe, 0xfc, 0xdf, 0xc2, 0xfa, 0xca, 0xf2, 0x05, 0x0b, 0xfd, 0x0d, 0x26, 0xe2, 0x69, 0x5f, 0x2b, 0xee, 0x96, 0x45, 0x76, 0x71, 0x17, 0xdf, 0x4c, 0xe8, 0x77, 0xd7, 0xc6, 0xdd, 0x15, 0x35, 0xf5, 0x6e, 0x4f, 0x6d, 0x65, 0x45, 0xdc, 0x3d, 0x6d, 0xe6, 0x78, 0x5a, 0x0d, 0xac, 0xe8, 0xa4, 0x07, 0x3b, 0x0d, 0xb5, 0x09, 0x92, 0x65, 0x38, 0xd2, 0x15, 0x8a, 0x34, 0x75, 0xc8, 0x4d, 0xdd, 0xe8, 0x58, 0xd2, 0xb4, 0x74, 0x79, 0x28, 0xd2, 0xb5, 0x02, 0x3b, 0x27, 0xfa, 0xd3, 0x1d, 0x8f, 0x26, 0x93, 0x86, 0xc3, 0x89, 0x13, 0x2b, 0xba, 0xa8, 0x0f, 0x87, 0x23, 0x6d, 0x9d, 0xa2, 0xbb, 0xa5, 0x44, 0xc6, 0x5e, 0x72, 0x63, 0xb7, 0x46, 0xbc, 0x26, 0xba, 0xb1, 0xcf, 0xed, 0xaf, 0x70, 0x56, 0x31, 0x5d, 0xc7, 0xf3, 0xb7, 0x63, 0xb5, 0xc3, 0x45, 0x5a, 0xd7, 0x9b, 0x4e, 0x74, 0x1d, 0x59, 0xd1, 0x29, 0xdb, 0x9b, 0x22, 0xa1, 0x15, 0x1d, 0x88, 0x8c, 0x6e, 0xbe, 0xec, 0xf2, 0xae, 0x96, 0xe6, 0xe9, 0x58, 0xd5, 0x78, 0xb3, 0x25, 0x72, 0x02, 0x71, 0x65, 0xe7, 0x15, 0xb2, 0x75, 0xe4, 0x07, 0x50, 0xe9, 0x5f, 0x34, 0x07, 0x2e, 0x15, 0xc9, 0xcd, 0x4d, 0x96, 0x1a, 0xb7, 0xa5, 0x73, 0x25, 0x30, 0x3f, 0xac, 0x75, 0x7b, 0x88, 0xd8, 0xeb, 0xe7, 0xd5, 0xd4, 0xa5, 0x25, 0x44, 0xff, 0xca, 0x5a, 0x87, 0xc7, 0x5d, 0x3e, 0x0f, 0x9b, 0x31, 0x35, 0xa0, 0xbe, 0xe6, 0xb6, 0x4a, 0xa4, 0x11, 0x44, 0xe5, 0xd2, 0xe5, 0x09, 0xaa, 0xed, 0x26, 0x97, 0x4c, 0x17, 0x60, 0xca, 0x6d, 0xdd, 0xcc, 0xad, 0x97, 0xdc, 0x1d, 0x6d, 0x41, 0x80, 0x03, 0xe2, 0xa2, 0xcd, 0x96, 0xe6, 0x44, 0x20, 0xdd, 0xe1, 0xd8, 0xdd, 0x81, 0x15, 0x2f, 0xfa, 0x1b, 0x22, 0x0b, 0x16, 0x76, 0x76, 0xff, 0xcd, 0x4a, 0x61, 0x24, 0xac, 0x4d, 0x25, 0xd6, 0x26, 0xad, 0xaf, 0xde, 0xda, 0x7a, 0x37, 0x50, 0x43, 0xb4, 0x37, 0x75, 0x27, 0x59, 0x6f, 0x73, 0x5b, 0xb3, 0x4c, 0x17, 0x79, 0x62, 0xae, 0xd8, 0xec, 0x82, 0xf1, 0xcd, 0x5c, 0xd9, 0xd4, 0xbe, 0x02, 0x19, 0xf2, 0x45, 0x91, 0x89, 0x97, 0xb6, 0x34, 0x3b, 0x30, 0x5a, 0x53, 0x77, 0x57, 0x67, 0xea, 0x9d, 0xc0, 0x30, 0x5c, 0xfb, 0x92, 0xf6, 0xfd, 0x15, 0xd4, 0xf6, 0x50, 0x53, 0x70, 0xa3, 0x36, 0xe0, 0x3e, 0x84, 0x0f, 0x6a, 0x15, 0xee, 0x11, 0x18, 0xf6, 0xa0, 0x96, 0xe2, 0x99, 0x8c, 0x4f, 0x21, 0x3e, 0x73, 0xf0, 0xf1, 0xe1, 0x73, 0x1b, 0x3e, 0xcb, 0xf0, 0x59, 0x8d, 0x0f, 0x4a, 0x7c, 0xcf, 0x13, 0xf8, 0x6c, 0xc1, 0x07, 0xd3, 0x7b, 0x30, 0xbd, 0x07, 0xd3, 0x7b, 0x30, 0xbd, 0x07, 0xd3, 0x97, 0x63, 0xfa, 0x72, 0x4c, 0x5f, 0x8e, 0xe9, 0xcb, 0x31, 0x7d, 0x39, 0xa6, 0x2f, 0xbf, 0x4d, 0x2b, 0x33, 0x7e, 0xd7, 0x20, 0xd0, 0x1a, 0x83, 0xf0, 0xac, 0xf1, 0x3b, 0x96, 0xc4, 0x5c, 0x23, 0x9c, 0xb2, 0xc1, 0x97, 0x7a, 0xe8, 0x7c, 0xd2, 0x2f, 0xf5, 0xa8, 0xf7, 0xc1, 0xc4, 0x1b, 0x7b, 0x58, 0x37, 0x35, 0xc9, 0x2e, 0xb4, 0x55, 0x86, 0xdd, 0x2f, 0x3c, 0xb6, 0x37, 0x91, 0xe2, 0x99, 0x8b, 0xee, 0xc4, 0x53, 0x52, 0xee, 0xc4, 0x1b, 0x76, 0xdf, 0x33, 0xee, 0x4e, 0x3c, 0x4f, 0xe2, 0x86, 0xbb, 0x61, 0xf7, 0x23, 0xfe, 0xf5, 0xce, 0x49, 0xa9, 0xb1, 0xe7, 0xe9, 0x29, 0xf6, 0x12, 0xb1, 0xff, 0x20, 0x1f, 0xf5, 0xe7, 0x45, 0xce, 0x49, 0x29, 0xf1, 0x9f, 0x11, 0xe3, 0xb3, 0x89, 0x7b, 0xf3, 0x86, 0xdd, 0x9b, 0x2e, 0xba, 0x37, 0x6f, 0xd8, 0xbd, 0x36, 0xfd, 0xde, 0x3c, 0xeb, 0xbc, 0xf0, 0xac, 0xb4, 0x53, 0x91, 0xf3, 0x95, 0x2c, 0xeb, 0xbc, 0x84, 0xae, 0x3e, 0x39, 0xbe, 0xf7, 0x33, 0x79, 0x4e, 0x72, 0xaa, 0x7d, 0x4b, 0x27, 0x15, 0xf0, 0xad, 0x76, 0x65, 0x08, 0x5d, 0x8e, 0x5c, 0xb5, 0x4a, 0x52, 0x74, 0x81, 0x7e, 0xdf, 0xe3, 0xc1, 0x91, 0xfa, 0xfe, 0x10, 0x48, 0x64, 0xcb, 0x0e, 0x97, 0x2f, 0x4b, 0xb5, 0xed, 0x0b, 0xe9, 0x34, 0x7c, 0x60, 0xff, 0xf1, 0x36, 0x7f, 0x51, 0x30, 0x3e, 0xda, 0x9c, 0x89, 0xd6, 0xc9, 0x46, 0xbe, 0xc3, 0xe9, 0xc0, 0xb4, 0x0a, 0xb0, 0xca, 0xfa, 0x7d, 0xfd, 0xfb, 0x62, 0xfc, 0xc4, 0x92, 0x2b, 0x10, 0x79, 0xf7, 0x5d, 0x01, 0xcd, 0xcb, 0x24, 0x4e, 0x99, 0x2e, 0xaa, 0x1c, 0x51, 0x17, 0xc7, 0x47, 0xe3, 0x31, 0x17, 0x71, 0xde, 0x05, 0xc0, 0xba, 0xc2, 0x65, 0x50, 0xf0, 0x1f, 0x6f, 0x7a, 0x1e, 0xf3, 0x3c, 0x0f, 0xfa, 0x19, 0xf5, 0x60, 0xf9, 0x46, 0x8f, 0xff, 0xaf, 0x60, 0x9c, 0x41, 0xb7, 0xd5, 0x99, 0xdc, 0x1f, 0x83, 0x31, 0x6c, 0xb0, 0xd2, 0xde, 0xbe, 0xe4, 0x0d, 0x58, 0xf7, 0xd8, 0xaf, 0x6a, 0xec, 0xff, 0xf0, 0x61, 0xeb, 0xb5, 0x36, 0xfd, 0xca, 0x31, 0xb4, 0x71, 0x8a, 0xfc, 0x2f, 0x8c, 0x8e, 0xc8, 0xf5, 0x0c, 0xf7, 0x5a, 0x9e, 0xa7, 0xa4, 0x33, 0x63, 0x2d, 0x98, 0x6a, 0xb8, 0x7c, 0x90, 0x6f, 0x02, 0xe2, 0x18, 0x35, 0x27, 0x21, 0x87, 0x77, 0xe3, 0x54, 0x35, 0xae, 0x2d, 0x68, 0xe4, 0x33, 0x4b, 0xfb, 0x93, 0x75, 0x1a, 0x1b, 0xaa, 0x1b, 0x4c, 0x8c, 0xcb, 0xf5, 0x5c, 0x7c, 0x33, 0x21, 0xcf, 0x0e, 0xf2, 0x19, 0x8d, 0x62, 0xfe, 0x66, 0xac, 0x40, 0xbb, 0x7b, 0x5d, 0xc7, 0xe7, 0x36, 0xd2, 0xf8, 0x0b, 0xc6, 0x0f, 0x83, 0x32, 0x39, 0xfb, 0xcb, 0x81, 0x98, 0x59, 0x82, 0x42, 0x3a, 0x59, 0x12, 0xbe, 0xc2, 0x67, 0x52, 0x16, 0x2a, 0x3a, 0x0b, 0x9d, 0x44, 0x19, 0xeb, 0x3c, 0x2a, 0xd6, 0x4c, 0x8f, 0xe5, 0xd0, 0xb8, 0xb0, 0xdc, 0xa5, 0xcb, 0x2f, 0xc4, 0x0c, 0xac, 0x96, 0xa0, 0x89, 0xef, 0x4f, 0x09, 0xd2, 0xcd, 0x58, 0xfc, 0xb5, 0x58, 0x1b, 0x85, 0x6f, 0xb7, 0x19, 0x56, 0xde, 0x51, 0x95, 0x61, 0xa7, 0x53, 0x3e, 0x25, 0xaa, 0xdb, 0xe8, 0x4a, 0x9f, 0x2b, 0x38, 0x85, 0x5b, 0xe1, 0x76, 0x27, 0x8d, 0xc1, 0xa1, 0x85, 0x43, 0x76, 0xb2, 0x7a, 0x3b, 0x8f, 0x2c, 0x66, 0xd2, 0x8c, 0x9a, 0xb3, 0x4a, 0x67, 0xf6, 0xfc, 0x48, 0x27, 0x30, 0xf0, 0xa4, 0xed, 0x6a, 0x5a, 0x6b, 0xac, 0x33, 0x73, 0xea, 0x2a, 0x5a, 0xa7, 0x48, 0x7b, 0x88, 0x56, 0xaa, 0x29, 0x79, 0xf6, 0x60, 0x9e, 0x00, 0xdf, 0xe7, 0x5c, 0x8d, 0x69, 0xb9, 0x8a, 0xb5, 0xff, 0x26, 0x4c, 0x35, 0xb0, 0xe1, 0x0d, 0x47, 0x97, 0x4e, 0xa6, 0xf1, 0x33, 0xd9, 0x65, 0x6b, 0x85, 0x7d, 0x02, 0x42, 0x78, 0xf3, 0x1e, 0xc7, 0xfb, 0x34, 0x8f, 0x71, 0xbe, 0xe6, 0xb4, 0xce, 0xac, 0xdc, 0x66, 0x2e, 0x44, 0x12, 0x32, 0x06, 0xeb, 0xac, 0x85, 0x60, 0xba, 0x18, 0xf6, 0x42, 0x57, 0x58, 0xdd, 0xfa, 0xdd, 0xd0, 0x2c, 0xe7, 0x55, 0xce, 0x09, 0x4e, 0x83, 0x7f, 0x83, 0xfb, 0xb4, 0xce, 0xf6, 0x1f, 0x7b, 0x3c, 0x33, 0xc7, 0x72, 0x9c, 0xcb, 0xc0, 0xa4, 0xcb, 0x73, 0x56, 0xeb, 0xf2, 0x11, 0x72, 0x99, 0x21, 0x7f, 0xca, 0xa6, 0xc1, 0x4c, 0xfd, 0xcf, 0x16, 0xf0, 0xad, 0x0f, 0x3e, 0x1d, 0x1f, 0x35, 0x95, 0x4e, 0x8a, 0x55, 0x81, 0xde, 0xe1, 0x52, 0x5d, 0xca, 0x7d, 0xa0, 0xc3, 0xe5, 0xcf, 0xa7, 0xd2, 0xad, 0x1d, 0x82, 0xb9, 0xa9, 0xe3, 0x7e, 0x91, 0xd5, 0xb2, 0x6b, 0xaa, 0x1b, 0x36, 0x2a, 0xcd, 0x9c, 0xff, 0x4f, 0x6d, 0x57, 0xdd, 0xd2, 0xb7, 0x12, 0x68, 0xd4, 0x66, 0xf4, 0x68, 0x01, 0x20, 0x56, 0xf5, 0x48, 0x07, 0x46, 0xa7, 0x3e, 0x59, 0xff, 0x31, 0x71, 0xe7, 0x4d, 0x7f, 0xd0, 0xaa, 0x14, 0x3b, 0xe3, 0x67, 0xc3, 0xa1, 0xcd, 0x4d, 0xf7, 0x61, 0xda, 0xc0, 0x9a, 0xe1, 0xa8, 0xa0, 0x19, 0x72, 0xb6, 0xf5, 0x75, 0xd1, 0x1c, 0x6b, 0x72, 0x45, 0xe3, 0x12, 0x72, 0xd3, 0x9a, 0x37, 0x57, 0xbe, 0x7a, 0x5c, 0x58, 0xe7, 0x17, 0xcf, 0x01, 0xaa, 0x8d, 0xda, 0x98, 0xd9, 0xe3, 0x44, 0x0d, 0x9e, 0x1f, 0xc1, 0x3a, 0xae, 0xc3, 0xeb, 0xe3, 0xea, 0x90, 0x77, 0xc9, 0x3a, 0x80, 0x14, 0x2e, 0xba, 0x9a, 0x56, 0xa1, 0xc0, 0x3a, 0xae, 0xcd, 0xbb, 0xb6, 0x09, 0xf1, 0xba, 0xf0, 0xc9, 0x36, 0x53, 0x08, 0x36, 0x6d, 0xc6, 0x1e, 0xad, 0x5e, 0x72, 0x8d, 0x15, 0xd0, 0x9e, 0x71, 0xc9, 0x8e, 0x69, 0x4b, 0x1c, 0x5c, 0x17, 0x2e, 0xef, 0x48, 0x78, 0x9a, 0xa3, 0x2a, 0xde, 0xff, 0x61, 0xac, 0xfa, 0x34, 0x38, 0xc4, 0xc9, 0xc0, 0xd8, 0x63, 0x7d, 0x9c, 0xf7, 0x19, 0xdb, 0x04, 0xae, 0x69, 0x15, 0xe7, 0xb9, 0xdb, 0x0a, 0x9c, 0xdb, 0xe3, 0xec, 0xda, 0x8b, 0x25, 0x4c, 0x5a, 0xd9, 0xcc, 0x3e, 0x5b, 0xb7, 0x3e, 0x84, 0x74, 0xb4, 0x55, 0x9e, 0xe7, 0xf0, 0x5a, 0x2c, 0x81, 0x01, 0x5e, 0x9d, 0x72, 0x0e, 0x7f, 0x27, 0x86, 0x4e, 0x39, 0xb3, 0xe8, 0xb4, 0x60, 0xf7, 0x27, 0x46, 0x50, 0x74, 0xb4, 0x5b, 0x9c, 0xee, 0x4a, 0xca, 0x96, 0x79, 0x4d, 0xca, 0x19, 0xfc, 0x9d, 0x18, 0x3a, 0x81, 0xbf, 0xa6, 0xd0, 0x87, 0xb4, 0x5f, 0x02, 0x29, 0x50, 0xe3, 0x92, 0xe5, 0xe7, 0x30, 0xdd, 0x7a, 0x6d, 0xbf, 0x71, 0x20, 0xc5, 0xff, 0x13, 0x25, 0x9b, 0xcf, 0x78, 0xca, 0x67, 0x3f, 0x1d, 0xfb, 0x9d, 0x4f, 0x89, 0x5b, 0x48, 0x77, 0x32, 0xd0, 0xbe, 0x59, 0xba, 0x87, 0x8b, 0xe3, 0x64, 0x70, 0x9c, 0xcf, 0x92, 0x71, 0x30, 0xc4, 0x76, 0x4f, 0xa6, 0xa2, 0xbb, 0x07, 0xac, 0x95, 0x54, 0x7f, 0x6a, 0xb3, 0x7b, 0x72, 0xac, 0x66, 0xd1, 0xa6, 0xfc, 0x9d, 0xd6, 0x9e, 0xf7, 0xe4, 0xc8, 0x13, 0xb4, 0xf9, 0xa6, 0x56, 0xff, 0x0a, 0xbe, 0xd9, 0x0c, 0xd4, 0x1e, 0x2c, 0x27, 0x70, 0xa9, 0x9d, 0x04, 0x29, 0x37, 0x9d, 0xf6, 0x5d, 0xea, 0xa6, 0xd3, 0x64, 0xb8, 0xb8, 0x53, 0xf2, 0xf2, 0x1c, 0xe6, 0x96, 0x41, 0x8d, 0x3a, 0x8a, 0xb9, 0xb5, 0xd4, 0x2b, 0xa3, 0x0e, 0x5d, 0x1e, 0xb5, 0x5c, 0xc5, 0xa4, 0x68, 0xf1, 0xfe, 0xc1, 0x38, 0x5d, 0xd0, 0x8e, 0xb4, 0xa0, 0x95, 0xa8, 0x5c, 0x8d, 0x08, 0x2a, 0xaf, 0xb8, 0x9a, 0x7b, 0x79, 0xbf, 0x46, 0xe5, 0x20, 0xbd, 0x83, 0xb4, 0xf1, 0x7e, 0x11, 0xd3, 0x06, 0x42, 0x53, 0x8c, 0xad, 0x74, 0x2c, 0x3a, 0xc6, 0xed, 0xfc, 0x1c, 0x4b, 0x87, 0x87, 0x23, 0x28, 0x73, 0xd8, 0x9d, 0xaf, 0xdd, 0xa1, 0xfb, 0x9c, 0x35, 0xd3, 0x26, 0x7c, 0x9e, 0x60, 0xf7, 0x83, 0xb4, 0xbb, 0xac, 0x6b, 0xa5, 0x53, 0x70, 0xd5, 0xf3, 0xb4, 0x63, 0x72, 0x76, 0x8f, 0x04, 0xf3, 0x46, 0x90, 0x6f, 0x4c, 0x42, 0x09, 0x51, 0xcd, 0xfb, 0x2f, 0x00, 0xe5, 0x09, 0xcd, 0x22, 0x84, 0x68, 0xa5, 0x6d, 0xdd, 0x60, 0x7e, 0x19, 0x98, 0x94, 0x00, 0xe5, 0x54, 0x30, 0x89, 0x29, 0xa9, 0xd3, 0xe7, 0x0a, 0xe5, 0x5a, 0x0d, 0xf4, 0x7d, 0xe1, 0x1d, 0xe6, 0x15, 0x3b, 0xc6, 0x9e, 0xa8, 0x1b, 0xec, 0x01, 0xc5, 0xc1, 0xae, 0xc7, 0xb8, 0xaf, 0x3e, 0x47, 0x3d, 0x2f, 0xb2, 0x0a, 0x5b, 0x22, 0xa7, 0xfa, 0x8f, 0x12, 0x28, 0xdf, 0xe3, 0x3c, 0xf7, 0x8b, 0xbd, 0x07, 0xf6, 0xca, 0x1e, 0x53, 0x44, 0x67, 0x33, 0x31, 0x6c, 0xb9, 0x85, 0x66, 0x25, 0x2b, 0x51, 0x62, 0x1f, 0xe6, 0x64, 0xb2, 0x66, 0x72, 0xc8, 0x33, 0x74, 0xde, 0x83, 0x53, 0xcf, 0x37, 0x57, 0xfa, 0x68, 0x57, 0x9e, 0x83, 0x4e, 0x8a, 0x02, 0xe4, 0x68, 0x85, 0x35, 0x23, 0x63, 0x3e, 0xd9, 0x10, 0x87, 0xb9, 0x10, 0x82, 0xc9, 0x1c, 0x30, 0x9e, 0xd2, 0x6e, 0x35, 0x21, 0xbc, 0x86, 0x04, 0xbc, 0x73, 0xe3, 0xbd, 0xc3, 0xc6, 0x39, 0x8f, 0x6d, 0xf1, 0xc5, 0x3a, 0xf2, 0x13, 0x7e, 0xd4, 0x1a, 0xd9, 0x09, 0x7f, 0x3d, 0xd6, 0x44, 0xd7, 0x63, 0xc2, 0xba, 0x20, 0x96, 0x2e, 0xa0, 0xec, 0x51, 0x64, 0xfe, 0xde, 0x80, 0xf5, 0xda, 0x98, 0xa8, 0x95, 0x38, 0x3b, 0x0e, 0x90, 0xc6, 0x56, 0x63, 0x5c, 0xde, 0x33, 0x71, 0xe1, 0x99, 0xba, 0x41, 0xdf, 0xda, 0x50, 0x3e, 0xa7, 0xd6, 0xd3, 0x5a, 0xe9, 0xd4, 0x96, 0xbc, 0xb0, 0x83, 0xe7, 0x5a, 0x69, 0x7f, 0xae, 0x46, 0xc5, 0x3d, 0xe3, 0xa8, 0xb8, 0x27, 0x47, 0x36, 0x10, 0x15, 0xd3, 0x8a, 0xbb, 0xbf, 0x29, 0xe3, 0xf6, 0x68, 0x32, 0xee, 0xb2, 0xb4, 0x29, 0x56, 0x7c, 0xce, 0xa5, 0x9b, 0x9d, 0x73, 0x78, 0xad, 0xde, 0x49, 0xb1, 0x56, 0x8f, 0x28, 0xb5, 0x22, 0x27, 0x9d, 0x52, 0xf9, 0x8e, 0x85, 0xcb, 0xf1, 0xb2, 0x25, 0x4c, 0xad, 0x72, 0xf4, 0xe4, 0xfe, 0xef, 0xc6, 0xa9, 0x15, 0xf1, 0x2d, 0x68, 0xf5, 0x36, 0xad, 0x86, 0xe5, 0x4c, 0xab, 0xd1, 0x04, 0xad, 0x4e, 0xc1, 0x74, 0x85, 0x02, 0xbf, 0x36, 0x48, 0xae, 0x5e, 0x2a, 0xb0, 0x28, 0xba, 0x95, 0xaa, 0x75, 0xa6, 0x3a, 0x1a, 0xca, 0xe6, 0xbb, 0x01, 0x4f, 0x71, 0x9c, 0xa3, 0x7c, 0x47, 0xeb, 0x56, 0x1b, 0xc2, 0x58, 0x3d, 0xa2, 0xe6, 0xf0, 0x59, 0xec, 0x9d, 0xca, 0x2a, 0x5f, 0x5e, 0x70, 0x54, 0x36, 0x57, 0xc5, 0xf6, 0x0d, 0x24, 0x56, 0x43, 0xe5, 0x58, 0x2d, 0x21, 0x4b, 0x7d, 0xef, 0xd6, 0xde, 0xa5, 0xfa, 0xdf, 0xbc, 0xaa, 0x14, 0xd6, 0x9c, 0x33, 0xaa, 0x8a, 0xed, 0xa5, 0x58, 0xb3, 0xbc, 0x6e, 0xcd, 0x6f, 0x86, 0x94, 0xc9, 0x4e, 0xbd, 0x58, 0x85, 0x2c, 0x4e, 0x6f, 0xad, 0x17, 0xf7, 0x11, 0xc6, 0xda, 0xf5, 0x4a, 0xc0, 0x91, 0x81, 0x2d, 0xa3, 0xb7, 0xe4, 0x07, 0x0f, 0xfb, 0xd6, 0x87, 0x04, 0x7d, 0xcb, 0xc9, 0x1d, 0xf8, 0x1d, 0xb3, 0xec, 0xb7, 0x6d, 0x17, 0x77, 0x0b, 0xd5, 0x2a, 0x03, 0xbe, 0x0e, 0xf5, 0x4c, 0x30, 0x87, 0xe3, 0xd0, 0xde, 0x0b, 0xa4, 0x49, 0x2d, 0x96, 0xd9, 0xaa, 0x13, 0xdc, 0xd5, 0x47, 0xdc, 0x8d, 0xa8, 0x3c, 0xad, 0xfe, 0x63, 0x5c, 0xff, 0x95, 0x26, 0x3a, 0xcd, 0xd8, 0x87, 0x52, 0x2f, 0x64, 0xf6, 0xf5, 0x85, 0x8c, 0x22, 0x8d, 0x7a, 0x58, 0xd0, 0x34, 0xb5, 0xfb, 0xca, 0x71, 0xed, 0xbe, 0x32, 0x47, 0xce, 0xa8, 0xfd, 0x78, 0x71, 0x8f, 0xba, 0x87, 0x67, 0x08, 0xef, 0xbc, 0x7c, 0x9b, 0x8a, 0x1d, 0xf1, 0x37, 0xeb, 0xec, 0x4e, 0x49, 0x66, 0x48, 0xc4, 0x4a, 0xe9, 0x67, 0x64, 0x97, 0xd5, 0x0e, 0xf2, 0x8b, 0x9b, 0x21, 0x9f, 0xee, 0xba, 0xe5, 0x90, 0x43, 0xab, 0x25, 0x8f, 0xe1, 0x9e, 0xfc, 0xf7, 0x07, 0xad, 0x13, 0x6c, 0xdc, 0x6b, 0x56, 0x32, 0x27, 0x18, 0x3d, 0xc0, 0x67, 0x11, 0xdf, 0x46, 0x3b, 0x65, 0xcd, 0x06, 0x55, 0x0d, 0x16, 0x2a, 0x7e, 0x6e, 0x5f, 0xaf, 0x26, 0x47, 0x0e, 0x8b, 0x3b, 0x5a, 0x91, 0xc2, 0x2d, 0x8a, 0x3e, 0x70, 0x9f, 0x62, 0xaa, 0xbf, 0xef, 0xd6, 0x5d, 0xde, 0xbe, 0x0a, 0x8f, 0xa2, 0xf3, 0x78, 0xe2, 0x52, 0x85, 0x4b, 0x78, 0x2b, 0x9f, 0xce, 0x4a, 0x34, 0xd1, 0x9c, 0x21, 0xe6, 0xf3, 0xa1, 0xcf, 0x13, 0xda, 0x88, 0x3a, 0x56, 0x91, 0x86, 0x91, 0x5b, 0xbc, 0xab, 0x6e, 0xa4, 0x53, 0x8b, 0x78, 0x47, 0x4e, 0x38, 0x47, 0xc9, 0x4d, 0xf1, 0xbf, 0x06, 0xfd, 0xf9, 0xac, 0xb4, 0xb0, 0xa9, 0xf6, 0x03, 0xd7, 0xa8, 0xd8, 0x45, 0xff, 0xad, 0x41, 0xd6, 0x18, 0x7e, 0xc4, 0xf3, 0x3b, 0xc3, 0x15, 0x8b, 0xae, 0x48, 0x5b, 0x68, 0x64, 0xd8, 0x97, 0x44, 0x2d, 0x49, 0x4e, 0x4a, 0xda, 0x82, 0x90, 0xaf, 0xf1, 0x12, 0xb9, 0x6d, 0x98, 0x1f, 0x21, 0x6d, 0xe6, 0x2a, 0x36, 0x6e, 0xb9, 0x97, 0x92, 0x3a, 0x02, 0xad, 0x6c, 0xbb, 0xa4, 0x86, 0xf0, 0x81, 0x2b, 0x9f, 0x4e, 0x20, 0x21, 0x2e, 0x5f, 0x36, 0x0b, 0x21, 0x93, 0x19, 0xb2, 0xa5, 0x57, 0xc6, 0xe5, 0xe1, 0x05, 0x86, 0x0d, 0x4d, 0xbb, 0x24, 0x6c, 0xd8, 0x6f, 0x26, 0xa7, 0xca, 0xfe, 0x8a, 0x70, 0x42, 0xf6, 0x77, 0x2a, 0x3d, 0x36, 0xe6, 0xed, 0xa2, 0x5d, 0x99, 0x83, 0xaf, 0xa4, 0xd3, 0x17, 0x0b, 0x5c, 0xbf, 0x1e, 0xfa, 0xf5, 0x2f, 0x50, 0x67, 0x93, 0x43, 0x96, 0xad, 0xbd, 0x21, 0xb3, 0xa0, 0xa6, 0x69, 0xcb, 0x20, 0x1f, 0x64, 0xb1, 0x53, 0x88, 0xce, 0x55, 0xe0, 0xfb, 0x61, 0xaa, 0xe2, 0xb7, 0x17, 0xc9, 0x2e, 0x67, 0x2b, 0x3c, 0x0c, 0xe9, 0x1c, 0xee, 0x2e, 0x3a, 0x39, 0x81, 0x73, 0xff, 0x9e, 0x92, 0xbf, 0x7a, 0x5c, 0x7d, 0x57, 0xe7, 0xc8, 0x99, 0x68, 0xad, 0x94, 0x11, 0xef, 0x89, 0x53, 0xea, 0x6a, 0x50, 0x0e, 0x5d, 0x9e, 0x16, 0xc7, 0xb5, 0xd7, 0xc0, 0x15, 0xb5, 0xd7, 0x3d, 0x8c, 0x93, 0x8d, 0x9f, 0xdb, 0x5e, 0x8f, 0x31, 0x2f, 0x19, 0xd0, 0xda, 0xab, 0x4c, 0xf1, 0x25, 0x28, 0xdd, 0x9c, 0xa4, 0xf3, 0x60, 0x5e, 0x3c, 0xb6, 0x46, 0x4f, 0x7c, 0xce, 0x62, 0xd4, 0x44, 0x76, 0x57, 0xbc, 0x5d, 0x3f, 0xbf, 0x55, 0xfd, 0x77, 0x72, 0x0d, 0xac, 0x58, 0x83, 0x1c, 0xae, 0xc1, 0xff, 0x77, 0x45, 0x35, 0xe8, 0xe4, 0x1a, 0xfc, 0x20, 0x9a, 0x93, 0xac, 0x81, 0x6d, 0x7c, 0xab, 0x6e, 0x4e, 0xb4, 0x6a, 0xb1, 0x32, 0x57, 0x40, 0x6f, 0xe5, 0x1b, 0x40, 0xe4, 0x36, 0x90, 0xdf, 0xde, 0x63, 0x6b, 0x83, 0xd2, 0xf7, 0xf6, 0xf2, 0x2d, 0xd6, 0x0e, 0x6b, 0xf1, 0x40, 0x4e, 0xa0, 0x77, 0x6a, 0xef, 0x80, 0xc5, 0xf3, 0xe2, 0x66, 0x8b, 0x92, 0x7f, 0x69, 0x88, 0x2b, 0x18, 0x62, 0xc1, 0x49, 0x46, 0x9f, 0x89, 0xfe, 0x3d, 0xed, 0xf2, 0xe3, 0xbf, 0xa3, 0x5d, 0xfe, 0xfd, 0x73, 0xdb, 0xe5, 0xe5, 0xbf, 0xab, 0x5d, 0x5e, 0xfe, 0xcf, 0xb7, 0xcb, 0xdf, 0x75, 0x52, 0x5a, 0xaa, 0x36, 0x77, 0xf8, 0x22, 0x9f, 0xed, 0x97, 0xd2, 0xef, 0xfe, 0x0e, 0x59, 0xba, 0xe5, 0x6f, 0x49, 0x59, 0xb4, 0x17, 0x3f, 0x24, 0x1d, 0x10, 0x39, 0x72, 0xad, 0xc3, 0x29, 0xd5, 0x15, 0x3a, 0xa5, 0x06, 0x5e, 0x7b, 0x8b, 0x3d, 0x58, 0xae, 0x28, 0x42, 0x6b, 0x0e, 0xf1, 0x4d, 0x1a, 0xec, 0xa1, 0x42, 0xd7, 0x36, 0xb1, 0xba, 0xfc, 0x2d, 0xdf, 0xfd, 0x41, 0x03, 0xdd, 0x53, 0x5b, 0xf1, 0x1a, 0x5b, 0xc4, 0x7b, 0x85, 0xc6, 0x2d, 0xbe, 0xf7, 0xc5, 0xec, 0xae, 0xdf, 0x0c, 0xc9, 0x0e, 0xb0, 0x74, 0x45, 0x0b, 0x1c, 0x90, 0xd3, 0xd5, 0xb9, 0x29, 0xe6, 0x5b, 0xd3, 0xd5, 0xaa, 0xad, 0x48, 0x16, 0xb7, 0xc6, 0xd0, 0xbc, 0xbb, 0x63, 0xdf, 0x1a, 0xfc, 0x2d, 0x0e, 0x90, 0x65, 0x4f, 0x16, 0x42, 0x03, 0x8f, 0xb1, 0x78, 0xf8, 0xa6, 0x4b, 0x70, 0x4e, 0x98, 0x3f, 0x32, 0xb6, 0xc3, 0xbf, 0xe9, 0x4b, 0x3b, 0xc1, 0x64, 0x07, 0xf4, 0xa3, 0xab, 0x0e, 0x2b, 0xbc, 0xdd, 0x79, 0x80, 0x39, 0x9b, 0x69, 0x3c, 0x60, 0xdf, 0x73, 0x7c, 0xaa, 0xf0, 0x26, 0xc4, 0x74, 0x9d, 0xe7, 0x6b, 0x03, 0xa4, 0x01, 0xc8, 0x45, 0x93, 0x14, 0xdd, 0xff, 0xf8, 0x85, 0xb5, 0xc2, 0x7a, 0x8d, 0x76, 0x6f, 0x2f, 0x41, 0x44, 0x74, 0x30, 0xcb, 0x7d, 0x5a, 0xf2, 0x5a, 0x2b, 0xa6, 0x5e, 0x63, 0x9d, 0x09, 0x47, 0x98, 0xc2, 0x5f, 0x2f, 0xe0, 0x55, 0xc7, 0x63, 0xdf, 0x63, 0x4d, 0xf2, 0x29, 0x67, 0xa6, 0xe7, 0x07, 0xcc, 0x65, 0x0f, 0x8a, 0x91, 0x83, 0x0c, 0x3b, 0x71, 0xae, 0xad, 0x5b, 0x40, 0x0e, 0x1a, 0xa7, 0x95, 0x83, 0x8c, 0x3a, 0xef, 0xac, 0x38, 0x1e, 0xec, 0x2e, 0xeb, 0xd5, 0x06, 0xba, 0x67, 0xa0, 0x94, 0xf3, 0x77, 0x39, 0xdb, 0x61, 0x3b, 0x38, 0x22, 0xea, 0x74, 0x37, 0x6c, 0x67, 0x2a, 0xfc, 0x00, 0xb5, 0x5a, 0x0a, 0x79, 0xce, 0x06, 0xd3, 0xbb, 0xc0, 0x01, 0xdb, 0xe5, 0xab, 0x69, 0x67, 0xbc, 0x54, 0xc1, 0xb7, 0xe6, 0xd5, 0xa1, 0x4c, 0xcd, 0x61, 0x0a, 0xfb, 0x00, 0x4b, 0x5c, 0x87, 0x7d, 0xa2, 0x92, 0x35, 0x45, 0x13, 0xfb, 0x1d, 0x25, 0xbf, 0xba, 0x41, 0x5a, 0x93, 0x50, 0x73, 0x1a, 0x4a, 0x03, 0xf8, 0xb6, 0x39, 0x25, 0x97, 0xb3, 0x4b, 0x2a, 0x83, 0x62, 0xfc, 0x2d, 0x85, 0x92, 0x38, 0x1c, 0x7c, 0x9a, 0x27, 0xad, 0x5d, 0x29, 0xc5, 0xc7, 0x85, 0x1c, 0xd3, 0x0e, 0x0f, 0x7b, 0xbb, 0xa4, 0x46, 0xce, 0xe7, 0x98, 0x58, 0x13, 0x6e, 0x7f, 0xd3, 0x6a, 0xd6, 0xf4, 0x14, 0xc6, 0x85, 0x76, 0xde, 0x72, 0x0e, 0x6b, 0x86, 0x5b, 0xc4, 0x7a, 0x2e, 0xd8, 0x1b, 0x7a, 0x1c, 0xeb, 0x67, 0x64, 0x79, 0x42, 0x38, 0x79, 0x8b, 0x25, 0x6c, 0x0e, 0x9f, 0x4c, 0x41, 0x7b, 0x9a, 0x78, 0x47, 0x05, 0xaf, 0x8a, 0x79, 0x9f, 0xd3, 0x45, 0xa8, 0xdd, 0x30, 0x34, 0x63, 0xfe, 0xc8, 0x05, 0x8f, 0x76, 0x6e, 0x05, 0xc2, 0x19, 0x9a, 0x2c, 0xac, 0xfb, 0x8a, 0x11, 0x27, 0x62, 0x99, 0xe3, 0x65, 0xf2, 0xca, 0x23, 0x97, 0xa2, 0xb0, 0x95, 0x84, 0xba, 0x08, 0x9d, 0xd3, 0xb8, 0x78, 0x56, 0xfc, 0x0c, 0x48, 0x92, 0x09, 0x17, 0x97, 0x18, 0x0f, 0xe5, 0x12, 0x0f, 0x73, 0x89, 0x50, 0x00, 0x8d, 0x83, 0xf3, 0x47, 0x46, 0xf7, 0xa3, 0x75, 0x9f, 0x5e, 0x46, 0x16, 0x97, 0x91, 0x41, 0xeb, 0xef, 0x30, 0xb5, 0x8e, 0xa1, 0xc9, 0x2f, 0xba, 0x8f, 0x76, 0xd3, 0x8c, 0x6e, 0x17, 0x37, 0xa9, 0xa1, 0x3f, 0x96, 0xe3, 0xa7, 0x33, 0x95, 0x6c, 0xb4, 0x2f, 0x02, 0x75, 0x5c, 0x4b, 0xc8, 0x8c, 0xf9, 0xb4, 0xf2, 0xcd, 0xdb, 0xeb, 0xeb, 0x06, 0x69, 0x45, 0x69, 0xfc, 0x56, 0xa3, 0x02, 0x57, 0xd1, 0x5a, 0x3e, 0xdf, 0xc2, 0xc6, 0x37, 0xd4, 0xd1, 0xde, 0xdb, 0x1d, 0xa3, 0xc5, 0xf1, 0xb4, 0xc5, 0x93, 0x2c, 0x31, 0xa4, 0x36, 0x69, 0x9a, 0x07, 0x64, 0x2b, 0x72, 0x84, 0x95, 0x2a, 0xe3, 0xf5, 0x65, 0xed, 0x7c, 0x55, 0x3a, 0xd5, 0x78, 0xc7, 0xa8, 0xb8, 0x85, 0xfc, 0x39, 0xb9, 0xc2, 0x69, 0x11, 0xa7, 0x7f, 0xfb, 0x37, 0xd0, 0xee, 0xa2, 0x77, 0xdf, 0x78, 0xf7, 0x0d, 0xf7, 0x47, 0x20, 0x65, 0xc7, 0x3c, 0xc5, 0x46, 0xa0, 0x52, 0x9c, 0x46, 0x6b, 0x85, 0x13, 0x79, 0xcc, 0x67, 0xfb, 0xb0, 0x77, 0x6c, 0x28, 0x70, 0x21, 0x3e, 0xf2, 0x19, 0x1f, 0x8f, 0xd7, 0xfc, 0x11, 0x24, 0x72, 0x61, 0x09, 0x60, 0xe7, 0x91, 0x8a, 0xb1, 0xf5, 0x62, 0x5f, 0x59, 0x70, 0x0e, 0x9d, 0xad, 0x41, 0xb0, 0x78, 0x36, 0x83, 0x65, 0x6a, 0x2d, 0xe4, 0xd8, 0x5a, 0xc1, 0xfc, 0xde, 0xde, 0xf7, 0xf6, 0x52, 0xe9, 0x4e, 0xd4, 0xfa, 0x31, 0xbf, 0xd8, 0x75, 0xd8, 0x6f, 0xb6, 0x03, 0xf6, 0x2c, 0x4a, 0x79, 0x48, 0xdc, 0x79, 0xa6, 0x4c, 0x8e, 0x53, 0x7f, 0xa5, 0x7d, 0xa5, 0x08, 0xf9, 0x9e, 0x42, 0xe7, 0xc7, 0xeb, 0xc2, 0x39, 0xda, 0xc8, 0x07, 0xed, 0xbb, 0x45, 0x7c, 0x7f, 0xb6, 0xce, 0x06, 0xe9, 0x78, 0xfe, 0xec, 0x19, 0xc6, 0x33, 0x52, 0xc3, 0x67, 0x2f, 0x51, 0xcb, 0xe3, 0x9b, 0xf6, 0x9b, 0xd8, 0x78, 0xa4, 0x0b, 0x54, 0xa3, 0xb2, 0xf3, 0x52, 0x23, 0x26, 0x95, 0xb5, 0x57, 0x3e, 0x62, 0x52, 0xd9, 0x78, 0xa9, 0x11, 0x93, 0xcf, 0x0c, 0x82, 0x1b, 0x57, 0x2e, 0xe7, 0x53, 0xe4, 0xe6, 0x5c, 0x6e, 0xc4, 0xe4, 0xb3, 0x39, 0x7f, 0xdf, 0x88, 0x89, 0x90, 0x9d, 0x65, 0x24, 0x3b, 0x79, 0xac, 0xb2, 0xb2, 0xfb, 0x4a, 0x75, 0x22, 0xde, 0x81, 0xe2, 0x8a, 0xdb, 0xa8, 0xc1, 0xbc, 0x54, 0xb9, 0x59, 0x79, 0xaf, 0x90, 0x9b, 0xb4, 0x0e, 0x7e, 0x5a, 0x0f, 0xba, 0xd7, 0x02, 0x5b, 0xca, 0x95, 0x1f, 0x45, 0xf3, 0xf6, 0x0f, 0x16, 0x08, 0xfd, 0x95, 0x74, 0xa8, 0xfc, 0x4b, 0xa5, 0x62, 0xab, 0x61, 0x6e, 0x8a, 0x54, 0x2a, 0x40, 0xde, 0x96, 0xc7, 0xeb, 0x7b, 0xb2, 0x39, 0x97, 0x3f, 0xa1, 0xcc, 0x8e, 0x89, 0xb1, 0x12, 0xc5, 0x60, 0x75, 0xdd, 0x50, 0x07, 0x39, 0x2b, 0x81, 0xb5, 0xf1, 0x14, 0xcd, 0x3c, 0x92, 0x19, 0xb7, 0x4a, 0xc9, 0xe5, 0xeb, 0x0f, 0x99, 0x53, 0xf1, 0x40, 0x77, 0x94, 0x54, 0x94, 0x35, 0x0e, 0xfe, 0xcd, 0x31, 0x81, 0x39, 0xc4, 0x81, 0x08, 0x33, 0x55, 0xba, 0x2b, 0xc4, 0xcc, 0xc1, 0x71, 0x98, 0xc9, 0x4f, 0x95, 0xbd, 0x55, 0x59, 0x2c, 0x7b, 0x1f, 0xd6, 0x4e, 0x90, 0x7d, 0x8e, 0xb0, 0x53, 0x95, 0x23, 0xb0, 0x53, 0x15, 0x8d, 0x3a, 0x92, 0xd8, 0x29, 0x82, 0xa0, 0x7c, 0x89, 0x94, 0xbc, 0xe6, 0x85, 0x31, 0xa4, 0x28, 0xed, 0xb4, 0xda, 0x86, 0x29, 0x8f, 0xb4, 0x13, 0x0b, 0xdd, 0xdc, 0x91, 0xaa, 0x27, 0x56, 0xc5, 0x0a, 0x84, 0x8d, 0xfc, 0x3d, 0x2d, 0x87, 0x07, 0xd1, 0xa6, 0x17, 0x27, 0x60, 0x1b, 0x57, 0xdb, 0x0f, 0x0d, 0xd6, 0x8c, 0xa8, 0x7a, 0xf9, 0xdb, 0x8c, 0xd7, 0x5d, 0x11, 0x61, 0x09, 0xcc, 0xb2, 0x4e, 0x48, 0x68, 0x8c, 0xa8, 0x49, 0xa6, 0xe2, 0x70, 0xf5, 0xc5, 0x38, 0x44, 0x3d, 0x73, 0xb1, 0x66, 0xe3, 0x7e, 0x1e, 0x0e, 0xcb, 0x28, 0x4c, 0xb6, 0x3b, 0xc1, 0x46, 0xeb, 0xba, 0x73, 0x9d, 0x30, 0xc3, 0x47, 0xfb, 0x14, 0x1e, 0xc1, 0xfc, 0x50, 0x5a, 0x32, 0xc7, 0xf4, 0x11, 0x5d, 0xf0, 0x38, 0xe4, 0x3e, 0xab, 0x9e, 0x34, 0x32, 0xf1, 0x6d, 0xce, 0x00, 0x29, 0x94, 0x8b, 0xbf, 0xba, 0x50, 0xbe, 0x2f, 0x23, 0x78, 0x1b, 0x9d, 0xcb, 0xb5, 0x15, 0xb5, 0xbc, 0x5b, 0x87, 0x94, 0xb9, 0xf1, 0xef, 0xdb, 0x87, 0x94, 0x59, 0xf1, 0xef, 0xc5, 0x43, 0x4a, 0x81, 0xec, 0x46, 0x18, 0xbb, 0xa0, 0x84, 0x46, 0xa8, 0x39, 0xbd, 0x85, 0xd3, 0xe7, 0x60, 0xfa, 0xc9, 0x74, 0xc6, 0x9d, 0xa2, 0xf7, 0xc5, 0x6e, 0xe7, 0xfd, 0x4c, 0x0a, 0x59, 0xa4, 0xb1, 0x47, 0x63, 0xb4, 0x9e, 0xd8, 0xe3, 0x42, 0xad, 0xa5, 0x4c, 0xdb, 0x21, 0x77, 0x90, 0xda, 0x1d, 0xf9, 0xb4, 0x9d, 0xad, 0xed, 0x83, 0x49, 0x6b, 0xbb, 0xea, 0xa1, 0x2b, 0xb7, 0xb6, 0x75, 0x4c, 0xab, 0x55, 0xff, 0x23, 0x7a, 0x30, 0x69, 0x6d, 0xf3, 0x98, 0xa1, 0x35, 0xad, 0x55, 0xdf, 0x61, 0x69, 0x3b, 0xa4, 0xe9, 0x62, 0x20, 0xbd, 0x89, 0x9c, 0xfa, 0x60, 0xc1, 0xdd, 0xa9, 0xf6, 0x03, 0x97, 0xfc, 0x5e, 0xf8, 0x46, 0xc7, 0x3c, 0x2a, 0xb5, 0x88, 0x46, 0x88, 0x9e, 0x10, 0x1a, 0x88, 0xd4, 0x8c, 0xd2, 0x59, 0x46, 0xe9, 0x8c, 0xd6, 0xa2, 0xd4, 0xe8, 0xfe, 0x58, 0x3d, 0xe8, 0x6b, 0xa5, 0xb3, 0x73, 0x23, 0x7a, 0x65, 0x0a, 0x7e, 0x19, 0x43, 0x96, 0xf0, 0x44, 0x0c, 0x35, 0x7f, 0x47, 0xd8, 0x7d, 0x00, 0xfd, 0xe8, 0x6b, 0x0e, 0x99, 0x22, 0xd7, 0xbe, 0xc8, 0xbe, 0xca, 0x71, 0x79, 0xa6, 0x7a, 0x32, 0x94, 0xe5, 0x9c, 0xe0, 0xd4, 0x17, 0xb7, 0xa2, 0x1d, 0x6d, 0xf4, 0xfc, 0x40, 0x29, 0x94, 0x69, 0xbf, 0x93, 0x85, 0xfd, 0x90, 0xa7, 0x38, 0x69, 0xa7, 0xaf, 0xa4, 0xe4, 0xa0, 0xef, 0xb9, 0x90, 0x9c, 0xe6, 0x4b, 0xfa, 0xc9, 0x4c, 0xe4, 0x23, 0x3b, 0xc6, 0x26, 0x97, 0x00, 0x9f, 0x1b, 0x6f, 0xe5, 0x11, 0x81, 0xc9, 0xf1, 0xd1, 0x2c, 0x5f, 0x6c, 0x11, 0x97, 0x2c, 0xec, 0x4c, 0x94, 0xed, 0x68, 0x79, 0xa2, 0x4d, 0x7e, 0x30, 0x64, 0xf4, 0x79, 0x84, 0x2d, 0xea, 0xf3, 0x04, 0x01, 0x86, 0x58, 0xfe, 0x25, 0x6c, 0xdd, 0xca, 0x8f, 0xc7, 0x0e, 0x5a, 0x4d, 0x97, 0xb0, 0x75, 0x83, 0x09, 0x5b, 0xb7, 0x54, 0xb9, 0x8d, 0xb1, 0xfb, 0x07, 0x41, 0x9f, 0xa3, 0x87, 0xd3, 0xf6, 0x5b, 0xd2, 0xb8, 0x63, 0x2e, 0x5a, 0xbc, 0xd9, 0x61, 0x69, 0x2b, 0xda, 0xbc, 0x8a, 0xfe, 0xef, 0xb0, 0x7c, 0xd7, 0x12, 0x47, 0x15, 0x2d, 0x43, 0x76, 0xaf, 0x32, 0x39, 0x7d, 0x34, 0x36, 0x25, 0x0c, 0xe5, 0xd5, 0x05, 0x3e, 0xbf, 0xc2, 0x5a, 0x4d, 0x2d, 0x33, 0xb6, 0x04, 0xb5, 0x79, 0xe2, 0xb6, 0xe6, 0xcf, 0xd5, 0x8d, 0x69, 0xd7, 0xd5, 0x56, 0x6d, 0x25, 0xd9, 0x15, 0xe9, 0xfd, 0x55, 0x7f, 0xbe, 0x72, 0xbd, 0xbf, 0x4a, 0xfd, 0x3c, 0xbd, 0xbf, 0x1a, 0xfe, 0x1e, 0xbd, 0xbf, 0x1a, 0xfe, 0x2b, 0x7a, 0xff, 0x95, 0xcd, 0xeb, 0x2c, 0x38, 0xad, 0x6e, 0xf7, 0x0e, 0xcf, 0xd5, 0x39, 0x91, 0x0b, 0x56, 0xeb, 0xa1, 0x91, 0xdf, 0x37, 0xc2, 0x62, 0xaa, 0x77, 0xf5, 0x3f, 0x5c, 0xe1, 0x08, 0x7d, 0x3e, 0xd5, 0xbc, 0xba, 0x3c, 0xda, 0x98, 0xac, 0xb9, 0x23, 0x3e, 0xaa, 0xb5, 0x4a, 0xab, 0xcb, 0x02, 0xae, 0xf9, 0xaa, 0xf8, 0xa8, 0x16, 0xef, 0xd6, 0xfd, 0x10, 0x61, 0x5a, 0xac, 0xe9, 0xc7, 0x3c, 0x76, 0x55, 0x08, 0xe8, 0xd3, 0x28, 0xbe, 0x0b, 0x20, 0x74, 0x8f, 0x93, 0x56, 0x66, 0xde, 0x40, 0xe7, 0x38, 0xa2, 0x9e, 0x97, 0xcf, 0x2e, 0x07, 0xc8, 0xd8, 0x2e, 0x36, 0xfe, 0x9e, 0x0a, 0x76, 0x67, 0x39, 0x6a, 0x9e, 0xf4, 0x6d, 0x85, 0x62, 0xf4, 0x2f, 0xe1, 0xef, 0x02, 0x28, 0xc5, 0xef, 0x32, 0xfe, 0x9e, 0x01, 0x2e, 0x67, 0x25, 0x54, 0xf0, 0xb7, 0x0d, 0xbc, 0x98, 0x4f, 0x2d, 0x86, 0xd5, 0xe1, 0xd3, 0xc0, 0x50, 0x37, 0x96, 0x94, 0x01, 0x71, 0x3e, 0x1a, 0x81, 0x7d, 0xda, 0x06, 0x4c, 0xe5, 0x53, 0x56, 0x02, 0x72, 0xdf, 0xc9, 0x3c, 0xb6, 0xb1, 0x3d, 0x15, 0xfe, 0x31, 0x3e, 0x2f, 0x10, 0x31, 0x9f, 0x91, 0x3a, 0x0e, 0x85, 0x6f, 0xc3, 0xdf, 0x68, 0x15, 0x3a, 0xf5, 0xdb, 0x9b, 0xbc, 0x2b, 0xf0, 0xb2, 0x56, 0xd7, 0x33, 0x57, 0x64, 0x63, 0xc5, 0xe7, 0xe4, 0x52, 0x52, 0x8e, 0xd6, 0x8a, 0xb9, 0xd0, 0x32, 0x3e, 0xd3, 0x0c, 0xfd, 0x6d, 0x74, 0x82, 0x21, 0x72, 0x7c, 0x07, 0xf3, 0xa9, 0x46, 0xbe, 0x05, 0x38, 0x80, 0x5c, 0xdf, 0x1f, 0xe7, 0x0c, 0x88, 0x5f, 0x0f, 0xdd, 0x34, 0x49, 0xfa, 0x1a, 0xd6, 0xd6, 0x46, 0xb7, 0xb4, 0x8a, 0x7a, 0x8d, 0x2d, 0xa6, 0x1b, 0x03, 0x5e, 0xe2, 0x31, 0xc2, 0x82, 0xfb, 0x14, 0x8b, 0x9c, 0xbd, 0x2f, 0x56, 0x68, 0xb2, 0xb9, 0xde, 0x1b, 0x62, 0xa9, 0x77, 0x80, 0x56, 0xaa, 0x63, 0x5b, 0x7a, 0xe9, 0x74, 0x3c, 0xed, 0x94, 0x14, 0x3e, 0x53, 0xed, 0xd3, 0x73, 0x62, 0x5f, 0x95, 0xb1, 0xcc, 0xee, 0x34, 0x56, 0x24, 0xc7, 0x5e, 0x82, 0x93, 0x35, 0x1c, 0x7e, 0x4b, 0xa3, 0x67, 0x71, 0x02, 0xa8, 0x09, 0x39, 0xf4, 0x23, 0xf3, 0xfe, 0x88, 0x3d, 0x61, 0x61, 0xc8, 0x63, 0x47, 0x48, 0x7e, 0xf3, 0xe6, 0x6f, 0xde, 0x24, 0xad, 0xbc, 0x6d, 0x25, 0x5a, 0x5c, 0x07, 0x15, 0x5b, 0x61, 0xce, 0xa1, 0xfb, 0x0e, 0xdd, 0xc7, 0x27, 0xd8, 0xe9, 0x49, 0x13, 0x77, 0x22, 0xcb, 0x93, 0x1b, 0xc4, 0x6d, 0xcd, 0xac, 0x5d, 0x5b, 0xec, 0x95, 0xdb, 0x19, 0x22, 0x0f, 0xd6, 0xce, 0x51, 0xbf, 0x53, 0x70, 0xe4, 0xd7, 0x7c, 0x9b, 0xf0, 0x77, 0xc8, 0xb7, 0x1c, 0x2c, 0xa1, 0x65, 0xbe, 0x85, 0xc1, 0xe0, 0xbc, 0xd3, 0xc6, 0x52, 0xcf, 0xff, 0xa6, 0xf9, 0xe1, 0xb6, 0x5d, 0x74, 0x9f, 0x50, 0x5b, 0xb3, 0x28, 0x45, 0xa9, 0xc0, 0xbc, 0xaf, 0xa2, 0x13, 0x2b, 0xe8, 0x3c, 0x7a, 0xbb, 0x4b, 0x9b, 0x53, 0x29, 0x92, 0xbb, 0x8c, 0x25, 0xda, 0xed, 0xe8, 0x1b, 0x15, 0xfd, 0xb4, 0x06, 0x30, 0xa2, 0xa5, 0xa7, 0x0f, 0xd1, 0xc8, 0x34, 0x10, 0x1c, 0x75, 0x83, 0x08, 0x89, 0xcb, 0x69, 0x16, 0xf7, 0x8f, 0xc8, 0x53, 0x82, 0xdb, 0x49, 0xb7, 0x9f, 0x47, 0xf7, 0xea, 0x2c, 0x87, 0xbc, 0xa0, 0x59, 0x31, 0x20, 0xbe, 0x5c, 0xff, 0x31, 0x24, 0x5f, 0x17, 0xfc, 0xc4, 0x61, 0x92, 0x27, 0x15, 0xf8, 0x8b, 0xe8, 0x54, 0x56, 0x2b, 0x8d, 0xbe, 0x3b, 0x81, 0xc7, 0xf8, 0xe3, 0x67, 0x6b, 0x82, 0x64, 0x76, 0x2e, 0x57, 0x47, 0xc1, 0x61, 0x29, 0xa3, 0x13, 0x66, 0x1c, 0x5d, 0x46, 0x17, 0xd9, 0x9f, 0x36, 0x17, 0xd9, 0x35, 0x34, 0xbe, 0x9d, 0x32, 0x2b, 0xd1, 0x9e, 0x9c, 0x93, 0x40, 0xbb, 0x2f, 0x75, 0x36, 0x22, 0x80, 0xf0, 0xad, 0xb2, 0x42, 0x7d, 0x6f, 0x34, 0x63, 0x5b, 0x6f, 0xcb, 0xec, 0x6d, 0xb1, 0x60, 0x91, 0x46, 0x99, 0x4f, 0x61, 0x2b, 0x17, 0x68, 0x9c, 0x73, 0x2d, 0x9d, 0x55, 0xa6, 0xc9, 0x81, 0xc3, 0x8a, 0x45, 0xb4, 0xe2, 0x85, 0x3e, 0xba, 0x7b, 0x7c, 0xa5, 0x84, 0x7c, 0xb9, 0x3c, 0xa2, 0xb3, 0x99, 0xe3, 0xba, 0x86, 0xa7, 0x9c, 0xe9, 0x26, 0xd7, 0x77, 0x1f, 0x3e, 0xe5, 0xa1, 0xa2, 0x69, 0x95, 0xa0, 0xb7, 0x3d, 0x26, 0x9b, 0x3e, 0x1c, 0x28, 0x8c, 0x29, 0x01, 0xdf, 0x7d, 0xc4, 0xa3, 0x30, 0xf5, 0x22, 0xcc, 0x85, 0xee, 0x76, 0x00, 0xed, 0x76, 0x0e, 0x8b, 0x22, 0xfb, 0xca, 0x69, 0xce, 0x03, 0x7d, 0x8b, 0xc5, 0x1c, 0xc5, 0x05, 0x3e, 0xc9, 0x48, 0xcc, 0x93, 0x5c, 0xc8, 0xa9, 0x1b, 0xe4, 0x7c, 0x2d, 0x8c, 0x41, 0x13, 0x5a, 0x28, 0x67, 0xd8, 0xc2, 0x2c, 0x2e, 0xec, 0x82, 0x62, 0xf9, 0x2b, 0x41, 0x18, 0x3b, 0x6c, 0xab, 0x2a, 0xa8, 0x56, 0xb2, 0x7c, 0x0b, 0x69, 0xa7, 0xd1, 0x3f, 0xb8, 0xc0, 0x58, 0xb1, 0x9c, 0xf1, 0x6a, 0x0c, 0xdd, 0xae, 0x51, 0xd1, 0xed, 0xd5, 0x23, 0x17, 0x0c, 0xfe, 0x0d, 0x71, 0xda, 0xad, 0x1b, 0x5c, 0x5d, 0x72, 0x68, 0x50, 0x71, 0xa0, 0x04, 0xd3, 0xdb, 0x32, 0x0b, 0x68, 0x0e, 0x5d, 0xd4, 0xb7, 0x93, 0xcb, 0xdc, 0xa0, 0xa5, 0xba, 0x13, 0x53, 0x04, 0x28, 0x3e, 0x41, 0xc9, 0x74, 0xfc, 0x96, 0x16, 0xd2, 0x8d, 0x50, 0xbc, 0x44, 0xbb, 0x63, 0x85, 0xe5, 0x61, 0x14, 0x77, 0x52, 0x7d, 0x48, 0x12, 0x00, 0x6b, 0x90, 0xcf, 0x1a, 0xc8, 0x87, 0x49, 0x0d, 0xa4, 0xfa, 0xae, 0x4b, 0x68, 0x20, 0x9f, 0x63, 0x4d, 0x54, 0xaf, 0x89, 0x7e, 0x98, 0xd4, 0x3f, 0xe2, 0xd6, 0xc4, 0x68, 0x7e, 0xbc, 0x4f, 0x10, 0xee, 0x46, 0xf3, 0x2f, 0x69, 0x4d, 0x7c, 0x88, 0x21, 0x5b, 0xae, 0xd8, 0x9a, 0xd8, 0x2f, 0x64, 0xda, 0x95, 0xf1, 0x0e, 0x21, 0xe1, 0x98, 0xdb, 0xff, 0x1f, 0x21, 0xe5, 0xaa, 0x5f, 0xb9, 0x22, 0x29, 0xb7, 0x9a, 0xeb, 0xf4, 0x8b, 0xf1, 0x52, 0x8e, 0x79, 0x7d, 0xbf, 0x56, 0xa7, 0x77, 0xd2, 0x66, 0xdb, 0x4a, 0x95, 0x2a, 0xda, 0xd5, 0xcc, 0x1c, 0x76, 0x87, 0xcf, 0x25, 0x46, 0xfb, 0xd5, 0xc6, 0xb4, 0xb8, 0x4c, 0x3b, 0x7f, 0x8f, 0x84, 0xbb, 0x52, 0xd9, 0x5d, 0xfd, 0x9b, 0x2b, 0xb4, 0x19, 0x9e, 0xe0, 0x7a, 0xfd, 0xe1, 0x73, 0xa5, 0xf7, 0x09, 0x86, 0x75, 0xad, 0x26, 0xbd, 0x17, 0x29, 0xcd, 0x49, 0xfb, 0xc8, 0xea, 0xf2, 0xfd, 0x10, 0xec, 0xc1, 0x29, 0x62, 0x54, 0x52, 0xa6, 0x91, 0xc8, 0xd8, 0xd4, 0xd8, 0x00, 0xad, 0x98, 0x10, 0x27, 0x21, 0xe4, 0xdb, 0x2c, 0x4a, 0x9c, 0x0f, 0x9e, 0xd0, 0xf8, 0x20, 0xdf, 0x6b, 0x12, 0xcd, 0xf9, 0xaf, 0xc8, 0xf5, 0x14, 0xd9, 0xd1, 0xfc, 0xf7, 0xce, 0xb8, 0x5e, 0x1c, 0x32, 0x5a, 0x15, 0x0f, 0x49, 0x2f, 0x45, 0x73, 0xad, 0xbc, 0xf4, 0xb8, 0xa1, 0xb8, 0xd1, 0x8b, 0xf5, 0xf5, 0xfc, 0xf1, 0xfa, 0x7a, 0xf5, 0xe9, 0x54, 0xfc, 0xc7, 0x4f, 0x35, 0xbb, 0x5c, 0x2b, 0xe8, 0xcb, 0xb8, 0x15, 0x3e, 0x4b, 0xd5, 0xd8, 0x67, 0xb8, 0xd4, 0xfd, 0x41, 0x1b, 0xef, 0x16, 0xd0, 0xf3, 0xee, 0xcc, 0x61, 0x2f, 0xf3, 0x1b, 0xd5, 0x9e, 0xe8, 0xc9, 0x90, 0x71, 0x0e, 0xd3, 0x82, 0x9d, 0xfb, 0x4d, 0xd1, 0x4c, 0x94, 0xc7, 0x33, 0x51, 0x0f, 0xbf, 0x3f, 0x68, 0xf4, 0xf5, 0x06, 0x8d, 0x28, 0x65, 0xea, 0x1c, 0x92, 0x62, 0x76, 0xf8, 0x30, 0xb7, 0x27, 0x1c, 0x80, 0xe1, 0x07, 0x9d, 0x26, 0x9e, 0x07, 0xdd, 0x5f, 0x37, 0x88, 0xba, 0xf0, 0x91, 0xd0, 0x6a, 0xa6, 0x48, 0xb3, 0xd5, 0x10, 0x85, 0x95, 0x12, 0xc7, 0x3b, 0x57, 0x20, 0xee, 0x30, 0xc9, 0xe5, 0x10, 0x94, 0x10, 0x58, 0xb7, 0x5f, 0x62, 0x0a, 0xbe, 0x5b, 0x4a, 0x29, 0x44, 0x2e, 0x4a, 0xb1, 0x4e, 0xd1, 0xfa, 0x83, 0xf0, 0xd8, 0xd6, 0x67, 0x41, 0x1f, 0x34, 0xdd, 0xd8, 0xa3, 0xaa, 0xa3, 0x5f, 0xa6, 0xfb, 0x9b, 0x39, 0xf6, 0x5e, 0x9a, 0xc3, 0xa2, 0x1d, 0x79, 0xd5, 0x23, 0x63, 0xb5, 0xe2, 0xbc, 0x92, 0x10, 0x64, 0xcc, 0xb5, 0x71, 0xe9, 0xc8, 0x95, 0x4c, 0x4e, 0x1d, 0x42, 0xb6, 0xbe, 0xe6, 0x63, 0xf5, 0xb8, 0xaf, 0x21, 0x34, 0x97, 0x75, 0x8d, 0x07, 0x53, 0x21, 0xe0, 0x14, 0x53, 0x64, 0x97, 0x79, 0xb3, 0xc8, 0x37, 0x98, 0x1d, 0x19, 0x43, 0x2c, 0xe9, 0x39, 0x66, 0x27, 0x9d, 0xb8, 0xa8, 0x3b, 0xcb, 0xdf, 0x4b, 0x1a, 0xa9, 0x16, 0x1f, 0x06, 0xf5, 0xa5, 0x3b, 0x41, 0xc2, 0xaf, 0x93, 0xc1, 0x00, 0x4b, 0x0a, 0x5f, 0xe2, 0x64, 0x0a, 0x8f, 0x75, 0x02, 0xca, 0x11, 0x9f, 0x26, 0x47, 0x0a, 0x69, 0x25, 0x03, 0xbb, 0x48, 0x76, 0xe4, 0x18, 0x67, 0x40, 0x26, 0xdc, 0x15, 0x14, 0x50, 0x13, 0xbf, 0x7e, 0xb9, 0x6e, 0x10, 0xa5, 0x07, 0x85, 0x3f, 0x83, 0x12, 0x41, 0xc4, 0xcc, 0xe5, 0x39, 0xd9, 0x7e, 0xc6, 0x89, 0x19, 0x2d, 0x54, 0xf2, 0x5b, 0xc6, 0x33, 0xc5, 0xe4, 0xdf, 0x4e, 0x63, 0x3d, 0x28, 0xe1, 0x76, 0x63, 0x4d, 0x96, 0xb0, 0x5c, 0x18, 0xe2, 0x9a, 0x40, 0x2a, 0x2e, 0x43, 0xde, 0x9a, 0x91, 0x0b, 0x2f, 0xcd, 0x1f, 0xb9, 0x50, 0xcb, 0xe7, 0xf7, 0x92, 0x76, 0xb8, 0x91, 0xd2, 0x09, 0x5c, 0x5d, 0xb8, 0x0d, 0xbf, 0x33, 0xc5, 0x6e, 0xdb, 0x9c, 0x32, 0xc8, 0xc1, 0xda, 0xe5, 0xa0, 0xcf, 0x0c, 0xa4, 0xbb, 0x4d, 0x37, 0x56, 0x82, 0x31, 0x3e, 0x5f, 0x8c, 0xa5, 0x8c, 0x30, 0x0d, 0x7c, 0xd3, 0x69, 0xa0, 0x11, 0xad, 0xdb, 0xf3, 0x78, 0x07, 0x25, 0x5a, 0x1c, 0xec, 0x5b, 0x45, 0xab, 0x6d, 0xf8, 0x3c, 0xe8, 0xfc, 0x78, 0x7d, 0x46, 0x4f, 0x71, 0xce, 0x3b, 0x46, 0xf7, 0x33, 0x8f, 0x91, 0x30, 0x87, 0x1d, 0x34, 0x2b, 0xb9, 0xe8, 0x67, 0xde, 0x35, 0xde, 0x9f, 0x59, 0x0d, 0x36, 0xae, 0xeb, 0xe8, 0x08, 0xad, 0x0d, 0x92, 0xbe, 0xa7, 0xc5, 0xdd, 0xcc, 0xb2, 0x69, 0x63, 0x2a, 0xbd, 0x8d, 0x6e, 0x67, 0xfb, 0x0a, 0xe0, 0xb8, 0xbc, 0x0c, 0xac, 0xf6, 0x56, 0xc8, 0x23, 0x7d, 0xa5, 0xfa, 0x63, 0xf5, 0xdc, 0x8d, 0xf3, 0xc0, 0xe8, 0xc1, 0x3a, 0xa1, 0xf5, 0x77, 0xbe, 0x60, 0x40, 0xd0, 0xd6, 0xe8, 0x2a, 0xe6, 0xf2, 0xdb, 0xed, 0xed, 0x60, 0xa1, 0x78, 0x04, 0x7b, 0xc1, 0x24, 0x65, 0xb5, 0x0d, 0x35, 0x89, 0xb0, 0x45, 0xd8, 0xfa, 0xda, 0x38, 0x73, 0xe3, 0x3d, 0xe6, 0xf7, 0x1f, 0x0e, 0x8f, 0xbe, 0x15, 0x0b, 0xdc, 0x9f, 0x1c, 0x99, 0x76, 0x40, 0x60, 0x2d, 0xcf, 0xc9, 0x57, 0x88, 0x39, 0x79, 0xb4, 0x0f, 0xaa, 0xad, 0x2e, 0x59, 0xac, 0x14, 0x58, 0x47, 0x18, 0x09, 0xe5, 0xde, 0xe8, 0x01, 0xb3, 0x5c, 0x6e, 0x9d, 0xc7, 0x3c, 0xca, 0x64, 0x6f, 0xa0, 0x72, 0x14, 0x94, 0xcb, 0x3c, 0xf2, 0x77, 0x1b, 0xd1, 0x9e, 0x98, 0xc5, 0xff, 0xec, 0x24, 0xca, 0x78, 0x03, 0x6b, 0x4a, 0x31, 0x86, 0xaa, 0x98, 0xa8, 0xf2, 0xb3, 0x97, 0x34, 0xcc, 0xe5, 0x0b, 0x7a, 0x4c, 0xd6, 0xf4, 0xb3, 0xb7, 0x84, 0x96, 0xab, 0x68, 0x6b, 0x6e, 0xbc, 0x3e, 0xc6, 0x50, 0x6d, 0xf4, 0xdc, 0xfe, 0xef, 0x62, 0xba, 0xbd, 0x35, 0x23, 0x9f, 0x8d, 0x2a, 0xcd, 0x72, 0x91, 0x36, 0x2e, 0x8a, 0x34, 0xe0, 0xed, 0x04, 0x23, 0xa7, 0x8f, 0x2a, 0xb3, 0x23, 0x63, 0xe3, 0xfc, 0xfa, 0x14, 0xab, 0xfb, 0x14, 0x18, 0xcd, 0x31, 0xa2, 0x63, 0xa2, 0x33, 0xa7, 0xf0, 0x5f, 0x4f, 0xa7, 0x61, 0x68, 0xdf, 0x4f, 0x13, 0x2c, 0x45, 0xfd, 0xce, 0x22, 0x6c, 0xef, 0x8d, 0x58, 0x83, 0x2c, 0x6e, 0x6d, 0x8b, 0xcc, 0xb6, 0xe2, 0xd8, 0x98, 0x83, 0xb4, 0xc8, 0x47, 0x90, 0x4b, 0xce, 0x54, 0xf7, 0x33, 0x2c, 0x82, 0x4f, 0xfa, 0x2e, 0x65, 0xdb, 0xa9, 0xcf, 0x09, 0x39, 0x78, 0xf1, 0x5c, 0xc6, 0x15, 0x5b, 0x44, 0x5b, 0xb5, 0x95, 0x28, 0x51, 0x7c, 0x56, 0x11, 0x17, 0xf3, 0xbe, 0x70, 0x85, 0xab, 0x51, 0xc2, 0xc9, 0x91, 0xa7, 0x42, 0x57, 0x7c, 0x66, 0x5b, 0x5d, 0x2b, 0xf8, 0xbe, 0x77, 0x47, 0x42, 0x7e, 0x58, 0x30, 0x6e, 0xc5, 0x0c, 0x94, 0xbe, 0xde, 0x97, 0xc5, 0xc8, 0x53, 0xcd, 0x1d, 0xd1, 0x68, 0x72, 0xe4, 0x89, 0xb4, 0xbf, 0x20, 0xcf, 0xad, 0xaa, 0xbe, 0xb4, 0xb4, 0x3e, 0xbe, 0xf5, 0x97, 0x79, 0x9e, 0xf4, 0x09, 0xe6, 0x01, 0x05, 0x29, 0xf3, 0x9c, 0xb4, 0x07, 0x11, 0xe1, 0x2a, 0xe7, 0x11, 0x79, 0x17, 0xb8, 0xd0, 0x02, 0x58, 0xc5, 0x63, 0x53, 0xd4, 0x53, 0x86, 0x6b, 0xee, 0xe4, 0x72, 0x22, 0xa9, 0xf6, 0x16, 0xcd, 0x7d, 0x08, 0x6b, 0x7c, 0x5f, 0x8c, 0xf4, 0xfb, 0xc2, 0x42, 0xc8, 0xe9, 0x8a, 0x38, 0x0a, 0xc1, 0xd2, 0xd5, 0xfe, 0xc4, 0x5a, 0xdf, 0x7d, 0x5d, 0x41, 0x71, 0x92, 0x95, 0x98, 0x2b, 0x71, 0x2e, 0x43, 0x53, 0xbd, 0x54, 0x76, 0x05, 0x06, 0x68, 0xd7, 0x7a, 0x91, 0xf1, 0xfd, 0xfb, 0x6c, 0xd5, 0x81, 0x07, 0x65, 0x13, 0x52, 0x69, 0x79, 0xfc, 0xa6, 0xb1, 0x50, 0x09, 0x4a, 0xbc, 0x55, 0x48, 0xa9, 0x3a, 0xf2, 0xbb, 0xb0, 0xee, 0xcb, 0x3c, 0x6b, 0x42, 0x27, 0x0e, 0xd0, 0x38, 0xf1, 0xdb, 0xaf, 0xd1, 0xed, 0xc6, 0xef, 0xbe, 0x29, 0x67, 0x8a, 0x50, 0x4f, 0xc9, 0x2a, 0x28, 0xa8, 0x25, 0x2b, 0x22, 0xcd, 0xc6, 0x7f, 0x38, 0xae, 0xb1, 0x3a, 0xc0, 0xd7, 0x05, 0xd1, 0xa0, 0xc3, 0x87, 0x96, 0x5d, 0x88, 0x76, 0xd2, 0x96, 0x58, 0xe9, 0x26, 0x6f, 0x23, 0xdd, 0xb8, 0x86, 0x5f, 0x47, 0xd0, 0x9e, 0xb1, 0xa4, 0xa7, 0x50, 0xb2, 0x2f, 0xae, 0x65, 0x21, 0xf8, 0xae, 0x0d, 0x01, 0x3c, 0xad, 0xd9, 0x83, 0x15, 0x4e, 0x9a, 0x09, 0xf1, 0x6a, 0x16, 0x64, 0x2d, 0xbb, 0xea, 0x34, 0x1b, 0xb2, 0xc1, 0x59, 0x45, 0x36, 0x30, 0xdb, 0x90, 0x8b, 0x11, 0x3b, 0x0a, 0x7f, 0xcf, 0x84, 0x66, 0xde, 0xe1, 0xd9, 0x8a, 0xf4, 0xd0, 0x8e, 0x4f, 0xd8, 0x3a, 0x29, 0x5a, 0x11, 0xb7, 0x19, 0xb9, 0x0f, 0x54, 0x30, 0xd7, 0xfb, 0x5e, 0x6a, 0x5b, 0x91, 0x8b, 0x66, 0x1c, 0x90, 0xeb, 0x45, 0x99, 0xa6, 0xc5, 0xc8, 0x5f, 0x3e, 0x52, 0x79, 0x26, 0x9d, 0x6f, 0x4a, 0x92, 0xab, 0x6b, 0x8a, 0x75, 0x9e, 0x6c, 0x62, 0xec, 0x15, 0x29, 0xd9, 0xec, 0x63, 0x49, 0xf1, 0xd1, 0xaf, 0xcc, 0xa1, 0xf5, 0x0f, 0xb4, 0x42, 0x29, 0x6d, 0x54, 0xf5, 0xaa, 0xcf, 0x1f, 0x55, 0xe5, 0xb5, 0x5b, 0x75, 0x3c, 0x9f, 0xb6, 0x8d, 0xe4, 0xb2, 0xdc, 0x25, 0xad, 0x2a, 0x74, 0x4a, 0xb1, 0xc4, 0xfa, 0x4b, 0x80, 0x1d, 0x8a, 0x4c, 0xab, 0x23, 0x69, 0xa5, 0x88, 0xb6, 0x42, 0x12, 0x52, 0x56, 0x48, 0x3e, 0x89, 0x3d, 0xff, 0x49, 0x5a, 0x07, 0x29, 0xf5, 0x5c, 0xb4, 0x0e, 0x72, 0xcf, 0x3d, 0xf6, 0xf7, 0x07, 0x6b, 0x4e, 0x4b, 0xad, 0x4a, 0xd8, 0x57, 0x08, 0xc6, 0x60, 0x6b, 0x41, 0xd5, 0xb8, 0x35, 0x90, 0x22, 0xa7, 0x95, 0x6c, 0x49, 0xfb, 0x68, 0x87, 0xb9, 0x32, 0x39, 0xe7, 0x2b, 0x81, 0x5e, 0xb3, 0x8e, 0xd7, 0x8a, 0xea, 0x52, 0xd6, 0x8a, 0xf6, 0x05, 0xe8, 0x1c, 0xc8, 0xa3, 0xee, 0xd3, 0x52, 0xf4, 0xed, 0x21, 0x8f, 0x7d, 0x6c, 0x1b, 0xad, 0x8e, 0x94, 0x5a, 0x9d, 0xd5, 0x12, 0x62, 0x59, 0x0a, 0x73, 0x4b, 0xde, 0x15, 0x5f, 0x1d, 0xc9, 0x2b, 0x23, 0x1f, 0xe6, 0xf3, 0xc4, 0xe8, 0xbe, 0x04, 0x9a, 0x23, 0xa8, 0xbd, 0xf4, 0xea, 0xc8, 0x9a, 0xfe, 0x2b, 0xd2, 0x64, 0x15, 0xce, 0x7f, 0xdd, 0xb8, 0xb1, 0xfe, 0xb4, 0xd9, 0xe7, 0x9a, 0xef, 0x25, 0x66, 0x9f, 0x2f, 0x5e, 0x19, 0xf9, 0xf4, 0xdf, 0x3b, 0xce, 0x7f, 0xa5, 0x1c, 0xc8, 0xbf, 0x70, 0x6c, 0x27, 0x5b, 0xf2, 0x1d, 0x60, 0x2c, 0x9c, 0x89, 0x5c, 0x76, 0xdd, 0x3b, 0xdf, 0x8d, 0xb6, 0x13, 0x16, 0x50, 0xae, 0x66, 0x63, 0x1b, 0xa2, 0xb5, 0x8b, 0xfd, 0x5f, 0xa7, 0x84, 0xe9, 0xa6, 0x6d, 0xba, 0x6f, 0xc5, 0xce, 0x23, 0x75, 0xe2, 0xd6, 0xae, 0xd2, 0xb2, 0x6b, 0xb4, 0xb9, 0x20, 0xad, 0x35, 0x0f, 0x45, 0x1e, 0xae, 0x92, 0xa2, 0x50, 0x70, 0x95, 0x61, 0x8d, 0xaa, 0x8e, 0xbd, 0xbc, 0x6a, 0x66, 0xfc, 0x44, 0xa3, 0x82, 0xf9, 0x37, 0x66, 0xf3, 0x9c, 0x11, 0x8d, 0x56, 0x67, 0x14, 0x4c, 0x4a, 0xce, 0x42, 0xaa, 0x8b, 0x9c, 0x99, 0x58, 0xcb, 0x75, 0x49, 0xdd, 0x9c, 0xd7, 0xc6, 0xae, 0x67, 0x8c, 0x3d, 0x1d, 0x9f, 0x53, 0xb4, 0x43, 0x68, 0x09, 0x6b, 0x1a, 0x95, 0x89, 0x75, 0x72, 0x5e, 0xab, 0xde, 0x26, 0xdc, 0x4f, 0x90, 0x6e, 0xa4, 0x14, 0x11, 0x4c, 0xed, 0x93, 0xad, 0x9c, 0xf7, 0x68, 0x2d, 0xa7, 0xff, 0x81, 0xf8, 0x56, 0xf4, 0xd5, 0x68, 0x31, 0x63, 0x7c, 0x13, 0xc7, 0xdf, 0x88, 0xf1, 0xdf, 0xe1, 0x75, 0x6c, 0xe4, 0xca, 0xb5, 0xea, 0xb5, 0xb9, 0xc8, 0xc9, 0x3c, 0x2b, 0xfa, 0x5a, 0x12, 0x9e, 0xb1, 0x3d, 0x0c, 0x4f, 0x8e, 0x38, 0x41, 0xa9, 0xb6, 0x6c, 0xec, 0xa9, 0xe4, 0x49, 0x98, 0x4c, 0x07, 0xe7, 0xd2, 0x68, 0xe1, 0x87, 0x57, 0x44, 0x0b, 0x8b, 0x19, 0xb2, 0x7f, 0x25, 0x09, 0x77, 0xd1, 0x4a, 0x59, 0x8d, 0x03, 0xd7, 0xec, 0xe5, 0xd2, 0x7d, 0x9a, 0x55, 0x33, 0x59, 0xb1, 0x3b, 0x89, 0x12, 0xce, 0xa1, 0x5f, 0x5d, 0x92, 0x12, 0xea, 0x06, 0x3f, 0x87, 0x0e, 0x3e, 0x1c, 0x47, 0x07, 0x7b, 0xff, 0xa6, 0x24, 0x02, 0xef, 0xf0, 0xdc, 0x59, 0x74, 0x5f, 0x87, 0xdd, 0x29, 0xd9, 0x2f, 0x39, 0x56, 0x68, 0xd1, 0xa0, 0x7b, 0x9b, 0x6c, 0x0a, 0x9a, 0xfb, 0x10, 0xa3, 0xb8, 0xbe, 0x65, 0x9a, 0x8e, 0xb5, 0x43, 0x5d, 0x9f, 0x1c, 0x39, 0x25, 0xab, 0xcc, 0x0a, 0x3c, 0x57, 0x48, 0x54, 0x8e, 0x9a, 0x9e, 0xa7, 0x6a, 0xb5, 0x7c, 0x68, 0xb0, 0x7a, 0x44, 0x6d, 0xb7, 0x66, 0x5e, 0x62, 0xbc, 0x77, 0x19, 0x96, 0xe6, 0x62, 0xdc, 0x1c, 0x10, 0xab, 0xfd, 0x78, 0x4d, 0x93, 0x99, 0xc6, 0x7a, 0xb5, 0xf1, 0xdc, 0x42, 0xdf, 0xfa, 0xd0, 0x94, 0xf1, 0x69, 0xad, 0xd9, 0x29, 0xb1, 0xf5, 0x1e, 0x8f, 0xa2, 0x8f, 0x4a, 0x3d, 0x12, 0x96, 0xbf, 0x21, 0x3e, 0xea, 0xdb, 0x38, 0x98, 0x32, 0xea, 0x7b, 0xcc, 0xe7, 0x09, 0xc5, 0x7c, 0x55, 0xc1, 0x02, 0xcc, 0xcb, 0x1a, 0x99, 0x55, 0x25, 0x89, 0x99, 0x90, 0x64, 0xcd, 0x58, 0xf7, 0x3e, 0xa8, 0xad, 0x7e, 0x12, 0x67, 0xe9, 0xf7, 0x88, 0x95, 0x4e, 0x97, 0xec, 0xff, 0x47, 0xff, 0x8e, 0x36, 0x3f, 0x35, 0x7e, 0xae, 0x2f, 0xd5, 0xe2, 0xab, 0x79, 0x9b, 0xdb, 0xfc, 0x76, 0xcd, 0xe2, 0x8b, 0xb7, 0x39, 0xf5, 0xfe, 0xe6, 0x2b, 0x6c, 0x73, 0xad, 0xef, 0xdf, 0x12, 0xb7, 0x4a, 0x79, 0x7d, 0x4c, 0xcd, 0x67, 0x57, 0x68, 0x95, 0x6e, 0x21, 0x18, 0x7d, 0x13, 0x52, 0x57, 0xc8, 0x8c, 0xe7, 0x51, 0xbe, 0xac, 0x04, 0x8f, 0x5a, 0xa6, 0xac, 0x4a, 0xd0, 0x48, 0x00, 0x65, 0x64, 0x0e, 0xcf, 0x2c, 0xc9, 0xb2, 0x4b, 0xb6, 0x43, 0x09, 0xad, 0x54, 0xa0, 0x33, 0x09, 0x38, 0xc7, 0x1c, 0xb2, 0x73, 0xb5, 0xf9, 0xbb, 0x1c, 0xab, 0x85, 0x4f, 0x73, 0x82, 0xae, 0xac, 0x45, 0xbd, 0x1f, 0x3e, 0xc0, 0x65, 0x97, 0x44, 0x41, 0x48, 0x52, 0xdf, 0xd7, 0x39, 0x56, 0x2d, 0xdb, 0xe6, 0x39, 0x7f, 0xdb, 0x4a, 0xa5, 0xf9, 0x9b, 0xb8, 0xdc, 0x21, 0x99, 0x43, 0xb2, 0xc7, 0x6a, 0x09, 0xe5, 0xda, 0x92, 0x92, 0x21, 0xcc, 0x77, 0x43, 0xfe, 0x3f, 0x24, 0x63, 0x7c, 0xf5, 0x97, 0x90, 0x31, 0x39, 0x69, 0x32, 0x66, 0x54, 0xa3, 0x31, 0xa6, 0x2f, 0x9f, 0x72, 0xe5, 0xf2, 0xc5, 0xd7, 0x6e, 0xbb, 0xea, 0x5b, 0x97, 0x95, 0x2f, 0xbe, 0x3b, 0x2f, 0x23, 0x5f, 0x46, 0x91, 0xc2, 0x76, 0x5c, 0xb1, 0x7c, 0x39, 0xf9, 0x7f, 0x53, 0xbe, 0x84, 0x82, 0x7c, 0x66, 0xfb, 0x46, 0x21, 0x4d, 0x4a, 0x50, 0x9a, 0x68, 0xad, 0xf6, 0x9f, 0x95, 0x25, 0xcb, 0x52, 0x64, 0x49, 0x7b, 0xba, 0x2c, 0xf1, 0xdd, 0x15, 0x97, 0x25, 0x05, 0x97, 0x92, 0x25, 0x19, 0x7f, 0x4b, 0x96, 0xf8, 0x7a, 0xd2, 0x64, 0x49, 0xc6, 0x65, 0x64, 0x49, 0x46, 0x9a, 0x2c, 0x39, 0x94, 0x22, 0x4b, 0x0e, 0x5f, 0x46, 0x96, 0x5c, 0xc4, 0x53, 0x7c, 0xf7, 0x5c, 0x39, 0x4f, 0xf1, 0x3d, 0x78, 0xc9, 0x1d, 0x17, 0x4b, 0x04, 0x4f, 0xf1, 0x89, 0x1d, 0x17, 0x4b, 0xc6, 0xc9, 0x11, 0xe2, 0x29, 0xad, 0x7f, 0x1f, 0x4f, 0xb9, 0xd2, 0x31, 0x30, 0xdf, 0xff, 0xba, 0x42, 0x6e, 0xf3, 0x38, 0x43, 0xff, 0xec, 0xe7, 0x8d, 0x81, 0xf9, 0x9e, 0x4b, 0x1b, 0x03, 0x6b, 0x50, 0x96, 0x24, 0x38, 0x4e, 0x19, 0x4a, 0x25, 0x0b, 0xea, 0x97, 0xe6, 0x90, 0xde, 0xd7, 0x2b, 0xf6, 0x25, 0xf9, 0xb6, 0x8a, 0x11, 0x6b, 0xe4, 0x32, 0xb2, 0x96, 0xfe, 0xb7, 0x4e, 0x09, 0xd3, 0x57, 0xc5, 0x67, 0xbb, 0x79, 0x04, 0x0c, 0xae, 0x8c, 0xb7, 0xd0, 0x08, 0x58, 0xfc, 0x4c, 0x86, 0xbe, 0xcd, 0x30, 0xfc, 0xef, 0x9b, 0xf5, 0x0e, 0x3a, 0x93, 0xa1, 0x6f, 0x0f, 0x3e, 0x47, 0x60, 0xf8, 0x01, 0xaf, 0xd8, 0x40, 0x77, 0x57, 0x57, 0x64, 0xf9, 0x92, 0xae, 0xae, 0xe5, 0xe3, 0x8f, 0x63, 0xb8, 0xc8, 0x5f, 0x2e, 0x29, 0x29, 0x2a, 0xfe, 0xbf, 0x73, 0x12, 0x43, 0x2c, 0xc3, 0x32, 0x71, 0xc8, 0x03, 0x19, 0x71, 0x3f, 0xcd, 0xad, 0x4b, 0x6e, 0x2a, 0x84, 0xe1, 0xfb, 0xef, 0x4b, 0x4f, 0xa7, 0x23, 0xbf, 0x47, 0xf0, 0xf9, 0x1f, 0x60, 0x49, 0xf3, 0xfb, 0x27, 0x7c, 0xfe, 0x39, 0xe1, 0x27, 0xb1, 0xdf, 0xbf, 0xe0, 0xf3, 0xc3, 0x64, 0x52, 0xf6, 0x7b, 0x96, 0xbf, 0xe3, 0xf1, 0x32, 0x74, 0xe9, 0x67, 0x42, 0x24, 0xf3, 0xdb, 0x86, 0xcf, 0x4f, 0x13, 0x5e, 0x7a, 0xf6, 0xfb, 0xb7, 0xb4, 0x68, 0x99, 0x0c, 0xdf, 0xee, 0x4b, 0xa4, 0xfd, 0x05, 0x3e, 0x07, 0x12, 0x65, 0xe4, 0xb0, 0xdf, 0x41, 0x7c, 0x3e, 0x4c, 0x44, 0xbb, 0x8e, 0xfd, 0x8e, 0xa5, 0xc1, 0x92, 0xcb, 0x7e, 0x1f, 0xe3, 0x73, 0x21, 0xe1, 0xf7, 0x25, 0xf6, 0x53, 0xd3, 0xe2, 0xe5, 0x91, 0x1f, 0x6d, 0xa0, 0x49, 0xfd, 0xcb, 0x48, 0xc2, 0x12, 0x8f, 0x67, 0x27, 0xbf, 0x81, 0xeb, 0xd2, 0xfc, 0xa6, 0x73, 0xda, 0x2f, 0x5f, 0x9c, 0x76, 0x60, 0x0a, 0x3e, 0xd3, 0xa5, 0x6b, 0x34, 0xaf, 0x99, 0xec, 0x37, 0x03, 0x9f, 0xaf, 0x43, 0xdc, 0xaf, 0x88, 0xd3, 0xfe, 0xc3, 0x25, 0xd2, 0xde, 0x8c, 0x4f, 0x45, 0x22, 0xed, 0x2c, 0xf6, 0xab, 0xe2, 0xef, 0xb8, 0xdf, 0xd7, 0x08, 0x57, 0x03, 0xfe, 0x8b, 0x71, 0x35, 0xd0, 0x80, 0xcf, 0xb7, 0x12, 0x5e, 0x65, 0xec, 0xf7, 0x6d, 0x7c, 0x94, 0x04, 0xcc, 0xdf, 0x64, 0xbf, 0x25, 0xf8, 0xb4, 0x27, 0xfc, 0xe6, 0xb2, 0x5f, 0x27, 0x3e, 0xff, 0x3d, 0x91, 0xf6, 0xe6, 0xcb, 0xb5, 0x25, 0xe2, 0x6a, 0x78, 0xe0, 0xde, 0x44, 0x5a, 0x17, 0xfb, 0xf5, 0xe2, 0xf3, 0x70, 0xc2, 0xcf, 0xcd, 0x7e, 0x48, 0x57, 0x03, 0x8f, 0x27, 0xfc, 0x3c, 0xec, 0xf7, 0x04, 0x3e, 0xff, 0x92, 0xf0, 0x2b, 0xbf, 0x6c, 0x19, 0xff, 0x3b, 0x0d, 0xcf, 0x55, 0xec, 0xf7, 0xa3, 0x34, 0xbf, 0x6a, 0xf6, 0xfb, 0x69, 0x9a, 0x9f, 0xf7, 0x52, 0x7d, 0x03, 0xad, 0xe7, 0xc7, 0x05, 0xf9, 0x8f, 0xff, 0x5e, 0x47, 0x58, 0x95, 0xf0, 0x5d, 0xaf, 0xb9, 0xab, 0x53, 0xd3, 0xa5, 0x6d, 0xaa, 0xd7, 0xfa, 0xad, 0xe8, 0xd8, 0x2d, 0x9d, 0x4b, 0x5b, 0x2f, 0x79, 0x70, 0x46, 0x5b, 0x67, 0x74, 0x45, 0x5b, 0xb4, 0xad, 0xab, 0x33, 0xe1, 0x33, 0x7e, 0xef, 0x7f, 0xa8, 0xa9, 0x39, 0xda, 0xd5, 0xd5, 0x9e, 0x92, 0x64, 0x69, 0x4a, 0xec, 0x50, 0xa4, 0x29, 0xdc, 0xda, 0xb6, 0x34, 0x19, 0xda, 0xde, 0x74, 0x77, 0x4b, 0x24, 0xe9, 0x8c, 0x74, 0x75, 0x45, 0x97, 0xb6, 0x37, 0x75, 0x77, 0x43, 0x51, 0x5b, 0x67, 0xb0, 0x0b, 0x8a, 0x68, 0xab, 0x78, 0x73, 0xa4, 0x2b, 0x0c, 0x61, 0xfc, 0x09, 0x89, 0xa0, 0x39, 0x90, 0x00, 0x97, 0x76, 0x49, 0x17, 0xd1, 0x4e, 0x69, 0xb9, 0xbc, 0xb5, 0x2d, 0xcc, 0x27, 0x2c, 0x2c, 0x77, 0xc8, 0x55, 0x4d, 0xdd, 0xd1, 0xf8, 0xb7, 0xbb, 0xf3, 0x6e, 0xf1, 0x99, 0x92, 0x77, 0xa2, 0xb2, 0x9e, 0x78, 0xee, 0x9e, 0xc4, 0x69, 0x11, 0x95, 0x20, 0x0e, 0x14, 0xb8, 0x15, 0xdc, 0x4b, 0xba, 0x56, 0x44, 0x8b, 0x8a, 0x8a, 0xc4, 0x4e, 0xfe, 0x5b, 0xd0, 0x7f, 0x45, 0xb4, 0xb9, 0xeb, 0xae, 0x4e, 0xb8, 0xb5, 0xad, 0x13, 0xdf, 0x74, 0xf6, 0x80, 0xdc, 0x1c, 0x69, 0xba, 0xab, 0x25, 0x02, 0x7e, 0x58, 0x40, 0x27, 0x60, 0x84, 0x9b, 0x68, 0x1f, 0x37, 0xcc, 0x83, 0x85, 0xe1, 0xe6, 0x26, 0xcc, 0xab, 0xbe, 0xa5, 0x5d, 0x9c, 0x5a, 0xd1, 0x19, 0xa5, 0x8d, 0xea, 0xe0, 0xe6, 0xdd, 0xd8, 0xec, 0xd7, 0x84, 0x45, 0xd4, 0x77, 0x36, 0x85, 0xbb, 0x5b, 0xbb, 0xa2, 0xe0, 0x26, 0x47, 0x2b, 0x66, 0xb9, 0xa0, 0xb3, 0xfd, 0x6e, 0x99, 0x10, 0xd6, 0x0d, 0x33, 0xc9, 0x97, 0x0f, 0xc3, 0xe8, 0x86, 0x19, 0xb0, 0xa8, 0x0d, 0x0b, 0x5b, 0x72, 0x37, 0xd4, 0x60, 0x18, 0xdc, 0x04, 0x15, 0x2d, 0xd1, 0xa6, 0xb6, 0xf6, 0x6e, 0x76, 0x76, 0x73, 0xd9, 0xb0, 0x00, 0xca, 0xbb, 0xc2, 0x77, 0x43, 0x39, 0x04, 0x5a, 0x3a, 0x9b, 0x3a, 0x5a, 0x08, 0xee, 0x00, 0xd4, 0x20, 0x0e, 0x23, 0x1d, 0x4d, 0xdc, 0x60, 0xe8, 0x51, 0x03, 0xb4, 0xd5, 0xbb, 0x3b, 0x5e, 0xec, 0x42, 0xa8, 0x6d, 0x69, 0x5a, 0xd9, 0x22, 0x63, 0x35, 0xa1, 0x16, 0xea, 0x56, 0x20, 0x54, 0x77, 0x35, 0xdd, 0x0d, 0x75, 0x98, 0x7d, 0x7b, 0x4b, 0x94, 0xb3, 0xa8, 0xe2, 0xe4, 0xf4, 0x55, 0xd9, 0x11, 0x8e, 0xde, 0x2d, 0x47, 0x23, 0x4d, 0xdd, 0xad, 0xd4, 0xc6, 0xa1, 0x16, 0x0d, 0x97, 0xb4, 0x8f, 0x3f, 0xde, 0x30, 0x37, 0xdf, 0x7c, 0x73, 0x5a, 0x58, 0xfa, 0x9f, 0x04, 0xc3, 0x0f, 0x2e, 0x8e, 0xf3, 0x0b, 0xa0, 0x55, 0x06, 0xc0, 0x77, 0x3d, 0x24, 0xf6, 0x62, 0x6b, 0x6e, 0xfa, 0x9e, 0xaa, 0xb9, 0x1d, 0x9a, 0x3b, 0x1e, 0x6e, 0x4b, 0xdb, 0xb7, 0x6d, 0xbd, 0xf2, 0x7d, 0xdb, 0x28, 0xbf, 0xb4, 0x7d, 0xdb, 0x6b, 0x4a, 0xaf, 0x7c, 0xdf, 0xf6, 0x1a, 0xe3, 0xe5, 0xf7, 0x6d, 0xaf, 0xc9, 0x1b, 0xbf, 0x6f, 0x7b, 0xe0, 0xfc, 0xe7, 0xed, 0xdb, 0x5e, 0x53, 0x3c, 0x7e, 0xdf, 0xf6, 0x1a, 0xf9, 0xe2, 0x7d, 0xdb, 0x6b, 0x2c, 0x17, 0xed, 0xdb, 0xb6, 0x5e, 0xe9, 0xbe, 0x6d, 0xd2, 0x47, 0xa8, 0x86, 0x6b, 0x1f, 0x4e, 0xd7, 0x45, 0x42, 0xb3, 0x28, 0xe7, 0x87, 0xfa, 0x29, 0xc7, 0x42, 0x3b, 0xd7, 0x92, 0x35, 0x87, 0xb5, 0x8f, 0xdb, 0x60, 0x25, 0xcf, 0x7d, 0x8f, 0x8e, 0xa4, 0x6a, 0x03, 0xf1, 0xbd, 0xcb, 0xae, 0xfc, 0xf8, 0x5e, 0x53, 0x6d, 0x26, 0x6a, 0xf6, 0xf8, 0xb9, 0xa9, 0xf8, 0xe9, 0x67, 0xe9, 0xf7, 0x87, 0x5f, 0x38, 0x28, 0x2c, 0xeb, 0xcf, 0x50, 0xa3, 0xbf, 0x79, 0x96, 0xcd, 0xe8, 0x28, 0xa5, 0x73, 0x3c, 0xb1, 0x8e, 0x08, 0xc5, 0xda, 0x7f, 0x46, 0x3b, 0x78, 0x1f, 0xdd, 0xbd, 0x93, 0xf0, 0xf9, 0x89, 0x7f, 0x03, 0xcf, 0xf0, 0xe6, 0xf1, 0xac, 0xb5, 0x87, 0xf6, 0x1d, 0x58, 0x75, 0xa8, 0xb3, 0xba, 0xb4, 0xb9, 0x94, 0xe2, 0x7b, 0x6c, 0xef, 0x0f, 0xa2, 0xc6, 0x3b, 0x81, 0xe6, 0x9d, 0x33, 0x54, 0x31, 0xef, 0x8c, 0x5a, 0x9c, 0xb6, 0xe7, 0x0e, 0xed, 0xda, 0xac, 0xf2, 0xd3, 0x7a, 0xbb, 0xe7, 0x9f, 0xe5, 0x6a, 0x9e, 0x33, 0x79, 0xca, 0x69, 0x70, 0xea, 0xb1, 0x94, 0x46, 0xff, 0x06, 0xa7, 0x21, 0x7e, 0xc2, 0x24, 0xdb, 0xb3, 0x74, 0x46, 0xa2, 0x5e, 0xac, 0xd6, 0x43, 0xea, 0x29, 0x8b, 0x48, 0x5e, 0x77, 0x02, 0x4f, 0x0d, 0xda, 0xf9, 0xe2, 0xda, 0xae, 0xf2, 0x38, 0x6c, 0x95, 0x23, 0xaa, 0xd5, 0xbf, 0xde, 0x06, 0x74, 0xbe, 0xb8, 0xb8, 0x8f, 0x47, 0xd7, 0x93, 0x16, 0xe3, 0x15, 0xff, 0x7a, 0xed, 0xbe, 0x0b, 0xd0, 0x2d, 0x49, 0x0b, 0x79, 0xdb, 0xbf, 0xfe, 0xc6, 0xc4, 0xdd, 0x3f, 0xba, 0xaa, 0xb4, 0xb0, 0xdf, 0x71, 0x98, 0x76, 0x9f, 0x90, 0xae, 0x30, 0x71, 0xde, 0xa9, 0x83, 0x43, 0xcf, 0x72, 0xa8, 0x76, 0xa7, 0x90, 0xce, 0x3c, 0x2e, 0xf4, 0x9f, 0x39, 0x34, 0x47, 0xbb, 0x53, 0xe8, 0x54, 0x5a, 0xbe, 0x2a, 0x87, 0xe5, 0x69, 0x61, 0xef, 0xa4, 0x86, 0xdd, 0x6f, 0xe1, 0xb0, 0x7c, 0x2d, 0xec, 0x25, 0xef, 0xea, 0xb1, 0xdb, 0x05, 0x45, 0xa0, 0x6f, 0x29, 0x9f, 0xae, 0xf9, 0x34, 0x6a, 0x8c, 0x1e, 0xc4, 0xc5, 0x28, 0x8f, 0x48, 0x0f, 0x3f, 0xf6, 0x14, 0x86, 0xc8, 0x14, 0x02, 0x03, 0xc2, 0xe7, 0x59, 0x17, 0xfa, 0xd8, 0xd0, 0x67, 0xa5, 0x70, 0xff, 0x78, 0x1b, 0xba, 0x91, 0xa2, 0x42, 0x62, 0x0c, 0x7b, 0xf8, 0xa5, 0xb3, 0xe8, 0x2e, 0x46, 0xf7, 0x22, 0xe1, 0xfe, 0xf7, 0x56, 0x74, 0x3b, 0xd0, 0x5d, 0x45, 0x7a, 0xb2, 0xbc, 0x1c, 0xe4, 0x0d, 0x6f, 0x54, 0x62, 0x6b, 0x38, 0xea, 0xb1, 0x94, 0x7e, 0x1b, 0xe5, 0x56, 0x12, 0x2a, 0x74, 0xf6, 0x0c, 0xb9, 0x24, 0x09, 0x7b, 0xc6, 0x8f, 0xe8, 0xbe, 0x55, 0x75, 0xd4, 0x6a, 0x07, 0x63, 0x39, 0xc6, 0xf2, 0xae, 0x06, 0x03, 0x6a, 0xb2, 0x2b, 0x30, 0x5d, 0x09, 0xa7, 0xb8, 0x87, 0x6f, 0xb1, 0x31, 0x39, 0xaf, 0xe5, 0xb1, 0xdf, 0x60, 0xdd, 0x20, 0xba, 0x8b, 0x13, 0xee, 0x45, 0xec, 0xb6, 0x27, 0xdc, 0x55, 0xec, 0xb6, 0x25, 0xdc, 0xb3, 0xd9, 0x2d, 0x27, 0xdc, 0x05, 0x75, 0x83, 0xd6, 0x19, 0x50, 0x4a, 0x35, 0x56, 0x9b, 0x51, 0x3f, 0xa6, 0x5d, 0xeb, 0x89, 0xb3, 0xe2, 0x2e, 0x4c, 0xe6, 0xd8, 0x69, 0xe7, 0xcc, 0x5d, 0x30, 0xb0, 0x5f, 0xda, 0x39, 0x73, 0xa3, 0x67, 0xd9, 0x2f, 0xed, 0x9c, 0xb9, 0xd1, 0xf7, 0xd9, 0x2f, 0xed, 0xb6, 0xaa, 0xd1, 0xbd, 0x75, 0x83, 0xbe, 0x0d, 0x21, 0xed, 0x2e, 0x59, 0x27, 0x86, 0x8a, 0x15, 0x11, 0x18, 0x4f, 0x9f, 0x16, 0xef, 0x69, 0x84, 0x2a, 0xd1, 0xbf, 0x2f, 0xf8, 0xb1, 0x7f, 0x9b, 0x44, 0xff, 0x26, 0xab, 0x1f, 0xbf, 0x67, 0x40, 0x7e, 0x10, 0xd4, 0x46, 0x05, 0x99, 0x43, 0x5a, 0xdf, 0x54, 0x44, 0x4f, 0x4c, 0xf1, 0xb9, 0xe7, 0x22, 0x9f, 0x60, 0x62, 0xad, 0xea, 0x2c, 0x59, 0xac, 0x5c, 0x2a, 0xb6, 0xb5, 0x82, 0x8d, 0x6f, 0x7f, 0xa7, 0xfb, 0x2c, 0x1c, 0xbf, 0x1e, 0x72, 0x2e, 0x87, 0x1c, 0x5e, 0xfd, 0x95, 0x4f, 0xbb, 0xaf, 0xe4, 0xb2, 0x21, 0x37, 0x64, 0xd0, 0x3d, 0x70, 0xd6, 0x72, 0x47, 0x80, 0xee, 0x89, 0xda, 0x8e, 0x21, 0x41, 0xab, 0x0d, 0x6b, 0xac, 0xd0, 0x5a, 0xb0, 0x7c, 0x2d, 0x86, 0x27, 0x2d, 0xdc, 0xa4, 0xe4, 0x68, 0x23, 0x5e, 0x7d, 0xce, 0x6c, 0x5a, 0x1f, 0x42, 0xf7, 0x5e, 0x07, 0xf7, 0x71, 0x3d, 0xca, 0xc4, 0xe8, 0x85, 0x7a, 0x58, 0x3b, 0x1f, 0xba, 0xc1, 0xde, 0x05, 0x8d, 0x08, 0xdf, 0x62, 0x39, 0x97, 0x4f, 0x9b, 0x9d, 0x48, 0xfd, 0x61, 0x89, 0xf8, 0x96, 0x42, 0x05, 0xfc, 0xd6, 0x05, 0xc1, 0x30, 0x5b, 0x01, 0x29, 0xc8, 0x2e, 0x13, 0xc6, 0xa8, 0x30, 0xc7, 0x88, 0x66, 0xd0, 0x7f, 0x8a, 0x02, 0x3a, 0xa5, 0x70, 0x39, 0xd8, 0x78, 0x3f, 0x24, 0x18, 0x66, 0x21, 0xb4, 0x7c, 0xf3, 0xb7, 0xad, 0xd6, 0xea, 0x67, 0x0a, 0x42, 0x6b, 0x86, 0xf6, 0x6b, 0x1a, 0x26, 0x63, 0x3d, 0xb1, 0xfd, 0xed, 0xae, 0xdf, 0xec, 0x72, 0x9f, 0x84, 0x9c, 0xa9, 0x5e, 0x30, 0x7a, 0x36, 0x83, 0xbe, 0xfc, 0x24, 0xc6, 0x7f, 0x80, 0x4e, 0x4d, 0x25, 0x6e, 0x6c, 0xaf, 0xf5, 0xaf, 0x9f, 0x8e, 0xbd, 0x16, 0xe1, 0xb5, 0x3a, 0x7b, 0xd8, 0x30, 0x28, 0x4d, 0xe4, 0xe8, 0x41, 0xaa, 0x2c, 0x8d, 0xe7, 0xa9, 0x40, 0xe6, 0x6b, 0x94, 0xca, 0xbf, 0xde, 0x1e, 0xab, 0x1b, 0x9c, 0x8f, 0x21, 0xc1, 0x62, 0xad, 0x1d, 0x1d, 0x7c, 0x13, 0xcd, 0x12, 0x2d, 0xbd, 0x2b, 0x99, 0x3e, 0x09, 0x11, 0xed, 0x19, 0xc8, 0x5c, 0x2b, 0xb7, 0x83, 0x91, 0x6f, 0x7f, 0xb9, 0x3a, 0x22, 0xd9, 0xa5, 0xe1, 0xe7, 0x1e, 0x78, 0x0e, 0xcc, 0x7c, 0x07, 0x29, 0xfa, 0x0c, 0xff, 0x70, 0xcd, 0x73, 0x98, 0x57, 0x0f, 0xe2, 0x57, 0x8a, 0xaf, 0xb5, 0xc3, 0x6f, 0xcc, 0xcf, 0xe9, 0x82, 0x0a, 0x74, 0x7b, 0xe5, 0x0e, 0xb0, 0x6d, 0x78, 0xc3, 0xe6, 0x77, 0x2c, 0xa4, 0xde, 0x34, 0x9d, 0xee, 0xa8, 0x86, 0xcc, 0x12, 0x0d, 0x86, 0x9c, 0xca, 0x91, 0x0b, 0x47, 0x12, 0x67, 0x64, 0x10, 0x44, 0xeb, 0x35, 0x78, 0xbc, 0x69, 0xf5, 0xf1, 0xc6, 0x21, 0x12, 0x33, 0x66, 0xfa, 0xb3, 0x05, 0x33, 0x98, 0x22, 0x10, 0x53, 0xf3, 0xce, 0x19, 0x21, 0x5a, 0xb7, 0x7f, 0xf0, 0x5b, 0x7d, 0x56, 0x8f, 0xf5, 0x79, 0xc8, 0xa1, 0x73, 0x86, 0x1f, 0x09, 0xd3, 0xea, 0xae, 0x47, 0x6e, 0xef, 0x29, 0x3d, 0x3c, 0xa8, 0x14, 0x70, 0x8e, 0x06, 0xc4, 0x90, 0xd6, 0x6b, 0xad, 0x55, 0x89, 0x3e, 0x5b, 0xee, 0xb4, 0x38, 0xcd, 0xd6, 0x4a, 0xff, 0xa3, 0x48, 0xe3, 0xf4, 0xad, 0xb3, 0x56, 0xf8, 0x1f, 0x15, 0x37, 0x95, 0x06, 0xf7, 0xb0, 0x0f, 0x9f, 0x42, 0x7c, 0xc1, 0x1f, 0xbf, 0x1b, 0x1c, 0x8c, 0x08, 0x71, 0x51, 0x02, 0xe2, 0xeb, 0x58, 0x5a, 0xe6, 0x89, 0x56, 0xd5, 0x2f, 0xbe, 0x54, 0xab, 0x2a, 0xb3, 0x6d, 0x9d, 0x74, 0xbf, 0x23, 0xc1, 0xca, 0x90, 0x64, 0x42, 0x69, 0xcd, 0x39, 0x63, 0x8e, 0xb3, 0x16, 0xca, 0xc4, 0xca, 0x61, 0xbd, 0x8d, 0x20, 0x93, 0x05, 0x3f, 0x29, 0x4d, 0x52, 0x03, 0xd6, 0xd3, 0x4c, 0x69, 0xe3, 0xf0, 0x6b, 0x3b, 0x9d, 0x3e, 0xb9, 0x54, 0x6c, 0x65, 0x5f, 0x61, 0x1a, 0x46, 0x22, 0xb4, 0xc7, 0xbf, 0x8d, 0xe5, 0x71, 0x1f, 0xb6, 0x80, 0x91, 0x5d, 0x74, 0x02, 0xc3, 0x4a, 0x9f, 0x0b, 0xf3, 0x78, 0x71, 0x55, 0xe9, 0xc1, 0x41, 0xda, 0x2d, 0xf5, 0x48, 0x9f, 0x23, 0x53, 0x9e, 0x09, 0xfa, 0xd8, 0xf3, 0x60, 0x4e, 0x9e, 0xf3, 0x5a, 0x00, 0x43, 0xcf, 0x33, 0xff, 0xb5, 0x51, 0xda, 0x94, 0xf3, 0x57, 0x81, 0x47, 0x10, 0x73, 0x78, 0x85, 0x6f, 0x60, 0x49, 0x96, 0x58, 0xe3, 0x1b, 0x04, 0x38, 0x43, 0xeb, 0x99, 0x1d, 0xcb, 0xe3, 0x10, 0x38, 0xa3, 0xc6, 0x1c, 0xa8, 0x55, 0x26, 0x13, 0x2d, 0x50, 0x7d, 0x13, 0x98, 0xaf, 0x88, 0x63, 0xde, 0x99, 0xeb, 0xed, 0x82, 0x3a, 0xe4, 0x24, 0x06, 0x0d, 0xdb, 0xfb, 0x69, 0x8c, 0xf3, 0x32, 0x39, 0xe8, 0x3f, 0x2f, 0x87, 0xcf, 0x76, 0x27, 0x72, 0x68, 0x4d, 0xa6, 0xb7, 0x96, 0x18, 0x91, 0x41, 0x20, 0xac, 0x79, 0x1a, 0x3d, 0x96, 0x3a, 0xdd, 0x1a, 0x6d, 0x4a, 0x29, 0xb4, 0xd9, 0xc9, 0xb4, 0x59, 0xe1, 0x58, 0x44, 0xb4, 0x49, 0xab, 0x77, 0x18, 0xd7, 0x13, 0x31, 0xb6, 0x0b, 0xca, 0xb8, 0x55, 0x73, 0xe4, 0x76, 0x81, 0x6d, 0x6c, 0xd3, 0x8a, 0x38, 0xb6, 0xad, 0x9e, 0xe4, 0x69, 0xb9, 0xaf, 0x3d, 0x4f, 0xb3, 0x67, 0x63, 0x3b, 0xe5, 0x85, 0xd6, 0x2a, 0xc4, 0x31, 0xef, 0x8f, 0x8b, 0xe3, 0x49, 0x9c, 0x4c, 0x4d, 0x67, 0x06, 0x2c, 0x31, 0xf1, 0xe9, 0x0d, 0x20, 0x3d, 0xac, 0x30, 0x7f, 0xd0, 0x41, 0x28, 0x0b, 0xdf, 0x2e, 0x9e, 0xbf, 0x5d, 0x85, 0x5c, 0xc3, 0x43, 0xb0, 0xcb, 0x1e, 0xa7, 0x1d, 0x1c, 0x4e, 0xb3, 0x73, 0x92, 0xb5, 0xda, 0xff, 0x68, 0x01, 0x68, 0x52, 0xb0, 0x91, 0xa1, 0x32, 0xfd, 0x2d, 0xa8, 0x9c, 0xb9, 0xb4, 0x8e, 0x6f, 0xe4, 0x69, 0xde, 0x61, 0x34, 0x2e, 0xaf, 0x94, 0x5b, 0x04, 0x4d, 0x8c, 0x53, 0xe9, 0x52, 0x38, 0xe5, 0x1b, 0x19, 0x3c, 0x25, 0xad, 0x88, 0xb5, 0x56, 0xd4, 0x6a, 0x8b, 0x91, 0xcf, 0xda, 0xa0, 0x84, 0x56, 0xf0, 0xc5, 0xf3, 0x29, 0x64, 0x98, 0x3c, 0xe5, 0x0a, 0xdf, 0xe3, 0x5b, 0x6c, 0xb2, 0xd1, 0x99, 0xb4, 0xc5, 0x72, 0x1b, 0xe4, 0xe3, 0xbb, 0xc4, 0x71, 0x0b, 0xd6, 0x3e, 0x4c, 0x73, 0xc9, 0xbe, 0xfb, 0x58, 0x62, 0xba, 0x89, 0x33, 0x11, 0xd4, 0x4e, 0x1f, 0xb8, 0xac, 0x95, 0x72, 0x9b, 0x06, 0x75, 0x65, 0x12, 0x6a, 0x9f, 0x2b, 0x48, 0x7c, 0xde, 0x81, 0xfe, 0x56, 0xba, 0x8d, 0x27, 0x64, 0x15, 0xf7, 0xbe, 0x07, 0xf3, 0x93, 0xfa, 0xe1, 0x67, 0x67, 0xc3, 0x52, 0xf2, 0x5b, 0xd1, 0xad, 0x94, 0x28, 0x05, 0xc2, 0x29, 0x87, 0xd5, 0xad, 0x3e, 0x94, 0x34, 0x2b, 0x95, 0x92, 0xcb, 0xd4, 0x57, 0x50, 0x50, 0xc6, 0xa5, 0x6a, 0xeb, 0x29, 0xb7, 0x7a, 0xe4, 0x2a, 0x47, 0x2b, 0xb7, 0xd9, 0x8b, 0xbe, 0xf2, 0x10, 0x8c, 0x7e, 0x52, 0x68, 0x48, 0xd2, 0x50, 0xf5, 0x69, 0xa8, 0xbb, 0xb1, 0xc4, 0x98, 0x53, 0xc0, 0x1c, 0x85, 0x7a, 0x8c, 0x83, 0xb9, 0x8a, 0x52, 0x9c, 0x68, 0x0f, 0xcf, 0xdf, 0x68, 0x0f, 0x9d, 0xb5, 0x8a, 0x78, 0x0b, 0x7e, 0x4d, 0xa2, 0xf5, 0xa2, 0x2c, 0x61, 0x76, 0xa5, 0xf5, 0xc7, 0xb0, 0x52, 0xc0, 0xeb, 0x6b, 0xa7, 0x70, 0x3e, 0x79, 0x97, 0xe4, 0x20, 0xf0, 0xd9, 0x39, 0xa1, 0x3f, 0xf3, 0x7c, 0xae, 0x4d, 0x9c, 0xef, 0x4c, 0xb7, 0xb4, 0x3e, 0xba, 0x87, 0x34, 0xe9, 0xfb, 0xaf, 0x7f, 0x6c, 0x6f, 0x58, 0x46, 0xad, 0x88, 0xb4, 0x8f, 0xdb, 0xa8, 0xce, 0xb2, 0x6b, 0x6a, 0x0f, 0x4a, 0x89, 0xa7, 0xc0, 0x88, 0xef, 0xe1, 0x41, 0x03, 0xb6, 0x18, 0xed, 0xcb, 0x9a, 0x07, 0xb6, 0xf8, 0xe9, 0xcc, 0x49, 0xed, 0x58, 0xd5, 0x5f, 0xc1, 0x1e, 0xd0, 0x67, 0xc6, 0x4b, 0xe9, 0xf8, 0x1e, 0x50, 0xa7, 0x49, 0x3b, 0x09, 0x88, 0x6f, 0x8c, 0xc5, 0xb0, 0x3c, 0xd6, 0x99, 0xee, 0xf8, 0x3c, 0x39, 0x4f, 0x7b, 0x50, 0x35, 0x1d, 0x7c, 0x95, 0xe6, 0x4b, 0xf7, 0x90, 0x68, 0xf9, 0x68, 0x3b, 0x53, 0x23, 0x97, 0x8a, 0x3f, 0xba, 0x2f, 0xae, 0x1b, 0xcc, 0xa5, 0x73, 0x6c, 0x4b, 0x6c, 0x4e, 0x28, 0xb3, 0xa1, 0x7c, 0x99, 0x3d, 0x13, 0x29, 0xc1, 0x9c, 0x7a, 0x1a, 0x13, 0xef, 0xee, 0xc8, 0x42, 0xb9, 0xae, 0xa3, 0xb5, 0xe6, 0xbc, 0xf7, 0xed, 0x7b, 0xd3, 0x3d, 0x60, 0x14, 0x37, 0xc7, 0x1d, 0xf8, 0x11, 0x94, 0xd2, 0x39, 0xf4, 0x99, 0x76, 0xb9, 0xbc, 0xa0, 0xee, 0xb1, 0xbd, 0xab, 0x1c, 0x07, 0x07, 0x69, 0x14, 0x7e, 0x53, 0x27, 0xed, 0xc5, 0x51, 0x14, 0x07, 0x4a, 0x22, 0xd4, 0x61, 0x8c, 0x0e, 0xcc, 0x9b, 0xf6, 0x1c, 0xe1, 0x63, 0xc7, 0x36, 0x44, 0xdd, 0xc7, 0x59, 0x36, 0x54, 0x01, 0x7a, 0xba, 0x6d, 0x18, 0xdd, 0x99, 0xa8, 0xb9, 0x27, 0xdc, 0x08, 0x69, 0x2d, 0x42, 0x4a, 0x3b, 0xd0, 0xe4, 0x9f, 0xec, 0x09, 0xf1, 0x1e, 0xa9, 0x50, 0x36, 0x9f, 0x4f, 0x9d, 0xe3, 0xe8, 0xe4, 0xd1, 0xf8, 0xdb, 0x7d, 0xb1, 0x0e, 0xa3, 0x6d, 0x5e, 0x41, 0xbd, 0x6f, 0x43, 0xf0, 0x49, 0xb9, 0xdc, 0x5a, 0x9b, 0x80, 0x37, 0x97, 0xce, 0x60, 0x12, 0x3b, 0x5e, 0xd4, 0x9d, 0x74, 0xbe, 0x04, 0xd1, 0x08, 0xd6, 0xcc, 0x6c, 0x4f, 0x68, 0x3e, 0xd5, 0x67, 0x91, 0xa3, 0x2d, 0xe7, 0xfb, 0xcc, 0x46, 0x69, 0x3c, 0x3a, 0xdb, 0x0e, 0xb3, 0xbd, 0xbd, 0x16, 0x3b, 0xfc, 0x83, 0x37, 0x56, 0x0a, 0xde, 0xdd, 0x73, 0x24, 0xef, 0xcf, 0x51, 0x22, 0x97, 0x7a, 0xd7, 0x1c, 0x70, 0xcf, 0x42, 0x0a, 0x5a, 0x5f, 0x3e, 0x5b, 0xf2, 0xfe, 0x2c, 0xc7, 0x0e, 0xff, 0xe8, 0xed, 0xdb, 0xef, 0x2a, 0x6e, 0x05, 0xd3, 0xba, 0x5d, 0x25, 0x46, 0xef, 0xae, 0x19, 0x3d, 0xb1, 0x0c, 0x34, 0x50, 0x76, 0xce, 0xa8, 0x50, 0x87, 0xf8, 0x5b, 0x52, 0x77, 0xcf, 0xa8, 0x54, 0xf7, 0xf0, 0x77, 0xa6, 0xfa, 0xe6, 0x8c, 0x72, 0x75, 0x1f, 0x7f, 0x4f, 0x50, 0xf7, 0xcf, 0xf0, 0xa8, 0x07, 0xb1, 0xac, 0xc3, 0xce, 0x9c, 0x9e, 0x9d, 0x87, 0xbf, 0x8b, 0xb5, 0x45, 0x5d, 0x73, 0xfe, 0xc8, 0xd8, 0x1c, 0xff, 0x26, 0x82, 0xc4, 0x42, 0x79, 0xc7, 0xbc, 0x9c, 0x8b, 0xc5, 0x88, 0x39, 0x96, 0x5f, 0x22, 0x47, 0xbd, 0xfa, 0x66, 0x44, 0xb7, 0x3e, 0x36, 0xc3, 0xad, 0xe5, 0x9a, 0x89, 0xb9, 0x96, 0xab, 0x07, 0xb5, 0x12, 0x0e, 0xdf, 0x1a, 0x9b, 0xe1, 0x52, 0x8f, 0x60, 0x19, 0x1f, 0x3a, 0x73, 0x38, 0x7f, 0x4b, 0x22, 0xef, 0xd2, 0xb4, 0xbc, 0x3d, 0x5a, 0xde, 0x3a, 0x75, 0xb7, 0x96, 0xdf, 0x1e, 0xad, 0x26, 0x6f, 0x62, 0x4d, 0x12, 0x79, 0x73, 0x7e, 0x89, 0xdc, 0x31, 0x55, 0x6a, 0xde, 0x39, 0xbc, 0xaa, 0x4c, 0x2e, 0xda, 0xc8, 0x37, 0xe3, 0xa1, 0x8e, 0xea, 0x2c, 0xa3, 0x54, 0xf3, 0x47, 0x2e, 0xdc, 0xe3, 0xdf, 0xe4, 0xcc, 0xa1, 0xb1, 0xf7, 0x84, 0xef, 0x04, 0xff, 0xa6, 0x19, 0x3d, 0x43, 0x1e, 0x84, 0x7f, 0xe7, 0x0c, 0x8c, 0x4d, 0xa5, 0xa3, 0x2b, 0x13, 0x6b, 0x86, 0xb1, 0xd4, 0x3d, 0x98, 0xeb, 0x9b, 0x33, 0x88, 0x0b, 0x18, 0xd5, 0xe3, 0x33, 0xaa, 0xd4, 0x93, 0xe8, 0x3e, 0x43, 0x33, 0xce, 0x09, 0xd9, 0xfc, 0xb1, 0x7a, 0x3c, 0x45, 0x67, 0x91, 0xf9, 0x24, 0x0a, 0xbe, 0xe1, 0x87, 0x46, 0xe4, 0x8b, 0xe7, 0xd2, 0x59, 0xf0, 0x85, 0x89, 0xb6, 0x25, 0x3d, 0xf7, 0xed, 0xa1, 0x82, 0xd6, 0x4c, 0x7b, 0x14, 0x48, 0xa3, 0xad, 0x19, 0x19, 0x3d, 0x89, 0xba, 0x9a, 0x43, 0xf1, 0x90, 0xf6, 0xea, 0xbc, 0xce, 0x99, 0x41, 0xeb, 0xdf, 0x18, 0xae, 0x6b, 0xc5, 0x7a, 0x28, 0x1f, 0xfa, 0x87, 0xe8, 0x2e, 0x12, 0xe3, 0x36, 0xc1, 0x7f, 0xb4, 0x72, 0x53, 0xb8, 0x06, 0x5a, 0xc7, 0xfd, 0x31, 0xa6, 0xb5, 0x1d, 0xcc, 0x3b, 0xcc, 0xbc, 0x5a, 0xd6, 0x64, 0x5b, 0xc6, 0x77, 0xd1, 0xc6, 0xef, 0x4f, 0x42, 0x8e, 0xdb, 0x9e, 0xcb, 0x96, 0xd7, 0x74, 0x6f, 0xc4, 0xf8, 0x19, 0xf9, 0xdf, 0x9e, 0x27, 0x56, 0x83, 0xb1, 0xaf, 0x53, 0xc4, 0x15, 0x7e, 0x8b, 0xd2, 0x6e, 0xf8, 0x65, 0x5b, 0xde, 0x4a, 0xfb, 0x01, 0xad, 0x58, 0x93, 0x52, 0xac, 0x07, 0xdd, 0x9e, 0xb6, 0x66, 0x71, 0x54, 0x5d, 0xa9, 0x86, 0x55, 0x45, 0xc9, 0xb6, 0x98, 0x25, 0xc8, 0x08, 0x39, 0x96, 0x64, 0xe1, 0x9b, 0xf6, 0x8e, 0x49, 0xa0, 0x0b, 0xca, 0x0a, 0xbe, 0xd5, 0xbe, 0x10, 0x86, 0xa9, 0x6b, 0x82, 0xd9, 0x4a, 0x56, 0x20, 0x46, 0xf1, 0x15, 0x63, 0x60, 0x4d, 0x54, 0x55, 0x74, 0x81, 0x3e, 0xf7, 0x71, 0xd4, 0x2f, 0xae, 0x7b, 0x71, 0x0b, 0xea, 0x89, 0x53, 0xf8, 0xfe, 0xce, 0x2d, 0x3a, 0x17, 0x5c, 0x1f, 0xf3, 0xe0, 0xf7, 0xcd, 0xaf, 0xf5, 0xfe, 0xf1, 0xa1, 0x58, 0xb9, 0xd9, 0xa5, 0xaa, 0xb4, 0xb6, 0xde, 0xe6, 0xf5, 0x59, 0x82, 0x4f, 0x78, 0x5c, 0xca, 0xe4, 0x08, 0xcc, 0xd2, 0xd3, 0x1d, 0x9e, 0x72, 0x38, 0x8f, 0x6f, 0x4c, 0x54, 0x55, 0x96, 0x44, 0xb5, 0x7c, 0x2f, 0x6a, 0x7e, 0x3a, 0x9f, 0x7a, 0x6c, 0xaf, 0x76, 0x16, 0x95, 0x55, 0x70, 0x29, 0xff, 0xc2, 0x31, 0x85, 0xe6, 0x28, 0x1d, 0x33, 0x45, 0x8f, 0x2b, 0x42, 0x8d, 0x4f, 0xae, 0xa2, 0x7e, 0x27, 0xf4, 0xad, 0x89, 0x23, 0xd6, 0x2a, 0x94, 0x6f, 0xcc, 0x95, 0xad, 0xd5, 0x71, 0xec, 0xce, 0x70, 0x8d, 0x29, 0x18, 0x76, 0xd4, 0x51, 0x85, 0x2d, 0x58, 0x84, 0x76, 0x49, 0xc7, 0x98, 0xf2, 0xeb, 0xa1, 0x82, 0x49, 0x71, 0xae, 0x32, 0xb5, 0x5c, 0xe8, 0xed, 0x72, 0x46, 0x63, 0x4c, 0x8e, 0xb1, 0xfd, 0x21, 0xa1, 0x4e, 0x56, 0x8d, 0x39, 0xe9, 0x1d, 0xed, 0xcc, 0x0d, 0x0e, 0xf3, 0x8e, 0x08, 0x5e, 0x2f, 0xe8, 0xd9, 0xa0, 0xcc, 0xb5, 0x42, 0x74, 0x0c, 0x43, 0x88, 0x1b, 0x3c, 0x47, 0x76, 0x7c, 0x08, 0x8c, 0xa3, 0xc9, 0x76, 0x0a, 0xa4, 0x9c, 0x35, 0x77, 0xa1, 0xa1, 0x00, 0xe5, 0xb8, 0xf1, 0x7d, 0xa7, 0x76, 0x6b, 0x2d, 0xdd, 0xe8, 0x84, 0xb4, 0x17, 0x66, 0x0a, 0x0e, 0x7b, 0x7e, 0x80, 0x7a, 0x74, 0x31, 0xea, 0x01, 0xcd, 0x9a, 0x1d, 0x6d, 0x71, 0x54, 0xcb, 0x45, 0xa0, 0x47, 0x3a, 0x00, 0x78, 0x62, 0x06, 0xad, 0x62, 0x5a, 0x36, 0x16, 0xf6, 0x3c, 0x3f, 0x16, 0xe5, 0xef, 0xfb, 0xc6, 0x56, 0x45, 0xa4, 0x19, 0xee, 0xb1, 0x1e, 0x76, 0x3d, 0x34, 0x86, 0x3d, 0x6b, 0xac, 0x9f, 0xbf, 0x07, 0xc6, 0x06, 0xf0, 0xfb, 0x61, 0xfe, 0x7e, 0x60, 0x6c, 0x1d, 0x7e, 0x6f, 0xe4, 0xef, 0xef, 0x8e, 0x3d, 0x8e, 0xdf, 0x4f, 0xf2, 0xf7, 0x86, 0xb1, 0xa7, 0xf0, 0xfb, 0xfb, 0xfc, 0x7d, 0xf7, 0xd8, 0x66, 0xcc, 0xf5, 0x39, 0xd2, 0x09, 0xd1, 0x6f, 0x2b, 0x62, 0x68, 0x1b, 0xca, 0xa7, 0x8f, 0xc7, 0xc2, 0x8e, 0x06, 0x5a, 0x1d, 0x25, 0x93, 0x1d, 0x6d, 0x44, 0x4a, 0x29, 0xb2, 0x4c, 0x87, 0x29, 0x01, 0xb8, 0xc6, 0x05, 0xff, 0x60, 0xeb, 0x01, 0x17, 0x9d, 0xf6, 0x23, 0xad, 0xe5, 0x1c, 0x9a, 0xc7, 0xc2, 0x11, 0x17, 0xa6, 0x15, 0x90, 0xb5, 0x8c, 0xad, 0x4a, 0xc0, 0x15, 0x44, 0xb8, 0x7a, 0x68, 0x3e, 0x58, 0x83, 0x2d, 0x84, 0xb0, 0x91, 0x7b, 0xd3, 0xd8, 0xc3, 0x5a, 0x79, 0xeb, 0xb0, 0xbc, 0x8d, 0x72, 0x3d, 0x62, 0xd0, 0x42, 0x73, 0x54, 0xe2, 0xac, 0xa6, 0x09, 0x3b, 0xe4, 0x65, 0xe0, 0x61, 0x4e, 0x6c, 0x09, 0xeb, 0x30, 0x46, 0xd8, 0x5a, 0x3d, 0x03, 0x5b, 0x60, 0x2c, 0xaa, 0xe8, 0x1e, 0xdd, 0x23, 0x5f, 0x2b, 0xb0, 0x81, 0x38, 0x7b, 0x5e, 0x15, 0x65, 0x46, 0xd4, 0x55, 0x91, 0x66, 0xe4, 0x2d, 0xa2, 0xd4, 0x6e, 0x95, 0xf8, 0x8c, 0x28, 0x31, 0xaa, 0x0e, 0x44, 0x54, 0x74, 0x09, 0x7c, 0xac, 0x50, 0x11, 0x1f, 0xaa, 0xc0, 0xc7, 0x7d, 0xea, 0xe3, 0x98, 0x5e, 0xe0, 0xe3, 0x21, 0xf5, 0x29, 0xc2, 0xa6, 0x2a, 0x30, 0xd2, 0xa9, 0x6e, 0x46, 0x6e, 0xf4, 0x9c, 0xc0, 0x9a, 0xba, 0x15, 0xfd, 0xb7, 0xf1, 0x77, 0xaf, 0xba, 0x1d, 0xbf, 0x77, 0xf2, 0x77, 0x1f, 0x72, 0x16, 0x37, 0x72, 0x15, 0xfa, 0x5e, 0x83, 0x3c, 0xcd, 0x4d, 0x7c, 0x05, 0xbf, 0xfb, 0x91, 0xa7, 0xb9, 0x91, 0x57, 0x32, 0xf6, 0x91, 0xa3, 0xb9, 0x91, 0x9b, 0x31, 0xc6, 0xd5, 0x23, 0xf8, 0xfd, 0x21, 0x7f, 0xaf, 0x43, 0xde, 0xe3, 0x56, 0x4f, 0x0a, 0xec, 0x0b, 0xfe, 0x43, 0xb5, 0x54, 0xcf, 0x13, 0xd6, 0x67, 0xd4, 0xa8, 0xa3, 0xc8, 0x85, 0x34, 0xec, 0x13, 0xee, 0x43, 0x59, 0x0e, 0xd7, 0x57, 0x7b, 0xc0, 0x02, 0xff, 0xc8, 0xbf, 0xa5, 0xb2, 0x4f, 0xc3, 0xd6, 0x33, 0xd4, 0x0e, 0x19, 0x3a, 0xdf, 0xb3, 0xb4, 0x86, 0xc8, 0xb0, 0x96, 0xa9, 0x55, 0x37, 0x9e, 0x5a, 0x11, 0x9f, 0x59, 0x11, 0x69, 0xcd, 0xb3, 0xc8, 0xad, 0x90, 0xeb, 0x4c, 0x75, 0xc1, 0x22, 0x7a, 0xcb, 0x26, 0xca, 0x5f, 0x5d, 0x46, 0x16, 0x3f, 0x73, 0x48, 0x49, 0x0d, 0x23, 0x04, 0x51, 0x84, 0x65, 0x95, 0xa3, 0xc1, 0x99, 0x95, 0xa0, 0x48, 0xbb, 0x7f, 0xc7, 0xa7, 0xef, 0xd0, 0xa8, 0x0f, 0xa5, 0xb2, 0xba, 0xc2, 0x80, 0xa9, 0x0e, 0x30, 0x9f, 0xce, 0x1b, 0x0b, 0x87, 0x25, 0x6c, 0x1b, 0x6a, 0x01, 0x3d, 0x48, 0xd8, 0xea, 0xd8, 0x97, 0xb8, 0xdd, 0xf5, 0xa0, 0xe3, 0x76, 0x1f, 0x5e, 0x53, 0xc6, 0xed, 0x9e, 0x61, 0x91, 0xc6, 0x06, 0x22, 0x7a, 0x8d, 0x2a, 0x33, 0x2c, 0x26, 0xd1, 0xea, 0xfc, 0xad, 0x43, 0xaa, 0x74, 0x31, 0x55, 0x66, 0x58, 0x26, 0x20, 0x55, 0xba, 0x98, 0x2a, 0x51, 0x76, 0x8c, 0x61, 0x1b, 0x8c, 0x3d, 0xc7, 0xdf, 0x13, 0xc7, 0xb6, 0x22, 0x85, 0x6e, 0xc3, 0x67, 0xbb, 0xa3, 0x81, 0xac, 0x9f, 0xfb, 0xff, 0x91, 0x20, 0x1c, 0x0b, 0x3b, 0x27, 0xd0, 0x4a, 0xdd, 0x4f, 0x67, 0xd1, 0x88, 0xd5, 0x38, 0xf8, 0x08, 0xa2, 0x30, 0x43, 0x14, 0xd5, 0x20, 0x5a, 0xc5, 0x10, 0xd5, 0x32, 0x84, 0x04, 0x51, 0x8c, 0x29, 0xab, 0x5f, 0x83, 0x68, 0x80, 0x7b, 0xd3, 0xc3, 0x1a, 0x4c, 0xf1, 0x5e, 0x43, 0x30, 0xc5, 0x7b, 0x0d, 0xc1, 0x14, 0xef, 0x35, 0x04, 0x13, 0xf7, 0x1a, 0x7c, 0xb6, 0x3a, 0x1a, 0x78, 0x55, 0xe0, 0x23, 0x49, 0x88, 0x3e, 0xa1, 0xb1, 0x2d, 0x4b, 0x3a, 0x44, 0xa4, 0xcd, 0xaa, 0x61, 0x2b, 0x42, 0x94, 0xd0, 0xa6, 0x6b, 0xa8, 0x9d, 0xe3, 0x9c, 0x49, 0xf0, 0xe0, 0x0d, 0x6f, 0x60, 0xbb, 0x91, 0x9e, 0xb6, 0x4f, 0x1b, 0xc1, 0xb3, 0xa0, 0x9d, 0xf9, 0x1c, 0x71, 0x09, 0x6e, 0x35, 0xec, 0x85, 0x4c, 0x1b, 0x22, 0x4e, 0x5f, 0x01, 0x68, 0x21, 0x66, 0xab, 0xab, 0x32, 0xe9, 0xff, 0xb2, 0x5c, 0xae, 0x7d, 0xf5, 0x30, 0x0c, 0x18, 0x4e, 0xad, 0x3d, 0x76, 0xde, 0x4a, 0xe3, 0x41, 0x66, 0x8d, 0x5b, 0x15, 0xd1, 0x4a, 0x70, 0xe7, 0xcc, 0x31, 0x85, 0xf6, 0x33, 0xfd, 0xf5, 0x94, 0x62, 0xa2, 0x5d, 0x5a, 0x34, 0x4a, 0xf4, 0x17, 0x5a, 0x3f, 0x4e, 0xb2, 0x7c, 0x3a, 0xc9, 0xf2, 0x62, 0x97, 0x6c, 0xac, 0x88, 0xc9, 0x2e, 0x74, 0xcd, 0xf6, 0xc6, 0xd6, 0x0d, 0xcd, 0x6a, 0x03, 0x23, 0xd6, 0xa6, 0x9c, 0x28, 0xe6, 0xed, 0x37, 0x66, 0x78, 0xd5, 0xa8, 0x33, 0xc7, 0x76, 0x95, 0xa1, 0x4f, 0x55, 0x91, 0x93, 0xe9, 0x48, 0x0e, 0x63, 0x0e, 0xfb, 0xa8, 0x5c, 0x94, 0xde, 0x46, 0xd4, 0xed, 0xe7, 0x22, 0x4f, 0x2b, 0x95, 0xab, 0x66, 0x20, 0x67, 0x1e, 0x6b, 0x15, 0x72, 0xd3, 0x8e, 0x58, 0xf8, 0xcd, 0x10, 0xdf, 0xfb, 0x42, 0xe3, 0x8a, 0x0d, 0xe2, 0x4e, 0xef, 0x6f, 0xd3, 0xcd, 0x99, 0x36, 0xc4, 0x50, 0xab, 0xf3, 0x1a, 0xcc, 0x89, 0xc7, 0x39, 0xfe, 0xf2, 0x12, 0xd9, 0x03, 0xf3, 0x4f, 0x66, 0xda, 0x67, 0xf8, 0xc7, 0xda, 0xab, 0x47, 0xfe, 0xd2, 0x5c, 0x80, 0x10, 0x2b, 0x5e, 0xe4, 0x8c, 0x46, 0x96, 0xe3, 0x26, 0x41, 0xb7, 0xb6, 0x76, 0xc8, 0x67, 0xbe, 0x9f, 0x9d, 0x90, 0xa8, 0x9e, 0x38, 0x66, 0x65, 0xca, 0xd1, 0xc2, 0x2b, 0x93, 0x37, 0x58, 0xfd, 0xc9, 0x7b, 0x59, 0xd5, 0x22, 0xac, 0x67, 0xc7, 0x58, 0xbb, 0xe3, 0x16, 0x39, 0x17, 0x25, 0x31, 0x5a, 0xec, 0xc8, 0xf1, 0x17, 0x4d, 0xc5, 0x37, 0xe8, 0x69, 0x27, 0x5a, 0xf0, 0x89, 0x19, 0xe5, 0x63, 0x8a, 0xa3, 0xaa, 0x00, 0xad, 0xcd, 0x7b, 0x60, 0x2e, 0x4a, 0x0b, 0xdf, 0x73, 0xb4, 0xf6, 0x52, 0xea, 0x79, 0x7f, 0x4d, 0x64, 0x22, 0xda, 0x1b, 0x7c, 0xb7, 0x39, 0x4b, 0x03, 0x80, 0xef, 0x2b, 0xe2, 0x2e, 0x75, 0x3b, 0xad, 0x92, 0x0d, 0x83, 0x25, 0xcf, 0x5a, 0x9e, 0x72, 0xdb, 0x07, 0xfb, 0xa3, 0x6f, 0xf1, 0x00, 0x50, 0x3b, 0xdf, 0x5f, 0x61, 0x2d, 0x7f, 0x77, 0x28, 0xac, 0x1b, 0x1f, 0xc3, 0x51, 0x6d, 0x45, 0x8d, 0x53, 0x9e, 0x0e, 0x45, 0x88, 0xe1, 0x0a, 0xd4, 0x99, 0xc2, 0xa8, 0x73, 0x45, 0xf9, 0x5b, 0xaf, 0xae, 0x72, 0x9f, 0x19, 0x90, 0x10, 0xdf, 0x3d, 0xec, 0xce, 0x54, 0x49, 0x63, 0xea, 0xc7, 0xf6, 0x1f, 0x70, 0x5e, 0xcb, 0xfb, 0xd2, 0x66, 0xa0, 0x2d, 0x56, 0xc9, 0xa7, 0x5d, 0xd0, 0x1e, 0x38, 0x3b, 0xed, 0x2b, 0x16, 0x6d, 0x7b, 0x8e, 0x77, 0xab, 0x2a, 0xb9, 0xda, 0x9a, 0x8f, 0xb0, 0xb8, 0x9b, 0x53, 0xe5, 0xb1, 0x96, 0x4d, 0x76, 0xab, 0x29, 0x6a, 0xd4, 0xea, 0xe2, 0x17, 0x75, 0x51, 0xe7, 0x24, 0x6a, 0xd7, 0x6e, 0xad, 0xb2, 0xb5, 0xb1, 0xb6, 0x33, 0x3d, 0x2e, 0x2b, 0x57, 0xc7, 0xd7, 0x8e, 0x84, 0x8b, 0xae, 0x32, 0xdc, 0x4f, 0xf9, 0xb0, 0x06, 0x6e, 0xa7, 0xf1, 0x9b, 0x4d, 0xdf, 0x53, 0x7c, 0x4c, 0xa7, 0x76, 0xad, 0x06, 0x48, 0xf1, 0xa8, 0x51, 0x46, 0x35, 0x88, 0x57, 0x21, 0xc4, 0x3d, 0x08, 0x71, 0x0c, 0xf5, 0x7b, 0xec, 0x27, 0xce, 0x42, 0x70, 0x38, 0xc4, 0x99, 0x1f, 0x04, 0xb1, 0x25, 0x0e, 0x31, 0xdd, 0xc8, 0x44, 0x10, 0xcb, 0x95, 0x88, 0xc3, 0x65, 0x2c, 0xf3, 0x6f, 0x2f, 0x84, 0xe0, 0x33, 0x74, 0x2b, 0xa1, 0x0d, 0x61, 0x78, 0xef, 0x75, 0xba, 0x37, 0x46, 0x6f, 0x4f, 0x1f, 0x61, 0xc7, 0xbe, 0xdc, 0x8c, 0x16, 0xfb, 0xf1, 0x88, 0x14, 0x05, 0x01, 0xbd, 0x9a, 0x4f, 0xfb, 0xbc, 0xe1, 0x35, 0xea, 0xf7, 0xff, 0x74, 0x48, 0x5d, 0x35, 0x1f, 0x7b, 0x88, 0xd5, 0x75, 0x83, 0x9f, 0xcf, 0x0a, 0xd1, 0xdb, 0x66, 0x8e, 0xd1, 0x2e, 0x42, 0xcc, 0x67, 0x95, 0x54, 0x38, 0x41, 0xa4, 0x18, 0xab, 0x9b, 0x0d, 0x8e, 0x8e, 0xb1, 0xe6, 0x28, 0xd8, 0x89, 0xca, 0x3a, 0xb1, 0x55, 0xf4, 0x24, 0x83, 0xe9, 0xbe, 0x75, 0x6b, 0xbc, 0x55, 0x88, 0xaf, 0x78, 0xc7, 0x44, 0x9d, 0x88, 0xab, 0xb8, 0xc6, 0x44, 0x8b, 0xe8, 0x91, 0xe7, 0x31, 0x3f, 0xa1, 0xba, 0x0a, 0x19, 0x8c, 0xdc, 0x61, 0x9d, 0xf3, 0x5a, 0xe2, 0x0b, 0xa2, 0x7d, 0xfc, 0x3b, 0xce, 0xae, 0xd5, 0x6a, 0x9b, 0x45, 0x37, 0xa2, 0x53, 0xeb, 0x9c, 0x3d, 0x41, 0x75, 0x0d, 0xf4, 0x39, 0x16, 0xc9, 0xd5, 0xdb, 0xd6, 0xb5, 0x3c, 0x3c, 0xa3, 0x62, 0x4c, 0xf1, 0x95, 0x63, 0x2b, 0x2c, 0x8e, 0x48, 0x36, 0x0d, 0x2e, 0x35, 0x37, 0x3e, 0x8e, 0x35, 0xd6, 0x8c, 0x29, 0xcc, 0x82, 0x6e, 0x0b, 0x6e, 0x89, 0xf7, 0x3b, 0xee, 0x13, 0x45, 0x64, 0xf9, 0x70, 0x9f, 0x98, 0xf8, 0xb7, 0xfb, 0x04, 0xeb, 0x97, 0x6f, 0x11, 0x7d, 0xa3, 0x8e, 0x8a, 0x50, 0xfc, 0xd9, 0xc5, 0xd2, 0xe8, 0x71, 0x21, 0x53, 0x59, 0x0a, 0x50, 0xaf, 0xc9, 0x25, 0x39, 0x20, 0x7a, 0xe2, 0x59, 0x07, 0x9d, 0x19, 0xc2, 0xa7, 0x5e, 0x6a, 0xb7, 0xb9, 0xf9, 0xd7, 0x8f, 0xef, 0x4d, 0x8a, 0xb1, 0x72, 0xe4, 0x4f, 0x8b, 0x11, 0xb3, 0x0a, 0x72, 0xa0, 0x3a, 0xdf, 0xa6, 0x90, 0x81, 0xfb, 0xd1, 0x5b, 0x33, 0x3c, 0xe8, 0x83, 0x9c, 0x21, 0x64, 0x42, 0x9e, 0x80, 0x1c, 0xe6, 0x4f, 0xdf, 0xe3, 0xb1, 0x69, 0x63, 0xc2, 0x7d, 0x3b, 0xba, 0xaf, 0x4d, 0x1d, 0xa9, 0xfe, 0x93, 0x5d, 0x1b, 0xbd, 0x36, 0xc7, 0xb9, 0x12, 0xf9, 0x70, 0xed, 0x74, 0x02, 0xc6, 0xa4, 0x76, 0x47, 0x34, 0x91, 0xca, 0x49, 0x11, 0xeb, 0x8a, 0x8c, 0x30, 0xf0, 0x3e, 0xf1, 0x52, 0x6d, 0x3d, 0xd0, 0x71, 0xef, 0x70, 0xd9, 0x1c, 0xed, 0xbe, 0x67, 0x73, 0x21, 0xe9, 0x8a, 0x95, 0xb2, 0x85, 0xc7, 0x79, 0x50, 0x76, 0x4a, 0xfb, 0x96, 0x4c, 0x11, 0x63, 0xc1, 0x21, 0x2f, 0xbf, 0x51, 0x8b, 0x93, 0x96, 0x88, 0x51, 0xe2, 0x20, 0x64, 0xee, 0x50, 0xac, 0xe6, 0x18, 0x8d, 0x89, 0x84, 0x20, 0x63, 0x16, 0x7f, 0x65, 0x20, 0x57, 0x3e, 0xcf, 0x5f, 0x14, 0xfe, 0x04, 0xed, 0x03, 0xa2, 0x13, 0x63, 0x68, 0xcf, 0xc9, 0x5f, 0x5a, 0x69, 0x04, 0x50, 0xb7, 0xda, 0xbe, 0x8c, 0xfb, 0x4d, 0x21, 0xf6, 0x1b, 0xcf, 0xaf, 0x87, 0xa8, 0x57, 0xb0, 0xc4, 0xdd, 0x4b, 0xdc, 0x5a, 0xe3, 0xce, 0x7b, 0x8d, 0x33, 0xb0, 0xbe, 0x37, 0xf0, 0x79, 0x47, 0xc9, 0x9b, 0x99, 0x04, 0x9f, 0x5f, 0xe4, 0x68, 0x15, 0x63, 0xa2, 0x8f, 0x1d, 0x51, 0x0a, 0x90, 0x2b, 0x38, 0x7e, 0xf2, 0x47, 0x30, 0x06, 0x27, 0xc7, 0x71, 0x4f, 0x7d, 0xc4, 0xea, 0x4f, 0x8e, 0x66, 0xd5, 0x0d, 0x3a, 0xca, 0x0b, 0x72, 0x83, 0x07, 0xd8, 0xd2, 0xdc, 0x2c, 0x64, 0x7c, 0x18, 0x84, 0x8c, 0x4f, 0xe4, 0xbd, 0x52, 0x99, 0x12, 0x4f, 0x6f, 0x2d, 0xf7, 0x3f, 0x7a, 0x51, 0xeb, 0x19, 0x0a, 0xb8, 0x3c, 0xc7, 0xf2, 0x4c, 0x7b, 0xb2, 0xed, 0xb0, 0x85, 0x68, 0x0f, 0xcf, 0x8e, 0xd3, 0x3b, 0xf8, 0x0b, 0xb9, 0xfb, 0xe9, 0x23, 0xf2, 0xb5, 0x2c, 0x99, 0x52, 0xda, 0xeb, 0xf4, 0xaa, 0xf1, 0xed, 0x45, 0x3e, 0xbe, 0x3e, 0xc4, 0xd3, 0xf7, 0xb0, 0x17, 0xc5, 0x47, 0xa8, 0x2b, 0x93, 0x63, 0x23, 0xfa, 0x3e, 0x81, 0x1d, 0xd9, 0x83, 0x16, 0x54, 0x25, 0xa5, 0x25, 0x7c, 0xa2, 0xbd, 0x61, 0xe2, 0x77, 0x46, 0x30, 0x5f, 0x31, 0xd9, 0x2a, 0xb9, 0xe7, 0xad, 0x53, 0x4c, 0x05, 0x95, 0x24, 0x91, 0xac, 0x9b, 0xc1, 0x48, 0xfb, 0x7f, 0xf4, 0xb5, 0x9c, 0x73, 0xc5, 0x65, 0x72, 0xb6, 0xa7, 0xe3, 0x1e, 0xe3, 0xe6, 0x5d, 0x2a, 0xa6, 0x8d, 0x56, 0x2d, 0x01, 0xda, 0x62, 0x79, 0xe3, 0x6c, 0xb1, 0xca, 0x74, 0x5b, 0xcc, 0x36, 0x5f, 0xae, 0x9c, 0x66, 0x07, 0xfd, 0xaa, 0xe3, 0x07, 0xbf, 0x4b, 0x18, 0xda, 0xd4, 0xa8, 0xb4, 0x12, 0xed, 0x90, 0x95, 0x19, 0xca, 0x5d, 0x62, 0xe2, 0x2f, 0x5d, 0x4b, 0x83, 0x52, 0xc7, 0x5f, 0x99, 0x41, 0x9f, 0x62, 0xc5, 0x7c, 0xf4, 0x42, 0x7f, 0x40, 0x5d, 0xcf, 0x25, 0xec, 0x4c, 0xc4, 0x1f, 0xcd, 0xcd, 0x58, 0x08, 0xf7, 0x8a, 0xfc, 0x39, 0x31, 0x72, 0xe2, 0xa7, 0x16, 0x45, 0x25, 0xd6, 0xf5, 0x48, 0x8f, 0xdb, 0x27, 0x13, 0x6f, 0x1e, 0xa0, 0x7a, 0x67, 0xf8, 0xad, 0x95, 0xc6, 0xe9, 0x88, 0xf9, 0xab, 0x83, 0x90, 0xe1, 0x49, 0x97, 0xb4, 0x67, 0xdf, 0x12, 0x7b, 0xac, 0x32, 0x0a, 0xd3, 0x71, 0x70, 0x45, 0xf2, 0xfc, 0x38, 0xcb, 0xf3, 0x93, 0x6c, 0x8f, 0x1c, 0x17, 0x6d, 0x7d, 0xca, 0x20, 0xa8, 0xfa, 0xb4, 0x1c, 0xa7, 0xe0, 0xb1, 0xef, 0x25, 0xbe, 0x4a, 0xc7, 0x95, 0x1d, 0x60, 0xaa, 0x93, 0x38, 0x8c, 0xc6, 0xd7, 0xe9, 0xa4, 0xab, 0xa7, 0x0a, 0x12, 0x70, 0xd8, 0x3d, 0xbf, 0x19, 0xa2, 0xb1, 0x44, 0xe4, 0xa7, 0x76, 0xb0, 0x86, 0x5d, 0x5b, 0xe9, 0xe6, 0x55, 0xa5, 0x65, 0xb6, 0xa5, 0x0c, 0xca, 0xf8, 0xbb, 0xa8, 0x25, 0x17, 0xbf, 0x75, 0xf4, 0x0d, 0x2f, 0xe2, 0xd7, 0x75, 0x5b, 0x7b, 0x51, 0xda, 0xf6, 0x29, 0x8b, 0xc2, 0x73, 0x39, 0x7c, 0x8a, 0x7b, 0xe4, 0xcc, 0xea, 0x16, 0x71, 0x9e, 0xa6, 0x29, 0x5c, 0xce, 0x7e, 0xa5, 0x2d, 0x79, 0x18, 0xd3, 0xcd, 0xdf, 0xf9, 0xf8, 0xe5, 0xe1, 0x34, 0x7e, 0x8c, 0x91, 0x1b, 0xae, 0x66, 0xdf, 0x02, 0xf4, 0xf5, 0xf2, 0x97, 0x0d, 0xbf, 0xaa, 0x38, 0xbc, 0x08, 0xc3, 0x0d, 0x56, 0xda, 0x13, 0x8e, 0xe1, 0x1a, 0x8f, 0x2d, 0xb2, 0xb9, 0x6a, 0x4e, 0x82, 0xdd, 0x0a, 0x36, 0x33, 0xcb, 0x05, 0x4d, 0x8a, 0xf0, 0x89, 0xa9, 0xd9, 0xd8, 0x3a, 0xc7, 0xe5, 0x5a, 0x1a, 0x1d, 0x40, 0xdf, 0x1c, 0x9e, 0x07, 0x9e, 0xc1, 0xf6, 0xf8, 0x8e, 0x93, 0xeb, 0x78, 0x94, 0xea, 0x48, 0x25, 0x8d, 0x1c, 0xc4, 0x35, 0x1a, 0x25, 0x7e, 0xdf, 0x13, 0xca, 0x66, 0x93, 0xe0, 0x9f, 0x27, 0x4f, 0x52, 0x79, 0x5a, 0x59, 0x7d, 0x36, 0x5e, 0x93, 0x7d, 0x7f, 0x15, 0xef, 0xb1, 0x13, 0x7e, 0x56, 0xab, 0x29, 0x1e, 0xaa, 0xf1, 0xe2, 0xe3, 0x58, 0xaa, 0xa0, 0x8b, 0x6b, 0xb9, 0x45, 0x44, 0x3e, 0xdf, 0x27, 0x2d, 0x49, 0xe9, 0xa4, 0x11, 0x2c, 0x49, 0x52, 0x1a, 0xf8, 0xad, 0x53, 0xb2, 0xf8, 0x9d, 0xa1, 0x54, 0xf0, 0x5b, 0xcf, 0xad, 0xb6, 0x4e, 0x99, 0xcb, 0xae, 0x4c, 0xa5, 0x88, 0xdf, 0x06, 0xa5, 0x80, 0xdf, 0x13, 0x90, 0x0f, 0xd0, 0xdb, 0xa8, 0xe4, 0xf2, 0x7b, 0xa2, 0x96, 0xda, 0xa4, 0xf0, 0xb8, 0x98, 0x34, 0x49, 0x6b, 0xf3, 0x2c, 0xa6, 0x25, 0x03, 0x5a, 0xea, 0xba, 0xb0, 0x54, 0x02, 0xde, 0x5d, 0x58, 0xcf, 0x77, 0x0a, 0x0a, 0x53, 0xdb, 0x13, 0x35, 0x22, 0x5b, 0xb0, 0x87, 0x6d, 0x27, 0x86, 0x96, 0xac, 0xba, 0x04, 0x4f, 0xb1, 0x47, 0x4c, 0x47, 0xc9, 0x92, 0x3a, 0x83, 0xbe, 0xfa, 0x8b, 0x7c, 0xcf, 0x79, 0xa4, 0x8b, 0xfc, 0xce, 0xb3, 0x76, 0x54, 0x4d, 0x78, 0x7e, 0x6c, 0x6f, 0xf5, 0x49, 0xbd, 0x3d, 0x21, 0xdf, 0x3f, 0xa1, 0xd9, 0xac, 0x59, 0x3d, 0xaa, 0x5a, 0x89, 0xbe, 0x05, 0xe5, 0x34, 0x66, 0x3a, 0x76, 0x12, 0x79, 0x01, 0xf6, 0x60, 0x3a, 0x0d, 0x4c, 0x76, 0x80, 0x2d, 0x10, 0x13, 0x76, 0xf5, 0xd2, 0xa1, 0xba, 0xc1, 0xe9, 0x2e, 0xc4, 0x91, 0x18, 0x09, 0xc8, 0xff, 0xfc, 0xfe, 0xcf, 0x7b, 0xce, 0xca, 0xc4, 0x69, 0xa3, 0xe3, 0xc6, 0x67, 0xff, 0xdb, 0x63, 0x7b, 0x49, 0xd3, 0xc8, 0x2c, 0xb9, 0xfc, 0x18, 0xed, 0xff, 0xce, 0x1b, 0x3f, 0x46, 0x2b, 0xee, 0xff, 0x2a, 0x9e, 0x43, 0x37, 0x7d, 0xd1, 0xd8, 0xfa, 0x2c, 0x27, 0xcc, 0x29, 0x76, 0xc2, 0x5c, 0x9a, 0x0b, 0x8d, 0x42, 0x09, 0x8d, 0xb6, 0xfc, 0xc9, 0x0e, 0x2f, 0xb6, 0x22, 0x37, 0x37, 0x6f, 0x6d, 0x05, 0xd3, 0x22, 0xed, 0x54, 0x95, 0xa8, 0x74, 0x93, 0x1b, 0x8c, 0x37, 0xb9, 0xc0, 0x34, 0x7b, 0x3a, 0x18, 0x4b, 0x5b, 0x41, 0x3f, 0xdb, 0xbd, 0xe9, 0x67, 0xff, 0xe7, 0xcd, 0xf6, 0xec, 0xf5, 0xe5, 0x25, 0x52, 0x95, 0x67, 0xe5, 0xd5, 0xc7, 0x96, 0xec, 0xf2, 0x60, 0x1c, 0x7d, 0x54, 0x9a, 0x35, 0x1d, 0x4c, 0x18, 0xc3, 0x30, 0xdb, 0xb5, 0xe9, 0x55, 0x8c, 0x91, 0xb3, 0xce, 0x3d, 0x0b, 0xaa, 0xdc, 0xd1, 0xab, 0x3f, 0x6c, 0x1a, 0x72, 0x63, 0x0e, 0x86, 0x9c, 0x32, 0x90, 0x7c, 0xeb, 0x42, 0xa5, 0xb3, 0xdb, 0xc0, 0xb0, 0xe9, 0x38, 0x18, 0xb0, 0x8f, 0xeb, 0xd7, 0x1f, 0xa7, 0x19, 0x29, 0x1a, 0x79, 0x83, 0x3c, 0xe7, 0x3c, 0x3e, 0x8b, 0x23, 0x03, 0x24, 0x90, 0x9d, 0x35, 0x3c, 0x56, 0x6a, 0x97, 0xeb, 0xca, 0x4f, 0x43, 0x1e, 0xcf, 0xb3, 0xae, 0x2a, 0xd6, 0xd5, 0x7e, 0xb0, 0xd8, 0x2c, 0xee, 0x1e, 0x13, 0xb7, 0xed, 0x72, 0x7d, 0x1c, 0x34, 0x67, 0x80, 0x75, 0x99, 0x4d, 0x75, 0x4a, 0xaf, 0xcf, 0x6c, 0xc4, 0x6d, 0x09, 0xc1, 0xed, 0x9a, 0x5d, 0xbe, 0x69, 0x17, 0xc2, 0x94, 0x55, 0x9c, 0xb1, 0xce, 0x53, 0x02, 0x02, 0xee, 0x21, 0x0f, 0x86, 0x9b, 0x4a, 0x08, 0x6a, 0x77, 0x3c, 0x7c, 0x56, 0xc6, 0x7a, 0x4f, 0xb2, 0x5e, 0x98, 0x8f, 0x01, 0xb1, 0xa1, 0x0f, 0xea, 0xb7, 0xb9, 0x43, 0x73, 0xb1, 0x0e, 0x7a, 0xac, 0xa9, 0x01, 0xeb, 0x30, 0x9b, 0xea, 0x40, 0xf0, 0xc7, 0x61, 0xdf, 0xf4, 0x6a, 0x2a, 0xf4, 0xeb, 0x87, 0x08, 0xfe, 0x54, 0xd8, 0x15, 0xbd, 0xa0, 0x57, 0xad, 0x06, 0x96, 0xe4, 0x7c, 0xb0, 0xbd, 0x0b, 0x1a, 0x0a, 0x12, 0xf3, 0xc1, 0x3c, 0x67, 0x01, 0x19, 0xef, 0xb7, 0x14, 0x20, 0x75, 0xd2, 0xbc, 0x18, 0xe8, 0x5a, 0x97, 0x40, 0x86, 0x43, 0x3b, 0xff, 0x06, 0x32, 0x56, 0xe1, 0x17, 0x9f, 0xcb, 0xad, 0x77, 0x20, 0x3f, 0x3d, 0xcc, 0xda, 0x00, 0xdd, 0xd6, 0x7c, 0x7e, 0x89, 0x39, 0xae, 0x19, 0xe8, 0xb3, 0x95, 0x5c, 0x4d, 0x5f, 0x68, 0x17, 0xba, 0x04, 0x72, 0xe4, 0x31, 0xb2, 0x04, 0xb4, 0x99, 0xc5, 0xdc, 0x97, 0xc4, 0x3b, 0x0b, 0xa9, 0x57, 0xd0, 0xdf, 0xbc, 0xf4, 0x79, 0xe3, 0x8c, 0x4f, 0xac, 0x45, 0xac, 0x63, 0x1a, 0x79, 0x6e, 0x22, 0x03, 0x1c, 0x4e, 0x37, 0x14, 0xd3, 0x3e, 0x40, 0xab, 0x27, 0x61, 0x27, 0xd2, 0x4c, 0xaa, 0x23, 0x29, 0xdf, 0x32, 0x76, 0x61, 0xff, 0x73, 0x80, 0x5c, 0xfe, 0x67, 0x23, 0x90, 0x76, 0x6a, 0x88, 0xdd, 0xfc, 0xef, 0xaa, 0x4a, 0xf5, 0x69, 0x99, 0xb3, 0x2f, 0x56, 0xfc, 0x0d, 0xa3, 0x49, 0xa6, 0x71, 0x6b, 0xba, 0x71, 0xdc, 0x04, 0x16, 0xc8, 0x85, 0x7c, 0x28, 0x90, 0x1f, 0x45, 0x5e, 0xec, 0x23, 0x3c, 0x2a, 0x26, 0xfc, 0x35, 0x28, 0x7a, 0xe2, 0xfb, 0xf2, 0x03, 0xe8, 0x5b, 0x82, 0x5f, 0x26, 0xe5, 0x9c, 0x80, 0x34, 0xa3, 0xf9, 0x52, 0x90, 0x62, 0xac, 0x66, 0xbb, 0x83, 0xfb, 0x3d, 0x96, 0x3b, 0x0f, 0xcb, 0x7d, 0x49, 0xcc, 0x7a, 0x5c, 0xb2, 0x56, 0xd4, 0xab, 0xcc, 0x9b, 0x18, 0x1b, 0x26, 0x63, 0x91, 0x26, 0xa7, 0xb2, 0x56, 0xd6, 0x1d, 0x18, 0xfc, 0xd6, 0x1a, 0xb9, 0x5c, 0x7e, 0x01, 0xf4, 0x64, 0x79, 0x3c, 0xd7, 0xd0, 0xe3, 0x3d, 0x3c, 0x78, 0x4f, 0xc5, 0xfb, 0xc4, 0x3d, 0x0f, 0x5a, 0x5d, 0x24, 0x17, 0xe4, 0x6b, 0x84, 0x2c, 0x0d, 0xdd, 0xb3, 0x44, 0x36, 0xc7, 0x68, 0x34, 0x17, 0xf1, 0xfd, 0x14, 0xfb, 0x49, 0x21, 0x1b, 0xfb, 0x64, 0xa2, 0xad, 0xb5, 0x05, 0x53, 0x3c, 0xa8, 0xc9, 0xdf, 0x68, 0x8b, 0x57, 0x93, 0xba, 0x74, 0xb7, 0xf6, 0x6d, 0x3f, 0x7e, 0x8f, 0x4e, 0xf6, 0x2e, 0x1c, 0xa0, 0x59, 0x42, 0x7c, 0x2a, 0x64, 0x1e, 0x29, 0x46, 0x2b, 0xa6, 0x42, 0xac, 0x20, 0x60, 0xf7, 0x04, 0x79, 0xa1, 0xb5, 0x5a, 0xb8, 0x8b, 0xbb, 0xa0, 0xca, 0x69, 0x9c, 0xd5, 0x05, 0x7e, 0xc5, 0x55, 0xe2, 0x75, 0x9a, 0x8a, 0x3b, 0x10, 0x43, 0xc6, 0x92, 0x0e, 0xac, 0x8b, 0xa9, 0xd8, 0x8b, 0x92, 0x6d, 0x92, 0x98, 0x67, 0x56, 0x1c, 0x5a, 0xa8, 0xd1, 0x69, 0x54, 0xf2, 0x66, 0x75, 0x80, 0xc9, 0x39, 0x91, 0x7c, 0x14, 0x73, 0x31, 0x7d, 0x1b, 0x67, 0x51, 0xc8, 0x44, 0x8a, 0xed, 0xdf, 0xf1, 0xd9, 0x98, 0x77, 0xa8, 0x9f, 0xef, 0x12, 0x96, 0xcb, 0xb1, 0x5c, 0x71, 0x6b, 0xe5, 0x3e, 0xb6, 0xac, 0x26, 0x23, 0x26, 0xf5, 0x36, 0x6c, 0xb3, 0xc2, 0x76, 0xb0, 0xad, 0x84, 0xd9, 0x88, 0xcd, 0x03, 0x0f, 0xc9, 0xe5, 0x48, 0xe7, 0x20, 0x9d, 0x20, 0xd9, 0x2e, 0x7d, 0x28, 0xee, 0xf3, 0xbb, 0x30, 0x6a, 0x17, 0xab, 0xcd, 0x36, 0xcd, 0x42, 0x39, 0x33, 0x47, 0x3a, 0x84, 0x92, 0xb5, 0x78, 0x06, 0x18, 0x4a, 0xe1, 0xe0, 0x72, 0x30, 0xdd, 0xec, 0x06, 0xc7, 0xcd, 0x2e, 0x28, 0xaa, 0xaf, 0xbc, 0xb9, 0x12, 0x8a, 0xeb, 0x2b, 0x6e, 0xae, 0x80, 0x59, 0x28, 0x9d, 0x90, 0x4a, 0x44, 0xea, 0x31, 0x1d, 0x51, 0x0f, 0x6a, 0x1a, 0xb5, 0xe8, 0xa6, 0x3b, 0x26, 0x03, 0x76, 0xec, 0xe4, 0x64, 0xcd, 0x14, 0x94, 0x5b, 0xeb, 0x51, 0x2f, 0x5c, 0x48, 0x63, 0x12, 0x72, 0xbd, 0x95, 0x7c, 0x3c, 0x36, 0x21, 0xb5, 0x17, 0x92, 0xfd, 0x43, 0xb7, 0x47, 0xdb, 0xca, 0xad, 0x01, 0x8e, 0x91, 0xcf, 0x6b, 0x33, 0x2a, 0xe2, 0x79, 0xc8, 0xb5, 0x1a, 0x6c, 0x27, 0x78, 0x0f, 0x76, 0x99, 0xa0, 0x86, 0x5f, 0x0f, 0xd5, 0x10, 0x75, 0xa2, 0xe4, 0x73, 0x66, 0x89, 0x73, 0x22, 0xd9, 0x8e, 0x37, 0xfb, 0x36, 0xd0, 0x8d, 0xba, 0x08, 0xb3, 0xfe, 0x6d, 0xe2, 0x82, 0x08, 0xfb, 0xbb, 0x5d, 0x30, 0xdb, 0x56, 0x2f, 0x46, 0x67, 0x61, 0x34, 0xa1, 0x6d, 0xd5, 0xa6, 0xce, 0x9c, 0xc3, 0xb1, 0x71, 0xb9, 0xe6, 0x25, 0x73, 0xd5, 0xf2, 0xf2, 0x6a, 0x79, 0xf9, 0x6c, 0xf5, 0xf1, 0x73, 0xdc, 0x68, 0xa6, 0xf6, 0xe2, 0xfc, 0x94, 0x17, 0x44, 0x5e, 0xb6, 0x6e, 0x23, 0x68, 0xb1, 0xd6, 0x5e, 0x62, 0xbc, 0x7d, 0xe0, 0x3f, 0x55, 0xe2, 0x9c, 0x4b, 0x94, 0x07, 0xea, 0x5c, 0xee, 0xf7, 0x53, 0x2e, 0xdf, 0x3b, 0x30, 0xce, 0xe4, 0xcf, 0x9b, 0x13, 0x1c, 0xf8, 0xf9, 0x63, 0x7b, 0x79, 0x46, 0xec, 0x32, 0xf2, 0xe6, 0xf9, 0xdc, 0xbf, 0x3d, 0x27, 0x28, 0x24, 0x10, 0xdd, 0xe6, 0x0c, 0x15, 0x98, 0xb3, 0xd7, 0x31, 0x93, 0x39, 0xf5, 0x4c, 0x90, 0xf7, 0x3f, 0x24, 0x7b, 0xec, 0xad, 0x60, 0xe1, 0x39, 0x0a, 0x07, 0xca, 0x4c, 0xa3, 0x36, 0x23, 0xea, 0xa0, 0xfd, 0xca, 0xe2, 0xbc, 0x20, 0xb9, 0xe3, 0x62, 0xa8, 0xed, 0x0d, 0xbe, 0x8d, 0xc1, 0x7d, 0xc5, 0x48, 0x1b, 0xa5, 0x33, 0xc0, 0x84, 0x14, 0x68, 0xb0, 0x7a, 0xec, 0x48, 0x5f, 0x2b, 0x1d, 0x07, 0x06, 0x95, 0x95, 0x45, 0x98, 0x8f, 0xad, 0x7a, 0x4e, 0x21, 0xca, 0xe7, 0xca, 0xf9, 0x7f, 0x8a, 0x81, 0xd5, 0x53, 0x72, 0xcb, 0xbf, 0xbe, 0xd5, 0x69, 0x4e, 0x8d, 0x7f, 0xc8, 0xab, 0x71, 0x6c, 0x07, 0xf6, 0x2a, 0x2f, 0x72, 0x38, 0xc1, 0xcd, 0x4b, 0x4a, 0x2a, 0x9c, 0x3e, 0xb1, 0xfe, 0x44, 0xae, 0xb6, 0x96, 0xdb, 0xaa, 0x04, 0x0f, 0xd7, 0x66, 0xf3, 0x1d, 0xce, 0x6a, 0x28, 0x4e, 0x81, 0xa7, 0x3c, 0x09, 0x4f, 0x71, 0x25, 0x42, 0xb4, 0x56, 0xc3, 0x62, 0x8e, 0x98, 0x9d, 0x29, 0xa3, 0x15, 0x3f, 0x0e, 0x9b, 0x13, 0x8a, 0x91, 0xd3, 0x97, 0xd0, 0xba, 0x8a, 0x55, 0x80, 0xe5, 0xcb, 0x07, 0xfb, 0x58, 0x03, 0x48, 0xae, 0x93, 0x49, 0xb4, 0x58, 0x01, 0x9d, 0x78, 0x08, 0xe6, 0x8d, 0xcc, 0xab, 0x8c, 0x46, 0x07, 0xf3, 0xaa, 0x39, 0xf3, 0x4e, 0x83, 0x7d, 0x06, 0xea, 0x6a, 0x35, 0x23, 0x63, 0x2f, 0x29, 0xf9, 0xb2, 0xcb, 0xbc, 0x8e, 0xb4, 0xe3, 0x60, 0xb6, 0xb5, 0x62, 0xd6, 0x66, 0x20, 0x7d, 0x78, 0x92, 0x7f, 0x63, 0x58, 0x5a, 0x1b, 0x43, 0x8b, 0x67, 0x3e, 0xcf, 0x07, 0xc7, 0xfb, 0xf7, 0x7e, 0xde, 0xbb, 0xab, 0x9d, 0x88, 0xc8, 0xb7, 0xac, 0x98, 0xb5, 0x76, 0x29, 0xd2, 0xce, 0x76, 0x22, 0x19, 0x64, 0x27, 0x28, 0xf9, 0xb4, 0x9c, 0xeb, 0xe2, 0x32, 0x45, 0x5a, 0xbf, 0x24, 0x4f, 0x5b, 0x93, 0xe4, 0x59, 0x82, 0xba, 0xaf, 0xb8, 0xb3, 0x41, 0x47, 0xfb, 0xc3, 0x9f, 0x4b, 0xd8, 0xa8, 0x9d, 0x4b, 0xb2, 0x84, 0xac, 0xc1, 0x90, 0xc3, 0xd8, 0xff, 0x26, 0xc7, 0x57, 0x34, 0x49, 0xad, 0x62, 0xe5, 0x12, 0xfa, 0xef, 0x46, 0xff, 0x3d, 0x68, 0x31, 0xd8, 0x04, 0x37, 0xd7, 0x1d, 0x4c, 0xa1, 0xc1, 0xf9, 0xa9, 0x72, 0x47, 0x37, 0x24, 0xa8, 0xbe, 0xc0, 0xf5, 0xeb, 0x5d, 0x72, 0x19, 0xd5, 0x8f, 0x6f, 0x16, 0xd5, 0x6b, 0x33, 0x9e, 0x87, 0x67, 0xc7, 0xdc, 0x7f, 0x04, 0xdd, 0x8d, 0x5e, 0x30, 0x79, 0x9e, 0x05, 0x03, 0x7e, 0x1b, 0xf0, 0x5b, 0x87, 0x6f, 0x0b, 0xbe, 0xf3, 0xe8, 0x8c, 0x6d, 0xfc, 0xce, 0xc1, 0x6f, 0xda, 0x07, 0x1f, 0x15, 0x79, 0xcd, 0x47, 0xb9, 0x60, 0xeb, 0x04, 0x1d, 0x59, 0xad, 0x3f, 0x3e, 0x47, 0x96, 0xd2, 0x4f, 0x1e, 0x4c, 0x58, 0x9c, 0x26, 0xb2, 0x58, 0x13, 0xdf, 0xc2, 0xbe, 0xb1, 0xd8, 0x3c, 0xb6, 0xec, 0xe0, 0xfb, 0x98, 0xc6, 0x52, 0xc0, 0x69, 0xe6, 0x8f, 0x8c, 0xed, 0x51, 0xf2, 0x53, 0x63, 0xc5, 0xbf, 0xc5, 0x28, 0x11, 0xc7, 0x3f, 0x22, 0xea, 0x26, 0x8d, 0x5e, 0xaa, 0x6e, 0x58, 0xff, 0x23, 0x04, 0x8b, 0xf9, 0x79, 0xaa, 0x13, 0xea, 0x13, 0xb9, 0x34, 0x23, 0x2b, 0xe6, 0x96, 0x66, 0x23, 0x1f, 0x90, 0x1f, 0x62, 0xde, 0xb5, 0x4b, 0xcb, 0x63, 0xfb, 0x65, 0xf2, 0x78, 0xd2, 0x39, 0x1f, 0x69, 0x74, 0x1e, 0x52, 0x60, 0x2d, 0xd8, 0xa9, 0x4d, 0x15, 0xb8, 0xf0, 0x3d, 0x1b, 0xe2, 0x07, 0xfb, 0x91, 0x83, 0xfa, 0x51, 0xfa, 0xac, 0xb5, 0xd5, 0x75, 0x83, 0x0f, 0xf9, 0x73, 0x21, 0x18, 0xcc, 0xcb, 0x54, 0x15, 0xa5, 0x92, 0x81, 0xe7, 0xba, 0x8c, 0xc5, 0x3d, 0x60, 0x79, 0x7b, 0x97, 0xa2, 0x97, 0x3d, 0x0d, 0x49, 0x0b, 0xdf, 0xc2, 0x65, 0x4f, 0xbe, 0x74, 0xcb, 0xd0, 0xa9, 0xa0, 0xbc, 0x5a, 0x70, 0x73, 0xc1, 0x4c, 0x5e, 0x7d, 0xa4, 0xe1, 0xf5, 0x22, 0x8e, 0x32, 0x7f, 0x9c, 0x15, 0x8b, 0x78, 0x2f, 0x64, 0x1c, 0xda, 0x05, 0xde, 0x6d, 0x2f, 0xd1, 0x1e, 0xe3, 0x24, 0x2e, 0x2b, 0x53, 0xb0, 0x5f, 0xa1, 0x61, 0x7f, 0x7e, 0x61, 0x80, 0x4f, 0x22, 0xd8, 0x4f, 0x2d, 0x60, 0xd7, 0x5a, 0xe0, 0x42, 0x95, 0x62, 0xe5, 0xb4, 0x93, 0x2f, 0xd5, 0x72, 0x5a, 0x3b, 0xc4, 0x53, 0x1e, 0xd0, 0x24, 0xde, 0x23, 0x74, 0xcb, 0x04, 0x71, 0x49, 0xef, 0xab, 0xc4, 0x33, 0xbd, 0x43, 0x65, 0x28, 0x53, 0x4a, 0x50, 0x52, 0x21, 0xc4, 0x36, 0x2b, 0xb6, 0xc0, 0xfc, 0x4f, 0x8c, 0xaa, 0x2d, 0xab, 0xf2, 0x6c, 0x9e, 0x5a, 0x60, 0x72, 0xb4, 0x92, 0x14, 0x19, 0x3d, 0x70, 0x49, 0xdc, 0xcb, 0x97, 0xe1, 0xa0, 0xf3, 0x2f, 0xd2, 0xda, 0xb1, 0x55, 0x2e, 0xe2, 0x9e, 0x6f, 0x23, 0xf7, 0x9c, 0x72, 0x79, 0xee, 0xf9, 0x93, 0xef, 0x8d, 0xe7, 0x9e, 0x97, 0x3e, 0xcf, 0x8d, 0xd6, 0x35, 0xd0, 0xbe, 0x2c, 0x39, 0xb1, 0xae, 0x41, 0x9c, 0x40, 0x41, 0x6b, 0xa0, 0x0b, 0x9c, 0x90, 0x13, 0x9a, 0x15, 0x3f, 0xe1, 0xb7, 0x71, 0xd0, 0x0e, 0x81, 0x7e, 0x59, 0x9f, 0x3a, 0xcb, 0x67, 0x23, 0x2e, 0x5a, 0x8e, 0x1a, 0x8d, 0x3e, 0x39, 0xbe, 0x1b, 0x87, 0x99, 0x56, 0x3d, 0x8b, 0xbb, 0xa7, 0x4b, 0x69, 0x2e, 0xb9, 0x0e, 0x73, 0x6b, 0xb0, 0xd9, 0xe3, 0xf3, 0xc9, 0xf6, 0x8c, 0x83, 0x31, 0xa4, 0x99, 0x06, 0x6b, 0xc5, 0xdb, 0x1f, 0x21, 0x96, 0x2b, 0x68, 0xf4, 0xa3, 0xa0, 0x02, 0xe5, 0xb3, 0xb9, 0xfa, 0x34, 0x54, 0xd4, 0xd0, 0xea, 0xeb, 0xf6, 0x42, 0x0f, 0x4a, 0x61, 0x9a, 0xfd, 0x69, 0x44, 0x2d, 0xdc, 0x1b, 0x70, 0xaf, 0x47, 0x2e, 0x8f, 0x3a, 0xb9, 0x2f, 0xe0, 0x5a, 0x87, 0xba, 0x8c, 0xb5, 0x02, 0xe5, 0x3e, 0xcd, 0xd6, 0xcd, 0xf9, 0xc9, 0x28, 0x1d, 0xc7, 0x1c, 0xd4, 0x93, 0xcd, 0x24, 0xb7, 0xc2, 0xdc, 0x1f, 0x6b, 0xee, 0x62, 0x74, 0xa7, 0xea, 0xfe, 0x1a, 0x27, 0xb6, 0x23, 0x57, 0x76, 0xf0, 0x77, 0x26, 0x14, 0xeb, 0x7a, 0xa9, 0xbf, 0xa0, 0x26, 0x5a, 0xc2, 0x3e, 0x13, 0xa0, 0x54, 0xf4, 0x20, 0x5a, 0x11, 0x84, 0xbc, 0xda, 0x25, 0x97, 0xa3, 0xae, 0x21, 0xdb, 0x3c, 0x82, 0x5b, 0x63, 0x4b, 0xe4, 0x8b, 0xbb, 0xab, 0xb1, 0x66, 0x07, 0x35, 0x2e, 0x57, 0x47, 0xab, 0x2f, 0x91, 0xcb, 0x35, 0x6a, 0x5c, 0x0e, 0x2d, 0x6d, 0xdd, 0x8b, 0x4b, 0xca, 0xe8, 0xa6, 0x1b, 0xd4, 0x32, 0x8f, 0xb5, 0xe4, 0x46, 0xa5, 0x6d, 0xa4, 0x73, 0x7f, 0x12, 0x5f, 0x8b, 0xa6, 0x5f, 0x8d, 0x9a, 0xad, 0x43, 0xe3, 0x82, 0x0d, 0xda, 0x68, 0x1c, 0xe8, 0x72, 0xa3, 0xfa, 0x6d, 0x14, 0xba, 0x58, 0x29, 0x45, 0x3d, 0x0f, 0x2d, 0x5c, 0xe2, 0x94, 0x64, 0xf1, 0x36, 0x83, 0xbe, 0x9d, 0xbf, 0x48, 0x0f, 0x9f, 0x8b, 0x69, 0x5f, 0x64, 0x17, 0x96, 0xa3, 0xb7, 0xf0, 0xd7, 0xa4, 0x25, 0xa8, 0xdc, 0x28, 0xa0, 0xaf, 0x2a, 0xe9, 0x01, 0x1d, 0xbe, 0x5d, 0x36, 0xd4, 0x60, 0x89, 0xca, 0x07, 0x7e, 0xab, 0x69, 0xe5, 0x8e, 0x4b, 0xd2, 0x17, 0xeb, 0x5d, 0xfa, 0x6c, 0xd1, 0xf7, 0x0a, 0x4d, 0x87, 0x62, 0x72, 0x25, 0xcd, 0x08, 0x5b, 0x3d, 0x4e, 0xb4, 0x6f, 0x9c, 0x33, 0x69, 0xc5, 0x33, 0xaf, 0x1e, 0x91, 0xb0, 0xaf, 0x1c, 0xf0, 0x6f, 0x2a, 0xa8, 0x2c, 0x88, 0xf1, 0x1a, 0xa6, 0xd4, 0xb0, 0x0c, 0xff, 0x26, 0x6d, 0x75, 0xb6, 0x7c, 0x51, 0xba, 0x4c, 0x0e, 0xe3, 0xd9, 0x21, 0xea, 0x4b, 0x5b, 0x05, 0x37, 0x68, 0x85, 0x29, 0x5b, 0x85, 0x8e, 0xb2, 0x1d, 0x21, 0x32, 0xd3, 0xb9, 0x0e, 0x76, 0xe2, 0x03, 0x5b, 0x0a, 0x3c, 0xbc, 0x86, 0x20, 0x99, 0x5e, 0x87, 0x65, 0x82, 0x98, 0x19, 0x82, 0x5d, 0xbc, 0x72, 0x78, 0x99, 0x5c, 0x39, 0x15, 0x2d, 0x26, 0x5e, 0x4b, 0xbd, 0xd5, 0x99, 0x11, 0x9f, 0x5d, 0xb6, 0x56, 0x5a, 0xa7, 0xc7, 0x47, 0x1c, 0x46, 0x9f, 0x28, 0x80, 0x82, 0x4a, 0xeb, 0xb5, 0xb2, 0x07, 0x7b, 0x1f, 0x8f, 0x31, 0x20, 0xb9, 0xcd, 0xa0, 0xfb, 0xcd, 0x63, 0xb0, 0xae, 0x52, 0xc8, 0x7f, 0xfe, 0x76, 0x42, 0x09, 0xb6, 0xb0, 0x90, 0xc8, 0x98, 0x92, 0x74, 0xca, 0x02, 0x5a, 0xe3, 0x46, 0x14, 0x57, 0xcb, 0xe5, 0x18, 0xad, 0x89, 0x51, 0x8c, 0xba, 0x41, 0x6b, 0xa5, 0xef, 0x87, 0x60, 0x0c, 0x95, 0xda, 0x33, 0x92, 0x70, 0x3a, 0xf5, 0x62, 0x75, 0x0d, 0xad, 0x41, 0x16, 0xab, 0x93, 0x39, 0x1d, 0xdb, 0x93, 0xa1, 0x2c, 0xa7, 0x89, 0xcf, 0xd3, 0x1e, 0xa5, 0x51, 0x13, 0xdd, 0x73, 0xd6, 0x4a, 0x79, 0xfa, 0xb8, 0x35, 0xca, 0xe1, 0xba, 0x41, 0x6d, 0x2d, 0xa9, 0x2d, 0xde, 0x3e, 0x08, 0x85, 0x2d, 0xc5, 0x16, 0x89, 0x92, 0x84, 0x13, 0xed, 0x53, 0x49, 0x36, 0x50, 0x21, 0xe6, 0x20, 0xa7, 0xe4, 0x50, 0x84, 0x9a, 0xae, 0xb1, 0x6e, 0x90, 0xf1, 0x69, 0x44, 0x89, 0xc6, 0x73, 0xa5, 0x18, 0x2b, 0x7d, 0xcd, 0x34, 0xc6, 0xd0, 0xa4, 0xa4, 0xed, 0xd2, 0x52, 0x40, 0x67, 0x14, 0x65, 0xb8, 0xa9, 0x8c, 0x99, 0x3c, 0x3e, 0x89, 0xd8, 0xe7, 0xf1, 0x49, 0xac, 0x5d, 0x70, 0xb2, 0x62, 0x26, 0xce, 0x66, 0x45, 0xda, 0x40, 0x89, 0xb1, 0x49, 0xfb, 0xa6, 0xf3, 0x8d, 0x1e, 0xd4, 0xa4, 0xcb, 0x9b, 0x97, 0x91, 0x2e, 0x5b, 0x93, 0xb0, 0xfb, 0x66, 0xc0, 0x55, 0x74, 0xb2, 0xac, 0x77, 0x57, 0x45, 0x9f, 0x1d, 0x6b, 0xc5, 0x6b, 0xcc, 0x10, 0x7a, 0xdb, 0x32, 0x30, 0x0b, 0x4e, 0x2a, 0xb8, 0x6a, 0x35, 0xf7, 0x7d, 0x6d, 0xde, 0xf7, 0x76, 0xba, 0x53, 0x2b, 0x89, 0x83, 0x1a, 0xcc, 0xc7, 0xb4, 0x1c, 0x62, 0xc8, 0xaf, 0x50, 0x42, 0x11, 0xf5, 0x44, 0x24, 0xec, 0xbb, 0x36, 0xec, 0xd1, 0x76, 0x5a, 0xd3, 0x47, 0xa7, 0xf3, 0xad, 0x3a, 0x77, 0xf0, 0x21, 0xc1, 0x1b, 0x04, 0x3c, 0xa9, 0x18, 0xa5, 0x32, 0x0b, 0xec, 0x90, 0x8d, 0x7c, 0x28, 0xcb, 0xea, 0x40, 0x88, 0x1d, 0x90, 0x43, 0x2b, 0x2b, 0xd5, 0x27, 0x18, 0x1a, 0xf4, 0xc5, 0x90, 0xec, 0xe9, 0x6e, 0xc8, 0x99, 0xee, 0x81, 0x3c, 0x5a, 0x87, 0x0a, 0x67, 0x9d, 0x3d, 0xd4, 0xf3, 0x90, 0xb7, 0x5f, 0x26, 0x4f, 0xa4, 0xdc, 0xb7, 0x28, 0x35, 0x8d, 0x72, 0xea, 0x62, 0x2a, 0xf2, 0x0e, 0x73, 0x4c, 0x07, 0x70, 0x1c, 0xad, 0xb4, 0x97, 0xb0, 0x3f, 0xea, 0xe9, 0x2e, 0x23, 0x5b, 0xa2, 0x06, 0xbf, 0x1e, 0xb2, 0x15, 0x42, 0xa9, 0xf5, 0x5a, 0xb4, 0x95, 0x88, 0xae, 0x9e, 0xa2, 0x79, 0x4a, 0xa2, 0xc6, 0x8c, 0x8f, 0xb0, 0x16, 0x1e, 0xac, 0x05, 0x7d, 0x9f, 0x4d, 0x52, 0x69, 0xc6, 0x05, 0xe4, 0x4c, 0x6e, 0x28, 0xe5, 0xef, 0x13, 0x82, 0x27, 0x91, 0xb5, 0x47, 0x56, 0x5f, 0xc4, 0xf6, 0xce, 0xa0, 0xc8, 0x67, 0x2c, 0x0b, 0x4b, 0x92, 0x94, 0xaa, 0x78, 0x19, 0x72, 0x3d, 0x61, 0xd8, 0x8a, 0xb4, 0xfb, 0xd8, 0x5e, 0xc4, 0x1e, 0x71, 0xf5, 0x67, 0x4a, 0x5c, 0x4a, 0xc1, 0xdf, 0x94, 0x38, 0xae, 0xf8, 0x29, 0x99, 0x3d, 0x74, 0xde, 0x9b, 0xfd, 0x22, 0xa9, 0xf3, 0x3b, 0x94, 0x3a, 0xf9, 0x97, 0x97, 0x3a, 0xdb, 0x63, 0xe3, 0xa5, 0x0e, 0xed, 0x81, 0x4d, 0x6e, 0x85, 0x8b, 0x36, 0x75, 0xa7, 0xee, 0x8c, 0x23, 0xa7, 0x5c, 0x52, 0x4c, 0x37, 0x8c, 0xcf, 0xba, 0x29, 0xb1, 0xaf, 0xf5, 0x52, 0xdb, 0x5a, 0x6d, 0x00, 0xb4, 0x93, 0xf6, 0xdf, 0xcf, 0xc2, 0xf0, 0xcb, 0x5b, 0xc1, 0x2e, 0xdd, 0x87, 0xdf, 0xcf, 0xe1, 0xf3, 0x6f, 0xe8, 0xe6, 0x1d, 0x99, 0x61, 0x50, 0xb2, 0xf8, 0x2d, 0x29, 0x06, 0x7e, 0xeb, 0x88, 0xf2, 0xc1, 0xc8, 0x27, 0xd1, 0x61, 0x2d, 0x64, 0x6b, 0xda, 0x3e, 0x62, 0xdd, 0x8b, 0x3f, 0x02, 0x4b, 0xd0, 0x8a, 0x58, 0x5b, 0xfc, 0xde, 0x90, 0x9c, 0x3c, 0x9b, 0x29, 0x96, 0xf2, 0xfd, 0xb0, 0x90, 0xbf, 0x61, 0x53, 0xdc, 0x67, 0xf4, 0x00, 0x9d, 0xed, 0x14, 0xe2, 0xbb, 0xe9, 0xc9, 0xaa, 0x2c, 0x71, 0xa5, 0xcc, 0x4b, 0x2c, 0x21, 0xcc, 0xa1, 0xf6, 0x6d, 0x4e, 0x5d, 0x79, 0x4b, 0x98, 0xac, 0xd0, 0x93, 0xec, 0x15, 0x3b, 0x81, 0x5f, 0x7e, 0x11, 0x86, 0x7f, 0x6d, 0x94, 0xa6, 0xc3, 0xbb, 0x30, 0xfc, 0xea, 0x5a, 0x7c, 0xfe, 0x09, 0x86, 0xdf, 0x53, 0x12, 0xbb, 0x0f, 0x75, 0x30, 0xfc, 0xf3, 0xc7, 0x62, 0x7c, 0x8f, 0xf7, 0xcf, 0x5f, 0x8a, 0xd1, 0xc0, 0xec, 0xf0, 0xcf, 0xdf, 0x8d, 0xf1, 0xbd, 0xe7, 0x3f, 0x1f, 0xc6, 0xb7, 0x01, 0xdf, 0xe7, 0x63, 0x7c, 0x2f, 0xf8, 0x6b, 0x59, 0x31, 0x3a, 0x06, 0x61, 0xf8, 0xb5, 0x02, 0x7c, 0x4f, 0xc4, 0xb7, 0x3b, 0xc6, 0xf7, 0x91, 0xbf, 0x36, 0x1f, 0xdf, 0x93, 0xf0, 0xbd, 0x1c, 0xdf, 0x59, 0xf8, 0xde, 0x88, 0xef, 0x3c, 0x7c, 0x3f, 0x2f, 0xee, 0x5e, 0x7f, 0x4d, 0xbb, 0x67, 0xfc, 0xb5, 0x83, 0xe2, 0xbe, 0xef, 0xd7, 0x8e, 0x89, 0x7b, 0xc3, 0x5f, 0x3b, 0x0f, 0x5c, 0xde, 0xeb, 0x46, 0x71, 0xcf, 0xfa, 0xeb, 0x5f, 0x11, 0xf7, 0x8f, 0xbf, 0x4e, 0xa3, 0xef, 0x58, 0xce, 0xeb, 0xb3, 0x81, 0xcb, 0x79, 0x7d, 0xae, 0xb8, 0xf7, 0xfc, 0xf5, 0x5a, 0xe0, 0x72, 0x5e, 0xbf, 0x83, 0x77, 0x55, 0x0e, 0xbf, 0x7e, 0x27, 0xef, 0x3a, 0x1d, 0x7e, 0xfd, 0x5e, 0x7c, 0x67, 0xe3, 0x7b, 0x10, 0xdf, 0xd7, 0xe2, 0xfb, 0x29, 0xda, 0x89, 0x8b, 0xef, 0x1f, 0xd3, 0xee, 0x5b, 0x7c, 0xff, 0x0c, 0xdf, 0x32, 0xbe, 0xdf, 0xe6, 0xdd, 0x69, 0xc3, 0xaf, 0x7f, 0x00, 0x74, 0x96, 0xd1, 0xf0, 0xeb, 0xa7, 0xf0, 0x5d, 0x8c, 0xef, 0x0b, 0xf8, 0xbe, 0x09, 0x86, 0xf7, 0x10, 0x1c, 0xb3, 0xf0, 0x7d, 0x2d, 0xed, 0x62, 0xc5, 0xf7, 0x57, 0xf1, 0x5d, 0x82, 0x6f, 0xda, 0xd9, 0xe6, 0xc2, 0x77, 0x31, 0xed, 0x1e, 0xc5, 0x37, 0xc1, 0xe5, 0xc1, 0xf7, 0x37, 0x44, 0xfd, 0xf6, 0xb8, 0x45, 0xfd, 0xf6, 0xf8, 0x44, 0xfd, 0xf6, 0x7c, 0x4b, 0xd4, 0x6f, 0xcf, 0x9d, 0xa2, 0x7e, 0x7b, 0x1e, 0x10, 0xf5, 0xdb, 0x43, 0x70, 0x21, 0x3e, 0xf7, 0xfc, 0x54, 0xd4, 0x73, 0xcf, 0x1e, 0x51, 0xcf, 0x3d, 0x87, 0x45, 0x3d, 0xf7, 0x9c, 0x13, 0xf5, 0x7c, 0x23, 0x4b, 0xd4, 0xf3, 0x8d, 0x1b, 0x45, 0xfe, 0x6f, 0x54, 0x61, 0xab, 0x6d, 0xc3, 0x67, 0x27, 0x0c, 0xef, 0x42, 0x09, 0xbb, 0xeb, 0xfb, 0xf8, 0xa0, 0xfb, 0x67, 0x15, 0xc2, 0xff, 0x67, 0xb5, 0xf8, 0xec, 0xc6, 0x67, 0x3f, 0x3e, 0x87, 0xf1, 0x39, 0x89, 0xcf, 0x39, 0x7c, 0x46, 0xb5, 0x74, 0xf8, 0xec, 0x46, 0x38, 0x76, 0x9b, 0xf1, 0xc9, 0xc7, 0xc7, 0x86, 0x8f, 0x03, 0x9f, 0xb2, 0x64, 0xf8, 0xdf, 0x7a, 0x76, 0x37, 0xe0, 0xb3, 0x18, 0x9f, 0xe8, 0x95, 0xa7, 0x49, 0x4b, 0x8f, 0x3d, 0x75, 0xf7, 0xc3, 0xf8, 0x60, 0x1d, 0x76, 0xef, 0xfe, 0x4f, 0xa4, 0x7f, 0x13, 0x1f, 0xac, 0xdf, 0xee, 0xc3, 0x4d, 0xed, 0x2d, 0x91, 0x68, 0x51, 0x6b, 0x57, 0xd7, 0xf2, 0xab, 0x4c, 0xda, 0xc6, 0xf5, 0xa4, 0x97, 0x5c, 0x72, 0x53, 0x51, 0xa9, 0x9c, 0xec, 0xd8, 0xa0, 0x61, 0x70, 0xb1, 0xc4, 0x2d, 0xf4, 0xc6, 0x32, 0x89, 0x5b, 0xe8, 0x8d, 0x07, 0x25, 0x6e, 0xa1, 0x37, 0x9e, 0xec, 0xe5, 0x96, 0x79, 0xe3, 0x5f, 0x7b, 0xb9, 0x65, 0xde, 0x78, 0x47, 0xe2, 0x96, 0x79, 0xe3, 0xac, 0xc4, 0x2d, 0xb3, 0x37, 0x4b, 0xe2, 0x96, 0xd9, 0xeb, 0xe8, 0xe5, 0x96, 0xd9, 0x7b, 0xb3, 0xc4, 0x2d, 0xb3, 0xf7, 0x3b, 0xf8, 0x46, 0x6c, 0xee, 0xbd, 0x17, 0xdf, 0x57, 0xe1, 0xfb, 0x69, 0x89, 0x29, 0x7f, 0xef, 0xeb, 0xf8, 0xbe, 0x1a, 0xdf, 0x47, 0x25, 0xa6, 0xd0, 0xbd, 0xa3, 0xa2, 0xfc, 0x5f, 0x4c, 0xeb, 0x93, 0xf8, 0xed, 0xc2, 0x37, 0xc2, 0xf1, 0x8b, 0x5b, 0xf1, 0x8d, 0xe5, 0xfd, 0xe2, 0x6e, 0x7c, 0x63, 0x79, 0xbf, 0x58, 0x8f, 0x6f, 0x2c, 0xe7, 0x17, 0xcf, 0xe1, 0x1b, 0xcb, 0xf9, 0xc5, 0xab, 0xf8, 0xc6, 0x72, 0x7e, 0xf1, 0x1b, 0x7c, 0x23, 0x85, 0xfe, 0xe2, 0x94, 0x8e, 0xcb, 0x7b, 0xd3, 0xa0, 0xe3, 0xf2, 0xde, 0xcc, 0xeb, 0x93, 0xb2, 0x91, 0x32, 0xdf, 0x9c, 0xa1, 0x03, 0x3d, 0xe6, 0xf7, 0xa6, 0x4f, 0x94, 0xf3, 0x66, 0xfb, 0x1a, 0x2e, 0xe7, 0xcd, 0x87, 0x34, 0xf7, 0xff, 0xec, 0xe7, 0x7a, 0xbf, 0xb9, 0xa3, 0x5f, 0xa2, 0x7a, 0xbf, 0xf9, 0x1b, 0x8c, 0x8d, 0xf5, 0xfe, 0x65, 0x06, 0xbe, 0x91, 0x22, 0x7e, 0xf9, 0x15, 0xf4, 0xc7, 0xfa, 0xff, 0x72, 0x76, 0x3f, 0xd7, 0xff, 0x97, 0xf3, 0xfb, 0x19, 0x9e, 0x5f, 0x86, 0xf0, 0x8d, 0xf5, 0xff, 0x65, 0x5f, 0x3f, 0xd7, 0xff, 0x97, 0xdf, 0xef, 0x67, 0xb8, 0x7e, 0xb9, 0xab, 0x9f, 0xe1, 0xfa, 0xe5, 0xe1, 0x7e, 0x86, 0xe7, 0x97, 0x9f, 0xf6, 0x33, 0x3c, 0x6f, 0x7d, 0xa5, 0x9f, 0xeb, 0xff, 0xd6, 0x3f, 0xf6, 0x73, 0xfd, 0xdf, 0x5a, 0xac, 0xe7, 0xfa, 0xbf, 0xf5, 0xdf, 0xf5, 0xdc, 0x43, 0xdf, 0x12, 0x3b, 0xa6, 0x87, 0xdf, 0x7a, 0x4b, 0x7b, 0x9f, 0x9a, 0xc0, 0x78, 0xf8, 0xd5, 0xc4, 0x09, 0xdc, 0x1e, 0xbf, 0x9a, 0x32, 0x81, 0xdb, 0xe3, 0x57, 0xff, 0x30, 0x81, 0x7b, 0xcc, 0xaf, 0x2a, 0x26, 0x70, 0xbb, 0xfc, 0x6a, 0xe9, 0x04, 0x86, 0xeb, 0x57, 0x91, 0x09, 0xdc, 0x2e, 0xbf, 0x7a, 0x78, 0x02, 0xb7, 0xcb, 0xaf, 0x9e, 0x9a, 0xc0, 0x70, 0xfd, 0xea, 0xa5, 0x09, 0xdc, 0x2e, 0xbf, 0xda, 0x33, 0x81, 0xdb, 0xe5, 0x57, 0xef, 0x4e, 0x60, 0xb8, 0x7e, 0xf5, 0xd1, 0x04, 0x86, 0xeb, 0x57, 0x7f, 0x99, 0xc0, 0x70, 0xed, 0x13, 0x7b, 0x52, 0x87, 0xf7, 0x79, 0x8c, 0x8c, 0x8f, 0x7d, 0x8b, 0x35, 0x77, 0x58, 0x7b, 0x7f, 0xd7, 0x24, 0xfc, 0x37, 0x6b, 0xee, 0x5f, 0x69, 0xef, 0xd3, 0xe2, 0xfd, 0x76, 0x96, 0xf6, 0x76, 0x68, 0x6f, 0xf7, 0x35, 0x1c, 0xff, 0x6d, 0x2d, 0x9f, 0xb7, 0xef, 0xd1, 0xde, 0xff, 0x9f, 0xf6, 0xfe, 0x69, 0x8e, 0x08, 0xff, 0xb5, 0xe6, 0xfe, 0xe4, 0x3a, 0x76, 0xbf, 0x73, 0xdd, 0x75, 0x5c, 0xdf, 0x77, 0xb4, 0x9e, 0xfd, 0x4e, 0xb5, 0xf6, 0x5e, 0x32, 0x55, 0x84, 0xff, 0xf7, 0xa9, 0x22, 0xfc, 0x7f, 0x6a, 0xfe, 0x3b, 0xb5, 0xf7, 0xc1, 0x62, 0x11, 0x7e, 0x4e, 0xb8, 0xdf, 0xb5, 0xfc, 0x98, 0xdd, 0xef, 0xda, 0x6f, 0x12, 0xef, 0x9b, 0x6f, 0xe2, 0x74, 0xef, 0x2e, 0xbd, 0x89, 0xf1, 0xf8, 0xee, 0xfd, 0x3f, 0x66, 0x7a, 0x7a, 0xf7, 0xfb, 0x5a, 0xfc, 0xdd, 0xda, 0xfb, 0xb0, 0xf6, 0xfe, 0xb3, 0x78, 0xef, 0xcf, 0xd6, 0xde, 0x33, 0xb5, 0x77, 0x75, 0xe9, 0xd5, 0xfe, 0xae, 0xa8, 0x5c, 0xd9, 0xd9, 0xb5, 0x22, 0xd4, 0x2a, 0xcf, 0x6f, 0xe9, 0xe8, 0x8a, 0xdc, 0x3d, 0x55, 0x86, 0xd2, 0xab, 0xeb, 0xbb, 0x82, 0xd1, 0xbb, 0x9a, 0x22, 0x2d, 0x72, 0x55, 0x53, 0x5b, 0xfb, 0x8a, 0x48, 0x0b, 0x7b, 0x06, 0x5a, 0x96, 0x76, 0xad, 0x6c, 0x89, 0x34, 0x2d, 0x69, 0x6f, 0x91, 0xdd, 0xd4, 0x07, 0xd1, 0x57, 0xaa, 0xbb, 0xba, 0x2e, 0xd2, 0xd2, 0xdd, 0x2d, 0x77, 0x74, 0xad, 0xe8, 0x6e, 0x91, 0x97, 0xac, 0x88, 0x46, 0xbb, 0x3a, 0xe9, 0xe2, 0x6f, 0xda, 0x49, 0xdd, 0xd6, 0xb9, 0xa2, 0xa5, 0x08, 0x66, 0xce, 0x64, 0x21, 0x4c, 0x37, 0x51, 0x07, 0xe9, 0x22, 0xf1, 0x99, 0x33, 0x61, 0x73, 0x61, 0x03, 0x7a, 0xcd, 0x91, 0x65, 0x79, 0x5a, 0x71, 0x69, 0xfb, 0x2a, 0x79, 0xa6, 0x0c, 0x53, 0x2a, 0x23, 0x91, 0xae, 0x08, 0x79, 0x94, 0xac, 0x12, 0x3f, 0xe8, 0x79, 0xf1, 0x1e, 0x76, 0x6f, 0x53, 0xa4, 0x99, 0x01, 0x5b, 0xb2, 0xa2, 0x5b, 0x0e, 0x36, 0xad, 0x68, 0x8f, 0x3a, 0x9b, 0x9a, 0x9b, 0x19, 0x82, 0x16, 0xca, 0x00, 0x6a, 0xda, 0xdb, 0x5b, 0x42, 0x4d, 0xed, 0x72, 0xdc, 0xb7, 0x69, 0x29, 0xdd, 0x70, 0x2e, 0xdb, 0xbb, 0x9a, 0x9b, 0xa7, 0x27, 0x02, 0xdb, 0x3a, 0xbb, 0xa3, 0x91, 0x15, 0x4b, 0x29, 0x67, 0xa8, 0x68, 0x5b, 0xd9, 0xd6, 0x8d, 0x1f, 0xf2, 0x92, 0xbb, 0xe5, 0xd5, 0x2d, 0x91, 0x2e, 0x28, 0xf7, 0xce, 0x4b, 0x8d, 0xa0, 0xe5, 0xdb, 0x10, 0x70, 0xd7, 0x2d, 0xba, 0x84, 0x7f, 0x5d, 0x04, 0xd3, 0xb7, 0xb7, 0x34, 0x87, 0x5a, 0xe4, 0x95, 0x6d, 0x5d, 0xed, 0x4d, 0xa9, 0x49, 0x22, 0x4d, 0x4b, 0x5b, 0xb4, 0xef, 0xda, 0xb6, 0xce, 0x16, 0xf9, 0xa6, 0xe2, 0x9b, 0x8a, 0x65, 0xbb, 0x7b, 0xba, 0x5c, 0x29, 0x77, 0xac, 0xc0, 0xa8, 0x58, 0xdf, 0xd4, 0x50, 0xfc, 0x93, 0xed, 0x55, 0x18, 0xaa, 0x05, 0x3a, 0xcb, 0xbb, 0xb4, 0x0b, 0xda, 0x13, 0x11, 0xf9, 0x16, 0x72, 0x39, 0x18, 0x69, 0xea, 0x68, 0x91, 0xc5, 0x7e, 0xf1, 0x78, 0x40, 0x78, 0x45, 0xa4, 0x0d, 0x9b, 0x00, 0x21, 0x8c, 0xa2, 0xcf, 0x8a, 0x70, 0x3c, 0x60, 0x61, 0xe7, 0xf2, 0xce, 0xae, 0xbb, 0x3a, 0xe5, 0xf2, 0xba, 0x85, 0x9a, 0x4f, 0xcb, 0xaa, 0x96, 0xa5, 0x71, 0x7c, 0xca, 0x17, 0x6d, 0xf3, 0x97, 0xc7, 0xed, 0xf3, 0xbf, 0x44, 0x23, 0xc8, 0x80, 0xe5, 0xb6, 0x26, 0x5d, 0x29, 0xa7, 0x0e, 0xc8, 0x80, 0xa0, 0xe1, 0xb7, 0x9c, 0x76, 0x96, 0x80, 0x8c, 0x65, 0x86, 0x9b, 0x3a, 0xbb, 0xd3, 0xf2, 0x68, 0x6e, 0xeb, 0x5e, 0x1e, 0x44, 0x22, 0x49, 0xfa, 0x34, 0xad, 0x68, 0x6e, 0xeb, 0x2a, 0x6a, 0x6e, 0x59, 0xd9, 0x86, 0x68, 0x03, 0xda, 0x2f, 0xdf, 0xd5, 0xde, 0x92, 0x70, 0x87, 0xb0, 0xce, 0xe1, 0x2e, 0x64, 0xfc, 0x71, 0x8f, 0xe5, 0x2d, 0x77, 0x2f, 0xe9, 0x42, 0x72, 0x48, 0x78, 0x44, 0x23, 0x74, 0x46, 0x00, 0x66, 0x9b, 0xf4, 0x69, 0xeb, 0x68, 0x89, 0x24, 0x73, 0x6c, 0x6b, 0x4a, 0x9e, 0x75, 0xc2, 0xe5, 0xa7, 0x38, 0x3b, 0xda, 0xba, 0x97, 0xa6, 0x38, 0x97, 0x74, 0x75, 0x45, 0xb1, 0xa9, 0x9b, 0xc2, 0x72, 0x52, 0x99, 0x14, 0x69, 0x96, 0x76, 0x85, 0x09, 0x6d, 0xda, 0xd9, 0x09, 0x72, 0xfc, 0x54, 0x05, 0x04, 0x3f, 0xd2, 0x85, 0xce, 0xae, 0x2e, 0x4c, 0xd2, 0xda, 0xd6, 0xdc, 0x8c, 0x21, 0x1a, 0xea, 0xa1, 0xb3, 0x4b, 0xee, 0xe0, 0xbe, 0x45, 0x6d, 0x46, 0x35, 0x5b, 0xd1, 0x2e, 0x6e, 0x66, 0xef, 0x68, 0x5a, 0xde, 0x22, 0x27, 0xea, 0x9f, 0xf4, 0xef, 0xa2, 0x23, 0x0a, 0x2e, 0xe7, 0x9f, 0x44, 0x50, 0x9a, 0x77, 0x12, 0xf6, 0x9a, 0x05, 0xa2, 0xa5, 0xe5, 0xbb, 0xda, 0xa2, 0xad, 0x5c, 0x7a, 0x77, 0x5b, 0xa8, 0x13, 0xc9, 0x1e, 0x4b, 0x77, 0x06, 0x23, 0x5d, 0x1d, 0x58, 0xbd, 0xa6, 0x66, 0x3a, 0x02, 0x01, 0x51, 0x8a, 0xd4, 0x92, 0xe2, 0xbf, 0xb4, 0xbd, 0xab, 0x3b, 0x09, 0x51, 0x6a, 0x2e, 0x22, 0x44, 0x2b, 0x3b, 0x35, 0x40, 0x23, 0x51, 0x79, 0x69, 0xa4, 0x05, 0x89, 0xbf, 0x33, 0xc4, 0x37, 0xc9, 0x23, 0xcb, 0xd0, 0x82, 0xe3, 0x48, 0xc0, 0x68, 0xc8, 0x37, 0x3a, 0xc6, 0xf9, 0x0a, 0x8a, 0x9c, 0x5f, 0x3e, 0xbb, 0x74, 0xb9, 0x5c, 0xb9, 0x6a, 0x69, 0x4b, 0x98, 0xbb, 0xcf, 0xca, 0x96, 0xa5, 0xd4, 0x37, 0x96, 0xb6, 0xb6, 0x2c, 0x5d, 0xde, 0xbd, 0xa2, 0x83, 0x0f, 0x7c, 0xf0, 0x34, 0x61, 0xf1, 0x09, 0x9f, 0x5a, 0x0d, 0xc2, 0xb8, 0x47, 0xbc, 0x50, 0x28, 0xef, 0x12, 0xc4, 0xaf, 0xe1, 0xbb, 0xbd, 0xad, 0x3b, 0x8a, 0x40, 0x47, 0x31, 0xc3, 0x96, 0x66, 0xf0, 0xa7, 0xb5, 0x43, 0xb2, 0xa7, 0x74, 0xb7, 0x44, 0x90, 0xaf, 0x75, 0x83, 0xbd, 0x6b, 0x49, 0xf7, 0x74, 0xb9, 0xa6, 0xb3, 0x2d, 0x5a, 0xcf, 0xbd, 0x5c, 0xee, 0x0a, 0xca, 0x4d, 0x9d, 0xb2, 0xbb, 0xae, 0x21, 0x00, 0xf5, 0x2d, 0x1d, 0xd8, 0x51, 0xba, 0xb0, 0x5e, 0x6d, 0x9d, 0xe4, 0xd9, 0xa6, 0xb1, 0x92, 0xee, 0x28, 0x1d, 0x1f, 0x31, 0x5f, 0xcb, 0x36, 0xd2, 0xd2, 0xd2, 0x2c, 0x47, 0xef, 0x42, 0x1c, 0x25, 0x78, 0x4d, 0xc7, 0x52, 0xaa, 0x5c, 0x4b, 0xa2, 0x72, 0x51, 0x6c, 0xf3, 0x4e, 0x70, 0x47, 0xa3, 0x2d, 0x1d, 0x58, 0x34, 0x72, 0xca, 0x48, 0x0b, 0x71, 0xce, 0x26, 0x64, 0x2a, 0x2b, 0x5b, 0xe4, 0x9a, 0x05, 0x81, 0x96, 0x3b, 0x57, 0xb4, 0x74, 0x47, 0xa1, 0xbe, 0xa9, 0x93, 0xc8, 0x8a, 0x6b, 0x28, 0x63, 0xba, 0xd4, 0x1a, 0x51, 0x6d, 0xb1, 0x3e, 0x29, 0x99, 0x50, 0x16, 0x89, 0xb4, 0x72, 0x53, 0x90, 0x9a, 0x95, 0x9b, 0x4c, 0x63, 0x19, 0x2d, 0xab, 0xa2, 0x2d, 0x9d, 0xcd, 0xdd, 0x74, 0x80, 0x04, 0xd5, 0x2a, 0xd2, 0xd4, 0x19, 0x4a, 0x40, 0xdd, 0xda, 0xd2, 0xd4, 0x8c, 0xd1, 0x89, 0x92, 0xda, 0xbb, 0x96, 0x36, 0x45, 0x2f, 0xce, 0x39, 0xda, 0xda, 0x22, 0x77, 0x21, 0xb1, 0x75, 0x60, 0x43, 0x37, 0x21, 0xa7, 0xeb, 0x8e, 0x23, 0x23, 0xd9, 0x90, 0xa9, 0x4c, 0x45, 0xb4, 0x6a, 0xb5, 0xc6, 0x59, 0xe2, 0x65, 0x8a, 0x0a, 0xa4, 0x34, 0x02, 0x66, 0xde, 0xd4, 0x2e, 0x4a, 0x94, 0xe7, 0x77, 0x61, 0x6d, 0xbb, 0x22, 0xf5, 0xe1, 0x96, 0xa5, 0xe3, 0x9a, 0xa9, 0xbd, 0x8b, 0x68, 0x8a, 0x48, 0x75, 0x5c, 0x40, 0x37, 0x02, 0x10, 0xd5, 0x42, 0xe6, 0xa7, 0x85, 0x34, 0x74, 0x84, 0x03, 0x4d, 0xdd, 0xe3, 0xa2, 0x7b, 0xda, 0xa3, 0x9e, 0xb6, 0xe8, 0xfc, 0xa6, 0xf0, 0x38, 0xff, 0x40, 0x4b, 0x88, 0xc4, 0x40, 0xba, 0xe7, 0x7c, 0x6c, 0xa4, 0x45, 0x75, 0x98, 0x3f, 0x08, 0xb1, 0x84, 0x6d, 0x5e, 0x1d, 0x5c, 0xe5, 0x6f, 0xb9, 0xcb, 0x3e, 0x3d, 0xcd, 0xa7, 0x0a, 0x1b, 0x9c, 0xbc, 0x90, 0xcd, 0x84, 0x90, 0x45, 0xdc, 0x1d, 0xcf, 0x83, 0x70, 0xd9, 0xb4, 0x12, 0x5b, 0x89, 0x84, 0x25, 0x1d, 0xe4, 0xb1, 0x22, 0x4c, 0xbc, 0x0b, 0x89, 0x83, 0x58, 0x1e, 0x52, 0x64, 0xf7, 0xd2, 0x48, 0x9b, 0xa0, 0x07, 0xc4, 0x6f, 0x73, 0x02, 0x8d, 0x17, 0x71, 0x63, 0x81, 0x4a, 0xc1, 0x92, 0xe7, 0xc8, 0x09, 0x46, 0x92, 0x48, 0x30, 0x8e, 0x59, 0x8b, 0xe8, 0x09, 0x8e, 0x3d, 0x47, 0x4e, 0x64, 0xcc, 0x67, 0x7d, 0xc8, 0xd1, 0xbb, 0xc3, 0x2d, 0xc9, 0x60, 0x99, 0x59, 0x48, 0xe7, 0x8d, 0x51, 0xd1, 0x79, 0x5b, 0x64, 0x82, 0xd1, 0x91, 0x52, 0x4a, 0x3a, 0xe3, 0xea, 0x68, 0xe9, 0x5c, 0x21, 0xb7, 0x21, 0x61, 0x5c, 0xca, 0xbf, 0x7b, 0xc5, 0x92, 0x4b, 0x04, 0xa1, 0x5f, 0xb8, 0xbd, 0xa9, 0xb3, 0x05, 0xa2, 0xc8, 0x16, 0x91, 0x06, 0x28, 0x8a, 0xbc, 0xa4, 0x6b, 0x95, 0x5c, 0x86, 0x78, 0x6f, 0xbf, 0x8d, 0xc4, 0x6d, 0x7a, 0x02, 0x3a, 0x20, 0xa5, 0x1e, 0xa1, 0x69, 0xe9, 0x44, 0xb4, 0x5e, 0x3e, 0x08, 0x09, 0xb8, 0x1b, 0x49, 0x3c, 0x81, 0x06, 0xaa, 0x17, 0xe5, 0xdf, 0x7d, 0x77, 0x37, 0x95, 0xd0, 0xcd, 0xd1, 0x00, 0x75, 0x00, 0xb9, 0xfe, 0x56, 0xad, 0xee, 0xdd, 0x97, 0xaf, 0x18, 0xe5, 0x2c, 0x4e, 0x8a, 0xc1, 0x42, 0x89, 0x35, 0x72, 0xa7, 0xc6, 0x8e, 0x19, 0x5d, 0x11, 0x41, 0xd2, 0x26, 0x3e, 0x41, 0x8c, 0x2d, 0x81, 0x37, 0x8e, 0x13, 0xef, 0x0b, 0x91, 0x96, 0xa5, 0x2d, 0xd8, 0x73, 0x9b, 0x49, 0x7f, 0xa8, 0xa9, 0x28, 0x9f, 0x5f, 0x07, 0x77, 0xb5, 0xb4, 0x45, 0x9a, 0xe5, 0x96, 0xa5, 0xad, 0xa8, 0x05, 0x35, 0xad, 0xe8, 0x16, 0x49, 0x97, 0x76, 0x75, 0x84, 0x23, 0x2d, 0xad, 0x2d, 0x2c, 0x05, 0x21, 0x81, 0x78, 0x66, 0xdd, 0xd4, 0xbd, 0xd2, 0xc5, 0x5d, 0x4a, 0x1b, 0x75, 0x2f, 0x6f, 0x0b, 0x87, 0x31, 0xfb, 0xae, 0x25, 0xd1, 0xa6, 0xb6, 0x4e, 0xca, 0xac, 0x29, 0xa5, 0xff, 0x25, 0xe3, 0x85, 0x88, 0xe4, 0x92, 0x21, 0x44, 0xa0, 0x77, 0x45, 0xa8, 0xef, 0x74, 0x45, 0x9a, 0x53, 0x30, 0x75, 0xb1, 0x34, 0x17, 0x34, 0x13, 0x0f, 0x27, 0xd1, 0x9e, 0x2e, 0x00, 0x52, 0x90, 0x85, 0xea, 0x06, 0xa2, 0x26, 0x12, 0x5d, 0x11, 0x86, 0xca, 0xce, 0x66, 0xd2, 0xe1, 0xe4, 0xe6, 0x36, 0x21, 0x83, 0x90, 0xbb, 0xc8, 0x3c, 0xf6, 0x72, 0x4b, 0xdd, 0xf2, 0x68, 0x82, 0x1d, 0xaf, 0xe8, 0x44, 0xc9, 0xcf, 0xcc, 0x57, 0xae, 0x58, 0x50, 0x8f, 0x22, 0x67, 0xe9, 0x72, 0xa4, 0xc2, 0x38, 0xca, 0x80, 0xf8, 0x25, 0x32, 0xfb, 0x38, 0x3f, 0x23, 0xf1, 0x2a, 0x2f, 0x41, 0x8e, 0xb0, 0x1c, 0xeb, 0x81, 0x9c, 0xac, 0x33, 0xa1, 0x3e, 0x89, 0x90, 0xb6, 0x28, 0x56, 0x0e, 0x31, 0xc5, 0x5c, 0x5b, 0xf8, 0xa1, 0x12, 0x80, 0x4c, 0x04, 0xa9, 0xb7, 0x59, 0x70, 0x5f, 0xe1, 0x9b, 0x10, 0x0b, 0xd8, 0x50, 0xc2, 0x27, 0x25, 0x1b, 0x4a, 0x92, 0xc6, 0x06, 0xa9, 0x35, 0x49, 0xb1, 0xc5, 0xbe, 0x84, 0xf8, 0x5c, 0xd9, 0xd4, 0x8e, 0x55, 0x42, 0x4c, 0x47, 0xdb, 0xf0, 0x6b, 0xb5, 0x50, 0xe8, 0x34, 0xc0, 0x89, 0x58, 0x96, 0xb6, 0xb7, 0x39, 0xbb, 0xf9, 0xdc, 0x21, 0x3a, 0xf1, 0xa7, 0xb5, 0xa9, 0xb3, 0x19, 0xd5, 0x61, 0x66, 0xb5, 0x48, 0x13, 0x84, 0xf8, 0x28, 0xfa, 0x21, 0xc3, 0x5e, 0x9a, 0x64, 0x8e, 0xa9, 0x0a, 0x92, 0x00, 0x84, 0x8a, 0x8c, 0xfb, 0x74, 0xb7, 0x84, 0x88, 0xa9, 0x27, 0x62, 0x0b, 0x0d, 0xca, 0xd9, 0xde, 0xdc, 0x8c, 0x48, 0xef, 0x1c, 0xd7, 0x3c, 0x69, 0x6a, 0x55, 0x5c, 0x9f, 0xd3, 0x74, 0x2b, 0x46, 0x00, 0x11, 0x48, 0x84, 0x59, 0x5a, 0x1a, 0x5e, 0x9a, 0x53, 0x38, 0xf5, 0x78, 0x55, 0x2c, 0xbd, 0x84, 0x8b, 0xf4, 0xb2, 0xf4, 0xe0, 0x71, 0x87, 0x48, 0x8d, 0x0b, 0x45, 0xdc, 0x52, 0x13, 0xa5, 0x7b, 0xa6, 0xe9, 0x75, 0x22, 0x68, 0x69, 0x53, 0x82, 0xf8, 0x35, 0x4c, 0xc7, 0x3b, 0x00, 0x2a, 0x08, 0x7c, 0x64, 0x53, 0x3c, 0xf1, 0x38, 0x35, 0x30, 0x3d, 0xe7, 0xf1, 0x3a, 0xe1, 0x45, 0xc0, 0xa4, 0x29, 0x88, 0x22, 0x34, 0xa1, 0x25, 0x62, 0xe7, 0xe4, 0x4a, 0x44, 0x49, 0x9e, 0xb5, 0x2c, 0x1f, 0x97, 0xf8, 0x22, 0x65, 0x32, 0xd9, 0x70, 0xac, 0x55, 0x22, 0x92, 0x85, 0x9c, 0x4e, 0xfa, 0x84, 0xbb, 0xee, 0x42, 0x5e, 0x8c, 0x9c, 0xbe, 0x9d, 0x71, 0xce, 0x04, 0x9c, 0xe4, 0xd4, 0x69, 0xba, 0x68, 0x7a, 0x59, 0xa8, 0x98, 0x26, 0xd5, 0x37, 0x11, 0x44, 0xcc, 0x9a, 0x81, 0x5c, 0x81, 0xe8, 0x71, 0x24, 0x9a, 0xb2, 0xb5, 0xa9, 0x9b, 0xbd, 0x05, 0x25, 0x27, 0x34, 0x18, 0x66, 0x6d, 0x9a, 0x06, 0x41, 0x09, 0xd2, 0x1a, 0xb3, 0x68, 0x5c, 0xd6, 0x89, 0x9e, 0x9e, 0xa6, 0xf1, 0x6a, 0xd5, 0x43, 0xb5, 0x17, 0x51, 0xde, 0x1c, 0x67, 0x7e, 0x48, 0xd3, 0x4d, 0xe3, 0x49, 0x30, 0xa9, 0x1a, 0x27, 0xd8, 0x03, 0xd1, 0x4b, 0x37, 0xf7, 0x8e, 0x84, 0xb2, 0x1c, 0xe7, 0xa3, 0xc4, 0x2c, 0x12, 0xbc, 0xf2, 0xa6, 0x2b, 0x88, 0x33, 0xeb, 0x12, 0x71, 0x50, 0xa3, 0x8d, 0x07, 0xa7, 0x07, 0xa6, 0x28, 0xa2, 0xd8, 0x7b, 0xb9, 0x57, 0x93, 0xf5, 0x49, 0x8a, 0x39, 0x49, 0xa5, 0x04, 0xcc, 0x49, 0x1d, 0xfe, 0x62, 0x62, 0x67, 0x85, 0x7e, 0x3c, 0x5d, 0xa5, 0x9f, 0x8c, 0x36, 0x9e, 0xa0, 0x23, 0x5d, 0x97, 0x0b, 0x42, 0xf5, 0xff, 0x32, 0x21, 0x5e, 0xb2, 0x09, 0x34, 0xf9, 0x24, 0x42, 0xe2, 0xa7, 0x68, 0xe1, 0x9f, 0x73, 0x92, 0x5c, 0x6f, 0x89, 0x05, 0x36, 0x14, 0xdc, 0xe1, 0x5f, 0x21, 0x77, 0x81, 0x9e, 0x4e, 0x68, 0xa2, 0x99, 0x54, 0x45, 0x6f, 0x79, 0xb5, 0x3e, 0x46, 0xa7, 0x06, 0x67, 0x7f, 0x39, 0x78, 0x4e, 0x36, 0x06, 0x62, 0x9e, 0x3c, 0xff, 0x0a, 0xab, 0x13, 0xf4, 0x7c, 0x8e, 0x53, 0x17, 0x9d, 0x83, 0x5a, 0x37, 0x20, 0x5b, 0x42, 0xfa, 0x9f, 0x0c, 0x05, 0x3f, 0xe1, 0x53, 0xd9, 0xcd, 0xce, 0x56, 0xd0, 0x83, 0xd1, 0xe9, 0x06, 0xbd, 0xb2, 0xcd, 0x3b, 0x5c, 0x2c, 0xd3, 0x79, 0x98, 0x98, 0x5f, 0x8e, 0x55, 0xa7, 0xeb, 0xbd, 0x17, 0x62, 0x10, 0xe4, 0xbb, 0x21, 0x5e, 0x7e, 0xc7, 0xc9, 0xe3, 0xd7, 0xea, 0x36, 0xa5, 0xbd, 0x72, 0x44, 0x7d, 0xa1, 0x40, 0xa7, 0x5b, 0x43, 0x03, 0xab, 0x3e, 0x4f, 0x7b, 0x15, 0x85, 0xbf, 0x32, 0x87, 0xe2, 0x03, 0xdc, 0xab, 0x3a, 0x25, 0x8c, 0x47, 0x27, 0x5d, 0x0d, 0x0f, 0x4d, 0xf6, 0x78, 0xbc, 0x9e, 0x08, 0x54, 0x49, 0xbb, 0xfa, 0x9c, 0x52, 0x7d, 0x2c, 0xee, 0xff, 0xca, 0x1c, 0x4f, 0xb9, 0xb7, 0xfc, 0xc8, 0x3c, 0x67, 0x86, 0xf0, 0xe3, 0x35, 0xb5, 0x93, 0xc9, 0xef, 0xe4, 0x3c, 0x5a, 0x83, 0x3a, 0xb4, 0xda, 0x59, 0x5c, 0x0a, 0x5c, 0x1e, 0x9f, 0xce, 0x55, 0xfb, 0x81, 0xde, 0xcc, 0xe7, 0xe2, 0xd2, 0x39, 0xb2, 0x73, 0xed, 0x7e, 0x6b, 0x91, 0x4e, 0x17, 0x56, 0x79, 0x55, 0xf1, 0x5a, 0x8f, 0x13, 0xe4, 0xb0, 0xbc, 0x8f, 0xee, 0x22, 0xee, 0x73, 0x7a, 0x24, 0xd9, 0x28, 0x81, 0x25, 0x94, 0x1b, 0x3f, 0x73, 0x6b, 0xf7, 0x87, 0xb2, 0x4b, 0xdc, 0x0e, 0x3b, 0x76, 0x48, 0xb1, 0x05, 0x62, 0xee, 0x91, 0xb1, 0x77, 0x7c, 0xbd, 0xed, 0xe6, 0x44, 0xf8, 0x88, 0x62, 0x8a, 0x7f, 0xff, 0xfc, 0x6a, 0xba, 0xb1, 0xd7, 0xe9, 0x92, 0x1c, 0xbc, 0xff, 0xa5, 0x4b, 0x92, 0x2d, 0xa3, 0x20, 0x39, 0xbd, 0x92, 0x9c, 0x88, 0x31, 0xcd, 0x49, 0xa7, 0xbf, 0xac, 0x93, 0x5d, 0x14, 0xe2, 0xb1, 0xd0, 0x49, 0xfe, 0x92, 0x43, 0x6e, 0xd7, 0x19, 0x2c, 0x76, 0x71, 0x1a, 0x94, 0x19, 0x40, 0xa2, 0x53, 0x99, 0xe1, 0xaa, 0xa0, 0xa9, 0xb0, 0x15, 0x4c, 0x3c, 0x4f, 0x6f, 0x98, 0x87, 0x75, 0xfa, 0xb9, 0xd7, 0x6e, 0x36, 0xf4, 0xd3, 0xd1, 0x93, 0xb4, 0xda, 0x62, 0x7f, 0xbb, 0xed, 0x6a, 0x3a, 0x27, 0x56, 0xe2, 0xdd, 0xbf, 0x3f, 0xff, 0xb6, 0xb5, 0xa2, 0xf1, 0x01, 0x5b, 0x79, 0x81, 0xc7, 0x51, 0x4b, 0xab, 0x6d, 0xbd, 0xab, 0x60, 0x8a, 0xf3, 0x2a, 0xd9, 0x29, 0xd9, 0x19, 0x3f, 0x3b, 0xc6, 0xa6, 0x14, 0xba, 0x26, 0x53, 0x89, 0x5f, 0x75, 0x7f, 0xcc, 0x10, 0x39, 0x38, 0x55, 0xa7, 0xb5, 0x22, 0x99, 0x06, 0x63, 0x3b, 0x28, 0xb6, 0xd3, 0xa1, 0xd3, 0x61, 0x0a, 0xba, 0x67, 0x00, 0xdb, 0x1e, 0x6b, 0x53, 0x32, 0xeb, 0xaa, 0xf5, 0x60, 0x91, 0x0c, 0x00, 0x81, 0x7d, 0xb0, 0x0f, 0x26, 0xc7, 0x68, 0xd6, 0xe4, 0xe7, 0x6b, 0xc2, 0xc0, 0xe9, 0x0e, 0x16, 0xba, 0xc4, 0x6d, 0xb4, 0xa1, 0x12, 0xf7, 0x69, 0x90, 0x65, 0x4c, 0xad, 0x8b, 0xd1, 0x5c, 0xb5, 0xb9, 0x03, 0x0a, 0x20, 0x67, 0x69, 0x56, 0xa4, 0x74, 0x56, 0x8f, 0x74, 0xce, 0x31, 0xdf, 0xff, 0xc2, 0xe8, 0x5e, 0xc5, 0x18, 0x29, 0xa5, 0x2f, 0xf5, 0x19, 0xeb, 0x7c, 0x4a, 0x3d, 0xb6, 0x24, 0xaa, 0x4e, 0xf7, 0xe8, 0xf8, 0x44, 0x31, 0x9a, 0x85, 0x96, 0xb4, 0x79, 0x05, 0xf5, 0x8b, 0xbf, 0x2f, 0xfe, 0xbe, 0xf8, 0xfb, 0xe2, 0xef, 0x8b, 0xbf, 0x2f, 0xfe, 0xbe, 0xf8, 0xfb, 0xe2, 0xef, 0x8b, 0xbf, 0x2f, 0xfe, 0xbe, 0xf8, 0xfb, 0xe2, 0xef, 0x8b, 0xbf, 0x2f, 0xfe, 0xbe, 0xf8, 0xfb, 0xe2, 0xef, 0x8b, 0xbf, 0x2f, 0xfe, 0xbe, 0xf8, 0xfb, 0xe2, 0xef, 0x8b, 0xbf, 0x2f, 0xfe, 0xbe, 0xf8, 0xfb, 0xe2, 0xef, 0x8b, 0xbf, 0x2f, 0xfe, 0xbe, 0xf8, 0xfb, 0xe2, 0xef, 0x8b, 0xbf, 0x2f, 0xfe, 0xbe, 0xf8, 0xfb, 0xe2, 0xef, 0x8b, 0xbf, 0x2f, 0xfe, 0xbe, 0xf8, 0xfb, 0xe2, 0xef, 0x8b, 0xbf, 0x2f, 0xfe, 0xbe, 0xf8, 0xfb, 0xe2, 0xef, 0xff, 0xa9, 0xbf, 0x3b, 0x9e, 0x3f, 0x21, 0x03, 0x9d, 0x05, 0x90, 0x07, 0x5f, 0x86, 0xc9, 0xf0, 0x15, 0xc8, 0x87, 0xaf, 0xc2, 0x14, 0x55, 0xbd, 0xe6, 0x1a, 0xff, 0x5f, 0xe1, 0x3c, 0xfe, 0x03, 0x55, 0x85, 0x22, 0x30, 0xd1, 0x43, 0xf1, 0xdd, 0x81, 0x05, 0xf5, 0x72, 0x60, 0xc1, 0x7c, 0xda, 0x36, 0x12, 0x11, 0x5b, 0xde, 0xea, 0xc5, 0xb2, 0xde, 0xa6, 0xce, 0x66, 0x59, 0xec, 0x4c, 0x6b, 0x6b, 0xe9, 0xe6, 0x4b, 0x7e, 0x23, 0x6d, 0xa1, 0xd6, 0xa8, 0xfc, 0x43, 0x99, 0x36, 0xa7, 0xcb, 0xd0, 0xd0, 0xda, 0x22, 0x73, 0xea, 0x8a, 0x96, 0x95, 0x2d, 0xed, 0x5d, 0xe1, 0x8e, 0x96, 0xce, 0xa8, 0xdc, 0xd0, 0xd2, 0xd4, 0xe1, 0x90, 0xf9, 0x0a, 0xe1, 0x00, 0xc5, 0xee, 0x96, 0x03, 0x2d, 0xbc, 0x21, 0xad, 0xb9, 0x08, 0x92, 0x57, 0xb1, 0xc3, 0x7f, 0xfd, 0xcf, 0x1f, 0xf6, 0xdf, 0x59, 0xd9, 0x14, 0x69, 0xbf, 0x3b, 0xb9, 0xd3, 0x6e, 0xaa, 0xa9, 0xae, 0x1c, 0x16, 0xf1, 0x6e, 0x3b, 0x70, 0x8b, 0x0d, 0xb3, 0x40, 0x67, 0xea, 0x63, 0x9d, 0xe5, 0x32, 0xba, 0xfc, 0x3a, 0x02, 0xef, 0x3c, 0xde, 0xac, 0x0b, 0xf4, 0xd6, 0xc7, 0x82, 0x9f, 0xa0, 0xff, 0x19, 0x80, 0x62, 0x8b, 0xd9, 0x75, 0xcd, 0x35, 0xc1, 0xc9, 0xe5, 0x23, 0x18, 0x67, 0xa2, 0xc7, 0xf5, 0xe3, 0xa1, 0x50, 0xd6, 0x82, 0xbf, 0x82, 0x1e, 0x60, 0xde, 0x08, 0x18, 0xfc, 0xc7, 0x41, 0x17, 0x86, 0x6b, 0x87, 0xe0, 0x95, 0x23, 0x52, 0x38, 0x83, 0xde, 0x47, 0x25, 0x4c, 0xf7, 0xc1, 0x19, 0x28, 0x2e, 0xbb, 0x57, 0xbd, 0xc9, 0x05, 0x4f, 0xe0, 0xf3, 0x24, 0x3e, 0x9b, 0x6e, 0xea, 0x91, 0xa2, 0x30, 0xeb, 0xa6, 0x1e, 0x1d, 0x48, 0x70, 0x13, 0x9d, 0x50, 0x63, 0x41, 0x9f, 0x6b, 0xa4, 0x18, 0xe6, 0x05, 0x16, 0x98, 0xf7, 0x57, 0xda, 0xf8, 0xfd, 0x3f, 0xdf, 0xf2, 0xff, 0x14, 0xce, 0xdf, 0x21, 0xf7, 0x80, 0x0f, 0x42, 0xa6, 0x1e, 0xe9, 0xda, 0x51, 0x8c, 0x7c, 0x28, 0x06, 0xde, 0x2a, 0xfb, 0xfc, 0xba, 0xef, 0xca, 0xb5, 0x14, 0x9a, 0x71, 0xb8, 0xcc, 0x01, 0x3a, 0xa3, 0x01, 0x74, 0xc1, 0x29, 0xf8, 0x2b, 0x85, 0xa6, 0xc8, 0x3d, 0xd4, 0x98, 0x56, 0xfe, 0xc5, 0x5a, 0x58, 0x00, 0x9a, 0x00, 0x1e, 0x5f, 0x6e, 0x80, 0x76, 0x17, 0x80, 0x0e, 0x33, 0x1b, 0xa2, 0x50, 0x38, 0x88, 0x25, 0x18, 0xc0, 0x12, 0x34, 0xe0, 0xf7, 0x61, 0x8e, 0xa9, 0xe7, 0x98, 0x9d, 0x8f, 0xee, 0x41, 0x1f, 0x39, 0xc5, 0x67, 0x71, 0x08, 0xc0, 0x4e, 0xa7, 0xa5, 0x5b, 0x40, 0x3d, 0xaf, 0x7f, 0x9e, 0xdf, 0xa3, 0x9e, 0xff, 0xe9, 0x79, 0x4c, 0x40, 0xe9, 0xbc, 0xaa, 0xee, 0xbb, 0xce, 0xab, 0x08, 0x96, 0xab, 0xf2, 0xbe, 0x36, 0x8a, 0x38, 0xfa, 0xe0, 0x4f, 0x31, 0xff, 0x9d, 0xca, 0xa8, 0x77, 0xb8, 0xac, 0xe4, 0xe6, 0x7f, 0xc4, 0xba, 0xe7, 0xdf, 0x32, 0x58, 0xb8, 0xa0, 0x29, 0xa7, 0x6e, 0x70, 0xd6, 0xf5, 0xe0, 0x8e, 0xc1, 0xd7, 0x5e, 0x45, 0xbf, 0x27, 0x6a, 0x3f, 0x70, 0x94, 0xf9, 0x57, 0x14, 0x42, 0xe1, 0x80, 0x3c, 0x71, 0xdd, 0x80, 0xd5, 0xa8, 0xeb, 0xa5, 0xab, 0xc7, 0x43, 0x0d, 0x56, 0xb7, 0xad, 0x14, 0xa0, 0xa0, 0x54, 0x02, 0x6b, 0xd9, 0xd8, 0xde, 0x33, 0x57, 0x4d, 0x7d, 0x15, 0x5b, 0xee, 0xce, 0x2a, 0xf7, 0xd4, 0x57, 0x25, 0xa8, 0x72, 0xfb, 0xef, 0x7c, 0xf1, 0xd1, 0xa0, 0xdd, 0x5a, 0xb6, 0x77, 0x6c, 0xdf, 0xa5, 0x42, 0xb2, 0xa6, 0xee, 0x02, 0x98, 0xfa, 0x33, 0x09, 0x22, 0xaa, 0x02, 0xb0, 0x37, 0xee, 0xf2, 0xf4, 0xbe, 0x18, 0x6b, 0x07, 0x78, 0xd1, 0x66, 0xd4, 0xf5, 0x51, 0x29, 0x41, 0xeb, 0xd7, 0x46, 0xef, 0x55, 0x09, 0x0a, 0xff, 0x9d, 0xbe, 0x70, 0x5e, 0x7e, 0x30, 0xfb, 0x6b, 0xa3, 0x88, 0x94, 0xa4, 0x1b, 0x60, 0xad, 0xcd, 0xfb, 0xde, 0xab, 0xff, 0x3a, 0x0a, 0xe7, 0x75, 0xcd, 0x2d, 0x46, 0x7a, 0x67, 0x3c, 0xd2, 0xb2, 0xac, 0xa0, 0x38, 0x0f, 0x6c, 0x75, 0xf2, 0x4e, 0x82, 0xcb, 0x7f, 0xa7, 0x4d, 0x40, 0xd1, 0x97, 0x87, 0x50, 0xf8, 0x7a, 0x43, 0xc6, 0x6d, 0xeb, 0x82, 0x7a, 0xf9, 0x41, 0xc5, 0x57, 0xd5, 0x57, 0x10, 0xce, 0xd3, 0xa3, 0xbf, 0xbe, 0xaa, 0xcf, 0x7f, 0xa7, 0x1d, 0xd3, 0x4c, 0x7d, 0x28, 0x4f, 0xbf, 0xad, 0x3f, 0x58, 0x5c, 0xd1, 0x27, 0x62, 0x5f, 0x36, 0x46, 0x56, 0x55, 0xdf, 0xd4, 0x35, 0x79, 0x20, 0x3f, 0xf8, 0xce, 0x7d, 0x0a, 0xa8, 0xb5, 0x98, 0xab, 0xbe, 0xf1, 0xbb, 0x85, 0xaf, 0xca, 0x92, 0x7f, 0x05, 0xf4, 0x4c, 0x00, 0xef, 0xf0, 0x91, 0x23, 0x95, 0x48, 0x9d, 0x5f, 0xce, 0x76, 0x3a, 0x61, 0xb2, 0xf7, 0xbf, 0x49, 0x61, 0x55, 0xbd, 0x30, 0xcb, 0xbf, 0xbe, 0x6e, 0x30, 0x0c, 0xc5, 0x4e, 0x98, 0xe2, 0x84, 0x54, 0x3f, 0x8c, 0x23, 0x6b, 0xee, 0xe9, 0xe4, 0xae, 0xfd, 0x60, 0xc2, 0x04, 0xea, 0xd1, 0xb9, 0x7b, 0x01, 0x6c, 0x5e, 0xcf, 0x16, 0xd0, 0x23, 0x0d, 0x1f, 0x9c, 0xfa, 0x06, 0x58, 0xf0, 0x3d, 0x1b, 0xdf, 0x0e, 0x6c, 0xeb, 0x92, 0x12, 0x6a, 0x71, 0xb3, 0xd7, 0x53, 0x02, 0x5e, 0x8f, 0xad, 0xcf, 0xbf, 0xc2, 0xba, 0x60, 0xc1, 0x69, 0x75, 0xb7, 0xbc, 0xc0, 0x53, 0x77, 0x36, 0x06, 0xf0, 0x67, 0x4b, 0x71, 0x59, 0x0c, 0x2c, 0x76, 0x90, 0x8a, 0x6a, 0xfc, 0x2b, 0x8a, 0x6a, 0xe8, 0xec, 0x19, 0xeb, 0x02, 0xfc, 0x5d, 0x9d, 0x27, 0x15, 0x97, 0x81, 0xe4, 0x5f, 0x8d, 0x14, 0x56, 0x46, 0x27, 0xad, 0xf8, 0xff, 0x1b, 0xe8, 0xc8, 0xe5, 0x73, 0x2d, 0x2f, 0x24, 0x1f, 0x49, 0x8a, 0xfb, 0x44, 0x30, 0xcc, 0xa2, 0x43, 0xea, 0x34, 0x06, 0x8d, 0x98, 0x26, 0x03, 0x5b, 0x2a, 0x80, 0xef, 0x09, 0xf8, 0xf6, 0x85, 0x39, 0xdd, 0xb9, 0x46, 0xfc, 0xcd, 0xa4, 0x54, 0x47, 0x5c, 0xf8, 0x65, 0xc0, 0x2f, 0xf5, 0x08, 0x85, 0x4c, 0xc0, 0x47, 0x8f, 0x71, 0xaf, 0xc6, 0xf2, 0x8c, 0x61, 0x30, 0xbb, 0x0d, 0xd0, 0xac, 0x37, 0x0e, 0x41, 0xa6, 0xff, 0xbf, 0x19, 0x8d, 0xfe, 0xd5, 0x46, 0xe3, 0x34, 0x17, 0x87, 0x0f, 0x12, 0x74, 0x72, 0x27, 0xcc, 0x0e, 0x8f, 0xd0, 0x99, 0xb1, 0xd2, 0x74, 0xa4, 0x60, 0xfd, 0xc2, 0x58, 0xf9, 0x19, 0x23, 0xdc, 0xf4, 0xbf, 0x8c, 0xd0, 0x40, 0xa7, 0xa7, 0x9e, 0xc7, 0x38, 0xdd, 0xf5, 0xf5, 0xb2, 0xdc, 0x4e, 0xdb, 0x56, 0x80, 0xbe, 0x56, 0x84, 0xc3, 0xf4, 0x15, 0xe5, 0x6d, 0x51, 0x45, 0x72, 0x39, 0x6f, 0xd2, 0x49, 0x6c, 0xd1, 0x6c, 0x92, 0x3b, 0x5b, 0xee, 0x4a, 0xec, 0xb0, 0xa3, 0x5d, 0xa5, 0x26, 0x20, 0x36, 0x58, 0x4b, 0xc1, 0xb4, 0xa9, 0x4d, 0x96, 0xe5, 0x45, 0x2d, 0x91, 0x6e, 0xf1, 0x19, 0x68, 0x11, 0xdb, 0xea, 0xe9, 0x13, 0x23, 0x35, 0xdc, 0x1d, 0x6e, 0x99, 0x23, 0x23, 0x13, 0x95, 0x13, 0x6c, 0x11, 0x9d, 0x1c, 0x34, 0xbf, 0xab, 0xb9, 0xa5, 0x1d, 0x1d, 0x85, 0x32, 0x94, 0x75, 0x76, 0xc9, 0x74, 0x25, 0xfa, 0x5c, 0x90, 0xa7, 0x82, 0xa9, 0x9e, 0x76, 0x86, 0xc8, 0x32, 0x6d, 0x35, 0xc3, 0xac, 0x65, 0xa8, 0x6f, 0x5b, 0xdd, 0x42, 0xef, 0xa5, 0xad, 0x6d, 0xe1, 0xf8, 0x46, 0x3e, 0xed, 0x15, 0x8e, 0x74, 0xd1, 0x1e, 0xdf, 0x79, 0x6d, 0x4b, 0x97, 0x43, 0x9d, 0xf8, 0xc6, 0x1a, 0x41, 0x55, 0x5b, 0xa4, 0x9b, 0x72, 0xf0, 0xdc, 0x1d, 0x6d, 0xe9, 0xc6, 0xf7, 0xb7, 0xcb, 0xbb, 0xda, 0x9b, 0xcb, 0x9b, 0xc2, 0xd1, 0x15, 0x91, 0x96, 0xef, 0xc8, 0x35, 0xa1, 0xce, 0x2e, 0xde, 0xd8, 0xe7, 0x5e, 0x50, 0x3f, 0x73, 0x2e, 0x33, 0x66, 0xac, 0x7a, 0x47, 0xb8, 0xab, 0xbd, 0xad, 0xb3, 0xc5, 0x04, 0x58, 0xd3, 0xe6, 0x96, 0x25, 0x2b, 0x42, 0xdf, 0xa4, 0x0d, 0xc1, 0xe5, 0x08, 0x24, 0x7c, 0x1b, 0x19, 0x64, 0x4b, 0xf4, 0x3b, 0x26, 0x28, 0xaf, 0x5b, 0x88, 0x00, 0xcf, 0x2e, 0x2d, 0x9e, 0x5d, 0x4c, 0xbf, 0x25, 0xfc, 0xfb, 0x35, 0xfe, 0x9d, 0x45, 0xbf, 0x95, 0xe5, 0xe2, 0x5d, 0x7c, 0x13, 0xff, 0x16, 0x17, 0x83, 0x5c, 0xc5, 0x49, 0x66, 0xa2, 0xb3, 0xb4, 0x74, 0x16, 0xff, 0xde, 0x04, 0x75, 0xe5, 0x01, 0xf8, 0x36, 0xca, 0x0e, 0xda, 0xdb, 0xfc, 0x1d, 0xf9, 0xae, 0xa6, 0x6e, 0xb9, 0x29, 0x9a, 0xe2, 0x11, 0x6c, 0x5a, 0xde, 0xb2, 0x84, 0xb6, 0x3d, 0xa7, 0xf9, 0xc6, 0x77, 0xa8, 0xa5, 0x79, 0x2e, 0x6f, 0x89, 0x74, 0xb6, 0xd0, 0x1e, 0xaa, 0x8e, 0x0e, 0xda, 0x90, 0x46, 0xc7, 0x09, 0xdc, 0x08, 0x37, 0x62, 0xfb, 0xb8, 0xe7, 0x6b, 0xed, 0x4b, 0x5f, 0xa2, 0x7d, 0x6b, 0x9b, 0xba, 0xa3, 0x7c, 0x7c, 0x83, 0x38, 0xc4, 0x21, 0xc5, 0x2d, 0xd3, 0x8e, 0x3e, 0x10, 0xcd, 0xae, 0xed, 0x08, 0x8d, 0xef, 0xce, 0xea, 0x48, 0xdd, 0x2a, 0x3c, 0xd5, 0x94, 0x28, 0x1a, 0xc1, 0xf8, 0x0e, 0x10, 0xda, 0x79, 0x1b, 0x0f, 0xb5, 0x27, 0x97, 0x44, 0xc2, 0x04, 0xab, 0x4b, 0x9f, 0xd4, 0x6a, 0xf8, 0xf9, 0x6d, 0x8e, 0xf0, 0x1d, 0x39, 0x8e, 0x4c, 0x7b, 0xa0, 0xa1, 0xea, 0x8e, 0xfa, 0x1a, 0x7f, 0x75, 0x6d, 0x65, 0x83, 0xbb, 0x7e, 0x9e, 0x43, 0x2e, 0x9e, 0x6e, 0xe2, 0x8c, 0xe6, 0xb7, 0x74, 0xd4, 0x45, 0x23, 0x44, 0x4c, 0xf8, 0x47, 0xf9, 0x68, 0x9f, 0x72, 0x6d, 0x4b, 0x27, 0x7c, 0x5b, 0x8b, 0xf1, 0x1d, 0x59, 0xfb, 0xd0, 0xb6, 0x0e, 0xd2, 0x2e, 0x25, 0x8d, 0x50, 0x69, 0x67, 0x5b, 0xb2, 0x69, 0x29, 0x5a, 0x43, 0x53, 0xa8, 0xdb, 0x94, 0x92, 0xb4, 0x3c, 0xbe, 0x3b, 0xb0, 0xa3, 0xad, 0xbb, 0xa3, 0x29, 0xba, 0xb4, 0x55, 0x54, 0x67, 0x09, 0x63, 0xb2, 0xb3, 0xeb, 0x2e, 0x42, 0xed, 0xa5, 0x69, 0x5f, 0x9c, 0xbe, 0xd0, 0x15, 0x91, 0x69, 0x47, 0x7a, 0x51, 0x51, 0x91, 0x1c, 0xef, 0x2b, 0x74, 0xa0, 0x14, 0xed, 0xc6, 0x91, 0x9d, 0x60, 0xf1, 0xac, 0xa3, 0x13, 0xee, 0xae, 0xe9, 0x41, 0x62, 0x37, 0x4e, 0xed, 0x42, 0x19, 0x62, 0xba, 0xa6, 0x0b, 0x26, 0xc1, 0xc4, 0x9b, 0xba, 0x20, 0x17, 0xb2, 0xca, 0x8f, 0x23, 0x6d, 0xd7, 0x60, 0xac, 0x47, 0x23, 0x47, 0xde, 0x89, 0xdd, 0xe0, 0x06, 0xfd, 0x54, 0x2f, 0xe4, 0xec, 0x1b, 0x98, 0xea, 0xe2, 0x1b, 0xe4, 0x2c, 0x53, 0xdb, 0x30, 0x45, 0x3e, 0x9d, 0x27, 0x35, 0x34, 0x44, 0x32, 0xe5, 0xb1, 0x92, 0xda, 0x0f, 0x32, 0x32, 0xc4, 0x09, 0x53, 0xc2, 0xe7, 0xd1, 0xd1, 0xf1, 0x3e, 0x4f, 0xf6, 0x8f, 0xf7, 0xd9, 0x50, 0x1a, 0xf7, 0x21, 0xd7, 0x3f, 0x6f, 0xa5, 0x1b, 0xeb, 0xe2, 0xae, 0xe8, 0xc6, 0xb8, 0x0b, 0xa1, 0xd5, 0x87, 0x1c, 0x56, 0xd0, 0xf5, 0xd2, 0x01, 0x81, 0x41, 0xab, 0x15, 0xaa, 0x7a, 0x65, 0xd7, 0x8b, 0x9b, 0xa1, 0x20, 0x38, 0x99, 0xcf, 0xbd, 0x3b, 0xdf, 0xd2, 0xde, 0x38, 0x48, 0xa7, 0x6f, 0xde, 0x3a, 0xe4, 0x8d, 0x55, 0xb8, 0xfc, 0x2b, 0x3c, 0xda, 0x43, 0xa7, 0x5d, 0x11, 0x7f, 0x92, 0x21, 0x92, 0x99, 0xbc, 0x37, 0x46, 0x9d, 0x63, 0x83, 0xd0, 0x1c, 0x3a, 0xdd, 0xf0, 0x6a, 0x35, 0x34, 0xcb, 0xea, 0x11, 0x31, 0x92, 0xb7, 0x62, 0x90, 0xdb, 0xa9, 0x8e, 0x4f, 0x41, 0xfb, 0x66, 0xae, 0x56, 0x75, 0x9e, 0x33, 0xe0, 0xd4, 0x79, 0xef, 0x86, 0xf3, 0xfa, 0x0f, 0x05, 0x8f, 0xf7, 0xaf, 0x97, 0x3d, 0xde, 0xd6, 0xeb, 0x55, 0xf6, 0x3b, 0xc5, 0x3b, 0x87, 0x2c, 0xbe, 0xbe, 0x60, 0x3e, 0xbb, 0xcf, 0x13, 0x74, 0x79, 0x01, 0x27, 0x72, 0x63, 0xe0, 0x1a, 0xe7, 0xea, 0xeb, 0x06, 0x95, 0x62, 0x99, 0xf3, 0x9d, 0xea, 0x81, 0x39, 0x94, 0xab, 0x0c, 0xf8, 0x35, 0x9b, 0xeb, 0xb1, 0x5b, 0x94, 0x88, 0x10, 0x9c, 0xd7, 0x0f, 0x39, 0xaf, 0x2a, 0xa4, 0x1b, 0xeb, 0x8f, 0x16, 0xde, 0x11, 0x96, 0x52, 0x4e, 0x1e, 0xdd, 0x4e, 0xfb, 0x5e, 0xe8, 0x2c, 0x2d, 0xef, 0x30, 0x94, 0xda, 0xbb, 0xb0, 0xb4, 0x76, 0xe4, 0xd1, 0x00, 0x67, 0xcd, 0xed, 0xa8, 0x01, 0x9a, 0xf0, 0xeb, 0x78, 0xe5, 0x49, 0x30, 0x17, 0x3b, 0xc0, 0xb2, 0x35, 0x80, 0xae, 0x43, 0xd5, 0x27, 0x21, 0x0b, 0x5d, 0xd9, 0x5b, 0xeb, 0xd1, 0xf5, 0x26, 0xc7, 0xca, 0xc1, 0xaf, 0x5d, 0xfc, 0x95, 0x8b, 0x5f, 0xdb, 0x9d, 0x74, 0x83, 0xc1, 0xf9, 0x4c, 0x1b, 0xc1, 0xf0, 0x65, 0x3a, 0x05, 0x31, 0x1b, 0x65, 0x14, 0xf9, 0xdc, 0x44, 0x75, 0xcc, 0x8b, 0xfa, 0xd7, 0xa3, 0xdf, 0xb5, 0x9a, 0x5f, 0x99, 0x7f, 0x7d, 0xcd, 0x49, 0xc8, 0xe3, 0xef, 0x6a, 0x0e, 0x0f, 0xf8, 0xd7, 0x3b, 0xcd, 0x5c, 0xf3, 0xfc, 0xa2, 0x9d, 0xe8, 0xdb, 0x40, 0xee, 0xea, 0xbf, 0xd2, 0x59, 0x99, 0xfe, 0x0d, 0x35, 0xe7, 0x8c, 0x12, 0xfb, 0x2e, 0x12, 0xb1, 0xf0, 0x11, 0x7e, 0x0f, 0xa7, 0x7f, 0x73, 0x7e, 0x0d, 0xc2, 0xaf, 0xc0, 0xc5, 0x29, 0x96, 0xa2, 0x6f, 0x74, 0xbb, 0xc4, 0x39, 0xd3, 0x7d, 0xcc, 0x18, 0x0e, 0x96, 0xda, 0x0f, 0xf2, 0xc1, 0xcf, 0xa5, 0xf2, 0x17, 0x9d, 0xcf, 0x59, 0x6a, 0x73, 0xf2, 0x6d, 0xe3, 0xb6, 0x02, 0x27, 0xd8, 0x6d, 0xf3, 0x1e, 0xdb, 0xe5, 0x34, 0x39, 0x75, 0x28, 0x57, 0xb9, 0x3e, 0x5f, 0xb2, 0xd9, 0x05, 0xdc, 0xe1, 0x1a, 0x01, 0xab, 0xb8, 0x93, 0x71, 0x4d, 0x48, 0xef, 0xcc, 0x50, 0x0c, 0x1c, 0xd2, 0xed, 0xdf, 0xd8, 0x38, 0xe8, 0x43, 0xb9, 0xce, 0xae, 0xff, 0x2e, 0xda, 0xac, 0x71, 0x50, 0xb4, 0x73, 0x66, 0xac, 0x46, 0xb4, 0xf3, 0x46, 0xef, 0x72, 0xde, 0x8f, 0x75, 0x3e, 0xf3, 0x01, 0xff, 0x46, 0xa7, 0x89, 0xbf, 0x1e, 0xe5, 0xdc, 0xf2, 0x64, 0x3d, 0xc2, 0x92, 0x2f, 0x4e, 0x24, 0xbe, 0x79, 0xae, 0xad, 0x0b, 0x4a, 0x90, 0x66, 0x4b, 0x11, 0xa2, 0xb2, 0xc2, 0x2e, 0x70, 0x99, 0xf9, 0x1c, 0xcd, 0xa5, 0x20, 0xe5, 0xb8, 0x47, 0x46, 0xfb, 0x50, 0x4b, 0x79, 0x45, 0x55, 0x97, 0xe4, 0x78, 0x57, 0x4d, 0xc8, 0x70, 0x82, 0x93, 0xf6, 0x81, 0x7d, 0xc2, 0x79, 0xfd, 0x93, 0x92, 0x8d, 0x7e, 0x99, 0x9a, 0xdf, 0x67, 0xec, 0xf7, 0xbf, 0xf9, 0xd4, 0xd6, 0x9c, 0x42, 0x93, 0xed, 0x3a, 0xe7, 0x24, 0xf6, 0x79, 0x4e, 0xb4, 0x51, 0xdd, 0x20, 0x9f, 0x48, 0x1d, 0x5d, 0x09, 0xf7, 0x48, 0xf3, 0x47, 0xc6, 0x46, 0x95, 0xdb, 0xac, 0x0d, 0xce, 0x76, 0xba, 0xc0, 0x22, 0x7c, 0xfd, 0xd6, 0x35, 0x1d, 0x73, 0x1c, 0x13, 0x86, 0x5f, 0xb0, 0x1a, 0x76, 0xf5, 0x85, 0x8a, 0xe5, 0x89, 0x91, 0xb1, 0xa1, 0xde, 0xad, 0x5b, 0x20, 0xa7, 0xc5, 0x66, 0x75, 0x82, 0xe3, 0x9d, 0xd8, 0x8b, 0x5b, 0x20, 0x6f, 0x49, 0x9e, 0x73, 0x06, 0x98, 0x68, 0xcf, 0x5c, 0xfc, 0x7c, 0x57, 0xda, 0xbd, 0x57, 0xb5, 0x76, 0xf7, 0xda, 0x40, 0x7f, 0x60, 0x4d, 0xdd, 0xc3, 0x7c, 0xab, 0x6e, 0xd6, 0xd6, 0xfe, 0xce, 0xcd, 0x05, 0xf5, 0x7c, 0x4a, 0x9e, 0xb1, 0xe6, 0x8f, 0x60, 0x59, 0x05, 0xca, 0xb1, 0xc2, 0x3e, 0xad, 0xee, 0xdb, 0xab, 0x05, 0x5e, 0x36, 0xb0, 0x6b, 0x08, 0x7f, 0x51, 0xe3, 0xa4, 0x5f, 0x23, 0xe5, 0xb9, 0x63, 0xac, 0xd5, 0x59, 0x08, 0x16, 0x0e, 0xfb, 0x99, 0x7f, 0x03, 0xb5, 0xa0, 0xbc, 0x0c, 0x2c, 0x4e, 0x3b, 0xe8, 0xd9, 0xef, 0x17, 0xfe, 0x0d, 0xd8, 0x13, 0x74, 0xab, 0x41, 0xce, 0xa4, 0x13, 0x9d, 0xe9, 0x74, 0x3a, 0x81, 0x3d, 0xab, 0xe8, 0x01, 0x6d, 0x50, 0x48, 0xa7, 0x93, 0x86, 0x8a, 0xcd, 0x9b, 0xab, 0xdc, 0xf3, 0x2a, 0x41, 0x1f, 0x14, 0x79, 0xbd, 0x1b, 0x6f, 0x1d, 0x25, 0xd7, 0xf3, 0x43, 0x14, 0xc6, 0x5d, 0xe0, 0x10, 0x3d, 0xa3, 0x10, 0xe9, 0xe3, 0x2a, 0x8b, 0x7f, 0x5f, 0x3c, 0x37, 0xff, 0x42, 0x75, 0x1d, 0xdd, 0x15, 0x59, 0xd0, 0x01, 0x46, 0x7b, 0x07, 0xea, 0x4a, 0xab, 0x40, 0xf6, 0xfc, 0xc0, 0xdb, 0xa1, 0xbe, 0x49, 0x27, 0x65, 0x7e, 0xe7, 0xf1, 0x19, 0x3d, 0x6b, 0xf6, 0x81, 0x99, 0x6f, 0x06, 0x3d, 0x6f, 0x00, 0xba, 0x95, 0x14, 0xdd, 0x93, 0xe9, 0x16, 0x3f, 0xaa, 0x01, 0xdd, 0x4b, 0x8a, 0xee, 0xaf, 0xa8, 0x87, 0x89, 0x1b, 0x58, 0x40, 0xcf, 0x87, 0xcc, 0x69, 0xf7, 0x9f, 0x8e, 0xda, 0x56, 0x61, 0x4f, 0x24, 0xda, 0xda, 0x4f, 0xbb, 0xef, 0x8a, 0x7b, 0xc0, 0x18, 0xd6, 0x45, 0xae, 0x7f, 0x31, 0x16, 0x32, 0xc8, 0x3b, 0x49, 0x07, 0x0d, 0xc4, 0x1a, 0x07, 0xa2, 0xae, 0x6d, 0xb1, 0xe0, 0x09, 0x11, 0x8b, 0x20, 0x37, 0x64, 0xc7, 0x79, 0x01, 0xd9, 0x2d, 0xf3, 0x47, 0x46, 0x3d, 0xfe, 0x4d, 0xf8, 0x7d, 0x04, 0xb5, 0x63, 0x7a, 0x9f, 0xa1, 0xb7, 0x9c, 0x33, 0x07, 0x22, 0xdd, 0x55, 0xd2, 0xae, 0xfb, 0xf8, 0xac, 0x4f, 0x3d, 0x54, 0xba, 0xc0, 0x0a, 0x1e, 0x37, 0x6a, 0x98, 0x05, 0x50, 0x19, 0x83, 0xc8, 0x5d, 0x14, 0x16, 0x32, 0x40, 0x25, 0xb8, 0x94, 0x1c, 0x8f, 0xcb, 0xeb, 0x32, 0x03, 0x5c, 0xbf, 0x84, 0xdc, 0x16, 0x05, 0x63, 0x43, 0x31, 0x97, 0xf4, 0x95, 0xf9, 0x82, 0xd2, 0x37, 0xad, 0x82, 0xd2, 0xcc, 0xe8, 0xbd, 0x55, 0xba, 0xdd, 0xfd, 0x8d, 0x83, 0x21, 0x23, 0x87, 0x4d, 0x55, 0xbc, 0x15, 0xbb, 0x97, 0x89, 0xef, 0x1b, 0x95, 0xb2, 0x8a, 0xdd, 0x41, 0xf1, 0x3d, 0x53, 0x29, 0x36, 0xea, 0xe9, 0xe6, 0x4f, 0xfc, 0xcd, 0xd2, 0xe2, 0x7e, 0x4d, 0x61, 0x2e, 0x66, 0xf8, 0x47, 0x25, 0x07, 0x7d, 0x41, 0xf3, 0x75, 0x8b, 0x5e, 0x63, 0xa8, 0xf6, 0x6f, 0xa2, 0x5e, 0x6a, 0x98, 0x1f, 0x2f, 0xad, 0x71, 0x10, 0x63, 0x19, 0x42, 0x79, 0xbe, 0xbe, 0x44, 0x59, 0x45, 0x58, 0x96, 0x4d, 0x2b, 0xcb, 0x8a, 0xa1, 0x99, 0x5a, 0xc8, 0x22, 0xce, 0x51, 0xaf, 0xb9, 0x16, 0x6b, 0x39, 0x36, 0x88, 0x1c, 0x91, 0x0b, 0x30, 0xa6, 0x64, 0x07, 0x9f, 0x6f, 0x6a, 0x11, 0x7c, 0xc7, 0xb0, 0x24, 0x4e, 0xf9, 0x7c, 0xcf, 0xca, 0xf9, 0x96, 0xfe, 0x12, 0xe0, 0x50, 0xa6, 0x46, 0x43, 0x50, 0x84, 0x2a, 0xb3, 0x89, 0xf6, 0xfe, 0xfa, 0x16, 0x85, 0xb9, 0x99, 0x3e, 0x43, 0x93, 0xb5, 0x18, 0x77, 0xf9, 0xd7, 0xd9, 0x97, 0x41, 0x55, 0xdd, 0x20, 0x9f, 0xfd, 0x98, 0x1d, 0x95, 0x94, 0x1c, 0x2d, 0xe4, 0xbb, 0x7e, 0xba, 0xcf, 0x45, 0x17, 0x95, 0x6a, 0x3e, 0x56, 0xdf, 0x34, 0x6f, 0x24, 0xba, 0x08, 0xca, 0x1c, 0xf2, 0x74, 0xbc, 0x6e, 0x74, 0xc3, 0x91, 0x7f, 0x13, 0xfb, 0xbd, 0xca, 0xfd, 0xc5, 0xec, 0xf3, 0x84, 0x6c, 0x0e, 0x34, 0x8c, 0x66, 0x2c, 0x83, 0x22, 0xf5, 0x49, 0xfc, 0x9d, 0xa5, 0x3e, 0x55, 0x50, 0xa8, 0xb3, 0xce, 0x58, 0xa6, 0x2b, 0x50, 0xbf, 0x8f, 0xbf, 0x85, 0xea, 0xe6, 0xc7, 0xf6, 0x62, 0x2b, 0x3d, 0xaf, 0x6e, 0xc6, 0xe7, 0xfb, 0x2b, 0xe9, 0xde, 0xbe, 0xa7, 0xe8, 0xf6, 0xc9, 0x1e, 0xb0, 0xce, 0x2b, 0x2a, 0x23, 0xd8, 0xe4, 0x49, 0x05, 0x15, 0x76, 0x93, 0x32, 0xcb, 0x76, 0x8b, 0x06, 0xc9, 0x6e, 0xa4, 0xb0, 0x75, 0x33, 0x6a, 0xd4, 0xc7, 0xe5, 0x6a, 0xff, 0x3a, 0xef, 0xca, 0xcd, 0xcc, 0x6f, 0x0c, 0x6f, 0x91, 0xcb, 0xda, 0xa1, 0x3e, 0x5e, 0xf7, 0x00, 0xdf, 0x30, 0x30, 0x53, 0x5d, 0x47, 0xf7, 0xc5, 0xf3, 0x5d, 0x4d, 0xbb, 0x6d, 0x15, 0xf6, 0x49, 0x05, 0x2e, 0xa2, 0x62, 0xe4, 0x32, 0xcf, 0xe1, 0x5b, 0x8d, 0xec, 0x54, 0xb7, 0xe2, 0x1b, 0x29, 0x8a, 0xee, 0xb0, 0x64, 0xff, 0xed, 0xf8, 0x46, 0x4a, 0xa3, 0x7b, 0x2c, 0x61, 0xf8, 0xd7, 0x26, 0x75, 0x28, 0xac, 0x62, 0x49, 0x54, 0xda, 0x1e, 0x39, 0xd7, 0x1c, 0xf3, 0x56, 0xd6, 0xd6, 0x05, 0x5d, 0x32, 0x5a, 0x73, 0x74, 0x2b, 0x51, 0x51, 0xa9, 0xa4, 0x9f, 0x51, 0xad, 0x9e, 0xb1, 0x96, 0x4a, 0xc6, 0x19, 0x6e, 0xf5, 0x1c, 0xbe, 0xcd, 0xf8, 0x3e, 0xaf, 0xb5, 0xc3, 0xc1, 0xf9, 0xa2, 0xdf, 0x6f, 0x72, 0x4e, 0x60, 0xf7, 0x71, 0xc1, 0x3f, 0x94, 0x2c, 0xbe, 0x73, 0x33, 0x71, 0xbb, 0x6e, 0x18, 0xa6, 0xa2, 0xb1, 0x26, 0xf8, 0x81, 0x90, 0x97, 0xf1, 0x74, 0xe4, 0x77, 0x75, 0x5c, 0x5e, 0x6e, 0xf2, 0xae, 0x9a, 0xf8, 0x4f, 0xd4, 0x76, 0xd7, 0x1d, 0x21, 0x4e, 0x27, 0x97, 0x47, 0xa0, 0xcc, 0xa3, 0xd8, 0xa2, 0xd7, 0x6f, 0x8b, 0x75, 0x18, 0xe9, 0x4e, 0x93, 0xdf, 0x6d, 0x79, 0xa4, 0x2f, 0xf0, 0x40, 0x20, 0xf6, 0x93, 0x8f, 0xd5, 0x8d, 0x1d, 0xc7, 0x6d, 0x33, 0xd5, 0x8d, 0xef, 0xf4, 0x21, 0x74, 0xa3, 0x72, 0x1d, 0x9f, 0xf5, 0x9a, 0xc3, 0xf7, 0x91, 0x64, 0x15, 0xcd, 0x44, 0x1f, 0x69, 0xc3, 0x1b, 0x33, 0x3c, 0xea, 0x46, 0x65, 0x7f, 0x49, 0x16, 0xdf, 0x1a, 0x9c, 0xc1, 0xf7, 0xf5, 0x5c, 0xeb, 0xdf, 0x31, 0xd2, 0x5a, 0xc4, 0xa7, 0xe7, 0x06, 0x27, 0x33, 0xc4, 0x49, 0xa9, 0x2c, 0x01, 0xc4, 0xa5, 0xb2, 0x77, 0x95, 0x74, 0x8d, 0x80, 0xc3, 0x69, 0xc6, 0x9a, 0x75, 0xa8, 0xc4, 0x69, 0xc7, 0x1a, 0x3b, 0x05, 0x6f, 0x0c, 0x66, 0x61, 0x6c, 0x5d, 0x4c, 0x12, 0xb1, 0x51, 0x36, 0xf0, 0x99, 0xb2, 0x94, 0xdb, 0x84, 0xaf, 0x0a, 0xca, 0x13, 0x5c, 0x68, 0x66, 0x6d, 0xc6, 0x14, 0xb9, 0x53, 0xca, 0x99, 0xca, 0x5c, 0x04, 0xfe, 0x7f, 0xec, 0x5d, 0x7b, 0x70, 0x94, 0x55, 0x96, 0xbf, 0xdd, 0x89, 0x49, 0x6c, 0x83, 0x66, 0xc7, 0x8c, 0x32, 0x91, 0xd2, 0x8f, 0x96, 0xc4, 0x4e, 0xe8, 0xf4, 0x23, 0x2f, 0x92, 0x40, 0x30, 0xe9, 0x4e, 0x42, 0x12, 0x92, 0xa6, 0xe9, 0x8e, 0x10, 0x1d, 0x66, 0xe8, 0x40, 0xba, 0x9b, 0x86, 0x3c, 0x7a, 0xd2, 0x09, 0x04, 0xa4, 0xdc, 0xf0, 0x10, 0x10, 0x18, 0x13, 0x81, 0xb2, 0x66, 0x67, 0x50, 0x29, 0x7c, 0x31, 0xea, 0xb0, 0xe0, 0xa8, 0x3b, 0x45, 0xb1, 0x63, 0xa4, 0x2c, 0x97, 0x9d, 0x72, 0xc6, 0xc7, 0xba, 0xae, 0xab, 0xb3, 0x82, 0x94, 0xab, 0x0e, 0xe3, 0x5a, 0x8c, 0x8f, 0xad, 0x5b, 0x10, 0xd2, 0xfb, 0x3b, 0xe7, 0x7e, 0xdd, 0x69, 0x1e, 0x3b, 0x33, 0xee, 0x3f, 0xfb, 0x4f, 0xba, 0x72, 0xbe, 0xef, 0xde, 0x73, 0xdf, 0xef, 0x73, 0xcf, 0x77, 0x73, 0x7f, 0xd5, 0x09, 0x33, 0xb6, 0xf7, 0xf3, 0xbd, 0x23, 0xe8, 0x33, 0xd5, 0xc5, 0x8d, 0xa2, 0xa8, 0xb8, 0x27, 0xbe, 0x5f, 0xd8, 0xf0, 0x3c, 0x20, 0x4a, 0x5c, 0xbd, 0xc2, 0x67, 0xbf, 0x5e, 0x49, 0x31, 0x8d, 0xb5, 0x35, 0xb5, 0xc2, 0xa7, 0x4b, 0x07, 0x6e, 0xa3, 0x79, 0x66, 0x4f, 0xfc, 0x09, 0x63, 0x01, 0x9e, 0x87, 0x8c, 0x45, 0x1d, 0x23, 0x3a, 0x5f, 0xc5, 0x56, 0x91, 0x48, 0x01, 0xae, 0x9f, 0x1b, 0x8d, 0x78, 0x9e, 0x33, 0x66, 0xe0, 0xf9, 0xb5, 0xd1, 0x84, 0xa7, 0x34, 0x5e, 0xef, 0x6c, 0x30, 0x58, 0xea, 0x3e, 0xbb, 0x78, 0x8e, 0x47, 0x6e, 0x86, 0xe3, 0xb8, 0x6b, 0x2c, 0x90, 0xee, 0x38, 0x5e, 0x3b, 0xe6, 0xdc, 0x88, 0x5d, 0xaa, 0x11, 0xcf, 0x1f, 0x61, 0x96, 0x4d, 0xc4, 0x28, 0xb3, 0xee, 0x8b, 0x0f, 0xa5, 0xd8, 0x46, 0x2f, 0xfe, 0x2e, 0xc5, 0x76, 0xf0, 0xe2, 0xc9, 0x14, 0xdb, 0x0b, 0x17, 0x97, 0xa5, 0xd8, 0x5e, 0x9b, 0x78, 0x37, 0xc5, 0xf6, 0xce, 0xc4, 0xaf, 0x30, 0x97, 0xc5, 0xe3, 0x71, 0x35, 0xcb, 0x71, 0xfd, 0x14, 0x61, 0xfd, 0x9c, 0xf0, 0x46, 0xb1, 0x66, 0xce, 0x13, 0x9f, 0xb2, 0xcb, 0xe9, 0x84, 0x8b, 0x67, 0xdf, 0x82, 0x3f, 0xf2, 0x1d, 0xc1, 0xd3, 0xd5, 0x1a, 0x6b, 0x9d, 0x76, 0xf7, 0x36, 0x1a, 0x19, 0xd7, 0xed, 0xae, 0x34, 0x06, 0xa2, 0x45, 0xb3, 0xd1, 0x86, 0xd7, 0xb0, 0xcf, 0x4a, 0x84, 0xe6, 0xd5, 0x38, 0xd3, 0x0d, 0x53, 0x06, 0x5a, 0xd6, 0x68, 0xbf, 0x86, 0x46, 0x85, 0xaa, 0xf5, 0xba, 0x2f, 0x0c, 0x2e, 0x33, 0x64, 0xa5, 0x89, 0x2f, 0x69, 0x9d, 0xc9, 0xbe, 0x5f, 0xdc, 0x46, 0x2b, 0x2c, 0xc9, 0x56, 0xf1, 0xb8, 0xca, 0x9d, 0xcb, 0x05, 0x19, 0x6b, 0x7e, 0x20, 0x0f, 0x6e, 0x6f, 0xc0, 0xed, 0x3b, 0x70, 0x1b, 0xbb, 0xc4, 0xcd, 0xe3, 0xdd, 0x35, 0xeb, 0xc6, 0xd0, 0xee, 0x96, 0xfa, 0x70, 0x3a, 0xe6, 0x8f, 0xb5, 0x4a, 0x1a, 0x9b, 0x39, 0x2e, 0x64, 0xe7, 0x32, 0xa1, 0xf5, 0xa7, 0x20, 0x19, 0x15, 0x08, 0x48, 0x63, 0x49, 0x14, 0xa3, 0x8b, 0x43, 0x49, 0xd3, 0x56, 0xce, 0x9f, 0x47, 0xf5, 0x2d, 0xac, 0x07, 0x29, 0x12, 0x5b, 0x87, 0x5a, 0xad, 0x6b, 0x19, 0x2b, 0xae, 0x04, 0xb2, 0x46, 0x6d, 0xb8, 0x4c, 0xaf, 0xb5, 0xd5, 0x02, 0x73, 0x08, 0x9e, 0x36, 0x61, 0xc3, 0xb3, 0x44, 0x94, 0xcc, 0x5c, 0x6d, 0x34, 0xa3, 0xe5, 0x31, 0x8b, 0xa0, 0xe5, 0x31, 0x8b, 0x18, 0x8b, 0x3c, 0xc7, 0xe4, 0x27, 0xa9, 0xd2, 0xe1, 0x2c, 0x9b, 0xb1, 0x08, 0x3b, 0xe5, 0xd3, 0x48, 0x73, 0xff, 0x91, 0xcd, 0x90, 0xdf, 0x9e, 0x2a, 0x50, 0xfc, 0x35, 0x46, 0xb3, 0x05, 0xe3, 0x40, 0xcd, 0x25, 0x99, 0xb1, 0x84, 0xdc, 0xe2, 0x1d, 0x19, 0x10, 0x34, 0xf6, 0x5e, 0xb1, 0x6d, 0x34, 0xcc, 0x5e, 0x18, 0x3f, 0x10, 0xe8, 0xb0, 0xdd, 0x38, 0x7b, 0x8d, 0x48, 0x8f, 0xef, 0x87, 0xac, 0xb0, 0xb9, 0x27, 0x4b, 0xcb, 0xf8, 0xcf, 0x43, 0x63, 0x5b, 0xc3, 0x0e, 0x35, 0x9e, 0x33, 0xef, 0x43, 0x0d, 0x17, 0xc7, 0xf7, 0xb3, 0xf9, 0x01, 0x36, 0x1f, 0x20, 0xbb, 0x3d, 0x93, 0xc7, 0xf9, 0x0c, 0xc8, 0x09, 0x56, 0x0a, 0xb1, 0x63, 0xd8, 0x77, 0xbf, 0x6f, 0xb3, 0x77, 0x17, 0xe3, 0x42, 0x5d, 0x7f, 0xe4, 0xfe, 0xde, 0x67, 0x66, 0xf9, 0xb8, 0x94, 0x59, 0x0b, 0xce, 0x8a, 0x9c, 0x0d, 0x90, 0x14, 0x66, 0xd7, 0xc7, 0xc7, 0x03, 0x3c, 0x8f, 0x66, 0xee, 0x53, 0x33, 0x7c, 0xe6, 0x1b, 0xfa, 0xcc, 0xae, 0xea, 0xfd, 0x90, 0xb1, 0xa0, 0x63, 0x44, 0x1f, 0x37, 0xbd, 0x46, 0x73, 0x5a, 0x9e, 0xeb, 0xb0, 0xd1, 0x4c, 0xa5, 0x2a, 0xae, 0x35, 0x16, 0xa5, 0xd6, 0x79, 0xc6, 0x16, 0xd2, 0x71, 0xbd, 0x34, 0xdc, 0xe5, 0x55, 0xd2, 0x81, 0xb5, 0x99, 0x10, 0x49, 0xe8, 0xd6, 0xc4, 0x50, 0xae, 0xc6, 0x23, 0x31, 0x63, 0x98, 0x54, 0x49, 0x90, 0xb4, 0x96, 0xa3, 0x75, 0x8b, 0xd4, 0xe8, 0xa4, 0xb4, 0xee, 0x39, 0x7e, 0xfb, 0x18, 0x99, 0xd5, 0x53, 0xcd, 0x60, 0x99, 0x9f, 0xab, 0x11, 0x4b, 0xb3, 0x78, 0xd2, 0xe7, 0x44, 0xcd, 0xe6, 0x44, 0x6b, 0x47, 0x0d, 0x4d, 0xb5, 0x93, 0x2d, 0x1c, 0xaf, 0x46, 0x7b, 0x0d, 0x2b, 0x79, 0x3e, 0xf3, 0xe2, 0x55, 0xe5, 0xf9, 0xf9, 0xaa, 0x3c, 0xe6, 0x55, 0x86, 0x5c, 0xb3, 0xc8, 0xd8, 0x24, 0x30, 0xab, 0x60, 0xc7, 0x34, 0x5f, 0x83, 0x1d, 0xfb, 0xa5, 0x6a, 0xad, 0xf6, 0x2d, 0xd4, 0x4b, 0xfc, 0x6b, 0xf7, 0xf9, 0xaf, 0xa2, 0xa2, 0x4a, 0x18, 0x49, 0xeb, 0xe8, 0x09, 0x34, 0x82, 0xd7, 0xb4, 0x01, 0x29, 0xbc, 0xc5, 0xb1, 0xbd, 0x9e, 0x98, 0x59, 0x02, 0x13, 0xac, 0xfd, 0x5c, 0xae, 0x76, 0xbd, 0x42, 0x94, 0x8e, 0x1b, 0x85, 0x38, 0xf5, 0x27, 0xbc, 0x05, 0xbd, 0x73, 0x58, 0x87, 0x94, 0xa1, 0x76, 0x2f, 0xa5, 0x63, 0xac, 0xc5, 0x63, 0xc9, 0xa9, 0x52, 0x83, 0xf4, 0x3b, 0x3d, 0x2b, 0x0d, 0xab, 0x6a, 0xfa, 0xd0, 0x0d, 0x01, 0xe3, 0x50, 0xa6, 0x96, 0xf6, 0xf1, 0x0e, 0xc8, 0xe7, 0xf1, 0x95, 0x39, 0xfd, 0x86, 0x13, 0xc3, 0x90, 0xf5, 0xd2, 0x49, 0xbf, 0x34, 0x70, 0xc3, 0xab, 0xc3, 0x1f, 0xed, 0xd4, 0xd2, 0xce, 0xec, 0x48, 0xe5, 0xfe, 0x61, 0x07, 0xdd, 0x97, 0x30, 0xb6, 0x69, 0xeb, 0x70, 0xd4, 0x30, 0xb6, 0x85, 0x70, 0x2a, 0x89, 0xdb, 0x7f, 0x03, 0x71, 0xec, 0x69, 0x54, 0xf6, 0xef, 0xbe, 0x9d, 0x58, 0x7f, 0x1b, 0xce, 0xc7, 0xbb, 0xed, 0x46, 0xda, 0x13, 0xd8, 0x6b, 0x45, 0x2e, 0x72, 0x6c, 0xa2, 0xfd, 0xa4, 0x6f, 0xd8, 0x5e, 0xcb, 0x37, 0x38, 0x10, 0xc2, 0xa2, 0x61, 0xdb, 0x63, 0x7d, 0x67, 0x5d, 0x4f, 0x7b, 0xf6, 0xf4, 0x0b, 0x7b, 0xdd, 0x9f, 0xf3, 0xd3, 0xb2, 0xa5, 0xe7, 0x85, 0xd6, 0x53, 0xe9, 0x33, 0x12, 0xf2, 0xdf, 0xd8, 0x09, 0xaa, 0x8d, 0xec, 0x31, 0xcf, 0xb1, 0x78, 0x96, 0x6a, 0x81, 0x8e, 0x91, 0xe3, 0xdc, 0xab, 0x18, 0x53, 0xf7, 0xc1, 0x40, 0x36, 0xd7, 0x96, 0x01, 0xee, 0xd9, 0x1d, 0x23, 0x51, 0x11, 0xc8, 0xa0, 0x3b, 0x23, 0x38, 0xde, 0x5c, 0x32, 0x25, 0xe2, 0xe5, 0xb6, 0xc7, 0xee, 0xd2, 0x9d, 0x86, 0x98, 0x63, 0xd8, 0x07, 0xce, 0x2b, 0x20, 0xec, 0x73, 0xbb, 0x98, 0x01, 0x89, 0x51, 0x7b, 0xfe, 0x59, 0x48, 0xc3, 0x51, 0xcd, 0xf0, 0xe6, 0x8e, 0x23, 0xcf, 0x42, 0x16, 0x0e, 0x45, 0x33, 0xc7, 0x36, 0xd5, 0x9d, 0xcb, 0xca, 0xd4, 0xb2, 0x06, 0xe4, 0xd8, 0xe6, 0x57, 0x37, 0x99, 0x5d, 0x0d, 0x7f, 0xca, 0x12, 0x24, 0xf1, 0x6a, 0xed, 0x81, 0xf9, 0x45, 0x4d, 0x1f, 0x7c, 0x26, 0xd2, 0x5f, 0xfc, 0xed, 0x0a, 0xc7, 0x2f, 0x4f, 0x06, 0xad, 0x2f, 0xfe, 0x36, 0x9c, 0x33, 0x6b, 0x54, 0xf1, 0x7e, 0xf6, 0x9b, 0xfc, 0x36, 0xcc, 0xa2, 0x3b, 0x7f, 0x79, 0x32, 0x6c, 0x32, 0x5f, 0xbb, 0x67, 0xc7, 0x4c, 0xba, 0xcd, 0xc2, 0x68, 0x79, 0xe8, 0xa1, 0x67, 0x91, 0xce, 0xb5, 0x81, 0x1c, 0x4b, 0x93, 0x5a, 0xa5, 0x42, 0xc7, 0x91, 0x53, 0xc6, 0xa7, 0x9a, 0x87, 0x7d, 0x5b, 0xb5, 0x26, 0x1c, 0xce, 0x92, 0xd2, 0xb2, 0xf2, 0x8a, 0x39, 0x95, 0x55, 0x29, 0xc6, 0xce, 0x15, 0x2b, 0xbb, 0x82, 0x21, 0xd2, 0x81, 0xdf, 0x38, 0x1e, 0x1f, 0x13, 0x2f, 0xbf, 0x8d, 0x37, 0x2c, 0x2f, 0xbf, 0x49, 0x6d, 0x7f, 0xab, 0x38, 0x75, 0xae, 0xc4, 0x33, 0x68, 0x37, 0x62, 0xaf, 0x93, 0x15, 0x35, 0x61, 0xdc, 0x63, 0x97, 0x20, 0xa6, 0xa1, 0x1e, 0xbe, 0xe8, 0x18, 0x71, 0x90, 0xfe, 0x76, 0x3a, 0xc6, 0xc3, 0xb4, 0xf0, 0xd7, 0xa5, 0xa4, 0x7d, 0x3e, 0x75, 0x6e, 0xbf, 0xd1, 0x25, 0xe2, 0xc2, 0x65, 0x10, 0xa5, 0x27, 0x60, 0x73, 0x44, 0x0d, 0xb3, 0x6e, 0xf3, 0x0c, 0x26, 0xfd, 0x5d, 0x1f, 0xbe, 0x49, 0x99, 0xa9, 0x1f, 0x89, 0x78, 0xe9, 0x78, 0x16, 0xe9, 0x55, 0xf7, 0x7b, 0x06, 0xa3, 0x71, 0xa4, 0x71, 0x9d, 0xdd, 0x84, 0x3d, 0x4c, 0xf6, 0x82, 0xf3, 0xf1, 0x3d, 0x01, 0x13, 0xa1, 0x07, 0xda, 0xb3, 0x3c, 0x7b, 0x3b, 0x46, 0x72, 0xf2, 0x42, 0x5f, 0xce, 0x5a, 0x5e, 0xa0, 0xa3, 0x9a, 0x20, 0x1f, 0x56, 0xec, 0xb1, 0x2c, 0xe8, 0x0d, 0x6f, 0xaa, 0xdd, 0xdb, 0xcd, 0xcf, 0x53, 0x9f, 0xc1, 0xde, 0x97, 0x64, 0x6d, 0x07, 0x72, 0xd6, 0x8e, 0x76, 0xef, 0x1a, 0x32, 0x15, 0xcc, 0x9b, 0xfb, 0xd3, 0xdf, 0xd0, 0x0c, 0x14, 0x5f, 0x59, 0xb6, 0x10, 0xf3, 0xd0, 0xcd, 0x2f, 0x22, 0x4c, 0x65, 0x33, 0xf7, 0x4c, 0xda, 0x25, 0xae, 0x1c, 0x45, 0x98, 0x2c, 0x0e, 0xb3, 0x27, 0x60, 0xa6, 0xb9, 0xdd, 0xf3, 0xb0, 0x77, 0xa4, 0x48, 0x84, 0xa7, 0xe7, 0x94, 0x43, 0x76, 0x50, 0xe9, 0xef, 0x01, 0xff, 0x1a, 0x9a, 0xcb, 0xf6, 0x0d, 0x77, 0x8c, 0x10, 0xfa, 0x9b, 0x3d, 0x8d, 0x76, 0x10, 0x05, 0xc2, 0xbf, 0x35, 0x34, 0x16, 0x35, 0xa1, 0xfd, 0x75, 0xcc, 0x8e, 0x89, 0x0f, 0x9b, 0x3e, 0x75, 0x38, 0x68, 0x2c, 0x20, 0x77, 0xb9, 0x48, 0xa9, 0x24, 0x35, 0x77, 0x03, 0x33, 0x68, 0xd7, 0x72, 0xf3, 0x58, 0xc3, 0xf9, 0x89, 0x97, 0x30, 0x3e, 0x0e, 0x51, 0x0f, 0xcf, 0x29, 0x9d, 0x4c, 0xe5, 0xee, 0xcd, 0xe8, 0x55, 0xe3, 0xa8, 0xdd, 0x33, 0xfd, 0x26, 0xea, 0xb9, 0xad, 0xa7, 0xb2, 0xb3, 0x11, 0xe7, 0x4e, 0x3d, 0xce, 0xdc, 0x94, 0xf0, 0x6b, 0xff, 0x42, 0x78, 0x2d, 0x25, 0x7c, 0x8b, 0x8f, 0x2e, 0xbc, 0xa2, 0xfb, 0xb1, 0xf2, 0xe9, 0x06, 0xae, 0x81, 0xa0, 0xe6, 0x26, 0xed, 0xa0, 0x7e, 0x03, 0xd2, 0x40, 0x9f, 0xd6, 0xd8, 0x19, 0x1b, 0xb0, 0x6a, 0xf9, 0x51, 0xad, 0x78, 0x3e, 0x3d, 0x2d, 0xf9, 0xb1, 0x42, 0xab, 0x16, 0xea, 0xee, 0x0c, 0xc7, 0xe8, 0xee, 0xd1, 0x21, 0x53, 0x42, 0x5d, 0x98, 0x12, 0x83, 0x1e, 0xb8, 0x56, 0xf7, 0xae, 0xa9, 0x2b, 0xbc, 0x52, 0xc3, 0x28, 0x75, 0x5b, 0xf2, 0xf2, 0x1c, 0xd1, 0xdb, 0xd7, 0xd3, 0x33, 0x28, 0x58, 0x5b, 0x48, 0x86, 0x28, 0x3d, 0x88, 0xda, 0xda, 0xee, 0xba, 0xfc, 0x26, 0x29, 0xa5, 0xaf, 0x32, 0x89, 0xe6, 0x04, 0x9b, 0xe2, 0x26, 0x7f, 0xb1, 0xe0, 0xc0, 0x60, 0xd4, 0x24, 0x96, 0xb8, 0x7c, 0xc8, 0xa7, 0x49, 0xd0, 0xdd, 0x68, 0xde, 0xce, 0x70, 0x50, 0xf8, 0xfd, 0xcb, 0xf9, 0x0a, 0x3f, 0xd2, 0xb5, 0xd2, 0x0d, 0xe5, 0x32, 0x6f, 0x9f, 0x90, 0xb7, 0x84, 0x0c, 0x85, 0xa2, 0x0b, 0xe6, 0x17, 0x40, 0xbf, 0x12, 0x72, 0x86, 0x4d, 0x7d, 0xe3, 0xd1, 0x13, 0xa6, 0x7b, 0x91, 0x9d, 0xa4, 0x93, 0xb2, 0x5f, 0xaf, 0xd1, 0x3d, 0x31, 0x74, 0x9b, 0x8c, 0x3d, 0x89, 0xbe, 0xb1, 0x99, 0x71, 0x39, 0xec, 0x90, 0xb2, 0x86, 0xd2, 0x0c, 0xd4, 0x96, 0x44, 0xe8, 0x55, 0xef, 0x28, 0x84, 0x37, 0xb4, 0x08, 0xe1, 0x72, 0xe4, 0xf8, 0xb6, 0x44, 0xb3, 0x3f, 0x7a, 0x56, 0x4b, 0x33, 0xcf, 0x13, 0xd7, 0xa4, 0x20, 0x0e, 0x92, 0x8e, 0xc7, 0x35, 0x89, 0xb0, 0x6a, 0x76, 0x69, 0x69, 0x93, 0x1a, 0x1e, 0xa5, 0xcb, 0xd1, 0xd2, 0xb0, 0x6a, 0xc4, 0xcf, 0x09, 0xd2, 0xe9, 0x4c, 0xde, 0x55, 0x1e, 0x2f, 0x9b, 0x35, 0xb9, 0x72, 0xaf, 0x65, 0xfc, 0x8e, 0x6c, 0xa5, 0xb3, 0xba, 0xd3, 0x6c, 0xb5, 0x8b, 0x59, 0x18, 0x19, 0x16, 0xea, 0xfb, 0x16, 0xbb, 0x70, 0xd8, 0xec, 0xa2, 0xac, 0x20, 0x1d, 0xab, 0x13, 0x69, 0x86, 0xdc, 0xe7, 0x84, 0x3d, 0xc3, 0xf5, 0x34, 0xf7, 0xdf, 0x63, 0x71, 0xdb, 0x64, 0x8c, 0x17, 0x09, 0xed, 0x37, 0x87, 0x56, 0xab, 0xb0, 0x57, 0x4b, 0xeb, 0xcf, 0x3e, 0x73, 0x88, 0x6f, 0xb4, 0xa9, 0x2d, 0xa2, 0xfd, 0xcb, 0x7c, 0xcd, 0x75, 0x29, 0x6a, 0x88, 0x3d, 0xd3, 0x6e, 0x62, 0x5c, 0x59, 0x96, 0x2e, 0xbf, 0xf7, 0x14, 0xed, 0x56, 0xed, 0x7b, 0xe0, 0xab, 0x01, 0x65, 0xcc, 0xb4, 0x36, 0xd2, 0x5d, 0xf9, 0x24, 0x31, 0xb5, 0x9e, 0xaa, 0x1f, 0x47, 0xfd, 0x64, 0xb2, 0xae, 0x43, 0xf9, 0xfd, 0x54, 0xf9, 0x25, 0x39, 0xda, 0xde, 0x88, 0x65, 0x62, 0x01, 0x46, 0xa8, 0x5b, 0x58, 0xec, 0x2e, 0xba, 0x83, 0xbe, 0x7e, 0x1c, 0xfd, 0xf0, 0x27, 0x8b, 0x95, 0x86, 0xc2, 0x93, 0x65, 0x13, 0x06, 0xd2, 0xb7, 0xa7, 0x3b, 0xdc, 0xe8, 0xcf, 0x79, 0xb7, 0xd0, 0xcd, 0xf9, 0x84, 0x11, 0x94, 0xae, 0x59, 0x49, 0xe7, 0xf4, 0x6b, 0xbb, 0x20, 0xe4, 0x09, 0xda, 0x09, 0x51, 0x9c, 0x8e, 0x32, 0x46, 0x9f, 0xc8, 0x0e, 0xb7, 0x52, 0x3a, 0x79, 0xb3, 0xed, 0x82, 0xc6, 0x6d, 0x67, 0x13, 0x8d, 0x40, 0xc2, 0x38, 0x4b, 0x3b, 0xcb, 0x7c, 0xa7, 0x1a, 0x93, 0xcc, 0x39, 0xc3, 0x9c, 0xea, 0x14, 0xce, 0x7b, 0xcc, 0xb9, 0x33, 0xc9, 0x99, 0xa7, 0xca, 0x8c, 0xf5, 0xcc, 0x66, 0xb0, 0xd4, 0x8f, 0xc1, 0xc7, 0xf1, 0xfa, 0xb1, 0x35, 0x22, 0xed, 0x25, 0xcf, 0xe1, 0x71, 0x46, 0x4e, 0x4b, 0x7b, 0xce, 0xbc, 0x31, 0x33, 0x2e, 0x26, 0x51, 0x56, 0xce, 0x82, 0x9b, 0xe1, 0xaa, 0x77, 0x35, 0x04, 0xf8, 0x19, 0x35, 0x64, 0x15, 0x89, 0x34, 0x43, 0x61, 0x28, 0x83, 0xf0, 0x09, 0xd2, 0x42, 0x8c, 0x28, 0x3e, 0xd1, 0x2c, 0x79, 0xe7, 0x87, 0x7a, 0x68, 0xa9, 0x0d, 0xb1, 0x5e, 0x2b, 0xcf, 0xed, 0x19, 0x0d, 0x88, 0xb4, 0x7a, 0x36, 0xff, 0x10, 0x32, 0x63, 0x0b, 0x4a, 0xb8, 0x03, 0x73, 0x08, 0x56, 0x91, 0x8b, 0xc7, 0x0a, 0x84, 0x77, 0x24, 0xdc, 0xf5, 0xd0, 0x49, 0xb4, 0x02, 0xef, 0xf4, 0xc9, 0x15, 0xad, 0xe0, 0x16, 0x0e, 0xf4, 0x47, 0x87, 0x15, 0x3b, 0xfd, 0x85, 0xe7, 0x19, 0x1f, 0xe9, 0x4c, 0x20, 0xc3, 0x73, 0x6f, 0x96, 0xc1, 0x13, 0x53, 0xeb, 0x61, 0xde, 0x5a, 0x55, 0xdb, 0x28, 0x4b, 0x43, 0x28, 0x1d, 0x72, 0xa3, 0xe6, 0xaa, 0xcd, 0xae, 0x45, 0x1b, 0xe7, 0xf4, 0x43, 0x8c, 0xd3, 0xea, 0xde, 0x7a, 0x65, 0xe6, 0xf1, 0x0f, 0x7f, 0x71, 0x6e, 0xda, 0x0e, 0xe1, 0x23, 0x7e, 0x6d, 0xe8, 0x0c, 0xc5, 0x9f, 0xa6, 0x41, 0xb2, 0xa0, 0x14, 0xda, 0x15, 0xd6, 0x9b, 0xf1, 0x08, 0xe7, 0x66, 0xa3, 0xb6, 0x1a, 0x12, 0x6c, 0xab, 0xab, 0x31, 0x90, 0x63, 0x3e, 0x24, 0x72, 0x6f, 0x5f, 0x25, 0xa6, 0x8b, 0x74, 0x5f, 0xa3, 0xe6, 0xf5, 0x3e, 0xd0, 0x32, 0x1a, 0xce, 0xc8, 0x6e, 0x14, 0x5d, 0xa1, 0x4f, 0xd8, 0xe7, 0xda, 0x82, 0x56, 0x57, 0x9f, 0xb0, 0x05, 0x5a, 0x6d, 0x37, 0x1a, 0x17, 0x9c, 0x13, 0x05, 0xd8, 0xe1, 0xa8, 0xfe, 0xf7, 0xf0, 0x76, 0xea, 0x81, 0xe6, 0x05, 0xee, 0x3f, 0x68, 0xaa, 0x0c, 0x2c, 0x1f, 0x85, 0xb3, 0x20, 0x37, 0x0f, 0x65, 0x1a, 0x02, 0x26, 0xd4, 0xf0, 0x77, 0xd8, 0x2c, 0xd0, 0x43, 0x33, 0x3d, 0xc7, 0xc6, 0x77, 0x53, 0xaf, 0xf4, 0x21, 0x2e, 0xef, 0xae, 0xe3, 0x78, 0xae, 0x38, 0x6c, 0x6e, 0xe5, 0x70, 0x1e, 0x7a, 0x52, 0x0b, 0x84, 0xad, 0xba, 0xff, 0x79, 0xa2, 0x56, 0xd0, 0x13, 0x12, 0x16, 0xc2, 0xb5, 0xdb, 0x69, 0xa4, 0x91, 0xfd, 0x00, 0x9e, 0xe8, 0xeb, 0xe3, 0xcb, 0x58, 0x2e, 0x6c, 0x08, 0xe7, 0xda, 0x8d, 0xae, 0xa7, 0x9b, 0x86, 0x72, 0xd0, 0x77, 0xc0, 0xb5, 0xf2, 0xae, 0xf0, 0x56, 0xd4, 0x8c, 0x19, 0x7b, 0x2b, 0xa1, 0xf8, 0x5c, 0x73, 0xf7, 0x71, 0xa8, 0x23, 0xbc, 0xdf, 0x9b, 0x47, 0x57, 0x64, 0x07, 0xf2, 0x28, 0xa5, 0x34, 0x91, 0x08, 0x7b, 0xe1, 0x1c, 0xef, 0x73, 0xa9, 0xbe, 0x84, 0xb9, 0x48, 0x54, 0xdb, 0x09, 0xef, 0xa3, 0x62, 0x74, 0x13, 0xe4, 0x12, 0x03, 0xc7, 0xb0, 0x9d, 0x63, 0xe8, 0x8d, 0x66, 0x70, 0x5e, 0xdf, 0xe5, 0xde, 0x99, 0xfb, 0x77, 0xaf, 0x2f, 0x38, 0x7f, 0xe1, 0xcd, 0xc0, 0xf4, 0x2c, 0x2b, 0xf2, 0x97, 0x13, 0xca, 0xc1, 0x9e, 0x7d, 0x16, 0x48, 0x83, 0xdf, 0xbd, 0x7c, 0xb7, 0x52, 0x6b, 0x34, 0xde, 0x1f, 0xb7, 0xba, 0x49, 0x22, 0xa7, 0xda, 0x0f, 0xbd, 0x6b, 0x76, 0x53, 0xf8, 0x89, 0x15, 0x28, 0x4b, 0x16, 0x97, 0xe8, 0x9c, 0x2a, 0xd1, 0x85, 0x9d, 0x94, 0x9f, 0x6b, 0x44, 0x92, 0x8f, 0x1d, 0x0b, 0xe2, 0xbe, 0xc7, 0xb3, 0xf7, 0x32, 0x3e, 0xf6, 0x38, 0x9e, 0xbd, 0x4a, 0xfa, 0x2b, 0x58, 0x95, 0x96, 0x47, 0x88, 0x38, 0xcd, 0xe7, 0x2f, 0xbc, 0x1b, 0xe8, 0xd7, 0x25, 0x42, 0x8b, 0xc1, 0x8a, 0xfe, 0x9d, 0x66, 0x11, 0xed, 0x5b, 0x3f, 0xdd, 0xfd, 0xe9, 0x8e, 0xb6, 0xaf, 0xb2, 0x72, 0x03, 0xae, 0x96, 0xe1, 0xee, 0x2c, 0xb3, 0xc8, 0xda, 0x24, 0x6e, 0x0b, 0x54, 0x74, 0x6c, 0xd2, 0x6a, 0xb3, 0x2c, 0xc8, 0xaf, 0x29, 0x5c, 0xa4, 0xc5, 0x9a, 0xc4, 0xd1, 0xb1, 0x15, 0x66, 0xf3, 0x92, 0xa2, 0xac, 0xf7, 0x1f, 0x38, 0x36, 0xbc, 0x72, 0x3a, 0xa7, 0x75, 0xad, 0x9d, 0xb5, 0x24, 0x79, 0xa3, 0xc8, 0xd9, 0x3e, 0xc6, 0xe3, 0x36, 0xb5, 0x6c, 0x0a, 0x67, 0x68, 0x75, 0x5a, 0x4e, 0xe8, 0x05, 0x9f, 0xfb, 0xa5, 0x35, 0xe2, 0xfa, 0xe0, 0xa8, 0xae, 0xa5, 0x4b, 0x77, 0xb9, 0x03, 0x5f, 0xa0, 0xae, 0x3c, 0x90, 0x83, 0xfe, 0x0d, 0x92, 0x30, 0x7d, 0x93, 0x7b, 0x4f, 0x08, 0x33, 0x97, 0x60, 0xcf, 0x30, 0xeb, 0xfb, 0x8c, 0x0b, 0xce, 0x9f, 0x7f, 0xc6, 0xb3, 0x97, 0xea, 0x1a, 0x25, 0x80, 0x74, 0x41, 0xf5, 0x93, 0xb0, 0x9d, 0x66, 0x1b, 0xf7, 0x83, 0xad, 0xb4, 0x97, 0xb2, 0x6d, 0xa6, 0x31, 0xd5, 0xe2, 0xe3, 0xbe, 0x47, 0x6b, 0x1b, 0xdd, 0xb9, 0x34, 0xee, 0x85, 0xb4, 0xe6, 0xaa, 0xdf, 0x60, 0x08, 0x88, 0xf1, 0x8d, 0x43, 0xf4, 0x1c, 0xa0, 0xf1, 0xe8, 0xaa, 0x85, 0xa9, 0x57, 0xc8, 0xae, 0xd3, 0xa0, 0xcf, 0x85, 0xf4, 0x1f, 0x52, 0xd4, 0x59, 0x9b, 0xfc, 0xb8, 0x2f, 0x0f, 0x0c, 0xa8, 0xf7, 0xf6, 0x21, 0x21, 0x77, 0x38, 0x84, 0xdc, 0xf5, 0xb5, 0x90, 0x0f, 0xe2, 0x3d, 0x7a, 0x52, 0xc8, 0x91, 0xcf, 0x84, 0x7c, 0x60, 0x89, 0x90, 0xbb, 0xb1, 0x5a, 0xf4, 0x7c, 0x29, 0xe4, 0xdf, 0x6e, 0x80, 0x0c, 0xd7, 0x04, 0xea, 0x00, 0x0d, 0xd0, 0x37, 0x06, 0x21, 0x03, 0xad, 0x88, 0x4f, 0x03, 0x6d, 0x45, 0x5c, 0x58, 0x65, 0x22, 0x1f, 0x0b, 0xf9, 0x68, 0x96, 0x90, 0x6b, 0xc7, 0x84, 0xec, 0xaf, 0x17, 0x72, 0x23, 0xec, 0xfd, 0xa0, 0x1f, 0xbd, 0x29, 0xe4, 0xce, 0x77, 0xc0, 0xef, 0x86, 0xfd, 0x08, 0xcc, 0x3f, 0x41, 0xfc, 0x4f, 0xc0, 0x3f, 0xf8, 0xdd, 0xcb, 0x10, 0x06, 0xf9, 0x7a, 0x04, 0x69, 0x3f, 0x36, 0x1d, 0xf9, 0x48, 0x07, 0x1d, 0x00, 0x1f, 0x79, 0x7a, 0xac, 0x12, 0x79, 0x38, 0x49, 0xdf, 0x22, 0x40, 0xc3, 0x48, 0x03, 0x79, 0x79, 0x22, 0x00, 0xf3, 0x38, 0x7d, 0x91, 0x40, 0x7e, 0xa3, 0x78, 0x63, 0x25, 0xdb, 0xb5, 0x5b, 0xc8, 0x35, 0xc8, 0xf7, 0xa3, 0x30, 0x3f, 0xbc, 0x1f, 0x76, 0xc4, 0x7b, 0x20, 0x47, 0xc8, 0x27, 0x67, 0x21, 0x3c, 0xca, 0xb7, 0xda, 0x0a, 0x37, 0xaf, 0x90, 0x7b, 0x7f, 0x2f, 0xe4, 0x7a, 0xf8, 0x59, 0xfe, 0xa1, 0x90, 0x07, 0x51, 0x2f, 0x11, 0xf8, 0x7d, 0x04, 0xf1, 0xef, 0x45, 0x59, 0xd7, 0x23, 0xfe, 0xed, 0x48, 0xe7, 0x00, 0xe2, 0x5d, 0x07, 0xde, 0x13, 0xa0, 0x08, 0xca, 0xb5, 0x06, 0x79, 0x7e, 0xf4, 0x3d, 0x94, 0x37, 0x5b, 0xc8, 0xfd, 0xed, 0x20, 0x94, 0x7f, 0xff, 0x2a, 0x50, 0x05, 0xea, 0x01, 0xbb, 0xec, 0xc7, 0xcf, 0xc1, 0x0d, 0xf9, 0x78, 0x22, 0x57, 0xc8, 0x7d, 0xe0, 0x3f, 0x98, 0x4e, 0x5f, 0x5b, 0xe8, 0xfb, 0x8a, 0x90, 0x83, 0xa0, 0x3d, 0x88, 0xef, 0x11, 0x94, 0xef, 0x01, 0xa4, 0xdb, 0x4d, 0x79, 0x94, 0x48, 0x1b, 0xe1, 0x56, 0xa3, 0x3e, 0xd6, 0x23, 0xdd, 0x0d, 0xb0, 0x2f, 0xc1, 0x7b, 0x09, 0xfa, 0x6f, 0x07, 0xf2, 0x7a, 0x2f, 0xca, 0xbe, 0x0d, 0xf5, 0x77, 0x2f, 0xca, 0xb0, 0xed, 0x3d, 0xfa, 0x2a, 0x83, 0x78, 0x50, 0xe6, 0x5d, 0xc7, 0x51, 0x9f, 0xa8, 0xf3, 0x6d, 0x88, 0x3b, 0x86, 0xba, 0xdb, 0x05, 0xff, 0x83, 0x08, 0x7b, 0x0f, 0xea, 0x39, 0x80, 0xb8, 0xd6, 0xa1, 0x9e, 0x87, 0x6c, 0xa0, 0x57, 0x11, 0x2f, 0xca, 0x7d, 0x37, 0xf2, 0xd5, 0x01, 0xf3, 0x6a, 0xa4, 0xfd, 0x28, 0xd2, 0x5b, 0x76, 0x60, 0xb2, 0xdd, 0x97, 0x21, 0xbe, 0xc7, 0xbb, 0xe9, 0x94, 0x84, 0x90, 0x7f, 0x8f, 0xba, 0x39, 0x84, 0x36, 0x78, 0x01, 0x7e, 0x5f, 0xdc, 0xad, 0xdc, 0x0f, 0x7d, 0x22, 0xe4, 0x33, 0xa8, 0xd3, 0x5f, 0xfc, 0x0e, 0x84, 0x34, 0x0e, 0x23, 0xde, 0xc3, 0x3e, 0x10, 0xca, 0x72, 0x18, 0xe5, 0x38, 0x7c, 0x1e, 0xe1, 0xd4, 0xbd, 0xf0, 0xf2, 0xe8, 0xf8, 0xb7, 0x3e, 0x54, 0x22, 0x77, 0x22, 0x7f, 0x47, 0x51, 0xf7, 0x47, 0x51, 0xdf, 0x4f, 0xa2, 0x3e, 0x9f, 0x1c, 0x9e, 0x74, 0x0b, 0xa0, 0x2e, 0x9f, 0xdc, 0xa7, 0xcc, 0x4f, 0x05, 0xe8, 0xec, 0xcc, 0x4d, 0x63, 0x9e, 0x41, 0xdf, 0x5e, 0xac, 0xfa, 0x5f, 0x5c, 0x1c, 0x27, 0x59, 0xe6, 0x76, 0xe4, 0xfe, 0x5f, 0x72, 0x0c, 0xc5, 0xd7, 0xa2, 0x87, 0xdc, 0x3e, 0x0a, 0x7a, 0x1c, 0x3d, 0x70, 0xdf, 0xd5, 0x93, 0x4a, 0xbd, 0x62, 0x58, 0x47, 0x82, 0xb8, 0xe4, 0xd6, 0xe1, 0xce, 0x9e, 0x48, 0xb8, 0xb3, 0xb8, 0x87, 0x6e, 0x5b, 0x2e, 0x2b, 0xb7, 0x39, 0x34, 0xcb, 0xe4, 0xe9, 0x99, 0xc2, 0x69, 0x93, 0x88, 0x2f, 0x1e, 0xd0, 0x0c, 0x50, 0x9e, 0xa9, 0xad, 0xaf, 0x6b, 0xb0, 0x3b, 0xa8, 0xe5, 0xc7, 0x34, 0x7f, 0x30, 0xcc, 0x67, 0x71, 0xf2, 0xbb, 0x07, 0xc9, 0x6a, 0x71, 0x0c, 0xe5, 0x7b, 0x0b, 0xb5, 0x45, 0xa1, 0x10, 0x84, 0x32, 0x8d, 0x2c, 0xc2, 0xd4, 0x38, 0xd8, 0xab, 0xae, 0x7d, 0xbf, 0xba, 0x3b, 0xdf, 0x85, 0x5a, 0xcd, 0x66, 0xad, 0x18, 0x7e, 0x84, 0x89, 0xaf, 0x09, 0x66, 0x4e, 0xe2, 0x8a, 0x7b, 0x93, 0xd7, 0xad, 0x69, 0xba, 0x27, 0xfe, 0xba, 0xbd, 0x72, 0x4d, 0x32, 0x04, 0xf3, 0x18, 0x9f, 0x45, 0xda, 0x17, 0x31, 0x3e, 0x8b, 0xb4, 0x47, 0x19, 0x9f, 0x45, 0xda, 0xb7, 0x33, 0x3e, 0x8b, 0xb4, 0xff, 0x8c, 0xf1, 0x59, 0xa4, 0xfd, 0x39, 0xc6, 0x67, 0x91, 0xf6, 0x13, 0xac, 0x3a, 0x97, 0xf6, 0xf7, 0x19, 0x9f, 0x45, 0xda, 0xbf, 0x61, 0x7c, 0x16, 0xe9, 0x30, 0x30, 0x3e, 0x8b, 0x74, 0xdc, 0xc6, 0xf8, 0x2c, 0xd2, 0xd1, 0xc4, 0xf8, 0x2c, 0xd2, 0xd1, 0xa9, 0x5a, 0xc2, 0xb1, 0x81, 0xf1, 0x4b, 0xa4, 0x63, 0x37, 0xe3, 0x97, 0x48, 0xc7, 0x4f, 0x19, 0xbf, 0x44, 0x3a, 0x9e, 0x63, 0xfc, 0x12, 0xe9, 0x38, 0xce, 0xf8, 0x25, 0xd2, 0xf1, 0x06, 0xe3, 0x96, 0x48, 0xc7, 0x7f, 0x30, 0x6e, 0x89, 0x74, 0x9c, 0x65, 0xdc, 0x12, 0xe9, 0xf8, 0x92, 0x71, 0x4b, 0x24, 0x9f, 0x49, 0x42, 0x3a, 0xce, 0x1b, 0x19, 0x9f, 0x45, 0x3a, 0xf3, 0x19, 0x9f, 0x45, 0x3a, 0x4b, 0x19, 0x9f, 0x45, 0x3a, 0xdd, 0x8c, 0xcf, 0x22, 0x9d, 0xed, 0x8c, 0xcf, 0x22, 0x9d, 0x41, 0xc6, 0x67, 0x91, 0xce, 0x75, 0x8c, 0xcf, 0x22, 0x9d, 0xf7, 0x33, 0x3e, 0x8b, 0x74, 0xee, 0x65, 0x7c, 0x16, 0xe9, 0x3c, 0xc8, 0xf8, 0x2c, 0xd2, 0x79, 0x94, 0xf1, 0x59, 0xa4, 0xf3, 0x38, 0xe3, 0xb3, 0x48, 0xe7, 0x3f, 0x31, 0x3e, 0x8b, 0x74, 0xbe, 0xc5, 0xf8, 0x2c, 0xd2, 0xf9, 0x01, 0xe3, 0xb3, 0x48, 0xe7, 0xc7, 0x8c, 0xcf, 0x22, 0x9d, 0x67, 0x19, 0x9f, 0x45, 0x3a, 0x15, 0x7a, 0x83, 0x74, 0x7e, 0xa3, 0xca, 0xe7, 0x9c, 0x50, 0xe5, 0x2b, 0x99, 0xa6, 0xca, 0x57, 0x92, 0xaf, 0xca, 0x57, 0x52, 0xa3, 0xca, 0x57, 0xd2, 0xce, 0xf8, 0x2c, 0xb2, 0xa4, 0x47, 0x95, 0xb3, 0x64, 0xa3, 0x2a, 0x67, 0xc9, 0xa8, 0x2a, 0x67, 0xc9, 0x21, 0x55, 0xce, 0x92, 0x13, 0xaa, 0x9c, 0x25, 0x1f, 0xa8, 0xf8, 0x4b, 0x30, 0x62, 0xee, 0x28, 0x00, 0x61, 0x24, 0xdd, 0x71, 0x58, 0x48, 0xcb, 0x4d, 0x20, 0xd8, 0x2d, 0x2f, 0x29, 0xbe, 0xe5, 0xd7, 0x42, 0x16, 0x62, 0x46, 0x29, 0x6c, 0x04, 0x79, 0x40, 0x3f, 0x04, 0x85, 0x40, 0xbd, 0x7a, 0x38, 0x50, 0xe1, 0x5a, 0xd0, 0x7d, 0xa0, 0x07, 0x41, 0x0f, 0x83, 0x1e, 0x05, 0x1d, 0x9e, 0x74, 0xff, 0x4b, 0x54, 0xf8, 0x1a, 0x08, 0x23, 0xba, 0xf0, 0x93, 0xbf, 0x3e, 0xcc, 0x25, 0xe1, 0xbf, 0x00, 0x4d, 0x08, 0x59, 0x84, 0x32, 0x14, 0x55, 0x7c, 0xfb, 0xf0, 0x45, 0xf3, 0x41, 0x28, 0x5f, 0x91, 0x47, 0xd5, 0x49, 0x69, 0x0e, 0x23, 0xae, 0xc8, 0xd2, 0x5b, 0x19, 0x71, 0x45, 0x96, 0xce, 0x67, 0xc4, 0x15, 0x59, 0xea, 0x65, 0xc4, 0x15, 0x59, 0x1a, 0x61, 0xc4, 0x15, 0x59, 0xba, 0x8d, 0x11, 0x57, 0x64, 0xe9, 0x53, 0x8c, 0xb8, 0x22, 0x4b, 0x4f, 0x30, 0xe2, 0x8a, 0x2c, 0x3d, 0xcd, 0x88, 0x2b, 0xb2, 0xf4, 0x2b, 0x46, 0x5c, 0x91, 0x65, 0x7f, 0xc3, 0x88, 0x2b, 0xb2, 0xac, 0x94, 0x11, 0x57, 0x64, 0xd9, 0x12, 0x46, 0x5c, 0x91, 0x65, 0xf7, 0x32, 0xe2, 0x8a, 0x2c, 0x7b, 0x98, 0x11, 0x57, 0x64, 0xd9, 0x11, 0x95, 0x7e, 0xd9, 0xbf, 0x33, 0xe2, 0x8a, 0x2c, 0xfb, 0x9a, 0x11, 0x57, 0x64, 0xf9, 0x75, 0x8c, 0xb8, 0x22, 0xcb, 0x8b, 0x19, 0x71, 0x45, 0x96, 0x37, 0x32, 0xe2, 0x8a, 0x2c, 0x0f, 0x30, 0xe2, 0x8a, 0x2c, 0x1f, 0x64, 0xc4, 0x15, 0x59, 0xfe, 0x63, 0x46, 0x5c, 0x91, 0xe5, 0x07, 0x19, 0x71, 0x45, 0x96, 0x1f, 0x63, 0xc4, 0x15, 0x59, 0xfe, 0x3a, 0x23, 0xae, 0xc8, 0xf2, 0x53, 0x8c, 0xb8, 0x22, 0xcb, 0x27, 0x54, 0x3a, 0x15, 0x1a, 0x23, 0xae, 0xc8, 0x8a, 0x3b, 0x75, 0xfb, 0x62, 0x46, 0x5c, 0x91, 0x15, 0xbd, 0x8c, 0xb8, 0x22, 0x2b, 0x7e, 0xcc, 0x88, 0x2b, 0xb2, 0xe2, 0x1f, 0x18, 0x71, 0x45, 0x56, 0xbc, 0xc1, 0x88, 0x2b, 0xb2, 0xe2, 0x2c, 0x23, 0xae, 0xc8, 0x39, 0x06, 0x46, 0x5c, 0x91, 0x73, 0x6e, 0x61, 0xc4, 0x15, 0x39, 0xa7, 0x82, 0x11, 0x57, 0xe4, 0x9c, 0x0e, 0x46, 0x5c, 0x91, 0x73, 0xd6, 0x32, 0xe2, 0x8a, 0x9c, 0x33, 0xca, 0x88, 0x2b, 0x72, 0xce, 0xb3, 0x8c, 0xb8, 0x22, 0xe7, 0xbc, 0xc1, 0x88, 0x2b, 0x72, 0xce, 0x7f, 0x31, 0xe2, 0x8a, 0xac, 0xcc, 0x61, 0xc4, 0x15, 0x59, 0xe9, 0x64, 0xc4, 0x15, 0x59, 0x79, 0xb7, 0xca, 0x4f, 0xe5, 0x66, 0xfd, 0x7d, 0x90, 0x11, 0x57, 0x64, 0xe5, 0x3f, 0x32, 0xe2, 0x8a, 0xac, 0x7c, 0x9b, 0x11, 0x57, 0x64, 0xe5, 0x1f, 0x19, 0x71, 0x45, 0x56, 0x4a, 0x46, 0x5c, 0x91, 0x55, 0x37, 0x33, 0xe2, 0x8a, 0xac, 0x2a, 0x60, 0xc4, 0x15, 0x59, 0x55, 0xcb, 0x88, 0x2b, 0xb2, 0xaa, 0x9d, 0x11, 0x57, 0x64, 0xd5, 0x6a, 0x46, 0x5c, 0x91, 0x55, 0x1b, 0x19, 0x71, 0x45, 0x56, 0x6d, 0x67, 0xc4, 0x15, 0x59, 0xf5, 0x08, 0x23, 0xae, 0xc8, 0xaa, 0x9f, 0x33, 0xe2, 0x8a, 0xac, 0xfa, 0x57, 0x95, 0x6e, 0xd5, 0x7f, 0x33, 0xe2, 0x8a, 0xac, 0xce, 0x51, 0x76, 0x6c, 0x16, 0xd5, 0xbb, 0xce, 0xa4, 0xf8, 0xcb, 0x74, 0xfb, 0x16, 0xfd, 0xfd, 0xb8, 0xfe, 0x3e, 0xa1, 0xbf, 0x4f, 0xeb, 0xef, 0x6f, 0x18, 0x71, 0x45, 0xce, 0xd5, 0xe3, 0x99, 0x5b, 0xa2, 0xbf, 0x17, 0xe9, 0xef, 0x9e, 0x5c, 0xe5, 0xbe, 0x4b, 0xb7, 0x3f, 0xf3, 0x5d, 0x65, 0xff, 0x67, 0x46, 0x5c, 0x91, 0x73, 0xf5, 0xb1, 0x3a, 0xf7, 0x82, 0x7a, 0xcf, 0xbb, 0x89, 0x11, 0x57, 0xe4, 0x3c, 0x27, 0x23, 0xae, 0xc8, 0x79, 0x8b, 0x75, 0x7e, 0x54, 0x7f, 0xef, 0x76, 0x28, 0xf7, 0x43, 0xba, 0xfd, 0xd5, 0xa3, 0xca, 0xfe, 0x7b, 0xa7, 0x7a, 0x7f, 0xc5, 0x88, 0x2b, 0xb2, 0xe6, 0x66, 0x46, 0x5c, 0x91, 0x35, 0x73, 0x19, 0x71, 0x45, 0xd6, 0x74, 0x28, 0xff, 0x35, 0x43, 0xfa, 0x7b, 0x54, 0x7f, 0x3f, 0xad, 0xbf, 0x5f, 0xd3, 0xdf, 0x1f, 0xe9, 0xef, 0x0b, 0x93, 0x5a, 0xa9, 0x3a, 0x97, 0xbb, 0xbe, 0xa1, 0x91, 0xb8, 0x2d, 0x0d, 0x20, 0xc8, 0x67, 0x2d, 0x41, 0xd0, 0x3a, 0xd0, 0x16, 0x10, 0x56, 0xc3, 0x96, 0x83, 0xa0, 0xe7, 0x41, 0xaf, 0x80, 0xde, 0x06, 0x41, 0x2e, 0x58, 0x88, 0xd6, 0x58, 0x88, 0x59, 0x73, 0xe1, 0x9d, 0xa0, 0x95, 0xa0, 0xd5, 0xa0, 0x75, 0xde, 0xfe, 0xbe, 0x70, 0x7f, 0x67, 0x4f, 0x52, 0xbb, 0x60, 0x5a, 0xda, 0x19, 0x51, 0xd7, 0x55, 0xf3, 0x45, 0xc1, 0x7c, 0x35, 0x30, 0xa1, 0x09, 0x0c, 0xf4, 0x69, 0xa1, 0x48, 0x6f, 0x24, 0xb6, 0xca, 0x26, 0xda, 0xfa, 0xfa, 0x83, 0x36, 0x9b, 0x6d, 0xa3, 0x7f, 0x30, 0x16, 0x0d, 0xf6, 0x76, 0x6d, 0xf4, 0x05, 0xe9, 0x62, 0xdf, 0x8d, 0x5e, 0x3a, 0x2d, 0xa4, 0xf5, 0x85, 0x42, 0x49, 0x0f, 0x6e, 0x1d, 0xc9, 0x45, 0xb4, 0xf6, 0x85, 0xff, 0x77, 0xdf, 0xe4, 0x98, 0xf4, 0x69, 0xe2, 0x55, 0x0d, 0x2b, 0x65, 0xea, 0xaa, 0x39, 0x5b, 0x5f, 0xf8, 0x12, 0x6e, 0x97, 0x2d, 0xba, 0x97, 0x38, 0xeb, 0x87, 0x51, 0x27, 0x41, 0x63, 0x74, 0x7e, 0xb3, 0x7e, 0xf8, 0x29, 0x96, 0x82, 0x83, 0xa2, 0x23, 0xbd, 0x08, 0xcc, 0x20, 0xd9, 0x34, 0xdb, 0xa8, 0x19, 0xc5, 0xf7, 0x73, 0x10, 0x66, 0x64, 0xdf, 0xcb, 0x24, 0x77, 0xe0, 0xfd, 0x3a, 0xe8, 0x7d, 0x10, 0x66, 0x4c, 0xdf, 0x37, 0xa0, 0x8b, 0x90, 0xa1, 0x31, 0x02, 0xfc, 0xe8, 0xc5, 0xfe, 0xef, 0x81, 0xf2, 0x41, 0x58, 0x65, 0xfc, 0x98, 0xd9, 0xfc, 0xae, 0xab, 0x9d, 0x13, 0x06, 0xbf, 0x59, 0x7f, 0x43, 0x7e, 0xf2, 0x63, 0x56, 0xf7, 0x87, 0x74, 0x3b, 0xe4, 0x1c, 0xff, 0x7a, 0xdd, 0x4c, 0xab, 0x9a, 0xb8, 0xa2, 0x95, 0xfd, 0x90, 0x56, 0xda, 0x6b, 0x84, 0xe6, 0x07, 0xb5, 0x81, 0x3a, 0x40, 0x1e, 0xd0, 0x3d, 0xa0, 0x25, 0x20, 0x37, 0xa8, 0xb9, 0xad, 0xce, 0xbf, 0xb0, 0x46, 0x2c, 0x08, 0x0e, 0xb8, 0xdd, 0x7c, 0x56, 0x38, 0x34, 0x59, 0x7b, 0x96, 0x42, 0x2d, 0xa2, 0xaa, 0x23, 0xd2, 0x13, 0xed, 0x0e, 0x52, 0xc5, 0x05, 0xbb, 0x6c, 0x26, 0x31, 0xd8, 0x19, 0x9c, 0x54, 0x43, 0xc1, 0x02, 0x61, 0x68, 0x79, 0x57, 0xb0, 0x67, 0x70, 0xe8, 0x52, 0x98, 0x17, 0x52, 0x42, 0x89, 0x06, 0x9f, 0x6f, 0x11, 0xb2, 0xe1, 0x4e, 0xe2, 0x86, 0x24, 0x8f, 0x37, 0xd1, 0x0d, 0xe1, 0x5a, 0xac, 0x1b, 0xac, 0xde, 0xbe, 0xae, 0xe0, 0x4c, 0xe1, 0xe1, 0x0b, 0xdd, 0x19, 0x14, 0x28, 0xe5, 0x9a, 0xfc, 0x10, 0x9f, 0xa6, 0xe3, 0x4b, 0xde, 0x5d, 0x74, 0x4f, 0x34, 0x9f, 0x16, 0x4b, 0x44, 0xda, 0xd9, 0xcb, 0x99, 0xeb, 0x45, 0xcb, 0x74, 0x77, 0xa3, 0x9d, 0x12, 0xd8, 0x1a, 0x7e, 0x85, 0xad, 0x31, 0x53, 0xe8, 0xf2, 0xd0, 0x65, 0x1e, 0x09, 0x68, 0x08, 0x9e, 0xb5, 0x26, 0xbe, 0x47, 0x9d, 0x4e, 0x96, 0xf9, 0x97, 0xa6, 0x84, 0xae, 0x8f, 0xc4, 0xa2, 0x74, 0x42, 0x2b, 0xd8, 0xcf, 0x20, 0x20, 0xda, 0x2a, 0x42, 0x19, 0x5a, 0x13, 0x0c, 0xd2, 0x39, 0xb6, 0x46, 0x75, 0xf2, 0x0b, 0x5d, 0x5a, 0x9d, 0x3d, 0x1b, 0x8c, 0x32, 0x90, 0x07, 0x5d, 0xaf, 0x3d, 0xa0, 0xce, 0xb1, 0x75, 0x77, 0x93, 0x72, 0xcd, 0xdd, 0xd7, 0xd7, 0xad, 0x9f, 0xf9, 0xa3, 0x0b, 0xec, 0xd1, 0x8f, 0xa2, 0x97, 0x22, 0x32, 0x24, 0x6a, 0xb9, 0x93, 0xee, 0x84, 0x67, 0x91, 0xae, 0x18, 0x9e, 0x56, 0xd1, 0x0d, 0xfa, 0xf9, 0x31, 0x93, 0xe8, 0x19, 0xec, 0x0d, 0xaf, 0x43, 0x5c, 0x82, 0x3b, 0x5d, 0xac, 0xb7, 0xaf, 0x2f, 0x3a, 0x79, 0x36, 0x50, 0x29, 0xfd, 0x92, 0x62, 0x29, 0xfa, 0x31, 0xba, 0x63, 0xb0, 0xcb, 0xaa, 0xf1, 0xc1, 0x3d, 0x4e, 0xeb, 0x72, 0x65, 0xa1, 0xb7, 0x2f, 0x36, 0x50, 0xac, 0x1f, 0xd8, 0xe3, 0x76, 0xd1, 0x61, 0x38, 0xa2, 0x8c, 0xac, 0xc1, 0xa7, 0xe5, 0x30, 0x24, 0xc4, 0xf7, 0xa9, 0x01, 0x7f, 0xa0, 0xb5, 0xe9, 0xa9, 0xa3, 0x3d, 0x08, 0x4b, 0x02, 0x63, 0x1b, 0x63, 0x83, 0xa5, 0x4d, 0x92, 0x42, 0xa3, 0x9a, 0xc5, 0x9c, 0x1f, 0x33, 0x17, 0x5a, 0x39, 0x29, 0xf5, 0x2c, 0x14, 0x57, 0x62, 0x3a, 0x89, 0x2b, 0x00, 0x9d, 0xc4, 0x95, 0x68, 0x4e, 0xa2, 0xb8, 0x58, 0xbb, 0x14, 0xaa, 0x49, 0x03, 0x47, 0x14, 0x27, 0x41, 0x24, 0x8a, 0x85, 0x69, 0xf2, 0xa8, 0x5f, 0xe2, 0xb0, 0x5d, 0xb5, 0xd6, 0x8a, 0x49, 0x20, 0x36, 0xa0, 0xe7, 0xc0, 0x95, 0x28, 0xb7, 0x55, 0x6b, 0x8a, 0x84, 0x57, 0x25, 0x1c, 0x4c, 0xff, 0x57, 0xe4, 0xa6, 0x29, 0xcc, 0xa6, 0x29, 0xcc, 0xa6, 0x29, 0xcc, 0xa6, 0x29, 0xcc, 0xa6, 0x29, 0xcc, 0xa6, 0x29, 0xcc, 0xa6, 0x29, 0xcc, 0xa6, 0x29, 0xcc, 0xa6, 0x29, 0xcc, 0xa6, 0x29, 0xcc, 0xa6, 0x29, 0xcc, 0xa6, 0x29, 0xcc, 0xa6, 0x29, 0xcc, 0xa6, 0x29, 0xcc, 0xa6, 0xff, 0x07, 0xcc, 0xa6, 0x3a, 0x12, 0x7e, 0xea, 0x56, 0xc4, 0x94, 0x81, 0xc4, 0x48, 0x36, 0x40, 0x2a, 0x53, 0x06, 0x2f, 0xb2, 0x80, 0x81, 0x6b, 0x32, 0xe9, 0xd2, 0xd8, 0xa4, 0x08, 0x8a, 0x9e, 0x4b, 0xea, 0x8a, 0x3e, 0x96, 0x44, 0xd1, 0xe0, 0x89, 0xc9, 0x0a, 0xbc, 0xe4, 0x02, 0x30, 0x73, 0xe6, 0x4c, 0xb2, 0x68, 0x35, 0x5a, 0xfe, 0x90, 0xa6, 0xf6, 0xe2, 0x6c, 0xa4, 0x63, 0x48, 0x26, 0xd3, 0x55, 0x62, 0xf5, 0xaf, 0xc2, 0x8e, 0xba, 0xeb, 0xca, 0xb8, 0xbf, 0x75, 0xd4, 0x75, 0x24, 0xf8, 0x50, 0x29, 0xee, 0xc2, 0xa6, 0x03, 0x3b, 0x0f, 0x04, 0xa5, 0x7f, 0xd4, 0x04, 0x67, 0xf1, 0x20, 0xb6, 0xfc, 0x96, 0xfc, 0x21, 0x2b, 0xff, 0x15, 0xce, 0x34, 0x09, 0x37, 0x0b, 0x1e, 0x54, 0x52, 0x51, 0x1f, 0x4c, 0x48, 0x83, 0xe2, 0xfb, 0x6d, 0x6d, 0x3f, 0xd0, 0xd5, 0x0d, 0x09, 0x11, 0x31, 0xb1, 0x05, 0x36, 0x29, 0xc7, 0x14, 0x01, 0x95, 0x15, 0x4e, 0xf9, 0x83, 0x7c, 0xde, 0x2a, 0x96, 0xd0, 0xca, 0x68, 0xbc, 0x9f, 0x41, 0x14, 0x4d, 0x4a, 0xb8, 0x55, 0x7a, 0x03, 0x0e, 0xea, 0xe2, 0x05, 0xa6, 0xab, 0x2f, 0xa8, 0xab, 0x04, 0x23, 0xa4, 0x41, 0x42, 0x3c, 0x93, 0x9e, 0x95, 0x36, 0xa4, 0x58, 0x69, 0x40, 0x4c, 0xc2, 0x5f, 0x57, 0x6f, 0xc9, 0xef, 0xee, 0xb2, 0x82, 0x0a, 0xe7, 0x0b, 0x5f, 0x83, 0xa8, 0xd3, 0x7f, 0xc2, 0xe7, 0x17, 0x8d, 0xfa, 0x4f, 0x34, 0x2e, 0x12, 0xde, 0x06, 0x51, 0xdf, 0x2c, 0xda, 0x9b, 0x45, 0x9d, 0x1a, 0x8a, 0x5c, 0x33, 0x16, 0x44, 0x55, 0xa3, 0xdd, 0x91, 0x1f, 0xbb, 0xa3, 0xb0, 0xda, 0x34, 0xb0, 0x72, 0xb9, 0x07, 0xa3, 0xcb, 0xd6, 0xdd, 0xbb, 0xdc, 0xdb, 0x1f, 0xa1, 0x5a, 0xeb, 0x22, 0x9e, 0x3f, 0x12, 0xe6, 0x16, 0x27, 0x86, 0xa3, 0xcc, 0x56, 0xd6, 0x3d, 0xc4, 0x5c, 0x6f, 0x2b, 0xab, 0x44, 0x6b, 0xe8, 0x10, 0x17, 0xdb, 0xef, 0xa2, 0x7f, 0xba, 0x4c, 0xda, 0x1b, 0xf9, 0x14, 0xd9, 0xa4, 0x2b, 0x24, 0x59, 0x65, 0x13, 0xbe, 0x66, 0xd6, 0xdb, 0xa4, 0xa8, 0xf7, 0x78, 0x5c, 0xac, 0x8a, 0xc4, 0x34, 0x88, 0x63, 0x03, 0xa4, 0x39, 0xb0, 0x99, 0x44, 0x83, 0x47, 0xf8, 0x5b, 0x55, 0x6b, 0xb1, 0xe6, 0xa6, 0x3b, 0x71, 0xdd, 0x40, 0xb5, 0x49, 0x70, 0x0d, 0x54, 0xb3, 0xce, 0xca, 0x7f, 0x45, 0x64, 0xe0, 0xf9, 0x52, 0xc2, 0x25, 0xe6, 0x10, 0x0a, 0xe7, 0xaf, 0x4f, 0x71, 0x50, 0x93, 0x1d, 0xb3, 0xdb, 0xd5, 0x57, 0xcd, 0x56, 0x2c, 0x74, 0x89, 0xd8, 0xdb, 0xe9, 0x90, 0x1c, 0x25, 0xc0, 0x36, 0xdf, 0x25, 0xb6, 0xa5, 0x09, 0x5b, 0x33, 0xaf, 0xae, 0xaa, 0x4b, 0xe6, 0xab, 0x89, 0x16, 0xdc, 0xa6, 0x06, 0x6a, 0x14, 0xad, 0x29, 0xd8, 0x1d, 0x45, 0x6c, 0xbe, 0x06, 0x2d, 0xd1, 0x22, 0x68, 0xb4, 0x7e, 0xd6, 0x26, 0xc7, 0xd4, 0xe5, 0x08, 0xc5, 0x1a, 0xfd, 0x97, 0xae, 0x52, 0x30, 0x5b, 0x0a, 0x4d, 0x3e, 0xbf, 0x96, 0x68, 0x2f, 0x38, 0xf9, 0x1a, 0xfc, 0x0d, 0xed, 0xa6, 0xc6, 0x45, 0x30, 0x36, 0xf6, 0xf5, 0xaf, 0x88, 0x74, 0xc1, 0x87, 0xb7, 0x01, 0x36, 0x6f, 0xb0, 0xbf, 0x27, 0x42, 0xfe, 0xeb, 0x9b, 0x61, 0xab, 0x8f, 0xc4, 0xa8, 0x34, 0xb0, 0x36, 0x78, 0x60, 0x6d, 0xe8, 0xd5, 0x6d, 0x7e, 0x72, 0xf4, 0xaf, 0xea, 0x5b, 0xa7, 0x35, 0xfb, 0x16, 0x6b, 0xf4, 0x7f, 0xb2, 0x31, 0x16, 0x1c, 0x07, 0x63, 0xa6, 0xf6, 0xa4, 0x53, 0x6a, 0x4f, 0x88, 0xf4, 0x86, 0xfa, 0x4c, 0xbe, 0xa4, 0x13, 0xad, 0xd2, 0x24, 0xc4, 0x92, 0xce, 0x26, 0x16, 0xe9, 0x52, 0x9e, 0xee, 0x88, 0x31, 0xda, 0x39, 0xb6, 0x6b, 0xa6, 0xba, 0x36, 0x6d, 0x48, 0xff, 0x69, 0xeb, 0xf5, 0x1f, 0xc2, 0x72, 0x47, 0x59, 0x02, 0xa1, 0xa9, 0x98, 0x15, 0x7c, 0x35, 0x09, 0x3f, 0x56, 0x5e, 0x91, 0x22, 0xd4, 0x42, 0xb1, 0x9a, 0x84, 0x7f, 0x53, 0x63, 0x4a, 0x24, 0x28, 0x26, 0x86, 0x0a, 0x05, 0xe5, 0xc1, 0x91, 0xe0, 0x9b, 0x7c, 0xae, 0x54, 0x3f, 0xb4, 0xd0, 0xa8, 0xb3, 0x8b, 0x97, 0xf9, 0x5a, 0x7a, 0x85, 0x2f, 0xcc, 0xaa, 0x5d, 0x97, 0xfb, 0x6a, 0xbd, 0xc2, 0x97, 0xbe, 0x81, 0x4b, 0xf5, 0xb5, 0x34, 0x25, 0xc5, 0x15, 0x2b, 0xe0, 0x71, 0x5d, 0x3f, 0x76, 0x06, 0x2a, 0x55, 0xd8, 0x31, 0x86, 0x27, 0xbd, 0xa6, 0x24, 0xbb, 0x0e, 0xbf, 0xa4, 0x67, 0x4e, 0x9c, 0x39, 0x97, 0x78, 0x4f, 0x49, 0xbf, 0x5b, 0xff, 0x25, 0x83, 0x70, 0x4e, 0x92, 0xdc, 0xd4, 0x60, 0xbe, 0xba, 0xc9, 0x60, 0x31, 0xfd, 0x97, 0xc8, 0x7f, 0x67, 0x7f, 0x7f, 0xe7, 0x7a, 0x4b, 0x92, 0xab, 0xa6, 0x19, 0x8a, 0xaa, 0xf0, 0xf2, 0xb2, 0xbb, 0xff, 0x4c, 0x24, 0xb1, 0x95, 0x91, 0x88, 0xf6, 0xd7, 0xc4, 0xb2, 0xb8, 0x5d, 0x73, 0xe8, 0x3f, 0x04, 0x46, 0x8b, 0x0e, 0x68, 0xe8, 0xeb, 0x26, 0x7f, 0x2b, 0x35, 0x38, 0xf5, 0x1b, 0x52, 0xe0, 0x76, 0x5e, 0x39, 0x68, 0x35, 0x0b, 0x8c, 0xac, 0x29, 0xae, 0x26, 0x26, 0xfd, 0xeb, 0x3b, 0xfa, 0xa8, 0xef, 0xea, 0xa1, 0x92, 0x43, 0x56, 0xb3, 0xc0, 0xa8, 0x87, 0x82, 0x49, 0x0f, 0x55, 0x7f, 0xf5, 0x50, 0xfa, 0x78, 0xd6, 0x2c, 0x30, 0xe8, 0x61, 0x60, 0xd2, 0xc3, 0xb4, 0x27, 0xc2, 0x50, 0x37, 0x86, 0x1f, 0xb2, 0xd3, 0x8c, 0x63, 0xd5, 0x7c, 0x7a, 0x25, 0xac, 0xb7, 0x62, 0x5c, 0xa3, 0x2d, 0x3a, 0x23, 0x03, 0x85, 0xa6, 0xa6, 0x06, 0xdd, 0x5d, 0x83, 0x2c, 0x1d, 0xc5, 0x6c, 0x54, 0xd7, 0x96, 0x5c, 0x07, 0xbb, 0x12, 0xb3, 0xb8, 0x49, 0x34, 0xb6, 0x89, 0x46, 0x56, 0xaa, 0x24, 0x39, 0x3e, 0x17, 0xff, 0x0b, 0x7e, 0x82, 0x81, 0x39, 0xca, 0x51, 0xd2, 0x01, 0xf6, 0x52, 0xb1, 0x94, 0x7a, 0x44, 0x0a, 0xbb, 0x8c, 0xd8, 0xad, 0xa2, 0x95, 0x5a, 0x3d, 0x85, 0x5d, 0x09, 0xf6, 0x52, 0x97, 0x58, 0x8a, 0x00, 0xad, 0xc2, 0x57, 0x27, 0xea, 0xa8, 0x7d, 0x55, 0x23, 0x28, 0x2d, 0x38, 0x0f, 0x2b, 0x75, 0xd6, 0xa2, 0x03, 0x73, 0xb6, 0xa0, 0x04, 0xe8, 0xba, 0x01, 0x9f, 0x5b, 0xd4, 0xf9, 0xdd, 0xcd, 0xcd, 0x57, 0xf8, 0xa5, 0x38, 0xc9, 0xa3, 0xf6, 0x3f, 0xec, 0xbd, 0x7f, 0x7c, 0x54, 0xd5, 0xb5, 0x28, 0xbe, 0xe6, 0xcc, 0x30, 0x0c, 0xc3, 0x10, 0x87, 0x38, 0xa6, 0x63, 0x9a, 0xe2, 0xe1, 0x78, 0x18, 0x87, 0xc9, 0x90, 0x89, 0x29, 0xa5, 0x69, 0x6e, 0x2e, 0x4e, 0x26, 0x3f, 0x48, 0x86, 0x30, 0xc6, 0x09, 0xda, 0xe8, 0xe5, 0xea, 0x21, 0x24, 0x33, 0x01, 0x42, 0x32, 0x1d, 0x42, 0x1a, 0xf9, 0xe4, 0xd9, 0x49, 0x88, 0x1a, 0x91, 0x0a, 0x02, 0x72, 0xad, 0xd7, 0xdb, 0xe7, 0xeb, 0xf3, 0xb5, 0xd4, 0x5a, 0xa5, 0x5c, 0xa4, 0x5e, 0x9e, 0xb7, 0x37, 0x22, 0xd7, 0x47, 0xa9, 0xf5, 0x21, 0x22, 0xf5, 0x72, 0xf9, 0xaa, 0xd7, 0x87, 0x8a, 0x88, 0x4a, 0x29, 0xb5, 0x80, 0x21, 0xe7, 0xbb, 0xd6, 0xda, 0x67, 0x7e, 0x24, 0xa0, 0xd5, 0xf7, 0xed, 0xf7, 0xbf, 0x1b, 0x38, 0x73, 0xf6, 0xd9, 0xbf, 0xf7, 0xda, 0x7b, 0xaf, 0xbd, 0xd6, 0xda, 0x6b, 0xaf, 0x6d, 0x87, 0x9b, 0x16, 0x43, 0xba, 0xf7, 0x00, 0x57, 0xbb, 0x1e, 0x61, 0xd2, 0xa5, 0xaa, 0xa6, 0xa4, 0x04, 0x9b, 0x78, 0xc3, 0x0d, 0x6c, 0xbb, 0x40, 0xc6, 0xb6, 0x13, 0x19, 0x43, 0x0d, 0xb7, 0xe3, 0xb2, 0xd7, 0xd9, 0x6e, 0xac, 0x80, 0x75, 0x48, 0xfa, 0x46, 0xdb, 0x09, 0x17, 0x74, 0xf5, 0x08, 0x59, 0x3c, 0xd4, 0xb1, 0xe8, 0x3c, 0xbd, 0xd5, 0x10, 0xc9, 0x6c, 0x61, 0x11, 0x50, 0x68, 0x89, 0xa5, 0xb7, 0x41, 0x27, 0x30, 0x9f, 0x9a, 0x3d, 0x13, 0x4f, 0x0d, 0x28, 0xeb, 0x44, 0xb4, 0x40, 0xcb, 0x16, 0x2c, 0x33, 0x36, 0x30, 0x28, 0x38, 0x5d, 0x84, 0x4c, 0xab, 0x9a, 0xcc, 0xb1, 0x64, 0x51, 0x5a, 0x67, 0xfb, 0x52, 0x92, 0x41, 0x5d, 0x3e, 0x8b, 0x71, 0x49, 0x5b, 0x11, 0x79, 0x75, 0xc9, 0x39, 0xbb, 0x06, 0x1c, 0x9c, 0x4c, 0x07, 0xd3, 0x81, 0xfc, 0xaa, 0x9b, 0x17, 0xdf, 0xd8, 0x10, 0x69, 0x58, 0x3c, 0x3e, 0x64, 0xe6, 0x25, 0x41, 0x99, 0x3c, 0x89, 0x85, 0x1c, 0xb7, 0x0f, 0x81, 0x89, 0xd6, 0x74, 0x1a, 0x4d, 0xcf, 0x4a, 0xe5, 0xbc, 0xd9, 0xed, 0x09, 0xaa, 0xd9, 0x9a, 0xd9, 0x40, 0xd2, 0x9a, 0xf4, 0xee, 0xe0, 0xea, 0x71, 0xc1, 0x62, 0x0f, 0x43, 0x10, 0x19, 0x6d, 0xbc, 0x3b, 0x28, 0x64, 0x8b, 0xab, 0x39, 0x8d, 0x21, 0x45, 0xac, 0xc8, 0x6c, 0xdb, 0xac, 0xc6, 0xc1, 0x4b, 0x03, 0x7d, 0x69, 0x7a, 0x07, 0xa2, 0x6d, 0x69, 0xcf, 0x52, 0x46, 0xb3, 0xb4, 0x63, 0x46, 0x3b, 0x29, 0x8b, 0x39, 0x9c, 0x50, 0x34, 0x32, 0xe3, 0xec, 0x85, 0xb5, 0x24, 0xa9, 0x7f, 0x6f, 0xbb, 0xb1, 0xe1, 0xb3, 0xfa, 0x72, 0x71, 0x96, 0xb6, 0x22, 0x13, 0xb3, 0x86, 0x25, 0x2c, 0x4c, 0xb4, 0xaf, 0xce, 0x19, 0xeb, 0x86, 0xb4, 0x73, 0x42, 0xc9, 0xb9, 0x85, 0xa6, 0x77, 0x9f, 0x88, 0xce, 0xcb, 0x6e, 0x31, 0x31, 0x58, 0xd2, 0x4d, 0x4b, 0xd3, 0x9c, 0xec, 0x69, 0xb7, 0xdf, 0xc8, 0xc2, 0x82, 0xcb, 0x12, 0x8c, 0x62, 0xe3, 0xaf, 0xeb, 0xff, 0x82, 0x60, 0xcc, 0x66, 0xca, 0xcb, 0xb8, 0x2c, 0xbe, 0x89, 0x64, 0xc4, 0x21, 0xd9, 0x93, 0xb1, 0x80, 0x40, 0x34, 0xcd, 0xa5, 0x55, 0xb8, 0x94, 0xba, 0xfc, 0xbf, 0xad, 0x48, 0x2e, 0x23, 0x85, 0xfc, 0x7a, 0x62, 0x4d, 0x9a, 0xfd, 0x03, 0x92, 0xe3, 0x18, 0x7d, 0xca, 0x43, 0xc8, 0x18, 0xb8, 0x86, 0x21, 0x91, 0x6c, 0x05, 0xbd, 0x1d, 0x34, 0xcc, 0x89, 0xa4, 0x43, 0x64, 0xd4, 0x25, 0x46, 0x06, 0xc6, 0xbb, 0x7c, 0x72, 0x26, 0xa9, 0x00, 0x1b, 0x14, 0xc5, 0x89, 0x8a, 0x48, 0xef, 0x73, 0xa8, 0xf0, 0x2f, 0xdd, 0x94, 0x68, 0xfb, 0xaa, 0x4b, 0xb6, 0xdf, 0x66, 0x93, 0x6f, 0x77, 0x2f, 0xf7, 0x77, 0xcf, 0xea, 0xf6, 0xce, 0x18, 0x34, 0xaf, 0x11, 0xbb, 0x57, 0x13, 0x85, 0x83, 0x13, 0x76, 0x6a, 0x2e, 0xdd, 0xa8, 0xc9, 0xdd, 0x99, 0x19, 0xb7, 0x21, 0x73, 0xe9, 0x7e, 0x0c, 0x4c, 0xe0, 0xeb, 0x41, 0x70, 0xf2, 0x99, 0xcf, 0x89, 0x1c, 0x51, 0x76, 0x57, 0x24, 0xe3, 0x23, 0x6c, 0x59, 0xb5, 0xaf, 0x6e, 0x5f, 0x9a, 0x44, 0x18, 0x5f, 0x62, 0xd0, 0xca, 0x4b, 0xe1, 0xb3, 0xc7, 0x59, 0xb2, 0xba, 0xfe, 0x5b, 0xdf, 0xfa, 0xc6, 0x1c, 0xfc, 0xf9, 0xa6, 0x0c, 0x06, 0xb5, 0x96, 0xb1, 0x6a, 0x95, 0xcd, 0xa7, 0x59, 0x96, 0xe1, 0xc6, 0x9e, 0x0e, 0xe2, 0xaf, 0x91, 0x51, 0x5c, 0x8d, 0xc9, 0x5a, 0xef, 0x24, 0xcc, 0x40, 0x62, 0x25, 0x9e, 0x75, 0xdf, 0xed, 0x22, 0x20, 0x40, 0x55, 0x63, 0x53, 0x7d, 0x95, 0x3c, 0x5e, 0xb3, 0x8f, 0x3e, 0xf8, 0xfc, 0xc2, 0xf5, 0xb2, 0xb7, 0xec, 0x9b, 0x25, 0xa5, 0xdf, 0x2a, 0xc1, 0xd2, 0xca, 0x49, 0x83, 0x2f, 0xc3, 0x95, 0x93, 0xc8, 0x2a, 0xd2, 0xfe, 0xdd, 0x2f, 0xb0, 0x11, 0x9a, 0x8d, 0x84, 0x88, 0xb7, 0xb6, 0xab, 0xc7, 0x90, 0x9c, 0x57, 0x18, 0xa8, 0x39, 0x13, 0x5c, 0x21, 0x1b, 0x84, 0xbb, 0x08, 0x91, 0x0d, 0xb2, 0x3d, 0xf3, 0x65, 0x24, 0xc0, 0x16, 0x2e, 0xeb, 0x68, 0x6f, 0x5b, 0x43, 0x33, 0x9b, 0x57, 0x87, 0x2a, 0xda, 0xec, 0x15, 0x63, 0x84, 0x63, 0xce, 0x6a, 0x03, 0x9f, 0xcf, 0x27, 0x37, 0x76, 0xc7, 0xe3, 0xb4, 0xfe, 0xd1, 0xb6, 0x6a, 0x85, 0x9d, 0x68, 0xe2, 0x4b, 0xfb, 0xb9, 0x32, 0x72, 0x73, 0x63, 0xe3, 0x7c, 0xaa, 0x83, 0xc0, 0x07, 0x54, 0x8d, 0xaa, 0x0a, 0x36, 0x7f, 0x43, 0xfa, 0x83, 0x13, 0xfd, 0xb3, 0xbb, 0xdd, 0x39, 0x46, 0x49, 0xb2, 0x7b, 0x44, 0xf2, 0xa2, 0xd5, 0x71, 0x96, 0x7d, 0xdb, 0x69, 0xd3, 0xd0, 0x20, 0x47, 0x71, 0x79, 0xb3, 0x67, 0xf6, 0x8f, 0x09, 0x2d, 0xb2, 0x87, 0x60, 0xd1, 0x56, 0x2d, 0xed, 0x42, 0xd6, 0x3c, 0x99, 0xf1, 0x16, 0x5b, 0x0e, 0x24, 0x41, 0x69, 0xaf, 0x18, 0xb7, 0xe5, 0xbb, 0x12, 0xd9, 0xbf, 0x55, 0xc4, 0xb7, 0x25, 0xff, 0x9a, 0x9b, 0x48, 0xdf, 0x3d, 0x4b, 0xe3, 0xe3, 0xbe, 0xd3, 0xb2, 0x3b, 0x63, 0x05, 0xee, 0x63, 0x43, 0x2e, 0x18, 0x29, 0x2b, 0xd4, 0xcb, 0x22, 0x1a, 0x0a, 0x9f, 0xf9, 0xd7, 0xd9, 0x68, 0x58, 0x1f, 0x42, 0x4d, 0x46, 0xbf, 0x45, 0xd6, 0x70, 0x37, 0x11, 0x43, 0x83, 0xfc, 0x21, 0xc8, 0xc5, 0xac, 0x0a, 0x62, 0x04, 0x36, 0xb6, 0x77, 0x91, 0x67, 0xda, 0xf4, 0x4b, 0xd6, 0xe0, 0x4b, 0x5a, 0x18, 0x99, 0x59, 0x96, 0x56, 0xb1, 0x6a, 0xe7, 0x6a, 0x63, 0x53, 0x25, 0x6d, 0x04, 0x46, 0x66, 0x91, 0x7f, 0x05, 0x14, 0xcb, 0x4c, 0x55, 0xcc, 0x15, 0x2b, 0x69, 0x9f, 0x3c, 0xeb, 0xeb, 0xe8, 0xa2, 0xe1, 0x43, 0xc7, 0x72, 0x10, 0xf8, 0x7e, 0x43, 0xa0, 0x39, 0x1e, 0xb1, 0x13, 0x56, 0x37, 0x82, 0x33, 0xdf, 0x76, 0x63, 0xef, 0x0a, 0x7b, 0x06, 0x6b, 0x54, 0xdd, 0x81, 0x60, 0x33, 0x96, 0xc3, 0x2e, 0x84, 0xff, 0x84, 0xd4, 0xb3, 0xc1, 0xde, 0x94, 0x44, 0xac, 0x47, 0x5b, 0xbe, 0x5f, 0x28, 0xf6, 0x78, 0x56, 0x78, 0x3c, 0x8b, 0x0b, 0xf6, 0x39, 0x72, 0x96, 0x57, 0x17, 0xaa, 0x19, 0xcb, 0x38, 0xc7, 0xf4, 0xfe, 0xb9, 0xf7, 0x72, 0xf1, 0x58, 0xd1, 0x23, 0x41, 0x7b, 0xdc, 0x62, 0x01, 0xc8, 0x46, 0xaa, 0xcb, 0xc9, 0x42, 0xf8, 0x22, 0xc1, 0xd0, 0x89, 0xb4, 0x21, 0xdb, 0x0f, 0xca, 0x68, 0xd9, 0xd8, 0x05, 0x47, 0x32, 0x2e, 0x13, 0xc4, 0x32, 0x72, 0xe7, 0x52, 0x04, 0x2d, 0x51, 0x27, 0x6b, 0xfc, 0xe3, 0x6a, 0x83, 0x39, 0xf5, 0x61, 0x01, 0xcc, 0xc5, 0x8b, 0x16, 0xff, 0xff, 0x24, 0x1c, 0x10, 0xd2, 0xe0, 0xc4, 0x6a, 0x21, 0x59, 0x5a, 0x96, 0x03, 0xdc, 0x74, 0x56, 0xb3, 0x8d, 0xf8, 0x44, 0x7b, 0x65, 0xc6, 0xff, 0x97, 0xa9, 0x83, 0x11, 0x8d, 0x10, 0x9e, 0xc8, 0x3f, 0x23, 0x90, 0x20, 0x48, 0x21, 0xda, 0xa4, 0xd9, 0x89, 0xe4, 0x42, 0x77, 0xa7, 0xfd, 0x4b, 0x35, 0x38, 0x33, 0xa3, 0x89, 0xec, 0xf8, 0xa2, 0xad, 0x5e, 0x84, 0x2c, 0xae, 0xd1, 0xab, 0x46, 0xbf, 0xf7, 0x7c, 0x46, 0x7b, 0x6f, 0x14, 0x90, 0x49, 0x10, 0x62, 0xe7, 0xa8, 0xab, 0x27, 0x46, 0x64, 0xcb, 0x85, 0x97, 0x4f, 0xfc, 0x25, 0x60, 0xd2, 0x3a, 0x5e, 0x48, 0x93, 0x03, 0x93, 0xae, 0x3b, 0xb3, 0x6d, 0xf8, 0x3c, 0xd0, 0xd0, 0x06, 0xc8, 0xc4, 0xc6, 0xfe, 0x99, 0x19, 0x69, 0xcf, 0x12, 0x65, 0x62, 0xdb, 0x66, 0xd6, 0x6a, 0x19, 0x70, 0xb5, 0xc9, 0xe2, 0x64, 0x5a, 0xb7, 0x21, 0x43, 0x8e, 0xdb, 0x17, 0xdd, 0x1c, 0x59, 0xf0, 0xed, 0xaa, 0xc6, 0xc6, 0x3b, 0xea, 0x6b, 0xab, 0x6a, 0x6a, 0xa3, 0x77, 0x34, 0xd4, 0x64, 0x90, 0x13, 0xd8, 0x0d, 0x12, 0x3d, 0x93, 0x7d, 0x4e, 0x10, 0x4e, 0xdd, 0x39, 0x8c, 0x48, 0x5b, 0x93, 0xdd, 0x2b, 0xdb, 0xbb, 0x32, 0xe0, 0x9e, 0x63, 0xe4, 0xcb, 0x6a, 0x3d, 0x9f, 0x13, 0xa1, 0x39, 0x47, 0x37, 0x49, 0x08, 0x50, 0xa9, 0xca, 0x09, 0x41, 0x39, 0x20, 0x12, 0x37, 0x64, 0xd3, 0x8c, 0xcc, 0xb3, 0x95, 0xaf, 0x9c, 0xb5, 0x7a, 0x3e, 0x33, 0x0c, 0x7c, 0x4c, 0x30, 0x07, 0x55, 0x02, 0x69, 0x24, 0xfd, 0xcd, 0xac, 0xd5, 0x7f, 0x2b, 0x8f, 0x23, 0xc8, 0x21, 0x63, 0xac, 0x2c, 0x97, 0x31, 0x31, 0x48, 0x4e, 0x83, 0x50, 0xc2, 0xaa, 0xf4, 0xa4, 0x49, 0x6f, 0x5a, 0x67, 0x72, 0x3f, 0xe9, 0xf4, 0x64, 0x74, 0xe9, 0xaa, 0xb4, 0x92, 0x51, 0x9a, 0xda, 0x21, 0xa5, 0x34, 0x5e, 0x88, 0x7a, 0x7a, 0x92, 0x94, 0x3c, 0xe3, 0x16, 0x0a, 0x00, 0x86, 0xf6, 0x16, 0xa5, 0xaa, 0xe9, 0x5e, 0x4d, 0xd2, 0x32, 0x68, 0xaa, 0x6e, 0x00, 0xcc, 0x08, 0x8b, 0xa4, 0x2d, 0x6b, 0x52, 0xab, 0x59, 0x49, 0x3a, 0x82, 0xb5, 0xbc, 0xa7, 0x8d, 0xa8, 0xba, 0xb1, 0x7b, 0x69, 0x5b, 0x73, 0x7b, 0x1c, 0x6e, 0xee, 0xea, 0x34, 0x5c, 0xd5, 0x0b, 0x5a, 0x6a, 0x48, 0x99, 0x0a, 0x9b, 0xd0, 0x9b, 0x39, 0xfd, 0x48, 0xcd, 0xc9, 0x1e, 0x01, 0x30, 0xc1, 0xb9, 0xdb, 0x3a, 0x0c, 0xb7, 0x9a, 0xf6, 0x4c, 0x08, 0x5b, 0x45, 0x40, 0xa7, 0x9f, 0xe9, 0x24, 0xa9, 0x1c, 0x4c, 0x16, 0xd1, 0xd9, 0x3b, 0x7f, 0xa5, 0x6a, 0x7e, 0xfb, 0x89, 0xbe, 0x2b, 0xf6, 0x0d, 0x39, 0x7f, 0xef, 0x85, 0x5b, 0x07, 0x7a, 0x46, 0x77, 0x0d, 0xc4, 0x4e, 0x35, 0xa5, 0x1a, 0xdf, 0x24, 0xfb, 0x5a, 0x37, 0x7e, 0xac, 0x9f, 0xae, 0x7f, 0xaf, 0x94, 0x6d, 0x0a, 0xcd, 0xf5, 0x41, 0xbd, 0x37, 0x2c, 0x77, 0x43, 0x69, 0x2f, 0x2c, 0xf8, 0x18, 0x8a, 0xe8, 0x4c, 0x7f, 0x57, 0xcb, 0xc2, 0x0b, 0xfa, 0x13, 0xd7, 0xf4, 0x43, 0x0d, 0x14, 0x39, 0xcd, 0x56, 0x80, 0xd2, 0x6b, 0x82, 0xf0, 0x35, 0xfc, 0xae, 0x80, 0x19, 0xd7, 0x90, 0x7d, 0xc8, 0x6b, 0xe8, 0xa6, 0xfa, 0xc0, 0xd4, 0x80, 0x2d, 0xb2, 0x2d, 0x50, 0x14, 0x80, 0xc8, 0x43, 0x72, 0x30, 0x61, 0x1e, 0x59, 0x47, 0xe7, 0xab, 0x92, 0xe6, 0x9d, 0xa9, 0x98, 0xd5, 0xf9, 0x1c, 0xd8, 0x35, 0x0b, 0xfe, 0xca, 0xd1, 0xe1, 0xe8, 0xba, 0x84, 0x6d, 0xc7, 0xba, 0xd8, 0x8e, 0xda, 0x93, 0x20, 0xf7, 0x92, 0x75, 0x4b, 0xcc, 0xbf, 0xe1, 0x82, 0x1e, 0xc6, 0x9c, 0xaa, 0xa0, 0x28, 0xdf, 0x6c, 0x35, 0x61, 0xfe, 0x55, 0x9f, 0x91, 0xff, 0x43, 0x01, 0xb2, 0xc6, 0xb5, 0xf5, 0x8b, 0xe4, 0x4f, 0xe7, 0x99, 0xfc, 0x8b, 0x02, 0xb6, 0x05, 0x5c, 0x42, 0x64, 0x4b, 0x99, 0xd4, 0x9b, 0xf7, 0xee, 0xf2, 0x5e, 0xf3, 0xde, 0x75, 0xb5, 0x0c, 0x11, 0xba, 0x45, 0xde, 0x79, 0xc6, 0xcd, 0xa7, 0xf5, 0xfd, 0x8b, 0x31, 0x57, 0x8c, 0x51, 0x50, 0x09, 0xd3, 0x30, 0x8e, 0x69, 0xef, 0xba, 0x71, 0xa1, 0x2d, 0x22, 0xf4, 0x64, 0xc3, 0x04, 0xff, 0x25, 0xc2, 0xff, 0x44, 0x8e, 0x7f, 0xda, 0x3e, 0x95, 0x5f, 0x13, 0x61, 0xef, 0x4e, 0x4c, 0xd3, 0x26, 0xfc, 0x8f, 0x4f, 0xf4, 0xef, 0x10, 0xfe, 0x6f, 0x4f, 0xf4, 0xef, 0x24, 0xff, 0xa4, 0x69, 0xef, 0xe0, 0x25, 0x25, 0x24, 0x28, 0xe4, 0xad, 0x70, 0x72, 0xf2, 0xbe, 0x01, 0x39, 0xe8, 0x3c, 0xe3, 0x05, 0xe7, 0x28, 0xd8, 0x43, 0xce, 0xa6, 0x8d, 0xb2, 0xad, 0xf1, 0xcd, 0x7e, 0x87, 0x38, 0xc1, 0x4a, 0x23, 0x82, 0xee, 0xad, 0x57, 0x16, 0xb1, 0x4d, 0xd2, 0x8f, 0xf4, 0xb7, 0xa5, 0x2a, 0x9b, 0x2d, 0x9e, 0x47, 0x36, 0x24, 0xc9, 0x02, 0x63, 0xaa, 0x8a, 0xac, 0x2c, 0xfa, 0x1a, 0x22, 0xab, 0xb3, 0x31, 0x7c, 0x0d, 0x8e, 0x14, 0x99, 0xff, 0x68, 0x2d, 0x55, 0x42, 0x07, 0x87, 0x55, 0x1b, 0x9d, 0x5d, 0x95, 0x43, 0xea, 0x14, 0x9b, 0x09, 0xcc, 0xb1, 0xbc, 0xc8, 0x77, 0xce, 0x26, 0xaa, 0x4e, 0x38, 0x61, 0xc7, 0x70, 0xeb, 0x59, 0xcd, 0x81, 0x5f, 0xa7, 0xd3, 0x5f, 0x91, 0xd5, 0x1c, 0xc3, 0x8a, 0x7e, 0x7d, 0x91, 0xd5, 0xf8, 0x7b, 0x8e, 0x7e, 0xeb, 0xdf, 0xab, 0x54, 0xbc, 0x36, 0x0f, 0xa8, 0x26, 0x35, 0x12, 0xee, 0x02, 0x39, 0x1e, 0xa1, 0x93, 0x91, 0xe2, 0x44, 0x26, 0xdb, 0x1a, 0x4a, 0xf9, 0x2a, 0xe1, 0xdc, 0xcd, 0xc7, 0xc3, 0x03, 0xb1, 0x7c, 0x76, 0x8d, 0xf0, 0x99, 0x42, 0x2b, 0xbb, 0xf7, 0xca, 0x35, 0xb2, 0x59, 0x91, 0xea, 0xd7, 0x82, 0x35, 0x30, 0x09, 0x5b, 0x11, 0x2e, 0xed, 0xbf, 0x78, 0x97, 0x3c, 0x89, 0x4f, 0xd4, 0x2d, 0x11, 0xe7, 0xc5, 0x1a, 0xdf, 0xac, 0xa9, 0x14, 0x6d, 0x04, 0xc8, 0xb6, 0x21, 0xdd, 0x3e, 0x08, 0xda, 0x6c, 0xe9, 0x16, 0x1a, 0xe1, 0xf9, 0x1c, 0x2e, 0xdc, 0x36, 0x72, 0x53, 0x4d, 0x29, 0x9c, 0xea, 0x0a, 0x65, 0x46, 0x2d, 0xeb, 0xb2, 0xb5, 0xa4, 0x11, 0x74, 0xcb, 0xe1, 0x30, 0xac, 0xe2, 0x73, 0xd9, 0xb7, 0xec, 0xaf, 0x19, 0x59, 0x99, 0xcf, 0xae, 0xc7, 0x45, 0x4d, 0xd9, 0xbd, 0x3d, 0xb2, 0x85, 0x6b, 0x37, 0x24, 0x4f, 0x1d, 0x5f, 0xbb, 0x46, 0x10, 0xbd, 0x90, 0x0b, 0x5f, 0x9c, 0x6d, 0x40, 0x35, 0x54, 0xb9, 0x8e, 0x1e, 0xd8, 0x37, 0x50, 0x37, 0xf0, 0xe2, 0xc0, 0x3d, 0x83, 0x50, 0x4d, 0xb5, 0x2d, 0x95, 0x70, 0x5e, 0x3a, 0x32, 0xf5, 0xcd, 0x49, 0xa3, 0x82, 0x34, 0x40, 0xf6, 0x33, 0xa5, 0x41, 0xfa, 0xb5, 0x0d, 0x90, 0xd5, 0x15, 0x18, 0x90, 0x53, 0x29, 0xb0, 0x0d, 0xb2, 0x7b, 0x90, 0xdd, 0x03, 0x60, 0x8b, 0x5b, 0x6c, 0xcf, 0xc3, 0x35, 0xe8, 0x4b, 0xae, 0xbd, 0x70, 0x4d, 0x1a, 0x1e, 0xd9, 0xb2, 0xb8, 0x7f, 0xbe, 0x43, 0xa5, 0x29, 0x88, 0x37, 0xb0, 0xe7, 0xae, 0x88, 0x5b, 0x20, 0x28, 0x4f, 0x47, 0xd7, 0x35, 0x98, 0x13, 0xe6, 0x33, 0x13, 0x44, 0x3d, 0x08, 0x2e, 0xa5, 0x8a, 0xe8, 0x41, 0x82, 0x4a, 0x12, 0xca, 0x10, 0x2a, 0x64, 0x3f, 0xee, 0xdb, 0x7d, 0x35, 0xcf, 0xaf, 0xcc, 0x67, 0x57, 0x10, 0xd3, 0x21, 0x2c, 0xd8, 0x5d, 0xc3, 0x90, 0xe8, 0xcb, 0x85, 0x03, 0xf5, 0x22, 0x9f, 0xf8, 0xeb, 0xc3, 0xfe, 0x72, 0xa4, 0xfb, 0x0b, 0xe1, 0x27, 0xc5, 0x1c, 0x81, 0x69, 0xd8, 0x4a, 0xbb, 0xb0, 0x42, 0x27, 0xac, 0x9b, 0x52, 0x4d, 0x6d, 0x23, 0x30, 0x95, 0xed, 0x84, 0x22, 0x1c, 0xb0, 0x5f, 0x5c, 0x18, 0xd7, 0x1c, 0xf3, 0x28, 0xb6, 0xc1, 0x07, 0xa5, 0x2a, 0xac, 0x6b, 0x91, 0xa7, 0x4b, 0x3a, 0xe3, 0x59, 0xe9, 0x78, 0x23, 0xbc, 0x25, 0xee, 0x94, 0xa7, 0x27, 0x4d, 0x84, 0x49, 0x6e, 0x6d, 0xe3, 0x33, 0xb4, 0x0e, 0xa5, 0x92, 0xf2, 0x96, 0xa7, 0x63, 0x79, 0x77, 0x35, 0xbe, 0xe9, 0xe5, 0x39, 0x80, 0x78, 0x91, 0xc6, 0xe1, 0x14, 0x15, 0x26, 0xb6, 0xa2, 0x25, 0x85, 0xad, 0x70, 0xb2, 0x6b, 0x71, 0xcd, 0xf3, 0x31, 0x6e, 0x43, 0x4b, 0x0b, 0xb7, 0x01, 0xc6, 0xb5, 0xa1, 0x46, 0xa9, 0x96, 0x45, 0x2b, 0xc8, 0x3a, 0x1e, 0x62, 0x4e, 0xd9, 0xc6, 0x16, 0xf2, 0xb6, 0xb2, 0x95, 0x10, 0x1f, 0xd7, 0x50, 0xcd, 0xd4, 0xb0, 0x30, 0xa7, 0x86, 0x79, 0x58, 0x43, 0xb2, 0x0a, 0x5c, 0x74, 0xb9, 0xfa, 0xe1, 0x92, 0x6c, 0x13, 0xed, 0x5e, 0x8a, 0x8c, 0xfa, 0x2b, 0x23, 0x4b, 0xe9, 0x24, 0xf2, 0xea, 0xfa, 0xf7, 0x4e, 0xbf, 0xa5, 0x9a, 0x64, 0x9b, 0x14, 0xc4, 0xbc, 0x4a, 0xe9, 0x7d, 0x1a, 0xd4, 0x20, 0xf6, 0x5a, 0x52, 0x0e, 0x63, 0x0c, 0x8f, 0xd3, 0x0b, 0x66, 0x2c, 0xd1, 0x1a, 0x73, 0xd9, 0x52, 0x30, 0x29, 0x2c, 0xc5, 0xd9, 0xfa, 0xe9, 0x1f, 0xdd, 0xd3, 0x83, 0x60, 0x3e, 0xdb, 0xd1, 0xf8, 0xe6, 0xe4, 0x2b, 0x70, 0xcc, 0x35, 0xcb, 0xb6, 0xe4, 0xd5, 0x6f, 0x6f, 0xc7, 0x3c, 0xbe, 0x27, 0x5f, 0x6f, 0x81, 0x10, 0x28, 0x41, 0xf4, 0xc9, 0xbf, 0xc4, 0xc7, 0xc1, 0x3e, 0x37, 0x54, 0xfd, 0xde, 0x72, 0x59, 0x58, 0x11, 0x44, 0x6e, 0x75, 0xdb, 0x4a, 0xe8, 0x24, 0xb4, 0xe8, 0xe3, 0x5b, 0x8b, 0x18, 0x3e, 0xd6, 0xcf, 0x80, 0x8f, 0x55, 0xc0, 0x27, 0xf2, 0x1d, 0x99, 0x4e, 0x12, 0x49, 0x91, 0x44, 0xe4, 0xa0, 0x36, 0x16, 0xf9, 0xce, 0xd7, 0x47, 0x83, 0x6c, 0x5b, 0x37, 0x5a, 0x62, 0xf2, 0x50, 0x68, 0x33, 0xbe, 0x3b, 0x6d, 0x19, 0x8b, 0xbb, 0x6b, 0xae, 0xfd, 0x98, 0x6c, 0xb0, 0x80, 0x25, 0x61, 0x8a, 0xac, 0xc1, 0x38, 0xd7, 0x71, 0x5d, 0x08, 0x0b, 0xf6, 0xf1, 0xef, 0x5d, 0xe9, 0xd3, 0xd0, 0x64, 0x41, 0x02, 0xd7, 0x28, 0x8b, 0xd2, 0x14, 0x7e, 0x30, 0xe6, 0x9c, 0x59, 0x0f, 0x36, 0xb2, 0x33, 0x59, 0x7d, 0x02, 0x2c, 0xf2, 0x7d, 0x98, 0x4b, 0x3d, 0xd9, 0x49, 0x01, 0x5b, 0xcb, 0xb0, 0x32, 0x1c, 0x59, 0x23, 0x4e, 0xa3, 0x7b, 0xbb, 0xa1, 0x5c, 0x58, 0xb0, 0x61, 0xcb, 0x5c, 0x85, 0x1e, 0x3f, 0xf8, 0xbc, 0x7e, 0x28, 0xf1, 0xf9, 0xa1, 0xcc, 0xef, 0x97, 0x94, 0x12, 0xbf, 0xe4, 0xf1, 0x75, 0x4a, 0x3e, 0xcd, 0xf1, 0xf7, 0xbf, 0xbd, 0x0b, 0xfa, 0x61, 0x2d, 0xf4, 0x41, 0x2f, 0x28, 0x0b, 0xfd, 0x0b, 0xb1, 0x65, 0x96, 0x1e, 0x98, 0x5b, 0x0c, 0xf9, 0x6c, 0xaf, 0xce, 0x79, 0x38, 0x25, 0x4b, 0xd4, 0x7f, 0x96, 0xec, 0x09, 0xfe, 0x0a, 0x1c, 0x4b, 0x18, 0xa2, 0x06, 0x5f, 0x7b, 0x5e, 0x36, 0xd5, 0xa4, 0xaa, 0xfe, 0x60, 0x83, 0xea, 0x33, 0xd8, 0xbf, 0x52, 0xf6, 0xc4, 0xfd, 0xa2, 0x93, 0xa6, 0xb5, 0x81, 0xbc, 0xc8, 0x1e, 0x3d, 0x2c, 0x47, 0x94, 0x70, 0x26, 0xa5, 0xbd, 0x7e, 0x85, 0x29, 0xb4, 0xe8, 0x82, 0x3e, 0x37, 0xb2, 0x0d, 0x5d, 0x4d, 0xfc, 0x7b, 0x3b, 0xff, 0x76, 0xf2, 0xef, 0x70, 0x64, 0x5b, 0xd5, 0x49, 0xd3, 0xb6, 0x80, 0x2d, 0x50, 0x0f, 0xf5, 0xec, 0xf3, 0x38, 0x5b, 0xc8, 0x91, 0xeb, 0x57, 0x48, 0x2e, 0xfa, 0x96, 0x3a, 0x22, 0xdb, 0x10, 0x12, 0x73, 0x69, 0xed, 0xa5, 0xf3, 0xc7, 0x09, 0x50, 0xe0, 0xfd, 0xfb, 0xac, 0x84, 0x25, 0x76, 0xd6, 0x27, 0xdd, 0xb0, 0xe8, 0xc2, 0xd8, 0xeb, 0x81, 0x20, 0x59, 0xca, 0x18, 0x3b, 0x48, 0x67, 0xcd, 0xa3, 0xa9, 0x96, 0x8d, 0xc9, 0x49, 0xb8, 0x66, 0xbe, 0x8e, 0x69, 0xfb, 0x39, 0x87, 0xf5, 0x54, 0x86, 0xb4, 0x2d, 0x53, 0xd7, 0x43, 0xf8, 0xb5, 0x2f, 0xfb, 0x75, 0xed, 0x01, 0xb6, 0x6a, 0xb3, 0x52, 0x1a, 0x83, 0xf2, 0xc4, 0xd8, 0xf3, 0x4f, 0x48, 0x63, 0x02, 0x0e, 0xca, 0xc2, 0x2d, 0x23, 0xa2, 0xb7, 0xf5, 0x12, 0xc3, 0xce, 0x10, 0xc2, 0x58, 0x1a, 0x33, 0x6c, 0x9f, 0xb9, 0x67, 0x56, 0x83, 0x6f, 0x66, 0x0d, 0x94, 0xcc, 0xac, 0x85, 0xb2, 0x99, 0x75, 0x92, 0x32, 0x73, 0x81, 0xe4, 0x99, 0xb9, 0x48, 0xf2, 0x09, 0x2b, 0x43, 0xc2, 0xa2, 0x4e, 0xfa, 0x9c, 0x2f, 0xce, 0x21, 0xb7, 0xa7, 0xde, 0x4b, 0x16, 0x77, 0xd4, 0x80, 0x0f, 0x8a, 0xf0, 0x71, 0xe3, 0xe3, 0x22, 0xeb, 0x7e, 0xf8, 0x38, 0xf0, 0xb1, 0xe1, 0x63, 0x09, 0xe4, 0xf3, 0xe9, 0x64, 0xd9, 0x1b, 0x94, 0x17, 0x52, 0x5c, 0xd9, 0xd1, 0xf8, 0xa6, 0x7b, 0x1c, 0x6e, 0xa5, 0x59, 0xe4, 0x6b, 0xd8, 0xf2, 0x6b, 0xc3, 0xd6, 0xaf, 0x25, 0xb2, 0xf6, 0x61, 0x13, 0x9d, 0xf1, 0x96, 0xe0, 0xd6, 0x94, 0x23, 0x68, 0x82, 0x78, 0x9e, 0x72, 0x3d, 0x40, 0xec, 0xcc, 0xb5, 0xc3, 0x00, 0xc7, 0x87, 0x23, 0xab, 0x13, 0xa0, 0x5d, 0xc0, 0x51, 0x4a, 0x56, 0x89, 0x5d, 0x88, 0xa7, 0x2b, 0xf0, 0x29, 0x63, 0xbb, 0x7e, 0xc7, 0xd2, 0x76, 0xfd, 0xd4, 0x55, 0xe0, 0xca, 0xd8, 0xf5, 0x7b, 0x4b, 0xd8, 0xf5, 0x53, 0x8b, 0x61, 0x1e, 0x41, 0xdb, 0x56, 0x0c, 0x66, 0xc8, 0x8b, 0x83, 0x69, 0xaf, 0xbc, 0x0a, 0xdc, 0xfe, 0x0e, 0xe9, 0x0c, 0x42, 0x63, 0x2b, 0xce, 0xa8, 0x95, 0xa0, 0xcc, 0x0c, 0x42, 0x2b, 0x86, 0x6c, 0xf7, 0x63, 0xaa, 0xe2, 0x55, 0xfa, 0x71, 0xfd, 0x98, 0x77, 0x95, 0x7e, 0xa2, 0x64, 0x8e, 0x7e, 0xca, 0x3f, 0x47, 0x3f, 0xed, 0x9b, 0xa3, 0x9f, 0xf5, 0xce, 0xd1, 0xcf, 0x79, 0xe6, 0xe8, 0xa3, 0xa1, 0x2a, 0x0d, 0x60, 0x4c, 0x8e, 0xfe, 0x62, 0x34, 0xe5, 0x84, 0xfc, 0x38, 0xc0, 0xb6, 0xd6, 0xd2, 0x84, 0x79, 0xc7, 0x70, 0x3c, 0xd6, 0xee, 0x62, 0xfb, 0x63, 0x00, 0x27, 0x9c, 0x95, 0x20, 0xed, 0x18, 0x8e, 0x01, 0xbc, 0xac, 0xd5, 0x73, 0x3c, 0x67, 0x5c, 0xc4, 0x9f, 0x8e, 0x7e, 0x7b, 0x34, 0xe1, 0xbe, 0x0a, 0x63, 0x0e, 0xb5, 0xba, 0xd8, 0x7d, 0x65, 0x7c, 0x09, 0xbf, 0xc9, 0x0a, 0xe7, 0x23, 0xda, 0xed, 0xec, 0x2e, 0x88, 0x27, 0xf9, 0xfd, 0x15, 0xb2, 0x6a, 0xad, 0xf5, 0xa8, 0x2b, 0xc0, 0x82, 0x25, 0x0f, 0xc9, 0x08, 0xd9, 0xf7, 0x86, 0x5f, 0x1b, 0xd1, 0x12, 0x7e, 0xf4, 0x09, 0x57, 0xc5, 0xba, 0xd0, 0x77, 0xb4, 0x18, 0xdd, 0xfa, 0x31, 0x47, 0x15, 0x98, 0xba, 0x6e, 0xc7, 0xef, 0x33, 0x5e, 0xfc, 0xc6, 0x2f, 0xa9, 0x1b, 0xe0, 0x94, 0xd6, 0x58, 0xe2, 0xe3, 0x2f, 0x33, 0x7e, 0x1d, 0xd7, 0xe6, 0xfb, 0xc5, 0x97, 0x05, 0xbf, 0x8e, 0x69, 0xa5, 0x3e, 0xf1, 0x35, 0x09, 0xbf, 0x0e, 0x6b, 0x8a, 0x57, 0x7c, 0x59, 0xf1, 0xeb, 0x25, 0xcd, 0xe5, 0x11, 0x5f, 0x93, 0xf1, 0x6b, 0x9f, 0x66, 0x65, 0x5b, 0x4e, 0x52, 0xd3, 0x7a, 0x7a, 0xc7, 0x60, 0x6c, 0xac, 0xd4, 0x54, 0x1c, 0x61, 0x68, 0x1d, 0xd3, 0x8f, 0x17, 0x37, 0xea, 0x27, 0x8a, 0x17, 0xe8, 0xa7, 0x8a, 0xeb, 0xf4, 0xd3, 0xc5, 0xb5, 0xfa, 0xd9, 0xe2, 0x1a, 0xfd, 0x5c, 0x71, 0xb5, 0x3e, 0x2a, 0x87, 0xc2, 0x55, 0xf1, 0x79, 0xa5, 0x55, 0x1e, 0xdb, 0x91, 0xe1, 0x23, 0xeb, 0x6a, 0xff, 0x58, 0xfe, 0x96, 0x37, 0xe4, 0xb5, 0xd5, 0x0c, 0xbd, 0x8e, 0xff, 0x9a, 0xab, 0x6e, 0x5d, 0x5f, 0x75, 0xa6, 0x1e, 0x66, 0x97, 0x96, 0x03, 0xb6, 0xe3, 0xb4, 0xc4, 0x56, 0x31, 0x6b, 0x52, 0x07, 0xf1, 0x9f, 0x1c, 0x7a, 0x65, 0x64, 0xe6, 0x1c, 0x70, 0x5e, 0xbb, 0x0a, 0x1c, 0x10, 0x46, 0x1c, 0x51, 0x19, 0x5a, 0x0e, 0xf5, 0xd7, 0xd5, 0xc3, 0xbc, 0x84, 0x49, 0x93, 0x42, 0xc1, 0xc6, 0x0f, 0x97, 0x8c, 0xea, 0xbb, 0x22, 0x7f, 0x1b, 0x59, 0x93, 0x34, 0x69, 0xa0, 0x77, 0x26, 0x25, 0xfc, 0x8d, 0x25, 0xcd, 0xf8, 0xab, 0x25, 0x11, 0x4e, 0xfa, 0x6d, 0xc9, 0x49, 0xf8, 0xbb, 0x38, 0x69, 0xc5, 0xdf, 0x48, 0x72, 0x32, 0xfe, 0xd6, 0x27, 0x6d, 0xf8, 0x1b, 0x8a, 0x7c, 0xe7, 0x9f, 0xf9, 0xb4, 0x70, 0x3c, 0x6f, 0xfc, 0x4a, 0xc6, 0xd6, 0x6f, 0x8a, 0x64, 0xb6, 0xa9, 0x7e, 0x7d, 0xff, 0xf7, 0xf4, 0xd3, 0x8f, 0x84, 0x3b, 0x4e, 0x17, 0xc5, 0x94, 0xeb, 0xfb, 0x47, 0x40, 0xb8, 0xe3, 0x05, 0x69, 0xeb, 0xe3, 0x10, 0x4c, 0x01, 0x59, 0x5a, 0x3a, 0xfd, 0x48, 0x28, 0xa5, 0xa9, 0x98, 0xe6, 0x0d, 0x27, 0x84, 0xbd, 0xa7, 0x21, 0x94, 0x4a, 0x4e, 0x46, 0xba, 0x16, 0x9c, 0xce, 0xff, 0x53, 0x7f, 0xd3, 0xaf, 0xf5, 0x0b, 0x6f, 0xd5, 0x3b, 0xb0, 0x49, 0x31, 0x29, 0x04, 0x46, 0x99, 0xb8, 0x3e, 0xf2, 0xfc, 0x29, 0x43, 0x9c, 0x74, 0xee, 0xda, 0x25, 0x09, 0xd3, 0x8e, 0xf5, 0xf1, 0x42, 0x76, 0x2f, 0xde, 0xb1, 0xbe, 0xd5, 0xc9, 0xae, 0x16, 0x1e, 0x3d, 0xeb, 0xe3, 0x92, 0x62, 0x97, 0x4b, 0xcc, 0x05, 0x6a, 0x15, 0xd3, 0x53, 0x38, 0x6f, 0x04, 0x75, 0x42, 0x14, 0x9a, 0xda, 0xc0, 0x34, 0x5a, 0x5e, 0xb8, 0xa6, 0xd3, 0x06, 0x43, 0xba, 0x0e, 0xa0, 0x59, 0xa5, 0x21, 0x82, 0xde, 0xae, 0xf5, 0xb1, 0x7c, 0x07, 0xfa, 0x5c, 0xfc, 0x24, 0x66, 0x9f, 0x55, 0x6d, 0x2e, 0xf0, 0x60, 0x8e, 0x77, 0x3c, 0xe6, 0x0f, 0x91, 0x45, 0x09, 0xf0, 0xe1, 0xc4, 0xca, 0xab, 0x46, 0x88, 0x57, 0xbd, 0x8f, 0x34, 0x96, 0xb3, 0xec, 0xb9, 0xc8, 0x79, 0x79, 0x1d, 0x85, 0x5d, 0x1c, 0xe2, 0x18, 0xbd, 0x88, 0xeb, 0xf0, 0x3d, 0x76, 0x0b, 0x59, 0xe0, 0x14, 0x74, 0x5a, 0xfd, 0x7b, 0x32, 0x59, 0xbb, 0x70, 0x10, 0x94, 0x1a, 0xdf, 0x94, 0x2d, 0x91, 0x35, 0x73, 0xbf, 0x32, 0x52, 0x55, 0x57, 0xf5, 0xc2, 0xb7, 0x07, 0xbe, 0x8d, 0x98, 0x85, 0xda, 0xf3, 0x9d, 0x40, 0x5e, 0x38, 0x15, 0xb7, 0x25, 0x4d, 0x88, 0xa7, 0xa2, 0x5a, 0x23, 0x73, 0x30, 0xff, 0x83, 0xac, 0x87, 0xa0, 0xaf, 0x5b, 0x81, 0xbf, 0x1d, 0x20, 0xab, 0x8b, 0xfe, 0x9d, 0xfe, 0x20, 0xb7, 0x03, 0xd7, 0x8a, 0x70, 0x2a, 0x56, 0x88, 0x18, 0xe5, 0xb4, 0xae, 0x49, 0x29, 0x1d, 0xeb, 0xec, 0x48, 0x3d, 0x86, 0xed, 0x8a, 0x15, 0xe0, 0xbc, 0x46, 0x3f, 0xb2, 0x61, 0x24, 0x07, 0x23, 0x9b, 0xc8, 0xee, 0x15, 0xd6, 0xcc, 0x97, 0xd0, 0xc9, 0xea, 0x8b, 0x72, 0x4d, 0x20, 0x8f, 0x2c, 0x6f, 0x28, 0x5d, 0x26, 0x97, 0x6c, 0xaa, 0x7f, 0x2f, 0x35, 0x42, 0x2b, 0x5d, 0xe3, 0x9b, 0x66, 0x93, 0xff, 0x0e, 0x65, 0x36, 0x54, 0x5c, 0xdb, 0x04, 0x15, 0xf2, 0xf3, 0xe8, 0x9a, 0x8f, 0xae, 0xf9, 0xe8, 0xba, 0xa2, 0xa4, 0x49, 0x1e, 0xc0, 0x78, 0x12, 0xa5, 0x12, 0xb4, 0x5d, 0xd0, 0x14, 0xe0, 0xf5, 0x52, 0x9e, 0x96, 0xa1, 0xd3, 0x82, 0xb6, 0xaf, 0xc0, 0x24, 0x9c, 0x87, 0x56, 0xa4, 0xf9, 0x56, 0xcb, 0x57, 0x44, 0xba, 0x29, 0x1c, 0xfa, 0x65, 0x48, 0x63, 0xa4, 0x1b, 0x2a, 0x11, 0x7b, 0x63, 0xbd, 0x83, 0xef, 0x45, 0x5e, 0x23, 0x1a, 0xc8, 0xf1, 0x34, 0x5b, 0x2f, 0x90, 0x62, 0x76, 0xb2, 0x3e, 0xbb, 0xb4, 0x05, 0x57, 0xcb, 0xd7, 0x4a, 0xc8, 0xfe, 0x94, 0xcd, 0x28, 0x67, 0x6b, 0xe4, 0x82, 0x8e, 0x6b, 0x27, 0x59, 0x2b, 0xc1, 0xef, 0x35, 0x91, 0x78, 0x49, 0x90, 0x60, 0x84, 0x5c, 0xdb, 0xe1, 0xfa, 0xf7, 0xae, 0x2f, 0x63, 0x0b, 0x8d, 0x4e, 0x5c, 0x21, 0x84, 0x95, 0xe2, 0x93, 0x4d, 0x1b, 0x35, 0x30, 0x7b, 0x78, 0xbd, 0xfc, 0x97, 0x40, 0x25, 0x99, 0x45, 0xc8, 0x5a, 0x2a, 0x7b, 0x79, 0x2c, 0x90, 0x47, 0xd6, 0x33, 0x80, 0x2d, 0x5c, 0x5c, 0x3b, 0x4c, 0xd8, 0xac, 0xd5, 0x99, 0x20, 0x7a, 0x04, 0xa9, 0xb7, 0xec, 0x7a, 0xa6, 0x04, 0x85, 0x15, 0x36, 0x61, 0xb7, 0xd3, 0xff, 0x8a, 0xd6, 0x9a, 0xf8, 0xe6, 0xb5, 0x41, 0xb0, 0xa5, 0x2d, 0xe1, 0x99, 0x69, 0x8c, 0x3b, 0x13, 0x4b, 0x26, 0xa6, 0x53, 0x83, 0x1e, 0x48, 0xb8, 0x27, 0xfa, 0x7a, 0x82, 0x62, 0x7d, 0x48, 0xe3, 0x47, 0x15, 0xc2, 0xeb, 0xe2, 0x76, 0x61, 0x4b, 0x02, 0xcb, 0x50, 0xb8, 0x8c, 0x4f, 0x2f, 0xad, 0xab, 0x58, 0xcf, 0x34, 0x90, 0x5a, 0xaa, 0x4e, 0x42, 0x78, 0x56, 0x3d, 0x44, 0x43, 0x4f, 0x40, 0xa4, 0xfa, 0x24, 0x44, 0x66, 0x35, 0xe0, 0x37, 0x42, 0x6b, 0x4e, 0x11, 0xd8, 0xaf, 0xea, 0xc7, 0xd2, 0x6c, 0x21, 0x1f, 0x4c, 0x41, 0x97, 0x04, 0x57, 0xa0, 0x3f, 0xdd, 0x52, 0x91, 0x8f, 0x71, 0x2b, 0x12, 0xfa, 0xac, 0x20, 0xcc, 0xff, 0x26, 0xc5, 0xc8, 0xbb, 0x2e, 0x0c, 0x58, 0xe3, 0xeb, 0x82, 0xe0, 0xc2, 0x55, 0x3d, 0x5d, 0x37, 0xa7, 0x28, 0x4f, 0x58, 0xfb, 0xfc, 0xdf, 0x4f, 0xca, 0x2b, 0x40, 0x69, 0xda, 0x28, 0x70, 0xae, 0xbe, 0x62, 0x66, 0x08, 0x5a, 0x8d, 0x95, 0x2d, 0x6c, 0x72, 0x5d, 0xdf, 0x61, 0x92, 0x4d, 0x4a, 0x0f, 0x59, 0xa5, 0xc1, 0xba, 0x19, 0x76, 0x65, 0xa4, 0x1d, 0x83, 0xf1, 0x2e, 0x9c, 0x5d, 0x1e, 0xd1, 0x66, 0x01, 0x03, 0x6c, 0x93, 0x97, 0xda, 0x34, 0xc7, 0x33, 0xae, 0x4d, 0x5b, 0x4a, 0x2a, 0xe9, 0xe4, 0x6f, 0xa6, 0x6c, 0x5a, 0xc9, 0x1c, 0xd8, 0xb2, 0x82, 0xc4, 0x24, 0xb2, 0xb4, 0x45, 0xed, 0xf9, 0x9f, 0x95, 0x90, 0xaf, 0xd9, 0xd8, 0x65, 0x81, 0x7c, 0x6c, 0x71, 0xde, 0x78, 0xda, 0x46, 0x96, 0xb4, 0xdb, 0x12, 0x05, 0x97, 0x2d, 0xeb, 0xc6, 0x3f, 0x5f, 0x16, 0xc3, 0x87, 0x21, 0xc5, 0xb0, 0xfb, 0x2e, 0x72, 0x8b, 0x4f, 0x40, 0x1e, 0xb9, 0xbf, 0xab, 0x20, 0x75, 0x23, 0xe5, 0xd0, 0x25, 0xb7, 0x47, 0x07, 0x13, 0x4e, 0xb2, 0xfb, 0xa7, 0xbb, 0xb3, 0x76, 0x8a, 0x32, 0xae, 0x41, 0xe1, 0x0a, 0xf4, 0xe3, 0x5a, 0x62, 0xc5, 0x95, 0x9a, 0x72, 0xdb, 0x88, 0xab, 0x36, 0x7d, 0x23, 0xd9, 0x93, 0xf8, 0x1e, 0x52, 0x1c, 0x2a, 0x7f, 0x49, 0xe0, 0xa5, 0xd0, 0x97, 0x9c, 0xe0, 0xe7, 0xef, 0xab, 0xa1, 0x14, 0x47, 0x8f, 0x84, 0xd4, 0xcc, 0x5c, 0xfe, 0x76, 0x42, 0x79, 0x20, 0x82, 0x98, 0xf8, 0x69, 0x08, 0x56, 0x7d, 0x0c, 0xee, 0xc8, 0x53, 0xa3, 0x2b, 0xb0, 0x45, 0x6c, 0x5b, 0x70, 0xce, 0x63, 0x1a, 0x5c, 0x3c, 0x65, 0xd8, 0xc0, 0xa4, 0x11, 0x6b, 0x8c, 0xda, 0xe6, 0x4d, 0x62, 0xd4, 0x8a, 0x9e, 0x91, 0xbd, 0x50, 0xc2, 0x76, 0x6c, 0xfd, 0xc2, 0xee, 0xde, 0x9c, 0x11, 0x03, 0x0e, 0x36, 0x31, 0x86, 0x0c, 0x5b, 0xd7, 0x25, 0x50, 0x92, 0xc6, 0x79, 0x6c, 0xf5, 0xc5, 0xa0, 0x3e, 0x1a, 0xc9, 0x3e, 0x8d, 0x3f, 0xb2, 0x26, 0x90, 0x17, 0x25, 0xeb, 0xfc, 0x79, 0x6c, 0x0d, 0x2a, 0xaf, 0x19, 0xdd, 0x09, 0x10, 0x6e, 0x91, 0x9e, 0x70, 0x04, 0xe2, 0x9f, 0xb7, 0xc8, 0x4f, 0xee, 0xd6, 0x47, 0x03, 0x5e, 0xb0, 0x13, 0xfd, 0x59, 0xea, 0xd5, 0xc7, 0xea, 0x47, 0x3a, 0xa5, 0x9a, 0x94, 0x51, 0xfa, 0xb1, 0x8c, 0x75, 0x24, 0x07, 0xa5, 0x26, 0x8b, 0x53, 0x09, 0x57, 0x06, 0x6e, 0x75, 0x72, 0x70, 0x66, 0x3f, 0x85, 0xb3, 0x25, 0x4b, 0x3d, 0x70, 0x02, 0x6c, 0xf4, 0x2e, 0xae, 0x01, 0x07, 0x5b, 0x4a, 0x77, 0x32, 0x5e, 0xc2, 0x7c, 0x11, 0x9b, 0x2a, 0xa1, 0x60, 0xf5, 0xfb, 0x10, 0xd5, 0xa4, 0x83, 0x2d, 0xff, 0xb8, 0xbf, 0xed, 0x82, 0x61, 0xa1, 0xbc, 0x2c, 0x63, 0xa1, 0xdc, 0x9b, 0x63, 0xa1, 0xbc, 0xc8, 0xd1, 0x01, 0x73, 0x40, 0x89, 0xb9, 0xd9, 0xe6, 0xd3, 0xc8, 0xe5, 0xed, 0x94, 0x07, 0xec, 0xaa, 0x80, 0x85, 0xbd, 0x2e, 0x85, 0xb3, 0xc2, 0x13, 0x5a, 0x01, 0x51, 0xb2, 0x15, 0xa9, 0x23, 0x5e, 0xac, 0x0b, 0x7e, 0x23, 0x08, 0x51, 0x95, 0xad, 0xae, 0x21, 0xd5, 0xd3, 0x0d, 0x7e, 0x11, 0x97, 0xc3, 0x87, 0xd9, 0x96, 0x64, 0x21, 0xae, 0xdc, 0x3e, 0x5c, 0xcb, 0x4b, 0x70, 0x75, 0x2f, 0xf3, 0xfb, 0x90, 0x62, 0xf6, 0x49, 0x1e, 0xef, 0x0a, 0xa2, 0x98, 0x7f, 0xf0, 0x52, 0x96, 0x62, 0x26, 0xcc, 0x2c, 0x6f, 0xea, 0x01, 0x4d, 0x5a, 0x32, 0x98, 0xd0, 0x77, 0x3c, 0x1c, 0x3b, 0x77, 0xcb, 0x60, 0x72, 0x74, 0xdf, 0x40, 0xe8, 0x27, 0x64, 0xeb, 0x89, 0xac, 0x16, 0x92, 0x25, 0xf3, 0xa9, 0x4a, 0x60, 0x2a, 0xf5, 0xcf, 0xaf, 0xc8, 0x06, 0x8f, 0x8b, 0x6c, 0x14, 0x99, 0x0b, 0xe5, 0xe0, 0x2b, 0x7b, 0xaf, 0xdd, 0x4f, 0xa5, 0x56, 0x73, 0x1e, 0x0f, 0x1d, 0xf0, 0xd7, 0x13, 0xa7, 0xb1, 0xf1, 0x44, 0xba, 0xe7, 0x44, 0x8f, 0x4f, 0xef, 0x87, 0x29, 0x60, 0x9b, 0xde, 0xaf, 0x3f, 0x0a, 0x53, 0x66, 0x12, 0x16, 0xeb, 0x02, 0x3b, 0xbf, 0x93, 0xe0, 0xbe, 0xbe, 0x1f, 0xe1, 0xe0, 0x0a, 0x75, 0x40, 0xc1, 0xf5, 0x34, 0xe7, 0xe5, 0xeb, 0x43, 0xe0, 0xbc, 0xbe, 0x7f, 0x2a, 0x8e, 0x6e, 0x4c, 0x65, 0x25, 0x8b, 0xf3, 0xa6, 0xd0, 0xcc, 0x06, 0x53, 0x38, 0xb4, 0xdd, 0x54, 0x57, 0x7b, 0xc2, 0x54, 0x87, 0xf3, 0x3a, 0x44, 0xd6, 0xe9, 0x4d, 0x11, 0x0c, 0x69, 0xc2, 0x90, 0x16, 0x0c, 0x59, 0x8c, 0x21, 0x8b, 0x31, 0xa4, 0x09, 0x43, 0x6c, 0xa6, 0x25, 0x18, 0x72, 0x3b, 0x86, 0xc4, 0x30, 0xa4, 0x15, 0x43, 0x5a, 0x31, 0xe4, 0x76, 0x0c, 0x31, 0x9b, 0x56, 0x60, 0x48, 0x27, 0x86, 0xf4, 0x60, 0x48, 0x02, 0x43, 0x12, 0x18, 0xd2, 0x89, 0x21, 0x92, 0xa9, 0x0f, 0x7d, 0xee, 0xc2, 0xd0, 0xbb, 0xa8, 0xae, 0xa6, 0x7b, 0xe4, 0xfb, 0x30, 0x74, 0xed, 0xcc, 0x30, 0x58, 0x88, 0x33, 0x99, 0x59, 0x6f, 0x5a, 0x2b, 0x5a, 0x82, 0x31, 0x86, 0x31, 0x3d, 0xf6, 0xbc, 0x69, 0x03, 0xc6, 0xd8, 0x80, 0xe9, 0x87, 0x31, 0x85, 0xc5, 0xb4, 0x15, 0x43, 0xb6, 0x61, 0xc8, 0x0f, 0x31, 0xe4, 0x11, 0x0c, 0x79, 0x04, 0x43, 0xb6, 0x61, 0x88, 0xc9, 0xf4, 0x23, 0x0c, 0x79, 0x1c, 0x43, 0x9e, 0xc4, 0x90, 0xed, 0x18, 0xb2, 0x1d, 0x43, 0x1e, 0xaf, 0x3e, 0x21, 0xb9, 0x66, 0x36, 0x48, 0x45, 0xa1, 0xed, 0x92, 0xbb, 0xf6, 0x84, 0xe4, 0x9e, 0x19, 0x96, 0x5c, 0x18, 0x3b, 0xcf, 0xb4, 0xa3, 0xea, 0x84, 0xd4, 0x31, 0x01, 0x83, 0xa4, 0x4b, 0xde, 0x23, 0x38, 0x05, 0xd5, 0x44, 0x76, 0xca, 0x4c, 0x3b, 0x0f, 0x0f, 0x2b, 0x83, 0xa1, 0x9f, 0xea, 0xa3, 0xcc, 0x39, 0xec, 0x3e, 0x34, 0x7c, 0x6d, 0x95, 0x7e, 0xee, 0x4a, 0xc2, 0x17, 0x96, 0x68, 0x0a, 0xc7, 0xa1, 0x93, 0x79, 0x86, 0x97, 0xb1, 0xa4, 0x7e, 0x2c, 0x69, 0x08, 0x4b, 0x4a, 0x61, 0x49, 0x29, 0x2c, 0xa9, 0x1f, 0xcb, 0x58, 0x3f, 0xbe, 0x8c, 0xf4, 0x2a, 0x21, 0x6d, 0x23, 0xfe, 0x21, 0xf3, 0xb5, 0x8f, 0xbe, 0x44, 0xf9, 0xdc, 0x4f, 0x48, 0x07, 0x61, 0x5b, 0x65, 0xb2, 0xe9, 0xfa, 0xd2, 0x7e, 0x53, 0x29, 0xb6, 0x68, 0x2e, 0xb9, 0xdb, 0xce, 0x99, 0xca, 0x67, 0x32, 0x0e, 0x37, 0x55, 0x86, 0x3a, 0x4c, 0xc1, 0x00, 0x72, 0x2d, 0xe3, 0xed, 0x84, 0xa9, 0xc2, 0x4e, 0x58, 0x92, 0x66, 0x5c, 0x89, 0x58, 0xf7, 0xf4, 0xdb, 0x87, 0xc8, 0xde, 0x57, 0xdc, 0x21, 0xf2, 0x4f, 0x98, 0x66, 0x06, 0xa5, 0x31, 0x0e, 0x9f, 0xce, 0x16, 0xbb, 0x26, 0x84, 0x27, 0xa5, 0x99, 0x55, 0x46, 0x78, 0xd1, 0xb8, 0xf0, 0x19, 0x62, 0xdc, 0x53, 0x48, 0xf1, 0x73, 0x72, 0xb0, 0xbe, 0x03, 0xa6, 0xd0, 0x38, 0xfd, 0xed, 0x5b, 0xb3, 0x82, 0x52, 0x5b, 0x53, 0x8e, 0x75, 0x5c, 0xcb, 0x11, 0xb3, 0xb5, 0xea, 0x84, 0xd9, 0x3e, 0x81, 0xf7, 0xdc, 0x33, 0xfa, 0x88, 0x61, 0xa9, 0x69, 0xbb, 0x29, 0x84, 0xfd, 0x13, 0xc2, 0x55, 0x87, 0x6c, 0x76, 0x86, 0xae, 0x5d, 0x88, 0xe9, 0x16, 0x9a, 0x42, 0x22, 0xff, 0x59, 0xc8, 0x1b, 0xcd, 0x42, 0xde, 0x68, 0x16, 0xf2, 0x46, 0xb3, 0x90, 0x37, 0x9a, 0x85, 0xbc, 0xd1, 0xac, 0x46, 0xc9, 0x87, 0xb3, 0x62, 0xcf, 0xa7, 0x07, 0xb0, 0xac, 0x3e, 0x81, 0xa1, 0x90, 0x62, 0x91, 0xc8, 0x1a, 0xd2, 0x92, 0x51, 0xc6, 0x45, 0xcb, 0xc1, 0x55, 0xf5, 0x11, 0x72, 0x26, 0x34, 0x1f, 0x6c, 0x91, 0x35, 0x84, 0x2d, 0x84, 0xcc, 0xca, 0xd3, 0xa0, 0x46, 0xb0, 0xb7, 0xcc, 0x88, 0x7d, 0x67, 0x13, 0x45, 0x46, 0x14, 0x17, 0xd1, 0x67, 0xc8, 0x3b, 0xde, 0x8e, 0xab, 0x1d, 0xf1, 0xe8, 0x67, 0x84, 0x65, 0x2f, 0x41, 0xf1, 0x05, 0xec, 0xca, 0x26, 0x1a, 0x8b, 0x6a, 0x13, 0xae, 0xa4, 0x58, 0x6f, 0x31, 0xf3, 0x4b, 0x15, 0x15, 0x90, 0xe7, 0x17, 0x1c, 0xbf, 0x74, 0x70, 0x10, 0xff, 0xa5, 0x70, 0x56, 0x8e, 0xc8, 0xbd, 0xc3, 0x8b, 0x95, 0x6a, 0xca, 0x23, 0x31, 0x6d, 0xc7, 0x60, 0xbb, 0x13, 0xd7, 0x3b, 0xd3, 0x3b, 0xdb, 0xb3, 0x14, 0x6b, 0x46, 0x0e, 0xe7, 0x48, 0xd7, 0x47, 0x6d, 0xf0, 0x50, 0x7d, 0xa6, 0x5c, 0x52, 0x9f, 0x0f, 0x4c, 0x6b, 0x71, 0x95, 0x59, 0xc8, 0xf5, 0x21, 0xce, 0xba, 0x97, 0xfb, 0xc0, 0x83, 0xbc, 0x1d, 0xad, 0xc0, 0xfa, 0x1d, 0x7e, 0xb6, 0xda, 0x56, 0x5a, 0x75, 0x52, 0xbf, 0xe0, 0x0f, 0xa7, 0xdb, 0x79, 0x5d, 0x50, 0xfa, 0x24, 0x00, 0x14, 0x87, 0x63, 0xcf, 0x35, 0x30, 0xfc, 0xd4, 0x0c, 0x95, 0xe0, 0x92, 0x21, 0x4d, 0xc9, 0xca, 0x65, 0x2a, 0xb6, 0x60, 0x01, 0x8e, 0x36, 0xe6, 0x10, 0x5f, 0xc2, 0x71, 0xd7, 0xa1, 0x10, 0x05, 0x7a, 0x46, 0x66, 0x38, 0x5c, 0x7c, 0x11, 0x63, 0x5a, 0x0c, 0x3a, 0xb4, 0x4c, 0xad, 0xf7, 0x44, 0xc4, 0xed, 0x14, 0xd3, 0x43, 0x88, 0x4d, 0x1a, 0xc0, 0x7e, 0x7d, 0x15, 0xe4, 0x55, 0x9d, 0x00, 0x19, 0xd7, 0x5e, 0x67, 0x68, 0x13, 0xdd, 0x4b, 0x41, 0xf6, 0x36, 0xc9, 0xaa, 0xfc, 0x2c, 0xba, 0x9b, 0x62, 0x3d, 0x62, 0x4e, 0xf7, 0xac, 0x0e, 0xbe, 0x97, 0x82, 0xda, 0x43, 0x36, 0x81, 0xc3, 0xd9, 0xd6, 0x64, 0xf3, 0xce, 0xc0, 0xc0, 0x02, 0x36, 0xc4, 0xe6, 0x2e, 0x84, 0x76, 0x51, 0xe8, 0xa7, 0xe0, 0x46, 0xb7, 0x1b, 0xdd, 0x2e, 0x23, 0xf5, 0xf0, 0x84, 0xd4, 0xbc, 0x3e, 0xe9, 0x67, 0x31, 0x7d, 0x05, 0x52, 0xe4, 0x94, 0xde, 0xc6, 0x76, 0xe1, 0x28, 0x6e, 0x93, 0x11, 0xb7, 0x31, 0x03, 0xb7, 0xfa, 0x09, 0x70, 0xbb, 0x6b, 0x76, 0x58, 0x3a, 0xc3, 0x21, 0x2d, 0x06, 0x8c, 0x1c, 0x06, 0xd5, 0xd7, 0x3f, 0x44, 0x02, 0xa7, 0xa2, 0xaa, 0x53, 0xd2, 0x05, 0x5c, 0x7b, 0x65, 0x5c, 0x6f, 0xd5, 0x04, 0xe0, 0x8a, 0x5b, 0xe4, 0xef, 0x64, 0x9a, 0x2c, 0x18, 0xf0, 0x4b, 0x17, 0x38, 0xe5, 0xf2, 0xf1, 0x29, 0x99, 0x0e, 0x7c, 0x52, 0xba, 0x10, 0xb3, 0x26, 0x6c, 0xb3, 0x83, 0xd2, 0x05, 0x9b, 0x1f, 0x10, 0xf5, 0xc5, 0x5d, 0x84, 0xe7, 0x4b, 0xbe, 0xb7, 0xe5, 0xd7, 0x73, 0x11, 0x2b, 0xfd, 0xdd, 0x6f, 0xa8, 0x4e, 0x17, 0x3f, 0xc1, 0x71, 0x0a, 0x62, 0xe5, 0xa3, 0x3b, 0x31, 0xa8, 0x1f, 0x64, 0xe2, 0xe8, 0x0f, 0x89, 0x91, 0x28, 0xb9, 0x94, 0xd0, 0xf8, 0x91, 0x58, 0xc3, 0xb0, 0x0a, 0xd8, 0x6b, 0x71, 0xee, 0x28, 0xeb, 0xaf, 0xed, 0xc0, 0x1a, 0x5a, 0x54, 0xfc, 0x55, 0xef, 0xc3, 0x9e, 0xb0, 0xd1, 0x98, 0x24, 0x6b, 0xad, 0x50, 0x41, 0xb6, 0x42, 0x03, 0xb3, 0xc1, 0x1e, 0x98, 0xc2, 0x35, 0x7c, 0x98, 0x2c, 0xbd, 0x05, 0xf2, 0x02, 0x0d, 0xb8, 0x72, 0x73, 0x1d, 0x71, 0xc5, 0xf4, 0xff, 0xe0, 0xa5, 0xc8, 0x53, 0x9f, 0x92, 0x75, 0xef, 0x22, 0xaa, 0x45, 0x0b, 0xcb, 0x14, 0x6e, 0x98, 0xef, 0x31, 0xec, 0x27, 0x22, 0x71, 0x40, 0xf7, 0x37, 0x04, 0x71, 0x65, 0xab, 0xc1, 0x45, 0xf2, 0x06, 0x75, 0xa5, 0xc9, 0xe5, 0x5f, 0xc9, 0x2d, 0xdf, 0xe9, 0x83, 0x5d, 0x82, 0xc7, 0xde, 0x45, 0x96, 0xfe, 0x88, 0x9b, 0x87, 0x27, 0x1c, 0x3e, 0x5c, 0x2d, 0xae, 0x40, 0xd7, 0x63, 0xc8, 0x23, 0x2b, 0x4e, 0x1f, 0x7c, 0x8f, 0x25, 0xbd, 0x76, 0xe4, 0x7a, 0x53, 0xc8, 0xeb, 0x0e, 0x69, 0x65, 0xe1, 0xbb, 0xe3, 0x33, 0x14, 0x33, 0xd9, 0x57, 0x73, 0x0c, 0x90, 0x3d, 0x96, 0x98, 0x13, 0xc7, 0x48, 0x6b, 0x89, 0x17, 0xc2, 0x7e, 0x2f, 0xcc, 0x55, 0x6d, 0x7d, 0x64, 0x1b, 0x45, 0xba, 0x2a, 0x08, 0xdf, 0x9b, 0xb5, 0x00, 0x52, 0xb3, 0xea, 0x60, 0x28, 0x3c, 0x18, 0x2f, 0xc1, 0x12, 0x00, 0xbe, 0x17, 0xf3, 0x5c, 0x55, 0x03, 0x77, 0x25, 0xc0, 0x69, 0xf1, 0x06, 0xff, 0x6d, 0xc4, 0xd7, 0xf8, 0xef, 0x64, 0xfd, 0xe9, 0xa0, 0x1c, 0x42, 0xca, 0x76, 0x58, 0xfe, 0xc6, 0x7e, 0xa0, 0xd1, 0x70, 0x71, 0x93, 0xe6, 0x70, 0xfb, 0xe0, 0x2e, 0xd5, 0x4e, 0xf8, 0x19, 0x86, 0xc3, 0x77, 0xc7, 0x5c, 0x08, 0x07, 0x33, 0xb5, 0xf8, 0xe9, 0xe3, 0x64, 0x4f, 0x30, 0x66, 0xd1, 0x1a, 0x1f, 0x3a, 0x10, 0xb6, 0xdc, 0x32, 0x42, 0x77, 0x98, 0xec, 0x4b, 0xf1, 0x18, 0x1a, 0xc6, 0x38, 0x12, 0xf1, 0x6d, 0x48, 0x5d, 0x58, 0x02, 0xd6, 0xc0, 0x64, 0x91, 0xe2, 0x97, 0xc7, 0x39, 0x74, 0x90, 0x6c, 0x3a, 0x86, 0xd7, 0x75, 0xe6, 0x71, 0x09, 0xbe, 0x84, 0x89, 0xde, 0x9f, 0x9e, 0x11, 0x16, 0x95, 0x91, 0x2e, 0xbc, 0x0b, 0x9f, 0xef, 0x91, 0x4c, 0x86, 0xb0, 0x0d, 0xa6, 0xcd, 0xa3, 0x55, 0x1b, 0x71, 0x2f, 0xd9, 0x39, 0x9d, 0x1c, 0xd9, 0x33, 0xf6, 0x14, 0xa5, 0x2f, 0xb9, 0x46, 0xe0, 0x1d, 0xa2, 0x6d, 0x14, 0xa4, 0x49, 0xd8, 0xc6, 0x9c, 0xd4, 0x34, 0x2c, 0x3b, 0xe3, 0x36, 0x5b, 0x0a, 0xae, 0xc1, 0x75, 0xe2, 0x0c, 0x52, 0x65, 0xe2, 0xee, 0x90, 0x32, 0x8c, 0xe5, 0x52, 0xbb, 0xc1, 0x8d, 0x90, 0x2f, 0xaa, 0xfe, 0x18, 0x64, 0x7f, 0x37, 0x38, 0x91, 0xca, 0x3b, 0x20, 0xc6, 0x3a, 0xd1, 0x34, 0x94, 0x8f, 0x66, 0x55, 0x82, 0xd1, 0x54, 0xfe, 0xf3, 0xf9, 0xee, 0xd8, 0x27, 0x48, 0x01, 0x51, 0xae, 0x26, 0xa4, 0xe9, 0x6c, 0xb4, 0xfe, 0x97, 0xec, 0xc1, 0x78, 0xf4, 0x7e, 0x33, 0x3c, 0xd0, 0xc9, 0xb2, 0xc7, 0x92, 0xdf, 0xf2, 0x2e, 0x57, 0x29, 0xf6, 0xa8, 0xdb, 0x43, 0xd6, 0x76, 0x25, 0x29, 0xf5, 0x3d, 0x48, 0x81, 0xb0, 0xbc, 0xae, 0x26, 0xd9, 0x36, 0x66, 0x6b, 0xcb, 0xc6, 0x92, 0x14, 0xb6, 0x7e, 0x8f, 0xfe, 0xa8, 0x06, 0xb0, 0x7e, 0xc1, 0x05, 0xbd, 0xa9, 0xf6, 0x82, 0xbe, 0xc9, 0x8b, 0xd0, 0xf9, 0x1e, 0x82, 0x27, 0x1c, 0xea, 0x6c, 0xe1, 0xd8, 0x47, 0x29, 0x35, 0x76, 0x8a, 0x4e, 0xbb, 0x29, 0x46, 0x9a, 0xcd, 0x1e, 0xa6, 0xe6, 0x66, 0xed, 0x09, 0x85, 0xea, 0x43, 0x09, 0xa8, 0x83, 0x91, 0xc1, 0xdc, 0x50, 0x15, 0x44, 0xca, 0x50, 0x4d, 0x7d, 0xcd, 0x5b, 0x8d, 0x01, 0x8b, 0x11, 0x22, 0xf1, 0x1d, 0x22, 0x6e, 0x6d, 0x06, 0xf9, 0x9f, 0x6a, 0xa4, 0x19, 0xe2, 0x29, 0x0c, 0x94, 0xd6, 0xb3, 0xb5, 0xbb, 0x74, 0x5a, 0x5c, 0x43, 0x82, 0x21, 0x67, 0xe3, 0x9b, 0x8e, 0x22, 0xc2, 0xc2, 0x01, 0x49, 0x25, 0xf8, 0x10, 0x7c, 0x25, 0xc1, 0x83, 0x1c, 0xda, 0xdd, 0xb4, 0x91, 0x78, 0xf6, 0x92, 0x33, 0x48, 0x73, 0x59, 0x14, 0x1f, 0xdf, 0x9f, 0x61, 0x27, 0xab, 0xa4, 0xdc, 0x0f, 0x64, 0x67, 0x70, 0xcf, 0xd8, 0x76, 0x2a, 0xa7, 0x39, 0xa5, 0x5e, 0x43, 0x73, 0x04, 0xf1, 0xc5, 0x2e, 0xe2, 0xe0, 0x11, 0x12, 0x09, 0xcc, 0xad, 0x27, 0x60, 0xc6, 0x78, 0x9d, 0x1c, 0xbb, 0x8f, 0xef, 0xc8, 0x58, 0xab, 0x42, 0xf3, 0xa0, 0x7f, 0x85, 0xf4, 0x09, 0x61, 0xca, 0xe7, 0xc4, 0x58, 0x3f, 0x1b, 0xe8, 0x5f, 0xf7, 0x16, 0x52, 0x48, 0xee, 0x44, 0xdb, 0xc1, 0x8d, 0xb7, 0x92, 0x65, 0xe3, 0x22, 0xf6, 0xb1, 0x80, 0x8c, 0x58, 0xa1, 0xad, 0xea, 0x84, 0x7e, 0x02, 0xf1, 0x84, 0xca, 0x7e, 0x48, 0xc3, 0x53, 0xac, 0x9b, 0x28, 0x96, 0x9f, 0x7d, 0x26, 0x21, 0x15, 0x2f, 0x62, 0x9d, 0x16, 0x94, 0x3c, 0xfa, 0x4d, 0x86, 0x72, 0xc3, 0xef, 0x2c, 0xfa, 0x55, 0xb2, 0x9f, 0x8d, 0xa9, 0x7a, 0xf2, 0x3b, 0x85, 0x7e, 0x35, 0x88, 0x75, 0xea, 0xe5, 0xea, 0x6a, 0xa6, 0xf3, 0xf5, 0x23, 0x44, 0xf5, 0xc1, 0xcb, 0xe1, 0xa7, 0x61, 0x49, 0xcc, 0x46, 0x3c, 0x42, 0xc0, 0x06, 0x4b, 0x70, 0x3c, 0x2c, 0x56, 0xcc, 0x86, 0x0d, 0xc1, 0x00, 0xb4, 0xe1, 0xd3, 0x82, 0x4f, 0x82, 0x6d, 0x3e, 0x12, 0x8d, 0xf7, 0x16, 0xb5, 0xe8, 0xe2, 0x76, 0x6a, 0x11, 0xc6, 0xed, 0xc1, 0x16, 0xa9, 0x71, 0x9a, 0x1d, 0x4f, 0x43, 0x4b, 0x26, 0x97, 0x96, 0x6d, 0x08, 0x69, 0x4e, 0xaf, 0xa5, 0xd3, 0xa9, 0xd3, 0xb4, 0xc5, 0x08, 0x81, 0x33, 0xdc, 0xfa, 0x16, 0xb2, 0x3d, 0xea, 0x81, 0x78, 0x53, 0xc6, 0xfe, 0xa8, 0x44, 0x76, 0x83, 0x4b, 0xe7, 0x46, 0xb6, 0x79, 0x21, 0x60, 0x36, 0xfc, 0x4c, 0x91, 0x6d, 0xbe, 0xec, 0x97, 0x59, 0x48, 0x5d, 0xb1, 0x0f, 0x27, 0xe1, 0xbc, 0x32, 0x72, 0x0d, 0xb8, 0xb8, 0x36, 0x85, 0x54, 0x1b, 0xc2, 0x3c, 0x64, 0xc7, 0xb5, 0xa6, 0x12, 0x5d, 0x8d, 0x2c, 0x53, 0x21, 0x5b, 0xd9, 0x45, 0xd8, 0x23, 0xb2, 0x97, 0x2c, 0xba, 0x06, 0xc0, 0x5f, 0x18, 0x80, 0x62, 0xea, 0x67, 0xae, 0xd1, 0x1c, 0xbe, 0x3b, 0x66, 0xcf, 0x45, 0xba, 0x41, 0xc0, 0xb0, 0x59, 0xa9, 0xce, 0x67, 0x8b, 0x93, 0x07, 0xa8, 0x55, 0xcd, 0xc8, 0x51, 0xd0, 0xe8, 0xbd, 0xe8, 0xa6, 0xf1, 0xd2, 0x44, 0x37, 0xc7, 0x58, 0x1d, 0x93, 0xc8, 0x16, 0x79, 0xda, 0x12, 0xab, 0x7a, 0x13, 0xae, 0x8d, 0x7b, 0xc6, 0x24, 0xb6, 0xfb, 0xba, 0x0e, 0xf1, 0xd0, 0x3a, 0xc6, 0x43, 0x33, 0x70, 0x4d, 0x98, 0x1f, 0x60, 0x7b, 0x96, 0x46, 0xae, 0xb7, 0x73, 0xae, 0x3d, 0xcd, 0x29, 0x61, 0xd1, 0xd5, 0x52, 0xc9, 0xf2, 0xcd, 0xb3, 0xbc, 0x46, 0xf1, 0x9d, 0x0e, 0xf3, 0xaf, 0xd2, 0xcf, 0x16, 0xaf, 0x02, 0x8b, 0x7e, 0x8e, 0xee, 0x1d, 0xc1, 0x7e, 0xa9, 0xf3, 0x34, 0x90, 0xb4, 0x02, 0xf1, 0xbc, 0x7d, 0xc1, 0xfb, 0xfa, 0xb3, 0xc8, 0xa3, 0x76, 0x68, 0x92, 0x1c, 0x44, 0x9c, 0x60, 0x13, 0xab, 0xee, 0xf3, 0x25, 0x01, 0xba, 0xfd, 0xe0, 0xac, 0xa0, 0xe8, 0x6b, 0xff, 0xb0, 0x1d, 0x1e, 0x1a, 0x09, 0xd8, 0x11, 0x56, 0x2c, 0x83, 0xf8, 0x35, 0xf7, 0x0b, 0x53, 0x2e, 0x1f, 0x36, 0x82, 0x7e, 0x82, 0x64, 0x6a, 0x91, 0xef, 0x50, 0x99, 0x98, 0x83, 0xa4, 0x02, 0x97, 0x39, 0x63, 0x42, 0x99, 0x95, 0x3b, 0xb6, 0x43, 0x51, 0xeb, 0x3c, 0x91, 0x2f, 0xe5, 0x24, 0x38, 0x38, 0xc1, 0x21, 0x18, 0xb5, 0x29, 0xc4, 0x78, 0x05, 0x72, 0xf0, 0xf8, 0x7a, 0xcd, 0x26, 0x8f, 0x8e, 0xbc, 0xf1, 0xef, 0x3f, 0x6f, 0x1e, 0x0c, 0x0f, 0xc6, 0xce, 0x52, 0x49, 0x2a, 0xc9, 0x55, 0x57, 0xe9, 0xa7, 0x45, 0x59, 0xb7, 0x6e, 0xa4, 0x92, 0x70, 0xa4, 0xe1, 0xda, 0xf9, 0xe9, 0x29, 0x4c, 0xe5, 0xec, 0xc4, 0x74, 0xd8, 0xef, 0x45, 0x32, 0x5b, 0xf6, 0xd6, 0xc8, 0x0e, 0xb0, 0xcd, 0x36, 0x02, 0xd7, 0xa8, 0x88, 0xcd, 0xf8, 0x26, 0x17, 0xaa, 0xdf, 0xf1, 0xfa, 0xf7, 0xe6, 0x23, 0x4f, 0xad, 0x9a, 0xb8, 0x86, 0xd7, 0x4d, 0xa8, 0x21, 0xc0, 0x03, 0x46, 0x3d, 0xac, 0x0b, 0x18, 0x22, 0x9e, 0x60, 0x71, 0x97, 0xd4, 0xa1, 0x1f, 0x2f, 0x5e, 0xa8, 0x9f, 0x28, 0x0e, 0x89, 0x5b, 0x29, 0xd6, 0x9e, 0x3d, 0xfa, 0x7d, 0x2f, 0xce, 0xdf, 0x7d, 0x2f, 0xf7, 0x1f, 0x3f, 0xf6, 0x7d, 0xb2, 0x8e, 0xbf, 0xcf, 0x83, 0x75, 0x21, 0x5b, 0xbb, 0x53, 0xe5, 0x9a, 0xc8, 0x26, 0x8f, 0xb8, 0x23, 0x22, 0x0f, 0xfd, 0xac, 0x64, 0x69, 0x9a, 0x64, 0x5c, 0xf1, 0x37, 0x0c, 0x68, 0x4a, 0x0c, 0x43, 0xb3, 0x80, 0x21, 0x53, 0xb9, 0xee, 0x58, 0xe1, 0x96, 0x5f, 0xe3, 0x9a, 0x79, 0x54, 0x0e, 0x3a, 0xbc, 0x30, 0x0d, 0x6c, 0x31, 0x7b, 0x32, 0x8e, 0x14, 0xc9, 0x56, 0x4d, 0xea, 0x01, 0x1c, 0x6f, 0x1f, 0x2e, 0xe9, 0xd7, 0x47, 0x72, 0xe1, 0xcb, 0x35, 0x2f, 0xcd, 0xad, 0xb9, 0x91, 0xb7, 0x17, 0xe7, 0xae, 0x01, 0xd3, 0xe7, 0x5f, 0x22, 0x98, 0xa6, 0xa1, 0x85, 0x98, 0xb4, 0x0c, 0x47, 0x69, 0x11, 0xdd, 0x6f, 0x44, 0x23, 0x55, 0xf6, 0x41, 0x7e, 0x78, 0xb0, 0x73, 0x85, 0x07, 0xa2, 0xeb, 0x88, 0xc7, 0x7c, 0x71, 0x00, 0x5b, 0xbe, 0x5e, 0x31, 0xf3, 0x0d, 0x31, 0xd6, 0x79, 0xfd, 0xe0, 0xd4, 0xa4, 0xbf, 0xfb, 0x8d, 0x62, 0xa6, 0x5b, 0x1a, 0x75, 0x88, 0x5b, 0xcb, 0x90, 0x46, 0xd1, 0xa4, 0x2d, 0xbf, 0x26, 0x9f, 0xd3, 0xf8, 0x17, 0xb7, 0x96, 0xf6, 0x93, 0x85, 0xf2, 0x07, 0xf7, 0x93, 0xcf, 0x4b, 0xf8, 0x17, 0x47, 0x7a, 0x5b, 0x93, 0x92, 0xa0, 0x9a, 0xa5, 0xc1, 0x27, 0xf0, 0xef, 0x96, 0xbd, 0xf5, 0x83, 0xdb, 0xf6, 0xaa, 0x53, 0x0f, 0xdf, 0x77, 0x78, 0xf8, 0xf0, 0x80, 0x66, 0xef, 0x35, 0xbd, 0xf3, 0x33, 0xc5, 0xbc, 0x37, 0x15, 0x53, 0x52, 0xeb, 0x90, 0xbe, 0xca, 0xaf, 0x5b, 0xf7, 0xbf, 0x9e, 0x80, 0x19, 0xf8, 0x14, 0xf8, 0x6b, 0x68, 0x4d, 0x43, 0x57, 0x21, 0xbb, 0x06, 0xb1, 0xd5, 0x3a, 0xcd, 0xb2, 0xc6, 0x22, 0x61, 0x9b, 0x59, 0x05, 0x01, 0x1d, 0x6c, 0xe3, 0x60, 0x69, 0x88, 0x65, 0x60, 0x7b, 0xf4, 0x52, 0xa2, 0x41, 0x84, 0x45, 0x65, 0xda, 0xc7, 0x4a, 0xc7, 0x91, 0x83, 0x09, 0xba, 0xad, 0x30, 0x2f, 0x69, 0x1b, 0x19, 0x88, 0xdb, 0x95, 0x0e, 0x50, 0xe6, 0xcd, 0x06, 0xaf, 0x66, 0x99, 0xe7, 0x05, 0x05, 0xdb, 0x7b, 0x4b, 0x99, 0x39, 0x5a, 0x55, 0x57, 0xbd, 0xb7, 0x3a, 0xde, 0xd1, 0x0b, 0xf3, 0x4c, 0x54, 0x57, 0xe0, 0xf6, 0xcd, 0xe5, 0xf6, 0x3d, 0x74, 0x40, 0xf8, 0x60, 0xfb, 0x2c, 0x7d, 0xd8, 0xba, 0x3e, 0x10, 0xdf, 0xd8, 0x3a, 0x82, 0x80, 0x44, 0x10, 0x90, 0xd6, 0x21, 0xe9, 0xc0, 0xad, 0xdb, 0xba, 0x57, 0xb5, 0x1f, 0x1e, 0x3a, 0x7c, 0x9f, 0x66, 0x4b, 0x9a, 0xde, 0xf9, 0xe9, 0x8b, 0x55, 0x31, 0xe2, 0x71, 0xed, 0x32, 0x96, 0xb9, 0xae, 0x03, 0xcb, 0xb4, 0xe1, 0xaf, 0x92, 0x6e, 0x0b, 0xed, 0x93, 0x89, 0x79, 0xd1, 0x32, 0x28, 0x4b, 0x24, 0xd5, 0x21, 0xd9, 0xa7, 0x1c, 0x6c, 0x49, 0xc9, 0x7b, 0x79, 0x64, 0x5f, 0x93, 0xa6, 0xf3, 0x89, 0x5e, 0x55, 0xf3, 0x44, 0x6b, 0x3c, 0x41, 0xa4, 0x51, 0xae, 0x00, 0x5b, 0x5c, 0xdc, 0xb1, 0x04, 0x02, 0xab, 0xcc, 0xaf, 0xcc, 0xc8, 0x1f, 0x9c, 0x42, 0x42, 0x5b, 0xea, 0x03, 0x7f, 0x19, 0x44, 0xab, 0xbe, 0x51, 0x05, 0xfe, 0x98, 0x75, 0xd6, 0x42, 0x2c, 0xdd, 0xfa, 0xcb, 0x93, 0xe0, 0x8d, 0x59, 0xa3, 0x2b, 0x20, 0x4f, 0xb3, 0x20, 0xdf, 0xef, 0x17, 0x92, 0x5a, 0xf2, 0xfd, 0x36, 0xd3, 0x12, 0x35, 0xa9, 0xf1, 0x34, 0xf2, 0x9f, 0x29, 0x73, 0xf3, 0xe7, 0x97, 0x19, 0x7a, 0x02, 0xcb, 0x74, 0xe0, 0x4a, 0xe6, 0xfd, 0xe5, 0xf3, 0x71, 0x4b, 0x78, 0x20, 0x66, 0xa7, 0x92, 0x89, 0x6e, 0xd4, 0xac, 0x54, 0x3a, 0xf2, 0xf9, 0x5c, 0xbe, 0x6c, 0x37, 0x4a, 0xbd, 0x19, 0x57, 0x15, 0x82, 0x87, 0x98, 0x85, 0x1f, 0x8e, 0x1f, 0xcb, 0x01, 0xbe, 0x1d, 0xe5, 0x7f, 0xcd, 0x6b, 0xda, 0x68, 0x93, 0x90, 0x42, 0x28, 0x4c, 0xe3, 0x8b, 0xe2, 0x20, 0x8e, 0x66, 0x0c, 0xf9, 0xcd, 0x13, 0x6c, 0x85, 0x77, 0x8e, 0x7e, 0x1a, 0x31, 0xc2, 0x09, 0x1c, 0xe3, 0xa7, 0xc4, 0x18, 0x27, 0x7a, 0xda, 0xc3, 0x9c, 0x0d, 0xb6, 0x61, 0x2a, 0xb6, 0x21, 0x84, 0x54, 0xdd, 0x94, 0xfa, 0x54, 0x52, 0x3e, 0x38, 0xc0, 0xf7, 0x1c, 0x9c, 0xe6, 0x5b, 0x15, 0x88, 0xf7, 0x7d, 0x40, 0x1d, 0x38, 0xf8, 0x80, 0x1c, 0xac, 0x42, 0x1e, 0x79, 0x56, 0x13, 0xed, 0x31, 0x2a, 0xeb, 0xe5, 0xf5, 0x57, 0xf5, 0x53, 0x2a, 0xe8, 0x02, 0xd9, 0xa4, 0x7e, 0x7d, 0x34, 0x65, 0x21, 0x4b, 0xf6, 0x82, 0xa6, 0x22, 0x7a, 0x93, 0x6a, 0x4d, 0xbb, 0xd4, 0x72, 0x85, 0xa7, 0x5e, 0x8d, 0xb0, 0xfc, 0xd0, 0x41, 0xdc, 0x2d, 0x3c, 0xc2, 0xbf, 0x8f, 0x96, 0xfa, 0x4c, 0x2a, 0x52, 0x90, 0x93, 0xe2, 0x2b, 0xa4, 0xa0, 0xfe, 0xe6, 0x37, 0x82, 0x26, 0xb5, 0xc7, 0xa2, 0x45, 0x69, 0x45, 0xc2, 0x1c, 0x0e, 0x38, 0x25, 0x82, 0xfa, 0xfb, 0xc3, 0x56, 0x42, 0x4d, 0x3b, 0xab, 0xce, 0xd8, 0xc4, 0xae, 0xf3, 0x18, 0x5b, 0x6f, 0xf6, 0x5d, 0xcd, 0x52, 0x3b, 0x23, 0xee, 0x3e, 0xd9, 0x0f, 0xf9, 0x4a, 0x27, 0xe4, 0xf9, 0xc3, 0x74, 0x73, 0x5b, 0x5a, 0x32, 0xe2, 0xbb, 0x03, 0xf3, 0xdb, 0xd1, 0x2c, 0x85, 0xa5, 0xce, 0x27, 0xd2, 0x31, 0x59, 0xbe, 0x6a, 0xfd, 0x66, 0x3f, 0xd6, 0xf5, 0x11, 0xac, 0xa3, 0x85, 0xe0, 0x20, 0x4f, 0xb1, 0xcd, 0x46, 0xe2, 0x67, 0x46, 0x2c, 0xcf, 0x31, 0x1b, 0x57, 0x71, 0xdb, 0x2d, 0xcf, 0xd7, 0x0f, 0xd4, 0x3f, 0x3f, 0x32, 0x20, 0xfa, 0xba, 0x54, 0xa2, 0x1d, 0x00, 0xea, 0x41, 0x84, 0x33, 0x63, 0xa1, 0xff, 0xdd, 0xc8, 0x96, 0xab, 0xf3, 0xe9, 0xde, 0x13, 0x1d, 0xd7, 0x3d, 0xe1, 0x7b, 0xf0, 0x6c, 0xd3, 0x46, 0xd1, 0x67, 0x86, 0xdd, 0xf2, 0xef, 0x20, 0x6f, 0xda, 0xcd, 0x7c, 0x4a, 0xaf, 0xff, 0x0e, 0x83, 0x0b, 0x0b, 0xa6, 0x47, 0x0d, 0xdb, 0x1e, 0x26, 0xba, 0xba, 0xc7, 0x83, 0xa3, 0x9e, 0x6b, 0xb5, 0x82, 0xf7, 0x7b, 0xfc, 0x54, 0xd2, 0x82, 0x0f, 0x70, 0xdd, 0x6c, 0xd6, 0xac, 0xc8, 0x43, 0xbb, 0xe4, 0xa6, 0xf0, 0xa6, 0xd8, 0x27, 0xd7, 0x2d, 0x44, 0x8e, 0xfa, 0x67, 0x60, 0xa9, 0xfa, 0x00, 0xb9, 0xe8, 0x61, 0xa6, 0xe5, 0x7e, 0xa4, 0x79, 0xb9, 0x56, 0x06, 0x8d, 0xf4, 0xbf, 0x1b, 0x95, 0x20, 0xdf, 0x10, 0xb1, 0x1e, 0xe1, 0xe3, 0x42, 0xae, 0xca, 0xc5, 0xb5, 0xb1, 0x10, 0x05, 0xc6, 0xf7, 0x35, 0x38, 0x0c, 0x97, 0x24, 0xee, 0x43, 0x48, 0x8f, 0xe5, 0x72, 0xc5, 0x0b, 0x9e, 0x89, 0xb5, 0x9a, 0x8f, 0x1c, 0x87, 0x22, 0xac, 0x63, 0x43, 0x91, 0x66, 0x7b, 0x76, 0x3b, 0xb8, 0x71, 0xa6, 0x06, 0x65, 0x67, 0xec, 0x6c, 0x0f, 0xa6, 0xef, 0x21, 0xde, 0xaf, 0xde, 0xf0, 0xb7, 0x09, 0x7f, 0xf4, 0x35, 0xb3, 0x85, 0xe7, 0x5e, 0xba, 0xcf, 0x29, 0x3d, 0x87, 0x11, 0x7e, 0x65, 0x04, 0xbf, 0x09, 0xf9, 0x57, 0x78, 0x8c, 0xfc, 0xd5, 0x95, 0x98, 0x8f, 0x23, 0xbc, 0x2e, 0x3e, 0x63, 0xf7, 0x13, 0x98, 0x97, 0x5b, 0x0d, 0xca, 0xf9, 0xb1, 0xd3, 0x49, 0x89, 0xf7, 0x47, 0x5e, 0x4e, 0x88, 0xf7, 0x5e, 0xed, 0xf5, 0xf4, 0x6c, 0x30, 0xea, 0x6e, 0xf0, 0xd4, 0xc8, 0x4f, 0x35, 0x88, 0xbe, 0xf1, 0xaf, 0x30, 0xa8, 0x38, 0x92, 0x05, 0x9c, 0x55, 0x32, 0x5c, 0x32, 0xcb, 0xba, 0x5d, 0x46, 0xea, 0xcc, 0xed, 0x7d, 0x22, 0xdd, 0x4e, 0xde, 0x91, 0x15, 0x7c, 0x98, 0x7e, 0x36, 0xcb, 0x59, 0x8f, 0x8f, 0xcd, 0x63, 0xa0, 0x9c, 0x56, 0x3a, 0x93, 0x84, 0x9c, 0x71, 0x83, 0x62, 0xab, 0x19, 0xe8, 0x31, 0xef, 0x1d, 0xdc, 0x31, 0xd0, 0x26, 0x29, 0xb0, 0x69, 0x00, 0xf1, 0xbf, 0x53, 0x35, 0x79, 0x1a, 0x0a, 0x5e, 0x6f, 0x1e, 0x8c, 0x5d, 0x58, 0xf0, 0x7b, 0x37, 0xbc, 0xf6, 0xbc, 0x32, 0x15, 0x29, 0x75, 0x88, 0xad, 0x55, 0xec, 0xde, 0x85, 0x1e, 0x38, 0x7e, 0x7f, 0xcf, 0xe4, 0x7d, 0xeb, 0xde, 0xbd, 0x1f, 0x79, 0x1d, 0xb7, 0x12, 0x96, 0x17, 0x2a, 0x92, 0xfc, 0x6f, 0xcd, 0x03, 0xb1, 0x0b, 0x8a, 0x74, 0x68, 0xf0, 0xd0, 0x40, 0xc3, 0x1f, 0xdc, 0x70, 0x68, 0x3d, 0x42, 0xa0, 0x46, 0x69, 0x94, 0xab, 0x54, 0xb3, 0xb2, 0xe9, 0x5a, 0xe2, 0xa4, 0x2d, 0xcc, 0xf9, 0xd9, 0xf0, 0xd7, 0x01, 0x0e, 0xfc, 0x75, 0x82, 0x13, 0x7f, 0x5d, 0x86, 0x85, 0x72, 0x37, 0xfe, 0x16, 0x21, 0xef, 0xf0, 0x3e, 0x52, 0xa6, 0xc8, 0x97, 0x63, 0xc9, 0xfb, 0x3f, 0xb8, 0xff, 0xdf, 0x5e, 0x38, 0xb4, 0xae, 0xc7, 0x3c, 0x32, 0xa8, 0x56, 0x79, 0x1a, 0x93, 0x93, 0xf7, 0xa6, 0xde, 0x1d, 0xc6, 0xba, 0xb9, 0xbc, 0x61, 0xb9, 0x4a, 0x59, 0x98, 0x7f, 0xac, 0x79, 0x98, 0xef, 0xc3, 0xf8, 0xe4, 0x77, 0xcf, 0xbf, 0xf6, 0x3c, 0xb6, 0x66, 0x6e, 0xc1, 0xe6, 0xaf, 0xac, 0x20, 0x89, 0x39, 0xfe, 0x4a, 0x20, 0xe1, 0xaf, 0x19, 0xcc, 0xf8, 0x8b, 0x25, 0xe3, 0xef, 0x24, 0x98, 0x84, 0xbf, 0x56, 0xb0, 0xe2, 0xef, 0x64, 0x98, 0xdc, 0x74, 0x7f, 0xd3, 0xfa, 0xe6, 0x94, 0xb6, 0xbf, 0xf1, 0xcd, 0x22, 0x5e, 0x3f, 0xae, 0xaf, 0xf0, 0xd6, 0xab, 0x53, 0xb0, 0x5f, 0x11, 0x1e, 0xa4, 0x73, 0x16, 0xb3, 0xcb, 0xb6, 0xd4, 0x60, 0xd2, 0x8c, 0x6b, 0x88, 0x87, 0x6f, 0x08, 0x62, 0xeb, 0xef, 0xf3, 0x3f, 0x11, 0x38, 0xb0, 0xa4, 0xd2, 0x04, 0xa9, 0x69, 0xe3, 0xa4, 0xee, 0xce, 0xe3, 0xf7, 0x27, 0x26, 0x8f, 0x10, 0x4c, 0x70, 0xac, 0xca, 0x21, 0x05, 0xe4, 0x63, 0x04, 0x11, 0xda, 0x91, 0xf4, 0x84, 0x7e, 0x37, 0xf2, 0xda, 0x08, 0xc2, 0xa3, 0xdc, 0xb3, 0xf9, 0x3a, 0xae, 0x0f, 0xfe, 0x22, 0x24, 0xf0, 0x17, 0x21, 0x81, 0xbf, 0x08, 0x09, 0xfc, 0x45, 0x48, 0xe0, 0x2f, 0x42, 0x02, 0x7f, 0x11, 0x12, 0x38, 0x63, 0x64, 0xd2, 0x9d, 0x6b, 0x5e, 0xa7, 0xed, 0xc3, 0x79, 0xbd, 0x21, 0x3d, 0x77, 0x55, 0x9b, 0x07, 0x10, 0xee, 0x85, 0xd9, 0xdd, 0x01, 0x96, 0x77, 0x05, 0x67, 0x86, 0x20, 0xef, 0xfa, 0x6a, 0xc8, 0x17, 0x92, 0xa4, 0x60, 0x46, 0x46, 0xe3, 0x89, 0x24, 0x94, 0xf1, 0x3b, 0x09, 0xf1, 0x50, 0x42, 0xc7, 0x31, 0xb8, 0xdb, 0x01, 0xba, 0x1e, 0xf7, 0x21, 0x2f, 0x98, 0x77, 0x95, 0x90, 0x5f, 0x9c, 0x04, 0xd7, 0x2c, 0x92, 0x5f, 0xe0, 0xb8, 0x45, 0xb7, 0x9b, 0x24, 0x21, 0xc8, 0xd9, 0x5e, 0x31, 0x0b, 0xb9, 0x68, 0xa4, 0x06, 0x1c, 0x4a, 0x38, 0xa1, 0x30, 0x2e, 0x2c, 0x79, 0xe8, 0x00, 0x63, 0x71, 0x48, 0xd3, 0x23, 0x38, 0xe7, 0x2a, 0x3c, 0xe0, 0x89, 0x10, 0x26, 0xbf, 0xe1, 0xea, 0x5c, 0x4c, 0x2e, 0x97, 0x48, 0x17, 0x9a, 0x53, 0x48, 0x29, 0xa8, 0xaf, 0x3c, 0x6f, 0x50, 0x55, 0x16, 0xec, 0xdf, 0x0e, 0xd5, 0x76, 0x38, 0x55, 0x97, 0xda, 0x97, 0x0a, 0x4c, 0x65, 0xaa, 0xc5, 0xcc, 0xd2, 0xb9, 0x73, 0xcf, 0x57, 0x78, 0x83, 0xc6, 0xfd, 0x81, 0x8d, 0x5e, 0x33, 0xf2, 0xb7, 0x4e, 0xda, 0x3b, 0x4a, 0x84, 0xb0, 0x4d, 0x2e, 0xb9, 0x91, 0xcb, 0xae, 0x53, 0x83, 0x38, 0xfe, 0x6d, 0x74, 0x97, 0x31, 0xd6, 0xd1, 0xa2, 0x0e, 0xcf, 0xaa, 0x06, 0xc7, 0xac, 0x10, 0xa6, 0x19, 0x8a, 0xdb, 0xa9, 0x05, 0xcc, 0xf3, 0x1e, 0x9a, 0x1d, 0x06, 0xbb, 0x1c, 0x56, 0x44, 0x1a, 0xbb, 0xec, 0x40, 0x0a, 0xaa, 0x48, 0x7f, 0x9d, 0x29, 0x28, 0xae, 0xef, 0xf5, 0xb4, 0xde, 0x61, 0x7f, 0x73, 0x8d, 0xd5, 0x09, 0x14, 0xe0, 0x0a, 0x84, 0x6f, 0xec, 0x1f, 0x4f, 0x80, 0xab, 0x3d, 0x4f, 0x99, 0x72, 0x28, 0x85, 0x5c, 0xae, 0x3b, 0x9a, 0xc2, 0xd9, 0x51, 0x49, 0x63, 0xe0, 0x86, 0xc0, 0x02, 0xbe, 0x11, 0x20, 0xb2, 0x85, 0x6f, 0x4b, 0x60, 0xfb, 0xfd, 0x37, 0x34, 0xe2, 0x97, 0xa1, 0xcb, 0xc0, 0xdf, 0xf7, 0xd2, 0xce, 0x0c, 0xd9, 0x6d, 0x35, 0x46, 0x87, 0xac, 0x15, 0x18, 0xf4, 0x99, 0x99, 0x6c, 0xb0, 0x53, 0x5b, 0xff, 0xe5, 0x08, 0x51, 0x67, 0x48, 0x39, 0x6f, 0xd0, 0x8f, 0x51, 0xbd, 0x02, 0x79, 0x48, 0xb7, 0x04, 0x60, 0x2a, 0x62, 0x58, 0x07, 0xb6, 0x60, 0x54, 0xec, 0x41, 0x20, 0x85, 0x65, 0x09, 0x9b, 0x90, 0x1a, 0xb6, 0xe5, 0xbb, 0x1d, 0x26, 0x90, 0x91, 0xe7, 0x0e, 0x46, 0x87, 0x65, 0x9b, 0xc3, 0x0d, 0x72, 0xfc, 0x9c, 0xc1, 0x5b, 0x06, 0x84, 0xc4, 0xb4, 0xfa, 0x75, 0x39, 0xf4, 0xca, 0x5e, 0x35, 0xa8, 0xe0, 0x18, 0x7b, 0x75, 0xbf, 0x7c, 0xfd, 0x30, 0x08, 0xce, 0x91, 0x6f, 0x60, 0xb1, 0x89, 0x18, 0x4a, 0x50, 0xbe, 0xe9, 0x95, 0x03, 0x09, 0x28, 0x2d, 0xdd, 0x0e, 0x49, 0xe7, 0xc8, 0x00, 0x87, 0xe7, 0x89, 0x3c, 0x18, 0x33, 0x49, 0x49, 0x1d, 0x29, 0xd5, 0xb3, 0x82, 0x1a, 0xa9, 0x7f, 0xef, 0x86, 0x72, 0xba, 0xa3, 0xa2, 0x1f, 0x42, 0x83, 0xa1, 0x75, 0x0d, 0x17, 0xf4, 0xcd, 0xc8, 0x5f, 0xef, 0x74, 0x16, 0x1a, 0x37, 0x94, 0x6c, 0x9d, 0xc1, 0x77, 0x95, 0x94, 0x0c, 0x13, 0xdf, 0x4b, 0x33, 0xd0, 0x39, 0x99, 0x6e, 0x3f, 0x74, 0x00, 0x4c, 0xe9, 0x96, 0xee, 0x00, 0xc5, 0xdc, 0x57, 0x74, 0xe2, 0xa7, 0x5e, 0xe9, 0xfd, 0x0d, 0xc3, 0x03, 0x3e, 0xf3, 0xfb, 0xdf, 0x2f, 0x80, 0xfa, 0x75, 0xf5, 0x2f, 0xa8, 0xe6, 0xbf, 0xd9, 0x7b, 0xe4, 0xee, 0xd7, 0x86, 0xa2, 0xf7, 0x24, 0x9c, 0x3b, 0xee, 0x89, 0xed, 0x94, 0x25, 0xc5, 0x8c, 0xb3, 0x70, 0xd4, 0xb8, 0x7d, 0x13, 0x29, 0xd4, 0x5e, 0xe8, 0x01, 0x2c, 0xcb, 0x83, 0x65, 0xd5, 0x65, 0xcb, 0x72, 0x63, 0x59, 0x65, 0xc1, 0x92, 0xfb, 0x8c, 0xb2, 0x64, 0xa7, 0x25, 0xb7, 0xac, 0xf7, 0xd7, 0x53, 0x3c, 0x6c, 0xbd, 0xcd, 0xd0, 0x0b, 0x7d, 0x91, 0xf0, 0x75, 0x51, 0x51, 0x6e, 0xae, 0xa1, 0x50, 0xc3, 0x85, 0xb1, 0x83, 0x0b, 0x2e, 0x8c, 0x9d, 0x1e, 0x9f, 0x6b, 0x4e, 0x0b, 0x26, 0xe4, 0x5a, 0x26, 0xbd, 0xdf, 0xe0, 0x82, 0xfa, 0xc1, 0xc3, 0x55, 0x98, 0xab, 0x85, 0x72, 0x2d, 0xbd, 0x34, 0x57, 0x09, 0x73, 0x5d, 0x8b, 0xb9, 0x3e, 0xf2, 0x99, 0xb9, 0x16, 0x4e, 0xa8, 0xab, 0xfd, 0x30, 0xd2, 0xdc, 0x09, 0x09, 0xf3, 0x7b, 0xc9, 0x69, 0xe4, 0x87, 0xdc, 0x7d, 0x0f, 0x4b, 0xb2, 0x22, 0xfe, 0x2e, 0x5e, 0xd7, 0x69, 0x56, 0xc3, 0x64, 0x0f, 0xcb, 0x50, 0x6d, 0xa1, 0xda, 0x5a, 0x1e, 0x73, 0x7e, 0xe4, 0x38, 0xfe, 0xcb, 0x27, 0xc4, 0x77, 0xfc, 0x97, 0xfe, 0x85, 0x1f, 0x43, 0x39, 0xed, 0xd1, 0xff, 0x97, 0x4d, 0x74, 0xfb, 0xcd, 0x1d, 0x7e, 0x15, 0xdd, 0x77, 0xdd, 0x55, 0x52, 0x09, 0xfa, 0xb2, 0x11, 0x67, 0xb1, 0xc9, 0x23, 0xea, 0x82, 0xae, 0xeb, 0x08, 0x6e, 0x42, 0xa6, 0x76, 0xc3, 0x3f, 0xb3, 0xec, 0xc2, 0xf1, 0x0f, 0x2f, 0x6b, 0x52, 0xa8, 0x16, 0x39, 0x95, 0x3a, 0xda, 0x2d, 0xc7, 0x7a, 0xd9, 0x63, 0xd6, 0x70, 0x6d, 0x6c, 0x89, 0x16, 0xa3, 0x3a, 0xc6, 0x17, 0x3b, 0xe8, 0xf6, 0x9f, 0x16, 0x07, 0xdd, 0xd7, 0xed, 0xe7, 0x35, 0xe8, 0x10, 0xce, 0xd3, 0x3e, 0xb0, 0x29, 0x35, 0x91, 0x07, 0xd9, 0x25, 0x13, 0x8f, 0x93, 0xf5, 0x6b, 0x7e, 0x80, 0x25, 0x22, 0x45, 0x81, 0xa9, 0x49, 0xc8, 0x07, 0xe4, 0xea, 0x83, 0x30, 0x97, 0x62, 0x20, 0xf7, 0x35, 0xf7, 0x9a, 0xd4, 0x89, 0x60, 0xf4, 0x81, 0xa6, 0x8d, 0x89, 0xbb, 0x76, 0x3c, 0xd0, 0xb9, 0x3e, 0x54, 0xab, 0x49, 0x6b, 0x4d, 0xa1, 0x6f, 0x9e, 0x28, 0xe7, 0xd4, 0x76, 0xce, 0x67, 0x9a, 0x52, 0x1d, 0x79, 0xd0, 0x1f, 0x0c, 0x05, 0xa0, 0x8e, 0x34, 0x5e, 0x6f, 0xf8, 0x4d, 0x60, 0x9a, 0x71, 0xb3, 0x6a, 0x4a, 0xc8, 0x7a, 0x6e, 0x78, 0x39, 0x90, 0x47, 0x5c, 0x14, 0xed, 0x19, 0x0a, 0x99, 0x96, 0x06, 0x3a, 0xdf, 0xa2, 0x75, 0xc3, 0xef, 0x28, 0x2e, 0x87, 0xcc, 0xe0, 0xef, 0xa3, 0x99, 0x98, 0x79, 0x24, 0xbf, 0x16, 0x92, 0x2f, 0x0d, 0xc6, 0x3e, 0xe2, 0xd0, 0xff, 0x93, 0x89, 0xcd, 0xf9, 0xe8, 0xfd, 0x18, 0xc2, 0x37, 0x6a, 0xde, 0xf0, 0xee, 0x84, 0x90, 0x5e, 0x0c, 0xd9, 0xc3, 0x21, 0xef, 0x4f, 0x08, 0x19, 0xc6, 0x90, 0xc7, 0x38, 0xe4, 0x54, 0x26, 0xa4, 0x52, 0x46, 0x1c, 0x89, 0xbc, 0xd7, 0x3c, 0xc1, 0x7b, 0x20, 0xcd, 0xec, 0x45, 0xee, 0xdc, 0x8b, 0xdc, 0xb9, 0x17, 0xf2, 0xd1, 0x67, 0x8a, 0xe8, 0x03, 0xda, 0x4f, 0x14, 0x37, 0x30, 0xdc, 0xf0, 0x31, 0xf7, 0x84, 0x8a, 0x79, 0x2d, 0xa6, 0xef, 0x60, 0x77, 0xb6, 0x14, 0xfe, 0x4e, 0x6a, 0x30, 0x89, 0xef, 0x3b, 0x0b, 0x3e, 0x34, 0xa1, 0xfc, 0x41, 0x4c, 0x23, 0x42, 0x1e, 0xce, 0x84, 0xd4, 0xf3, 0xf7, 0xdf, 0x47, 0x36, 0xfb, 0x57, 0x9a, 0xd6, 0xe2, 0x98, 0xdb, 0x26, 0xa4, 0x85, 0x4a, 0xde, 0xde, 0x94, 0xbf, 0x4a, 0x93, 0x03, 0x25, 0x58, 0x2e, 0xdf, 0x48, 0x1b, 0xfc, 0x05, 0xc6, 0xb9, 0x85, 0xc6, 0x00, 0xf7, 0xab, 0x35, 0xbc, 0x2d, 0x0e, 0x17, 0x0f, 0xb1, 0x6e, 0xc1, 0x51, 0x0d, 0x2e, 0xee, 0xe7, 0x38, 0xcf, 0x4d, 0xa8, 0xcb, 0xbf, 0x68, 0x60, 0xd9, 0xca, 0xae, 0x83, 0x13, 0x4a, 0x7c, 0x95, 0x4b, 0x6c, 0xfa, 0xd2, 0x25, 0x6a, 0x99, 0x12, 0x6f, 0xe1, 0x38, 0xef, 0x4f, 0xc8, 0xf7, 0x14, 0xe7, 0x7b, 0xfb, 0x97, 0xce, 0xd7, 0x96, 0xce, 0x77, 0x94, 0x77, 0x7d, 0xaa, 0x20, 0x93, 0x2f, 0x00, 0xf7, 0x66, 0x95, 0x39, 0xb2, 0xd9, 0xe8, 0x2b, 0x7b, 0x4e, 0xbf, 0x70, 0x9f, 0x54, 0x5d, 0xc1, 0xa5, 0x6e, 0xe3, 0xbd, 0xca, 0xf1, 0xe5, 0x7a, 0xa9, 0x5c, 0x67, 0x09, 0xc5, 0xa7, 0x59, 0x25, 0x6a, 0x50, 0xf5, 0x35, 0xa3, 0x06, 0xce, 0xe7, 0x84, 0x8e, 0xc3, 0xb6, 0xb8, 0x95, 0xcb, 0x3f, 0x84, 0xb9, 0x3c, 0xfe, 0x85, 0x72, 0x28, 0xfe, 0xac, 0x1c, 0x02, 0xc5, 0x26, 0xbe, 0x15, 0xb9, 0xea, 0x5b, 0xda, 0x12, 0x7e, 0xdf, 0x98, 0x69, 0x49, 0x3e, 0x7f, 0x47, 0xc5, 0x4d, 0x54, 0x55, 0x7f, 0x1b, 0xd9, 0xac, 0x75, 0x90, 0xab, 0xf6, 0xda, 0x4c, 0x8c, 0x92, 0x40, 0x9e, 0x12, 0xc2, 0x99, 0x8a, 0xb3, 0xb0, 0xe4, 0x01, 0xb9, 0x3a, 0xb2, 0xa9, 0x24, 0x45, 0xdf, 0x0a, 0x9d, 0x17, 0x98, 0xcb, 0xf3, 0x67, 0x71, 0x49, 0x8a, 0xd3, 0x78, 0x30, 0xb5, 0x8f, 0x5d, 0xdf, 0xca, 0xa4, 0x96, 0x03, 0x79, 0x72, 0x28, 0xb2, 0xc9, 0x1f, 0x34, 0xe2, 0x54, 0x46, 0x36, 0x2b, 0x11, 0x4e, 0x15, 0x21, 0x9d, 0x93, 0x4f, 0x1f, 0x67, 0xdf, 0x85, 0x99, 0xf8, 0x6e, 0x51, 0x9a, 0x1c, 0xc4, 0xb9, 0xef, 0x2c, 0x19, 0x10, 0x3b, 0xe4, 0xb5, 0x11, 0x2d, 0xcc, 0xef, 0xd6, 0xcb, 0xc5, 0x2b, 0xcb, 0xc6, 0x6b, 0xd7, 0x58, 0x2f, 0xa4, 0xf6, 0xce, 0x4b, 0xe3, 0x95, 0x6c, 0x32, 0xe2, 0xf4, 0x63, 0x2d, 0x01, 0x5e, 0x64, 0xf7, 0xa6, 0x4c, 0xbc, 0x79, 0x97, 0xb6, 0x92, 0x6e, 0xe7, 0xac, 0x0c, 0x8a, 0x7b, 0xc8, 0x4a, 0x52, 0x01, 0x6c, 0xad, 0xa8, 0x4b, 0x64, 0x73, 0x29, 0xed, 0xd1, 0x57, 0x3a, 0x53, 0xda, 0x5d, 0xec, 0xb3, 0x25, 0x93, 0x4b, 0xd9, 0xe5, 0x72, 0x39, 0xff, 0x52, 0xcb, 0xc6, 0xca, 0xe0, 0x0d, 0x10, 0x8a, 0x67, 0xf2, 0x68, 0x47, 0x28, 0x60, 0x0e, 0x65, 0x0f, 0x68, 0x4c, 0x05, 0xd4, 0x6e, 0xcb, 0xe4, 0x30, 0x57, 0xc0, 0x4b, 0xe4, 0x40, 0x98, 0xac, 0x24, 0x95, 0x86, 0x5f, 0x26, 0x75, 0xbf, 0x48, 0xad, 0x10, 0x9e, 0x74, 0x68, 0x70, 0x41, 0x63, 0xdf, 0x1f, 0x64, 0xf2, 0xe8, 0xb9, 0x7c, 0x1e, 0xf8, 0x5d, 0x9e, 0x93, 0xcb, 0xa3, 0x02, 0x7b, 0x57, 0x12, 0x4f, 0xed, 0xc7, 0xfc, 0x4a, 0xa3, 0x4f, 0x43, 0x29, 0x62, 0x9c, 0xab, 0x0d, 0x38, 0x21, 0x76, 0x97, 0xf3, 0xe8, 0x16, 0xb1, 0xa6, 0x8d, 0x62, 0xe6, 0xd6, 0xbe, 0x40, 0xfc, 0x51, 0xf4, 0x81, 0x7f, 0xfe, 0x18, 0xe6, 0x2e, 0x7b, 0xd9, 0xf0, 0x61, 0x0a, 0x16, 0xe1, 0xb9, 0x8f, 0xbf, 0xff, 0x35, 0x53, 0x87, 0xe4, 0x17, 0xaa, 0xc3, 0xfe, 0x9c, 0x3a, 0x94, 0x8d, 0xab, 0xc3, 0xd4, 0x00, 0x10, 0x36, 0x47, 0xac, 0x5e, 0x87, 0x30, 0x5d, 0x10, 0x79, 0xd0, 0xc0, 0xe0, 0xa2, 0x26, 0xef, 0xe6, 0xd4, 0x64, 0xbf, 0xf0, 0xd1, 0xe6, 0xf3, 0x3b, 0x3b, 0xf7, 0x59, 0xc3, 0xa5, 0xf6, 0x54, 0x06, 0x83, 0xf3, 0x0c, 0xa8, 0xfd, 0xa3, 0xa8, 0xb1, 0xb1, 0x8f, 0x33, 0xb7, 0x65, 0xa3, 0xc6, 0x73, 0xa7, 0xce, 0x4a, 0x39, 0x6a, 0x70, 0xde, 0x45, 0x3b, 0x19, 0x58, 0xd6, 0x06, 0xa2, 0x64, 0x04, 0x4f, 0xae, 0xd4, 0x23, 0x85, 0x83, 0x98, 0x97, 0x68, 0x55, 0x83, 0x53, 0x55, 0xd4, 0x7a, 0x0e, 0xcb, 0x67, 0x0c, 0x8d, 0x74, 0xd9, 0xd8, 0x0e, 0xa2, 0x67, 0x29, 0x86, 0xc1, 0x15, 0x31, 0x5d, 0x28, 0x57, 0x18, 0xf1, 0x5a, 0x89, 0x32, 0xac, 0xfb, 0x6a, 0x2e, 0x65, 0xd8, 0x80, 0x7c, 0x49, 0x20, 0x6f, 0xc1, 0x87, 0x48, 0xc5, 0x4d, 0x15, 0xfb, 0x66, 0xbf, 0x79, 0x42, 0x5e, 0x4c, 0xd0, 0xa0, 0xb5, 0xf7, 0xf9, 0x27, 0x34, 0xd7, 0x33, 0xfb, 0xe3, 0x24, 0xf1, 0x9b, 0x1a, 0xb0, 0x11, 0xe4, 0xc4, 0x3d, 0x41, 0xde, 0x26, 0xd2, 0x93, 0x8d, 0x1d, 0x37, 0xe8, 0x3f, 0xe6, 0x6c, 0x9f, 0x67, 0xe9, 0x05, 0xd2, 0xa4, 0x16, 0xfd, 0x2d, 0x41, 0xfb, 0x05, 0xec, 0x4a, 0x97, 0x59, 0xfa, 0xc5, 0xfb, 0xe0, 0x8c, 0x2b, 0xc4, 0xa9, 0xaa, 0x2b, 0xe0, 0xf5, 0x67, 0x3e, 0x32, 0x5b, 0x3b, 0x5d, 0x2c, 0x8d, 0xe5, 0xdd, 0xe9, 0x6d, 0x74, 0x0b, 0x92, 0x23, 0x14, 0x24, 0x8e, 0x51, 0xbd, 0x23, 0xd3, 0xae, 0x34, 0xdf, 0x57, 0x71, 0x25, 0xe9, 0x42, 0xcc, 0x08, 0xcd, 0x06, 0x1b, 0xed, 0x20, 0x33, 0x46, 0xf1, 0x20, 0xef, 0xf8, 0x76, 0x9a, 0x0b, 0xe4, 0x5d, 0xa9, 0x19, 0x31, 0x9b, 0xa1, 0xab, 0xe7, 0x71, 0xfa, 0xe0, 0x1a, 0xc2, 0x46, 0x9a, 0xa5, 0xb4, 0x5f, 0xd7, 0xe9, 0x34, 0x09, 0xc1, 0x21, 0x60, 0x97, 0x9b, 0x34, 0x47, 0xfe, 0x6c, 0x98, 0xb2, 0x13, 0xf1, 0x63, 0x97, 0x95, 0x79, 0xe1, 0xd3, 0x82, 0x83, 0x53, 0x86, 0xb1, 0x6e, 0x16, 0xde, 0xb7, 0xb3, 0x88, 0xbd, 0xe4, 0x72, 0xe4, 0x2f, 0x04, 0x27, 0xac, 0x06, 0x25, 0x9f, 0xfe, 0x26, 0xe4, 0x15, 0x94, 0x98, 0x3c, 0x21, 0x7c, 0xb4, 0xf2, 0x67, 0x48, 0xff, 0x64, 0xc6, 0x33, 0x03, 0xb3, 0xaa, 0xa0, 0x50, 0xac, 0x5c, 0x8a, 0x0f, 0x7c, 0xf1, 0x42, 0xaf, 0x0f, 0x66, 0x20, 0x8d, 0xea, 0x91, 0x25, 0xff, 0xc2, 0xb4, 0x66, 0x5f, 0x6a, 0x88, 0xe2, 0x8a, 0xf5, 0x55, 0xa6, 0x70, 0x1f, 0x14, 0xaa, 0xa6, 0x7d, 0xa9, 0xd8, 0x9e, 0xaf, 0x54, 0x9b, 0x3c, 0x42, 0x12, 0xc8, 0xfc, 0x71, 0xa9, 0x3a, 0x85, 0xb9, 0x3e, 0xbb, 0xd8, 0x7f, 0xaf, 0x3a, 0x61, 0x1a, 0x56, 0x9b, 0xc2, 0x9b, 0x0d, 0x5c, 0x6b, 0xdf, 0x9b, 0x52, 0xab, 0xf8, 0xb6, 0x78, 0xbf, 0x36, 0x03, 0xf3, 0xb1, 0xc7, 0x1d, 0x48, 0xa3, 0x83, 0xb8, 0x25, 0x2c, 0x5e, 0x60, 0xdc, 0x2a, 0x9a, 0x17, 0xde, 0x1c, 0xb7, 0xb1, 0x6c, 0xe2, 0x18, 0x49, 0xfc, 0x88, 0x97, 0x71, 0x88, 0x3d, 0xca, 0x3c, 0xda, 0xab, 0xc5, 0xd6, 0x9c, 0x4a, 0xcb, 0xe2, 0x4a, 0x49, 0xba, 0xef, 0x44, 0xea, 0xd8, 0x15, 0x2f, 0xd5, 0x64, 0xba, 0x6d, 0x49, 0xa5, 0x33, 0x18, 0xd7, 0x68, 0x85, 0x01, 0xb3, 0x1c, 0xc4, 0x55, 0x24, 0x8f, 0xef, 0x29, 0x4c, 0xc5, 0xf3, 0x5b, 0x06, 0x35, 0x6b, 0x2d, 0x97, 0x2c, 0x87, 0x10, 0x62, 0x87, 0x59, 0x6e, 0xfb, 0xa6, 0xc5, 0x91, 0xde, 0xad, 0x16, 0x14, 0x58, 0x9d, 0x07, 0xe7, 0x87, 0x25, 0x90, 0x57, 0xcb, 0xda, 0x65, 0x91, 0xcd, 0x81, 0x12, 0x93, 0x9f, 0x65, 0x1f, 0xdb, 0x3c, 0x41, 0xde, 0xb5, 0x4b, 0xc5, 0xdd, 0x81, 0x2b, 0x39, 0xe6, 0xb7, 0x44, 0x4c, 0x9c, 0xd3, 0x57, 0xf2, 0xed, 0x57, 0xcc, 0x59, 0xd4, 0x2d, 0x48, 0xfb, 0x0a, 0xad, 0x39, 0x21, 0xf5, 0xa0, 0x7a, 0x4b, 0xae, 0xdc, 0x7a, 0xcb, 0xac, 0x2b, 0x40, 0xe3, 0x22, 0x66, 0x55, 0x4b, 0x4c, 0x2e, 0x8d, 0x24, 0x3b, 0xc3, 0xd8, 0xba, 0x6d, 0x0a, 0x51, 0x94, 0xa7, 0x54, 0x88, 0x79, 0xab, 0x4e, 0x9a, 0x1e, 0x37, 0xb4, 0x06, 0xe8, 0xdb, 0x2d, 0xaf, 0x30, 0xb9, 0x94, 0x0e, 0x3a, 0x61, 0x15, 0x86, 0xb8, 0xcd, 0x79, 0xf5, 0x8e, 0xaf, 0xc6, 0x3f, 0xd1, 0x90, 0xdf, 0x34, 0xb4, 0xfe, 0xa5, 0x74, 0x59, 0x74, 0x0f, 0x31, 0xcf, 0x11, 0xb7, 0x21, 0xfb, 0x70, 0x92, 0x94, 0x95, 0xc7, 0xa0, 0x75, 0xc7, 0x4f, 0xc1, 0x1d, 0x0f, 0x63, 0x8c, 0x6d, 0x5a, 0xe1, 0x67, 0x84, 0xfa, 0x91, 0x7b, 0x77, 0xc6, 0xde, 0xc6, 0x38, 0x8f, 0x7f, 0x66, 0x1c, 0x9b, 0x88, 0xf3, 0xe0, 0x7e, 0xd9, 0x26, 0xc6, 0x79, 0x69, 0x99, 0xa7, 0xde, 0x93, 0x57, 0x8b, 0x3c, 0x59, 0x0f, 0x68, 0x4e, 0x65, 0x05, 0x72, 0x96, 0xf9, 0x2c, 0x9b, 0x29, 0x89, 0x0e, 0x36, 0xad, 0x37, 0x6e, 0x98, 0x1f, 0x6c, 0x7d, 0x77, 0x71, 0x4a, 0x59, 0xf8, 0xde, 0xb0, 0x08, 0x31, 0xa4, 0x2a, 0x62, 0x3f, 0xc2, 0x2e, 0xf6, 0x40, 0xea, 0x6e, 0x9a, 0xc0, 0xeb, 0x55, 0x70, 0xa9, 0x73, 0x8d, 0xd9, 0x09, 0x62, 0xa6, 0xfd, 0x66, 0x1e, 0xef, 0xb6, 0x18, 0xfc, 0x2a, 0x72, 0xe1, 0x1d, 0xe9, 0xd9, 0x2b, 0x76, 0x3e, 0x9e, 0x9f, 0x4b, 0xe1, 0xea, 0xaa, 0xdc, 0xbd, 0x88, 0xac, 0x5c, 0xbe, 0xee, 0xd6, 0xcb, 0xc8, 0xe5, 0x8d, 0x9c, 0x5f, 0x28, 0x64, 0xf9, 0xa9, 0x91, 0x2a, 0x90, 0xc7, 0xdc, 0x16, 0x43, 0x34, 0xbf, 0x52, 0x1f, 0xfb, 0x8f, 0x7f, 0x7a, 0x61, 0x3b, 0xe4, 0x8b, 0x3e, 0x34, 0xc2, 0x54, 0x0a, 0x4b, 0x43, 0x89, 0x24, 0xcb, 0x46, 0x3c, 0x96, 0x2f, 0x27, 0x85, 0x4b, 0x11, 0x3a, 0x6c, 0x02, 0x7e, 0xf2, 0xcc, 0x34, 0xd6, 0x13, 0xe7, 0x79, 0x48, 0xae, 0xcb, 0x7d, 0x7f, 0x92, 0xb4, 0x11, 0xc6, 0xc6, 0x3c, 0xc0, 0xd2, 0xa0, 0x41, 0xd9, 0x2c, 0x34, 0x39, 0x04, 0xef, 0xee, 0x35, 0xa9, 0x11, 0xda, 0x8d, 0xe3, 0x31, 0xd6, 0x86, 0x63, 0x4c, 0x12, 0xf7, 0x48, 0x0b, 0xbd, 0x8b, 0x84, 0x09, 0x79, 0x15, 0xbb, 0xf0, 0x79, 0x76, 0xb4, 0x65, 0xa3, 0xea, 0x33, 0xf9, 0x85, 0x7e, 0x64, 0x6c, 0xb1, 0xb6, 0x84, 0xf0, 0x1b, 0xce, 0x0b, 0x07, 0xcf, 0x8b, 0x9a, 0x96, 0x41, 0xc4, 0xb0, 0x7e, 0x98, 0xfa, 0x6c, 0xaa, 0xb5, 0x9c, 0x5d, 0x76, 0x05, 0xf6, 0xae, 0x8b, 0xfb, 0x03, 0x7e, 0xa2, 0x8b, 0xf1, 0x7b, 0x9a, 0xa0, 0x80, 0xb8, 0xa4, 0x01, 0x2e, 0xc9, 0x1e, 0xd9, 0xa2, 0x34, 0x26, 0x59, 0x1a, 0xaa, 0x3f, 0x42, 0xb3, 0x40, 0x0e, 0x19, 0x58, 0xf3, 0xf1, 0x80, 0x45, 0x70, 0xd8, 0x75, 0x3f, 0x31, 0x62, 0x66, 0xea, 0xd4, 0xf8, 0xe6, 0x12, 0x03, 0x27, 0x94, 0xcf, 0xf7, 0x36, 0x60, 0xfd, 0xf3, 0x02, 0xb3, 0xb1, 0x04, 0x31, 0xcb, 0xf6, 0x91, 0x16, 0x61, 0x76, 0x96, 0x51, 0x7c, 0xc7, 0xe2, 0xf0, 0x68, 0x0c, 0x4c, 0x6e, 0x4f, 0x27, 0x48, 0xff, 0xf4, 0x1b, 0x74, 0xe5, 0x85, 0x8b, 0xc1, 0xde, 0x89, 0x74, 0xa1, 0x6f, 0x25, 0x14, 0x70, 0xaa, 0xff, 0x23, 0x52, 0xe1, 0x8c, 0xc3, 0xde, 0x53, 0x56, 0x81, 0x0d, 0x71, 0xc3, 0x55, 0x0a, 0x49, 0x78, 0x9e, 0x94, 0x83, 0xc6, 0xad, 0x85, 0x00, 0xbb, 0xa6, 0xaf, 0x04, 0x07, 0xd8, 0x66, 0xae, 0x84, 0x3c, 0xb0, 0x87, 0x82, 0xce, 0x62, 0x98, 0x7a, 0x7d, 0x10, 0x5c, 0xf8, 0x9d, 0x0f, 0x6e, 0xa1, 0x7f, 0x66, 0x2b, 0xc6, 0x5f, 0x7b, 0xdc, 0x7a, 0xfd, 0x4a, 0x28, 0x84, 0x02, 0x65, 0x0e, 0xa6, 0xcb, 0x97, 0x6d, 0x72, 0x8d, 0x3f, 0x94, 0xc6, 0x77, 0x1e, 0x88, 0xaf, 0xc0, 0x94, 0x0e, 0xe2, 0xb1, 0xe2, 0xfe, 0x56, 0x9b, 0x83, 0xce, 0x14, 0xb5, 0x68, 0x79, 0xcc, 0x7f, 0xe5, 0xe3, 0xaf, 0x2b, 0x16, 0xd6, 0xec, 0x4a, 0x35, 0x63, 0xea, 0x26, 0x6d, 0xbe, 0xe1, 0xea, 0xd1, 0xe6, 0x1a, 0xae, 0x42, 0x41, 0xb7, 0xd5, 0x5d, 0x4c, 0xd7, 0x59, 0xf1, 0x43, 0x01, 0xd7, 0xd0, 0x99, 0xc0, 0x75, 0x38, 0x5b, 0x8e, 0x26, 0xf5, 0xd2, 0x2d, 0x7d, 0x04, 0x7d, 0x96, 0x61, 0x2d, 0x70, 0x73, 0x0a, 0x29, 0x03, 0x49, 0xb7, 0x6c, 0x16, 0x32, 0xa3, 0x7e, 0x86, 0x67, 0x35, 0xce, 0x31, 0xc4, 0xef, 0x4e, 0x92, 0xd4, 0xa2, 0xdb, 0x89, 0x6e, 0x6a, 0xd5, 0x15, 0x60, 0x0b, 0x75, 0x40, 0x1e, 0xfa, 0x7a, 0xaf, 0xc7, 0xd5, 0x82, 0xb4, 0x29, 0x09, 0xf6, 0xf3, 0xcb, 0x48, 0x8a, 0x42, 0x7b, 0x04, 0x02, 0xf2, 0x0b, 0x42, 0x98, 0xbb, 0x33, 0x3d, 0x76, 0x6e, 0x30, 0x87, 0xe2, 0xa1, 0x9f, 0x70, 0xaf, 0xe9, 0x7f, 0xfb, 0x30, 0xf1, 0x3b, 0x1e, 0xfb, 0x5a, 0xd0, 0x90, 0x2d, 0xcb, 0xb7, 0x9c, 0x9a, 0x92, 0x30, 0xef, 0x4d, 0x39, 0x2d, 0x27, 0x6c, 0xfd, 0xe6, 0x91, 0x7b, 0x8a, 0x2a, 0xe1, 0x8a, 0xfd, 0xf4, 0x2b, 0x3d, 0x37, 0x10, 0x77, 0xe0, 0xdb, 0x8c, 0x6f, 0x67, 0x74, 0x50, 0x73, 0x47, 0x07, 0xe5, 0x50, 0x74, 0x70, 0x2d, 0x14, 0xba, 0x35, 0x87, 0x1c, 0x6a, 0x19, 0xf4, 0xb9, 0xa5, 0xbb, 0xe9, 0x56, 0xf0, 0x7e, 0xe9, 0xb9, 0x54, 0xbc, 0x88, 0x63, 0xa6, 0xe2, 0xf6, 0xe8, 0x60, 0x74, 0x5d, 0xff, 0xd8, 0xbe, 0x7b, 0x34, 0x5b, 0x74, 0x90, 0xde, 0xd1, 0x75, 0x2f, 0xde, 0xd3, 0x6f, 0xc2, 0x3c, 0x5a, 0xbb, 0x2c, 0x1e, 0xfb, 0x91, 0xbb, 0x93, 0x12, 0xce, 0xa5, 0xd2, 0x7e, 0x8a, 0x5b, 0x91, 0x8f, 0x7c, 0x21, 0x7e, 0xe5, 0x7b, 0x42, 0x4a, 0xb5, 0xf2, 0xef, 0x9e, 0x29, 0xf2, 0xc2, 0xe6, 0xa1, 0x15, 0x9f, 0x20, 0x45, 0xf4, 0x00, 0xf9, 0x94, 0x65, 0x7d, 0xfa, 0xe9, 0x3b, 0x3f, 0xfb, 0xdd, 0x49, 0xdf, 0xf2, 0x57, 0x95, 0xaf, 0x2a, 0x23, 0xca, 0xf3, 0x86, 0xef, 0x69, 0xed, 0x16, 0xce, 0xbb, 0x84, 0xf3, 0x2e, 0x37, 0xf2, 0x76, 0xe2, 0x1a, 0xe0, 0xc6, 0xdc, 0x47, 0x3c, 0x53, 0x30, 0xce, 0x39, 0xad, 0x4c, 0x0e, 0x95, 0xe2, 0x77, 0x59, 0xfa, 0x5b, 0x91, 0x43, 0x4e, 0xfc, 0xce, 0x4f, 0x7f, 0xe7, 0x73, 0x7c, 0x4e, 0x41, 0x39, 0x53, 0x69, 0xaa, 0xd1, 0x12, 0x39, 0xe4, 0x76, 0xc6, 0x60, 0xec, 0x20, 0x62, 0xb3, 0x7e, 0xa1, 0x47, 0x83, 0x18, 0x34, 0x1f, 0x31, 0x66, 0xea, 0xda, 0x30, 0x58, 0xe4, 0x28, 0xaf, 0xc5, 0xf7, 0x69, 0x9e, 0xcb, 0x6b, 0xd7, 0x68, 0x79, 0x97, 0x6a, 0x80, 0xf1, 0xfa, 0x50, 0xa1, 0xda, 0xbc, 0x0d, 0x9e, 0x08, 0xf5, 0x9b, 0x98, 0x8b, 0x0b, 0x6e, 0xcf, 0xed, 0x39, 0x31, 0x0b, 0x6f, 0x1d, 0xe6, 0xf5, 0xd2, 0x9f, 0x30, 0x69, 0xf2, 0xf5, 0xfd, 0x91, 0xf3, 0xfa, 0x98, 0x02, 0xff, 0x71, 0x1f, 0x0c, 0x8c, 0x7c, 0x08, 0x26, 0x79, 0xa0, 0xac, 0x28, 0x6e, 0xad, 0x3e, 0xe3, 0x04, 0xf9, 0xbe, 0x68, 0xea, 0x6f, 0x87, 0x1d, 0x8b, 0x75, 0x1d, 0x39, 0x2f, 0x0f, 0xc6, 0x2d, 0xba, 0x34, 0xae, 0x52, 0x14, 0x97, 0xe4, 0x01, 0x8a, 0x87, 0x58, 0x6d, 0x6b, 0xec, 0x0d, 0x05, 0x0e, 0xa5, 0x0e, 0x0e, 0xd0, 0x69, 0x8d, 0x07, 0x47, 0xb6, 0x0e, 0x3b, 0x8a, 0x49, 0x87, 0x2c, 0x5e, 0x28, 0x4e, 0x5c, 0xd9, 0x6c, 0xfe, 0x85, 0xa4, 0x1b, 0x7a, 0x4b, 0x25, 0x8f, 0xe2, 0x29, 0x91, 0x35, 0x5a, 0x5e, 0x36, 0x84, 0xce, 0xd2, 0x89, 0xfb, 0xdb, 0x17, 0xdc, 0xc5, 0x35, 0xce, 0xea, 0x87, 0x39, 0x69, 0x8d, 0x5a, 0x62, 0x11, 0xda, 0xad, 0xde, 0x7a, 0xff, 0x14, 0xaf, 0xdd, 0x07, 0x25, 0x84, 0x19, 0xc0, 0x68, 0xe3, 0xe6, 0x09, 0x6d, 0x74, 0x71, 0xad, 0x0b, 0xab, 0x4e, 0x01, 0xce, 0x12, 0x4d, 0x8a, 0xae, 0x73, 0xb4, 0xe0, 0xf7, 0x39, 0x81, 0x73, 0x16, 0xfc, 0x5a, 0x2b, 0x90, 0x1b, 0x85, 0xbf, 0xd0, 0x71, 0x35, 0xfc, 0x3f, 0xe4, 0x5c, 0xa4, 0x9c, 0x72, 0xab, 0x5f, 0x79, 0xe1, 0x95, 0x17, 0xaa, 0x4e, 0x0f, 0x9b, 0x3d, 0xb6, 0xc4, 0xe8, 0x8b, 0x29, 0xd9, 0x7c, 0xf0, 0x6e, 0x43, 0x3b, 0x3e, 0x24, 0x34, 0xe3, 0x69, 0xf7, 0x9f, 0xd2, 0xd6, 0xe7, 0x4f, 0x48, 0xeb, 0xe2, 0x9d, 0x92, 0xd6, 0xdf, 0xbd, 0xc0, 0x35, 0xb1, 0xcb, 0x0b, 0xab, 0xb1, 0x2e, 0x6a, 0xa3, 0x66, 0x95, 0x17, 0x2a, 0x8d, 0xc6, 0x9e, 0xd9, 0x8f, 0xbf, 0x59, 0x0d, 0xce, 0x6f, 0xd6, 0x42, 0x7e, 0xf8, 0x1e, 0xa4, 0x6d, 0xeb, 0xd4, 0x85, 0x09, 0x81, 0xc3, 0x77, 0x86, 0x87, 0xe2, 0x5e, 0xa1, 0x25, 0x50, 0x3f, 0x3f, 0x37, 0x5f, 0x79, 0xaa, 0xbc, 0xc0, 0xc0, 0x35, 0x08, 0x0d, 0xa6, 0x2c, 0x10, 0x4e, 0x1c, 0xef, 0xd6, 0x4b, 0xea, 0x3e, 0x55, 0xe8, 0x1d, 0x0a, 0x7d, 0x34, 0x13, 0xd2, 0xbf, 0xde, 0x88, 0x07, 0xd7, 0x1c, 0xae, 0x57, 0xaf, 0xc3, 0xcb, 0x3b, 0x81, 0x0a, 0xef, 0x04, 0x4e, 0x15, 0x50, 0xac, 0xef, 0xca, 0x4a, 0xc1, 0x79, 0x37, 0x88, 0x65, 0x35, 0xac, 0xaf, 0xc6, 0x7b, 0x82, 0x51, 0xd2, 0x32, 0xbe, 0xdc, 0x2e, 0xa4, 0x12, 0x58, 0x08, 0x45, 0xd2, 0xcf, 0x70, 0xf2, 0x7e, 0x0c, 0x85, 0xb8, 0x1e, 0x39, 0xab, 0x69, 0x7f, 0x9a, 0xd2, 0xd9, 0x13, 0x9c, 0x7e, 0x6c, 0xaf, 0xd0, 0x7a, 0xc3, 0x1a, 0xa5, 0x84, 0x86, 0x19, 0x8d, 0xd5, 0x6f, 0xe1, 0xda, 0x9f, 0xde, 0x6f, 0xf1, 0x02, 0xef, 0xb1, 0x34, 0x87, 0xaa, 0xb5, 0xf2, 0x6c, 0x59, 0x71, 0xe5, 0xd9, 0x27, 0xc0, 0x1b, 0x2f, 0x98, 0x55, 0x03, 0x2a, 0xe7, 0x7b, 0x12, 0x8a, 0x18, 0x42, 0xf6, 0x68, 0xb5, 0x96, 0xc7, 0x65, 0xdb, 0xe8, 0x17, 0xc3, 0xbd, 0x6a, 0x34, 0xbc, 0x39, 0xb6, 0x2f, 0x5c, 0x1d, 0x9f, 0xaf, 0x36, 0x6b, 0x2e, 0x4e, 0x47, 0xa5, 0x8b, 0x5d, 0x19, 0x8b, 0x1a, 0x6c, 0xae, 0x96, 0xf3, 0x63, 0x27, 0x30, 0x7c, 0x46, 0x69, 0xb5, 0xd1, 0xde, 0x17, 0x72, 0xda, 0x2b, 0xf6, 0x3e, 0xb7, 0x66, 0x77, 0xc6, 0x1a, 0x1f, 0xfd, 0x0c, 0xd8, 0x01, 0x0c, 0x5e, 0x16, 0x7a, 0xbf, 0xff, 0x62, 0xd0, 0x13, 0xfb, 0xa9, 0x32, 0xed, 0xa7, 0x8e, 0xf0, 0xf9, 0x09, 0x01, 0x43, 0x4f, 0xd5, 0x07, 0x88, 0xbd, 0xeb, 0xbf, 0x3c, 0x1c, 0x49, 0xbe, 0x8c, 0x73, 0xe7, 0x75, 0xbf, 0x41, 0xb7, 0x7b, 0x41, 0x6d, 0xf0, 0x98, 0x3c, 0x11, 0xe2, 0x5d, 0x1a, 0x1a, 0x99, 0x9e, 0xcb, 0x63, 0xf7, 0xad, 0xb8, 0xda, 0x0f, 0xc7, 0x89, 0xee, 0x63, 0x09, 0x19, 0xef, 0x06, 0x7c, 0x60, 0xba, 0x5d, 0x09, 0xb1, 0x2c, 0xf2, 0x94, 0x9f, 0xe4, 0xef, 0xae, 0xb8, 0x12, 0x42, 0xee, 0x01, 0xb9, 0x8b, 0x0b, 0x4a, 0x58, 0xb6, 0x28, 0xe6, 0x34, 0x8f, 0x11, 0x46, 0xdf, 0x38, 0x9d, 0x37, 0x70, 0x69, 0x96, 0xa6, 0x93, 0x70, 0x8d, 0x90, 0xa5, 0x09, 0x4e, 0xa3, 0x7e, 0x24, 0x4b, 0xc7, 0x23, 0x3d, 0x37, 0x45, 0x05, 0xc4, 0x3f, 0x20, 0xd6, 0x8d, 0x86, 0x58, 0x00, 0xe7, 0x77, 0x0a, 0xd2, 0x73, 0xd3, 0xd0, 0x85, 0x5c, 0xcb, 0xfa, 0xa8, 0xa7, 0xd4, 0xa0, 0xa1, 0x3f, 0x5e, 0x89, 0x94, 0x9e, 0x0f, 0x5c, 0xbb, 0x52, 0xad, 0x2e, 0xd2, 0x1d, 0xa5, 0x73, 0x89, 0xe9, 0x92, 0xd5, 0xa0, 0x36, 0x83, 0x68, 0x7d, 0xce, 0xed, 0xbf, 0x18, 0xb9, 0xe5, 0xe8, 0x8e, 0xe2, 0x5c, 0xe2, 0xba, 0x64, 0xa5, 0xf6, 0x0d, 0xff, 0xe3, 0x92, 0x58, 0x6e, 0xde, 0xd7, 0xc8, 0xee, 0xc5, 0x09, 0x2d, 0x59, 0xa1, 0x95, 0x19, 0x12, 0x74, 0xb2, 0xd0, 0x6a, 0xe4, 0xdd, 0x40, 0x83, 0x67, 0x40, 0xda, 0x32, 0xd2, 0x5c, 0x62, 0xba, 0x2e, 0x8c, 0x4f, 0xa7, 0x27, 0x4c, 0x67, 0x5d, 0x65, 0xfc, 0x2d, 0xee, 0x2c, 0x24, 0x59, 0x2e, 0xf3, 0x61, 0x4e, 0x9e, 0xad, 0xa9, 0x58, 0x7a, 0x7f, 0xf7, 0x58, 0x86, 0x7f, 0xa3, 0xb1, 0x8d, 0x1c, 0xdc, 0xd7, 0xfb, 0xc1, 0x0d, 0xf9, 0x08, 0xf9, 0x9f, 0x92, 0x2c, 0x96, 0xf6, 0x3a, 0x35, 0xbb, 0x18, 0xf1, 0x99, 0xdd, 0xbe, 0x7e, 0xa4, 0x71, 0x71, 0x74, 0x7c, 0x93, 0x46, 0x87, 0x8d, 0xf7, 0x8b, 0xbc, 0x9a, 0x1d, 0xc7, 0x87, 0x6b, 0xc7, 0xcf, 0x70, 0x86, 0xe5, 0x47, 0x91, 0x1e, 0xc1, 0x19, 0xe7, 0x32, 0xb8, 0xbb, 0x7b, 0xb4, 0xc2, 0x70, 0x2a, 0xbd, 0xcf, 0x4f, 0x3b, 0x26, 0x38, 0x6e, 0x9c, 0x22, 0x4c, 0xb7, 0x8b, 0xb1, 0x9b, 0xe6, 0x1e, 0xa8, 0x0d, 0x7c, 0x67, 0x76, 0x07, 0x38, 0x79, 0x1c, 0xc8, 0x0a, 0xf2, 0xce, 0xf1, 0x42, 0xa4, 0xc9, 0xf3, 0xe8, 0x1e, 0x6d, 0xd2, 0xe5, 0x0b, 0x4c, 0xf3, 0x55, 0xa5, 0x69, 0x0a, 0x5f, 0x96, 0xf7, 0xec, 0x66, 0xde, 0x88, 0x76, 0x8b, 0x5c, 0x4a, 0xb7, 0x51, 0x4f, 0x3b, 0xf2, 0x76, 0x4e, 0xa6, 0x45, 0xeb, 0x90, 0xfe, 0xf3, 0x41, 0x5e, 0x72, 0xf2, 0xc8, 0x80, 0xb1, 0x2e, 0xca, 0xf8, 0x36, 0xd3, 0x9b, 0xb8, 0xfd, 0x24, 0xe4, 0xfb, 0xe0, 0x0a, 0x92, 0xd2, 0xfe, 0x9f, 0xed, 0x5c, 0xe7, 0xe7, 0x34, 0x91, 0x43, 0x23, 0x8e, 0x7b, 0xbb, 0x81, 0xbf, 0xa6, 0xd0, 0xe9, 0x35, 0x63, 0x8f, 0x93, 0xf4, 0x78, 0x1b, 0x90, 0x16, 0x96, 0x90, 0x16, 0x76, 0x20, 0xdc, 0x69, 0x27, 0x65, 0x8f, 0x5e, 0xa3, 0xd1, 0x8e, 0xe7, 0xf0, 0x57, 0xfa, 0x69, 0xa7, 0x9b, 0xb9, 0x6f, 0x3a, 0xcd, 0xd0, 0x6a, 0xe8, 0x41, 0x3a, 0xb2, 0x6d, 0xbc, 0x74, 0x7f, 0x05, 0xe7, 0xed, 0x09, 0x92, 0xba, 0x97, 0xe0, 0xb0, 0x41, 0xff, 0x46, 0x6f, 0x37, 0x34, 0x61, 0x9b, 0x5a, 0x34, 0xb0, 0xec, 0x45, 0x1a, 0x6c, 0x56, 0x0c, 0x2c, 0x2b, 0xe4, 0x05, 0xd1, 0x61, 0x87, 0x13, 0xe6, 0xc4, 0xec, 0xd1, 0xe1, 0xc4, 0x9c, 0x40, 0x10, 0xe6, 0x69, 0x96, 0xd0, 0xd3, 0x30, 0x0f, 0xfd, 0x4a, 0x71, 0x4e, 0x0e, 0xf7, 0x95, 0x6a, 0x52, 0x1f, 0x69, 0xda, 0x96, 0x6d, 0xc1, 0xf5, 0x62, 0xe1, 0xef, 0x1f, 0x86, 0x7f, 0xff, 0x6d, 0xf5, 0x1f, 0x1f, 0x86, 0x57, 0x7f, 0x2d, 0xe4, 0x50, 0xd5, 0xbf, 0xb7, 0x1d, 0x2c, 0xb1, 0x39, 0xdd, 0xf9, 0x60, 0x35, 0xe9, 0x07, 0x1d, 0x26, 0x98, 0xb2, 0xec, 0x68, 0xa0, 0x01, 0xca, 0x30, 0xff, 0x92, 0xd8, 0x3c, 0x0c, 0x71, 0xa6, 0xf7, 0x06, 0x5a, 0xbd, 0x4a, 0xfd, 0x83, 0xfb, 0x17, 0x9e, 0x1e, 0xc6, 0x1c, 0xaa, 0xfe, 0x38, 0x0c, 0xaf, 0xec, 0x27, 0xb9, 0x4a, 0xd5, 0x69, 0x4c, 0x3f, 0xc5, 0x39, 0x3d, 0x1d, 0x6b, 0xd9, 0x1b, 0x82, 0x5f, 0x57, 0x16, 0xe4, 0x4f, 0xc7, 0xdc, 0x96, 0xc7, 0xad, 0xf8, 0xdb, 0x19, 0xb3, 0x93, 0xc5, 0x00, 0xd0, 0xa3, 0xf7, 0x6a, 0x52, 0xb2, 0x43, 0x59, 0xe0, 0x9c, 0x8e, 0x71, 0x97, 0xc5, 0xc1, 0xf4, 0x54, 0xeb, 0x3c, 0x74, 0xdd, 0x8c, 0xae, 0x79, 0xad, 0x85, 0xe8, 0xaa, 0x21, 0xad, 0x40, 0x7c, 0x37, 0xe1, 0x7b, 0x27, 0xf2, 0x79, 0x60, 0xfa, 0x15, 0xd2, 0x63, 0xd4, 0xda, 0x16, 0xf4, 0x79, 0x18, 0xdf, 0xad, 0x48, 0x1b, 0xef, 0xd4, 0xfc, 0xe8, 0x5a, 0x1d, 0x8f, 0xb6, 0x12, 0x2d, 0xda, 0x86, 0x21, 0x23, 0xf8, 0x4e, 0x60, 0xc8, 0xc3, 0xda, 0x5a, 0x74, 0xad, 0x41, 0x9f, 0x77, 0xf1, 0xdd, 0x87, 0x3e, 0xf7, 0x68, 0xda, 0x2e, 0xc1, 0x79, 0xe4, 0xb7, 0xac, 0xd7, 0x24, 0x79, 0x06, 0x9d, 0xd0, 0x6f, 0x78, 0x9e, 0x4f, 0x7b, 0xbc, 0x71, 0x30, 0xa5, 0x04, 0x5f, 0x1d, 0x59, 0xf8, 0x3e, 0x98, 0x7a, 0xa1, 0x60, 0x3a, 0x96, 0xb4, 0x44, 0xc4, 0xf5, 0x45, 0x29, 0xae, 0xef, 0xf6, 0x3d, 0xcc, 0xa1, 0x8a, 0x14, 0x81, 0x69, 0x88, 0xd7, 0xca, 0x58, 0xcf, 0xb9, 0xad, 0x65, 0xa3, 0x07, 0x90, 0x83, 0xa6, 0xdb, 0xa9, 0xc1, 0xe4, 0x4b, 0x2c, 0xdf, 0x31, 0x10, 0xcb, 0xd3, 0xf2, 0x49, 0x07, 0x89, 0x60, 0x87, 0x30, 0xb7, 0x26, 0x3a, 0xc9, 0x8f, 0x73, 0xb3, 0xf8, 0xf2, 0xb5, 0x7c, 0xdf, 0x0c, 0xad, 0x80, 0xbf, 0x1c, 0xbe, 0x7c, 0xa4, 0x10, 0x91, 0x44, 0xc4, 0x12, 0x2c, 0x6b, 0xa1, 0x62, 0x46, 0xbf, 0x53, 0x5b, 0x41, 0x39, 0xc4, 0x27, 0xa6, 0xc9, 0xc3, 0x34, 0xf9, 0x42, 0x2b, 0xd6, 0x97, 0x5f, 0xff, 0xaf, 0x14, 0xbf, 0x62, 0x46, 0xfd, 0xbf, 0x86, 0xef, 0xee, 0x2c, 0xaf, 0xb9, 0xbb, 0xdf, 0xde, 0x63, 0xd2, 0xe6, 0x5e, 0x36, 0xdd, 0xe7, 0x95, 0x65, 0xef, 0x81, 0x85, 0x1f, 0x43, 0x0d, 0xd2, 0xdc, 0xd6, 0xc0, 0x24, 0x6c, 0xcf, 0x3c, 0x6a, 0xcf, 0xb2, 0x91, 0xa6, 0x8d, 0x44, 0xd1, 0xf8, 0x6e, 0xf9, 0xea, 0xf5, 0x36, 0x0e, 0x61, 0xdf, 0xb9, 0x4d, 0x1b, 0x7d, 0x10, 0x5d, 0x47, 0xad, 0xc4, 0xf9, 0xf0, 0xb2, 0x16, 0xcc, 0x29, 0xcd, 0xbe, 0x4b, 0x48, 0x39, 0x32, 0x35, 0xc4, 0x99, 0x64, 0xa6, 0x52, 0x4a, 0x67, 0xd4, 0x8f, 0x5c, 0x13, 0x84, 0x0a, 0x2c, 0xa5, 0x42, 0xb3, 0x37, 0xdf, 0xfb, 0xf7, 0xbf, 0xd5, 0x90, 0x78, 0xf1, 0x2d, 0xe8, 0x35, 0xf5, 0xc0, 0x2f, 0x5e, 0x68, 0x93, 0x3c, 0xb6, 0xe8, 0xbd, 0xe1, 0xc1, 0x78, 0x53, 0x52, 0xde, 0x39, 0x14, 0x0f, 0x23, 0x46, 0xd9, 0x10, 0xcf, 0x6f, 0xb5, 0xe3, 0xbc, 0x93, 0x76, 0x6e, 0x88, 0x15, 0x69, 0x05, 0x05, 0xa3, 0x30, 0x47, 0x2b, 0xcb, 0x9c, 0xb7, 0x9a, 0x13, 0xd9, 0x33, 0xfa, 0xae, 0xe6, 0x8a, 0x6e, 0xd1, 0x66, 0x08, 0xd9, 0x08, 0xf9, 0x21, 0x46, 0xdc, 0xea, 0x09, 0x36, 0x6d, 0xd4, 0xec, 0x89, 0x39, 0x3c, 0x0b, 0x11, 0x23, 0x86, 0x71, 0xcc, 0xc7, 0x16, 0xfb, 0xa4, 0xa3, 0xeb, 0xfa, 0xa1, 0xc8, 0xa2, 0xd5, 0x70, 0xce, 0x79, 0xad, 0xb6, 0x24, 0xe5, 0xeb, 0xd6, 0xf2, 0x0b, 0xf6, 0x69, 0x25, 0xc6, 0x29, 0x3b, 0x2b, 0xe6, 0xb9, 0x59, 0xcb, 0xc7, 0x3c, 0x8b, 0x04, 0x94, 0xb0, 0xc5, 0x99, 0x1c, 0x65, 0x4b, 0x3a, 0xc7, 0xe8, 0xdd, 0x7b, 0x70, 0xd6, 0xb4, 0xef, 0xa6, 0xda, 0x26, 0xe4, 0x1d, 0x43, 0xb1, 0x70, 0xd2, 0xb4, 0x93, 0x6b, 0xcb, 0xe7, 0x58, 0x3f, 0xab, 0xb6, 0xe5, 0x5f, 0xa4, 0xb6, 0xc8, 0x65, 0x44, 0x38, 0x37, 0x67, 0xab, 0x2d, 0x41, 0x79, 0xcd, 0xd0, 0xdc, 0xce, 0xab, 0x0a, 0x46, 0xb4, 0xb9, 0x22, 0x2f, 0x9c, 0x59, 0x57, 0x91, 0x16, 0xd9, 0xa7, 0x27, 0xb5, 0x02, 0xca, 0x8d, 0xbe, 0x8d, 0xba, 0x42, 0x26, 0x3f, 0x5b, 0xa6, 0xa6, 0xdf, 0x8f, 0xde, 0xbd, 0xfb, 0xee, 0xd6, 0xa7, 0x08, 0x06, 0x38, 0xf2, 0x7f, 0x7c, 0x78, 0x1d, 0x8e, 0x66, 0x84, 0x01, 0x97, 0x90, 0x67, 0x94, 0x30, 0x1e, 0x06, 0x66, 0xcc, 0xfb, 0x81, 0x71, 0x30, 0x30, 0x5f, 0x16, 0x06, 0x83, 0xbb, 0x18, 0x06, 0x5a, 0x93, 0x51, 0xdb, 0x74, 0x4f, 0x61, 0x7d, 0xb1, 0xb6, 0xe5, 0x22, 0x37, 0x81, 0x49, 0xb8, 0xbe, 0x15, 0xc8, 0x11, 0x6d, 0xd1, 0x64, 0xe1, 0xf3, 0x39, 0x35, 0xbe, 0x57, 0x5e, 0xe0, 0x44, 0xbe, 0xe1, 0xd3, 0x0a, 0xee, 0x27, 0xa7, 0xd1, 0x4f, 0x85, 0x9a, 0x0b, 0x21, 0x0a, 0x5a, 0xa9, 0xc8, 0x97, 0xee, 0x47, 0xbf, 0x70, 0x82, 0x6b, 0x29, 0xe0, 0xe9, 0x40, 0x6e, 0x2d, 0x9d, 0x97, 0x23, 0x01, 0xe9, 0xdc, 0x34, 0x9b, 0x38, 0xc1, 0xed, 0x5f, 0x28, 0xe7, 0x19, 0xd2, 0x56, 0x77, 0x64, 0x0d, 0xed, 0xd3, 0x6a, 0x70, 0x71, 0x33, 0x61, 0x5c, 0x4a, 0x27, 0x78, 0x09, 0xcc, 0x91, 0xa4, 0x9b, 0x2e, 0xf5, 0x0e, 0xcf, 0x1d, 0xc2, 0xfe, 0x07, 0xeb, 0x0d, 0x89, 0x5d, 0xcd, 0xb6, 0xb4, 0x6c, 0x23, 0xb3, 0x32, 0x3a, 0x48, 0xd6, 0x44, 0xab, 0x14, 0x86, 0xae, 0x10, 0xeb, 0xca, 0x4c, 0xd6, 0xae, 0x0a, 0x3f, 0x65, 0x72, 0x21, 0x76, 0xca, 0x33, 0x68, 0x28, 0x6f, 0x5a, 0xdf, 0xc6, 0xdb, 0x01, 0xc6, 0xca, 0x18, 0xe0, 0x96, 0xf3, 0x4a, 0xbe, 0x37, 0x47, 0x37, 0x2d, 0x6c, 0xac, 0x95, 0x79, 0xcd, 0xb4, 0x56, 0xe6, 0x95, 0xe1, 0xaa, 0xd9, 0x5c, 0xf5, 0xcd, 0x2a, 0x5c, 0xb8, 0x83, 0x31, 0x80, 0xed, 0xe1, 0xaa, 0x55, 0x00, 0xdb, 0xbc, 0x2b, 0xc1, 0x19, 0xde, 0x8a, 0x7d, 0xb9, 0x81, 0x4e, 0x3a, 0xc0, 0xd4, 0x78, 0x38, 0x84, 0xab, 0xa8, 0x36, 0x5f, 0x75, 0x19, 0xdf, 0x65, 0xe2, 0x06, 0x7b, 0xdd, 0x92, 0x18, 0x7b, 0xfe, 0x49, 0xb0, 0xd1, 0xea, 0xaa, 0x74, 0x82, 0x8d, 0xd7, 0x35, 0xa2, 0xb2, 0xc2, 0xbc, 0x5e, 0x39, 0x66, 0xd3, 0x8a, 0xcb, 0x31, 0xc7, 0xee, 0xf1, 0x86, 0xc2, 0x5b, 0x63, 0xbf, 0xd2, 0x16, 0xa7, 0x53, 0x52, 0x1a, 0xd9, 0x8f, 0x75, 0xcf, 0xbf, 0x2e, 0x08, 0x5e, 0x4a, 0x9d, 0x49, 0x57, 0x7a, 0x5d, 0x27, 0xad, 0xdf, 0xb9, 0xa9, 0xb5, 0x22, 0xaa, 0xc1, 0x37, 0x99, 0xb7, 0xd6, 0x9c, 0xe1, 0x60, 0xa7, 0x43, 0x50, 0x88, 0x9c, 0xd7, 0xd6, 0xf4, 0x59, 0x8a, 0x25, 0x43, 0x19, 0xda, 0x24, 0x4f, 0x6d, 0xc2, 0x91, 0xc4, 0x2b, 0xfa, 0xc5, 0x17, 0x99, 0xaa, 0x3d, 0x93, 0xd5, 0xef, 0xc9, 0xea, 0x11, 0x21, 0x9d, 0xf4, 0x11, 0xae, 0xa6, 0x9f, 0xa9, 0x0b, 0xa4, 0x34, 0xc9, 0xd3, 0x91, 0xab, 0x08, 0x12, 0x97, 0x28, 0x3b, 0x95, 0xa0, 0xfc, 0xa0, 0x90, 0xb7, 0x89, 0x33, 0x42, 0xd9, 0xd3, 0x41, 0x9e, 0xde, 0xe1, 0xc5, 0xb4, 0xce, 0x12, 0x45, 0xa6, 0x5b, 0x7e, 0xf9, 0x01, 0xd8, 0x62, 0xf9, 0x7c, 0x4e, 0xc8, 0x21, 0xce, 0x09, 0x8d, 0x3f, 0x23, 0x74, 0xa9, 0x3e, 0xd3, 0x9f, 0xab, 0x07, 0xd2, 0xa4, 0x92, 0x77, 0x8a, 0x9a, 0xe7, 0xc9, 0xb3, 0xae, 0x03, 0x90, 0xf6, 0xc9, 0xd5, 0x74, 0xae, 0x47, 0x21, 0x7d, 0x50, 0x8b, 0x5c, 0x2d, 0x5a, 0xd9, 0xf8, 0x66, 0x50, 0x58, 0x1b, 0x59, 0x8e, 0x75, 0x7d, 0x50, 0xbe, 0x69, 0xe6, 0x72, 0x92, 0x4a, 0x0b, 0x1d, 0x51, 0xac, 0x2d, 0x97, 0x23, 0xea, 0x37, 0x5e, 0x6f, 0xed, 0xff, 0x6b, 0x38, 0x52, 0x46, 0x36, 0xa4, 0x86, 0x2c, 0x3b, 0xc5, 0xee, 0xc2, 0x26, 0xa5, 0x49, 0xc8, 0xc3, 0x49, 0xfb, 0xd5, 0xb0, 0x0d, 0x53, 0x91, 0x91, 0xb7, 0x5a, 0x88, 0x03, 0x10, 0x14, 0x3f, 0x8d, 0xcd, 0xf0, 0x57, 0xea, 0xfb, 0x24, 0x08, 0xd8, 0x1b, 0x84, 0x2c, 0x8a, 0xa8, 0x7d, 0xd7, 0x2f, 0x4f, 0x9a, 0x5c, 0x62, 0x1f, 0x2f, 0x3c, 0x47, 0x84, 0xb2, 0xbf, 0x43, 0x8c, 0x5d, 0x0a, 0x8d, 0xdb, 0x84, 0x64, 0x56, 0xb7, 0x7c, 0x85, 0x24, 0x4a, 0x57, 0x18, 0x16, 0x28, 0x0a, 0xc8, 0xe2, 0x84, 0xd8, 0xe3, 0xc0, 0x3a, 0xb5, 0x1a, 0xd4, 0xe4, 0x03, 0x38, 0xf3, 0x98, 0x86, 0x7d, 0x45, 0x21, 0x57, 0xc0, 0x67, 0x96, 0x32, 0xfb, 0x05, 0x46, 0x59, 0x9c, 0xd7, 0x70, 0xd3, 0x49, 0xd3, 0x75, 0x46, 0x9a, 0x13, 0x62, 0x44, 0x71, 0x1d, 0xfe, 0xda, 0xa8, 0x43, 0xe6, 0x34, 0xb6, 0xa1, 0xeb, 0x98, 0xe9, 0x3f, 0x84, 0xb7, 0xd8, 0x59, 0x29, 0x34, 0xa8, 0xaf, 0x7c, 0x83, 0xfa, 0xc2, 0x14, 0x0f, 0x9d, 0xe3, 0x3d, 0xad, 0x52, 0x86, 0x18, 0xc9, 0xee, 0xf3, 0x62, 0xb6, 0xab, 0xa8, 0xce, 0x36, 0xad, 0x00, 0xdf, 0x93, 0x71, 0xc5, 0x96, 0xd2, 0x72, 0x53, 0xb1, 0x83, 0x21, 0xe4, 0x8f, 0x59, 0xfa, 0x19, 0xba, 0x20, 0x65, 0xf2, 0x31, 0xf5, 0x9c, 0xc7, 0xd4, 0xb3, 0xcd, 0xc0, 0x16, 0xc7, 0x84, 0x5c, 0x33, 0x34, 0x3b, 0xbb, 0xab, 0x91, 0xbb, 0x9f, 0x91, 0x96, 0x71, 0x56, 0x92, 0xd2, 0xa9, 0x29, 0xcd, 0x21, 0xaa, 0x2c, 0xe9, 0xf6, 0xf8, 0x60, 0x86, 0x6c, 0xa9, 0x4b, 0x8d, 0xac, 0xdb, 0x7f, 0xb7, 0xd8, 0x5b, 0x18, 0x79, 0x02, 0x0a, 0xe3, 0x0e, 0xf0, 0x81, 0x0c, 0x79, 0x5c, 0x83, 0x83, 0x39, 0x72, 0xd0, 0x4a, 0x43, 0x3f, 0x1a, 0xa8, 0x17, 0xe9, 0xb4, 0x77, 0x5b, 0xbe, 0x2c, 0xfd, 0x6d, 0x2a, 0x69, 0xdd, 0x99, 0x5a, 0xfc, 0x02, 0x69, 0xad, 0xd4, 0xac, 0xd3, 0xa4, 0x5e, 0x93, 0x80, 0x62, 0xee, 0x99, 0x39, 0x6f, 0xd9, 0xf0, 0x12, 0xe4, 0x15, 0x2d, 0xf2, 0x54, 0x92, 0xa1, 0x91, 0xfe, 0x0d, 0xfe, 0xdb, 0xff, 0xca, 0xfe, 0xaa, 0x33, 0xc3, 0x30, 0x33, 0x08, 0x4b, 0xaa, 0x4f, 0xc0, 0xe2, 0xaa, 0x13, 0xd0, 0xc2, 0x1c, 0xa1, 0x5d, 0xf9, 0x19, 0x62, 0x84, 0x9f, 0x41, 0x3e, 0x52, 0x2f, 0xba, 0x92, 0x92, 0x53, 0x86, 0x64, 0xdd, 0x92, 0xe5, 0x8b, 0x58, 0x77, 0xd1, 0xc4, 0xa5, 0xe0, 0x28, 0x52, 0xbd, 0x50, 0x28, 0x9b, 0xb1, 0x15, 0x83, 0x2f, 0x0e, 0xa5, 0xd6, 0x61, 0x7e, 0x85, 0x69, 0x49, 0x7c, 0x4d, 0x96, 0x8f, 0x6a, 0xf0, 0x18, 0xd6, 0x7b, 0x5c, 0xc5, 0x30, 0xe5, 0x2b, 0xd5, 0x30, 0xc5, 0x59, 0x0c, 0x57, 0x20, 0x6d, 0x66, 0x89, 0xcf, 0x60, 0xa9, 0x62, 0xbe, 0xc2, 0xb6, 0x6d, 0xc8, 0xbe, 0xcc, 0xb8, 0x33, 0x82, 0x07, 0x45, 0xe9, 0xa4, 0x81, 0xd2, 0x98, 0xde, 0xa5, 0x68, 0x20, 0x9e, 0x8c, 0xf2, 0x1a, 0x42, 0x68, 0xcd, 0x0a, 0x61, 0xe9, 0xb4, 0x17, 0x23, 0xed, 0x4d, 0xc5, 0xf3, 0x04, 0xe4, 0x1c, 0x64, 0x09, 0xe2, 0x8a, 0x38, 0x69, 0x08, 0x5b, 0xe0, 0x8a, 0xd8, 0xfc, 0xd4, 0x13, 0x50, 0x30, 0x32, 0x18, 0x9f, 0x77, 0x15, 0x9d, 0x4a, 0xbc, 0x42, 0x9c, 0xf9, 0xc3, 0xb2, 0x3e, 0xc0, 0xb2, 0x8c, 0xf3, 0x7f, 0xb4, 0xdb, 0x4e, 0x3a, 0xb8, 0x3b, 0xbc, 0x30, 0xa5, 0x9b, 0xb0, 0x39, 0xa6, 0x8f, 0x59, 0x39, 0xde, 0xc1, 0xb4, 0x66, 0xad, 0xd8, 0x57, 0x08, 0x48, 0x72, 0x97, 0xe4, 0xe1, 0x71, 0x36, 0x23, 0x54, 0x95, 0x00, 0x2d, 0xff, 0xe0, 0x60, 0x78, 0xb0, 0xd3, 0x46, 0x72, 0x65, 0x39, 0xa4, 0x59, 0x5a, 0x86, 0x93, 0x26, 0xd5, 0x19, 0x3b, 0x89, 0xf4, 0x37, 0x86, 0x62, 0x5c, 0x9e, 0x09, 0xb1, 0x7c, 0xad, 0x40, 0xa9, 0x5f, 0x74, 0x02, 0xdc, 0x07, 0x7f, 0xf0, 0xcf, 0xbf, 0x8e, 0x5d, 0x90, 0x71, 0x25, 0x65, 0xff, 0x93, 0xe1, 0xaa, 0xb8, 0x15, 0xe9, 0x2a, 0x29, 0xa1, 0x67, 0x75, 0xab, 0xbf, 0x95, 0xc1, 0x47, 0x06, 0x6f, 0x32, 0x89, 0x79, 0x13, 0xcb, 0xce, 0x54, 0x4c, 0x73, 0xe3, 0x37, 0x5d, 0x32, 0x0d, 0x26, 0x09, 0xf4, 0x8b, 0x57, 0x05, 0x8d, 0x71, 0xd2, 0xcb, 0x3c, 0xa7, 0x93, 0xf4, 0x75, 0x49, 0x16, 0x74, 0xe4, 0xe1, 0x67, 0xf6, 0xb7, 0x5e, 0x10, 0x1c, 0x19, 0xe5, 0x80, 0x71, 0xc7, 0x28, 0x2e, 0xdb, 0x86, 0x7a, 0xce, 0x66, 0xc1, 0xdf, 0xfc, 0xdd, 0x4f, 0x40, 0x51, 0xdc, 0xc1, 0x67, 0xf3, 0xcd, 0x42, 0x5e, 0x30, 0xab, 0xda, 0x90, 0x48, 0xd0, 0x79, 0xb8, 0x47, 0x33, 0x38, 0x27, 0x2f, 0x9c, 0xea, 0xbe, 0x8d, 0x4f, 0xb9, 0xe0, 0xc8, 0x51, 0xea, 0x5f, 0x1d, 0x45, 0x1a, 0xb1, 0x43, 0xf9, 0xce, 0x30, 0x08, 0x5e, 0x1d, 0x6b, 0x7f, 0xcb, 0xc4, 0x10, 0xcc, 0xe3, 0x31, 0xe2, 0x84, 0x95, 0x60, 0x12, 0x78, 0x9f, 0xe3, 0x91, 0x4b, 0xd3, 0x92, 0xff, 0xc5, 0xd7, 0x89, 0x03, 0x8c, 0xbb, 0xea, 0x78, 0x9c, 0x1a, 0xe1, 0x9b, 0x48, 0x2b, 0x2c, 0xab, 0x21, 0x18, 0xa0, 0xdd, 0x4a, 0xde, 0x97, 0xf8, 0xe7, 0x1a, 0xde, 0xc5, 0xb2, 0x93, 0xf6, 0x7c, 0xa9, 0x17, 0xf2, 0x28, 0x4e, 0xae, 0x3e, 0xba, 0xc7, 0x80, 0x1a, 0xae, 0x51, 0x2e, 0xe2, 0xef, 0xb4, 0xc2, 0x5f, 0xfe, 0x3a, 0x66, 0xe8, 0xe3, 0x36, 0xaf, 0x00, 0x3f, 0x8e, 0x2c, 0xc1, 0x75, 0xe6, 0xe1, 0x0a, 0x32, 0x3d, 0xf6, 0x76, 0x7a, 0x5d, 0xca, 0x48, 0x49, 0xd2, 0x7a, 0xa7, 0x15, 0x64, 0x6b, 0x2a, 0xad, 0x67, 0x4e, 0x23, 0xad, 0xe1, 0xa4, 0xe9, 0x71, 0xcd, 0x7f, 0x5d, 0x08, 0x0a, 0xbe, 0xb2, 0xc2, 0x74, 0x1d, 0x4c, 0x27, 0x1c, 0xf5, 0x15, 0xd2, 0x47, 0xbc, 0x42, 0x6e, 0xcc, 0x8c, 0x57, 0x81, 0xb3, 0xde, 0xbe, 0x6a, 0x25, 0x4c, 0x37, 0x5d, 0x27, 0x17, 0x43, 0xa1, 0x07, 0x5e, 0x1c, 0x8c, 0x1f, 0xa8, 0x1b, 0x1c, 0x19, 0xc4, 0xb5, 0xb5, 0x30, 0x6d, 0x7b, 0x0c, 0xf1, 0x96, 0x23, 0xb3, 0xef, 0x81, 0x35, 0xee, 0x35, 0x69, 0x05, 0xf2, 0x0a, 0xc8, 0x13, 0x7b, 0xbe, 0x8a, 0xf9, 0x3f, 0x7e, 0x2a, 0x9b, 0x84, 0xa4, 0x27, 0xbd, 0x17, 0x8a, 0xe3, 0x18, 0xb9, 0xc6, 0xf8, 0x51, 0x7c, 0x23, 0xa6, 0x32, 0x5a, 0x34, 0x6c, 0xf0, 0xc9, 0x62, 0x15, 0x18, 0xcc, 0x4a, 0x2f, 0xc4, 0x7e, 0x49, 0x29, 0xc1, 0x23, 0x6f, 0x01, 0xed, 0x45, 0x99, 0xb4, 0x7c, 0x1e, 0x47, 0x57, 0x28, 0x12, 0xe7, 0x4d, 0xd2, 0x8a, 0xbd, 0xbf, 0x3c, 0x89, 0xbd, 0x7f, 0x82, 0x38, 0xf3, 0xf4, 0x3a, 0x48, 0x63, 0x9b, 0x76, 0xf6, 0x54, 0x53, 0xcb, 0xa0, 0x1c, 0x24, 0xed, 0xff, 0x8b, 0x95, 0x97, 0xd3, 0xfe, 0x47, 0x3e, 0x3c, 0x18, 0x1e, 0x40, 0xdc, 0x5f, 0x45, 0xbb, 0x38, 0x17, 0xe7, 0x09, 0x7a, 0xa8, 0x72, 0xbe, 0x17, 0xe1, 0xef, 0xcb, 0xeb, 0x83, 0x72, 0xec, 0x99, 0xc5, 0x43, 0xef, 0x6d, 0x90, 0x2d, 0xc9, 0xac, 0x5d, 0x08, 0xa7, 0x21, 0x6d, 0x7a, 0x24, 0x61, 0xf2, 0xa4, 0x34, 0x80, 0xcd, 0xdf, 0xe8, 0x84, 0x3c, 0xc8, 0x0b, 0xf9, 0x84, 0x0d, 0x88, 0xd0, 0x13, 0x60, 0x5f, 0x78, 0x0a, 0x5c, 0xbd, 0xce, 0x23, 0x29, 0xa4, 0xd7, 0x34, 0xf9, 0xaa, 0x78, 0xa3, 0x32, 0x47, 0x1f, 0xf5, 0xd7, 0x52, 0x0e, 0x72, 0xb5, 0x9c, 0x8a, 0x05, 0x05, 0x76, 0x92, 0xa5, 0xc5, 0xa9, 0xf7, 0x86, 0x3d, 0xbb, 0xc8, 0xa2, 0xd5, 0x7b, 0xc3, 0x0b, 0xce, 0xd8, 0x1c, 0x9a, 0xb3, 0x79, 0x50, 0x59, 0xa9, 0x8f, 0xca, 0x57, 0x72, 0xec, 0x92, 0x9b, 0xee, 0x0f, 0x0f, 0xc6, 0x4e, 0x91, 0xc4, 0x47, 0x7c, 0x3f, 0x74, 0x40, 0x53, 0xe4, 0xea, 0xd0, 0x26, 0xb9, 0x7a, 0xe6, 0xcd, 0x60, 0x89, 0x0e, 0x36, 0x7d, 0xbf, 0x69, 0x1d, 0x8e, 0x1f, 0x3f, 0xef, 0xc5, 0x6d, 0xe3, 0x5c, 0xa5, 0xd0, 0x16, 0x92, 0xa9, 0xf4, 0xa7, 0x6d, 0xc2, 0xcc, 0xf7, 0x35, 0xa8, 0x76, 0xa4, 0xee, 0x48, 0xce, 0x61, 0xbb, 0xb6, 0x1f, 0xce, 0x2d, 0x7c, 0x90, 0x65, 0x63, 0x52, 0x60, 0x0e, 0xbe, 0xa7, 0xd1, 0x7a, 0xb4, 0xf0, 0x87, 0x7c, 0xf2, 0xd3, 0x9e, 0x73, 0x32, 0xf5, 0xe7, 0x10, 0x8e, 0xb9, 0xaa, 0x3e, 0x84, 0x70, 0x31, 0x59, 0x07, 0xf9, 0x39, 0x44, 0xd0, 0x1d, 0x41, 0x77, 0x58, 0x9e, 0x83, 0x4f, 0x30, 0xbc, 0x29, 0xad, 0xe1, 0x2e, 0xe4, 0x3f, 0x0b, 0x5f, 0x98, 0x90, 0x83, 0x33, 0x3c, 0x07, 0x7b, 0xd7, 0xfa, 0x55, 0xb6, 0x21, 0xd2, 0xf4, 0x21, 0x38, 0xf1, 0x99, 0xce, 0x5f, 0x57, 0x84, 0xe6, 0x20, 0xac, 0x7e, 0x0e, 0x05, 0xf8, 0x14, 0xe2, 0x33, 0x03, 0xcb, 0xca, 0x8f, 0x59, 0x8b, 0x57, 0x98, 0x2a, 0x21, 0x1f, 0xdd, 0x65, 0xec, 0x2e, 0x85, 0x32, 0x74, 0xfb, 0xd8, 0x3d, 0x17, 0x7c, 0x38, 0x7a, 0x4c, 0x74, 0x3e, 0x08, 0x73, 0x70, 0x42, 0x1e, 0xae, 0x6e, 0xd3, 0x84, 0x5d, 0x11, 0x9c, 0x43, 0x3f, 0x07, 0x05, 0xa9, 0x56, 0x07, 0xbe, 0xe7, 0x61, 0xec, 0x55, 0x30, 0x1f, 0xe6, 0x61, 0xcb, 0xe8, 0x99, 0x8f, 0x4f, 0x05, 0xd7, 0xee, 0xed, 0x09, 0xb5, 0x73, 0xdb, 0xe6, 0xe0, 0x78, 0xcf, 0x8b, 0xbb, 0xe4, 0x55, 0x50, 0x91, 0x38, 0x7d, 0xf0, 0xe7, 0x24, 0x63, 0x70, 0x8e, 0xea, 0xff, 0xb1, 0x63, 0xb8, 0xed, 0xdc, 0x6e, 0x41, 0x53, 0xac, 0x30, 0x95, 0x63, 0x39, 0x0e, 0x86, 0x14, 0x97, 0xb6, 0x44, 0xd8, 0x54, 0x08, 0xc6, 0x9c, 0xe9, 0xf2, 0x5f, 0x51, 0x48, 0x3f, 0x07, 0x36, 0x61, 0xd9, 0xa1, 0xb8, 0x15, 0xe6, 0x00, 0x62, 0x25, 0x74, 0xd7, 0x91, 0x5b, 0x4f, 0xd1, 0x59, 0x02, 0x1a, 0xdb, 0x5f, 0x65, 0x4c, 0xcd, 0xab, 0xc1, 0x22, 0x31, 0xbb, 0x68, 0xdf, 0xd7, 0x39, 0xc7, 0xc0, 0xd0, 0xaa, 0x81, 0xa1, 0x59, 0xbb, 0xae, 0xf1, 0xca, 0xdc, 0x9a, 0x8a, 0x55, 0x23, 0x43, 0xa7, 0xe0, 0xbc, 0x20, 0xdd, 0x42, 0xd6, 0x66, 0xe2, 0x7e, 0x6b, 0x54, 0x27, 0xb4, 0xcb, 0x25, 0x4f, 0x33, 0x76, 0x96, 0x70, 0xf6, 0x4f, 0xb4, 0xde, 0x86, 0xf3, 0xa8, 0x94, 0x4e, 0x45, 0x2a, 0xdd, 0xe0, 0x96, 0xe9, 0x04, 0x1d, 0x1c, 0x4e, 0x1d, 0x1e, 0x94, 0xbf, 0xe3, 0x85, 0x70, 0xea, 0xdb, 0xdc, 0x9b, 0x35, 0x03, 0x1e, 0xd3, 0x91, 0x01, 0x4f, 0xf5, 0xef, 0x5e, 0xb8, 0xf6, 0x1f, 0x87, 0x01, 0xd7, 0xc5, 0xd5, 0xc3, 0x20, 0xac, 0xc9, 0x5c, 0xd7, 0x00, 0xb6, 0x43, 0x03, 0x87, 0x06, 0x66, 0xde, 0xe7, 0x06, 0x4f, 0xf0, 0x77, 0x23, 0xbf, 0xfb, 0xcd, 0x2c, 0x8c, 0xe1, 0xce, 0x8d, 0x11, 0x06, 0x1b, 0xe9, 0x5e, 0xcf, 0x5c, 0x6f, 0x03, 0xa4, 0x6c, 0x6d, 0xb3, 0xf0, 0x21, 0x0d, 0x07, 0x07, 0xcf, 0x60, 0xa8, 0xe4, 0x19, 0xd5, 0xc4, 0xd2, 0x87, 0x02, 0xef, 0x7d, 0xa1, 0x9f, 0x62, 0xdd, 0x7e, 0x8a, 0xfc, 0xd0, 0x83, 0xf8, 0xeb, 0xd0, 0xc0, 0xd4, 0xef, 0xab, 0x97, 0x17, 0x29, 0x42, 0x3b, 0xc1, 0x4e, 0x76, 0x87, 0xb0, 0x4f, 0x3b, 0x0e, 0xa6, 0x1e, 0x4c, 0xd5, 0xa4, 0x68, 0xe7, 0xe2, 0xd0, 0x80, 0xbc, 0xc6, 0x0d, 0xbc, 0xca, 0x1c, 0xb9, 0x6e, 0x11, 0xd8, 0x8a, 0xef, 0x77, 0x03, 0x9d, 0x65, 0x08, 0x6d, 0xc1, 0x5f, 0x87, 0xba, 0x88, 0x76, 0xfc, 0x9a, 0x07, 0xb0, 0xfc, 0x81, 0xb8, 0x93, 0x77, 0x87, 0x9c, 0xc9, 0x31, 0x5c, 0x61, 0xc0, 0x64, 0xd5, 0xfa, 0x70, 0x8c, 0x39, 0xb4, 0x4e, 0xdf, 0x2a, 0xb0, 0x79, 0x56, 0x20, 0x1f, 0xaa, 0xef, 0xc0, 0x14, 0xb1, 0x12, 0xc1, 0x3f, 0x45, 0xf6, 0x8c, 0x9d, 0x44, 0xfc, 0xe0, 0x05, 0xb2, 0xea, 0xe9, 0x60, 0xbb, 0x48, 0x18, 0x43, 0x4b, 0xd0, 0x4e, 0x30, 0xd9, 0xf2, 0xc2, 0xb9, 0xec, 0x48, 0x98, 0xb4, 0xde, 0x59, 0xcd, 0x08, 0xc3, 0x66, 0x5e, 0x29, 0x2d, 0x33, 0xb1, 0xa5, 0x9e, 0xf5, 0xd8, 0xef, 0x1b, 0x9e, 0xf9, 0x10, 0x2c, 0x69, 0x89, 0x1f, 0xb5, 0xbd, 0x78, 0xd8, 0x06, 0x33, 0xb1, 0x76, 0x24, 0x21, 0x80, 0x27, 0xb8, 0xc4, 0x28, 0xe6, 0x49, 0xe5, 0xd5, 0xf3, 0x1e, 0xa0, 0x28, 0xb1, 0x2f, 0xa7, 0x44, 0x2a, 0x07, 0x4b, 0x40, 0x7a, 0xc9, 0x41, 0x2d, 0xd1, 0x0a, 0xb9, 0x0e, 0x0e, 0x2e, 0x57, 0x47, 0x4c, 0xeb, 0xd0, 0xe8, 0xcc, 0x06, 0x7f, 0x63, 0x5f, 0x3a, 0x34, 0x55, 0xc5, 0x56, 0x23, 0x4d, 0x6a, 0xc9, 0xd6, 0x85, 0x2c, 0x21, 0xcc, 0x12, 0x67, 0x3b, 0x38, 0x9e, 0xbc, 0x90, 0xa1, 0x0c, 0x7a, 0xab, 0x77, 0x18, 0xd3, 0xd8, 0xb4, 0x19, 0xc5, 0x98, 0x0f, 0xd5, 0x66, 0x0f, 0x4b, 0x46, 0x73, 0x6b, 0xad, 0xc1, 0xd8, 0x3e, 0x79, 0x5a, 0xe3, 0x9b, 0x95, 0x7c, 0xc6, 0xbf, 0x74, 0x3e, 0xc9, 0x46, 0x71, 0x35, 0x59, 0x22, 0xcf, 0x06, 0x8b, 0x77, 0x39, 0xce, 0x60, 0x0f, 0xef, 0x0a, 0x5b, 0x43, 0x9b, 0x34, 0x30, 0x17, 0xfe, 0xe3, 0x29, 0x4c, 0x69, 0x8c, 0x14, 0xd9, 0x44, 0xbb, 0x49, 0x21, 0xc4, 0x5d, 0xd8, 0x7b, 0x8e, 0x67, 0x85, 0xec, 0x24, 0x45, 0x7c, 0x82, 0x06, 0xd2, 0x81, 0xdc, 0x98, 0xaa, 0xe9, 0xf0, 0xc0, 0xe1, 0xc1, 0xd9, 0x29, 0x2f, 0x70, 0x68, 0x29, 0x62, 0x22, 0x4b, 0xac, 0x8c, 0x72, 0xe7, 0x54, 0x36, 0x4c, 0x75, 0x13, 0xa6, 0xd9, 0xf6, 0x19, 0x69, 0x6e, 0x9a, 0xd9, 0x88, 0x6d, 0x40, 0x3e, 0x52, 0x6e, 0x48, 0xeb, 0xff, 0x8f, 0x6e, 0x65, 0xae, 0xd4, 0xf6, 0xcc, 0x4b, 0xb1, 0x82, 0x99, 0x9d, 0xac, 0x27, 0xd3, 0x69, 0xf0, 0x0a, 0x11, 0xb2, 0xa6, 0xa4, 0xd5, 0xef, 0x78, 0x72, 0x62, 0x4d, 0x67, 0x6f, 0xb2, 0x81, 0xd2, 0x24, 0x76, 0xec, 0xc5, 0xb9, 0x08, 0x79, 0xb3, 0x12, 0xe5, 0x6f, 0xb2, 0x1e, 0x62, 0x9b, 0xc9, 0xe7, 0x04, 0x48, 0x93, 0x5b, 0x70, 0x9c, 0xe4, 0xa7, 0x59, 0xbc, 0xf5, 0x49, 0x98, 0xc9, 0xa7, 0x06, 0x66, 0xf2, 0x09, 0x02, 0x0c, 0xb7, 0x19, 0x3c, 0xc7, 0xb0, 0xe6, 0x7a, 0xe6, 0xfd, 0xf1, 0xfd, 0x7f, 0x2d, 0xf6, 0x3f, 0x49, 0xf4, 0xb7, 0x77, 0x22, 0x17, 0xea, 0x88, 0xa6, 0x36, 0x0d, 0x6c, 0x1a, 0x50, 0x60, 0xf1, 0x40, 0xaf, 0x65, 0xf7, 0x40, 0xfb, 0x85, 0x43, 0x03, 0x65, 0x7f, 0xe5, 0xb6, 0x46, 0x3e, 0x75, 0x4a, 0xf0, 0x22, 0xd2, 0x76, 0x76, 0x7c, 0xca, 0x42, 0x4f, 0x62, 0x7f, 0x21, 0x9f, 0x2a, 0x2c, 0x23, 0x99, 0x9e, 0xfd, 0xa7, 0x13, 0xd9, 0x7a, 0x7b, 0xeb, 0xb5, 0x67, 0x67, 0x07, 0x79, 0x76, 0x3c, 0xe6, 0xc7, 0x38, 0x3e, 0x6c, 0xa3, 0x4c, 0x3b, 0xdb, 0x4e, 0x3e, 0xdb, 0xe8, 0xef, 0xd5, 0x77, 0xd3, 0x08, 0x5f, 0xac, 0xd5, 0xcc, 0xc6, 0xb5, 0x40, 0xbe, 0xd9, 0x18, 0x11, 0x08, 0x2d, 0xdf, 0x86, 0xd9, 0x38, 0x0a, 0x13, 0x26, 0x4a, 0x9d, 0xd4, 0x11, 0x76, 0xdb, 0x2e, 0x1f, 0x83, 0x4a, 0xe7, 0xd9, 0x01, 0xf0, 0x22, 0xce, 0x87, 0x69, 0x01, 0x07, 0x69, 0x51, 0x4d, 0x98, 0x0f, 0xd6, 0x5e, 0xca, 0x61, 0xbf, 0x31, 0x23, 0x5e, 0xa7, 0x34, 0xb8, 0xca, 0xa3, 0x0f, 0xd7, 0x69, 0x31, 0xd7, 0x28, 0x9f, 0x6b, 0x04, 0x30, 0x24, 0xea, 0x04, 0x23, 0x5a, 0xd4, 0xfb, 0x73, 0x2c, 0x71, 0x55, 0x66, 0x9c, 0x62, 0x99, 0xc5, 0x8d, 0x60, 0xe1, 0x7a, 0xe9, 0x5c, 0x2f, 0x53, 0x71, 0x95, 0xd0, 0x24, 0x8d, 0xd9, 0x3d, 0xdf, 0xc7, 0x5a, 0x50, 0x1f, 0x3f, 0xfb, 0x4f, 0x1f, 0x8d, 0x87, 0xe8, 0x9c, 0xef, 0xdb, 0xa0, 0x38, 0xc2, 0x61, 0x8f, 0x7e, 0x76, 0x8e, 0xd4, 0x06, 0x86, 0xe4, 0x22, 0xad, 0x8e, 0xe7, 0xd9, 0xa5, 0x2d, 0xa1, 0xda, 0xdb, 0x7a, 0x4d, 0xb3, 0xab, 0xb1, 0xb5, 0x05, 0xc6, 0x1c, 0xa3, 0x96, 0xe8, 0xc5, 0xd5, 0x3c, 0xc7, 0x0c, 0x48, 0xf0, 0x1c, 0x43, 0x1e, 0x93, 0xeb, 0x65, 0xf3, 0x88, 0xf9, 0x23, 0x73, 0xad, 0xc6, 0x8d, 0xa6, 0x39, 0x34, 0xd3, 0xb1, 0x5e, 0xde, 0x08, 0xce, 0x20, 0x17, 0xaf, 0xb7, 0x02, 0xcf, 0x95, 0x79, 0xea, 0xe5, 0xa6, 0xcc, 0x38, 0x7d, 0x24, 0x4c, 0xba, 0x26, 0x0b, 0x95, 0x60, 0xc6, 0xe7, 0xc7, 0x19, 0x7b, 0x1a, 0xa5, 0xea, 0x14, 0x4f, 0xbd, 0x96, 0x97, 0xfc, 0xda, 0xdb, 0xdb, 0x89, 0x1e, 0x1e, 0x19, 0xf0, 0xac, 0xb6, 0x09, 0x5c, 0xea, 0xc4, 0x14, 0xa1, 0x2c, 0x26, 0x8c, 0x1d, 0xa3, 0x1d, 0x43, 0xd2, 0x97, 0x92, 0x9d, 0x31, 0x8b, 0x96, 0x27, 0x9b, 0xe4, 0x20, 0x32, 0x2d, 0x16, 0x3a, 0xd1, 0xcf, 0x2d, 0xb4, 0x21, 0xfd, 0x12, 0xfc, 0x05, 0x8e, 0xc5, 0xd8, 0x69, 0x03, 0xcb, 0x63, 0xce, 0x48, 0x39, 0xbb, 0xc2, 0xa9, 0x4e, 0xc9, 0x33, 0xf5, 0x32, 0x25, 0xe4, 0x4f, 0x28, 0xe1, 0x88, 0x26, 0x79, 0xaa, 0xb9, 0x14, 0x6c, 0x05, 0xd9, 0x18, 0xc0, 0x72, 0x1c, 0x5c, 0x8e, 0x33, 0x76, 0x6e, 0x62, 0x29, 0xf1, 0x4b, 0x4a, 0xe9, 0xfe, 0xbf, 0x28, 0x45, 0xec, 0x7f, 0xc9, 0x36, 0x4d, 0xca, 0x96, 0x43, 0xd6, 0x7c, 0x77, 0x08, 0x08, 0xa4, 0xfd, 0x8d, 0x76, 0x52, 0x88, 0x21, 0xef, 0x12, 0xb2, 0x2f, 0xe6, 0x84, 0xb7, 0x9d, 0xce, 0x95, 0x7b, 0xfd, 0x79, 0xab, 0x08, 0x48, 0xd9, 0x55, 0x78, 0xbb, 0xc5, 0x99, 0xf1, 0x79, 0x01, 0xf0, 0x3d, 0xb8, 0x5f, 0x69, 0x4c, 0xc0, 0xdf, 0xfd, 0x86, 0x29, 0xe7, 0xa7, 0xbc, 0x10, 0x0f, 0xd7, 0x5e, 0xd0, 0xf7, 0xc8, 0x35, 0x5b, 0x7e, 0x9d, 0x60, 0xaa, 0xf5, 0xe2, 0x76, 0x1f, 0x20, 0xaf, 0xa9, 0xf2, 0x78, 0x99, 0x11, 0xc0, 0x39, 0x9d, 0xb5, 0xf1, 0xd6, 0xf8, 0x4d, 0xc3, 0x22, 0x18, 0xeb, 0xba, 0x68, 0x07, 0x68, 0xbd, 0x89, 0xef, 0x23, 0x8d, 0x13, 0x5c, 0xe1, 0x37, 0x68, 0xd2, 0x5a, 0x9d, 0x2c, 0xf3, 0x2d, 0x11, 0x67, 0xc2, 0x4f, 0x51, 0xc9, 0xea, 0x1c, 0xb6, 0x79, 0xe9, 0x40, 0xca, 0xc2, 0xd8, 0xaf, 0x34, 0x6d, 0x26, 0xe9, 0x02, 0x52, 0xca, 0x64, 0x05, 0x03, 0x79, 0x30, 0xc7, 0xe0, 0x10, 0xc0, 0x94, 0x98, 0x0d, 0xb9, 0xd0, 0xb5, 0x38, 0xeb, 0x7b, 0xa4, 0x41, 0x12, 0x3a, 0x0e, 0x6d, 0xe7, 0xaf, 0x18, 0xf1, 0x49, 0xd3, 0x83, 0xf0, 0xbd, 0x99, 0x21, 0x58, 0x2b, 0x62, 0x62, 0x0e, 0x4d, 0x24, 0xe5, 0x6e, 0x5c, 0x94, 0x50, 0xd9, 0x06, 0xcb, 0xeb, 0x5e, 0xca, 0xb5, 0x52, 0x66, 0x2b, 0xb8, 0x86, 0x7e, 0x4f, 0x85, 0x8f, 0x68, 0xd5, 0x53, 0x5e, 0x2c, 0x29, 0xe1, 0x2a, 0x0e, 0x8a, 0xd3, 0xd4, 0xf8, 0x9c, 0x2d, 0xae, 0x15, 0xfa, 0x52, 0xd4, 0x1a, 0xdf, 0x93, 0x81, 0x49, 0xc2, 0x22, 0x79, 0x64, 0x5b, 0xc0, 0x9e, 0x84, 0x7c, 0x3f, 0xdc, 0x15, 0x30, 0x61, 0x8b, 0x53, 0x4c, 0xff, 0xb0, 0x2c, 0xe1, 0x3b, 0x65, 0xbc, 0xaf, 0xcd, 0x36, 0xb2, 0x7d, 0xcf, 0xa1, 0xdf, 0x36, 0x3a, 0x41, 0x2f, 0x76, 0xb6, 0xbb, 0xba, 0x30, 0xe7, 0xb3, 0xac, 0x7f, 0x89, 0xf8, 0xaf, 0x18, 0x90, 0x8b, 0x64, 0x8b, 0x12, 0xbe, 0x37, 0xd1, 0x7f, 0x34, 0x60, 0x61, 0x1b, 0x9f, 0xa7, 0x70, 0xed, 0xbb, 0x4b, 0x68, 0xf5, 0xb0, 0x7e, 0x53, 0x5d, 0xc0, 0x5e, 0xdf, 0x09, 0xc3, 0xac, 0xb3, 0x74, 0x57, 0x00, 0xb0, 0xb4, 0x21, 0x21, 0x55, 0x79, 0xe6, 0x28, 0xd3, 0x32, 0x94, 0x53, 0x49, 0x3a, 0xa7, 0xe2, 0xe9, 0x22, 0x27, 0x86, 0xbf, 0xc8, 0xab, 0x4c, 0xe4, 0xa5, 0xd4, 0x8a, 0xf6, 0x0a, 0x8b, 0xa9, 0x9a, 0xd4, 0xab, 0x2b, 0x35, 0x4c, 0x67, 0xb5, 0xe2, 0x5a, 0xbf, 0x2e, 0xee, 0xc7, 0x1c, 0x3c, 0xe1, 0x75, 0x71, 0x5b, 0xc2, 0x8c, 0x65, 0xba, 0x34, 0x0b, 0xf2, 0xb9, 0x2c, 0xe3, 0x63, 0x3b, 0x1d, 0x61, 0x3a, 0xad, 0x90, 0x10, 0xe7, 0x42, 0xf7, 0x1a, 0x27, 0xbf, 0x2b, 0xf5, 0x97, 0x84, 0xae, 0x98, 0x52, 0x5f, 0xf5, 0x91, 0xd4, 0xcf, 0xf6, 0x79, 0x4c, 0x69, 0x39, 0xaa, 0x52, 0x9f, 0x39, 0x85, 0x66, 0xc9, 0xb1, 0x13, 0x84, 0xe3, 0x4c, 0xe8, 0x52, 0xaa, 0x2b, 0xa5, 0x7e, 0x8d, 0xb8, 0xf8, 0x7c, 0x5c, 0x2b, 0xf2, 0xfc, 0x0b, 0xc7, 0x9f, 0x26, 0x65, 0xa9, 0xe1, 0xdb, 0xc6, 0x49, 0xae, 0x9b, 0xf5, 0x7d, 0x42, 0x6f, 0x42, 0x25, 0xa9, 0x7a, 0x29, 0xc3, 0xe8, 0x25, 0xa1, 0xb9, 0xf3, 0x57, 0xfd, 0x20, 0xe9, 0x47, 0x8b, 0x89, 0x5e, 0x36, 0xe9, 0xc7, 0x12, 0x4b, 0xb0, 0xed, 0x6f, 0xf1, 0x17, 0xe8, 0xc7, 0xf1, 0x8d, 0x84, 0xa6, 0x7e, 0xc2, 0x08, 0x3d, 0x45, 0x98, 0x54, 0x3f, 0xeb, 0xac, 0x04, 0x05, 0x63, 0x9d, 0x2b, 0x5e, 0xa4, 0xef, 0xbb, 0xf5, 0xe7, 0xfa, 0x3e, 0x79, 0x15, 0x3e, 0x1b, 0x3c, 0x5d, 0xa6, 0x72, 0x82, 0x11, 0xd9, 0x11, 0xc3, 0xbe, 0xde, 0xdf, 0xcb, 0xd6, 0xc4, 0x1e, 0x3a, 0x40, 0x76, 0x19, 0xee, 0x68, 0x23, 0x2c, 0x2e, 0x3b, 0xad, 0xa9, 0xef, 0x9d, 0x06, 0x48, 0x16, 0xed, 0x4c, 0xb5, 0x23, 0x06, 0x3e, 0x98, 0x2a, 0xfd, 0x2b, 0x1b, 0xae, 0x52, 0x48, 0x93, 0x56, 0xc0, 0x93, 0x58, 0x50, 0x1d, 0x34, 0xe2, 0x7b, 0x09, 0x66, 0x30, 0x84, 0xef, 0xcf, 0xff, 0xb7, 0x1e, 0x7e, 0x88, 0xbf, 0x8f, 0x7b, 0x71, 0xd6, 0x22, 0xc5, 0x45, 0xbf, 0x31, 0x4f, 0x07, 0xfe, 0x6a, 0x84, 0x53, 0x6e, 0x49, 0x25, 0x47, 0xf7, 0xa6, 0xb0, 0xae, 0x27, 0xb4, 0x26, 0x8f, 0x97, 0x25, 0xf6, 0xdb, 0x5a, 0x36, 0x46, 0x53, 0x74, 0xc2, 0xd8, 0xb1, 0x8a, 0xda, 0xdb, 0x5a, 0x8e, 0xed, 0x36, 0xeb, 0x47, 0xb5, 0xd2, 0x62, 0x4c, 0xa5, 0xef, 0xd7, 0xbc, 0x7e, 0xca, 0x83, 0xf4, 0x73, 0x2d, 0x18, 0x03, 0x43, 0x5a, 0x0b, 0x30, 0x86, 0x05, 0x63, 0xe4, 0x95, 0x50, 0x88, 0x8d, 0xf2, 0x7d, 0xe5, 0xe7, 0xfa, 0x5b, 0x81, 0x39, 0xfa, 0x3e, 0xb6, 0x61, 0xb5, 0x04, 0x39, 0x3c, 0x3e, 0x7d, 0xa0, 0x7b, 0x8b, 0xab, 0xf5, 0x7d, 0x31, 0x2b, 0x9d, 0xd8, 0x69, 0xbc, 0x43, 0xec, 0x3f, 0x37, 0xc6, 0x98, 0x5e, 0x36, 0x74, 0x31, 0xaa, 0x3e, 0xd4, 0x5f, 0xda, 0xf2, 0x6b, 0x9a, 0xaf, 0x9f, 0x9e, 0x12, 0xd6, 0x03, 0x48, 0xfa, 0x2d, 0x07, 0xfd, 0x1d, 0x20, 0x87, 0x11, 0x82, 0xf1, 0x3c, 0xca, 0x95, 0xf7, 0xc7, 0xf5, 0x3b, 0x9a, 0x9a, 0x36, 0x2a, 0xd5, 0xc5, 0xcb, 0xc1, 0x29, 0x20, 0x3b, 0x9d, 0xf9, 0x9a, 0xe9, 0x75, 0x30, 0x05, 0x57, 0x01, 0xbb, 0x83, 0x74, 0x0f, 0x8f, 0xc6, 0xba, 0xfc, 0xcb, 0xc1, 0xab, 0x84, 0x66, 0x2e, 0x27, 0x4e, 0x26, 0x20, 0xd5, 0xf7, 0xe9, 0xba, 0xc0, 0x53, 0xab, 0x8f, 0x65, 0xd6, 0x20, 0x3e, 0x5d, 0xd3, 0x78, 0x57, 0x6e, 0x3d, 0x84, 0x86, 0x3a, 0x6c, 0x08, 0x95, 0x40, 0xde, 0xd7, 0xc4, 0xb9, 0xc0, 0x8f, 0xc0, 0x35, 0x87, 0xce, 0x05, 0x3e, 0x05, 0xee, 0xea, 0x8f, 0xc0, 0x3d, 0xa7, 0x01, 0x5c, 0x5f, 0x0b, 0xc2, 0x15, 0x73, 0xb0, 0x64, 0x70, 0x8a, 0x9d, 0x01, 0xf5, 0x01, 0xae, 0xc7, 0x02, 0xc8, 0x9b, 0xb9, 0x4a, 0xdf, 0x0f, 0x2d, 0x4a, 0x35, 0xd2, 0x6c, 0xee, 0x83, 0x3f, 0xd7, 0x4f, 0xcc, 0x0c, 0xc2, 0xbc, 0x99, 0xcb, 0x91, 0x38, 0xaf, 0x40, 0xd7, 0xfc, 0xd2, 0x7e, 0x08, 0xbf, 0xf2, 0xa1, 0xbe, 0x4f, 0xc1, 0xd8, 0xd7, 0x12, 0x2f, 0xf7, 0x53, 0x20, 0xa3, 0xd1, 0xf7, 0x21, 0x9d, 0x14, 0x16, 0x9a, 0x6d, 0xba, 0x93, 0xc2, 0xd4, 0x5a, 0x86, 0xc4, 0x5b, 0x08, 0x3b, 0x87, 0x90, 0xfe, 0xea, 0x45, 0x38, 0x62, 0xf6, 0x85, 0x87, 0xe2, 0x4e, 0x82, 0x06, 0xad, 0xca, 0x65, 0x41, 0xb9, 0x46, 0xbe, 0xaf, 0x66, 0x93, 0x8c, 0x70, 0x61, 0xab, 0xae, 0x8f, 0x8a, 0x33, 0xe0, 0x33, 0xcb, 0x3c, 0x11, 0xb5, 0xcb, 0x6c, 0x1f, 0xaf, 0x15, 0x1c, 0xb3, 0xb3, 0x3c, 0xc6, 0xc1, 0x96, 0x29, 0x91, 0x37, 0x96, 0xa5, 0x28, 0xaf, 0xe9, 0x3b, 0x7e, 0x66, 0xb6, 0x2e, 0x73, 0x23, 0xe4, 0x17, 0xf2, 0x9e, 0xc2, 0x54, 0x81, 0x5d, 0x0e, 0x39, 0x9a, 0xc8, 0x1a, 0xde, 0x0a, 0x39, 0xca, 0x2b, 0x40, 0x67, 0x78, 0x53, 0xbc, 0x23, 0x2d, 0xdd, 0x52, 0xc2, 0x09, 0x87, 0x38, 0x07, 0x29, 0x34, 0x24, 0xe4, 0x95, 0xa6, 0x6d, 0x2c, 0x13, 0x4c, 0x69, 0xf9, 0x86, 0xa6, 0x26, 0x49, 0x8b, 0x95, 0xd0, 0x2f, 0x90, 0x93, 0xa6, 0xb3, 0xce, 0x27, 0x31, 0xc6, 0xe3, 0x9f, 0x15, 0x66, 0x9c, 0x36, 0x12, 0x76, 0x1e, 0xde, 0x6c, 0x1c, 0x8a, 0xac, 0x89, 0x3e, 0x81, 0xab, 0xfc, 0x19, 0x96, 0xbd, 0x42, 0xda, 0x66, 0xa7, 0xb0, 0xd6, 0x49, 0x27, 0x3d, 0xaf, 0x0d, 0x51, 0x8f, 0x08, 0xcb, 0x9c, 0x59, 0xd9, 0xf9, 0x9f, 0x5b, 0x6b, 0x6e, 0xfc, 0x58, 0xdf, 0x41, 0x3b, 0xdd, 0xc8, 0x69, 0xa5, 0x3c, 0x01, 0x18, 0xc2, 0x35, 0x67, 0x03, 0xc6, 0xde, 0x94, 0x1f, 0x80, 0xfb, 0x1d, 0x26, 0x90, 0xe2, 0x5e, 0xfc, 0x35, 0xc7, 0xe7, 0xe3, 0xaf, 0x29, 0xc6, 0x67, 0x72, 0x1a, 0x77, 0x0b, 0x48, 0x74, 0xb5, 0xb0, 0xc6, 0x04, 0xbb, 0x9b, 0xdf, 0xd0, 0xe6, 0x71, 0xd8, 0xbf, 0x5e, 0x1a, 0x76, 0x60, 0xae, 0x26, 0x46, 0xd3, 0x91, 0x4b, 0xc3, 0xfe, 0xf9, 0x1e, 0xe6, 0x55, 0xd7, 0xe1, 0x88, 0x66, 0x0b, 0xdf, 0x8d, 0x1f, 0xa6, 0xe3, 0xa8, 0xd0, 0xb4, 0xb1, 0xcf, 0xbe, 0xb6, 0xef, 0xe8, 0x46, 0x92, 0x8f, 0xdf, 0xbc, 0x67, 0xc1, 0x05, 0x7d, 0x6e, 0x7f, 0xcf, 0xb1, 0x8d, 0x0b, 0x3f, 0x06, 0xed, 0xae, 0xc4, 0x1b, 0x38, 0xca, 0x19, 0x37, 0x9e, 0x64, 0x0e, 0xcc, 0x15, 0x7a, 0x1a, 0xfa, 0x02, 0x93, 0x70, 0xa6, 0x6e, 0xf5, 0x00, 0x59, 0xba, 0x69, 0xda, 0x68, 0xd8, 0xb9, 0x79, 0xdb, 0xb0, 0x73, 0xe3, 0x0f, 0xd4, 0x41, 0xa9, 0x61, 0xe1, 0x66, 0x6e, 0x60, 0x11, 0x94, 0x1b, 0x96, 0x6d, 0x2a, 0x03, 0x0b, 0x20, 0x68, 0xd8, 0xb4, 0xa9, 0xa9, 0xfa, 0x18, 0x3a, 0xc8, 0xce, 0xb6, 0x61, 0xcf, 0xa6, 0x11, 0xbf, 0x3b, 0xf1, 0xbb, 0xc9, 0xb0, 0x65, 0xb3, 0x98, 0x6c, 0xd9, 0xe0, 0x77, 0x0b, 0x96, 0xb6, 0x04, 0xa1, 0xda, 0x57, 0x4d, 0xb6, 0x23, 0x85, 0x25, 0x9b, 0x3e, 0x25, 0x00, 0x6d, 0xf1, 0x79, 0xe1, 0xa7, 0xa1, 0x53, 0xd8, 0xa1, 0x69, 0xfc, 0x14, 0x3a, 0x29, 0x8e, 0x6c, 0xdb, 0x34, 0xc0, 0xb6, 0x68, 0x12, 0xf8, 0xf4, 0x23, 0x47, 0x6c, 0xd8, 0x8e, 0x29, 0xfe, 0x2b, 0xd2, 0x6e, 0xe5, 0x13, 0xa0, 0x9d, 0x98, 0x2a, 0x91, 0x49, 0x95, 0xc0, 0x9e, 0xe8, 0x53, 0x60, 0xf3, 0xd3, 0x58, 0x17, 0x13, 0xa6, 0xe9, 0xc1, 0xa7, 0x03, 0x1f, 0xb2, 0x07, 0x93, 0x4e, 0xfb, 0x6d, 0x23, 0xad, 0xaa, 0x95, 0xb2, 0x95, 0x9f, 0xb4, 0x7f, 0xaf, 0xe1, 0xef, 0xd2, 0xdc, 0x74, 0x72, 0xd6, 0xf0, 0x7d, 0x80, 0xad, 0xd4, 0xb0, 0xf5, 0x1f, 0xcd, 0x89, 0xb0, 0x76, 0x34, 0x0f, 0xc5, 0x6d, 0x24, 0x5b, 0xa4, 0x93, 0x6c, 0xc6, 0xae, 0x5d, 0x93, 0x21, 0xbf, 0x0a, 0x80, 0x1b, 0x7b, 0xdf, 0xdf, 0x0b, 0x05, 0x01, 0xb8, 0x2e, 0xbd, 0x66, 0x06, 0x60, 0xc1, 0x49, 0xb3, 0x61, 0xb1, 0xb1, 0xab, 0x85, 0xef, 0xa1, 0x18, 0x05, 0x3b, 0xf6, 0x22, 0x59, 0x1a, 0x2a, 0x0d, 0xf8, 0x4c, 0xae, 0xec, 0xda, 0xcb, 0x56, 0x72, 0xd6, 0xa3, 0xbf, 0x9f, 0x43, 0xfd, 0xc2, 0xff, 0x99, 0xa3, 0xb2, 0x24, 0x2f, 0x34, 0xa4, 0x75, 0x25, 0x42, 0x4b, 0x97, 0x24, 0x60, 0x01, 0x09, 0xe1, 0x66, 0xc3, 0x95, 0xce, 0x49, 0xf2, 0x5c, 0x45, 0x62, 0x5b, 0x52, 0x96, 0x68, 0xaa, 0x65, 0x40, 0xae, 0x22, 0x89, 0xae, 0x7a, 0x0d, 0xd3, 0xa0, 0x95, 0x34, 0x7e, 0xbd, 0x86, 0x8d, 0x12, 0xd2, 0x09, 0xb8, 0xcf, 0xa9, 0x95, 0x12, 0x6d, 0xd2, 0x69, 0x97, 0xa7, 0x92, 0xcd, 0x29, 0x35, 0xa8, 0xc9, 0x58, 0x87, 0x62, 0xc8, 0xa3, 0xbb, 0x47, 0x84, 0xa5, 0x3f, 0xa5, 0xc9, 0x39, 0x1b, 0xa6, 0xee, 0x28, 0x86, 0xa9, 0xed, 0x05, 0xde, 0x43, 0x2d, 0xeb, 0x3d, 0x51, 0x96, 0x98, 0xec, 0x0f, 0x6d, 0x25, 0xab, 0xe1, 0x95, 0x44, 0xa7, 0x6e, 0xd6, 0x4e, 0x7c, 0x11, 0x6a, 0xac, 0x9c, 0x6e, 0x46, 0x51, 0x55, 0x9f, 0xe4, 0xe3, 0x31, 0xf7, 0x28, 0x8f, 0x31, 0x05, 0xcb, 0xf3, 0x49, 0x1e, 0x71, 0x5e, 0x6b, 0xd1, 0x64, 0xa1, 0x85, 0x2c, 0x74, 0x9f, 0xb9, 0x0f, 0xdc, 0x34, 0x6e, 0x9f, 0x2f, 0xd9, 0xb5, 0x8e, 0xac, 0x88, 0xa5, 0x35, 0x8b, 0x16, 0x55, 0xa6, 0xf5, 0x9a, 0x43, 0x4f, 0x48, 0x0a, 0x3e, 0x1e, 0x7c, 0x7c, 0xdc, 0x33, 0x60, 0x7a, 0x84, 0x6e, 0x9b, 0x20, 0x5d, 0x68, 0x8e, 0xb9, 0x2c, 0x1d, 0x93, 0x30, 0x7e, 0x28, 0xa4, 0x45, 0x7b, 0x61, 0x9e, 0x24, 0x9b, 0xdf, 0x1b, 0x5e, 0xf8, 0x89, 0xcd, 0x15, 0xb8, 0x6a, 0xf1, 0xba, 0xf7, 0xee, 0x0f, 0xcc, 0x2b, 0x17, 0x71, 0x87, 0xd2, 0x71, 0xb1, 0x4f, 0xae, 0x22, 0x5f, 0x61, 0x25, 0x3d, 0x7d, 0x4a, 0x72, 0xd1, 0x0f, 0x26, 0xe8, 0x48, 0x13, 0xaf, 0xe6, 0x8f, 0x86, 0x76, 0x75, 0x41, 0x5e, 0xfb, 0x76, 0xff, 0x2d, 0xcc, 0x45, 0x0c, 0xaa, 0x2b, 0x24, 0x8f, 0xb0, 0x84, 0x66, 0x72, 0x1a, 0xf6, 0x5d, 0x4b, 0x4c, 0xfe, 0x05, 0x17, 0xc6, 0x96, 0x44, 0xb6, 0xa8, 0x50, 0xb2, 0x9e, 0xce, 0xac, 0x92, 0xed, 0x7b, 0x81, 0x1d, 0x85, 0x9c, 0xd1, 0x1f, 0x64, 0xbb, 0x38, 0x6f, 0x91, 0xbd, 0x1e, 0x71, 0xee, 0x22, 0xe0, 0xe5, 0x34, 0x8d, 0x91, 0x2d, 0xd9, 0x6f, 0xd2, 0x02, 0xc6, 0xba, 0xe5, 0x21, 0x2d, 0xe4, 0x24, 0xca, 0x2c, 0x09, 0xbd, 0xa6, 0xe6, 0x94, 0x56, 0x26, 0x57, 0xbd, 0xf2, 0xfc, 0x2b, 0xfb, 0xab, 0x3e, 0x19, 0x06, 0x4f, 0x93, 0x5a, 0x15, 0x5d, 0xff, 0xda, 0x81, 0xd7, 0x0e, 0xd4, 0x7e, 0xb2, 0x1d, 0x94, 0xa8, 0xbb, 0x18, 0xa6, 0x3d, 0x3b, 0x1b, 0xa6, 0x75, 0x5a, 0xd5, 0xfb, 0xe5, 0xfb, 0x42, 0xd5, 0xd1, 0x01, 0xcd, 0x42, 0xa9, 0x76, 0x0c, 0x74, 0x1d, 0x40, 0x4a, 0xf7, 0xac, 0x61, 0x87, 0x31, 0x62, 0xf2, 0x23, 0xee, 0x34, 0x49, 0xf1, 0x38, 0x9f, 0x85, 0x5b, 0xf4, 0x8f, 0xdc, 0x4e, 0x5b, 0xb6, 0x9d, 0x0f, 0x1d, 0xc0, 0xba, 0xcc, 0xd0, 0x2a, 0xe4, 0xdb, 0xe9, 0x44, 0x06, 0x4b, 0x7b, 0x11, 0x8f, 0x3b, 0xe9, 0xb4, 0x25, 0xfd, 0x4e, 0x4b, 0x9f, 0xf2, 0xcb, 0xd2, 0xcb, 0x8b, 0x8e, 0xa6, 0x2d, 0xe8, 0x46, 0xd7, 0xd3, 0x0c, 0xdb, 0xb5, 0xbe, 0x6b, 0xaf, 0xa1, 0x01, 0xcd, 0x16, 0x3e, 0x4a, 0x15, 0x8f, 0x4d, 0xcd, 0x53, 0x6f, 0xd2, 0x8a, 0x88, 0x76, 0x92, 0xab, 0x99, 0x7a, 0x0a, 0x5d, 0x86, 0x7a, 0x7a, 0x8b, 0xa5, 0xc2, 0x7f, 0x2b, 0xd2, 0xf1, 0x1e, 0xc6, 0x55, 0x73, 0x4b, 0x4c, 0x4a, 0xdc, 0xd5, 0x1c, 0xfa, 0xeb, 0x90, 0x49, 0x89, 0x39, 0xa0, 0x4b, 0x06, 0x93, 0x2a, 0xf6, 0xb8, 0x88, 0x1b, 0xff, 0x9f, 0x96, 0x4c, 0x2e, 0x12, 0xe7, 0x42, 0x92, 0x5f, 0x71, 0x06, 0x68, 0x72, 0x89, 0xa1, 0x6d, 0x45, 0x6b, 0x54, 0x49, 0x5a, 0x22, 0xdc, 0x0d, 0x36, 0x43, 0x67, 0xe9, 0xa5, 0x4b, 0x7c, 0x5e, 0x64, 0x9a, 0xef, 0x66, 0xfd, 0x38, 0xe1, 0x01, 0xe4, 0x46, 0x6d, 0xca, 0x2a, 0x70, 0xe7, 0xcf, 0x81, 0x2b, 0x90, 0x12, 0x71, 0xf6, 0x4c, 0xde, 0x97, 0x8a, 0x15, 0x21, 0xf5, 0x5e, 0xd4, 0x3b, 0xf9, 0xc5, 0xc1, 0x58, 0x3e, 0xf6, 0x61, 0xc7, 0x8e, 0xed, 0xe0, 0x6a, 0xb7, 0x1d, 0x1c, 0xc4, 0xb7, 0x7b, 0xd9, 0x6d, 0x2c, 0x5b, 0x68, 0x29, 0xae, 0xd7, 0xdf, 0xc5, 0xb5, 0xf5, 0x24, 0x3e, 0x1f, 0x15, 0xdf, 0xa4, 0x9f, 0x29, 0x5e, 0x85, 0x74, 0xc5, 0x27, 0xf8, 0xeb, 0xd2, 0x2f, 0x7c, 0xb5, 0x4a, 0x1f, 0x0b, 0xcc, 0x81, 0x22, 0xa4, 0x05, 0xdf, 0x45, 0xd8, 0x99, 0x03, 0xb3, 0xc1, 0x86, 0x0f, 0xe9, 0x4f, 0x98, 0xb2, 0xfb, 0x0a, 0xc5, 0x3b, 0x02, 0xd7, 0x0f, 0x33, 0x06, 0xe8, 0xdc, 0xc5, 0x27, 0x81, 0x2d, 0xc2, 0xd6, 0xba, 0x3a, 0x47, 0x3f, 0xe6, 0x99, 0x23, 0xce, 0x38, 0x09, 0xbb, 0x4b, 0xe5, 0xa5, 0x54, 0x4b, 0x0f, 0x72, 0xe9, 0xc8, 0x7b, 0xe0, 0x4a, 0x0f, 0xb2, 0x6b, 0x0e, 0x7c, 0x45, 0x76, 0x92, 0x75, 0x87, 0x98, 0x8f, 0xf8, 0xab, 0xb8, 0xda, 0x37, 0x79, 0xff, 0x40, 0x6c, 0x86, 0xd7, 0x07, 0xee, 0x05, 0xa7, 0xdd, 0xf0, 0xcb, 0x7d, 0xad, 0x54, 0xf3, 0x5e, 0x74, 0xdb, 0x7e, 0x39, 0xd2, 0x6a, 0xbd, 0x69, 0xe8, 0xd9, 0x54, 0x5b, 0x07, 0xd7, 0x3c, 0x56, 0x1c, 0xd6, 0xdf, 0xc5, 0xda, 0x9f, 0xac, 0x3d, 0x09, 0xce, 0x67, 0x5e, 0x10, 0xab, 0xfd, 0x8b, 0x29, 0xa4, 0xb4, 0xd2, 0xed, 0x70, 0x73, 0x3b, 0x8a, 0xb0, 0x1d, 0x21, 0x6e, 0x87, 0x7a, 0x99, 0x76, 0x48, 0x7f, 0xbe, 0x1d, 0x8d, 0x1f, 0x3a, 0x8a, 0xf4, 0x83, 0x86, 0x85, 0x99, 0x3f, 0x8b, 0x47, 0x64, 0xc2, 0xaf, 0x2e, 0x0c, 0x75, 0x0b, 0xfa, 0x40, 0x5d, 0x69, 0x0a, 0x69, 0x05, 0xbb, 0x9e, 0x20, 0x7b, 0x02, 0xf8, 0xeb, 0x6e, 0xb3, 0x19, 0x6b, 0x7e, 0x1e, 0xdb, 0x06, 0x79, 0x57, 0x7c, 0x19, 0x36, 0x15, 0xc4, 0x6e, 0x76, 0x29, 0xae, 0x0e, 0x5c, 0x06, 0xe6, 0x54, 0xa4, 0xd0, 0xee, 0xd3, 0x05, 0xfd, 0x9e, 0xb8, 0xcc, 0x77, 0x25, 0x98, 0xf8, 0xa6, 0x04, 0xc3, 0xea, 0xd7, 0xa2, 0x3f, 0xe2, 0x28, 0xda, 0xc4, 0x36, 0xbf, 0x8a, 0xb4, 0x22, 0xe3, 0x2e, 0x85, 0x4c, 0x68, 0xc4, 0x95, 0x09, 0x75, 0xcb, 0x2b, 0x0c, 0x59, 0x45, 0x5d, 0x80, 0xa8, 0x5d, 0xb6, 0x24, 0x6e, 0xc4, 0x52, 0x03, 0x12, 0xae, 0xbb, 0x9e, 0xc8, 0x96, 0xe6, 0x14, 0xc6, 0xb2, 0x51, 0x5e, 0x1c, 0xb3, 0xe8, 0x92, 0x98, 0xcd, 0x64, 0xe3, 0x4e, 0x94, 0x26, 0x47, 0x31, 0xd4, 0x8d, 0x8f, 0x2b, 0x27, 0x7c, 0x80, 0x72, 0x1a, 0x3b, 0xc6, 0x39, 0x45, 0xb1, 0x37, 0x9d, 0x38, 0xf2, 0x06, 0x28, 0x76, 0xbc, 0x80, 0x4e, 0x97, 0x18, 0xb1, 0xfe, 0x6b, 0x26, 0x17, 0x17, 0xc7, 0xa2, 0xf1, 0x39, 0x10, 0x77, 0xe7, 0xc4, 0xf8, 0x5f, 0x6c, 0xff, 0x6e, 0x6b, 0x4e, 0x1c, 0x67, 0xbc, 0x71, 0x27, 0x8e, 0xdd, 0xb6, 0xdc, 0x58, 0xa7, 0x38, 0x56, 0x57, 0x26, 0x56, 0x07, 0x8e, 0x28, 0xcc, 0xad, 0xf6, 0xf7, 0x6e, 0x78, 0xe6, 0x04, 0x8e, 0xef, 0x42, 0x9c, 0xf3, 0x99, 0xd8, 0x37, 0x16, 0x70, 0xec, 0x60, 0xda, 0x3e, 0x9a, 0x90, 0x04, 0xf3, 0x8d, 0x21, 0xa5, 0xde, 0x00, 0xcc, 0x45, 0xaa, 0xa8, 0xdc, 0x17, 0x80, 0x4a, 0x44, 0x63, 0x41, 0xd5, 0x72, 0xfb, 0x60, 0xe2, 0xdc, 0xbe, 0x14, 0xeb, 0x70, 0x59, 0xd8, 0x36, 0xa2, 0x23, 0xb2, 0x67, 0xf4, 0x61, 0x3e, 0xa1, 0x15, 0x44, 0x4c, 0xf8, 0xa3, 0x85, 0xa7, 0xc0, 0xe9, 0xb9, 0x19, 0x39, 0x97, 0x0b, 0x17, 0xbd, 0x25, 0x66, 0xe9, 0x5e, 0xba, 0xcf, 0x44, 0xf3, 0xe5, 0xc6, 0x0f, 0x4c, 0xc3, 0x95, 0x94, 0xad, 0xc9, 0x61, 0x8a, 0xc4, 0xae, 0x9f, 0x81, 0xa5, 0xd5, 0x1a, 0xbe, 0x37, 0x9e, 0xa7, 0x2e, 0xf2, 0x2d, 0xf4, 0x34, 0xf3, 0x1a, 0x75, 0x50, 0x93, 0xd4, 0x45, 0x8c, 0x8b, 0x9b, 0xe4, 0x28, 0x71, 0x26, 0xbb, 0xee, 0x8f, 0x59, 0xd5, 0x4d, 0x9e, 0x7a, 0x4d, 0xb5, 0x99, 0x21, 0x3f, 0x6e, 0xfb, 0xbb, 0xbd, 0x0b, 0x4e, 0x3f, 0x8b, 0xfc, 0x61, 0xf5, 0x69, 0x2f, 0xa8, 0xf7, 0x79, 0xea, 0x95, 0xa8, 0xb2, 0x89, 0x78, 0x8c, 0x4d, 0x83, 0x48, 0x2f, 0x5b, 0x1e, 0x7a, 0x12, 0x8a, 0x30, 0x9e, 0x13, 0x61, 0x2b, 0xb1, 0xde, 0x4e, 0xfa, 0x94, 0x85, 0x83, 0xb9, 0x4a, 0x89, 0x64, 0x1b, 0x64, 0xe3, 0xf1, 0x56, 0xbe, 0x19, 0xc5, 0xd7, 0x0d, 0x73, 0xb1, 0x7d, 0xe5, 0x88, 0x63, 0x2a, 0x03, 0xdd, 0xc8, 0x49, 0xf9, 0xb1, 0xd5, 0x35, 0x01, 0x0b, 0xaf, 0xed, 0x93, 0x03, 0x93, 0x84, 0xa4, 0x2a, 0xb2, 0xe7, 0xd3, 0x9d, 0xe9, 0x56, 0x9a, 0xdc, 0x89, 0xc9, 0x23, 0x77, 0xcb, 0x0b, 0xaa, 0x4e, 0xdb, 0x26, 0xab, 0x36, 0x82, 0xc7, 0xc8, 0xdd, 0x9e, 0x60, 0xbf, 0xf3, 0xd8, 0xf7, 0x69, 0xee, 0x7a, 0x60, 0xd1, 0x1f, 0xbc, 0x6c, 0x53, 0x33, 0x96, 0x77, 0x5d, 0x88, 0x64, 0xdf, 0x72, 0x9d, 0x4c, 0xfb, 0x4f, 0x6f, 0x78, 0xeb, 0x34, 0x8b, 0x37, 0xac, 0x06, 0x27, 0xe6, 0x8d, 0x30, 0x41, 0x0a, 0xe5, 0xd3, 0x73, 0x06, 0x4c, 0x90, 0xbb, 0xfb, 0xe5, 0x81, 0xd6, 0xd2, 0x67, 0x5e, 0x6e, 0xe3, 0x93, 0xa5, 0x37, 0x2e, 0x6a, 0x10, 0x76, 0x35, 0xb6, 0x12, 0xe4, 0x84, 0x86, 0xff, 0x8d, 0xcb, 0xf1, 0x8b, 0xee, 0x03, 0xe1, 0x33, 0xa4, 0x37, 0x3e, 0x1e, 0xd9, 0xaa, 0xd1, 0x8c, 0xf9, 0x91, 0x37, 0xfc, 0xd0, 0x81, 0xe7, 0x36, 0xc4, 0xa3, 0x72, 0xe3, 0x2b, 0xa7, 0xc0, 0xf2, 0xcb, 0xfd, 0x6d, 0x35, 0x22, 0x07, 0x61, 0x25, 0x21, 0xb2, 0x79, 0x5c, 0x0e, 0x9b, 0x91, 0x93, 0xb7, 0x88, 0xb3, 0x2f, 0x98, 0x03, 0xc9, 0x47, 0xe4, 0x40, 0x0d, 0x51, 0x86, 0xc8, 0xbe, 0x4e, 0x81, 0xb9, 0x04, 0x23, 0x3a, 0x47, 0x7a, 0x21, 0xf5, 0xcb, 0xfd, 0x71, 0x8b, 0xf7, 0x7e, 0x4d, 0xf2, 0x38, 0x9e, 0x79, 0x39, 0x66, 0x9c, 0x2a, 0xff, 0x7f, 0x3e, 0x02, 0x8b, 0x1a, 0x95, 0xab, 0xe5, 0xf5, 0xff, 0xf0, 0x02, 0xf2, 0x56, 0x96, 0xd7, 0x7e, 0x4e, 0x96, 0x47, 0x29, 0x05, 0x62, 0x34, 0x5c, 0xf9, 0xff, 0xb5, 0x8e, 0x7e, 0x5f, 0xdc, 0x4c, 0x12, 0x34, 0x8f, 0xd0, 0x86, 0x2d, 0x42, 0x2a, 0x80, 0x7e, 0xe9, 0x61, 0x5a, 0x6a, 0xdf, 0xcb, 0x6a, 0xda, 0xaa, 0x49, 0x90, 0x29, 0xa8, 0x3d, 0x9f, 0x1e, 0x5b, 0xf0, 0x81, 0xfe, 0xd6, 0x55, 0x6c, 0x91, 0x56, 0x0e, 0x5e, 0xd5, 0x81, 0xf5, 0x98, 0xf2, 0x8d, 0x0e, 0xda, 0xb5, 0xab, 0x3a, 0xc9, 0x36, 0x69, 0x5d, 0xd5, 0xd8, 0xef, 0xb3, 0x1a, 0xd8, 0x06, 0x8b, 0x73, 0xd6, 0x42, 0xe4, 0xbd, 0x36, 0xcd, 0x5c, 0x08, 0x96, 0xa6, 0x8d, 0xe9, 0xb3, 0x8a, 0x64, 0x19, 0x04, 0x4b, 0x70, 0xd0, 0x43, 0xf6, 0x49, 0x36, 0x0d, 0xa7, 0xad, 0xbe, 0xbd, 0xb8, 0x59, 0xdc, 0x08, 0xc6, 0xd4, 0x7e, 0x77, 0x76, 0x5c, 0xe3, 0x38, 0x0f, 0xce, 0xeb, 0x07, 0xf9, 0x77, 0x1f, 0xe3, 0x78, 0xb7, 0xb5, 0x0c, 0x19, 0x16, 0x5e, 0xad, 0x3d, 0x9d, 0x87, 0x87, 0x71, 0x1c, 0x5a, 0x6c, 0xc5, 0x38, 0x86, 0xa7, 0xc5, 0x1d, 0x08, 0xa9, 0x95, 0xe0, 0x8a, 0xec, 0x39, 0x7f, 0x4f, 0xd3, 0x46, 0xb5, 0x99, 0x2c, 0x4e, 0x3c, 0x5f, 0x51, 0x52, 0x49, 0x16, 0xfa, 0x94, 0xfc, 0x58, 0xbd, 0x5c, 0x0c, 0xce, 0xd2, 0x7e, 0xfd, 0xad, 0x57, 0x46, 0x7e, 0xb1, 0xb7, 0x2d, 0x5f, 0xf1, 0x4b, 0x17, 0x9a, 0x07, 0xe4, 0x50, 0xd5, 0x69, 0xb7, 0x2c, 0xdb, 0xea, 0x06, 0x46, 0x06, 0xb0, 0x8f, 0x27, 0xd1, 0x59, 0x07, 0xb2, 0x2c, 0x91, 0x69, 0x35, 0xc0, 0x10, 0xb6, 0xc1, 0xce, 0x92, 0x47, 0xd2, 0x4e, 0x3f, 0xa3, 0x15, 0xf0, 0x9e, 0x7a, 0x5e, 0x5d, 0x8a, 0xf4, 0xd8, 0x26, 0x4f, 0x1e, 0x59, 0x17, 0xb7, 0xa8, 0x55, 0xda, 0x0f, 0x8d, 0xd4, 0x48, 0xc3, 0xc8, 0x0b, 0x22, 0x9b, 0x7c, 0x69, 0xad, 0xef, 0xf9, 0xe1, 0x27, 0x70, 0x5d, 0x08, 0x26, 0xe4, 0x1d, 0x4f, 0x40, 0x51, 0x5b, 0x39, 0xf2, 0x61, 0x8d, 0xac, 0x15, 0xd4, 0xac, 0x39, 0xf2, 0x7d, 0xe2, 0x9c, 0x6a, 0xa7, 0x71, 0x4e, 0x95, 0x6d, 0xf6, 0x5a, 0xd4, 0x61, 0xd2, 0xd6, 0x51, 0xd6, 0x93, 0x2d, 0x6e, 0xcd, 0xa6, 0x46, 0x35, 0xd0, 0x6b, 0xfe, 0xfe, 0xb7, 0x13, 0x5b, 0x78, 0x6e, 0x77, 0xd3, 0x46, 0xde, 0x83, 0x28, 0x34, 0xca, 0xb5, 0xe0, 0xa8, 0x99, 0x26, 0xac, 0xf2, 0xf9, 0x82, 0xbe, 0x03, 0x8c, 0x35, 0xa7, 0x89, 0x39, 0x44, 0xd4, 0x21, 0x42, 0x52, 0x45, 0x28, 0x7a, 0x49, 0x5e, 0x87, 0x7d, 0x5d, 0x4a, 0xfc, 0x0c, 0x7c, 0xf4, 0xac, 0xe0, 0x40, 0xde, 0x95, 0xab, 0x11, 0x27, 0x58, 0x54, 0x4d, 0xec, 0xd0, 0x89, 0xbe, 0xf8, 0xcd, 0x3c, 0x2f, 0x73, 0xf2, 0x58, 0x32, 0x9f, 0x24, 0xc4, 0x18, 0x9d, 0x0e, 0x92, 0xb5, 0xdb, 0x62, 0xce, 0x67, 0x69, 0x3d, 0xb0, 0xcb, 0x96, 0x83, 0xdf, 0xc7, 0x56, 0xb9, 0x97, 0xf1, 0xce, 0xe0, 0x8d, 0x87, 0x33, 0x23, 0xd8, 0x6c, 0x8c, 0xd8, 0x0f, 0xc5, 0x39, 0xff, 0x26, 0x97, 0x90, 0xec, 0x05, 0x16, 0x92, 0xa5, 0x7d, 0xb2, 0x2c, 0x03, 0x2a, 0xd1, 0x2b, 0x1a, 0xfc, 0x69, 0xbf, 0x77, 0x05, 0xd8, 0xb1, 0x37, 0x45, 0xdb, 0xa6, 0xd6, 0x77, 0x52, 0xdb, 0xfe, 0xb4, 0xbf, 0x69, 0xa3, 0x07, 0x57, 0xd0, 0x6d, 0x58, 0x8a, 0x51, 0x23, 0xb6, 0xf2, 0xfe, 0xe9, 0x59, 0x3e, 0x73, 0x82, 0x70, 0x8c, 0x15, 0xa4, 0xf9, 0x59, 0x0e, 0x27, 0xde, 0xe1, 0x49, 0xbe, 0xeb, 0x46, 0xe4, 0xc4, 0x25, 0x35, 0x9c, 0xc2, 0xd4, 0x8d, 0x99, 0x92, 0xee, 0x11, 0x14, 0x52, 0xae, 0x25, 0x41, 0xec, 0x19, 0xdb, 0xaa, 0x25, 0x1e, 0x49, 0xe8, 0x6c, 0xb1, 0xe5, 0xb0, 0x3d, 0x7f, 0x6a, 0xf4, 0x84, 0x95, 0xbf, 0x69, 0xda, 0xa8, 0xcd, 0x93, 0x67, 0x03, 0x49, 0x5d, 0x97, 0x13, 0xed, 0x94, 0xa6, 0x9b, 0x58, 0x7a, 0x99, 0xbf, 0xee, 0x09, 0x70, 0x18, 0xb1, 0x4b, 0x9b, 0x36, 0xe2, 0x2a, 0x5b, 0x48, 0x77, 0x0e, 0x21, 0x55, 0x30, 0xa4, 0xd4, 0x78, 0xa7, 0xc7, 0x5e, 0x34, 0xc2, 0x5c, 0x18, 0x06, 0x42, 0x3b, 0xe6, 0xb3, 0xe8, 0x23, 0xc3, 0x22, 0x59, 0xff, 0xb8, 0x2f, 0xb6, 0x4f, 0x46, 0x78, 0xaf, 0xb2, 0xdc, 0x23, 0xac, 0x72, 0x7a, 0x7d, 0x46, 0xaf, 0x79, 0xd9, 0x6e, 0xee, 0xe4, 0xc9, 0x64, 0x83, 0x5b, 0xdf, 0x4b, 0x6b, 0x73, 0x0b, 0xf3, 0x9e, 0xbf, 0x3a, 0xad, 0x79, 0xd3, 0xa3, 0x72, 0x64, 0x28, 0x56, 0x48, 0x30, 0x6a, 0x25, 0xd8, 0x91, 0x4d, 0x47, 0xb3, 0xa1, 0xa1, 0xe5, 0x22, 0x1d, 0x7e, 0xa6, 0xfb, 0x0e, 0x27, 0x00, 0xc3, 0x82, 0x20, 0x63, 0x2e, 0xeb, 0x5b, 0x36, 0xd2, 0x0e, 0x66, 0xe3, 0x9b, 0x45, 0x95, 0xc2, 0x22, 0x71, 0x29, 0x8d, 0x15, 0x99, 0xb8, 0x09, 0x1f, 0x8d, 0x17, 0xf3, 0xe1, 0xf5, 0x84, 0x59, 0xf5, 0xc5, 0x9e, 0x55, 0x54, 0x9a, 0x96, 0xb7, 0xfb, 0x67, 0xd8, 0xf7, 0x56, 0x5c, 0x13, 0xdc, 0xcb, 0xac, 0x9e, 0xa0, 0x7c, 0x65, 0xec, 0xa3, 0xf0, 0x16, 0xb2, 0xc6, 0x45, 0x16, 0xa4, 0x6a, 0xcf, 0x20, 0xb6, 0xb5, 0x33, 0xb6, 0x5d, 0xe7, 0x0d, 0x56, 0x9d, 0xf5, 0x42, 0xf5, 0x07, 0x88, 0x57, 0x6e, 0x42, 0xcc, 0x7a, 0x14, 0x29, 0x01, 0x8b, 0x6c, 0x4f, 0x0d, 0xf4, 0xd2, 0x8c, 0x29, 0x0f, 0xff, 0x5c, 0xea, 0xc3, 0x91, 0xf7, 0x12, 0x8f, 0x8f, 0xf9, 0x8b, 0xc4, 0xc8, 0xd9, 0x46, 0x67, 0xd3, 0x05, 0xee, 0x6b, 0xba, 0x0d, 0xbf, 0x32, 0xd8, 0xb3, 0xe9, 0x11, 0xb1, 0x1a, 0x69, 0x61, 0x39, 0x3f, 0x7e, 0x8b, 0xc7, 0x7e, 0x64, 0x60, 0x77, 0xaa, 0x3d, 0x62, 0xe4, 0x31, 0xfc, 0x79, 0x79, 0xf0, 0x4a, 0x6f, 0x09, 0xd8, 0x72, 0xf2, 0xda, 0xc7, 0x79, 0x79, 0x71, 0x54, 0x09, 0x99, 0xca, 0x9e, 0xb1, 0x56, 0xec, 0xef, 0xe0, 0xa1, 0xf5, 0xbf, 0x78, 0xbe, 0xb5, 0xe4, 0x9f, 0x0e, 0xb4, 0xfb, 0x7e, 0xf1, 0x7c, 0xdc, 0x49, 0xfa, 0x4d, 0xff, 0xcf, 0x49, 0xb0, 0xfc, 0xc3, 0x7e, 0xc2, 0x9c, 0xea, 0xf0, 0x3f, 0x1d, 0x88, 0xdb, 0x65, 0xc7, 0x26, 0xb2, 0xad, 0x6d, 0xd1, 0x24, 0x65, 0xeb, 0x43, 0x3f, 0x43, 0x9a, 0x25, 0x4f, 0xc1, 0x95, 0x42, 0xdc, 0x0b, 0xa4, 0x2b, 0x3f, 0x78, 0x89, 0xe0, 0x34, 0x56, 0x81, 0xf0, 0x74, 0xa4, 0xf7, 0x30, 0xca, 0x4b, 0x3d, 0x01, 0x41, 0x07, 0x61, 0xef, 0x31, 0x4c, 0xa9, 0xbe, 0x5e, 0xf3, 0xeb, 0x83, 0xbc, 0x7b, 0x09, 0xf2, 0x0a, 0x86, 0x69, 0xe9, 0x6e, 0xa2, 0x6c, 0xad, 0x64, 0xbf, 0x6d, 0x99, 0x45, 0x26, 0x3e, 0x51, 0x68, 0x15, 0x98, 0x73, 0xad, 0x2d, 0x05, 0xc2, 0xbc, 0xf2, 0xe3, 0x58, 0xbe, 0x78, 0x04, 0xb1, 0xc5, 0x4b, 0x3c, 0xea, 0x0d, 0xf8, 0x65, 0xac, 0x3a, 0x99, 0x45, 0xcb, 0x6f, 0x32, 0x45, 0xb6, 0xf0, 0xdb, 0x2b, 0xf8, 0x3c, 0x4c, 0x5b, 0x64, 0xcc, 0xbc, 0x74, 0x1e, 0x5d, 0xc2, 0xbe, 0x2f, 0x69, 0x68, 0x60, 0x1d, 0xbd, 0x88, 0x1b, 0xfc, 0x3e, 0x33, 0xe9, 0x83, 0xe3, 0xe8, 0x42, 0x98, 0x5c, 0x6c, 0xf3, 0x74, 0x52, 0xdd, 0x7a, 0x80, 0x6d, 0x59, 0x49, 0x38, 0x43, 0xd6, 0xd1, 0x55, 0x78, 0x0b, 0xb9, 0x24, 0xa4, 0x1c, 0x4a, 0xb0, 0x4f, 0x77, 0x8a, 0xb3, 0xcb, 0x38, 0xe6, 0xee, 0x8e, 0x21, 0x5d, 0x11, 0x1e, 0xa2, 0xd6, 0xa9, 0x2b, 0xc1, 0xa9, 0xf5, 0x61, 0x4f, 0x23, 0xde, 0xa3, 0xd3, 0x13, 0x71, 0x8f, 0xd0, 0x25, 0xbc, 0xe9, 0xd6, 0xc8, 0x43, 0xe3, 0x7a, 0xf4, 0x21, 0xec, 0x27, 0xd1, 0x03, 0xdb, 0x98, 0x26, 0xcb, 0x8f, 0xcf, 0x93, 0xc3, 0xaf, 0x20, 0xcc, 0x7f, 0x31, 0xd2, 0xee, 0x4f, 0xa7, 0xb8, 0x6c, 0xff, 0x8d, 0x4f, 0x29, 0xd3, 0xdd, 0x50, 0x3b, 0x06, 0x97, 0x49, 0x2a, 0x88, 0x33, 0xf2, 0xb1, 0x41, 0x8d, 0xe4, 0x35, 0x0e, 0xc4, 0xf7, 0xee, 0x4d, 0x38, 0x5a, 0x0f, 0xa7, 0x34, 0xcb, 0x61, 0xec, 0x2f, 0x4f, 0x73, 0x78, 0x0b, 0xf6, 0x54, 0x23, 0xd3, 0x43, 0x9b, 0xb1, 0x9f, 0xa4, 0xb4, 0x6e, 0xc7, 0xe7, 0xcd, 0x44, 0x41, 0xfb, 0x97, 0x32, 0xed, 0x2f, 0x1b, 0xb4, 0x7f, 0xb8, 0x03, 0x1c, 0xd8, 0xe2, 0x23, 0x8e, 0xed, 0x85, 0x6f, 0x3c, 0xf7, 0xdf, 0xc0, 0x16, 0xb7, 0xf2, 0x5d, 0x0e, 0x0e, 0x3a, 0x4b, 0x8f, 0xdc, 0x49, 0x5e, 0xdc, 0x41, 0xbb, 0x03, 0xc2, 0x4f, 0xb3, 0x20, 0x6f, 0x72, 0xaa, 0xfa, 0x04, 0x78, 0x17, 0x9c, 0x80, 0xfa, 0x24, 0x90, 0x6e, 0x98, 0xe3, 0x6a, 0xfd, 0xdf, 0xe3, 0x14, 0xdb, 0xa2, 0x48, 0x1a, 0x3e, 0xb2, 0xa4, 0x4e, 0xf9, 0xe5, 0xaf, 0x63, 0x27, 0x48, 0xfa, 0x4c, 0x32, 0xdc, 0x74, 0x7e, 0x65, 0xfd, 0x50, 0xff, 0xea, 0x09, 0xc8, 0xab, 0x3e, 0xfd, 0x30, 0x50, 0xca, 0x1e, 0x79, 0x5c, 0x5a, 0x33, 0xa6, 0x35, 0xcb, 0x66, 0xcf, 0x94, 0x9b, 0x0e, 0x20, 0x07, 0x14, 0x6a, 0x1e, 0x6c, 0x7b, 0x1b, 0x73, 0x18, 0x25, 0xd9, 0x75, 0xa6, 0x46, 0x58, 0xd3, 0xb8, 0x1f, 0xf9, 0x8c, 0xe3, 0xc5, 0x51, 0xfd, 0x04, 0x72, 0x11, 0x2e, 0xe4, 0x22, 0x8e, 0x33, 0x0f, 0x9a, 0xbe, 0xaf, 0x8c, 0x34, 0x75, 0x1d, 0x59, 0xbe, 0x01, 0xf9, 0x05, 0x87, 0x7e, 0xf8, 0x8b, 0xf2, 0x0b, 0xa5, 0x15, 0x06, 0x36, 0xa5, 0xd5, 0x85, 0x71, 0x94, 0xb1, 0x5e, 0x00, 0x3c, 0x6a, 0xd8, 0x2c, 0xdf, 0xea, 0xb1, 0x63, 0x79, 0xb4, 0x6b, 0xff, 0xef, 0xe9, 0xd3, 0xb4, 0xb3, 0xfa, 0x05, 0xdc, 0x42, 0x2b, 0xd8, 0xfe, 0x59, 0xde, 0x2c, 0x4c, 0x0b, 0xf9, 0xb3, 0x16, 0x43, 0x41, 0x5a, 0x96, 0x89, 0xf3, 0xac, 0x70, 0x16, 0xed, 0x47, 0xcf, 0x40, 0xfe, 0xa8, 0x9e, 0x77, 0x43, 0x70, 0x94, 0xe2, 0x00, 0x74, 0xc6, 0x5c, 0x72, 0x58, 0x96, 0x8e, 0x0f, 0x67, 0xec, 0xeb, 0xa6, 0x10, 0xaf, 0x9d, 0x25, 0xbb, 0x4e, 0x54, 0x42, 0x7d, 0xd2, 0x0b, 0xa2, 0x0c, 0xc2, 0x91, 0x63, 0xde, 0xaa, 0x0f, 0xa4, 0xf5, 0x4a, 0x35, 0xaf, 0x15, 0x4e, 0xf6, 0x51, 0x99, 0xde, 0xb6, 0x0b, 0x6d, 0x2b, 0xde, 0x3b, 0x34, 0xac, 0x5b, 0xf3, 0x48, 0xcb, 0xab, 0xef, 0x80, 0x7a, 0x86, 0x0a, 0xce, 0x59, 0x41, 0x7b, 0xdf, 0x74, 0x2f, 0xf3, 0x05, 0x67, 0x23, 0x5b, 0x38, 0x46, 0x01, 0x59, 0x3d, 0x36, 0x42, 0x7e, 0x4c, 0xbc, 0x00, 0xdd, 0xce, 0x52, 0x32, 0xc8, 0x61, 0x2c, 0xc9, 0xb8, 0xe9, 0x7f, 0x52, 0x0c, 0x82, 0x67, 0xf7, 0x2d, 0xc8, 0xd7, 0x92, 0x3f, 0x5b, 0x77, 0xba, 0xe9, 0xb7, 0x86, 0xef, 0xa3, 0x72, 0x94, 0x46, 0x6d, 0x66, 0xec, 0xb8, 0x32, 0xf9, 0x1d, 0xc9, 0xf0, 0x16, 0x4e, 0xc4, 0x96, 0xb6, 0x5c, 0xae, 0xe2, 0xa6, 0x3f, 0xe4, 0xf2, 0x0b, 0x18, 0xea, 0x88, 0x17, 0xf1, 0xcd, 0x73, 0x99, 0x18, 0xd1, 0x3c, 0x8e, 0xd1, 0x28, 0x78, 0x04, 0x8c, 0xe1, 0x8a, 0x8b, 0x3b, 0xea, 0xb2, 0x31, 0x4a, 0x38, 0x86, 0x2f, 0xc3, 0x45, 0x08, 0x7e, 0x4d, 0x21, 0x7e, 0x0d, 0xfb, 0x55, 0x36, 0x6c, 0x06, 0xdc, 0x46, 0xbc, 0xf7, 0xe1, 0xa7, 0xc1, 0xdd, 0x7b, 0xee, 0xc5, 0xd4, 0xdc, 0x7e, 0xfd, 0xd9, 0xd7, 0x5e, 0x20, 0xb9, 0xc8, 0xe8, 0x31, 0x85, 0x75, 0x7a, 0xd9, 0xfd, 0x06, 0xf5, 0x1c, 0xae, 0x6a, 0xd8, 0x27, 0x62, 0xfd, 0x1d, 0x3d, 0x4a, 0x3a, 0x9f, 0x94, 0xaf, 0xc3, 0xcb, 0x76, 0xe9, 0xf3, 0xe5, 0x6a, 0x61, 0x03, 0xf9, 0x8d, 0x9f, 0xff, 0xea, 0x63, 0x61, 0x03, 0x99, 0xa0, 0x9e, 0x3e, 0xb5, 0x9f, 0xb6, 0xe4, 0x4b, 0x16, 0xda, 0x48, 0x9f, 0x0d, 0xcb, 0xad, 0xe7, 0x7c, 0x7a, 0x3d, 0x2b, 0x24, 0x5c, 0x93, 0x1a, 0x2e, 0x8c, 0x0e, 0x6b, 0x9e, 0xf0, 0x60, 0x3c, 0x1f, 0x57, 0x9a, 0xfc, 0x98, 0x23, 0xad, 0x51, 0x1c, 0x5a, 0x89, 0xe5, 0xda, 0x89, 0x4f, 0x61, 0x5d, 0xff, 0x6a, 0x82, 0x95, 0xe7, 0xca, 0xd8, 0x11, 0xc4, 0x70, 0x32, 0x9d, 0xaa, 0xd7, 0x60, 0x34, 0x24, 0x4e, 0xd7, 0x93, 0xbe, 0x16, 0x8d, 0x4d, 0x6e, 0x79, 0xfa, 0xe6, 0xa1, 0x5c, 0xe9, 0x97, 0x83, 0xa4, 0x74, 0x87, 0x1c, 0x0d, 0x27, 0x4d, 0xdb, 0xb4, 0x4e, 0x47, 0x09, 0xd5, 0x3a, 0xd6, 0x98, 0xb5, 0xd1, 0x14, 0x8d, 0x1b, 0x9a, 0xc5, 0x5b, 0xe4, 0x2e, 0x88, 0x86, 0x36, 0xf9, 0xbb, 0x20, 0xcc, 0x52, 0x30, 0x59, 0x2d, 0x30, 0x62, 0xac, 0xcf, 0xc4, 0x88, 0x70, 0xed, 0x8a, 0xfc, 0xa1, 0xb4, 0x3d, 0xa4, 0xd8, 0x51, 0xcd, 0x1d, 0x20, 0xab, 0x03, 0x0f, 0x7d, 0x8d, 0x75, 0x96, 0xe4, 0x46, 0x25, 0x22, 0x34, 0x96, 0x90, 0x0e, 0x5e, 0x61, 0xe6, 0x3b, 0x09, 0xc7, 0x36, 0x90, 0x6c, 0x2a, 0x36, 0x94, 0xf9, 0x4e, 0x69, 0xc7, 0x11, 0x17, 0x55, 0xd2, 0x9d, 0x69, 0xf5, 0xef, 0xe9, 0x7a, 0x84, 0x24, 0xbd, 0x95, 0x32, 0x71, 0x3a, 0x57, 0x10, 0xe5, 0x0d, 0x75, 0x4d, 0x1b, 0x1b, 0xdf, 0xbc, 0x41, 0xc7, 0xbe, 0xb2, 0x44, 0x62, 0x64, 0x13, 0xba, 0x69, 0x63, 0x64, 0x35, 0xd1, 0x16, 0x38, 0x6b, 0x8c, 0x9d, 0xb4, 0xb1, 0xa3, 0x4a, 0x50, 0x5e, 0x0e, 0x8a, 0xe4, 0xd5, 0xc7, 0xe0, 0x7b, 0x25, 0x5e, 0x58, 0x9b, 0xb5, 0xf4, 0x98, 0xa6, 0x3a, 0xd8, 0xa6, 0x9e, 0x21, 0x3f, 0xa3, 0x5e, 0xa3, 0x73, 0x72, 0x64, 0x67, 0x9a, 0xf9, 0xe6, 0xc5, 0x86, 0xa4, 0xbf, 0xd1, 0xe8, 0xc7, 0x1a, 0x92, 0xf8, 0xb3, 0x45, 0xd6, 0xef, 0xc5, 0xad, 0x48, 0x13, 0xad, 0xd5, 0xca, 0xd8, 0x56, 0xcb, 0x5d, 0x7c, 0x97, 0xc7, 0xf7, 0x90, 0x97, 0x5b, 0x7b, 0xed, 0x0a, 0x08, 0x43, 0x0a, 0x7f, 0xe7, 0xc2, 0x90, 0x1c, 0xae, 0x7e, 0x1f, 0x86, 0x13, 0x11, 0xba, 0x1d, 0x80, 0x6e, 0x6d, 0x7a, 0xe9, 0x1c, 0x84, 0x91, 0xb7, 0xc7, 0x32, 0x99, 0x8f, 0xf2, 0xc1, 0x5c, 0x7c, 0xc2, 0x81, 0x1c, 0x39, 0x85, 0x38, 0x4d, 0x48, 0x67, 0xc3, 0x3f, 0xc3, 0xd2, 0x9f, 0x45, 0x58, 0xfa, 0x23, 0x9e, 0x00, 0x63, 0x94, 0x3a, 0xf2, 0x41, 0x89, 0x59, 0xa3, 0xeb, 0xfb, 0x49, 0xba, 0x61, 0xed, 0x81, 0x85, 0x17, 0xf4, 0x17, 0x89, 0xfb, 0xd2, 0xbc, 0x77, 0x99, 0xb4, 0xbb, 0x16, 0x9d, 0x04, 0x93, 0x27, 0x52, 0x50, 0x10, 0x7d, 0xc0, 0x69, 0x36, 0x2c, 0xda, 0x3d, 0xc4, 0xbb, 0x58, 0x27, 0x49, 0x72, 0xc2, 0xbd, 0xf6, 0x5f, 0xd3, 0x1a, 0xeb, 0x88, 0x43, 0x5b, 0x11, 0x96, 0x73, 0xd7, 0x02, 0x52, 0x4f, 0xfa, 0x8e, 0xa1, 0xb8, 0x1c, 0xb0, 0x88, 0x13, 0x5c, 0x25, 0x29, 0xa6, 0x38, 0x8d, 0x58, 0x31, 0x9b, 0x3c, 0xf9, 0x83, 0xed, 0x43, 0x29, 0xcd, 0x1a, 0xbd, 0xdb, 0x3b, 0x23, 0x76, 0x38, 0x6c, 0x8d, 0x3b, 0x1c, 0x66, 0x50, 0xe2, 0x9e, 0xb0, 0x39, 0xf6, 0x89, 0x26, 0xa3, 0xdb, 0x1f, 0x2b, 0xac, 0xfd, 0x00, 0x4c, 0xce, 0xfc, 0x71, 0x65, 0x82, 0x9e, 0x4c, 0x5b, 0x50, 0x36, 0xe8, 0xf0, 0x32, 0xa6, 0x05, 0x70, 0xec, 0x23, 0x5e, 0x55, 0x71, 0x25, 0x90, 0xfb, 0xf4, 0x67, 0x07, 0xe2, 0x6e, 0x93, 0x59, 0xdc, 0x56, 0x11, 0xfd, 0xef, 0xc6, 0x5d, 0x15, 0xb4, 0x63, 0xfe, 0x89, 0x66, 0x8b, 0xa6, 0x94, 0x7a, 0xc5, 0x1d, 0x3b, 0x8a, 0xb1, 0xbd, 0x22, 0x84, 0xee, 0x91, 0xa0, 0xd0, 0xd1, 0x03, 0x09, 0x3e, 0x09, 0x79, 0x71, 0xd4, 0xd0, 0xbf, 0xbe, 0x19, 0x20, 0xbd, 0x42, 0x8d, 0x6c, 0x97, 0xda, 0xe2, 0x85, 0xf5, 0xab, 0x90, 0x66, 0x98, 0x03, 0x4e, 0x71, 0x4f, 0x0c, 0x73, 0x58, 0x7b, 0xf4, 0xbb, 0x68, 0x04, 0x0b, 0x9b, 0x1f, 0x9f, 0xb7, 0xe6, 0xb1, 0xad, 0x4e, 0xe3, 0x7e, 0x6e, 0x1c, 0x5b, 0xd5, 0xe3, 0xac, 0xc5, 0x96, 0x67, 0x7d, 0x32, 0x96, 0x4f, 0x54, 0x1c, 0x73, 0x45, 0x9a, 0x6d, 0x17, 0x59, 0xa0, 0x2d, 0x14, 0x16, 0x68, 0xd1, 0xa7, 0xde, 0xf0, 0x31, 0x6c, 0xd2, 0xd2, 0x79, 0x83, 0xb4, 0xcd, 0x6b, 0x20, 0xd9, 0x05, 0xaf, 0x2a, 0x69, 0x8c, 0xef, 0x0b, 0xca, 0xc5, 0x66, 0xab, 0x71, 0xf2, 0x7c, 0xa1, 0xd0, 0x10, 0x9d, 0x1d, 0x64, 0x8d, 0x44, 0x17, 0xae, 0x0e, 0x36, 0x5c, 0x25, 0x56, 0x9a, 0xad, 0xf0, 0x3a, 0x73, 0x3d, 0xb2, 0x7f, 0x15, 0x28, 0x55, 0x1f, 0xc1, 0x31, 0xa5, 0x13, 0x14, 0x1c, 0x71, 0xc7, 0xe4, 0x12, 0x78, 0xdd, 0x9a, 0xd2, 0x75, 0x5d, 0x15, 0x37, 0x53, 0xcc, 0x5a, 0x04, 0x2e, 0xe4, 0x47, 0x8b, 0x32, 0x9a, 0x7b, 0xc8, 0x9b, 0xca, 0xf7, 0x85, 0x7c, 0x10, 0x62, 0x7b, 0xa1, 0x95, 0x18, 0x56, 0x8f, 0xfc, 0x69, 0x53, 0xe8, 0x09, 0x68, 0xc4, 0xb0, 0x46, 0xe4, 0x57, 0xeb, 0x67, 0x35, 0x42, 0x0d, 0xdf, 0xd4, 0x56, 0xfd, 0x8d, 0x95, 0xa6, 0x20, 0x78, 0x11, 0xc7, 0xf1, 0x6d, 0x37, 0x63, 0x47, 0x90, 0x46, 0x9b, 0x2b, 0x17, 0x4b, 0xc1, 0x68, 0xea, 0xba, 0xa0, 0x14, 0x8c, 0xd9, 0xae, 0xa3, 0xdb, 0x75, 0x40, 0x0a, 0x1a, 0x36, 0x7f, 0x8a, 0x85, 0x6b, 0x94, 0x6e, 0xa3, 0xb3, 0xce, 0x5a, 0x29, 0x05, 0x0d, 0xe9, 0xd9, 0x60, 0x98, 0xac, 0xe8, 0xbe, 0xc8, 0x79, 0x3c, 0x26, 0xaf, 0x00, 0x57, 0x8b, 0xb8, 0xb7, 0x2d, 0x94, 0xb6, 0xbb, 0xcb, 0x21, 0x7d, 0x22, 0xc4, 0xf0, 0xb3, 0xca, 0x6c, 0x77, 0xfb, 0xc1, 0xfd, 0x55, 0x27, 0x70, 0x5d, 0xdd, 0x34, 0x8b, 0xee, 0x89, 0x6d, 0x62, 0x6b, 0x09, 0xeb, 0x91, 0xab, 0x41, 0xac, 0xdd, 0x0f, 0x1a, 0x8c, 0x45, 0xe9, 0x3d, 0xee, 0x1c, 0x2b, 0x69, 0x36, 0x97, 0x0a, 0x9d, 0x2c, 0x1e, 0x17, 0x11, 0x25, 0x8c, 0x74, 0x91, 0xb0, 0xd4, 0x5b, 0x92, 0x39, 0x85, 0x3a, 0xdf, 0x63, 0xf0, 0x3e, 0xe9, 0x5b, 0x41, 0xe1, 0x20, 0xd2, 0x6b, 0x8a, 0xb1, 0x52, 0xef, 0xa3, 0xf5, 0xe1, 0xe2, 0x09, 0xb2, 0x26, 0xdc, 0xb2, 0x11, 0xe7, 0xd5, 0x8f, 0x34, 0xda, 0x05, 0xc3, 0xd1, 0x2c, 0x37, 0x36, 0x6d, 0x34, 0xac, 0x9a, 0x7c, 0x44, 0xb5, 0xe5, 0x56, 0x74, 0x4d, 0xac, 0x31, 0xd6, 0xa0, 0xa8, 0x01, 0x6b, 0xad, 0xcd, 0xb8, 0x96, 0x2d, 0xc2, 0x2e, 0x3c, 0x01, 0xb2, 0xf2, 0xfd, 0x6b, 0x3b, 0xc9, 0xaa, 0x83, 0x8f, 0x34, 0x9c, 0xee, 0x9b, 0xdd, 0x00, 0x36, 0xd6, 0xb1, 0x7e, 0x83, 0x73, 0xa8, 0x24, 0x1d, 0x31, 0x65, 0xb3, 0x12, 0xbd, 0x96, 0x35, 0xc6, 0x1c, 0xc5, 0x6c, 0x3d, 0xde, 0xc3, 0xbc, 0xee, 0xf3, 0xf1, 0x19, 0x08, 0x81, 0xb9, 0xc6, 0x89, 0xe0, 0xcd, 0x5a, 0x21, 0xdb, 0x3e, 0xce, 0xb1, 0xc1, 0x2c, 0xd6, 0x9d, 0xb1, 0xb1, 0xa6, 0x8d, 0x81, 0x10, 0xcb, 0x35, 0x2c, 0x48, 0xd5, 0x56, 0x08, 0x7d, 0x4d, 0xe2, 0x62, 0x90, 0x7b, 0x91, 0xb1, 0xb5, 0x6a, 0x7a, 0x7c, 0xa9, 0xe0, 0xc5, 0x31, 0xe3, 0xf1, 0xc3, 0xeb, 0x97, 0x8e, 0x33, 0xc4, 0x04, 0x5d, 0xbb, 0xbe, 0x1f, 0xa3, 0x9b, 0x03, 0xf6, 0x8c, 0x9e, 0x40, 0xca, 0xb0, 0x11, 0xa1, 0x67, 0xe6, 0x91, 0xb4, 0x9e, 0x46, 0x11, 0xf6, 0x40, 0x3d, 0x6b, 0xc6, 0xa9, 0x64, 0x97, 0x82, 0xe4, 0x1c, 0xca, 0x30, 0x41, 0x09, 0x47, 0x4e, 0x3d, 0xd9, 0xb0, 0x90, 0x3b, 0xa1, 0x89, 0x46, 0x13, 0x8d, 0x24, 0xf9, 0x3e, 0x31, 0x4e, 0x8b, 0xc3, 0x08, 0xd7, 0x74, 0x9e, 0x3f, 0x6a, 0xd9, 0xa8, 0x34, 0x8a, 0x1c, 0xf5, 0x12, 0x43, 0x2e, 0xcb, 0x3c, 0x42, 0xda, 0x06, 0x2a, 0xf5, 0x62, 0x3c, 0xc4, 0x2b, 0x60, 0x47, 0xcb, 0xc6, 0x5d, 0x4f, 0x98, 0x5c, 0x38, 0x8f, 0x56, 0xe0, 0xca, 0x64, 0xfd, 0xc5, 0x5e, 0xe4, 0x46, 0x68, 0xfe, 0x7c, 0x82, 0xdf, 0x8f, 0x6b, 0xf9, 0xbf, 0xd8, 0x1b, 0x63, 0x59, 0xd4, 0x68, 0xa4, 0x85, 0x78, 0x4f, 0x11, 0x76, 0x92, 0x7d, 0x90, 0x83, 0x0b, 0x05, 0x85, 0xdd, 0xd4, 0xc8, 0x77, 0x48, 0xcf, 0x27, 0x3c, 0x0a, 0xe7, 0x5e, 0x75, 0xc1, 0xb9, 0x23, 0x1d, 0x03, 0xb3, 0xa7, 0xb4, 0xa3, 0x7b, 0x2e, 0x3e, 0x0b, 0xf0, 0xd9, 0x0b, 0xfc, 0xb7, 0x34, 0xd9, 0xbd, 0xba, 0xa4, 0x73, 0x79, 0x6b, 0x72, 0x69, 0xf2, 0x4e, 0x50, 0x6f, 0xa9, 0x8d, 0x56, 0xc8, 0xb9, 0x5e, 0xf2, 0xdc, 0xeb, 0x4b, 0xca, 0x64, 0xef, 0xf5, 0xdf, 0x2a, 0xb9, 0x1e, 0x1d, 0xa5, 0xd7, 0x5f, 0x3f, 0x7b, 0x9a, 0x1d, 0xfe, 0x02, 0x7f, 0xe7, 0x0e, 0x97, 0xe2, 0xe3, 0xc0, 0xc7, 0x82, 0x8f, 0x0d, 0xce, 0xbd, 0xb6, 0x04, 0x67, 0xae, 0x8e, 0x21, 0x1e, 0xac, 0xdb, 0x13, 0x46, 0x9c, 0xb6, 0x95, 0xed, 0xc9, 0xae, 0xf6, 0xce, 0x92, 0x64, 0xfb, 0xea, 0xee, 0x35, 0xc9, 0x65, 0xed, 0x10, 0xe9, 0xee, 0x95, 0xcb, 0xae, 0x97, 0xa9, 0x22, 0xd9, 0xbc, 0x4c, 0x98, 0xba, 0xd2, 0x70, 0xab, 0x09, 0xe3, 0x1e, 0x73, 0x71, 0x3f, 0x9e, 0xb8, 0x47, 0x52, 0xd7, 0x09, 0x03, 0xbe, 0xfa, 0x23, 0x71, 0x23, 0x1f, 0xad, 0xcf, 0xe9, 0x7b, 0xf3, 0x02, 0x79, 0xb9, 0x77, 0xf6, 0xbd, 0xfa, 0x48, 0x36, 0x06, 0xed, 0xcd, 0xd1, 0x6d, 0x7b, 0x52, 0x89, 0xfe, 0x27, 0x3a, 0x4f, 0xf0, 0x0f, 0x2f, 0x8b, 0x7b, 0xf7, 0xc4, 0x7d, 0x14, 0xdf, 0x20, 0x6b, 0xe7, 0x64, 0x75, 0x47, 0x6f, 0xb5, 0x72, 0x1a, 0x60, 0x4b, 0xa9, 0xda, 0xb8, 0xdc, 0x56, 0x10, 0x4f, 0xb6, 0xf4, 0x51, 0x41, 0x69, 0x90, 0xdd, 0xe2, 0x9c, 0xba, 0xac, 0xa5, 0x5d, 0xb0, 0x71, 0xb1, 0xcf, 0x52, 0xec, 0x56, 0x27, 0xc7, 0x26, 0x2c, 0xd2, 0x46, 0x9a, 0x59, 0x99, 0xf8, 0x9b, 0x8d, 0x1d, 0xb6, 0xcc, 0x0e, 0xd0, 0xab, 0x83, 0xe9, 0xdc, 0x73, 0x62, 0x25, 0x99, 0xe7, 0x4b, 0xd7, 0xc9, 0x92, 0x84, 0x32, 0x1f, 0xdf, 0x07, 0xed, 0xa3, 0xb3, 0xf3, 0x5b, 0x46, 0x0e, 0x0e, 0x64, 0x28, 0x01, 0xda, 0xdd, 0x2c, 0xca, 0xb5, 0x83, 0x1c, 0xc8, 0x23, 0xdd, 0xa7, 0x57, 0x0f, 0x65, 0xa8, 0x08, 0xde, 0xa7, 0x99, 0x89, 0xd8, 0x57, 0x68, 0xeb, 0x90, 0x34, 0x62, 0x7e, 0x19, 0xdd, 0xca, 0xe4, 0x89, 0x24, 0x26, 0x67, 0x34, 0xf0, 0x8e, 0x78, 0x78, 0xff, 0x9a, 0xf4, 0x60, 0x7a, 0xa0, 0x5f, 0x3e, 0x46, 0x1a, 0xdc, 0xbb, 0xa3, 0x43, 0x72, 0xbe, 0x23, 0x95, 0xa2, 0x33, 0x3c, 0xb7, 0xb7, 0x16, 0xb0, 0x4b, 0x8a, 0x87, 0x5a, 0xc3, 0xec, 0x22, 0xd5, 0xab, 0x61, 0xcd, 0xcf, 0xee, 0xc9, 0x18, 0x6e, 0x67, 0xd7, 0xa4, 0x58, 0x52, 0x9b, 0xcf, 0x2e, 0x5b, 0x3c, 0x84, 0x6f, 0x13, 0x48, 0x31, 0x8d, 0x64, 0xfe, 0xa1, 0x4d, 0x5a, 0x1b, 0xbd, 0x13, 0xb3, 0x35, 0x2b, 0xbf, 0x4d, 0x72, 0x4a, 0x8b, 0xb2, 0xcb, 0xa1, 0x9d, 0xa5, 0xb7, 0xfc, 0x1c, 0xc0, 0xd7, 0x86, 0xb5, 0xf9, 0x86, 0xfb, 0xdc, 0xab, 0x6f, 0x6b, 0x65, 0x1c, 0xae, 0x6b, 0x87, 0xfd, 0x88, 0xd9, 0xc4, 0x39, 0x4d, 0xb9, 0x72, 0xdd, 0x69, 0xa0, 0xd3, 0x27, 0x51, 0x1f, 0x70, 0xcc, 0xbb, 0x35, 0x87, 0xc8, 0x1f, 0xe9, 0x52, 0x49, 0xb5, 0xc8, 0x75, 0x7c, 0x1a, 0xe5, 0x20, 0x9f, 0x49, 0x00, 0x9d, 0x2c, 0x16, 0xa5, 0x21, 0xd1, 0x9a, 0xb6, 0x9f, 0xde, 0xd8, 0x2f, 0xee, 0xe0, 0xa0, 0xf1, 0x05, 0xe7, 0x0b, 0x87, 0xf0, 0xd9, 0x04, 0xe7, 0xfe, 0xf8, 0x12, 0x3f, 0xe7, 0x93, 0x11, 0x38, 0x5f, 0xfc, 0x1c, 0x9c, 0x5f, 0xe3, 0x80, 0xf3, 0xdb, 0x9d, 0x70, 0xbe, 0xb5, 0x14, 0xce, 0xaf, 0x6e, 0x84, 0xf3, 0xeb, 0x8b, 0xe0, 0x7c, 0xb0, 0x07, 0xce, 0x0f, 0x3d, 0x0c, 0xe7, 0xe3, 0x6f, 0xc1, 0xf9, 0xff, 0xb6, 0x04, 0xce, 0xd7, 0x3c, 0x09, 0xe7, 0x1b, 0x31, 0x6c, 0xd1, 0xeb, 0x70, 0x7e, 0x29, 0xe6, 0xe3, 0x6f, 0x81, 0xf3, 0x15, 0x18, 0xd6, 0x7a, 0x0a, 0xce, 0x7f, 0x6b, 0x14, 0xce, 0x17, 0xec, 0x87, 0xf3, 0x6d, 0x6b, 0x31, 0x6e, 0x5d, 0x66, 0x94, 0x9f, 0x0f, 0xe1, 0x73, 0x3f, 0xc6, 0x7b, 0x60, 0x04, 0xce, 0xff, 0x95, 0x05, 0xce, 0xdf, 0xf0, 0x28, 0x9c, 0xff, 0x49, 0x3d, 0x96, 0xd1, 0x06, 0xe7, 0x97, 0x61, 0xda, 0x45, 0x73, 0xe1, 0xfc, 0xd7, 0x7a, 0xe1, 0xfc, 0xcd, 0xc3, 0x98, 0x7f, 0x0d, 0xc6, 0xc5, 0x72, 0x7f, 0x72, 0x06, 0xce, 0xdf, 0x8b, 0x65, 0x15, 0x62, 0xdc, 0x0e, 0xcc, 0x77, 0x79, 0x39, 0x9c, 0xff, 0x51, 0x13, 0x3e, 0x1b, 0xb0, 0x5e, 0xe8, 0xbf, 0xfe, 0x20, 0x9c, 0xbf, 0x31, 0x01, 0xe7, 0x9b, 0x31, 0xfc, 0x31, 0x6c, 0xc3, 0x62, 0xac, 0xf7, 0xb7, 0x3f, 0x81, 0xf3, 0x4d, 0x98, 0xbe, 0x19, 0xc3, 0x1e, 0xf7, 0x62, 0x5c, 0xcc, 0x23, 0x8a, 0xed, 0xda, 0x3c, 0x88, 0xf9, 0x1e, 0xc3, 0x76, 0x62, 0xba, 0xd5, 0x98, 0xbe, 0xf1, 0x38, 0x9c, 0xdf, 0x80, 0x6d, 0xe9, 0xc6, 0x34, 0x5d, 0xd8, 0x86, 0x2d, 0xe8, 0x7f, 0x9f, 0x0c, 0xe7, 0xbf, 0x8f, 0x75, 0x6a, 0xd8, 0x0d, 0xe7, 0x07, 0xb1, 0x6d, 0x2b, 0xf0, 0x5b, 0x3d, 0x8c, 0xf1, 0xb0, 0xce, 0xdf, 0x77, 0xc3, 0xf9, 0x08, 0x96, 0xd5, 0x33, 0x1f, 0xce, 0xd7, 0x61, 0x9a, 0xd0, 0x2d, 0x70, 0x7e, 0x16, 0xd6, 0xbd, 0xf4, 0x00, 0xd6, 0xf1, 0x5d, 0x38, 0xdf, 0x82, 0xf0, 0xb8, 0xff, 0x04, 0x9c, 0xbf, 0x3d, 0x85, 0xf1, 0xcf, 0xe2, 0x37, 0xb6, 0xe7, 0x7e, 0x7c, 0x6e, 0xc2, 0xfc, 0xba, 0xb0, 0x9c, 0x0d, 0x08, 0xd7, 0x16, 0x4c, 0xff, 0x40, 0x18, 0xe3, 0xec, 0xc0, 0x37, 0xba, 0xef, 0xa0, 0xf2, 0xb0, 0x9c, 0xdb, 0x11, 0xb6, 0x8f, 0xfc, 0x08, 0xce, 0xcf, 0x44, 0x98, 0xc9, 0x08, 0x77, 0x05, 0xeb, 0x77, 0x4d, 0x3f, 0x9c, 0x5f, 0x87, 0x70, 0xba, 0x35, 0x88, 0xed, 0xc2, 0xba, 0x76, 0xe0, 0xfb, 0xbf, 0x61, 0xdb, 0xae, 0x3d, 0x82, 0xfe, 0xd8, 0xd6, 0xaf, 0x62, 0x3d, 0x6e, 0xda, 0x84, 0xf5, 0xc7, 0xbe, 0x59, 0x8e, 0xf5, 0xbf, 0xd9, 0x85, 0x70, 0x2c, 0xc4, 0x76, 0x23, 0x8c, 0x06, 0x31, 0xef, 0xa5, 0xd8, 0x07, 0x85, 0x3b, 0xb1, 0x6f, 0xb0, 0x0e, 0x7f, 0xb5, 0x15, 0xce, 0x6f, 0xcb, 0x87, 0xf3, 0xff, 0x8a, 0xfe, 0xad, 0x58, 0x9f, 0xee, 0x0e, 0x38, 0x5f, 0x74, 0x17, 0xc2, 0x05, 0xeb, 0x34, 0x84, 0xfd, 0x32, 0x4b, 0xc5, 0x7e, 0x7f, 0x16, 0xe1, 0x86, 0x6d, 0x4d, 0x61, 0x3e, 0x3f, 0xc0, 0x7e, 0x5c, 0x81, 0x65, 0xac, 0xc4, 0xfe, 0x5a, 0x81, 0x75, 0x59, 0x8d, 0x61, 0x5d, 0xb2, 0xe8, 0xc7, 0xc5, 0x49, 0xf1, 0x6e, 0x22, 0xff, 0x73, 0x58, 0x0f, 0x84, 0xf3, 0xd6, 0x02, 0x38, 0x5f, 0x8b, 0xf5, 0xde, 0x88, 0x63, 0x48, 0xc3, 0xba, 0x04, 0x11, 0xce, 0x51, 0x2c, 0xc3, 0x87, 0x7d, 0x59, 0x8c, 0x65, 0x17, 0x6f, 0xc7, 0x31, 0xa5, 0x21, 0xec, 0xb0, 0x1d, 0x3f, 0x3e, 0x27, 0xd2, 0xaf, 0xc6, 0x76, 0x77, 0x61, 0x9b, 0x6a, 0x3a, 0xe1, 0xfc, 0x30, 0x96, 0xd7, 0x88, 0x75, 0xf9, 0x7e, 0x4f, 0x76, 0xbc, 0xdc, 0xf7, 0x38, 0x61, 0xd4, 0x50, 0x75, 0x53, 0xa3, 0x3c, 0x6b, 0xb5, 0x5f, 0xae, 0xb9, 0xfe, 0xaf, 0x67, 0x25, 0xe4, 0x9a, 0x32, 0xfe, 0xfd, 0x3a, 0xff, 0xce, 0xc5, 0x5f, 0xbf, 0xbc, 0xe0, 0x16, 0x79, 0x56, 0xc2, 0x8e, 0xb4, 0x11, 0xfe, 0x65, 0x22, 0x4e, 0xfc, 0x96, 0x1b, 0xba, 0x6b, 0x93, 0x49, 0x0e, 0x58, 0x7d, 0xe7, 0xea, 0x68, 0xfb, 0x77, 0xd6, 0xb4, 0xaf, 0xee, 0x81, 0x9b, 0xd6, 0xb4, 0xaf, 0x69, 0x6f, 0x5a, 0xba, 0x6c, 0x65, 0x7b, 0x0f, 0x24, 0xf0, 0xd5, 0xf9, 0x5d, 0x58, 0xd3, 0x65, 0x38, 0x56, 0x2d, 0x5d, 0xd9, 0xbe, 0xe0, 0x96, 0xa5, 0xc9, 0xf6, 0xa5, 0x10, 0x6f, 0xef, 0x69, 0xbd, 0xb3, 0xa7, 0x1d, 0x12, 0x6b, 0xc4, 0xbb, 0xb3, 0xbb, 0x2b, 0xbe, 0x62, 0xcd, 0xaa, 0x04, 0x2c, 0xc3, 0xd0, 0x9e, 0xf6, 0x65, 0xdd, 0xd0, 0xd6, 0xde, 0xd9, 0xce, 0x8e, 0x65, 0x4b, 0x3b, 0x3b, 0xe9, 0xd5, 0xfd, 0xdd, 0xa5, 0xcb, 0x7b, 0x00, 0xf1, 0xfe, 0x9a, 0x55, 0xe4, 0x4d, 0x79, 0xae, 0xee, 0x49, 0x2e, 0xef, 0x8a, 0x1b, 0x05, 0x18, 0x1f, 0x1d, 0xdd, 0x9d, 0x6d, 0x8b, 0x97, 0xae, 0x5e, 0x49, 0x95, 0xea, 0x69, 0x5f, 0x95, 0xae, 0x17, 0x66, 0xdb, 0xb6, 0xbc, 0x0b, 0x8b, 0xbb, 0xa3, 0x7d, 0x2e, 0x7f, 0x74, 0x41, 0xcf, 0xf2, 0xb6, 0x3b, 0x71, 0x61, 0xf8, 0x36, 0x66, 0x5b, 0xd7, 0x9d, 0xac, 0xee, 0x58, 0x9a, 0xa4, 0x6a, 0x7d, 0xb7, 0x3b, 0xd9, 0x46, 0xd5, 0xe2, 0x77, 0x0f, 0x66, 0x44, 0xc5, 0xde, 0x71, 0xfd, 0xb7, 0x4a, 0xe1, 0xbb, 0xc9, 0xe5, 0x3d, 0xed, 0xd8, 0x64, 0xe8, 0x4e, 0xb4, 0x77, 0xc5, 0x96, 0x77, 0xb6, 0x63, 0x9d, 0x56, 0x25, 0xb0, 0x39, 0x8b, 0x97, 0xaf, 0x6a, 0x07, 0x98, 0x05, 0x93, 0x48, 0x22, 0xf6, 0x65, 0x56, 0xbc, 0x4f, 0xbc, 0xf8, 0x24, 0xf0, 0xe9, 0x9f, 0xe0, 0xff, 0x24, 0x3e, 0x23, 0xf8, 0x1c, 0xc6, 0xe7, 0x04, 0x3e, 0xa3, 0xc2, 0xff, 0x4f, 0x4e, 0x7c, 0x5a, 0xf0, 0xe9, 0xc4, 0x27, 0x85, 0xcf, 0x56, 0x7c, 0xb6, 0xe3, 0x83, 0x38, 0xee, 0x4f, 0x07, 0xf1, 0x39, 0x8e, 0xcf, 0x39, 0x38, 0x77, 0x0e, 0x57, 0xd1, 0x73, 0x32, 0x3e, 0xb8, 0xb2, 0x9f, 0xab, 0x17, 0x69, 0xcf, 0x2d, 0xc9, 0xe6, 0x7f, 0x0e, 0xcb, 0x3c, 0x37, 0x84, 0xcf, 0x63, 0xf8, 0x75, 0xaf, 0xe1, 0x87, 0x79, 0x9c, 0x7b, 0x1d, 0x9f, 0xb7, 0xf0, 0x39, 0x85, 0x8f, 0x51, 0xe6, 0x79, 0x37, 0x3e, 0x1a, 0x3e, 0xdb, 0xb3, 0xe9, 0xcf, 0xef, 0x87, 0x73, 0x17, 0xb0, 0x2e, 0x17, 0x70, 0xc5, 0xbe, 0xd0, 0x87, 0x0f, 0xd6, 0xf5, 0x02, 0xf9, 0x61, 0x7d, 0x2f, 0x60, 0xf9, 0x9f, 0x06, 0xf1, 0xc1, 0x34, 0x9f, 0x62, 0x1d, 0x3f, 0x45, 0xff, 0x51, 0x8c, 0x3b, 0x8a, 0xf5, 0x1e, 0x7d, 0x0c, 0x1f, 0x6c, 0xcf, 0x45, 0xcc, 0xe3, 0xa2, 0x8a, 0x0f, 0xc6, 0xbb, 0x88, 0x71, 0x2e, 0x3e, 0x8a, 0x0f, 0xe2, 0xcc, 0x8b, 0xd8, 0x86, 0x8b, 0xd8, 0x86, 0x31, 0x8c, 0x3f, 0x86, 0x61, 0x63, 0x98, 0x66, 0x0c, 0xdb, 0x3a, 0xb6, 0x01, 0x9f, 0xc7, 0xf1, 0xc1, 0x3a, 0x8e, 0x1d, 0x83, 0x73, 0x3a, 0xa6, 0xd5, 0xd1, 0x5f, 0xdf, 0x85, 0x0f, 0xce, 0x49, 0xa4, 0x0c, 0xcf, 0x03, 0xce, 0x7b, 0xc0, 0x79, 0x02, 0xbb, 0xf0, 0x41, 0xbc, 0x66, 0x42, 0xdc, 0x61, 0xc2, 0xf9, 0x62, 0x42, 0x3f, 0xd3, 0x63, 0xf8, 0x20, 0x1e, 0x91, 0x70, 0x3e, 0x48, 0x7e, 0x7c, 0x30, 0x4c, 0xc2, 0xb9, 0x23, 0xe1, 0x3c, 0x97, 0x70, 0x2e, 0x49, 0x98, 0x46, 0xc2, 0x7c, 0x24, 0x9c, 0x63, 0x66, 0x9c, 0xb7, 0x66, 0xfc, 0x36, 0xe3, 0x5c, 0x35, 0x63, 0x1a, 0x0b, 0xce, 0x1b, 0x0b, 0xe2, 0xa9, 0x2b, 0x11, 0x3f, 0x59, 0x30, 0xad, 0x05, 0x71, 0x81, 0x05, 0xe7, 0xbb, 0x05, 0xd3, 0x59, 0x10, 0xbf, 0x59, 0x10, 0xcf, 0x4e, 0xc2, 0xef, 0x49, 0x6d, 0x62, 0x8e, 0x4d, 0xea, 0xc3, 0x07, 0x71, 0xdb, 0x24, 0xc4, 0x57, 0x56, 0x2c, 0xcf, 0xba, 0x18, 0x1f, 0x2c, 0xc7, 0x8a, 0xf1, 0xad, 0x3b, 0x44, 0x1c, 0x2b, 0xe6, 0x6b, 0xc5, 0x3a, 0x4e, 0xae, 0xb9, 0x64, 0x4c, 0x9c, 0x9f, 0x8c, 0x38, 0x60, 0x32, 0xe2, 0x8c, 0xc9, 0x18, 0xc7, 0x86, 0xed, 0x42, 0x7a, 0xfa, 0xbc, 0x0d, 0xd3, 0xdb, 0x30, 0xbd, 0x0d, 0xeb, 0x65, 0x3b, 0x0d, 0xe7, 0xa7, 0x60, 0xbe, 0x53, 0xb0, 0xbd, 0x53, 0xb0, 0x3e, 0x53, 0x2a, 0xf1, 0xc1, 0x36, 0x4e, 0x41, 0x7c, 0x37, 0xe5, 0xd9, 0xcb, 0x8e, 0xb3, 0xf3, 0x53, 0x5e, 0x37, 0xde, 0x98, 0xd6, 0x8e, 0x69, 0xed, 0x88, 0x23, 0xec, 0x88, 0x3f, 0xed, 0x8f, 0xe3, 0xf3, 0xd2, 0xa5, 0xf1, 0xa7, 0x22, 0xbe, 0x9a, 0xfa, 0x30, 0xfc, 0xe7, 0xdf, 0x7f, 0xfe, 0xfd, 0xe7, 0xdf, 0x7f, 0xfe, 0xfd, 0xe7, 0xdf, 0x7f, 0xfe, 0xfd, 0xe7, 0xdf, 0x7f, 0xfe, 0xfd, 0xff, 0xf0, 0x47, 0xb2, 0xa8, 0x77, 0x90, 0x3a, 0xfb, 0xdd, 0xa3, 0x50, 0x36, 0x65, 0x18, 0xce, 0x7d, 0x54, 0x80, 0xdf, 0xc8, 0x8d, 0xb9, 0x2b, 0x2e, 0x1f, 0x5f, 0x88, 0xa3, 0xda, 0x72, 0xa4, 0x51, 0xdf, 0x28, 0x2d, 0x99, 0x37, 0xf7, 0x12, 0x71, 0x54, 0x0a, 0x26, 0x1f, 0x22, 0x7b, 0x52, 0xf8, 0x7e, 0xd5, 0x78, 0x1f, 0x36, 0xde, 0xaf, 0xd1, 0x7b, 0x42, 0xb6, 0xd7, 0xe0, 0x43, 0xf2, 0xa2, 0xbf, 0xc1, 0x87, 0x78, 0x7c, 0xa2, 0x7d, 0x76, 0xe3, 0x43, 0x71, 0xcf, 0x02, 0x98, 0xf2, 0xf1, 0xb9, 0x1e, 0x9f, 0x1b, 0xe1, 0xdc, 0xc7, 0xd7, 0xe2, 0x73, 0x1d, 0x3e, 0xc5, 0xf8, 0x04, 0xf0, 0xf9, 0x3a, 0x3e, 0xdf, 0xc4, 0xe7, 0xaf, 0xf0, 0xb9, 0x01, 0x9f, 0x6a, 0x7c, 0x16, 0xe0, 0xb3, 0x10, 0x1f, 0x8a, 0xdf, 0x8c, 0xcf, 0x6d, 0xf8, 0x2c, 0xc5, 0x67, 0x39, 0x3e, 0xab, 0xf1, 0xe9, 0xc7, 0x67, 0x1d, 0x3e, 0x48, 0xd7, 0x7e, 0xfc, 0x10, 0x3e, 0x7f, 0x6f, 0xd4, 0x83, 0x8e, 0xa9, 0x39, 0xf0, 0x71, 0xe2, 0xe3, 0xc2, 0x87, 0xf8, 0x43, 0x15, 0x1f, 0x6f, 0x4d, 0xf7, 0xea, 0x3b, 0xae, 0xff, 0xe6, 0x1d, 0xb5, 0x7d, 0x4b, 0x57, 0x2d, 0xef, 0x6a, 0x07, 0xfe, 0x2c, 0xc7, 0xcf, 0x48, 0x7b, 0x5f, 0x96, 0xbf, 0xb3, 0x18, 0x29, 0x6d, 0xc6, 0x1b, 0x29, 0xd6, 0x65, 0xc8, 0x4d, 0xb6, 0x21, 0xf5, 0xda, 0xa6, 0xe0, 0x63, 0xff, 0xac, 0x78, 0xa9, 0xb4, 0x2f, 0x04, 0x41, 0x36, 0xd3, 0xbb, 0x2a, 0x24, 0xa2, 0xa6, 0xc0, 0xfc, 0x3e, 0x3e, 0x27, 0xf1, 0xf9, 0x00, 0x9f, 0x53, 0xf8, 0x7c, 0x88, 0xcf, 0x47, 0xf8, 0x7c, 0x8c, 0xcf, 0xef, 0xf1, 0x39, 0x87, 0xcf, 0x05, 0x7c, 0x90, 0x90, 0x37, 0x23, 0x7c, 0x2d, 0xcc, 0x03, 0x71, 0x05, 0xbf, 0x71, 0xc7, 0xcd, 0x5d, 0x8d, 0xdd, 0xcb, 0x56, 0x92, 0x47, 0xdc, 0x78, 0x96, 0x1b, 0x0f, 0x71, 0xbc, 0x6b, 0xf1, 0xf9, 0x35, 0x3e, 0xff, 0x1b, 0x9f, 0x57, 0xf0, 0x79, 0x1b, 0x9f, 0x13, 0xf8, 0x9c, 0xc2, 0xe7, 0x34, 0x3e, 0x7f, 0x40, 0x88, 0x07, 0x04, 0xe4, 0xaf, 0x40, 0x4e, 0xe5, 0x8a, 0x9f, 0x02, 0x5c, 0x39, 0x8c, 0xcf, 0x7a, 0x80, 0xeb, 0xb0, 0xde, 0xd7, 0x4d, 0x4f, 0x37, 0xbc, 0xa8, 0xab, 0xbb, 0x47, 0x6e, 0xef, 0xea, 0x5e, 0x13, 0xef, 0x90, 0x57, 0xb5, 0xaf, 0xea, 0xc6, 0x61, 0xb1, 0xb4, 0x77, 0xe9, 0xf2, 0xce, 0xa5, 0xad, 0xc8, 0xa4, 0x5d, 0x99, 0x48, 0x76, 0x2f, 0x6b, 0x5f, 0xbd, 0x5a, 0xee, 0xa1, 0x4f, 0x39, 0xb6, 0xa6, 0xb3, 0x13, 0xa6, 0xb5, 0x2e, 0x6d, 0x93, 0x91, 0x3b, 0x4c, 0x74, 0x22, 0xb3, 0x09, 0x53, 0xe9, 0xab, 0x6b, 0xcd, 0xaa, 0xd6, 0xf6, 0x24, 0x14, 0x26, 0x91, 0x61, 0x5c, 0x9e, 0x6c, 0x6f, 0x93, 0x97, 0x26, 0xe3, 0xc8, 0x69, 0x76, 0xf5, 0xc8, 0xab, 0x96, 0xaf, 0x5e, 0x4d, 0x9c, 0x65, 0x51, 0xef, 0xd2, 0xce, 0x35, 0xed, 0xf2, 0xd2, 0x58, 0x4f, 0x7b, 0x52, 0x5e, 0xd9, 0x7e, 0x27, 0x71, 0x88, 0x99, 0xc0, 0xc2, 0xef, 0x26, 0x91, 0x85, 0x35, 0x72, 0x91, 0xbb, 0x63, 0x99, 0xe4, 0xab, 0x61, 0xfa, 0x9a, 0xae, 0x55, 0x4b, 0x7b, 0x96, 0x75, 0x60, 0x9e, 0xdf, 0x59, 0xd3, 0xdd, 0xd3, 0xbe, 0x1a, 0x94, 0x4c, 0xde, 0x9d, 0xd8, 0x9b, 0xf2, 0xf2, 0x2e, 0xcc, 0x79, 0x79, 0x9b, 0xdc, 0x9d, 0x94, 0x7b, 0xba, 0xbb, 0x65, 0xe2, 0x85, 0xe1, 0x2b, 0xc4, 0x60, 0xca, 0xcb, 0x57, 0xcb, 0xdc, 0xb4, 0xbe, 0xf6, 0x65, 0x6b, 0xb8, 0xfa, 0x70, 0x75, 0x3a, 0x32, 0x32, 0xc2, 0xcb, 0xdb, 0x44, 0x16, 0x42, 0x52, 0x7b, 0x55, 0x57, 0xb7, 0xdc, 0xd6, 0x1e, 0x5b, 0xba, 0xa6, 0xb3, 0x47, 0x6e, 0xc3, 0x16, 0x2c, 0xeb, 0x41, 0x38, 0xc0, 0xf4, 0xee, 0xd6, 0x15, 0xe8, 0xa4, 0x9c, 0x96, 0x77, 0xc9, 0x6b, 0x56, 0xb7, 0x43, 0x81, 0xe1, 0xb3, 0xb4, 0x93, 0xd8, 0xe0, 0x3b, 0x31, 0xf3, 0xe5, 0xab, 0xb1, 0x96, 0xae, 0x4c, 0x1a, 0x2e, 0x32, 0xd6, 0xbd, 0xa6, 0xab, 0x2d, 0x93, 0x3a, 0xeb, 0xf3, 0xd5, 0x74, 0xf9, 0xdf, 0x5d, 0xde, 0xd5, 0xd6, 0xfd, 0x5d, 0x2c, 0x71, 0xf5, 0xb2, 0xe4, 0xf2, 0x44, 0xcf, 0xf2, 0xee, 0xae, 0x4c, 0x6c, 0x6e, 0x04, 0x36, 0xb1, 0x1d, 0xae, 0xa1, 0x56, 0x08, 0x46, 0x5c, 0x5e, 0xba, 0x8c, 0x22, 0xc9, 0x3d, 0x77, 0x26, 0xda, 0xe5, 0x35, 0x5d, 0x2b, 0xbb, 0xba, 0xbf, 0xdb, 0x05, 0xae, 0x74, 0xfe, 0x4b, 0x57, 0x65, 0xc0, 0x00, 0xae, 0x0c, 0x3c, 0x44, 0x60, 0x27, 0x0d, 0xa1, 0x6b, 0xb2, 0xed, 0xa0, 0xca, 0x20, 0x80, 0x33, 0x1d, 0x45, 0x39, 0xc2, 0x95, 0x6d, 0xcb, 0x57, 0xaf, 0xe4, 0x20, 0x4e, 0x8b, 0xdd, 0xda, 0x06, 0x6e, 0xf6, 0xc3, 0x14, 0xcc, 0xb9, 0xcf, 0xc1, 0x71, 0xd0, 0x83, 0x59, 0x60, 0x00, 0xa6, 0xe5, 0x12, 0x97, 0x2e, 0x4b, 0x76, 0xe3, 0xc0, 0x68, 0x6b, 0xef, 0x5d, 0x8e, 0x23, 0x44, 0x5e, 0xda, 0x43, 0x43, 0x82, 0x22, 0x4c, 0x00, 0x06, 0xf9, 0xde, 0x09, 0x4e, 0x6a, 0xd7, 0xaa, 0xa5, 0x5d, 0x77, 0xca, 0x9d, 0xed, 0xbd, 0xed, 0x9d, 0xd8, 0x8d, 0x22, 0xa1, 0xec, 0xc5, 0x8e, 0xeb, 0xed, 0xee, 0xc4, 0x1e, 0x9d, 0x9d, 0xae, 0xdf, 0x2a, 0x04, 0x16, 0x65, 0x34, 0x6d, 0x75, 0x7b, 0xfb, 0x4a, 0x39, 0x86, 0x63, 0x71, 0x4d, 0xb2, 0x1d, 0x5c, 0xcb, 0xba, 0x57, 0x71, 0xb7, 0x63, 0xac, 0x4c, 0x4f, 0x4f, 0x4b, 0xd7, 0x92, 0x47, 0xa6, 0x92, 0x6d, 0x67, 0xa6, 0xbe, 0x72, 0x2c, 0xd9, 0xbd, 0x4a, 0x66, 0x81, 0x08, 0x81, 0xd9, 0x9d, 0x1e, 0x1a, 0xdc, 0xac, 0x6c, 0xb4, 0xec, 0x98, 0xa1, 0x8e, 0xcd, 0xf1, 0xbf, 0x8a, 0x6a, 0xb4, 0x54, 0x00, 0x46, 0xae, 0xb9, 0xb1, 0x59, 0xa6, 0x12, 0x61, 0x3a, 0x8d, 0x17, 0x2e, 0xba, 0x4b, 0x6e, 0x4b, 0x2e, 0xef, 0x6d, 0x87, 0xaf, 0xa1, 0x0f, 0x4e, 0x9e, 0x76, 0x9c, 0x4a, 0x3d, 0xc9, 0xe5, 0xed, 0x3c, 0x62, 0xb2, 0x23, 0xc9, 0x95, 0xad, 0xd9, 0xea, 0xee, 0x18, 0x0f, 0xdd, 0x95, 0xb9, 0xc3, 0x8b, 0xbe, 0xb1, 0xb0, 0x7c, 0x9a, 0x4c, 0x9d, 0xdd, 0x4b, 0xdb, 0xb8, 0x32, 0x1d, 0xd8, 0xd3, 0x70, 0x75, 0x6c, 0x4d, 0x97, 0xe8, 0x7c, 0xaa, 0xc8, 0x72, 0x9c, 0x75, 0xed, 0x04, 0x05, 0x8a, 0x8c, 0x99, 0xd3, 0x2c, 0x22, 0x7f, 0xea, 0x66, 0xf4, 0x2a, 0x30, 0xbc, 0xe8, 0x53, 0x5e, 0xd6, 0xdd, 0xd9, 0xb9, 0x7c, 0x35, 0x35, 0xda, 0x95, 0xeb, 0xdd, 0xb3, 0x7c, 0x55, 0x7b, 0xf7, 0x9a, 0x9e, 0x8c, 0xe7, 0x9a, 0x2e, 0xf6, 0x6e, 0x4f, 0x26, 0xbb, 0x93, 0xe0, 0x6c, 0x5d, 0x13, 0x8b, 0xd1, 0x1c, 0xec, 0x6d, 0x4f, 0xc6, 0x3a, 0xbb, 0xbf, 0x0b, 0x53, 0x7c, 0x3e, 0x5f, 0x08, 0x41, 0xb2, 0x12, 0x5c, 0x5c, 0xa7, 0x09, 0x33, 0xea, 0x6b, 0xb7, 0x70, 0xd7, 0xc9, 0xca, 0xac, 0xd5, 0x4a, 0xba, 0xfb, 0xb2, 0x63, 0xe8, 0x9a, 0x09, 0xa1, 0x13, 0x61, 0x7e, 0x5d, 0x53, 0x67, 0xfb, 0xd2, 0xd5, 0x34, 0x78, 0x57, 0xb7, 0x27, 0x7b, 0x8c, 0x61, 0x60, 0xc4, 0xee, 0x92, 0x69, 0xb0, 0x08, 0xd8, 0x7a, 0x8d, 0x78, 0xc9, 0x76, 0xc4, 0x39, 0x38, 0x66, 0x3e, 0x33, 0xe2, 0xb5, 0x9f, 0x1f, 0x91, 0xde, 0xe0, 0x9a, 0x50, 0x29, 0x1e, 0x39, 0x5f, 0x89, 0x70, 0x2f, 0xa7, 0xfb, 0x37, 0x13, 0xd9, 0x1d, 0x31, 0xfa, 0x39, 0x81, 0x28, 0x83, 0x07, 0x9f, 0x11, 0xe0, 0xb9, 0xb5, 0x7b, 0x8d, 0xbc, 0xe8, 0xe6, 0xe6, 0xc5, 0x9f, 0x57, 0xd6, 0x4c, 0xb8, 0x36, 0xb7, 0xb0, 0x8e, 0xa5, 0x38, 0x4d, 0x78, 0x7c, 0x05, 0x04, 0x24, 0x04, 0xcc, 0xad, 0xd1, 0xf6, 0x1e, 0x1c, 0x22, 0x93, 0xab, 0x97, 0x76, 0x2d, 0x6b, 0xef, 0x84, 0xe9, 0xcd, 0x62, 0xca, 0x27, 0x85, 0xf0, 0x8d, 0xd0, 0x2a, 0x0d, 0x2d, 0x42, 0x82, 0x88, 0x2b, 0xe5, 0xda, 0x4e, 0x6c, 0x1f, 0xce, 0x99, 0xda, 0xae, 0xb6, 0x86, 0x18, 0x54, 0xf4, 0x74, 0x60, 0x13, 0x68, 0x66, 0x2c, 0xed, 0x6a, 0xe3, 0xd1, 0xb5, 0x26, 0x91, 0xe8, 0x5e, 0x4d, 0x13, 0xbb, 0x5b, 0x6e, 0x6d, 0x27, 0x9c, 0xd5, 0x46, 0xb5, 0x49, 0xc7, 0x60, 0x94, 0x22, 0x77, 0x77, 0x75, 0xe2, 0x8c, 0x44, 0x8c, 0xd4, 0x1e, 0x43, 0x14, 0xda, 0x66, 0xd4, 0x03, 0xbe, 0x57, 0xdb, 0x58, 0x07, 0xe7, 0xff, 0xf7, 0x20, 0x80, 0xf9, 0x0f, 0x70, 0xfe, 0xc5, 0x37, 0x72, 0x28, 0x05, 0x98, 0xb5, 0xba, 0x42, 0x86, 0x59, 0xad, 0xf8, 0x93, 0xeb, 0x4b, 0x63, 0x29, 0x59, 0x22, 0x66, 0x32, 0xd4, 0x61, 0xde, 0xa2, 0xee, 0xd9, 0x0d, 0xa6, 0xb6, 0xf6, 0xd6, 0x35, 0xf1, 0x4c, 0xf4, 0xe6, 0x5b, 0x9b, 0x2b, 0xc6, 0xa5, 0x6f, 0xef, 0x4b, 0x2c, 0xed, 0xa2, 0x21, 0x9a, 0xf1, 0xb9, 0x5c, 0x26, 0x98, 0x0c, 0xaa, 0x39, 0x71, 0x35, 0x34, 0x36, 0x84, 0x9a, 0xd9, 0xd9, 0xb8, 0xbc, 0x75, 0x35, 0xd4, 0xd4, 0xde, 0x22, 0xbe, 0x6a, 0xda, 0x7b, 0x57, 0x43, 0xa3, 0x08, 0x00, 0xe1, 0xd5, 0x0c, 0x75, 0x37, 0x46, 0x16, 0x0b, 0x77, 0x5d, 0x37, 0xad, 0x25, 0xb5, 0x91, 0x5b, 0xaa, 0xa2, 0x22, 0xa3, 0xa6, 0x64, 0x7b, 0x6c, 0x75, 0xa0, 0xb6, 0xab, 0x77, 0x4e, 0x55, 0x12, 0xe1, 0x8a, 0x43, 0x27, 0xd4, 0x8d, 0x23, 0x60, 0x11, 0x61, 0x1e, 0x88, 0xb4, 0x7f, 0x57, 0x6e, 0x12, 0xeb, 0x1e, 0x40, 0xa4, 0xa1, 0xb1, 0x02, 0xee, 0x9c, 0xb3, 0x68, 0x4e, 0x1b, 0xac, 0x9a, 0xd3, 0x36, 0xe7, 0x4e, 0x68, 0x9b, 0xb3, 0x8a, 0x7f, 0x17, 0xe1, 0x2f, 0x84, 0x97, 0x76, 0x41, 0x5d, 0x7b, 0x2b, 0x2c, 0x5a, 0x9a, 0x84, 0xaa, 0x44, 0x12, 0xdf, 0x77, 0x42, 0x78, 0x4d, 0x17, 0x3e, 0x9d, 0x50, 0xb5, 0x26, 0x0e, 0xcd, 0xed, 0x09, 0xb8, 0x71, 0x59, 0x0f, 0x6d, 0xb4, 0x41, 0x4d, 0xfb, 0x32, 0x68, 0x46, 0xa0, 0x63, 0x94, 0x45, 0xdd, 0xfc, 0x5a, 0x8c, 0x1d, 0x4c, 0xef, 0x6f, 0xb7, 0xb7, 0x75, 0x09, 0xd7, 0xe2, 0x8e, 0x35, 0x49, 0x76, 0xd4, 0x25, 0x97, 0xd3, 0xab, 0x79, 0x69, 0xcf, 0x9a, 0x24, 0x07, 0x74, 0x23, 0x72, 0x49, 0xe2, 0x84, 0x5c, 0xdc, 0x4d, 0x9f, 0xb7, 0xf2, 0xc8, 0x20, 0x97, 0x68, 0x54, 0x05, 0x2c, 0xef, 0xea, 0x59, 0xb3, 0xbc, 0x27, 0x17, 0x94, 0xfd, 0x30, 0xb1, 0x87, 0x6f, 0xb8, 0xe1, 0x06, 0x08, 0x74, 0x74, 0xaf, 0x6a, 0x0f, 0xf4, 0x7c, 0x17, 0xe1, 0xdc, 0x15, 0xa0, 0xad, 0xc9, 0x00, 0xe2, 0xc7, 0x00, 0x76, 0x4a, 0xa0, 0x24, 0xd0, 0x2e, 0x28, 0xa4, 0x92, 0x65, 0xd8, 0xdd, 0xde, 0xd9, 0x32, 0x09, 0x8f, 0xdb, 0x69, 0xb1, 0xea, 0xe9, 0xc0, 0x71, 0xdb, 0xda, 0x1d, 0x5f, 0xb3, 0x5a, 0xa6, 0xfe, 0x21, 0xb2, 0x64, 0xa6, 0x4c, 0xbf, 0x7f, 0x3d, 0xab, 0x4f, 0xae, 0x6b, 0xa4, 0xdf, 0xaa, 0x65, 0x4c, 0x26, 0xcc, 0x6a, 0x93, 0x67, 0xad, 0x0e, 0xd0, 0x7f, 0x24, 0x98, 0xa2, 0x6b, 0xba, 0x64, 0x84, 0x65, 0x73, 0x47, 0x3b, 0xce, 0xb0, 0xcf, 0x2f, 0xb7, 0x0b, 0x49, 0xb1, 0xbf, 0x54, 0xb1, 0xb5, 0xdc, 0xd6, 0x86, 0x48, 0x05, 0x34, 0x2f, 0xae, 0xa1, 0xd7, 0x8d, 0x37, 0x2f, 0x66, 0x37, 0xbf, 0x6b, 0xa3, 0x51, 0xfe, 0xe0, 0x77, 0x53, 0xf4, 0xc6, 0x05, 0x35, 0x0d, 0xe8, 0xf8, 0xbc, 0xda, 0xc5, 0xdb, 0x7b, 0xc4, 0x08, 0x27, 0x5a, 0x88, 0x2b, 0x59, 0x31, 0xab, 0xad, 0x42, 0x46, 0x2a, 0xad, 0x11, 0x17, 0x7f, 0xc6, 0xf7, 0x77, 0xca, 0xa5, 0x7d, 0xb3, 0x12, 0x3c, 0xc1, 0x8d, 0xd5, 0x59, 0x2c, 0xd5, 0xb3, 0xda, 0x4a, 0x68, 0x24, 0xb5, 0x22, 0xae, 0xbc, 0x93, 0xda, 0xb2, 0x26, 0xee, 0x27, 0x7c, 0xd1, 0x8d, 0xc8, 0x6e, 0x79, 0xcf, 0x4c, 0x3b, 0x6d, 0x09, 0x2c, 0x68, 0xef, 0xa9, 0xe1, 0xdc, 0x69, 0xc4, 0x65, 0x5b, 0x1f, 0xc3, 0x29, 0x7e, 0xdd, 0xac, 0xd5, 0xd7, 0xd9, 0xa9, 0x83, 0x2b, 0x32, 0xbd, 0x5c, 0x7d, 0x63, 0xa4, 0xf9, 0xc6, 0xc6, 0xda, 0x0a, 0xf0, 0x91, 0xb3, 0x02, 0xa2, 0x55, 0xdf, 0xc6, 0xd6, 0xb4, 0xf7, 0x34, 0x11, 0x7a, 0xa0, 0xf9, 0x4f, 0xf8, 0x05, 0x91, 0x69, 0x6f, 0x3b, 0xaf, 0x61, 0xf1, 0xe4, 0xd2, 0x55, 0x4c, 0x1f, 0x94, 0xd8, 0x33, 0xb1, 0x20, 0xd9, 0x93, 0x9d, 0x91, 0x62, 0x4a, 0xf2, 0x18, 0xcf, 0xc9, 0x1a, 0x67, 0xb9, 0x9d, 0x7e, 0x32, 0xc5, 0x7e, 0xd6, 0xf8, 0xe7, 0x84, 0x50, 0xdd, 0xd8, 0x00, 0xa2, 0x93, 0xab, 0xd7, 0xac, 0xee, 0xc1, 0xd5, 0xf6, 0xcf, 0xf7, 0xb8, 0x58, 0x74, 0xfe, 0x52, 0x3d, 0x8e, 0x95, 0x20, 0x4c, 0x50, 0x21, 0x88, 0xa5, 0x39, 0xcb, 0xba, 0xbb, 0x62, 0xcb, 0xe3, 0x6b, 0x92, 0x4b, 0x79, 0xc5, 0xaf, 0xae, 0xa8, 0x8a, 0xde, 0xd8, 0x8c, 0x33, 0xae, 0x26, 0x89, 0x38, 0x22, 0x72, 0x63, 0xf5, 0x8d, 0x8b, 0x9a, 0x6e, 0x6c, 0x6e, 0x58, 0xdc, 0x70, 0x63, 0x04, 0x69, 0xfa, 0x1b, 0x23, 0x8d, 0xb7, 0x8e, 0xf3, 0x49, 0xc3, 0xa2, 0x22, 0x80, 0x7f, 0x0d, 0x5d, 0x38, 0xa5, 0x96, 0x76, 0xca, 0xd8, 0xc2, 0x40, 0xd5, 0xcd, 0x8b, 0x6f, 0x0c, 0x54, 0x37, 0xde, 0xd8, 0x5c, 0x1b, 0x68, 0x5e, 0x54, 0x15, 0x5d, 0x0c, 0x88, 0x62, 0x7a, 0x96, 0x26, 0x7b, 0xd6, 0x24, 0xe6, 0x34, 0x13, 0xaa, 0x46, 0xe4, 0x0d, 0x39, 0xf1, 0x81, 0x4a, 0x95, 0xe7, 0xc8, 0x8b, 0x3b, 0xda, 0x65, 0x76, 0x46, 0xb1, 0x5f, 0x96, 0x22, 0xb2, 0x91, 0x6f, 0x4c, 0xb4, 0x53, 0xd5, 0x10, 0x97, 0x0b, 0x44, 0x67, 0xaf, 0xee, 0x4e, 0xdc, 0x99, 0x5c, 0x1e, 0xef, 0xe8, 0x91, 0x7f, 0x2a, 0x5f, 0xff, 0xad, 0x6f, 0x7d, 0x63, 0x0e, 0x71, 0x62, 0xfe, 0x6c, 0xca, 0x1a, 0xa2, 0x98, 0xba, 0x13, 0x4c, 0xfc, 0x2c, 0x6e, 0x5f, 0xba, 0xaa, 0x44, 0xae, 0xea, 0xec, 0x94, 0x39, 0xc5, 0xea, 0x4c, 0x77, 0x97, 0xd8, 0x39, 0x2e, 0xd3, 0x12, 0xcb, 0xda, 0xbb, 0x08, 0xef, 0xd3, 0xf4, 0x47, 0xaa, 0x18, 0xb3, 0x41, 0x5c, 0xb1, 0x6a, 0x35, 0xd1, 0x7d, 0x3d, 0xe9, 0x3c, 0x9b, 0xd6, 0xb4, 0x62, 0x3c, 0xb9, 0x51, 0xc4, 0x95, 0xbd, 0x55, 0x4d, 0x8d, 0xb3, 0xfd, 0xf6, 0xa5, 0xb8, 0x50, 0x24, 0xee, 0xa4, 0x88, 0xdf, 0xed, 0x58, 0x8e, 0x55, 0xbd, 0x13, 0x17, 0xb9, 0xd5, 0x1d, 0xdd, 0x6b, 0x3a, 0xdb, 0x70, 0x6c, 0xf7, 0xd2, 0xba, 0xba, 0xac, 0x7d, 0x79, 0x6f, 0xba, 0xab, 0x78, 0xed, 0xc1, 0xd5, 0x11, 0xe9, 0x9d, 0xd6, 0x35, 0x8c, 0x7a, 0xec, 0xb7, 0x20, 0xc1, 0xd1, 0x23, 0x77, 0xf4, 0xf4, 0x24, 0x10, 0x7e, 0xdf, 0xfd, 0xee, 0x77, 0x4b, 0x58, 0xf9, 0xa1, 0x3b, 0x19, 0x0f, 0xf0, 0x88, 0x66, 0x02, 0x69, 0x79, 0x17, 0x3a, 0x57, 0x2d, 0x15, 0x09, 0x80, 0x7b, 0xa7, 0xa4, 0x15, 0xb1, 0x2f, 0xac, 0x9a, 0x57, 0xbe, 0x12, 0x47, 0x1f, 0xf7, 0xc0, 0xac, 0xc8, 0x7c, 0x59, 0x0c, 0xce, 0xc6, 0x0a, 0x1e, 0x4e, 0x08, 0xe4, 0x38, 0x8f, 0xb4, 0xc6, 0x8a, 0x9b, 0xb1, 0xc5, 0x59, 0xbf, 0xd5, 0x3c, 0xd8, 0xea, 0x6f, 0x8e, 0x2c, 0xbc, 0x23, 0x5a, 0xdb, 0x78, 0x63, 0xf5, 0xf5, 0xf3, 0x26, 0x52, 0x4a, 0xf6, 0x9c, 0xd0, 0xf2, 0xcf, 0x08, 0x8c, 0x54, 0x2d, 0xaa, 0xfd, 0x8c, 0xa0, 0xda, 0x96, 0xc5, 0x97, 0x09, 0xc1, 0x79, 0x2e, 0xe6, 0x38, 0xce, 0xfc, 0xd2, 0x79, 0x9d, 0x7d, 0x97, 0x46, 0x29, 0x59, 0x54, 0xbb, 0xa8, 0xee, 0x8e, 0xea, 0xfa, 0x86, 0x26, 0xc3, 0x89, 0xc5, 0x57, 0x35, 0x1a, 0xee, 0x85, 0x0d, 0xd5, 0x0b, 0x0d, 0x67, 0x5d, 0x55, 0xf3, 0x62, 0xc3, 0xd9, 0x74, 0x73, 0xa8, 0xb1, 0x01, 0x57, 0xa8, 0x3b, 0x57, 0x87, 0x90, 0x8c, 0x99, 0xc0, 0x67, 0x9b, 0xe0, 0xbc, 0xe3, 0xdd, 0xac, 0x7b, 0xea, 0x71, 0xc3, 0x7d, 0x1d, 0xd0, 0xfe, 0x99, 0xe0, 0x75, 0x21, 0xe7, 0x0d, 0xb9, 0xfe, 0xb4, 0xc7, 0xee, 0xb9, 0xa3, 0xfe, 0xf7, 0x85, 0x60, 0x3b, 0xfb, 0xea, 0x48, 0xfd, 0x2b, 0x30, 0x23, 0x72, 0x58, 0x93, 0x34, 0x77, 0xfd, 0x7b, 0x30, 0x12, 0x90, 0x02, 0x26, 0xb6, 0x40, 0xee, 0x6c, 0xda, 0xa8, 0x40, 0xe3, 0x9b, 0x66, 0xd6, 0x83, 0xca, 0xf1, 0x3f, 0xad, 0xb2, 0x06, 0xf0, 0xb2, 0x4d, 0x0a, 0x90, 0xbe, 0x24, 0x85, 0x37, 0xbe, 0x6f, 0x07, 0xfd, 0xac, 0x77, 0xb9, 0x3e, 0x1a, 0x79, 0x55, 0x9c, 0xcb, 0x95, 0x3b, 0x4c, 0x2e, 0xd9, 0x0b, 0x5b, 0x67, 0x05, 0xf5, 0xc5, 0x0f, 0xee, 0xaf, 0x7f, 0x2f, 0x38, 0x42, 0x5a, 0xa5, 0x7c, 0x7e, 0xc7, 0x14, 0xa8, 0x84, 0x73, 0xff, 0x16, 0xe3, 0x5f, 0x17, 0xe6, 0x74, 0x3e, 0xff, 0x40, 0xc6, 0x42, 0x73, 0x11, 0xe6, 0x27, 0x85, 0x52, 0x0a, 0x44, 0x8e, 0xc8, 0xa6, 0x77, 0x86, 0xa3, 0xec, 0x22, 0x6d, 0x4d, 0x0d, 0xde, 0x59, 0x2f, 0x4b, 0xd1, 0xc1, 0x50, 0xa9, 0x0d, 0xa6, 0xef, 0xf0, 0x82, 0x1b, 0xc2, 0xa5, 0x6e, 0x62, 0x83, 0xf3, 0xa2, 0x03, 0xd1, 0xc1, 0xc5, 0x3b, 0x6c, 0x10, 0xb9, 0xa0, 0x9f, 0x68, 0x7c, 0x13, 0xac, 0x94, 0x02, 0xeb, 0xbb, 0xd7, 0xbf, 0x42, 0x6f, 0x8a, 0x3c, 0xa5, 0x2b, 0x8d, 0x6f, 0x56, 0xc3, 0x04, 0x3f, 0xef, 0x65, 0xfc, 0x82, 0x97, 0xf1, 0xab, 0xbb, 0x8c, 0x5f, 0x63, 0xda, 0xef, 0x0b, 0xb6, 0xf3, 0x3b, 0x7f, 0xae, 0x9d, 0xef, 0xdc, 0xa7, 0x01, 0xd8, 0x42, 0x3b, 0xdc, 0xd0, 0x32, 0x70, 0xd3, 0x01, 0xfd, 0xdc, 0x84, 0xf2, 0x56, 0x5c, 0xa6, 0x0e, 0xbd, 0x97, 0xf1, 0xeb, 0xbf, 0x8c, 0xdf, 0xe0, 0x65, 0xfc, 0x86, 0x2f, 0xe3, 0xf7, 0xc0, 0x65, 0xfc, 0xb6, 0x5e, 0xc6, 0xef, 0x91, 0xcb, 0xf8, 0x3d, 0x79, 0x19, 0xbf, 0x9d, 0x97, 0xf1, 0x7b, 0xf6, 0x32, 0x7e, 0xbf, 0xba, 0x8c, 0xdf, 0xc1, 0xcb, 0xf8, 0x1d, 0xc9, 0xfa, 0x95, 0x8e, 0xbc, 0x73, 0x9f, 0x5c, 0xf5, 0xce, 0x7a, 0x25, 0xd4, 0xbc, 0x6e, 0xa5, 0x45, 0x79, 0x5d, 0x3b, 0x87, 0x90, 0x74, 0x4c, 0x88, 0xff, 0x76, 0x3a, 0x3e, 0x41, 0xdd, 0xb9, 0x1b, 0x40, 0x68, 0x9b, 0x6c, 0xf9, 0xb5, 0x6a, 0x12, 0x7a, 0x95, 0x72, 0x07, 0xec, 0xb8, 0xf1, 0x84, 0x3e, 0x2a, 0x4b, 0x91, 0x35, 0x91, 0x9f, 0x83, 0x93, 0xe3, 0xfe, 0x1c, 0xf2, 0xd5, 0xd9, 0x60, 0x49, 0xbb, 0x15, 0x29, 0xfd, 0x05, 0xf0, 0xce, 0x7d, 0xd7, 0x0f, 0xba, 0x8b, 0x64, 0xf3, 0x3b, 0xc3, 0x33, 0x53, 0x6e, 0xef, 0xcc, 0x21, 0xb7, 0x3a, 0xf3, 0xa7, 0xe0, 0x74, 0xfb, 0xbf, 0xc4, 0x38, 0xf8, 0x2f, 0x7f, 0x76, 0xbc, 0x7f, 0xb1, 0x7c, 0x86, 0xfe, 0x5c, 0x3e, 0x69, 0x38, 0x84, 0x07, 0x70, 0x76, 0xd8, 0x14, 0x09, 0x5b, 0x5c, 0x96, 0x3b, 0x3e, 0xbe, 0x60, 0x39, 0xdf, 0xff, 0x42, 0xe5, 0x18, 0x70, 0x25, 0xa8, 0x5a, 0x49, 0xf4, 0xb5, 0x24, 0x5d, 0x0a, 0xc0, 0x17, 0x2c, 0xe7, 0xe1, 0xbf, 0x10, 0x5c, 0x1e, 0xfb, 0xb3, 0xf9, 0xcc, 0xd6, 0xcf, 0xd2, 0x5b, 0xa9, 0x62, 0x3c, 0x75, 0xda, 0xcb, 0x5a, 0xe0, 0xe9, 0x36, 0xc8, 0xa6, 0x96, 0xd4, 0x3b, 0xc3, 0x8a, 0x64, 0x7b, 0x9e, 0xce, 0x5f, 0x5c, 0x5c, 0x7c, 0x7c, 0xf8, 0x4b, 0xc2, 0x6b, 0xfb, 0x17, 0x87, 0xd7, 0x3b, 0xf7, 0x29, 0x55, 0x08, 0xb1, 0x72, 0x61, 0x37, 0x36, 0x0d, 0x2f, 0x0a, 0x7f, 0xe7, 0xbe, 0x1e, 0x98, 0x39, 0xe8, 0xb6, 0x2b, 0x55, 0x19, 0xfd, 0xa8, 0xb2, 0x2f, 0x59, 0x8f, 0x5f, 0xfc, 0x85, 0xe0, 0xb9, 0xe7, 0x2f, 0x94, 0xcf, 0x0b, 0x7f, 0xa1, 0x7c, 0x0e, 0xfc, 0x85, 0xf2, 0x79, 0xe5, 0x0b, 0xf4, 0x13, 0xa5, 0xa1, 0xb5, 0xee, 0xfc, 0x15, 0x1d, 0x62, 0x85, 0x1b, 0xdf, 0x7f, 0x62, 0xac, 0x24, 0x4d, 0x97, 0x8e, 0x95, 0x89, 0x7d, 0x7c, 0x31, 0x92, 0xdb, 0xbf, 0x96, 0x4c, 0x98, 0xcf, 0x24, 0xe6, 0xcc, 0x3b, 0xeb, 0xe9, 0x06, 0x3b, 0xa5, 0x56, 0xcc, 0x9d, 0x6b, 0x83, 0x90, 0xa7, 0x58, 0x64, 0x33, 0x86, 0xd4, 0x24, 0xf5, 0x30, 0xc4, 0xa5, 0x24, 0xc8, 0x26, 0xcc, 0x41, 0xbe, 0xec, 0xf8, 0x99, 0x3f, 0x7e, 0xec, 0xd0, 0x9c, 0x0f, 0x98, 0xdf, 0x59, 0x1f, 0x90, 0xde, 0xb9, 0x2f, 0x60, 0x52, 0x2c, 0x09, 0xcb, 0x52, 0x98, 0x76, 0x21, 0x60, 0x62, 0xab, 0x50, 0xe7, 0xa7, 0xf7, 0x0b, 0x8b, 0x2b, 0x06, 0x5e, 0xbc, 0x70, 0xe1, 0xa3, 0x1c, 0x7c, 0x59, 0x72, 0x69, 0xfd, 0xad, 0x74, 0x63, 0x8c, 0x53, 0x49, 0xb8, 0x41, 0x96, 0xfe, 0x63, 0xf8, 0xfd, 0x61, 0x3a, 0x8b, 0x7b, 0x1a, 0xe8, 0x7e, 0x82, 0x6c, 0x5c, 0xd9, 0x88, 0x1b, 0x4a, 0xfd, 0xc7, 0x7d, 0xef, 0xdf, 0x47, 0x77, 0xcc, 0x9c, 0x06, 0xc6, 0xb0, 0x2f, 0x27, 0x61, 0x64, 0x10, 0x6b, 0xaf, 0x73, 0xed, 0x2d, 0xe9, 0x3a, 0x9a, 0x8c, 0xf8, 0x25, 0x26, 0x63, 0x7d, 0x11, 0xfd, 0xe6, 0xd3, 0x9b, 0xb8, 0xfd, 0x8a, 0x8c, 0x6b, 0xfb, 0xf1, 0x61, 0x91, 0x77, 0x82, 0xeb, 0xe6, 0x91, 0x28, 0x3f, 0xfd, 0x80, 0x02, 0xc6, 0x2a, 0x90, 0x37, 0xbe, 0xbd, 0x74, 0x62, 0x25, 0x0b, 0xfd, 0x1c, 0x7f, 0x6c, 0xf1, 0x34, 0x5b, 0xae, 0x7f, 0x69, 0x6e, 0x7e, 0xfb, 0x38, 0x3f, 0x5a, 0x69, 0x1c, 0x5f, 0x0a, 0x57, 0x1d, 0xfd, 0x0b, 0x8d, 0xc1, 0x77, 0xfe, 0x42, 0xf9, 0x9c, 0xf9, 0xa2, 0x6b, 0x01, 0x69, 0x61, 0xe7, 0xf6, 0x71, 0x60, 0x36, 0xf8, 0xf1, 0xf1, 0xe2, 0xa3, 0xe2, 0x23, 0xe3, 0x53, 0x84, 0x8f, 0x1b, 0x1f, 0x17, 0xe7, 0x4f, 0xe7, 0x44, 0xce, 0x57, 0x93, 0x3d, 0x36, 0xa6, 0x95, 0x12, 0xba, 0x80, 0x13, 0xae, 0x29, 0xf9, 0xe9, 0x3c, 0xdf, 0xb9, 0x8f, 0x6e, 0x0c, 0xbd, 0x14, 0xf6, 0xfe, 0x2e, 0x08, 0x89, 0x33, 0x36, 0x81, 0x4a, 0xd2, 0x91, 0x0b, 0x54, 0x62, 0xe7, 0x6e, 0x0a, 0xd8, 0xf8, 0x7d, 0x27, 0x96, 0xe0, 0x64, 0x57, 0x17, 0xb6, 0x84, 0xde, 0x71, 0x2c, 0x8f, 0xde, 0x31, 0x2c, 0x95, 0xde, 0xed, 0xd4, 0x36, 0x7c, 0xb7, 0x29, 0x37, 0xe2, 0xfc, 0xf9, 0x11, 0xd6, 0xa0, 0x32, 0xb7, 0x0c, 0xf7, 0x5e, 0x8f, 0x29, 0x77, 0xd5, 0x91, 0x83, 0x5e, 0x2f, 0x3c, 0x1c, 0x5e, 0x17, 0xb7, 0x53, 0xd9, 0xb4, 0xda, 0x09, 0x9b, 0xf9, 0xd5, 0xee, 0x2f, 0x01, 0xc7, 0x4f, 0xff, 0x3c, 0x1c, 0xcb, 0xc1, 0x63, 0x7a, 0xe7, 0xfe, 0xd0, 0x90, 0xbb, 0xb4, 0x1c, 0xf8, 0x1c, 0x66, 0x11, 0x52, 0x6d, 0xae, 0xe8, 0xba, 0xe6, 0xc1, 0x84, 0x33, 0x34, 0x90, 0x8f, 0xbe, 0xde, 0x15, 0xf0, 0x56, 0xe4, 0xa1, 0x9b, 0x5e, 0xd2, 0x4f, 0x85, 0x07, 0xbb, 0x81, 0xac, 0xf9, 0x80, 0x23, 0xe1, 0x4a, 0xca, 0x86, 0xff, 0x01, 0xfd, 0x2c, 0x52, 0xa7, 0x45, 0x97, 0x8c, 0x5f, 0x1e, 0xdb, 0x63, 0x2f, 0xe7, 0xb6, 0x51, 0xce, 0x09, 0xeb, 0xd1, 0xc9, 0xda, 0x5f, 0x7a, 0x16, 0xa5, 0xc3, 0xb2, 0xa3, 0x78, 0x6c, 0x7f, 0x3a, 0xec, 0x8b, 0xb5, 0xf5, 0xe8, 0x94, 0x2f, 0xd0, 0x56, 0x2e, 0xc3, 0x2b, 0xf5, 0x5a, 0x54, 0xd3, 0x3b, 0xeb, 0x33, 0x25, 0xed, 0xc6, 0x92, 0x8a, 0xb2, 0x75, 0x4c, 0x98, 0x96, 0xc2, 0x94, 0x47, 0xb8, 0x36, 0xd8, 0xdb, 0xe6, 0x0f, 0x0d, 0xba, 0x2b, 0x53, 0x4f, 0x0e, 0x5f, 0x9b, 0x09, 0xff, 0x68, 0x7c, 0x78, 0xba, 0xfd, 0x63, 0x47, 0x2f, 0xa5, 0xf7, 0xc6, 0x0e, 0x5f, 0x86, 0x06, 0x14, 0x38, 0xe0, 0x58, 0x12, 0x2e, 0x9f, 0xc6, 0x98, 0xd3, 0x22, 0xfc, 0xb2, 0xe9, 0x2f, 0x97, 0xe6, 0xcb, 0xad, 0xad, 0x47, 0x0b, 0xfe, 0x1c, 0xec, 0x92, 0xf6, 0xc8, 0x85, 0xb1, 0x25, 0xf5, 0xef, 0xdd, 0x00, 0x7e, 0xb3, 0x4f, 0xf2, 0x98, 0xee, 0x12, 0x63, 0xc5, 0x19, 0x5e, 0xd7, 0x09, 0x60, 0xb7, 0xfd, 0x2f, 0xb8, 0xa6, 0x66, 0x5d, 0xf3, 0xdd, 0xa1, 0xa1, 0xd0, 0x02, 0xc5, 0xac, 0x5a, 0x89, 0xca, 0xf4, 0x98, 0x14, 0xc9, 0x61, 0x02, 0xfb, 0x2a, 0x2c, 0xff, 0x76, 0x93, 0xd5, 0x04, 0xa5, 0x57, 0x0e, 0x24, 0x8a, 0xa2, 0x0b, 0x9a, 0xef, 0x0e, 0xaf, 0xeb, 0x3a, 0x4a, 0x63, 0x28, 0x29, 0x27, 0x2a, 0xc5, 0x18, 0x6a, 0xbe, 0x7b, 0xc5, 0x19, 0xdb, 0x64, 0xba, 0x43, 0x2f, 0x39, 0x27, 0xe3, 0xb7, 0x60, 0x65, 0x3e, 0x8e, 0xbf, 0xeb, 0x13, 0x45, 0x69, 0x1f, 0xe4, 0x83, 0x4e, 0xe1, 0x48, 0x1b, 0x15, 0x6d, 0x75, 0x43, 0xc2, 0xd5, 0x6b, 0xef, 0xd3, 0x1b, 0x2e, 0xe8, 0x2b, 0x22, 0x0f, 0xa1, 0xbf, 0x3b, 0x3d, 0x9e, 0x71, 0xdc, 0x0e, 0x1a, 0x21, 0x4d, 0x1c, 0x92, 0xe9, 0x5b, 0x4e, 0xe3, 0x0c, 0x0d, 0x61, 0xc8, 0xbc, 0xdc, 0x34, 0xec, 0x6f, 0x63, 0xff, 0x19, 0x59, 0xff, 0x80, 0x14, 0xc2, 0x39, 0x80, 0x65, 0x1f, 0x8e, 0x3c, 0xa4, 0x5e, 0x63, 0xe0, 0x53, 0x93, 0x2d, 0x05, 0x93, 0x0c, 0xb7, 0x44, 0x6e, 0xdb, 0x00, 0x4c, 0x22, 0x0b, 0xc3, 0x8c, 0xdb, 0x33, 0x34, 0xbc, 0xcb, 0x5d, 0x70, 0x75, 0x02, 0xc2, 0x52, 0x7c, 0x46, 0xd8, 0x1c, 0x2f, 0x6c, 0x96, 0x9a, 0xcd, 0x09, 0x24, 0xab, 0x29, 0x7e, 0x12, 0xf2, 0xaf, 0xe6, 0x34, 0x55, 0xf1, 0xb7, 0x34, 0xc7, 0x6e, 0x29, 0x6e, 0x4b, 0xe8, 0x18, 0x4f, 0x4a, 0x98, 0x88, 0x66, 0x32, 0xe7, 0x5d, 0x06, 0xdf, 0xaf, 0x18, 0x87, 0xef, 0xdf, 0x16, 0x38, 0x2a, 0x3a, 0xa0, 0x56, 0x85, 0xf2, 0xdf, 0x59, 0xdf, 0x3c, 0xd8, 0x0b, 0xa4, 0x51, 0x2f, 0x87, 0x7b, 0xf4, 0x68, 0x28, 0xec, 0x8e, 0x81, 0x7e, 0xe1, 0xaa, 0x90, 0xae, 0x37, 0xbe, 0xb9, 0xc0, 0x91, 0x49, 0x33, 0x26, 0x30, 0x8b, 0x0f, 0x53, 0xf6, 0x22, 0xcd, 0xaf, 0x62, 0x1d, 0x3d, 0x21, 0xac, 0x51, 0x3e, 0xd6, 0xe6, 0xca, 0x83, 0x03, 0x8b, 0xd9, 0xe2, 0xd5, 0xc5, 0xc5, 0x5e, 0x3a, 0xcf, 0xe2, 0x95, 0x1b, 0x15, 0x9b, 0xb3, 0x30, 0x6e, 0x75, 0x1e, 0x6d, 0x06, 0xed, 0x5c, 0xc8, 0xad, 0xda, 0x9c, 0x5f, 0xc5, 0xaf, 0x7f, 0x17, 0x5f, 0xbf, 0x89, 0x60, 0x69, 0xc7, 0x7e, 0x13, 0xf1, 0x80, 0xd2, 0x48, 0x74, 0x00, 0xdd, 0x3f, 0xf0, 0xbd, 0x71, 0x7c, 0x0a, 0xcd, 0x0f, 0xeb, 0x6d, 0xb9, 0x1c, 0xde, 0x38, 0xbc, 0xd0, 0xf6, 0x25, 0xc7, 0x66, 0xd1, 0x9f, 0x9f, 0xd7, 0x72, 0xa6, 0xdc, 0x49, 0x6f, 0xf7, 0xd0, 0x1d, 0x12, 0xf5, 0x2a, 0xc4, 0x91, 0xcf, 0x39, 0x8e, 0x73, 0xfc, 0xe2, 0x6d, 0x0a, 0xc4, 0xac, 0xf8, 0x0e, 0x09, 0x5b, 0x83, 0xd9, 0x79, 0xfa, 0xce, 0x7d, 0x69, 0x0e, 0xf9, 0xcb, 0xd2, 0xc4, 0x47, 0xaf, 0xfd, 0x02, 0x75, 0x3a, 0x23, 0x60, 0xee, 0x69, 0x98, 0x6b, 0x6a, 0xfc, 0x60, 0xb2, 0x19, 0x69, 0xde, 0xdd, 0x74, 0xef, 0xcf, 0x8d, 0x99, 0xf2, 0x73, 0xcf, 0x5e, 0xb2, 0x75, 0xdf, 0xd4, 0x78, 0x78, 0x71, 0x7b, 0xf2, 0x27, 0x72, 0x99, 0x8c, 0xa3, 0xde, 0x4e, 0xb7, 0xd7, 0x72, 0xe6, 0xc6, 0x8f, 0x75, 0x50, 0x6f, 0x54, 0xc2, 0x72, 0x55, 0xfe, 0xeb, 0xb1, 0x51, 0x45, 0x62, 0xdf, 0x63, 0xaa, 0x49, 0x21, 0x5b, 0x89, 0x3b, 0x6f, 0xfc, 0xd8, 0x84, 0x65, 0x2e, 0x98, 0x80, 0x9b, 0xf4, 0x63, 0x5f, 0xb2, 0xbd, 0x81, 0xbf, 0xcc, 0xba, 0x7e, 0xf4, 0x9b, 0x7f, 0xa1, 0x7c, 0x6e, 0xf8, 0xbc, 0x7c, 0x22, 0x17, 0x3e, 0xd9, 0xf3, 0x79, 0x72, 0x12, 0x82, 0x90, 0x79, 0x0f, 0x9d, 0xe9, 0x98, 0x30, 0x3e, 0xab, 0xe4, 0xd9, 0xc8, 0x57, 0xce, 0x06, 0x87, 0xbc, 0x1c, 0x29, 0xc4, 0xe5, 0xe0, 0x8a, 0xec, 0xf6, 0xc2, 0x97, 0xe5, 0xfb, 0x8e, 0x36, 0x7e, 0x5e, 0xdd, 0xd2, 0xf4, 0xc6, 0x44, 0x1e, 0x93, 0xfb, 0xff, 0xf1, 0x09, 0xf5, 0x99, 0x18, 0xbe, 0x3d, 0x37, 0xbc, 0x9f, 0xdb, 0xd2, 0x3c, 0xa4, 0x98, 0x89, 0x1e, 0x96, 0x4e, 0x7a, 0xa6, 0xbf, 0x73, 0x7f, 0x74, 0xdd, 0xda, 0x19, 0x74, 0xf2, 0x44, 0xae, 0x4e, 0xea, 0xd1, 0x2a, 0x81, 0x0b, 0xe4, 0xea, 0xe9, 0x55, 0xba, 0x1e, 0xa5, 0xb1, 0x35, 0x7f, 0xfc, 0x3a, 0x4c, 0x70, 0x90, 0x76, 0xf6, 0x8c, 0x19, 0xb2, 0x8e, 0x89, 0x63, 0xe4, 0xc7, 0xe9, 0xd2, 0xde, 0xb9, 0xef, 0xd0, 0xa0, 0x5c, 0xea, 0x1e, 0xe7, 0x9e, 0xb9, 0xce, 0xfd, 0x65, 0xc6, 0xcf, 0xcd, 0x5f, 0x82, 0x9e, 0x7b, 0x2c, 0xb7, 0xbf, 0xbc, 0x66, 0xa2, 0x6c, 0xd3, 0x92, 0x20, 0x6c, 0x9b, 0x9c, 0x85, 0x01, 0xf1, 0x03, 0xef, 0xac, 0x47, 0x2c, 0x86, 0xf5, 0x99, 0xbe, 0xc3, 0x0d, 0x5e, 0x20, 0x89, 0xd9, 0x4d, 0xfb, 0xf5, 0xb3, 0x02, 0x5b, 0xf3, 0x1c, 0x5f, 0xff, 0xce, 0xfd, 0xc6, 0xda, 0x6b, 0x1b, 0x47, 0xdf, 0x1b, 0xed, 0x37, 0x5d, 0xd2, 0xfe, 0xd2, 0x6c, 0xd8, 0xb6, 0x80, 0x29, 0xf9, 0x35, 0xc4, 0x1c, 0x49, 0x05, 0xd4, 0x6b, 0x7a, 0xc9, 0xb5, 0x38, 0x00, 0xec, 0xd3, 0x29, 0x5f, 0xc3, 0x38, 0xe3, 0x12, 0xbc, 0x67, 0x6a, 0xcd, 0x95, 0x44, 0x7d, 0xe1, 0x31, 0x73, 0xfb, 0x17, 0x81, 0x0f, 0xad, 0x2b, 0x5f, 0xaf, 0x82, 0xa2, 0x6b, 0xab, 0x41, 0xbe, 0xb6, 0x06, 0xd4, 0x0c, 0xf6, 0x28, 0x4f, 0xe8, 0x99, 0xf9, 0x8c, 0x3c, 0x87, 0x5a, 0x6a, 0xab, 0x78, 0xe7, 0x3e, 0x0f, 0x42, 0xe5, 0xc5, 0xd1, 0x49, 0x8f, 0x1d, 0xd9, 0xe1, 0xb6, 0x78, 0xcd, 0x2f, 0x8e, 0x42, 0xe5, 0x5b, 0x1b, 0xde, 0xda, 0xb0, 0x1f, 0xdf, 0xff, 0xb1, 0xe1, 0x3f, 0x36, 0x1c, 0x19, 0xf2, 0x96, 0xba, 0x6d, 0xc3, 0xa3, 0x50, 0x56, 0xbf, 0xef, 0xc8, 0x50, 0x1f, 0x1c, 0x5f, 0x9f, 0x9c, 0x4a, 0x6b, 0x9d, 0x69, 0x34, 0xf2, 0x10, 0xe5, 0x83, 0xf4, 0xb0, 0x0f, 0xd7, 0x89, 0x52, 0xb7, 0x23, 0x3c, 0x18, 0xb7, 0xa9, 0x48, 0xef, 0x8e, 0xde, 0xae, 0x59, 0xf9, 0xdd, 0x42, 0x75, 0x91, 0xab, 0x18, 0xaa, 0xe3, 0xe6, 0xc7, 0x3b, 0xf7, 0xcd, 0x7c, 0x8e, 0x64, 0xb6, 0x6e, 0x1b, 0xae, 0xd4, 0x2f, 0x8b, 0x6f, 0xa2, 0x93, 0xf9, 0xfb, 0xc5, 0xcc, 0xf7, 0x18, 0x7f, 0xef, 0xce, 0x7c, 0x5f, 0xe4, 0xef, 0x1f, 0x67, 0xbe, 0x47, 0xf9, 0x7b, 0x5b, 0xee, 0x9a, 0x31, 0xe6, 0xca, 0xe5, 0x44, 0x53, 0x23, 0x0f, 0xee, 0xa7, 0xf5, 0x2f, 0xf4, 0x93, 0x6b, 0x12, 0x6e, 0x1d, 0xcc, 0x01, 0xd3, 0x3b, 0xc3, 0xf5, 0xdf, 0xb1, 0xb1, 0xec, 0xf6, 0x6f, 0x1e, 0x96, 0xef, 0x68, 0xd9, 0xa8, 0x5c, 0x33, 0x1d, 0x6b, 0x82, 0x23, 0x14, 0xfb, 0xdc, 0x6c, 0x32, 0xee, 0x98, 0x62, 0xeb, 0x3d, 0x99, 0x93, 0x6c, 0xfd, 0x64, 0xaf, 0x5a, 0xda, 0x90, 0x34, 0x65, 0x7c, 0x2a, 0x94, 0xa0, 0x6a, 0x0f, 0x85, 0xea, 0x43, 0x0b, 0x4e, 0xea, 0xc7, 0x93, 0x1f, 0x3a, 0xaa, 0xc0, 0xb4, 0xcc, 0xe7, 0xb9, 0xd2, 0x73, 0x5f, 0xd9, 0x68, 0x20, 0xaf, 0x6c, 0x74, 0xd1, 0xf9, 0xb2, 0xbd, 0x65, 0x07, 0xca, 0x46, 0x23, 0xff, 0xe4, 0x35, 0x87, 0x6a, 0xea, 0x6b, 0xca, 0xf6, 0x95, 0xbd, 0x50, 0x36, 0xea, 0xbf, 0xa3, 0x0c, 0xe9, 0x11, 0xf4, 0x5d, 0x13, 0xad, 0xfa, 0xdb, 0xfb, 0x31, 0x4d, 0x5e, 0xec, 0xc5, 0xaa, 0x93, 0xfa, 0x0a, 0xc5, 0x0b, 0xd2, 0xcc, 0x06, 0x90, 0xc6, 0xa7, 0xad, 0x3a, 0xaf, 0x9a, 0xa8, 0x04, 0xfc, 0x7a, 0xbe, 0x6c, 0x34, 0x3c, 0x50, 0x36, 0x1a, 0xb3, 0x92, 0xaf, 0x52, 0x09, 0xe7, 0x5f, 0x2e, 0xcf, 0x0d, 0x8b, 0x6c, 0xe2, 0xbc, 0x9f, 0x53, 0xe0, 0xeb, 0xfd, 0x91, 0x35, 0x20, 0xe1, 0xfc, 0xe7, 0xfa, 0x1a, 0xf7, 0x81, 0x1b, 0x75, 0xbe, 0x78, 0x17, 0x9d, 0x94, 0xff, 0xe3, 0x41, 0x28, 0xa1, 0xf7, 0x27, 0x45, 0x50, 0x46, 0xef, 0x7f, 0x97, 0xc1, 0x93, 0x69, 0x55, 0x6f, 0xc2, 0x94, 0xb6, 0x24, 0x44, 0x27, 0xf3, 0x94, 0x0e, 0xfd, 0xb8, 0xc8, 0x29, 0x7b, 0xa6, 0x2f, 0x6b, 0x57, 0xfb, 0xd0, 0x80, 0x52, 0xf5, 0xea, 0xf3, 0xf2, 0x4d, 0x58, 0x73, 0xbb, 0x7c, 0xd3, 0xf5, 0xfd, 0xe0, 0x82, 0x7c, 0xba, 0x2f, 0x42, 0xb9, 0x29, 0x33, 0xd6, 0x36, 0x27, 0x74, 0x71, 0x06, 0x52, 0xc9, 0xda, 0x63, 0x8c, 0x18, 0x3e, 0x81, 0xb4, 0xcf, 0x58, 0xd9, 0x44, 0x9f, 0xd1, 0x1f, 0x1b, 0x37, 0xcf, 0x9e, 0x62, 0xab, 0x6c, 0x66, 0x2f, 0x96, 0xe5, 0xa9, 0xfa, 0xdd, 0xf3, 0x38, 0x7b, 0xaf, 0x8c, 0xa6, 0x92, 0x90, 0x69, 0xd1, 0x62, 0x3e, 0x49, 0x97, 0xc7, 0x36, 0xc6, 0xe3, 0x91, 0x3d, 0xfa, 0x13, 0x48, 0x29, 0x0e, 0xc9, 0x0b, 0x89, 0x7a, 0xa2, 0x93, 0xe8, 0xc2, 0x0e, 0xc8, 0xdf, 0x3c, 0x4c, 0xe9, 0x42, 0x65, 0x36, 0xb6, 0x3d, 0x2e, 0x87, 0xef, 0x32, 0x69, 0x36, 0x07, 0x80, 0x3f, 0x26, 0x45, 0xef, 0x75, 0xba, 0x63, 0x67, 0xfd, 0xd2, 0xb1, 0xc1, 0x63, 0xf7, 0xc8, 0xb5, 0xaf, 0xfc, 0x6b, 0x7d, 0x62, 0x18, 0x42, 0x3f, 0x09, 0x58, 0x85, 0x65, 0x0f, 0xc5, 0xae, 0x5a, 0x7b, 0xc1, 0x5f, 0x83, 0xf5, 0x79, 0x3b, 0x10, 0x84, 0x4a, 0x3e, 0x61, 0xf9, 0x34, 0x94, 0xc6, 0x5d, 0xde, 0x70, 0x0f, 0x24, 0xe0, 0xef, 0x7f, 0x1b, 0xa8, 0x81, 0xb9, 0x5e, 0x7b, 0x60, 0x21, 0x54, 0x6a, 0x2e, 0xe3, 0x4e, 0x4b, 0xba, 0x57, 0x37, 0x9f, 0x2c, 0x32, 0x69, 0x60, 0x2a, 0xcb, 0x77, 0x21, 0x4d, 0xeb, 0x8f, 0xe7, 0xcb, 0x8d, 0x0f, 0xee, 0x43, 0x08, 0x54, 0xd2, 0xfd, 0xae, 0xbb, 0x87, 0xbb, 0x00, 0x76, 0x85, 0x07, 0xc9, 0x92, 0x4d, 0xed, 0x1f, 0x5f, 0x87, 0xd7, 0x0e, 0xd4, 0x9e, 0xe9, 0x00, 0x7f, 0xd4, 0xb0, 0xd2, 0xfb, 0x80, 0x61, 0xbd, 0x9a, 0x6f, 0x77, 0x55, 0x10, 0x47, 0xc9, 0x93, 0x36, 0xdd, 0xcb, 0x36, 0x98, 0x07, 0xba, 0x4a, 0xd4, 0x1a, 0xb2, 0xc2, 0x97, 0x6e, 0xed, 0xd8, 0x73, 0x6c, 0x3d, 0xae, 0x12, 0x5d, 0xfb, 0xb2, 0xa5, 0x8f, 0x6d, 0x65, 0xab, 0x8c, 0xa0, 0xdf, 0x25, 0x4f, 0x3e, 0x48, 0x29, 0xef, 0x51, 0xe0, 0xf8, 0x7d, 0x81, 0x2a, 0x28, 0x27, 0x5b, 0xde, 0x72, 0xd5, 0x82, 0x13, 0x60, 0x42, 0x5c, 0x42, 0x77, 0x00, 0xa3, 0x9f, 0x31, 0x0b, 0xba, 0xa1, 0xdc, 0xb9, 0x2e, 0xf4, 0xf5, 0x72, 0x50, 0x9f, 0x86, 0x9a, 0xdb, 0xd6, 0x1d, 0xbf, 0xff, 0x8d, 0x75, 0xd4, 0x5a, 0x87, 0x0b, 0xa1, 0x14, 0x8c, 0x7e, 0x1f, 0x5b, 0x33, 0x97, 0xe0, 0x8c, 0xad, 0x09, 0xc4, 0x7c, 0x3d, 0x40, 0xb7, 0x19, 0x6a, 0x0a, 0xb6, 0xa1, 0x28, 0x71, 0xcd, 0xc8, 0x40, 0x32, 0x8f, 0x6e, 0x6f, 0xc9, 0xaf, 0x84, 0x2b, 0xf1, 0x6d, 0xc3, 0xb7, 0x6b, 0x67, 0x2a, 0x26, 0xf5, 0x98, 0x12, 0xa6, 0xe8, 0x06, 0x0d, 0xc6, 0x46, 0x8d, 0x5a, 0x67, 0x6a, 0x78, 0xf1, 0x4c, 0xa6, 0xde, 0x8e, 0x00, 0xdf, 0xaf, 0x79, 0xf1, 0x8c, 0x3c, 0x59, 0xd8, 0x0a, 0x61, 0x0b, 0xbc, 0x2e, 0x31, 0x07, 0x4d, 0x15, 0x69, 0x8b, 0x30, 0xc6, 0xb9, 0xf1, 0x1f, 0x27, 0xf4, 0x1d, 0xeb, 0x63, 0xb7, 0xa8, 0xcd, 0xf8, 0x7d, 0xef, 0x32, 0xcb, 0xdc, 0x7e, 0xb8, 0xb7, 0xe1, 0x03, 0xbd, 0x89, 0x2c, 0x1a, 0x1c, 0x4d, 0x28, 0x8d, 0x89, 0x1b, 0xeb, 0xb2, 0x23, 0x63, 0x13, 0xf9, 0xfe, 0xbb, 0xb7, 0xe9, 0xfe, 0x84, 0xa4, 0xd9, 0x15, 0x77, 0x5c, 0xf2, 0x0c, 0x44, 0x53, 0x2d, 0xf7, 0x3f, 0x33, 0xd2, 0x7a, 0x86, 0xce, 0xa0, 0x7e, 0x44, 0x37, 0x80, 0xa5, 0xe3, 0xbe, 0xee, 0x4d, 0x69, 0xf5, 0x89, 0xb1, 0x1d, 0xeb, 0xe3, 0x21, 0xb2, 0xbb, 0xda, 0x70, 0x92, 0x6e, 0x15, 0xd1, 0x47, 0xff, 0xf1, 0x70, 0x9b, 0xb3, 0xa4, 0x72, 0x32, 0xf2, 0x1e, 0x59, 0xdb, 0x16, 0xf2, 0xe2, 0xf4, 0xcd, 0x75, 0x9a, 0xf3, 0xa6, 0x61, 0xc5, 0x49, 0x37, 0xec, 0x54, 0x9f, 0xb1, 0x59, 0xae, 0xbb, 0xcf, 0x0d, 0xb2, 0x57, 0x1f, 0x8d, 0x9d, 0x24, 0xec, 0xba, 0x24, 0x95, 0xb5, 0x0b, 0xe2, 0x59, 0x01, 0xa9, 0xdf, 0xfd, 0xe6, 0x77, 0xbf, 0xa1, 0x79, 0x34, 0xb5, 0x34, 0x69, 0xaa, 0xaf, 0xca, 0xe2, 0x10, 0xa4, 0x9f, 0x4b, 0xbc, 0xc1, 0x86, 0x53, 0xb0, 0xc3, 0x4b, 0xb8, 0xf0, 0xde, 0x85, 0x1f, 0x80, 0xa5, 0x07, 0x16, 0x5d, 0xd0, 0x2d, 0x1a, 0xdd, 0x63, 0xf4, 0xb5, 0xc8, 0xb6, 0xe8, 0x60, 0xd3, 0xc6, 0x5d, 0x5b, 0xda, 0xcf, 0xcc, 0x6a, 0x84, 0xe1, 0xcc, 0x79, 0x6e, 0x8b, 0x71, 0x42, 0xb8, 0x1b, 0xe9, 0x8e, 0x15, 0x30, 0xec, 0x59, 0xae, 0x37, 0x55, 0xbf, 0xaf, 0x37, 0x89, 0x12, 0xb2, 0x33, 0x75, 0xd6, 0x4a, 0xf0, 0xc0, 0xb0, 0x38, 0x7b, 0xcb, 0x76, 0xbe, 0xe6, 0xe7, 0xd2, 0x90, 0xbe, 0x60, 0xed, 0x87, 0xb0, 0x44, 0x0e, 0x67, 0x7c, 0x52, 0x39, 0xee, 0x0d, 0x72, 0x50, 0x25, 0xcb, 0xb0, 0x64, 0x91, 0xab, 0xbc, 0x65, 0x63, 0x38, 0x18, 0x2b, 0x44, 0xcc, 0xde, 0x42, 0xe3, 0x0e, 0xe7, 0x87, 0x9d, 0xad, 0x21, 0x9f, 0xbf, 0xb7, 0x8f, 0x4e, 0x0b, 0x6b, 0x21, 0xdf, 0x1c, 0xd8, 0xa1, 0xae, 0x82, 0x61, 0xa4, 0xa0, 0xef, 0xeb, 0x81, 0x5e, 0xe8, 0x03, 0x65, 0x15, 0x54, 0x2c, 0xf8, 0x10, 0x5b, 0x45, 0x67, 0x60, 0x11, 0x5b, 0x15, 0x6c, 0x4b, 0x5b, 0x36, 0x2b, 0xae, 0x85, 0x1d, 0x81, 0x69, 0x38, 0x9b, 0xbc, 0x98, 0x73, 0x25, 0xdb, 0x04, 0x53, 0x35, 0x29, 0x11, 0x27, 0x0b, 0x49, 0x74, 0xee, 0x15, 0x67, 0x89, 0x05, 0x71, 0x48, 0x8a, 0xa0, 0xec, 0xd8, 0x0e, 0xf0, 0xb3, 0xdf, 0xd2, 0x9d, 0x54, 0x33, 0x97, 0xc3, 0x30, 0xdd, 0xa6, 0x8a, 0x18, 0x61, 0xab, 0xd1, 0xf2, 0xa1, 0x4b, 0xe8, 0xe1, 0x67, 0x03, 0xfd, 0x29, 0x30, 0x9f, 0x05, 0x47, 0xa0, 0x1b, 0x52, 0xe0, 0xe4, 0xaf, 0x0f, 0xc0, 0x15, 0xe8, 0xe7, 0xbd, 0x0f, 0x37, 0x7f, 0x9f, 0x82, 0xa2, 0xd0, 0xd3, 0x20, 0xb3, 0xfb, 0x43, 0x50, 0xd1, 0xed, 0x65, 0xf7, 0x69, 0xf0, 0xa3, 0xbb, 0x94, 0xdd, 0x1f, 0xc1, 0x5c, 0x74, 0x97, 0xb3, 0xfb, 0x63, 0xa8, 0x44, 0x77, 0x90, 0xdd, 0xbf, 0x87, 0x1a, 0x74, 0xd7, 0xb3, 0xfb, 0x0f, 0xd0, 0x88, 0xa5, 0x0c, 0x93, 0x3d, 0x6c, 0xfc, 0xfa, 0x13, 0x2c, 0xc6, 0x16, 0xb5, 0xb0, 0xfb, 0x0c, 0x2c, 0xc1, 0x58, 0x1a, 0xbb, 0x2f, 0x40, 0x5b, 0xc2, 0x84, 0x21, 0x1d, 0xfc, 0x75, 0x0e, 0x3a, 0x31, 0x24, 0x81, 0x4f, 0x4f, 0xd2, 0x71, 0x68, 0x23, 0x62, 0x3a, 0xa2, 0x50, 0xf2, 0x3c, 0xc4, 0x45, 0x75, 0x28, 0x2b, 0x21, 0xf5, 0xea, 0xaf, 0x5f, 0xfd, 0xb5, 0x7c, 0xd3, 0x2f, 0x0e, 0xb5, 0xcd, 0xcd, 0x8c, 0xcc, 0x88, 0x9c, 0x2f, 0x6c, 0x0c, 0x1b, 0x76, 0x04, 0x32, 0x78, 0x4f, 0x09, 0x2a, 0x88, 0x5b, 0xc9, 0xc2, 0xa5, 0xb3, 0x52, 0x1f, 0xa3, 0x1b, 0x74, 0x94, 0xe9, 0xd6, 0x81, 0x1b, 0x70, 0xbd, 0x3c, 0x34, 0x50, 0x75, 0x12, 0x1c, 0xd5, 0xef, 0x23, 0xa6, 0x33, 0x65, 0xcf, 0x62, 0x5f, 0xdc, 0x94, 0x58, 0x72, 0xf0, 0x7e, 0x71, 0xd3, 0x54, 0x23, 0xe1, 0xc1, 0x4e, 0xc2, 0xb8, 0x97, 0xd8, 0x73, 0x79, 0x92, 0xe0, 0xce, 0x36, 0x13, 0xac, 0xe1, 0xed, 0x50, 0x19, 0x73, 0x04, 0x66, 0x03, 0x5b, 0xc3, 0xfa, 0xc8, 0x81, 0x23, 0xd2, 0x2b, 0xac, 0x7c, 0x7c, 0x34, 0x5d, 0xd0, 0x1c, 0x4d, 0x1b, 0xc5, 0x59, 0x75, 0xe4, 0xf2, 0x4d, 0xef, 0x3c, 0x10, 0xba, 0xbb, 0xb0, 0xb4, 0x03, 0xc2, 0xb5, 0x71, 0x30, 0xa9, 0xa1, 0xa1, 0xe8, 0x3d, 0xa1, 0x7b, 0x67, 0xe0, 0xb7, 0x63, 0x32, 0xdd, 0x10, 0x0e, 0x63, 0xd1, 0x7b, 0x9a, 0xef, 0x4e, 0x7f, 0x93, 0x45, 0x40, 0xdb, 0xbd, 0x30, 0x09, 0xdd, 0xcd, 0x18, 0xe6, 0x6a, 0x19, 0x52, 0xae, 0xaf, 0x87, 0x44, 0x1f, 0xd2, 0x13, 0x2a, 0xf1, 0xed, 0xf0, 0x06, 0x86, 0x2c, 0xc6, 0x10, 0x99, 0x52, 0x89, 0x50, 0x4a, 0x1b, 0xd9, 0x03, 0x07, 0x29, 0x16, 0x71, 0xd8, 0x18, 0xeb, 0x59, 0x8c, 0x55, 0x3d, 0x3e, 0xbd, 0xe0, 0xfb, 0xe1, 0x87, 0x18, 0x72, 0x63, 0x3a, 0xbd, 0x91, 0x72, 0x5b, 0x4e, 0x29, 0x32, 0xc7, 0xea, 0xc3, 0x58, 0x2d, 0x13, 0x62, 0x25, 0x72, 0x62, 0x15, 0x71, 0xac, 0x28, 0xc6, 0x6a, 0x98, 0x10, 0x2b, 0x9c, 0x13, 0xcb, 0xc5, 0xb1, 0xfc, 0x18, 0x2b, 0x82, 0xb1, 0x0a, 0xd2, 0x21, 0xa1, 0xc1, 0x4c, 0x98, 0x53, 0x99, 0x9c, 0x53, 0x37, 0xa9, 0xf9, 0xee, 0x18, 0x8c, 0xbd, 0x4d, 0x92, 0x89, 0xc8, 0x91, 0xd0, 0xa0, 0x6b, 0xb2, 0x45, 0x82, 0xd2, 0x55, 0x00, 0x85, 0x0e, 0x09, 0xa6, 0x90, 0xbc, 0x0c, 0xbf, 0x27, 0xe3, 0xb7, 0x1d, 0xbf, 0xaf, 0xed, 0x26, 0xa9, 0xf2, 0x60, 0xd6, 0x4e, 0x0a, 0xcf, 0x3b, 0x5e, 0x1b, 0x16, 0x8f, 0x5b, 0x05, 0x3d, 0x10, 0x9f, 0x91, 0x0e, 0x93, 0xab, 0x9d, 0x23, 0x25, 0x83, 0x2c, 0xb9, 0xd4, 0xef, 0x68, 0x92, 0xcd, 0xc7, 0x87, 0x9b, 0x36, 0x66, 0x6f, 0x33, 0x4c, 0xe3, 0x0d, 0xc2, 0x73, 0xc4, 0xd1, 0x8f, 0x5f, 0x4d, 0x79, 0x2c, 0xce, 0x90, 0xc3, 0x99, 0xf5, 0x73, 0x6a, 0x66, 0xfd, 0xcc, 0x0f, 0x7d, 0xdd, 0x58, 0x3f, 0xa7, 0x0a, 0x8c, 0x12, 0xb0, 0x33, 0x85, 0x80, 0xeb, 0x35, 0x8d, 0x19, 0x8c, 0xe1, 0x54, 0x83, 0xf5, 0x2b, 0xc0, 0xf4, 0xea, 0xaf, 0xeb, 0xbf, 0xf3, 0xb0, 0xb0, 0xb3, 0xa9, 0xff, 0x4d, 0x27, 0xa5, 0x20, 0x3b, 0x11, 0xb9, 0xf6, 0x27, 0xa8, 0xec, 0x6c, 0x4b, 0x92, 0x90, 0x9f, 0x8f, 0xeb, 0x85, 0x2b, 0x00, 0x94, 0x5a, 0xf8, 0x8b, 0x74, 0x58, 0x6b, 0x93, 0xb0, 0x32, 0x41, 0xb4, 0x2f, 0xa5, 0xf6, 0x8c, 0x83, 0xc1, 0x91, 0x75, 0x72, 0xf5, 0x2b, 0x2f, 0x60, 0x7a, 0xa7, 0x91, 0xbe, 0x23, 0x9d, 0x5e, 0xf3, 0x66, 0xd3, 0x7b, 0xd8, 0x6e, 0x7a, 0xa9, 0x4c, 0xf0, 0x23, 0x1b, 0x5c, 0x05, 0x01, 0xf8, 0x2a, 0xd5, 0x60, 0x77, 0x7e, 0xab, 0x67, 0x5c, 0x2d, 0xcc, 0x3b, 0x53, 0xad, 0xae, 0x80, 0x29, 0x5b, 0x8b, 0x6c, 0x2e, 0x8d, 0x6f, 0x5a, 0xd2, 0x36, 0x34, 0xba, 0x89, 0x82, 0xe8, 0x01, 0x97, 0x9b, 0xa4, 0xc3, 0x82, 0xbe, 0x58, 0xf2, 0x70, 0xa8, 0x8c, 0x6d, 0x58, 0x3a, 0x8c, 0xda, 0x52, 0x5d, 0x6d, 0x72, 0x08, 0xeb, 0x43, 0xb6, 0x70, 0x0e, 0xb4, 0x6c, 0xb4, 0x0e, 0x02, 0xc9, 0x7e, 0x43, 0x60, 0x53, 0xaf, 0xd1, 0x9e, 0xa5, 0xb5, 0xed, 0x86, 0xf9, 0x6b, 0xa1, 0x1f, 0x4a, 0xa6, 0xd4, 0xdc, 0xbb, 0xf0, 0x4f, 0x7d, 0x10, 0x98, 0xe6, 0xd9, 0x58, 0x62, 0x0b, 0xdf, 0x8b, 0x33, 0xc3, 0x45, 0xd6, 0xa2, 0xfe, 0x78, 0x90, 0x6e, 0x76, 0xf9, 0xa4, 0x28, 0xb2, 0x15, 0xe9, 0x99, 0x19, 0x88, 0x3b, 0x0b, 0x03, 0x8e, 0xd0, 0xbd, 0xf2, 0x02, 0x65, 0x81, 0xba, 0xc0, 0xb3, 0xc0, 0xbb, 0xc0, 0xb7, 0xc0, 0xe8, 0xb3, 0x35, 0x2d, 0x1b, 0xd3, 0x36, 0x7f, 0x6e, 0x98, 0x9f, 0x9b, 0xdb, 0x83, 0xfb, 0x73, 0xf3, 0x49, 0x38, 0x08, 0xff, 0x92, 0xb5, 0x20, 0x11, 0x5f, 0x36, 0x31, 0x85, 0x57, 0x49, 0x67, 0x74, 0xd3, 0x98, 0xd9, 0xb0, 0x3b, 0x51, 0x4e, 0xeb, 0x2d, 0x59, 0xea, 0x92, 0x69, 0x75, 0x59, 0x09, 0x15, 0xea, 0x4a, 0x18, 0x5e, 0xf0, 0x01, 0xe2, 0x72, 0x5c, 0x8b, 0x89, 0xf2, 0x2c, 0xa8, 0xe1, 0x14, 0x98, 0x43, 0xe3, 0x9b, 0x45, 0x30, 0x9e, 0xb6, 0x1b, 0x6b, 0xbd, 0xc4, 0xfa, 0xf6, 0x21, 0x91, 0xaf, 0x4c, 0xa3, 0xce, 0x25, 0xaf, 0x00, 0xc5, 0xd3, 0x01, 0x6e, 0x5a, 0x0f, 0xc3, 0x3f, 0x03, 0x0b, 0xce, 0x98, 0x77, 0xc3, 0x2b, 0x40, 0xc6, 0xf7, 0x1b, 0x69, 0x4b, 0x15, 0xc2, 0xca, 0xc4, 0x1f, 0x37, 0x8c, 0xb3, 0x92, 0x01, 0xf0, 0x2b, 0x83, 0x7e, 0xf0, 0x41, 0x1d, 0xae, 0x8f, 0x1b, 0x22, 0xdb, 0x32, 0xdf, 0xa1, 0x1c, 0xf7, 0xfc, 0xc8, 0x36, 0x5c, 0x11, 0x2b, 0x88, 0x96, 0x60, 0x1b, 0x35, 0xee, 0x0c, 0x7e, 0x23, 0xcb, 0x0d, 0x15, 0x99, 0x91, 0xde, 0x89, 0x2d, 0x73, 0x12, 0xbe, 0xd5, 0x1c, 0xea, 0xf4, 0xc3, 0x83, 0x87, 0x07, 0xd9, 0x92, 0x4d, 0x48, 0x84, 0xf3, 0x6d, 0x61, 0x27, 0x94, 0x85, 0x89, 0xa5, 0x75, 0x24, 0x4b, 0x2d, 0xa1, 0x5a, 0x2b, 0x4d, 0x14, 0x3b, 0xb1, 0x38, 0xbb, 0xba, 0x86, 0x37, 0xc7, 0x1d, 0x4a, 0x38, 0x7b, 0xb3, 0xcc, 0xe7, 0xd9, 0xc1, 0x48, 0xdb, 0xac, 0x2e, 0x9f, 0xef, 0x89, 0x54, 0x7d, 0x64, 0x5a, 0xcb, 0x14, 0x48, 0x01, 0xd6, 0xea, 0x94, 0x17, 0x62, 0x20, 0xe5, 0x11, 0xad, 0x72, 0xa4, 0x73, 0xcb, 0xaf, 0x1f, 0x3a, 0x90, 0xa8, 0xae, 0x03, 0x92, 0xdd, 0xea, 0x4f, 0xaa, 0x41, 0xba, 0x19, 0x48, 0xca, 0x23, 0x1a, 0xfd, 0xa3, 0x02, 0xb0, 0x5f, 0xd5, 0x0f, 0x53, 0xc0, 0x76, 0x55, 0xbf, 0x3e, 0x0c, 0x53, 0xbe, 0xd1, 0x0f, 0x65, 0xe0, 0xc2, 0xdf, 0x20, 0x14, 0x50, 0xf8, 0x3b, 0x47, 0xc0, 0xcd, 0xf7, 0x09, 0x93, 0x6d, 0xdc, 0xc6, 0x59, 0xf5, 0xa0, 0x54, 0x9f, 0x84, 0x5d, 0xb3, 0x1a, 0x60, 0x1e, 0x85, 0xbe, 0x77, 0x0f, 0xba, 0xe9, 0xfd, 0x2e, 0x3c, 0x4b, 0x6d, 0xca, 0xb5, 0x49, 0xc3, 0x32, 0x3c, 0x30, 0x75, 0x51, 0x1b, 0x8f, 0x0f, 0xcf, 0x0c, 0x82, 0x3b, 0xb1, 0x98, 0x69, 0x94, 0x85, 0x06, 0x7d, 0x02, 0xa6, 0x68, 0xd2, 0x85, 0xeb, 0xeb, 0x80, 0x88, 0x21, 0xa7, 0x4a, 0xfb, 0x41, 0x7e, 0xe5, 0x24, 0x28, 0xe3, 0xef, 0x2a, 0x0c, 0x4c, 0x4d, 0x94, 0x1f, 0x7c, 0x02, 0x90, 0x84, 0x5f, 0x78, 0x61, 0x0c, 0x22, 0x0f, 0x19, 0x36, 0x56, 0xc5, 0x3b, 0x64, 0xbc, 0x13, 0x91, 0x87, 0x12, 0x93, 0xd9, 0x82, 0xd1, 0x91, 0x59, 0x41, 0x98, 0x4f, 0xd6, 0xe9, 0xb0, 0x67, 0xcf, 0x24, 0xcc, 0x19, 0xbf, 0x90, 0xdc, 0x3f, 0xf2, 0xc6, 0x9e, 0x83, 0x09, 0x2f, 0xdb, 0xc4, 0x49, 0x2a, 0x41, 0xf4, 0xab, 0xc0, 0x38, 0x2f, 0x13, 0x84, 0x3e, 0x52, 0x12, 0x26, 0xc4, 0x56, 0x64, 0x65, 0xa7, 0x86, 0x2c, 0x20, 0x72, 0x8f, 0x52, 0xbc, 0xce, 0xd0, 0x13, 0x50, 0x41, 0xf7, 0xcd, 0x31, 0x5c, 0x03, 0x1c, 0x23, 0x8f, 0x6f, 0xa2, 0xa0, 0x35, 0x2d, 0x3f, 0x09, 0x48, 0xab, 0x7a, 0xe1, 0xea, 0xce, 0x42, 0xa5, 0x03, 0xe6, 0xf1, 0xb8, 0x70, 0x3a, 0xb6, 0xd7, 0xdc, 0xd8, 0x6c, 0x82, 0xbc, 0x78, 0x5e, 0x78, 0x20, 0x26, 0x29, 0x53, 0xe4, 0x90, 0xea, 0x8c, 0x1d, 0xd5, 0xc8, 0x85, 0xed, 0x9c, 0x89, 0x7c, 0x33, 0xdf, 0x57, 0x97, 0xaf, 0x95, 0x26, 0xbe, 0x5b, 0x07, 0x23, 0x4f, 0x42, 0x81, 0x83, 0xf6, 0xe6, 0x86, 0x63, 0x33, 0x64, 0x3f, 0x78, 0xe2, 0x6e, 0xd5, 0x0f, 0xf3, 0xb0, 0x06, 0xc1, 0x57, 0x46, 0xaa, 0x4e, 0x0f, 0x9b, 0x14, 0x5b, 0xaf, 0x4e, 0x96, 0xd5, 0x46, 0x2f, 0x78, 0x17, 0x87, 0xb7, 0x92, 0xcd, 0xcc, 0x5c, 0xab, 0x2b, 0x7f, 0x7c, 0x38, 0x77, 0x2c, 0xc7, 0x90, 0x06, 0xd6, 0x4a, 0xb9, 0xa6, 0xd5, 0x09, 0x6e, 0xcd, 0xc5, 0xd7, 0xb1, 0x95, 0x75, 0xc6, 0x5d, 0xc0, 0x3d, 0x0f, 0xee, 0x67, 0x8e, 0xa3, 0x8d, 0xec, 0x81, 0x19, 0x36, 0x85, 0xde, 0x0a, 0x58, 0x22, 0x7b, 0x46, 0x9f, 0x6b, 0x61, 0x3b, 0xaf, 0xfd, 0xcc, 0x9d, 0x91, 0xd5, 0x18, 0x61, 0x2b, 0x46, 0xd8, 0xa0, 0x31, 0x6e, 0xa2, 0x15, 0xf7, 0x1d, 0x65, 0xf8, 0xa8, 0x8b, 0x7d, 0x69, 0xab, 0x2a, 0xe5, 0x8a, 0x57, 0xf2, 0xe4, 0xb1, 0xb4, 0xf3, 0x2e, 0xb6, 0x43, 0x74, 0x1b, 0xb6, 0xd3, 0x91, 0x59, 0xe9, 0x2d, 0xf1, 0x02, 0xb6, 0xdf, 0xba, 0x47, 0xdf, 0x9b, 0x9c, 0x55, 0x27, 0xee, 0x68, 0x2d, 0xc3, 0x75, 0x63, 0x2e, 0xd9, 0xe9, 0x4e, 0xff, 0x63, 0xbe, 0x23, 0x3f, 0x90, 0x8f, 0x14, 0x7b, 0x7a, 0x57, 0x4c, 0x2d, 0xa1, 0x7b, 0xb5, 0x83, 0x50, 0x84, 0x29, 0x71, 0x9d, 0x21, 0xbc, 0x21, 0xd6, 0x9a, 0x9a, 0x22, 0xa2, 0xe6, 0xc6, 0xd5, 0xa5, 0xd3, 0xc0, 0x04, 0xf3, 0xd5, 0x2a, 0x4f, 0x24, 0x3c, 0x10, 0xef, 0x17, 0xd2, 0x12, 0x15, 0x92, 0x0a, 0xbd, 0x13, 0xd2, 0x0e, 0xb2, 0x60, 0x5c, 0xe2, 0x0d, 0x21, 0xe6, 0x3a, 0x7f, 0x95, 0xcd, 0xbb, 0xf8, 0xdf, 0x5e, 0xfa, 0xb7, 0x97, 0xd8, 0x72, 0x70, 0x21, 0x86, 0x3d, 0x89, 0x61, 0xa7, 0x70, 0x86, 0x7b, 0x03, 0x7e, 0xa4, 0x1d, 0x1f, 0xa2, 0x9b, 0x67, 0x62, 0xc7, 0xb4, 0x22, 0xba, 0x8d, 0x4b, 0x46, 0x8c, 0x42, 0x6b, 0x90, 0xba, 0x9d, 0x2c, 0xbf, 0xf2, 0x28, 0xb6, 0xf4, 0xe8, 0x74, 0x5b, 0x0c, 0x8e, 0x3a, 0x24, 0x46, 0x6b, 0x2f, 0xe8, 0x7d, 0x91, 0xcd, 0xec, 0xfe, 0x1a, 0x5b, 0x08, 0x76, 0x66, 0xac, 0xa5, 0xf1, 0xac, 0xac, 0x54, 0xbc, 0xd4, 0x57, 0x15, 0x01, 0x89, 0x2c, 0x0b, 0xdf, 0xb6, 0x35, 0xb2, 0x99, 0x6f, 0xcd, 0x70, 0xef, 0x4a, 0xc5, 0x9c, 0xec, 0x6f, 0x21, 0x1f, 0xe6, 0x34, 0xfd, 0x6a, 0x8d, 0xe6, 0x4d, 0x5b, 0x6f, 0x6b, 0xd9, 0xa8, 0xd6, 0xbc, 0x36, 0x12, 0x4e, 0x75, 0x17, 0x38, 0x7d, 0xba, 0x8e, 0x1c, 0x65, 0x45, 0xdc, 0x81, 0xbf, 0x81, 0x5b, 0xfe, 0xb5, 0xfe, 0xee, 0x9a, 0x5a, 0xa4, 0xd5, 0x6b, 0xb3, 0xeb, 0x4b, 0x69, 0x6d, 0xf5, 0x69, 0x9b, 0x49, 0x0e, 0x3f, 0xb8, 0x4f, 0x9e, 0x72, 0x70, 0x78, 0x77, 0xaa, 0xdd, 0x8d, 0x94, 0x92, 0xc5, 0x35, 0x0a, 0x81, 0x80, 0xb8, 0x8d, 0x82, 0xef, 0x2b, 0x4a, 0xe8, 0x9a, 0x2d, 0xd9, 0x47, 0xb0, 0x27, 0x3a, 0xbf, 0x66, 0xbc, 0xcd, 0x50, 0xc3, 0x62, 0xda, 0x0d, 0x15, 0x7e, 0x53, 0x89, 0xe4, 0x33, 0xab, 0x11, 0xa1, 0x87, 0x46, 0xb9, 0x7b, 0x21, 0x2b, 0xa9, 0x50, 0xac, 0x3d, 0x50, 0xff, 0x02, 0x8f, 0xc6, 0xb3, 0x64, 0x5f, 0xc8, 0xb8, 0xc3, 0x61, 0x8f, 0xfe, 0xac, 0xe6, 0x53, 0x2d, 0xd1, 0xc1, 0x44, 0xde, 0xc1, 0xa1, 0x89, 0xd4, 0xa4, 0x27, 0xd8, 0x70, 0x41, 0x7f, 0x98, 0x39, 0x69, 0x11, 0x7b, 0x2b, 0x59, 0x78, 0xd2, 0x6a, 0x68, 0x2e, 0xa8, 0x08, 0x5d, 0x5a, 0x2f, 0xaf, 0xab, 0x05, 0xcb, 0x75, 0x0b, 0x70, 0x5d, 0xab, 0xab, 0xfe, 0x00, 0xa6, 0xc9, 0x52, 0x96, 0xb2, 0x6c, 0x96, 0xbe, 0x12, 0xc2, 0xb5, 0xf9, 0x09, 0x70, 0xca, 0x53, 0x8f, 0x0f, 0xe3, 0x58, 0x76, 0x66, 0x73, 0xa1, 0xb5, 0x73, 0xc9, 0xa8, 0x31, 0x2e, 0x2f, 0x91, 0x01, 0x24, 0x6a, 0xc6, 0xf3, 0x43, 0x32, 0x8d, 0xcc, 0x3c, 0xec, 0x3f, 0x57, 0xc2, 0x75, 0x90, 0xfa, 0xd1, 0x9e, 0xb9, 0x63, 0xf9, 0x66, 0xfd, 0x75, 0x92, 0xca, 0x78, 0x22, 0x89, 0x49, 0x3b, 0x06, 0xda, 0xc1, 0xf4, 0xdc, 0xa1, 0x81, 0x52, 0xbe, 0x9b, 0x11, 0x24, 0x70, 0x40, 0x08, 0xf1, 0x61, 0x05, 0xdc, 0x62, 0xfa, 0x61, 0x62, 0x6e, 0x6e, 0x8e, 0x17, 0x17, 0x33, 0x06, 0x7b, 0x38, 0xa9, 0xcb, 0x41, 0x9c, 0xd3, 0x4e, 0x7c, 0xe8, 0x76, 0x91, 0x61, 0xe2, 0x94, 0x4c, 0xc8, 0x63, 0x21, 0x54, 0xfa, 0xf1, 0xbb, 0x2f, 0xe1, 0x1a, 0x5f, 0x0f, 0xf4, 0x6b, 0xc3, 0x9e, 0xf7, 0xd2, 0xec, 0x7d, 0xe7, 0x5c, 0xfd, 0x2a, 0xfd, 0x75, 0x83, 0x0e, 0x9a, 0x50, 0x5f, 0xb6, 0xde, 0xed, 0xe0, 0xf5, 0xe9, 0x68, 0xc2, 0x8e, 0x2d, 0x77, 0x25, 0xf5, 0x59, 0x55, 0xe0, 0xaf, 0xfa, 0x50, 0x7f, 0x1d, 0x57, 0x93, 0x95, 0xb8, 0x1e, 0x3d, 0xa5, 0xd7, 0xc9, 0x73, 0xf4, 0x63, 0xd1, 0x4b, 0x28, 0x78, 0xb2, 0x69, 0x64, 0xb2, 0x25, 0x46, 0x47, 0xd6, 0xd1, 0x9d, 0x6c, 0x21, 0x2f, 0x98, 0x88, 0x56, 0x23, 0xbb, 0xbf, 0x18, 0xff, 0xf8, 0xa5, 0xf1, 0x55, 0xe2, 0x80, 0xdf, 0x10, 0x3c, 0xbc, 0x88, 0x2f, 0x60, 0x8d, 0xb1, 0x4f, 0x5d, 0x1a, 0x9b, 0xd6, 0x0e, 0xd8, 0x79, 0x49, 0x6c, 0x15, 0x63, 0x9f, 0xbd, 0x34, 0xb6, 0xb0, 0x3f, 0x7e, 0x49, 0x6c, 0xb7, 0x6c, 0xd7, 0x6e, 0x23, 0x9b, 0x4b, 0xbd, 0x60, 0xac, 0xb0, 0xe6, 0xda, 0x0b, 0x63, 0xe5, 0x38, 0x97, 0xc4, 0x97, 0x94, 0x71, 0x59, 0xd2, 0x2e, 0xc4, 0x0d, 0x9b, 0x93, 0x71, 0xc6, 0x5a, 0x7c, 0xff, 0x8d, 0xe6, 0x4e, 0xc8, 0xe3, 0x7b, 0x04, 0x47, 0xf8, 0x6a, 0x0a, 0x45, 0x2c, 0xf1, 0x61, 0x63, 0x91, 0x3e, 0x42, 0x56, 0x02, 0xa9, 0x0c, 0x4d, 0xc2, 0xa9, 0x1a, 0x4e, 0xd4, 0x64, 0x57, 0x4d, 0x6d, 0x7d, 0x20, 0x2f, 0x99, 0x2f, 0x46, 0x7f, 0x1a, 0x7b, 0x54, 0x2a, 0x1e, 0x93, 0x4f, 0xf2, 0xe6, 0x21, 0x37, 0xba, 0x36, 0x99, 0x6f, 0x48, 0x5b, 0xcd, 0xbd, 0xce, 0xb4, 0x2c, 0x28, 0x6e, 0x4b, 0x98, 0x18, 0x8f, 0x38, 0x08, 0x67, 0xea, 0x23, 0xc9, 0xe2, 0x3a, 0x93, 0x36, 0x23, 0x61, 0xbb, 0xb4, 0xc5, 0xb1, 0x7c, 0x8e, 0xf1, 0x43, 0xac, 0x6d, 0x0d, 0xd5, 0xa7, 0x65, 0xa3, 0xe6, 0xc5, 0x51, 0x52, 0xcb, 0x36, 0xfc, 0x88, 0x52, 0x71, 0x69, 0x16, 0xa5, 0x5e, 0x6e, 0xe2, 0x1b, 0x6c, 0x3f, 0x51, 0x52, 0x1c, 0x3b, 0xd1, 0x42, 0x73, 0x54, 0x4a, 0xcf, 0xce, 0xcf, 0x97, 0x6b, 0x5d, 0x0c, 0x89, 0x3a, 0xcf, 0xc7, 0x19, 0xeb, 0xc1, 0x3a, 0xf7, 0x98, 0x79, 0xaf, 0x49, 0xac, 0xb8, 0x6e, 0xb9, 0x3a, 0xec, 0x8e, 0x8d, 0xae, 0x35, 0x3d, 0xb2, 0xee, 0xe8, 0xb0, 0x3c, 0xe9, 0xd2, 0xde, 0x8e, 0x15, 0x08, 0x6b, 0xe4, 0xfa, 0x53, 0xe9, 0x1a, 0xf2, 0xcd, 0xc5, 0x6f, 0xcb, 0xd5, 0xb8, 0xaa, 0x4d, 0xca, 0xce, 0xbe, 0x59, 0x21, 0x70, 0x26, 0x67, 0x50, 0x0c, 0x86, 0x85, 0xb5, 0xb7, 0x88, 0xdd, 0x4c, 0xcb, 0xc7, 0x1c, 0x8a, 0x9d, 0xbf, 0x6e, 0xc3, 0x94, 0x8f, 0xc8, 0xc5, 0x60, 0xe1, 0x9b, 0x76, 0x2d, 0x18, 0xe2, 0xcd, 0xd0, 0x4c, 0x4e, 0xe2, 0xf1, 0x8d, 0xb2, 0x42, 0xc9, 0xb9, 0x88, 0xfd, 0x6b, 0x8c, 0xde, 0xa3, 0xbb, 0x76, 0xda, 0x94, 0xa9, 0x9c, 0x83, 0x96, 0xce, 0x49, 0x29, 0x06, 0x07, 0xb9, 0xf4, 0x1f, 0x23, 0x65, 0xe8, 0x6a, 0xb8, 0x30, 0x36, 0xca, 0xb6, 0x90, 0x2d, 0xda, 0x0c, 0x35, 0x44, 0xb6, 0xb7, 0x8d, 0xb0, 0xfc, 0x8c, 0xbc, 0x67, 0x2b, 0x62, 0xd3, 0xc1, 0xd8, 0xdb, 0xc6, 0x77, 0x31, 0x95, 0x37, 0xb6, 0x9f, 0xec, 0xc8, 0xe3, 0xfb, 0x10, 0x95, 0xd2, 0xa3, 0x1b, 0xf5, 0xef, 0x44, 0xc8, 0x86, 0x4a, 0x11, 0x2f, 0x2f, 0xe9, 0xbf, 0x3c, 0x24, 0x2b, 0xcb, 0x7c, 0x0c, 0x49, 0xec, 0xfd, 0x19, 0x3d, 0xa6, 0x2c, 0x34, 0xe1, 0x25, 0xe2, 0x04, 0x66, 0x25, 0x86, 0x1d, 0x60, 0x9b, 0x45, 0xb7, 0x83, 0x4a, 0x0f, 0x1d, 0xc8, 0x81, 0xc9, 0xa4, 0xcf, 0x84, 0xc9, 0x10, 0xc1, 0x24, 0x6e, 0x25, 0xa8, 0xc4, 0xdc, 0x06, 0x0c, 0x86, 0xb3, 0x30, 0x68, 0xda, 0x18, 0xaa, 0xd6, 0xb4, 0xcb, 0x41, 0x20, 0x6e, 0xcd, 0xc2, 0x20, 0xd3, 0xfe, 0xea, 0x6c, 0xfb, 0x3d, 0xf9, 0x59, 0xda, 0xf0, 0x62, 0x24, 0xbc, 0x2e, 0xf6, 0x36, 0x51, 0x9c, 0x59, 0x1f, 0xd1, 0x7e, 0xbd, 0xa8, 0x69, 0x63, 0x6f, 0xa6, 0xf5, 0xa5, 0xe6, 0xfa, 0x11, 0x83, 0x43, 0xff, 0xf2, 0x63, 0xcb, 0xf2, 0x9f, 0x63, 0xeb, 0xcb, 0x8c, 0xad, 0x89, 0xf7, 0x03, 0x09, 0xcc, 0x22, 0x77, 0x65, 0xd7, 0x3b, 0xd5, 0xde, 0x32, 0x98, 0x30, 0x8f, 0x0c, 0x34, 0xa7, 0xc8, 0x1a, 0x7f, 0x3b, 0xc0, 0xc1, 0x44, 0x6a, 0x64, 0x1d, 0x72, 0x2a, 0xfb, 0x9d, 0x95, 0x50, 0x34, 0xb2, 0x2e, 0xee, 0x41, 0x5a, 0xdb, 0x25, 0x60, 0x65, 0x33, 0x83, 0x29, 0x4e, 0xbb, 0xc6, 0x23, 0x1a, 0xc1, 0x0d, 0x59, 0x00, 0x71, 0xcf, 0xce, 0xbe, 0x94, 0x26, 0xad, 0x05, 0x0c, 0x9d, 0x14, 0x37, 0x64, 0xec, 0x98, 0x26, 0x34, 0x31, 0xb6, 0x37, 0x27, 0x76, 0x1f, 0xc5, 0xb6, 0xc6, 0xe5, 0x4c, 0xec, 0xc4, 0xc4, 0xd8, 0xb8, 0x6e, 0xd8, 0x34, 0xa9, 0x17, 0xb0, 0xdd, 0xf3, 0xc3, 0x77, 0xc7, 0x8d, 0xb5, 0x16, 0xb9, 0x56, 0x17, 0xc2, 0xd8, 0x8b, 0xf0, 0x18, 0xca, 0xf1, 0x0b, 0xa1, 0x9f, 0x0b, 0xfd, 0xd6, 0xe5, 0xf8, 0x25, 0xd0, 0x0f, 0x9a, 0x36, 0x8a, 0xfd, 0xed, 0x1a, 0xe3, 0xce, 0xf9, 0x52, 0xe4, 0x72, 0x77, 0x0c, 0xb4, 0xd9, 0x05, 0x6e, 0xc6, 0xb5, 0x7f, 0xae, 0x1c, 0x7a, 0x65, 0xef, 0x2b, 0xfb, 0x91, 0x3a, 0xb6, 0xd2, 0x8d, 0xbc, 0x9a, 0x85, 0xee, 0x93, 0xcd, 0x50, 0x82, 0xbc, 0x17, 0x55, 0xdf, 0x67, 0xb1, 0x90, 0xcd, 0xe7, 0x5c, 0x1d, 0x29, 0x92, 0x31, 0x70, 0x7e, 0x8a, 0x6a, 0xca, 0x95, 0x2e, 0xa9, 0x99, 0xfb, 0x74, 0xf5, 0x61, 0x8f, 0x0f, 0x0a, 0x65, 0xa9, 0x0e, 0xa1, 0x49, 0xd6, 0xb7, 0x33, 0xfe, 0x83, 0xb2, 0x79, 0x64, 0x50, 0x58, 0x6e, 0x1e, 0x2f, 0x99, 0x92, 0x83, 0x0e, 0x2f, 0x5b, 0xec, 0xb4, 0x63, 0x1d, 0x9e, 0x24, 0x69, 0x58, 0x9a, 0x2a, 0xb8, 0x94, 0xf7, 0x4c, 0x4b, 0x5d, 0xbd, 0x86, 0x55, 0x4e, 0xe3, 0x16, 0xaf, 0xdb, 0xc2, 0x4f, 0x80, 0x97, 0x79, 0x99, 0x49, 0x82, 0xb3, 0xf0, 0x05, 0x35, 0xcb, 0x33, 0xbf, 0x8d, 0x3b, 0x95, 0x69, 0x3d, 0x16, 0xf6, 0x89, 0xf8, 0x68, 0x4c, 0x9f, 0x4a, 0x7e, 0x4d, 0x70, 0x14, 0x6c, 0xfd, 0x95, 0xac, 0xdc, 0xda, 0x90, 0x16, 0x98, 0x41, 0x54, 0x26, 0xdd, 0x9a, 0x43, 0x37, 0x39, 0xe0, 0x08, 0x38, 0x84, 0x6f, 0xe2, 0x59, 0x0f, 0x90, 0xad, 0xd0, 0x8c, 0xc4, 0x0c, 0x60, 0x0f, 0x52, 0xa2, 0xb6, 0x9c, 0xef, 0x27, 0xb0, 0xbe, 0xc1, 0x98, 0x0b, 0x63, 0x3b, 0x63, 0x79, 0x48, 0x17, 0xc8, 0x09, 0x9d, 0xd6, 0x60, 0xba, 0x7f, 0xde, 0xb8, 0x11, 0x63, 0x58, 0xe9, 0x84, 0xfc, 0x07, 0xf7, 0x6b, 0xea, 0x8e, 0x9f, 0x42, 0x5e, 0xac, 0xa8, 0x67, 0x4d, 0x9d, 0xb4, 0xef, 0xa7, 0x50, 0x10, 0xcf, 0xe7, 0x1c, 0xec, 0xea, 0x6c, 0xc8, 0xdf, 0xb5, 0x1d, 0xf2, 0x97, 0x49, 0x72, 0x83, 0x52, 0xa5, 0x4c, 0x8f, 0xbd, 0xce, 0xfe, 0x4d, 0xb3, 0x90, 0x8f, 0x01, 0x99, 0xee, 0xfb, 0x82, 0xab, 0xe3, 0x56, 0xfc, 0x9a, 0x01, 0x36, 0x1b, 0xdd, 0x49, 0x2f, 0xbe, 0x14, 0x70, 0xe0, 0x97, 0x05, 0xbf, 0xec, 0x48, 0x5f, 0x6c, 0x07, 0x1f, 0x51, 0x26, 0xe8, 0x33, 0xc9, 0x08, 0x2f, 0x01, 0xb7, 0x8d, 0xd4, 0x7e, 0xdd, 0xfc, 0x55, 0x01, 0x2a, 0xd7, 0xd0, 0x4a, 0xad, 0x8a, 0x97, 0xe0, 0x5c, 0x24, 0x08, 0xdc, 0x86, 0x98, 0x44, 0x09, 0x4c, 0x25, 0x69, 0x2f, 0xf5, 0xef, 0xf6, 0xa7, 0x0c, 0x4a, 0xc7, 0x2a, 0xfb, 0x10, 0x26, 0x76, 0x23, 0x96, 0x96, 0xbe, 0xb9, 0x9e, 0x6e, 0xf5, 0x4a, 0x9a, 0xd5, 0xec, 0xdd, 0x13, 0x05, 0x6a, 0xda, 0x0a, 0x34, 0xdd, 0x6b, 0xe7, 0xe8, 0x19, 0x33, 0xfc, 0x9f, 0x14, 0xfe, 0x64, 0x51, 0x16, 0x7d, 0xdc, 0x6c, 0xdb, 0xdb, 0x85, 0x14, 0xfa, 0xeb, 0x82, 0xea, 0x8e, 0x39, 0x85, 0xcd, 0xeb, 0x8f, 0x6e, 0x32, 0xa8, 0x70, 0xbb, 0x42, 0xb7, 0x3c, 0x11, 0xdf, 0xf2, 0xa8, 0xb0, 0x2e, 0x7b, 0xe3, 0xc7, 0xfa, 0x69, 0x92, 0x76, 0xe4, 0x8e, 0x90, 0xe4, 0x92, 0x43, 0xa9, 0x00, 0xd2, 0x5d, 0x72, 0x55, 0x8e, 0x34, 0x9b, 0x2c, 0x18, 0xe7, 0xc8, 0xb3, 0x03, 0x1d, 0x60, 0x07, 0xc1, 0x77, 0xdd, 0x92, 0x2b, 0xfb, 0x67, 0xba, 0xde, 0x59, 0x52, 0x99, 0x32, 0xa7, 0x26, 0x67, 0xe5, 0xfc, 0x1c, 0xaf, 0x75, 0xdc, 0x1e, 0x01, 0xe3, 0x56, 0xe9, 0x76, 0x0e, 0xe9, 0xc9, 0x5a, 0xb0, 0x44, 0xee, 0x67, 0xae, 0xdc, 0x09, 0xe1, 0xf0, 0x26, 0xec, 0xcf, 0x43, 0x46, 0xcf, 0x1f, 0xf0, 0x74, 0x20, 0x15, 0x6c, 0xc7, 0xb6, 0x95, 0x13, 0x2e, 0xba, 0xb8, 0x42, 0x65, 0xf9, 0x10, 0x86, 0xec, 0xc0, 0xb1, 0xe4, 0x7d, 0x65, 0x7f, 0x1f, 0xb8, 0x4b, 0x87, 0x41, 0xb6, 0x8c, 0x97, 0xe3, 0xf9, 0xc4, 0x6a, 0xb6, 0x41, 0xc4, 0x61, 0xce, 0x32, 0x28, 0x5b, 0xb2, 0xf8, 0xf8, 0xab, 0xcf, 0x41, 0x45, 0x3d, 0x84, 0xbe, 0x51, 0x6f, 0x0a, 0xb0, 0x6c, 0x7e, 0xec, 0x47, 0x5e, 0x9c, 0xc9, 0x71, 0x95, 0x6f, 0x95, 0xc3, 0x5e, 0xfa, 0xf9, 0xc3, 0xcc, 0x17, 0x55, 0x28, 0x16, 0xb6, 0x13, 0xfe, 0xe3, 0x00, 0x59, 0x81, 0x3b, 0x0c, 0xe5, 0x38, 0x86, 0x77, 0xb1, 0x4f, 0x3f, 0xd6, 0x96, 0xbe, 0x7e, 0x8c, 0x98, 0x97, 0xee, 0xef, 0xd3, 0x42, 0x3f, 0x03, 0x1b, 0x42, 0xb8, 0x9c, 0xed, 0x82, 0x97, 0x21, 0x05, 0xb6, 0x28, 0x67, 0xd5, 0x1a, 0x8a, 0x55, 0x88, 0x54, 0x6a, 0x9a, 0xfe, 0x73, 0xd4, 0x5e, 0x18, 0xdd, 0x90, 0xa1, 0xfa, 0xf2, 0xd0, 0x45, 0xb7, 0x2a, 0x91, 0xe5, 0xf0, 0x00, 0x34, 0x66, 0xf6, 0x04, 0x64, 0x2c, 0xa1, 0x1c, 0x73, 0x2d, 0xed, 0xd1, 0x7b, 0xc5, 0x3d, 0xbd, 0x63, 0x0a, 0x72, 0x12, 0x72, 0xcd, 0x2b, 0xfb, 0xae, 0xa5, 0x35, 0xda, 0xcf, 0x12, 0x15, 0x64, 0x5a, 0xb8, 0x0e, 0xa7, 0x71, 0x7d, 0x3a, 0xf7, 0xd1, 0xb0, 0x6a, 0x11, 0x37, 0x0a, 0x8a, 0xdb, 0x17, 0xb0, 0xff, 0xf7, 0x5c, 0xdc, 0x27, 0x46, 0x44, 0x49, 0xe5, 0xbd, 0x36, 0xc8, 0x72, 0x38, 0x5b, 0x8d, 0x18, 0x1b, 0xf8, 0xf7, 0x81, 0x05, 0x17, 0x2e, 0xee, 0x62, 0x3b, 0xa7, 0xf4, 0xb5, 0x95, 0x7f, 0x7f, 0x90, 0xf9, 0xfe, 0x11, 0xff, 0xfe, 0x44, 0xdc, 0x2e, 0x59, 0xb2, 0x9e, 0xbf, 0x76, 0xf0, 0xef, 0xce, 0x4c, 0x9c, 0x67, 0xf9, 0x77, 0x4f, 0xe6, 0x7b, 0x84, 0x7f, 0x5f, 0x8c, 0x6c, 0xe1, 0x7a, 0x1d, 0xa4, 0xfb, 0xe8, 0x3e, 0xfa, 0x1d, 0xd7, 0x6d, 0x1b, 0x72, 0xfd, 0xe5, 0xd4, 0xd7, 0xc4, 0xf9, 0x2e, 0xb8, 0xf0, 0xe9, 0x56, 0x2d, 0xdf, 0xe8, 0x63, 0x2f, 0x8e, 0xed, 0x2d, 0x72, 0x0d, 0xf5, 0xb1, 0x97, 0xac, 0xe4, 0x1a, 0xd0, 0x8a, 0xec, 0xf9, 0xf4, 0xf6, 0x84, 0x25, 0xdb, 0xc3, 0xfa, 0xb3, 0x06, 0xb7, 0x77, 0xfe, 0x67, 0xd1, 0xec, 0x7e, 0xd8, 0xa7, 0x2c, 0xaf, 0x22, 0x0a, 0xb8, 0x67, 0xad, 0xb0, 0xe1, 0x2d, 0x6e, 0x27, 0x52, 0xa4, 0x9e, 0x49, 0xb4, 0x9b, 0x42, 0x92, 0xc2, 0xbb, 0xc4, 0x5d, 0xc9, 0x24, 0x3f, 0x80, 0xb1, 0x1a, 0x0d, 0xc6, 0x1a, 0x71, 0x0e, 0x94, 0xa9, 0xf5, 0xbe, 0x3c, 0xa6, 0x4f, 0xf3, 0x93, 0x66, 0xe2, 0xed, 0xf5, 0x22, 0x3f, 0x8d, 0xbe, 0xe3, 0x6a, 0x50, 0x93, 0xfa, 0xb3, 0xe3, 0x2a, 0x56, 0x02, 0x88, 0x85, 0xee, 0xa1, 0x71, 0x19, 0x98, 0x14, 0xb0, 0x46, 0xf6, 0x8c, 0x46, 0x79, 0xbd, 0x7f, 0xae, 0x7e, 0xed, 0xe8, 0x4e, 0xe2, 0x6c, 0x7c, 0x5e, 0x4f, 0x90, 0x5b, 0xfb, 0x61, 0x0f, 0x78, 0xc0, 0x5b, 0x49, 0x56, 0x3b, 0xfc, 0xb5, 0xc4, 0x73, 0xb2, 0x7d, 0x71, 0x55, 0x5e, 0x90, 0xc9, 0x4b, 0xc3, 0x7c, 0xec, 0x46, 0x2e, 0x8e, 0xa6, 0x8d, 0x38, 0x8e, 0x28, 0x5e, 0x9b, 0xd6, 0x15, 0x7a, 0x02, 0x1c, 0xb3, 0xfa, 0xd9, 0xd6, 0x86, 0x53, 0xb1, 0xab, 0xe0, 0x99, 0xcc, 0x21, 0xf6, 0x6c, 0x5a, 0x9c, 0x93, 0x59, 0xf7, 0x86, 0x74, 0x4a, 0xcf, 0x0a, 0x70, 0xa8, 0x2b, 0xc0, 0x99, 0xcd, 0xf7, 0xd3, 0x5d, 0x4d, 0x1b, 0x73, 0x4b, 0x4c, 0xe8, 0x3b, 0xee, 0x8f, 0xe7, 0x0b, 0x4a, 0x60, 0x6e, 0x3f, 0xb4, 0x21, 0x57, 0x62, 0x4d, 0xc4, 0x0d, 0x4a, 0xc9, 0xe0, 0x2d, 0xf1, 0x1f, 0xeb, 0xea, 0xfe, 0xe2, 0x39, 0xb1, 0x2b, 0x71, 0x79, 0xbf, 0xfa, 0xf7, 0xbe, 0x85, 0xeb, 0x92, 0x27, 0x2f, 0x3c, 0x10, 0x6f, 0x55, 0xab, 0x5e, 0x7b, 0xfe, 0xb5, 0x03, 0x98, 0x37, 0xe1, 0x72, 0xb1, 0xcf, 0x97, 0x97, 0x1d, 0x63, 0xe1, 0xcd, 0x74, 0x07, 0x27, 0xcb, 0x41, 0x1e, 0x1e, 0x27, 0x03, 0xf1, 0x81, 0x5a, 0xdf, 0x67, 0xfe, 0x98, 0x6e, 0xb5, 0x48, 0xaf, 0x7c, 0xe5, 0xc0, 0x78, 0x5d, 0x4e, 0x82, 0x6a, 0x67, 0xfb, 0xae, 0x05, 0xb4, 0x16, 0xe2, 0x5a, 0x6e, 0x2a, 0xb5, 0x20, 0xce, 0x7a, 0x94, 0x24, 0xc2, 0x72, 0x95, 0x12, 0x92, 0xa7, 0x6f, 0xda, 0x14, 0xcb, 0x97, 0x67, 0x83, 0x65, 0xd3, 0x76, 0xb0, 0xc4, 0x6c, 0xa4, 0x3f, 0x84, 0x2e, 0x1b, 0xdd, 0xec, 0x19, 0xf9, 0x0e, 0x72, 0xb8, 0x27, 0xc8, 0x7e, 0x7d, 0xed, 0x87, 0xfa, 0x29, 0xd2, 0xbb, 0x17, 0xfa, 0xea, 0x23, 0x9f, 0x30, 0xde, 0x0d, 0xc6, 0xe7, 0xe7, 0xd4, 0x01, 0x39, 0x3e, 0x7c, 0xe8, 0x2e, 0x8a, 0x02, 0x7c, 0x9f, 0x46, 0xfe, 0x74, 0x34, 0x47, 0x22, 0x83, 0x5c, 0x53, 0x71, 0x50, 0x3f, 0x41, 0x3e, 0x7b, 0x0b, 0x11, 0x92, 0x73, 0xf4, 0x13, 0x04, 0x2b, 0x75, 0x95, 0xfe, 0x96, 0x7f, 0x95, 0x7e, 0xdc, 0xb8, 0x27, 0x1b, 0xd7, 0x4d, 0x39, 0x8b, 0xad, 0x4b, 0xb2, 0x72, 0x5b, 0x92, 0xe8, 0x63, 0x88, 0x13, 0x43, 0x5c, 0x84, 0x73, 0x3e, 0x6b, 0xff, 0x5e, 0xe0, 0x75, 0x35, 0x13, 0x53, 0x7f, 0x3b, 0x8d, 0xf1, 0xb3, 0x54, 0xaa, 0x7e, 0xec, 0x12, 0x9f, 0x1f, 0x1b, 0xd8, 0xbf, 0x42, 0xa6, 0x9b, 0xfb, 0x3a, 0xe0, 0x60, 0xc3, 0x05, 0x3d, 0xb9, 0xe0, 0x82, 0xfe, 0x43, 0xcd, 0x9f, 0xa1, 0x1a, 0x5d, 0x4c, 0x39, 0x6e, 0xcd, 0x95, 0xae, 0x66, 0x66, 0xcb, 0x16, 0x35, 0xc4, 0x37, 0xc8, 0xe7, 0xc7, 0x0e, 0x22, 0x2d, 0x67, 0x11, 0xd2, 0xad, 0x52, 0xd6, 0xd6, 0x20, 0x7b, 0xf7, 0x44, 0xb9, 0x2d, 0xa0, 0xdb, 0x13, 0xca, 0x12, 0xb6, 0xf1, 0x7c, 0x27, 0xf2, 0xcf, 0xea, 0xf1, 0x61, 0x4f, 0x8a, 0xe9, 0x48, 0xea, 0xa5, 0xc7, 0xe4, 0x10, 0x49, 0x8a, 0xe2, 0x79, 0x6a, 0x94, 0x52, 0x79, 0x42, 0xbb, 0xc4, 0x9d, 0xa8, 0x5b, 0x48, 0x8a, 0x45, 0x77, 0xb2, 0x0a, 0x09, 0x16, 0xdf, 0x17, 0xe0, 0xd0, 0x1c, 0x89, 0x0c, 0xf5, 0x3e, 0xb6, 0xd7, 0xe6, 0x03, 0x33, 0x3c, 0x1f, 0x3b, 0x25, 0xee, 0x14, 0x10, 0x70, 0xbb, 0xc4, 0x4a, 0x79, 0x07, 0xae, 0xb9, 0x3f, 0xa5, 0x78, 0x39, 0x29, 0x9f, 0x13, 0xad, 0xbf, 0x5e, 0x19, 0x4f, 0x1b, 0xa9, 0x3e, 0x78, 0x09, 0x39, 0xd6, 0x8c, 0xb4, 0x88, 0xfa, 0x0b, 0x71, 0xe4, 0x56, 0x9c, 0x53, 0x5b, 0xb1, 0xbe, 0x29, 0x9e, 0xe3, 0x79, 0x74, 0x47, 0xa8, 0x8c, 0xf8, 0x93, 0x57, 0x06, 0x84, 0x05, 0xdd, 0x29, 0x28, 0x76, 0x62, 0x0b, 0x8e, 0xe1, 0x7c, 0xf3, 0xc1, 0x3e, 0xbe, 0x11, 0xdb, 0x29, 0x4b, 0x98, 0x66, 0xbf, 0x5c, 0x8d, 0xa1, 0xa6, 0xc8, 0xa6, 0xa6, 0x8d, 0x09, 0x4b, 0xae, 0x25, 0xe5, 0x4b, 0xd7, 0x3a, 0xd6, 0x1a, 0xe8, 0x6a, 0xd9, 0xc8, 0xad, 0x7a, 0x01, 0xeb, 0x61, 0x46, 0xf8, 0x3f, 0x8a, 0x7e, 0xf3, 0x9a, 0xc8, 0xcf, 0x92, 0xf1, 0x7b, 0x0c, 0xfd, 0x14, 0xf6, 0xb3, 0x66, 0xfc, 0xde, 0x42, 0xbf, 0x3c, 0xf6, 0x9b, 0x84, 0x7e, 0xce, 0x4c, 0x1f, 0xbe, 0x84, 0xf8, 0xfb, 0x00, 0xfb, 0x03, 0xfa, 0x93, 0x55, 0xf5, 0x54, 0x86, 0x32, 0x72, 0x20, 0xee, 0x27, 0x0e, 0x8a, 0x7a, 0xa1, 0x0d, 0xe9, 0x89, 0x54, 0xdc, 0xd0, 0x9e, 0x20, 0x79, 0x2a, 0xe9, 0x60, 0x60, 0xda, 0x07, 0x38, 0xad, 0x29, 0x53, 0xce, 0xc3, 0xe8, 0xf7, 0x6c, 0xd3, 0x46, 0x76, 0x3f, 0x47, 0xf7, 0x70, 0x71, 0xb8, 0x84, 0xe1, 0x32, 0x42, 0xef, 0x49, 0x92, 0xe1, 0x27, 0x45, 0xbf, 0x0a, 0x49, 0x26, 0x42, 0xe5, 0x99, 0x53, 0x08, 0xbf, 0x74, 0xbc, 0xe7, 0xe3, 0x76, 0x21, 0xe1, 0x1c, 0x8b, 0x1a, 0xad, 0x7a, 0x3e, 0x4d, 0x65, 0x73, 0xbb, 0xa9, 0xe7, 0x56, 0x64, 0x7b, 0x2e, 0x41, 0xe7, 0xc5, 0x9e, 0xcb, 0xb5, 0xcf, 0x8c, 0x33, 0x79, 0x83, 0xb0, 0xf8, 0x8e, 0xbd, 0x2d, 0x1b, 0x14, 0x29, 0xae, 0xe7, 0x34, 0x86, 0x17, 0xf2, 0xdd, 0xec, 0x0d, 0x17, 0x46, 0x7f, 0x45, 0x37, 0x69, 0xd1, 0x3d, 0x5f, 0x70, 0x50, 0x23, 0x5d, 0x0e, 0x1f, 0xd8, 0x69, 0xd7, 0xa5, 0xe7, 0x6a, 0xba, 0x2d, 0xf6, 0x52, 0xa9, 0x1b, 0xae, 0xf6, 0xc9, 0xb4, 0x2c, 0x85, 0xd7, 0xf0, 0xad, 0x55, 0x1f, 0x80, 0xfb, 0xba, 0x7a, 0xb0, 0x23, 0x54, 0x5c, 0xdc, 0x9b, 0xe5, 0xb9, 0x3a, 0x47, 0xd7, 0x05, 0x91, 0x4e, 0x4b, 0xc3, 0x98, 0xec, 0xbd, 0x77, 0x20, 0x1e, 0x2f, 0xcd, 0x99, 0x37, 0x20, 0x66, 0x0e, 0xa5, 0x44, 0x5e, 0x6e, 0x61, 0x26, 0xa5, 0x9d, 0xef, 0xe3, 0x02, 0x3d, 0x91, 0x6b, 0x13, 0x1e, 0x29, 0x29, 0x07, 0x51, 0x52, 0x7e, 0x93, 0x2f, 0x92, 0x3b, 0x1e, 0x3d, 0x20, 0x07, 0x9d, 0x5e, 0x98, 0x52, 0x9f, 0xe2, 0x7d, 0xeb, 0xf7, 0xa1, 0x29, 0xf4, 0x34, 0x2c, 0x36, 0xf6, 0xd3, 0xf9, 0xc6, 0x67, 0x63, 0x2f, 0x5d, 0x4b, 0xea, 0x48, 0x75, 0xb5, 0x19, 0xbb, 0xe6, 0x1d, 0x49, 0x13, 0x7e, 0x75, 0x1a, 0x7b, 0xeb, 0x09, 0x0e, 0xeb, 0x31, 0x76, 0xd1, 0xfb, 0x38, 0xac, 0xdf, 0xd8, 0x6b, 0x4f, 0x71, 0xd8, 0x90, 0xb1, 0xab, 0x3e, 0xcc, 0x61, 0x1b, 0x8c, 0xdd, 0xf3, 0x4d, 0x1c, 0xb6, 0xd5, 0xd8, 0x65, 0x7f, 0x98, 0x28, 0x98, 0x20, 0xc0, 0xa3, 0xc6, 0xde, 0xfe, 0x63, 0x74, 0x33, 0xf4, 0x47, 0xe7, 0xe0, 0x71, 0xfe, 0xfe, 0x23, 0x6c, 0x2f, 0x0d, 0x06, 0xea, 0xe1, 0x49, 0xfe, 0xba, 0x08, 0x3b, 0x30, 0xe5, 0x2e, 0x63, 0xe7, 0xfd, 0x59, 0xac, 0xe7, 0x73, 0xe4, 0xb6, 0x48, 0x30, 0x82, 0xee, 0x7d, 0xec, 0x46, 0xee, 0x0d, 0xdd, 0x2f, 0xb1, 0xdb, 0x04, 0x07, 0xd1, 0x7d, 0xd8, 0xd8, 0xc1, 0x7f, 0x1d, 0xdd, 0xc7, 0xd8, 0x7d, 0x1e, 0xde, 0xe2, 0x5d, 0xfb, 0xe3, 0xfc, 0xa5, 0xc3, 0x09, 0x0c, 0x39, 0xc5, 0xee, 0x93, 0x70, 0x1a, 0xfd, 0xcf, 0x1a, 0xbb, 0xf9, 0xe7, 0xb0, 0xb4, 0x51, 0x76, 0x7f, 0x6a, 0x82, 0x40, 0x95, 0xc9, 0xc2, 0xee, 0x31, 0x93, 0x2d, 0xf4, 0xb4, 0xc9, 0xc1, 0xee, 0x4f, 0x4c, 0x4e, 0xf4, 0x77, 0xe1, 0xb7, 0x1b, 0x9f, 0x22, 0xb9, 0xda, 0x18, 0x35, 0xb2, 0x7f, 0x11, 0x69, 0xa9, 0x61, 0xef, 0x17, 0x20, 0x7d, 0x37, 0x1b, 0xe6, 0x12, 0x4f, 0x43, 0xfb, 0x0b, 0x41, 0xe8, 0xb6, 0x60, 0x09, 0x8f, 0x56, 0x7d, 0x0c, 0x4d, 0x4a, 0x9d, 0x7f, 0x95, 0x90, 0x1f, 0x26, 0xbe, 0x9a, 0xd9, 0xb3, 0xc9, 0x8c, 0x04, 0x41, 0x8d, 0x4e, 0xda, 0x56, 0x75, 0x0a, 0x0e, 0x8e, 0xdf, 0x89, 0x41, 0xec, 0xf5, 0xe8, 0xec, 0x20, 0x0c, 0x51, 0x7e, 0x37, 0xe8, 0x5d, 0xb6, 0xd9, 0x02, 0x82, 0x43, 0xb2, 0x1f, 0x86, 0x72, 0xc7, 0x12, 0x96, 0x53, 0x83, 0x39, 0x74, 0x21, 0xfd, 0xf2, 0x78, 0x1a, 0xef, 0x44, 0x53, 0xe8, 0x5b, 0x3f, 0x21, 0x56, 0x10, 0x63, 0xdd, 0xee, 0x0d, 0xc0, 0x2e, 0xbe, 0xbb, 0xa4, 0x09, 0xa9, 0xc2, 0x3c, 0xea, 0x85, 0x8f, 0x2d, 0xac, 0x1b, 0xd1, 0xa8, 0xd5, 0x65, 0xe5, 0xe1, 0x18, 0xbb, 0xd1, 0x07, 0xd1, 0xbb, 0xe5, 0x49, 0xc9, 0x9c, 0x71, 0x4e, 0xba, 0x53, 0x98, 0x47, 0x5a, 0x2a, 0x30, 0x09, 0x47, 0xa9, 0x25, 0xb2, 0xe7, 0xbc, 0x90, 0xc4, 0xdb, 0x28, 0x0f, 0x7c, 0x2a, 0x13, 0xde, 0x1c, 0x3a, 0xa9, 0xc2, 0x87, 0x74, 0xcc, 0x24, 0x08, 0x63, 0x1f, 0x12, 0xd5, 0x92, 0xb4, 0xa8, 0x56, 0x82, 0x99, 0x5e, 0x44, 0x72, 0x4d, 0xcb, 0x69, 0x6a, 0xcb, 0x2d, 0xa9, 0xe3, 0xc3, 0x72, 0x0d, 0x62, 0xf0, 0xb9, 0x4a, 0xb5, 0x63, 0x36, 0xc3, 0x75, 0xad, 0x80, 0x2b, 0x4b, 0x41, 0x6e, 0xc1, 0xd9, 0xec, 0x7e, 0x65, 0x7f, 0x0f, 0xb8, 0x88, 0xce, 0xae, 0x24, 0x2b, 0x6d, 0x49, 0xa8, 0x33, 0xc9, 0x69, 0xa8, 0x1e, 0xf3, 0xd3, 0xbd, 0x54, 0x02, 0xeb, 0x84, 0x76, 0x0c, 0x77, 0x4a, 0x72, 0x90, 0xf6, 0x8f, 0x95, 0x1a, 0x79, 0x39, 0xa5, 0x23, 0x2c, 0x24, 0x72, 0x10, 0xf8, 0xe8, 0xdc, 0x71, 0xb1, 0x6f, 0xd0, 0x8f, 0x34, 0xfb, 0xf1, 0x61, 0x84, 0xef, 0x93, 0x74, 0x57, 0x27, 0x61, 0x99, 0x5d, 0x67, 0x69, 0x7f, 0x1d, 0xfd, 0x03, 0x26, 0x4b, 0x52, 0x27, 0x0d, 0x28, 0xae, 0x95, 0x4d, 0x73, 0x61, 0x0c, 0xa4, 0x66, 0xce, 0x6b, 0x4a, 0x0d, 0xe9, 0x67, 0x50, 0xac, 0x3e, 0xa4, 0x14, 0x76, 0x3c, 0x0d, 0x6d, 0x31, 0x25, 0x30, 0x0d, 0xa9, 0x88, 0x0f, 0x89, 0xd2, 0xfc, 0x78, 0x12, 0xe6, 0xbe, 0x93, 0x7a, 0x43, 0x70, 0x08, 0x96, 0x56, 0x74, 0xb7, 0x69, 0x16, 0xd2, 0x41, 0xc1, 0xfc, 0x9e, 0x86, 0x1e, 0x23, 0xf6, 0x47, 0x99, 0xd8, 0x43, 0xd4, 0x2b, 0x46, 0xec, 0x3a, 0x74, 0xf7, 0x70, 0xec, 0xb9, 0x9c, 0xf7, 0xd0, 0x25, 0xb1, 0x6f, 0x49, 0xeb, 0xae, 0x61, 0x6c, 0x0f, 0xba, 0x87, 0x38, 0x76, 0x29, 0xe7, 0xbd, 0x35, 0x56, 0x92, 0x1d, 0x95, 0xe1, 0xed, 0xf0, 0x70, 0xbc, 0x90, 0xe8, 0xc0, 0x8f, 0x2d, 0xc8, 0xaf, 0x11, 0xbc, 0x9f, 0x2c, 0x41, 0x78, 0x9b, 0x2f, 0x60, 0xaa, 0xad, 0x9a, 0x15, 0x53, 0x6d, 0xbd, 0x4b, 0xb4, 0x60, 0x34, 0xe6, 0xc1, 0xaf, 0xd1, 0x4c, 0x5a, 0x37, 0x62, 0xf4, 0xe7, 0xe2, 0xf9, 0x9c, 0xe6, 0x31, 0xa2, 0x41, 0xcd, 0x2f, 0x63, 0x9a, 0x51, 0x82, 0x8b, 0xd1, 0xeb, 0xc8, 0x1f, 0xe0, 0x53, 0x8f, 0xcf, 0x8e, 0xc8, 0x9e, 0x3f, 0x6d, 0xbb, 0xba, 0x9f, 0xd2, 0xcd, 0xee, 0x86, 0x26, 0xb0, 0x5f, 0xdd, 0x0d, 0xff, 0x02, 0x53, 0xd0, 0xbd, 0x18, 0x2a, 0x70, 0xf4, 0x2e, 0x3e, 0xf8, 0x24, 0x0c, 0x21, 0x84, 0xe7, 0xe3, 0xd8, 0x0e, 0xcf, 0xae, 0x87, 0x68, 0xe8, 0x49, 0x88, 0x54, 0x9f, 0x82, 0xc8, 0xec, 0x06, 0x08, 0x2b, 0xb5, 0x5f, 0xa7, 0xfb, 0x80, 0xf2, 0xae, 0x6d, 0x04, 0xe7, 0xb5, 0x44, 0x6d, 0x1e, 0x07, 0xd7, 0xb5, 0x94, 0xd2, 0x7d, 0x6d, 0x27, 0x0c, 0x41, 0xd1, 0xb5, 0x94, 0xa3, 0x8c, 0xbf, 0x2d, 0x59, 0x8d, 0x57, 0xdd, 0x79, 0x35, 0xdd, 0xc5, 0xd2, 0x16, 0xf2, 0xc3, 0x0a, 0x74, 0xd9, 0x60, 0xe5, 0xec, 0x46, 0xe8, 0xc4, 0xdc, 0x13, 0x98, 0x7b, 0x1f, 0xe6, 0xde, 0x83, 0xb9, 0xf7, 0x60, 0xee, 0x09, 0x74, 0xa7, 0x66, 0xaf, 0x22, 0xad, 0x29, 0x1c, 0x61, 0xf3, 0xb9, 0x9f, 0x37, 0xa1, 0xdf, 0x56, 0xac, 0xdb, 0xe3, 0xf0, 0x30, 0xfe, 0xf6, 0xe0, 0xdc, 0xea, 0xc6, 0x72, 0x1e, 0xc3, 0xdf, 0xad, 0xf0, 0x16, 0xfe, 0x1e, 0x86, 0x16, 0xec, 0x79, 0xba, 0xed, 0xcb, 0xc9, 0xbd, 0x6f, 0xc5, 0x34, 0x8f, 0x6b, 0xce, 0x0c, 0x64, 0xac, 0xb3, 0x3b, 0x30, 0xed, 0xe3, 0x99, 0x31, 0x6a, 0x9b, 0xbd, 0x1c, 0xb6, 0xc3, 0x76, 0xcd, 0x2e, 0xaf, 0x02, 0x05, 0xc3, 0xfc, 0xb0, 0x1d, 0xc7, 0x09, 0xdf, 0x32, 0x4b, 0xa3, 0xe9, 0xfb, 0xa3, 0x58, 0xde, 0x2e, 0xcc, 0xf7, 0x04, 0x3c, 0x3b, 0xbb, 0xdb, 0x64, 0x83, 0xe7, 0x0c, 0xad, 0xc3, 0xce, 0xb8, 0x2d, 0x61, 0x43, 0x98, 0xfa, 0xb9, 0xf7, 0xfc, 0xe8, 0xd3, 0x1f, 0xb7, 0xf4, 0xd0, 0x4e, 0x16, 0xcd, 0x92, 0x0d, 0x71, 0x6b, 0x69, 0x3f, 0x04, 0x69, 0xf5, 0xc2, 0xaf, 0xad, 0x71, 0x6b, 0x59, 0x3f, 0x48, 0x9a, 0xb4, 0xe5, 0xd7, 0x3c, 0x83, 0xac, 0x48, 0x35, 0x5b, 0x48, 0x26, 0xea, 0x27, 0x38, 0x50, 0xfc, 0x53, 0x31, 0xe9, 0x1f, 0x5e, 0xc6, 0xf7, 0x59, 0x21, 0x79, 0xaa, 0x49, 0x79, 0xfa, 0xc9, 0x6e, 0x5f, 0x18, 0x31, 0x57, 0x4c, 0xfa, 0xbb, 0xdf, 0x24, 0xe5, 0xd4, 0x40, 0x0a, 0x4b, 0x49, 0x0d, 0x2a, 0xb6, 0xd4, 0x80, 0x32, 0x05, 0x1f, 0x3b, 0x3e, 0x79, 0xf8, 0x4c, 0x1d, 0x4c, 0xcd, 0xae, 0x82, 0x11, 0xac, 0xe1, 0x4b, 0xb0, 0x8f, 0xdb, 0xbf, 0x1f, 0x7f, 0x2b, 0xe1, 0xa5, 0x70, 0x37, 0xbc, 0x1b, 0x77, 0xf1, 0x0d, 0xb6, 0x66, 0x1c, 0x75, 0xaf, 0x1b, 0x74, 0x2b, 0x98, 0x5a, 0xb0, 0x45, 0xc7, 0xa8, 0xcc, 0xb8, 0x2c, 0x57, 0xdb, 0x4e, 0x30, 0x45, 0x04, 0xc9, 0x2c, 0x4d, 0xf4, 0x72, 0xd2, 0xb9, 0x97, 0xb9, 0x77, 0xd1, 0x32, 0xa4, 0xb6, 0x16, 0x7b, 0xba, 0x61, 0x09, 0x53, 0x63, 0x2e, 0xa1, 0x81, 0xe2, 0xf3, 0xaa, 0xc1, 0x84, 0x69, 0xe0, 0x49, 0x18, 0xe1, 0x9b, 0x21, 0x29, 0xc4, 0x56, 0x75, 0x66, 0x3b, 0x2c, 0x40, 0x3a, 0x28, 0x51, 0x34, 0x9e, 0xce, 0x93, 0x05, 0x0f, 0xfd, 0x6e, 0xd2, 0x2a, 0x0f, 0x24, 0x74, 0xa2, 0xf0, 0x92, 0x63, 0x33, 0xab, 0xc0, 0x36, 0x33, 0x8c, 0x74, 0xad, 0x8d, 0xfb, 0x34, 0x85, 0xbd, 0xfb, 0x12, 0x8e, 0x74, 0x3f, 0x3c, 0xca, 0x35, 0x0e, 0x40, 0x13, 0xd3, 0x4a, 0x08, 0xff, 0x2d, 0x12, 0xf5, 0xa4, 0x98, 0xd9, 0xd3, 0x6f, 0x9f, 0xbd, 0x10, 0xe9, 0xaf, 0xc6, 0xda, 0x0b, 0x9f, 0x44, 0xfe, 0xee, 0x37, 0x99, 0xfa, 0xbe, 0xcb, 0xb7, 0x70, 0x20, 0x46, 0xb5, 0xf9, 0x99, 0xae, 0x00, 0xd3, 0x7e, 0xcc, 0x03, 0xdb, 0xfc, 0xc7, 0xc3, 0xc4, 0x55, 0x99, 0xf6, 0x50, 0x2b, 0x88, 0x6b, 0x23, 0x6d, 0x31, 0xc2, 0x6c, 0xa4, 0x41, 0x86, 0x4f, 0x8d, 0x56, 0x71, 0xb9, 0x10, 0x4d, 0xcd, 0xf1, 0xad, 0xd4, 0x0a, 0xd2, 0x5f, 0x9a, 0x43, 0xb8, 0x04, 0x54, 0x88, 0x03, 0xa4, 0x59, 0x4b, 0xf3, 0x9c, 0x30, 0x83, 0xf0, 0xc5, 0x76, 0x5c, 0x86, 0x76, 0x3a, 0x8b, 0x14, 0x4e, 0x66, 0xfc, 0xd9, 0x92, 0x71, 0xc6, 0x8a, 0x65, 0xc4, 0x8d, 0x9e, 0x1d, 0x46, 0xf8, 0xcd, 0x9b, 0x98, 0x9f, 0xa8, 0x41, 0xda, 0x47, 0xd4, 0x80, 0xbe, 0x44, 0x0d, 0xfa, 0x8d, 0x1a, 0x84, 0x87, 0xe2, 0x76, 0xc4, 0xc3, 0x16, 0x9e, 0xe3, 0x05, 0xcc, 0xad, 0x31, 0x7e, 0x3b, 0x8b, 0x14, 0x61, 0xf8, 0x5e, 0xfe, 0x9a, 0x8c, 0x5f, 0x24, 0x6d, 0xc4, 0x3c, 0xe3, 0x0e, 0x86, 0x6b, 0x79, 0x64, 0xcf, 0x1f, 0x4e, 0xb3, 0x4f, 0xb9, 0xe1, 0x53, 0x89, 0x3e, 0x6f, 0xb0, 0x4f, 0xa9, 0xe1, 0x33, 0x17, 0x7d, 0x5e, 0x62, 0x9f, 0xca, 0x0c, 0xfd, 0x18, 0x80, 0x20, 0xfa, 0xae, 0x47, 0xdf, 0xbb, 0xd3, 0xed, 0xa3, 0xfd, 0xb8, 0x00, 0xe2, 0xb3, 0x3f, 0xd4, 0x18, 0x33, 0x22, 0x18, 0x2f, 0x18, 0x8f, 0x5b, 0x30, 0xcc, 0x6b, 0x84, 0xd5, 0x64, 0xc2, 0x70, 0xa5, 0x60, 0xd9, 0xc4, 0x9e, 0x3f, 0x38, 0x28, 0x8c, 0xe5, 0x6e, 0x05, 0x99, 0x1c, 0x8f, 0x13, 0x54, 0xce, 0x9c, 0xa1, 0x90, 0x1f, 0xbc, 0xc4, 0x63, 0xd4, 0x99, 0x70, 0x22, 0xb7, 0x92, 0x95, 0x1c, 0xbd, 0xcc, 0xb7, 0x6c, 0x12, 0x47, 0x7e, 0x96, 0x29, 0xa6, 0x87, 0xeb, 0xdf, 0x9b, 0x2f, 0xf9, 0x4c, 0xfe, 0xcb, 0x4b, 0x28, 0x49, 0x56, 0xfa, 0x2c, 0x51, 0xef, 0x06, 0xe5, 0xe4, 0x0e, 0x54, 0xd3, 0x8d, 0x98, 0x4c, 0x3b, 0xc8, 0x08, 0x45, 0xd5, 0xa0, 0x6b, 0xbc, 0x81, 0x1a, 0xf0, 0x1b, 0x34, 0x4d, 0x69, 0xa0, 0x16, 0xe6, 0x1a, 0xf4, 0x4c, 0x79, 0x20, 0x04, 0x95, 0x06, 0x45, 0x12, 0xa4, 0x35, 0xc1, 0xa0, 0x8a, 0x68, 0xb4, 0x34, 0x1a, 0x74, 0x47, 0x96, 0x1a, 0x3b, 0x95, 0x43, 0x8d, 0x7d, 0x08, 0x1a, 0xba, 0x33, 0xb4, 0x18, 0xba, 0x3b, 0x0d, 0xda, 0x8b, 0x35, 0x0e, 0xf1, 0xe9, 0xc3, 0xa7, 0x3f, 0xe9, 0x3e, 0xb4, 0xd1, 0x5f, 0x67, 0xe8, 0x47, 0x58, 0x93, 0x4b, 0x0e, 0x0e, 0x18, 0xba, 0x61, 0x74, 0x2e, 0xba, 0xc3, 0xe0, 0x9b, 0xa5, 0xf1, 0xb2, 0x5b, 0xd6, 0xae, 0x7c, 0x78, 0x66, 0x08, 0x1e, 0x16, 0x1c, 0x5e, 0xe4, 0x3b, 0x37, 0x6d, 0x24, 0x0e, 0x4e, 0xad, 0x52, 0xba, 0xa0, 0x02, 0x69, 0x15, 0x97, 0x7f, 0x39, 0x73, 0x80, 0xbf, 0xa2, 0xdb, 0x62, 0x96, 0xcd, 0x0d, 0x20, 0xad, 0x72, 0x53, 0x0a, 0xa1, 0xee, 0x8e, 0x6c, 0x69, 0xda, 0xa8, 0xa6, 0xe8, 0xd6, 0xb4, 0x65, 0x23, 0x39, 0xbe, 0x5b, 0xd1, 0x17, 0x10, 0xfa, 0x95, 0x01, 0xa0, 0x18, 0xb4, 0xe7, 0xc9, 0x5f, 0x92, 0x08, 0x49, 0x4e, 0xf9, 0x3f, 0x4f, 0x28, 0xd2, 0x07, 0xf7, 0x6d, 0x1e, 0x54, 0x4d, 0x87, 0x53, 0x8a, 0xf4, 0x21, 0xba, 0x0e, 0x0e, 0xd4, 0xf7, 0x45, 0xe4, 0x83, 0x4f, 0x23, 0x34, 0xd3, 0x69, 0x6c, 0x7c, 0xbb, 0xa2, 0xa5, 0x69, 0x63, 0x56, 0x53, 0xdc, 0x53, 0xa5, 0x5e, 0xe9, 0x2d, 0x06, 0x8b, 0xaf, 0x18, 0x6c, 0xe1, 0xc1, 0x55, 0x60, 0x7e, 0xc3, 0x31, 0x04, 0x30, 0xe9, 0xbf, 0xb6, 0x82, 0xf9, 0xb0, 0xe3, 0x6e, 0x80, 0xa9, 0xbf, 0x44, 0xd7, 0x01, 0x75, 0x25, 0xe4, 0xb1, 0x5c, 0x18, 0x39, 0x79, 0x98, 0x2c, 0xb8, 0xae, 0x65, 0x38, 0x4a, 0xb3, 0x77, 0xdc, 0xbf, 0x9b, 0x92, 0xbf, 0x33, 0x0c, 0x4e, 0xb7, 0x6b, 0x24, 0x76, 0x01, 0x63, 0xe7, 0x0b, 0x29, 0xb2, 0xf4, 0x2b, 0x6e, 0xc9, 0x69, 0xa2, 0xf6, 0x97, 0x6d, 0x72, 0x0c, 0x02, 0x3c, 0x75, 0x45, 0x57, 0xc4, 0xb8, 0xd7, 0xf7, 0xdf, 0xeb, 0xfb, 0x26, 0x3d, 0x83, 0x58, 0xe0, 0x21, 0x6a, 0x01, 0xe9, 0x7b, 0x99, 0x3e, 0x22, 0x9e, 0xc4, 0xf0, 0xc5, 0x76, 0x11, 0x3d, 0x66, 0x5a, 0xd5, 0x0d, 0x70, 0xb8, 0x04, 0x9a, 0xef, 0xad, 0xef, 0x33, 0xad, 0xc2, 0xf9, 0x82, 0xb1, 0x0f, 0xa7, 0x0c, 0x37, 0xe9, 0x7a, 0x3d, 0x45, 0xb9, 0xe9, 0xfa, 0x5b, 0xff, 0x80, 0xd0, 0x92, 0x2a, 0x7e, 0x91, 0xce, 0xef, 0x70, 0xea, 0x70, 0xea, 0xbd, 0xf5, 0x87, 0x53, 0xef, 0xaf, 0xa7, 0x9c, 0x27, 0x1f, 0xcc, 0x84, 0x66, 0xf3, 0xed, 0xa7, 0x5c, 0xe9, 0xbc, 0xf1, 0x03, 0x4f, 0x8a, 0x7c, 0x15, 0x38, 0x94, 0x3a, 0x94, 0xf2, 0x98, 0x3e, 0xb8, 0xff, 0xd0, 0xba, 0x83, 0x03, 0x87, 0x53, 0x99, 0xb0, 0x74, 0x9a, 0xce, 0xee, 0x60, 0x09, 0x44, 0xef, 0xe5, 0x1a, 0x72, 0x0a, 0xa2, 0x42, 0xa9, 0x36, 0xfc, 0x9d, 0xcd, 0x59, 0xf9, 0xac, 0xfa, 0x36, 0x6d, 0x4c, 0x56, 0xec, 0x4c, 0x75, 0x4a, 0xd1, 0x14, 0x69, 0xe7, 0xbc, 0xdb, 0xd4, 0x3b, 0x55, 0x91, 0x77, 0xa6, 0x5a, 0xcb, 0x4b, 0xe0, 0x87, 0x03, 0xd1, 0x7b, 0xfd, 0xe6, 0xe8, 0x3d, 0x81, 0x3a, 0x28, 0x71, 0x16, 0x83, 0x83, 0xee, 0x0e, 0xfe, 0xd8, 0xe9, 0xa0, 0x1b, 0x7a, 0x54, 0x76, 0x17, 0xa0, 0xdb, 0x1c, 0x77, 0xb3, 0xdb, 0xee, 0xa0, 0xfb, 0x7a, 0xac, 0x9a, 0xbd, 0x79, 0x9d, 0xf6, 0x2b, 0xf6, 0x29, 0xa2, 0xbb, 0x3d, 0x61, 0x5a, 0x5c, 0x4b, 0xce, 0x3d, 0xb4, 0x91, 0x4e, 0xdc, 0xe1, 0x8c, 0x9c, 0xbb, 0x79, 0x0b, 0xae, 0x11, 0x73, 0x65, 0x53, 0x34, 0xd5, 0x6f, 0x7b, 0x2e, 0xd5, 0x5e, 0xc3, 0x31, 0x95, 0x22, 0x1c, 0x55, 0xcf, 0x0d, 0xac, 0xca, 0xcb, 0xe9, 0xbb, 0x47, 0xb5, 0x42, 0xee, 0xd7, 0x2b, 0x2f, 0xd7, 0xaf, 0x0a, 0xf6, 0xab, 0x1c, 0x76, 0x5e, 0xed, 0x1c, 0x51, 0xeb, 0x63, 0xe7, 0xc2, 0x2e, 0xc4, 0xe3, 0x27, 0x44, 0x7f, 0x62, 0x1a, 0xd2, 0x6b, 0xc6, 0x16, 0x2e, 0xe2, 0x5e, 0xe6, 0x6f, 0x88, 0x6c, 0x6b, 0xda, 0x68, 0x05, 0x28, 0xbd, 0x26, 0x08, 0x65, 0x46, 0x8c, 0xac, 0xcf, 0xd7, 0xd9, 0x27, 0x00, 0x65, 0x94, 0x2a, 0x1b, 0xdf, 0x05, 0x56, 0x09, 0x4a, 0x33, 0x61, 0xe8, 0x53, 0x04, 0x56, 0xab, 0xe1, 0x33, 0x79, 0x7c, 0x5c, 0xca, 0xa9, 0x22, 0x68, 0x84, 0x18, 0xdf, 0x02, 0x9a, 0x47, 0xd6, 0x1d, 0x59, 0xa7, 0xd5, 0x38, 0x4c, 0xd0, 0x16, 0x9f, 0xdb, 0x6a, 0xc3, 0xf7, 0xa2, 0x18, 0x62, 0x6a, 0x7c, 0xaf, 0x8a, 0x3b, 0xf1, 0xf7, 0xce, 0x98, 0xc7, 0xf5, 0x31, 0x94, 0xe1, 0xf3, 0x75, 0x6d, 0x86, 0x92, 0x28, 0x07, 0x4d, 0x72, 0x3d, 0x9f, 0x7f, 0x75, 0xec, 0x82, 0xe6, 0x74, 0xed, 0x75, 0xbd, 0xa8, 0xd9, 0xcb, 0xa6, 0xb9, 0x9e, 0x77, 0x8d, 0xb0, 0x6f, 0x51, 0xec, 0xd9, 0x50, 0xbe, 0x77, 0x25, 0x14, 0x18, 0xbb, 0x0e, 0x2f, 0xd5, 0x1a, 0x2d, 0x96, 0x5a, 0x84, 0x6e, 0x0b, 0x95, 0xea, 0x4e, 0xf9, 0x30, 0x06, 0xcf, 0x43, 0xf6, 0x6b, 0xc8, 0x85, 0xc2, 0x56, 0x11, 0xe7, 0xab, 0x41, 0x30, 0xc9, 0x18, 0x6b, 0x7a, 0x3f, 0x54, 0x80, 0x64, 0xc4, 0xb7, 0x8b, 0xf8, 0xe8, 0xb2, 0x8e, 0x8b, 0x69, 0xce, 0x09, 0xcf, 0xfa, 0x5a, 0x32, 0xe9, 0x27, 0x89, 0x70, 0xd3, 0x59, 0xc4, 0xea, 0x9b, 0x33, 0xe1, 0x56, 0x23, 0x55, 0x99, 0xf0, 0xbd, 0xa4, 0xfc, 0xc9, 0x94, 0x3e, 0xe4, 0x45, 0xfa, 0xda, 0x12, 0x42, 0x7a, 0x87, 0xb4, 0xed, 0xb3, 0x67, 0x06, 0x22, 0x37, 0xeb, 0xbb, 0xf8, 0xae, 0x3a, 0x93, 0x1a, 0x21, 0xcd, 0x9f, 0xd0, 0x4f, 0xea, 0x57, 0xe9, 0x6f, 0x88, 0xd3, 0x1c, 0x5f, 0x45, 0xda, 0x47, 0x7f, 0x97, 0x7f, 0x3f, 0xcc, 0xc5, 0x6e, 0xc5, 0x41, 0xfd, 0xa3, 0xaa, 0x0f, 0xf5, 0x33, 0xc5, 0xf5, 0xfa, 0x85, 0xd0, 0xcf, 0xf5, 0x4f, 0xd0, 0xfd, 0x09, 0xba, 0xcf, 0x90, 0x76, 0x59, 0xf5, 0x87, 0xfa, 0xee, 0x84, 0x37, 0x47, 0xfe, 0xde, 0x0f, 0x93, 0xf5, 0x5f, 0x61, 0x8c, 0x37, 0x30, 0xc6, 0xbe, 0xbf, 0xea, 0x87, 0x29, 0xfa, 0x21, 0xae, 0xab, 0xc0, 0x21, 0x73, 0x9b, 0x36, 0x62, 0x6e, 0x47, 0x72, 0x7c, 0x46, 0x78, 0xee, 0x0e, 0x0a, 0x6c, 0x76, 0x28, 0x45, 0x1a, 0xd9, 0x38, 0xcb, 0x06, 0x3e, 0x18, 0xc6, 0x78, 0x47, 0xc7, 0x53, 0x41, 0x54, 0x56, 0xf6, 0x8c, 0x16, 0x5b, 0xa9, 0xf8, 0xb0, 0xc6, 0xa2, 0x6f, 0xe7, 0x5b, 0x14, 0x6f, 0x26, 0xfc, 0x26, 0x2b, 0x9f, 0x21, 0x1b, 0x2c, 0xbf, 0xac, 0x6c, 0xd0, 0x39, 0x5e, 0x36, 0xc8, 0x3b, 0x10, 0x2c, 0x1d, 0x4c, 0x4b, 0x06, 0x89, 0x76, 0x2c, 0x95, 0xb8, 0x94, 0xb7, 0xc4, 0x5d, 0x8d, 0x58, 0x0e, 0x20, 0x1e, 0x55, 0x4a, 0x4c, 0x7e, 0xda, 0x65, 0x1f, 0x40, 0xda, 0xc6, 0x6a, 0x93, 0x70, 0x5d, 0x0b, 0xf6, 0x40, 0x9d, 0xb4, 0xef, 0x9e, 0xc8, 0x53, 0xa3, 0x2b, 0x98, 0xbb, 0x2a, 0x55, 0x56, 0x80, 0x93, 0x64, 0x14, 0x59, 0x6d, 0x8d, 0x5c, 0x69, 0x5d, 0xee, 0xde, 0x77, 0x42, 0x47, 0xbc, 0xb6, 0x57, 0xb6, 0x92, 0xe5, 0x0c, 0xe9, 0x7b, 0x31, 0x80, 0x5d, 0xc5, 0xfd, 0x64, 0xbd, 0x4f, 0x07, 0x84, 0x36, 0xe1, 0xfd, 0x73, 0xdc, 0x4b, 0x36, 0xd1, 0x4b, 0xbe, 0x69, 0xd6, 0xbb, 0xe9, 0x8a, 0x36, 0x65, 0x92, 0x3a, 0xd9, 0x43, 0x5a, 0x3a, 0xe2, 0xfc, 0xcd, 0x03, 0xca, 0xa4, 0x1e, 0x9d, 0x77, 0x7f, 0x9f, 0x34, 0xf6, 0xa1, 0x5c, 0x0a, 0x88, 0xdd, 0x60, 0x65, 0x12, 0xbf, 0x9f, 0x9d, 0x1b, 0x24, 0x0a, 0xd7, 0x66, 0x45, 0x3e, 0xa7, 0x26, 0x34, 0x87, 0x73, 0x20, 0x4e, 0xe6, 0x7f, 0x8c, 0xcf, 0x45, 0x9d, 0x3c, 0x31, 0x3f, 0xcc, 0x4b, 0x9e, 0x98, 0x17, 0xc2, 0xd4, 0x51, 0x6a, 0x4f, 0xd3, 0xc6, 0xbc, 0x42, 0x7e, 0x58, 0x33, 0x3a, 0xf6, 0x96, 0xb8, 0xad, 0xb8, 0x3c, 0xa3, 0x49, 0xc7, 0xb4, 0xa6, 0x97, 0xf7, 0xd2, 0xa6, 0xc6, 0x6c, 0xaa, 0xd3, 0xeb, 0x45, 0x3a, 0xdb, 0xda, 0x37, 0xab, 0xce, 0xd2, 0x03, 0x8a, 0x8d, 0xa4, 0x51, 0x17, 0xfb, 0x14, 0x8b, 0xd0, 0xa6, 0x23, 0x68, 0x93, 0x74, 0x3f, 0x58, 0x34, 0xe1, 0xac, 0x53, 0x89, 0x71, 0xd6, 0xa9, 0x83, 0x64, 0x4b, 0xaa, 0xcd, 0xd3, 0xa0, 0x46, 0x70, 0xe5, 0xdf, 0x41, 0xb7, 0xc6, 0x5d, 0xb9, 0x3e, 0xb2, 0x47, 0x3f, 0x9c, 0x74, 0x21, 0xe6, 0x7b, 0x1c, 0x57, 0xef, 0xed, 0x01, 0xe2, 0x3b, 0x43, 0xb0, 0x83, 0xb4, 0x44, 0x0f, 0x6e, 0xe4, 0x7b, 0x28, 0x3b, 0xd0, 0x6f, 0xd7, 0xf8, 0xd5, 0x5a, 0x45, 0x1a, 0x84, 0x74, 0xc9, 0x76, 0x0c, 0xc6, 0xef, 0x0a, 0x3f, 0x01, 0xa1, 0x58, 0x01, 0xed, 0x59, 0x7d, 0xfc, 0xf3, 0xc4, 0xac, 0xec, 0x6e, 0x16, 0xe9, 0x5a, 0xfa, 0x57, 0x40, 0x88, 0x4f, 0x1d, 0xb5, 0x90, 0xbe, 0xe2, 0x95, 0xc3, 0x0b, 0x2f, 0xe8, 0x1d, 0x91, 0x87, 0x02, 0xd0, 0xeb, 0x3d, 0xb2, 0x11, 0xd7, 0x16, 0xd6, 0x49, 0x63, 0x2e, 0xf2, 0x5f, 0x02, 0x66, 0xc2, 0x06, 0x77, 0x38, 0x23, 0x5b, 0x39, 0xe6, 0x7d, 0x91, 0x87, 0xe8, 0xbc, 0x61, 0x49, 0x8a, 0x56, 0x20, 0x39, 0x54, 0xfd, 0x31, 0x3c, 0x5e, 0xfb, 0x31, 0x3c, 0x8b, 0xf9, 0xee, 0xa2, 0x1d, 0x9b, 0x6f, 0x67, 0xe1, 0x66, 0x22, 0x49, 0x13, 0xc6, 0x7d, 0x98, 0xe0, 0x36, 0x93, 0xef, 0x4a, 0xa4, 0x3b, 0x9c, 0x73, 0xeb, 0xeb, 0x0d, 0x86, 0x07, 0x11, 0x27, 0xbd, 0x45, 0xa3, 0xf2, 0x6b, 0x61, 0x43, 0x9f, 0xe3, 0x88, 0xc3, 0x2f, 0xe8, 0xa9, 0x05, 0xa7, 0x60, 0x89, 0x36, 0x23, 0xbb, 0x93, 0xe1, 0x11, 0xe7, 0xbd, 0x58, 0xbe, 0x77, 0x73, 0x67, 0x0b, 0xed, 0x62, 0x3c, 0x31, 0xab, 0x1b, 0x10, 0x1f, 0xf0, 0xdd, 0xce, 0x2e, 0xfc, 0x2d, 0x05, 0x37, 0xfe, 0xce, 0x85, 0x22, 0xfc, 0x2d, 0x07, 0x79, 0x16, 0x71, 0x27, 0x2a, 0xfe, 0x06, 0xc1, 0x8b, 0xbf, 0x48, 0x77, 0xd1, 0x4e, 0x05, 0x3e, 0x4e, 0xbe, 0xfb, 0x9c, 0x73, 0x5a, 0x7f, 0x96, 0xf9, 0x8c, 0xf3, 0x3f, 0x21, 0x2a, 0xc8, 0xb9, 0x63, 0x7d, 0x5c, 0xec, 0x07, 0x58, 0xb2, 0x32, 0x52, 0xd5, 0x07, 0x0e, 0xde, 0x13, 0xce, 0x0b, 0x0f, 0xc6, 0x68, 0x0f, 0xd4, 0x49, 0xa3, 0xc2, 0x97, 0x32, 0xea, 0x69, 0x9b, 0x8d, 0xf3, 0x01, 0x79, 0x64, 0x87, 0xbc, 0x30, 0xbb, 0x6f, 0x91, 0x53, 0x4b, 0x6b, 0x8f, 0x29, 0xdd, 0xff, 0xfd, 0x43, 0xe2, 0xcc, 0x04, 0xcf, 0xd6, 0xc9, 0x01, 0x6b, 0x60, 0x52, 0xfa, 0x6c, 0x27, 0x9d, 0x84, 0x1a, 0x3b, 0x2a, 0xf6, 0xd1, 0x61, 0x34, 0xbd, 0x2f, 0x8f, 0x34, 0xd6, 0x3c, 0xf9, 0x26, 0x65, 0x39, 0x62, 0x4e, 0xa7, 0x4a, 0xe3, 0x8b, 0x4e, 0x57, 0x59, 0xe5, 0x29, 0xd1, 0x94, 0x56, 0x48, 0xe7, 0xc9, 0xaa, 0x7f, 0x5f, 0x8e, 0x6b, 0xe2, 0xae, 0x54, 0xe7, 0x89, 0xa6, 0xe1, 0xf0, 0xa6, 0xd8, 0x51, 0xd2, 0xea, 0xfe, 0xf8, 0x79, 0xb1, 0x13, 0x8f, 0x33, 0xd8, 0x3b, 0x6e, 0xf7, 0x82, 0xf4, 0x1c, 0xaf, 0x24, 0x39, 0x72, 0xa0, 0x74, 0xd8, 0x91, 0xbb, 0x73, 0x9f, 0xbe, 0xcf, 0x10, 0x53, 0xd4, 0x1f, 0x1a, 0x60, 0x49, 0xb3, 0x97, 0xf8, 0x7a, 0x67, 0x25, 0xb8, 0x26, 0xca, 0x9e, 0x8e, 0x0f, 0x6b, 0x9e, 0x71, 0xb9, 0x7a, 0x69, 0x4f, 0xc4, 0x62, 0x1d, 0xaf, 0x0b, 0x90, 0xde, 0xa3, 0x67, 0xdd, 0xef, 0xaa, 0x89, 0xb5, 0x70, 0xd2, 0xbd, 0xe0, 0xfe, 0x74, 0x7c, 0xba, 0x9f, 0x93, 0xd2, 0xfc, 0xe3, 0xa1, 0xb8, 0x3d, 0xe7, 0xec, 0x0b, 0xc2, 0x9c, 0x0c, 0xca, 0xc7, 0x93, 0x35, 0x23, 0x2b, 0xad, 0xbc, 0x83, 0xdf, 0xe1, 0x41, 0x38, 0xdb, 0x52, 0x70, 0x0d, 0x8e, 0x5f, 0x47, 0x8e, 0x46, 0xc1, 0x4a, 0x70, 0x69, 0xf3, 0x1d, 0x3f, 0xa3, 0xbb, 0x97, 0xc1, 0x15, 0x2b, 0x73, 0xac, 0xcc, 0x9f, 0x0b, 0xee, 0x98, 0xef, 0x99, 0x0f, 0xa0, 0x30, 0xa6, 0xe6, 0xc8, 0x41, 0x2d, 0x59, 0xf7, 0xd8, 0x3d, 0x98, 0xbf, 0xb7, 0x39, 0x85, 0x39, 0x79, 0xe3, 0x56, 0x4f, 0x48, 0xbd, 0x32, 0xf6, 0xab, 0xac, 0x2e, 0x82, 0xd0, 0xd8, 0xfe, 0x33, 0xa7, 0x14, 0x4b, 0x0c, 0xcd, 0xc4, 0x16, 0xd2, 0xca, 0x44, 0xda, 0xb3, 0x7a, 0x3c, 0x57, 0x40, 0x5a, 0x87, 0x3b, 0xb7, 0xc3, 0xb3, 0x31, 0x1b, 0xf6, 0xf2, 0x54, 0x0d, 0xa4, 0x03, 0x88, 0x97, 0x3a, 0x90, 0x7b, 0xfd, 0x7f, 0xe8, 0x0e, 0xd4, 0xae, 0x02, 0x74, 0x1d, 0x89, 0xd7, 0xe0, 0xef, 0xd1, 0x78, 0x3d, 0xfe, 0xbe, 0x16, 0x03, 0x73, 0xb9, 0xe6, 0x43, 0xd7, 0xdb, 0x18, 0xbe, 0xab, 0xcb, 0x81, 0xae, 0xff, 0x40, 0x3f, 0xd2, 0x17, 0xf8, 0xe1, 0xee, 0x51, 0x13, 0xe9, 0x4a, 0xef, 0xc1, 0xb7, 0x17, 0xfd, 0x9c, 0x1a, 0xed, 0xe5, 0x59, 0xeb, 0xfb, 0xae, 0x78, 0x0c, 0x5d, 0x2f, 0xb2, 0xeb, 0xbf, 0xd1, 0x8e, 0x5e, 0xc2, 0xb2, 0x63, 0x30, 0xa6, 0xf2, 0xf7, 0x8f, 0x10, 0x77, 0x44, 0x71, 0x9d, 0xb9, 0x0d, 0x57, 0xa5, 0x7e, 0xb2, 0xbb, 0xaf, 0x6b, 0xa1, 0x05, 0xb8, 0x66, 0x99, 0xf4, 0xdb, 0x91, 0x4b, 0xdd, 0x5b, 0x75, 0x41, 0x9f, 0x8b, 0x63, 0x59, 0xe1, 0xb8, 0x8f, 0x47, 0x36, 0x8d, 0x8f, 0x79, 0x97, 0x29, 0x1d, 0x13, 0x7e, 0xc4, 0x31, 0xfe, 0xfb, 0xc4, 0x18, 0xda, 0x12, 0xf6, 0xff, 0x1f, 0x5a, 0x1d, 0xbf, 0x7f, 0xac, 0x59, 0xf9, 0x4d, 0x63, 0xf8, 0x98, 0x88, 0x89, 0xf8, 0x1d, 0xf3, 0x09, 0xad, 0xc2, 0x5c, 0xca, 0x39, 0x6c, 0x3b, 0x86, 0x8d, 0x4c, 0x2c, 0x47, 0x2b, 0xe0, 0xb0, 0x9f, 0x62, 0xd8, 0xe3, 0xd9, 0x74, 0xe9, 0x9a, 0x26, 0xa5, 0x9d, 0x83, 0xf1, 0xc4, 0x2a, 0xa4, 0xe6, 0xe3, 0x6e, 0x84, 0xa0, 0x3b, 0x61, 0xde, 0x41, 0xd8, 0xe2, 0x64, 0xd2, 0xb2, 0x73, 0x30, 0x06, 0x92, 0x0d, 0xeb, 0x77, 0xce, 0xd0, 0xf1, 0x18, 0xa5, 0x5d, 0x9c, 0xe2, 0x15, 0x60, 0xd3, 0xdb, 0x2e, 0xdd, 0xb1, 0x43, 0x7a, 0x70, 0x0e, 0xf9, 0x8b, 0xf1, 0x76, 0x30, 0x45, 0x34, 0x21, 0x8d, 0x38, 0xb1, 0x5f, 0x6f, 0xca, 0x93, 0x3b, 0x68, 0xc7, 0xbd, 0xe1, 0xf4, 0xb0, 0x09, 0x61, 0x23, 0x25, 0x71, 0xae, 0x12, 0x97, 0xa4, 0x17, 0x91, 0xd6, 0xa5, 0xe9, 0x47, 0x2c, 0x8b, 0xb0, 0x16, 0xd7, 0xe8, 0x6d, 0x9a, 0x9d, 0xe4, 0x0e, 0xc5, 0x89, 0x61, 0x47, 0x6e, 0x29, 0x74, 0x4f, 0x3c, 0xc9, 0xef, 0xb1, 0x9c, 0xaf, 0xe4, 0x96, 0x43, 0x25, 0x20, 0x3e, 0x53, 0x8d, 0x5d, 0x1a, 0x05, 0xc3, 0xbf, 0x27, 0xce, 0x85, 0xe0, 0x8a, 0xd7, 0xc1, 0x67, 0x4c, 0x9e, 0xc3, 0x31, 0xf1, 0x1e, 0x4b, 0x8f, 0x24, 0x2e, 0xb1, 0x20, 0x8c, 0x63, 0x04, 0xcb, 0x2c, 0x69, 0xf8, 0x50, 0xef, 0xd0, 0x7a, 0x8d, 0xb6, 0xc9, 0x48, 0x8d, 0x18, 0xf5, 0x13, 0x2d, 0xd4, 0x96, 0x18, 0x21, 0x56, 0xcc, 0xe9, 0x04, 0xd2, 0x04, 0xd6, 0x71, 0x14, 0x01, 0xc0, 0x47, 0xc5, 0xab, 0xf4, 0x53, 0x7a, 0x9b, 0x62, 0xef, 0xa9, 0xf0, 0x4c, 0x23, 0x9e, 0x42, 0xef, 0xe8, 0x83, 0xb5, 0xdf, 0x63, 0xde, 0xaf, 0x95, 0x25, 0x55, 0x16, 0x6f, 0x58, 0xb3, 0x50, 0x29, 0x9c, 0x83, 0x35, 0x4b, 0x15, 0x20, 0x27, 0xbc, 0x20, 0xde, 0xc1, 0xb5, 0xe9, 0xf7, 0x82, 0xe2, 0x10, 0xb0, 0x10, 0x7a, 0xe3, 0x88, 0x7b, 0xad, 0xac, 0x8d, 0xfe, 0x2e, 0xef, 0x20, 0x0f, 0x27, 0xbf, 0xc6, 0x61, 0x49, 0x39, 0xa8, 0x59, 0xe5, 0xa6, 0xcc, 0x0e, 0x4f, 0x3e, 0xe9, 0x94, 0xc7, 0x3e, 0x92, 0x11, 0x16, 0x3b, 0xb6, 0x23, 0x1e, 0x39, 0xae, 0x75, 0xf0, 0x6a, 0xfc, 0x8a, 0x11, 0xbf, 0x53, 0xb1, 0xf3, 0xbb, 0x8f, 0xe5, 0x57, 0x38, 0x42, 0xe2, 0x79, 0xc5, 0x8d, 0xfa, 0x39, 0x2c, 0x37, 0xaf, 0x38, 0xa4, 0x8f, 0x6a, 0x36, 0x74, 0x59, 0xd0, 0x75, 0x4e, 0x5e, 0xa5, 0xdf, 0x86, 0xb9, 0x68, 0x48, 0x1d, 0x9d, 0xe3, 0xba, 0x17, 0xaa, 0x40, 0xb3, 0x09, 0x6b, 0xd0, 0x46, 0xba, 0x5f, 0xb4, 0x46, 0x33, 0x15, 0xf8, 0xe1, 0x92, 0x51, 0xbd, 0x94, 0xd6, 0x67, 0xc4, 0x91, 0xde, 0xe8, 0xa0, 0xb6, 0x6d, 0xfc, 0xbd, 0xd3, 0x38, 0x4b, 0xcf, 0x0a, 0xdd, 0x69, 0x6f, 0x08, 0xfb, 0x71, 0xd4, 0x53, 0xeb, 0xcb, 0xc3, 0x71, 0x76, 0x2e, 0xfc, 0x33, 0x70, 0xc6, 0xed, 0x34, 0x1a, 0xe1, 0x15, 0xfd, 0x9c, 0x56, 0xca, 0x23, 0x66, 0x6a, 0x1a, 0x23, 0x23, 0x56, 0x9b, 0x92, 0xc6, 0x96, 0x08, 0xa5, 0x73, 0xe3, 0x7a, 0xd5, 0x42, 0xe9, 0xb1, 0x6e, 0xe7, 0xf8, 0x64, 0xc0, 0xa9, 0xb8, 0x9d, 0xdf, 0xaf, 0xc4, 0xc0, 0xf4, 0xd2, 0x91, 0x0d, 0xe9, 0xbc, 0x63, 0x4e, 0x1e, 0x4b, 0xb4, 0xd3, 0x5d, 0x44, 0xbb, 0x37, 0x71, 0x77, 0x68, 0x0b, 0x9f, 0x7c, 0x29, 0x57, 0xac, 0x6a, 0x31, 0x38, 0x39, 0xe4, 0x11, 0x86, 0xeb, 0x24, 0x9c, 0xaf, 0x8d, 0x38, 0x03, 0xce, 0xe1, 0x7a, 0x91, 0x8f, 0x54, 0xae, 0x93, 0x60, 0xd8, 0xe5, 0xe4, 0xba, 0x1d, 0xd6, 0xcf, 0x21, 0x7c, 0xce, 0xe2, 0xd8, 0x5c, 0x91, 0x98, 0xbc, 0xe3, 0xe7, 0xfa, 0xe8, 0xaa, 0x7c, 0xfa, 0x2e, 0x41, 0x98, 0xbe, 0xbb, 0xdd, 0x3b, 0xed, 0xd6, 0x21, 0x3a, 0x6d, 0x9c, 0x5c, 0x5d, 0x5c, 0x85, 0x6d, 0x38, 0xa2, 0x20, 0xf7, 0x1b, 0xcf, 0xa7, 0xdc, 0x9b, 0x06, 0x29, 0xff, 0xd1, 0xb9, 0x2c, 0x87, 0xb3, 0x23, 0x2c, 0x47, 0x15, 0xdb, 0xa1, 0x61, 0xa2, 0x42, 0x95, 0xa0, 0x7c, 0x7d, 0x1f, 0x1c, 0xdc, 0xb0, 0x9b, 0x34, 0xdb, 0x7e, 0xd8, 0x33, 0x79, 0xd7, 0x30, 0xbe, 0x47, 0xca, 0x58, 0xa3, 0xda, 0x29, 0xc1, 0x53, 0xd0, 0x0f, 0x49, 0xe8, 0x80, 0xdb, 0x71, 0xd5, 0x54, 0x91, 0xd2, 0xc3, 0xda, 0x7c, 0xab, 0x03, 0xde, 0x02, 0xd5, 0x70, 0xbd, 0x0d, 0x9e, 0xd9, 0x41, 0x90, 0x49, 0xa7, 0xb1, 0xfa, 0x7d, 0xd8, 0x24, 0x07, 0x7f, 0xf1, 0x42, 0xdb, 0x2d, 0xf9, 0x57, 0x3b, 0x9f, 0x97, 0x6d, 0x61, 0x53, 0xec, 0x0c, 0xc5, 0x9a, 0xdd, 0x01, 0x43, 0xe0, 0x32, 0x5c, 0xc3, 0xe0, 0x36, 0x5c, 0x1b, 0xa0, 0xc8, 0x70, 0xf5, 0x88, 0x7c, 0xd1, 0xd5, 0x0f, 0x0e, 0xc3, 0x65, 0x01, 0x1b, 0xe6, 0x6b, 0xa1, 0x7c, 0x9b, 0xee, 0xa3, 0x5c, 0xdb, 0xdd, 0xff, 0xf4, 0xa1, 0x7e, 0x36, 0x66, 0x23, 0x28, 0x98, 0x02, 0x08, 0x6f, 0x0c, 0x91, 0x11, 0x7e, 0x9a, 0x96, 0x29, 0xed, 0x68, 0x34, 0x95, 0x1c, 0xdb, 0x9b, 0xf2, 0x0e, 0x60, 0x98, 0x38, 0xd1, 0x40, 0xd6, 0x13, 0x6c, 0x6a, 0xa3, 0x52, 0x93, 0x3e, 0xdb, 0x44, 0x7a, 0x44, 0xb2, 0x2b, 0xba, 0x85, 0x60, 0xe6, 0x0d, 0x52, 0x1e, 0xd7, 0x35, 0x61, 0x29, 0xd9, 0x1e, 0xd8, 0xca, 0x7a, 0x15, 0xfb, 0xa9, 0x0f, 0x2e, 0xee, 0x17, 0x7d, 0x80, 0xd0, 0x3a, 0x1b, 0xda, 0xa4, 0x60, 0xff, 0x52, 0x8c, 0xb1, 0xb2, 0x30, 0xf6, 0x28, 0x51, 0x36, 0x3c, 0xd2, 0x5e, 0x12, 0xf4, 0x72, 0xfd, 0x7b, 0x95, 0x20, 0xd7, 0x62, 0x3f, 0x39, 0x63, 0xbc, 0xce, 0x66, 0xd7, 0x72, 0x1c, 0x39, 0x53, 0x2f, 0xb7, 0xce, 0x22, 0xd7, 0x82, 0xbd, 0x8a, 0xeb, 0x3b, 0xeb, 0xdd, 0xf1, 0xde, 0xb5, 0xec, 0x31, 0x09, 0x5d, 0x04, 0x9e, 0xd1, 0xf3, 0x49, 0xbf, 0x2a, 0x39, 0x86, 0xf3, 0x73, 0x6e, 0x7e, 0xa5, 0x4e, 0xf3, 0xd4, 0x8f, 0x58, 0xa3, 0x8a, 0xe8, 0xb0, 0x77, 0xf7, 0x33, 0x35, 0xf6, 0x1a, 0x61, 0x9a, 0x80, 0x39, 0xc7, 0xe7, 0xd3, 0x8c, 0x0d, 0x08, 0xf9, 0x12, 0x9c, 0x64, 0x66, 0x9c, 0x84, 0x2b, 0xe9, 0x04, 0x9c, 0x94, 0x8f, 0xb5, 0xc4, 0xf1, 0x28, 0xf0, 0x12, 0x9f, 0xc3, 0x75, 0xd0, 0x29, 0x37, 0x71, 0xf7, 0xec, 0xad, 0x1b, 0x03, 0x92, 0xa0, 0x02, 0x2e, 0xc9, 0x4f, 0xac, 0xf5, 0x74, 0x16, 0xd4, 0x36, 0x2e, 0xc7, 0xa0, 0x91, 0xa3, 0x2d, 0x27, 0x47, 0x8b, 0x7a, 0x8d, 0xc8, 0x0f, 0xa9, 0xdb, 0x83, 0x74, 0x06, 0x45, 0xad, 0xf2, 0xe6, 0x91, 0x54, 0x8a, 0x28, 0x35, 0xde, 0x63, 0xe3, 0x53, 0xb9, 0x70, 0x6d, 0xf6, 0x54, 0x2e, 0xcc, 0x04, 0x15, 0x29, 0x5c, 0x3e, 0x95, 0x0b, 0x48, 0x96, 0x07, 0xaa, 0xc5, 0xa9, 0x5c, 0xf0, 0x08, 0xb9, 0x67, 0x5a, 0x6a, 0x8a, 0x74, 0x8a, 0x25, 0x9c, 0x1f, 0x2b, 0x54, 0x24, 0xa6, 0xd8, 0xa9, 0x45, 0xb6, 0xf0, 0xba, 0x18, 0x49, 0x2a, 0xdd, 0x0c, 0x47, 0x0a, 0x25, 0x5a, 0xcd, 0x8e, 0xbe, 0x56, 0xe4, 0x77, 0xcf, 0x9d, 0x0e, 0x22, 0x2e, 0x74, 0x1d, 0xde, 0xc8, 0xda, 0xa0, 0x3f, 0x12, 0x54, 0x2a, 0x9d, 0x53, 0xc1, 0xda, 0x97, 0x7e, 0xa9, 0xbe, 0xb8, 0x91, 0x21, 0xff, 0x3b, 0xfa, 0x3d, 0xbd, 0x28, 0xa7, 0x2f, 0x84, 0x4f, 0xf2, 0xcf, 0xf4, 0x85, 0xfb, 0xcb, 0xf6, 0x05, 0xc2, 0x0e, 0x31, 0xd7, 0xfc, 0xf9, 0x3e, 0x93, 0xdf, 0x24, 0x87, 0xd4, 0xea, 0x98, 0x2d, 0x94, 0x8f, 0x9c, 0x2f, 0xc0, 0x1b, 0xcd, 0x43, 0xd4, 0xbe, 0xbf, 0xfb, 0x8d, 0xa6, 0xe4, 0x8f, 0x44, 0xef, 0xd7, 0x2c, 0x4a, 0xf5, 0xdf, 0xfd, 0xe6, 0xd9, 0xfb, 0xbb, 0x2d, 0x4e, 0x77, 0xec, 0xa3, 0xab, 0x9e, 0x83, 0x8a, 0x67, 0x21, 0x7a, 0x3f, 0xbe, 0x65, 0x7a, 0x2b, 0x93, 0x88, 0x5e, 0xa9, 0xfe, 0xc3, 0x76, 0xa0, 0xbb, 0xe3, 0xb5, 0x82, 0xfc, 0xe7, 0xa3, 0xf7, 0x63, 0x5c, 0x80, 0x07, 0xe4, 0x60, 0x34, 0x95, 0x8f, 0x29, 0x30, 0xc7, 0x41, 0x92, 0x3c, 0x9c, 0xfe, 0xa5, 0x66, 0xa1, 0xfc, 0x8c, 0x9c, 0xce, 0x86, 0xef, 0xee, 0x74, 0xf8, 0x27, 0xd5, 0xdc, 0x83, 0x39, 0xcd, 0xa1, 0x9c, 0x42, 0x01, 0xf8, 0xfa, 0x5a, 0x3b, 0xcb, 0x4c, 0x4e, 0xb3, 0x8c, 0x60, 0x53, 0x0f, 0xb8, 0x26, 0x31, 0x9f, 0x6e, 0x25, 0xd9, 0x06, 0xcb, 0x46, 0x52, 0x5e, 0x6f, 0x73, 0xda, 0x0f, 0x79, 0x77, 0x3f, 0xc4, 0x90, 0xdb, 0x75, 0x4e, 0xba, 0xe6, 0x39, 0xd2, 0x5a, 0xac, 0xc2, 0x5a, 0x68, 0x56, 0x27, 0x96, 0x11, 0x9d, 0x84, 0xa5, 0xd8, 0x29, 0xc4, 0xf9, 0x4d, 0x9b, 0x37, 0x76, 0x2a, 0x54, 0xf6, 0x2c, 0x94, 0x5a, 0xa2, 0xc1, 0x4d, 0x0b, 0x91, 0x4e, 0x26, 0x5a, 0x9c, 0x4f, 0xac, 0xce, 0x57, 0xfc, 0x26, 0x5f, 0x5e, 0x4e, 0xbf, 0x00, 0x3c, 0x1b, 0xde, 0xdc, 0x39, 0xb7, 0x0f, 0xb4, 0x22, 0xa2, 0xcb, 0x49, 0xce, 0x76, 0x78, 0x48, 0xb1, 0x6e, 0x1b, 0xe2, 0xb9, 0x7c, 0x30, 0x9c, 0x5a, 0x05, 0xb0, 0xed, 0xf5, 0x94, 0x07, 0xa9, 0xf4, 0xdd, 0x43, 0xb1, 0x63, 0xb6, 0xcd, 0x30, 0x19, 0xe9, 0x7d, 0x17, 0xd1, 0xfc, 0x8a, 0x4f, 0xf0, 0xad, 0x3b, 0x06, 0xba, 0x9a, 0x56, 0x25, 0x90, 0xa6, 0x74, 0xc4, 0x0a, 0x90, 0x1a, 0x85, 0xb4, 0x9e, 0xe3, 0xe6, 0x19, 0x06, 0x7f, 0xb9, 0x98, 0x72, 0xee, 0x0d, 0xd4, 0x99, 0x77, 0x3d, 0x01, 0xa5, 0x31, 0x0b, 0xe6, 0xe5, 0xa7, 0x72, 0x14, 0x2b, 0x97, 0x71, 0x44, 0x81, 0xba, 0x81, 0x43, 0x03, 0x5b, 0x06, 0xf6, 0xa6, 0x28, 0xd7, 0x59, 0x55, 0xe0, 0x8a, 0x2b, 0x98, 0x9b, 0x2b, 0x5e, 0x64, 0x94, 0xe0, 0x10, 0x34, 0x86, 0xb0, 0x37, 0x13, 0x1d, 0xc0, 0x18, 0x4e, 0x21, 0xad, 0xa8, 0xe9, 0x17, 0x6d, 0xf2, 0x99, 0xd4, 0x90, 0x37, 0xcf, 0x6f, 0x6e, 0xbe, 0xa7, 0x17, 0x04, 0xdf, 0x39, 0xf6, 0x32, 0xad, 0xcb, 0x31, 0x2b, 0x8e, 0x58, 0x97, 0xe6, 0x96, 0x43, 0xd1, 0x41, 0x84, 0xd1, 0xba, 0xe7, 0xd6, 0x2d, 0xb3, 0x26, 0xed, 0xe8, 0x7f, 0x34, 0x54, 0x46, 0x52, 0x1e, 0x71, 0x9f, 0x36, 0xe5, 0x12, 0xf9, 0x4e, 0xc0, 0xae, 0x56, 0xe1, 0x4c, 0xa8, 0x08, 0xe7, 0xc7, 0xe7, 0x65, 0x4f, 0x03, 0x55, 0x9d, 0xb1, 0xe9, 0x9a, 0xd4, 0x3c, 0xec, 0x24, 0x89, 0x5b, 0x45, 0xcc, 0x12, 0x1d, 0xd6, 0x48, 0xc6, 0x16, 0x88, 0x5b, 0x9e, 0xd9, 0x1f, 0x3b, 0xe1, 0x70, 0x42, 0x00, 0x67, 0xc4, 0x09, 0x40, 0x8e, 0x44, 0xad, 0x97, 0xed, 0xea, 0x1d, 0xe2, 0x64, 0xa2, 0x57, 0xf2, 0x44, 0x7a, 0x00, 0x67, 0x68, 0x8d, 0x2f, 0xec, 0x2c, 0x42, 0xca, 0x3f, 0x3f, 0x1e, 0xc5, 0x54, 0x7f, 0x1d, 0x6f, 0xe4, 0xb4, 0x75, 0x6c, 0x31, 0x43, 0xd1, 0xe6, 0x13, 0x1f, 0x0f, 0xba, 0x71, 0xb6, 0xa5, 0xd1, 0x03, 0xd8, 0xc2, 0xc2, 0xf4, 0xd7, 0x6e, 0x88, 0xef, 0x55, 0xa6, 0x39, 0xbf, 0x16, 0x27, 0xf9, 0xde, 0x5f, 0x63, 0xc9, 0x03, 0xda, 0x53, 0x9c, 0xee, 0x24, 0xd9, 0xda, 0xd1, 0x7e, 0x64, 0x9c, 0xba, 0x2a, 0x12, 0xb8, 0x13, 0xf9, 0x02, 0x93, 0xda, 0x05, 0xca, 0x82, 0x93, 0x50, 0x9e, 0xc3, 0x37, 0xd1, 0xc9, 0x34, 0x59, 0x73, 0xa8, 0x1d, 0x90, 0x87, 0xb0, 0xdf, 0x10, 0xb7, 0xf1, 0xcd, 0xf3, 0xa7, 0xb1, 0xdd, 0xd9, 0x38, 0x2f, 0xf2, 0x9d, 0xe2, 0x16, 0x03, 0x07, 0x97, 0xab, 0x55, 0x72, 0x08, 0xe1, 0x10, 0x23, 0xad, 0x77, 0xaf, 0xf4, 0xf0, 0x70, 0xdd, 0x10, 0xae, 0xc6, 0x5e, 0xa8, 0xd0, 0xc7, 0x62, 0x52, 0xf3, 0x10, 0x49, 0x0a, 0xdf, 0x7d, 0x77, 0x2d, 0x14, 0x5a, 0x16, 0xd0, 0xc9, 0xb2, 0x5d, 0x42, 0xdf, 0x87, 0x47, 0xd2, 0x5c, 0xec, 0x29, 0x8b, 0x38, 0x61, 0x2f, 0xcf, 0xb5, 0xc1, 0xc8, 0xba, 0xf8, 0xdb, 0x88, 0xc3, 0xe9, 0x94, 0x99, 0x64, 0xdc, 0xa8, 0x1e, 0x8c, 0x1d, 0x24, 0x3e, 0x41, 0xf4, 0x66, 0xb8, 0xb4, 0xde, 0x14, 0x1b, 0xa1, 0xb2, 0x8b, 0x2a, 0xd3, 0x76, 0x62, 0xbc, 0x26, 0x4f, 0x84, 0xf4, 0xc6, 0xe9, 0x14, 0x1a, 0x52, 0xa9, 0x56, 0x9c, 0xa3, 0x4d, 0x5a, 0xc9, 0x2b, 0xfb, 0xd5, 0xc4, 0xb0, 0x53, 0xf3, 0x84, 0xab, 0x59, 0xaf, 0xd6, 0xb2, 0xaa, 0x30, 0xe1, 0x38, 0xb8, 0x3e, 0x39, 0x3a, 0x82, 0x2b, 0x6f, 0xf4, 0x3e, 0xb9, 0xc6, 0x80, 0xd8, 0xed, 0x74, 0x42, 0x2b, 0x5b, 0x1f, 0x2c, 0xcb, 0x2e, 0xec, 0xaf, 0x30, 0xef, 0x57, 0x86, 0xd8, 0x28, 0x22, 0xd1, 0xd9, 0x61, 0x1d, 0x5b, 0x57, 0x3e, 0x9e, 0xcb, 0xf7, 0x74, 0xc0, 0x41, 0x4d, 0x46, 0xe8, 0xe3, 0x6a, 0xbf, 0x2b, 0x15, 0x73, 0xc9, 0xd5, 0xb8, 0x6a, 0xda, 0x91, 0xa7, 0x4f, 0xe7, 0x6b, 0x5f, 0x65, 0xf5, 0x34, 0x87, 0xb7, 0xc4, 0x8e, 0xfd, 0xdd, 0x6f, 0xf8, 0xcc, 0xb6, 0x43, 0x68, 0x33, 0x1d, 0x1a, 0xa0, 0x99, 0xc4, 0xad, 0xbf, 0x5d, 0xce, 0xef, 0xf4, 0x22, 0x87, 0x65, 0x8a, 0xbb, 0xc4, 0x1d, 0xf5, 0xe9, 0x59, 0x30, 0x52, 0xca, 0xbb, 0x60, 0x06, 0x9f, 0x3d, 0xf2, 0x30, 0xd2, 0x7a, 0xe5, 0xd9, 0x99, 0xd3, 0xed, 0x4b, 0xcf, 0x26, 0xba, 0xf9, 0x7e, 0x73, 0x2a, 0x60, 0x4a, 0xa7, 0xaa, 0x43, 0x38, 0x3e, 0x98, 0xaa, 0x49, 0xf1, 0x5e, 0xb9, 0x95, 0x4e, 0xca, 0x24, 0x4c, 0x42, 0x47, 0x8a, 0xf1, 0xd8, 0x69, 0xd2, 0x0b, 0xaf, 0xfd, 0x98, 0x35, 0x63, 0xa5, 0xb4, 0x14, 0xeb, 0xf9, 0x47, 0xf8, 0x5c, 0x64, 0x30, 0x3e, 0x2f, 0x87, 0x66, 0x37, 0x07, 0x02, 0xe0, 0xad, 0xef, 0x33, 0x8f, 0xd2, 0xfe, 0x50, 0x1a, 0x5b, 0x7a, 0x26, 0x48, 0xb0, 0x4a, 0xcd, 0x44, 0xad, 0xf2, 0x59, 0x1c, 0x87, 0xd0, 0x98, 0x24, 0x1c, 0x2e, 0x5b, 0x17, 0xa2, 0xfb, 0xab, 0x92, 0x68, 0x51, 0x60, 0x9a, 0xd8, 0xd7, 0xbb, 0xe5, 0x5d, 0xa6, 0xb1, 0x4d, 0x88, 0xc3, 0x8d, 0xb3, 0x7f, 0x9a, 0x45, 0xe0, 0x57, 0x1c, 0x3f, 0x92, 0xc7, 0x14, 0x73, 0x24, 0xcb, 0xea, 0x4c, 0x7c, 0x2e, 0x49, 0xd7, 0xd4, 0xb4, 0x26, 0x96, 0x0f, 0x4a, 0x1e, 0x20, 0x1d, 0x2b, 0x96, 0x86, 0x18, 0x79, 0xec, 0x49, 0x09, 0xb9, 0x10, 0x72, 0xd8, 0xc6, 0x18, 0xb8, 0x01, 0xe7, 0x72, 0x89, 0x45, 0x8d, 0xb0, 0xcd, 0xc5, 0xb2, 0x7e, 0x40, 0xbc, 0x34, 0x03, 0x67, 0x34, 0xe9, 0xbd, 0xbe, 0x8c, 0xb8, 0xa8, 0x50, 0xcc, 0xe4, 0x9b, 0x5e, 0xd6, 0x4f, 0x85, 0xea, 0x9a, 0xef, 0x69, 0x3b, 0x1e, 0x1d, 0xfa, 0xd5, 0xd0, 0x32, 0x8b, 0xdf, 0xac, 0x9d, 0x0a, 0x0f, 0xc5, 0x2c, 0xbb, 0xef, 0x89, 0x5b, 0x64, 0x8b, 0x81, 0x1b, 0x46, 0x2f, 0xab, 0x6b, 0x37, 0xd5, 0x98, 0xe7, 0x5a, 0xe6, 0xcc, 0x66, 0xc8, 0xd8, 0xdd, 0x72, 0x2e, 0xb8, 0xa0, 0x1f, 0x8c, 0x6c, 0x31, 0x76, 0x00, 0x31, 0x14, 0xd7, 0x65, 0xcb, 0x84, 0x6f, 0x5b, 0xfa, 0x9b, 0x56, 0x9e, 0xc8, 0x16, 0x92, 0x7e, 0xd0, 0xea, 0x84, 0xa3, 0xb2, 0xa8, 0x33, 0x2f, 0xc7, 0x6a, 0xcd, 0x70, 0xd3, 0x46, 0xf5, 0x0e, 0x4f, 0x5a, 0x77, 0x52, 0x94, 0x38, 0x83, 0xf5, 0xb7, 0xa6, 0xc6, 0x6d, 0xa4, 0x35, 0xc7, 0x12, 0xb2, 0x70, 0x56, 0x9b, 0x4d, 0x2f, 0x49, 0xf7, 0x6d, 0x36, 0x3e, 0x72, 0xf2, 0x5e, 0x3a, 0x29, 0x9d, 0xe5, 0xe2, 0x73, 0x65, 0x81, 0xd9, 0xf8, 0x97, 0xd7, 0x3f, 0xbc, 0xa4, 0xe5, 0xe9, 0x7d, 0xba, 0x9a, 0xc4, 0xa9, 0x83, 0x4f, 0x63, 0x6b, 0x00, 0xeb, 0xb9, 0x2f, 0xbd, 0x2e, 0x94, 0x56, 0xa8, 0x21, 0x0f, 0x9d, 0x05, 0x02, 0x53, 0xb9, 0x71, 0x2a, 0xb0, 0x74, 0xdc, 0xa9, 0xc0, 0x08, 0xcc, 0x83, 0x10, 0x24, 0x4d, 0x36, 0xd6, 0xf7, 0x32, 0x63, 0x3c, 0x29, 0x03, 0x09, 0xd2, 0x41, 0x2e, 0x4d, 0x6b, 0x77, 0xe8, 0x09, 0x3e, 0xe9, 0x0f, 0xf0, 0x76, 0xba, 0x44, 0x93, 0x45, 0x53, 0x70, 0x14, 0xec, 0xd1, 0xef, 0x62, 0x19, 0xd3, 0xeb, 0xb8, 0x1a, 0x38, 0xe9, 0x9c, 0x10, 0xeb, 0x97, 0xa5, 0x6b, 0xe5, 0x62, 0xb8, 0xcd, 0x35, 0xd2, 0xee, 0xf2, 0x20, 0x67, 0x46, 0x27, 0xdb, 0x33, 0xd0, 0xb7, 0x88, 0xfc, 0x1b, 0x2e, 0xe8, 0x9e, 0xc8, 0xd6, 0x8c, 0xaf, 0xd3, 0x28, 0x35, 0xeb, 0xa3, 0x5e, 0xe2, 0x93, 0xd6, 0x3b, 0xd9, 0xca, 0x72, 0xb6, 0x7f, 0x4a, 0x43, 0x81, 0x6a, 0x34, 0xc6, 0xed, 0x57, 0x1b, 0xb5, 0x19, 0xea, 0x95, 0xbc, 0x22, 0x15, 0x1b, 0xfa, 0x8c, 0x3f, 0xce, 0xe8, 0x85, 0x6d, 0xf6, 0x84, 0x9a, 0x36, 0xf2, 0x2e, 0xf9, 0x31, 0x8d, 0xce, 0x2c, 0x38, 0xe2, 0x6c, 0xff, 0x7c, 0xf4, 0xc7, 0x5a, 0x4e, 0x7f, 0x8f, 0x6d, 0x26, 0x9b, 0xce, 0x4b, 0x1c, 0x13, 0xcf, 0x0c, 0x8f, 0x3d, 0x6c, 0x9c, 0x2c, 0x9a, 0xef, 0x0d, 0x80, 0xdf, 0xd3, 0x0d, 0xa5, 0x7e, 0x9c, 0x83, 0xbe, 0x00, 0x94, 0xab, 0x35, 0xaf, 0xed, 0x7b, 0xed, 0x40, 0x78, 0xf3, 0x2a, 0x5a, 0x1b, 0x05, 0x2e, 0x18, 0xec, 0x2e, 0x52, 0x2c, 0x5b, 0x53, 0xbd, 0x82, 0xc3, 0xf9, 0x55, 0x38, 0xd5, 0xe9, 0x48, 0xe3, 0x06, 0x92, 0xfa, 0xf2, 0xfa, 0xea, 0xbe, 0xec, 0xfa, 0x0a, 0xf0, 0xb8, 0xed, 0x10, 0xaf, 0xcb, 0xce, 0x59, 0x2b, 0x88, 0x1e, 0x64, 0x2d, 0x3c, 0x73, 0xcc, 0xee, 0x5b, 0xd8, 0x43, 0x10, 0xeb, 0xd2, 0xfa, 0xe9, 0x54, 0x42, 0x3c, 0x8f, 0x68, 0x6a, 0x84, 0xf2, 0xed, 0x7c, 0x1a, 0xa0, 0x4b, 0xb1, 0xa8, 0x53, 0x3d, 0x62, 0x0d, 0x3e, 0xa8, 0x82, 0xa6, 0x91, 0x24, 0x6e, 0x07, 0x96, 0xb8, 0xca, 0xc1, 0xf1, 0xb6, 0x72, 0xac, 0x7a, 0xf2, 0xc5, 0x11, 0xeb, 0x10, 0x34, 0xec, 0xf4, 0x7f, 0xb0, 0x41, 0x94, 0xe4, 0x3c, 0x4e, 0xd6, 0x04, 0x34, 0xc7, 0x65, 0xe7, 0xd7, 0xbd, 0x74, 0x29, 0xa2, 0x3d, 0x4e, 0xeb, 0xe2, 0x34, 0xa4, 0x15, 0x21, 0x96, 0x9b, 0xde, 0x16, 0x1d, 0x7c, 0x6e, 0xb0, 0xf5, 0xf1, 0xcc, 0x29, 0x61, 0x5e, 0xb1, 0x6f, 0x60, 0x2a, 0x44, 0xcc, 0xf1, 0xbb, 0xa0, 0xf6, 0xc2, 0xd8, 0x1b, 0x5a, 0x01, 0xa6, 0x21, 0x6a, 0xdf, 0x2a, 0x4e, 0x15, 0xef, 0x4e, 0xc5, 0x1c, 0x87, 0xd7, 0x45, 0xef, 0x7d, 0xf6, 0xde, 0xd6, 0x77, 0xe5, 0xc9, 0xd9, 0x19, 0x4d, 0xf0, 0xbd, 0x64, 0x3f, 0xf5, 0x25, 0x31, 0xe2, 0x2f, 0xd9, 0x45, 0x36, 0x21, 0xef, 0x46, 0xbb, 0xc8, 0x8f, 0x67, 0xe5, 0x67, 0xe5, 0x65, 0x6a, 0x15, 0x9d, 0xf1, 0xfa, 0x6c, 0x6b, 0x2d, 0x31, 0xa7, 0x32, 0x1b, 0x1e, 0x56, 0xf9, 0x14, 0xd5, 0x58, 0xd7, 0x3c, 0xd0, 0xe6, 0xe1, 0xea, 0x60, 0xa1, 0xb1, 0x58, 0xf5, 0x01, 0x98, 0x90, 0xe8, 0xbc, 0xb2, 0x79, 0xdd, 0xee, 0xa1, 0x56, 0x47, 0xa2, 0xef, 0xda, 0x20, 0x6c, 0xf5, 0x9a, 0x43, 0xd5, 0x9a, 0xd4, 0xab, 0x2b, 0xe1, 0xdc, 0xb3, 0x05, 0xa1, 0xb2, 0x7a, 0x28, 0x35, 0x8f, 0xb3, 0xfe, 0xd5, 0x9d, 0x99, 0x9f, 0xb7, 0x7f, 0x96, 0xcd, 0x2e, 0xe4, 0xe7, 0x73, 0xce, 0x67, 0x8a, 0x19, 0x9c, 0x70, 0x1a, 0xba, 0xbe, 0x25, 0x13, 0xe2, 0x24, 0x0d, 0x49, 0xf7, 0x5b, 0x6c, 0xd5, 0xab, 0x0a, 0x67, 0xef, 0x38, 0xbd, 0x43, 0x3f, 0xe0, 0x5c, 0x8e, 0x78, 0x57, 0x18, 0xbb, 0xf4, 0xe5, 0x09, 0x13, 0x9d, 0xfa, 0x8e, 0xd9, 0x58, 0x0f, 0x74, 0x6a, 0xcc, 0x6b, 0xe0, 0x22, 0x3b, 0x6b, 0xf0, 0x2e, 0xcc, 0x19, 0xf1, 0x34, 0x0b, 0xef, 0xe1, 0xf3, 0xdd, 0x27, 0x90, 0x0f, 0x4e, 0xf1, 0xc9, 0xba, 0xf5, 0x34, 0x6f, 0xa5, 0x0d, 0x81, 0x62, 0x98, 0xcf, 0x74, 0xf9, 0x3f, 0x07, 0xa6, 0xd5, 0x5e, 0xd0, 0xbd, 0xdc, 0x53, 0x34, 0xfe, 0x0a, 0x32, 0x21, 0xcf, 0x07, 0xa6, 0xa5, 0x7d, 0x63, 0x36, 0xb9, 0xce, 0xdb, 0x01, 0x8f, 0x6a, 0x89, 0x4c, 0xe8, 0xfe, 0x6c, 0x68, 0x4e, 0x9a, 0xdf, 0xe6, 0xa6, 0x51, 0xea, 0xbc, 0xcb, 0xe1, 0x31, 0xad, 0x32, 0x13, 0xfa, 0xda, 0x65, 0xd3, 0x1c, 0xcd, 0x49, 0xe3, 0xe6, 0x72, 0xde, 0x7a, 0x96, 0x75, 0xf7, 0xd1, 0xf5, 0x18, 0xb7, 0xd8, 0xa1, 0x59, 0x43, 0xa1, 0x1f, 0xbc, 0xa4, 0xd9, 0x7b, 0x4c, 0x24, 0x31, 0x2e, 0xef, 0xd7, 0xf5, 0x84, 0x73, 0xe2, 0x89, 0x63, 0x3e, 0x23, 0x33, 0xd5, 0xb0, 0x00, 0xd6, 0x45, 0x52, 0x18, 0xf3, 0x91, 0x70, 0x08, 0xe7, 0xd3, 0xb6, 0x84, 0xbe, 0x63, 0x43, 0x4c, 0xe6, 0xb0, 0xa3, 0xa4, 0xe7, 0x9a, 0x33, 0xd7, 0x3b, 0x68, 0x7c, 0x3e, 0x74, 0x00, 0xe3, 0x3e, 0xa1, 0x38, 0xf8, 0x74, 0xee, 0x06, 0x3e, 0x29, 0xf8, 0x24, 0x51, 0x35, 0xea, 0x8e, 0x61, 0x07, 0xed, 0xc1, 0x27, 0x4d, 0x48, 0xa5, 0xda, 0xf8, 0xec, 0x5c, 0xa3, 0x37, 0x48, 0x52, 0xeb, 0x9c, 0x33, 0xf8, 0x36, 0xb9, 0x13, 0x6c, 0xbf, 0x38, 0x14, 0x3b, 0xc5, 0xe1, 0xb6, 0x96, 0x8d, 0x5c, 0x77, 0x77, 0x4e, 0x19, 0x96, 0x74, 0xc9, 0x17, 0x5f, 0xd7, 0x36, 0xcd, 0x6a, 0x24, 0x9c, 0x68, 0xae, 0x94, 0x17, 0xd1, 0xde, 0xc3, 0xe9, 0xb7, 0x13, 0x36, 0x83, 0xe2, 0x69, 0xc1, 0xfa, 0x57, 0x2a, 0x75, 0xf2, 0x6c, 0x78, 0x2e, 0x66, 0xc5, 0xdf, 0x87, 0xe3, 0x45, 0x54, 0x07, 0x3e, 0xbd, 0xcf, 0xb5, 0xc0, 0xb1, 0xef, 0x24, 0x7a, 0x8c, 0x24, 0xbc, 0x5a, 0x3f, 0x9d, 0xbc, 0xc2, 0x10, 0x92, 0xd9, 0x5b, 0x68, 0xe5, 0xd2, 0x56, 0xdc, 0xe5, 0x7f, 0x63, 0xa3, 0x32, 0xad, 0xa7, 0xc2, 0x33, 0xb9, 0x0f, 0xd6, 0x5e, 0xc3, 0x6d, 0x69, 0xa5, 0x75, 0x7d, 0x55, 0x8b, 0x5c, 0x47, 0x7a, 0x0a, 0x9f, 0x9b, 0x9f, 0x73, 0x62, 0x7e, 0x8e, 0xab, 0x90, 0x42, 0x2e, 0xc8, 0xda, 0x42, 0xe0, 0xb3, 0x6e, 0x38, 0xf3, 0x28, 0x25, 0x86, 0xdb, 0x70, 0x0c, 0xf5, 0xf9, 0x2b, 0xe1, 0xfc, 0xad, 0xa5, 0x3e, 0xfa, 0x75, 0x04, 0xa6, 0x2a, 0x75, 0x91, 0x07, 0x15, 0x50, 0x27, 0xf7, 0x16, 0xf1, 0x09, 0xa8, 0xc5, 0x04, 0x29, 0x6c, 0x13, 0xc2, 0x5d, 0xae, 0x8d, 0x6c, 0x22, 0xeb, 0x09, 0x3d, 0x16, 0xaa, 0x1b, 0xd7, 0x4c, 0x6e, 0xd9, 0xe8, 0x08, 0xea, 0x7a, 0x6c, 0xbf, 0x16, 0x94, 0xfd, 0x08, 0x61, 0x33, 0xd2, 0xf1, 0x00, 0xf7, 0x28, 0x7e, 0x70, 0xf6, 0x8c, 0xf1, 0x18, 0x7e, 0xd2, 0x0f, 0x2c, 0xcd, 0xda, 0x8d, 0xb9, 0xdc, 0x13, 0x2f, 0x6c, 0xf8, 0x18, 0xfc, 0x8a, 0x43, 0xb5, 0x72, 0xde, 0x8f, 0xd2, 0x48, 0x51, 0xac, 0x13, 0xc7, 0xfa, 0xe8, 0x23, 0x38, 0xca, 0x83, 0x9c, 0xea, 0x71, 0xac, 0x89, 0x23, 0x5d, 0x13, 0xa4, 0xfc, 0x2f, 0x8c, 0x76, 0xd1, 0x88, 0xc4, 0xb0, 0x4d, 0xb4, 0x33, 0xa2, 0x04, 0xd5, 0x9f, 0x82, 0x6d, 0xd6, 0x72, 0x44, 0x76, 0xdc, 0x1a, 0x82, 0x81, 0x08, 0x33, 0x95, 0x24, 0x2d, 0x58, 0x17, 0x6f, 0x6e, 0x4d, 0x72, 0xc7, 0x42, 0xc2, 0x44, 0x1a, 0x16, 0xd4, 0x8b, 0x24, 0xb9, 0x86, 0x51, 0xa2, 0x27, 0xf9, 0x94, 0x2c, 0x72, 0x89, 0x5a, 0x50, 0xf5, 0x83, 0x2d, 0xa6, 0x51, 0x0d, 0x3e, 0x1d, 0x43, 0xea, 0xc4, 0xd0, 0x84, 0xdc, 0xfe, 0x14, 0xef, 0x31, 0x3a, 0xe3, 0x70, 0xf1, 0x24, 0xd7, 0xce, 0x8a, 0x63, 0xa8, 0x82, 0x21, 0x62, 0xf6, 0x38, 0xd2, 0x10, 0x41, 0x8a, 0xda, 0x1e, 0x7e, 0x12, 0xb1, 0xdc, 0xbb, 0x3d, 0xc8, 0xbf, 0x71, 0x1e, 0x7b, 0x72, 0xce, 0xc2, 0xfc, 0x4a, 0x8c, 0x22, 0x2c, 0x73, 0x3f, 0x42, 0xcc, 0x16, 0x97, 0x54, 0x50, 0x07, 0x8d, 0xde, 0xe2, 0xfa, 0x68, 0x9d, 0x4c, 0xc5, 0xd5, 0x70, 0xca, 0x54, 0x4e, 0xca, 0x21, 0xac, 0x87, 0x9f, 0x4e, 0xdd, 0xe0, 0xea, 0x3d, 0xc4, 0x33, 0xee, 0x03, 0xfa, 0xfd, 0xfd, 0x57, 0xb2, 0x1c, 0x79, 0xc9, 0xfd, 0x98, 0xf7, 0x6a, 0x8c, 0x3b, 0x8f, 0xe6, 0xcd, 0xe8, 0x69, 0xb6, 0x39, 0x61, 0x8b, 0xab, 0x2a, 0xd6, 0x67, 0x56, 0x27, 0x41, 0x89, 0x4a, 0xc0, 0xda, 0xb9, 0x62, 0x62, 0x0c, 0xf0, 0x6c, 0xf8, 0xb4, 0x10, 0xdb, 0x91, 0x20, 0x4e, 0x01, 0xe7, 0x80, 0x0b, 0x71, 0x92, 0x23, 0x66, 0xd1, 0xe6, 0x8a, 0x93, 0xe1, 0x71, 0xdb, 0x0e, 0x92, 0x74, 0x9e, 0xd1, 0x96, 0x50, 0xcc, 0x0b, 0xa7, 0xb3, 0xf5, 0xb9, 0x70, 0x56, 0x60, 0x24, 0x74, 0xed, 0xa7, 0xdd, 0x5c, 0x2c, 0x2f, 0x35, 0x8b, 0x24, 0x5c, 0x06, 0x65, 0x40, 0x90, 0x4e, 0x4a, 0x34, 0xe3, 0x04, 0x94, 0x31, 0xde, 0x4e, 0x3a, 0x6f, 0x87, 0xef, 0x87, 0xd9, 0xce, 0x92, 0xdd, 0xd8, 0xd9, 0x96, 0x23, 0x6b, 0x8c, 0x53, 0xe8, 0x23, 0xda, 0x23, 0x97, 0x5d, 0x4b, 0xb6, 0x5f, 0x6e, 0x2d, 0x41, 0x7f, 0xe3, 0xb4, 0x41, 0x29, 0xae, 0x1f, 0x9f, 0xb3, 0x76, 0xe4, 0x85, 0xf2, 0xaf, 0x15, 0xe7, 0xc4, 0xb6, 0x86, 0x42, 0xbc, 0x72, 0x38, 0xd3, 0x2b, 0x47, 0x2f, 0x14, 0x5c, 0xd9, 0x3c, 0xb8, 0x6b, 0x5d, 0x7a, 0xe5, 0xf0, 0x48, 0x18, 0x03, 0x57, 0x45, 0x5c, 0x39, 0xcc, 0xb9, 0x2b, 0x47, 0x39, 0xed, 0x23, 0x33, 0x87, 0x21, 0xf8, 0x96, 0xcf, 0x2d, 0x2f, 0x3f, 0x3c, 0xd8, 0x2d, 0x5d, 0x52, 0xa6, 0xfb, 0xff, 0x4b, 0x99, 0x97, 0xae, 0x4c, 0x37, 0x7e, 0x7c, 0x71, 0x94, 0xe4, 0xbd, 0x6a, 0xb7, 0x54, 0xee, 0x0f, 0x48, 0x95, 0xde, 0x6e, 0x29, 0x88, 0x4c, 0x5d, 0x0d, 0x8e, 0x0d, 0x32, 0xb9, 0x51, 0xee, 0xbb, 0xc2, 0x7a, 0x37, 0x32, 0x3e, 0x73, 0x03, 0x93, 0x0c, 0x29, 0x7c, 0x40, 0xfa, 0xa6, 0x32, 0x09, 0x09, 0xff, 0xca, 0x09, 0xfb, 0xc5, 0x6c, 0xd3, 0x9d, 0x65, 0x4c, 0x6f, 0xfb, 0xc4, 0x19, 0xbe, 0x1e, 0x05, 0xe6, 0x56, 0x82, 0x57, 0x48, 0x92, 0xc6, 0xd6, 0x22, 0xe7, 0xd2, 0x5a, 0x12, 0x80, 0xc7, 0x3d, 0x61, 0x8c, 0x6d, 0xf7, 0x88, 0x73, 0xe1, 0x47, 0x54, 0x83, 0xa7, 0xd7, 0x8f, 0xc9, 0xb4, 0x87, 0x65, 0x8f, 0x5b, 0xb5, 0x19, 0x51, 0xde, 0x49, 0x76, 0x7c, 0x15, 0xbf, 0x2c, 0xbb, 0x52, 0x5d, 0xa7, 0x9f, 0x4b, 0x21, 0x77, 0x9a, 0x22, 0xbb, 0x94, 0x48, 0xc9, 0xe4, 0x73, 0xbc, 0xa9, 0x31, 0xfb, 0x73, 0x83, 0xe8, 0x3b, 0x48, 0x16, 0xa5, 0x02, 0x16, 0xd2, 0xa8, 0xd3, 0x55, 0xde, 0xa9, 0x67, 0x4a, 0x64, 0x09, 0x8e, 0x07, 0xc9, 0x22, 0xa8, 0x33, 0x0f, 0xae, 0x9f, 0xbe, 0xbc, 0xf0, 0xba, 0x98, 0x9d, 0x39, 0x9d, 0xd5, 0x74, 0x9a, 0x9d, 0xef, 0xba, 0xd9, 0xef, 0x97, 0xf0, 0x77, 0xaf, 0xcd, 0x82, 0x73, 0xb4, 0x4f, 0xa5, 0x53, 0x1f, 0x2b, 0xf8, 0x5c, 0x61, 0xa7, 0x67, 0x15, 0xb8, 0x76, 0xdf, 0xdf, 0x26, 0x79, 0xaa, 0xbd, 0x0b, 0xe5, 0x55, 0x64, 0xa5, 0x48, 0x9e, 0x9a, 0x85, 0x28, 0xc6, 0xa7, 0x5a, 0xca, 0x46, 0x2d, 0x0b, 0xa9, 0x96, 0xbf, 0x1c, 0xe9, 0x3a, 0xbd, 0x9b, 0x6b, 0x29, 0xd7, 0xd1, 0x8d, 0x53, 0x1e, 0xd0, 0xdc, 0x18, 0x6f, 0x6a, 0xcc, 0xb9, 0xfb, 0xfe, 0x98, 0xa5, 0xe1, 0x03, 0x5d, 0x0f, 0x95, 0xed, 0x07, 0x0f, 0x62, 0x4c, 0xcf, 0x54, 0xa4, 0x85, 0xe6, 0xd0, 0x19, 0xe4, 0xb1, 0x1e, 0xac, 0xef, 0x62, 0xd9, 0xc2, 0xfb, 0xfd, 0x7a, 0xac, 0xdc, 0x90, 0x89, 0xf2, 0xd9, 0xba, 0xdf, 0xe3, 0x2a, 0xdd, 0x70, 0x61, 0xac, 0x8d, 0xe9, 0x5a, 0x37, 0x52, 0x8b, 0xbe, 0x71, 0xa1, 0xf7, 0xe3, 0x2c, 0x48, 0x87, 0x38, 0x03, 0x24, 0x3f, 0xfa, 0x2d, 0xe6, 0xa7, 0xd2, 0x19, 0x79, 0x2c, 0x01, 0xc8, 0x76, 0x78, 0x7f, 0x7f, 0x7a, 0x5f, 0xd4, 0x63, 0x22, 0xda, 0xee, 0x95, 0xfd, 0xc7, 0xd7, 0xe7, 0x60, 0x6e, 0x6a, 0xc9, 0x27, 0x39, 0x7c, 0xa4, 0xc4, 0x32, 0xb7, 0xc2, 0xcb, 0x9d, 0x52, 0x16, 0x3a, 0x63, 0xb2, 0xc1, 0x8f, 0xd2, 0xae, 0xe4, 0x04, 0x7e, 0xb4, 0x7c, 0xdc, 0x2e, 0x92, 0x84, 0xf9, 0x5c, 0x93, 0xcb, 0x8d, 0xa6, 0x79, 0xd1, 0x40, 0x10, 0x5c, 0x99, 0xb3, 0x56, 0x01, 0xb1, 0x7a, 0xd0, 0x49, 0xd5, 0xb4, 0x4e, 0xca, 0x65, 0xe6, 0xe5, 0xa3, 0x06, 0x1d, 0x74, 0x56, 0xc8, 0x40, 0x3c, 0x91, 0xd0, 0xd3, 0xe0, 0xc4, 0xc7, 0x15, 0x68, 0xc0, 0xb6, 0x0f, 0xc4, 0xd7, 0xfa, 0xbb, 0xa0, 0xee, 0x39, 0xd1, 0xaa, 0x2a, 0x1a, 0x43, 0x6a, 0xe8, 0xb5, 0xbd, 0xaf, 0x1d, 0x70, 0x3c, 0x61, 0xd8, 0x43, 0x2c, 0x97, 0x8b, 0xc1, 0x83, 0x98, 0xcb, 0x1d, 0x2b, 0x21, 0x2a, 0x97, 0xb1, 0xf7, 0x31, 0x3a, 0xf9, 0xb1, 0x08, 0xcb, 0x0c, 0xe4, 0x91, 0x94, 0xe3, 0xc5, 0x07, 0x22, 0x5b, 0xc8, 0x86, 0x85, 0xe0, 0x23, 0xb0, 0x65, 0x24, 0xcd, 0x70, 0x2e, 0xc0, 0xa7, 0x96, 0x43, 0x0f, 0x0f, 0xd2, 0xf9, 0x6e, 0xd5, 0xc9, 0x36, 0xde, 0x36, 0xf3, 0x29, 0xfa, 0x53, 0x69, 0xcb, 0x16, 0x8d, 0x16, 0xc1, 0x61, 0x5d, 0xb6, 0xee, 0x5b, 0xc7, 0x9f, 0x14, 0xcb, 0xa5, 0x0f, 0x0d, 0x89, 0x4e, 0x24, 0x50, 0x22, 0x28, 0x9e, 0xdf, 0x6f, 0x09, 0x98, 0x90, 0x3f, 0x3d, 0x6c, 0x48, 0x52, 0x52, 0xc8, 0xb5, 0xa6, 0x43, 0x1e, 0xcd, 0xc8, 0x57, 0x52, 0x71, 0x7f, 0xc6, 0xf7, 0x87, 0x39, 0xbe, 0x05, 0x19, 0xdf, 0xff, 0x9e, 0xf5, 0x8d, 0xe5, 0x11, 0x97, 0x2e, 0xce, 0xaa, 0x86, 0x82, 0x5a, 0x44, 0x91, 0x84, 0x1e, 0x06, 0x9f, 0xa4, 0x99, 0x2b, 0x5f, 0x19, 0x57, 0x73, 0xfb, 0x2c, 0xf4, 0x93, 0xfa, 0x3e, 0x8b, 0x39, 0xdb, 0xf7, 0xbc, 0x3a, 0x79, 0x69, 0xc7, 0xc9, 0x38, 0xfd, 0xda, 0xa7, 0xd9, 0xd3, 0x5c, 0x7f, 0x8f, 0xc0, 0x26, 0x38, 0xb7, 0x04, 0xcf, 0x90, 0x19, 0x53, 0x16, 0xb1, 0x33, 0xce, 0xb2, 0x1e, 0xc9, 0x6b, 0xee, 0x35, 0x89, 0xbb, 0x5f, 0x48, 0x8b, 0x83, 0x46, 0xa1, 0xb8, 0xbd, 0x2b, 0xc8, 0xb2, 0x15, 0xa2, 0xcf, 0x04, 0x74, 0xd2, 0xb4, 0x2f, 0xc9, 0x16, 0x7c, 0xe5, 0xb8, 0x9a, 0x5a, 0x78, 0x1f, 0xe6, 0x88, 0x17, 0xe2, 0x65, 0xfe, 0xa0, 0x71, 0xf6, 0x43, 0x96, 0x83, 0xe1, 0xed, 0xe0, 0x8d, 0xbb, 0x19, 0x4f, 0xec, 0xc3, 0x95, 0xbc, 0x12, 0x5b, 0xbb, 0xbd, 0xd7, 0x75, 0x44, 0x60, 0x96, 0x1f, 0x2a, 0x35, 0xbc, 0xf3, 0xd0, 0x9a, 0x98, 0x64, 0xc8, 0x1a, 0x6e, 0x26, 0x09, 0x4a, 0x25, 0x8f, 0x18, 0xd2, 0xef, 0x61, 0xa9, 0xf3, 0x58, 0xfd, 0x2a, 0xfd, 0xb4, 0xb0, 0x4e, 0xe3, 0x41, 0x88, 0x31, 0x9f, 0xf7, 0x88, 0x1c, 0x24, 0xaa, 0xeb, 0xf7, 0x2f, 0x33, 0x5f, 0x78, 0xbb, 0x01, 0x3b, 0x67, 0xfd, 0x5a, 0x3d, 0x61, 0x68, 0x53, 0x03, 0xae, 0x68, 0x7d, 0x9e, 0x62, 0x8a, 0xcf, 0xb6, 0xb7, 0xd2, 0x29, 0x7e, 0x27, 0x52, 0x60, 0xed, 0x5a, 0x14, 0xc9, 0xc0, 0x7d, 0x0b, 0x05, 0xee, 0x8b, 0xd7, 0x29, 0x10, 0x0a, 0xf5, 0x9a, 0xe8, 0x74, 0xa8, 0x53, 0xac, 0xe5, 0x9b, 0xe5, 0x49, 0x0f, 0xee, 0xaf, 0xfe, 0x50, 0x3f, 0xfd, 0xd0, 0x01, 0xa6, 0x40, 0x1c, 0x2a, 0xfb, 0xeb, 0xfd, 0x1e, 0xa4, 0xe4, 0xbb, 0xed, 0xca, 0x24, 0x31, 0x32, 0x35, 0xa9, 0x66, 0x50, 0x31, 0x0b, 0x9b, 0x30, 0x86, 0x16, 0xc4, 0x87, 0x8d, 0x95, 0x38, 0x2e, 0xfe, 0x76, 0x9c, 0x7d, 0xa3, 0xfe, 0xcb, 0xf3, 0x18, 0x74, 0xce, 0x15, 0xb9, 0x4f, 0x2f, 0x72, 0xa1, 0x7e, 0xc4, 0xb3, 0xa5, 0x1e, 0x9c, 0x83, 0x2a, 0xe3, 0x68, 0x1a, 0xc9, 0xbf, 0xec, 0xbf, 0xfc, 0xb9, 0xaa, 0x58, 0x1e, 0xcf, 0x7c, 0xb2, 0x09, 0xfc, 0x14, 0xe2, 0xa3, 0x4a, 0xe6, 0xd3, 0x40, 0xe8, 0x5b, 0x30, 0x15, 0xee, 0x66, 0xb9, 0xbe, 0x5d, 0xc8, 0xf5, 0x63, 0x45, 0x9a, 0xf5, 0xf0, 0x60, 0x9f, 0x89, 0x6d, 0xd0, 0x2c, 0x1c, 0x77, 0x02, 0xfa, 0x31, 0x43, 0x7a, 0x36, 0x9a, 0x96, 0x2e, 0xe1, 0xc8, 0x77, 0xd1, 0xc9, 0x75, 0x92, 0x32, 0x85, 0xfe, 0x07, 0xe1, 0x5e, 0x7d, 0x8c, 0xc7, 0xe9, 0xff, 0x21, 0xd9, 0x4b, 0xc0, 0x89, 0x54, 0x3e, 0x8e, 0xb6, 0xdd, 0x9d, 0x3c, 0xda, 0xdc, 0x31, 0x3a, 0x5d, 0xed, 0x60, 0xeb, 0x06, 0x19, 0x99, 0x13, 0x6b, 0xaa, 0x06, 0xb2, 0x7c, 0xb5, 0xaf, 0x1b, 0x2a, 0xd5, 0x6e, 0x08, 0x8e, 0x3b, 0x83, 0x15, 0x24, 0x6d, 0x13, 0xc4, 0xed, 0xb4, 0xa7, 0xfc, 0x6f, 0x48, 0xaf, 0xb5, 0xb0, 0x25, 0x2a, 0xd6, 0xca, 0xb9, 0x8d, 0xb9, 0xd4, 0x58, 0x7d, 0x49, 0x31, 0x3c, 0x2c, 0x4f, 0x6e, 0x4e, 0x25, 0x2f, 0xee, 0x4c, 0xb5, 0x3b, 0xe4, 0x05, 0xaf, 0xfc, 0x2f, 0xb9, 0x74, 0xd8, 0xa1, 0x4c, 0xd6, 0xec, 0x74, 0x92, 0x0d, 0xc7, 0xae, 0x3f, 0x49, 0xbb, 0x13, 0x56, 0x6c, 0xbb, 0x09, 0xdb, 0x3e, 0x49, 0xd4, 0xcb, 0x4b, 0x7e, 0x80, 0x78, 0x75, 0x1b, 0xd1, 0x16, 0x48, 0x83, 0xb5, 0x92, 0x16, 0x28, 0xf2, 0xdc, 0xe7, 0x29, 0x14, 0xfb, 0x29, 0xcc, 0x7b, 0xbd, 0xc4, 0x11, 0x13, 0x55, 0xdf, 0xea, 0xa5, 0xb1, 0x22, 0x73, 0x3e, 0x93, 0xe5, 0xa0, 0xd1, 0xc6, 0x49, 0x91, 0xad, 0x6c, 0xf1, 0xd0, 0xcd, 0x7b, 0x9e, 0xbf, 0x8d, 0xef, 0x27, 0x3d, 0x5b, 0x38, 0x81, 0x9c, 0xf4, 0x60, 0xcc, 0x79, 0x1d, 0xad, 0xec, 0xbf, 0x85, 0xad, 0x7d, 0x65, 0x75, 0x16, 0x3a, 0x05, 0x77, 0x17, 0x70, 0xe8, 0xfb, 0x44, 0x3b, 0xd2, 0x6e, 0x09, 0xf6, 0x04, 0xae, 0x6b, 0x63, 0x5e, 0x8f, 0xa0, 0x16, 0x5b, 0x91, 0xeb, 0x73, 0x51, 0x5b, 0xd8, 0xae, 0xec, 0x9e, 0xb1, 0x47, 0xe8, 0x4c, 0x7b, 0x6c, 0xbe, 0x26, 0xdd, 0x45, 0x3b, 0xea, 0xab, 0x74, 0x9d, 0x4e, 0x05, 0x93, 0x7e, 0xfd, 0x18, 0xd3, 0x51, 0x64, 0x79, 0x84, 0xad, 0x08, 0xef, 0xe7, 0x9a, 0x61, 0x8f, 0x85, 0xef, 0x8d, 0x3b, 0x95, 0xc9, 0x7c, 0x3e, 0x7a, 0x50, 0x11, 0xe7, 0xa4, 0x7f, 0x9c, 0x3d, 0xb9, 0x77, 0x31, 0xa2, 0xd9, 0x39, 0xfe, 0xc3, 0x14, 0x1f, 0xc7, 0x3b, 0xcf, 0xfc, 0xf0, 0x50, 0x3c, 0x8f, 0xac, 0xaa, 0x8b, 0x93, 0x86, 0x09, 0x48, 0x6b, 0x12, 0xf2, 0x2c, 0x1b, 0x25, 0x1d, 0x68, 0xc4, 0xc3, 0x32, 0xaf, 0xac, 0x4e, 0xd2, 0xa1, 0xe3, 0x5b, 0x1f, 0xf7, 0x8c, 0xd5, 0x89, 0x1a, 0x20, 0x66, 0x98, 0xa3, 0x8f, 0xf2, 0xa9, 0xda, 0x39, 0xfa, 0x59, 0x3f, 0xed, 0x0c, 0x1b, 0x63, 0x39, 0xc7, 0xae, 0xc8, 0x4b, 0x97, 0xd8, 0x42, 0xbc, 0x2d, 0x6d, 0xf9, 0x40, 0xcd, 0x58, 0x1a, 0x19, 0x67, 0x61, 0xe4, 0x91, 0x44, 0x6a, 0x84, 0xec, 0x42, 0x6f, 0x26, 0x79, 0x30, 0x5b, 0x19, 0x19, 0x14, 0x56, 0x46, 0x6c, 0x12, 0x98, 0xe2, 0x69, 0xd9, 0x0d, 0xd9, 0x94, 0x7c, 0x58, 0x73, 0xe4, 0x7c, 0x3d, 0xda, 0xb4, 0x11, 0x63, 0x4c, 0xe2, 0xb8, 0xa1, 0x4b, 0xe2, 0x76, 0x8e, 0x8b, 0x9b, 0xe0, 0xb8, 0x56, 0x8e, 0x9b, 0xb8, 0x24, 0x6e, 0x70, 0x5c, 0xdc, 0x1a, 0x5c, 0xd1, 0xec, 0x2d, 0xa9, 0xf4, 0x8a, 0xc6, 0xf8, 0x8c, 0xee, 0x3e, 0xf2, 0x67, 0xf7, 0x06, 0x33, 0x3b, 0x9e, 0xbc, 0x2f, 0x38, 0xf9, 0xf5, 0x89, 0xfb, 0x82, 0x62, 0x45, 0xa1, 0xdd, 0x4e, 0x9a, 0xc7, 0x25, 0x26, 0xb5, 0xca, 0x13, 0xf2, 0xe7, 0x69, 0x7e, 0x2f, 0xae, 0x5b, 0x1e, 0x1f, 0xd8, 0x54, 0xa4, 0xaa, 0x7d, 0x53, 0x79, 0x67, 0xff, 0x0c, 0x72, 0x06, 0x4e, 0x4f, 0x14, 0x7b, 0x92, 0xbe, 0xde, 0x52, 0xef, 0x47, 0x0c, 0xef, 0xac, 0x3d, 0x89, 0x74, 0x4a, 0xbe, 0xd0, 0x9b, 0x8c, 0x1d, 0xa0, 0x3e, 0x6a, 0x1c, 0xcd, 0xd8, 0x81, 0xca, 0xcb, 0xb5, 0x80, 0x96, 0xf0, 0x5f, 0x62, 0xe7, 0x86, 0x56, 0x85, 0xdb, 0xc9, 0xc6, 0xc2, 0x25, 0xd6, 0x73, 0xe1, 0xf8, 0x7d, 0x48, 0x79, 0xd3, 0xde, 0x9b, 0x87, 0xc7, 0xa6, 0xbe, 0x4c, 0x6a, 0xda, 0x27, 0x07, 0x9d, 0xfb, 0x84, 0xf6, 0x02, 0xb6, 0xc8, 0xb0, 0x9f, 0x3a, 0x2b, 0x04, 0x16, 0xc4, 0x1f, 0x72, 0x32, 0x2e, 0x76, 0x81, 0x73, 0xa5, 0x99, 0xc8, 0x4f, 0xdb, 0xd2, 0xfe, 0xbc, 0x27, 0x53, 0x69, 0xc8, 0xb9, 0x4f, 0x09, 0xfb, 0x27, 0xb5, 0xb4, 0x1a, 0x5f, 0xaa, 0xad, 0x59, 0x99, 0x63, 0x43, 0x05, 0xf1, 0x1a, 0xd1, 0x14, 0xf5, 0x7d, 0xe6, 0x8b, 0x74, 0x5a, 0xe2, 0x32, 0xb4, 0x85, 0x3b, 0x87, 0xb6, 0x70, 0x1a, 0x3d, 0xe1, 0xc8, 0xda, 0xc8, 0x2e, 0x25, 0xbd, 0xa3, 0x3c, 0xb5, 0x99, 0x66, 0xef, 0x53, 0x7b, 0x0c, 0x6b, 0x39, 0x45, 0x6a, 0xb5, 0x27, 0x1f, 0x29, 0x03, 0x5b, 0xdc, 0xea, 0x0f, 0x31, 0xef, 0x28, 0x19, 0xb6, 0x72, 0xd6, 0xc5, 0x8e, 0x87, 0x7e, 0x86, 0xbc, 0xd4, 0x16, 0x43, 0xf2, 0x87, 0x63, 0x9d, 0xf7, 0x65, 0x43, 0xde, 0xbc, 0x10, 0xd2, 0x0f, 0xa1, 0xcd, 0xc4, 0x69, 0xe1, 0xa8, 0x4f, 0x8f, 0x78, 0x2c, 0xfb, 0xa9, 0x97, 0xc5, 0x3c, 0x8d, 0xe5, 0xd3, 0x98, 0x27, 0xde, 0x50, 0x4d, 0xf1, 0x2a, 0xb3, 0xcf, 0x03, 0x88, 0x2d, 0xd8, 0x9e, 0x0f, 0x52, 0x66, 0x1f, 0xd6, 0x14, 0xe9, 0x27, 0x8c, 0xb3, 0xe5, 0xd9, 0xd3, 0xde, 0x83, 0x62, 0x0e, 0x8c, 0xc7, 0xf0, 0x9f, 0x65, 0x11, 0x84, 0xf4, 0xf7, 0x3d, 0x79, 0xea, 0x4a, 0xaa, 0x41, 0xe8, 0x27, 0x0d, 0x17, 0xf4, 0xdd, 0x91, 0xad, 0xc8, 0x1d, 0xe7, 0x91, 0xfe, 0xaf, 0xb3, 0x18, 0x9c, 0x12, 0xe8, 0x7f, 0xfa, 0x4a, 0x10, 0xd8, 0x8e, 0x62, 0xcd, 0x48, 0xac, 0x86, 0xe4, 0x42, 0x26, 0x67, 0xbc, 0x92, 0xe4, 0x84, 0xdd, 0xf3, 0xc2, 0x9b, 0x63, 0x65, 0x42, 0xe6, 0xcf, 0xb5, 0x7e, 0x44, 0x4d, 0x35, 0x6d, 0xa4, 0x35, 0x76, 0x66, 0x18, 0x6b, 0x1c, 0xbd, 0x0e, 0x7f, 0xaf, 0xea, 0xd7, 0x53, 0xa6, 0xe9, 0x21, 0x9f, 0x29, 0x9f, 0x6c, 0x69, 0x9a, 0x9c, 0x88, 0xef, 0xed, 0xa1, 0x1a, 0xcd, 0xaa, 0xd6, 0x23, 0x7e, 0xfd, 0x08, 0xcb, 0xab, 0x5b, 0x78, 0x41, 0x6f, 0x2d, 0xa9, 0xa4, 0x7e, 0x67, 0x1d, 0x8a, 0x3c, 0x5a, 0x0d, 0x47, 0x4f, 0x5c, 0x87, 0x5c, 0x73, 0x0c, 0x4c, 0x6f, 0x3b, 0x7d, 0x26, 0x27, 0x49, 0xfe, 0x69, 0xc7, 0x04, 0x67, 0xe9, 0x71, 0xe2, 0xe3, 0x78, 0xbc, 0x94, 0x62, 0x5f, 0x92, 0x9c, 0x7d, 0x2b, 0xf9, 0xe0, 0xfc, 0xf2, 0x62, 0x04, 0x67, 0xdc, 0x86, 0x2b, 0x50, 0x07, 0xf2, 0x7d, 0x56, 0x7a, 0x9b, 0xa6, 0x47, 0x1e, 0x9a, 0xc5, 0xa7, 0x00, 0x63, 0x4e, 0x2d, 0xa9, 0x88, 0xb3, 0xcf, 0x8f, 0x91, 0x4f, 0xbc, 0x8d, 0xcf, 0x34, 0xdb, 0xa8, 0x7f, 0x48, 0xc2, 0x85, 0x29, 0x0b, 0xa9, 0xef, 0x7a, 0x1c, 0x87, 0xd7, 0x73, 0xac, 0x47, 0x70, 0x94, 0x06, 0xc1, 0x07, 0x92, 0xc9, 0xa9, 0xad, 0xc5, 0xbc, 0x56, 0x50, 0x5e, 0x8c, 0x23, 0x9d, 0xb6, 0x62, 0x1c, 0xd7, 0x4e, 0xde, 0x79, 0xb4, 0xc4, 0x5a, 0xb5, 0x42, 0x05, 0xb2, 0xa9, 0x7c, 0xa0, 0x18, 0x72, 0xe1, 0xf0, 0xdd, 0x31, 0x27, 0xe3, 0xcf, 0x3e, 0x1f, 0x62, 0xc0, 0x3e, 0xd2, 0x70, 0x52, 0xc2, 0x3e, 0xd3, 0xf4, 0x58, 0x1e, 0xe5, 0x45, 0x96, 0x83, 0xe4, 0x05, 0x74, 0x4e, 0x5c, 0x94, 0x11, 0xde, 0x1c, 0x67, 0x8b, 0x35, 0x9d, 0x79, 0x9a, 0x93, 0xb4, 0xef, 0xbe, 0x2d, 0xac, 0x19, 0xda, 0x42, 0xb5, 0x9a, 0xb4, 0xd6, 0xd4, 0x67, 0xba, 0xa4, 0xb6, 0x4d, 0xe3, 0x6a, 0xbb, 0x95, 0x34, 0x62, 0x15, 0x3b, 0xdd, 0x9b, 0x67, 0x9a, 0xde, 0xe3, 0x12, 0xbe, 0x42, 0x03, 0x65, 0xec, 0x49, 0xcc, 0x1b, 0x60, 0x3d, 0xe7, 0x5e, 0xa8, 0xc1, 0xd8, 0xa3, 0x54, 0xab, 0x8b, 0x6f, 0x53, 0xad, 0x78, 0x1d, 0x39, 0x11, 0x27, 0x7d, 0xae, 0x7b, 0xc2, 0xb5, 0xf1, 0x68, 0x06, 0xb6, 0xc9, 0x34, 0x6c, 0xa9, 0x14, 0xd1, 0x1e, 0x92, 0x04, 0x48, 0x3e, 0xfd, 0xa2, 0xc9, 0x49, 0xb1, 0xae, 0xab, 0x67, 0x98, 0xfb, 0xc0, 0x8c, 0x75, 0x81, 0xb1, 0xb9, 0xa1, 0x4d, 0xe9, 0xf3, 0xdf, 0x4f, 0xed, 0x01, 0xec, 0x45, 0x70, 0x36, 0x51, 0x9b, 0xf3, 0xd5, 0x28, 0xef, 0x79, 0xd9, 0x69, 0x24, 0x10, 0x0c, 0xc6, 0x66, 0x60, 0x3c, 0xd6, 0xfa, 0xfc, 0x85, 0xdb, 0x87, 0xd0, 0xd4, 0x1c, 0x3e, 0xa2, 0x2a, 0x4a, 0x35, 0xcb, 0xda, 0xaf, 0xd4, 0x91, 0x5c, 0xd7, 0x8a, 0x75, 0x9b, 0x6b, 0x8c, 0xbb, 0x4f, 0x69, 0xdc, 0xe1, 0xfc, 0xa9, 0x89, 0x5b, 0xb1, 0x9e, 0x41, 0xcd, 0x82, 0x7e, 0xff, 0x42, 0x7e, 0x48, 0xe3, 0xb0, 0x76, 0xaf, 0x3c, 0xc9, 0x58, 0x3d, 0xf8, 0xfc, 0x8c, 0xb1, 0xf7, 0x64, 0xcc, 0xa0, 0x67, 0x93, 0x34, 0x62, 0xd3, 0x67, 0x67, 0x44, 0x38, 0xf3, 0x26, 0x97, 0x84, 0xe2, 0x6a, 0x41, 0x3b, 0x89, 0xac, 0x47, 0x25, 0xbb, 0xf9, 0x04, 0xc7, 0xc0, 0x2b, 0xcf, 0x6b, 0xc8, 0x7f, 0x91, 0xbe, 0x51, 0xf8, 0xb1, 0xd8, 0x27, 0x69, 0x3b, 0x16, 0x84, 0x4b, 0x3d, 0x21, 0xb5, 0xda, 0x9b, 0x97, 0x94, 0x84, 0xe5, 0x0f, 0xa4, 0xd0, 0x6e, 0x57, 0x26, 0x93, 0x95, 0x0d, 0x3f, 0x52, 0x99, 0x48, 0x4d, 0x4e, 0x15, 0xd2, 0x60, 0x84, 0xbc, 0xaa, 0x4c, 0x56, 0x27, 0x65, 0xb8, 0xd5, 0x02, 0x65, 0x6a, 0xd3, 0xa0, 0xc7, 0x2e, 0x38, 0xdc, 0x70, 0xf0, 0x96, 0x17, 0xea, 0xd7, 0xd5, 0x54, 0x23, 0x9e, 0xae, 0x66, 0x3a, 0xb4, 0xbf, 0x04, 0x92, 0x92, 0x88, 0xcd, 0xa7, 0xbc, 0xf2, 0x14, 0xc3, 0xd2, 0x99, 0x66, 0xb9, 0x2b, 0x1e, 0xaa, 0x56, 0x26, 0x8b, 0x19, 0xcf, 0x92, 0xe2, 0xd1, 0xf4, 0xfe, 0x59, 0x78, 0x20, 0xe6, 0x49, 0x4c, 0xda, 0xb1, 0xae, 0xb3, 0x80, 0x34, 0x08, 0x7e, 0x7f, 0x3c, 0x6d, 0x49, 0x97, 0xf8, 0xca, 0x1e, 0x5d, 0xf3, 0x19, 0x36, 0x2d, 0x43, 0x9a, 0x4c, 0xa3, 0xde, 0x07, 0x06, 0x35, 0x26, 0xf6, 0xf1, 0x6e, 0x9f, 0x0b, 0xa4, 0x9d, 0xa0, 0xff, 0x98, 0xe0, 0x40, 0x54, 0x78, 0xd0, 0xb0, 0x7b, 0x49, 0x77, 0x42, 0x19, 0x30, 0x93, 0xe4, 0x2a, 0xa2, 0x4f, 0xdf, 0xcb, 0xcb, 0xd5, 0x31, 0x23, 0xea, 0xdc, 0xd8, 0xbb, 0xbd, 0xde, 0x46, 0x37, 0x2d, 0xbe, 0x2d, 0x1b, 0xb6, 0x34, 0xfe, 0x1c, 0x4d, 0xf9, 0x59, 0xfc, 0x8b, 0xa0, 0xcb, 0x90, 0x26, 0x9b, 0xeb, 0xed, 0x86, 0x72, 0xa4, 0x36, 0x2f, 0x43, 0x97, 0x85, 0xef, 0xcd, 0x52, 0x65, 0x52, 0x29, 0xd9, 0x1c, 0x66, 0xea, 0xef, 0x7d, 0x1a, 0xcb, 0xfa, 0x76, 0x83, 0xd6, 0x2e, 0x20, 0x8e, 0x92, 0xa4, 0xd2, 0xa1, 0x27, 0x71, 0x3d, 0x7c, 0x92, 0xd7, 0x10, 0x90, 0x1c, 0x74, 0x06, 0xc9, 0xfc, 0x61, 0xbc, 0x88, 0xdf, 0x1f, 0xc5, 0x6d, 0xfc, 0x3e, 0x15, 0x73, 0x79, 0x8b, 0xe1, 0x31, 0xb5, 0x18, 0xde, 0x8a, 0xb9, 0x34, 0x0b, 0xba, 0x1f, 0x55, 0xc9, 0xfe, 0x3f, 0x95, 0x71, 0x0a, 0xe7, 0xea, 0x4b, 0x99, 0x32, 0x3e, 0x0a, 0x98, 0x11, 0x43, 0xd5, 0xb0, 0xf6, 0x35, 0x95, 0x62, 0x67, 0x6a, 0x0a, 0x57, 0x60, 0x6d, 0x46, 0x26, 0xce, 0x9f, 0xe8, 0xcc, 0x90, 0x11, 0x3e, 0xc3, 0x08, 0x97, 0x02, 0xc5, 0xf0, 0xb8, 0x90, 0xd1, 0xed, 0x3e, 0x2a, 0xe8, 0x36, 0xcc, 0xb7, 0xf1, 0x12, 0x8a, 0x72, 0xbe, 0x9f, 0x28, 0x4a, 0xab, 0x41, 0x51, 0xda, 0xe5, 0xba, 0x57, 0x5e, 0x24, 0x8a, 0x32, 0x4b, 0x4f, 0xf6, 0x83, 0x91, 0xa3, 0x15, 0x7b, 0x6f, 0x5c, 0x7e, 0x48, 0x47, 0x2e, 0xf1, 0x43, 0xf4, 0x9e, 0x1e, 0x20, 0xeb, 0xad, 0xbb, 0x8f, 0x5e, 0x42, 0x47, 0x76, 0x31, 0xb5, 0xe6, 0x67, 0x3a, 0x72, 0x52, 0x86, 0x8e, 0x74, 0x10, 0x26, 0xcb, 0xd2, 0x91, 0x31, 0x01, 0xa1, 0x8f, 0x62, 0x23, 0x88, 0x07, 0x1e, 0x37, 0x68, 0x4a, 0x80, 0x6d, 0xfd, 0x59, 0x0a, 0xf2, 0x01, 0x83, 0x82, 0x64, 0x7d, 0xc5, 0xf6, 0x84, 0x41, 0x43, 0xc6, 0x90, 0x86, 0x2c, 0xf0, 0xa7, 0x69, 0x48, 0x0a, 0xb9, 0xc0, 0x18, 0x92, 0xed, 0xe0, 0x04, 0xec, 0xf2, 0x82, 0xfa, 0x0e, 0xa4, 0x23, 0x69, 0x8f, 0x87, 0xf0, 0xa0, 0x7b, 0x1c, 0x1d, 0x79, 0x38, 0x43, 0x47, 0xde, 0x83, 0x74, 0xa4, 0xf5, 0x73, 0xe8, 0x48, 0x27, 0xc7, 0x7f, 0x9c, 0xe3, 0x5b, 0x88, 0xba, 0xcd, 0x52, 0x93, 0x31, 0x59, 0x75, 0x1c, 0x5f, 0x2f, 0xbe, 0x59, 0x1b, 0x69, 0x06, 0xf1, 0xa6, 0xbd, 0xd0, 0xc7, 0x76, 0x81, 0xc7, 0x36, 0x6b, 0x69, 0x6a, 0xb3, 0x67, 0x3c, 0xb5, 0x49, 0xb3, 0xc7, 0x6b, 0xf2, 0x49, 0x6c, 0x93, 0xa6, 0x3e, 0x09, 0x62, 0x2e, 0xab, 0xb4, 0xa6, 0x30, 0xed, 0x49, 0x74, 0x3b, 0xa7, 0x6b, 0xcb, 0x50, 0x9e, 0xd2, 0xf1, 0x61, 0xa4, 0xc7, 0xf3, 0xd0, 0xaf, 0xd0, 0x2b, 0x6c, 0x45, 0x17, 0x70, 0xfd, 0xe9, 0x06, 0x49, 0x8a, 0xc9, 0xb7, 0x8f, 0x88, 0x59, 0x44, 0x67, 0x15, 0x89, 0x4e, 0x62, 0xb9, 0xd0, 0x86, 0x74, 0xee, 0x88, 0x1f, 0xfa, 0x94, 0xea, 0x57, 0x5f, 0x78, 0xf5, 0xd7, 0xea, 0x6c, 0x5c, 0xd9, 0x5c, 0x72, 0x90, 0x74, 0xd2, 0x12, 0x39, 0x67, 0x39, 0x84, 0x1e, 0x64, 0x9a, 0x4e, 0x21, 0xdd, 0x25, 0xe4, 0xa4, 0x25, 0xb2, 0xf5, 0x94, 0xab, 0xb7, 0x14, 0xb3, 0x27, 0x41, 0xb5, 0x52, 0xf9, 0x5a, 0x89, 0x5c, 0x37, 0x33, 0x84, 0x33, 0xca, 0x7a, 0xfc, 0x3e, 0xb6, 0x26, 0x6c, 0xa5, 0xb6, 0x6b, 0x16, 0xfc, 0x95, 0x10, 0x02, 0xb5, 0xcc, 0x2b, 0x5a, 0xb1, 0xde, 0x48, 0x2f, 0x19, 0xb6, 0x3f, 0xdf, 0x0c, 0xf6, 0x5f, 0x56, 0x66, 0xf9, 0x18, 0xcd, 0xc4, 0x4b, 0x74, 0xd6, 0xbf, 0x76, 0x79, 0x9d, 0xf5, 0x89, 0x3a, 0x6a, 0x19, 0x5d, 0xf4, 0xc9, 0x13, 0xe9, 0x50, 0xc1, 0xad, 0x1b, 0x78, 0xd9, 0x9c, 0xc6, 0xbd, 0xff, 0xbc, 0x42, 0xdc, 0x06, 0x2b, 0x2c, 0xe3, 0x97, 0x0a, 0xbc, 0x7c, 0xd9, 0xd0, 0xc8, 0x77, 0xe4, 0x2a, 0xa7, 0x33, 0x3a, 0xc0, 0xba, 0x30, 0x67, 0x95, 0x7a, 0xcd, 0x45, 0xae, 0x98, 0xb5, 0xea, 0x7d, 0x5d, 0xe7, 0xdb, 0x64, 0x2a, 0x62, 0x92, 0xdc, 0xe0, 0xbc, 0x3a, 0x76, 0x42, 0xb6, 0x5d, 0xce, 0x3a, 0xce, 0xd8, 0x13, 0x06, 0xfe, 0xbf, 0x59, 0xdf, 0xc1, 0x96, 0x9b, 0xaa, 0x4a, 0x24, 0xdf, 0x84, 0xd6, 0xfb, 0xb1, 0xf5, 0x8a, 0x1d, 0x61, 0xb6, 0xe3, 0xc8, 0xf7, 0xfb, 0x9a, 0x18, 0x6a, 0x7e, 0x5e, 0xb3, 0x6e, 0x59, 0x70, 0x41, 0x7f, 0x0a, 0xb9, 0x1c, 0x15, 0xc7, 0x02, 0x72, 0xb0, 0x19, 0x69, 0x48, 0x28, 0x30, 0x89, 0xe7, 0xfc, 0xf9, 0x1c, 0xbf, 0x12, 0xf4, 0x5b, 0xa5, 0xef, 0xc8, 0xf1, 0x29, 0x32, 0x62, 0x8d, 0x66, 0xfd, 0xbe, 0xfd, 0x62, 0xfd, 0x3d, 0x9a, 0xb5, 0x9f, 0xe4, 0x3d, 0x75, 0x8a, 0x5d, 0x50, 0xb0, 0xa5, 0x56, 0xe4, 0xca, 0x47, 0xf5, 0x0d, 0xe2, 0x8c, 0x4b, 0xa9, 0x44, 0x76, 0x92, 0xc6, 0xd7, 0x4f, 0xa1, 0xde, 0xa1, 0xd5, 0xee, 0x89, 0x1c, 0x3b, 0x7f, 0x52, 0x56, 0x5e, 0x12, 0x73, 0x24, 0xfd, 0x19, 0x1d, 0x0a, 0x3f, 0xe9, 0x60, 0x66, 0xe5, 0x31, 0x59, 0x1e, 0x01, 0xa2, 0x97, 0x9e, 0x13, 0x48, 0xe7, 0x77, 0x59, 0x0b, 0x44, 0xeb, 0x0d, 0x8c, 0x1d, 0x60, 0x4b, 0x65, 0x06, 0xc6, 0xbe, 0xb8, 0xf8, 0x8b, 0xda, 0x25, 0x4a, 0x43, 0xfe, 0xc6, 0x8f, 0xc7, 0x46, 0x08, 0xc3, 0x07, 0xaa, 0xe0, 0x96, 0x40, 0x08, 0x6e, 0x0b, 0x54, 0x43, 0xc5, 0xf8, 0xfd, 0x47, 0xa4, 0xb6, 0xc9, 0x52, 0xa7, 0xc7, 0xe0, 0x80, 0x88, 0x67, 0xa0, 0x53, 0xaa, 0x32, 0xe2, 0xf1, 0x41, 0x0c, 0xab, 0x63, 0xe9, 0xaf, 0x4d, 0x0e, 0xda, 0x4e, 0xc0, 0x64, 0x28, 0x9a, 0x10, 0x0b, 0xe7, 0xa3, 0xbe, 0x04, 0x63, 0xdd, 0x6e, 0x9c, 0x40, 0xae, 0x88, 0x83, 0xad, 0x83, 0xf6, 0xd8, 0x6c, 0xad, 0xd8, 0xa6, 0x8a, 0xf0, 0xa6, 0x38, 0xd2, 0x99, 0xb8, 0x02, 0x76, 0xb0, 0x4c, 0xe4, 0x80, 0x0a, 0xa1, 0x00, 0xdc, 0xc1, 0x76, 0x88, 0x3b, 0xc5, 0x49, 0x9e, 0xb1, 0x3f, 0x04, 0x82, 0x26, 0x4d, 0xc8, 0x63, 0x18, 0x83, 0x38, 0x85, 0x05, 0x46, 0x84, 0xba, 0x73, 0xe7, 0x76, 0x70, 0xd1, 0x0d, 0x85, 0x6a, 0xc0, 0xa4, 0xb1, 0x7c, 0x9a, 0xad, 0xb7, 0x8f, 0xed, 0x90, 0xf1, 0x1b, 0xfb, 0xc5, 0x16, 0x76, 0xc7, 0x2e, 0x6c, 0x4e, 0x05, 0xaa, 0x4c, 0x6d, 0xa1, 0xa7, 0x4d, 0x1d, 0x3d, 0xc8, 0x79, 0xa0, 0x3f, 0x96, 0xca, 0x36, 0x01, 0xaf, 0x89, 0x81, 0xd4, 0x48, 0x7b, 0xa6, 0x4a, 0xf4, 0xd5, 0x93, 0x60, 0xd3, 0xac, 0xbc, 0x17, 0x6e, 0x93, 0x1b, 0x48, 0xbb, 0x71, 0x67, 0xaa, 0x1b, 0xa4, 0x92, 0x82, 0xab, 0x1d, 0x66, 0x90, 0xe3, 0xef, 0xe2, 0xef, 0x94, 0xf8, 0x5b, 0x0e, 0x27, 0xdc, 0x80, 0x69, 0xdc, 0x22, 0x5e, 0x74, 0x18, 0x53, 0xac, 0x9b, 0x55, 0x0d, 0x36, 0x6f, 0x3d, 0x71, 0x6c, 0x3b, 0xd7, 0x75, 0xe7, 0x39, 0xdd, 0x38, 0xe2, 0xe5, 0xf8, 0x09, 0xfc, 0x9d, 0x12, 0x7f, 0xdb, 0xe9, 0xe2, 0xbd, 0x74, 0x6b, 0x18, 0x88, 0x4a, 0x16, 0xed, 0x43, 0x48, 0xcc, 0x67, 0xd7, 0x3e, 0x1f, 0x50, 0x39, 0x64, 0x93, 0xb7, 0x93, 0xee, 0x13, 0xb2, 0xc7, 0x8c, 0xf2, 0x03, 0x53, 0x91, 0xe3, 0xb9, 0x2d, 0x30, 0xa9, 0xe1, 0xc2, 0x58, 0x23, 0x4b, 0x7d, 0x69, 0xac, 0xce, 0x0b, 0x4c, 0xe5, 0xb1, 0x3a, 0x46, 0x12, 0x06, 0xc3, 0x4f, 0x11, 0x72, 0xa4, 0xb1, 0x87, 0x49, 0x2a, 0x98, 0xd0, 0x49, 0xbf, 0x26, 0xf4, 0x34, 0x94, 0x60, 0x3a, 0xd7, 0xc2, 0x0b, 0x17, 0x4f, 0x20, 0x9e, 0x71, 0x62, 0x5b, 0x23, 0x1e, 0x2f, 0x6c, 0xd5, 0xc0, 0xfa, 0x49, 0x1f, 0x68, 0x1a, 0xeb, 0xcb, 0xdd, 0x26, 0x57, 0x87, 0x4a, 0xc9, 0x14, 0xfe, 0x83, 0xfb, 0x43, 0x26, 0xad, 0xdc, 0x79, 0x35, 0xd7, 0xb9, 0xa4, 0xd5, 0xc9, 0xb5, 0xf6, 0x50, 0x9d, 0x63, 0x30, 0xf9, 0x75, 0x8d, 0xbe, 0xb1, 0xbd, 0x93, 0x5f, 0x0e, 0x57, 0xc5, 0xf3, 0x34, 0x98, 0xfc, 0x62, 0xb8, 0x0a, 0xd7, 0x99, 0x17, 0xd1, 0xf5, 0x5c, 0xd2, 0x14, 0x1d, 0x7e, 0x76, 0xb8, 0x6b, 0x1f, 0x86, 0xc0, 0xe4, 0xa7, 0x10, 0xcb, 0x03, 0x3c, 0x85, 0xfe, 0x8f, 0x3f, 0x37, 0xd4, 0x5a, 0x67, 0xbd, 0x87, 0x64, 0x50, 0x69, 0xab, 0xc7, 0xa4, 0xfb, 0xe8, 0xcf, 0x58, 0x83, 0xb6, 0xa6, 0xc2, 0xeb, 0xd2, 0xe7, 0xd6, 0x91, 0x3f, 0x06, 0xa6, 0x73, 0xd9, 0x46, 0x44, 0xda, 0x8e, 0x32, 0x7e, 0x23, 0x77, 0x8d, 0x58, 0x3f, 0x84, 0xfd, 0x1a, 0x10, 0xb0, 0x32, 0xf4, 0xff, 0xca, 0x34, 0xc5, 0xb0, 0x72, 0x5f, 0x46, 0x34, 0xef, 0x4e, 0x82, 0x9c, 0x53, 0x8e, 0xe6, 0x68, 0x12, 0xda, 0x34, 0x9a, 0x27, 0x11, 0x92, 0xc6, 0xc6, 0xc0, 0x5a, 0x44, 0xb7, 0x04, 0x46, 0x07, 0xee, 0x32, 0xfd, 0x6a, 0xa0, 0x5d, 0x4a, 0xd8, 0xe5, 0xea, 0xe9, 0xa9, 0x7a, 0x88, 0x0e, 0x21, 0x85, 0x7b, 0x81, 0xc6, 0x00, 0xc6, 0x72, 0xc7, 0xad, 0x08, 0x6d, 0xd0, 0xac, 0x69, 0x98, 0x67, 0x61, 0x7b, 0x19, 0x78, 0xe7, 0x65, 0xe1, 0x1d, 0x83, 0xb1, 0x9d, 0x38, 0x4f, 0x4a, 0xb2, 0xf0, 0x9d, 0xb4, 0x8b, 0x60, 0xef, 0x27, 0xad, 0xb9, 0x7b, 0x72, 0xda, 0xbe, 0x67, 0x54, 0xc3, 0x1e, 0x0f, 0x0b, 0x2b, 0x23, 0x93, 0xb6, 0x61, 0xfc, 0x5b, 0x12, 0x26, 0x05, 0x32, 0xf7, 0x6c, 0x0d, 0x90, 0x26, 0x29, 0xce, 0xbc, 0xb0, 0x6a, 0x8a, 0x0e, 0xe6, 0xce, 0x9c, 0x80, 0xd4, 0x70, 0x61, 0x54, 0x8d, 0x6c, 0x2d, 0x81, 0x5c, 0x5f, 0x1a, 0xf9, 0x42, 0xff, 0xc5, 0x17, 0xe4, 0xfd, 0x80, 0x7b, 0x31, 0xd7, 0x7a, 0xb6, 0x78, 0x13, 0xf2, 0x06, 0xe0, 0x16, 0xef, 0x02, 0x92, 0x95, 0xbe, 0xe7, 0xf1, 0x80, 0xaf, 0x46, 0x9b, 0xc7, 0x65, 0x58, 0xa2, 0x1b, 0x34, 0x3f, 0xe3, 0x64, 0x0f, 0x42, 0xea, 0x2a, 0x63, 0xb7, 0x39, 0x9a, 0x0f, 0x56, 0x93, 0xfe, 0x2f, 0x0e, 0x13, 0x5c, 0xdd, 0x9a, 0x27, 0x34, 0x17, 0xe5, 0x90, 0xb3, 0xd4, 0xf6, 0x2f, 0x03, 0x2e, 0xe7, 0xd7, 0x62, 0x2f, 0xfa, 0xaa, 0xaf, 0xee, 0x07, 0x19, 0x57, 0x84, 0x6e, 0x98, 0x0f, 0xf3, 0xd8, 0x02, 0x43, 0x5d, 0x1f, 0xfc, 0xe0, 0xa5, 0xc0, 0x02, 0x9c, 0x9e, 0x8d, 0x50, 0xe6, 0x5d, 0x48, 0x56, 0xf3, 0xa4, 0x4e, 0x4f, 0x6d, 0xf4, 0x7e, 0x6c, 0x53, 0xc8, 0x56, 0x0a, 0xd6, 0x16, 0xba, 0xb1, 0xa1, 0x49, 0x9e, 0x74, 0xf0, 0xee, 0x83, 0xa9, 0xf0, 0x33, 0x36, 0xfa, 0x0a, 0x61, 0x0f, 0xce, 0x53, 0xad, 0x48, 0x53, 0x37, 0x92, 0x94, 0x97, 0xa4, 0x39, 0x38, 0x52, 0x76, 0xd2, 0xb8, 0x8f, 0xa6, 0x68, 0xe4, 0xc7, 0x60, 0xd2, 0x10, 0x8d, 0x79, 0x84, 0x5f, 0xff, 0xaf, 0x9e, 0x86, 0x70, 0x1b, 0x4c, 0x1a, 0x16, 0xb7, 0x73, 0x89, 0x1c, 0x26, 0xad, 0xa5, 0xdc, 0xa9, 0x87, 0xfb, 0x20, 0x39, 0x99, 0x24, 0x42, 0x3d, 0xa6, 0x5d, 0x29, 0x8c, 0x15, 0x1b, 0x9f, 0x73, 0xaf, 0x69, 0x77, 0x2a, 0xc6, 0x9c, 0x7d, 0x74, 0x80, 0xc6, 0x45, 0x6c, 0x1e, 0x8f, 0x86, 0x52, 0x92, 0x65, 0xc6, 0x7c, 0xe3, 0xe3, 0x52, 0x0e, 0x31, 0xef, 0xb8, 0x3a, 0xb8, 0x8d, 0x3a, 0x38, 0x15, 0x68, 0x1e, 0xc0, 0xbc, 0x06, 0xda, 0xc1, 0x7c, 0xce, 0x53, 0x8b, 0x3e, 0x92, 0xa7, 0xd6, 0x37, 0xf9, 0xae, 0xb1, 0x5f, 0x21, 0x84, 0xcd, 0x67, 0x78, 0x14, 0xba, 0x90, 0xfa, 0x0d, 0x21, 0x15, 0x5c, 0x96, 0xed, 0x7b, 0x8b, 0x85, 0x75, 0x06, 0x6e, 0xa7, 0xba, 0x92, 0x5d, 0x9d, 0x16, 0xac, 0xeb, 0xde, 0xc1, 0x5e, 0xcb, 0xee, 0x01, 0xda, 0xd3, 0x2e, 0xb1, 0x79, 0x1a, 0x29, 0x3e, 0xed, 0x12, 0x93, 0x6e, 0x75, 0x4d, 0xf0, 0xe8, 0xdd, 0x47, 0xef, 0x2e, 0x7e, 0x1a, 0xe6, 0xb5, 0x00, 0xa6, 0x98, 0x87, 0x5c, 0xcc, 0x3d, 0x4a, 0x7d, 0xd8, 0x8d, 0x7c, 0xcc, 0x3d, 0x5d, 0x67, 0xe5, 0x28, 0xb5, 0xc2, 0x51, 0x0a, 0x76, 0x37, 0xc4, 0xad, 0xcd, 0x3c, 0xaa, 0x5f, 0x21, 0xec, 0x54, 0x14, 0x1d, 0x9c, 0x85, 0x94, 0x04, 0xf2, 0x29, 0x36, 0x87, 0x17, 0x14, 0x5d, 0x8f, 0xdb, 0xf2, 0x4f, 0xe8, 0x7a, 0xf3, 0x3d, 0x24, 0x49, 0x52, 0x31, 0xcd, 0x2e, 0x9e, 0x0f, 0x58, 0xfb, 0x7b, 0x3a, 0xed, 0xf9, 0x38, 0xb2, 0xe9, 0xd6, 0xe0, 0xd8, 0x81, 0xd0, 0x74, 0xa4, 0x18, 0x5f, 0x66, 0x29, 0xd8, 0x5d, 0xcf, 0x62, 0x2f, 0xb6, 0x2f, 0xbe, 0xcb, 0xf9, 0x26, 0xbe, 0xd3, 0x63, 0x94, 0x5a, 0x91, 0xd6, 0xf6, 0x3a, 0xbf, 0x2b, 0x6d, 0x8d, 0xd3, 0x6c, 0x58, 0x12, 0x26, 0xcb, 0x94, 0xbc, 0x4f, 0x02, 0x38, 0x3f, 0xe6, 0x63, 0x8c, 0xbe, 0x8c, 0x65, 0x89, 0x3a, 0xfc, 0xa2, 0x1d, 0x21, 0x37, 0xae, 0x19, 0x65, 0xb2, 0xe5, 0xe0, 0xd0, 0x41, 0xb2, 0x2c, 0x5a, 0x36, 0x13, 0xdb, 0x65, 0xc3, 0x59, 0x46, 0x2d, 0x6b, 0xbe, 0x87, 0xf0, 0x6f, 0xa0, 0x1e, 0xe6, 0x21, 0x2c, 0x7d, 0xcd, 0x03, 0x47, 0xef, 0x26, 0x5b, 0xba, 0xed, 0xf6, 0xa3, 0x77, 0x27, 0xf5, 0xe2, 0x81, 0x16, 0xd0, 0x0a, 0x72, 0xe1, 0x90, 0x8d, 0x9d, 0x69, 0x8d, 0xdd, 0x37, 0xf5, 0x97, 0x1f, 0x43, 0x78, 0x19, 0x5c, 0xdc, 0x4c, 0x50, 0x17, 0x70, 0x54, 0x16, 0xbc, 0x8a, 0x7e, 0xb8, 0xea, 0x85, 0xdf, 0x19, 0xae, 0xfa, 0xa3, 0x6d, 0x14, 0xb9, 0x92, 0xb0, 0x56, 0xd6, 0x7c, 0xb7, 0x73, 0x66, 0xa7, 0x2f, 0xbc, 0x29, 0xe6, 0x11, 0xa3, 0x19, 0x39, 0xf4, 0x49, 0xb1, 0x42, 0xfc, 0xb5, 0xe2, 0x38, 0x8c, 0xd2, 0x2d, 0xcb, 0x52, 0x7d, 0xf3, 0x90, 0x51, 0xcf, 0x5d, 0x36, 0xb8, 0x75, 0x18, 0xb9, 0xff, 0x03, 0xf2, 0x02, 0xa4, 0xcf, 0x01, 0xb6, 0x3a, 0xdd, 0x14, 0x9f, 0xec, 0xce, 0x86, 0xa1, 0xd3, 0xc6, 0xb1, 0x0b, 0x35, 0x0b, 0xbe, 0x3b, 0x19, 0x66, 0x91, 0x5e, 0xe7, 0xef, 0x3e, 0x03, 0x66, 0xe7, 0x52, 0x1e, 0x03, 0x66, 0xa6, 0xb3, 0x97, 0xc0, 0xcc, 0x81, 0xe1, 0x75, 0x59, 0x9b, 0x97, 0xe7, 0x88, 0x6e, 0x72, 0x7b, 0xab, 0x45, 0x2d, 0x42, 0xbb, 0x18, 0x4e, 0xd2, 0xc1, 0xc1, 0x83, 0xa9, 0xe2, 0x0d, 0x36, 0xd0, 0x5c, 0xa4, 0xb5, 0x16, 0x7a, 0xc6, 0x0b, 0x5a, 0x5e, 0x74, 0x70, 0x17, 0xce, 0x86, 0x76, 0xd0, 0x3b, 0x10, 0xb7, 0x2a, 0x1e, 0xcb, 0x91, 0x21, 0xd9, 0x7c, 0x70, 0x1d, 0x62, 0x92, 0x79, 0x07, 0xc9, 0x12, 0x55, 0x28, 0xb0, 0x08, 0xe7, 0xe0, 0x54, 0x75, 0x91, 0xaf, 0x1b, 0x6e, 0x43, 0x8e, 0xc5, 0x46, 0xb1, 0x63, 0xaf, 0xa3, 0xab, 0xc3, 0x13, 0x95, 0x17, 0xd0, 0x7c, 0x69, 0x81, 0xdd, 0x42, 0x23, 0xfc, 0x0d, 0xa3, 0x65, 0x1b, 0x7c, 0xf7, 0x0b, 0x7f, 0x9a, 0x47, 0x3d, 0xe6, 0x5d, 0x34, 0x13, 0x0f, 0xec, 0xc6, 0x56, 0x2d, 0x0b, 0x65, 0xf0, 0x15, 0x42, 0x32, 0xb2, 0xe7, 0x4f, 0x4f, 0xa5, 0x47, 0x81, 0x69, 0x46, 0xa6, 0xb7, 0x2b, 0x44, 0x6b, 0xfe, 0xd4, 0x97, 0x6d, 0xcd, 0x9f, 0x1e, 0xe5, 0xde, 0xaf, 0x86, 0x3a, 0x6f, 0xc8, 0xb7, 0xc1, 0x8f, 0x73, 0xec, 0xd8, 0x06, 0x4f, 0xa3, 0x56, 0xa4, 0x32, 0x5f, 0x3c, 0x7a, 0x30, 0x8c, 0x2b, 0x28, 0x1c, 0x97, 0x9b, 0xc3, 0xa5, 0x34, 0x93, 0xe1, 0xa8, 0xe7, 0xc5, 0x96, 0x7b, 0x94, 0x2b, 0x63, 0x6f, 0x69, 0x51, 0xae, 0x81, 0x65, 0x57, 0xaa, 0xbd, 0xfe, 0x60, 0xaa, 0xf4, 0xaf, 0x6c, 0x42, 0x2b, 0xd1, 0x8e, 0xff, 0xf2, 0xa0, 0x10, 0xec, 0xbe, 0xfb, 0xb5, 0xd2, 0xf0, 0x43, 0x34, 0x53, 0x4a, 0x83, 0xbe, 0x61, 0x4d, 0x55, 0xa6, 0x0a, 0xfd, 0x2d, 0x23, 0xc7, 0xcd, 0xe1, 0xaf, 0x73, 0x7e, 0xeb, 0x7d, 0xeb, 0x35, 0x1b, 0xb7, 0x4d, 0x0a, 0x3d, 0x14, 0xbd, 0xbb, 0xe5, 0xfb, 0x2d, 0xeb, 0xf7, 0x30, 0xcc, 0xc6, 0xc6, 0x10, 0x2a, 0x65, 0xb8, 0xfa, 0x75, 0xf6, 0xc6, 0xff, 0xfe, 0xb7, 0x3f, 0x78, 0x89, 0xf0, 0x32, 0x3e, 0xf3, 0xef, 0x02, 0x8d, 0x68, 0x9b, 0x92, 0xde, 0x38, 0xe2, 0x7b, 0x7c, 0x7b, 0x80, 0x42, 0xb5, 0xe3, 0x22, 0x96, 0xf6, 0x56, 0x6f, 0x1c, 0x7f, 0xcb, 0xd3, 0xb3, 0xbb, 0x77, 0x8d, 0xe6, 0xcf, 0xb8, 0x93, 0x9a, 0x9c, 0x76, 0x6b, 0x8e, 0xde, 0x1e, 0x2d, 0xbf, 0xb7, 0x57, 0xcb, 0xe3, 0x52, 0x30, 0x2f, 0x7e, 0xaf, 0xce, 0x40, 0xaa, 0xac, 0xf6, 0xc2, 0x27, 0x83, 0x19, 0x4b, 0xb0, 0x93, 0x85, 0x06, 0x1c, 0xae, 0x7a, 0xb7, 0x33, 0xed, 0x53, 0xc0, 0x34, 0xcf, 0x76, 0x28, 0xea, 0xcc, 0xca, 0x93, 0x37, 0x37, 0x6d, 0xcc, 0xa4, 0xbe, 0x05, 0x53, 0xd7, 0x64, 0x52, 0x4f, 0xcb, 0xb8, 0x02, 0x10, 0xcd, 0xb8, 0x1d, 0x91, 0xcd, 0x98, 0x4b, 0xd7, 0xcc, 0x6a, 0xd8, 0xca, 0xa7, 0x29, 0x30, 0x5f, 0xad, 0x90, 0xf2, 0x9d, 0xd9, 0x0d, 0x51, 0xa4, 0x10, 0xf1, 0x57, 0xfe, 0xfe, 0x4c, 0xc2, 0xdc, 0x96, 0x99, 0x8d, 0xac, 0x4d, 0x5a, 0x21, 0x34, 0x26, 0x4c, 0x41, 0xa4, 0x03, 0xb1, 0xe5, 0x2a, 0x42, 0x64, 0x56, 0x4d, 0x5a, 0x8f, 0xe7, 0x7c, 0x23, 0xe2, 0xc7, 0x5b, 0x90, 0x2e, 0x9c, 0xc7, 0xf8, 0xf1, 0x58, 0x09, 0x74, 0xc2, 0x85, 0x9e, 0x92, 0x49, 0x1a, 0xe2, 0xbe, 0x84, 0xc9, 0x37, 0x59, 0x83, 0x4f, 0x6d, 0x19, 0xb9, 0xc1, 0x81, 0x4b, 0xe4, 0x06, 0x2f, 0x8f, 0x93, 0x5d, 0xea, 0x82, 0x0a, 0x1d, 0xdb, 0x9b, 0x96, 0x5d, 0x96, 0xd2, 0xad, 0x26, 0xd5, 0xc4, 0x67, 0x49, 0x75, 0x1e, 0xda, 0x7f, 0x7f, 0x02, 0x39, 0xf5, 0x9d, 0x0d, 0x17, 0xf4, 0xe7, 0x78, 0x7c, 0x16, 0x92, 0x3c, 0x71, 0xe7, 0xcf, 0x70, 0xae, 0x57, 0xc8, 0xcd, 0xe9, 0x95, 0xfc, 0x3a, 0x5e, 0xc9, 0x91, 0x93, 0x7b, 0x48, 0xc8, 0x38, 0x69, 0x34, 0x26, 0xe5, 0x9d, 0xa9, 0xf8, 0x4b, 0xf9, 0x95, 0x30, 0x05, 0xdf, 0xfb, 0x10, 0xdf, 0x16, 0xa2, 0x1b, 0xa9, 0x99, 0x78, 0xbe, 0x66, 0x41, 0xaa, 0xda, 0x21, 0x6c, 0x4c, 0x25, 0xff, 0x0a, 0x31, 0x74, 0x49, 0x28, 0x9f, 0xbf, 0xc0, 0x74, 0x98, 0xcb, 0xb0, 0x35, 0xff, 0x8c, 0xad, 0x55, 0xbf, 0x48, 0xbc, 0xa1, 0x3e, 0x8f, 0xf3, 0xdc, 0xa3, 0x47, 0x84, 0x76, 0xaa, 0x69, 0x47, 0xf2, 0xaf, 0x31, 0x8d, 0x2d, 0x94, 0x9f, 0x18, 0xc3, 0xaf, 0xc7, 0x93, 0x0a, 0xaf, 0x51, 0x63, 0x9a, 0x35, 0x94, 0x8f, 0xdf, 0x9b, 0xb1, 0xb6, 0x16, 0xac, 0x2d, 0xdb, 0x56, 0x8a, 0x17, 0x65, 0x6a, 0x8b, 0x38, 0xe3, 0xcf, 0xd4, 0xd7, 0x87, 0xf9, 0xdc, 0x3e, 0xa1, 0x8d, 0xb7, 0x7f, 0x7e, 0x1a, 0x6c, 0x55, 0x25, 0x51, 0x68, 0xf1, 0x79, 0x5c, 0xff, 0xd2, 0x64, 0x17, 0xfe, 0xde, 0x86, 0xed, 0x8c, 0xe0, 0x3b, 0x8a, 0xef, 0x76, 0x7c, 0x47, 0xf0, 0x5d, 0x8b, 0x79, 0xd7, 0x6b, 0x74, 0xd7, 0x8f, 0x83, 0xe3, 0x5b, 0x79, 0x65, 0x52, 0xb8, 0x34, 0x2b, 0xb7, 0x36, 0x9f, 0xda, 0x3a, 0x16, 0x16, 0x6d, 0x1d, 0x6b, 0xa5, 0xdc, 0xb1, 0x3d, 0x15, 0xdc, 0xba, 0x3c, 0x6c, 0xab, 0x84, 0x58, 0xef, 0xd9, 0x04, 0xdd, 0x22, 0xf2, 0xd5, 0xe6, 0x75, 0x72, 0xd8, 0x39, 0x82, 0x23, 0x14, 0xf4, 0x3c, 0x92, 0xf8, 0xea, 0x05, 0xcd, 0x83, 0xae, 0x91, 0x85, 0x17, 0xc6, 0x1c, 0x48, 0x49, 0x16, 0xd0, 0x49, 0x9a, 0x90, 0x4f, 0xd7, 0xd9, 0x5a, 0xc1, 0x3d, 0x13, 0xda, 0x53, 0xf7, 0x67, 0xdb, 0xa3, 0x72, 0xbf, 0x55, 0x1a, 0xfd, 0x36, 0xd7, 0xe8, 0xb3, 0x3c, 0x7c, 0x23, 0xd4, 0x31, 0x94, 0xea, 0xad, 0x4e, 0xac, 0xf7, 0xc5, 0xcd, 0xa2, 0xde, 0x17, 0x9f, 0x10, 0xf5, 0x4e, 0x98, 0x34, 0x3b, 0xd5, 0x09, 0xeb, 0x96, 0x64, 0xbb, 0xda, 0x8e, 0xec, 0x7e, 0x82, 0xfc, 0xd9, 0x7a, 0xf3, 0x15, 0xe3, 0xf8, 0x5f, 0xd6, 0x9b, 0x87, 0x29, 0x5f, 0x5e, 0x53, 0x81, 0xf6, 0x76, 0x8c, 0x3c, 0x8c, 0x3d, 0x1d, 0xe4, 0xa3, 0x81, 0x4f, 0xa5, 0xe7, 0x68, 0x4e, 0x80, 0xa1, 0xf3, 0x4e, 0xf7, 0x0e, 0xd0, 0x3d, 0x1c, 0xe2, 0x0e, 0x0e, 0x0f, 0x9d, 0x47, 0x1a, 0x26, 0x9b, 0xfd, 0x64, 0xc1, 0xdf, 0x90, 0x35, 0x2e, 0x21, 0x99, 0x25, 0xe2, 0x9a, 0x8e, 0xac, 0x55, 0x7f, 0xe6, 0x66, 0x1d, 0xd7, 0x45, 0xc1, 0x75, 0xdd, 0x0a, 0xb0, 0x60, 0x0d, 0x2a, 0x32, 0x37, 0x00, 0x88, 0x37, 0xf2, 0x47, 0xc4, 0xa9, 0x64, 0x73, 0x88, 0x79, 0x58, 0xcf, 0xd0, 0x4a, 0x69, 0x34, 0xc9, 0xbb, 0x39, 0x7b, 0x0b, 0x40, 0xee, 0x4e, 0x8c, 0x56, 0xe6, 0x0d, 0x0b, 0xf9, 0x6e, 0x6c, 0x04, 0xf1, 0xa8, 0xb5, 0xd7, 0x99, 0x73, 0x4f, 0x01, 0xae, 0x2e, 0xa1, 0xda, 0x64, 0xbe, 0x71, 0xc7, 0xc2, 0x24, 0xd2, 0xdc, 0xa7, 0x3b, 0x00, 0xd6, 0xea, 0xda, 0x49, 0xde, 0x8b, 0xab, 0x52, 0x49, 0x3e, 0x22, 0x27, 0x67, 0x88, 0x73, 0xac, 0x32, 0x6b, 0x0b, 0x3e, 0x33, 0x12, 0x3b, 0x2b, 0x6f, 0x4e, 0xce, 0xa0, 0xfd, 0x93, 0x8b, 0x9d, 0x64, 0x35, 0x33, 0xbb, 0x07, 0x06, 0xc8, 0xbd, 0x8b, 0x5b, 0x46, 0xda, 0xa3, 0x24, 0xaf, 0x4d, 0x6b, 0x2f, 0xd1, 0xb9, 0x42, 0x92, 0x4e, 0x6e, 0xf9, 0xb5, 0x36, 0xf7, 0x99, 0xfd, 0x31, 0x0f, 0xdf, 0x34, 0x65, 0x51, 0x36, 0x6b, 0xff, 0x2f, 0x6f, 0xef, 0x02, 0x1f, 0x45, 0x7d, 0x2d, 0x8e, 0x9f, 0x99, 0x2c, 0x9b, 0x25, 0x2c, 0x71, 0x09, 0x31, 0x4d, 0x69, 0x8a, 0xc3, 0xba, 0x2c, 0xcb, 0x66, 0xc9, 0xc6, 0x34, 0xa5, 0xb9, 0x98, 0xe2, 0x66, 0xb3, 0x09, 0x9b, 0x25, 0xa4, 0x71, 0xa1, 0x34, 0xa5, 0xd4, 0x0e, 0x21, 0xd9, 0xe5, 0x91, 0x84, 0x6d, 0x8c, 0xb9, 0x94, 0x7f, 0x7e, 0x74, 0x93, 0x00, 0x06, 0x44, 0x12, 0x01, 0x29, 0xd7, 0xab, 0xbd, 0xde, 0x5e, 0xeb, 0x45, 0x44, 0x8d, 0x14, 0x29, 0xa5, 0xd4, 0xa6, 0xd4, 0x7a, 0xd1, 0x52, 0x6f, 0x50, 0x4a, 0xd1, 0x52, 0x45, 0xcb, 0x55, 0x04, 0x44, 0x8a, 0xd4, 0x42, 0x1a, 0x32, 0xff, 0x73, 0xce, 0x77, 0xf6, 0x91, 0x00, 0xd6, 0xf6, 0xf7, 0x48, 0x3e, 0xb3, 0x33, 0xf3, 0x9d, 0xef, 0xfb, 0x71, 0xbe, 0xe7, 0x9c, 0xef, 0x79, 0x18, 0xb0, 0xf6, 0x24, 0x8f, 0x4c, 0x90, 0xa5, 0x6e, 0x84, 0x6d, 0x8c, 0x0c, 0x2a, 0xcf, 0xea, 0x27, 0xd9, 0x3b, 0xa6, 0xa1, 0x5f, 0x14, 0x1e, 0x1a, 0x47, 0x78, 0x7b, 0x58, 0xa9, 0x43, 0x19, 0x82, 0x3e, 0x16, 0x84, 0x61, 0x99, 0xad, 0x50, 0x9e, 0x42, 0xa7, 0xd0, 0xc4, 0xe1, 0xd5, 0xa9, 0xe7, 0xaf, 0x5e, 0x3d, 0xca, 0x12, 0x4f, 0x25, 0xb9, 0x25, 0x57, 0x8f, 0xe7, 0xc9, 0xb9, 0xde, 0xab, 0x47, 0x87, 0xeb, 0xa3, 0x3b, 0x3c, 0xb3, 0x3e, 0xd0, 0x4e, 0xb0, 0x46, 0xf0, 0x18, 0x96, 0x9d, 0x64, 0x5d, 0x60, 0xdc, 0x6d, 0xa6, 0x63, 0xd8, 0x10, 0xeb, 0xfb, 0xee, 0x22, 0xaf, 0x34, 0xd0, 0x63, 0x1b, 0x6b, 0xec, 0x40, 0x8a, 0xf4, 0x84, 0xdb, 0x48, 0x7c, 0x5a, 0xe2, 0x63, 0xea, 0xba, 0x30, 0xb2, 0x2d, 0xcd, 0x9a, 0xc2, 0x31, 0x1f, 0x57, 0xeb, 0x86, 0xc5, 0x72, 0x91, 0x85, 0x56, 0x5d, 0xd6, 0xc0, 0x13, 0xae, 0x74, 0xa7, 0xcd, 0x61, 0x9b, 0xa8, 0x55, 0xdb, 0xec, 0x90, 0xd7, 0x51, 0xb5, 0xad, 0x86, 0xec, 0x11, 0x75, 0x9a, 0xdb, 0xb1, 0x2e, 0x43, 0xb5, 0x79, 0x88, 0xcf, 0x00, 0xe9, 0xe7, 0x0c, 0xfd, 0x3e, 0x6c, 0x1a, 0xd7, 0x06, 0xee, 0xa1, 0x13, 0xc1, 0xa8, 0x12, 0x28, 0xfd, 0x60, 0xe8, 0xc4, 0x6b, 0x7d, 0x4a, 0x4a, 0x30, 0x9a, 0xe0, 0x1e, 0x63, 0x2b, 0x8e, 0x5b, 0x53, 0x87, 0xd7, 0xd8, 0x85, 0xed, 0xb8, 0x7a, 0x82, 0x77, 0xc9, 0x03, 0xee, 0x54, 0x61, 0x21, 0xee, 0x5b, 0xd5, 0x38, 0xeb, 0xdd, 0xe2, 0x79, 0x91, 0x43, 0xf7, 0xb4, 0x95, 0x5e, 0xf6, 0xd1, 0x69, 0x98, 0xf3, 0xe7, 0xd3, 0xe0, 0xcd, 0xbb, 0x7a, 0x42, 0x35, 0xd8, 0x3c, 0xde, 0x09, 0xd6, 0xb1, 0xc6, 0x76, 0x4d, 0xbb, 0x7a, 0x22, 0xde, 0x5e, 0x61, 0x6f, 0xe2, 0xa8, 0x68, 0xcb, 0xd5, 0x78, 0x8b, 0x87, 0xb6, 0xea, 0x2d, 0xa9, 0x42, 0x0a, 0x45, 0xb4, 0x64, 0xab, 0x1d, 0x1e, 0x3c, 0xf8, 0xe6, 0x86, 0xbc, 0x7b, 0xc9, 0xaf, 0x51, 0x52, 0x6b, 0x5c, 0x25, 0x7f, 0x2e, 0xe2, 0xd6, 0x5c, 0xd5, 0x5b, 0x73, 0xf5, 0x44, 0xb0, 0x53, 0x99, 0x55, 0x8a, 0x75, 0x7c, 0xed, 0x97, 0x23, 0xda, 0x72, 0xd4, 0x3a, 0x46, 0xef, 0x3d, 0x95, 0xb4, 0x98, 0x45, 0xaf, 0x0d, 0x39, 0xe2, 0xbd, 0x96, 0x5a, 0x26, 0xca, 0xda, 0x6c, 0x83, 0xbc, 0xfb, 0xaa, 0x36, 0x73, 0x39, 0x1d, 0x23, 0x7b, 0x2d, 0xa9, 0x9c, 0xa8, 0x5e, 0x4e, 0x9f, 0x22, 0x0f, 0x2b, 0x69, 0x36, 0x96, 0x34, 0xed, 0xea, 0xf1, 0x64, 0xcd, 0xed, 0xb0, 0x05, 0x43, 0x8e, 0x8a, 0x77, 0xe1, 0xbf, 0x03, 0x6b, 0xc0, 0xe7, 0xe2, 0xd5, 0xdd, 0xaa, 0xad, 0x62, 0xe0, 0x6a, 0x8f, 0x92, 0xd1, 0xbb, 0x25, 0x3c, 0x91, 0x43, 0xb7, 0xb2, 0x8e, 0xf5, 0xd6, 0x66, 0x47, 0xb9, 0xc4, 0x7d, 0xce, 0x1e, 0x3b, 0x10, 0x87, 0x6c, 0x72, 0x63, 0x1e, 0x38, 0xb2, 0x57, 0x32, 0x5b, 0xaa, 0xb6, 0x21, 0xcd, 0x86, 0x65, 0xd0, 0x08, 0xeb, 0x70, 0x23, 0xd5, 0x9d, 0x0b, 0x06, 0xb6, 0x41, 0x4b, 0xda, 0x0a, 0xe3, 0xdc, 0x19, 0xc9, 0xd6, 0x67, 0x04, 0xc7, 0x31, 0x49, 0x2f, 0x64, 0xd6, 0x6b, 0xff, 0x95, 0xfc, 0x8e, 0x25, 0xb8, 0xf2, 0xd6, 0x25, 0xca, 0x66, 0x1b, 0xb6, 0x32, 0x69, 0xdb, 0x5e, 0xdd, 0x25, 0xce, 0x15, 0x85, 0x25, 0x66, 0x3a, 0xf3, 0xb1, 0x06, 0x6f, 0x0d, 0x40, 0xda, 0x64, 0xdc, 0x83, 0xc1, 0x80, 0xbf, 0x99, 0x60, 0xc6, 0xdf, 0xec, 0x84, 0x7f, 0x95, 0xa1, 0xcd, 0x42, 0xd3, 0x84, 0x65, 0x76, 0x86, 0xd9, 0x32, 0x23, 0xb8, 0xc6, 0xde, 0x02, 0x24, 0xd6, 0x2a, 0x20, 0x6b, 0x32, 0x96, 0x98, 0x4d, 0x96, 0xe4, 0xbd, 0x5f, 0x68, 0xac, 0xde, 0x31, 0x23, 0x4f, 0x72, 0xa6, 0xb8, 0x0c, 0xc3, 0x39, 0x61, 0x76, 0x0f, 0xd9, 0xfe, 0xba, 0x43, 0xab, 0x35, 0xda, 0xd8, 0x52, 0xba, 0x22, 0x27, 0x5b, 0x2e, 0x65, 0xcf, 0x4b, 0xfb, 0xc8, 0x8e, 0x6a, 0x3f, 0x71, 0x8d, 0x2a, 0xf1, 0xaa, 0x76, 0x2c, 0x87, 0xc3, 0x53, 0xca, 0xe0, 0x30, 0x9f, 0x11, 0x6c, 0xa7, 0xb3, 0x25, 0xb2, 0x82, 0x2a, 0xec, 0x0d, 0x2a, 0xb9, 0xd0, 0xcb, 0x3e, 0x62, 0xcb, 0xa0, 0xd8, 0x5d, 0x0e, 0x1e, 0x92, 0xe3, 0x60, 0xfb, 0xce, 0x7e, 0xf0, 0xb9, 0x67, 0x83, 0xbf, 0xe4, 0x43, 0x58, 0x58, 0x7a, 0x85, 0x6c, 0x3c, 0xe3, 0x0e, 0x50, 0x1c, 0xb7, 0xe4, 0x7c, 0xc2, 0x09, 0x08, 0xc3, 0x97, 0x4c, 0xf1, 0x40, 0xef, 0x94, 0x4a, 0x38, 0xcc, 0x7c, 0xb9, 0x4c, 0x9d, 0x47, 0xec, 0x10, 0x6f, 0xcc, 0x51, 0x54, 0xdc, 0x29, 0xb3, 0x06, 0x34, 0x5b, 0xd5, 0x96, 0x9a, 0xee, 0xde, 0x75, 0x24, 0x15, 0x53, 0xb5, 0xc5, 0x0a, 0xc2, 0xae, 0x39, 0xce, 0x2e, 0x5f, 0xc2, 0x8f, 0x97, 0x96, 0xa7, 0xca, 0xab, 0x34, 0x3a, 0xc7, 0x22, 0x29, 0x43, 0xa1, 0x13, 0xcb, 0x52, 0x10, 0x8e, 0x40, 0x47, 0xd8, 0x26, 0x7c, 0x7d, 0x0b, 0xa9, 0x31, 0x65, 0x2a, 0x58, 0x7a, 0x49, 0xe7, 0x39, 0xdd, 0xba, 0x14, 0xcc, 0x3f, 0x3a, 0x0d, 0xe6, 0xaf, 0xb1, 0x16, 0x3e, 0xd2, 0x67, 0xb7, 0xc4, 0xce, 0x94, 0x8b, 0x67, 0x38, 0x24, 0x3b, 0x9d, 0x12, 0x93, 0x66, 0x70, 0x9d, 0xd0, 0x1c, 0x19, 0x26, 0x97, 0x27, 0xec, 0xf9, 0x39, 0xc1, 0x3c, 0xcc, 0x7a, 0x39, 0x71, 0x95, 0x0b, 0xcc, 0x4f, 0x91, 0x3e, 0xbd, 0x36, 0x18, 0x72, 0x1d, 0xeb, 0xb0, 0x97, 0xfe, 0xee, 0x97, 0x42, 0xe7, 0x82, 0x35, 0x3d, 0x48, 0xa3, 0x3e, 0xcb, 0x86, 0x33, 0xe0, 0xb9, 0xb3, 0x60, 0x88, 0xdb, 0xe7, 0x31, 0xea, 0x1c, 0xf5, 0x0f, 0x16, 0x16, 0x6b, 0x27, 0x68, 0xae, 0xe0, 0xe8, 0x9d, 0x66, 0x9d, 0x46, 0xc9, 0x51, 0x15, 0xc9, 0xc6, 0xde, 0x55, 0x90, 0x7a, 0x1b, 0x66, 0x75, 0x86, 0xad, 0x1a, 0xf9, 0x84, 0x16, 0xdd, 0x6c, 0xf2, 0x58, 0x50, 0x18, 0xc0, 0xdd, 0x3e, 0xe4, 0x72, 0x2f, 0x47, 0xfc, 0x9c, 0x7e, 0x2d, 0x90, 0x8f, 0xbf, 0x99, 0x64, 0x99, 0x0f, 0x2e, 0x5f, 0x94, 0xc0, 0xa1, 0xf8, 0x6c, 0xa5, 0xd6, 0x39, 0xae, 0x06, 0xe6, 0x2b, 0x90, 0xc6, 0xbe, 0x89, 0xb5, 0xeb, 0x0e, 0x09, 0x9f, 0x7c, 0x44, 0x23, 0x08, 0x5d, 0x0d, 0xf2, 0x55, 0x1e, 0xd3, 0xb0, 0x0b, 0xa5, 0xc5, 0x38, 0xa2, 0x6a, 0x83, 0x92, 0x11, 0xd3, 0xb4, 0xe3, 0x1e, 0x48, 0xd2, 0xb3, 0x53, 0x83, 0x2c, 0xef, 0x98, 0xa4, 0x6d, 0xf7, 0xbd, 0x5f, 0xab, 0x13, 0xed, 0xba, 0x85, 0xa5, 0xde, 0xfb, 0x56, 0xb0, 0x66, 0xf3, 0xf7, 0xfa, 0x54, 0xf9, 0x7b, 0xbf, 0x8e, 0x6b, 0xde, 0xe1, 0x0e, 0xed, 0xbf, 0xdb, 0x01, 0xc9, 0xf9, 0x08, 0xab, 0x0e, 0xec, 0xe5, 0x57, 0x8b, 0xe9, 0x71, 0x5c, 0xd7, 0x96, 0xdf, 0xc3, 0x93, 0xbc, 0xf0, 0x70, 0xf2, 0x79, 0xe4, 0x75, 0xe2, 0x3c, 0x8a, 0x71, 0x1e, 0x4d, 0xc4, 0xd1, 0xf5, 0xb5, 0x2c, 0xe4, 0x71, 0x58, 0xb9, 0x73, 0x92, 0x07, 0x88, 0x03, 0x65, 0x4e, 0xf6, 0xf4, 0xee, 0xd2, 0xfd, 0xb4, 0xea, 0xfc, 0xf3, 0xfd, 0xda, 0x61, 0xe1, 0x11, 0x95, 0xfc, 0xaf, 0xde, 0xa0, 0x8c, 0xc3, 0x58, 0xc6, 0xe1, 0x58, 0x19, 0x42, 0xba, 0x8d, 0x6c, 0x2b, 0x91, 0x44, 0xdb, 0x35, 0x52, 0x13, 0xaa, 0x38, 0xd7, 0xc9, 0x6c, 0xa1, 0xd3, 0x97, 0x18, 0xce, 0x83, 0xb0, 0x66, 0x1a, 0xc6, 0x9d, 0xa6, 0x91, 0x0d, 0xa9, 0x95, 0x90, 0x43, 0x96, 0xaf, 0x12, 0xd2, 0x7e, 0x56, 0xdf, 0x6b, 0x2f, 0x8c, 0x80, 0x30, 0x8e, 0xd8, 0x09, 0x44, 0x0b, 0x70, 0x29, 0x29, 0xc9, 0xb6, 0xb0, 0x08, 0xda, 0x78, 0x72, 0x62, 0xb6, 0xb0, 0x6e, 0x50, 0xe7, 0xc7, 0xb0, 0xce, 0x8f, 0x0d, 0xef, 0x3b, 0x5a, 0x6b, 0x56, 0x82, 0xb0, 0xd3, 0x15, 0x2f, 0x69, 0xa0, 0x92, 0x6f, 0x9b, 0xfe, 0x2e, 0x3e, 0xd1, 0xd2, 0x6a, 0xad, 0xca, 0x52, 0x92, 0xf6, 0x3e, 0x72, 0xa8, 0xf4, 0x34, 0x48, 0x96, 0xa8, 0xf7, 0x36, 0x13, 0x92, 0x32, 0x49, 0x5e, 0x99, 0x35, 0xb1, 0x6e, 0x92, 0x75, 0x24, 0x19, 0xd7, 0x33, 0x5f, 0x47, 0x72, 0x64, 0x7a, 0x7c, 0xf5, 0xb8, 0xb1, 0xad, 0x88, 0xe9, 0x71, 0xab, 0xad, 0xf8, 0x94, 0x3f, 0x4c, 0xc6, 0xf1, 0x7a, 0x56, 0xbe, 0x04, 0x9e, 0x67, 0x11, 0x63, 0x34, 0xfc, 0xdc, 0x24, 0xc1, 0x9b, 0x4f, 0x19, 0x1a, 0x79, 0x6e, 0xf2, 0x89, 0xe3, 0xb7, 0x03, 0xfb, 0x62, 0xc7, 0x27, 0xcd, 0xa3, 0x24, 0xbf, 0x3d, 0x5b, 0x31, 0xee, 0x56, 0x96, 0x98, 0x8a, 0xc5, 0x97, 0x47, 0xca, 0xd7, 0xa6, 0xbc, 0xa3, 0x9f, 0xf2, 0x8c, 0xa8, 0x41, 0xcc, 0xe7, 0xcb, 0xdf, 0xd7, 0x2f, 0x06, 0xf3, 0xdf, 0xd9, 0x2f, 0xd7, 0x6f, 0xe3, 0x01, 0xac, 0xf7, 0x81, 0xa4, 0x36, 0x8a, 0x3d, 0x08, 0x77, 0x1e, 0xa1, 0x3f, 0x6c, 0xf5, 0x07, 0x3e, 0x8b, 0x23, 0x6e, 0xc2, 0x11, 0x5f, 0xaf, 0x8f, 0xb8, 0x42, 0xde, 0x2c, 0x48, 0x82, 0xab, 0xf4, 0x0c, 0x48, 0x99, 0x3c, 0xe2, 0x49, 0xe3, 0xcd, 0xf6, 0xd7, 0x63, 0xbb, 0x53, 0xbe, 0x3e, 0x7b, 0x58, 0x26, 0x80, 0xf0, 0xac, 0x47, 0x45, 0x8b, 0xe6, 0xb3, 0x6d, 0x82, 0xd8, 0x99, 0xc8, 0xa7, 0x9a, 0x63, 0xd9, 0x9f, 0x76, 0x8e, 0x91, 0x9f, 0x09, 0xea, 0x4b, 0xef, 0x53, 0xda, 0xe0, 0x27, 0xfb, 0x9a, 0xc0, 0x3a, 0xe9, 0xd6, 0xe4, 0x78, 0x9e, 0xdd, 0xfc, 0xe9, 0x7d, 0x4d, 0xb0, 0x4d, 0xb9, 0x13, 0x31, 0x1b, 0x19, 0x09, 0xac, 0xd5, 0xee, 0x86, 0x6c, 0xdc, 0x65, 0x73, 0x48, 0x7b, 0x2f, 0x86, 0xb5, 0x0e, 0xb5, 0x09, 0xbb, 0x2c, 0x4e, 0x39, 0x2f, 0x85, 0xfd, 0x82, 0x82, 0xac, 0x92, 0x4e, 0xa7, 0xbc, 0x80, 0x25, 0xd8, 0x41, 0x0a, 0x25, 0xa4, 0xbc, 0xec, 0x60, 0x35, 0x0a, 0x89, 0x76, 0x87, 0x27, 0x97, 0xdb, 0x37, 0xd4, 0xc6, 0xb6, 0xe0, 0x1a, 0x10, 0x56, 0xba, 0x20, 0xd3, 0xd5, 0x38, 0xd4, 0xc6, 0x3b, 0x19, 0xc0, 0xe9, 0xc8, 0x67, 0xfb, 0x3b, 0x75, 0xb9, 0x2f, 0x0e, 0x25, 0x79, 0x30, 0x87, 0xee, 0x2d, 0x6e, 0xb8, 0xfd, 0xbf, 0xa1, 0x36, 0xb6, 0x99, 0xd6, 0x7f, 0xb3, 0x0f, 0x4c, 0x38, 0x66, 0xd9, 0x93, 0x2b, 0x20, 0x4d, 0x29, 0x4f, 0xd6, 0x36, 0xc8, 0x37, 0xc8, 0x1e, 0x33, 0x7c, 0x91, 0xa0, 0x1e, 0xe6, 0x55, 0x72, 0x1a, 0x8e, 0x3e, 0x7b, 0x30, 0x9c, 0xa9, 0x94, 0xbb, 0xbc, 0xd6, 0x26, 0x48, 0x4b, 0xe8, 0x72, 0x37, 0x64, 0xe9, 0xdf, 0xfb, 0x93, 0xac, 0xe1, 0x59, 0xd4, 0x05, 0xb6, 0x69, 0x43, 0x6d, 0xec, 0x03, 0xba, 0x5f, 0xf1, 0xaa, 0x59, 0x98, 0xae, 0x74, 0x78, 0xba, 0xc6, 0x34, 0xa5, 0xd4, 0x6e, 0x71, 0x95, 0x06, 0xb6, 0x85, 0xde, 0x89, 0xb5, 0x4b, 0x29, 0x0d, 0xf4, 0x60, 0x19, 0x5e, 0xcc, 0xa9, 0xd4, 0xd6, 0x84, 0x54, 0x8f, 0x68, 0x5b, 0x96, 0x6a, 0xe6, 0x30, 0xf1, 0x96, 0x16, 0xd1, 0x7a, 0xef, 0x0d, 0x59, 0x84, 0x16, 0x03, 0xf5, 0xd0, 0x54, 0x0f, 0xf9, 0x2d, 0x9c, 0x3a, 0x0b, 0x32, 0xa9, 0x3f, 0x92, 0x2d, 0xb9, 0x4f, 0x25, 0x5f, 0x91, 0x65, 0x56, 0x0f, 0xf7, 0x53, 0xb2, 0xd4, 0xff, 0xe8, 0x10, 0xc0, 0x45, 0xfd, 0xfe, 0xae, 0xb0, 0xcd, 0x37, 0x14, 0xf5, 0x3e, 0x35, 0xb4, 0xc6, 0xbf, 0x52, 0x5a, 0x49, 0xb6, 0xf9, 0x86, 0xba, 0x84, 0x6d, 0xbe, 0xb2, 0x0f, 0x86, 0xa2, 0xd6, 0x34, 0x9b, 0x91, 0x4f, 0xa0, 0xa2, 0x2c, 0x37, 0xbc, 0x09, 0xdf, 0x49, 0x4a, 0xf8, 0xbc, 0x90, 0x12, 0x8e, 0x7b, 0x39, 0xfa, 0x3e, 0xd2, 0xd4, 0x26, 0xae, 0x5b, 0x7a, 0xac, 0x6e, 0x79, 0xf7, 0xb9, 0x41, 0x35, 0x20, 0xce, 0x9b, 0x4a, 0x12, 0x09, 0x02, 0xbf, 0xd3, 0x4f, 0xbb, 0x4e, 0x60, 0xe9, 0xe6, 0x70, 0x03, 0xc9, 0x8e, 0x5c, 0x94, 0x91, 0x0a, 0x88, 0x46, 0x4c, 0x89, 0x1a, 0xfe, 0xad, 0x12, 0xc3, 0x85, 0x88, 0xbb, 0x3e, 0xfc, 0xe9, 0xcb, 0x8a, 0xdb, 0x8d, 0x44, 0xcc, 0x72, 0x68, 0x5e, 0x1c, 0xd6, 0x8b, 0x75, 0x9d, 0xc1, 0xf6, 0xc6, 0xf2, 0xf1, 0xd7, 0x10, 0xce, 0xb2, 0x2e, 0x03, 0x33, 0xe9, 0x32, 0xe3, 0x2e, 0xec, 0x4a, 0x60, 0x49, 0xba, 0xf5, 0x38, 0xde, 0x85, 0xf1, 0x22, 0x4d, 0xb2, 0xfc, 0xc8, 0xf9, 0x5f, 0xc4, 0x31, 0xce, 0x7c, 0x2b, 0x7b, 0xba, 0xc6, 0x99, 0x8e, 0x33, 0x3e, 0x87, 0x30, 0x45, 0xf8, 0xef, 0x5a, 0x43, 0x8b, 0xbb, 0x5c, 0x26, 0x89, 0x8c, 0xe1, 0xb8, 0xa2, 0x2e, 0x87, 0x98, 0xcf, 0x1c, 0x84, 0x71, 0xaa, 0xdc, 0x2c, 0x4d, 0xf6, 0x82, 0xab, 0x63, 0xb3, 0xad, 0xdd, 0x0e, 0xa7, 0xee, 0x23, 0x4f, 0x86, 0x54, 0x0a, 0xdb, 0x99, 0xe8, 0x20, 0x1b, 0x13, 0xc2, 0x3b, 0x1a, 0xee, 0x92, 0x4a, 0x92, 0x16, 0xbf, 0x1a, 0x19, 0xec, 0xeb, 0xe8, 0xed, 0x08, 0xd5, 0x20, 0x4d, 0xda, 0x19, 0xce, 0x6c, 0x96, 0x77, 0xe3, 0x2f, 0x62, 0x0c, 0xfe, 0xc8, 0x47, 0x7d, 0x9b, 0x33, 0x8a, 0xc1, 0xa0, 0x9a, 0x23, 0x1f, 0xfd, 0x62, 0xb3, 0x9a, 0x46, 0xef, 0xcd, 0xa6, 0x8e, 0xa8, 0xad, 0x3d, 0xb0, 0xa6, 0x31, 0x1f, 0x5b, 0x95, 0xdf, 0x4b, 0xfa, 0xb9, 0x26, 0x96, 0xcf, 0x18, 0xaa, 0xe9, 0x76, 0x1b, 0x58, 0x4e, 0x70, 0xbf, 0x56, 0xac, 0x9f, 0x12, 0x33, 0x6f, 0x52, 0x35, 0xe5, 0xb7, 0x69, 0x1a, 0x59, 0x16, 0x57, 0x4c, 0x95, 0x6f, 0x19, 0x72, 0x74, 0x39, 0x68, 0xd1, 0xca, 0x15, 0xa2, 0x95, 0xba, 0x55, 0x8e, 0x0e, 0x96, 0xcb, 0x59, 0x45, 0xb0, 0x4f, 0xef, 0xc9, 0x02, 0x6e, 0x7f, 0x7f, 0xed, 0x84, 0x78, 0x5f, 0x26, 0xf9, 0x8d, 0x65, 0x2d, 0xe1, 0x72, 0xee, 0x6b, 0xf2, 0x77, 0x61, 0xee, 0x25, 0x4b, 0x1b, 0xc5, 0x08, 0x8f, 0xfc, 0xec, 0xc7, 0xaf, 0x81, 0x7d, 0x4b, 0x51, 0xdd, 0x18, 0x4b, 0x27, 0x7c, 0x83, 0xa4, 0xe6, 0x29, 0x15, 0xc2, 0x87, 0x74, 0x9c, 0xc9, 0xf2, 0x30, 0x4f, 0x85, 0x99, 0xfa, 0xc8, 0x4a, 0x04, 0xd3, 0xe3, 0xba, 0xfd, 0xf9, 0x4a, 0x29, 0xf6, 0xd4, 0x0b, 0x48, 0x93, 0xcb, 0x96, 0x5f, 0x28, 0xa3, 0xfb, 0xd7, 0xd8, 0x03, 0x19, 0x64, 0x37, 0x4f, 0xda, 0xd3, 0x19, 0x4e, 0x0b, 0x48, 0x61, 0x63, 0x70, 0xfd, 0x8f, 0x7e, 0x15, 0x3a, 0xe5, 0xb5, 0x34, 0x43, 0xc6, 0xf8, 0x3d, 0xed, 0x21, 0x43, 0x50, 0xd8, 0x93, 0x7a, 0xcb, 0x5c, 0x7c, 0x3d, 0x1a, 0x9c, 0xfd, 0x9c, 0xc9, 0xd7, 0xfa, 0x39, 0x43, 0xa8, 0x6a, 0x13, 0xd4, 0xb7, 0x33, 0x1d, 0x6b, 0xe8, 0x20, 0x39, 0x4a, 0x6b, 0x46, 0x92, 0x76, 0x02, 0x48, 0x4f, 0x4f, 0x9e, 0x0b, 0x2e, 0xd2, 0xd6, 0xc6, 0x75, 0xb6, 0xd1, 0x1a, 0x2c, 0xf9, 0x40, 0xb3, 0x63, 0x9d, 0xfa, 0xf8, 0x5c, 0x72, 0x46, 0xe8, 0x63, 0xcb, 0x01, 0x98, 0x41, 0x9e, 0x57, 0x13, 0xf6, 0xa2, 0x74, 0x68, 0x75, 0x5c, 0xd0, 0xac, 0x9a, 0x1d, 0x69, 0xd6, 0x32, 0xa1, 0x31, 0x88, 0xad, 0x07, 0x9b, 0x39, 0x6e, 0x3b, 0x2a, 0x1b, 0x67, 0xb9, 0x19, 0xc7, 0xad, 0x0e, 0xef, 0xa4, 0xfb, 0x1a, 0x60, 0xac, 0x12, 0xa4, 0xe2, 0xd2, 0x73, 0x60, 0xc2, 0x72, 0xb6, 0x88, 0x72, 0x42, 0x03, 0xb1, 0x32, 0xf4, 0xf8, 0x85, 0xb8, 0x0b, 0x5a, 0x5a, 0xb6, 0x1c, 0xbd, 0xbf, 0xb5, 0x51, 0x97, 0x14, 0x5b, 0xd6, 0x46, 0x78, 0xd1, 0x96, 0xb8, 0x54, 0xad, 0xc7, 0xfc, 0x45, 0x98, 0x61, 0xda, 0x1c, 0x36, 0x7d, 0xee, 0x00, 0xb8, 0x4d, 0x5b, 0x82, 0x1b, 0xed, 0x19, 0x4a, 0xa9, 0xd5, 0x64, 0xc9, 0x66, 0xcd, 0xe9, 0x19, 0xa1, 0x4b, 0x76, 0x29, 0xd8, 0xa9, 0xdb, 0x8a, 0x64, 0x29, 0xdc, 0x92, 0x4b, 0x26, 0x49, 0x31, 0x35, 0x0f, 0xf7, 0x36, 0x69, 0x8d, 0x49, 0xc9, 0x06, 0xd6, 0x85, 0x4d, 0xba, 0x05, 0x95, 0xc7, 0x45, 0x5d, 0x87, 0xbe, 0xcf, 0x76, 0xc4, 0x36, 0x53, 0x2d, 0x71, 0x44, 0xcd, 0x89, 0x11, 0x55, 0x4a, 0x4b, 0x2f, 0x21, 0xf9, 0x62, 0x48, 0xa6, 0x6b, 0x49, 0x1a, 0x37, 0xaf, 0x18, 0xae, 0xfc, 0xf8, 0x63, 0x96, 0x41, 0x1a, 0x43, 0x92, 0x3d, 0x55, 0x3d, 0x0e, 0x8f, 0xee, 0x25, 0x3e, 0xd3, 0x0a, 0x2d, 0x72, 0x2b, 0x38, 0x68, 0xbd, 0x96, 0x09, 0x5d, 0xc3, 0xf0, 0xb1, 0xeb, 0x94, 0xe9, 0xac, 0x66, 0xed, 0x55, 0xb6, 0x56, 0x60, 0x18, 0x6e, 0x73, 0xd0, 0x6a, 0x16, 0x35, 0x4d, 0x82, 0x11, 0x83, 0x09, 0x7c, 0x70, 0xb8, 0x64, 0xc1, 0x60, 0x7f, 0x7c, 0xec, 0x4f, 0xd1, 0xd8, 0x3b, 0x4a, 0xec, 0x55, 0xb6, 0x86, 0xb8, 0xb5, 0xe8, 0x81, 0xe6, 0x53, 0xaf, 0xde, 0x4f, 0xd6, 0x8b, 0xc9, 0x16, 0x18, 0x9d, 0x57, 0xbe, 0xfb, 0xb0, 0x83, 0x64, 0x4b, 0xeb, 0x54, 0x3b, 0xcb, 0xac, 0x79, 0xec, 0xf9, 0x88, 0xbf, 0xa7, 0x28, 0xbe, 0xaa, 0x9e, 0x9a, 0x6e, 0xec, 0xd5, 0x40, 0x42, 0x43, 0x36, 0x9c, 0x1e, 0xd4, 0x6d, 0x8b, 0xd1, 0x69, 0x5a, 0x43, 0x3f, 0x3d, 0xad, 0x4a, 0xd9, 0xcf, 0x34, 0xbc, 0x76, 0x2a, 0xd8, 0xbe, 0x39, 0x9a, 0x5b, 0xa2, 0x0d, 0xaa, 0x20, 0x6f, 0x8e, 0xe7, 0x1d, 0xfd, 0x07, 0xf2, 0x36, 0x52, 0xde, 0x24, 0xbd, 0xbe, 0x2a, 0x75, 0xff, 0xa6, 0xb0, 0xcf, 0xd6, 0xa8, 0x9d, 0xca, 0x0d, 0x20, 0xf5, 0x46, 0xd6, 0xf2, 0xd2, 0xe2, 0xd6, 0x93, 0xab, 0x1e, 0xe8, 0x33, 0xb9, 0x70, 0x1f, 0x1d, 0x1b, 0x66, 0x1d, 0xd9, 0x26, 0x73, 0xc9, 0xc5, 0xae, 0x54, 0x95, 0xfd, 0x8e, 0x35, 0x18, 0x8e, 0xbc, 0xac, 0x1a, 0xf0, 0xfd, 0x4a, 0xae, 0x9f, 0xeb, 0x23, 0x5b, 0x5c, 0xd8, 0x43, 0x58, 0x9f, 0x8b, 0xc2, 0xda, 0x73, 0x36, 0x3f, 0x0b, 0x6b, 0xcf, 0x22, 0x5c, 0x58, 0x7b, 0xce, 0xb6, 0x53, 0x9d, 0xab, 0x45, 0x9d, 0xdb, 0x2e, 0x9d, 0xb8, 0x7f, 0xf5, 0x85, 0x37, 0xef, 0xc7, 0x79, 0x30, 0xc4, 0x71, 0x72, 0xd4, 0x93, 0x18, 0xab, 0x2e, 0xbc, 0xac, 0x96, 0x62, 0xcf, 0xc1, 0xf5, 0xf2, 0xa6, 0xea, 0xc5, 0xa7, 0xc6, 0x70, 0x2b, 0xfe, 0x7e, 0x07, 0xdf, 0x5f, 0xc1, 0xb1, 0x67, 0xee, 0xc5, 0xd0, 0x32, 0xb2, 0xd6, 0xc5, 0x9c, 0x68, 0xe6, 0x85, 0xcb, 0x1e, 0xec, 0xa1, 0x4b, 0xab, 0x16, 0xef, 0x6f, 0x6f, 0x04, 0x78, 0x8c, 0xa4, 0x50, 0x53, 0x1b, 0xb0, 0xaf, 0x2e, 0x61, 0xde, 0xdb, 0x78, 0x3f, 0xa0, 0x34, 0xd3, 0x93, 0xd3, 0x84, 0xda, 0xb0, 0xde, 0x69, 0xee, 0x31, 0x2c, 0xf3, 0x4c, 0x5f, 0xb3, 0x63, 0x5f, 0x57, 0x69, 0xfb, 0xa3, 0x21, 0xb2, 0x95, 0x78, 0x8e, 0x7a, 0x39, 0xd6, 0xb3, 0xae, 0x48, 0x11, 0xb8, 0xd3, 0xf5, 0x9e, 0xad, 0xba, 0x41, 0xcf, 0x8e, 0x89, 0x8f, 0x9a, 0x79, 0x3f, 0xad, 0xfd, 0x9d, 0x74, 0x42, 0x8f, 0xf5, 0xb8, 0x20, 0xf2, 0x70, 0xe7, 0x17, 0x81, 0xc8, 0xe1, 0xb7, 0x7d, 0xaa, 0xa9, 0x37, 0x03, 0xb1, 0x9c, 0xae, 0xe0, 0x06, 0xb6, 0x13, 0x92, 0x1d, 0x02, 0xcd, 0xe0, 0x9a, 0xa6, 0x0d, 0xce, 0x5d, 0x47, 0xba, 0x05, 0x04, 0x3f, 0x53, 0x7f, 0xb2, 0x02, 0xa4, 0x25, 0x65, 0xba, 0x3d, 0x66, 0xa9, 0x87, 0xfc, 0x2e, 0xb3, 0x9d, 0x82, 0x9c, 0x48, 0x4a, 0x5f, 0x47, 0x88, 0xac, 0x5d, 0xd7, 0xc5, 0xc2, 0x48, 0x9a, 0xd3, 0xff, 0x4b, 0x5f, 0xa7, 0x6a, 0x6c, 0x95, 0xc8, 0x4b, 0xa8, 0x43, 0x9e, 0xbb, 0x26, 0xd7, 0xa7, 0x5d, 0x72, 0x22, 0xee, 0xa6, 0xc8, 0xef, 0x75, 0xf5, 0x77, 0xbc, 0xd7, 0x45, 0xbe, 0x88, 0xe8, 0x34, 0xee, 0x68, 0xf4, 0xe8, 0x3a, 0x63, 0x87, 0x76, 0xe9, 0xca, 0x87, 0x56, 0xc3, 0xa9, 0xf6, 0xa3, 0xed, 0x31, 0xab, 0xd0, 0xda, 0xc3, 0xc2, 0xa2, 0x33, 0x5b, 0xfa, 0xee, 0x89, 0x3d, 0x2b, 0x65, 0x73, 0xbb, 0x8e, 0x1c, 0xd2, 0xed, 0x68, 0x2b, 0x47, 0x9f, 0xed, 0x02, 0xb2, 0xd4, 0x17, 0x28, 0x0d, 0x99, 0x23, 0x72, 0xef, 0xda, 0x06, 0xe3, 0xdc, 0x0e, 0x7a, 0x77, 0x20, 0x56, 0x69, 0x77, 0x41, 0x16, 0x79, 0x9f, 0x76, 0x8f, 0x71, 0x8c, 0xbd, 0x73, 0x8d, 0x9b, 0xbd, 0x46, 0x0f, 0x1e, 0x14, 0xba, 0xef, 0x62, 0x94, 0xe0, 0x21, 0x6c, 0xdb, 0x65, 0x1c, 0xa1, 0xcd, 0xab, 0x3e, 0xb3, 0xbf, 0x03, 0xef, 0x1b, 0x94, 0xd2, 0x23, 0x7d, 0x66, 0x0b, 0x42, 0x94, 0xd5, 0x73, 0x10, 0x87, 0x65, 0x0b, 0x7c, 0xe9, 0x49, 0x29, 0x96, 0xe0, 0xdc, 0x64, 0x3b, 0x8f, 0x8d, 0x77, 0x4d, 0x28, 0x86, 0xdb, 0xf7, 0x6f, 0x68, 0x9c, 0xff, 0x87, 0x3e, 0x4b, 0x56, 0x78, 0x3a, 0x43, 0xa1, 0x00, 0x8f, 0xde, 0x65, 0x7f, 0x13, 0x20, 0xdd, 0x39, 0x58, 0x13, 0x4f, 0x55, 0x40, 0x23, 0xd0, 0xe8, 0xda, 0x1f, 0x6d, 0x74, 0x08, 0x6b, 0xe8, 0xef, 0xad, 0x27, 0x3d, 0x02, 0xc2, 0x50, 0xd9, 0x72, 0x86, 0xfc, 0x3e, 0x59, 0x65, 0xde, 0x30, 0xb5, 0x04, 0x0c, 0x88, 0x1d, 0x99, 0x74, 0xfd, 0x37, 0xb2, 0xef, 0x76, 0x20, 0x8e, 0xbb, 0x2a, 0x4a, 0x89, 0xb5, 0xc4, 0x32, 0x8e, 0x25, 0xbf, 0x94, 0xf0, 0x25, 0x96, 0x1d, 0x39, 0x8f, 0xbf, 0xb9, 0x61, 0x23, 0xfe, 0x4e, 0x0b, 0xa5, 0x89, 0x73, 0xd8, 0xe0, 0x7a, 0xca, 0x35, 0x63, 0x9c, 0x51, 0xd2, 0xfa, 0xcd, 0x12, 0x8c, 0x5e, 0x9c, 0xa6, 0x78, 0xbd, 0x3d, 0x05, 0xb4, 0x73, 0x16, 0x34, 0x83, 0xb0, 0x5d, 0xf5, 0xea, 0x06, 0xba, 0xe3, 0xde, 0xf3, 0xd9, 0xb2, 0x8b, 0x45, 0xfd, 0xd6, 0xb4, 0xac, 0x71, 0xc6, 0x14, 0x8c, 0x9d, 0x82, 0xb1, 0xdf, 0x6c, 0x9d, 0x46, 0x7a, 0x96, 0xbe, 0x76, 0x9b, 0xd7, 0xd6, 0xbe, 0xe5, 0x90, 0x32, 0x9a, 0xec, 0x7f, 0xfd, 0x2d, 0x5f, 0x6a, 0x43, 0x1b, 0xaf, 0x09, 0x59, 0xa7, 0xf3, 0xae, 0x72, 0x48, 0xd2, 0xc9, 0x51, 0xe2, 0xf6, 0x82, 0xdf, 0x36, 0x4c, 0xc6, 0xc9, 0x29, 0xe4, 0x1a, 0x5f, 0x76, 0x89, 0xfb, 0x0b, 0xe4, 0x51, 0x64, 0xf6, 0x87, 0x92, 0x25, 0xd7, 0x0d, 0xfe, 0xef, 0xfd, 0xba, 0x55, 0xf2, 0xfa, 0xbc, 0x2b, 0xc0, 0x77, 0x47, 0x1b, 0xae, 0x77, 0xef, 0x6a, 0x89, 0xce, 0xdc, 0x74, 0x2f, 0x11, 0xd3, 0x5b, 0x24, 0xd2, 0xe5, 0x51, 0x2c, 0xc6, 0xe8, 0x77, 0x35, 0xed, 0xad, 0x66, 0xf3, 0xee, 0x68, 0xfd, 0xea, 0xa4, 0x73, 0x4d, 0x2b, 0x20, 0x61, 0x0e, 0x7e, 0x28, 0x82, 0x7c, 0x68, 0xd1, 0xff, 0x27, 0x40, 0x1d, 0x44, 0xdc, 0xa4, 0xf3, 0x3c, 0x5d, 0x0d, 0xba, 0xc8, 0x76, 0x6d, 0x25, 0xbf, 0xb9, 0x54, 0x1f, 0xdf, 0xf3, 0xd5, 0x62, 0xbe, 0xcf, 0xe0, 0xf2, 0x7c, 0xde, 0x59, 0xaa, 0x8b, 0xa4, 0x07, 0xbf, 0x76, 0xd0, 0xdf, 0xe1, 0xf3, 0x52, 0x3d, 0xd4, 0x1c, 0x7e, 0x7f, 0xc1, 0xbf, 0x26, 0xe8, 0x53, 0xd9, 0x1e, 0xe2, 0xd7, 0x70, 0x7e, 0x07, 0x4b, 0x55, 0x03, 0xd9, 0xb7, 0x50, 0xe6, 0xe8, 0xd6, 0x8e, 0xfa, 0x15, 0xc1, 0xe7, 0xaf, 0xbb, 0xc3, 0x0b, 0x5e, 0xe7, 0xec, 0x3b, 0x66, 0x41, 0xb9, 0x32, 0xa6, 0x26, 0xda, 0x3c, 0x8a, 0xb4, 0x6a, 0x46, 0xa5, 0x27, 0xd5, 0xd2, 0x09, 0x16, 0x30, 0xe3, 0x95, 0x09, 0x4e, 0xaf, 0x4f, 0xb5, 0x3a, 0x67, 0xab, 0x59, 0x81, 0xd2, 0x70, 0x56, 0xc0, 0x47, 0xb8, 0xce, 0x0c, 0x0f, 0x62, 0x3a, 0x57, 0x1f, 0xf8, 0x8d, 0xd3, 0xaf, 0x9a, 0x56, 0x4a, 0xaa, 0x61, 0x06, 0xd6, 0x0a, 0x71, 0xaa, 0x75, 0xa1, 0x89, 0xa2, 0xcf, 0x74, 0xbd, 0xa9, 0xd5, 0xfa, 0xbd, 0xcb, 0xc5, 0xb2, 0xa7, 0x6a, 0x76, 0x60, 0x5d, 0xc8, 0x4a, 0x5e, 0x73, 0x2e, 0x5a, 0x75, 0x8d, 0x39, 0x8a, 0xfd, 0x8e, 0x8b, 0xe4, 0x49, 0xc1, 0xd0, 0xc3, 0x6d, 0x9b, 0x89, 0xb8, 0xc9, 0x0a, 0x98, 0xd9, 0x2c, 0xed, 0xc6, 0x9e, 0xac, 0x37, 0xb8, 0xcb, 0x61, 0x3a, 0xe6, 0xfc, 0x0c, 0xb8, 0x42, 0x4e, 0x7d, 0x1c, 0x44, 0x9e, 0x56, 0xfd, 0xee, 0xd2, 0x7d, 0xf6, 0x58, 0x30, 0x07, 0x99, 0x73, 0xf0, 0x70, 0x0e, 0x1e, 0xce, 0x21, 0x3f, 0xe4, 0xc0, 0x9d, 0xaf, 0x0c, 0x69, 0xf5, 0x93, 0x55, 0xfb, 0xaf, 0x9e, 0x17, 0x69, 0xae, 0x5e, 0xd6, 0xbd, 0x02, 0x61, 0x9a, 0x94, 0x37, 0x38, 0x4d, 0x21, 0xa7, 0x29, 0x14, 0x27, 0x28, 0x64, 0x05, 0xeb, 0xe2, 0x14, 0x96, 0xda, 0xd5, 0x69, 0xa9, 0xf0, 0x12, 0x73, 0x21, 0xa4, 0x99, 0xb4, 0x70, 0xfe, 0x70, 0x2f, 0xa4, 0x76, 0x8f, 0x52, 0x89, 0x7b, 0x71, 0x12, 0xfd, 0xf3, 0x99, 0x03, 0x90, 0x56, 0x04, 0xc1, 0x4e, 0xef, 0x17, 0x8a, 0xc0, 0x31, 0x9b, 0xf8, 0x50, 0x2c, 0x85, 0x4b, 0x14, 0xb6, 0x57, 0x70, 0x31, 0x0b, 0xb9, 0x2f, 0xf6, 0x0a, 0xef, 0x6e, 0xc9, 0x1a, 0x74, 0x5e, 0xac, 0xcd, 0xbc, 0x00, 0x8e, 0x65, 0xa8, 0x20, 0x7f, 0x05, 0x78, 0x03, 0xb3, 0xc2, 0xa4, 0x13, 0xc3, 0x56, 0x02, 0x5f, 0xf8, 0xd8, 0x0e, 0xb3, 0xa8, 0x56, 0x0e, 0xf6, 0xa3, 0xc9, 0x61, 0xbf, 0x2a, 0xd0, 0xc3, 0x5c, 0x88, 0x17, 0x78, 0xf8, 0xa9, 0x80, 0x4f, 0x94, 0x8b, 0xe2, 0x58, 0x73, 0x1b, 0xce, 0xf7, 0x19, 0x2d, 0xd0, 0xca, 0x7a, 0xa0, 0x83, 0x97, 0xc8, 0x5e, 0x8b, 0xcb, 0x63, 0xcf, 0x03, 0xf6, 0x8a, 0x1c, 0x8f, 0xd5, 0x6a, 0xa7, 0x13, 0xe8, 0xce, 0x90, 0x15, 0x4b, 0x04, 0xf9, 0x55, 0x77, 0x1a, 0x96, 0x5e, 0x9e, 0x28, 0xa3, 0xba, 0x1b, 0x43, 0x0f, 0x60, 0xef, 0x94, 0xe3, 0xbc, 0x9a, 0x15, 0x36, 0xd3, 0x9c, 0xc1, 0xd1, 0xbb, 0x62, 0xd9, 0xcb, 0x9c, 0xa0, 0x15, 0xe0, 0xd7, 0xe7, 0xd6, 0x3e, 0xdd, 0xef, 0x6b, 0x8f, 0xab, 0xcc, 0x92, 0x47, 0x3e, 0xd1, 0x0a, 0x3c, 0x01, 0x5f, 0xc8, 0x88, 0xb9, 0x61, 0xef, 0xe6, 0x8b, 0x19, 0x72, 0xff, 0xd7, 0xfe, 0xcb, 0x97, 0x8a, 0xf8, 0x63, 0x2a, 0x7e, 0x31, 0xb9, 0xca, 0x94, 0xbc, 0x24, 0x1f, 0x20, 0x7f, 0x86, 0x4a, 0x77, 0x05, 0x54, 0xeb, 0xbe, 0x3e, 0xe6, 0xb9, 0x67, 0x43, 0x8d, 0xee, 0xbb, 0x63, 0x21, 0xae, 0x2a, 0x55, 0xf7, 0xdd, 0x51, 0x87, 0xcf, 0x4b, 0x74, 0xef, 0x68, 0x0d, 0x6e, 0xb2, 0x61, 0x1d, 0xd1, 0x3d, 0x79, 0xb0, 0xe7, 0x0e, 0xdd, 0x93, 0x47, 0x1b, 0x3e, 0x47, 0x75, 0xaf, 0x69, 0x6b, 0x10, 0x4b, 0xee, 0xd2, 0x7d, 0x9d, 0x6d, 0x74, 0x97, 0x40, 0x8f, 0xee, 0x35, 0x64, 0x2b, 0xce, 0x82, 0xed, 0xba, 0xf7, 0x91, 0x87, 0xdd, 0xa5, 0xe4, 0x31, 0x8d, 0xbd, 0x8f, 0x08, 0xfb, 0xe1, 0xc2, 0xa3, 0xd9, 0x2e, 0x7c, 0xee, 0xd5, 0xfd, 0xb9, 0xed, 0x41, 0x18, 0xb1, 0x4f, 0xf7, 0x32, 0x72, 0x00, 0xc3, 0xfb, 0x84, 0xe7, 0x32, 0x78, 0x01, 0x9f, 0xd9, 0x57, 0x1a, 0x5e, 0xfd, 0xb3, 0x3e, 0x84, 0xa3, 0xb8, 0xcb, 0x14, 0x91, 0xac, 0xd8, 0x7b, 0x1e, 0x71, 0xca, 0xf2, 0x8d, 0xed, 0x38, 0x4b, 0x66, 0x47, 0x24, 0xbd, 0x9f, 0x1e, 0x8d, 0x90, 0x0d, 0xc3, 0xe3, 0xee, 0x4a, 0x38, 0x41, 0xbe, 0x48, 0x79, 0x56, 0xe7, 0xd8, 0xe3, 0x12, 0x71, 0x52, 0x5e, 0x73, 0xe5, 0xab, 0xdd, 0x2c, 0x0b, 0x9d, 0xce, 0x36, 0x75, 0x65, 0x9c, 0x13, 0xe5, 0xe1, 0x60, 0xcd, 0xfd, 0xb8, 0x4a, 0xef, 0x27, 0xcb, 0x4d, 0xbf, 0xff, 0x4d, 0xfe, 0xed, 0xc7, 0xc5, 0x2a, 0x2d, 0xc4, 0x75, 0xaa, 0x20, 0x8a, 0x6e, 0x03, 0xf3, 0x94, 0x36, 0xb8, 0x32, 0xc6, 0x8f, 0x63, 0xeb, 0xe2, 0xa7, 0x1a, 0x7c, 0xb2, 0xf2, 0xd3, 0x12, 0x7c, 0xca, 0xe6, 0xa7, 0x95, 0x74, 0x22, 0xcb, 0x4f, 0x5d, 0xe4, 0x15, 0x60, 0xca, 0x1c, 0x30, 0x79, 0x9f, 0x04, 0xcb, 0x94, 0x72, 0xc8, 0x9e, 0x42, 0x36, 0xc1, 0x73, 0xf0, 0x77, 0x3a, 0x28, 0x81, 0xd4, 0xf0, 0xc4, 0x88, 0x44, 0xba, 0x3c, 0x48, 0x05, 0x93, 0x9d, 0x10, 0x13, 0xd7, 0xf1, 0x51, 0x1a, 0xa9, 0x29, 0x44, 0x35, 0xcf, 0xc0, 0x54, 0x88, 0xfd, 0x99, 0xf3, 0x04, 0xcf, 0x8a, 0xeb, 0x9a, 0x79, 0xaa, 0x2b, 0xf6, 0xfd, 0xba, 0xa9, 0x6c, 0x9c, 0xa3, 0xc3, 0x3a, 0x26, 0xb2, 0xf0, 0x68, 0xb4, 0x75, 0xe1, 0xb1, 0xb5, 0xfc, 0x95, 0xd3, 0x6a, 0x86, 0xde, 0xfb, 0x74, 0x3b, 0xe2, 0x29, 0x09, 0x3b, 0xe2, 0xf6, 0x5c, 0xc4, 0x54, 0x71, 0xfe, 0xa8, 0x96, 0x56, 0x4d, 0x35, 0xd3, 0xea, 0xa4, 0x55, 0xcd, 0xb0, 0x21, 0xc5, 0xc6, 0x5a, 0xc9, 0x48, 0xe1, 0xcb, 0xad, 0x9a, 0x52, 0xa9, 0xf7, 0xeb, 0x6e, 0x35, 0xab, 0x55, 0x8b, 0xc5, 0x53, 0xd3, 0xc4, 0x33, 0xc5, 0xc0, 0xfe, 0x9b, 0x19, 0x4e, 0x63, 0xcb, 0xbf, 0xfb, 0xaf, 0x1c, 0xc7, 0xbd, 0x1f, 0xbf, 0x87, 0xcd, 0xec, 0x8f, 0x36, 0x1f, 0x43, 0x5e, 0xe4, 0x90, 0xc2, 0xb0, 0xf0, 0x42, 0x5c, 0x48, 0x52, 0x4f, 0xc4, 0xf3, 0xc2, 0x9c, 0x53, 0x74, 0xbb, 0x12, 0xa7, 0x04, 0xb5, 0x6a, 0x1f, 0xe1, 0xa7, 0xfb, 0x58, 0x27, 0xee, 0xc5, 0xbf, 0x0c, 0xf4, 0x34, 0x12, 0xad, 0xaa, 0xed, 0xee, 0x08, 0x99, 0x11, 0xee, 0x66, 0x86, 0x8c, 0xc1, 0x1d, 0x08, 0xeb, 0xa6, 0x5b, 0x97, 0x80, 0x65, 0x37, 0xcb, 0xfa, 0xb2, 0xaf, 0xd7, 0xdf, 0xc3, 0xd6, 0x08, 0xa8, 0xca, 0xdc, 0xf5, 0x93, 0x2a, 0x98, 0xff, 0xdc, 0x81, 0x38, 0xb8, 0x23, 0x66, 0x77, 0x69, 0x7c, 0x47, 0x17, 0x79, 0x29, 0x17, 0x14, 0x99, 0x39, 0xae, 0xd3, 0xa1, 0x5b, 0x05, 0x0a, 0xb4, 0x87, 0xd3, 0x4a, 0x07, 0xb4, 0xf3, 0x08, 0x25, 0x8c, 0xb4, 0xef, 0x72, 0x68, 0x1a, 0xf1, 0xba, 0xfe, 0xa6, 0x05, 0x4e, 0x31, 0x0f, 0x57, 0xd2, 0xef, 0xc5, 0x3b, 0xd8, 0x02, 0xa7, 0x9c, 0x14, 0x52, 0x97, 0xb0, 0xf7, 0x81, 0x74, 0xa2, 0xeb, 0x1a, 0x2d, 0xfe, 0x9b, 0xae, 0xb5, 0xc0, 0x39, 0x9f, 0xe5, 0xd5, 0x04, 0x97, 0xcc, 0xf6, 0xad, 0xeb, 0xfb, 0x87, 0x4f, 0xd6, 0xda, 0x24, 0x0a, 0x37, 0x92, 0xd3, 0xd7, 0x3e, 0xc2, 0xfb, 0xfa, 0xcb, 0xba, 0x1e, 0xe6, 0x70, 0xff, 0xeb, 0x7b, 0x74, 0x8d, 0xcb, 0xe1, 0x1e, 0xd8, 0xbf, 0x4f, 0xd6, 0xb7, 0xe8, 0x3c, 0x99, 0xb8, 0xaf, 0xc3, 0x75, 0x2a, 0x87, 0xf3, 0x64, 0x53, 0x5f, 0xbf, 0x9e, 0x4e, 0xa5, 0xe0, 0xcb, 0xc6, 0x6c, 0xaa, 0xaa, 0xd9, 0x31, 0x5d, 0x4a, 0x3e, 0x37, 0x7f, 0x97, 0x6d, 0xce, 0x0c, 0xd7, 0x9d, 0x7c, 0x93, 0xad, 0x51, 0xb1, 0xd6, 0xba, 0x92, 0x81, 0x38, 0xab, 0x89, 0xac, 0x10, 0x37, 0x4e, 0x0c, 0x90, 0x9c, 0xc3, 0xf8, 0x16, 0xdc, 0x10, 0x31, 0xdd, 0xa1, 0x40, 0xb4, 0x01, 0xb1, 0x20, 0x9c, 0xd1, 0x06, 0xd5, 0x10, 0x7c, 0x92, 0xec, 0xd4, 0xfa, 0x0d, 0x31, 0x4b, 0x05, 0xf9, 0x05, 0x08, 0x65, 0x32, 0xc9, 0xbe, 0xaa, 0xbb, 0x0a, 0x72, 0x14, 0xaf, 0xb5, 0xb4, 0x6c, 0x40, 0xdb, 0x43, 0xbe, 0x56, 0xe3, 0xd0, 0xfe, 0x63, 0xe2, 0x7a, 0x90, 0x4d, 0x8e, 0x84, 0xfd, 0x80, 0x6b, 0xa4, 0xb1, 0x0f, 0xc5, 0x24, 0x66, 0x8a, 0x8a, 0x62, 0x3e, 0x5b, 0xc9, 0x23, 0x40, 0x91, 0x1b, 0x9c, 0xc2, 0x4f, 0x90, 0xee, 0x43, 0x28, 0x45, 0x78, 0x03, 0x9a, 0xbb, 0xa1, 0x79, 0xf4, 0xee, 0x68, 0xa3, 0x91, 0xac, 0x8a, 0xaa, 0x06, 0xfc, 0xfd, 0x52, 0x66, 0x94, 0xbf, 0x91, 0x67, 0x21, 0x08, 0x1d, 0x0f, 0xf8, 0xc2, 0x86, 0x9b, 0x8b, 0x61, 0x1a, 0xdb, 0x64, 0xcc, 0x89, 0xd9, 0x79, 0xc6, 0xbc, 0x1b, 0xc1, 0xa4, 0x34, 0x82, 0xd9, 0x31, 0x0d, 0x32, 0xed, 0xd3, 0x20, 0xdb, 0x3b, 0x4d, 0xd3, 0xac, 0xc1, 0xe0, 0x7a, 0xdb, 0xfa, 0x08, 0x58, 0xc6, 0x39, 0x3c, 0x15, 0xe7, 0xb4, 0x7e, 0xab, 0xc5, 0x5a, 0xa2, 0x8c, 0xab, 0x69, 0x57, 0xda, 0xb1, 0xdd, 0x46, 0x5f, 0xb4, 0x99, 0x78, 0xb3, 0x25, 0xee, 0x94, 0xfc, 0x12, 0xf6, 0xac, 0x3a, 0x8d, 0x35, 0x7f, 0x35, 0x1c, 0xab, 0x79, 0x36, 0x82, 0x63, 0x99, 0x2d, 0x30, 0x6b, 0x40, 0xcb, 0x53, 0xb3, 0xc8, 0xe2, 0x25, 0xd6, 0x81, 0xbc, 0x18, 0x6e, 0x09, 0x76, 0x30, 0x84, 0xcb, 0x08, 0x1b, 0x7e, 0x72, 0xb0, 0xe9, 0x5d, 0x3a, 0x41, 0xc8, 0xc9, 0x89, 0x9f, 0x41, 0x9d, 0x62, 0x2c, 0x4c, 0x42, 0x08, 0xeb, 0x43, 0x48, 0x4c, 0xab, 0x3c, 0xaf, 0x85, 0x2c, 0x87, 0x9d, 0x59, 0xe5, 0x79, 0xa3, 0xbb, 0xd5, 0x77, 0xac, 0xbb, 0x62, 0x40, 0xab, 0x5e, 0x7d, 0xc7, 0x9b, 0xdd, 0x64, 0x61, 0xe8, 0x3f, 0xca, 0x91, 0x0e, 0x69, 0x43, 0x9c, 0x72, 0x72, 0x08, 0xe4, 0x79, 0xc1, 0x2e, 0x3a, 0xff, 0x63, 0x0b, 0x9e, 0x35, 0x08, 0x2d, 0x9b, 0x6a, 0x6b, 0xf0, 0xe9, 0x2b, 0xe4, 0xc9, 0xbe, 0xb6, 0x10, 0x9f, 0x2a, 0xf0, 0xa9, 0xae, 0x76, 0x22, 0x3e, 0x95, 0xe2, 0x93, 0xb3, 0x16, 0x64, 0x6b, 0x80, 0x68, 0xce, 0x02, 0x0c, 0xb1, 0x61, 0xfa, 0x4c, 0xa2, 0x69, 0xf0, 0xb9, 0x4a, 0xd8, 0x48, 0x97, 0xaa, 0xf1, 0x79, 0x1e, 0xe2, 0xdd, 0x5b, 0xf1, 0xfe, 0x55, 0x4c, 0xb1, 0x19, 0xef, 0x73, 0x91, 0xea, 0x38, 0xa7, 0x92, 0x75, 0xcf, 0x15, 0x04, 0x8f, 0x6b, 0x73, 0xf0, 0x69, 0x29, 0x3e, 0x99, 0xf1, 0xde, 0x84, 0x77, 0x7a, 0x5f, 0x8c, 0x71, 0x0e, 0x91, 0x2d, 0x1e, 0x7c, 0x6e, 0x09, 0xcf, 0x63, 0x7a, 0xec, 0x6e, 0x0c, 0xdb, 0xc3, 0xfa, 0x0f, 0xf7, 0x60, 0x2c, 0x3f, 0xde, 0x57, 0x62, 0xc8, 0x0f, 0xd8, 0x62, 0x8f, 0x1b, 0x3c, 0x48, 0x7b, 0x56, 0xd7, 0x90, 0xf4, 0x9e, 0x87, 0x2d, 0xd0, 0x91, 0xa6, 0xd1, 0x3e, 0xb7, 0x2e, 0x7b, 0xcb, 0x7d, 0xb6, 0x59, 0xf4, 0x99, 0xe5, 0x73, 0x21, 0xb2, 0xd6, 0xb5, 0x4e, 0xb4, 0x14, 0xfb, 0xd4, 0xe2, 0xf4, 0xcc, 0xfe, 0x00, 0x71, 0x39, 0x84, 0x63, 0x42, 0x06, 0x03, 0x73, 0x5f, 0xfd, 0xbd, 0x5f, 0xab, 0x59, 0xee, 0x74, 0xfc, 0xfa, 0x85, 0xed, 0x52, 0x2c, 0x75, 0xf0, 0x3e, 0xb6, 0x8f, 0x83, 0xf1, 0xac, 0xd5, 0xc4, 0x53, 0xa2, 0x11, 0xed, 0xbd, 0xaf, 0xe9, 0x78, 0x0d, 0xe5, 0xe4, 0x21, 0xd9, 0x1a, 0x92, 0xda, 0x4f, 0x8e, 0xfb, 0xd3, 0x5f, 0x37, 0x9d, 0xc1, 0xb2, 0x26, 0xf0, 0xba, 0xf6, 0x29, 0x16, 0xe2, 0x6b, 0xe1, 0x18, 0x73, 0x8c, 0x1a, 0xf2, 0x61, 0x09, 0x70, 0x11, 0xe7, 0x2a, 0x9d, 0x49, 0xb2, 0x6c, 0x0e, 0x3f, 0x59, 0x54, 0x93, 0xfe, 0x94, 0xc6, 0x7a, 0x43, 0x5b, 0x8f, 0x46, 0x85, 0x1d, 0x1f, 0x78, 0xd5, 0x4a, 0xed, 0x2c, 0x51, 0x2c, 0x35, 0xed, 0xb8, 0x26, 0x3c, 0xc9, 0xb3, 0xc7, 0xeb, 0x86, 0x3b, 0xdc, 0xe9, 0x62, 0x06, 0x09, 0xaf, 0x3e, 0x4a, 0x79, 0x55, 0x0f, 0xef, 0x83, 0x99, 0x6a, 0xe6, 0x0d, 0xfb, 0x61, 0x75, 0xa2, 0x17, 0x10, 0x07, 0xed, 0x3f, 0xd2, 0x87, 0x6f, 0xf9, 0xa2, 0x37, 0xad, 0x16, 0xd1, 0x9b, 0xac, 0x9b, 0x22, 0x25, 0xf2, 0x64, 0xc9, 0xe8, 0x4c, 0xec, 0x9f, 0x6c, 0x4c, 0xf5, 0x79, 0x92, 0x24, 0x4a, 0xe4, 0x19, 0xb8, 0x39, 0xec, 0x0a, 0xde, 0xf7, 0xe3, 0x0f, 0x21, 0xbf, 0xf1, 0x1d, 0xd5, 0x5a, 0x43, 0x5e, 0xe6, 0x72, 0xae, 0x57, 0xb6, 0x6a, 0x64, 0x3c, 0x31, 0x2f, 0xf8, 0x0c, 0xf6, 0xca, 0x0a, 0x9a, 0x6f, 0x61, 0x33, 0xee, 0x1a, 0x79, 0x61, 0x60, 0xcb, 0xec, 0x5a, 0xdc, 0x1b, 0x79, 0x4e, 0x0c, 0x0a, 0x14, 0x15, 0xd8, 0x25, 0xc7, 0x08, 0xbd, 0x10, 0xc4, 0xe1, 0x1f, 0xc5, 0x15, 0x46, 0xbe, 0xb9, 0x7c, 0xa0, 0x28, 0xa5, 0x56, 0x2f, 0x59, 0x66, 0xf8, 0x41, 0x1f, 0xc2, 0x86, 0xec, 0x61, 0xb0, 0x21, 0x87, 0x4e, 0x25, 0xe3, 0xb0, 0x41, 0xbe, 0xc6, 0x3b, 0x05, 0x41, 0xe7, 0xcc, 0xeb, 0x9d, 0x01, 0x89, 0x73, 0x23, 0x1d, 0x0a, 0xaf, 0x00, 0xcb, 0x75, 0x4f, 0x99, 0x66, 0xb0, 0x9d, 0xa1, 0x3d, 0xcc, 0x83, 0x8c, 0x7b, 0xa3, 0x61, 0x0b, 0xe0, 0x26, 0xb2, 0x00, 0x1e, 0x72, 0x71, 0x4f, 0x39, 0xe1, 0x26, 0xab, 0xfc, 0xf6, 0x13, 0x8a, 0x94, 0xf0, 0xe6, 0x8c, 0x2d, 0x95, 0x94, 0x40, 0xc2, 0x33, 0x39, 0xe2, 0x2b, 0xc7, 0xf8, 0xec, 0x27, 0x4d, 0x87, 0xd0, 0xc3, 0xbd, 0x3a, 0xb0, 0xf4, 0x00, 0x42, 0x85, 0x96, 0x9a, 0xee, 0xd8, 0x29, 0xce, 0xdf, 0xad, 0x03, 0xf3, 0xb5, 0x91, 0x3a, 0x30, 0xb4, 0x2b, 0xc7, 0x74, 0x6a, 0x66, 0x12, 0x4c, 0x97, 0x9d, 0xb4, 0x57, 0xbe, 0xe0, 0x22, 0x3d, 0xaa, 0xac, 0xcc, 0x09, 0x56, 0xa3, 0xb0, 0x03, 0xcb, 0xdc, 0xa9, 0x43, 0x74, 0x62, 0x10, 0xec, 0xdc, 0xd7, 0x59, 0xfb, 0xae, 0x92, 0x92, 0xb0, 0x2a, 0x1c, 0x3b, 0xa7, 0x4d, 0xd6, 0x87, 0xc1, 0x51, 0x3b, 0xec, 0x7f, 0xaf, 0x78, 0x26, 0xf6, 0xda, 0x42, 0xa7, 0x1b, 0x54, 0x87, 0x1b, 0xea, 0x84, 0x0d, 0xca, 0x59, 0x17, 0xba, 0xa4, 0x00, 0xf9, 0x3e, 0x2f, 0x16, 0x12, 0xb4, 0x72, 0x30, 0x09, 0xc3, 0x1e, 0xc3, 0xf8, 0x35, 0x49, 0xa3, 0x5e, 0x72, 0x78, 0x6c, 0x49, 0x58, 0x35, 0x5b, 0xb8, 0x75, 0x11, 0xae, 0xcd, 0xf6, 0xb1, 0x14, 0xce, 0xc1, 0x2c, 0xa4, 0xb7, 0xb4, 0x65, 0xf1, 0x90, 0x62, 0x11, 0x32, 0xf8, 0x10, 0x52, 0x19, 0xf9, 0x4c, 0x1b, 0x3d, 0xd1, 0x32, 0x14, 0xf7, 0xb7, 0x33, 0x51, 0xf7, 0xb7, 0xd3, 0x61, 0xd3, 0x35, 0xc8, 0x45, 0x4a, 0xdd, 0x96, 0x77, 0x07, 0xe5, 0x80, 0x6b, 0xff, 0x60, 0x60, 0x6d, 0x38, 0x43, 0x70, 0xf4, 0xa7, 0x9e, 0xb0, 0x43, 0x4d, 0x77, 0x68, 0x1e, 0xae, 0xe1, 0x5d, 0x8e, 0x65, 0xe0, 0x20, 0xab, 0x74, 0xab, 0x60, 0x42, 0xa6, 0x32, 0x6a, 0x7e, 0x34, 0x99, 0xd7, 0x48, 0x5c, 0x73, 0x4c, 0xd9, 0x45, 0x52, 0xc4, 0x4e, 0xcf, 0xef, 0xfb, 0x66, 0x7d, 0x00, 0x52, 0xc9, 0x39, 0x90, 0xac, 0xb3, 0x95, 0x51, 0xc3, 0xa8, 0x99, 0x19, 0x35, 0x10, 0x5c, 0x3b, 0x61, 0xad, 0xf7, 0x0b, 0x35, 0xa4, 0x9d, 0x62, 0x9b, 0x17, 0x25, 0x09, 0x0b, 0xcb, 0x5e, 0xb6, 0xc3, 0x40, 0xda, 0x8e, 0xca, 0x91, 0x43, 0xa5, 0x17, 0xba, 0x0c, 0xb8, 0xa3, 0xea, 0x9e, 0x17, 0xac, 0x4e, 0x9c, 0x99, 0x4e, 0x61, 0xaf, 0x1c, 0xb1, 0x66, 0x1b, 0xe2, 0xf4, 0x0e, 0x1d, 0xcb, 0x76, 0x21, 0x7c, 0xcf, 0xd7, 0xb1, 0x6c, 0xb6, 0x51, 0xae, 0xe3, 0xfa, 0xc5, 0x25, 0xd8, 0xc3, 0x04, 0x91, 0x74, 0x9f, 0x7f, 0x3e, 0x84, 0x15, 0xfe, 0x38, 0x4d, 0xe0, 0x11, 0x7e, 0xfc, 0x9a, 0x6d, 0xaf, 0x0a, 0x6b, 0x2f, 0xe9, 0x4e, 0x4f, 0xc2, 0xcb, 0x8d, 0x93, 0x3c, 0x5f, 0x0a, 0x29, 0x6b, 0xc4, 0xc5, 0x84, 0x04, 0xf6, 0x90, 0x4d, 0x2d, 0x64, 0xcc, 0xda, 0x27, 0x30, 0x6b, 0x11, 0xdb, 0x51, 0xfa, 0xfa, 0x2f, 0x89, 0x6e, 0xd9, 0xc1, 0xb6, 0xe2, 0x94, 0x32, 0xf6, 0x3b, 0x23, 0xf0, 0x8c, 0x96, 0x43, 0xa0, 0x78, 0x49, 0xaf, 0x5b, 0x6d, 0x9d, 0x52, 0xca, 0x12, 0x77, 0x39, 0x90, 0xad, 0xa4, 0x9d, 0xea, 0xc2, 0xfd, 0x3d, 0x67, 0x4a, 0x19, 0x18, 0x4a, 0x3e, 0x80, 0x85, 0xd6, 0xb9, 0xac, 0x9b, 0x57, 0x16, 0x9f, 0xdf, 0xd1, 0xa4, 0xe7, 0x8d, 0x89, 0xe7, 0x6b, 0x73, 0x45, 0xfc, 0xc1, 0x1c, 0x32, 0x92, 0x6c, 0xed, 0xbf, 0xfe, 0x86, 0x71, 0x57, 0xd6, 0x18, 0x66, 0x1f, 0x39, 0xc6, 0xc8, 0xc2, 0xfe, 0xfb, 0x85, 0xc4, 0x5c, 0x1b, 0x51, 0xb1, 0x85, 0xd7, 0xc7, 0x05, 0x62, 0x1e, 0xe3, 0xab, 0xbe, 0x7a, 0xf5, 0x02, 0x5b, 0x79, 0x99, 0x06, 0xa6, 0xbc, 0x69, 0x60, 0x26, 0xcb, 0x4f, 0xc2, 0x37, 0xee, 0xc5, 0x5d, 0xb8, 0xce, 0x0e, 0x39, 0xc4, 0xa9, 0x52, 0xd0, 0x35, 0xd6, 0xb8, 0x4e, 0xd3, 0xb4, 0x6c, 0x2b, 0xd8, 0x8c, 0xad, 0x9f, 0x29, 0x4f, 0x11, 0x96, 0xb8, 0xed, 0xa4, 0xe7, 0x4e, 0x4f, 0x27, 0xcc, 0xe4, 0x77, 0xfb, 0x74, 0xc8, 0x19, 0x49, 0x49, 0xf6, 0x77, 0x1e, 0x4e, 0x57, 0xca, 0x23, 0x9f, 0x29, 0x87, 0x66, 0x21, 0xf5, 0x32, 0xcc, 0xa7, 0x77, 0xc4, 0xd8, 0x77, 0x2f, 0x71, 0x41, 0x49, 0xc7, 0x94, 0x67, 0xe9, 0x8b, 0x9c, 0xd3, 0x32, 0xf2, 0x60, 0x0b, 0x6b, 0x88, 0x47, 0x79, 0xf1, 0xa8, 0xef, 0xbf, 0xc2, 0x19, 0xfc, 0x74, 0xca, 0x94, 0x4a, 0x7e, 0xea, 0xf8, 0xf9, 0x8f, 0x0e, 0xfa, 0xfd, 0xb3, 0xa8, 0x29, 0x4b, 0x12, 0x59, 0xad, 0xcc, 0xb5, 0x27, 0xe9, 0x20, 0x0e, 0x3d, 0xcf, 0xa1, 0x66, 0x3d, 0xf4, 0xa8, 0xcd, 0x13, 0xe3, 0x92, 0x5b, 0x75, 0xa9, 0x21, 0x87, 0xf8, 0x62, 0xc2, 0x95, 0xc2, 0xe9, 0x74, 0x3d, 0xbc, 0xa3, 0x3a, 0xaf, 0x9a, 0xf4, 0x3d, 0x73, 0x92, 0x7a, 0x62, 0x00, 0x67, 0xc0, 0xf3, 0xb6, 0x38, 0x3d, 0x05, 0x97, 0xf5, 0x9c, 0x37, 0xea, 0xf7, 0x75, 0x2e, 0xdc, 0x6f, 0xa4, 0x29, 0x14, 0xf7, 0xa3, 0x99, 0xfe, 0xc6, 0xab, 0x7f, 0x12, 0x34, 0x1a, 0xc7, 0x5f, 0x47, 0xa7, 0x08, 0x58, 0x7b, 0xb2, 0xd7, 0x18, 0xcf, 0xf1, 0xa3, 0x5b, 0xe8, 0x8c, 0x25, 0x8f, 0xfb, 0x96, 0x6c, 0xad, 0x58, 0x49, 0x67, 0x93, 0xad, 0xfb, 0x48, 0x53, 0x84, 0xc6, 0x26, 0x9d, 0x57, 0x61, 0x6d, 0x85, 0x64, 0xdc, 0x9f, 0x38, 0x6c, 0x27, 0xc5, 0xf2, 0xa6, 0xc4, 0x74, 0x3a, 0x73, 0x79, 0xa6, 0x6b, 0xd9, 0xb9, 0x6d, 0x98, 0x5f, 0x81, 0x96, 0x93, 0xcb, 0xd6, 0xfc, 0x35, 0x25, 0x22, 0xe5, 0x7a, 0x34, 0x1b, 0xbf, 0x4d, 0xd3, 0x1c, 0xcd, 0x83, 0xb9, 0x25, 0x9a, 0x8b, 0xdf, 0x26, 0x69, 0xf9, 0xb9, 0x01, 0xad, 0x90, 0x9f, 0xad, 0x5a, 0x51, 0x6e, 0xb9, 0x56, 0xcc, 0xcf, 0xb9, 0x9a, 0x27, 0x77, 0x96, 0xe6, 0xf3, 0x3e, 0xa5, 0xf9, 0x9b, 0x41, 0x94, 0xa8, 0x65, 0x53, 0x19, 0x57, 0x7f, 0xd0, 0xac, 0xe5, 0x15, 0xf7, 0xe2, 0x80, 0xed, 0x8e, 0x86, 0x32, 0x54, 0x63, 0x5e, 0xf1, 0x38, 0x48, 0xf2, 0x45, 0xb4, 0x95, 0x74, 0x16, 0xaf, 0x1e, 0x16, 0x3a, 0x8b, 0x5f, 0x2e, 0x40, 0xe8, 0x66, 0xb3, 0x92, 0xad, 0x20, 0x86, 0x23, 0x34, 0xa2, 0x97, 0xea, 0x87, 0x5b, 0x70, 0xc3, 0x9e, 0xd8, 0xde, 0x2c, 0x7b, 0xbd, 0x62, 0x15, 0xb1, 0x5c, 0xdc, 0x2a, 0xeb, 0x28, 0x1b, 0xc4, 0xb5, 0xe3, 0x17, 0x20, 0x26, 0xdd, 0x46, 0x32, 0x88, 0xc9, 0xe7, 0x74, 0x2c, 0x2f, 0x87, 0xb4, 0xdc, 0xbd, 0x12, 0x24, 0x42, 0xb7, 0x62, 0x3a, 0x31, 0xeb, 0x8f, 0x05, 0xa2, 0x2b, 0xac, 0xde, 0x2f, 0x98, 0x80, 0xfa, 0xf5, 0x52, 0x44, 0x97, 0x42, 0xf4, 0xb3, 0x4e, 0x75, 0x7a, 0x73, 0x6e, 0xb9, 0x24, 0x74, 0xe6, 0xd9, 0xea, 0xaa, 0xd4, 0x2c, 0x0b, 0x39, 0x7f, 0xa2, 0xf3, 0xbc, 0xa5, 0x31, 0x2b, 0x71, 0xf4, 0x85, 0x75, 0xea, 0x0f, 0xe8, 0x76, 0xdd, 0x11, 0x8e, 0x0b, 0x1e, 0x3c, 0xf1, 0x6a, 0x08, 0x2e, 0x35, 0xe4, 0x90, 0x5d, 0x77, 0xb6, 0xde, 0x9e, 0x61, 0x29, 0x30, 0x0d, 0xb1, 0x26, 0x2a, 0x6b, 0x9e, 0x86, 0x65, 0xaf, 0xc5, 0x16, 0xd7, 0x91, 0x34, 0x92, 0xd7, 0xc6, 0x8c, 0x91, 0x16, 0x4f, 0x92, 0xb4, 0x25, 0xe3, 0xbc, 0x19, 0x0a, 0x23, 0x4f, 0x9e, 0x77, 0xcc, 0xc4, 0x35, 0x59, 0xe4, 0x72, 0x33, 0x0e, 0xe0, 0xf1, 0xf6, 0xc4, 0xac, 0x5f, 0x93, 0x3f, 0xf0, 0x64, 0xe8, 0x4a, 0xbd, 0x27, 0xbd, 0xc2, 0x92, 0x0a, 0x2c, 0x71, 0xc9, 0x1e, 0x4b, 0xe6, 0xb3, 0x16, 0xf9, 0x28, 0xa1, 0x45, 0xae, 0xcb, 0x9f, 0xa5, 0x29, 0x9e, 0x60, 0x97, 0xcd, 0x43, 0x56, 0x4c, 0x95, 0x32, 0x5b, 0x59, 0x4b, 0x8a, 0x63, 0xd4, 0xbf, 0xfe, 0x66, 0x35, 0xb0, 0x1c, 0x65, 0xb5, 0xbb, 0x0c, 0xf2, 0xd4, 0xb4, 0xe0, 0x06, 0x25, 0xe0, 0x20, 0x5b, 0xbf, 0x29, 0x8c, 0xe3, 0xba, 0x43, 0x99, 0x66, 0x2f, 0xa4, 0x84, 0x43, 0xf8, 0x2b, 0xf1, 0xaf, 0x1c, 0x6e, 0x50, 0xd5, 0x00, 0x84, 0xd2, 0x39, 0x7c, 0x01, 0x85, 0x87, 0x16, 0xa8, 0x0b, 0x30, 0xee, 0xad, 0xcc, 0xf5, 0x5d, 0x1d, 0xce, 0xc7, 0xdf, 0x6f, 0x84, 0x9d, 0xf8, 0xfb, 0xcd, 0xb0, 0x8d, 0x74, 0xf8, 0xc2, 0x84, 0x0f, 0x3b, 0xc3, 0xa4, 0x9b, 0xe8, 0x08, 0x67, 0xe0, 0xef, 0xd4, 0x30, 0xe1, 0xb2, 0x6d, 0xcc, 0xa9, 0x9d, 0x1c, 0xca, 0xe0, 0xbc, 0xb3, 0x5b, 0x64, 0xd5, 0x64, 0xf3, 0xb7, 0xb0, 0xf5, 0xfb, 0x60, 0x97, 0x1a, 0x8d, 0x3d, 0xb7, 0xca, 0xdb, 0xd6, 0x1c, 0xdb, 0x40, 0x25, 0x87, 0x0c, 0xc1, 0xce, 0x63, 0x9d, 0xba, 0xcd, 0xa1, 0x5d, 0x76, 0x0f, 0xf3, 0xda, 0x41, 0x32, 0x71, 0x1d, 0xec, 0xba, 0x77, 0xcf, 0x71, 0x81, 0x8c, 0x90, 0x91, 0x4e, 0x4c, 0xd5, 0x82, 0x39, 0x67, 0x40, 0xca, 0xca, 0xf2, 0x66, 0xd1, 0x5b, 0xd5, 0xd6, 0x9c, 0x4e, 0x82, 0xb8, 0x49, 0xb1, 0xb2, 0x10, 0x3e, 0x95, 0x23, 0x2c, 0x9a, 0x51, 0x08, 0xa1, 0x02, 0xc4, 0x27, 0x97, 0x4b, 0xe3, 0xaa, 0xb6, 0xaa, 0x6f, 0x38, 0xd3, 0x82, 0x6b, 0x95, 0xb2, 0x5b, 0xaa, 0xe1, 0x0b, 0x5e, 0x4b, 0x52, 0x8c, 0xb4, 0x58, 0x8c, 0xea, 0x6e, 0xa5, 0xcc, 0xf2, 0x0c, 0x7c, 0xc1, 0xec, 0x45, 0x5a, 0x2e, 0x03, 0xf7, 0xee, 0x3c, 0xe1, 0xf7, 0x66, 0x68, 0x46, 0x75, 0x77, 0x4b, 0xb3, 0xba, 0x3a, 0xe0, 0x0d, 0x5b, 0x20, 0x97, 0x2c, 0xa0, 0x28, 0xe4, 0xe1, 0x8c, 0x34, 0x3d, 0x2d, 0x9c, 0x72, 0xff, 0xd5, 0x83, 0x35, 0xdd, 0x0c, 0x87, 0x4d, 0xce, 0xfb, 0xa6, 0xcc, 0x21, 0xcf, 0xcf, 0x79, 0x63, 0xb0, 0x1e, 0x30, 0xb4, 0x91, 0x72, 0x69, 0x01, 0xd5, 0xcb, 0x38, 0xf6, 0xbd, 0xaa, 0xb3, 0x25, 0xbc, 0x1a, 0xf4, 0xd4, 0x16, 0xb0, 0x04, 0xee, 0x0d, 0x67, 0x2b, 0xb3, 0xca, 0x06, 0xae, 0x1e, 0x47, 0x7c, 0xa4, 0xd4, 0x6e, 0x71, 0x1b, 0x85, 0xd6, 0x46, 0xa0, 0x33, 0x74, 0x41, 0x60, 0x82, 0xe4, 0x6b, 0x95, 0xf3, 0x08, 0x5b, 0xcb, 0x92, 0x78, 0x7c, 0x1d, 0xa1, 0xfd, 0xea, 0x2e, 0x92, 0xf9, 0xc3, 0x59, 0x6b, 0x73, 0xb2, 0x04, 0xba, 0x64, 0x88, 0x98, 0xfb, 0xc9, 0x96, 0x0c, 0x30, 0x6d, 0x9c, 0x80, 0x45, 0xcb, 0x20, 0x23, 0x1c, 0xf0, 0x3a, 0xa5, 0x6c, 0x7b, 0x70, 0x25, 0x54, 0x9c, 0x91, 0xb2, 0xd5, 0xfc, 0xe9, 0x4e, 0xc8, 0xf0, 0xff, 0x92, 0x7c, 0x7e, 0x4a, 0x96, 0xb0, 0xb1, 0xe4, 0x2c, 0x9d, 0xe4, 0x96, 0x9c, 0x95, 0xc6, 0x59, 0xcd, 0x36, 0x13, 0xdb, 0x4d, 0xdb, 0x14, 0xf0, 0x84, 0xf8, 0x89, 0xfc, 0x11, 0xd9, 0xe7, 0x0a, 0x6d, 0x87, 0xc0, 0x9a, 0xf0, 0x8b, 0xa4, 0xb5, 0xaf, 0x20, 0x95, 0xba, 0x70, 0xc4, 0x59, 0xad, 0xe6, 0xb8, 0xbe, 0xdd, 0x87, 0xaf, 0xf3, 0x6c, 0xb7, 0xaf, 0x10, 0x76, 0xb7, 0x86, 0xf1, 0xc5, 0x3d, 0x79, 0xb9, 0x60, 0x8a, 0x48, 0xbd, 0xf7, 0x36, 0x84, 0xdc, 0x8d, 0xd0, 0x0b, 0x2e, 0xda, 0x6d, 0xf0, 0x6b, 0xaf, 0x75, 0xcc, 0xa9, 0xf5, 0xac, 0xc9, 0x0f, 0xd6, 0x46, 0x98, 0x81, 0x74, 0x65, 0x97, 0xbd, 0xdc, 0x31, 0x4b, 0xc1, 0x3d, 0x37, 0x6b, 0x5b, 0xcc, 0xbf, 0x0c, 0xf1, 0x08, 0x57, 0x58, 0x45, 0x0d, 0xad, 0x49, 0xf1, 0x86, 0xc7, 0xfa, 0x97, 0xc3, 0xb9, 0xc4, 0x8f, 0xea, 0x75, 0x99, 0x91, 0x3a, 0x7b, 0x8c, 0x21, 0x28, 0xfb, 0xaa, 0x0f, 0x79, 0x9b, 0x0d, 0xb1, 0x33, 0x5f, 0x7e, 0x9f, 0x60, 0x1d, 0xd3, 0x2a, 0x4e, 0x4c, 0x87, 0x90, 0xf2, 0x18, 0x4b, 0xda, 0x1c, 0xd5, 0xdd, 0x6d, 0x80, 0xa9, 0x9a, 0x4e, 0x75, 0xe5, 0x7a, 0x60, 0x57, 0xb3, 0xa1, 0xf3, 0x29, 0xe8, 0xe3, 0x6f, 0xba, 0x07, 0x7a, 0x6b, 0x2e, 0xae, 0x3c, 0xdc, 0x91, 0x59, 0xe2, 0x3e, 0xcd, 0x51, 0xf2, 0xfa, 0x2f, 0x5e, 0x3f, 0x8c, 0x61, 0x36, 0xce, 0xb5, 0x83, 0xa4, 0x7f, 0x4d, 0xd3, 0x10, 0x22, 0xfc, 0x32, 0x6c, 0x12, 0xfb, 0x85, 0xf6, 0xb8, 0x3d, 0x17, 0xb2, 0x6d, 0xb9, 0x90, 0xe3, 0xc8, 0x45, 0x9c, 0x8d, 0xf7, 0x72, 0xfc, 0x75, 0x84, 0x0c, 0x58, 0x8e, 0xdc, 0x26, 0x93, 0xd7, 0x14, 0xec, 0xe1, 0x80, 0xdd, 0xa0, 0xdb, 0x4c, 0xf8, 0x01, 0xaf, 0x82, 0x74, 0xc2, 0x47, 0xac, 0x88, 0x9d, 0x33, 0x6c, 0x1e, 0x54, 0xe4, 0xd0, 0x0c, 0xae, 0xa7, 0x4c, 0x5c, 0x58, 0x86, 0xb7, 0xf7, 0xa8, 0x46, 0xbe, 0xff, 0xb3, 0x2e, 0xa5, 0x41, 0x65, 0xbd, 0x23, 0xfc, 0x1b, 0x51, 0x4b, 0x86, 0x1a, 0xd8, 0x47, 0xf6, 0xe6, 0x66, 0x69, 0x63, 0x7b, 0x60, 0x4d, 0x48, 0x76, 0xa4, 0x4c, 0x46, 0x9a, 0x61, 0x72, 0x29, 0xe4, 0x20, 0x06, 0xe8, 0xc1, 0x2b, 0x1f, 0xaf, 0x22, 0x65, 0x1a, 0x9c, 0x0c, 0x1b, 0x28, 0x44, 0x2f, 0xdd, 0xc6, 0xa5, 0x93, 0xb5, 0xc8, 0xb1, 0x6e, 0x27, 0x52, 0x23, 0xd8, 0xea, 0x1f, 0xef, 0x41, 0x9c, 0x2c, 0x47, 0xb7, 0xb1, 0xc0, 0xbb, 0x11, 0xcd, 0x2f, 0xa6, 0x67, 0x5c, 0xcc, 0xf7, 0x76, 0xb1, 0x27, 0x87, 0x22, 0x5c, 0x0f, 0xef, 0x72, 0x6a, 0x87, 0x9e, 0xba, 0x28, 0x9e, 0xba, 0x68, 0x64, 0xea, 0xac, 0x62, 0xf2, 0x8a, 0xe1, 0x2d, 0xdd, 0x27, 0x78, 0x4f, 0x0d, 0x24, 0x55, 0x45, 0x58, 0x9c, 0x55, 0xb4, 0x77, 0x3f, 0x86, 0x18, 0x86, 0x85, 0xbc, 0x3a, 0xb9, 0x01, 0x0a, 0xa1, 0x10, 0x73, 0x76, 0x09, 0xcf, 0x37, 0xd3, 0x7a, 0x84, 0x95, 0x1f, 0x55, 0xe1, 0x5e, 0x68, 0x13, 0xe9, 0xf8, 0xb9, 0x5d, 0x4f, 0xd1, 0x46, 0xf6, 0xf3, 0xa0, 0x50, 0xd8, 0x7d, 0x3f, 0x72, 0xc8, 0x6b, 0xa1, 0x13, 0x79, 0x81, 0x93, 0xc7, 0xde, 0x22, 0x69, 0x98, 0x0b, 0x49, 0x98, 0x14, 0x07, 0x4a, 0xc3, 0xc4, 0xb9, 0x76, 0xcd, 0xf5, 0xe7, 0xfb, 0x89, 0xdf, 0xac, 0x69, 0x93, 0xfd, 0xd4, 0x32, 0xb2, 0x2e, 0x72, 0x55, 0x11, 0x58, 0x58, 0xd8, 0xf8, 0xe2, 0x0a, 0xd2, 0x80, 0x35, 0xbd, 0x08, 0xb7, 0xd4, 0xdc, 0xdb, 0x3c, 0x6a, 0xf7, 0xbd, 0xf5, 0xf9, 0x6f, 0xde, 0x9b, 0x7f, 0xfb, 0xca, 0xd8, 0xc9, 0x8c, 0x19, 0xd2, 0x11, 0xf7, 0x43, 0x44, 0xa9, 0x6d, 0x34, 0xac, 0xc3, 0xed, 0x41, 0x58, 0xf7, 0x75, 0xa9, 0x69, 0x6c, 0xf1, 0x99, 0x3d, 0x7c, 0x07, 0xd6, 0x35, 0x92, 0x6d, 0x64, 0x83, 0x75, 0x6e, 0x42, 0xa2, 0x53, 0x31, 0xd2, 0x9a, 0x17, 0x16, 0xeb, 0xf2, 0x89, 0x82, 0x50, 0x10, 0x1f, 0xde, 0x45, 0x27, 0x67, 0x08, 0x33, 0x6c, 0xf6, 0x25, 0x60, 0x25, 0xbc, 0x22, 0x92, 0x91, 0xbc, 0x47, 0xe8, 0x32, 0x0b, 0x07, 0x67, 0x9f, 0xc5, 0x51, 0x9c, 0x13, 0x0f, 0x3f, 0x3c, 0x35, 0x00, 0xe9, 0x56, 0x2f, 0xd2, 0x67, 0x16, 0xd1, 0x7f, 0x53, 0xfd, 0x90, 0x86, 0x2b, 0x5d, 0x29, 0x45, 0x5c, 0xda, 0xb1, 0x7e, 0xea, 0x12, 0x30, 0x61, 0xd9, 0xf8, 0x6b, 0xdd, 0x48, 0xba, 0x5c, 0xf6, 0xf1, 0xe4, 0xfd, 0xd6, 0x51, 0x6a, 0xcb, 0x51, 0x2a, 0x23, 0x92, 0x9a, 0x69, 0xf5, 0x07, 0xb6, 0x87, 0xcc, 0x25, 0x67, 0x10, 0x5f, 0xed, 0xc2, 0x9a, 0x6f, 0x54, 0xe7, 0x91, 0xc7, 0xc3, 0xba, 0xd3, 0x8a, 0x3c, 0x8f, 0xed, 0xbf, 0x0c, 0x93, 0xa9, 0x91, 0x83, 0xed, 0x48, 0xbd, 0xfd, 0xa2, 0x00, 0x67, 0x82, 0x6a, 0x50, 0x4e, 0x04, 0xd7, 0xef, 0x59, 0x5f, 0x77, 0x59, 0xd8, 0x0a, 0x2d, 0xc5, 0x1c, 0x26, 0xad, 0x37, 0x01, 0xb6, 0x7a, 0xe3, 0xa9, 0x2e, 0x7b, 0xd4, 0x5a, 0xaa, 0x98, 0x12, 0x92, 0x3d, 0x49, 0xf5, 0x7d, 0x51, 0x68, 0xdf, 0x20, 0xbd, 0x49, 0xd0, 0x22, 0x07, 0xdb, 0xab, 0x38, 0xb0, 0xbd, 0xe6, 0x5c, 0xa6, 0x34, 0x6b, 0xb1, 0xd7, 0x77, 0x85, 0x17, 0xce, 0x3e, 0x37, 0xbc, 0x8d, 0xb6, 0x06, 0x50, 0x54, 0xe5, 0xc7, 0x67, 0x20, 0x3d, 0x94, 0x7d, 0x23, 0x6f, 0xa8, 0x36, 0xaf, 0x2d, 0x23, 0x74, 0x42, 0xc9, 0x14, 0xfe, 0x44, 0x94, 0x5c, 0xd8, 0xd8, 0x1f, 0xb5, 0x7a, 0x5e, 0xeb, 0xf3, 0x3e, 0xdb, 0x05, 0x23, 0xca, 0x37, 0x24, 0x6c, 0xd1, 0x91, 0xac, 0x1e, 0x5b, 0x57, 0x65, 0x09, 0x58, 0xb2, 0xde, 0x18, 0xf6, 0x25, 0x3c, 0xbe, 0x22, 0x55, 0x22, 0xb8, 0x55, 0x2b, 0x11, 0x67, 0x98, 0x96, 0x2c, 0x51, 0xad, 0x10, 0x17, 0x2c, 0x6a, 0xf5, 0xbe, 0x76, 0x30, 0x59, 0x0e, 0x96, 0xec, 0x78, 0xe9, 0x54, 0x75, 0x78, 0x98, 0xfd, 0xba, 0x98, 0x35, 0x30, 0x4c, 0x65, 0x9b, 0x26, 0x78, 0x67, 0x54, 0xb2, 0xd5, 0x40, 0xf2, 0x27, 0x83, 0x99, 0x91, 0xf1, 0xe5, 0xd0, 0x2a, 0xef, 0x6d, 0xaf, 0x6f, 0x42, 0x88, 0x9f, 0x8d, 0x7d, 0xde, 0x48, 0x92, 0x7c, 0x88, 0xd7, 0xec, 0xa4, 0xb3, 0x53, 0xb6, 0x1a, 0x0d, 0x6a, 0x90, 0xea, 0x23, 0xea, 0x49, 0x34, 0x5b, 0xd8, 0x13, 0xaf, 0x27, 0xd7, 0x91, 0xe8, 0x0f, 0xe2, 0x40, 0x20, 0xad, 0x1f, 0xaf, 0xe5, 0x48, 0xcd, 0x00, 0xd2, 0xff, 0x4d, 0xae, 0x63, 0xc2, 0xb6, 0x18, 0x59, 0x4b, 0x41, 0x5c, 0x25, 0x1b, 0xc7, 0x23, 0x07, 0xb1, 0x0c, 0xef, 0x91, 0x83, 0x56, 0xb2, 0x4f, 0x63, 0xb4, 0xb2, 0x67, 0x4c, 0xe2, 0x25, 0x12, 0x06, 0xc8, 0xd6, 0x22, 0x71, 0x45, 0x60, 0xdd, 0x02, 0xc2, 0x0e, 0xca, 0xd7, 0xbb, 0xdd, 0x63, 0x49, 0x7e, 0x68, 0xf6, 0x87, 0x60, 0xf2, 0xfe, 0x90, 0xd7, 0x59, 0xb2, 0xc6, 0x94, 0x4d, 0x97, 0x7e, 0x25, 0x0b, 0x8e, 0x26, 0x01, 0x53, 0x05, 0x5d, 0x4e, 0x3e, 0xac, 0x9c, 0xdf, 0xa2, 0x15, 0x30, 0x3c, 0x87, 0x61, 0x5c, 0x0b, 0x93, 0x7f, 0xa5, 0x45, 0xc2, 0x94, 0xae, 0xe4, 0x94, 0xe4, 0x65, 0x89, 0x52, 0xb3, 0x97, 0x50, 0xce, 0x41, 0x60, 0x67, 0xfa, 0xfe, 0x14, 0xbc, 0xa1, 0x5d, 0x22, 0x84, 0x9a, 0xa3, 0x4c, 0xd8, 0xb7, 0x42, 0x17, 0x61, 0x86, 0xa0, 0xe1, 0x07, 0x2e, 0xb3, 0x3f, 0x86, 0x15, 0xa3, 0x0a, 0x9d, 0x2b, 0x46, 0x15, 0xd9, 0x56, 0x8c, 0xf2, 0x20, 0xca, 0x35, 0x13, 0xe9, 0x47, 0x17, 0x5e, 0x8e, 0x16, 0x98, 0x85, 0x25, 0xce, 0x19, 0xd0, 0x0e, 0x22, 0xf6, 0x7e, 0x65, 0x5f, 0x11, 0xd9, 0x63, 0xd0, 0xd6, 0x84, 0x21, 0xa5, 0xbc, 0x16, 0x71, 0x24, 0x8d, 0x24, 0x2a, 0x8b, 0x6a, 0x33, 0x88, 0x3f, 0x98, 0x32, 0x03, 0xdf, 0xa3, 0x21, 0x48, 0x79, 0x1c, 0xf7, 0x92, 0xa3, 0xf8, 0x4c, 0xbe, 0x33, 0xda, 0xf0, 0xde, 0x89, 0x61, 0x9b, 0xc9, 0x0a, 0x1a, 0x3e, 0xdf, 0x8b, 0xf1, 0x97, 0xd5, 0x52, 0x1e, 0x6b, 0x71, 0x25, 0xef, 0xc2, 0xfb, 0x3a, 0xfc, 0xda, 0x82, 0x5f, 0x11, 0xa7, 0xd2, 0xd6, 0x87, 0x2d, 0xf5, 0x20, 0x5d, 0xc4, 0xa7, 0x0d, 0x18, 0x7a, 0x17, 0xae, 0xce, 0x26, 0x96, 0xf1, 0x42, 0x5a, 0x21, 0xb0, 0x25, 0xa4, 0xfb, 0xc6, 0xa8, 0xda, 0x66, 0x8f, 0xe2, 0xd8, 0x83, 0xc1, 0xa0, 0x78, 0x26, 0xcd, 0xc6, 0x91, 0x99, 0xdb, 0x02, 0x62, 0x16, 0xd2, 0x55, 0xfa, 0xd1, 0x76, 0xf0, 0x4e, 0x05, 0x13, 0x51, 0xe6, 0xc1, 0x0e, 0x21, 0x8b, 0x40, 0xd7, 0x94, 0x2e, 0x13, 0xdc, 0x3a, 0x07, 0xd2, 0x23, 0x52, 0x46, 0xb6, 0xc3, 0x6f, 0x96, 0xb4, 0xf5, 0x2c, 0x8d, 0x75, 0x11, 0x9f, 0x36, 0x84, 0xce, 0xcd, 0x8d, 0x12, 0xbf, 0x50, 0xb3, 0x65, 0xd8, 0xf8, 0x9d, 0xbe, 0x5c, 0xe2, 0x38, 0xe7, 0xf1, 0xcb, 0x19, 0xfc, 0x92, 0x16, 0xdc, 0x68, 0x37, 0x47, 0x24, 0x6b, 0x69, 0xb0, 0x33, 0xe3, 0xb3, 0xf8, 0x65, 0x2d, 0xc7, 0xb9, 0x80, 0x4f, 0xeb, 0x42, 0x67, 0x30, 0xce, 0xbb, 0x37, 0xae, 0x67, 0xca, 0xc2, 0x44, 0x3d, 0x85, 0xd5, 0x0d, 0xba, 0x4a, 0x3e, 0xea, 0x82, 0x71, 0xb4, 0x9f, 0x98, 0x86, 0xd5, 0xb2, 0xd3, 0x04, 0x93, 0xb0, 0x96, 0x2a, 0x0c, 0x6d, 0x57, 0x64, 0x65, 0xf6, 0xdc, 0xe8, 0x32, 0xa3, 0xb2, 0x04, 0xe7, 0xfe, 0x77, 0x69, 0x1d, 0x63, 0x0b, 0xf1, 0x2a, 0xbd, 0xb0, 0x1d, 0x02, 0xd8, 0xc2, 0xf0, 0x3b, 0x81, 0x9b, 0xc3, 0x19, 0xc1, 0xfb, 0x4b, 0xde, 0x87, 0xf4, 0x9f, 0xf6, 0x2f, 0x06, 0x39, 0xa8, 0xdc, 0x8f, 0x3d, 0x5f, 0x69, 0x03, 0xbb, 0x1f, 0xef, 0xbe, 0xe0, 0x46, 0x97, 0xb9, 0x55, 0x52, 0xca, 0x83, 0xeb, 0xc8, 0xa2, 0x86, 0xd6, 0x41, 0x98, 0x27, 0xd6, 0x98, 0xc6, 0x63, 0x1e, 0x49, 0xf3, 0x85, 0x4e, 0xdd, 0xb8, 0xce, 0xf2, 0x8e, 0x1b, 0xd5, 0x99, 0xbc, 0x63, 0x0f, 0xab, 0xf1, 0x3a, 0xbd, 0xc6, 0xdb, 0x68, 0x5e, 0x84, 0x7a, 0xe6, 0x76, 0x86, 0x36, 0xaa, 0x70, 0xf5, 0x0d, 0xea, 0xff, 0x78, 0x5f, 0x77, 0xc4, 0xfb, 0x7a, 0x4d, 0xac, 0xaf, 0xaf, 0xee, 0xc3, 0xda, 0x83, 0xf4, 0x7d, 0xda, 0xaf, 0x83, 0x1b, 0x73, 0x32, 0xcd, 0x46, 0xad, 0x0b, 0x67, 0xc4, 0x60, 0x70, 0xa3, 0x39, 0x13, 0xa6, 0x85, 0xcc, 0xc1, 0x8d, 0x59, 0x99, 0xe6, 0x14, 0xad, 0x2b, 0x64, 0x52, 0x0d, 0x59, 0x46, 0x55, 0xae, 0xfe, 0x65, 0xa0, 0x2c, 0x6c, 0xb0, 0xdc, 0xac, 0x5a, 0xc8, 0x1a, 0x15, 0x59, 0x61, 0x70, 0xb3, 0x94, 0x4b, 0x75, 0xf7, 0x01, 0xa8, 0xed, 0xdb, 0x0b, 0xf5, 0x07, 0x82, 0xf7, 0x2b, 0x95, 0x16, 0x2a, 0x0f, 0x30, 0xd5, 0xc7, 0x58, 0xc2, 0x7c, 0x2e, 0xa1, 0x18, 0x73, 0xcf, 0x11, 0xb9, 0x4b, 0xce, 0x7f, 0x20, 0xef, 0x83, 0x98, 0xf7, 0xf3, 0x2a, 0xc0, 0x25, 0xcc, 0xad, 0xfa, 0xc6, 0x3d, 0x26, 0xb5, 0x7e, 0xea, 0x1e, 0xdb, 0x68, 0x82, 0xd2, 0x0f, 0x40, 0x9a, 0x54, 0x01, 0xe9, 0x41, 0xec, 0xab, 0xc1, 0xa7, 0xb9, 0x9e, 0xae, 0xb9, 0x1d, 0xcb, 0xd2, 0xed, 0xb8, 0x4b, 0x0a, 0x8e, 0x99, 0x64, 0x6d, 0xf9, 0x2e, 0xe9, 0x5d, 0x09, 0x3b, 0x6d, 0x74, 0xca, 0xe2, 0xb8, 0xdb, 0x34, 0x22, 0x67, 0xe7, 0x12, 0x48, 0x0f, 0x10, 0x17, 0x10, 0x06, 0x97, 0x51, 0x1e, 0x83, 0x75, 0x7a, 0xfd, 0x00, 0x9e, 0xc6, 0x1a, 0x02, 0x3c, 0x36, 0xbc, 0x8e, 0xf0, 0xaa, 0xa8, 0xa3, 0x4a, 0x76, 0xf2, 0x6e, 0xd0, 0xe2, 0xde, 0xcc, 0x90, 0x29, 0xb8, 0x31, 0x88, 0x33, 0x69, 0x30, 0x6b, 0x78, 0x8d, 0xa0, 0xe7, 0xef, 0xa9, 0xd1, 0x5f, 0x8f, 0x53, 0x8d, 0xfe, 0xfa, 0xaa, 0x5e, 0xa3, 0x1c, 0xac, 0x4f, 0xe6, 0xb0, 0xda, 0xf8, 0xac, 0x9e, 0x5b, 0x3f, 0xed, 0xaa, 0x48, 0xea, 0x31, 0x15, 0xfe, 0xba, 0xba, 0x15, 0x90, 0xaa, 0x32, 0xb5, 0x22, 0x2e, 0xd9, 0x1a, 0xf6, 0x7a, 0x91, 0xee, 0x74, 0xa8, 0x99, 0x8e, 0x71, 0x02, 0xba, 0x25, 0xf9, 0x0c, 0xf7, 0xf1, 0x59, 0xe2, 0xbb, 0x24, 0x4d, 0x40, 0xd6, 0xf3, 0xab, 0xbb, 0xf3, 0x65, 0xe1, 0xf9, 0x6d, 0x94, 0x49, 0x78, 0x25, 0x73, 0x22, 0xa6, 0x81, 0x98, 0x87, 0xc3, 0x81, 0x38, 0x7b, 0x91, 0x1b, 0x0a, 0x5c, 0x81, 0x3f, 0x7c, 0x08, 0x2e, 0xac, 0x77, 0x3a, 0x79, 0x2b, 0xb3, 0x33, 0xbc, 0xc3, 0x95, 0x54, 0xfb, 0xb3, 0x97, 0x71, 0x75, 0x35, 0x7b, 0x33, 0xc8, 0xce, 0x81, 0xdc, 0x16, 0xbc, 0x9f, 0xa9, 0x3f, 0x90, 0x26, 0xd6, 0x3a, 0x88, 0xf6, 0x23, 0xb9, 0x30, 0x3e, 0xbb, 0xb8, 0x35, 0x04, 0xd2, 0x90, 0xea, 0xc3, 0xa7, 0x29, 0xf8, 0xb5, 0x97, 0x28, 0x45, 0x3e, 0x05, 0x41, 0x3c, 0x9f, 0xa9, 0x49, 0x90, 0xd2, 0x09, 0xf2, 0x21, 0x15, 0x09, 0x52, 0x83, 0xb0, 0x0b, 0x23, 0xbd, 0x42, 0x1a, 0xc1, 0x4c, 0x47, 0x02, 0x3c, 0x4c, 0x94, 0x27, 0x86, 0xed, 0x57, 0x0b, 0x2d, 0x37, 0xeb, 0x65, 0x5c, 0x60, 0xda, 0xd3, 0x44, 0xf0, 0x55, 0x3a, 0xa5, 0x9a, 0x7f, 0x8c, 0x35, 0x91, 0x4e, 0xd3, 0xe8, 0x48, 0xc5, 0xfc, 0x7c, 0x22, 0x73, 0x50, 0x5b, 0xff, 0x99, 0x62, 0x6d, 0x83, 0x5a, 0x64, 0xb9, 0x99, 0xe5, 0x26, 0xa7, 0x86, 0x14, 0x3a, 0x15, 0xe1, 0xaf, 0xcf, 0x07, 0x7c, 0x21, 0x33, 0x62, 0x8f, 0x33, 0x71, 0xf7, 0x5e, 0x8d, 0xa1, 0x2b, 0x23, 0xfc, 0xcb, 0xdf, 0x7e, 0x80, 0x29, 0xd7, 0x62, 0xca, 0x75, 0x24, 0x7b, 0x23, 0xad, 0xe6, 0xb0, 0x4d, 0x18, 0xd6, 0xae, 0x9e, 0xe7, 0xe7, 0x0e, 0x7c, 0xee, 0xc0, 0xef, 0xe4, 0xfd, 0x53, 0xfd, 0xd9, 0xaf, 0x43, 0xd8, 0xf3, 0x52, 0x2d, 0x7f, 0x59, 0x92, 0xd9, 0x17, 0xbc, 0xcf, 0x32, 0x9e, 0xf7, 0x01, 0x03, 0x7e, 0x39, 0xc3, 0xa1, 0x41, 0x8c, 0xdf, 0xa9, 0xee, 0x7e, 0x96, 0x9e, 0xcb, 0x33, 0xfb, 0x94, 0xd9, 0x3f, 0xfb, 0x35, 0xd6, 0x39, 0xdf, 0xf2, 0x39, 0x86, 0x0b, 0x74, 0x1a, 0x13, 0xc0, 0x18, 0x6b, 0x66, 0x9d, 0x46, 0x7c, 0x74, 0x36, 0x49, 0xe3, 0x99, 0x6f, 0xc6, 0xd6, 0xa6, 0x73, 0xda, 0xac, 0xe0, 0xfd, 0xf8, 0xed, 0x5e, 0x35, 0x8d, 0xdf, 0x4c, 0xf8, 0xdc, 0x85, 0xad, 0x01, 0xb8, 0xc8, 0x7d, 0x3d, 0x25, 0x24, 0x5b, 0x3e, 0xff, 0xdc, 0xaf, 0xeb, 0x00, 0xce, 0x63, 0x7b, 0x32, 0xf4, 0x93, 0x06, 0x6c, 0x15, 0xce, 0xd9, 0x52, 0x9a, 0xb3, 0x99, 0x7d, 0x1c, 0xfb, 0x05, 0x8e, 0xfd, 0xcd, 0xd0, 0x61, 0xca, 0x05, 0x0e, 0x52, 0x2e, 0xd8, 0xb6, 0xcd, 0x88, 0x57, 0x5b, 0xd9, 0x8b, 0x7a, 0x61, 0x98, 0xfb, 0x0f, 0x76, 0xe0, 0x97, 0xa8, 0x7a, 0x8a, 0x9f, 0x1f, 0xce, 0x1c, 0x04, 0x27, 0xc2, 0xf7, 0x26, 0xee, 0xf1, 0x3b, 0xc2, 0x33, 0xf8, 0xa4, 0x6a, 0x72, 0xb8, 0xa0, 0xd6, 0xc4, 0x23, 0xea, 0x52, 0x1d, 0x46, 0xd0, 0x5e, 0x27, 0x19, 0xc3, 0x5a, 0x45, 0xcd, 0x61, 0x7e, 0x40, 0x16, 0x7f, 0xfb, 0x46, 0xc8, 0xa2, 0x26, 0x38, 0x00, 0xab, 0x43, 0x72, 0xf0, 0x7e, 0xcb, 0x34, 0x4d, 0xc3, 0x5c, 0xcb, 0x6f, 0x54, 0x4b, 0x2c, 0xc7, 0x88, 0xdf, 0xed, 0x99, 0x7d, 0x76, 0xff, 0xcf, 0x0e, 0x85, 0x4d, 0x0c, 0x97, 0x11, 0x22, 0x5a, 0x6e, 0x0e, 0xc1, 0xd5, 0x9d, 0xd8, 0x5f, 0x26, 0xf2, 0x2f, 0x01, 0xcd, 0xd4, 0x0f, 0xb5, 0x16, 0xf6, 0x35, 0xe1, 0xae, 0xda, 0x7f, 0x19, 0xe9, 0xb3, 0x16, 0x92, 0x1e, 0xcb, 0x88, 0xf9, 0xb7, 0x7b, 0xf6, 0xe5, 0x5a, 0x18, 0xda, 0xa3, 0xbe, 0x29, 0xfc, 0x4a, 0xde, 0x41, 0xd8, 0x73, 0x61, 0x1e, 0xd2, 0x9c, 0x38, 0x8f, 0x8b, 0x5d, 0x6e, 0xf0, 0x20, 0x1e, 0x91, 0xef, 0xfd, 0x21, 0x59, 0x6a, 0x2f, 0x8d, 0xdb, 0x99, 0x77, 0x9b, 0xdd, 0xa9, 0xc2, 0x5b, 0x71, 0xca, 0x05, 0xb2, 0xb1, 0x89, 0xf8, 0xc4, 0x16, 0xf6, 0x39, 0xe0, 0x88, 0x68, 0xbd, 0x6b, 0x43, 0x99, 0x88, 0x2d, 0xb8, 0x70, 0xce, 0xa7, 0xad, 0x64, 0xad, 0x4e, 0x96, 0x6e, 0x7d, 0x41, 0xd8, 0x9d, 0x14, 0x38, 0xfa, 0x4c, 0x3a, 0x1b, 0x51, 0x5c, 0x84, 0x01, 0xa5, 0x9d, 0xba, 0x7f, 0x25, 0xa8, 0xd6, 0x24, 0xef, 0x88, 0xa3, 0xb6, 0xad, 0x61, 0xcd, 0xd3, 0x7e, 0x3a, 0xe3, 0x25, 0x8f, 0x88, 0x88, 0xab, 0x59, 0x62, 0x3e, 0x12, 0x9b, 0x8e, 0x91, 0x54, 0x35, 0x9f, 0xd3, 0xb7, 0x8d, 0xf4, 0xa7, 0x10, 0xd7, 0x3d, 0x26, 0x4c, 0x98, 0xcf, 0x6a, 0x69, 0x3d, 0x32, 0xd7, 0x47, 0x8e, 0xd9, 0x0e, 0xac, 0x60, 0x8d, 0x50, 0xb2, 0x49, 0x3d, 0x9c, 0xa6, 0x26, 0x7e, 0x88, 0x75, 0x1a, 0x6c, 0x57, 0x4a, 0xe6, 0x76, 0xd5, 0x74, 0xb7, 0x5c, 0xdd, 0xd3, 0x55, 0x6f, 0x21, 0x4c, 0x7c, 0x72, 0xa4, 0x8b, 0x7c, 0x6d, 0x08, 0x4b, 0x46, 0xcb, 0xc1, 0x3a, 0x79, 0x09, 0xd2, 0xc5, 0x6c, 0xa7, 0x81, 0xa4, 0xeb, 0x6d, 0x51, 0x95, 0xfc, 0xef, 0x6d, 0x45, 0x82, 0x85, 0x64, 0xa1, 0xc9, 0xb2, 0xf8, 0x6a, 0xf2, 0xb1, 0x12, 0xce, 0xb2, 0x75, 0x2a, 0x9e, 0xc9, 0xd5, 0x98, 0x92, 0x3d, 0xc5, 0x92, 0x37, 0x13, 0xa1, 0x4f, 0x13, 0xc3, 0xd6, 0x8b, 0xac, 0xa4, 0x61, 0xe2, 0xa0, 0x33, 0xe5, 0x15, 0xcc, 0x09, 0x44, 0xfa, 0x90, 0xb8, 0xbe, 0x57, 0x57, 0x53, 0xdc, 0x70, 0x90, 0x4f, 0x88, 0x74, 0x4f, 0x2f, 0x6c, 0xa7, 0x2e, 0x9d, 0xce, 0x71, 0x91, 0xbe, 0xb6, 0x90, 0x97, 0x12, 0xd5, 0x29, 0x72, 0xe7, 0x7a, 0x6c, 0x46, 0xea, 0xd7, 0xee, 0x36, 0xe8, 0x18, 0x37, 0x42, 0xc3, 0x50, 0x36, 0x5b, 0x3e, 0x35, 0x23, 0x35, 0xfa, 0x4e, 0x73, 0x58, 0x58, 0xfd, 0xac, 0xee, 0x8e, 0x4b, 0x9c, 0xe7, 0xc4, 0x35, 0x54, 0xd9, 0xfb, 0x63, 0x98, 0x64, 0xa3, 0xd8, 0x5f, 0xd9, 0xd0, 0x1e, 0xa4, 0xce, 0x83, 0xc3, 0x7d, 0xa2, 0x25, 0xf9, 0x41, 0x1b, 0x81, 0x01, 0xde, 0x19, 0xe3, 0x50, 0x10, 0x3f, 0x8e, 0xad, 0x4f, 0xe2, 0x8c, 0xf1, 0x91, 0x0c, 0x1e, 0xd1, 0xa4, 0x4d, 0x26, 0xf6, 0x29, 0xb2, 0x52, 0xcd, 0x6c, 0xd6, 0x7b, 0x86, 0x6c, 0x05, 0x86, 0x32, 0x62, 0xfe, 0x80, 0xb4, 0x5e, 0xae, 0x11, 0x48, 0x8e, 0xc0, 0xba, 0x30, 0xdb, 0x6f, 0xcc, 0x23, 0xfc, 0xd8, 0x44, 0x7d, 0x9c, 0x87, 0x18, 0x6a, 0xc5, 0xc5, 0x43, 0xe0, 0xb5, 0xb1, 0x37, 0x52, 0xa4, 0xff, 0x5c, 0xe5, 0x24, 0xe1, 0xb6, 0x12, 0x9c, 0x72, 0xf5, 0x5a, 0x45, 0x2e, 0x1c, 0xeb, 0xf4, 0xa8, 0x06, 0x97, 0xcf, 0xeb, 0x1d, 0x86, 0x1b, 0x7b, 0xf8, 0x34, 0xf5, 0x33, 0xee, 0xd4, 0x11, 0x3e, 0x4b, 0xf3, 0x87, 0xe1, 0xc0, 0x14, 0xe7, 0xf3, 0xee, 0x54, 0xff, 0x0a, 0x98, 0x27, 0x62, 0x31, 0xcf, 0xde, 0x11, 0x4a, 0x0f, 0x78, 0x43, 0x69, 0x64, 0x53, 0x33, 0x26, 0x8f, 0x7a, 0x60, 0x53, 0x38, 0x9d, 0x3d, 0x1b, 0x98, 0xac, 0xe9, 0xc2, 0xaf, 0x4d, 0xa0, 0x33, 0x74, 0x97, 0xc0, 0x9c, 0xd9, 0xf7, 0x69, 0x99, 0x2a, 0x2b, 0x15, 0xa4, 0xc7, 0x14, 0xb0, 0x84, 0x3e, 0x0e, 0xac, 0x09, 0xa5, 0x3d, 0x77, 0xb8, 0x6e, 0xe2, 0x67, 0x8b, 0x61, 0x86, 0xba, 0x00, 0xf3, 0x9a, 0x8f, 0x6f, 0x16, 0x7c, 0x73, 0xab, 0x95, 0xe3, 0x15, 0x47, 0xc5, 0xb3, 0xbf, 0xaa, 0xbd, 0xac, 0x56, 0xdb, 0xc6, 0xb6, 0xae, 0x54, 0x73, 0x9a, 0xdd, 0x96, 0x1c, 0x61, 0x93, 0xcf, 0x2c, 0xc1, 0x8c, 0xf0, 0x85, 0x4c, 0xf2, 0xe3, 0xb5, 0x21, 0x03, 0xd4, 0xd3, 0xb6, 0xb1, 0xcd, 0x42, 0xf7, 0x23, 0xcb, 0x3d, 0x86, 0xb9, 0x09, 0x1b, 0x88, 0xa7, 0x25, 0xfc, 0xbf, 0x0a, 0x9e, 0x96, 0x32, 0xaa, 0xa7, 0xab, 0x7f, 0x63, 0xef, 0x86, 0xfa, 0x3d, 0xd6, 0x4a, 0x75, 0x07, 0xd9, 0xf9, 0x1a, 0xba, 0x6c, 0x1b, 0xeb, 0x95, 0xd4, 0x5d, 0x55, 0xdf, 0xa6, 0x11, 0x29, 0x2a, 0x20, 0x9e, 0x11, 0x52, 0x7d, 0xe5, 0x08, 0xc3, 0xd6, 0xd1, 0x2e, 0x26, 0xc3, 0x08, 0x9d, 0x5f, 0xd5, 0x4a, 0x2b, 0x83, 0x76, 0x24, 0xfc, 0xc6, 0xf6, 0xb3, 0x96, 0x90, 0x0f, 0x09, 0x37, 0x71, 0x7c, 0xb2, 0x59, 0xa2, 0x2b, 0xc7, 0xea, 0x63, 0x5d, 0xb1, 0x8a, 0x7d, 0xeb, 0xeb, 0xd2, 0x2d, 0x93, 0x98, 0x73, 0x6b, 0xe4, 0x1a, 0x9f, 0xa3, 0xfd, 0x31, 0x42, 0xf6, 0xa2, 0xb3, 0x5d, 0xcb, 0x81, 0x56, 0xe9, 0x3b, 0x56, 0x9f, 0x28, 0x25, 0x69, 0xaf, 0xc4, 0x2f, 0x89, 0x93, 0x0b, 0x3a, 0x49, 0xad, 0xd6, 0x75, 0x1c, 0x66, 0xca, 0x38, 0x57, 0x72, 0x90, 0xea, 0xb1, 0x25, 0x9d, 0xe0, 0x31, 0x37, 0x9f, 0xb9, 0x67, 0x97, 0x98, 0x6f, 0xe3, 0x61, 0x6f, 0xd2, 0x46, 0x87, 0x83, 0xce, 0xee, 0x56, 0x26, 0x9f, 0xe8, 0xad, 0x09, 0x4d, 0xc0, 0xba, 0x2b, 0xe2, 0xe4, 0xc3, 0x41, 0xf2, 0x7b, 0x46, 0x1b, 0xb4, 0x32, 0x57, 0x64, 0x70, 0x80, 0xb8, 0x6b, 0x6c, 0xa9, 0x91, 0xf5, 0x63, 0x02, 0x2b, 0xc8, 0x67, 0x9a, 0x6e, 0x0d, 0xd4, 0x10, 0xb2, 0x0a, 0xbf, 0x1d, 0x97, 0xd6, 0xf1, 0xef, 0x66, 0x3a, 0x13, 0xd5, 0xcf, 0x27, 0x4c, 0x14, 0x67, 0x12, 0xd9, 0x8a, 0xfe, 0xd6, 0x75, 0xd3, 0xe6, 0xc7, 0xd3, 0x6e, 0xe3, 0xdf, 0xc7, 0x31, 0x6d, 0xd1, 0x88, 0xb4, 0xf9, 0xb6, 0x6f, 0xc5, 0xfc, 0xf2, 0x16, 0x17, 0x38, 0xc1, 0x5e, 0xe1, 0x48, 0x27, 0xbf, 0x04, 0xca, 0x38, 0xeb, 0xa8, 0x96, 0x9c, 0xa3, 0xdd, 0xad, 0x86, 0x18, 0x5f, 0x8d, 0x3d, 0x19, 0x79, 0xe8, 0x7c, 0xd9, 0x1c, 0xfd, 0x6e, 0x59, 0x65, 0x79, 0xd8, 0x4c, 0x7a, 0x71, 0x29, 0x1f, 0x85, 0x5c, 0x0c, 0x1d, 0x40, 0xc0, 0xf9, 0xf7, 0xba, 0x90, 0xe2, 0x1e, 0x84, 0xcb, 0x1f, 0x5c, 0x40, 0xea, 0x33, 0x8d, 0x3c, 0xed, 0xb8, 0x47, 0x11, 0xde, 0x5e, 0xd5, 0xc3, 0x67, 0xf3, 0x19, 0xb8, 0xde, 0xcd, 0x56, 0x3a, 0xfd, 0xb8, 0x4d, 0x70, 0xeb, 0xd9, 0x0e, 0x43, 0xb1, 0x6e, 0xaf, 0xdf, 0x9a, 0x27, 0xe8, 0x4a, 0x97, 0x4d, 0xf7, 0x87, 0x87, 0x30, 0xc6, 0xa1, 0xce, 0x50, 0x32, 0xac, 0xa9, 0x36, 0x83, 0x7d, 0x94, 0xab, 0x3c, 0xe1, 0x69, 0x1a, 0xf1, 0xa8, 0x75, 0x61, 0xc7, 0xf0, 0x13, 0xea, 0x49, 0x24, 0x2b, 0x75, 0x16, 0xb6, 0xaa, 0x96, 0x40, 0xb4, 0xd1, 0x7c, 0x3c, 0xfa, 0x50, 0x34, 0xb0, 0x36, 0x74, 0x90, 0xb5, 0x96, 0xa5, 0x98, 0xd7, 0x47, 0x37, 0x51, 0xb6, 0xac, 0xe5, 0x42, 0xb5, 0x52, 0xe8, 0xac, 0x2c, 0x73, 0xe4, 0x19, 0x36, 0x59, 0x1f, 0xac, 0x89, 0x2a, 0x07, 0x13, 0x7a, 0x94, 0xcc, 0xd3, 0x37, 0xb3, 0xa5, 0x89, 0x09, 0xca, 0x24, 0xb6, 0xbb, 0x63, 0xb2, 0x3a, 0x62, 0x5c, 0x7e, 0x4e, 0x29, 0x55, 0xdd, 0x13, 0xd7, 0x85, 0x1f, 0xe6, 0xbf, 0xe2, 0x7a, 0x1e, 0x2b, 0xaa, 0xbe, 0x3a, 0x74, 0x9c, 0x75, 0x19, 0xa6, 0x31, 0x0f, 0xc0, 0x42, 0xb2, 0x33, 0xb6, 0x46, 0x30, 0x93, 0xc4, 0x53, 0x38, 0x73, 0xb8, 0x16, 0xfc, 0x2c, 0x6a, 0x91, 0x61, 0xd6, 0x07, 0xda, 0x29, 0xd7, 0xd8, 0x3b, 0xd7, 0xd1, 0x1e, 0xf0, 0xab, 0x8b, 0xce, 0xb1, 0xc6, 0xb5, 0x9a, 0x36, 0xf4, 0xb6, 0xb0, 0x1f, 0x02, 0x06, 0xf6, 0x16, 0xaf, 0x9f, 0x0b, 0x84, 0xc0, 0xb8, 0x8f, 0x24, 0xb2, 0xc3, 0x0a, 0xf1, 0x6c, 0x48, 0xca, 0x5e, 0xb7, 0x03, 0x3c, 0x2a, 0x11, 0x27, 0xfc, 0xa2, 0x0a, 0xc6, 0xcd, 0xb1, 0xd4, 0xfe, 0x46, 0xed, 0x9c, 0x80, 0xc1, 0xbf, 0xba, 0x18, 0xcf, 0xa3, 0x45, 0xc1, 0x50, 0xd6, 0xae, 0x76, 0x08, 0x6b, 0x71, 0xf3, 0xba, 0x74, 0x2f, 0x27, 0xac, 0x21, 0xfc, 0xe2, 0xfc, 0xd8, 0x29, 0x59, 0xc8, 0x14, 0x09, 0xdb, 0xa3, 0x98, 0xdf, 0xca, 0xa4, 0xfc, 0x2e, 0xb9, 0x0d, 0x73, 0xb8, 0xa6, 0x55, 0xdb, 0xe2, 0x39, 0x5a, 0x5d, 0xd3, 0x30, 0x3c, 0x11, 0x07, 0x67, 0x48, 0xd2, 0x57, 0x43, 0x1e, 0x7e, 0x75, 0xcc, 0x7a, 0xfd, 0xbf, 0x5e, 0x3f, 0x4c, 0xf0, 0x73, 0x15, 0xe4, 0x7a, 0x86, 0x8e, 0x93, 0xff, 0xe5, 0xe7, 0x9f, 0xd2, 0x2e, 0x2c, 0x36, 0x7a, 0xb7, 0x92, 0xe5, 0xb1, 0xa4, 0xd4, 0x97, 0x93, 0x53, 0x8f, 0x7a, 0x91, 0x5a, 0x6c, 0x05, 0xb9, 0x1d, 0x34, 0x4d, 0x23, 0xff, 0xec, 0xb9, 0x84, 0x3b, 0x4b, 0xda, 0x69, 0x39, 0xaa, 0x61, 0x57, 0x9a, 0xa3, 0x1e, 0xd2, 0x93, 0xc2, 0x99, 0x4b, 0x93, 0x94, 0x7c, 0xc8, 0x2b, 0x78, 0x0f, 0xe5, 0xab, 0x99, 0x1c, 0x6f, 0x94, 0x76, 0x5a, 0xb5, 0xf1, 0x53, 0x0a, 0x3e, 0x4d, 0x48, 0x2a, 0xe5, 0xf4, 0xb0, 0x52, 0x54, 0xd2, 0xbc, 0x04, 0x8f, 0x05, 0x70, 0x21, 0x63, 0x0d, 0x46, 0xf6, 0x48, 0xac, 0x3f, 0x9a, 0xc3, 0xf6, 0x76, 0x15, 0x46, 0x15, 0x9c, 0xea, 0x72, 0xd0, 0x0c, 0x94, 0x9d, 0x10, 0x78, 0x6a, 0xe8, 0x38, 0xae, 0xca, 0xc6, 0xa1, 0xe3, 0x47, 0x0e, 0x4d, 0x8a, 0x76, 0x41, 0xee, 0xbc, 0xa1, 0xe3, 0xc1, 0x7b, 0x6b, 0x36, 0x62, 0xdb, 0xce, 0x2d, 0x06, 0x6d, 0xa2, 0x0a, 0x86, 0x4c, 0xeb, 0x34, 0x6d, 0x50, 0xd4, 0x5f, 0x91, 0xc8, 0x52, 0xe5, 0xe0, 0x67, 0x57, 0xdd, 0xbc, 0x3f, 0x5a, 0x0f, 0x29, 0xa7, 0x92, 0x24, 0xab, 0x5b, 0xe4, 0x13, 0xf0, 0x38, 0xfd, 0x4b, 0x0b, 0xe5, 0x17, 0xe4, 0x7e, 0xf9, 0x34, 0x04, 0x53, 0x0c, 0x72, 0x6f, 0xca, 0x71, 0xfc, 0x2f, 0x4f, 0xe9, 0x93, 0x4e, 0xf1, 0x13, 0xfe, 0x4b, 0xa7, 0x82, 0x6b, 0x55, 0x79, 0xee, 0xda, 0xc0, 0xda, 0x70, 0x4e, 0x52, 0x7b, 0x4e, 0x26, 0xcd, 0x81, 0x77, 0xb0, 0xd4, 0x4d, 0xf1, 0x19, 0x94, 0x9a, 0x3c, 0x83, 0x52, 0xb6, 0x3b, 0xb1, 0x3f, 0x43, 0x07, 0x54, 0x48, 0xb9, 0x41, 0x0c, 0xc3, 0x3c, 0xea, 0xf1, 0xe1, 0x33, 0xcc, 0xdf, 0x38, 0xf4, 0x36, 0x8e, 0xd2, 0xe3, 0x37, 0x48, 0x61, 0x25, 0x6e, 0xd3, 0xb0, 0xf1, 0x98, 0x30, 0x62, 0x3c, 0xf2, 0x54, 0x4b, 0xc4, 0x40, 0x9a, 0xae, 0xaa, 0xa3, 0x59, 0xc6, 0x51, 0x3c, 0xad, 0x2a, 0x23, 0xc6, 0x22, 0x56, 0x77, 0x13, 0xd6, 0xec, 0x55, 0xef, 0x53, 0xda, 0x69, 0x91, 0x27, 0xf5, 0x1a, 0x43, 0xa3, 0xb3, 0x48, 0x83, 0x9c, 0xe0, 0xd9, 0x0f, 0xf2, 0x51, 0x4a, 0x4b, 0xfc, 0x3f, 0x1a, 0x23, 0xc5, 0xd8, 0xbf, 0xae, 0x3f, 0xaa, 0x34, 0x9b, 0x80, 0xc7, 0xcc, 0x90, 0x94, 0x17, 0xc8, 0x3b, 0x31, 0xb7, 0x35, 0xf6, 0xf2, 0xdf, 0xbd, 0xf8, 0xbb, 0x5f, 0xcf, 0xba, 0xb8, 0x0f, 0x6e, 0xd0, 0x27, 0xb5, 0x4e, 0x91, 0x6f, 0xdb, 0xf5, 0xbe, 0x87, 0xbd, 0x98, 0x87, 0xe7, 0xfa, 0x3d, 0x8d, 0x69, 0xed, 0xca, 0xdc, 0x23, 0x87, 0xac, 0x18, 0xfa, 0xda, 0xa1, 0x58, 0xbf, 0xb9, 0xb0, 0x2e, 0x7f, 0x78, 0x65, 0xce, 0xc7, 0xa7, 0x0d, 0x4a, 0xfa, 0x91, 0xde, 0xed, 0x06, 0x1a, 0xab, 0x15, 0x6b, 0xd4, 0x03, 0x89, 0x7a, 0x3c, 0x12, 0x9b, 0xef, 0xf2, 0xc8, 0xfc, 0xe4, 0x63, 0xc1, 0x4d, 0x33, 0xa6, 0x69, 0x27, 0xc3, 0x2b, 0x6f, 0x18, 0x63, 0x8f, 0xbc, 0x16, 0xc1, 0xb1, 0x16, 0xdc, 0x14, 0x81, 0x7c, 0x8c, 0x49, 0xa3, 0xa4, 0x7a, 0x6f, 0x18, 0x7b, 0x5d, 0x2c, 0x1e, 0xd5, 0x13, 0x6b, 0x8a, 0x75, 0x7c, 0xb5, 0xfd, 0xd5, 0x76, 0x6b, 0x73, 0x36, 0xbc, 0xf6, 0x52, 0xe9, 0x9f, 0xb6, 0x1b, 0xac, 0xa3, 0x5f, 0xeb, 0x35, 0x89, 0x3a, 0x82, 0xb6, 0x4c, 0xdd, 0xeb, 0x4c, 0x37, 0x8d, 0x62, 0xea, 0xbc, 0x69, 0x44, 0x9e, 0x71, 0x28, 0x82, 0xf8, 0x51, 0x30, 0xb8, 0x0e, 0xf1, 0x0e, 0x44, 0x32, 0x0e, 0xd0, 0x1a, 0x06, 0xc9, 0x4b, 0x1e, 0x56, 0xec, 0xb8, 0x0a, 0x78, 0x37, 0xda, 0xa5, 0x5a, 0xe3, 0xcf, 0x2f, 0xab, 0x59, 0xf1, 0xe7, 0xf7, 0xd4, 0xb4, 0xd8, 0xf3, 0x9f, 0x65, 0x21, 0x65, 0x6a, 0x3f, 0x40, 0x90, 0x9d, 0x7c, 0x4d, 0x4a, 0x27, 0xae, 0x3f, 0x3a, 0xd2, 0x0b, 0x34, 0x3a, 0xfa, 0x8c, 0x07, 0x38, 0x7e, 0x83, 0x39, 0x7f, 0x12, 0x73, 0x78, 0xc8, 0x39, 0x6d, 0xe8, 0x04, 0x95, 0x10, 0x78, 0x0a, 0xcc, 0xa1, 0x55, 0xc3, 0x61, 0x8a, 0x80, 0xaf, 0x49, 0xf9, 0x36, 0xd0, 0x78, 0x09, 0xfe, 0x37, 0xcf, 0x74, 0x84, 0x85, 0xb4, 0xfe, 0x63, 0x6b, 0x9e, 0xb5, 0x13, 0xcc, 0x31, 0x18, 0x28, 0xcd, 0xa4, 0xdc, 0xa8, 0xf7, 0xbe, 0xde, 0xee, 0x16, 0x92, 0x74, 0x89, 0x9c, 0xac, 0x6a, 0xdd, 0xb0, 0x92, 0xe7, 0x89, 0x56, 0x91, 0xc5, 0x3d, 0x0a, 0x73, 0x4b, 0xdc, 0xe2, 0x1c, 0xd1, 0x62, 0x82, 0x7c, 0xa2, 0x2e, 0x79, 0x63, 0xef, 0xbc, 0x37, 0xb7, 0x6c, 0xe8, 0x44, 0xee, 0xec, 0xa1, 0xe4, 0x56, 0x0d, 0x26, 0xcf, 0xe0, 0xbf, 0xbe, 0x10, 0xcb, 0xb9, 0x0d, 0x14, 0xde, 0x3b, 0xcc, 0x4b, 0xe0, 0x56, 0xc8, 0x5c, 0x3c, 0xc3, 0x4e, 0x50, 0xb5, 0xf4, 0xf5, 0x5f, 0x0a, 0xa8, 0xaa, 0x4e, 0x54, 0x16, 0xb2, 0xd5, 0x7b, 0x87, 0x36, 0x18, 0xb6, 0xd0, 0x3e, 0x6c, 0x4a, 0x9c, 0x54, 0xaf, 0x0e, 0x76, 0xee, 0x45, 0x78, 0x54, 0x67, 0xdc, 0x4b, 0xa3, 0x75, 0x8c, 0xeb, 0x08, 0xf0, 0x98, 0x12, 0xc4, 0xf9, 0x90, 0xdf, 0x35, 0x88, 0xfd, 0x70, 0xa9, 0x17, 0xbf, 0xd4, 0x15, 0xb6, 0xa6, 0xee, 0x6d, 0xaf, 0xcb, 0x63, 0x1d, 0x2b, 0x5e, 0x4f, 0x47, 0x0e, 0x99, 0x77, 0xe8, 0x3e, 0xb3, 0xb2, 0x27, 0xf9, 0xc0, 0x3c, 0xa9, 0x5c, 0x70, 0xa0, 0x11, 0xbb, 0xc8, 0x74, 0x9a, 0x4e, 0xdd, 0xef, 0x5b, 0xab, 0x2e, 0x2c, 0x61, 0x7f, 0x58, 0x64, 0xfb, 0x9b, 0x6c, 0xff, 0x54, 0xf5, 0x88, 0xb6, 0x57, 0x77, 0x93, 0x05, 0x76, 0x7a, 0x27, 0xdf, 0xd7, 0x2c, 0x8b, 0x9c, 0x6f, 0x0f, 0xb4, 0xb2, 0x97, 0x9c, 0x17, 0x37, 0xa9, 0x16, 0xe5, 0x1b, 0x71, 0x08, 0xbb, 0x35, 0xd8, 0x59, 0xdd, 0x2d, 0x72, 0xa1, 0x5a, 0xd6, 0x9f, 0x8a, 0xa5, 0x5b, 0x05, 0x48, 0x9d, 0x91, 0x06, 0x61, 0xaf, 0xce, 0x5d, 0x67, 0xff, 0xd7, 0x08, 0xcd, 0xaf, 0xbc, 0xb8, 0x4f, 0xbb, 0xc0, 0xf7, 0x97, 0xb5, 0x4b, 0x7c, 0x3f, 0xaa, 0x5d, 0x2e, 0xfb, 0x00, 0xf7, 0x9d, 0x74, 0xb6, 0xfa, 0x2e, 0x7a, 0x31, 0x65, 0xd8, 0xbe, 0x37, 0x91, 0xac, 0xa2, 0xa4, 0x7c, 0xa4, 0x0d, 0x86, 0xd8, 0x82, 0x08, 0x5b, 0x02, 0x43, 0x5c, 0xf6, 0x72, 0x35, 0xcf, 0x68, 0xa1, 0x73, 0x6f, 0x4e, 0xd8, 0xae, 0xb8, 0x8e, 0x17, 0x25, 0x2b, 0x61, 0x88, 0x88, 0xc7, 0xb8, 0x10, 0x7f, 0xc9, 0x27, 0x7a, 0x14, 0x71, 0x98, 0x22, 0xa2, 0x55, 0xc8, 0xef, 0x1d, 0x38, 0x10, 0xe3, 0xf3, 0x25, 0xb0, 0x98, 0xc6, 0x89, 0x6e, 0x1f, 0x14, 0xba, 0x03, 0x90, 0xef, 0x2e, 0x07, 0x97, 0x7b, 0x16, 0x38, 0xdc, 0x65, 0x60, 0x63, 0x5c, 0x85, 0xc7, 0x3e, 0x86, 0xb7, 0xf0, 0x79, 0x81, 0x4e, 0x6f, 0x21, 0x9e, 0xef, 0x20, 0xeb, 0x3c, 0x09, 0x1d, 0xe7, 0x18, 0xe6, 0x82, 0x58, 0xe5, 0x74, 0xf2, 0xca, 0xc0, 0xbb, 0x3d, 0xd6, 0x80, 0x2e, 0xf2, 0x4c, 0x23, 0x7c, 0xbd, 0x85, 0xed, 0x64, 0x1b, 0x2b, 0x61, 0x8b, 0x26, 0x86, 0xb5, 0x20, 0x05, 0x6b, 0x8e, 0x7b, 0x71, 0xca, 0xab, 0xee, 0x26, 0x5c, 0xd4, 0x27, 0x64, 0x7c, 0x5b, 0x58, 0xd7, 0x96, 0xe4, 0x7a, 0x9f, 0x62, 0x4f, 0x25, 0xe2, 0xf4, 0xa3, 0x10, 0xfb, 0xed, 0x51, 0x3e, 0x11, 0x31, 0x95, 0x0d, 0x68, 0x42, 0x7f, 0x2c, 0x9b, 0x66, 0x78, 0xea, 0x2b, 0xe6, 0xa7, 0x08, 0x33, 0xd4, 0x1e, 0x0d, 0x2d, 0xc0, 0xd9, 0xf2, 0x18, 0xc1, 0x7a, 0x0d, 0x61, 0x3d, 0x6e, 0xc4, 0x10, 0xf2, 0x9b, 0x1b, 0x71, 0x3f, 0xee, 0x0d, 0x79, 0xcc, 0xd3, 0x40, 0xd6, 0x7e, 0x18, 0x2a, 0xc2, 0x77, 0x83, 0xb6, 0x1b, 0xf7, 0x60, 0x48, 0xfd, 0x01, 0xc6, 0xee, 0x43, 0x3a, 0x30, 0x56, 0x82, 0x03, 0x4b, 0x38, 0xca, 0x27, 0x19, 0xa6, 0xa4, 0xdc, 0x23, 0x0e, 0xdc, 0x7d, 0x43, 0x59, 0xb4, 0x02, 0xa4, 0xdb, 0x90, 0xbe, 0xe8, 0xa0, 0x33, 0xce, 0xd4, 0x05, 0xf2, 0x1a, 0x82, 0x73, 0x22, 0x2d, 0xc3, 0xb0, 0x57, 0x78, 0xdd, 0x91, 0x5e, 0xa5, 0xa5, 0xa6, 0x3b, 0x2f, 0xea, 0xc6, 0xbc, 0x29, 0xa7, 0x8a, 0x81, 0xa1, 0xfd, 0x48, 0xed, 0x7a, 0x62, 0x6b, 0x26, 0x55, 0xb1, 0x79, 0x5a, 0x61, 0x35, 0x60, 0xdb, 0xb6, 0xbb, 0x30, 0xad, 0xba, 0x80, 0x7c, 0x4f, 0x5a, 0xe1, 0xab, 0xed, 0xab, 0xa4, 0xfd, 0xed, 0x75, 0xc6, 0xe6, 0x0c, 0xc2, 0x77, 0xc9, 0x06, 0x3e, 0xd2, 0xa3, 0x99, 0xe4, 0xf7, 0x8d, 0xeb, 0xb3, 0x95, 0x68, 0x5c, 0xca, 0x23, 0x0c, 0xa3, 0x5e, 0xa0, 0x14, 0xa4, 0x31, 0x1a, 0x32, 0x05, 0xee, 0x0d, 0x65, 0xe6, 0xa5, 0xa9, 0x16, 0x4e, 0x95, 0x16, 0xc0, 0x3c, 0x43, 0x86, 0xdc, 0x80, 0xb6, 0x3d, 0xd8, 0x59, 0x76, 0x06, 0x1c, 0xfb, 0x3a, 0x6b, 0x7f, 0x90, 0x8b, 0xab, 0xa2, 0xe2, 0x2c, 0x98, 0xdb, 0x94, 0x13, 0xf7, 0xd9, 0x2a, 0x4b, 0x3e, 0xd0, 0x06, 0x73, 0xfd, 0xda, 0x56, 0x6f, 0xa3, 0xd6, 0x83, 0x35, 0xd8, 0xe8, 0x24, 0x1d, 0x4d, 0x57, 0xee, 0x2c, 0xed, 0x61, 0xc5, 0xe8, 0x1a, 0x93, 0xdb, 0x08, 0x16, 0xad, 0xcd, 0x2e, 0x93, 0xc5, 0x37, 0x39, 0xc7, 0xb5, 0x4c, 0xbb, 0xac, 0xa4, 0x7f, 0x95, 0xfd, 0x17, 0xd5, 0x21, 0x12, 0xb0, 0x3a, 0xe3, 0xf9, 0x4d, 0x08, 0x79, 0x2f, 0x5b, 0x9d, 0xda, 0xa0, 0x09, 0x3b, 0x17, 0x9f, 0xcf, 0x91, 0x95, 0x53, 0xe2, 0x8c, 0x45, 0x0c, 0x07, 0xa3, 0x61, 0xe3, 0xed, 0x88, 0xcb, 0x68, 0x3d, 0x58, 0x8b, 0x87, 0x09, 0xeb, 0xc0, 0x3c, 0x75, 0x7f, 0xab, 0xd5, 0x1d, 0x01, 0x2c, 0x2f, 0x6c, 0x3a, 0xba, 0x25, 0xd0, 0x1e, 0x96, 0x17, 0x76, 0xf0, 0x29, 0xe2, 0x3a, 0xec, 0xf1, 0xbc, 0xfe, 0x9d, 0x88, 0x9b, 0x81, 0xb0, 0xeb, 0x55, 0xdd, 0x9d, 0x07, 0xe1, 0x26, 0x86, 0x46, 0x77, 0xb8, 0xc1, 0x5a, 0x56, 0xf5, 0x00, 0x9f, 0xec, 0xaa, 0x1c, 0x12, 0x70, 0xa7, 0x92, 0x07, 0x56, 0xa4, 0xb6, 0xd9, 0x3b, 0x18, 0x86, 0x57, 0x71, 0xf8, 0x7c, 0x77, 0xaa, 0x88, 0x49, 0xe1, 0x06, 0x0a, 0x9f, 0xce, 0xe1, 0x8b, 0x62, 0xf1, 0x31, 0xc4, 0xca, 0x21, 0x0d, 0xb1, 0x98, 0x81, 0xe8, 0xd7, 0x7e, 0xe1, 0x6f, 0xf7, 0xff, 0xc2, 0xd7, 0xae, 0xa6, 0x35, 0x83, 0x6a, 0x6c, 0x96, 0x55, 0xb9, 0xd9, 0x80, 0xbb, 0x64, 0x1b, 0x59, 0x73, 0x89, 0x98, 0xac, 0x84, 0x91, 0x41, 0xef, 0xa6, 0xb0, 0xbc, 0xe5, 0xa5, 0xd5, 0x52, 0xc7, 0xbd, 0x8a, 0x9c, 0x37, 0xba, 0xe3, 0xde, 0xe1, 0x73, 0x5e, 0xd1, 0xb5, 0xb7, 0xbd, 0x48, 0x29, 0xe1, 0x35, 0x0a, 0x2f, 0x23, 0x5e, 0xa9, 0x8a, 0xec, 0xf5, 0xf8, 0x3d, 0x27, 0xfd, 0x96, 0xa8, 0x78, 0x1a, 0xe7, 0x01, 0x49, 0x91, 0x4f, 0x76, 0xe1, 0x5d, 0x1e, 0xe7, 0x85, 0x14, 0xee, 0x87, 0x02, 0xa4, 0x80, 0x4d, 0xca, 0x78, 0xf2, 0x57, 0xad, 0x69, 0xe1, 0xac, 0x39, 0x7f, 0x32, 0x8d, 0xb2, 0xa6, 0xfb, 0xa2, 0x07, 0xa3, 0xb6, 0xf6, 0x82, 0x03, 0x55, 0x57, 0x6e, 0x0d, 0x82, 0xac, 0x66, 0x96, 0xfe, 0xc9, 0xa4, 0x59, 0x47, 0x8b, 0x50, 0xd5, 0x48, 0x29, 0x6c, 0xeb, 0xb1, 0x8e, 0x5b, 0xbf, 0xbe, 0xbe, 0xa6, 0x8b, 0x46, 0x50, 0x31, 0x9d, 0xea, 0xb2, 0x82, 0xb7, 0xc4, 0x5f, 0x72, 0xb2, 0x62, 0x7c, 0x09, 0xcd, 0x20, 0x7a, 0xc6, 0xa7, 0x51, 0x56, 0x38, 0xb9, 0x1e, 0xef, 0xc6, 0xf1, 0x1e, 0x9c, 0xbc, 0xa6, 0xde, 0x9d, 0x88, 0x3d, 0xd0, 0x0e, 0x3c, 0x4d, 0x6b, 0x63, 0xbe, 0x53, 0x06, 0x59, 0xf0, 0xe2, 0x39, 0xb5, 0xff, 0xaf, 0x87, 0xf4, 0x35, 0x6a, 0xb5, 0x97, 0xe7, 0x62, 0xfb, 0xc1, 0x62, 0x4b, 0x41, 0x7c, 0x22, 0x92, 0x78, 0x13, 0x2b, 0x14, 0x67, 0xc3, 0x1b, 0x41, 0x9c, 0x2d, 0x34, 0xa7, 0x90, 0x2e, 0x70, 0xec, 0xc3, 0xe7, 0x5a, 0xb8, 0x7a, 0x32, 0x11, 0xaf, 0xec, 0x2c, 0x59, 0xad, 0xe3, 0xf9, 0x83, 0x18, 0xb3, 0x3c, 0x80, 0x54, 0xdb, 0x2e, 0xc4, 0xe4, 0x40, 0x7e, 0x57, 0x71, 0x81, 0x85, 0x70, 0xa4, 0x21, 0xad, 0xd6, 0x1c, 0xe3, 0x5c, 0xbf, 0xd7, 0xa5, 0xe6, 0x50, 0x98, 0xa6, 0x2d, 0xce, 0x48, 0x84, 0x11, 0xf6, 0x79, 0x9c, 0xa8, 0x26, 0x08, 0xfc, 0xc8, 0x64, 0x26, 0xfc, 0x88, 0x6d, 0x94, 0x6c, 0xc5, 0x1a, 0xbb, 0xe2, 0x35, 0x6e, 0x72, 0x79, 0x1c, 0x51, 0xb1, 0x0e, 0xe4, 0x83, 0x98, 0xb7, 0x39, 0x96, 0x77, 0x1e, 0xbc, 0x19, 0x7d, 0xf3, 0xde, 0xfe, 0x7b, 0x93, 0xf3, 0x4e, 0x84, 0x25, 0xf2, 0xce, 0x1b, 0xf3, 0x66, 0xf4, 0x1f, 0xa9, 0x53, 0xff, 0x7d, 0xb8, 0x0f, 0x77, 0x29, 0xb3, 0x72, 0x97, 0x80, 0x59, 0xdb, 0x68, 0xf5, 0x98, 0xa6, 0x92, 0xdf, 0x6a, 0x9c, 0xfb, 0xa7, 0xdd, 0xc4, 0x03, 0xc8, 0xe0, 0x95, 0x5f, 0x58, 0xdd, 0x8d, 0xb1, 0x7a, 0xaa, 0x37, 0xb5, 0x11, 0x25, 0x51, 0xaa, 0xb5, 0xe5, 0x56, 0x6a, 0x2b, 0x71, 0x5f, 0xde, 0x8a, 0x6b, 0xb2, 0x45, 0x21, 0x3c, 0xe4, 0x51, 0x5b, 0x9e, 0x36, 0x48, 0x33, 0xc2, 0x0e, 0xef, 0xdf, 0x67, 0x2b, 0xfd, 0xed, 0x07, 0x98, 0x57, 0xa3, 0xd6, 0x95, 0xbb, 0x14, 0x73, 0xdd, 0x9a, 0xdb, 0xa4, 0x5d, 0xd6, 0x1e, 0x2e, 0x58, 0x06, 0xe9, 0xad, 0xda, 0xde, 0x8a, 0xb0, 0x11, 0xe1, 0xca, 0x68, 0x75, 0x02, 0xad, 0x6a, 0x2c, 0xa7, 0x92, 0x4e, 0xa0, 0x1c, 0x8d, 0xda, 0x76, 0x6a, 0x75, 0xff, 0x7a, 0xf2, 0x8a, 0xc2, 0xf5, 0xfd, 0x53, 0x38, 0x93, 0xef, 0x17, 0xc3, 0xc4, 0x19, 0x62, 0x0f, 0xc4, 0x58, 0xce, 0xc4, 0xc0, 0xba, 0xd0, 0x12, 0xeb, 0x2c, 0x65, 0xaa, 0xf0, 0xbe, 0xc1, 0x2d, 0xe5, 0x13, 0xac, 0xfe, 0xf5, 0xc3, 0x5a, 0x1a, 0x0f, 0x4b, 0xb4, 0x94, 0x4e, 0x9a, 0x79, 0xc5, 0x7c, 0x47, 0xf9, 0x82, 0xc9, 0xdc, 0xbf, 0xd9, 0x0d, 0x88, 0x13, 0xaf, 0xc1, 0x39, 0x17, 0x65, 0x6f, 0xaa, 0x6b, 0x08, 0xf3, 0xc0, 0x36, 0xad, 0xc1, 0x15, 0x4e, 0x9e, 0x6b, 0x8c, 0x6a, 0xfa, 0x73, 0x2f, 0x86, 0xd2, 0x88, 0xa3, 0x01, 0x06, 0x57, 0x9a, 0x4a, 0x5a, 0x3d, 0x06, 0xb5, 0xe8, 0xef, 0x2d, 0x95, 0xcb, 0x22, 0xbb, 0x0a, 0x38, 0xc7, 0x5f, 0xfb, 0x40, 0x7b, 0x98, 0x6c, 0x20, 0xbe, 0xd0, 0x99, 0x55, 0x0c, 0xc6, 0xbd, 0x1d, 0xf5, 0x55, 0x47, 0x3b, 0x0a, 0x6f, 0x77, 0x20, 0x2d, 0xa2, 0xc8, 0x50, 0x03, 0xe9, 0x90, 0x09, 0x39, 0x60, 0x83, 0x3c, 0x28, 0xea, 0xdf, 0x66, 0x8d, 0xaa, 0x3e, 0x5b, 0x56, 0xbf, 0xb7, 0x20, 0xaa, 0x16, 0xe3, 0x5d, 0xce, 0x88, 0xaa, 0x85, 0xb6, 0xf9, 0x0f, 0xbe, 0xf4, 0xdb, 0x3e, 0xeb, 0x06, 0xd5, 0x69, 0xcb, 0xda, 0x5a, 0x71, 0xd4, 0x53, 0xd0, 0xa1, 0x2a, 0xb6, 0xac, 0xe9, 0xa3, 0xb7, 0xa6, 0x1c, 0x85, 0x8c, 0x0e, 0xa4, 0xbe, 0x4a, 0x70, 0xce, 0x9a, 0xe8, 0x6c, 0x17, 0xce, 0xe2, 0x2e, 0xdb, 0x8b, 0x10, 0x7d, 0x55, 0x70, 0xed, 0x9c, 0xf3, 0x60, 0xde, 0xff, 0x94, 0xd6, 0x53, 0x0f, 0x43, 0x0b, 0x11, 0x7f, 0x69, 0xc3, 0xbe, 0x5e, 0x69, 0x6b, 0xd4, 0x5a, 0xb0, 0xf5, 0x5b, 0x6d, 0x26, 0x6c, 0xed, 0x56, 0xa2, 0xbd, 0xad, 0xf3, 0x94, 0x8c, 0xe1, 0x3b, 0x99, 0x17, 0x71, 0x84, 0x8a, 0x73, 0xe0, 0xd0, 0x21, 0x2e, 0x5c, 0x35, 0xe0, 0xaa, 0xd8, 0x8a, 0x70, 0x5b, 0x66, 0xcd, 0xe5, 0x47, 0x71, 0x0e, 0x0f, 0xf2, 0xec, 0xc5, 0x1d, 0xff, 0x97, 0x17, 0x78, 0x47, 0xb7, 0x12, 0x54, 0x56, 0x8d, 0x22, 0x1e, 0x51, 0x60, 0x0e, 0xf2, 0xd8, 0xda, 0x80, 0xbb, 0x3a, 0x59, 0xa4, 0x34, 0xd2, 0xbe, 0x97, 0x8c, 0x4f, 0xd5, 0xa6, 0xe3, 0xfa, 0x32, 0xb4, 0x00, 0xc5, 0x42, 0x0c, 0xed, 0x69, 0xa2, 0x3e, 0x88, 0x7e, 0x57, 0x43, 0xfd, 0x51, 0x87, 0xe7, 0xf5, 0xbe, 0xb2, 0x73, 0xda, 0x60, 0x04, 0x2c, 0x19, 0x6f, 0xfb, 0xfd, 0x1e, 0xaf, 0xa7, 0x19, 0x32, 0x9c, 0x20, 0xf9, 0x4b, 0xbc, 0x25, 0x1d, 0x51, 0x96, 0x89, 0x97, 0xdf, 0xee, 0x8a, 0xb6, 0x97, 0x9c, 0x03, 0x43, 0xd4, 0x09, 0x29, 0x23, 0xb1, 0x2f, 0x8c, 0x91, 0x99, 0x94, 0x6e, 0x54, 0x52, 0x3a, 0x23, 0xa5, 0xc3, 0x34, 0xa9, 0x38, 0xab, 0xb6, 0xe5, 0x7a, 0xa9, 0x6c, 0x6d, 0xa5, 0x92, 0x21, 0x76, 0x84, 0x7a, 0xc5, 0xba, 0x0c, 0x4c, 0xcc, 0x9b, 0xc8, 0xb2, 0xba, 0x10, 0x9e, 0x39, 0x63, 0x16, 0xfa, 0x62, 0xfd, 0x12, 0xec, 0xe0, 0x1e, 0xe9, 0xa8, 0x3d, 0x4c, 0x1e, 0xa5, 0x47, 0xee, 0x91, 0x08, 0xb1, 0x67, 0x27, 0xc5, 0x97, 0x11, 0xa6, 0xea, 0x5e, 0xf7, 0x58, 0x47, 0xbb, 0x92, 0x70, 0x9d, 0xa2, 0x69, 0x5a, 0x7f, 0x18, 0x2e, 0x2f, 0x50, 0xe1, 0xf2, 0xe6, 0xaa, 0x6f, 0x93, 0xa7, 0xce, 0xc0, 0x20, 0x5c, 0xf9, 0xdd, 0xa3, 0x70, 0xe5, 0x4c, 0x51, 0xfb, 0xd4, 0xd1, 0x61, 0x7c, 0xee, 0xc3, 0xeb, 0x18, 0x5c, 0x39, 0x7e, 0x09, 0xf8, 0xef, 0x9e, 0x96, 0xa5, 0x0d, 0x4b, 0x5b, 0xbe, 0x93, 0xd7, 0xb0, 0xb4, 0xb6, 0x79, 0x51, 0xf3, 0x77, 0xc0, 0x36, 0xbf, 0x2c, 0x38, 0x43, 0x19, 0x11, 0xaa, 0x14, 0xde, 0x96, 0x77, 0x5b, 0xa1, 0xe2, 0xb8, 0xed, 0x9f, 0xf2, 0x6e, 0xbb, 0x2d, 0xaf, 0x20, 0xff, 0xb6, 0xdb, 0xa6, 0x8e, 0x4d, 0x83, 0xff, 0xfd, 0xbf, 0x2b, 0xaf, 0x6f, 0xc5, 0x2b, 0x82, 0xd7, 0x12, 0xbc, 0x1a, 0xe0, 0xca, 0x1f, 0x8f, 0xc2, 0x95, 0x53, 0x7e, 0xbc, 0x2e, 0xe3, 0x75, 0x0e, 0xae, 0xbc, 0x13, 0xc5, 0x7b, 0x17, 0x5c, 0xf9, 0x43, 0x21, 0x5c, 0x79, 0xbb, 0x18, 0x9f, 0xf3, 0xe1, 0xca, 0xbb, 0x2d, 0x70, 0xe5, 0xb4, 0x0b, 0xbf, 0x9d, 0x82, 0x2b, 0x27, 0x1f, 0x4b, 0xe4, 0xf5, 0xe6, 0x76, 0x8c, 0x83, 0x71, 0x4f, 0xee, 0x83, 0x2b, 0xbf, 0x6f, 0x13, 0xd7, 0x1b, 0x3b, 0xf0, 0x6e, 0x83, 0x2b, 0xef, 0x3d, 0x8c, 0xd7, 0x09, 0x4c, 0x87, 0x65, 0x9c, 0xf6, 0x60, 0x9c, 0x42, 0x91, 0xe6, 0x8d, 0x0b, 0xf8, 0x7d, 0x17, 0x5c, 0xf9, 0x9f, 0x4a, 0x0c, 0xc7, 0xf4, 0x27, 0x30, 0xfe, 0x1f, 0x56, 0xe3, 0x77, 0xcc, 0xe7, 0x8f, 0xf3, 0xf0, 0xc2, 0x32, 0x4e, 0x61, 0xba, 0x77, 0x31, 0xcf, 0x77, 0xb1, 0x27, 0x4f, 0x2d, 0x44, 0x02, 0x96, 0x08, 0xe3, 0x10, 0xf6, 0x60, 0xb1, 0xde, 0x86, 0x43, 0x7a, 0x0d, 0x6e, 0xc1, 0x8b, 0xc2, 0xbe, 0x81, 0x17, 0x8d, 0xd3, 0x76, 0xbc, 0xf6, 0xe2, 0xf5, 0x5b, 0xbc, 0x2e, 0x91, 0x14, 0x2a, 0x71, 0xd3, 0xf0, 0xfa, 0x0a, 0xc7, 0xbd, 0x1d, 0x16, 0xc0, 0x4a, 0xf8, 0x1e, 0x3c, 0x07, 0x47, 0xe1, 0x23, 0x69, 0x9c, 0x94, 0x2f, 0x55, 0xe9, 0xf9, 0x48, 0x58, 0xa7, 0xe3, 0xfa, 0xf3, 0x14, 0xbc, 0x26, 0xe3, 0x65, 0xa3, 0xb1, 0x8c, 0xb0, 0x1d, 0xd4, 0xb9, 0x4d, 0xa0, 0x10, 0xce, 0xeb, 0x5f, 0xa9, 0x69, 0x08, 0x75, 0xae, 0x1c, 0x2f, 0xa4, 0xf9, 0x51, 0xcb, 0x7e, 0xe0, 0x22, 0xa0, 0x5b, 0x65, 0x61, 0xcf, 0x2e, 0x7c, 0x51, 0x0c, 0x57, 0x22, 0x06, 0x59, 0x0f, 0x0e, 0x62, 0x0e, 0x72, 0x9e, 0xf6, 0x17, 0x48, 0x57, 0xe5, 0x47, 0x5e, 0x51, 0xd2, 0x05, 0x46, 0x0c, 0x05, 0x36, 0xcf, 0x17, 0xdb, 0x10, 0x56, 0x64, 0x61, 0x1a, 0xad, 0xd6, 0xc8, 0x69, 0xa0, 0x46, 0x60, 0x14, 0x49, 0xb9, 0xfd, 0x6e, 0x90, 0x74, 0xd2, 0x16, 0x3d, 0x9c, 0xf0, 0x63, 0x9b, 0x54, 0x17, 0x73, 0xd5, 0x16, 0xc6, 0xd9, 0xe3, 0xb1, 0x5f, 0xaf, 0xa6, 0xd8, 0xb5, 0x16, 0x8e, 0x9d, 0x83, 0xeb, 0xa2, 0x8e, 0x7c, 0x41, 0xc5, 0xe3, 0xdb, 0x84, 0x27, 0x5e, 0xb6, 0xa8, 0x25, 0xea, 0x9a, 0x19, 0xcb, 0x3d, 0x29, 0x96, 0xa1, 0x6a, 0x4b, 0x52, 0x9d, 0x0c, 0xcd, 0x50, 0xe0, 0x84, 0x0c, 0x5c, 0x1f, 0x4e, 0xf2, 0xda, 0xbc, 0xa5, 0xaf, 0xbf, 0x3d, 0xc1, 0x17, 0xa6, 0x52, 0x1e, 0x7c, 0x99, 0xf4, 0xdf, 0x2a, 0xd9, 0x4f, 0x6d, 0x65, 0x89, 0x09, 0x57, 0x16, 0x20, 0x9e, 0xb3, 0x6c, 0xa2, 0x2f, 0x1a, 0x68, 0x5f, 0x66, 0xf6, 0xb5, 0x13, 0x5c, 0xf9, 0xbd, 0x0d, 0xef, 0xf7, 0xc4, 0x9e, 0x7c, 0x51, 0x5c, 0x29, 0xed, 0xcb, 0x68, 0x64, 0xe7, 0xc7, 0xbf, 0x47, 0x39, 0xbd, 0x64, 0x12, 0xf9, 0x20, 0x00, 0xa5, 0x7c, 0xdc, 0x72, 0x0b, 0xe5, 0x65, 0xf0, 0x45, 0x83, 0x1d, 0x98, 0xc2, 0xe0, 0x6b, 0x9f, 0xdb, 0xc1, 0xf1, 0x49, 0x93, 0x23, 0xad, 0x05, 0xca, 0xa3, 0xe5, 0xed, 0xc1, 0xf6, 0x23, 0x1d, 0xa4, 0x9f, 0x53, 0x59, 0x02, 0x5c, 0x36, 0xd2, 0x39, 0x40, 0x56, 0x4b, 0x35, 0xad, 0x76, 0xa2, 0x5d, 0xf2, 0x7b, 0xa6, 0x43, 0xd8, 0xb0, 0xee, 0x17, 0xf9, 0x29, 0xf4, 0xc4, 0xf7, 0xd2, 0x82, 0x94, 0xca, 0xb7, 0x48, 0x0f, 0xc8, 0x2e, 0x31, 0x56, 0xe2, 0x41, 0x98, 0xe2, 0x69, 0xb9, 0xa9, 0x3f, 0xfa, 0x5a, 0xfb, 0xde, 0xf6, 0x5a, 0xc3, 0xe6, 0xce, 0xa0, 0xe7, 0xce, 0x97, 0xb5, 0x8b, 0x22, 0x0e, 0xd5, 0x09, 0x20, 0x96, 0x2f, 0xc9, 0xec, 0x4d, 0xc7, 0x3c, 0x5f, 0xec, 0xf3, 0x7b, 0x0a, 0xc1, 0x5f, 0xf2, 0xc2, 0x2f, 0x8e, 0x76, 0xfa, 0xbd, 0x5e, 0xaf, 0xbf, 0xa4, 0xef, 0x17, 0xfd, 0x1d, 0x22, 0x45, 0x25, 0xe9, 0x33, 0x72, 0xfc, 0x62, 0xdc, 0x04, 0xec, 0x92, 0x03, 0x9c, 0x92, 0xdf, 0xeb, 0x2f, 0x3d, 0xf8, 0x2b, 0x8c, 0xf5, 0xcb, 0x43, 0x07, 0x5f, 0xfe, 0xe5, 0xf1, 0xb5, 0xaf, 0xfa, 0xfc, 0xbe, 0x23, 0x3e, 0x7f, 0x49, 0xcc, 0xa6, 0x71, 0xcc, 0x06, 0x94, 0x77, 0x27, 0xd8, 0x4a, 0xce, 0x40, 0x61, 0x1c, 0xfe, 0xbd, 0x8a, 0x6f, 0x8e, 0x49, 0x7e, 0x30, 0x91, 0x97, 0xa4, 0xd2, 0x33, 0xe0, 0x52, 0xd6, 0xb3, 0xfc, 0x5c, 0xad, 0x88, 0x61, 0xca, 0x03, 0x49, 0x9a, 0x4a, 0xd8, 0xaa, 0x35, 0x90, 0xdf, 0xa6, 0xb5, 0x92, 0xcc, 0xe7, 0x1b, 0x27, 0xc9, 0x7a, 0x31, 0xbf, 0x47, 0xe8, 0xfd, 0xf7, 0x2d, 0x71, 0xbe, 0xa9, 0x08, 0x5d, 0xc6, 0xb1, 0x1e, 0x1d, 0x11, 0x5a, 0xc7, 0x71, 0x73, 0x12, 0xa1, 0xe2, 0x29, 0x90, 0x27, 0x4d, 0x6d, 0xb4, 0x73, 0x8c, 0x19, 0x9c, 0xee, 0x74, 0x3c, 0x45, 0x21, 0xa7, 0x78, 0x2c, 0x91, 0x22, 0x22, 0xc5, 0xce, 0x96, 0xfc, 0xef, 0x29, 0x33, 0xec, 0x15, 0xb6, 0x74, 0x86, 0xbf, 0x2d, 0xd8, 0x3a, 0xde, 0x5d, 0xde, 0xef, 0xb3, 0x79, 0x58, 0x6a, 0x30, 0x23, 0xa4, 0x56, 0x9c, 0x01, 0xb3, 0x52, 0x99, 0x90, 0x5f, 0x23, 0x7f, 0x7e, 0xf0, 0xe5, 0xf0, 0x44, 0xf2, 0x26, 0x18, 0xce, 0x66, 0xaf, 0x61, 0xe9, 0x88, 0x59, 0xb1, 0x85, 0xc9, 0xf7, 0x8f, 0xeb, 0x36, 0x75, 0x27, 0x28, 0x81, 0x52, 0xdc, 0x69, 0xe2, 0x25, 0x5e, 0x9c, 0x12, 0x80, 0x8c, 0x42, 0x92, 0xb5, 0x93, 0x71, 0x16, 0x26, 0x72, 0x7b, 0x91, 0xde, 0xf3, 0x71, 0x56, 0x2e, 0x64, 0x0d, 0x2a, 0xb2, 0xce, 0xf3, 0x5e, 0xd7, 0x48, 0xa9, 0x74, 0x82, 0xe5, 0x23, 0xbd, 0xa4, 0x6a, 0x69, 0x09, 0x7f, 0x3f, 0xcd, 0x24, 0x9d, 0x1c, 0xb3, 0xb4, 0x74, 0x42, 0xe7, 0x62, 0x17, 0x38, 0x4c, 0xf6, 0xd1, 0xb6, 0x74, 0xf2, 0x5e, 0x20, 0x19, 0x74, 0x3f, 0x9d, 0x24, 0x23, 0x7f, 0x6b, 0x7f, 0x3b, 0xd9, 0x7b, 0xd1, 0xde, 0x1c, 0xe1, 0x01, 0x14, 0xe0, 0x4d, 0x1c, 0x41, 0xeb, 0x64, 0x3f, 0xb6, 0x26, 0x16, 0xbf, 0x5a, 0x78, 0x06, 0xbf, 0xe9, 0x07, 0xb3, 0x06, 0xb4, 0x6d, 0x55, 0x5b, 0x6e, 0xf6, 0xc0, 0x58, 0xef, 0x32, 0x98, 0x88, 0x97, 0xa2, 0x7f, 0x79, 0x94, 0xd7, 0xa9, 0x82, 0xe9, 0x83, 0x91, 0x99, 0xc3, 0xeb, 0x4d, 0xfa, 0x00, 0x38, 0xfe, 0x59, 0x64, 0x93, 0x92, 0xe3, 0xfe, 0x07, 0xd2, 0xa7, 0xd5, 0x53, 0x3c, 0x30, 0x23, 0xbf, 0x0d, 0xcc, 0x47, 0xce, 0x40, 0x56, 0x62, 0xee, 0x20, 0x3d, 0x9c, 0x15, 0x9f, 0x3b, 0xa7, 0x91, 0x36, 0x5e, 0x4f, 0x30, 0x44, 0x4f, 0xf7, 0xef, 0x98, 0x2e, 0x5b, 0x87, 0x29, 0x8e, 0x6b, 0xbc, 0x97, 0x92, 0x85, 0x5e, 0xb6, 0xc7, 0x35, 0xf4, 0x0e, 0x62, 0x1f, 0xd9, 0x5f, 0x24, 0x9a, 0x43, 0x51, 0x8d, 0x54, 0x47, 0xef, 0x66, 0x7e, 0x9b, 0xa8, 0xa4, 0x09, 0x2d, 0x9b, 0x4a, 0xa1, 0xd7, 0x3b, 0xd3, 0x06, 0x36, 0xff, 0x1c, 0xa1, 0x3f, 0x8b, 0xb9, 0xdd, 0x19, 0x45, 0xba, 0x69, 0x5b, 0x75, 0xb7, 0xc3, 0x33, 0x4b, 0xb7, 0x1d, 0x03, 0xa9, 0x18, 0xb2, 0xa5, 0xba, 0xfb, 0x8b, 0x48, 0x29, 0xce, 0x66, 0x6d, 0x5b, 0x0c, 0x2b, 0xc6, 0x9d, 0xf5, 0xc1, 0xea, 0xee, 0xc2, 0xa8, 0xfe, 0xbc, 0x8d, 0x34, 0x6b, 0xf9, 0x19, 0x28, 0x1c, 0xe3, 0xca, 0x89, 0x2f, 0xf8, 0x94, 0x1d, 0x0f, 0x37, 0xfc, 0x04, 0xe7, 0xd6, 0xd3, 0x37, 0x35, 0x55, 0x57, 0x9c, 0x93, 0x7f, 0x3f, 0x47, 0xb7, 0x1e, 0x33, 0xea, 0x39, 0xb7, 0x59, 0xe4, 0xc1, 0x12, 0xf0, 0xe7, 0xe9, 0xfc, 0x59, 0x0f, 0xc5, 0x92, 0x09, 0xbf, 0x93, 0x1a, 0x57, 0x00, 0x1c, 0x74, 0x7a, 0xe6, 0xde, 0x8f, 0xf4, 0x72, 0xa3, 0x7b, 0x2c, 0xc5, 0x66, 0x5b, 0x33, 0xf4, 0xbc, 0x05, 0xb1, 0x97, 0x87, 0xb1, 0xf6, 0xf2, 0x8c, 0x67, 0xfd, 0x0d, 0x27, 0x1f, 0x61, 0x3d, 0x5f, 0xdc, 0x63, 0x52, 0xfb, 0xe3, 0x29, 0xbb, 0x28, 0x25, 0xeb, 0x0a, 0xf7, 0x60, 0x3c, 0xd8, 0xb4, 0x0b, 0x53, 0x6d, 0xad, 0xee, 0x16, 0x16, 0x5e, 0x6c, 0xd2, 0xd9, 0x0d, 0x47, 0xdb, 0x8f, 0x46, 0xa9, 0xec, 0xd4, 0xfe, 0xf8, 0xf7, 0x58, 0xc9, 0x0d, 0x2b, 0x3c, 0x4e, 0x4f, 0xf0, 0x7e, 0xae, 0x0f, 0xa7, 0x22, 0x5e, 0x11, 0x95, 0xcd, 0xef, 0x89, 0xfa, 0x59, 0x93, 0x6a, 0xb7, 0x35, 0xb9, 0x76, 0xd5, 0xdd, 0xcd, 0x33, 0x76, 0x47, 0x1b, 0xe4, 0x20, 0x6b, 0x8c, 0xbd, 0x5e, 0xd8, 0x3c, 0x46, 0x59, 0xf4, 0x6c, 0x5f, 0x6d, 0x76, 0x4f, 0x57, 0xb0, 0xe4, 0x8b, 0x25, 0x60, 0x0a, 0x7a, 0xb0, 0x5f, 0x8c, 0x5f, 0xf4, 0x92, 0xee, 0x20, 0x49, 0x70, 0xce, 0x6d, 0x27, 0x19, 0x00, 0xb6, 0x0a, 0xe7, 0xa7, 0x59, 0xab, 0x64, 0x10, 0x66, 0x14, 0x2e, 0xaa, 0x9d, 0x91, 0x81, 0x6d, 0x14, 0x1e, 0xa8, 0x21, 0x45, 0xe8, 0xb6, 0x90, 0x5d, 0x5b, 0xf5, 0x4d, 0xc2, 0x8d, 0xdf, 0xeb, 0xfa, 0x6d, 0x9f, 0x9a, 0xa9, 0x94, 0xb2, 0xf7, 0xd6, 0x77, 0xc4, 0xb9, 0x0f, 0x9f, 0x79, 0x1b, 0xaa, 0x37, 0xa8, 0x07, 0x84, 0x36, 0xbd, 0x3b, 0x1d, 0x31, 0x3f, 0x9c, 0x03, 0xb5, 0x69, 0x5b, 0x5e, 0xc2, 0x75, 0x78, 0x59, 0xd8, 0x28, 0xd7, 0xcf, 0x95, 0xc9, 0xe2, 0xa6, 0x29, 0xc6, 0xcd, 0xb1, 0xe9, 0x67, 0xcd, 0xe6, 0x6a, 0x28, 0xae, 0x6d, 0xc5, 0x54, 0xb7, 0x83, 0x5c, 0xdb, 0x84, 0xf7, 0xcf, 0x80, 0xa1, 0x36, 0x64, 0x5e, 0x92, 0xfa, 0x13, 0x48, 0x5b, 0x7c, 0x17, 0xbe, 0x1b, 0xc1, 0x5c, 0x3b, 0x3f, 0x1f, 0xe9, 0xd4, 0x70, 0x75, 0x01, 0xa6, 0x9f, 0x5b, 0x62, 0x2e, 0x81, 0x31, 0xb5, 0x3e, 0x99, 0x21, 0xf9, 0xab, 0xed, 0x05, 0xb7, 0x67, 0x23, 0x7e, 0x6d, 0x91, 0x41, 0x01, 0x07, 0x5e, 0xd9, 0xfa, 0x15, 0x7f, 0x32, 0x7b, 0x60, 0xe2, 0x62, 0x8b, 0x9a, 0x89, 0xf7, 0x5b, 0x16, 0x9b, 0x54, 0x33, 0xde, 0x3f, 0x5f, 0x4b, 0xfe, 0xe1, 0x3a, 0x62, 0x35, 0xa3, 0xb3, 0xbc, 0x22, 0x23, 0xae, 0x5f, 0x5a, 0xbd, 0x13, 0x66, 0x23, 0x65, 0x99, 0x6b, 0x22, 0xed, 0x8b, 0x60, 0x87, 0x32, 0x87, 0x7d, 0x7b, 0xf6, 0x23, 0x84, 0xb9, 0xc8, 0xfa, 0x98, 0x32, 0xbf, 0x3f, 0x6f, 0x03, 0xd2, 0x26, 0xb1, 0xfa, 0xf8, 0x6d, 0x17, 0xfb, 0xd0, 0xce, 0x89, 0xdb, 0x76, 0x53, 0x6c, 0xfe, 0x42, 0x07, 0xa4, 0x15, 0x21, 0x85, 0x7d, 0x68, 0x30, 0xdd, 0x82, 0x35, 0x97, 0xfb, 0x06, 0xa1, 0xf8, 0x38, 0xe2, 0xa6, 0xf9, 0x96, 0xe3, 0xd1, 0xe9, 0xd8, 0x86, 0x7c, 0xd9, 0xe8, 0xb9, 0x5c, 0xee, 0x2e, 0x96, 0xde, 0xfe, 0x42, 0xf4, 0x0e, 0xf0, 0x86, 0x63, 0x98, 0x65, 0xff, 0x9a, 0x95, 0x50, 0x84, 0xf8, 0x2b, 0xee, 0xac, 0x29, 0x24, 0x9d, 0xc0, 0x76, 0x8d, 0x70, 0x3c, 0x0b, 0x6e, 0xeb, 0x02, 0xab, 0xaf, 0xe4, 0x4f, 0xd9, 0x9a, 0xd3, 0xf4, 0x46, 0xd7, 0x1b, 0x5d, 0x1f, 0xde, 0x6f, 0x1d, 0xf5, 0xfe, 0xfa, 0xcd, 0x6b, 0x9d, 0xd2, 0xfb, 0xf7, 0x3f, 0xd4, 0xde, 0xbf, 0xb6, 0x48, 0x16, 0x5c, 0x9d, 0xae, 0x41, 0xa9, 0xc7, 0x6a, 0xf0, 0x97, 0x04, 0x4a, 0xc2, 0x39, 0x05, 0xb2, 0x5c, 0x02, 0x29, 0x21, 0xa5, 0x48, 0x5e, 0x55, 0xa7, 0x7f, 0xfd, 0x95, 0xfe, 0xcd, 0x6c, 0x2e, 0x05, 0x79, 0xb1, 0xd1, 0x18, 0xa5, 0xd5, 0x38, 0xd7, 0x5b, 0x20, 0x9f, 0xaa, 0x38, 0x1d, 0x78, 0x61, 0x30, 0x6d, 0x26, 0xee, 0x57, 0xde, 0xa3, 0x25, 0x46, 0xef, 0xd0, 0xa4, 0x83, 0x83, 0x99, 0xff, 0x1f, 0xd1, 0xe5, 0xef, 0x54, 0x6c, 0x2d, 0x21, 0x1d, 0x4f, 0x4d, 0xb3, 0xca, 0xaf, 0x76, 0x1c, 0x6d, 0xff, 0x70, 0x83, 0xb0, 0x4f, 0x64, 0x93, 0xde, 0xdf, 0xb0, 0xb5, 0x9d, 0x76, 0x36, 0x43, 0x71, 0xfc, 0x3c, 0xd4, 0xea, 0xf6, 0x43, 0xb6, 0x6d, 0xf4, 0x0c, 0xc0, 0x9e, 0xec, 0x08, 0x97, 0xb3, 0xe6, 0x69, 0x1e, 0xd2, 0x55, 0x19, 0x8a, 0x97, 0x7b, 0x8a, 0xe6, 0x8c, 0x95, 0x6c, 0xe5, 0x2b, 0x9e, 0xdd, 0x08, 0x79, 0x42, 0x46, 0xdc, 0x17, 0xa2, 0xaa, 0x25, 0x50, 0x16, 0x36, 0x2b, 0x9e, 0x49, 0x25, 0xa4, 0xdf, 0xbf, 0x32, 0xfb, 0x78, 0xb7, 0x22, 0xfa, 0xb5, 0x9f, 0xb5, 0x0e, 0x0e, 0x92, 0x07, 0x63, 0xd1, 0xb7, 0x54, 0xc6, 0x4c, 0x2a, 0x23, 0xc7, 0x3e, 0xda, 0x09, 0x0e, 0xb6, 0xf5, 0x15, 0xae, 0x0c, 0x74, 0x86, 0xfd, 0x2d, 0xd0, 0x96, 0x73, 0xa2, 0x5b, 0xcd, 0x27, 0x9f, 0xb2, 0x58, 0x9a, 0xf0, 0x19, 0xfa, 0x38, 0x79, 0x15, 0x55, 0x27, 0x44, 0xa4, 0xde, 0xb5, 0xa1, 0xac, 0x61, 0xa1, 0xa2, 0x5c, 0x1a, 0xdf, 0x72, 0x0e, 0xd3, 0x4b, 0xd2, 0xad, 0xed, 0xbe, 0xe5, 0x6b, 0x8b, 0x8d, 0x65, 0xfe, 0x0c, 0xdb, 0x68, 0x7b, 0x7a, 0x62, 0x97, 0xb2, 0x7b, 0x88, 0x23, 0x95, 0xbc, 0x3b, 0xe1, 0xae, 0xd5, 0x11, 0xce, 0x63, 0x4e, 0xac, 0x91, 0xe9, 0x47, 0x59, 0x19, 0xaf, 0x9f, 0x1f, 0x8e, 0x49, 0xde, 0xa1, 0xc2, 0x13, 0x14, 0x4f, 0x70, 0x09, 0x4c, 0xb4, 0x81, 0x2a, 0x2c, 0xb1, 0x19, 0xc9, 0x2e, 0x02, 0xae, 0xae, 0xf1, 0x5c, 0x6a, 0xd2, 0x0e, 0x45, 0x35, 0x58, 0x28, 0x74, 0x91, 0x4d, 0x82, 0xc3, 0x94, 0x0f, 0xe2, 0x4c, 0x9d, 0x71, 0x01, 0x3f, 0xb7, 0x7a, 0x86, 0xb5, 0x9a, 0x77, 0x50, 0x4b, 0x60, 0x09, 0x28, 0xc3, 0x2c, 0xc5, 0x21, 0x64, 0xe7, 0x2f, 0xe6, 0xc8, 0xcc, 0xa4, 0x53, 0xfa, 0xc0, 0x48, 0x29, 0x0f, 0xb7, 0xe8, 0x3d, 0xb3, 0xd5, 0x3f, 0x5c, 0xf3, 0x0a, 0xcb, 0x94, 0xf4, 0x52, 0x0b, 0x63, 0x3a, 0xd1, 0xac, 0xdf, 0x5c, 0x15, 0xcf, 0xad, 0x0b, 0x6b, 0x6e, 0x63, 0x7f, 0x48, 0x89, 0x93, 0x7d, 0xf6, 0x23, 0x4f, 0x5a, 0xc9, 0xbc, 0x96, 0xec, 0xb8, 0x86, 0x72, 0x72, 0x71, 0x3f, 0x74, 0x80, 0x2d, 0x5d, 0x75, 0xe0, 0x08, 0xe5, 0x70, 0xff, 0xc7, 0xe0, 0x46, 0x3a, 0xeb, 0x31, 0x1b, 0x42, 0x66, 0x0b, 0x69, 0x36, 0x18, 0x03, 0x6b, 0x42, 0x06, 0x1a, 0x11, 0x5c, 0x6d, 0xde, 0xf8, 0x68, 0xbc, 0x5c, 0xf9, 0x56, 0x9d, 0xbe, 0xa6, 0x84, 0x64, 0x0c, 0xa6, 0x48, 0xd7, 0x71, 0x6f, 0xde, 0x2d, 0xf3, 0x17, 0x0a, 0x09, 0x68, 0x2a, 0xcf, 0x06, 0x0e, 0x1c, 0x27, 0x51, 0xaa, 0x6a, 0xc7, 0xb2, 0x7c, 0xf1, 0xf9, 0x96, 0xcd, 0x5e, 0x88, 0xcd, 0xa2, 0xc4, 0xf2, 0xe8, 0x0b, 0x51, 0xd5, 0xa8, 0x78, 0xd6, 0xec, 0x60, 0x3b, 0x4d, 0x89, 0x59, 0x76, 0x98, 0xea, 0x5f, 0x17, 0x5f, 0xc3, 0x77, 0xcc, 0xb4, 0x99, 0x5c, 0x69, 0xce, 0x74, 0x5b, 0x85, 0x73, 0x41, 0x2b, 0xb0, 0x6f, 0x62, 0xe1, 0xe5, 0xc3, 0x54, 0xb3, 0xc1, 0x19, 0xc4, 0xbd, 0xe0, 0x63, 0x13, 0xc0, 0xe7, 0x43, 0x00, 0xe7, 0x89, 0x57, 0x46, 0x27, 0xf9, 0x29, 0x5a, 0xff, 0xfd, 0x38, 0x9b, 0x58, 0xaf, 0xc4, 0x2a, 0xf6, 0xf7, 0x57, 0xad, 0x19, 0x79, 0x92, 0x7c, 0x2f, 0xc0, 0x49, 0x88, 0x8c, 0x3d, 0xf9, 0x8c, 0x63, 0x96, 0x78, 0xbb, 0x45, 0x53, 0x66, 0x95, 0x5c, 0x40, 0x50, 0x25, 0xc9, 0xd1, 0x1c, 0x3e, 0xdb, 0xa3, 0xdf, 0x50, 0xfa, 0x4c, 0x33, 0xd2, 0xae, 0xa9, 0x81, 0xf6, 0x06, 0x80, 0x8d, 0x6a, 0x9b, 0xe0, 0x8f, 0x45, 0xc2, 0xe5, 0x70, 0x30, 0xba, 0x3a, 0xfb, 0xf9, 0xf6, 0x70, 0x75, 0x7d, 0x16, 0xf6, 0x96, 0xa9, 0xb7, 0x3d, 0x3c, 0x63, 0x62, 0x31, 0x58, 0x30, 0xc4, 0x15, 0x68, 0x0f, 0x17, 0xaa, 0x21, 0xb6, 0xc3, 0xdf, 0x15, 0xb6, 0xd5, 0xa6, 0xf1, 0x53, 0x34, 0x34, 0x4f, 0x9d, 0xc8, 0x4f, 0x3d, 0x61, 0x11, 0xb2, 0x3d, 0xe4, 0x55, 0x15, 0xe5, 0x09, 0x9c, 0x6d, 0xc5, 0xf9, 0x4f, 0x80, 0x51, 0x9d, 0x6e, 0x79, 0x02, 0x52, 0xd5, 0xfc, 0x02, 0x2a, 0x4f, 0x0a, 0x3c, 0x41, 0xf2, 0x46, 0x6a, 0xb6, 0x5e, 0x3a, 0xbd, 0x99, 0xad, 0x06, 0xd2, 0x44, 0x2f, 0x87, 0x5f, 0x58, 0xd4, 0xb4, 0x3c, 0xc3, 0xdb, 0xcf, 0x74, 0x5b, 0x54, 0x79, 0x6e, 0x67, 0xb0, 0xb3, 0x66, 0x83, 0x42, 0xfa, 0x5a, 0x97, 0x85, 0xad, 0x16, 0xd1, 0xf7, 0xf9, 0x05, 0x36, 0xbf, 0xbb, 0x02, 0x32, 0xed, 0xe9, 0x3c, 0xab, 0x1d, 0x2c, 0x39, 0x99, 0xe1, 0xed, 0x51, 0x27, 0xda, 0x3d, 0xca, 0x5c, 0xeb, 0x72, 0x30, 0xd8, 0x0e, 0xd9, 0x5e, 0x52, 0x0d, 0x2d, 0x99, 0x47, 0xbb, 0x75, 0x28, 0x40, 0xd0, 0xf4, 0x1d, 0xb2, 0xc7, 0x21, 0xa4, 0x18, 0x70, 0x6e, 0xf9, 0x6d, 0x62, 0x36, 0xe6, 0x27, 0x24, 0x45, 0x90, 0xa6, 0x98, 0x38, 0x97, 0x76, 0xad, 0x89, 0x21, 0x0b, 0x8e, 0xe0, 0x04, 0x84, 0xb7, 0x81, 0x2d, 0x2f, 0xd1, 0xfc, 0x18, 0xba, 0x9c, 0x90, 0x12, 0x89, 0xf9, 0xbe, 0x50, 0x66, 0xe0, 0x3e, 0x56, 0xd1, 0x2b, 0xa4, 0x4d, 0x37, 0x38, 0x96, 0x40, 0x06, 0xeb, 0xca, 0xac, 0xb6, 0x8d, 0x4e, 0xe4, 0x88, 0xeb, 0x94, 0xb4, 0xc0, 0x27, 0x84, 0xc8, 0xd7, 0x72, 0xda, 0xe4, 0xd9, 0x30, 0x41, 0xb5, 0x78, 0x9f, 0x84, 0xb4, 0x84, 0x5d, 0xa8, 0xa1, 0x75, 0x49, 0xf2, 0x27, 0x88, 0x77, 0x85, 0x66, 0xce, 0x3a, 0x87, 0xab, 0x3d, 0x61, 0x37, 0xea, 0x30, 0xe2, 0xd9, 0x86, 0x24, 0x0d, 0x8a, 0x65, 0x30, 0x81, 0xd7, 0x5a, 0x5a, 0x22, 0x87, 0xa4, 0xd8, 0x2f, 0x0a, 0x2c, 0x93, 0xe1, 0x48, 0x81, 0xdd, 0x6f, 0xab, 0xb0, 0x93, 0xc5, 0x88, 0xcf, 0x71, 0x1f, 0x54, 0x66, 0x02, 0xd9, 0xeb, 0x10, 0xcf, 0xbd, 0x72, 0xc8, 0x18, 0x90, 0x43, 0xef, 0x58, 0x64, 0xa1, 0x4d, 0xdf, 0x0c, 0x19, 0x08, 0x87, 0x7a, 0xda, 0xa9, 0x8f, 0x44, 0xfa, 0xa2, 0x02, 0x3b, 0xb0, 0x9c, 0x49, 0x11, 0xe5, 0xc3, 0xb9, 0xf8, 0x92, 0x72, 0xf1, 0xe9, 0xb9, 0xa4, 0x05, 0xe4, 0xb0, 0x61, 0x6e, 0x67, 0xe8, 0xcd, 0x58, 0x4e, 0x42, 0xc6, 0x64, 0x6b, 0x34, 0x06, 0xd9, 0x08, 0x23, 0xab, 0xfa, 0xb6, 0x6a, 0xc0, 0x59, 0x64, 0xb2, 0x66, 0x87, 0x2e, 0x7b, 0x3d, 0xb8, 0xa2, 0x24, 0x61, 0xf7, 0x00, 0xf1, 0xf6, 0x9f, 0x1f, 0xe9, 0x6b, 0xfe, 0xec, 0xee, 0xae, 0xba, 0x2c, 0x2b, 0xb0, 0x6d, 0x4f, 0x4f, 0xcb, 0xc4, 0x3d, 0xed, 0xf5, 0xcc, 0xa9, 0x84, 0xdf, 0x85, 0xc9, 0xce, 0x89, 0x42, 0xf4, 0x14, 0xc7, 0xfd, 0xb7, 0x11, 0x71, 0x95, 0x96, 0xf4, 0x78, 0xdc, 0xf7, 0x28, 0xae, 0x76, 0x52, 0xd8, 0x46, 0x98, 0x59, 0x60, 0x33, 0x39, 0xd2, 0xed, 0x15, 0xce, 0xcf, 0xb5, 0x02, 0xae, 0xa3, 0x34, 0x7d, 0x1d, 0xdd, 0xe7, 0x1c, 0x8f, 0xeb, 0x68, 0x00, 0xd7, 0xd1, 0x44, 0xb2, 0xf4, 0x9b, 0xb4, 0x8e, 0xd6, 0x2a, 0x01, 0xa1, 0x17, 0xab, 0xf3, 0xaa, 0x8f, 0x59, 0xc7, 0xd3, 0x5a, 0xa1, 0x75, 0xd4, 0x36, 0xf6, 0xdc, 0x0e, 0x97, 0x24, 0xaf, 0xa3, 0x55, 0x64, 0xf5, 0xbe, 0xf6, 0xa2, 0xdc, 0x4e, 0xc4, 0xbd, 0xb9, 0x3d, 0x9b, 0x4e, 0xc5, 0x9b, 0x6b, 0xb3, 0xcd, 0xed, 0x6c, 0xdf, 0x75, 0xba, 0xb9, 0xdd, 0x42, 0x77, 0x2f, 0xaf, 0x10, 0x5c, 0x09, 0xe6, 0xf6, 0x2e, 0x7a, 0x9f, 0x41, 0x6b, 0x84, 0x2a, 0x18, 0x6a, 0x53, 0x31, 0x4e, 0x0f, 0x85, 0xe1, 0x5a, 0xa1, 0x3c, 0x42, 0xcb, 0xd4, 0x4a, 0x96, 0x97, 0x87, 0xfc, 0x71, 0xea, 0x02, 0xf1, 0x64, 0x19, 0xa7, 0x56, 0xb3, 0xd4, 0xcb, 0x03, 0x6a, 0x15, 0xdd, 0x0b, 0xee, 0x54, 0xd3, 0xe8, 0x6e, 0x19, 0x47, 0xf6, 0xb6, 0x94, 0xf5, 0x6a, 0x11, 0x8e, 0xd4, 0x38, 0xdd, 0x7f, 0x1f, 0x86, 0x4b, 0xd2, 0xd7, 0xd8, 0xf6, 0x7f, 0x30, 0xaa, 0x66, 0x5f, 0xff, 0x8b, 0x2f, 0xaa, 0x44, 0xf5, 0xb5, 0x74, 0x9f, 0x32, 0x1e, 0xd7, 0xd2, 0x25, 0x5a, 0x4b, 0x95, 0x6d, 0x55, 0xf7, 0x20, 0x45, 0x61, 0x88, 0xc3, 0xb9, 0x2c, 0x1c, 0x15, 0x47, 0xff, 0x33, 0x60, 0xd2, 0x4f, 0xb2, 0x74, 0x8b, 0x34, 0xa4, 0x45, 0x42, 0xb6, 0x6d, 0x4d, 0x0e, 0xc4, 0xb0, 0xbe, 0x1c, 0x32, 0xb4, 0x80, 0xca, 0x27, 0x5b, 0x49, 0xba, 0xe3, 0xe7, 0x70, 0x7f, 0xc9, 0x56, 0x4a, 0x71, 0x66, 0x0a, 0x6d, 0xde, 0xbb, 0x70, 0xad, 0xc9, 0xb6, 0x34, 0x5b, 0x30, 0xb0, 0x39, 0x74, 0x9a, 0xad, 0x24, 0xc8, 0x5f, 0x8f, 0xea, 0x5e, 0x63, 0x78, 0x2e, 0xc4, 0x78, 0x53, 0x67, 0x8a, 0x61, 0xe0, 0x26, 0x53, 0xbb, 0x73, 0xf4, 0x5d, 0xf8, 0xbc, 0x10, 0xaf, 0x26, 0xb8, 0x72, 0xd6, 0x25, 0x98, 0x1f, 0x2b, 0x56, 0x44, 0x46, 0xf0, 0xa5, 0x92, 0x42, 0x94, 0xc2, 0x82, 0xbc, 0xdb, 0xfe, 0xcf, 0xb3, 0xa4, 0xe0, 0xca, 0x07, 0x5d, 0x78, 0xd5, 0xe1, 0x85, 0xb5, 0xf9, 0x40, 0x85, 0x2b, 0x7f, 0xda, 0x8a, 0x17, 0xd6, 0xf4, 0x4f, 0x18, 0xf6, 0xe1, 0x51, 0xb8, 0xf2, 0x51, 0x2f, 0x5c, 0xb9, 0x60, 0xc1, 0xfb, 0xa5, 0xe1, 0xe9, 0x2e, 0x9c, 0xc4, 0xab, 0x07, 0xae, 0x5c, 0x72, 0xc1, 0x95, 0x8b, 0xa7, 0xf1, 0xfb, 0x0b, 0x78, 0x15, 0x62, 0x3a, 0xbc, 0x2e, 0x54, 0x0b, 0xbe, 0x91, 0x8c, 0x79, 0x9c, 0xe9, 0xd7, 0xcb, 0x39, 0x00, 0x57, 0xae, 0x08, 0x3e, 0xcf, 0x95, 0xcb, 0xad, 0x82, 0xef, 0x73, 0x85, 0xfc, 0x3a, 0x8f, 0xc2, 0xf7, 0x47, 0x81, 0xc4, 0xdd, 0xae, 0x5c, 0x3e, 0x8f, 0xf7, 0x94, 0x44, 0x19, 0x67, 0x31, 0xff, 0x73, 0x8f, 0x8b, 0xb8, 0x67, 0x1f, 0xc5, 0x67, 0x0b, 0xc7, 0x1f, 0x56, 0x8f, 0xab, 0xcd, 0xc3, 0xdf, 0xb5, 0x53, 0xfa, 0xfd, 0xa0, 0x48, 0x37, 0x64, 0x15, 0x65, 0x0c, 0x2d, 0x13, 0x65, 0x0c, 0x0d, 0x2b, 0x23, 0xb8, 0x62, 0x45, 0x0b, 0xcc, 0xa9, 0x6f, 0x59, 0x24, 0x9e, 0xae, 0xf7, 0xc3, 0x5f, 0xef, 0x5e, 0xda, 0x88, 0xb7, 0xc5, 0x0d, 0x8b, 0xee, 0xbe, 0x1b, 0x1a, 0x93, 0x9e, 0xf9, 0xe3, 0x37, 0xbe, 0xf2, 0x95, 0x6a, 0x25, 0x1e, 0xf6, 0x4d, 0xe5, 0xab, 0x4d, 0x4b, 0x1b, 0x23, 0x0d, 0xf5, 0x8d, 0xf5, 0x4d, 0x2d, 0xf5, 0x75, 0xf4, 0x61, 0xc9, 0x8a, 0x3a, 0x25, 0x7f, 0xe5, 0xe4, 0xfc, 0xa2, 0x1a, 0x65, 0xf1, 0xa2, 0x86, 0x06, 0x0c, 0x5c, 0xd1, 0xa4, 0x70, 0x64, 0x0a, 0x8e, 0x28, 0x8e, 0xc9, 0x77, 0x4f, 0x4d, 0xbb, 0x26, 0x9b, 0x0a, 0x4c, 0xde, 0x1c, 0x5a, 0xb4, 0xb8, 0x5e, 0xa9, 0xf0, 0x29, 0x93, 0xef, 0xbe, 0x36, 0xc2, 0x57, 0x6a, 0x97, 0xd5, 0x2f, 0x6e, 0xe1, 0x2c, 0xd2, 0x86, 0xd5, 0x6a, 0x44, 0xe5, 0xa7, 0x4d, 0x53, 0x22, 0xcd, 0x4b, 0x5b, 0x17, 0xb5, 0xd4, 0xeb, 0x85, 0x62, 0x00, 0x94, 0x35, 0x37, 0xaf, 0x68, 0x9e, 0xa1, 0xd4, 0x2e, 0xba, 0xbb, 0x9e, 0x12, 0x7e, 0x6b, 0xf1, 0x8a, 0xfa, 0xe6, 0xc5, 0xf5, 0x7a, 0x65, 0xc3, 0x2b, 0x5a, 0x62, 0xf5, 0xa6, 0x0a, 0x2b, 0x2d, 0x2b, 0x94, 0x7b, 0x9a, 0x96, 0x37, 0xad, 0xf8, 0xe7, 0x26, 0x65, 0x69, 0xbc, 0x56, 0x93, 0xeb, 0xd2, 0x20, 0x96, 0x2f, 0x65, 0x93, 0xa8, 0x1a, 0x34, 0x63, 0xd9, 0x49, 0x55, 0xe1, 0x5a, 0xe8, 0xbc, 0xbe, 0xf3, 0x8f, 0x27, 0xf8, 0x7e, 0xe7, 0xfb, 0xf4, 0x67, 0x1b, 0xfd, 0xdc, 0x98, 0xe7, 0x77, 0xe6, 0xd0, 0xdf, 0xe2, 0xf9, 0x9d, 0xe9, 0xfb, 0x3b, 0x78, 0x7e, 0xd2, 0xdf, 0xe2, 0xf9, 0x9d, 0xe9, 0xb9, 0x31, 0xcf, 0xef, 0xcc, 0xa3, 0x23, 0x79, 0x7e, 0x1f, 0xf8, 0x3f, 0x89, 0xe7, 0xf7, 0x41, 0xf1, 0x48, 0x9e, 0xdf, 0x99, 0x1d, 0xd7, 0xf2, 0xfc, 0xce, 0x6c, 0xff, 0xc7, 0x79, 0x7e, 0xc3, 0xec, 0x95, 0xbd, 0x9a, 0xe4, 0xe1, 0x7e, 0x89, 0xec, 0x4b, 0xb2, 0x76, 0x21, 0xe9, 0xd6, 0x8a, 0x4f, 0x73, 0x3f, 0x34, 0x82, 0x29, 0x92, 0x9a, 0xb0, 0x94, 0x31, 0xd9, 0x23, 0xfb, 0x70, 0x0f, 0x38, 0x55, 0x72, 0x06, 0xaa, 0x93, 0xb8, 0x5d, 0xf3, 0x94, 0xf5, 0x71, 0xbb, 0x65, 0x56, 0xc1, 0x2d, 0xc1, 0x18, 0x1b, 0x86, 0xf3, 0x34, 0xe2, 0x31, 0x16, 0x62, 0xcf, 0xe8, 0xcf, 0xd2, 0xc7, 0x7a, 0x2f, 0x11, 0xf7, 0xe0, 0x16, 0xc2, 0xd0, 0xff, 0x5c, 0x3c, 0xd9, 0x23, 0x91, 0x3c, 0x83, 0x2d, 0xdc, 0x46, 0x52, 0x0f, 0x67, 0xfb, 0xb5, 0xd3, 0x25, 0x67, 0x64, 0x57, 0xae, 0x5f, 0x3b, 0xc7, 0xef, 0xbf, 0xd5, 0x2e, 0x94, 0x9e, 0x91, 0xf3, 0x73, 0x2b, 0xb4, 0x4b, 0x64, 0x71, 0x97, 0xcf, 0xf6, 0xd3, 0x48, 0xbe, 0x0a, 0x53, 0x0f, 0xa4, 0x1d, 0x40, 0x0a, 0xc0, 0x13, 0xf6, 0x32, 0x3f, 0x6a, 0x60, 0xf4, 0xf9, 0x1a, 0x7a, 0x2b, 0x14, 0x6f, 0xa6, 0x83, 0xfc, 0x66, 0x17, 0x6f, 0x29, 0x3d, 0xfc, 0x96, 0x2d, 0x38, 0x57, 0x83, 0xcd, 0x58, 0xea, 0x9b, 0x35, 0xdd, 0x71, 0x6f, 0x31, 0x7c, 0x7e, 0x50, 0x09, 0xc2, 0x4a, 0x97, 0xd8, 0x93, 0x11, 0xaf, 0xc1, 0xbd, 0xd3, 0x5e, 0x15, 0x76, 0x95, 0x9d, 0x07, 0x6b, 0xc2, 0x16, 0xd0, 0xd5, 0xc3, 0x25, 0x67, 0xa1, 0xda, 0x1a, 0xf7, 0xa5, 0xa0, 0xa5, 0x25, 0x7d, 0x43, 0xac, 0xa3, 0xd2, 0x10, 0xd3, 0x9a, 0xcc, 0x97, 0x6d, 0x26, 0x92, 0x01, 0x39, 0xfb, 0x06, 0xe6, 0xf8, 0xb4, 0x76, 0x2c, 0xd7, 0xa3, 0x0d, 0xe2, 0x2e, 0x90, 0xad, 0x78, 0xad, 0xea, 0xdc, 0x27, 0x20, 0x4f, 0xa9, 0x66, 0x99, 0x0e, 0x19, 0xf7, 0xa8, 0x09, 0x74, 0xe6, 0x5c, 0xf9, 0x81, 0xc7, 0xac, 0x5d, 0x10, 0x3a, 0x8d, 0xa2, 0xec, 0x11, 0x25, 0x2f, 0x18, 0x5e, 0xf2, 0xd0, 0x39, 0xc4, 0xf2, 0x92, 0xca, 0x56, 0xc6, 0xe8, 0xa5, 0x7f, 0x5b, 0x58, 0x3c, 0x53, 0x66, 0x20, 0xbe, 0x32, 0xda, 0x51, 0x15, 0x78, 0x5a, 0xae, 0x0c, 0x59, 0xb8, 0x26, 0x6f, 0x45, 0x52, 0xa8, 0x26, 0xd3, 0x3c, 0x72, 0x65, 0x6e, 0x83, 0x5c, 0xa9, 0x5d, 0xca, 0xf5, 0x6a, 0x97, 0xc9, 0xbe, 0xb3, 0xb2, 0x1c, 0x6b, 0x4c, 0x92, 0x90, 0x63, 0x12, 0xb5, 0x59, 0x68, 0x88, 0xc9, 0x8e, 0x30, 0x8e, 0x67, 0xb2, 0x55, 0x39, 0x9a, 0xa4, 0x8b, 0xb3, 0xce, 0x4b, 0x1f, 0x27, 0x63, 0x65, 0x2c, 0xc1, 0x61, 0x26, 0x2d, 0x68, 0x96, 0x9a, 0xa5, 0x75, 0x61, 0x66, 0xdf, 0x09, 0xe6, 0x48, 0xda, 0xdb, 0x3b, 0x19, 0xf7, 0x99, 0x3d, 0x82, 0xbe, 0x32, 0xc4, 0xe9, 0xa9, 0x0a, 0xb6, 0x51, 0xe5, 0x60, 0xad, 0xcf, 0x81, 0xf4, 0xa7, 0xf5, 0xf4, 0x48, 0xdd, 0xdb, 0x88, 0x46, 0xb0, 0xb0, 0x4c, 0xeb, 0xb7, 0x92, 0x7c, 0x89, 0x80, 0x15, 0x6b, 0x40, 0x14, 0xa1, 0x7b, 0x34, 0x9d, 0xba, 0xc7, 0x4b, 0xc4, 0x14, 0x47, 0x77, 0x80, 0x49, 0x91, 0xc9, 0xf2, 0x51, 0xdc, 0x02, 0xf7, 0x65, 0xd1, 0x07, 0x4a, 0x85, 0x8d, 0x7d, 0x18, 0x86, 0xd8, 0x4a, 0x61, 0xd8, 0x43, 0xf8, 0x28, 0xdb, 0x5f, 0x9f, 0x8e, 0xf4, 0x64, 0x5e, 0x70, 0x2b, 0xf7, 0xcc, 0x29, 0x84, 0x20, 0x5e, 0x7d, 0x94, 0xb8, 0x47, 0x58, 0xc2, 0x6a, 0x0c, 0xf6, 0xc7, 0x72, 0x98, 0x18, 0x2b, 0x27, 0x64, 0x9c, 0xbb, 0x55, 0x3f, 0x6b, 0x32, 0x68, 0xa7, 0xe2, 0x7d, 0x33, 0x93, 0xc6, 0x8a, 0xfa, 0x66, 0x36, 0xf5, 0x4d, 0x92, 0xf6, 0x2f, 0xa6, 0x8f, 0xf7, 0x4d, 0xdc, 0x4e, 0x8b, 0x12, 0xd1, 0xd8, 0xc6, 0x7e, 0xba, 0x92, 0x2b, 0x3b, 0x48, 0x3e, 0x23, 0x18, 0x9d, 0xe2, 0x91, 0x1d, 0xa4, 0x97, 0xc1, 0x3d, 0xb6, 0x2a, 0x92, 0xd9, 0x2c, 0xf9, 0x4b, 0x12, 0x9c, 0x45, 0xe6, 0x58, 0x2e, 0x1b, 0x66, 0x81, 0x23, 0xc9, 0x32, 0x2b, 0xe9, 0xd8, 0xe2, 0x9c, 0x8f, 0x5b, 0xe0, 0xb0, 0x61, 0xae, 0xc1, 0x8e, 0x29, 0x5e, 0xcc, 0xdb, 0x2b, 0x72, 0x64, 0x3d, 0x5c, 0xf2, 0xad, 0x9d, 0xc6, 0x96, 0x5e, 0xaf, 0x7c, 0x5c, 0x24, 0xa4, 0x9b, 0xad, 0x81, 0x48, 0x66, 0x02, 0x7e, 0x20, 0x3e, 0x63, 0x0e, 0x74, 0x84, 0x90, 0x2a, 0x6e, 0xd1, 0x82, 0x3b, 0xc1, 0x92, 0xac, 0x79, 0xcc, 0x1a, 0x2c, 0x8c, 0xeb, 0x23, 0x2e, 0x6d, 0xb2, 0x91, 0xaf, 0xc4, 0x3c, 0x3b, 0xe2, 0x3e, 0xdc, 0x63, 0x27, 0xec, 0x51, 0xc2, 0x83, 0xaa, 0x37, 0x04, 0x7a, 0x42, 0xd9, 0x48, 0xdf, 0xe1, 0xb3, 0xb7, 0x07, 0x31, 0x9e, 0x8f, 0x75, 0x9a, 0x73, 0x93, 0xd7, 0x83, 0x98, 0x5b, 0x90, 0xf9, 0x11, 0x2f, 0x93, 0x8c, 0x50, 0x1c, 0xaf, 0x56, 0x5a, 0x94, 0x3d, 0xd1, 0xfa, 0x10, 0x52, 0x78, 0x35, 0x76, 0x59, 0x2e, 0x1d, 0x84, 0xdd, 0x9d, 0xa1, 0x4a, 0xc2, 0x9d, 0x53, 0xb4, 0xde, 0x8e, 0xc5, 0x3e, 0xbb, 0x7c, 0xac, 0xe3, 0x58, 0xe7, 0xad, 0x38, 0x13, 0x8a, 0xc0, 0x6e, 0xf8, 0x9f, 0x27, 0xef, 0xdd, 0xac, 0xe6, 0xb5, 0xca, 0x7b, 0x3b, 0xc2, 0x19, 0x59, 0xc5, 0x90, 0x82, 0xf7, 0x2c, 0xd2, 0xcd, 0xdf, 0xdb, 0x11, 0x72, 0xa8, 0x59, 0x84, 0xe7, 0x71, 0x09, 0xe9, 0xea, 0x04, 0xd2, 0xfb, 0x0d, 0x76, 0xbc, 0xb7, 0xe1, 0xc8, 0xc1, 0xea, 0x2e, 0x9b, 0xa5, 0x15, 0x63, 0xd6, 0x3f, 0xaa, 0xbe, 0x18, 0xf3, 0xd7, 0x67, 0x10, 0x5a, 0x19, 0x82, 0xab, 0x30, 0x60, 0xae, 0xab, 0xee, 0x8e, 0xf3, 0xc6, 0xad, 0xb6, 0xf4, 0x32, 0x84, 0x5d, 0xd8, 0x33, 0xc1, 0xc0, 0x03, 0x48, 0x57, 0x50, 0xed, 0x5f, 0x56, 0x82, 0xde, 0x9e, 0xea, 0x0d, 0xca, 0x32, 0x6d, 0x90, 0xf3, 0x3f, 0x25, 0xa8, 0x1e, 0x3d, 0xbe, 0x29, 0xec, 0x18, 0x09, 0x1d, 0x92, 0x20, 0x83, 0x61, 0x38, 0x64, 0xf0, 0xc5, 0xd6, 0x26, 0xcd, 0x4b, 0xa2, 0x49, 0x46, 0xdb, 0x68, 0x6d, 0xfa, 0xf5, 0xb5, 0xf9, 0x7e, 0x44, 0xd6, 0xd7, 0xa6, 0x3f, 0x77, 0x99, 0xec, 0xc7, 0x59, 0xe8, 0x8d, 0xaf, 0xcb, 0xcb, 0xc9, 0xeb, 0xb2, 0xd2, 0x20, 0x34, 0x9f, 0x89, 0xa7, 0x87, 0x6b, 0x62, 0x85, 0xb0, 0x9f, 0x44, 0x7a, 0x28, 0x62, 0x8e, 0x2c, 0xee, 0xab, 0xee, 0x26, 0x49, 0x52, 0x6b, 0xf0, 0xb5, 0x43, 0xca, 0x6d, 0x5d, 0x80, 0xbd, 0xef, 0xd9, 0x43, 0x9a, 0x2d, 0x46, 0x85, 0xb8, 0xf5, 0x17, 0x85, 0x3d, 0x4b, 0xc2, 0x79, 0xdd, 0xb8, 0x4a, 0x49, 0x27, 0x25, 0x96, 0x8a, 0x43, 0x4d, 0x08, 0xbf, 0x0b, 0x22, 0x38, 0x1b, 0x88, 0xc7, 0x07, 0x5a, 0x7f, 0xfb, 0x8f, 0x0e, 0x85, 0x0d, 0x19, 0xd9, 0xa1, 0x0b, 0x94, 0x82, 0x2c, 0x79, 0x06, 0xdb, 0xfb, 0xda, 0x19, 0x46, 0x91, 0xc4, 0x18, 0xfb, 0x70, 0xd1, 0x7d, 0x44, 0xbc, 0x90, 0x28, 0xd7, 0xf6, 0xed, 0x2e, 0xb2, 0xd9, 0xab, 0x7d, 0xcb, 0xa5, 0xd2, 0x89, 0xb6, 0x13, 0xfb, 0x60, 0x0b, 0x4b, 0xd5, 0x98, 0x74, 0x9f, 0x8c, 0x67, 0x68, 0xa7, 0x32, 0xf3, 0x9c, 0x2a, 0x26, 0x0d, 0x9d, 0x9c, 0x4c, 0x37, 0xdc, 0x1a, 0xc9, 0x48, 0xd6, 0xa0, 0xe0, 0x79, 0xbf, 0x32, 0x72, 0xcb, 0x2a, 0x29, 0x1b, 0xac, 0xa3, 0xde, 0x7e, 0xe2, 0x60, 0x67, 0xc8, 0x3c, 0xd7, 0x70, 0xe7, 0x21, 0x0d, 0xe9, 0x95, 0xb9, 0xd1, 0xba, 0x33, 0x41, 0x83, 0x7f, 0x8d, 0xff, 0x85, 0x56, 0xe9, 0xfd, 0x27, 0xe7, 0x76, 0x2a, 0x29, 0xef, 0x75, 0xf5, 0x77, 0xf6, 0x47, 0x93, 0x57, 0x0e, 0xf1, 0xcb, 0xe7, 0x92, 0x97, 0x7a, 0xf3, 0xcd, 0x5e, 0xb0, 0x98, 0x65, 0x90, 0xc2, 0x26, 0xfc, 0x95, 0x43, 0x36, 0x35, 0x63, 0x32, 0xee, 0x2d, 0x97, 0x56, 0x82, 0x81, 0xef, 0x7b, 0xc0, 0xa4, 0x5a, 0xf8, 0xe9, 0x92, 0x1e, 0xf2, 0x32, 0xc2, 0x12, 0xb2, 0xf4, 0x56, 0xcc, 0x34, 0x00, 0xd9, 0x30, 0x51, 0x1c, 0xba, 0x34, 0xdb, 0xf7, 0x7e, 0x8d, 0x2b, 0x25, 0x47, 0xf9, 0xf6, 0x3e, 0xec, 0x21, 0x87, 0xc5, 0x9d, 0x82, 0xf3, 0x68, 0xab, 0xe2, 0xab, 0xee, 0xe6, 0xd9, 0x71, 0x3e, 0xd8, 0x81, 0xb4, 0x85, 0x93, 0xd6, 0xb4, 0x35, 0xd8, 0xdb, 0x51, 0x7b, 0x3c, 0x89, 0x37, 0x14, 0x88, 0x64, 0x24, 0x56, 0x1b, 0x42, 0x41, 0x9a, 0x87, 0x63, 0xc4, 0xf9, 0x92, 0x1d, 0xfb, 0x91, 0xfd, 0xe4, 0x91, 0x2e, 0x84, 0xa9, 0xaa, 0x87, 0xa5, 0x15, 0x83, 0xf6, 0x5e, 0x13, 0x28, 0xc1, 0x49, 0xf7, 0x99, 0xa0, 0xba, 0xdb, 0xf6, 0x2d, 0x3b, 0xe3, 0x2a, 0x33, 0x49, 0x53, 0xcc, 0x81, 0xf1, 0x5d, 0xce, 0x15, 0x88, 0x06, 0x08, 0xad, 0x83, 0xa2, 0x56, 0x68, 0x81, 0x8a, 0x01, 0x6d, 0xb7, 0x9a, 0xaf, 0xcc, 0xb5, 0x45, 0x8a, 0x40, 0x9d, 0xe8, 0x26, 0x1b, 0x1d, 0x69, 0x55, 0x0f, 0xea, 0x30, 0xc7, 0xce, 0x1e, 0xe7, 0x8d, 0x55, 0x5b, 0x6d, 0x41, 0x0a, 0xe1, 0x11, 0x38, 0x81, 0x75, 0xed, 0x54, 0x72, 0xa9, 0xae, 0x58, 0xd3, 0x17, 0x63, 0x5a, 0x53, 0xc5, 0x6d, 0x7f, 0xab, 0x5e, 0x4a, 0x84, 0x6a, 0xb4, 0xe5, 0x25, 0x75, 0xc2, 0x8f, 0x0f, 0x85, 0x32, 0x18, 0xa6, 0x1a, 0xad, 0x3d, 0xde, 0x1e, 0xd5, 0x68, 0x0d, 0xde, 0xda, 0x63, 0x02, 0xab, 0x5f, 0xa9, 0xe6, 0xde, 0x38, 0x29, 0x6a, 0xcd, 0x92, 0xcd, 0x98, 0x93, 0x3e, 0xaf, 0xb2, 0xed, 0xe0, 0x2f, 0xf5, 0x96, 0x5a, 0xe1, 0x83, 0xf5, 0x9b, 0x49, 0x62, 0x40, 0xee, 0x6f, 0xef, 0xef, 0xa4, 0x39, 0x96, 0x99, 0x1d, 0x3a, 0xc5, 0x1e, 0xc4, 0xf4, 0x39, 0x26, 0xec, 0x99, 0x7e, 0xfa, 0x19, 0xe9, 0x96, 0xc9, 0x96, 0x91, 0x6d, 0x2a, 0xbe, 0x77, 0x34, 0x23, 0xde, 0xa8, 0x66, 0x2a, 0x77, 0x2a, 0x91, 0x6c, 0x50, 0x65, 0xbd, 0x3e, 0x97, 0x83, 0xd1, 0x9a, 0xf6, 0x3d, 0xd1, 0xda, 0xd3, 0x4c, 0x47, 0x5f, 0x63, 0x17, 0x2f, 0x36, 0xd2, 0x76, 0xd2, 0x2d, 0x5d, 0x06, 0xe9, 0x36, 0x17, 0x63, 0x3f, 0x9b, 0x15, 0x97, 0x9c, 0xbf, 0x00, 0x61, 0x2e, 0xd9, 0xc2, 0xd0, 0x21, 0x1e, 0x50, 0xd8, 0xc2, 0x61, 0x61, 0x0e, 0x0e, 0xbb, 0x6b, 0x58, 0x98, 0x0d, 0xb0, 0x27, 0x71, 0xbc, 0xb8, 0xff, 0xac, 0xf1, 0xdd, 0xca, 0x43, 0x96, 0x54, 0x48, 0x4f, 0xf5, 0x4a, 0x4e, 0x60, 0x4d, 0xc8, 0x48, 0x1a, 0xfa, 0x57, 0xfc, 0x08, 0x7b, 0xb3, 0x58, 0x17, 0xcd, 0x4e, 0xb6, 0xdb, 0xae, 0xd4, 0x3d, 0x77, 0x5a, 0x1b, 0x0c, 0x1b, 0x10, 0x96, 0x59, 0x15, 0xcf, 0xa4, 0x52, 0x98, 0x30, 0xc9, 0x07, 0x13, 0x27, 0x79, 0xc1, 0x2a, 0xa0, 0x18, 0xcf, 0x1e, 0x1e, 0x23, 0xdd, 0x33, 0xb2, 0x13, 0x3c, 0xb8, 0x02, 0x5d, 0xd5, 0xdd, 0x6e, 0x9e, 0x63, 0x18, 0xbe, 0x0c, 0x8a, 0xb1, 0x37, 0xbe, 0x45, 0x5e, 0x6d, 0x69, 0x3c, 0xad, 0x2b, 0x58, 0x93, 0x24, 0xd3, 0x46, 0x34, 0x75, 0x46, 0xef, 0x13, 0x50, 0x54, 0x97, 0x67, 0xf3, 0xfc, 0xb6, 0x0f, 0xff, 0x5f, 0xc6, 0xff, 0xf7, 0xa1, 0xd8, 0xbe, 0x04, 0x4c, 0xf6, 0xcd, 0xf8, 0x6b, 0xb6, 0xef, 0xc4, 0x38, 0x4e, 0x30, 0xe1, 0x9a, 0x7a, 0x02, 0x3c, 0x04, 0x5b, 0x83, 0x3d, 0x62, 0x2f, 0xb6, 0x0b, 0xc8, 0x61, 0x26, 0x7e, 0xde, 0x7b, 0x5d, 0x34, 0x36, 0xfd, 0x3b, 0xb0, 0x64, 0x86, 0x26, 0x34, 0x42, 0x38, 0x1a, 0x86, 0xdd, 0xd1, 0xc5, 0xb2, 0x22, 0x55, 0x77, 0xe1, 0x7e, 0x70, 0x81, 0x6a, 0xc9, 0xa3, 0x42, 0x69, 0x96, 0x22, 0x3c, 0xcb, 0xc0, 0x54, 0x4b, 0x00, 0xa1, 0x04, 0xc2, 0xae, 0xd1, 0x08, 0x7f, 0x0c, 0x4a, 0xb5, 0xe8, 0x17, 0x82, 0x49, 0xa4, 0xb7, 0xa2, 0x8c, 0xe3, 0x7c, 0x0d, 0x7a, 0x2c, 0x3e, 0xe1, 0xb0, 0x56, 0x57, 0x1d, 0xb1, 0x0a, 0x1f, 0x5b, 0x14, 0x6e, 0xe7, 0x38, 0x23, 0xbe, 0xf3, 0x3e, 0x8c, 0xa3, 0x47, 0xda, 0xc1, 0xff, 0x72, 0x18, 0xa9, 0x0b, 0x01, 0x7d, 0x68, 0x9f, 0x2a, 0xfe, 0xdd, 0x61, 0xf7, 0x78, 0xf7, 0x34, 0xd2, 0x61, 0xae, 0xee, 0xae, 0x38, 0xc7, 0x3b, 0x79, 0x26, 0xdb, 0xc1, 0x78, 0x12, 0xf3, 0xcb, 0xe5, 0x76, 0xee, 0x24, 0x4b, 0xca, 0xc1, 0x8e, 0x3d, 0x3b, 0xa1, 0xa8, 0xfe, 0x30, 0x5b, 0xa9, 0x33, 0xc4, 0x7c, 0x06, 0xde, 0x31, 0x93, 0x6c, 0x7f, 0x63, 0xbe, 0xd5, 0x58, 0x5a, 0x3a, 0xeb, 0xfb, 0x54, 0xfe, 0xf6, 0x34, 0x64, 0xd8, 0x31, 0x07, 0x3b, 0xe6, 0xea, 0x7d, 0x06, 0x0a, 0x5b, 0xe0, 0x5f, 0x0e, 0xaf, 0x2e, 0x64, 0xab, 0xad, 0x03, 0x63, 0xcf, 0x09, 0xf9, 0x48, 0xb5, 0x10, 0xc7, 0xbe, 0xc8, 0x9d, 0x87, 0x65, 0xe8, 0x32, 0x85, 0xa1, 0x4c, 0xb2, 0x00, 0x37, 0x74, 0xb4, 0xa6, 0xbb, 0xf7, 0x19, 0x28, 0xae, 0x37, 0x06, 0xc9, 0x8a, 0x67, 0x31, 0x49, 0x10, 0x39, 0xb2, 0x42, 0xaf, 0xbe, 0xfe, 0x21, 0x14, 0x07, 0x3b, 0xfc, 0x2b, 0xa0, 0x98, 0x2e, 0x77, 0xaa, 0x3b, 0x85, 0x6c, 0x7a, 0xea, 0xb4, 0x8b, 0xd3, 0x35, 0x5b, 0x7d, 0x03, 0xd7, 0x34, 0xad, 0x46, 0xf6, 0xe1, 0xa1, 0x63, 0x24, 0x66, 0xf7, 0x78, 0xf2, 0xa4, 0x5a, 0x71, 0xc9, 0x24, 0x05, 0x3b, 0x66, 0x9d, 0x05, 0xb3, 0x9a, 0xbe, 0xaa, 0xf8, 0x8d, 0x6e, 0x9c, 0x53, 0x03, 0xe9, 0xd5, 0x73, 0x06, 0x86, 0x96, 0x90, 0x3f, 0x42, 0xac, 0x7f, 0x25, 0xce, 0x9d, 0x22, 0xc5, 0xfc, 0x5e, 0xd7, 0x70, 0x08, 0x69, 0x07, 0xc6, 0x1f, 0x40, 0x7a, 0x8c, 0xf5, 0xb6, 0x3b, 0xd8, 0x72, 0xca, 0x08, 0x18, 0x4a, 0x5a, 0xf2, 0x64, 0xc3, 0xd0, 0x41, 0xed, 0xf5, 0xb4, 0xc0, 0xca, 0xc2, 0xe3, 0xdd, 0x64, 0xad, 0xb6, 0xad, 0xe8, 0x44, 0x77, 0x1e, 0xb7, 0x57, 0x6d, 0x51, 0x3c, 0xd6, 0x52, 0x05, 0xa1, 0xd1, 0x7b, 0x5d, 0x09, 0x9b, 0x8a, 0xf6, 0x67, 0xc0, 0xe3, 0xc2, 0x34, 0xee, 0x39, 0x08, 0xa9, 0x02, 0x36, 0xaf, 0xea, 0x62, 0xdd, 0x41, 0xec, 0x0f, 0xc6, 0x54, 0x5c, 0x7a, 0x8f, 0xc8, 0xc2, 0x3a, 0x15, 0xf6, 0x48, 0xa1, 0xde, 0x23, 0x85, 0xd4, 0x23, 0xb6, 0xac, 0x50, 0xbf, 0x2d, 0x8d, 0xfd, 0xbc, 0x93, 0xd5, 0xd3, 0x42, 0xb2, 0x40, 0x3c, 0xc5, 0x0b, 0xa6, 0xa3, 0xd1, 0xf7, 0xba, 0x8e, 0x45, 0xa9, 0xa5, 0x0c, 0xe3, 0x8c, 0x34, 0xae, 0xe4, 0xf1, 0x45, 0x3f, 0x8b, 0x06, 0xad, 0x75, 0xce, 0x39, 0x30, 0xc4, 0xc6, 0x22, 0xbd, 0xda, 0x49, 0xab, 0x49, 0x5e, 0x59, 0x7c, 0xbc, 0x9b, 0xfd, 0x7d, 0xa4, 0xba, 0xb3, 0x38, 0x45, 0x79, 0xbc, 0x07, 0xc9, 0x93, 0x41, 0xb1, 0x7d, 0x9b, 0x3b, 0x93, 0x46, 0x89, 0xb0, 0xab, 0x58, 0x49, 0x2c, 0x95, 0x4c, 0xfe, 0x8f, 0xb2, 0x08, 0x53, 0x18, 0x53, 0xae, 0xfb, 0x56, 0x5e, 0x40, 0x1a, 0xec, 0x76, 0x93, 0x12, 0x24, 0x8f, 0x1d, 0xfc, 0x8d, 0xdb, 0xc2, 0xe7, 0xbc, 0xbf, 0xc4, 0xfc, 0x4e, 0x29, 0xf3, 0x54, 0xc5, 0x1a, 0x54, 0x6e, 0x2b, 0xa2, 0xb5, 0x81, 0xab, 0x84, 0x3c, 0xca, 0xdc, 0xda, 0x8e, 0x70, 0x91, 0xee, 0xcf, 0x40, 0xa5, 0xc9, 0x50, 0xdd, 0x65, 0xb5, 0x84, 0x4e, 0xd0, 0x4c, 0xa4, 0x96, 0x06, 0xb6, 0x92, 0x3f, 0x62, 0x84, 0xbf, 0x8a, 0xbe, 0x96, 0x33, 0xaa, 0xf6, 0xff, 0xb5, 0x36, 0xee, 0x19, 0x9d, 0xf6, 0xce, 0xfd, 0x7f, 0x0d, 0x92, 0x16, 0xa7, 0x6e, 0x79, 0x35, 0x9b, 0x67, 0x66, 0x0b, 0x51, 0x6c, 0x08, 0xab, 0x1e, 0x76, 0xe3, 0x8e, 0xf5, 0x97, 0x17, 0xa1, 0x0b, 0xdb, 0xb1, 0x11, 0xaf, 0x1e, 0xbc, 0xb6, 0x92, 0x57, 0x3c, 0xa4, 0xb1, 0xf2, 0x89, 0x8a, 0x3c, 0x5b, 0x2c, 0xac, 0xc6, 0x7d, 0x63, 0x7b, 0xc9, 0x87, 0xf0, 0x58, 0xc9, 0x69, 0xed, 0x82, 0xdb, 0x4f, 0xb6, 0xe4, 0xf1, 0xcb, 0x79, 0x68, 0x89, 0x48, 0xd8, 0xe3, 0x2b, 0xdd, 0x01, 0x68, 0xe3, 0x90, 0x8f, 0x20, 0xda, 0x3c, 0xca, 0x5d, 0x02, 0x6b, 0x30, 0x97, 0x78, 0x8e, 0x88, 0xa9, 0xe6, 0x5b, 0x61, 0x3e, 0x59, 0xb6, 0xf5, 0x23, 0x0d, 0x32, 0x80, 0xe9, 0x2b, 0xbf, 0x4a, 0x6f, 0xd5, 0x7a, 0x8e, 0x87, 0x31, 0x64, 0x5e, 0x90, 0x42, 0x6a, 0x38, 0x97, 0xcb, 0xb0, 0x90, 0x2d, 0xd4, 0xaa, 0x11, 0x13, 0xfe, 0xb2, 0x25, 0x7b, 0xbc, 0x1a, 0x1e, 0x38, 0x44, 0x27, 0xa4, 0xe7, 0x0c, 0x58, 0x3b, 0xbf, 0xee, 0xab, 0x2b, 0x86, 0x15, 0x9b, 0x27, 0xcf, 0x86, 0x2c, 0xc5, 0xc3, 0xa1, 0xfd, 0x82, 0x8a, 0xc5, 0x2f, 0x1b, 0x63, 0x54, 0xab, 0x92, 0xf0, 0xae, 0x74, 0x4c, 0x87, 0xd5, 0x33, 0x69, 0x47, 0xc6, 0xd9, 0xe1, 0xb2, 0x37, 0x40, 0xba, 0x3d, 0x57, 0xf6, 0xb9, 0xc7, 0xf2, 0x88, 0x11, 0xbe, 0x6d, 0x4d, 0xc2, 0xb7, 0xdb, 0xa8, 0xf6, 0x0c, 0xbf, 0x1b, 0x11, 0x2e, 0x97, 0x0a, 0xb8, 0x4c, 0x61, 0x0b, 0x87, 0x85, 0x39, 0x38, 0xec, 0xae, 0x61, 0x61, 0x08, 0x93, 0xc9, 0x32, 0xe3, 0x40, 0xca, 0x4a, 0x1d, 0x4e, 0x0f, 0xc8, 0xbd, 0x2c, 0xef, 0xb0, 0x0c, 0xec, 0xcc, 0x2f, 0xb4, 0x28, 0xf4, 0x75, 0xd9, 0x4f, 0x18, 0x56, 0x23, 0x4c, 0xb4, 0x62, 0x2b, 0xd2, 0x11, 0xef, 0x9e, 0x30, 0x19, 0xa1, 0x35, 0xae, 0x2c, 0x2b, 0xb5, 0xa4, 0x2d, 0x47, 0xb7, 0x62, 0x2e, 0xbc, 0x63, 0x99, 0x11, 0xa6, 0xa7, 0xb3, 0x1f, 0x2b, 0x1e, 0x59, 0x4d, 0x21, 0xcb, 0x35, 0x08, 0xcd, 0x8a, 0xf9, 0xdc, 0xca, 0x24, 0xf4, 0x0f, 0x69, 0xbf, 0xc5, 0xdd, 0xe0, 0x09, 0x20, 0xde, 0x45, 0xb6, 0x32, 0x95, 0xbc, 0x66, 0xda, 0x74, 0x1b, 0xd9, 0x08, 0x09, 0x89, 0x13, 0xa9, 0x20, 0xa4, 0x2e, 0xb6, 0x2d, 0x25, 0x9f, 0x52, 0x8a, 0x44, 0x1c, 0xdc, 0x22, 0x98, 0x2e, 0xd9, 0x68, 0x3f, 0xef, 0x50, 0x6d, 0xa4, 0x51, 0xed, 0x98, 0xfb, 0xfa, 0x21, 0xa5, 0xa5, 0x0b, 0xbc, 0x25, 0xaa, 0x79, 0x9f, 0xa7, 0x3e, 0x67, 0x6f, 0xc9, 0xe2, 0x6c, 0xa5, 0x3a, 0x58, 0xa2, 0x63, 0x2a, 0x9e, 0x66, 0x28, 0x80, 0x3d, 0xed, 0xb5, 0x47, 0x11, 0x6e, 0xdb, 0xc5, 0x79, 0x2e, 0xc9, 0xf3, 0xd9, 0x4b, 0x66, 0x7d, 0x64, 0x92, 0x6c, 0xf7, 0x61, 0xce, 0x26, 0xa4, 0xc2, 0x4c, 0xe4, 0xcf, 0xd5, 0xba, 0x03, 0xf7, 0x0e, 0xdc, 0x67, 0x85, 0x3d, 0x6d, 0xde, 0x67, 0xd9, 0xdf, 0x21, 0xed, 0x02, 0x36, 0x90, 0xbd, 0x83, 0x60, 0x95, 0x0f, 0x3e, 0x01, 0x3e, 0x2a, 0x15, 0xe3, 0x7b, 0x10, 0xef, 0x44, 0xfc, 0x8f, 0x7b, 0x28, 0x9b, 0x30, 0xcf, 0x50, 0xba, 0xe0, 0x2e, 0x23, 0x9c, 0xdd, 0x41, 0x16, 0x86, 0x95, 0x6a, 0xf5, 0x9d, 0x24, 0xeb, 0xbd, 0x6e, 0xc8, 0x46, 0x9a, 0x67, 0x24, 0xe6, 0x37, 0x83, 0x7c, 0xd3, 0x0c, 0x87, 0x45, 0xac, 0xb1, 0x9d, 0xc1, 0xde, 0x7d, 0x0d, 0xec, 0xe9, 0xd7, 0x34, 0x99, 0xe4, 0x0b, 0x2d, 0xc3, 0x29, 0x19, 0xc1, 0x05, 0x11, 0x56, 0x7a, 0xc5, 0x1e, 0x49, 0x9e, 0xc6, 0x86, 0x61, 0x62, 0x49, 0xb1, 0x05, 0x7d, 0xc9, 0x9c, 0x11, 0xc2, 0x88, 0x97, 0x22, 0x84, 0x37, 0xd3, 0x1c, 0xd6, 0xb6, 0x23, 0x04, 0xc0, 0x1e, 0xc6, 0x58, 0x38, 0x67, 0xff, 0x7c, 0x02, 0x57, 0xdc, 0x49, 0x5d, 0x6b, 0x7f, 0x1e, 0xae, 0xba, 0x1a, 0x4c, 0x51, 0x4d, 0x23, 0xe9, 0x58, 0x0e, 0x26, 0x27, 0xee, 0xf8, 0x64, 0x5d, 0x2f, 0x64, 0x40, 0xd8, 0xb0, 0x10, 0xf7, 0x84, 0x22, 0x82, 0x3a, 0x57, 0x17, 0x12, 0xd4, 0x99, 0xf3, 0x21, 0xb8, 0xd4, 0x62, 0xd6, 0x84, 0x19, 0x45, 0xab, 0xf1, 0x9c, 0x85, 0xe0, 0x0c, 0xae, 0x8a, 0x22, 0x37, 0xd2, 0x85, 0x38, 0xea, 0x3e, 0xdc, 0x61, 0x1b, 0xd9, 0xa6, 0xd3, 0x58, 0x1e, 0x7d, 0x41, 0x6d, 0x92, 0x16, 0x81, 0xcc, 0x12, 0xa2, 0x04, 0x1f, 0xfa, 0x70, 0x6f, 0x8a, 0x3d, 0x7f, 0x8c, 0x18, 0x6d, 0x11, 0xe7, 0x27, 0x09, 0x7d, 0x10, 0xe2, 0xa1, 0xb0, 0x67, 0x10, 0x92, 0x7e, 0x96, 0x59, 0x2a, 0xc0, 0x0c, 0x3e, 0xb2, 0xe5, 0x4e, 0xe7, 0x60, 0xb8, 0xee, 0x3c, 0xba, 0xce, 0x13, 0x97, 0x5e, 0xb5, 0x7f, 0xf0, 0x69, 0x2a, 0x1d, 0x57, 0x6e, 0x0d, 0xae, 0xdc, 0x4b, 0xb8, 0x72, 0x8b, 0x23, 0x35, 0xfd, 0xdd, 0x5f, 0x67, 0x8b, 0xd2, 0xf4, 0x74, 0x27, 0x3d, 0xf9, 0x28, 0xbf, 0xd9, 0x58, 0xf7, 0xd6, 0xe2, 0x63, 0xbc, 0x9b, 0x98, 0x6d, 0xd4, 0x26, 0x6d, 0x06, 0xd9, 0x25, 0xff, 0xb8, 0x88, 0x60, 0x26, 0x9d, 0x2f, 0xd1, 0x9e, 0x8e, 0xf5, 0x1e, 0x1d, 0xab, 0xb9, 0xb0, 0x1d, 0x1a, 0x5e, 0xc0, 0x3e, 0x5f, 0xdd, 0x50, 0x1d, 0xdf, 0xa9, 0x3c, 0x61, 0xf2, 0xda, 0xe8, 0x06, 0x1f, 0xef, 0x01, 0xf4, 0xa5, 0x4c, 0xf7, 0xd2, 0x25, 0x7c, 0x41, 0x04, 0x94, 0x59, 0xd6, 0x06, 0x9c, 0x55, 0x18, 0x23, 0x79, 0x0f, 0x21, 0xfa, 0x19, 0xd7, 0x49, 0x71, 0x0c, 0x5e, 0xab, 0xeb, 0xa8, 0xbf, 0xb1, 0x5e, 0xc5, 0xd7, 0xd6, 0x89, 0x2d, 0x76, 0xcb, 0x58, 0x1b, 0x17, 0xd6, 0x2b, 0xa9, 0x5c, 0x38, 0xaf, 0xcc, 0x6b, 0x25, 0x2a, 0xc8, 0x81, 0x34, 0x5c, 0xe7, 0x62, 0x19, 0xb1, 0x37, 0x4b, 0x75, 0x57, 0xe8, 0x42, 0xb0, 0x13, 0x57, 0x59, 0x31, 0x7b, 0x08, 0xf5, 0xc4, 0xd6, 0x5d, 0xcc, 0x3b, 0x45, 0xc8, 0xc5, 0xf5, 0xf7, 0x70, 0x5e, 0x65, 0x89, 0x70, 0xcc, 0xed, 0x51, 0x5e, 0xa7, 0xc9, 0x75, 0xf2, 0xed, 0x7d, 0x12, 0x2c, 0x8b, 0x67, 0x12, 0x0d, 0x32, 0x72, 0x77, 0x0d, 0x47, 0x10, 0xbf, 0x20, 0x2b, 0x6a, 0x66, 0x6b, 0x69, 0x72, 0xbb, 0xb0, 0xef, 0x92, 0x66, 0xe4, 0x14, 0xa4, 0x51, 0x1e, 0x38, 0xa4, 0x2a, 0xb8, 0xce, 0x0d, 0xf4, 0xe5, 0xbd, 0x2e, 0xde, 0x2f, 0xe6, 0x21, 0xf5, 0x66, 0x50, 0xf8, 0x7d, 0xd2, 0x06, 0x93, 0x41, 0x29, 0xb5, 0xce, 0x7b, 0xed, 0x90, 0x75, 0x9c, 0xdd, 0x54, 0xdd, 0x19, 0x68, 0x0f, 0xbd, 0xaa, 0xcf, 0x07, 0xd0, 0xc8, 0xff, 0x75, 0xf1, 0xe4, 0x6a, 0x1c, 0x3d, 0x49, 0x9d, 0x80, 0x78, 0x5b, 0x71, 0x38, 0x03, 0x47, 0x7c, 0xd5, 0x55, 0xc1, 0x13, 0xe0, 0xb9, 0x0b, 0xe6, 0xf8, 0xee, 0xa1, 0xd0, 0xaa, 0xbb, 0x6d, 0x86, 0xa2, 0x5b, 0x6e, 0x40, 0x28, 0xea, 0x50, 0x32, 0xed, 0x40, 0xf4, 0xb7, 0x35, 0xe5, 0xe0, 0x0e, 0xf0, 0x91, 0x57, 0x67, 0xc4, 0x12, 0x3d, 0xbf, 0x7d, 0xc9, 0xd6, 0xbc, 0x1d, 0xd4, 0xb6, 0xbd, 0x74, 0x86, 0xdb, 0x22, 0x56, 0x70, 0xef, 0x4e, 0xb0, 0xd4, 0xd9, 0xad, 0xf0, 0xde, 0x7a, 0xc4, 0xab, 0xcc, 0xbf, 0xfb, 0x85, 0x75, 0x2e, 0xe3, 0xff, 0x99, 0xee, 0x4a, 0xc4, 0x72, 0xbd, 0x60, 0x73, 0xe3, 0x9c, 0x00, 0x05, 0xf1, 0xd3, 0x8d, 0x55, 0x47, 0x10, 0xbb, 0x4b, 0x63, 0x9b, 0xe7, 0x34, 0xef, 0x6e, 0x26, 0x6a, 0xd0, 0xbd, 0xb9, 0x6a, 0x0b, 0x69, 0x13, 0x70, 0x08, 0xf1, 0x05, 0xc5, 0x9c, 0xfc, 0x5f, 0x55, 0x5b, 0xf2, 0x8a, 0x4b, 0x20, 0xd9, 0x8e, 0x2a, 0xd5, 0x53, 0x4d, 0xd3, 0x69, 0x45, 0xd0, 0x56, 0x33, 0xce, 0xbb, 0x51, 0xa7, 0x5a, 0x11, 0x03, 0x24, 0x6b, 0x38, 0xda, 0x0c, 0x7e, 0x73, 0xe3, 0x3a, 0x35, 0x31, 0x0f, 0x69, 0xbf, 0xe6, 0xd0, 0x4f, 0xcd, 0xbf, 0x8a, 0xf3, 0x1a, 0xd7, 0x3e, 0x61, 0x1f, 0x65, 0xe7, 0xa5, 0xcd, 0x25, 0xe7, 0x61, 0x60, 0x9a, 0x5f, 0xda, 0x37, 0xad, 0x4a, 0x7a, 0x34, 0xd7, 0xcf, 0xfa, 0xb6, 0x57, 0xce, 0x36, 0x68, 0x83, 0xf8, 0xbe, 0x63, 0x5a, 0x93, 0x94, 0x23, 0xed, 0x61, 0xde, 0x57, 0x1a, 0x51, 0xb1, 0x83, 0xd9, 0xfa, 0xbc, 0xf1, 0x4d, 0xc3, 0x58, 0xe7, 0x1e, 0x92, 0x1e, 0x8e, 0x14, 0x4f, 0xf3, 0x48, 0x8f, 0xe1, 0x1b, 0xee, 0x03, 0xd2, 0x2e, 0xba, 0xcb, 0xbd, 0x52, 0xaf, 0xa5, 0x18, 0x2c, 0x18, 0xfe, 0x82, 0xf7, 0x69, 0xe9, 0x00, 0x5e, 0x7d, 0xf8, 0x2e, 0xe3, 0xfb, 0x1b, 0xd3, 0x02, 0xd2, 0x26, 0x85, 0x7c, 0x76, 0xf4, 0xeb, 0x7e, 0x5d, 0x1b, 0xb5, 0x73, 0xae, 0xc6, 0x18, 0x5f, 0x8f, 0x77, 0x6c, 0xa2, 0xa9, 0x04, 0x5d, 0x95, 0x4b, 0xda, 0x09, 0x03, 0x83, 0xf1, 0xbd, 0x2a, 0x3b, 0x3e, 0x5b, 0x96, 0xd1, 0xa8, 0x27, 0x79, 0xbe, 0x4b, 0xf0, 0x75, 0xd3, 0x62, 0xd0, 0x97, 0xec, 0xc1, 0xda, 0x90, 0x4e, 0x51, 0xd2, 0xc8, 0xbe, 0x2b, 0x3c, 0xd4, 0xbb, 0x3e, 0xe4, 0xb0, 0xe2, 0x2c, 0x0e, 0x3c, 0x10, 0x6a, 0x2e, 0x3d, 0x03, 0xc7, 0x70, 0x0c, 0xcd, 0x11, 0x83, 0x2d, 0x8a, 0x77, 0x93, 0xed, 0x00, 0xb6, 0xe5, 0x49, 0x9a, 0xe3, 0xcd, 0x92, 0xd2, 0xae, 0xce, 0x2b, 0x3b, 0x03, 0x03, 0xcf, 0xbd, 0x14, 0x0a, 0x08, 0x6a, 0x20, 0x6c, 0x22, 0x09, 0xa4, 0x50, 0x81, 0x9a, 0x5d, 0xfa, 0x3e, 0xf8, 0xae, 0x4d, 0xa7, 0x4e, 0xc0, 0xf0, 0x3a, 0x0a, 0x6f, 0x36, 0xda, 0xda, 0xe3, 0xe1, 0xbd, 0xaa, 0xbc, 0xe5, 0xa5, 0x18, 0x75, 0x80, 0x4f, 0xa3, 0xf5, 0x1d, 0x2a, 0x9f, 0xe8, 0x79, 0xc2, 0xc5, 0xd9, 0x17, 0x24, 0xc1, 0x48, 0xf2, 0xfe, 0x4e, 0x23, 0xfd, 0xa4, 0xdb, 0x20, 0xb8, 0x02, 0x82, 0x1b, 0x10, 0x72, 0xd2, 0x3e, 0x87, 0x3d, 0x67, 0x50, 0xa2, 0x8a, 0xcc, 0xad, 0x18, 0xe8, 0xed, 0x0c, 0xa5, 0x89, 0x67, 0x69, 0xa6, 0x3a, 0x43, 0x0f, 0x3d, 0xa6, 0x32, 0x26, 0x73, 0xae, 0xd7, 0xad, 0xf3, 0x11, 0xc8, 0x6b, 0x66, 0x3c, 0x7e, 0x86, 0x1e, 0xff, 0x2e, 0xca, 0xad, 0xd9, 0x88, 0xed, 0x63, 0x1a, 0xc9, 0x1c, 0xb7, 0x50, 0x3f, 0x93, 0xad, 0x67, 0x60, 0x8d, 0x8a, 0x71, 0x7f, 0x4c, 0x77, 0x04, 0x5e, 0x3f, 0x0b, 0x19, 0xba, 0x0f, 0x2b, 0xb6, 0x96, 0x86, 0x90, 0x27, 0x8d, 0xe7, 0x71, 0x5e, 0x62, 0x4d, 0xaa, 0x56, 0xc6, 0x27, 0xf2, 0x71, 0xbe, 0xda, 0xc9, 0x12, 0x8c, 0x0e, 0x17, 0x9c, 0x0c, 0x2f, 0xf2, 0x89, 0x92, 0x50, 0x27, 0x22, 0x1c, 0x72, 0xb4, 0xb9, 0x4e, 0x74, 0xaf, 0xca, 0x17, 0x18, 0xf7, 0xd8, 0x73, 0x76, 0x81, 0x77, 0x5f, 0x21, 0xce, 0x12, 0xa6, 0x27, 0x9f, 0xee, 0x69, 0x3a, 0x2c, 0x22, 0xec, 0x74, 0x57, 0xa0, 0x01, 0xa6, 0x93, 0x87, 0x16, 0xc2, 0x28, 0xc7, 0x7e, 0xbf, 0xa6, 0x9b, 0x61, 0x4c, 0x1a, 0x73, 0x19, 0x75, 0xfa, 0x50, 0xd8, 0x3a, 0x8a, 0xcd, 0x62, 0xd2, 0x69, 0x23, 0x3a, 0x03, 0xa1, 0x5e, 0xba, 0x0b, 0xe9, 0x51, 0x82, 0x77, 0xe7, 0x9e, 0xcb, 0x9d, 0xa3, 0x5d, 0xfa, 0xfa, 0x53, 0xda, 0x25, 0xdc, 0x37, 0x2e, 0x59, 0x1b, 0x71, 0xc6, 0x3c, 0x01, 0x86, 0x56, 0xed, 0xc1, 0x97, 0x11, 0x37, 0x07, 0x95, 0xfd, 0x03, 0x6c, 0xde, 0x25, 0xe7, 0xaf, 0x4e, 0x7d, 0xbe, 0xbd, 0xbe, 0x60, 0x22, 0xf6, 0x2e, 0xde, 0x9d, 0x2c, 0xab, 0x45, 0x32, 0x60, 0x06, 0x96, 0xd7, 0x4a, 0xc3, 0x7d, 0x2e, 0x03, 0xb2, 0x60, 0x82, 0x0d, 0xd4, 0x74, 0x07, 0x42, 0x47, 0x27, 0xa8, 0x46, 0x9b, 0x47, 0x25, 0xe8, 0x88, 0xb9, 0xc6, 0xec, 0xc2, 0x84, 0x76, 0x47, 0xb4, 0xde, 0x4e, 0x82, 0xa1, 0x24, 0x5b, 0x09, 0xa7, 0x79, 0x3d, 0xe6, 0x10, 0x17, 0xbb, 0xe4, 0xdc, 0x70, 0x5e, 0xb4, 0x2e, 0x57, 0xf9, 0x22, 0x69, 0xb6, 0x91, 0xc5, 0xc1, 0x58, 0x9b, 0xe2, 0xfe, 0x5f, 0x9f, 0x26, 0x2e, 0xd7, 0xb9, 0x27, 0x23, 0x92, 0xab, 0x32, 0xc6, 0x67, 0x75, 0x78, 0x69, 0x24, 0x48, 0x92, 0x90, 0x2c, 0xdd, 0x08, 0x8f, 0xb2, 0x53, 0xab, 0x58, 0x26, 0x33, 0x8d, 0x79, 0x59, 0x03, 0x63, 0xbd, 0xbc, 0x17, 0x22, 0xd6, 0xfd, 0x4f, 0x74, 0x42, 0x33, 0x3d, 0xe1, 0xd5, 0x76, 0x38, 0x17, 0x74, 0xaa, 0x07, 0xd2, 0xc2, 0xd3, 0x59, 0x0a, 0x22, 0xdd, 0xea, 0x84, 0x82, 0x57, 0x77, 0x42, 0xc6, 0xd4, 0x12, 0xc8, 0x50, 0x0d, 0xde, 0x5d, 0x38, 0xd6, 0xbb, 0xc0, 0x89, 0x57, 0xde, 0xd4, 0x00, 0xd8, 0xa7, 0x96, 0x42, 0x01, 0x8e, 0x8a, 0xce, 0x2d, 0xc5, 0x51, 0xcc, 0x64, 0xfe, 0x9a, 0x9c, 0xcc, 0xe9, 0x15, 0x7e, 0xbf, 0x17, 0x0e, 0x6a, 0xba, 0x15, 0xe9, 0x7f, 0x92, 0x69, 0x46, 0x5b, 0xf5, 0x19, 0x8d, 0x34, 0x6e, 0xba, 0x32, 0x0e, 0xf1, 0x1e, 0xe6, 0x54, 0xae, 0x4c, 0x3b, 0xbd, 0x23, 0x9c, 0x96, 0x5d, 0x0c, 0xd2, 0xbe, 0x68, 0x28, 0x4f, 0x4d, 0x7b, 0x6f, 0x03, 0xcb, 0x38, 0xce, 0x54, 0x4d, 0xfa, 0xd3, 0x5d, 0x88, 0x15, 0x1d, 0x74, 0x57, 0x80, 0xe2, 0x2e, 0x85, 0x1c, 0xa6, 0x57, 0xb3, 0xad, 0xd5, 0x95, 0x6f, 0x79, 0x1e, 0x46, 0x08, 0x29, 0x60, 0xe3, 0xcb, 0x42, 0x8b, 0x76, 0x24, 0x0c, 0xac, 0xee, 0xa6, 0x59, 0x8c, 0xf1, 0xee, 0xb9, 0x06, 0xce, 0x35, 0x89, 0x19, 0x82, 0x73, 0x8b, 0xf0, 0x16, 0xc4, 0x8d, 0x89, 0xba, 0xc7, 0x75, 0x99, 0x80, 0x05, 0x3b, 0xc0, 0x1e, 0xca, 0x56, 0xc6, 0x55, 0x23, 0xb5, 0x54, 0x72, 0xd1, 0x04, 0x58, 0xee, 0x43, 0x74, 0xf6, 0x03, 0xdb, 0x70, 0x8d, 0x1e, 0xc1, 0xda, 0x58, 0x10, 0x57, 0x37, 0xe3, 0xde, 0x2f, 0x38, 0x04, 0x13, 0xc9, 0x96, 0x21, 0xe7, 0x66, 0x99, 0x4d, 0x7b, 0xc5, 0x0f, 0x4b, 0x4f, 0xc3, 0xc0, 0xa4, 0x0a, 0xf8, 0x78, 0x12, 0xc2, 0xc0, 0x0f, 0x2c, 0x92, 0x61, 0x92, 0x5f, 0x32, 0x79, 0x77, 0x48, 0x66, 0xbc, 0x5b, 0x30, 0x6c, 0xc0, 0xb4, 0x52, 0xca, 0xa1, 0x7b, 0xea, 0x9b, 0x52, 0x36, 0xbf, 0xab, 0x52, 0x66, 0xd9, 0x69, 0x78, 0x68, 0x52, 0x40, 0x52, 0x30, 0x9e, 0x0d, 0x2f, 0x47, 0xa4, 0x78, 0x92, 0x47, 0x72, 0x11, 0x5c, 0xc4, 0x7b, 0x41, 0xd9, 0x69, 0x69, 0x26, 0x7e, 0x9d, 0x8e, 0xf7, 0xbb, 0xf0, 0x3e, 0x83, 0x52, 0x19, 0xe7, 0x63, 0x18, 0xde, 0x47, 0x3d, 0x24, 0x95, 0x4f, 0xaa, 0x90, 0xbc, 0x78, 0x05, 0x30, 0xe5, 0x5d, 0x78, 0x85, 0x38, 0xdc, 0x2c, 0xad, 0xa3, 0xbb, 0xa1, 0x41, 0x6a, 0xc2, 0x6f, 0xb5, 0x78, 0x2d, 0xc3, 0x6b, 0x03, 0x5e, 0xcd, 0xd8, 0x17, 0x63, 0x05, 0x4c, 0x60, 0x3e, 0xae, 0x4d, 0xf0, 0x10, 0x62, 0x76, 0x15, 0xe3, 0x56, 0x77, 0x32, 0x90, 0xb2, 0x2f, 0xa8, 0x19, 0x41, 0xd3, 0x8a, 0x33, 0x8a, 0x9a, 0xa8, 0xf2, 0x72, 0x70, 0x27, 0xe4, 0x25, 0x4e, 0x19, 0x84, 0xe5, 0x0c, 0x65, 0xd1, 0xdc, 0x1d, 0x90, 0x37, 0x5c, 0x32, 0x4b, 0xb7, 0xc1, 0x61, 0xf2, 0xf6, 0xe8, 0xbe, 0x6e, 0xed, 0x48, 0x8d, 0x64, 0x63, 0x5f, 0x65, 0x7a, 0x7f, 0x58, 0x76, 0x1e, 0x1e, 0x12, 0x3b, 0x0c, 0x6c, 0xa3, 0x3d, 0xe3, 0x83, 0x29, 0xf0, 0xd8, 0xb4, 0x2a, 0xd8, 0xe1, 0x7d, 0x1a, 0x76, 0xe1, 0xbd, 0x77, 0x1a, 0xf7, 0x17, 0x1c, 0x98, 0xc6, 0xfd, 0x05, 0xfb, 0xf8, 0x5d, 0x85, 0x3d, 0xf8, 0xbd, 0x0f, 0x2f, 0xdc, 0x41, 0xe0, 0x10, 0x5e, 0x87, 0x23, 0xd2, 0x34, 0x0f, 0xbc, 0x4a, 0x5f, 0x47, 0xf7, 0xc0, 0xb1, 0x69, 0x01, 0x78, 0x83, 0x9f, 0x0f, 0xc1, 0x9b, 0xf8, 0xfc, 0x0e, 0x3f, 0xbf, 0x03, 0xe7, 0xf1, 0x99, 0x4e, 0x40, 0xb8, 0xed, 0x1f, 0xdc, 0x26, 0xda, 0x5e, 0x28, 0xd6, 0x98, 0x51, 0xec, 0x3b, 0x64, 0x2f, 0xad, 0xce, 0xa0, 0xdb, 0x97, 0x4c, 0xf0, 0xb8, 0x0e, 0xbb, 0x6e, 0xe4, 0xc5, 0x68, 0x86, 0x4d, 0xc0, 0xeb, 0xec, 0x9a, 0x0d, 0x6a, 0x86, 0x23, 0xa8, 0xf3, 0xb3, 0xa2, 0xd5, 0x1b, 0x94, 0xb9, 0x81, 0x9e, 0xb0, 0xc5, 0x1e, 0x88, 0x73, 0xbf, 0xdf, 0x89, 0x71, 0x09, 0x17, 0x1a, 0x84, 0xfd, 0x4b, 0x61, 0xfb, 0x92, 0x21, 0x65, 0x26, 0x5d, 0x7c, 0x8e, 0x53, 0x2d, 0x60, 0xa5, 0xf0, 0xa0, 0x94, 0xb0, 0x95, 0x79, 0xe3, 0xb8, 0x22, 0x0e, 0xd1, 0x74, 0x84, 0x91, 0x10, 0x97, 0xd5, 0x81, 0x94, 0x1c, 0xc2, 0xec, 0x7c, 0xc7, 0x72, 0xe9, 0xe2, 0xec, 0xb3, 0xd2, 0xc7, 0x3a, 0x2d, 0x4c, 0x76, 0x8f, 0x5d, 0xd7, 0x9c, 0xaa, 0x90, 0x86, 0x6c, 0x26, 0x9f, 0xaa, 0x98, 0x42, 0x06, 0xc4, 0x8e, 0x4d, 0x8a, 0x4f, 0xc1, 0x67, 0x75, 0xc1, 0x75, 0xa8, 0x0a, 0xf5, 0x13, 0xcf, 0x51, 0x5c, 0x89, 0x73, 0x14, 0x3d, 0x9f, 0x4e, 0x3e, 0x3d, 0x31, 0x8f, 0x3c, 0x3d, 0x69, 0x91, 0x46, 0x52, 0x1d, 0x5e, 0x2f, 0x9d, 0x9a, 0x60, 0xef, 0x78, 0x13, 0x75, 0x1d, 0xda, 0xac, 0x5b, 0xaf, 0x13, 0xb2, 0xd8, 0xf9, 0x76, 0xe2, 0xbf, 0xd1, 0x9e, 0xe8, 0x94, 0x6d, 0x64, 0x93, 0x6f, 0xb2, 0x47, 0xb6, 0xd1, 0x09, 0x0d, 0xed, 0x00, 0xc2, 0x53, 0x3d, 0xa6, 0x19, 0xd0, 0xf9, 0x0c, 0xa6, 0x3d, 0x5b, 0xc2, 0x86, 0xb9, 0x3b, 0x65, 0x5b, 0x8c, 0x4f, 0xce, 0xe3, 0x94, 0x4d, 0xf2, 0x28, 0x8e, 0x65, 0xd2, 0xc5, 0x59, 0x67, 0xe2, 0xbd, 0x42, 0x16, 0xc0, 0xb3, 0x92, 0xcf, 0xe1, 0xe2, 0xbd, 0x52, 0x48, 0xfa, 0x55, 0x73, 0xb1, 0x1c, 0xb0, 0x90, 0x7f, 0x40, 0xbd, 0x05, 0xfd, 0xc4, 0x89, 0xb8, 0x11, 0x3d, 0x14, 0xe7, 0x20, 0xe6, 0xb8, 0x67, 0x93, 0xe7, 0xa6, 0x85, 0x88, 0x69, 0x5d, 0x7d, 0x19, 0x4b, 0x2f, 0x62, 0x6f, 0xed, 0x58, 0x7b, 0x1a, 0x93, 0xb2, 0xc4, 0x98, 0x20, 0xce, 0x74, 0x75, 0x7b, 0xf2, 0x98, 0x28, 0x1e, 0xf2, 0x0b, 0x46, 0x35, 0xd0, 0x73, 0xca, 0x76, 0x07, 0xc8, 0x4f, 0x75, 0x0e, 0xe5, 0x14, 0xbd, 0x3e, 0x3d, 0xaf, 0x9f, 0x58, 0xe6, 0xdb, 0xa6, 0x81, 0xc9, 0xee, 0x55, 0x16, 0x13, 0x2c, 0x0b, 0xec, 0x94, 0xab, 0x43, 0x59, 0x7c, 0x6a, 0x4e, 0x73, 0x7d, 0x3a, 0x9d, 0x30, 0x60, 0x8f, 0xf1, 0x8c, 0xc9, 0x5d, 0x26, 0x57, 0x6b, 0x97, 0x72, 0x1b, 0xc1, 0x8c, 0xd8, 0x1c, 0xe9, 0x8f, 0x0e, 0x2a, 0x73, 0x19, 0x87, 0x4b, 0x3a, 0x4d, 0x35, 0xeb, 0xe7, 0x24, 0xbc, 0x5e, 0x0b, 0xa9, 0xef, 0x92, 0x72, 0x9e, 0x17, 0xca, 0xd6, 0xcf, 0xeb, 0x63, 0x79, 0x2f, 0xc1, 0xbc, 0xe7, 0xe9, 0x54, 0x4f, 0x66, 0xae, 0x53, 0x9e, 0xa7, 0xcc, 0xc5, 0xb9, 0x9a, 0xc8, 0xef, 0x2d, 0x97, 0xf0, 0x20, 0xcd, 0x3a, 0xfb, 0xd7, 0xd4, 0xb4, 0x46, 0xcf, 0x4f, 0x8e, 0xe7, 0x97, 0x8d, 0xf9, 0xd5, 0xe8, 0x75, 0xad, 0xd1, 0x2e, 0x70, 0x5d, 0x2f, 0x71, 0x5d, 0xa9, 0xc6, 0x99, 0x7a, 0x8d, 0x2f, 0x8c, 0xa8, 0xf1, 0x29, 0xdd, 0x2e, 0xc0, 0xf5, 0x7a, 0x63, 0xa1, 0x5e, 0xc6, 0xa8, 0x58, 0x19, 0x43, 0x7b, 0xb0, 0x8c, 0x85, 0x7a, 0x19, 0x0b, 0x3f, 0x6d, 0x7f, 0xd0, 0x09, 0x14, 0xcd, 0x67, 0xc2, 0x2b, 0x6c, 0x18, 0x17, 0x73, 0x56, 0xf5, 0x9c, 0x53, 0xe2, 0x39, 0x2f, 0xc0, 0x9c, 0x55, 0x3d, 0x67, 0x95, 0xf3, 0x34, 0x5f, 0xef, 0x34, 0x0a, 0xb1, 0xdb, 0x0b, 0x76, 0x2c, 0x47, 0x9c, 0x47, 0xe9, 0xf2, 0x4c, 0x03, 0x37, 0x99, 0x61, 0x40, 0xd9, 0xda, 0x31, 0x75, 0x74, 0x13, 0x3e, 0xbb, 0xf0, 0xf2, 0xc1, 0x80, 0xc5, 0x2e, 0x84, 0x3a, 0xea, 0x57, 0x46, 0x16, 0x35, 0xdd, 0xbd, 0x74, 0x45, 0xd3, 0x08, 0xa9, 0xa6, 0x6b, 0xc2, 0x95, 0x45, 0x8d, 0x4b, 0xc3, 0x8b, 0xa6, 0x35, 0x4e, 0x2f, 0x5a, 0xce, 0xaa, 0x77, 0xff, 0xe7, 0xc5, 0x9c, 0x06, 0xc6, 0x67, 0xc2, 0x40, 0xc6, 0x05, 0xbc, 0x70, 0xb7, 0xcb, 0x38, 0x07, 0x03, 0x9f, 0x8f, 0xc2, 0x40, 0x8e, 0x07, 0xef, 0x7b, 0x60, 0x20, 0xd3, 0x86, 0xf7, 0xc3, 0x78, 0x5f, 0x08, 0x03, 0x9f, 0xa9, 0xc3, 0xe7, 0x53, 0x30, 0x30, 0x11, 0xbf, 0x4d, 0xac, 0xc1, 0x2b, 0x02, 0x03, 0x13, 0x4c, 0x78, 0xad, 0xc6, 0x76, 0x22, 0xc6, 0xf7, 0xb9, 0x8d, 0x78, 0xc7, 0xbc, 0x10, 0xbb, 0x1a, 0x50, 0x54, 0xfc, 0xde, 0x85, 0xd7, 0x0e, 0x4c, 0xb3, 0x43, 0x94, 0xf3, 0xb9, 0x17, 0x74, 0x8d, 0xb9, 0xc7, 0xb1, 0x2f, 0xf6, 0xea, 0x65, 0xfb, 0x4b, 0x57, 0x34, 0x85, 0x96, 0x86, 0xef, 0x69, 0x5e, 0xda, 0x14, 0x56, 0x6a, 0x57, 0x2c, 0x6a, 0xae, 0x9b, 0xa1, 0x2c, 0xae, 0xfb, 0xf2, 0xe4, 0x88, 0xd2, 0x18, 0x0a, 0x7f, 0x79, 0x72, 0x9d, 0x12, 0x69, 0x5e, 0x51, 0x47, 0xf7, 0xbb, 0x97, 0xae, 0xaa, 0xff, 0xf2, 0xe4, 0xfc, 0xa2, 0x95, 0x4a, 0xcb, 0x77, 0x22, 0xf4, 0x54, 0xb0, 0x32, 0x0d, 0x44, 0x20, 0x45, 0xaa, 0x6f, 0xa5, 0x7b, 0x53, 0xfd, 0x3f, 0xd3, 0xad, 0xbe, 0x89, 0x92, 0xa4, 0xc1, 0xb4, 0x99, 0xca, 0x62, 0x3d, 0xfb, 0xfa, 0x3a, 0x97, 0x82, 0x99, 0x4e, 0x53, 0x48, 0x1e, 0x28, 0x56, 0xe6, 0xa2, 0x16, 0xec, 0x69, 0x25, 0xb4, 0x68, 0x69, 0x43, 0x7d, 0xdd, 0xa4, 0x34, 0x10, 0x71, 0x17, 0x2f, 0x59, 0xb4, 0xb4, 0x69, 0xd8, 0x8b, 0x52, 0xb7, 0xa2, 0xa9, 0x3e, 0x2d, 0x69, 0xcc, 0x1a, 0xeb, 0x1b, 0x57, 0xe0, 0x90, 0xcd, 0xf1, 0x06, 0x4b, 0xe6, 0x28, 0x1e, 0xaa, 0x94, 0x8b, 0xeb, 0xa7, 0xd0, 0x63, 0x1a, 0x2c, 0xaa, 0xab, 0xa3, 0xd6, 0x34, 0x2f, 0x6a, 0x14, 0x2d, 0xba, 0x5b, 0x54, 0xb4, 0x76, 0x69, 0xcb, 0xdd, 0x5f, 0x9e, 0x2c, 0xbe, 0x37, 0x7f, 0x79, 0x72, 0xc3, 0x4a, 0xbd, 0x4d, 0xf8, 0xd0, 0xb8, 0x68, 0x65, 0xec, 0x39, 0x0d, 0xe2, 0xe9, 0x94, 0x45, 0x2d, 0xca, 0x88, 0xcc, 0x31, 0xa8, 0xa5, 0x59, 0x2f, 0xa6, 0x7c, 0xd1, 0xdd, 0x2d, 0xca, 0x1c, 0x51, 0x95, 0x44, 0x59, 0x7a, 0x65, 0xcb, 0x57, 0xdc, 0xd3, 0x54, 0xa7, 0x67, 0x33, 0x39, 0x32, 0xe3, 0xc6, 0xbd, 0x79, 0x77, 0x7d, 0xf3, 0xd2, 0x45, 0x0d, 0xe2, 0xb9, 0x6e, 0xe9, 0x22, 0x8c, 0x85, 0x1d, 0x54, 0xb7, 0xe2, 0xee, 0xf8, 0xc4, 0x2c, 0x69, 0x68, 0x58, 0xb1, 0xd8, 0x4b, 0x19, 0x61, 0x59, 0x30, 0x6f, 0x49, 0xbd, 0x12, 0xba, 0xa7, 0x69, 0x31, 0xf7, 0xdc, 0xe4, 0xbb, 0x1d, 0x53, 0x95, 0xa5, 0x77, 0x2b, 0x4d, 0x2b, 0x5a, 0x94, 0x24, 0xb1, 0xae, 0xbc, 0x34, 0x91, 0xa8, 0x2c, 0xd6, 0x61, 0x7f, 0x47, 0xc2, 0xf2, 0xe6, 0xfa, 0xfa, 0xbf, 0xb7, 0x30, 0x4a, 0xf3, 0x8f, 0x94, 0x35, 0x67, 0xd1, 0xf2, 0x7a, 0xdf, 0x8a, 0xbb, 0xab, 0x56, 0xd4, 0xd5, 0x2b, 0x53, 0x26, 0xdf, 0x3d, 0x85, 0x7f, 0xe2, 0x4b, 0x4a, 0xc2, 0x19, 0x7b, 0x22, 0x49, 0x06, 0x6b, 0xd2, 0xdf, 0x94, 0xc5, 0x1a, 0xb8, 0xe9, 0xe9, 0xbf, 0x21, 0x8b, 0x35, 0x70, 0xd3, 0xe3, 0x9f, 0x56, 0x16, 0x6b, 0x72, 0x15, 0xd8, 0x3e, 0x85, 0x3c, 0xd6, 0xc0, 0x4d, 0xad, 0x37, 0x94, 0xc7, 0x1a, 0xb8, 0x69, 0xdd, 0x08, 0x79, 0xac, 0x81, 0x8c, 0xc3, 0x9f, 0x20, 0x8f, 0x35, 0x70, 0xd3, 0xf7, 0x47, 0xc8, 0x63, 0x0d, 0xdc, 0xb4, 0xe9, 0x1a, 0x79, 0xac, 0x81, 0x9b, 0x56, 0xff, 0xef, 0xc8, 0x63, 0x45, 0x7c, 0xac, 0xcf, 0x25, 0xbb, 0x9a, 0xc0, 0x16, 0xb3, 0xb2, 0x46, 0xe1, 0x82, 0xf7, 0x6a, 0x06, 0xad, 0x2f, 0x64, 0x8a, 0x64, 0x90, 0xc4, 0x84, 0x6a, 0x8c, 0x8c, 0x23, 0xf9, 0x51, 0xdd, 0x5b, 0xd7, 0x39, 0xf6, 0x19, 0x68, 0xb2, 0x93, 0xec, 0xf1, 0x54, 0xb0, 0x4c, 0x00, 0x79, 0x94, 0xd6, 0x67, 0x9b, 0x0a, 0x36, 0xb2, 0xec, 0x83, 0x21, 0xe3, 0x90, 0x20, 0x9d, 0x8a, 0xbb, 0x2d, 0xb8, 0x47, 0x53, 0x2d, 0x2d, 0xd3, 0x05, 0x3d, 0xb1, 0x1a, 0x26, 0xe6, 0xe2, 0x68, 0x28, 0xaf, 0x90, 0xe5, 0x83, 0x6c, 0xf3, 0x28, 0xb2, 0xf2, 0x0d, 0xbb, 0x91, 0x26, 0x41, 0x58, 0x44, 0xba, 0x26, 0x27, 0x03, 0x81, 0x26, 0x78, 0x2c, 0x64, 0xfc, 0x72, 0x1b, 0x78, 0xe0, 0xb1, 0x82, 0x3c, 0x78, 0x6c, 0x86, 0xec, 0x2b, 0xcb, 0x97, 0xe6, 0x7a, 0xfa, 0xbd, 0x2f, 0x7b, 0x5a, 0x61, 0xfa, 0xa8, 0x36, 0x28, 0x26, 0xce, 0xa1, 0xe6, 0x4e, 0xb9, 0x43, 0xf2, 0x86, 0xdd, 0x46, 0xce, 0xfd, 0x6e, 0x91, 0xfb, 0x89, 0x4e, 0xda, 0xe1, 0xcd, 0xe4, 0x0f, 0x43, 0x6b, 0x02, 0xd9, 0xf9, 0xf6, 0x6c, 0x3a, 0xd5, 0x9d, 0x52, 0x0a, 0xca, 0x97, 0x30, 0x57, 0x70, 0x7c, 0xc9, 0x0b, 0x4e, 0xc8, 0x05, 0x19, 0xd2, 0xdf, 0xf0, 0x7e, 0xb9, 0x0c, 0x1e, 0x53, 0x7c, 0x91, 0xef, 0x96, 0x83, 0x35, 0x85, 0x64, 0xeb, 0x4b, 0x07, 0xb4, 0x34, 0xd6, 0x44, 0x1a, 0x8d, 0x98, 0xf5, 0x72, 0xb0, 0xcd, 0xed, 0xf2, 0x93, 0x07, 0xf5, 0x14, 0xce, 0x7f, 0x73, 0xdc, 0x57, 0xa7, 0x59, 0x05, 0x69, 0xaf, 0xd7, 0xa8, 0xc8, 0x73, 0xf9, 0x9c, 0xcc, 0xe1, 0x9b, 0x51, 0x66, 0x9b, 0xa5, 0xb4, 0xc1, 0xbf, 0x69, 0x5a, 0xab, 0xe2, 0x2f, 0x0d, 0x18, 0x43, 0x13, 0xcd, 0x1d, 0x90, 0xaa, 0xe1, 0xec, 0x90, 0xbe, 0x2f, 0x38, 0x45, 0xd2, 0xb6, 0x23, 0x83, 0x50, 0x0d, 0x64, 0x73, 0xf1, 0x7d, 0x00, 0x87, 0xc9, 0xeb, 0xf3, 0xfb, 0xde, 0xad, 0x24, 0xbb, 0x35, 0x98, 0x57, 0x8b, 0x28, 0xfd, 0xdd, 0x0a, 0x67, 0x8a, 0xb7, 0xcc, 0x5f, 0x66, 0x19, 0x55, 0x8e, 0xf4, 0x72, 0x91, 0x54, 0xfa, 0xb1, 0x1f, 0xb0, 0xaf, 0xa6, 0xc2, 0xba, 0x6c, 0x90, 0x0d, 0x90, 0x7a, 0x8b, 0x0f, 0x8a, 0x56, 0xa6, 0x1e, 0x8a, 0x5a, 0x7d, 0xa3, 0x53, 0x31, 0xc7, 0x22, 0x2c, 0xe3, 0x0e, 0x2c, 0x83, 0x78, 0x93, 0xc5, 0x7d, 0x64, 0x21, 0xca, 0xae, 0x66, 0x99, 0x3b, 0x41, 0x61, 0x5b, 0x60, 0x9d, 0xa0, 0x72, 0xb9, 0x19, 0x8a, 0xac, 0xda, 0xf5, 0xda, 0x5c, 0x52, 0xe4, 0x6c, 0x37, 0x14, 0x35, 0x03, 0xd2, 0x59, 0x45, 0xee, 0x32, 0xb6, 0x95, 0x93, 0xaf, 0xe6, 0x07, 0x4b, 0x8c, 0x51, 0xed, 0x32, 0xc4, 0xcb, 0x0c, 0x60, 0x89, 0x21, 0xaf, 0x6e, 0xdd, 0xc0, 0xb7, 0xef, 0x19, 0x28, 0x5c, 0x7c, 0x82, 0x3c, 0x26, 0x92, 0x75, 0x03, 0x80, 0xb9, 0x06, 0xa4, 0x45, 0x8a, 0xb6, 0xfc, 0xc2, 0x89, 0x83, 0x9b, 0x37, 0xfa, 0xa6, 0x51, 0xa1, 0x4c, 0x3d, 0xa6, 0x12, 0x6c, 0xc7, 0x9d, 0x5c, 0x0b, 0x91, 0xbd, 0xb9, 0x87, 0xc9, 0xfe, 0xa0, 0x08, 0xaf, 0x05, 0xd8, 0xe4, 0x30, 0x5b, 0x47, 0xa9, 0x46, 0xfc, 0xc5, 0xd0, 0x19, 0x63, 0x69, 0x2c, 0xc4, 0x08, 0x7c, 0xa9, 0x04, 0x1c, 0xc2, 0xb2, 0xc8, 0x97, 0x3c, 0xe0, 0xc4, 0x91, 0xb8, 0xa3, 0x1c, 0xfa, 0xd6, 0x96, 0x0e, 0x5c, 0x5d, 0xf3, 0xb7, 0x46, 0x41, 0xc9, 0x05, 0x25, 0x2b, 0x17, 0x26, 0x95, 0xa7, 0xb0, 0x07, 0x75, 0xa0, 0x3c, 0xde, 0xf5, 0xff, 0xa1, 0x2f, 0x92, 0xfa, 0x62, 0x54, 0xb5, 0x28, 0x29, 0x3d, 0xed, 0xd2, 0x79, 0x20, 0x8f, 0xf1, 0x58, 0x63, 0xac, 0x17, 0xeb, 0x2a, 0xd5, 0x9e, 0x46, 0x2a, 0xc1, 0x67, 0xec, 0x24, 0x7b, 0x28, 0xcf, 0xfe, 0xb2, 0x16, 0x86, 0x36, 0x04, 0x8d, 0x66, 0x23, 0xc8, 0x21, 0x18, 0xf2, 0x39, 0xcc, 0x9c, 0xfb, 0x4e, 0x91, 0xbb, 0x25, 0x17, 0xd2, 0x6b, 0xba, 0x4d, 0x00, 0xc6, 0x50, 0x06, 0xc1, 0x9d, 0xcf, 0x78, 0x90, 0x82, 0xf5, 0x45, 0xc6, 0x37, 0x83, 0x90, 0x1b, 0xd2, 0x39, 0x96, 0x99, 0xba, 0x4d, 0xcb, 0x99, 0xb6, 0x2a, 0x05, 0xd7, 0x4e, 0x91, 0x43, 0x72, 0xc8, 0x3e, 0x0f, 0x70, 0x4e, 0xbf, 0x10, 0x39, 0xd5, 0x74, 0xb7, 0x42, 0xa0, 0x53, 0x78, 0xe8, 0xd5, 0xfa, 0xed, 0x10, 0x9e, 0x17, 0xf0, 0x85, 0xb3, 0x95, 0x36, 0xda, 0x74, 0xad, 0xa5, 0x1c, 0xfa, 0x90, 0x78, 0x0b, 0x78, 0x42, 0x56, 0x9c, 0x43, 0xa7, 0x13, 0xe1, 0x18, 0x92, 0xa6, 0x88, 0xe7, 0x5d, 0x6a, 0xce, 0xb0, 0x6f, 0x2f, 0x20, 0x1e, 0xbe, 0x43, 0xff, 0xf6, 0x8e, 0xfa, 0x03, 0x2e, 0xf1, 0x15, 0xbd, 0x67, 0x96, 0x91, 0x3e, 0x7a, 0x3e, 0xd6, 0x85, 0x5b, 0x20, 0x85, 0x01, 0x4e, 0x10, 0x8f, 0xd4, 0x23, 0x37, 0xcb, 0xec, 0x3d, 0xec, 0x15, 0xa5, 0x8d, 0xe4, 0xe1, 0xad, 0x6d, 0xdf, 0x25, 0xc8, 0x69, 0xf1, 0x7b, 0xc8, 0xe3, 0x87, 0xec, 0x89, 0xd9, 0x39, 0xb0, 0x43, 0x23, 0xc0, 0xce, 0x70, 0x21, 0x59, 0x56, 0x18, 0x35, 0xaa, 0xc5, 0x21, 0x62, 0x97, 0x5e, 0xc1, 0x12, 0x4e, 0xba, 0x96, 0x11, 0x84, 0xb8, 0xba, 0xcd, 0x9d, 0xe2, 0x2e, 0xa6, 0x50, 0x2e, 0xf7, 0x4f, 0x89, 0x75, 0x61, 0xe7, 0x50, 0x27, 0xe7, 0xe7, 0x48, 0x31, 0xae, 0xd1, 0x2e, 0x00, 0x28, 0x3e, 0x6b, 0x29, 0x95, 0xc2, 0xf9, 0x8f, 0x22, 0x7b, 0x4d, 0x2b, 0xcc, 0xe6, 0x35, 0x12, 0x49, 0xd9, 0x9b, 0xed, 0x06, 0xf5, 0xb8, 0xb9, 0x53, 0x48, 0xe7, 0x3b, 0x38, 0xed, 0xf6, 0x4e, 0xc5, 0xa0, 0x97, 0x3c, 0x51, 0x29, 0x1d, 0x51, 0xaa, 0x41, 0x9f, 0x03, 0x49, 0x25, 0xd2, 0xfb, 0xb8, 0xd1, 0x15, 0x82, 0x87, 0xbb, 0x95, 0xce, 0xd4, 0x6b, 0xba, 0xed, 0x5c, 0xfe, 0x4a, 0xc9, 0xef, 0xc3, 0x99, 0x78, 0xc6, 0x94, 0x0b, 0xa3, 0xc8, 0xcf, 0x38, 0xbc, 0x89, 0x50, 0x0a, 0xc7, 0xb5, 0x79, 0x74, 0x5f, 0x3b, 0xc2, 0x9b, 0x7e, 0x67, 0x2e, 0xd8, 0x9c, 0xcb, 0x41, 0xf9, 0xe9, 0x20, 0xc1, 0x9d, 0xc5, 0xad, 0x99, 0xb9, 0x90, 0x61, 0x29, 0x86, 0x9b, 0xfa, 0x3a, 0xc2, 0x2d, 0xb2, 0x0c, 0x37, 0xb5, 0x41, 0x8e, 0x2c, 0x20, 0xcb, 0xb8, 0x1c, 0xd2, 0xab, 0x34, 0xcb, 0x30, 0x16, 0xe7, 0xf2, 0x66, 0x8b, 0xfc, 0x55, 0x30, 0xe3, 0xcc, 0xa8, 0x35, 0x7d, 0x75, 0x9d, 0xd3, 0xf0, 0xc1, 0x53, 0x6a, 0x39, 0x7e, 0x31, 0x2d, 0x36, 0x3b, 0x8d, 0xdf, 0x5c, 0x7b, 0x76, 0x8e, 0xbf, 0xcc, 0x5b, 0xa6, 0x16, 0x2a, 0x73, 0x4a, 0xff, 0x5c, 0x03, 0x11, 0x93, 0xde, 0xea, 0x94, 0xaa, 0x7b, 0x6c, 0x64, 0x39, 0x12, 0x98, 0x3a, 0x1e, 0x18, 0x37, 0x95, 0x6d, 0x8e, 0x59, 0x9c, 0xb2, 0x9a, 0xd6, 0x02, 0x2e, 0x6c, 0xad, 0x71, 0x94, 0x6a, 0x6a, 0xc9, 0xa4, 0x27, 0xc3, 0xa8, 0xc0, 0xda, 0xb0, 0x6b, 0xff, 0x93, 0x60, 0xab, 0xb5, 0x33, 0x97, 0x4e, 0xa4, 0xf0, 0x57, 0x6d, 0x55, 0x46, 0x59, 0x8d, 0x98, 0x2f, 0xf6, 0xc8, 0xb8, 0x48, 0xac, 0x47, 0x28, 0x17, 0x5c, 0x49, 0x26, 0x48, 0xb7, 0xcf, 0x25, 0x0b, 0xed, 0x5a, 0x26, 0xc7, 0x6e, 0x8b, 0xcd, 0x3d, 0xe2, 0xd9, 0x09, 0xde, 0xac, 0xf0, 0xdc, 0xa1, 0x98, 0x84, 0xe5, 0xc0, 0xb0, 0x31, 0xbf, 0x58, 0x22, 0x3b, 0x25, 0xb2, 0xcc, 0x6b, 0xb4, 0xec, 0x4f, 0x26, 0x28, 0xbb, 0xb0, 0x03, 0x32, 0x32, 0x8e, 0xbc, 0x64, 0xb1, 0x9c, 0x1e, 0x2d, 0x83, 0x76, 0x21, 0x2a, 0xd9, 0xbe, 0x15, 0xd3, 0x33, 0x71, 0xe8, 0x7c, 0x53, 0x3b, 0x51, 0xc1, 0x81, 0x16, 0x1c, 0x53, 0x5d, 0xe7, 0xf1, 0xd1, 0x72, 0xc8, 0xea, 0x0b, 0x76, 0x44, 0x2c, 0xbd, 0x1d, 0xa1, 0x33, 0xba, 0x7e, 0xd5, 0xa3, 0xe5, 0x19, 0x42, 0xa7, 0x04, 0x77, 0x88, 0x0b, 0x4c, 0x3b, 0x9b, 0x6c, 0x15, 0x15, 0xef, 0x83, 0x05, 0x77, 0x5e, 0xb3, 0xdb, 0x84, 0x14, 0x88, 0x90, 0xa7, 0x74, 0xc2, 0x78, 0x1c, 0x87, 0x37, 0x71, 0x8f, 0xca, 0x9c, 0xeb, 0x31, 0x7b, 0xb4, 0xab, 0xd8, 0xbb, 0xfd, 0x6c, 0xa9, 0xc3, 0xd2, 0x7c, 0x47, 0xb9, 0xd4, 0xd7, 0x4e, 0x1a, 0xa7, 0xac, 0x39, 0x42, 0xfb, 0xc3, 0xde, 0xd6, 0x31, 0xb3, 0x3e, 0x04, 0x85, 0xb8, 0x99, 0x13, 0x7c, 0xa4, 0x0f, 0xfc, 0x8d, 0x06, 0xcc, 0x0f, 0xa9, 0x3b, 0xe2, 0x62, 0x92, 0x07, 0x54, 0xcc, 0x7b, 0x0c, 0xcb, 0x15, 0x65, 0x0b, 0xab, 0x31, 0x73, 0x53, 0x42, 0x6f, 0x66, 0x38, 0x69, 0xd7, 0xb7, 0x48, 0xad, 0x77, 0x94, 0xa7, 0xbc, 0x18, 0x65, 0x9f, 0x7b, 0xd1, 0x50, 0x96, 0xc9, 0x89, 0x33, 0x22, 0x23, 0x9c, 0xde, 0x9c, 0x7a, 0x30, 0xaa, 0x14, 0xd3, 0x4c, 0xfc, 0xe3, 0x0e, 0x75, 0x82, 0x2c, 0x41, 0x2a, 0xe2, 0xcc, 0x58, 0x5e, 0x40, 0x0a, 0x9b, 0x5b, 0x21, 0x4b, 0x22, 0x1b, 0x30, 0x51, 0x78, 0x6f, 0x07, 0x52, 0xa9, 0xb6, 0xc9, 0x5e, 0x50, 0x78, 0x57, 0x9d, 0xe0, 0x96, 0xdc, 0x4e, 0xc8, 0x72, 0x03, 0xd7, 0x94, 0x76, 0x38, 0x27, 0xef, 0x70, 0x32, 0xf7, 0xfc, 0xfd, 0xf1, 0x99, 0x99, 0x13, 0xb7, 0xf6, 0x4c, 0x5e, 0x44, 0x2d, 0xc4, 0x13, 0xfb, 0x74, 0x63, 0x60, 0x91, 0xde, 0x37, 0x65, 0x46, 0x71, 0x1c, 0xda, 0x45, 0xff, 0x5b, 0x3d, 0xc1, 0xf5, 0x64, 0x91, 0x99, 0xfc, 0x34, 0x64, 0xb4, 0x93, 0x1c, 0xc4, 0x91, 0xbe, 0xfc, 0x76, 0x1d, 0x27, 0x41, 0x4a, 0xb5, 0xe4, 0x0c, 0x04, 0x26, 0xfb, 0x21, 0xe8, 0xdd, 0x09, 0x55, 0xf8, 0x5c, 0x85, 0xcf, 0x01, 0xbc, 0x17, 0xe3, 0xdd, 0x87, 0x61, 0x1e, 0x7c, 0xf6, 0xe0, 0x73, 0xf1, 0xac, 0x33, 0x50, 0x43, 0x36, 0xaa, 0xbc, 0xff, 0x29, 0x7c, 0xbe, 0x7d, 0x73, 0xbb, 0x32, 0x5b, 0x9f, 0x47, 0xaf, 0x0a, 0xd8, 0xc2, 0xd0, 0xe4, 0x79, 0x1a, 0x1b, 0x96, 0x86, 0x04, 0xfd, 0x34, 0x9b, 0x6c, 0x12, 0xf8, 0xed, 0x15, 0xb6, 0x2a, 0xa1, 0x49, 0x25, 0x29, 0x3c, 0x07, 0x7f, 0x8d, 0xd8, 0x14, 0xe3, 0x0b, 0x57, 0x8f, 0xdb, 0x70, 0x9f, 0x81, 0x2e, 0x84, 0x3b, 0x01, 0x1a, 0x97, 0xbb, 0xb2, 0x55, 0x9b, 0xb5, 0x01, 0x1c, 0xaf, 0xbd, 0xe4, 0xff, 0xf6, 0x76, 0x09, 0xe9, 0x31, 0x0b, 0x5e, 0x0e, 0xb6, 0x40, 0x27, 0x91, 0x2e, 0x36, 0x73, 0x63, 0x4f, 0x28, 0x5e, 0x9b, 0x25, 0x74, 0x3c, 0x92, 0xa9, 0x6b, 0x92, 0x2f, 0x13, 0x98, 0x87, 0x53, 0xf0, 0x6a, 0x9f, 0xcf, 0x9d, 0x0d, 0x69, 0x9f, 0x6b, 0xa3, 0x73, 0xd4, 0xcf, 0xf9, 0x60, 0xf4, 0xed, 0xa5, 0x90, 0x9e, 0x5b, 0x09, 0x16, 0x3d, 0x56, 0x1b, 0xb5, 0xd8, 0x3a, 0x47, 0xbc, 0x0d, 0x5d, 0xd4, 0x43, 0x5b, 0x5b, 0x25, 0xb2, 0x7d, 0x6f, 0x35, 0xbb, 0x3c, 0x24, 0x91, 0x8c, 0xf9, 0x2c, 0x31, 0xa5, 0x60, 0x7d, 0xef, 0x42, 0xda, 0x1f, 0x4b, 0xcf, 0xca, 0xef, 0x02, 0x4b, 0x0a, 0x49, 0x55, 0xcf, 0x23, 0xee, 0x8a, 0x68, 0xf7, 0x3c, 0x96, 0xb6, 0xf5, 0x50, 0xf8, 0x0c, 0x8f, 0x88, 0xc7, 0xfe, 0x92, 0x66, 0x2b, 0x63, 0xf5, 0x18, 0xec, 0x7f, 0xf3, 0x38, 0x04, 0x53, 0xfc, 0x9d, 0xde, 0x2f, 0xe4, 0x83, 0x75, 0x0c, 0xf3, 0xa0, 0x82, 0xd6, 0x58, 0xcf, 0x55, 0xb5, 0xb2, 0x0f, 0x26, 0xab, 0x57, 0xaf, 0x4d, 0x2d, 0xbd, 0x91, 0x6f, 0xbc, 0xb6, 0x9c, 0x84, 0x2c, 0xa6, 0xad, 0x2a, 0x9c, 0x4d, 0x1a, 0x92, 0x25, 0xe7, 0xa1, 0x18, 0x63, 0x0a, 0x2c, 0x4b, 0xec, 0x08, 0x1d, 0x09, 0xaf, 0xad, 0x71, 0xab, 0x01, 0x34, 0x8f, 0x7e, 0xc7, 0xbf, 0xff, 0x23, 0x66, 0x93, 0x6e, 0x3b, 0x99, 0x70, 0x45, 0x86, 0x77, 0x19, 0x13, 0x63, 0xe1, 0x11, 0x31, 0x46, 0x05, 0x36, 0xbf, 0xc3, 0x44, 0xb6, 0x23, 0xec, 0x55, 0x54, 0x0e, 0xc9, 0x04, 0xd8, 0x9a, 0xa0, 0x58, 0x95, 0xf5, 0x73, 0x2a, 0x9b, 0xea, 0x60, 0x7f, 0xe7, 0x69, 0x3c, 0x83, 0x33, 0xf7, 0xb4, 0x87, 0xc8, 0xff, 0x79, 0x67, 0x38, 0x83, 0x6d, 0xe4, 0x8c, 0xdb, 0xdb, 0x1e, 0x36, 0xd9, 0x3c, 0x4a, 0x46, 0xe8, 0x8d, 0x07, 0x5f, 0x66, 0x39, 0x87, 0x0e, 0xc6, 0x0e, 0x73, 0x44, 0x5d, 0x32, 0xca, 0xf8, 0x37, 0x98, 0x5c, 0x97, 0x84, 0x9e, 0x68, 0xc4, 0xa7, 0xb7, 0x27, 0x2f, 0x56, 0xf7, 0x8c, 0xef, 0xf0, 0xef, 0x86, 0xe1, 0xf1, 0xad, 0xfe, 0x66, 0xcb, 0xee, 0x68, 0x9d, 0x1c, 0xb1, 0x60, 0x2f, 0xb8, 0xf4, 0x99, 0xd3, 0x13, 0xb1, 0x08, 0x5c, 0x53, 0x9c, 0x86, 0xdc, 0x31, 0xd3, 0xee, 0xd7, 0xf5, 0x77, 0x41, 0xaa, 0x64, 0x0f, 0xc9, 0x2e, 0xb7, 0xc5, 0x3d, 0x9e, 0xf3, 0x7b, 0x56, 0xe4, 0x37, 0xfb, 0x2c, 0x2e, 0xbb, 0x9b, 0x83, 0x6b, 0xdf, 0xc0, 0x7f, 0xf7, 0xf8, 0x32, 0x3a, 0xb3, 0xa9, 0xab, 0xda, 0x9c, 0x07, 0x76, 0x58, 0xd0, 0x19, 0x19, 0x7c, 0x31, 0x4a, 0x1e, 0xe2, 0x14, 0xc6, 0xe5, 0xc3, 0x69, 0x6e, 0xa8, 0x42, 0x18, 0x68, 0x03, 0x92, 0xf5, 0xb6, 0x96, 0x95, 0xfc, 0xa9, 0xa8, 0xb8, 0xe4, 0x82, 0x23, 0x45, 0x31, 0x89, 0x39, 0x87, 0xd0, 0x6a, 0x89, 0x98, 0x05, 0xfa, 0x09, 0xc1, 0x89, 0x8a, 0x33, 0xe0, 0x2a, 0xc5, 0x95, 0x83, 0xd8, 0x51, 0xbe, 0x6b, 0xf4, 0x89, 0xb5, 0xca, 0x1c, 0x65, 0x94, 0xd3, 0xe7, 0x6a, 0x14, 0x75, 0x3d, 0xb6, 0xee, 0xd4, 0x7d, 0x8a, 0xf1, 0x54, 0x57, 0xf3, 0xe0, 0xe1, 0x76, 0x57, 0x79, 0x70, 0x93, 0xb5, 0xea, 0x81, 0x43, 0xaa, 0xc9, 0x3a, 0x3e, 0xe3, 0x42, 0x36, 0x04, 0xbb, 0x9e, 0xef, 0x6a, 0xba, 0x44, 0xfe, 0xc6, 0x4a, 0x69, 0xfe, 0x8c, 0xc6, 0x2f, 0x16, 0x92, 0x00, 0x71, 0xdc, 0xec, 0x2c, 0x09, 0xb6, 0x4f, 0xb8, 0x80, 0xcb, 0xb3, 0x6b, 0x4f, 0x57, 0xd3, 0x39, 0xf3, 0xbd, 0x84, 0x95, 0xae, 0x30, 0xac, 0x86, 0xf2, 0x54, 0xa5, 0xdc, 0x72, 0xaf, 0x77, 0xfa, 0x4a, 0x28, 0x79, 0x1f, 0x71, 0x6c, 0xd2, 0xcb, 0x1b, 0x6a, 0x32, 0x66, 0xc8, 0x41, 0x9c, 0x4f, 0xd5, 0xbf, 0xb0, 0xb4, 0xe7, 0xb7, 0x41, 0x2c, 0xd4, 0xa0, 0x78, 0x83, 0x5d, 0xde, 0xdb, 0xba, 0xc0, 0xf1, 0x24, 0x98, 0xa6, 0x96, 0x82, 0x01, 0xb1, 0xa8, 0xfc, 0x53, 0xeb, 0xa7, 0x96, 0xe0, 0xdb, 0x72, 0xdc, 0x8a, 0xcc, 0x56, 0xf3, 0xa9, 0xf5, 0x93, 0x4b, 0x20, 0x07, 0x57, 0x3b, 0xf9, 0x21, 0x73, 0xb0, 0x47, 0xae, 0x6c, 0xf2, 0xdd, 0x75, 0xd3, 0xa3, 0x64, 0x6f, 0x51, 0x60, 0xfb, 0x8c, 0xb1, 0xb0, 0x2e, 0x3e, 0x8e, 0x40, 0x8d, 0x3e, 0x02, 0x87, 0x63, 0xb8, 0x7e, 0x52, 0xd8, 0x8b, 0x49, 0x72, 0xc7, 0x34, 0x77, 0xc9, 0xfb, 0x69, 0x57, 0x7c, 0xde, 0x1a, 0x92, 0xe7, 0x2d, 0xc7, 0x01, 0x82, 0xfe, 0x75, 0x72, 0x8b, 0xa5, 0x0c, 0x47, 0xd6, 0x1a, 0x50, 0xe4, 0xd8, 0xe8, 0xfe, 0xf6, 0xa0, 0x6a, 0xf0, 0x4e, 0xd0, 0x77, 0x87, 0x8f, 0x63, 0x72, 0xc6, 0x31, 0x5e, 0x8c, 0xb2, 0x1d, 0x06, 0x56, 0xec, 0x6b, 0x4f, 0x19, 0x4d, 0xfc, 0x89, 0x7d, 0x78, 0xf5, 0xc3, 0xc0, 0xa4, 0x87, 0x04, 0x71, 0x17, 0x59, 0xd4, 0xdc, 0xb2, 0xb4, 0xe5, 0x5a, 0x5e, 0xcc, 0x35, 0xe1, 0xca, 0x17, 0xf2, 0xf2, 0xff, 0x2f, 0xf0, 0x5f, 0x5c, 0x19, 0x30, 0x90, 0x7b, 0x14, 0xef, 0xe5, 0x78, 0xc7, 0x7a, 0xe5, 0xa9, 0x30, 0xe0, 0x7e, 0x01, 0x06, 0xf2, 0x0b, 0xf1, 0xc2, 0xf7, 0xdb, 0x2c, 0x78, 0xe1, 0x4e, 0x74, 0x5b, 0x1f, 0x5e, 0x97, 0x60, 0xa0, 0x40, 0xc1, 0xab, 0x17, 0xaf, 0x53, 0x30, 0x50, 0xb8, 0x03, 0xaf, 0x93, 0x78, 0x61, 0x1b, 0xbf, 0x98, 0x8d, 0xd7, 0x42, 0xbc, 0x7a, 0xf0, 0x7a, 0x0c, 0xaf, 0x8b, 0x30, 0x30, 0xbd, 0x57, 0xe7, 0xb9, 0x34, 0x61, 0x7b, 0xa7, 0xeb, 0xe5, 0x9d, 0x8c, 0x15, 0x4d, 0xc7, 0x85, 0x84, 0x71, 0x46, 0x49, 0xfb, 0x4b, 0xdc, 0x15, 0xfd, 0x3e, 0x59, 0xbf, 0xdb, 0x41, 0xc4, 0xd1, 0x49, 0xe2, 0xf2, 0x92, 0x79, 0x14, 0x03, 0x0c, 0xf1, 0x27, 0x63, 0xfc, 0x29, 0x15, 0xaa, 0xe6, 0x95, 0xcf, 0xa5, 0xa7, 0x31, 0x30, 0x1f, 0x03, 0xe9, 0xc9, 0x1c, 0x7f, 0x4a, 0x8f, 0xc7, 0x73, 0x81, 0xef, 0x2b, 0x1c, 0x0d, 0xa6, 0xd1, 0x13, 0xe7, 0x9e, 0x47, 0x4f, 0xac, 0x79, 0xe6, 0x86, 0xb9, 0x22, 0x13, 0xac, 0xdd, 0x9c, 0xaa, 0x1a, 0x7e, 0x6a, 0xa7, 0x27, 0x8e, 0xd7, 0x09, 0x65, 0x35, 0xf3, 0xa8, 0xae, 0xb0, 0x09, 0x2a, 0xe7, 0xcf, 0xe1, 0xaf, 0xff, 0x06, 0xde, 0xb9, 0x3e, 0x7e, 0xfa, 0x21, 0x3d, 0x21, 0xdd, 0x6e, 0x7d, 0x37, 0xfe, 0xf4, 0x71, 0xec, 0xe9, 0x56, 0xe3, 0xe3, 0xf4, 0xc4, 0x69, 0x9f, 0x01, 0x7f, 0xf9, 0xdc, 0x5c, 0x0c, 0xcb, 0xfa, 0x3d, 0x94, 0x56, 0xcf, 0xe1, 0xb0, 0xb3, 0xe0, 0x2d, 0x13, 0x05, 0x9f, 0x83, 0xb9, 0xb3, 0xbf, 0xce, 0xf9, 0x5d, 0x85, 0x60, 0x49, 0x85, 0x6f, 0xf8, 0x70, 0x75, 0xfe, 0x6c, 0xf9, 0x23, 0xdf, 0x2d, 0x19, 0x77, 0xe2, 0xf9, 0x31, 0x70, 0xb3, 0xba, 0xef, 0x2b, 0x37, 0xdd, 0xd9, 0xd4, 0xb6, 0xa7, 0xe9, 0xbf, 0xc7, 0x1d, 0xeb, 0xbe, 0x0c, 0xf2, 0xb4, 0xd1, 0xdf, 0xce, 0xad, 0xb8, 0x74, 0xff, 0x82, 0x67, 0xd3, 0xc7, 0x9d, 0xf8, 0xc9, 0xbf, 0xc2, 0x67, 0x8f, 0xdc, 0xbb, 0xcd, 0xef, 0xe7, 0x4c, 0xc7, 0xed, 0xdc, 0x39, 0x0e, 0xf2, 0xeb, 0x4b, 0xcf, 0xed, 0x82, 0x81, 0xc9, 0x38, 0xce, 0x93, 0xb7, 0xc1, 0x80, 0x6d, 0x01, 0xd6, 0x60, 0x6f, 0x52, 0xd6, 0x6f, 0xff, 0x3f, 0xbc, 0x8e, 0xe9, 0xf7, 0xdf, 0xb3, 0xc6, 0xdf, 0x80, 0x73, 0x1d, 0x0c, 0xcc, 0x3c, 0x01, 0x03, 0x25, 0x76, 0x18, 0xb8, 0xbd, 0x0d, 0x06, 0x8a, 0x3f, 0xc6, 0x3b, 0xce, 0x31, 0xcf, 0x04, 0xbc, 0xe3, 0x1c, 0xbc, 0xfd, 0xb2, 0x98, 0x3b, 0xc5, 0x38, 0xc7, 0x8a, 0x5b, 0xb1, 0xde, 0x03, 0x58, 0x7f, 0xfc, 0x36, 0xf3, 0xe1, 0x11, 0xf3, 0x28, 0x36, 0x7f, 0x52, 0x92, 0xe7, 0x4d, 0xd2, 0x77, 0x0a, 0x4f, 0xd1, 0xe7, 0x5b, 0x4a, 0x52, 0x7c, 0xc3, 0x27, 0xcd, 0x3b, 0xd6, 0x4e, 0x1c, 0x70, 0xde, 0x0f, 0x03, 0x38, 0x1a, 0x03, 0xb3, 0xb6, 0xc2, 0x40, 0xa9, 0x15, 0x06, 0xca, 0x36, 0xe1, 0x85, 0x6b, 0xb9, 0x12, 0xeb, 0xe7, 0x1b, 0xc2, 0xb0, 0x56, 0x51, 0xc7, 0x52, 0xac, 0xf7, 0x6c, 0x03, 0xd6, 0xef, 0xfb, 0x78, 0x3d, 0x8f, 0x71, 0x8a, 0x6f, 0x50, 0xc7, 0x49, 0x7f, 0xa3, 0x8e, 0x8a, 0x7e, 0x9f, 0xa4, 0xdf, 0xaf, 0x5b, 0xb7, 0x91, 0xf9, 0xde, 0x60, 0x6d, 0xa5, 0x24, 0xe5, 0x6b, 0xd5, 0xef, 0xb7, 0xea, 0x77, 0xdb, 0x30, 0xcd, 0x4e, 0xe6, 0x3c, 0x39, 0x71, 0x5d, 0xcf, 0x3d, 0x00, 0x03, 0x0b, 0xb0, 0x0d, 0x77, 0x85, 0x60, 0xe0, 0x5b, 0xd8, 0xa6, 0xaf, 0x60, 0x9f, 0xcf, 0xcf, 0xc1, 0xf7, 0x3a, 0x18, 0xb8, 0x33, 0x5b, 0xb4, 0xf5, 0xce, 0x4a, 0x18, 0x98, 0x87, 0x70, 0xc1, 0x86, 0xe3, 0x35, 0x39, 0x1d, 0x06, 0x82, 0xaf, 0x60, 0x3a, 0x84, 0x1b, 0x77, 0xee, 0xc1, 0x67, 0x27, 0xa6, 0x39, 0xc4, 0x8b, 0x75, 0xc0, 0xf9, 0x1c, 0x0c, 0x34, 0x1c, 0xc7, 0x2b, 0x0d, 0x06, 0x6a, 0xb1, 0x2f, 0xc3, 0xf6, 0xeb, 0xc3, 0xa2, 0xda, 0x2e, 0x18, 0xa8, 0x43, 0x18, 0x32, 0x19, 0xcb, 0xb2, 0x0f, 0x83, 0x6e, 0x3f, 0x0d, 0x97, 0xff, 0x6a, 0x67, 0xe0, 0xcf, 0xf2, 0xcb, 0xd2, 0xa6, 0xbb, 0x46, 0x26, 0x8b, 0xb5, 0xf5, 0x6f, 0xf4, 0xa5, 0x74, 0xa3, 0xb6, 0x7f, 0xc2, 0xb8, 0xc3, 0x3f, 0xa7, 0xe6, 0x6f, 0x3b, 0x9f, 0xbe, 0xc8, 0xf5, 0x2f, 0xa3, 0xef, 0xdc, 0x9f, 0xda, 0xf8, 0xc2, 0x67, 0x23, 0xcb, 0x2e, 0x75, 0xbf, 0xbf, 0xf8, 0x87, 0x5f, 0xfc, 0x7e, 0xdd, 0x83, 0xff, 0x91, 0xfe, 0xfb, 0xae, 0x82, 0xef, 0x9c, 0xd8, 0xf7, 0xd8, 0xc9, 0xdf, 0xbe, 0x3f, 0xf1, 0x7b, 0xaf, 0xbe, 0xde, 0x35, 0x7a, 0x6f, 0x65, 0xee, 0xea, 0x67, 0xdb, 0x7e, 0xf6, 0xde, 0xbe, 0x69, 0xa9, 0x3d, 0x3f, 0xff, 0xfc, 0x03, 0x9f, 0xff, 0xb1, 0xa5, 0x6e, 0x59, 0xaf, 0x72, 0xf1, 0xa3, 0x9f, 0x7c, 0xdb, 0xbf, 0xe6, 0xf9, 0x92, 0x37, 0x27, 0xbc, 0x71, 0xf4, 0x7f, 0x35, 0xfe, 0xe1, 0xd4, 0xd9, 0x4b, 0x47, 0x9f, 0xbb, 0xb3, 0xf3, 0xb5, 0xb5, 0xff, 0x35, 0xbe, 0x61, 0xfb, 0xfc, 0xba, 0xe5, 0x3b, 0xfa, 0xae, 0xd6, 0x5e, 0x59, 0xb5, 0xa1, 0xfe, 0xa5, 0x73, 0x99, 0xd2, 0xc2, 0xaf, 0x2c, 0x36, 0x36, 0xbc, 0x3e, 0x70, 0xd3, 0x97, 0x17, 0xdf, 0x6f, 0x1a, 0xfb, 0xe7, 0xdb, 0x9b, 0x94, 0x43, 0x95, 0x4b, 0x2d, 0x77, 0xfd, 0x56, 0x2d, 0x39, 0xf5, 0x83, 0xf0, 0xb7, 0x9b, 0x8b, 0x53, 0x4e, 0x1d, 0x99, 0x6d, 0x38, 0x3a, 0xeb, 0xd5, 0xb1, 0x6b, 0xaf, 0xfe, 0x30, 0xed, 0xb9, 0xe5, 0x5f, 0x7c, 0x6e, 0xc7, 0x80, 0x77, 0xf7, 0xf6, 0x86, 0xdf, 0xff, 0xf4, 0xa5, 0x63, 0xbb, 0x0e, 0x5c, 0xf1, 0x14, 0x1c, 0x6f, 0xf8, 0x63, 0xd9, 0x5b, 0x0b, 0xef, 0x39, 0x71, 0x6c, 0xec, 0x7f, 0x3f, 0x79, 0xe4, 0xcb, 0x5f, 0xb7, 0xbf, 0x9e, 0xbf, 0xeb, 0xce, 0x37, 0x61, 0xc6, 0xa1, 0xdf, 0xdd, 0x19, 0xfd, 0x79, 0xff, 0xa2, 0xac, 0x49, 0x7b, 0x2e, 0x3d, 0x37, 0xff, 0x47, 0x2f, 0xdc, 0xfa, 0xdf, 0xfb, 0x1f, 0xfc, 0x97, 0x7d, 0x3f, 0xfb, 0xe1, 0x4d, 0x0e, 0x79, 0xdf, 0xf7, 0xbf, 0x35, 0xaa, 0xcb, 0xf4, 0xa2, 0xf9, 0xf5, 0xdd, 0xcf, 0x8e, 0x79, 0xdf, 0xe6, 0x5e, 0xd1, 0x76, 0x6f, 0xcd, 0x92, 0xca, 0x71, 0xbf, 0x58, 0xf4, 0xf9, 0x27, 0xf7, 0x86, 0xa6, 0x7d, 0xb9, 0xf5, 0x44, 0x49, 0x8f, 0xf4, 0xfb, 0x6f, 0x1b, 0xb7, 0xbf, 0xaa, 0x1c, 0xf8, 0xf0, 0xb7, 0x16, 0xe7, 0xb7, 0x9f, 0x5d, 0xbb, 0xde, 0xb8, 0xf7, 0xb9, 0x5b, 0xfe, 0xed, 0xe7, 0xa7, 0x7e, 0x78, 0x7a, 0xdf, 0xd1, 0x2f, 0xac, 0x4c, 0x7d, 0xe9, 0x07, 0x37, 0xc1, 0x95, 0xc2, 0x6d, 0xa3, 0x77, 0x6c, 0x7a, 0x3b, 0x7d, 0x7b, 0xf6, 0x77, 0x97, 0x8d, 0xfd, 0xa9, 0xa9, 0xf1, 0xcb, 0xd3, 0x1e, 0xa8, 0x6b, 0xf8, 0xde, 0xbb, 0x8b, 0x17, 0x4a, 0xcb, 0x97, 0xdf, 0x79, 0x29, 0xa7, 0x61, 0x51, 0xed, 0xda, 0xfa, 0xfc, 0xe3, 0x17, 0x6b, 0xa1, 0xaa, 0xc1, 0xf8, 0xe0, 0x07, 0x9f, 0x93, 0x7e, 0xf8, 0xff, 0x75, 0x98, 0x2e, 0xfd, 0xe2, 0xcf, 0x37, 0xbd, 0xf0, 0xb5, 0xfa, 0xde, 0xd7, 0x5f, 0xcc, 0xf8, 0xf1, 0xfb, 0xd5, 0xf7, 0x3d, 0xbf, 0xef, 0xcc, 0xe0, 0x4f, 0xba, 0xda, 0x6a, 0xff, 0xf0, 0xf9, 0xb7, 0x6e, 0x7e, 0x63, 0x5a, 0xc5, 0xc6, 0xd7, 0xda, 0x3e, 0xfa, 0xeb, 0xd1, 0xca, 0xfa, 0x39, 0xbb, 0x17, 0xd5, 0xcc, 0x78, 0xee, 0xce, 0x57, 0xfe, 0xe3, 0x00, 0xb4, 0x1c, 0xfd, 0x69, 0xfe, 0x3b, 0x81, 0xb7, 0x7e, 0x58, 0xf2, 0xe5, 0xe3, 0x0f, 0xfe, 0xee, 0xb1, 0x23, 0x2f, 0x34, 0xbe, 0x76, 0xec, 0xd2, 0x5f, 0x4b, 0x97, 0xbe, 0xbf, 0xac, 0xb0, 0xe9, 0xf5, 0xc1, 0xa7, 0xc2, 0x5d, 0xe5, 0x6f, 0xa8, 0xfb, 0xfa, 0x7d, 0x86, 0x69, 0x77, 0x7f, 0x21, 0xe5, 0xf3, 0xff, 0xb3, 0x33, 0xad, 0xf2, 0x5b, 0x7f, 0x18, 0xdb, 0xf6, 0x52, 0xf5, 0xa8, 0x6f, 0x17, 0x4f, 0x91, 0x4b, 0x76, 0x3e, 0x3f, 0xc6, 0x62, 0x79, 0xc9, 0xac, 0xac, 0xfb, 0xda, 0x92, 0xe7, 0x26, 0x2b, 0x2b, 0xd6, 0xfe, 0xe8, 0x27, 0xa1, 0xa3, 0xa3, 0x5f, 0x59, 0x74, 0xea, 0xdf, 0xee, 0x7a, 0xf3, 0x4a, 0xfa, 0xd4, 0xd7, 0x5f, 0xda, 0xde, 0xdb, 0xbf, 0xdd, 0xfa, 0x5f, 0xbf, 0xdb, 0xb1, 0xe7, 0xeb, 0x3f, 0xfa, 0xf2, 0x67, 0xf2, 0xf6, 0x8c, 0x6d, 0xff, 0xf1, 0xcf, 0x16, 0xde, 0xde, 0xb7, 0xbf, 0xe1, 0xa9, 0x0f, 0xf6, 0x75, 0x2a, 0x0f, 0xfd, 0xfc, 0x47, 0x7b, 0x53, 0xf6, 0xbe, 0x63, 0x6e, 0x79, 0xf6, 0xd5, 0x87, 0xce, 0xfc, 0x76, 0xd6, 0x3f, 0x3d, 0xf2, 0xea, 0x3f, 0x3f, 0x63, 0xf8, 0xbd, 0xfd, 0xe6, 0xbb, 0x4f, 0x64, 0x75, 0xfe, 0x71, 0xf1, 0x98, 0x8c, 0xad, 0x75, 0xb7, 0xaf, 0x19, 0xdb, 0xb8, 0x6c, 0xe6, 0xaa, 0x65, 0x0b, 0x76, 0x9c, 0x4a, 0xff, 0xef, 0x31, 0x5b, 0x46, 0x6b, 0x8f, 0xa4, 0xc1, 0xd3, 0x53, 0xfe, 0x57, 0xea, 0xf7, 0x9f, 0xbd, 0x70, 0xd3, 0x16, 0xdf, 0xbd, 0xa6, 0xff, 0x78, 0x75, 0xa2, 0x74, 0x71, 0xc9, 0x52, 0xe3, 0xc1, 0xa1, 0xbf, 0xd4, 0x7e, 0xed, 0x9b, 0xd1, 0xfa, 0xf0, 0xaf, 0x3f, 0xdb, 0x30, 0xfd, 0xdb, 0x4d, 0xcb, 0x8d, 0xef, 0x0d, 0x1d, 0xfd, 0x5c, 0xeb, 0xfa, 0xd7, 0x72, 0x4f, 0x5a, 0xde, 0x58, 0xb5, 0x20, 0xfc, 0x87, 0xc0, 0xe1, 0x2b, 0x3f, 0x79, 0x6b, 0xc5, 0xa6, 0xe7, 0x3f, 0xbc, 0xf2, 0x99, 0x1f, 0x3f, 0x5f, 0xaa, 0xf6, 0x6e, 0xfa, 0xed, 0xb1, 0x63, 0xff, 0x71, 0xfa, 0xdf, 0x8f, 0x6c, 0x59, 0x5d, 0x74, 0xfc, 0xe0, 0x0b, 0x5f, 0x79, 0xeb, 0x62, 0xf0, 0xc8, 0x4f, 0xc3, 0x7f, 0x7a, 0xfc, 0xc0, 0xd7, 0xc2, 0x77, 0x3c, 0x67, 0xfc, 0x83, 0x7f, 0xf7, 0xf4, 0xd9, 0xc7, 0xc7, 0xe6, 0xbe, 0xf1, 0x4c, 0xda, 0xe7, 0x2a, 0xa7, 0xa7, 0x04, 0x3e, 0x2e, 0x31, 0xac, 0x52, 0xdf, 0x52, 0x3f, 0xfc, 0xe5, 0x8e, 0xf0, 0x5b, 0x5f, 0xbd, 0xad, 0x69, 0xd3, 0x87, 0xe5, 0x4b, 0x9f, 0xff, 0xce, 0xaf, 0x17, 0xfd, 0x68, 0xe3, 0x81, 0x50, 0xe7, 0x84, 0xc9, 0x2b, 0x5e, 0x7d, 0x34, 0xb8, 0xe4, 0x9d, 0xe9, 0x87, 0xcd, 0xff, 0xfc, 0xe0, 0x4f, 0xc7, 0xcc, 0x4a, 0xb1, 0xca, 0x59, 0x3f, 0xf9, 0xea, 0x28, 0xbb, 0xfb, 0x57, 0xfb, 0x6f, 0x7f, 0x7e, 0xf7, 0xcf, 0xc6, 0x38, 0x72, 0xf7, 0x2c, 0xd8, 0xbc, 0xf0, 0x47, 0xcb, 0x0c, 0x07, 0x7f, 0xa7, 0xfd, 0xe7, 0x73, 0xfd, 0xff, 0x7d, 0x9b, 0xeb, 0xf5, 0xef, 0xdf, 0xf7, 0x8d, 0x37, 0x9f, 0xfe, 0xfc, 0xbf, 0xd6, 0x1d, 0xec, 0x3d, 0xb7, 0xf8, 0xa2, 0xfd, 0x9e, 0x65, 0xff, 0xf1, 0xb0, 0xdc, 0xb8, 0x25, 0xed, 0xe1, 0xd1, 0xc6, 0x27, 0xce, 0xa6, 0x4f, 0xbf, 0xa3, 0x39, 0x35, 0xbc, 0x76, 0x14, 0x7c, 0x6d, 0xfc, 0x83, 0x3f, 0x0f, 0x74, 0xbc, 0xb3, 0x6f, 0x55, 0xe6, 0xff, 0xf7, 0x6c, 0xee, 0xd3, 0xe6, 0xbd, 0x9f, 0x2b, 0xda, 0xfc, 0xea, 0xa6, 0x7f, 0xfd, 0x9f, 0xdf, 0x3e, 0x3f, 0xb6, 0xed, 0xc4, 0x87, 0x3f, 0x1e, 0xf3, 0xfb, 0xb7, 0x26, 0xad, 0x7b, 0xed, 0xd5, 0xa3, 0x7f, 0x3a, 0xfa, 0x8e, 0x77, 0xc9, 0x1f, 0x7e, 0x74, 0xf9, 0x96, 0x37, 0x3a, 0x9b, 0xda, 0x9f, 0xcf, 0xfa, 0xcd, 0xc7, 0x3f, 0xb1, 0x7f, 0x63, 0x45, 0xef, 0x3f, 0xbf, 0x9d, 0xfd, 0xe3, 0x59, 0xff, 0xdc, 0x65, 0x5a, 0xf0, 0xae, 0x76, 0xd3, 0xb2, 0x48, 0xc8, 0x78, 0xfb, 0xcb, 0xe3, 0xa4, 0x31, 0x0b, 0xbb, 0xeb, 0xbf, 0xaf, 0x5d, 0xae, 0x7d, 0x7a, 0xe9, 0xa2, 0xe5, 0xda, 0x6b, 0x59, 0x0d, 0xff, 0x5d, 0xf6, 0x68, 0xda, 0x3b, 0x2b, 0x7f, 0x37, 0xf6, 0xd5, 0xf3, 0x55, 0x86, 0xce, 0x79, 0xff, 0x94, 0xf2, 0xa3, 0x83, 0xff, 0x19, 0xb6, 0x2f, 0xea, 0x57, 0xb3, 0xfe, 0x52, 0xb1, 0x74, 0xd6, 0x9c, 0x99, 0x4d, 0xff, 0xfc, 0xfb, 0xa7, 0x8f, 0x2c, 0x0b, 0xbc, 0x7e, 0x6c, 0xc1, 0x09, 0xcf, 0x5b, 0x63, 0x42, 0x5f, 0x3a, 0x7e, 0xfb, 0x85, 0x27, 0x0e, 0x3c, 0x3d, 0xf7, 0xcd, 0x9f, 0x7e, 0xff, 0x57, 0xb3, 0x76, 0xff, 0xf7, 0x77, 0xf3, 0x9f, 0xd3, 0xde, 0xff, 0xd9, 0xcf, 0x2e, 0xe6, 0xbc, 0xbc, 0xff, 0xe0, 0x86, 0xb9, 0x3f, 0xda, 0x92, 0x6f, 0xdb, 0xf3, 0x1f, 0x8f, 0xef, 0xef, 0x9f, 0x3e, 0xea, 0x37, 0xbf, 0x33, 0x6e, 0x99, 0xf7, 0xe6, 0xd7, 0xa6, 0xde, 0xfa, 0x7a, 0xf8, 0xe7, 0x3f, 0x0a, 0xad, 0xca, 0x7b, 0x61, 0x51, 0x60, 0xdf, 0x37, 0x97, 0x7c, 0x4e, 0x76, 0xae, 0xc8, 0xdd, 0xba, 0x67, 0xcc, 0xf3, 0x5f, 0xfa, 0xa5, 0x79, 0xd3, 0xbf, 0x2f, 0x18, 0xf5, 0xd6, 0xe7, 0xa6, 0xc9, 0x1f, 0xde, 0x4f, 0x96, 0xa9, 0x61, 0xe0, 0x3b, 0xaf, 0x90, 0x7d, 0x6f, 0x18, 0xf8, 0xb6, 0x33, 0xf9, 0x58, 0xe2, 0x46, 0xcf, 0xd5, 0xa5, 0xd3, 0xca, 0xbc, 0x41, 0xba, 0xcd, 0xc1, 0x5b, 0xf9, 0xd2, 0x86, 0xfa, 0xb9, 0xdf, 0xb9, 0xbb, 0xa5, 0xbe, 0x31, 0xaf, 0xb9, 0xfe, 0xee, 0x15, 0xf7, 0x34, 0x2f, 0xae, 0x87, 0xa0, 0xcf, 0x0b, 0x65, 0xe5, 0x15, 0x4a, 0x75, 0x49, 0x70, 0x1e, 0xcc, 0xaa, 0x9e, 0x77, 0xdd, 0x48, 0xfe, 0xaf, 0x56, 0xcd, 0xfe, 0x56, 0xb0, 0xac, 0xf2, 0x2b, 0xa5, 0xb7, 0x4d, 0x1f, 0x79, 0x74, 0x90, 0x96, 0xf4, 0xb5, 0xe8, 0x06, 0x1f, 0xab, 0x4a, 0xe6, 0x94, 0xdd, 0xe0, 0x13, 0x62, 0x30, 0xd7, 0xf9, 0x72, 0x4f, 0xd3, 0x72, 0x3e, 0xd9, 0x62, 0x65, 0xf8, 0xe9, 0x0d, 0x2b, 0xaf, 0x8d, 0x92, 0x37, 0xa7, 0x6c, 0x4e, 0xf9, 0xb7, 0x4a, 0xfd, 0x15, 0xd5, 0xfa, 0x23, 0x16, 0x5f, 0x52, 0xa9, 0x3f, 0xcf, 0xae, 0x28, 0x9d, 0xad, 0x3f, 0x96, 0x97, 0xcc, 0x9d, 0xa7, 0x3f, 0x56, 0x7f, 0xd5, 0x5b, 0x59, 0x51, 0x0a, 0xd8, 0x38, 0xef, 0xa2, 0xbb, 0xeb, 0x87, 0xed, 0x30, 0xd3, 0xf6, 0x25, 0x9e, 0xf3, 0x20, 0x59, 0xd7, 0x3c, 0xf9, 0x9c, 0x83, 0x64, 0x48, 0x46, 0x9e, 0x72, 0x4c, 0xca, 0x4b, 0x3a, 0xc3, 0xc0, 0x6f, 0x21, 0x8b, 0x29, 0x0f, 0xe1, 0x7c, 0x7a, 0xd8, 0xa4, 0x90, 0xb7, 0x94, 0xf3, 0xc9, 0x92, 0x24, 0xc3, 0x4f, 0x3f, 0x26, 0xd9, 0x3f, 0xcd, 0xe9, 0x87, 0x52, 0x60, 0xab, 0xe2, 0x7c, 0x57, 0xdb, 0x90, 0xd4, 0x8a, 0xe5, 0x20, 0xca, 0xce, 0xdd, 0x31, 0x2c, 0x87, 0x85, 0xd6, 0x84, 0x4d, 0x20, 0x43, 0xe2, 0xd4, 0x62, 0x52, 0xfa, 0xb5, 0xa7, 0x16, 0xca, 0xd0, 0xdf, 0x77, 0x6a, 0xa1, 0x9a, 0xc0, 0x49, 0xbc, 0x2e, 0xdd, 0x6a, 0x89, 0x21, 0x76, 0x2e, 0xe3, 0x5d, 0x06, 0x59, 0x93, 0xfd, 0x60, 0xff, 0xe4, 0x53, 0x19, 0xe5, 0xe3, 0x1b, 0x9f, 0xca, 0x4c, 0x32, 0x8e, 0x3c, 0x95, 0xc9, 0xdd, 0xf3, 0x49, 0xa7, 0x32, 0xd8, 0xe6, 0x11, 0xa7, 0x32, 0xff, 0x27, 0xda, 0x97, 0x38, 0x95, 0x89, 0xc9, 0x87, 0x97, 0x9c, 0x01, 0xe7, 0xb3, 0x67, 0xa0, 0x20, 0xe4, 0xb4, 0x2e, 0x83, 0xd0, 0x08, 0xab, 0x32, 0xb5, 0x18, 0xb6, 0x4c, 0xd8, 0x7b, 0x4a, 0x84, 0xa9, 0x06, 0xe1, 0xa9, 0x27, 0x3e, 0xda, 0x9c, 0xcf, 0x70, 0xdd, 0x79, 0x58, 0x16, 0x2e, 0x46, 0xea, 0x70, 0xe0, 0x56, 0x3b, 0x58, 0xfd, 0xcb, 0xc0, 0x49, 0xb5, 0x73, 0xec, 0xc3, 0xb2, 0x8a, 0x12, 0xb6, 0x00, 0x89, 0xc7, 0xe3, 0xac, 0x8d, 0xc4, 0x6d, 0x39, 0x5d, 0x3d, 0x8e, 0xe9, 0x42, 0x35, 0xdd, 0x42, 0x5b, 0x35, 0x61, 0xb7, 0xb1, 0xa8, 0xc0, 0x3e, 0xda, 0x21, 0xd9, 0xd2, 0x03, 0x9d, 0x2c, 0x2b, 0x8d, 0x78, 0x9d, 0x65, 0xf3, 0x48, 0x0b, 0x84, 0x82, 0xbe, 0x96, 0xf2, 0x22, 0x96, 0xe6, 0xa4, 0x50, 0xcc, 0x2f, 0x83, 0xac, 0x22, 0x36, 0xcb, 0x6c, 0xe5, 0x8b, 0x3c, 0x29, 0x65, 0x44, 0x52, 0x26, 0x79, 0xc0, 0x6c, 0xc7, 0xa7, 0x78, 0xb9, 0x21, 0x7b, 0x94, 0xde, 0x95, 0xb9, 0xba, 0x1d, 0x9f, 0x17, 0x22, 0x89, 0x5a, 0x36, 0x93, 0x46, 0x0c, 0xa5, 0x23, 0xe9, 0xd2, 0xdd, 0xe2, 0xfb, 0x56, 0xa5, 0x54, 0x31, 0x24, 0xe4, 0x67, 0x86, 0x7c, 0x38, 0x76, 0x0d, 0x64, 0x0f, 0x80, 0xe2, 0x91, 0x5e, 0x97, 0x90, 0xdf, 0xfb, 0x52, 0x44, 0x97, 0x9b, 0xac, 0x36, 0x13, 0x37, 0x70, 0x66, 0xd8, 0xaf, 0x38, 0xc1, 0x7a, 0x8a, 0x3c, 0x36, 0x97, 0x4f, 0x5e, 0x06, 0x05, 0x50, 0x85, 0xbf, 0xd3, 0x61, 0xbe, 0xd5, 0x09, 0xce, 0xb9, 0xed, 0x48, 0x5d, 0x2f, 0xc3, 0xf7, 0x19, 0xd0, 0x1c, 0x31, 0x63, 0x0c, 0x2f, 0xfb, 0xa2, 0x0e, 0x5a, 0x8a, 0x21, 0x13, 0xdf, 0x9a, 0x62, 0x32, 0x81, 0x5f, 0x22, 0xd9, 0xcb, 0x72, 0x2a, 0x87, 0x64, 0x4f, 0xe3, 0xb5, 0x6c, 0xe0, 0x90, 0xea, 0xf8, 0xbb, 0x6a, 0xa5, 0x96, 0x5a, 0x92, 0xed, 0x70, 0x89, 0x7e, 0x1b, 0xa9, 0x29, 0x20, 0xec, 0xf2, 0x08, 0x7d, 0x74, 0x65, 0x29, 0x4c, 0xe0, 0x1e, 0x20, 0x8d, 0x62, 0xca, 0xdf, 0xc2, 0x6f, 0x26, 0xf7, 0x68, 0x77, 0x3a, 0xc9, 0x3b, 0xfc, 0x9f, 0x28, 0x55, 0x8c, 0x2a, 0xcb, 0xf3, 0x54, 0xd8, 0xd2, 0x2b, 0xae, 0xd0, 0x0c, 0x51, 0x5b, 0xa9, 0x75, 0x24, 0x61, 0xa6, 0x5b, 0x9f, 0x0f, 0x45, 0x26, 0x8c, 0x1c, 0x5f, 0x85, 0x2c, 0x4c, 0x4e, 0x08, 0x57, 0x92, 0x7d, 0x85, 0x49, 0x15, 0x60, 0xf6, 0xee, 0x60, 0xcd, 0x48, 0x13, 0x3e, 0xd3, 0xe8, 0x4c, 0xb0, 0xce, 0x55, 0x1e, 0xa0, 0xfb, 0xa4, 0xb9, 0x34, 0x8e, 0x7a, 0x7e, 0x66, 0x92, 0xc0, 0xac, 0xee, 0x0e, 0x5b, 0xc9, 0x5e, 0x52, 0x64, 0x42, 0x92, 0xbc, 0xd2, 0x4e, 0x98, 0xa0, 0x9a, 0xed, 0x95, 0xca, 0x42, 0x96, 0xec, 0x8a, 0x92, 0x7d, 0xbd, 0xe1, 0xba, 0xf9, 0xf1, 0xbe, 0x70, 0x5e, 0xbf, 0x2f, 0xae, 0x97, 0x63, 0x6c, 0x3d, 0x50, 0xda, 0x48, 0x5e, 0x39, 0x0c, 0xeb, 0xcb, 0xcc, 0xe1, 0xe9, 0x63, 0x73, 0x3b, 0xbf, 0x00, 0xfb, 0x41, 0xb2, 0xa7, 0x97, 0x72, 0x4f, 0xb0, 0x95, 0xa8, 0x5a, 0x75, 0xfe, 0x9e, 0x9e, 0x50, 0x30, 0xb0, 0x03, 0xb2, 0xc3, 0xf3, 0xaf, 0xed, 0x09, 0xee, 0x87, 0x99, 0x8a, 0x47, 0xe9, 0x18, 0xd6, 0xde, 0x14, 0x2c, 0x23, 0xfb, 0x6f, 0xb4, 0xb7, 0x42, 0xf9, 0x3a, 0xb7, 0xf7, 0x51, 0xd1, 0x5e, 0xa1, 0x8b, 0x4e, 0xed, 0x8d, 0xb7, 0x36, 0x47, 0xaf, 0x6d, 0x0e, 0xbf, 0xa5, 0xb3, 0x9e, 0x62, 0xba, 0x2e, 0xe9, 0x3f, 0xcc, 0x1e, 0x01, 0xa6, 0x10, 0x5c, 0xb4, 0x09, 0x24, 0x0d, 0xa3, 0xa7, 0x52, 0xae, 0xd7, 0x46, 0x96, 0x40, 0x9a, 0x69, 0xaf, 0x70, 0x07, 0x20, 0xdb, 0x56, 0x15, 0x2f, 0xa9, 0x89, 0x6c, 0x65, 0xb5, 0x64, 0x1f, 0xed, 0x56, 0xab, 0x95, 0x06, 0xb0, 0x09, 0x8d, 0x22, 0xf7, 0x58, 0x92, 0xcd, 0x89, 0xcb, 0x1b, 0x4f, 0x57, 0x6e, 0x66, 0xbf, 0x43, 0x29, 0x61, 0x7b, 0x6d, 0x1a, 0x3f, 0x49, 0x21, 0xab, 0x9a, 0x6e, 0x8c, 0x7e, 0x57, 0xd3, 0x4e, 0xb2, 0x45, 0xed, 0x4c, 0xd5, 0x4c, 0x1a, 0x4b, 0xd6, 0xe5, 0x58, 0x87, 0x07, 0x54, 0x23, 0x3d, 0x7b, 0x7b, 0x14, 0xe2, 0x94, 0x2e, 0xa3, 0xb3, 0x30, 0xe2, 0xf5, 0x86, 0x1e, 0x8d, 0x69, 0xbf, 0xb7, 0x19, 0x62, 0xf2, 0x91, 0xd7, 0xb4, 0xd7, 0x71, 0xdd, 0xf6, 0xc6, 0x6d, 0xc7, 0xb2, 0x8d, 0x41, 0xd1, 0x06, 0x9b, 0xb3, 0x2a, 0xde, 0x76, 0x4b, 0xac, 0xed, 0xd8, 0x16, 0x97, 0x0a, 0xd2, 0xb2, 0x7f, 0x39, 0x8c, 0xbf, 0x75, 0x6c, 0x01, 0x2c, 0x83, 0x4f, 0x0e, 0xc6, 0xf2, 0x29, 0x8c, 0x99, 0xbd, 0xca, 0xd4, 0x29, 0x59, 0xdc, 0x86, 0x49, 0x08, 0x41, 0x36, 0xd5, 0x16, 0xe8, 0x2d, 0x6b, 0xad, 0xcd, 0x14, 0x2d, 0x0b, 0x57, 0xf2, 0x5d, 0xc6, 0x98, 0x33, 0xd4, 0x00, 0x3f, 0x1b, 0xc2, 0x75, 0x7c, 0x57, 0xf8, 0xdc, 0xb5, 0x96, 0x9f, 0x6d, 0xb5, 0x66, 0xbe, 0xdf, 0x5a, 0xe7, 0x57, 0x31, 0x1f, 0x7e, 0x9e, 0x4c, 0x12, 0xc6, 0xfc, 0x64, 0x0f, 0x01, 0x0c, 0x62, 0xf8, 0x01, 0xc5, 0x67, 0x6d, 0x02, 0x43, 0x44, 0x51, 0x4d, 0x4a, 0x19, 0x3f, 0x25, 0x56, 0x69, 0x0f, 0x7e, 0x3f, 0xae, 0x60, 0x98, 0x17, 0x47, 0x0c, 0x9f, 0x0f, 0xf3, 0x33, 0x85, 0x1e, 0x54, 0x96, 0xeb, 0x2d, 0x53, 0xf4, 0x96, 0x11, 0xa4, 0x4f, 0xff, 0xf1, 0xa1, 0x90, 0x91, 0xe2, 0xa8, 0xd9, 0xc1, 0xa8, 0x52, 0x62, 0xb5, 0x84, 0x70, 0xaf, 0x7f, 0xe0, 0xd0, 0x8f, 0x0f, 0x91, 0x7f, 0x5d, 0x0a, 0x8f, 0x68, 0x4a, 0x14, 0x53, 0xaf, 0x51, 0x72, 0x21, 0x2d, 0x9c, 0x43, 0xd6, 0x4d, 0xdc, 0xc0, 0x9a, 0x9f, 0xa5, 0x55, 0xfc, 0xdd, 0xeb, 0x80, 0x5b, 0xb8, 0x47, 0x55, 0x7e, 0xb3, 0xa8, 0xc4, 0x05, 0x24, 0xf9, 0xff, 0x10, 0x5e, 0x55, 0xc4, 0x3f, 0xcd, 0x7b, 0x12, 0xe6, 0x13, 0x27, 0x15, 0x61, 0x9b, 0xa2, 0x7f, 0xab, 0xc2, 0x6b, 0x3e, 0x85, 0x58, 0x73, 0x61, 0x59, 0x90, 0x7d, 0xf4, 0xd0, 0xdb, 0xdc, 0xa8, 0x2b, 0xaa, 0x66, 0xb7, 0xd8, 0x8e, 0x76, 0x13, 0x5f, 0x76, 0xb1, 0xc5, 0x5e, 0x0c, 0x9a, 0x7a, 0x60, 0xa5, 0xf5, 0xf8, 0x7d, 0xab, 0xbc, 0x6f, 0xdc, 0x87, 0x23, 0xdf, 0x28, 0x46, 0xde, 0x45, 0x23, 0x0f, 0x43, 0xad, 0x38, 0xea, 0xba, 0x0d, 0x47, 0x7d, 0xdc, 0x87, 0xb7, 0x8f, 0xc6, 0x3e, 0xff, 0x93, 0xc7, 0x9e, 0xe6, 0x0a, 0xc9, 0x39, 0x4d, 0xda, 0x29, 0x66, 0x37, 0xa7, 0x72, 0x40, 0xe1, 0xb0, 0x6f, 0xbb, 0x87, 0x7d, 0x2b, 0x12, 0x73, 0x86, 0xac, 0x76, 0xc4, 0x67, 0x9a, 0x43, 0x2f, 0xad, 0x58, 0xac, 0x1a, 0x2a, 0x8b, 0x24, 0x91, 0xc5, 0x8a, 0x25, 0x2d, 0xe1, 0x10, 0xf9, 0x37, 0xef, 0x17, 0xb6, 0x3e, 0xc9, 0x8a, 0xc7, 0x0d, 0xe7, 0xaa, 0xe7, 0xd3, 0xac, 0x4d, 0xfa, 0x46, 0xda, 0xc5, 0x62, 0x15, 0xd2, 0xfc, 0x05, 0x9c, 0xbf, 0x6c, 0x61, 0x34, 0xcd, 0x56, 0xe5, 0xc0, 0x18, 0xaa, 0x85, 0x2c, 0x45, 0x62, 0xfe, 0x71, 0xeb, 0x25, 0xca, 0x9c, 0xd8, 0xba, 0x11, 0x76, 0xf2, 0xda, 0xe0, 0x1a, 0x39, 0x5a, 0x5d, 0x6a, 0x96, 0xf2, 0xb2, 0x55, 0x55, 0x9c, 0x87, 0xa2, 0x64, 0x8b, 0x94, 0x08, 0xbd, 0x42, 0xa1, 0x2c, 0xde, 0xd5, 0x9b, 0x46, 0xee, 0xea, 0xf4, 0x2d, 0x9c, 0xa3, 0x4b, 0x4d, 0x9a, 0xab, 0xf6, 0x6b, 0x3b, 0x79, 0xa5, 0xe3, 0x8e, 0xd6, 0x54, 0x49, 0x58, 0x8e, 0xaa, 0x06, 0x96, 0x43, 0x46, 0x28, 0x30, 0xdc, 0x0a, 0x02, 0xd9, 0x33, 0x0c, 0x65, 0x24, 0xa5, 0x6a, 0xa9, 0xee, 0x8e, 0x84, 0xd5, 0xc2, 0x5b, 0x97, 0x43, 0x1a, 0xa4, 0x8d, 0x5f, 0x0e, 0xa3, 0x61, 0xf4, 0xad, 0xb3, 0x21, 0xfd, 0x4b, 0x24, 0x31, 0x93, 0x41, 0x98, 0x4c, 0xc2, 0x0e, 0x73, 0x52, 0xaa, 0x99, 0x42, 0x9a, 0xbc, 0x0d, 0x74, 0x7c, 0x62, 0xa6, 0xbd, 0x8a, 0x6b, 0xb9, 0x2a, 0xb9, 0x96, 0x36, 0x08, 0xaf, 0xae, 0x38, 0x3b, 0xbc, 0x45, 0xb6, 0xe5, 0xe0, 0x5c, 0x09, 0xb3, 0xaf, 0x50, 0x2d, 0x55, 0x8f, 0xdb, 0x89, 0xfd, 0x3a, 0x46, 0x9c, 0x2f, 0x85, 0x92, 0x2c, 0x5b, 0x6a, 0xb4, 0x03, 0xa5, 0x23, 0x7e, 0x90, 0xee, 0x36, 0x61, 0xdf, 0xe3, 0x2e, 0x36, 0xdc, 0xde, 0x41, 0x4d, 0xb7, 0x2a, 0x3b, 0xc0, 0x56, 0x6a, 0xcf, 0x08, 0x1d, 0x48, 0xb6, 0xb7, 0x99, 0xa4, 0x41, 0x50, 0xab, 0x18, 0x70, 0x0c, 0x57, 0xc5, 0xce, 0x74, 0x32, 0xdc, 0x90, 0x5a, 0x82, 0xa5, 0x4e, 0x7a, 0x47, 0x35, 0xed, 0xb6, 0x84, 0xd3, 0x4a, 0x4e, 0x03, 0x69, 0x2f, 0xc8, 0xa1, 0x8b, 0x31, 0x39, 0xed, 0x2f, 0xb4, 0x41, 0x16, 0xe4, 0xdc, 0x4a, 0x7a, 0x80, 0x8e, 0x88, 0x72, 0xab, 0x27, 0x61, 0x11, 0x73, 0xa8, 0x48, 0x97, 0x9c, 0xb9, 0xc0, 0xbb, 0xec, 0x0a, 0x70, 0xd1, 0x2e, 0x6d, 0xc7, 0xb5, 0xcc, 0x36, 0x82, 0xc9, 0x56, 0xc6, 0x32, 0xbc, 0xaa, 0xaa, 0xb6, 0xe2, 0xba, 0xdb, 0xc9, 0xeb, 0x8e, 0xac, 0x05, 0x3b, 0xa1, 0x9c, 0xfc, 0x88, 0xb5, 0x8c, 0x3e, 0xf5, 0x04, 0xaf, 0xb5, 0xad, 0x6c, 0xfb, 0x17, 0x41, 0xca, 0xe2, 0x26, 0xef, 0x33, 0x90, 0x8d, 0x57, 0xe6, 0x97, 0xda, 0x3c, 0x00, 0x39, 0x25, 0x1f, 0x82, 0x8d, 0xf4, 0x68, 0xa7, 0xf8, 0xb1, 0x64, 0x0b, 0x62, 0x47, 0xb6, 0x24, 0x3b, 0x86, 0x45, 0xd8, 0x33, 0x33, 0x49, 0x6e, 0xc2, 0x0a, 0x73, 0xdb, 0x33, 0x8b, 0xe1, 0xa6, 0x3d, 0xed, 0xf5, 0x79, 0xbd, 0x98, 0x3e, 0xe4, 0x20, 0x9d, 0x2b, 0x75, 0xa2, 0xd9, 0xd3, 0x07, 0x21, 0xd2, 0xf0, 0xc9, 0xb8, 0xb5, 0x0d, 0xa0, 0x0f, 0xc0, 0x14, 0x7f, 0x96, 0xc0, 0x9c, 0x9f, 0x1d, 0x7a, 0x93, 0xf6, 0x61, 0x71, 0x9a, 0x19, 0xb3, 0xb2, 0xd1, 0xc2, 0xd6, 0x34, 0x16, 0x5b, 0xd4, 0x1c, 0xac, 0x77, 0x08, 0xaf, 0xf9, 0x55, 0x5b, 0xb8, 0xee, 0x55, 0xc2, 0x7a, 0xf3, 0xd1, 0x28, 0x69, 0x02, 0xf1, 0x29, 0xd4, 0x9b, 0xb4, 0xaf, 0x09, 0x89, 0xe1, 0x7c, 0xb2, 0x5e, 0x97, 0xc9, 0xb6, 0x39, 0xf6, 0xd9, 0x01, 0xf1, 0x79, 0x6c, 0x21, 0x9d, 0x6c, 0xe6, 0x45, 0xbd, 0xff, 0xa9, 0xb8, 0xb1, 0x86, 0x6e, 0xb0, 0xbd, 0xda, 0x79, 0xa4, 0x23, 0x66, 0x75, 0xb4, 0x4e, 0xa1, 0x52, 0x63, 0x98, 0xde, 0x17, 0x96, 0xe0, 0x0c, 0xa3, 0xfe, 0x55, 0xc0, 0x86, 0xbf, 0x36, 0x70, 0xdc, 0x5a, 0x02, 0x2e, 0xec, 0x67, 0x25, 0xd1, 0x56, 0x61, 0x77, 0x98, 0x56, 0x87, 0xdb, 0x8d, 0xd8, 0xf6, 0x12, 0x28, 0xe7, 0xf3, 0x48, 0x20, 0x4f, 0x95, 0x11, 0x60, 0xaf, 0x62, 0x74, 0x12, 0xdd, 0x2a, 0xa4, 0x38, 0x86, 0xd5, 0xc8, 0xfe, 0x0f, 0xd5, 0x28, 0xfd, 0xff, 0x6c, 0x8d, 0xdc, 0xe4, 0x53, 0xd3, 0x14, 0x99, 0x58, 0x0e, 0x6c, 0x6d, 0x91, 0x3d, 0x11, 0xb3, 0xdd, 0xdf, 0x81, 0x5b, 0x67, 0x90, 0xed, 0x14, 0xa1, 0xa3, 0x5a, 0x34, 0x83, 0xfd, 0x1c, 0xaf, 0x48, 0xc8, 0xa6, 0x13, 0x64, 0x66, 0xc8, 0xad, 0xdb, 0x0e, 0xb6, 0x01, 0x6b, 0xfe, 0xe2, 0xfa, 0xc5, 0x35, 0x78, 0x16, 0xbc, 0xa5, 0x67, 0xc0, 0x9b, 0xbc, 0xdf, 0xf0, 0xe8, 0xf5, 0xb1, 0x7f, 0x2e, 0xa1, 0xbf, 0x44, 0x76, 0xbc, 0x63, 0x36, 0x51, 0xf2, 0xd9, 0x76, 0x7c, 0x95, 0x0d, 0x47, 0xf5, 0x13, 0xe3, 0x99, 0x38, 0xde, 0xfc, 0x16, 0xc9, 0xeb, 0x84, 0x99, 0xb1, 0x9e, 0x23, 0x2d, 0x63, 0xc4, 0x99, 0xab, 0xa0, 0x00, 0x7f, 0xe7, 0xc3, 0xf4, 0x0a, 0x61, 0xeb, 0x9b, 0x52, 0xe1, 0xfc, 0x65, 0xab, 0xe4, 0x4e, 0xfc, 0xd2, 0x4c, 0xbe, 0x99, 0x31, 0x57, 0x0c, 0x23, 0x58, 0x34, 0xeb, 0x23, 0x93, 0x86, 0x35, 0x5e, 0x16, 0x19, 0xd3, 0xbb, 0x13, 0xbc, 0xf5, 0xa4, 0x83, 0xc5, 0x18, 0xb7, 0xb0, 0x2c, 0xc1, 0x76, 0x16, 0xc8, 0xd6, 0xba, 0x45, 0x69, 0xcf, 0x40, 0xdc, 0x0b, 0xe9, 0x06, 0x0b, 0x52, 0x0c, 0xe4, 0xb3, 0x94, 0xb8, 0x99, 0x85, 0x93, 0xda, 0x10, 0xfb, 0x18, 0x82, 0x22, 0x73, 0x94, 0xce, 0x2e, 0xc2, 0x59, 0xb5, 0x66, 0x63, 0xf4, 0xa7, 0xbd, 0x4f, 0x01, 0x62, 0x23, 0xd9, 0xaa, 0xc9, 0x1c, 0xa5, 0x73, 0x8c, 0x50, 0x7a, 0x64, 0xbc, 0x12, 0x6d, 0x96, 0x31, 0x6d, 0x36, 0x5e, 0x95, 0xfa, 0xf9, 0xe4, 0x70, 0xd9, 0xef, 0xbc, 0xb8, 0xd4, 0x1f, 0xce, 0x0a, 0x84, 0x26, 0x22, 0xb4, 0x5f, 0xb7, 0x17, 0xb6, 0x12, 0xa1, 0x89, 0x13, 0x26, 0xce, 0x1a, 0xd0, 0x0e, 0xc5, 0x6d, 0x88, 0xad, 0xb4, 0x6c, 0xc6, 0xd9, 0x43, 0x54, 0x61, 0x76, 0xec, 0xec, 0x1c, 0xa9, 0x66, 0x5d, 0x32, 0xbd, 0x6c, 0x40, 0xdb, 0xa3, 0x9a, 0xd8, 0xdf, 0x1d, 0xee, 0x93, 0xb8, 0x93, 0x4f, 0xa8, 0x89, 0xeb, 0xd0, 0x0d, 0x5d, 0x26, 0xdd, 0x7c, 0x41, 0xcf, 0xb2, 0x04, 0x3a, 0xee, 0x7e, 0xd7, 0xc3, 0xa4, 0xc5, 0x59, 0x6f, 0x3e, 0x69, 0xfc, 0xb0, 0x6d, 0x9b, 0x64, 0x7b, 0x3e, 0x6e, 0x2f, 0xce, 0xdd, 0x52, 0xb0, 0x54, 0xbe, 0xe5, 0x31, 0xab, 0xa0, 0xf9, 0x49, 0x2b, 0xc4, 0xdc, 0x43, 0x38, 0x4c, 0x88, 0xf0, 0x20, 0x03, 0xb7, 0xee, 0x09, 0x98, 0x4f, 0x16, 0xc4, 0x98, 0x87, 0xc0, 0x1a, 0x35, 0x04, 0xab, 0xac, 0x4b, 0x61, 0xa2, 0x62, 0xd1, 0x31, 0x15, 0xab, 0xc0, 0x53, 0xc2, 0x36, 0x81, 0xff, 0x84, 0xf2, 0x49, 0x0b, 0x2f, 0xf3, 0x01, 0xca, 0xe1, 0x36, 0x61, 0xd1, 0x9d, 0xf1, 0x0e, 0x85, 0xec, 0xc5, 0x72, 0xbe, 0xca, 0x54, 0x30, 0xf6, 0x3f, 0x01, 0x69, 0x73, 0xa3, 0x4a, 0x34, 0x46, 0x19, 0xea, 0xfe, 0xb7, 0x75, 0x3f, 0x6b, 0x38, 0x77, 0x58, 0x1b, 0xad, 0x0c, 0xe7, 0x1d, 0x51, 0x14, 0x5f, 0x9a, 0x87, 0x33, 0x69, 0x60, 0x46, 0xbf, 0xea, 0xd5, 0x4b, 0x95, 0xc3, 0x69, 0xb1, 0xd2, 0xd4, 0x4c, 0xae, 0x6b, 0x60, 0x18, 0x3e, 0xa4, 0x63, 0x3a, 0x16, 0x8b, 0xe2, 0xb5, 0x90, 0x8d, 0xf8, 0xad, 0xd8, 0x8b, 0xa2, 0x9f, 0x71, 0x4f, 0xb4, 0x96, 0xba, 0x96, 0x8a, 0x5d, 0x91, 0xac, 0x82, 0x86, 0x76, 0x09, 0xdf, 0xda, 0xb1, 0xd3, 0x64, 0xf2, 0x48, 0x1d, 0x9b, 0x8d, 0xd7, 0x5a, 0xc5, 0x67, 0x9a, 0xb4, 0x89, 0xf0, 0x74, 0xc4, 0x10, 0x0d, 0xa4, 0xbb, 0xba, 0x77, 0x63, 0x28, 0xef, 0x33, 0x6d, 0xf0, 0x55, 0x69, 0xe8, 0x33, 0x6d, 0xda, 0x4e, 0x49, 0x73, 0x03, 0xfb, 0xae, 0x73, 0x83, 0x9f, 0xf6, 0xc2, 0x7f, 0xda, 0x2c, 0x38, 0x1c, 0xf3, 0x0f, 0xfa, 0x3b, 0xfc, 0x07, 0x7d, 0x1d, 0x88, 0x4d, 0x66, 0xe2, 0xfe, 0x3c, 0x11, 0xc7, 0x48, 0x6e, 0x01, 0xb6, 0x50, 0x6f, 0x29, 0x39, 0x2b, 0x3d, 0xef, 0xf6, 0x23, 0x81, 0x8f, 0x78, 0x47, 0xc5, 0xe3, 0xf8, 0xf6, 0x0a, 0xbe, 0x15, 0xe2, 0xe8, 0xb8, 0x70, 0x97, 0xa9, 0x72, 0xb8, 0x60, 0xa2, 0x6b, 0x9e, 0xcd, 0x05, 0xa1, 0x3c, 0x17, 0x54, 0xb9, 0x5c, 0x30, 0x5f, 0xf1, 0x21, 0x45, 0x2a, 0xbb, 0x53, 0xdd, 0x46, 0xda, 0xb9, 0xac, 0x2e, 0xc2, 0xa6, 0x36, 0x0b, 0x18, 0xf3, 0x20, 0x7b, 0x5d, 0xc3, 0x6f, 0xfc, 0xb4, 0x2e, 0x1e, 0xe2, 0x86, 0x62, 0x1c, 0xbd, 0xb2, 0xaa, 0x1e, 0x6f, 0xae, 0xf4, 0xbc, 0xe2, 0xfb, 0x4c, 0xb5, 0x74, 0x90, 0x20, 0xc6, 0xde, 0x4d, 0xe1, 0x7c, 0xc4, 0xe0, 0x26, 0xda, 0x28, 0x3f, 0xdc, 0x41, 0x18, 0x12, 0x3f, 0xc8, 0x7b, 0x07, 0xe5, 0x89, 0x3b, 0xbc, 0xc8, 0xb5, 0xba, 0xbb, 0xa7, 0x03, 0xdb, 0x38, 0x4a, 0x7a, 0x55, 0x35, 0x61, 0x0e, 0xaf, 0x46, 0x10, 0xd6, 0x61, 0x2b, 0x41, 0xd7, 0x36, 0x8e, 0xe5, 0xfc, 0xca, 0xb0, 0x7e, 0x18, 0xa3, 0xd7, 0x93, 0xfa, 0x62, 0x61, 0xbc, 0x2f, 0x6c, 0xe4, 0x2d, 0x89, 0xad, 0x34, 0xb8, 0xf6, 0x6e, 0x0a, 0x81, 0x46, 0x5a, 0xbb, 0x2e, 0xb1, 0x1a, 0xb0, 0x57, 0xcb, 0x75, 0x9f, 0x83, 0x63, 0xaa, 0xf6, 0x0f, 0xfe, 0x40, 0xe0, 0x41, 0x82, 0xb2, 0x89, 0x9d, 0x43, 0xc7, 0xd6, 0x07, 0xe9, 0x9d, 0xcc, 0x1a, 0xb8, 0x6a, 0xd7, 0xd7, 0xc7, 0x16, 0xa6, 0x65, 0x93, 0xd7, 0xc7, 0x10, 0xad, 0x0f, 0xa6, 0xb1, 0xf7, 0x0f, 0xd9, 0x05, 0xb6, 0x20, 0x6c, 0xd9, 0x7d, 0x78, 0x98, 0x56, 0x28, 0xe9, 0xd2, 0xda, 0x1b, 0xc1, 0x9c, 0xdb, 0xc6, 0x8a, 0xc0, 0x17, 0x4a, 0x3e, 0xd0, 0x5e, 0xc9, 0xf5, 0x27, 0xac, 0xf2, 0xe1, 0x8e, 0xc7, 0x33, 0x80, 0x24, 0x89, 0x2c, 0x50, 0x3b, 0xdf, 0xdf, 0xf8, 0xe1, 0x2b, 0x24, 0x03, 0x83, 0xf8, 0x19, 0xb5, 0x04, 0x74, 0x0d, 0xc8, 0x99, 0xe6, 0xc6, 0xaf, 0xee, 0xfc, 0xd3, 0xe1, 0xd0, 0xf4, 0xc0, 0x93, 0x90, 0x1e, 0xce, 0xb7, 0xce, 0x26, 0x1f, 0x87, 0x64, 0x19, 0x9c, 0xf0, 0x6e, 0x5a, 0x93, 0x11, 0xb9, 0xb7, 0x27, 0x94, 0x6d, 0x99, 0xa6, 0xbd, 0x62, 0x06, 0x18, 0x15, 0xce, 0xc0, 0xdf, 0x9b, 0x62, 0xf6, 0x5b, 0x55, 0xa3, 0xee, 0x1f, 0xf9, 0x83, 0x4a, 0xf8, 0xb0, 0x4f, 0xe8, 0xe6, 0x15, 0x15, 0xc4, 0x74, 0x86, 0xb2, 0xdd, 0x70, 0xeb, 0x27, 0x70, 0x46, 0x1a, 0x22, 0xe9, 0xcd, 0x23, 0x67, 0xa6, 0x37, 0x6b, 0xcd, 0x14, 0xf2, 0xc6, 0x2d, 0x4f, 0xf1, 0x82, 0x71, 0x4a, 0x29, 0xd0, 0x89, 0xfe, 0x44, 0xb6, 0x20, 0x4e, 0x63, 0xe0, 0xe0, 0x9a, 0x93, 0x3c, 0xdb, 0x78, 0xde, 0x8d, 0x70, 0x55, 0xe1, 0x24, 0x5d, 0x06, 0x5e, 0x7a, 0x9e, 0xd1, 0xcf, 0xbc, 0xb2, 0xac, 0x61, 0x70, 0x69, 0xff, 0x5f, 0x27, 0x52, 0xaf, 0x27, 0xf8, 0x0a, 0x44, 0x33, 0x91, 0x86, 0x35, 0x59, 0x6c, 0xc2, 0x7a, 0xe6, 0x2b, 0xc5, 0xb4, 0x16, 0x11, 0x47, 0x6f, 0xe0, 0xf5, 0xf4, 0x0e, 0x4b, 0x44, 0x6c, 0x54, 0x3c, 0xac, 0x87, 0x4b, 0xdf, 0x52, 0x92, 0xbf, 0x85, 0x56, 0xa9, 0x4d, 0xe4, 0x01, 0xe0, 0x67, 0x2f, 0x23, 0xb6, 0x2c, 0xf6, 0xfd, 0x11, 0x38, 0xcb, 0x4f, 0xfb, 0x16, 0xbf, 0x69, 0xa3, 0xbd, 0x88, 0x3c, 0x9a, 0x6a, 0xc2, 0x9b, 0x18, 0x7e, 0xef, 0x10, 0xbb, 0xa7, 0xee, 0x53, 0x30, 0xc5, 0x3d, 0x56, 0x29, 0xa3, 0xb5, 0xcd, 0x76, 0xd1, 0xf7, 0x0f, 0x1d, 0xb6, 0x81, 0x80, 0x8d, 0x56, 0x4f, 0xbc, 0x3f, 0xb2, 0x84, 0xcf, 0x48, 0xc1, 0xf3, 0x6b, 0x2b, 0x26, 0x5f, 0x75, 0x4e, 0xb2, 0xee, 0xe0, 0x04, 0x9b, 0xc3, 0x09, 0x66, 0xbb, 0x13, 0x32, 0x75, 0xdc, 0x89, 0x77, 0x16, 0xcc, 0xb7, 0x53, 0xd4, 0xc0, 0xe9, 0x21, 0x79, 0x41, 0x1d, 0x7f, 0x72, 0xc4, 0xd7, 0x15, 0xed, 0x3d, 0xe0, 0xc2, 0x52, 0x6c, 0x4d, 0x60, 0xae, 0xd9, 0x84, 0xd0, 0xb2, 0x38, 0xae, 0xdf, 0x45, 0x1a, 0xe7, 0xfa, 0x6c, 0x69, 0xbe, 0x96, 0x7f, 0x55, 0x43, 0x75, 0xbb, 0x1e, 0x64, 0x6e, 0x65, 0x2c, 0xf4, 0x9f, 0xa0, 0x62, 0x60, 0x88, 0xfc, 0x70, 0xa6, 0x90, 0x54, 0x1a, 0x4b, 0xa2, 0xb1, 0xdd, 0x17, 0x49, 0x26, 0x49, 0x31, 0x69, 0xe8, 0xed, 0xae, 0xa8, 0x53, 0xd2, 0x0a, 0xe0, 0xed, 0x8a, 0x93, 0x5d, 0x1d, 0x1e, 0x73, 0xc9, 0xce, 0xaf, 0x22, 0x3d, 0xf8, 0x2e, 0x7f, 0x7b, 0x39, 0xe1, 0xb1, 0x4a, 0xfa, 0x75, 0xc2, 0x63, 0x95, 0x74, 0x58, 0x78, 0xac, 0x92, 0x7e, 0xa3, 0x7b, 0xc6, 0xfb, 0xfa, 0xc9, 0x1a, 0x07, 0xf8, 0x7d, 0x5e, 0x5f, 0x57, 0x49, 0x60, 0x4d, 0x38, 0xc4, 0x71, 0x5e, 0x4c, 0x4a, 0xfb, 0x5f, 0x49, 0x69, 0x0f, 0xe9, 0x69, 0x5f, 0x12, 0x69, 0xb1, 0x56, 0x06, 0x4a, 0x4f, 0x71, 0xa3, 0x25, 0x4a, 0xa9, 0x3f, 0x62, 0x62, 0x09, 0x36, 0xe9, 0x20, 0xf7, 0x7d, 0xcc, 0x07, 0x6a, 0xd6, 0xc8, 0xfe, 0x1f, 0xba, 0xb8, 0x12, 0x67, 0xf6, 0x4a, 0x89, 0xf3, 0x3f, 0xf6, 0x76, 0x05, 0x95, 0xc0, 0xe9, 0x7e, 0xc7, 0x39, 0xb5, 0xb7, 0x42, 0x96, 0x53, 0x3a, 0xfe, 0xf6, 0x7d, 0xeb, 0xa2, 0xeb, 0x9c, 0xd2, 0xeb, 0x4a, 0x0a, 0xfb, 0x0b, 0xac, 0x39, 0xf9, 0x0d, 0x92, 0xb9, 0x5e, 0x47, 0xf6, 0xa4, 0x9c, 0x94, 0x5a, 0x87, 0x0a, 0xcb, 0xe3, 0x50, 0x01, 0x67, 0xe4, 0xe5, 0x8d, 0x02, 0x2a, 0xac, 0x94, 0xc8, 0x57, 0x26, 0xe1, 0xd6, 0xa4, 0xc9, 0x3b, 0xd4, 0xa7, 0xf6, 0xdf, 0x68, 0x3f, 0x16, 0x7e, 0x56, 0x92, 0xbc, 0xac, 0xbc, 0xf3, 0x37, 0x76, 0x69, 0xa3, 0xbe, 0x4b, 0xef, 0xfe, 0xdb, 0xbb, 0xb4, 0x80, 0x42, 0xf1, 0x5d, 0xfa, 0x5a, 0x28, 0xc4, 0xbb, 0xf4, 0x48, 0xe8, 0x46, 0x71, 0xdc, 0x64, 0x99, 0x79, 0xbf, 0x56, 0x25, 0x74, 0xa4, 0xf5, 0x5d, 0xdc, 0xac, 0xef, 0x6e, 0x8a, 0xbe, 0xbb, 0x4d, 0x0a, 0x29, 0xea, 0x35, 0x3b, 0x31, 0xef, 0x6c, 0x06, 0x25, 0x4a, 0xf6, 0xee, 0xc5, 0xbe, 0x8c, 0x3b, 0xa7, 0x82, 0x31, 0xb2, 0xc9, 0x1e, 0x16, 0xd9, 0xad, 0x50, 0xc6, 0xe9, 0x5c, 0x89, 0x79, 0x3a, 0x27, 0x22, 0x45, 0xdf, 0xa3, 0x89, 0xeb, 0x30, 0x41, 0xcd, 0xd3, 0xf7, 0xed, 0xea, 0x18, 0x7f, 0x41, 0x32, 0x12, 0xad, 0x4f, 0xb6, 0x57, 0x94, 0xea, 0x4c, 0xb2, 0x54, 0xb9, 0x34, 0xbe, 0x73, 0xe3, 0x5c, 0xb3, 0x2e, 0xe5, 0x9d, 0x14, 0x57, 0x8f, 0x95, 0x78, 0x02, 0xc7, 0xac, 0x1c, 0xcf, 0x62, 0xf1, 0x47, 0x9b, 0x6f, 0x7a, 0x67, 0x07, 0xe1, 0x53, 0x07, 0xa3, 0xd6, 0x76, 0xe6, 0x50, 0x54, 0x73, 0x3c, 0x53, 0x7c, 0x6e, 0x39, 0x60, 0x74, 0x7c, 0x6e, 0x39, 0x20, 0x8d, 0xe7, 0x96, 0x03, 0xc6, 0x88, 0xb9, 0x45, 0xa5, 0x24, 0xcd, 0xad, 0xa8, 0xba, 0x4a, 0xa9, 0xe6, 0x34, 0xa6, 0xf8, 0x7c, 0xa1, 0xf4, 0x3c, 0x5f, 0x38, 0x3c, 0xed, 0xed, 0xf5, 0x1d, 0xd1, 0x0e, 0x4c, 0x6f, 0x97, 0xbc, 0xa5, 0xfe, 0x52, 0xfe, 0x6e, 0x16, 0x65, 0xb5, 0x40, 0xa6, 0x03, 0xc6, 0x92, 0x8f, 0xa4, 0x35, 0xa2, 0xac, 0x74, 0x2c, 0xab, 0x03, 0xcb, 0xba, 0xc9, 0x06, 0xa4, 0x1b, 0xc0, 0x65, 0x7d, 0xe3, 0xe4, 0xd7, 0xb9, 0x36, 0xa5, 0x27, 0x17, 0xe8, 0xa5, 0x7a, 0xad, 0x25, 0xe4, 0x61, 0x92, 0xbc, 0x1d, 0xe9, 0xd6, 0x14, 0xcd, 0x71, 0x1b, 0x2e, 0x16, 0xb6, 0x6f, 0xb3, 0x0c, 0x26, 0x92, 0x94, 0x28, 0x42, 0x7e, 0x8b, 0x90, 0x7e, 0x4c, 0xa6, 0x11, 0xd9, 0xcf, 0x4d, 0x00, 0x71, 0x28, 0x2f, 0xe1, 0x50, 0x3e, 0xd2, 0x07, 0xdc, 0xa9, 0xdb, 0x9a, 0x23, 0x1c, 0x7f, 0x02, 0x52, 0x68, 0x59, 0x98, 0xda, 0xe3, 0xfd, 0x4f, 0xff, 0x72, 0xe9, 0x79, 0x91, 0x1e, 0x77, 0xc9, 0x21, 0xbc, 0xb4, 0xd8, 0x1c, 0xd0, 0x71, 0x05, 0x5b, 0x7c, 0x7f, 0xcc, 0x11, 0x9a, 0xa6, 0xb4, 0x3f, 0xc4, 0xed, 0x93, 0x91, 0xa6, 0xf3, 0x04, 0xf7, 0x54, 0x8e, 0xcd, 0x74, 0xc0, 0x30, 0xcc, 0x42, 0x8f, 0x9d, 0x98, 0xd3, 0x31, 0xec, 0xe5, 0x9a, 0xfd, 0xa1, 0x35, 0x8e, 0x9b, 0xe4, 0x0c, 0xdb, 0xc5, 0x7c, 0xcc, 0x77, 0x9c, 0x7d, 0x6d, 0x6d, 0x93, 0xf7, 0x73, 0x8a, 0x73, 0x3d, 0x38, 0xc6, 0x92, 0x9f, 0xa0, 0xe6, 0x5c, 0x77, 0x0f, 0x6f, 0x1a, 0x21, 0x17, 0x4a, 0x94, 0x87, 0x23, 0xd3, 0x0d, 0x53, 0x58, 0xaa, 0x3a, 0x31, 0x53, 0x72, 0x93, 0x66, 0x4a, 0xae, 0x3e, 0x53, 0x72, 0x61, 0x0c, 0xef, 0x27, 0x83, 0x9f, 0x74, 0x3e, 0x00, 0x27, 0x23, 0xc6, 0xe4, 0x76, 0x3a, 0x44, 0xe8, 0x1e, 0xc7, 0x7d, 0x9f, 0xf5, 0xb2, 0x5c, 0xdb, 0x44, 0x65, 0x1e, 0xcf, 0x1e, 0x73, 0xd2, 0xac, 0x1a, 0x1b, 0x87, 0x42, 0x34, 0x53, 0x08, 0x0a, 0xe1, 0x4c, 0x71, 0xa4, 0x90, 0x76, 0xc5, 0xa7, 0x9b, 0x81, 0xc2, 0x42, 0xd1, 0xc9, 0x85, 0x3a, 0xc4, 0xf2, 0xb9, 0x53, 0x10, 0x7a, 0x89, 0xd9, 0xe5, 0xc1, 0xfd, 0x22, 0x8d, 0xbd, 0xff, 0xf2, 0x6e, 0xab, 0xcc, 0x13, 0x6b, 0xe7, 0x7a, 0x3b, 0x6e, 0x24, 0xa5, 0x47, 0xbe, 0xd9, 0x03, 0xa3, 0xaf, 0xbb, 0xf3, 0x16, 0x26, 0x76, 0xde, 0x85, 0x39, 0x3a, 0x7f, 0x9d, 0x2c, 0x2b, 0xdd, 0x68, 0x6c, 0x57, 0xc5, 0xc7, 0xd6, 0x36, 0x6c, 0x6c, 0xfd, 0xb1, 0xb1, 0x25, 0x9b, 0x8a, 0x43, 0xab, 0x15, 0xf9, 0xfd, 0x2e, 0xb6, 0x2e, 0xf1, 0xbc, 0xff, 0x6e, 0x13, 0xb0, 0xa5, 0x4b, 0x9d, 0x9f, 0x19, 0xce, 0x10, 0xb0, 0x2b, 0x19, 0x8a, 0x07, 0x3b, 0x22, 0x86, 0xde, 0x8e, 0xd0, 0xcb, 0xde, 0x1b, 0x8c, 0xef, 0xc0, 0xa6, 0xd8, 0xf8, 0x2e, 0x14, 0x14, 0x3a, 0x61, 0xef, 0xd9, 0x74, 0xe6, 0x45, 0x73, 0xec, 0x9a, 0x79, 0x46, 0xa3, 0x45, 0xf2, 0xcf, 0x63, 0x68, 0x57, 0x03, 0x73, 0x6c, 0x57, 0x8b, 0x40, 0xbe, 0x64, 0x66, 0xf1, 0x9a, 0xb0, 0x62, 0x66, 0x11, 0xa2, 0x30, 0xfb, 0xeb, 0x34, 0x41, 0xd8, 0x22, 0xf0, 0xaf, 0x38, 0xf6, 0x8c, 0x3b, 0x3a, 0x4b, 0x9f, 0x8e, 0xb5, 0x4b, 0x73, 0x3b, 0x5f, 0x6c, 0x0f, 0x99, 0x03, 0xed, 0x61, 0x93, 0xf0, 0x55, 0xb1, 0x18, 0x31, 0xc5, 0x18, 0x9d, 0x4d, 0x34, 0x2c, 0xa6, 0x94, 0x00, 0x28, 0xd4, 0xec, 0xd4, 0x3e, 0x84, 0x9b, 0x17, 0x1b, 0x03, 0x1d, 0x61, 0x95, 0xf0, 0xc9, 0x1b, 0xee, 0xac, 0x1e, 0x0c, 0x7f, 0xbe, 0xf9, 0xa6, 0x83, 0xd1, 0xb0, 0x21, 0x00, 0x0d, 0x05, 0xf8, 0xf6, 0x4a, 0xfc, 0xcd, 0x86, 0x6f, 0x6f, 0xc6, 0xdf, 0xb2, 0xf0, 0xed, 0x3c, 0xbf, 0xa5, 0xd3, 0xea, 0xeb, 0x8f, 0x3e, 0x40, 0xde, 0x40, 0x74, 0x7c, 0x83, 0xa0, 0x08, 0xf3, 0xc8, 0x89, 0x3b, 0x40, 0x3e, 0x43, 0xd2, 0x43, 0xfe, 0xf8, 0xb8, 0x25, 0x6b, 0x70, 0x43, 0x38, 0x9f, 0xe8, 0x12, 0x5d, 0x53, 0xfa, 0xe0, 0x35, 0x3d, 0x2c, 0x23, 0x96, 0x6c, 0xab, 0xda, 0x7f, 0xc5, 0xc1, 0x56, 0xb3, 0xdc, 0x82, 0x2b, 0x48, 0x90, 0x46, 0xe8, 0x97, 0x17, 0x17, 0xdb, 0x89, 0x56, 0x22, 0xfb, 0x8e, 0x31, 0x7c, 0xcc, 0xdc, 0xf3, 0x0c, 0x14, 0x26, 0xf6, 0x7d, 0x01, 0x5b, 0x63, 0x1e, 0x72, 0x6f, 0x2e, 0x41, 0x48, 0xc2, 0xcf, 0xf8, 0x34, 0x9a, 0x3c, 0xe4, 0xe2, 0x3d, 0x0d, 0x67, 0xe0, 0x18, 0xab, 0x2c, 0x52, 0xe4, 0xcb, 0xd7, 0x49, 0x63, 0x8e, 0xa7, 0x19, 0xab, 0xa7, 0x49, 0xc7, 0x34, 0x37, 0xcd, 0x16, 0x94, 0x39, 0x61, 0x6b, 0x66, 0xa2, 0x10, 0x1c, 0xe0, 0x24, 0x1e, 0xef, 0x28, 0x41, 0x2f, 0xd8, 0xd9, 0x2f, 0x6b, 0x8a, 0x56, 0x5b, 0x28, 0xbc, 0x70, 0x61, 0xb8, 0x81, 0xc2, 0x31, 0xa5, 0xe4, 0x48, 0x21, 0x1f, 0x42, 0x29, 0x70, 0x6a, 0x63, 0x22, 0x75, 0x10, 0xa2, 0x06, 0xfc, 0x26, 0xdf, 0x5c, 0x0a, 0x29, 0x6a, 0xfa, 0xcd, 0x6d, 0x48, 0x8f, 0x4b, 0xd5, 0x67, 0x40, 0xc6, 0x2b, 0x65, 0xf6, 0x25, 0x87, 0x56, 0x91, 0x28, 0x6d, 0xac, 0xc0, 0xc6, 0x1c, 0x54, 0x9a, 0x41, 0xe0, 0x66, 0xb6, 0x78, 0x69, 0x15, 0xa2, 0x34, 0x1d, 0x87, 0xc3, 0x1c, 0x47, 0xd9, 0x65, 0xb9, 0x93, 0x4b, 0xbb, 0x2f, 0x91, 0x1a, 0x4b, 0x4b, 0xc1, 0x6f, 0xc6, 0x9b, 0xbd, 0x90, 0xaa, 0x97, 0x36, 0x0a, 0x4b, 0x32, 0xe2, 0x95, 0x5a, 0xf9, 0x56, 0x31, 0xe2, 0x8b, 0x77, 0x76, 0xb3, 0x64, 0x31, 0xd9, 0x58, 0x59, 0x0e, 0x13, 0x49, 0x7f, 0xe0, 0x4b, 0xf3, 0x5a, 0xbc, 0x47, 0xef, 0x23, 0x1a, 0x6d, 0x46, 0xbf, 0xab, 0x98, 0xa0, 0xa3, 0xa0, 0xde, 0xf2, 0x98, 0x6a, 0x43, 0xba, 0x6e, 0x95, 0x12, 0xdb, 0x6d, 0x01, 0x36, 0xeb, 0x3c, 0x7d, 0xe2, 0xfd, 0xd7, 0xaa, 0xd9, 0xfa, 0xae, 0x0e, 0xf0, 0x7d, 0x7d, 0x5f, 0x07, 0xa9, 0x12, 0x53, 0x4c, 0x27, 0x4e, 0xad, 0x75, 0x18, 0x67, 0xc5, 0x81, 0x21, 0x76, 0x17, 0xd8, 0x90, 0xaa, 0x33, 0x23, 0xe6, 0x9c, 0x89, 0x2b, 0x49, 0x72, 0xa7, 0xbb, 0x4b, 0xa0, 0x88, 0x7a, 0x89, 0xa4, 0xcd, 0x83, 0x5d, 0x0f, 0xfc, 0x92, 0xbd, 0xf9, 0x08, 0xca, 0x2e, 0xc5, 0x4a, 0x56, 0x19, 0x25, 0x7e, 0xdb, 0x14, 0x0f, 0xcd, 0x20, 0xcf, 0x76, 0xba, 0x1d, 0xc1, 0x4c, 0xf2, 0x67, 0xaf, 0x04, 0xad, 0x98, 0xf3, 0xb8, 0x3b, 0x71, 0x7e, 0x05, 0x63, 0x10, 0xc9, 0xea, 0xab, 0x7a, 0x80, 0xf0, 0x16, 0xa2, 0xde, 0x30, 0xce, 0x0f, 0x14, 0x17, 0x18, 0x78, 0x75, 0x19, 0x58, 0xe3, 0x67, 0x67, 0x8c, 0x86, 0x21, 0x8c, 0x83, 0xa9, 0xec, 0x89, 0x0c, 0x31, 0x0d, 0x4a, 0xe9, 0xb3, 0x7d, 0xe4, 0x1b, 0x85, 0x4f, 0x0e, 0x4e, 0xdf, 0xec, 0x61, 0x1c, 0x8d, 0x63, 0x0a, 0x2f, 0x15, 0x31, 0x08, 0x83, 0x14, 0x72, 0xd6, 0xeb, 0x7d, 0x58, 0x72, 0x65, 0xe2, 0x04, 0xf1, 0x6a, 0x8f, 0xbe, 0x9f, 0x66, 0x90, 0xbd, 0x29, 0xdb, 0x46, 0x84, 0x81, 0x58, 0xde, 0x67, 0x10, 0x0a, 0x26, 0x78, 0x8e, 0x5a, 0x3c, 0x3f, 0x84, 0x46, 0x09, 0x4e, 0xe4, 0x45, 0xc6, 0xfc, 0x32, 0x94, 0x60, 0x60, 0x17, 0x59, 0xff, 0x05, 0x8b, 0x16, 0x55, 0x0d, 0xb2, 0x05, 0xbe, 0x5b, 0xf2, 0x21, 0x78, 0x48, 0xbb, 0x2c, 0x46, 0xd5, 0x3b, 0xc4, 0x49, 0x41, 0x33, 0x51, 0x8d, 0xd5, 0xbc, 0x52, 0x66, 0xce, 0x24, 0xb9, 0x6a, 0x5c, 0x29, 0x64, 0xcb, 0xa7, 0xd0, 0x3d, 0x0d, 0x96, 0x91, 0x2e, 0x12, 0x8d, 0xcf, 0xac, 0x81, 0x3f, 0x9f, 0x8c, 0x9f, 0xed, 0x83, 0x14, 0x52, 0x3c, 0x44, 0xd7, 0x27, 0xc5, 0x50, 0xe2, 0x5f, 0x4d, 0x56, 0x4f, 0xe1, 0x54, 0x30, 0xaa, 0xc4, 0x7d, 0xa5, 0x3e, 0xc9, 0x2a, 0x39, 0x2d, 0x1d, 0xf4, 0x7a, 0x02, 0x96, 0xb0, 0xa1, 0x45, 0x53, 0xe5, 0x42, 0x08, 0x7a, 0xcc, 0x64, 0x75, 0xc1, 0x5c, 0x72, 0x1a, 0x2c, 0x66, 0xaf, 0xa6, 0x85, 0x4f, 0xa9, 0x26, 0xbe, 0x83, 0x94, 0x1e, 0xc3, 0x07, 0x66, 0xc8, 0xfe, 0x5f, 0xb9, 0x46, 0xbd, 0xbf, 0xc9, 0x61, 0x34, 0xae, 0xa1, 0x3e, 0x3a, 0x7e, 0x5f, 0x52, 0x59, 0x93, 0xaa, 0xf6, 0xff, 0x39, 0xa8, 0x97, 0x96, 0xa3, 0x78, 0x02, 0x64, 0xe5, 0xd8, 0x10, 0x41, 0xb8, 0xe2, 0x05, 0xf2, 0xd1, 0x55, 0xf2, 0x51, 0x36, 0x8c, 0xf3, 0x48, 0xcf, 0xab, 0xa6, 0x92, 0x8f, 0x96, 0x80, 0xd7, 0x21, 0x3d, 0x9f, 0x94, 0x36, 0x05, 0xd3, 0x12, 0xd5, 0x63, 0x7e, 0xff, 0x7e, 0xf2, 0x8a, 0xf4, 0xbb, 0x5f, 0xb1, 0xf5, 0x55, 0x03, 0x51, 0xfa, 0xaa, 0xf1, 0x77, 0xbf, 0x42, 0x9c, 0xe3, 0xa0, 0xb3, 0x01, 0x6c, 0x4e, 0x9c, 0x57, 0x38, 0xbf, 0x70, 0x5e, 0x09, 0x0e, 0x2c, 0xae, 0x4b, 0xe6, 0xcd, 0xe1, 0x7c, 0x23, 0x6a, 0xe7, 0x7e, 0x86, 0xa0, 0x5b, 0x78, 0x0e, 0x8d, 0x75, 0x8f, 0xe2, 0xa7, 0xce, 0x78, 0x08, 0x5b, 0x47, 0xf8, 0x6b, 0x97, 0xdb, 0x20, 0x3c, 0xc2, 0x08, 0x3b, 0xc9, 0x97, 0x9d, 0x6c, 0x13, 0x47, 0x09, 0x67, 0x5e, 0xbb, 0x7f, 0xa8, 0x59, 0xfa, 0x68, 0x1b, 0x04, 0x3e, 0xa1, 0x53, 0xf4, 0x82, 0x2a, 0x6b, 0xd3, 0xcf, 0x36, 0xdc, 0xc2, 0xe6, 0x8b, 0x8e, 0x87, 0xcf, 0x88, 0x5b, 0x2e, 0xb9, 0x1e, 0x26, 0x2f, 0xec, 0xda, 0xc5, 0x42, 0xd3, 0x86, 0x87, 0x62, 0x7c, 0x0b, 0x7e, 0xc9, 0xa4, 0x59, 0x96, 0xc8, 0x25, 0xd9, 0x26, 0xee, 0x8d, 0x68, 0x81, 0xe2, 0x7c, 0x5b, 0xc9, 0x2a, 0x60, 0x4c, 0x3e, 0x44, 0x16, 0xbf, 0x91, 0x46, 0x34, 0x29, 0x29, 0xfd, 0x5d, 0xfb, 0xa2, 0x75, 0xc6, 0xed, 0x5d, 0x61, 0x87, 0x2a, 0x3b, 0x52, 0xf4, 0xd3, 0x07, 0x83, 0x5b, 0x26, 0x6b, 0x56, 0x4a, 0x46, 0xf3, 0xe8, 0x3f, 0xee, 0xb0, 0x2e, 0x95, 0x32, 0x5f, 0xeb, 0xf3, 0x47, 0xb6, 0x67, 0x0a, 0xc9, 0x8e, 0x37, 0xd6, 0x28, 0x86, 0x7e, 0x21, 0x4f, 0x6f, 0x60, 0xfb, 0x1d, 0x99, 0x24, 0x5d, 0xaf, 0x64, 0x04, 0xa3, 0x36, 0xb2, 0x2a, 0x6e, 0xee, 0xdd, 0x21, 0x65, 0x87, 0x4d, 0xdb, 0xd6, 0x1c, 0x5d, 0x13, 0xe8, 0x6c, 0xda, 0xa6, 0x8c, 0xaa, 0x7c, 0xcb, 0x5c, 0xac, 0x5b, 0x14, 0x2e, 0x21, 0x5b, 0x46, 0x81, 0xce, 0x70, 0x76, 0xb3, 0xb4, 0xbb, 0x33, 0x6c, 0x22, 0x4d, 0x8b, 0xd0, 0x44, 0xb6, 0x40, 0x6b, 0x22, 0x0f, 0x69, 0xaa, 0x7c, 0x34, 0x1a, 0xe8, 0x68, 0x34, 0xef, 0x41, 0xcc, 0xab, 0xce, 0x38, 0xc9, 0x4b, 0xde, 0xc1, 0xc8, 0x36, 0xbc, 0x6e, 0x53, 0x98, 0x29, 0x84, 0x08, 0xee, 0x8d, 0xaa, 0xa1, 0x7f, 0x7b, 0xb0, 0xfd, 0x47, 0xbf, 0xa8, 0xbd, 0xac, 0x5b, 0xd4, 0x35, 0x29, 0x4e, 0x29, 0x33, 0x9c, 0xae, 0xd7, 0x1e, 0x70, 0x9f, 0x39, 0x13, 0xb3, 0xc5, 0xe9, 0x5f, 0x29, 0xe5, 0xb0, 0xf7, 0xc5, 0xcd, 0x31, 0x8b, 0xb5, 0x88, 0x41, 0x16, 0x91, 0x55, 0x0f, 0x3d, 0x36, 0x63, 0x5c, 0x18, 0x6b, 0x22, 0xc6, 0xa9, 0xb1, 0x25, 0x6c, 0xc6, 0x5d, 0x20, 0x7a, 0x6f, 0x92, 0x07, 0xb2, 0x6c, 0x07, 0x82, 0xbe, 0xb9, 0xb3, 0x23, 0xc4, 0x95, 0x35, 0x4c, 0x5e, 0x0e, 0x56, 0xb0, 0xb0, 0x7d, 0x91, 0x6c, 0xbc, 0x72, 0xf0, 0x52, 0x58, 0x07, 0xca, 0x03, 0x64, 0x17, 0xde, 0x85, 0x57, 0x3e, 0x5e, 0x85, 0x78, 0x15, 0x91, 0x85, 0x3f, 0xa4, 0x99, 0x9d, 0x78, 0xf7, 0x60, 0xba, 0xe9, 0xe0, 0xc3, 0xdf, 0x02, 0xf0, 0xe3, 0x7b, 0x35, 0x5e, 0x2a, 0x5e, 0x75, 0xcc, 0x1d, 0x8e, 0xea, 0x54, 0x7a, 0x2e, 0x4c, 0xc7, 0xab, 0x40, 0xf8, 0x33, 0x64, 0x0b, 0x20, 0x6b, 0x22, 0x32, 0xfe, 0x76, 0x51, 0x2e, 0xfc, 0x4e, 0x7b, 0x49, 0x01, 0xc5, 0xd3, 0x79, 0xc2, 0x3d, 0x37, 0x23, 0x05, 0x23, 0x41, 0xc9, 0x19, 0x49, 0x9e, 0xec, 0x97, 0xd2, 0xbc, 0x3b, 0x25, 0x63, 0xe9, 0x19, 0xc9, 0x38, 0xb9, 0x42, 0x92, 0x31, 0xcc, 0x82, 0x61, 0xd9, 0x18, 0x96, 0x89, 0x61, 0x99, 0x18, 0x66, 0xb9, 0x11, 0x95, 0xae, 0x73, 0x68, 0xde, 0xca, 0x89, 0xf1, 0x3f, 0xd9, 0x36, 0x91, 0xf9, 0x01, 0xa6, 0xa6, 0x72, 0x88, 0x66, 0x42, 0x2c, 0xbe, 0x0a, 0xaf, 0xf9, 0x71, 0xbf, 0x7b, 0x38, 0xd6, 0x09, 0xae, 0xa6, 0x90, 0xa4, 0x61, 0xbe, 0xe9, 0xb2, 0x38, 0xcf, 0xf4, 0x56, 0x9d, 0x57, 0x6a, 0x0b, 0x3b, 0x75, 0x2e, 0xe6, 0x0c, 0x3a, 0x0f, 0xb0, 0xee, 0x84, 0x0e, 0x9d, 0x6b, 0x6a, 0x40, 0xda, 0xcb, 0xca, 0x94, 0x9e, 0xd4, 0xf7, 0x04, 0x62, 0xf4, 0x51, 0xc1, 0xe5, 0x64, 0x7f, 0xeb, 0x9f, 0x21, 0xfe, 0x11, 0xf9, 0x0c, 0xf2, 0xf5, 0x24, 0xca, 0x21, 0x7b, 0x8e, 0x7c, 0xb6, 0x88, 0x70, 0xce, 0xb5, 0x04, 0x42, 0x07, 0xe8, 0x44, 0x71, 0x9e, 0xbb, 0x0d, 0x06, 0xaa, 0x2e, 0x20, 0xee, 0xc0, 0xe3, 0xa9, 0x7b, 0x57, 0x9a, 0x81, 0xbb, 0x49, 0x0e, 0x69, 0xe5, 0x6a, 0x79, 0x88, 0x5f, 0x28, 0x14, 0xe7, 0x2b, 0x98, 0x89, 0xf7, 0x19, 0x30, 0xe1, 0x45, 0xd6, 0x22, 0x41, 0x3a, 0x07, 0x16, 0x37, 0x42, 0x4b, 0x2c, 0xf9, 0xa6, 0xea, 0xe8, 0x03, 0x87, 0x4a, 0x11, 0xff, 0x78, 0xf0, 0x65, 0x5c, 0x45, 0xf1, 0x73, 0x49, 0x61, 0x79, 0x2f, 0xbe, 0xf2, 0xc6, 0xe9, 0x5c, 0x59, 0xa7, 0xbe, 0xef, 0x49, 0x88, 0xeb, 0xad, 0x51, 0x33, 0xf4, 0xfd, 0x50, 0x11, 0x67, 0xdf, 0xa1, 0x88, 0x5a, 0x4b, 0xd4, 0xa3, 0x75, 0x07, 0x14, 0xaa, 0x2a, 0x3d, 0x21, 0xa4, 0xec, 0xb3, 0x76, 0xa9, 0xf3, 0xe8, 0xd9, 0x3b, 0x15, 0x46, 0xdf, 0xba, 0x04, 0x0a, 0x21, 0x1d, 0x7f, 0x8b, 0x20, 0xe3, 0x56, 0xb2, 0x56, 0x99, 0x85, 0xbf, 0x1e, 0x98, 0x80, 0xbf, 0x3e, 0x98, 0x88, 0xbf, 0x7e, 0xb0, 0xe2, 0x6f, 0x25, 0xd8, 0xf1, 0xb7, 0x1a, 0x9c, 0xf8, 0x3b, 0x0f, 0xf2, 0xf0, 0xb7, 0x06, 0x0a, 0xf0, 0x57, 0x85, 0x19, 0xaa, 0x49, 0x2f, 0xa1, 0x28, 0x12, 0xa7, 0x8e, 0xd9, 0x56, 0x5a, 0x9c, 0x2a, 0xd2, 0x39, 0x7a, 0xe5, 0x3a, 0x0f, 0x37, 0x6b, 0xd6, 0x19, 0xd8, 0x1c, 0x5f, 0x0f, 0x74, 0x7e, 0x6a, 0x46, 0x18, 0xb7, 0xcb, 0xbb, 0xc5, 0x3d, 0x06, 0xf7, 0x49, 0x17, 0x86, 0x40, 0x12, 0x3e, 0xbf, 0x59, 0x78, 0x4c, 0x1d, 0xe6, 0x69, 0x83, 0xe7, 0x06, 0x9d, 0xa0, 0x22, 0x16, 0x96, 0x6d, 0x17, 0x56, 0xb5, 0xe8, 0x64, 0x77, 0x02, 0x8e, 0x43, 0x96, 0xdb, 0x85, 0x10, 0x7a, 0x0c, 0x43, 0x68, 0xa9, 0x6c, 0xe0, 0xaf, 0xd1, 0xaa, 0xcd, 0x4e, 0x4f, 0x52, 0x98, 0x5c, 0xb5, 0xd9, 0xee, 0xb1, 0x35, 0x49, 0x6c, 0x17, 0x55, 0xb7, 0xf1, 0xec, 0xda, 0xcf, 0x12, 0x5b, 0x58, 0xdf, 0xcc, 0xde, 0xa7, 0xb0, 0xd7, 0x26, 0xec, 0x15, 0x92, 0x14, 0xb9, 0xec, 0x7f, 0xa4, 0x8f, 0x6c, 0xb5, 0xe1, 0xfe, 0x66, 0x50, 0xd2, 0x54, 0xb3, 0xad, 0xd2, 0x11, 0x24, 0xd9, 0x84, 0xd0, 0xe1, 0xd8, 0x69, 0x28, 0xce, 0x83, 0xc3, 0xec, 0x6b, 0xd0, 0x0d, 0xd5, 0x58, 0x97, 0x79, 0x15, 0x67, 0xb1, 0x75, 0xcc, 0xe3, 0x84, 0x62, 0xdc, 0x27, 0x2b, 0x4b, 0x4e, 0x6b, 0xc4, 0x5d, 0xf6, 0xe0, 0x48, 0xfb, 0xf0, 0xf2, 0x8f, 0xe0, 0x73, 0x02, 0x74, 0x30, 0x27, 0x33, 0xcf, 0x3a, 0xbb, 0xec, 0x43, 0x28, 0x66, 0xbd, 0xb5, 0x38, 0x2f, 0x53, 0xb1, 0xe8, 0x5e, 0xcf, 0x17, 0x5a, 0xdc, 0x30, 0xc1, 0x0c, 0x90, 0x1f, 0x36, 0xe2, 0x6f, 0x6b, 0xa8, 0xb2, 0x15, 0xca, 0x98, 0x97, 0xe5, 0x36, 0xeb, 0x7c, 0x2c, 0x9d, 0x36, 0x0d, 0x15, 0x98, 0xb7, 0x12, 0x84, 0x08, 0x67, 0x58, 0x52, 0x82, 0x10, 0xec, 0x6c, 0xb6, 0x20, 0x54, 0x7b, 0x03, 0xd3, 0x58, 0xc2, 0xd9, 0x64, 0x8b, 0x92, 0xfb, 0xda, 0x4b, 0xed, 0xf9, 0xda, 0xb0, 0x1e, 0x5d, 0x68, 0xc6, 0xf4, 0x74, 0x1e, 0x4f, 0x36, 0xb4, 0x79, 0x77, 0xd0, 0x2d, 0x72, 0x1b, 0xac, 0xc7, 0x83, 0xd1, 0xdd, 0xd1, 0xd0, 0xe5, 0x4f, 0xfa, 0x12, 0xd7, 0x0b, 0x5b, 0x01, 0x1e, 0xc2, 0xde, 0x5a, 0x7c, 0x47, 0xbb, 0x67, 0xb3, 0xce, 0x57, 0xc5, 0xc0, 0x95, 0x57, 0x5b, 0x27, 0x1f, 0xdb, 0xb0, 0xd2, 0x7b, 0xfc, 0x3e, 0x67, 0x9a, 0x71, 0x2d, 0xd1, 0x0d, 0x64, 0x57, 0x79, 0xde, 0xe3, 0x64, 0x61, 0x19, 0x31, 0x32, 0x59, 0x5f, 0xa1, 0x56, 0x84, 0x72, 0x6b, 0x74, 0xee, 0x89, 0x1c, 0x3f, 0xd9, 0x00, 0x78, 0x47, 0xf5, 0xeb, 0x2b, 0x18, 0x69, 0x4c, 0xb1, 0x86, 0x31, 0xf4, 0x30, 0x62, 0x4f, 0x7b, 0x5c, 0x84, 0x37, 0x08, 0x0c, 0x7e, 0x7e, 0xb0, 0x4b, 0xc7, 0xe0, 0x0d, 0xee, 0xf4, 0xaa, 0xad, 0x4a, 0x56, 0x30, 0xea, 0x26, 0x4d, 0xde, 0x74, 0xdd, 0xc6, 0x66, 0x0e, 0xc6, 0xdf, 0x1e, 0xe7, 0x37, 0x19, 0xdc, 0xa9, 0x24, 0x61, 0x86, 0xf1, 0xdc, 0xe0, 0x9b, 0xe2, 0x81, 0x0e, 0x84, 0x5e, 0x7d, 0x7c, 0x82, 0xde, 0xcc, 0x79, 0xa6, 0x57, 0x3d, 0x68, 0x85, 0x60, 0x7b, 0xde, 0x4f, 0x18, 0x26, 0x4b, 0x38, 0x0f, 0xd2, 0x70, 0xa5, 0x23, 0x04, 0xc5, 0x75, 0xec, 0xa9, 0xda, 0xaa, 0x97, 0x49, 0x7c, 0x78, 0xc0, 0xde, 0xa7, 0x2f, 0x95, 0x55, 0x5b, 0xb1, 0x67, 0xaa, 0xbd, 0x05, 0xd9, 0x36, 0x0c, 0xaf, 0x44, 0x0c, 0xcd, 0xc6, 0x16, 0x28, 0xad, 0x3a, 0x46, 0x21, 0xa9, 0x99, 0x91, 0x21, 0xd5, 0xc4, 0x6f, 0xa6, 0xc8, 0xd5, 0x5f, 0xec, 0x44, 0x1c, 0xd1, 0x18, 0x91, 0xdb, 0xf1, 0xae, 0x78, 0xb1, 0x5f, 0x8b, 0x87, 0x9d, 0x8f, 0xc0, 0xd0, 0xb9, 0x61, 0xfc, 0xf7, 0x19, 0x34, 0xcf, 0x89, 0x16, 0xc5, 0x39, 0xa6, 0xf0, 0x5c, 0x96, 0xf5, 0xb9, 0xbc, 0xff, 0xf2, 0xa3, 0x71, 0x4c, 0x2a, 0x7f, 0xf8, 0x1e, 0x62, 0xd9, 0x8c, 0x5f, 0x33, 0x13, 0x76, 0x47, 0xa5, 0x8c, 0x88, 0x32, 0xd2, 0x1f, 0xf0, 0x14, 0xb2, 0x7a, 0x87, 0x7d, 0x3c, 0x62, 0xf7, 0xc1, 0x3d, 0xeb, 0x2f, 0x6f, 0xc4, 0xf7, 0x9e, 0x3d, 0x53, 0x02, 0x90, 0x3e, 0x65, 0x19, 0x9d, 0x4c, 0x4e, 0x21, 0xea, 0xde, 0xa3, 0x1c, 0x20, 0xf9, 0xdf, 0x66, 0xf6, 0xf9, 0x49, 0x76, 0xef, 0x68, 0x4e, 0x5d, 0x1d, 0x62, 0x09, 0xb2, 0x25, 0x82, 0x3b, 0x81, 0xbb, 0x68, 0x2e, 0x84, 0x76, 0x3f, 0x01, 0xa1, 0xfa, 0x34, 0xc4, 0x8a, 0xc6, 0x85, 0x2e, 0x60, 0xff, 0x3f, 0x44, 0xb0, 0x5b, 0x94, 0x5d, 0xd3, 0xc5, 0xfe, 0xa0, 0x4d, 0x56, 0xd2, 0x62, 0xcc, 0x52, 0x8d, 0x7c, 0xb7, 0x0c, 0x6f, 0xd9, 0x5f, 0x5e, 0xd4, 0xa5, 0x7e, 0x6a, 0xbc, 0xb9, 0x30, 0x33, 0xb6, 0x6a, 0xb0, 0x06, 0xd6, 0x29, 0xcb, 0xe9, 0xb4, 0x12, 0x7f, 0xe7, 0xc3, 0x74, 0x85, 0x24, 0x5b, 0xa2, 0x3d, 0x4f, 0x42, 0x08, 0xbf, 0x38, 0x31, 0xac, 0x19, 0x21, 0x92, 0x5d, 0x6f, 0x0f, 0x8e, 0x1b, 0xe6, 0xd3, 0x90, 0xd8, 0x7d, 0x91, 0xd2, 0x47, 0x1a, 0xfa, 0x2f, 0x99, 0x94, 0xf3, 0xf7, 0x7e, 0x4d, 0xfe, 0x6e, 0xd8, 0x93, 0xb4, 0x6e, 0x05, 0xcb, 0x4f, 0x16, 0x5c, 0xf7, 0xff, 0xc5, 0x2c, 0x2c, 0x47, 0x68, 0xcd, 0x3a, 0x67, 0x29, 0xd3, 0xbc, 0xd9, 0x5b, 0xe2, 0xf3, 0x86, 0xfc, 0x64, 0x6f, 0x99, 0xf1, 0x2f, 0x99, 0xe1, 0x41, 0xd1, 0xf0, 0x5e, 0x93, 0xd3, 0xab, 0xf6, 0x7f, 0xfc, 0x58, 0xbc, 0xbf, 0x73, 0x62, 0x65, 0xca, 0xe0, 0xc7, 0xd5, 0x4c, 0xe9, 0x3e, 0x3e, 0xc4, 0x73, 0x4c, 0xa6, 0x92, 0x63, 0xfe, 0x18, 0x18, 0x86, 0xe5, 0x10, 0x0c, 0x33, 0x6f, 0xa1, 0x5e, 0x25, 0x29, 0x25, 0xb6, 0xec, 0x49, 0xf5, 0x7c, 0x88, 0xcb, 0x01, 0x29, 0xf3, 0xda, 0x91, 0xfd, 0x78, 0x46, 0x12, 0x76, 0xf0, 0xf1, 0xb5, 0x23, 0x3b, 0x59, 0x8c, 0xec, 0x8b, 0xf1, 0x39, 0xaf, 0x8f, 0xeb, 0xc7, 0xb2, 0x33, 0x91, 0x6e, 0x7b, 0x12, 0x14, 0x46, 0x38, 0x3c, 0x6b, 0xe0, 0x63, 0x7b, 0xd5, 0x96, 0xc9, 0x95, 0x90, 0x3e, 0xb9, 0x81, 0x46, 0x7b, 0xf2, 0x1c, 0x98, 0x28, 0x62, 0x20, 0x5c, 0x9e, 0xc6, 0xd6, 0x42, 0x9c, 0x90, 0xe6, 0x6f, 0x84, 0xc9, 0x55, 0x5b, 0x44, 0x08, 0x8e, 0x79, 0x9a, 0x37, 0xdf, 0x04, 0xb3, 0x3f, 0x00, 0xb2, 0x11, 0xa2, 0x28, 0x37, 0xd3, 0xba, 0x23, 0x7e, 0x0b, 0x59, 0x2f, 0xfb, 0xeb, 0xde, 0x4f, 0x3a, 0x67, 0x56, 0x9c, 0x3c, 0x72, 0x3b, 0x21, 0x94, 0x38, 0x61, 0xe6, 0x9e, 0xb7, 0xc7, 0xed, 0x96, 0x63, 0x9f, 0xfd, 0xf9, 0xe9, 0x61, 0xa3, 0x47, 0x21, 0xf3, 0x13, 0x7c, 0x1a, 0x82, 0xbf, 0x89, 0x51, 0x2a, 0x9f, 0xeb, 0xf7, 0x85, 0x16, 0xc6, 0x46, 0xe9, 0xe3, 0x85, 0xdc, 0x7b, 0x95, 0x23, 0xe6, 0x36, 0xd2, 0xfd, 0x97, 0x86, 0xe2, 0xa3, 0x94, 0x9f, 0xe8, 0x01, 0x1c, 0x25, 0x96, 0x2b, 0xf8, 0xb3, 0xb5, 0xe4, 0x2c, 0xf4, 0x4d, 0xf1, 0x63, 0xcb, 0x72, 0x61, 0xf4, 0x14, 0xdc, 0xab, 0x27, 0x6f, 0x80, 0xf4, 0x6b, 0x47, 0xae, 0xa8, 0x88, 0xb4, 0xed, 0xf5, 0xf3, 0x53, 0x92, 0xcc, 0xb0, 0x21, 0x3e, 0xb9, 0xb0, 0x05, 0x2a, 0x18, 0x2e, 0x23, 0x95, 0x73, 0x42, 0xcd, 0xc3, 0x7d, 0x8c, 0x20, 0x84, 0x41, 0xd8, 0x11, 0xc0, 0xda, 0xd8, 0xcc, 0x9b, 0x2b, 0xe7, 0x96, 0xcd, 0x0a, 0xe5, 0xe8, 0xb5, 0x14, 0x67, 0xf4, 0xe9, 0xc1, 0x0e, 0xb2, 0xb3, 0xc6, 0xbe, 0x15, 0x0f, 0xc7, 0xb0, 0xf5, 0x9c, 0x9c, 0xf8, 0xe9, 0x54, 0xac, 0x14, 0x9b, 0xf0, 0x05, 0x41, 0xd8, 0x6b, 0xd5, 0x7e, 0x6d, 0xb5, 0x2e, 0xc9, 0xbd, 0x60, 0xb2, 0x47, 0xca, 0x26, 0xdc, 0x98, 0x38, 0xc3, 0xc9, 0x33, 0x00, 0xb1, 0x50, 0xea, 0xfd, 0x85, 0x2b, 0x49, 0xf6, 0x03, 0xeb, 0xa4, 0x3a, 0xad, 0x88, 0x99, 0xbe, 0xba, 0x86, 0x65, 0x18, 0x28, 0x8f, 0x2d, 0x56, 0x03, 0x79, 0x37, 0x97, 0x63, 0xdc, 0x22, 0x8b, 0xb2, 0x4c, 0xca, 0x54, 0xf2, 0xfd, 0x16, 0x87, 0xc4, 0x75, 0xe9, 0x8f, 0xdb, 0x07, 0x38, 0xc9, 0xd6, 0x33, 0x10, 0xb2, 0xe1, 0x6c, 0xad, 0x46, 0xaa, 0x75, 0x04, 0x47, 0x8c, 0x2d, 0x15, 0x43, 0xca, 0xf4, 0x61, 0xb3, 0x0d, 0x71, 0xd8, 0x8f, 0xb6, 0x26, 0xe0, 0x4f, 0x4a, 0xda, 0x4a, 0xfd, 0xfc, 0xa5, 0x6c, 0xe0, 0xa3, 0xe7, 0x27, 0x18, 0xa8, 0x5f, 0xdc, 0xe6, 0xe4, 0x13, 0x18, 0xf9, 0xf4, 0x30, 0xac, 0x20, 0x45, 0xec, 0x69, 0xe6, 0x2d, 0x62, 0x3f, 0x0b, 0x8e, 0x0a, 0xae, 0x89, 0x58, 0x7a, 0xd7, 0x84, 0x5e, 0x30, 0xb3, 0x9d, 0x08, 0xf9, 0xf1, 0xcf, 0x94, 0x49, 0x80, 0xf4, 0xf9, 0x75, 0xb1, 0xc8, 0xb2, 0xb3, 0x92, 0x3c, 0x25, 0x80, 0x58, 0xe8, 0x93, 0x92, 0xb1, 0xe4, 0xac, 0x64, 0x9c, 0xe2, 0x97, 0xe4, 0xd9, 0x67, 0x25, 0xcb, 0x94, 0x39, 0x88, 0x85, 0x3e, 0x89, 0x58, 0xe8, 0x59, 0x29, 0x73, 0x0a, 0x61, 0xa1, 0x0d, 0x82, 0x57, 0x37, 0x75, 0x39, 0x6e, 0xc6, 0x56, 0xfc, 0xc5, 0xb9, 0x88, 0xbf, 0x3e, 0x98, 0x8e, 0xbf, 0x7e, 0x28, 0x40, 0xf8, 0x92, 0x4d, 0x1c, 0x88, 0x7f, 0x02, 0xe2, 0x48, 0x7c, 0x6d, 0xdb, 0x9c, 0x81, 0x8b, 0xe7, 0xd4, 0x62, 0xac, 0x3b, 0xed, 0xbc, 0x4c, 0xc7, 0xeb, 0xb5, 0xcf, 0xc3, 0x30, 0x0c, 0x21, 0x0a, 0xdf, 0x25, 0xac, 0x29, 0xc6, 0x24, 0xb5, 0xe8, 0x14, 0x65, 0x9b, 0x52, 0x8e, 0xb3, 0x83, 0xcf, 0xf6, 0xb8, 0x67, 0x9f, 0xc7, 0x7c, 0x73, 0x1c, 0x9c, 0xef, 0x9c, 0x81, 0xbf, 0x0e, 0x94, 0x0d, 0x5c, 0xdc, 0xa6, 0xfa, 0xe2, 0xb9, 0x26, 0xec, 0xbd, 0x4e, 0x17, 0xb9, 0x56, 0x6d, 0x73, 0x8a, 0x3c, 0x63, 0x6b, 0x03, 0x70, 0x0c, 0x26, 0xd4, 0xd0, 0x39, 0xfb, 0x66, 0x6b, 0x99, 0x42, 0xb2, 0x01, 0x0e, 0xb6, 0x98, 0x27, 0x72, 0xdf, 0x4b, 0xd2, 0x43, 0x89, 0x5a, 0x7f, 0xbd, 0x18, 0x6b, 0x3d, 0xbd, 0x6c, 0xe0, 0xea, 0x6e, 0xb5, 0xfc, 0x3a, 0x35, 0x2f, 0xba, 0xa6, 0xe6, 0xf1, 0x52, 0xc8, 0x8f, 0x3a, 0x7e, 0x35, 0x72, 0x1d, 0x36, 0x73, 0x1b, 0x68, 0x5f, 0xcb, 0xe1, 0x52, 0xf6, 0xe8, 0xb1, 0x90, 0x0e, 0xbe, 0x68, 0xd2, 0xf1, 0x5e, 0xcf, 0x35, 0x78, 0xaf, 0x4f, 0x7f, 0xce, 0x23, 0xdb, 0xff, 0x3a, 0xe6, 0x5b, 0xc9, 0x92, 0x63, 0x5b, 0xc9, 0x02, 0xc0, 0x50, 0xba, 0xd3, 0xa3, 0xdb, 0x1a, 0x18, 0xb4, 0x2f, 0x97, 0x2c, 0x2d, 0x8e, 0xa3, 0xdd, 0xad, 0x45, 0xc2, 0x62, 0xf8, 0x8a, 0x03, 0xd4, 0x86, 0xaa, 0xa7, 0xdb, 0x32, 0x4e, 0xd0, 0x39, 0xc8, 0xd3, 0x88, 0x59, 0x14, 0x5a, 0x97, 0x43, 0x91, 0xd2, 0x08, 0x19, 0x5e, 0x8f, 0x6a, 0x79, 0xee, 0x34, 0xa4, 0x87, 0x4c, 0x3f, 0x3a, 0x0d, 0x19, 0xb5, 0x48, 0x31, 0x30, 0x6f, 0xe4, 0x5c, 0xc0, 0x83, 0xd8, 0x41, 0x47, 0x64, 0xe6, 0x48, 0x78, 0xa8, 0x73, 0xa9, 0xb7, 0x93, 0xb5, 0x5e, 0xb2, 0xda, 0xab, 0xe3, 0xdc, 0xf9, 0xee, 0xd9, 0x50, 0xa8, 0x2c, 0x97, 0x32, 0xcd, 0x3b, 0x58, 0x53, 0x26, 0x33, 0xe4, 0x53, 0xe4, 0x07, 0x0e, 0x59, 0x4b, 0x1f, 0x7c, 0xf9, 0x91, 0x57, 0xd8, 0x26, 0x08, 0xee, 0x0f, 0xcc, 0xf7, 0x76, 0xc5, 0xe7, 0x76, 0xbe, 0xbf, 0x01, 0xd2, 0x11, 0x5a, 0x14, 0x52, 0x1f, 0x4e, 0x0d, 0x20, 0x24, 0x2b, 0xb7, 0xc6, 0x25, 0xd2, 0x34, 0xd6, 0xaf, 0xd0, 0xad, 0x7c, 0x54, 0xc7, 0x60, 0x19, 0xad, 0x06, 0x82, 0xe8, 0x17, 0x1e, 0xe2, 0x13, 0x8c, 0x78, 0xbf, 0x5d, 0xe8, 0xaf, 0xee, 0x8e, 0x4b, 0xd6, 0xb6, 0xc5, 0x6c, 0x6b, 0x8f, 0x3c, 0x27, 0x4b, 0x3e, 0x01, 0x49, 0x5a, 0x21, 0x7c, 0x66, 0x76, 0xc1, 0x1f, 0x3b, 0x33, 0x13, 0xf0, 0xf2, 0xc2, 0xea, 0x6b, 0x4e, 0xd0, 0x14, 0x71, 0x16, 0xa0, 0x3e, 0xce, 0x92, 0xd2, 0xba, 0x05, 0x48, 0xa4, 0xbc, 0xb7, 0x7f, 0xf2, 0x19, 0x1a, 0x85, 0xd9, 0x1c, 0x90, 0x65, 0x97, 0x8d, 0x9d, 0xd8, 0x57, 0x72, 0xd9, 0xc0, 0x87, 0x27, 0xd4, 0x8c, 0xf8, 0xae, 0x96, 0x4e, 0x73, 0x8f, 0xa5, 0x3b, 0x4a, 0x87, 0xa5, 0x7b, 0x53, 0xb5, 0x20, 0x0e, 0xb3, 0x04, 0x32, 0x42, 0x99, 0x42, 0xaf, 0x5f, 0x35, 0xeb, 0x39, 0x58, 0xca, 0x06, 0x2e, 0x9c, 0x1c, 0x11, 0xfb, 0x68, 0x52, 0xff, 0x20, 0x4c, 0xfb, 0x70, 0x95, 0x7e, 0x3a, 0x67, 0xd6, 0x79, 0x48, 0x48, 0x05, 0xb8, 0xdc, 0x40, 0x76, 0x2f, 0xd9, 0x4f, 0x51, 0x00, 0x57, 0x6e, 0xe8, 0x2e, 0x9b, 0x41, 0x6d, 0xa5, 0x31, 0x3b, 0xf2, 0x72, 0xb0, 0xb3, 0xb7, 0x33, 0x6c, 0x54, 0x52, 0xfa, 0xd7, 0x10, 0x6d, 0x8e, 0xf4, 0xb1, 0x85, 0xc2, 0xbd, 0xbd, 0x3b, 0x4c, 0x0e, 0xbc, 0xbf, 0xfe, 0xb2, 0x8e, 0xf1, 0x22, 0xfe, 0xee, 0x8b, 0x4e, 0xf5, 0x80, 0xc9, 0xe1, 0x0d, 0x6e, 0x54, 0x72, 0xa5, 0xcc, 0xfe, 0x0d, 0x2c, 0x49, 0x41, 0x76, 0x6e, 0x1e, 0x2c, 0x3b, 0x13, 0x87, 0x7f, 0x13, 0x6d, 0x66, 0xd5, 0x62, 0x33, 0x3c, 0xf8, 0x72, 0x2b, 0xae, 0xca, 0x0b, 0x39, 0x0c, 0xad, 0x36, 0x63, 0xfc, 0xec, 0xde, 0xce, 0xd0, 0x26, 0x55, 0xb6, 0x99, 0x63, 0x5c, 0x14, 0xc6, 0x75, 0xc9, 0xa4, 0x08, 0xd6, 0x4b, 0x99, 0x36, 0x1c, 0x9f, 0x97, 0xb3, 0x71, 0x7e, 0x4e, 0xb0, 0x21, 0x25, 0x92, 0xed, 0x94, 0xa0, 0x05, 0x32, 0x0d, 0xc1, 0x8e, 0x59, 0x1f, 0x20, 0x4d, 0x00, 0x09, 0x8b, 0x1e, 0x8e, 0x65, 0x92, 0xcc, 0x70, 0x71, 0x6b, 0xd8, 0x38, 0xd9, 0x0b, 0xd9, 0x88, 0x0b, 0x32, 0x15, 0x4f, 0x5c, 0x5a, 0xd0, 0xe6, 0xad, 0x21, 0x0e, 0xe7, 0x57, 0x7a, 0x5d, 0x3c, 0xfb, 0x79, 0x1d, 0x6f, 0x56, 0xab, 0x02, 0x3d, 0x61, 0x03, 0x4b, 0x38, 0x6a, 0xd8, 0x92, 0x89, 0xde, 0x5d, 0x4c, 0xe9, 0x64, 0xcc, 0x39, 0x87, 0xb8, 0x05, 0xf3, 0x1d, 0xf5, 0x36, 0x66, 0x25, 0xf0, 0x0e, 0x92, 0x9d, 0x20, 0xfc, 0x97, 0x6d, 0x6b, 0x8e, 0x75, 0xa7, 0xb0, 0xc5, 0xfc, 0x79, 0xc1, 0x35, 0x34, 0x27, 0x6c, 0x86, 0xb9, 0x1d, 0xca, 0x3c, 0x96, 0x64, 0x7f, 0x9c, 0xea, 0x4b, 0x78, 0x6f, 0x60, 0x1b, 0xd7, 0x26, 0x47, 0xbd, 0x8b, 0x6b, 0x93, 0xa3, 0xce, 0x77, 0x34, 0xc1, 0x44, 0x2c, 0xd7, 0x48, 0xb6, 0x46, 0xf5, 0x92, 0x2d, 0x58, 0xb2, 0x49, 0xf4, 0x2b, 0xe5, 0x1d, 0xeb, 0xd9, 0xe1, 0xf4, 0x1c, 0x95, 0x94, 0x27, 0x07, 0xef, 0x8d, 0x97, 0x8c, 0x10, 0xcd, 0x35, 0x9f, 0xcb, 0x4d, 0x55, 0x33, 0x5c, 0xdc, 0x3a, 0xb1, 0xb6, 0x19, 0x06, 0x6e, 0x56, 0xe6, 0x73, 0x4d, 0x7a, 0xb0, 0x5f, 0x2c, 0x7a, 0x9f, 0x28, 0x6a, 0x03, 0xd7, 0x42, 0x51, 0xeb, 0xa8, 0x74, 0x2c, 0x63, 0x21, 0x43, 0x2e, 0xca, 0x0d, 0x5b, 0xeb, 0x00, 0x65, 0x1e, 0x8f, 0x5a, 0x4f, 0x48, 0xd4, 0xcb, 0x86, 0xf5, 0xca, 0x49, 0xae, 0x05, 0xae, 0xd2, 0x4c, 0x6e, 0xbd, 0x0b, 0xb2, 0xdd, 0x63, 0x84, 0x07, 0x1d, 0x1f, 0xe1, 0x8f, 0xa6, 0x58, 0xad, 0xaa, 0xb6, 0x39, 0xe6, 0x89, 0xbe, 0x50, 0xb3, 0xa9, 0xc7, 0xbf, 0x95, 0x99, 0xe8, 0xf1, 0xaf, 0xf4, 0xce, 0xe1, 0xd1, 0x0f, 0x6c, 0x0d, 0x45, 0xe7, 0x92, 0xb7, 0xf4, 0xed, 0xde, 0x9d, 0x98, 0x52, 0xc7, 0x2d, 0xce, 0x03, 0xe5, 0x35, 0x79, 0x64, 0xbb, 0xf1, 0xcb, 0xb9, 0x53, 0x4c, 0xc5, 0x3a, 0x19, 0xa3, 0x1a, 0xcb, 0xfe, 0x15, 0x74, 0x1a, 0x96, 0xd7, 0xf8, 0xe0, 0x8d, 0x38, 0x6d, 0xfa, 0xd9, 0x45, 0x66, 0x0c, 0x8b, 0x56, 0x93, 0xfd, 0x4d, 0x78, 0x6d, 0x88, 0x41, 0x7f, 0xc2, 0x99, 0xf6, 0xd3, 0x62, 0xd5, 0xf8, 0xc4, 0x99, 0xb6, 0xc1, 0xbc, 0x24, 0xfc, 0x53, 0xa4, 0x62, 0x9d, 0xe6, 0x25, 0xbf, 0x2a, 0x07, 0x63, 0xc8, 0x8e, 0x30, 0x8b, 0x2c, 0xe6, 0x0f, 0x4c, 0x7e, 0xc7, 0x4f, 0xfa, 0x21, 0xe4, 0xc9, 0xa5, 0x41, 0xec, 0xca, 0x5f, 0x63, 0x0b, 0xbb, 0x55, 0xf7, 0x78, 0xf5, 0x8b, 0xad, 0x7a, 0x0a, 0x1b, 0xb3, 0x96, 0xb2, 0x33, 0x96, 0xfd, 0xca, 0x78, 0x9d, 0x6b, 0x02, 0xb0, 0x33, 0x7e, 0xb2, 0x2d, 0x68, 0xb3, 0x5b, 0x11, 0xce, 0x9e, 0x50, 0x97, 0xc4, 0x65, 0xe7, 0x77, 0xc5, 0x65, 0xe7, 0x5f, 0x44, 0x58, 0xfd, 0x18, 0xf9, 0xb0, 0x52, 0x32, 0x46, 0x9e, 0x8b, 0x28, 0xd1, 0x7c, 0xec, 0x41, 0x3e, 0x01, 0xf2, 0x77, 0x78, 0x6e, 0x43, 0xfa, 0x01, 0xdf, 0x8d, 0x49, 0xef, 0xc6, 0xea, 0xae, 0xea, 0x0d, 0xca, 0xe6, 0x49, 0xcb, 0xc8, 0x2b, 0x13, 0xe5, 0x71, 0x1b, 0x59, 0x97, 0xc1, 0xb9, 0xc0, 0x12, 0x9f, 0xb6, 0x1a, 0x92, 0xc9, 0x33, 0x04, 0x3c, 0xe1, 0x2c, 0xc4, 0x6b, 0x0a, 0x4f, 0xd6, 0x98, 0x00, 0xcc, 0xf3, 0xe3, 0xbc, 0x19, 0xb5, 0xdc, 0xdb, 0xa3, 0x7a, 0xe9, 0x8b, 0x7e, 0xde, 0xbd, 0x3c, 0xf9, 0xbc, 0xbb, 0x3c, 0x4a, 0x67, 0x46, 0x48, 0xef, 0x4e, 0xc4, 0x18, 0x36, 0x95, 0xfc, 0x53, 0xb9, 0xae, 0x17, 0x2f, 0x21, 0x21, 0x27, 0xf0, 0x3c, 0x85, 0x31, 0x74, 0xb2, 0xaa, 0xc4, 0x9c, 0xbb, 0x47, 0xc9, 0x0f, 0x68, 0x28, 0x83, 0x30, 0xaa, 0x49, 0xa7, 0xe6, 0x9c, 0x01, 0x93, 0xb0, 0x71, 0xa4, 0xb6, 0xd9, 0x32, 0x84, 0x85, 0xb4, 0x93, 0x35, 0x27, 0x17, 0xf0, 0xb9, 0xb8, 0x27, 0x51, 0x93, 0x44, 0xee, 0xfe, 0x68, 0xa1, 0x47, 0x9d, 0x4f, 0x25, 0xb2, 0x04, 0xba, 0xf7, 0xda, 0x3e, 0xea, 0xed, 0x09, 0xb9, 0xa8, 0x97, 0x4e, 0xd6, 0xf4, 0xe2, 0x3c, 0x08, 0x29, 0xd4, 0x43, 0xfc, 0x6c, 0x0c, 0x65, 0xf2, 0x48, 0xe2, 0x18, 0x12, 0x85, 0x1a, 0xe3, 0x91, 0xcf, 0x3a, 0x0b, 0x69, 0xb6, 0xf1, 0xa1, 0x5d, 0x0f, 0xbe, 0x4c, 0x16, 0x74, 0xc5, 0x39, 0x27, 0xee, 0x4a, 0xc5, 0x64, 0x71, 0x56, 0xf8, 0x5c, 0x64, 0xff, 0x53, 0x85, 0x65, 0xa7, 0x2d, 0xfb, 0xbf, 0xf7, 0x6b, 0xda, 0x5b, 0x6d, 0x26, 0xb2, 0x2b, 0x6e, 0xd9, 0xe6, 0x60, 0xb9, 0xff, 0xd9, 0x67, 0xa0, 0x68, 0x95, 0xff, 0x8d, 0xfb, 0x2b, 0xb0, 0x2d, 0x6d, 0xde, 0x13, 0x5d, 0xb4, 0x12, 0x16, 0x3f, 0x84, 0x63, 0xf8, 0x62, 0x9c, 0x32, 0x8f, 0xe9, 0x4b, 0x10, 0x3d, 0xde, 0xab, 0xce, 0x8c, 0xd3, 0xe3, 0x3f, 0x88, 0xd3, 0xe3, 0x0f, 0xa9, 0xab, 0x5d, 0x5e, 0xac, 0x9d, 0x4d, 0x68, 0x6e, 0xd1, 0x7a, 0x57, 0xe6, 0x50, 0x0d, 0x2d, 0xdb, 0xbc, 0x0e, 0x90, 0xe6, 0x75, 0x05, 0x26, 0x86, 0x5b, 0xf6, 0x77, 0x21, 0x1d, 0xd8, 0x44, 0x5c, 0x35, 0xf3, 0x12, 0x1a, 0xd5, 0x50, 0xad, 0x62, 0x19, 0xd9, 0x7a, 0x5b, 0x34, 0xdf, 0x91, 0x98, 0x21, 0x5f, 0xa4, 0x19, 0xe2, 0x48, 0xcc, 0x90, 0x2f, 0xf2, 0x0c, 0x71, 0xf4, 0x4c, 0x65, 0xaf, 0x5d, 0x88, 0x09, 0x1b, 0xad, 0xb3, 0xaa, 0x1e, 0xa8, 0xee, 0x56, 0xb3, 0x05, 0x65, 0x2d, 0x2f, 0xd3, 0xbe, 0x0b, 0xd3, 0xd5, 0x34, 0x58, 0x06, 0x51, 0xbc, 0xcb, 0x76, 0xbf, 0x52, 0x8a, 0xab, 0x2d, 0x7f, 0x38, 0x75, 0xad, 0x39, 0x98, 0xbf, 0xc3, 0xe3, 0x39, 0xd8, 0xcf, 0x7e, 0x5d, 0x33, 0xd9, 0xdb, 0x89, 0x29, 0x62, 0x41, 0x8a, 0xbc, 0x10, 0xa1, 0xf1, 0x87, 0x48, 0xa1, 0x17, 0xc6, 0x56, 0x6c, 0x8c, 0xbb, 0xe1, 0x46, 0x3a, 0x1d, 0x0a, 0xf1, 0xd7, 0x03, 0x24, 0x53, 0xed, 0xc3, 0x95, 0xe2, 0x27, 0x6a, 0xdf, 0x41, 0xde, 0x48, 0x56, 0xc0, 0x3c, 0x9c, 0x27, 0x35, 0xb8, 0xbf, 0x2e, 0xc4, 0x9d, 0x41, 0xc5, 0x58, 0x75, 0x38, 0xbf, 0x0c, 0xd4, 0x3a, 0x27, 0x90, 0xb5, 0xc0, 0xe2, 0x51, 0x27, 0xef, 0x3a, 0x59, 0x93, 0x07, 0xfe, 0x59, 0xde, 0x59, 0x9b, 0xca, 0xad, 0xb3, 0x4e, 0x7e, 0xbd, 0xb8, 0x24, 0x1f, 0x47, 0xd9, 0x0a, 0x74, 0x8a, 0xed, 0x2c, 0x51, 0xc6, 0xce, 0x48, 0x8f, 0x96, 0x35, 0x83, 0x0b, 0xf2, 0x24, 0xe7, 0xe8, 0x4d, 0x6b, 0x27, 0x97, 0x43, 0xf6, 0xe4, 0x59, 0x90, 0xa3, 0x98, 0x69, 0x56, 0x59, 0x4d, 0xa2, 0x9f, 0x8a, 0x4d, 0x27, 0xef, 0xca, 0x2f, 0xcf, 0x33, 0x71, 0x2e, 0x25, 0xca, 0xac, 0x93, 0x35, 0x05, 0x9e, 0x7c, 0xf3, 0xc9, 0x9a, 0x22, 0x8f, 0xd5, 0x4c, 0xf9, 0x38, 0x4a, 0x14, 0xf3, 0x8c, 0xd1, 0xf1, 0x7c, 0x4c, 0x9c, 0x8f, 0x82, 0xf9, 0xd8, 0x94, 0x14, 0x57, 0x8a, 0xb7, 0xdc, 0x5f, 0xee, 0x28, 0xb7, 0xca, 0x79, 0x92, 0x77, 0x96, 0x7f, 0xd6, 0x8c, 0xd4, 0x93, 0xdf, 0x3c, 0xf9, 0x75, 0x97, 0xe4, 0x2f, 0xf7, 0x96, 0x6f, 0x2c, 0x53, 0xca, 0x67, 0x9a, 0x4f, 0x7e, 0x2b, 0x56, 0x1f, 0x6b, 0x89, 0x32, 0x3a, 0x3a, 0xab, 0x19, 0x70, 0x91, 0x48, 0x79, 0xa6, 0x8d, 0xf7, 0x4e, 0x2e, 0x03, 0x3f, 0xe6, 0x54, 0x39, 0xb9, 0x84, 0xad, 0xa2, 0x9b, 0x47, 0x8e, 0x1b, 0x61, 0xb9, 0xde, 0xff, 0x64, 0x5d, 0x04, 0xd3, 0xc8, 0x6f, 0x64, 0x3d, 0x9a, 0xfd, 0xd8, 0x15, 0xb3, 0x64, 0x1c, 0xf6, 0x18, 0x43, 0x45, 0x87, 0xe0, 0xec, 0x91, 0x85, 0x66, 0xb7, 0x81, 0x3d, 0x9d, 0xb9, 0xc1, 0x93, 0x90, 0xb3, 0x20, 0x7e, 0x4b, 0x9c, 0x0b, 0x42, 0xb0, 0x78, 0xff, 0x30, 0x79, 0x51, 0xfd, 0x74, 0x07, 0x31, 0xdd, 0x6a, 0x51, 0x9e, 0x23, 0x17, 0xe6, 0xd9, 0x0c, 0x6c, 0x97, 0x72, 0xc1, 0xc9, 0x85, 0x2c, 0x7d, 0xe5, 0x1d, 0x56, 0x3f, 0x43, 0x8c, 0x5f, 0xec, 0x8c, 0x4b, 0x9b, 0x96, 0xfc, 0xd9, 0xa4, 0xd9, 0x4c, 0xbe, 0xe8, 0x0b, 0x51, 0x45, 0x1e, 0xee, 0x33, 0x95, 0xe8, 0x19, 0xe8, 0x8f, 0x49, 0x9d, 0x3a, 0x41, 0xcd, 0x2e, 0x39, 0x67, 0xd9, 0x8f, 0xb8, 0xb6, 0x2b, 0xa1, 0x89, 0x77, 0xb5, 0xe7, 0x8d, 0x35, 0x8e, 0x79, 0xb8, 0x43, 0x9c, 0x22, 0x48, 0x7f, 0xa3, 0xd6, 0xe3, 0x8e, 0x53, 0x83, 0xe5, 0xd9, 0xe7, 0x46, 0xf3, 0xa0, 0x8d, 0xb0, 0x0e, 0x2f, 0xf3, 0x01, 0x3d, 0x8a, 0xd1, 0x9a, 0x8a, 0x33, 0xc7, 0xb3, 0xf9, 0x19, 0xf0, 0x3d, 0xc0, 0x34, 0x19, 0xd1, 0x4d, 0x88, 0x23, 0xa4, 0x22, 0x5e, 0x92, 0xc2, 0xf6, 0xc2, 0xdd, 0x10, 0xa9, 0x18, 0xb8, 0xda, 0xc1, 0xd4, 0x23, 0x69, 0x05, 0x58, 0x85, 0x1f, 0x1e, 0x11, 0x47, 0x8f, 0x1d, 0x8b, 0x59, 0xc7, 0xb1, 0x74, 0x2c, 0x95, 0xbd, 0xe7, 0x78, 0xa0, 0xa8, 0x6a, 0xff, 0x15, 0x81, 0xa3, 0xb9, 0x49, 0xb2, 0x35, 0x12, 0x4e, 0xe6, 0x2a, 0xdd, 0xc1, 0x74, 0x2b, 0xc9, 0x82, 0x12, 0x26, 0xc3, 0x54, 0x25, 0xc9, 0x85, 0xc6, 0xf8, 0xae, 0x09, 0x09, 0x82, 0x9d, 0x2e, 0x1c, 0x6f, 0xa7, 0x13, 0xb2, 0x1d, 0x4e, 0xc8, 0x89, 0xed, 0x25, 0xce, 0x5d, 0xba, 0x4f, 0xb0, 0x86, 0x98, 0x6e, 0x16, 0x74, 0x28, 0x46, 0x1d, 0xfe, 0xdd, 0xc5, 0x33, 0xca, 0x13, 0xf9, 0x46, 0xef, 0xba, 0xba, 0x65, 0x79, 0x06, 0x9a, 0x6b, 0xca, 0x28, 0xfd, 0xdb, 0x37, 0xc9, 0xf2, 0xde, 0x06, 0x0f, 0xce, 0x34, 0x1e, 0x23, 0xc5, 0x40, 0xb3, 0xac, 0x63, 0xad, 0x03, 0x9c, 0xd2, 0x43, 0x9d, 0xff, 0xd2, 0x11, 0x9a, 0x61, 0x43, 0x4a, 0xb8, 0x48, 0xa6, 0x71, 0xc4, 0x1d, 0xd7, 0x82, 0x7d, 0x11, 0x9f, 0x57, 0x27, 0x17, 0x14, 0x18, 0x74, 0x99, 0x0f, 0xf2, 0xea, 0x60, 0xde, 0xcd, 0x5c, 0xe1, 0xfc, 0x36, 0x90, 0x7a, 0xfa, 0x14, 0x93, 0x2e, 0x4f, 0x34, 0x18, 0xa3, 0x57, 0xef, 0x20, 0xb8, 0x3d, 0x0f, 0xdb, 0x58, 0xe3, 0xa6, 0xf5, 0x48, 0x57, 0x9a, 0x9b, 0xbc, 0x95, 0xaa, 0xb8, 0x93, 0x10, 0xf6, 0x95, 0xd9, 0x06, 0xe5, 0x46, 0x61, 0x6b, 0x51, 0x5e, 0xdd, 0x36, 0xb1, 0xdc, 0xb8, 0x5a, 0x7a, 0x9e, 0xa8, 0xd0, 0x66, 0xbb, 0x13, 0xd7, 0xf3, 0x08, 0x09, 0x39, 0xac, 0xd5, 0xbc, 0x91, 0xf0, 0x9d, 0x69, 0x68, 0x7d, 0x4e, 0xd9, 0x3d, 0x31, 0xaa, 0xb8, 0xe4, 0x23, 0x93, 0xe6, 0xc0, 0x39, 0x75, 0x28, 0x9a, 0xac, 0xdf, 0xaa, 0xcd, 0x70, 0xe2, 0x8c, 0x92, 0x33, 0xb1, 0x2f, 0xfd, 0x79, 0x4e, 0xa8, 0x54, 0x52, 0x79, 0x55, 0x1b, 0x59, 0xe6, 0x6f, 0x14, 0xcb, 0xfc, 0x89, 0x5e, 0x2b, 0x39, 0x59, 0x93, 0x8f, 0xbd, 0xa3, 0xa4, 0xd2, 0xec, 0x29, 0x30, 0x45, 0x4b, 0x9c, 0x9e, 0xd5, 0xe0, 0x9a, 0xa5, 0x8c, 0xb5, 0xa6, 0x77, 0xac, 0x63, 0xca, 0x9d, 0x61, 0x7c, 0xd1, 0x36, 0x6e, 0x01, 0xd6, 0x9a, 0x39, 0x44, 0x3b, 0x30, 0xdf, 0x9a, 0x99, 0x46, 0x5a, 0xdf, 0x38, 0x1f, 0x46, 0xc5, 0x7b, 0xec, 0xae, 0x82, 0x54, 0xbd, 0xc7, 0xc8, 0xfb, 0x9c, 0x99, 0x5a, 0xbc, 0x9b, 0xe2, 0xaf, 0xb4, 0x95, 0x79, 0x8d, 0x56, 0x99, 0xa8, 0x7f, 0xcb, 0x7e, 0xa2, 0xcc, 0x54, 0x90, 0x6a, 0xb0, 0x5e, 0x8a, 0x73, 0x19, 0xc2, 0xf0, 0x65, 0xe0, 0x00, 0x0f, 0xfe, 0xba, 0xc0, 0x47, 0xa7, 0x89, 0x8c, 0x3b, 0x9c, 0x19, 0x3e, 0xde, 0x61, 0x90, 0xec, 0x38, 0xab, 0xfc, 0x23, 0xfc, 0x15, 0x09, 0x09, 0xcc, 0x6c, 0xeb, 0x58, 0xde, 0x57, 0xb9, 0x8d, 0x8a, 0x87, 0xb8, 0xac, 0xdc, 0x5a, 0x7a, 0xf2, 0xd0, 0xd3, 0x1d, 0x1e, 0xc8, 0xcb, 0x37, 0x61, 0x4f, 0x7e, 0x8b, 0xe1, 0x98, 0xe7, 0xe4, 0xd7, 0xf3, 0xc7, 0x9e, 0xac, 0x99, 0xe1, 0x51, 0xc6, 0xea, 0xab, 0x15, 0x21, 0x6c, 0x33, 0x60, 0xbd, 0x0a, 0x31, 0x45, 0xbe, 0xd5, 0x0d, 0x85, 0x1d, 0xf7, 0x3a, 0x3d, 0xae, 0x92, 0x7c, 0x37, 0xe4, 0x21, 0xc4, 0x43, 0x54, 0xfa, 0xe4, 0xd7, 0xf3, 0x24, 0x91, 0x56, 0x99, 0x95, 0x3f, 0xfa, 0x64, 0xcd, 0x4c, 0x37, 0x94, 0xc7, 0x72, 0x73, 0xcf, 0x82, 0xa2, 0x08, 0x10, 0xfc, 0xc0, 0xd4, 0x45, 0x98, 0xba, 0x38, 0xcf, 0xd4, 0x71, 0xaf, 0xe2, 0x21, 0x98, 0x16, 0x8c, 0xf6, 0x6c, 0xc2, 0x3e, 0x4c, 0x67, 0xae, 0x25, 0xcb, 0x0b, 0xb9, 0xd3, 0x90, 0x96, 0xf3, 0x56, 0xed, 0xbf, 0x9c, 0xa5, 0x04, 0x4a, 0xcf, 0x22, 0xce, 0x23, 0x27, 0xd6, 0x37, 0xe9, 0x5a, 0x63, 0xd8, 0x36, 0xdc, 0xe7, 0x89, 0xdb, 0x92, 0xed, 0xac, 0x98, 0xd0, 0x1f, 0x36, 0xfd, 0xec, 0x50, 0xd8, 0x30, 0xaf, 0x4b, 0xbd, 0x34, 0xa5, 0x02, 0xd2, 0xa6, 0x78, 0x2d, 0x9b, 0x75, 0x1e, 0x84, 0xc9, 0xbe, 0x7e, 0x0a, 0x79, 0xce, 0x32, 0x20, 0xfe, 0x66, 0xb6, 0xde, 0x37, 0x69, 0x36, 0x98, 0x7f, 0x7b, 0x30, 0xb8, 0x6e, 0xef, 0xba, 0x5a, 0x18, 0x7a, 0xbc, 0x0d, 0x54, 0xb9, 0x2d, 0x1c, 0x3f, 0xd1, 0x1c, 0x55, 0xb5, 0xff, 0xcf, 0x97, 0xc5, 0xd9, 0x6c, 0x5b, 0x58, 0x31, 0x26, 0x3c, 0x2b, 0x91, 0x14, 0xcb, 0x4c, 0xa2, 0xd2, 0x1c, 0xa4, 0x75, 0x64, 0xa7, 0x73, 0xef, 0xeb, 0xc8, 0xb1, 0x20, 0x4c, 0xc9, 0xe2, 0x33, 0x71, 0xc4, 0xff, 0x48, 0x83, 0x50, 0x87, 0x05, 0x74, 0x6e, 0x22, 0xcf, 0x1a, 0xb8, 0x0a, 0x4c, 0xf7, 0xb1, 0xbd, 0x57, 0xd0, 0x42, 0xc1, 0xd8, 0xe9, 0x39, 0xc6, 0x56, 0xac, 0x48, 0xc1, 0x3b, 0x25, 0xda, 0x8f, 0xec, 0x40, 0x32, 0x7d, 0x27, 0xbf, 0xa1, 0xc3, 0xa9, 0x52, 0xda, 0x0b, 0x68, 0xa6, 0xd8, 0xa5, 0x75, 0x65, 0x2b, 0xc1, 0x99, 0xe2, 0x32, 0x6c, 0x8c, 0xb2, 0x65, 0x4b, 0x13, 0xcb, 0x74, 0x27, 0xe5, 0x18, 0x36, 0x12, 0x7f, 0x53, 0x35, 0x90, 0xd6, 0x0b, 0x7b, 0x0d, 0xf0, 0x80, 0x03, 0xdb, 0x33, 0x13, 0xe9, 0x48, 0x37, 0xe2, 0x6a, 0x0c, 0x67, 0x2a, 0xdb, 0x84, 0xd7, 0x06, 0x6c, 0x0d, 0x9d, 0x8c, 0xb0, 0x24, 0x00, 0xcb, 0xe5, 0x20, 0x1d, 0x78, 0xbd, 0x16, 0x89, 0x99, 0x03, 0x97, 0x44, 0x1b, 0x68, 0x64, 0xfc, 0x45, 0x71, 0x3e, 0xe5, 0x3e, 0x73, 0xae, 0x76, 0x5e, 0x3a, 0x88, 0x30, 0xe6, 0x69, 0x92, 0x56, 0x4b, 0x92, 0xa5, 0xcd, 0x4d, 0x92, 0xa5, 0xcd, 0xd5, 0x65, 0x69, 0x73, 0x63, 0xb2, 0xb4, 0x09, 0x18, 0xcc, 0xde, 0x89, 0x22, 0x7a, 0x2f, 0x11, 0xbc, 0x94, 0x2b, 0x06, 0x06, 0x86, 0x84, 0x34, 0xad, 0xde, 0x4b, 0xf3, 0x58, 0xe3, 0x2a, 0xf7, 0xef, 0xee, 0x1d, 0xce, 0x2d, 0x39, 0xa7, 0xf9, 0xbf, 0xf0, 0xb7, 0xfb, 0x7f, 0xd1, 0xc7, 0x3e, 0x84, 0xae, 0x95, 0xe0, 0xa2, 0x99, 0x5d, 0xb5, 0xff, 0xa3, 0x41, 0x1d, 0x2a, 0xdb, 0xf4, 0xd3, 0x97, 0x36, 0xa1, 0x5f, 0xc9, 0xf2, 0x5c, 0x6e, 0x96, 0x3c, 0xb2, 0x94, 0x47, 0x11, 0x73, 0xc9, 0x7c, 0xe0, 0x10, 0x9d, 0xf3, 0xd8, 0x83, 0x6a, 0x8e, 0x1d, 0x4e, 0xde, 0x87, 0x2d, 0xfe, 0xec, 0xb3, 0xed, 0x11, 0x28, 0x87, 0x83, 0x51, 0xd2, 0x34, 0x53, 0x0a, 0xb2, 0xe1, 0xc7, 0x51, 0xb2, 0x59, 0x57, 0x7b, 0xb2, 0x3c, 0x2a, 0xe4, 0xa0, 0x10, 0xfa, 0x9d, 0x22, 0xcd, 0x0e, 0xa4, 0x4d, 0x8b, 0x11, 0xb2, 0x7b, 0x6c, 0xd3, 0x20, 0xc4, 0xfc, 0x96, 0x9f, 0xc4, 0x29, 0xef, 0x74, 0x87, 0xae, 0xe9, 0xcf, 0xe7, 0x54, 0x12, 0xe4, 0x44, 0x8a, 0x74, 0xff, 0x6d, 0x0a, 0x87, 0x18, 0xc0, 0x46, 0x21, 0xec, 0xc7, 0x8d, 0xb9, 0x25, 0xd6, 0xd2, 0xb2, 0x0f, 0x21, 0xc7, 0x35, 0x87, 0xac, 0x3a, 0xc6, 0xc7, 0xac, 0x0d, 0x71, 0x1e, 0x5e, 0x9b, 0xf6, 0x06, 0xc8, 0x50, 0xd3, 0x77, 0x3f, 0x89, 0xa3, 0x6b, 0x7c, 0xf6, 0x2c, 0x64, 0x2c, 0x36, 0x21, 0x34, 0x1c, 0x1f, 0x3a, 0xff, 0xbd, 0x5f, 0xc7, 0xe3, 0xb6, 0x46, 0x0a, 0xcb, 0x81, 0x7d, 0xa8, 0x03, 0x1c, 0xb4, 0x14, 0xc3, 0x35, 0xfc, 0x19, 0x7d, 0xfc, 0x1f, 0xd5, 0x4f, 0xce, 0x72, 0xa8, 0x2e, 0x58, 0xb2, 0x2d, 0xb9, 0x64, 0x6b, 0x29, 0xdf, 0x3b, 0x70, 0xf6, 0x4f, 0x0f, 0x2f, 0xb9, 0xb6, 0x1e, 0x4e, 0x51, 0x8f, 0xa7, 0xb8, 0x1e, 0x1f, 0x60, 0x3d, 0xb2, 0x71, 0xa7, 0xbf, 0x39, 0x74, 0xbe, 0xe4, 0x1c, 0x64, 0x24, 0xc9, 0xba, 0x58, 0xfe, 0xf5, 0x37, 0x89, 0x7a, 0xf1, 0xc9, 0x9f, 0x0b, 0xc7, 0x7d, 0x3a, 0x9f, 0xbc, 0xd5, 0x25, 0xe2, 0x5d, 0xad, 0xa2, 0x3a, 0x23, 0xb5, 0x4a, 0xe1, 0x6d, 0x6a, 0x5a, 0x64, 0x15, 0xe2, 0x85, 0x61, 0x9d, 0x57, 0x43, 0x67, 0x04, 0x39, 0xe2, 0xb4, 0x93, 0xf5, 0x9a, 0x0b, 0x70, 0x83, 0xaf, 0x70, 0xa4, 0x63, 0x1b, 0x6a, 0x94, 0x71, 0xd6, 0x51, 0x2d, 0x39, 0x47, 0xbb, 0x5b, 0x0d, 0xcc, 0x3f, 0xc2, 0x18, 0xcd, 0x06, 0x9c, 0x7d, 0x04, 0xfb, 0x72, 0xcc, 0x51, 0xb2, 0xcb, 0x12, 0x36, 0xb3, 0xec, 0xd4, 0x47, 0x21, 0x17, 0xdb, 0x1e, 0x05, 0x21, 0xc3, 0xf3, 0x5e, 0x97, 0xe2, 0x39, 0x32, 0x88, 0xe3, 0x14, 0x64, 0xef, 0x45, 0x63, 0x70, 0xa6, 0x8e, 0x12, 0x3e, 0xe5, 0x84, 0xb7, 0xf5, 0xc0, 0x9a, 0xb0, 0x99, 0x2c, 0xee, 0x4a, 0xb7, 0xb9, 0x7c, 0x38, 0x86, 0x05, 0xac, 0x5f, 0x51, 0x2c, 0xe4, 0xd2, 0xee, 0xb0, 0xe6, 0xe1, 0x5c, 0x72, 0xea, 0xeb, 0xcc, 0x25, 0xbc, 0x3a, 0x3b, 0xd4, 0x19, 0x48, 0x5d, 0xa4, 0xda, 0x0c, 0xf6, 0x51, 0xae, 0xf2, 0x58, 0x5d, 0x70, 0xb7, 0xc8, 0x09, 0xac, 0x0b, 0x3b, 0xb6, 0xbc, 0x14, 0x9f, 0x0d, 0x6f, 0x28, 0xa4, 0x97, 0x45, 0x66, 0xdc, 0xb6, 0xaa, 0xb8, 0xe3, 0x37, 0x9a, 0x8f, 0x47, 0x1f, 0x8a, 0x06, 0xd6, 0x86, 0x0e, 0xc6, 0x4e, 0xe2, 0x7d, 0x4c, 0xb5, 0xba, 0x65, 0x92, 0xd1, 0xd5, 0xfd, 0xd8, 0x18, 0x14, 0xd2, 0x7b, 0xd3, 0xbd, 0x7e, 0x70, 0xde, 0x26, 0xca, 0x3b, 0x6c, 0x62, 0xaf, 0x38, 0x07, 0x99, 0x7e, 0xba, 0x25, 0xe1, 0x11, 0x67, 0xb7, 0xd0, 0x72, 0x9f, 0x84, 0x74, 0x1b, 0x9d, 0x21, 0x3a, 0xc0, 0x94, 0x94, 0x52, 0xaa, 0xba, 0x47, 0xf7, 0xc8, 0x29, 0x3b, 0x52, 0x5a, 0x25, 0xac, 0xd1, 0x81, 0xca, 0xb7, 0x3c, 0xec, 0x65, 0x3d, 0x21, 0x9d, 0x12, 0xa3, 0x93, 0xab, 0xbe, 0x3a, 0x74, 0x9c, 0x7c, 0x5a, 0x39, 0xa6, 0x81, 0x09, 0x67, 0xb6, 0xc5, 0x3e, 0x0d, 0xb2, 0x6d, 0x8d, 0x08, 0x69, 0x5f, 0xfe, 0xed, 0xcb, 0xe1, 0xcc, 0xe4, 0x56, 0xd9, 0x3d, 0xb3, 0xa8, 0x45, 0x86, 0x59, 0x1f, 0x68, 0xa7, 0x5c, 0x63, 0xef, 0x5c, 0x47, 0x7c, 0xf9, 0xc8, 0x4c, 0xe7, 0x58, 0xe3, 0x5a, 0x4d, 0x1b, 0x7a, 0x9b, 0xf6, 0x6e, 0x3e, 0x09, 0x34, 0xea, 0xdc, 0xf9, 0x4c, 0xda, 0x47, 0x8d, 0xfb, 0x94, 0x69, 0xda, 0xe5, 0xb0, 0x42, 0xd0, 0x89, 0xfc, 0x4b, 0x31, 0xbe, 0x0a, 0x2c, 0x49, 0x17, 0x93, 0xbc, 0x47, 0xea, 0xd6, 0xb8, 0x39, 0x96, 0xda, 0xdf, 0xa8, 0x9d, 0x63, 0xbc, 0x12, 0x73, 0x8e, 0xe7, 0xd1, 0xa2, 0x60, 0x28, 0x6b, 0x52, 0x3a, 0xf8, 0xd4, 0x01, 0xe6, 0xc5, 0xce, 0x26, 0x19, 0xae, 0x45, 0x7e, 0x10, 0x3b, 0xb9, 0x09, 0x99, 0x22, 0x61, 0x7b, 0x14, 0xf3, 0x5b, 0x99, 0x94, 0xdf, 0x25, 0xb7, 0x61, 0x0e, 0xd7, 0xb4, 0x6a, 0x5b, 0x3c, 0x47, 0xab, 0x6b, 0x1a, 0x86, 0x27, 0xe2, 0x5c, 0xc0, 0x32, 0x13, 0x5f, 0x0d, 0x79, 0xf8, 0xd5, 0x31, 0xeb, 0xf5, 0xff, 0x7a, 0xfd, 0x70, 0xc5, 0xc5, 0x43, 0xb0, 0x0a, 0x72, 0x3d, 0x43, 0x64, 0xdb, 0xfb, 0xcd, 0xe7, 0x9f, 0xd2, 0x2e, 0x2c, 0x36, 0x7a, 0xb7, 0xe2, 0xf3, 0x2b, 0x49, 0xa9, 0x2f, 0x27, 0xa7, 0x1e, 0xf5, 0x22, 0xb5, 0xd8, 0x0a, 0x72, 0x3b, 0x59, 0x57, 0xce, 0x2d, 0x61, 0xdf, 0x76, 0xb8, 0x32, 0xb5, 0xd3, 0xc2, 0xfa, 0xad, 0x39, 0xea, 0x21, 0x1b, 0xb8, 0x39, 0x4c, 0xe9, 0x91, 0xbd, 0xf2, 0x28, 0x29, 0xf0, 0x91, 0x0e, 0x18, 0xc7, 0x1b, 0xa5, 0x9d, 0x56, 0x6d, 0xfc, 0x94, 0x82, 0x4f, 0x13, 0x92, 0x4a, 0x39, 0x3d, 0xac, 0x14, 0x15, 0x4b, 0x39, 0x0d, 0x1e, 0x0b, 0xb8, 0xc9, 0x3b, 0xd8, 0xe5, 0x91, 0x3d, 0x12, 0xeb, 0x8f, 0xe6, 0xb0, 0xbd, 0x5d, 0x85, 0x51, 0x05, 0xa7, 0xba, 0x1c, 0x34, 0x03, 0x65, 0x27, 0x04, 0x9e, 0x1a, 0x3a, 0x1e, 0x4e, 0x53, 0x1a, 0x87, 0x8e, 0x1f, 0x39, 0x34, 0x29, 0xda, 0x05, 0xb9, 0xf3, 0x86, 0x8e, 0x07, 0xef, 0xad, 0xd9, 0x88, 0x6d, 0x3b, 0xb7, 0x18, 0xb4, 0x89, 0x2a, 0x18, 0x32, 0xad, 0xd3, 0xb4, 0x41, 0x51, 0x7f, 0x45, 0x22, 0x29, 0x8b, 0xc1, 0xcf, 0xae, 0xba, 0x79, 0x7f, 0xb4, 0x1e, 0x52, 0x4e, 0xf5, 0x47, 0xf3, 0x6f, 0x37, 0x19, 0xab, 0xfe, 0x0a, 0x32, 0xb4, 0xc8, 0x27, 0xe0, 0x71, 0xfa, 0x97, 0x16, 0xca, 0x2f, 0xc8, 0xfd, 0xf2, 0x69, 0x08, 0xa6, 0x18, 0xe4, 0xde, 0x94, 0xe3, 0xf8, 0x5f, 0x9e, 0xd2, 0x27, 0x9d, 0xe2, 0x27, 0xfc, 0x97, 0x4e, 0x05, 0xd7, 0xaa, 0xf2, 0xdc, 0xb5, 0x81, 0xb5, 0xe1, 0x9c, 0xa4, 0xf6, 0x9c, 0x4c, 0x9a, 0x03, 0xef, 0x60, 0xa9, 0x9b, 0xe2, 0x33, 0x28, 0x35, 0x79, 0x06, 0xa5, 0x6c, 0x77, 0x62, 0x7f, 0x86, 0x0e, 0xa8, 0x90, 0x72, 0x83, 0x18, 0x86, 0x79, 0xd4, 0xe3, 0xc3, 0x67, 0x98, 0xbf, 0x71, 0xe8, 0x6d, 0x1c, 0xa5, 0xc7, 0x6f, 0x90, 0xc2, 0xaa, 0x50, 0x0b, 0x93, 0xc7, 0x63, 0xc2, 0x88, 0xf1, 0xc8, 0x53, 0x2d, 0x11, 0x03, 0xe6, 0x77, 0x5a, 0x75, 0x34, 0xcb, 0x38, 0x8a, 0xa7, 0x55, 0x65, 0xc4, 0x58, 0xc4, 0xea, 0x6e, 0xc2, 0x9a, 0xbd, 0xea, 0x7d, 0x4a, 0x3b, 0x2d, 0xf2, 0xa4, 0x5e, 0x63, 0x68, 0x74, 0x16, 0xb1, 0xd3, 0x13, 0x3c, 0xfb, 0x41, 0x3e, 0xca, 0xf2, 0x51, 0x9e, 0x23, 0x7d, 0xcc, 0x67, 0x32, 0xf6, 0xaf, 0xeb, 0x8f, 0x2a, 0xcd, 0x26, 0xe0, 0x31, 0x33, 0x24, 0xe5, 0x05, 0xf2, 0x4e, 0xcc, 0x6d, 0x8d, 0xbd, 0xfc, 0x77, 0x2f, 0xfe, 0xee, 0xd7, 0xb3, 0x2e, 0xee, 0x83, 0x1b, 0xf4, 0x49, 0xad, 0x53, 0xe4, 0xdb, 0x76, 0xbd, 0xef, 0x61, 0x2f, 0xe6, 0xe1, 0xb9, 0x7e, 0x4f, 0x63, 0x5a, 0xbb, 0x32, 0xf7, 0xc8, 0x21, 0x2b, 0x86, 0xbe, 0x76, 0x28, 0xd6, 0x6f, 0x2e, 0xac, 0xcb, 0x1f, 0x5e, 0x99, 0xf3, 0xf1, 0x69, 0x83, 0x92, 0x7e, 0xa4, 0x77, 0xbb, 0x81, 0xc6, 0x6a, 0xc5, 0x1a, 0xf5, 0x40, 0xa2, 0x1e, 0x8f, 0xc4, 0xe6, 0xbb, 0x3c, 0x32, 0x3f, 0xf9, 0x58, 0x70, 0xd3, 0x8c, 0x69, 0xda, 0xc9, 0xf0, 0xca, 0x1b, 0xc6, 0xd8, 0x23, 0xaf, 0x25, 0x3b, 0xcf, 0xc1, 0x4d, 0x11, 0xc8, 0xc7, 0x98, 0x34, 0x4a, 0xaa, 0xf7, 0x86, 0xb1, 0xd7, 0xc5, 0xe2, 0x51, 0x3d, 0xb1, 0xa6, 0x58, 0x47, 0xda, 0x99, 0xad, 0xcd, 0xd9, 0xf0, 0xda, 0x4b, 0xa5, 0x7f, 0xda, 0x6e, 0xb0, 0x8e, 0x7e, 0xad, 0xd7, 0x24, 0xea, 0x08, 0xda, 0x32, 0x75, 0xaf, 0x33, 0xdd, 0x34, 0x8a, 0x2d, 0xe7, 0x36, 0x8d, 0xc8, 0x33, 0x0e, 0x45, 0x10, 0x17, 0x0f, 0x06, 0xd7, 0x05, 0xc8, 0x53, 0x40, 0xe0, 0x00, 0xad, 0x61, 0x44, 0x5b, 0x08, 0x3f, 0xb7, 0xe3, 0x2a, 0x60, 0xda, 0xeb, 0x37, 0xaa, 0x35, 0xfe, 0x7c, 0x56, 0xcd, 0x8a, 0x3d, 0xe7, 0x9a, 0xd4, 0xb4, 0xf8, 0xf3, 0xad, 0xc2, 0x0e, 0xaf, 0xfd, 0x00, 0x41, 0xf6, 0x1a, 0x92, 0xb4, 0x38, 0x71, 0xfd, 0xd1, 0x91, 0x5e, 0xa0, 0xd1, 0xd1, 0x67, 0x3c, 0xc0, 0xf1, 0x1b, 0xcc, 0xf9, 0x93, 0x98, 0xc3, 0x43, 0xce, 0x69, 0x43, 0x27, 0xa8, 0x84, 0xc0, 0x53, 0x60, 0x0e, 0xad, 0x1a, 0x0e, 0x53, 0x04, 0x7c, 0x4d, 0xca, 0xb7, 0x81, 0xc6, 0x6b, 0x5e, 0x34, 0x3e, 0xd3, 0x11, 0x16, 0xd2, 0xfa, 0x8f, 0xad, 0x79, 0x71, 0xd6, 0x14, 0x83, 0x81, 0xd2, 0x4c, 0xca, 0x8d, 0x7a, 0xef, 0xeb, 0x6c, 0xa7, 0x62, 0x58, 0x0d, 0xad, 0x6a, 0xdd, 0xb0, 0x92, 0xe7, 0x89, 0x56, 0x61, 0x2a, 0x13, 0x85, 0xb9, 0x85, 0x25, 0xa8, 0x2f, 0x8b, 0x16, 0x13, 0xe4, 0x13, 0x75, 0xc9, 0x1b, 0x7b, 0xe7, 0xbd, 0xb9, 0x65, 0x43, 0x27, 0x72, 0x67, 0x0f, 0x25, 0xb7, 0x6a, 0x30, 0x79, 0x06, 0xff, 0xf5, 0x85, 0x58, 0xce, 0x6d, 0xa0, 0xf0, 0xde, 0x61, 0x5e, 0x02, 0xb7, 0x42, 0xe6, 0xe2, 0x19, 0x76, 0x82, 0xaa, 0xa5, 0xaf, 0xff, 0x52, 0x40, 0x55, 0x75, 0xa2, 0xb2, 0x90, 0xc6, 0x97, 0x7c, 0xc0, 0x86, 0x2d, 0xb4, 0x0f, 0x9b, 0x4c, 0x71, 0x4c, 0x61, 0x75, 0xb0, 0x73, 0x2f, 0xc2, 0xa3, 0x3a, 0xe3, 0x5e, 0x1a, 0xad, 0x63, 0x5c, 0x47, 0xe2, 0x81, 0x06, 0x71, 0x3e, 0xe4, 0x77, 0x0d, 0x62, 0x3f, 0x5c, 0xea, 0xc5, 0x2f, 0x75, 0x85, 0xad, 0xa9, 0x7b, 0xdb, 0xeb, 0xf2, 0xa8, 0x47, 0xc4, 0x7a, 0x3a, 0x72, 0x88, 0xce, 0x9d, 0x9e, 0xfc, 0x0d, 0x98, 0x42, 0xd9, 0x93, 0x7c, 0x60, 0x9e, 0x54, 0x8e, 0x3b, 0x6c, 0xda, 0xa9, 0xae, 0x49, 0x1e, 0xc8, 0x74, 0x9a, 0x4e, 0xdd, 0xef, 0x5b, 0xab, 0x2e, 0x24, 0x1b, 0x06, 0x91, 0x37, 0x70, 0xcf, 0x26, 0x5a, 0x58, 0xae, 0xea, 0x11, 0x6d, 0xaf, 0xee, 0x56, 0xd3, 0x18, 0xf3, 0xec, 0xc1, 0xa7, 0x22, 0xf6, 0x5b, 0x98, 0x6f, 0x0f, 0xb4, 0xf2, 0xe9, 0x73, 0xe4, 0x0d, 0xd5, 0xa2, 0x7c, 0x23, 0x0e, 0x61, 0xb7, 0x06, 0x3b, 0xab, 0xbb, 0x45, 0x2e, 0x54, 0xcb, 0xfa, 0x53, 0xb1, 0x74, 0xab, 0x40, 0x19, 0x45, 0x5e, 0x0a, 0x87, 0x7a, 0x75, 0xaf, 0x4e, 0x17, 0x48, 0xbf, 0x1e, 0xa1, 0xf9, 0xc0, 0xb7, 0x0d, 0xda, 0x05, 0xbe, 0x67, 0x69, 0x97, 0xf8, 0xae, 0x68, 0x97, 0x49, 0xcf, 0x92, 0xe4, 0xdd, 0xe2, 0xbd, 0x98, 0x32, 0x6c, 0xdf, 0x9b, 0x68, 0x7e, 0x8a, 0x70, 0x1a, 0x6d, 0x30, 0x94, 0x49, 0x16, 0xcf, 0x98, 0x2e, 0x48, 0x41, 0xaa, 0xaa, 0x5a, 0xe8, 0x05, 0x22, 0xb6, 0xf2, 0x81, 0xcf, 0xac, 0x9d, 0x14, 0x7e, 0x9e, 0x10, 0x2b, 0x70, 0xc7, 0xe4, 0x44, 0x87, 0x0a, 0xc4, 0xee, 0x7f, 0x87, 0x15, 0xf1, 0x17, 0x5b, 0x9e, 0x7e, 0xe2, 0x63, 0xd3, 0x4f, 0x7c, 0x98, 0xd7, 0x34, 0x8a, 0xe8, 0xa1, 0x56, 0xcd, 0xe5, 0x4b, 0x60, 0x31, 0x8d, 0x13, 0xc9, 0x27, 0x87, 0x3b, 0x00, 0xf9, 0xee, 0x72, 0xf6, 0x8f, 0xe1, 0x70, 0x97, 0x81, 0x8d, 0x71, 0x15, 0x1e, 0xfb, 0x18, 0xde, 0x82, 0x58, 0x05, 0xe9, 0x16, 0xc5, 0x75, 0xef, 0x49, 0xd6, 0x54, 0x91, 0x63, 0x94, 0x47, 0x0c, 0x73, 0x71, 0x40, 0x98, 0x4e, 0x5a, 0xd3, 0x78, 0xb7, 0x8f, 0x71, 0x41, 0xf6, 0x6b, 0x0d, 0xc2, 0x4a, 0x7d, 0xd8, 0x6e, 0x75, 0x22, 0xd6, 0xe2, 0x8b, 0x51, 0x86, 0x31, 0xac, 0x65, 0x25, 0xa8, 0x66, 0x77, 0x0a, 0xf6, 0x47, 0x18, 0xe3, 0xe6, 0x21, 0xf5, 0x63, 0xc0, 0x32, 0x73, 0xb8, 0x27, 0x5b, 0x08, 0x47, 0x41, 0xfc, 0x24, 0x9b, 0x34, 0x5b, 0x31, 0x57, 0xc4, 0x54, 0x30, 0x5e, 0x21, 0xf6, 0xdb, 0xa3, 0xd8, 0x37, 0x88, 0xbb, 0x94, 0x0d, 0x68, 0xe9, 0x7c, 0x7e, 0xc6, 0x56, 0xf0, 0x53, 0x5f, 0x31, 0x3f, 0x45, 0x98, 0xa1, 0xf6, 0x68, 0x68, 0x01, 0xce, 0x96, 0xc7, 0x08, 0xd6, 0x6b, 0x08, 0xeb, 0x71, 0x23, 0x86, 0x90, 0xdf, 0xdc, 0x88, 0xfb, 0x71, 0x6f, 0xc8, 0x63, 0x9e, 0x06, 0xb2, 0xf6, 0xc3, 0x50, 0x11, 0xbe, 0x1b, 0xb4, 0xdd, 0xb8, 0x07, 0x43, 0xea, 0x0f, 0x30, 0x76, 0x5f, 0xd8, 0x1e, 0x2f, 0xc1, 0x81, 0x25, 0x1c, 0xc5, 0x36, 0x60, 0x09, 0x49, 0xb9, 0x47, 0x1c, 0xb8, 0xfb, 0x86, 0xb2, 0x68, 0x05, 0x48, 0xb7, 0x55, 0xed, 0x1f, 0xea, 0xc0, 0x39, 0x03, 0xa9, 0x0b, 0xe8, 0xb4, 0x49, 0xd3, 0x44, 0x5a, 0x86, 0x61, 0xaf, 0x24, 0xb8, 0x64, 0x2c, 0x7d, 0x8c, 0x79, 0x53, 0x4e, 0x15, 0x03, 0x43, 0xfb, 0xab, 0xc4, 0x49, 0x3e, 0xaf, 0x99, 0x54, 0xc5, 0xe6, 0x69, 0x85, 0xd5, 0x80, 0x6d, 0xdb, 0xee, 0xc2, 0xb4, 0xea, 0x02, 0x1c, 0x25, 0x83, 0x15, 0xbe, 0xda, 0xbe, 0x4a, 0xda, 0xdf, 0x5e, 0x67, 0x6c, 0xce, 0x20, 0x7c, 0x97, 0xcf, 0xd7, 0xc8, 0xe6, 0xbe, 0x93, 0xfd, 0x79, 0x9a, 0xaa, 0xb6, 0x92, 0x1f, 0x3c, 0xca, 0x23, 0x0c, 0xa3, 0x5e, 0xa0, 0x14, 0xab, 0x52, 0xf6, 0xe3, 0x9e, 0x1f, 0xb8, 0x37, 0x94, 0x99, 0x97, 0xa6, 0x5a, 0x38, 0x55, 0x5a, 0x00, 0xf3, 0x0c, 0x19, 0x72, 0x03, 0xda, 0xf6, 0x60, 0x67, 0xd9, 0x19, 0x70, 0xec, 0xeb, 0xac, 0xfd, 0x41, 0x2e, 0xae, 0x8a, 0x8a, 0xb3, 0x60, 0x6e, 0x53, 0x4e, 0xdc, 0x67, 0xab, 0x2c, 0xf9, 0x40, 0x1b, 0xcc, 0xf5, 0x6b, 0x5b, 0xbd, 0x8d, 0x5a, 0x0f, 0xd6, 0x60, 0xa3, 0xb3, 0x98, 0x64, 0xf8, 0x72, 0x67, 0x69, 0x0f, 0x2b, 0x46, 0xd7, 0x18, 0xf6, 0x5d, 0xd6, 0x66, 0x97, 0xed, 0x1e, 0x15, 0xe4, 0x1c, 0xd7, 0x32, 0xed, 0xb2, 0x92, 0x2e, 0x64, 0xe8, 0xea, 0x10, 0x09, 0x58, 0x9d, 0xf1, 0xfc, 0x26, 0x84, 0xbc, 0x97, 0xad, 0x4e, 0x6d, 0xd0, 0x24, 0x91, 0xcf, 0x0d, 0xe9, 0x9c, 0x0d, 0xc7, 0x16, 0xef, 0xa7, 0x22, 0x86, 0x83, 0xd1, 0xb0, 0xf1, 0x76, 0xc4, 0x65, 0xb4, 0x1e, 0xac, 0xc5, 0xc3, 0x84, 0x75, 0x60, 0x9e, 0x0e, 0xa1, 0x03, 0x52, 0xdd, 0x11, 0xc0, 0xf2, 0xc2, 0xa6, 0xa3, 0x5b, 0x02, 0xed, 0x61, 0x79, 0x61, 0x07, 0x53, 0x2b, 0xeb, 0xc8, 0x4e, 0x7f, 0xff, 0x4e, 0xc4, 0xcd, 0x58, 0x07, 0x66, 0x91, 0xa3, 0xba, 0x3b, 0x0f, 0xc2, 0x4d, 0x0c, 0x8d, 0x54, 0x37, 0x58, 0xcb, 0x88, 0x37, 0xcd, 0xf6, 0xed, 0x28, 0x64, 0xb9, 0x3b, 0x55, 0x9c, 0x42, 0x31, 0x16, 0x0f, 0x18, 0x5e, 0xc5, 0xe1, 0xff, 0xec, 0x4e, 0x15, 0x31, 0x29, 0xdc, 0x40, 0xe1, 0xd3, 0x39, 0xbc, 0x23, 0x16, 0x1f, 0x43, 0xac, 0x1c, 0x72, 0x7f, 0x2c, 0x66, 0x20, 0xfa, 0x35, 0xa6, 0x32, 0x7d, 0xed, 0x6a, 0x5a, 0x33, 0xa8, 0xc6, 0x66, 0x59, 0x95, 0x9b, 0x0d, 0xb8, 0x4b, 0xb6, 0x91, 0x04, 0x7a, 0xc4, 0x64, 0x25, 0x8c, 0x0c, 0x7a, 0x37, 0x85, 0xe5, 0x2d, 0x2f, 0xad, 0x96, 0x3a, 0xee, 0x55, 0xe4, 0xbc, 0xd1, 0x1d, 0xf7, 0x0e, 0x9f, 0xf3, 0x8a, 0xa0, 0xb8, 0x8e, 0x7b, 0x1d, 0x6c, 0x5d, 0x68, 0x14, 0x5e, 0x46, 0xbc, 0x52, 0x75, 0x2e, 0x97, 0xdf, 0x12, 0x15, 0x4f, 0xe3, 0x3c, 0x20, 0x29, 0xf2, 0xc9, 0x2e, 0xbc, 0xcb, 0xe3, 0xbc, 0x90, 0xc2, 0xfd, 0x50, 0x40, 0xfc, 0x0e, 0x65, 0xbc, 0xc9, 0x89, 0x33, 0x52, 0x0b, 0x67, 0xcd, 0xf9, 0x93, 0x69, 0x94, 0x35, 0xdd, 0x17, 0x3d, 0x18, 0xb5, 0xb5, 0x17, 0x1c, 0xa8, 0xba, 0x72, 0x6b, 0x10, 0x64, 0x35, 0x93, 0x34, 0xfd, 0xac, 0xa3, 0x45, 0xa8, 0x6a, 0xa4, 0x14, 0xb6, 0xf5, 0x58, 0xc7, 0xad, 0x5f, 0x5f, 0x5f, 0xd3, 0x45, 0x23, 0xa8, 0x98, 0x4e, 0x75, 0xc5, 0xb4, 0x5e, 0xc6, 0x97, 0xd0, 0x0c, 0xa2, 0x67, 0x7c, 0x1a, 0x45, 0x5a, 0x2f, 0x78, 0x37, 0x8e, 0xf7, 0xe0, 0xe4, 0x35, 0xf5, 0xee, 0x44, 0xec, 0x81, 0x76, 0xe0, 0x69, 0x5a, 0x1b, 0x79, 0x7f, 0x76, 0x67, 0xf0, 0x39, 0x1c, 0xcd, 0xa9, 0xfd, 0x7f, 0x3d, 0xa4, 0xaf, 0x51, 0xab, 0xbd, 0x3c, 0x17, 0xdb, 0x0f, 0x16, 0x5b, 0x0a, 0xe2, 0x13, 0x91, 0xc4, 0x9b, 0x58, 0xa1, 0x38, 0x1b, 0xde, 0x08, 0xe2, 0x6c, 0xa1, 0x39, 0x85, 0x74, 0x81, 0x63, 0x1f, 0x3e, 0xd7, 0xc2, 0xd5, 0x93, 0x89, 0x78, 0x65, 0x67, 0x21, 0xb3, 0x15, 0x78, 0xfe, 0x20, 0xc6, 0x2c, 0x0f, 0x20, 0xd5, 0xb6, 0x0b, 0x31, 0x39, 0x90, 0xdf, 0x55, 0x5c, 0xc0, 0x5a, 0x51, 0x43, 0x5a, 0xad, 0xd9, 0x0a, 0xaf, 0x22, 0xe5, 0xdd, 0xdf, 0xfe, 0x5e, 0x97, 0x9a, 0xa3, 0xfb, 0xd3, 0xc9, 0x48, 0x84, 0x11, 0xf6, 0x79, 0x9c, 0xa8, 0x26, 0x08, 0xfc, 0xc8, 0x44, 0xde, 0xd4, 0x77, 0xd2, 0xea, 0xd2, 0xb6, 0x62, 0x8d, 0x5d, 0xf1, 0x1a, 0x37, 0xb9, 0x3c, 0x8e, 0xa8, 0x58, 0x07, 0xf2, 0x41, 0xcc, 0xdb, 0x1c, 0xcb, 0x3b, 0x0f, 0xde, 0x8c, 0xbe, 0x79, 0x6f, 0xff, 0xbd, 0xc9, 0x79, 0x27, 0xc2, 0x12, 0x79, 0xe7, 0x8d, 0x79, 0x33, 0xfa, 0x8f, 0xd4, 0xa9, 0xff, 0x3e, 0xdc, 0x87, 0xbb, 0x94, 0x59, 0xb9, 0x4b, 0xc0, 0xac, 0x6d, 0xb4, 0x7a, 0x58, 0xb6, 0x79, 0x0c, 0xce, 0xfd, 0xd3, 0x7c, 0x46, 0x9a, 0x21, 0xb4, 0xbf, 0xab, 0xbb, 0x31, 0x56, 0x4f, 0xf5, 0xa6, 0x36, 0xa2, 0x24, 0x4a, 0xb5, 0xb6, 0xdc, 0x4a, 0x6d, 0x25, 0xee, 0xcb, 0x5b, 0x71, 0x4d, 0xb6, 0x28, 0x84, 0x87, 0x3c, 0x6a, 0xcb, 0xd3, 0x06, 0x69, 0x46, 0xd8, 0xe1, 0xfd, 0xfb, 0x6c, 0xa5, 0xbf, 0xfd, 0x00, 0xf3, 0x6a, 0xd4, 0xba, 0x72, 0x97, 0x62, 0xae, 0x5b, 0x73, 0x9b, 0xb4, 0xcb, 0xda, 0xc3, 0x05, 0xcb, 0x20, 0xbd, 0x55, 0xdb, 0x5b, 0x11, 0x36, 0x22, 0x5c, 0x19, 0xad, 0x4e, 0xa0, 0x55, 0x4d, 0xbe, 0x02, 0xc8, 0xaf, 0x86, 0xa3, 0x51, 0xdb, 0x4e, 0xad, 0xee, 0x5f, 0xaf, 0xdc, 0x66, 0x62, 0x2d, 0x22, 0xed, 0x4f, 0x61, 0xe1, 0x9b, 0xe8, 0x22, 0xc6, 0x71, 0x08, 0xaf, 0x20, 0x58, 0xce, 0xc4, 0xc0, 0xba, 0xd0, 0x12, 0xeb, 0x2c, 0x65, 0x2a, 0x64, 0xc7, 0x5b, 0x8a, 0xe9, 0x5f, 0x7b, 0xa9, 0x7f, 0xfd, 0xb0, 0x96, 0xc6, 0xc3, 0x12, 0x2d, 0x8d, 0x71, 0xa9, 0x73, 0x1f, 0x52, 0xbe, 0x60, 0x32, 0xf7, 0x6f, 0x76, 0x03, 0xe2, 0xc4, 0x6b, 0x70, 0xce, 0x45, 0xa9, 0x8d, 0x2a, 0x9d, 0x80, 0x9b, 0xb1, 0x4d, 0x6b, 0x70, 0x85, 0x47, 0xc9, 0x3a, 0x82, 0x9a, 0xfe, 0xdc, 0x8b, 0xa1, 0x34, 0xd2, 0x7a, 0x04, 0x83, 0x2b, 0x4d, 0x25, 0xa9, 0x29, 0x83, 0x5a, 0xf4, 0xf7, 0x96, 0xca, 0x65, 0xed, 0x04, 0x5a, 0x87, 0x5b, 0x5f, 0xfb, 0x40, 0x7b, 0xb8, 0x15, 0xca, 0x53, 0x5e, 0xe8, 0xcc, 0x2a, 0x06, 0xe3, 0xde, 0x8e, 0xfa, 0xaa, 0xa3, 0x1d, 0x85, 0xb7, 0x3b, 0x90, 0x16, 0x51, 0x64, 0xa8, 0x81, 0x74, 0xc8, 0x84, 0x1c, 0xb0, 0x41, 0x1e, 0x14, 0xf5, 0x6f, 0xb3, 0x46, 0x55, 0x9f, 0x2d, 0xab, 0xdf, 0x5b, 0x10, 0x55, 0x8b, 0xf1, 0x2e, 0x67, 0x44, 0xd5, 0x42, 0xdb, 0xfc, 0x07, 0x5f, 0xfa, 0x6d, 0x9f, 0x75, 0x83, 0xea, 0xb4, 0x65, 0x6d, 0xad, 0x38, 0xea, 0x29, 0xe8, 0x50, 0x15, 0x5b, 0xd6, 0xf4, 0xd1, 0x5b, 0x53, 0x8e, 0x42, 0x46, 0x07, 0x52, 0x5f, 0x25, 0x38, 0x67, 0x4d, 0x6e, 0x13, 0xb6, 0xf4, 0x2c, 0xee, 0xb2, 0xbd, 0x08, 0xd1, 0x57, 0x05, 0xd7, 0xce, 0x39, 0x0f, 0xe6, 0xfd, 0x4f, 0x69, 0x3d, 0xf5, 0x30, 0xb4, 0x10, 0xf1, 0x97, 0x36, 0xec, 0xeb, 0x95, 0xb6, 0x46, 0xad, 0x05, 0x5b, 0xbf, 0xd5, 0x66, 0xc2, 0xd6, 0x6e, 0x25, 0xda, 0xdb, 0x3a, 0x4f, 0xc9, 0x18, 0xbe, 0x93, 0x79, 0x11, 0x47, 0xa8, 0x38, 0xc7, 0xd6, 0x3f, 0x08, 0xe2, 0xc2, 0x55, 0x03, 0xae, 0x8a, 0xad, 0x40, 0xba, 0xfa, 0x63, 0x68, 0xcf, 0xc2, 0x39, 0x3c, 0xc8, 0xb3, 0x17, 0x77, 0xfc, 0x79, 0x1b, 0x78, 0x47, 0xb7, 0x12, 0x54, 0x56, 0x8d, 0x22, 0x1e, 0x51, 0x60, 0x0e, 0x5c, 0x39, 0xd6, 0x06, 0xdc, 0xd5, 0xbd, 0x88, 0x11, 0x19, 0xd9, 0xa2, 0x43, 0x12, 0x3e, 0x55, 0x9b, 0x8e, 0xeb, 0xcb, 0xd0, 0x02, 0x14, 0x8b, 0x64, 0x79, 0x88, 0xfa, 0x20, 0xfa, 0x5d, 0x0d, 0xf5, 0x47, 0x1d, 0x9e, 0xd7, 0xfb, 0xca, 0xce, 0x69, 0x83, 0x11, 0xb0, 0x64, 0x24, 0xb4, 0xe4, 0x41, 0x4a, 0x68, 0xc9, 0x83, 0x4c, 0x9c, 0xbd, 0x92, 0x73, 0x60, 0x88, 0x3a, 0x21, 0x65, 0x24, 0xf6, 0x85, 0x31, 0x32, 0x93, 0xd2, 0x8d, 0x4a, 0x4a, 0x67, 0x14, 0xda, 0xf5, 0x90, 0x8a, 0xb3, 0x6a, 0x5b, 0xae, 0x97, 0xca, 0xd6, 0x56, 0x2a, 0x19, 0xba, 0x54, 0xb5, 0x62, 0x5d, 0x06, 0x26, 0xe6, 0x4d, 0x64, 0x59, 0x5d, 0xa4, 0xb7, 0x01, 0x96, 0xe1, 0xfd, 0x12, 0xec, 0xe0, 0x1e, 0xe9, 0xa8, 0x3d, 0x6c, 0x73, 0x91, 0xb6, 0xc7, 0xf0, 0x3d, 0x12, 0x21, 0xf6, 0xec, 0xa4, 0xf8, 0x32, 0xc2, 0x54, 0x6c, 0x95, 0xc0, 0x75, 0x16, 0x0e, 0x6a, 0x95, 0x84, 0xeb, 0x14, 0x4d, 0xd3, 0xfa, 0xc3, 0x70, 0x79, 0x81, 0x0a, 0x97, 0x37, 0x93, 0x37, 0x85, 0xf6, 0x77, 0x61, 0xe0, 0xbe, 0x8d, 0xed, 0xd2, 0xe8, 0x10, 0x0c, 0x74, 0x18, 0xf1, 0x9a, 0x80, 0xd7, 0xc3, 0xc2, 0x74, 0x6c, 0x5d, 0x7d, 0xed, 0x3d, 0xe1, 0x11, 0x9e, 0x14, 0x86, 0x85, 0x29, 0xb7, 0xfd, 0x5f, 0xf1, 0xa2, 0xd0, 0x99, 0x89, 0x75, 0xb8, 0x80, 0xd7, 0x69, 0xbc, 0xce, 0xc1, 0xc0, 0x1a, 0xac, 0xe3, 0xbd, 0x9b, 0x61, 0xa0, 0xab, 0x5a, 0xf7, 0x80, 0xb0, 0x04, 0xc3, 0xdb, 0xf4, 0xb8, 0xfe, 0xe5, 0xf5, 0xcd, 0x4d, 0xf5, 0x0d, 0x09, 0x73, 0xbf, 0xf7, 0xb4, 0x2c, 0x6d, 0x58, 0xda, 0xf2, 0x9d, 0x78, 0xbd, 0x87, 0xfd, 0x49, 0x98, 0x5b, 0x4e, 0xc2, 0x32, 0xee, 0x8d, 0xfd, 0xff, 0x75, 0xb4, 0xfc, 0x2d, 0xff, 0x7f, 0x1d, 0x0d, 0x9f, 0xd6, 0xff, 0x1f, 0xd9, 0x99, 0xfd, 0x64, 0x1b, 0xb3, 0x1d, 0xc5, 0x37, 0xb6, 0x31, 0xdb, 0x51, 0x39, 0xd2, 0xc6, 0x6c, 0xc7, 0xb1, 0x4f, 0xb2, 0x31, 0xdb, 0x51, 0x37, 0xd2, 0xc6, 0x6c, 0xc7, 0xbc, 0x6b, 0x6d, 0xcc, 0x76, 0xf8, 0xfe, 0x77, 0x6d, 0xcc, 0x12, 0x0f, 0xb7, 0x63, 0x57, 0x82, 0x87, 0x4b, 0x5a, 0x3b, 0xe1, 0x05, 0x1c, 0x7a, 0x20, 0x02, 0xc3, 0x2c, 0xc5, 0xd5, 0x85, 0xbd, 0x25, 0x67, 0xc0, 0x3a, 0xc9, 0x0f, 0x26, 0xef, 0x0e, 0x30, 0x94, 0x9e, 0x01, 0xbb, 0xb2, 0x1e, 0x43, 0x0a, 0x12, 0x76, 0x63, 0x5d, 0xcb, 0x40, 0x25, 0x2f, 0x42, 0x8a, 0x47, 0x29, 0xee, 0xec, 0x87, 0x9b, 0xd9, 0xd7, 0x4e, 0x1d, 0xf9, 0xb6, 0xc1, 0xf4, 0x79, 0xc9, 0xd6, 0x63, 0xaf, 0xd5, 0xe9, 0xd2, 0x65, 0x55, 0x88, 0x8f, 0x9f, 0x99, 0x2c, 0x03, 0x6a, 0x03, 0xd6, 0x48, 0x43, 0x78, 0x49, 0x5f, 0x12, 0xa7, 0x28, 0x24, 0x35, 0xe5, 0x33, 0x08, 0x4e, 0xe9, 0x1d, 0x33, 0x6d, 0x26, 0xe7, 0x68, 0x47, 0x15, 0x73, 0xe4, 0x41, 0x8e, 0xda, 0x83, 0x4e, 0xc4, 0xc8, 0xdd, 0xa6, 0x98, 0x4f, 0xe5, 0xe6, 0xac, 0xfe, 0x76, 0x3a, 0x95, 0xd2, 0xce, 0x26, 0xe5, 0xcb, 0x98, 0x8a, 0x3c, 0xaf, 0x0d, 0x8a, 0x73, 0x21, 0xbf, 0x15, 0xa6, 0xe7, 0x42, 0x01, 0xee, 0x0d, 0x06, 0xc4, 0x3d, 0x33, 0xc9, 0x57, 0x94, 0xa6, 0x85, 0x0c, 0xc4, 0x07, 0xa4, 0xe7, 0x21, 0x84, 0xcd, 0x22, 0x6c, 0xb1, 0xc9, 0xd8, 0x49, 0xd3, 0x57, 0x95, 0x5b, 0xc9, 0xeb, 0xd3, 0x32, 0xf6, 0x17, 0xad, 0x7d, 0xab, 0x5a, 0x49, 0xe9, 0xef, 0x44, 0x0a, 0xac, 0xf3, 0xbd, 0xae, 0x92, 0x3f, 0x9b, 0xa0, 0xba, 0x3b, 0x92, 0xd2, 0x8b, 0x7d, 0x14, 0x4a, 0x63, 0xab, 0x5e, 0x76, 0x5b, 0xb4, 0xa6, 0xdb, 0x36, 0xd6, 0x3e, 0x67, 0x25, 0xac, 0x2e, 0x78, 0x73, 0x23, 0xc2, 0x44, 0xab, 0xbb, 0x92, 0xec, 0x52, 0xc2, 0x9e, 0xc0, 0x93, 0xb4, 0x63, 0xc3, 0xe3, 0xcd, 0x29, 0xbb, 0x9f, 0xc4, 0xf8, 0x59, 0x7b, 0xd7, 0x84, 0x33, 0x48, 0x8a, 0x3d, 0x64, 0x66, 0x9b, 0x28, 0xe7, 0x48, 0x23, 0x0b, 0x67, 0x1a, 0xd1, 0xd0, 0x1d, 0xa6, 0x5c, 0xde, 0x59, 0x57, 0x46, 0x94, 0x6b, 0x34, 0xe5, 0x17, 0x0a, 0x5f, 0x30, 0x4a, 0x2e, 0x64, 0xce, 0x8d, 0xf6, 0x3f, 0x09, 0x66, 0x92, 0xa9, 0x9a, 0x5a, 0x06, 0xa6, 0xa9, 0x01, 0xc8, 0x9c, 0xea, 0x83, 0x1c, 0x25, 0x23, 0x6c, 0xea, 0xdf, 0x82, 0xa1, 0xd9, 0xec, 0x7b, 0x3e, 0x3b, 0xb8, 0x13, 0x21, 0xd3, 0xac, 0x84, 0x3d, 0x3d, 0xd2, 0x37, 0x4a, 0x92, 0x37, 0x4c, 0x4b, 0xfa, 0xf6, 0xa2, 0x52, 0x76, 0xe4, 0x57, 0xce, 0xfc, 0x2e, 0x08, 0xae, 0x21, 0x1c, 0xe7, 0xc0, 0x9a, 0x5a, 0xd0, 0x02, 0x01, 0xd2, 0x8a, 0x03, 0xc9, 0x4c, 0x7b, 0xda, 0x30, 0xad, 0x34, 0xc4, 0x56, 0xb1, 0xac, 0xe4, 0x90, 0xac, 0x98, 0xac, 0x35, 0x4b, 0xba, 0x98, 0x88, 0x4a, 0x80, 0x37, 0xed, 0x88, 0x01, 0x93, 0x3d, 0xdf, 0x66, 0x79, 0x37, 0xf5, 0x13, 0xc0, 0x7e, 0x9b, 0x03, 0x32, 0x4f, 0x6f, 0x50, 0xe4, 0xfe, 0x0e, 0xfc, 0x47, 0x5a, 0x76, 0xb8, 0xdc, 0x31, 0x5b, 0x99, 0xa5, 0x14, 0x8f, 0x59, 0x4b, 0x9b, 0xc9, 0xb9, 0x61, 0x47, 0x84, 0xbc, 0x4b, 0x12, 0x6f, 0x3c, 0xa2, 0xef, 0xf2, 0x4b, 0xc4, 0x2e, 0x1a, 0x56, 0xc5, 0xee, 0x1f, 0x32, 0xda, 0x11, 0x6b, 0x55, 0x6d, 0x76, 0x38, 0x16, 0x3d, 0xd6, 0x49, 0x23, 0x53, 0x81, 0x23, 0x63, 0x6f, 0x00, 0x33, 0xcb, 0x69, 0xcc, 0x30, 0xb9, 0xb8, 0x37, 0x0b, 0x7e, 0xf7, 0x3e, 0x18, 0xb8, 0x15, 0xc6, 0xfe, 0x07, 0x14, 0xd2, 0xd1, 0xec, 0x99, 0x34, 0x9b, 0x6d, 0x5b, 0x99, 0xc2, 0x69, 0x64, 0x8f, 0x0c, 0xdf, 0x4c, 0xd8, 0x67, 0x3b, 0xc0, 0x44, 0x9e, 0xb4, 0x4b, 0x4e, 0x83, 0x39, 0xd8, 0x5e, 0xfa, 0x3e, 0x58, 0xf6, 0xb4, 0x63, 0x3f, 0xb4, 0xa9, 0x19, 0xc1, 0x28, 0x86, 0x39, 0xc8, 0xf2, 0xb2, 0xe2, 0x3d, 0x10, 0xc5, 0x30, 0x3b, 0x9d, 0xbb, 0x09, 0xfb, 0x8c, 0xd7, 0xce, 0xf1, 0x7c, 0x9a, 0xa9, 0x55, 0xad, 0x05, 0xc7, 0x36, 0x25, 0x64, 0x16, 0xaf, 0x1e, 0xae, 0x18, 0xd0, 0x8e, 0x62, 0x9b, 0xba, 0x6c, 0x8d, 0x60, 0x55, 0x5b, 0xf6, 0x50, 0xdf, 0x36, 0xd8, 0x97, 0xb1, 0xb4, 0x66, 0x42, 0x97, 0x36, 0x17, 0x4c, 0x73, 0x59, 0xd2, 0x2c, 0xe4, 0xc1, 0x67, 0x73, 0xd8, 0x1c, 0xef, 0xe3, 0xad, 0xd8, 0xe7, 0xb9, 0xa4, 0xb1, 0x3a, 0x2c, 0x64, 0xfc, 0xf0, 0xf7, 0xb8, 0x57, 0x6e, 0xb2, 0x89, 0x13, 0x88, 0x28, 0x09, 0xc8, 0xa0, 0x1a, 0xd9, 0xff, 0x53, 0x97, 0xe2, 0x3d, 0x72, 0xd0, 0x86, 0xe3, 0x1c, 0xe8, 0x08, 0x81, 0xd6, 0x9a, 0x54, 0xbf, 0x17, 0xe3, 0x96, 0xb5, 0x4e, 0x8a, 0xb5, 0x66, 0xaf, 0x2a, 0xfb, 0x10, 0xfc, 0x48, 0x27, 0x93, 0xb7, 0x24, 0x1f, 0xde, 0x3d, 0x8e, 0x80, 0x33, 0xad, 0x15, 0x1c, 0x69, 0xce, 0x00, 0xbe, 0x15, 0xe1, 0x55, 0xd8, 0xe6, 0x3b, 0xd1, 0xad, 0x2e, 0x54, 0x3c, 0x56, 0x8b, 0xb1, 0xbd, 0xed, 0x16, 0x4d, 0x5b, 0x6d, 0x7a, 0xbe, 0xbd, 0xbe, 0xf2, 0xd5, 0xf6, 0x82, 0xdb, 0xb3, 0xc9, 0x62, 0xa2, 0xa1, 0xea, 0xaf, 0x16, 0x19, 0x32, 0x20, 0x0b, 0x26, 0x80, 0x02, 0x76, 0x70, 0x41, 0x01, 0x4c, 0x87, 0x19, 0x36, 0x8f, 0xea, 0x70, 0x82, 0x6a, 0xa3, 0x73, 0x56, 0x75, 0x22, 0xfe, 0x7a, 0xd4, 0x6c, 0xfc, 0x2d, 0x54, 0x33, 0x48, 0xf2, 0x40, 0x35, 0x3b, 0x3c, 0xaa, 0xd1, 0xe9, 0x21, 0xab, 0x8d, 0x76, 0x59, 0x29, 0x77, 0x2d, 0x67, 0xe8, 0x42, 0x56, 0x31, 0xb7, 0xe1, 0x33, 0xc1, 0x9e, 0xdd, 0x2e, 0x08, 0xa5, 0x97, 0x9c, 0x4d, 0x82, 0x4a, 0x0b, 0x94, 0xe5, 0xd8, 0xab, 0xd8, 0xbb, 0x7b, 0x76, 0x80, 0xb9, 0x7e, 0x35, 0xfe, 0x5a, 0x6a, 0x57, 0x46, 0x32, 0xfb, 0x77, 0x40, 0xa6, 0x2d, 0x6a, 0x2d, 0xb3, 0xee, 0x80, 0x6c, 0x17, 0xe9, 0xca, 0xec, 0x60, 0x1d, 0x38, 0x0f, 0xbe, 0xe7, 0xe0, 0x7b, 0x21, 0xbe, 0x93, 0x8e, 0x60, 0x11, 0xbe, 0x93, 0xbd, 0xbe, 0x4c, 0xa4, 0x81, 0xcc, 0x81, 0xce, 0x70, 0xc0, 0xba, 0x94, 0xf6, 0x12, 0xd5, 0x41, 0x38, 0x4f, 0xc8, 0x80, 0xbf, 0x86, 0xbd, 0x38, 0x83, 0xeb, 0x33, 0xf6, 0xb6, 0xd7, 0xa6, 0x3b, 0x7a, 0x9c, 0xf8, 0xec, 0xf2, 0x51, 0x5e, 0xaa, 0xc2, 0x33, 0xc3, 0xfc, 0xa3, 0xbe, 0xda, 0xa3, 0xde, 0xad, 0xde, 0x07, 0x15, 0x9f, 0xb7, 0x47, 0x35, 0x23, 0x64, 0xb4, 0x50, 0xef, 0xb6, 0x12, 0x04, 0x91, 0x10, 0xde, 0x0c, 0xaf, 0xeb, 0x8b, 0xcc, 0x9f, 0x7b, 0xd1, 0xba, 0x1c, 0xf2, 0x10, 0x57, 0xdd, 0x63, 0x5e, 0x8a, 0x73, 0x94, 0xd6, 0xd9, 0x0e, 0x9c, 0xcb, 0x6c, 0x23, 0x15, 0x21, 0x3c, 0x42, 0x2b, 0x9c, 0xfb, 0x04, 0xad, 0xda, 0xb9, 0x7c, 0xdd, 0x03, 0x67, 0xc8, 0x80, 0xbd, 0xaa, 0xe3, 0xb4, 0x08, 0xad, 0xa2, 0x3a, 0xb4, 0x8a, 0x0a, 0x68, 0x15, 0x01, 0xbb, 0xbf, 0x0d, 0xc8, 0xa7, 0x96, 0xba, 0x1a, 0x7b, 0xca, 0xcc, 0x7a, 0x85, 0x4d, 0x79, 0x08, 0x2f, 0xc2, 0x4b, 0xf6, 0x6c, 0xaa, 0xaf, 0x2b, 0xf9, 0x78, 0xa5, 0x96, 0x67, 0xda, 0xd3, 0x55, 0xbb, 0xc0, 0x5d, 0x0e, 0xf9, 0x04, 0x0d, 0xdc, 0x55, 0xe0, 0x12, 0x6b, 0xe7, 0x58, 0xf4, 0xbd, 0xfb, 0x8e, 0x75, 0xb5, 0xa5, 0xb8, 0x4a, 0x0f, 0x3c, 0x8d, 0x6b, 0xd5, 0x64, 0xcf, 0x03, 0xf3, 0xb1, 0x2d, 0x04, 0x01, 0x6d, 0x4f, 0x20, 0x5e, 0x5a, 0x66, 0xed, 0xa4, 0xfe, 0xf3, 0x6e, 0xe3, 0xde, 0x7b, 0x06, 0xf2, 0xb9, 0xf7, 0xe8, 0x7c, 0x8f, 0x7a, 0xef, 0xde, 0xb2, 0xd3, 0x48, 0x93, 0xc3, 0x96, 0x97, 0x54, 0x5b, 0x70, 0x1d, 0xc1, 0x8f, 0xdd, 0xeb, 0x70, 0x8d, 0xac, 0xc6, 0xf1, 0x38, 0xda, 0x9a, 0xb2, 0x77, 0x73, 0xc8, 0xd4, 0xbb, 0x3e, 0x6c, 0x70, 0x22, 0xfd, 0x15, 0x5c, 0x4f, 0x58, 0xd1, 0xee, 0xf5, 0xb5, 0xa7, 0x67, 0x61, 0xaf, 0xb5, 0xd2, 0x1a, 0xff, 0x81, 0x6d, 0xee, 0x1e, 0x61, 0xd7, 0x7b, 0x73, 0x9b, 0x7c, 0xe0, 0x49, 0xa2, 0x9b, 0xa0, 0x0b, 0xeb, 0x6c, 0x3a, 0xdd, 0xed, 0x35, 0xd2, 0x79, 0xbc, 0xda, 0xcc, 0x7b, 0x1d, 0x41, 0x81, 0x5a, 0x1d, 0x0a, 0x2c, 0xd0, 0xa1, 0x40, 0x10, 0x61, 0x66, 0x5a, 0xde, 0xa8, 0x37, 0x37, 0x63, 0xbc, 0x42, 0x5c, 0xbf, 0x64, 0x4f, 0x01, 0xf7, 0x04, 0x9d, 0x32, 0x48, 0x77, 0x79, 0xfe, 0xd0, 0xf7, 0x87, 0x57, 0xfa, 0x37, 0xbd, 0xd7, 0xf5, 0xda, 0x05, 0x13, 0x41, 0x31, 0x53, 0xd8, 0x34, 0x87, 0x6c, 0xc8, 0xa4, 0xab, 0x06, 0x65, 0xf4, 0x23, 0xaf, 0xec, 0x59, 0x5f, 0x6f, 0xd9, 0x13, 0xad, 0x35, 0x3b, 0x30, 0x9d, 0x73, 0xbd, 0xe2, 0x53, 0x36, 0xa9, 0x79, 0xc1, 0x75, 0x58, 0x43, 0xcb, 0x81, 0x67, 0xa0, 0xa8, 0xbe, 0x2b, 0xd8, 0xc9, 0x6d, 0x41, 0xac, 0x56, 0x5b, 0x48, 0xa3, 0x6b, 0xf5, 0x79, 0x1f, 0x50, 0xcd, 0xd6, 0x3b, 0x77, 0xf3, 0x69, 0xe4, 0x90, 0x9f, 0x46, 0x57, 0x49, 0x49, 0x9c, 0xc0, 0xc7, 0xfc, 0x5e, 0xdd, 0xd7, 0x03, 0x03, 0x0f, 0x6f, 0x6f, 0x9f, 0x9a, 0x52, 0x80, 0xcf, 0xbd, 0x78, 0xfd, 0x12, 0x06, 0x36, 0x46, 0x04, 0x2a, 0xd3, 0xb2, 0xb4, 0xb1, 0xbe, 0x39, 0xaf, 0xae, 0xbe, 0x75, 0x29, 0x22, 0x40, 0x02, 0x51, 0x4b, 0x0e, 0xfa, 0xbf, 0xef, 0x79, 0xfc, 0x1a, 0x1c, 0xee, 0x7e, 0xc4, 0xd1, 0xee, 0x57, 0xf0, 0xca, 0xc6, 0x2b, 0x07, 0x06, 0x7a, 0xcc, 0x30, 0xb0, 0x69, 0x17, 0x0c, 0xfc, 0xeb, 0x25, 0x6c, 0x85, 0x0f, 0x2f, 0x0c, 0xdb, 0xee, 0x81, 0x81, 0xcd, 0x45, 0x3a, 0x4e, 0x77, 0x11, 0x5b, 0xe3, 0xd1, 0xd3, 0x1e, 0x83, 0x34, 0x18, 0x03, 0xa3, 0xe9, 0xb5, 0x76, 0x51, 0x4b, 0xcb, 0xe2, 0x86, 0x15, 0x8b, 0x97, 0x27, 0x10, 0xbc, 0x61, 0x2d, 0x9b, 0xef, 0x6d, 0x58, 0xd4, 0xb4, 0x1c, 0x16, 0x2f, 0x5d, 0xb4, 0xe8, 0x06, 0x31, 0x1a, 0x97, 0x2e, 0x6e, 0x5e, 0xb1, 0x64, 0xd5, 0xf0, 0xc0, 0x7a, 0xce, 0x73, 0x04, 0x66, 0xb8, 0xfd, 0x54, 0xd2, 0xf3, 0xf3, 0x89, 0xe7, 0x7f, 0x99, 0x19, 0x8b, 0x94, 0xc0, 0x17, 0xbd, 0xff, 0xe9, 0xfd, 0x4f, 0xb2, 0xc7, 0x9b, 0xec, 0xd1, 0x60, 0x63, 0x11, 0xe3, 0x52, 0xab, 0x05, 0x56, 0x16, 0xce, 0x19, 0x89, 0x53, 0x6e, 0x74, 0x8c, 0xc4, 0x29, 0xd9, 0x7e, 0x68, 0x05, 0x79, 0xe0, 0x1b, 0x8e, 0x5b, 0x6e, 0x54, 0x86, 0xe1, 0x96, 0xd3, 0x75, 0x0b, 0x6e, 0xc3, 0xe3, 0x0c, 0x0e, 0x2b, 0x2d, 0x23, 0x81, 0x7f, 0xde, 0xdc, 0x06, 0xa9, 0x08, 0x45, 0xd2, 0x02, 0x4e, 0xb8, 0xa5, 0xd1, 0x50, 0x7d, 0x06, 0x6e, 0x11, 0x36, 0x44, 0x05, 0x36, 0xfa, 0x69, 0x3c, 0x51, 0xdf, 0x77, 0xe1, 0xc6, 0xf8, 0xe8, 0x46, 0x18, 0x89, 0x8f, 0xde, 0x6f, 0xfa, 0x24, 0x7c, 0x74, 0xe3, 0x85, 0x91, 0xf8, 0xe8, 0x46, 0xd3, 0xb5, 0xf8, 0xe8, 0x7d, 0x97, 0xff, 0x51, 0x7c, 0x54, 0xd8, 0x9d, 0xb7, 0x27, 0xbc, 0x47, 0x74, 0x99, 0x9d, 0xd4, 0xfe, 0x70, 0xd0, 0xe6, 0x84, 0x6c, 0xb6, 0xec, 0x71, 0x4b, 0xf2, 0x6e, 0x88, 0xf8, 0x55, 0x47, 0x98, 0xec, 0x83, 0x4a, 0xbd, 0x1d, 0x21, 0x0b, 0xc2, 0xd0, 0x99, 0xcf, 0x9e, 0x85, 0xf2, 0x50, 0xa6, 0x77, 0x39, 0xbc, 0xab, 0x32, 0x4c, 0x7d, 0xf6, 0x34, 0xc1, 0x67, 0x7c, 0x3f, 0x98, 0x48, 0x37, 0xb4, 0xee, 0xc1, 0x97, 0x55, 0x43, 0x61, 0x9b, 0xa6, 0xc5, 0x73, 0x62, 0x6f, 0x87, 0x31, 0xfb, 0xf2, 0x08, 0xb9, 0xc8, 0xd6, 0x73, 0x97, 0xc0, 0x50, 0xf5, 0xb7, 0x0e, 0xfd, 0x1c, 0x99, 0xf4, 0x50, 0x6d, 0x64, 0xa1, 0xa5, 0xd0, 0x0d, 0x4e, 0x6c, 0x93, 0x4c, 0xdc, 0x10, 0xa5, 0xe4, 0x48, 0xdf, 0x91, 0x43, 0xb3, 0x2f, 0x74, 0x15, 0xcc, 0xfe, 0xe8, 0x38, 0x98, 0xbd, 0x20, 0x85, 0x9c, 0x65, 0xe7, 0x40, 0xf1, 0x2f, 0x87, 0x37, 0x84, 0x15, 0xe5, 0xad, 0x27, 0xaa, 0x49, 0x16, 0x34, 0x4d, 0x7f, 0x7b, 0xbc, 0xa6, 0x3b, 0xf1, 0x64, 0xfb, 0xea, 0x4a, 0xa9, 0x55, 0x39, 0xb6, 0x51, 0x75, 0x21, 0x1e, 0xad, 0x58, 0x4b, 0xd9, 0xff, 0xe2, 0xcb, 0x81, 0x68, 0x43, 0xb6, 0x32, 0xc7, 0x5a, 0x49, 0x36, 0xf6, 0x12, 0x96, 0xf0, 0x02, 0xbe, 0x90, 0x59, 0x2d, 0xb0, 0x05, 0xbd, 0xbe, 0xc0, 0xe6, 0x50, 0xbf, 0x9a, 0x2d, 0xb3, 0x57, 0x63, 0xb7, 0x17, 0x1c, 0xee, 0xd9, 0xc4, 0xa3, 0x6e, 0xcb, 0x21, 0x1e, 0xf5, 0x83, 0x47, 0x29, 0x65, 0x02, 0x8f, 0x53, 0x8f, 0x0b, 0xeb, 0x6a, 0xa4, 0x13, 0x48, 0xfd, 0x3b, 0xbe, 0x0d, 0x46, 0x21, 0xfe, 0x3e, 0x15, 0x7b, 0x73, 0x2a, 0x64, 0x23, 0x06, 0x95, 0x63, 0x26, 0x9d, 0xbe, 0x85, 0xb5, 0x66, 0xbc, 0x23, 0xf9, 0x28, 0xd1, 0x19, 0x6f, 0x07, 0x3e, 0x8f, 0x09, 0xcf, 0x33, 0x7b, 0x3c, 0xe4, 0x43, 0xfa, 0x45, 0xdc, 0x85, 0xdc, 0x24, 0x7f, 0x11, 0xb9, 0xa9, 0xf7, 0x09, 0xb0, 0xd5, 0xa7, 0xe1, 0x68, 0x0c, 0xc2, 0x2d, 0xb8, 0x3f, 0xbd, 0x8a, 0x3b, 0x92, 0xc3, 0xdb, 0x13, 0x21, 0x2b, 0xac, 0x24, 0x53, 0x2d, 0x63, 0xce, 0x4b, 0x20, 0x6d, 0x52, 0x1b, 0xce, 0x8e, 0x28, 0x98, 0xc9, 0x02, 0x2e, 0xc6, 0xda, 0x55, 0xf2, 0x3e, 0x42, 0x40, 0xa4, 0x0a, 0xf0, 0x59, 0xd7, 0x0d, 0x44, 0x3c, 0x70, 0xeb, 0xb4, 0x65, 0xb8, 0xef, 0x5b, 0xf1, 0x17, 0x17, 0x4e, 0x3c, 0x74, 0x23, 0x61, 0x87, 0xd2, 0xb2, 0x88, 0xa1, 0xb7, 0xbd, 0x1e, 0x24, 0xc4, 0x16, 0xf2, 0x6f, 0xcf, 0x4e, 0x9f, 0x3d, 0x30, 0x14, 0xaa, 0x18, 0x18, 0x8a, 0xf0, 0x89, 0x6b, 0x04, 0xb6, 0xc3, 0x49, 0x48, 0x93, 0x32, 0x2a, 0x30, 0x57, 0x9a, 0x8b, 0x6e, 0xb3, 0xb0, 0xe5, 0xb8, 0xe5, 0xb2, 0x9e, 0xcb, 0x83, 0x6e, 0xb3, 0xbf, 0x09, 0xde, 0xa0, 0xb0, 0x07, 0xe9, 0x34, 0x28, 0x1b, 0xd3, 0x16, 0x92, 0x74, 0xb5, 0xfe, 0x7d, 0xab, 0x17, 0x57, 0x14, 0x9f, 0x5d, 0xc9, 0x62, 0x05, 0x60, 0xfa, 0xfd, 0x43, 0x4a, 0xec, 0xab, 0xec, 0xc4, 0xb9, 0x36, 0x91, 0x35, 0xf3, 0x00, 0x2e, 0xcc, 0xc1, 0x52, 0x10, 0x46, 0xa4, 0xb3, 0x8e, 0x45, 0x72, 0x19, 0x7a, 0xc8, 0x83, 0xb5, 0xb4, 0x4a, 0x54, 0xd7, 0x9c, 0x58, 0x6d, 0xe2, 0x31, 0x79, 0x06, 0x70, 0xcd, 0xb6, 0xee, 0x8f, 0xa7, 0x12, 0xe5, 0x21, 0x66, 0x7f, 0xb5, 0x97, 0xf6, 0x05, 0xa1, 0x0b, 0x1c, 0x2b, 0x13, 0xeb, 0xb4, 0x3a, 0x16, 0x13, 0x29, 0x0b, 0x45, 0xa4, 0x16, 0x25, 0x50, 0x1d, 0xaf, 0xb6, 0x5d, 0x53, 0xc7, 0x1c, 0xb5, 0x32, 0x91, 0xb7, 0x1e, 0x6b, 0xfe, 0x35, 0xb1, 0x32, 0x55, 0x3b, 0x8e, 0xd9, 0x55, 0x1c, 0xb3, 0xf4, 0xe4, 0xb5, 0xa0, 0x5a, 0xbc, 0x3b, 0xb1, 0x75, 0x3b, 0x01, 0x51, 0x52, 0x0c, 0x9b, 0x18, 0x7e, 0x47, 0xe8, 0x3e, 0x92, 0xe4, 0x89, 0xdd, 0x6f, 0x4b, 0x5a, 0x8b, 0xb8, 0x06, 0x3b, 0xc4, 0xac, 0xdd, 0xe6, 0xb3, 0x27, 0xe4, 0xab, 0x3a, 0xec, 0x3b, 0xc1, 0x7a, 0xb4, 0x13, 0x77, 0xef, 0xd3, 0x2b, 0x59, 0x9e, 0xc1, 0x2d, 0xb3, 0x8c, 0xa0, 0x56, 0xa7, 0x14, 0x80, 0xbf, 0x64, 0x4a, 0x09, 0x5b, 0x6a, 0x3c, 0x6f, 0x97, 0x8f, 0xed, 0x04, 0x27, 0xd5, 0x63, 0x77, 0xe7, 0x62, 0x23, 0x96, 0x77, 0x5e, 0x35, 0x06, 0x49, 0xfb, 0xe1, 0xfc, 0xe4, 0xb9, 0xe0, 0x9c, 0xbc, 0x1c, 0x0c, 0x90, 0x87, 0x3b, 0xf0, 0x79, 0xa4, 0x5b, 0x0c, 0xe4, 0xd3, 0x03, 0xf7, 0xe8, 0x9b, 0xbc, 0x77, 0x2c, 0x36, 0x23, 0xee, 0x72, 0xe1, 0x67, 0x7d, 0x14, 0x12, 0xdc, 0x42, 0x52, 0x29, 0xba, 0x8d, 0x70, 0xb6, 0xc6, 0x94, 0xa8, 0xdb, 0x17, 0x06, 0x71, 0x4b, 0x7f, 0xeb, 0x82, 0xf3, 0x0b, 0x83, 0x32, 0xde, 0xff, 0x04, 0xf9, 0xff, 0x84, 0x6f, 0xc6, 0x93, 0xfe, 0x02, 0x71, 0xaf, 0xd8, 0xed, 0x09, 0x5f, 0xe2, 0x67, 0x83, 0xf8, 0xd2, 0x92, 0x7a, 0xb0, 0xe3, 0xed, 0xf5, 0x27, 0xfd, 0xd1, 0x92, 0xd0, 0x51, 0x6f, 0x49, 0x61, 0xb1, 0xd4, 0xa3, 0x16, 0xc4, 0xd2, 0x78, 0x7d, 0xd9, 0x30, 0x5d, 0x3c, 0xcf, 0xde, 0xeb, 0x0b, 0x5f, 0xe2, 0x67, 0x43, 0x10, 0x64, 0x0f, 0x68, 0x2b, 0x53, 0x5f, 0x5c, 0xf3, 0xf6, 0x7d, 0xd1, 0xd2, 0xde, 0x92, 0xc5, 0x72, 0x01, 0xdc, 0xf9, 0xb2, 0x76, 0xd8, 0x5c, 0x22, 0xb9, 0x16, 0x1b, 0x5a, 0x0d, 0xb4, 0xd7, 0x17, 0x71, 0x4c, 0xd9, 0xf7, 0x5d, 0x30, 0x19, 0xc0, 0x1c, 0x32, 0x40, 0x29, 0x58, 0xcc, 0xbe, 0x5b, 0xb4, 0xe0, 0x41, 0x9f, 0xcc, 0xb9, 0xb7, 0x51, 0x1e, 0x5f, 0x40, 0xec, 0x00, 0xeb, 0x38, 0xc8, 0xf5, 0x69, 0xdb, 0x0d, 0xa1, 0x2c, 0x5c, 0x69, 0x83, 0x21, 0x23, 0xce, 0x6b, 0x59, 0x4d, 0xc3, 0xe7, 0xcb, 0x98, 0x52, 0x06, 0x53, 0xa2, 0x87, 0xcd, 0xbe, 0x49, 0xda, 0xe2, 0x34, 0x0c, 0x33, 0xe0, 0x7e, 0x90, 0x02, 0x1f, 0x7c, 0xb1, 0x14, 0x5e, 0xb9, 0xd9, 0x0b, 0xe7, 0x04, 0x17, 0xcc, 0xf7, 0xcb, 0x90, 0x21, 0x52, 0x80, 0xd8, 0x5d, 0xf1, 0x38, 0x8f, 0x9c, 0xa1, 0x9f, 0x13, 0x61, 0x1f, 0xdd, 0x41, 0xd6, 0x3f, 0x58, 0xd6, 0x8f, 0xac, 0x49, 0xb5, 0x4a, 0x7b, 0x3b, 0x42, 0x05, 0x8c, 0x33, 0xbe, 0xe3, 0xce, 0x48, 0x58, 0xd6, 0xb2, 0x01, 0x87, 0x9d, 0x62, 0x0d, 0x5c, 0x43, 0x8c, 0x4f, 0xeb, 0xdd, 0xdc, 0x4f, 0x9a, 0xeb, 0x06, 0x55, 0x45, 0x3a, 0x60, 0xa1, 0x35, 0x17, 0x56, 0x47, 0xc0, 0x1a, 0x7c, 0xe0, 0x10, 0x59, 0xf0, 0xa8, 0x53, 0x70, 0xb7, 0x34, 0x09, 0x4b, 0x9a, 0xb4, 0x42, 0x68, 0xcf, 0x5b, 0x05, 0x33, 0x72, 0xe1, 0xdc, 0x4a, 0xc8, 0xc3, 0x3c, 0x10, 0xc3, 0x4c, 0x65, 0xf9, 0x35, 0x5d, 0x37, 0xd5, 0x05, 0x7f, 0xac, 0x22, 0xf9, 0x53, 0xa7, 0xb4, 0xfa, 0xa6, 0xf3, 0x4f, 0x6d, 0x58, 0xe7, 0x80, 0xf3, 0x8f, 0x1d, 0x5b, 0xfb, 0xdb, 0x35, 0xb6, 0x8e, 0xc9, 0xa5, 0x60, 0xa8, 0x7c, 0x2b, 0x67, 0x50, 0xb7, 0xea, 0x8c, 0x58, 0x74, 0x30, 0x4a, 0x50, 0x24, 0x24, 0x07, 0x7b, 0x12, 0x96, 0x50, 0x08, 0xbb, 0x56, 0xa4, 0x7e, 0xc4, 0x32, 0xe9, 0x5b, 0x6f, 0x7b, 0x1d, 0x7e, 0x55, 0xc6, 0x1d, 0xe9, 0x61, 0xab, 0x01, 0x06, 0xb6, 0x97, 0x3c, 0xae, 0xb7, 0x27, 0x94, 0x41, 0xb6, 0x22, 0x7e, 0x84, 0x78, 0xe6, 0xd7, 0xe2, 0x36, 0xf4, 0x68, 0x7f, 0x8f, 0xc5, 0xb1, 0x8e, 0x53, 0x2c, 0x08, 0x4f, 0x32, 0x42, 0x99, 0xb1, 0x78, 0xf3, 0x74, 0x0d, 0x15, 0xb2, 0x2d, 0x41, 0x1a, 0x2a, 0x89, 0xdc, 0xac, 0x16, 0x3a, 0x2f, 0x42, 0xea, 0xcf, 0xd0, 0x83, 0x98, 0x7c, 0xd5, 0x3d, 0xc1, 0xf6, 0xdd, 0xa4, 0xc1, 0x8a, 0xef, 0x54, 0x97, 0xdd, 0xd1, 0x7a, 0x53, 0x4f, 0x3b, 0xa6, 0xd3, 0xc4, 0x15, 0xb3, 0x83, 0x4e, 0xda, 0x2d, 0xb8, 0x62, 0xf7, 0xd2, 0xca, 0xd6, 0x7c, 0x08, 0xef, 0x97, 0xc1, 0xc1, 0x30, 0xf9, 0x63, 0x16, 0xbb, 0x90, 0xd1, 0x8b, 0xef, 0xea, 0x4c, 0x65, 0x19, 0x6c, 0x43, 0x1c, 0x74, 0xb3, 0xc5, 0x92, 0x31, 0x2e, 0xd3, 0xb2, 0x07, 0x42, 0x1f, 0xbf, 0xed, 0x97, 0x4b, 0x40, 0x8b, 0x96, 0x58, 0x9d, 0xb0, 0xbb, 0x05, 0x0a, 0x61, 0x77, 0x47, 0xbd, 0xbc, 0x99, 0xa8, 0x3b, 0x83, 0x4c, 0xdc, 0x0a, 0xed, 0xd5, 0x28, 0xad, 0x21, 0xf2, 0x9c, 0x4b, 0x2b, 0xc0, 0x6c, 0x88, 0x59, 0xc9, 0xc9, 0x77, 0x43, 0x3a, 0xce, 0x16, 0x29, 0x64, 0x62, 0xfb, 0x8e, 0xef, 0xaa, 0xf3, 0x10, 0xbe, 0x55, 0x07, 0x96, 0xc0, 0xc1, 0x90, 0x99, 0x43, 0x0e, 0x22, 0xbd, 0xba, 0x5b, 0xb5, 0x23, 0xdd, 0xb2, 0x29, 0xe3, 0x00, 0xdb, 0x1d, 0xdc, 0x66, 0x19, 0x87, 0xbf, 0x9b, 0x33, 0xc6, 0xc5, 0xca, 0x14, 0x7e, 0xa7, 0x1f, 0xc0, 0x78, 0xb8, 0x4b, 0x3b, 0xa0, 0x37, 0x22, 0xfd, 0x71, 0x47, 0xf3, 0x77, 0xcb, 0xa5, 0x68, 0xbb, 0x6b, 0x09, 0xac, 0xc3, 0xb9, 0x77, 0x3a, 0x8e, 0xdb, 0x08, 0x0d, 0xa2, 0x05, 0x58, 0xf7, 0xf9, 0x99, 0x96, 0xac, 0x71, 0x16, 0x4b, 0xaf, 0x1c, 0xfa, 0x38, 0x42, 0xbc, 0x1d, 0xf2, 0x06, 0x7b, 0xda, 0xdf, 0xc7, 0xfb, 0x7c, 0x4b, 0x0a, 0x84, 0xb3, 0xaf, 0x13, 0x4f, 0xf2, 0x7b, 0x88, 0xfe, 0x30, 0xb2, 0x1d, 0x37, 0x61, 0x71, 0xe8, 0xed, 0x0d, 0x6b, 0x52, 0x7a, 0x3a, 0x04, 0x3e, 0x53, 0xf5, 0x55, 0x00, 0xdc, 0x8b, 0x56, 0x91, 0x94, 0x0d, 0xc5, 0xc0, 0x5d, 0x63, 0x15, 0x8e, 0xb4, 0x21, 0xf8, 0x04, 0xb4, 0x62, 0xbf, 0x77, 0xc4, 0x43, 0x3b, 0x30, 0xd6, 0xea, 0xdd, 0xd1, 0xda, 0xb4, 0x9e, 0x76, 0x7a, 0xc3, 0xef, 0x56, 0x1c, 0xe5, 0x6f, 0x8a, 0x1c, 0x10, 0x66, 0xb1, 0xdf, 0x9a, 0xc0, 0x52, 0xec, 0x79, 0x80, 0x5d, 0x18, 0x77, 0x3f, 0xcf, 0x9c, 0xdd, 0x18, 0x77, 0xbf, 0x9e, 0xdf, 0x5e, 0x96, 0xba, 0xeb, 0xaa, 0xc0, 0x71, 0xb1, 0xcf, 0x73, 0xa4, 0x91, 0xe5, 0x26, 0xd8, 0x4b, 0x7a, 0x59, 0x0f, 0x82, 0x9a, 0x87, 0xf0, 0x5a, 0x71, 0x1b, 0xf4, 0xb3, 0x31, 0x4f, 0xd8, 0x6a, 0x9d, 0xcd, 0xb1, 0x0d, 0xde, 0x27, 0xc1, 0x86, 0x97, 0xe2, 0xcd, 0xc5, 0x3d, 0x93, 0xc3, 0x86, 0xd6, 0xd9, 0x4b, 0xed, 0xe3, 0x43, 0xaf, 0x28, 0xf3, 0x02, 0x3d, 0xe1, 0xe9, 0x34, 0xee, 0xfe, 0x25, 0xb8, 0xc3, 0xed, 0xbf, 0xba, 0x9f, 0xad, 0xd5, 0x11, 0xdd, 0x65, 0x88, 0x40, 0x39, 0x71, 0x2c, 0x76, 0x63, 0x7f, 0x6c, 0xb2, 0x1c, 0x60, 0xff, 0x46, 0x9b, 0x2d, 0x64, 0x3b, 0x68, 0xdb, 0xc9, 0x2e, 0x4b, 0x14, 0xe9, 0x11, 0x9c, 0x11, 0x9c, 0x7f, 0x07, 0xf3, 0x75, 0x8b, 0xf5, 0x33, 0x6c, 0x6e, 0xc9, 0xcc, 0x19, 0x76, 0xd1, 0x92, 0x77, 0xc3, 0x4d, 0xf6, 0xd1, 0xa4, 0xe5, 0x88, 0x3b, 0x49, 0x4a, 0xd5, 0xfe, 0xc1, 0x63, 0x54, 0xfb, 0x55, 0x05, 0x6f, 0xdc, 0x57, 0x81, 0xf8, 0x8e, 0x6d, 0x5e, 0x4d, 0xb7, 0x2b, 0x56, 0x77, 0xda, 0x2d, 0x52, 0x84, 0xe6, 0x1c, 0xd7, 0x3d, 0xa0, 0xd7, 0x1d, 0x61, 0x3b, 0xc3, 0x78, 0x27, 0x63, 0x4f, 0x5c, 0x77, 0x9b, 0xcf, 0x91, 0x11, 0x7a, 0x25, 0xbf, 0x0d, 0xcc, 0x47, 0x7e, 0xf5, 0xec, 0x39, 0x1d, 0x47, 0x7a, 0x37, 0xa9, 0x2e, 0x6d, 0xda, 0x09, 0x71, 0x9e, 0xce, 0x9a, 0x9d, 0xfe, 0x64, 0x9c, 0xcc, 0x96, 0x0b, 0xab, 0x10, 0x6e, 0x1b, 0x6c, 0x4f, 0x42, 0xab, 0xd8, 0xe7, 0x86, 0xef, 0x07, 0xc7, 0xc8, 0x66, 0x52, 0x29, 0x71, 0xac, 0xf6, 0x76, 0xe0, 0x9c, 0xdd, 0x8c, 0x33, 0x79, 0xb5, 0xd0, 0xbb, 0xc4, 0x7d, 0x31, 0x35, 0x2f, 0xa1, 0x9d, 0xb6, 0x35, 0xef, 0x96, 0x61, 0x38, 0xd6, 0x75, 0x30, 0x2e, 0x45, 0xd7, 0x67, 0x23, 0x39, 0xc7, 0x7a, 0x0b, 0x79, 0x2a, 0x41, 0x18, 0x90, 0x3d, 0x09, 0x57, 0x2a, 0xee, 0x67, 0x86, 0xea, 0xd3, 0x70, 0x0b, 0xad, 0xde, 0x18, 0x1f, 0x33, 0x86, 0x41, 0x68, 0x4f, 0x47, 0x46, 0x95, 0x9e, 0x81, 0x17, 0xe2, 0x75, 0x0a, 0x32, 0xf6, 0xd9, 0x8b, 0x61, 0x0f, 0xe1, 0x7c, 0xa5, 0x79, 0x7d, 0x89, 0x43, 0x5a, 0x30, 0xe4, 0x2e, 0x7d, 0x06, 0x5f, 0x8a, 0xa7, 0x5e, 0x4d, 0x9a, 0xb3, 0x71, 0x4f, 0x48, 0xac, 0x31, 0x1b, 0x91, 0x12, 0xde, 0xb3, 0xec, 0x1e, 0x61, 0xff, 0x71, 0xf3, 0x51, 0xc4, 0xdd, 0x8a, 0x21, 0xed, 0xdc, 0x5a, 0x13, 0xae, 0x55, 0xf8, 0xef, 0xb0, 0xa1, 0xb0, 0xf8, 0xb5, 0x14, 0xec, 0x99, 0xd5, 0xf8, 0x2e, 0xd3, 0xbb, 0x80, 0xca, 0x5f, 0xf4, 0xc0, 0x3b, 0xcd, 0x33, 0x0f, 0x46, 0x11, 0x62, 0x16, 0xe3, 0x9e, 0xe6, 0x61, 0x18, 0x8b, 0x63, 0x84, 0xe1, 0xa7, 0x44, 0xae, 0xd3, 0xbc, 0x72, 0x91, 0x82, 0x58, 0x6c, 0xfd, 0xb6, 0x58, 0x4e, 0xf9, 0xc5, 0x4b, 0xde, 0xc6, 0x99, 0x73, 0x3a, 0xbf, 0xf8, 0x1b, 0xff, 0x11, 0x0b, 0x33, 0x7a, 0x34, 0x27, 0xa6, 0x39, 0x47, 0x16, 0x2d, 0x86, 0x6a, 0x89, 0x3b, 0xbb, 0x71, 0x43, 0x82, 0x67, 0x8b, 0x98, 0x7d, 0x1a, 0x69, 0x3d, 0x6b, 0x97, 0xc8, 0x1a, 0x02, 0x41, 0x1d, 0x6c, 0xdb, 0xcc, 0x5b, 0x2b, 0x10, 0x1b, 0x43, 0xc8, 0x39, 0xeb, 0x0c, 0x78, 0xad, 0xf7, 0x25, 0x71, 0x6d, 0xa7, 0x2b, 0xeb, 0xc9, 0xff, 0xd7, 0xf7, 0x76, 0xc3, 0xb1, 0xc9, 0x01, 0x78, 0x95, 0x9e, 0x37, 0x3e, 0x82, 0xbb, 0x4a, 0x1b, 0x64, 0xc2, 0x6f, 0x6e, 0x26, 0x2c, 0xee, 0xf0, 0x88, 0x3e, 0xac, 0xc1, 0x38, 0x3f, 0x3f, 0x29, 0xc1, 0x06, 0xba, 0x9f, 0x97, 0x60, 0x13, 0xdd, 0x4f, 0x49, 0xb0, 0x99, 0xee, 0xff, 0x23, 0xc1, 0x36, 0x9c, 0xcd, 0xbd, 0x5c, 0xab, 0x67, 0x87, 0x71, 0x92, 0xd7, 0xc5, 0x3d, 0x84, 0x14, 0x47, 0x47, 0x45, 0x69, 0x85, 0x0c, 0xe0, 0xfe, 0xe2, 0x84, 0xff, 0xe0, 0x52, 0x7e, 0xc0, 0x25, 0xff, 0x1c, 0x1e, 0xa3, 0xfb, 0xb6, 0xd3, 0xb0, 0x0b, 0x6b, 0xb3, 0x23, 0x36, 0x12, 0x57, 0xdf, 0xbd, 0x66, 0xdc, 0x06, 0x98, 0xc2, 0x49, 0xe4, 0x28, 0x71, 0x8e, 0x3b, 0x58, 0xcf, 0x98, 0xd7, 0x18, 0x43, 0x21, 0x86, 0x63, 0x7a, 0x8a, 0xd3, 0xf1, 0xdc, 0x1e, 0xd7, 0x5b, 0x50, 0x45, 0xf7, 0x0f, 0x25, 0x08, 0xd2, 0xfd, 0x5d, 0x09, 0xe6, 0xd3, 0xfd, 0x3d, 0x09, 0x16, 0x30, 0x3d, 0xd5, 0x72, 0x9d, 0x36, 0x04, 0x6a, 0xba, 0xaf, 0x69, 0x45, 0x21, 0xb7, 0x22, 0xcc, 0xad, 0x08, 0x71, 0x2b, 0x8e, 0xc2, 0x12, 0x6e, 0xc5, 0xe3, 0x10, 0xc1, 0x56, 0x34, 0xc4, 0xcb, 0x55, 0xae, 0x99, 0x6b, 0xd7, 0x6d, 0xc5, 0xe0, 0x3b, 0xdc, 0x8a, 0x20, 0xb6, 0x82, 0x34, 0x30, 0xe7, 0x5b, 0x0e, 0x68, 0x64, 0xa7, 0x75, 0x81, 0x7e, 0x0f, 0x5a, 0x2c, 0x18, 0xdb, 0xc2, 0xf0, 0x43, 0x3c, 0x4b, 0x96, 0x68, 0xac, 0x8c, 0xc1, 0x97, 0xc9, 0x2f, 0x9b, 0x6e, 0x15, 0xfd, 0xdb, 0xb4, 0x53, 0x1d, 0x21, 0xdb, 0xbf, 0xb8, 0x4b, 0xaa, 0xe6, 0x60, 0x8f, 0xc0, 0xa1, 0x68, 0xf7, 0xa4, 0x3d, 0x56, 0x60, 0x56, 0xb5, 0xa7, 0x71, 0xc7, 0xb3, 0xe0, 0xce, 0xd9, 0x9e, 0xd8, 0xe9, 0x54, 0xb9, 0xa7, 0x3d, 0x10, 0x6d, 0x4c, 0x4b, 0x58, 0xa1, 0xa5, 0xfd, 0xad, 0xea, 0xdb, 0x98, 0xc7, 0x03, 0x22, 0x8f, 0x5b, 0x3d, 0xcc, 0x15, 0x8d, 0xe7, 0x71, 0xe3, 0xdc, 0x91, 0x4a, 0x30, 0xd4, 0x21, 0xf6, 0x46, 0x33, 0x9e, 0xbe, 0xcd, 0xed, 0xa1, 0x74, 0x0f, 0x70, 0xad, 0x1e, 0xe8, 0x49, 0xf0, 0x42, 0x1e, 0x7e, 0x18, 0x06, 0x9e, 0x6c, 0x6b, 0x9f, 0x9a, 0x32, 0x11, 0x9f, 0x0f, 0xe0, 0xf5, 0xdf, 0x30, 0xf0, 0x48, 0xad, 0xa0, 0xd1, 0x97, 0x36, 0x45, 0xee, 0x69, 0x19, 0xce, 0x0b, 0x49, 0x0e, 0x22, 0x06, 0xc8, 0x17, 0xfe, 0xef, 0x33, 0x40, 0x60, 0xe0, 0xfb, 0x95, 0x78, 0x19, 0xb0, 0x5e, 0x58, 0xdf, 0xef, 0xe3, 0xfb, 0xa3, 0xb5, 0x78, 0x9d, 0xc7, 0xeb, 0x92, 0xce, 0xf1, 0xa8, 0xc1, 0x6f, 0x5e, 0x3d, 0xee, 0x7e, 0x18, 0xcd, 0x3c, 0x8f, 0x6c, 0x30, 0xc3, 0x58, 0xcf, 0xc8, 0x56, 0x0c, 0x63, 0xef, 0x2c, 0xaf, 0xff, 0x4e, 0xed, 0x8a, 0x45, 0xcd, 0x75, 0xb1, 0xf7, 0x61, 0x8d, 0x6b, 0xae, 0xbf, 0xbb, 0xbe, 0x45, 0x59, 0xb2, 0xa8, 0xa9, 0xae, 0xa1, 0xbe, 0x19, 0xc2, 0x8b, 0x1a, 0xeb, 0x23, 0x2b, 0x9a, 0xe3, 0xf9, 0x24, 0xf1, 0x3a, 0x1e, 0xbd, 0x2b, 0xf1, 0xfc, 0x6f, 0x3d, 0xc9, 0x15, 0xff, 0x64, 0x1e, 0xc7, 0x23, 0x33, 0x3e, 0x99, 0xc7, 0xf1, 0x88, 0xf3, 0xd3, 0xf2, 0x38, 0x1e, 0xb1, 0xfe, 0x6d, 0x1e, 0xc7, 0x23, 0x27, 0xfe, 0x61, 0x1e, 0x47, 0xca, 0xdf, 0xe2, 0x71, 0x3c, 0x7c, 0xf1, 0xc6, 0x3c, 0x8e, 0x47, 0xe4, 0x91, 0x3c, 0x8e, 0x47, 0x4e, 0x7f, 0x12, 0x8f, 0xe3, 0x91, 0x09, 0x23, 0x79, 0x1c, 0x8f, 0xa4, 0x5d, 0xcb, 0xe3, 0x78, 0x78, 0xe0, 0x1f, 0xe5, 0x71, 0x90, 0x4d, 0x2f, 0x7d, 0xbf, 0xf2, 0x20, 0x94, 0xce, 0x4b, 0x82, 0xc9, 0x05, 0xca, 0x7a, 0xdc, 0xa7, 0xbd, 0x08, 0x43, 0x52, 0xff, 0x5d, 0x81, 0x72, 0x7c, 0x0e, 0xe0, 0x33, 0x3c, 0xec, 0x81, 0x2a, 0x77, 0x5b, 0xd4, 0x02, 0x46, 0x60, 0x5b, 0x18, 0x8f, 0x74, 0x90, 0x5d, 0x37, 0x7c, 0x37, 0xe1, 0xb8, 0x64, 0xba, 0x3d, 0x90, 0xc9, 0x6f, 0x06, 0xc8, 0x26, 0xcb, 0x13, 0x4b, 0x00, 0x72, 0xf8, 0xfd, 0xb3, 0xa0, 0x90, 0xc7, 0x25, 0xb7, 0x1f, 0x6c, 0xfc, 0x2e, 0x83, 0x83, 0x52, 0xff, 0xfb, 0x0e, 0xb2, 0x50, 0x81, 0xef, 0x16, 0xc8, 0x27, 0x0e, 0xbd, 0xf7, 0x19, 0x28, 0x2a, 0xf9, 0x30, 0x41, 0x6d, 0x0c, 0x2e, 0x43, 0x78, 0x67, 0x8f, 0x2c, 0xbc, 0x8e, 0x5f, 0x3b, 0x7b, 0xc2, 0x96, 0x35, 0xdb, 0x8c, 0x2b, 0x14, 0xb8, 0xb3, 0x3b, 0x5d, 0xf0, 0x13, 0x74, 0x3e, 0x42, 0x76, 0xb8, 0xb6, 0xd6, 0x8c, 0x7b, 0xd5, 0x5f, 0xc8, 0x7e, 0x66, 0x6d, 0x91, 0x2a, 0x38, 0x08, 0xf9, 0x82, 0x6f, 0x50, 0xe7, 0x12, 0xdc, 0x02, 0x4b, 0x31, 0xc4, 0xf8, 0x05, 0x86, 0x04, 0xbf, 0xe0, 0x91, 0x66, 0xc1, 0x2f, 0xf0, 0x82, 0x6a, 0x8c, 0x5c, 0x25, 0x7c, 0x71, 0xbc, 0x07, 0x6e, 0x31, 0x4d, 0x25, 0xba, 0x34, 0xa4, 0x24, 0xd1, 0xac, 0x99, 0xf2, 0x54, 0xa2, 0x6a, 0x95, 0xa6, 0x24, 0x8f, 0x52, 0x9b, 0x69, 0x86, 0x46, 0x40, 0xf0, 0x70, 0xf2, 0xf3, 0x60, 0x7e, 0xcc, 0xdf, 0xd6, 0xf5, 0x71, 0x8e, 0xc4, 0xa9, 0x8c, 0x90, 0x12, 0x4c, 0xf6, 0xa3, 0xa5, 0x3d, 0xaf, 0x73, 0x7b, 0x94, 0xaa, 0xcd, 0x95, 0x6f, 0x19, 0x72, 0x14, 0x10, 0x58, 0x19, 0xc6, 0x99, 0x0a, 0xc1, 0x70, 0x3a, 0x52, 0x10, 0xf6, 0x78, 0xb9, 0x07, 0x30, 0xee, 0x37, 0x05, 0x15, 0x80, 0x14, 0x80, 0x45, 0x60, 0x44, 0x3b, 0x0f, 0xf3, 0x2c, 0xb5, 0xd9, 0x97, 0x43, 0x1e, 0xe2, 0x08, 0x03, 0xff, 0x3e, 0x43, 0xcd, 0x54, 0x3c, 0xd6, 0xe5, 0x90, 0x6e, 0x5b, 0x0e, 0x19, 0xb1, 0x33, 0x7d, 0xb6, 0xe5, 0x71, 0x5a, 0xe0, 0xf4, 0x38, 0x2f, 0xfc, 0xba, 0x06, 0xea, 0xe9, 0x3b, 0x68, 0xce, 0xbf, 0x71, 0x47, 0xdb, 0x94, 0x9b, 0xe0, 0x84, 0x77, 0x05, 0xbc, 0x89, 0xd7, 0xc9, 0x5b, 0x68, 0x6f, 0xfa, 0x63, 0xc2, 0x27, 0x26, 0x9d, 0x8d, 0xd8, 0x60, 0xd8, 0x7b, 0x61, 0xa0, 0x23, 0x6c, 0x48, 0xf2, 0xc8, 0x55, 0xfc, 0x1c, 0xe2, 0xcc, 0x55, 0xfb, 0x87, 0x86, 0x70, 0x5f, 0x59, 0x01, 0xc5, 0x11, 0x47, 0xc2, 0x6b, 0xa6, 0x03, 0x48, 0x6f, 0x7b, 0x58, 0x88, 0x27, 0xb0, 0xe6, 0xba, 0xa9, 0xfb, 0x84, 0x84, 0xe7, 0x23, 0xb8, 0xbf, 0x58, 0x7d, 0xc3, 0xbd, 0x6a, 0x26, 0x76, 0xb0, 0xe7, 0x0c, 0x1c, 0x97, 0x4e, 0x9c, 0x7c, 0xee, 0x25, 0x88, 0x43, 0xe4, 0x93, 0xc4, 0x20, 0x59, 0xe1, 0x61, 0xcd, 0xbe, 0xed, 0x53, 0x49, 0xb3, 0x39, 0x7d, 0x58, 0x6d, 0x2b, 0x59, 0x46, 0x77, 0x64, 0x69, 0x41, 0xae, 0xab, 0x27, 0x92, 0x9f, 0xa8, 0x99, 0xd3, 0x73, 0x9d, 0x5a, 0x39, 0xf5, 0x5a, 0x3d, 0x8c, 0x74, 0xe9, 0x9c, 0x4f, 0xae, 0xd5, 0x55, 0x6c, 0x7f, 0x24, 0xce, 0xeb, 0x1b, 0xda, 0x4b, 0x73, 0xb8, 0x59, 0x7a, 0xfb, 0x09, 0xf2, 0xdf, 0xc9, 0xeb, 0x69, 0x17, 0xec, 0xbb, 0x85, 0x76, 0xf1, 0xbd, 0xb7, 0xb4, 0x69, 0x51, 0xf8, 0x31, 0xaf, 0x12, 0x3f, 0xf4, 0xe1, 0xea, 0x38, 0x70, 0x7b, 0x1b, 0x42, 0x72, 0xf2, 0xa9, 0x75, 0xaa, 0xe4, 0xb4, 0xf6, 0x72, 0xae, 0x1f, 0x1c, 0xd6, 0x39, 0x09, 0x7f, 0x4e, 0x91, 0xac, 0x91, 0xab, 0xc4, 0x05, 0x23, 0x6b, 0x7a, 0x35, 0x5a, 0xdd, 0x3d, 0xac, 0xdd, 0xbe, 0x6b, 0x62, 0xdc, 0xc5, 0x6d, 0xf6, 0x25, 0xb7, 0xd9, 0x7e, 0x9d, 0x36, 0x5f, 0x9d, 0xae, 0xb7, 0xf9, 0xbf, 0xb0, 0xcd, 0xb3, 0xff, 0x46, 0x9b, 0xd3, 0xaa, 0xbb, 0xbf, 0xc4, 0x75, 0x8f, 0x7c, 0xae, 0x1c, 0xfa, 0xbb, 0xf9, 0xcc, 0xd0, 0xd1, 0x2c, 0x21, 0x25, 0x39, 0xcc, 0x1f, 0x18, 0xc6, 0x19, 0x1b, 0x6f, 0xdf, 0xc7, 0xec, 0x33, 0xcc, 0x34, 0xd2, 0x67, 0xd8, 0xb5, 0xad, 0xb4, 0x5d, 0xd3, 0xca, 0xc1, 0x87, 0xaa, 0xbb, 0xb1, 0xaf, 0x46, 0x43, 0x4e, 0x6e, 0x39, 0x96, 0x93, 0x95, 0x8b, 0xe5, 0xe8, 0x31, 0xc6, 0xce, 0x19, 0x18, 0xdc, 0x5c, 0xb5, 0xed, 0x4b, 0xfc, 0x75, 0x8a, 0x17, 0x1c, 0xad, 0x59, 0x53, 0x4a, 0xe3, 0x5f, 0xc7, 0x54, 0x6d, 0x53, 0x7c, 0xb7, 0xf1, 0x37, 0x84, 0x82, 0x0a, 0x42, 0x01, 0x69, 0xdd, 0xa3, 0xf1, 0xaf, 0x06, 0xfc, 0xba, 0x0c, 0x9c, 0x6c, 0xaf, 0xfd, 0xa6, 0x88, 0x64, 0x87, 0x3f, 0x3e, 0xe9, 0x2e, 0x85, 0x3a, 0xec, 0xad, 0x1a, 0x0a, 0xd1, 0xdf, 0x97, 0xe0, 0xfb, 0xc2, 0xa4, 0xf7, 0x06, 0xd2, 0x98, 0x4f, 0x7a, 0x8f, 0xe0, 0x7b, 0x25, 0xbd, 0xff, 0x71, 0x07, 0xf6, 0x3f, 0x49, 0x0d, 0x67, 0x7b, 0x53, 0x49, 0xbb, 0x3e, 0xfa, 0x0c, 0x54, 0x63, 0xc8, 0x42, 0x82, 0xc3, 0x08, 0x27, 0x55, 0xa4, 0x87, 0xd2, 0x8f, 0x1c, 0xc4, 0xa7, 0x3a, 0xa7, 0xc1, 0x3e, 0xd6, 0xe9, 0x75, 0x8c, 0xc1, 0x58, 0x0b, 0xa3, 0x3b, 0x21, 0x88, 0x31, 0xe7, 0xe1, 0x55, 0x83, 0x57, 0xdc, 0xf7, 0xec, 0xd0, 0x41, 0xf2, 0x7b, 0x83, 0x31, 0x6a, 0xfa, 0x9e, 0x01, 0x57, 0x98, 0x4a, 0x2d, 0x8e, 0x7f, 0xdb, 0x88, 0x70, 0x75, 0x3b, 0xce, 0x2a, 0x23, 0x3c, 0xec, 0x75, 0xc3, 0x23, 0xb8, 0x82, 0xbf, 0x7f, 0x07, 0xd9, 0x26, 0x7b, 0x14, 0xc3, 0x7f, 0xe0, 0x76, 0xe3, 0xfa, 0x58, 0x01, 0x3b, 0xab, 0xf6, 0xff, 0x75, 0x03, 0xee, 0x4d, 0x2b, 0xe0, 0x31, 0x86, 0x19, 0x6f, 0xb2, 0x45, 0xde, 0x7d, 0x4a, 0xd9, 0x0d, 0xfb, 0x63, 0x14, 0x7e, 0x27, 0x6d, 0xdb, 0x1c, 0xaa, 0x3d, 0x97, 0x0a, 0xf2, 0x04, 0x15, 0xa4, 0xc1, 0xfc, 0x5c, 0xc8, 0xd1, 0x61, 0xee, 0x4d, 0xb5, 0x20, 0xbd, 0x29, 0xe8, 0xfa, 0x24, 0x1d, 0x15, 0x05, 0x3c, 0x52, 0x54, 0xda, 0x29, 0x1d, 0x90, 0x0e, 0x5f, 0xfb, 0x0f, 0xc1, 0xf8, 0xcc, 0x5b, 0x83, 0xad, 0x50, 0x11, 0x4e, 0x39, 0x92, 0xec, 0xfe, 0x82, 0xb4, 0x29, 0x39, 0x44, 0x33, 0x60, 0x48, 0x9b, 0x13, 0x43, 0x70, 0x8d, 0x67, 0xb9, 0x73, 0xd9, 0x46, 0x3d, 0x73, 0x8d, 0xb0, 0x3f, 0xfc, 0x5f, 0x6c, 0xc4, 0x7d, 0x69, 0xbe, 0x0a, 0x30, 0x68, 0x99, 0x06, 0x86, 0x0c, 0x98, 0x2b, 0x99, 0x71, 0xee, 0x20, 0x42, 0x77, 0xca, 0xfb, 0xa0, 0x59, 0xd8, 0x12, 0xdd, 0x41, 0xd2, 0x4e, 0x2c, 0x6d, 0x8d, 0xad, 0x7e, 0xd2, 0xcb, 0x56, 0x2f, 0x00, 0x36, 0x07, 0x52, 0xc3, 0x45, 0x09, 0xae, 0xf5, 0x90, 0x8b, 0x3c, 0x8c, 0x25, 0xbd, 0x2b, 0x49, 0xcf, 0xf6, 0x08, 0xf9, 0x4c, 0x4b, 0x8c, 0xc4, 0x2b, 0x22, 0xc7, 0x00, 0x34, 0xfa, 0xf5, 0x5c, 0x17, 0xb0, 0xed, 0x85, 0x19, 0x5c, 0xc3, 0xb1, 0xd8, 0xc3, 0x87, 0x05, 0x1c, 0xfa, 0x27, 0xee, 0x59, 0xc5, 0x89, 0xd4, 0x90, 0x13, 0xca, 0xa7, 0xe2, 0x5e, 0x33, 0x35, 0x31, 0x53, 0xcd, 0x55, 0xfb, 0xaf, 0x9c, 0x26, 0x0e, 0xe5, 0x6a, 0xd2, 0x9d, 0x4b, 0x2d, 0xc6, 0xf1, 0x2a, 0x98, 0x06, 0xa6, 0xdd, 0x55, 0x21, 0x33, 0x8d, 0xcc, 0xc0, 0xc4, 0x2f, 0x56, 0xc1, 0xfc, 0x9a, 0x6e, 0x1e, 0xbd, 0x46, 0x48, 0xc7, 0xd8, 0x87, 0x11, 0xcb, 0x19, 0x2b, 0xc6, 0x8e, 0x70, 0x86, 0xb9, 0xcf, 0x80, 0x7f, 0xf6, 0x07, 0x90, 0x15, 0xc0, 0x7b, 0x08, 0x34, 0xf6, 0x71, 0x72, 0xe5, 0x74, 0x4d, 0xb7, 0x5a, 0xa9, 0x2c, 0xa7, 0x5d, 0x8f, 0x53, 0x2e, 0xe1, 0x94, 0x9b, 0x31, 0x65, 0xae, 0xf0, 0xe2, 0x23, 0xc6, 0xfd, 0x4a, 0x9f, 0x90, 0x7d, 0x8b, 0xe9, 0x8a, 0x92, 0xc7, 0x33, 0x84, 0x50, 0xe5, 0xaa, 0x25, 0x29, 0x24, 0x80, 0x21, 0x55, 0x49, 0x6b, 0x73, 0x9d, 0x2a, 0xdb, 0xc6, 0xd2, 0x0a, 0x49, 0xcc, 0x3b, 0x86, 0x1c, 0x70, 0xf5, 0x82, 0xd3, 0x4b, 0x1a, 0xca, 0x3c, 0x47, 0x9a, 0x09, 0xd6, 0x27, 0x62, 0x50, 0x9f, 0x60, 0x8f, 0x1c, 0xc2, 0x2b, 0x22, 0x7a, 0x05, 0xe7, 0x64, 0x0b, 0xac, 0x90, 0x01, 0xda, 0xc8, 0x92, 0x02, 0x86, 0xaf, 0xab, 0xda, 0x7f, 0xf9, 0x02, 0xcf, 0xcc, 0x68, 0x52, 0x0d, 0x27, 0xc6, 0x7b, 0x2f, 0x80, 0xbd, 0x57, 0x15, 0xeb, 0x3d, 0x9a, 0x8f, 0xba, 0x3d, 0x4b, 0xec, 0xc1, 0xcb, 0x8f, 0x57, 0x77, 0xaf, 0x96, 0xb1, 0xec, 0x6a, 0x31, 0x3f, 0xa5, 0x3c, 0x82, 0xe7, 0x89, 0xd2, 0x95, 0xd2, 0x00, 0x52, 0xf1, 0x21, 0x18, 0x7c, 0x1c, 0x71, 0xa5, 0xf9, 0xb2, 0x67, 0xc8, 0x83, 0x34, 0xed, 0x7c, 0xa5, 0xbc, 0xc0, 0x01, 0x26, 0xb9, 0x44, 0xfa, 0x39, 0x5b, 0xe2, 0x98, 0x9f, 0x4f, 0x6f, 0x9e, 0x6e, 0xed, 0x36, 0x0f, 0x98, 0x0a, 0x28, 0x5e, 0x49, 0x04, 0xd8, 0x8a, 0x0b, 0x69, 0x0c, 0x1b, 0x45, 0x9d, 0x94, 0x72, 0x1c, 0x75, 0x47, 0x62, 0x1e, 0x31, 0xee, 0x47, 0x33, 0x69, 0xeb, 0xff, 0xce, 0x4c, 0x8a, 0xe5, 0x7a, 0x83, 0xb9, 0x64, 0xfc, 0xf4, 0x73, 0xe9, 0x2f, 0x0f, 0x27, 0xe6, 0x12, 0xf5, 0xdf, 0x5f, 0xde, 0x54, 0x4a, 0xc5, 0xca, 0x9e, 0x84, 0x30, 0x32, 0x92, 0x85, 0xf8, 0x8f, 0x2d, 0x61, 0xaf, 0xeb, 0x2f, 0x4d, 0xba, 0xde, 0xee, 0x3c, 0xd1, 0x6f, 0xb0, 0x83, 0xf6, 0x84, 0xa4, 0x7e, 0xf3, 0x89, 0x7e, 0xfb, 0x6b, 0x93, 0xe8, 0xb7, 0x6e, 0x8d, 0xfa, 0x8d, 0xe6, 0xa7, 0xe8, 0x1b, 0xee, 0x35, 0x7a, 0xc3, 0x1e, 0xbd, 0x3d, 0xde, 0x6b, 0xd4, 0x9f, 0xb7, 0x97, 0xb0, 0xbf, 0xc1, 0x7c, 0xbc, 0x96, 0x60, 0x39, 0xd9, 0xd5, 0xdd, 0xe6, 0x69, 0x90, 0x05, 0x86, 0x50, 0xc6, 0xe7, 0x08, 0xa7, 0x30, 0x88, 0xfc, 0xa4, 0x9f, 0x53, 0xaa, 0xc4, 0x7c, 0xe6, 0x1a, 0xbb, 0x62, 0xb0, 0x79, 0xd2, 0x9c, 0x11, 0x35, 0x46, 0x9a, 0xf3, 0xe3, 0x03, 0xd4, 0x3e, 0xb2, 0xff, 0xd0, 0x87, 0x10, 0x32, 0x0c, 0x03, 0x47, 0xc9, 0x82, 0x99, 0x3b, 0x25, 0x31, 0xaf, 0x92, 0xb9, 0x26, 0x88, 0xcd, 0xc6, 0xac, 0xa1, 0x93, 0x2e, 0x25, 0x71, 0x2a, 0xac, 0x09, 0x3f, 0xf1, 0x43, 0xb5, 0x77, 0xd0, 0x4e, 0xb4, 0x26, 0xb6, 0xd3, 0x22, 0x0c, 0xee, 0x29, 0xfd, 0x10, 0x96, 0x24, 0x76, 0x21, 0x15, 0x06, 0x5a, 0x74, 0x2e, 0xf1, 0x0c, 0x84, 0x8c, 0x74, 0xcd, 0xd4, 0xad, 0x38, 0xb3, 0xd5, 0x62, 0xc6, 0x12, 0x27, 0x87, 0xf3, 0xcd, 0x0e, 0xe2, 0x93, 0x87, 0x1c, 0x38, 0x9f, 0x8c, 0xf9, 0x92, 0xec, 0xd1, 0xbe, 0x8b, 0x30, 0x71, 0x49, 0xd8, 0x84, 0xbf, 0x4b, 0x43, 0x26, 0xd5, 0x10, 0x59, 0x8a, 0x78, 0xe5, 0x12, 0xb9, 0x04, 0xa2, 0xd1, 0x12, 0x9c, 0x5d, 0xc6, 0xc0, 0x13, 0x30, 0x23, 0x64, 0xbc, 0xd5, 0x0f, 0x33, 0xd4, 0x34, 0xdb, 0x52, 0x98, 0x69, 0xeb, 0x52, 0x65, 0x96, 0xcf, 0x18, 0xc0, 0xb0, 0x99, 0x64, 0x8d, 0x39, 0xdf, 0x0d, 0x46, 0xca, 0x07, 0xe1, 0xeb, 0xa3, 0x98, 0x4b, 0xea, 0x5c, 0x9d, 0x6f, 0x1c, 0x0b, 0x67, 0x0d, 0x47, 0xd0, 0xbe, 0xeb, 0x96, 0xaa, 0xf6, 0x6b, 0x47, 0x69, 0xae, 0xc4, 0x6c, 0x1f, 0xc5, 0x68, 0xdc, 0x27, 0xa3, 0x30, 0xb0, 0xb7, 0x08, 0x69, 0x5c, 0x17, 0x3e, 0x3f, 0x8a, 0xd7, 0x5e, 0x18, 0xd8, 0xe5, 0x17, 0x34, 0xda, 0x48, 0x1a, 0x50, 0x90, 0xb9, 0x23, 0x42, 0xff, 0x1f, 0x1d, 0xf5, 0xc3, 0xc0, 0x53, 0x26, 0xac, 0x59, 0x1f, 0x5e, 0xfb, 0xf0, 0x42, 0x6a, 0x7c, 0x4f, 0x3a, 0x0c, 0x3c, 0x77, 0x40, 0xa7, 0x72, 0x77, 0x60, 0x98, 0x4b, 0x8f, 0xd7, 0x8a, 0x18, 0xff, 0x18, 0xa2, 0x70, 0x91, 0xd6, 0xe5, 0xd3, 0xfd, 0x15, 0x2b, 0x22, 0x71, 0x39, 0xcd, 0x25, 0x4b, 0xeb, 0xea, 0xf2, 0x96, 0xd7, 0xd6, 0x25, 0x1a, 0x47, 0x21, 0xc9, 0x34, 0x6b, 0x6f, 0x12, 0xcd, 0xfa, 0x4c, 0x52, 0xf8, 0xd3, 0x3b, 0x3e, 0x1d, 0xed, 0xba, 0xab, 0xe7, 0x93, 0x69, 0xd7, 0x5d, 0x99, 0x9f, 0x96, 0x76, 0xdd, 0x65, 0xfe, 0xdb, 0xb4, 0xeb, 0xae, 0x87, 0xff, 0x31, 0xda, 0x95, 0x38, 0x49, 0xbb, 0x96, 0x8c, 0x90, 0xa0, 0xdc, 0x8a, 0x6b, 0xfb, 0xd0, 0xa7, 0x39, 0xb9, 0x7f, 0xf2, 0xc4, 0x8d, 0xa9, 0xda, 0x27, 0xcf, 0x8d, 0xa4, 0x6a, 0x77, 0xed, 0xf8, 0x24, 0xaa, 0x76, 0x97, 0x61, 0x24, 0x55, 0xfb, 0xe4, 0xa5, 0x6b, 0xa9, 0xda, 0x27, 0x4f, 0xfd, 0xa3, 0x54, 0xed, 0x27, 0x9f, 0x9b, 0x27, 0x53, 0x5b, 0x9a, 0xe1, 0x1a, 0xfa, 0x6b, 0x9d, 0x2e, 0x93, 0xcb, 0x3c, 0x5c, 0x84, 0x13, 0xdb, 0x87, 0xcb, 0x93, 0xe2, 0x9b, 0x9a, 0x44, 0x25, 0xd7, 0xb1, 0xbc, 0xa9, 0x3d, 0x29, 0xc4, 0xa9, 0x90, 0xd4, 0xd0, 0xc3, 0x93, 0x03, 0x18, 0xb2, 0x13, 0x0c, 0xf8, 0xd5, 0x60, 0xeb, 0x8a, 0x71, 0x70, 0x91, 0xae, 0x3a, 0x4d, 0x36, 0xb4, 0xd9, 0xce, 0xdf, 0x0a, 0x28, 0xb2, 0xe5, 0xc2, 0x56, 0x73, 0x03, 0x9f, 0x65, 0x83, 0x64, 0x0a, 0x3c, 0x09, 0x6b, 0x42, 0x59, 0x0a, 0x6b, 0xcd, 0x8c, 0xb0, 0x82, 0xb1, 0x86, 0xbe, 0xe1, 0x58, 0x9d, 0x8a, 0x64, 0x0e, 0xb7, 0xdf, 0x43, 0xf2, 0x93, 0xe1, 0x42, 0xfc, 0xba, 0x31, 0x94, 0x45, 0x52, 0x98, 0xc9, 0xdf, 0x30, 0xdd, 0xc6, 0x70, 0x36, 0x7e, 0xdb, 0x1e, 0x9a, 0x40, 0xb8, 0xfa, 0xae, 0x16, 0xe6, 0xa9, 0x9f, 0xc0, 0xf0, 0xed, 0x21, 0x53, 0xf5, 0x39, 0x3a, 0x31, 0x87, 0x83, 0x9f, 0x21, 0x6a, 0xa3, 0xc5, 0x9b, 0x0b, 0xf7, 0x4c, 0x99, 0x0d, 0xab, 0xc8, 0x0e, 0xec, 0x8f, 0x76, 0xc0, 0x6a, 0x4c, 0x65, 0x0d, 0x35, 0xf1, 0x9c, 0xf9, 0x5f, 0xc9, 0x73, 0x86, 0xec, 0x12, 0x87, 0xe7, 0xdb, 0x73, 0x61, 0x7b, 0x19, 0x62, 0xae, 0x38, 0x7e, 0xd9, 0xa4, 0x03, 0x27, 0xac, 0xfd, 0xb9, 0x09, 0x93, 0xc6, 0xf4, 0xbb, 0x2f, 0x80, 0x23, 0xd8, 0x89, 0x6f, 0x2e, 0xf7, 0x6c, 0xc8, 0x7f, 0xe0, 0x50, 0x69, 0xa2, 0xec, 0x77, 0x30, 0x7d, 0x8f, 0xa0, 0xb5, 0x10, 0x8b, 0xb3, 0x26, 0x20, 0xae, 0x17, 0xcb, 0xe3, 0x32, 0xb9, 0x5e, 0x24, 0xcd, 0x96, 0xb0, 0x7b, 0x50, 0x72, 0x16, 0x1e, 0xb6, 0x36, 0x24, 0x9d, 0xb0, 0xa6, 0x25, 0xd9, 0x5b, 0x90, 0x74, 0x9b, 0xde, 0xd9, 0x09, 0x8b, 0x92, 0xc3, 0x2c, 0x26, 0x58, 0xec, 0x4b, 0xe0, 0x61, 0xd5, 0xfe, 0xe3, 0x33, 0x90, 0x1d, 0x9a, 0x18, 0xc7, 0xf3, 0xf7, 0x5f, 0x1d, 0xb0, 0xce, 0x8e, 0x24, 0x62, 0xe6, 0x55, 0x77, 0xab, 0x46, 0xb6, 0xe6, 0x70, 0x6c, 0x78, 0xde, 0x42, 0x12, 0x84, 0x29, 0x61, 0xb6, 0xce, 0x68, 0x73, 0xea, 0x98, 0xa6, 0x33, 0x81, 0x69, 0xd2, 0x8e, 0x2e, 0x24, 0x10, 0x5a, 0x24, 0x15, 0x64, 0x83, 0xe2, 0xa5, 0xd3, 0x8d, 0x95, 0xe0, 0x2d, 0x6b, 0xc3, 0xfd, 0x56, 0xa9, 0xb0, 0x2e, 0x83, 0xec, 0x82, 0xa9, 0x60, 0x6a, 0x81, 0x42, 0xc9, 0xb1, 0x1c, 0xd6, 0xbc, 0x7e, 0xb0, 0xb0, 0xd0, 0x01, 0xc1, 0x92, 0x2f, 0x94, 0xb0, 0x47, 0xe3, 0x6c, 0xf3, 0x52, 0x88, 0xf2, 0xa9, 0xc7, 0x52, 0xdc, 0x29, 0x65, 0xdc, 0x0d, 0xbe, 0xdb, 0x0a, 0xd3, 0xe5, 0xd5, 0xd1, 0xf2, 0xd4, 0x57, 0x3a, 0x1d, 0xb3, 0x2a, 0xce, 0x69, 0x8f, 0xae, 0x4e, 0x7d, 0x7e, 0x63, 0x7d, 0x79, 0x20, 0xa5, 0x41, 0x31, 0x97, 0x40, 0x6d, 0xb8, 0x98, 0x52, 0x61, 0x1c, 0x69, 0xf5, 0xa3, 0xc7, 0xee, 0xcd, 0x33, 0xbe, 0xf7, 0x8c, 0x3d, 0xb5, 0xbc, 0xf4, 0xbf, 0x96, 0x42, 0x9a, 0x6a, 0xe5, 0xfc, 0x30, 0x4e, 0xc8, 0x94, 0xb6, 0x14, 0x0c, 0x18, 0x62, 0x49, 0x8e, 0xd7, 0x8d, 0x71, 0xc6, 0xf1, 0x3e, 0x4b, 0x9a, 0x50, 0xb7, 0x79, 0xc1, 0x48, 0xf1, 0x67, 0x60, 0x68, 0x41, 0x49, 0xe9, 0xfb, 0xda, 0x1f, 0xa7, 0x17, 0x4b, 0xb0, 0x5a, 0x7e, 0xbe, 0xa2, 0xee, 0x2e, 0xcc, 0x63, 0x5a, 0xb8, 0x06, 0x7f, 0xf3, 0xc2, 0x41, 0xfc, 0x75, 0x87, 0x2b, 0xf1, 0xf7, 0xcb, 0xe1, 0x72, 0xfc, 0x9d, 0x19, 0xf6, 0xe0, 0xef, 0x1d, 0xe1, 0x19, 0xf8, 0x7b, 0x53, 0xb8, 0x10, 0x7f, 0x8b, 0xc3, 0x79, 0xf8, 0x5b, 0x1a, 0x76, 0xe0, 0x6f, 0x20, 0x6c, 0xc5, 0xdf, 0x05, 0xe1, 0x1c, 0xfc, 0xfd, 0x46, 0x38, 0x0b, 0x7f, 0x17, 0x86, 0x2d, 0xf8, 0xfb, 0xcd, 0x70, 0x1a, 0xfe, 0xde, 0x45, 0xfa, 0x5c, 0x2f, 0x96, 0x14, 0x8c, 0xed, 0x28, 0xbd, 0x4d, 0x6f, 0xfd, 0xb8, 0xa5, 0x04, 0xb7, 0xf5, 0xa7, 0x74, 0x18, 0xa3, 0x3f, 0x8d, 0x03, 0xb3, 0xfe, 0x94, 0x01, 0x63, 0x71, 0x6d, 0xa5, 0xe3, 0x95, 0x11, 0x90, 0x1b, 0x5d, 0xd4, 0x17, 0x75, 0x76, 0xfa, 0xf6, 0x85, 0xa5, 0x08, 0xf3, 0xc9, 0xfb, 0x41, 0xf6, 0x78, 0x4a, 0x99, 0xc1, 0x61, 0x5e, 0x91, 0x0e, 0x43, 0xc6, 0x40, 0xba, 0xd9, 0x0b, 0x2b, 0x43, 0xf2, 0x2a, 0x89, 0x47, 0x20, 0x17, 0xba, 0x76, 0x63, 0x0f, 0x87, 0x33, 0x4a, 0x4f, 0x43, 0x96, 0xb2, 0x3e, 0xb8, 0xa6, 0x77, 0x4d, 0x13, 0x0c, 0xd5, 0xb6, 0x10, 0x4e, 0xe4, 0xf5, 0xf6, 0x04, 0xca, 0xc2, 0xfe, 0xc0, 0x72, 0xd8, 0x10, 0xf2, 0xb2, 0x87, 0xf0, 0x0d, 0xb3, 0xce, 0x82, 0xfa, 0xe3, 0xb3, 0x18, 0xdf, 0x61, 0x9b, 0xcb, 0xb6, 0xf4, 0x28, 0x7f, 0x9d, 0x6b, 0xe0, 0x1e, 0xeb, 0xf4, 0xc4, 0x74, 0x34, 0x9d, 0xdf, 0xb2, 0x05, 0x03, 0x9b, 0x43, 0x6f, 0xaa, 0xf1, 0x59, 0x79, 0xd5, 0x99, 0x2f, 0x0b, 0x8b, 0x6a, 0x31, 0xd9, 0x00, 0xbb, 0x1b, 0x72, 0x8a, 0x52, 0x62, 0xfc, 0xf1, 0xbf, 0xd6, 0x22, 0x0c, 0xeb, 0xa2, 0xd3, 0x55, 0xc4, 0x96, 0xd7, 0x1c, 0x39, 0x78, 0x5b, 0x27, 0xce, 0x06, 0xc2, 0x3c, 0xbb, 0x6a, 0xba, 0x71, 0x4f, 0x8f, 0x86, 0xe8, 0x2c, 0xae, 0x0b, 0xe1, 0x9d, 0x41, 0x91, 0x98, 0x76, 0x82, 0x77, 0xa2, 0x2d, 0xdf, 0x7d, 0xa1, 0x3d, 0xda, 0x21, 0x2c, 0xaf, 0x34, 0x39, 0x6c, 0xf0, 0xee, 0x86, 0xd6, 0xd4, 0xbe, 0xce, 0x80, 0xd4, 0x40, 0xfe, 0xe0, 0x36, 0x1e, 0x39, 0x48, 0x3c, 0x84, 0x72, 0xe9, 0x97, 0x16, 0xd5, 0x9c, 0x78, 0xef, 0xb4, 0x10, 0x6c, 0xa2, 0xf3, 0xde, 0xf0, 0xc4, 0x98, 0x94, 0x05, 0x52, 0xcf, 0xb8, 0xbe, 0x23, 0x10, 0x6f, 0x81, 0x44, 0x2d, 0x70, 0xf3, 0x37, 0xf2, 0x41, 0xe8, 0xcb, 0x41, 0xdc, 0xa6, 0x3f, 0x76, 0xea, 0x67, 0xab, 0xa8, 0x78, 0x1f, 0xec, 0xf6, 0x79, 0x74, 0x22, 0xd9, 0xbb, 0x97, 0x6c, 0x58, 0x3e, 0xbd, 0xc6, 0x4e, 0xbf, 0xdb, 0x54, 0x1b, 0xd9, 0xee, 0xa0, 0xb3, 0xc9, 0x62, 0xb6, 0x32, 0x44, 0x96, 0xf0, 0xf8, 0x5e, 0xca, 0x76, 0x3c, 0xb2, 0x03, 0xe5, 0x61, 0xa3, 0xdd, 0x6b, 0x1b, 0x1f, 0x3a, 0xfe, 0x13, 0x3a, 0xd1, 0x4b, 0x43, 0x9a, 0x23, 0x5b, 0x76, 0x68, 0x43, 0x30, 0x3e, 0x71, 0x9e, 0xc7, 0xe7, 0x59, 0xc3, 0x24, 0x80, 0x74, 0xae, 0xdd, 0x98, 0x70, 0xa4, 0x96, 0xe4, 0x10, 0x46, 0x93, 0x7f, 0x1b, 0xa4, 0xd6, 0xde, 0xc5, 0xe7, 0x51, 0x21, 0x90, 0xe6, 0xab, 0x01, 0x7c, 0x1a, 0x8b, 0x70, 0xb0, 0xb7, 0x7e, 0xb5, 0x2e, 0x0b, 0xe4, 0x8d, 0xc9, 0x00, 0x8d, 0x8f, 0xc9, 0x00, 0x4d, 0x17, 0x5c, 0xbd, 0x66, 0x0b, 0xd9, 0x6d, 0xbf, 0x8d, 0xb8, 0x57, 0x71, 0x9e, 0xde, 0xae, 0x1a, 0x30, 0xdf, 0x5a, 0xc2, 0x32, 0x40, 0x16, 0x8c, 0x95, 0x7d, 0x5b, 0x13, 0x74, 0xe1, 0x8e, 0x49, 0x72, 0x37, 0xfa, 0xd8, 0x5c, 0x79, 0xb1, 0xe4, 0x3c, 0xd2, 0x9c, 0xcb, 0x92, 0x69, 0xce, 0xe0, 0x72, 0xe8, 0x88, 0x7f, 0xdf, 0xc3, 0xd2, 0xe2, 0xaf, 0xc6, 0xdf, 0xb7, 0xc5, 0xad, 0xd2, 0x3a, 0xf0, 0xed, 0x31, 0xdc, 0xfb, 0x13, 0x71, 0xbb, 0x74, 0x99, 0x9d, 0xc7, 0xcc, 0x4d, 0x34, 0xa3, 0x88, 0x1a, 0xc8, 0xcf, 0x83, 0x8e, 0xb9, 0x9e, 0x2f, 0x7b, 0xa0, 0x03, 0xdf, 0x36, 0x26, 0x66, 0x8c, 0xba, 0x5a, 0x99, 0x0a, 0xb6, 0x66, 0x85, 0x4e, 0xd6, 0x23, 0xe4, 0xdd, 0x44, 0xc1, 0x1e, 0xdb, 0x98, 0x5c, 0x8f, 0xab, 0x3d, 0xea, 0x82, 0x78, 0xce, 0x0a, 0x8e, 0x72, 0x76, 0x4d, 0x37, 0xe6, 0xd6, 0xd5, 0xbb, 0x04, 0xfb, 0x57, 0x11, 0x92, 0x35, 0xe0, 0xc0, 0x72, 0xc6, 0x63, 0x0b, 0xec, 0x49, 0x92, 0x69, 0x69, 0x38, 0xc3, 0xcd, 0x6e, 0xb6, 0xcc, 0xfe, 0xd7, 0xe9, 0xd5, 0xdd, 0x5e, 0x6f, 0x2c, 0x97, 0xcb, 0x44, 0x0d, 0x9a, 0x84, 0x1c, 0x8e, 0xd7, 0x2b, 0x24, 0x6e, 0x42, 0x19, 0x01, 0x6f, 0x28, 0x3d, 0x21, 0x1d, 0x7f, 0xf9, 0x14, 0xd9, 0x57, 0xac, 0x34, 0xe8, 0x7b, 0x62, 0x45, 0x3c, 0xed, 0xf7, 0x45, 0x0d, 0x4c, 0x0e, 0x7c, 0x1f, 0x8f, 0x10, 0xc1, 0x49, 0x63, 0x18, 0xb7, 0x15, 0x4f, 0x29, 0xb7, 0x27, 0x3d, 0x7f, 0x5f, 0xc8, 0xcb, 0xcd, 0xc1, 0x9a, 0x51, 0x9f, 0xfc, 0xec, 0x3c, 0xc6, 0x25, 0xaf, 0x70, 0xfa, 0x9c, 0x50, 0x8d, 0x24, 0x01, 0xa7, 0xca, 0x0f, 0xbe, 0x1c, 0xcf, 0xbf, 0xb2, 0xa6, 0x5b, 0x49, 0x13, 0xbb, 0x66, 0xd5, 0xb7, 0x63, 0xb8, 0xeb, 0xde, 0x62, 0xf8, 0x6b, 0xfa, 0x3e, 0xc4, 0x5d, 0x0d, 0xf8, 0xbc, 0x10, 0xaf, 0x6f, 0xc3, 0xc0, 0x8f, 0x27, 0x08, 0x1c, 0x6d, 0xf1, 0x8a, 0xa6, 0xbb, 0x57, 0x34, 0xd4, 0x0f, 0x47, 0x5d, 0x87, 0x07, 0x12, 0xe6, 0x5a, 0xf0, 0xff, 0x02, 0x73, 0xdd, 0x7f, 0x1c, 0xaf, 0x1e, 0xbc, 0xba, 0xf0, 0xda, 0x08, 0x03, 0x3f, 0x5f, 0x00, 0x03, 0x7d, 0x21, 0xbc, 0xde, 0x80, 0x81, 0x5f, 0x5e, 0x80, 0x81, 0x17, 0xb2, 0xf1, 0xc2, 0x36, 0xbc, 0xb0, 0x12, 0xaf, 0x3d, 0x3a, 0x46, 0x4b, 0xed, 0x7b, 0x57, 0xa4, 0xff, 0x69, 0x39, 0xee, 0xc9, 0x29, 0x84, 0xc9, 0x5a, 0xf0, 0xed, 0xc7, 0x43, 0x29, 0x08, 0x0e, 0x61, 0x60, 0x9f, 0x94, 0x02, 0x2e, 0xba, 0x1b, 0x52, 0x60, 0x1a, 0xdd, 0x53, 0x53, 0xc0, 0x49, 0xf7, 0xb4, 0x14, 0xc8, 0xa5, 0xfb, 0xd8, 0x14, 0x04, 0x96, 0x78, 0xb7, 0xc8, 0x60, 0xa7, 0x7b, 0x86, 0x7e, 0xcf, 0x4c, 0x81, 0x29, 0x74, 0xff, 0x4c, 0x0a, 0x8c, 0x97, 0x32, 0xa5, 0x9b, 0xa5, 0x2c, 0xe9, 0x33, 0x52, 0xb6, 0xf4, 0x59, 0x49, 0x83, 0x09, 0xf2, 0xe7, 0xa4, 0x1c, 0xf8, 0x3c, 0x4e, 0x9d, 0x5b, 0x80, 0x74, 0xb1, 0x15, 0x89, 0x7e, 0x27, 0x49, 0x56, 0xbe, 0xdf, 0xca, 0xbf, 0x36, 0xfe, 0xfd, 0x5b, 0xff, 0x93, 0x2d, 0xc9, 0x6f, 0x79, 0x92, 0x9b, 0xef, 0xf9, 0xd2, 0x6d, 0x98, 0xda, 0x81, 0xdf, 0xa6, 0x5a, 0x0a, 0xf2, 0x97, 0x14, 0xe4, 0x37, 0xcc, 0xbc, 0x6d, 0xc9, 0xcc, 0xdb, 0x1a, 0x66, 0x7e, 0x69, 0xc9, 0xcc, 0x2f, 0x35, 0x4c, 0x6f, 0x52, 0x22, 0xb7, 0x29, 0x91, 0x7c, 0x25, 0x32, 0xac, 0xff, 0xaa, 0xe1, 0x73, 0xb8, 0x6a, 0x3f, 0xdd, 0xdf, 0x44, 0x18, 0x4f, 0xd2, 0x18, 0xd7, 0xf9, 0x93, 0xfe, 0x8e, 0xb8, 0x32, 0xff, 0x7e, 0x5e, 0xd3, 0xff, 0x3e, 0xed, 0x40, 0x8f, 0x98, 0x73, 0x23, 0x66, 0x5b, 0x05, 0x9d, 0xa0, 0xf9, 0xf5, 0x33, 0xb3, 0xb9, 0xf5, 0x2d, 0xa5, 0x2b, 0x9a, 0xe6, 0x36, 0x2d, 0x8d, 0x28, 0xf7, 0x34, 0x2d, 0x6d, 0x8c, 0x34, 0xd4, 0x37, 0xd6, 0x37, 0xb5, 0xd4, 0xd7, 0xa5, 0xc1, 0xe4, 0x3a, 0xf7, 0xe4, 0xc5, 0x0a, 0x92, 0x2e, 0x55, 0x5f, 0x99, 0xa7, 0x24, 0x7d, 0x99, 0xa1, 0x04, 0xeb, 0x5b, 0xeb, 0x9b, 0xef, 0xae, 0xaf, 0x53, 0x1a, 0x57, 0xd4, 0xd5, 0x2b, 0x2b, 0x9a, 0xae, 0x13, 0x05, 0xf3, 0x5c, 0x5c, 0xbf, 0xa8, 0x41, 0x8f, 0xf3, 0x37, 0x23, 0x28, 0x2b, 0x42, 0xa1, 0x34, 0x68, 0x5e, 0xb1, 0xa2, 0x65, 0x71, 0xc3, 0xa2, 0xbb, 0xef, 0x86, 0x48, 0xf3, 0x8a, 0x48, 0x58, 0x3c, 0xde, 0xfd, 0x9d, 0xbb, 0x97, 0x8a, 0x27, 0x4c, 0x52, 0xda, 0xb0, 0x34, 0x92, 0xd7, 0x5c, 0xdf, 0x54, 0xf7, 0xff, 0xb3, 0xf6, 0x2c, 0xc0, 0x4d, 0x5d, 0xd9, 0x9d, 0xf7, 0x24, 0xcb, 0xb2, 0x10, 0x46, 0xb8, 0x32, 0x71, 0x08, 0x0d, 0x0f, 0x8d, 0xa2, 0x15, 0xb2, 0xb0, 0x14, 0x55, 0xc5, 0x8e, 0xab, 0x2a, 0x4f, 0xcf, 0xb2, 0x79, 0x96, 0x6d, 0xc5, 0x95, 0x1c, 0x36, 0x9b, 0x32, 0x3b, 0x6f, 0x14, 0xb0, 0x88, 0x7f, 0x68, 0x5d, 0x85, 0x61, 0x53, 0x9a, 0x31, 0x90, 0x80, 0x37, 0x3f, 0x7b, 0x1d, 0x96, 0xa6, 0x59, 0x26, 0x93, 0xc9, 0x30, 0x0c, 0x43, 0x33, 0xc4, 0x65, 0x53, 0x27, 0xf1, 0xa4, 0xa9, 0xf9, 0x84, 0x25, 0x0c, 0x9b, 0x3a, 0x2c, 0x4b, 0x19, 0x96, 0x49, 0x76, 0x68, 0x26, 0x65, 0x43, 0x7e, 0x4b, 0xdc, 0x6d, 0x6a, 0x3e, 0xea, 0x39, 0xf7, 0x3d, 0x59, 0xb2, 0xb1, 0x31, 0x26, 0x3b, 0x1a, 0xdd, 0x7b, 0xdf, 0x7d, 0xf7, 0xdd, 0x7b, 0xcf, 0xfd, 0x9c, 0xcf, 0xfd, 0x9c, 0xb3, 0xee, 0xf1, 0x8d, 0x1b, 0x1e, 0x9b, 0x36, 0xea, 0xe7, 0x5e, 0x61, 0xe3, 0xe4, 0xed, 0xc4, 0x65, 0xcb, 0x96, 0x09, 0x0f, 0x46, 0x1b, 0xa2, 0x0f, 0x7c, 0x3f, 0x2a, 0xd4, 0x3c, 0xd0, 0xd4, 0x14, 0x8a, 0x86, 0x85, 0x58, 0x6d, 0x4d, 0x6d, 0xfd, 0xea, 0xda, 0xb0, 0x20, 0xfd, 0x00, 0xe3, 0xa2, 0xf1, 0x07, 0x1a, 0x6b, 0x85, 0x96, 0x50, 0xbc, 0x41, 0xc0, 0xc4, 0x26, 0xf6, 0x45, 0x8b, 0x5c, 0x1f, 0x17, 0xe2, 0xf2, 0x03, 0x0f, 0x36, 0x86, 0x85, 0x68, 0x2d, 0xce, 0x5a, 0x41, 0x0e, 0x35, 0x37, 0xd7, 0x46, 0xd5, 0x14, 0x53, 0x6f, 0xd9, 0xfd, 0xdb, 0xfa, 0x5c, 0xf8, 0x9d, 0x9d, 0x79, 0xe1, 0xb5, 0x79, 0x69, 0x3e, 0xca, 0xdd, 0xc4, 0x9b, 0xf8, 0x2f, 0xd3, 0xe2, 0xbe, 0x37, 0xbb, 0x3c, 0x37, 0x1c, 0xb8, 0xb9, 0x3c, 0x37, 0xf4, 0xc1, 0xad, 0xca, 0x73, 0x43, 0xc7, 0x66, 0x97, 0xe7, 0x86, 0xe5, 0xdb, 0xde, 0x8b, 0xe4, 0x67, 0x93, 0xda, 0x86, 0x76, 0xcd, 0x2c, 0xb5, 0x0d, 0xed, 0x9d, 0x2a, 0xb5, 0x0d, 0x2b, 0x37, 0x93, 0xda, 0x86, 0x5b, 0xa6, 0x4a, 0x6d, 0x43, 0x07, 0x6e, 0x94, 0xda, 0x86, 0x5e, 0xbe, 0xfd, 0xfb, 0x7f, 0x79, 0x52, 0x58, 0x62, 0xea, 0x2e, 0xd8, 0xb5, 0x53, 0x37, 0xc4, 0x9c, 0xbc, 0x21, 0xe6, 0x18, 0x8b, 0x51, 0x75, 0x3b, 0x9b, 0x27, 0x6c, 0xa3, 0x8c, 0xd5, 0x8e, 0x67, 0xf6, 0x44, 0x07, 0x26, 0x9e, 0xbf, 0x55, 0xed, 0x2d, 0x90, 0x4c, 0xe6, 0x98, 0x90, 0xc9, 0x80, 0xce, 0x52, 0x7b, 0x9d, 0x1b, 0x98, 0x26, 0xc6, 0x2a, 0xa6, 0xf7, 0xdf, 0xbc, 0xbc, 0x01, 0xac, 0xcb, 0x43, 0x50, 0x86, 0x14, 0x7c, 0xb7, 0xa6, 0x41, 0xce, 0x2a, 0xbd, 0x0e, 0x4b, 0xf0, 0x2f, 0x78, 0x3a, 0x90, 0xd6, 0x92, 0x45, 0x35, 0xec, 0xb1, 0x84, 0xa9, 0x24, 0x00, 0x3a, 0xfc, 0x62, 0x13, 0x72, 0x5f, 0xed, 0xb0, 0x57, 0x21, 0x6e, 0x67, 0xbf, 0x42, 0x7a, 0x9d, 0x0f, 0xbc, 0xf0, 0x3e, 0xca, 0x49, 0x56, 0x77, 0x3b, 0x8c, 0xd1, 0x7a, 0x36, 0x93, 0xd6, 0x62, 0x0d, 0x97, 0xa0, 0x22, 0xbb, 0x1f, 0x11, 0x1d, 0xce, 0xa8, 0x3a, 0xfa, 0x0b, 0xc0, 0x8d, 0x1c, 0xa7, 0x8d, 0x24, 0x26, 0x3b, 0xca, 0x3a, 0xcd, 0x7d, 0xec, 0x9e, 0x89, 0x55, 0x68, 0xcb, 0x5c, 0x15, 0x9c, 0x60, 0xac, 0xf9, 0x0a, 0xec, 0x59, 0x8e, 0x33, 0xef, 0x5b, 0x9e, 0xe9, 0xd5, 0x37, 0xa8, 0x32, 0x13, 0x9d, 0x95, 0x55, 0x25, 0x21, 0xba, 0x81, 0x98, 0xb3, 0xb8, 0x42, 0xb6, 0x1d, 0xe2, 0x3d, 0xdd, 0xd7, 0x0e, 0xf6, 0xac, 0x8b, 0xb1, 0xb2, 0x0c, 0x60, 0x6d, 0xf8, 0x3c, 0xbf, 0x0e, 0xd7, 0xf7, 0xd9, 0xdb, 0xa7, 0x2d, 0xd3, 0x7a, 0x63, 0x99, 0xd7, 0x9f, 0x27, 0x5e, 0xce, 0xdd, 0xc1, 0x20, 0x62, 0xa7, 0x93, 0xa8, 0x5c, 0xba, 0x5d, 0xa6, 0x5a, 0x88, 0xe2, 0x48, 0x06, 0x93, 0x53, 0xba, 0xdc, 0x6a, 0x1b, 0x72, 0x33, 0x63, 0xc8, 0xc9, 0xc5, 0x52, 0xc6, 0x49, 0x71, 0xdf, 0xb6, 0x5a, 0x27, 0x78, 0xa7, 0x31, 0xcc, 0x17, 0xd8, 0x49, 0x6b, 0xf7, 0xb4, 0x37, 0x3a, 0x2f, 0x4e, 0xc4, 0x5c, 0x04, 0xbd, 0xf0, 0x13, 0x4d, 0x1b, 0x79, 0x1b, 0x54, 0xac, 0x1a, 0xbf, 0x76, 0x6e, 0xc2, 0x9a, 0x76, 0x1b, 0xac, 0xc9, 0x0b, 0x0f, 0xe3, 0xb8, 0xdc, 0x0f, 0x07, 0xf1, 0x3f, 0xa4, 0x9e, 0x14, 0xfe, 0xf0, 0x77, 0x58, 0xea, 0xab, 0x6a, 0xf8, 0xf7, 0x1f, 0x60, 0x78, 0x2f, 0x5b, 0x2d, 0x7e, 0x1a, 0x9f, 0xaf, 0xe8, 0x01, 0x9f, 0xf7, 0xb3, 0x77, 0x57, 0x8c, 0xf4, 0xee, 0x00, 0xca, 0x75, 0xfb, 0xe1, 0xd5, 0xa4, 0x05, 0xdd, 0xbd, 0x49, 0x13, 0xba, 0xfb, 0xd9, 0x8e, 0xa4, 0xa5, 0x22, 0xf0, 0x53, 0xa4, 0x21, 0x13, 0xa3, 0x78, 0xa7, 0xb6, 0x1b, 0x6e, 0x21, 0xc9, 0xf7, 0xad, 0x51, 0x6d, 0xff, 0xdb, 0x08, 0x65, 0x29, 0x93, 0x47, 0xd4, 0x76, 0xbf, 0xf5, 0xcc, 0x16, 0x1a, 0x88, 0x7a, 0x6d, 0xf7, 0xfb, 0x4e, 0x70, 0x86, 0xc8, 0x36, 0x98, 0xac, 0xed, 0x7e, 0xf3, 0xe0, 0xc5, 0xf7, 0x57, 0x8a, 0x46, 0xc0, 0xaf, 0xed, 0x86, 0xd3, 0x7d, 0xb5, 0x00, 0x69, 0xcf, 0x0d, 0x7d, 0x05, 0x96, 0x49, 0xbb, 0xe1, 0xcf, 0x4f, 0xb6, 0x10, 0xd6, 0xd8, 0xa3, 0xee, 0x7d, 0xab, 0x18, 0x68, 0xd2, 0xde, 0x77, 0x11, 0x69, 0xee, 0x48, 0x94, 0x60, 0x88, 0xc7, 0xd0, 0x29, 0xf4, 0x49, 0xaf, 0xf5, 0x5e, 0x25, 0xc8, 0x38, 0xec, 0xb4, 0xca, 0x3f, 0xc3, 0x2e, 0x6d, 0x2f, 0x1c, 0xa0, 0x7f, 0x0a, 0xdf, 0x6c, 0xc8, 0xf1, 0xcd, 0x6f, 0xba, 0x54, 0xbe, 0x59, 0x02, 0xa5, 0x8b, 0xf1, 0xa9, 0x6c, 0x7e, 0x78, 0x96, 0xb3, 0x3d, 0x03, 0x76, 0x9f, 0x15, 0xb9, 0x43, 0x3a, 0xb3, 0xeb, 0xc4, 0x7f, 0x19, 0xb5, 0xef, 0x51, 0xba, 0x27, 0x2a, 0x30, 0xfe, 0x77, 0x65, 0x6a, 0x29, 0x2b, 0xc1, 0xa7, 0x18, 0xbb, 0x97, 0x1e, 0xa4, 0x90, 0xd3, 0xce, 0xfa, 0xc8, 0x81, 0xe9, 0xdd, 0x5d, 0x38, 0x1f, 0x0f, 0x64, 0xce, 0x0b, 0xa2, 0xad, 0x26, 0x25, 0xb0, 0x3b, 0xf5, 0xfd, 0x8a, 0x3e, 0x75, 0x4d, 0x31, 0x30, 0xad, 0x7c, 0x57, 0x4b, 0x69, 0xcf, 0x5d, 0xe5, 0x4c, 0x6d, 0x93, 0x4e, 0x8a, 0xe7, 0x76, 0xdd, 0x07, 0x72, 0xbb, 0xee, 0x79, 0xf8, 0xb1, 0x7e, 0xd5, 0x97, 0xb0, 0x26, 0x27, 0xef, 0x5f, 0x39, 0xd6, 0xdc, 0xa7, 0xdd, 0xdf, 0xb0, 0xdd, 0x78, 0x77, 0x63, 0xba, 0xfb, 0x18, 0x79, 0xdf, 0xee, 0x6e, 0xee, 0xcb, 0x5f, 0x5b, 0x9a, 0x4e, 0xaf, 0xbd, 0x7a, 0xe7, 0xd7, 0x65, 0x74, 0xd6, 0x3b, 0x96, 0x83, 0xd9, 0x21, 0x6f, 0x72, 0x9f, 0xed, 0x7b, 0xa2, 0xec, 0xa3, 0x6d, 0x38, 0xa2, 0xd7, 0x58, 0xca, 0x41, 0xcf, 0x76, 0x9b, 0x4c, 0x91, 0x72, 0x28, 0xec, 0xf0, 0x62, 0x5c, 0x1d, 0x3e, 0x9b, 0x93, 0x0e, 0x74, 0xe7, 0x25, 0x05, 0x74, 0xe7, 0x27, 0xc9, 0xea, 0x59, 0x61, 0xd2, 0x8a, 0xae, 0x31, 0x59, 0x6c, 0x26, 0xdb, 0x60, 0x46, 0x74, 0x0d, 0x64, 0x57, 0xdd, 0xde, 0xe2, 0x6a, 0x83, 0x31, 0xe4, 0x96, 0x6d, 0x42, 0x33, 0xb3, 0x1f, 0xf0, 0x6d, 0xba, 0xe2, 0xf4, 0xd3, 0x82, 0x94, 0xbb, 0x4f, 0x88, 0x54, 0xa8, 0x89, 0x61, 0xcd, 0x15, 0x88, 0xbf, 0x44, 0x16, 0x5e, 0xe3, 0xc1, 0xf4, 0xe0, 0x56, 0x8a, 0xdf, 0xd9, 0x4f, 0xab, 0x2a, 0x29, 0x6e, 0xcb, 0x7e, 0xce, 0xa9, 0x14, 0x0b, 0x61, 0x7a, 0x7b, 0xad, 0x95, 0xee, 0x1a, 0xb7, 0x7e, 0x92, 0x97, 0xc7, 0x31, 0xed, 0x5e, 0xdb, 0x6b, 0x42, 0xcd, 0xb2, 0x08, 0x58, 0xd9, 0x1a, 0xc7, 0x3c, 0x4f, 0xa1, 0xba, 0x76, 0xee, 0x6a, 0xb1, 0xaf, 0x80, 0xb1, 0x86, 0x2f, 0xa0, 0x42, 0x68, 0xca, 0xdd, 0x11, 0x4d, 0x5d, 0x1f, 0xc1, 0x3c, 0xef, 0x11, 0x39, 0xd2, 0x70, 0x6d, 0x36, 0x22, 0x84, 0x49, 0x9b, 0x86, 0x5f, 0xdc, 0x59, 0x1c, 0x62, 0x9b, 0xd0, 0x65, 0x24, 0xb0, 0xd3, 0x9e, 0xd7, 0x9e, 0xc8, 0xcb, 0xe1, 0x98, 0x50, 0x63, 0x5f, 0x0f, 0xc5, 0xf9, 0xda, 0x0c, 0x49, 0x87, 0x36, 0xb3, 0x5d, 0x9b, 0xb3, 0x9f, 0x31, 0x20, 0xe4, 0x7a, 0xa7, 0x27, 0x2f, 0xfc, 0xac, 0x23, 0xae, 0x6a, 0xda, 0xbc, 0xfe, 0x0a, 0xd9, 0xbb, 0x54, 0x6f, 0xb8, 0x62, 0xdf, 0x57, 0xdf, 0xb8, 0x47, 0xac, 0x69, 0xdd, 0xbc, 0x9a, 0xb2, 0xcc, 0x60, 0xeb, 0xfb, 0x64, 0x6e, 0x57, 0x9c, 0x4e, 0x9a, 0xd3, 0xfd, 0xe7, 0x54, 0xc5, 0xd4, 0xb4, 0xec, 0x5e, 0xf3, 0x13, 0x29, 0xdb, 0xd4, 0x78, 0xa6, 0x61, 0xa6, 0x59, 0x72, 0x42, 0xf1, 0x42, 0x9a, 0x7f, 0x0b, 0x10, 0x47, 0x59, 0x97, 0xd5, 0xb3, 0x3d, 0xd3, 0x32, 0x0c, 0x97, 0x61, 0xd8, 0x4a, 0x36, 0x14, 0xee, 0x69, 0x64, 0xb7, 0xa0, 0x8b, 0xef, 0xdb, 0x0c, 0x15, 0x50, 0x42, 0x2b, 0x6d, 0x28, 0x0f, 0x94, 0x90, 0xd5, 0xb1, 0x3b, 0x36, 0x83, 0x4f, 0xb5, 0xc1, 0xf4, 0xd6, 0xc7, 0x60, 0xb2, 0xbf, 0x0e, 0x56, 0x25, 0x3a, 0x61, 0x87, 0xa5, 0x02, 0xe7, 0x14, 0x59, 0x1e, 0xeb, 0x65, 0x7b, 0x32, 0x79, 0x37, 0x70, 0xae, 0x29, 0x13, 0x69, 0x2c, 0x24, 0x65, 0x5d, 0x6b, 0xcd, 0x59, 0x5d, 0x51, 0xfb, 0x0f, 0xe3, 0x62, 0x79, 0x36, 0xc0, 0x54, 0x6b, 0x82, 0x64, 0xed, 0xdb, 0xea, 0x68, 0x83, 0xe2, 0x89, 0x94, 0x36, 0xa4, 0x8a, 0xc6, 0xfa, 0xf1, 0x6b, 0x8e, 0xac, 0xcd, 0x37, 0x56, 0x6a, 0x39, 0x96, 0xba, 0x93, 0x34, 0xf8, 0x4f, 0x5b, 0x9e, 0x0b, 0x8a, 0x57, 0x8d, 0x5f, 0x1d, 0x53, 0x2d, 0xaf, 0xa8, 0x3b, 0x6e, 0xac, 0x4c, 0xd5, 0x16, 0x8b, 0x59, 0x2d, 0x8d, 0x64, 0x46, 0x6d, 0x86, 0x9f, 0x91, 0x47, 0xb4, 0x53, 0xac, 0xc8, 0x25, 0xbc, 0x75, 0x45, 0xd5, 0x61, 0xf6, 0x50, 0x9f, 0x7a, 0x46, 0x86, 0xdd, 0xb5, 0x8a, 0xe2, 0x8c, 0x1d, 0x16, 0x72, 0x7a, 0x49, 0x4f, 0x22, 0xce, 0x3d, 0x98, 0xa4, 0x7b, 0x18, 0x43, 0xb1, 0x9e, 0xc9, 0xfa, 0x97, 0xed, 0xea, 0xb9, 0xee, 0x83, 0xec, 0x06, 0xfe, 0x50, 0x9e, 0x84, 0x4c, 0x36, 0xa5, 0x1a, 0xf2, 0xc6, 0x17, 0x9f, 0xb5, 0x1f, 0x2e, 0xf8, 0xd8, 0x1d, 0x61, 0x2a, 0x21, 0x92, 0x2b, 0x21, 0x74, 0x09, 0x2e, 0xda, 0xa4, 0xbc, 0x3b, 0xe6, 0x91, 0xfc, 0x1b, 0xc6, 0xea, 0xf9, 0x45, 0xc4, 0xac, 0xbc, 0xc3, 0x68, 0x2f, 0x26, 0x5b, 0x02, 0xf8, 0x75, 0x6e, 0xc6, 0x9c, 0xcc, 0x8d, 0xd1, 0x8c, 0x3e, 0x7f, 0x26, 0x35, 0x7e, 0x2c, 0xaa, 0x77, 0x93, 0xfb, 0x35, 0xed, 0xdc, 0xaf, 0xb8, 0x3d, 0xb0, 0x0f, 0x29, 0xf1, 0x1e, 0x89, 0x7f, 0xbc, 0xfb, 0x5c, 0x5f, 0xd3, 0x57, 0x30, 0x20, 0xcc, 0x1b, 0xdd, 0x4e, 0x3b, 0xf6, 0x0a, 0xe8, 0x17, 0x5b, 0xfe, 0xcc, 0x0c, 0x99, 0x9f, 0xb7, 0x9a, 0x90, 0x2f, 0xe0, 0x2a, 0x0c, 0xf1, 0x1d, 0x8a, 0x0d, 0xf9, 0x8a, 0xed, 0x1d, 0xc0, 0xaf, 0x46, 0x0c, 0x70, 0x57, 0x2b, 0xf0, 0x51, 0x73, 0x39, 0xfc, 0x2d, 0xed, 0x56, 0xf3, 0x61, 0x4c, 0xc3, 0x57, 0x18, 0x1e, 0xdc, 0x41, 0xda, 0x72, 0xdf, 0xac, 0x5a, 0x54, 0x22, 0x6f, 0x93, 0x8f, 0xbc, 0xbb, 0xad, 0xd3, 0x86, 0x9c, 0xa5, 0x2b, 0x73, 0x95, 0xed, 0x97, 0x69, 0x7a, 0x5f, 0x68, 0x55, 0xf2, 0xb7, 0x47, 0xac, 0xae, 0xcc, 0x38, 0xdd, 0x49, 0x53, 0x78, 0x49, 0xfc, 0x57, 0x94, 0x30, 0xdf, 0xec, 0x49, 0x9a, 0x9a, 0x9f, 0x8e, 0x88, 0xc9, 0xa3, 0x88, 0x85, 0xbe, 0xb4, 0x37, 0xd1, 0x1e, 0x25, 0xf7, 0x29, 0xf6, 0xdc, 0x32, 0xe4, 0xe1, 0x36, 0xc0, 0x8f, 0x73, 0xd6, 0x74, 0x5f, 0x78, 0x9f, 0x34, 0x8e, 0x4b, 0xbc, 0xa4, 0xeb, 0xe6, 0x22, 0x3b, 0x36, 0x00, 0x77, 0xdc, 0x52, 0x8a, 0xf5, 0x69, 0x49, 0x34, 0xa3, 0x1b, 0x47, 0x7a, 0xd1, 0x8b, 0x7e, 0x5d, 0xc2, 0x85, 0xae, 0xb8, 0xf6, 0x71, 0xb2, 0xd9, 0xb8, 0x0e, 0xb8, 0x3d, 0xe8, 0xdf, 0xf7, 0x08, 0x51, 0x1b, 0x80, 0xbf, 0x62, 0x1a, 0x8d, 0x01, 0x82, 0x58, 0xc2, 0xb3, 0xc8, 0x43, 0xbd, 0x8b, 0x61, 0x19, 0xd3, 0xf4, 0xa0, 0xdf, 0xf4, 0x88, 0x8c, 0x6e, 0x33, 0xbe, 0xe9, 0x46, 0x7a, 0x04, 0xf0, 0x58, 0x62, 0x09, 0xba, 0xe9, 0xb5, 0x3e, 0x74, 0x1f, 0x4e, 0xba, 0xd1, 0xed, 0x64, 0xd8, 0xf1, 0xfb, 0x98, 0xa2, 0x59, 0xa1, 0x77, 0x9b, 0xd6, 0xa9, 0x58, 0xf3, 0xc7, 0x8f, 0x10, 0x76, 0xfc, 0x7b, 0x86, 0x1d, 0xff, 0x01, 0xdf, 0xfa, 0x0c, 0x90, 0x19, 0x51, 0x35, 0xcb, 0x92, 0x0e, 0x21, 0x5a, 0xe7, 0x7e, 0x73, 0xdb, 0xdd, 0xde, 0x4d, 0x10, 0x09, 0x21, 0xcf, 0x61, 0x7d, 0x57, 0x87, 0xdf, 0x15, 0xbf, 0xcb, 0x27, 0xcc, 0x11, 0xb2, 0x98, 0xad, 0x8f, 0x14, 0x22, 0xcd, 0xbb, 0x3e, 0xaa, 0xa6, 0xdb, 0x6a, 0xf5, 0x1a, 0x21, 0xc5, 0xf9, 0x4c, 0xfd, 0x5c, 0xd5, 0xfc, 0x51, 0xbd, 0x99, 0xcf, 0x64, 0x5a, 0xe9, 0x1e, 0xf0, 0x47, 0x5e, 0x23, 0x69, 0x8c, 0x8a, 0xf1, 0x2f, 0xbc, 0x2f, 0x85, 0x7e, 0x7a, 0x5c, 0x01, 0x7e, 0x9f, 0xaf, 0xa8, 0xd5, 0x51, 0xa2, 0x8b, 0xd1, 0xf9, 0x01, 0x4b, 0x02, 0xe0, 0x9d, 0x4d, 0x50, 0xc6, 0x09, 0x61, 0xe4, 0x90, 0x76, 0xff, 0xfa, 0x78, 0xe8, 0x0f, 0xbd, 0xd7, 0x17, 0xd6, 0x64, 0xce, 0x48, 0xce, 0xcc, 0x7f, 0x2e, 0xe2, 0xba, 0xa1, 0x44, 0x87, 0x54, 0x7b, 0xf7, 0x87, 0x87, 0x42, 0x5f, 0x97, 0xfd, 0xa6, 0xc4, 0x52, 0xc6, 0x9d, 0xa2, 0x9f, 0xfe, 0x14, 0x67, 0xd9, 0xc2, 0x5a, 0xc3, 0xf0, 0x30, 0x86, 0x14, 0x23, 0xd6, 0x7b, 0x74, 0x94, 0xb3, 0xf4, 0xf8, 0xb0, 0x95, 0xbb, 0x39, 0x6a, 0x6b, 0x2c, 0x47, 0x94, 0x7b, 0x1a, 0x2e, 0x03, 0x30, 0x6e, 0xd3, 0x08, 0x03, 0x4b, 0x25, 0xd8, 0x85, 0x79, 0x79, 0x91, 0x53, 0x78, 0xf1, 0x2d, 0x95, 0x37, 0xeb, 0x50, 0xf1, 0xaa, 0xbd, 0xd1, 0x16, 0x9d, 0xc0, 0xac, 0xb5, 0x29, 0xb0, 0xe8, 0x46, 0x7b, 0x46, 0x9f, 0x52, 0xac, 0x58, 0xba, 0x85, 0xf4, 0x32, 0x6e, 0x86, 0x25, 0x4e, 0xe0, 0x3c, 0xdb, 0xcb, 0xbc, 0x2d, 0xbd, 0x83, 0xbd, 0xad, 0x17, 0xb1, 0xff, 0x75, 0x8e, 0x26, 0xec, 0x73, 0x2f, 0x8d, 0x36, 0xa4, 0x37, 0x1b, 0x13, 0xd4, 0xbe, 0x45, 0xc9, 0xd5, 0x09, 0x2b, 0xa3, 0x3c, 0xc0, 0xbd, 0x96, 0x08, 0x47, 0x48, 0x5f, 0xe3, 0x2b, 0x98, 0x6a, 0x3f, 0xa3, 0x4c, 0x75, 0x89, 0x88, 0x12, 0xc0, 0xb1, 0xf9, 0x64, 0x52, 0x41, 0x3e, 0x02, 0x60, 0x41, 0xb2, 0x71, 0x5d, 0x58, 0x1d, 0x93, 0x5c, 0xaf, 0x82, 0xbd, 0x91, 0xe9, 0x4d, 0xc6, 0xd0, 0x7d, 0x8e, 0xb9, 0x4f, 0xb1, 0xde, 0x0c, 0xa4, 0xe9, 0x44, 0x46, 0x22, 0x5d, 0x40, 0x94, 0x2f, 0x6d, 0x40, 0x77, 0x75, 0xba, 0x10, 0xdd, 0xe6, 0x34, 0xad, 0xb3, 0x45, 0xd2, 0x45, 0xe8, 0x86, 0xd3, 0xf3, 0x48, 0x13, 0x62, 0xda, 0x84, 0x6e, 0x55, 0x9a, 0x47, 0xd7, 0x97, 0x36, 0x13, 0xef, 0x97, 0x9e, 0x8f, 0xae, 0x23, 0x5d, 0x8c, 0xae, 0x90, 0x5e, 0x80, 0xee, 0xe2, 0xf8, 0x76, 0x87, 0x9c, 0xec, 0xb2, 0x94, 0xd1, 0x0c, 0x49, 0x2a, 0x6c, 0x5e, 0x90, 0x65, 0xd0, 0xbb, 0x92, 0x2d, 0x58, 0xd7, 0x66, 0x56, 0xf3, 0x08, 0xa3, 0x99, 0x61, 0x06, 0x0d, 0x8d, 0x25, 0x53, 0xb2, 0x8a, 0x51, 0x57, 0x1f, 0x83, 0x93, 0xc6, 0x52, 0x31, 0x1b, 0x4b, 0x0b, 0x18, 0xa5, 0xbd, 0x8b, 0x28, 0x2d, 0x42, 0x64, 0x65, 0xb5, 0x2f, 0xa6, 0xda, 0xe7, 0x59, 0x08, 0xe5, 0x70, 0x66, 0x3c, 0xeb, 0x9c, 0xf7, 0xe2, 0x4f, 0x48, 0xeb, 0xde, 0x46, 0x3e, 0xed, 0x63, 0x3d, 0x61, 0x82, 0x81, 0x99, 0x5b, 0x5f, 0xd3, 0xe4, 0xcc, 0xfa, 0x6a, 0x69, 0x0d, 0xfc, 0xe3, 0xec, 0xfd, 0xc5, 0xbe, 0x28, 0xba, 0x59, 0x9e, 0x88, 0x2f, 0xdc, 0xbb, 0x9f, 0x89, 0x6c, 0x6f, 0x85, 0x2b, 0x9f, 0x08, 0xf3, 0xfa, 0x5f, 0x87, 0x3d, 0xda, 0xbd, 0xed, 0x54, 0xf4, 0x31, 0x89, 0x47, 0x2c, 0xa7, 0x8b, 0x3d, 0x23, 0xe9, 0x14, 0x14, 0xb0, 0x6c, 0x0d, 0x24, 0x31, 0x20, 0x1e, 0xc3, 0xd1, 0x73, 0xfd, 0x74, 0xec, 0x39, 0xc4, 0x1e, 0x70, 0x35, 0x96, 0xbd, 0x05, 0x64, 0xf7, 0x80, 0x95, 0x64, 0x34, 0xcf, 0x80, 0xb2, 0x08, 0xc7, 0xc8, 0x62, 0xe4, 0xd1, 0x80, 0xf0, 0xef, 0xdb, 0xa5, 0xd1, 0x17, 0xe2, 0x5b, 0x19, 0x96, 0xd8, 0xda, 0xfa, 0x29, 0x71, 0xae, 0x6f, 0x2f, 0x01, 0x0b, 0x3b, 0xfb, 0xc7, 0x52, 0x23, 0xee, 0xfa, 0x5a, 0xfe, 0xef, 0x00, 0xe9, 0x55, 0x88, 0x38, 0xeb, 0x35, 0x1b, 0xbc, 0x05, 0x49, 0xe0, 0x7d, 0x89, 0xc5, 0x59, 0x4b, 0xf4, 0xba, 0x87, 0x13, 0x88, 0x13, 0x68, 0x45, 0x9a, 0x43, 0xcc, 0x64, 0x38, 0xa5, 0x38, 0xd8, 0x9b, 0x42, 0xd2, 0xab, 0xba, 0x0e, 0xf8, 0x36, 0xf6, 0x84, 0xf3, 0xa8, 0x40, 0xb5, 0x9d, 0x63, 0xc6, 0x34, 0x07, 0x14, 0x30, 0x98, 0x52, 0x85, 0x39, 0x29, 0xc0, 0xad, 0xea, 0xe7, 0x7e, 0x5c, 0x60, 0x56, 0x6c, 0xbb, 0xc9, 0xca, 0x1d, 0x61, 0xd3, 0xf3, 0x2e, 0x31, 0x7f, 0x37, 0x9e, 0xe9, 0xae, 0x06, 0xae, 0x25, 0xb2, 0x15, 0xdd, 0xa8, 0xca, 0xa7, 0x70, 0x75, 0x36, 0x89, 0x56, 0x70, 0x19, 0x8f, 0xd1, 0x98, 0x6d, 0x37, 0x4d, 0xdf, 0xb7, 0xdb, 0xde, 0x09, 0x3e, 0xb7, 0x84, 0x52, 0x67, 0x05, 0x08, 0xab, 0xc6, 0x8c, 0x20, 0x6f, 0xd2, 0x89, 0x39, 0xab, 0x54, 0xdf, 0x6b, 0x42, 0x4e, 0xaa, 0x0d, 0xfc, 0x2b, 0x51, 0x82, 0xab, 0xac, 0x41, 0x9e, 0x06, 0xc3, 0x7e, 0x27, 0x58, 0x2b, 0x25, 0xf0, 0x5a, 0x56, 0x40, 0x95, 0xdc, 0xe3, 0x15, 0x05, 0x63, 0xb8, 0x47, 0x10, 0xf1, 0x69, 0xa5, 0xdc, 0xd3, 0x3f, 0xe2, 0xeb, 0x04, 0x63, 0x2d, 0xd9, 0x8b, 0xee, 0x0f, 0xd4, 0xa0, 0xf4, 0x9e, 0x7a, 0x11, 0xa2, 0x03, 0xcd, 0x7d, 0x55, 0x10, 0x0f, 0x57, 0x86, 0xc1, 0x85, 0xa9, 0xee, 0x9b, 0xf4, 0x4d, 0xa5, 0xf6, 0x8d, 0x29, 0x20, 0x65, 0x53, 0xc7, 0xc5, 0x4a, 0xc4, 0xf6, 0x74, 0x46, 0xc1, 0xb8, 0x02, 0xf9, 0xfd, 0xc5, 0xad, 0xc6, 0xc5, 0x94, 0xf7, 0x53, 0x38, 0x2f, 0x6b, 0x2b, 0x6b, 0xc1, 0x97, 0x8d, 0x2d, 0xa1, 0xaf, 0xb7, 0x60, 0x6c, 0xa8, 0x32, 0x04, 0xfe, 0x58, 0xf8, 0xfd, 0x23, 0xf1, 0xf0, 0xd9, 0x5a, 0x2c, 0x65, 0x65, 0x4c, 0x3c, 0x74, 0x38, 0x2e, 0x8e, 0x86, 0x30, 0x9f, 0x2a, 0xa9, 0x1d, 0x1c, 0x12, 0x9d, 0xe2, 0x69, 0x87, 0x20, 0xfe, 0x45, 0xec, 0xff, 0x84, 0x24, 0x7a, 0x47, 0x9a, 0x45, 0xb3, 0xc8, 0x6f, 0x6a, 0xfd, 0x63, 0x25, 0xf2, 0xaf, 0x1c, 0x48, 0xaf, 0x71, 0x4e, 0xe9, 0x35, 0x9d, 0x3b, 0xf4, 0xb9, 0xce, 0x3b, 0x59, 0x7e, 0x02, 0x37, 0xa2, 0x3d, 0xbb, 0xc2, 0xff, 0xd3, 0x49, 0x01, 0xe7, 0x5d, 0x41, 0xb5, 0xdf, 0x05, 0xc1, 0x9d, 0x8f, 0x82, 0x1e, 0x39, 0x6d, 0x03, 0x67, 0x4f, 0x06, 0x25, 0x51, 0x31, 0xf9, 0xca, 0xc1, 0x15, 0x0b, 0x9d, 0x0e, 0xc5, 0xc4, 0x88, 0xd4, 0x79, 0x19, 0xdb, 0x26, 0x88, 0x7f, 0x07, 0x1b, 0xbb, 0x06, 0x70, 0xdc, 0x2f, 0x82, 0x4b, 0x68, 0xd7, 0x46, 0x6e, 0x03, 0xe2, 0x41, 0x47, 0xb6, 0x0f, 0x94, 0x84, 0x97, 0xaf, 0x13, 0xbb, 0x17, 0x5c, 0x50, 0x8e, 0x8a, 0xca, 0x6a, 0xca, 0xf9, 0xf4, 0xa3, 0xec, 0x5c, 0x87, 0x4b, 0xcb, 0x3d, 0xb0, 0x12, 0xea, 0x6a, 0xa4, 0x90, 0xa2, 0x3f, 0x5d, 0x13, 0x0b, 0x0d, 0x4a, 0x9d, 0xdf, 0x4e, 0xca, 0xbb, 0x10, 0xf3, 0x0e, 0xcd, 0x98, 0xb7, 0x61, 0x50, 0xea, 0xe0, 0xfd, 0x90, 0xfd, 0x02, 0xa9, 0xe7, 0x66, 0xcc, 0x59, 0xec, 0xc7, 0x12, 0xfe, 0x52, 0x04, 0x11, 0x87, 0x0f, 0xad, 0x63, 0x17, 0x60, 0x29, 0x75, 0x34, 0xa3, 0x49, 0x0b, 0xbd, 0xd4, 0x86, 0xed, 0xd4, 0x06, 0xa2, 0x36, 0x4f, 0x1d, 0x4b, 0x37, 0x23, 0x5f, 0xec, 0x62, 0x27, 0x58, 0xcb, 0x37, 0xfa, 0xcf, 0xf4, 0xfd, 0x80, 0xed, 0x54, 0xe6, 0xc9, 0xbc, 0xb9, 0xd2, 0x40, 0x37, 0x46, 0x5f, 0xa2, 0xff, 0xb9, 0x0f, 0x4b, 0x39, 0x45, 0xa5, 0x84, 0x40, 0xc4, 0x12, 0xdd, 0x83, 0xa1, 0x0e, 0xd0, 0x9d, 0xc9, 0x96, 0xe5, 0x0d, 0xf5, 0x8f, 0xe0, 0x9c, 0xf7, 0x62, 0x1d, 0x9c, 0x54, 0x8f, 0xbc, 0xb2, 0x96, 0x65, 0xcb, 0x4a, 0xf9, 0x35, 0xdd, 0xf3, 0x33, 0x95, 0xd5, 0x4b, 0x5f, 0xa2, 0xdf, 0x63, 0x59, 0xce, 0xe4, 0x85, 0xe5, 0xc9, 0x40, 0x97, 0x0d, 0xfd, 0x85, 0xc9, 0x87, 0xbb, 0x4c, 0x64, 0xd9, 0xb8, 0x15, 0x74, 0xcf, 0x2b, 0x84, 0xe7, 0xee, 0x61, 0xb8, 0xcd, 0x89, 0xcf, 0x4f, 0x28, 0x84, 0xd3, 0xca, 0x93, 0x4a, 0x67, 0x0b, 0xfa, 0xee, 0x64, 0x35, 0xba, 0x2b, 0x30, 0xbe, 0x55, 0xa9, 0x96, 0x80, 0x76, 0x23, 0xb9, 0xdf, 0x69, 0xfe, 0x2e, 0x89, 0x6f, 0x50, 0x31, 0x01, 0x62, 0x61, 0x70, 0x81, 0x05, 0xfb, 0x1f, 0x74, 0x41, 0xde, 0x95, 0xf9, 0x8a, 0x85, 0xfc, 0x18, 0x27, 0xb0, 0x90, 0x0b, 0xe3, 0x3e, 0x66, 0x21, 0x01, 0xe3, 0x44, 0x16, 0x5a, 0x84, 0x71, 0xff, 0xce, 0x42, 0x66, 0xc4, 0x23, 0x4c, 0x67, 0xb2, 0xad, 0x03, 0x0c, 0xbf, 0x3e, 0x6e, 0xb9, 0xb7, 0x57, 0x87, 0x65, 0xde, 0x8b, 0x34, 0xf1, 0x32, 0xd2, 0x1e, 0x60, 0xda, 0x54, 0x0c, 0x4c, 0x93, 0xca, 0x5a, 0x48, 0xc3, 0x05, 0xd8, 0x0c, 0x4f, 0xa2, 0x7b, 0x01, 0x06, 0xe1, 0x59, 0xe6, 0x4f, 0xff, 0x7b, 0x11, 0x5e, 0x81, 0x7d, 0x5a, 0xba, 0xb7, 0xd0, 0x1d, 0x99, 0xf2, 0xbb, 0x00, 0x27, 0xe0, 0xd4, 0x94, 0xdf, 0x05, 0x38, 0x7f, 0x07, 0x59, 0x62, 0xd7, 0x49, 0xe5, 0x9c, 0x1e, 0xff, 0x77, 0x2a, 0x5d, 0x50, 0x0e, 0x3c, 0xfa, 0xad, 0xe8, 0xeb, 0xd1, 0xff, 0x21, 0xfa, 0x1c, 0xfa, 0xab, 0x19, 0xce, 0x0b, 0x45, 0x7f, 0xf6, 0x50, 0x9f, 0x12, 0xe1, 0xcb, 0x33, 0xd7, 0x30, 0x4e, 0x42, 0xff, 0x0a, 0xfa, 0xd5, 0xe8, 0x5f, 0x47, 0xdf, 0xc7, 0xd2, 0xdc, 0xad, 0x9c, 0x63, 0x7e, 0x42, 0x39, 0x85, 0xf4, 0xf9, 0xc2, 0x1d, 0x22, 0xa7, 0x53, 0xca, 0xd4, 0x52, 0x14, 0x0b, 0xc6, 0x9c, 0xc5, 0x18, 0xbd, 0x62, 0x60, 0x31, 0xfa, 0x18, 0xff, 0x86, 0x1b, 0x0a, 0xd6, 0xc1, 0xf5, 0x2f, 0xb1, 0x4d, 0xc7, 0x08, 0x7a, 0x21, 0xf4, 0xe1, 0x21, 0xb5, 0x5d, 0x4a, 0xa8, 0x5d, 0x38, 0x58, 0x94, 0x58, 0xbc, 0x88, 0xfb, 0x74, 0x1e, 0x4f, 0x37, 0xe6, 0x32, 0xa1, 0x6f, 0xaa, 0x60, 0x63, 0xe1, 0xe1, 0x6d, 0x0e, 0xfe, 0xbf, 0xfe, 0x79, 0x87, 0x93, 0xbb, 0x27, 0x06, 0x83, 0xf4, 0xfd, 0x31, 0xfc, 0x7a, 0x68, 0x86, 0xaf, 0xef, 0x9e, 0xfe, 0x6b, 0x9b, 0xae, 0x8e, 0x3b, 0x92, 0xcb, 0xe1, 0x30, 0xe6, 0x90, 0xa6, 0x51, 0x83, 0x35, 0xfc, 0x02, 0x7b, 0xe3, 0x6e, 0xc4, 0xcc, 0x6b, 0x55, 0x9e, 0x28, 0xef, 0xd4, 0x65, 0x70, 0xd2, 0xaf, 0x11, 0xba, 0xb8, 0x98, 0xfa, 0x83, 0x2e, 0xf6, 0x7b, 0x1c, 0x9e, 0xcc, 0xc6, 0xe4, 0x7e, 0x10, 0x54, 0x5d, 0xc4, 0xb5, 0x86, 0x14, 0x27, 0xf4, 0x48, 0x80, 0x65, 0x91, 0xde, 0x17, 0x03, 0xcd, 0x3b, 0x79, 0x24, 0xd6, 0x23, 0xf4, 0x68, 0x4f, 0x41, 0x7a, 0xa2, 0x73, 0xf4, 0xc8, 0x41, 0x7d, 0x4a, 0x71, 0xdd, 0x9c, 0xb0, 0x05, 0xc3, 0xe7, 0x28, 0x2c, 0xf5, 0x2b, 0x64, 0x67, 0x08, 0x43, 0x1b, 0x39, 0x01, 0xa5, 0x62, 0x38, 0xca, 0x4e, 0xb6, 0x09, 0xab, 0x2e, 0x1b, 0xc1, 0xd9, 0x0e, 0xb6, 0x40, 0x3b, 0xf8, 0xaa, 0xca, 0xa1, 0xc2, 0xdb, 0x01, 0x46, 0x8b, 0x9b, 0x70, 0x70, 0xff, 0x88, 0x8a, 0x71, 0x7d, 0x61, 0x4f, 0x51, 0xff, 0x07, 0x1e, 0x23, 0x61, 0x5c, 0x3f, 0xc4, 0x25, 0x9c, 0xf7, 0xae, 0xea, 0x76, 0xc4, 0xde, 0xe5, 0xe0, 0xc5, 0xd4, 0x26, 0x4c, 0x7d, 0x1f, 0xc3, 0xb7, 0x35, 0x98, 0xee, 0x57, 0x6a, 0x3a, 0x15, 0xdb, 0xc6, 0xa3, 0x3e, 0x3e, 0x16, 0x3a, 0x72, 0xf4, 0xfc, 0xa1, 0xca, 0x28, 0xac, 0x8c, 0x37, 0xf9, 0x00, 0x9f, 0x8e, 0x9c, 0x3b, 0x54, 0xd9, 0x04, 0x55, 0x6f, 0x20, 0xe6, 0xec, 0xd0, 0x13, 0x1e, 0x19, 0x44, 0xfc, 0x89, 0x21, 0x9c, 0x7b, 0x95, 0x18, 0x07, 0x8e, 0x4a, 0xb2, 0x8d, 0xea, 0x54, 0x6c, 0x48, 0x6d, 0xee, 0x66, 0x7a, 0x99, 0xca, 0xdc, 0x92, 0xd0, 0xa5, 0x52, 0x1a, 0x7b, 0x43, 0x8e, 0xd6, 0x68, 0x16, 0x12, 0x02, 0xb4, 0xc6, 0x91, 0xb5, 0x9d, 0x05, 0x01, 0x5a, 0x6f, 0x43, 0x8e, 0xdf, 0xee, 0xda, 0x00, 0x4e, 0xaf, 0x95, 0x70, 0xe8, 0x41, 0xb1, 0x23, 0xac, 0x61, 0x36, 0x8b, 0x37, 0xe4, 0x31, 0x7a, 0x45, 0x55, 0x0b, 0x18, 0xdd, 0xba, 0x43, 0x2c, 0x6a, 0x9d, 0x84, 0xe9, 0x2c, 0xd9, 0xdc, 0xbd, 0xed, 0xe0, 0xc2, 0xb4, 0x2d, 0x5a, 0xda, 0xaf, 0x15, 0x39, 0x22, 0x76, 0xc8, 0x1a, 0xf6, 0xb5, 0xc8, 0x23, 0x94, 0x53, 0xb8, 0x47, 0xbb, 0x39, 0x3d, 0xa7, 0x9c, 0x90, 0x6e, 0xf5, 0x78, 0x4b, 0xb1, 0x66, 0x6e, 0xac, 0x99, 0xbe, 0x7a, 0x8b, 0x22, 0x62, 0xce, 0x81, 0x30, 0x2c, 0x15, 0xe1, 0x2e, 0x0d, 0x6f, 0x59, 0x18, 0x8e, 0xb4, 0x32, 0xbc, 0x55, 0x9a, 0x5a, 0x42, 0x27, 0xb6, 0x3d, 0x64, 0x89, 0x65, 0xda, 0xfc, 0xa5, 0x07, 0x1b, 0x3f, 0x0e, 0x40, 0xd6, 0xda, 0x12, 0xf8, 0xe8, 0xde, 0x81, 0x7a, 0xe6, 0xe3, 0xed, 0x1d, 0x3f, 0x3b, 0x41, 0xa7, 0x59, 0x74, 0x62, 0x37, 0x68, 0x2b, 0xa0, 0x0f, 0xd3, 0x0a, 0x37, 0xb3, 0xc3, 0x30, 0xfe, 0xfe, 0x3e, 0x46, 0x91, 0xcc, 0xcb, 0x98, 0xae, 0x88, 0x46, 0xc8, 0xca, 0x5a, 0x36, 0xd2, 0xb8, 0x86, 0x7c, 0x8b, 0x8d, 0x2c, 0x78, 0x6a, 0x36, 0x81, 0xdd, 0xd8, 0xa2, 0x74, 0x1e, 0x52, 0x95, 0xac, 0xa6, 0xae, 0xc0, 0x5c, 0xdf, 0x9f, 0x3b, 0xc5, 0x93, 0x17, 0xfb, 0xb2, 0xba, 0x32, 0x1f, 0xa0, 0x1c, 0xc9, 0xd2, 0xc8, 0x12, 0x1b, 0xe9, 0x47, 0xf6, 0xa8, 0xfa, 0x91, 0x9d, 0xc8, 0x61, 0xb9, 0x3c, 0xaa, 0x66, 0x20, 0x4c, 0x9b, 0xc6, 0x9c, 0x03, 0xac, 0x17, 0xcf, 0x6b, 0x76, 0xe4, 0x5a, 0x10, 0x8e, 0x87, 0xf0, 0xcb, 0x35, 0xf6, 0x72, 0xb0, 0xd9, 0x25, 0x67, 0x1b, 0xf8, 0x5c, 0x34, 0x07, 0xd8, 0xa8, 0x6d, 0xfa, 0xc6, 0x08, 0x8e, 0x0a, 0x30, 0x9a, 0x97, 0xa3, 0xdc, 0xae, 0x4f, 0xc0, 0xc2, 0xf3, 0x88, 0x15, 0x71, 0xfe, 0xe5, 0x66, 0xdb, 0xc2, 0xf3, 0xd0, 0xba, 0xf0, 0xc4, 0xc2, 0xf3, 0xfc, 0x78, 0x81, 0xdb, 0xf0, 0x4e, 0xe1, 0x1e, 0xde, 0x67, 0xfc, 0x04, 0x9f, 0x4f, 0x14, 0x79, 0x8b, 0x1e, 0x42, 0x77, 0x1f, 0x85, 0x17, 0x9e, 0x30, 0x9b, 0x0a, 0xf7, 0x18, 0x37, 0xeb, 0x4e, 0xe8, 0x12, 0x46, 0x73, 0xa1, 0xbf, 0x68, 0xb4, 0xe0, 0xf0, 0x3c, 0xc1, 0xd4, 0x6c, 0xbe, 0x3e, 0xff, 0x8c, 0xde, 0x57, 0x3c, 0xb8, 0xa0, 0x7f, 0xe1, 0x09, 0x83, 0x61, 0xe1, 0x09, 0x4b, 0xb7, 0x65, 0xaf, 0x9a, 0x5e, 0xfb, 0xad, 0x25, 0xd7, 0x72, 0x96, 0x13, 0x35, 0xee, 0xb4, 0x7a, 0xd3, 0xd8, 0xd9, 0x67, 0x6c, 0x61, 0x9c, 0x5d, 0xc6, 0x89, 0xfe, 0xa9, 0xce, 0xf6, 0x4f, 0x09, 0x62, 0x47, 0xd2, 0xa1, 0x6b, 0x29, 0xe7, 0x74, 0xc4, 0xe7, 0xda, 0x1a, 0xd3, 0x9c, 0xbb, 0x06, 0xb9, 0xaf, 0xad, 0xcc, 0x96, 0xcc, 0x9d, 0xb6, 0xc6, 0xee, 0x42, 0x7a, 0xce, 0xec, 0xf5, 0xe2, 0xfc, 0x3b, 0x74, 0x09, 0x82, 0xa3, 0x38, 0x17, 0x91, 0x13, 0xf3, 0xe3, 0x18, 0xf1, 0x9f, 0x5a, 0x0f, 0x8b, 0xfd, 0x38, 0xd3, 0xde, 0xbb, 0x84, 0xf4, 0x4f, 0xc2, 0xd1, 0x3f, 0x22, 0x1f, 0x62, 0xa9, 0x2d, 0x4b, 0x3b, 0x71, 0xa4, 0x34, 0xda, 0x1a, 0x91, 0xdf, 0x6d, 0x4c, 0xb1, 0x1c, 0x33, 0x47, 0x59, 0x7d, 0x0a, 0xa0, 0xfa, 0x7e, 0x1a, 0x39, 0x41, 0x7b, 0x18, 0x39, 0xab, 0x69, 0x6a, 0xa4, 0xf1, 0xbf, 0xd5, 0x33, 0xd5, 0x58, 0x01, 0xcb, 0xcb, 0xf9, 0x90, 0xcd, 0x94, 0xcf, 0xad, 0x43, 0x66, 0x5f, 0x01, 0x7a, 0x57, 0xe9, 0xe6, 0xea, 0xf3, 0x7d, 0x4a, 0x0a, 0xa1, 0x0c, 0xd2, 0x9c, 0x88, 0xf5, 0xf6, 0x8f, 0xb8, 0xa4, 0x7f, 0x39, 0xbc, 0x96, 0x77, 0xc9, 0x08, 0x75, 0xc5, 0x54, 0xa8, 0x83, 0x08, 0xf5, 0x7f, 0x10, 0xd4, 0xab, 0xf2, 0xa1, 0xb6, 0x35, 0x0a, 0xb5, 0xc2, 0xfc, 0x29, 0xd0, 0x36, 0x41, 0x30, 0x1f, 0x16, 0xdb, 0x84, 0x15, 0x92, 0x9d, 0xcf, 0x9d, 0x7b, 0x0e, 0x39, 0xec, 0x67, 0xb3, 0x10, 0xcf, 0x04, 0x89, 0x02, 0x0b, 0x5e, 0x4b, 0x83, 0xd5, 0x0d, 0x77, 0x4a, 0xaf, 0x33, 0xab, 0x69, 0x72, 0x16, 0xfe, 0x86, 0x4b, 0x99, 0x31, 0xa1, 0x73, 0xda, 0x56, 0xd4, 0x59, 0x08, 0xfe, 0x1e, 0xc2, 0x27, 0x1e, 0x73, 0xed, 0xf8, 0xd5, 0xcf, 0xa2, 0x03, 0x1e, 0x9d, 0xaf, 0x1d, 0xaa, 0x3c, 0x45, 0x08, 0xdf, 0x4a, 0x8f, 0x11, 0xc3, 0x7e, 0x16, 0xf6, 0x51, 0x8a, 0xe8, 0xf0, 0xd5, 0x57, 0xd9, 0x5a, 0xcd, 0x36, 0x66, 0x3f, 0x71, 0x40, 0x9b, 0xeb, 0x75, 0x38, 0xcb, 0x17, 0x43, 0x84, 0xdd, 0x39, 0xa1, 0xfc, 0xd7, 0xd4, 0xfc, 0x3e, 0x33, 0xe6, 0xa9, 0x87, 0xc6, 0x49, 0xa5, 0xd6, 0x4d, 0xe9, 0xbb, 0xba, 0xe9, 0xdf, 0xa2, 0x04, 0xeb, 0xce, 0xd6, 0xbc, 0x9e, 0x6a, 0xde, 0x31, 0x63, 0xff, 0xeb, 0xb3, 0xa3, 0xe4, 0x26, 0x69, 0xb0, 0xc5, 0xa6, 0x7f, 0xab, 0x40, 0xf1, 0xe6, 0x39, 0x94, 0xd3, 0x49, 0xd4, 0xef, 0x36, 0xcb, 0xb1, 0xde, 0x62, 0x39, 0x05, 0xdf, 0xad, 0x9c, 0xf9, 0x5a, 0xff, 0xdf, 0x7a, 0xbf, 0xfb, 0x45, 0xb2, 0xf3, 0x46, 0x67, 0x72, 0x4e, 0xd5, 0xd1, 0xe9, 0x9b, 0x00, 0x8e, 0x5b, 0xf9, 0x18, 0xf6, 0xb6, 0x93, 0x46, 0xae, 0xfc, 0xcb, 0xea, 0x72, 0xf0, 0xc9, 0xef, 0xf9, 0xdb, 0xa1, 0xc2, 0xa3, 0x6b, 0x22, 0x4a, 0x6a, 0xf1, 0x14, 0xca, 0xeb, 0x81, 0x43, 0x3e, 0x35, 0x4a, 0x96, 0x82, 0x6d, 0xa2, 0xfc, 0xa3, 0xf5, 0x20, 0x14, 0x30, 0xdc, 0x2e, 0xe1, 0xac, 0x70, 0xc9, 0x23, 0x1e, 0x13, 0xc6, 0x3e, 0x8a, 0x42, 0x16, 0xbd, 0xdf, 0x00, 0x92, 0xfc, 0x23, 0x23, 0xdd, 0xcd, 0x8a, 0xe2, 0xf8, 0x29, 0xa4, 0x38, 0x41, 0x94, 0x53, 0xeb, 0xc1, 0x63, 0xc2, 0x91, 0xe5, 0xf0, 0x14, 0x65, 0x63, 0x1e, 0x02, 0xa6, 0x07, 0x1f, 0x47, 0xd8, 0x38, 0xed, 0xac, 0x39, 0xd5, 0x11, 0x46, 0x76, 0xb6, 0x6f, 0x3e, 0x5a, 0x98, 0x5d, 0x30, 0x30, 0x1f, 0x44, 0xfc, 0x12, 0x24, 0x09, 0x26, 0x05, 0x3e, 0xc9, 0x25, 0xfa, 0xca, 0xcc, 0xa1, 0x4c, 0x26, 0x09, 0xe6, 0x97, 0x62, 0x3d, 0xaa, 0xce, 0x89, 0x5f, 0x1c, 0xea, 0xb8, 0x78, 0xeb, 0xbd, 0xd0, 0xf0, 0x05, 0xdc, 0xfb, 0xdb, 0x5f, 0x55, 0xff, 0xdd, 0x59, 0x78, 0xe9, 0x30, 0xcd, 0xcc, 0xdb, 0xeb, 0x0f, 0xf3, 0x12, 0x67, 0x69, 0x1a, 0x36, 0x36, 0x9e, 0xe9, 0xab, 0xc7, 0x78, 0x6d, 0xae, 0x54, 0x2f, 0xa5, 0xf5, 0xdd, 0xa0, 0xe4, 0x81, 0xfb, 0x51, 0x66, 0x10, 0x73, 0xf4, 0x30, 0xc7, 0x15, 0xc4, 0xb6, 0x7a, 0xf5, 0xfd, 0x52, 0x44, 0xec, 0x3a, 0xa9, 0xc0, 0xbc, 0xb3, 0x8e, 0xd2, 0xd9, 0xeb, 0x9d, 0x86, 0x26, 0x84, 0xbd, 0x01, 0x63, 0x10, 0xf3, 0x04, 0x85, 0xa8, 0x24, 0xfa, 0x42, 0x0a, 0x1f, 0x13, 0xab, 0xca, 0xcc, 0x61, 0x6c, 0x07, 0x93, 0xaa, 0xbd, 0xfe, 0x17, 0x47, 0xbb, 0x3e, 0x8f, 0xa3, 0x74, 0x87, 0x31, 0x7e, 0xaf, 0x18, 0xba, 0x08, 0xf7, 0x7e, 0x78, 0xdc, 0xfb, 0x17, 0xbd, 0xc0, 0x62, 0x6c, 0xd9, 0x91, 0x3e, 0x20, 0xa2, 0xec, 0x94, 0x07, 0xb1, 0xad, 0x29, 0xaf, 0x5e, 0x3a, 0x56, 0xaf, 0x97, 0x66, 0x83, 0x7c, 0x9e, 0xed, 0x16, 0xdb, 0xba, 0xf0, 0xe6, 0x33, 0x98, 0x34, 0x05, 0xa0, 0x6c, 0x64, 0xd4, 0x64, 0xd5, 0xe0, 0x6c, 0xe5, 0x9a, 0xf6, 0xcf, 0x5e, 0xee, 0xa4, 0xbc, 0x0c, 0xdf, 0x0d, 0x83, 0x98, 0xaa, 0x6f, 0x11, 0xce, 0xef, 0x58, 0x4e, 0xd1, 0xa9, 0x39, 0xc2, 0x55, 0xf8, 0x1d, 0xcb, 0x4b, 0xfc, 0x69, 0xfa, 0x6f, 0xb6, 0x72, 0x8c, 0xe3, 0x73, 0x84, 0xeb, 0x66, 0x79, 0x1d, 0x98, 0x52, 0xa3, 0x7c, 0x4e, 0x33, 0x3f, 0xdd, 0xf6, 0xc9, 0xe9, 0x6e, 0x01, 0xf7, 0x63, 0x0d, 0x66, 0x82, 0x10, 0xf3, 0x5b, 0x39, 0xa5, 0x87, 0x67, 0x2a, 0xb7, 0xd8, 0x5e, 0x1a, 0x97, 0x56, 0xae, 0x00, 0x43, 0xbc, 0xa6, 0xdd, 0x4c, 0xb8, 0x72, 0xb0, 0xa6, 0xc3, 0xb0, 0x12, 0x14, 0x5e, 0xaa, 0x89, 0x48, 0x9d, 0x14, 0xe3, 0x1e, 0x94, 0x3a, 0x0c, 0x7e, 0x8a, 0x91, 0x66, 0x6f, 0x97, 0xca, 0x1a, 0x94, 0x33, 0x6a, 0xd8, 0x1a, 0x86, 0x13, 0xff, 0xe2, 0x6c, 0xed, 0x53, 0xf8, 0xfc, 0xed, 0x51, 0x87, 0xda, 0xf1, 0xb1, 0xd3, 0xc4, 0x15, 0xa8, 0x5a, 0xc9, 0xa2, 0xc3, 0x63, 0xe7, 0x51, 0xce, 0xf2, 0x23, 0xa5, 0x70, 0xca, 0xc7, 0xaa, 0x89, 0x4a, 0xbc, 0xe7, 0xd1, 0x55, 0x14, 0xc7, 0x77, 0x90, 0x85, 0x64, 0xa4, 0x0f, 0x05, 0x42, 0x1d, 0x51, 0x08, 0xc2, 0xdc, 0x88, 0xd9, 0x57, 0xc9, 0x29, 0x23, 0xf8, 0x88, 0x93, 0x28, 0x22, 0x0d, 0x4a, 0x44, 0x63, 0x9a, 0xfb, 0xe4, 0x8d, 0x46, 0xd0, 0xf8, 0x44, 0x07, 0x71, 0x16, 0x94, 0x86, 0xe5, 0x4c, 0x37, 0x01, 0xdd, 0x93, 0x78, 0x8b, 0x9b, 0x70, 0x09, 0xe3, 0x28, 0x4b, 0xd2, 0xad, 0xdb, 0x3c, 0xa8, 0x54, 0xec, 0xfa, 0xe7, 0x10, 0x64, 0x52, 0xc7, 0xfd, 0x96, 0x00, 0x34, 0x6b, 0xeb, 0x25, 0xe2, 0x4d, 0xa0, 0xd5, 0xda, 0xe3, 0xd6, 0x38, 0xa4, 0x6f, 0x8e, 0xe7, 0xb7, 0xc5, 0x37, 0xa3, 0x93, 0xb9, 0x25, 0xa2, 0x9c, 0xf8, 0xec, 0xf5, 0x14, 0x51, 0x1b, 0x64, 0x35, 0x52, 0x61, 0xac, 0x9f, 0x60, 0xcc, 0x71, 0x51, 0xdf, 0xac, 0x99, 0x0b, 0xa4, 0xff, 0xb7, 0x64, 0xae, 0x3d, 0xe7, 0x13, 0xb1, 0xbd, 0xa9, 0xb6, 0x8b, 0xa3, 0x03, 0xd3, 0xd3, 0x74, 0x92, 0x93, 0xe5, 0xa3, 0x73, 0xa0, 0xea, 0xfa, 0x5b, 0xa2, 0xea, 0xfa, 0x1b, 0xa9, 0x7a, 0xf8, 0x49, 0x76, 0x6b, 0x7a, 0xf8, 0xf2, 0x70, 0x8e, 0xae, 0xcf, 0x0e, 0xf3, 0xb7, 0xce, 0xdb, 0x83, 0xb9, 0x69, 0xfc, 0xb2, 0x23, 0xba, 0x4b, 0x85, 0xb9, 0x8a, 0xe0, 0x3d, 0xaa, 0xc2, 0x8b, 0x63, 0xd4, 0x10, 0xdf, 0x81, 0xad, 0xe0, 0xae, 0x55, 0x21, 0xd6, 0xb3, 0x1e, 0x1a, 0xc8, 0x8e, 0xd1, 0x8a, 0x02, 0xf6, 0xd6, 0xe5, 0x23, 0x5e, 0xa7, 0x68, 0xf2, 0x3b, 0x06, 0x95, 0x13, 0xa1, 0xc2, 0x18, 0xbb, 0x28, 0x77, 0x23, 0x9c, 0x05, 0x04, 0x15, 0x72, 0x2c, 0x08, 0xd7, 0x1f, 0x2e, 0xe4, 0xc1, 0xb5, 0x6b, 0x36, 0xb8, 0xfe, 0xb7, 0x79, 0xae, 0x70, 0xa9, 0x23, 0x4f, 0xe5, 0xd1, 0x68, 0x56, 0xa9, 0xb0, 0x21, 0x4f, 0xe6, 0x9d, 0x0a, 0x99, 0xd6, 0x97, 0x26, 0x56, 0xfb, 0x5d, 0x37, 0x81, 0x6c, 0xe2, 0x1d, 0xe3, 0xc2, 0x9c, 0xb9, 0xfe, 0x22, 0xc8, 0x98, 0xc6, 0x3d, 0x82, 0xcb, 0x34, 0x17, 0x3e, 0x4c, 0x81, 0x3f, 0x6e, 0x9c, 0x0c, 0x59, 0x13, 0x41, 0xd6, 0x35, 0x17, 0xee, 0x33, 0x48, 0x90, 0xfd, 0x32, 0x40, 0x50, 0x1d, 0xf3, 0xe8, 0x84, 0x55, 0xf1, 0x5e, 0xac, 0x9d, 0x5b, 0xc5, 0x31, 0x5a, 0xaf, 0x15, 0xd0, 0x18, 0x64, 0xe3, 0x74, 0x80, 0xdd, 0x31, 0xaf, 0x23, 0x28, 0x04, 0x83, 0x3a, 0x52, 0x31, 0xb5, 0xcb, 0x4b, 0x50, 0x1a, 0xd9, 0x48, 0x1d, 0xc8, 0x8d, 0x54, 0xa6, 0xbf, 0xad, 0xd4, 0x53, 0x10, 0x1d, 0x20, 0x5b, 0x3d, 0x2a, 0x7c, 0x5f, 0xbb, 0x72, 0xf0, 0xd9, 0xc3, 0x79, 0x23, 0xb2, 0x6b, 0x7a, 0xf8, 0xfe, 0x67, 0xd7, 0x5c, 0xe1, 0x9b, 0xda, 0x73, 0x2a, 0x7c, 0x2a, 0x3c, 0x53, 0xa1, 0xfc, 0x53, 0xc0, 0x17, 0x7e, 0x6a, 0x32, 0x84, 0x5f, 0xc9, 0x73, 0x83, 0x70, 0xec, 0x8d, 0x48, 0x17, 0x3b, 0x2d, 0xb2, 0xf6, 0xaf, 0x09, 0x7f, 0x1a, 0xe2, 0x5d, 0xa0, 0x9f, 0xa0, 0x2a, 0x33, 0x50, 0x35, 0xae, 0x8a, 0xbe, 0x49, 0x02, 0xe7, 0x9d, 0xc0, 0xa3, 0xd3, 0xa6, 0x94, 0x30, 0x55, 0xac, 0x8b, 0xd6, 0xf5, 0x38, 0xc3, 0xec, 0xb4, 0x4d, 0x28, 0xad, 0x14, 0xc1, 0x6f, 0x93, 0xbc, 0x8f, 0x82, 0xa9, 0x64, 0x39, 0xdc, 0x27, 0x6f, 0xe9, 0x3f, 0x44, 0x23, 0xde, 0x63, 0xea, 0x1f, 0xc9, 0xad, 0x7c, 0xa9, 0x2b, 0x74, 0x37, 0xa7, 0x7b, 0xec, 0xad, 0x79, 0x46, 0xaa, 0xb8, 0xe9, 0x16, 0xe8, 0x2c, 0x49, 0x64, 0xdf, 0xad, 0x94, 0x12, 0x61, 0x7d, 0x76, 0xed, 0x2f, 0x1b, 0xa7, 0xed, 0xc5, 0xd9, 0xa3, 0x8f, 0xfd, 0x0d, 0x3b, 0xf5, 0xe3, 0x94, 0x1d, 0x11, 0x57, 0x76, 0x97, 0x8c, 0xee, 0x2c, 0x74, 0x27, 0x04, 0xb6, 0x2f, 0xc6, 0x63, 0x18, 0xb2, 0xfb, 0x65, 0x5c, 0x34, 0xbb, 0x57, 0xa6, 0xdf, 0xad, 0xa8, 0x76, 0x26, 0xe7, 0x25, 0x81, 0x5f, 0xbd, 0x0e, 0xb8, 0x83, 0xd9, 0x1d, 0x32, 0xfd, 0x56, 0x94, 0xa0, 0x4f, 0x0c, 0xaa, 0x27, 0x71, 0xde, 0xd5, 0x4e, 0xe4, 0x0c, 0x65, 0x6b, 0x90, 0x2d, 0xdf, 0x2e, 0xda, 0x29, 0xfe, 0x95, 0x14, 0x78, 0xdd, 0xea, 0x0a, 0x2a, 0x3b, 0x75, 0xc3, 0x33, 0x3d, 0x17, 0xe6, 0xdc, 0x3e, 0x57, 0xfe, 0x8d, 0x57, 0xd2, 0xd2, 0x4e, 0xf2, 0x56, 0xb2, 0x85, 0xce, 0x11, 0xd9, 0x3a, 0xc0, 0x8e, 0xb9, 0x56, 0xb8, 0x1f, 0x65, 0xab, 0x72, 0x51, 0x47, 0x4f, 0x32, 0x60, 0x13, 0xc9, 0xa6, 0x52, 0xe9, 0x7a, 0x58, 0xc0, 0xe9, 0x85, 0x38, 0xd9, 0x3e, 0xc5, 0x70, 0x01, 0xa7, 0x63, 0xb7, 0x61, 0x0c, 0x5a, 0x1b, 0xe6, 0xef, 0x5d, 0xb8, 0x27, 0xda, 0xc8, 0x2a, 0x90, 0x55, 0x91, 0x46, 0x8c, 0xf3, 0xe6, 0xa4, 0x1a, 0x81, 0x57, 0x40, 0x77, 0x46, 0x5d, 0x2f, 0xfb, 0xcd, 0xc8, 0x84, 0x05, 0x12, 0x53, 0x6e, 0x5f, 0xcf, 0x16, 0x3b, 0xa8, 0xee, 0x80, 0xb6, 0x83, 0xcd, 0x9e, 0xad, 0x51, 0x1b, 0xab, 0x91, 0xcc, 0x56, 0x5e, 0x41, 0xb7, 0x13, 0x7b, 0xa5, 0x6c, 0xaa, 0x2c, 0x83, 0xf9, 0x6e, 0x46, 0x7a, 0xc1, 0x2c, 0x19, 0x7c, 0x1e, 0x65, 0xeb, 0xd1, 0x08, 0x93, 0xdd, 0x09, 0x3e, 0xb5, 0x45, 0x42, 0xd8, 0x22, 0x0e, 0xfc, 0xc6, 0x4b, 0x3a, 0x1c, 0xc5, 0x7b, 0x45, 0xd0, 0x47, 0xd6, 0xd3, 0x38, 0xd7, 0xd5, 0x31, 0x0d, 0x85, 0xa0, 0x0b, 0x32, 0x2e, 0x80, 0xf7, 0xf0, 0xb5, 0xe3, 0x97, 0x4e, 0x20, 0x95, 0xc5, 0xd1, 0xa9, 0x72, 0x40, 0x38, 0x43, 0x69, 0xde, 0x17, 0xab, 0x1c, 0x50, 0x15, 0xd2, 0xfe, 0xfa, 0x31, 0x23, 0x54, 0xe3, 0xbc, 0xf5, 0x12, 0x17, 0x6b, 0xf4, 0xcc, 0xa7, 0x37, 0x4a, 0xc7, 0xcc, 0xe5, 0xc5, 0xf3, 0xca, 0xe3, 0xcf, 0xd0, 0xe9, 0x0a, 0x7e, 0x34, 0xaf, 0xb4, 0x35, 0x73, 0x2f, 0x8d, 0xf1, 0x20, 0xbe, 0xd0, 0xd7, 0xd8, 0xcb, 0x3a, 0x79, 0xe3, 0xf1, 0x8c, 0xfc, 0x58, 0x6f, 0xc6, 0x63, 0xc6, 0xb7, 0x7c, 0x74, 0xf8, 0xb3, 0x51, 0x75, 0x45, 0x87, 0xf1, 0x34, 0x3c, 0x3b, 0xd7, 0x8a, 0x12, 0x35, 0xff, 0xc3, 0xe9, 0xeb, 0x87, 0x18, 0xab, 0x99, 0xfa, 0x15, 0xeb, 0x59, 0xcc, 0xec, 0x13, 0x0e, 0x7f, 0x36, 0xe4, 0xd1, 0xe1, 0x78, 0xa1, 0xd0, 0xe1, 0x40, 0xdb, 0x44, 0xbd, 0x3a, 0xc9, 0x72, 0x56, 0xb6, 0x5e, 0xfe, 0x36, 0xf0, 0xd7, 0x62, 0x0e, 0x58, 0xbf, 0x8a, 0xea, 0x4e, 0x3a, 0x03, 0xea, 0x31, 0xab, 0xbc, 0x60, 0x7e, 0xbd, 0xf6, 0x65, 0xe4, 0x34, 0xd6, 0xcb, 0xa4, 0xd5, 0xab, 0x0a, 0x7b, 0x65, 0x70, 0x72, 0x2d, 0x1a, 0xa8, 0x16, 0x2b, 0xc0, 0x18, 0x70, 0x81, 0x2b, 0xe8, 0x02, 0x77, 0x95, 0x0b, 0x1c, 0xd5, 0x2e, 0x70, 0x66, 0x7b, 0x78, 0x62, 0xbd, 0x1a, 0xdf, 0xbf, 0x23, 0x6e, 0x48, 0x04, 0x20, 0xf6, 0xff, 0xe4, 0xfd, 0x7d, 0x60, 0x93, 0x55, 0x96, 0x38, 0x8e, 0x9f, 0x27, 0x49, 0x43, 0x08, 0xb1, 0xc4, 0x1a, 0x3b, 0x11, 0x2b, 0x3c, 0xc4, 0x10, 0x43, 0x08, 0x4d, 0xa8, 0xa5, 0x76, 0x3a, 0x5d, 0x4c, 0xd2, 0xb4, 0x4d, 0x43, 0xa9, 0x9d, 0xb4, 0x68, 0xc7, 0x61, 0xf4, 0xa1, 0xb4, 0x49, 0x29, 0x7d, 0xc9, 0x84, 0xc2, 0x30, 0x7c, 0xfb, 0x65, 0xd2, 0x02, 0x4e, 0x45, 0xc6, 0x56, 0x44, 0x86, 0x75, 0x5d, 0x3f, 0xae, 0x1f, 0x3f, 0x2e, 0x22, 0x6a, 0x65, 0x90, 0x41, 0x3e, 0x8c, 0x5b, 0x91, 0x71, 0xd0, 0x51, 0x17, 0x10, 0x19, 0xd6, 0x65, 0x14, 0x19, 0xc7, 0xe1, 0x4d, 0x65, 0x1d, 0x06, 0x99, 0xb6, 0xf6, 0xf9, 0x9e, 0x73, 0xef, 0x93, 0x97, 0x96, 0x97, 0x71, 0x76, 0x76, 0xf7, 0xf7, 0xc7, 0x4f, 0x4c, 0x9f, 0xe7, 0xb9, 0xf7, 0xdc, 0xf7, 0x73, 0xcf, 0x3d, 0xe7, 0xde, 0x73, 0xcf, 0x29, 0x7b, 0xfb, 0x34, 0xe4, 0x1e, 0x6b, 0x86, 0xbc, 0x42, 0xac, 0x43, 0x71, 0x59, 0x4d, 0x15, 0x9d, 0xbc, 0xe5, 0x39, 0xc0, 0xbd, 0xa7, 0xaa, 0xcd, 0x97, 0x5f, 0x39, 0x3f, 0x18, 0xf2, 0xbc, 0xfa, 0xea, 0xe1, 0x01, 0xb7, 0xa1, 0x3f, 0xd8, 0x96, 0x97, 0x68, 0xc9, 0xa9, 0x13, 0x0a, 0x8f, 0x47, 0xef, 0x67, 0x5d, 0xea, 0xfc, 0xa0, 0x4b, 0x5f, 0x5c, 0xe5, 0xca, 0x2c, 0xac, 0x74, 0x19, 0xdc, 0x65, 0xbc, 0x7e, 0xa7, 0x48, 0xc3, 0xc5, 0x8d, 0x74, 0xdc, 0xf9, 0x4a, 0x59, 0x7b, 0x1b, 0xb6, 0x2c, 0x8f, 0xf8, 0x62, 0xe2, 0xfe, 0x08, 0x17, 0xe7, 0x60, 0x6d, 0x6a, 0xca, 0x8d, 0x76, 0x3a, 0x85, 0x78, 0xdc, 0x93, 0xdf, 0x04, 0x7a, 0x7c, 0xff, 0xe6, 0x2b, 0x95, 0xad, 0xfe, 0x50, 0x59, 0xde, 0xf8, 0xb7, 0x5f, 0x3d, 0x56, 0x55, 0x13, 0x0c, 0xc4, 0x37, 0x0e, 0xec, 0x49, 0x2f, 0xb5, 0x25, 0xad, 0xd4, 0xe5, 0xbc, 0x54, 0x77, 0xb9, 0x4b, 0x97, 0x57, 0xe6, 0x1a, 0x4f, 0x25, 0xb3, 0x70, 0x0b, 0x95, 0xba, 0x0b, 0xb9, 0xac, 0xb0, 0x6e, 0x37, 0xae, 0xdd, 0x38, 0x87, 0x77, 0x24, 0xd3, 0x3b, 0xd3, 0xd2, 0x17, 0x10, 0x2e, 0xe4, 0x13, 0xc7, 0xa9, 0xb6, 0x19, 0x6a, 0x56, 0xa7, 0xf8, 0x83, 0x34, 0xfe, 0x94, 0x56, 0xfd, 0x12, 0x5a, 0x61, 0x6c, 0x7a, 0x06, 0x31, 0x96, 0x47, 0x28, 0xe1, 0x9c, 0x39, 0xf3, 0x81, 0xb8, 0xfb, 0xe4, 0x96, 0x9a, 0xd6, 0xe4, 0x7a, 0xb0, 0x60, 0x14, 0x95, 0x5f, 0x90, 0xb6, 0x1b, 0xe3, 0x96, 0x2c, 0x4c, 0x27, 0x21, 0x87, 0xcd, 0xbe, 0xec, 0xcb, 0xce, 0x3d, 0x7e, 0xea, 0x31, 0x5c, 0xdd, 0x9b, 0xbe, 0xdb, 0xff, 0xf0, 0x1b, 0xd6, 0x25, 0xf0, 0x64, 0xd4, 0x70, 0xb9, 0x7d, 0xfe, 0x8f, 0x0f, 0x5c, 0xba, 0xcf, 0x3f, 0x4a, 0x6b, 0x7b, 0xd5, 0xe5, 0x76, 0xef, 0xb9, 0x56, 0x25, 0x87, 0xa3, 0x1b, 0xf5, 0xe4, 0x29, 0x1c, 0x63, 0x4c, 0xa4, 0xe5, 0xa5, 0xec, 0xeb, 0x93, 0x1e, 0x9b, 0x15, 0xe3, 0xed, 0x4c, 0xbb, 0x5c, 0x2c, 0x3f, 0xc7, 0xb0, 0xdc, 0xe2, 0x98, 0x01, 0xc6, 0x42, 0x3b, 0x52, 0xa7, 0x7d, 0xbb, 0xd6, 0x36, 0x78, 0x88, 0x13, 0xee, 0x5b, 0x13, 0x29, 0xb4, 0xcc, 0x00, 0x93, 0x55, 0x08, 0xf8, 0x7c, 0x3e, 0xb2, 0x1a, 0xbb, 0x28, 0xdf, 0x05, 0x1b, 0xbb, 0xc8, 0x67, 0x24, 0xd9, 0x9c, 0x15, 0x35, 0xe4, 0x53, 0xc9, 0x95, 0xd1, 0xb7, 0x86, 0xfb, 0xa5, 0xb0, 0x83, 0x81, 0x59, 0xb2, 0xae, 0xd7, 0x4b, 0x86, 0x0e, 0x58, 0x01, 0x65, 0x7e, 0x49, 0xd3, 0x01, 0x65, 0x3e, 0xc4, 0x8d, 0x62, 0x4b, 0x13, 0xd9, 0xf8, 0x74, 0x5f, 0x6b, 0x6b, 0x26, 0x9f, 0xdd, 0x8f, 0xbc, 0x19, 0x83, 0x32, 0xaf, 0x4d, 0x58, 0x29, 0xf0, 0x76, 0x8f, 0x38, 0x2b, 0x3f, 0x5c, 0x50, 0xcc, 0xb5, 0x41, 0x99, 0x06, 0x06, 0x3b, 0xc1, 0x40, 0x78, 0x17, 0x64, 0x13, 0x9d, 0x0e, 0x2e, 0x81, 0x9c, 0x70, 0xbe, 0xb2, 0x6e, 0x19, 0x2e, 0xd1, 0xb6, 0x36, 0x24, 0xd7, 0x2d, 0xa2, 0xb9, 0x39, 0xb7, 0x2c, 0x01, 0x13, 0x18, 0x6e, 0x21, 0x6b, 0xc4, 0x74, 0x37, 0x58, 0x13, 0xce, 0x92, 0x2c, 0x64, 0x7b, 0xb8, 0xe6, 0x59, 0x30, 0x85, 0x9e, 0x85, 0xdc, 0x10, 0xdd, 0x99, 0xed, 0x8e, 0x64, 0x92, 0x8e, 0x1e, 0x59, 0xbb, 0xab, 0xe9, 0x0e, 0xc6, 0xc3, 0x1f, 0x90, 0x16, 0x07, 0xd7, 0x84, 0x14, 0x8b, 0x49, 0x03, 0x9c, 0xbc, 0x42, 0xb2, 0x1a, 0x4c, 0x2a, 0x45, 0xea, 0x82, 0xf5, 0xd6, 0x30, 0xad, 0xc9, 0x3c, 0xba, 0xf9, 0xc0, 0x34, 0x9f, 0x4f, 0xda, 0x3c, 0xd6, 0x38, 0x69, 0x3d, 0x46, 0x05, 0xd2, 0xbe, 0xac, 0xee, 0x95, 0xb2, 0x83, 0x0f, 0x93, 0xb7, 0x17, 0x8c, 0x7f, 0x84, 0x3c, 0x8c, 0x54, 0xf7, 0xda, 0x6a, 0x6a, 0xba, 0x25, 0xed, 0xdc, 0x3f, 0x13, 0x74, 0xb0, 0x3b, 0x7c, 0x5c, 0xaa, 0xaf, 0xa1, 0x14, 0xc6, 0x9a, 0xad, 0x60, 0x12, 0x1d, 0x90, 0x67, 0xc1, 0xb9, 0xbc, 0x3d, 0x1e, 0x16, 0x5f, 0x1c, 0x08, 0xcf, 0x11, 0x8d, 0x64, 0x9d, 0x0b, 0x7f, 0x79, 0xbe, 0xad, 0x30, 0x19, 0x7f, 0x0e, 0xcc, 0xc3, 0x82, 0xbf, 0x5c, 0xc9, 0xb2, 0xbd, 0x27, 0x9c, 0x39, 0xad, 0x1a, 0x6c, 0x14, 0x42, 0xb1, 0x92, 0xb1, 0xbf, 0x27, 0x6c, 0xc0, 0x90, 0x3c, 0x8a, 0x27, 0x58, 0xa4, 0xe9, 0x8f, 0x90, 0x6f, 0x1a, 0xa5, 0xb4, 0x2a, 0xf2, 0x55, 0xe5, 0x6e, 0x01, 0xe7, 0xc1, 0xd3, 0x60, 0x7e, 0x71, 0xa0, 0x41, 0x27, 0x86, 0x5e, 0x3c, 0x8d, 0x3d, 0x11, 0x27, 0x7d, 0xc6, 0x62, 0x6e, 0xa9, 0x6a, 0x3f, 0xd3, 0xbc, 0x6d, 0x87, 0x26, 0xc4, 0xc5, 0x16, 0xbb, 0x0b, 0xa2, 0x34, 0x87, 0x9d, 0x48, 0x77, 0x8a, 0xae, 0x17, 0x35, 0x65, 0xf1, 0x03, 0xf1, 0x87, 0xe2, 0xfb, 0xe3, 0x34, 0x87, 0x5c, 0xed, 0xd0, 0x01, 0x85, 0x2f, 0x7e, 0x0e, 0x85, 0x2d, 0x1a, 0xe4, 0xd3, 0x0a, 0x77, 0xbd, 0x00, 0x85, 0x6d, 0xa0, 0xde, 0xcd, 0xfd, 0xe0, 0xbe, 0xff, 0x00, 0x8e, 0x40, 0xc3, 0xcd, 0xa4, 0x89, 0xa2, 0xf7, 0x22, 0x47, 0x81, 0x10, 0x95, 0x48, 0x2d, 0x75, 0xa3, 0xd7, 0x7e, 0x94, 0x87, 0x26, 0xdc, 0x7e, 0xfd, 0xfc, 0xde, 0xaa, 0xdd, 0x23, 0x4f, 0x58, 0x3d, 0x4e, 0xe2, 0xc7, 0xf2, 0x3b, 0x20, 0xdf, 0x0e, 0x93, 0x48, 0x52, 0x3c, 0xdc, 0xe3, 0xa6, 0x19, 0xaa, 0x4b, 0x78, 0xce, 0x3a, 0x1c, 0x77, 0xf9, 0x60, 0x81, 0xa5, 0xd4, 0xb5, 0x18, 0x2c, 0x10, 0xc0, 0xbf, 0xb9, 0xe0, 0x27, 0x1d, 0x10, 0x3a, 0x75, 0xfa, 0x05, 0xce, 0xb7, 0xb0, 0x45, 0x9c, 0x0e, 0x8e, 0xdc, 0xe9, 0x30, 0xd9, 0x55, 0x0e, 0xc5, 0xfd, 0x3f, 0xc6, 0x7a, 0x79, 0xe8, 0xd9, 0xae, 0xca, 0x05, 0xac, 0x6d, 0x3e, 0xce, 0xc8, 0x5c, 0xb1, 0x34, 0xd7, 0x0e, 0x0e, 0xac, 0xc5, 0x64, 0x9c, 0x07, 0xf9, 0x3f, 0xc3, 0x54, 0x2d, 0x5a, 0xe6, 0x8b, 0xc4, 0x44, 0x69, 0x72, 0x01, 0x67, 0x46, 0x3e, 0xc2, 0xba, 0xf1, 0xaf, 0x07, 0xdc, 0xd5, 0x9f, 0xc3, 0x5d, 0xae, 0x52, 0x58, 0x80, 0xab, 0x80, 0xcf, 0xd5, 0x8c, 0x7c, 0x4d, 0x35, 0x3f, 0xeb, 0xc0, 0xd6, 0xf8, 0xb1, 0x9e, 0xd7, 0x5b, 0xca, 0xc8, 0x4f, 0x47, 0x60, 0x20, 0xcf, 0x05, 0xc1, 0xc0, 0xab, 0xce, 0xa5, 0x76, 0x3f, 0x9d, 0x6a, 0xfc, 0xfd, 0x5b, 0xa4, 0x19, 0x86, 0xf4, 0xda, 0x78, 0xf0, 0xad, 0x2c, 0xe3, 0x14, 0x2f, 0xcc, 0xc7, 0xf5, 0xda, 0xf4, 0xee, 0x5b, 0xa6, 0x6b, 0xa7, 0xf8, 0xe0, 0x4e, 0xec, 0xa7, 0xfc, 0x45, 0x5a, 0xfc, 0xeb, 0x6e, 0x2c, 0xa0, 0xf7, 0xf0, 0x24, 0x7a, 0x0f, 0xeb, 0xb1, 0xe4, 0xe2, 0xfe, 0xf5, 0xf5, 0x93, 0x24, 0x23, 0x7f, 0x5b, 0x64, 0x96, 0x32, 0x59, 0x8c, 0x49, 0x1c, 0xf7, 0xca, 0xfa, 0x45, 0x99, 0x92, 0xc6, 0x57, 0x2a, 0x19, 0x57, 0x0a, 0x92, 0x61, 0x25, 0xe9, 0x1f, 0x96, 0x8a, 0xc5, 0xb0, 0x79, 0xd3, 0x8f, 0x5e, 0x1e, 0x08, 0xab, 0x42, 0xf1, 0x60, 0x69, 0x58, 0x87, 0xe5, 0xdc, 0x89, 0xf9, 0xcf, 0xb7, 0x65, 0x3a, 0x0c, 0xa4, 0xeb, 0xce, 0xf4, 0x21, 0xb5, 0x21, 0x7c, 0x0b, 0xad, 0xdd, 0xfd, 0x02, 0xd4, 0x35, 0xe4, 0x3a, 0x4b, 0x42, 0xab, 0x83, 0x93, 0x23, 0x36, 0xcc, 0xdf, 0xd3, 0xff, 0x02, 0xf8, 0x1b, 0x72, 0xb6, 0x9b, 0xc3, 0xe6, 0x1d, 0x37, 0x84, 0x4d, 0xc8, 0x27, 0x98, 0x8d, 0x05, 0xfb, 0xa1, 0xbf, 0xa0, 0x0e, 0xc2, 0x5a, 0x84, 0x76, 0x36, 0xbe, 0x1e, 0x83, 0x2c, 0x17, 0xcc, 0x8f, 0x82, 0xd1, 0x05, 0x77, 0x2e, 0x87, 0x02, 0x6c, 0x6b, 0x87, 0xe0, 0x5c, 0x5a, 0xe8, 0xa7, 0x13, 0x21, 0xba, 0x6b, 0x68, 0x74, 0xef, 0x07, 0x66, 0x6f, 0x8b, 0xe0, 0xee, 0xda, 0x1e, 0x8f, 0x4c, 0xe2, 0x3d, 0x12, 0x1b, 0xa7, 0xf4, 0xc3, 0xd3, 0x04, 0x35, 0x25, 0xba, 0x1f, 0xe0, 0xae, 0x18, 0xe4, 0x61, 0x0c, 0x52, 0x97, 0xea, 0x83, 0x6f, 0x51, 0xe9, 0xce, 0xa5, 0x66, 0x82, 0xd8, 0x67, 0xc1, 0xf7, 0x87, 0xb1, 0x26, 0xf6, 0x52, 0xec, 0x5d, 0x1d, 0xd4, 0xbd, 0xfc, 0x39, 0xd6, 0x33, 0x2b, 0x88, 0x21, 0x11, 0xa2, 0x5c, 0xd5, 0xbf, 0x7d, 0x2b, 0x98, 0x1d, 0x86, 0x91, 0x9d, 0x5c, 0x8a, 0x60, 0x76, 0x88, 0x31, 0x1f, 0x9e, 0x7a, 0x64, 0x2b, 0xad, 0x32, 0x0e, 0x4d, 0x68, 0x2d, 0x9d, 0xa8, 0x05, 0xf6, 0xda, 0x32, 0x6b, 0x88, 0xbf, 0xcf, 0x48, 0xec, 0x35, 0x1c, 0x89, 0xb3, 0x5d, 0x86, 0x00, 0x78, 0x18, 0x2d, 0x27, 0x3f, 0x36, 0xaa, 0x94, 0x0f, 0xb6, 0x79, 0x17, 0x74, 0x28, 0xee, 0x61, 0x98, 0x62, 0xc7, 0x8c, 0xd9, 0xcb, 0xc6, 0xda, 0xd8, 0x3d, 0xff, 0xb6, 0xb7, 0xa6, 0x9b, 0x9d, 0xf2, 0x6a, 0xd2, 0x77, 0x2e, 0x0e, 0xc7, 0x57, 0x40, 0x21, 0xb5, 0xc1, 0x60, 0xc9, 0x74, 0x2e, 0x0d, 0x50, 0xf9, 0xef, 0x10, 0x76, 0x8a, 0xba, 0x83, 0x2f, 0x40, 0x20, 0xb8, 0x21, 0x9c, 0x83, 0xbd, 0x56, 0x58, 0x9f, 0x4d, 0x32, 0x23, 0xa7, 0x03, 0xd6, 0x38, 0xb6, 0xb7, 0x21, 0xb4, 0x85, 0x66, 0xbc, 0x35, 0x64, 0xcf, 0x60, 0xf4, 0x49, 0x47, 0xb3, 0x64, 0x11, 0x7c, 0xb5, 0x83, 0x9e, 0x0d, 0x2d, 0x97, 0x6f, 0x57, 0x01, 0x49, 0x47, 0xaf, 0xe5, 0xf3, 0x75, 0xd4, 0x5d, 0xc1, 0xe5, 0xa1, 0x4c, 0xb2, 0xb9, 0x5d, 0xdd, 0xeb, 0x80, 0xf7, 0x57, 0x5b, 0xf5, 0xbc, 0x86, 0x69, 0x6b, 0xd4, 0x46, 0xaa, 0x21, 0xc2, 0x20, 0xe6, 0xd0, 0xfb, 0x91, 0x44, 0x6d, 0xf5, 0x96, 0x8c, 0x44, 0x6d, 0x93, 0xf3, 0x71, 0x3c, 0x52, 0xd2, 0xca, 0xd4, 0xc9, 0xd9, 0x18, 0x3e, 0xbc, 0x90, 0x2c, 0xaf, 0x90, 0xb5, 0x06, 0xba, 0xed, 0x9f, 0xd7, 0x0c, 0x4e, 0xe2, 0x9f, 0xdb, 0xb5, 0x25, 0x27, 0x65, 0x59, 0xca, 0xcc, 0xab, 0x60, 0xdc, 0xb4, 0xd6, 0xfb, 0x1f, 0x3d, 0x88, 0x83, 0x0f, 0xed, 0x67, 0xd6, 0xc2, 0xf5, 0x51, 0xf1, 0xc0, 0x0b, 0x60, 0x22, 0x5f, 0x50, 0x43, 0x03, 0xcc, 0x6a, 0xb8, 0xa2, 0xc1, 0x2f, 0x16, 0x8e, 0xa6, 0x98, 0xa4, 0x3b, 0x56, 0xca, 0xa9, 0x1e, 0xd1, 0xdf, 0x5c, 0x09, 0xe0, 0x51, 0xa2, 0xb6, 0xc1, 0x3e, 0xa4, 0x8f, 0x3a, 0xec, 0xb7, 0x0d, 0x48, 0x83, 0xb1, 0xb7, 0x28, 0xec, 0x96, 0x6a, 0xe4, 0x36, 0x91, 0x32, 0x23, 0x75, 0xce, 0xc5, 0x9f, 0x05, 0xa9, 0x71, 0x77, 0xf8, 0x10, 0xc6, 0x18, 0x6b, 0x7a, 0xfa, 0xce, 0x82, 0xf3, 0xc5, 0x33, 0x60, 0xaa, 0x2f, 0xa6, 0x15, 0x20, 0x52, 0x40, 0x37, 0x6b, 0x78, 0xcb, 0x52, 0xda, 0x7f, 0x69, 0x7b, 0xa6, 0x39, 0x92, 0xa9, 0xa6, 0xeb, 0x16, 0x2f, 0xa6, 0x7c, 0x96, 0xd5, 0x72, 0x83, 0x8d, 0x51, 0x44, 0x56, 0x93, 0x2a, 0x5c, 0xc9, 0x38, 0x45, 0x3c, 0x83, 0x14, 0xf1, 0x55, 0xa4, 0x88, 0xd7, 0xf5, 0x53, 0xdd, 0xde, 0xa9, 0xfc, 0x30, 0x47, 0xa1, 0xfb, 0xc5, 0x64, 0x6b, 0x9d, 0x9d, 0x72, 0xd3, 0x09, 0xb7, 0x9d, 0xe8, 0x03, 0xf9, 0xfa, 0x9d, 0x70, 0xbb, 0x0b, 0x1c, 0x44, 0xb9, 0xfe, 0xfc, 0x09, 0x4a, 0x10, 0x0e, 0xec, 0x4d, 0xcd, 0x81, 0xd5, 0xc4, 0x31, 0xf6, 0x77, 0x2f, 0x32, 0xb8, 0x80, 0xdf, 0x7d, 0xc9, 0x28, 0xac, 0xee, 0xe5, 0xe7, 0xa9, 0x2e, 0x0d, 0xc9, 0xc0, 0x44, 0x7f, 0x0f, 0xac, 0x76, 0x91, 0xbf, 0x65, 0x94, 0x28, 0xaa, 0x36, 0xf2, 0xf1, 0x4f, 0xc6, 0x99, 0x28, 0xae, 0x6a, 0x23, 0x3f, 0x6f, 0x45, 0xcc, 0x04, 0x0c, 0x33, 0xf3, 0x30, 0xc6, 0x99, 0xae, 0x71, 0x65, 0x90, 0x67, 0x63, 0x16, 0xc2, 0x6e, 0x12, 0x50, 0x79, 0x3b, 0xbb, 0x17, 0xd5, 0x6f, 0xea, 0x56, 0x4a, 0x51, 0x27, 0x4b, 0xe9, 0xa6, 0x54, 0x4a, 0xfe, 0xea, 0x64, 0xfe, 0xdd, 0x69, 0xf9, 0xab, 0x95, 0xfc, 0x59, 0xd8, 0xe1, 0xad, 0xcc, 0xcb, 0xae, 0xd5, 0x55, 0x82, 0x1c, 0x80, 0xe8, 0x22, 0x6b, 0x40, 0x3e, 0x10, 0xb1, 0x17, 0x8a, 0xab, 0x58, 0x5d, 0xd9, 0x1b, 0xd3, 0x40, 0x7f, 0x68, 0x3f, 0x71, 0x10, 0xa4, 0x0f, 0xa9, 0x70, 0x10, 0x6b, 0x12, 0xf6, 0x94, 0x81, 0x2c, 0x71, 0x98, 0x10, 0x6f, 0xcc, 0xcc, 0xee, 0xbc, 0x58, 0x8a, 0x3c, 0x04, 0xd2, 0x7c, 0xb2, 0xa2, 0x50, 0xcc, 0x64, 0x93, 0x4e, 0x86, 0x3d, 0x93, 0xed, 0x4b, 0xc0, 0x1a, 0x74, 0x40, 0x11, 0x4a, 0x2f, 0xec, 0xde, 0x93, 0x9c, 0x23, 0xe9, 0xa3, 0x6a, 0xfe, 0x3e, 0xe2, 0x4f, 0xc6, 0x9a, 0x5c, 0x18, 0x02, 0x66, 0xa4, 0x0c, 0xc5, 0x60, 0x22, 0x0d, 0x78, 0x09, 0xbe, 0xcc, 0x76, 0x39, 0xd9, 0xdd, 0x8d, 0x62, 0x97, 0x1d, 0x9e, 0xaf, 0x18, 0xfc, 0x52, 0xcb, 0x74, 0xea, 0xad, 0xf8, 0x95, 0x08, 0xdd, 0x9e, 0xa6, 0x75, 0xbf, 0xd3, 0xe5, 0xc0, 0xf9, 0xb0, 0xfb, 0xc2, 0x17, 0x74, 0x33, 0x29, 0xa1, 0xb1, 0x8f, 0x12, 0x26, 0x8e, 0xa1, 0x95, 0xec, 0x85, 0xe0, 0x6c, 0xc1, 0x71, 0xf5, 0x20, 0x45, 0x72, 0xa7, 0x5b, 0x08, 0x71, 0x30, 0x79, 0xd1, 0xee, 0xb7, 0x79, 0xe6, 0x0e, 0x5e, 0x78, 0xcb, 0xa9, 0x7e, 0xac, 0x5b, 0xd4, 0xfa, 0xe3, 0x4e, 0x0f, 0xe2, 0xeb, 0x13, 0xc8, 0xc5, 0x19, 0x58, 0x2b, 0x56, 0xed, 0x5a, 0x1f, 0x2e, 0x7b, 0xe9, 0xad, 0xb0, 0x25, 0x57, 0xdb, 0xa2, 0xca, 0x4d, 0xdc, 0xf1, 0x1e, 0xe7, 0x9a, 0x20, 0xaa, 0x77, 0xac, 0x6e, 0x50, 0x89, 0x2a, 0xe2, 0x18, 0xab, 0x1e, 0xf9, 0xcd, 0xaf, 0xa4, 0x7c, 0x1e, 0x47, 0x52, 0x5d, 0x1f, 0xf6, 0xb5, 0x6b, 0x42, 0x20, 0x6a, 0xc7, 0x18, 0xfe, 0xfd, 0x9b, 0x01, 0x29, 0x17, 0x73, 0xc9, 0x4e, 0x58, 0x8b, 0x72, 0x4d, 0xa0, 0x35, 0xfb, 0x37, 0xaf, 0xb1, 0xbb, 0x3e, 0x09, 0x0b, 0x1b, 0x08, 0xa9, 0x84, 0x9f, 0x65, 0x72, 0xa7, 0x51, 0xd2, 0x63, 0x1a, 0xed, 0x4e, 0xf2, 0x23, 0x66, 0xca, 0xde, 0x03, 0xd7, 0xbc, 0xf4, 0x56, 0xc4, 0x10, 0x7a, 0xc0, 0x5e, 0xbb, 0x8b, 0xdd, 0xe0, 0x90, 0x17, 0xf0, 0x1b, 0x1c, 0xcc, 0xa7, 0xb4, 0x87, 0x7c, 0x4a, 0x93, 0x4c, 0x9d, 0x3b, 0x5e, 0x91, 0xa9, 0x51, 0x4e, 0x1e, 0x77, 0x28, 0x25, 0x53, 0x6b, 0x4c, 0x09, 0x99, 0x5a, 0x53, 0x9b, 0x90, 0xa9, 0x27, 0xae, 0x50, 0x64, 0xea, 0x6b, 0x22, 0xa0, 0xcb, 0x69, 0x84, 0x71, 0xaf, 0xb3, 0xaf, 0x4c, 0x8c, 0xb9, 0x47, 0x02, 0xc3, 0xb9, 0x51, 0x36, 0xb3, 0x49, 0xb2, 0xdc, 0xbf, 0x8b, 0x4b, 0x98, 0x3b, 0xb8, 0x94, 0xad, 0xde, 0x96, 0xe0, 0x76, 0x2d, 0xe5, 0x49, 0x39, 0x9b, 0x49, 0xa0, 0x5c, 0x7a, 0xb1, 0xfa, 0xde, 0x1b, 0xc0, 0xf1, 0x09, 0xa4, 0xac, 0x9d, 0x90, 0x35, 0x54, 0x01, 0x47, 0x7b, 0x5a, 0x09, 0xf8, 0x57, 0xc1, 0x1c, 0x84, 0xf9, 0xa0, 0x5b, 0xf4, 0xcd, 0x40, 0xec, 0x91, 0x99, 0x35, 0x49, 0x4b, 0xab, 0x5c, 0xc9, 0xec, 0x40, 0x4d, 0x42, 0xd9, 0x5f, 0xe3, 0x9e, 0x8e, 0x12, 0xce, 0x00, 0xed, 0x89, 0xcc, 0xe8, 0x8c, 0xab, 0x41, 0x2d, 0xd7, 0xfa, 0x9e, 0x93, 0xeb, 0xd8, 0xbb, 0x20, 0x2f, 0x88, 0x5d, 0x38, 0x14, 0x9f, 0xe1, 0x95, 0x25, 0xf6, 0x9d, 0x21, 0x37, 0x44, 0xf5, 0x33, 0x3c, 0x72, 0x13, 0xfb, 0x1a, 0x27, 0xb7, 0xcc, 0x08, 0xc8, 0x51, 0xf6, 0x9e, 0x2d, 0x77, 0xc4, 0x04, 0x84, 0x5b, 0xc1, 0xbe, 0xbe, 0x21, 0x77, 0xe2, 0x7b, 0x9c, 0xbd, 0x5f, 0x2f, 0xaf, 0xc1, 0xf7, 0x1e, 0x7a, 0x37, 0x66, 0xc8, 0xeb, 0x67, 0x74, 0x12, 0x47, 0x23, 0xf7, 0xb1, 0x6f, 0xad, 0xbc, 0x51, 0xf9, 0xde, 0xcc, 0xbe, 0x05, 0xf9, 0x31, 0x63, 0x31, 0x68, 0xb0, 0x84, 0x27, 0xd8, 0xb7, 0x5e, 0x7e, 0x0a, 0xd3, 0x6e, 0xc1, 0xfa, 0x50, 0x1f, 0x30, 0xcc, 0x0c, 0xb4, 0xca, 0xb5, 0x4c, 0x0f, 0xee, 0xa1, 0xaa, 0xdd, 0xc3, 0xaf, 0xd0, 0x26, 0xc3, 0x54, 0xe4, 0x38, 0xd8, 0xfe, 0x81, 0xd3, 0x46, 0x92, 0x3a, 0xb6, 0xcd, 0xe2, 0x89, 0x42, 0x4c, 0x78, 0xe4, 0x4d, 0x85, 0xf3, 0x0d, 0xb2, 0xf0, 0x32, 0x6a, 0x75, 0x34, 0xc1, 0x0d, 0x57, 0x5b, 0xca, 0xaf, 0x23, 0x4e, 0xb6, 0x08, 0xb9, 0x91, 0xbb, 0xad, 0xe5, 0x3e, 0x9c, 0x23, 0xd1, 0x8a, 0x32, 0x88, 0x8d, 0xba, 0x99, 0x83, 0x9c, 0x62, 0x31, 0xca, 0xca, 0x45, 0x69, 0x73, 0x80, 0xe9, 0x28, 0xef, 0x9a, 0x54, 0xb5, 0xfb, 0x3c, 0xdc, 0x46, 0x67, 0x02, 0x6b, 0x68, 0xbf, 0xc2, 0x8a, 0x39, 0xe3, 0x8c, 0x49, 0xee, 0x59, 0x38, 0x00, 0x6b, 0xaf, 0x82, 0x6b, 0xe4, 0xb3, 0x51, 0x15, 0xb6, 0xe5, 0x1c, 0xfb, 0x32, 0xcb, 0xe7, 0x67, 0x94, 0xca, 0x17, 0x99, 0x57, 0x56, 0xa5, 0x2d, 0xf3, 0x3e, 0x95, 0xcf, 0xba, 0x32, 0x59, 0x6b, 0x1e, 0x2b, 0x1d, 0x1c, 0x3a, 0xc7, 0xa4, 0xe4, 0x1c, 0xa6, 0x27, 0xbc, 0x5e, 0xf4, 0x14, 0x23, 0xdf, 0x8c, 0xd2, 0x82, 0x36, 0x01, 0xed, 0x02, 0xb2, 0x6f, 0x71, 0x5a, 0x67, 0x29, 0xa9, 0x7a, 0x28, 0x99, 0xff, 0x84, 0xab, 0xe5, 0x9f, 0xc8, 0xbb, 0x6a, 0x03, 0xf2, 0xe6, 0xcf, 0x73, 0x7f, 0xc7, 0x42, 0x1e, 0xbe, 0xb7, 0xe1, 0xaf, 0x59, 0xf4, 0xa0, 0x34, 0xa9, 0x4d, 0xe6, 0x74, 0xcd, 0xd7, 0xce, 0x69, 0x3b, 0xeb, 0x6d, 0x80, 0x23, 0x05, 0xda, 0x8f, 0xe7, 0xe2, 0xb7, 0x0f, 0x7f, 0x73, 0x68, 0x97, 0x84, 0x7a, 0x58, 0x44, 0x4e, 0xd2, 0x52, 0x9a, 0xd8, 0x2b, 0xc9, 0x1b, 0xe7, 0xf7, 0xba, 0x85, 0x03, 0x5e, 0xea, 0xa1, 0x49, 0x0e, 0xb8, 0x2d, 0xb0, 0xb6, 0xaf, 0x74, 0xbe, 0xa7, 0xcf, 0x7f, 0x9b, 0x07, 0x25, 0x57, 0xfa, 0x8e, 0x87, 0x68, 0xb7, 0x4d, 0xeb, 0xd6, 0xf6, 0x95, 0xf4, 0x95, 0xe0, 0x9b, 0x6e, 0x53, 0x59, 0xa8, 0xe4, 0xb6, 0x12, 0xd0, 0x78, 0xcf, 0x80, 0x33, 0x2a, 0xf4, 0x95, 0xd1, 0x9e, 0x05, 0x86, 0x2f, 0xb8, 0xad, 0x0c, 0xa4, 0x59, 0x65, 0xa0, 0xbb, 0xad, 0x1c, 0xea, 0x67, 0x95, 0x83, 0xde, 0x2d, 0xf4, 0xf9, 0xd9, 0x0e, 0x8a, 0xb6, 0xaf, 0x1c, 0xe3, 0xef, 0x29, 0x39, 0x03, 0x8f, 0xde, 0x52, 0x01, 0x59, 0xa5, 0x67, 0x60, 0xcd, 0x2d, 0x41, 0xb0, 0xe0, 0x77, 0x9d, 0xed, 0xfe, 0x5b, 0x02, 0x50, 0xe7, 0x4c, 0x60, 0xc5, 0x5c, 0xc4, 0x0a, 0x35, 0x62, 0x45, 0x1b, 0xc7, 0x0a, 0x3b, 0x85, 0xcf, 0x65, 0x58, 0x91, 0xa0, 0x97, 0xd5, 0x52, 0x65, 0xb2, 0xc5, 0x33, 0xe0, 0x79, 0x6b, 0x09, 0xed, 0x86, 0xa6, 0x8d, 0xfe, 0x84, 0xaa, 0xdd, 0xff, 0xf1, 0xc5, 0xe5, 0x5b, 0xca, 0xf6, 0x37, 0x32, 0xd3, 0xee, 0x86, 0xd5, 0xf3, 0x7d, 0xa6, 0x09, 0x8f, 0x27, 0xf6, 0x99, 0x98, 0x77, 0xe7, 0x21, 0xcd, 0x01, 0xa4, 0x3e, 0xa4, 0x8f, 0x30, 0x19, 0x29, 0x79, 0xca, 0x6e, 0x5d, 0x3d, 0x5b, 0x7d, 0xd8, 0x7c, 0x9f, 0xd0, 0x9c, 0x26, 0xdd, 0x96, 0xa7, 0x9d, 0x7e, 0x87, 0xc4, 0x72, 0xab, 0x9d, 0xe9, 0x79, 0x21, 0xda, 0xcf, 0x23, 0xed, 0xc4, 0x5c, 0x30, 0xda, 0x72, 0xc1, 0x14, 0x6c, 0xc3, 0x95, 0xbb, 0xca, 0x87, 0x7f, 0xc5, 0x5c, 0x30, 0xcc, 0xf4, 0x80, 0xc9, 0xa2, 0xde, 0x10, 0x7f, 0xf7, 0x79, 0xb0, 0xe0, 0x2f, 0x77, 0x66, 0x1b, 0x72, 0x83, 0x9a, 0x84, 0x1e, 0xc4, 0x97, 0x34, 0x5f, 0x71, 0x75, 0x97, 0xcf, 0x52, 0x89, 0x63, 0xe4, 0x3c, 0xc4, 0xc7, 0xe4, 0x5e, 0x29, 0xed, 0x32, 0x90, 0xae, 0xaf, 0x88, 0x23, 0x7d, 0xb2, 0x6d, 0x12, 0xbb, 0xc9, 0x80, 0x3c, 0x86, 0x81, 0x6c, 0x6a, 0x80, 0x10, 0xe2, 0x36, 0x2a, 0x55, 0x4f, 0x48, 0xd9, 0xf8, 0x66, 0xc1, 0x59, 0x12, 0x6e, 0x05, 0x15, 0xe9, 0xfe, 0xe6, 0x61, 0xe8, 0x3a, 0x29, 0x9f, 0xef, 0x18, 0xf0, 0x73, 0x80, 0x7c, 0x3a, 0xbd, 0xd1, 0xe3, 0x2a, 0x8f, 0xf5, 0xa6, 0x55, 0xfe, 0xcb, 0x8b, 0x97, 0x6d, 0x61, 0xbe, 0xe8, 0xc3, 0x9e, 0xd7, 0xb8, 0x8c, 0x57, 0x48, 0xb5, 0xf7, 0x72, 0xa9, 0xe8, 0x56, 0x31, 0xce, 0x61, 0x65, 0x27, 0xc7, 0xba, 0x54, 0xa7, 0xb1, 0x16, 0x13, 0xaf, 0x20, 0xd1, 0x6e, 0xa3, 0x5e, 0xf4, 0x55, 0xf5, 0x59, 0x43, 0xfc, 0xf6, 0x70, 0xf8, 0x33, 0xde, 0xbf, 0x2a, 0xed, 0xe5, 0xfb, 0x57, 0xf8, 0x0c, 0x79, 0x5f, 0x1b, 0x2f, 0x3b, 0x55, 0xea, 0x7f, 0xd4, 0x5a, 0x3c, 0xca, 0x0d, 0x75, 0xbf, 0xdb, 0x47, 0x9e, 0x2e, 0xfb, 0x7b, 0x16, 0x15, 0x95, 0x9e, 0x04, 0xa1, 0x7f, 0x5d, 0xbd, 0xde, 0xb2, 0x18, 0x0c, 0xbe, 0x59, 0x3d, 0x20, 0xd9, 0x31, 0xc6, 0x78, 0xed, 0x76, 0x1d, 0x76, 0x35, 0xbe, 0x99, 0x92, 0x6f, 0x66, 0xfe, 0x46, 0x70, 0xd7, 0xbd, 0xb8, 0x05, 0x7a, 0xe0, 0x0a, 0x65, 0xc7, 0xa8, 0xb5, 0x74, 0x9a, 0x86, 0x3c, 0x60, 0xb2, 0xec, 0x73, 0x47, 0xad, 0xc0, 0xf6, 0x3e, 0xd9, 0xfe, 0xe8, 0x8b, 0x6f, 0x2e, 0x02, 0xd8, 0xcd, 0x4e, 0xd4, 0x80, 0xf3, 0x43, 0xec, 0x9e, 0x81, 0xd1, 0xa9, 0x0f, 0xdd, 0x47, 0xf5, 0xaa, 0x89, 0xf7, 0xad, 0x43, 0xfa, 0x14, 0xdd, 0x02, 0x74, 0xe2, 0xe2, 0x28, 0xc6, 0xa5, 0x6b, 0x33, 0x59, 0xc1, 0x61, 0x50, 0xa6, 0x4b, 0x21, 0x92, 0x71, 0x66, 0xe2, 0x87, 0xae, 0x12, 0x6f, 0xb8, 0x4a, 0x9c, 0xf1, 0xda, 0x67, 0x05, 0xf5, 0x16, 0xa0, 0x12, 0xf0, 0x4d, 0xc3, 0xde, 0xcc, 0xf8, 0x76, 0x03, 0x7b, 0x33, 0x5c, 0xbb, 0x07, 0xc4, 0x2d, 0xec, 0xe6, 0xf7, 0x65, 0xdb, 0xbd, 0xd2, 0xea, 0x73, 0x65, 0xa5, 0xda, 0xfb, 0x27, 0x73, 0x72, 0x16, 0x48, 0x97, 0x85, 0x0f, 0x22, 0x86, 0x18, 0x53, 0xf0, 0x9f, 0xe7, 0x27, 0xe1, 0xdd, 0x97, 0x85, 0x9f, 0xb4, 0x53, 0xb9, 0xc7, 0x72, 0x69, 0xdc, 0xae, 0xe7, 0xc1, 0x18, 0xd6, 0xed, 0x7c, 0x9e, 0x68, 0xe2, 0xb8, 0x8b, 0x7c, 0x4e, 0x7e, 0x56, 0x46, 0xf7, 0xbc, 0xc7, 0x9d, 0xe6, 0xbb, 0xdc, 0xe3, 0x4e, 0xf0, 0xf5, 0x77, 0xdc, 0xfb, 0x63, 0x77, 0xb9, 0x11, 0xe6, 0x75, 0x45, 0xdb, 0x12, 0x67, 0x61, 0x3e, 0xed, 0x14, 0x8e, 0x81, 0x08, 0x3e, 0x4f, 0x37, 0x35, 0xc7, 0x3d, 0xc1, 0xf4, 0xf1, 0x7d, 0x2d, 0xd9, 0x6e, 0x1f, 0x9d, 0x30, 0xb8, 0xf4, 0x89, 0x9a, 0x9f, 0x27, 0x0b, 0x03, 0x6c, 0x3f, 0x9c, 0x9d, 0xdb, 0x1e, 0x93, 0x40, 0xd3, 0x61, 0x29, 0xa7, 0x5d, 0x6e, 0x9a, 0x75, 0x9d, 0x50, 0x8c, 0x70, 0x74, 0xd3, 0x16, 0xe7, 0x52, 0xe6, 0x7b, 0xe4, 0xe1, 0xd2, 0x52, 0xbc, 0x18, 0x32, 0xe7, 0x4c, 0x07, 0x83, 0xce, 0x4e, 0xb7, 0x9f, 0xc3, 0x06, 0x5f, 0x33, 0x14, 0xe0, 0xaf, 0x10, 0xeb, 0x52, 0x54, 0x5c, 0x15, 0xf8, 0x55, 0x10, 0xbf, 0xc3, 0x00, 0xe7, 0xf1, 0x59, 0x18, 0x86, 0x71, 0xec, 0x04, 0xfc, 0xc5, 0x77, 0xda, 0x00, 0x8e, 0x5a, 0x75, 0x97, 0x48, 0x38, 0x8a, 0x1c, 0x76, 0xa0, 0xbb, 0xff, 0xc1, 0x56, 0x80, 0x9d, 0xb4, 0x3f, 0xf0, 0xe2, 0xaf, 0x10, 0x76, 0x9b, 0x02, 0xeb, 0xbc, 0xf4, 0xb4, 0x19, 0x61, 0x7f, 0x8c, 0xb0, 0xeb, 0x90, 0x3b, 0xcf, 0xb5, 0x39, 0xc0, 0xc2, 0x2c, 0xf3, 0xb1, 0x1a, 0xb0, 0x9d, 0xd9, 0x3e, 0x7e, 0x82, 0xf4, 0xd8, 0x19, 0x94, 0x12, 0x95, 0xdd, 0x59, 0x5c, 0x3d, 0x27, 0xf3, 0x3d, 0x07, 0x4b, 0xf9, 0x86, 0x33, 0xa4, 0xef, 0xc7, 0xf7, 0x66, 0xc9, 0xef, 0x06, 0x71, 0x6e, 0x89, 0xbe, 0xf8, 0xf4, 0x0b, 0xb6, 0x2b, 0xd3, 0x0c, 0x93, 0xc1, 0x31, 0x8d, 0x6e, 0x06, 0xe7, 0x12, 0xd7, 0xd7, 0x8e, 0x5c, 0x9f, 0x0b, 0x76, 0xac, 0x6e, 0x51, 0xd9, 0x54, 0xc4, 0xc9, 0x05, 0x5a, 0xc8, 0x6b, 0xcc, 0x67, 0xdb, 0x98, 0x1f, 0x2f, 0xd0, 0x96, 0xb1, 0xf2, 0xb1, 0xf5, 0xda, 0x62, 0xf2, 0x45, 0x1c, 0x78, 0x6d, 0xe7, 0x83, 0x6d, 0xb8, 0x8c, 0x14, 0xd1, 0xf9, 0xf3, 0x2f, 0xed, 0xea, 0x9a, 0x35, 0xd4, 0x62, 0xab, 0xa2, 0x3b, 0xc0, 0x34, 0x07, 0x7c, 0x54, 0xa7, 0x03, 0x6b, 0xa8, 0xc5, 0x5a, 0x5d, 0xa2, 0xc5, 0x19, 0x23, 0x76, 0x1d, 0x83, 0x4d, 0x6b, 0x31, 0xd1, 0x0c, 0x06, 0x89, 0xed, 0xcd, 0xf8, 0xc0, 0xe9, 0xc0, 0x7c, 0xb0, 0xcd, 0xbc, 0x95, 0xae, 0x8c, 0x7f, 0x7c, 0x2d, 0xad, 0x7d, 0x8e, 0x2b, 0xb4, 0x2f, 0x77, 0x54, 0xfb, 0xb2, 0x68, 0xc7, 0x89, 0xc6, 0x7b, 0xcf, 0x56, 0x70, 0x84, 0x75, 0x3b, 0xb6, 0x42, 0x6e, 0x04, 0x32, 0xd6, 0x58, 0x1c, 0xcc, 0x93, 0x97, 0x45, 0xf4, 0xee, 0xe8, 0xc2, 0xd6, 0xfa, 0xfa, 0x7b, 0xf0, 0x2f, 0xca, 0x16, 0x3b, 0xba, 0x5a, 0x54, 0x16, 0x55, 0x3f, 0xfd, 0x05, 0x97, 0x90, 0x68, 0xf9, 0xa7, 0xdb, 0x11, 0x47, 0xfc, 0xef, 0xbd, 0x4e, 0x74, 0x38, 0x4c, 0xf6, 0xfb, 0x90, 0x83, 0xce, 0xf0, 0xd0, 0x2d, 0xb3, 0xf0, 0x64, 0xc4, 0x3c, 0x3d, 0xf3, 0xe6, 0xac, 0x89, 0xd6, 0x49, 0xba, 0x98, 0x0a, 0xdf, 0xb4, 0x51, 0xe7, 0x81, 0xad, 0x50, 0x8c, 0x25, 0xd3, 0x3d, 0x54, 0x0f, 0xf1, 0xf3, 0x2f, 0x0e, 0x20, 0x36, 0x65, 0x93, 0x3c, 0x43, 0x27, 0x83, 0x3f, 0x1b, 0x68, 0xd0, 0xe2, 0x9c, 0xbe, 0x9f, 0x76, 0x4d, 0x49, 0xae, 0x60, 0x7e, 0x8d, 0x34, 0x2e, 0x21, 0xe1, 0xf1, 0xaa, 0xae, 0x37, 0x77, 0x0f, 0x71, 0x66, 0x5a, 0x5c, 0x2c, 0x7e, 0x24, 0x2b, 0xa1, 0xf9, 0xd5, 0xbd, 0xfd, 0x5b, 0x69, 0xc6, 0x68, 0x5e, 0x47, 0x78, 0x5a, 0x85, 0xfe, 0x68, 0x06, 0xda, 0xd3, 0x42, 0xde, 0x32, 0x4f, 0xae, 0xcc, 0xc5, 0xb5, 0xc8, 0x3a, 0x6e, 0x23, 0xf2, 0x2f, 0x9a, 0xa7, 0xd9, 0x2a, 0xa3, 0x97, 0xcf, 0xd2, 0x7e, 0x15, 0x72, 0x89, 0x9e, 0xd4, 0x7e, 0x55, 0xfa, 0x2a, 0x13, 0xec, 0x6e, 0x67, 0x1e, 0xee, 0x13, 0x7d, 0x75, 0xa6, 0x5e, 0x32, 0xfa, 0xbb, 0xd3, 0x43, 0xfe, 0x43, 0x43, 0x3d, 0xf7, 0x38, 0xce, 0x53, 0x71, 0x5c, 0x8b, 0xca, 0xcf, 0x76, 0xcb, 0x5e, 0x1c, 0x68, 0x71, 0x27, 0xe6, 0xce, 0xb9, 0x27, 0x12, 0xeb, 0x19, 0xf2, 0x18, 0x9e, 0x34, 0x1d, 0xd6, 0xb4, 0x52, 0x90, 0xbe, 0x66, 0xa7, 0xed, 0x0e, 0x60, 0xce, 0xb4, 0x7e, 0x2b, 0x3b, 0x04, 0x4f, 0xf1, 0xd9, 0xc6, 0x77, 0xb1, 0x91, 0x0a, 0x3b, 0xf9, 0x8e, 0x01, 0x3f, 0x4f, 0xcd, 0x27, 0xdc, 0xda, 0x5b, 0x48, 0xba, 0x0a, 0xfb, 0x08, 0xc3, 0xb1, 0x25, 0xd5, 0xc1, 0x1f, 0xb7, 0x7b, 0x5c, 0xe3, 0xc4, 0x0c, 0xa6, 0xe3, 0x4e, 0xfb, 0xd9, 0xbe, 0x9a, 0x1e, 0xd7, 0x4c, 0xb9, 0xda, 0xe2, 0xa7, 0xf3, 0x53, 0xe4, 0xa2, 0x02, 0x08, 0xe5, 0x67, 0x31, 0xad, 0xb2, 0xdf, 0xae, 0x3b, 0x1a, 0x17, 0x4b, 0x10, 0x22, 0x23, 0xd0, 0x8c, 0xb1, 0x2c, 0x46, 0x9a, 0xf3, 0xb7, 0xa5, 0xe7, 0x31, 0x0e, 0xdd, 0xfb, 0x71, 0xc6, 0xbd, 0x80, 0x65, 0xa6, 0x1c, 0x70, 0x2e, 0x6d, 0xa2, 0xd6, 0x74, 0x90, 0xd4, 0xc4, 0x4e, 0x69, 0x7b, 0xfe, 0x72, 0xbf, 0x28, 0x67, 0x32, 0x83, 0x25, 0x27, 0x09, 0x1f, 0xc2, 0x44, 0x33, 0x68, 0x37, 0x93, 0xf6, 0x4d, 0x8d, 0x35, 0x71, 0x5c, 0xe7, 0x40, 0xf5, 0x01, 0xf7, 0xc1, 0x97, 0xa4, 0xb8, 0xcb, 0x25, 0xab, 0xf7, 0x24, 0xd4, 0x31, 0x5c, 0xda, 0x4b, 0x9e, 0xa0, 0xfb, 0x37, 0xe0, 0x8a, 0xba, 0x6b, 0x34, 0xd4, 0xa9, 0xc7, 0x12, 0xa3, 0xf3, 0xb9, 0x8a, 0x3f, 0x4f, 0x12, 0xb7, 0x21, 0x62, 0x59, 0x0f, 0xa6, 0xee, 0x56, 0x20, 0x55, 0xb3, 0x59, 0xb1, 0x7f, 0xc5, 0x19, 0x30, 0x19, 0x71, 0xc8, 0x61, 0x99, 0x01, 0x96, 0xed, 0xcf, 0x42, 0x6e, 0x8b, 0xde, 0x32, 0xde, 0xe2, 0xb3, 0x81, 0xa8, 0x93, 0x34, 0x16, 0x95, 0x4d, 0x27, 0x7a, 0x3b, 0xc0, 0x0e, 0x9b, 0x57, 0x3b, 0x35, 0xfe, 0xfb, 0x24, 0x5f, 0x70, 0x0b, 0xf2, 0x9e, 0x8e, 0xed, 0x3d, 0x61, 0xf3, 0xcf, 0xf6, 0x87, 0xf5, 0x0e, 0x4d, 0x8b, 0xca, 0xa1, 0x3d, 0xbc, 0x56, 0xca, 0x71, 0x60, 0xeb, 0x1e, 0x5d, 0x8d, 0x6f, 0x14, 0xae, 0x39, 0x1c, 0x97, 0xf4, 0x87, 0xc9, 0xaf, 0xb0, 0x1e, 0xbf, 0xb4, 0xfd, 0xcf, 0xe0, 0x9c, 0xc9, 0x0c, 0x75, 0xff, 0x6c, 0x7f, 0x44, 0xa7, 0xd8, 0x29, 0xd8, 0x85, 0x33, 0x54, 0x8d, 0xeb, 0x3c, 0x3b, 0xd5, 0xf8, 0x8f, 0x42, 0x1b, 0xad, 0xcb, 0xd4, 0x32, 0x66, 0xd7, 0x9a, 0xf9, 0x21, 0x03, 0xf8, 0x80, 0xdd, 0x14, 0x78, 0x3a, 0xc9, 0xa3, 0xad, 0xb4, 0x93, 0x2c, 0xbb, 0xff, 0xc6, 0x4e, 0xd0, 0xc8, 0xbb, 0x90, 0x3b, 0xde, 0xed, 0x9b, 0x29, 0xbf, 0x8c, 0xbf, 0x57, 0x58, 0xc8, 0xbf, 0xa4, 0xdb, 0x0a, 0xc0, 0x51, 0x1c, 0x40, 0x49, 0x65, 0x1f, 0xcd, 0x1a, 0xfb, 0x2e, 0x8c, 0xcf, 0x90, 0xdf, 0xf7, 0x7e, 0x2a, 0xf7, 0xe3, 0xf8, 0x1d, 0xff, 0x56, 0x27, 0x4c, 0x92, 0x3f, 0xc6, 0xbf, 0x25, 0xf2, 0x69, 0x1c, 0x8d, 0xda, 0x19, 0x15, 0xf2, 0x27, 0x98, 0x5b, 0xed, 0x8c, 0x12, 0x79, 0x01, 0x3e, 0x25, 0xfc, 0x35, 0xb1, 0xd8, 0x16, 0x7c, 0x8b, 0xe1, 0x6f, 0x39, 0xfe, 0x56, 0x62, 0x88, 0x5e, 0x5e, 0xe5, 0x6b, 0x95, 0xdb, 0xbe, 0xe5, 0x93, 0xa3, 0xc8, 0xc9, 0x1a, 0xd3, 0x6c, 0x31, 0xfb, 0x31, 0x9f, 0x43, 0x29, 0xab, 0x04, 0x54, 0x52, 0xca, 0x2e, 0x81, 0x22, 0xf7, 0xaa, 0xc8, 0x7a, 0xf2, 0x1f, 0xf2, 0xb9, 0xdd, 0x37, 0x41, 0xab, 0xb4, 0x77, 0x77, 0x9a, 0x57, 0x73, 0xe2, 0x87, 0x51, 0xe6, 0x8f, 0x24, 0x6c, 0x9f, 0xd8, 0x49, 0xde, 0xc1, 0x34, 0xec, 0x06, 0x05, 0xc5, 0x4e, 0x2d, 0x81, 0xed, 0xf4, 0xc4, 0x31, 0xd8, 0x1e, 0xd1, 0x4e, 0xf5, 0xc1, 0x4e, 0xe6, 0xeb, 0x7b, 0x27, 0x85, 0x21, 0x0e, 0x9d, 0xfc, 0xd9, 0x29, 0xe4, 0x11, 0x3b, 0x30, 0x8f, 0x9d, 0x91, 0x36, 0xac, 0xf3, 0x59, 0x92, 0x28, 0xc6, 0xde, 0x8f, 0xc7, 0xb0, 0xf3, 0x91, 0x6a, 0xa5, 0x84, 0x99, 0xf2, 0x39, 0x17, 0x28, 0x1c, 0xf7, 0xf6, 0xaa, 0xdd, 0x9f, 0x30, 0x29, 0xcf, 0xd6, 0xc4, 0x46, 0xc1, 0x48, 0xd2, 0x91, 0x64, 0x22, 0x4f, 0xde, 0xe2, 0xdc, 0x47, 0xde, 0x4c, 0xdd, 0x40, 0xe5, 0xde, 0x20, 0x10, 0xf3, 0xcf, 0x27, 0x73, 0xad, 0xba, 0xa4, 0x35, 0xaf, 0x5f, 0xf1, 0xbc, 0xa8, 0x7c, 0xd4, 0x79, 0xd1, 0xa7, 0x0b, 0x86, 0x65, 0x33, 0xb7, 0xf8, 0x37, 0xea, 0xc4, 0xe8, 0xe9, 0x68, 0xe0, 0x72, 0x27, 0x46, 0xe7, 0x2d, 0x63, 0x4f, 0x8c, 0xae, 0x70, 0x3a, 0xa4, 0x77, 0xa9, 0x68, 0xdf, 0x8f, 0x71, 0x10, 0xcd, 0xd6, 0x2c, 0x0b, 0xf9, 0x4c, 0xae, 0xa4, 0xfd, 0xa6, 0xa4, 0x07, 0x02, 0xa2, 0xb4, 0xbb, 0xe5, 0xbd, 0xac, 0x6f, 0x71, 0xbe, 0x45, 0x52, 0x16, 0x67, 0x74, 0x2c, 0x66, 0x8b, 0x12, 0x63, 0xba, 0x24, 0xe6, 0xc1, 0x51, 0xb6, 0x14, 0x72, 0xc8, 0xbe, 0x82, 0xbc, 0x92, 0xcd, 0x65, 0xb2, 0x31, 0xa0, 0xb2, 0x4e, 0xb1, 0xb2, 0x1a, 0x60, 0x9d, 0x74, 0xa5, 0x83, 0xf2, 0x72, 0xda, 0xa5, 0x23, 0xfb, 0x4b, 0xe1, 0x0b, 0xd6, 0x7b, 0x53, 0xed, 0x64, 0xde, 0xba, 0x72, 0xd2, 0x77, 0x6a, 0x44, 0x8f, 0xf8, 0xc0, 0xd4, 0x20, 0x3f, 0x83, 0x89, 0x30, 0xdf, 0x92, 0xac, 0xf6, 0x2a, 0x6b, 0x0f, 0xb5, 0x18, 0x7f, 0x46, 0xfc, 0x99, 0xc8, 0x72, 0x04, 0xf9, 0x77, 0x17, 0x75, 0x49, 0x0b, 0xa4, 0x64, 0x47, 0xd2, 0x6a, 0xa5, 0x3d, 0x3d, 0x6c, 0x9f, 0x1d, 0xdb, 0x82, 0x6b, 0xa6, 0x29, 0xd7, 0x01, 0x66, 0xe4, 0x13, 0x74, 0x74, 0x33, 0x16, 0x36, 0x8b, 0xaa, 0xf4, 0x92, 0x98, 0x77, 0x7a, 0x23, 0xf9, 0xbf, 0xe4, 0xeb, 0x0a, 0xbf, 0xd5, 0x7f, 0x09, 0x8c, 0xf1, 0x6b, 0xc0, 0x98, 0xbe, 0x06, 0x8c, 0xf9, 0x52, 0x98, 0x69, 0x3e, 0xa4, 0x0d, 0x26, 0x5c, 0x45, 0xc9, 0x8e, 0x2e, 0x79, 0xf6, 0xa4, 0x77, 0x33, 0xfe, 0x74, 0xc1, 0xb5, 0x91, 0x6c, 0x36, 0x4e, 0x46, 0xa4, 0x0f, 0x19, 0xe9, 0x7b, 0x83, 0xc1, 0x35, 0x2c, 0xc6, 0xc8, 0x62, 0x34, 0xa3, 0x62, 0xee, 0x63, 0x31, 0x26, 0x16, 0xa3, 0x1d, 0x15, 0xf3, 0x63, 0x16, 0x63, 0x66, 0x31, 0xe3, 0x46, 0xc5, 0xac, 0x4d, 0x62, 0x82, 0x9a, 0xfc, 0x15, 0x7c, 0xb5, 0x4b, 0x29, 0x23, 0x15, 0x4a, 0x3e, 0xb1, 0x9e, 0x54, 0xf2, 0x4f, 0x85, 0x6a, 0x31, 0x74, 0xbd, 0x92, 0x77, 0x2a, 0x74, 0x1c, 0x86, 0x2e, 0xe7, 0xd6, 0x2d, 0xfc, 0xc3, 0xfc, 0xbe, 0x12, 0xcc, 0xb1, 0x05, 0xec, 0x29, 0xed, 0x0f, 0x35, 0x49, 0x6f, 0xf5, 0x26, 0xbe, 0x2b, 0x15, 0xb1, 0xf2, 0x1d, 0xab, 0x30, 0x08, 0xdb, 0xa4, 0x7b, 0xf8, 0x7e, 0x14, 0xc6, 0x3f, 0xce, 0xde, 0x26, 0x62, 0xe8, 0x26, 0x09, 0x60, 0x07, 0xe3, 0x83, 0x0b, 0x19, 0x16, 0xe4, 0x5d, 0xaa, 0xe9, 0x81, 0xb3, 0x62, 0x32, 0xdf, 0x9b, 0x44, 0x2c, 0xd4, 0xf9, 0xfe, 0x39, 0x10, 0xd3, 0xa5, 0xf5, 0x30, 0x59, 0x4c, 0x14, 0xe9, 0x16, 0x7d, 0x94, 0x73, 0xd3, 0x42, 0x58, 0xb9, 0x1d, 0x7d, 0xcf, 0xa5, 0xdc, 0xb4, 0x10, 0x54, 0x60, 0x7c, 0x0a, 0x4c, 0xd1, 0x65, 0x60, 0x6c, 0x0a, 0xcc, 0x64, 0x05, 0x26, 0xfb, 0x32, 0x30, 0x2a, 0x0c, 0x63, 0x54, 0x9c, 0x51, 0x70, 0x13, 0xa3, 0xdf, 0x2f, 0xa7, 0xe8, 0x37, 0xd6, 0xd8, 0x29, 0x3a, 0xd5, 0x4e, 0xd6, 0xf6, 0xa1, 0x7a, 0xb1, 0xe4, 0xac, 0xe0, 0x24, 0x6b, 0x0b, 0x2f, 0xbf, 0xf5, 0xee, 0x40, 0x34, 0x65, 0x4b, 0xa4, 0xaf, 0x6e, 0x9b, 0xda, 0x49, 0xed, 0xa7, 0xdd, 0xd0, 0x31, 0x34, 0x72, 0x89, 0x42, 0xfd, 0xa4, 0xa8, 0x29, 0x1d, 0xcb, 0x58, 0x6f, 0x90, 0xf7, 0x02, 0xa2, 0xa0, 0x3b, 0x2f, 0xc1, 0xf5, 0x3c, 0x07, 0xc5, 0xb4, 0x32, 0xab, 0x20, 0x33, 0xd3, 0xad, 0x82, 0x50, 0x8a, 0x69, 0x4d, 0xb0, 0x13, 0x8c, 0x74, 0x13, 0x3a, 0xdd, 0x32, 0xe6, 0x25, 0x65, 0x23, 0x45, 0x63, 0x33, 0x33, 0x67, 0x17, 0xa7, 0x68, 0x4b, 0x14, 0x8a, 0x56, 0x79, 0xc9, 0x09, 0x38, 0x5c, 0x42, 0xcd, 0xb6, 0x46, 0x75, 0x97, 0xa1, 0x66, 0x43, 0xda, 0x03, 0x97, 0xbb, 0xe7, 0xc6, 0x2c, 0x15, 0x1b, 0x6d, 0xcd, 0x60, 0x46, 0xaa, 0x65, 0x15, 0x67, 0xa8, 0x9d, 0x64, 0xf9, 0x53, 0xa4, 0x13, 0x58, 0xd1, 0x7b, 0x46, 0x70, 0x8e, 0xb6, 0xfc, 0x69, 0xa1, 0xf8, 0xad, 0x60, 0x5d, 0x64, 0xdd, 0xb0, 0x15, 0xc4, 0x5b, 0xbc, 0x6a, 0x27, 0xc1, 0x44, 0x41, 0xca, 0x2c, 0xf9, 0xa3, 0x0e, 0xde, 0x3d, 0x0d, 0xa2, 0xf1, 0x94, 0xe0, 0x0c, 0xc5, 0x91, 0x27, 0xfd, 0x0c, 0x57, 0x8b, 0x67, 0xd5, 0x4e, 0xc5, 0xbf, 0x62, 0xd2, 0xaa, 0x51, 0xca, 0xa7, 0xb5, 0x8d, 0x6e, 0xc3, 0xd1, 0x29, 0x47, 0x13, 0x6c, 0xaa, 0x40, 0xca, 0x25, 0x89, 0xcc, 0x36, 0xb2, 0x39, 0x88, 0xa9, 0x22, 0x59, 0xe9, 0x56, 0x91, 0x90, 0xe6, 0x6d, 0xac, 0xeb, 0xb5, 0xfa, 0xac, 0x59, 0xe1, 0x63, 0xdc, 0x8e, 0xca, 0x1d, 0x9f, 0xcb, 0x2b, 0x68, 0x3f, 0x1a, 0xf3, 0xd8, 0x95, 0xb2, 0x98, 0x43, 0xfb, 0xa9, 0xb0, 0x4e, 0x1c, 0xe5, 0x27, 0x87, 0x8d, 0x55, 0x03, 0x1b, 0xf7, 0x83, 0x51, 0xd9, 0x12, 0x1c, 0xed, 0x21, 0x26, 0x5c, 0xc4, 0x3d, 0x13, 0xed, 0xad, 0x47, 0x0a, 0xb8, 0xae, 0xae, 0x37, 0x32, 0x69, 0x1a, 0xdd, 0x9c, 0x66, 0xd6, 0xfd, 0xd3, 0x6a, 0x5d, 0xc8, 0x6d, 0xf3, 0xa6, 0x85, 0xcc, 0xa1, 0xef, 0x34, 0x2b, 0x2d, 0x2d, 0xec, 0xbb, 0x24, 0x65, 0xa1, 0x86, 0xbe, 0x6d, 0x13, 0x98, 0x87, 0xca, 0x4d, 0x62, 0x09, 0xae, 0xa5, 0xec, 0xd6, 0xbb, 0xa8, 0xae, 0x8b, 0x8b, 0xf1, 0xa0, 0x8f, 0x59, 0xef, 0xd2, 0xc4, 0x67, 0xa7, 0xac, 0x77, 0xe1, 0x08, 0xaf, 0x43, 0x7c, 0xce, 0x74, 0x35, 0x81, 0x06, 0x9c, 0xd8, 0x2f, 0xce, 0x84, 0x7f, 0x17, 0x2b, 0xfc, 0x6e, 0xab, 0xcb, 0xc7, 0x34, 0x42, 0x36, 0x24, 0xfd, 0xb5, 0xe4, 0x3b, 0x55, 0xeb, 0xe3, 0x50, 0x66, 0x04, 0xef, 0x19, 0x58, 0x40, 0x67, 0xc8, 0xde, 0x33, 0xcc, 0x5b, 0x4b, 0xb1, 0x7d, 0x22, 0xf3, 0xdd, 0xb9, 0x25, 0xb7, 0x18, 0x86, 0xc6, 0xc7, 0xed, 0x73, 0x45, 0x6d, 0xca, 0x33, 0x0b, 0x12, 0x68, 0xa6, 0xdd, 0xa5, 0x7e, 0x1e, 0xf3, 0x2f, 0x4c, 0xc3, 0x73, 0x17, 0xb8, 0x07, 0xd6, 0x22, 0x8f, 0x17, 0x46, 0x9e, 0x6d, 0x05, 0x62, 0x90, 0x29, 0xdd, 0x6b, 0xcb, 0x57, 0x77, 0xbb, 0x5a, 0x50, 0x4e, 0xeb, 0xf7, 0xf9, 0x24, 0xdd, 0x4b, 0x03, 0x77, 0xed, 0x0d, 0x74, 0xfb, 0x7d, 0xde, 0xcf, 0xa1, 0x5f, 0xb1, 0xbc, 0x16, 0xc6, 0xfe, 0xd5, 0x06, 0x7d, 0x91, 0x8f, 0x3b, 0x84, 0x51, 0xa9, 0x5e, 0xc7, 0x30, 0x50, 0xe9, 0x8c, 0x33, 0x20, 0x47, 0xf1, 0x77, 0x62, 0xa8, 0x07, 0xe1, 0x22, 0xdd, 0xa4, 0x01, 0x39, 0xed, 0x76, 0xf6, 0x24, 0x61, 0xa3, 0xf0, 0x09, 0xfb, 0xb7, 0x91, 0xfd, 0xc3, 0x37, 0x0c, 0xdb, 0x2b, 0xec, 0xcd, 0x43, 0x4e, 0x31, 0x5f, 0xd0, 0xfa, 0xe4, 0xfb, 0xc8, 0x77, 0x78, 0x7d, 0xa7, 0xc1, 0x0b, 0x2b, 0xc9, 0xe6, 0x18, 0x59, 0x28, 0x61, 0xb7, 0xdc, 0x1f, 0x9b, 0x42, 0x76, 0x09, 0xb9, 0xb6, 0xec, 0x35, 0xb0, 0x05, 0xeb, 0x44, 0x96, 0xcc, 0xb6, 0x51, 0xfd, 0x19, 0xd5, 0xc8, 0xba, 0xd4, 0xf6, 0x13, 0xa6, 0xd0, 0x5d, 0x25, 0x05, 0x08, 0x75, 0x97, 0xa6, 0x41, 0x4a, 0xe3, 0x23, 0x2b, 0x24, 0x61, 0x3d, 0xa6, 0xce, 0x01, 0x2f, 0xf6, 0x51, 0x13, 0xf6, 0xb6, 0xb9, 0xe4, 0x73, 0xf0, 0xc6, 0xaa, 0x1f, 0x79, 0xd3, 0x59, 0x89, 0xe3, 0x77, 0xc0, 0x0a, 0x86, 0x25, 0x10, 0x07, 0x31, 0xbc, 0x92, 0xc9, 0x66, 0x1d, 0x46, 0x17, 0x78, 0x31, 0xd5, 0xa2, 0x08, 0xdd, 0x98, 0x5f, 0x8e, 0x7d, 0x9b, 0x2f, 0x39, 0x58, 0xb9, 0x99, 0xb0, 0x25, 0x55, 0x1e, 0x9c, 0xbc, 0x5c, 0x79, 0xc0, 0x6f, 0x6a, 0x4c, 0x4c, 0x83, 0xbc, 0x4c, 0x5b, 0x10, 0x1f, 0x4c, 0xc1, 0x2d, 0x6a, 0xf2, 0x8a, 0xf1, 0x24, 0xe9, 0x61, 0x49, 0x88, 0xe9, 0xed, 0x88, 0x6d, 0x16, 0x1a, 0xbf, 0xe9, 0x6a, 0xa7, 0xa5, 0x98, 0xcc, 0x89, 0x6e, 0x88, 0x6f, 0xef, 0x6e, 0x50, 0x59, 0x85, 0x12, 0x9c, 0x97, 0xd8, 0x5e, 0xef, 0xbb, 0x03, 0xa2, 0x6a, 0x14, 0x45, 0x32, 0xbd, 0x87, 0x79, 0x60, 0xfa, 0x19, 0x98, 0xaa, 0x9c, 0x24, 0x5a, 0x29, 0x94, 0xec, 0x1f, 0x6c, 0xe5, 0xa8, 0xfe, 0x29, 0xbc, 0x4c, 0x6d, 0xad, 0x8a, 0xde, 0xe2, 0x55, 0xeb, 0x9a, 0xee, 0x9d, 0x85, 0x70, 0xfb, 0x12, 0xcf, 0x2c, 0xeb, 0xdf, 0xa4, 0xf3, 0x7c, 0x80, 0x13, 0xd8, 0xfa, 0x8b, 0x64, 0x77, 0xd0, 0xd6, 0xac, 0x76, 0x07, 0x1f, 0xe6, 0x36, 0xe6, 0x2c, 0x13, 0xf6, 0xc6, 0x6d, 0xde, 0x48, 0xa7, 0xe8, 0x50, 0x3b, 0xc5, 0x66, 0x75, 0x71, 0xa2, 0x65, 0x28, 0x4f, 0x18, 0x37, 0xf6, 0x28, 0xed, 0x3b, 0x2d, 0xd0, 0x49, 0xa4, 0x61, 0x74, 0xfb, 0xde, 0xdb, 0xaa, 0x76, 0x1e, 0xde, 0xaa, 0x2e, 0x9e, 0xe6, 0x53, 0x17, 0x23, 0x6f, 0x69, 0xec, 0xef, 0xae, 0x77, 0x62, 0xff, 0x18, 0x52, 0xb6, 0x1f, 0x53, 0x35, 0x93, 0x35, 0xa3, 0x2d, 0xb1, 0xfb, 0x30, 0x9d, 0xeb, 0x1a, 0xe4, 0xac, 0x58, 0xaf, 0x18, 0x5a, 0xb0, 0xc8, 0x9c, 0xb0, 0x95, 0x78, 0x4b, 0xd6, 0xeb, 0xfc, 0x9e, 0xd9, 0x40, 0x5d, 0xaf, 0x94, 0x2b, 0x96, 0x8c, 0xf2, 0x2b, 0x3f, 0x99, 0xed, 0x9e, 0x7f, 0xc0, 0x2d, 0x4b, 0x31, 0x8b, 0x95, 0x46, 0xfe, 0x8e, 0x7d, 0xab, 0x72, 0xd0, 0x7d, 0xc6, 0x94, 0xa5, 0xb8, 0xf5, 0x76, 0xd6, 0x7e, 0x39, 0xd3, 0x3e, 0x6f, 0xd4, 0x9c, 0x7c, 0x5d, 0x82, 0xe1, 0x32, 0xb2, 0x97, 0x30, 0x92, 0xa7, 0x9c, 0x2e, 0xf7, 0xa4, 0xd9, 0x1f, 0x1e, 0xca, 0xdc, 0x03, 0x43, 0xb3, 0xb7, 0x74, 0x4d, 0x57, 0xdf, 0x8c, 0xef, 0xc7, 0xf0, 0xf7, 0x47, 0x18, 0x9a, 0x78, 0x1f, 0x37, 0x2c, 0xda, 0x11, 0x5b, 0xb8, 0x68, 0x49, 0xc3, 0xe2, 0xa5, 0x4b, 0x46, 0x5b, 0x20, 0x1e, 0x1b, 0xfc, 0x3f, 0x65, 0x83, 0x78, 0xc8, 0xb8, 0x0b, 0x7f, 0x51, 0xfc, 0x35, 0xe1, 0xaf, 0x05, 0x86, 0x72, 0xaa, 0xf0, 0xf7, 0x14, 0xb7, 0x6e, 0x2b, 0x64, 0x61, 0xbd, 0x9b, 0x39, 0xdc, 0xb5, 0xb6, 0x2f, 0x3f, 0xff, 0xf0, 0x5f, 0x2e, 0xa9, 0xfd, 0x28, 0xdf, 0x90, 0x97, 0x34, 0x82, 0xde, 0xc5, 0x86, 0xd6, 0x85, 0x62, 0x43, 0x7b, 0x5b, 0x23, 0xf8, 0xcb, 0xa6, 0x35, 0x88, 0xe1, 0x85, 0x8b, 0xc9, 0xca, 0x6c, 0x47, 0xbb, 0x18, 0x6b, 0x5c, 0xb4, 0x90, 0x79, 0xdf, 0xe8, 0x68, 0x9c, 0x7a, 0xbb, 0x1e, 0x58, 0xba, 0x58, 0xe3, 0xd2, 0xf6, 0x65, 0x31, 0xcc, 0xaa, 0xd6, 0x7f, 0x6f, 0x59, 0xe5, 0xfc, 0x9a, 0x00, 0xcf, 0xa2, 0x31, 0x16, 0x6b, 0x8f, 0xf1, 0x3e, 0x12, 0xa7, 0x35, 0x38, 0xc5, 0x1f, 0xc4, 0x16, 0x77, 0x74, 0x34, 0xb6, 0x89, 0x0d, 0x0b, 0x3b, 0x16, 0x8a, 0x3f, 0x58, 0xb8, 0x54, 0x6c, 0x69, 0x5f, 0xda, 0x91, 0x34, 0x03, 0x2b, 0xc0, 0x50, 0xd6, 0xd6, 0xb4, 0xf7, 0xfa, 0xd4, 0xfb, 0x4d, 0x3b, 0xd2, 0x6c, 0xbe, 0x4e, 0xbd, 0xaa, 0x7d, 0xd7, 0x21, 0xe3, 0xd5, 0xed, 0xbb, 0x0e, 0x4d, 0x0c, 0x7d, 0x4d, 0xfb, 0xae, 0x43, 0x13, 0x83, 0x7f, 0xd1, 0xbe, 0xeb, 0x90, 0xf1, 0xbf, 0xcf, 0xbe, 0xeb, 0xd0, 0xc4, 0x49, 0x57, 0xb4, 0xef, 0x3a, 0x34, 0xd1, 0x31, 0xc6, 0xbe, 0xeb, 0x90, 0xb1, 0xf6, 0x2a, 0xf6, 0x5d, 0x87, 0x26, 0xfa, 0xc6, 0xd8, 0x77, 0x1d, 0x9a, 0x98, 0x77, 0x89, 0x7d, 0xd7, 0xa1, 0x89, 0x96, 0xff, 0xbc, 0x7d, 0xd7, 0xab, 0xfa, 0x5b, 0xee, 0x1c, 0xf5, 0xb5, 0x3c, 0xdd, 0xdf, 0xb1, 0xd5, 0x01, 0x65, 0xe5, 0xa7, 0x21, 0x58, 0x7a, 0x1a, 0x9e, 0x90, 0x0c, 0xe9, 0xd6, 0x00, 0x15, 0x8f, 0xd8, 0x9f, 0x61, 0xcb, 0x4f, 0x72, 0x7b, 0x6d, 0x49, 0xbf, 0xe9, 0x58, 0x12, 0x79, 0x64, 0x8e, 0xa9, 0xb7, 0xc7, 0x1b, 0xad, 0x64, 0x81, 0xef, 0x40, 0xfc, 0x40, 0xdc, 0xf2, 0x7d, 0x9d, 0x8d, 0x9d, 0xeb, 0x67, 0x05, 0x17, 0xc3, 0x9d, 0x61, 0x03, 0x86, 0x9b, 0x43, 0x8b, 0xc1, 0x4a, 0xbe, 0x9c, 0xc9, 0xa3, 0x51, 0xca, 0x5b, 0x3b, 0xcb, 0x03, 0x79, 0xdf, 0x1a, 0xe4, 0x75, 0xc9, 0xaf, 0x64, 0xba, 0x44, 0x17, 0x6c, 0x87, 0x49, 0x91, 0x62, 0x66, 0x95, 0x72, 0x36, 0xd2, 0xa3, 0x09, 0xbc, 0x77, 0xa4, 0xc9, 0xd8, 0x07, 0x05, 0xa4, 0x61, 0xbc, 0xc8, 0xc0, 0x3d, 0x9e, 0xcd, 0x8f, 0x9f, 0x60, 0x36, 0xa5, 0x08, 0x22, 0xa1, 0x5f, 0x31, 0x93, 0xe4, 0x07, 0x23, 0xd9, 0xa8, 0xa5, 0xaf, 0xdc, 0xe6, 0xea, 0x5e, 0xb2, 0xb9, 0x05, 0x3d, 0xc8, 0x37, 0x96, 0x25, 0x42, 0x9d, 0x1b, 0xa2, 0x60, 0x74, 0x40, 0x15, 0x59, 0x42, 0x22, 0xff, 0xdd, 0x5b, 0xf1, 0x3f, 0xaa, 0xd9, 0x6c, 0x0f, 0xce, 0x9e, 0x66, 0xa8, 0x4d, 0xc0, 0xe5, 0x49, 0xd7, 0xd3, 0xfe, 0xec, 0x1d, 0xa1, 0xad, 0x50, 0x9c, 0x4c, 0x1b, 0xbf, 0xde, 0x03, 0xdf, 0x4e, 0x58, 0x51, 0x1f, 0x79, 0xd2, 0xda, 0x0c, 0x1e, 0xe6, 0xcb, 0xcb, 0x98, 0xce, 0x51, 0xca, 0x95, 0xcc, 0x67, 0xc1, 0x59, 0xc5, 0xee, 0xbf, 0x91, 0x46, 0x08, 0x69, 0x5e, 0xb7, 0xc2, 0x9f, 0x72, 0xef, 0x92, 0x15, 0x96, 0xc5, 0xf0, 0x71, 0x54, 0xb0, 0xd8, 0x05, 0xf8, 0xdd, 0x96, 0x94, 0x87, 0x49, 0x36, 0x23, 0xbe, 0x97, 0x36, 0x56, 0x8a, 0x57, 0x76, 0xb1, 0xc8, 0x4e, 0x9e, 0x0e, 0x88, 0xb3, 0x44, 0x5a, 0x4d, 0xa7, 0x78, 0x23, 0x9e, 0xba, 0x5e, 0xb7, 0x93, 0xd9, 0x22, 0xcd, 0x42, 0x9e, 0xe4, 0x62, 0x7d, 0x98, 0x5b, 0x25, 0x55, 0xa9, 0xea, 0x1d, 0x64, 0x8d, 0x94, 0xfc, 0x71, 0xd5, 0x1b, 0xc8, 0x3e, 0x29, 0xf2, 0x46, 0x4d, 0x12, 0xb7, 0xf3, 0x4f, 0xb6, 0x17, 0x07, 0xb9, 0xbd, 0x7f, 0x75, 0x2d, 0x86, 0x6d, 0xe1, 0x16, 0xff, 0x05, 0x0f, 0x4a, 0x55, 0x1e, 0xd0, 0x63, 0xea, 0x13, 0x64, 0xbf, 0x14, 0x63, 0x0b, 0x90, 0x43, 0xd8, 0x88, 0xef, 0x99, 0x64, 0xf1, 0x89, 0x7c, 0xcd, 0x61, 0x98, 0x05, 0xb9, 0x04, 0x95, 0xc1, 0x13, 0x27, 0x39, 0xec, 0xf5, 0x7a, 0x37, 0x86, 0x5e, 0x8f, 0xb1, 0x83, 0x2c, 0xed, 0x75, 0x98, 0xf6, 0x3e, 0x7c, 0x9a, 0x90, 0x2b, 0x18, 0x24, 0xcf, 0x27, 0xf8, 0x9e, 0x1d, 0xe1, 0xf0, 0x74, 0x06, 0xf0, 0x89, 0x54, 0x87, 0x6f, 0xa4, 0xbf, 0x7f, 0x67, 0xbd, 0x11, 0xdf, 0x34, 0x91, 0x06, 0xfc, 0x8b, 0xf5, 0x50, 0xbd, 0x25, 0x61, 0xfa, 0x38, 0x95, 0x5d, 0x8b, 0x4f, 0x2c, 0x5b, 0xb5, 0x1b, 0xcb, 0x36, 0x88, 0x4e, 0x70, 0xf7, 0x63, 0xdf, 0xd7, 0x83, 0x2a, 0x39, 0x76, 0xb9, 0x0f, 0x32, 0xce, 0x76, 0x28, 0xb7, 0x13, 0x39, 0xf0, 0x90, 0xcf, 0xc9, 0x7c, 0xac, 0x8c, 0x58, 0x10, 0x72, 0x3b, 0x87, 0xcc, 0x21, 0x48, 0xa6, 0xc1, 0x35, 0x74, 0x6b, 0x1b, 0xd9, 0x9a, 0xc3, 0x95, 0xcd, 0xfd, 0xe2, 0x69, 0x16, 0x07, 0xa9, 0x5c, 0x6e, 0xf0, 0x30, 0x5f, 0x06, 0x52, 0xaa, 0x0c, 0xe1, 0x44, 0x2a, 0xa5, 0xeb, 0x41, 0xf2, 0x2a, 0x90, 0xf4, 0xb7, 0xbc, 0xc7, 0x7b, 0x1a, 0x3c, 0xe9, 0x6b, 0x61, 0x32, 0xa6, 0xbf, 0xba, 0x97, 0x74, 0xfb, 0x54, 0xa6, 0xe9, 0xa4, 0x93, 0x42, 0x7e, 0x0f, 0xd6, 0x27, 0xca, 0x70, 0x90, 0xe7, 0x12, 0x07, 0xdc, 0x11, 0xce, 0x64, 0xa7, 0x96, 0x64, 0x2b, 0x32, 0x87, 0xa8, 0x88, 0xc1, 0x41, 0x38, 0x85, 0xd2, 0x69, 0x68, 0x34, 0x96, 0x92, 0xe7, 0x0e, 0xb7, 0x77, 0x7a, 0x00, 0x44, 0xff, 0x36, 0x10, 0x83, 0x70, 0xe7, 0x80, 0x1f, 0x10, 0xd7, 0xee, 0xa0, 0x7b, 0x24, 0xa9, 0xf6, 0x09, 0xc5, 0xa9, 0x5a, 0xce, 0x32, 0x50, 0x2b, 0xf8, 0xfe, 0xa7, 0xf0, 0x60, 0xaa, 0x9d, 0x82, 0x99, 0xfa, 0x05, 0x5b, 0x66, 0x8d, 0xe8, 0x18, 0xd7, 0xe6, 0x97, 0x2c, 0xa9, 0x5a, 0xa5, 0xf7, 0xa4, 0x82, 0xd3, 0x41, 0xe2, 0x05, 0x53, 0x10, 0x7c, 0x1f, 0x54, 0xf9, 0xda, 0xc7, 0xb0, 0x1b, 0x31, 0xe9, 0x06, 0xf2, 0x16, 0x4e, 0x7d, 0x66, 0x65, 0xb3, 0xe7, 0xdb, 0xd8, 0x43, 0x1b, 0x92, 0x1e, 0x37, 0x1e, 0x4d, 0xeb, 0x1d, 0x4d, 0x32, 0x74, 0x03, 0xf3, 0xe5, 0x70, 0x3e, 0xcb, 0x01, 0x75, 0x41, 0x9c, 0x57, 0x77, 0x0d, 0xd4, 0x02, 0xf6, 0xc8, 0x82, 0xb0, 0x36, 0x0f, 0x5e, 0x1b, 0x86, 0x09, 0x58, 0x63, 0xbb, 0xb8, 0x87, 0x78, 0x9e, 0x68, 0xf5, 0x54, 0x0f, 0xe8, 0x8c, 0xc5, 0xa0, 0xc2, 0xa7, 0x31, 0xd0, 0x95, 0xe7, 0x25, 0x8a, 0xf2, 0xee, 0x1b, 0xf8, 0xd7, 0x20, 0x8e, 0x3f, 0x70, 0x3f, 0xd2, 0x96, 0xfb, 0x4f, 0xf5, 0x90, 0xed, 0x9b, 0x98, 0x30, 0xd5, 0x0b, 0x66, 0xa4, 0x27, 0x39, 0xcc, 0xcf, 0xca, 0x4d, 0xd2, 0x24, 0xca, 0x39, 0xa2, 0x89, 0xaa, 0x89, 0x12, 0x90, 0x5f, 0x36, 0x49, 0x37, 0xbd, 0x13, 0xcb, 0x7f, 0x02, 0x44, 0x86, 0x1d, 0x1d, 0x89, 0x7e, 0x59, 0xa4, 0xbb, 0x81, 0x74, 0x1d, 0xa6, 0x48, 0xf5, 0xa6, 0x4b, 0xea, 0x93, 0x0f, 0xbf, 0xc4, 0xfa, 0xa4, 0x7a, 0x00, 0xfb, 0xce, 0x19, 0xd3, 0x9f, 0xd8, 0x12, 0xe8, 0x76, 0xfb, 0x5c, 0xba, 0xc4, 0xb9, 0x41, 0x5d, 0x6f, 0xee, 0x03, 0x31, 0x81, 0x7c, 0xbb, 0x9f, 0xd0, 0xc5, 0x7e, 0xc4, 0x7c, 0xbc, 0x2b, 0x34, 0x47, 0x19, 0x07, 0xb3, 0xa4, 0xbd, 0x81, 0x79, 0x7b, 0x28, 0xec, 0x4c, 0xeb, 0xc1, 0x0d, 0xc8, 0x83, 0x96, 0x21, 0xae, 0xb8, 0x69, 0xa4, 0xdc, 0x86, 0xa4, 0xa4, 0x77, 0x4e, 0xf1, 0x7b, 0xe3, 0xb7, 0x21, 0xfd, 0x4d, 0xdf, 0x77, 0xb5, 0x02, 0xe2, 0xdb, 0x91, 0x69, 0x01, 0xf8, 0xc0, 0xb7, 0x15, 0xde, 0xc7, 0xf7, 0xf7, 0xf1, 0xfd, 0xc8, 0xf5, 0xe4, 0x3d, 0xf7, 0x4d, 0xc4, 0xfa, 0x03, 0xf8, 0x36, 0x11, 0x0e, 0xa2, 0x44, 0x47, 0x9e, 0xdc, 0x87, 0x26, 0x3e, 0x0a, 0x6f, 0x8d, 0xf6, 0x78, 0xea, 0xf6, 0x4c, 0x0b, 0x08, 0x30, 0xca, 0xe2, 0xea, 0x9c, 0x51, 0x5f, 0x3e, 0xb1, 0x19, 0xe6, 0xa4, 0xfb, 0x83, 0xc5, 0xb0, 0x02, 0x0c, 0xf3, 0x8d, 0x09, 0x2b, 0x8a, 0xca, 0xfd, 0x5b, 0x85, 0x34, 0xff, 0x9f, 0xf1, 0x71, 0x71, 0x13, 0xf9, 0xe4, 0x60, 0xb6, 0x9b, 0xe7, 0x20, 0x95, 0xdf, 0x0a, 0xbe, 0x88, 0x01, 0xff, 0x16, 0xa0, 0xac, 0xb4, 0x15, 0x8a, 0xc2, 0xe9, 0x5e, 0xce, 0x09, 0xb2, 0x85, 0x79, 0x31, 0x1d, 0x9a, 0xf8, 0x6c, 0x94, 0x7c, 0xc4, 0x14, 0x5c, 0xc9, 0x8f, 0x69, 0x5c, 0xc3, 0xa0, 0xe7, 0x24, 0xa1, 0x01, 0xa1, 0x8b, 0xfe, 0x02, 0xb4, 0x11, 0xa1, 0x4f, 0xc3, 0x0e, 0xec, 0x9b, 0x3d, 0xd8, 0x4f, 0xbb, 0xf0, 0x7d, 0x17, 0xbe, 0xef, 0xc0, 0xe7, 0x13, 0xf8, 0xac, 0x4b, 0xef, 0x13, 0x9c, 0x47, 0x2f, 0x4c, 0xf3, 0xc1, 0xc7, 0xf8, 0xeb, 0x1f, 0xe5, 0xc7, 0x7d, 0x68, 0xe2, 0x2e, 0xe6, 0xc7, 0x7d, 0xe8, 0x3a, 0xc5, 0x8f, 0x7b, 0xf5, 0x69, 0x41, 0x3f, 0x9b, 0xac, 0xbb, 0xe9, 0xc8, 0xb7, 0x0b, 0x59, 0x90, 0xb6, 0x07, 0x3a, 0x60, 0xee, 0xe0, 0xc5, 0xc3, 0xf6, 0x62, 0xc2, 0x0c, 0x47, 0x31, 0xcd, 0x17, 0x27, 0xfd, 0xdd, 0x40, 0xb2, 0x68, 0x6e, 0xb3, 0x2d, 0x68, 0x5d, 0xa0, 0x48, 0x3d, 0x4f, 0xe2, 0x2c, 0x7f, 0x84, 0xc6, 0x9d, 0x79, 0x6b, 0xa1, 0x67, 0xa9, 0xf2, 0x2c, 0x63, 0x5e, 0x5b, 0x72, 0x12, 0xde, 0xe2, 0xc8, 0x9b, 0x1f, 0xed, 0xe7, 0xb1, 0x15, 0xff, 0x37, 0x09, 0x2e, 0x9a, 0x41, 0x32, 0xae, 0x3c, 0x35, 0xfb, 0x47, 0xaf, 0x3b, 0x28, 0x03, 0x90, 0x65, 0x94, 0x13, 0xe9, 0xab, 0x16, 0xcb, 0x8d, 0x66, 0x40, 0x36, 0xce, 0x80, 0x09, 0x08, 0x55, 0x87, 0x2d, 0x5c, 0x30, 0x16, 0xfb, 0xfe, 0xcc, 0xf4, 0x5d, 0x42, 0xdd, 0x51, 0x4d, 0x7f, 0x37, 0xf2, 0xe5, 0x55, 0xd6, 0xb9, 0xa4, 0xf3, 0x07, 0x07, 0x3b, 0x04, 0x9b, 0xea, 0xa3, 0x67, 0x51, 0x5e, 0x9a, 0x63, 0x44, 0x19, 0xfc, 0xa3, 0xad, 0xb8, 0xbe, 0x7b, 0xc8, 0xa6, 0x50, 0x3c, 0xd5, 0xf7, 0x7b, 0x30, 0xb6, 0x80, 0x7b, 0x06, 0xa4, 0xb7, 0x28, 0xcd, 0x51, 0xf2, 0x9e, 0x52, 0x30, 0x95, 0xfb, 0xae, 0xb6, 0xa2, 0xe4, 0x51, 0x90, 0x84, 0xce, 0x13, 0x55, 0xf1, 0xd5, 0xa4, 0x29, 0x8d, 0x52, 0x16, 0x79, 0x57, 0xcd, 0xc7, 0x67, 0x01, 0x49, 0xf2, 0x24, 0x8d, 0xa7, 0x64, 0x76, 0x3b, 0x88, 0xea, 0x81, 0x35, 0xe1, 0x1c, 0xc9, 0x89, 0xd4, 0x2c, 0x83, 0x3c, 0xae, 0x54, 0x93, 0xdf, 0x45, 0x83, 0xa5, 0x74, 0x94, 0x44, 0x95, 0xe6, 0xc9, 0xd2, 0x01, 0xe1, 0xc3, 0xfb, 0xbb, 0x23, 0xbb, 0x08, 0x8f, 0x52, 0x1e, 0x1d, 0x1d, 0x28, 0x75, 0xd1, 0xc8, 0xe4, 0x3e, 0x38, 0x76, 0x64, 0xb2, 0xb2, 0x70, 0x64, 0xbe, 0xa7, 0x8c, 0xcc, 0x59, 0x9c, 0xef, 0x77, 0xa2, 0x1c, 0xf6, 0x31, 0xd1, 0xe1, 0x2f, 0x75, 0xa9, 0x99, 0x4e, 0xbd, 0x82, 0xd4, 0xec, 0x0e, 0x26, 0xcf, 0x92, 0xbf, 0xd2, 0x6d, 0x92, 0x89, 0xd1, 0x3f, 0x46, 0xb1, 0xbf, 0x6c, 0xe6, 0xd4, 0x15, 0x65, 0xeb, 0x51, 0xb4, 0x3a, 0xbc, 0x72, 0xec, 0xe8, 0x62, 0x9f, 0xdf, 0x71, 0x3d, 0xf9, 0xe0, 0xad, 0xf3, 0x21, 0x65, 0xa1, 0x11, 0x20, 0xae, 0x81, 0xf3, 0x19, 0x59, 0x33, 0x04, 0x3d, 0xd1, 0x76, 0xe2, 0x4c, 0x5e, 0x1c, 0x08, 0xeb, 0x13, 0x2b, 0x58, 0x9d, 0xa2, 0x95, 0x43, 0x63, 0x6e, 0x47, 0x3e, 0x02, 0x65, 0x2e, 0xa3, 0xa5, 0x25, 0x9d, 0x8b, 0xb0, 0xd7, 0x06, 0x37, 0x22, 0x17, 0xa1, 0xd0, 0xd3, 0x0b, 0x3e, 0x84, 0xd0, 0x27, 0xf0, 0x8b, 0xe3, 0x4b, 0xfa, 0x18, 0x7f, 0xf9, 0x0e, 0xd5, 0xf6, 0xff, 0x7e, 0x4e, 0x67, 0xe7, 0xb2, 0xd6, 0x3a, 0x97, 0x46, 0x35, 0xcd, 0xa7, 0xe4, 0x5f, 0x35, 0x8a, 0xc8, 0xad, 0x54, 0x27, 0x7c, 0x7d, 0x67, 0x4d, 0x87, 0xc9, 0x3a, 0x01, 0xfb, 0xd1, 0xa1, 0x58, 0x3e, 0x9f, 0x18, 0x31, 0xd5, 0x93, 0x8f, 0xc5, 0x6b, 0xc2, 0x66, 0x49, 0xaf, 0xf5, 0xc8, 0x9f, 0x31, 0xef, 0xdf, 0xe4, 0x03, 0x67, 0x3c, 0xd6, 0xe2, 0x4e, 0xba, 0xe1, 0xa0, 0x12, 0xe4, 0x91, 0xeb, 0xbc, 0x30, 0xd9, 0xfb, 0x19, 0xec, 0x1d, 0xe3, 0xb5, 0xfb, 0x2b, 0x46, 0xfd, 0x0e, 0xbb, 0x46, 0xd9, 0xa5, 0x56, 0xec, 0xb4, 0x6b, 0xc8, 0x4e, 0xfb, 0x37, 0xb6, 0x92, 0xef, 0x73, 0x66, 0xf5, 0xdd, 0xe0, 0xe2, 0x14, 0xce, 0xa8, 0x58, 0x7d, 0x37, 0xc5, 0x32, 0x5c, 0x5e, 0xf2, 0x7d, 0xce, 0xac, 0xb8, 0xe7, 0x20, 0x9e, 0x89, 0xec, 0xfd, 0x5a, 0xb0, 0x32, 0x7d, 0x7e, 0xbb, 0xef, 0x05, 0xa0, 0xfd, 0x00, 0x4d, 0xca, 0xa6, 0x3b, 0xf9, 0xa0, 0x1c, 0x83, 0xd1, 0x7b, 0xa3, 0x02, 0xed, 0x32, 0x32, 0xbf, 0xe6, 0x4e, 0xc6, 0x5b, 0x59, 0xac, 0x2e, 0xce, 0x7b, 0xe2, 0x0c, 0x6b, 0xc6, 0xbe, 0x7c, 0x5e, 0x1e, 0x44, 0x6c, 0xbc, 0x3b, 0x7a, 0xcf, 0x65, 0x6d, 0x51, 0xfb, 0x71, 0xfd, 0xb9, 0x23, 0xaa, 0xc6, 0x1e, 0x74, 0xe2, 0x9a, 0x35, 0x11, 0x9f, 0xee, 0x6b, 0xc9, 0x0f, 0x52, 0x3e, 0x7e, 0x51, 0x68, 0xe1, 0xb5, 0x3e, 0xa8, 0x2a, 0x39, 0x09, 0x1e, 0x5c, 0xbf, 0x02, 0xbe, 0x2d, 0xe0, 0xc7, 0x77, 0x3f, 0xbe, 0x7b, 0x0e, 0x77, 0x1f, 0xee, 0x9e, 0xd6, 0x63, 0xb7, 0x91, 0xa6, 0x34, 0x9d, 0x3d, 0xf8, 0xf9, 0x4a, 0xb0, 0x9e, 0xd9, 0x02, 0x6d, 0x87, 0xc7, 0x7c, 0xcd, 0x82, 0xb6, 0x84, 0x28, 0xe0, 0x9f, 0x92, 0x75, 0xcd, 0xb4, 0xa7, 0xd3, 0xdf, 0x0c, 0xa2, 0x7c, 0xe7, 0xb3, 0xab, 0x7b, 0xa7, 0xf9, 0xa1, 0x0c, 0xe9, 0xd6, 0xbf, 0x1c, 0x17, 0xe0, 0x22, 0x3d, 0x0f, 0x00, 0x0c, 0xe3, 0xf3, 0xc3, 0x73, 0xb8, 0xde, 0x96, 0x7f, 0x0e, 0x6b, 0xec, 0x73, 0x7d, 0x6a, 0x3a, 0x47, 0x71, 0x92, 0x56, 0xfd, 0x09, 0xfb, 0x00, 0x59, 0x94, 0x8f, 0xa8, 0x42, 0x6a, 0x85, 0x02, 0x7c, 0x12, 0x24, 0xee, 0x90, 0xf4, 0x14, 0xb5, 0xe9, 0x7a, 0x9b, 0x69, 0x25, 0xa9, 0xa9, 0xa4, 0x3f, 0x6e, 0xab, 0xee, 0xa5, 0xbe, 0x9b, 0x3d, 0x27, 0xa6, 0x1a, 0xb5, 0x1b, 0x7c, 0x92, 0x42, 0xb3, 0x61, 0xcc, 0x1e, 0xf1, 0x59, 0x5c, 0x03, 0x4e, 0x8e, 0xf6, 0x2b, 0xce, 0xd7, 0x81, 0x3f, 0x36, 0x54, 0xf7, 0x56, 0x20, 0x3d, 0x75, 0xce, 0x75, 0x54, 0x76, 0x00, 0xcd, 0xd7, 0x9b, 0x0a, 0x7c, 0xff, 0x88, 0x75, 0x7a, 0x1c, 0xf9, 0x7b, 0xbd, 0x4b, 0xc5, 0xf1, 0x39, 0x51, 0x37, 0x66, 0x6b, 0xfb, 0x83, 0xba, 0xde, 0x7c, 0xc4, 0x3e, 0xa4, 0xbd, 0x9f, 0x83, 0x95, 0xf4, 0x16, 0xbe, 0xb7, 0xd9, 0x31, 0x51, 0xbb, 0x16, 0x73, 0xdd, 0x28, 0x2e, 0x50, 0x6e, 0x70, 0xee, 0x09, 0x36, 0xb1, 0x59, 0xbd, 0xc3, 0x59, 0xe3, 0xea, 0xf4, 0x97, 0xb9, 0x31, 0x0e, 0xe7, 0xae, 0x84, 0xfc, 0xd6, 0x35, 0x94, 0xe3, 0x7b, 0x2e, 0xa4, 0xc8, 0xa5, 0xdc, 0xf6, 0x3f, 0xe2, 0x50, 0xbe, 0xcb, 0x07, 0x85, 0xd1, 0xeb, 0x5c, 0xcc, 0x7e, 0x24, 0x10, 0x42, 0xf8, 0x63, 0x2a, 0xc4, 0xa6, 0x4a, 0xb2, 0xdf, 0xac, 0xf8, 0x8a, 0x36, 0xfc, 0x62, 0x98, 0xe8, 0x6a, 0x58, 0x8b, 0x61, 0x8c, 0x9e, 0x92, 0x97, 0x63, 0x0e, 0x15, 0xbd, 0x83, 0xbc, 0x47, 0x67, 0x15, 0x83, 0x1e, 0xbf, 0x24, 0x25, 0x4d, 0x03, 0xe6, 0x24, 0x62, 0x5e, 0x4d, 0xae, 0xce, 0x1f, 0xc9, 0xf2, 0x08, 0xb4, 0xb8, 0x82, 0x10, 0x45, 0x18, 0x4a, 0x11, 0x17, 0xe7, 0x31, 0x6a, 0x1d, 0x65, 0x38, 0x93, 0x89, 0xf4, 0x2f, 0x1a, 0x03, 0xc4, 0x79, 0x0a, 0x3b, 0x16, 0xea, 0x2e, 0x3d, 0x2d, 0x5f, 0xa8, 0x7b, 0x40, 0xa1, 0xc7, 0xb9, 0xe9, 0x3a, 0x77, 0x1c, 0x3b, 0x15, 0xdb, 0x77, 0x1d, 0x57, 0xb6, 0x89, 0xcf, 0xa4, 0x66, 0xc4, 0xd9, 0x7c, 0x17, 0x4c, 0xa2, 0xd5, 0x7b, 0x39, 0x64, 0xd3, 0xce, 0x2a, 0xc4, 0x84, 0x3f, 0x3c, 0x93, 0x76, 0xae, 0x8a, 0x2b, 0xa9, 0x32, 0xef, 0xf1, 0xcd, 0xad, 0xfa, 0x24, 0x30, 0x30, 0x2c, 0xfe, 0xd2, 0xe7, 0x09, 0x78, 0x4e, 0x06, 0x88, 0x8b, 0x41, 0x7e, 0x8a, 0xbc, 0x5d, 0x15, 0xbd, 0x3a, 0xac, 0x3e, 0xb9, 0xd1, 0xb3, 0x0f, 0xff, 0x4e, 0xf5, 0x21, 0x35, 0xc0, 0x90, 0x14, 0x35, 0xe0, 0x72, 0x33, 0x8e, 0x13, 0xd5, 0xc2, 0x68, 0xf1, 0xe4, 0x5f, 0x5b, 0x1b, 0x17, 0xe3, 0x31, 0x9d, 0x0f, 0x4e, 0xe8, 0x74, 0x2a, 0x3a, 0x69, 0x43, 0x79, 0x2c, 0x5e, 0x23, 0x44, 0x34, 0x1f, 0x07, 0xa5, 0xb3, 0xd6, 0x29, 0x4c, 0xbe, 0xd3, 0xa0, 0xd4, 0x6a, 0xa4, 0x9b, 0x5f, 0xf1, 0x26, 0x14, 0x02, 0xe2, 0xf3, 0xf1, 0x3f, 0x86, 0xed, 0x67, 0x15, 0xab, 0xdd, 0x01, 0x57, 0x0b, 0x9c, 0x85, 0x42, 0x87, 0x13, 0x4e, 0x5a, 0x4b, 0x39, 0x96, 0x91, 0x17, 0x5c, 0x1c, 0x53, 0x5c, 0xcd, 0xdc, 0xc5, 0xcd, 0x9d, 0xef, 0xc7, 0x7d, 0xaa, 0xb9, 0x83, 0xf2, 0x4e, 0xb2, 0xae, 0xf9, 0xd2, 0x59, 0x38, 0x19, 0xd6, 0xdb, 0x82, 0x92, 0x71, 0xf7, 0xba, 0x45, 0x93, 0x6b, 0xd7, 0x19, 0x42, 0xfe, 0xfb, 0xc3, 0xe7, 0xa5, 0xcf, 0x6a, 0x1f, 0x30, 0xd4, 0xe0, 0x9b, 0x66, 0xf7, 0x03, 0xf5, 0xe7, 0xbd, 0x67, 0x34, 0x9e, 0x17, 0x7f, 0xd9, 0xa8, 0x0f, 0xd2, 0xbd, 0xe0, 0x1e, 0x4c, 0x75, 0x1f, 0xad, 0xc7, 0x75, 0xbd, 0x76, 0x08, 0x2c, 0xc1, 0x76, 0xe0, 0x5b, 0xe9, 0x19, 0xd0, 0xd9, 0x34, 0x47, 0xd6, 0xdc, 0x17, 0xb7, 0xa8, 0x99, 0xed, 0x23, 0xc8, 0x15, 0x8e, 0xf7, 0xe6, 0x65, 0x6e, 0x1f, 0xb7, 0x08, 0x27, 0x39, 0x85, 0x91, 0x6b, 0x22, 0x03, 0xfb, 0x4b, 0x9e, 0x01, 0x54, 0x3f, 0xa6, 0x5d, 0x5d, 0x57, 0x39, 0xb8, 0x63, 0xc2, 0xe7, 0xcf, 0xe0, 0x98, 0xe6, 0xbf, 0xd5, 0x15, 0xd1, 0x95, 0x9e, 0xd1, 0x14, 0xd1, 0x39, 0x8d, 0x13, 0x5e, 0xbe, 0x6f, 0x95, 0xf9, 0x83, 0x07, 0x9c, 0x41, 0x8b, 0xc1, 0x5e, 0x92, 0xad, 0x72, 0x65, 0x12, 0x66, 0x8b, 0xeb, 0x10, 0xce, 0x4d, 0xa5, 0x59, 0x21, 0xd0, 0x86, 0xa3, 0x85, 0x6f, 0x75, 0x0f, 0xbe, 0x14, 0x7f, 0xf1, 0x3e, 0x8b, 0x0b, 0x9c, 0xaf, 0x3c, 0x18, 0x3e, 0x6a, 0x52, 0xdb, 0x0c, 0x76, 0x6f, 0xa0, 0x19, 0xfb, 0x1d, 0xb1, 0xb4, 0xae, 0xd7, 0xe9, 0xc1, 0x77, 0x2b, 0x7f, 0x47, 0x19, 0xdc, 0x6e, 0xc9, 0x3c, 0xf4, 0x60, 0x77, 0x7c, 0x4f, 0x17, 0xf9, 0x33, 0x53, 0xad, 0xc6, 0x4a, 0x82, 0xaf, 0x24, 0x50, 0xe2, 0x6e, 0x11, 0x74, 0x2f, 0xbe, 0x86, 0x61, 0x6b, 0x38, 0xfd, 0xaf, 0xeb, 0xb5, 0x01, 0xa6, 0xd3, 0xf0, 0xf7, 0xea, 0x75, 0x47, 0x56, 0xdf, 0x17, 0x67, 0x7a, 0xeb, 0xe3, 0x51, 0x9a, 0x6c, 0x87, 0xc2, 0xdf, 0x0e, 0x94, 0x9f, 0x51, 0x15, 0x4a, 0x73, 0x70, 0x36, 0xf1, 0x3e, 0x68, 0x56, 0x01, 0xab, 0xcb, 0x3a, 0x8b, 0xe6, 0xd0, 0x9a, 0xee, 0xb8, 0x53, 0xf0, 0x95, 0x05, 0xca, 0x8e, 0x57, 0xe5, 0xdc, 0xc7, 0xdf, 0x6e, 0x2a, 0xc3, 0x2e, 0x10, 0x8e, 0x3f, 0x88, 0x4f, 0xd5, 0x4d, 0x5e, 0x50, 0xd7, 0x3d, 0xf8, 0xe2, 0x9a, 0x97, 0x57, 0xff, 0xfc, 0xcd, 0xf0, 0x2b, 0xc1, 0xd5, 0xe1, 0xac, 0x5c, 0x17, 0xe4, 0xf7, 0x6e, 0x83, 0x73, 0x92, 0xbe, 0x03, 0xb9, 0xdc, 0x8e, 0x1b, 0x25, 0x55, 0xc7, 0x0d, 0x4e, 0x27, 0x9c, 0xa3, 0x11, 0x43, 0xce, 0xa1, 0xae, 0xd8, 0xc3, 0xed, 0x61, 0x92, 0x5f, 0x3c, 0x51, 0xa8, 0x89, 0xf7, 0xdf, 0x17, 0x86, 0x91, 0x4a, 0x84, 0x9a, 0x64, 0x54, 0x29, 0x3b, 0x7d, 0x26, 0xc2, 0xd8, 0x39, 0x34, 0xf2, 0x4e, 0x07, 0x79, 0x7b, 0x9c, 0x09, 0x67, 0xc5, 0x56, 0x38, 0x99, 0x57, 0x3c, 0x7b, 0x4e, 0xb0, 0x85, 0xc6, 0x3c, 0x0f, 0xc7, 0xdc, 0xe7, 0x31, 0x3a, 0xa1, 0xee, 0xd5, 0xe1, 0xa1, 0x81, 0x03, 0xde, 0x13, 0x01, 0x2e, 0xe7, 0x5b, 0x60, 0x7e, 0x97, 0xcf, 0x23, 0x69, 0xdd, 0x38, 0x37, 0x43, 0x1e, 0xf2, 0xeb, 0xb7, 0xbd, 0xbb, 0xed, 0x8b, 0xd2, 0x93, 0xa0, 0xf3, 0x91, 0xe5, 0xd5, 0x5d, 0xb8, 0xca, 0xce, 0x14, 0xc6, 0xcf, 0xea, 0xdc, 0xba, 0x15, 0x54, 0xee, 0x3d, 0x5b, 0xb7, 0xce, 0xea, 0xf4, 0xdf, 0x0f, 0x5a, 0xf6, 0x97, 0xdd, 0x3c, 0x84, 0x38, 0x8d, 0x67, 0x07, 0x98, 0x84, 0x8f, 0xd6, 0xc5, 0xbb, 0x37, 0x0b, 0x71, 0x8d, 0x15, 0x4e, 0xac, 0xe3, 0x18, 0xa9, 0xea, 0xa6, 0xbf, 0xb6, 0xa0, 0x5d, 0xe5, 0xf3, 0x07, 0xfc, 0xf9, 0x6b, 0x66, 0xf9, 0x40, 0x6f, 0x05, 0x9f, 0x2f, 0xe0, 0xc3, 0x37, 0xc3, 0x2c, 0x94, 0x7e, 0x91, 0x76, 0x1b, 0xa3, 0xba, 0x3c, 0x56, 0x36, 0xae, 0x73, 0xe6, 0xf0, 0x79, 0x4b, 0x89, 0xcf, 0x87, 0x65, 0x5e, 0xfb, 0x51, 0x80, 0x72, 0x5f, 0x01, 0xe6, 0xe9, 0x20, 0x04, 0xfc, 0x3e, 0x7f, 0x7c, 0x4d, 0x7c, 0x3a, 0xa8, 0xd9, 0xb7, 0xea, 0xa3, 0xf5, 0xf1, 0x35, 0x76, 0x38, 0xb1, 0x5e, 0x29, 0x65, 0x0d, 0xfd, 0x2d, 0x52, 0x9d, 0x98, 0xc7, 0xef, 0xc2, 0x39, 0x4b, 0x57, 0x8a, 0xef, 0x3f, 0xf8, 0xfe, 0x5a, 0xa7, 0x86, 0x7a, 0x7e, 0xd6, 0x7d, 0x75, 0xb0, 0x72, 0x2a, 0x7d, 0xcf, 0x5a, 0x53, 0x07, 0xf6, 0x4c, 0x3a, 0xe9, 0x10, 0xc4, 0xa3, 0x6b, 0x1c, 0xe0, 0x2b, 0x0d, 0x94, 0xce, 0x5a, 0x1b, 0x80, 0x79, 0x9f, 0x09, 0x53, 0x7f, 0xfb, 0xce, 0xdf, 0xc5, 0x7b, 0x90, 0xbd, 0xa8, 0xbb, 0xdf, 0xe0, 0x53, 0x91, 0x4e, 0xff, 0x2a, 0x4b, 0x30, 0x0a, 0x2b, 0x34, 0xd8, 0x1f, 0xd7, 0xd2, 0xbd, 0xcb, 0x35, 0x8b, 0x41, 0xf5, 0x52, 0xbc, 0xd6, 0x8f, 0xf1, 0x7e, 0xac, 0xe5, 0x49, 0x6a, 0xa3, 0x1d, 0xa8, 0x55, 0x27, 0x2a, 0x67, 0xf9, 0xc1, 0x8d, 0xed, 0xc9, 0x4b, 0xb6, 0x2c, 0x1f, 0x5b, 0x56, 0x40, 0x2b, 0x54, 0x61, 0xb1, 0x00, 0x51, 0x18, 0x9d, 0x47, 0x0d, 0xe6, 0x11, 0x3e, 0x3b, 0x26, 0x7d, 0x21, 0xa6, 0x2a, 0x4a, 0xa6, 0x2f, 0xc6, 0xf4, 0x73, 0x4a, 0x4e, 0x6a, 0x3c, 0x51, 0x90, 0x2c, 0x45, 0xd7, 0xad, 0x80, 0xc2, 0x0c, 0x36, 0xd3, 0xd7, 0x94, 0xc5, 0x79, 0x8b, 0x29, 0xf5, 0x81, 0xf8, 0xbe, 0xf8, 0x3a, 0x5f, 0xc1, 0x2f, 0x45, 0xcd, 0xcf, 0x7e, 0x1d, 0x7e, 0x9f, 0xce, 0x8c, 0x54, 0xe0, 0xc5, 0x34, 0x21, 0xa1, 0xf4, 0xb4, 0xc6, 0x63, 0xc6, 0x71, 0xde, 0x25, 0xd4, 0xc3, 0x88, 0x8f, 0x8f, 0x19, 0x8d, 0x1e, 0x62, 0x4a, 0x67, 0xd2, 0x53, 0x51, 0x92, 0xc7, 0xe3, 0xba, 0x08, 0x48, 0xe9, 0x74, 0xec, 0xd6, 0x50, 0x26, 0xdb, 0xeb, 0xd9, 0x3d, 0xa4, 0x42, 0x0e, 0x08, 0xa9, 0x14, 0xe8, 0xac, 0xf7, 0x4a, 0x6f, 0x29, 0xba, 0x0a, 0x46, 0x93, 0x0b, 0x26, 0x22, 0x35, 0x1b, 0x8e, 0xe8, 0x8d, 0x76, 0xe6, 0x8a, 0x4c, 0x25, 0xe9, 0xe8, 0x4d, 0x05, 0xf2, 0x57, 0xd7, 0x7a, 0x04, 0xd8, 0xe1, 0x10, 0x26, 0x44, 0x8c, 0xb8, 0x4a, 0x64, 0x31, 0x8d, 0x83, 0xad, 0xd7, 0xfb, 0x84, 0x09, 0xd5, 0xbd, 0x5c, 0xdb, 0x80, 0x68, 0x16, 0xbb, 0xbb, 0x36, 0xc1, 0xd2, 0x04, 0xc3, 0xc6, 0xe9, 0x2c, 0xd5, 0xc8, 0x75, 0x98, 0x2a, 0xf1, 0x4d, 0x7b, 0xa1, 0xf4, 0x2d, 0x12, 0xed, 0xd7, 0x21, 0x57, 0xab, 0x91, 0x40, 0x0e, 0x07, 0xfe, 0x50, 0x58, 0x68, 0xe5, 0xbe, 0x80, 0xec, 0xd9, 0x2e, 0xb8, 0xb9, 0xd0, 0x05, 0xb9, 0xc8, 0x59, 0x0d, 0x07, 0x5d, 0x70, 0x4b, 0xd8, 0xa4, 0xd4, 0x43, 0x43, 0xa5, 0x43, 0x33, 0xe9, 0x1b, 0x4a, 0x59, 0x4a, 0x8d, 0x86, 0x28, 0x4c, 0xd5, 0x8c, 0xeb, 0x46, 0x01, 0xed, 0x6d, 0x9d, 0xc0, 0x21, 0x30, 0xa9, 0x77, 0x78, 0x70, 0x65, 0xeb, 0x6e, 0xd4, 0x1b, 0xd4, 0xb2, 0x7c, 0x17, 0x4a, 0x01, 0x7c, 0x87, 0x8b, 0xcf, 0x2e, 0xa6, 0x39, 0x81, 0xab, 0x7f, 0xc5, 0xa0, 0x5c, 0x2b, 0xe5, 0x33, 0xee, 0xd2, 0x45, 0x5a, 0x7a, 0x55, 0x1b, 0x29, 0x7d, 0x1e, 0x9c, 0xa8, 0xa8, 0xee, 0xdd, 0xe1, 0x6d, 0xd0, 0xb3, 0x5d, 0x32, 0xcd, 0x7c, 0x9c, 0x33, 0x3b, 0xbc, 0x8b, 0xb4, 0xb5, 0x24, 0x21, 0x14, 0x50, 0x7e, 0x11, 0x3d, 0x2f, 0xa7, 0xdf, 0x17, 0xde, 0xcb, 0xf6, 0x14, 0xf3, 0x58, 0xea, 0xdd, 0x7f, 0xde, 0x89, 0x5c, 0xad, 0x3f, 0x4c, 0x5e, 0xea, 0x8b, 0xaa, 0x76, 0x8f, 0xc4, 0xeb, 0x7a, 0x7d, 0xb8, 0xfe, 0xe4, 0xe4, 0xa4, 0x7c, 0xbe, 0x06, 0xdb, 0x21, 0x0b, 0x65, 0x3c, 0xe4, 0x4f, 0x22, 0x3a, 0x5a, 0xe5, 0x91, 0x0e, 0xf5, 0x25, 0xb4, 0x37, 0x66, 0xcf, 0x71, 0x39, 0xe0, 0x64, 0xf9, 0xe0, 0x9f, 0xef, 0x4e, 0x7a, 0x07, 0x5a, 0x91, 0x4d, 0xde, 0x6a, 0xce, 0x56, 0x3d, 0x4c, 0x74, 0xbd, 0xb9, 0xf3, 0x72, 0xdc, 0x83, 0xf3, 0x12, 0xee, 0xc1, 0xe2, 0x60, 0x3a, 0x33, 0x66, 0xc6, 0x41, 0x38, 0x12, 0x39, 0x35, 0x77, 0xba, 0x84, 0xf2, 0xc1, 0x8b, 0x23, 0xa9, 0xbc, 0x9d, 0x4a, 0xde, 0x04, 0x8b, 0x6b, 0xa5, 0x8e, 0xb4, 0x28, 0x05, 0xad, 0xcf, 0x93, 0x38, 0x83, 0x4d, 0xae, 0x8a, 0x93, 0x83, 0x1b, 0xc2, 0x55, 0x22, 0x3b, 0x55, 0x19, 0x75, 0xce, 0x1d, 0x8f, 0x60, 0xdf, 0xe5, 0xc1, 0x47, 0x15, 0x0f, 0xed, 0x2f, 0x10, 0x7e, 0x37, 0x37, 0xe8, 0x6d, 0xd1, 0xe6, 0x15, 0x1b, 0xa7, 0x92, 0x55, 0xf0, 0x9f, 0x7b, 0x43, 0x3d, 0xcb, 0x75, 0x3b, 0x7b, 0xc2, 0x9f, 0x88, 0xa1, 0x83, 0x03, 0xb3, 0xba, 0x74, 0x10, 0x8a, 0xb3, 0x93, 0x76, 0x08, 0xbf, 0x13, 0xdc, 0x10, 0x71, 0xb2, 0xbb, 0x4c, 0xb2, 0x34, 0x39, 0x0f, 0x8e, 0x57, 0x70, 0xeb, 0x79, 0xb8, 0xea, 0x9a, 0x7f, 0xde, 0x65, 0x09, 0xbd, 0xfb, 0xea, 0x47, 0x81, 0xbc, 0x59, 0x66, 0xf8, 0x99, 0xa7, 0xc6, 0x17, 0xf4, 0x85, 0x3f, 0x20, 0x8f, 0x10, 0x7c, 0xdd, 0xac, 0x9a, 0x2f, 0x1f, 0xa0, 0x3b, 0x37, 0xce, 0x56, 0xc4, 0xd5, 0x56, 0x30, 0xcc, 0x68, 0x86, 0xb3, 0xf2, 0xf1, 0x1b, 0x3b, 0xe5, 0x7f, 0x92, 0x2f, 0xb0, 0xbf, 0x7f, 0x62, 0x7f, 0xcf, 0xe3, 0xdf, 0x21, 0xf9, 0x4b, 0xa7, 0x5e, 0x7b, 0x1f, 0x96, 0x47, 0x7b, 0xdc, 0x9a, 0x40, 0xab, 0x7c, 0x9e, 0x74, 0x25, 0x64, 0xe7, 0xb7, 0x3c, 0xf2, 0xc7, 0x79, 0x0e, 0x41, 0x67, 0x14, 0x70, 0xb9, 0x15, 0x6e, 0xf4, 0xc8, 0x7f, 0x70, 0x0b, 0x1d, 0x13, 0x3f, 0x6e, 0x22, 0x2a, 0x89, 0x5f, 0xa7, 0x50, 0x7e, 0x38, 0x39, 0xa3, 0x52, 0x1e, 0x66, 0xba, 0x23, 0x6c, 0x2d, 0x0d, 0xb6, 0x25, 0xd6, 0xd1, 0x7f, 0x1b, 0xa8, 0x7e, 0x6d, 0xa5, 0xe0, 0x3d, 0x2b, 0x9f, 0x9b, 0x11, 0x90, 0xcf, 0x5a, 0xaf, 0xf9, 0x4e, 0x37, 0xf6, 0x67, 0xbe, 0xf7, 0xec, 0x30, 0xe0, 0xf7, 0x39, 0x0b, 0x59, 0x78, 0x38, 0x22, 0xce, 0x94, 0x87, 0xfb, 0x69, 0x5c, 0x33, 0x25, 0xf1, 0xe5, 0x01, 0x5c, 0x0d, 0x3f, 0xa8, 0x8d, 0xcf, 0xf0, 0xc8, 0xc3, 0x14, 0x2e, 0x7a, 0x0c, 0xd5, 0xb8, 0xc6, 0x9e, 0x94, 0xb4, 0x97, 0x84, 0x69, 0x5e, 0x1e, 0xa8, 0x3f, 0xdd, 0xff, 0x9c, 0x7c, 0xb6, 0x01, 0x84, 0x6d, 0x2e, 0xd5, 0x8c, 0x0a, 0xf9, 0x40, 0xd5, 0xc3, 0x75, 0xbd, 0x96, 0x56, 0xf9, 0x80, 0x01, 0xe7, 0x0e, 0x62, 0xc9, 0x80, 0x4b, 0x55, 0xf5, 0x70, 0xb1, 0x87, 0xfe, 0x62, 0x3d, 0xff, 0x9d, 0x9e, 0xd9, 0x64, 0x1b, 0xe1, 0x61, 0x33, 0xfb, 0x9b, 0x85, 0x7f, 0x67, 0x78, 0xe5, 0x63, 0x2c, 0xf6, 0x4c, 0xb2, 0x1f, 0x12, 0x7d, 0x42, 0xfd, 0x33, 0x22, 0x7f, 0xe9, 0xce, 0xc4, 0xd8, 0x8b, 0x37, 0xb6, 0xca, 0xff, 0x2e, 0xff, 0xf9, 0xc6, 0x12, 0x79, 0xf0, 0x46, 0xbf, 0x3c, 0x44, 0xfa, 0x1a, 0x89, 0xfe, 0x19, 0x31, 0x58, 0x66, 0xca, 0xc7, 0x3e, 0xaa, 0xf0, 0x95, 0x4f, 0x9e, 0x29, 0x9f, 0xe9, 0x2e, 0xa7, 0x7b, 0x6b, 0x54, 0x87, 0xed, 0x1e, 0xac, 0xc1, 0x45, 0x77, 0x66, 0xff, 0x4c, 0xf9, 0x14, 0xbe, 0x7d, 0x96, 0x35, 0x53, 0xfe, 0xf7, 0xed, 0x33, 0xe5, 0x3f, 0xd0, 0x89, 0x9c, 0x41, 0x43, 0xfb, 0xa2, 0xf0, 0x7e, 0x50, 0xdd, 0x0e, 0x70, 0xd8, 0xa8, 0xa6, 0x7d, 0x13, 0x66, 0x65, 0xb6, 0xae, 0xbf, 0xa7, 0x15, 0x60, 0x6f, 0x8d, 0x9a, 0xfb, 0xd4, 0x90, 0x87, 0x10, 0x6a, 0x27, 0x9b, 0x3d, 0x00, 0xcf, 0x8b, 0xad, 0xf2, 0xb9, 0x17, 0x3f, 0x95, 0x87, 0x17, 0x21, 0xf7, 0x39, 0x59, 0x1d, 0xf8, 0x71, 0xe0, 0x57, 0xe2, 0x38, 0xb6, 0xe2, 0xb6, 0xca, 0xc7, 0x7f, 0x3b, 0x20, 0x56, 0xf9, 0xfc, 0xd8, 0x9e, 0x80, 0x7c, 0x8c, 0xf7, 0x04, 0x42, 0x1f, 0x33, 0x0e, 0x84, 0xfc, 0x4a, 0x8f, 0xf8, 0x91, 0x6e, 0x1f, 0x27, 0x5d, 0xbd, 0x0b, 0x3b, 0x59, 0xeb, 0x77, 0x5f, 0x78, 0x3e, 0x4f, 0xf3, 0x51, 0x85, 0xca, 0x03, 0x72, 0xb7, 0xa7, 0xba, 0xd7, 0x3d, 0x53, 0xfe, 0xd8, 0xdd, 0xa9, 0x12, 0xbe, 0xe5, 0x95, 0x8f, 0x12, 0x3c, 0xe6, 0x71, 0x58, 0x9a, 0x5c, 0x08, 0xc7, 0x2b, 0xb9, 0x8d, 0x42, 0xa4, 0x4d, 0x93, 0x7f, 0xb6, 0xc6, 0xd2, 0x2c, 0x64, 0xbe, 0xbb, 0xef, 0xa3, 0x40, 0xe1, 0xac, 0x00, 0xbc, 0xec, 0xa9, 0x09, 0xe4, 0xe9, 0xc2, 0xc7, 0xf2, 0x66, 0xb2, 0x14, 0x87, 0xb1, 0xbd, 0x7a, 0x31, 0xe3, 0xf3, 0x2d, 0x5d, 0x5b, 0xe1, 0x5c, 0xf5, 0x6b, 0xbc, 0x35, 0xb9, 0x19, 0x1f, 0xbd, 0x20, 0x8e, 0xc3, 0x15, 0x19, 0xc3, 0x70, 0x4d, 0x36, 0xfb, 0x88, 0xa2, 0x4c, 0x62, 0x3a, 0x63, 0x5b, 0xd8, 0x3e, 0xb3, 0x3e, 0x61, 0x03, 0x00, 0x39, 0xaf, 0xbb, 0xc3, 0xc1, 0x59, 0xb4, 0xaf, 0x76, 0xb7, 0x75, 0x31, 0x52, 0x3c, 0x87, 0x40, 0xfe, 0x2e, 0x05, 0x58, 0x71, 0xbd, 0x57, 0x80, 0xa0, 0x1d, 0xaa, 0x23, 0x1c, 0xff, 0x7e, 0x24, 0x11, 0xbf, 0x77, 0x91, 0x60, 0xae, 0xf7, 0x90, 0x2f, 0xed, 0x2c, 0x3b, 0x54, 0xb1, 0x9d, 0x9b, 0x4d, 0x03, 0x6e, 0x33, 0xe9, 0xcc, 0x0f, 0x13, 0x65, 0x23, 0x9a, 0x9a, 0x38, 0x2f, 0x08, 0x2e, 0x86, 0xbb, 0x23, 0x16, 0x1f, 0xfe, 0x4d, 0xd0, 0x52, 0x9e, 0xf3, 0x75, 0x5e, 0xa2, 0x8e, 0xf2, 0x45, 0xb1, 0x89, 0xa7, 0x61, 0xf3, 0x57, 0x4c, 0xf8, 0x56, 0x28, 0x40, 0xce, 0x36, 0xe8, 0x80, 0xea, 0x70, 0x1e, 0xdb, 0x89, 0xaf, 0xa6, 0xd3, 0x1f, 0x9c, 0x0d, 0xdb, 0x94, 0x67, 0x19, 0x3b, 0x17, 0x2a, 0x89, 0x98, 0x5c, 0xfc, 0xae, 0x98, 0x09, 0x39, 0x7c, 0x63, 0xe5, 0x87, 0x1a, 0x94, 0xd8, 0xff, 0x7c, 0x80, 0x9e, 0xcc, 0x43, 0x30, 0x9d, 0x2b, 0x50, 0x8e, 0x56, 0xa4, 0xcd, 0x53, 0xdc, 0xc5, 0x8f, 0xfe, 0xaf, 0xe0, 0x12, 0x3e, 0x33, 0x5e, 0x9a, 0x93, 0x5f, 0xec, 0x81, 0xa0, 0x3a, 0xac, 0xc2, 0x95, 0xcf, 0x93, 0x92, 0xfa, 0xe5, 0x55, 0xc4, 0x43, 0xdb, 0xb1, 0xf5, 0xa7, 0x46, 0xf3, 0xd1, 0xe7, 0x67, 0x75, 0x6a, 0x01, 0xc8, 0x33, 0xeb, 0x79, 0xb6, 0x97, 0x57, 0xfc, 0x08, 0xa6, 0xa6, 0x9c, 0x1e, 0x02, 0x5c, 0x0f, 0x1f, 0xe7, 0x10, 0x48, 0x6c, 0x1e, 0xe3, 0x6f, 0x71, 0x15, 0x3c, 0xaa, 0xbc, 0x19, 0x61, 0x13, 0xbd, 0x89, 0x48, 0xe1, 0x98, 0xdc, 0x4d, 0xa1, 0xc8, 0x65, 0x27, 0x9f, 0x64, 0xc5, 0xf9, 0x64, 0xa2, 0x5e, 0xe3, 0x0e, 0xf0, 0x15, 0xee, 0xbc, 0x18, 0x13, 0x44, 0xc1, 0x8a, 0xf5, 0xf8, 0xfd, 0x16, 0xe2, 0xef, 0x91, 0x83, 0x41, 0xfe, 0xfe, 0xf7, 0xcf, 0xc4, 0xbb, 0x52, 0x92, 0x2c, 0xcf, 0xdf, 0x03, 0x4a, 0x5e, 0x54, 0xfa, 0xa3, 0x89, 0xba, 0xef, 0x8d, 0x57, 0xf7, 0x46, 0xb2, 0x46, 0x71, 0xf2, 0x22, 0xf3, 0x6e, 0x91, 0x3d, 0x2a, 0xcc, 0x86, 0x29, 0x2f, 0x1a, 0x8d, 0xfe, 0x81, 0x88, 0xaa, 0xe3, 0x26, 0xe2, 0xd6, 0x2a, 0x73, 0x52, 0xba, 0x7f, 0x24, 0x17, 0xd3, 0x08, 0x44, 0x26, 0xfb, 0x1c, 0x89, 0xfe, 0x1f, 0x71, 0xe2, 0xca, 0x8b, 0x3d, 0x8d, 0xb2, 0x8e, 0x81, 0x56, 0x4e, 0x09, 0xbe, 0xda, 0x93, 0x5c, 0x41, 0xe9, 0x54, 0x87, 0xe5, 0x76, 0x37, 0xae, 0x5d, 0x4c, 0xb6, 0xa6, 0xdb, 0xb2, 0x26, 0xb2, 0xd5, 0xa0, 0xec, 0x82, 0xf7, 0xd1, 0xfa, 0x3c, 0x6a, 0x55, 0x5c, 0x42, 0xab, 0x22, 0xd3, 0xc2, 0x2a, 0xa2, 0x96, 0x57, 0x0c, 0x5e, 0xcc, 0xaa, 0xda, 0xc8, 0x6b, 0x45, 0x23, 0xac, 0x43, 0xb8, 0xb0, 0x8d, 0xdd, 0xa3, 0xde, 0x7d, 0x91, 0xdf, 0x24, 0xcd, 0x63, 0x3d, 0xc4, 0xee, 0xad, 0xc2, 0xb7, 0x78, 0x6f, 0x5d, 0xf4, 0xb1, 0xf5, 0x20, 0x19, 0x5b, 0x31, 0xf8, 0xe5, 0x5b, 0x55, 0x1b, 0xf9, 0x09, 0x5d, 0xd5, 0xee, 0x2f, 0x8f, 0xa7, 0xa7, 0x23, 0xc8, 0x8e, 0x7b, 0xb1, 0x9c, 0x4c, 0x29, 0x9b, 0xbc, 0xd2, 0xd0, 0x7a, 0x90, 0xcc, 0x69, 0x63, 0x0d, 0x72, 0x16, 0xbc, 0x74, 0x56, 0xf2, 0x07, 0x69, 0x29, 0x77, 0x7f, 0xb9, 0xc2, 0xb7, 0x04, 0x0a, 0x98, 0x57, 0x40, 0x46, 0xdf, 0x73, 0x50, 0x82, 0x47, 0x79, 0x13, 0x71, 0x95, 0xdd, 0x8b, 0xff, 0x86, 0x4b, 0xf9, 0x4b, 0x21, 0x08, 0xfd, 0x49, 0x82, 0xef, 0x15, 0xdd, 0x89, 0x5e, 0x40, 0x0e, 0xe5, 0x3a, 0x9c, 0x59, 0x7a, 0x85, 0xde, 0xcc, 0x80, 0x2a, 0xb2, 0xd1, 0xe0, 0x6e, 0x16, 0x74, 0x64, 0xf9, 0xbf, 0xbf, 0x27, 0xa2, 0xf1, 0xe1, 0x4c, 0xbd, 0x7e, 0x09, 0x54, 0x09, 0x7a, 0xe4, 0x86, 0x55, 0xb3, 0x3d, 0x82, 0x8e, 0xf7, 0xdc, 0xf0, 0x9d, 0x2e, 0x7d, 0x54, 0x18, 0xe8, 0x76, 0xc1, 0x09, 0x7d, 0xf4, 0x47, 0x03, 0xdd, 0x7c, 0xed, 0x96, 0xbb, 0x5d, 0xec, 0x8c, 0x0c, 0x7b, 0xd6, 0x44, 0x74, 0x2f, 0x08, 0x11, 0x2d, 0xe5, 0x20, 0xe5, 0x61, 0xde, 0x0b, 0xd8, 0xae, 0x16, 0x8d, 0x94, 0xc9, 0x35, 0x97, 0x7b, 0x20, 0x91, 0xe0, 0x8b, 0x4e, 0x76, 0x2b, 0x63, 0x4c, 0xe8, 0x9f, 0xef, 0x46, 0xaa, 0x40, 0x1e, 0x4a, 0x96, 0xb1, 0x99, 0x70, 0xa5, 0x16, 0x99, 0x78, 0x8b, 0xd2, 0x47, 0xfa, 0x2e, 0x36, 0xd2, 0xc4, 0x3d, 0x55, 0x9f, 0xc4, 0x3a, 0x6f, 0x81, 0x73, 0xbe, 0x26, 0x81, 0xcf, 0xbd, 0xe2, 0xc4, 0xdc, 0xbb, 0xa4, 0xc5, 0x00, 0x47, 0x91, 0x9b, 0xa0, 0x1b, 0x78, 0x07, 0x78, 0xeb, 0x86, 0x56, 0xe0, 0x4a, 0x3a, 0x03, 0xf2, 0xff, 0x30, 0xf7, 0x9e, 0x92, 0xea, 0x5e, 0x9f, 0x6a, 0x85, 0x30, 0x77, 0xf0, 0xab, 0xbd, 0x15, 0x83, 0x23, 0xfb, 0xa4, 0x06, 0xb7, 0x1a, 0x69, 0xe4, 0xb8, 0xf0, 0x24, 0x06, 0xf9, 0x08, 0xed, 0x14, 0x86, 0x33, 0x7d, 0x98, 0x9a, 0x76, 0x6b, 0x3b, 0x26, 0x23, 0x9d, 0x7e, 0x90, 0x62, 0x88, 0x1f, 0x12, 0xc6, 0x2b, 0x77, 0xa3, 0x0d, 0xd8, 0x0f, 0x2a, 0x13, 0x04, 0x4b, 0xda, 0xac, 0xd4, 0xb7, 0x2e, 0x1d, 0x3b, 0xa1, 0x55, 0xf3, 0xbd, 0xd6, 0x44, 0x5a, 0xcc, 0x49, 0x15, 0xae, 0xee, 0x30, 0x49, 0x95, 0x35, 0x25, 0xac, 0x66, 0x75, 0x16, 0x8d, 0x22, 0xbf, 0x10, 0xb5, 0xec, 0x31, 0xcc, 0x40, 0xcc, 0x5c, 0x10, 0xd6, 0xf3, 0x1a, 0xfe, 0xd1, 0x87, 0x78, 0x8f, 0x6f, 0x1c, 0xa3, 0x86, 0x9e, 0x36, 0x01, 0xb3, 0x3b, 0x84, 0x58, 0xf1, 0xa7, 0x7a, 0xca, 0x91, 0x9d, 0x94, 0xa8, 0x7c, 0x2a, 0x9a, 0x43, 0xc5, 0x39, 0x09, 0x9b, 0xf5, 0x4c, 0xd6, 0xa5, 0x7e, 0xf0, 0xd0, 0x5e, 0x7f, 0x70, 0x06, 0xdc, 0x41, 0xbe, 0x56, 0x94, 0x9c, 0x31, 0xa3, 0xc4, 0xec, 0x6b, 0xa6, 0x33, 0x18, 0xfd, 0xed, 0x33, 0xa0, 0x96, 0xb4, 0xcf, 0x2f, 0xf4, 0xb0, 0x56, 0x82, 0x60, 0xf3, 0x6d, 0x03, 0xd1, 0xee, 0x44, 0x99, 0xc9, 0x09, 0x56, 0x47, 0x0b, 0xd8, 0x57, 0x91, 0xcc, 0xa3, 0xe5, 0xb5, 0xa5, 0x95, 0x07, 0x47, 0x46, 0x93, 0xb8, 0xd7, 0x60, 0x82, 0xab, 0x62, 0x56, 0x0e, 0x6f, 0xc7, 0x48, 0x13, 0xb5, 0x9d, 0x70, 0x84, 0xf5, 0x03, 0xed, 0x67, 0x02, 0xec, 0xe7, 0x18, 0xa7, 0xf2, 0x81, 0x3c, 0xdb, 0x27, 0xe8, 0x4c, 0x98, 0x7b, 0x27, 0xe4, 0xa8, 0x44, 0x4d, 0x6c, 0xfc, 0x89, 0x2d, 0x09, 0x7d, 0xd0, 0x45, 0x03, 0xd5, 0xbd, 0xb6, 0x0c, 0x0c, 0x79, 0x36, 0x0b, 0x0e, 0xa9, 0x77, 0x08, 0x8d, 0xda, 0x3d, 0xab, 0x1b, 0x55, 0x26, 0x21, 0x4b, 0xb5, 0x01, 0xa6, 0x78, 0xe1, 0xd6, 0x6c, 0x20, 0x4f, 0x49, 0x4c, 0x8f, 0x4b, 0xe3, 0x2a, 0x85, 0x5c, 0xa9, 0x18, 0xa5, 0x21, 0xb5, 0xa8, 0xe9, 0x7b, 0x01, 0xf2, 0xa9, 0xae, 0x0e, 0xcd, 0xef, 0x9e, 0xb3, 0x94, 0x7a, 0xff, 0xc4, 0x74, 0xea, 0xce, 0x72, 0xce, 0x2c, 0x79, 0xe2, 0xb0, 0x4e, 0x1c, 0x77, 0x8a, 0xad, 0x5c, 0x8c, 0x9f, 0x33, 0x84, 0xd4, 0x3b, 0xd4, 0xf5, 0x03, 0x76, 0xad, 0x03, 0xb9, 0x69, 0xc6, 0x95, 0xdf, 0x2a, 0x0a, 0x1d, 0xe3, 0x7f, 0xbf, 0xe5, 0xdf, 0x07, 0x8e, 0xc6, 0x1f, 0x8d, 0x1f, 0xa4, 0x33, 0xb2, 0xb5, 0xb8, 0x9e, 0x5d, 0xc4, 0xf5, 0x4c, 0x1f, 0x9d, 0x22, 0x69, 0xa3, 0x37, 0xe1, 0xba, 0x96, 0xa3, 0xc8, 0x9a, 0x06, 0xe5, 0x5e, 0x37, 0xc9, 0x99, 0xed, 0xfc, 0x6e, 0xb7, 0xd2, 0xf3, 0x79, 0x69, 0xfd, 0xed, 0x50, 0x28, 0x52, 0x5d, 0xaa, 0xdf, 0xff, 0xc4, 0x75, 0x0d, 0xa8, 0xe7, 0x35, 0xc9, 0x31, 0x52, 0xd1, 0x18, 0x58, 0x71, 0x0c, 0xec, 0x34, 0x06, 0x4e, 0xb0, 0xcf, 0x1d, 0xfc, 0x63, 0x34, 0x97, 0xee, 0xd2, 0xe4, 0x77, 0xe2, 0x68, 0xc0, 0x6e, 0xb2, 0xf6, 0xc4, 0x77, 0xee, 0x6d, 0xc0, 0xf3, 0xbc, 0xb8, 0x55, 0xc1, 0x8d, 0x47, 0xd8, 0x9c, 0x5d, 0xed, 0x02, 0x51, 0x7d, 0x22, 0xce, 0x67, 0xec, 0xd0, 0x01, 0x3e, 0x7a, 0x62, 0x29, 0xd2, 0xe1, 0xb3, 0x8c, 0x7b, 0x48, 0xf6, 0x81, 0x82, 0x85, 0x5a, 0x8e, 0x85, 0xc8, 0x15, 0x2b, 0x94, 0x60, 0x76, 0x89, 0x40, 0xf7, 0xe7, 0xc4, 0xd1, 0x18, 0x79, 0xae, 0x3f, 0x1d, 0x23, 0xff, 0x6c, 0x4a, 0x1f, 0x57, 0x3e, 0x07, 0xc2, 0x65, 0x29, 0x4c, 0x79, 0x3f, 0x7e, 0x98, 0xf5, 0x1b, 0x0f, 0xf9, 0xdd, 0x96, 0xcd, 0xf1, 0x54, 0x5c, 0xff, 0x9a, 0x45, 0x20, 0x17, 0x25, 0xf0, 0xf9, 0x8b, 0x0d, 0x38, 0x03, 0x2f, 0xe9, 0x57, 0x4e, 0xc7, 0x98, 0x5e, 0x25, 0xd2, 0x32, 0xd7, 0x84, 0xdb, 0x1d, 0xbc, 0xcf, 0xfe, 0x78, 0x8c, 0xed, 0xdd, 0x4f, 0x62, 0x6b, 0xf4, 0x02, 0xe5, 0x3c, 0x2e, 0x79, 0x1a, 0x41, 0x7a, 0x5f, 0xb4, 0x1f, 0xee, 0x7b, 0x16, 0xce, 0x7d, 0xa3, 0x99, 0x51, 0xb5, 0x25, 0x02, 0xdf, 0x81, 0xdf, 0xfd, 0xe5, 0x1a, 0xa2, 0x5c, 0xec, 0xce, 0xf7, 0xee, 0xc1, 0xdd, 0xcc, 0xaf, 0xfd, 0x98, 0xd4, 0x04, 0xc7, 0xe8, 0x7e, 0xa1, 0xd2, 0x9e, 0x06, 0x9e, 0xf2, 0xd3, 0x5d, 0xec, 0x64, 0xbf, 0x3a, 0x88, 0xb9, 0x86, 0x83, 0x4a, 0xaa, 0x2c, 0x4c, 0x35, 0x3e, 0x91, 0x0a, 0xd7, 0xcf, 0x1e, 0xcb, 0x0c, 0xe4, 0x83, 0xa8, 0x25, 0x9a, 0x10, 0x9c, 0xb8, 0x3f, 0xd8, 0x15, 0xbe, 0x88, 0x6b, 0x28, 0x49, 0x4d, 0x75, 0x27, 0x74, 0x5c, 0xa2, 0xb2, 0x40, 0xa8, 0x6b, 0x7b, 0x77, 0x4b, 0x26, 0x3b, 0x11, 0x5a, 0x20, 0x69, 0x95, 0x36, 0xd0, 0xa9, 0xe0, 0x15, 0xda, 0x43, 0xed, 0xe0, 0x74, 0x32, 0x71, 0x86, 0x87, 0x58, 0xe6, 0xc1, 0x1e, 0xf1, 0x93, 0x5f, 0x56, 0x8e, 0x65, 0xaa, 0xcc, 0x14, 0x46, 0x7d, 0xf1, 0x8a, 0x32, 0x93, 0x47, 0x30, 0x2e, 0x39, 0x72, 0x23, 0x28, 0x71, 0x11, 0x56, 0xe5, 0xd2, 0xcc, 0xa6, 0xbb, 0x03, 0xe4, 0xef, 0x36, 0x2f, 0x45, 0x01, 0x7d, 0x2e, 0xb8, 0xcd, 0xa7, 0xb2, 0x93, 0xbf, 0xae, 0x27, 0x69, 0x2e, 0xa2, 0x2c, 0x79, 0x5b, 0x44, 0x8f, 0x72, 0x0f, 0xca, 0x67, 0xe7, 0x8e, 0xd7, 0xf5, 0x2a, 0x14, 0xd1, 0xa8, 0x60, 0xdb, 0xa3, 0x6c, 0x04, 0x40, 0xe8, 0x8e, 0x8e, 0xff, 0x68, 0xab, 0xaa, 0x1b, 0x0b, 0x43, 0x8c, 0xe4, 0xde, 0x25, 0x89, 0x2e, 0x14, 0x79, 0x56, 0xc2, 0xa4, 0x4b, 0x69, 0x83, 0x8e, 0x68, 0xc3, 0xee, 0x9e, 0xc8, 0x64, 0x9e, 0xcb, 0x60, 0xb5, 0x09, 0x2e, 0xa5, 0x0c, 0x82, 0xfb, 0x8a, 0xe9, 0xb2, 0x28, 0x1d, 0x3f, 0xbd, 0x31, 0x01, 0xd7, 0x97, 0xf6, 0xa9, 0x70, 0xae, 0x62, 0x7d, 0x9d, 0x5e, 0xe2, 0x8b, 0x91, 0x72, 0x64, 0xa6, 0x28, 0xc7, 0x24, 0xe0, 0xd4, 0x24, 0x27, 0xe3, 0x18, 0xec, 0x41, 0x98, 0x7a, 0xcd, 0x2f, 0x06, 0x1a, 0x72, 0xdd, 0xd7, 0x84, 0x00, 0xb9, 0xec, 0xff, 0x55, 0x2f, 0xba, 0xf4, 0x63, 0x4e, 0x57, 0x49, 0x32, 0xed, 0xa0, 0xf9, 0xc8, 0x6c, 0xd6, 0xde, 0x96, 0x83, 0x69, 0x8c, 0xda, 0xbe, 0x8c, 0x29, 0x1e, 0x98, 0xf5, 0x0f, 0x6f, 0x63, 0x39, 0x74, 0x16, 0x50, 0xe8, 0xbe, 0xc6, 0xe1, 0xbf, 0xbd, 0x04, 0x72, 0xb3, 0x41, 0x2a, 0xc2, 0x1a, 0x66, 0xd0, 0x0e, 0xd4, 0x5e, 0x6c, 0x41, 0xc4, 0x61, 0x07, 0xc4, 0xec, 0x6d, 0xa2, 0x1f, 0xa9, 0x4f, 0xe1, 0xef, 0xb6, 0x1c, 0x44, 0x8a, 0x83, 0xdc, 0x68, 0xde, 0xbb, 0x03, 0x63, 0xe9, 0x4e, 0x48, 0x1d, 0xca, 0xd8, 0x93, 0x51, 0xbf, 0xd7, 0xa8, 0x46, 0x7e, 0x33, 0xd7, 0x7e, 0x4d, 0xbf, 0x0b, 0x66, 0x35, 0x64, 0x51, 0x4f, 0xd4, 0x94, 0x04, 0x69, 0x1d, 0x98, 0xac, 0x2a, 0x91, 0x2f, 0x4a, 0x66, 0xe6, 0x43, 0x86, 0xd1, 0xa0, 0x83, 0x2f, 0x40, 0xde, 0x07, 0xf1, 0xcd, 0x6c, 0x36, 0xf9, 0x54, 0xc1, 0x35, 0x11, 0x7d, 0xb0, 0xa4, 0x05, 0x46, 0xea, 0x90, 0xb7, 0x9a, 0xcc, 0x46, 0x2a, 0x8b, 0x8f, 0xd4, 0xe7, 0x05, 0x64, 0x57, 0xa4, 0x03, 0x67, 0x50, 0xc7, 0x94, 0xe4, 0x3e, 0x98, 0x91, 0xeb, 0x4e, 0x91, 0xbe, 0xdb, 0xec, 0x6d, 0x30, 0xe4, 0x59, 0xd1, 0x35, 0x5d, 0xed, 0xc4, 0xf7, 0xb7, 0xf0, 0x77, 0x02, 0x86, 0x0a, 0x3a, 0xb8, 0xa2, 0x55, 0x64, 0x61, 0x6b, 0x63, 0xb4, 0x3d, 0xd6, 0x31, 0x5a, 0xdd, 0x6d, 0x4c, 0x28, 0x69, 0xbb, 0xcd, 0xfa, 0x9f, 0xd0, 0x76, 0xbb, 0xad, 0x16, 0x7f, 0x06, 0xfc, 0x69, 0xf0, 0xa7, 0x83, 0xa1, 0x39, 0x79, 0x30, 0x74, 0xfb, 0x88, 0xe2, 0xcb, 0xfd, 0x1d, 0xac, 0x75, 0x9d, 0x02, 0xb7, 0x17, 0x32, 0x40, 0x0f, 0x13, 0x70, 0x48, 0xaf, 0x81, 0xf1, 0x1e, 0x0a, 0x6b, 0x82, 0xc5, 0xd0, 0x5c, 0xae, 0xd4, 0x5b, 0xbc, 0xd3, 0xd7, 0xb2, 0xb0, 0x6d, 0x89, 0xb8, 0xb4, 0x31, 0xb6, 0xbc, 0x31, 0x06, 0xed, 0xed, 0xd1, 0x5c, 0xa6, 0xca, 0x16, 0xfb, 0x21, 0x34, 0x2d, 0x6e, 0x68, 0xc8, 0x6d, 0x6d, 0x5f, 0xb6, 0xb4, 0x11, 0xd8, 0xdf, 0x5c, 0x0a, 0x18, 0xe3, 0x9f, 0x7c, 0xa8, 0x68, 0x5f, 0xea, 0xfd, 0x9b, 0xcd, 0xa9, 0xf7, 0xc2, 0xa3, 0x09, 0xa0, 0xab, 0xeb, 0xa6, 0x15, 0x1c, 0xbb, 0xba, 0x6e, 0x5a, 0x81, 0xe7, 0xeb, 0xea, 0xa6, 0x15, 0x14, 0xfe, 0x65, 0xdd, 0xb4, 0x82, 0x93, 0xff, 0x69, 0xdd, 0x34, 0xe1, 0x2f, 0xe9, 0xa6, 0x15, 0xe8, 0xae, 0xac, 0x9b, 0x56, 0x60, 0x1e, 0xab, 0x9b, 0x56, 0x70, 0xfe, 0x6a, 0xba, 0x69, 0x05, 0xee, 0xb1, 0xba, 0x69, 0x05, 0xe2, 0xa5, 0xba, 0x69, 0x05, 0xc6, 0xff, 0xbc, 0x6e, 0x9a, 0xa2, 0xcb, 0xd4, 0x33, 0x4a, 0x0b, 0xad, 0x3b, 0x65, 0x99, 0x4e, 0xf1, 0x4b, 0x7e, 0xdf, 0x25, 0x21, 0x8a, 0xa7, 0x72, 0x6e, 0x81, 0x08, 0x29, 0x13, 0x69, 0x40, 0xec, 0xc7, 0xdf, 0x1b, 0xde, 0xd3, 0x90, 0x97, 0x9c, 0xc3, 0x87, 0xf0, 0x4b, 0x1a, 0xf5, 0x65, 0x4b, 0xf3, 0x71, 0xed, 0x10, 0xef, 0x67, 0xf4, 0x7d, 0x13, 0xa6, 0xfb, 0xe9, 0xb4, 0x20, 0x3c, 0x46, 0x27, 0xfe, 0x7f, 0xb7, 0x0d, 0x9e, 0xa0, 0xe7, 0x9c, 0x1c, 0xd8, 0x89, 0xf0, 0x03, 0xd3, 0x02, 0xb0, 0x9d, 0xbe, 0x0b, 0x1e, 0x85, 0xe7, 0x11, 0xee, 0x39, 0x96, 0x62, 0x5b, 0x34, 0x03, 0xd3, 0x3f, 0x95, 0x6c, 0x57, 0x1d, 0x79, 0x35, 0x77, 0x26, 0xbd, 0x9a, 0xbb, 0x49, 0xdb, 0x3f, 0xdf, 0xae, 0x58, 0x8e, 0x89, 0x0a, 0xfd, 0xdd, 0x0d, 0x7a, 0xf2, 0x15, 0xce, 0xbc, 0x38, 0xe5, 0x1a, 0x5a, 0xc0, 0x05, 0x59, 0x8b, 0x40, 0x98, 0x84, 0xab, 0xd4, 0xee, 0x70, 0x36, 0xd1, 0x1d, 0xad, 0x27, 0x7d, 0x27, 0xea, 0x16, 0x0f, 0xec, 0xa6, 0x38, 0xe4, 0x82, 0x2f, 0x44, 0x4d, 0xe9, 0x77, 0xcc, 0xe4, 0x22, 0xf2, 0x65, 0x1e, 0xd6, 0x51, 0x6e, 0xb8, 0x82, 0x9e, 0x10, 0x3d, 0x28, 0x27, 0x6a, 0xe8, 0x6c, 0xb0, 0xe0, 0xc5, 0x68, 0x8a, 0x76, 0x1d, 0x65, 0x96, 0x4a, 0x29, 0x8f, 0x37, 0xc3, 0x76, 0x92, 0xc0, 0x0b, 0x7e, 0xe1, 0xf4, 0xd0, 0xf9, 0x12, 0xe6, 0xfc, 0x66, 0x38, 0x9b, 0x52, 0x27, 0x6e, 0xce, 0x91, 0x17, 0x72, 0xa6, 0x8f, 0xd3, 0x87, 0xd0, 0x96, 0x70, 0x94, 0xe5, 0xb5, 0x3f, 0x3d, 0x2f, 0x4c, 0x63, 0x89, 0xd4, 0xd9, 0x66, 0xc0, 0x9b, 0xa5, 0xb8, 0x12, 0x23, 0x26, 0x98, 0x53, 0xd6, 0x58, 0x5c, 0x25, 0xe4, 0x5b, 0x1b, 0xe7, 0xdf, 0x71, 0xb0, 0x87, 0x98, 0x47, 0x37, 0xf2, 0x8b, 0xc8, 0xfc, 0x10, 0x51, 0x99, 0xa4, 0x25, 0x78, 0x02, 0xd3, 0x93, 0xb6, 0x90, 0x21, 0xe9, 0x77, 0x7c, 0x06, 0x58, 0xb0, 0xd4, 0x3c, 0x5c, 0x31, 0x2d, 0x09, 0x0b, 0x14, 0xac, 0x1e, 0x74, 0xd6, 0x4f, 0x75, 0xd0, 0x71, 0xbf, 0xea, 0xb4, 0xc3, 0x59, 0xf9, 0xe1, 0x02, 0x03, 0xf7, 0xad, 0xce, 0x6c, 0x12, 0x1a, 0x2c, 0x4d, 0x28, 0xcb, 0xa5, 0x69, 0x2d, 0x47, 0x85, 0x74, 0x8d, 0x45, 0xba, 0x63, 0xe1, 0xbe, 0x8e, 0xfc, 0x35, 0x80, 0xaa, 0xde, 0xc4, 0x4f, 0x09, 0x44, 0xcf, 0x41, 0xa4, 0xa8, 0x05, 0x1b, 0xf3, 0xdd, 0x3a, 0x66, 0x25, 0x1e, 0x65, 0x36, 0x2d, 0xf3, 0xcd, 0x6d, 0x66, 0xba, 0x70, 0x06, 0x66, 0x9b, 0xd4, 0x08, 0x3e, 0x88, 0x4b, 0xfa, 0xfc, 0x62, 0x18, 0x91, 0x34, 0xf8, 0x57, 0x4e, 0x9c, 0xad, 0x7f, 0x75, 0x0f, 0x62, 0xf1, 0x2b, 0x88, 0xd1, 0x80, 0xfc, 0xe1, 0xee, 0x83, 0xaf, 0xce, 0xea, 0x36, 0x43, 0x88, 0xf6, 0x4d, 0x5f, 0x49, 0x86, 0x3c, 0x0b, 0xaa, 0xcb, 0x84, 0x69, 0x2e, 0x13, 0xa6, 0x4b, 0x84, 0xd5, 0xf5, 0x1a, 0x3c, 0x42, 0x5f, 0x58, 0xe3, 0x6b, 0x86, 0x57, 0x08, 0x27, 0xe9, 0x46, 0x4f, 0x64, 0x72, 0xe2, 0xbe, 0x85, 0xa5, 0x98, 0xb0, 0x30, 0x0a, 0xae, 0x6b, 0x1c, 0x1e, 0xa6, 0x51, 0x2e, 0x54, 0x2d, 0x73, 0xdc, 0xab, 0xe8, 0x0c, 0x9a, 0x48, 0xdf, 0x52, 0x82, 0xe1, 0xc3, 0xca, 0xd9, 0xb0, 0x9d, 0xce, 0x4d, 0xb0, 0xdd, 0x6e, 0x5f, 0x2d, 0xf3, 0x03, 0xec, 0x00, 0x6b, 0x62, 0x75, 0xc7, 0xd9, 0x8c, 0xf4, 0x44, 0x1e, 0x86, 0x29, 0xcc, 0x13, 0x2d, 0x08, 0x4f, 0x88, 0xe4, 0x93, 0x0f, 0x29, 0xcb, 0xc3, 0x6f, 0x38, 0x9a, 0xc1, 0x9c, 0x7f, 0x3d, 0xb6, 0x4b, 0xe5, 0x5c, 0x02, 0xbb, 0x7f, 0xfb, 0x6a, 0x5e, 0x01, 0xd6, 0xcd, 0x57, 0xd4, 0xcd, 0xc3, 0x97, 0x43, 0x01, 0x0f, 0x7f, 0xad, 0xa0, 0xa0, 0x30, 0x2d, 0x7c, 0x05, 0x14, 0xf2, 0xf0, 0x7d, 0x85, 0x05, 0x81, 0xb4, 0xf0, 0x95, 0x50, 0xc4, 0xc3, 0x7f, 0x59, 0x84, 0x04, 0x9f, 0xc2, 0x0d, 0x5e, 0x38, 0x19, 0xc9, 0xaf, 0xcf, 0xc6, 0xe7, 0xe2, 0x48, 0x35, 0xfe, 0x6d, 0x8e, 0xe4, 0xe1, 0xdf, 0x26, 0x94, 0x28, 0xee, 0x93, 0x8c, 0xf8, 0x76, 0x3a, 0x92, 0xdb, 0xe8, 0xc7, 0xe7, 0x48, 0xb8, 0x43, 0x0a, 0x50, 0x2e, 0xd0, 0xea, 0xa1, 0x5d, 0xf9, 0x30, 0xbd, 0xab, 0x5a, 0xff, 0x45, 0xc6, 0xf7, 0xbb, 0x79, 0xb8, 0x91, 0xc2, 0xab, 0x78, 0xf8, 0xe7, 0x14, 0xee, 0xe3, 0xe1, 0x22, 0x85, 0x17, 0xf0, 0xf0, 0x0f, 0x29, 0xdc, 0x11, 0xf4, 0xb7, 0x66, 0x86, 0x4d, 0xc1, 0x92, 0x56, 0x73, 0x64, 0xb2, 0xaf, 0x24, 0xf6, 0xff, 0x4a, 0x26, 0x9f, 0x1f, 0x9f, 0x2b, 0x25, 0x03, 0x7b, 0xfe, 0x3f, 0x92, 0x06, 0xff, 0x76, 0xf2, 0xdb, 0x2d, 0x94, 0xce, 0x30, 0x1f, 0x47, 0x41, 0xe5, 0x9b, 0x6f, 0xa8, 0x45, 0x1c, 0xd0, 0x88, 0xd5, 0x92, 0xa6, 0x70, 0x0f, 0x08, 0x41, 0x5f, 0x44, 0xd3, 0x81, 0x7c, 0x5d, 0x87, 0xea, 0x5a, 0x9c, 0x5b, 0x3e, 0x3b, 0x64, 0xcc, 0xf2, 0x82, 0x96, 0xe0, 0xf3, 0x66, 0x82, 0x0a, 0xdf, 0x75, 0xba, 0x0c, 0xb2, 0xd0, 0x06, 0xde, 0x38, 0xd0, 0xd7, 0xac, 0x12, 0xd0, 0xcf, 0xf2, 0x83, 0x81, 0x20, 0xbe, 0x55, 0x02, 0x3a, 0xf6, 0xf4, 0x83, 0x7e, 0xea, 0x12, 0x18, 0x80, 0x4c, 0xa4, 0x35, 0x59, 0x88, 0xe9, 0x03, 0x73, 0x4f, 0x42, 0xb6, 0xf8, 0x13, 0x96, 0xcb, 0x0c, 0x78, 0x65, 0xfb, 0xfc, 0x88, 0x21, 0x74, 0x7f, 0xff, 0xfd, 0x6d, 0x30, 0xb2, 0x9c, 0xef, 0x19, 0xf8, 0xfa, 0xe8, 0x64, 0x97, 0xed, 0x0a, 0x0f, 0x33, 0x4b, 0x4c, 0x15, 0xd6, 0xcc, 0xf2, 0x53, 0x60, 0xb3, 0xd6, 0xd8, 0xaf, 0x99, 0xbf, 0x86, 0xb4, 0x58, 0xbe, 0x75, 0x98, 0xb4, 0x58, 0x0a, 0x77, 0x48, 0xb9, 0x2e, 0x83, 0x4b, 0xc3, 0xf5, 0x4c, 0xe6, 0x30, 0xfe, 0x2a, 0xd8, 0x2a, 0x8f, 0xb0, 0x3b, 0x44, 0x3e, 0xa6, 0x67, 0xa7, 0xe2, 0xba, 0x27, 0x88, 0x01, 0xe5, 0x11, 0xad, 0xb5, 0xc4, 0x96, 0x15, 0x7e, 0xe7, 0xe7, 0x67, 0x40, 0x17, 0x26, 0x7b, 0xbd, 0x66, 0x95, 0x5d, 0x1e, 0x01, 0x2d, 0xdb, 0xe7, 0x3b, 0x4c, 0xfb, 0x7c, 0xa4, 0x75, 0x2a, 0x5e, 0xcb, 0xf4, 0x00, 0x34, 0xa1, 0xb8, 0x05, 0x79, 0x7f, 0x1e, 0x4a, 0xb5, 0x10, 0x8b, 0xac, 0x15, 0xb6, 0x2a, 0xae, 0xed, 0xe1, 0x9b, 0x0e, 0x53, 0x14, 0x3d, 0x8f, 0x09, 0x48, 0x5b, 0x36, 0x31, 0xdd, 0x4e, 0xd2, 0xda, 0x34, 0xd5, 0xdf, 0xcd, 0xf5, 0x46, 0x85, 0x16, 0xc9, 0xcf, 0xb5, 0x46, 0xe1, 0x48, 0x23, 0x40, 0x3f, 0xf7, 0x74, 0x2f, 0xdc, 0x99, 0xf4, 0x74, 0xbf, 0x7f, 0x8c, 0xa7, 0x7b, 0x21, 0xe9, 0xe9, 0x7e, 0xa8, 0x60, 0x0d, 0xf7, 0x74, 0x4f, 0xde, 0x68, 0xc9, 0xca, 0x86, 0xfb, 0x79, 0x78, 0x85, 0xbc, 0xd1, 0x06, 0x31, 0x25, 0xe6, 0xf7, 0x60, 0xc5, 0x67, 0x20, 0x89, 0x95, 0xa9, 0x3b, 0x3a, 0x84, 0xc9, 0x28, 0x25, 0xd1, 0xbe, 0xce, 0x74, 0xd0, 0xfc, 0x66, 0xc0, 0xf8, 0x2c, 0xec, 0x97, 0x9c, 0x48, 0x69, 0x11, 0x3e, 0x7c, 0xcf, 0x18, 0xe8, 0xb7, 0x44, 0x0e, 0x69, 0x27, 0x48, 0x4a, 0xf9, 0x8d, 0x6a, 0xac, 0x4b, 0x65, 0xfa, 0xed, 0x03, 0xd8, 0x19, 0xd3, 0x6d, 0xa7, 0xb4, 0x16, 0xaa, 0xa3, 0x85, 0x3c, 0x9c, 0x4e, 0x47, 0x6a, 0x33, 0x1d, 0x8c, 0x22, 0x9d, 0x84, 0x93, 0x6f, 0xbd, 0x8d, 0x1c, 0x22, 0xa2, 0xe7, 0x73, 0x0a, 0x43, 0xba, 0xa9, 0xa6, 0x08, 0x6b, 0x17, 0xaf, 0x45, 0x48, 0xcd, 0x54, 0x0f, 0x18, 0x10, 0xd6, 0x28, 0x35, 0x25, 0xa8, 0xc7, 0x9f, 0x69, 0x47, 0xcf, 0x5c, 0xd7, 0x9b, 0x97, 0x8b, 0x23, 0x5e, 0x1d, 0xc9, 0x46, 0x2e, 0x00, 0x47, 0x8a, 0x64, 0x90, 0x61, 0x5f, 0x62, 0xdc, 0xc2, 0x56, 0x95, 0x03, 0x47, 0x64, 0x32, 0x41, 0x22, 0xaf, 0x2f, 0x80, 0xd6, 0x7b, 0x06, 0x6c, 0xe9, 0xb7, 0xe5, 0x38, 0xbe, 0x26, 0xf2, 0xbc, 0xf8, 0x3e, 0xf2, 0x8e, 0xba, 0xeb, 0x99, 0x3e, 0xa1, 0xcf, 0xc7, 0xb4, 0xa1, 0x27, 0x87, 0xb3, 0x82, 0xbe, 0x70, 0xc2, 0xb2, 0x18, 0xed, 0x79, 0xed, 0xab, 0xee, 0xc5, 0x11, 0xd6, 0xc8, 0x27, 0x13, 0xb7, 0x7f, 0x69, 0x1c, 0x93, 0x39, 0xac, 0xe3, 0xb5, 0xd2, 0xd9, 0xf1, 0x5b, 0x1b, 0x99, 0x63, 0x70, 0xd0, 0xf8, 0x86, 0x0b, 0x46, 0xdd, 0x41, 0x4b, 0xe5, 0xb5, 0x02, 0xcb, 0x1a, 0x81, 0x29, 0xe5, 0x58, 0xab, 0xea, 0x5e, 0x86, 0x47, 0x59, 0x29, 0x3c, 0x92, 0xb4, 0xf9, 0x9d, 0xb2, 0x4c, 0xf7, 0x21, 0x93, 0xb9, 0x17, 0xd5, 0xf5, 0x26, 0xd6, 0xf7, 0x04, 0x3f, 0xeb, 0xc1, 0x11, 0x0e, 0x1d, 0x8b, 0x4f, 0x57, 0xf7, 0xe0, 0xfb, 0x63, 0xf8, 0x7b, 0x01, 0x86, 0xbc, 0x73, 0x38, 0x5f, 0xb6, 0x70, 0x59, 0xc3, 0xe2, 0xf6, 0xd1, 0xcc, 0x6c, 0x7a, 0xd0, 0xff, 0xd8, 0xbd, 0x0d, 0xef, 0x71, 0xfc, 0x6d, 0xc6, 0x5f, 0x1f, 0xfe, 0x36, 0xc2, 0x50, 0x19, 0xd6, 0xb3, 0xca, 0xa9, 0x70, 0xb2, 0x9f, 0x61, 0x98, 0x85, 0xc3, 0xf9, 0xaa, 0x88, 0xb1, 0x54, 0xe1, 0x4f, 0xad, 0x3c, 0x59, 0x75, 0xc7, 0xf0, 0xa3, 0xa5, 0x7b, 0x52, 0xef, 0xfe, 0xa7, 0x52, 0xef, 0x25, 0x4d, 0x7f, 0x99, 0x17, 0xf5, 0xb6, 0x5c, 0x9d, 0x17, 0xf5, 0xea, 0xbf, 0x2e, 0x2f, 0xea, 0x55, 0xfd, 0x65, 0x5e, 0xd4, 0xbb, 0xe2, 0xbf, 0xef, 0x9e, 0x84, 0xe7, 0xd0, 0x95, 0x79, 0x51, 0xcf, 0x89, 0xb1, 0xbc, 0xa8, 0x77, 0xcd, 0xd5, 0x78, 0x51, 0xcf, 0xe0, 0x58, 0x5e, 0xd4, 0x73, 0xfa, 0x52, 0x5e, 0xd4, 0xf3, 0xfe, 0x7f, 0x0f, 0x2f, 0x9a, 0x38, 0x0b, 0x51, 0xf4, 0x6c, 0xf4, 0x97, 0xe7, 0x50, 0x13, 0xf7, 0x4b, 0x71, 0x4d, 0x7f, 0x6a, 0xb4, 0xe7, 0x5f, 0xfc, 0x6b, 0xb8, 0xb9, 0x02, 0x43, 0x9e, 0x01, 0x4d, 0xf9, 0x49, 0xac, 0xcb, 0x03, 0x18, 0x62, 0x4e, 0x0b, 0xc9, 0x61, 0x21, 0xd6, 0x44, 0x88, 0xf7, 0x24, 0x52, 0xa1, 0x1e, 0xcc, 0xe7, 0xf0, 0xe8, 0x7c, 0xa2, 0x2a, 0xa6, 0x79, 0x36, 0xfa, 0xdc, 0x74, 0xc3, 0xec, 0xce, 0xbb, 0x01, 0x9e, 0x24, 0x6e, 0x89, 0x9f, 0x74, 0x16, 0xbb, 0xb1, 0x66, 0x39, 0x58, 0x67, 0x91, 0x6e, 0x58, 0x94, 0x9e, 0x82, 0x4d, 0xb6, 0x60, 0x14, 0x50, 0x06, 0x17, 0x82, 0xdf, 0x0d, 0x6b, 0x6d, 0xc2, 0x47, 0xcf, 0xae, 0x51, 0x87, 0xe2, 0xcb, 0x35, 0x3b, 0xe3, 0xe1, 0xcf, 0x6c, 0x76, 0xb0, 0xc5, 0x40, 0x6a, 0xb2, 0x35, 0x81, 0xc5, 0x78, 0xab, 0x19, 0x22, 0xfa, 0x50, 0x97, 0x19, 0xf6, 0xab, 0xfa, 0x35, 0xe1, 0x5a, 0xb3, 0x1d, 0xc6, 0x2f, 0x87, 0x6c, 0xb2, 0x9e, 0x22, 0x4a, 0xfa, 0xbc, 0xe9, 0xf0, 0x64, 0xc8, 0x7b, 0xab, 0x17, 0x9e, 0x0c, 0x7a, 0x23, 0x5f, 0xe0, 0xda, 0xf4, 0x78, 0x07, 0x64, 0xa8, 0x23, 0x9a, 0xec, 0x35, 0xf9, 0x5d, 0xa1, 0xee, 0xd0, 0x03, 0xb5, 0xeb, 0x56, 0x6a, 0x76, 0x77, 0x87, 0xcf, 0xe2, 0x9a, 0x28, 0xf2, 0x5d, 0x14, 0xa4, 0x88, 0x66, 0xb2, 0x44, 0x41, 0xda, 0x88, 0xdf, 0x6e, 0x63, 0xbb, 0xe3, 0x59, 0x3b, 0xbb, 0x16, 0x69, 0xa3, 0xc6, 0xfe, 0xae, 0xf0, 0x83, 0xd7, 0x76, 0xca, 0x7f, 0x42, 0x1a, 0xe6, 0xa9, 0xfc, 0xd0, 0x50, 0xac, 0x9c, 0x2c, 0xb8, 0xb8, 0xbd, 0x48, 0xe2, 0x51, 0xe8, 0xce, 0x3a, 0x4a, 0xd9, 0xb6, 0x48, 0x26, 0xb7, 0xa5, 0x2d, 0x3b, 0xa6, 0xf9, 0xc0, 0xc4, 0x74, 0xe7, 0x93, 0xf7, 0x45, 0x92, 0xd6, 0x00, 0x70, 0x1c, 0x48, 0x0e, 0x60, 0x27, 0xdf, 0x37, 0xc6, 0x26, 0x0e, 0x74, 0x11, 0xff, 0xe9, 0xad, 0x32, 0xce, 0xd2, 0x41, 0x62, 0x3f, 0xe7, 0x50, 0x1c, 0xff, 0x75, 0x59, 0xbc, 0xef, 0xbe, 0x5a, 0x72, 0x6e, 0x33, 0xd9, 0xac, 0x7a, 0xea, 0xa5, 0x83, 0xe1, 0x2c, 0x66, 0x19, 0xe6, 0xac, 0x20, 0x90, 0x96, 0x7d, 0xe0, 0x55, 0x7f, 0x97, 0xa4, 0x8a, 0x91, 0x07, 0xfb, 0x2c, 0xda, 0x2d, 0xb8, 0x5d, 0xf0, 0x45, 0x98, 0xe7, 0x84, 0xa1, 0xaa, 0x77, 0xd8, 0xce, 0xbf, 0x46, 0xdc, 0x20, 0x86, 0xa6, 0xe2, 0x13, 0x34, 0x9c, 0x26, 0x2a, 0x3c, 0x99, 0xc1, 0x15, 0x64, 0xda, 0x06, 0xf0, 0xd5, 0x67, 0x38, 0x13, 0xdd, 0x74, 0x42, 0x85, 0xbd, 0xe6, 0x82, 0x1b, 0x93, 0x5c, 0xe4, 0x53, 0x48, 0x13, 0xd5, 0x54, 0x87, 0x03, 0x5d, 0x74, 0x1f, 0xc6, 0xe6, 0xfb, 0xcd, 0x00, 0xd2, 0xd3, 0xa7, 0x4a, 0x07, 0x65, 0xbf, 0xa4, 0x63, 0x76, 0x3a, 0xc8, 0x77, 0x45, 0x8d, 0xc5, 0x18, 0xfe, 0x22, 0xc5, 0xe7, 0x19, 0x0c, 0x98, 0xe3, 0x0a, 0xcc, 0x91, 0x76, 0x92, 0xd8, 0x6e, 0x79, 0xf9, 0x59, 0xd8, 0xd4, 0x01, 0xf3, 0x06, 0xe5, 0x47, 0x97, 0x0b, 0x64, 0xa7, 0xf9, 0xdb, 0x6d, 0xee, 0x1b, 0xfb, 0x9b, 0x41, 0x0c, 0x4f, 0xe2, 0x9e, 0x54, 0x7c, 0x4b, 0xe4, 0x11, 0x51, 0xfd, 0xfb, 0x2d, 0xb7, 0x03, 0xd6, 0xdc, 0x50, 0xf5, 0x08, 0xcd, 0x17, 0x45, 0x7b, 0xee, 0x08, 0xf5, 0x67, 0x54, 0x26, 0xab, 0x02, 0x84, 0x27, 0x9d, 0x7c, 0x1f, 0x9e, 0xd9, 0xca, 0xa6, 0xf3, 0x2f, 0x6c, 0xdd, 0xe1, 0xf2, 0xc1, 0x91, 0x9d, 0x92, 0x03, 0x57, 0xc9, 0x1c, 0x8b, 0x1d, 0xcc, 0x85, 0xa0, 0xf5, 0xcb, 0x7f, 0x32, 0xf8, 0x41, 0x58, 0x44, 0xfc, 0x72, 0x66, 0x38, 0xd3, 0xa8, 0x1e, 0x10, 0x22, 0x3a, 0xb2, 0xf4, 0x54, 0xf5, 0x30, 0x59, 0x76, 0xb1, 0x1a, 0xc3, 0x87, 0xb0, 0x96, 0x74, 0x2a, 0xa4, 0xca, 0x73, 0xd1, 0x2c, 0x33, 0xba, 0x60, 0xa2, 0x15, 0x0e, 0xc7, 0x0f, 0x74, 0x1f, 0x88, 0x93, 0xaf, 0xe2, 0x83, 0x9f, 0x33, 0xcb, 0x2c, 0x4f, 0x59, 0x3c, 0xe2, 0xb7, 0x99, 0x6e, 0x9e, 0x01, 0xfb, 0x56, 0x1f, 0xec, 0x8b, 0x68, 0x44, 0x1d, 0xe9, 0xb2, 0x91, 0x46, 0x58, 0x52, 0xe3, 0xbd, 0x62, 0x34, 0x9f, 0xc1, 0xb8, 0xf8, 0x29, 0xf5, 0x30, 0xae, 0x98, 0xf3, 0xf1, 0x69, 0x1e, 0x75, 0x77, 0xa8, 0x16, 0xa8, 0xfa, 0x85, 0x7b, 0xc0, 0x23, 0x0c, 0x0a, 0x1b, 0xa0, 0x43, 0x7d, 0x48, 0x33, 0xa0, 0xbd, 0x27, 0xa3, 0x47, 0x13, 0xcb, 0x30, 0x8c, 0x73, 0xfc, 0xa5, 0x7f, 0xea, 0xed, 0x1d, 0x60, 0x9a, 0x0e, 0x37, 0x16, 0x4c, 0xc7, 0xd9, 0xf1, 0x0c, 0x98, 0xe7, 0x7d, 0x06, 0x9b, 0xe8, 0x5c, 0x4f, 0x50, 0x45, 0x0c, 0x3b, 0xef, 0x0c, 0xeb, 0xec, 0xc2, 0x47, 0xdb, 0xee, 0xc7, 0xbe, 0x0a, 0xc5, 0x6b, 0x1f, 0x5c, 0xa1, 0xd9, 0x15, 0x0f, 0x7f, 0x22, 0x81, 0xa6, 0x87, 0x69, 0xef, 0xdc, 0x58, 0xa4, 0xa4, 0x29, 0xff, 0x8c, 0xc6, 0xa1, 0x62, 0x70, 0x24, 0x6b, 0xb9, 0x90, 0xa1, 0x89, 0x98, 0x76, 0xd7, 0x84, 0xc9, 0xd2, 0x4f, 0x66, 0xd5, 0x46, 0xea, 0xfd, 0x2e, 0x4c, 0x4d, 0x5a, 0x8b, 0xb5, 0x0f, 0x74, 0x6a, 0xf6, 0x74, 0x87, 0x3f, 0xc0, 0xf4, 0x81, 0x55, 0x30, 0x19, 0xd3, 0xdf, 0xbe, 0x18, 0x44, 0xc8, 0xa3, 0x1c, 0xe6, 0x62, 0x0e, 0xb6, 0x79, 0xcb, 0x81, 0x38, 0xba, 0xd2, 0xe6, 0x15, 0x02, 0xf1, 0x77, 0xdf, 0x6e, 0x1b, 0x37, 0x2e, 0x12, 0x73, 0xbb, 0x20, 0xaf, 0xbf, 0x26, 0xdc, 0xcc, 0x71, 0xf9, 0x76, 0x1c, 0x5d, 0xc8, 0xa7, 0xb1, 0xb3, 0xcf, 0xeb, 0x00, 0x97, 0x07, 0x0a, 0x2d, 0x2e, 0x28, 0xcc, 0x10, 0x22, 0x93, 0x10, 0x2e, 0xbf, 0xbf, 0x36, 0x9c, 0x45, 0xe5, 0x12, 0xb7, 0x27, 0x6a, 0xd2, 0x4a, 0x5e, 0xcf, 0xc6, 0xfc, 0x30, 0xce, 0x1f, 0x73, 0x58, 0x8b, 0xb8, 0x7a, 0x01, 0xa6, 0x58, 0x35, 0x7f, 0xd8, 0x7a, 0xbb, 0x0a, 0xf1, 0x22, 0x93, 0xf8, 0xc6, 0xb5, 0x18, 0x53, 0xe6, 0xfb, 0x65, 0x1b, 0x9c, 0x45, 0xf8, 0xd5, 0xb5, 0xa4, 0x6f, 0xb8, 0x3a, 0x1c, 0x97, 0x40, 0xfd, 0xf8, 0x5f, 0xdf, 0x3b, 0xea, 0xe6, 0x4e, 0xc8, 0xc1, 0x34, 0x73, 0x94, 0x34, 0x5e, 0x96, 0xc6, 0xe7, 0xb5, 0x95, 0xad, 0x14, 0x9c, 0x13, 0x04, 0x6d, 0xc4, 0xfa, 0x4a, 0x75, 0x58, 0x2c, 0xcc, 0x85, 0xb3, 0x1d, 0x90, 0xaf, 0xc1, 0x9c, 0x4c, 0xd6, 0x8c, 0x8f, 0xb6, 0x16, 0xab, 0xca, 0xca, 0xde, 0xf2, 0xff, 0x5d, 0x19, 0x9c, 0xed, 0xf6, 0xad, 0xe5, 0x39, 0xf6, 0x74, 0x68, 0x76, 0xc4, 0xc3, 0x6f, 0x51, 0xad, 0x23, 0xa0, 0xce, 0x61, 0xf3, 0x2f, 0x93, 0xe6, 0x5f, 0xc8, 0x4d, 0x12, 0x6a, 0xc6, 0x9c, 0x95, 0x30, 0x09, 0xcb, 0x29, 0x1e, 0x5d, 0x8e, 0x6f, 0x85, 0x20, 0x64, 0x44, 0xb2, 0xf6, 0x54, 0x87, 0x33, 0xe9, 0x94, 0x66, 0x35, 0xb6, 0x69, 0x8d, 0x77, 0xb5, 0x92, 0x23, 0xa3, 0x71, 0xc7, 0x79, 0x8e, 0xaa, 0x37, 0x79, 0xfb, 0xf9, 0x8c, 0x56, 0x75, 0x33, 0xcd, 0x19, 0x1a, 0xb5, 0xdd, 0xc3, 0x17, 0xb8, 0xe5, 0x18, 0xcd, 0xb1, 0x18, 0x64, 0x61, 0x09, 0xf9, 0xa3, 0x4a, 0x10, 0x84, 0x48, 0xee, 0x8e, 0xea, 0xb0, 0x83, 0x68, 0xc2, 0x34, 0x2f, 0x98, 0x91, 0x66, 0xe4, 0x12, 0xcd, 0x08, 0x83, 0x2a, 0xca, 0x6e, 0x98, 0x51, 0x0e, 0x23, 0xcc, 0xf2, 0x06, 0x4a, 0xca, 0x64, 0x73, 0x93, 0x4a, 0x66, 0xbd, 0xb3, 0x0f, 0xbf, 0x2a, 0x91, 0x16, 0x60, 0x9e, 0x85, 0x4a, 0x9e, 0x49, 0xde, 0xb0, 0x8f, 0x72, 0xaf, 0xeb, 0xed, 0x00, 0x51, 0x9d, 0xad, 0xca, 0x80, 0x48, 0xfd, 0xae, 0xea, 0xf0, 0x3d, 0x2b, 0x85, 0xdf, 0x3f, 0xf7, 0xc0, 0x56, 0x26, 0x61, 0x63, 0xcd, 0xca, 0x07, 0x87, 0x9f, 0x4e, 0xac, 0x9d, 0x77, 0xed, 0x0b, 0xac, 0xf1, 0xfb, 0xb9, 0xe5, 0x41, 0x2c, 0x31, 0x11, 0xca, 0xee, 0xa7, 0x27, 0xb8, 0x35, 0xcc, 0xf1, 0x29, 0x3a, 0x69, 0x49, 0x51, 0x1a, 0x66, 0x5b, 0x76, 0xf7, 0x9f, 0x99, 0x95, 0x3f, 0x29, 0x8b, 0xf4, 0x7c, 0x6b, 0x7b, 0x18, 0x56, 0xae, 0xf7, 0xf9, 0x50, 0x26, 0x2a, 0x65, 0x18, 0xa2, 0xe7, 0x18, 0x82, 0x7c, 0x66, 0x99, 0x3b, 0x63, 0x00, 0xfb, 0x2f, 0x5c, 0x1c, 0xf4, 0x47, 0x8c, 0xb7, 0x67, 0x8c, 0xea, 0x7f, 0x3b, 0xca, 0x45, 0x56, 0xee, 0x13, 0x9b, 0xd5, 0x42, 0xcd, 0xda, 0xad, 0xad, 0xee, 0xcd, 0x5d, 0xcd, 0xfa, 0x80, 0x7a, 0xf5, 0x13, 0x66, 0xf9, 0x2d, 0xc5, 0xab, 0xee, 0x46, 0x5e, 0x15, 0xd4, 0xdd, 0xc4, 0xe1, 0x60, 0x2d, 0x9a, 0x38, 0xf5, 0xc6, 0xb1, 0xed, 0x20, 0x9f, 0xf4, 0xc8, 0xb7, 0x22, 0xee, 0x20, 0x1f, 0x7d, 0x74, 0xf4, 0xb8, 0xf2, 0xd9, 0x45, 0xe7, 0x7c, 0x43, 0xf7, 0x54, 0x30, 0x2a, 0x97, 0x91, 0x11, 0xb1, 0xee, 0xa9, 0x09, 0x8b, 0x36, 0xcd, 0xef, 0x9f, 0x65, 0x27, 0x49, 0x54, 0xde, 0x23, 0xbe, 0x9a, 0xdb, 0xd5, 0xac, 0x86, 0x1b, 0x7f, 0xbc, 0x95, 0xd9, 0xf9, 0x33, 0xd2, 0x9c, 0x63, 0x98, 0xff, 0x0e, 0x1f, 0x71, 0x38, 0x6a, 0x6b, 0x83, 0xc3, 0x73, 0x07, 0x2f, 0x7e, 0x56, 0x31, 0x78, 0x31, 0x24, 0xb9, 0x0d, 0x4b, 0x70, 0x36, 0xe5, 0x84, 0x6d, 0xae, 0x09, 0x94, 0x9e, 0x9f, 0x4e, 0x30, 0x2b, 0xfe, 0x0f, 0x8b, 0x35, 0x53, 0xc9, 0xde, 0x7f, 0x8a, 0xef, 0xdd, 0x58, 0xdd, 0x6b, 0xf3, 0x59, 0xaf, 0x0b, 0xd3, 0x2d, 0xae, 0xd7, 0x47, 0xcf, 0x09, 0x6f, 0xfa, 0x9c, 0xa8, 0x1e, 0x35, 0x27, 0xf8, 0xa8, 0x7f, 0xc2, 0x4a, 0xbf, 0x3b, 0x91, 0x57, 0x00, 0xeb, 0x50, 0xb5, 0xfb, 0xcb, 0x3d, 0x8a, 0x45, 0xaa, 0xbe, 0x4b, 0x73, 0xc3, 0x59, 0xf6, 0xb8, 0x92, 0xa3, 0x11, 0x73, 0x34, 0xe4, 0x6c, 0x85, 0xf1, 0xe9, 0xb9, 0x86, 0x1e, 0xc4, 0x31, 0x53, 0xf0, 0x18, 0xb1, 0xae, 0x80, 0x8f, 0x17, 0x79, 0x7d, 0xbd, 0x1c, 0xbe, 0x66, 0x13, 0xc6, 0x86, 0x10, 0x63, 0xab, 0x3a, 0x04, 0x8b, 0x6a, 0x0c, 0xce, 0xfa, 0x13, 0x18, 0x3b, 0x58, 0xa9, 0xf0, 0x64, 0x79, 0x63, 0xea, 0x69, 0xaa, 0x53, 0xf3, 0x51, 0xfe, 0xc3, 0xd6, 0xb5, 0xbc, 0x5f, 0x71, 0x44, 0x51, 0x16, 0x7b, 0x3a, 0x39, 0x9f, 0x1e, 0xe7, 0x9e, 0xed, 0xf9, 0xa8, 0xa5, 0x68, 0x5a, 0xf2, 0x3e, 0xc2, 0xce, 0x72, 0x86, 0xd9, 0xcb, 0xa1, 0x43, 0xf0, 0xf9, 0x5d, 0xa5, 0x90, 0xbf, 0x52, 0xa0, 0x9b, 0x17, 0x65, 0x12, 0x51, 0xbb, 0x3b, 0x9a, 0x90, 0xf6, 0x1d, 0xae, 0x18, 0xbc, 0xb0, 0x8d, 0x2c, 0xe8, 0x8f, 0x83, 0xc8, 0x2a, 0x5c, 0x3b, 0xf2, 0xb6, 0xd7, 0x84, 0x97, 0x8b, 0x19, 0x7f, 0x60, 0x14, 0x0c, 0x6b, 0x88, 0xb8, 0x45, 0xe7, 0x66, 0x4a, 0x0d, 0xdd, 0x3a, 0x92, 0x50, 0x26, 0x47, 0xec, 0x41, 0x7f, 0xb8, 0x2a, 0x51, 0x5b, 0xd7, 0x35, 0x44, 0x6d, 0xeb, 0xe2, 0x96, 0x0c, 0x9c, 0xf3, 0x4a, 0x3d, 0xcd, 0xc8, 0x1b, 0x61, 0x5d, 0x9d, 0x48, 0x39, 0x27, 0x33, 0x3d, 0x12, 0xe3, 0xf5, 0x5e, 0x98, 0x8c, 0xb9, 0x21, 0xcf, 0x8b, 0xb4, 0xb3, 0x88, 0xd1, 0x49, 0x17, 0x14, 0x5d, 0xef, 0x81, 0xc9, 0xfc, 0x5c, 0x62, 0x85, 0x90, 0xa4, 0x7e, 0x20, 0x47, 0xc9, 0x2e, 0xca, 0x95, 0x5a, 0xf5, 0xa7, 0xe3, 0x57, 0x6b, 0x55, 0x69, 0x33, 0x6f, 0xd5, 0x9f, 0x8e, 0x58, 0xa8, 0x55, 0x42, 0x44, 0x52, 0xe8, 0x78, 0xdd, 0xd7, 0x6a, 0x95, 0xfb, 0x6b, 0xb4, 0x2a, 0x93, 0xa5, 0x67, 0x72, 0xfd, 0xa8, 0x7a, 0x3f, 0x98, 0xac, 0x61, 0x65, 0x5d, 0x2f, 0xc3, 0x10, 0xa3, 0x82, 0x1f, 0x8a, 0x94, 0x28, 0x69, 0x70, 0xe6, 0x9a, 0x15, 0x49, 0x31, 0x3b, 0x25, 0xd9, 0xfd, 0xc9, 0x83, 0x39, 0x69, 0xb9, 0xf4, 0x99, 0x3a, 0x83, 0x20, 0xeb, 0xdc, 0xd6, 0x0a, 0x5a, 0x85, 0x13, 0xf9, 0x9e, 0xff, 0xa4, 0xae, 0xf7, 0xa7, 0xbf, 0xc6, 0x11, 0xdb, 0xec, 0xbd, 0xb0, 0x8b, 0xec, 0xe9, 0x3d, 0x25, 0x4d, 0x7e, 0x69, 0x7f, 0xd8, 0xcc, 0x38, 0xa2, 0x78, 0x82, 0x23, 0xa2, 0x3e, 0xa6, 0x59, 0x23, 0x69, 0x45, 0x8f, 0x68, 0x0c, 0x7f, 0x80, 0xfc, 0x8d, 0x21, 0xea, 0xee, 0x7f, 0x20, 0xfc, 0xa6, 0x88, 0x78, 0x25, 0x89, 0x98, 0x62, 0x92, 0xa5, 0x09, 0x34, 0x96, 0xb8, 0xa5, 0xfa, 0xe6, 0x26, 0x96, 0x42, 0x47, 0x78, 0x78, 0xc1, 0x97, 0x4c, 0x73, 0x2c, 0x59, 0x62, 0x77, 0x5d, 0x2f, 0x69, 0xba, 0x2f, 0x80, 0xcb, 0x71, 0xd9, 0xd8, 0xc3, 0x3a, 0xb7, 0x10, 0xc9, 0xbc, 0xf5, 0x55, 0xf8, 0xf0, 0xdc, 0xa6, 0xcf, 0x03, 0xb7, 0x0e, 0xe0, 0xf3, 0x51, 0x26, 0x05, 0xb9, 0x91, 0x13, 0x34, 0x59, 0x98, 0x5d, 0x71, 0xe4, 0x45, 0xa6, 0xe4, 0x77, 0x42, 0xf4, 0xbd, 0x81, 0xf7, 0xde, 0x34, 0xc4, 0x40, 0xe8, 0x81, 0xf0, 0xdd, 0x31, 0xfd, 0xa1, 0xb8, 0x15, 0x4e, 0xad, 0x63, 0x77, 0x91, 0xed, 0xb6, 0xe9, 0x60, 0x39, 0x75, 0xbf, 0x8d, 0xdd, 0x8e, 0xb8, 0x65, 0xb5, 0x19, 0x50, 0x86, 0xb7, 0x9d, 0xb8, 0x1f, 0x79, 0xb3, 0x61, 0x0c, 0x79, 0xaa, 0xa0, 0x6b, 0xf6, 0x33, 0x90, 0xdb, 0x03, 0x12, 0x59, 0x6c, 0xd9, 0x70, 0xea, 0x7e, 0x0b, 0x83, 0xbb, 0x79, 0x1d, 0xc2, 0xf9, 0xde, 0x65, 0x10, 0x79, 0x7b, 0x40, 0x88, 0x8d, 0x7c, 0xf4, 0xf2, 0x6b, 0x4d, 0x70, 0x92, 0xb8, 0x35, 0x85, 0x13, 0x35, 0x60, 0xc9, 0xd7, 0x31, 0x6e, 0xc7, 0x89, 0x12, 0xb6, 0x06, 0x47, 0xd8, 0xca, 0x79, 0x50, 0xe4, 0x34, 0x1d, 0xa7, 0x7a, 0x2c, 0x1e, 0x96, 0x1a, 0x90, 0x2b, 0x7f, 0x3a, 0xbf, 0x0b, 0xb9, 0x2d, 0x67, 0xc9, 0x29, 0xd8, 0x92, 0x17, 0x27, 0x4e, 0x96, 0xf6, 0x62, 0x68, 0xef, 0x87, 0x51, 0x88, 0x6f, 0x58, 0x17, 0x2b, 0xeb, 0x80, 0x9e, 0xa8, 0x60, 0x99, 0x54, 0xb5, 0xd1, 0xe6, 0x59, 0x2e, 0xfc, 0xfe, 0x59, 0x05, 0x7f, 0x32, 0xe9, 0x0c, 0x9d, 0x49, 0x36, 0x67, 0x07, 0xd6, 0x44, 0x4c, 0x7c, 0xce, 0x12, 0xae, 0x57, 0xed, 0x1e, 0xf9, 0x80, 0xd6, 0x4b, 0xa1, 0x05, 0xe3, 0x4e, 0x5b, 0x34, 0x7b, 0xe3, 0x61, 0x8f, 0xaa, 0x04, 0xe4, 0xfb, 0x3c, 0xb3, 0x4b, 0xe0, 0x74, 0x70, 0x06, 0x4c, 0x6e, 0x31, 0x2a, 0x3a, 0x93, 0x4b, 0xc0, 0x8d, 0xd0, 0x8f, 0x57, 0xf7, 0x2a, 0xeb, 0x0a, 0xbb, 0x37, 0x54, 0x26, 0xe1, 0x1b, 0xd3, 0x6a, 0x19, 0x79, 0x9e, 0x5b, 0xa0, 0x15, 0x2c, 0xc9, 0xf8, 0x8d, 0x76, 0x0f, 0xe6, 0x7a, 0x92, 0x72, 0x65, 0x7b, 0xba, 0xf9, 0x3e, 0x6f, 0x96, 0xba, 0xdb, 0x33, 0xdb, 0x0b, 0x27, 0x89, 0x07, 0x65, 0xa9, 0x06, 0x29, 0x86, 0x5b, 0xf2, 0x09, 0x3a, 0xd3, 0x4a, 0x6b, 0x61, 0xa5, 0xe1, 0x5a, 0xe2, 0xc6, 0x71, 0x39, 0xb8, 0xf7, 0xe0, 0x7e, 0xb7, 0x7b, 0x0b, 0xb0, 0xfd, 0xd7, 0xc2, 0xcb, 0x52, 0x61, 0x3a, 0x0f, 0x55, 0x5d, 0xa1, 0x66, 0x26, 0x66, 0x73, 0x4f, 0x8f, 0x14, 0x5c, 0x5b, 0xe3, 0x99, 0x15, 0xdf, 0x42, 0x1e, 0x56, 0x0e, 0x9f, 0x5a, 0x3f, 0x59, 0x53, 0x36, 0x8e, 0xe6, 0x63, 0xd5, 0x9e, 0x79, 0x83, 0x23, 0x31, 0x49, 0xca, 0x9b, 0x01, 0x39, 0x8e, 0x19, 0x60, 0x76, 0x0b, 0x5a, 0x0f, 0x72, 0xb3, 0x1e, 0xc6, 0xcd, 0x7a, 0x91, 0x9b, 0xf5, 0x23, 0x37, 0x9b, 0x11, 0x99, 0x43, 0x27, 0x83, 0xd8, 0x7b, 0x59, 0x18, 0x66, 0x08, 0x1b, 0xc8, 0x36, 0x23, 0xe6, 0xbe, 0x89, 0xdd, 0xfe, 0x1a, 0x37, 0x90, 0x71, 0x52, 0x17, 0xce, 0xb9, 0x7c, 0xcd, 0xf8, 0x3c, 0xb4, 0x55, 0xda, 0x6b, 0x98, 0x25, 0xf5, 0xcd, 0x8a, 0xb5, 0xb5, 0xa3, 0x7c, 0xbf, 0x85, 0xe9, 0x96, 0xe5, 0x14, 0xb8, 0xc0, 0x92, 0x94, 0xd3, 0x90, 0x83, 0x2c, 0x54, 0x8b, 0x9a, 0x53, 0x3d, 0xf1, 0x12, 0x86, 0xaf, 0x8f, 0xdf, 0xfa, 0x1a, 0x61, 0x6f, 0xe9, 0x19, 0xf2, 0x63, 0x82, 0x3c, 0x64, 0xbd, 0x75, 0x0f, 0xd2, 0xc6, 0x2d, 0xa2, 0x8a, 0x78, 0x67, 0x0b, 0xfc, 0xe1, 0x7e, 0x8b, 0xf7, 0xe1, 0x01, 0xc4, 0x0c, 0x8b, 0xf7, 0x8f, 0x9b, 0x61, 0x5a, 0x40, 0xa6, 0x5b, 0x3c, 0x43, 0xde, 0x7b, 0xe4, 0x8b, 0x74, 0xfe, 0x20, 0x5f, 0x98, 0xed, 0x03, 0xcd, 0xb4, 0xb9, 0xa0, 0x15, 0x55, 0xf7, 0xc4, 0x2d, 0x81, 0x64, 0x29, 0xf7, 0x88, 0xaa, 0x53, 0x3d, 0x6c, 0xc7, 0x1b, 0x31, 0x0c, 0x25, 0xc6, 0x2d, 0x88, 0xa3, 0x80, 0xb2, 0xe4, 0xd3, 0xee, 0x3d, 0xd0, 0x40, 0x77, 0x4b, 0x20, 0x87, 0xad, 0x8f, 0x0f, 0x7e, 0x3e, 0x97, 0x95, 0xff, 0x28, 0xfb, 0xfb, 0x58, 0x32, 0x7d, 0x37, 0xd7, 0xf2, 0x52, 0x6e, 0xa0, 0xba, 0x8b, 0x5d, 0x50, 0x40, 0x16, 0xce, 0xca, 0x4f, 0xc3, 0xf1, 0x0e, 0xf0, 0x95, 0xa8, 0xee, 0x23, 0x4e, 0x9c, 0x63, 0xe3, 0x4a, 0x61, 0xde, 0xe0, 0xf0, 0x83, 0x73, 0x07, 0xbf, 0x32, 0x64, 0x68, 0x23, 0x7e, 0x8e, 0xa7, 0x8a, 0x86, 0x4d, 0x3c, 0x92, 0x6f, 0xcf, 0xf8, 0xfd, 0xb6, 0xfb, 0x92, 0xa1, 0xb9, 0x50, 0xb0, 0x87, 0x8d, 0x22, 0x8d, 0xdd, 0x26, 0x3a, 0x81, 0x26, 0x0d, 0x08, 0xb7, 0xa6, 0xcc, 0xf3, 0x6a, 0x33, 0x9c, 0xbe, 0xbf, 0x99, 0xe9, 0xf7, 0x5a, 0x93, 0xab, 0xf7, 0xf3, 0xc1, 0x92, 0x88, 0xc5, 0xad, 0x56, 0x66, 0xf6, 0x63, 0xf4, 0x06, 0x9e, 0x38, 0xf0, 0x79, 0x0e, 0x25, 0xf8, 0xc6, 0xfa, 0x8e, 0xeb, 0x1e, 0x24, 0xf6, 0x98, 0x42, 0xc7, 0x61, 0xe8, 0x25, 0x73, 0xd7, 0x74, 0xb5, 0x06, 0x86, 0x6a, 0x00, 0x7f, 0xd7, 0xe2, 0x6f, 0xbb, 0xb2, 0xc7, 0xd4, 0xb1, 0x70, 0xcc, 0x0e, 0x53, 0x32, 0x40, 0x5c, 0xd8, 0xba, 0x38, 0xb2, 0x70, 0x66, 0x6b, 0x41, 0xe1, 0x12, 0xb6, 0xd5, 0xf4, 0x3f, 0xb2, 0xd7, 0xb4, 0x70, 0x3f, 0xfe, 0xe2, 0xf8, 0x5b, 0x81, 0x3f, 0x1c, 0xd7, 0x67, 0x06, 0x60, 0x68, 0xeb, 0x3d, 0xf8, 0xab, 0xc7, 0x5f, 0x58, 0xd9, 0x73, 0x0a, 0x62, 0xfd, 0x1f, 0xe4, 0xf0, 0xf5, 0x05, 0x30, 0xd4, 0x20, 0xc1, 0xd0, 0xa2, 0x75, 0xf8, 0xeb, 0xc1, 0x9f, 0x1d, 0x7f, 0x75, 0xa9, 0x67, 0x83, 0xef, 0x2f, 0xc4, 0x57, 0x63, 0x2e, 0x26, 0xfc, 0x5d, 0x8f, 0xbf, 0x9b, 0x94, 0xe7, 0xf5, 0x58, 0xcc, 0x57, 0xca, 0x77, 0x8e, 0x12, 0xcf, 0x7e, 0x32, 0xdd, 0x58, 0x4a, 0x7d, 0x5f, 0xcf, 0x9e, 0xb4, 0xd5, 0xa5, 0xc6, 0x19, 0x90, 0x81, 0x7c, 0xdb, 0x38, 0xd0, 0xc1, 0xf8, 0xe4, 0x69, 0x6e, 0x26, 0x4c, 0x84, 0xeb, 0x10, 0xe2, 0x7a, 0x64, 0x3c, 0xbe, 0x01, 0x66, 0xb8, 0x01, 0x26, 0xc1, 0x8d, 0x98, 0x63, 0x96, 0x07, 0x06, 0x60, 0x40, 0x18, 0x50, 0x0d, 0xa8, 0xa9, 0x0d, 0x4f, 0x74, 0xe3, 0xef, 0x41, 0x18, 0xda, 0xf2, 0x16, 0xfe, 0x70, 0x8c, 0x9e, 0x38, 0xc7, 0xbf, 0x93, 0xbf, 0xcd, 0xa9, 0x77, 0x16, 0xff, 0x05, 0x0c, 0xfd, 0x93, 0x11, 0x7f, 0x22, 0xfe, 0x8a, 0x95, 0xf4, 0xdd, 0xbc, 0x3f, 0xfe, 0xa9, 0x16, 0x7f, 0x0d, 0xf8, 0xdb, 0x82, 0xbf, 0xa3, 0x30, 0xf4, 0xbf, 0x2f, 0xc2, 0xd0, 0xd3, 0x73, 0x60, 0xe8, 0xa9, 0x15, 0x3c, 0x3d, 0x3d, 0x9f, 0xb2, 0x61, 0x78, 0x74, 0x6c, 0xb8, 0xb7, 0x76, 0x66, 0x85, 0xbf, 0x14, 0xbe, 0x8b, 0x7f, 0xbe, 0x27, 0x96, 0xb6, 0x2e, 0x6b, 0x59, 0xd8, 0xb1, 0xb8, 0x2d, 0x22, 0xc6, 0x1a, 0x97, 0x36, 0x76, 0xe8, 0xe1, 0xbb, 0xde, 0x5a, 0xef, 0xf7, 0xc4, 0xf2, 0x85, 0x3f, 0x6c, 0x69, 0x14, 0x2b, 0xfc, 0x7f, 0x37, 0xcd, 0x9d, 0xb7, 0x22, 0x57, 0xac, 0x6e, 0x5f, 0xba, 0x74, 0x71, 0x3d, 0x0b, 0x29, 0x15, 0xe9, 0xac, 0x1a, 0xc3, 0x0b, 0x57, 0xe4, 0x26, 0xa0, 0x6b, 0x3a, 0x16, 0x76, 0x2c, 0x5b, 0xca, 0x60, 0x9d, 0xf4, 0x27, 0x11, 0xee, 0x8f, 0x2d, 0x5e, 0xde, 0xb8, 0x54, 0x6c, 0x6b, 0xef, 0x10, 0x1b, 0x1a, 0x3b, 0x1a, 0x17, 0x75, 0x34, 0x36, 0x24, 0xa2, 0x28, 0xa3, 0x86, 0xf6, 0x65, 0x98, 0x67, 0x4c, 0x5c, 0xd4, 0xd4, 0xb8, 0x68, 0x89, 0x68, 0x67, 0xc9, 0x45, 0xfc, 0x5b, 0x37, 0x5d, 0x0f, 0x08, 0xf4, 0xdd, 0xea, 0x0a, 0xcc, 0x7a, 0x59, 0xfd, 0xd2, 0x1f, 0x2e, 0xed, 0x68, 0x6c, 0xa5, 0x90, 0xdc, 0x86, 0x85, 0x8d, 0xad, 0xed, 0x6d, 0x50, 0xdf, 0xde, 0xde, 0xd1, 0xd2, 0xbe, 0xb0, 0xa1, 0x31, 0x96, 0x32, 0xee, 0x82, 0xd1, 0x7f, 0x07, 0xb7, 0xe6, 0xd5, 0x2f, 0xee, 0x80, 0xb6, 0x76, 0x6c, 0x54, 0xc7, 0x62, 0x7c, 0x36, 0xb4, 0x2e, 0x84, 0x68, 0x7b, 0x4b, 0x0b, 0x34, 0xae, 0x88, 0x2e, 0x6c, 0x5b, 0xba, 0xb8, 0xbd, 0x2d, 0x79, 0xa4, 0x9e, 0x36, 0x1f, 0xa8, 0x46, 0x58, 0x6c, 0x4b, 0xc3, 0xf7, 0xc4, 0x12, 0x6f, 0x65, 0x65, 0xa9, 0x5f, 0xac, 0xa9, 0x9d, 0xef, 0x13, 0xcb, 0xe6, 0x57, 0x95, 0xd4, 0x56, 0xdc, 0x51, 0x95, 0x2b, 0xd6, 0x06, 0x2a, 0x6a, 0xc4, 0x3b, 0xaa, 0x4b, 0x43, 0x5e, 0xfa, 0x16, 0xf1, 0xa3, 0xea, 0x8e, 0x5a, 0xb1, 0x66, 0x7e, 0x75, 0xf5, 0x1d, 0xa1, 0x5a, 0x04, 0xf7, 0x7d, 0x47, 0xf4, 0x97, 0xde, 0x59, 0x51, 0x52, 0xaa, 0xff, 0x4b, 0x79, 0x89, 0xf6, 0xf2, 0xd2, 0xaa, 0xd2, 0x50, 0x45, 0xc9, 0xf4, 0xff, 0xd2, 0x5c, 0x67, 0xce, 0x14, 0x2b, 0xee, 0x10, 0xbd, 0x25, 0x25, 0xa5, 0x35, 0x35, 0x62, 0xed, 0x1d, 0xa2, 0xaf, 0xf2, 0x8e, 0x92, 0xb9, 0xd8, 0x95, 0x85, 0x2d, 0x2b, 0x8a, 0xd8, 0x5f, 0xa7, 0x58, 0x59, 0x5a, 0x55, 0x5e, 0x1b, 0xe0, 0x61, 0xff, 0xb5, 0x2d, 0xaa, 0xb8, 0xe3, 0xd6, 0xbc, 0xff, 0x74, 0x73, 0x6a, 0x2a, 0xca, 0x7d, 0xa1, 0x52, 0xef, 0xdc, 0xb2, 0x7b, 0x4b, 0x6a, 0x43, 0x95, 0xf7, 0x96, 0x30, 0xcb, 0x3b, 0x0b, 0x5b, 0x62, 0x8d, 0x0b, 0x1b, 0x7e, 0x28, 0x22, 0x42, 0x92, 0x15, 0x9f, 0x34, 0xf0, 0xda, 0xc5, 0xad, 0x8d, 0xed, 0xcb, 0x3a, 0xc4, 0x1f, 0x34, 0x2d, 0x46, 0x6c, 0xfc, 0xc1, 0xc2, 0xc5, 0x0c, 0x75, 0xc3, 0xed, 0x31, 0x51, 0x21, 0x65, 0x1d, 0xed, 0xe2, 0xa2, 0xf6, 0xd6, 0x68, 0x0b, 0xa2, 0x9b, 0xd8, 0x1e, 0x6d, 0x8c, 0x21, 0x6e, 0xb7, 0xb7, 0x8d, 0xca, 0xc2, 0xcf, 0x01, 0x97, 0x76, 0x2c, 0x6e, 0x69, 0x11, 0xeb, 0x97, 0x2d, 0xfd, 0xa1, 0xb8, 0x30, 0xdc, 0x81, 0x58, 0xd8, 0xc1, 0xb3, 0xce, 0x15, 0xbd, 0xf5, 0x88, 0xe0, 0x98, 0xed, 0xa8, 0x54, 0x98, 0x29, 0x62, 0xde, 0xbd, 0x35, 0x8d, 0x1d, 0xbe, 0xc6, 0xa5, 0x1d, 0x75, 0xe1, 0xc6, 0xd8, 0xbc, 0xf6, 0x86, 0xc6, 0x22, 0xb1, 0x34, 0x14, 0xba, 0x03, 0x89, 0xa9, 0x52, 0x7a, 0x5b, 0xe3, 0x72, 0xcc, 0x29, 0xc6, 0xd4, 0x39, 0x1a, 0x1b, 0xc4, 0x85, 0x6d, 0x3f, 0x14, 0x97, 0x2f, 0x6c, 0x59, 0xdc, 0x20, 0xae, 0xc0, 0x04, 0x62, 0x2b, 0xa6, 0x58, 0x9a, 0x2b, 0xfe, 0x80, 0x0a, 0x5e, 0xd4, 0xde, 0x86, 0x65, 0x2c, 0x43, 0xda, 0x4b, 0x73, 0x23, 0xbc, 0x10, 0x11, 0x96, 0x97, 0x47, 0x48, 0x5f, 0x11, 0xfa, 0x76, 0x91, 0x58, 0x12, 0xaa, 0xa8, 0xad, 0xc0, 0x1e, 0x9f, 0x2a, 0xce, 0xbb, 0x23, 0x54, 0x2a, 0xfa, 0x31, 0x4e, 0x0c, 0x95, 0x7e, 0x7b, 0x7e, 0x69, 0x0d, 0xf5, 0x66, 0x6d, 0xc0, 0x5b, 0x85, 0x03, 0x71, 0x47, 0xc8, 0x5b, 0x5e, 0x8a, 0xe3, 0x52, 0x25, 0x96, 0x57, 0xdc, 0x59, 0x5a, 0x24, 0x4e, 0x6b, 0x69, 0x10, 0xeb, 0x7f, 0xd8, 0x81, 0x93, 0x6e, 0xf9, 0xd2, 0xb4, 0x8f, 0x96, 0xc6, 0x30, 0x99, 0x32, 0xfa, 0x8b, 0xf9, 0xdf, 0x51, 0x56, 0x56, 0x1a, 0xba, 0x5c, 0xee, 0xb5, 0xde, 0xb9, 0x5f, 0x2b, 0x77, 0xa5, 0xb7, 0x58, 0x01, 0x88, 0x91, 0x4b, 0x19, 0x61, 0xa0, 0x39, 0x4d, 0x28, 0xe8, 0x9f, 0xe7, 0x1d, 0x15, 0x72, 0x69, 0x12, 0xd6, 0x9b, 0xe9, 0x91, 0xa2, 0xa8, 0xc4, 0x50, 0xda, 0x32, 0x66, 0xe6, 0x29, 0x77, 0x54, 0x32, 0x9c, 0xc6, 0xf7, 0x36, 0xae, 0x68, 0x5c, 0x74, 0xef, 0xa2, 0xd6, 0x86, 0xe4, 0x68, 0xd4, 0xc6, 0x70, 0xb2, 0x53, 0x8f, 0xb7, 0x34, 0xb6, 0x45, 0x3a, 0x9a, 0x90, 0xb4, 0xb4, 0x34, 0x4c, 0x17, 0x1b, 0x57, 0x2c, 0x6a, 0x6c, 0x6c, 0x58, 0x2a, 0xe6, 0xcd, 0x2e, 0x40, 0xcc, 0x5a, 0xd4, 0xd1, 0x1e, 0x5b, 0x9a, 0x1a, 0xec, 0xbf, 0x39, 0xd7, 0x82, 0xd9, 0xb3, 0x6f, 0xfd, 0xcf, 0xe5, 0x5b, 0xd1, 0xc6, 0x71, 0xa4, 0x23, 0x91, 0x3f, 0xa3, 0x5e, 0xd1, 0x96, 0xc5, 0x48, 0xde, 0xc4, 0x9a, 0xa6, 0xf6, 0x65, 0xd4, 0xd1, 0x0c, 0x51, 0x5a, 0x1a, 0x17, 0x2e, 0xed, 0xa0, 0x59, 0x41, 0x68, 0x3e, 0x4b, 0xb4, 0x2f, 0x6a, 0x8f, 0xc5, 0xb0, 0x40, 0x2c, 0x66, 0xfa, 0xd7, 0x2f, 0x86, 0x30, 0x79, 0x61, 0x1b, 0x16, 0xf7, 0xc3, 0x68, 0x23, 0x0e, 0xe2, 0x8a, 0xaf, 0x57, 0xd7, 0xea, 0x8a, 0x3b, 0xee, 0x8a, 0x2d, 0xc6, 0x49, 0x35, 0x13, 0xc9, 0x39, 0xad, 0x15, 0xd1, 0xf6, 0xb6, 0xa5, 0x8d, 0x62, 0x38, 0xd6, 0xde, 0xaa, 0x20, 0x7f, 0xae, 0xb2, 0x0c, 0x30, 0x0a, 0xfe, 0xf5, 0x72, 0xaa, 0x5f, 0xd8, 0xa0, 0x20, 0x44, 0xd1, 0x5f, 0x4a, 0xa5, 0xcc, 0xda, 0xc5, 0x88, 0x6d, 0x0b, 0xc7, 0xd6, 0xe2, 0x92, 0x64, 0xd8, 0x43, 0xcb, 0xa2, 0xf7, 0x2e, 0x6b, 0x5b, 0xdc, 0x51, 0x24, 0xde, 0xe5, 0x0d, 0x55, 0x55, 0x54, 0x95, 0x23, 0xbe, 0xe3, 0x8c, 0x8b, 0xe1, 0x5a, 0x80, 0x1d, 0xdc, 0xde, 0xd6, 0x82, 0xc4, 0x65, 0x59, 0x94, 0xa6, 0xe9, 0x52, 0x86, 0x5a, 0xed, 0x6d, 0xf8, 0x7f, 0x23, 0x91, 0x03, 0xea, 0xe7, 0x85, 0x8c, 0x18, 0xe4, 0x52, 0x4c, 0x62, 0x69, 0x1b, 0x83, 0xad, 0x54, 0x4a, 0x45, 0x43, 0x23, 0xce, 0xe1, 0xf0, 0x0f, 0x8b, 0xc4, 0xf9, 0x58, 0x92, 0xb8, 0xb8, 0x2d, 0xdc, 0x8e, 0xcd, 0x58, 0x2a, 0xba, 0x12, 0x7f, 0xbe, 0x66, 0x0a, 0xf7, 0x6d, 0x2d, 0x2b, 0xc4, 0xbc, 0x42, 0x5c, 0xb9, 0x28, 0x95, 0x3b, 0x3f, 0x41, 0xb3, 0xc5, 0x7c, 0x16, 0xb6, 0xb0, 0xa1, 0x01, 0x1b, 0xba, 0x74, 0x21, 0x2d, 0xbf, 0xf5, 0x2d, 0xed, 0x8b, 0x96, 0x60, 0xbe, 0x95, 0x35, 0x33, 0x67, 0xe5, 0xb9, 0xe1, 0xee, 0x8a, 0x6a, 0x71, 0x16, 0x0a, 0x7c, 0xc9, 0xa9, 0x42, 0x85, 0x84, 0x90, 0x74, 0xd6, 0x2c, 0x8e, 0xb4, 0x61, 0xbd, 0x63, 0x48, 0xa0, 0xca, 0xda, 0x97, 0xe1, 0x60, 0x2f, 0x4d, 0x04, 0x30, 0x5a, 0x49, 0xd0, 0x7c, 0xd0, 0x9c, 0xd8, 0xe4, 0x0e, 0x31, 0xbc, 0x2c, 0xd6, 0xd1, 0x84, 0xfd, 0xc2, 0x10, 0x84, 0x51, 0x4c, 0xc5, 0xa4, 0xda, 0x68, 0x12, 0xd8, 0xda, 0x70, 0x2f, 0x1b, 0xb9, 0x82, 0x7c, 0x6c, 0x40, 0xcd, 0x7c, 0x5c, 0x0c, 0xbe, 0x23, 0x7e, 0xe7, 0x8e, 0xf9, 0xb7, 0xf8, 0xb1, 0x93, 0xab, 0x6a, 0x69, 0xdd, 0x29, 0x09, 0x94, 0xe2, 0xba, 0x53, 0x51, 0x26, 0xfa, 0x2b, 0x6a, 0x4a, 0x68, 0x09, 0xa8, 0x0e, 0x95, 0xd6, 0x94, 0x62, 0x5c, 0x59, 0x45, 0xa8, 0xa6, 0xf6, 0xca, 0xb9, 0x85, 0x1a, 0xbf, 0xbf, 0x0c, 0xc9, 0x2a, 0x92, 0x4c, 0xd6, 0x42, 0x9a, 0x5a, 0x2b, 0xbe, 0xc5, 0xa6, 0x17, 0x52, 0xe4, 0xa5, 0x8b, 0x1b, 0x14, 0xab, 0x6f, 0x38, 0x41, 0x22, 0x8d, 0x2c, 0x72, 0xfa, 0x5f, 0x97, 0x17, 0xef, 0xd0, 0xab, 0xe6, 0xc8, 0x41, 0x2e, 0xcd, 0x97, 0xba, 0xf3, 0xbf, 0xac, 0xc1, 0x89, 0xcc, 0xfe, 0x0b, 0xda, 0x7b, 0xb5, 0xac, 0xfe, 0x86, 0xe6, 0xb2, 0x6e, 0xbc, 0x35, 0xef, 0xbf, 0x72, 0x80, 0x29, 0xb7, 0xff, 0xa2, 0x06, 0xff, 0x97, 0x55, 0x2c, 0x91, 0xd9, 0x7f, 0xa6, 0x5e, 0xa3, 0xcc, 0x13, 0x26, 0x66, 0x5e, 0xeb, 0xe2, 0x45, 0xb1, 0x76, 0xc6, 0x90, 0x88, 0xcb, 0x96, 0x36, 0xb6, 0xe0, 0x84, 0xcd, 0x4d, 0xad, 0x60, 0xde, 0x68, 0x34, 0xd6, 0xbe, 0x62, 0x71, 0x2b, 0x51, 0xae, 0xb6, 0x65, 0xad, 0xf5, 0x44, 0x82, 0xc2, 0x22, 0x76, 0x0d, 0x67, 0x4f, 0x96, 0x8a, 0xc8, 0xa8, 0xb0, 0x89, 0xdc, 0xb6, 0xb0, 0xad, 0x1d, 0x97, 0x90, 0xf6, 0xb6, 0x86, 0xa5, 0x6c, 0xb5, 0x4d, 0x65, 0x51, 0x96, 0x34, 0x71, 0x88, 0x5c, 0x4d, 0x9b, 0x98, 0x5e, 0x07, 0xa7, 0x48, 0x94, 0x4e, 0x9c, 0x57, 0x51, 0x12, 0xba, 0x23, 0x70, 0xf7, 0xe5, 0x92, 0x2c, 0x42, 0x76, 0x0a, 0x8b, 0x66, 0x89, 0x78, 0x83, 0xff, 0x12, 0x14, 0x63, 0xf2, 0xc7, 0x0a, 0x7e, 0x6a, 0x18, 0x6a, 0x8e, 0xa1, 0x24, 0x75, 0x01, 0x86, 0x9a, 0x76, 0xa5, 0xce, 0xf3, 0x9b, 0x17, 0xa4, 0xbd, 0xa7, 0xc3, 0x7f, 0x0d, 0x7b, 0x88, 0x0b, 0x6b, 0xaf, 0x7e, 0xce, 0x5f, 0xb3, 0xfc, 0xeb, 0x9e, 0xf3, 0xd7, 0xb4, 0xfd, 0xe5, 0x73, 0xfe, 0x85, 0xd2, 0x7f, 0xfa, 0x9c, 0x3f, 0xfb, 0x2f, 0x9d, 0xf3, 0xd7, 0xcc, 0xb9, 0xf2, 0x39, 0x7f, 0x4d, 0xd5, 0xd8, 0x73, 0xfe, 0x85, 0x9e, 0xab, 0x9d, 0xf3, 0xd7, 0x84, 0xc7, 0x9e, 0xf3, 0xd7, 0xdc, 0x79, 0xe9, 0x39, 0x7f, 0x4d, 0xd9, 0x7f, 0xcb, 0x39, 0xbf, 0x8a, 0xfc, 0x1d, 0xc7, 0xe8, 0x52, 0x57, 0x66, 0xc7, 0xf0, 0xde, 0x6e, 0xb6, 0x9b, 0xd8, 0x04, 0xba, 0x77, 0x5f, 0xa5, 0x13, 0xe6, 0x13, 0x3d, 0x92, 0x36, 0xef, 0x5a, 0xf7, 0xab, 0x35, 0x71, 0x66, 0x6f, 0x7e, 0xca, 0xd7, 0x82, 0x37, 0xe7, 0x75, 0xa5, 0xe0, 0x95, 0x14, 0x06, 0x84, 0xd7, 0x77, 0xc8, 0x3b, 0xc8, 0xa7, 0x09, 0xc4, 0xc6, 0x91, 0xff, 0xcc, 0x03, 0x5b, 0x40, 0xc7, 0xef, 0x0d, 0x1f, 0xea, 0x3a, 0xd4, 0x25, 0x7a, 0x0e, 0xbe, 0x6a, 0x34, 0x52, 0x0a, 0x1a, 0x03, 0x8a, 0xe7, 0x77, 0xae, 0xac, 0x4d, 0x20, 0x59, 0x42, 0xd3, 0x02, 0xa0, 0xa1, 0xb3, 0x9d, 0x9b, 0xd7, 0xe9, 0x20, 0xb8, 0x18, 0x26, 0x87, 0xef, 0xbe, 0x95, 0x74, 0xa9, 0x26, 0xe3, 0xbb, 0x3d, 0x62, 0xb8, 0xb9, 0x13, 0x86, 0x22, 0x83, 0x30, 0xe9, 0xa7, 0xbf, 0x96, 0x32, 0xe9, 0xbd, 0x29, 0x08, 0x93, 0x6c, 0x9d, 0xf0, 0xfe, 0x13, 0x70, 0x1d, 0x59, 0x6a, 0xbb, 0xf6, 0x3a, 0xd2, 0xdb, 0x30, 0x52, 0xcc, 0x7c, 0x3d, 0x64, 0xdd, 0x5c, 0x01, 0xd9, 0x51, 0x75, 0xf5, 0xfd, 0x29, 0x4d, 0x56, 0x66, 0x87, 0x5b, 0x67, 0xbc, 0x8e, 0x2c, 0x77, 0x64, 0xc7, 0x13, 0xbd, 0xc6, 0xee, 0xb2, 0xe9, 0xaa, 0x76, 0xcb, 0x51, 0xe6, 0x81, 0x9a, 0xdf, 0x04, 0xa3, 0x6f, 0x89, 0x7b, 0xa4, 0xc6, 0xf9, 0xeb, 0x62, 0x76, 0x94, 0x73, 0xac, 0xed, 0x20, 0x9a, 0xa8, 0x47, 0x26, 0x2d, 0x97, 0x77, 0xf6, 0x84, 0xeb, 0xf9, 0x39, 0x9b, 0x4e, 0x05, 0x82, 0x62, 0x4b, 0xd1, 0xe0, 0x6f, 0x46, 0x1c, 0x69, 0x86, 0xcc, 0x70, 0x81, 0x7f, 0x6f, 0x38, 0x8f, 0x8f, 0x3d, 0x68, 0xf1, 0xf7, 0x44, 0xf9, 0xa0, 0xbc, 0x93, 0xb0, 0x85, 0x85, 0x8c, 0xc3, 0x5f, 0x1f, 0xc7, 0x91, 0xdc, 0x3d, 0x58, 0xdb, 0x6b, 0xf9, 0x1d, 0xad, 0xba, 0x5e, 0xff, 0x5e, 0x25, 0xa7, 0x4c, 0xcc, 0x29, 0x53, 0xca, 0x3a, 0x78, 0x3a, 0xbd, 0xef, 0xb0, 0xe7, 0xe2, 0x7c, 0x37, 0x96, 0x34, 0x24, 0xed, 0xe4, 0xa7, 0xda, 0x39, 0xda, 0x4b, 0x03, 0xb3, 0x91, 0x0d, 0xaa, 0xf7, 0xd9, 0x3d, 0x0e, 0x47, 0xba, 0x87, 0x42, 0x87, 0x27, 0x79, 0x62, 0xff, 0x7e, 0x32, 0xf4, 0x80, 0x09, 0x31, 0x3e, 0x62, 0x9c, 0x86, 0x7d, 0xd8, 0x87, 0xf3, 0x9a, 0xfa, 0x12, 0x40, 0xea, 0xcc, 0xfb, 0x26, 0x7c, 0x78, 0x2e, 0xe7, 0xd6, 0xe1, 0x1f, 0xc9, 0x6c, 0x1f, 0x6d, 0x78, 0x00, 0xf8, 0x13, 0xbf, 0x7f, 0x2b, 0x3e, 0xea, 0x66, 0xb1, 0x4c, 0x03, 0x6e, 0xd2, 0xa5, 0x61, 0x54, 0xff, 0x90, 0x87, 0xf4, 0x5b, 0x13, 0xe9, 0x49, 0x97, 0x90, 0xed, 0x67, 0x3f, 0x1a, 0xf4, 0x84, 0x27, 0xeb, 0x66, 0xe2, 0x18, 0x9d, 0x8d, 0x64, 0x33, 0x7d, 0x6f, 0x3b, 0x96, 0xfc, 0x5b, 0xe4, 0x73, 0xa8, 0xe4, 0xdf, 0x8a, 0x16, 0x49, 0xf5, 0xd3, 0x5f, 0x27, 0x6b, 0xe9, 0xb3, 0xcc, 0x4b, 0xd9, 0x87, 0x11, 0xc9, 0x1a, 0xc0, 0x87, 0x22, 0x0e, 0x44, 0xe2, 0x6c, 0x93, 0x66, 0xca, 0x7c, 0x3b, 0x79, 0xcb, 0x72, 0x6d, 0xa0, 0x53, 0x5f, 0x9a, 0x57, 0xdc, 0x4f, 0x98, 0xa0, 0xf8, 0x58, 0x20, 0x7f, 0x62, 0x8b, 0x0c, 0xe4, 0x15, 0x68, 0xee, 0x19, 0x30, 0x4f, 0xda, 0x03, 0x82, 0xf7, 0x0c, 0xe4, 0x64, 0x1b, 0xf1, 0x4d, 0x67, 0xa6, 0xbf, 0xc0, 0xe1, 0xe6, 0x0d, 0x0e, 0x1f, 0xa9, 0xda, 0x84, 0x58, 0xa8, 0x71, 0xb1, 0xf3, 0x37, 0x96, 0xf3, 0x9d, 0x94, 0xe7, 0x7d, 0x1a, 0xbe, 0xf3, 0x1c, 0xbd, 0xbd, 0x0c, 0x06, 0xc8, 0xaf, 0x29, 0xb3, 0xc2, 0x0f, 0x03, 0x11, 0x6d, 0x74, 0xfc, 0xeb, 0x48, 0x67, 0x18, 0x64, 0x5b, 0x62, 0xec, 0xc8, 0x3a, 0x20, 0xd2, 0x19, 0x47, 0x04, 0x60, 0xbd, 0x62, 0xe5, 0x0a, 0xcb, 0xf6, 0x9e, 0x31, 0x9a, 0x8d, 0x58, 0x16, 0x95, 0x6f, 0x32, 0xe2, 0x9b, 0x0a, 0xdf, 0x34, 0xd9, 0x46, 0x25, 0x4c, 0xa9, 0x03, 0xf9, 0x86, 0x09, 0xaa, 0xc2, 0x3a, 0x83, 0x1a, 0x54, 0x61, 0xab, 0x34, 0xc9, 0x80, 0x38, 0xc5, 0xbe, 0x34, 0xe1, 0x6c, 0xc9, 0x40, 0xf7, 0x35, 0xc3, 0x99, 0x74, 0x1f, 0x3b, 0xac, 0x63, 0x3a, 0xda, 0x0e, 0x49, 0xe3, 0xc3, 0x92, 0x12, 0xfb, 0xe2, 0xa3, 0xfa, 0xe4, 0x7e, 0x5e, 0x1f, 0x7e, 0x06, 0xf4, 0xd3, 0x5f, 0x4f, 0x9b, 0x0b, 0x22, 0xef, 0x47, 0x83, 0x83, 0x52, 0xe2, 0xbc, 0x14, 0x71, 0x74, 0x8c, 0x84, 0x37, 0x84, 0x31, 0x36, 0x86, 0x31, 0xd0, 0x17, 0xdc, 0xca, 0x3c, 0xc6, 0xf5, 0xdc, 0xc0, 0xfc, 0x33, 0xd9, 0xd6, 0x31, 0x7f, 0xe1, 0x86, 0x5b, 0xe8, 0x8c, 0x5e, 0x47, 0xad, 0xe2, 0xf6, 0x9b, 0x5d, 0x06, 0xd7, 0x04, 0x46, 0xa3, 0xf6, 0x12, 0xd5, 0xa7, 0xbb, 0x53, 0xe0, 0x31, 0xe2, 0xf4, 0xf5, 0xfd, 0x33, 0xe9, 0x6c, 0xb4, 0x16, 0x33, 0xbd, 0x0c, 0x51, 0x29, 0xe9, 0xce, 0xf2, 0x33, 0x60, 0x4c, 0xe4, 0x24, 0x3a, 0x40, 0x24, 0x9f, 0x44, 0x46, 0xb8, 0x85, 0xec, 0x48, 0x24, 0xf2, 0x39, 0x91, 0xc8, 0x87, 0xa8, 0x1f, 0x79, 0x07, 0x67, 0x7b, 0xdf, 0x39, 0x29, 0x5b, 0xce, 0x5f, 0x55, 0xa5, 0x74, 0xf7, 0xbe, 0xaa, 0x4a, 0x68, 0x4e, 0x73, 0x6d, 0x52, 0xec, 0x3d, 0xbd, 0xb5, 0x42, 0x5c, 0x0c, 0xd6, 0x60, 0x75, 0x4b, 0x81, 0xa2, 0x87, 0x91, 0x15, 0x6c, 0x02, 0x43, 0xc4, 0x40, 0x1e, 0xe9, 0x68, 0x5f, 0xfd, 0x87, 0x75, 0x75, 0x4c, 0xbf, 0xe5, 0x4a, 0x71, 0x51, 0xb0, 0xb6, 0xca, 0xc3, 0x09, 0x6d, 0xd1, 0x44, 0x7e, 0x46, 0x63, 0x8b, 0x47, 0x45, 0x2b, 0x23, 0x40, 0xa7, 0x31, 0xfe, 0xb7, 0xe6, 0x4c, 0xeb, 0xa4, 0xcf, 0xc3, 0x7f, 0xca, 0xbf, 0xef, 0x73, 0x1b, 0x58, 0x22, 0x79, 0x19, 0xef, 0x1b, 0x6d, 0x09, 0xb1, 0xfc, 0x73, 0xb8, 0x47, 0x4c, 0xb5, 0xff, 0x90, 0xb5, 0x15, 0x6c, 0x15, 0x9f, 0xc3, 0x24, 0xd2, 0x63, 0x57, 0x6c, 0x86, 0x4d, 0x22, 0xbd, 0xf4, 0x67, 0x9f, 0x80, 0xc9, 0x8a, 0xcd, 0x30, 0x0b, 0x7d, 0xcf, 0x7f, 0x01, 0x6c, 0xec, 0x5b, 0x03, 0x0e, 0xba, 0x1d, 0xee, 0x01, 0xc8, 0x55, 0x6c, 0x88, 0xe5, 0x45, 0xf5, 0x2e, 0x0f, 0x14, 0xb0, 0xaf, 0x1b, 0xa0, 0xc8, 0x7b, 0x9a, 0xd9, 0xa7, 0x9b, 0xa3, 0xd8, 0x14, 0xf3, 0xb9, 0x82, 0x50, 0xa6, 0xd8, 0x14, 0x0b, 0xba, 0x7c, 0x50, 0xc5, 0xde, 0xb3, 0x20, 0xe4, 0x9a, 0x0b, 0x77, 0xfa, 0x5e, 0x80, 0xbb, 0xc5, 0x4a, 0xb2, 0x2a, 0x46, 0xba, 0xfc, 0xc6, 0x34, 0x8b, 0x62, 0xd6, 0x10, 0x7f, 0x0f, 0x6e, 0x08, 0x83, 0xdc, 0x24, 0xce, 0x65, 0xda, 0xa8, 0xa9, 0x7a, 0xbf, 0x9e, 0x5e, 0xd7, 0xad, 0xb1, 0x31, 0x75, 0x7d, 0xf5, 0x2a, 0x75, 0x1d, 0x9f, 0xac, 0xab, 0x11, 0x8a, 0x5c, 0xf3, 0x60, 0x0e, 0xd6, 0xc1, 0x97, 0xd2, 0x69, 0x1d, 0x6e, 0x66, 0x18, 0xa0, 0xe1, 0x96, 0xa2, 0xb8, 0x95, 0x14, 0xd2, 0x5f, 0xb3, 0xe0, 0xf4, 0xad, 0x3e, 0xc5, 0xf4, 0x7d, 0x6c, 0xa2, 0x80, 0x2b, 0x94, 0x5e, 0xac, 0xae, 0x89, 0xb3, 0xd1, 0x71, 0xe3, 0x2a, 0xf5, 0x45, 0xb0, 0x2f, 0x62, 0x27, 0x6d, 0xf1, 0x01, 0xa6, 0x3d, 0xe0, 0x3d, 0xa7, 0x9b, 0x8c, 0x21, 0xd9, 0x37, 0x07, 0xc1, 0x74, 0x73, 0x35, 0x98, 0xe9, 0x54, 0x10, 0x99, 0x4b, 0x66, 0x9b, 0x97, 0xe9, 0xef, 0xf0, 0x9b, 0xfc, 0x3a, 0xd2, 0x83, 0x8d, 0xca, 0x37, 0x7b, 0xd2, 0xed, 0xf6, 0x8a, 0x45, 0xa4, 0x5b, 0x84, 0xfd, 0x71, 0x2d, 0x08, 0x64, 0xc1, 0x1c, 0x09, 0xd8, 0xa8, 0xbe, 0xf9, 0x2a, 0x40, 0xf6, 0x27, 0x71, 0x36, 0x7d, 0x8c, 0xb3, 0xb4, 0x00, 0x7f, 0xb7, 0xe1, 0xaf, 0x10, 0x7f, 0xdf, 0xf4, 0x6d, 0x85, 0x22, 0xd2, 0xdf, 0x9a, 0xff, 0x56, 0xca, 0xda, 0x99, 0x93, 0xcf, 0xc0, 0x27, 0x45, 0xf2, 0xde, 0xac, 0x61, 0x76, 0xd8, 0xe8, 0x7b, 0x83, 0xe8, 0xb1, 0x57, 0x93, 0x77, 0x2b, 0x89, 0xe9, 0x0e, 0x2e, 0x0c, 0x48, 0x2b, 0xad, 0x4e, 0xd0, 0x33, 0x1b, 0x19, 0x34, 0xcf, 0xc9, 0xaa, 0xc2, 0x26, 0xce, 0x93, 0x84, 0xef, 0xa9, 0xeb, 0x9e, 0xe6, 0x83, 0x22, 0x16, 0xfe, 0x7b, 0xb2, 0x31, 0x41, 0x1a, 0xf2, 0x11, 0x7e, 0xb3, 0xaf, 0x80, 0x85, 0x9e, 0x19, 0x13, 0x7a, 0x1b, 0x0b, 0xfd, 0xe3, 0x98, 0xd0, 0x42, 0x16, 0xfa, 0xe7, 0x31, 0xa1, 0xdf, 0x64, 0x36, 0xf9, 0xba, 0xd3, 0x6f, 0x98, 0x94, 0xd2, 0x0d, 0x93, 0x75, 0x09, 0xab, 0x5d, 0x64, 0xdd, 0x93, 0x9f, 0xef, 0x91, 0x56, 0x75, 0xc5, 0x29, 0x98, 0xdc, 0x61, 0x3b, 0x7c, 0x3f, 0xd6, 0x7d, 0xa8, 0x69, 0x87, 0x6d, 0x01, 0xa3, 0xca, 0xb6, 0xe0, 0xb3, 0x90, 0x1b, 0x11, 0x5d, 0x13, 0xaa, 0xc8, 0x2a, 0xc0, 0x02, 0x97, 0x03, 0x24, 0x17, 0xf9, 0x7c, 0x5b, 0x41, 0x1e, 0x2e, 0xc9, 0xc7, 0x18, 0xa3, 0xe0, 0xa6, 0x1d, 0xeb, 0xc3, 0xef, 0x24, 0xe3, 0x91, 0xdf, 0xe1, 0x94, 0x01, 0x54, 0x62, 0x35, 0xa7, 0xf0, 0x4c, 0xf3, 0xf7, 0x2c, 0xcd, 0x29, 0x9c, 0x3f, 0x8f, 0x05, 0xfe, 0x50, 0x48, 0x76, 0x4f, 0xd6, 0xb8, 0x3a, 0x03, 0x7e, 0x37, 0x40, 0x07, 0xeb, 0xd9, 0x91, 0x34, 0x8b, 0x9e, 0xec, 0xae, 0x88, 0x90, 0x69, 0x76, 0xc0, 0x7b, 0x06, 0x0d, 0x64, 0x84, 0xb5, 0x53, 0x3a, 0xa1, 0x04, 0x3a, 0x6c, 0x0e, 0xd8, 0x11, 0x1d, 0xdf, 0xbf, 0xba, 0x91, 0xec, 0x1e, 0xea, 0x5d, 0xea, 0xc4, 0x6d, 0xbd, 0x83, 0x2e, 0x58, 0x2e, 0xe9, 0x8d, 0x6a, 0x2d, 0xc0, 0x6d, 0x53, 0x3c, 0xb0, 0x3c, 0xba, 0xe2, 0x40, 0xef, 0x77, 0xe2, 0x88, 0x8d, 0x64, 0x6d, 0x61, 0xe8, 0x4e, 0x23, 0x98, 0x5d, 0x25, 0x90, 0xc3, 0xec, 0xa9, 0x59, 0x63, 0x90, 0xe5, 0x80, 0x43, 0xf3, 0xbb, 0x08, 0xa3, 0x98, 0x1f, 0x07, 0x3b, 0xd3, 0x6a, 0x2a, 0x23, 0x3b, 0x90, 0x51, 0xb2, 0x95, 0xc3, 0x6d, 0xd5, 0x94, 0x93, 0x5e, 0x53, 0x54, 0x85, 0x7f, 0x8b, 0x5d, 0xed, 0xd0, 0x09, 0x01, 0xfc, 0x1b, 0x67, 0xf6, 0xd7, 0x68, 0x46, 0x56, 0x13, 0xee, 0x1b, 0x05, 0xa8, 0x55, 0x6c, 0xaa, 0xd5, 0x29, 0x36, 0xd5, 0x16, 0x04, 0x35, 0x61, 0x0d, 0xb3, 0x5a, 0x41, 0x50, 0x92, 0x58, 0x5c, 0xe2, 0xbf, 0xd3, 0x8f, 0x61, 0x5a, 0xb1, 0xd8, 0x7f, 0x47, 0x0d, 0xb3, 0xc2, 0x86, 0x73, 0xa2, 0x85, 0xe5, 0x1b, 0xf5, 0x62, 0xbf, 0x31, 0xed, 0x78, 0x6e, 0x75, 0x2d, 0x0b, 0x17, 0x49, 0x29, 0x26, 0x20, 0x4d, 0xa1, 0xb0, 0x63, 0x38, 0x46, 0x99, 0x16, 0x5f, 0x6a, 0x25, 0x65, 0x16, 0x5a, 0xc8, 0x2a, 0x6f, 0x03, 0xe7, 0x22, 0x6c, 0x2e, 0xc8, 0xa7, 0x9b, 0x9c, 0x45, 0x2e, 0x28, 0x12, 0x67, 0xc0, 0x9c, 0x58, 0x43, 0x72, 0x9e, 0xe9, 0x39, 0x37, 0x21, 0x38, 0x71, 0x0d, 0xd1, 0x4d, 0x43, 0x6e, 0x03, 0x0c, 0xf8, 0xd7, 0x09, 0xc6, 0xeb, 0xdb, 0xe1, 0x56, 0x30, 0x21, 0x3e, 0x5f, 0x8f, 0xbf, 0x6c, 0xfc, 0x7d, 0x03, 0x7f, 0x66, 0x4c, 0x9d, 0x77, 0xbd, 0x07, 0x6e, 0x08, 0xc5, 0x91, 0xc2, 0xe7, 0x45, 0x01, 0xe7, 0x00, 0xf9, 0xe0, 0x98, 0x4c, 0x9a, 0x43, 0xe4, 0x49, 0x0f, 0x7f, 0x75, 0x98, 0xbe, 0x18, 0x16, 0xe0, 0x5f, 0x6c, 0x55, 0x70, 0x75, 0xa4, 0x2c, 0x38, 0x03, 0x0a, 0xc3, 0x1e, 0x77, 0xb1, 0xe8, 0x26, 0xdd, 0x4f, 0xa3, 0x30, 0x4a, 0xf7, 0xb3, 0x28, 0x62, 0xb5, 0x00, 0xe7, 0x7e, 0x3a, 0x84, 0x80, 0x6f, 0x63, 0x97, 0x01, 0xd7, 0x39, 0xe3, 0xc4, 0x7a, 0xa3, 0x96, 0x69, 0xcd, 0xf9, 0xc8, 0xcf, 0x6f, 0x91, 0xa4, 0x5a, 0x0e, 0x74, 0x7e, 0xb8, 0xa4, 0x07, 0x6a, 0xa7, 0x05, 0xa1, 0x1a, 0xb1, 0x34, 0xd9, 0xda, 0xe1, 0x6c, 0x7e, 0xb6, 0xfa, 0xf8, 0xc7, 0x73, 0x4f, 0xc3, 0xf5, 0x15, 0xa7, 0x61, 0x32, 0xe9, 0x24, 0x91, 0xc5, 0xb2, 0x75, 0x93, 0x0d, 0x37, 0x81, 0xb0, 0xa8, 0x80, 0xb5, 0xf8, 0x86, 0xb2, 0x14, 0x9f, 0xa4, 0xb7, 0xc7, 0x45, 0xcf, 0xd4, 0x12, 0xc8, 0x15, 0x6b, 0xc5, 0x62, 0x1d, 0x1d, 0x55, 0x95, 0x86, 0x11, 0xc7, 0xa7, 0x7a, 0x60, 0x17, 0xbb, 0x7b, 0xa0, 0x58, 0xed, 0xab, 0x5b, 0x1f, 0x55, 0xf5, 0x77, 0x87, 0x77, 0x8f, 0xd5, 0x67, 0xe7, 0x2b, 0x13, 0x69, 0x75, 0x22, 0xed, 0x30, 0x32, 0x9e, 0x99, 0x69, 0x6f, 0xbe, 0xb7, 0x5f, 0xd4, 0x49, 0x86, 0x9a, 0xb8, 0x15, 0xf4, 0x3e, 0x10, 0xae, 0x7b, 0xd2, 0x0e, 0x38, 0x6b, 0xcf, 0x79, 0xff, 0xa3, 0x87, 0xee, 0xed, 0x18, 0x83, 0x5d, 0xed, 0xba, 0x9a, 0x2e, 0x83, 0x08, 0xe2, 0xa2, 0x2f, 0x52, 0x76, 0x99, 0x90, 0xdb, 0x5e, 0x80, 0xeb, 0x89, 0x84, 0x3f, 0x03, 0xf1, 0x8c, 0xe4, 0x65, 0x92, 0x6b, 0x58, 0x30, 0xec, 0x3f, 0xaa, 0xdc, 0x4c, 0x26, 0x2b, 0xa3, 0xc5, 0x56, 0x17, 0x78, 0x10, 0xb7, 0xed, 0xe0, 0xf0, 0xb9, 0x60, 0x86, 0x05, 0x7c, 0xde, 0x80, 0xf7, 0x78, 0xc5, 0x14, 0x2f, 0x38, 0xf9, 0x3b, 0xbe, 0xcd, 0xb4, 0xc0, 0xf1, 0xfb, 0xf1, 0x99, 0x8b, 0x98, 0xed, 0x42, 0x28, 0xb7, 0xa8, 0x3a, 0xde, 0x43, 0xf7, 0x4a, 0xa7, 0xf8, 0x20, 0x0f, 0xbf, 0x6f, 0xc5, 0x75, 0x87, 0xca, 0x99, 0x4c, 0x3e, 0xe0, 0xf8, 0x0d, 0x28, 0xc4, 0x2c, 0x8f, 0xf7, 0xa4, 0x7c, 0x01, 0xd7, 0x0a, 0xeb, 0xed, 0x9d, 0xa0, 0x07, 0x3b, 0x62, 0x6f, 0x35, 0xd3, 0x40, 0x40, 0xdc, 0xff, 0x88, 0x7c, 0x99, 0xe4, 0xb0, 0x7b, 0xaa, 0x4e, 0x66, 0xa1, 0xb3, 0x19, 0x9e, 0xe2, 0xb3, 0x98, 0xee, 0x0a, 0xe3, 0xd3, 0x7e, 0xc5, 0x7a, 0x3a, 0xfe, 0xe7, 0xeb, 0x79, 0x95, 0x1a, 0x1e, 0x46, 0x49, 0xa4, 0x18, 0x6b, 0xe8, 0xc1, 0x55, 0xd6, 0x8d, 0x39, 0x93, 0x7f, 0x4f, 0xc3, 0x5c, 0xee, 0x9d, 0xfe, 0x11, 0xac, 0xed, 0x8d, 0x50, 0xcc, 0x5a, 0xf9, 0x77, 0x53, 0x88, 0xf7, 0xf2, 0x60, 0xf9, 0x93, 0x93, 0xe5, 0x3f, 0xe2, 0xaa, 0x84, 0x02, 0x2c, 0xd3, 0x00, 0x45, 0x0c, 0x66, 0xce, 0xa8, 0x72, 0xc4, 0xca, 0x0f, 0x8b, 0x21, 0x61, 0x71, 0x93, 0x59, 0x44, 0x30, 0x59, 0x97, 0x80, 0xe3, 0xe7, 0x48, 0x49, 0x23, 0xfe, 0x34, 0x3a, 0x47, 0xed, 0xe1, 0xf6, 0x0d, 0xde, 0x75, 0x41, 0x82, 0xd6, 0x11, 0x47, 0xf5, 0xfc, 0x27, 0x15, 0x83, 0x5f, 0x9d, 0x27, 0x0f, 0x62, 0x81, 0x15, 0x42, 0x1f, 0xdd, 0xac, 0x4f, 0x58, 0x7a, 0x68, 0x3d, 0x8d, 0xb3, 0xd2, 0x46, 0x2b, 0x61, 0xb1, 0x62, 0x89, 0x02, 0xf1, 0x64, 0x07, 0xd1, 0xef, 0x3b, 0x6f, 0x4c, 0x58, 0xd7, 0x25, 0xbb, 0xa3, 0xa3, 0x62, 0x22, 0xa3, 0x62, 0x50, 0xca, 0xc1, 0x35, 0xd3, 0xe0, 0x22, 0x73, 0x17, 0x02, 0xe9, 0x4e, 0x21, 0x25, 0x26, 0x9b, 0x25, 0x09, 0xe8, 0x5f, 0x24, 0x39, 0xc9, 0x9c, 0xb1, 0x39, 0xdd, 0xf5, 0xcd, 0xf4, 0x9c, 0x90, 0x0e, 0xd3, 0x99, 0xba, 0x95, 0x6c, 0xdc, 0x15, 0xb8, 0xc0, 0x61, 0x6b, 0xc6, 0xd5, 0x61, 0x09, 0xf2, 0x8d, 0x76, 0xf8, 0x26, 0x69, 0xf1, 0xed, 0x6b, 0x87, 0xdc, 0x28, 0x58, 0x46, 0xf3, 0x0f, 0xef, 0x90, 0x07, 0x1b, 0x76, 0x6b, 0x98, 0xe7, 0xb8, 0x3e, 0x91, 0x63, 0x72, 0x36, 0x75, 0x62, 0x0f, 0x31, 0x1e, 0x57, 0x96, 0x71, 0x46, 0x4e, 0x4a, 0x86, 0x2f, 0x0f, 0xfa, 0xc8, 0x33, 0x09, 0x38, 0x8c, 0x76, 0x30, 0x13, 0x57, 0xba, 0x5c, 0xf8, 0xe8, 0x59, 0xa2, 0x03, 0x50, 0x62, 0xa4, 0x1b, 0x69, 0x8e, 0xb4, 0x99, 0xc3, 0x56, 0x90, 0xd4, 0xcc, 0x09, 0xfa, 0xc2, 0x86, 0x0e, 0xa8, 0x60, 0x3d, 0x4b, 0x56, 0x0c, 0x78, 0x9d, 0x82, 0x10, 0xc9, 0x14, 0xd5, 0x29, 0xce, 0xc6, 0x02, 0x3a, 0x81, 0x79, 0xca, 0x7e, 0x3c, 0x59, 0xbb, 0xff, 0xcb, 0x6b, 0x97, 0xd2, 0x79, 0xc0, 0x95, 0x9c, 0xf4, 0x8e, 0xdf, 0xc7, 0xdf, 0x07, 0x54, 0x26, 0xae, 0x8a, 0x75, 0x29, 0x5d, 0x03, 0x29, 0x37, 0xd4, 0x1d, 0x9d, 0x38, 0xd0, 0x1d, 0x2e, 0xbc, 0x6c, 0xab, 0xb3, 0x93, 0xf9, 0x8e, 0x24, 0x5a, 0xed, 0xf3, 0x49, 0x6e, 0x5c, 0x11, 0xf9, 0x38, 0x6f, 0x64, 0x3a, 0xd9, 0x57, 0x6b, 0x07, 0xb4, 0x3e, 0xde, 0x21, 0x8c, 0xee, 0xa9, 0x28, 0xe9, 0xa4, 0xa7, 0xf5, 0xd2, 0x98, 0x1c, 0xd2, 0x68, 0x88, 0x19, 0x70, 0x34, 0x52, 0xed, 0x65, 0x36, 0x74, 0x77, 0x33, 0x9f, 0x71, 0x93, 0xd6, 0xb8, 0xe9, 0xce, 0x76, 0x4e, 0xca, 0x26, 0x11, 0xe5, 0x42, 0xeb, 0x33, 0x8e, 0x65, 0x61, 0xb8, 0x20, 0x48, 0x3e, 0x50, 0xdd, 0xc4, 0x61, 0x21, 0xb6, 0xda, 0x61, 0xd5, 0x47, 0x3d, 0xa4, 0xff, 0x33, 0x0e, 0xc2, 0x46, 0xf6, 0xdd, 0xcf, 0xbf, 0x7f, 0x04, 0x11, 0x83, 0xce, 0x81, 0xdc, 0xf3, 0xae, 0x88, 0x2e, 0x9a, 0x29, 0x69, 0xa3, 0x1a, 0x5a, 0xc9, 0x70, 0xd5, 0xcd, 0xe3, 0x5a, 0x7b, 0x7b, 0x57, 0x23, 0xa7, 0xcc, 0x74, 0x5d, 0xc0, 0x59, 0xdd, 0x2b, 0x89, 0x35, 0xf1, 0xe6, 0x93, 0x89, 0x1e, 0xa9, 0xcb, 0x57, 0xec, 0x95, 0x30, 0x0b, 0x09, 0x60, 0x60, 0xab, 0xbe, 0x62, 0xd7, 0x88, 0xd7, 0x08, 0x71, 0xd6, 0x44, 0xf5, 0x08, 0x67, 0x46, 0x35, 0xfd, 0x5d, 0x0d, 0x3a, 0x6e, 0xfd, 0x48, 0xae, 0x46, 0x09, 0x23, 0x0f, 0x7b, 0xf7, 0xda, 0x30, 0x08, 0xd5, 0x1d, 0x9a, 0x1d, 0x5d, 0x8d, 0x00, 0xef, 0x28, 0x7d, 0xa0, 0x0b, 0x4e, 0x87, 0xdb, 0xc2, 0x00, 0x5b, 0x30, 0xde, 0x88, 0xe3, 0xfa, 0x04, 0x8e, 0xda, 0x89, 0xf4, 0x11, 0xa4, 0x7b, 0x5a, 0xcb, 0x9e, 0x84, 0xba, 0xcb, 0xf4, 0x99, 0x2a, 0xd9, 0xda, 0x7b, 0x71, 0x6e, 0x7e, 0xbb, 0xaa, 0xef, 0x72, 0xfd, 0x8a, 0xbf, 0xd7, 0x29, 0x8e, 0xe6, 0x8a, 0xef, 0xa7, 0x6c, 0x0f, 0xa1, 0x98, 0xf0, 0x96, 0xdd, 0x87, 0x3a, 0x41, 0xeb, 0xd3, 0x9a, 0x7d, 0xd0, 0xc7, 0x9e, 0x05, 0xb0, 0x91, 0xed, 0x65, 0x39, 0x20, 0xbf, 0x05, 0xe0, 0x69, 0x0a, 0x5b, 0xfd, 0x34, 0x6c, 0x66, 0x4f, 0x33, 0x3c, 0x46, 0x52, 0x24, 0xbd, 0xaf, 0x3d, 0xc0, 0xe1, 0xd7, 0x56, 0xc3, 0xc6, 0xa0, 0xa7, 0xa5, 0x53, 0x6a, 0x16, 0xbd, 0xdf, 0xed, 0x59, 0xae, 0xda, 0xd9, 0xd3, 0x98, 0x4d, 0xe1, 0x5d, 0x9b, 0x78, 0x7c, 0x57, 0x36, 0x8b, 0x6f, 0x90, 0xac, 0xdf, 0xee, 0xb2, 0x32, 0xe9, 0x38, 0x0e, 0xcb, 0xb5, 0x3b, 0xbb, 0x1a, 0x6d, 0x97, 0x40, 0x75, 0x47, 0xe6, 0xd0, 0x7b, 0x7c, 0x23, 0x2f, 0x2d, 0x9e, 0x85, 0xa5, 0x39, 0x2f, 0x29, 0xab, 0x9b, 0xed, 0x07, 0x0c, 0x75, 0x6f, 0xe2, 0x50, 0xdd, 0xd9, 0xf0, 0x98, 0x6e, 0x2b, 0x8e, 0xe5, 0xad, 0x92, 0x4e, 0x37, 0x00, 0xd7, 0xd1, 0x4a, 0xce, 0xc7, 0x83, 0xdf, 0x1c, 0x09, 0x6d, 0x81, 0xdc, 0x2c, 0x9a, 0x87, 0x5d, 0x81, 0x57, 0xb1, 0x57, 0xf2, 0xa2, 0x42, 0xba, 0x67, 0x07, 0xa7, 0xb2, 0x96, 0xa1, 0x88, 0x38, 0xa1, 0x35, 0x37, 0xb8, 0x05, 0x4e, 0x84, 0x0d, 0xb4, 0xaa, 0xa2, 0x04, 0x3d, 0x13, 0xb1, 0xf5, 0x04, 0xce, 0x9a, 0x23, 0xf8, 0x7b, 0x1f, 0x7f, 0x1f, 0x60, 0x6a, 0x87, 0xef, 0x19, 0xe4, 0x81, 0xf0, 0x09, 0x1a, 0xe9, 0x09, 0x46, 0x57, 0x68, 0xc4, 0x4d, 0x1d, 0xc8, 0x80, 0xc1, 0x8d, 0xd4, 0xef, 0x36, 0x3b, 0xbb, 0x27, 0xcb, 0xfb, 0x5e, 0x9d, 0x9a, 0x13, 0x88, 0xd1, 0x3f, 0x40, 0x19, 0xbd, 0x9b, 0xe9, 0x6d, 0xe9, 0x15, 0x5b, 0x59, 0x3d, 0xd5, 0xbd, 0xcc, 0x52, 0xab, 0x11, 0xe9, 0xbf, 0x99, 0x2c, 0xff, 0x60, 0xbd, 0x73, 0x10, 0x53, 0xa2, 0x51, 0xb2, 0xc3, 0x0d, 0xb0, 0x75, 0xd4, 0x48, 0x52, 0x6e, 0x19, 0x3c, 0x37, 0x13, 0x5c, 0x12, 0xa3, 0xe1, 0x31, 0x5c, 0xd2, 0xfe, 0x68, 0xdd, 0x1a, 0x40, 0x6c, 0xfb, 0x80, 0x34, 0xc8, 0xfa, 0xbb, 0x1b, 0xcc, 0x64, 0x0b, 0x85, 0xe1, 0xee, 0x53, 0x1c, 0x77, 0xad, 0x3c, 0xce, 0x40, 0xb9, 0xb0, 0x1c, 0x54, 0x4c, 0x9b, 0xd7, 0x01, 0x47, 0x30, 0xa4, 0xbf, 0xaa, 0xef, 0x3d, 0xc4, 0x3c, 0x4a, 0xdf, 0xd7, 0x8d, 0xbd, 0x49, 0x90, 0xc6, 0x70, 0xce, 0x58, 0x8c, 0xa4, 0xb4, 0x09, 0xac, 0xa4, 0x7a, 0x57, 0x2d, 0xfb, 0x4e, 0x2f, 0xf6, 0x87, 0x95, 0xac, 0x2e, 0xb2, 0x1b, 0x18, 0x37, 0x13, 0x84, 0x15, 0xfb, 0x03, 0x39, 0x41, 0x53, 0xb2, 0xae, 0xaa, 0x4b, 0xfa, 0x64, 0xb5, 0xd2, 0x27, 0x5c, 0x7b, 0xae, 0x03, 0xfb, 0x04, 0xa5, 0xda, 0x48, 0xa6, 0xf2, 0xdd, 0xc0, 0xee, 0x47, 0x7f, 0x46, 0x3d, 0xc2, 0xfc, 0x0f, 0xd3, 0xbd, 0xeb, 0xf4, 0xb6, 0xab, 0x52, 0xbd, 0x92, 0x0d, 0x97, 0xc4, 0x28, 0xbd, 0x82, 0xbc, 0xb0, 0xfa, 0xa3, 0xfb, 0xbb, 0xc1, 0x85, 0xeb, 0x78, 0xb2, 0x5f, 0xba, 0x1a, 0x70, 0xb1, 0x77, 0xb1, 0x5d, 0xce, 0xef, 0x68, 0x78, 0xbf, 0x50, 0x1c, 0xf2, 0x9b, 0xe2, 0x26, 0xe2, 0xa9, 0x45, 0xbe, 0x43, 0xb1, 0x9c, 0xe1, 0xac, 0x2c, 0x27, 0xfb, 0xca, 0x85, 0x63, 0xa5, 0x52, 0xfa, 0x6a, 0x5b, 0x55, 0xdf, 0x5c, 0x5c, 0xa5, 0xc5, 0x69, 0x07, 0xb1, 0x67, 0x1e, 0xc2, 0x5e, 0x91, 0xcc, 0x09, 0x38, 0x66, 0xb7, 0x45, 0xe5, 0xba, 0x86, 0x43, 0xcd, 0x5f, 0xcd, 0xe6, 0xd4, 0xea, 0x36, 0xd2, 0x23, 0xfe, 0xe0, 0x2f, 0xf5, 0xa6, 0x35, 0xa7, 0xae, 0x37, 0x65, 0xd9, 0x85, 0x61, 0xd7, 0x37, 0x46, 0xb5, 0xcd, 0xc1, 0x24, 0x93, 0x34, 0x7a, 0x4b, 0x78, 0x14, 0xd6, 0x22, 0xe6, 0x0a, 0x11, 0x29, 0x61, 0x97, 0x92, 0xd5, 0x92, 0xd1, 0xac, 0xef, 0xd4, 0x93, 0x84, 0xe6, 0xda, 0x50, 0xf5, 0xf0, 0x65, 0x68, 0x83, 0xa0, 0x60, 0x4e, 0x22, 0x55, 0x22, 0xcd, 0x23, 0x6c, 0xff, 0xcf, 0x4a, 0xfb, 0x7f, 0xdf, 0xd9, 0x5e, 0xf5, 0x70, 0x74, 0x3a, 0xe2, 0xc2, 0x09, 0xba, 0xff, 0xc8, 0x31, 0x39, 0x4c, 0x58, 0x6b, 0x42, 0xac, 0x55, 0x6c, 0x55, 0x0d, 0xef, 0xe6, 0x16, 0x58, 0x12, 0x56, 0xca, 0x58, 0xad, 0xaf, 0xf3, 0xef, 0x6d, 0xf6, 0x24, 0x7b, 0xce, 0x01, 0xef, 0xb3, 0x9b, 0xa0, 0x99, 0xac, 0x14, 0xa5, 0xff, 0x2c, 0x18, 0xfa, 0x6e, 0x02, 0xdf, 0xba, 0x12, 0xf8, 0x16, 0xd1, 0xe3, 0xf8, 0x64, 0xe3, 0xd7, 0xfb, 0x92, 0x71, 0xb4, 0x5d, 0xb3, 0xe1, 0x10, 0xe7, 0x40, 0x91, 0xda, 0x92, 0x85, 0x4f, 0x33, 0xae, 0xe5, 0xb6, 0x9d, 0x09, 0xdb, 0xd3, 0x5b, 0xa1, 0x0e, 0x9f, 0x3b, 0x98, 0x2c, 0xe7, 0x19, 0x2b, 0xa7, 0xe1, 0x2a, 0xc1, 0xe7, 0xce, 0x92, 0xb4, 0x3e, 0x98, 0x31, 0xa6, 0x27, 0xcd, 0x64, 0x3b, 0x8b, 0x2c, 0xf8, 0x4b, 0xcc, 0x1a, 0xe9, 0x9f, 0xcc, 0x26, 0x08, 0xc4, 0xcb, 0x3c, 0xb1, 0x89, 0x27, 0x9a, 0xea, 0x48, 0x67, 0xfd, 0x4e, 0x1b, 0xa6, 0x88, 0xcc, 0xb1, 0x60, 0x1e, 0x98, 0x66, 0x81, 0xbd, 0xda, 0x3a, 0x9d, 0x70, 0x4d, 0x99, 0xeb, 0xac, 0x84, 0xc4, 0x17, 0xdd, 0xf0, 0x4c, 0xda, 0x08, 0xdd, 0xc8, 0xac, 0xdf, 0xbc, 0xc9, 0x6c, 0xb2, 0x88, 0xc9, 0xfb, 0x0f, 0x13, 0xb0, 0x8e, 0x75, 0xc4, 0xb1, 0x57, 0x7e, 0x98, 0x93, 0xb4, 0xe6, 0x4c, 0x3c, 0x0f, 0xdd, 0x63, 0x42, 0xfe, 0xc7, 0x1c, 0xec, 0x8a, 0x90, 0x27, 0xdc, 0x13, 0x53, 0x11, 0x0f, 0xe0, 0x88, 0xc5, 0xb3, 0x23, 0xde, 0xa0, 0xb2, 0xf8, 0xa6, 0x56, 0xc0, 0xfb, 0x48, 0x9d, 0x3e, 0xc0, 0xf2, 0x1c, 0x53, 0xbd, 0x50, 0xc7, 0xf6, 0xc3, 0xd9, 0x3e, 0xc3, 0x55, 0xfa, 0xba, 0xff, 0x4a, 0x7d, 0x8d, 0x3d, 0xad, 0xa1, 0x9e, 0xe6, 0x5a, 0xb0, 0x74, 0xf7, 0xb8, 0xb0, 0xd0, 0xda, 0x0a, 0x3a, 0x5b, 0x2b, 0x18, 0xec, 0x34, 0x87, 0x9d, 0x60, 0xc0, 0x56, 0x1b, 0x59, 0x7f, 0xbc, 0xcf, 0x7a, 0x01, 0x34, 0x5b, 0x51, 0x32, 0x11, 0xc9, 0x93, 0x49, 0x24, 0xb3, 0x1e, 0xa0, 0x87, 0xec, 0x6b, 0xe3, 0xec, 0x6c, 0x90, 0x26, 0x61, 0xb8, 0x81, 0x5b, 0xe7, 0x5c, 0x94, 0x99, 0x86, 0x4d, 0x6f, 0x49, 0x66, 0x25, 0x46, 0x00, 0x58, 0x94, 0x93, 0x8a, 0xb9, 0xdb, 0x92, 0xda, 0x0f, 0xec, 0x18, 0x96, 0x40, 0x73, 0x37, 0xca, 0x5c, 0xaa, 0x70, 0x7e, 0x32, 0x7e, 0x25, 0x8f, 0xff, 0x06, 0x71, 0xaf, 0x2a, 0xa4, 0x06, 0x93, 0xd2, 0xd2, 0x7e, 0x94, 0xb6, 0x97, 0x08, 0x9a, 0x49, 0xbe, 0x67, 0xc1, 0x8c, 0x3c, 0xaa, 0x10, 0xb1, 0x5c, 0x42, 0x09, 0x84, 0xc4, 0x48, 0x28, 0xab, 0xa0, 0x31, 0x55, 0x7f, 0xa5, 0xee, 0x20, 0x7c, 0x2c, 0xd1, 0x2e, 0xc7, 0xd8, 0x94, 0x5a, 0xe4, 0xd1, 0xdf, 0xc5, 0xb4, 0x9e, 0x2c, 0xe4, 0x7e, 0x54, 0x02, 0x4c, 0x8c, 0x8f, 0xca, 0xeb, 0x32, 0xd4, 0x68, 0x06, 0xca, 0x46, 0x08, 0x9b, 0x07, 0x01, 0x2f, 0xae, 0xcb, 0x42, 0x0a, 0x8e, 0xc6, 0x7e, 0x0c, 0x7d, 0x52, 0x60, 0xb3, 0xe0, 0xf8, 0xdf, 0x8f, 0x86, 0x1d, 0x05, 0xa7, 0x66, 0xbc, 0xf7, 0x04, 0x09, 0x04, 0xd3, 0x95, 0xeb, 0x77, 0xf5, 0x5a, 0xb1, 0x1c, 0xb4, 0x57, 0xab, 0x0b, 0x83, 0x18, 0x77, 0xd5, 0x1a, 0xe8, 0xae, 0x92, 0xfe, 0x2a, 0xed, 0xfe, 0xba, 0x6d, 0xbe, 0x24, 0x4f, 0xa5, 0xdd, 0x57, 0xc8, 0x49, 0xc5, 0x62, 0x33, 0xaf, 0x92, 0x9e, 0x43, 0x4c, 0x4c, 0x8d, 0x3a, 0x72, 0x64, 0xcf, 0x42, 0x4e, 0x23, 0x08, 0x9f, 0x61, 0x2d, 0x72, 0xd2, 0xee, 0xb5, 0x0d, 0x80, 0x0f, 0xe5, 0xb2, 0x15, 0xb0, 0x0a, 0x6b, 0x66, 0x62, 0xa9, 0x54, 0x2b, 0xc0, 0x8c, 0xd2, 0x19, 0x51, 0xea, 0x69, 0x25, 0x70, 0xe4, 0xd4, 0x96, 0xa4, 0xb7, 0xd2, 0xf7, 0xa7, 0x79, 0x53, 0x14, 0xfb, 0xbe, 0x6e, 0x66, 0x4f, 0xeb, 0xb1, 0xbf, 0x36, 0xdd, 0x8a, 0x73, 0x98, 0xae, 0x81, 0x30, 0x53, 0x22, 0x1f, 0xc2, 0x98, 0x9a, 0xad, 0x78, 0x2f, 0xc3, 0x50, 0xd3, 0x36, 0x6e, 0xef, 0x2c, 0x02, 0x42, 0xe5, 0x95, 0xd6, 0x89, 0x15, 0x45, 0xc8, 0x87, 0x70, 0xe8, 0xed, 0x48, 0x93, 0xaf, 0xba, 0x9e, 0x5c, 0xd2, 0x6f, 0xe3, 0xb0, 0x9e, 0xd7, 0xf1, 0x3e, 0x71, 0x39, 0x15, 0x8e, 0xfe, 0x65, 0x92, 0x38, 0x88, 0xfe, 0xe1, 0x2a, 0x8b, 0x3d, 0x14, 0xbe, 0x3b, 0xd0, 0x4a, 0xfb, 0xdd, 0x24, 0x47, 0x32, 0xeb, 0x63, 0xaf, 0x50, 0x9d, 0x70, 0x1d, 0x9d, 0x29, 0xcb, 0x41, 0x4f, 0x78, 0x92, 0x4b, 0x48, 0xcc, 0xc1, 0xef, 0xda, 0xd2, 0xe7, 0x20, 0x6c, 0xf0, 0xbf, 0xda, 0xac, 0x67, 0xb6, 0xa0, 0xa3, 0x58, 0x2f, 0x13, 0x5f, 0x5f, 0xbf, 0x1b, 0x4d, 0x48, 0x11, 0x1d, 0x33, 0xa5, 0x15, 0xca, 0xe9, 0x62, 0x22, 0xe7, 0x06, 0xc5, 0xba, 0x5b, 0x52, 0xe6, 0xf8, 0xee, 0xd3, 0x49, 0xe8, 0x41, 0x49, 0x63, 0x72, 0xc0, 0xef, 0x69, 0xac, 0xc8, 0xab, 0x59, 0x38, 0x53, 0x69, 0xf3, 0x0e, 0xd6, 0x6f, 0xc6, 0x98, 0x06, 0xc3, 0xec, 0x89, 0x30, 0xa5, 0x17, 0x91, 0x52, 0xb1, 0xef, 0x7e, 0x76, 0xaf, 0x4c, 0x8f, 0x79, 0x68, 0x3b, 0xbe, 0x92, 0x54, 0x1d, 0x23, 0x46, 0x55, 0xe5, 0xa7, 0x39, 0x39, 0xf2, 0xc7, 0x5c, 0x4f, 0xfc, 0x76, 0xb2, 0x81, 0x69, 0xb7, 0x92, 0xe5, 0x73, 0x94, 0x6f, 0x3b, 0x85, 0x40, 0x59, 0x54, 0xd5, 0x4f, 0x67, 0x0c, 0x5a, 0x67, 0x31, 0x51, 0x2f, 0x1f, 0x54, 0x0c, 0x0e, 0x7e, 0x21, 0xf9, 0xed, 0x19, 0x7b, 0xd6, 0x36, 0xa8, 0xec, 0xda, 0x69, 0x7e, 0x76, 0xc7, 0x75, 0x06, 0x1c, 0xa2, 0x9b, 0x6e, 0x38, 0x92, 0x26, 0x66, 0xa1, 0x6b, 0xa3, 0x4d, 0xd3, 0x01, 0xbf, 0xd9, 0x0a, 0xba, 0x5c, 0xe4, 0x09, 0x3f, 0xec, 0x9e, 0x56, 0xce, 0xec, 0x55, 0x23, 0x54, 0xae, 0xe6, 0x77, 0x2f, 0x7c, 0xb8, 0x15, 0x8c, 0x8f, 0xae, 0xa9, 0xee, 0x0d, 0xae, 0x8d, 0x68, 0x50, 0x86, 0xdb, 0x81, 0x54, 0x7e, 0x98, 0xd1, 0xd8, 0x63, 0x6c, 0x6d, 0x27, 0xdb, 0xc3, 0x33, 0xc1, 0x84, 0x74, 0x36, 0x87, 0xef, 0x04, 0x90, 0xec, 0x71, 0x63, 0x27, 0xcc, 0x96, 0x8f, 0xf9, 0x66, 0xca, 0xbf, 0xc5, 0x37, 0x41, 0xfe, 0x00, 0xdf, 0x3e, 0x9c, 0x81, 0x94, 0x58, 0x3e, 0x8e, 0x7f, 0x8d, 0xf2, 0xc7, 0x33, 0x7c, 0xf2, 0x49, 0x7c, 0x33, 0xcb, 0x67, 0x67, 0x78, 0xe5, 0x73, 0xbe, 0xe7, 0xe4, 0xf3, 0x51, 0xcd, 0x0c, 0x8f, 0x7c, 0x31, 0x46, 0x36, 0x7b, 0x87, 0x7d, 0x0f, 0xe3, 0xb8, 0x1d, 0x63, 0xdc, 0xe5, 0x64, 0x66, 0x2b, 0x4c, 0xcf, 0xf7, 0x01, 0x7f, 0xb7, 0xd5, 0xd6, 0x5d, 0xf9, 0xa9, 0x41, 0x23, 0x1f, 0x50, 0x2c, 0x4c, 0x5c, 0xbd, 0x06, 0xd3, 0xfe, 0xca, 0x1a, 0xa8, 0x2f, 0x57, 0x83, 0x91, 0xc7, 0xbe, 0x76, 0x0d, 0x8c, 0x58, 0x03, 0x73, 0x7a, 0x0d, 0xe4, 0x37, 0x2f, 0x5b, 0x83, 0x8f, 0xb1, 0xb4, 0xe3, 0x4a, 0xf9, 0xa6, 0x4b, 0x7a, 0x40, 0x18, 0x53, 0x7e, 0xce, 0xdf, 0x50, 0xfe, 0xfe, 0xbf, 0xaa, 0x7c, 0xf5, 0xe5, 0xca, 0xff, 0xea, 0xb1, 0xbf, 0x61, 0x04, 0xf2, 0xff, 0xca, 0x11, 0x50, 0x51, 0x0d, 0xc8, 0x12, 0x74, 0x5a, 0xf9, 0x39, 0x7f, 0x43, 0xf9, 0xd6, 0xbf, 0xb2, 0x7c, 0xe1, 0x72, 0x18, 0x30, 0xfc, 0xe8, 0x5f, 0xaa, 0x81, 0x7b, 0x54, 0x0d, 0x92, 0x92, 0xec, 0x3d, 0x1f, 0xf5, 0xc4, 0x51, 0x9e, 0xe5, 0xe9, 0x6c, 0xaa, 0xdf, 0x3d, 0x8b, 0xf5, 0xf8, 0xa6, 0x52, 0x23, 0xcf, 0x55, 0xeb, 0x53, 0x72, 0xe5, 0xfe, 0x18, 0x36, 0x5c, 0xa6, 0x36, 0x06, 0xf9, 0xad, 0xff, 0x54, 0x6d, 0xa6, 0xff, 0x55, 0xb5, 0x61, 0xbd, 0xb3, 0x5c, 0x85, 0xdf, 0x69, 0xf5, 0x19, 0xea, 0xfc, 0xda, 0xf5, 0x61, 0xf8, 0x79, 0xb5, 0xfa, 0xc8, 0xbf, 0xbc, 0x4c, 0x7d, 0xc6, 0x62, 0xeb, 0xa8, 0xbe, 0x59, 0x2e, 0x8c, 0xae, 0xcd, 0xe0, 0x67, 0xff, 0x85, 0xb5, 0xd9, 0xf7, 0x57, 0xd4, 0x46, 0xb8, 0x74, 0xa4, 0x06, 0xeb, 0xff, 0x52, 0x5d, 0xae, 0x3c, 0x73, 0xc1, 0xfd, 0x57, 0xcd, 0x5c, 0xd5, 0xe5, 0x66, 0xee, 0x9f, 0x4f, 0xfc, 0xe7, 0x29, 0x07, 0x88, 0x7f, 0x55, 0xf9, 0x97, 0x69, 0xfd, 0x9f, 0x1b, 0xae, 0x5c, 0xfa, 0x1d, 0x9f, 0x13, 0x4c, 0xe9, 0xe7, 0x64, 0x73, 0x1f, 0xac, 0x29, 0x5b, 0x60, 0x53, 0x3a, 0xe5, 0x4f, 0x89, 0x43, 0x47, 0xe9, 0xb4, 0x18, 0xe5, 0x8c, 0x22, 0xda, 0x43, 0xb6, 0x92, 0x2f, 0x25, 0x2b, 0xdb, 0x47, 0x55, 0x7c, 0x28, 0xe0, 0xda, 0x8c, 0x92, 0xda, 0x1f, 0x8f, 0xa0, 0x1c, 0xac, 0x43, 0x09, 0x17, 0xdf, 0x3f, 0xd7, 0x60, 0x7b, 0xce, 0x07, 0xfe, 0x30, 0xa7, 0x88, 0xda, 0xe3, 0x24, 0x8e, 0x5f, 0x69, 0x53, 0xd1, 0x4c, 0x98, 0x4c, 0xdc, 0x7f, 0xb0, 0x26, 0x92, 0xc9, 0xf6, 0xca, 0x6e, 0xbd, 0x93, 0xcb, 0x45, 0x2a, 0x9f, 0xa7, 0x20, 0xce, 0x77, 0xa1, 0xc9, 0xd6, 0x3b, 0x2f, 0x3f, 0xb1, 0xf7, 0x61, 0xcc, 0x66, 0xfe, 0x14, 0x01, 0xa6, 0x2c, 0x22, 0xef, 0x5d, 0xf7, 0x2e, 0xd2, 0xc5, 0x26, 0x48, 0xda, 0x58, 0x86, 0xa4, 0x8a, 0x8d, 0x37, 0x80, 0xfc, 0x54, 0xbd, 0x05, 0xff, 0xfe, 0xef, 0x06, 0x0f, 0xc6, 0x39, 0x22, 0x45, 0xf5, 0x3a, 0x7c, 0xda, 0xc3, 0x6e, 0xc9, 0xad, 0x05, 0xf9, 0x10, 0xd9, 0x45, 0xae, 0xb7, 0x4a, 0x56, 0x84, 0x78, 0x2e, 0x32, 0xb9, 0x3e, 0x13, 0x9f, 0x5b, 0x22, 0xd9, 0xf8, 0x77, 0x6b, 0x38, 0x53, 0xa2, 0xaf, 0x97, 0x23, 0x08, 0x2f, 0xbf, 0x12, 0x51, 0xf9, 0x6a, 0x2c, 0x55, 0xde, 0x4f, 0xb1, 0xf7, 0xc0, 0xf8, 0x6f, 0xe4, 0x01, 0xbe, 0xe5, 0x22, 0xf5, 0xdb, 0xa9, 0x39, 0x5c, 0x36, 0x51, 0x3d, 0x96, 0xe0, 0x78, 0x2c, 0xdf, 0x46, 0x09, 0x49, 0x0a, 0xd6, 0x90, 0xe7, 0x36, 0x27, 0xe2, 0x6b, 0x30, 0x17, 0x3a, 0x5b, 0x34, 0xc1, 0x52, 0x94, 0xa9, 0x90, 0xeb, 0x8a, 0x69, 0x68, 0xa6, 0x87, 0xba, 0x3b, 0x47, 0xf6, 0xdd, 0xe7, 0xd2, 0x31, 0x99, 0x4d, 0x48, 0xf1, 0xf6, 0x55, 0x0f, 0x5d, 0xba, 0xc7, 0x12, 0x15, 0x48, 0xf2, 0xbd, 0x02, 0xbf, 0xc9, 0xf7, 0x67, 0x54, 0xc7, 0x7b, 0x62, 0x50, 0xc6, 0x6c, 0x66, 0x26, 0x78, 0xce, 0xaf, 0xcd, 0x9b, 0xa9, 0x95, 0x9d, 0xba, 0x27, 0x2e, 0xe5, 0xcc, 0x7c, 0xff, 0x9c, 0x9c, 0x6f, 0x42, 0xa7, 0x34, 0x70, 0x5f, 0x4c, 0xdc, 0x1e, 0x4f, 0x58, 0xe2, 0x70, 0x41, 0x82, 0x97, 0x3a, 0x65, 0x66, 0x12, 0xfb, 0x56, 0x70, 0x54, 0xed, 0xfe, 0xe4, 0x9e, 0xba, 0x5e, 0x66, 0x51, 0x77, 0x43, 0xb0, 0x3b, 0x3c, 0xf9, 0x6a, 0x75, 0x90, 0x16, 0xe0, 0x18, 0x4f, 0xbe, 0x1a, 0xa7, 0x29, 0x15, 0xd1, 0x17, 0xf6, 0xdb, 0x24, 0xc6, 0xd5, 0xfa, 0x39, 0xd4, 0x34, 0x9f, 0xb2, 0x2f, 0x79, 0x0c, 0x21, 0xcc, 0x97, 0x8b, 0x59, 0x7e, 0x1a, 0xea, 0x30, 0x6f, 0x7d, 0x8a, 0x53, 0x4d, 0xdb, 0x1d, 0x31, 0x24, 0xe4, 0x53, 0xc2, 0x22, 0x2e, 0x9f, 0x8e, 0x6e, 0x33, 0xc1, 0x26, 0x76, 0xee, 0x68, 0xd7, 0x8e, 0xf6, 0xff, 0x59, 0x4b, 0xed, 0x30, 0x87, 0x20, 0x5e, 0x08, 0xd1, 0x09, 0x49, 0x30, 0x1e, 0x59, 0x75, 0xe5, 0xbd, 0xe8, 0x2b, 0xef, 0x31, 0x13, 0xaf, 0xcb, 0x76, 0xfa, 0x0a, 0xaf, 0xbc, 0x27, 0x72, 0x52, 0xb1, 0x48, 0x4b, 0xf6, 0x34, 0x2c, 0x81, 0x77, 0x87, 0x61, 0xa8, 0x56, 0x95, 0x3d, 0xab, 0x47, 0xad, 0xd8, 0x55, 0x55, 0x07, 0x56, 0x07, 0x5e, 0x93, 0x54, 0xcb, 0x07, 0xb1, 0x8d, 0x96, 0x04, 0x17, 0x1a, 0x2c, 0x4d, 0x8d, 0x0b, 0x4a, 0xf8, 0x9a, 0x14, 0x2f, 0x6a, 0x54, 0x4b, 0xda, 0xe8, 0xa0, 0xa4, 0x8a, 0xce, 0xac, 0xfc, 0x74, 0x41, 0x27, 0x9f, 0xcf, 0x64, 0x3d, 0xcf, 0x96, 0xda, 0x41, 0x64, 0x37, 0x10, 0xad, 0x4b, 0x75, 0x93, 0x15, 0x1f, 0x79, 0xfb, 0xa7, 0xcd, 0xe5, 0x27, 0x15, 0x88, 0xc7, 0x73, 0xc6, 0xd8, 0x48, 0x2d, 0x46, 0x89, 0xc2, 0xc6, 0x38, 0xd2, 0x1b, 0x0e, 0xc4, 0xe3, 0xb4, 0x53, 0xb7, 0xe3, 0xd4, 0x3a, 0x50, 0xc9, 0x4f, 0x5c, 0xef, 0x83, 0x77, 0x95, 0xd3, 0x8d, 0x02, 0x76, 0xc7, 0x7e, 0x81, 0x68, 0x07, 0x53, 0xc4, 0x88, 0x10, 0xdb, 0xe8, 0x6b, 0x5a, 0x13, 0x98, 0xa1, 0x5f, 0x32, 0x29, 0xef, 0x86, 0x64, 0xa8, 0x11, 0xfa, 0xaf, 0x27, 0xaf, 0x54, 0x64, 0xab, 0x71, 0xdf, 0xb4, 0x00, 0xbc, 0x85, 0x63, 0xb9, 0x1f, 0xdf, 0xf7, 0xe3, 0xfb, 0x3e, 0xda, 0x6b, 0xfd, 0x7e, 0x33, 0xdf, 0x87, 0xfd, 0x7e, 0x11, 0xdf, 0x7b, 0xc5, 0xef, 0x8d, 0xca, 0x37, 0xb3, 0xdf, 0xf8, 0x7d, 0x91, 0xdb, 0x6f, 0xfc, 0xbe, 0x16, 0x9e, 0x52, 0xbe, 0xb7, 0x24, 0xac, 0xb2, 0x93, 0xa7, 0xe2, 0xbf, 0xd0, 0xda, 0xb3, 0x84, 0xc3, 0xbf, 0x5f, 0x21, 0x3a, 0x20, 0xb7, 0xae, 0x37, 0x72, 0xe7, 0xa8, 0x71, 0x81, 0xb1, 0xe7, 0x0b, 0x2d, 0x05, 0x57, 0xde, 0x11, 0x1b, 0xbb, 0x97, 0xf5, 0xdd, 0xdf, 0x26, 0x65, 0x14, 0xb3, 0xa2, 0xcf, 0x23, 0xb0, 0xb2, 0x4e, 0x2a, 0x92, 0x56, 0xb5, 0xf1, 0x56, 0xfb, 0xf5, 0x64, 0x81, 0xbd, 0xb1, 0x0c, 0xff, 0xaa, 0x17, 0xe9, 0x91, 0x1e, 0xc5, 0x19, 0x3d, 0x2a, 0xa0, 0x76, 0xfc, 0xe4, 0x2d, 0xd8, 0x32, 0xaa, 0xb4, 0x19, 0x1c, 0xc7, 0x70, 0x56, 0xd2, 0x4c, 0xa5, 0xf3, 0xb4, 0x2d, 0xfc, 0xdc, 0x0e, 0xe9, 0x36, 0x52, 0x09, 0xc9, 0x92, 0x18, 0x33, 0x0b, 0xe9, 0x7a, 0x8c, 0x1e, 0xb7, 0x02, 0xec, 0x55, 0x5b, 0xa2, 0x47, 0x48, 0x5b, 0x54, 0xb1, 0xad, 0x68, 0xd3, 0x4d, 0x07, 0x0d, 0x3c, 0x1b, 0x31, 0xea, 0x4e, 0xa2, 0xf8, 0x71, 0x2b, 0xcd, 0x9f, 0x47, 0x8f, 0xc2, 0x53, 0x52, 0x26, 0x86, 0xab, 0x60, 0x5b, 0x44, 0x0b, 0x4d, 0xd8, 0xac, 0x7c, 0x1c, 0x4b, 0x7e, 0x8a, 0xa0, 0xc3, 0x70, 0x01, 0xea, 0x23, 0xb4, 0xeb, 0x9d, 0x35, 0xd5, 0x03, 0x79, 0xc1, 0xe9, 0x70, 0x6f, 0x44, 0x8b, 0xa9, 0x01, 0x6e, 0x8d, 0x8e, 0x8b, 0x6f, 0x81, 0x3c, 0x0a, 0x65, 0x50, 0x4b, 0x22, 0x93, 0xf1, 0x09, 0xd0, 0x15, 0xd1, 0xc5, 0x74, 0xdd, 0x64, 0x55, 0x8d, 0x87, 0x77, 0x45, 0xb4, 0xcb, 0x8d, 0x3f, 0xde, 0x92, 0x84, 0x6a, 0x60, 0x50, 0xf5, 0x91, 0x05, 0x98, 0xd7, 0x8f, 0x22, 0xf6, 0x28, 0x74, 0x08, 0xcc, 0xca, 0xc1, 0xaa, 0x8f, 0xee, 0xef, 0xc6, 0x10, 0x41, 0x88, 0x18, 0x2c, 0x70, 0x77, 0x17, 0xad, 0xf2, 0x94, 0x2a, 0x14, 0x67, 0x52, 0xd9, 0x31, 0x84, 0x7e, 0x31, 0x0d, 0xba, 0x9f, 0x41, 0xbf, 0xc8, 0xa1, 0xab, 0xd3, 0xa1, 0xc7, 0x11, 0xb4, 0x75, 0x8a, 0x8d, 0xdb, 0x9e, 0x79, 0x0b, 0xf1, 0x81, 0xce, 0x35, 0x2b, 0x49, 0x7f, 0xc6, 0xd7, 0x0e, 0x65, 0x15, 0x9f, 0x43, 0x1e, 0xf6, 0xab, 0x31, 0xfd, 0x7c, 0xb3, 0x1c, 0x69, 0x6c, 0xea, 0x34, 0x33, 0x2a, 0x1d, 0xe8, 0xfd, 0x1e, 0xed, 0xce, 0x16, 0xde, 0xde, 0x09, 0x5a, 0x28, 0x76, 0x55, 0x82, 0x0f, 0xdf, 0x8c, 0x50, 0xc6, 0xcf, 0x3e, 0x53, 0xa7, 0x9b, 0x46, 0x17, 0xd4, 0x5e, 0xef, 0x81, 0xc3, 0x4c, 0xdf, 0x0b, 0x07, 0x80, 0xfb, 0xf2, 0xb5, 0x38, 0x60, 0x97, 0x4e, 0x80, 0xc9, 0x77, 0xee, 0x0d, 0x74, 0xe7, 0xf9, 0xac, 0x3a, 0x7f, 0xf7, 0x8b, 0x6f, 0x84, 0xcd, 0x48, 0x21, 0xb5, 0xba, 0x57, 0x61, 0xb2, 0xa4, 0xd1, 0x75, 0xc1, 0x64, 0x94, 0xed, 0x76, 0xe9, 0x4e, 0x43, 0x06, 0xec, 0xe2, 0x78, 0x54, 0xf9, 0x61, 0x31, 0x9d, 0xc5, 0xe6, 0x27, 0xd6, 0xfe, 0xdb, 0xd9, 0x5a, 0xc9, 0x4e, 0xb4, 0x84, 0x81, 0xad, 0xb0, 0xc3, 0xe7, 0x37, 0xbb, 0x75, 0xd7, 0xab, 0xfc, 0x10, 0x8f, 0x68, 0xa2, 0xff, 0x84, 0xf3, 0x9b, 0xbc, 0xe6, 0xd8, 0x90, 0xf7, 0x19, 0xc3, 0x07, 0x10, 0x07, 0x80, 0x3f, 0xe2, 0x04, 0x4e, 0xe2, 0xfa, 0x7f, 0x76, 0x46, 0x27, 0xe1, 0x45, 0x3a, 0x1f, 0x80, 0x6f, 0xc3, 0x09, 0x2e, 0xe0, 0xec, 0x72, 0x66, 0x4d, 0xdb, 0x1f, 0xf4, 0x63, 0xae, 0x67, 0x31, 0xd7, 0x7f, 0xa2, 0x1c, 0x93, 0xb1, 0x75, 0xdc, 0x12, 0xf4, 0x84, 0x81, 0x54, 0x3d, 0xf4, 0x6e, 0xb9, 0x5b, 0x77, 0xfd, 0xe5, 0xea, 0x65, 0x69, 0x66, 0xbb, 0x95, 0x9c, 0x22, 0xf8, 0x68, 0xc7, 0xd4, 0x7b, 0x06, 0x54, 0xe5, 0x67, 0x54, 0x38, 0x33, 0x25, 0x4d, 0xbc, 0xba, 0xae, 0xe7, 0xe7, 0xfb, 0xc3, 0x17, 0x51, 0x06, 0xb7, 0xd1, 0x9e, 0xa6, 0x42, 0x13, 0x16, 0x27, 0x68, 0x42, 0xa2, 0xcc, 0x33, 0x1f, 0x2b, 0x65, 0x56, 0x2a, 0x6b, 0x91, 0x91, 0x71, 0x7e, 0x02, 0x79, 0xed, 0x39, 0xde, 0xd3, 0xed, 0x71, 0x0b, 0xc7, 0x03, 0xc6, 0xf8, 0xb5, 0x5e, 0xa4, 0x9e, 0x89, 0xb5, 0x4a, 0xc5, 0x20, 0xd4, 0xe9, 0x10, 0xd7, 0x7a, 0x40, 0x85, 0x30, 0xea, 0x24, 0x8c, 0x86, 0xc1, 0x64, 0x8c, 0x81, 0xd1, 0x20, 0x4c, 0x46, 0x12, 0x46, 0xcb, 0x60, 0xc6, 0x8d, 0x81, 0xd1, 0x22, 0xcc, 0xb8, 0x24, 0x8c, 0x81, 0xc1, 0x5c, 0x33, 0x06, 0xc6, 0x80, 0x30, 0xd7, 0x8c, 0xe5, 0x55, 0xc7, 0xc0, 0xdc, 0x83, 0x30, 0xf7, 0x26, 0x61, 0xea, 0x19, 0xcc, 0xa2, 0x31, 0x30, 0xf5, 0x08, 0xb3, 0x28, 0x09, 0xd3, 0xc0, 0x60, 0x1a, 0xc7, 0xc0, 0x34, 0x20, 0x4c, 0x63, 0x12, 0x26, 0xcc, 0x60, 0x22, 0x63, 0x60, 0xc2, 0x08, 0x13, 0x49, 0xc2, 0x34, 0x33, 0x98, 0x25, 0x63, 0x60, 0x9a, 0x11, 0x66, 0x49, 0x12, 0xa6, 0x85, 0xc1, 0xb4, 0x8e, 0x81, 0x69, 0x41, 0x98, 0xd6, 0x24, 0x4c, 0x1b, 0x83, 0x69, 0x1f, 0x03, 0xd3, 0x86, 0x30, 0xed, 0x49, 0x98, 0x28, 0x83, 0xf9, 0xfe, 0x18, 0x98, 0x28, 0xc2, 0x7c, 0x3f, 0x09, 0xb3, 0x9c, 0xc1, 0xfc, 0x60, 0x0c, 0xcc, 0x72, 0x84, 0xf9, 0x41, 0xfa, 0x99, 0x2a, 0xc2, 0xfc, 0x68, 0x0c, 0xcc, 0x2a, 0x84, 0xf9, 0x51, 0x12, 0x26, 0xce, 0x60, 0xba, 0xc6, 0xc0, 0x10, 0x6e, 0x74, 0x25, 0x61, 0xba, 0x19, 0xcc, 0xea, 0x31, 0x30, 0xdd, 0x08, 0xb3, 0x3a, 0x09, 0xb3, 0x86, 0xc1, 0xac, 0x1d, 0x03, 0xb3, 0x06, 0x61, 0xd6, 0x26, 0x61, 0xee, 0x63, 0x30, 0x3f, 0x1e, 0x03, 0x73, 0x1f, 0xc2, 0xfc, 0x38, 0x09, 0xd3, 0xc3, 0x60, 0xee, 0x1f, 0x03, 0xd3, 0x83, 0x30, 0xf7, 0x27, 0x61, 0x36, 0x31, 0x98, 0x9f, 0x8e, 0x81, 0xd9, 0x84, 0x30, 0x3f, 0x4d, 0xc2, 0x3c, 0xc1, 0x60, 0xfe, 0x69, 0x0c, 0xcc, 0x13, 0x08, 0xf3, 0x4f, 0x49, 0x98, 0x27, 0x19, 0xcc, 0xff, 0x1e, 0x03, 0xf3, 0x24, 0xc2, 0xfc, 0xef, 0x24, 0xcc, 0x53, 0x0c, 0xe6, 0xff, 0x8c, 0x81, 0x79, 0x0a, 0x61, 0xfe, 0x4f, 0x12, 0xe6, 0x69, 0x06, 0xf3, 0xcf, 0x63, 0x60, 0x9e, 0x46, 0x98, 0x14, 0x2f, 0xb8, 0x85, 0xc1, 0x3c, 0x33, 0x06, 0x66, 0x0b, 0xc2, 0x3c, 0x93, 0x84, 0xd9, 0xca, 0x60, 0x9e, 0x1d, 0x03, 0xb3, 0x15, 0x61, 0x9e, 0x4d, 0xc2, 0x6c, 0x63, 0x30, 0xcf, 0x8d, 0x81, 0xd9, 0x86, 0x30, 0xcf, 0x25, 0x61, 0x9e, 0x67, 0x30, 0x2f, 0x8c, 0x81, 0x79, 0x1e, 0x61, 0x5e, 0x48, 0xc2, 0xf4, 0x33, 0x98, 0x17, 0xc7, 0xc0, 0xf4, 0x23, 0xcc, 0x8b, 0x49, 0x98, 0xed, 0x0c, 0xe6, 0x67, 0x63, 0x60, 0xb6, 0x23, 0xcc, 0xcf, 0x92, 0x30, 0x3b, 0x18, 0xcc, 0x4b, 0x63, 0x60, 0x76, 0x20, 0xcc, 0x4b, 0x49, 0x98, 0x9d, 0x0c, 0xe6, 0xe7, 0x63, 0x60, 0x76, 0x22, 0xcc, 0xcf, 0x93, 0x30, 0xbb, 0x18, 0xcc, 0xcb, 0x63, 0x60, 0x76, 0x21, 0xcc, 0xcb, 0x49, 0x98, 0xdd, 0x0c, 0xe6, 0xff, 0x8e, 0x81, 0xd9, 0x8d, 0x30, 0xff, 0x37, 0x09, 0xb3, 0x87, 0xc1, 0xfc, 0x62, 0x0c, 0xcc, 0x1e, 0x84, 0xf9, 0x45, 0x12, 0xe6, 0x15, 0x06, 0xf3, 0x2f, 0x63, 0x60, 0x5e, 0x41, 0x98, 0x7f, 0x49, 0xc2, 0x0c, 0x30, 0x98, 0x57, 0xc7, 0xc0, 0x0c, 0x20, 0xcc, 0xab, 0x49, 0x98, 0xbd, 0x0c, 0xe6, 0xb5, 0x31, 0x30, 0x7b, 0x11, 0xe6, 0xb5, 0x24, 0xcc, 0x01, 0x06, 0x73, 0x70, 0x0c, 0xcc, 0x01, 0x84, 0x39, 0x98, 0x84, 0x39, 0xcc, 0x60, 0xde, 0x1b, 0x03, 0x73, 0x18, 0x61, 0xde, 0x4b, 0xc2, 0x8c, 0x30, 0x18, 0x79, 0x0c, 0xcc, 0x08, 0xc2, 0xc8, 0x09, 0x18, 0x01, 0x08, 0x46, 0x10, 0x46, 0xc3, 0x08, 0x70, 0xad, 0x57, 0x48, 0xd1, 0xf9, 0xd3, 0xdc, 0xef, 0x22, 0xf3, 0x3a, 0x75, 0x26, 0xe0, 0xf5, 0x79, 0xbb, 0xe3, 0x2c, 0xfc, 0x2c, 0xa6, 0xed, 0xc2, 0x12, 0x3e, 0x55, 0x34, 0xa9, 0xbe, 0x73, 0xbc, 0x8e, 0xf9, 0x24, 0xf4, 0x26, 0x34, 0xab, 0xb0, 0xa4, 0xd3, 0xfc, 0x1d, 0xdf, 0xce, 0x90, 0x66, 0x15, 0x3e, 0xcf, 0x62, 0x1d, 0x3e, 0x4d, 0xe6, 0xbd, 0x22, 0x2d, 0xef, 0x1f, 0xa6, 0xe5, 0xbd, 0x52, 0xc9, 0xfb, 0xff, 0xb9, 0x4a, 0xde, 0x2b, 0x92, 0x79, 0xff, 0x50, 0xc9, 0x7b, 0x25, 0xe6, 0xfd, 0xff, 0x24, 0xf3, 0xde, 0x97, 0x96, 0xf7, 0x2f, 0xd3, 0xf2, 0x7e, 0x5d, 0xc9, 0xfb, 0x57, 0x57, 0xc9, 0x7b, 0x5f, 0x32, 0xef, 0x5f, 0x2a, 0x79, 0xbf, 0x8e, 0x79, 0xff, 0x2a, 0x99, 0xf7, 0x5b, 0x69, 0x79, 0xbf, 0x9d, 0x96, 0xf7, 0x3b, 0x4a, 0xde, 0xff, 0xba, 0x12, 0x26, 0xd9, 0x61, 0xff, 0x47, 0xf3, 0x02, 0xa5, 0xbe, 0x52, 0x06, 0xf5, 0x06, 0x83, 0x5a, 0xcb, 0xc2, 0xdf, 0xfc, 0xe8, 0x27, 0xeb, 0xba, 0xd6, 0xd9, 0xe1, 0xd7, 0x96, 0x0c, 0x2a, 0xc5, 0xe6, 0x4d, 0xd5, 0x24, 0x17, 0x02, 0xe5, 0xbe, 0x72, 0x71, 0x5c, 0xdc, 0x1b, 0x83, 0xe2, 0x09, 0xc7, 0xef, 0x39, 0xfe, 0x3d, 0xca, 0x61, 0x5d, 0x59, 0xf7, 0x5a, 0x87, 0x40, 0xde, 0x29, 0x8f, 0xcf, 0xbb, 0xb6, 0x14, 0xde, 0xe2, 0xef, 0xf8, 0xf6, 0xb6, 0x43, 0x38, 0xfe, 0x13, 0x7c, 0xbe, 0x83, 0x35, 0xfc, 0x57, 0xee, 0xbf, 0x92, 0x41, 0xec, 0xe7, 0xef, 0xf8, 0xf6, 0x86, 0x03, 0x18, 0xc4, 0x9b, 0x58, 0xff, 0x5f, 0x23, 0xbf, 0xe1, 0x67, 0x5e, 0xb3, 0x99, 0x27, 0xfb, 0xb6, 0x0b, 0x9c, 0xe3, 0x6f, 0x7f, 0x9c, 0x73, 0xfa, 0xc4, 0x91, 0xd2, 0x33, 0x8a, 0x54, 0x8f, 0xf3, 0x48, 0xd4, 0x5e, 0xa3, 0x51, 0x85, 0x12, 0x3f, 0x72, 0x5b, 0xef, 0x4d, 0xeb, 0x64, 0xe7, 0x9e, 0x79, 0x52, 0x2e, 0x97, 0x24, 0x7c, 0x0e, 0x16, 0x36, 0x4a, 0x83, 0x83, 0x9e, 0xf7, 0x55, 0x31, 0x1d, 0x97, 0x3c, 0xd8, 0x2a, 0xd1, 0x8d, 0xad, 0x5d, 0x15, 0xa7, 0x21, 0x80, 0x5c, 0x9e, 0xdd, 0x65, 0x88, 0x15, 0x1c, 0x42, 0xfe, 0x98, 0xfc, 0x0b, 0xfe, 0xe6, 0xee, 0xaa, 0x87, 0x57, 0xae, 0x7c, 0x7f, 0x1d, 0x86, 0x9b, 0x5c, 0x19, 0x9d, 0xa6, 0x63, 0x14, 0xae, 0xad, 0x7a, 0x78, 0xde, 0x69, 0xf8, 0x3e, 0x79, 0x9a, 0x73, 0x65, 0x46, 0x73, 0x0f, 0x50, 0x18, 0xb0, 0x93, 0x6a, 0x31, 0xf7, 0x41, 0x57, 0x86, 0xcb, 0x90, 0xe0, 0xf9, 0x17, 0x94, 0x70, 0x9e, 0x9f, 0x9d, 0xbb, 0x3e, 0x4a, 0x7f, 0xff, 0x9d, 0xb4, 0x6d, 0x6c, 0xec, 0xde, 0x13, 0x72, 0x2d, 0x2d, 0x5a, 0xac, 0xbf, 0x06, 0x76, 0x7d, 0x3d, 0x1c, 0x43, 0xd9, 0xa9, 0x80, 0x8d, 0xcb, 0x5b, 0x69, 0xe3, 0xf5, 0x76, 0xda, 0x78, 0xbd, 0xa3, 0x8c, 0xd7, 0xbf, 0xb2, 0x98, 0xfd, 0x1f, 0x55, 0x50, 0x5c, 0x27, 0xe4, 0xd0, 0xa8, 0x96, 0xf9, 0xca, 0xd6, 0x77, 0xb1, 0xf0, 0x37, 0x91, 0x33, 0xbe, 0xaf, 0x1b, 0x47, 0x15, 0x79, 0xcc, 0xa2, 0x69, 0xa5, 0x30, 0x07, 0x6b, 0x2c, 0xa4, 0xe4, 0x94, 0x05, 0xcb, 0x92, 0x72, 0x8a, 0x09, 0xc7, 0x01, 0xe0, 0x09, 0x23, 0x69, 0x06, 0x03, 0x64, 0xd4, 0xd3, 0x9e, 0x8a, 0xa6, 0x81, 0x3c, 0x28, 0x59, 0x25, 0xf2, 0x15, 0x35, 0x2e, 0xbc, 0x9c, 0x8f, 0x12, 0xd3, 0x80, 0x2e, 0xc3, 0xbf, 0x73, 0xa1, 0x1c, 0x7b, 0x16, 0xae, 0xad, 0x03, 0x9f, 0x74, 0x37, 0xef, 0xfd, 0x40, 0x33, 0xf6, 0x2a, 0xe5, 0xfb, 0x36, 0x9d, 0xff, 0xdf, 0xeb, 0xe4, 0x5a, 0xd3, 0xe1, 0x6c, 0x76, 0x47, 0x83, 0xd2, 0x64, 0xf1, 0x34, 0x93, 0x06, 0x30, 0x8d, 0x0d, 0xa1, 0xab, 0x19, 0xf4, 0x61, 0x05, 0xce, 0x94, 0xcc, 0xdb, 0xc3, 0xe1, 0xb0, 0x5c, 0x1f, 0xeb, 0x4f, 0x3f, 0xdd, 0x26, 0x11, 0xe8, 0x84, 0xdd, 0xb6, 0x02, 0xcc, 0xd4, 0x2b, 0x95, 0xe4, 0x6d, 0x95, 0xf5, 0xc4, 0xdb, 0x0c, 0x1b, 0xd7, 0xb0, 0xf0, 0x77, 0x3e, 0x5a, 0xdf, 0xb3, 0xd6, 0xa2, 0xc1, 0x16, 0xff, 0x2b, 0xfb, 0xde, 0x9f, 0x06, 0xf7, 0x46, 0x1a, 0xdc, 0x9b, 0x04, 0x27, 0x6a, 0xb0, 0xa7, 0x7f, 0xed, 0x63, 0xf6, 0xb6, 0x35, 0xf0, 0x68, 0xd7, 0xdf, 0xc7, 0x1b, 0xdd, 0x5f, 0x6f, 0x74, 0x0c, 0x71, 0x4a, 0xb1, 0x88, 0x74, 0xd2, 0x1d, 0x50, 0x84, 0xdc, 0xf7, 0x1c, 0xd1, 0x6b, 0x13, 0x3a, 0xc0, 0xa1, 0x72, 0xaa, 0x1f, 0xeb, 0xfa, 0x87, 0x78, 0x83, 0xc6, 0xdd, 0x29, 0xcb, 0x18, 0x5e, 0x20, 0xea, 0xb6, 0xf7, 0x2c, 0x52, 0x89, 0x02, 0xb6, 0xe9, 0x76, 0x28, 0x47, 0x2c, 0xba, 0x5d, 0xf1, 0x85, 0x92, 0x5f, 0xdd, 0x8b, 0x2c, 0x92, 0x0e, 0x25, 0x98, 0x91, 0xbd, 0x6b, 0x76, 0x75, 0x85, 0x4d, 0x16, 0xd5, 0xa1, 0xee, 0x9a, 0x78, 0xc4, 0x70, 0x62, 0xbd, 0x55, 0x90, 0x4e, 0xdb, 0x01, 0xff, 0x6a, 0xa9, 0x17, 0x17, 0xe5, 0xd3, 0xb9, 0x24, 0xca, 0xf5, 0xd8, 0x47, 0xdc, 0xb2, 0x29, 0x42, 0x67, 0x12, 0xf4, 0xa1, 0x6e, 0x43, 0x17, 0xc9, 0x0b, 0x8b, 0x0e, 0x4d, 0xf3, 0x83, 0x0f, 0xa5, 0xf0, 0x32, 0x29, 0x27, 0x9d, 0x83, 0x43, 0x1c, 0xf2, 0x5d, 0xdf, 0x04, 0x28, 0xe7, 0xe0, 0xdf, 0xef, 0x43, 0x39, 0xe9, 0x4f, 0x57, 0x0f, 0x30, 0xdb, 0x45, 0x3b, 0x12, 0x7b, 0x7b, 0x8a, 0x6f, 0x36, 0xd2, 0x6c, 0x48, 0xe8, 0xa2, 0xaa, 0x21, 0xd7, 0xe7, 0xe2, 0x9a, 0xa6, 0xf8, 0x9b, 0x65, 0x54, 0x91, 0x07, 0xd4, 0x29, 0x1e, 0xae, 0x6b, 0x8a, 0x12, 0x93, 0x51, 0x91, 0x8e, 0x0c, 0x7c, 0x27, 0x8e, 0x49, 0xc7, 0xdd, 0x91, 0x5a, 0x26, 0x53, 0x57, 0x91, 0x7e, 0x86, 0xb2, 0x6b, 0xe5, 0x41, 0xb9, 0x3b, 0xff, 0x70, 0xef, 0xf7, 0xba, 0x49, 0xdb, 0x94, 0x49, 0x4f, 0x22, 0xd3, 0x08, 0xb5, 0xd2, 0x5d, 0x17, 0x94, 0x57, 0x51, 0x66, 0x62, 0xfb, 0x98, 0xc4, 0x47, 0x3b, 0xe0, 0x1a, 0xb6, 0xfb, 0xa8, 0xea, 0x98, 0xb8, 0xb7, 0x9b, 0x7a, 0x3c, 0xde, 0x45, 0x96, 0xcf, 0x48, 0x97, 0x3e, 0x47, 0xc3, 0x77, 0x15, 0x15, 0x2b, 0xe5, 0x6e, 0x9b, 0xe2, 0x41, 0xd3, 0x42, 0x1a, 0x8f, 0x1a, 0x5f, 0xab, 0x3c, 0x82, 0xf3, 0x5a, 0xa7, 0x9b, 0x41, 0x3b, 0x86, 0x91, 0x22, 0x76, 0xbb, 0x21, 0x3f, 0xd8, 0x15, 0x71, 0x7f, 0x8b, 0xe4, 0xa0, 0x11, 0xd2, 0x80, 0x6f, 0xda, 0xc6, 0xec, 0xa1, 0x99, 0x22, 0xda, 0xe4, 0xe9, 0xa7, 0x8e, 0x79, 0x96, 0x79, 0x48, 0x39, 0x09, 0x64, 0xb9, 0xb0, 0xba, 0x98, 0x62, 0xc2, 0x40, 0x97, 0xde, 0x83, 0xd2, 0x3a, 0x30, 0xeb, 0xdd, 0x0e, 0xd0, 0xb8, 0x48, 0x23, 0xd3, 0x40, 0xf6, 0xa9, 0xce, 0x94, 0x31, 0x6d, 0x0a, 0x33, 0xca, 0xb6, 0x0e, 0x6c, 0x87, 0x29, 0x92, 0xcd, 0xee, 0x20, 0x72, 0xfd, 0x80, 0x6c, 0x66, 0xc1, 0xea, 0x79, 0x66, 0x4d, 0x4a, 0xc5, 0xf6, 0x4f, 0xcf, 0x29, 0xf6, 0xa1, 0xb8, 0x5f, 0x58, 0x17, 0x88, 0xd8, 0xcf, 0x56, 0x2b, 0xe6, 0x75, 0xea, 0x01, 0x50, 0xcb, 0x4f, 0xf0, 0xbb, 0x4a, 0x49, 0x9d, 0x11, 0x76, 0xb2, 0xee, 0x52, 0x93, 0xae, 0x6b, 0x52, 0xbb, 0x35, 0xb1, 0x2b, 0x95, 0x82, 0xd0, 0x70, 0x8d, 0x0f, 0x33, 0xd5, 0xc3, 0x3a, 0x2a, 0x26, 0x83, 0xc7, 0x50, 0xf9, 0xd8, 0x93, 0x1a, 0xd2, 0x3e, 0x22, 0xec, 0x28, 0x7e, 0x0d, 0x67, 0xf5, 0xf9, 0xe8, 0xaa, 0x32, 0xf6, 0xb5, 0x78, 0x13, 0x7e, 0x9d, 0xab, 0x89, 0xd3, 0xbb, 0xe9, 0x0c, 0xdd, 0xc7, 0xa0, 0xd9, 0x75, 0xe8, 0xa9, 0x98, 0x50, 0x86, 0xed, 0xae, 0xeb, 0xc5, 0x90, 0xb7, 0x82, 0x35, 0xe1, 0xc9, 0xa3, 0x72, 0x66, 0x77, 0xf3, 0xa8, 0x5e, 0x64, 0xd7, 0x29, 0x71, 0x5b, 0x73, 0xdc, 0x01, 0xec, 0x45, 0x47, 0xda, 0xbe, 0x98, 0xb1, 0x62, 0xf0, 0xd0, 0x82, 0x72, 0xae, 0x47, 0x6a, 0x48, 0xb6, 0xe0, 0x61, 0xf2, 0x4d, 0x55, 0xb5, 0xb1, 0xae, 0x97, 0xf4, 0x73, 0x2f, 0xd7, 0x56, 0x96, 0x92, 0xa5, 0x2a, 0x1f, 0x3c, 0x94, 0x93, 0x4c, 0x47, 0xda, 0x2b, 0x0f, 0x27, 0xf4, 0x7a, 0x47, 0xa5, 0x13, 0x78, 0x3b, 0x63, 0x3f, 0x1a, 0xe8, 0xa2, 0xf8, 0xac, 0x62, 0x20, 0x9d, 0x0a, 0x33, 0xa3, 0x23, 0xbf, 0x4d, 0xde, 0x3c, 0xd3, 0x44, 0x69, 0xef, 0x8b, 0xee, 0x0b, 0xa8, 0xb8, 0x0f, 0x5b, 0x8e, 0x3d, 0x6e, 0xae, 0x67, 0xe2, 0x00, 0x23, 0x8d, 0x03, 0x8d, 0xfa, 0xe8, 0x3a, 0xb1, 0xbd, 0xd0, 0x2b, 0x8f, 0x80, 0x5a, 0xb9, 0x7d, 0xa1, 0x51, 0x6a, 0x6e, 0x65, 0x9a, 0x8d, 0x7a, 0xde, 0x13, 0xd4, 0xf6, 0x17, 0x42, 0x4c, 0xe3, 0x69, 0x34, 0x74, 0xe2, 0xae, 0x06, 0xd3, 0x83, 0xac, 0x12, 0x95, 0x7e, 0x7b, 0x58, 0xd1, 0x79, 0xbc, 0x3e, 0x92, 0x6b, 0x63, 0x9e, 0x1f, 0x2b, 0x06, 0x0f, 0xe6, 0x24, 0xfa, 0xaa, 0x65, 0x12, 0xf5, 0xb1, 0xfa, 0x64, 0x02, 0xb6, 0x86, 0x69, 0x73, 0x85, 0x8f, 0xd3, 0x0d, 0x03, 0x4c, 0x93, 0x8d, 0xe3, 0xf4, 0xca, 0x25, 0x35, 0xef, 0xbf, 0xb4, 0xe6, 0x84, 0xad, 0xcb, 0xf3, 0x78, 0xcd, 0x46, 0xc1, 0xab, 0x52, 0xd8, 0xc2, 0xbc, 0x03, 0x8e, 0x1e, 0x71, 0xf5, 0xe8, 0xd8, 0x48, 0xf6, 0x65, 0x6b, 0xf3, 0x3c, 0xab, 0x49, 0xbe, 0x55, 0xa9, 0xfd, 0x81, 0x7b, 0x78, 0x39, 0x57, 0x6c, 0x43, 0x77, 0xb2, 0x0d, 0xd9, 0xac, 0xdd, 0x26, 0x9a, 0x61, 0x5c, 0xab, 0x75, 0xf8, 0x7d, 0x5c, 0xcb, 0xaf, 0x67, 0xe3, 0x4d, 0x79, 0x66, 0x53, 0x4c, 0x62, 0xcf, 0x6c, 0xf8, 0x15, 0x8c, 0x63, 0xbb, 0xfc, 0x95, 0x9f, 0xe6, 0x18, 0x12, 0x56, 0xee, 0xf9, 0xac, 0xa2, 0x51, 0xa4, 0x16, 0x53, 0x6b, 0x9f, 0xcb, 0xa2, 0x3b, 0x46, 0x89, 0x3b, 0x18, 0xe5, 0xa7, 0xe1, 0x7a, 0xb2, 0xdf, 0x58, 0x71, 0x69, 0xdb, 0xb5, 0xa2, 0xfa, 0x54, 0x0f, 0x4e, 0xbd, 0x27, 0x62, 0x13, 0x95, 0x7d, 0x73, 0xec, 0x37, 0xb6, 0x47, 0xd7, 0xa0, 0xd4, 0x95, 0xf4, 0x51, 0xc5, 0x2b, 0xdd, 0xba, 0x19, 0xdd, 0x8f, 0xf8, 0x9b, 0xaf, 0x8c, 0xaf, 0x38, 0xba, 0x0f, 0xf1, 0xb7, 0xf5, 0xb2, 0xf0, 0x5b, 0xaf, 0x08, 0x3f, 0xff, 0x6f, 0xcf, 0x3f, 0x41, 0x1f, 0xae, 0x30, 0x9e, 0x76, 0x83, 0x06, 0xe6, 0x87, 0xf5, 0xec, 0x8c, 0x43, 0x93, 0x8d, 0xf3, 0x39, 0xb4, 0x3a, 0xf4, 0x40, 0x54, 0x45, 0x16, 0x31, 0x47, 0xf8, 0x99, 0xe5, 0xd1, 0x3a, 0xf2, 0xa8, 0x3d, 0x07, 0x72, 0xd8, 0xbc, 0xa1, 0x99, 0xb9, 0xb5, 0xea, 0xfb, 0xc9, 0x9b, 0xd3, 0x9d, 0xa3, 0xee, 0x51, 0x2f, 0xbf, 0xbc, 0x65, 0x74, 0xd2, 0x6f, 0xbd, 0x96, 0x59, 0xa3, 0xe4, 0xef, 0xbe, 0x2d, 0x20, 0xa6, 0x6e, 0x37, 0x63, 0x5d, 0xcc, 0xb6, 0x26, 0x70, 0x24, 0xee, 0xb5, 0xca, 0x4f, 0xd5, 0xf5, 0x96, 0x0e, 0xca, 0xbb, 0x25, 0x93, 0xe8, 0xb9, 0x96, 0x5b, 0xda, 0xe6, 0x76, 0xf7, 0x80, 0xd9, 0xc9, 0x5e, 0x02, 0x05, 0x49, 0xed, 0xd9, 0xf5, 0xc8, 0x23, 0xbc, 0xaf, 0xd8, 0xcc, 0x36, 0xd2, 0x5d, 0x65, 0x09, 0xe4, 0x8e, 0xe4, 0xdd, 0x10, 0x73, 0xf0, 0x19, 0x18, 0x88, 0xe8, 0xae, 0xed, 0x04, 0x0b, 0x95, 0x7c, 0x73, 0x13, 0xa0, 0xfc, 0x93, 0x8a, 0x9d, 0xba, 0x18, 0xf6, 0x50, 0x3d, 0x12, 0xdf, 0xba, 0xe9, 0xb8, 0x22, 0xed, 0x4a, 0xec, 0x9d, 0x93, 0x47, 0xd6, 0xb4, 0x9c, 0xa6, 0xc3, 0x7b, 0x74, 0xfa, 0x94, 0xe7, 0x99, 0x5a, 0x91, 0x1e, 0x8e, 0x79, 0xf8, 0x12, 0x6d, 0x61, 0x3e, 0xf0, 0x9a, 0x53, 0x36, 0x43, 0x47, 0x8e, 0x79, 0xcf, 0x20, 0x8f, 0x9e, 0xba, 0xfb, 0x62, 0x4c, 0xc6, 0x1c, 0xe0, 0x76, 0x37, 0x55, 0x33, 0xf0, 0xaf, 0x85, 0x74, 0xef, 0xf8, 0xdd, 0x74, 0x6e, 0x03, 0x3d, 0x09, 0xf5, 0x58, 0xea, 0x56, 0x92, 0xac, 0xc1, 0x51, 0x50, 0xec, 0x8d, 0x5b, 0xa7, 0x38, 0xef, 0x95, 0x60, 0x64, 0x7d, 0xe2, 0x96, 0x9d, 0x1d, 0xcb, 0x44, 0xae, 0xc3, 0x4a, 0x27, 0x32, 0xa4, 0xc1, 0x8d, 0x75, 0xb0, 0x23, 0xc5, 0x77, 0xc2, 0x21, 0x3a, 0xb3, 0xb0, 0xc5, 0x45, 0x27, 0x72, 0x24, 0x4e, 0x98, 0x63, 0x85, 0x35, 0x5d, 0x91, 0xc9, 0x16, 0xcf, 0x43, 0xfb, 0x69, 0x4d, 0x0c, 0x6b, 0x99, 0x1d, 0x4c, 0x5d, 0x54, 0xbe, 0x85, 0xce, 0xe1, 0x0c, 0xb7, 0x90, 0x9f, 0x0b, 0xed, 0x2d, 0x2d, 0x50, 0x00, 0x1a, 0xfc, 0xeb, 0x23, 0xbf, 0xea, 0x46, 0x27, 0x94, 0xb1, 0x9c, 0xca, 0x89, 0x47, 0x64, 0x5c, 0x8a, 0xb1, 0xba, 0x17, 0xe1, 0x0d, 0x3c, 0x0e, 0xdf, 0x8c, 0xf8, 0x2c, 0xc7, 0x27, 0xae, 0x93, 0x98, 0x83, 0x19, 0xbf, 0xde, 0xfb, 0x86, 0x07, 0x72, 0x22, 0x46, 0x9d, 0x93, 0x78, 0x5b, 0x3a, 0xf7, 0xc2, 0xef, 0x9b, 0x24, 0x8d, 0x6f, 0x06, 0xdc, 0xe4, 0x5b, 0x02, 0x93, 0x3b, 0xc4, 0x69, 0xd8, 0x63, 0x92, 0x95, 0x34, 0xf4, 0x54, 0xaa, 0x70, 0xb6, 0xd8, 0x02, 0x36, 0x0b, 0xd6, 0x78, 0x7e, 0x3c, 0xe5, 0x7b, 0x8d, 0x79, 0xdc, 0x33, 0x91, 0x25, 0x82, 0x05, 0x8a, 0x3e, 0xa7, 0xa8, 0xdc, 0x5e, 0x24, 0x8b, 0xf6, 0x64, 0xa3, 0xdc, 0xe0, 0x81, 0xac, 0x88, 0x83, 0xdd, 0xb0, 0xce, 0xc5, 0x71, 0xb0, 0xfb, 0x1e, 0x8a, 0x1a, 0x6f, 0xc6, 0x76, 0xdc, 0xca, 0xad, 0x88, 0x2f, 0x06, 0x3d, 0xdd, 0x71, 0xaf, 0xf5, 0x81, 0x81, 0xc6, 0x51, 0x0a, 0x4f, 0xed, 0xac, 0xaa, 0xa9, 0xfd, 0x0e, 0xbe, 0x2d, 0xc0, 0x94, 0x37, 0x25, 0xbc, 0x03, 0x59, 0x3c, 0xef, 0x0e, 0x58, 0x2b, 0xde, 0xa3, 0x53, 0x95, 0x6e, 0xc9, 0x9a, 0x0f, 0x5a, 0x1f, 0x36, 0xcd, 0x07, 0xea, 0x7a, 0x37, 0x8f, 0xd7, 0xc6, 0x65, 0xd9, 0x03, 0x69, 0x50, 0x83, 0x96, 0xd8, 0x66, 0x60, 0xfd, 0x96, 0xe9, 0xf2, 0x82, 0xd1, 0x15, 0xe0, 0x3a, 0xa1, 0x55, 0x07, 0x39, 0x76, 0x27, 0xf4, 0x42, 0x39, 0x5e, 0x5b, 0x09, 0xa7, 0x88, 0x2f, 0xb8, 0x35, 0xd2, 0x86, 0x4f, 0xec, 0x8d, 0x48, 0x98, 0x9f, 0xd1, 0xfc, 0x84, 0xfc, 0x6f, 0x90, 0xfd, 0xd7, 0x5d, 0x91, 0xda, 0xd0, 0x56, 0xd8, 0x93, 0x18, 0xf1, 0xe1, 0xad, 0xd8, 0x13, 0x03, 0x75, 0xbd, 0xac, 0x04, 0x7d, 0x72, 0xec, 0x2b, 0x71, 0x44, 0xf7, 0x49, 0x46, 0xcb, 0x12, 0xb0, 0xa7, 0x85, 0xd5, 0x04, 0x1f, 0x0e, 0x9f, 0xd5, 0x6d, 0xa5, 0x5c, 0x46, 0xcf, 0x80, 0xe1, 0x98, 0x82, 0x4f, 0x69, 0xde, 0x7a, 0xc9, 0x67, 0x87, 0x8b, 0xce, 0x03, 0x9e, 0xa8, 0xea, 0x43, 0xea, 0x39, 0xa5, 0x6e, 0x8c, 0xaf, 0x5e, 0xb9, 0x32, 0xa9, 0xbd, 0x69, 0x8e, 0xd2, 0x7d, 0x34, 0x51, 0x67, 0x67, 0x35, 0xcf, 0x44, 0x9a, 0x61, 0x67, 0x29, 0x91, 0x3b, 0x93, 0x26, 0xa1, 0xdc, 0xf2, 0x5e, 0x38, 0x87, 0x59, 0x36, 0xdd, 0x15, 0x36, 0xf1, 0x38, 0x6a, 0x51, 0x7f, 0x3e, 0xe5, 0x4a, 0xb6, 0x5c, 0xaf, 0xef, 0x94, 0x87, 0x60, 0x8a, 0xa2, 0xc9, 0x79, 0x3e, 0xb1, 0x57, 0x4d, 0xf3, 0xc2, 0x3a, 0x03, 0x76, 0xa9, 0xba, 0xc9, 0x18, 0xa1, 0xa1, 0xdb, 0x88, 0x7f, 0xc3, 0x39, 0xae, 0x19, 0x5c, 0xea, 0xf8, 0xde, 0x6d, 0x7c, 0x9d, 0xc6, 0x51, 0xbf, 0x89, 0xe5, 0x02, 0x42, 0x1c, 0x29, 0xb9, 0xe8, 0x5b, 0x7d, 0xdf, 0x56, 0x70, 0x3a, 0x9b, 0xc1, 0xca, 0xf5, 0x9e, 0xec, 0x1e, 0x37, 0xf2, 0x70, 0x16, 0xdd, 0x47, 0xcf, 0x88, 0xde, 0x9a, 0x1e, 0x0b, 0x62, 0xe8, 0x40, 0xf7, 0xde, 0xd5, 0x76, 0x9d, 0x23, 0x73, 0xff, 0xda, 0xee, 0x35, 0x7b, 0xb0, 0xd7, 0xee, 0xda, 0x37, 0x49, 0x13, 0x58, 0x1b, 0xf8, 0xa5, 0x3d, 0xe3, 0xbb, 0xfb, 0x44, 0xbf, 0xa5, 0xf4, 0xd5, 0xfb, 0xfd, 0xf1, 0x57, 0xef, 0x7f, 0xb5, 0xc7, 0x13, 0x7f, 0xb5, 0x07, 0xe1, 0xc6, 0xc7, 0xd7, 0xa0, 0x8c, 0x0a, 0xeb, 0xba, 0x98, 0x1f, 0x17, 0xb2, 0x8e, 0x0b, 0x42, 0x36, 0x72, 0x9f, 0x6a, 0x17, 0xf3, 0x95, 0xd1, 0xc0, 0x6e, 0x0e, 0x91, 0x85, 0x0d, 0x31, 0xd3, 0x62, 0x38, 0xb1, 0x45, 0xf4, 0xd0, 0x7e, 0x78, 0x2e, 0x74, 0xc2, 0x07, 0xab, 0x7f, 0xdb, 0x4d, 0xb7, 0xf7, 0x10, 0x2f, 0x50, 0xba, 0x24, 0x09, 0x61, 0xa2, 0x2c, 0x8f, 0x3c, 0xfa, 0xe3, 0xbf, 0xbf, 0xaf, 0xb1, 0x05, 0x69, 0x90, 0x0f, 0xe3, 0x0a, 0xd8, 0x39, 0x3e, 0xcc, 0xf0, 0xca, 0xe7, 0xed, 0x33, 0xe5, 0xf3, 0x8e, 0x99, 0xf2, 0x45, 0x8a, 0x6f, 0x40, 0x46, 0x8f, 0xce, 0x76, 0x5d, 0xaa, 0x64, 0x6b, 0xd7, 0x26, 0x5a, 0x4b, 0x3d, 0xc5, 0x6d, 0xac, 0x42, 0x1f, 0xae, 0x70, 0xc3, 0xbc, 0x3f, 0x1d, 0x6a, 0xd5, 0x5a, 0xcc, 0x5d, 0x46, 0xc9, 0x8c, 0xb8, 0xe2, 0x8d, 0x7c, 0xc4, 0x98, 0x1f, 0xd9, 0x7a, 0x2c, 0xcb, 0x83, 0x65, 0x15, 0x59, 0x66, 0xc0, 0x1c, 0xbb, 0xd6, 0x31, 0x8e, 0x64, 0x94, 0x45, 0xb9, 0x89, 0xbb, 0x49, 0x54, 0x0e, 0x59, 0xdd, 0x64, 0x7a, 0x68, 0xbc, 0xac, 0x83, 0x63, 0xca, 0x72, 0x4a, 0xd6, 0x54, 0x49, 0xac, 0x56, 0x54, 0xc6, 0x63, 0xc9, 0x32, 0xcc, 0xd3, 0x30, 0x16, 0x44, 0x26, 0x13, 0x24, 0xb4, 0x1d, 0xbe, 0xe6, 0x28, 0xde, 0x33, 0xfd, 0xff, 0x9f, 0x46, 0xf1, 0x9e, 0xe5, 0x7f, 0xd5, 0x28, 0xf6, 0xfd, 0x2d, 0xa3, 0x78, 0xcf, 0xab, 0x5f, 0x6b, 0x14, 0x37, 0x5f, 0x75, 0x14, 0x87, 0xd9, 0x5d, 0x11, 0x7e, 0x6e, 0x64, 0x16, 0xed, 0x74, 0xb6, 0xc4, 0x46, 0x31, 0xae, 0x8c, 0xa2, 0x72, 0x6f, 0xed, 0x5e, 0xf3, 0xd8, 0x51, 0x84, 0x6e, 0x5c, 0x5d, 0x9c, 0x28, 0xbb, 0x5a, 0x99, 0xaf, 0xf1, 0x43, 0x64, 0x85, 0xb8, 0x66, 0xb5, 0x5d, 0xe8, 0x89, 0xbf, 0xbe, 0x26, 0x92, 0xb0, 0x32, 0xbd, 0xe0, 0xe3, 0x2d, 0x1f, 0x3f, 0x43, 0xfd, 0xcc, 0xe9, 0x46, 0x98, 0x4e, 0x2a, 0x0b, 0xac, 0xc2, 0xe1, 0xf8, 0xcf, 0xf6, 0x36, 0x4c, 0x76, 0x8d, 0x67, 0x7b, 0x0c, 0x89, 0x12, 0xc2, 0xe9, 0xad, 0x91, 0x26, 0x27, 0x5b, 0x42, 0x30, 0x44, 0x69, 0x14, 0x8c, 0xe7, 0x6d, 0x60, 0x77, 0x11, 0x3f, 0xd5, 0xe4, 0xf0, 0x3b, 0xcd, 0x7f, 0x45, 0x3b, 0xb6, 0xff, 0xb7, 0xb7, 0x43, 0xfe, 0x0b, 0xed, 0xe8, 0xbb, 0x72, 0x3b, 0x70, 0x2d, 0xd3, 0x44, 0xa7, 0xf4, 0x77, 0x35, 0x9a, 0xf8, 0xed, 0x68, 0x55, 0x3c, 0x7e, 0xfb, 0x7f, 0xfc, 0x8e, 0xeb, 0xfd, 0x57, 0x2d, 0x23, 0x69, 0x6c, 0x40, 0x75, 0xa7, 0xf2, 0xc5, 0xfc, 0xdb, 0x55, 0x58, 0x33, 0x6d, 0x8b, 0xc1, 0xcc, 0xbd, 0x64, 0xa4, 0xee, 0xd8, 0x31, 0x79, 0x33, 0x07, 0xd7, 0xe6, 0xdd, 0xf2, 0xf3, 0x4c, 0xf7, 0xc4, 0x09, 0x24, 0xf7, 0x5a, 0x38, 0x7f, 0x91, 0xba, 0x6d, 0x47, 0x37, 0x0e, 0xb0, 0x46, 0x69, 0x5e, 0x9e, 0x46, 0x36, 0x48, 0x73, 0x80, 0xfc, 0x06, 0xa7, 0xac, 0x14, 0x77, 0xf3, 0x5b, 0x41, 0x17, 0xfb, 0x12, 0x7c, 0x49, 0xc2, 0x6a, 0xb8, 0xa1, 0x19, 0x57, 0xe3, 0x9c, 0x48, 0x9a, 0x8f, 0xa9, 0x0b, 0x39, 0x8c, 0x6b, 0xd1, 0x70, 0xcb, 0x0d, 0xf4, 0x63, 0x56, 0x00, 0x68, 0xaf, 0xe1, 0x10, 0xdb, 0x47, 0x00, 0x6e, 0x45, 0x58, 0x70, 0x27, 0x57, 0xf5, 0xb0, 0x03, 0xf8, 0xea, 0xf7, 0x5c, 0x56, 0x2e, 0xd9, 0x6b, 0xb6, 0xd1, 0x4d, 0xe3, 0xb9, 0xa7, 0xe5, 0x41, 0xa9, 0x7e, 0x05, 0x98, 0x67, 0xc0, 0x0d, 0x47, 0xd7, 0x54, 0x9c, 0x81, 0xeb, 0x97, 0x43, 0x30, 0xa7, 0x65, 0x8e, 0x58, 0x1a, 0x4d, 0xa5, 0x8c, 0x59, 0x3c, 0x74, 0x52, 0x4f, 0x3a, 0x10, 0x74, 0x92, 0x2d, 0x38, 0x0f, 0xf4, 0x1e, 0x1c, 0x98, 0x5a, 0x21, 0xc3, 0xad, 0x34, 0xb6, 0x39, 0xa2, 0x3a, 0xbe, 0x26, 0x06, 0xce, 0x20, 0xf3, 0x96, 0x77, 0x4d, 0xd5, 0xb2, 0x50, 0x77, 0xd4, 0xd3, 0xdf, 0x1d, 0xd1, 0x87, 0x56, 0x63, 0xdf, 0x12, 0x27, 0xfb, 0x3c, 0x5b, 0x2b, 0x1f, 0x5d, 0x0e, 0x73, 0x71, 0xe6, 0xd0, 0xdd, 0xe6, 0x27, 0x6a, 0x69, 0x87, 0xe7, 0x89, 0x7a, 0xb2, 0x15, 0xfd, 0x42, 0x88, 0x6e, 0xfb, 0x84, 0xcd, 0xf6, 0x79, 0x64, 0x33, 0xc7, 0xb2, 0x20, 0xd9, 0x3f, 0x85, 0xa1, 0x07, 0x76, 0x3c, 0xd0, 0xf6, 0x99, 0x62, 0xa7, 0xc4, 0x5f, 0xd5, 0xc7, 0xeb, 0x2c, 0x39, 0x71, 0xe6, 0x4e, 0x6a, 0xb5, 0xd2, 0xdf, 0x1a, 0xba, 0xc7, 0x4d, 0xf7, 0x0d, 0x26, 0xb5, 0x98, 0x70, 0x75, 0xce, 0x1b, 0x63, 0xff, 0x61, 0x0f, 0x2b, 0xf7, 0x80, 0x92, 0x43, 0x29, 0xc9, 0x14, 0xca, 0xc9, 0xff, 0x38, 0xb2, 0x20, 0x1d, 0x62, 0xf6, 0x52, 0xa4, 0x78, 0xc2, 0x97, 0x9f, 0x83, 0x6e, 0xf2, 0x96, 0xa6, 0xbc, 0x9c, 0x21, 0x17, 0xed, 0x1c, 0x9b, 0xe3, 0x68, 0xd9, 0x26, 0xdd, 0x2a, 0x06, 0xdd, 0x3a, 0x8b, 0xca, 0xc9, 0xef, 0x9d, 0x88, 0x79, 0xc8, 0x65, 0xb4, 0x10, 0x27, 0x95, 0xc9, 0x74, 0xe5, 0x16, 0xb8, 0xf4, 0x88, 0x01, 0x39, 0x55, 0x7d, 0x08, 0xe9, 0xc0, 0xef, 0x02, 0x36, 0x5a, 0x13, 0xe9, 0x66, 0x28, 0xdd, 0xfb, 0xe6, 0xf2, 0x11, 0xbf, 0xfb, 0xfd, 0x00, 0x9d, 0x7d, 0x0f, 0x2d, 0xb9, 0xe8, 0x5c, 0x90, 0xba, 0xd1, 0x8d, 0xb8, 0x65, 0xd1, 0xe5, 0x32, 0x9e, 0x40, 0x4b, 0x76, 0xaa, 0x24, 0xbd, 0x2b, 0x53, 0xcc, 0x05, 0x5f, 0x4d, 0x9c, 0x68, 0x16, 0xb3, 0x4a, 0x62, 0x90, 0x26, 0x61, 0xbe, 0xe4, 0xf3, 0x65, 0x8e, 0x25, 0x33, 0x79, 0x5f, 0x5c, 0xe3, 0xdb, 0x26, 0x0f, 0xfb, 0xae, 0x23, 0x1f, 0x41, 0xec, 0x46, 0xf8, 0xd6, 0xb4, 0x36, 0xbe, 0x5e, 0x31, 0x78, 0xc1, 0x52, 0x3e, 0xf8, 0xc7, 0x77, 0xd2, 0xef, 0x96, 0x1a, 0x1d, 0xf0, 0x0d, 0xd2, 0x8b, 0x09, 0x9f, 0x26, 0xcb, 0x5a, 0xd8, 0x8e, 0x6f, 0x48, 0x93, 0xa9, 0xdd, 0x64, 0x1d, 0xbf, 0xba, 0xd7, 0xd0, 0xca, 0x70, 0x51, 0xe1, 0x92, 0x31, 0xec, 0x61, 0x76, 0x13, 0x34, 0x4d, 0x26, 0x70, 0x78, 0x90, 0xbe, 0xbe, 0x83, 0x33, 0x60, 0x18, 0x53, 0x3e, 0x4d, 0xb2, 0x8a, 0x98, 0x94, 0x47, 0xe4, 0x57, 0x14, 0x3f, 0x9d, 0x67, 0x09, 0x3f, 0x1d, 0xed, 0xe0, 0x4f, 0xe1, 0x27, 0xb3, 0x84, 0x50, 0x2f, 0x7a, 0xd2, 0xac, 0x23, 0xc4, 0x94, 0xfb, 0xfd, 0x6e, 0xf2, 0xa2, 0x29, 0x05, 0xa3, 0x60, 0x09, 0xa6, 0x3c, 0x75, 0x8e, 0xf8, 0x83, 0xc4, 0x6f, 0x0f, 0x06, 0x9f, 0x03, 0x5f, 0x18, 0x84, 0x42, 0x9b, 0x03, 0x4c, 0x33, 0x4a, 0xc0, 0x47, 0x33, 0x9a, 0xac, 0x19, 0x90, 0x1c, 0x1c, 0x87, 0x15, 0xf9, 0x47, 0x7b, 0x2b, 0x06, 0x51, 0x4e, 0x22, 0xcf, 0xe0, 0x46, 0xee, 0x1f, 0x7c, 0xa5, 0xf3, 0xfd, 0xb4, 0x3b, 0xbc, 0x2e, 0xda, 0xcb, 0xc3, 0x96, 0x15, 0xe0, 0xaa, 0x28, 0xd9, 0xb0, 0xae, 0xc5, 0x74, 0x0f, 0xdc, 0x05, 0x81, 0xa5, 0x3d, 0x40, 0x78, 0x52, 0xd7, 0x9b, 0xfb, 0x40, 0xdf, 0x03, 0x2e, 0xe0, 0xbe, 0xc4, 0x29, 0x67, 0xc2, 0xcc, 0xfa, 0x23, 0x98, 0x2e, 0xa3, 0x6a, 0x63, 0xda, 0x6d, 0xd6, 0x52, 0x8b, 0xdf, 0x59, 0x82, 0x6f, 0x07, 0x70, 0xb4, 0x5e, 0x00, 0x27, 0xb7, 0xbe, 0x23, 0xdd, 0x95, 0x66, 0x7d, 0x67, 0x23, 0xe6, 0xee, 0xee, 0x1f, 0xbe, 0x65, 0x62, 0xbd, 0xe1, 0x70, 0xb7, 0xa1, 0x9b, 0x94, 0x0b, 0x16, 0x81, 0xbc, 0xbc, 0x82, 0xed, 0x2a, 0xba, 0x74, 0x58, 0xa2, 0x4c, 0x35, 0xa1, 0x3d, 0x8c, 0xd8, 0xf8, 0x43, 0x28, 0x09, 0xd3, 0x97, 0x15, 0xb8, 0xc5, 0x1f, 0xa9, 0x83, 0xe7, 0x34, 0xc3, 0x07, 0x65, 0x48, 0x4f, 0xcb, 0x58, 0xd8, 0xcf, 0x95, 0x7b, 0x6b, 0x29, 0x0b, 0x34, 0x2d, 0x92, 0x81, 0xc5, 0x9c, 0x4e, 0x94, 0x2b, 0x26, 0xa5, 0x98, 0xaf, 0x24, 0x29, 0x93, 0xd9, 0x00, 0x33, 0x26, 0xe2, 0xb8, 0x65, 0x2e, 0xe6, 0x7d, 0xc0, 0xc4, 0x28, 0x1d, 0x59, 0xab, 0x30, 0xb2, 0x9d, 0x43, 0x3b, 0xf2, 0x0e, 0x99, 0x69, 0xf4, 0x6a, 0x4e, 0x7a, 0x19, 0xe9, 0x79, 0x56, 0x7e, 0xe8, 0xd7, 0xf0, 0xbb, 0x7f, 0x50, 0xc8, 0xec, 0x4a, 0x18, 0x92, 0xbb, 0xa4, 0x0d, 0x38, 0x16, 0x8b, 0x0e, 0xbc, 0x80, 0xbc, 0x2f, 0x10, 0x9e, 0xb0, 0x76, 0x1a, 0x95, 0x1b, 0xdc, 0x65, 0x74, 0x27, 0x0a, 0x5b, 0xe7, 0x91, 0x2c, 0x24, 0x5d, 0x90, 0x65, 0x2e, 0x6c, 0x67, 0xac, 0x07, 0x68, 0xb7, 0x22, 0x77, 0x5d, 0xdf, 0x3a, 0x9e, 0x86, 0xf2, 0xab, 0x59, 0x47, 0x35, 0x0a, 0x1f, 0x45, 0x09, 0x18, 0xf8, 0xbd, 0x38, 0x37, 0xd5, 0x93, 0x6e, 0xc2, 0x64, 0xf2, 0x59, 0xd4, 0x21, 0x7c, 0xb4, 0x75, 0x36, 0xed, 0x78, 0xe7, 0x4c, 0xc3, 0xdc, 0x41, 0xc4, 0xbf, 0x39, 0x60, 0x4d, 0xab, 0x7d, 0x1e, 0xe6, 0x2f, 0xc6, 0xbb, 0x53, 0x58, 0x6e, 0x03, 0x51, 0x35, 0xb0, 0x3a, 0x9c, 0x93, 0x06, 0xe3, 0x44, 0x7c, 0x32, 0xa4, 0x7d, 0x8b, 0x69, 0xef, 0x36, 0xc4, 0x3d, 0x55, 0xea, 0x3e, 0xb2, 0xa8, 0x2a, 0x8b, 0x0f, 0xac, 0xe6, 0x96, 0xda, 0x48, 0x16, 0x65, 0x37, 0xd5, 0x95, 0x93, 0x21, 0x63, 0x57, 0xf2, 0x5c, 0x48, 0x50, 0xce, 0x85, 0x54, 0xd7, 0x7a, 0x40, 0xcd, 0x21, 0x99, 0xd6, 0x04, 0xdb, 0xcd, 0x26, 0xbd, 0x08, 0xb6, 0xa3, 0x2d, 0xf0, 0xfd, 0x55, 0xf6, 0xae, 0xfa, 0xe8, 0xfe, 0x78, 0x17, 0x5b, 0x67, 0x8f, 0x26, 0x74, 0x32, 0xe9, 0x16, 0x16, 0xe3, 0xdc, 0x4c, 0xfe, 0x81, 0x88, 0x81, 0xdd, 0xf0, 0xd3, 0xe7, 0x23, 0xcd, 0x93, 0xb4, 0x1d, 0x1a, 0x49, 0xd5, 0x21, 0xe2, 0xda, 0x62, 0xa0, 0x15, 0xd3, 0x68, 0x34, 0x00, 0x4c, 0x8b, 0x80, 0x7a, 0x53, 0x7d, 0x01, 0xbe, 0xe9, 0x23, 0x00, 0x17, 0xeb, 0x8d, 0x41, 0x9c, 0x55, 0x9a, 0x3e, 0xfc, 0xd6, 0x85, 0x41, 0x63, 0x92, 0x42, 0xf8, 0x36, 0x29, 0x02, 0xaa, 0x2a, 0x7c, 0xde, 0x84, 0x31, 0xcb, 0xf1, 0x99, 0x15, 0x06, 0xf5, 0x20, 0xf2, 0x70, 0xeb, 0xf0, 0x7d, 0x36, 0x86, 0xd5, 0xd7, 0x67, 0x91, 0x56, 0x66, 0x64, 0x01, 0xe9, 0x68, 0x62, 0xdc, 0x07, 0x88, 0xb9, 0x1f, 0x33, 0x5d, 0xcc, 0x0e, 0xda, 0xa7, 0x88, 0x90, 0xb1, 0x24, 0xa0, 0xdb, 0xca, 0xea, 0x7d, 0x98, 0x2a, 0x3f, 0x5d, 0xcf, 0x83, 0xb7, 0x67, 0xf9, 0x94, 0xbd, 0xab, 0xd3, 0xda, 0xa4, 0x09, 0x76, 0x85, 0x35, 0x79, 0xc5, 0x02, 0xb0, 0x15, 0xfa, 0x3a, 0x5a, 0x9f, 0xa5, 0x50, 0xa0, 0x09, 0x54, 0x15, 0x83, 0x23, 0x9f, 0xcd, 0x08, 0xc8, 0x47, 0x69, 0xc4, 0x9d, 0x1e, 0xb1, 0x15, 0xdb, 0xdc, 0x04, 0x19, 0xf4, 0xc5, 0x21, 0xc9, 0x93, 0x96, 0x64, 0x53, 0x20, 0xf7, 0x5d, 0x02, 0xa9, 0x4d, 0x41, 0x92, 0x57, 0x15, 0xa6, 0xf7, 0xd3, 0x47, 0x5c, 0xe0, 0xdf, 0x54, 0xa3, 0x05, 0x5f, 0xbb, 0x46, 0x79, 0x5f, 0xab, 0x46, 0x1b, 0xb9, 0x5e, 0x18, 0xf6, 0x9c, 0x1c, 0x06, 0xd5, 0x09, 0x09, 0x54, 0x0f, 0xe2, 0xcc, 0x10, 0x99, 0xee, 0xec, 0x31, 0xbe, 0x63, 0x7f, 0x63, 0x27, 0x44, 0xe5, 0x63, 0xf8, 0x37, 0x47, 0x3e, 0x49, 0x3e, 0x6a, 0xec, 0x35, 0x54, 0x67, 0x9d, 0x80, 0x38, 0x0f, 0x2a, 0x09, 0x65, 0x3e, 0x15, 0x3e, 0xeb, 0x48, 0x53, 0xe6, 0xf4, 0x78, 0x7c, 0xab, 0xba, 0x81, 0x4e, 0x6f, 0x54, 0xec, 0xaf, 0xfa, 0x06, 0xb2, 0xcb, 0xa2, 0x61, 0x7f, 0xc7, 0xe1, 0xa8, 0xdc, 0x5c, 0xaf, 0x68, 0x2c, 0x4a, 0xaa, 0xa8, 0x95, 0xb4, 0x8a, 0xad, 0x86, 0xea, 0x6e, 0x2c, 0x2f, 0x87, 0xca, 0xe4, 0xfc, 0xf9, 0xf7, 0x36, 0xcf, 0x3b, 0x0d, 0x01, 0xe6, 0x33, 0x48, 0xbe, 0x97, 0xdd, 0xbd, 0x89, 0x99, 0xe9, 0x86, 0x52, 0xd4, 0x2c, 0x56, 0xa5, 0x76, 0x3c, 0xbe, 0xea, 0x2b, 0x3d, 0x0d, 0xdf, 0xe7, 0xda, 0xc5, 0xf7, 0x36, 0xd4, 0xf5, 0x92, 0xef, 0x19, 0x84, 0xd1, 0x88, 0xc1, 0x92, 0xb3, 0x60, 0x4e, 0x41, 0x91, 0x9f, 0x50, 0x67, 0x4d, 0x36, 0xd6, 0x51, 0xa5, 0x86, 0xdb, 0x49, 0x3b, 0x15, 0x59, 0x7b, 0x1d, 0xd7, 0x5c, 0x5e, 0x21, 0xfc, 0x6e, 0x5b, 0xce, 0x1e, 0x50, 0xfb, 0x70, 0xdd, 0xc2, 0x9f, 0xca, 0x91, 0x79, 0xe7, 0x5a, 0xb1, 0xd4, 0x67, 0xac, 0xf8, 0x0c, 0x47, 0x00, 0xc2, 0x76, 0xac, 0xb5, 0x0e, 0x39, 0x74, 0x07, 0x14, 0xb8, 0x32, 0x19, 0x2f, 0x70, 0x9c, 0xe8, 0xed, 0xed, 0x1a, 0xf2, 0x9f, 0x46, 0x6f, 0x08, 0xc7, 0x6e, 0xd7, 0x07, 0xd5, 0xe1, 0x6c, 0x9f, 0xc9, 0xe7, 0x04, 0x81, 0xb5, 0x53, 0x85, 0x6f, 0xea, 0xba, 0x6c, 0xba, 0x6b, 0x64, 0x50, 0x83, 0x3a, 0x5c, 0x28, 0x56, 0x1a, 0x87, 0x41, 0x6d, 0xdc, 0x03, 0x66, 0x66, 0x1b, 0x4c, 0x8d, 0xf1, 0xfa, 0x1b, 0x9a, 0xa1, 0x1c, 0x26, 0xb8, 0x35, 0xc7, 0x03, 0x37, 0x20, 0x05, 0xb9, 0xc1, 0x0f, 0xd7, 0xb0, 0xb8, 0x89, 0x37, 0x74, 0xca, 0x71, 0x30, 0x19, 0x8d, 0x07, 0xb3, 0x71, 0x2e, 0x90, 0xf5, 0x32, 0x80, 0x11, 0x9b, 0x41, 0xac, 0x44, 0x6e, 0x65, 0x18, 0xd7, 0x33, 0x07, 0xf8, 0x5c, 0x6a, 0x2b, 0xaf, 0x8b, 0xaf, 0xaa, 0x4f, 0x2c, 0x61, 0xb9, 0x36, 0x43, 0x19, 0x64, 0x50, 0x5c, 0xa0, 0x05, 0xae, 0xa1, 0xf0, 0x8a, 0xb3, 0x60, 0x32, 0xef, 0x81, 0xeb, 0x31, 0x4f, 0x33, 0x76, 0x40, 0x49, 0xb6, 0xf1, 0x37, 0xd9, 0xec, 0x4e, 0x61, 0xa9, 0xd1, 0x78, 0x20, 0x3b, 0x27, 0xce, 0xc7, 0x20, 0x14, 0x67, 0x7a, 0xdd, 0x80, 0x35, 0x3d, 0xed, 0xac, 0xb1, 0x27, 0xd6, 0x7c, 0x55, 0xda, 0x69, 0x96, 0x9a, 0x63, 0x25, 0xe9, 0x3f, 0x71, 0xcc, 0xa4, 0xf9, 0xcf, 0x7c, 0x83, 0xea, 0xc2, 0x5a, 0xa4, 0x47, 0x92, 0x54, 0xe0, 0xf3, 0x99, 0x1c, 0x50, 0xee, 0xf3, 0x62, 0x8f, 0x96, 0xfd, 0xf2, 0x55, 0x7e, 0x17, 0xd9, 0xa5, 0x12, 0x3d, 0x81, 0xa8, 0x5d, 0x39, 0xb9, 0x42, 0x7a, 0xd9, 0x9d, 0xda, 0x1f, 0xea, 0x5f, 0xdf, 0xa0, 0xb2, 0x7b, 0x50, 0x1e, 0xcb, 0xac, 0x18, 0x1c, 0x6a, 0xa8, 0xda, 0xc8, 0xc7, 0x82, 0xeb, 0xcf, 0x06, 0xda, 0x70, 0xd4, 0x36, 0x46, 0x75, 0x54, 0x2f, 0x76, 0x3b, 0xaa, 0xe3, 0x8a, 0xb8, 0x98, 0x21, 0x7f, 0xc0, 0x6e, 0x81, 0x90, 0x86, 0xa4, 0x81, 0x97, 0x1a, 0x13, 0xb7, 0x77, 0x37, 0x20, 0xc5, 0xf1, 0x7e, 0x2a, 0x1f, 0x43, 0x7e, 0x2b, 0x5b, 0x54, 0xa5, 0xf0, 0xe0, 0x36, 0x1f, 0xe4, 0xc4, 0x54, 0x92, 0xcd, 0x27, 0x7c, 0xc3, 0x0b, 0xd7, 0x87, 0xb5, 0x79, 0x33, 0x30, 0x77, 0x95, 0xcf, 0x7b, 0x9b, 0x17, 0xb2, 0x6e, 0x21, 0x0e, 0x5c, 0xc7, 0x74, 0x5e, 0xd9, 0x39, 0x97, 0x4f, 0xc0, 0x3e, 0x39, 0x9a, 0xf0, 0x1d, 0xf1, 0x52, 0x0e, 0x0c, 0xfd, 0xfe, 0xac, 0x66, 0xfa, 0x35, 0x6b, 0x60, 0x68, 0xd7, 0x59, 0xfc, 0xf6, 0xc3, 0xd0, 0xee, 0x95, 0xdc, 0x90, 0x67, 0xc9, 0x1d, 0x55, 0x10, 0xf2, 0xde, 0x05, 0x8b, 0xda, 0xdb, 0x66, 0x36, 0x2d, 0x6c, 0x6b, 0x20, 0x1b, 0xca, 0xf9, 0xb3, 0x72, 0x67, 0x8b, 0xf6, 0xbc, 0x59, 0x49, 0x3f, 0x11, 0x8a, 0xb5, 0x50, 0xf2, 0xdc, 0x20, 0x28, 0x06, 0x40, 0x8d, 0xdf, 0x48, 0xf9, 0x7b, 0x78, 0xb9, 0x29, 0xf9, 0xde, 0x00, 0x0d, 0x3f, 0x92, 0x7f, 0x24, 0x83, 0xf0, 0x0f, 0x79, 0xee, 0x26, 0xfa, 0xc1, 0xd0, 0xcf, 0x73, 0x98, 0x33, 0xd1, 0xa1, 0x9f, 0xdf, 0x84, 0x4f, 0x0d, 0x3e, 0x27, 0x33, 0x6f, 0x0b, 0x43, 0x3f, 0x9f, 0x82, 0x4f, 0x01, 0x9f, 0x22, 0xfe, 0x1d, 0x87, 0xcf, 0xa9, 0xe4, 0x31, 0x17, 0x9f, 0x16, 0x8c, 0xd5, 0xe2, 0xd3, 0x8a, 0xcf, 0x0c, 0x7c, 0xda, 0xc8, 0xd3, 0x11, 0x3e, 0x6f, 0xc1, 0xef, 0xe9, 0xf8, 0x24, 0x5d, 0xcd, 0x6b, 0xf1, 0x39, 0x03, 0x9f, 0x59, 0xf8, 0x24, 0x6b, 0x82, 0xd7, 0xe1, 0xd3, 0x85, 0x4f, 0x13, 0x3e, 0x67, 0xe1, 0xf3, 0x7a, 0x7c, 0xde, 0x4a, 0x1e, 0x3c, 0xf1, 0x39, 0x1b, 0x9f, 0xdf, 0xc0, 0xe7, 0x6d, 0xf8, 0x34, 0xe3, 0xf3, 0x9b, 0xf8, 0xbc, 0x01, 0x9f, 0xdf, 0x22, 0xcb, 0x64, 0xf8, 0xfc, 0x3b, 0xac, 0xdd, 0x8d, 0xf8, 0xc4, 0x15, 0x04, 0xd7, 0xb4, 0xa1, 0x9f, 0x97, 0xe0, 0xf3, 0x26, 0x7c, 0x96, 0xe1, 0x73, 0x32, 0x3e, 0x2b, 0xf0, 0x39, 0x05, 0x9f, 0x95, 0xf8, 0x14, 0xf1, 0x79, 0x07, 0x3e, 0xa7, 0xe2, 0x33, 0x44, 0x72, 0x08, 0x3e, 0xe7, 0xe3, 0xf3, 0x66, 0x7c, 0xd6, 0xe1, 0xd3, 0x8a, 0xcf, 0xef, 0xe2, 0x73, 0x1a, 0x3e, 0xef, 0xc1, 0xa7, 0x0d, 0x9f, 0x0b, 0xf1, 0x79, 0x0b, 0x3e, 0x1b, 0xf0, 0x69, 0xc7, 0x27, 0x2e, 0x20, 0x28, 0x97, 0x0c, 0xfd, 0xbc, 0x19, 0x9f, 0x4e, 0x7c, 0xb6, 0xe2, 0x73, 0x26, 0x3e, 0xa3, 0x74, 0x0e, 0x89, 0xcf, 0xa5, 0xf8, 0x74, 0xe1, 0x73, 0x39, 0x3e, 0xdd, 0xf8, 0xfc, 0x21, 0x3e, 0x67, 0xe1, 0x93, 0xce, 0x29, 0xf3, 0xf0, 0xf9, 0x23, 0x3a, 0xf7, 0xc3, 0x67, 0x37, 0x3e, 0xf3, 0xf1, 0xb9, 0x16, 0x9f, 0xb3, 0xf1, 0xd9, 0x83, 0xcf, 0x02, 0x7c, 0x3e, 0x80, 0xcf, 0xe2, 0xc4, 0x80, 0x78, 0x7d, 0x25, 0xfe, 0xda, 0x1a, 0xd1, 0x23, 0x7a, 0xef, 0xbe, 0x7d, 0x95, 0x7b, 0xd5, 0xac, 0x55, 0x79, 0xab, 0x6e, 0x5d, 0x95, 0xbf, 0x6a, 0xf6, 0xaa, 0x82, 0x55, 0xb7, 0xad, 0x2a, 0x5c, 0xf5, 0xcd, 0x55, 0x79, 0xee, 0x55, 0x79, 0xb3, 0x56, 0xcd, 0xc2, 0x28, 0xfc, 0x9b, 0xb7, 0x6a, 0xd6, 0xad, 0xab, 0x66, 0xe5, 0xaf, 0x9a, 0x35, 0x7b, 0xd5, 0xac, 0x82, 0x55, 0xb3, 0x6e, 0x5b, 0x35, 0xab, 0x70, 0xd5, 0xac, 0x6f, 0xae, 0xba, 0xd5, 0xbd, 0xea, 0xd6, 0x59, 0xab, 0xf2, 0xdd, 0xab, 0xf2, 0xf1, 0x6f, 0xde, 0xaa, 0xfc, 0x5b, 0x57, 0xcd, 0xc6, 0x4c, 0xf2, 0x57, 0xe5, 0xcf, 0x5e, 0x35, 0xdb, 0xbd, 0x6a, 0xf6, 0xac, 0x55, 0xb3, 0xf3, 0x56, 0xcd, 0xc6, 0x4c, 0x67, 0xaf, 0x72, 0x8b, 0xcb, 0x6b, 0x1a, 0x5b, 0x1a, 0x17, 0x75, 0x88, 0xe1, 0xc5, 0x2d, 0x8d, 0x6d, 0x0b, 0x5b, 0x1b, 0xa1, 0x64, 0x61, 0xdb, 0xa2, 0xc6, 0x16, 0xb8, 0x63, 0x09, 0xe2, 0x0f, 0x08, 0x1c, 0x8f, 0x40, 0xf8, 0xaf, 0x70, 0x34, 0x72, 0xb9, 0x7c, 0x58, 0x98, 0xf0, 0x5f, 0x93, 0xff, 0xff, 0xf8, 0x7f, 0x57, 0xa8, 0x77, 0x43, 0xfb, 0xd2, 0xa4, 0x6f, 0x8b, 0xb4, 0x79, 0x4a, 0xef, 0x4b, 0xdb, 0x5b, 0x1a, 0x13, 0xf6, 0x8a, 0x47, 0x19, 0x2f, 0x5e, 0xdc, 0xd6, 0xb1, 0x6c, 0x71, 0x47, 0xba, 0x57, 0x8c, 0xf4, 0x5c, 0x96, 0x75, 0x2c, 0x6e, 0x59, 0xdc, 0xf1, 0xc3, 0xe4, 0xf7, 0xe2, 0xb6, 0xe8, 0xb2, 0x8e, 0xa4, 0xdd, 0x63, 0xa4, 0x09, 0xdf, 0x13, 0x97, 0xb5, 0x2d, 0x69, 0x6b, 0xff, 0x41, 0x9b, 0xb8, 0x70, 0x11, 0x33, 0x1a, 0x3e, 0xad, 0x41, 0x4f, 0xb4, 0xa2, 0x08, 0xee, 0xf2, 0x56, 0xd4, 0x42, 0x49, 0xe5, 0x1d, 0x35, 0xa5, 0x50, 0x75, 0x07, 0x7f, 0x7a, 0xe7, 0xd7, 0xde, 0x01, 0x15, 0x55, 0xde, 0x92, 0xda, 0x8a, 0x3b, 0x29, 0xd4, 0x5f, 0x5a, 0x5d, 0x1b, 0xc0, 0x67, 0x4d, 0xc5, 0xdd, 0xec, 0x33, 0xe4, 0x2d, 0xc7, 0x87, 0xef, 0x8e, 0x90, 0xbf, 0x34, 0x84, 0x8c, 0x5b, 0xc9, 0x5c, 0x7f, 0xe8, 0x8e, 0x6a, 0xa8, 0xa9, 0x98, 0x57, 0x5d, 0x59, 0x0a, 0x35, 0xf3, 0xbc, 0xa1, 0x5a, 0xf0, 0x56, 0xd6, 0x42, 0x4d, 0x49, 0xa8, 0xb4, 0xb4, 0x0a, 0xa6, 0x35, 0x4c, 0x5b, 0x34, 0xb6, 0x69, 0x25, 0xed, 0x6d, 0x25, 0x2d, 0x8b, 0xa3, 0xb9, 0xb1, 0xc6, 0xb6, 0x86, 0xc6, 0x95, 0xcb, 0xdb, 0x97, 0x2d, 0xc5, 0x19, 0x52, 0x04, 0x91, 0x85, 0x0d, 0x1d, 0xed, 0xed, 0x2d, 0xa9, 0x76, 0x45, 0x62, 0x0b, 0xa3, 0x4d, 0x8b, 0x17, 0xa5, 0x02, 0x16, 0x2e, 0x6d, 0x49, 0xbe, 0xaf, 0xb2, 0xdf, 0x7c, 0x7b, 0x2e, 0x19, 0x66, 0x9f, 0xce, 0x0c, 0xad, 0x25, 0xff, 0x9b, 0xa6, 0xd8, 0x33, 0x4e, 0xfc, 0x77, 0x8b, 0xf2, 0x9d, 0x1e, 0x6e, 0x45, 0x5e, 0x63, 0x5c, 0xae, 0x2b, 0xe9, 0x21, 0x77, 0x63, 0xee, 0x14, 0x6e, 0xb1, 0xb8, 0xd8, 0x62, 0xcb, 0xa4, 0x13, 0xf7, 0x5d, 0xc7, 0x91, 0xda, 0x3e, 0xff, 0xd5, 0x51, 0x3b, 0x84, 0x33, 0x11, 0xb6, 0x18, 0xd4, 0xf1, 0x71, 0x55, 0xbb, 0xe5, 0x37, 0x51, 0xd6, 0x40, 0x79, 0xe0, 0x17, 0xdb, 0x88, 0xf6, 0x3b, 0xec, 0x0e, 0xe4, 0xae, 0xc3, 0x64, 0x77, 0xa3, 0x38, 0x8e, 0x23, 0x8d, 0xf1, 0x5b, 0xab, 0x7b, 0x2d, 0xb8, 0x16, 0xbe, 0x54, 0xdc, 0x01, 0x4e, 0x3f, 0x59, 0x0d, 0x24, 0x79, 0x6c, 0x14, 0x44, 0x4f, 0x75, 0xef, 0x34, 0x6e, 0x1d, 0xd1, 0x34, 0xad, 0x14, 0x57, 0x92, 0xad, 0x90, 0x13, 0xcd, 0x40, 0x09, 0x97, 0x7b, 0x3b, 0xb5, 0x5a, 0xf4, 0x2c, 0xdd, 0xdd, 0xc9, 0x54, 0xc0, 0x52, 0x85, 0x94, 0x7c, 0x3d, 0x57, 0xcc, 0xd7, 0x3d, 0x3a, 0xdf, 0x28, 0xdd, 0x9e, 0xce, 0x41, 0x69, 0xe2, 0x2f, 0xe6, 0x3d, 0x72, 0x01, 0xf3, 0x66, 0x72, 0xd8, 0x48, 0x3d, 0x69, 0x2b, 0xf8, 0xc9, 0x0e, 0xe7, 0xf7, 0x47, 0x9d, 0x89, 0xd5, 0x8f, 0x3d, 0x25, 0xfb, 0xaa, 0x2a, 0xe5, 0x67, 0x58, 0x91, 0x53, 0x77, 0x29, 0x72, 0xea, 0x61, 0xe5, 0x94, 0xc7, 0x5f, 0x8e, 0x3c, 0x1c, 0xe9, 0x27, 0xa5, 0x6c, 0x7a, 0xb9, 0x3a, 0xb1, 0xc4, 0x1f, 0x22, 0x57, 0x45, 0xcf, 0x3e, 0xb0, 0x33, 0xd9, 0xc7, 0xc9, 0xbe, 0x56, 0x80, 0x9b, 0x3d, 0x57, 0x42, 0x21, 0xb3, 0xab, 0x87, 0x5c, 0x20, 0xe4, 0x7b, 0x4f, 0x43, 0x9d, 0x65, 0xae, 0xb3, 0xd9, 0xf2, 0x09, 0x96, 0xf8, 0x24, 0xb6, 0xa0, 0x98, 0x56, 0xd6, 0xc8, 0x2a, 0x31, 0x34, 0xd5, 0x03, 0x76, 0xfc, 0x8b, 0xed, 0x85, 0xc7, 0xc0, 0x4a, 0xb2, 0xee, 0xae, 0x8b, 0x51, 0xb5, 0x25, 0x34, 0x46, 0xd6, 0x95, 0x3a, 0x8a, 0x0f, 0xf7, 0x26, 0xac, 0x2b, 0xbe, 0xb4, 0xd1, 0xa5, 0x22, 0x79, 0xea, 0xbb, 0x9b, 0xab, 0x36, 0x42, 0x33, 0x0a, 0xba, 0x3b, 0x6c, 0xc1, 0x00, 0x95, 0x7b, 0x23, 0xdd, 0x49, 0x9e, 0xd6, 0x0c, 0x85, 0x90, 0x35, 0x9b, 0x68, 0x32, 0x9d, 0xf7, 0x38, 0xa3, 0x64, 0xdf, 0xc1, 0x9e, 0xb2, 0x59, 0x3a, 0x52, 0x48, 0xbb, 0x94, 0xec, 0x3c, 0x3e, 0x42, 0xa7, 0x3c, 0xdc, 0x02, 0x98, 0xcb, 0x61, 0xf9, 0x04, 0xb9, 0x9c, 0x62, 0xec, 0xc5, 0xf3, 0xd5, 0xbd, 0xd1, 0x95, 0xd2, 0xc7, 0x24, 0xb1, 0x04, 0xb7, 0x40, 0x71, 0x38, 0xcb, 0xa5, 0xc3, 0xd0, 0x73, 0x64, 0x7d, 0x3a, 0xb1, 0x4b, 0x46, 0x96, 0x26, 0x89, 0xc7, 0xa5, 0x33, 0x0e, 0x76, 0x9a, 0xf2, 0x52, 0x38, 0x57, 0x0c, 0xcd, 0x22, 0xae, 0x34, 0x47, 0x0c, 0x95, 0x9c, 0x86, 0x9d, 0x53, 0x2b, 0x12, 0xed, 0xc2, 0x41, 0xb5, 0x5a, 0x42, 0x29, 0x69, 0x0c, 0xc8, 0x6a, 0xeb, 0x0e, 0xeb, 0xbd, 0x49, 0xbb, 0xda, 0x64, 0x77, 0xcc, 0x05, 0x66, 0x9b, 0x0b, 0x72, 0x82, 0xdd, 0x11, 0x47, 0x1a, 0xac, 0x98, 0xf6, 0x6e, 0x73, 0x95, 0xa0, 0xec, 0xe8, 0x23, 0x3b, 0x39, 0x28, 0x79, 0x61, 0x3f, 0xbd, 0xee, 0x4e, 0x58, 0xcb, 0x16, 0xe9, 0xfc, 0xcf, 0xc4, 0x2c, 0x25, 0xe7, 0x04, 0x9a, 0x61, 0x3d, 0xe2, 0xd0, 0x16, 0x6b, 0x33, 0x30, 0x3f, 0x8b, 0xe5, 0x0c, 0x52, 0x32, 0xa7, 0xfb, 0x58, 0x67, 0x27, 0xcb, 0xfa, 0xaa, 0x87, 0xad, 0x3e, 0x94, 0x41, 0xb3, 0xc2, 0x1f, 0xf3, 0xdd, 0xb4, 0x84, 0x3f, 0xdc, 0xf4, 0x9d, 0x1d, 0xb2, 0x97, 0xb8, 0x7c, 0xc1, 0x91, 0xb8, 0x58, 0x92, 0x0c, 0x4b, 0x7f, 0x5f, 0x2f, 0x7a, 0x6c, 0x4d, 0xa0, 0xb7, 0xcf, 0xc0, 0x56, 0xe3, 0xba, 0x66, 0x19, 0x64, 0x3e, 0xa2, 0x85, 0xb1, 0x16, 0x8f, 0xc7, 0xed, 0x4d, 0xed, 0x74, 0xe0, 0x58, 0xf4, 0x8c, 0xde, 0xe7, 0xb0, 0x90, 0xa5, 0xc0, 0xf5, 0x34, 0xf2, 0x2f, 0x8f, 0x8b, 0x42, 0xfa, 0xb8, 0xd3, 0xec, 0x7d, 0xd9, 0x14, 0x4d, 0xdd, 0x1e, 0x39, 0x3a, 0xcd, 0x63, 0xf9, 0x84, 0x85, 0xda, 0xc6, 0x84, 0x7e, 0xc6, 0x42, 0xf3, 0xc6, 0x84, 0x5e, 0x48, 0xed, 0x74, 0xf0, 0x37, 0xef, 0x67, 0xc2, 0x3d, 0x0c, 0xd2, 0x87, 0xf9, 0x9f, 0x45, 0x88, 0x13, 0xa9, 0x3d, 0x0c, 0xc7, 0x12, 0x30, 0xfd, 0xfb, 0xdb, 0xff, 0xfe, 0x36, 0xf2, 0xa9, 0xd7, 0x87, 0xe2, 0xa9, 0x7a, 0x7c, 0x55, 0x6b, 0xa7, 0x56, 0x4c, 0x16, 0xe7, 0x61, 0x8c, 0x99, 0xed, 0xc5, 0x33, 0x6d, 0xa3, 0xef, 0x6e, 0x26, 0x48, 0x5f, 0xbe, 0x0e, 0x98, 0xa7, 0x4a, 0x90, 0x32, 0x0d, 0x02, 0x14, 0x85, 0xb5, 0x2a, 0x0f, 0x4a, 0x20, 0x99, 0x21, 0x6c, 0x49, 0x16, 0x64, 0xe5, 0x9b, 0x21, 0x7c, 0x32, 0x2a, 0xbb, 0x3d, 0x51, 0xb9, 0xbf, 0x27, 0xa2, 0xf3, 0x9e, 0xef, 0x11, 0xac, 0x3a, 0x49, 0x65, 0x35, 0x8c, 0xd9, 0x3f, 0xf3, 0xe0, 0x0c, 0xa9, 0x4c, 0x7a, 0xdc, 0x3e, 0x0d, 0xd5, 0xe2, 0xfd, 0x51, 0xff, 0xd8, 0xde, 0x44, 0xb8, 0x7c, 0x94, 0x6c, 0x3f, 0xa1, 0xb3, 0x69, 0xe4, 0xd7, 0x68, 0x17, 0x3a, 0xdf, 0x67, 0x87, 0x4c, 0x07, 0x3e, 0xd3, 0xf7, 0xdf, 0x6e, 0xf4, 0xc0, 0x44, 0x8a, 0x9b, 0xda, 0x8c, 0x44, 0x84, 0xce, 0xdf, 0xf2, 0x4b, 0x4e, 0x82, 0x09, 0x31, 0x32, 0x07, 0x73, 0x37, 0x93, 0xff, 0x6f, 0x7c, 0x37, 0xb9, 0x3b, 0xc1, 0x72, 0xf0, 0x34, 0xe4, 0x4f, 0x0b, 0x40, 0x61, 0x32, 0xbf, 0x42, 0x25, 0xbf, 0xc2, 0xcb, 0xe4, 0x57, 0x98, 0xcc, 0xaf, 0xf0, 0x72, 0xf9, 0x51, 0x39, 0xe9, 0x3b, 0xa7, 0xd6, 0x78, 0xa4, 0x68, 0x2e, 0xce, 0x7b, 0x9a, 0x99, 0x6c, 0xd6, 0x36, 0xb8, 0xae, 0xe1, 0xfd, 0xe6, 0xba, 0x26, 0xe1, 0x57, 0xef, 0xf5, 0x4e, 0x9a, 0x8b, 0x41, 0x4f, 0xc4, 0xc8, 0xfc, 0xb2, 0xbe, 0x14, 0xd6, 0xb1, 0xbb, 0xc1, 0x6b, 0xea, 0x7a, 0x45, 0xff, 0xc1, 0x7d, 0xc1, 0xfe, 0x9e, 0x9c, 0x88, 0x16, 0xe7, 0x8b, 0x11, 0x76, 0x28, 0x7b, 0x6e, 0x06, 0x8c, 0xf5, 0x91, 0x35, 0x62, 0xd7, 0x84, 0x0a, 0x86, 0xd9, 0x4c, 0x3f, 0xc2, 0xc8, 0xf7, 0x0e, 0xf7, 0x1c, 0xc3, 0x5e, 0xdc, 0xe9, 0x0a, 0x40, 0x3e, 0xf9, 0xc7, 0x3c, 0xd0, 0x86, 0xfd, 0xb8, 0xde, 0x55, 0x01, 0x85, 0xb4, 0xa3, 0xf8, 0x7a, 0x94, 0xd5, 0x8f, 0xed, 0x98, 0xc4, 0x04, 0xa7, 0xf0, 0xd1, 0xf3, 0xf8, 0xdd, 0x43, 0x5f, 0x0e, 0xe1, 0xa3, 0xe7, 0xc4, 0x8c, 0xf8, 0x7d, 0x36, 0x0f, 0x52, 0x45, 0xd2, 0xb9, 0x9b, 0x0e, 0x4b, 0x3e, 0x7a, 0x46, 0x9c, 0x10, 0xef, 0x4a, 0xed, 0x98, 0xbc, 0x19, 0x8f, 0x64, 0xe3, 0xdc, 0xcc, 0x62, 0x7e, 0xe5, 0x70, 0x14, 0x68, 0xf7, 0xa6, 0x03, 0xc9, 0x1f, 0x38, 0xdf, 0x42, 0xfc, 0x56, 0x93, 0xdd, 0x94, 0xfc, 0xd4, 0xac, 0x50, 0x35, 0xcb, 0x1f, 0xc2, 0x0e, 0x82, 0x67, 0x35, 0x55, 0xe1, 0xbc, 0xf4, 0x54, 0xed, 0x1e, 0x36, 0x31, 0xab, 0x53, 0x21, 0x4b, 0x13, 0x88, 0xb3, 0x2b, 0xe0, 0x49, 0x5f, 0x33, 0x3c, 0x91, 0x57, 0xe1, 0xfd, 0x62, 0x33, 0x60, 0x9f, 0xef, 0x64, 0xa7, 0xb4, 0x2f, 0x45, 0x8a, 0x91, 0xea, 0x60, 0x2d, 0x25, 0x63, 0xf9, 0x17, 0x46, 0xf8, 0x46, 0x9d, 0xb0, 0x2b, 0xe4, 0x9d, 0xed, 0x85, 0xa7, 0x43, 0xf1, 0x9f, 0x0d, 0xb4, 0xeb, 0xf3, 0x1c, 0xf0, 0xb4, 0xc1, 0x0b, 0x72, 0xfb, 0x09, 0x37, 0xbe, 0xcd, 0xf6, 0xc0, 0x53, 0xf8, 0xdb, 0x82, 0x92, 0x76, 0x39, 0xed, 0xd4, 0x49, 0x46, 0xde, 0xa7, 0x07, 0x8e, 0xd0, 0x6e, 0x7c, 0x18, 0x34, 0xcd, 0x2e, 0xbd, 0xc5, 0x5f, 0xf5, 0x10, 0xed, 0xac, 0xa2, 0x64, 0x3d, 0xc2, 0xe7, 0xaa, 0xef, 0x59, 0x66, 0xfd, 0x45, 0x47, 0x67, 0xe0, 0xea, 0xcf, 0xda, 0x2a, 0xd9, 0xf3, 0x2c, 0xd9, 0x3a, 0x8b, 0x85, 0xb6, 0xb3, 0xfd, 0xc6, 0x56, 0x73, 0x56, 0x31, 0x98, 0xd8, 0xfb, 0x61, 0x7c, 0xbb, 0x81, 0x4e, 0xf6, 0x55, 0x4f, 0x62, 0x0e, 0x7e, 0x06, 0x7b, 0x82, 0x76, 0x2a, 0xd9, 0xdb, 0xef, 0xf0, 0xed, 0xf1, 0xd8, 0x5d, 0x2c, 0xbe, 0x9b, 0x64, 0x61, 0x0a, 0xd5, 0xa8, 0x22, 0xee, 0x36, 0x33, 0x8b, 0xff, 0x1c, 0x71, 0x75, 0x2b, 0x7b, 0x3b, 0x47, 0xb2, 0x3c, 0xe6, 0x10, 0x64, 0x10, 0x6a, 0x4c, 0x77, 0x9e, 0xbd, 0x69, 0x31, 0x3c, 0x20, 0x55, 0xa1, 0x3c, 0x65, 0x7e, 0xf7, 0x8d, 0x77, 0xdf, 0xd8, 0xf9, 0x0c, 0x18, 0xc2, 0xda, 0x97, 0x4e, 0x81, 0x86, 0x69, 0xc7, 0xbd, 0x2d, 0x55, 0xd5, 0x34, 0xc3, 0xf6, 0xa8, 0x29, 0x65, 0x51, 0x5f, 0xc4, 0x39, 0x7a, 0x70, 0xff, 0xc1, 0xfd, 0xcc, 0x9a, 0x9e, 0x66, 0x6a, 0x10, 0xac, 0x21, 0x84, 0x20, 0x4f, 0x89, 0xec, 0xb6, 0x8e, 0x1f, 0x6b, 0xf1, 0x7e, 0xd4, 0x34, 0x7a, 0xde, 0xc8, 0x45, 0xb8, 0x7e, 0x90, 0x65, 0xde, 0x88, 0xef, 0x9f, 0x31, 0xfe, 0x1d, 0x96, 0x82, 0xac, 0x88, 0x1a, 0x30, 0xbd, 0xe6, 0xe3, 0x1e, 0x17, 0xf6, 0x8e, 0xb0, 0x05, 0x7b, 0x74, 0x7b, 0x8d, 0x07, 0xfb, 0x73, 0x7b, 0x1b, 0x08, 0x9b, 0xd8, 0x9d, 0xdf, 0x97, 0x70, 0x64, 0x1d, 0xfc, 0x5c, 0x62, 0xf0, 0x31, 0x8c, 0xdf, 0xa1, 0xf2, 0x7c, 0x35, 0x02, 0x1e, 0x15, 0x20, 0xd4, 0x8e, 0x6a, 0xd6, 0xab, 0x42, 0x0b, 0xf6, 0x71, 0x29, 0xf5, 0x31, 0xbb, 0x7b, 0x3b, 0x9c, 0xaa, 0x09, 0xdf, 0xbb, 0xa6, 0x1b, 0x59, 0x96, 0xb2, 0xaa, 0x87, 0x10, 0xf2, 0x6e, 0x0c, 0x29, 0xa5, 0x71, 0x62, 0x90, 0x87, 0xd2, 0x21, 0x69, 0x94, 0x98, 0xff, 0x47, 0x1c, 0xbd, 0x7f, 0xa5, 0x9e, 0xcc, 0x0d, 0x3e, 0x0b, 0xa6, 0x48, 0x01, 0x95, 0xa9, 0xc3, 0x36, 0x84, 0x45, 0x9a, 0x77, 0x54, 0x2a, 0x86, 0x6c, 0x51, 0xc6, 0xfd, 0xe9, 0xe4, 0xb8, 0x23, 0x45, 0x48, 0xc4, 0xe3, 0xfb, 0xfb, 0x88, 0x7d, 0x9f, 0xb3, 0xb7, 0x03, 0x16, 0x07, 0xf8, 0x71, 0xac, 0xcd, 0x11, 0x5a, 0x01, 0xfd, 0x2e, 0x01, 0xc3, 0xde, 0x1a, 0x55, 0xdf, 0xca, 0x60, 0x33, 0x6c, 0x69, 0x37, 0xf0, 0xf9, 0xc4, 0x7c, 0xa8, 0x56, 0x59, 0x67, 0xb0, 0x99, 0xbc, 0x7e, 0x16, 0xdb, 0x51, 0x74, 0xe2, 0x1b, 0x72, 0x4c, 0x13, 0x7d, 0x1e, 0xbe, 0x7f, 0xb2, 0xa8, 0xaf, 0xba, 0x77, 0xa6, 0x07, 0xc4, 0x4b, 0xc2, 0xcf, 0xb1, 0x70, 0xab, 0x05, 0xc3, 0x53, 0x2b, 0x9d, 0x75, 0x02, 0xef, 0x05, 0x56, 0xc7, 0x75, 0xd8, 0xfb, 0x1e, 0x27, 0x8e, 0xdf, 0x6f, 0xdf, 0xf9, 0xed, 0x3b, 0xca, 0xfd, 0xed, 0xcc, 0x94, 0xd6, 0xa6, 0x58, 0x4c, 0xf2, 0xae, 0x32, 0x0b, 0xb4, 0x62, 0x31, 0x49, 0xbe, 0x98, 0xa3, 0x79, 0x66, 0x33, 0x4a, 0x4c, 0x39, 0x33, 0x43, 0x74, 0x0f, 0x2e, 0x59, 0xcb, 0x62, 0x4c, 0x7f, 0x50, 0xf9, 0xe6, 0xbb, 0xff, 0x0e, 0xbe, 0x4f, 0xfc, 0xf2, 0x1d, 0x7c, 0x77, 0x97, 0xe2, 0xf9, 0x9d, 0x39, 0x76, 0xce, 0x61, 0xa0, 0x33, 0x97, 0x3d, 0x7b, 0x68, 0x9f, 0xe5, 0x37, 0x17, 0xd2, 0xd7, 0x2f, 0x5a, 0x9d, 0x86, 0x4e, 0x4a, 0x30, 0xfc, 0xf1, 0x95, 0x56, 0x5d, 0x6a, 0x11, 0xd3, 0x89, 0x30, 0xa7, 0xed, 0x06, 0xa7, 0xb5, 0xf2, 0xab, 0x16, 0xa2, 0x23, 0xa9, 0x1d, 0xe1, 0xa0, 0x03, 0x5e, 0x6a, 0x31, 0xa4, 0xe5, 0x30, 0x47, 0x44, 0xae, 0x22, 0x62, 0x60, 0xfc, 0x05, 0xf2, 0x68, 0x17, 0x36, 0x55, 0xf7, 0x8a, 0xa1, 0x54, 0x6a, 0x85, 0xae, 0x39, 0x20, 0xbf, 0x62, 0xf0, 0x42, 0x53, 0xd5, 0x46, 0x84, 0xc6, 0x16, 0x26, 0xcf, 0x18, 0xd8, 0x3e, 0x31, 0x86, 0xf5, 0x25, 0x4f, 0xc0, 0x28, 0x0f, 0x0f, 0xf2, 0x79, 0xcd, 0x96, 0x0f, 0x58, 0xbd, 0x8c, 0xb4, 0xf2, 0x7a, 0x20, 0x35, 0x47, 0x12, 0x39, 0x5a, 0x3e, 0xc1, 0x1c, 0x35, 0x55, 0x1b, 0x93, 0xdf, 0x9f, 0x51, 0xee, 0x96, 0xd3, 0xcc, 0xc2, 0xd8, 0x98, 0xfc, 0x2d, 0x5f, 0xa4, 0xe7, 0xff, 0xa7, 0x77, 0xaa, 0x7b, 0xd3, 0xbc, 0xf5, 0x1e, 0xaa, 0xee, 0x65, 0x36, 0xc6, 0x0c, 0x0a, 0xff, 0x87, 0x54, 0xb7, 0x9a, 0x79, 0xc9, 0x4d, 0x78, 0xee, 0xed, 0x80, 0x9f, 0xfe, 0x9a, 0xcf, 0x93, 0x2f, 0x3b, 0xaa, 0x7b, 0x15, 0x7e, 0x08, 0x46, 0x9e, 0x97, 0x60, 0x64, 0x6f, 0xe2, 0x0c, 0xc4, 0xc2, 0xf7, 0xb9, 0x8d, 0xc8, 0x63, 0x9a, 0x68, 0xcf, 0xe4, 0xf2, 0x5c, 0x67, 0x82, 0x97, 0xb1, 0x22, 0x1e, 0xd8, 0x42, 0xb7, 0x04, 0x41, 0x9f, 0xbe, 0x4e, 0xc6, 0x16, 0x1c, 0x8a, 0x4f, 0xf3, 0xe2, 0xbc, 0xa1, 0x7d, 0x6e, 0x83, 0xe8, 0x4b, 0xe3, 0xe9, 0x36, 0x70, 0x1e, 0x86, 0x78, 0xb6, 0xa9, 0x98, 0x1f, 0x18, 0xa5, 0x1d, 0xca, 0x29, 0x0b, 0xb3, 0x6e, 0xeb, 0x20, 0x3b, 0xca, 0xa5, 0x3e, 0xef, 0x43, 0xfb, 0x57, 0x08, 0xc4, 0x39, 0x4a, 0x76, 0xc2, 0x85, 0xd7, 0x35, 0x96, 0xd2, 0xd0, 0x5a, 0xe3, 0x0d, 0x06, 0x80, 0x6f, 0xd6, 0x83, 0xea, 0x31, 0x7c, 0xba, 0x1b, 0x68, 0xd7, 0x38, 0x17, 0xdf, 0x5c, 0x48, 0x9b, 0xd6, 0xf9, 0xca, 0x25, 0xab, 0xc1, 0x0f, 0x9a, 0x36, 0x50, 0xf5, 0x95, 0x9c, 0xeb, 0x81, 0x77, 0xdf, 0x20, 0xab, 0xc0, 0x07, 0xf7, 0xf3, 0x3d, 0x2e, 0xef, 0x39, 0xdd, 0x01, 0xa4, 0x6a, 0xcb, 0x57, 0x09, 0x41, 0x2f, 0xcd, 0xa6, 0x82, 0x8c, 0x4d, 0x73, 0x6b, 0x4a, 0xdc, 0x9a, 0x1a, 0x8f, 0x01, 0xa9, 0x53, 0xfd, 0x4a, 0xae, 0xc9, 0x93, 0x66, 0x67, 0x49, 0x8f, 0xf3, 0xdd, 0x8c, 0xdc, 0x9f, 0x3d, 0xbf, 0x07, 0xd3, 0xe5, 0xcc, 0x0e, 0x20, 0x59, 0x04, 0x95, 0x09, 0x9f, 0x1a, 0x7c, 0x1a, 0xf0, 0xa9, 0xc5, 0xa7, 0x26, 0x0a, 0x6e, 0x35, 0x72, 0x20, 0x69, 0x2b, 0xff, 0x0c, 0x0f, 0x62, 0x00, 0x08, 0xa7, 0xb9, 0xbd, 0x55, 0x65, 0x6c, 0xc8, 0x1b, 0x39, 0xf3, 0x07, 0x2b, 0xb6, 0x42, 0x9f, 0xcf, 0x5d, 0x08, 0xd3, 0xf0, 0x49, 0x96, 0xe8, 0x85, 0x57, 0x3a, 0x20, 0x5f, 0xcd, 0xad, 0x1e, 0xbe, 0xdc, 0x4a, 0x73, 0x46, 0xb1, 0x44, 0xae, 0x87, 0x56, 0xd0, 0x11, 0x6d, 0x10, 0x9e, 0x50, 0x62, 0x63, 0x69, 0xb1, 0x06, 0x94, 0x31, 0x74, 0x5d, 0x5b, 0x21, 0x93, 0xb4, 0x27, 0x94, 0xf8, 0x15, 0x69, 0xf1, 0x9a, 0xd8, 0x97, 0x52, 0xb3, 0x12, 0x1e, 0x1f, 0x93, 0x2b, 0xa3, 0x3d, 0x42, 0x50, 0x89, 0x5d, 0x9b, 0x1e, 0xab, 0x6a, 0xfe, 0x5c, 0x26, 0x1f, 0xf7, 0x82, 0x53, 0x89, 0x7d, 0x30, 0x3d, 0xcf, 0xe8, 0x90, 0x94, 0xaf, 0x84, 0x6f, 0x4a, 0x4f, 0x15, 0x1b, 0x79, 0x8d, 0xd5, 0x04, 0x2e, 0x28, 0xb1, 0xff, 0x98, 0x1e, 0x1b, 0xfd, 0xea, 0x55, 0x1e, 0x7b, 0x54, 0x89, 0x7d, 0x6a, 0x54, 0x7d, 0x9a, 0xc9, 0x92, 0x28, 0x59, 0x90, 0x55, 0x62, 0x9f, 0x4b, 0x8b, 0x35, 0xe1, 0x6c, 0xca, 0x04, 0x8f, 0x00, 0xb1, 0xe1, 0xbd, 0x84, 0x4d, 0x94, 0xcb, 0x06, 0x05, 0x6e, 0x67, 0x0a, 0x2e, 0xd2, 0xa9, 0x84, 0xfd, 0x22, 0x2d, 0xac, 0x49, 0x09, 0x7b, 0x2d, 0x2d, 0xac, 0x96, 0x69, 0xbc, 0x52, 0xe8, 0xaf, 0xd2, 0x4a, 0x99, 0xc3, 0x47, 0x4a, 0x54, 0x7f, 0x77, 0xec, 0x38, 0x6e, 0x8c, 0x58, 0x94, 0x53, 0xd9, 0x92, 0x40, 0x93, 0x3c, 0x88, 0x74, 0x6b, 0x09, 0x68, 0x69, 0x8d, 0xc0, 0x51, 0xdc, 0xe8, 0x73, 0xdb, 0x07, 0xd9, 0xae, 0x6f, 0x79, 0x38, 0x3b, 0xe4, 0xe7, 0x18, 0x2b, 0xc1, 0x57, 0x77, 0x33, 0x1c, 0x34, 0xf8, 0x3c, 0x8a, 0x7f, 0x85, 0xe1, 0xaa, 0x65, 0x31, 0xa4, 0xe6, 0x5f, 0xf9, 0xb8, 0x24, 0x77, 0x2b, 0x93, 0x75, 0x6e, 0x26, 0xbc, 0x77, 0xde, 0x4c, 0xb6, 0xf2, 0xec, 0x75, 0xf7, 0xa7, 0xa4, 0x1d, 0x27, 0xd7, 0x87, 0xba, 0xe8, 0x52, 0x59, 0x66, 0x82, 0xc1, 0x24, 0x18, 0x67, 0xc2, 0x75, 0x91, 0xd0, 0x8d, 0x9d, 0xf2, 0x3f, 0xc8, 0x83, 0x4c, 0xdf, 0x56, 0x77, 0xa3, 0x57, 0x1e, 0x8a, 0xaa, 0x24, 0xf2, 0xe9, 0xae, 0x72, 0x25, 0x6d, 0x40, 0xb0, 0x36, 0xbd, 0x13, 0x68, 0x95, 0x87, 0x88, 0xa6, 0xde, 0xdd, 0x81, 0x6f, 0x83, 0xc9, 0x7d, 0x73, 0x13, 0xd3, 0x49, 0x1f, 0x74, 0xcd, 0x64, 0xbe, 0x58, 0x56, 0x32, 0xad, 0x97, 0x99, 0xf2, 0xf9, 0x84, 0x9e, 0x04, 0xcb, 0x7d, 0x38, 0xd8, 0x0a, 0x99, 0x61, 0x03, 0xb3, 0x4a, 0xf2, 0x15, 0x72, 0x9b, 0x2a, 0x49, 0x43, 0xda, 0x37, 0x37, 0xee, 0x01, 0xb1, 0x67, 0x38, 0xd4, 0x83, 0xcf, 0x68, 0xcf, 0x70, 0xa0, 0x09, 0x04, 0x76, 0x6a, 0xc0, 0x73, 0x72, 0x33, 0x0b, 0xda, 0xe9, 0xb9, 0x8c, 0x60, 0xfa, 0x6a, 0x59, 0x66, 0xfa, 0xa7, 0xa4, 0x05, 0xcf, 0xe1, 0x74, 0x97, 0x85, 0x9b, 0x3b, 0x16, 0x6e, 0xe4, 0xf8, 0x65, 0xe1, 0x82, 0x97, 0xc0, 0xed, 0x4a, 0xc0, 0xa1, 0x44, 0x46, 0x27, 0xe2, 0x4c, 0x3f, 0x1e, 0x57, 0xdb, 0x27, 0xfb, 0x91, 0x4b, 0x6b, 0x43, 0x1a, 0x6f, 0xf9, 0x80, 0x69, 0xf3, 0xd7, 0xbb, 0x1d, 0x96, 0xf7, 0x0b, 0x9b, 0x2d, 0xc7, 0xfa, 0x2b, 0x5b, 0xee, 0x2c, 0xac, 0xdc, 0x3c, 0xb0, 0x6b, 0x18, 0x57, 0x3f, 0x4d, 0x61, 0xa7, 0x00, 0xc4, 0xcf, 0x25, 0xb8, 0x54, 0x94, 0xc2, 0x76, 0x06, 0xa2, 0x24, 0x93, 0x0f, 0xa9, 0x66, 0x57, 0xc2, 0x93, 0x94, 0xea, 0x40, 0xe5, 0x6c, 0x8f, 0xe5, 0x7d, 0x66, 0x73, 0x10, 0xd3, 0xb7, 0x9a, 0x89, 0x82, 0x8f, 0xa5, 0xdd, 0xbe, 0xad, 0x96, 0x0f, 0xf2, 0x1d, 0xf0, 0xc4, 0x8e, 0x66, 0x78, 0xb2, 0x05, 0x04, 0x8d, 0xf7, 0x0b, 0x91, 0xdd, 0xf6, 0x0b, 0xf9, 0x66, 0xfb, 0xe0, 0x09, 0x03, 0x30, 0xbb, 0xc7, 0x7d, 0xf5, 0x76, 0x3a, 0xd3, 0x8a, 0x44, 0xeb, 0x33, 0xb3, 0xe0, 0x2e, 0x01, 0xa5, 0x0e, 0x75, 0x3d, 0xc0, 0x21, 0xe9, 0x4e, 0x0c, 0x1d, 0x1f, 0x09, 0xd2, 0xf9, 0x57, 0x18, 0x60, 0x2f, 0xe2, 0xf5, 0x7e, 0x7c, 0xcf, 0xc1, 0x14, 0x6b, 0xea, 0xe9, 0x7c, 0xec, 0x1a, 0x76, 0xaa, 0x65, 0xc6, 0xb8, 0xa7, 0xa5, 0x16, 0x7c, 0xfb, 0x51, 0xa4, 0xda, 0x00, 0xf2, 0x3f, 0xe0, 0xf7, 0x26, 0x92, 0x12, 0x5f, 0x7a, 0x8c, 0xb8, 0xe7, 0xb9, 0xe7, 0x44, 0x60, 0x14, 0x72, 0x8d, 0xd4, 0x11, 0x9d, 0x88, 0x79, 0xdc, 0x47, 0xf2, 0x8c, 0x16, 0x79, 0x5e, 0x69, 0x25, 0xca, 0xef, 0x27, 0xb0, 0x96, 0x47, 0x62, 0xea, 0x81, 0x2e, 0x92, 0x84, 0x31, 0x54, 0x2f, 0x35, 0x64, 0xef, 0x01, 0x43, 0xb4, 0x51, 0x5a, 0x10, 0xbd, 0x46, 0xaa, 0xbb, 0x0c, 0x84, 0x41, 0xf2, 0x45, 0x1d, 0xd2, 0x9c, 0xe8, 0xb7, 0xa4, 0xa2, 0x82, 0x19, 0xa0, 0x71, 0x97, 0xa0, 0xfc, 0x74, 0x0d, 0xad, 0x3b, 0x09, 0xaa, 0xe3, 0x9e, 0x01, 0xda, 0x23, 0xbe, 0xd9, 0x25, 0xf0, 0x84, 0x64, 0xae, 0x7e, 0x40, 0xbc, 0x2e, 0x7c, 0x94, 0x4e, 0x4e, 0x25, 0x43, 0x76, 0x3c, 0xda, 0x20, 0x69, 0x19, 0xce, 0x67, 0x22, 0xce, 0xa7, 0xd9, 0x18, 0x76, 0x23, 0xd7, 0xe2, 0xfd, 0xa2, 0x07, 0xf9, 0x66, 0x61, 0x57, 0x81, 0x03, 0x9e, 0xf2, 0x7e, 0xe1, 0x86, 0x20, 0xbe, 0x47, 0x56, 0x60, 0xdf, 0x6d, 0x8b, 0xe4, 0xe1, 0xb8, 0x3d, 0x5f, 0xe3, 0x69, 0xd6, 0xb8, 0x55, 0x35, 0x28, 0x57, 0xa9, 0x76, 0xbf, 0x3a, 0x2c, 0x08, 0x81, 0xa8, 0x0e, 0xbc, 0xa7, 0x85, 0x5d, 0x81, 0xa8, 0x9b, 0x9d, 0x16, 0xdc, 0xeb, 0x64, 0x3e, 0x14, 0x3c, 0x28, 0xb8, 0x4d, 0x69, 0xd3, 0xb2, 0xfe, 0xdd, 0x96, 0x88, 0xa7, 0x34, 0x94, 0x47, 0x22, 0x1d, 0x83, 0xaf, 0xa6, 0x90, 0x10, 0x71, 0x88, 0xcf, 0x57, 0xf7, 0x22, 0x7d, 0x9f, 0xd2, 0xae, 0xc1, 0x11, 0x7f, 0x7e, 0x36, 0xfe, 0xa0, 0x3f, 0x61, 0x03, 0xb9, 0x90, 0x6e, 0xf4, 0x8b, 0x6e, 0x17, 0xd8, 0xf2, 0xa8, 0x26, 0xc8, 0xf5, 0xd1, 0x4a, 0x10, 0x09, 0xb7, 0xe9, 0xf1, 0xa9, 0x66, 0x3d, 0x6f, 0xc1, 0xb7, 0x71, 0x11, 0xfa, 0xd6, 0x51, 0xcf, 0x4b, 0x3a, 0xcc, 0xa5, 0x1f, 0xfb, 0x79, 0x7d, 0x0d, 0x71, 0xfa, 0xf4, 0xd6, 0x8d, 0x25, 0xf5, 0x1b, 0x3c, 0xb2, 0x1c, 0xb1, 0x32, 0x8e, 0xb4, 0xbf, 0xc5, 0x80, 0x5c, 0xbf, 0x18, 0xd6, 0xce, 0xee, 0x84, 0x29, 0xd0, 0x4f, 0xf5, 0x40, 0xac, 0xec, 0xa7, 0x6f, 0x59, 0x46, 0xc8, 0x66, 0xfa, 0x7b, 0xd7, 0x6b, 0x92, 0x0f, 0x5b, 0xcf, 0x63, 0x7d, 0x11, 0xa7, 0xc1, 0x27, 0xcb, 0x61, 0x3d, 0x4b, 0xa7, 0xa1, 0x3c, 0xb0, 0xcf, 0xfa, 0x45, 0x5d, 0x28, 0xae, 0x8a, 0xe3, 0xf4, 0x9e, 0xd2, 0xa2, 0xab, 0x89, 0xc7, 0x8e, 0xc7, 0xbb, 0x42, 0x71, 0x16, 0xa7, 0xe4, 0x78, 0xd7, 0x6b, 0x81, 0xd5, 0xfe, 0x12, 0x49, 0xe5, 0x2b, 0x21, 0x49, 0x03, 0x43, 0x9f, 0xea, 0xf7, 0xb6, 0x98, 0x37, 0x30, 0x2b, 0xff, 0x48, 0x11, 0xc8, 0x6a, 0x9d, 0x9f, 0xc9, 0x67, 0xdb, 0x69, 0xec, 0x98, 0x86, 0x76, 0x37, 0x96, 0xf9, 0x14, 0xf6, 0xdd, 0x16, 0xfc, 0x3d, 0x8d, 0x5c, 0x65, 0x49, 0x38, 0x5c, 0x8e, 0xbd, 0x87, 0xa3, 0xd2, 0xff, 0x2b, 0xea, 0xbd, 0xa5, 0x85, 0x90, 0x38, 0x45, 0x2b, 0x84, 0x3c, 0x8f, 0x1b, 0xe7, 0x49, 0xdf, 0xde, 0x17, 0xdf, 0x68, 0xd1, 0x16, 0x16, 0x0b, 0xb0, 0xd9, 0x17, 0xf4, 0xb7, 0x17, 0x14, 0xf9, 0x2b, 0xb0, 0xdf, 0x13, 0x3a, 0x15, 0x81, 0x0e, 0x11, 0x58, 0xaa, 0xdd, 0x5f, 0xee, 0xff, 0x37, 0x1c, 0x67, 0xfc, 0x3d, 0xed, 0xba, 0x06, 0x6b, 0xff, 0x54, 0xa0, 0xa3, 0x87, 0x59, 0xa5, 0x1e, 0xa2, 0x73, 0xb1, 0x9c, 0xca, 0x0f, 0x8b, 0x73, 0xfe, 0x7f, 0xb9, 0x4b, 0xf5, 0xf2, 0xbb, 0x7f, 0x71, 0x97, 0x6a, 0xf3, 0x7f, 0xe7, 0x2e, 0xd5, 0x85, 0x7d, 0x57, 0xde, 0xa5, 0xba, 0x33, 0x6d, 0x97, 0x8a, 0x7c, 0xc2, 0xb3, 0x3b, 0x3f, 0x88, 0x97, 0xf6, 0x19, 0x4c, 0x87, 0x92, 0x6c, 0x7b, 0xe5, 0xd8, 0xec, 0x60, 0x91, 0xf4, 0x31, 0x15, 0xb6, 0xf6, 0x33, 0x92, 0x91, 0x12, 0x33, 0x57, 0x47, 0x74, 0x22, 0x33, 0xb8, 0x3a, 0xa2, 0x47, 0x9a, 0xf7, 0xc9, 0xce, 0x2d, 0x90, 0x1f, 0x79, 0x9f, 0x64, 0x15, 0x26, 0x39, 0x67, 0xc6, 0xc6, 0x0d, 0x74, 0x85, 0xf5, 0xa2, 0x1d, 0x39, 0x48, 0xaa, 0x6f, 0x80, 0x6c, 0xbc, 0x30, 0xab, 0x4d, 0x2b, 0x48, 0xae, 0x24, 0x5d, 0x40, 0xac, 0x19, 0xf5, 0x9a, 0x89, 0xd6, 0x29, 0xee, 0xd1, 0x9d, 0x59, 0xb9, 0x30, 0x93, 0x5f, 0x7a, 0x9a, 0xb7, 0x56, 0x17, 0x88, 0x2f, 0xee, 0x6d, 0x50, 0x59, 0x75, 0x69, 0xa3, 0x4e, 0x9a, 0x8d, 0x66, 0x97, 0x61, 0xee, 0xe0, 0x9f, 0x0e, 0x57, 0x3d, 0xc2, 0xc3, 0x08, 0xf6, 0xa1, 0xbd, 0xb4, 0xd7, 0x12, 0xe8, 0xb0, 0x43, 0xd5, 0x23, 0x8f, 0xe0, 0x37, 0xfe, 0x9e, 0xc6, 0xdf, 0x53, 0x54, 0x16, 0xdd, 0x41, 0x60, 0x9e, 0x03, 0xe6, 0x82, 0x99, 0x6c, 0x54, 0x48, 0xf0, 0xa7, 0x7d, 0xe4, 0xb1, 0x87, 0xda, 0xca, 0x74, 0xc7, 0x5e, 0x8a, 0xf8, 0x2a, 0x4e, 0x43, 0xa5, 0xad, 0x76, 0xee, 0xa0, 0xdc, 0x29, 0xd9, 0x52, 0x3d, 0x2b, 0x6b, 0xb0, 0x3d, 0x7a, 0x97, 0x1d, 0xd3, 0xd2, 0x6e, 0x03, 0x93, 0x1f, 0x48, 0x0e, 0x8a, 0x68, 0x6d, 0x3e, 0xeb, 0x75, 0xe1, 0x23, 0x2f, 0x9f, 0xa5, 0xf3, 0x47, 0x94, 0xa2, 0x46, 0xb8, 0xbc, 0x15, 0x41, 0x7e, 0x02, 0xa5, 0x92, 0x1d, 0x38, 0x53, 0xb6, 0x92, 0x67, 0x1b, 0x86, 0x75, 0x2d, 0x8a, 0xa7, 0xfa, 0x7d, 0xd6, 0x89, 0x5a, 0xb2, 0x67, 0xfb, 0x2f, 0xc4, 0x4f, 0xbe, 0xb9, 0x7d, 0xee, 0xe0, 0x9f, 0xa3, 0x15, 0x83, 0x17, 0x37, 0x2c, 0xaf, 0x3c, 0xb2, 0x8e, 0xf6, 0x20, 0x5e, 0x77, 0x97, 0x63, 0x2b, 0x1d, 0x13, 0xb5, 0x6b, 0x11, 0x06, 0x25, 0x3b, 0xed, 0xeb, 0xb8, 0x92, 0x23, 0x0d, 0x57, 0x8b, 0x6d, 0x55, 0xf8, 0xa6, 0x45, 0x0a, 0x31, 0xb9, 0x4d, 0xe1, 0x30, 0x81, 0xe2, 0xd4, 0x48, 0xf5, 0xf3, 0xf1, 0x29, 0x20, 0xd5, 0x7e, 0x14, 0x9f, 0xaa, 0x30, 0x68, 0x37, 0x10, 0x9f, 0x83, 0xef, 0xe3, 0x11, 0xda, 0xde, 0x0a, 0x82, 0x09, 0xdf, 0xf5, 0xf8, 0xfe, 0x04, 0x3e, 0x27, 0x60, 0x7c, 0x0c, 0x79, 0xc6, 0x32, 0x7c, 0x9f, 0x85, 0x69, 0x0e, 0xb4, 0xb9, 0xf1, 0x6d, 0x62, 0x04, 0x32, 0xac, 0x6d, 0x04, 0x77, 0x4d, 0x04, 0x34, 0x1a, 0x7c, 0x66, 0x22, 0x5c, 0x50, 0x02, 0xcd, 0x53, 0xf8, 0xee, 0x40, 0x5e, 0x75, 0x17, 0x3e, 0xdd, 0x18, 0x56, 0x20, 0x51, 0x3d, 0xbe, 0x85, 0x35, 0x7a, 0xbe, 0xcd, 0x80, 0x6f, 0xb7, 0xb5, 0x22, 0x33, 0x82, 0x70, 0x7b, 0xf1, 0xbd, 0x01, 0xe1, 0x3e, 0xc6, 0x67, 0x23, 0x3e, 0xdf, 0xc2, 0x67, 0x31, 0xc2, 0x23, 0x7f, 0xaa, 0x39, 0x4a, 0xbb, 0x0f, 0x48, 0x2f, 0x9e, 0x6a, 0x87, 0x8c, 0x0b, 0x8c, 0x42, 0x3d, 0xad, 0xd8, 0xb4, 0xf4, 0x4b, 0x81, 0x34, 0xca, 0x01, 0x19, 0x47, 0x2f, 0xa1, 0x1d, 0x1b, 0x91, 0x5e, 0x3e, 0x05, 0x4f, 0x73, 0x7b, 0x99, 0x19, 0xbb, 0x94, 0x9c, 0xb6, 0x20, 0xec, 0xb6, 0x50, 0x7a, 0x4e, 0x25, 0x04, 0x2b, 0xb1, 0x92, 0x30, 0xc7, 0x2d, 0xdb, 0x51, 0x5a, 0xcd, 0x58, 0x37, 0x2a, 0xb7, 0x12, 0x25, 0xb7, 0x2d, 0x48, 0x53, 0xfb, 0xdd, 0x7e, 0x36, 0x96, 0xbb, 0x07, 0x57, 0x91, 0xb6, 0x65, 0x86, 0xc4, 0x6a, 0x80, 0xd8, 0x82, 0xf9, 0xd6, 0x26, 0xea, 0x46, 0xf0, 0x89, 0xfc, 0xa8, 0xfc, 0x79, 0x83, 0x5f, 0x3e, 0xb6, 0xdd, 0x13, 0xa6, 0x5d, 0x93, 0x4d, 0x35, 0x98, 0x0f, 0xfe, 0x9e, 0x96, 0x40, 0x7d, 0xbe, 0x50, 0xd8, 0xec, 0xb9, 0x1d, 0x7b, 0x87, 0xd1, 0xe3, 0x2d, 0xbc, 0x7d, 0x74, 0x33, 0xc8, 0x3b, 0xf8, 0xa5, 0x8d, 0xf6, 0x96, 0xaa, 0xfa, 0x0a, 0x5d, 0x50, 0x18, 0xd8, 0xe7, 0xd2, 0xe4, 0x61, 0x8a, 0xc0, 0xd2, 0xcd, 0xec, 0x66, 0xd0, 0x85, 0xe5, 0x94, 0x0f, 0xf3, 0x96, 0x57, 0xc1, 0x76, 0x14, 0x32, 0xd3, 0x7b, 0x42, 0xf3, 0xce, 0xa5, 0x3d, 0x91, 0x5e, 0x17, 0x6a, 0x9f, 0x50, 0xbb, 0xc1, 0x73, 0xbb, 0x17, 0xdc, 0x54, 0x16, 0xed, 0x66, 0xbd, 0x71, 0x9e, 0x64, 0xe7, 0x62, 0x94, 0x5e, 0x5c, 0x99, 0x6e, 0x56, 0x12, 0xa7, 0x7f, 0x17, 0x88, 0xf2, 0x3e, 0x92, 0x28, 0x29, 0x91, 0x1b, 0xdd, 0x00, 0xe3, 0xb7, 0x94, 0xd8, 0x6e, 0x42, 0x32, 0x05, 0xa3, 0x9c, 0xf8, 0x24, 0x8a, 0xb8, 0x60, 0x33, 0xd5, 0x27, 0x0f, 0x0e, 0x61, 0x6b, 0x37, 0x60, 0x3c, 0xb5, 0x8f, 0x5a, 0xc7, 0x64, 0x64, 0xd0, 0x38, 0x52, 0xbd, 0x8d, 0x44, 0x25, 0x87, 0xb7, 0x7f, 0xde, 0xe0, 0x85, 0xe5, 0xd8, 0x4b, 0xd4, 0xbb, 0x9b, 0x10, 0xcf, 0x8e, 0xa4, 0xea, 0xe8, 0x1d, 0xbc, 0x90, 0x7d, 0xe5, 0xfe, 0xf8, 0x13, 0xdd, 0x37, 0xd8, 0xc4, 0x2c, 0xaf, 0x55, 0xa4, 0xda, 0x9c, 0xaa, 0x25, 0xed, 0x73, 0x55, 0xf5, 0x51, 0x2d, 0x5d, 0x1a, 0xac, 0x9f, 0x90, 0xaa, 0x23, 0xd9, 0x80, 0x4f, 0xe1, 0x85, 0x7a, 0x23, 0xdf, 0xe3, 0xaa, 0x7a, 0x04, 0x4b, 0xaf, 0xa3, 0xfa, 0x13, 0x65, 0xe8, 0x1b, 0x20, 0x6e, 0xac, 0x1d, 0xd4, 0xcb, 0xa9, 0x97, 0xb1, 0x87, 0xb3, 0x2f, 0xed, 0x5f, 0x65, 0x8d, 0x7a, 0x84, 0xd2, 0x50, 0x1e, 0xd4, 0x52, 0x92, 0xb6, 0x58, 0xf9, 0x4c, 0x5a, 0x3d, 0x8f, 0x3c, 0xd2, 0x57, 0xcb, 0x0d, 0xcd, 0x20, 0xc3, 0x96, 0x36, 0x50, 0x3b, 0xd2, 0x62, 0xb6, 0x8c, 0x1e, 0x9d, 0xb0, 0xd9, 0xfb, 0x05, 0xc0, 0xb5, 0xed, 0xf0, 0x2f, 0xc2, 0x2e, 0x8e, 0xa7, 0x94, 0x23, 0xe6, 0x76, 0xe1, 0xeb, 0x8d, 0xd9, 0xf9, 0x3a, 0x36, 0x5e, 0xa5, 0xa3, 0xc6, 0x4b, 0x4c, 0x8d, 0x17, 0xeb, 0x87, 0x4c, 0x82, 0xa6, 0xbe, 0x48, 0x8e, 0xd5, 0xd3, 0x4a, 0xa9, 0xef, 0x26, 0x4a, 0x0d, 0x35, 0x53, 0xa9, 0x23, 0xd5, 0xca, 0xce, 0x10, 0x69, 0xc4, 0xf4, 0x90, 0x2c, 0x43, 0x7b, 0x3f, 0xf8, 0xad, 0x8d, 0x64, 0xb3, 0xdd, 0x06, 0x63, 0x62, 0xb7, 0xe1, 0xdc, 0xe3, 0xbe, 0xad, 0x50, 0x8c, 0xfc, 0x8a, 0xd2, 0x46, 0x46, 0x27, 0xbe, 0x15, 0x71, 0x4f, 0x21, 0x3f, 0x2c, 0xff, 0x92, 0x6a, 0xef, 0x1f, 0x77, 0x31, 0xcc, 0x7a, 0x82, 0xe8, 0x1d, 0x2b, 0x13, 0xe3, 0x95, 0x32, 0xa9, 0x07, 0x8c, 0xe9, 0xfb, 0x4e, 0x11, 0x3e, 0xd3, 0x36, 0x92, 0x0f, 0x35, 0xb6, 0x2b, 0x46, 0xf6, 0xae, 0x05, 0x66, 0xf5, 0x5a, 0x20, 0x3b, 0xd2, 0x69, 0xfb, 0x2b, 0x23, 0x16, 0x8f, 0xb8, 0x18, 0xf4, 0x8c, 0x73, 0x36, 0xf9, 0xb6, 0x30, 0xdb, 0x46, 0x3a, 0xda, 0xb5, 0x52, 0x35, 0x8f, 0xc8, 0xb4, 0x87, 0x66, 0x29, 0xd9, 0xf9, 0x0c, 0xf1, 0x41, 0xc2, 0xf3, 0x9c, 0xde, 0xe2, 0xbc, 0x79, 0x2a, 0x51, 0x57, 0xe1, 0xd1, 0x4b, 0x6a, 0xc9, 0xad, 0x92, 0x0f, 0x26, 0x6b, 0xd9, 0x0e, 0xff, 0x9a, 0xa8, 0x65, 0xa2, 0x76, 0x4c, 0xb3, 0x03, 0x84, 0x7b, 0x2c, 0xcd, 0xe0, 0xdf, 0xce, 0x3d, 0x0e, 0x86, 0xdc, 0xfe, 0xd8, 0x7b, 0x87, 0x7a, 0x46, 0xfb, 0x3e, 0x40, 0x98, 0x22, 0xbe, 0xe3, 0x76, 0x7c, 0x2b, 0xbb, 0xcf, 0xed, 0x64, 0xe7, 0x02, 0xc9, 0xf3, 0x80, 0x91, 0x95, 0x76, 0x4a, 0x9b, 0x3d, 0x85, 0x76, 0xc6, 0xd7, 0xf9, 0x5e, 0x80, 0xf5, 0x3e, 0x17, 0x3c, 0x80, 0xbf, 0x3e, 0x16, 0xf2, 0xd0, 0x98, 0x53, 0x92, 0x0d, 0xde, 0xcf, 0x61, 0xc0, 0x7b, 0x52, 0x3e, 0x82, 0x33, 0xe2, 0x71, 0x84, 0x7e, 0xb4, 0x04, 0xbf, 0x4b, 0x4e, 0xc9, 0xef, 0xbb, 0x2a, 0x60, 0xd3, 0x14, 0xd2, 0x9c, 0xde, 0xe6, 0x2a, 0x85, 0xed, 0xb7, 0x77, 0xc2, 0x24, 0xd8, 0x89, 0x7f, 0xef, 0x84, 0x3d, 0xe4, 0xb7, 0xf0, 0x40, 0x2f, 0xdd, 0xf3, 0x91, 0x63, 0x98, 0xc3, 0x2e, 0x4c, 0x95, 0xc7, 0xe5, 0x81, 0x74, 0xaf, 0x91, 0x72, 0x11, 0xc6, 0x15, 0x61, 0x1c, 0xf9, 0x59, 0x2b, 0x63, 0x29, 0x83, 0xf8, 0x56, 0x8d, 0xbf, 0x5a, 0xfc, 0xd5, 0x31, 0x8f, 0x3a, 0x0b, 0x7c, 0x64, 0x47, 0xaa, 0x1d, 0xaa, 0x6e, 0xef, 0xf4, 0x00, 0x34, 0x29, 0x75, 0x79, 0x1c, 0xeb, 0x52, 0x10, 0x85, 0x98, 0x31, 0x4d, 0x77, 0xcf, 0x8f, 0xf5, 0x7a, 0x2a, 0xb5, 0x6b, 0x92, 0xd2, 0x87, 0x1d, 0x89, 0x5f, 0x79, 0x47, 0x69, 0x5a, 0x3b, 0x14, 0x59, 0x3e, 0x98, 0x8d, 0x65, 0x58, 0x8e, 0xf9, 0x9a, 0x2d, 0xef, 0xd3, 0x68, 0x90, 0xc4, 0x5a, 0x08, 0xd5, 0xbd, 0x61, 0xf8, 0x73, 0x6e, 0x4a, 0x2e, 0xc5, 0xde, 0xdf, 0x98, 0xba, 0x91, 0x86, 0xb2, 0xa9, 0x89, 0xe3, 0x88, 0x7f, 0x20, 0xec, 0x16, 0xa7, 0x43, 0x4e, 0x41, 0x33, 0x6c, 0xed, 0x7f, 0xa0, 0x45, 0x65, 0x23, 0x5b, 0x55, 0xe3, 0xd9, 0x8e, 0xd1, 0x71, 0x8c, 0xdf, 0xda, 0x37, 0x97, 0x56, 0x57, 0xe6, 0x0b, 0xa1, 0x16, 0x31, 0x61, 0x08, 0x31, 0xa1, 0x52, 0x47, 0x32, 0x4e, 0xb6, 0xef, 0x19, 0x86, 0x35, 0xe3, 0xab, 0x76, 0x7f, 0xfa, 0x71, 0x02, 0x6b, 0x24, 0x37, 0xed, 0x8a, 0x22, 0x46, 0x51, 0xdc, 0x0b, 0x28, 0x8b, 0x56, 0x24, 0xee, 0x1f, 0x7d, 0x3a, 0x40, 0xe7, 0x28, 0x96, 0x6f, 0xa7, 0x7c, 0x3e, 0xe1, 0xda, 0x2d, 0xc0, 0x0e, 0x7e, 0x2b, 0x89, 0x9d, 0x85, 0xba, 0x92, 0x3b, 0x4e, 0x4f, 0x2b, 0x67, 0xa1, 0xa9, 0x90, 0x6e, 0x7e, 0xf2, 0x39, 0xb2, 0x87, 0x56, 0x77, 0x7b, 0xbb, 0xd0, 0xe1, 0x68, 0x17, 0x56, 0x88, 0xf3, 0xc5, 0x26, 0x28, 0xc6, 0x5f, 0xae, 0xb3, 0x85, 0x71, 0x86, 0x55, 0x84, 0x19, 0x5a, 0x47, 0x2a, 0x1c, 0x71, 0xa1, 0xc5, 0xf2, 0x05, 0xd3, 0x62, 0x27, 0xbf, 0x58, 0xb8, 0x2a, 0x2a, 0x5c, 0xc1, 0x4e, 0x8b, 0x0f, 0x63, 0x4e, 0xd3, 0x28, 0x5a, 0x7c, 0x56, 0xf2, 0x29, 0xa4, 0x53, 0xbe, 0x5f, 0xb1, 0xf8, 0x88, 0x8b, 0xfc, 0xf9, 0xff, 0x89, 0xaa, 0x94, 0x90, 0x37, 0x0b, 0x40, 0x09, 0x7b, 0x3c, 0xaa, 0x4d, 0x84, 0xed, 0xf4, 0xb4, 0xab, 0xdc, 0xea, 0x39, 0xa0, 0x2d, 0x07, 0xa3, 0xd3, 0x2f, 0xb6, 0x81, 0xae, 0xc0, 0x0e, 0xa6, 0x62, 0xf5, 0x82, 0x32, 0xf7, 0x4c, 0xc8, 0x46, 0x19, 0x62, 0x62, 0xbb, 0x06, 0xa5, 0x34, 0x1d, 0x49, 0x17, 0x6d, 0xaa, 0xa8, 0x46, 0xd9, 0x1f, 0x2a, 0x81, 0xdc, 0x22, 0xad, 0xb6, 0x14, 0x47, 0x40, 0x1d, 0xea, 0x7a, 0xf5, 0xd5, 0xf7, 0x3d, 0xf9, 0xe3, 0xaa, 0x7d, 0xa9, 0xfa, 0xe6, 0x35, 0x81, 0xc1, 0x3d, 0xfe, 0xd5, 0xe1, 0xf9, 0x77, 0xfa, 0x3c, 0x01, 0x4f, 0xde, 0xf8, 0xe5, 0x13, 0x3f, 0x59, 0xd8, 0xe7, 0x3d, 0xec, 0xeb, 0xf7, 0xb5, 0xab, 0xf2, 0xe1, 0xf6, 0x26, 0xc8, 0x82, 0xbc, 0x29, 0x4d, 0x60, 0x85, 0xfc, 0x6c, 0x3b, 0x4c, 0xbb, 0x9d, 0x76, 0xa9, 0x3d, 0xf8, 0x7d, 0x33, 0xf8, 0xf0, 0xaf, 0x0d, 0x4a, 0xbc, 0x9f, 0x0b, 0x2d, 0x4a, 0x8b, 0x1f, 0x74, 0x7a, 0x52, 0xf9, 0x22, 0x87, 0x68, 0x0d, 0xc4, 0xeb, 0x3c, 0xb7, 0x7b, 0x84, 0x22, 0xab, 0x1f, 0x67, 0xa0, 0xce, 0x3d, 0x1d, 0x4c, 0x77, 0x7b, 0xb2, 0xec, 0x70, 0x73, 0xa0, 0xeb, 0x80, 0x17, 0xc3, 0x8b, 0xdd, 0xaa, 0x6f, 0x53, 0xfc, 0x9c, 0xe8, 0xf9, 0xbe, 0xb2, 0x03, 0xa5, 0xf8, 0xe6, 0xf1, 0xbd, 0x20, 0xf8, 0xf0, 0x47, 0xb8, 0x2d, 0x08, 0x88, 0xdb, 0x42, 0xa5, 0x0b, 0xf1, 0x4d, 0x40, 0x0c, 0x17, 0x6a, 0x4b, 0x3f, 0x17, 0x26, 0x71, 0x2d, 0xad, 0x84, 0xad, 0x4f, 0xe4, 0xda, 0x75, 0xa0, 0x15, 0x6c, 0xde, 0x4f, 0x91, 0x6f, 0x0c, 0x08, 0x0e, 0xf6, 0x3d, 0x5b, 0xc8, 0x65, 0xcf, 0x02, 0xa1, 0xa0, 0xfc, 0x73, 0xa1, 0x2c, 0xaa, 0x11, 0xab, 0x90, 0xdf, 0xe3, 0x35, 0x3c, 0x81, 0x63, 0xe2, 0xcb, 0x6f, 0x17, 0x2a, 0xdd, 0x41, 0xa7, 0xdf, 0xd2, 0x46, 0x77, 0x0b, 0xa9, 0x56, 0x16, 0x4f, 0x60, 0x31, 0xf2, 0x05, 0x4d, 0xf2, 0x30, 0xdf, 0xd7, 0xbe, 0xdd, 0x03, 0x75, 0x6e, 0xfd, 0x81, 0x76, 0xa1, 0x9a, 0xd5, 0xbf, 0xfa, 0xf6, 0x72, 0x21, 0x74, 0x7b, 0x99, 0x40, 0xbe, 0xdf, 0x70, 0x94, 0x84, 0x3b, 0xb1, 0x76, 0x2a, 0xe1, 0x9e, 0xa8, 0x80, 0xeb, 0x56, 0xd0, 0x32, 0xf7, 0x91, 0x37, 0x13, 0xb9, 0x8b, 0x1e, 0xb7, 0x4b, 0xa8, 0xfa, 0xb6, 0xa7, 0xaf, 0xfc, 0x80, 0x0f, 0xd3, 0x55, 0x31, 0xf8, 0xc7, 0x19, 0xbc, 0x9a, 0xe0, 0x53, 0xf5, 0x60, 0x76, 0x2d, 0xe8, 0xb4, 0x68, 0x0f, 0xef, 0x31, 0x2b, 0xf6, 0x58, 0xae, 0x4b, 0x68, 0xe9, 0x2c, 0x3b, 0x46, 0x32, 0x43, 0x14, 0xdb, 0xa8, 0x4d, 0x93, 0x5b, 0xa2, 0x10, 0x72, 0x05, 0xe1, 0x4e, 0xf6, 0xde, 0x06, 0x77, 0xb3, 0x7c, 0x1f, 0x84, 0x7b, 0xd8, 0xf7, 0x1a, 0xa8, 0x67, 0xb2, 0x4c, 0x98, 0x7d, 0x75, 0x43, 0x33, 0xbe, 0xb7, 0xb1, 0xf7, 0xd5, 0x40, 0xb4, 0x64, 0x39, 0x7b, 0xbf, 0x1f, 0x56, 0xe2, 0xfb, 0x2a, 0x45, 0xfa, 0x21, 0xdc, 0xbc, 0x8f, 0xbd, 0x37, 0xc0, 0x3a, 0xa3, 0x3a, 0x10, 0xc7, 0x95, 0xd9, 0x43, 0x56, 0xe1, 0xbc, 0xe7, 0x00, 0xf2, 0x7c, 0x07, 0xdf, 0x10, 0x75, 0xcd, 0xaa, 0x50, 0xfc, 0x44, 0x3c, 0xcf, 0x05, 0x73, 0x36, 0x78, 0xdc, 0x5e, 0xa4, 0x1e, 0x0f, 0x32, 0xf8, 0x46, 0xd8, 0x80, 0x6b, 0x57, 0x55, 0x20, 0x5e, 0xec, 0xc1, 0x59, 0x5d, 0xe4, 0xbd, 0xb0, 0x45, 0xc0, 0xef, 0x3b, 0x02, 0xf1, 0x52, 0x4c, 0xe9, 0x2e, 0x7d, 0x6f, 0xbf, 0xa8, 0x4f, 0xa6, 0xac, 0xdc, 0xe0, 0xc9, 0xf7, 0x62, 0xbd, 0x37, 0xb1, 0x94, 0xcb, 0xe1, 0x51, 0x9c, 0x9b, 0x8f, 0xb3, 0xf7, 0x1f, 0xc0, 0x93, 0x98, 0xe3, 0xd3, 0xec, 0x1d, 0xa9, 0x00, 0xb6, 0x47, 0xd2, 0xae, 0x80, 0xe7, 0xd9, 0x77, 0x0b, 0x6c, 0x77, 0x95, 0xc3, 0xce, 0x87, 0xf6, 0x5b, 0xca, 0x94, 0x39, 0xf6, 0xa4, 0x93, 0x9d, 0xaa, 0x22, 0xe7, 0xf9, 0x20, 0x62, 0x9b, 0x54, 0xf2, 0xb9, 0xb0, 0x80, 0xc7, 0xc8, 0xdb, 0x1c, 0x1a, 0xfb, 0x35, 0xce, 0x32, 0x9c, 0x0b, 0x77, 0xa6, 0x68, 0x97, 0xaf, 0x1c, 0xa9, 0x5f, 0x1e, 0x52, 0xf1, 0xed, 0xe2, 0x4c, 0xee, 0x07, 0x56, 0x45, 0xd4, 0xbb, 0xaf, 0xde, 0x10, 0xf3, 0x30, 0xef, 0x06, 0xa4, 0xab, 0xe9, 0x64, 0x67, 0x4e, 0x10, 0xb1, 0xe0, 0x53, 0x24, 0xfd, 0x52, 0x61, 0x25, 0xce, 0x22, 0x33, 0xce, 0x1d, 0xe4, 0x92, 0x85, 0x16, 0x7c, 0xde, 0x88, 0x61, 0x61, 0x84, 0xac, 0xa3, 0x70, 0xad, 0x47, 0xde, 0x85, 0x61, 0xb7, 0xd6, 0x3b, 0x12, 0xfb, 0xb8, 0x6c, 0x76, 0x6e, 0xc9, 0x47, 0xea, 0xc3, 0xf4, 0x4a, 0x8c, 0xb7, 0x7f, 0x1f, 0xe9, 0x50, 0x7e, 0x29, 0xbd, 0xaf, 0x28, 0xc8, 0xd3, 0x01, 0xca, 0xf2, 0x25, 0x58, 0x8f, 0x7c, 0x9f, 0x0f, 0x71, 0x6c, 0x26, 0x4c, 0x8a, 0xa9, 0xf7, 0xc6, 0x23, 0x5a, 0xc2, 0x6b, 0xc8, 0x8f, 0x15, 0x0e, 0x74, 0x45, 0x54, 0xcb, 0x11, 0xc1, 0xb1, 0x2c, 0xba, 0x07, 0x6d, 0xf6, 0xfd, 0x73, 0xa0, 0x5d, 0xb0, 0xa4, 0x61, 0x75, 0x01, 0x62, 0xf5, 0xe7, 0x42, 0x27, 0x52, 0xee, 0x93, 0x84, 0xd9, 0x34, 0xc2, 0x88, 0xd7, 0x1e, 0x81, 0x6e, 0x74, 0xfa, 0x2c, 0x65, 0x8f, 0xbc, 0x89, 0xb8, 0x6d, 0x53, 0xb0, 0x29, 0x84, 0x58, 0x17, 0x66, 0x92, 0x4b, 0x49, 0x44, 0x27, 0xfa, 0x7f, 0x79, 0x12, 0xb2, 0x25, 0x7d, 0x10, 0xcb, 0x8e, 0x68, 0x7e, 0xf9, 0x39, 0xf8, 0x0f, 0x7b, 0x9a, 0x75, 0x16, 0x7f, 0xfe, 0x74, 0xc8, 0xae, 0x41, 0xba, 0xb3, 0xa3, 0x19, 0xb2, 0xbf, 0x87, 0x32, 0xe1, 0x3e, 0x8f, 0xdb, 0x87, 0x39, 0x4f, 0x66, 0xa5, 0x55, 0x09, 0x16, 0x7c, 0x27, 0x9d, 0xff, 0x02, 0x25, 0xef, 0x49, 0x4a, 0xde, 0x47, 0x24, 0x49, 0x6c, 0x45, 0x69, 0xcd, 0x0e, 0x36, 0x6c, 0xbf, 0x2a, 0x52, 0x4d, 0xd4, 0x25, 0xe2, 0xc3, 0xbf, 0x42, 0xb8, 0x0c, 0x6b, 0xd8, 0x84, 0xa3, 0xd1, 0x90, 0x18, 0x0d, 0xd1, 0x25, 0x48, 0x16, 0x97, 0xb0, 0xc0, 0xea, 0x12, 0x9a, 0x6c, 0xae, 0x64, 0xf8, 0xa3, 0x41, 0x4f, 0x44, 0xb5, 0x4a, 0x70, 0xb5, 0x0b, 0x4d, 0x82, 0x84, 0x7f, 0x1b, 0x84, 0x05, 0x92, 0x9e, 0xf5, 0x44, 0x9e, 0x84, 0xe1, 0x96, 0x79, 0x4a, 0x59, 0xdb, 0x95, 0x91, 0xe4, 0x5f, 0xbb, 0xd8, 0xfd, 0x09, 0x18, 0x29, 0xc6, 0x96, 0xe4, 0x85, 0x0d, 0xc1, 0xf2, 0x08, 0x8c, 0x64, 0x3b, 0xfc, 0xf6, 0x0c, 0x49, 0x47, 0x7f, 0xf1, 0x3b, 0x5a, 0xce, 0x29, 0x82, 0x71, 0x94, 0x94, 0x7f, 0x49, 0xdf, 0x25, 0x7a, 0x2c, 0xd1, 0x5b, 0xd8, 0x1e, 0x4d, 0x5e, 0x3b, 0xef, 0x31, 0x5c, 0xad, 0x6c, 0xfd, 0x15, 0xe1, 0xc9, 0x96, 0x6b, 0xb4, 0xc8, 0x31, 0x6a, 0xa6, 0x58, 0xed, 0xa0, 0xb7, 0x31, 0xab, 0xf7, 0x08, 0x8d, 0xb2, 0xf0, 0xf0, 0x83, 0x1d, 0x82, 0xa4, 0x0f, 0x79, 0x44, 0xaf, 0xc5, 0x18, 0x3e, 0xe2, 0xf3, 0x89, 0x0a, 0x4e, 0xca, 0xbb, 0x24, 0x15, 0x7e, 0xb5, 0x27, 0x69, 0xdf, 0x31, 0x2c, 0xa5, 0x48, 0x79, 0xef, 0x64, 0x71, 0x49, 0x4a, 0x68, 0xf1, 0x2b, 0x78, 0x1c, 0xa0, 0x70, 0xe6, 0xb5, 0x0b, 0xd7, 0x46, 0xc1, 0xcf, 0xe4, 0x61, 0xf2, 0x0d, 0x9d, 0x23, 0xd6, 0x16, 0x34, 0xc1, 0x13, 0xb4, 0x5b, 0x64, 0x9d, 0xb0, 0x71, 0x1d, 0x79, 0x12, 0x45, 0xce, 0xd7, 0x3e, 0xf7, 0x0b, 0x3b, 0x78, 0x4f, 0xc2, 0xce, 0x3c, 0xcf, 0xc3, 0x6f, 0xbb, 0xc6, 0x07, 0xa2, 0xbb, 0x64, 0xfc, 0x41, 0xd5, 0xa6, 0x7f, 0x3f, 0x7c, 0xe3, 0xdd, 0xb0, 0x53, 0xac, 0x0d, 0x35, 0xc1, 0x93, 0xec, 0xb4, 0xac, 0x16, 0x47, 0xe7, 0x49, 0x1c, 0x11, 0xb9, 0x4d, 0x1b, 0x7a, 0x20, 0x98, 0x15, 0x7e, 0x9d, 0x4b, 0xa6, 0xcc, 0xf3, 0xb4, 0x0b, 0xec, 0x28, 0x6d, 0x3b, 0xad, 0xdc, 0xdf, 0x5b, 0x41, 0x4a, 0x8f, 0x39, 0x58, 0x72, 0xcf, 0xde, 0x40, 0x77, 0xec, 0xda, 0x0d, 0xbe, 0x7c, 0xe1, 0xb0, 0x27, 0xb0, 0x17, 0xe5, 0xe0, 0xac, 0x34, 0x3d, 0xd6, 0x62, 0x3b, 0xf7, 0x75, 0xba, 0x7e, 0xee, 0x59, 0xc8, 0x74, 0xe9, 0xf9, 0x69, 0xfd, 0xbd, 0xd5, 0xd3, 0xe7, 0x81, 0x1e, 0x39, 0xc8, 0x12, 0xda, 0x29, 0x66, 0x7b, 0xc2, 0x7f, 0x92, 0x0c, 0xf8, 0xa5, 0x0a, 0x1b, 0xd9, 0xd7, 0x97, 0x0a, 0x9c, 0xb1, 0xba, 0xd7, 0xb1, 0x04, 0x34, 0x2b, 0x61, 0x79, 0xe6, 0x91, 0xf5, 0x92, 0x59, 0x2c, 0x29, 0xf9, 0x14, 0x32, 0xad, 0x7e, 0x67, 0x08, 0x7b, 0xe7, 0x9e, 0xa0, 0xa7, 0x55, 0x1f, 0x11, 0x1d, 0xd7, 0x38, 0xe6, 0x07, 0x1f, 0x09, 0x7f, 0xec, 0x3d, 0x03, 0x1a, 0x4b, 0xa5, 0x35, 0xc9, 0x7b, 0xc8, 0xd9, 0xa1, 0x25, 0x88, 0xbf, 0x59, 0x54, 0x1f, 0x4b, 0x65, 0x5a, 0x8d, 0x0a, 0x14, 0x8f, 0x8d, 0x13, 0x5c, 0x7a, 0x6c, 0x91, 0x91, 0x8f, 0x38, 0xb5, 0xc4, 0xea, 0x41, 0x0c, 0xc9, 0x0c, 0x5b, 0x98, 0xc7, 0xe7, 0x91, 0x36, 0x53, 0x00, 0x57, 0x79, 0xd7, 0x84, 0xc0, 0x12, 0x50, 0x78, 0x67, 0xea, 0xa3, 0xec, 0x3d, 0x60, 0x91, 0x54, 0xec, 0xfe, 0xc4, 0x70, 0xdb, 0x24, 0xe3, 0xad, 0x5b, 0x48, 0x73, 0xdf, 0x15, 0xa1, 0x9d, 0xd0, 0xa2, 0x88, 0xfe, 0x1b, 0x18, 0xbb, 0x45, 0xf0, 0xdd, 0xba, 0x45, 0x65, 0xbd, 0xd7, 0x76, 0x6f, 0xc2, 0xfe, 0xcc, 0xed, 0x73, 0xb0, 0x9c, 0xda, 0xe0, 0xb3, 0x96, 0x2f, 0xc2, 0xd9, 0x8c, 0x1f, 0xfc, 0x73, 0xf4, 0x96, 0x94, 0x46, 0xc9, 0x2d, 0x1e, 0xcb, 0x17, 0x18, 0x77, 0x9a, 0xc7, 0xed, 0xd6, 0x8f, 0x89, 0x3b, 0x8d, 0xf5, 0x0f, 0x30, 0x5e, 0x17, 0x34, 0x27, 0x29, 0x0f, 0x7c, 0x1e, 0x37, 0xd8, 0xe1, 0x1a, 0x76, 0xff, 0xe0, 0x48, 0x54, 0x08, 0x78, 0xc8, 0xdf, 0x9c, 0x06, 0xac, 0xa9, 0x13, 0x81, 0x80, 0x8d, 0xa0, 0x77, 0x8b, 0x1e, 0xe2, 0xb9, 0x32, 0xc4, 0xd4, 0x58, 0x30, 0xcd, 0x19, 0xfb, 0xb4, 0x12, 0x1c, 0x21, 0x8f, 0xf8, 0x6b, 0x76, 0xd3, 0x59, 0xb6, 0xef, 0x12, 0x43, 0x38, 0xee, 0xc4, 0xe7, 0x9a, 0xf3, 0x3c, 0x25, 0xa7, 0x84, 0x5d, 0x25, 0xe7, 0x36, 0x03, 0x72, 0xaf, 0xb9, 0x62, 0x09, 0xca, 0x6f, 0xcd, 0x59, 0x37, 0x84, 0x3c, 0x06, 0x01, 0xc4, 0x88, 0x09, 0xff, 0x5a, 0xc2, 0x93, 0x82, 0x25, 0x61, 0x13, 0xc1, 0x66, 0x17, 0x83, 0x20, 0x21, 0xa5, 0x08, 0xeb, 0xe8, 0x8b, 0xf6, 0xf7, 0xfa, 0x9b, 0xe0, 0xe9, 0xf0, 0x01, 0xa7, 0x5e, 0x7b, 0x1f, 0xe2, 0x7d, 0x4e, 0xa1, 0x07, 0x25, 0x37, 0xf3, 0xdf, 0xbf, 0xe1, 0x32, 0x78, 0x4f, 0xd2, 0x0e, 0xe8, 0x66, 0xe0, 0x2b, 0x91, 0xb4, 0xc7, 0xa2, 0x75, 0x2e, 0x61, 0x73, 0xe2, 0xd1, 0x8a, 0xd3, 0x74, 0xd7, 0x8f, 0x6b, 0xbe, 0xdc, 0x5b, 0x9d, 0x0c, 0xdf, 0x28, 0x7a, 0x7c, 0xc6, 0xd9, 0x25, 0x30, 0x89, 0xad, 0x6e, 0x0e, 0x21, 0x07, 0x29, 0x68, 0x43, 0xd0, 0x01, 0xf4, 0x5c, 0x20, 0x86, 0x70, 0x2e, 0x04, 0x2c, 0x76, 0xd8, 0xcc, 0xa1, 0xe5, 0x27, 0x1c, 0xd8, 0x5a, 0xf5, 0x2b, 0xae, 0x19, 0x96, 0xcf, 0xd8, 0x39, 0xe6, 0x1a, 0x27, 0xa3, 0xa4, 0xbb, 0x6f, 0x8c, 0x5a, 0x53, 0x3d, 0x69, 0x47, 0xae, 0x92, 0x68, 0xa4, 0x18, 0xc2, 0x99, 0x59, 0xac, 0x78, 0x7d, 0x14, 0x53, 0x36, 0x7e, 0xd8, 0x7c, 0x57, 0x41, 0xb1, 0xcb, 0x07, 0x1e, 0xf6, 0x9e, 0x0b, 0x7e, 0xb6, 0x1a, 0x06, 0xd8, 0x97, 0x1e, 0x2a, 0x69, 0xad, 0xdc, 0x7d, 0x0b, 0xf2, 0xc8, 0x20, 0x56, 0x92, 0x9e, 0x9c, 0x7c, 0xc0, 0xe1, 0x51, 0x4e, 0x6b, 0x00, 0x1e, 0x17, 0x3d, 0xc8, 0xaf, 0x51, 0xe8, 0x3e, 0x3a, 0x03, 0x87, 0xfb, 0x2a, 0x4e, 0x6b, 0xa6, 0xd0, 0x29, 0x40, 0xb2, 0x6d, 0x06, 0xeb, 0x4c, 0xd0, 0x28, 0x14, 0x81, 0xb7, 0xf2, 0xc1, 0xea, 0xde, 0xa0, 0x43, 0x33, 0x25, 0x52, 0xc7, 0x6e, 0x12, 0x30, 0xb8, 0xbb, 0x37, 0xb2, 0xfd, 0xe3, 0x4c, 0x97, 0xe1, 0x76, 0x07, 0x4c, 0x9a, 0xdf, 0x5b, 0xb5, 0xfb, 0xab, 0xbb, 0xab, 0x7b, 0x95, 0x3c, 0x10, 0x43, 0xbd, 0x5f, 0xe8, 0xc0, 0x68, 0xd7, 0x4c, 0x66, 0x38, 0x97, 0xcd, 0x70, 0x8e, 0xcd, 0x97, 0xdd, 0x79, 0x0a, 0x8c, 0x91, 0xa0, 0xd9, 0x7e, 0xe6, 0x67, 0xd5, 0xbd, 0xe2, 0x3c, 0x56, 0xa3, 0x37, 0x2d, 0xfe, 0x94, 0x2f, 0x58, 0xd6, 0x4b, 0x5a, 0x94, 0x77, 0xee, 0x61, 0x6f, 0x19, 0xf8, 0xe6, 0xe3, 0xd2, 0x8d, 0xaa, 0x73, 0x2e, 0x8e, 0x86, 0x43, 0x4f, 0xbb, 0x4a, 0xaa, 0x1c, 0xcb, 0x35, 0xd6, 0x0c, 0xaa, 0xad, 0x4a, 0xad, 0xd4, 0xb6, 0x88, 0xed, 0x1d, 0x83, 0xea, 0xce, 0xa0, 0x27, 0x9c, 0xc3, 0xca, 0xbc, 0x25, 0x51, 0x26, 0xc1, 0x26, 0xa0, 0xd8, 0x2e, 0x36, 0x4a, 0x6c, 0xaa, 0xdc, 0x4b, 0xc7, 0x89, 0xb0, 0x12, 0x79, 0x2b, 0x65, 0x9c, 0xce, 0x1f, 0x23, 0x9d, 0x17, 0xea, 0x03, 0x1c, 0x5f, 0x29, 0x76, 0x13, 0x87, 0xfa, 0x2a, 0xe6, 0xf0, 0xd8, 0x27, 0x68, 0xd7, 0x00, 0x58, 0x2e, 0xd0, 0x5e, 0xd7, 0x87, 0x51, 0xc9, 0x8e, 0x74, 0xd6, 0x7e, 0x70, 0x7f, 0xc5, 0xb9, 0x1e, 0xc1, 0x92, 0x61, 0x45, 0x8e, 0x7a, 0x38, 0x1f, 0xfb, 0x38, 0x8b, 0x79, 0x03, 0xc3, 0xb6, 0xba, 0x34, 0x24, 0xfb, 0x51, 0x1b, 0x2c, 0xd7, 0x74, 0xe4, 0x28, 0xb9, 0x54, 0x39, 0x3c, 0xf4, 0x86, 0x74, 0x7f, 0x6f, 0xec, 0x26, 0x3a, 0x11, 0x8f, 0xa9, 0x3a, 0x94, 0x7e, 0x97, 0x73, 0x14, 0x8a, 0x74, 0x9f, 0x45, 0xdb, 0x31, 0xa2, 0x84, 0x6d, 0x43, 0xee, 0xbb, 0xc9, 0x02, 0x56, 0x83, 0xf2, 0xfd, 0x28, 0xa6, 0x74, 0x4b, 0x41, 0x2c, 0xef, 0x1a, 0xa5, 0x65, 0x54, 0xa6, 0x23, 0xb8, 0x0d, 0x34, 0xf7, 0xa4, 0x6c, 0x51, 0x5f, 0x83, 0xa5, 0x8f, 0x43, 0xa9, 0xf5, 0x38, 0xeb, 0x41, 0x03, 0x52, 0x38, 0x5d, 0xee, 0x04, 0xed, 0x8f, 0xa9, 0xee, 0x16, 0x4d, 0x32, 0xaf, 0x8d, 0x98, 0xd7, 0x4e, 0xd6, 0x6a, 0x0d, 0x4a, 0x9b, 0x87, 0xab, 0x7b, 0x63, 0xaa, 0x64, 0x5c, 0x36, 0x0b, 0x77, 0x81, 0x1b, 0x63, 0xde, 0x62, 0xef, 0x6a, 0x7c, 0x63, 0xb6, 0xad, 0x09, 0x83, 0x02, 0x2b, 0x04, 0x9c, 0x35, 0xbc, 0x9f, 0xa5, 0x3d, 0x28, 0xd3, 0x70, 0x5b, 0xf0, 0xd4, 0xc3, 0x36, 0xca, 0x81, 0x4e, 0xb4, 0x45, 0x5f, 0xb0, 0x8f, 0x7b, 0x6a, 0xdf, 0x17, 0xb7, 0x18, 0xa2, 0x99, 0x87, 0xe3, 0x1c, 0xcb, 0x08, 0xc3, 0x24, 0xe2, 0x43, 0x84, 0x76, 0x80, 0x27, 0x98, 0x67, 0x95, 0xdd, 0x7f, 0x5c, 0xc9, 0xee, 0x3d, 0xd2, 0xbd, 0xee, 0xb1, 0x38, 0x67, 0x0c, 0x34, 0x6b, 0xa6, 0x24, 0xb0, 0x6e, 0xf0, 0x63, 0xd2, 0x27, 0xc8, 0xb7, 0xc3, 0xd3, 0x1b, 0x71, 0x0e, 0x23, 0x4d, 0x67, 0x39, 0xf6, 0x75, 0xd3, 0x5c, 0x65, 0x3b, 0xa7, 0x8c, 0x1e, 0x32, 0xcb, 0x2b, 0xba, 0xe4, 0x0c, 0x52, 0xb0, 0x34, 0x81, 0xa3, 0xb4, 0x9f, 0x7e, 0x35, 0x3c, 0xa5, 0xf2, 0xd8, 0x2e, 0xaf, 0x9f, 0xdd, 0x77, 0xcc, 0x4a, 0xce, 0x55, 0x9f, 0x22, 0xf3, 0x91, 0x45, 0xac, 0xef, 0x57, 0x2d, 0x03, 0xa0, 0x3b, 0x0d, 0xbf, 0x3f, 0x07, 0xc3, 0xb5, 0x1d, 0xc2, 0x74, 0x9d, 0x0c, 0x43, 0x9f, 0x18, 0xf1, 0x67, 0x81, 0xa1, 0xaf, 0x1e, 0xe5, 0xca, 0xba, 0x0b, 0xc3, 0x4b, 0x93, 0x3a, 0xd2, 0xd6, 0x3b, 0x4b, 0x43, 0x45, 0x22, 0x86, 0xe4, 0xa6, 0xdd, 0x6e, 0xb8, 0x55, 0xb4, 0xcf, 0xfa, 0x66, 0xf2, 0x76, 0xc3, 0x35, 0xfa, 0xaf, 0xa1, 0x9a, 0x3d, 0x21, 0x3d, 0xd3, 0xff, 0xc4, 0x77, 0x66, 0xd9, 0xc2, 0xa5, 0x1d, 0x65, 0x8b, 0x5b, 0x1a, 0x6b, 0x7e, 0xb8, 0xb4, 0xa3, 0xb1, 0xf5, 0x6f, 0xce, 0x4f, 0x9f, 0x96, 0x57, 0xea, 0x26, 0xc6, 0xa9, 0x67, 0x95, 0xe7, 0x4b, 0xca, 0xf3, 0x6d, 0xe5, 0x79, 0x06, 0x88, 0x59, 0x1d, 0x3a, 0xad, 0xe2, 0xdf, 0xa7, 0xbf, 0xa1, 0x7c, 0xdf, 0xaa, 0x7c, 0xd7, 0x28, 0xdf, 0x51, 0xe5, 0xfb, 0xef, 0xf1, 0xaf, 0x1a, 0x86, 0xce, 0x94, 0xf3, 0xef, 0x33, 0x0b, 0x98, 0xfd, 0x8d, 0xa1, 0x33, 0xff, 0xc0, 0xc3, 0xcf, 0x5e, 0xcf, 0xb4, 0xd5, 0x53, 0xe5, 0xfe, 0x23, 0x7f, 0x9e, 0xcd, 0xc3, 0xdf, 0x37, 0xf1, 0x57, 0x86, 0xbf, 0x3a, 0xfc, 0x35, 0xa5, 0x75, 0x21, 0x5d, 0x79, 0x35, 0xd0, 0xd5, 0x11, 0xb2, 0x4c, 0x06, 0xc0, 0x94, 0xb0, 0x49, 0xbf, 0xda, 0x9e, 0x6a, 0x4a, 0x6e, 0xac, 0x71, 0x69, 0xfb, 0xb2, 0xd8, 0xa2, 0xc6, 0xaf, 0x39, 0x6e, 0xe9, 0x3a, 0xed, 0xa3, 0xd4, 0xdf, 0xc1, 0x05, 0x25, 0xed, 0xcb, 0x5a, 0x1a, 0xda, 0x6e, 0xe9, 0x10, 0x63, 0x8d, 0x0b, 0x1b, 0xc4, 0xfa, 0xc5, 0x1d, 0xad, 0x0b, 0xa3, 0x62, 0x7d, 0x4b, 0xfb, 0xa2, 0x25, 0xe2, 0xb4, 0x96, 0x65, 0x7a, 0x8c, 0x6e, 0xeb, 0x10, 0x97, 0x2d, 0x6d, 0x6c, 0xe0, 0x81, 0x4b, 0xc5, 0xf0, 0x42, 0xac, 0x47, 0xc3, 0xd4, 0xcb, 0x27, 0x6c, 0x5c, 0xd1, 0xd1, 0xd8, 0xb6, 0x94, 0x34, 0xe1, 0xbf, 0x76, 0x16, 0x62, 0x5b, 0xfb, 0x25, 0x79, 0x60, 0x06, 0xa3, 0x33, 0xb9, 0x0a, 0x6c, 0xe3, 0xd7, 0x04, 0x65, 0x00, 0x53, 0xe1, 0xae, 0x58, 0x7b, 0x5b, 0x44, 0x09, 0x63, 0x41, 0xcd, 0xcb, 0x5a, 0xa3, 0x53, 0xe1, 0x3b, 0xed, 0xcb, 0xc4, 0x79, 0xf3, 0x6b, 0x6a, 0x31, 0xc9, 0xcc, 0xc5, 0x6d, 0x4b, 0x1b, 0x63, 0x1d, 0x62, 0x63, 0x73, 0xe3, 0xa2, 0x0e, 0xac, 0xf4, 0xf2, 0xf6, 0x96, 0x65, 0xad, 0x8d, 0x70, 0x47, 0x93, 0x53, 0x6c, 0x6f, 0xa2, 0xff, 0x9c, 0xe2, 0x0f, 0x9a, 0x1a, 0x63, 0x8d, 0xe2, 0xe2, 0xa5, 0xe2, 0xc2, 0x96, 0x16, 0xb1, 0xa3, 0xa9, 0x51, 0x5c, 0xb4, 0x70, 0x11, 0xfe, 0x8d, 0xb4, 0xb7, 0x35, 0xde, 0x2e, 0xfa, 0xe6, 0x97, 0x4f, 0x9d, 0x3a, 0x15, 0xe6, 0xb7, 0xc5, 0x1a, 0x5b, 0x1a, 0x17, 0x26, 0x9b, 0x5d, 0xc4, 0x2b, 0xe7, 0x2d, 0x2b, 0xab, 0xb9, 0xcc, 0xb5, 0x83, 0xf9, 0xca, 0x3d, 0x82, 0xc6, 0x58, 0xac, 0x3d, 0x06, 0x55, 0xed, 0xe2, 0xe2, 0xf6, 0x68, 0x7b, 0xac, 0x23, 0xd5, 0xcb, 0xed, 0xd1, 0xc6, 0x36, 0x91, 0x0f, 0x9b, 0x38, 0x6d, 0x69, 0x2a, 0x7c, 0x61, 0x43, 0x83, 0xd8, 0xb0, 0x78, 0xe9, 0x12, 0x71, 0xe1, 0x52, 0x11, 0xc7, 0xb9, 0xb1, 0xad, 0x03, 0x73, 0xf3, 0x53, 0x00, 0x56, 0x8f, 0xfa, 0x60, 0xf9, 0xc2, 0x96, 0xc5, 0x0d, 0x0b, 0x3b, 0xa8, 0xbf, 0x79, 0xdb, 0xf1, 0x63, 0x61, 0xaa, 0xbb, 0x94, 0x40, 0xac, 0x3e, 0x8e, 0xcc, 0xb2, 0x56, 0x31, 0xbd, 0x2b, 0x61, 0xde, 0xe2, 0xa5, 0x4b, 0x17, 0x63, 0xec, 0xd2, 0xf6, 0xd6, 0x46, 0xb1, 0xb5, 0x1d, 0xdb, 0x9c, 0xde, 0x99, 0x4b, 0x13, 0x9d, 0x49, 0x1f, 0x1d, 0x3f, 0x8c, 0x36, 0x8e, 0x4e, 0x1c, 0xc2, 0xce, 0x77, 0xdd, 0x15, 0x5b, 0xdc, 0xd1, 0x28, 0x96, 0x52, 0xab, 0x30, 0xb0, 0x41, 0x5c, 0xb8, 0x68, 0x51, 0x23, 0xcf, 0x33, 0x05, 0xe8, 0x70, 0x38, 0xc4, 0xda, 0x26, 0xac, 0x6e, 0xeb, 0xc2, 0x1f, 0x8a, 0xf5, 0x8d, 0xe2, 0x42, 0xac, 0x77, 0xdb, 0x4c, 0x6f, 0x59, 0x0d, 0x6b, 0x58, 0xae, 0x88, 0xf1, 0x7a, 0x6f, 0xdb, 0x0f, 0xc5, 0x85, 0x1d, 0x88, 0xfb, 0xd1, 0x0e, 0xb1, 0xa3, 0x5d, 0x0c, 0x2f, 0x5e, 0x21, 0x2e, 0xee, 0x10, 0x17, 0xb7, 0x61, 0xef, 0x63, 0xc2, 0x45, 0xd8, 0xcd, 0x2c, 0x35, 0xbb, 0xf9, 0x10, 0x63, 0x43, 0xd2, 0x1e, 0x5b, 0x1c, 0x59, 0xdc, 0xb6, 0xb0, 0x45, 0x4f, 0x57, 0x6c, 0xc4, 0xa5, 0x6c, 0xe2, 0x60, 0x02, 0xd6, 0x1d, 0x4e, 0x11, 0x67, 0x0b, 0x66, 0x80, 0x29, 0xdb, 0xdb, 0x10, 0x83, 0xf0, 0x65, 0x19, 0x0e, 0xd7, 0xa2, 0xf6, 0xe5, 0x8d, 0xb1, 0x85, 0xf5, 0x2d, 0x8d, 0xb9, 0x7a, 0x7d, 0x35, 0x1b, 0x3b, 0x71, 0x29, 0xbf, 0xa6, 0xf3, 0x83, 0xa6, 0x85, 0xac, 0xdc, 0x06, 0x94, 0x65, 0x12, 0xf5, 0xe6, 0x28, 0xdd, 0xf1, 0x03, 0x9a, 0x48, 0xa9, 0x40, 0xac, 0x0d, 0xbe, 0x53, 0x7f, 0x8b, 0xed, 0xcb, 0x3a, 0x96, 0x2e, 0x6e, 0x68, 0x54, 0x10, 0x48, 0x5c, 0xba, 0x08, 0xc7, 0x50, 0x4f, 0x05, 0xff, 0x60, 0x31, 0xa2, 0x0d, 0x36, 0x34, 0xd6, 0xd8, 0x8a, 0x25, 0x36, 0xe4, 0x62, 0x57, 0x45, 0x17, 0x2e, 0x8e, 0x51, 0xaf, 0xb0, 0xa1, 0x5c, 0xda, 0x11, 0x5b, 0xb6, 0xa8, 0x63, 0x19, 0x76, 0x37, 0x83, 0x6c, 0x21, 0x2c, 0xa6, 0xc2, 0x69, 0xe0, 0x5a, 0xda, 0x97, 0x2e, 0xcd, 0xd5, 0x57, 0x74, 0xdc, 0xb2, 0x14, 0x73, 0x58, 0xca, 0x2a, 0xd5, 0xba, 0x70, 0x09, 0x75, 0x5a, 0xfd, 0xc2, 0x45, 0x4b, 0x96, 0xe1, 0xd0, 0x34, 0x86, 0x69, 0xa0, 0xa2, 0xb1, 0xf6, 0x45, 0x8d, 0x8d, 0x0d, 0x98, 0xe7, 0x55, 0x1a, 0x93, 0x0b, 0x77, 0xb2, 0xba, 0xe9, 0xa7, 0x2d, 0xd5, 0x63, 0xc5, 0x7f, 0xc0, 0x06, 0x0b, 0x53, 0x76, 0x30, 0xcc, 0x4f, 0xdc, 0x49, 0x0a, 0x35, 0x22, 0x4e, 0x75, 0x2a, 0x1f, 0x25, 0x84, 0x28, 0xac, 0x9a, 0xc9, 0x10, 0xec, 0xc2, 0xc5, 0x6d, 0xcb, 0x1a, 0xc7, 0x7e, 0x8f, 0xbe, 0x2e, 0xe3, 0xe5, 0x83, 0xd7, 0xc8, 0x5a, 0x42, 0xf3, 0xd2, 0xc5, 0x4b, 0xe3, 0x68, 0x90, 0xe8, 0xaa, 0xd8, 0xc2, 0xb6, 0x48, 0xe3, 0x54, 0xbd, 0x9e, 0x3d, 0xd9, 0x8c, 0x99, 0x89, 0x3f, 0x27, 0xf6, 0xc8, 0xc2, 0x58, 0x07, 0xfb, 0x76, 0xe2, 0x90, 0x21, 0x3d, 0x29, 0x4a, 0xa2, 0x18, 0x9f, 0x32, 0x0c, 0xb9, 0x46, 0xa1, 0x1f, 0xc7, 0xbc, 0x2b, 0x44, 0x26, 0xee, 0xab, 0x24, 0xee, 0xae, 0x54, 0xcd, 0x1f, 0x61, 0xd6, 0x6d, 0xd2, 0x77, 0x92, 0x67, 0x78, 0x64, 0x43, 0xe7, 0x82, 0x63, 0x71, 0x94, 0x39, 0x53, 0xfa, 0xf6, 0x65, 0xe9, 0xfa, 0xf6, 0xd6, 0x26, 0xd0, 0x47, 0x9b, 0x47, 0xef, 0x10, 0xdb, 0x38, 0x97, 0xb4, 0x8e, 0x78, 0xe9, 0x3f, 0x0c, 0xa6, 0xeb, 0xc0, 0xdf, 0xe2, 0x01, 0x47, 0x24, 0x9a, 0x5e, 0x02, 0x86, 0xf8, 0xbe, 0xd1, 0x09, 0x13, 0xc1, 0x9b, 0xd2, 0xc9, 0xc7, 0xb0, 0xdc, 0xb1, 0x3a, 0xf9, 0x18, 0x56, 0x1f, 0xb1, 0xd3, 0x8e, 0xc7, 0x49, 0x6d, 0x54, 0x18, 0x7d, 0xce, 0x1d, 0x01, 0xc3, 0x0e, 0x94, 0x75, 0xea, 0x53, 0x5a, 0x8c, 0xe4, 0x11, 0x34, 0xc5, 0xb9, 0x2a, 0xbb, 0x75, 0x43, 0x23, 0x56, 0x3a, 0x8d, 0x33, 0xbc, 0xc3, 0xac, 0x90, 0x90, 0xc4, 0xae, 0xb7, 0xf8, 0x48, 0xd3, 0x95, 0xc5, 0x35, 0x60, 0x4c, 0x10, 0x25, 0xc1, 0xda, 0x5b, 0x02, 0xb0, 0xc0, 0xf7, 0x2c, 0xd4, 0x95, 0x9c, 0x81, 0xba, 0x5b, 0x2a, 0xa0, 0xd6, 0x52, 0x99, 0xb2, 0x5a, 0x46, 0x27, 0xd5, 0x07, 0xf7, 0x4f, 0xbd, 0xaf, 0x47, 0xc7, 0xb4, 0x3d, 0xf5, 0x74, 0xff, 0xb4, 0xe4, 0x2c, 0x98, 0xc4, 0xf1, 0x1f, 0xf7, 0x60, 0x5f, 0xa9, 0xaa, 0x7b, 0x6d, 0x06, 0x2d, 0xd9, 0xae, 0x8c, 0x3b, 0xae, 0xf9, 0xf6, 0x5a, 0xeb, 0x35, 0xda, 0x6e, 0x59, 0x96, 0x8d, 0x2b, 0x6a, 0x8f, 0xae, 0x17, 0x5b, 0x65, 0x03, 0x3b, 0xb3, 0x5e, 0xb2, 0x4a, 0xb0, 0x8c, 0xfb, 0xe8, 0x99, 0x19, 0xde, 0x91, 0x11, 0xac, 0x33, 0xed, 0x51, 0x4e, 0xfc, 0xe8, 0x05, 0x51, 0x88, 0xff, 0x18, 0x3c, 0xf1, 0x54, 0xab, 0xf6, 0x3a, 0x3d, 0xef, 0x50, 0x1f, 0x6e, 0x89, 0x8e, 0x0c, 0x3c, 0x0b, 0xd4, 0x23, 0x61, 0x76, 0xdb, 0x3c, 0x53, 0xa9, 0xed, 0x3b, 0x5c, 0x87, 0xd5, 0xb0, 0xcd, 0x7f, 0x47, 0x0d, 0x2e, 0xaf, 0xe1, 0x55, 0xc8, 0xfd, 0xbd, 0x0c, 0xc3, 0xe5, 0x46, 0xa6, 0x49, 0x1b, 0x45, 0x6e, 0xd3, 0x13, 0x36, 0x90, 0x2d, 0x51, 0x0a, 0xfd, 0xbb, 0x1d, 0x8c, 0xb7, 0x67, 0xef, 0xe3, 0x9f, 0x77, 0x39, 0xe1, 0x7c, 0xe2, 0x6b, 0x42, 0x7e, 0x2e, 0xed, 0x6b, 0x99, 0x44, 0x0f, 0xb3, 0xf1, 0x72, 0x5d, 0x24, 0x87, 0xb5, 0x0b, 0x92, 0xf1, 0x7d, 0xd1, 0xaf, 0xc4, 0xf2, 0x57, 0xb7, 0xb0, 0xf3, 0x6d, 0xb2, 0x63, 0x06, 0xf0, 0x40, 0x24, 0xcb, 0xa5, 0xe6, 0xb1, 0xbe, 0xf5, 0xd1, 0x91, 0x57, 0xb7, 0x41, 0x4f, 0x75, 0xaf, 0x25, 0x33, 0xe8, 0x6d, 0xd1, 0xf3, 0xd0, 0x92, 0x37, 0xeb, 0x7a, 0xc5, 0x99, 0x23, 0x23, 0x96, 0xcc, 0x81, 0xae, 0x08, 0xc8, 0x3a, 0x5f, 0xab, 0xac, 0x47, 0x7e, 0x7c, 0xd8, 0x74, 0x56, 0x02, 0xfd, 0x6e, 0xdf, 0x73, 0xf2, 0x45, 0x8e, 0x35, 0x89, 0x96, 0x88, 0x0e, 0xd0, 0xd5, 0xf5, 0xc6, 0xa6, 0x90, 0x86, 0xb7, 0x3e, 0xb7, 0x75, 0x72, 0x56, 0x31, 0x64, 0xe1, 0x7b, 0x1b, 0xd7, 0xf5, 0xc6, 0x3e, 0x38, 0x86, 0x6f, 0x19, 0x6c, 0xd7, 0x4c, 0x2f, 0x4d, 0x56, 0x34, 0xb9, 0x7d, 0x09, 0xcd, 0x6d, 0x7d, 0x20, 0x66, 0x67, 0xb6, 0xde, 0x3e, 0x23, 0xfd, 0x22, 0x6c, 0x77, 0x75, 0x78, 0x52, 0xa2, 0xf6, 0xc1, 0xa3, 0xd5, 0xbd, 0xc5, 0x9d, 0x20, 0x7c, 0xab, 0x13, 0x47, 0x41, 0x8f, 0xa5, 0x3b, 0xc8, 0xcb, 0x03, 0xbc, 0x29, 0x5f, 0xc4, 0x77, 0xb2, 0xa7, 0x69, 0x72, 0x4d, 0x20, 0x09, 0x00, 0x65, 0x55, 0x1d, 0xd6, 0xc2, 0x14, 0x09, 0x1f, 0xd8, 0x06, 0xc7, 0xa6, 0x7b, 0xe0, 0x58, 0x1b, 0xe2, 0x18, 0x3d, 0x53, 0xbd, 0x96, 0x66, 0xa3, 0xc2, 0x09, 0x47, 0x95, 0xd0, 0x6a, 0xea, 0x95, 0x79, 0x7f, 0x86, 0x61, 0xdd, 0xc7, 0x18, 0xca, 0xa1, 0x37, 0x61, 0xba, 0xa3, 0xec, 0xe4, 0xc0, 0x2c, 0x62, 0x18, 0xdf, 0x89, 0x64, 0x79, 0x1e, 0x8b, 0x09, 0xd3, 0xbd, 0x70, 0x4c, 0x3a, 0x3c, 0xa3, 0x05, 0x8e, 0x51, 0x1d, 0xc6, 0x6f, 0x40, 0x7c, 0x32, 0x1d, 0xdc, 0x1f, 0x88, 0xf6, 0x70, 0x49, 0x76, 0x78, 0xf6, 0xb0, 0x04, 0xe3, 0x6c, 0x64, 0xcd, 0xe7, 0xe0, 0x7e, 0x97, 0xbb, 0x47, 0xc3, 0xe3, 0xe9, 0x8d, 0x62, 0x67, 0x6e, 0x72, 0x7a, 0x08, 0x83, 0xc7, 0xd7, 0xf3, 0xde, 0x1a, 0x0f, 0xc8, 0xd1, 0x3d, 0x88, 0xbd, 0x73, 0x3d, 0x7d, 0xe9, 0xa4, 0xd6, 0x39, 0xf8, 0x3e, 0x91, 0xde, 0xd5, 0xc0, 0xb4, 0xe6, 0x75, 0x4c, 0x6b, 0xfe, 0x1d, 0x7c, 0x1b, 0x4f, 0x7d, 0x34, 0x3e, 0x0b, 0x73, 0x77, 0xc6, 0xae, 0xa5, 0x50, 0xed, 0xeb, 0x6d, 0x30, 0xee, 0x69, 0x8c, 0xb9, 0x8e, 0x62, 0x74, 0x58, 0x1b, 0x55, 0x8c, 0xee, 0x9e, 0x47, 0x20, 0xc3, 0xc1, 0xd2, 0x66, 0xd3, 0xfb, 0x38, 0xf2, 0xc7, 0xfa, 0x0d, 0x06, 0x71, 0x44, 0x02, 0xf5, 0xae, 0x58, 0x0e, 0x0b, 0x7d, 0x1e, 0x43, 0x6f, 0x62, 0xb0, 0x51, 0x7c, 0x9b, 0xc4, 0xe2, 0x77, 0x4a, 0xa0, 0x9d, 0xc4, 0x46, 0x67, 0x18, 0xeb, 0xb2, 0xa2, 0xcd, 0x47, 0x9a, 0xf8, 0x28, 0xf5, 0x1d, 0x63, 0xb9, 0x59, 0x58, 0x0d, 0x8d, 0xf8, 0x16, 0x62, 0xd0, 0xa4, 0x6f, 0xfa, 0x28, 0xd7, 0xf5, 0x6f, 0x05, 0xdd, 0x4a, 0xae, 0xfd, 0xdf, 0x5e, 0x9b, 0xd0, 0xce, 0xd7, 0x35, 0x61, 0xfc, 0x9b, 0x5c, 0x27, 0x1f, 0x5b, 0x70, 0x54, 0xd1, 0xe0, 0x1f, 0xa1, 0xfc, 0xb8, 0x56, 0x3f, 0xc2, 0xf8, 0xb1, 0x46, 0x2a, 0xf6, 0xa5, 0xc7, 0x16, 0xe7, 0xd0, 0x9b, 0xb1, 0x09, 0x4b, 0xc9, 0x66, 0x61, 0xe3, 0x10, 0x82, 0x34, 0x07, 0xde, 0x99, 0x81, 0x7d, 0x38, 0x32, 0xe2, 0x6c, 0x66, 0x96, 0x5f, 0x72, 0x5c, 0xea, 0x19, 0x81, 0x91, 0x0b, 0x89, 0xb9, 0x22, 0xb6, 0x8e, 0x5c, 0x60, 0x1e, 0x74, 0x77, 0x93, 0x16, 0x38, 0xd9, 0xdb, 0x0a, 0x6b, 0x9c, 0x7e, 0x49, 0xe3, 0x6c, 0x03, 0x8d, 0x05, 0xf1, 0x92, 0x8d, 0x8d, 0x80, 0x73, 0x95, 0x34, 0x0d, 0x87, 0x64, 0x53, 0x5d, 0xaf, 0x65, 0xe6, 0xc8, 0x20, 0xd9, 0x24, 0x52, 0x7f, 0x86, 0x78, 0x96, 0x81, 0x34, 0x44, 0x60, 0xd6, 0x05, 0x18, 0x3e, 0x5c, 0xd7, 0xe7, 0xf4, 0x30, 0xeb, 0x57, 0xd9, 0x8a, 0x25, 0xe9, 0x44, 0xf8, 0x1c, 0x16, 0x6e, 0xda, 0xc3, 0xf6, 0x62, 0xc6, 0x3d, 0x69, 0xd8, 0x4a, 0xe9, 0x41, 0x17, 0xb1, 0x2a, 0x10, 0x43, 0x72, 0x01, 0x49, 0x52, 0xad, 0x26, 0x86, 0x9f, 0x87, 0xe5, 0x8b, 0x14, 0xce, 0x31, 0x13, 0x8e, 0x60, 0x1d, 0x47, 0x90, 0xe6, 0x3c, 0xd8, 0x63, 0xc5, 0xd1, 0x93, 0xb0, 0x1d, 0x26, 0x66, 0xc1, 0xee, 0xb2, 0xed, 0x50, 0x7f, 0x71, 0x99, 0x76, 0x60, 0xab, 0x69, 0x9f, 0x47, 0xfd, 0x69, 0x74, 0xa4, 0xff, 0xfe, 0x48, 0x66, 0x4c, 0xde, 0x7e, 0x3f, 0xf9, 0x5f, 0x51, 0xb1, 0x56, 0x8c, 0x6d, 0x61, 0xee, 0x5a, 0x6a, 0xe1, 0xe8, 0xda, 0xcf, 0xf0, 0x8c, 0x8c, 0x50, 0xfd, 0x11, 0x6b, 0x3e, 0x89, 0x9a, 0x46, 0xd3, 0x7a, 0x27, 0xd1, 0x7a, 0xd1, 0xb7, 0x69, 0x26, 0xd6, 0x12, 0x34, 0x33, 0xb1, 0x2c, 0xd0, 0xcd, 0x2c, 0x03, 0xc3, 0xcc, 0x56, 0x59, 0x05, 0xc6, 0x8f, 0x7b, 0x9c, 0x1e, 0x1c, 0xa5, 0x41, 0x17, 0xd2, 0x03, 0xde, 0xa2, 0x68, 0x84, 0xac, 0x8a, 0x11, 0x16, 0x6b, 0x1f, 0xa5, 0xb6, 0x8c, 0xa2, 0x5b, 0xa0, 0xce, 0x8b, 0x5d, 0xb7, 0x7d, 0x2b, 0xe8, 0xc2, 0xa6, 0x44, 0x3b, 0x22, 0x5a, 0x31, 0x17, 0x34, 0x92, 0x4e, 0xd4, 0x48, 0x1a, 0x9a, 0xa3, 0xae, 0x8c, 0xc0, 0x0a, 0xf5, 0xa7, 0x24, 0x11, 0x9e, 0x24, 0xbb, 0x0e, 0x63, 0x6a, 0x18, 0x06, 0x75, 0x1d, 0xe6, 0xec, 0x19, 0x9d, 0xab, 0xea, 0x18, 0x95, 0x94, 0xcc, 0x11, 0xf1, 0xd4, 0x85, 0x79, 0xf2, 0xfa, 0x58, 0xaa, 0xd2, 0xef, 0x73, 0x30, 0x6d, 0x8d, 0xe1, 0x31, 0xa9, 0x1f, 0x77, 0x91, 0xbd, 0x01, 0xa2, 0x17, 0x66, 0x4e, 0x33, 0x28, 0x36, 0x7b, 0xb9, 0xb4, 0x72, 0x0c, 0xdc, 0xf2, 0xcb, 0xc1, 0xdd, 0xe8, 0x97, 0x42, 0x63, 0xe0, 0xaa, 0x2e, 0x07, 0x97, 0x53, 0x28, 0x39, 0xc6, 0xc0, 0xd9, 0x52, 0x70, 0x44, 0x07, 0x5c, 0x76, 0xb0, 0x72, 0xd8, 0x9b, 0x36, 0x73, 0x7c, 0xc2, 0xba, 0xd6, 0xe1, 0xe8, 0xb2, 0xbb, 0x2a, 0x9c, 0x52, 0x4c, 0x7d, 0x06, 0x34, 0x3d, 0xd6, 0xf4, 0x16, 0x21, 0x4c, 0x1e, 0x62, 0xb2, 0xc9, 0xc9, 0x71, 0x86, 0x8f, 0x33, 0x2b, 0x83, 0xc6, 0x99, 0xf9, 0xb5, 0x7d, 0x25, 0xfa, 0x8d, 0x7e, 0xea, 0xf3, 0xec, 0x43, 0x5d, 0xa2, 0xf7, 0xe0, 0xab, 0xfd, 0xbc, 0xd7, 0x9b, 0x58, 0xaf, 0x23, 0x0e, 0x89, 0xa3, 0xfa, 0x4e, 0xf3, 0x01, 0x79, 0x08, 0x53, 0x2c, 0x1f, 0x7f, 0xec, 0x52, 0xb9, 0x74, 0xae, 0x09, 0x09, 0x4c, 0x74, 0xad, 0xa1, 0xb1, 0xa5, 0x19, 0x40, 0xf8, 0x18, 0x06, 0xcd, 0xae, 0x5d, 0x3d, 0x61, 0x5d, 0x4c, 0x98, 0x49, 0xf6, 0x34, 0x75, 0x16, 0xdf, 0xcc, 0xc5, 0x28, 0xd9, 0x69, 0x9c, 0x5b, 0x40, 0x13, 0x1b, 0x7f, 0x88, 0x2c, 0x6f, 0x2c, 0xb1, 0xf8, 0x5c, 0xd3, 0x71, 0x24, 0x18, 0xfe, 0x29, 0xb9, 0xd0, 0x2e, 0x1f, 0xc3, 0x40, 0xbe, 0x27, 0x70, 0x93, 0x07, 0x78, 0x4a, 0x23, 0x74, 0xcc, 0x44, 0x6c, 0x86, 0x15, 0xf8, 0x6e, 0x80, 0x4e, 0x2a, 0x01, 0xeb, 0x28, 0xe2, 0xaf, 0x52, 0xd4, 0x1d, 0x78, 0x06, 0x0c, 0xb9, 0x3d, 0xa2, 0x27, 0xd0, 0x24, 0xcb, 0xdc, 0x0e, 0xc3, 0x4c, 0x0f, 0xc4, 0x59, 0x3a, 0x13, 0xac, 0xc1, 0xbf, 0x66, 0xe8, 0xc1, 0xbf, 0x39, 0xb0, 0x5e, 0x9c, 0xce, 0xed, 0x8f, 0x45, 0x9c, 0xde, 0xcf, 0xe0, 0x21, 0xac, 0xc3, 0x1d, 0x74, 0x83, 0x2e, 0x55, 0x36, 0xe5, 0xcb, 0x77, 0x37, 0x59, 0xd9, 0x6c, 0x77, 0x48, 0xd2, 0xf8, 0x72, 0xa1, 0x4f, 0xf4, 0xfd, 0x1d, 0x9d, 0x41, 0x1e, 0xff, 0x3b, 0x3a, 0x73, 0x3c, 0x81, 0x58, 0x7d, 0xf8, 0xaa, 0xfd, 0x1a, 0x4e, 0xf5, 0x99, 0x7a, 0x6b, 0xaa, 0x67, 0xc3, 0x1a, 0x0b, 0x62, 0xb2, 0xc5, 0x8e, 0xad, 0xce, 0x24, 0x3b, 0xdb, 0x89, 0x94, 0x79, 0x71, 0xa5, 0xef, 0x0c, 0x2c, 0x3d, 0xd2, 0x48, 0xf5, 0xca, 0x5d, 0x5d, 0xf8, 0xb7, 0x8d, 0x6c, 0x28, 0xcd, 0x64, 0xfe, 0x01, 0xd5, 0xf5, 0x63, 0x67, 0x4c, 0xd8, 0xc0, 0x28, 0xc6, 0x09, 0x5a, 0x4d, 0xd4, 0xc1, 0xd8, 0x4d, 0x6c, 0xee, 0xe8, 0x7e, 0xfb, 0x8e, 0x73, 0xf9, 0x49, 0x2c, 0x85, 0x41, 0xa7, 0xe6, 0x8b, 0xe9, 0xd2, 0x19, 0x1d, 0xb6, 0x1b, 0x9e, 0xc3, 0xf4, 0x6f, 0xcb, 0x17, 0xb1, 0x24, 0x7d, 0x3a, 0x35, 0x22, 0x6f, 0xdc, 0x61, 0x50, 0x5d, 0xa0, 0xf5, 0x1a, 0x69, 0xf1, 0x67, 0x97, 0x9d, 0xf7, 0x30, 0x6c, 0x4f, 0xcc, 0xfc, 0xe8, 0x08, 0xd6, 0x31, 0x6d, 0xe6, 0x5b, 0x32, 0x3f, 0xbe, 0xdf, 0xe9, 0x55, 0x52, 0x6f, 0xe7, 0xd8, 0x79, 0x90, 0x5b, 0x5b, 0xd5, 0xb0, 0xb9, 0x4c, 0x3d, 0x00, 0xe9, 0xd4, 0x0f, 0x79, 0x9b, 0xf4, 0x96, 0xe9, 0x58, 0xcb, 0xb0, 0x66, 0x7c, 0x35, 0x4c, 0x5f, 0x23, 0x13, 0x14, 0x44, 0xd8, 0x81, 0xd8, 0x6f, 0x52, 0xb0, 0x1f, 0x61, 0xbc, 0xe7, 0x7a, 0x04, 0x6c, 0xb3, 0xf8, 0xdb, 0x77, 0xe6, 0x5d, 0x38, 0x29, 0xcc, 0xa8, 0x1a, 0x19, 0xd9, 0x9e, 0xa2, 0x84, 0x8b, 0xb1, 0x3c, 0x1d, 0xf1, 0x8f, 0xb2, 0x89, 0x8d, 0x76, 0x1f, 0xe6, 0xa2, 0xcd, 0x7d, 0x0e, 0xb9, 0xb0, 0x56, 0xfa, 0xca, 0x8d, 0xbb, 0x66, 0xca, 0xda, 0x44, 0x0f, 0xdd, 0x72, 0x14, 0x73, 0xc7, 0x79, 0x9a, 0x5c, 0x9f, 0x05, 0xfc, 0xde, 0x7b, 0x69, 0x69, 0x2c, 0x7f, 0xed, 0x0c, 0xff, 0xc8, 0x88, 0xa4, 0x9d, 0x81, 0x25, 0x20, 0x95, 0xd3, 0x25, 0x56, 0x0a, 0xca, 0xff, 0xb2, 0xbd, 0x66, 0x65, 0xeb, 0x06, 0x95, 0xc6, 0xa8, 0x22, 0x95, 0xe7, 0x3c, 0xcb, 0xf6, 0xab, 0x9f, 0xa3, 0x71, 0x10, 0xe8, 0xc6, 0xd5, 0xeb, 0xb1, 0xc8, 0x0c, 0x2f, 0xf5, 0x9d, 0xd0, 0x71, 0x85, 0x52, 0xd3, 0x5a, 0xa5, 0x50, 0xee, 0x78, 0xa2, 0xf6, 0x16, 0x4d, 0x02, 0x97, 0xc8, 0x02, 0x4f, 0x1a, 0x85, 0xc8, 0xf9, 0x3a, 0x7d, 0xa4, 0xe4, 0x86, 0x3d, 0x93, 0x5a, 0x03, 0xc4, 0x0f, 0xa4, 0x39, 0x97, 0xe6, 0x83, 0x2b, 0xab, 0xf8, 0x35, 0xd3, 0xd7, 0x29, 0x35, 0x32, 0xf2, 0x3b, 0xcb, 0xc5, 0x1e, 0xe6, 0xa5, 0xfb, 0x6f, 0xc8, 0x71, 0xca, 0x69, 0x69, 0x1b, 0xa3, 0x9e, 0x0a, 0x87, 0x56, 0x80, 0xbd, 0x26, 0xeb, 0x13, 0xb4, 0x92, 0x8f, 0x59, 0x22, 0xee, 0xb6, 0xfd, 0x52, 0x9c, 0xf5, 0xb9, 0xf2, 0x5d, 0xf4, 0x18, 0xa3, 0x9f, 0x46, 0xc9, 0xcc, 0x70, 0xec, 0x2c, 0xf6, 0xb3, 0x81, 0xf8, 0x44, 0x49, 0x57, 0x8c, 0x9c, 0xa2, 0xa4, 0xfa, 0x47, 0x92, 0x10, 0x2e, 0x82, 0xd1, 0x95, 0x99, 0x92, 0x1b, 0xd2, 0xa5, 0x1e, 0x9a, 0x9d, 0x7f, 0x2a, 0x0c, 0x22, 0x5f, 0x1b, 0x81, 0xf3, 0xf6, 0x84, 0xfc, 0xc0, 0x25, 0x02, 0x0e, 0xcf, 0xfa, 0xbe, 0x01, 0xe7, 0x86, 0xe7, 0x4a, 0x33, 0x43, 0x7a, 0x8c, 0x8f, 0x27, 0xd6, 0x14, 0xa5, 0x11, 0x4b, 0x13, 0xe8, 0xde, 0x7d, 0x23, 0xf0, 0xfd, 0xcd, 0x64, 0x51, 0xd1, 0xe0, 0x22, 0x3b, 0xd0, 0x1a, 0xde, 0x06, 0xe5, 0x5c, 0x71, 0x38, 0x30, 0x62, 0xa7, 0x3a, 0xe7, 0x90, 0x3d, 0x9c, 0x11, 0x2b, 0xd5, 0xe0, 0x8f, 0xb5, 0x12, 0xfc, 0xb1, 0x80, 0xec, 0x5a, 0x8e, 0x24, 0xec, 0x5a, 0x5a, 0x03, 0x7f, 0x28, 0x2e, 0x42, 0x9a, 0xb6, 0x83, 0x59, 0x91, 0xb1, 0x96, 0x72, 0xaf, 0x6d, 0x1b, 0x44, 0x4c, 0xf3, 0xc9, 0x79, 0x26, 0xa1, 0xd8, 0xb1, 0xc5, 0x43, 0x9f, 0xe6, 0xc8, 0x79, 0x33, 0x3a, 0x49, 0x72, 0x90, 0x0b, 0x58, 0xdc, 0xc7, 0x2c, 0xae, 0xe8, 0xc6, 0x4e, 0xf8, 0x81, 0x3c, 0x07, 0xff, 0xea, 0xe5, 0xdb, 0x15, 0x38, 0x3f, 0x83, 0x53, 0xc9, 0x01, 0x06, 0x77, 0x98, 0xc1, 0x55, 0x22, 0xc4, 0x0a, 0xb9, 0x9a, 0xc1, 0x7d, 0x5b, 0x81, 0xbb, 0x93, 0xc1, 0x69, 0xe4, 0xbb, 0x19, 0xdc, 0x3e, 0x06, 0x77, 0x0f, 0x42, 0xfc, 0x50, 0xae, 0x67, 0x70, 0x8b, 0x14, 0xb8, 0x26, 0x06, 0xa7, 0x95, 0x5b, 0x18, 0xdc, 0x0e, 0x06, 0x17, 0x45, 0x88, 0x95, 0x72, 0x07, 0x83, 0x5b, 0xa6, 0xc0, 0xad, 0x64, 0xf1, 0x4f, 0xb1, 0xf8, 0x6e, 0x25, 0x6c, 0x3d, 0x4b, 0x2b, 0xc8, 0x7d, 0x2c, 0x6e, 0x23, 0x8b, 0xdb, 0x88, 0xa9, 0x3a, 0xe5, 0xcd, 0x2c, 0xed, 0xdf, 0x2b, 0x70, 0x8f, 0x33, 0x38, 0xb5, 0xfc, 0x24, 0x83, 0x5b, 0xc3, 0xe0, 0x9e, 0x46, 0x88, 0xff, 0x57, 0xde, 0xca, 0xe0, 0x9e, 0x55, 0xe0, 0xfa, 0x19, 0x5c, 0x86, 0xbc, 0x83, 0xc1, 0x75, 0x30, 0xb8, 0x5d, 0x08, 0xb1, 0x4a, 0xde, 0xc3, 0xe0, 0x7e, 0xa1, 0xc0, 0xed, 0x65, 0x70, 0xe3, 0xe4, 0xd7, 0x19, 0x5c, 0x03, 0x83, 0x7b, 0x13, 0x21, 0x7e, 0x24, 0xbf, 0xc3, 0xe0, 0xfe, 0x55, 0x81, 0x3b, 0xcc, 0xb5, 0xbd, 0xb1, 0xe7, 0x8f, 0x56, 0x6d, 0x60, 0xb2, 0xef, 0x40, 0x12, 0x67, 0x32, 0xd9, 0xbd, 0x62, 0xe2, 0xc6, 0x33, 0xbd, 0x9f, 0xca, 0xd6, 0xf2, 0x93, 0x30, 0xbe, 0x03, 0x56, 0x66, 0xbe, 0xdf, 0x43, 0x1a, 0xd9, 0x0e, 0xfb, 0xf2, 0xac, 0x23, 0xf1, 0xe8, 0x9c, 0xd1, 0xb4, 0x82, 0xdf, 0x55, 0x87, 0x0f, 0xc4, 0xd2, 0x15, 0x20, 0x65, 0x8a, 0x46, 0xef, 0x49, 0xc8, 0xea, 0x7f, 0x16, 0x32, 0x22, 0xda, 0xd0, 0x9a, 0x1d, 0x6b, 0xda, 0x3e, 0x13, 0x35, 0x07, 0xd6, 0x1c, 0x88, 0xcf, 0xfb, 0x93, 0xee, 0x68, 0x70, 0x13, 0xca, 0x1a, 0x9a, 0x3f, 0xf4, 0x1c, 0x58, 0x43, 0x76, 0x21, 0xbd, 0x7f, 0x42, 0x4a, 0x69, 0x97, 0xf3, 0xaa, 0x36, 0x3a, 0xe3, 0x75, 0xbd, 0x47, 0xd7, 0x1c, 0x5d, 0x23, 0xce, 0x0e, 0x1c, 0x0d, 0x9b, 0x2c, 0x41, 0x5c, 0x49, 0xe6, 0xa4, 0x73, 0x06, 0xd0, 0x4d, 0xde, 0x5f, 0xfe, 0x70, 0x18, 0xf4, 0xd7, 0x2f, 0x91, 0x65, 0x18, 0x3f, 0x6d, 0x89, 0xfc, 0x25, 0x64, 0x62, 0xd8, 0x74, 0x14, 0x20, 0xb2, 0xc8, 0xe6, 0x83, 0xb0, 0x05, 0xb2, 0x2d, 0x33, 0x50, 0xee, 0x34, 0xb0, 0xaf, 0x5d, 0x90, 0x3d, 0xcd, 0x0b, 0x0e, 0x84, 0x1b, 0x02, 0x5b, 0xd6, 0x75, 0xa4, 0xad, 0x31, 0x2d, 0x00, 0xb9, 0xe4, 0x8f, 0x85, 0xd9, 0x81, 0x28, 0x4a, 0x49, 0x49, 0x62, 0x49, 0x9a, 0xc5, 0xb6, 0x2f, 0x52, 0xb7, 0xda, 0x43, 0xdd, 0xe5, 0x67, 0x20, 0x2b, 0xaa, 0xef, 0xef, 0x0e, 0x83, 0x9c, 0x89, 0xd8, 0x5b, 0x2c, 0x6b, 0x08, 0x7b, 0x99, 0x85, 0x66, 0xba, 0xe3, 0x23, 0xd7, 0xb3, 0xb3, 0xbe, 0x7a, 0x20, 0xcd, 0xf1, 0x48, 0xb1, 0xa2, 0x2d, 0xcb, 0x3c, 0xd7, 0x7f, 0xe2, 0x27, 0x8c, 0x5e, 0xf8, 0x58, 0xd5, 0x06, 0xe5, 0xf4, 0x6c, 0x32, 0xd9, 0x90, 0x94, 0x65, 0x16, 0x57, 0x5b, 0xb5, 0xa1, 0x6a, 0xf7, 0xf0, 0x30, 0x3b, 0x8d, 0x56, 0x71, 0xeb, 0xd3, 0x8a, 0x6f, 0x7b, 0x8a, 0x5d, 0x90, 0x48, 0x99, 0x96, 0xa2, 0xb2, 0x6a, 0x43, 0x5a, 0x79, 0xa4, 0xd1, 0x9e, 0xd3, 0x01, 0xd2, 0xde, 0xbf, 0xf5, 0xce, 0x5f, 0x9a, 0x1d, 0x06, 0x80, 0xc5, 0x91, 0x1c, 0xa4, 0x72, 0xf5, 0x69, 0x77, 0x39, 0xd3, 0xbf, 0x6c, 0xa3, 0xbe, 0xe8, 0x1e, 0x67, 0xfa, 0x1e, 0x46, 0x73, 0xfa, 0x1e, 0x86, 0x25, 0x18, 0x6d, 0x4e, 0x8d, 0x1d, 0xb7, 0xd6, 0x90, 0x28, 0x09, 0xf9, 0xe2, 0x30, 0xf3, 0x9e, 0xaa, 0x8d, 0xa9, 0xba, 0xe3, 0x12, 0xf9, 0xbe, 0xa8, 0xe7, 0xf7, 0x65, 0xa3, 0x02, 0xd9, 0xfc, 0xf6, 0x6d, 0x61, 0x37, 0x61, 0x53, 0x25, 0xe5, 0xc5, 0x04, 0x6c, 0x43, 0x98, 0xe7, 0x42, 0x1e, 0x89, 0x45, 0x8f, 0x94, 0x65, 0x10, 0xc0, 0x15, 0xc9, 0xe2, 0x36, 0x03, 0xc4, 0xf1, 0xa1, 0x78, 0xd5, 0x32, 0x4b, 0x20, 0xcb, 0x1c, 0x3e, 0xc9, 0x28, 0x4b, 0x93, 0x4b, 0x5f, 0xfa, 0xa9, 0xdc, 0x44, 0xb4, 0x4a, 0xb1, 0xbc, 0xbf, 0x11, 0x47, 0x6c, 0x26, 0xd2, 0xaa, 0x99, 0xcc, 0x0a, 0x27, 0xf2, 0x7e, 0x1c, 0xc3, 0x31, 0x2d, 0xca, 0x4d, 0xe4, 0x9d, 0xc4, 0xda, 0x2a, 0x37, 0xf0, 0x1b, 0x4c, 0xc5, 0x85, 0x56, 0xc5, 0xc3, 0x87, 0xcd, 0x05, 0x76, 0xbb, 0x0b, 0x9c, 0xb4, 0x83, 0xc0, 0x6e, 0xea, 0x0e, 0x4f, 0xc8, 0xb7, 0x7a, 0x12, 0x37, 0xe1, 0x5c, 0x6a, 0xc6, 0xa7, 0x64, 0xf3, 0x98, 0x6b, 0xec, 0x88, 0xa1, 0x5b, 0x98, 0x7f, 0x91, 0x19, 0xe0, 0xa7, 0x10, 0x43, 0x2d, 0xf3, 0x84, 0x03, 0xb0, 0xc6, 0xe2, 0x7f, 0x68, 0x7f, 0x4c, 0x90, 0x0a, 0xa3, 0xe0, 0x16, 0x6c, 0x9e, 0xdf, 0x0c, 0xd8, 0x9b, 0xc1, 0xf0, 0x6f, 0xbf, 0xb6, 0xe5, 0xef, 0xc2, 0xd5, 0x18, 0xe7, 0x89, 0x28, 0x99, 0xa3, 0x72, 0xff, 0xea, 0x48, 0x56, 0x87, 0x18, 0x15, 0x1c, 0xf0, 0xe6, 0xea, 0xb0, 0x2a, 0xd4, 0x73, 0x20, 0x5e, 0xd3, 0x1d, 0xfe, 0xa2, 0xe4, 0x94, 0x7c, 0x3c, 0xe4, 0x8d, 0x4e, 0xe9, 0xbf, 0xbf, 0x71, 0xef, 0xc0, 0x9a, 0xd3, 0xeb, 0x43, 0xb4, 0x7f, 0x54, 0xa6, 0x5a, 0xc3, 0x6c, 0xa0, 0xfb, 0xdf, 0xdd, 0x67, 0xc5, 0x9c, 0xde, 0x7b, 0xc3, 0x9a, 0xb7, 0x19, 0x57, 0xa0, 0x83, 0x03, 0x92, 0x13, 0xa5, 0xa5, 0xee, 0x88, 0x2d, 0x26, 0xd8, 0x84, 0xd7, 0xbb, 0x29, 0x97, 0x9a, 0x78, 0xc4, 0x7c, 0xa8, 0x4b, 0x3a, 0xc7, 0x3c, 0x58, 0x68, 0x95, 0x9a, 0x32, 0x3d, 0x8e, 0x87, 0xf6, 0x8b, 0xba, 0xca, 0x0f, 0x73, 0x8a, 0xa9, 0xc5, 0x73, 0x8a, 0x1d, 0xd8, 0x52, 0x1c, 0x1b, 0x67, 0x07, 0xe4, 0x3b, 0x84, 0x38, 0xf6, 0xc9, 0xb9, 0xbe, 0x6e, 0x2b, 0xd8, 0x1c, 0xe0, 0xd7, 0xae, 0x1e, 0x27, 0xcb, 0xf2, 0x99, 0x07, 0xca, 0x4f, 0x0b, 0x9a, 0xb9, 0xa7, 0x85, 0xa6, 0x15, 0x50, 0x31, 0x38, 0x72, 0x6c, 0xc7, 0xea, 0x06, 0x95, 0x4d, 0x25, 0xde, 0xc8, 0x76, 0x57, 0x00, 0xfb, 0x36, 0xa3, 0x6a, 0xe3, 0xd1, 0xf8, 0x46, 0xe6, 0x4d, 0x22, 0xd8, 0x8d, 0x74, 0x60, 0xf7, 0xff, 0xfd, 0x75, 0xf8, 0x7d, 0xa7, 0x43, 0x68, 0x9a, 0xfb, 0x67, 0xea, 0x35, 0x4c, 0xb3, 0x85, 0x6e, 0xe9, 0xb8, 0xb4, 0x0c, 0xf6, 0x11, 0x5b, 0xa2, 0x17, 0xb3, 0x5d, 0xec, 0xf6, 0xdf, 0xc9, 0x3b, 0x30, 0x94, 0xf5, 0x22, 0x5b, 0x8b, 0x56, 0x46, 0x85, 0xae, 0x67, 0xc1, 0xe8, 0x2b, 0x93, 0x72, 0x95, 0x92, 0xc8, 0x8b, 0xee, 0x12, 0x30, 0xbc, 0xbb, 0x5f, 0x9c, 0xd5, 0x03, 0x57, 0x28, 0xd5, 0x18, 0x2a, 0xc3, 0x1e, 0xd6, 0xd2, 0xbd, 0xed, 0x9a, 0xae, 0xed, 0xf1, 0xfa, 0x7d, 0xd1, 0x91, 0x57, 0x9f, 0x65, 0x31, 0x64, 0x35, 0xd5, 0x5f, 0xd3, 0x73, 0x70, 0x3f, 0xcf, 0xc3, 0x89, 0x79, 0x04, 0xef, 0xc3, 0x19, 0x1d, 0xc3, 0xb8, 0x4c, 0x92, 0x0e, 0x94, 0xd2, 0xc3, 0xb8, 0x72, 0x6a, 0x2a, 0x3f, 0x2c, 0xee, 0x4c, 0xe9, 0x82, 0x50, 0xaf, 0xf0, 0xb5, 0xd2, 0xa5, 0x29, 0xc7, 0xb6, 0xe8, 0xf7, 0x55, 0x3d, 0xec, 0xf0, 0x60, 0xfd, 0x9e, 0x63, 0x9e, 0x47, 0xce, 0x87, 0x98, 0xed, 0x5d, 0xf2, 0xe9, 0xc3, 0xda, 0x64, 0x8e, 0x41, 0x14, 0x57, 0xe6, 0x0e, 0x79, 0x6a, 0xb7, 0x19, 0x42, 0xf1, 0xba, 0x2e, 0xb2, 0xb1, 0x88, 0xf2, 0x8a, 0xbf, 0xf1, 0xac, 0xaf, 0xcf, 0x8e, 0xef, 0xcc, 0xcb, 0x94, 0x82, 0x1f, 0xfe, 0xb8, 0x3d, 0x7e, 0xe5, 0x1e, 0xaf, 0xee, 0xfd, 0xfb, 0xb7, 0x68, 0xb7, 0x66, 0x42, 0x1f, 0xef, 0x03, 0xef, 0x59, 0xf0, 0xd2, 0x0a, 0x3c, 0xf5, 0x59, 0xd0, 0x6d, 0x01, 0x7e, 0x7f, 0x9b, 0x95, 0xbc, 0x29, 0x84, 0x21, 0xbc, 0x17, 0xc2, 0x93, 0x42, 0xeb, 0x13, 0x70, 0x74, 0xc7, 0x0b, 0x65, 0x81, 0xcd, 0xa1, 0xf5, 0x51, 0x73, 0xff, 0xfa, 0x86, 0x0b, 0xca, 0x73, 0x3b, 0x1b, 0x9f, 0x27, 0xa7, 0x2d, 0x01, 0x9d, 0xd0, 0xc4, 0xf3, 0x9f, 0x81, 0xef, 0x64, 0x79, 0x2f, 0x0a, 0x92, 0x41, 0x6c, 0x05, 0x83, 0xaf, 0x9f, 0xd7, 0x9d, 0xd5, 0xfb, 0xb3, 0x95, 0xf0, 0xf7, 0x6f, 0x49, 0x79, 0xca, 0x38, 0xcc, 0x00, 0x5d, 0x88, 0x6c, 0xe7, 0xea, 0x08, 0x6e, 0x6a, 0xbc, 0x6e, 0x54, 0x3d, 0x36, 0xae, 0xae, 0x5b, 0xab, 0x8c, 0x85, 0x35, 0xb4, 0x5e, 0xa4, 0x71, 0x88, 0xf7, 0xaf, 0xaf, 0xdf, 0x87, 0xdf, 0x26, 0x36, 0x82, 0xad, 0x6c, 0x04, 0x59, 0x1e, 0x37, 0xc7, 0x7b, 0x78, 0xda, 0x6b, 0x52, 0x6d, 0xe0, 0x69, 0x71, 0x5c, 0xa2, 0x58, 0xef, 0xad, 0x42, 0x53, 0xc7, 0xc8, 0x2f, 0xb1, 0x97, 0xa3, 0x32, 0xd7, 0x63, 0x61, 0x9e, 0xd3, 0x5d, 0x60, 0x24, 0x2f, 0xc0, 0x38, 0xc7, 0xce, 0x5f, 0x3a, 0x27, 0x23, 0x55, 0xee, 0x4e, 0xf9, 0x9d, 0x83, 0x67, 0xc0, 0x8f, 0x23, 0xdd, 0x4c, 0x65, 0xdd, 0xfc, 0x02, 0x98, 0x7b, 0x80, 0xd9, 0xf2, 0xbf, 0x2e, 0x6c, 0x26, 0xdf, 0x3a, 0xc4, 0xc5, 0x2b, 0xe9, 0xfa, 0xa2, 0xaa, 0xae, 0xad, 0xc8, 0x57, 0x19, 0x47, 0x87, 0x1b, 0x98, 0xe5, 0xc0, 0xa8, 0xcc, 0x7d, 0x16, 0x19, 0x14, 0x3f, 0x06, 0xe4, 0xdf, 0x81, 0xb4, 0x72, 0xb1, 0x5e, 0x1d, 0xf8, 0x5b, 0x41, 0x9a, 0xb9, 0x42, 0x7c, 0x9a, 0x47, 0x88, 0xba, 0x1c, 0x82, 0x86, 0x20, 0x78, 0x5d, 0x30, 0xa4, 0x85, 0xe9, 0xde, 0x59, 0x63, 0x82, 0xe8, 0x59, 0xcd, 0xb5, 0xb6, 0x29, 0x76, 0xb7, 0x9c, 0xc0, 0xf9, 0x4c, 0xb1, 0x59, 0x68, 0x41, 0xdc, 0xc4, 0x38, 0x76, 0x43, 0x49, 0xe6, 0xf4, 0x3f, 0xbd, 0x14, 0x82, 0x50, 0xf6, 0x38, 0xb3, 0x98, 0x5d, 0x71, 0x7d, 0x7a, 0xdd, 0x52, 0xe9, 0x15, 0xcc, 0xc4, 0xdc, 0x47, 0x48, 0x43, 0xd2, 0x90, 0xc8, 0x2b, 0xf0, 0x87, 0xc2, 0x39, 0x98, 0x97, 0x95, 0xac, 0x13, 0xdb, 0x99, 0x4d, 0x0c, 0xaa, 0x2d, 0xe9, 0x35, 0xfd, 0x74, 0x20, 0x1d, 0xc7, 0x94, 0xbd, 0x51, 0x79, 0xd1, 0x40, 0x75, 0xaf, 0x3d, 0x7e, 0xba, 0x87, 0xac, 0xcc, 0x86, 0xe2, 0x62, 0x3c, 0x3a, 0xe5, 0xd5, 0x8d, 0xa2, 0x43, 0x88, 0xf6, 0x3f, 0x50, 0xaf, 0x3b, 0xb0, 0x1a, 0xff, 0x82, 0x10, 0x4a, 0xc2, 0xe6, 0x57, 0xf7, 0x3a, 0x3c, 0x5f, 0xb7, 0x86, 0x15, 0x6c, 0xfe, 0x23, 0xe6, 0xfd, 0xa4, 0xd1, 0xe8, 0xfd, 0x94, 0x63, 0xa6, 0xcb, 0xbd, 0x85, 0x2c, 0x1b, 0xbe, 0x62, 0x6b, 0x16, 0x9a, 0xa6, 0xcd, 0x15, 0x3a, 0xe6, 0x7d, 0x2a, 0xff, 0xc1, 0x4e, 0xd8, 0xb2, 0xc6, 0xa5, 0xe1, 0x56, 0x0d, 0xa8, 0x3e, 0xd8, 0x93, 0x2b, 0x18, 0x66, 0xa9, 0xaa, 0x36, 0x26, 0xe8, 0x05, 0xce, 0xfc, 0x04, 0x04, 0xf3, 0xba, 0xe5, 0xac, 0x94, 0x16, 0x60, 0xff, 0x77, 0x30, 0x1a, 0xb2, 0x81, 0xf9, 0x1a, 0x4f, 0x9b, 0xe7, 0xae, 0x59, 0x74, 0x7f, 0x00, 0xd3, 0x6f, 0x4a, 0xd2, 0x1b, 0xdb, 0xa5, 0x10, 0x2c, 0xed, 0x2b, 0x09, 0x2a, 0xce, 0xe8, 0x4f, 0x1d, 0x9b, 0x1d, 0x1d, 0x35, 0x6b, 0x78, 0xed, 0x83, 0x6b, 0xc2, 0x4f, 0x63, 0x8b, 0x56, 0x5c, 0x92, 0xef, 0x46, 0x1a, 0xed, 0xea, 0xde, 0xdc, 0xd5, 0x5c, 0x8b, 0x8b, 0x6c, 0x28, 0x12, 0x46, 0x50, 0xeb, 0x99, 0xec, 0x68, 0x62, 0x79, 0x9f, 0x4a, 0xe4, 0x4d, 0xf7, 0xfe, 0x25, 0x3d, 0xd2, 0x8e, 0x2d, 0x64, 0xe1, 0x90, 0xe9, 0x7c, 0xe7, 0x28, 0xb7, 0x8b, 0x69, 0xec, 0x5b, 0xe9, 0x16, 0x30, 0x8e, 0x69, 0x2b, 0xf3, 0xe4, 0x7b, 0x91, 0xd1, 0x15, 0x7e, 0xbf, 0x36, 0x4f, 0xd1, 0x7e, 0xc5, 0x55, 0x56, 0x68, 0x11, 0x67, 0xca, 0x17, 0x83, 0xcf, 0x81, 0x29, 0x92, 0x7f, 0x20, 0x4e, 0xb3, 0xea, 0xe0, 0x29, 0x30, 0x20, 0xae, 0xcd, 0x94, 0x87, 0x3f, 0x7a, 0x66, 0x75, 0x5f, 0xcd, 0x56, 0x38, 0x6b, 0x71, 0x08, 0x9d, 0x38, 0xfb, 0xce, 0xf7, 0x77, 0x2d, 0xd2, 0xf6, 0x77, 0x2f, 0xb2, 0x4a, 0x9a, 0xfe, 0xee, 0x7a, 0xcb, 0xf6, 0xee, 0x45, 0x93, 0x25, 0x73, 0x5a, 0x9a, 0x11, 0x96, 0xe6, 0xe5, 0xd7, 0xfa, 0x42, 0x98, 0x66, 0x9a, 0x0f, 0xd3, 0xd0, 0xa8, 0xa9, 0xa8, 0x76, 0x1c, 0xfb, 0xad, 0x33, 0xe5, 0x73, 0xb8, 0x2e, 0xb2, 0x7b, 0xc9, 0x64, 0xa5, 0x97, 0xe9, 0x77, 0xd1, 0xea, 0x48, 0x77, 0xd2, 0xfc, 0xb6, 0x19, 0x29, 0x3c, 0xc2, 0x55, 0xd9, 0xa3, 0x8d, 0xb3, 0xf7, 0x1e, 0x8b, 0x7a, 0x43, 0x5c, 0x54, 0x91, 0xbd, 0x47, 0x51, 0x58, 0xe1, 0x3c, 0xda, 0x3b, 0xef, 0x73, 0xf0, 0xcc, 0x1d, 0xfc, 0xaa, 0x0d, 0x57, 0xed, 0x39, 0xb8, 0xce, 0x78, 0x2c, 0x33, 0x84, 0x16, 0x4b, 0xe9, 0xbb, 0xbf, 0xb4, 0x7b, 0x2d, 0x4e, 0x30, 0x1c, 0xba, 0xdf, 0x39, 0xcb, 0x0c, 0x25, 0xa7, 0x49, 0xef, 0x2a, 0x26, 0xe4, 0x0a, 0xef, 0x20, 0x5d, 0x86, 0xc7, 0x0f, 0x75, 0x85, 0xd6, 0xfd, 0xec, 0xcd, 0xf0, 0x39, 0x49, 0x65, 0xad, 0x08, 0xad, 0x75, 0x95, 0x82, 0xc7, 0x7b, 0x52, 0x3e, 0x1e, 0x9b, 0xb2, 0xbd, 0xa7, 0x71, 0x0f, 0xdb, 0xf1, 0x71, 0xb2, 0x5c, 0xda, 0xc1, 0xf3, 0xee, 0x1b, 0x89, 0x7c, 0x1c, 0x98, 0x0f, 0xd9, 0xa6, 0x79, 0x6b, 0x6d, 0x78, 0x41, 0x68, 0x5d, 0x4d, 0x0f, 0x83, 0xd3, 0xe0, 0xea, 0x77, 0x76, 0x63, 0x3c, 0x12, 0x20, 0xbc, 0x21, 0xdd, 0x10, 0x97, 0x0b, 0xa9, 0xef, 0x23, 0x4a, 0x7f, 0xe6, 0x45, 0x85, 0xfe, 0x17, 0xc0, 0x13, 0xd6, 0xa6, 0xac, 0x2e, 0x9f, 0xd2, 0x22, 0x44, 0x61, 0x62, 0xbc, 0x44, 0xd5, 0x4e, 0x6a, 0x87, 0x3a, 0x26, 0xb8, 0xbc, 0x80, 0x52, 0xa0, 0x5c, 0x9c, 0xb0, 0x7b, 0x4c, 0xd6, 0x84, 0x69, 0xe4, 0xb0, 0x57, 0xdc, 0xb6, 0x99, 0xdc, 0x8f, 0x99, 0x15, 0xfb, 0x9d, 0x46, 0x8e, 0xdd, 0xc8, 0xa6, 0xd1, 0x53, 0x23, 0x8f, 0xb7, 0x3c, 0xa1, 0xb9, 0x0c, 0x6f, 0xd2, 0xc8, 0x45, 0xee, 0x41, 0x0c, 0x3c, 0x67, 0xd1, 0x6d, 0xe8, 0x8e, 0x04, 0xf3, 0x3a, 0x41, 0x7c, 0x78, 0x60, 0xfb, 0xfd, 0xf5, 0x5a, 0x87, 0xf0, 0x7e, 0x5c, 0x52, 0xad, 0x14, 0x2d, 0x38, 0x22, 0x38, 0x2b, 0x5a, 0x2c, 0xde, 0x77, 0x5f, 0xb5, 0x21, 0xae, 0xfd, 0xe6, 0x8d, 0xdc, 0x5b, 0x37, 0x43, 0xa7, 0x20, 0x19, 0xed, 0xda, 0x8f, 0xb6, 0xed, 0xff, 0x71, 0x28, 0x8e, 0xb8, 0x88, 0x9c, 0x70, 0xa8, 0x7b, 0x77, 0xbc, 0xfe, 0x2c, 0x49, 0xa9, 0xa1, 0x2e, 0x94, 0xbc, 0x87, 0x5f, 0xdc, 0x5b, 0xaf, 0xe5, 0x2b, 0xc9, 0x8e, 0xad, 0x70, 0xbe, 0xd1, 0x46, 0xeb, 0x49, 0x4d, 0x1c, 0xeb, 0x80, 0xf9, 0x31, 0x6d, 0x16, 0x56, 0x97, 0x91, 0x62, 0x2b, 0x3b, 0x3f, 0x09, 0x7b, 0x38, 0xec, 0xd8, 0xba, 0x0e, 0xbd, 0xa9, 0xd4, 0x75, 0x32, 0x4f, 0x49, 0x38, 0x94, 0x4a, 0xfd, 0xd5, 0x08, 0x4f, 0x2d, 0xa9, 0x3a, 0x40, 0x24, 0xbf, 0x68, 0xc3, 0x28, 0x39, 0x70, 0x0f, 0x4e, 0xe4, 0x48, 0xd1, 0x88, 0xab, 0xa5, 0x09, 0x7b, 0x99, 0xca, 0x39, 0x69, 0x25, 0x2d, 0xb4, 0x49, 0xe4, 0x15, 0x81, 0x87, 0x7c, 0x95, 0xc3, 0xa5, 0xe9, 0x84, 0xfe, 0x0e, 0xa6, 0xff, 0x10, 0x08, 0xf7, 0xbf, 0xaf, 0xf0, 0xaf, 0x66, 0xc4, 0x2a, 0xba, 0x59, 0xe9, 0xbf, 0x1b, 0xe7, 0xa6, 0x4b, 0x45, 0xfb, 0x27, 0x89, 0x19, 0x35, 0xd6, 0x8e, 0x13, 0xd6, 0xcf, 0x2d, 0x7a, 0x62, 0x50, 0xd3, 0x2d, 0x4d, 0x2a, 0x27, 0x4b, 0x4a, 0x73, 0xc1, 0x40, 0xf7, 0x55, 0x48, 0x36, 0x2f, 0xf9, 0xe3, 0x66, 0x10, 0xef, 0x0f, 0x75, 0x89, 0x15, 0x3b, 0xba, 0xea, 0x4f, 0x28, 0x76, 0x96, 0x0c, 0xbe, 0xbe, 0x04, 0xaf, 0x4b, 0x76, 0x34, 0x46, 0xfb, 0x68, 0xe1, 0x16, 0xdc, 0x12, 0x6b, 0x0b, 0x71, 0xd2, 0xb4, 0xca, 0x23, 0x37, 0x67, 0x55, 0x56, 0x8d, 0x4c, 0xf2, 0x49, 0x87, 0x3f, 0x5c, 0x91, 0x48, 0xf7, 0x89, 0xe1, 0xc8, 0x4d, 0x38, 0xa3, 0x1f, 0xae, 0xee, 0xb5, 0x86, 0x98, 0x75, 0xe9, 0x23, 0x7c, 0x95, 0x20, 0xff, 0x7b, 0x98, 0x87, 0xc9, 0x46, 0xad, 0x59, 0x02, 0x47, 0x89, 0x76, 0x94, 0x3e, 0x2f, 0x39, 0xa2, 0xea, 0x01, 0x4c, 0x19, 0x53, 0x6d, 0x8f, 0x87, 0x69, 0x77, 0xd4, 0xc0, 0x6e, 0xe4, 0x90, 0x55, 0x74, 0x5a, 0x6f, 0x36, 0x32, 0x5b, 0x0c, 0x74, 0x5e, 0x65, 0x52, 0x72, 0x3b, 0x40, 0x7e, 0xf2, 0xd8, 0x6d, 0x6d, 0x77, 0x22, 0x37, 0xb2, 0x6d, 0x86, 0x7c, 0xc4, 0x51, 0x9f, 0xe7, 0x91, 0x37, 0xa5, 0xa2, 0x9d, 0x5b, 0x40, 0x17, 0x36, 0x32, 0x4b, 0xaf, 0xd7, 0x45, 0x2c, 0x3b, 0x9f, 0x85, 0xf3, 0x61, 0xab, 0x44, 0xda, 0xd2, 0x5b, 0x68, 0xfd, 0x67, 0x16, 0xb8, 0xb3, 0x90, 0x07, 0xd2, 0x6c, 0xdf, 0x02, 0x9a, 0x7a, 0x9d, 0xa4, 0xb3, 0x06, 0x90, 0x23, 0x51, 0x59, 0x03, 0x62, 0x35, 0x9f, 0x11, 0x41, 0x4f, 0x64, 0x0f, 0x83, 0x72, 0x33, 0x7f, 0x79, 0xd8, 0x3a, 0x5c, 0x91, 0x8f, 0xb3, 0x55, 0xfd, 0x38, 0x4a, 0x45, 0x9a, 0xe0, 0xb3, 0x70, 0x3c, 0xec, 0xa1, 0xf2, 0x24, 0x2d, 0xd9, 0xd3, 0xe2, 0xe9, 0xc2, 0xe7, 0x25, 0x27, 0xab, 0xf1, 0x6e, 0xd9, 0xac, 0xf0, 0xc3, 0xbb, 0xe5, 0x05, 0x6c, 0xe5, 0x45, 0x8c, 0xe1, 0xda, 0xac, 0xa7, 0x6e, 0x4f, 0x51, 0x3a, 0x9a, 0x25, 0x06, 0x03, 0xf6, 0x39, 0xad, 0x69, 0x46, 0x66, 0xc5, 0xc9, 0x48, 0x3f, 0x4c, 0x65, 0x13, 0x3d, 0x53, 0x7d, 0xdc, 0x56, 0x17, 0xb3, 0x7c, 0x30, 0xe5, 0xf2, 0x7d, 0xa7, 0x8c, 0x01, 0xb5, 0x72, 0x12, 0x71, 0xe9, 0x28, 0x4d, 0x9e, 0x8f, 0x18, 0xb9, 0x65, 0x85, 0x53, 0xed, 0xd4, 0x77, 0x2c, 0x75, 0x72, 0x0c, 0xa8, 0xd7, 0x18, 0x36, 0x8a, 0xd8, 0x5f, 0x26, 0xc4, 0x46, 0x86, 0x53, 0xec, 0x8e, 0x2d, 0xe1, 0x64, 0x7f, 0x92, 0x4b, 0x70, 0x07, 0x69, 0xdf, 0xd1, 0x31, 0x0d, 0xeb, 0x90, 0x1c, 0x0f, 0x0e, 0x85, 0x75, 0xf7, 0x57, 0xf1, 0x16, 0x71, 0x6f, 0x52, 0x16, 0xfd, 0xde, 0xb8, 0xd5, 0x4b, 0x6d, 0xd1, 0xb0, 0xdb, 0xb8, 0xee, 0x42, 0x66, 0x6b, 0x8e, 0xfc, 0x95, 0x91, 0x95, 0x03, 0x5c, 0x61, 0x19, 0xe7, 0x6e, 0x3d, 0xb2, 0xfa, 0x08, 0x79, 0x9e, 0x46, 0xce, 0xa9, 0x10, 0x88, 0xbb, 0x77, 0xa5, 0x49, 0x01, 0xfe, 0xf8, 0xf4, 0x38, 0xdd, 0xf5, 0x49, 0xb4, 0x21, 0xac, 0xe7, 0xbd, 0xf7, 0xd5, 0x81, 0xea, 0xde, 0x4b, 0xf0, 0xe1, 0x65, 0xc2, 0x99, 0x14, 0x4e, 0x18, 0x8b, 0x65, 0xe4, 0x7e, 0x72, 0x0c, 0x0a, 0x86, 0x2a, 0xf3, 0x04, 0xcb, 0xec, 0x8e, 0xd8, 0x0f, 0x77, 0x1f, 0xee, 0xe6, 0x65, 0xda, 0xc9, 0x2b, 0x03, 0x79, 0x62, 0xe4, 0xf6, 0xd1, 0x93, 0xe5, 0xde, 0x12, 0x27, 0x6d, 0x50, 0xce, 0xe5, 0x70, 0x1c, 0xad, 0xfa, 0x3e, 0x93, 0x9f, 0xda, 0x41, 0x77, 0x20, 0x7e, 0x20, 0x6e, 0xd1, 0x1d, 0x8a, 0x13, 0x07, 0x72, 0x60, 0xf3, 0xf6, 0x9e, 0xfa, 0x41, 0x46, 0xcf, 0x0e, 0xb3, 0xf9, 0x88, 0x92, 0x92, 0xb3, 0x15, 0x39, 0xad, 0x56, 0x76, 0x27, 0x9c, 0x79, 0xe4, 0xfb, 0x43, 0x0f, 0x52, 0x8a, 0xc3, 0xdc, 0x02, 0x19, 0xed, 0x15, 0x8b, 0xb3, 0x4f, 0x1e, 0x8e, 0x99, 0xc8, 0x17, 0xbd, 0xef, 0x39, 0xf9, 0x1c, 0xed, 0x29, 0x9c, 0xba, 0x4f, 0x3e, 0x4f, 0x3b, 0xa8, 0x64, 0x21, 0x98, 0xf6, 0x13, 0x4e, 0x3d, 0x90, 0xae, 0xe1, 0xeb, 0x4c, 0xf4, 0xbe, 0x6d, 0x86, 0x0f, 0xd7, 0xaf, 0xe7, 0xa1, 0x38, 0x92, 0xf9, 0xd0, 0xfe, 0x92, 0x4f, 0xe5, 0xb3, 0x8f, 0xbc, 0x89, 0xf1, 0x3b, 0x24, 0xb7, 0xc5, 0x93, 0x92, 0x1f, 0x25, 0x91, 0x64, 0xd5, 0xfc, 0x4e, 0x10, 0x7e, 0xfa, 0xeb, 0x64, 0x1e, 0x17, 0xa2, 0xa9, 0x59, 0x3b, 0x8c, 0xbc, 0xd9, 0xa7, 0x95, 0x1a, 0x79, 0x1f, 0xdf, 0x4b, 0x02, 0x08, 0xb4, 0x32, 0x4e, 0x2b, 0x21, 0xe3, 0xed, 0x96, 0xf3, 0x99, 0x75, 0x9d, 0xb4, 0x58, 0xd6, 0xcf, 0xa9, 0x78, 0x53, 0x7a, 0xbc, 0x4b, 0x25, 0x62, 0x28, 0x59, 0xf8, 0xe8, 0x98, 0xb8, 0xa3, 0x2b, 0x52, 0xe8, 0x1d, 0x1c, 0x39, 0xdf, 0x90, 0x19, 0x20, 0x5e, 0xf8, 0x9f, 0x19, 0xbe, 0xfd, 0xa3, 0x34, 0x89, 0xf2, 0xf8, 0xc3, 0xfd, 0x48, 0x99, 0x87, 0xb1, 0x37, 0x34, 0xae, 0x6b, 0xd9, 0x9e, 0x09, 0xb8, 0x70, 0xd5, 0x71, 0x01, 0xd7, 0xcb, 0x54, 0xd6, 0xcc, 0x61, 0xca, 0x15, 0x11, 0x75, 0x9c, 0xc1, 0x85, 0x14, 0x64, 0x42, 0x7d, 0x56, 0x16, 0x68, 0x05, 0xf9, 0x7f, 0xa1, 0xac, 0x7a, 0x43, 0xbd, 0x5d, 0x0b, 0xf2, 0xf1, 0xaa, 0x65, 0x14, 0x02, 0x22, 0x86, 0x4c, 0xae, 0xd7, 0x1a, 0x40, 0xfe, 0x32, 0x6c, 0x48, 0x83, 0xd1, 0x70, 0x18, 0x5c, 0x59, 0x0a, 0x9d, 0x2e, 0xc8, 0x27, 0x09, 0xc4, 0x3c, 0x09, 0xb9, 0x38, 0xbb, 0x4f, 0xb5, 0x12, 0x26, 0x69, 0x96, 0x43, 0xb6, 0x0b, 0x6e, 0x2d, 0x1f, 0x94, 0x1f, 0x37, 0xe6, 0x44, 0x34, 0x7b, 0xd6, 0x86, 0x35, 0xbb, 0x54, 0x11, 0xab, 0x4b, 0x9d, 0xb0, 0x3c, 0x42, 0x94, 0x69, 0x32, 0xb8, 0xd4, 0x51, 0x30, 0x4e, 0xe2, 0x5f, 0xfd, 0xe3, 0xc2, 0xba, 0x90, 0x4a, 0x3a, 0x40, 0x74, 0x80, 0xf9, 0xe1, 0x1c, 0x46, 0x69, 0xb9, 0x9d, 0xe3, 0x81, 0xf1, 0x86, 0xb0, 0x26, 0x68, 0x8c, 0xe8, 0xfa, 0xcd, 0x91, 0xf3, 0xcc, 0x23, 0x08, 0xbf, 0xf5, 0x0e, 0xe4, 0xb3, 0x8b, 0x6e, 0xa0, 0xd1, 0x3c, 0x12, 0xbd, 0x92, 0xe6, 0xba, 0xd5, 0x76, 0xc1, 0xad, 0xeb, 0xf3, 0x66, 0x9b, 0x23, 0x3a, 0x5c, 0x3d, 0x60, 0x57, 0x77, 0xdb, 0xd9, 0xac, 0x38, 0xa7, 0xe2, 0xcc, 0x0f, 0x86, 0xa2, 0x37, 0x8f, 0x73, 0x82, 0xf0, 0x34, 0x1f, 0xd3, 0x15, 0x62, 0x9d, 0x8b, 0xc9, 0xfe, 0xbc, 0x80, 0x6b, 0x48, 0x74, 0xff, 0x81, 0x67, 0xc1, 0x8f, 0xeb, 0x01, 0x9b, 0x65, 0xf9, 0x0b, 0x44, 0xbf, 0x48, 0x94, 0xc7, 0xb3, 0xa0, 0x27, 0xc1, 0xab, 0x93, 0x64, 0xc7, 0x6f, 0xad, 0xc0, 0x83, 0x9c, 0x1b, 0x67, 0xd2, 0x49, 0x7e, 0xd5, 0x26, 0x6b, 0x4a, 0xff, 0xf8, 0xc1, 0x84, 0x84, 0x4d, 0x72, 0xa5, 0xa1, 0xb6, 0xea, 0x11, 0xb6, 0x17, 0x9f, 0xcb, 0x7d, 0x25, 0x8e, 0x96, 0x70, 0x31, 0xdc, 0x90, 0x98, 0x53, 0x35, 0xbb, 0x71, 0x1e, 0x34, 0xd8, 0xe3, 0x48, 0x3f, 0x69, 0x1d, 0xc6, 0xf2, 0xa2, 0x2a, 0x47, 0x31, 0x42, 0x8e, 0xf4, 0xf7, 0x61, 0xae, 0x3d, 0xd2, 0x9d, 0x4a, 0x7d, 0x96, 0x80, 0xff, 0x3b, 0xa3, 0x6a, 0x14, 0xd6, 0xd9, 0xf7, 0xd0, 0xce, 0xbe, 0xb4, 0x4f, 0x91, 0x10, 0x92, 0xb5, 0x09, 0x6b, 0x29, 0x47, 0x69, 0x65, 0x52, 0xe6, 0x7f, 0x84, 0xcb, 0xfb, 0x72, 0x07, 0xcf, 0x1f, 0x73, 0x4e, 0xd4, 0x4b, 0x77, 0xb5, 0x7a, 0xb1, 0xfc, 0x0f, 0x23, 0x6f, 0xd1, 0x80, 0x90, 0x53, 0x12, 0xfd, 0x25, 0x12, 0x77, 0x15, 0xbf, 0x5d, 0x96, 0xcf, 0xd2, 0x4c, 0x3d, 0xb0, 0x95, 0x7c, 0x1c, 0xb8, 0xd4, 0x64, 0x03, 0x8d, 0xaf, 0xa4, 0x11, 0x90, 0xab, 0x18, 0x27, 0x52, 0xcc, 0xb4, 0xef, 0x8f, 0xa3, 0x14, 0x4f, 0x63, 0x50, 0xe9, 0x68, 0x87, 0x6a, 0xd2, 0xc2, 0x77, 0xb6, 0x43, 0x1d, 0xf6, 0xff, 0x02, 0x94, 0xd3, 0x44, 0xc3, 0x16, 0xae, 0x77, 0x11, 0xd1, 0xb3, 0xb2, 0x3e, 0x92, 0x40, 0xd0, 0x23, 0xbe, 0x6b, 0x9c, 0xa4, 0xdb, 0x3b, 0x93, 0xac, 0xbb, 0xdb, 0x8a, 0xa9, 0xa7, 0xc5, 0x92, 0xaa, 0xbe, 0xb4, 0xbe, 0xde, 0x4e, 0x2d, 0xa3, 0xf4, 0x29, 0x9a, 0xc2, 0x7a, 0xdb, 0xe9, 0xca, 0xbe, 0x4c, 0x5f, 0x67, 0xf2, 0x9c, 0x12, 0xad, 0x8a, 0x35, 0xd8, 0xbb, 0xb0, 0xaf, 0xc9, 0xb6, 0x9f, 0xa1, 0x53, 0xb5, 0x87, 0x7a, 0xf9, 0x2d, 0x96, 0x6e, 0x6c, 0x5f, 0xac, 0x18, 0x9d, 0x4e, 0x6a, 0xa2, 0x12, 0xa9, 0xff, 0x99, 0x15, 0xa9, 0x02, 0x11, 0xcb, 0xbe, 0x8b, 0x7a, 0x20, 0x2e, 0xce, 0xd2, 0xa5, 0x46, 0x23, 0xc0, 0x2c, 0x49, 0xaa, 0xd2, 0x6b, 0xac, 0x8c, 0x47, 0x47, 0xe8, 0x01, 0xa9, 0x99, 0x52, 0xd5, 0x24, 0x53, 0x59, 0xa0, 0xa6, 0xab, 0x53, 0xd8, 0xd3, 0xd5, 0xa8, 0x15, 0x27, 0x58, 0xfc, 0x52, 0x56, 0x4c, 0xb3, 0x3d, 0x1e, 0x39, 0xcf, 0xfb, 0x1d, 0x31, 0xc2, 0x97, 0xf5, 0xaa, 0xcd, 0x93, 0x75, 0x1d, 0xf2, 0x56, 0x42, 0x44, 0x47, 0xfb, 0x4a, 0xe1, 0xcf, 0x6c, 0x1e, 0xdf, 0xb5, 0x64, 0x07, 0x9d, 0x64, 0x53, 0x56, 0x4e, 0xa9, 0x52, 0x0e, 0xed, 0x19, 0x19, 0x24, 0xe3, 0x0a, 0xfb, 0xd1, 0x5e, 0xc2, 0x9f, 0xcc, 0x2d, 0xc6, 0xeb, 0xc2, 0x89, 0x91, 0x20, 0x6b, 0x8c, 0x29, 0x0f, 0x83, 0xa2, 0xf8, 0x0c, 0x54, 0xdf, 0x1c, 0x80, 0x6a, 0x7e, 0x03, 0x43, 0xf1, 0x31, 0x48, 0x2d, 0xb3, 0xfe, 0xec, 0x0c, 0xf2, 0x9c, 0x99, 0x88, 0x6b, 0xd5, 0x2f, 0xed, 0x0f, 0x17, 0xdf, 0x52, 0x0d, 0xd5, 0x92, 0x4d, 0x5c, 0x4c, 0xa7, 0x0a, 0x07, 0xf7, 0xbf, 0xf8, 0x66, 0xd8, 0x21, 0x66, 0x45, 0x74, 0x1f, 0xf7, 0xdc, 0xec, 0x81, 0x1c, 0x29, 0xd3, 0x35, 0x9e, 0xad, 0x9a, 0xd8, 0x3b, 0x73, 0x36, 0x56, 0xf7, 0x3e, 0xb4, 0x1f, 0x25, 0x74, 0xe3, 0x4b, 0x03, 0x61, 0x8d, 0xb8, 0x41, 0xc2, 0xd9, 0xc3, 0x56, 0xe6, 0xcf, 0xf8, 0x1d, 0x0c, 0xba, 0x89, 0xc9, 0x3c, 0x4a, 0x20, 0xd1, 0x97, 0xf4, 0xa2, 0x87, 0xd6, 0xff, 0x88, 0x56, 0x44, 0x5c, 0x09, 0x7f, 0x91, 0xbc, 0x55, 0xca, 0x56, 0xd8, 0xa8, 0x7d, 0xac, 0x8d, 0x3f, 0x91, 0x76, 0x6f, 0xef, 0x9c, 0x4a, 0xfb, 0x00, 0x1a, 0xf6, 0x37, 0x67, 0x2a, 0xf9, 0xc1, 0xd0, 0xb1, 0x77, 0x83, 0xdb, 0x01, 0x65, 0x5a, 0x8f, 0xfc, 0xf6, 0x2c, 0x0f, 0xd2, 0xd8, 0x26, 0xc8, 0xc2, 0x95, 0xdb, 0x94, 0xd7, 0x29, 0x1f, 0x7c, 0xf7, 0x34, 0x71, 0x5d, 0x9c, 0x4f, 0x9d, 0xba, 0x74, 0x33, 0x80, 0x79, 0x6a, 0x10, 0x44, 0x66, 0xe7, 0xd2, 0x8a, 0xb3, 0xa9, 0x7a, 0x1a, 0xb6, 0x5e, 0x22, 0xdb, 0x65, 0xd6, 0x68, 0xc4, 0x12, 0xa7, 0xfd, 0x26, 0xba, 0x47, 0xaa, 0xf0, 0x5a, 0x7c, 0xad, 0xc7, 0x55, 0xd4, 0xb7, 0x01, 0x67, 0x8f, 0x8e, 0xf1, 0x13, 0x73, 0x18, 0x7e, 0x4d, 0x16, 0x3d, 0x16, 0x3b, 0xe8, 0x98, 0xde, 0xc2, 0xd9, 0x88, 0x4e, 0xd1, 0x5f, 0xd0, 0x59, 0x69, 0xbc, 0xde, 0x8c, 0x42, 0x70, 0x43, 0x78, 0xb2, 0x4b, 0x1f, 0x35, 0x23, 0x3d, 0xa1, 0x39, 0xe1, 0xa2, 0x73, 0x66, 0xc6, 0x5f, 0x58, 0x31, 0x07, 0xba, 0x49, 0x61, 0x56, 0xd6, 0x3a, 0xee, 0x27, 0x56, 0xb4, 0x2a, 0xdc, 0x39, 0x72, 0xe9, 0xc8, 0xb9, 0x28, 0xd6, 0x92, 0x8c, 0x5c, 0x6a, 0x1e, 0x7e, 0x5d, 0xe1, 0x78, 0x89, 0xa7, 0x99, 0x49, 0x76, 0x99, 0x10, 0xe7, 0x45, 0x56, 0x97, 0xbb, 0x39, 0xaf, 0x4b, 0xeb, 0x8c, 0xc6, 0xc0, 0x3d, 0x00, 0x27, 0x7d, 0x6b, 0xcc, 0xe4, 0xbe, 0x35, 0x1c, 0x98, 0x0f, 0xe6, 0x6a, 0xc2, 0xdc, 0x73, 0x7c, 0x1b, 0x0c, 0xab, 0x49, 0x6b, 0x01, 0x73, 0x9a, 0x91, 0xc4, 0xe7, 0x13, 0x8c, 0x22, 0x68, 0x59, 0xcd, 0x8f, 0xb8, 0xf4, 0x15, 0x9f, 0xca, 0xef, 0x23, 0x56, 0x65, 0x24, 0x66, 0xff, 0x2d, 0x95, 0xec, 0x9e, 0x9e, 0x09, 0x5b, 0x04, 0x70, 0x9e, 0xcd, 0xb9, 0xcf, 0x10, 0x2b, 0x44, 0xc4, 0x1e, 0x7f, 0xcd, 0xfd, 0xef, 0xbe, 0xe1, 0xf4, 0x88, 0xb9, 0x60, 0x38, 0x70, 0x3f, 0xe1, 0x70, 0x4d, 0x9c, 0xce, 0x38, 0x1b, 0x01, 0x5e, 0x77, 0xe9, 0x59, 0x1b, 0xb4, 0x98, 0x13, 0xeb, 0xb5, 0xc1, 0x6e, 0xbb, 0x82, 0x99, 0x11, 0x0b, 0xa5, 0x16, 0x9b, 0x14, 0x09, 0xb7, 0x85, 0x68, 0x58, 0xf4, 0xab, 0xfe, 0x17, 0x91, 0x8a, 0x21, 0xe5, 0xb4, 0x3b, 0x69, 0xa7, 0x73, 0x85, 0xcc, 0xea, 0xf9, 0x59, 0x38, 0x2b, 0x55, 0x0f, 0x8b, 0xc6, 0x1a, 0x67, 0x3b, 0xd1, 0x88, 0x77, 0xec, 0x4e, 0xd0, 0xdb, 0xe1, 0x06, 0x05, 0xca, 0xc2, 0x64, 0x50, 0xb3, 0x4b, 0x8b, 0x65, 0xbe, 0x1f, 0x58, 0x21, 0x7f, 0x95, 0x6a, 0x9d, 0x83, 0xd2, 0xe4, 0x48, 0xe6, 0x5d, 0xcc, 0x4f, 0x33, 0xce, 0x93, 0x64, 0xcc, 0x84, 0xfc, 0xe4, 0x8e, 0xf7, 0x06, 0x92, 0x1d, 0xb0, 0x57, 0x79, 0xdc, 0xee, 0x11, 0x0d, 0xeb, 0x55, 0x3e, 0x96, 0x87, 0xa9, 0x6f, 0x13, 0x96, 0xfd, 0x15, 0x1f, 0x9a, 0x0a, 0xa7, 0x88, 0x23, 0xf3, 0x96, 0xc5, 0x97, 0xd2, 0xa9, 0x23, 0x5d, 0x07, 0xab, 0x62, 0x99, 0xfa, 0xf6, 0x39, 0x4e, 0x65, 0x8d, 0xc9, 0xc5, 0x35, 0x06, 0xe9, 0x9d, 0x07, 0x39, 0x2b, 0x5c, 0x35, 0x84, 0x39, 0x36, 0x07, 0x62, 0x94, 0x23, 0x39, 0x8a, 0x5a, 0x5e, 0x17, 0x5b, 0xfa, 0xed, 0x15, 0x75, 0x5f, 0x37, 0xae, 0x50, 0xc5, 0xfd, 0xb4, 0x9b, 0x05, 0x7c, 0x97, 0xb1, 0x03, 0xb8, 0x94, 0x8f, 0xd4, 0xea, 0x33, 0x43, 0x33, 0x64, 0x80, 0xb1, 0x3e, 0x28, 0x36, 0xf3, 0x51, 0x98, 0x4f, 0xa3, 0x80, 0xf8, 0xfd, 0xdb, 0x37, 0xa6, 0x2d, 0x47, 0xfc, 0x36, 0xb8, 0x9b, 0xa0, 0x0c, 0x25, 0xd1, 0xb7, 0x67, 0x07, 0x50, 0x46, 0x66, 0xbb, 0x8b, 0xac, 0xec, 0x49, 0xc9, 0x12, 0x53, 0x3b, 0x15, 0x6e, 0x9e, 0x3b, 0xbb, 0xc1, 0x6d, 0x4c, 0xed, 0x5f, 0xb2, 0xbd, 0x03, 0x05, 0x36, 0xb1, 0x1f, 0xc4, 0x73, 0x8a, 0x36, 0x38, 0xe2, 0x1d, 0xb2, 0xb4, 0x42, 0xf4, 0x38, 0x9b, 0xd8, 0x9c, 0xcb, 0x8a, 0x41, 0x1e, 0x78, 0x2f, 0x98, 0x01, 0x69, 0x86, 0x18, 0x9c, 0x2e, 0x74, 0x87, 0xf5, 0x45, 0xb9, 0x90, 0xe9, 0x3d, 0x09, 0x66, 0x49, 0x57, 0x34, 0x1d, 0xca, 0xde, 0x2f, 0x7d, 0xbf, 0xf4, 0x51, 0x94, 0x84, 0xf2, 0x32, 0x76, 0x76, 0x35, 0xe8, 0x8b, 0xd4, 0x07, 0x4a, 0x66, 0x7b, 0x20, 0x8b, 0xd9, 0x44, 0xca, 0xaa, 0x69, 0x06, 0xe3, 0x0a, 0x28, 0xcc, 0xb0, 0x94, 0xbf, 0xbb, 0x57, 0xd4, 0xa4, 0xbc, 0x2d, 0x6c, 0x5a, 0xa3, 0x5a, 0x4b, 0xbb, 0xc7, 0x87, 0xd7, 0x06, 0x57, 0x23, 0xe5, 0x52, 0x5a, 0xa1, 0xc8, 0x74, 0xcc, 0x36, 0x1a, 0xdf, 0xa5, 0xc7, 0x51, 0x30, 0x27, 0x7f, 0x7a, 0xfa, 0x8b, 0xa3, 0x47, 0xbb, 0xe6, 0xa6, 0x98, 0x8c, 0xd4, 0x53, 0x73, 0x70, 0x2b, 0xe2, 0xbd, 0x22, 0x39, 0x59, 0x68, 0xc7, 0x8a, 0xce, 0x20, 0xb0, 0xde, 0x51, 0xa3, 0x35, 0x4e, 0xcf, 0x69, 0x4d, 0x44, 0x4b, 0x62, 0x2a, 0x49, 0x4f, 0x7c, 0xaa, 0x6f, 0xbb, 0x1d, 0x42, 0x5e, 0xe4, 0x1b, 0x04, 0x71, 0x3a, 0xd1, 0x73, 0x82, 0xe8, 0xef, 0xae, 0xff, 0x98, 0x28, 0xf4, 0xb4, 0x17, 0xc0, 0xac, 0x03, 0xeb, 0x62, 0xec, 0xed, 0x75, 0xef, 0xbd, 0x69, 0xc3, 0x98, 0xdf, 0xbc, 0xe9, 0xfb, 0xd9, 0x16, 0xb0, 0x2c, 0xe6, 0xb3, 0x00, 0xf1, 0xd9, 0x70, 0xf0, 0x8d, 0xe8, 0x57, 0x53, 0xe3, 0x9b, 0x21, 0x29, 0x69, 0x31, 0x69, 0x8d, 0xca, 0xc4, 0xb2, 0xcd, 0x48, 0xf9, 0xc4, 0xe8, 0x3b, 0x07, 0xb6, 0x80, 0xbf, 0xef, 0x05, 0xe4, 0xcc, 0x17, 0x83, 0xa1, 0x7a, 0x5d, 0xff, 0x86, 0x45, 0x2a, 0x6b, 0x3c, 0xd8, 0x15, 0xc9, 0xb2, 0x36, 0x29, 0x39, 0x2f, 0xa6, 0x9c, 0x6f, 0xe9, 0xda, 0x02, 0xd1, 0x0c, 0x17, 0xd2, 0x56, 0x57, 0x05, 0xb6, 0x2c, 0x80, 0xd8, 0xe2, 0x53, 0xb8, 0x63, 0xe2, 0x28, 0x0c, 0xdf, 0x66, 0xfb, 0x1c, 0x98, 0x3b, 0xf3, 0xa3, 0xee, 0x70, 0x81, 0x1f, 0x31, 0x2c, 0xe0, 0xe2, 0xde, 0x89, 0x11, 0x87, 0x73, 0xf9, 0x4a, 0x59, 0x5e, 0xd5, 0x97, 0x86, 0x57, 0x47, 0x94, 0xfd, 0xea, 0x76, 0xc8, 0x5d, 0x0e, 0xbe, 0x17, 0xc0, 0xed, 0x2c, 0xa6, 0x9d, 0x62, 0x09, 0xd4, 0xfe, 0x20, 0x8e, 0x45, 0xd8, 0xa6, 0x60, 0x01, 0x8e, 0x63, 0xec, 0xed, 0x43, 0x58, 0x4f, 0xec, 0xc1, 0xac, 0x50, 0x3c, 0x0d, 0x2b, 0xbe, 0xdf, 0x03, 0xe0, 0x56, 0xb0, 0x8f, 0x7b, 0x84, 0x4e, 0xe2, 0x1f, 0xed, 0x1a, 0xff, 0xdb, 0x1b, 0xf6, 0xfc, 0xcd, 0x10, 0x99, 0xcc, 0x47, 0xcb, 0xa5, 0xe1, 0x75, 0x49, 0xaf, 0x45, 0xb8, 0x59, 0xaa, 0x72, 0x29, 0x6b, 0xab, 0xee, 0x69, 0x3b, 0xf2, 0xa4, 0x09, 0xcc, 0x23, 0x1b, 0x71, 0x38, 0xd3, 0x15, 0xba, 0x36, 0xa2, 0xec, 0x8a, 0xd3, 0xdc, 0x0d, 0xae, 0x09, 0x6b, 0xa2, 0x11, 0xc9, 0x9c, 0xcc, 0xaf, 0x2c, 0x2d, 0x3f, 0x1d, 0xe1, 0x23, 0xd3, 0x2b, 0x70, 0x30, 0xdd, 0x07, 0x84, 0xc0, 0xd4, 0x59, 0x8c, 0x4e, 0x60, 0xed, 0x46, 0xcd, 0x04, 0xd6, 0xfa, 0x69, 0x7e, 0xe4, 0x96, 0xb1, 0x07, 0xc6, 0x62, 0x3c, 0xdb, 0xb1, 0xe7, 0xfd, 0x60, 0x61, 0xed, 0xc2, 0xb5, 0xf9, 0x50, 0xd7, 0xa1, 0xae, 0xed, 0x6b, 0xeb, 0xb3, 0x82, 0x76, 0xa1, 0x3b, 0x62, 0x50, 0xd6, 0x72, 0x2c, 0x5d, 0x32, 0x24, 0x28, 0xb0, 0xa5, 0xbc, 0xea, 0x21, 0x7b, 0xa2, 0x2e, 0xb8, 0x54, 0x49, 0x74, 0xb7, 0xc7, 0x91, 0xa0, 0x30, 0xd4, 0xc2, 0x6a, 0x6e, 0x41, 0xc3, 0x88, 0xad, 0xc8, 0x61, 0x3b, 0x0d, 0xc9, 0x36, 0x7e, 0x75, 0x5c, 0x99, 0x51, 0x11, 0x4c, 0xd5, 0x93, 0xaa, 0xc9, 0xcd, 0x6b, 0x7a, 0xc8, 0x9b, 0xb2, 0x48, 0xa5, 0x86, 0x8b, 0x82, 0x38, 0x4e, 0x48, 0xb7, 0x90, 0x96, 0xb0, 0xd2, 0xf9, 0xdd, 0x2a, 0x1a, 0xcf, 0x02, 0x66, 0x77, 0xc3, 0x30, 0xd5, 0x0f, 0x89, 0x9d, 0xe1, 0x64, 0xb9, 0x13, 0x18, 0xf7, 0x95, 0xde, 0x5f, 0xc9, 0x3a, 0x3a, 0x7c, 0xff, 0xcc, 0xeb, 0x33, 0xaa, 0x26, 0x77, 0xa6, 0xe6, 0x36, 0xcd, 0x9d, 0xe5, 0x32, 0xf6, 0x68, 0x43, 0xb2, 0x0e, 0x55, 0x22, 0xd2, 0xe8, 0xa8, 0x4e, 0x8c, 0xd3, 0x73, 0x2a, 0xd9, 0x49, 0xd2, 0x38, 0x5b, 0x94, 0xfe, 0xb5, 0x43, 0xd9, 0xf7, 0x3c, 0x07, 0xf0, 0x1f, 0x79, 0x0e, 0x12, 0xd5, 0xc8, 0x01, 0x9a, 0x14, 0x4f, 0x2d, 0xf9, 0xd5, 0xbd, 0xa1, 0x38, 0x9d, 0xd2, 0x53, 0x2a, 0x5c, 0x8b, 0x0d, 0xca, 0xd3, 0xc8, 0x6e, 0x08, 0xe7, 0x26, 0x28, 0x07, 0xa3, 0xff, 0xaf, 0x52, 0x5e, 0x85, 0x98, 0xd7, 0x51, 0xff, 0x51, 0x3f, 0x2b, 0x53, 0xa7, 0xf5, 0xcb, 0x27, 0x4b, 0x4e, 0x81, 0x79, 0x33, 0x51, 0x0e, 0xcd, 0x6e, 0xa4, 0x1c, 0x85, 0x19, 0x07, 0x4a, 0x47, 0x53, 0x0e, 0xec, 0x1b, 0x4f, 0xc4, 0x84, 0xf3, 0xcb, 0x73, 0xf0, 0x35, 0x6c, 0x55, 0x1a, 0xfd, 0x48, 0xd6, 0x3d, 0x9f, 0xca, 0x09, 0x9b, 0xa9, 0x14, 0xe2, 0xb6, 0x18, 0xaf, 0x3a, 0x48, 0xf3, 0xf9, 0x66, 0xb2, 0x5a, 0x37, 0xc9, 0xdd, 0x89, 0xb3, 0xf6, 0x2c, 0x18, 0xf8, 0xed, 0xef, 0xfe, 0xbe, 0x45, 0xd8, 0x4a, 0x49, 0xc3, 0xf6, 0x15, 0x33, 0x28, 0xf7, 0xb0, 0x3e, 0x99, 0x93, 0x89, 0x69, 0xf0, 0x8e, 0xe9, 0x63, 0x7e, 0xc6, 0xf5, 0xe8, 0x9a, 0x23, 0x6b, 0x82, 0x6b, 0xc3, 0x30, 0xbc, 0x3b, 0x88, 0x98, 0x15, 0xb1, 0x28, 0x23, 0x4e, 0xb8, 0xa4, 0x0a, 0xc5, 0x47, 0x8f, 0xfa, 0xd0, 0x69, 0x66, 0x39, 0x8b, 0x53, 0x65, 0x35, 0xd1, 0xb2, 0xea, 0xde, 0x84, 0x17, 0x54, 0xb1, 0x08, 0xd7, 0x6b, 0xc6, 0x05, 0xd8, 0x5b, 0x99, 0x1e, 0x9b, 0xc8, 0xf5, 0x14, 0x94, 0x15, 0xda, 0xc0, 0x78, 0xc1, 0x23, 0x64, 0x93, 0x18, 0x76, 0xa5, 0x62, 0xd5, 0x3d, 0x2e, 0x03, 0xe3, 0x0a, 0x38, 0xbf, 0x30, 0x01, 0xcb, 0x38, 0xc1, 0xf6, 0xc0, 0xb8, 0x04, 0xbe, 0xea, 0x3d, 0x1a, 0x13, 0x07, 0x68, 0x52, 0x29, 0x26, 0xe4, 0x27, 0xf0, 0x21, 0x22, 0xd1, 0xa8, 0x10, 0xe5, 0x8e, 0xbe, 0x7d, 0xe0, 0x19, 0xf0, 0x53, 0xcf, 0x4c, 0x8d, 0x92, 0x65, 0x4d, 0xd2, 0x0b, 0xec, 0xdf, 0x0a, 0xe6, 0x45, 0x39, 0xe4, 0x91, 0x80, 0x7a, 0x81, 0x56, 0x6c, 0x9c, 0x4b, 0x07, 0x13, 0x6b, 0x36, 0x9d, 0x8d, 0xc4, 0xce, 0x1f, 0xfa, 0x09, 0xae, 0x3c, 0x0e, 0x5c, 0xfb, 0x3c, 0xa4, 0xc3, 0xa6, 0xf4, 0x10, 0xd7, 0x26, 0xf1, 0x33, 0x2c, 0x4c, 0xd5, 0x93, 0xee, 0x40, 0xaa, 0x70, 0x2d, 0xd5, 0xa0, 0xdc, 0xf8, 0x3d, 0x65, 0x8d, 0xe4, 0xb6, 0x5b, 0xf3, 0x71, 0xb5, 0x2b, 0x24, 0xaf, 0x74, 0x28, 0x0b, 0x78, 0x58, 0x2b, 0xff, 0x9d, 0xd1, 0x6f, 0xd2, 0xc9, 0x30, 0xe1, 0x0a, 0xa0, 0xf7, 0x91, 0xcd, 0x5c, 0x13, 0x62, 0xa5, 0xed, 0xc8, 0x56, 0xb2, 0xf5, 0xcb, 0x35, 0xa9, 0x84, 0x6c, 0xfc, 0x62, 0x75, 0x43, 0x7a, 0xec, 0x2f, 0x9e, 0x70, 0x6c, 0xee, 0xb1, 0x32, 0x36, 0x56, 0x1a, 0x6d, 0x99, 0x7c, 0x52, 0x75, 0x1f, 0x8d, 0x8d, 0x83, 0x79, 0xc4, 0x43, 0x3e, 0x84, 0x49, 0x25, 0xd5, 0xbd, 0xb9, 0x50, 0x38, 0x21, 0x7f, 0x82, 0xd6, 0x27, 0xef, 0xe7, 0x3e, 0x7f, 0x10, 0xcf, 0xde, 0x9e, 0x4b, 0x7e, 0xdb, 0x06, 0x70, 0x4d, 0x07, 0x92, 0x8e, 0x36, 0x7b, 0xf0, 0x6d, 0x1c, 0x87, 0x76, 0xd0, 0x7d, 0x3f, 0x35, 0x85, 0xce, 0x81, 0xe0, 0xea, 0x88, 0x29, 0xe8, 0x09, 0xd3, 0x5a, 0xa9, 0x29, 0x3f, 0x23, 0xbf, 0xfd, 0x73, 0xe4, 0x6f, 0x6b, 0xd6, 0xae, 0xc8, 0xe0, 0xde, 0xe0, 0x10, 0x0e, 0x6b, 0x58, 0xf5, 0xb0, 0xe2, 0xab, 0x88, 0xf6, 0xdd, 0x40, 0xa1, 0x94, 0xaa, 0x9a, 0xee, 0x1d, 0x6b, 0xeb, 0xe9, 0xc4, 0xcf, 0x20, 0x15, 0xd0, 0x9e, 0x17, 0x8e, 0x60, 0xae, 0x4b, 0x60, 0x3d, 0x93, 0x59, 0xf5, 0xb0, 0x32, 0x12, 0x81, 0x44, 0x1f, 0xcf, 0x47, 0xae, 0xc8, 0xe1, 0xe1, 0xa7, 0x50, 0x16, 0xa4, 0x4a, 0xa1, 0x6e, 0x49, 0x5b, 0xce, 0xd6, 0xfe, 0xdd, 0xdd, 0x11, 0x6d, 0xb0, 0x2b, 0xbc, 0x4f, 0xca, 0xc1, 0x15, 0xc3, 0xcc, 0xfb, 0x64, 0x9a, 0x17, 0x0c, 0xb3, 0x91, 0x06, 0xcc, 0x2e, 0x87, 0xac, 0x69, 0x25, 0x8c, 0x17, 0x94, 0xf9, 0x0a, 0xc9, 0x71, 0xaa, 0x30, 0x89, 0x53, 0x56, 0x85, 0x0f, 0xbc, 0x2c, 0x6e, 0x71, 0x99, 0xeb, 0x08, 0xf6, 0x70, 0x98, 0xf7, 0x3f, 0xdb, 0x31, 0x32, 0x63, 0xdf, 0x6b, 0x59, 0xcf, 0x23, 0xf5, 0x24, 0x9f, 0xed, 0x42, 0x00, 0xbf, 0xcc, 0xc4, 0x6f, 0x5a, 0x54, 0xfe, 0xae, 0xfe, 0xae, 0x56, 0x10, 0x0a, 0x0e, 0xc7, 0x95, 0x9a, 0x57, 0x4b, 0xe6, 0x97, 0xf6, 0x47, 0xb2, 0x90, 0x2f, 0xd0, 0xfc, 0xe2, 0x34, 0x68, 0xc2, 0xba, 0x1d, 0xc8, 0x81, 0x37, 0x82, 0x60, 0x52, 0xf6, 0xe6, 0x4e, 0x90, 0x07, 0x43, 0xef, 0xe0, 0x88, 0x6e, 0x07, 0xe1, 0x55, 0xb3, 0x8b, 0xed, 0x29, 0xb1, 0x73, 0xa7, 0x09, 0x55, 0x7d, 0xa3, 0xf1, 0x59, 0x54, 0xf5, 0x6d, 0x25, 0xaf, 0x7a, 0x4a, 0xec, 0xee, 0x3f, 0x1b, 0xed, 0x84, 0xd1, 0xce, 0xdc, 0xad, 0x29, 0x6c, 0xa2, 0x9a, 0x58, 0x54, 0x1b, 0xe2, 0xd5, 0xbd, 0xdb, 0xd7, 0x2c, 0x9a, 0x63, 0x35, 0xb9, 0x0c, 0x8a, 0x9e, 0x3d, 0x4b, 0x21, 0xab, 0xec, 0xdd, 0x5c, 0x9f, 0x13, 0x36, 0x2a, 0x31, 0x2a, 0xa5, 0x24, 0x45, 0xa7, 0xde, 0xfa, 0x0a, 0xcd, 0x91, 0x1d, 0xab, 0xdb, 0x55, 0x36, 0x95, 0x6f, 0xe3, 0x25, 0x33, 0x84, 0x4b, 0xf9, 0x9e, 0x69, 0xbe, 0xb1, 0xd8, 0xef, 0xf4, 0x58, 0xda, 0x18, 0xfe, 0x77, 0x5f, 0x06, 0xff, 0x35, 0x97, 0xe0, 0x3f, 0x2f, 0x5b, 0xcd, 0x6b, 0xf5, 0x95, 0x41, 0xd9, 0x9b, 0x96, 0xd9, 0x4c, 0xc8, 0xe1, 0x7b, 0xd3, 0x6c, 0x7f, 0x99, 0xed, 0x2c, 0x26, 0xac, 0xe8, 0x21, 0x4d, 0x13, 0x51, 0x76, 0x39, 0xc5, 0x65, 0x17, 0xbe, 0xb6, 0x4e, 0xef, 0xdb, 0x0c, 0x18, 0x76, 0x7a, 0x54, 0x18, 0x4a, 0x4f, 0x2c, 0xf4, 0xcc, 0x98, 0x50, 0xdd, 0x66, 0x60, 0xab, 0xc2, 0x84, 0xd4, 0x89, 0x17, 0xed, 0x5b, 0xdf, 0x75, 0xe9, 0xa9, 0x53, 0x82, 0x13, 0xce, 0x41, 0x1c, 0xcc, 0x66, 0x1c, 0x47, 0x30, 0xe1, 0x83, 0x22, 0x87, 0x71, 0x1b, 0xf9, 0x9f, 0x44, 0x1b, 0x94, 0x7d, 0xcb, 0xc4, 0x19, 0x90, 0x22, 0xab, 0xa4, 0xa8, 0x21, 0x61, 0x51, 0x6c, 0x7a, 0x99, 0x80, 0x79, 0x14, 0x25, 0xf7, 0xeb, 0x13, 0xf2, 0x0b, 0xc6, 0x1b, 0xed, 0xca, 0x0e, 0xac, 0xd6, 0x32, 0x53, 0xbe, 0x28, 0x65, 0x8f, 0x91, 0x62, 0x54, 0x16, 0x60, 0xe7, 0x71, 0x42, 0xfa, 0x59, 0x0e, 0x3f, 0xb7, 0x40, 0x1e, 0xea, 0x6a, 0xa5, 0xd5, 0x7e, 0x8d, 0xd2, 0xdc, 0x69, 0xe3, 0x77, 0xe0, 0xe0, 0x7e, 0x9b, 0x47, 0x59, 0x67, 0x9f, 0x03, 0x13, 0xf6, 0x41, 0xda, 0xba, 0x99, 0xff, 0x09, 0xab, 0x87, 0x41, 0x14, 0x2a, 0x3f, 0x35, 0x68, 0x92, 0x1e, 0x81, 0xb1, 0x16, 0x85, 0xee, 0x34, 0xf9, 0xcc, 0x74, 0xd9, 0x9a, 0xc4, 0xd8, 0x9e, 0x11, 0xbb, 0x17, 0x1e, 0xbb, 0xb9, 0x4c, 0x58, 0x71, 0xc7, 0xae, 0x78, 0xe3, 0x3d, 0x97, 0xaf, 0x9d, 0xcd, 0x33, 0xaa, 0x7e, 0x85, 0x38, 0x52, 0xdf, 0x65, 0x75, 0x4c, 0xac, 0x50, 0x87, 0xd8, 0x6e, 0x0a, 0x97, 0x1c, 0xd9, 0x4e, 0x54, 0xe6, 0x8a, 0xe4, 0x0a, 0x92, 0xaa, 0xa7, 0x99, 0xd5, 0x33, 0x47, 0xfe, 0x98, 0x53, 0x53, 0x60, 0x36, 0x27, 0x90, 0xd3, 0x14, 0x1d, 0xa4, 0x15, 0xd2, 0x82, 0xed, 0x3d, 0x23, 0x0f, 0x13, 0x9f, 0xc9, 0x76, 0x0d, 0x75, 0x87, 0x7a, 0x0e, 0x75, 0xf5, 0x6f, 0x37, 0x43, 0xc4, 0x3c, 0xef, 0x34, 0x98, 0x71, 0xe5, 0xd3, 0x22, 0x97, 0xf7, 0x80, 0xa4, 0xed, 0x7f, 0x3c, 0xa2, 0x0d, 0xf5, 0x6c, 0xef, 0x69, 0xb8, 0x40, 0x92, 0xfd, 0x77, 0x1e, 0xf8, 0xcd, 0xaf, 0x1d, 0xd8, 0xce, 0x7f, 0xff, 0xf5, 0xb4, 0x97, 0x76, 0x01, 0x72, 0x22, 0x8b, 0xd9, 0xaa, 0x6d, 0xa2, 0x7c, 0xb0, 0x05, 0xce, 0xd4, 0xbe, 0x2d, 0xae, 0x0b, 0x26, 0xf2, 0xd2, 0xdb, 0x89, 0xd2, 0x32, 0xf1, 0xa3, 0x6c, 0x77, 0xcd, 0x6d, 0x53, 0xa8, 0xf9, 0x68, 0xf9, 0x52, 0xe9, 0x23, 0x50, 0xf5, 0x54, 0x7c, 0x8e, 0x92, 0xb0, 0x81, 0x4e, 0xdc, 0x68, 0x2f, 0x9b, 0x64, 0xbb, 0xd2, 0x3f, 0x53, 0x9f, 0x30, 0xfd, 0x23, 0xea, 0x13, 0x1d, 0xf2, 0xc9, 0x56, 0x09, 0x54, 0xf7, 0xe0, 0x5a, 0xa2, 0x40, 0x54, 0x6d, 0xb0, 0x7a, 0xd8, 0xde, 0x33, 0xe6, 0x49, 0x39, 0x66, 0xe5, 0x12, 0xbe, 0xc6, 0x66, 0x53, 0x9e, 0x61, 0x50, 0xe5, 0xd3, 0x3e, 0x4c, 0x42, 0xa6, 0xac, 0xc0, 0x31, 0xfe, 0xb7, 0xb7, 0xfe, 0xed, 0xad, 0xd8, 0xd4, 0x32, 0x41, 0x37, 0x0b, 0x60, 0xbf, 0x1a, 0x21, 0xb2, 0x30, 0x54, 0x16, 0x0d, 0x07, 0xd6, 0x1f, 0x88, 0x67, 0x15, 0x83, 0x6a, 0xfb, 0x8b, 0x3a, 0x08, 0x9b, 0x89, 0xbb, 0x88, 0x6a, 0x89, 0x3b, 0x94, 0x74, 0xc1, 0xbf, 0x27, 0xab, 0x66, 0xa1, 0xf8, 0x8b, 0x03, 0x0d, 0xe7, 0x91, 0x4f, 0xdc, 0xca, 0x4e, 0x01, 0xec, 0xbc, 0x0d, 0x89, 0xfd, 0xbd, 0x24, 0x0f, 0xc5, 0xed, 0x56, 0x93, 0x05, 0xb2, 0x5d, 0xd8, 0x1f, 0xac, 0x64, 0xda, 0x7b, 0x1a, 0xb5, 0xd7, 0x47, 0x3c, 0x30, 0xe5, 0xe2, 0xbc, 0x74, 0xc7, 0x0f, 0xd3, 0x39, 0x62, 0xc2, 0xea, 0x6d, 0x0c, 0x23, 0x0c, 0x49, 0x99, 0xd3, 0x93, 0xea, 0x31, 0x75, 0x0f, 0xa3, 0x19, 0x86, 0x34, 0x59, 0x95, 0xb8, 0x0d, 0x3b, 0x0b, 0x55, 0xfa, 0xc1, 0xa5, 0xb2, 0x23, 0xf7, 0x9e, 0xf1, 0x09, 0xd9, 0xa2, 0x1b, 0x25, 0x4f, 0xb3, 0x3d, 0x41, 0xa6, 0x1b, 0x90, 0x90, 0xa9, 0xcf, 0x39, 0x32, 0x9d, 0xf3, 0x08, 0xc6, 0x86, 0xb5, 0x2c, 0xea, 0x94, 0xdf, 0xfe, 0xf7, 0xd7, 0x7e, 0xff, 0x80, 0x76, 0xb5, 0x2c, 0xcb, 0xf9, 0x52, 0xb6, 0x42, 0x33, 0x59, 0x8e, 0x94, 0x57, 0xcd, 0x4f, 0x58, 0xda, 0x8c, 0xfe, 0x9f, 0x34, 0x64, 0xd2, 0xae, 0x98, 0xe8, 0x2e, 0x84, 0xef, 0xac, 0xc6, 0x56, 0x1f, 0x49, 0xf6, 0x32, 0xe6, 0x32, 0x9f, 0xed, 0x5a, 0x05, 0xb1, 0x1f, 0xe9, 0xf6, 0x3a, 0xef, 0x8f, 0xd1, 0x71, 0xae, 0x59, 0x3a, 0x18, 0xb5, 0x27, 0xc5, 0xb9, 0x75, 0xba, 0xdb, 0x64, 0x94, 0x56, 0xb1, 0x3d, 0x3b, 0xa5, 0xdf, 0xaa, 0x36, 0xb1, 0x1e, 0xb3, 0x63, 0x2e, 0xdb, 0x18, 0x2f, 0x9b, 0xec, 0x2d, 0x16, 0x1e, 0x4a, 0xc3, 0x24, 0xda, 0x79, 0xf3, 0xf1, 0xf1, 0x19, 0xdd, 0x17, 0x54, 0x73, 0x6e, 0x37, 0x41, 0x4e, 0xdb, 0xd9, 0x50, 0x7f, 0xc6, 0x47, 0x81, 0xca, 0x44, 0x1c, 0x04, 0x49, 0x17, 0xbb, 0xa5, 0x4c, 0x90, 0x54, 0xb1, 0x06, 0x91, 0x4e, 0xb5, 0x8b, 0xab, 0x7b, 0x15, 0x5b, 0xd0, 0x8a, 0x26, 0x55, 0xfa, 0x08, 0xe0, 0x7b, 0x7a, 0xff, 0xe7, 0x5b, 0x3d, 0xbc, 0xdc, 0xe5, 0x50, 0x30, 0x83, 0x9f, 0x7a, 0x04, 0x97, 0x40, 0x56, 0xc4, 0x5c, 0xb3, 0x5a, 0x32, 0xa5, 0xf7, 0x61, 0xd5, 0x46, 0x0c, 0x01, 0xd8, 0xcb, 0xb1, 0x86, 0xe3, 0x04, 0x49, 0xee, 0x19, 0x9f, 0x60, 0x9f, 0xae, 0x6e, 0x30, 0x8a, 0x25, 0x07, 0x5f, 0x4b, 0xdb, 0xb7, 0xdd, 0x77, 0xc5, 0x5e, 0xed, 0xe1, 0x75, 0xbf, 0x7c, 0xaf, 0xa6, 0xed, 0x36, 0x77, 0x8c, 0xea, 0x4b, 0x8e, 0x7d, 0x96, 0x4b, 0x7a, 0xb1, 0x6a, 0x4c, 0x2f, 0xce, 0xb9, 0x5c, 0x2f, 0x56, 0x6d, 0xa4, 0x7c, 0x96, 0xbf, 0x7d, 0x04, 0x65, 0x3f, 0xa5, 0x37, 0x2b, 0x13, 0xd2, 0x5a, 0xa2, 0x2f, 0x99, 0x76, 0x80, 0x8a, 0x56, 0x04, 0xb2, 0xd6, 0x8c, 0xd4, 0xf1, 0x38, 0xf1, 0x18, 0x89, 0xbd, 0x26, 0xa4, 0x90, 0x46, 0xe4, 0x2f, 0x4c, 0xb4, 0x43, 0x7d, 0x57, 0x72, 0x77, 0xe7, 0xe6, 0xad, 0xa0, 0xeb, 0x19, 0xb5, 0x57, 0x4c, 0xd2, 0x8e, 0x4d, 0x77, 0x64, 0x1b, 0xd6, 0xbc, 0x84, 0x3c, 0xee, 0x94, 0x7c, 0x2a, 0x1f, 0x4f, 0xe3, 0xde, 0x29, 0xcc, 0xe8, 0x9b, 0xad, 0x3b, 0x3e, 0x7a, 0x57, 0x1e, 0x29, 0xe9, 0x71, 0xbe, 0x2f, 0x6f, 0x87, 0x05, 0x6b, 0xc8, 0x7b, 0xcc, 0x98, 0x3d, 0xf9, 0xea, 0xfe, 0x6d, 0xa0, 0x6b, 0x08, 0x5e, 0x71, 0x5f, 0x7e, 0x93, 0x1d, 0xeb, 0xf0, 0x9d, 0x35, 0x36, 0xcd, 0x91, 0x35, 0x47, 0x56, 0x4b, 0x59, 0x63, 0xf7, 0xca, 0x23, 0x1d, 0x09, 0x8c, 0x8f, 0x68, 0x29, 0xa7, 0xc6, 0x0f, 0x98, 0xa6, 0x67, 0x62, 0xb7, 0x9d, 0xb5, 0xc5, 0x89, 0x10, 0x37, 0xef, 0x0c, 0x00, 0x93, 0xd1, 0x0c, 0x53, 0x11, 0x2a, 0x00, 0x8a, 0x64, 0x63, 0xb2, 0xb7, 0x24, 0xce, 0xd4, 0xe6, 0x71, 0x5a, 0xb0, 0xc9, 0x4f, 0xb7, 0xd4, 0x4c, 0xec, 0xfc, 0x8b, 0xe2, 0x53, 0x67, 0x6e, 0x4a, 0x0c, 0x5b, 0xf5, 0xf4, 0x8c, 0x13, 0x50, 0xce, 0x88, 0x46, 0x68, 0x37, 0x90, 0xf3, 0x6c, 0x33, 0x79, 0x5f, 0x5a, 0x54, 0x9c, 0xc3, 0x18, 0xde, 0x68, 0xf5, 0x18, 0xb2, 0xc0, 0x85, 0x32, 0xc5, 0x3a, 0x9b, 0x7e, 0x53, 0xb7, 0xe8, 0x2b, 0xf9, 0x74, 0x64, 0x38, 0xe5, 0xd9, 0xfa, 0xab, 0x3e, 0xef, 0x9f, 0x0a, 0xc1, 0x67, 0x1f, 0x19, 0xe6, 0xfe, 0x3a, 0xee, 0x6d, 0x38, 0x1c, 0xdf, 0xb8, 0x4e, 0x0c, 0x8e, 0xb2, 0xb6, 0xd3, 0xe7, 0x43, 0xce, 0x26, 0xf7, 0x39, 0x30, 0x73, 0xfd, 0x8d, 0x91, 0x61, 0x76, 0xd6, 0x34, 0x21, 0xb5, 0x6a, 0x62, 0x5d, 0x0c, 0x23, 0x1f, 0x2b, 0x2b, 0xdf, 0x5b, 0x89, 0xb1, 0xb5, 0xd3, 0xfa, 0xeb, 0xbc, 0x2c, 0x45, 0x5f, 0x3e, 0xef, 0x53, 0xe4, 0x7b, 0x32, 0x97, 0x1f, 0x3a, 0xf2, 0x13, 0x65, 0x77, 0xd2, 0xc0, 0xd6, 0xf4, 0x82, 0xc4, 0x2a, 0x17, 0xb1, 0xd8, 0x69, 0xe7, 0x34, 0x93, 0x69, 0x8b, 0xd0, 0x3a, 0x68, 0x48, 0xac, 0x83, 0xc9, 0x73, 0x59, 0x1d, 0xae, 0x83, 0xe7, 0x91, 0xe6, 0x3b, 0x14, 0xda, 0x9b, 0xc9, 0xd6, 0xcc, 0x09, 0x98, 0x5f, 0xb2, 0xcc, 0xcc, 0x2d, 0xca, 0xee, 0xe1, 0x24, 0xd1, 0x83, 0xf3, 0x41, 0x47, 0xb7, 0x6b, 0x22, 0xca, 0x9e, 0x54, 0x2c, 0xbf, 0x8c, 0xee, 0x12, 0x9c, 0xc5, 0x71, 0x48, 0xee, 0x4a, 0xd2, 0x59, 0xe3, 0x6f, 0xde, 0x58, 0xae, 0xda, 0xf9, 0xb3, 0xcd, 0x10, 0x96, 0xf8, 0xfe, 0x38, 0xe7, 0xa2, 0x13, 0x1c, 0x77, 0xd8, 0x21, 0x35, 0xb0, 0x3b, 0x3a, 0x99, 0xcb, 0x47, 0x7e, 0x45, 0x67, 0xdf, 0xb3, 0x59, 0x2e, 0x4f, 0x23, 0x56, 0x8c, 0xe7, 0x7b, 0xf6, 0x09, 0xff, 0x05, 0x52, 0xb1, 0x6d, 0x02, 0x8e, 0xbe, 0x88, 0x6b, 0x21, 0xc3, 0x6a, 0x9b, 0x87, 0xed, 0xb6, 0xed, 0x17, 0x0b, 0x7a, 0x80, 0xce, 0x11, 0xc3, 0xbb, 0x5c, 0xb8, 0x8e, 0xf3, 0xba, 0x26, 0xb0, 0x2e, 0xb9, 0x43, 0xa1, 0xe7, 0xf3, 0x06, 0x69, 0xc2, 0xd9, 0xe5, 0xc2, 0x8f, 0x9f, 0x65, 0x54, 0x1f, 0x94, 0x76, 0xed, 0xbe, 0x18, 0x24, 0x0c, 0xd8, 0xf5, 0x2c, 0xb6, 0xc5, 0x82, 0x75, 0xe4, 0xa1, 0x9b, 0x12, 0xa7, 0x90, 0x61, 0xa3, 0x42, 0xbf, 0x9e, 0x65, 0xe9, 0xb7, 0x39, 0xe7, 0x52, 0x0b, 0x89, 0x1a, 0xd0, 0x59, 0x01, 0xdd, 0x7e, 0xe1, 0x9c, 0x28, 0x49, 0x09, 0x35, 0x5d, 0xcb, 0x85, 0x9d, 0x5d, 0x0d, 0x59, 0xa9, 0x14, 0xb1, 0x19, 0xd4, 0x1e, 0x38, 0x42, 0xe7, 0x35, 0xbf, 0xef, 0x71, 0x77, 0xca, 0xfd, 0x07, 0x07, 0x0e, 0x9e, 0xc6, 0x71, 0xd4, 0x61, 0xef, 0x1e, 0x52, 0xb8, 0x0a, 0xba, 0x9f, 0xa2, 0xd4, 0x65, 0x38, 0x5f, 0xf4, 0x70, 0x3e, 0x30, 0x6c, 0xe0, 0x3d, 0xf2, 0x2b, 0x2a, 0x37, 0x9f, 0x6b, 0x02, 0x21, 0x27, 0x9e, 0x6c, 0x9f, 0x3a, 0x73, 0x46, 0x40, 0x7e, 0xa7, 0x6a, 0x13, 0xe3, 0x95, 0x5a, 0xe5, 0x77, 0x30, 0x45, 0x56, 0x2a, 0xc5, 0xaf, 0x10, 0x3a, 0xd6, 0x20, 0x2d, 0x48, 0xd3, 0xfd, 0xd2, 0xf1, 0xb4, 0xec, 0xfc, 0xa6, 0x8f, 0x7a, 0x56, 0xd1, 0xc7, 0x63, 0xa1, 0x4a, 0x4f, 0x8b, 0x8a, 0x96, 0x58, 0x32, 0x2c, 0xd5, 0x12, 0x16, 0xa3, 0xf4, 0x0d, 0x5b, 0xf9, 0x81, 0x38, 0x1f, 0x9c, 0x33, 0xfd, 0x0a, 0x9e, 0x9e, 0x63, 0x73, 0x26, 0x41, 0x83, 0x14, 0x19, 0xc7, 0xd9, 0x4a, 0x7e, 0xf5, 0xba, 0xb6, 0x25, 0xf1, 0xc9, 0x40, 0xb6, 0xab, 0x15, 0x7e, 0x2a, 0x81, 0x4d, 0x99, 0x7c, 0x45, 0x72, 0x92, 0xcc, 0xf3, 0x6b, 0xc9, 0xec, 0xdb, 0x94, 0x80, 0x50, 0xf7, 0x70, 0x99, 0x9b, 0xc7, 0xd3, 0x89, 0x9c, 0x70, 0x31, 0x11, 0xa7, 0x7b, 0x9a, 0x46, 0xbd, 0xba, 0x37, 0x3c, 0x89, 0xc7, 0x26, 0xd3, 0x7c, 0xc6, 0xf2, 0xf9, 0x2d, 0xd2, 0xd7, 0x77, 0x18, 0x6d, 0x61, 0xa1, 0xfa, 0x7d, 0xc9, 0xf5, 0xcf, 0x3c, 0x16, 0x3e, 0xda, 0xe0, 0xa4, 0xdd, 0xab, 0xc7, 0x38, 0xde, 0x13, 0x9d, 0x30, 0x22, 0x7f, 0x22, 0x32, 0xbf, 0xba, 0x92, 0x81, 0x28, 0xbe, 0xaf, 0x5f, 0x07, 0xa1, 0xe7, 0xe4, 0x61, 0xd2, 0x82, 0x42, 0xbe, 0xd5, 0x3f, 0xef, 0x94, 0x7c, 0x92, 0xe0, 0x7e, 0x31, 0xd0, 0x70, 0xbc, 0xe4, 0x94, 0x7c, 0x80, 0xf4, 0x49, 0xa6, 0x3e, 0x07, 0x39, 0x9b, 0x21, 0x76, 0xee, 0xd0, 0x4f, 0xc4, 0x12, 0x94, 0xbe, 0x98, 0x34, 0x82, 0xe3, 0x7d, 0x6a, 0x94, 0x8e, 0xe1, 0x73, 0xf2, 0xb9, 0x1e, 0xc0, 0xd0, 0xd3, 0x63, 0x42, 0xcf, 0xb3, 0xd0, 0x33, 0x63, 0x42, 0x2f, 0xfe, 0x7f, 0xe4, 0xfd, 0x0d, 0x7c, 0x54, 0xd5, 0xb5, 0x30, 0x0e, 0xaf, 0x99, 0x4c, 0x86, 0x21, 0x0c, 0x71, 0x0c, 0x69, 0x1a, 0xd3, 0x14, 0x8f, 0xe3, 0x30, 0x0e, 0x93, 0x21, 0x33, 0xa6, 0x69, 0x9a, 0x86, 0x79, 0x61, 0x32, 0xf9, 0x60, 0x32, 0x84, 0x34, 0x1d, 0x28, 0x4d, 0x29, 0x8f, 0xf7, 0x14, 0xc3, 0x4c, 0xc4, 0x04, 0xa6, 0x31, 0xe5, 0xc9, 0xe5, 0xa6, 0xde, 0x49, 0x08, 0x18, 0x10, 0x25, 0x02, 0x72, 0x29, 0xf5, 0xfa, 0xfa, 0xf6, 0xf1, 0xb6, 0x88, 0xa8, 0x29, 0xa5, 0x5e, 0x6e, 0x2e, 0xd7, 0x27, 0x22, 0x5a, 0xb4, 0xd4, 0x1b, 0x10, 0x31, 0x52, 0xae, 0xa5, 0x5c, 0xaa, 0x88, 0xa8, 0x54, 0xd1, 0x22, 0x26, 0x39, 0xef, 0x5a, 0x6b, 0x9f, 0x33, 0x1f, 0x49, 0x50, 0xfa, 0xf1, 0x3c, 0xff, 0xf7, 0xf7, 0x7b, 0xe1, 0x97, 0x39, 0xe7, 0xec, 0xb3, 0xcf, 0xfe, 0x58, 0x7b, 0xed, 0xb5, 0xd6, 0xde, 0x7b, 0x7d, 0x90, 0xde, 0x23, 0xdc, 0x38, 0xe1, 0xf9, 0x9e, 0x98, 0x8f, 0xed, 0xd1, 0x4b, 0x44, 0x95, 0xd5, 0x48, 0xbb, 0xe6, 0x09, 0x5a, 0x8b, 0xdf, 0x5a, 0xcb, 0xbf, 0xb3, 0x81, 0x5a, 0xfb, 0x8b, 0x81, 0x65, 0xa7, 0x25, 0x9d, 0x38, 0x21, 0x23, 0x9a, 0x69, 0x02, 0xa2, 0xaa, 0xdf, 0x8a, 0xcb, 0x2b, 0x7e, 0x94, 0x54, 0x28, 0x25, 0x21, 0xc1, 0xa0, 0x74, 0x6e, 0x51, 0x69, 0xec, 0x0a, 0xda, 0xa3, 0x55, 0x21, 0x47, 0x12, 0x13, 0x41, 0xaf, 0xff, 0x93, 0xf5, 0xbc, 0xc7, 0xc1, 0x9a, 0x7b, 0x69, 0xef, 0x85, 0x9d, 0x71, 0x4e, 0xa6, 0xc2, 0x16, 0xf9, 0x2d, 0xe3, 0x0f, 0xe9, 0xc4, 0x70, 0xda, 0x36, 0xb6, 0x22, 0x85, 0xd1, 0x12, 0x15, 0xcf, 0x30, 0x4d, 0xe8, 0x95, 0xd6, 0x6d, 0x57, 0x57, 0x87, 0x94, 0x8b, 0xf1, 0xab, 0xf0, 0x5e, 0xca, 0xaf, 0xf1, 0x3b, 0xa6, 0xcf, 0x66, 0xb1, 0x52, 0x13, 0x1e, 0xc4, 0x78, 0xad, 0xc6, 0x3b, 0xaf, 0x76, 0xb1, 0xeb, 0x9a, 0x7a, 0x92, 0x62, 0xb2, 0x8b, 0xb5, 0x74, 0x03, 0xca, 0xba, 0x59, 0x58, 0x2a, 0xed, 0x52, 0x07, 0xc4, 0x49, 0xce, 0x15, 0x49, 0xa5, 0x89, 0x65, 0xac, 0xe3, 0x15, 0x60, 0x0f, 0x3e, 0xe4, 0x39, 0x49, 0xdb, 0x89, 0xd3, 0x56, 0x62, 0x79, 0xee, 0x29, 0x64, 0x63, 0x96, 0xbc, 0x3a, 0xc9, 0x3a, 0x11, 0x3f, 0xeb, 0xc1, 0xd5, 0x98, 0xf0, 0xc8, 0x73, 0xf5, 0xb8, 0x3b, 0x6a, 0xba, 0xc1, 0x7a, 0x07, 0x18, 0x7e, 0x71, 0x0e, 0x0c, 0x42, 0xa7, 0x49, 0xc8, 0x3b, 0xb4, 0x3e, 0x50, 0x75, 0x2e, 0x5d, 0x28, 0x6d, 0x17, 0x33, 0x25, 0x09, 0xb0, 0xc6, 0xc0, 0x23, 0xf6, 0xe0, 0x6b, 0x7f, 0xec, 0x01, 0x5b, 0xc6, 0xf1, 0xa7, 0xc0, 0xc3, 0x7e, 0x86, 0xdc, 0xfb, 0xee, 0xc5, 0x35, 0xfc, 0x4e, 0x8f, 0x17, 0x26, 0xf5, 0x75, 0xe2, 0xdd, 0xfd, 0x9e, 0xd9, 0x3d, 0x1c, 0xe9, 0x46, 0xb7, 0x46, 0x67, 0xd5, 0x65, 0xc2, 0x65, 0x38, 0x03, 0x8f, 0x40, 0x11, 0x58, 0x10, 0x8b, 0xfe, 0xf3, 0xe8, 0xbb, 0x8c, 0x45, 0xcd, 0x1a, 0x57, 0x16, 0x91, 0xe2, 0xbf, 0x5a, 0x0e, 0xb6, 0xaf, 0xfa, 0xc0, 0x4e, 0x7c, 0x12, 0xd7, 0x22, 0x4c, 0xbd, 0x68, 0x6f, 0x15, 0x29, 0x56, 0x1f, 0xae, 0x47, 0x42, 0x7f, 0xe8, 0x61, 0x0f, 0xb9, 0x81, 0x05, 0x17, 0x4d, 0x80, 0x9c, 0x3f, 0xa7, 0xfc, 0x43, 0x93, 0x4e, 0xd4, 0xfd, 0xf3, 0x83, 0xcb, 0x40, 0x37, 0x7d, 0xc6, 0x7c, 0x84, 0x81, 0x88, 0xa7, 0x52, 0xa7, 0xc6, 0xe7, 0x9b, 0x42, 0x9e, 0xf0, 0x15, 0x3d, 0xe5, 0xa6, 0x95, 0x93, 0xdf, 0x63, 0xc2, 0xbb, 0x79, 0xf8, 0x9d, 0x6a, 0x5b, 0xb8, 0x1b, 0x24, 0x9e, 0x01, 0x49, 0xed, 0x99, 0x41, 0xbb, 0xd7, 0xd9, 0x3c, 0x03, 0xc6, 0xa6, 0xe6, 0xf2, 0x0c, 0x18, 0x9b, 0x9a, 0x8f, 0xa9, 0x83, 0xe3, 0x52, 0xa9, 0x9f, 0x47, 0xc7, 0xa5, 0xd2, 0x09, 0x74, 0xd2, 0x79, 0x16, 0xa7, 0x99, 0xa8, 0xaf, 0xc9, 0x12, 0x0f, 0xc9, 0x07, 0xaf, 0x1f, 0xc6, 0x36, 0x67, 0xa7, 0xf4, 0xd0, 0x8b, 0xfd, 0x33, 0xa8, 0xfd, 0xab, 0x4d, 0xee, 0xdf, 0xa8, 0x95, 0xf2, 0x62, 0xff, 0x0c, 0xdc, 0xbf, 0x6c, 0xad, 0x7f, 0xd2, 0x94, 0x50, 0xac, 0x75, 0xf4, 0x60, 0xcc, 0xd6, 0xc9, 0x11, 0x9a, 0xb4, 0xa8, 0x19, 0xaa, 0x66, 0x98, 0x9d, 0xce, 0x19, 0x26, 0xf5, 0xad, 0x5d, 0x3e, 0x27, 0xbe, 0xa7, 0x91, 0x7a, 0xde, 0xe5, 0x44, 0xbe, 0xea, 0xa6, 0xc0, 0x76, 0x7c, 0x2a, 0xa9, 0x61, 0xde, 0x39, 0xc4, 0x18, 0xaf, 0xb4, 0x9b, 0xb5, 0x9d, 0x28, 0x26, 0x81, 0x31, 0x7a, 0x97, 0x90, 0xf3, 0x28, 0xea, 0x85, 0xc0, 0x7b, 0x96, 0x94, 0x2b, 0xb1, 0x8e, 0x00, 0x62, 0x4e, 0x2d, 0xe2, 0x7e, 0xbd, 0x5b, 0x5d, 0x0b, 0x0b, 0xfd, 0x79, 0xd5, 0xcf, 0x3e, 0x49, 0x5a, 0x43, 0xd6, 0xec, 0xbd, 0x58, 0x56, 0xd8, 0xd8, 0x6a, 0x44, 0x1e, 0xb4, 0x5b, 0xec, 0x55, 0xd3, 0x3e, 0xa3, 0x7d, 0x26, 0x8e, 0x7f, 0xda, 0x77, 0x3a, 0x49, 0x77, 0xf0, 0x95, 0x17, 0x83, 0x62, 0x85, 0xb2, 0xf1, 0x0f, 0xf7, 0x96, 0x5f, 0x2c, 0xed, 0xb3, 0x9b, 0x04, 0x14, 0x04, 0x0c, 0x16, 0xbc, 0x0f, 0x76, 0xe4, 0x4e, 0x08, 0x87, 0x91, 0x3c, 0x55, 0x22, 0xfc, 0x9a, 0xa9, 0x90, 0x46, 0xdb, 0xe2, 0x50, 0xa5, 0xc2, 0x5d, 0xac, 0xab, 0x91, 0x29, 0x64, 0x42, 0x2b, 0xdc, 0xd6, 0x69, 0xef, 0xa4, 0xf7, 0x45, 0xb8, 0xc6, 0x79, 0xe5, 0x1c, 0xcb, 0xb0, 0xf9, 0xd1, 0x2f, 0x56, 0xc3, 0x2f, 0x9e, 0x5d, 0x2e, 0xce, 0x07, 0x48, 0x96, 0x7d, 0x50, 0xd3, 0xe9, 0x97, 0x8b, 0x92, 0xf6, 0x05, 0x7e, 0xf3, 0xf3, 0x67, 0x23, 0xf6, 0x10, 0x7e, 0x6f, 0x9d, 0x46, 0xb3, 0x41, 0xdb, 0x7f, 0x93, 0x70, 0x1c, 0x59, 0x1f, 0xed, 0xb8, 0xa3, 0x07, 0x61, 0x62, 0x8a, 0x36, 0xca, 0x06, 0x2a, 0x91, 0xa0, 0xae, 0xfa, 0xc4, 0xe2, 0xf3, 0xdb, 0xb9, 0x71, 0x09, 0xd8, 0xd1, 0xc2, 0xbb, 0x6c, 0xb9, 0xce, 0x59, 0x90, 0x8f, 0x38, 0x91, 0xed, 0xef, 0xc5, 0xb1, 0x58, 0xb7, 0x9c, 0xe2, 0x26, 0x15, 0x80, 0x21, 0x75, 0x45, 0x99, 0x90, 0x4c, 0x75, 0x1e, 0x96, 0xc7, 0xee, 0x84, 0x7c, 0xa1, 0x75, 0x35, 0xaa, 0xea, 0x4f, 0xe0, 0xaa, 0x34, 0x17, 0x69, 0xb0, 0x81, 0xa5, 0x9d, 0x9c, 0xf8, 0x1a, 0x23, 0x59, 0xa6, 0xfd, 0x18, 0xd7, 0x92, 0xc4, 0x3b, 0x6a, 0xc5, 0x99, 0x0f, 0x9d, 0xe9, 0xcc, 0x7a, 0x92, 0x76, 0x88, 0xad, 0xbe, 0x57, 0x06, 0x48, 0x5a, 0xfd, 0xaf, 0x17, 0xa5, 0x92, 0x1d, 0xb4, 0xa2, 0xf8, 0x89, 0xc3, 0x1c, 0x5f, 0xe9, 0xcd, 0xab, 0xeb, 0x75, 0x8d, 0x97, 0x50, 0x76, 0xbb, 0xd3, 0xf9, 0x1c, 0x54, 0x5d, 0xf9, 0xd0, 0xc9, 0x81, 0xca, 0x27, 0xed, 0xec, 0xfb, 0xdb, 0x1d, 0xce, 0x46, 0x7e, 0x3f, 0xac, 0xd1, 0xe8, 0x5b, 0x78, 0x96, 0xf8, 0x7d, 0xfe, 0x6d, 0xea, 0x8a, 0x78, 0x85, 0x63, 0x91, 0x64, 0xe8, 0xdd, 0x74, 0x22, 0x36, 0x3e, 0x97, 0xb6, 0x46, 0x65, 0x49, 0x7a, 0xa5, 0x46, 0x1f, 0x08, 0x42, 0xa1, 0x5e, 0xd6, 0x47, 0x69, 0x94, 0x2a, 0x93, 0xf8, 0x1c, 0x9d, 0x40, 0x3d, 0x46, 0x27, 0x50, 0x8d, 0xa0, 0x94, 0xfa, 0x55, 0x59, 0x80, 0x20, 0x1f, 0xc7, 0xcb, 0x77, 0x97, 0x0e, 0x2b, 0xc7, 0x13, 0x3b, 0x34, 0xde, 0x04, 0xff, 0xc7, 0x11, 0x28, 0x08, 0x89, 0x7d, 0x17, 0x96, 0x39, 0x99, 0x5f, 0x8c, 0xcc, 0xb1, 0x01, 0x69, 0xb6, 0xf2, 0x19, 0x32, 0xeb, 0xef, 0xeb, 0xb6, 0xab, 0xd0, 0x48, 0x1b, 0xb3, 0x27, 0x0e, 0xba, 0x35, 0xe3, 0x4f, 0xa8, 0x79, 0x46, 0x1b, 0xb4, 0xf4, 0xa3, 0xc3, 0x34, 0xab, 0x69, 0xbf, 0x84, 0x4e, 0x0f, 0xe2, 0x58, 0x6b, 0x51, 0x3d, 0x0e, 0x23, 0xc7, 0x22, 0xbc, 0xbd, 0xb2, 0x4c, 0xcb, 0x2f, 0x76, 0x9e, 0x92, 0x4a, 0x6a, 0xb3, 0x23, 0x3e, 0xce, 0xa8, 0x80, 0xf6, 0xa4, 0x1c, 0xf1, 0x9d, 0x75, 0x2b, 0xe6, 0x98, 0x51, 0x03, 0x1d, 0x2e, 0x7a, 0xb7, 0x12, 0x2a, 0xdb, 0x0f, 0x0f, 0xf5, 0x50, 0x5d, 0xdc, 0xf2, 0x42, 0xda, 0xdf, 0x26, 0x1f, 0xa8, 0x0b, 0xc4, 0xbe, 0xb3, 0x29, 0x10, 0xdd, 0xa1, 0xd0, 0x1a, 0xda, 0x09, 0x6e, 0x83, 0x54, 0x19, 0x88, 0x9a, 0xf8, 0x69, 0x70, 0xdd, 0x0c, 0x1f, 0xc4, 0x92, 0x4a, 0x7f, 0x3b, 0xa5, 0xfe, 0xee, 0xa4, 0x37, 0xe7, 0x53, 0xde, 0xf4, 0x24, 0xbd, 0x79, 0x27, 0xe5, 0xcd, 0x26, 0xda, 0x03, 0x8e, 0x14, 0xa7, 0xc0, 0xe0, 0xd8, 0x67, 0xc0, 0xa0, 0x97, 0x60, 0xf0, 0xc9, 0x6d, 0x4c, 0xb1, 0x12, 0x65, 0xfe, 0xe7, 0x84, 0xfc, 0xe1, 0x34, 0xf2, 0x87, 0x33, 0xb2, 0xbe, 0xad, 0x91, 0xf7, 0x45, 0xbd, 0x89, 0x7d, 0x51, 0xaf, 0xc7, 0xe1, 0x86, 0xfc, 0x3c, 0x37, 0xdc, 0xe2, 0x36, 0x68, 0xfb, 0x6b, 0x25, 0x40, 0xb1, 0x79, 0x6e, 0xd7, 0xaf, 0xbe, 0x91, 0x62, 0xa0, 0xd9, 0x2a, 0xe9, 0xac, 0x18, 0x14, 0xd6, 0x88, 0x3d, 0x20, 0xdb, 0x59, 0xa3, 0x2c, 0x9d, 0xf6, 0xe0, 0x85, 0xae, 0x99, 0x55, 0x7f, 0xac, 0x0b, 0xff, 0x23, 0xbf, 0x39, 0xde, 0x79, 0x3c, 0x46, 0xbb, 0xfe, 0x93, 0x94, 0xfa, 0xcd, 0x9e, 0x8c, 0xde, 0xca, 0xa7, 0x7d, 0xcb, 0x8e, 0x31, 0x25, 0xd4, 0x6b, 0xda, 0xfc, 0xb5, 0xbf, 0x33, 0x7b, 0xc7, 0xf9, 0x10, 0xf7, 0xa9, 0xd1, 0xb5, 0xf8, 0x84, 0x06, 0xe7, 0x77, 0x1c, 0xcb, 0x50, 0x26, 0x75, 0xd2, 0xae, 0x2f, 0x72, 0xa2, 0xc1, 0xfa, 0xcd, 0xbc, 0xe6, 0x33, 0xdb, 0x78, 0x16, 0x4e, 0x20, 0x7d, 0x5d, 0x9a, 0x50, 0xfa, 0xba, 0x3c, 0xa1, 0xf4, 0x35, 0x2c, 0x24, 0x1f, 0x92, 0xf7, 0xa4, 0xc9, 0x42, 0x6a, 0x0a, 0xa2, 0x64, 0x15, 0x29, 0xe6, 0x3d, 0x5d, 0x92, 0x5d, 0xcc, 0x75, 0xdb, 0xe3, 0x6b, 0xec, 0x15, 0xf1, 0xfd, 0x5c, 0x4c, 0x27, 0xef, 0x39, 0x36, 0x4d, 0x8e, 0x07, 0xa5, 0x5d, 0xae, 0x47, 0x29, 0xf1, 0x63, 0x92, 0x12, 0xe3, 0x6d, 0xf8, 0xd3, 0xf8, 0x36, 0x50, 0x59, 0xdf, 0xec, 0x49, 0x6d, 0x41, 0x52, 0x5d, 0x09, 0x7b, 0x13, 0x50, 0xe7, 0x9e, 0x7a, 0x86, 0xa3, 0xea, 0x0c, 0x99, 0xc9, 0x73, 0xab, 0x7f, 0xeb, 0x2d, 0x2b, 0xa0, 0x03, 0x0c, 0xf8, 0x7b, 0x96, 0x3d, 0x70, 0x3b, 0x75, 0x31, 0xab, 0x13, 0x2e, 0x6e, 0x89, 0xdd, 0x52, 0x0e, 0x66, 0x4c, 0xbd, 0x80, 0xd8, 0xeb, 0x44, 0xec, 0x25, 0xdb, 0x3a, 0xf5, 0x24, 0x8e, 0xfd, 0x4f, 0xf0, 0xa9, 0xd3, 0x2d, 0xb8, 0x1a, 0x46, 0x9c, 0x89, 0x25, 0x79, 0x6b, 0xc8, 0x90, 0x9c, 0x3a, 0x88, 0xe1, 0x17, 0x74, 0xa6, 0x71, 0x0b, 0x9d, 0x42, 0x39, 0xc1, 0x77, 0xb6, 0x07, 0xef, 0xf2, 0xa3, 0xba, 0x5b, 0xc8, 0x06, 0x0f, 0x84, 0x4e, 0x51, 0x8a, 0x4d, 0x8a, 0x13, 0xce, 0x05, 0x9f, 0x82, 0xec, 0x48, 0xa9, 0x15, 0x42, 0x9d, 0x33, 0xca, 0xf1, 0x29, 0x16, 0x6e, 0x1c, 0x53, 0xf2, 0x22, 0x6d, 0x2f, 0xb6, 0xa2, 0x5b, 0xb5, 0x7b, 0xc1, 0xfb, 0xb9, 0x41, 0x96, 0xaf, 0x4a, 0x91, 0x02, 0x14, 0x2f, 0xa4, 0xdd, 0xcd, 0x73, 0x61, 0x17, 0x7d, 0x27, 0xde, 0x96, 0x7b, 0x51, 0xb6, 0x83, 0x48, 0xb6, 0x96, 0x7b, 0x9e, 0x35, 0x6a, 0x40, 0x99, 0xfd, 0x08, 0xca, 0xfa, 0xc6, 0xd6, 0x4f, 0x91, 0xfa, 0x1d, 0x89, 0x42, 0xdc, 0xaa, 0xc5, 0x4b, 0x3c, 0x18, 0x5b, 0x63, 0xd3, 0xec, 0xd1, 0xc4, 0x0e, 0x90, 0x9c, 0xc5, 0x67, 0x81, 0x19, 0xaa, 0x34, 0x6a, 0xf9, 0xf7, 0x5f, 0x47, 0x0c, 0xd2, 0x97, 0xc2, 0xe7, 0x6d, 0x09, 0x0b, 0x34, 0x91, 0x6f, 0x85, 0xaa, 0xeb, 0x1e, 0xb7, 0x40, 0x8b, 0x2c, 0x55, 0xcf, 0xee, 0x7f, 0xa6, 0xbe, 0xe1, 0xef, 0xdb, 0xa1, 0x0d, 0xe4, 0xe9, 0xb4, 0x9b, 0x2d, 0xdd, 0x1a, 0x80, 0x86, 0x6e, 0xcc, 0x97, 0x9f, 0xa8, 0x21, 0xd4, 0x25, 0x6c, 0x5c, 0x10, 0x87, 0x4c, 0x0b, 0x63, 0x7d, 0x5d, 0xcb, 0x4e, 0x24, 0x2c, 0x4a, 0x6c, 0x88, 0x2d, 0x9a, 0xdd, 0x59, 0x78, 0x8b, 0x88, 0xb3, 0x94, 0x8c, 0xe1, 0x36, 0xd6, 0x29, 0x25, 0x69, 0x5b, 0xb3, 0x26, 0x93, 0xe2, 0xd4, 0x51, 0xff, 0x08, 0xae, 0xb1, 0xcd, 0xd6, 0x27, 0x20, 0x9b, 0xae, 0x37, 0xaf, 0x80, 0x4b, 0x60, 0x8a, 0x9f, 0xbc, 0x98, 0xc5, 0x6e, 0x25, 0x72, 0xdb, 0x4b, 0xfc, 0x24, 0xec, 0xcd, 0xf2, 0xf9, 0xbb, 0x26, 0xd1, 0x87, 0xc4, 0xac, 0x19, 0xde, 0x49, 0x76, 0x67, 0x51, 0x5c, 0xef, 0xd0, 0x95, 0xb5, 0xb8, 0xc5, 0xd5, 0xc4, 0xe9, 0x87, 0x71, 0xbd, 0x51, 0x79, 0x93, 0x8f, 0x77, 0xb7, 0xf8, 0xe4, 0xb8, 0x7e, 0x73, 0xd4, 0x28, 0x67, 0xd0, 0x4c, 0x66, 0xdb, 0x2f, 0x1f, 0x9f, 0x1f, 0xaf, 0xe0, 0x35, 0xd1, 0x6f, 0x28, 0xcf, 0x7f, 0x3c, 0xdb, 0x78, 0x06, 0xb1, 0xfd, 0x65, 0xc2, 0xf6, 0xa8, 0x42, 0x9a, 0x18, 0x5a, 0x8b, 0x74, 0x1d, 0x45, 0xa4, 0x1d, 0x56, 0xae, 0xfc, 0x27, 0x8e, 0x57, 0xbe, 0x0d, 0x8e, 0xc7, 0x8e, 0x77, 0x79, 0x3b, 0xe0, 0xd6, 0x7f, 0x7e, 0xb1, 0xe2, 0x63, 0x53, 0x39, 0xaf, 0xa1, 0x7e, 0xbe, 0x0b, 0x48, 0xfb, 0x83, 0xac, 0x1f, 0xd5, 0x32, 0xdf, 0xe2, 0x32, 0x07, 0x1a, 0x07, 0xb1, 0xcc, 0x73, 0x9c, 0x67, 0xb7, 0xae, 0x69, 0x07, 0xf0, 0xdc, 0x3e, 0xcf, 0x33, 0xe8, 0xce, 0x31, 0x73, 0x3b, 0x35, 0x55, 0x9b, 0xdb, 0xa9, 0xa9, 0xc3, 0xea, 0xca, 0xca, 0x99, 0xb2, 0xb2, 0x12, 0x7b, 0xfd, 0xb3, 0x84, 0x0e, 0x5d, 0x66, 0x3b, 0x7e, 0x77, 0x29, 0xf9, 0x3b, 0x5a, 0x1f, 0x61, 0xda, 0x47, 0x13, 0xa4, 0x7d, 0x3c, 0x61, 0x5b, 0xfe, 0x34, 0xbe, 0x2d, 0x84, 0x09, 0xdf, 0xec, 0x49, 0x6d, 0x09, 0xa5, 0xfd, 0x5d, 0x4f, 0xea, 0xd7, 0x94, 0xf6, 0x3f, 0x7a, 0xc6, 0x7f, 0xfb, 0xdd, 0x09, 0xbe, 0xfd, 0x4e, 0x4f, 0x72, 0x6b, 0x52, 0x4f, 0x98, 0xb4, 0x94, 0x6f, 0x8d, 0x4b, 0x49, 0xe0, 0x61, 0x54, 0x27, 0x2c, 0xec, 0xd4, 0x93, 0x2a, 0x15, 0x7b, 0x54, 0xfd, 0x11, 0xf5, 0x39, 0xad, 0x87, 0x76, 0x07, 0xfc, 0xff, 0x14, 0xc7, 0x29, 0x5e, 0xdd, 0xf1, 0x5d, 0xff, 0xf0, 0xb6, 0x78, 0xae, 0xf7, 0x28, 0xd7, 0x58, 0xfa, 0x24, 0x70, 0x1a, 0x4a, 0x35, 0x9c, 0xd6, 0x72, 0xab, 0x2b, 0xb5, 0x4c, 0x92, 0x3f, 0x24, 0xed, 0xe4, 0x53, 0x2f, 0x30, 0x5e, 0xd0, 0x82, 0xe4, 0xda, 0x54, 0xed, 0x2c, 0xb6, 0x35, 0x87, 0x93, 0x9f, 0x3f, 0x7a, 0x09, 0x0c, 0xff, 0x64, 0xff, 0x5f, 0x8f, 0x2d, 0x7f, 0xed, 0x18, 0x8f, 0x85, 0x2e, 0xc1, 0x09, 0x57, 0xb8, 0xea, 0xf3, 0x9c, 0x4b, 0xc2, 0x22, 0x4f, 0xe8, 0x10, 0xe6, 0x83, 0x72, 0x4e, 0xe8, 0xb9, 0x59, 0xe3, 0x51, 0x5b, 0x45, 0x74, 0xc9, 0xe4, 0x38, 0xae, 0x23, 0xcd, 0xe3, 0x52, 0x64, 0xc1, 0x23, 0x01, 0xa5, 0xf1, 0xa8, 0xbe, 0xf3, 0x31, 0xa8, 0xa5, 0xbd, 0xb2, 0x56, 0xc8, 0x72, 0x40, 0x39, 0x52, 0x09, 0x3f, 0xf9, 0x5b, 0xf9, 0xef, 0x5d, 0x14, 0x93, 0x05, 0xf3, 0xfd, 0x0f, 0x11, 0x03, 0x36, 0xe1, 0x9b, 0xce, 0xc6, 0xd2, 0xa9, 0xe4, 0x4b, 0x89, 0x2c, 0x4e, 0xba, 0x9e, 0x77, 0x93, 0x6f, 0x91, 0x0b, 0xdf, 0x8f, 0x82, 0x35, 0x38, 0x26, 0x0a, 0xdb, 0x62, 0x2c, 0x31, 0x67, 0xac, 0xcd, 0x0d, 0xfb, 0xc8, 0xf3, 0x7c, 0x71, 0x15, 0x7c, 0x11, 0x0c, 0x5f, 0xed, 0x80, 0x29, 0x40, 0xba, 0x0b, 0x8e, 0x68, 0x0e, 0xfe, 0xda, 0x12, 0xb1, 0x6e, 0x15, 0x5b, 0xc2, 0xbe, 0x7c, 0xa4, 0xae, 0x7e, 0x73, 0x92, 0x4d, 0xfd, 0x9c, 0xa4, 0x5c, 0x96, 0x78, 0x7c, 0x5c, 0xda, 0xcd, 0xe4, 0x93, 0xae, 0x5a, 0xa1, 0xd5, 0xc5, 0xb1, 0x23, 0xb1, 0xef, 0x64, 0xff, 0x8d, 0xfc, 0xf9, 0x0f, 0x3d, 0x76, 0xdf, 0xbc, 0x77, 0x94, 0xbe, 0xd7, 0xce, 0x21, 0x95, 0xda, 0x0d, 0xd9, 0x51, 0x3d, 0x69, 0x4c, 0xd0, 0x0a, 0xb4, 0xe6, 0x6d, 0xe5, 0xed, 0xd7, 0x8f, 0x38, 0x91, 0x4a, 0xfe, 0xf6, 0xc8, 0x8c, 0x1f, 0x1c, 0x06, 0xb0, 0x61, 0xca, 0xf9, 0x94, 0x14, 0x07, 0xd2, 0x96, 0x77, 0x34, 0xed, 0xb1, 0x19, 0xd1, 0x1d, 0x00, 0x2e, 0xfc, 0xd2, 0x33, 0x63, 0x85, 0x0e, 0x70, 0x5d, 0xee, 0x04, 0x6f, 0x38, 0x17, 0x7b, 0x2a, 0x8d, 0xed, 0xe9, 0xd9, 0x9e, 0x48, 0xb1, 0x15, 0x8e, 0xc5, 0x68, 0x15, 0x55, 0xfe, 0x36, 0xe8, 0xfc, 0x3a, 0xd9, 0xdc, 0x06, 0xd9, 0xba, 0xeb, 0x7f, 0xe1, 0xd0, 0x21, 0x15, 0xd3, 0x65, 0x4f, 0xdb, 0xa7, 0x5b, 0xf6, 0x5e, 0x56, 0x17, 0x8e, 0xc0, 0x34, 0xbf, 0x27, 0x17, 0x28, 0xce, 0x9d, 0x66, 0x2b, 0xaa, 0x46, 0x37, 0x3b, 0xcd, 0x7b, 0x66, 0xab, 0xd8, 0x4a, 0xce, 0x17, 0xdc, 0x0d, 0x3e, 0x5c, 0x87, 0x3d, 0x8d, 0xf8, 0xe3, 0x25, 0x89, 0xae, 0xe2, 0x1c, 0x96, 0x09, 0xb2, 0x99, 0xe2, 0xdb, 0xdf, 0xf8, 0xf3, 0x5c, 0xc8, 0xcd, 0x0d, 0x41, 0x96, 0x65, 0x2f, 0x2c, 0x7b, 0x4f, 0x44, 0x60, 0xf2, 0x7f, 0x2d, 0x37, 0xb7, 0x35, 0x43, 0xec, 0x4b, 0x8f, 0x84, 0x69, 0xa4, 0x6a, 0x70, 0x7e, 0x90, 0xc7, 0xe6, 0xd5, 0x26, 0x35, 0x75, 0x91, 0x0d, 0xe2, 0x39, 0x9a, 0x91, 0xcb, 0x04, 0xad, 0xe6, 0x6c, 0x2f, 0xa8, 0x7b, 0xd9, 0x23, 0x01, 0xf6, 0xfa, 0x5c, 0x3b, 0xd6, 0x0b, 0xc0, 0xcc, 0x72, 0x30, 0xcd, 0x5c, 0x01, 0x36, 0xb0, 0xe0, 0xaf, 0x03, 0xb2, 0xf1, 0xd7, 0x85, 0xe5, 0x9a, 0xd5, 0xaf, 0x96, 0x20, 0x6c, 0xea, 0x6d, 0xe6, 0x19, 0x7e, 0xf0, 0x51, 0x7c, 0x00, 0x94, 0xea, 0xf7, 0x37, 0x6c, 0xc6, 0x7e, 0x19, 0x35, 0x9b, 0x81, 0xa5, 0x66, 0xa1, 0xdd, 0x8c, 0xa3, 0x64, 0x25, 0x69, 0x80, 0xce, 0xd4, 0xad, 0x7a, 0x5c, 0x05, 0xd1, 0xd7, 0x72, 0xfc, 0xce, 0x1f, 0xbd, 0xce, 0xed, 0x23, 0x7d, 0xba, 0x4a, 0x83, 0x0c, 0x23, 0x6d, 0xaa, 0xc5, 0xff, 0x0a, 0x60, 0x4d, 0xe5, 0xc8, 0x74, 0x84, 0x7b, 0x3d, 0xe9, 0x36, 0xdf, 0x44, 0xba, 0xcd, 0xa4, 0xbf, 0x8a, 0xb2, 0x05, 0xe2, 0xc0, 0x9e, 0xfa, 0xcd, 0x58, 0xbf, 0x8f, 0xad, 0x60, 0xd3, 0x84, 0xc4, 0x61, 0x17, 0xf6, 0x42, 0xd9, 0xf4, 0x8c, 0xad, 0x39, 0x9b, 0xb4, 0xc2, 0xa6, 0x55, 0xdc, 0x4e, 0xa6, 0x32, 0x14, 0x03, 0x2a, 0x4d, 0x3b, 0x8d, 0x11, 0x6f, 0x94, 0xfb, 0x59, 0x9a, 0x6a, 0xc4, 0x96, 0x47, 0xd8, 0x1e, 0xe3, 0x46, 0xfb, 0x8d, 0x71, 0xdf, 0x03, 0x16, 0xd6, 0x64, 0x24, 0x1b, 0xa4, 0x26, 0xfc, 0x9e, 0x64, 0x99, 0x5c, 0xc4, 0x34, 0x2f, 0x5b, 0x84, 0x65, 0x12, 0x1f, 0x4a, 0x60, 0xaf, 0xf0, 0x36, 0x80, 0x23, 0xa9, 0xb7, 0x93, 0x05, 0x04, 0xc5, 0xe2, 0x29, 0x4d, 0x9a, 0x43, 0x10, 0xf1, 0x4a, 0x15, 0xb8, 0xd0, 0xcf, 0xb7, 0xfa, 0x49, 0xfb, 0x30, 0xc5, 0xbf, 0xa3, 0x95, 0xad, 0xed, 0xf5, 0xac, 0x33, 0x29, 0x5a, 0x16, 0xc7, 0x76, 0x8e, 0x62, 0x9f, 0x2d, 0x74, 0x2d, 0x7d, 0xe6, 0x44, 0xbb, 0x10, 0x4b, 0xb2, 0x23, 0xe6, 0x94, 0xf9, 0xc2, 0x77, 0xd8, 0xe2, 0x20, 0x4a, 0x5f, 0xd8, 0x16, 0x19, 0x3e, 0x1d, 0xe2, 0x9d, 0xa7, 0x26, 0xb0, 0x7c, 0xa5, 0x03, 0x72, 0xb0, 0x66, 0xbc, 0xe3, 0xa8, 0xb5, 0x0e, 0xba, 0x8b, 0x4a, 0x37, 0xd3, 0x5c, 0x14, 0x5f, 0x99, 0xdc, 0x14, 0x75, 0x06, 0x47, 0xe0, 0xd3, 0x2d, 0x5a, 0x0d, 0x33, 0x3a, 0x60, 0xd8, 0x9b, 0x01, 0xce, 0x19, 0x41, 0x20, 0x1b, 0xd8, 0xec, 0x5b, 0x3b, 0x20, 0x9b, 0x2d, 0xee, 0xb2, 0xfd, 0x0e, 0x98, 0x4e, 0xd7, 0x68, 0xce, 0x4d, 0xa4, 0xb7, 0x8d, 0x77, 0x15, 0xe7, 0x21, 0xf7, 0xa6, 0x1a, 0x70, 0xa8, 0x6f, 0x6f, 0x24, 0x9f, 0x3e, 0x09, 0x6f, 0x0c, 0x94, 0x6a, 0xc1, 0x54, 0xda, 0xf5, 0x12, 0x50, 0x22, 0x8a, 0x86, 0x54, 0x29, 0x5b, 0x8c, 0x71, 0x10, 0xdf, 0x85, 0x73, 0xb1, 0xfc, 0x2f, 0xe0, 0x9a, 0x5b, 0x6b, 0x0f, 0x79, 0xb6, 0xa2, 0xf6, 0xe8, 0xc5, 0xc9, 0x56, 0xb2, 0xae, 0x03, 0x9d, 0x3d, 0xa9, 0x16, 0xd2, 0x92, 0xba, 0x6e, 0x2e, 0x31, 0xcd, 0xc2, 0xa9, 0x30, 0x12, 0x71, 0xf0, 0xbe, 0x23, 0xed, 0x2f, 0x64, 0xb1, 0x06, 0x26, 0x8d, 0xfc, 0xca, 0x19, 0xe2, 0x74, 0x27, 0x3b, 0x92, 0xa1, 0x7e, 0x35, 0xbd, 0x7e, 0xf3, 0x0c, 0x2c, 0x03, 0x02, 0xb6, 0x59, 0xca, 0x90, 0xad, 0x45, 0x39, 0x25, 0x3c, 0x74, 0xa8, 0x98, 0x67, 0xc1, 0x96, 0x64, 0x62, 0x4b, 0xb4, 0x48, 0xe1, 0x38, 0xfa, 0x57, 0x3a, 0x28, 0x1d, 0x31, 0x60, 0x17, 0x48, 0xdf, 0x1e, 0xa8, 0x04, 0x61, 0x7d, 0x9d, 0x94, 0xff, 0xba, 0x31, 0xf9, 0x6b, 0x93, 0xf3, 0x53, 0x74, 0x48, 0x9b, 0xba, 0x0f, 0x28, 0x39, 0x20, 0xa0, 0xce, 0x09, 0x75, 0x8f, 0x28, 0x41, 0x7b, 0xb1, 0x9d, 0xe6, 0x48, 0x53, 0x52, 0x0f, 0x80, 0x31, 0xf9, 0x49, 0x4c, 0xe7, 0x53, 0xce, 0x88, 0x17, 0x29, 0xa9, 0x1e, 0xea, 0x39, 0x8a, 0x65, 0xe8, 0xab, 0x14, 0x89, 0x6a, 0x11, 0xd3, 0xd6, 0xc5, 0x38, 0x0b, 0x2b, 0xd5, 0xbe, 0x95, 0xb1, 0x6c, 0x6c, 0x64, 0x89, 0xb8, 0x56, 0xb5, 0xf4, 0xc6, 0xd5, 0x94, 0x9c, 0x15, 0x6f, 0x1f, 0xce, 0x9f, 0x4f, 0x70, 0x8d, 0x24, 0xec, 0x52, 0x2b, 0xc7, 0x58, 0xab, 0xab, 0x5f, 0xc8, 0xa4, 0x69, 0x54, 0xbf, 0x39, 0x92, 0xa1, 0xb6, 0x61, 0x23, 0x5b, 0xa3, 0x59, 0xe2, 0xcf, 0x6b, 0xf8, 0xd9, 0x8c, 0x32, 0xb8, 0x86, 0x75, 0x3e, 0xb2, 0xcb, 0xb3, 0x21, 0xd6, 0x7d, 0xd2, 0x26, 0x64, 0xef, 0x24, 0xdc, 0x9b, 0x2c, 0x70, 0xcf, 0xff, 0xd8, 0x78, 0x7c, 0xfb, 0xc4, 0x8a, 0xf4, 0xef, 0x22, 0xb7, 0x80, 0x28, 0xb9, 0xba, 0x02, 0x69, 0x9d, 0x7c, 0x66, 0x97, 0x0d, 0xd7, 0x2b, 0xc7, 0x77, 0xc3, 0x65, 0xd6, 0x05, 0x53, 0x2d, 0x3b, 0xcd, 0x31, 0xc0, 0x75, 0xe4, 0xed, 0x00, 0x5b, 0xfc, 0x4f, 0x21, 0x85, 0x7f, 0x0a, 0xe1, 0x89, 0x6b, 0xdb, 0x5b, 0x29, 0x0a, 0x17, 0x61, 0x66, 0x6f, 0x05, 0x52, 0x3e, 0xa4, 0xe2, 0x17, 0x55, 0x5c, 0xec, 0x8d, 0x5a, 0x6e, 0x4a, 0xf0, 0x1b, 0x27, 0xf4, 0xd6, 0xf5, 0x5f, 0xde, 0x5b, 0xbf, 0xb9, 0x75, 0x64, 0x6f, 0x2c, 0x52, 0x47, 0xef, 0x71, 0x34, 0x24, 0xda, 0x01, 0x25, 0x1b, 0xae, 0xe5, 0xde, 0x3e, 0x2c, 0x33, 0x5c, 0x42, 0x33, 0x57, 0x76, 0x9a, 0x7d, 0x03, 0xc0, 0x91, 0x5c, 0x07, 0xbf, 0xda, 0x31, 0xa0, 0x83, 0x63, 0xe6, 0xfa, 0x01, 0x3d, 0x45, 0x80, 0x1d, 0xd0, 0xc3, 0xf1, 0x45, 0x3d, 0xe6, 0x6f, 0x0e, 0xa4, 0xf1, 0x53, 0x1a, 0x9c, 0xb0, 0x06, 0x3c, 0x96, 0xf0, 0x20, 0xf5, 0x59, 0x44, 0x67, 0x1f, 0x07, 0x4d, 0xf6, 0xaf, 0x29, 0xda, 0x89, 0x3d, 0xcf, 0x4f, 0x69, 0x0d, 0xed, 0xf9, 0x0d, 0xa9, 0x79, 0x56, 0xf0, 0x6e, 0x5f, 0xdc, 0x1e, 0x5f, 0x9a, 0xc3, 0x56, 0x83, 0x77, 0xc2, 0x22, 0x5a, 0xc7, 0x96, 0x7b, 0x17, 0x5c, 0x51, 0x7e, 0x3a, 0xff, 0xca, 0x95, 0xd3, 0xb4, 0x2e, 0x99, 0x67, 0x95, 0x1b, 0xd8, 0xda, 0xf4, 0x3f, 0x23, 0x75, 0x48, 0x09, 0xce, 0x85, 0x03, 0xbc, 0x3a, 0x9a, 0x42, 0x2b, 0x4e, 0x1e, 0xff, 0x1c, 0x4e, 0x35, 0xb1, 0xa6, 0xd3, 0x36, 0x94, 0xd5, 0x79, 0x7d, 0x24, 0xe7, 0x73, 0xaa, 0xd0, 0x4c, 0xdc, 0xce, 0xbf, 0x0f, 0x32, 0xed, 0xfb, 0xf4, 0x59, 0x5a, 0x33, 0x91, 0x0d, 0xe1, 0x11, 0x5b, 0x28, 0xb8, 0x25, 0xfc, 0x68, 0x32, 0x67, 0x9a, 0x4b, 0x5e, 0x2d, 0xea, 0xb1, 0x37, 0x8b, 0xb0, 0x57, 0x0d, 0x48, 0xdb, 0x96, 0xba, 0xd2, 0x4e, 0x75, 0xb1, 0xa6, 0x9d, 0x85, 0x2d, 0xa2, 0x1c, 0x6e, 0x3f, 0x04, 0x5a, 0xc1, 0x5d, 0x0e, 0x95, 0xe4, 0xed, 0xa7, 0x51, 0x5a, 0x70, 0xe5, 0x4f, 0xb5, 0xb4, 0x86, 0x9a, 0x5a, 0xed, 0x71, 0xc2, 0xe0, 0x81, 0xdd, 0x70, 0x71, 0x99, 0xe0, 0x67, 0xbd, 0xb7, 0x22, 0x15, 0x2f, 0xc4, 0x9e, 0x93, 0x6c, 0x74, 0xf4, 0x30, 0x52, 0x3d, 0xb2, 0xda, 0xdd, 0x8a, 0xb8, 0x34, 0x4f, 0xa5, 0x24, 0xbd, 0x37, 0xad, 0x02, 0x19, 0xc7, 0x4e, 0xc5, 0x03, 0xd6, 0x3a, 0xc3, 0xda, 0xe9, 0x4f, 0xac, 0xb3, 0x38, 0xa2, 0x6c, 0x39, 0x78, 0x30, 0x47, 0x2d, 0xde, 0x97, 0x72, 0xbd, 0xc5, 0x58, 0xe6, 0x65, 0xf7, 0x3c, 0xf0, 0xe1, 0xbd, 0x17, 0xf3, 0xfa, 0x92, 0xff, 0xc4, 0x77, 0x85, 0x6e, 0x70, 0x1d, 0x7b, 0x0a, 0x3c, 0x47, 0xef, 0xe1, 0x5a, 0xca, 0xc1, 0xc5, 0x57, 0x9f, 0xb6, 0x9b, 0xcd, 0xe3, 0xb1, 0xbd, 0x10, 0xf8, 0xf4, 0x87, 0xce, 0x9b, 0xee, 0x89, 0x2c, 0x92, 0x4b, 0xb9, 0x5c, 0x27, 0x04, 0x70, 0x0d, 0x47, 0xda, 0x84, 0x31, 0xbe, 0x67, 0x4b, 0x5e, 0xc9, 0x17, 0x88, 0xb6, 0xd3, 0x89, 0xc0, 0xb0, 0x7b, 0x12, 0xd9, 0xfb, 0x5d, 0xb8, 0xdb, 0x6d, 0x50, 0x6d, 0xad, 0x72, 0xef, 0x26, 0xeb, 0x50, 0x91, 0xfa, 0x8a, 0xdb, 0x20, 0x60, 0x4c, 0x5a, 0x92, 0x11, 0x18, 0xbd, 0x28, 0x4d, 0x52, 0x7d, 0xf8, 0x4b, 0x7f, 0x0d, 0x7c, 0x3f, 0xba, 0x10, 0x87, 0xef, 0xb1, 0xff, 0xbf, 0x86, 0xef, 0xfb, 0x9f, 0x05, 0xdf, 0xba, 0xef, 0x93, 0x75, 0x93, 0xc9, 0x81, 0x34, 0xf3, 0x1b, 0x5a, 0x8c, 0x5e, 0xcd, 0x22, 0x97, 0xe2, 0xd6, 0x26, 0xf6, 0x1b, 0xa6, 0x14, 0xc7, 0xd7, 0xd4, 0x44, 0xa9, 0x50, 0x06, 0xaf, 0x86, 0x81, 0x07, 0x66, 0xf8, 0x74, 0x40, 0xd2, 0xe0, 0x17, 0x9a, 0x20, 0x4d, 0xd7, 0xb5, 0x5a, 0x47, 0x91, 0x5c, 0xd4, 0xb5, 0x88, 0x5e, 0x58, 0x80, 0x24, 0x59, 0x6f, 0x80, 0xae, 0x9d, 0xf5, 0x54, 0x9c, 0x09, 0xcb, 0xb7, 0xd6, 0xe9, 0x42, 0x2b, 0x4a, 0x27, 0xa7, 0xae, 0xb4, 0x48, 0x02, 0x17, 0xfa, 0x40, 0xba, 0xea, 0x60, 0x05, 0xd9, 0xa1, 0x98, 0x77, 0xab, 0xf6, 0x76, 0x0e, 0x11, 0xa3, 0x92, 0xf5, 0x3f, 0x7c, 0xd4, 0x92, 0xd5, 0x4a, 0x75, 0xda, 0x0b, 0x0f, 0xcc, 0xa8, 0x48, 0x6e, 0x09, 0xd5, 0x48, 0x65, 0x6b, 0x5f, 0xa1, 0xb4, 0x38, 0xaa, 0xb5, 0x6b, 0x4c, 0x6f, 0x00, 0xce, 0xd0, 0x58, 0x5b, 0xe1, 0x0f, 0x1b, 0x8c, 0x9d, 0x8a, 0xa2, 0x78, 0x2b, 0xce, 0xeb, 0x0c, 0x76, 0xf8, 0xc3, 0xbd, 0xf6, 0x0a, 0x94, 0x93, 0x1f, 0x71, 0xd0, 0xee, 0xc1, 0xa5, 0x5c, 0x68, 0xe8, 0xfc, 0xd7, 0x67, 0xc3, 0x1f, 0x14, 0x75, 0xe0, 0xda, 0x7a, 0xe0, 0x95, 0x17, 0xd9, 0xa2, 0xe2, 0xc5, 0x19, 0x77, 0xed, 0x00, 0x5d, 0x13, 0xa6, 0xbd, 0x4c, 0x69, 0x42, 0x2a, 0x0e, 0xf6, 0xed, 0x80, 0x70, 0x0e, 0x4a, 0x5e, 0x17, 0xa2, 0xdf, 0x44, 0xae, 0x74, 0x56, 0xab, 0x91, 0xf4, 0x58, 0x52, 0x5b, 0x60, 0xf7, 0xb1, 0x67, 0x95, 0xa4, 0x55, 0x11, 0xb7, 0x08, 0x7b, 0x1d, 0x29, 0x8a, 0x9f, 0xbd, 0x73, 0x5e, 0x20, 0xbe, 0x77, 0x21, 0x69, 0x77, 0xa7, 0x99, 0xf7, 0x56, 0x7d, 0x11, 0x43, 0x34, 0x84, 0xf2, 0x58, 0x3d, 0xd7, 0x13, 0xd7, 0x9d, 0x9c, 0x73, 0x49, 0xe8, 0x05, 0x86, 0x33, 0x66, 0xac, 0x80, 0x4b, 0xba, 0x0e, 0x4d, 0x83, 0x48, 0x58, 0x3c, 0xab, 0xfa, 0x43, 0xc2, 0x0b, 0x4f, 0x31, 0xf9, 0x9e, 0x08, 0x67, 0xf0, 0x09, 0xe0, 0x19, 0x5c, 0x53, 0xee, 0x49, 0x68, 0x05, 0x1a, 0x69, 0x07, 0x7d, 0xdd, 0x58, 0x9b, 0x36, 0x11, 0xfd, 0x44, 0xd7, 0x33, 0x13, 0xd7, 0x13, 0x90, 0x59, 0x7e, 0x41, 0xd7, 0x3d, 0x33, 0x80, 0xad, 0x4a, 0x53, 0xfd, 0x65, 0xd6, 0x63, 0x7a, 0x31, 0x74, 0xe3, 0x6f, 0x29, 0xf4, 0xa8, 0xe7, 0x39, 0x16, 0xc1, 0x99, 0x66, 0xfa, 0x70, 0xf5, 0x81, 0x29, 0x34, 0xa7, 0xf0, 0xbe, 0x16, 0x65, 0x65, 0x0b, 0x04, 0x98, 0xb6, 0x4e, 0xeb, 0xdb, 0xd2, 0x68, 0xfa, 0xfa, 0x0a, 0xa8, 0xd3, 0xc5, 0x64, 0x23, 0x5e, 0xf3, 0xd8, 0x77, 0x8f, 0x8b, 0xbd, 0x2f, 0x83, 0xa6, 0x7f, 0x61, 0x3a, 0xab, 0x79, 0x55, 0xc6, 0x11, 0x3b, 0x1b, 0x68, 0x8e, 0xc3, 0x62, 0x17, 0x6b, 0x0c, 0x01, 0x1c, 0x60, 0xbd, 0x68, 0x8b, 0x6a, 0x55, 0x92, 0x4d, 0xba, 0x45, 0x56, 0x27, 0x38, 0x42, 0x9d, 0x5b, 0x76, 0x23, 0x7f, 0xd3, 0x91, 0xb6, 0x34, 0xce, 0x1f, 0xd2, 0xd7, 0x88, 0x6b, 0xfc, 0x63, 0x89, 0x17, 0x31, 0x4f, 0xee, 0xc2, 0xce, 0xc1, 0xce, 0x33, 0x3d, 0xf8, 0x74, 0x09, 0xbf, 0xb4, 0x31, 0xff, 0x17, 0x79, 0xb3, 0x85, 0x8e, 0x35, 0xbe, 0xb9, 0x3c, 0xbe, 0x5c, 0x51, 0x66, 0xfd, 0xe6, 0x85, 0xd4, 0x9f, 0x61, 0xad, 0x9d, 0xfe, 0x7d, 0x33, 0x6b, 0xa1, 0xad, 0x7e, 0xb3, 0xc9, 0x85, 0x73, 0xea, 0x3f, 0x29, 0x1a, 0x0f, 0xcb, 0xa8, 0x7b, 0xec, 0x31, 0x94, 0x30, 0xf4, 0xfe, 0xad, 0xd2, 0x34, 0xd5, 0x1e, 0xec, 0xf7, 0x61, 0xf3, 0xcc, 0x66, 0xb8, 0x04, 0x0d, 0xb2, 0x37, 0x1a, 0xb1, 0xc7, 0xd8, 0xa7, 0xb4, 0xe0, 0x72, 0xf5, 0x98, 0xd3, 0xd0, 0x1a, 0xb1, 0x77, 0x26, 0x46, 0xc3, 0x5a, 0x2b, 0xc6, 0x23, 0x61, 0xbb, 0xf5, 0xa3, 0x23, 0xb2, 0x81, 0xbe, 0x93, 0xcc, 0xda, 0x99, 0x5a, 0x42, 0x5e, 0x8a, 0xcf, 0x10, 0xde, 0x1b, 0x40, 0x58, 0x0a, 0xb8, 0xc5, 0x4f, 0xc3, 0xa9, 0x86, 0x04, 0x36, 0xf9, 0x4b, 0xb0, 0x5f, 0x31, 0x51, 0x93, 0x35, 0x38, 0xb6, 0x1e, 0xfa, 0x52, 0xc8, 0x40, 0xbc, 0xcf, 0x9c, 0x58, 0x43, 0xd7, 0xa9, 0xe7, 0xb6, 0x06, 0x94, 0xd8, 0x49, 0x8a, 0x31, 0xf4, 0x3d, 0xa6, 0x8b, 0x2e, 0x37, 0xf6, 0x3d, 0x06, 0x17, 0x97, 0xe7, 0x70, 0x54, 0x59, 0xb3, 0xdb, 0x92, 0xd0, 0x23, 0xd4, 0xec, 0xa0, 0xa9, 0x5d, 0x12, 0x45, 0xe2, 0x0c, 0x90, 0x6c, 0x68, 0x5b, 0x01, 0x06, 0x94, 0x62, 0x2a, 0xd9, 0x4f, 0x92, 0x61, 0xf0, 0x47, 0xa1, 0xce, 0x7d, 0x9d, 0xe1, 0xcb, 0xa4, 0xe9, 0x50, 0x7e, 0x0e, 0xd7, 0x42, 0x96, 0x2d, 0x31, 0x49, 0x27, 0x75, 0x8a, 0x35, 0x07, 0x4b, 0x94, 0xf4, 0xad, 0x99, 0x5a, 0x41, 0x27, 0xc5, 0x36, 0x3a, 0x9d, 0x0b, 0x24, 0x7f, 0xbb, 0x8c, 0xbe, 0xcd, 0x48, 0xfd, 0x8e, 0xbd, 0x71, 0xd1, 0x2a, 0xd8, 0xb5, 0x1a, 0xda, 0x40, 0xec, 0x5c, 0x3a, 0xbc, 0x1a, 0xef, 0x98, 0xff, 0x8c, 0xbc, 0x84, 0x24, 0x51, 0xb7, 0xa7, 0x14, 0x84, 0x4c, 0x49, 0xfb, 0x98, 0xa4, 0x99, 0x4c, 0x27, 0x99, 0x2e, 0xb2, 0x79, 0x5d, 0x7f, 0x0a, 0xff, 0xbb, 0x8d, 0x42, 0x6f, 0x8f, 0xe3, 0xcd, 0x98, 0x8e, 0x0e, 0x54, 0x5c, 0xc0, 0x9e, 0x1b, 0xe3, 0x92, 0xe9, 0x46, 0x8a, 0x26, 0x44, 0xd4, 0x37, 0xaa, 0xa7, 0x5d, 0xc3, 0x50, 0x57, 0x03, 0xf9, 0x8e, 0xca, 0xde, 0x87, 0x38, 0xb4, 0xfc, 0x11, 0xb2, 0x63, 0xe5, 0xb9, 0xc7, 0x5e, 0x39, 0xa8, 0x5c, 0xb2, 0x00, 0x58, 0x78, 0xef, 0x6b, 0xbf, 0x7e, 0xed, 0xd7, 0x28, 0x5f, 0x5d, 0xbc, 0x2d, 0xf6, 0x66, 0x8f, 0x7b, 0x4a, 0xe0, 0x2e, 0x93, 0xa2, 0x61, 0xa6, 0x9d, 0x76, 0xc7, 0xe3, 0x32, 0x1d, 0xae, 0x4d, 0x13, 0x1e, 0xf4, 0x17, 0xe1, 0x6c, 0x37, 0xb1, 0x6f, 0x84, 0xb4, 0x64, 0x6f, 0x81, 0x9c, 0x6e, 0x99, 0x20, 0x2d, 0x97, 0x3c, 0x33, 0x44, 0xec, 0xf8, 0x6b, 0x89, 0x48, 0x6c, 0x69, 0x9b, 0xb7, 0x90, 0x7c, 0x1c, 0x98, 0xea, 0x2f, 0x3a, 0x00, 0x57, 0xba, 0x1f, 0xd0, 0x2e, 0x00, 0xfe, 0xe5, 0x0b, 0xbf, 0x49, 0xb5, 0xbf, 0xab, 0x35, 0xab, 0x92, 0x3b, 0x79, 0x44, 0x37, 0x21, 0x06, 0x0b, 0xee, 0x04, 0x28, 0xf3, 0x82, 0x2a, 0xe3, 0x26, 0xa5, 0x8d, 0x5c, 0xe0, 0xb4, 0xdc, 0x94, 0xb4, 0x21, 0x6c, 0x33, 0x8f, 0x16, 0xaf, 0x62, 0x50, 0xd2, 0xc3, 0x95, 0x8c, 0xa1, 0x6f, 0x17, 0xe2, 0x87, 0xb7, 0x6f, 0x17, 0x5c, 0x6c, 0x2c, 0x69, 0x85, 0x22, 0x87, 0x2e, 0x66, 0x83, 0x6d, 0x9d, 0x92, 0xfe, 0xcd, 0x1e, 0x7d, 0xec, 0x46, 0x45, 0x19, 0xc6, 0x3c, 0x08, 0x57, 0xab, 0x25, 0x7a, 0xe3, 0xa1, 0x18, 0xd1, 0xff, 0x3f, 0xec, 0xb2, 0xc1, 0xa1, 0xce, 0x48, 0x66, 0x75, 0x6c, 0xa0, 0x53, 0x8a, 0xf1, 0x19, 0xaf, 0x9e, 0x3c, 0xfc, 0x88, 0x11, 0x65, 0xbf, 0x39, 0x6c, 0x8d, 0xe1, 0x24, 0x7d, 0xb5, 0xc7, 0xc1, 0xb6, 0x1a, 0xe8, 0x34, 0x71, 0x7e, 0x1d, 0x8d, 0xea, 0x82, 0x66, 0xd2, 0x37, 0x9d, 0x1f, 0x53, 0x2d, 0xcb, 0xee, 0x04, 0x03, 0xd2, 0xf1, 0xca, 0x05, 0x17, 0x94, 0xdf, 0x48, 0xe6, 0x3f, 0xf4, 0x38, 0x7c, 0x35, 0x17, 0x94, 0xe2, 0x9a, 0x8f, 0x0e, 0x83, 0x1c, 0xa4, 0xb8, 0xf2, 0xfe, 0x6d, 0xaa, 0xd7, 0xaa, 0x52, 0x5b, 0x76, 0xa4, 0x88, 0x74, 0x2b, 0xe8, 0x2c, 0x51, 0xd8, 0x99, 0x92, 0x86, 0x8b, 0xcc, 0x71, 0xe4, 0x85, 0x8d, 0x05, 0xe1, 0x97, 0xc8, 0xed, 0xdf, 0x26, 0x1b, 0x43, 0x58, 0xaf, 0xac, 0x5f, 0xad, 0x5b, 0x78, 0xff, 0x77, 0x36, 0x45, 0xd3, 0xfb, 0xee, 0x5f, 0xde, 0x27, 0x3c, 0x9c, 0x44, 0xcc, 0x4c, 0x2f, 0xa6, 0xa8, 0x18, 0x73, 0x27, 0x5b, 0x10, 0xab, 0x5a, 0x91, 0xb6, 0xaf, 0x9a, 0x20, 0x52, 0x97, 0x5c, 0x0b, 0xc2, 0x2e, 0xb9, 0xfc, 0xfc, 0xd4, 0xfc, 0xfe, 0x5f, 0x9a, 0x40, 0xd4, 0xd8, 0x06, 0x72, 0x0e, 0x47, 0xa6, 0x37, 0xb8, 0xa7, 0xd1, 0x99, 0xa8, 0xcd, 0x47, 0x7d, 0xe7, 0xa8, 0xd2, 0x49, 0xb5, 0x61, 0x09, 0x46, 0x91, 0x9f, 0xfd, 0x7e, 0x19, 0x78, 0x17, 0x65, 0x58, 0x95, 0xba, 0x69, 0x3d, 0x86, 0xb3, 0x8f, 0x57, 0x95, 0x4b, 0x49, 0x33, 0x2d, 0xb2, 0x98, 0xf8, 0x96, 0xd5, 0xd2, 0xa6, 0x27, 0x1f, 0x0d, 0xd9, 0x5e, 0xb0, 0xe0, 0x95, 0x74, 0xd0, 0x71, 0xbc, 0xe0, 0x52, 0xd8, 0xcb, 0xde, 0x42, 0xae, 0x0b, 0x53, 0xc4, 0xac, 0x0c, 0x9c, 0x1b, 0x09, 0x1d, 0x4d, 0x3b, 0xcb, 0x29, 0xa4, 0x01, 0x94, 0x2e, 0xd3, 0xe9, 0x7c, 0x06, 0xe2, 0x87, 0x45, 0x44, 0x83, 0x8a, 0x4e, 0x92, 0x33, 0x71, 0xac, 0x32, 0xa2, 0xe9, 0x38, 0x66, 0xa6, 0xa4, 0xd9, 0x9b, 0xa1, 0xae, 0x78, 0xb2, 0x5f, 0x79, 0xd1, 0x86, 0xab, 0x9b, 0x57, 0x5f, 0x9c, 0x81, 0xeb, 0x89, 0x1d, 0x10, 0xda, 0xa5, 0xd9, 0x3d, 0x72, 0x04, 0x7b, 0xae, 0x9d, 0xc6, 0xab, 0xfc, 0x82, 0xf2, 0x9f, 0xed, 0x6f, 0x0d, 0x6d, 0xc2, 0xd1, 0x3a, 0x67, 0x25, 0x6e, 0x75, 0x07, 0xc5, 0x48, 0xff, 0x74, 0xd3, 0xfc, 0x2b, 0x23, 0x3f, 0xa5, 0x91, 0xfd, 0x46, 0x87, 0x8b, 0xc7, 0xd7, 0x69, 0x3a, 0xd9, 0x43, 0xde, 0x8f, 0x9c, 0x53, 0x4e, 0x6e, 0xb0, 0x9b, 0x64, 0xbf, 0x54, 0xd5, 0xb0, 0xce, 0x96, 0x1b, 0x29, 0xe5, 0x18, 0xcd, 0xdb, 0x55, 0xfe, 0xc0, 0x3e, 0xe5, 0x54, 0x8d, 0xd3, 0x6c, 0x8e, 0x3e, 0x35, 0x45, 0xeb, 0x8f, 0xf0, 0xd5, 0x4a, 0xef, 0x09, 0xaa, 0xf5, 0x9b, 0x43, 0x6b, 0xf7, 0xaf, 0x6d, 0xec, 0x27, 0xbd, 0x6c, 0x5b, 0xf1, 0x7e, 0x88, 0xf8, 0x93, 0xca, 0x29, 0x4b, 0x94, 0x12, 0x26, 0x4c, 0x61, 0x8a, 0x41, 0xe3, 0x28, 0xf9, 0x48, 0x26, 0xd0, 0x5a, 0xee, 0x30, 0x7f, 0xab, 0x7b, 0xe1, 0xa6, 0x07, 0x0e, 0x0b, 0x0d, 0x6a, 0x45, 0x66, 0xec, 0x9d, 0x8c, 0x90, 0x98, 0x24, 0xc6, 0x42, 0xeb, 0x29, 0xf2, 0xe1, 0x62, 0xb2, 0xb6, 0xc0, 0xf5, 0xf0, 0xd3, 0xa2, 0x9d, 0xb8, 0x30, 0x4a, 0x13, 0xa5, 0x26, 0xe4, 0x27, 0x15, 0xba, 0x9a, 0xfe, 0x21, 0xe8, 0xc9, 0x23, 0xb7, 0x21, 0x7e, 0xe2, 0xcb, 0xb2, 0x83, 0xf3, 0xd6, 0x1e, 0x60, 0xa9, 0x69, 0x5d, 0x38, 0x48, 0xb2, 0x00, 0xe6, 0xdf, 0x6b, 0xe3, 0x68, 0xc8, 0xba, 0x53, 0x5a, 0x89, 0x54, 0x96, 0xf6, 0x65, 0xf9, 0x39, 0x94, 0x3d, 0xd4, 0x6f, 0x5b, 0x95, 0x9b, 0x3b, 0x7b, 0x80, 0x65, 0x33, 0x6a, 0xc9, 0x6d, 0x82, 0x86, 0x71, 0x54, 0x88, 0xf4, 0xb8, 0x8d, 0xf4, 0x41, 0xed, 0xcb, 0x6f, 0xf1, 0xe9, 0xee, 0xd1, 0x77, 0x50, 0x56, 0xe9, 0x8d, 0x64, 0xfb, 0x7b, 0xe3, 0xdf, 0xd9, 0xc5, 0x77, 0xf5, 0x9b, 0xdb, 0x73, 0x3b, 0x8c, 0x34, 0x3e, 0xf5, 0xeb, 0x55, 0xbd, 0xe2, 0x2b, 0x57, 0x32, 0xd8, 0xfb, 0x4c, 0x58, 0x6e, 0xa6, 0x53, 0x0a, 0xc9, 0x13, 0x80, 0xc8, 0x6d, 0xd4, 0x2b, 0xc6, 0x62, 0xb2, 0x3a, 0x34, 0xf5, 0x75, 0xa1, 0x5c, 0x51, 0x14, 0x6f, 0xa9, 0xa6, 0x91, 0xd8, 0x15, 0x29, 0xe1, 0x19, 0x75, 0x5d, 0x98, 0x74, 0xad, 0xa7, 0x52, 0x1f, 0x04, 0x9c, 0x74, 0x86, 0x56, 0xfd, 0xda, 0xdd, 0xea, 0x69, 0x4b, 0x5f, 0x40, 0x6b, 0xfd, 0x83, 0x5a, 0x1b, 0x42, 0xeb, 0x1b, 0xba, 0xa9, 0xc5, 0xd1, 0xdf, 0x90, 0xde, 0x45, 0xdf, 0xfa, 0xc6, 0xf5, 0xb8, 0xa6, 0x5d, 0x17, 0x6e, 0x10, 0xb0, 0xf9, 0x74, 0x20, 0x5e, 0x93, 0x2a, 0x8b, 0x69, 0xbd, 0xab, 0x39, 0xa7, 0x1c, 0xa5, 0x91, 0x7f, 0xfd, 0x1d, 0x9e, 0x55, 0x36, 0x21, 0xd9, 0xdc, 0x6e, 0xa1, 0x99, 0x48, 0x67, 0x43, 0x7d, 0xdb, 0x1a, 0xb3, 0x1d, 0x31, 0xad, 0xcf, 0x9f, 0x14, 0x69, 0xf5, 0x69, 0xdf, 0x7f, 0x27, 0xe5, 0xd4, 0x0a, 0x7b, 0xa9, 0x17, 0x33, 0x83, 0x7a, 0xd9, 0x4a, 0xd1, 0x18, 0x6a, 0xc9, 0x7a, 0xea, 0x6a, 0xb5, 0xa7, 0x9e, 0x50, 0x68, 0xb5, 0x5c, 0x3e, 0x92, 0x18, 0x11, 0xa4, 0x01, 0x19, 0x6d, 0x93, 0x65, 0xa3, 0x0d, 0xa9, 0x75, 0x9b, 0x49, 0xb3, 0x2f, 0xfe, 0xce, 0xe6, 0xf8, 0x5e, 0x8b, 0xc1, 0xed, 0x20, 0x29, 0x13, 0xa9, 0xf0, 0x43, 0x8c, 0xa5, 0x24, 0x45, 0xfa, 0xc8, 0x3b, 0xcb, 0xe5, 0x2b, 0x0d, 0x9b, 0xc9, 0x53, 0x8d, 0xed, 0xef, 0x54, 0x3f, 0x5b, 0x43, 0x2c, 0xe9, 0xab, 0x3b, 0x46, 0x05, 0x41, 0xe5, 0x54, 0x81, 0x5f, 0x19, 0xf2, 0x3f, 0xa1, 0x9c, 0xad, 0x79, 0x57, 0x19, 0xa2, 0xf3, 0x8a, 0x4f, 0xea, 0xc8, 0x03, 0x6b, 0xd8, 0xae, 0xc9, 0x13, 0x74, 0xba, 0x56, 0xd2, 0x55, 0xb7, 0x95, 0xde, 0x29, 0xf7, 0xdb, 0x41, 0x5d, 0x1d, 0x6c, 0x65, 0x9b, 0x75, 0xfd, 0x6a, 0x60, 0xbf, 0xb7, 0xfd, 0x9f, 0x1c, 0x1a, 0x2b, 0xe7, 0xd2, 0x18, 0xb1, 0xc4, 0xba, 0x36, 0x92, 0x15, 0x7d, 0x99, 0xce, 0xc9, 0x34, 0xed, 0xbb, 0xe8, 0x37, 0x71, 0x4e, 0x84, 0x58, 0x7e, 0x35, 0x89, 0xaf, 0xff, 0x74, 0x3a, 0x4e, 0xc1, 0x84, 0xcd, 0xe1, 0xbb, 0xf9, 0x66, 0xa1, 0x6d, 0x9c, 0xb2, 0x8b, 0x99, 0xa6, 0xed, 0x1a, 0xa0, 0x54, 0x5d, 0x81, 0xcf, 0x7e, 0xda, 0x5b, 0xb1, 0xdf, 0x88, 0x73, 0xcd, 0x31, 0xce, 0xef, 0x54, 0x38, 0x5a, 0xdf, 0xb7, 0x1b, 0xce, 0x86, 0x73, 0x68, 0x3d, 0xf4, 0x2e, 0x69, 0xb0, 0x65, 0xaa, 0xad, 0xa6, 0x7d, 0x31, 0x92, 0xfe, 0xcf, 0xb6, 0x7e, 0x73, 0x6f, 0x2c, 0x4c, 0x7a, 0xe8, 0x86, 0x14, 0x3d, 0xf4, 0xe9, 0xea, 0x8e, 0xd1, 0x7a, 0x7a, 0xfa, 0xf6, 0x80, 0x6c, 0x6c, 0x0d, 0xed, 0x55, 0xbd, 0x18, 0x55, 0xc6, 0x92, 0x7d, 0x19, 0xaa, 0x74, 0x2d, 0x9f, 0xe9, 0x5a, 0x6e, 0x12, 0x5d, 0xcb, 0x27, 0xba, 0x46, 0xb2, 0x4f, 0x70, 0x18, 0x86, 0x17, 0xb5, 0xc3, 0x70, 0x4f, 0xbe, 0x41, 0x37, 0x75, 0x2d, 0xde, 0xef, 0xc0, 0xbf, 0xe7, 0x60, 0xf8, 0x5b, 0xeb, 0xd5, 0x38, 0x74, 0x2d, 0xcb, 0x96, 0xb7, 0xce, 0x6a, 0xfd, 0x5e, 0x4b, 0x3c, 0x70, 0x5b, 0xa8, 0x7c, 0x01, 0xa6, 0x5f, 0x3f, 0xfe, 0xc5, 0xb8, 0x14, 0xe9, 0xd6, 0xc2, 0xaf, 0x4b, 0x8e, 0xa2, 0x5b, 0xe3, 0xd1, 0xce, 0x32, 0x38, 0x82, 0x9a, 0x19, 0x25, 0xec, 0x6c, 0x90, 0xc0, 0x86, 0x25, 0x49, 0x14, 0x0c, 0x2b, 0x25, 0x04, 0xda, 0x44, 0x81, 0xd4, 0xc6, 0xd7, 0x95, 0xfc, 0xc5, 0x0f, 0xda, 0xee, 0x68, 0xbe, 0xa3, 0xed, 0xef, 0xe3, 0xcf, 0x63, 0xff, 0xcd, 0x50, 0xe3, 0x08, 0xdd, 0x92, 0x74, 0x4f, 0xde, 0xba, 0x27, 0xe1, 0xca, 0xd7, 0x8c, 0x52, 0xa3, 0x85, 0xe2, 0x19, 0x16, 0xaa, 0x1e, 0x07, 0x3c, 0xd6, 0x0a, 0x1c, 0x9b, 0x45, 0x23, 0xc9, 0xfe, 0x8c, 0xec, 0x80, 0xeb, 0x8d, 0xe1, 0x45, 0xbb, 0xdb, 0xc0, 0xe5, 0xa3, 0x5d, 0x77, 0x3a, 0x55, 0x09, 0x6b, 0xbb, 0x72, 0xde, 0x98, 0x0e, 0x50, 0xb6, 0x50, 0xfa, 0x50, 0x76, 0xfd, 0x7b, 0x18, 0xfe, 0x36, 0x6b, 0x41, 0x38, 0x1d, 0x36, 0x68, 0xd8, 0x3c, 0x2e, 0xcf, 0xa6, 0xfa, 0xcd, 0xb4, 0x37, 0x8b, 0x30, 0xa6, 0x3d, 0x5a, 0xb8, 0x05, 0xe1, 0x30, 0xc3, 0x0f, 0x52, 0x34, 0x83, 0xe4, 0x21, 0xf6, 0x53, 0x6c, 0xb3, 0x66, 0xb8, 0x2a, 0x68, 0x8f, 0x3e, 0xa5, 0x06, 0xe0, 0xaf, 0xeb, 0xea, 0x37, 0x53, 0xdb, 0xbe, 0x35, 0x39, 0xe1, 0xbb, 0x99, 0xcf, 0x77, 0x1a, 0xa3, 0x73, 0x12, 0x72, 0x98, 0x52, 0x66, 0xa5, 0xb4, 0xfa, 0x9b, 0xb1, 0x9e, 0x6f, 0x7d, 0x19, 0x32, 0xfc, 0x33, 0x61, 0xf2, 0xcd, 0x1d, 0xe5, 0x34, 0x68, 0x99, 0x37, 0x93, 0xcd, 0xf0, 0x64, 0xc8, 0xba, 0x99, 0x7c, 0x8b, 0xef, 0x87, 0x1c, 0x89, 0x7a, 0xd5, 0xc7, 0xde, 0x47, 0xec, 0x94, 0xe6, 0x03, 0x70, 0x46, 0x3f, 0xc5, 0xa7, 0xc2, 0x9b, 0xfd, 0x50, 0x52, 0x7e, 0x3e, 0x11, 0xbf, 0x70, 0xf4, 0x03, 0xc2, 0xa9, 0x4a, 0x73, 0xfc, 0xbc, 0x2a, 0xc9, 0xe3, 0x78, 0xc4, 0xc4, 0xba, 0xe4, 0x19, 0x84, 0x77, 0xaa, 0x7f, 0x35, 0x3e, 0x35, 0xa0, 0xdd, 0xb8, 0x6c, 0x4b, 0x24, 0x3b, 0xd4, 0x53, 0x71, 0x1e, 0x82, 0x51, 0xb0, 0x24, 0xe9, 0xcf, 0x93, 0xfe, 0x08, 0x28, 0xfe, 0x22, 0x47, 0x30, 0x1a, 0x1c, 0xdc, 0x28, 0xe4, 0x78, 0xe2, 0x3d, 0xa4, 0xcd, 0xa7, 0x5f, 0x3c, 0x51, 0xcc, 0x26, 0x53, 0x21, 0xf7, 0xdd, 0x9d, 0x1a, 0x49, 0x56, 0xaf, 0xee, 0xa2, 0x87, 0x33, 0xad, 0xf3, 0x3d, 0x5e, 0xfd, 0x62, 0xe1, 0x3d, 0xda, 0xa4, 0xdf, 0xfa, 0x22, 0x9d, 0x85, 0xd8, 0x7c, 0xf3, 0xcf, 0xc3, 0x52, 0x69, 0x41, 0x22, 0x42, 0x94, 0x7b, 0x2a, 0x79, 0x1e, 0x71, 0xf8, 0x6c, 0x2e, 0xc8, 0x67, 0x9f, 0x5a, 0xcd, 0xf1, 0x28, 0x37, 0x64, 0xed, 0x58, 0xed, 0x9e, 0x4a, 0x7b, 0x96, 0x42, 0x93, 0x5f, 0xb6, 0x96, 0x81, 0xeb, 0x4e, 0x7d, 0x90, 0x7c, 0x46, 0xf3, 0xe9, 0x7b, 0x15, 0xc5, 0x26, 0xc1, 0x2f, 0x0c, 0xd6, 0x45, 0x33, 0x17, 0x80, 0xc1, 0x5b, 0x3e, 0xb3, 0x0e, 0xcc, 0xb8, 0xc6, 0xb2, 0x24, 0xfc, 0x2c, 0x63, 0x2f, 0x9d, 0x70, 0x67, 0x9b, 0xee, 0xf7, 0xbb, 0xad, 0x2b, 0xa0, 0x39, 0x61, 0x31, 0x30, 0x7a, 0x20, 0x58, 0x15, 0x86, 0x49, 0x65, 0x44, 0x71, 0xf8, 0x3c, 0xef, 0xba, 0xa8, 0xee, 0xbf, 0x77, 0x75, 0xc7, 0x38, 0xa6, 0x8e, 0x9e, 0xa2, 0x2a, 0xc9, 0xb4, 0x3f, 0x3b, 0x45, 0xf0, 0x79, 0xca, 0x95, 0xe2, 0xd3, 0xfd, 0xac, 0x0c, 0xc6, 0x37, 0x5b, 0xd5, 0xd6, 0x8c, 0x16, 0x39, 0x50, 0xfe, 0x8d, 0x86, 0xfa, 0xba, 0x91, 0x2b, 0x2f, 0x69, 0x41, 0x0e, 0x48, 0xa7, 0x78, 0xf4, 0x94, 0x26, 0xb7, 0xc8, 0x78, 0x7f, 0x1d, 0xbf, 0x39, 0xd6, 0xe2, 0xb1, 0x90, 0xb6, 0x29, 0xde, 0xa7, 0x6f, 0x6b, 0xc9, 0x24, 0x79, 0xa8, 0xaf, 0x3b, 0x0c, 0xc6, 0x15, 0xb8, 0x9e, 0xee, 0x42, 0xbe, 0x46, 0x79, 0xda, 0x31, 0x75, 0x32, 0xa7, 0x2e, 0x92, 0xc1, 0xf0, 0x5e, 0xf4, 0x7a, 0x4a, 0x35, 0xac, 0x5f, 0x09, 0xe9, 0x25, 0xf8, 0x66, 0x1a, 0xe7, 0x79, 0x04, 0xef, 0xbe, 0xc0, 0x79, 0x3c, 0x32, 0xa4, 0xbd, 0x19, 0xfd, 0x12, 0x97, 0xf8, 0x71, 0x8b, 0x1d, 0xd3, 0x73, 0xb9, 0xd6, 0xda, 0x95, 0x90, 0x66, 0xc1, 0xa7, 0x1b, 0xf8, 0xe9, 0x49, 0xbc, 0xcb, 0xe3, 0xfc, 0x80, 0xf9, 0x77, 0x46, 0xbf, 0xcc, 0xa5, 0x74, 0x60, 0x9e, 0x21, 0x7c, 0x63, 0xe5, 0x1a, 0x7e, 0x8a, 0x77, 0x0e, 0xca, 0x93, 0x7e, 0x4a, 0x06, 0xfd, 0x46, 0x73, 0x37, 0x47, 0x1b, 0x87, 0xf4, 0x65, 0x2b, 0x57, 0xd2, 0x7d, 0xda, 0xfb, 0xc8, 0x47, 0xa3, 0x2b, 0x3d, 0x7c, 0x7f, 0x01, 0x65, 0xa4, 0x4b, 0x2b, 0xcd, 0xd1, 0x6f, 0x73, 0xfe, 0x3d, 0xd8, 0xfa, 0x0e, 0x4e, 0x7f, 0x17, 0xd3, 0x2f, 0xf2, 0xdd, 0x7b, 0x98, 0xbe, 0x4d, 0x06, 0x78, 0x99, 0x9f, 0x46, 0xb0, 0xfc, 0x93, 0x2b, 0x33, 0xf9, 0xfe, 0x22, 0xbe, 0x59, 0x43, 0x56, 0xf8, 0xfc, 0x34, 0x4a, 0xa5, 0xf2, 0x9d, 0x82, 0xe9, 0xcb, 0x64, 0x48, 0xcf, 0xe5, 0x9a, 0x27, 0x61, 0xfa, 0x45, 0x51, 0x9b, 0x21, 0x2d, 0xd2, 0x21, 0xbe, 0xa5, 0x38, 0x3e, 0xe9, 0x73, 0xc8, 0x06, 0x89, 0x9f, 0x0c, 0x58, 0xaa, 0xcc, 0x77, 0x46, 0x4c, 0xb7, 0x93, 0xb6, 0x39, 0x3f, 0x4d, 0x21, 0x6b, 0xbc, 0x95, 0xa2, 0x9c, 0xc9, 0x14, 0x49, 0x96, 0xef, 0x32, 0x30, 0x8f, 0x1e, 0x7b, 0x96, 0x47, 0x4f, 0x16, 0x1d, 0x7e, 0xcb, 0x6d, 0xb3, 0x60, 0x99, 0x86, 0xf3, 0x14, 0xf9, 0x47, 0x60, 0xd8, 0x32, 0x3d, 0xe9, 0xd1, 0xd0, 0xfe, 0x56, 0xa9, 0xaf, 0x0c, 0xe5, 0x31, 0xc3, 0x29, 0x4e, 0x95, 0x65, 0x8a, 0x73, 0xcc, 0x91, 0x07, 0x34, 0xcc, 0x1c, 0xde, 0xe3, 0x36, 0xc8, 0xd9, 0x63, 0xd2, 0x76, 0x08, 0xdd, 0xe6, 0x44, 0x14, 0x8a, 0xa4, 0x98, 0x4d, 0x5c, 0x7e, 0xd8, 0xc3, 0xf1, 0xa3, 0xae, 0xfa, 0x7e, 0x59, 0x63, 0xa9, 0x4f, 0x48, 0x82, 0x86, 0x65, 0x89, 0x78, 0x2f, 0xcb, 0xef, 0xc6, 0xe7, 0xd2, 0xf1, 0x71, 0x60, 0x96, 0x5d, 0x90, 0xb3, 0xc7, 0xa7, 0xde, 0x8e, 0xb3, 0x09, 0xc7, 0x59, 0x9e, 0xe0, 0xcd, 0x5e, 0xf9, 0xec, 0xf8, 0xd4, 0xc6, 0xd5, 0xf2, 0xcb, 0x88, 0xbf, 0xf9, 0x49, 0xb1, 0x33, 0xc8, 0xd6, 0xfe, 0x88, 0xdb, 0xe0, 0x1e, 0xd7, 0xbe, 0xc6, 0x8f, 0xcf, 0xf6, 0x08, 0x7f, 0x37, 0x58, 0xc3, 0xc0, 0xd8, 0xb7, 0xcb, 0x4b, 0x31, 0xb5, 0x77, 0x6c, 0x6a, 0xe4, 0x19, 0xb9, 0x30, 0x51, 0x5b, 0xe4, 0x9c, 0x2c, 0x8d, 0xcd, 0xd1, 0x84, 0x03, 0x99, 0xc8, 0xd1, 0xd4, 0x48, 0x75, 0x50, 0xcc, 0x8e, 0xb4, 0xdb, 0xae, 0x0e, 0xa9, 0xa6, 0x6e, 0x1c, 0xcd, 0xe1, 0x31, 0x6d, 0xce, 0x1d, 0xdf, 0xe2, 0xa6, 0x47, 0xcf, 0x52, 0xfc, 0xa8, 0xfd, 0x57, 0x2f, 0xe9, 0x8e, 0x2e, 0x35, 0xea, 0x88, 0x56, 0x92, 0x88, 0xf5, 0x45, 0xfe, 0x30, 0x40, 0xbf, 0x33, 0xa5, 0x06, 0xca, 0xfd, 0x0c, 0xa6, 0xee, 0x51, 0x77, 0x7f, 0xa4, 0xe4, 0x98, 0x3b, 0xc9, 0xb9, 0x56, 0xe4, 0xd1, 0xac, 0xf8, 0xbc, 0x5c, 0x77, 0x1c, 0x27, 0x48, 0x96, 0x52, 0x1c, 0x09, 0xd0, 0xb7, 0x52, 0x4d, 0xb2, 0x61, 0x6c, 0x9e, 0xe6, 0x5d, 0xf8, 0xce, 0x8b, 0xe3, 0x23, 0xa5, 0xe2, 0xda, 0x15, 0x97, 0x3a, 0x3e, 0x29, 0xad, 0x6b, 0xc9, 0xc7, 0x7a, 0xa9, 0x0c, 0x89, 0x24, 0xef, 0x5c, 0x4b, 0x24, 0x2b, 0xd4, 0x63, 0x25, 0x1d, 0xe3, 0x24, 0x1f, 0x12, 0xe4, 0xdb, 0x01, 0x94, 0xf2, 0x0f, 0x03, 0xe0, 0x77, 0xe8, 0x82, 0xa9, 0xa5, 0x7e, 0x72, 0x82, 0xf4, 0x64, 0xc7, 0x95, 0x4a, 0x73, 0xf9, 0xc9, 0x3f, 0xa7, 0x54, 0xc2, 0x27, 0xb6, 0x31, 0x4b, 0x19, 0x9f, 0x4f, 0xda, 0xb1, 0xf4, 0x09, 0xb0, 0x6a, 0x25, 0x8e, 0x10, 0x7c, 0x90, 0x92, 0xda, 0xff, 0x49, 0xad, 0x46, 0xf5, 0x57, 0xbd, 0x29, 0x6c, 0xf6, 0x74, 0xa5, 0xe3, 0xa1, 0xf0, 0x89, 0x7d, 0x22, 0x28, 0x44, 0x6f, 0x13, 0x18, 0xaa, 0x33, 0xa6, 0xd6, 0x7f, 0xf9, 0xf2, 0xf8, 0xba, 0xa3, 0xef, 0xa9, 0xd6, 0xf4, 0x27, 0xc5, 0xf3, 0xf7, 0x1f, 0x21, 0xec, 0xe3, 0x88, 0x79, 0xa7, 0xdd, 0xa9, 0xb3, 0x22, 0x8e, 0xa1, 0xdf, 0xef, 0x2f, 0x15, 0x31, 0x41, 0x00, 0x0e, 0x50, 0x4f, 0x1d, 0x08, 0x99, 0xfd, 0x1c, 0x87, 0x64, 0x7c, 0x9f, 0x2f, 0x77, 0xb3, 0xbd, 0xef, 0xb8, 0x7a, 0x5b, 0xcd, 0x2c, 0x0b, 0x2f, 0xfb, 0x2c, 0xfc, 0xb8, 0x2b, 0xea, 0x10, 0xb1, 0x9b, 0x16, 0xd1, 0x5b, 0xef, 0x0a, 0xc8, 0xd1, 0x22, 0x9a, 0xb4, 0x3d, 0xcc, 0x54, 0xc2, 0xc6, 0xf7, 0x97, 0xe5, 0xfc, 0x44, 0xdb, 0xda, 0x86, 0x93, 0xe7, 0xd2, 0x0f, 0x76, 0xd7, 0xc7, 0xe9, 0x99, 0x9c, 0xd9, 0x5a, 0x58, 0xad, 0xd3, 0x38, 0xd6, 0x8f, 0x8e, 0x68, 0x9c, 0x94, 0x56, 0x02, 0xd6, 0xd0, 0x0c, 0xe4, 0x9f, 0x33, 0x6a, 0xc1, 0x3c, 0x23, 0x85, 0x7b, 0xca, 0x46, 0x5a, 0x37, 0xdf, 0xf1, 0x24, 0x71, 0xe9, 0x3f, 0xed, 0xb0, 0xf9, 0x38, 0xce, 0x42, 0x96, 0x0c, 0x9f, 0xf0, 0xaa, 0xad, 0xbb, 0xc1, 0x3e, 0x85, 0x22, 0x18, 0xea, 0x54, 0x9e, 0x1f, 0xac, 0x8a, 0xc0, 0xe5, 0x43, 0x56, 0x51, 0xc3, 0x32, 0xd1, 0x82, 0xd8, 0xcb, 0x0d, 0xc2, 0xb2, 0x32, 0x5b, 0x5b, 0xcf, 0x7a, 0xac, 0xaa, 0x36, 0x7f, 0xae, 0xd0, 0x50, 0x5e, 0xd7, 0x91, 0x8d, 0x92, 0x59, 0x24, 0x5b, 0xaa, 0x40, 0xa9, 0x64, 0x7e, 0xaa, 0x54, 0xf2, 0x05, 0x3f, 0x68, 0xf2, 0x88, 0x59, 0xec, 0x2b, 0x6a, 0x76, 0x21, 0xaa, 0x94, 0x98, 0x21, 0x34, 0x76, 0x12, 0xbb, 0x8d, 0x8a, 0x21, 0xa1, 0xc3, 0x33, 0x91, 0xfd, 0xc8, 0x84, 0x6f, 0x4a, 0xc4, 0x1b, 0x7c, 0x32, 0x11, 0x44, 0xd4, 0x32, 0xe3, 0x9a, 0xb2, 0xa3, 0x45, 0x63, 0x53, 0x86, 0x77, 0x0a, 0xb9, 0xaa, 0x94, 0xf6, 0xe9, 0xf2, 0xc9, 0x53, 0x3d, 0xcb, 0x42, 0xb3, 0xa3, 0x33, 0x12, 0xb2, 0x10, 0xaf, 0x3d, 0xfb, 0x67, 0xf8, 0xf4, 0x75, 0x33, 0x2a, 0xc1, 0x44, 0x92, 0xe8, 0xa2, 0x4b, 0xdc, 0xdf, 0x4d, 0x0b, 0x63, 0x6f, 0xf6, 0xb4, 0xd6, 0x72, 0x6c, 0x08, 0x4b, 0xd4, 0x87, 0x10, 0xcf, 0x27, 0xd9, 0x13, 0x65, 0x4a, 0x29, 0xb0, 0x02, 0x8a, 0x48, 0x5a, 0x75, 0xec, 0xc7, 0x56, 0xba, 0x6e, 0xc2, 0xef, 0xa2, 0xba, 0x80, 0x8f, 0x22, 0xb2, 0xa1, 0x70, 0xee, 0xa5, 0x20, 0xc7, 0xf1, 0xf2, 0x03, 0xf8, 0xdd, 0x1c, 0x5c, 0xb5, 0x67, 0xba, 0x9d, 0x08, 0xef, 0x7e, 0xc5, 0x6f, 0x47, 0x28, 0xd2, 0xda, 0x2a, 0x4a, 0xb2, 0x31, 0x39, 0x81, 0xe3, 0xaf, 0x52, 0xf2, 0xfb, 0xc3, 0x66, 0x35, 0x77, 0x36, 0xe5, 0x96, 0x78, 0xcf, 0xde, 0xca, 0xe5, 0x52, 0x6e, 0x53, 0x6a, 0xee, 0x6a, 0x2d, 0xf7, 0xe8, 0x9b, 0x94, 0x9b, 0x63, 0x39, 0x70, 0x2f, 0x38, 0x72, 0xcd, 0xf0, 0x3d, 0x3b, 0xe2, 0xb6, 0x80, 0x5a, 0xbe, 0x67, 0x28, 0x1f, 0x79, 0xb6, 0x82, 0x5d, 0xb7, 0x60, 0xdb, 0x5b, 0x2d, 0xc7, 0xee, 0x75, 0xad, 0x60, 0x2c, 0xf3, 0xdd, 0xc2, 0x31, 0x64, 0x40, 0xb2, 0x4e, 0x11, 0x29, 0x23, 0x4b, 0xc8, 0x3a, 0x04, 0xef, 0x43, 0x1c, 0xf7, 0x2a, 0xe3, 0x81, 0xc3, 0x98, 0xab, 0x91, 0xa4, 0x6e, 0x84, 0x81, 0x5d, 0xc0, 0x20, 0xf5, 0x34, 0xbf, 0x21, 0xde, 0xd7, 0xd1, 0xc5, 0xbc, 0xda, 0xf4, 0xc5, 0x63, 0x76, 0xc4, 0xdb, 0xd4, 0xf9, 0x53, 0xa1, 0x07, 0x1f, 0x21, 0xfb, 0xef, 0x51, 0xde, 0x0d, 0xc1, 0xd4, 0x8e, 0x1d, 0x9a, 0xdd, 0xa1, 0xfa, 0x7d, 0x8e, 0x80, 0x95, 0x1d, 0xe8, 0x99, 0xfd, 0xd3, 0x66, 0xe1, 0x3c, 0x59, 0x2b, 0xce, 0xb5, 0x6a, 0x7f, 0x57, 0x9b, 0x5f, 0xf7, 0x83, 0xd5, 0x3a, 0xf9, 0x4c, 0x7c, 0x1f, 0x2c, 0x54, 0x71, 0x0e, 0x2c, 0x6d, 0x5f, 0xad, 0xd6, 0xff, 0xe2, 0x6d, 0x30, 0x85, 0x5d, 0x88, 0xa7, 0x76, 0xbe, 0xb3, 0x62, 0x7a, 0x80, 0xef, 0x72, 0x71, 0x4d, 0x6e, 0x8b, 0xea, 0xfa, 0x76, 0x41, 0x76, 0xd8, 0x2c, 0x6a, 0x25, 0xcc, 0xf7, 0xeb, 0xb9, 0x06, 0x3a, 0xe5, 0xc7, 0xd5, 0x48, 0xb0, 0x4b, 0xd5, 0x5f, 0xe0, 0x3d, 0x2e, 0xe1, 0xeb, 0x13, 0x68, 0x77, 0x27, 0xd7, 0x41, 0xfe, 0x6c, 0x51, 0x8e, 0x35, 0x17, 0x28, 0x23, 0x30, 0x39, 0x5c, 0x8d, 0x73, 0x72, 0x4e, 0x34, 0x37, 0xde, 0x7f, 0xaf, 0x93, 0x24, 0x6e, 0x6b, 0xc1, 0x7c, 0x30, 0x15, 0xdc, 0x89, 0x83, 0x65, 0xd1, 0x76, 0x50, 0x03, 0xcd, 0x90, 0x87, 0x72, 0x07, 0xf9, 0xde, 0x31, 0xff, 0xd3, 0xaf, 0x49, 0x1a, 0xa0, 0xfe, 0x8d, 0x94, 0xd8, 0x89, 0x82, 0x19, 0x7f, 0xfc, 0x9b, 0x92, 0x0e, 0x38, 0x8e, 0x98, 0x94, 0x7f, 0xd3, 0x02, 0xe2, 0x44, 0xd8, 0x12, 0xf2, 0xd5, 0x61, 0xaf, 0xdf, 0xfc, 0x34, 0xc2, 0xfc, 0xdb, 0x6a, 0x6f, 0xc9, 0xcf, 0x41, 0xf2, 0x8e, 0x1f, 0xc5, 0x17, 0x32, 0x51, 0x54, 0x97, 0xd9, 0x61, 0x29, 0xee, 0x83, 0x8c, 0xe3, 0x76, 0xfc, 0x4f, 0xc9, 0x06, 0xa2, 0x86, 0xe1, 0xe3, 0x4c, 0xff, 0x8c, 0xd1, 0x1b, 0xab, 0xa1, 0x4d, 0xe1, 0x92, 0x81, 0xbc, 0xc6, 0x91, 0x27, 0x9c, 0xf8, 0x99, 0xbb, 0x47, 0x5b, 0x73, 0x50, 0x89, 0xf6, 0x3b, 0xc0, 0x86, 0xa5, 0xea, 0x61, 0x36, 0x41, 0xb9, 0x55, 0xaa, 0xd6, 0x0d, 0x74, 0x06, 0x57, 0x80, 0x2d, 0xec, 0xc1, 0x71, 0xf1, 0xb8, 0xc9, 0x57, 0x30, 0xfd, 0x99, 0x04, 0xec, 0xfe, 0xe7, 0xc3, 0xf1, 0x9a, 0x56, 0xf0, 0x5e, 0x56, 0x57, 0x24, 0xf3, 0x6b, 0xb4, 0x56, 0xca, 0xc5, 0x3a, 0x67, 0xa6, 0xd4, 0xd9, 0xc0, 0xde, 0x77, 0x54, 0xcf, 0x64, 0x5e, 0xf2, 0xb4, 0xe3, 0xc0, 0x35, 0xbd, 0x4b, 0x22, 0x9f, 0x0d, 0xcd, 0x60, 0x72, 0xb8, 0x50, 0xbe, 0x57, 0x70, 0xcd, 0x9e, 0x61, 0x43, 0xc8, 0xad, 0x81, 0xd5, 0x20, 0x4f, 0x27, 0x8c, 0xb5, 0x35, 0x83, 0xc5, 0xee, 0x82, 0x6c, 0xa7, 0x41, 0xce, 0xc4, 0x37, 0xb9, 0x6c, 0xff, 0x9e, 0xe9, 0x2c, 0x80, 0xfc, 0x93, 0x5d, 0xfd, 0x8f, 0x43, 0xfe, 0xed, 0x39, 0xa4, 0x09, 0xe7, 0x76, 0xe8, 0x83, 0x88, 0x63, 0xbf, 0x45, 0xd9, 0xe2, 0x62, 0xfd, 0xe6, 0x76, 0x45, 0x6e, 0x08, 0x76, 0xb5, 0x90, 0x57, 0xbe, 0x29, 0x74, 0x3a, 0xd0, 0x75, 0xa0, 0xee, 0xc1, 0xe3, 0x6b, 0xe5, 0x8c, 0x6d, 0x31, 0x5b, 0x48, 0x68, 0x00, 0xd4, 0x6f, 0xee, 0xeb, 0x5a, 0x7e, 0x51, 0xb6, 0x57, 0x76, 0x49, 0x69, 0x22, 0x87, 0x9c, 0x89, 0x6f, 0x69, 0xaf, 0x25, 0xfe, 0x7e, 0x99, 0x21, 0xd8, 0x15, 0x3e, 0x4f, 0xf1, 0x26, 0x66, 0x06, 0xc1, 0x32, 0xd3, 0x0f, 0xd9, 0x33, 0xab, 0x10, 0xf2, 0x14, 0xf9, 0xc2, 0xab, 0x7a, 0x9e, 0x46, 0x98, 0x91, 0x37, 0xe1, 0x31, 0x70, 0x7b, 0x2e, 0xb0, 0x36, 0x2a, 0x55, 0xc3, 0x0b, 0x31, 0x86, 0x5b, 0x29, 0xce, 0x33, 0x2f, 0x6b, 0xf9, 0xd3, 0x9f, 0x0a, 0xb7, 0xf6, 0x7e, 0x61, 0x3d, 0x48, 0x1e, 0x92, 0xb4, 0xd9, 0xf2, 0xa9, 0x83, 0xb1, 0x3d, 0x4b, 0x85, 0x5f, 0x46, 0x9b, 0xb2, 0x7a, 0x66, 0x75, 0x1a, 0xf9, 0x6a, 0xd1, 0xb0, 0xff, 0xd3, 0x6c, 0x15, 0x86, 0xe6, 0x94, 0xbd, 0x93, 0x5c, 0x3e, 0xcf, 0x16, 0xe3, 0xcf, 0x7b, 0x1d, 0x77, 0xd7, 0xab, 0xde, 0x4f, 0x73, 0xdc, 0x15, 0xc8, 0x61, 0x7c, 0x89, 0xdd, 0x14, 0xf2, 0xa7, 0xd2, 0xb1, 0x43, 0xd5, 0xf6, 0xca, 0xe0, 0xbd, 0x7c, 0xc4, 0x26, 0xde, 0x3b, 0xf6, 0xd8, 0x9a, 0xc0, 0xb0, 0xf0, 0x31, 0xec, 0x91, 0x03, 0xb2, 0x17, 0xc6, 0x6e, 0xf2, 0xe1, 0x0c, 0x51, 0xf5, 0x36, 0x10, 0xb2, 0x76, 0x6c, 0xf9, 0x4c, 0xa8, 0x46, 0x79, 0xa6, 0xc9, 0xbf, 0x1b, 0x6c, 0xdc, 0x76, 0x9d, 0xa6, 0xb3, 0xc1, 0xb4, 0x55, 0xcc, 0x0c, 0x93, 0xf3, 0x4e, 0xb0, 0x05, 0x5b, 0x20, 0x37, 0x52, 0xdf, 0x36, 0xb3, 0x5a, 0xcf, 0x10, 0x68, 0x8b, 0xbe, 0xff, 0xec, 0xe3, 0x40, 0x3b, 0xd1, 0xae, 0xe3, 0xf7, 0x92, 0x0e, 0x9c, 0xa0, 0x34, 0xb8, 0x56, 0x73, 0xe0, 0x9b, 0x5d, 0x50, 0x1a, 0xaf, 0xc5, 0x1c, 0x68, 0x02, 0x17, 0xcd, 0xc2, 0x4f, 0xce, 0xf1, 0x0e, 0xd5, 0x14, 0x01, 0xad, 0xee, 0x73, 0xc4, 0x83, 0xd5, 0xb9, 0x44, 0xbb, 0x58, 0xfb, 0x29, 0x1e, 0x06, 0xad, 0x47, 0xe3, 0x5f, 0xe6, 0xb2, 0xe7, 0xa7, 0x39, 0xf8, 0x8e, 0x76, 0x68, 0xa5, 0x36, 0xd0, 0xe6, 0xf3, 0x27, 0xa7, 0x13, 0xf3, 0x59, 0x68, 0x78, 0x08, 0x8b, 0x29, 0xaf, 0xc7, 0xd6, 0x82, 0xad, 0x9d, 0x85, 0x1c, 0x6e, 0x16, 0xe4, 0xaa, 0x7e, 0x1c, 0x2d, 0xf1, 0x36, 0xa3, 0x14, 0x83, 0x58, 0xa4, 0x6f, 0x1f, 0x65, 0xcb, 0xdd, 0x74, 0xe1, 0x3f, 0x45, 0xc0, 0x96, 0xa9, 0xa9, 0x25, 0xf8, 0x84, 0x32, 0xac, 0xd1, 0xa9, 0x4f, 0x56, 0xf2, 0x9e, 0x05, 0x4a, 0x74, 0x5c, 0x6b, 0x3a, 0xa6, 0x74, 0x38, 0xa1, 0x7e, 0x33, 0x97, 0x8a, 0xab, 0x30, 0x5d, 0x86, 0x5a, 0x7e, 0x13, 0xcd, 0xe7, 0x88, 0x88, 0x2e, 0x36, 0xfc, 0x0f, 0x3d, 0x48, 0xd9, 0x7d, 0xec, 0xa1, 0x7c, 0xf6, 0xe2, 0x83, 0x81, 0xae, 0xe8, 0x4d, 0xd5, 0x70, 0x28, 0x16, 0x2c, 0x80, 0xc9, 0xcd, 0x00, 0x67, 0x11, 0xf7, 0xea, 0x28, 0x4e, 0x98, 0x4a, 0xa3, 0x84, 0xed, 0x9c, 0x4f, 0xc3, 0x95, 0xcb, 0xc3, 0x4c, 0x59, 0xa7, 0x93, 0xff, 0x79, 0xf6, 0x37, 0x99, 0xae, 0xd1, 0x55, 0xd1, 0x3a, 0xaa, 0x27, 0x9c, 0xa5, 0xe6, 0x1d, 0xa4, 0xd6, 0xfd, 0xd3, 0xaf, 0xb1, 0xc4, 0x65, 0x6e, 0x83, 0x56, 0x62, 0x47, 0x82, 0x2b, 0xa8, 0xbd, 0xb8, 0xbc, 0x8b, 0xf2, 0x45, 0x2c, 0xb2, 0x57, 0x6d, 0xad, 0x51, 0x60, 0x22, 0x7e, 0x31, 0x4b, 0xdd, 0x0f, 0xbe, 0xa2, 0xb6, 0x22, 0x57, 0xfd, 0x62, 0xb5, 0x0d, 0xc4, 0xee, 0xeb, 0xc8, 0x3e, 0x96, 0x73, 0xf4, 0x09, 0xb8, 0x5f, 0x6e, 0x4a, 0x82, 0xfb, 0xbb, 0x66, 0xaf, 0xf0, 0x12, 0xc3, 0xed, 0x02, 0x05, 0x57, 0x96, 0x4a, 0x75, 0x5b, 0x71, 0xb5, 0x5e, 0x1e, 0xd4, 0x3c, 0x2c, 0xb3, 0x87, 0x26, 0xa3, 0xf4, 0x4d, 0xa2, 0xcf, 0xcc, 0x13, 0x28, 0x96, 0xe0, 0xe4, 0x04, 0x57, 0x40, 0x4c, 0xc3, 0x54, 0xc2, 0x56, 0x7c, 0x23, 0x34, 0x22, 0x93, 0xde, 0x8d, 0x3d, 0x09, 0xc1, 0x92, 0x42, 0x54, 0x12, 0xc5, 0x5c, 0x43, 0x7c, 0x76, 0x90, 0x47, 0x8a, 0x64, 0x3e, 0x63, 0x13, 0xe7, 0xe9, 0x2a, 0x84, 0xfe, 0xf4, 0x24, 0xce, 0x3b, 0x53, 0x94, 0xac, 0x19, 0xf4, 0x51, 0xd0, 0x28, 0xd6, 0x9f, 0x7e, 0x9a, 0x44, 0x25, 0xd5, 0xba, 0xb1, 0x3c, 0x13, 0xd6, 0xef, 0x18, 0x5b, 0x3f, 0x9d, 0x9a, 0x12, 0x0d, 0xf2, 0xff, 0x0c, 0xbf, 0x5b, 0x59, 0x4f, 0xbb, 0xb2, 0x26, 0xd2, 0xac, 0xfa, 0xb6, 0xaa, 0x81, 0x21, 0x6c, 0xc4, 0x3c, 0x12, 0xe1, 0x9c, 0x5d, 0x8d, 0x5e, 0xc1, 0xde, 0x0a, 0xcc, 0x1a, 0x56, 0x69, 0xf6, 0x76, 0xb0, 0x9d, 0x7c, 0x63, 0xd3, 0xe9, 0x06, 0xd1, 0x4f, 0x81, 0x8b, 0xb0, 0x5e, 0xa3, 0x00, 0x7f, 0xb2, 0xf1, 0x39, 0x87, 0x5e, 0xeb, 0x09, 0x8e, 0x37, 0x7b, 0xe2, 0x89, 0x84, 0x34, 0x0b, 0x88, 0xe4, 0xfe, 0x45, 0xf2, 0xc5, 0x73, 0xd7, 0x29, 0xc4, 0xa4, 0xb4, 0xa4, 0xb9, 0x44, 0x76, 0x34, 0x45, 0xa2, 0xef, 0x1f, 0xef, 0xa5, 0x37, 0x14, 0x23, 0x81, 0xdb, 0x71, 0x3f, 0xdb, 0xd4, 0x93, 0x57, 0x20, 0x15, 0x36, 0x1f, 0x6f, 0x41, 0xd8, 0x18, 0xa2, 0xc5, 0x48, 0xcb, 0xe3, 0x90, 0xf9, 0x78, 0x93, 0xf0, 0xa4, 0x66, 0x30, 0x0b, 0x1f, 0x45, 0xda, 0x18, 0xd2, 0xb9, 0x60, 0xf2, 0x38, 0x92, 0x7e, 0x9c, 0xbb, 0x89, 0x35, 0xdf, 0x6a, 0x80, 0x7d, 0x39, 0xfd, 0xc3, 0x2e, 0xca, 0xe7, 0x26, 0xaf, 0x97, 0x26, 0xf1, 0x8c, 0x90, 0x34, 0x31, 0xfd, 0x62, 0x78, 0xfe, 0xc3, 0xae, 0x71, 0xe3, 0x29, 0xd9, 0x10, 0x13, 0x22, 0x85, 0x09, 0xed, 0xd0, 0x8f, 0x48, 0xef, 0x42, 0x68, 0xd4, 0xe5, 0x46, 0xcd, 0x58, 0x07, 0xfb, 0xa6, 0x74, 0x23, 0x27, 0xd6, 0xb4, 0xf1, 0x3e, 0x3a, 0x24, 0x46, 0x4d, 0xd3, 0x35, 0x52, 0xbd, 0x3d, 0x93, 0x9e, 0x51, 0x63, 0xd4, 0x88, 0xe3, 0x22, 0x2f, 0x27, 0x1f, 0x68, 0xfa, 0xb6, 0xbb, 0xa4, 0x0a, 0x07, 0xb6, 0x8f, 0x7d, 0xb3, 0x1a, 0x91, 0xd3, 0x98, 0x64, 0x3a, 0x89, 0x5e, 0x44, 0x67, 0x9b, 0x74, 0x9a, 0xd5, 0x01, 0x77, 0x03, 0x5b, 0xea, 0xed, 0x76, 0x64, 0xe1, 0x2c, 0xde, 0x84, 0xfd, 0x93, 0xc9, 0x5f, 0x72, 0x39, 0xed, 0x73, 0x9e, 0x9b, 0x4b, 0x7e, 0xea, 0xaa, 0xb1, 0xde, 0x0c, 0x98, 0x83, 0xed, 0x9f, 0x23, 0x64, 0xc6, 0xb9, 0x3e, 0xa8, 0x6d, 0xd8, 0x6c, 0x76, 0x22, 0x5f, 0x9e, 0x1c, 0xce, 0x40, 0x09, 0x84, 0xfa, 0x5e, 0x26, 0x1b, 0x31, 0x9f, 0x17, 0xca, 0x30, 0x5f, 0x59, 0x3c, 0x5f, 0x5d, 0x99, 0x1b, 0x6a, 0x4f, 0xae, 0x82, 0x20, 0x4a, 0xde, 0xe9, 0xd4, 0xaa, 0x46, 0x03, 0x3d, 0x49, 0x15, 0xe4, 0xd7, 0x37, 0x92, 0x85, 0xd4, 0x7d, 0x8e, 0xab, 0x85, 0x68, 0xe5, 0x70, 0x31, 0xc7, 0x74, 0x9d, 0x1e, 0xaa, 0x62, 0xaf, 0xa4, 0xa3, 0xfd, 0x4f, 0xc1, 0xd2, 0x65, 0x44, 0x6d, 0xe6, 0x83, 0xdf, 0xbf, 0x55, 0x8c, 0xeb, 0x3f, 0xf4, 0xb8, 0x7c, 0x51, 0xf0, 0xb8, 0x21, 0x68, 0xf5, 0x59, 0xa7, 0x1c, 0xdb, 0x80, 0x77, 0xb5, 0x9a, 0xf4, 0xe1, 0xd6, 0x61, 0xbd, 0x75, 0x08, 0x29, 0xbf, 0xbb, 0x1c, 0x5b, 0x5c, 0x03, 0x38, 0xae, 0x97, 0xd6, 0xa3, 0x94, 0x5c, 0x7d, 0x4b, 0x39, 0xae, 0x29, 0xdc, 0xd0, 0xc6, 0x27, 0x43, 0x6e, 0x28, 0xc4, 0xde, 0x97, 0xb4, 0xe9, 0xf6, 0x75, 0x36, 0x36, 0x67, 0x3b, 0x61, 0x72, 0xa0, 0xcb, 0xe3, 0xbf, 0x25, 0x00, 0x26, 0x3e, 0x49, 0x5c, 0x72, 0xcb, 0x4a, 0xc8, 0x07, 0xd2, 0xa1, 0x4e, 0xc3, 0xa7, 0x5a, 0x7c, 0x2a, 0x05, 0x0b, 0x3e, 0x19, 0xf0, 0x69, 0x0e, 0x3e, 0x21, 0x8f, 0xc6, 0x5f, 0x0f, 0xe4, 0xe2, 0x6f, 0x31, 0xe4, 0xe3, 0x9b, 0x74, 0x7c, 0x63, 0xb3, 0x4d, 0x3e, 0x1e, 0x3b, 0x7e, 0xaf, 0x68, 0xc9, 0x5c, 0x6c, 0x85, 0x3f, 0xc2, 0xbe, 0x6b, 0x91, 0x93, 0x5c, 0x32, 0xdc, 0xe2, 0xe7, 0xb8, 0xad, 0x16, 0x6b, 0x05, 0x59, 0xe7, 0x32, 0x17, 0xca, 0xaa, 0x7a, 0x1f, 0x64, 0xeb, 0x7c, 0xec, 0x77, 0x1d, 0xf2, 0x88, 0x9d, 0xd8, 0x6f, 0xfb, 0x6b, 0xcf, 0xff, 0x18, 0xfb, 0x1b, 0xba, 0x27, 0xb8, 0x3e, 0x92, 0x23, 0x55, 0x4b, 0x4f, 0x81, 0x5f, 0xce, 0x6c, 0xfb, 0x62, 0xb5, 0xfe, 0xc1, 0x97, 0x64, 0x8b, 0xad, 0xb2, 0x2d, 0x22, 0x67, 0xb8, 0xdc, 0xe0, 0xb7, 0x55, 0xca, 0x30, 0xba, 0x24, 0x1a, 0x41, 0x7e, 0x5a, 0x1f, 0xbc, 0x27, 0x4c, 0xde, 0xca, 0x03, 0x52, 0x0b, 0x4a, 0x67, 0xe6, 0x84, 0x74, 0xc6, 0xba, 0x2e, 0x39, 0x71, 0x99, 0xac, 0x05, 0x65, 0xf8, 0xfe, 0x0f, 0x17, 0x33, 0xe5, 0xca, 0x74, 0xcf, 0x22, 0x6c, 0xff, 0xf0, 0x51, 0xa6, 0xe4, 0x99, 0xc8, 0xf1, 0x4d, 0x52, 0xc5, 0x4d, 0xb5, 0xec, 0x2b, 0x2f, 0x8f, 0xed, 0x95, 0x1b, 0xf9, 0x6f, 0x0a, 0xff, 0xe2, 0x2a, 0x6b, 0x84, 0xd7, 0xae, 0xd6, 0x0a, 0xeb, 0x3d, 0xf4, 0x25, 0xe1, 0xe5, 0x87, 0xab, 0x53, 0x38, 0x8d, 0xaa, 0x8f, 0xc5, 0xeb, 0xcd, 0x3e, 0xa4, 0x77, 0x6d, 0x28, 0x43, 0x92, 0xbe, 0x3b, 0xfb, 0x58, 0xf3, 0x6f, 0x21, 0xbf, 0x00, 0x41, 0xe4, 0x95, 0x11, 0x43, 0xb4, 0x5e, 0x3d, 0x31, 0x31, 0x39, 0x50, 0xf2, 0x49, 0xda, 0x8f, 0x76, 0xd0, 0xfa, 0xa3, 0xe6, 0x92, 0x49, 0xc7, 0xeb, 0x3d, 0x96, 0x27, 0xa3, 0x26, 0xd2, 0xeb, 0x9d, 0x21, 0x64, 0x74, 0xb6, 0xcc, 0x3d, 0xdb, 0x43, 0xeb, 0x92, 0xa8, 0xbe, 0xef, 0x71, 0xe4, 0xda, 0x58, 0xb7, 0xc7, 0x37, 0x23, 0x40, 0x7e, 0x27, 0x6a, 0x7f, 0xb7, 0x34, 0x49, 0x5e, 0x4c, 0x92, 0x10, 0x52, 0xe8, 0x4d, 0xc4, 0x13, 0xe7, 0x78, 0x45, 0xac, 0x9d, 0x80, 0x78, 0x24, 0xf9, 0xd8, 0xab, 0x75, 0x29, 0x73, 0x60, 0x48, 0xa6, 0x1a, 0x7e, 0xbd, 0xac, 0xae, 0x20, 0x3e, 0xe8, 0x20, 0x38, 0x69, 0xb4, 0xfe, 0x83, 0x8e, 0xb1, 0x32, 0x33, 0xd9, 0xc3, 0x92, 0xfd, 0x99, 0x13, 0xa5, 0x3b, 0xae, 0xdb, 0xc3, 0x7f, 0xa9, 0x1c, 0x34, 0xa6, 0x71, 0xb3, 0x0f, 0x0a, 0x6d, 0x2c, 0xe7, 0x23, 0x85, 0x49, 0x17, 0xb3, 0xa3, 0x61, 0x73, 0x6b, 0xfd, 0xde, 0x58, 0xa3, 0xa1, 0xed, 0xe6, 0x6a, 0x3d, 0xf9, 0x2b, 0x8e, 0x94, 0x38, 0xaa, 0xe4, 0xc2, 0xa0, 0xa1, 0xc5, 0x29, 0xf6, 0x2f, 0xa4, 0x0a, 0x89, 0xd7, 0x24, 0x08, 0xa5, 0x1e, 0x3a, 0x9f, 0x4e, 0x7a, 0x7e, 0x04, 0x9f, 0x0d, 0x6d, 0xb3, 0xaa, 0xf5, 0xb9, 0xf9, 0xe1, 0x97, 0xb9, 0x67, 0x32, 0xce, 0x61, 0xbf, 0x3b, 0x3d, 0x70, 0x27, 0x78, 0x45, 0x0b, 0xd6, 0xbd, 0xc7, 0xda, 0x64, 0x24, 0x6d, 0xaa, 0xbc, 0xef, 0x8f, 0x7b, 0x98, 0xf7, 0x65, 0xc8, 0x79, 0x47, 0x1f, 0x07, 0xe9, 0xe8, 0x6e, 0xb6, 0x74, 0x4b, 0x96, 0x3e, 0xcc, 0x09, 0xce, 0xf6, 0xc7, 0xfb, 0x93, 0xc7, 0x79, 0x29, 0xca, 0x82, 0x04, 0x43, 0xf9, 0x74, 0xb2, 0x5c, 0xe1, 0x98, 0xc5, 0x52, 0x19, 0x49, 0x0d, 0x49, 0x34, 0x7e, 0x6c, 0xbf, 0xff, 0x58, 0xa2, 0xf5, 0x9b, 0xf9, 0x81, 0x81, 0xbd, 0xd7, 0x68, 0x79, 0x59, 0x3e, 0x8c, 0x98, 0xfe, 0x75, 0x00, 0x7b, 0x83, 0x9c, 0x92, 0xe5, 0x0d, 0x15, 0xfa, 0x17, 0x47, 0xe9, 0x3b, 0xb2, 0x71, 0x96, 0xcd, 0xff, 0x7a, 0x38, 0x6c, 0x68, 0x2b, 0xaa, 0xd6, 0x23, 0xbd, 0x75, 0x08, 0x3f, 0xe7, 0x4e, 0x55, 0x82, 0x81, 0xc3, 0x44, 0xbb, 0xe0, 0x51, 0x6e, 0xb7, 0x01, 0xbf, 0x3a, 0xe7, 0x06, 0xad, 0x4f, 0x6b, 0x4e, 0xb2, 0xb4, 0x1e, 0x97, 0x27, 0x2e, 0x72, 0xff, 0xc3, 0xab, 0x11, 0xa3, 0x1c, 0x7d, 0x58, 0x53, 0xa4, 0x58, 0x9d, 0x25, 0xb8, 0x0e, 0xb9, 0x18, 0xd4, 0xee, 0xa3, 0x96, 0x41, 0x7c, 0x47, 0x1c, 0xe0, 0xa2, 0x74, 0x0b, 0xd6, 0x8e, 0x7c, 0x50, 0x2b, 0x6f, 0x2f, 0x49, 0x68, 0x4f, 0xdf, 0x1b, 0xb1, 0x26, 0xc3, 0x4d, 0xbb, 0x5b, 0x5b, 0xaa, 0xf1, 0x21, 0x9a, 0x33, 0x63, 0x21, 0x6b, 0x4b, 0xd7, 0x20, 0x7b, 0xb1, 0x78, 0x22, 0x99, 0x81, 0xa1, 0x7b, 0x8a, 0xb9, 0x27, 0x79, 0x87, 0x77, 0x43, 0x76, 0x1c, 0x67, 0xe9, 0xd4, 0x35, 0x2b, 0xa9, 0x47, 0x49, 0x12, 0xd2, 0xfb, 0x27, 0xb9, 0x47, 0x76, 0xf5, 0x5c, 0x96, 0xf3, 0xac, 0x7f, 0x69, 0x4c, 0x9e, 0xa7, 0xe3, 0x78, 0xa7, 0xb6, 0xe0, 0xfd, 0xbd, 0xc9, 0x63, 0x6b, 0x48, 0x44, 0x14, 0x49, 0x48, 0x86, 0x8d, 0x8c, 0xcf, 0x62, 0x15, 0x34, 0x66, 0x5c, 0x23, 0x76, 0x6d, 0x0e, 0xd9, 0x7d, 0x49, 0x32, 0xed, 0x9d, 0x28, 0xd3, 0xe2, 0x4a, 0x07, 0x4b, 0xcf, 0xe2, 0x5d, 0x22, 0xad, 0xf6, 0x52, 0x6e, 0x61, 0xf6, 0x38, 0x49, 0x37, 0x09, 0xd7, 0xde, 0xb7, 0x26, 0xb7, 0x87, 0xd6, 0x4e, 0x14, 0x61, 0xca, 0x43, 0xde, 0x33, 0x72, 0xe7, 0x63, 0x59, 0x05, 0x5e, 0x45, 0xa1, 0xe8, 0x70, 0xdc, 0x26, 0x07, 0xff, 0x71, 0x39, 0x3f, 0x2c, 0x63, 0xfc, 0xc9, 0x8e, 0x98, 0x70, 0x85, 0xf1, 0x14, 0xeb, 0xf7, 0x70, 0x9d, 0xef, 0x1d, 0xd2, 0x7a, 0xcc, 0x7d, 0x99, 0x8e, 0x18, 0xe2, 0x12, 0xbb, 0x3b, 0xc9, 0xd2, 0x68, 0xa4, 0x38, 0xdb, 0xab, 0xbc, 0x21, 0x67, 0x31, 0xe4, 0x55, 0x9c, 0x7b, 0x6f, 0x63, 0xf2, 0x8c, 0x7f, 0x6f, 0x63, 0x72, 0xbb, 0x6c, 0x66, 0x3a, 0x7f, 0xe6, 0x7e, 0xa4, 0x8d, 0x91, 0x57, 0x5f, 0x96, 0x07, 0x84, 0xe6, 0x11, 0x7d, 0x49, 0xd2, 0xd1, 0x7b, 0xf5, 0xac, 0x5d, 0x64, 0x88, 0xeb, 0x7e, 0x59, 0x90, 0xef, 0x64, 0xb7, 0xea, 0xf6, 0x92, 0x1e, 0xba, 0x59, 0x95, 0xd9, 0x4c, 0x74, 0xe5, 0xf9, 0x69, 0xa6, 0xd5, 0x3c, 0xbe, 0x25, 0x4f, 0x9e, 0x46, 0x5c, 0x93, 0x98, 0xda, 0x80, 0x25, 0x08, 0x87, 0xda, 0x0e, 0x7d, 0x32, 0xe5, 0xd1, 0x64, 0xfb, 0xd2, 0x32, 0x75, 0x0e, 0x5a, 0x5c, 0x2d, 0x42, 0xbe, 0x8f, 0xcf, 0xaf, 0x14, 0x79, 0x8b, 0xe7, 0x55, 0x2c, 0x9c, 0xc3, 0x73, 0x4b, 0x85, 0xd0, 0xbb, 0x3f, 0x89, 0x43, 0x68, 0x6d, 0x38, 0xcb, 0xb1, 0x12, 0xd7, 0xfa, 0x2e, 0x5e, 0xeb, 0x67, 0x96, 0x74, 0xd0, 0x7c, 0xc3, 0x95, 0x7a, 0x1a, 0x69, 0xea, 0xe1, 0xd5, 0xc0, 0xf3, 0x6b, 0x17, 0x41, 0x12, 0xe5, 0xb5, 0x67, 0x10, 0x66, 0x27, 0x64, 0x80, 0x1d, 0x6a, 0x39, 0x4b, 0xc4, 0x9a, 0x00, 0x7a, 0xb0, 0x1c, 0x9f, 0xd4, 0x2c, 0x6c, 0x7b, 0xc2, 0x79, 0x2a, 0x5e, 0xe0, 0x33, 0xe2, 0x85, 0xa5, 0xae, 0xff, 0xc2, 0x09, 0x96, 0xb8, 0xe6, 0xcb, 0x64, 0x53, 0x3f, 0xa0, 0xbe, 0xbd, 0x13, 0xc8, 0x1f, 0x35, 0xbd, 0xdd, 0xcf, 0xdc, 0xc9, 0xe3, 0xce, 0xfc, 0x2c, 0xea, 0x75, 0xe1, 0x3d, 0xae, 0x2b, 0x5f, 0x36, 0x7d, 0x3e, 0xf5, 0xba, 0x30, 0x98, 0x3c, 0xc7, 0x96, 0xe6, 0x0b, 0x3b, 0x45, 0x92, 0x39, 0x35, 0x3a, 0x71, 0x61, 0x80, 0x7d, 0xd1, 0x40, 0xca, 0x8a, 0x22, 0x97, 0xad, 0xb9, 0x4b, 0x90, 0x8f, 0x59, 0x35, 0x18, 0xab, 0x7e, 0x5d, 0xd9, 0x47, 0x98, 0x43, 0x85, 0x31, 0xeb, 0x0f, 0xc4, 0x3d, 0x7a, 0x69, 0x58, 0x88, 0x72, 0x76, 0x01, 0xb7, 0xb3, 0x9a, 0xa9, 0x2c, 0xed, 0xe2, 0xde, 0xdf, 0x56, 0x80, 0x34, 0xcb, 0x67, 0x76, 0xb0, 0x9c, 0x04, 0x70, 0x82, 0xfc, 0x2e, 0xa8, 0x7d, 0x12, 0xbd, 0xec, 0x28, 0xff, 0xc0, 0xa4, 0x90, 0x5c, 0x8e, 0xd7, 0x51, 0x59, 0xbf, 0xb0, 0xe7, 0x97, 0x87, 0x23, 0x99, 0x16, 0x0b, 0xc5, 0xbb, 0x88, 0x18, 0xf1, 0xb7, 0x2c, 0x7c, 0xc1, 0x15, 0xf8, 0xe7, 0x97, 0x52, 0x52, 0xf4, 0xa1, 0xfb, 0xf7, 0xdf, 0xbf, 0x4a, 0xb3, 0x24, 0x22, 0x4d, 0x4d, 0x5c, 0x9b, 0xbc, 0xf3, 0x90, 0xbf, 0xf8, 0x1c, 0x58, 0xcd, 0x52, 0x05, 0x4a, 0x92, 0x5e, 0xbb, 0x41, 0xec, 0xa7, 0x0e, 0xdf, 0x2f, 0x34, 0x6e, 0xc3, 0x66, 0xb9, 0x44, 0xf8, 0x96, 0x88, 0x14, 0xcb, 0x75, 0x04, 0x07, 0xf6, 0x5a, 0x9c, 0x65, 0x35, 0x1f, 0xdf, 0x98, 0xc8, 0x8b, 0x72, 0x88, 0xa7, 0x4d, 0x8d, 0x55, 0xbe, 0xae, 0xc3, 0x41, 0x18, 0x62, 0xb2, 0xb1, 0xff, 0x94, 0xf6, 0x51, 0xea, 0x1b, 0x41, 0xf6, 0x9d, 0xd5, 0x1c, 0x17, 0x33, 0x0e, 0xd3, 0xb6, 0x76, 0x5c, 0x41, 0x9e, 0xa1, 0x75, 0x3a, 0x6b, 0x38, 0x22, 0x96, 0xa3, 0x4c, 0x96, 0x65, 0xad, 0x8f, 0x08, 0x5a, 0x82, 0x18, 0x1e, 0xce, 0xbb, 0xb9, 0x1c, 0xf2, 0xe5, 0x42, 0xfb, 0x4c, 0xc8, 0x8f, 0x98, 0x88, 0x67, 0xed, 0x5d, 0x1b, 0x36, 0xfa, 0x1f, 0xc3, 0xb4, 0x3c, 0x0d, 0xc3, 0xdf, 0x91, 0x92, 0x31, 0x9c, 0xd6, 0xed, 0xb7, 0xfa, 0xc0, 0x86, 0x52, 0xc9, 0x1b, 0x62, 0x5f, 0x4a, 0x2a, 0x8b, 0xfb, 0x6c, 0x5d, 0x31, 0x5e, 0xda, 0xd1, 0xb0, 0xfa, 0xfc, 0x11, 0xc6, 0x90, 0xc6, 0x99, 0xf3, 0xc1, 0x64, 0x7a, 0x1c, 0x26, 0xb1, 0x44, 0x80, 0xd2, 0x03, 0x8d, 0x57, 0x62, 0x3e, 0x94, 0x5f, 0x39, 0x1f, 0x60, 0xeb, 0x31, 0x75, 0xa5, 0xcd, 0x9e, 0x14, 0x02, 0xc2, 0x0f, 0x99, 0x09, 0x73, 0xc3, 0x75, 0x11, 0xc9, 0xad, 0xce, 0xa0, 0xb5, 0x87, 0x92, 0xec, 0x6b, 0xcc, 0xbc, 0x17, 0xd8, 0x9b, 0x8a, 0x69, 0xe7, 0xc3, 0x29, 0x7c, 0xd2, 0x90, 0x90, 0x46, 0x38, 0xca, 0x95, 0x28, 0xa5, 0x1d, 0x57, 0x90, 0x71, 0x2d, 0xc3, 0xb7, 0x4f, 0x27, 0xa8, 0x26, 0x6b, 0x62, 0xe1, 0x7a, 0xfe, 0xed, 0xcb, 0x6c, 0x57, 0xab, 0x53, 0xf5, 0xcd, 0xfe, 0x46, 0xfb, 0xca, 0xaa, 0xc6, 0xab, 0xff, 0x5a, 0xf6, 0x93, 0xc9, 0x4e, 0x91, 0x76, 0x38, 0xec, 0xc2, 0x56, 0x47, 0x6a, 0x23, 0xdf, 0x44, 0xb6, 0xbe, 0xae, 0x46, 0x3d, 0x47, 0x22, 0xcd, 0x7f, 0xba, 0xeb, 0x76, 0x9b, 0x2d, 0x4d, 0x96, 0x16, 0x76, 0x45, 0x2f, 0x1f, 0x8a, 0xd5, 0x93, 0x26, 0xa6, 0x3f, 0xc9, 0xe3, 0x9d, 0x18, 0x07, 0xd3, 0x99, 0x8d, 0x98, 0xef, 0x94, 0xec, 0x8a, 0x4b, 0x9f, 0x3c, 0xfb, 0x15, 0x8f, 0x47, 0x6f, 0xf4, 0x29, 0x1f, 0x7f, 0x1d, 0x29, 0xdb, 0x9b, 0x1b, 0x5f, 0x7d, 0x9c, 0xe5, 0x61, 0x33, 0x69, 0x00, 0x2f, 0xa5, 0x55, 0x90, 0x93, 0x77, 0xb5, 0xfe, 0x0b, 0xf3, 0xad, 0xa0, 0x38, 0xa7, 0xf2, 0x9b, 0xdc, 0x7a, 0x5a, 0xa3, 0x58, 0xd8, 0x1a, 0x4f, 0x42, 0x89, 0x7f, 0x26, 0x98, 0x5a, 0x33, 0x06, 0x3b, 0xad, 0xf0, 0xe6, 0x86, 0xad, 0xbd, 0xbc, 0x0a, 0xab, 0x8f, 0xd7, 0x5d, 0x22, 0xda, 0x3f, 0x87, 0x7c, 0x45, 0xd9, 0x5c, 0x14, 0x7b, 0x68, 0x05, 0xc7, 0x63, 0xa5, 0xf3, 0x50, 0xb2, 0xca, 0xca, 0xef, 0xdd, 0x0d, 0x66, 0x8a, 0xdd, 0xdb, 0xd7, 0xdd, 0xa8, 0x77, 0x80, 0xd3, 0x50, 0x73, 0x65, 0xf4, 0x05, 0xb9, 0x98, 0xf7, 0xd8, 0x4c, 0xdb, 0xbb, 0xc2, 0x19, 0xf6, 0x85, 0xe2, 0xbe, 0x0d, 0xfa, 0x29, 0x16, 0x44, 0xba, 0xda, 0xfa, 0x34, 0xb7, 0x31, 0x70, 0x97, 0x23, 0xa3, 0x6e, 0xdb, 0xce, 0xb5, 0xa7, 0xd6, 0x1e, 0x17, 0x91, 0x65, 0xd7, 0x85, 0x0f, 0xcf, 0x98, 0x0f, 0x96, 0x19, 0x7e, 0xc8, 0x7e, 0x7d, 0xb7, 0xd8, 0x27, 0xcb, 0xef, 0x10, 0x9e, 0x59, 0x79, 0x05, 0xc6, 0x71, 0x8e, 0x90, 0x41, 0xfa, 0xb0, 0xbe, 0x4a, 0xda, 0x29, 0x72, 0x15, 0x40, 0xbe, 0xb3, 0x00, 0xa4, 0x42, 0x17, 0xf0, 0x2e, 0x9f, 0x15, 0x57, 0x10, 0x36, 0xc3, 0x03, 0x87, 0x17, 0x5c, 0x19, 0x5d, 0x49, 0x1e, 0xe9, 0xd9, 0x8b, 0xb9, 0xa9, 0xb7, 0x33, 0x5c, 0xc9, 0xf6, 0x39, 0x4e, 0xc4, 0x08, 0x17, 0x52, 0xfe, 0xa9, 0x64, 0xdd, 0xa6, 0x6a, 0xfa, 0x67, 0xf8, 0xef, 0x84, 0xcc, 0x07, 0x0e, 0xdb, 0x7c, 0xaa, 0xfc, 0xbe, 0x5d, 0xa2, 0xfd, 0x54, 0xfd, 0x03, 0x87, 0xe9, 0x4b, 0xa6, 0xb7, 0x73, 0x84, 0x67, 0xf5, 0x56, 0xd8, 0x17, 0x6b, 0xd4, 0x4b, 0xfa, 0x38, 0xf4, 0x5b, 0x73, 0x29, 0xe2, 0x86, 0x0f, 0x69, 0x6a, 0x39, 0xf8, 0x28, 0xca, 0x18, 0x79, 0xff, 0xde, 0x16, 0x3b, 0x11, 0xc3, 0xd1, 0xf7, 0x1d, 0xe3, 0xbd, 0xe9, 0x07, 0x0e, 0xcb, 0xfa, 0x56, 0x5c, 0xff, 0x45, 0xb8, 0xa4, 0x08, 0x28, 0xd1, 0x5f, 0xbe, 0x03, 0xb9, 0xe1, 0x4c, 0x6c, 0x57, 0x01, 0x64, 0xf6, 0x75, 0x2e, 0x33, 0x7c, 0xad, 0x1c, 0x32, 0x77, 0x74, 0xbd, 0xd1, 0x7d, 0xe0, 0x9e, 0x46, 0xc3, 0x2d, 0xf3, 0x20, 0x7f, 0xe6, 0x3c, 0x30, 0xf3, 0x5e, 0x61, 0x39, 0x42, 0x18, 0x7b, 0x36, 0xf8, 0x04, 0x58, 0x7a, 0xd7, 0x15, 0xd0, 0xfe, 0x1b, 0xad, 0x11, 0xc8, 0x93, 0xd0, 0x4f, 0x44, 0xec, 0x5c, 0xe1, 0x75, 0x3d, 0x1e, 0x2d, 0xb2, 0xd8, 0xa1, 0x46, 0x8c, 0xa4, 0x08, 0x91, 0xb4, 0x0e, 0x65, 0xef, 0xe3, 0x16, 0x8e, 0xbc, 0x8c, 0xd0, 0x91, 0x49, 0x6f, 0x37, 0x3f, 0xe1, 0xf5, 0xba, 0x39, 0x9b, 0x68, 0x8e, 0xd8, 0xef, 0x1c, 0x41, 0x7e, 0xda, 0x46, 0xfe, 0xf2, 0x7f, 0x72, 0x3c, 0x46, 0x67, 0x5c, 0x85, 0x74, 0x4e, 0xd5, 0x0c, 0x66, 0x70, 0xb5, 0x42, 0x91, 0x13, 0x32, 0x49, 0x93, 0x57, 0xf2, 0xe1, 0x28, 0xe2, 0x9a, 0xf2, 0x44, 0xf7, 0xf6, 0xce, 0xfd, 0x5d, 0xcd, 0x4b, 0x9d, 0xfa, 0x9d, 0x6b, 0xed, 0xe9, 0x5b, 0xd6, 0xcd, 0xbf, 0x32, 0x62, 0x93, 0xf3, 0x55, 0xdf, 0xd0, 0x9a, 0xef, 0xa4, 0x6c, 0xc9, 0xb7, 0x06, 0xca, 0x30, 0xb7, 0x35, 0x6d, 0xfb, 0xba, 0xe0, 0xda, 0x95, 0xa7, 0xb1, 0x15, 0x56, 0x41, 0xbf, 0x87, 0x4f, 0xd8, 0x45, 0x34, 0x5a, 0x03, 0x79, 0x41, 0x53, 0x63, 0xb5, 0x66, 0x53, 0xed, 0xf0, 0xd2, 0x57, 0x11, 0x16, 0x78, 0x7d, 0x7a, 0x5f, 0x37, 0xf2, 0xc2, 0xbe, 0x7f, 0x7e, 0x79, 0xfe, 0x79, 0x90, 0xda, 0xfd, 0x43, 0xf7, 0x92, 0xee, 0xee, 0xea, 0x0b, 0x1d, 0x96, 0x53, 0x1b, 0x65, 0x1b, 0x52, 0xe4, 0xa9, 0xc2, 0xa2, 0x45, 0xaa, 0x8e, 0x9f, 0x5d, 0x5d, 0xe6, 0x75, 0x6b, 0x21, 0xe2, 0x1b, 0x47, 0x57, 0xd9, 0xb7, 0xb6, 0x65, 0x88, 0x4e, 0xe6, 0xbe, 0x4a, 0x7b, 0x04, 0x99, 0x0e, 0xfd, 0x8e, 0xb5, 0x33, 0x2a, 0x20, 0x5f, 0xf5, 0xd4, 0x6d, 0xd6, 0xce, 0xc7, 0x59, 0xd6, 0x50, 0x5b, 0x31, 0xda, 0x4f, 0x14, 0x82, 0x21, 0x66, 0x75, 0x1b, 0x02, 0x2b, 0x21, 0x43, 0xa4, 0x8f, 0xac, 0x47, 0xae, 0xb9, 0x02, 0x24, 0x9c, 0x69, 0x7e, 0x35, 0x86, 0x4d, 0xbe, 0x9c, 0xad, 0xf1, 0x06, 0x7c, 0x83, 0xf3, 0xef, 0xd3, 0x3e, 0xaa, 0x73, 0x8d, 0xd2, 0xdf, 0x15, 0x31, 0x20, 0xe6, 0xe6, 0xaf, 0x06, 0x9a, 0xe1, 0x83, 0x8f, 0xe3, 0xb8, 0xdd, 0x73, 0x0b, 0x8e, 0xdb, 0xcc, 0x55, 0xb8, 0xae, 0x35, 0xbb, 0x90, 0xc3, 0xa3, 0x24, 0x90, 0xb7, 0xe0, 0x3d, 0x98, 0x4e, 0xbb, 0xc5, 0xb7, 0xef, 0x95, 0xad, 0x34, 0x22, 0x7d, 0x7b, 0xc0, 0xdc, 0x68, 0x98, 0xe9, 0x03, 0xb3, 0xea, 0x21, 0xd0, 0xcc, 0x35, 0x3f, 0xe8, 0x58, 0x44, 0xf8, 0xf3, 0x1f, 0x47, 0xc2, 0x27, 0x99, 0x37, 0xd0, 0xce, 0xed, 0x6e, 0xb1, 0x73, 0x2b, 0x22, 0x62, 0x8a, 0x9d, 0x57, 0xde, 0xdf, 0xb8, 0x03, 0x8a, 0x2a, 0xde, 0x86, 0x12, 0xd9, 0xfc, 0xcb, 0x73, 0x60, 0x0a, 0x1b, 0x6e, 0x0a, 0xd1, 0xfc, 0xfd, 0xc5, 0xe1, 0xf0, 0x45, 0xb1, 0x8a, 0x9a, 0x53, 0xa6, 0xf9, 0x49, 0xa3, 0x68, 0x2e, 0x22, 0x56, 0x0b, 0xaf, 0x8e, 0x9a, 0xf7, 0xc6, 0xbe, 0x45, 0x7b, 0x86, 0xb3, 0x68, 0xcf, 0xd0, 0x41, 0x2b, 0xa4, 0x32, 0x7b, 0xb5, 0x5c, 0x14, 0x4c, 0x6b, 0x29, 0x5c, 0x03, 0x79, 0x69, 0x52, 0xa5, 0x94, 0x9e, 0xb4, 0x3e, 0xca, 0x49, 0x7a, 0x7e, 0x84, 0xb0, 0xca, 0x9c, 0x86, 0xdc, 0x92, 0x57, 0x49, 0x39, 0x5f, 0x0a, 0xbf, 0x84, 0x72, 0x8c, 0x03, 0x67, 0x74, 0x33, 0x42, 0x4e, 0x95, 0x30, 0xec, 0xea, 0xae, 0xfe, 0x95, 0xb3, 0x62, 0x9f, 0x3a, 0x6c, 0x7a, 0x6d, 0x0f, 0x48, 0xaf, 0x91, 0xad, 0x85, 0x4a, 0xdd, 0xaf, 0x0c, 0xa5, 0x50, 0xf7, 0x0e, 0xb1, 0x0b, 0x54, 0xfe, 0x36, 0xf8, 0x82, 0x8f, 0x41, 0x65, 0xd8, 0x40, 0xb1, 0x95, 0x90, 0xc2, 0x18, 0xc2, 0x97, 0xa5, 0xfa, 0xe8, 0xc0, 0x60, 0x0f, 0xd3, 0x51, 0xf2, 0x57, 0xc7, 0x7e, 0x49, 0x78, 0x1f, 0xd0, 0x68, 0x0f, 0xd9, 0xa6, 0xc9, 0x06, 0x5b, 0x81, 0x1a, 0x0d, 0xfb, 0x69, 0x4b, 0x01, 0x4c, 0x56, 0x57, 0xb0, 0x06, 0xfc, 0x6b, 0xb7, 0x17, 0x60, 0x8b, 0x78, 0x7f, 0x7e, 0xdd, 0xa6, 0xba, 0x07, 0x17, 0xc2, 0x17, 0x90, 0x4a, 0x8a, 0xf1, 0xd3, 0xa2, 0xb8, 0xe1, 0x28, 0x4e, 0x76, 0xa7, 0xd5, 0x5c, 0xb9, 0x62, 0xa9, 0xdb, 0x86, 0xb9, 0xbd, 0x2c, 0xf3, 0x16, 0x9a, 0x0b, 0x48, 0xaa, 0x40, 0x69, 0x3c, 0x4d, 0xfd, 0xaa, 0x77, 0xdc, 0x57, 0x0f, 0xa8, 0x3e, 0x4c, 0xb2, 0x65, 0x83, 0xdf, 0x09, 0xbd, 0xb8, 0xba, 0x96, 0xc8, 0x96, 0x90, 0x6c, 0x49, 0x25, 0xdf, 0x8c, 0x26, 0x28, 0x85, 0x36, 0xfc, 0xcd, 0x87, 0x8e, 0xc2, 0x7f, 0x8b, 0xcb, 0xf1, 0x2b, 0xa0, 0x9b, 0xf6, 0xa7, 0xeb, 0xfa, 0x3f, 0xf9, 0x89, 0xad, 0x4b, 0xec, 0x80, 0xcb, 0xb4, 0xff, 0x9f, 0xaf, 0x9e, 0x3e, 0x9c, 0xc3, 0x37, 0x07, 0xeb, 0x37, 0xfb, 0x11, 0x1e, 0x5e, 0x73, 0x82, 0x37, 0xdb, 0xc4, 0xde, 0x7f, 0x3e, 0x62, 0xea, 0x1b, 0x0d, 0x9b, 0xd9, 0x12, 0xc1, 0xc6, 0xbb, 0x02, 0x64, 0x2f, 0x5b, 0x1d, 0xb5, 0x8f, 0xd9, 0x9f, 0x70, 0x22, 0xde, 0xd9, 0x90, 0x4f, 0x1b, 0x66, 0xfa, 0xd9, 0x16, 0xdd, 0xc4, 0xb1, 0xe0, 0x71, 0x9d, 0x4f, 0xfa, 0x52, 0x7c, 0x8e, 0xc4, 0x67, 0x6e, 0x48, 0xe7, 0x8a, 0xd5, 0xdd, 0x67, 0xa2, 0x79, 0x59, 0x48, 0x27, 0x4c, 0x1c, 0xd7, 0xdc, 0x80, 0x32, 0x54, 0x5e, 0xf4, 0xab, 0xd5, 0xf0, 0xa3, 0x23, 0xda, 0x7e, 0xdd, 0x27, 0x2e, 0xc4, 0x3e, 0xb3, 0xe0, 0xc1, 0xa1, 0x3d, 0x90, 0x1d, 0x22, 0x2f, 0x01, 0x20, 0x9f, 0xfe, 0xc6, 0xfb, 0x4a, 0xaf, 0x4a, 0x81, 0x1e, 0xc1, 0xd1, 0x7b, 0x14, 0xf1, 0x6c, 0x17, 0x52, 0xea, 0x3d, 0x96, 0x6c, 0xa9, 0x56, 0x36, 0x84, 0x7a, 0x58, 0xb6, 0x2a, 0x8b, 0x98, 0x82, 0x10, 0xfe, 0xa0, 0x1d, 0x64, 0x63, 0xbb, 0x6e, 0xc7, 0xa6, 0xa1, 0x9e, 0xbd, 0x62, 0x87, 0x6f, 0xa1, 0x15, 0x25, 0x18, 0xdb, 0x1d, 0x60, 0x40, 0x8a, 0xe3, 0xe8, 0xa0, 0x98, 0x10, 0x1b, 0xad, 0xe6, 0x36, 0xf7, 0x6a, 0xf7, 0x89, 0xcd, 0x6b, 0x9a, 0xd5, 0xd3, 0xeb, 0x65, 0x0e, 0x20, 0x67, 0xb8, 0x11, 0x5f, 0xd0, 0x09, 0x93, 0x57, 0x05, 0x78, 0xa7, 0xf8, 0x64, 0xc3, 0xe6, 0xc0, 0x2a, 0x70, 0xb7, 0x5a, 0x8e, 0xc5, 0xdc, 0x3a, 0x31, 0x9f, 0xd7, 0x77, 0xa9, 0xb4, 0xc7, 0x15, 0x97, 0x08, 0xed, 0xc1, 0xa7, 0xa0, 0x2f, 0x62, 0x43, 0xe8, 0xf6, 0x49, 0xdd, 0x32, 0x45, 0x92, 0xe8, 0x66, 0xbb, 0x78, 0x47, 0x58, 0x92, 0xf3, 0xee, 0x26, 0xfb, 0x90, 0xec, 0xc2, 0x0c, 0xd9, 0x22, 0xfe, 0x3a, 0x72, 0xaa, 0x8d, 0x48, 0x23, 0x33, 0x64, 0x43, 0x47, 0x51, 0xb5, 0xd1, 0xe6, 0x43, 0x38, 0x74, 0x47, 0x8c, 0xc1, 0xf5, 0x48, 0xb3, 0x57, 0xf6, 0x13, 0xed, 0xce, 0xa6, 0xef, 0xc3, 0x66, 0x33, 0x69, 0x66, 0xbe, 0x1d, 0x31, 0x38, 0xef, 0x91, 0xf5, 0xfe, 0x07, 0x79, 0x6e, 0x1a, 0xeb, 0xfa, 0x2f, 0x67, 0x8a, 0x38, 0x9c, 0xbc, 0x63, 0x13, 0x1d, 0xb3, 0x67, 0x92, 0x9f, 0xb4, 0xd6, 0xeb, 0x1f, 0x1d, 0xd4, 0x4e, 0xbb, 0xfe, 0x74, 0x84, 0x64, 0x62, 0xb6, 0xfa, 0x79, 0x5b, 0x78, 0x36, 0x1c, 0xe8, 0x4a, 0xc4, 0x94, 0xb6, 0xab, 0xfe, 0x0d, 0x39, 0x7e, 0x28, 0xe8, 0xee, 0xa7, 0xbd, 0x34, 0xfa, 0x7e, 0x18, 0xc7, 0xdf, 0x41, 0xbe, 0x0e, 0x1c, 0x71, 0xdb, 0x0a, 0x4c, 0xfd, 0x93, 0xbf, 0x7e, 0xb3, 0x59, 0x8f, 0x6b, 0x6e, 0xa3, 0x59, 0x8f, 0xf3, 0x65, 0x99, 0x0b, 0xd7, 0x06, 0xce, 0xc5, 0xaa, 0x24, 0xb4, 0x82, 0xb8, 0xd3, 0x9f, 0xa4, 0xf2, 0xf7, 0x94, 0x81, 0xfa, 0xcd, 0x3f, 0x7f, 0x29, 0x0c, 0x3a, 0x53, 0xf0, 0xc1, 0x48, 0x51, 0xdb, 0xe0, 0xf1, 0xfb, 0xe7, 0xbf, 0xab, 0x0c, 0xd6, 0x5c, 0xf9, 0xf8, 0x3d, 0x39, 0x7e, 0xca, 0x88, 0xbc, 0x91, 0xa3, 0x25, 0x49, 0xfe, 0x38, 0x75, 0x1d, 0xc5, 0xd9, 0x7e, 0x1a, 0xc7, 0xe6, 0x98, 0x7f, 0x0f, 0xf8, 0xf0, 0xaf, 0x12, 0xef, 0x5f, 0x88, 0x7b, 0x1a, 0x00, 0x78, 0x74, 0x3e, 0xae, 0x3a, 0xc8, 0x3b, 0x58, 0x82, 0x1e, 0xdb, 0xc0, 0xdb, 0xa1, 0x0c, 0xfc, 0xd7, 0x00, 0xd6, 0x9d, 0x41, 0x71, 0x71, 0x94, 0x97, 0xc8, 0x6f, 0xea, 0xba, 0xdd, 0xe4, 0x13, 0xd5, 0x41, 0x73, 0xc7, 0x2b, 0xf9, 0x31, 0x75, 0x98, 0x9e, 0x07, 0xbb, 0x71, 0xb5, 0x21, 0x3d, 0xf0, 0x24, 0xfb, 0x09, 0x73, 0xe0, 0x9c, 0x75, 0x68, 0xfd, 0x12, 0xeb, 0x97, 0x8f, 0x49, 0xae, 0xcc, 0xff, 0xf7, 0x97, 0xc3, 0x26, 0xad, 0x7e, 0x8d, 0xfe, 0xe2, 0xbb, 0x60, 0xfd, 0x66, 0x5b, 0x9d, 0x5c, 0x52, 0x84, 0x12, 0x4c, 0x64, 0x3a, 0xf9, 0x75, 0x50, 0x14, 0x09, 0x69, 0x75, 0x14, 0xa5, 0x99, 0x84, 0x04, 0x23, 0x1b, 0x6a, 0xce, 0x93, 0x77, 0xb9, 0x44, 0xfb, 0x48, 0x4b, 0x33, 0xfc, 0x92, 0xff, 0x67, 0xd4, 0x3e, 0xf7, 0x14, 0xd2, 0x42, 0x5f, 0xf7, 0x5e, 0xdd, 0x36, 0x7e, 0xf6, 0x92, 0xe5, 0x2f, 0x51, 0xf0, 0x07, 0x1e, 0x67, 0x9f, 0x5f, 0x73, 0xac, 0xc1, 0xe8, 0x6d, 0x89, 0xb2, 0x44, 0xd4, 0xb3, 0x8e, 0x7c, 0xb1, 0xaa, 0x27, 0x9f, 0x51, 0x74, 0x82, 0x87, 0x52, 0xb9, 0x88, 0x07, 0xbb, 0xcc, 0xec, 0x04, 0x3d, 0xe2, 0x5e, 0x1e, 0x7b, 0xa3, 0xc8, 0x2e, 0xc7, 0x7a, 0x7f, 0x8e, 0x54, 0x99, 0xce, 0x66, 0xc8, 0x6f, 0xf7, 0xa1, 0x4e, 0x5e, 0x15, 0xee, 0x46, 0xb9, 0xdd, 0x8b, 0x14, 0xd3, 0x8b, 0x6b, 0x02, 0x8b, 0x1a, 0x1f, 0x22, 0xbe, 0xce, 0xd2, 0x9e, 0x68, 0xc7, 0x83, 0xb5, 0x7f, 0x72, 0xd4, 0xb8, 0x0b, 0xe7, 0x59, 0xd3, 0x05, 0xe5, 0x28, 0xd9, 0x40, 0x2b, 0x5a, 0x6d, 0xcd, 0xf0, 0xd1, 0x96, 0xb1, 0xeb, 0x7b, 0x35, 0xd2, 0x6f, 0xb6, 0xc0, 0x1d, 0x38, 0x64, 0x0f, 0xf1, 0x99, 0x51, 0x3e, 0xca, 0x13, 0x36, 0xb6, 0xf7, 0xca, 0x10, 0x1a, 0x5c, 0xf5, 0x9b, 0xd5, 0x93, 0x97, 0x5e, 0x84, 0x22, 0xd2, 0x87, 0x48, 0x8e, 0x76, 0xb2, 0x36, 0x22, 0xb3, 0x86, 0x3a, 0x9d, 0xfc, 0xaf, 0x88, 0xfb, 0x10, 0x71, 0x42, 0xf5, 0xbc, 0x2b, 0x1f, 0x19, 0xea, 0xb6, 0xc6, 0x9f, 0xfd, 0x49, 0xf7, 0x73, 0xea, 0xb6, 0x92, 0xbf, 0xaf, 0x38, 0xa4, 0x64, 0x9b, 0x53, 0x1f, 0xe2, 0x73, 0x05, 0xd6, 0xab, 0x61, 0x5c, 0x31, 0xba, 0xfc, 0xc8, 0x3d, 0x4e, 0x58, 0x13, 0xb8, 0xb5, 0xcc, 0xba, 0x42, 0x5f, 0x97, 0x1a, 0x27, 0x18, 0xd3, 0x82, 0x42, 0x13, 0x35, 0x61, 0x6f, 0xa6, 0xf9, 0x2d, 0x11, 0xf3, 0x82, 0x74, 0x30, 0x90, 0xce, 0x78, 0x28, 0xfc, 0x02, 0xef, 0xbb, 0xb3, 0x1f, 0x9d, 0x4f, 0x0e, 0xd1, 0xcc, 0xa0, 0x11, 0x4b, 0x1a, 0x2f, 0x2f, 0xeb, 0xe8, 0x02, 0xec, 0x8f, 0x92, 0xb6, 0x8b, 0x84, 0x6b, 0x5b, 0x0b, 0x4a, 0x15, 0x16, 0x11, 0x45, 0xdc, 0xb1, 0xff, 0x0b, 0x7e, 0x98, 0x3c, 0xa3, 0x16, 0x1c, 0xab, 0x5d, 0x27, 0x36, 0x5a, 0xd3, 0x54, 0x2d, 0x19, 0x1f, 0x62, 0x41, 0x40, 0xbc, 0xe7, 0x59, 0x35, 0x12, 0xce, 0x8e, 0xcf, 0xa4, 0x45, 0x24, 0x3b, 0x7e, 0xf8, 0x0c, 0xd3, 0x9a, 0x6e, 0x5c, 0xc9, 0x88, 0xb3, 0xde, 0xfe, 0xcb, 0x3b, 0xe3, 0xbb, 0x42, 0x2c, 0xe5, 0x7c, 0x78, 0x51, 0xdb, 0x01, 0xd8, 0x2f, 0x4e, 0xeb, 0x34, 0x8c, 0x6e, 0x26, 0x8c, 0xfe, 0xf0, 0xee, 0xa4, 0x9d, 0x9d, 0x66, 0xa0, 0xdd, 0x93, 0xfe, 0x0f, 0xb7, 0xb0, 0x96, 0x6b, 0x17, 0xae, 0x5d, 0xa7, 0x88, 0x7d, 0x2e, 0xfc, 0xde, 0xd2, 0x66, 0xad, 0xd6, 0xab, 0xf1, 0x70, 0x2e, 0x90, 0xe7, 0x01, 0x6d, 0xcc, 0x3f, 0x7c, 0x58, 0xa5, 0x37, 0xf9, 0x89, 0x93, 0x93, 0x9f, 0xbf, 0x8d, 0x92, 0xa5, 0x89, 0xa5, 0xf9, 0x4c, 0xd2, 0x2e, 0xf7, 0xa0, 0xfc, 0x25, 0xfc, 0xcf, 0x79, 0xe6, 0x30, 0xcf, 0xbc, 0x13, 0xec, 0x6d, 0xce, 0xe3, 0xf7, 0x12, 0x2f, 0xbc, 0xbb, 0x5e, 0x2e, 0xb3, 0x67, 0xf9, 0x7f, 0x46, 0x32, 0x3c, 0x9d, 0x92, 0xd1, 0x5a, 0x1f, 0x65, 0x0e, 0x6d, 0x0f, 0x2a, 0x3f, 0xe1, 0x1f, 0x43, 0x31, 0x94, 0x5f, 0x80, 0x40, 0xd2, 0x73, 0x86, 0xad, 0x62, 0xdf, 0xc6, 0xf0, 0xc1, 0xb8, 0xcf, 0xce, 0x22, 0xd5, 0xda, 0x3e, 0x30, 0xef, 0x1d, 0xa8, 0x6d, 0xb3, 0xe3, 0xba, 0x26, 0x57, 0x9e, 0x6e, 0xcf, 0x4a, 0x2e, 0x41, 0xf2, 0xa7, 0x7e, 0xff, 0xaf, 0x2f, 0x85, 0xdf, 0x50, 0x2d, 0xca, 0x10, 0xff, 0xec, 0xab, 0x84, 0xcd, 0x3f, 0xb6, 0xc1, 0xa9, 0xb6, 0x24, 0x79, 0x77, 0xd9, 0x54, 0xd2, 0x01, 0x81, 0xd7, 0x06, 0x64, 0x03, 0x96, 0x6f, 0x97, 0xbe, 0x2b, 0xeb, 0xa5, 0xfa, 0x7f, 0x3d, 0x1c, 0x31, 0x91, 0xac, 0x13, 0x31, 0xc8, 0x1f, 0x3c, 0x70, 0x58, 0x32, 0x09, 0x0f, 0x6a, 0x14, 0x77, 0xd1, 0x9e, 0x88, 0x8f, 0x46, 0xf2, 0xae, 0xd9, 0x04, 0x64, 0xd1, 0x54, 0x39, 0xb0, 0xc2, 0x48, 0x14, 0x33, 0x1c, 0x40, 0xec, 0x48, 0xe1, 0x96, 0xac, 0xad, 0xbd, 0xe8, 0xe6, 0x3b, 0x51, 0xd6, 0xcd, 0xfc, 0x4a, 0x07, 0xd8, 0x21, 0xeb, 0xe6, 0x20, 0xe4, 0xdd, 0x4c, 0x7e, 0x11, 0x00, 0xb2, 0xbf, 0xd2, 0x91, 0x55, 0xcc, 0x9a, 0x5a, 0x49, 0x5a, 0x52, 0xc8, 0xf7, 0x1c, 0xb2, 0xd5, 0x34, 0x00, 0x37, 0x92, 0x9e, 0x8a, 0x9c, 0xdb, 0x0a, 0x59, 0xb8, 0x16, 0xb2, 0xae, 0x20, 0x4e, 0xfe, 0xdf, 0xbb, 0x12, 0x1a, 0xc7, 0x5a, 0x04, 0x46, 0xd1, 0x26, 0x8a, 0xef, 0x8a, 0x7c, 0x2e, 0x6f, 0x4c, 0xfd, 0x25, 0xd8, 0x2a, 0x43, 0xc4, 0x23, 0x46, 0x78, 0xf4, 0x92, 0xf0, 0x7b, 0xbf, 0x10, 0x6b, 0xa0, 0x38, 0x3b, 0xcd, 0xb9, 0xa6, 0x4e, 0xac, 0xa5, 0x1c, 0xc4, 0xf9, 0xd4, 0x7c, 0xf2, 0xf5, 0x52, 0x0b, 0x14, 0x1d, 0x20, 0x1e, 0xdd, 0x91, 0xe3, 0xad, 0x90, 0xf6, 0x00, 0xcf, 0xae, 0x7c, 0xec, 0x75, 0xa0, 0xe6, 0x1c, 0xd4, 0xce, 0xbb, 0x32, 0x7a, 0x49, 0x16, 0x3e, 0x3b, 0xb6, 0xda, 0x42, 0xf5, 0x9b, 0xff, 0xed, 0xa5, 0xf0, 0x07, 0x5a, 0xac, 0x6b, 0xc9, 0xab, 0x59, 0x71, 0x07, 0x57, 0x81, 0x35, 0x62, 0xd3, 0x4e, 0x7e, 0x6c, 0x64, 0x6d, 0x82, 0x52, 0x00, 0x97, 0x94, 0x89, 0x14, 0xfd, 0x78, 0xd5, 0x79, 0xf0, 0xcd, 0xbb, 0xa2, 0xec, 0x44, 0x19, 0x41, 0xd8, 0x3b, 0x20, 0x95, 0x70, 0x93, 0x47, 0x9b, 0x7c, 0xb7, 0x9f, 0x68, 0xa0, 0xd7, 0x80, 0x6d, 0xe9, 0xa8, 0x39, 0xaf, 0x0c, 0xb0, 0x35, 0xeb, 0x56, 0x94, 0x5d, 0x1d, 0xa2, 0x46, 0xf6, 0x0b, 0xf7, 0x52, 0xf8, 0x2c, 0xe5, 0xf9, 0xfc, 0xb5, 0xb1, 0x95, 0xe2, 0x24, 0x97, 0x4b, 0xa6, 0x60, 0x6e, 0xf8, 0x4a, 0x6f, 0x27, 0xdb, 0x07, 0x62, 0x8e, 0x88, 0x45, 0x4b, 0x6b, 0xd3, 0x6d, 0xeb, 0x1c, 0xec, 0x4a, 0x58, 0x6d, 0x96, 0x7a, 0xd4, 0x78, 0x96, 0xf9, 0xf6, 0x69, 0x91, 0x2c, 0x9a, 0x3b, 0xca, 0xcb, 0x0d, 0x9b, 0xe9, 0x9c, 0xc3, 0x46, 0x71, 0x86, 0x70, 0xce, 0x39, 0xb2, 0x22, 0x16, 0xda, 0x85, 0x52, 0x9e, 0x16, 0xe9, 0xd5, 0xb1, 0xe3, 0x31, 0x7b, 0xb7, 0x6d, 0x2d, 0xeb, 0x3d, 0x88, 0x28, 0xba, 0x45, 0x1c, 0x55, 0x5a, 0xa5, 0x25, 0x9c, 0x77, 0x63, 0x03, 0x59, 0x54, 0xea, 0xf6, 0xc6, 0x1a, 0x9d, 0xb4, 0xfa, 0x4e, 0xe0, 0x88, 0x1d, 0x22, 0x01, 0xa9, 0xd2, 0xea, 0x4b, 0xf6, 0x40, 0xbf, 0xb0, 0xeb, 0xcd, 0x8d, 0x58, 0x97, 0x81, 0x6c, 0x47, 0x9d, 0xd3, 0x70, 0xcd, 0x90, 0x8e, 0x25, 0x04, 0x90, 0xfe, 0x90, 0xee, 0x9f, 0xdf, 0x5a, 0x95, 0x18, 0xe1, 0x85, 0xdd, 0x6f, 0x6e, 0xaa, 0xee, 0x3e, 0xde, 0x6d, 0x5f, 0xcb, 0xd6, 0x5e, 0xd6, 0xe4, 0x33, 0x50, 0x1a, 0x71, 0x6a, 0x53, 0xad, 0x57, 0xe8, 0x97, 0xd9, 0x85, 0x7e, 0x99, 0x8d, 0x4f, 0x2c, 0xeb, 0x57, 0x83, 0x6c, 0xb3, 0x65, 0x45, 0xec, 0x88, 0x5b, 0x19, 0xc2, 0x6f, 0x8e, 0x54, 0x89, 0x14, 0x8a, 0xce, 0xb4, 0x6e, 0xa3, 0xf3, 0x09, 0x9b, 0x5f, 0x36, 0xd8, 0x33, 0x64, 0xa3, 0x88, 0xca, 0x4d, 0x71, 0xb8, 0x6a, 0xf3, 0x13, 0x7a, 0x6a, 0x34, 0xe3, 0xa9, 0x2c, 0xa4, 0x7d, 0x1b, 0xa9, 0x7f, 0xa3, 0x3b, 0x51, 0x6e, 0x84, 0x45, 0xb1, 0xd6, 0x24, 0x0f, 0x4c, 0x36, 0x88, 0xd8, 0xe8, 0x9c, 0x1e, 0x94, 0x65, 0x06, 0x4b, 0x9a, 0xac, 0xaf, 0x1f, 0xb0, 0xfa, 0xb3, 0x06, 0x50, 0xce, 0x4f, 0x0b, 0xc5, 0x12, 0x7d, 0xd5, 0xf6, 0x9a, 0x47, 0x4b, 0x49, 0xb7, 0x24, 0x2c, 0x59, 0xef, 0x04, 0x07, 0x79, 0xf0, 0x19, 0x1b, 0xdd, 0xfd, 0xec, 0xc6, 0x5b, 0xfc, 0x48, 0x49, 0x13, 0x7a, 0x56, 0x39, 0xa4, 0x67, 0xf5, 0xed, 0x24, 0x3d, 0x2b, 0xe4, 0x5c, 0x07, 0xb5, 0xe8, 0x93, 0x91, 0xe9, 0xec, 0x07, 0x10, 0xf1, 0x17, 0x21, 0x57, 0x6b, 0xf5, 0x47, 0x5d, 0xa9, 0xd6, 0xc5, 0x22, 0x06, 0x25, 0xad, 0x6e, 0x45, 0x34, 0xd5, 0xa8, 0x6b, 0xac, 0xd5, 0x39, 0x5b, 0x26, 0x38, 0xf9, 0x3c, 0x8a, 0x2d, 0xe1, 0x14, 0xa3, 0x4a, 0x83, 0xd5, 0xdd, 0xe6, 0x91, 0x1e, 0xa2, 0xc0, 0x51, 0xb8, 0x85, 0x4e, 0xa2, 0x70, 0x2d, 0xa1, 0xa6, 0xb6, 0x36, 0x08, 0x5b, 0xbf, 0x29, 0x6c, 0x01, 0x45, 0xb5, 0xaf, 0xac, 0xdf, 0xfc, 0x4f, 0xbf, 0xa6, 0x73, 0x67, 0x6d, 0x5c, 0x46, 0x96, 0xe2, 0xb8, 0x4c, 0xa1, 0x59, 0xc6, 0x36, 0x51, 0x6c, 0xa5, 0xd3, 0x33, 0x1d, 0x86, 0x7b, 0x0d, 0x9d, 0xba, 0xc9, 0x4b, 0xf1, 0x7e, 0x0e, 0xfe, 0x2d, 0x84, 0xe1, 0x0d, 0x7a, 0x61, 0xe2, 0xd2, 0x74, 0x47, 0x63, 0xe3, 0xed, 0xcd, 0xdf, 0xbb, 0xeb, 0xae, 0x42, 0xba, 0x03, 0xdb, 0xe2, 0xaa, 0x50, 0x99, 0x94, 0x9a, 0x28, 0xdd, 0x5a, 0x78, 0xab, 0xe4, 0xb8, 0xf5, 0xeb, 0x71, 0x63, 0x9c, 0xa9, 0x19, 0xf0, 0xb7, 0xff, 0x37, 0xbc, 0xf1, 0x3c, 0xfe, 0xbd, 0x80, 0x2d, 0xdb, 0x85, 0x7f, 0x7b, 0x68, 0x5f, 0x1f, 0x86, 0xef, 0x7b, 0x48, 0xbc, 0xdb, 0x34, 0x8a, 0xbf, 0x3a, 0x7c, 0x9e, 0x83, 0x57, 0x3d, 0x0c, 0x6f, 0xae, 0xc4, 0x6b, 0x5a, 0xd2, 0xd7, 0xcd, 0xd8, 0xab, 0x17, 0x44, 0xde, 0x7b, 0xa7, 0xcf, 0x9a, 0xf5, 0x83, 0x95, 0x77, 0xae, 0x5c, 0xf5, 0x3f, 0x57, 0x4a, 0x8d, 0xcb, 0x57, 0xdf, 0x71, 0xfb, 0xf2, 0x59, 0xb3, 0x60, 0xc1, 0xf2, 0xb6, 0xef, 0x41, 0x68, 0xd5, 0xaa, 0x36, 0x68, 0xc5, 0x1f, 0xee, 0x5b, 0xa2, 0xeb, 0x70, 0xd7, 0x1d, 0x2d, 0xf8, 0x5e, 0xdc, 0xaf, 0x5a, 0x15, 0x8d, 0xdb, 0x03, 0xd5, 0xfc, 0x5d, 0x80, 0x80, 0x32, 0xe6, 0x1f, 0xb6, 0x63, 0xe3, 0xce, 0xc4, 0xfd, 0x86, 0xbe, 0xc4, 0xfd, 0xa6, 0xc3, 0x49, 0xf7, 0x4b, 0xd4, 0x7b, 0x9b, 0xb8, 0xb0, 0xbd, 0x38, 0xf0, 0xa9, 0xfc, 0x0e, 0xd5, 0xf7, 0x57, 0x37, 0xae, 0xfd, 0x1a, 0xe9, 0x34, 0x7d, 0xc3, 0x0c, 0x96, 0x2e, 0x4e, 0xd9, 0xa1, 0xe6, 0x7d, 0xf6, 0xad, 0xe5, 0x20, 0x6d, 0xc1, 0x9e, 0x93, 0xbc, 0xe3, 0xaa, 0x7c, 0x77, 0x47, 0xd5, 0xfb, 0xd0, 0x46, 0x5a, 0x3e, 0xea, 0x7e, 0xa5, 0xf2, 0x3f, 0x76, 0xb8, 0x6b, 0x71, 0xbd, 0xd6, 0x81, 0x5f, 0x3a, 0xa1, 0x3b, 0x6a, 0x40, 0x6c, 0xe8, 0x71, 0x57, 0xe0, 0x0a, 0x99, 0x52, 0xc8, 0xa3, 0x38, 0xce, 0x02, 0xf2, 0xe4, 0xe1, 0x0e, 0x82, 0x77, 0x31, 0xdd, 0xf9, 0xa2, 0xa4, 0x8d, 0x80, 0xb3, 0x63, 0x11, 0x3d, 0x05, 0x38, 0xdf, 0xd7, 0xa1, 0xd6, 0xff, 0x14, 0xd4, 0xe3, 0xdf, 0x22, 0xde, 0xe1, 0x5e, 0x1b, 0xf1, 0x3f, 0x70, 0x98, 0xf4, 0x43, 0x37, 0x54, 0x60, 0x7d, 0xb9, 0xdc, 0xa2, 0x33, 0x2c, 0x83, 0x58, 0x66, 0xcc, 0x87, 0x9c, 0x5b, 0xc8, 0x83, 0xb8, 0x8f, 0x53, 0x07, 0x93, 0xda, 0xfc, 0x12, 0xcd, 0xe1, 0xc5, 0x29, 0x16, 0x64, 0xec, 0x05, 0xac, 0x29, 0xc9, 0x0b, 0x98, 0x13, 0x28, 0x9a, 0xa1, 0x9d, 0xe9, 0xb3, 0x85, 0xbf, 0xa2, 0xd8, 0x95, 0x76, 0xbe, 0x3b, 0xa4, 0xfa, 0x23, 0xca, 0x5c, 0xb8, 0x92, 0xe2, 0xb1, 0x91, 0xae, 0xa4, 0xa2, 0x70, 0xef, 0x9f, 0xa4, 0x9e, 0x2e, 0xb3, 0x08, 0x7d, 0x0d, 0x41, 0x7f, 0xdd, 0x99, 0xac, 0x49, 0xa9, 0x6a, 0x53, 0xf6, 0xfc, 0x34, 0x91, 0x83, 0xe2, 0x65, 0x87, 0xb0, 0x04, 0x7d, 0xa1, 0xf2, 0x27, 0xc8, 0x94, 0xf5, 0xff, 0xfc, 0xb2, 0x94, 0x29, 0x76, 0xff, 0xa0, 0xcc, 0xe6, 0xe3, 0x5e, 0x7d, 0x23, 0x9a, 0xd0, 0x1b, 0x1d, 0x42, 0x0e, 0xd8, 0x88, 0xf4, 0xe5, 0xf2, 0x57, 0x49, 0xc7, 0x87, 0xec, 0xe8, 0x94, 0x65, 0x46, 0x2e, 0x0d, 0x78, 0x8e, 0xad, 0x41, 0x79, 0x27, 0xa9, 0xa6, 0x0d, 0x6b, 0xc8, 0x37, 0xcb, 0x32, 0x0b, 0xdb, 0xd8, 0x51, 0x5d, 0x4b, 0x52, 0xda, 0xb1, 0x9a, 0x7c, 0xb4, 0x7c, 0xef, 0x21, 0x2d, 0x56, 0x6b, 0xc4, 0x9b, 0xd4, 0x8b, 0xf5, 0x75, 0xdb, 0xc6, 0x94, 0xb5, 0x45, 0xd8, 0x17, 0xa2, 0x14, 0x8f, 0xb5, 0x24, 0x72, 0x6e, 0x58, 0x2f, 0x4a, 0x4f, 0x68, 0x8b, 0xf6, 0xdc, 0x3f, 0x4f, 0x94, 0xbb, 0x35, 0xa9, 0xbc, 0xbb, 0x91, 0x5b, 0x25, 0x7f, 0xb5, 0x32, 0x0e, 0x03, 0x5b, 0xe1, 0x81, 0x78, 0x2f, 0x0c, 0xbc, 0xfb, 0x95, 0x25, 0x22, 0x21, 0x5a, 0x83, 0x5b, 0x07, 0x12, 0x6b, 0x0a, 0xa5, 0xb0, 0x41, 0xf5, 0x03, 0x45, 0x27, 0xe4, 0xac, 0xab, 0x4c, 0xfe, 0x0e, 0xdc, 0x42, 0x7b, 0x48, 0xec, 0x15, 0x2b, 0xa7, 0x04, 0xec, 0x6e, 0x62, 0x1d, 0x68, 0x1a, 0xbf, 0xe8, 0x24, 0xed, 0xfb, 0xe1, 0x13, 0x08, 0xbb, 0xa6, 0x48, 0x00, 0xd7, 0x07, 0xce, 0x9b, 0x02, 0x60, 0x22, 0xbf, 0xa1, 0x15, 0xe7, 0xa1, 0x50, 0xda, 0x80, 0x29, 0x25, 0x71, 0x08, 0x1f, 0x63, 0x1c, 0xf9, 0xae, 0xc0, 0x6b, 0xfc, 0xc2, 0x1a, 0xce, 0x2a, 0xf4, 0xfe, 0x12, 0x62, 0x5f, 0x8d, 0xb7, 0x63, 0x9b, 0x6c, 0xd0, 0xfc, 0xc6, 0x55, 0x76, 0xc7, 0xbd, 0x9c, 0xd1, 0x6e, 0x53, 0x23, 0xca, 0x16, 0xd6, 0x48, 0xa6, 0x28, 0x81, 0x70, 0xcc, 0x8f, 0xcf, 0xc8, 0x4b, 0x9a, 0x12, 0x72, 0x36, 0x69, 0xdf, 0xa9, 0x36, 0x63, 0xf1, 0x88, 0xd5, 0x48, 0x9b, 0xf3, 0x51, 0x72, 0xca, 0xb2, 0xde, 0x65, 0x32, 0xff, 0x02, 0xe9, 0xde, 0x86, 0xac, 0x64, 0x1a, 0x8f, 0x9c, 0x3f, 0x1f, 0x25, 0x91, 0x5c, 0x9c, 0x13, 0x24, 0xf3, 0x58, 0x59, 0x2e, 0x3f, 0xca, 0xe7, 0x89, 0x25, 0xec, 0x87, 0x6a, 0x05, 0xe4, 0xd8, 0x1c, 0xd0, 0x34, 0xff, 0x7d, 0x8e, 0xff, 0xe6, 0x28, 0x40, 0xd9, 0x92, 0xb8, 0xec, 0x6b, 0xe7, 0x21, 0x4b, 0xa6, 0x98, 0xa4, 0x39, 0x56, 0x9f, 0xf5, 0xfa, 0x2d, 0xbb, 0xc0, 0xba, 0x3a, 0xe3, 0xe9, 0xce, 0xe5, 0x96, 0x1c, 0x2f, 0xa4, 0x3f, 0xdd, 0x19, 0x36, 0x49, 0xbe, 0xaf, 0x35, 0x81, 0x11, 0x65, 0xad, 0x05, 0x62, 0x6e, 0xe0, 0xb8, 0x1e, 0xab, 0xfd, 0x5d, 0xb3, 0x59, 0xb5, 0x49, 0xbd, 0xcc, 0xbb, 0x58, 0x2d, 0x1c, 0xc3, 0x85, 0xbc, 0xc1, 0xe6, 0xd8, 0xb1, 0x0e, 0x8e, 0x18, 0x49, 0xfe, 0x15, 0xb0, 0x1d, 0xc9, 0x31, 0x62, 0x75, 0xcd, 0x36, 0x17, 0xef, 0x2f, 0xeb, 0x59, 0xbe, 0xcd, 0x91, 0x1c, 0x60, 0xc5, 0xf9, 0x4b, 0xfc, 0x76, 0x09, 0x47, 0x81, 0x66, 0x0f, 0x0f, 0x1b, 0xb2, 0x30, 0xaf, 0xd0, 0x57, 0x60, 0x5f, 0x1a, 0x0e, 0x08, 0x75, 0x4b, 0x86, 0x64, 0x8f, 0x0a, 0x4e, 0x5a, 0x77, 0x4f, 0x97, 0xaa, 0x91, 0xf3, 0x27, 0xd9, 0x3e, 0x38, 0xa6, 0x0c, 0xed, 0x86, 0xac, 0x44, 0xe9, 0x28, 0x3d, 0x5b, 0x17, 0x5c, 0x19, 0x85, 0xba, 0xed, 0x52, 0xa5, 0x27, 0x96, 0x5a, 0x6b, 0x88, 0x6a, 0xc5, 0xf4, 0x5b, 0x7d, 0xa0, 0xe7, 0x98, 0x0c, 0x6b, 0x93, 0xdf, 0x2e, 0x52, 0xdf, 0xde, 0xe4, 0x03, 0xc3, 0x4d, 0x55, 0xd8, 0x13, 0xfc, 0x96, 0xb1, 0x31, 0x4b, 0xcb, 0xd1, 0x90, 0xc8, 0x61, 0x49, 0xfd, 0x1e, 0xd7, 0xb7, 0x08, 0xc3, 0xf8, 0x5b, 0xf6, 0xdd, 0x47, 0xd8, 0xac, 0x7d, 0xb9, 0x34, 0xf1, 0x65, 0xfe, 0xf8, 0x9a, 0xeb, 0x13, 0xed, 0xca, 0x4b, 0x6d, 0xf1, 0x6d, 0x89, 0xef, 0xa4, 0x5b, 0x59, 0x73, 0xaf, 0xa0, 0x19, 0x0c, 0x1c, 0x1d, 0x43, 0x52, 0xfd, 0x90, 0xb3, 0xdd, 0xb2, 0xd0, 0xd4, 0x43, 0xae, 0x39, 0x85, 0xe3, 0x4a, 0x1f, 0x57, 0xfd, 0x61, 0x72, 0x7c, 0x62, 0xab, 0x1a, 0x03, 0x50, 0xba, 0x03, 0xb2, 0xec, 0x77, 0x60, 0xb9, 0x28, 0xd5, 0xf7, 0x3e, 0x0e, 0xd6, 0xb6, 0x8c, 0x7d, 0xb1, 0xe5, 0x1d, 0xe5, 0x17, 0x73, 0x29, 0xc2, 0xf6, 0xe4, 0xbd, 0xb1, 0xe5, 0xd6, 0xc1, 0x98, 0x67, 0xb6, 0x29, 0x03, 0xf1, 0xc8, 0x44, 0xb1, 0x18, 0x60, 0x3a, 0xca, 0xdf, 0x2e, 0x28, 0x82, 0x52, 0xf0, 0x41, 0x35, 0xd4, 0xc2, 0x62, 0x58, 0x4a, 0xef, 0x70, 0xfe, 0x51, 0x04, 0x17, 0x5a, 0xcf, 0xe8, 0x65, 0x97, 0x15, 0x67, 0x8a, 0x5c, 0x8b, 0xbf, 0x66, 0xb9, 0x1a, 0x7f, 0x2d, 0xb2, 0xcf, 0xd3, 0x04, 0xb9, 0xd6, 0x1e, 0xb9, 0x14, 0x9f, 0xf2, 0xe5, 0x22, 0xfc, 0x95, 0x64, 0x17, 0xe7, 0xce, 0xb3, 0xc6, 0x64, 0x2b, 0x3e, 0x9b, 0xe4, 0x7c, 0xfc, 0xcd, 0x96, 0x73, 0x38, 0x2a, 0x60, 0x39, 0x42, 0xab, 0x06, 0x5b, 0x79, 0x07, 0x61, 0x2f, 0xae, 0x96, 0x8f, 0xaa, 0x31, 0xcc, 0xbf, 0xaf, 0xd9, 0xe3, 0xf6, 0x9a, 0x60, 0xe4, 0xce, 0x87, 0x90, 0xd3, 0xfb, 0xf1, 0xde, 0x81, 0x7f, 0x88, 0x2d, 0x0f, 0xae, 0x11, 0xfc, 0x27, 0xd2, 0xfa, 0xbd, 0x68, 0xd3, 0x1d, 0xb7, 0xa7, 0x30, 0xfa, 0x94, 0xb4, 0xff, 0x4b, 0x7c, 0xfe, 0x9f, 0xb1, 0x9d, 0xff, 0xfc, 0x0c, 0x0c, 0x3f, 0xec, 0x81, 0xe1, 0x87, 0x82, 0x82, 0xcf, 0xff, 0x3c, 0x2a, 0xde, 0xfd, 0x7c, 0xbb, 0xe0, 0x9d, 0x3f, 0xef, 0x17, 0x7c, 0xfe, 0x97, 0x56, 0xe6, 0xf3, 0xc3, 0xbf, 0xac, 0x66, 0x7d, 0xb7, 0xe1, 0xa7, 0x0b, 0xf1, 0x9a, 0x0e, 0xc3, 0xcf, 0x0d, 0xb1, 0x3d, 0xf0, 0xf0, 0xd3, 0x94, 0x6e, 0x84, 0xe1, 0x7f, 0xb5, 0xe0, 0x75, 0x12, 0xa6, 0x9f, 0xc2, 0xeb, 0x64, 0x18, 0xfe, 0xb7, 0xfd, 0x78, 0xcd, 0xc0, 0xeb, 0x33, 0x78, 0x9d, 0x82, 0x57, 0xf2, 0x07, 0x64, 0xc6, 0x7c, 0xfb, 0xf0, 0x3a, 0x15, 0xaf, 0xf4, 0x3e, 0x13, 0xd3, 0x0f, 0x92, 0x2f, 0x08, 0x18, 0xfe, 0xdf, 0x64, 0xd7, 0xfa, 0x65, 0xfc, 0x7e, 0x35, 0x90, 0x91, 0xc1, 0xf0, 0xa1, 0x62, 0x32, 0x54, 0xc6, 0xf7, 0x94, 0x3f, 0x0b, 0x9f, 0x8d, 0x78, 0x9d, 0x86, 0x57, 0x7a, 0xce, 0xc6, 0x2b, 0x7d, 0xff, 0x05, 0xbc, 0x52, 0xb9, 0x39, 0x78, 0x1d, 0xc0, 0xeb, 0x17, 0x61, 0xf8, 0xf9, 0x3c, 0xbc, 0xe6, 0xe2, 0xb5, 0x16, 0xaf, 0x37, 0xe0, 0xb5, 0x09, 0xaf, 0x79, 0x78, 0x6d, 0xc6, 0xeb, 0x97, 0xf0, 0xba, 0x12, 0xaf, 0xf9, 0x09, 0x58, 0x0c, 0x9e, 0x16, 0xd7, 0xbe, 0x25, 0xa2, 0xdf, 0x7d, 0xbb, 0x52, 0xe4, 0x9a, 0xe1, 0x37, 0xf6, 0x89, 0xeb, 0xef, 0x56, 0x08, 0x78, 0x9c, 0x0e, 0x89, 0x7e, 0xfd, 0xf7, 0x62, 0xd1, 0xaf, 0xff, 0x6e, 0x10, 0xfd, 0xfa, 0xef, 0xe3, 0xa2, 0x5f, 0x6f, 0x47, 0x45, 0xbf, 0xde, 0x6e, 0x15, 0xfd, 0x7a, 0xbb, 0x4d, 0xf4, 0xe7, 0xed, 0xd5, 0xa2, 0x3f, 0x6f, 0xb7, 0x8b, 0xfe, 0xbc, 0xbd, 0x46, 0xf4, 0xe7, 0xed, 0x0e, 0xd1, 0x9f, 0x0b, 0x76, 0x01, 0xe7, 0xf7, 0x96, 0x0a, 0x38, 0x5f, 0xec, 0x13, 0x70, 0xfe, 0x63, 0x87, 0x80, 0xef, 0x07, 0xf7, 0x0b, 0xf8, 0x5e, 0x7e, 0x44, 0xf4, 0xef, 0xca, 0x62, 0xd1, 0xbf, 0xf3, 0x39, 0x62, 0x1c, 0x86, 0x8f, 0x8b, 0x7e, 0x8e, 0xda, 0x05, 0x5c, 0x46, 0x1d, 0xdc, 0xdf, 0x91, 0x5b, 0x4a, 0xb9, 0xbf, 0x23, 0x1e, 0x1f, 0xc3, 0x77, 0xc4, 0x73, 0x01, 0xaf, 0xd3, 0x61, 0xe4, 0xd6, 0x87, 0xf1, 0x7a, 0x23, 0x8c, 0x14, 0xe5, 0x02, 0x19, 0x7f, 0x8c, 0x14, 0xdd, 0x8d, 0xd7, 0x9b, 0x60, 0xe4, 0x2b, 0x04, 0x1b, 0x2b, 0x8c, 0x14, 0x53, 0xfb, 0x6f, 0x86, 0x91, 0xaf, 0x9e, 0x63, 0xf9, 0x69, 0xa4, 0xe4, 0x3c, 0x5b, 0x60, 0x8f, 0x7c, 0xed, 0x04, 0x5e, 0xed, 0x30, 0x52, 0xda, 0xce, 0x56, 0xd9, 0x23, 0x5f, 0xa7, 0x7a, 0x1c, 0x78, 0xa5, 0x71, 0x9c, 0x09, 0x23, 0x65, 0x1e, 0xbc, 0x3a, 0xf1, 0x4a, 0x70, 0x2c, 0x80, 0x91, 0xd9, 0x45, 0x78, 0x75, 0xe1, 0x95, 0xf0, 0x6a, 0x16, 0x5e, 0x49, 0x8e, 0x2c, 0x84, 0x11, 0x36, 0x8c, 0x76, 0xc3, 0xc8, 0x9c, 0x65, 0x78, 0xf5, 0xc0, 0x88, 0x8f, 0xc6, 0xfb, 0x56, 0x18, 0xf1, 0x3f, 0x8d, 0xd7, 0x22, 0x18, 0xa9, 0xa4, 0xfe, 0x7e, 0x05, 0x46, 0x02, 0x94, 0xaf, 0x18, 0x46, 0x6a, 0xc3, 0x78, 0xfd, 0x2a, 0x8c, 0xd4, 0x9f, 0xc5, 0x6b, 0x09, 0xf6, 0xcf, 0x85, 0xd7, 0xaf, 0xe1, 0x35, 0x20, 0xc6, 0x5f, 0xb9, 0xcc, 0xe3, 0x3f, 0x02, 0x2f, 0xe3, 0xb5, 0x14, 0xaf, 0xc7, 0xf0, 0xfa, 0x75, 0xbc, 0x12, 0x5c, 0xca, 0x60, 0x44, 0x8f, 0x92, 0x0f, 0x78, 0x61, 0x24, 0x8d, 0xac, 0x97, 0xff, 0x5f, 0x89, 0xf1, 0x3d, 0xd9, 0x25, 0xae, 0xff, 0x55, 0x27, 0xc6, 0xff, 0xbf, 0xc4, 0xf8, 0x8f, 0xa4, 0x5d, 0xe4, 0xf1, 0xd6, 0xfe, 0x8d, 0x64, 0x34, 0xa9, 0xd7, 0x1d, 0x9c, 0x2f, 0x9e, 0x6e, 0x12, 0xf2, 0xf1, 0xc8, 0x64, 0x3d, 0xe7, 0x1f, 0x99, 0xbc, 0x27, 0x05, 0x7f, 0x46, 0x8c, 0x6b, 0xd4, 0x7c, 0x4e, 0xfe, 0x6e, 0xc4, 0xb4, 0x24, 0xb5, 0xdc, 0x74, 0x9b, 0x7a, 0x3d, 0x2d, 0xde, 0x1b, 0x8b, 0x53, 0xbf, 0x5f, 0x24, 0xe4, 0xd9, 0x91, 0x6f, 0x05, 0x52, 0xd3, 0x97, 0x6c, 0x14, 0xd7, 0xff, 0xb1, 0x47, 0x7c, 0x77, 0x5b, 0x50, 0xb4, 0x5b, 0x96, 0x52, 0xcb, 0x9f, 0x56, 0xab, 0x5e, 0x97, 0xa4, 0xb6, 0xfb, 0xba, 0x5e, 0xf1, 0x9d, 0xc5, 0xc1, 0xf3, 0x75, 0xc4, 0x72, 0x50, 0x7c, 0x7f, 0xfd, 0x45, 0xc6, 0xaf, 0x91, 0xac, 0x62, 0xc6, 0xa7, 0x78, 0xfe, 0xa9, 0x1e, 0x71, 0xcd, 0xdc, 0x29, 0xbe, 0xcb, 0x7c, 0x39, 0xb5, 0x3d, 0x5f, 0xd8, 0x2b, 0xd2, 0x73, 0xfc, 0xa2, 0xbc, 0x9c, 0x21, 0x9e, 0x17, 0x23, 0xb9, 0xf7, 0x8b, 0x72, 0xbf, 0xd4, 0xc3, 0x78, 0x3d, 0x32, 0xfd, 0x61, 0xc6, 0xd7, 0x91, 0x9b, 0x76, 0x88, 0x7a, 0xac, 0x7b, 0x19, 0xcf, 0x47, 0x6c, 0x95, 0x8c, 0xdf, 0xf1, 0xf2, 0xb2, 0xb3, 0xd4, 0x72, 0x5b, 0x45, 0xb9, 0xf6, 0x36, 0x51, 0x8e, 0xbd, 0x3f, 0xa5, 0x7f, 0x60, 0x44, 0x39, 0xba, 0xf7, 0x49, 0x31, 0x86, 0x0f, 0x7f, 0x80, 0x25, 0xe6, 0x62, 0x2e, 0x85, 0x1e, 0x13, 0x3f, 0x26, 0x4b, 0x6e, 0xe2, 0x83, 0x34, 0x9e, 0x8f, 0x22, 0x1f, 0xbf, 0x57, 0xd4, 0x5c, 0xd8, 0x1c, 0x8b, 0x29, 0x91, 0xcf, 0xc0, 0xf9, 0xe8, 0x3f, 0xd6, 0x46, 0xc8, 0x35, 0xe9, 0x34, 0xcf, 0x18, 0x4a, 0xfe, 0xc2, 0x97, 0x12, 0xf9, 0xd2, 0xaf, 0x31, 0x1f, 0xd2, 0x2f, 0x5d, 0x3c, 0x1f, 0xbd, 0xa7, 0x7c, 0x97, 0xf9, 0xd5, 0x97, 0xbe, 0x60, 0x49, 0xe4, 0x9b, 0x94, 0x5c, 0xde, 0x67, 0xe4, 0x33, 0x71, 0x79, 0xd7, 0xe1, 0x7f, 0xcc, 0x47, 0x44, 0x22, 0x2d, 0x5e, 0xef, 0xf5, 0x39, 0x49, 0xf5, 0x4e, 0xe6, 0xf2, 0x3e, 0x3f, 0x5f, 0x46, 0x72, 0x79, 0xf4, 0x9e, 0xf2, 0x75, 0x88, 0x7a, 0x73, 0xae, 0x4f, 0xe4, 0x9b, 0x92, 0x5c, 0xde, 0x67, 0xe4, 0x33, 0x73, 0x79, 0x12, 0xfe, 0x37, 0x24, 0x8f, 0x87, 0x32, 0x76, 0x3c, 0xa6, 0x72, 0x79, 0x22, 0x5f, 0xea, 0x70, 0x28, 0x38, 0x1c, 0x89, 0x8c, 0x99, 0x89, 0x7c, 0x63, 0x86, 0x57, 0x49, 0x29, 0xf0, 0xba, 0xe4, 0xf2, 0x12, 0x05, 0x2a, 0x63, 0xc7, 0xd7, 0x12, 0xc7, 0x03, 0xc3, 0x67, 0xe2, 0xcb, 0xf5, 0x49, 0xf9, 0x52, 0xdb, 0x07, 0xc9, 0xc5, 0x41, 0x56, 0x22, 0xdf, 0x98, 0xe2, 0xa8, 0xc0, 0x44, 0xbe, 0x69, 0xc9, 0xe5, 0x7d, 0x06, 0xfe, 0x65, 0x73, 0x3e, 0x13, 0xfe, 0xd7, 0xc1, 0xb8, 0x02, 0x21, 0x71, 0xff, 0x05, 0xae, 0x5b, 0xc7, 0xff, 0x27, 0xce, 0x77, 0x1d, 0xff, 0xe6, 0x30, 0x5d, 0x1f, 0xde, 0xd9, 0x84, 0x7f, 0x3f, 0x84, 0xe1, 0x1f, 0x6d, 0xc3, 0x2b, 0xfd, 0x3d, 0x8e, 0x7f, 0xcf, 0xe2, 0xdf, 0x7f, 0xe2, 0xdf, 0x59, 0x18, 0xfe, 0xb1, 0x3e, 0x79, 0xf9, 0x9d, 0x58, 0xb4, 0x93, 0x78, 0x52, 0x18, 0x17, 0x56, 0x96, 0xdd, 0xd1, 0xd6, 0xf2, 0xbd, 0xe8, 0x84, 0x89, 0x85, 0xb7, 0x37, 0xe1, 0xda, 0xff, 0xef, 0x97, 0xb5, 0xa4, 0xac, 0xe9, 0x27, 0xcc, 0x19, 0x6d, 0xfe, 0xde, 0xca, 0xef, 0xb5, 0x62, 0xce, 0xd4, 0x1d, 0x81, 0x44, 0xbe, 0xdb, 0x57, 0x35, 0xaf, 0x6a, 0x1d, 0x5f, 0x51, 0xe4, 0xf6, 0xb1, 0x09, 0xea, 0x4d, 0xd2, 0x86, 0xc2, 0xb8, 0x2f, 0x2a, 0x97, 0x87, 0xbf, 0xf7, 0x83, 0xe6, 0xb6, 0xb2, 0x92, 0x62, 0x4f, 0x7b, 0x71, 0xa9, 0x27, 0xfe, 0x5c, 0xea, 0xf1, 0xb4, 0x97, 0x78, 0x12, 0xcf, 0xb7, 0x7a, 0x8a, 0x8a, 0xdb, 0xbf, 0x56, 0x52, 0x9a, 0x48, 0xb8, 0xf5, 0xab, 0x45, 0xed, 0xa5, 0x25, 0xc5, 0x89, 0x84, 0xa2, 0x52, 0x4f, 0x3b, 0x65, 0x4b, 0xa4, 0x60, 0x01, 0xed, 0xb7, 0x16, 0x25, 0x97, 0x42, 0x79, 0x4a, 0x93, 0x13, 0x8a, 0xb1, 0xde, 0xaf, 0x27, 0x27, 0x94, 0x70, 0x29, 0x5f, 0x4d, 0x4a, 0xf9, 0x7a, 0x11, 0xa5, 0x94, 0x8e, 0x4d, 0xa1, 0x72, 0xaf, 0x75, 0x0c, 0x52, 0x20, 0xf1, 0xb9, 0x80, 0x5c, 0xb5, 0x7a, 0x79, 0x6b, 0xf3, 0xf7, 0xfe, 0x5e, 0x4d, 0x0d, 0xb7, 0x17, 0xde, 0xf5, 0xf7, 0x2b, 0xc7, 0xc2, 0x36, 0x7a, 0x47, 0x7b, 0xb8, 0xa5, 0xed, 0x73, 0x06, 0xf0, 0xb3, 0x11, 0xe1, 0x2a, 0x6d, 0xe1, 0x3e, 0x4d, 0xf4, 0x13, 0xcf, 0xaa, 0xa1, 0xe1, 0x8c, 0x1f, 0x88, 0x17, 0xe3, 0xff, 0xa1, 0xe4, 0xf3, 0xcf, 0xc5, 0xf8, 0x87, 0x12, 0xd2, 0x43, 0x43, 0xf8, 0xb7, 0x1b, 0xff, 0x90, 0x23, 0x3c, 0x54, 0x87, 0x69, 0xbd, 0xf8, 0xb7, 0x2c, 0x91, 0xef, 0x27, 0x3b, 0x61, 0xf8, 0x7f, 0xad, 0x81, 0xe1, 0x47, 0x97, 0xc0, 0xf0, 0xbf, 0xb4, 0xc2, 0xf0, 0x4f, 0xef, 0x87, 0xe1, 0x9f, 0x3d, 0x09, 0xc3, 0x8f, 0xe0, 0xf7, 0xff, 0x9f, 0x45, 0x6a, 0x3e, 0x94, 0xf0, 0x76, 0x9d, 0x81, 0xe1, 0x27, 0x8d, 0x89, 0x5d, 0xa4, 0x27, 0xfa, 0x53, 0x77, 0x91, 0xc0, 0x96, 0xac, 0xc1, 0x25, 0xd6, 0xe9, 0x29, 0x29, 0x83, 0xe3, 0x52, 0x5e, 0x1a, 0x97, 0x72, 0x68, 0x5c, 0xca, 0x33, 0x2e, 0xd5, 0xab, 0x8f, 0x76, 0xfa, 0x8b, 0x6b, 0x7e, 0x27, 0xae, 0x7e, 0xb6, 0x45, 0x72, 0xd8, 0x17, 0x73, 0xbf, 0x72, 0x8c, 0x35, 0xd2, 0xb6, 0xd1, 0xce, 0x34, 0xad, 0x43, 0x35, 0xff, 0x67, 0x29, 0xb9, 0x77, 0xc4, 0x73, 0x3f, 0xca, 0xb9, 0x77, 0xe0, 0x5d, 0xcf, 0x55, 0x73, 0x3f, 0x14, 0xcf, 0xbd, 0x9a, 0x73, 0x3f, 0x84, 0x77, 0x4b, 0xae, 0x9a, 0xfb, 0x91, 0x78, 0xee, 0x00, 0xe7, 0x7e, 0x04, 0xef, 0x5c, 0x57, 0xcd, 0xfd, 0x68, 0x3c, 0x77, 0x1e, 0xe7, 0x7e, 0x14, 0x57, 0x7e, 0xa3, 0x57, 0xcd, 0xbd, 0x4b, 0xcb, 0x3d, 0x7a, 0x81, 0x73, 0xef, 0xa2, 0xb3, 0xee, 0xab, 0xe6, 0xde, 0x13, 0xcf, 0xfd, 0x0c, 0xe7, 0xde, 0x83, 0x77, 0x3f, 0xb9, 0x6a, 0xee, 0xbe, 0x78, 0xee, 0x5e, 0xce, 0xdd, 0x87, 0x77, 0x6d, 0x49, 0xb9, 0x33, 0xdd, 0x19, 0x63, 0x77, 0xbe, 0x7a, 0xb7, 0x27, 0xed, 0x6b, 0xe1, 0xbb, 0xb0, 0xc5, 0x54, 0x88, 0xf2, 0x42, 0x66, 0xc4, 0x24, 0x65, 0xe2, 0x58, 0xbd, 0xc7, 0xe7, 0x09, 0x7f, 0x37, 0xd1, 0x8e, 0x58, 0xef, 0xfd, 0xd7, 0xb2, 0x23, 0x26, 0x15, 0xd9, 0xea, 0xb8, 0x5c, 0x80, 0x9f, 0xda, 0x0a, 0xa1, 0x50, 0x2b, 0x43, 0xd4, 0xfe, 0xe3, 0xa1, 0x94, 0x32, 0x00, 0xba, 0xac, 0x75, 0x89, 0xf3, 0xb0, 0xc4, 0xee, 0x54, 0xef, 0xea, 0xf1, 0xbb, 0x53, 0xbd, 0xe1, 0xd4, 0xdd, 0xa9, 0x1f, 0xb7, 0x4f, 0xbc, 0x3b, 0x85, 0x6b, 0x63, 0x67, 0x62, 0x2f, 0xe7, 0xb3, 0xf7, 0xaa, 0x64, 0x13, 0x4a, 0xf4, 0x26, 0xc8, 0x14, 0xfe, 0xf0, 0xd5, 0x18, 0x10, 0x65, 0x36, 0x9f, 0xcd, 0x44, 0xbb, 0x7a, 0x3b, 0x5e, 0x1e, 0xb3, 0xab, 0xe7, 0xc4, 0x16, 0x0f, 0x8b, 0x5d, 0xbd, 0x19, 0x7e, 0x28, 0xfc, 0xbc, 0x9d, 0xbd, 0x1f, 0x3f, 0xf2, 0x59, 0x3b, 0x7b, 0xbd, 0xb7, 0x5d, 0x7d, 0x67, 0xaf, 0x77, 0xe5, 0xd8, 0x9d, 0xbd, 0x1f, 0x1f, 0x9e, 0x78, 0x67, 0x0f, 0x21, 0x3a, 0x66, 0x67, 0xef, 0xaf, 0x81, 0xdd, 0x35, 0xed, 0xec, 0x19, 0x04, 0x66, 0x3d, 0x70, 0xd8, 0xaa, 0x9e, 0x50, 0xaa, 0xfb, 0x7a, 0x67, 0x04, 0xde, 0xd4, 0x7d, 0x4b, 0xf1, 0x06, 0xde, 0x2a, 0x2d, 0x65, 0x7b, 0x3c, 0xc4, 0x53, 0x77, 0x1a, 0xd5, 0xb8, 0xe3, 0x64, 0x5d, 0xff, 0xa7, 0x3f, 0xb1, 0x41, 0xcd, 0xbb, 0xca, 0x3e, 0x6d, 0x0f, 0xfa, 0xc1, 0x10, 0xc7, 0x20, 0x52, 0xbe, 0xbb, 0xa3, 0x6e, 0xab, 0x63, 0xaa, 0xb1, 0x9b, 0xfc, 0x09, 0xe3, 0xbb, 0x7a, 0x7e, 0xa7, 0x77, 0x1b, 0xea, 0xb6, 0xce, 0x7b, 0x57, 0x39, 0x25, 0xe2, 0xc7, 0x82, 0x4d, 0x3d, 0x01, 0x55, 0xfe, 0xc7, 0x8e, 0x82, 0x5a, 0xe5, 0x54, 0x01, 0xd2, 0xc2, 0x1d, 0xbf, 0x53, 0x4e, 0x47, 0x0d, 0x05, 0x3e, 0xe5, 0x6c, 0x41, 0xa5, 0x72, 0x8e, 0x53, 0xce, 0x2a, 0x17, 0xc8, 0x7b, 0x10, 0xa6, 0x5d, 0x2c, 0xf0, 0x2b, 0x9b, 0xd4, 0xb4, 0x5e, 0x49, 0x1f, 0xa2, 0xb8, 0xab, 0xdb, 0x0a, 0xe6, 0x2b, 0x3b, 0x16, 0xd3, 0xdd, 0x43, 0xd1, 0x2c, 0xfc, 0x7d, 0x44, 0xd2, 0x2f, 0xa2, 0xa7, 0x47, 0x39, 0xdf, 0x27, 0xca, 0x2e, 0xff, 0x13, 0xca, 0x1e, 0xfc, 0xeb, 0x53, 0xbd, 0xe9, 0x05, 0xb0, 0xed, 0x2d, 0xca, 0x26, 0x6a, 0xcf, 0x8f, 0xbe, 0x88, 0xf3, 0x3d, 0x23, 0xbe, 0x9b, 0x96, 0x75, 0x4b, 0x10, 0x28, 0xf6, 0x48, 0x1f, 0xf9, 0x0a, 0xa9, 0xeb, 0xbf, 0x72, 0xb2, 0x7e, 0x73, 0xa2, 0x9f, 0x57, 0xde, 0x10, 0xd6, 0xe5, 0x29, 0x3b, 0xd7, 0xef, 0xe6, 0xe7, 0x2b, 0x36, 0x35, 0x6e, 0x8d, 0x4f, 0xd3, 0xa3, 0x4f, 0x85, 0xcf, 0x95, 0x2e, 0x1b, 0x2c, 0x78, 0x57, 0x39, 0x8c, 0xbd, 0x95, 0x28, 0x6d, 0xdb, 0x19, 0x77, 0xe6, 0x18, 0xf8, 0x44, 0xf1, 0x9d, 0x87, 0xdf, 0xed, 0x25, 0xf8, 0x20, 0x34, 0xcf, 0xa9, 0xf0, 0xc9, 0xe5, 0xd4, 0x9d, 0x14, 0x97, 0x09, 0xa1, 0x46, 0xfb, 0xfc, 0x9e, 0x24, 0x88, 0xd5, 0x29, 0x3e, 0x15, 0x62, 0x95, 0xd1, 0x34, 0xec, 0x71, 0x00, 0x21, 0x56, 0xab, 0x42, 0xa7, 0x9e, 0xbc, 0x30, 0x61, 0xda, 0x22, 0x84, 0x6b, 0x03, 0xa5, 0xfd, 0xe8, 0x66, 0x65, 0x29, 0x79, 0xf2, 0xc4, 0x34, 0x19, 0xa1, 0xf8, 0x88, 0x9a, 0xef, 0x51, 0x15, 0x8a, 0xbb, 0x10, 0x8a, 0x7b, 0x18, 0x8a, 0x7d, 0x51, 0x23, 0xfe, 0xee, 0x53, 0xa1, 0xb8, 0x5f, 0xfd, 0xf6, 0x00, 0x42, 0x70, 0x00, 0xff, 0x0e, 0xf1, 0xce, 0xbf, 0x06, 0xc5, 0x47, 0x34, 0x28, 0x8e, 0x1c, 0x1a, 0x07, 0xc5, 0x3d, 0x02, 0x8a, 0x9f, 0x6c, 0x4b, 0x86, 0xe2, 0x27, 0x3b, 0x26, 0x82, 0xe2, 0xd2, 0x04, 0x14, 0x1f, 0x61, 0x8f, 0x7c, 0xa4, 0x29, 0x4f, 0x50, 0xd4, 0xc7, 0xbf, 0xf3, 0xda, 0x09, 0xcb, 0x1e, 0xd1, 0xb0, 0x6c, 0x5b, 0xab, 0x76, 0xd2, 0x81, 0x70, 0x39, 0xa7, 0x9e, 0x74, 0x24, 0x30, 0xe9, 0x9c, 0x0a, 0x97, 0x0b, 0x8c, 0x49, 0x17, 0x0b, 0x2a, 0x94, 0xc3, 0xdc, 0x8f, 0x72, 0xe5, 0x08, 0x9d, 0x74, 0x60, 0xda, 0x20, 0xf6, 0xf7, 0x38, 0xf7, 0x77, 0x28, 0x5a, 0x8f, 0xbf, 0xa7, 0xb0, 0x6f, 0xa7, 0xc9, 0xf3, 0x1f, 0x41, 0x3e, 0xb8, 0x16, 0xfb, 0xa7, 0xc7, 0xfe, 0x1d, 0xd6, 0xfa, 0x37, 0x7c, 0x76, 0x5c, 0xff, 0x76, 0x09, 0x2a, 0x7d, 0x79, 0x1f, 0xf6, 0x2f, 0xde, 0xce, 0xcb, 0xfb, 0x27, 0xc4, 0x12, 0xb3, 0xb2, 0x49, 0xed, 0x5f, 0xdf, 0xc4, 0xfd, 0xbb, 0xbc, 0x94, 0xfb, 0x77, 0x2e, 0x3e, 0xe6, 0x4b, 0x92, 0xfa, 0x37, 0x38, 0xae, 0x7f, 0x83, 0x6a, 0xff, 0x8e, 0x47, 0x69, 0x3c, 0x87, 0xb0, 0x7f, 0x7d, 0x6a, 0xff, 0xf6, 0xa9, 0xfd, 0xdb, 0x8f, 0xfd, 0x3b, 0xc0, 0xfd, 0x1b, 0x88, 0x16, 0xe3, 0xef, 0x21, 0xec, 0xdb, 0x61, 0xfc, 0x3b, 0x92, 0xd2, 0xbf, 0xbe, 0x78, 0xff, 0x0c, 0xe3, 0xfa, 0xf7, 0xa8, 0xe8, 0xdf, 0x9f, 0x8e, 0x27, 0xf7, 0xef, 0x4f, 0x43, 0x57, 0xe9, 0xdf, 0x43, 0x6a, 0xff, 0xda, 0x58, 0xfb, 0x7b, 0xdc, 0x2c, 0xf8, 0x53, 0x07, 0xcf, 0x82, 0xd3, 0xf1, 0x59, 0x50, 0x96, 0x98, 0x05, 0xd8, 0xef, 0x81, 0x78, 0x7a, 0x9e, 0x8a, 0xeb, 0x0f, 0x4d, 0x40, 0x21, 0xea, 0x94, 0x87, 0xd4, 0x7e, 0x3f, 0xc2, 0xf8, 0xfe, 0x28, 0x42, 0x62, 0x17, 0xf7, 0x1b, 0x71, 0x97, 0x30, 0x17, 0xf1, 0xba, 0x4d, 0x85, 0x43, 0xbb, 0x8a, 0xd7, 0x1d, 0x08, 0x87, 0x18, 0xc3, 0xa1, 0x3b, 0x6a, 0xc2, 0xdf, 0x1e, 0x15, 0xaf, 0x37, 0xa9, 0xdf, 0xf5, 0x22, 0x4c, 0xb6, 0xe1, 0xdf, 0x8e, 0x14, 0xea, 0xd0, 0xa6, 0xc1, 0xe5, 0xca, 0x85, 0x71, 0x70, 0x79, 0x44, 0xe0, 0xf5, 0xc7, 0x07, 0x92, 0xf1, 0xfa, 0xe3, 0x81, 0x09, 0xf1, 0xda, 0xac, 0x2c, 0x55, 0xe1, 0xd2, 0x31, 0x31, 0x5c, 0x3e, 0x6e, 0x4c, 0xa5, 0x0e, 0x5b, 0xaf, 0xa4, 0xc0, 0x25, 0x8e, 0x0f, 0x5b, 0xcf, 0xa8, 0x70, 0x79, 0x74, 0x42, 0xb8, 0x3c, 0xaa, 0xc2, 0x65, 0x17, 0xc3, 0x65, 0x0f, 0xc2, 0x45, 0xe0, 0xc3, 0x32, 0x65, 0x9f, 0x3a, 0xe7, 0xf7, 0x23, 0x6c, 0x3a, 0x54, 0xd8, 0xc4, 0x54, 0xd8, 0x74, 0x23, 0x6c, 0x7a, 0x18, 0x36, 0x9b, 0xa2, 0xd3, 0xf1, 0xb7, 0x57, 0x85, 0xcd, 0x36, 0xf5, 0xdb, 0x1d, 0x08, 0x97, 0x87, 0xf0, 0xef, 0x91, 0x14, 0xd8, 0x74, 0x68, 0xb0, 0xf9, 0x64, 0x70, 0x1c, 0x6c, 0x1e, 0x12, 0xb0, 0xf9, 0xe8, 0x91, 0x64, 0xd8, 0x7c, 0xf4, 0xe8, 0x55, 0x60, 0xd3, 0x28, 0x60, 0x33, 0xb2, 0x67, 0x62, 0xce, 0xf2, 0x51, 0x20, 0x95, 0xb3, 0x6c, 0xed, 0x1f, 0xcb, 0x59, 0xf0, 0xcb, 0x76, 0xdd, 0x69, 0x7a, 0xf7, 0xc0, 0xc9, 0xbf, 0x82, 0xb3, 0xcc, 0x4e, 0xe6, 0x2c, 0x08, 0x9f, 0x89, 0x38, 0x4b, 0x70, 0x1c, 0x67, 0x39, 0xfb, 0x79, 0x9c, 0xe5, 0x72, 0xdf, 0x38, 0xf8, 0xec, 0x10, 0xf0, 0xb9, 0x14, 0x4b, 0x86, 0xcf, 0xa5, 0xee, 0x89, 0x39, 0xcb, 0xc8, 0x36, 0x01, 0x9f, 0xd1, 0x87, 0x26, 0x86, 0xcf, 0x25, 0x07, 0xc3, 0x27, 0x3e, 0xa7, 0x1e, 0x18, 0x07, 0x1f, 0xfc, 0xb2, 0x1d, 0x2e, 0xb3, 0xac, 0x70, 0x50, 0x85, 0xcf, 0x81, 0x09, 0xe1, 0x73, 0x40, 0x85, 0xcf, 0x00, 0xe3, 0xcf, 0x21, 0x84, 0x8f, 0xa0, 0x97, 0x77, 0x29, 0x47, 0x10, 0x3e, 0xd3, 0x99, 0x5e, 0xfa, 0x55, 0xbc, 0xd8, 0xa8, 0xec, 0x50, 0xe1, 0xf3, 0x10, 0xc2, 0xe7, 0x11, 0x86, 0xcf, 0xa3, 0xd1, 0xc5, 0xc4, 0x43, 0x54, 0xf8, 0xec, 0x51, 0xbf, 0xed, 0x43, 0xd8, 0xec, 0xc3, 0xbf, 0xfd, 0x29, 0xf0, 0xd9, 0xa6, 0xc1, 0xe7, 0x4f, 0xbd, 0xe3, 0xe0, 0xb3, 0x4d, 0xc0, 0xe7, 0x43, 0x39, 0x19, 0x3e, 0x1f, 0x36, 0x4e, 0x0c, 0x9f, 0xd1, 0x6e, 0x11, 0x73, 0x34, 0xc5, 0x42, 0xe5, 0x18, 0x4b, 0xb9, 0x6a, 0x94, 0x4b, 0x3a, 0x05, 0x2c, 0x3f, 0x0f, 0x67, 0xe2, 0xa7, 0x8e, 0xe7, 0xc0, 0x20, 0x6d, 0x88, 0xeb, 0xb7, 0x15, 0xcd, 0xbb, 0xa2, 0x1c, 0xd2, 0xb4, 0xfa, 0xf0, 0x79, 0x5f, 0xe2, 0xde, 0x58, 0x57, 0xb7, 0x75, 0x46, 0x07, 0x8c, 0xc8, 0x8f, 0xea, 0xd6, 0xd0, 0xf5, 0x7b, 0x36, 0xdd, 0x41, 0xbe, 0x3e, 0xaa, 0xcf, 0xa0, 0xeb, 0x32, 0xa7, 0x3e, 0xc4, 0xd7, 0x3e, 0xfd, 0x4e, 0xba, 0xde, 0x5e, 0xa2, 0x3f, 0xc3, 0xd7, 0x03, 0x86, 0x20, 0x5d, 0x1b, 0x8b, 0x0d, 0x5b, 0xf8, 0xba, 0xdb, 0x70, 0x92, 0xae, 0xcb, 0xa5, 0x74, 0xab, 0x78, 0x9f, 0xbe, 0x42, 0xbc, 0x4f, 0xdf, 0x2b, 0xde, 0xa7, 0x5f, 0x11, 0xef, 0x8d, 0x7e, 0xba, 0x86, 0x33, 0x75, 0xfc, 0x7d, 0x78, 0x9b, 0x8e, 0xbf, 0x8f, 0xe4, 0xe9, 0xf8, 0xfb, 0x48, 0x4c, 0xcf, 0xdf, 0x47, 0xde, 0xd4, 0xf3, 0xf7, 0x4d, 0x2b, 0xf5, 0xfc, 0x7d, 0xd3, 0xc7, 0x86, 0x3c, 0xba, 0xde, 0x11, 0x33, 0x2c, 0xa3, 0xeb, 0x0a, 0xa3, 0x61, 0x37, 0x5f, 0x37, 0x19, 0x3e, 0x10, 0xef, 0xd3, 0xcb, 0xc4, 0xfb, 0xf4, 0x2e, 0xf1, 0x3e, 0xfd, 0x25, 0xf1, 0xde, 0x98, 0xc5, 0xf5, 0xee, 0x48, 0x7f, 0x98, 0xae, 0x77, 0xe6, 0xe8, 0xe7, 0x70, 0x64, 0x19, 0x9d, 0x1a, 0xa1, 0x33, 0x19, 0xa6, 0x47, 0xc6, 0xd9, 0x01, 0xbd, 0x30, 0x2e, 0x65, 0x89, 0xba, 0xba, 0xc8, 0xd0, 0xec, 0x6d, 0x38, 0x6a, 0xd1, 0x2a, 0xc8, 0x4d, 0xc8, 0x90, 0x13, 0xad, 0x28, 0x27, 0xcc, 0xff, 0x48, 0x5c, 0xe6, 0xbc, 0x2c, 0xb5, 0x80, 0x39, 0x9a, 0x33, 0xf8, 0x04, 0x10, 0xed, 0xbe, 0x5c, 0xd0, 0x02, 0x16, 0x65, 0xd8, 0xda, 0xa4, 0xc6, 0x09, 0xa6, 0xe8, 0x50, 0x79, 0xe4, 0xc5, 0x52, 0x44, 0xc0, 0x1b, 0xbb, 0xa6, 0xd5, 0x2c, 0x60, 0x49, 0x07, 0xcc, 0xae, 0x7f, 0xf3, 0x5e, 0x96, 0x80, 0x0d, 0x1c, 0x45, 0x3b, 0x57, 0xf3, 0x2b, 0x2f, 0x85, 0x8e, 0x3e, 0x67, 0xf1, 0x98, 0x40, 0x68, 0xba, 0x57, 0x77, 0xb5, 0x4e, 0x3a, 0xd4, 0x79, 0xf6, 0x11, 0xbd, 0x0f, 0x74, 0xc2, 0x9a, 0x55, 0xf8, 0x6f, 0xe7, 0xb3, 0xee, 0x9a, 0x28, 0xc8, 0xe6, 0x36, 0x9d, 0xd4, 0x45, 0x98, 0x14, 0x8a, 0xd5, 0xf7, 0xec, 0x8d, 0x2d, 0xbb, 0xf8, 0xd6, 0x86, 0xf2, 0x3f, 0xe6, 0x02, 0x45, 0xc4, 0xa4, 0x54, 0x55, 0x67, 0x8b, 0xb4, 0xd8, 0x25, 0xff, 0x0a, 0x9c, 0x63, 0x2b, 0xc0, 0x8e, 0x7f, 0x0e, 0x29, 0xc4, 0xd6, 0x0f, 0xbb, 0xa0, 0x68, 0xb9, 0x89, 0xfc, 0xcc, 0x87, 0x76, 0x83, 0x84, 0xfc, 0x5f, 0xda, 0xb7, 0x0b, 0xca, 0x96, 0xbb, 0xc8, 0xe2, 0x24, 0xc4, 0x7e, 0xce, 0x93, 0x4f, 0x64, 0x29, 0x2a, 0xc3, 0xb1, 0x4e, 0x8a, 0x6d, 0x3d, 0xd8, 0xd3, 0xaa, 0x48, 0x3e, 0xa9, 0x53, 0x06, 0x18, 0x20, 0xfb, 0x29, 0xab, 0xff, 0x95, 0x83, 0xf6, 0x26, 0x28, 0x7c, 0xed, 0x45, 0xc7, 0x5d, 0x3b, 0xc0, 0x5a, 0xf1, 0xca, 0x73, 0xf8, 0x54, 0xf2, 0xda, 0x8b, 0x76, 0x7c, 0xe2, 0xb3, 0xd1, 0x26, 0xa8, 0xa4, 0x58, 0xeb, 0x42, 0x43, 0x28, 0x52, 0xcf, 0x6b, 0x1b, 0x87, 0x54, 0x00, 0xa6, 0xbe, 0xdd, 0x60, 0x58, 0xee, 0xa3, 0xd8, 0xd4, 0xcb, 0xca, 0xf0, 0xd9, 0x82, 0x77, 0xe6, 0xe5, 0x1e, 0xfc, 0xb5, 0x2c, 0x73, 0x72, 0x2e, 0x8e, 0xd3, 0xc5, 0x76, 0x40, 0x99, 0x72, 0x56, 0xdf, 0x1e, 0x5c, 0xf1, 0x19, 0x39, 0xdd, 0x2e, 0xe5, 0x86, 0x2f, 0xca, 0xea, 0x3d, 0xdb, 0x6f, 0x66, 0xe3, 0xaf, 0x3d, 0x92, 0x89, 0xbf, 0x8e, 0x88, 0x09, 0xfb, 0x93, 0xdb, 0x4e, 0x91, 0x4f, 0x2a, 0xf1, 0x4e, 0x68, 0x7e, 0x5f, 0xe1, 0xb5, 0x53, 0x66, 0xb0, 0x32, 0x92, 0xf1, 0xfb, 0x8d, 0xdd, 0x6b, 0xbf, 0x13, 0xc3, 0x1e, 0x74, 0xe1, 0x3a, 0x43, 0xc4, 0x2d, 0x1d, 0x64, 0x7b, 0x77, 0x35, 0x32, 0x2f, 0xf9, 0xf7, 0x20, 0xbf, 0x32, 0xea, 0x79, 0xba, 0x53, 0x3d, 0x75, 0x26, 0xf9, 0xe4, 0xb2, 0xe4, 0x00, 0x99, 0xce, 0x77, 0xc9, 0x66, 0x61, 0xe4, 0x18, 0xae, 0x9f, 0x28, 0x75, 0x58, 0x3d, 0x8b, 0x6e, 0x76, 0xcf, 0x52, 0x2e, 0xf3, 0x4a, 0x4b, 0x6a, 0x23, 0x4a, 0x38, 0x88, 0x9c, 0xf4, 0x82, 0x1c, 0xb2, 0xe2, 0x77, 0x56, 0x07, 0xf4, 0x2e, 0xea, 0x2c, 0x28, 0x67, 0xba, 0x75, 0x1c, 0x39, 0xe4, 0x90, 0x74, 0x87, 0x42, 0x11, 0x2a, 0x26, 0x4b, 0x4d, 0x84, 0x33, 0x54, 0x42, 0x41, 0x13, 0x74, 0xe3, 0xfb, 0x3a, 0x7c, 0xef, 0x47, 0x29, 0x50, 0x47, 0x52, 0xa0, 0xb5, 0x4a, 0xcd, 0x97, 0x2e, 0xf2, 0xc5, 0x63, 0xb2, 0xe6, 0xec, 0x7b, 0x42, 0x19, 0x5e, 0xfe, 0xa8, 0xb5, 0x52, 0x9a, 0x09, 0xa1, 0xd6, 0xeb, 0x8e, 0xed, 0x82, 0x1e, 0x2e, 0xbd, 0x42, 0x39, 0xee, 0x6f, 0x41, 0xe9, 0xb1, 0x45, 0x79, 0xa3, 0xa0, 0x0a, 0x25, 0xc8, 0x16, 0xe5, 0x2c, 0xfe, 0xbd, 0x39, 0xbb, 0x05, 0xf2, 0x94, 0x73, 0xf8, 0x3b, 0x5d, 0x39, 0x4f, 0x12, 0x9a, 0x74, 0x27, 0x97, 0x3a, 0x45, 0x94, 0x5a, 0xbf, 0x99, 0x63, 0x26, 0xf7, 0x89, 0x93, 0x64, 0x0f, 0xc5, 0x26, 0xb4, 0xd8, 0x1d, 0x6c, 0xc5, 0x3b, 0x50, 0x75, 0x65, 0x78, 0x48, 0x36, 0x23, 0xf5, 0x6b, 0x52, 0x86, 0xea, 0xb6, 0x48, 0xfe, 0xfa, 0xcd, 0x36, 0x4b, 0xf8, 0x62, 0xdc, 0xb6, 0x5a, 0x58, 0x48, 0x20, 0x1f, 0x08, 0x90, 0x26, 0x40, 0xbf, 0x72, 0xb0, 0xe6, 0x3c, 0xc8, 0xe4, 0xe3, 0x79, 0xc7, 0x6e, 0x84, 0xf8, 0x43, 0xb8, 0xe2, 0x5f, 0x28, 0xb4, 0x6c, 0x1a, 0xee, 0xfd, 0xd7, 0x61, 0x5a, 0xed, 0x86, 0xcf, 0x5b, 0x49, 0x73, 0x26, 0x49, 0x0f, 0x42, 0xac, 0xf6, 0x38, 0x0e, 0x0a, 0xe9, 0x05, 0x62, 0x59, 0x63, 0x74, 0x35, 0xec, 0xb8, 0x22, 0x3e, 0x27, 0xca, 0x9c, 0x8f, 0xa5, 0x3b, 0xe6, 0xe3, 0x4a, 0x7a, 0x29, 0xf9, 0x0a, 0x56, 0x4e, 0x39, 0x07, 0xc2, 0xfa, 0x50, 0xd7, 0xbf, 0xa9, 0x25, 0xb3, 0x3d, 0xef, 0x33, 0xd8, 0x82, 0x6e, 0xe9, 0xbb, 0xb8, 0xaa, 0xa6, 0x1c, 0x27, 0x1c, 0x03, 0x6c, 0x95, 0x8a, 0xb9, 0xb8, 0xfe, 0xfe, 0xf0, 0x59, 0xce, 0xb5, 0x03, 0x73, 0xbd, 0x47, 0xeb, 0x40, 0xb2, 0x4a, 0x12, 0x7c, 0x87, 0x6a, 0x78, 0x70, 0x23, 0xeb, 0xbf, 0x79, 0x61, 0x78, 0xf7, 0x92, 0xf9, 0xcc, 0xbb, 0xec, 0x19, 0xe4, 0x79, 0x0f, 0xce, 0xb8, 0xb1, 0x5d, 0xfe, 0x9f, 0xb1, 0x9e, 0xec, 0xa3, 0x14, 0xb1, 0xca, 0xa5, 0xe9, 0xeb, 0xd2, 0xde, 0x83, 0x83, 0x63, 0x43, 0xb0, 0x05, 0xd6, 0x01, 0xc6, 0x56, 0x01, 0x8d, 0xd1, 0x7d, 0x0d, 0x9b, 0xfd, 0x3e, 0xd9, 0xee, 0x78, 0x39, 0xaa, 0x9b, 0xe5, 0x03, 0x8f, 0x54, 0x51, 0xf1, 0x1e, 0x38, 0x12, 0xda, 0xb8, 0xf3, 0xde, 0x01, 0x07, 0xb7, 0x6a, 0x77, 0xf8, 0x91, 0xa8, 0x2e, 0x30, 0xa0, 0xc6, 0x57, 0x34, 0x27, 0x6c, 0x16, 0x55, 0xff, 0x29, 0xce, 0x84, 0xb5, 0xc1, 0x95, 0x8f, 0x11, 0x7e, 0x85, 0xf5, 0x9b, 0x59, 0x03, 0x30, 0x0f, 0xe7, 0x6a, 0x11, 0xcd, 0xd4, 0xc4, 0x0a, 0x1a, 0xe7, 0x33, 0xfd, 0x15, 0x05, 0x77, 0x43, 0x49, 0xa4, 0xfa, 0x9f, 0x7e, 0xbd, 0x1a, 0x6a, 0xae, 0x7c, 0x9a, 0x23, 0xe7, 0x49, 0xb7, 0xee, 0x87, 0x88, 0x85, 0x65, 0xe8, 0x6d, 0x88, 0x3f, 0x25, 0xfe, 0xbe, 0xfd, 0x40, 0x7e, 0xf5, 0x1b, 0xee, 0xc5, 0x32, 0xca, 0xb0, 0xcc, 0x92, 0xbe, 0xb5, 0xcb, 0x4e, 0x8e, 0x2b, 0xab, 0x04, 0xff, 0xe8, 0xed, 0x1c, 0xae, 0x2f, 0x2b, 0xa1, 0x8d, 0x82, 0xe9, 0x73, 0xfc, 0xa4, 0x6f, 0xb9, 0x02, 0x2a, 0x27, 0x78, 0x57, 0x89, 0xef, 0x02, 0xaa, 0x97, 0x17, 0xc9, 0x1d, 0x84, 0x7c, 0xd2, 0xaa, 0x92, 0xe1, 0x4a, 0x50, 0xf3, 0x4b, 0x48, 0x54, 0x90, 0x22, 0x0b, 0x92, 0x8e, 0x68, 0xc8, 0xf7, 0x55, 0x1f, 0xf9, 0x86, 0x99, 0x0b, 0xfe, 0x88, 0x46, 0x09, 0x53, 0xa3, 0x66, 0xd8, 0xc1, 0x16, 0x8b, 0x38, 0xe2, 0x14, 0x53, 0xc4, 0xdb, 0xb6, 0x50, 0xf4, 0x25, 0x84, 0xbe, 0x22, 0xa2, 0xb2, 0xfc, 0x0f, 0x96, 0x99, 0x49, 0x23, 0x87, 0x2c, 0x78, 0x2a, 0xcd, 0x6a, 0xdc, 0x24, 0xd5, 0xba, 0x96, 0xac, 0x78, 0x54, 0xed, 0x15, 0xa7, 0x63, 0xfe, 0xeb, 0xe7, 0x71, 0x46, 0x9b, 0x48, 0x73, 0x7d, 0x74, 0xbb, 0xe4, 0x82, 0x10, 0x47, 0x8d, 0x13, 0xeb, 0xc3, 0xf3, 0xc8, 0xeb, 0xfd, 0xd8, 0xe6, 0xf9, 0x48, 0x39, 0x82, 0x90, 0x2b, 0x34, 0x6d, 0xf2, 0xcd, 0x75, 0x47, 0x85, 0xdd, 0xb4, 0x54, 0x6a, 0x55, 0xe9, 0x84, 0x44, 0xb6, 0xd3, 0x77, 0x40, 0x8e, 0xd5, 0x05, 0x4e, 0xdb, 0x1d, 0x90, 0xe5, 0x68, 0x86, 0x46, 0xb2, 0x98, 0xea, 0xdd, 0xd4, 0x96, 0xb9, 0x2f, 0xb6, 0xfc, 0xee, 0xaa, 0x0f, 0x77, 0x01, 0x6b, 0x59, 0x18, 0x59, 0xc3, 0xc2, 0x01, 0x51, 0xf5, 0xff, 0x74, 0xbe, 0xf7, 0xf0, 0x7d, 0x03, 0xff, 0x86, 0xd9, 0x66, 0x1e, 0x21, 0x2d, 0x37, 0xd0, 0x9d, 0xbf, 0x57, 0xae, 0x27, 0x2d, 0x6a, 0xb7, 0x8e, 0x63, 0xd0, 0x37, 0x83, 0x91, 0x7d, 0x70, 0x2e, 0xd3, 0xfc, 0x56, 0x45, 0x0c, 0xd1, 0x74, 0xde, 0x43, 0x8b, 0xc9, 0x0e, 0xca, 0x6f, 0xc5, 0xd9, 0x2c, 0x3d, 0x06, 0x19, 0x38, 0xca, 0xa2, 0x9c, 0x90, 0x6c, 0xc1, 0xde, 0x4d, 0x41, 0xea, 0x72, 0x07, 0xe9, 0xe7, 0x70, 0xc4, 0x98, 0x77, 0xf3, 0x0d, 0xc2, 0xdb, 0x0f, 0x47, 0x88, 0x69, 0x62, 0x8a, 0xe5, 0xa4, 0x99, 0x4e, 0x3a, 0xe8, 0x2c, 0x03, 0x6d, 0x23, 0xfb, 0xfe, 0xcb, 0x47, 0x44, 0x44, 0x38, 0x2d, 0x97, 0x55, 0xe4, 0x32, 0x53, 0xcf, 0x22, 0x66, 0x77, 0x39, 0xb6, 0xca, 0x47, 0x31, 0xf0, 0x2e, 0x1f, 0x64, 0xca, 0xb9, 0x2d, 0xf0, 0xd6, 0x5c, 0x4d, 0x3b, 0xc8, 0xac, 0x51, 0x4c, 0xa4, 0x64, 0x76, 0x5c, 0xd1, 0xaf, 0x80, 0x2c, 0x5c, 0xcf, 0x23, 0xc5, 0xb4, 0x42, 0x3d, 0xd1, 0x3e, 0x96, 0x4f, 0x5b, 0x33, 0x8e, 0xc5, 0xf0, 0x9e, 0x65, 0x31, 0xa6, 0x71, 0xfb, 0xf1, 0xee, 0x00, 0xad, 0x0b, 0x69, 0x35, 0x8f, 0x57, 0x5e, 0x15, 0x92, 0x84, 0x87, 0xd7, 0xe3, 0xad, 0x7a, 0xcc, 0x4b, 0x1e, 0xf0, 0x4f, 0x11, 0xb4, 0xb1, 0x5c, 0x83, 0x32, 0x8c, 0x4f, 0x97, 0xf1, 0xef, 0x12, 0xd2, 0xb5, 0x87, 0xfd, 0x55, 0xfe, 0x6a, 0x7f, 0xe5, 0x3f, 0xfd, 0x1a, 0x9f, 0xb7, 0xfb, 0xe7, 0xfd, 0xf3, 0xcb, 0xab, 0x01, 0xef, 0x76, 0x22, 0x67, 0x3a, 0x64, 0x25, 0xad, 0x1a, 0x4b, 0xef, 0x63, 0x20, 0xb7, 0x66, 0x73, 0xb4, 0x84, 0xbd, 0x59, 0x5e, 0x98, 0xc6, 0x77, 0xbb, 0x92, 0x46, 0x65, 0x27, 0x14, 0xe3, 0x68, 0x3c, 0xa4, 0xfe, 0xef, 0xc0, 0xbf, 0x2e, 0xfd, 0x4e, 0xf0, 0xc1, 0x46, 0xe8, 0xc5, 0xfb, 0x42, 0x35, 0xbd, 0xd4, 0xdb, 0x04, 0x46, 0x79, 0xe5, 0x1c, 0x07, 0xfe, 0x36, 0xad, 0xd1, 0xc9, 0x8d, 0xb3, 0x91, 0xf3, 0x28, 0x0f, 0xcb, 0x14, 0xaf, 0xc3, 0x60, 0x9d, 0x09, 0x3d, 0xb7, 0x51, 0xff, 0x4e, 0x93, 0x2c, 0x5f, 0xfe, 0x2e, 0xca, 0x05, 0x01, 0xe5, 0x1c, 0x5e, 0x2f, 0xe1, 0xf5, 0x82, 0xd4, 0xcc, 0xd2, 0xc1, 0x69, 0xb7, 0x59, 0xa3, 0xb5, 0x41, 0x5f, 0xd8, 0x26, 0x83, 0x5e, 0x42, 0x2e, 0x69, 0x90, 0xf3, 0xb8, 0x4f, 0xdb, 0xe5, 0x2c, 0xc4, 0x4b, 0x83, 0x6c, 0xe4, 0xa7, 0x9d, 0xc4, 0xbb, 0x3a, 0x74, 0xc8, 0x4d, 0x1e, 0xa1, 0xf1, 0x47, 0xc9, 0x74, 0x9f, 0xe4, 0xe3, 0xc8, 0x01, 0xa0, 0x38, 0xd9, 0x9a, 0xa4, 0x2d, 0x58, 0x1d, 0xb6, 0xaa, 0x7a, 0x43, 0x32, 0xc1, 0x90, 0xf9, 0xd0, 0x01, 0xf6, 0xe4, 0xda, 0xff, 0xa7, 0x32, 0x1a, 0xc1, 0x7c, 0x2f, 0xe8, 0x82, 0x55, 0x61, 0x9b, 0x96, 0x8b, 0x25, 0xe4, 0x01, 0xce, 0x77, 0x48, 0xcd, 0x47, 0xde, 0x2c, 0x2c, 0x79, 0x94, 0x0f, 0x21, 0x19, 0xe6, 0xd9, 0x11, 0x9d, 0x36, 0xb8, 0x8b, 0x4b, 0x3c, 0xcc, 0x39, 0x8f, 0x88, 0x9c, 0x1f, 0xb3, 0xf7, 0x98, 0xe0, 0xbc, 0x48, 0x8e, 0x56, 0x1a, 0xcb, 0xd5, 0x83, 0xad, 0x3a, 0xec, 0xf5, 0x71, 0xd9, 0xe0, 0xc9, 0x8c, 0x64, 0x21, 0x5e, 0x5e, 0x8e, 0x60, 0x51, 0xc1, 0xca, 0x30, 0xe8, 0x32, 0x65, 0xd0, 0xf9, 0xc8, 0x0b, 0x55, 0x64, 0xb1, 0xd6, 0x52, 0xec, 0x99, 0xac, 0xb5, 0x13, 0x71, 0xaa, 0xad, 0x5e, 0x44, 0x6b, 0xea, 0xff, 0x78, 0x13, 0x97, 0x5d, 0x85, 0x34, 0xb9, 0x77, 0xa2, 0xb6, 0xb6, 0x9a, 0x91, 0xb7, 0xb5, 0xb9, 0x75, 0xcc, 0x5b, 0xfb, 0x3f, 0xbe, 0x8d, 0xfd, 0x21, 0x36, 0x62, 0x6d, 0xdb, 0x39, 0x26, 0x4a, 0x4e, 0x74, 0xf2, 0x20, 0xf1, 0x3e, 0x1f, 0x42, 0xbf, 0x45, 0xd9, 0xae, 0x9c, 0x1d, 0x0b, 0x6f, 0x7c, 0x73, 0xa9, 0x7e, 0x73, 0xb8, 0x88, 0x3c, 0xeb, 0x3e, 0x2d, 0x6c, 0x72, 0x7e, 0xca, 0x25, 0x5f, 0xa2, 0xaf, 0x11, 0x1b, 0xb1, 0xbf, 0x6c, 0xc7, 0xd6, 0xff, 0xb1, 0x9e, 0x5b, 0x52, 0x19, 0xae, 0xb3, 0x17, 0x28, 0xc3, 0x72, 0x00, 0xef, 0x2a, 0x39, 0xe7, 0x45, 0xae, 0xe7, 0x3a, 0xac, 0xa7, 0x9d, 0xa2, 0x34, 0x53, 0x5c, 0xe6, 0x8f, 0x4e, 0x30, 0x1f, 0x9e, 0xa5, 0x5c, 0xe4, 0x18, 0x6e, 0x19, 0x88, 0x5b, 0x7a, 0xe4, 0x32, 0x41, 0x39, 0x43, 0xa5, 0x31, 0x7d, 0xb2, 0x49, 0xbd, 0xa3, 0xd5, 0xef, 0x1e, 0x6c, 0xdb, 0x25, 0x65, 0x5f, 0x1c, 0x87, 0x4f, 0x71, 0xb9, 0xbb, 0xb0, 0xac, 0x9d, 0xa4, 0xad, 0xfd, 0x51, 0x83, 0x0a, 0x5f, 0xb3, 0x75, 0x96, 0xf2, 0xe8, 0xcc, 0x58, 0x6e, 0x50, 0x5d, 0x93, 0x0e, 0x2b, 0xcd, 0xc9, 0x33, 0xf6, 0x6a, 0x73, 0xf1, 0xa3, 0x12, 0x9e, 0x8b, 0x87, 0x49, 0x3f, 0x9f, 0xe6, 0xa2, 0x5a, 0x33, 0x45, 0x89, 0x28, 0xf4, 0xff, 0x0c, 0x6b, 0x7a, 0x59, 0xd0, 0xc7, 0xa8, 0x82, 0xd0, 0x38, 0x81, 0x7f, 0x6f, 0xd8, 0x66, 0x81, 0xf9, 0x38, 0x4a, 0x35, 0x28, 0x69, 0xbc, 0x5c, 0x10, 0x54, 0x2e, 0xdb, 0x17, 0x50, 0xdb, 0x6e, 0xc1, 0x72, 0x89, 0x56, 0x54, 0x5d, 0xf9, 0xc8, 0x2f, 0x2f, 0x92, 0x7c, 0x56, 0x8b, 0xb1, 0x93, 0x04, 0xd1, 0x76, 0xc3, 0xfe, 0xce, 0xe5, 0x95, 0xc7, 0x3a, 0x8b, 0x66, 0xe7, 0xe2, 0xac, 0xb1, 0xe8, 0x21, 0x03, 0xb2, 0x99, 0x8a, 0x15, 0x15, 0x74, 0xb0, 0xa0, 0x7a, 0x4c, 0xb6, 0xf3, 0x9d, 0x4e, 0x39, 0x21, 0xe7, 0xf3, 0x9d, 0x5e, 0x39, 0x29, 0x67, 0xf1, 0x5d, 0x9a, 0xf2, 0x06, 0xc2, 0xc2, 0xc7, 0xfd, 0x26, 0x6f, 0x0a, 0x53, 0xea, 0xb6, 0x30, 0x2e, 0x3f, 0x92, 0xf0, 0x08, 0x76, 0xa9, 0x9a, 0xdb, 0xd8, 0xff, 0xd1, 0x22, 0x2d, 0x0d, 0xdb, 0xf8, 0x12, 0xa6, 0xe7, 0xb3, 0x5f, 0xab, 0x59, 0xca, 0x4b, 0xb5, 0xef, 0x9a, 0xf3, 0x95, 0x7d, 0x71, 0xb9, 0x9a, 0x7c, 0x67, 0x26, 0xf4, 0x02, 0xeb, 0x54, 0x1f, 0xb1, 0x64, 0x9d, 0xea, 0x90, 0x54, 0x0b, 0xd5, 0x57, 0xcf, 0x41, 0x56, 0x82, 0x6b, 0x7e, 0x78, 0xd6, 0x56, 0x00, 0x86, 0xfa, 0xcd, 0xec, 0x1b, 0x22, 0x7f, 0x35, 0x54, 0xa7, 0xbd, 0xd0, 0x45, 0x9e, 0xf8, 0x15, 0x38, 0xbd, 0x31, 0xb4, 0xf6, 0x69, 0xe4, 0x97, 0xcb, 0x1d, 0xa1, 0xae, 0xd5, 0x48, 0xaa, 0xc8, 0xaa, 0x80, 0x6d, 0xaa, 0xf5, 0x9a, 0x35, 0x1e, 0xce, 0xd7, 0x7c, 0x35, 0xcf, 0xb9, 0x50, 0x97, 0x6c, 0x42, 0x19, 0xa4, 0xb2, 0xe6, 0xca, 0xa5, 0xa2, 0x7d, 0x48, 0xaf, 0x97, 0x9f, 0x93, 0x5d, 0x0e, 0xfd, 0xef, 0x37, 0xf5, 0xac, 0xb5, 0xde, 0x89, 0x70, 0xf7, 0x1f, 0x3d, 0xe8, 0x40, 0x4e, 0xfa, 0xfa, 0x61, 0xeb, 0xbe, 0x1e, 0xa0, 0xa8, 0x21, 0x52, 0xc5, 0xd1, 0xe7, 0xec, 0xc8, 0xaf, 0x5f, 0x3b, 0x6c, 0xfd, 0x45, 0x0f, 0xc8, 0x99, 0xd2, 0x9d, 0x44, 0xad, 0x71, 0x25, 0xf8, 0x80, 0xbf, 0xb7, 0x5d, 0x49, 0x6a, 0x5f, 0x91, 0xb0, 0x2b, 0xf7, 0xe6, 0x0b, 0xae, 0x65, 0x17, 0x11, 0xa2, 0xd9, 0xd2, 0x82, 0x7a, 0x42, 0xad, 0x17, 0xad, 0x4e, 0xfa, 0x06, 0xb9, 0x24, 0xb5, 0xaa, 0x31, 0xa8, 0xf5, 0x84, 0x5a, 0xd4, 0xe8, 0x65, 0x99, 0x7b, 0x05, 0xc9, 0xdc, 0x1f, 0xde, 0xaf, 0xca, 0xdc, 0x8e, 0xab, 0xb7, 0x0e, 0x53, 0x0a, 0x45, 0x4a, 0x1b, 0x71, 0x4e, 0x7f, 0xa2, 0xfc, 0x0f, 0x1e, 0xc6, 0x71, 0xf2, 0x87, 0xcd, 0xc9, 0x6d, 0xf6, 0xe8, 0x45, 0xd4, 0x3a, 0xbf, 0xf0, 0x89, 0x77, 0x4a, 0xf3, 0x23, 0x42, 0xd4, 0x9f, 0xfc, 0xb5, 0x60, 0x5e, 0xe6, 0xb0, 0xb6, 0xda, 0x57, 0xdf, 0x81, 0x2c, 0x6b, 0xa5, 0x6d, 0x26, 0x18, 0x90, 0x22, 0x27, 0x68, 0xf6, 0x13, 0xca, 0x45, 0x94, 0x4c, 0x82, 0x48, 0x29, 0xfa, 0x50, 0xee, 0xa8, 0x8b, 0x2c, 0xe2, 0x35, 0xf8, 0x30, 0xf2, 0x20, 0xd9, 0x0d, 0x0b, 0xae, 0x7c, 0x70, 0x77, 0xdd, 0x76, 0x4e, 0xb9, 0x4c, 0x25, 0x09, 0x5a, 0xe0, 0x26, 0x8f, 0xd0, 0x75, 0x75, 0xdb, 0x49, 0xae, 0x96, 0x2a, 0xd9, 0xc3, 0xcd, 0x94, 0x48, 0x3e, 0xd1, 0x03, 0x37, 0x7b, 0x3d, 0x81, 0x3a, 0xfc, 0x0b, 0x0a, 0x9b, 0xf1, 0x4b, 0xe4, 0xb7, 0x26, 0x17, 0xe1, 0x10, 0x0c, 0xd3, 0xca, 0xa6, 0x4e, 0x26, 0x8a, 0x44, 0xb6, 0xc9, 0xdb, 0xb8, 0xd4, 0x0b, 0x54, 0x6a, 0x74, 0x0a, 0xd1, 0x38, 0x11, 0x13, 0xf6, 0x03, 0x1a, 0x91, 0x9c, 0xf6, 0x29, 0x43, 0x44, 0xf5, 0x2a, 0x95, 0x53, 0x38, 0x4f, 0x2f, 0x88, 0x7d, 0x57, 0x9c, 0x43, 0xc1, 0x8a, 0x77, 0x95, 0x53, 0x2c, 0x45, 0xee, 0x8c, 0x9f, 0x25, 0x5d, 0xe1, 0x72, 0x2e, 0xd1, 0x57, 0xdc, 0x66, 0xfd, 0x82, 0x2b, 0x7f, 0x7c, 0x49, 0x6d, 0xf3, 0xc5, 0x94, 0x36, 0xeb, 0xb9, 0xc5, 0xf9, 0x85, 0xd8, 0x63, 0xa2, 0x19, 0xdc, 0x46, 0xbd, 0x68, 0x25, 0x8f, 0x4b, 0x2e, 0xd3, 0x47, 0x80, 0x87, 0x71, 0x7d, 0x70, 0x09, 0xe7, 0xfd, 0xf0, 0xde, 0x0d, 0xb7, 0x93, 0x1d, 0x50, 0x10, 0x25, 0xe0, 0x90, 0x83, 0x5a, 0x65, 0x1e, 0xda, 0x03, 0xdd, 0xdc, 0xaa, 0x0a, 0xe5, 0xf4, 0xec, 0x1a, 0x21, 0xc9, 0x2f, 0x2c, 0x9f, 0x5d, 0xae, 0x9c, 0x5b, 0xe8, 0x9b, 0xed, 0x53, 0xce, 0xab, 0x2b, 0xcf, 0x53, 0x89, 0x95, 0xa7, 0x95, 0x5a, 0x81, 0xe5, 0xf6, 0x6d, 0xb8, 0xbd, 0x12, 0xcb, 0xbc, 0x14, 0x99, 0xa3, 0x95, 0x68, 0x17, 0x25, 0x3e, 0x9e, 0x28, 0x91, 0xd6, 0x06, 0x58, 0xaa, 0x5a, 0xe2, 0xc4, 0xe5, 0xcd, 0xf0, 0x43, 0x1d, 0x4a, 0xf7, 0x41, 0xb2, 0xec, 0x21, 0x8f, 0x81, 0x4b, 0xf3, 0x95, 0x01, 0x9a, 0x85, 0x5a, 0xec, 0x38, 0xf5, 0xf7, 0x5b, 0x64, 0x11, 0x30, 0x37, 0xee, 0x51, 0x86, 0xe0, 0xe0, 0x42, 0x2c, 0x98, 0xbd, 0x02, 0xcc, 0x4a, 0x1f, 0xfe, 0x66, 0x2b, 0x7b, 0x4b, 0x9d, 0x90, 0x59, 0xe6, 0x84, 0x1c, 0x0d, 0x1b, 0x50, 0x3a, 0xb0, 0x28, 0x8f, 0x22, 0xf6, 0x19, 0x3c, 0xb3, 0x94, 0xbd, 0x7d, 0x2d, 0x4a, 0xdf, 0xaa, 0xec, 0x12, 0x8a, 0xfc, 0x57, 0x31, 0xbb, 0x43, 0x51, 0x94, 0xdd, 0xfc, 0xbb, 0x4b, 0xce, 0xc4, 0xaf, 0x73, 0x95, 0x5d, 0xcc, 0x6f, 0x77, 0xfb, 0x2b, 0xfa, 0x2b, 0x57, 0x65, 0x17, 0x3b, 0x21, 0x6f, 0xa1, 0x9f, 0xdf, 0x3f, 0xc9, 0xbf, 0x7b, 0x38, 0x57, 0x9e, 0xb2, 0x87, 0x73, 0x3d, 0xe9, 0xf7, 0x17, 0x2c, 0x52, 0xf6, 0x23, 0x24, 0x1e, 0x75, 0x7d, 0xd3, 0x6d, 0x54, 0xb1, 0x2b, 0xe6, 0x36, 0x93, 0x27, 0xed, 0xdd, 0x1b, 0x29, 0xce, 0x04, 0xa7, 0x5e, 0x56, 0xc7, 0x90, 0xe2, 0x77, 0x5a, 0xac, 0xf3, 0xea, 0x1e, 0xe0, 0x9d, 0x68, 0x92, 0xae, 0x40, 0x9f, 0x2d, 0xb8, 0x99, 0xde, 0xcc, 0x39, 0x2f, 0x69, 0xe3, 0xba, 0x44, 0xe0, 0xa2, 0x21, 0x5e, 0xc6, 0xc5, 0x31, 0x6f, 0x2c, 0xf4, 0x86, 0xf1, 0x74, 0x05, 0x98, 0xd8, 0x12, 0x7a, 0x1a, 0x72, 0xc3, 0x17, 0xfe, 0xe3, 0x5d, 0x65, 0x3f, 0xc5, 0xbb, 0xc4, 0x36, 0xed, 0xf7, 0xe0, 0x8c, 0x30, 0xfb, 0x40, 0x1f, 0xf1, 0x2d, 0xcb, 0xc0, 0xab, 0x0e, 0xdf, 0xff, 0x54, 0xb6, 0xe0, 0x5d, 0x5a, 0x24, 0x84, 0xbf, 0x06, 0x7c, 0xde, 0x2e, 0xb7, 0x91, 0xdd, 0x1b, 0xca, 0xba, 0x79, 0x45, 0x08, 0x91, 0x22, 0xa4, 0xe6, 0xd8, 0x67, 0x82, 0x4e, 0x26, 0x42, 0xd1, 0x6c, 0xc3, 0x3a, 0xd7, 0x58, 0xe5, 0xea, 0xcf, 0xcb, 0xd3, 0x71, 0xb3, 0x5c, 0xf7, 0xb9, 0xe5, 0xd8, 0x4e, 0xee, 0x46, 0x8c, 0xa8, 0x52, 0x0e, 0xc8, 0xce, 0xcf, 0x2d, 0x6f, 0xc6, 0x29, 0xca, 0x5b, 0x8d, 0xd2, 0x1a, 0xc2, 0x54, 0x19, 0x98, 0x5d, 0xa9, 0x1c, 0x9a, 0x5d, 0xa1, 0xbc, 0x80, 0x4f, 0x97, 0x95, 0xc3, 0xb3, 0xfd, 0xca, 0x11, 0xc4, 0xa6, 0x97, 0x11, 0x97, 0x06, 0x11, 0x97, 0x8e, 0x31, 0xc7, 0x3b, 0x8e, 0xbf, 0x17, 0x95, 0x21, 0xe4, 0xbd, 0x7b, 0xec, 0x88, 0x8d, 0x12, 0xf6, 0x9f, 0xb5, 0x83, 0x0d, 0x35, 0x1c, 0x19, 0x12, 0x6b, 0xc1, 0x15, 0x30, 0xad, 0x48, 0x28, 0xa2, 0x9e, 0x3b, 0xcd, 0xb3, 0x02, 0x32, 0xdd, 0x26, 0x7a, 0x1a, 0xec, 0x3a, 0x8a, 0x23, 0x61, 0x43, 0xfe, 0xca, 0xbe, 0x25, 0x0c, 0x98, 0x33, 0x5b, 0xcb, 0xe9, 0xc0, 0xb9, 0xe5, 0xa1, 0x15, 0xb7, 0xc8, 0xd9, 0x8d, 0x39, 0x2f, 0x53, 0xdb, 0x79, 0x75, 0x90, 0xc7, 0xa7, 0x8b, 0xb9, 0x56, 0xc2, 0xf6, 0xfc, 0xa1, 0xc7, 0x18, 0xdb, 0xa9, 0xbd, 0xfb, 0x95, 0x43, 0x38, 0x9b, 0x87, 0x0b, 0x6a, 0x94, 0x01, 0x3a, 0x7d, 0xa9, 0x20, 0x29, 0xad, 0x06, 0xe5, 0xcc, 0x3a, 0x75, 0x45, 0x8e, 0x52, 0xa6, 0x76, 0xea, 0xa2, 0xce, 0x82, 0x03, 0x89, 0x59, 0x80, 0xd2, 0xda, 0xcb, 0x85, 0x4e, 0xa4, 0xa0, 0xf3, 0x98, 0x8b, 0x3d, 0x42, 0xe3, 0x88, 0xef, 0x6c, 0xd6, 0x95, 0x60, 0x93, 0x4c, 0xd6, 0xc9, 0xbf, 0x88, 0x75, 0x5c, 0x37, 0xb0, 0xde, 0x6a, 0x3a, 0xb8, 0x9e, 0x23, 0xa7, 0x3e, 0x1d, 0xec, 0x8c, 0x64, 0xce, 0xae, 0x52, 0x1e, 0x2d, 0x33, 0x94, 0xa6, 0x49, 0x41, 0xa4, 0x41, 0x9b, 0x5c, 0xc8, 0xd7, 0xb1, 0xae, 0x7d, 0x2e, 0xfc, 0xb2, 0x28, 0xbd, 0x2c, 0xad, 0x44, 0x8f, 0x5c, 0x77, 0x7f, 0x31, 0x59, 0x73, 0x9f, 0x64, 0x9a, 0x44, 0x52, 0x4c, 0x37, 0xb6, 0xe0, 0x40, 0xd1, 0x2c, 0xa5, 0xef, 0x98, 0x1f, 0xa1, 0x48, 0xf0, 0x3d, 0xc8, 0xed, 0x30, 0xbb, 0x5d, 0x30, 0x47, 0x6a, 0x86, 0x32, 0x21, 0xc9, 0x23, 0x36, 0xed, 0x0b, 0x9b, 0x38, 0x3a, 0xae, 0x41, 0xae, 0xa5, 0xaf, 0x5b, 0xbf, 0x78, 0x8c, 0xbe, 0x2e, 0x17, 0x72, 0x34, 0x4a, 0x9e, 0x67, 0x51, 0xf2, 0x3c, 0xa4, 0x4a, 0x42, 0x07, 0x34, 0x49, 0x08, 0xef, 0xcf, 0x52, 0xcb, 0xdd, 0x33, 0xc5, 0x0c, 0x45, 0xdc, 0xef, 0xae, 0xeb, 0x7f, 0xd7, 0x29, 0x4a, 0x62, 0x4e, 0x2b, 0xb0, 0xb9, 0x9b, 0xa5, 0xbb, 0x03, 0x05, 0xf3, 0x94, 0x01, 0x6c, 0xcd, 0x5e, 0x6e, 0xcd, 0xa1, 0xd9, 0x38, 0x9f, 0x94, 0x17, 0xb8, 0x3c, 0xa3, 0x54, 0x8d, 0xdf, 0x56, 0x5b, 0xab, 0x11, 0x06, 0xb8, 0x12, 0x3e, 0xde, 0xa2, 0xec, 0x66, 0xcf, 0x1f, 0x28, 0xd1, 0xa0, 0x84, 0x5a, 0x84, 0xdf, 0xec, 0x3c, 0xd1, 0xa2, 0x3c, 0xf9, 0x74, 0x8b, 0xb2, 0x87, 0xbc, 0x6e, 0x16, 0xa7, 0x97, 0xa6, 0x0d, 0x05, 0x3d, 0x69, 0x83, 0xe5, 0x88, 0x17, 0x8f, 0x62, 0x59, 0x3b, 0xe5, 0xe3, 0xdc, 0xea, 0xc9, 0x5a, 0xab, 0x3d, 0x38, 0xfb, 0x07, 0x5f, 0x98, 0x1d, 0xc0, 0x3e, 0x57, 0x28, 0x07, 0xc7, 0xb6, 0xdb, 0x3a, 0xef, 0x66, 0x6c, 0x1f, 0x8d, 0x30, 0x8d, 0xaa, 0x34, 0x73, 0x5c, 0xfb, 0xaa, 0xb9, 0x7d, 0x75, 0xca, 0x0b, 0x63, 0x47, 0xee, 0x94, 0x68, 0x99, 0xe5, 0x00, 0xb5, 0x6c, 0x93, 0x14, 0xc4, 0x96, 0x3e, 0xb9, 0x8f, 0x5b, 0x05, 0x1f, 0x7b, 0x0d, 0x25, 0xfa, 0x13, 0x55, 0x5e, 0xec, 0xd5, 0xa9, 0x83, 0xb6, 0x80, 0x7c, 0x0a, 0xc7, 0x0c, 0xe0, 0xb4, 0x75, 0x72, 0xc7, 0x75, 0x07, 0xd7, 0xb3, 0x3f, 0xab, 0x66, 0xb0, 0xf3, 0x68, 0x3f, 0xea, 0xa9, 0xa2, 0x71, 0x24, 0x1c, 0xb6, 0x8a, 0x91, 0x7a, 0x2c, 0x69, 0xa4, 0xaa, 0x79, 0xa4, 0xb0, 0xd5, 0xd6, 0x78, 0xab, 0xad, 0x58, 0x37, 0xc2, 0xff, 0xa1, 0xba, 0x07, 0xac, 0x70, 0x2c, 0x86, 0xff, 0x3b, 0x8f, 0x75, 0x12, 0x35, 0x0a, 0x7c, 0x3f, 0x97, 0x69, 0x04, 0x95, 0x82, 0x63, 0x80, 0xb0, 0x7f, 0xe7, 0x49, 0xd7, 0xbc, 0x59, 0x3e, 0xf2, 0xce, 0x8e, 0x23, 0x52, 0x40, 0xf6, 0x19, 0xa9, 0xbd, 0x23, 0xca, 0x38, 0x58, 0x8d, 0x50, 0x23, 0xe8, 0xef, 0x53, 0x5e, 0x90, 0x0a, 0xd5, 0x3a, 0x32, 0x5d, 0x3e, 0xc4, 0xbd, 0xbc, 0xba, 0x07, 0xd4, 0x1e, 0xe6, 0xe3, 0xcc, 0x7a, 0xe8, 0x80, 0x80, 0xff, 0xd2, 0x78, 0x2f, 0x2d, 0x6a, 0x1f, 0xfd, 0xa7, 0x0e, 0x23, 0x74, 0xf6, 0xc9, 0x6f, 0xe0, 0x48, 0xb7, 0x28, 0x8f, 0x80, 0x81, 0x25, 0xcb, 0xa8, 0x7a, 0x12, 0xb4, 0x6b, 0x2c, 0xe5, 0xa6, 0x15, 0x1c, 0x9f, 0xe3, 0x0d, 0x8b, 0x3d, 0xaf, 0xb8, 0x8c, 0x8c, 0x94, 0xaf, 0xe6, 0xca, 0xf9, 0x53, 0xea, 0xae, 0x17, 0x53, 0xc5, 0x8e, 0x8c, 0x53, 0xf4, 0xce, 0xc8, 0x51, 0x65, 0xb7, 0x31, 0xbf, 0xeb, 0xd2, 0xe8, 0x22, 0xe2, 0x48, 0xbb, 0xd8, 0x11, 0xe3, 0xfc, 0x17, 0x92, 0xd2, 0x2e, 0xd5, 0x6d, 0x23, 0xd9, 0x99, 0xfd, 0xbe, 0x90, 0xdc, 0xec, 0x44, 0x7a, 0x7b, 0x21, 0xbc, 0x54, 0x8d, 0xb9, 0xc6, 0x76, 0x56, 0x61, 0xda, 0xe5, 0xb2, 0x68, 0x4f, 0x11, 0x48, 0xab, 0x24, 0x4f, 0xaf, 0x72, 0x19, 0xce, 0xb0, 0x62, 0xfc, 0xf6, 0x42, 0xd8, 0x8e, 0xbf, 0x97, 0xfa, 0x88, 0x4e, 0xdb, 0xd4, 0x5d, 0x38, 0x6a, 0x8f, 0xf9, 0x14, 0x49, 0xe9, 0x46, 0xa2, 0x14, 0xbc, 0x52, 0x30, 0x51, 0xf9, 0xf8, 0xb5, 0xf1, 0x47, 0x47, 0x38, 0xd7, 0xd9, 0x38, 0xe7, 0xc6, 0xde, 0x2c, 0xb8, 0x72, 0x3e, 0x13, 0x79, 0x37, 0xa5, 0x9f, 0xe3, 0xaf, 0xb3, 0xe2, 0xbd, 0x31, 0xd4, 0x6d, 0x47, 0xfe, 0x79, 0x6e, 0x21, 0xad, 0xeb, 0xce, 0x49, 0xba, 0xea, 0xd8, 0x31, 0x94, 0x09, 0x06, 0x3a, 0xdf, 0xa4, 0x95, 0xc6, 0xd9, 0xd5, 0x40, 0x9c, 0x8a, 0x22, 0x7e, 0x22, 0xdf, 0x6f, 0xb7, 0xa8, 0xd1, 0x6b, 0xd9, 0xd3, 0x8a, 0x23, 0x6c, 0xc8, 0xc6, 0x15, 0x95, 0x33, 0xed, 0xe4, 0x5a, 0x77, 0xba, 0xb6, 0x4f, 0x51, 0xbf, 0x39, 0x39, 0x4a, 0x95, 0x03, 0xc2, 0xd3, 0xa3, 0x3a, 0x8a, 0xae, 0xa7, 0x8f, 0x4a, 0xe9, 0xa9, 0x6f, 0x30, 0x6d, 0x69, 0x9b, 0x6e, 0x81, 0x88, 0x9b, 0x4b, 0x11, 0xd5, 0xb6, 0xd7, 0x6f, 0xa6, 0xf5, 0xdd, 0x20, 0x63, 0x1c, 0x71, 0x95, 0x2f, 0x35, 0xc1, 0x34, 0xe5, 0xd9, 0xeb, 0x3b, 0x88, 0xb7, 0x44, 0x81, 0x4f, 0x37, 0x90, 0x4e, 0x38, 0xf4, 0x36, 0x33, 0xd2, 0x99, 0xf7, 0x10, 0x26, 0x7b, 0x06, 0xbb, 0xfb, 0x63, 0x8d, 0xc6, 0x9d, 0xb8, 0xd6, 0x96, 0xf5, 0x4e, 0x8e, 0x4b, 0x88, 0xb4, 0xe8, 0x05, 0xa4, 0x8d, 0xb9, 0x73, 0x66, 0x29, 0x4f, 0x16, 0x4d, 0x3a, 0x86, 0x54, 0x96, 0x28, 0x2f, 0xc9, 0x18, 0x2e, 0x17, 0x74, 0xd7, 0xaf, 0x47, 0x9a, 0x7e, 0x18, 0x69, 0xe4, 0x41, 0xa4, 0x87, 0x15, 0x48, 0xbd, 0x6b, 0x94, 0xe3, 0x88, 0xd5, 0x27, 0x10, 0xef, 0x86, 0xf0, 0xcb, 0x93, 0x4c, 0xed, 0x4f, 0xa9, 0x73, 0xeb, 0xb0, 0x36, 0xb7, 0x54, 0x6e, 0x91, 0xcb, 0xe5, 0xe5, 0x10, 0x7d, 0x1e, 0x57, 0xde, 0x81, 0x3f, 0xa7, 0x3c, 0x94, 0x04, 0xf2, 0x89, 0xfe, 0x63, 0x0f, 0xe8, 0xcc, 0xdb, 0x62, 0x9e, 0x85, 0x2b, 0x87, 0x67, 0x23, 0x19, 0x78, 0x9d, 0xa4, 0x3c, 0x8b, 0x33, 0x72, 0x9f, 0x1b, 0x3c, 0xa6, 0xc0, 0x00, 0xce, 0xa4, 0x3d, 0x81, 0xef, 0x9b, 0xe2, 0x91, 0x58, 0xcb, 0x2f, 0x99, 0xc0, 0x81, 0x6d, 0x47, 0xca, 0x7a, 0xa0, 0x15, 0xa8, 0xff, 0x72, 0x1b, 0xf5, 0x4e, 0x32, 0x0e, 0x6e, 0x20, 0x9f, 0x5a, 0xd6, 0xf2, 0x56, 0xc8, 0xf2, 0xec, 0x00, 0x6b, 0x79, 0x75, 0xac, 0x75, 0xd2, 0x40, 0xa7, 0x75, 0xb2, 0x4e, 0x17, 0x29, 0x96, 0xc8, 0xd3, 0xbd, 0xcb, 0xea, 0x7b, 0x65, 0x60, 0x70, 0x03, 0xed, 0x79, 0x59, 0xfd, 0x54, 0x66, 0xf2, 0xec, 0xc4, 0x19, 0xbc, 0xaf, 0xae, 0xff, 0x1c, 0xc7, 0xf2, 0xc4, 0xd9, 0xb5, 0xcf, 0x15, 0x6b, 0xd8, 0xd4, 0x70, 0x7f, 0x68, 0x3d, 0x73, 0x99, 0xdc, 0xbe, 0xf5, 0xcb, 0x76, 0x52, 0x5d, 0x88, 0x23, 0xbb, 0x8e, 0x22, 0xbd, 0x0d, 0x75, 0xf6, 0x77, 0xde, 0x6e, 0xee, 0x10, 0xe3, 0x51, 0x8e, 0x72, 0x0b, 0x71, 0x93, 0x3d, 0x1a, 0x8c, 0xde, 0x20, 0x08, 0x09, 0x4b, 0x75, 0x93, 0x06, 0xa5, 0xc5, 0x02, 0x4a, 0xc4, 0x83, 0x08, 0x52, 0xbc, 0x73, 0x8b, 0x50, 0x1a, 0x9a, 0x3d, 0x4f, 0x39, 0x89, 0x90, 0x3a, 0x85, 0x33, 0xfe, 0x05, 0xe5, 0x0d, 0x86, 0xd5, 0xe9, 0xb1, 0xb0, 0xfa, 0x2d, 0x8e, 0x6d, 0xfd, 0xe6, 0x35, 0x80, 0xf2, 0x54, 0x5e, 0x3f, 0xde, 0x87, 0x61, 0xd4, 0xe4, 0x98, 0xa5, 0x50, 0x3c, 0x48, 0xd3, 0xf5, 0x2d, 0xca, 0xb3, 0x30, 0xcd, 0x5a, 0x89, 0xad, 0xdb, 0x9f, 0xbc, 0x97, 0xa7, 0x5a, 0xaa, 0xd1, 0xcc, 0x8f, 0xf1, 0xcc, 0xd7, 0x2c, 0xcf, 0x72, 0xc9, 0x66, 0xdf, 0x8e, 0xab, 0x4b, 0x5c, 0x63, 0x38, 0xe7, 0xbd, 0x83, 0x70, 0x8e, 0x7b, 0x0e, 0x7d, 0x73, 0x23, 0xca, 0xe8, 0x9e, 0xfa, 0xcd, 0x11, 0x69, 0x61, 0x6c, 0x86, 0x0f, 0x3c, 0xe1, 0xdc, 0x8a, 0xf3, 0x49, 0xfb, 0x97, 0x06, 0x11, 0x49, 0xf1, 0xcd, 0xfd, 0x09, 0x7f, 0xce, 0xee, 0xf9, 0x90, 0x4d, 0x3a, 0x4e, 0x32, 0xbc, 0x29, 0x93, 0x64, 0xa8, 0xfa, 0xdc, 0x36, 0x7c, 0xbb, 0x27, 0x3a, 0xad, 0xaf, 0x67, 0x79, 0x4e, 0xf9, 0x39, 0xf8, 0xca, 0x51, 0xd2, 0xe9, 0x31, 0x20, 0x95, 0xcc, 0x79, 0xe5, 0xb0, 0xe4, 0xd9, 0x61, 0x15, 0xd2, 0x24, 0xad, 0x71, 0xe9, 0x6c, 0xe3, 0x15, 0x5c, 0xed, 0x68, 0x6b, 0xdc, 0xbe, 0xc7, 0x70, 0x3d, 0x63, 0x91, 0x7c, 0x47, 0x07, 0x30, 0x77, 0x09, 0xe6, 0xbe, 0xb5, 0x27, 0x61, 0x83, 0x7a, 0x09, 0xdb, 0x6f, 0xb7, 0xa9, 0x2b, 0x3e, 0x5a, 0x1d, 0xe3, 0x17, 0x4e, 0xff, 0x53, 0x60, 0xf1, 0x63, 0x7f, 0xf0, 0x2f, 0x87, 0xec, 0xe0, 0xfc, 0xff, 0x62, 0xa3, 0x38, 0xac, 0xe0, 0x9e, 0x8a, 0x6f, 0x1b, 0xc9, 0xf6, 0x8a, 0xfc, 0xd8, 0x62, 0x9b, 0x73, 0x58, 0xa2, 0x7f, 0x0a, 0x72, 0x23, 0xe6, 0xa8, 0x8f, 0x3c, 0xec, 0xcf, 0xa5, 0xb3, 0x84, 0x6c, 0x8a, 0x7a, 0xd9, 0xa8, 0x6f, 0x33, 0x95, 0x93, 0x57, 0x63, 0xf2, 0xb1, 0x96, 0x64, 0x77, 0x4e, 0xda, 0x5b, 0x8d, 0x06, 0xe1, 0xdf, 0x9a, 0xd6, 0x3f, 0xda, 0x1f, 0xed, 0x0b, 0xba, 0x33, 0x98, 0x7a, 0xb6, 0xf0, 0x9e, 0x39, 0xef, 0xac, 0x31, 0x45, 0xd2, 0xea, 0xc4, 0xd5, 0x76, 0x5d, 0xff, 0x1f, 0x7e, 0x42, 0xd6, 0x58, 0x03, 0x4f, 0xb0, 0x45, 0x97, 0x25, 0x42, 0xbe, 0x0d, 0x4c, 0x51, 0x8b, 0x14, 0x23, 0xcf, 0x1d, 0x16, 0x2f, 0xf6, 0x81, 0x63, 0xec, 0xd2, 0xee, 0xa5, 0x0d, 0xa9, 0x6e, 0xe2, 0x0c, 0xc9, 0xda, 0xc4, 0x5c, 0x2f, 0xba, 0x38, 0xd6, 0x0a, 0xec, 0x6f, 0x93, 0xd6, 0xbe, 0x77, 0x80, 0x9d, 0xf6, 0xbf, 0x29, 0x2e, 0x63, 0xab, 0x8e, 0x4e, 0x63, 0x84, 0x85, 0x69, 0x7c, 0x6f, 0xaf, 0x89, 0x74, 0xce, 0xd8, 0xdb, 0x3a, 0xf9, 0xef, 0xc6, 0xf1, 0xf8, 0x43, 0x16, 0xc1, 0x2d, 0x0e, 0xbd, 0x03, 0xb4, 0x77, 0x8f, 0xab, 0x4c, 0xd9, 0xb1, 0x0a, 0x9a, 0xaa, 0xde, 0xe7, 0x08, 0xd5, 0x95, 0x09, 0xeb, 0x5c, 0xab, 0x0b, 0x16, 0xe3, 0xd7, 0x4d, 0xd6, 0x60, 0xf4, 0x7a, 0x7c, 0x1b, 0x75, 0x35, 0xb3, 0x17, 0x81, 0x1e, 0xd5, 0xe3, 0x3c, 0xf2, 0x4f, 0x9b, 0x1b, 0x1a, 0x25, 0x3d, 0x9d, 0x53, 0xdd, 0xaf, 0x33, 0xf3, 0x2f, 0xa6, 0x9e, 0x2e, 0x79, 0x0a, 0xca, 0xbe, 0xb6, 0x0a, 0xe6, 0x80, 0x1e, 0x7f, 0xfd, 0x1c, 0x89, 0xba, 0x92, 0x28, 0x70, 0xa3, 0xe1, 0x16, 0x1f, 0x48, 0xd1, 0x8b, 0x03, 0x8f, 0x83, 0x2d, 0xf6, 0x14, 0x64, 0xb7, 0x5e, 0xa4, 0xb8, 0x14, 0x56, 0x37, 0xd4, 0xbf, 0xbd, 0x21, 0xd6, 0x49, 0x1e, 0x93, 0x4c, 0x7a, 0x84, 0x49, 0x36, 0x8e, 0xc8, 0xa2, 0x88, 0x11, 0x7c, 0x3a, 0x90, 0x0d, 0x7a, 0xdf, 0xa8, 0x42, 0x6f, 0xa2, 0xd7, 0xd1, 0x57, 0x91, 0x8c, 0x6f, 0x89, 0xb8, 0xa7, 0xab, 0xe5, 0x4a, 0x2c, 0xb5, 0x91, 0x6a, 0xd6, 0x8d, 0xb2, 0xe7, 0xc7, 0xd1, 0x70, 0xf8, 0x16, 0xc4, 0x03, 0x30, 0xde, 0x42, 0xde, 0xbe, 0x32, 0xf0, 0xd7, 0x03, 0x99, 0xb7, 0x50, 0xdc, 0xf3, 0xac, 0x2f, 0xae, 0x82, 0x2f, 0x41, 0x0e, 0xfe, 0xde, 0x08, 0x5f, 0xc4, 0xdf, 0x9b, 0x21, 0x17, 0x7f, 0x6f, 0x81, 0x1b, 0x64, 0x8f, 0x56, 0x86, 0x7c, 0xda, 0xcc, 0xbf, 0x61, 0x2b, 0x7e, 0x11, 0x80, 0x3c, 0x7c, 0xff, 0x0d, 0x98, 0x3e, 0xbe, 0x3c, 0x6d, 0x5f, 0x79, 0x29, 0x61, 0x40, 0xa5, 0x16, 0xad, 0xd3, 0x2b, 0x56, 0xbf, 0xb4, 0xea, 0x75, 0x81, 0xb3, 0x7d, 0x68, 0xe8, 0x3e, 0x3a, 0x0d, 0x40, 0x38, 0x1a, 0x04, 0x1c, 0x03, 0xcd, 0x40, 0x1e, 0x75, 0x0d, 0x02, 0x03, 0x46, 0x7b, 0x58, 0xbb, 0xce, 0x87, 0x92, 0xc6, 0x20, 0x49, 0xd4, 0x0b, 0xce, 0xc7, 0x67, 0x5b, 0x66, 0x5d, 0xff, 0x7f, 0xfb, 0x6c, 0x2b, 0xe0, 0x4c, 0xfd, 0x66, 0xa7, 0x17, 0x94, 0xef, 0x36, 0xcb, 0xb6, 0xaa, 0xf3, 0xca, 0x10, 0x79, 0xd5, 0xec, 0x23, 0x8f, 0x35, 0x34, 0x3e, 0x92, 0x3b, 0x43, 0x78, 0x5f, 0x53, 0x4f, 0xa9, 0x4d, 0x36, 0xbf, 0x2d, 0x2b, 0x3c, 0xf4, 0xe0, 0x4b, 0x89, 0x32, 0xce, 0x9c, 0xaf, 0xdf, 0xcc, 0x9e, 0x67, 0x8c, 0xa1, 0xdd, 0xe0, 0x91, 0x1b, 0xdd, 0x69, 0x74, 0x66, 0xa1, 0xf2, 0xbc, 0x47, 0xf1, 0xfd, 0x7b, 0x36, 0xed, 0xdc, 0x22, 0x10, 0xd5, 0xd1, 0x9c, 0x66, 0x6d, 0x86, 0x16, 0x65, 0x48, 0x8c, 0xfc, 0x77, 0x77, 0xcc, 0xbb, 0x90, 0x4c, 0x01, 0xce, 0xf4, 0x94, 0x5f, 0x80, 0x33, 0x29, 0xb3, 0x3e, 0x23, 0xe9, 0x2d, 0x47, 0x07, 0x94, 0x32, 0x54, 0xca, 0xe2, 0x55, 0xf6, 0x0b, 0x99, 0xe2, 0x4a, 0xa9, 0x26, 0x53, 0x68, 0xfb, 0x02, 0x85, 0x28, 0xdd, 0x48, 0xf3, 0x9c, 0x0e, 0x96, 0xa9, 0x9c, 0x57, 0x7c, 0xd6, 0x79, 0x48, 0xc9, 0xda, 0x5c, 0xa6, 0xdb, 0xd6, 0xdb, 0x4d, 0xf5, 0x6b, 0xdb, 0x26, 0x1f, 0xef, 0x41, 0x29, 0xa3, 0x07, 0x57, 0xe6, 0x3d, 0x0b, 0xce, 0x81, 0xb9, 0xe2, 0x1c, 0x4c, 0x2d, 0xa8, 0x19, 0xf6, 0x56, 0x9d, 0x83, 0x4c, 0xbc, 0xbf, 0x0e, 0xa9, 0x86, 0x05, 0xa9, 0x65, 0x47, 0x41, 0x87, 0x2e, 0x76, 0xe3, 0x45, 0x25, 0x86, 0xb4, 0xb2, 0xbb, 0xa0, 0x03, 0x40, 0x1f, 0x53, 0x7a, 0x54, 0x3d, 0x09, 0xd0, 0xf7, 0x2a, 0xbd, 0x48, 0x79, 0xb7, 0xf1, 0xfd, 0x45, 0x65, 0x07, 0xeb, 0x03, 0xe0, 0x7d, 0x9a, 0xa4, 0x3c, 0xa2, 0x6a, 0xa4, 0x80, 0xee, 0xb4, 0xb2, 0xab, 0xa0, 0x65, 0xd8, 0xcb, 0x1a, 0x01, 0xa0, 0x3b, 0xaf, 0xf4, 0xa1, 0x14, 0xbe, 0x8f, 0xef, 0x2f, 0x28, 0xfb, 0x91, 0x16, 0x1f, 0xe0, 0xaf, 0xa7, 0xe2, 0x1a, 0x01, 0xe5, 0x67, 0xd6, 0x1a, 0xf8, 0x17, 0xb1, 0x1f, 0x8d, 0x7f, 0x83, 0xd8, 0x02, 0x5b, 0x41, 0x87, 0x7e, 0xc6, 0x37, 0x41, 0x71, 0x60, 0x0b, 0x5c, 0x6a, 0xe9, 0x1e, 0x6c, 0x41, 0x31, 0xdf, 0x97, 0x2a, 0xa5, 0xd8, 0x02, 0x2f, 0xdf, 0xc7, 0x14, 0x1f, 0xb6, 0xa0, 0x92, 0xee, 0x0d, 0xa0, 0x04, 0xb0, 0x05, 0xb5, 0x5c, 0x76, 0x83, 0x52, 0xcf, 0x2d, 0x58, 0xc4, 0x4f, 0xdf, 0x51, 0x1a, 0xb0, 0x05, 0x4b, 0xf9, 0xfe, 0xbb, 0x8a, 0x8c, 0x2d, 0x68, 0xe4, 0xfb, 0xef, 0x2b, 0x4d, 0xd8, 0x82, 0x66, 0x6e, 0xc1, 0x2f, 0x95, 0x28, 0xd6, 0xde, 0x86, 0x7f, 0xed, 0x05, 0xd5, 0xa3, 0x47, 0x0a, 0x3a, 0xd2, 0x7e, 0x77, 0xcc, 0x37, 0x8a, 0xfc, 0x62, 0xf4, 0xb8, 0x28, 0x7d, 0x74, 0xa8, 0xc0, 0x3f, 0x7a, 0x8a, 0xef, 0x73, 0x47, 0x4f, 0x17, 0x94, 0x8f, 0x9e, 0xe5, 0xfb, 0x47, 0x46, 0xcf, 0x15, 0xf8, 0x46, 0x2f, 0xd0, 0x7d, 0xba, 0x6f, 0xf4, 0x62, 0x41, 0xdd, 0xe8, 0x25, 0x6e, 0x19, 0x8c, 0x5e, 0xa6, 0x16, 0x8c, 0x0e, 0xf3, 0x53, 0x9a, 0x02, 0xd8, 0x02, 0x03, 0xdf, 0x4f, 0x56, 0x4c, 0xd8, 0x02, 0x33, 0xdf, 0xdb, 0x15, 0x0b, 0xb6, 0x20, 0x9b, 0x5b, 0xf0, 0xbc, 0x92, 0x8b, 0xb5, 0xe7, 0xe3, 0x9f, 0x84, 0x2d, 0x68, 0x2b, 0xe8, 0x30, 0x1c, 0xda, 0x07, 0xa3, 0xed, 0xd8, 0x82, 0x0e, 0xae, 0x29, 0x36, 0x1a, 0xc3, 0x16, 0xf0, 0x88, 0x18, 0x06, 0x46, 0x7b, 0xb0, 0x05, 0x3c, 0x22, 0xe9, 0x9e, 0xd1, 0x5e, 0x6c, 0x01, 0x8f, 0x48, 0x7a, 0xdf, 0xe8, 0x0e, 0x6c, 0x81, 0x18, 0x11, 0x79, 0xf4, 0x11, 0x6e, 0x01, 0x8f, 0x49, 0x5a, 0x78, 0x74, 0x57, 0x41, 0x70, 0x94, 0x47, 0x24, 0xed, 0xce, 0xd1, 0xbe, 0x82, 0x9a, 0x51, 0x1e, 0x91, 0xb4, 0x6d, 0xa3, 0xfb, 0x0b, 0x02, 0xa3, 0xac, 0x09, 0xf2, 0xa3, 0x13, 0xa3, 0x03, 0xfe, 0x27, 0x46, 0x0f, 0xe1, 0xdf, 0x61, 0x6c, 0x41, 0x7e, 0x41, 0x87, 0xf1, 0x87, 0x72, 0x6c, 0x54, 0xc2, 0x16, 0xd8, 0xb8, 0x74, 0x18, 0x75, 0x60, 0x0b, 0x78, 0x44, 0xd2, 0xeb, 0x47, 0x3d, 0xd8, 0x02, 0x1e, 0x91, 0xf4, 0xa1, 0xd1, 0x52, 0x6c, 0x01, 0x8f, 0x88, 0xb1, 0x6f, 0xd4, 0x87, 0x2d, 0x50, 0x47, 0x64, 0x34, 0xc0, 0x2d, 0xe0, 0x31, 0x31, 0xe8, 0x46, 0xeb, 0xb1, 0x05, 0x3c, 0x22, 0x06, 0xc3, 0x68, 0x03, 0xb6, 0x80, 0x47, 0xc4, 0x60, 0x1b, 0x95, 0xb1, 0x05, 0x8d, 0xdc, 0x82, 0xb7, 0x46, 0x9b, 0xb0, 0xf6, 0x66, 0xfc, 0x8b, 0x16, 0x54, 0x8f, 0x20, 0x6e, 0x4c, 0xae, 0xcd, 0xed, 0x1b, 0x39, 0x5c, 0x50, 0x31, 0x72, 0x84, 0x4b, 0xf7, 0x8d, 0xe0, 0x3a, 0x72, 0x84, 0x47, 0xc4, 0x28, 0x8f, 0x0c, 0x15, 0x94, 0x8f, 0xf0, 0x88, 0x4c, 0x82, 0x91, 0xd3, 0x05, 0xbe, 0x11, 0x1e, 0x11, 0x13, 0x8c, 0x9c, 0x2b, 0xa8, 0x1b, 0xe1, 0x11, 0x31, 0xf4, 0x8d, 0x5c, 0xa4, 0x16, 0x8c, 0xf0, 0x98, 0x18, 0xfa, 0x47, 0x2e, 0x17, 0x04, 0x47, 0x78, 0x44, 0x0c, 0x07, 0x47, 0x01, 0x5b, 0xc0, 0x23, 0x62, 0xf8, 0x78, 0xd4, 0x84, 0x2d, 0x30, 0x73, 0x0b, 0x3e, 0x19, 0xb5, 0x60, 0xed, 0xd9, 0xf8, 0x97, 0x8b, 0x2d, 0x40, 0xdc, 0x30, 0x5c, 0x79, 0xc0, 0x32, 0x12, 0xc5, 0x16, 0xb4, 0x09, 0x18, 0x8c, 0xb4, 0x63, 0x0b, 0x3a, 0xc4, 0x78, 0x8f, 0xc4, 0xb0, 0x05, 0x3c, 0x22, 0xe9, 0x87, 0x47, 0x50, 0x66, 0x1d, 0xe1, 0x11, 0x31, 0xf6, 0x8e, 0xf4, 0x62, 0x0b, 0xb6, 0x09, 0xcc, 0x1d, 0xd9, 0xc1, 0x2d, 0x10, 0x63, 0x72, 0xd3, 0xc8, 0x23, 0xd8, 0x02, 0x31, 0x22, 0xb6, 0x91, 0x5d, 0x05, 0x35, 0x23, 0x62, 0x44, 0xbc, 0x23, 0x7d, 0x05, 0x81, 0x11, 0x1a, 0x91, 0xe1, 0x9d, 0x53, 0x46, 0xf6, 0xfb, 0x9f, 0x18, 0x39, 0x80, 0x7f, 0x03, 0xd8, 0x02, 0xc4, 0x0d, 0x63, 0xc3, 0xce, 0xe8, 0x48, 0x2e, 0xb6, 0x20, 0x9f, 0x6b, 0x7a, 0x64, 0x44, 0xc2, 0x16, 0x88, 0x11, 0xb9, 0x38, 0xe2, 0xc0, 0x16, 0xf0, 0x88, 0x18, 0x7b, 0x46, 0x3c, 0xd8, 0x02, 0x1e, 0x91, 0x49, 0xd1, 0x91, 0x52, 0x6c, 0x81, 0x98, 0x23, 0xdd, 0x23, 0x3e, 0x6e, 0x01, 0x8f, 0x49, 0xda, 0xba, 0x91, 0x00, 0xb6, 0x80, 0x47, 0x24, 0xad, 0x67, 0xa4, 0x1e, 0x5b, 0xc0, 0x23, 0x92, 0xf6, 0xe8, 0x48, 0x03, 0xb6, 0x60, 0x29, 0xb7, 0x20, 0x7f, 0x44, 0xc6, 0xda, 0x1b, 0xf1, 0xaf, 0xa9, 0xa0, 0x7a, 0x18, 0x71, 0xc3, 0xf4, 0xfc, 0xac, 0x47, 0x86, 0x71, 0x45, 0x3f, 0x7c, 0x48, 0xf4, 0x6f, 0xf8, 0x70, 0x81, 0x7f, 0x58, 0x8c, 0xc8, 0xe5, 0xe1, 0xc1, 0x82, 0xf2, 0x61, 0x1e, 0x91, 0x49, 0x7d, 0xc3, 0x28, 0x8f, 0x0d, 0xf3, 0x88, 0x98, 0x06, 0x87, 0x4f, 0x17, 0xd4, 0x0d, 0x8b, 0x39, 0x92, 0x37, 0x7c, 0x8e, 0x5a, 0x30, 0x2c, 0xc6, 0xe4, 0x4b, 0xc3, 0x17, 0x0b, 0x82, 0xc3, 0x62, 0x44, 0xa6, 0x0f, 0x5f, 0x46, 0x0a, 0x24, 0x46, 0x64, 0xee, 0x08, 0x60, 0x0b, 0x0c, 0xdc, 0x82, 0x59, 0x23, 0x26, 0xac, 0xdd, 0x8c, 0x7f, 0x48, 0x91, 0x86, 0x11, 0x37, 0x32, 0xbe, 0xf1, 0xbc, 0x6f, 0xb8, 0x09, 0x5b, 0xd0, 0xcc, 0x35, 0xc5, 0x86, 0xa3, 0xd8, 0x82, 0x36, 0x31, 0xde, 0xc3, 0xed, 0xd8, 0x02, 0x1e, 0x11, 0xd3, 0xe1, 0x61, 0x5c, 0xd5, 0x0d, 0xf3, 0x88, 0x64, 0x58, 0x86, 0x7b, 0xb0, 0x05, 0x3c, 0x22, 0x86, 0xd2, 0xe1, 0x5e, 0x6e, 0x01, 0x8f, 0x89, 0x61, 0xf6, 0xf0, 0x0e, 0x6c, 0x01, 0x8f, 0x88, 0xc1, 0x37, 0xfc, 0x08, 0xb6, 0x80, 0x47, 0xc4, 0x20, 0x0f, 0xef, 0x2a, 0x08, 0x0c, 0xb3, 0x1e, 0xd3, 0xce, 0xb9, 0xc3, 0x7d, 0xfe, 0x27, 0x86, 0xf7, 0xe1, 0xdf, 0x7e, 0x6c, 0x01, 0xe2, 0xc6, 0xe4, 0x59, 0x27, 0x63, 0xc3, 0x16, 0x6c, 0x41, 0xb6, 0xda, 0x82, 0x5c, 0x6c, 0x41, 0xbe, 0xda, 0x6f, 0x09, 0x5b, 0xc0, 0x23, 0x32, 0x69, 0x70, 0xd8, 0x81, 0x2d, 0xe0, 0x11, 0x31, 0x49, 0xc3, 0x1e, 0x6c, 0x41, 0xb1, 0xc0, 0xc4, 0xe1, 0x52, 0xbe, 0xfe, 0x62, 0xd8, 0x87, 0x75, 0x8b, 0xf9, 0xf1, 0x6f, 0xc3, 0x01, 0xac, 0x5b, 0xcc, 0x8e, 0x57, 0x86, 0xeb, 0xb1, 0xee, 0x45, 0x5c, 0xf7, 0x37, 0x87, 0x1b, 0xb0, 0xde, 0xa5, 0xf8, 0x27, 0x4b, 0xf3, 0x48, 0xba, 0x21, 0x6d, 0xab, 0x4f, 0xf7, 0x54, 0xbc, 0x8b, 0xb4, 0xb9, 0xe6, 0xd3, 0x3e, 0xbc, 0xdf, 0x57, 0xfe, 0x2e, 0x52, 0xc9, 0xc0, 0xa7, 0xfb, 0xf1, 0xfe, 0x40, 0xc5, 0xbb, 0x48, 0xaf, 0x6a, 0x3e, 0x1d, 0xc0, 0xfb, 0x43, 0xe5, 0xef, 0x22, 0xe5, 0x08, 0x7c, 0x7a, 0x18, 0xef, 0x8f, 0x60, 0x7a, 0x3e, 0xa6, 0x0f, 0xe2, 0xfd, 0xf1, 0xf2, 0x77, 0x71, 0x36, 0x05, 0x3e, 0xc5, 0xf1, 0xf9, 0xf4, 0x54, 0xc5, 0xbb, 0x88, 0xd7, 0x35, 0x9f, 0xe2, 0x8c, 0xf9, 0xf4, 0x2c, 0xa6, 0x67, 0x63, 0x3a, 0xd2, 0xb0, 0x4f, 0x2f, 0x54, 0xbc, 0x8b, 0x63, 0x5d, 0xf3, 0xe9, 0x45, 0xbc, 0xbf, 0x54, 0xfe, 0x2e, 0x42, 0x3d, 0xf0, 0xe9, 0x65, 0xbc, 0x1f, 0xc6, 0x74, 0x33, 0xb6, 0x13, 0x68, 0xb5, 0x3a, 0x6c, 0xc0, 0x56, 0x99, 0xc4, 0xbe, 0xb3, 0x14, 0x4c, 0x78, 0x71, 0x10, 0xfc, 0x18, 0x39, 0xdc, 0x71, 0x95, 0x23, 0xb7, 0x43, 0x5e, 0xa0, 0xe5, 0x4a, 0xe5, 0x82, 0x2b, 0xa7, 0xf6, 0xd5, 0x6d, 0xc7, 0xa7, 0xeb, 0x03, 0x2d, 0x9f, 0xe6, 0xd7, 0x6d, 0xe7, 0x1d, 0x89, 0x5c, 0x3a, 0x6b, 0x2a, 0x28, 0xff, 0xd4, 0x50, 0x50, 0xfb, 0xa9, 0x49, 0x5a, 0x70, 0x13, 0xf1, 0xfa, 0xfc, 0x36, 0xa0, 0x33, 0xf4, 0x53, 0x1e, 0x97, 0x49, 0x76, 0x52, 0x2e, 0x5c, 0xa5, 0x5f, 0xdf, 0xbb, 0x0b, 0x1a, 0x5b, 0x33, 0x51, 0x1a, 0xc9, 0x15, 0x27, 0x3f, 0x7c, 0x02, 0x94, 0x86, 0x2b, 0x59, 0x93, 0x6c, 0x08, 0xad, 0x95, 0xf5, 0xa1, 0x2e, 0x5c, 0xfd, 0x19, 0x45, 0x64, 0x74, 0xf6, 0xcf, 0x99, 0x2b, 0xf4, 0x1e, 0x87, 0x0d, 0x05, 0x95, 0xc3, 0x26, 0x5c, 0x21, 0x4e, 0x11, 0x1a, 0x71, 0x9f, 0xee, 0xd1, 0xf6, 0xdb, 0x6b, 0xae, 0xfc, 0x36, 0x9f, 0xf3, 0xaf, 0x8d, 0x80, 0x6e, 0x5f, 0x7c, 0x17, 0x7e, 0xdb, 0x8c, 0x0a, 0x28, 0x9a, 0xe1, 0x87, 0x32, 0x49, 0x3f, 0xd8, 0x35, 0x18, 0x4b, 0x8d, 0x0f, 0x8c, 0xfc, 0xbb, 0x04, 0xa5, 0x73, 0xbf, 0x94, 0x36, 0xb8, 0x76, 0x82, 0x77, 0x85, 0x11, 0x87, 0x7a, 0x16, 0x30, 0xa7, 0xe6, 0xca, 0xe9, 0x1e, 0xed, 0x34, 0x23, 0x92, 0x15, 0x3f, 0x21, 0xd0, 0xce, 0x37, 0x2c, 0x6e, 0xe4, 0xcf, 0x24, 0xcb, 0xff, 0xae, 0xa7, 0x7e, 0xb3, 0xdf, 0x2f, 0xeb, 0xdb, 0x74, 0x89, 0x73, 0x80, 0x93, 0xdb, 0xe9, 0x1c, 0x80, 0xfd, 0x31, 0x20, 0x44, 0xe8, 0x7c, 0xa4, 0x70, 0xaa, 0xf1, 0x1e, 0x6c, 0x7b, 0x3e, 0xc5, 0x2c, 0x7c, 0xe1, 0xe9, 0x05, 0x57, 0x4e, 0xee, 0x28, 0x08, 0x5c, 0x29, 0x95, 0x69, 0xd7, 0x84, 0xd7, 0x4f, 0x56, 0xd8, 0xf2, 0x18, 0x34, 0xb6, 0x67, 0xee, 0xef, 0x5c, 0x4e, 0x7e, 0x80, 0xf5, 0x7d, 0x9d, 0x11, 0x73, 0x2e, 0xc2, 0x67, 0x7f, 0x27, 0xca, 0x88, 0x7b, 0xe5, 0x12, 0xda, 0x57, 0xf9, 0x74, 0x97, 0xc3, 0xff, 0xfa, 0xc1, 0xd7, 0x8f, 0xa0, 0xf4, 0x5b, 0x78, 0xf4, 0x88, 0x7b, 0x92, 0x7b, 0x0a, 0x96, 0xe1, 0xb5, 0x56, 0xd7, 0x3d, 0x20, 0xb5, 0x5c, 0xf1, 0xb2, 0x54, 0x5c, 0x88, 0xf5, 0xf6, 0x1d, 0x66, 0x2f, 0x87, 0xa1, 0x2e, 0xb9, 0x9d, 0xbf, 0xca, 0x75, 0x54, 0xbc, 0xfe, 0x1c, 0x7f, 0x55, 0x82, 0x5f, 0xcd, 0xba, 0xe2, 0xa3, 0xb1, 0x44, 0x09, 0x6b, 0x26, 0xec, 0xa2, 0xef, 0x71, 0x1c, 0xb5, 0xaf, 0x4b, 0x58, 0xce, 0xa1, 0xef, 0x1b, 0x71, 0x44, 0xca, 0xb8, 0x4d, 0x6d, 0xed, 0x37, 0x60, 0x9b, 0xb2, 0xde, 0xda, 0x50, 0xf1, 0x51, 0x2e, 0xdc, 0xec, 0xbb, 0x52, 0x79, 0x33, 0x96, 0x79, 0x25, 0x20, 0xe7, 0xf3, 0xdb, 0xf6, 0x76, 0x0b, 0xbe, 0xb5, 0x68, 0x6f, 0x3f, 0xcd, 0xa7, 0xb7, 0x9f, 0x4a, 0x14, 0x3d, 0xea, 0x4a, 0x29, 0xc2, 0xa1, 0x30, 0x7e, 0x0a, 0x9b, 0x97, 0x80, 0xce, 0xeb, 0xed, 0xf5, 0x9b, 0x51, 0x36, 0xb4, 0x24, 0xa5, 0x84, 0xd9, 0x87, 0x28, 0xae, 0xb4, 0xae, 0x58, 0xd4, 0x3d, 0x96, 0x0b, 0xc9, 0x3e, 0xed, 0xb5, 0x53, 0x72, 0x3a, 0xa1, 0xc3, 0x39, 0xd4, 0xc4, 0xfb, 0x3d, 0x17, 0xe8, 0x64, 0x44, 0x3d, 0x21, 0xb9, 0xac, 0x79, 0xba, 0x1f, 0xeb, 0x5d, 0x03, 0xba, 0x1d, 0x3e, 0xd2, 0x5c, 0x48, 0x78, 0x53, 0x1c, 0x39, 0xa6, 0x9e, 0x99, 0x36, 0x36, 0xe0, 0xea, 0x00, 0x57, 0x7d, 0x77, 0xe0, 0xda, 0xa0, 0x42, 0x5d, 0x19, 0x64, 0xa9, 0xf1, 0x22, 0xfa, 0x3f, 0x5e, 0xa9, 0x8e, 0xfc, 0x74, 0xb1, 0x13, 0x13, 0xf7, 0x9e, 0xf1, 0x50, 0x5d, 0xff, 0xd0, 0xa9, 0x99, 0x3e, 0x60, 0xaf, 0x61, 0x61, 0x1b, 0xf9, 0x2b, 0xd9, 0x79, 0x7b, 0x54, 0x27, 0x3c, 0x05, 0xe2, 0x68, 0x03, 0x6b, 0x11, 0x50, 0x3b, 0xa6, 0x0b, 0xa9, 0x53, 0xf5, 0x3a, 0x91, 0xaf, 0x0c, 0xc6, 0x75, 0x1d, 0x55, 0xdf, 0x2b, 0xc2, 0x9f, 0xf7, 0xc8, 0xa2, 0xb1, 0xfe, 0xbc, 0xc5, 0xe9, 0xdc, 0x35, 0x6a, 0xd6, 0x4d, 0xbe, 0x16, 0xcd, 0x3a, 0xcc, 0x7d, 0x89, 0x72, 0x4b, 0xb3, 0xc0, 0xc4, 0xb0, 0xbb, 0xc4, 0xb9, 0x2f, 0xcf, 0x6e, 0x81, 0x1c, 0x65, 0x98, 0x35, 0x9d, 0x46, 0xd5, 0x2f, 0x2f, 0x8d, 0xfb, 0x72, 0x4c, 0x3d, 0x98, 0x3b, 0x8b, 0xbf, 0xc9, 0x89, 0x7f, 0x33, 0xbe, 0xb6, 0x73, 0x5a, 0x6d, 0xf5, 0x54, 0xdb, 0x39, 0xae, 0xed, 0x02, 0xfe, 0x66, 0x2b, 0x17, 0xb9, 0xb6, 0x4b, 0xac, 0x57, 0xf5, 0x31, 0xfe, 0x5a, 0xb9, 0x44, 0xbb, 0x72, 0x05, 0xdf, 0x3a, 0xe2, 0xed, 0x3f, 0x37, 0xae, 0xc4, 0xb3, 0x5a, 0x89, 0xac, 0xad, 0x7a, 0x96, 0x4b, 0x3c, 0xc7, 0x25, 0x52, 0xb9, 0xb9, 0x5c, 0xee, 0x74, 0x2e, 0xd7, 0xca, 0xe5, 0xda, 0xb9, 0x5c, 0x27, 0x97, 0xeb, 0x8a, 0x97, 0x7b, 0x76, 0x62, 0xb8, 0x44, 0xbf, 0xa8, 0xf6, 0x4e, 0x85, 0x0b, 0x97, 0x3b, 0x3c, 0x31, 0x44, 0x84, 0x77, 0x6f, 0x1c, 0x11, 0x3a, 0x71, 0xf4, 0x16, 0xe2, 0x6a, 0xcd, 0xe1, 0x86, 0x80, 0xcb, 0x0d, 0xb5, 0x73, 0x57, 0x41, 0x08, 0x8a, 0x84, 0xa6, 0x8c, 0xdd, 0x70, 0xa2, 0x9b, 0xf6, 0xba, 0xdc, 0x38, 0x87, 0xa7, 0xfa, 0xc4, 0x6e, 0x17, 0xae, 0x53, 0x8c, 0x27, 0xef, 0x21, 0x1f, 0xde, 0x36, 0x38, 0x10, 0x6b, 0x34, 0xda, 0x8c, 0x4c, 0x35, 0xd2, 0x12, 0x7b, 0x5e, 0x2e, 0x68, 0x4d, 0xf2, 0x18, 0x46, 0x91, 0x15, 0xc3, 0x56, 0xda, 0xf7, 0x6a, 0x04, 0xd8, 0x2f, 0xa5, 0x8d, 0x7d, 0x87, 0xd8, 0xfd, 0x13, 0x57, 0x5a, 0x9b, 0xce, 0x53, 0xe9, 0x0e, 0x40, 0xa1, 0x17, 0x57, 0x8f, 0xf2, 0x1a, 0x69, 0xd2, 0x60, 0x57, 0x3f, 0xae, 0x1d, 0x6d, 0xe9, 0xdb, 0xee, 0x09, 0xae, 0x82, 0xa2, 0x08, 0x45, 0xc8, 0x58, 0xe4, 0xf1, 0xbb, 0x29, 0x7e, 0x58, 0x89, 0x67, 0x1e, 0x5e, 0x33, 0xb1, 0xc6, 0xa9, 0xee, 0x29, 0x2a, 0x3e, 0x77, 0xe3, 0x1a, 0x8b, 0x7c, 0x17, 0xda, 0xf0, 0xfd, 0x52, 0xb7, 0x1e, 0xe7, 0xd1, 0x24, 0x5c, 0xf9, 0xaf, 0x82, 0xe6, 0xba, 0x5e, 0x4c, 0x69, 0x52, 0xbf, 0x0c, 0x26, 0x7d, 0x89, 0xab, 0xb6, 0x94, 0xaf, 0x1b, 0xdf, 0x20, 0x0d, 0x3b, 0x6f, 0xff, 0x3d, 0xcb, 0xba, 0xac, 0x0b, 0x24, 0x63, 0xea, 0xfe, 0x89, 0xdf, 0xa7, 0x79, 0xfe, 0x56, 0xe3, 0x81, 0x95, 0xc6, 0x75, 0x06, 0x0b, 0x84, 0xcf, 0xc3, 0x85, 0x31, 0x1b, 0x54, 0x77, 0x0d, 0xee, 0x06, 0xc3, 0xa1, 0x98, 0x38, 0xd9, 0xc4, 0x35, 0xcd, 0xe3, 0xb0, 0x18, 0x67, 0x62, 0x56, 0xcd, 0x95, 0xe1, 0x2b, 0x75, 0xe2, 0x1c, 0xf2, 0x72, 0xd4, 0xac, 0xa5, 0x0a, 0x7d, 0xc1, 0x68, 0x0e, 0xed, 0x64, 0x86, 0x8d, 0x92, 0xfe, 0xcd, 0x1e, 0xf2, 0x85, 0x4e, 0x7b, 0xaf, 0x1a, 0x1c, 0xd9, 0x9e, 0xe1, 0xac, 0x3a, 0xc2, 0xc3, 0x6c, 0x9d, 0x47, 0xfb, 0x0c, 0x49, 0x94, 0xa4, 0x55, 0xc1, 0x75, 0xc7, 0xb0, 0x15, 0xdb, 0xf1, 0x0a, 0x8e, 0x56, 0x8a, 0x46, 0x42, 0xbe, 0x2c, 0x34, 0x17, 0x87, 0xf9, 0xd4, 0x93, 0xf4, 0x17, 0xae, 0x97, 0x8b, 0x5a, 0x0d, 0x94, 0x5f, 0x2e, 0xc2, 0xa7, 0x99, 0x60, 0xc5, 0x9e, 0xf7, 0xd4, 0xf5, 0x0f, 0x77, 0xa8, 0x54, 0x26, 0x3f, 0xa1, 0xd3, 0xd8, 0x3a, 0xe5, 0x18, 0x7d, 0xc3, 0x7a, 0x1a, 0xc3, 0x73, 0x54, 0x8d, 0x07, 0x3a, 0x95, 0xb9, 0xa4, 0xed, 0x50, 0x7c, 0xe3, 0x7d, 0xa2, 0x6d, 0x73, 0xe7, 0x20, 0x8c, 0x2b, 0x71, 0x6e, 0xd7, 0xda, 0x29, 0xfa, 0xd6, 0x64, 0xda, 0x53, 0x23, 0xdf, 0xec, 0xc8, 0x37, 0x79, 0x27, 0x13, 0x39, 0x27, 0xe8, 0xb2, 0x9d, 0x0b, 0x6d, 0xd5, 0xed, 0x60, 0x9d, 0x62, 0xaf, 0x76, 0xd1, 0x6e, 0xfa, 0x05, 0xdb, 0x97, 0x69, 0xff, 0x80, 0x4c, 0xad, 0xcd, 0xfc, 0x1b, 0x36, 0xda, 0xba, 0x30, 0x7d, 0x90, 0x71, 0xe1, 0x25, 0x8e, 0x27, 0xaf, 0x93, 0x7c, 0xf8, 0xab, 0x27, 0x4f, 0x60, 0x51, 0xa8, 0x86, 0x81, 0x2d, 0x2e, 0x9f, 0x53, 0xef, 0xaf, 0x0a, 0x54, 0x9d, 0x5e, 0xc0, 0x7b, 0x0f, 0xf8, 0x99, 0xdf, 0x17, 0xf0, 0xb9, 0xd3, 0x7b, 0x7b, 0xb0, 0x2f, 0xe5, 0x50, 0x8c, 0xb8, 0xe3, 0x75, 0xd7, 0x40, 0x29, 0x71, 0x52, 0x3b, 0x88, 0xfd, 0x09, 0x05, 0x4e, 0xf7, 0x60, 0x8e, 0xa7, 0xf0, 0x0d, 0x9f, 0x1f, 0x15, 0x02, 0x95, 0x85, 0xe3, 0x93, 0xbe, 0xed, 0x7e, 0x84, 0x32, 0x9d, 0x3d, 0x65, 0xe9, 0xbb, 0xa8, 0x05, 0xc7, 0xef, 0x77, 0x82, 0x71, 0x1d, 0x45, 0x88, 0xfd, 0x7d, 0xcf, 0xe0, 0xba, 0x80, 0x2f, 0x30, 0x30, 0xd8, 0x65, 0x4b, 0x33, 0x76, 0x71, 0xca, 0xbd, 0xc7, 0xd7, 0x06, 0xfc, 0x81, 0x83, 0xd8, 0xd3, 0xe2, 0xe3, 0x3d, 0x01, 0xbf, 0xdf, 0x2f, 0xf9, 0x8e, 0x1e, 0x94, 0x26, 0x19, 0x63, 0xfc, 0x76, 0xf3, 0x1b, 0xb1, 0xc0, 0xbc, 0xc0, 0xaf, 0xde, 0x78, 0x0a, 0x4a, 0x7f, 0xbf, 0xf9, 0xe8, 0xaf, 0x6c, 0x3d, 0x08, 0x0d, 0x0f, 0xd2, 0x45, 0x57, 0xa8, 0xbb, 0x61, 0xe3, 0x2f, 0x0e, 0x2d, 0x03, 0x25, 0xcb, 0x6e, 0x74, 0x4d, 0xb1, 0x97, 0x9f, 0xc2, 0x76, 0x50, 0xdc, 0xa7, 0xa3, 0x5b, 0x43, 0x6b, 0x9f, 0x7e, 0x0a, 0xea, 0x97, 0xc3, 0xe8, 0x39, 0xd5, 0x77, 0x71, 0x36, 0xed, 0xc9, 0xcd, 0x2d, 0xb5, 0xbb, 0x39, 0xb2, 0xa6, 0xc7, 0x81, 0x35, 0x61, 0x6d, 0xa5, 0xc4, 0xf9, 0x5d, 0x70, 0x0a, 0xe9, 0xbb, 0xcc, 0x1e, 0xb9, 0xad, 0xf5, 0x65, 0xd7, 0xdb, 0x2a, 0xda, 0x41, 0xb6, 0xcd, 0x71, 0x40, 0xf6, 0xbf, 0xcf, 0x2b, 0x99, 0x57, 0x38, 0xe5, 0xe5, 0x58, 0x70, 0x5e, 0xd8, 0x60, 0xdb, 0x05, 0xe6, 0x33, 0x3d, 0x61, 0xd3, 0xa2, 0x0d, 0x65, 0xd7, 0x7b, 0xbc, 0x31, 0xa0, 0xba, 0xf7, 0x75, 0x2f, 0x1b, 0x3a, 0xb1, 0x1e, 0xbf, 0x33, 0x1d, 0xed, 0x0d, 0x75, 0xfe, 0xdb, 0xb3, 0xcb, 0x0e, 0xd4, 0xfe, 0x2e, 0x7f, 0xf8, 0x73, 0x6b, 0x9a, 0x43, 0x35, 0xd9, 0xea, 0xcb, 0xb2, 0xac, 0x54, 0x93, 0x75, 0x4c, 0x4d, 0xfa, 0xea, 0x07, 0xb8, 0x9e, 0x8d, 0x65, 0x59, 0x6a, 0x3d, 0x1b, 0xb0, 0x9e, 0x93, 0x29, 0xf5, 0x3c, 0x73, 0x4d, 0xf5, 0x54, 0xa7, 0xd4, 0xe3, 0x1c, 0x53, 0x8f, 0x91, 0x7d, 0x0d, 0x19, 0xc8, 0xd7, 0xd0, 0x04, 0xf5, 0x1d, 0x4b, 0xa9, 0xef, 0x69, 0x51, 0x1f, 0x62, 0xe4, 0x45, 0xc2, 0x48, 0xa4, 0x63, 0x3e, 0xac, 0x2b, 0x80, 0xb4, 0xad, 0x5e, 0x32, 0x0d, 0xf6, 0x30, 0x46, 0x96, 0x6a, 0x18, 0x49, 0x1e, 0x95, 0x9d, 0x21, 0x7b, 0xe5, 0x1a, 0xb0, 0x1a, 0x1c, 0x84, 0x8d, 0x4f, 0xe6, 0x3b, 0x41, 0xb2, 0x7c, 0xf9, 0xe7, 0x46, 0x3d, 0xf9, 0x98, 0x56, 0x10, 0xfb, 0x0a, 0x40, 0xe7, 0xf2, 0xd9, 0xa6, 0xe1, 0x95, 0xf0, 0xaf, 0x58, 0xc5, 0x19, 0xa3, 0x44, 0x31, 0x0d, 0xee, 0x67, 0x6c, 0x2b, 0x45, 0x6c, 0x2b, 0x16, 0x98, 0xc6, 0xe9, 0x66, 0xc4, 0xb1, 0x52, 0x0d, 0xc7, 0x38, 0xc5, 0xd2, 0xdb, 0x25, 0x9e, 0x5d, 0x69, 0xc6, 0xf5, 0x02, 0x8b, 0x4e, 0xac, 0x0f, 0x54, 0x04, 0x9e, 0x3b, 0x71, 0x7f, 0xa0, 0xc2, 0x5f, 0xe1, 0x9a, 0xa4, 0xa6, 0x6e, 0x7e, 0x63, 0xbd, 0x8a, 0x3d, 0xc5, 0xbf, 0xdf, 0x7c, 0xe2, 0x1e, 0x17, 0xa8, 0xe9, 0x3d, 0x83, 0xeb, 0x05, 0x16, 0x9e, 0x88, 0xd9, 0x9f, 0x0b, 0xad, 0xa3, 0x58, 0xc5, 0x88, 0x53, 0x9e, 0x9f, 0x3f, 0x8f, 0xf8, 0x54, 0x6f, 0x37, 0x38, 0x74, 0x43, 0x58, 0x23, 0xed, 0x2a, 0x1e, 0xdd, 0xc2, 0xd8, 0x54, 0xbb, 0x1c, 0x14, 0xa7, 0x8a, 0x4d, 0x16, 0x86, 0xbd, 0x44, 0x7a, 0x8f, 0xf8, 0x8d, 0xc3, 0x49, 0xb1, 0x5a, 0x11, 0x27, 0x25, 0xdd, 0x60, 0xa7, 0x03, 0x86, 0x62, 0x51, 0x90, 0xed, 0xb6, 0x7a, 0xab, 0x7f, 0x35, 0xc8, 0x96, 0x7c, 0x07, 0x48, 0xd3, 0xf3, 0xfe, 0xb7, 0xb1, 0x19, 0xc7, 0x35, 0xb4, 0xb6, 0x61, 0xc3, 0xde, 0xb5, 0xcb, 0x2e, 0x1c, 0xef, 0x26, 0x8d, 0xb4, 0xd7, 0x7a, 0x43, 0xb1, 0xfe, 0xd8, 0xb2, 0x13, 0xb5, 0xbf, 0x33, 0x0c, 0x6b, 0xdc, 0x02, 0x21, 0x4b, 0x23, 0xea, 0x43, 0xc8, 0x06, 0x84, 0xe4, 0x89, 0xf0, 0xf1, 0xb4, 0xc1, 0x3c, 0x0d, 0xb2, 0x3f, 0x71, 0x86, 0x1c, 0x08, 0x59, 0xbc, 0x5b, 0x9f, 0x0a, 0xd5, 0x42, 0x8a, 0x97, 0xbd, 0x02, 0x72, 0xc1, 0xe5, 0x5a, 0x01, 0xf9, 0x2a, 0x2c, 0xef, 0x41, 0x08, 0x6d, 0x25, 0xb9, 0xaa, 0xd9, 0x68, 0x64, 0x65, 0xa2, 0xd3, 0x31, 0x9a, 0x4b, 0xfe, 0x79, 0x71, 0x98, 0x7a, 0xc6, 0xe7, 0x18, 0x7c, 0x0a, 0x5c, 0xbf, 0xef, 0x79, 0x23, 0xa6, 0x42, 0xf9, 0xfe, 0xf1, 0x39, 0x16, 0x7c, 0x6c, 0x82, 0x37, 0xee, 0x77, 0xfc, 0x2a, 0xb4, 0xee, 0xe9, 0x75, 0x08, 0xad, 0x76, 0x84, 0x94, 0x47, 0x85, 0x54, 0xd7, 0xbe, 0xa7, 0xa0, 0x12, 0x21, 0xb5, 0x24, 0x89, 0x9a, 0x0f, 0x92, 0x97, 0x33, 0x87, 0x76, 0x0a, 0xd6, 0x2c, 0xe8, 0x2a, 0xed, 0x57, 0xa9, 0xf1, 0x70, 0xcc, 0x98, 0x46, 0xb2, 0x18, 0x38, 0x44, 0x64, 0x46, 0xd0, 0x73, 0x2e, 0x7b, 0x13, 0x34, 0xe3, 0x1a, 0xc2, 0xc2, 0x2b, 0x8c, 0xd3, 0xaa, 0xfd, 0xca, 0x7c, 0xe5, 0x74, 0xd4, 0x42, 0x7c, 0xdd, 0x5e, 0xf1, 0xda, 0x05, 0xa4, 0xc7, 0xca, 0x2d, 0xe5, 0x50, 0x78, 0x8b, 0x0f, 0x65, 0xa4, 0xa9, 0xdf, 0x59, 0x2f, 0x55, 0x4b, 0xbb, 0x85, 0x96, 0x15, 0xc5, 0x1a, 0xb2, 0x36, 0x8f, 0xd1, 0x52, 0x5c, 0x8f, 0x74, 0x3b, 0x0b, 0xef, 0x3a, 0x92, 0x74, 0x14, 0xed, 0x50, 0x08, 0x8b, 0xa1, 0x15, 0xff, 0xcf, 0xc1, 0xbf, 0x3a, 0x44, 0xc4, 0x56, 0x58, 0x09, 0x61, 0x4e, 0x69, 0x85, 0xdb, 0xf8, 0xb7, 0xe4, 0x16, 0xb1, 0xcf, 0x5b, 0xc9, 0x57, 0x93, 0xec, 0xe5, 0xab, 0x59, 0x2e, 0xe6, 0x6b, 0x9e, 0xec, 0xe2, 0xab, 0x55, 0xb6, 0xf1, 0x75, 0xba, 0x9c, 0xcf, 0x3e, 0xdf, 0x2c, 0x72, 0x36, 0x5f, 0xb3, 0x64, 0x33, 0xa7, 0x17, 0xca, 0x06, 0xfb, 0x2e, 0x30, 0x48, 0xd5, 0xae, 0x2a, 0xb2, 0x5a, 0x90, 0x7c, 0x2c, 0xed, 0x2e, 0xc5, 0x55, 0x8f, 0x35, 0x78, 0x27, 0x64, 0x45, 0x44, 0x44, 0x51, 0x8b, 0xea, 0x7b, 0xfc, 0x1c, 0xa6, 0x59, 0x70, 0x5d, 0x90, 0x85, 0xf4, 0xac, 0x90, 0xe3, 0x37, 0x20, 0x09, 0xa5, 0x1e, 0xc5, 0x35, 0x22, 0x71, 0x85, 0xa7, 0x1c, 0x57, 0xcf, 0xda, 0x87, 0x2a, 0x48, 0x23, 0xb2, 0x26, 0x7e, 0xf2, 0x33, 0x98, 0x90, 0x44, 0x78, 0x47, 0x74, 0x67, 0xf0, 0x71, 0x30, 0x84, 0x6d, 0xaa, 0xc6, 0x5d, 0x33, 0x4b, 0xb5, 0x6d, 0x62, 0xf7, 0x9c, 0x34, 0xff, 0x3e, 0x7a, 0xe6, 0x16, 0x4c, 0x67, 0xc8, 0x59, 0x30, 0xa7, 0x29, 0x39, 0x67, 0xaa, 0x8e, 0xe0, 0x47, 0xdb, 0x38, 0xa7, 0x89, 0x73, 0x6e, 0x0d, 0xb7, 0xda, 0x51, 0xaa, 0x96, 0x9b, 0xa3, 0xd6, 0xc1, 0x3d, 0xc8, 0xe5, 0x45, 0xac, 0x78, 0xbf, 0xb5, 0x00, 0xf2, 0x70, 0xe5, 0x64, 0xec, 0xeb, 0x5c, 0x26, 0xc9, 0x8b, 0x70, 0x6c, 0xf2, 0xe4, 0x3a, 0xe1, 0x3b, 0xf2, 0xc7, 0x52, 0xd5, 0xbb, 0xca, 0x69, 0xe1, 0x3b, 0x92, 0x3c, 0x46, 0x86, 0xed, 0x24, 0x15, 0xff, 0xf8, 0x6b, 0x9a, 0x54, 0x4c, 0xb6, 0x59, 0x54, 0x2f, 0x4a, 0x0f, 0x84, 0x13, 0xaa, 0x5c, 0xdc, 0x0e, 0x1c, 0x39, 0xa8, 0x43, 0xd9, 0x43, 0x5c, 0x11, 0x6b, 0xed, 0xc5, 0xd6, 0xdd, 0x09, 0x4e, 0x6e, 0x5d, 0x26, 0xb6, 0xae, 0x11, 0x5b, 0x57, 0x40, 0x3a, 0xe1, 0x97, 0x3e, 0x56, 0xfb, 0xd6, 0x1d, 0x8a, 0x49, 0x15, 0x15, 0xef, 0x40, 0x09, 0x97, 0xdb, 0x85, 0x75, 0x15, 0xd1, 0x1b, 0xa1, 0x09, 0xc0, 0x6f, 0xe6, 0xc4, 0xdf, 0x94, 0x69, 0xdf, 0x2c, 0x12, 0xdf, 0x54, 0xc7, 0xdf, 0xf8, 0xb9, 0x97, 0x38, 0x0e, 0x38, 0x4e, 0x3e, 0x19, 0x94, 0x35, 0x9a, 0x4e, 0xbe, 0x23, 0x49, 0xe7, 0xd9, 0xd5, 0x84, 0xab, 0x8d, 0x5a, 0xf2, 0x03, 0x88, 0x23, 0x29, 0xce, 0x53, 0x49, 0xa6, 0x39, 0x84, 0xdf, 0x65, 0xe3, 0x2a, 0x61, 0x9a, 0x2a, 0xff, 0x6c, 0x23, 0x6f, 0xc4, 0xcf, 0xb5, 0xab, 0xfa, 0xcf, 0xb5, 0xc9, 0xfa, 0xcf, 0x4b, 0x0d, 0x75, 0x47, 0xb5, 0x48, 0x6a, 0x56, 0xd5, 0xef, 0x31, 0xbe, 0xc9, 0xb2, 0x8b, 0xd5, 0x07, 0xf9, 0x98, 0x93, 0xdb, 0xb2, 0xf7, 0x11, 0x06, 0xbf, 0x54, 0xf1, 0xc7, 0x5c, 0xc0, 0x15, 0xee, 0x34, 0x7e, 0x3a, 0x90, 0xa2, 0x01, 0x5d, 0x8c, 0xd8, 0xdb, 0x87, 0xff, 0x1f, 0xc6, 0x25, 0x75, 0x33, 0x12, 0xb8, 0x3e, 0x68, 0x84, 0x8d, 0x9c, 0xd2, 0x07, 0x0d, 0xb0, 0x0b, 0xff, 0x6f, 0x43, 0xaa, 0x4d, 0x3a, 0xcc, 0x8f, 0xd1, 0x99, 0x05, 0x6c, 0x53, 0xef, 0x4d, 0x14, 0x4f, 0x86, 0x35, 0x9d, 0xbf, 0x19, 0x05, 0xcf, 0xf5, 0x52, 0x4c, 0x6e, 0xa7, 0xa7, 0xa2, 0x3b, 0xe8, 0x84, 0x57, 0xbd, 0xcb, 0x92, 0x36, 0xc8, 0xcb, 0x38, 0xff, 0x03, 0xf2, 0x12, 0xf5, 0xbb, 0xe9, 0x72, 0xbd, 0x7a, 0x67, 0x47, 0x4e, 0x23, 0xee, 0xac, 0xb2, 0x57, 0xbd, 0x2b, 0x94, 0x8b, 0xd4, 0x3b, 0xb3, 0xd0, 0xa3, 0xc6, 0xbb, 0x3c, 0x79, 0xba, 0xaa, 0x81, 0x9d, 0x83, 0xd4, 0x5d, 0x78, 0xac, 0x0b, 0xf2, 0x59, 0x50, 0xaa, 0xc7, 0x3a, 0x5e, 0xd3, 0x79, 0xca, 0xec, 0xb3, 0x58, 0xfe, 0x13, 0x11, 0x30, 0x19, 0xce, 0xb4, 0xe3, 0xfd, 0xfa, 0xdb, 0x90, 0x15, 0xdc, 0x83, 0xb8, 0x53, 0x86, 0x54, 0xa4, 0x19, 0xf1, 0xe9, 0x82, 0xa0, 0x11, 0xda, 0xe9, 0x4a, 0x81, 0x5f, 0xb9, 0x80, 0x73, 0x86, 0x64, 0x40, 0x92, 0xd3, 0x2f, 0x6a, 0x98, 0x47, 0x38, 0x87, 0xab, 0x31, 0x3b, 0x9f, 0x39, 0x36, 0xab, 0x23, 0x35, 0x47, 0xca, 0x46, 0x6c, 0x35, 0x93, 0x06, 0x1f, 0x69, 0x01, 0xda, 0x2b, 0xe8, 0xe4, 0xa0, 0x60, 0x05, 0xf4, 0xe2, 0x5a, 0xc1, 0xaf, 0x5c, 0xc4, 0x19, 0x75, 0x09, 0x67, 0xda, 0x65, 0x3a, 0xaf, 0x57, 0x67, 0xd6, 0x85, 0x24, 0xcd, 0x15, 0x3d, 0xaf, 0x44, 0xcd, 0xc2, 0x4b, 0x20, 0xad, 0x10, 0x88, 0xce, 0xb9, 0x04, 0x9d, 0x33, 0x53, 0xcb, 0x1d, 0x77, 0x22, 0xff, 0x75, 0x91, 0x76, 0x61, 0x8e, 0x0b, 0xa6, 0x45, 0xd3, 0xfa, 0xd6, 0x86, 0x4d, 0xed, 0xca, 0xfe, 0x3d, 0x48, 0xe3, 0x56, 0x7b, 0x0a, 0x20, 0xa3, 0x88, 0x24, 0xdb, 0x95, 0x90, 0xd3, 0x3e, 0x79, 0x68, 0x17, 0x6b, 0xd3, 0x5c, 0x9a, 0x8d, 0xb5, 0xcd, 0xf6, 0x29, 0x57, 0x78, 0x35, 0x91, 0x41, 0xde, 0xe7, 0x11, 0x7f, 0xca, 0xea, 0x7a, 0x5d, 0x2e, 0x30, 0x3b, 0x8d, 0xd5, 0xeb, 0x5e, 0xe2, 0x38, 0x30, 0xa6, 0x34, 0x3a, 0x85, 0xb0, 0xc2, 0xc1, 0x2e, 0x8a, 0xc2, 0x83, 0x4f, 0xba, 0x88, 0xc9, 0x01, 0xd5, 0xdd, 0x87, 0xbb, 0xba, 0xba, 0x2b, 0x9f, 0x0b, 0x9b, 0x1c, 0x7a, 0xbc, 0x8f, 0xd1, 0xfd, 0x0a, 0x63, 0xac, 0xab, 0x3a, 0xd6, 0x15, 0xb3, 0xa5, 0x77, 0xaf, 0x3f, 0xd4, 0xd9, 0xbd, 0x2e, 0xb9, 0x56, 0x3b, 0xcd, 0x93, 0xb5, 0x05, 0x15, 0x89, 0x5a, 0xb1, 0xcf, 0xc3, 0xf1, 0x9a, 0x4b, 0xb0, 0xe6, 0x22, 0x31, 0x03, 0xa3, 0x3a, 0x9e, 0x7f, 0x83, 0xaa, 0x54, 0x2a, 0x64, 0x80, 0x55, 0xe0, 0xc3, 0xb5, 0x4c, 0x25, 0xcb, 0x01, 0x48, 0xdf, 0xec, 0xa1, 0x5c, 0xc1, 0x81, 0x0c, 0x50, 0x94, 0xe3, 0x84, 0x2c, 0xd6, 0x07, 0x6e, 0x28, 0x42, 0x19, 0xc2, 0xe3, 0x00, 0x73, 0x91, 0xaf, 0xac, 0xbc, 0xaf, 0xbc, 0xd9, 0x68, 0x9b, 0x6c, 0x5d, 0x20, 0xeb, 0x6d, 0x53, 0xcb, 0x1c, 0xd8, 0x0e, 0x07, 0x64, 0x96, 0x95, 0x7b, 0xd2, 0x03, 0x03, 0x7b, 0xab, 0x9a, 0x0d, 0xd6, 0xa9, 0x28, 0x8b, 0x80, 0x34, 0xb5, 0x0c, 0x61, 0xf6, 0xef, 0x07, 0x5b, 0x40, 0xbf, 0xa5, 0x6c, 0xe1, 0xbf, 0xbf, 0xb8, 0x12, 0xf4, 0x1b, 0x8b, 0xee, 0x04, 0xe3, 0x2f, 0x9e, 0xc5, 0x94, 0x18, 0xde, 0xe9, 0x7f, 0x31, 0x80, 0x69, 0xab, 0x4d, 0x06, 0xd0, 0x89, 0x48, 0xf7, 0x65, 0x3e, 0x3d, 0x7b, 0x7a, 0x6e, 0xd3, 0xbd, 0xb5, 0x9b, 0xe2, 0xf8, 0x94, 0xa5, 0x05, 0x9e, 0x2f, 0xc5, 0xd2, 0xbd, 0x95, 0x45, 0x4d, 0x60, 0xf6, 0x34, 0x41, 0xe6, 0xcf, 0x5f, 0x0e, 0x03, 0x3c, 0xf4, 0x8b, 0xe7, 0x57, 0x65, 0x84, 0x36, 0xa0, 0xfc, 0xea, 0xba, 0x5b, 0x27, 0xaf, 0x59, 0x28, 0xee, 0x14, 0x39, 0xca, 0xed, 0xcc, 0x95, 0x42, 0x4f, 0xd7, 0xb7, 0x34, 0x3c, 0x8d, 0xfd, 0x58, 0x19, 0xda, 0xdf, 0x04, 0xfa, 0x96, 0x5a, 0xfc, 0x35, 0xae, 0xac, 0xf6, 0xe8, 0x07, 0x56, 0x20, 0x1d, 0xce, 0xc1, 0x15, 0xcd, 0x64, 0x84, 0x8a, 0x91, 0x68, 0x05, 0xad, 0x66, 0xe8, 0xa4, 0x48, 0xb6, 0x79, 0xa6, 0x46, 0x6c, 0x33, 0x28, 0x0a, 0x89, 0x61, 0xa2, 0xf7, 0x33, 0x56, 0x21, 0x37, 0x61, 0xdd, 0x9f, 0x33, 0xc1, 0xb0, 0xa1, 0x18, 0x65, 0xab, 0x13, 0xf3, 0x64, 0x23, 0xf9, 0xe8, 0x3c, 0xe6, 0x29, 0xaa, 0xf8, 0xc5, 0xfb, 0xe0, 0x0a, 0xa3, 0x4c, 0xae, 0xdb, 0xfd, 0x8b, 0xe7, 0x29, 0xb2, 0xf1, 0xcf, 0x5f, 0xc6, 0xf6, 0xf5, 0xe0, 0xbc, 0xa0, 0xf6, 0xad, 0x5e, 0x28, 0xee, 0x14, 0xb9, 0x39, 0xa9, 0x7d, 0x8b, 0xb8, 0x7d, 0x75, 0xdc, 0xbe, 0x00, 0xb7, 0xcf, 0xaf, 0xb6, 0x8f, 0xf4, 0xb7, 0xd2, 0x93, 0xeb, 0xaf, 0xdb, 0x2e, 0x5b, 0xb1, 0x75, 0x56, 0xb5, 0x75, 0xe3, 0xde, 0x8e, 0x6f, 0xdb, 0xd0, 0x3c, 0xd9, 0xb0, 0xe0, 0xca, 0x45, 0x28, 0xaa, 0xe4, 0x96, 0xf5, 0x60, 0xcb, 0x2c, 0xd2, 0xe4, 0xde, 0x75, 0x4e, 0x68, 0xd6, 0x57, 0xae, 0x7b, 0xe0, 0xe5, 0x42, 0x13, 0x5e, 0xef, 0xf1, 0xce, 0x0b, 0xc6, 0xfe, 0xee, 0xd9, 0x40, 0x27, 0x94, 0x83, 0x8e, 0x66, 0xd0, 0xdf, 0xe1, 0x18, 0xcc, 0xf5, 0x81, 0x0b, 0x56, 0x21, 0xef, 0x72, 0x3d, 0x53, 0xb5, 0xd2, 0xc4, 0x67, 0xbd, 0x25, 0xb2, 0xc9, 0x5b, 0x55, 0x36, 0xc9, 0xbf, 0x0a, 0x57, 0x92, 0x75, 0x83, 0x2f, 0xcf, 0x0d, 0x40, 0xe9, 0x1c, 0xd3, 0xc3, 0x55, 0x0f, 0x3d, 0x7f, 0xea, 0x65, 0x4c, 0xf3, 0xcc, 0xad, 0x83, 0x32, 0xef, 0x02, 0xe7, 0xfc, 0x92, 0xaa, 0x32, 0x1d, 0x52, 0x9f, 0x87, 0xfb, 0x13, 0x7d, 0x94, 0xb9, 0x8f, 0x4b, 0xb8, 0x8f, 0x8b, 0xb8, 0x8f, 0x75, 0x6a, 0x1f, 0xf3, 0x70, 0xf5, 0x6a, 0xf2, 0x54, 0x50, 0x94, 0xf8, 0xa4, 0x9e, 0xf4, 0xbf, 0x5f, 0x27, 0x3b, 0x3c, 0x99, 0x11, 0x87, 0xe8, 0xe9, 0x55, 0xf2, 0x38, 0x13, 0xfd, 0x0d, 0xce, 0x5b, 0x99, 0x63, 0xa6, 0xd6, 0x96, 0x84, 0x0d, 0x27, 0xaa, 0x64, 0xc3, 0x10, 0xca, 0x7d, 0x6f, 0xa0, 0xdc, 0x2c, 0x67, 0x9c, 0xa8, 0x52, 0xef, 0xcb, 0x34, 0x98, 0x84, 0xb0, 0xad, 0x28, 0x20, 0x79, 0xfa, 0xe6, 0xaf, 0x42, 0x4e, 0x9d, 0x90, 0xfd, 0xb4, 0x59, 0x50, 0x3a, 0xc7, 0xa5, 0xc5, 0xa7, 0xa2, 0xf8, 0x5d, 0x88, 0xfb, 0xc5, 0x4e, 0xc8, 0x28, 0x29, 0x00, 0xcb, 0xd7, 0x3a, 0x14, 0x05, 0x2c, 0xf3, 0x71, 0xf5, 0x29, 0x7b, 0x3d, 0x28, 0x69, 0x15, 0x39, 0xd5, 0x99, 0x9e, 0x41, 0x33, 0xdd, 0x5d, 0xc9, 0x36, 0x30, 0xb6, 0xb9, 0xe5, 0xe0, 0x98, 0xeb, 0x07, 0x27, 0x41, 0x10, 0xaf, 0x85, 0xa4, 0x9d, 0x85, 0xeb, 0x66, 0x55, 0x37, 0x2b, 0xe4, 0xaf, 0xdf, 0xbc, 0x6f, 0x05, 0x64, 0xae, 0x7a, 0xe6, 0x6b, 0x15, 0xe4, 0x23, 0xbf, 0x23, 0x5f, 0xd4, 0x8e, 0x75, 0x0f, 0xa9, 0x33, 0x90, 0xa2, 0x36, 0x2f, 0xc5, 0xba, 0x65, 0xb5, 0x6e, 0xf3, 0x1a, 0x28, 0xd3, 0xcf, 0x17, 0x1a, 0x2e, 0xe9, 0xee, 0xf4, 0xba, 0x07, 0x49, 0xa3, 0x6f, 0xb0, 0x9b, 0x7c, 0x3c, 0xb3, 0x24, 0x59, 0xcb, 0x1a, 0x16, 0x99, 0xc8, 0xa9, 0x81, 0xde, 0x15, 0x02, 0x69, 0x51, 0x21, 0x1d, 0xae, 0x3c, 0xd6, 0x89, 0xbf, 0x01, 0xfc, 0xc6, 0x0d, 0x01, 0x7a, 0xe3, 0x84, 0x93, 0xb1, 0x33, 0xf7, 0xa0, 0xcc, 0xec, 0x7b, 0x38, 0x76, 0xa6, 0x1b, 0xe5, 0xbb, 0xca, 0x1d, 0xeb, 0xdc, 0x0b, 0xa1, 0xfe, 0xc7, 0xbf, 0xe9, 0x80, 0x05, 0x57, 0xde, 0x3d, 0x29, 0x83, 0xbe, 0x2b, 0x88, 0x2b, 0x2c, 0x94, 0x50, 0x76, 0xcd, 0x25, 0xc8, 0x17, 0xe1, 0xfa, 0x1f, 0x47, 0xb9, 0x68, 0x15, 0x14, 0x15, 0x4d, 0x0e, 0x3c, 0x5b, 0x71, 0x31, 0x17, 0xa4, 0x85, 0x45, 0x96, 0xc0, 0xb3, 0x7b, 0x37, 0xac, 0x0c, 0x16, 0x91, 0x15, 0x0c, 0xde, 0xb5, 0xf8, 0xb0, 0xf6, 0x8c, 0x8a, 0x8f, 0x00, 0x70, 0xf6, 0x79, 0x31, 0x55, 0xcf, 0xef, 0x9d, 0x38, 0x4b, 0x8d, 0x3f, 0x7f, 0xb1, 0xc5, 0x3a, 0xb8, 0xc0, 0xe3, 0x73, 0x9b, 0xb0, 0x8c, 0x92, 0x63, 0x07, 0x8b, 0x6a, 0x10, 0x6b, 0xa7, 0xb8, 0xd3, 0x12, 0x38, 0x4b, 0xa3, 0x47, 0xb1, 0xcb, 0x8a, 0x20, 0xf0, 0x2c, 0xae, 0x00, 0x4b, 0xc9, 0x1a, 0xd3, 0xba, 0xb0, 0xe8, 0x7a, 0x2c, 0xa3, 0x07, 0xeb, 0x98, 0xc9, 0x75, 0xf4, 0xb4, 0xf8, 0xe6, 0x52, 0xd4, 0x69, 0xaf, 0x07, 0x47, 0xe4, 0x81, 0xdf, 0x60, 0xaa, 0x9e, 0xdf, 0x3b, 0x91, 0x8b, 0x19, 0x7f, 0x71, 0xb8, 0xc5, 0x8a, 0x0b, 0x73, 0xef, 0x96, 0x05, 0x45, 0xe5, 0xee, 0xc9, 0x83, 0x7e, 0xaa, 0x6d, 0x7c, 0x1d, 0xdc, 0x1f, 0x2f, 0xb6, 0xc2, 0xbb, 0xf5, 0x7d, 0x5c, 0x01, 0x2c, 0xf4, 0x58, 0x02, 0x03, 0x7d, 0x1b, 0x56, 0x2e, 0x22, 0xdd, 0x4a, 0xba, 0x6b, 0x09, 0x72, 0x0d, 0x45, 0xf1, 0xbe, 0x7e, 0x94, 0x0b, 0xf1, 0xbe, 0x14, 0xaa, 0x7d, 0xb1, 0x17, 0x2d, 0x38, 0xf6, 0x3e, 0xbe, 0xc7, 0x5e, 0x20, 0x06, 0xf9, 0x7a, 0x3f, 0xb3, 0x2e, 0x6e, 0x2b, 0xd6, 0x65, 0x5d, 0xe8, 0xb9, 0x1e, 0x6b, 0xe8, 0x59, 0x09, 0x70, 0x85, 0x74, 0x59, 0xe9, 0xbe, 0x05, 0xe0, 0x3d, 0x82, 0x9a, 0xc7, 0x97, 0xd4, 0x1b, 0x80, 0x93, 0x6a, 0x7f, 0x70, 0x4d, 0xdf, 0xcb, 0x50, 0x13, 0xb5, 0x14, 0xf9, 0x26, 0x82, 0x1a, 0xce, 0xb1, 0xdd, 0x1e, 0xdd, 0xe0, 0x0a, 0x2a, 0x05, 0x73, 0xea, 0xf1, 0xce, 0x34, 0x36, 0x27, 0x8d, 0x7f, 0xdd, 0x76, 0x94, 0x3f, 0x02, 0x54, 0x5b, 0x6f, 0xf9, 0x67, 0xe6, 0x5c, 0xca, 0xe5, 0x3a, 0x30, 0x77, 0x71, 0x52, 0xb9, 0xb4, 0xe2, 0xf0, 0x5f, 0x53, 0xb9, 0x13, 0xe6, 0x14, 0x65, 0xe2, 0x1a, 0xbe, 0x96, 0x22, 0xbd, 0x0d, 0xde, 0x13, 0xbc, 0xa7, 0xd9, 0x58, 0x08, 0x6f, 0xac, 0x97, 0xb3, 0x16, 0xfa, 0x77, 0x3e, 0x05, 0x81, 0xde, 0x75, 0xf4, 0x24, 0x70, 0x71, 0x68, 0x7d, 0xe8, 0xbe, 0xa2, 0xa9, 0xc1, 0xee, 0x16, 0x18, 0x59, 0xe3, 0x47, 0x2c, 0x9d, 0x7f, 0xe5, 0x9d, 0x6a, 0xc6, 0x40, 0x8a, 0x12, 0x17, 0xa8, 0x64, 0x3f, 0xe6, 0xde, 0xf2, 0x54, 0x0c, 0x2d, 0xc4, 0x91, 0x7f, 0x18, 0xf3, 0x7a, 0x68, 0xdc, 0x4c, 0x88, 0x43, 0xf3, 0x08, 0x83, 0x24, 0x13, 0xe2, 0x75, 0x21, 0x72, 0xb1, 0x42, 0xc6, 0xd6, 0xd8, 0xca, 0x06, 0x15, 0x5b, 0x63, 0x2d, 0x75, 0x3c, 0xce, 0xa5, 0x08, 0xd9, 0xd2, 0xc0, 0x40, 0x51, 0xdd, 0x2b, 0x03, 0xd2, 0x64, 0x2b, 0xe5, 0x13, 0xa3, 0x10, 0xc3, 0xb1, 0xc6, 0x31, 0xf8, 0xf9, 0x40, 0x8b, 0x9d, 0x72, 0x0c, 0xd6, 0x7d, 0x06, 0xee, 0x3e, 0x98, 0x82, 0xbb, 0xf3, 0x3e, 0x13, 0x73, 0x4b, 0xb1, 0x7d, 0xa5, 0xbd, 0x2f, 0x4f, 0x88, 0xb9, 0xa5, 0x5b, 0xea, 0x3c, 0xe5, 0x6e, 0xd3, 0xe0, 0x78, 0xd8, 0x3d, 0x18, 0xc7, 0x26, 0x9a, 0x83, 0xa5, 0x5b, 0x7f, 0x15, 0xc7, 0xdb, 0x40, 0x1c, 0x6f, 0xe7, 0xd0, 0x08, 0x14, 0xf9, 0x2a, 0xfe, 0x78, 0x1a, 0x26, 0x98, 0x7b, 0x75, 0x2a, 0x16, 0x79, 0x7b, 0xaf, 0x52, 0x3a, 0xb5, 0x1f, 0xb1, 0xf0, 0x57, 0xf1, 0x96, 0x03, 0xbc, 0x11, 0x6f, 0x3b, 0xae, 0xf9, 0x8b, 0x08, 0x4b, 0xcb, 0x7b, 0x5f, 0x9e, 0x43, 0x2d, 0xff, 0xd5, 0x33, 0xf4, 0xfe, 0x99, 0x38, 0x96, 0xee, 0x13, 0x2d, 0xbf, 0x5a, 0xd9, 0x88, 0xa1, 0x5b, 0x3c, 0x99, 0x9f, 0x8d, 0xa1, 0x75, 0x0f, 0x32, 0x06, 0xd5, 0x7d, 0x56, 0x0e, 0xc2, 0xa0, 0xa4, 0x72, 0x26, 0xc6, 0xb3, 0xe4, 0x72, 0xae, 0x92, 0x83, 0xca, 0x59, 0xe8, 0x3f, 0x89, 0x58, 0x47, 0x5a, 0x36, 0x83, 0xdd, 0xc1, 0xee, 0x66, 0x73, 0xa8, 0x8e, 0x70, 0x13, 0xd7, 0xf7, 0xeb, 0x65, 0xbd, 0x03, 0x76, 0xac, 0x0b, 0x21, 0x2e, 0x05, 0xfd, 0xcd, 0x30, 0xb2, 0x53, 0xe5, 0x0c, 0x0e, 0xe2, 0x0c, 0x49, 0xff, 0xc5, 0xd9, 0x44, 0xa9, 0xaa, 0xff, 0x69, 0xd6, 0xf4, 0x3f, 0xc5, 0x1e, 0x20, 0xeb, 0x49, 0x66, 0xd4, 0x5c, 0x39, 0xe7, 0x57, 0x75, 0x38, 0x53, 0xad, 0x32, 0x32, 0x92, 0x6c, 0x9d, 0x2f, 0xc8, 0xa5, 0x7c, 0x36, 0x46, 0xf2, 0x1a, 0xad, 0xfc, 0x2e, 0xa0, 0xac, 0x76, 0x71, 0x76, 0x85, 0xf2, 0x01, 0x9d, 0x69, 0x48, 0x2b, 0xd8, 0xda, 0x38, 0x43, 0xb3, 0x80, 0x93, 0x0c, 0xe4, 0xf1, 0x9b, 0xe2, 0x54, 0x2f, 0x7f, 0x29, 0xd4, 0x55, 0xa2, 0xdf, 0xf7, 0x84, 0x72, 0xb9, 0xd1, 0x10, 0x05, 0xf9, 0x1c, 0x7b, 0x30, 0x3a, 0xae, 0xca, 0x70, 0x83, 0x6a, 0x6c, 0x33, 0xd2, 0x51, 0x6a, 0x44, 0x0e, 0xd2, 0xc4, 0x92, 0x5b, 0x83, 0x13, 0x57, 0xa2, 0x6e, 0x92, 0xe3, 0xd8, 0x96, 0xe2, 0xfc, 0x05, 0xd6, 0xbb, 0x34, 0xb3, 0x65, 0x0f, 0xe8, 0x06, 0x25, 0xd2, 0xb3, 0x83, 0x85, 0x9d, 0xab, 0x75, 0x4f, 0xd3, 0xe9, 0xd3, 0x31, 0x7f, 0xda, 0x82, 0x2b, 0xe7, 0x4c, 0xf3, 0xb5, 0xbd, 0x89, 0xa7, 0x3d, 0x69, 0x08, 0xf9, 0x4c, 0x86, 0xab, 0x01, 0xef, 0xcc, 0x4c, 0xf3, 0xcc, 0x71, 0x7d, 0x68, 0x9a, 0xdf, 0x96, 0x56, 0xfd, 0xde, 0xae, 0x88, 0xab, 0x85, 0xf6, 0x50, 0x75, 0x7b, 0xbb, 0xc2, 0xb7, 0xc9, 0x96, 0xd6, 0x34, 0x4c, 0xb1, 0xe3, 0xb3, 0x01, 0x9f, 0xeb, 0x64, 0x3f, 0xd2, 0x8a, 0x06, 0xa9, 0xdc, 0x12, 0x0b, 0x11, 0x4f, 0x6a, 0xc0, 0x15, 0x05, 0xf2, 0x39, 0x4f, 0x6c, 0xd1, 0x53, 0x78, 0xef, 0xb1, 0x82, 0xbf, 0x3c, 0x50, 0x4e, 0x29, 0x96, 0x4e, 0x2b, 0x9c, 0xde, 0x40, 0x77, 0xd7, 0xa3, 0x2c, 0xc2, 0x57, 0x1f, 0xe8, 0x17, 0x53, 0x2e, 0x3a, 0x0d, 0x69, 0x90, 0x62, 0x0d, 0x78, 0x1f, 0xaa, 0x24, 0x4f, 0x58, 0x7d, 0x95, 0x2b, 0x41, 0x69, 0x74, 0xeb, 0xa9, 0x3d, 0xc4, 0xdd, 0xac, 0x38, 0xea, 0x5b, 0x62, 0xaf, 0xd0, 0xfb, 0x8a, 0xa7, 0x71, 0xa5, 0xd5, 0x0c, 0x70, 0xc9, 0x5f, 0x29, 0x1f, 0x9f, 0x7f, 0x69, 0x08, 0x58, 0xa3, 0xcc, 0xaa, 0xb6, 0xb9, 0xa7, 0xae, 0xff, 0xcd, 0x81, 0x42, 0x88, 0x47, 0x35, 0xd2, 0x79, 0x50, 0x12, 0x39, 0x7a, 0x38, 0x10, 0xed, 0x01, 0x7c, 0x23, 0xdb, 0x00, 0xe9, 0x4c, 0x33, 0xc7, 0x82, 0x02, 0xd8, 0xeb, 0xaf, 0xa0, 0x33, 0xbb, 0x63, 0x0f, 0xaf, 0x59, 0x74, 0x72, 0x73, 0x7b, 0xc3, 0xd0, 0xe6, 0x05, 0x28, 0x47, 0x21, 0x54, 0xba, 0x35, 0x2f, 0x60, 0xf4, 0x2d, 0x42, 0x26, 0x01, 0x23, 0xd2, 0xd0, 0x37, 0x71, 0xb4, 0x90, 0x38, 0x8c, 0xa4, 0xea, 0xba, 0x5e, 0xca, 0x67, 0xfd, 0x02, 0xeb, 0x43, 0xe7, 0x93, 0x3e, 0x34, 0xd6, 0x51, 0x4f, 0x90, 0x70, 0x57, 0xc1, 0x22, 0xa4, 0x75, 0x4b, 0x51, 0x7a, 0x90, 0xdd, 0xf3, 0x70, 0xd5, 0x4b, 0xb3, 0xbd, 0x09, 0x69, 0x5e, 0x73, 0xab, 0x0e, 0xdf, 0x47, 0xf1, 0x1d, 0xf9, 0x8e, 0xb3, 0xb1, 0x14, 0x91, 0x19, 0x97, 0x22, 0x2a, 0xea, 0x37, 0x53, 0x1f, 0x5b, 0x40, 0x69, 0x4f, 0x58, 0x85, 0xfd, 0xa1, 0xbf, 0x7e, 0xb3, 0x8a, 0xb5, 0x9e, 0xab, 0xe2, 0x83, 0x09, 0xf1, 0x01, 0xb1, 0xc2, 0x85, 0x38, 0x11, 0x5c, 0x01, 0xd9, 0xab, 0x40, 0x6f, 0xc0, 0x6b, 0x0e, 0x0a, 0x4f, 0x64, 0x19, 0x94, 0x2b, 0x70, 0xe4, 0xdc, 0xe1, 0x14, 0x1c, 0x39, 0x43, 0x1e, 0x0e, 0x92, 0x70, 0xe4, 0x4d, 0xe7, 0x2c, 0x30, 0xf8, 0xd3, 0x18, 0x32, 0x9e, 0x05, 0x1a, 0xa6, 0x3c, 0x13, 0xd5, 0x63, 0x6e, 0x7b, 0x8b, 0xa9, 0x55, 0xe0, 0x40, 0x26, 0xae, 0x8d, 0xba, 0x22, 0x8e, 0x56, 0xc2, 0x80, 0x7a, 0x0d, 0x03, 0xa2, 0x60, 0xb1, 0x84, 0x3a, 0x65, 0xb3, 0xf6, 0xe4, 0xb1, 0x2c, 0x12, 0x18, 0xe1, 0xa1, 0xf1, 0xa5, 0xb7, 0x01, 0x9f, 0xdf, 0x17, 0x43, 0x4a, 0xd6, 0x0a, 0x59, 0x0e, 0xd0, 0xfd, 0x7e, 0x43, 0xac, 0x73, 0x31, 0xc9, 0xcd, 0x0d, 0x72, 0xa6, 0xf8, 0x46, 0xb2, 0x34, 0x74, 0xca, 0x47, 0x48, 0x93, 0x17, 0x25, 0x43, 0x82, 0x7b, 0x56, 0x1c, 0x37, 0x2d, 0x8c, 0x9b, 0x53, 0x53, 0x21, 0x1f, 0xaa, 0x54, 0xe9, 0x5c, 0x36, 0x63, 0xcc, 0x52, 0x15, 0x63, 0xb6, 0x33, 0xc6, 0x98, 0x93, 0x30, 0x26, 0xa7, 0xd9, 0x80, 0xf8, 0x72, 0xa2, 0xa0, 0x8a, 0x57, 0xd2, 0xef, 0xcd, 0xbf, 0x74, 0x6e, 0x1c, 0xde, 0x9c, 0xed, 0x19, 0x83, 0x37, 0xd9, 0x1a, 0xde, 0x9c, 0x75, 0xa4, 0xe0, 0x4d, 0x9f, 0xbf, 0xa2, 0xa3, 0xe1, 0xd4, 0x66, 0xc6, 0x1a, 0x17, 0x62, 0xcd, 0x95, 0x3f, 0x78, 0x09, 0x6b, 0xe8, 0x0b, 0xaa, 0x35, 0x05, 0x0f, 0x5c, 0x38, 0xee, 0xc5, 0xee, 0x6a, 0xf0, 0xf0, 0x0e, 0x69, 0x15, 0x78, 0xdd, 0xdf, 0x02, 0x1f, 0x8e, 0x3b, 0x9d, 0xeb, 0x04, 0x18, 0x0b, 0x38, 0x6a, 0x07, 0x63, 0x80, 0x21, 0x6e, 0x9b, 0x90, 0xc0, 0xbf, 0x6c, 0x15, 0xff, 0xb2, 0x54, 0xfc, 0xb3, 0xa8, 0xf8, 0x47, 0x96, 0xdf, 0x49, 0xf3, 0x34, 0x54, 0x41, 0x78, 0x41, 0xfd, 0x4c, 0xc5, 0x9a, 0xff, 0xee, 0x4e, 0xc6, 0x1a, 0xa4, 0x6f, 0xfb, 0x49, 0x17, 0xcd, 0xa1, 0x9e, 0xd3, 0xf0, 0xee, 0x1e, 0xb6, 0x18, 0xd7, 0xcf, 0x26, 0xb1, 0x66, 0x26, 0x48, 0x22, 0xd6, 0x58, 0x91, 0x33, 0x20, 0xd6, 0xe8, 0xf3, 0x88, 0xca, 0x05, 0xd6, 0xbc, 0xe5, 0xc0, 0xd6, 0x4c, 0xe5, 0x16, 0x21, 0x47, 0xf0, 0xfa, 0xdc, 0x99, 0xd8, 0x92, 0x2c, 0xbc, 0xa3, 0xf6, 0x64, 0x22, 0x1d, 0x36, 0x23, 0x8c, 0xc8, 0xf7, 0x98, 0x23, 0xe8, 0x0b, 0x83, 0xee, 0xec, 0x6c, 0xb2, 0x75, 0x7e, 0xa1, 0x0d, 0x3c, 0x2d, 0xca, 0x0b, 0x05, 0x01, 0x65, 0x68, 0xc1, 0x3b, 0xca, 0xb0, 0x44, 0xd6, 0x67, 0x3f, 0x75, 0xcd, 0x52, 0x2e, 0x63, 0xd9, 0x96, 0xd5, 0xe0, 0x2d, 0x57, 0x7d, 0x3b, 0x9c, 0x72, 0x05, 0xf0, 0x4d, 0x03, 0xd9, 0xb3, 0xb8, 0xa7, 0x68, 0xf4, 0x1c, 0x69, 0xe6, 0x33, 0xb8, 0x96, 0xef, 0xc7, 0x1e, 0x2c, 0xe1, 0x35, 0x7c, 0xd2, 0x3b, 0xac, 0xcb, 0x26, 0x55, 0x37, 0xac, 0x77, 0xe4, 0x3a, 0x0d, 0xe2, 0xf4, 0x03, 0x31, 0x6b, 0x96, 0x72, 0x41, 0xf2, 0xb5, 0x41, 0xf6, 0x2c, 0xe5, 0x3d, 0x2c, 0xf3, 0x30, 0x3e, 0x5f, 0xc4, 0xfe, 0x1c, 0x91, 0x0c, 0x63, 0xcf, 0x45, 0xb0, 0x3d, 0x07, 0xb5, 0xb3, 0x24, 0x1b, 0xf0, 0x7b, 0xed, 0x4c, 0xe4, 0x09, 0xe5, 0xb0, 0x3b, 0xae, 0x49, 0x2d, 0xce, 0x45, 0x0e, 0xc7, 0xdc, 0xe9, 0x3b, 0x9e, 0x50, 0x8e, 0x08, 0x0d, 0xc6, 0xdb, 0x2d, 0x0e, 0xbd, 0xb1, 0x9b, 0xf7, 0xa2, 0x37, 0x1e, 0xef, 0xe6, 0xf3, 0x8f, 0x16, 0xe5, 0xe0, 0xf1, 0x9e, 0xdf, 0x07, 0x67, 0xfb, 0x95, 0x0b, 0xb6, 0x49, 0xea, 0xd9, 0xc8, 0xe6, 0x37, 0xba, 0x78, 0xff, 0x1a, 0xcb, 0xfb, 0xfd, 0x37, 0x66, 0xcf, 0x53, 0xde, 0xb3, 0x81, 0xfa, 0xa6, 0x67, 0xb0, 0x8b, 0x77, 0xb0, 0xb1, 0xc4, 0xdf, 0x07, 0x88, 0x27, 0x50, 0x9f, 0xda, 0x72, 0x8e, 0xd3, 0x5e, 0x82, 0x5f, 0x39, 0x5d, 0x8e, 0x9c, 0x03, 0xdb, 0x47, 0x1a, 0xdf, 0x0e, 0x69, 0x31, 0xdb, 0xed, 0xaa, 0x3e, 0x29, 0xd4, 0x3d, 0xd8, 0xee, 0x50, 0x17, 0xe5, 0x9b, 0xdd, 0xa2, 0x0c, 0x2a, 0x67, 0xf1, 0xf7, 0x98, 0xf2, 0x26, 0x9d, 0xc1, 0xa6, 0xe6, 0x25, 0x9a, 0x6d, 0x6d, 0x51, 0xfa, 0xad, 0xb3, 0x94, 0x67, 0x3c, 0xe5, 0x83, 0xcf, 0xcd, 0x0e, 0x28, 0x83, 0x52, 0x1a, 0xd6, 0x79, 0x3c, 0xb4, 0x96, 0xac, 0x98, 0x02, 0x07, 0x09, 0x8f, 0xca, 0x2f, 0x3a, 0xe0, 0xe7, 0xb8, 0x32, 0x1f, 0xed, 0xb1, 0xcd, 0x52, 0x4e, 0x49, 0x75, 0x84, 0x07, 0x64, 0x3b, 0x14, 0xea, 0xf2, 0xe2, 0xa8, 0x9d, 0x3a, 0x38, 0xbb, 0x4e, 0x39, 0x86, 0xa5, 0x0c, 0xbd, 0x72, 0x10, 0x71, 0x22, 0x27, 0x30, 0x80, 0x63, 0x9d, 0x45, 0xbb, 0xc8, 0xff, 0x81, 0x2b, 0xfc, 0xd1, 0x32, 0xd6, 0x9c, 0xee, 0xd5, 0x4e, 0x84, 0x03, 0x6f, 0x79, 0x25, 0xb2, 0x98, 0x25, 0x3b, 0x54, 0x5c, 0xc9, 0x23, 0xe6, 0xc0, 0x9e, 0x32, 0x07, 0xe4, 0xe2, 0xf5, 0x51, 0xf3, 0x4c, 0xd2, 0x24, 0x8e, 0x58, 0xc8, 0x8b, 0xc4, 0x6b, 0xab, 0xf1, 0x29, 0x03, 0xa6, 0x85, 0xcd, 0xb2, 0x91, 0x9f, 0xcd, 0xad, 0x3a, 0x8e, 0x3c, 0x3e, 0xfc, 0xda, 0x1b, 0xfe, 0x72, 0x94, 0x7a, 0x2c, 0x25, 0xd0, 0x6c, 0x30, 0x56, 0xc0, 0x75, 0xe7, 0x2a, 0x8a, 0x2b, 0x5e, 0x7d, 0xe9, 0xd5, 0x73, 0x60, 0x2a, 0x08, 0x2a, 0xe7, 0x57, 0x5f, 0x37, 0xb0, 0xb6, 0x04, 0x57, 0x77, 0xa7, 0xff, 0x57, 0x41, 0x05, 0x8e, 0x6f, 0x13, 0x98, 0x95, 0x0f, 0x0a, 0xee, 0x00, 0x83, 0xf2, 0x31, 0xfe, 0x9a, 0x94, 0x2b, 0x41, 0xec, 0x37, 0x45, 0x77, 0x42, 0x88, 0x8e, 0x22, 0x24, 0xce, 0x53, 0x04, 0x0a, 0xd0, 0xd3, 0x8a, 0xa1, 0xa8, 0x0a, 0xff, 0x2a, 0xf1, 0xaf, 0x89, 0x2c, 0xa6, 0x50, 0x72, 0x22, 0x3f, 0x07, 0xb4, 0x83, 0x3d, 0x0b, 0x4c, 0x75, 0xfd, 0x67, 0xc8, 0x1b, 0xa3, 0xa3, 0xf6, 0x5d, 0x83, 0x37, 0xbe, 0x23, 0x34, 0x48, 0xfb, 0x58, 0xbc, 0xf3, 0x3d, 0x4b, 0xcc, 0x0f, 0x5a, 0xa7, 0x09, 0x5a, 0x0a, 0xe7, 0x05, 0x2d, 0x85, 0x33, 0x0b, 0xde, 0x55, 0x2e, 0x21, 0xde, 0x17, 0xd0, 0x1c, 0xd3, 0xb0, 0x92, 0xa2, 0x4a, 0xbe, 0x12, 0xa0, 0x28, 0x92, 0x8c, 0x8d, 0x97, 0x70, 0x5c, 0x4e, 0xe2, 0xf5, 0x63, 0xb2, 0x2f, 0xc6, 0x2b, 0xcd, 0xae, 0x33, 0xac, 0xc9, 0x5f, 0xc0, 0xf0, 0xa8, 0xc4, 0x2b, 0x42, 0x22, 0x52, 0xc9, 0xe5, 0x98, 0x12, 0xe5, 0xa4, 0x94, 0xf0, 0xa6, 0x5a, 0xc2, 0x79, 0xb5, 0x84, 0xf7, 0x78, 0x6c, 0xb1, 0xa6, 0xd7, 0x77, 0xfb, 0x7d, 0x32, 0xdf, 0x0d, 0xd5, 0xc9, 0x46, 0x4e, 0x59, 0x12, 0xd5, 0xf1, 0x3c, 0x3e, 0x56, 0x40, 0x76, 0x86, 0x27, 0xb0, 0xad, 0xb9, 0x8b, 0x9f, 0xfb, 0x12, 0xca, 0x1c, 0x08, 0x91, 0x63, 0x6e, 0xa2, 0x27, 0x53, 0x55, 0x1a, 0x92, 0xc3, 0xbf, 0xd9, 0xfc, 0x8b, 0xf0, 0x28, 0xa6, 0x59, 0x9c, 0x41, 0x3c, 0xad, 0xae, 0xff, 0xf4, 0xa8, 0x80, 0xc8, 0x52, 0xb3, 0xd0, 0x5e, 0x45, 0x3e, 0x43, 0x16, 0x31, 0x73, 0xdc, 0xab, 0xa0, 0x07, 0x79, 0xd8, 0x2a, 0xd8, 0xc4, 0xbc, 0x86, 0xec, 0x1d, 0x68, 0xf5, 0x8a, 0xac, 0x27, 0xfd, 0x4d, 0x9c, 0xcf, 0x4e, 0xbc, 0xbe, 0x61, 0x5e, 0x81, 0x3d, 0xcb, 0x5a, 0xe9, 0x30, 0x3b, 0xb8, 0x87, 0x99, 0x78, 0xa5, 0xb1, 0xce, 0x28, 0xeb, 0x00, 0xbd, 0x6c, 0xfa, 0xf1, 0x6f, 0x64, 0x03, 0xde, 0x11, 0x2c, 0x73, 0x23, 0xa6, 0xd0, 0x02, 0x7e, 0x32, 0x32, 0xcf, 0x5a, 0x41, 0xeb, 0xed, 0xc0, 0x00, 0x8d, 0x32, 0x72, 0x1d, 0x9c, 0x27, 0xa7, 0x7f, 0x8a, 0x50, 0xcf, 0xe3, 0x7d, 0x14, 0x2b, 0xbe, 0xb3, 0x26, 0xb0, 0xc2, 0x53, 0x71, 0xf4, 0xf0, 0x6b, 0x87, 0xef, 0xbe, 0x6e, 0xe0, 0x1e, 0xa7, 0xc8, 0xf9, 0x2f, 0xb2, 0x7e, 0x0d, 0x20, 0x55, 0x0a, 0x40, 0x9d, 0xc7, 0x7f, 0xf4, 0xb0, 0xcd, 0x74, 0xbc, 0x07, 0x7b, 0x92, 0x72, 0x32, 0x6f, 0x87, 0xbe, 0xa7, 0xa0, 0x6e, 0x95, 0x01, 0x57, 0xde, 0x75, 0x09, 0xfa, 0x8e, 0xb9, 0xd2, 0x12, 0x7e, 0x33, 0x6a, 0xae, 0xbc, 0x51, 0x89, 0x52, 0x9d, 0x0f, 0xea, 0x88, 0x33, 0x86, 0x0b, 0x49, 0xf7, 0xbc, 0x6f, 0x6d, 0x04, 0xd2, 0x4d, 0x29, 0x1c, 0xc1, 0xa1, 0x72, 0x84, 0x78, 0xce, 0x08, 0x18, 0xde, 0x5c, 0xad, 0x23, 0x68, 0xdc, 0xd8, 0x04, 0xd3, 0x60, 0x15, 0xeb, 0x97, 0x87, 0xdc, 0x14, 0xed, 0x79, 0xb1, 0xb0, 0x4a, 0x41, 0x09, 0xdf, 0x0e, 0x4b, 0x1c, 0x6e, 0xf0, 0x23, 0x9d, 0x0f, 0xe2, 0x5f, 0x35, 0xae, 0x16, 0x96, 0x60, 0x7b, 0x57, 0x7b, 0xa6, 0x2e, 0xf4, 0xcd, 0xf5, 0x41, 0x93, 0x88, 0xe9, 0xcd, 0xab, 0xfd, 0x35, 0xc8, 0x27, 0xeb, 0x78, 0x27, 0xe9, 0xee, 0xb9, 0x0b, 0xa0, 0xcb, 0x55, 0x21, 0x63, 0xd5, 0x64, 0x07, 0xf2, 0xc0, 0x8b, 0x45, 0x34, 0x4a, 0x93, 0x03, 0xd1, 0x21, 0x41, 0xa1, 0x2e, 0xa2, 0xdc, 0xe8, 0x3b, 0x3a, 0x70, 0xf4, 0x7d, 0x58, 0x81, 0xb9, 0x97, 0xce, 0xb1, 0x30, 0xb4, 0x8c, 0x8e, 0xf9, 0xc5, 0xd3, 0x64, 0x83, 0xdf, 0xff, 0xa3, 0x23, 0xe6, 0x55, 0x58, 0x7b, 0xd7, 0x2a, 0x23, 0xa7, 0x87, 0x50, 0x26, 0xae, 0x46, 0x28, 0x04, 0xc3, 0x01, 0x1c, 0x2d, 0xa2, 0xe6, 0x7a, 0x4c, 0x09, 0xf5, 0x62, 0xca, 0x7f, 0x0c, 0x34, 0xeb, 0x25, 0x21, 0xdd, 0x94, 0x13, 0x7f, 0xc5, 0x7a, 0x6c, 0xee, 0xc9, 0xa2, 0x9f, 0x6e, 0x37, 0xb6, 0xd4, 0x0d, 0x31, 0x5c, 0x43, 0xc5, 0x68, 0x47, 0x57, 0x50, 0xdf, 0xff, 0x22, 0x6e, 0x62, 0xc3, 0xf2, 0xd3, 0xa1, 0x69, 0x19, 0xed, 0x44, 0xaf, 0x82, 0x35, 0x9e, 0xd9, 0x3d, 0x62, 0x57, 0xbb, 0x11, 0xea, 0xa0, 0x14, 0xac, 0x60, 0x86, 0xfb, 0xa5, 0x4a, 0x6b, 0xba, 0x64, 0xf4, 0x57, 0xe8, 0xef, 0xa1, 0xfe, 0x21, 0x1f, 0x5c, 0x2a, 0x83, 0x3e, 0x77, 0xa2, 0x54, 0xdd, 0xfe, 0x09, 0x53, 0x1b, 0x26, 0x4c, 0xd5, 0x4f, 0x94, 0x0a, 0x7b, 0x26, 0x48, 0x5d, 0x44, 0x69, 0x76, 0xe3, 0xd6, 0x17, 0xe3, 0x69, 0xad, 0x65, 0x35, 0xc8, 0x83, 0x8b, 0xb0, 0x1d, 0xf5, 0x0c, 0x17, 0x53, 0xa1, 0xee, 0xe5, 0xae, 0xe0, 0xbc, 0x48, 0x16, 0xae, 0x34, 0x97, 0xbe, 0x1c, 0x8b, 0x18, 0xa4, 0xa7, 0x40, 0x44, 0x28, 0x35, 0x9f, 0xd9, 0x10, 0x36, 0x2d, 0xda, 0x54, 0x9c, 0x5d, 0x84, 0x74, 0xe7, 0x4c, 0x4f, 0xd8, 0xc0, 0x27, 0xad, 0x15, 0x0d, 0x3d, 0xc8, 0x63, 0x1d, 0x2d, 0x07, 0xb1, 0x84, 0xfc, 0x89, 0x4a, 0x08, 0xff, 0x19, 0x25, 0xe8, 0x4e, 0xa6, 0x94, 0x60, 0x51, 0xdb, 0xa0, 0xaf, 0xee, 0xbd, 0x86, 0xef, 0x0f, 0xe1, 0xf7, 0x3b, 0x27, 0xfa, 0x3e, 0x7c, 0xed, 0xdf, 0x2f, 0x49, 0xf9, 0x3e, 0x4f, 0xad, 0xdf, 0x88, 0xa3, 0x1d, 0x92, 0xc9, 0xfa, 0x64, 0xb1, 0xb4, 0xe1, 0x1a, 0x4a, 0xea, 0xa7, 0x7d, 0xc7, 0xab, 0x96, 0xb4, 0x98, 0x4b, 0x0a, 0x5d, 0x6b, 0x49, 0xf0, 0x02, 0xe7, 0xcb, 0x90, 0x74, 0x03, 0x5d, 0x7c, 0x0e, 0xd6, 0x8b, 0x78, 0xda, 0x3a, 0xb0, 0x76, 0xf1, 0xf3, 0x81, 0x75, 0x81, 0xe7, 0x2b, 0xd7, 0xe1, 0x6c, 0xca, 0x82, 0xe8, 0xdd, 0x80, 0x65, 0x16, 0x91, 0x66, 0x8c, 0x3c, 0x27, 0x74, 0x8f, 0x90, 0x8a, 0xdc, 0x93, 0x50, 0x96, 0xf2, 0xbb, 0x6b, 0xa0, 0x5a, 0xe3, 0xe0, 0x83, 0x31, 0xc4, 0xcc, 0xa5, 0x1e, 0xd5, 0x7f, 0x98, 0xa2, 0x0c, 0xac, 0x45, 0x19, 0xb3, 0x0c, 0xbf, 0x9c, 0x43, 0x76, 0x22, 0x51, 0xdd, 0xfb, 0xbb, 0x36, 0xc6, 0x3c, 0x93, 0x42, 0xbe, 0xbe, 0x55, 0x10, 0x6d, 0xd9, 0x8f, 0x5f, 0x16, 0xd1, 0x9e, 0x02, 0xad, 0x98, 0x22, 0x96, 0x93, 0xeb, 0xd8, 0xfa, 0xd0, 0x30, 0x88, 0x57, 0xe7, 0xad, 0x0d, 0x20, 0xad, 0x9b, 0xa0, 0xfd, 0xf7, 0x86, 0x0d, 0xc4, 0x95, 0x42, 0x0b, 0x1a, 0x7a, 0x90, 0x4a, 0x39, 0xfa, 0x16, 0xa0, 0x04, 0xea, 0x77, 0xba, 0xa1, 0xc8, 0xe6, 0x86, 0x60, 0xa8, 0xcb, 0xae, 0xdf, 0x8e, 0xb3, 0xfd, 0x3f, 0x9e, 0x8b, 0x64, 0x20, 0x3c, 0x82, 0xcf, 0x3c, 0x05, 0x77, 0x87, 0x97, 0x60, 0x6f, 0xea, 0x7a, 0x29, 0x95, 0x67, 0x1d, 0xcd, 0x43, 0x95, 0x26, 0x3b, 0xdc, 0xa6, 0x22, 0x37, 0x84, 0x8f, 0xf9, 0xb7, 0xf8, 0x98, 0x6f, 0x8d, 0x9d, 0x85, 0x24, 0xef, 0xb9, 0xa1, 0x1b, 0x5b, 0xdf, 0x9d, 0x98, 0x89, 0x27, 0x59, 0xe6, 0x22, 0xda, 0x22, 0x67, 0x08, 0xea, 0x74, 0xf4, 0xf0, 0x50, 0x0f, 0xb7, 0xd4, 0xf0, 0xda, 0x79, 0x98, 0xfe, 0x1f, 0xcf, 0x85, 0x0d, 0x6e, 0x3f, 0x54, 0xe3, 0x5f, 0x10, 0xfb, 0x16, 0x44, 0x6a, 0xb1, 0xda, 0x19, 0xc0, 0xb2, 0xed, 0x98, 0xdb, 0x79, 0xf4, 0xc5, 0x9f, 0xff, 0x66, 0x25, 0x7c, 0xfa, 0x13, 0xa2, 0x5e, 0xd7, 0xaf, 0x82, 0x55, 0x30, 0x4d, 0xb5, 0x5b, 0xda, 0xe4, 0x26, 0x6b, 0x95, 0x1e, 0x55, 0x6e, 0x6c, 0x90, 0xe1, 0xf5, 0x39, 0xda, 0xbd, 0x76, 0xea, 0x8d, 0x04, 0xbf, 0xd4, 0xe5, 0x06, 0x2f, 0xf2, 0x02, 0x9f, 0xcd, 0xc9, 0x3e, 0x36, 0xd4, 0xb8, 0xba, 0x6c, 0x97, 0xa8, 0xff, 0xd1, 0x11, 0xe2, 0x9b, 0x42, 0x9a, 0xd4, 0x75, 0xa8, 0x6b, 0x90, 0xb6, 0x24, 0x5a, 0xea, 0xd3, 0x64, 0xeb, 0xa1, 0x23, 0xe2, 0x0c, 0xd9, 0x5f, 0xb1, 0xe0, 0xca, 0xeb, 0xc5, 0x64, 0x95, 0x7e, 0xec, 0x22, 0x62, 0x94, 0x33, 0xd8, 0x1d, 0x59, 0xc3, 0x71, 0xc5, 0x8d, 0xd6, 0x4a, 0xc9, 0x2f, 0xdb, 0xf8, 0xd7, 0x8c, 0x9c, 0x31, 0x97, 0x2d, 0xd4, 0x2e, 0x99, 0xc0, 0x63, 0xea, 0xf5, 0xf7, 0x21, 0x1f, 0x6b, 0x39, 0x2f, 0x5b, 0x28, 0xdd, 0x3a, 0x10, 0x4f, 0xb9, 0x78, 0x7c, 0x37, 0x45, 0xb1, 0x07, 0xfd, 0x58, 0x29, 0x9a, 0xf6, 0x0d, 0xe2, 0x52, 0xb4, 0x81, 0xa1, 0x6a, 0x44, 0xc9, 0x85, 0xe1, 0xa9, 0x5a, 0xbd, 0x3b, 0x68, 0xef, 0xcd, 0x7d, 0x27, 0xc2, 0xc1, 0xc3, 0xf5, 0x9b, 0x24, 0xbf, 0xbf, 0x8a, 0x4e, 0xef, 0xf9, 0x3a, 0x47, 0x6b, 0xc1, 0x2d, 0x6d, 0x26, 0xd0, 0xd6, 0x28, 0x5c, 0x6a, 0x3a, 0xad, 0x51, 0xd4, 0x7d, 0x09, 0xa3, 0xb5, 0x45, 0xd8, 0xcd, 0x21, 0x8e, 0xfa, 0x50, 0x3a, 0xaf, 0x62, 0x7b, 0xe2, 0x55, 0xe0, 0xea, 0xa7, 0xd6, 0x1d, 0x10, 0xa5, 0xdc, 0xe2, 0xfb, 0x0b, 0xbf, 0x3f, 0xc8, 0x36, 0x38, 0x06, 0xea, 0xa3, 0x58, 0xdb, 0xb4, 0xc0, 0xe8, 0x31, 0x75, 0xec, 0xbc, 0xb8, 0xd6, 0x2c, 0x15, 0x27, 0xf9, 0x32, 0xbc, 0xb6, 0x5e, 0x3b, 0xd3, 0x47, 0x3e, 0x7e, 0x8a, 0xc6, 0xcd, 0xb5, 0x0a, 0x16, 0xe1, 0x98, 0x2d, 0xc5, 0x55, 0xa2, 0xe9, 0xc6, 0x15, 0xf0, 0x65, 0xf8, 0x4a, 0x62, 0xe4, 0x0a, 0xc9, 0xe7, 0x8e, 0xfe, 0x6e, 0xb2, 0xaa, 0x6a, 0x38, 0xfa, 0x1e, 0x4a, 0x06, 0x01, 0x28, 0x2b, 0x11, 0xeb, 0x81, 0x12, 0x8f, 0x58, 0x0f, 0x14, 0x96, 0xfa, 0x88, 0x03, 0xdb, 0x4d, 0x27, 0x7a, 0xc6, 0xea, 0xbf, 0xd9, 0xe0, 0xdf, 0x10, 0xa7, 0x6d, 0xe6, 0x24, 0x0e, 0x9b, 0x96, 0xec, 0x99, 0x6a, 0xde, 0x95, 0x13, 0x67, 0xea, 0xb6, 0xda, 0x79, 0xac, 0xc3, 0x4e, 0x61, 0xf1, 0xa9, 0x7b, 0x63, 0xc2, 0xf5, 0x96, 0x9a, 0x0b, 0xdf, 0x3f, 0xd3, 0x96, 0xe0, 0xad, 0x73, 0xe3, 0xfc, 0x34, 0x0b, 0x8a, 0x5d, 0x69, 0x6b, 0xa0, 0x1d, 0x90, 0x93, 0x92, 0x8e, 0x93, 0xaf, 0xe2, 0x02, 0x52, 0xf7, 0x1a, 0x5c, 0x53, 0xd5, 0x42, 0x09, 0xf1, 0x8d, 0xfe, 0xee, 0xb0, 0x8f, 0xca, 0x53, 0xf9, 0x5c, 0x59, 0x6f, 0xf7, 0xbe, 0x18, 0xce, 0x37, 0x3d, 0xc3, 0x39, 0x80, 0xb4, 0x42, 0x27, 0xb8, 0xa9, 0x3a, 0xbf, 0xd2, 0x70, 0x66, 0xb5, 0xd1, 0x5e, 0xbf, 0x98, 0x55, 0xaf, 0xd1, 0xae, 0xbd, 0x2d, 0x78, 0x4f, 0xd8, 0xe8, 0xa8, 0xb6, 0x2f, 0x90, 0x57, 0x4b, 0xf4, 0x9b, 0x67, 0xf9, 0x52, 0x9f, 0x1b, 0xbe, 0x12, 0xb1, 0x08, 0x5f, 0x84, 0x8c, 0x83, 0x3e, 0xe9, 0xe7, 0xed, 0x80, 0x73, 0x7f, 0x4a, 0xef, 0x02, 0xc6, 0xba, 0x53, 0xf2, 0x22, 0x35, 0x97, 0x0f, 0xe7, 0x69, 0x19, 0xce, 0x53, 0x71, 0x66, 0xe9, 0xb4, 0xae, 0x64, 0x2d, 0x80, 0x5e, 0xde, 0x1f, 0x09, 0x88, 0x12, 0x68, 0x6f, 0x9f, 0x4f, 0x28, 0x57, 0x41, 0x20, 0x71, 0x42, 0x29, 0xde, 0x39, 0x62, 0x0d, 0x9b, 0xe2, 0xa5, 0xee, 0x71, 0x54, 0x85, 0x36, 0x49, 0x66, 0xea, 0x43, 0xc4, 0xd8, 0x8f, 0x2b, 0xc7, 0x70, 0x03, 0xd2, 0xb1, 0x92, 0x2d, 0xdd, 0xfb, 0x3a, 0x9b, 0xf5, 0xd6, 0xb8, 0xa4, 0x2b, 0xb0, 0xbc, 0x08, 0xe7, 0xe3, 0xb1, 0x23, 0x5b, 0x9e, 0xa5, 0xfd, 0xcc, 0x31, 0x7d, 0x14, 0x14, 0xa4, 0x5d, 0xeb, 0x27, 0xd6, 0xbf, 0xb8, 0xae, 0xff, 0x04, 0xe9, 0xf7, 0x39, 0x5c, 0x69, 0x08, 0xa5, 0x42, 0xa6, 0x21, 0xd9, 0x44, 0x43, 0x4e, 0xf5, 0x20, 0x7e, 0x98, 0x77, 0x9e, 0x87, 0xec, 0xf9, 0x1f, 0x0e, 0xc1, 0x3e, 0xe4, 0x29, 0x0e, 0xb3, 0xd3, 0x6c, 0x4d, 0x3f, 0xf6, 0x14, 0xf8, 0xc8, 0x17, 0x02, 0xc9, 0x8d, 0xe5, 0x7f, 0xec, 0x81, 0x9f, 0x3f, 0x8b, 0x6b, 0x81, 0x6d, 0x2a, 0xfd, 0x98, 0x8b, 0xf4, 0x43, 0xac, 0x3b, 0xd3, 0xea, 0xfa, 0x5f, 0x35, 0xc7, 0xd7, 0x9d, 0x36, 0xd6, 0xbc, 0xa1, 0x9d, 0x0a, 0x0f, 0xd2, 0xc1, 0x62, 0xd2, 0xae, 0xa4, 0x08, 0xdf, 0x9a, 0x2f, 0xc3, 0x88, 0xd1, 0xc5, 0x78, 0xd7, 0x71, 0x95, 0x3d, 0x9b, 0xe3, 0x7b, 0x04, 0x36, 0xf8, 0x2b, 0x6b, 0xae, 0xbc, 0x5a, 0xb7, 0xe0, 0xca, 0xab, 0x77, 0xe3, 0x5c, 0x3c, 0x15, 0x5c, 0x1b, 0x59, 0x96, 0x34, 0xbf, 0x2d, 0xea, 0x1e, 0x41, 0xea, 0x2e, 0x4d, 0x9a, 0x7b, 0x52, 0xca, 0x4e, 0x96, 0x2d, 0xb8, 0x1e, 0xa9, 0x49, 0x05, 0xd2, 0x91, 0x3c, 0xfe, 0x35, 0x48, 0x37, 0x58, 0x34, 0x9a, 0x61, 0x69, 0xf9, 0x40, 0xbe, 0x7b, 0xcc, 0xf3, 0x4a, 0xca, 0xef, 0xa4, 0x59, 0x7f, 0x1b, 0xff, 0x3a, 0x92, 0xea, 0x48, 0x8f, 0xef, 0x96, 0x25, 0xea, 0xd8, 0x96, 0x37, 0xc0, 0x33, 0xd5, 0xd2, 0x4f, 0xdf, 0x1f, 0x93, 0x0b, 0xff, 0xbc, 0xfc, 0x38, 0x9f, 0x4d, 0xa1, 0xca, 0xfd, 0x62, 0xe7, 0x87, 0xbc, 0x40, 0x67, 0xab, 0x73, 0xba, 0x98, 0x62, 0x81, 0x12, 0x34, 0x65, 0x78, 0x65, 0x1f, 0x5d, 0x35, 0xcb, 0x45, 0xd5, 0xbe, 0x31, 0x0b, 0xe9, 0xba, 0x49, 0x72, 0x80, 0x9d, 0xbc, 0xc3, 0xdf, 0x84, 0xeb, 0x22, 0xb0, 0x27, 0x74, 0x11, 0xad, 0xa4, 0x97, 0xf4, 0x4d, 0x84, 0x7e, 0xad, 0x0d, 0x69, 0x5a, 0x59, 0x16, 0xce, 0x64, 0x7d, 0x29, 0xc2, 0x1f, 0xe5, 0x40, 0xa3, 0xbd, 0x09, 0x6c, 0xb6, 0x29, 0xab, 0xaf, 0x3b, 0xb4, 0x96, 0xce, 0x33, 0x69, 0x6f, 0x06, 0x57, 0xd0, 0x0e, 0xf8, 0xa2, 0xd5, 0x6f, 0x4f, 0x27, 0x8d, 0xac, 0x35, 0x90, 0x87, 0xab, 0x39, 0x9b, 0x81, 0xf4, 0xfb, 0xee, 0x86, 0xe9, 0xb8, 0xa2, 0x0b, 0x94, 0xfb, 0xcb, 0x3b, 0x20, 0xdf, 0x01, 0x37, 0x38, 0xa6, 0x98, 0x0c, 0x60, 0x8a, 0x94, 0x38, 0x26, 0x9f, 0xdb, 0x35, 0xb0, 0x0b, 0x32, 0xce, 0x3f, 0xfe, 0xc2, 0x2e, 0x30, 0xc6, 0xd6, 0xbe, 0xb7, 0xfb, 0xd0, 0x2e, 0xc8, 0x8c, 0x75, 0x5d, 0x78, 0xec, 0xe0, 0x2e, 0xc8, 0x8a, 0x75, 0x5a, 0xe1, 0xf7, 0x1b, 0xf4, 0x9d, 0xc4, 0x7f, 0x4f, 0xf7, 0x74, 0xc1, 0x8c, 0x72, 0xd6, 0x5e, 0x18, 0xfd, 0xbc, 0xaf, 0x66, 0xf8, 0x38, 0xdf, 0x09, 0xd2, 0xa4, 0xa4, 0x1e, 0x4a, 0xdf, 0xef, 0xb1, 0x3b, 0x91, 0xb3, 0xb8, 0xeb, 0xc1, 0x63, 0x5f, 0x70, 0xb7, 0xd2, 0xa6, 0xac, 0x06, 0xfd, 0x3a, 0x96, 0xea, 0xaa, 0xa0, 0x58, 0xdf, 0x4d, 0x77, 0xae, 0x4a, 0x51, 0x0f, 0xed, 0xb4, 0x08, 0x8e, 0x4f, 0x5a, 0x97, 0x42, 0xc3, 0xcd, 0x3a, 0xd5, 0x19, 0xb4, 0xf9, 0xe5, 0x65, 0x1d, 0xe0, 0x9d, 0xf6, 0xd0, 0x53, 0xa4, 0xbf, 0xe6, 0xc1, 0xd5, 0x5b, 0xef, 0xfd, 0x6b, 0xa0, 0xac, 0x00, 0x8c, 0x3b, 0x9f, 0x82, 0xd2, 0x76, 0x28, 0x2d, 0x00, 0xfd, 0x0e, 0xd6, 0x8b, 0x14, 0xda, 0x93, 0xaa, 0x1f, 0x0e, 0xa3, 0xb0, 0x5c, 0x38, 0x1e, 0xe3, 0xf3, 0x39, 0x71, 0x67, 0x70, 0x1b, 0xc4, 0x1d, 0xe9, 0x34, 0x3e, 0xd3, 0x75, 0xbb, 0xa1, 0x50, 0x6f, 0xab, 0x08, 0xad, 0x9d, 0xf7, 0x0e, 0x98, 0x9f, 0x7e, 0x0a, 0x3c, 0xcb, 0x77, 0xd8, 0x32, 0x6c, 0x0b, 0x9c, 0xe5, 0x51, 0xa5, 0xef, 0x9e, 0x88, 0x85, 0xf4, 0xfb, 0x8e, 0xc7, 0x8e, 0x77, 0x1d, 0xef, 0x9a, 0xf1, 0x03, 0x87, 0x09, 0x4c, 0xa4, 0x19, 0x4a, 0x9a, 0xe9, 0xa4, 0xad, 0x97, 0xd0, 0x75, 0xa4, 0x15, 0x98, 0xa6, 0x0f, 0x2e, 0x7d, 0xd3, 0xea, 0x00, 0x5b, 0xdb, 0x75, 0x87, 0x3a, 0x49, 0x47, 0x2b, 0xd8, 0x15, 0x5e, 0x6d, 0xd2, 0x21, 0xac, 0x33, 0x69, 0xff, 0xf4, 0xf7, 0x3d, 0xa2, 0x6f, 0x31, 0x1d, 0x59, 0xe4, 0x5a, 0x01, 0xe1, 0x65, 0xe4, 0x51, 0xcb, 0xf9, 0xc3, 0x63, 0xb4, 0xd3, 0x5a, 0xd4, 0x19, 0x4f, 0xcf, 0xa0, 0xb1, 0x14, 0xa9, 0x5f, 0x29, 0x07, 0x7d, 0x3c, 0x3d, 0x13, 0xd3, 0x73, 0xe3, 0xe9, 0x14, 0xbd, 0xc1, 0x84, 0x63, 0x91, 0xc5, 0x7b, 0x72, 0x37, 0xfc, 0xf7, 0x2e, 0xda, 0x2b, 0xf9, 0x8a, 0x0f, 0x8c, 0x72, 0x11, 0xeb, 0xa8, 0x3b, 0x08, 0xfa, 0xb9, 0xf6, 0xbe, 0xde, 0x46, 0x17, 0x9d, 0x3d, 0x0e, 0x76, 0x12, 0xed, 0xa3, 0x78, 0xf1, 0x83, 0xbb, 0xd8, 0xfb, 0x20, 0x72, 0x7f, 0x61, 0x2b, 0xc9, 0x7a, 0x1a, 0x58, 0xd6, 0x4d, 0xb4, 0x2f, 0x6d, 0x12, 0xf1, 0x30, 0xd8, 0x22, 0x38, 0xae, 0x81, 0x80, 0x52, 0x83, 0xcf, 0x41, 0xda, 0x07, 0xcd, 0x60, 0x46, 0xce, 0xa2, 0xf7, 0x66, 0x09, 0x6a, 0x3e, 0xc7, 0x09, 0x16, 0x84, 0x3f, 0xf6, 0x15, 0x9f, 0x8d, 0x50, 0x2a, 0x28, 0x81, 0xff, 0x67, 0x52, 0xe5, 0xd1, 0x43, 0x44, 0x05, 0x16, 0x5c, 0x19, 0xfc, 0x69, 0xdd, 0xf6, 0xa4, 0xb8, 0x9a, 0x2f, 0x6b, 0x39, 0x44, 0xdc, 0x04, 0x5a, 0x09, 0x31, 0xb5, 0xd8, 0x6e, 0xd3, 0x38, 0xc7, 0xb6, 0xb1, 0x39, 0x02, 0x51, 0x13, 0xbe, 0x77, 0x8a, 0xf7, 0xd3, 0x49, 0x03, 0x4f, 0x51, 0xc4, 0xba, 0x40, 0x9a, 0x27, 0x19, 0xce, 0xf4, 0x54, 0xc6, 0xac, 0x55, 0xad, 0x80, 0x6b, 0x04, 0x97, 0xec, 0x4c, 0xec, 0x9f, 0x0d, 0x56, 0x12, 0x1f, 0xd5, 0x55, 0x0f, 0x76, 0x23, 0xed, 0x72, 0xc9, 0x86, 0xd0, 0xfa, 0xa3, 0xbf, 0xfa, 0xf9, 0x40, 0xcb, 0x65, 0xca, 0x57, 0xf4, 0x42, 0xa8, 0xf3, 0x6e, 0xa0, 0xb6, 0xbb, 0xe6, 0xfd, 0xc7, 0xb3, 0xcb, 0x4e, 0x45, 0x49, 0x35, 0xaf, 0x98, 0xb4, 0x23, 0x0b, 0xa1, 0x15, 0xe8, 0xec, 0xc7, 0x55, 0xee, 0xc8, 0x3c, 0xb3, 0xa9, 0xb2, 0x1b, 0xb1, 0xce, 0x09, 0x99, 0x51, 0x05, 0x31, 0xfa, 0xc8, 0xd0, 0xfd, 0xb2, 0x31, 0x54, 0x41, 0xba, 0x8d, 0xcf, 0x74, 0xb7, 0x7c, 0x8c, 0xf9, 0xd2, 0x08, 0x5f, 0xf7, 0xc6, 0x22, 0xcb, 0x84, 0x3f, 0x47, 0xc9, 0xa7, 0xd1, 0x35, 0xe6, 0x56, 0x24, 0x1f, 0x30, 0xdf, 0x2a, 0x0a, 0xc5, 0x69, 0xf9, 0x14, 0xb7, 0x0b, 0xf3, 0xb5, 0x68, 0xfc, 0x6a, 0xb0, 0xd9, 0xea, 0xe7, 0x5d, 0xe4, 0xaa, 0x28, 0xc8, 0x99, 0x58, 0x62, 0x2e, 0xfb, 0xd8, 0xf8, 0x30, 0x17, 0x42, 0x31, 0xf6, 0xff, 0x62, 0xd9, 0x1b, 0x5b, 0x76, 0x0e, 0x29, 0x7c, 0xa9, 0x78, 0x92, 0xca, 0xe3, 0x35, 0x90, 0xa4, 0x89, 0x2d, 0x3b, 0x56, 0xad, 0xca, 0x9c, 0xe6, 0x78, 0x1d, 0x7a, 0xac, 0xc3, 0x82, 0x7f, 0x26, 0xad, 0x1e, 0xec, 0x57, 0x03, 0xd6, 0x15, 0x0a, 0xad, 0xe7, 0xdd, 0x29, 0x37, 0x78, 0xb8, 0xb4, 0x4c, 0xa9, 0x9c, 0xe2, 0x57, 0x1c, 0xeb, 0xd9, 0xbb, 0x7e, 0x19, 0x28, 0x36, 0x15, 0x72, 0xe9, 0x55, 0x57, 0xfe, 0x33, 0xa3, 0x6e, 0x4b, 0x1c, 0x8e, 0x5b, 0x88, 0xca, 0xa9, 0xd4, 0xac, 0xd2, 0x3d, 0x1f, 0x7c, 0xda, 0xc9, 0xbc, 0x0c, 0x2f, 0x9f, 0x49, 0xd6, 0xd0, 0x94, 0x28, 0xf2, 0x38, 0xc5, 0xec, 0xcc, 0xb7, 0x22, 0x2c, 0xc8, 0x56, 0xa6, 0x31, 0x4c, 0x7a, 0x91, 0x6d, 0xfa, 0x7d, 0xb1, 0xc6, 0xa5, 0xd9, 0x5e, 0xc8, 0xde, 0xd7, 0xb9, 0x7c, 0xd1, 0xbe, 0xd8, 0xf2, 0x7a, 0xa2, 0xa2, 0xe5, 0xe7, 0x8c, 0xf1, 0x58, 0x26, 0x23, 0x47, 0x68, 0xae, 0x7c, 0x3b, 0x66, 0x85, 0xb7, 0x36, 0x48, 0xe5, 0x47, 0x07, 0x08, 0xab, 0x5f, 0x39, 0x5c, 0x7e, 0x71, 0x47, 0xe5, 0xd1, 0xc3, 0xb4, 0x23, 0x8b, 0xf7, 0x7f, 0xec, 0xb1, 0xda, 0x2c, 0xd2, 0x6e, 0x71, 0xae, 0x93, 0xf2, 0xed, 0x0b, 0xb2, 0xbe, 0x4d, 0xd1, 0xe2, 0x91, 0x08, 0x4f, 0xae, 0x14, 0x81, 0x56, 0x3d, 0xff, 0xb1, 0xb3, 0xdf, 0xb1, 0x77, 0x20, 0xab, 0x86, 0xb4, 0x03, 0xca, 0xd8, 0xef, 0x4a, 0x42, 0x4b, 0xd1, 0xc9, 0xe7, 0x22, 0xb1, 0x48, 0xf6, 0x32, 0x3a, 0x21, 0x49, 0xdf, 0x1b, 0x0b, 0xe7, 0xca, 0x96, 0x19, 0x42, 0xff, 0x30, 0x73, 0x86, 0xd0, 0x3f, 0x34, 0xf2, 0x35, 0x4f, 0xaa, 0x15, 0x31, 0x65, 0x59, 0x93, 0x70, 0xbf, 0xf0, 0xf4, 0x4a, 0xf6, 0x0f, 0x13, 0xf9, 0x0d, 0x73, 0x35, 0x61, 0xbd, 0x71, 0xdf, 0x61, 0x28, 0x41, 0x67, 0xd1, 0x89, 0x85, 0xf0, 0xd6, 0xd5, 0xaa, 0x08, 0xdb, 0x16, 0x11, 0x63, 0x9a, 0xec, 0x62, 0x54, 0x5f, 0x30, 0x3d, 0xb7, 0x09, 0x0b, 0x8a, 0x0a, 0xe5, 0x9c, 0xea, 0xdf, 0xe7, 0x82, 0xaa, 0x6f, 0x78, 0x71, 0xbc, 0x95, 0x04, 0xae, 0xaf, 0x56, 0xcf, 0xa8, 0x80, 0x42, 0xb7, 0x7e, 0xf5, 0xa5, 0x13, 0xf7, 0xb9, 0xd3, 0xd4, 0xd3, 0x2c, 0x4d, 0xcb, 0x70, 0x78, 0xc1, 0x95, 0xdf, 0x34, 0xd4, 0x6d, 0x9f, 0xd1, 0xa2, 0x5c, 0xa2, 0x31, 0x14, 0xef, 0xa3, 0x34, 0xeb, 0xdb, 0xc4, 0x7b, 0xf5, 0x9d, 0x89, 0x35, 0xf6, 0xad, 0x83, 0x8f, 0xb3, 0x3e, 0x61, 0x46, 0x5d, 0xff, 0x7f, 0x7e, 0x80, 0xd4, 0x3b, 0xcf, 0xf6, 0x84, 0x72, 0xb9, 0x7e, 0xb3, 0x54, 0x49, 0xfe, 0x34, 0xc5, 0xb9, 0xc3, 0xe8, 0x6e, 0xcd, 0x23, 0xa9, 0x1a, 0x55, 0xe2, 0x30, 0x5b, 0xf5, 0xd3, 0xd9, 0x8f, 0x89, 0xfc, 0x81, 0x93, 0x67, 0x37, 0xda, 0x69, 0x8b, 0x64, 0xb9, 0xb3, 0x54, 0xbf, 0x01, 0x71, 0x1d, 0x3c, 0xdb, 0x53, 0x60, 0x61, 0xff, 0xc6, 0xd9, 0xb6, 0xbf, 0xd3, 0xec, 0x0d, 0x4a, 0x35, 0x1f, 0xc5, 0xac, 0xf9, 0xef, 0xc0, 0x71, 0x62, 0x6f, 0xa6, 0x0b, 0x66, 0x22, 0x65, 0xb7, 0x79, 0x29, 0xdc, 0x92, 0x9c, 0xad, 0xc6, 0xf9, 0xfd, 0xe6, 0x2f, 0xce, 0x41, 0x73, 0xd8, 0x28, 0xf9, 0x10, 0xa2, 0x06, 0x1c, 0x85, 0x4a, 0x35, 0xb2, 0xef, 0x69, 0x9c, 0x4b, 0x13, 0xd9, 0x16, 0xd5, 0x09, 0xcb, 0x22, 0x47, 0x17, 0xdb, 0x99, 0x75, 0xb1, 0xf7, 0xe7, 0x14, 0x7b, 0xb2, 0x99, 0xe4, 0x9b, 0xca, 0xc1, 0xba, 0x90, 0x5e, 0xda, 0x2b, 0x12, 0xde, 0x75, 0xc9, 0x86, 0x46, 0x8b, 0x4d, 0x3b, 0x81, 0x95, 0xd0, 0x29, 0x35, 0x36, 0x6d, 0x8a, 0x46, 0xa2, 0xd0, 0x44, 0xc4, 0xf1, 0x33, 0xb0, 0xdf, 0xd8, 0xe9, 0xd2, 0xb4, 0x04, 0x95, 0x4d, 0xd8, 0x5b, 0xdc, 0xd2, 0xf1, 0xc6, 0x13, 0xcf, 0xbc, 0x0f, 0x86, 0x89, 0x75, 0x11, 0xb9, 0x3e, 0x35, 0x32, 0x8c, 0x95, 0xf8, 0x07, 0xd2, 0x6c, 0xf2, 0x61, 0x81, 0x32, 0xa7, 0x61, 0xef, 0xe3, 0xd8, 0xf3, 0x4c, 0x1c, 0x73, 0x93, 0xb4, 0xd7, 0x04, 0xaa, 0xff, 0xf0, 0x1a, 0xa1, 0xc7, 0x87, 0xb2, 0xb3, 0xd9, 0xda, 0x04, 0x56, 0x4e, 0x3d, 0x2a, 0xbc, 0x48, 0xb0, 0xfd, 0x0b, 0xe9, 0x88, 0x91, 0xff, 0x40, 0xdf, 0x6b, 0xe4, 0x6d, 0xcf, 0xc9, 0xde, 0x11, 0x4d, 0xfb, 0xb6, 0xde, 0xbe, 0x24, 0x09, 0x1e, 0x49, 0x9e, 0x5a, 0xec, 0x14, 0x9f, 0x38, 0x2c, 0x4d, 0xe3, 0x1d, 0xa9, 0x01, 0x95, 0x82, 0x14, 0xb0, 0x24, 0xc8, 0x9c, 0x21, 0xd1, 0x27, 0xea, 0x67, 0x4a, 0xbf, 0x2a, 0xc0, 0x60, 0x27, 0x19, 0xd4, 0x6c, 0xc7, 0x59, 0xee, 0xaa, 0xf8, 0xaf, 0xe7, 0xf0, 0xff, 0xcb, 0xf8, 0xff, 0x1d, 0x4c, 0x47, 0xa9, 0xa8, 0xe6, 0x3d, 0x30, 0xfd, 0xf8, 0x37, 0x6d, 0x80, 0x12, 0x10, 0x9d, 0xcc, 0x5d, 0x24, 0xbe, 0x43, 0xf3, 0x7c, 0xf0, 0x3e, 0x37, 0x04, 0x56, 0x8b, 0xbd, 0xb0, 0xef, 0xee, 0xb0, 0x17, 0xb0, 0x5f, 0x84, 0xb5, 0x2a, 0x07, 0x32, 0x1c, 0xfd, 0x0d, 0xe9, 0xa2, 0xb3, 0x67, 0x86, 0xdd, 0xc8, 0x57, 0x4a, 0x86, 0x00, 0xf9, 0xbc, 0x4b, 0xb9, 0x82, 0x14, 0xcb, 0xa5, 0x0c, 0x23, 0x9d, 0x75, 0x29, 0xa3, 0x81, 0x2a, 0x7f, 0x15, 0x4a, 0x32, 0x05, 0x28, 0xed, 0x54, 0x07, 0x2a, 0xfd, 0x95, 0xf9, 0x64, 0x93, 0x5f, 0x4d, 0xf2, 0x0d, 0x4a, 0x3a, 0x05, 0x28, 0xe9, 0xa0, 0x34, 0x84, 0x69, 0x37, 0x98, 0xd2, 0x90, 0xf3, 0x16, 0xdb, 0x27, 0xbf, 0xf9, 0xc4, 0x4b, 0x8f, 0x43, 0x86, 0xdd, 0xf4, 0xe6, 0x9e, 0xc3, 0x8f, 0x83, 0x71, 0x63, 0xf7, 0x7b, 0x8f, 0x1d, 0x7c, 0x1c, 0x32, 0x37, 0x76, 0x5e, 0xd8, 0x35, 0xf0, 0x38, 0x64, 0x6d, 0x8c, 0x49, 0xe9, 0x1a, 0x67, 0x3e, 0x7d, 0x5f, 0x2c, 0xdd, 0x11, 0x93, 0x6d, 0x9f, 0xff, 0x8d, 0x83, 0x74, 0xd8, 0x8b, 0x6f, 0x5a, 0x84, 0x14, 0x22, 0xc3, 0xd1, 0xcd, 0xf7, 0x95, 0x28, 0x03, 0x76, 0xcd, 0x7f, 0x17, 0xcc, 0x35, 0x17, 0x90, 0x16, 0x20, 0xcf, 0x19, 0xea, 0xda, 0x47, 0x7e, 0xc0, 0x41, 0x31, 0x26, 0x6c, 0x6e, 0x84, 0xd7, 0x8d, 0x64, 0xe9, 0x8f, 0x24, 0x3f, 0xda, 0xaf, 0x40, 0x2e, 0x9d, 0x4d, 0x1e, 0x31, 0x12, 0x38, 0x24, 0x79, 0x4c, 0x26, 0x94, 0x16, 0x15, 0xe1, 0x7d, 0x44, 0xf5, 0x35, 0x92, 0xf5, 0x8a, 0x90, 0x18, 0x0d, 0x7d, 0x0f, 0x34, 0xda, 0xc7, 0x70, 0xf5, 0xc7, 0x98, 0xab, 0x3b, 0x92, 0xb9, 0x3a, 0xf9, 0x2e, 0x21, 0x4e, 0x4e, 0xd1, 0xd7, 0x1d, 0x22, 0x3a, 0x77, 0x3e, 0xed, 0x57, 0x93, 0x86, 0x27, 0xe2, 0x9e, 0x1b, 0xf1, 0x51, 0xd5, 0x08, 0xb7, 0x69, 0x33, 0xa8, 0x08, 0x71, 0xe1, 0x02, 0x64, 0x45, 0x75, 0xe4, 0x4d, 0xcb, 0xbf, 0x0b, 0x4c, 0x62, 0xf5, 0x86, 0xbf, 0x7a, 0xc8, 0x8e, 0x2a, 0x98, 0x6a, 0xbe, 0x95, 0x35, 0xae, 0xa4, 0x20, 0xe1, 0x04, 0x79, 0x15, 0xd4, 0x62, 0x98, 0x53, 0x0c, 0x6f, 0xa9, 0x84, 0xeb, 0x48, 0xd0, 0x5f, 0x89, 0xa8, 0xe0, 0xfc, 0xf7, 0xd9, 0x3f, 0x8b, 0x8d, 0x62, 0x79, 0xcb, 0xcd, 0x71, 0x3a, 0xdc, 0xd4, 0x9a, 0x81, 0x74, 0x78, 0xe9, 0xb7, 0x62, 0x48, 0x7f, 0x4d, 0x78, 0x17, 0x4a, 0xd2, 0xb2, 0xcd, 0x82, 0x3c, 0xb0, 0x42, 0x00, 0x9c, 0x50, 0x04, 0x65, 0x78, 0xf5, 0xab, 0x94, 0xb9, 0x50, 0xa5, 0xcc, 0xf6, 0x2f, 0x34, 0xc1, 0x24, 0x98, 0x26, 0x4f, 0x9f, 0x21, 0x34, 0xc4, 0x73, 0xbe, 0x2a, 0x34, 0xc1, 0x33, 0x39, 0x3d, 0x4b, 0x36, 0xf2, 0x35, 0x5b, 0x8b, 0x06, 0xce, 0x94, 0x1b, 0x57, 0xd5, 0xcd, 0x06, 0x8a, 0x07, 0xae, 0xe9, 0x00, 0x4b, 0x63, 0x74, 0x80, 0x51, 0x66, 0x32, 0x6c, 0x79, 0x1c, 0x9a, 0xda, 0x32, 0x90, 0x5b, 0xad, 0xa9, 0xf8, 0xa3, 0x09, 0xbe, 0xd5, 0x89, 0xbc, 0xcb, 0x84, 0x4f, 0xcd, 0x49, 0x7e, 0x43, 0xb3, 0x20, 0x1f, 0xec, 0xb0, 0x0c, 0x5b, 0xe6, 0xc5, 0x96, 0x2d, 0x83, 0x45, 0x71, 0x5d, 0xdf, 0xa5, 0x71, 0x4d, 0xdf, 0x10, 0xdd, 0x45, 0xc1, 0x32, 0x13, 0xdb, 0xe8, 0x8a, 0xeb, 0xe7, 0x7a, 0x45, 0xaa, 0x67, 0x26, 0xb6, 0x34, 0x27, 0x9e, 0x23, 0x4b, 0xce, 0x88, 0xdf, 0x67, 0x4b, 0x31, 0x55, 0x67, 0xd7, 0x37, 0xb1, 0xce, 0x2e, 0x63, 0x4c, 0x12, 0x06, 0xdd, 0x7a, 0x07, 0xf6, 0x3b, 0x07, 0x7f, 0x33, 0x20, 0x17, 0x7f, 0x33, 0x21, 0x0f, 0x7f, 0xb1, 0x85, 0x15, 0xe7, 0x10, 0xca, 0x1b, 0x54, 0x6c, 0x73, 0xb0, 0x37, 0x1a, 0x93, 0xbf, 0xcf, 0xc4, 0xb1, 0xe6, 0xb1, 0xff, 0xe4, 0xbd, 0xda, 0x82, 0x54, 0xdb, 0x10, 0xa9, 0x0c, 0x6e, 0x89, 0xf8, 0xfc, 0x7a, 0xd9, 0x8e, 0xf5, 0xeb, 0x17, 0xb1, 0xc7, 0x7c, 0x2b, 0xca, 0x5c, 0x4c, 0xd5, 0x2c, 0x1e, 0xcb, 0xc0, 0x39, 0xd0, 0x27, 0xe6, 0x7d, 0x48, 0x2f, 0x85, 0xf6, 0x39, 0x20, 0x7d, 0xf9, 0x31, 0x6b, 0x20, 0x9a, 0xf0, 0xa6, 0x51, 0x58, 0xfb, 0xbb, 0x4a, 0x83, 0xc0, 0x00, 0x94, 0x16, 0x51, 0x9a, 0xc2, 0x56, 0x7a, 0x51, 0xaa, 0xf2, 0xcf, 0x5d, 0x05, 0x41, 0x70, 0xe1, 0x6f, 0x1d, 0x14, 0xa2, 0x64, 0x55, 0x7d, 0xf0, 0x68, 0x29, 0xbc, 0x59, 0x2b, 0xe4, 0xfe, 0xa1, 0x4e, 0xf2, 0x64, 0xb4, 0xfa, 0x1f, 0xab, 0xd3, 0x4e, 0xff, 0x2f, 0xbf, 0xbf, 0xe6, 0x6d, 0x30, 0xdd, 0x8d, 0xf4, 0x58, 0x5e, 0x69, 0xab, 0xf5, 0x97, 0x97, 0xf9, 0xe5, 0x3a, 0x84, 0x93, 0xce, 0x35, 0xe9, 0xf7, 0x4f, 0x4a, 0xa1, 0x36, 0x65, 0x5f, 0x4f, 0xc4, 0xcb, 0xab, 0xce, 0x92, 0xa3, 0x87, 0xec, 0x55, 0x52, 0xa6, 0xbf, 0x42, 0xb6, 0xa1, 0xf4, 0xfc, 0xa5, 0x43, 0xeb, 0x23, 0x86, 0x4e, 0x8b, 0x6c, 0xcc, 0x86, 0x6a, 0xfd, 0xf3, 0x96, 0x36, 0x1d, 0xae, 0x79, 0x4d, 0xa1, 0x9e, 0xe8, 0x3f, 0x56, 0x83, 0xac, 0x3f, 0xd3, 0x13, 0xaa, 0x78, 0x7a, 0x15, 0xb8, 0x96, 0x9f, 0x68, 0xd8, 0x18, 0x2a, 0xf7, 0xfb, 0x10, 0xba, 0xe9, 0x7d, 0xe5, 0xcb, 0x76, 0x15, 0x4f, 0x3d, 0xf9, 0x14, 0x59, 0x62, 0x79, 0xae, 0x1f, 0x8a, 0x85, 0xfc, 0xfb, 0x56, 0x41, 0xe1, 0xf2, 0x4d, 0x34, 0x3b, 0xd5, 0x48, 0xf1, 0xb1, 0x78, 0x2c, 0xa1, 0x59, 0x42, 0xb7, 0x58, 0xb5, 0x4d, 0x6d, 0x6f, 0x9d, 0xcc, 0x3e, 0x9f, 0x63, 0xaa, 0xef, 0xe7, 0x9e, 0xd6, 0x29, 0x7c, 0xed, 0x65, 0xff, 0xc1, 0xdb, 0x90, 0x87, 0xec, 0x20, 0x6b, 0x35, 0xbc, 0x7f, 0x08, 0xaf, 0xd7, 0xf1, 0xbb, 0x47, 0xd8, 0xf3, 0xf3, 0xa3, 0xf8, 0x9c, 0xc9, 0xcf, 0xc2, 0x77, 0xf4, 0x54, 0xe1, 0x3b, 0x9a, 0xec, 0xd2, 0x11, 0x0c, 0xfb, 0xac, 0xb0, 0x84, 0x74, 0x4d, 0x28, 0x26, 0x14, 0x85, 0x01, 0x3d, 0xc0, 0x9a, 0x27, 0x03, 0xf4, 0x56, 0x01, 0xe5, 0x10, 0x3f, 0x1d, 0x56, 0xf3, 0x1e, 0x69, 0x35, 0xf3, 0xb7, 0x83, 0xd1, 0x1c, 0xb2, 0x49, 0xc0, 0xd2, 0x84, 0x57, 0x69, 0xe1, 0x3f, 0x99, 0x3d, 0x7e, 0x5a, 0x81, 0xbf, 0x38, 0x87, 0xf7, 0x17, 0x96, 0x90, 0x54, 0x11, 0xb7, 0xc7, 0x25, 0x9f, 0x95, 0x8e, 0x15, 0x14, 0xb3, 0xcc, 0x52, 0xc0, 0x51, 0xac, 0xc8, 0x1b, 0xd7, 0x26, 0xe4, 0x7b, 0x31, 0x8d, 0x63, 0xbf, 0xf0, 0xb4, 0x1d, 0xea, 0x37, 0x47, 0x1a, 0x6a, 0x2e, 0x39, 0x80, 0x4e, 0x95, 0x46, 0x86, 0x1c, 0xf7, 0xfa, 0x9b, 0x51, 0x9e, 0x03, 0xcf, 0x34, 0x92, 0xcf, 0xb0, 0xdc, 0xb3, 0x48, 0x8b, 0x0b, 0xb8, 0x97, 0x17, 0xc8, 0x36, 0x93, 0xcf, 0x2f, 0xf5, 0xaa, 0xe6, 0xfd, 0x0e, 0x2c, 0x63, 0x24, 0xad, 0x9b, 0xf6, 0x8f, 0x92, 0x53, 0x0c, 0xe4, 0x21, 0x2d, 0x5f, 0xa5, 0x82, 0x64, 0x05, 0xd8, 0x9c, 0xac, 0xc5, 0x9d, 0xec, 0xb3, 0x8d, 0x6c, 0x89, 0x59, 0x6f, 0x47, 0x58, 0xab, 0x4c, 0x21, 0x8b, 0x8d, 0xba, 0x5e, 0x97, 0xb6, 0x36, 0x70, 0x21, 0x77, 0x7f, 0x87, 0xb5, 0xff, 0x69, 0x3c, 0x3a, 0x42, 0x64, 0x1f, 0x2d, 0xec, 0x84, 0xcf, 0x90, 0x07, 0x7b, 0x6a, 0xa9, 0xe4, 0x73, 0x50, 0x74, 0x77, 0x94, 0x21, 0xb4, 0x5c, 0xad, 0xba, 0x78, 0xae, 0x53, 0x5f, 0x47, 0x9a, 0x86, 0xd2, 0x18, 0x7b, 0x4f, 0x13, 0x3e, 0xa2, 0x93, 0xdf, 0xda, 0xf9, 0x1b, 0xe4, 0xab, 0x72, 0x68, 0x83, 0x54, 0x5d, 0x85, 0x72, 0x18, 0xd3, 0x8e, 0x47, 0xb4, 0xd4, 0x25, 0x22, 0xf5, 0xb2, 0x48, 0x8d, 0x3a, 0x52, 0x25, 0x0b, 0x47, 0x2c, 0xd2, 0x98, 0x97, 0x26, 0xf9, 0x6e, 0x6d, 0x51, 0x46, 0x41, 0x2f, 0x2d, 0xf2, 0x3c, 0xa1, 0x5c, 0x91, 0x16, 0x5d, 0x5f, 0x01, 0xe9, 0xf8, 0xdb, 0x41, 0x91, 0x5e, 0x57, 0x83, 0xc3, 0xcb, 0x5a, 0x19, 0x25, 0xb6, 0x45, 0x6c, 0x1b, 0x39, 0x4b, 0xb9, 0x2c, 0x55, 0xb2, 0xbf, 0x53, 0x94, 0x44, 0x92, 0x66, 0x59, 0x99, 0x35, 0x6d, 0x51, 0x27, 0xad, 0x05, 0x66, 0xc4, 0x70, 0x2d, 0xb0, 0x56, 0x5a, 0x14, 0xec, 0xcb, 0x85, 0x88, 0xf1, 0xe9, 0xf4, 0xe5, 0x2f, 0xc8, 0xc2, 0x8e, 0xa3, 0x3c, 0xc9, 0x8e, 0xe3, 0x12, 0xeb, 0x91, 0x1b, 0x19, 0x5a, 0xaa, 0xe4, 0xd2, 0x01, 0x92, 0x31, 0xa1, 0x47, 0x9e, 0x14, 0xb1, 0x23, 0xdb, 0x4e, 0xfe, 0xea, 0xf5, 0x83, 0x14, 0x09, 0x02, 0xea, 0xfa, 0x3f, 0xbd, 0xdc, 0xb0, 0x19, 0x39, 0x74, 0x2e, 0x4a, 0x27, 0x49, 0xb4, 0xc6, 0x60, 0x26, 0x2b, 0x09, 0x28, 0x95, 0xd4, 0x55, 0xad, 0x95, 0x7c, 0xcf, 0x07, 0x49, 0xa2, 0x20, 0x4e, 0xe5, 0x40, 0xf9, 0xa4, 0x75, 0xda, 0xb1, 0x3d, 0x20, 0xa3, 0xc4, 0x9c, 0x67, 0x25, 0xf9, 0x64, 0x21, 0xcf, 0x4c, 0xa2, 0x5f, 0x48, 0x19, 0x48, 0x4a, 0xb4, 0xc6, 0x64, 0x87, 0xd5, 0x85, 0x23, 0xd4, 0x49, 0xbe, 0x04, 0x58, 0x86, 0xd9, 0x8a, 0x54, 0xad, 0x06, 0x6b, 0x0a, 0x62, 0x4d, 0x01, 0x3e, 0x71, 0x26, 0x7f, 0xf4, 0x40, 0x54, 0x0d, 0x7f, 0x35, 0x2f, 0x5e, 0xec, 0x4f, 0x9f, 0x38, 0x08, 0xfb, 0x3d, 0x9f, 0xc9, 0x63, 0x7c, 0x67, 0xdc, 0x4f, 0x14, 0x8d, 0x72, 0x96, 0xe4, 0x63, 0xc9, 0x94, 0x7d, 0x76, 0x0d, 0x93, 0xc5, 0xb7, 0x99, 0x7d, 0xdc, 0xfb, 0x45, 0xd9, 0xa2, 0x07, 0xb5, 0x6c, 0xe7, 0xe1, 0x2d, 0xd5, 0x3c, 0x29, 0x23, 0xef, 0xb3, 0xbd, 0x4e, 0x12, 0xd1, 0x22, 0xf6, 0x2a, 0xb4, 0xba, 0xb8, 0x80, 0x71, 0x3a, 0xcb, 0x73, 0x27, 0x18, 0xdd, 0xa6, 0x84, 0xee, 0x40, 0x91, 0xbe, 0x59, 0x7f, 0x5b, 0xf9, 0x9b, 0xe5, 0x25, 0xba, 0xc0, 0x73, 0x92, 0xaf, 0xe2, 0x62, 0x29, 0xe8, 0xfd, 0xb1, 0x49, 0xcd, 0xa6, 0x85, 0x7e, 0xf0, 0x2b, 0x97, 0x43, 0x7e, 0x8f, 0x3e, 0x30, 0xd0, 0xf6, 0x8f, 0xd5, 0xfa, 0xd3, 0x3f, 0xc9, 0xd1, 0x57, 0xa7, 0xd5, 0x6f, 0xf4, 0xeb, 0x10, 0xab, 0x25, 0x69, 0x89, 0xc3, 0xb4, 0xb0, 0x7b, 0xcd, 0x48, 0x7f, 0xf7, 0x72, 0x04, 0x00, 0x4a, 0x0c, 0xa6, 0xa3, 0x2f, 0x46, 0x0c, 0xeb, 0x2c, 0xb2, 0xfe, 0x57, 0x96, 0x90, 0x0e, 0x39, 0xf9, 0xa2, 0xbd, 0x44, 0x31, 0x87, 0xb0, 0xa7, 0x5e, 0xea, 0xa9, 0x97, 0x7c, 0x22, 0x4b, 0x04, 0x55, 0xec, 0x61, 0x96, 0x95, 0xe4, 0xc9, 0xef, 0x9b, 0x80, 0x5b, 0xd6, 0x56, 0xec, 0x50, 0x5b, 0xd6, 0xf4, 0xe7, 0xb5, 0x2c, 0x70, 0xb0, 0xfd, 0x1f, 0xab, 0x0d, 0x67, 0x1f, 0x5d, 0x0d, 0x39, 0x4e, 0x48, 0xaf, 0xdf, 0x18, 0xc5, 0x95, 0x6c, 0x9b, 0x4e, 0x9e, 0x2e, 0x2d, 0x59, 0xa3, 0xf4, 0xf7, 0x44, 0x32, 0x79, 0x84, 0x32, 0xf3, 0x0c, 0x2f, 0x79, 0x76, 0x20, 0x26, 0x39, 0xf5, 0xff, 0xfd, 0x44, 0x6c, 0x5d, 0xa8, 0xf3, 0xe9, 0xce, 0x65, 0x6f, 0x88, 0x68, 0x0d, 0x06, 0xef, 0x58, 0x2b, 0x6a, 0x6c, 0x97, 0x0f, 0x25, 0xb6, 0x2c, 0xe9, 0x2e, 0x13, 0x08, 0x4b, 0x29, 0x9d, 0x11, 0xdb, 0xcb, 0x1a, 0x47, 0x48, 0x67, 0x3b, 0x1b, 0xcd, 0x02, 0xd6, 0xbc, 0x4f, 0x7d, 0x94, 0xfd, 0x13, 0x7a, 0x98, 0xb3, 0xe1, 0x6a, 0x02, 0x7f, 0xb3, 0xf9, 0x37, 0x8b, 0x7f, 0x2d, 0x6e, 0xb2, 0xc0, 0x9f, 0x89, 0x23, 0x35, 0x93, 0x4e, 0xef, 0x3f, 0x39, 0x49, 0xf4, 0x80, 0xb4, 0xd8, 0xe6, 0xde, 0x01, 0x39, 0xc8, 0x1d, 0xee, 0x80, 0x6c, 0x28, 0xe4, 0x7c, 0x77, 0x80, 0x19, 0x17, 0xd3, 0x98, 0x2b, 0xc1, 0x25, 0x8a, 0xb0, 0x94, 0x83, 0x83, 0x43, 0x9d, 0x6d, 0x93, 0x06, 0xba, 0x54, 0x5e, 0xa1, 0xaf, 0x39, 0xa7, 0xf2, 0x8a, 0x66, 0x95, 0x57, 0xd4, 0x6a, 0xbc, 0xc2, 0x1a, 0x8a, 0x2a, 0x7d, 0x1b, 0x22, 0x65, 0xcc, 0xbd, 0x8a, 0x5f, 0xd1, 0x78, 0x85, 0xd5, 0x66, 0x3c, 0xf4, 0x63, 0xe4, 0x14, 0xd7, 0xab, 0x9c, 0xe2, 0x7a, 0x95, 0x53, 0x6c, 0x48, 0xe1, 0x14, 0x85, 0xcb, 0x87, 0x54, 0x4e, 0xe1, 0x60, 0x4e, 0xb1, 0x9b, 0x39, 0x05, 0xf5, 0xca, 0xa2, 0x72, 0x0a, 0xd7, 0xf2, 0xfb, 0xb5, 0x9d, 0x79, 0x4d, 0x2a, 0x53, 0xc7, 0xd0, 0x24, 0xdd, 0x6a, 0x82, 0x88, 0xab, 0x95, 0xf4, 0x3d, 0x73, 0xdc, 0x3a, 0xfc, 0xcd, 0xe6, 0xdf, 0x2c, 0xfe, 0xb5, 0x90, 0xf5, 0x31, 0xe2, 0xad, 0x99, 0xe5, 0xb3, 0xfe, 0xcb, 0x43, 0x04, 0x01, 0x8d, 0x5f, 0x92, 0x46, 0x3b, 0xef, 0xac, 0xa2, 0x1c, 0x89, 0x90, 0x2f, 0xa5, 0x99, 0xe6, 0x58, 0xb8, 0x5f, 0x58, 0xa7, 0x91, 0x46, 0xb2, 0x19, 0xc7, 0xde, 0xf7, 0xa6, 0xaf, 0xcc, 0x87, 0x2d, 0xc9, 0x16, 0xde, 0x65, 0x13, 0x98, 0x51, 0xf1, 0x91, 0x09, 0xda, 0x21, 0xd7, 0x85, 0xa3, 0xbe, 0xa9, 0x15, 0xfc, 0xb0, 0x5a, 0x27, 0x67, 0xe2, 0x98, 0x3f, 0x14, 0x36, 0x3a, 0xd3, 0x70, 0x94, 0xd3, 0x43, 0x9d, 0xfb, 0x3b, 0x57, 0xbe, 0xe7, 0xaf, 0xf4, 0xe2, 0x2a, 0x0c, 0x61, 0xbe, 0xdd, 0xb1, 0xb0, 0x7e, 0x93, 0xe4, 0xf7, 0xea, 0x65, 0xbd, 0x65, 0xa0, 0xc8, 0xb4, 0xa5, 0x7a, 0x2f, 0xed, 0x61, 0x5e, 0x5a, 0x0d, 0xf2, 0xb2, 0xc2, 0xcc, 0xb7, 0x9e, 0x2a, 0xc2, 0xda, 0x9c, 0x8b, 0xf0, 0xfb, 0xfb, 0x22, 0xf5, 0x6c, 0x2b, 0x10, 0x5c, 0x33, 0xe9, 0xe0, 0xba, 0x35, 0xff, 0x58, 0x9d, 0x7e, 0xe6, 0x5f, 0xac, 0xe9, 0xbf, 0x7d, 0x51, 0xf2, 0xe7, 0x4d, 0xaa, 0x4e, 0xbf, 0xb1, 0x0a, 0xdc, 0xb2, 0x6d, 0x0d, 0xe4, 0x7d, 0xe1, 0xa5, 0xce, 0x88, 0x61, 0x33, 0xf2, 0xdf, 0x3c, 0xec, 0xde, 0xaf, 0x2d, 0x6b, 0x74, 0xfd, 0x9d, 0x08, 0xd5, 0xfb, 0x5a, 0xff, 0xb1, 0x1a, 0xa9, 0xfd, 0x99, 0x0d, 0xa1, 0x9e, 0x32, 0xd3, 0xce, 0x6a, 0xb1, 0x4b, 0xda, 0xb0, 0x09, 0x29, 0xd9, 0x42, 0xde, 0xab, 0x4a, 0xdf, 0xbb, 0x76, 0xe5, 0x16, 0x5a, 0x99, 0x20, 0xb4, 0x2c, 0xaf, 0x3c, 0x1b, 0xdf, 0x3b, 0x0d, 0x6b, 0x5c, 0x38, 0xee, 0xf1, 0xcd, 0x2c, 0xc3, 0xe5, 0x95, 0xc2, 0x7f, 0x9c, 0x2a, 0xc3, 0x98, 0xa5, 0xa8, 0x8a, 0x8f, 0xb9, 0xb4, 0xeb, 0x86, 0xf4, 0xc7, 0x90, 0x90, 0x43, 0x46, 0x7a, 0x05, 0x97, 0xb9, 0x26, 0x5f, 0x0d, 0xa7, 0xd9, 0xcb, 0xc0, 0x0c, 0xd5, 0xcb, 0xc0, 0x69, 0xf6, 0x32, 0x70, 0x96, 0x7d, 0x28, 0x9c, 0x63, 0x7f, 0x08, 0xe7, 0x31, 0x25, 0x5f, 0xb9, 0xc0, 0xde, 0x0b, 0x2e, 0xb2, 0xf7, 0x82, 0x0f, 0xd8, 0x7b, 0x01, 0xf9, 0x33, 0x28, 0x54, 0x3e, 0xc6, 0xb7, 0x1e, 0xf6, 0x4a, 0x50, 0x1c, 0xb7, 0x58, 0x3a, 0x3d, 0xce, 0x93, 0x41, 0xdc, 0x63, 0x86, 0x3d, 0xc9, 0xce, 0x9d, 0x76, 0x08, 0x90, 0x47, 0x4e, 0xe8, 0x1b, 0x43, 0x27, 0x89, 0x15, 0x2c, 0x4a, 0xf4, 0x59, 0x89, 0x98, 0x2e, 0x09, 0x5b, 0xf6, 0x68, 0x86, 0xea, 0xf5, 0x7b, 0x0a, 0xf2, 0x92, 0x91, 0x69, 0xbd, 0xc4, 0x3f, 0x58, 0xab, 0x51, 0x8d, 0x39, 0xc0, 0x7b, 0x00, 0x53, 0x28, 0x95, 0x76, 0x7b, 0xd8, 0x8b, 0xe9, 0x65, 0xed, 0xdd, 0x92, 0xf8, 0xbb, 0x44, 0xe4, 0x80, 0xb8, 0x3d, 0x3d, 0xf2, 0x23, 0x7a, 0x33, 0x93, 0x76, 0x06, 0xcc, 0xf8, 0x7b, 0x59, 0xf8, 0xdf, 0xc7, 0xef, 0x62, 0x6c, 0x15, 0x46, 0x7c, 0xe9, 0x0c, 0xfb, 0x96, 0x16, 0x9c, 0xd6, 0x22, 0xf9, 0x66, 0x0a, 0x89, 0xbc, 0x59, 0xf5, 0x8b, 0xba, 0x22, 0x49, 0xa7, 0x96, 0x76, 0x0d, 0x62, 0x5f, 0x67, 0x2b, 0x4b, 0x2c, 0xf9, 0x02, 0x5b, 0x34, 0x32, 0xbe, 0xa6, 0xc6, 0x43, 0x99, 0x29, 0x3c, 0xf6, 0xe6, 0xaa, 0x2b, 0xf2, 0x6a, 0x5e, 0x91, 0xa7, 0xda, 0x27, 0x7e, 0x86, 0xdf, 0x0e, 0x8d, 0x67, 0xd0, 0x8e, 0x0f, 0xf2, 0x8d, 0x7c, 0x69, 0xfe, 0x51, 0x84, 0x5c, 0xb0, 0x09, 0x2c, 0x91, 0xcc, 0x54, 0xcf, 0xfa, 0xc8, 0x1d, 0xf2, 0x91, 0x4b, 0x8c, 0xe3, 0x10, 0x1c, 0x57, 0x85, 0x3d, 0xd4, 0x13, 0xcf, 0x79, 0x4d, 0x78, 0xa8, 0x37, 0x8b, 0x9d, 0x67, 0xd2, 0xee, 0xc1, 0xb9, 0x66, 0x14, 0xfe, 0x99, 0xed, 0xc2, 0x5b, 0xb3, 0x41, 0x3c, 0x49, 0x15, 0xb8, 0x5a, 0x7e, 0x87, 0xf7, 0xb9, 0xba, 0x22, 0xd6, 0xe5, 0x19, 0xac, 0x75, 0xd2, 0x15, 0x2e, 0x95, 0x2d, 0xac, 0x5d, 0x99, 0x83, 0xcf, 0x06, 0x7c, 0x76, 0xc8, 0x56, 0xcb, 0x6e, 0x98, 0x22, 0x4b, 0x9e, 0xdd, 0x14, 0xd5, 0x04, 0xef, 0x27, 0xd3, 0x9e, 0xd8, 0xe9, 0x9e, 0xeb, 0x7d, 0xa0, 0xbb, 0x7e, 0x05, 0x4c, 0x01, 0xbd, 0x6c, 0x90, 0x76, 0xd3, 0x6e, 0x72, 0xbe, 0x1a, 0xe7, 0xc5, 0x31, 0xd6, 0x63, 0x3e, 0xce, 0x47, 0x61, 0x91, 0x4c, 0xfb, 0xb5, 0x9e, 0x66, 0x6e, 0xcf, 0x56, 0xd1, 0x9e, 0xd2, 0x66, 0xda, 0xa1, 0xa1, 0x27, 0x6e, 0xcf, 0xf9, 0x71, 0xed, 0xf1, 0x8e, 0x69, 0x8f, 0x8b, 0x65, 0x7c, 0x0b, 0xfd, 0x7a, 0x2c, 0xb2, 0xa4, 0xe9, 0x75, 0xf2, 0x9c, 0xd4, 0x0f, 0x76, 0x0a, 0xcd, 0xce, 0xc1, 0x4e, 0xd9, 0x28, 0x59, 0x04, 0x57, 0xa0, 0x56, 0x09, 0x3d, 0x31, 0x11, 0x29, 0xcf, 0xaa, 0xc6, 0x8b, 0xb1, 0xd7, 0xd0, 0xde, 0x07, 0x9d, 0x18, 0x93, 0xcd, 0x1d, 0xc5, 0xc0, 0xca, 0x72, 0xc1, 0x34, 0xb3, 0x0e, 0xd2, 0x22, 0x66, 0xfc, 0xcd, 0x08, 0x83, 0x2e, 0x8c, 0x32, 0x58, 0x06, 0x59, 0xfc, 0xad, 0xd6, 0x3f, 0xdd, 0x19, 0x91, 0x97, 0x67, 0xb4, 0xeb, 0xc8, 0x6f, 0x8e, 0xee, 0x36, 0x39, 0x7b, 0x75, 0xda, 0xd3, 0xe4, 0xa5, 0xb8, 0x97, 0xe2, 0x31, 0x60, 0x4a, 0x2d, 0x52, 0xa5, 0x47, 0xc8, 0x42, 0xad, 0x04, 0xe9, 0x63, 0x69, 0x13, 0x64, 0x20, 0xef, 0x33, 0xd9, 0xc9, 0x9e, 0x0f, 0x31, 0xaa, 0xfd, 0xcb, 0x43, 0xbb, 0xd9, 0x5e, 0xef, 0x5c, 0xc1, 0x7c, 0x9c, 0x8b, 0x01, 0x9c, 0x89, 0xb5, 0x38, 0x0f, 0x85, 0x25, 0x1d, 0x69, 0x58, 0x5d, 0xd6, 0xfb, 0x41, 0x91, 0xcb, 0xae, 0xfa, 0xfd, 0xf4, 0xcf, 0xfb, 0x7e, 0xb6, 0x5f, 0x19, 0x26, 0x6b, 0xef, 0xab, 0x96, 0x70, 0xa3, 0x9c, 0x77, 0xd5, 0x77, 0xd2, 0xe7, 0x95, 0x4e, 0x76, 0x7e, 0x72, 0x25, 0x7e, 0x97, 0x89, 0x32, 0x47, 0x26, 0x96, 0x63, 0x0e, 0x95, 0x3f, 0x77, 0x10, 0xcb, 0xca, 0x78, 0x1e, 0x79, 0x98, 0xa4, 0x95, 0x73, 0x53, 0xbc, 0x9c, 0x00, 0x96, 0xe3, 0x17, 0x3a, 0xe7, 0xec, 0xd1, 0xfe, 0x12, 0x96, 0xc8, 0x25, 0x51, 0x04, 0x2d, 0xf6, 0xc2, 0x32, 0x59, 0xd3, 0x3f, 0xe7, 0xe8, 0x38, 0x93, 0x35, 0x1a, 0xa2, 0x46, 0xc7, 0xd1, 0x7c, 0xda, 0xa8, 0xd1, 0xc0, 0x1c, 0xb3, 0xc4, 0xee, 0x24, 0x6b, 0xc4, 0xd5, 0x4a, 0x95, 0xea, 0xbe, 0x50, 0x2e, 0x9f, 0xe3, 0x9a, 0x49, 0x43, 0x3c, 0x0c, 0x7a, 0x3a, 0xb1, 0x39, 0x25, 0x89, 0xb1, 0x8a, 0x45, 0x82, 0xcb, 0x33, 0xc8, 0xf7, 0x06, 0xa6, 0xef, 0xe1, 0xb1, 0x22, 0x7b, 0xe8, 0x6d, 0xad, 0x06, 0x4e, 0xd9, 0x89, 0xa3, 0xba, 0x8d, 0xc6, 0x9b, 0xf4, 0x65, 0xc9, 0x0f, 0x3e, 0x79, 0xcc, 0x2d, 0x46, 0x29, 0xa1, 0xc4, 0x89, 0xe5, 0x8b, 0xde, 0x98, 0xa4, 0x4a, 0xa4, 0x70, 0x39, 0xed, 0x56, 0xd9, 0x71, 0x8d, 0x39, 0x6f, 0x1e, 0x7a, 0x92, 0x7b, 0x3f, 0x58, 0x10, 0xe4, 0xb8, 0x5f, 0x43, 0xf8, 0x77, 0x12, 0x21, 0x7a, 0x6a, 0x36, 0x45, 0x0c, 0xf0, 0x2b, 0x67, 0x28, 0x6a, 0xc0, 0xec, 0x2a, 0xe5, 0x4d, 0x5a, 0xd7, 0x90, 0x97, 0x21, 0x6c, 0xef, 0xe5, 0x6b, 0x2c, 0xdb, 0x26, 0xff, 0x84, 0x7a, 0xc6, 0xf2, 0x49, 0x60, 0x79, 0xc6, 0x6a, 0xdd, 0xd3, 0xe4, 0xdb, 0xfc, 0x98, 0x9c, 0xd5, 0x9a, 0x86, 0x29, 0xf2, 0x6a, 0x03, 0x3f, 0x1f, 0xc4, 0x12, 0x0f, 0x5c, 0x63, 0x89, 0x33, 0x71, 0x6d, 0x7f, 0x6d, 0x39, 0x9d, 0xd7, 0x0c, 0x81, 0x82, 0x64, 0x08, 0x60, 0xcf, 0x87, 0xb0, 0xe7, 0xa7, 0xb0, 0xe7, 0x6f, 0x60, 0xcf, 0x4f, 0x63, 0xcf, 0xcf, 0xd0, 0xca, 0x8b, 0x35, 0x46, 0x9b, 0x55, 0xab, 0xf3, 0x78, 0x1c, 0x1e, 0x1c, 0x11, 0x03, 0x6b, 0x22, 0x62, 0x2d, 0x7c, 0x12, 0x41, 0xf2, 0x97, 0x93, 0xe5, 0x2f, 0xd6, 0x12, 0x14, 0xa7, 0xc9, 0xb4, 0xab, 0xa7, 0xc6, 0xfd, 0x32, 0xb9, 0xcd, 0xb6, 0xca, 0x84, 0xaf, 0x98, 0xcb, 0x1f, 0x93, 0x8e, 0x31, 0x69, 0x8a, 0x0b, 0x6d, 0xe2, 0x05, 0x1a, 0xf5, 0x33, 0x8b, 0xf3, 0x59, 0xd2, 0xc9, 0xb6, 0xd3, 0xae, 0x20, 0x95, 0x94, 0xe5, 0x9e, 0x4c, 0xcf, 0x83, 0x6b, 0x07, 0x1f, 0x07, 0x8a, 0xf9, 0x39, 0x2c, 0x2d, 0x74, 0x55, 0xd2, 0x29, 0x39, 0xfb, 0x13, 0xef, 0x51, 0x23, 0x5a, 0x1e, 0x27, 0x7e, 0xb8, 0xe0, 0x5d, 0x6c, 0x65, 0xa6, 0xc6, 0x11, 0x3d, 0xaa, 0x77, 0x65, 0xa4, 0x08, 0x26, 0x5b, 0xb6, 0x93, 0x7c, 0xf1, 0x57, 0xd2, 0x8e, 0xcb, 0xea, 0xfc, 0x13, 0x14, 0xcb, 0xa1, 0x82, 0x6d, 0xec, 0x87, 0x68, 0x75, 0xc5, 0x10, 0xa8, 0x52, 0x4e, 0xcd, 0xa3, 0x7d, 0xf0, 0xf9, 0xc8, 0x97, 0xfd, 0xd8, 0x73, 0x1a, 0xf7, 0x1a, 0xd6, 0xb1, 0xe5, 0xd5, 0x6c, 0xaa, 0xde, 0x3d, 0x9d, 0x41, 0x24, 0x22, 0xbf, 0x8d, 0xf1, 0xe5, 0x42, 0x9e, 0x33, 0x6a, 0x9d, 0x35, 0xbf, 0x45, 0xbc, 0xb7, 0x7f, 0x13, 0x47, 0x43, 0x6a, 0x35, 0x92, 0x85, 0xbf, 0x2e, 0xd4, 0x96, 0xb5, 0x8f, 0x30, 0xfa, 0x10, 0xae, 0x88, 0x69, 0xa5, 0x4f, 0x1c, 0xda, 0xac, 0x79, 0xac, 0x4e, 0xea, 0xb9, 0x8f, 0xe9, 0x7e, 0x96, 0x78, 0x7a, 0x6d, 0xe0, 0xb5, 0x77, 0xc1, 0x50, 0x8a, 0xd0, 0x2d, 0x32, 0x54, 0x96, 0x1f, 0xa3, 0xff, 0x28, 0x8d, 0xfd, 0xea, 0x90, 0x47, 0xdf, 0x5b, 0xe1, 0xaf, 0xb0, 0x65, 0xb2, 0x3e, 0x63, 0xb1, 0xc7, 0x47, 0xf6, 0x79, 0x08, 0xd1, 0xa1, 0xbc, 0xec, 0x7c, 0x17, 0xe8, 0x72, 0x5c, 0xa0, 0xb7, 0xb8, 0x20, 0xad, 0x61, 0x53, 0x30, 0x9d, 0xe2, 0xf6, 0x98, 0xd3, 0x15, 0x25, 0x9c, 0x99, 0x13, 0xcb, 0x5f, 0x9b, 0xb7, 0xde, 0x5f, 0x00, 0xe4, 0xb7, 0x63, 0xcb, 0xf4, 0x69, 0x74, 0x2a, 0x0a, 0x8a, 0xd0, 0x23, 0x90, 0x50, 0xd2, 0xb3, 0x4c, 0x72, 0xa7, 0x3f, 0x30, 0x80, 0x33, 0xbc, 0x06, 0x57, 0x62, 0x7e, 0xb6, 0x37, 0xf1, 0x95, 0x9f, 0x83, 0xd8, 0xe9, 0xd8, 0x60, 0xcf, 0xe9, 0xd8, 0x1b, 0x90, 0x73, 0xcf, 0xf4, 0x1c, 0x61, 0x8f, 0x2b, 0xf2, 0x6e, 0x8f, 0xb9, 0xd3, 0x44, 0x3e, 0x3b, 0x70, 0xac, 0x37, 0xca, 0xb9, 0x96, 0x72, 0xe6, 0xdf, 0x93, 0xf3, 0x85, 0xb8, 0x3f, 0x90, 0x34, 0x77, 0xfa, 0x43, 0xe4, 0x6f, 0x82, 0x73, 0x0a, 0x3f, 0x31, 0x9c, 0x73, 0xdd, 0xe9, 0xd8, 0x09, 0xc8, 0x5b, 0x4b, 0xed, 0x21, 0x9f, 0x2f, 0xa1, 0xca, 0x86, 0x7b, 0x1b, 0xee, 0x6f, 0xb8, 0x6f, 0x3f, 0x69, 0x32, 0x80, 0x52, 0x5a, 0x32, 0xf9, 0xf5, 0xf7, 0xa1, 0xf8, 0xb5, 0xf7, 0xa1, 0x54, 0xd5, 0xca, 0x07, 0xdd, 0xa3, 0x0b, 0xde, 0x01, 0xdd, 0xfc, 0x77, 0x70, 0x21, 0x52, 0x59, 0x54, 0x21, 0x9f, 0xb0, 0x7f, 0x26, 0x1c, 0x1d, 0x29, 0x70, 0x7c, 0x7d, 0xe0, 0xf5, 0x09, 0xe1, 0xb8, 0x0d, 0xa1, 0xc8, 0x30, 0x2c, 0x55, 0x2d, 0xcc, 0x28, 0xea, 0x40, 0x56, 0xde, 0xb4, 0x9c, 0x02, 0xd0, 0x65, 0x17, 0x20, 0x14, 0xb1, 0x75, 0x0d, 0xf7, 0x32, 0x14, 0xcf, 0x74, 0x40, 0xbe, 0xde, 0x56, 0xcd, 0xb0, 0xcc, 0x77, 0x66, 0xbc, 0x75, 0x9f, 0x3e, 0x5d, 0x39, 0xfd, 0xa6, 0x69, 0x23, 0xe4, 0xae, 0x3b, 0x9f, 0xa1, 0x4f, 0x53, 0x2e, 0x77, 0xa7, 0xe5, 0x91, 0x1f, 0x9e, 0xfe, 0xfc, 0xec, 0xe9, 0x5f, 0x28, 0x9a, 0x37, 0xdd, 0xf8, 0xe6, 0x75, 0xfa, 0x49, 0x90, 0x5f, 0x3c, 0xf9, 0x9d, 0x8c, 0xee, 0x49, 0x6f, 0x65, 0xce, 0x99, 0xac, 0x9f, 0xa4, 0x5c, 0xbe, 0x71, 0x1e, 0x14, 0x27, 0xc3, 0xfd, 0x6e, 0x98, 0x6e, 0x74, 0xa7, 0x93, 0x2f, 0x8f, 0xb8, 0x5f, 0x94, 0xed, 0x42, 0xa3, 0xdc, 0xa2, 0x77, 0xa7, 0x3f, 0x38, 0x80, 0x6b, 0x4e, 0xb2, 0x50, 0xf0, 0x55, 0xbc, 0xcd, 0x30, 0xdb, 0x70, 0x3a, 0x76, 0x1c, 0xe2, 0x63, 0x40, 0x67, 0x88, 0x3c, 0x0a, 0x94, 0x27, 0x47, 0xff, 0xd6, 0x14, 0x6c, 0xc5, 0x69, 0xe7, 0x24, 0x15, 0xc2, 0xf7, 0xbc, 0xb1, 0xee, 0xf4, 0x3d, 0xa7, 0x26, 0xbd, 0x99, 0xb9, 0xde, 0x98, 0xbb, 0xf6, 0x7c, 0x46, 0xea, 0x18, 0x0d, 0xe2, 0xb7, 0x7a, 0xc0, 0x36, 0x43, 0x5e, 0x97, 0xe6, 0x1d, 0x25, 0x54, 0xb9, 0x68, 0xd3, 0xa2, 0xfb, 0xf6, 0x37, 0x11, 0xfc, 0x47, 0x47, 0x4b, 0x74, 0x04, 0x7b, 0x1c, 0x03, 0x2f, 0xc2, 0x1f, 0x29, 0x46, 0xb3, 0x6d, 0xfe, 0x05, 0xd0, 0x21, 0xe4, 0xd3, 0xe4, 0x53, 0x28, 0xd5, 0xd4, 0x22, 0x96, 0x04, 0xb0, 0xbd, 0x95, 0x62, 0x5d, 0xad, 0x9e, 0x4d, 0x1f, 0x4d, 0x9c, 0x52, 0x7f, 0x0e, 0x3f, 0xc8, 0xfe, 0xab, 0xf8, 0x01, 0xd2, 0x14, 0x9a, 0xd7, 0x48, 0xe3, 0xb2, 0x88, 0xda, 0xd0, 0x5a, 0x86, 0x22, 0x6e, 0x14, 0xaf, 0x00, 0x33, 0xd1, 0xb9, 0x24, 0x7e, 0x70, 0x6d, 0x39, 0x13, 0xfc, 0x60, 0xbe, 0x72, 0x7c, 0x76, 0x90, 0xa9, 0xe1, 0x49, 0xb2, 0x38, 0x40, 0xbe, 0x40, 0xf1, 0x5e, 0x26, 0xe6, 0x07, 0xd7, 0x56, 0xf6, 0x9f, 0xc3, 0x0f, 0xae, 0xad, 0x44, 0x97, 0x1c, 0xba, 0xc6, 0x9c, 0xb3, 0xae, 0x19, 0x02, 0x85, 0x57, 0x83, 0xc0, 0x35, 0xf2, 0x03, 0xa2, 0xf2, 0x05, 0xbc, 0xd3, 0xec, 0xe4, 0x35, 0xb8, 0x93, 0xd0, 0x53, 0xa5, 0xff, 0x06, 0xb1, 0x82, 0xa4, 0x1a, 0xdd, 0x19, 0x7c, 0xda, 0x63, 0xe6, 0x53, 0x49, 0x95, 0x1f, 0x7c, 0xf0, 0xa6, 0xc6, 0x0f, 0x52, 0x38, 0x81, 0x79, 0x0c, 0x27, 0xc8, 0x1c, 0xcb, 0x09, 0x90, 0x7b, 0x18, 0x50, 0x4a, 0xb9, 0x76, 0x7e, 0xc0, 0xfd, 0x27, 0xfb, 0x30, 0x94, 0xb9, 0x4d, 0xce, 0xec, 0x71, 0xfc, 0xa0, 0x8a, 0xf9, 0xc1, 0x30, 0xf3, 0x03, 0xec, 0xb9, 0xca, 0x1b, 0x38, 0x3a, 0xdd, 0x9f, 0xc3, 0x0f, 0x44, 0x7c, 0xa7, 0xb9, 0x1e, 0x7b, 0x92, 0xfc, 0x6a, 0xab, 0x61, 0xff, 0x9a, 0xc8, 0x85, 0x78, 0xd4, 0xe7, 0xdc, 0x6d, 0x78, 0x26, 0x16, 0x69, 0x54, 0x7d, 0x8d, 0x01, 0xbc, 0x8c, 0xeb, 0x98, 0x5c, 0x6e, 0x19, 0xca, 0x6b, 0x28, 0xab, 0xe5, 0x94, 0xe2, 0x6a, 0xbe, 0x0c, 0xd7, 0x9f, 0x5e, 0x5c, 0xc9, 0xdb, 0x44, 0x74, 0x07, 0x92, 0x01, 0x73, 0xa6, 0x7b, 0xc1, 0x2e, 0x2f, 0xbe, 0xd6, 0xdc, 0x77, 0xdf, 0x22, 0x3b, 0xaf, 0x39, 0xaf, 0xe3, 0x0d, 0x82, 0xc3, 0x3c, 0xe5, 0x14, 0xf6, 0x31, 0x1e, 0xff, 0x14, 0xfb, 0x7f, 0x6e, 0x76, 0x35, 0x4a, 0x88, 0x55, 0xca, 0x7b, 0xb3, 0x2b, 0x85, 0x94, 0x88, 0xb0, 0x89, 0x7b, 0xce, 0x50, 0x65, 0xc4, 0x53, 0xe3, 0x64, 0x44, 0x75, 0x27, 0x55, 0xc8, 0x88, 0xe6, 0x61, 0xe5, 0x40, 0x12, 0x64, 0xca, 0xae, 0x02, 0x19, 0x9a, 0x21, 0x8b, 0x97, 0x9b, 0xc5, 0x29, 0x39, 0xce, 0x89, 0xa0, 0x9c, 0xcd, 0xd0, 0x5a, 0xcd, 0xf6, 0x83, 0x94, 0x42, 0x3c, 0xae, 0xdf, 0x8b, 0x35, 0xa1, 0x5c, 0x9b, 0x5b, 0x8c, 0xbd, 0xc1, 0x1e, 0x65, 0x63, 0x8f, 0xb2, 0x9c, 0x74, 0x26, 0x88, 0x98, 0x36, 0x87, 0x7a, 0xd5, 0x04, 0x66, 0x47, 0x13, 0x7b, 0x94, 0x37, 0x50, 0xcf, 0xa2, 0x6e, 0x39, 0xfc, 0x67, 0x7f, 0xe3, 0x91, 0x8b, 0xfe, 0xec, 0x6f, 0x6e, 0x1d, 0x7c, 0x9c, 0x23, 0x9c, 0x30, 0x04, 0x0b, 0x6a, 0x11, 0x6b, 0x08, 0x7a, 0xf3, 0x10, 0x6b, 0xaa, 0x95, 0xf7, 0xe4, 0xba, 0xab, 0x95, 0x47, 0xa3, 0x40, 0xa3, 0x51, 0xe8, 0x18, 0x53, 0x5e, 0xd1, 0xb8, 0xf2, 0xe6, 0x89, 0xd1, 0xc0, 0x72, 0xdf, 0x43, 0x6c, 0xfd, 0x00, 0x47, 0xe4, 0x63, 0x1c, 0x11, 0x5a, 0x51, 0x5c, 0x41, 0xc9, 0x7d, 0x78, 0x76, 0x9d, 0x32, 0x7a, 0x6d, 0x23, 0xb2, 0x74, 0x58, 0x44, 0x85, 0xc3, 0x11, 0x39, 0xa0, 0x45, 0xa2, 0x4c, 0x5d, 0x6b, 0xc5, 0x69, 0xd6, 0xdd, 0x49, 0x23, 0x72, 0x4e, 0xce, 0xe1, 0x11, 0x01, 0x38, 0x14, 0x1f, 0x93, 0xe3, 0x38, 0xff, 0x33, 0x67, 0x37, 0x81, 0x53, 0x39, 0x84, 0xbf, 0x0e, 0xe5, 0x85, 0xd9, 0x14, 0xc5, 0xf2, 0x30, 0xfe, 0xda, 0x94, 0x97, 0x0a, 0xee, 0x44, 0x09, 0x6f, 0x00, 0xe9, 0x8f, 0x01, 0x7b, 0x6d, 0xb5, 0x3b, 0x60, 0xba, 0xc3, 0x01, 0x79, 0x64, 0xf1, 0xe3, 0x42, 0x08, 0x20, 0x14, 0xb3, 0x4a, 0x70, 0xf5, 0x4c, 0xab, 0x95, 0xd9, 0x64, 0xab, 0xf3, 0x8c, 0x4b, 0xed, 0x3f, 0xad, 0x51, 0xa2, 0x5f, 0xa1, 0x15, 0xdd, 0xff, 0x91, 0x92, 0x8b, 0x11, 0x8f, 0xfa, 0xfe, 0x8f, 0x94, 0xfc, 0x55, 0x79, 0xf1, 0xff, 0x91, 0x72, 0x4b, 0x06, 0x77, 0x33, 0x2e, 0x1c, 0x41, 0x5c, 0xe0, 0x58, 0xc7, 0xb3, 0x5b, 0x94, 0x67, 0x90, 0x4a, 0xd7, 0x2a, 0x27, 0x67, 0xd3, 0xba, 0x65, 0x9e, 0xf2, 0x06, 0x62, 0x19, 0x51, 0xea, 0xb3, 0x48, 0xc5, 0xdf, 0x44, 0x7a, 0x76, 0x1e, 0xb1, 0xe2, 0x3d, 0x9c, 0xa7, 0x17, 0x0b, 0x5a, 0x94, 0x01, 0xda, 0x43, 0x52, 0x5e, 0x22, 0x6f, 0x98, 0xca, 0x61, 0xc4, 0x15, 0x8a, 0x91, 0x31, 0x8c, 0xbf, 0x87, 0xe2, 0xf8, 0x72, 0xe4, 0xb3, 0x57, 0x79, 0x88, 0x2f, 0x1c, 0xc5, 0xfe, 0x73, 0xf4, 0x07, 0x62, 0x71, 0xfd, 0x01, 0xc3, 0x67, 0xe9, 0x0f, 0xd0, 0x2e, 0x64, 0x29, 0xed, 0x42, 0x92, 0x46, 0xba, 0xcb, 0x8e, 0xec, 0x42, 0xdd, 0xa9, 0xb2, 0xdb, 0x2b, 0x09, 0xf7, 0xe6, 0x93, 0x8e, 0x52, 0x05, 0x9f, 0xdd, 0x3a, 0x79, 0x97, 0x27, 0xbb, 0x6f, 0x17, 0x96, 0x3d, 0x9d, 0xfd, 0x66, 0xb1, 0x06, 0x44, 0x52, 0xcc, 0x5c, 0x4c, 0xbb, 0xa5, 0x99, 0xf6, 0x85, 0xb4, 0x93, 0x57, 0x07, 0x9d, 0xbc, 0x1e, 0x76, 0xa7, 0xb9, 0x0d, 0x29, 0x7d, 0xf8, 0x5d, 0x47, 0x3e, 0x9f, 0xb7, 0x7d, 0x1f, 0xe5, 0xf5, 0x87, 0x78, 0x17, 0xd4, 0x0d, 0xdb, 0xb0, 0x2f, 0x3b, 0xb0, 0x1d, 0x0f, 0x91, 0x4c, 0x6e, 0xa7, 0xd5, 0x82, 0x0b, 0x24, 0x92, 0xd9, 0xfb, 0xc8, 0xe3, 0x6e, 0x0f, 0x9d, 0xd4, 0xd8, 0x39, 0x9e, 0x8e, 0x8d, 0xa2, 0x64, 0xb9, 0xc0, 0x10, 0xdf, 0x19, 0xc9, 0x17, 0x9e, 0xd3, 0x9c, 0x40, 0x6b, 0x2d, 0xcc, 0xed, 0x25, 0xdb, 0x58, 0x9c, 0x0f, 0xc5, 0xf8, 0x8e, 0x54, 0xf7, 0xb7, 0x92, 0x26, 0xb3, 0xa6, 0xd7, 0x2c, 0xce, 0xc6, 0x65, 0xbb, 0x3b, 0x9d, 0x53, 0xb6, 0x9e, 0xd8, 0xcd, 0x7a, 0x12, 0xb9, 0xa1, 0x6e, 0x4e, 0x37, 0xb5, 0xb3, 0x0f, 0xb8, 0xef, 0xee, 0xd8, 0xbf, 0x1b, 0xa4, 0xe5, 0x27, 0x39, 0x9a, 0xcf, 0x5a, 0x8e, 0xe2, 0x83, 0xf2, 0xa4, 0xa9, 0x9e, 0xf6, 0x33, 0xb0, 0x35, 0x5b, 0xd6, 0xe8, 0xfa, 0x89, 0x57, 0x6c, 0xa4, 0xf7, 0x36, 0x6e, 0x95, 0xd5, 0xe2, 0x4f, 0x93, 0x97, 0x90, 0x7e, 0x22, 0x47, 0x46, 0x2b, 0x5e, 0x66, 0xe2, 0xc8, 0x68, 0x25, 0xb2, 0x87, 0xe3, 0xa2, 0x65, 0x70, 0x5c, 0x34, 0x87, 0xf4, 0xba, 0x6c, 0x93, 0x6e, 0x70, 0x02, 0x59, 0x40, 0x5a, 0xd6, 0x39, 0xe1, 0xf4, 0x7d, 0xd7, 0x57, 0x81, 0x8e, 0x2d, 0xaa, 0x7b, 0xe4, 0x0c, 0xe9, 0x06, 0xcf, 0x80, 0xd0, 0x6f, 0x0d, 0x75, 0x63, 0xfd, 0xf9, 0xcb, 0xfb, 0x48, 0x5b, 0xfc, 0x18, 0xb5, 0x8e, 0x62, 0x37, 0x4a, 0x8d, 0x26, 0xab, 0x5f, 0x2a, 0x6f, 0x07, 0xf9, 0x0c, 0xb7, 0xab, 0x8b, 0xdb, 0xd5, 0x29, 0xc3, 0xa4, 0xfd, 0xab, 0xaf, 0x7b, 0x61, 0x0f, 0xd8, 0x22, 0x99, 0xdf, 0x5a, 0xdb, 0xa1, 0x3b, 0xb0, 0x76, 0x39, 0x4c, 0xfa, 0xa9, 0x0c, 0xe9, 0xab, 0x31, 0xf5, 0x71, 0x91, 0x8a, 0x12, 0x1e, 0xa5, 0xf6, 0xca, 0xa0, 0xff, 0x09, 0xf5, 0xa1, 0x11, 0xe0, 0xc4, 0xd3, 0x31, 0xfc, 0x1d, 0x5c, 0x93, 0xdd, 0x4f, 0xf6, 0xc3, 0x87, 0xfb, 0xc9, 0xd3, 0xd5, 0x41, 0x2c, 0xff, 0x8e, 0x31, 0x5a, 0x56, 0x4b, 0x68, 0x1c, 0x70, 0x9c, 0x25, 0x49, 0xf7, 0x56, 0x8f, 0xdd, 0x57, 0xfe, 0x61, 0xee, 0x1f, 0x8e, 0x92, 0x56, 0x56, 0xe5, 0xd1, 0xc3, 0x0e, 0xbf, 0xbd, 0x19, 0x72, 0x5e, 0x3b, 0x2c, 0x45, 0xf7, 0x5b, 0x79, 0x57, 0xb6, 0x99, 0x21, 0x4e, 0x23, 0x32, 0x99, 0x2c, 0x97, 0xad, 0xb4, 0x02, 0xb8, 0x9e, 0xa3, 0x2e, 0xd1, 0x79, 0x81, 0xc1, 0x7d, 0xbd, 0x88, 0x2c, 0x17, 0x8c, 0x45, 0xfc, 0x64, 0x69, 0x50, 0xa3, 0x8d, 0xa0, 0x99, 0xbe, 0xa3, 0xbd, 0xb5, 0xa3, 0x5b, 0x49, 0x7f, 0x84, 0xad, 0x9e, 0xe3, 0x29, 0x13, 0xb4, 0xe9, 0x05, 0x19, 0x8c, 0x87, 0xec, 0xfe, 0xf1, 0x1a, 0x61, 0x7c, 0x9e, 0xc7, 0xe3, 0xe1, 0xb4, 0x68, 0x78, 0xc4, 0xfb, 0xe3, 0x37, 0xf0, 0xb9, 0xe7, 0x0d, 0x3b, 0x62, 0xec, 0x23, 0x2a, 0x07, 0xef, 0x73, 0xb6, 0xc7, 0xda, 0x20, 0xdb, 0x05, 0x5f, 0xc4, 0xfb, 0x2f, 0x6e, 0x8b, 0xb5, 0x42, 0x96, 0x0b, 0x72, 0xf1, 0x3e, 0x77, 0x4b, 0xec, 0x6e, 0x90, 0x0c, 0xec, 0xdb, 0xc2, 0x2b, 0xa5, 0xf1, 0xd5, 0x27, 0xe9, 0xf9, 0x5a, 0x29, 0xe9, 0x84, 0xcf, 0x0b, 0x57, 0x39, 0xd2, 0xc3, 0x12, 0xc2, 0x42, 0x1e, 0xdd, 0x2c, 0x1a, 0xdd, 0x08, 0x8d, 0xb8, 0x3e, 0xec, 0x93, 0xa7, 0x4b, 0xb9, 0xb2, 0xf7, 0x6a, 0x76, 0xd3, 0xb2, 0xd5, 0x6a, 0x5a, 0xd4, 0x69, 0x72, 0x61, 0x8b, 0xed, 0x11, 0xb3, 0xc7, 0x72, 0xba, 0x41, 0xe8, 0x9f, 0xc8, 0x74, 0xf2, 0x63, 0x91, 0xca, 0xf9, 0x04, 0x0d, 0x0e, 0xee, 0x81, 0xac, 0x60, 0x77, 0xb3, 0xc9, 0xe9, 0x06, 0xef, 0xf9, 0xc7, 0x64, 0xfd, 0xdb, 0xa4, 0x83, 0x92, 0x45, 0xeb, 0x12, 0x7e, 0x67, 0x0c, 0xae, 0xe5, 0x77, 0x3e, 0x7a, 0xf7, 0x16, 0xbd, 0x33, 0x92, 0xee, 0x2b, 0xae, 0x1c, 0x4a, 0xd7, 0x3e, 0x85, 0x57, 0xca, 0x93, 0x11, 0xec, 0xe2, 0x3c, 0x95, 0x94, 0xe7, 0x0f, 0x94, 0x27, 0xa3, 0x0b, 0xdf, 0x0d, 0xec, 0x81, 0x4c, 0x8a, 0xef, 0xcd, 0xef, 0x02, 0xe7, 0x77, 0xc9, 0x06, 0x67, 0xe6, 0x3b, 0xa4, 0xd9, 0x92, 0xd9, 0x15, 0x53, 0xb1, 0x37, 0xb5, 0x3f, 0x25, 0x72, 0xbe, 0xf5, 0x59, 0xd9, 0x23, 0xe9, 0x48, 0xc3, 0x34, 0x2b, 0x26, 0xe9, 0x4e, 0xf7, 0x4c, 0x43, 0xcc, 0x9e, 0x56, 0x8e, 0x38, 0xbb, 0x41, 0xce, 0x95, 0x26, 0x2f, 0x8a, 0x99, 0x0a, 0xb8, 0x37, 0xa6, 0x32, 0xdd, 0xef, 0x17, 0x9c, 0xae, 0xe9, 0xaa, 0x2a, 0xea, 0xb4, 0xfa, 0x42, 0xf7, 0xfd, 0xfb, 0x79, 0xc4, 0x60, 0x18, 0x3d, 0x85, 0xf5, 0xd4, 0x9e, 0x42, 0x3c, 0x3e, 0x49, 0x78, 0x7c, 0xcf, 0x33, 0x84, 0xc7, 0x66, 0x6b, 0x95, 0x54, 0xfd, 0xe3, 0xdf, 0xb8, 0xab, 0xa0, 0x56, 0x1e, 0x62, 0x5c, 0x5e, 0xcf, 0xb8, 0xbc, 0x4e, 0x06, 0xc3, 0x05, 0xe7, 0x0a, 0xb0, 0xe1, 0x98, 0xd3, 0xf9, 0x51, 0xd4, 0x64, 0x87, 0x62, 0x7a, 0x5f, 0xc8, 0x63, 0xea, 0xb2, 0xf0, 0xa9, 0x84, 0xd1, 0xfd, 0x2d, 0xf0, 0xca, 0x14, 0x67, 0xa5, 0x38, 0x42, 0x14, 0xb0, 0xd8, 0x5d, 0x8f, 0xcf, 0x06, 0xff, 0x53, 0xe0, 0x25, 0x1b, 0x6d, 0xc4, 0xf1, 0x86, 0xbf, 0x6c, 0x64, 0x16, 0x9c, 0xc3, 0xe5, 0xcf, 0xd5, 0x46, 0xa6, 0x8e, 0x46, 0xc6, 0xdd, 0x0c, 0x59, 0x10, 0x60, 0x5c, 0xb9, 0x81, 0xac, 0xc0, 0xf1, 0xd9, 0x08, 0xf5, 0x8c, 0x47, 0x39, 0x6e, 0x3f, 0x2c, 0xc2, 0xe7, 0x0c, 0x68, 0x60, 0x1c, 0xfb, 0xa2, 0xbb, 0x02, 0x96, 0xe2, 0x73, 0x26, 0xc8, 0x6b, 0x20, 0x0f, 0x71, 0x0b, 0x7b, 0xdb, 0x48, 0xfe, 0x59, 0x0e, 0xc6, 0x90, 0xda, 0xd5, 0x0a, 0x4d, 0xde, 0xd3, 0x35, 0x73, 0xcb, 0x61, 0x05, 0xc5, 0x90, 0x39, 0x18, 0x43, 0xda, 0xbb, 0xe8, 0xad, 0x44, 0xea, 0x4a, 0xb2, 0xad, 0x3f, 0x18, 0x43, 0xe8, 0x2d, 0x7d, 0x27, 0x91, 0xda, 0x3a, 0xf0, 0x14, 0xc8, 0xf8, 0xa6, 0x51, 0x68, 0xfc, 0x9e, 0x0e, 0xcc, 0xf5, 0xc1, 0xea, 0x7f, 0x7e, 0xb9, 0x4d, 0xc1, 0xda, 0x4b, 0xe9, 0xdc, 0x0f, 0xa9, 0xbb, 0xc7, 0x5d, 0xcd, 0x7a, 0x57, 0x67, 0x19, 0x5a, 0xf5, 0x36, 0xdd, 0xf1, 0x4e, 0x5c, 0x97, 0x1b, 0x4e, 0x74, 0x49, 0x15, 0x36, 0x0f, 0x1d, 0xb0, 0x43, 0xe0, 0xa5, 0x2e, 0xac, 0xad, 0xf6, 0xad, 0x27, 0x88, 0x0e, 0x21, 0xdd, 0xaf, 0x3f, 0xdc, 0xe5, 0xc2, 0xda, 0xdf, 0xdd, 0xe3, 0xaf, 0x0c, 0x54, 0xe2, 0x9b, 0x86, 0x17, 0xe8, 0x79, 0xe9, 0xbb, 0x8f, 0xfb, 0x2b, 0x02, 0x15, 0x87, 0xb0, 0x46, 0x7c, 0x6a, 0x7c, 0x77, 0xb7, 0xdf, 0x1f, 0xf0, 0xcb, 0x56, 0x82, 0x38, 0x69, 0xe4, 0x1d, 0xbf, 0x5f, 0xf2, 0xaf, 0x01, 0xe4, 0x99, 0xc6, 0x76, 0x28, 0xb5, 0xac, 0x06, 0x94, 0xa3, 0xf4, 0x6d, 0x40, 0x67, 0x98, 0xa7, 0x17, 0x78, 0xdd, 0xb0, 0xe2, 0xa1, 0xaa, 0x32, 0xe3, 0xe9, 0x5a, 0xcf, 0x2a, 0x58, 0xd9, 0x7b, 0xa8, 0xd4, 0x74, 0x7a, 0x3e, 0xa6, 0xb5, 0x3e, 0x54, 0x51, 0x62, 0x3c, 0x1d, 0xc4, 0xb4, 0xd5, 0xbd, 0x07, 0x8b, 0x4d, 0xbf, 0x7a, 0x81, 0xd6, 0xcf, 0x8a, 0xf2, 0xe2, 0x21, 0x71, 0xda, 0x77, 0xa2, 0xfb, 0xf9, 0x83, 0x1c, 0x07, 0x56, 0x39, 0xd1, 0xf5, 0xeb, 0xe7, 0x85, 0xa6, 0xf8, 0xc9, 0x75, 0x27, 0xd7, 0x9d, 0x58, 0xf7, 0xf4, 0x53, 0x50, 0xba, 0xdc, 0x88, 0x2d, 0x2b, 0x95, 0xf5, 0x92, 0x2e, 0xd4, 0xb9, 0xe0, 0x3d, 0xa4, 0x19, 0x15, 0x50, 0xba, 0x17, 0xc7, 0x7c, 0x39, 0x28, 0xa4, 0x5f, 0xe4, 0xc1, 0x36, 0xba, 0x8a, 0x08, 0x83, 0x11, 0x33, 0x23, 0x45, 0x48, 0x7f, 0xcb, 0x91, 0xfe, 0x7a, 0x64, 0x17, 0x5e, 0x89, 0xfe, 0x96, 0x23, 0xfd, 0xb5, 0x5a, 0x07, 0xe4, 0xe9, 0xc2, 0xb7, 0x45, 0x16, 0xfb, 0xb5, 0x40, 0x2c, 0xd6, 0x4d, 0xf3, 0x31, 0x26, 0x1b, 0x8b, 0x06, 0x64, 0x7d, 0xd6, 0x00, 0x79, 0x1b, 0x21, 0xbf, 0x38, 0x7d, 0x44, 0x7f, 0x61, 0x64, 0xff, 0x1b, 0x88, 0xb9, 0xa7, 0x08, 0x73, 0x11, 0xb3, 0x10, 0xee, 0x95, 0x7b, 0x09, 0x7f, 0x33, 0xac, 0xd5, 0xd2, 0x3c, 0xf2, 0x87, 0x23, 0x1f, 0x67, 0xec, 0xbd, 0x87, 0xb1, 0x77, 0x3d, 0x62, 0x5e, 0xa1, 0x88, 0xf4, 0x83, 0xab, 0x63, 0xc4, 0xe1, 0xa3, 0x6f, 0xb3, 0x3d, 0x4e, 0x29, 0xe5, 0x71, 0x30, 0x06, 0xdb, 0x2d, 0x6e, 0xc4, 0x6e, 0x28, 0x26, 0xcf, 0xa2, 0xba, 0x73, 0x8c, 0xc1, 0x00, 0x0f, 0xa9, 0xd8, 0x9a, 0xe0, 0x1a, 0x65, 0x29, 0x5c, 0xc3, 0x25, 0x7d, 0x59, 0x76, 0x22, 0xd6, 0x7e, 0x81, 0xb1, 0x76, 0x16, 0x63, 0xed, 0x2c, 0x15, 0x6b, 0xef, 0x23, 0x2b, 0x2a, 0xcf, 0x97, 0xe5, 0x0c, 0xcb, 0x97, 0x03, 0xb1, 0xc0, 0x00, 0xe1, 0xe8, 0x20, 0x59, 0x7e, 0x16, 0xd3, 0xa9, 0xcd, 0xd1, 0x01, 0xc9, 0x63, 0x02, 0x15, 0x26, 0x69, 0x11, 0xd0, 0x05, 0x08, 0x0a, 0x78, 0xf5, 0x12, 0x8c, 0x50, 0x5e, 0x0c, 0x95, 0xbf, 0x87, 0x18, 0x2f, 0x66, 0xaf, 0xb9, 0x08, 0x7e, 0x5f, 0x73, 0x3a, 0xd0, 0xe5, 0xf3, 0x76, 0xca, 0x7a, 0x6f, 0x8c, 0xed, 0xfb, 0x49, 0x97, 0xbc, 0x14, 0x65, 0x61, 0x3b, 0x9d, 0x45, 0x92, 0x9e, 0x99, 0xff, 0x67, 0x81, 0x55, 0xb0, 0x29, 0x11, 0xa9, 0xfe, 0x6f, 0xdb, 0x72, 0x41, 0xe9, 0xad, 0x0e, 0xe8, 0x65, 0x0f, 0x14, 0xed, 0x48, 0x69, 0x3b, 0xca, 0xdf, 0x67, 0x7b, 0xaa, 0x18, 0x45, 0xdb, 0x61, 0xbb, 0x9b, 0x76, 0xf7, 0x24, 0x21, 0x1d, 0xb1, 0xe6, 0xf6, 0xfd, 0xea, 0x19, 0x06, 0xd2, 0xf0, 0x33, 0x44, 0xc5, 0x32, 0x8a, 0xdc, 0xb0, 0x29, 0xae, 0x0f, 0x98, 0xc3, 0xba, 0x7b, 0xc6, 0x58, 0x27, 0x6b, 0x76, 0xf7, 0x52, 0x3a, 0x69, 0x09, 0x0a, 0x8d, 0x3e, 0x35, 0x75, 0x8b, 0x9a, 0x7a, 0x03, 0xa7, 0x66, 0xc5, 0x3a, 0xc9, 0xe3, 0x60, 0x34, 0x01, 0xb5, 0x2c, 0x86, 0x99, 0x89, 0x21, 0x26, 0xc9, 0xf9, 0xae, 0x01, 0x39, 0x4f, 0x60, 0x50, 0x3e, 0x63, 0xd0, 0x97, 0x11, 0x83, 0xbe, 0x4c, 0x18, 0x74, 0x3f, 0x42, 0x6d, 0x20, 0xb4, 0xfe, 0x00, 0xe3, 0xcd, 0xa8, 0x7d, 0x08, 0xf1, 0xe6, 0x04, 0xe1, 0xcd, 0xba, 0x7e, 0xe6, 0xdc, 0xae, 0x0a, 0x67, 0x65, 0x07, 0xc8, 0xa7, 0x19, 0x5f, 0xba, 0x19, 0x5f, 0xd6, 0xaa, 0x3b, 0x34, 0x8d, 0x1c, 0xf9, 0x99, 0x4e, 0xa3, 0x6c, 0x36, 0x5c, 0xab, 0x97, 0x22, 0xdf, 0x2a, 0x59, 0x01, 0x64, 0xdb, 0x3d, 0x25, 0x6e, 0x15, 0xb9, 0xc9, 0x81, 0x2b, 0x9d, 0xa1, 0x18, 0xad, 0xc5, 0x43, 0x3d, 0x0f, 0x1c, 0xa1, 0x35, 0x78, 0x68, 0xc3, 0xd6, 0x5f, 0x6f, 0xeb, 0x69, 0x4d, 0x3b, 0xd8, 0x1d, 0xc9, 0x8c, 0x1a, 0x7a, 0xb1, 0x35, 0x3f, 0x1f, 0x68, 0xd6, 0x5b, 0x4d, 0x0f, 0x3c, 0xcb, 0xb1, 0xfd, 0xb2, 0xa5, 0xb4, 0xdf, 0xf7, 0xc4, 0xd6, 0xda, 0x81, 0x6c, 0x42, 0xd6, 0xc7, 0xe4, 0xe2, 0xec, 0xe7, 0xbe, 0x79, 0x58, 0x19, 0xf6, 0xfb, 0x16, 0xc6, 0x1a, 0x2f, 0xd9, 0x2a, 0x5f, 0x7d, 0x56, 0x32, 0xc9, 0x06, 0xdb, 0x73, 0xdf, 0x89, 0xb5, 0xa7, 0xed, 0x8f, 0xb5, 0x7c, 0x8c, 0x83, 0x1c, 0x94, 0xf5, 0xc9, 0x79, 0x86, 0xee, 0x1d, 0xea, 0x5a, 0xb8, 0x81, 0x4f, 0xd4, 0x8d, 0x92, 0xce, 0x56, 0x29, 0x0f, 0xd4, 0xfe, 0x2e, 0x9f, 0x63, 0x3b, 0x7b, 0xc9, 0x82, 0xd0, 0x45, 0x6d, 0xc5, 0x76, 0x9a, 0xe6, 0x7f, 0xb8, 0x1f, 0x4a, 0x45, 0x7b, 0xcd, 0xf1, 0xf6, 0xde, 0x47, 0xfe, 0xc3, 0xd5, 0xd6, 0xfe, 0x5a, 0x6d, 0xed, 0x91, 0x6d, 0x3d, 0xd8, 0x5e, 0xdd, 0xc1, 0x98, 0xd0, 0x48, 0x58, 0x65, 0x68, 0xd5, 0xc9, 0xdc, 0x5e, 0xb6, 0x22, 0xc8, 0xb6, 0x1b, 0xb8, 0xa5, 0xdd, 0x4e, 0xdd, 0xc9, 0x4e, 0xb9, 0xb4, 0xf8, 0xb9, 0x6f, 0x1e, 0xc1, 0x96, 0x54, 0x2e, 0xec, 0x6e, 0xbc, 0xe4, 0xf4, 0xfd, 0xf6, 0x79, 0x6a, 0xad, 0xf3, 0xb9, 0x6f, 0xc5, 0xda, 0x75, 0xa2, 0xb5, 0xb6, 0x05, 0xb2, 0xbe, 0x2c, 0xb9, 0xb5, 0xdd, 0x52, 0xc6, 0x60, 0xf7, 0x20, 0xb6, 0xb8, 0x5d, 0xd9, 0x8f, 0x2d, 0x76, 0xe8, 0x6c, 0x3e, 0xf9, 0x40, 0xed, 0xef, 0xbc, 0xde, 0xf1, 0x2d, 0x2e, 0xc7, 0x16, 0xdb, 0x4d, 0x27, 0xee, 0x1d, 0xdb, 0xea, 0x13, 0x31, 0x1c, 0x31, 0x43, 0x19, 0xb5, 0xfa, 0xbe, 0x1f, 0xff, 0x9a, 0x76, 0x4a, 0x08, 0xd6, 0x28, 0x55, 0x66, 0x3b, 0x75, 0x4c, 0x29, 0x75, 0xa7, 0x37, 0xc9, 0xb9, 0x59, 0xeb, 0xa6, 0x55, 0x6a, 0xfc, 0x0f, 0xeb, 0xff, 0x80, 0xeb, 0x3f, 0x7f, 0xa2, 0x6b, 0x61, 0x0f, 0xc2, 0xaa, 0x07, 0x61, 0x35, 0xd5, 0x5a, 0x21, 0xbf, 0xa9, 0xd5, 0x2c, 0x4e, 0x19, 0xc7, 0xd4, 0xdc, 0x33, 0x71, 0xcd, 0xa4, 0xcb, 0x4f, 0xa3, 0x9a, 0x5c, 0xb3, 0x9c, 0x69, 0x7b, 0x36, 0xd1, 0xcb, 0xa4, 0x5a, 0x26, 0xdb, 0xb8, 0x16, 0xed, 0xec, 0x50, 0xab, 0x65, 0x62, 0xec, 0x19, 0x4c, 0x94, 0x7e, 0xa4, 0x98, 0x4a, 0xdf, 0xf8, 0xe0, 0xaf, 0xb7, 0x6d, 0x40, 0xdc, 0x89, 0x45, 0x6a, 0x57, 0x1b, 0xb6, 0x77, 0x5a, 0xd3, 0x7e, 0xf1, 0x1c, 0xe2, 0xce, 0xe4, 0xad, 0xcf, 0xca, 0xde, 0x6a, 0x4b, 0xa8, 0xe7, 0x9b, 0xbf, 0x56, 0xae, 0xf8, 0x2b, 0x16, 0xae, 0x6d, 0xfc, 0x40, 0xf2, 0x1d, 0x7d, 0x56, 0x9a, 0x2c, 0x1b, 0xab, 0x7b, 0xbf, 0x13, 0x6b, 0xe8, 0xa1, 0x1d, 0xc0, 0x96, 0x4b, 0x76, 0xb0, 0x07, 0x64, 0x03, 0xe7, 0xc3, 0x15, 0x0c, 0xb7, 0xec, 0x03, 0x69, 0xca, 0xe0, 0x5a, 0x84, 0xfe, 0xc6, 0xd5, 0xca, 0xd3, 0x1b, 0x23, 0x46, 0xbb, 0x4e, 0xf2, 0xc9, 0xfd, 0x5a, 0xeb, 0xe6, 0x12, 0xf4, 0x8b, 0x91, 0x37, 0x60, 0x7f, 0x18, 0x37, 0x73, 0x70, 0xdd, 0x9e, 0xab, 0xca, 0xef, 0x46, 0x0f, 0xb5, 0x96, 0xcf, 0x35, 0x3d, 0x14, 0x5b, 0x10, 0x86, 0x7a, 0x70, 0xee, 0x18, 0x1c, 0xd5, 0x3f, 0x3a, 0xe8, 0x24, 0x49, 0x32, 0x5d, 0xdd, 0x39, 0x16, 0xef, 0x2d, 0xe5, 0x17, 0x4d, 0x80, 0xab, 0x30, 0xf3, 0xab, 0x87, 0x0b, 0xd3, 0x1f, 0xee, 0xfa, 0xe5, 0xa1, 0xc6, 0xdc, 0x68, 0xda, 0x40, 0x37, 0xd2, 0xa7, 0x9e, 0x56, 0xc3, 0x16, 0x94, 0x4e, 0xc8, 0xbe, 0x4e, 0xd2, 0x6f, 0x8b, 0xc9, 0xab, 0x9d, 0x15, 0x0b, 0xef, 0x73, 0x1b, 0xdd, 0x53, 0xe9, 0xcb, 0xc1, 0xae, 0x21, 0xb2, 0x04, 0x52, 0xef, 0x5f, 0x1d, 0xa0, 0x59, 0x23, 0x2c, 0xf1, 0xb6, 0x75, 0x3a, 0x75, 0x95, 0xeb, 0x5c, 0xe6, 0xca, 0xf5, 0x95, 0xf7, 0x90, 0xb7, 0x56, 0xcb, 0xeb, 0xdf, 0x7c, 0x11, 0xa1, 0x5d, 0xbe, 0xb0, 0xb3, 0xf1, 0xd2, 0xab, 0x03, 0x52, 0xe5, 0xd1, 0x01, 0xab, 0x1e, 0xe7, 0xc9, 0xd0, 0x77, 0x3a, 0x71, 0x9e, 0x74, 0xb6, 0x7c, 0x6c, 0x2d, 0x77, 0x64, 0x60, 0xef, 0xf5, 0xd9, 0xbf, 0x4d, 0xe4, 0x3b, 0xfa, 0x62, 0xd5, 0x1f, 0x03, 0xe0, 0x30, 0x0d, 0x6d, 0x7a, 0xf5, 0x57, 0x0b, 0xd7, 0xb6, 0x2a, 0x7b, 0xd7, 0x46, 0x96, 0x58, 0x2b, 0xad, 0x28, 0xe8, 0xca, 0x7b, 0xaf, 0xbf, 0x29, 0x31, 0x7a, 0x58, 0xda, 0xf3, 0xaf, 0x3e, 0x2f, 0x61, 0x79, 0x33, 0xa4, 0xa4, 0x79, 0x17, 0xb0, 0xe2, 0xcc, 0x9b, 0x76, 0x73, 0x52, 0x3e, 0x94, 0x3e, 0x8f, 0x0e, 0xbc, 0x3a, 0x80, 0x25, 0xae, 0xa7, 0x12, 0x71, 0xc4, 0xd7, 0x46, 0x4c, 0xd6, 0x4a, 0x29, 0x28, 0xe9, 0xe4, 0x3e, 0xc4, 0x2c, 0xe1, 0x93, 0x9c, 0xb5, 0x75, 0xc6, 0x42, 0x95, 0xc6, 0xff, 0xf5, 0x23, 0xe3, 0x61, 0xeb, 0x30, 0x0f, 0xc5, 0x08, 0xae, 0x24, 0xc9, 0x3a, 0x7c, 0xaf, 0x0f, 0x14, 0x9a, 0xdf, 0x58, 0x4f, 0xf0, 0x45, 0x6c, 0xb7, 0xfc, 0xf6, 0x37, 0xc9, 0x50, 0x1e, 0xbc, 0x8f, 0xe1, 0x3b, 0xf0, 0xfa, 0xf3, 0x0c, 0x5d, 0x1d, 0x43, 0x77, 0x67, 0xb0, 0xeb, 0xb6, 0x01, 0xa2, 0xd3, 0x95, 0x31, 0x84, 0x2d, 0xae, 0x7c, 0x5c, 0x15, 0x0b, 0xef, 0x77, 0xfa, 0x7f, 0x7b, 0x10, 0x21, 0x9c, 0x29, 0xbe, 0x62, 0x08, 0xf3, 0xfd, 0xfc, 0x8f, 0x4c, 0xf0, 0xea, 0x6f, 0x70, 0xa6, 0x23, 0x8c, 0x97, 0xf2, 0x57, 0x07, 0x63, 0x02, 0xce, 0x27, 0xd7, 0x55, 0xde, 0x43, 0xb0, 0xa6, 0x53, 0x5f, 0x4f, 0x32, 0xa4, 0x9f, 0x27, 0xd8, 0x08, 0x48, 0x7f, 0xab, 0x93, 0x4e, 0x8b, 0x13, 0x90, 0x2e, 0x4e, 0x82, 0x74, 0xd5, 0x1f, 0x77, 0xc0, 0xd1, 0x97, 0xaa, 0x3e, 0x60, 0x68, 0xdf, 0xf3, 0xea, 0x11, 0xa4, 0x09, 0x70, 0x32, 0xa6, 0xc2, 0x7c, 0xa9, 0x0a, 0xf3, 0x5d, 0xb7, 0x5e, 0x05, 0xe6, 0x09, 0xea, 0x21, 0x60, 0xfe, 0x95, 0x31, 0x30, 0x1f, 0xd4, 0xa0, 0x7e, 0xcf, 0xab, 0x2f, 0x8c, 0x81, 0xfa, 0x93, 0xc2, 0x82, 0x4f, 0xb5, 0x89, 0x2c, 0xf5, 0xde, 0x49, 0xeb, 0x8a, 0xd2, 0x4c, 0x84, 0x3e, 0x72, 0x99, 0x42, 0xe4, 0x29, 0x25, 0x05, 0x60, 0xfa, 0xd5, 0x30, 0xa4, 0xa9, 0x6b, 0x9a, 0x49, 0x9e, 0x3b, 0x19, 0xf2, 0xdb, 0x78, 0x6e, 0x3f, 0x0e, 0x06, 0xa7, 0xe1, 0x64, 0xf7, 0xc9, 0x6e, 0x47, 0x7a, 0x65, 0xb7, 0xb3, 0xf2, 0xb7, 0xbf, 0x72, 0x15, 0x40, 0x3e, 0x4a, 0xdb, 0x96, 0x67, 0xf1, 0x0b, 0x9b, 0x0f, 0xc7, 0xe9, 0x4e, 0x86, 0x3e, 0xe6, 0x7e, 0x75, 0xe0, 0xd5, 0x77, 0xc0, 0x8c, 0x6b, 0xef, 0x17, 0x7e, 0xf9, 0xdc, 0x72, 0xbf, 0xcb, 0xbf, 0xf0, 0x7e, 0xf7, 0x24, 0x84, 0x2a, 0x45, 0x89, 0x5e, 0x77, 0x22, 0xc6, 0xd0, 0xe6, 0x7b, 0xc4, 0x4d, 0x43, 0xef, 0x7d, 0x3b, 0xee, 0x95, 0x17, 0x67, 0xf7, 0x7e, 0xa1, 0x09, 0x74, 0xa0, 0xc3, 0x5f, 0x3d, 0xd2, 0xa4, 0x8d, 0x8b, 0x7b, 0xf6, 0x6e, 0x0c, 0x9f, 0x3f, 0x71, 0x5f, 0xd5, 0x87, 0x3b, 0x40, 0xce, 0xf0, 0x64, 0x0e, 0x60, 0x1d, 0xbf, 0x1d, 0x78, 0x6d, 0x60, 0x61, 0x17, 0x42, 0xa9, 0x2b, 0x52, 0x6a, 0x0d, 0x5a, 0x33, 0x8e, 0xc5, 0xa4, 0x0a, 0x79, 0xe8, 0x0b, 0x4d, 0x0a, 0xfe, 0xc3, 0xdf, 0x51, 0x65, 0xf4, 0xdb, 0x1b, 0xbf, 0xdd, 0x93, 0xdd, 0xfb, 0x8b, 0x97, 0xf0, 0xcb, 0x58, 0xd5, 0x87, 0x01, 0x50, 0x73, 0x67, 0xd8, 0x83, 0xd6, 0xe0, 0xd6, 0xe7, 0x31, 0xf7, 0x59, 0x01, 0x81, 0x84, 0xd6, 0x12, 0xc7, 0xee, 0xcc, 0x66, 0xfc, 0xcb, 0xc1, 0xb5, 0x56, 0x2e, 0xcd, 0x5e, 0x5c, 0x13, 0x9a, 0x86, 0x7a, 0x54, 0xec, 0x33, 0x27, 0xb0, 0x4f, 0xe0, 0x9e, 0x3d, 0xfd, 0xc4, 0xba, 0x13, 0x6b, 0x5d, 0x69, 0x95, 0xeb, 0x17, 0x5c, 0x6a, 0x82, 0xc2, 0x38, 0xf6, 0x21, 0xfe, 0x4d, 0x1a, 0x8f, 0x7f, 0xce, 0xea, 0xdf, 0xfe, 0xea, 0x97, 0x87, 0x96, 0xcf, 0xb1, 0xea, 0x17, 0x76, 0xba, 0xcd, 0x6e, 0x1d, 0x5b, 0xf7, 0xd1, 0xfb, 0xb5, 0x88, 0x69, 0x93, 0xe8, 0x94, 0xc4, 0xad, 0xa3, 0xe7, 0x13, 0xb1, 0x57, 0x9f, 0xb3, 0x1a, 0xb7, 0xdc, 0xff, 0xd0, 0x7d, 0x72, 0x89, 0xf4, 0x7a, 0x12, 0x47, 0xb8, 0xff, 0xd5, 0xe7, 0x64, 0xc3, 0x7f, 0x3d, 0x77, 0xe2, 0xbe, 0x85, 0x5d, 0xec, 0x35, 0xcb, 0x81, 0x63, 0x99, 0x8e, 0xf8, 0x71, 0xea, 0x66, 0x29, 0x29, 0x57, 0x27, 0x8e, 0xb5, 0x78, 0x6f, 0xb2, 0x06, 0x25, 0xcc, 0x21, 0x9f, 0xd1, 0x34, 0x91, 0x02, 0x6f, 0xcd, 0x21, 0xca, 0x45, 0x3b, 0x22, 0x12, 0xe9, 0x3b, 0xa8, 0x5a, 0x59, 0xeb, 0xc5, 0x9c, 0x63, 0xae, 0x95, 0xe3, 0x4c, 0x50, 0xb2, 0xf4, 0x54, 0x4a, 0x46, 0x94, 0xca, 0x8e, 0x5c, 0xfb, 0x44, 0x8f, 0x2b, 0xfd, 0xa1, 0xae, 0x89, 0xe7, 0xda, 0x6f, 0x07, 0x7e, 0x7b, 0x1e, 0xcc, 0x3b, 0xbb, 0x76, 0x76, 0x9d, 0x62, 0xab, 0x95, 0x93, 0x31, 0x39, 0x5b, 0xb3, 0x55, 0x2f, 0xba, 0x64, 0xd2, 0xef, 0xed, 0x09, 0x5f, 0x3c, 0xb1, 0xfe, 0xb7, 0xcf, 0x2f, 0xec, 0xc6, 0x16, 0x76, 0x47, 0x32, 0xac, 0x69, 0xc7, 0x50, 0x8a, 0xb7, 0x2e, 0x60, 0xfe, 0xd2, 0x91, 0xa0, 0xad, 0xd4, 0x42, 0xb2, 0xb4, 0xec, 0x17, 0x2d, 0xdc, 0x26, 0x38, 0xaa, 0x18, 0x1b, 0x6c, 0x43, 0x6e, 0x4d, 0xe2, 0x4c, 0x4e, 0xc5, 0x4a, 0xe2, 0x46, 0xf3, 0x3e, 0x34, 0xc1, 0x6b, 0xe7, 0x11, 0x37, 0xd3, 0x76, 0x76, 0x63, 0xae, 0x7c, 0x2f, 0xf2, 0x8f, 0xdf, 0x20, 0xb6, 0x70, 0x3e, 0x15, 0x1f, 0x4f, 0xc5, 0x78, 0xed, 0xd6, 0x2d, 0xbb, 0xb0, 0x5d, 0x5f, 0x62, 0xdb, 0x84, 0xaf, 0x9a, 0xa0, 0x10, 0xfc, 0xf3, 0x02, 0xf3, 0x2c, 0xf7, 0x14, 0xc2, 0xe9, 0xcd, 0xd7, 0xcf, 0xd3, 0x76, 0x30, 0xf6, 0xde, 0x1b, 0x3e, 0x39, 0xef, 0x8f, 0x0d, 0x70, 0x6a, 0xad, 0x0a, 0xd1, 0x0c, 0xeb, 0x7c, 0xeb, 0x94, 0x63, 0xdd, 0x52, 0x35, 0x61, 0x8f, 0x4a, 0xb5, 0x4a, 0xc7, 0x41, 0xf4, 0x6e, 0x81, 0x49, 0x82, 0x86, 0x39, 0x12, 0xf0, 0x34, 0x8c, 0x87, 0x27, 0x9d, 0x98, 0x1c, 0xef, 0x71, 0x19, 0x1e, 0x5a, 0x87, 0xf9, 0xf2, 0x85, 0xc5, 0x71, 0xa1, 0xe9, 0x8d, 0x1e, 0xce, 0xab, 0xc2, 0xf4, 0x8d, 0x18, 0xcb, 0xec, 0xeb, 0x12, 0x90, 0x24, 0xbf, 0x03, 0x04, 0xc9, 0xe3, 0xeb, 0xdf, 0xe8, 0x56, 0xe7, 0x75, 0x86, 0x55, 0x7f, 0x6c, 0x9d, 0xe4, 0xb7, 0xce, 0x63, 0x1e, 0x3a, 0xac, 0xc6, 0x19, 0x58, 0x05, 0x0e, 0x86, 0x99, 0xb0, 0x6b, 0xcc, 0xa2, 0xd1, 0x73, 0xe9, 0x4f, 0x75, 0x9d, 0x5a, 0x4f, 0x5e, 0xff, 0x1f, 0x26, 0x7a, 0x99, 0xcb, 0xa3, 0x47, 0x11, 0xde, 0x55, 0xde, 0x4a, 0x32, 0x0e, 0xb5, 0xec, 0xe8, 0x79, 0x30, 0x9d, 0xba, 0x47, 0xce, 0xb4, 0xde, 0x60, 0x79, 0xb6, 0xaf, 0x27, 0x7c, 0xf9, 0xc4, 0xfa, 0xf2, 0x0f, 0x1a, 0x40, 0x1b, 0x37, 0x5b, 0x40, 0x32, 0x0d, 0x76, 0x59, 0x79, 0x16, 0x19, 0x92, 0xe0, 0x20, 0x6a, 0xe3, 0xfe, 0x67, 0x91, 0x84, 0x67, 0xd7, 0x9f, 0xe8, 0x72, 0xa5, 0x9d, 0x5a, 0x4b, 0xfb, 0x16, 0xff, 0xf4, 0x42, 0xa1, 0xa0, 0xe7, 0xe6, 0xd7, 0x8f, 0xf0, 0xfc, 0x48, 0xaa, 0xf5, 0xf5, 0x81, 0xd7, 0xb1, 0xbe, 0x87, 0xbb, 0x1e, 0xee, 0x3a, 0x75, 0xef, 0x1b, 0x6b, 0xe5, 0x2c, 0xeb, 0x0d, 0x9e, 0x67, 0x13, 0xbc, 0x78, 0x68, 0xfd, 0xeb, 0xbf, 0x5a, 0xb8, 0x0e, 0x6b, 0x5e, 0xc7, 0xf4, 0x4b, 0x2f, 0xd5, 0x12, 0x4e, 0xab, 0xbd, 0x24, 0xdb, 0x07, 0xd7, 0xe7, 0xf5, 0x92, 0xf4, 0x0e, 0x89, 0x36, 0xd9, 0x7d, 0x63, 0xfb, 0x3b, 0x78, 0x2f, 0x9d, 0xf5, 0xbe, 0x36, 0x80, 0x7d, 0xb5, 0x5b, 0x6f, 0x28, 0xd4, 0xa9, 0x78, 0xa0, 0x53, 0xf1, 0x80, 0xa4, 0x22, 0x92, 0x0a, 0xde, 0xe4, 0x96, 0xbc, 0x71, 0x62, 0xfd, 0x6b, 0x1a, 0xee, 0x9a, 0xb0, 0x1d, 0xf3, 0x11, 0x02, 0xd8, 0x12, 0x33, 0xb7, 0x64, 0x0e, 0xc1, 0xdb, 0xc6, 0x6d, 0xb0, 0x70, 0x7b, 0xa8, 0x25, 0xd9, 0x71, 0x1c, 0x4d, 0xc0, 0xd7, 0xa4, 0xc2, 0xd7, 0x40, 0x27, 0x13, 0x28, 0x13, 0xe5, 0xca, 0x99, 0x1d, 0x90, 0x7f, 0x83, 0xed, 0x85, 0xfe, 0x0d, 0xe1, 0x8f, 0x8f, 0x3e, 0x37, 0xd8, 0xb9, 0xb0, 0x6b, 0x8d, 0xd2, 0x8f, 0xd8, 0xe6, 0x34, 0x9d, 0xec, 0xb6, 0x06, 0x50, 0xee, 0xc3, 0x31, 0x35, 0xf0, 0xec, 0xf0, 0x7a, 0x26, 0xaa, 0x83, 0x70, 0xff, 0xb5, 0x5f, 0x8f, 0xad, 0xe9, 0xb5, 0x01, 0x9a, 0x0b, 0xb4, 0x87, 0x88, 0xf4, 0x27, 0x57, 0xce, 0xc6, 0x51, 0xb9, 0x41, 0x7a, 0x1e, 0xfb, 0x72, 0x99, 0xfb, 0x72, 0xf1, 0xb5, 0xe7, 0x8e, 0x6d, 0x8c, 0x53, 0x8a, 0xf9, 0x92, 0x41, 0x2a, 0xe7, 0xbe, 0x78, 0x13, 0xa3, 0xc9, 0xe3, 0x98, 0x54, 0x0f, 0xd6, 0x6a, 0x7a, 0x51, 0x9b, 0x4f, 0x49, 0x35, 0x09, 0x6a, 0x68, 0xa5, 0xf8, 0xd5, 0x15, 0x34, 0xc6, 0xb2, 0x13, 0x57, 0x30, 0x16, 0xb6, 0xd0, 0xd6, 0xe5, 0x38, 0x08, 0x82, 0xb4, 0x26, 0xf9, 0xfd, 0xfd, 0x5d, 0xeb, 0xbb, 0xd2, 0x58, 0xfa, 0x3b, 0xc3, 0x2d, 0x38, 0x39, 0xb4, 0xe9, 0x95, 0x5f, 0x69, 0x2d, 0x90, 0xd2, 0x6d, 0x35, 0x52, 0x65, 0xd2, 0xb8, 0xb2, 0x34, 0xc0, 0xbb, 0xa4, 0xb8, 0x02, 0x77, 0x38, 0xc0, 0x14, 0x5c, 0x01, 0xd3, 0x57, 0x81, 0xee, 0x20, 0x5e, 0x71, 0x19, 0xa7, 0xeb, 0x57, 0x3d, 0x3c, 0x99, 0x55, 0x0f, 0x4f, 0xa6, 0x36, 0xbd, 0x6c, 0xe4, 0x38, 0x69, 0xe4, 0xdd, 0xc9, 0x1a, 0xd1, 0x87, 0xfc, 0x74, 0x52, 0x58, 0x44, 0x5e, 0x9b, 0xca, 0xe1, 0xba, 0x73, 0xe5, 0x25, 0xe5, 0xaf, 0xfd, 0x1a, 0x21, 0x62, 0x6a, 0xbd, 0x6e, 0xa0, 0x53, 0xf3, 0xdb, 0xe4, 0x76, 0xb2, 0x1f, 0x81, 0xfc, 0x94, 0xf1, 0xc9, 0x53, 0xc7, 0x27, 0xcb, 0x5f, 0x2d, 0xd6, 0xec, 0xae, 0xaa, 0x85, 0xfe, 0xbb, 0x61, 0x8e, 0xfe, 0x0d, 0x94, 0xa8, 0x74, 0x65, 0xd6, 0x4c, 0xeb, 0x7c, 0xcf, 0x34, 0xb3, 0x1f, 0x0c, 0xcb, 0xec, 0xa5, 0xff, 0xd0, 0x6e, 0xac, 0xfb, 0x74, 0x40, 0x0f, 0x79, 0x90, 0x03, 0x16, 0x6c, 0x87, 0xd5, 0x81, 0xeb, 0x4c, 0x38, 0xce, 0xbf, 0x3f, 0xc1, 0xdf, 0xd5, 0xf8, 0x17, 0xc4, 0xbf, 0xe9, 0x9c, 0x72, 0xce, 0xa9, 0x7b, 0x29, 0x16, 0xac, 0x8a, 0xe8, 0x73, 0xd7, 0xb2, 0x0f, 0x97, 0x0d, 0x9e, 0xeb, 0xc9, 0x87, 0x4b, 0x68, 0x53, 0x59, 0xed, 0xce, 0xc3, 0x08, 0xeb, 0xe9, 0xfd, 0x0b, 0x56, 0x9e, 0x22, 0xfb, 0x5c, 0x91, 0x2f, 0xfc, 0x79, 0xf9, 0x1e, 0xd5, 0xca, 0xab, 0xce, 0xfe, 0x8c, 0x7c, 0x1d, 0x5a, 0x69, 0x9f, 0x99, 0x6b, 0xb1, 0x5a, 0x96, 0xa1, 0xac, 0x02, 0x57, 0x22, 0x95, 0x65, 0x53, 0x73, 0x9f, 0x4f, 0xce, 0x9d, 0x94, 0xf7, 0x84, 0xec, 0x8c, 0xe7, 0xad, 0xc4, 0xbc, 0x15, 0x9f, 0x95, 0x17, 0xe1, 0x98, 0x83, 0x50, 0x37, 0x87, 0xaa, 0x0f, 0xe0, 0xb8, 0xb5, 0xc0, 0xe8, 0xc1, 0xb1, 0x7c, 0x77, 0x82, 0x31, 0x7e, 0x52, 0x1d, 0xe3, 0x9f, 0xfe, 0x2d, 0xc6, 0x18, 0x29, 0x4e, 0x1e, 0x52, 0x9c, 0x71, 0x23, 0xcd, 0x34, 0x27, 0x3e, 0xc6, 0xee, 0x2a, 0x70, 0x2d, 0xf4, 0xe3, 0x1a, 0x5c, 0x8f, 0xab, 0xb3, 0x01, 0x1c, 0x67, 0x2b, 0x59, 0xd5, 0xd3, 0x48, 0x4b, 0xb5, 0x62, 0xac, 0xe7, 0xcc, 0x1e, 0xc2, 0xb1, 0x8e, 0x26, 0x8d, 0xb5, 0x7f, 0x1e, 0x8e, 0xc1, 0x21, 0xfe, 0xdd, 0x81, 0xbf, 0x51, 0xfc, 0x0b, 0xe0, 0x9f, 0xc4, 0x29, 0xc7, 0xb4, 0xb1, 0xf1, 0xa4, 0x8e, 0xe1, 0xbc, 0x45, 0x3d, 0xcf, 0x60, 0x2f, 0x5b, 0x4e, 0x63, 0x9e, 0x7d, 0xda, 0xc8, 0x7c, 0x46, 0x9e, 0xde, 0xf8, 0x18, 0xd7, 0x5f, 0x25, 0x4f, 0x73, 0x7c, 0x7c, 0xaf, 0x96, 0x23, 0xa8, 0x8d, 0x97, 0x17, 0xc7, 0xd6, 0x5b, 0xe9, 0x79, 0x39, 0x35, 0x1f, 0xe7, 0x3a, 0x25, 0xdb, 0xe2, 0xb9, 0x70, 0x54, 0xbd, 0x15, 0x13, 0xe7, 0x7a, 0x7d, 0xec, 0x78, 0x9e, 0xd4, 0xa4, 0x0b, 0xcd, 0xbe, 0x9e, 0x63, 0xd0, 0xac, 0xe0, 0xf1, 0x64, 0xef, 0x02, 0x62, 0x4c, 0xf5, 0x4b, 0xc4, 0x98, 0xea, 0x43, 0x36, 0x03, 0xed, 0xbb, 0xd9, 0x0d, 0xa7, 0xef, 0x15, 0xfb, 0x0e, 0x37, 0x96, 0xc3, 0xad, 0xb4, 0xf3, 0x80, 0xd7, 0xaf, 0xde, 0xe8, 0x83, 0xaf, 0x8d, 0x1d, 0xf3, 0x0e, 0x1a, 0xf3, 0x6a, 0x59, 0xdf, 0xa1, 0x8d, 0x79, 0xf5, 0xd5, 0xc7, 0xbc, 0x50, 0x8c, 0xf9, 0xcf, 0x28, 0x0a, 0xfb, 0xaf, 0x89, 0x52, 0x8d, 0x1b, 0xf5, 0xc1, 0x75, 0x64, 0x1f, 0xf7, 0xca, 0x80, 0xbf, 0x2a, 0xee, 0x8f, 0xab, 0x74, 0x61, 0x35, 0xce, 0x6e, 0x23, 0xcf, 0xee, 0x3d, 0x64, 0xa1, 0x2e, 0xcd, 0x2f, 0x9a, 0x66, 0xae, 0xc6, 0x31, 0x2f, 0x8c, 0xcf, 0xef, 0xe9, 0x90, 0x8d, 0xad, 0x29, 0x84, 0x32, 0x47, 0xcd, 0x8f, 0x7f, 0xe3, 0xf5, 0xd3, 0x6e, 0x64, 0xfc, 0x6e, 0x8f, 0x7a, 0xd7, 0xa6, 0x5e, 0xbd, 0x35, 0x6f, 0x43, 0x9a, 0x78, 0xa7, 0x33, 0x24, 0xdd, 0x7b, 0x6d, 0x70, 0xa8, 0x33, 0xe8, 0x8f, 0x98, 0x8b, 0x33, 0x73, 0xbb, 0x6e, 0xa8, 0x00, 0xdd, 0x0d, 0x95, 0xa0, 0xe7, 0x18, 0x4a, 0x3d, 0x45, 0x16, 0xf6, 0x41, 0xb5, 0x60, 0xf1, 0x26, 0xa4, 0xb5, 0xd3, 0xf7, 0x2d, 0x58, 0x49, 0x27, 0x9f, 0xd9, 0x22, 0x7f, 0xf8, 0x1a, 0xf3, 0xc3, 0x59, 0xb5, 0xfc, 0x8c, 0xea, 0xec, 0x6a, 0x17, 0xe8, 0xf0, 0xef, 0x6a, 0xb9, 0x4f, 0x90, 0xbd, 0x82, 0x5a, 0xfa, 0xb5, 0xe5, 0xee, 0x51, 0xcb, 0xb6, 0x14, 0x67, 0xde, 0xe0, 0x57, 0x46, 0x6e, 0xa8, 0x50, 0x46, 0x6f, 0xa8, 0x54, 0x14, 0x39, 0xeb, 0x86, 0x55, 0x70, 0x2b, 0x3e, 0xaf, 0x82, 0xaf, 0x62, 0xca, 0x2a, 0xf8, 0x9a, 0xa2, 0x5c, 0xa5, 0x94, 0x67, 0x64, 0xbf, 0x5a, 0x46, 0xf6, 0xf8, 0x6f, 0xe4, 0xcc, 0xd4, 0x72, 0xaf, 0x56, 0x46, 0x71, 0xe6, 0x2b, 0x1a, 0xfe, 0x55, 0xf5, 0x0b, 0xfc, 0xab, 0x4f, 0x58, 0xee, 0x8f, 0xa7, 0x29, 0xec, 0x03, 0xcf, 0xa5, 0x52, 0x95, 0xbd, 0x2a, 0x55, 0xd9, 0xfd, 0xb7, 0xa0, 0x2a, 0xc4, 0x27, 0x8e, 0x1e, 0x76, 0x99, 0x4e, 0xf5, 0x8c, 0xc7, 0x31, 0x96, 0x31, 0xb3, 0xfc, 0xf3, 0x04, 0x65, 0x71, 0x54, 0xa5, 0xd0, 0x15, 0x9b, 0xd5, 0xcc, 0x54, 0xa5, 0x5a, 0x50, 0x95, 0x32, 0xa6, 0x2a, 0xf5, 0xc9, 0x54, 0x85, 0xfc, 0x3c, 0xbd, 0xc0, 0xbf, 0x3b, 0xf0, 0x37, 0x8a, 0x7f, 0x01, 0xfc, 0x93, 0x38, 0xe5, 0x84, 0x43, 0x77, 0x38, 0x16, 0xac, 0x8c, 0xe8, 0xa5, 0x54, 0x8a, 0x51, 0xd5, 0xd0, 0xd3, 0xaf, 0x51, 0x8c, 0xfd, 0x22, 0x4f, 0xf8, 0xb3, 0xf2, 0x6c, 0xd3, 0xca, 0xa9, 0xee, 0xbd, 0x4a, 0x9e, 0xa8, 0x56, 0xca, 0x55, 0x73, 0xd4, 0xa9, 0x65, 0x18, 0x5c, 0x15, 0xb2, 0xc1, 0x85, 0x52, 0x98, 0x94, 0x4a, 0x31, 0xaa, 0x38, 0xdf, 0x49, 0xd9, 0xae, 0xe6, 0x33, 0x52, 0x1e, 0x59, 0xef, 0xaa, 0x98, 0x38, 0x1f, 0xc2, 0x4c, 0x8c, 0x2c, 0x51, 0x1a, 0x1a, 0xd9, 0xa1, 0x24, 0xca, 0x72, 0x5c, 0x1d, 0xd9, 0x46, 0x1a, 0x59, 0xb6, 0xa6, 0xf0, 0xf1, 0xd8, 0x06, 0x70, 0xc4, 0x3c, 0xab, 0x20, 0xed, 0x05, 0xbc, 0x16, 0xe1, 0xf5, 0x19, 0xd5, 0xff, 0xa3, 0x6d, 0xec, 0x18, 0xaf, 0xa6, 0x31, 0x46, 0xea, 0xb7, 0x5a, 0xf8, 0x7e, 0x34, 0x86, 0xe8, 0x5e, 0x78, 0x7e, 0xac, 0x13, 0x9e, 0x1f, 0x69, 0x74, 0x27, 0xf6, 0xfc, 0x98, 0xc0, 0x04, 0x4f, 0x39, 0x79, 0x7e, 0x5c, 0x73, 0xdd, 0xc0, 0x3a, 0x87, 0xc8, 0xf9, 0xa8, 0xac, 0xf7, 0x57, 0xc6, 0xcf, 0xfd, 0x1c, 0x88, 0x07, 0x85, 0x62, 0x9d, 0x81, 0x77, 0x2e, 0x55, 0xc2, 0xb7, 0x1d, 0xef, 0xa1, 0x73, 0x9c, 0x85, 0x15, 0x73, 0x2b, 0x38, 0x92, 0x42, 0x1a, 0x7b, 0x59, 0x5c, 0x24, 0x43, 0x1a, 0x6b, 0x2f, 0x09, 0x9d, 0x56, 0xd2, 0xee, 0x0c, 0x7c, 0xbf, 0x27, 0xee, 0x57, 0xd1, 0xea, 0x7b, 0x65, 0xe0, 0x95, 0xf7, 0xa1, 0x6e, 0xce, 0xf5, 0x9a, 0x4f, 0xc5, 0x12, 0xf2, 0xa9, 0x58, 0xc1, 0x3e, 0x15, 0xd3, 0xa1, 0x76, 0x59, 0x09, 0xa2, 0xf2, 0xa2, 0xb8, 0xc7, 0x43, 0x09, 0xb1, 0xc7, 0x0c, 0x5e, 0x28, 0x82, 0x6a, 0xc9, 0x5f, 0x64, 0xf0, 0x18, 0x49, 0x52, 0xd1, 0xee, 0xe0, 0x83, 0xf8, 0xdd, 0x6e, 0xf5, 0xee, 0xb6, 0x78, 0xae, 0x5d, 0xf1, 0xbb, 0x45, 0x45, 0xc6, 0x32, 0xa3, 0xb7, 0xa2, 0xc4, 0xe0, 0xf4, 0x7b, 0x2a, 0x5d, 0x7a, 0x77, 0x0d, 0x69, 0x4e, 0xe9, 0xbd, 0xa2, 0xfe, 0xb2, 0xb4, 0x97, 0xca, 0x23, 0x59, 0x65, 0xf0, 0xd2, 0xbc, 0x08, 0xd9, 0xc7, 0x54, 0x58, 0x34, 0x5f, 0x74, 0x35, 0xe4, 0x8b, 0xae, 0x44, 0xf8, 0xa2, 0x0b, 0xa8, 0xbe, 0xf4, 0xc8, 0x52, 0xc6, 0x8f, 0xa3, 0xea, 0x61, 0x1f, 0x85, 0xe6, 0xb1, 0x25, 0x84, 0xff, 0xcc, 0x12, 0x74, 0x2f, 0x25, 0x95, 0x90, 0xc9, 0x6d, 0xd0, 0x57, 0x5b, 0xae, 0xe9, 0xeb, 0x17, 0xf0, 0xeb, 0x4d, 0x63, 0xbf, 0x0e, 0xff, 0x39, 0x5f, 0xd7, 0x25, 0x7d, 0x9d, 0x27, 0xfa, 0x4f, 0xd6, 0x64, 0xec, 0x51, 0x30, 0x50, 0x36, 0xf9, 0x1a, 0x7b, 0x41, 0xfe, 0x09, 0x0d, 0x13, 0x96, 0x14, 0xe0, 0x92, 0x7c, 0x7f, 0x4e, 0x49, 0xd0, 0x2f, 0x3c, 0x1d, 0x7a, 0x32, 0x07, 0x2a, 0x28, 0x02, 0xad, 0x27, 0x7d, 0x60, 0xde, 0xe2, 0x43, 0x81, 0xee, 0xc0, 0xa1, 0xca, 0x6e, 0xf6, 0x65, 0x13, 0x6a, 0x83, 0xb9, 0x01, 0x28, 0x24, 0xdd, 0x57, 0xb9, 0x38, 0xd4, 0xa5, 0xfa, 0x26, 0xd4, 0x53, 0xc4, 0x0e, 0x1c, 0x55, 0x5f, 0xc2, 0x37, 0x21, 0xc5, 0xc3, 0xf0, 0xdc, 0x6a, 0x82, 0x81, 0x2a, 0x94, 0x76, 0xbc, 0x41, 0x1f, 0x79, 0x24, 0xfc, 0xc3, 0xae, 0x9e, 0x98, 0x47, 0xcf, 0x1e, 0x09, 0x43, 0x2d, 0x07, 0x71, 0x72, 0x15, 0x12, 0x26, 0x08, 0x8f, 0x84, 0x43, 0xdd, 0xaa, 0x47, 0x42, 0xbc, 0x3a, 0x6e, 0x0d, 0x40, 0x5e, 0xb7, 0xda, 0xe6, 0xf9, 0xd4, 0x66, 0xef, 0x22, 0xf2, 0x44, 0x78, 0x66, 0x41, 0xd8, 0x50, 0x46, 0x6d, 0xbe, 0xcf, 0x33, 0xb5, 0xb7, 0xba, 0x8f, 0xda, 0x0c, 0x4a, 0xbd, 0xcd, 0x58, 0x6a, 0xf2, 0xea, 0x8e, 0xef, 0x06, 0x47, 0xc2, 0x33, 0x20, 0x9d, 0x41, 0x79, 0xc8, 0x27, 0x28, 0xce, 0xdd, 0x16, 0x18, 0xbe, 0xa4, 0x52, 0x72, 0xd7, 0x55, 0x66, 0xbc, 0x97, 0x67, 0x7c, 0xa5, 0x3a, 0xe3, 0xfb, 0xd5, 0x19, 0xbf, 0xf7, 0x6a, 0x33, 0x3e, 0x85, 0xaa, 0xd3, 0x8c, 0xa7, 0xfb, 0x71, 0x33, 0x5e, 0xa3, 0xe7, 0x9f, 0x3d, 0xe3, 0x29, 0xa7, 0x5d, 0xe4, 0xfc, 0x5f, 0x38, 0xe3, 0x2b, 0xca, 0x70, 0x76, 0xff, 0xf6, 0x37, 0x13, 0xcd, 0xfb, 0xc2, 0xa9, 0xbc, 0x5e, 0xb7, 0xd1, 0x69, 0xda, 0x42, 0xff, 0x5c, 0x3f, 0xcf, 0x78, 0xbd, 0x98, 0xf1, 0x4e, 0x94, 0x0b, 0xf5, 0x1f, 0xa7, 0xcc, 0xf9, 0xca, 0xe4, 0x39, 0xaf, 0xfa, 0x52, 0xad, 0x23, 0xaf, 0xdc, 0x5e, 0x8b, 0xb4, 0x60, 0x02, 0x6f, 0xaa, 0x3c, 0xf3, 0xad, 0x3c, 0xf3, 0x77, 0x24, 0xcf, 0xfc, 0x39, 0x38, 0xf3, 0x83, 0x45, 0x69, 0x9e, 0x74, 0x7f, 0x25, 0x62, 0xda, 0x1c, 0xed, 0x0e, 0x2e, 0xc7, 0xef, 0xf6, 0xaa, 0x77, 0x4d, 0xd2, 0x82, 0x78, 0xbe, 0x9f, 0x24, 0xdd, 0xd7, 0xd3, 0xfd, 0x9c, 0xf4, 0xad, 0x2f, 0x96, 0xd5, 0xb8, 0x02, 0x73, 0xab, 0xa0, 0xb0, 0x2c, 0xad, 0x44, 0x6f, 0xc5, 0x55, 0x8b, 0x5e, 0x12, 0xed, 0x98, 0xa3, 0x7f, 0x19, 0xe7, 0xef, 0x1c, 0x78, 0xb9, 0x3a, 0x62, 0x44, 0xc0, 0xcf, 0xf1, 0x6c, 0x48, 0xc6, 0xd7, 0xe2, 0x54, 0x7c, 0xad, 0x5c, 0xd4, 0xb3, 0x9f, 0x46, 0x9e, 0x3c, 0x7c, 0x7e, 0x30, 0xf6, 0xfb, 0xf0, 0x9f, 0xf7, 0xfd, 0xde, 0xa4, 0xef, 0x33, 0xb9, 0x7e, 0x94, 0x74, 0xaf, 0xe1, 0xdb, 0xc3, 0xf8, 0xed, 0xea, 0xb1, 0xdf, 0x86, 0xaf, 0xfd, 0xdb, 0xb2, 0xa4, 0x6f, 0x73, 0x13, 0xfd, 0x96, 0x0d, 0xf8, 0x5b, 0x7d, 0x4d, 0xad, 0x7f, 0x06, 0xe1, 0x7e, 0x69, 0xc2, 0x52, 0xaa, 0xb9, 0x94, 0x39, 0xd7, 0x5c, 0xca, 0x93, 0xa2, 0x14, 0x4f, 0xda, 0x40, 0x79, 0x64, 0xb5, 0x67, 0xd2, 0x40, 0xf5, 0xd8, 0xf9, 0x2e, 0x97, 0xa6, 0xcc, 0x73, 0x6f, 0xea, 0x3c, 0xa7, 0x68, 0x5b, 0xe4, 0x83, 0x74, 0x60, 0x9e, 0x55, 0xf8, 0x33, 0x28, 0x9d, 0x60, 0xae, 0x3f, 0xa3, 0xcd, 0x71, 0x89, 0x63, 0x9a, 0x0e, 0xe2, 0xd5, 0xe1, 0x09, 0x80, 0xb7, 0x7b, 0x02, 0xba, 0xf4, 0x8d, 0xb0, 0x61, 0x0e, 0xcb, 0x66, 0x8b, 0xee, 0xc7, 0xf9, 0xe2, 0x61, 0xaf, 0xa3, 0xb7, 0x39, 0x6b, 0x4a, 0xd2, 0xcb, 0xdc, 0x50, 0xf8, 0xdb, 0xf3, 0x63, 0x66, 0xb9, 0xaf, 0xc8, 0x0d, 0xfe, 0xbd, 0x3c, 0xcb, 0x47, 0xf4, 0x29, 0xb3, 0xfc, 0xb0, 0x3a, 0xcb, 0xa3, 0x34, 0xcb, 0xad, 0x89, 0x15, 0x03, 0xce, 0x70, 0xc3, 0x62, 0x31, 0xc3, 0x0d, 0x75, 0x36, 0x1d, 0xad, 0x18, 0x6e, 0xf4, 0xc3, 0x5c, 0xda, 0x97, 0xb9, 0x71, 0x1e, 0x54, 0xe0, 0x5a, 0xa1, 0x2a, 0xbe, 0x7a, 0x58, 0x60, 0x83, 0xd3, 0x1b, 0xf1, 0xed, 0x37, 0x71, 0xf5, 0xb0, 0xf0, 0x2f, 0xa0, 0x06, 0x4b, 0x04, 0x35, 0x20, 0x7f, 0xce, 0xd7, 0xc6, 0xff, 0x93, 0xe9, 0x06, 0x52, 0x83, 0xaa, 0x52, 0x27, 0xb8, 0x5e, 0x4c, 0xec, 0x95, 0xa7, 0xd0, 0x03, 0xde, 0x1b, 0x21, 0x6a, 0x50, 0xcd, 0xd4, 0xa0, 0x21, 0x4e, 0x0d, 0x64, 0xe4, 0xff, 0x4d, 0x29, 0xb4, 0x20, 0x38, 0x01, 0x2d, 0x20, 0x1f, 0xcd, 0x8b, 0x26, 0xf4, 0xab, 0x9c, 0x0e, 0x0d, 0xcb, 0x6e, 0xc3, 0x71, 0x95, 0xe3, 0x32, 0x40, 0x25, 0x94, 0x80, 0x03, 0xe5, 0x48, 0x33, 0xdc, 0x26, 0x55, 0x16, 0xa5, 0x7b, 0x50, 0xde, 0xf1, 0x12, 0xc5, 0xb1, 0x27, 0x3f, 0xe9, 0x0e, 0xa4, 0x3c, 0x85, 0x52, 0x9e, 0x20, 0xf9, 0x09, 0x9e, 0x4c, 0x7a, 0x5a, 0xec, 0xaa, 0x24, 0xca, 0x60, 0xad, 0x2c, 0x35, 0x16, 0xa5, 0xcf, 0xad, 0x86, 0x42, 0xaf, 0x1e, 0x4b, 0xee, 0x4e, 0xc2, 0xed, 0xfc, 0x39, 0x99, 0x2f, 0xfb, 0x22, 0x16, 0xcb, 0x53, 0x30, 0xf7, 0xfa, 0x55, 0x80, 0xab, 0x15, 0xfc, 0xad, 0x02, 0xfd, 0x67, 0xe0, 0x77, 0xc5, 0x62, 0xf2, 0xb8, 0xcb, 0x1c, 0x4d, 0x5f, 0x3b, 0xb6, 0xa4, 0xf0, 0x5f, 0x5a, 0x92, 0x3e, 0xa9, 0xa4, 0x1c, 0x6e, 0x53, 0x46, 0xb5, 0xa5, 0x1a, 0xb1, 0x01, 0xff, 0xae, 0xa5, 0x0c, 0x92, 0xd1, 0x9f, 0x19, 0x5b, 0x46, 0xf8, 0xcf, 0x2f, 0x63, 0x4d, 0x52, 0x19, 0x85, 0xdc, 0x8e, 0xac, 0xb1, 0x3d, 0x92, 0xa9, 0x8f, 0x0b, 0xf0, 0xfe, 0x9b, 0x9c, 0xb2, 0xf0, 0x9a, 0xca, 0xde, 0x85, 0x65, 0x4f, 0x9f, 0xb0, 0xec, 0x94, 0x92, 0xe4, 0xbf, 0x04, 0x7e, 0x58, 0x36, 0x1c, 0x54, 0x65, 0x0b, 0xe3, 0x40, 0x15, 0xca, 0x16, 0x1b, 0x3d, 0x06, 0x94, 0x2d, 0x9e, 0x0b, 0xac, 0x0d, 0x3c, 0x57, 0xb9, 0x96, 0x69, 0xcd, 0x6d, 0xd7, 0x40, 0x6b, 0x16, 0x31, 0xad, 0xa9, 0x1c, 0x4b, 0x6b, 0xd6, 0x6b, 0xb4, 0xe6, 0x36, 0x8d, 0xd6, 0x9c, 0x58, 0xab, 0xd2, 0x1a, 0xbc, 0xda, 0x3d, 0xa5, 0x20, 0xa5, 0x91, 0x16, 0x50, 0x7e, 0x4c, 0x4a, 0x3b, 0xdd, 0xf3, 0x65, 0x1f, 0xe8, 0xbe, 0x5c, 0x11, 0x6f, 0xf7, 0x02, 0x96, 0x30, 0xb2, 0x49, 0xb2, 0x38, 0x53, 0x1b, 0x36, 0x94, 0x8a, 0x95, 0x61, 0x82, 0xfa, 0x04, 0x1d, 0x93, 0xcb, 0x74, 0x5e, 0xa4, 0x3e, 0x43, 0x63, 0x65, 0x8c, 0x6a, 0xa4, 0x3e, 0x01, 0x41, 0x7d, 0x86, 0x7b, 0x55, 0xea, 0x53, 0x7a, 0x4d, 0x32, 0xc6, 0x7e, 0x55, 0xc6, 0xe8, 0xfb, 0x7f, 0x42, 0xc6, 0xa0, 0x15, 0x84, 0x38, 0x0d, 0x98, 0x88, 0xae, 0x7c, 0x8e, 0x94, 0xf1, 0xc1, 0xff, 0x05, 0x29, 0xa3, 0x2c, 0x2e, 0x5b, 0x5c, 0x8a, 0xdf, 0x3d, 0xa9, 0xde, 0x85, 0x93, 0x24, 0x8b, 0x87, 0x93, 0xee, 0x6b, 0xaf, 0x2a, 0x65, 0xe4, 0x27, 0xe1, 0xb4, 0x85, 0xf9, 0x24, 0x79, 0x31, 0xf7, 0x7e, 0x16, 0x7f, 0x6c, 0x10, 0xfc, 0x91, 0xa4, 0xf4, 0x8b, 0x63, 0xbf, 0x0e, 0xff, 0x39, 0x5f, 0x4f, 0x24, 0x61, 0xf4, 0x5e, 0xc3, 0xb7, 0x57, 0x93, 0x30, 0xae, 0xf5, 0xdb, 0x09, 0x24, 0x0c, 0xf2, 0x35, 0xc4, 0x2b, 0x82, 0x4a, 0x69, 0xc3, 0x35, 0x94, 0x72, 0x15, 0x09, 0x83, 0xbe, 0xe7, 0x52, 0xbc, 0xd7, 0x5c, 0xca, 0xff, 0x83, 0x12, 0x86, 0xeb, 0x33, 0x25, 0x8c, 0x86, 0x3f, 0x57, 0xc2, 0x30, 0x26, 0x24, 0x8c, 0xba, 0x6f, 0xd1, 0x1c, 0x97, 0x8a, 0x92, 0x7d, 0xf4, 0xa9, 0xfe, 0xc2, 0x92, 0x3c, 0x16, 0xa8, 0xfe, 0x3a, 0xab, 0x29, 0x06, 0x7c, 0xc4, 0xd7, 0x6a, 0x3d, 0xb6, 0x9b, 0xbc, 0x5e, 0x70, 0xfc, 0xe8, 0xe3, 0xec, 0x9b, 0x62, 0xf8, 0xf9, 0x56, 0x8e, 0xe9, 0xeb, 0x0b, 0x5b, 0xd9, 0xb6, 0x7f, 0x7e, 0x54, 0x47, 0x76, 0xfd, 0xd2, 0x82, 0x9b, 0x80, 0xa1, 0x91, 0x64, 0xd5, 0xdf, 0x06, 0x92, 0xbe, 0xf6, 0xdd, 0x5a, 0x83, 0x72, 0x48, 0xb5, 0xea, 0xa7, 0xa8, 0x43, 0x1c, 0x9f, 0x97, 0xfc, 0xed, 0x59, 0x9b, 0x84, 0x4e, 0x3b, 0x79, 0x8f, 0xeb, 0x7d, 0x1c, 0xda, 0xdb, 0x2c, 0x1c, 0x91, 0x77, 0x90, 0xe2, 0xf3, 0x2e, 0x8c, 0xb5, 0x5e, 0xc7, 0xf1, 0xa6, 0xb7, 0xb1, 0xe7, 0x30, 0x2a, 0xd3, 0xa4, 0xce, 0x3d, 0x07, 0x78, 0xa0, 0x14, 0x7c, 0x10, 0x80, 0x3a, 0x58, 0x04, 0x4d, 0xb0, 0x12, 0x56, 0xc3, 0xdd, 0xb0, 0x0c, 0x96, 0xc0, 0x16, 0x78, 0x84, 0x3d, 0x6d, 0xe5, 0xc8, 0x6d, 0x7c, 0xfd, 0xa2, 0xdc, 0xcc, 0xd7, 0x5c, 0xb9, 0x91, 0xaf, 0x37, 0xc8, 0x4b, 0xa5, 0xc7, 0x80, 0x56, 0xfe, 0x5d, 0x78, 0xcd, 0x90, 0xd7, 0xe0, 0x6f, 0xa6, 0xdc, 0x86, 0xbf, 0x59, 0xf2, 0x4a, 0xce, 0x31, 0x5d, 0x2e, 0xe3, 0x18, 0xbb, 0x32, 0xf9, 0x90, 0x92, 0x0b, 0xd9, 0xeb, 0x09, 0xfb, 0xcf, 0xa2, 0x48, 0x82, 0xf2, 0x74, 0x7c, 0x27, 0xc9, 0x64, 0x61, 0x6b, 0x6a, 0xbb, 0xee, 0xd0, 0x63, 0x60, 0x93, 0xba, 0xe4, 0x92, 0xe8, 0x75, 0xd5, 0x30, 0x80, 0xf7, 0xe7, 0x7a, 0xa4, 0x98, 0xec, 0x30, 0xcd, 0x24, 0x7d, 0x3b, 0x8a, 0xaa, 0x5a, 0xe4, 0x93, 0x36, 0x54, 0x52, 0x94, 0xde, 0xa0, 0x1a, 0xa5, 0x37, 0xee, 0x1b, 0x27, 0x29, 0x4a, 0xef, 0xf7, 0x85, 0x07, 0x0c, 0xd7, 0x2a, 0x30, 0xd7, 0x3d, 0x39, 0x12, 0x16, 0xde, 0x2d, 0x24, 0x37, 0x98, 0x48, 0xf7, 0x1f, 0x53, 0x2d, 0xe4, 0x9b, 0x21, 0x91, 0x8a, 0x90, 0x23, 0x0f, 0x61, 0x16, 0x7c, 0x93, 0x4d, 0x7e, 0x8d, 0xd4, 0x37, 0x89, 0x12, 0x8e, 0x8c, 0x4b, 0x79, 0xc1, 0x15, 0xf7, 0xce, 0x08, 0x65, 0x12, 0x79, 0x64, 0x6a, 0x82, 0x06, 0xeb, 0x0a, 0x65, 0xd8, 0x1e, 0x7c, 0xed, 0x6d, 0xc8, 0x72, 0xdd, 0x01, 0x39, 0xd8, 0x3b, 0x07, 0xd8, 0x98, 0xae, 0xf6, 0xba, 0xc1, 0xed, 0x4d, 0xff, 0xe8, 0xf7, 0x1c, 0x13, 0x3e, 0xd0, 0xce, 0xda, 0xf7, 0xdb, 0x1a, 0x36, 0x17, 0x3e, 0x4e, 0x1e, 0xe8, 0x34, 0xbf, 0xe2, 0x14, 0x29, 0x5c, 0xba, 0x13, 0x02, 0xd1, 0xa9, 0x83, 0x4f, 0xb2, 0x25, 0x18, 0x59, 0x6f, 0x69, 0x9e, 0x32, 0x2e, 0x27, 0x3c, 0x65, 0xb0, 0x4f, 0x49, 0x50, 0xce, 0x25, 0xdb, 0xee, 0xda, 0x71, 0x2e, 0xd2, 0x9e, 0x38, 0x69, 0xa8, 0x62, 0x8f, 0xea, 0xe7, 0xfa, 0xa0, 0xcc, 0x51, 0xc0, 0x5e, 0x66, 0x33, 0xa0, 0x48, 0xf8, 0x9e, 0xad, 0x79, 0x1f, 0x7c, 0x33, 0xd3, 0x28, 0x9e, 0xa7, 0xdf, 0xef, 0xc7, 0xb9, 0x43, 0x11, 0x50, 0x7f, 0xfc, 0x1b, 0xff, 0x3c, 0x7f, 0xb5, 0xbf, 0x8a, 0x22, 0x9f, 0xe2, 0x5f, 0x21, 0x8e, 0xe1, 0x61, 0xc9, 0x82, 0x58, 0x13, 0x6a, 0xbd, 0x81, 0xf1, 0xa4, 0x9f, 0x3c, 0x73, 0xf1, 0x5d, 0x5f, 0x4a, 0x44, 0xe7, 0x47, 0x93, 0xfe, 0x4b, 0xf8, 0xb7, 0x18, 0x64, 0x64, 0x2a, 0x8f, 0xc2, 0x0a, 0x68, 0x83, 0x6d, 0xaa, 0xe7, 0x39, 0x3b, 0xfb, 0x1d, 0xf2, 0xce, 0xde, 0xf9, 0x52, 0xbc, 0x8f, 0xcc, 0x17, 0x0e, 0x5b, 0x4d, 0xef, 0x6c, 0xd8, 0xd2, 0x33, 0xd8, 0xf9, 0x56, 0xcf, 0x0c, 0x1f, 0xb6, 0x91, 0xbc, 0x5e, 0xb8, 0xe4, 0xba, 0xb9, 0xe4, 0x8f, 0xae, 0x70, 0x8d, 0x4e, 0xae, 0xe4, 0xbb, 0xa2, 0x0e, 0x9d, 0x5c, 0xc6, 0x77, 0x9e, 0xbb, 0x75, 0xb2, 0x87, 0xef, 0x8a, 0xcb, 0xc8, 0x27, 0x8b, 0x4d, 0x78, 0xb0, 0x13, 0xdf, 0xa9, 0x31, 0x5d, 0x2d, 0xd6, 0xd0, 0x57, 0x28, 0x87, 0xb5, 0x4d, 0xc7, 0x29, 0xa5, 0x9a, 0xef, 0x4b, 0x35, 0x96, 0xb9, 0x2b, 0x58, 0x15, 0x76, 0xba, 0x0d, 0xee, 0x34, 0x9c, 0x7f, 0xa1, 0x45, 0x31, 0xf2, 0xe5, 0x34, 0xf2, 0x9e, 0xea, 0x43, 0x24, 0x4b, 0xf2, 0xe1, 0x48, 0x19, 0x29, 0x32, 0x1f, 0x42, 0xa7, 0x30, 0xcf, 0x0b, 0xba, 0x60, 0x75, 0x22, 0xf7, 0x62, 0x91, 0x7b, 0x40, 0xcb, 0x8d, 0x54, 0xa0, 0x50, 0xf2, 0x1d, 0xc3, 0xda, 0xe6, 0x96, 0x43, 0x51, 0x3e, 0xe5, 0x9e, 0x97, 0xc8, 0xbd, 0x44, 0xe4, 0xde, 0x32, 0xae, 0xec, 0x2c, 0x2c, 0xdb, 0x33, 0x1d, 0x73, 0x7b, 0xa6, 0x8a, 0xdc, 0x56, 0xcc, 0xbd, 0xb4, 0xd3, 0xad, 0xc3, 0xdc, 0x8d, 0x49, 0x65, 0x7b, 0xe2, 0x65, 0x73, 0x6f, 0xb1, 0xdd, 0x66, 0x6c, 0x8d, 0x09, 0xeb, 0x30, 0x78, 0xa6, 0x46, 0x02, 0xc1, 0x55, 0x50, 0x16, 0xf1, 0x39, 0x42, 0xc1, 0x3d, 0xe0, 0x0a, 0x97, 0x46, 0xd3, 0x5c, 0x0b, 0x11, 0x1b, 0x9b, 0x67, 0xe2, 0xa8, 0x4a, 0xe4, 0x41, 0xcf, 0xa5, 0x7a, 0x1e, 0x92, 0x4c, 0x4e, 0x1c, 0xa7, 0x6f, 0x44, 0x4c, 0x37, 0x75, 0xc0, 0xc8, 0xe2, 0x83, 0x90, 0x27, 0x85, 0x80, 0xa0, 0x96, 0xdb, 0xaa, 0x5f, 0xbb, 0x1b, 0x6a, 0xdb, 0x74, 0x49, 0xb9, 0xcb, 0x82, 0x55, 0x11, 0xe3, 0xad, 0x38, 0xfa, 0x50, 0x14, 0xac, 0x8e, 0x98, 0xc5, 0x1b, 0x7c, 0x2e, 0x82, 0xe2, 0xe0, 0xbc, 0xa4, 0x67, 0x0f, 0x94, 0x60, 0x0b, 0x12, 0xcf, 0xc5, 0x48, 0x7f, 0x11, 0x87, 0xc2, 0x65, 0x5a, 0x6f, 0x42, 0xdc, 0x9b, 0xe1, 0xed, 0x6a, 0x6f, 0x32, 0x45, 0xdf, 0xd5, 0xf1, 0xd5, 0xfb, 0x7d, 0x42, 0x37, 0x9c, 0x35, 0x48, 0x8b, 0x06, 0xc9, 0xf3, 0xb5, 0x19, 0xbf, 0x2f, 0x0d, 0x17, 0x6a, 0xb0, 0x6b, 0x60, 0xd8, 0x0d, 0x2f, 0x56, 0xbf, 0xcf, 0x10, 0xdf, 0xb7, 0xb1, 0x87, 0x1a, 0x29, 0x34, 0x88, 0x35, 0xde, 0xea, 0x03, 0x2b, 0x7e, 0xe3, 0x8a, 0x90, 0xa7, 0x25, 0x83, 0x3d, 0x14, 0x71, 0xf1, 0xfc, 0x2a, 0x66, 0x7b, 0x08, 0x9e, 0x5d, 0xac, 0xbb, 0x00, 0x6f, 0x6d, 0xd8, 0x12, 0x73, 0xeb, 0x12, 0x73, 0xee, 0x6b, 0x3e, 0xb0, 0xc9, 0x14, 0xc5, 0xfe, 0xfb, 0x60, 0xe3, 0xf2, 0xfc, 0x1e, 0x7d, 0x8a, 0xad, 0xef, 0xe5, 0x78, 0xb4, 0xb0, 0x66, 0xc8, 0xc1, 0x99, 0x63, 0x77, 0x15, 0x80, 0xb3, 0xea, 0x1d, 0x6c, 0xaa, 0xf0, 0xec, 0x9b, 0x51, 0xd7, 0xff, 0xe9, 0x7b, 0xf5, 0x9b, 0x83, 0x8f, 0x83, 0x35, 0x3c, 0x9d, 0xa3, 0x76, 0xd7, 0x47, 0x67, 0xc6, 0x6d, 0x28, 0x86, 0x70, 0xee, 0x5a, 0xbf, 0x7d, 0x30, 0xd0, 0xc5, 0xb2, 0x99, 0x2e, 0xe9, 0x9b, 0x23, 0xf8, 0x8d, 0x3f, 0x02, 0x7a, 0x17, 0xf2, 0x02, 0x0b, 0xf3, 0x03, 0xd5, 0x7f, 0xa4, 0xe6, 0xf9, 0x5f, 0x9f, 0x6d, 0xf3, 0xbd, 0x7a, 0x01, 0xb2, 0x9c, 0x53, 0xbf, 0xb3, 0x4e, 0xaa, 0xb2, 0x12, 0xff, 0x78, 0x0c, 0x0c, 0x77, 0xe3, 0x34, 0xa2, 0x48, 0x6b, 0x3c, 0x17, 0xdb, 0x78, 0x2e, 0xae, 0xfe, 0x26, 0x79, 0x7d, 0xbc, 0x1e, 0xef, 0x9a, 0x93, 0x66, 0xa2, 0x0d, 0x29, 0x34, 0xfd, 0x77, 0xa9, 0x57, 0xaf, 0x7a, 0x5d, 0x86, 0xa3, 0x13, 0xc0, 0x59, 0xb9, 0x54, 0xf5, 0x03, 0x69, 0x92, 0x4b, 0xf8, 0x6a, 0x51, 0xfd, 0x41, 0x66, 0xcb, 0xe4, 0x37, 0xce, 0x20, 0x4b, 0x1c, 0x0b, 0x21, 0x2f, 0xb8, 0x0b, 0xb9, 0x52, 0x76, 0xd4, 0xd0, 0x89, 0xb8, 0x21, 0x9b, 0x6d, 0xe4, 0x11, 0x4e, 0x78, 0xf2, 0x0d, 0x48, 0x55, 0x29, 0xf3, 0x28, 0x1a, 0xdc, 0x0d, 0x26, 0xc4, 0xaf, 0x52, 0xbc, 0x5a, 0xf0, 0xea, 0xc1, 0x6b, 0x00, 0xaf, 0x8e, 0xe0, 0x96, 0x30, 0xe8, 0x16, 0x45, 0x29, 0x22, 0x9f, 0x95, 0x30, 0xd2, 0x46, 0x3e, 0x03, 0xb2, 0x2a, 0xce, 0x43, 0xae, 0xe4, 0xbb, 0xa9, 0x06, 0x32, 0x3c, 0x1d, 0x10, 0x3e, 0x7a, 0x2c, 0x0e, 0xb1, 0x63, 0x51, 0x1d, 0xd7, 0x85, 0x98, 0xba, 0x00, 0xf3, 0xb4, 0x4b, 0x28, 0xbf, 0x2a, 0x4b, 0xea, 0x25, 0x7f, 0xa8, 0x2b, 0x2b, 0xd7, 0xac, 0x83, 0x19, 0xe1, 0x25, 0xa1, 0x1e, 0x9b, 0x69, 0x61, 0x0f, 0x3f, 0x35, 0x45, 0x2c, 0xf8, 0xbb, 0x3a, 0x32, 0x1d, 0x7f, 0x97, 0x85, 0x3d, 0xee, 0x49, 0x32, 0xd9, 0xba, 0x98, 0x02, 0x7f, 0x8f, 0xe3, 0xf0, 0x3d, 0xc4, 0x9e, 0x4c, 0x8e, 0x79, 0x4d, 0xd1, 0x21, 0x2d, 0x89, 0x34, 0x6b, 0x15, 0x47, 0xb9, 0xb0, 0xc8, 0xb9, 0xf9, 0x07, 0x60, 0x46, 0x54, 0xdf, 0xd7, 0xdd, 0x6c, 0x22, 0xcd, 0x63, 0xd9, 0x90, 0xdf, 0x19, 0xd5, 0x05, 0x75, 0x11, 0xf3, 0x7f, 0x0d, 0xec, 0x88, 0xb5, 0xea, 0xf6, 0x76, 0xb7, 0xf4, 0xf8, 0x73, 0xc8, 0x4b, 0x34, 0x59, 0x0f, 0x32, 0xcd, 0xca, 0x88, 0x5a, 0x07, 0xf7, 0x90, 0x5f, 0x88, 0xba, 0xfe, 0x2b, 0x0f, 0x0b, 0xae, 0x1c, 0xa9, 0x94, 0x42, 0x37, 0x55, 0x40, 0x83, 0x18, 0x5b, 0xb2, 0x45, 0x74, 0x3b, 0x74, 0x5b, 0xea, 0xfa, 0x3f, 0x19, 0xa2, 0xfb, 0xf2, 0x73, 0xba, 0x98, 0x35, 0xa4, 0xf5, 0x6e, 0xf4, 0x83, 0x71, 0xb9, 0x0e, 0x71, 0x4b, 0x84, 0x2f, 0xba, 0xc6, 0xa8, 0xce, 0x55, 0x9d, 0xe2, 0x45, 0x37, 0x8d, 0xb1, 0x42, 0xe5, 0xee, 0xab, 0x71, 0x85, 0xc2, 0x16, 0x6b, 0xec, 0x97, 0xc4, 0x6d, 0x88, 0xb7, 0x0a, 0x7b, 0x1c, 0xbd, 0x7e, 0xf0, 0x71, 0xf2, 0x4a, 0xbc, 0xe0, 0xca, 0x27, 0xd5, 0x75, 0xdb, 0x71, 0x06, 0x95, 0x8e, 0x79, 0x9f, 0x25, 0xde, 0xf3, 0x3b, 0x2f, 0xf9, 0xcc, 0x2a, 0xec, 0x4e, 0x7a, 0x6f, 0x89, 0x4e, 0x4b, 0x7a, 0xef, 0x4b, 0xf9, 0xd6, 0x12, 0xcd, 0x4e, 0x7a, 0x57, 0xc9, 0x36, 0x47, 0x5d, 0x61, 0x18, 0x5d, 0x26, 0xc3, 0xe8, 0x59, 0x94, 0x31, 0x88, 0xc7, 0xe4, 0x3b, 0x49, 0x63, 0xd6, 0x0d, 0x36, 0xdb, 0x02, 0xb2, 0x7a, 0x75, 0xdc, 0x09, 0x39, 0x48, 0x67, 0x00, 0xe9, 0x4c, 0x99, 0x14, 0x0a, 0xf6, 0x46, 0x8a, 0xd5, 0x7e, 0x37, 0x6b, 0xfd, 0xbe, 0xdc, 0x9f, 0x80, 0x8a, 0x62, 0x18, 0xf7, 0xf6, 0x49, 0x82, 0x0a, 0x96, 0xa0, 0xc3, 0x12, 0xc8, 0x07, 0xb7, 0x55, 0x0a, 0x61, 0x6b, 0x5c, 0xf8, 0xc6, 0x57, 0xbf, 0x59, 0x2d, 0xd9, 0x4c, 0xe9, 0xee, 0x2c, 0x4c, 0x73, 0xd5, 0x6f, 0x76, 0xfb, 0xc1, 0xe6, 0x5e, 0xc0, 0x11, 0xaa, 0xf3, 0xad, 0x77, 0xb2, 0xe5, 0xbe, 0xf0, 0x5c, 0x47, 0x91, 0x38, 0x6d, 0xc8, 0xfd, 0x1c, 0x0e, 0xa4, 0x0e, 0x28, 0xfd, 0x64, 0xa1, 0x4c, 0x90, 0x63, 0x6b, 0x06, 0xc3, 0x83, 0x6f, 0x43, 0x5b, 0xf4, 0x86, 0xbe, 0x8d, 0xcb, 0x41, 0xb7, 0x6d, 0xde, 0x87, 0xa5, 0xe0, 0x5c, 0x88, 0x73, 0xcc, 0xc5, 0xde, 0xce, 0xb2, 0x8a, 0x67, 0x42, 0x51, 0xd1, 0x4c, 0x28, 0x2e, 0x9d, 0x89, 0x94, 0x6d, 0x26, 0x94, 0xca, 0x66, 0xb2, 0x34, 0x2f, 0xd6, 0x21, 0x2d, 0xb2, 0x94, 0xc2, 0x9a, 0xdc, 0x7e, 0xfa, 0xea, 0xb6, 0x57, 0x5f, 0xf2, 0xfc, 0xc3, 0xae, 0x0c, 0x2c, 0x0b, 0x25, 0xa5, 0x98, 0x1e, 0xa9, 0xe2, 0x0a, 0x68, 0x87, 0x6e, 0xd8, 0x06, 0xbb, 0x60, 0x3f, 0xdc, 0x06, 0x87, 0x61, 0x08, 0xce, 0xc2, 0x05, 0x18, 0x84, 0x0f, 0x60, 0x58, 0x67, 0xd0, 0x99, 0x75, 0xd9, 0xba, 0x3c, 0x9d, 0xa4, 0xb3, 0xeb, 0x5c, 0xba, 0x22, 0x5d, 0xa5, 0x2e, 0x40, 0x12, 0x1f, 0x7d, 0x1d, 0x91, 0x38, 0x1a, 0x69, 0x71, 0xa0, 0x3d, 0xed, 0x1c, 0xc5, 0xb8, 0x66, 0x0b, 0x3b, 0xc1, 0x1d, 0x1f, 0xac, 0xdf, 0x6c, 0x8b, 0x21, 0x55, 0xda, 0x82, 0xb0, 0x31, 0x49, 0x8f, 0x73, 0xe4, 0xc6, 0x61, 0xe1, 0xe3, 0x9f, 0xec, 0x58, 0x7b, 0x3b, 0xe5, 0x32, 0x61, 0xe3, 0xb1, 0xed, 0x71, 0x9c, 0xc9, 0x4b, 0xc4, 0x1b, 0x91, 0xb2, 0xa5, 0x8b, 0x3d, 0xa1, 0xcf, 0x02, 0xab, 0xa0, 0xae, 0x5b, 0x62, 0xb6, 0x4e, 0xb2, 0x45, 0x17, 0x4f, 0x48, 0x3d, 0x2c, 0x36, 0xd2, 0x3d, 0x7d, 0x52, 0x3c, 0x0b, 0x9b, 0x91, 0xde, 0x6e, 0xf9, 0xbc, 0xed, 0x71, 0x8e, 0x3b, 0xb0, 0x1d, 0xaf, 0x14, 0xf5, 0xf2, 0x7e, 0x51, 0x9a, 0x8d, 0x3c, 0x40, 0x74, 0x89, 0xf2, 0xe5, 0xa7, 0xf1, 0x9d, 0x59, 0x6e, 0x15, 0xdf, 0xd8, 0xba, 0x65, 0x35, 0x7e, 0x97, 0xfc, 0x24, 0x4a, 0x36, 0x58, 0x9f, 0xfc, 0xd3, 0x79, 0xef, 0x40, 0xae, 0xed, 0x5e, 0xb9, 0x1e, 0xf3, 0x95, 0xca, 0x41, 0xfc, 0xf5, 0xca, 0x95, 0xf8, 0xeb, 0x93, 0xe7, 0xe0, 0x6f, 0xa5, 0x5c, 0x8a, 0xbf, 0xd9, 0x72, 0x91, 0xa9, 0x80, 0x38, 0x11, 0xc9, 0x6e, 0x1e, 0x9f, 0xad, 0xa7, 0x72, 0x8b, 0x2c, 0xd9, 0xee, 0x93, 0xf3, 0xf1, 0x5d, 0x00, 0xa5, 0xb8, 0x5a, 0x70, 0xb9, 0x2b, 0xc0, 0x81, 0x52, 0x9c, 0x4d, 0x48, 0x71, 0x5e, 0x2f, 0x49, 0x71, 0xa4, 0x07, 0x2e, 0xa8, 0xb2, 0xc4, 0xb6, 0xbd, 0xec, 0x81, 0x61, 0x16, 0x79, 0x60, 0x20, 0xfb, 0x4a, 0x51, 0x62, 0x24, 0xe0, 0x42, 0x49, 0xdb, 0xff, 0x33, 0xc9, 0xcf, 0x18, 0x3c, 0x25, 0xb0, 0x12, 0x29, 0x4f, 0xff, 0xc7, 0xef, 0xa9, 0xf3, 0xd5, 0x49, 0xb2, 0x94, 0x75, 0xa1, 0x34, 0x13, 0x1a, 0x5a, 0xa7, 0x1e, 0x23, 0x89, 0x4a, 0xb5, 0xf9, 0x1e, 0x2f, 0x51, 0x91, 0x56, 0xf9, 0x18, 0x7b, 0x51, 0x83, 0x72, 0x56, 0xc8, 0xd6, 0x73, 0xd8, 0xaf, 0x1f, 0x62, 0x16, 0x79, 0x8a, 0x76, 0x20, 0xee, 0x17, 0x17, 0x4d, 0xf6, 0x4c, 0x1e, 0xac, 0x39, 0xe6, 0x2b, 0x45, 0x8e, 0xb9, 0xe3, 0xd9, 0x41, 0x5f, 0x09, 0x72, 0xe4, 0xed, 0x03, 0xad, 0x20, 0x4d, 0x1e, 0xdc, 0x50, 0xf5, 0x47, 0x13, 0xd4, 0x7c, 0x30, 0x00, 0x74, 0xb2, 0x36, 0xef, 0x8f, 0x7d, 0x20, 0x3b, 0x72, 0x2d, 0x79, 0xb8, 0x9e, 0xcf, 0x67, 0x0d, 0xa5, 0xac, 0xf5, 0xd3, 0xaa, 0x40, 0x37, 0xad, 0x12, 0xf4, 0xfe, 0x99, 0x90, 0xd6, 0xb0, 0xa1, 0xaf, 0x27, 0x7c, 0xba, 0xfc, 0xd2, 0x10, 0x1c, 0xbf, 0x97, 0x3c, 0x0b, 0x46, 0x32, 0x9c, 0xa4, 0xf1, 0xb6, 0xd1, 0xea, 0x97, 0xdf, 0x8c, 0xea, 0x34, 0x5d, 0xc5, 0xbf, 0xb6, 0xfe, 0x7c, 0xae, 0x3f, 0xf7, 0xaf, 0xa8, 0x9f, 0x22, 0x1f, 0x39, 0xd4, 0xfa, 0x39, 0xaa, 0x76, 0xc6, 0x60, 0xb0, 0x08, 0xeb, 0xde, 0x32, 0xa0, 0xd5, 0x1d, 0x85, 0x57, 0x5f, 0xaa, 0xf9, 0xa0, 0x17, 0x2a, 0x3e, 0xd8, 0x05, 0x5c, 0x6b, 0x69, 0x8e, 0x25, 0x1b, 0x6b, 0x5d, 0xd4, 0x93, 0xaf, 0x7f, 0x2b, 0x33, 0x6b, 0xfd, 0x9b, 0x19, 0x7a, 0x3d, 0xe4, 0xe7, 0xa7, 0xbd, 0x93, 0xb9, 0x49, 0x3f, 0xad, 0x1a, 0x74, 0xe4, 0x6d, 0x64, 0x5a, 0x85, 0xd6, 0x8a, 0xfe, 0x9e, 0xf0, 0x20, 0xb5, 0xe2, 0xd8, 0xbd, 0xa1, 0xd8, 0xfe, 0x18, 0xb5, 0xc2, 0x69, 0x3a, 0xb9, 0xd1, 0x5a, 0xfe, 0xd7, 0xb7, 0x22, 0xdb, 0x92, 0xf3, 0x7f, 0xa0, 0x15, 0xce, 0x3f, 0xb3, 0x15, 0xb9, 0x6a, 0x2b, 0xb2, 0x0d, 0x7a, 0xbd, 0x72, 0x39, 0xab, 0x2b, 0x3b, 0x4d, 0xb4, 0xe4, 0x1d, 0x73, 0x8f, 0x9e, 0xac, 0x22, 0xde, 0x9a, 0x92, 0x68, 0xc5, 0x81, 0xa4, 0x56, 0xf4, 0x73, 0x2b, 0x5c, 0xa6, 0x53, 0x7f, 0x93, 0x56, 0xe4, 0x58, 0x72, 0xff, 0xa6, 0xad, 0xf0, 0x7a, 0xe9, 0x34, 0x0f, 0x47, 0xc4, 0x67, 0x13, 0x94, 0xd7, 0xe3, 0xd1, 0x0d, 0x96, 0x73, 0xfd, 0xce, 0xed, 0x03, 0x14, 0x6b, 0x7c, 0xcb, 0x40, 0x1b, 0x1c, 0xeb, 0x94, 0xca, 0x8f, 0x3e, 0x3b, 0xff, 0x1c, 0xe8, 0x6a, 0x2e, 0xf6, 0xc1, 0xbc, 0x8b, 0xbd, 0x20, 0xdb, 0xb2, 0xae, 0xcf, 0x9b, 0x09, 0x3a, 0xcb, 0x63, 0xa0, 0x67, 0x3b, 0xde, 0x72, 0xac, 0xd5, 0x81, 0xb5, 0xf6, 0x20, 0x3e, 0x6e, 0x08, 0x9f, 0x79, 0xf5, 0xc8, 0x89, 0x7b, 0x43, 0x5d, 0xfb, 0xbb, 0x22, 0x66, 0x94, 0x1d, 0x74, 0x52, 0xc6, 0xe0, 0x7d, 0x52, 0x85, 0x5a, 0xaf, 0x57, 0x9d, 0x0f, 0xee, 0x04, 0x26, 0xd8, 0x45, 0x94, 0x77, 0x51, 0x6f, 0x21, 0xd7, 0x5b, 0x26, 0xea, 0xb5, 0x95, 0xbf, 0xfa, 0x6c, 0xcd, 0x07, 0x58, 0x27, 0x42, 0x41, 0x9b, 0x05, 0xe4, 0xb5, 0xad, 0x41, 0x9b, 0x05, 0xe5, 0x63, 0x67, 0x81, 0x5a, 0xaf, 0x36, 0x0b, 0x2a, 0xc6, 0xcc, 0xc2, 0xbf, 0xa0, 0xd6, 0xac, 0xf8, 0xdc, 0xff, 0xcb, 0x6a, 0xfd, 0xcb, 0x61, 0x4c, 0x10, 0xce, 0xc2, 0x35, 0xb6, 0xe5, 0x81, 0xff, 0x7b, 0x30, 0x4e, 0xee, 0x6d, 0xfd, 0x51, 0x9a, 0x61, 0xd8, 0x63, 0x3d, 0xf6, 0xf8, 0x1a, 0x7b, 0x3b, 0x97, 0x28, 0x5d, 0xa5, 0xcb, 0x8d, 0x54, 0xdb, 0x8d, 0xab, 0x19, 0x3a, 0x35, 0x9e, 0x5c, 0x3c, 0xf9, 0x78, 0xcd, 0xa0, 0x1f, 0x29, 0x5d, 0xd1, 0x8e, 0x01, 0xac, 0x7d, 0xce, 0xf6, 0x83, 0x51, 0x20, 0x7b, 0x86, 0x8a, 0x0f, 0x76, 0x40, 0xcd, 0x1f, 0x07, 0xb0, 0x66, 0xc4, 0xed, 0xe2, 0x6c, 0xc6, 0xa8, 0x9c, 0x99, 0x64, 0x5d, 0x94, 0x9b, 0xfe, 0x96, 0x59, 0x6f, 0x50, 0x4e, 0xbf, 0x39, 0xa5, 0x27, 0xcd, 0xd2, 0x7d, 0x7e, 0x2a, 0x61, 0xfb, 0x46, 0xc6, 0xb4, 0x45, 0x3d, 0xcf, 0xf4, 0x84, 0x8f, 0x1f, 0xdb, 0x54, 0xfe, 0xe1, 0x10, 0x84, 0x62, 0x07, 0x18, 0xaf, 0x0b, 0x4d, 0x6f, 0x24, 0xf0, 0x7a, 0xf8, 0xaf, 0x6b, 0x45, 0x0e, 0xb7, 0x22, 0xfb, 0x6f, 0xd2, 0x0a, 0x94, 0x67, 0x70, 0xe4, 0xed, 0x34, 0xf2, 0x28, 0x6d, 0x91, 0xa5, 0x66, 0x11, 0x1c, 0x13, 0xe3, 0xfe, 0x2c, 0x8f, 0xfb, 0xb3, 0xad, 0x80, 0xeb, 0x86, 0x81, 0x38, 0xf4, 0xf3, 0x73, 0xb9, 0xf6, 0x45, 0x1b, 0x2c, 0xeb, 0xae, 0xaf, 0xa4, 0x5a, 0x10, 0xe2, 0x17, 0x8e, 0x8b, 0x5a, 0x26, 0xa2, 0xed, 0xde, 0xbf, 0xac, 0x96, 0xbc, 0xeb, 0x73, 0xff, 0xec, 0x5a, 0xe6, 0x52, 0x2d, 0x0c, 0x51, 0xbb, 0x0a, 0x51, 0xae, 0xa5, 0xfc, 0x04, 0xd5, 0x51, 0xb4, 0xe5, 0xd7, 0x25, 0x35, 0x74, 0x4a, 0xb9, 0xe5, 0xd9, 0xb6, 0xd4, 0xba, 0x4a, 0xe3, 0x75, 0x19, 0xde, 0x34, 0xe9, 0x01, 0xf2, 0xb3, 0xd2, 0xdf, 0x99, 0xdc, 0x05, 0x16, 0xdd, 0x5b, 0xa6, 0x37, 0xa7, 0xc6, 0xd2, 0x2d, 0xb1, 0xf3, 0x93, 0xdf, 0x32, 0x77, 0x19, 0x28, 0xc2, 0x3a, 0xc3, 0x74, 0xf0, 0x84, 0x68, 0x47, 0xd7, 0x81, 0xae, 0x38, 0x4c, 0x2b, 0x52, 0x47, 0xf6, 0x2f, 0x6b, 0x47, 0x1c, 0xb2, 0x7f, 0xd3, 0x76, 0x14, 0x62, 0x3b, 0xb4, 0x36, 0x88, 0x7a, 0x8f, 0x95, 0x23, 0xe4, 0x8b, 0xb6, 0x3f, 0x3b, 0x18, 0xa3, 0xfa, 0x09, 0xa7, 0x70, 0x54, 0x5c, 0xa1, 0xae, 0x56, 0x28, 0x99, 0x1c, 0x78, 0xce, 0xe1, 0xab, 0xba, 0x54, 0xca, 0x58, 0x96, 0x8f, 0xad, 0xc9, 0x33, 0xbe, 0x35, 0x95, 0xfc, 0x77, 0x21, 0x84, 0xf4, 0x6f, 0x9a, 0x37, 0x1a, 0x2c, 0xeb, 0xce, 0x67, 0x12, 0x3f, 0xdb, 0x94, 0x76, 0x7d, 0x35, 0xb5, 0xa3, 0x61, 0xc3, 0xbf, 0x1d, 0x0e, 0x1f, 0x2f, 0xff, 0x80, 0xc6, 0xe5, 0xf8, 0xbd, 0xcf, 0xf0, 0xc8, 0xd4, 0x5c, 0x34, 0x41, 0x7c, 0x64, 0x86, 0xe3, 0x76, 0x10, 0xa9, 0xb8, 0x8e, 0x9c, 0xa4, 0xd4, 0x37, 0x34, 0xc0, 0x10, 0x39, 0x52, 0x2a, 0x20, 0xc2, 0xdc, 0x64, 0x1e, 0x72, 0x92, 0x9a, 0x0f, 0x07, 0x04, 0x4c, 0x92, 0x70, 0xbd, 0xe1, 0x6f, 0x30, 0xe3, 0xfe, 0xd2, 0x56, 0x24, 0xe6, 0xfd, 0xdf, 0xa2, 0x15, 0x7f, 0xcd, 0xa8, 0xe4, 0xab, 0xed, 0x88, 0x8f, 0xcb, 0xf5, 0x7f, 0xf9, 0xa8, 0xfc, 0x75, 0xfc, 0xbd, 0xfe, 0xa8, 0xe0, 0xf0, 0xd3, 0xfc, 0x38, 0x3e, 0xa9, 0x3c, 0x5e, 0xcf, 0x3c, 0xfe, 0x9a, 0xf8, 0x3b, 0xc5, 0x5c, 0x0b, 0x0e, 0xc3, 0xc8, 0x9d, 0x8f, 0xc0, 0x48, 0xeb, 0x40, 0xa7, 0x6e, 0xf2, 0x2c, 0xbc, 0x1f, 0xc0, 0xbf, 0xe3, 0x30, 0xd2, 0xbc, 0x11, 0xf8, 0xdf, 0x9d, 0xcb, 0xff, 0x7e, 0xd9, 0xaa, 0xef, 0xb5, 0x36, 0x16, 0x36, 0xdd, 0xd1, 0xd8, 0x08, 0xb6, 0xc5, 0x55, 0xa1, 0x32, 0x29, 0x25, 0x4d, 0xba, 0xb5, 0xd0, 0x23, 0x39, 0x6e, 0xfd, 0x7a, 0xe1, 0xad, 0xb7, 0x16, 0x16, 0x79, 0x6e, 0xbd, 0x75, 0xe6, 0xd4, 0x0c, 0xf8, 0xdb, 0xff, 0x1b, 0x59, 0xb9, 0x0d, 0xff, 0x16, 0xe3, 0xdf, 0x61, 0x18, 0x69, 0xc9, 0x25, 0xeb, 0x2c, 0x6c, 0x73, 0xb5, 0x78, 0xd7, 0xfa, 0x13, 0xa0, 0xf0, 0x38, 0xf1, 0xbc, 0xdf, 0x77, 0xa9, 0xd7, 0x4b, 0x29, 0xe9, 0x00, 0x73, 0xb0, 0x5f, 0xea, 0x37, 0xab, 0x36, 0x2e, 0x58, 0xde, 0xf6, 0x3d, 0x08, 0xad, 0x5a, 0xd5, 0x06, 0xd4, 0x8d, 0xc2, 0x3b, 0x97, 0x35, 0x42, 0x2b, 0x3e, 0xdd, 0xde, 0xfc, 0xbd, 0xbb, 0xee, 0x82, 0xbb, 0xee, 0x68, 0xc1, 0xd7, 0xe2, 0x7e, 0xd5, 0xaa, 0x68, 0x61, 0xf3, 0x1d, 0xcb, 0x5a, 0xbf, 0xd7, 0xfa, 0xf7, 0x89, 0xac, 0x49, 0xff, 0x74, 0xd8, 0x2a, 0x67, 0xe2, 0xbe, 0x25, 0x3f, 0x71, 0x1f, 0x7d, 0x23, 0xe9, 0xfe, 0xb2, 0x7a, 0x6f, 0xa3, 0x1f, 0x82, 0xfd, 0x37, 0xde, 0x57, 0xba, 0x03, 0x6f, 0x79, 0x68, 0xcd, 0xfd, 0x90, 0xad, 0x00, 0xca, 0xca, 0x3f, 0xc1, 0xf6, 0xed, 0x64, 0xff, 0x30, 0xa7, 0xec, 0x30, 0xff, 0x7d, 0xa0, 0x08, 0x26, 0xb9, 0x81, 0xbf, 0xc7, 0xd4, 0x56, 0xf7, 0xd4, 0x2a, 0xf6, 0xbe, 0x52, 0xb7, 0xa5, 0xe6, 0x7d, 0x68, 0x8b, 0xa7, 0x2f, 0x71, 0x9b, 0xeb, 0xb6, 0x54, 0xbd, 0x0f, 0x4b, 0x31, 0xc5, 0xe6, 0xff, 0x99, 0x3b, 0x43, 0xf5, 0x8c, 0xbc, 0x00, 0x9a, 0xdc, 0x1d, 0xf8, 0xfe, 0xff, 0x0d, 0xcd, 0x51, 0xbd, 0xdb, 0x07, 0x51, 0x5c, 0x83, 0xb5, 0x71, 0xca, 0xa3, 0xc2, 0x7a, 0x1c, 0xd7, 0x63, 0x3e, 0x7e, 0x7e, 0x02, 0x31, 0x30, 0x2d, 0xc4, 0xbe, 0x3b, 0xc8, 0x63, 0xde, 0x62, 0xba, 0xab, 0x8f, 0x5a, 0xe8, 0xfc, 0x4f, 0x4a, 0x5b, 0x44, 0x4f, 0x0d, 0xea, 0x77, 0x4b, 0xfd, 0x4f, 0x81, 0x8c, 0x7f, 0x8d, 0x1c, 0x7b, 0x70, 0x6d, 0xc4, 0xff, 0xc0, 0xe1, 0x0a, 0x6a, 0xf1, 0xbf, 0x62, 0xfd, 0xf9, 0xdc, 0xea, 0x33, 0x36, 0x5f, 0x30, 0x16, 0xb1, 0xcc, 0x98, 0x0f, 0x39, 0xb7, 0xf8, 0xc0, 0x2e, 0xf9, 0x84, 0xaf, 0x9b, 0xa4, 0x7e, 0xbd, 0x44, 0xfe, 0xdc, 0x17, 0xab, 0xf6, 0x92, 0xc2, 0x9b, 0x6e, 0x87, 0x19, 0xcb, 0x63, 0xd9, 0x40, 0x44, 0xdf, 0xb0, 0x39, 0xa1, 0x0c, 0x57, 0x69, 0x22, 0xd6, 0xa4, 0x85, 0xbf, 0x7a, 0x86, 0x9e, 0xf9, 0xee, 0x90, 0x88, 0xa8, 0x41, 0x5e, 0xac, 0x17, 0xae, 0x04, 0xc9, 0x9d, 0xe9, 0xff, 0x59, 0xa0, 0x5d, 0x51, 0x18, 0x16, 0x85, 0xd4, 0xf7, 0x65, 0x16, 0x5e, 0x19, 0xe2, 0xbb, 0xb0, 0xc5, 0x54, 0x08, 0x69, 0x90, 0x19, 0x31, 0x49, 0x99, 0xf8, 0xe5, 0x7b, 0x54, 0x9b, 0xf0, 0x72, 0x8d, 0x5f, 0x53, 0xac, 0x5a, 0x1d, 0xff, 0xd1, 0x97, 0xf6, 0xa4, 0x2f, 0x63, 0x11, 0x73, 0x08, 0xbf, 0xd6, 0x17, 0x2a, 0x7f, 0x82, 0x4c, 0x59, 0xff, 0xcf, 0x2f, 0x4b, 0x99, 0xf4, 0x0d, 0x9f, 0xfd, 0xd4, 0x71, 0xb9, 0x00, 0x3f, 0xb5, 0x15, 0x42, 0x89, 0x56, 0x86, 0x5a, 0xfb, 0xe5, 0x94, 0x32, 0x70, 0x7d, 0x6d, 0xad, 0x4b, 0xec, 0x89, 0x50, 0x2b, 0xd5, 0xba, 0x32, 0xc9, 0x86, 0xeb, 0x7b, 0x0f, 0xd5, 0x6d, 0x4d, 0xb4, 0xfc, 0xce, 0xd1, 0xba, 0xad, 0xee, 0x8c, 0xa4, 0x9e, 0x9c, 0x8e, 0x97, 0x65, 0x2b, 0x3c, 0x80, 0x77, 0x46, 0x7e, 0x26, 0xbb, 0x98, 0xb2, 0xf8, 0xee, 0xd3, 0x32, 0x8e, 0x57, 0x96, 0x25, 0xe2, 0xc1, 0x59, 0x83, 0x5b, 0x07, 0x06, 0x3b, 0x13, 0x71, 0x47, 0x1a, 0x36, 0xcb, 0x26, 0x70, 0x82, 0x09, 0x32, 0xf9, 0x14, 0x89, 0xe3, 0x80, 0xf1, 0x2a, 0xdb, 0x67, 0x33, 0xf1, 0x98, 0x3d, 0x17, 0x85, 0xc4, 0xbe, 0xe6, 0x0c, 0x1f, 0x94, 0x61, 0x8b, 0xaf, 0xf8, 0x71, 0xa5, 0x3d, 0xc3, 0x0f, 0x25, 0xd8, 0x06, 0xad, 0x4e, 0x68, 0xd8, 0x8c, 0xbd, 0x59, 0xe3, 0xce, 0x48, 0x81, 0xd7, 0x05, 0xea, 0xc3, 0x32, 0x4b, 0xdd, 0x56, 0xb5, 0xb7, 0x4b, 0x92, 0xdf, 0xde, 0xf9, 0x71, 0x8d, 0xe8, 0xe1, 0x36, 0x75, 0x87, 0xd7, 0x9b, 0xd4, 0x33, 0x63, 0xdd, 0xb6, 0xd4, 0xb2, 0x5a, 0x0c, 0x5c, 0x4a, 0x7e, 0x30, 0x16, 0x5e, 0x93, 0x02, 0x83, 0xcb, 0xa2, 0xf4, 0xbf, 0x0d, 0xe4, 0x3e, 0x1b, 0x56, 0x0f, 0xbe, 0xc4, 0xb1, 0x7a, 0xc4, 0x99, 0x52, 0x86, 0x5b, 0xcf, 0xbe, 0xa3, 0x9a, 0xc0, 0xd4, 0x06, 0xc5, 0x6e, 0xc8, 0x92, 0x2d, 0x6e, 0x3d, 0xed, 0x3c, 0xf3, 0x29, 0x5a, 0xaf, 0x2d, 0x54, 0xbf, 0x39, 0xb8, 0x25, 0x7c, 0x41, 0xc4, 0x03, 0x74, 0x67, 0x32, 0x6e, 0xff, 0x27, 0x79, 0xba, 0x77, 0xdd, 0x01, 0x65, 0x84, 0xe1, 0x51, 0x9d, 0xe6, 0x67, 0x9d, 0xa2, 0x80, 0x89, 0xf7, 0xae, 0x15, 0xfc, 0xee, 0x14, 0x42, 0xda, 0x1a, 0xb1, 0x04, 0x56, 0x80, 0x93, 0xda, 0xe5, 0xd8, 0xdf, 0xb0, 0x59, 0xc4, 0x0f, 0x13, 0x78, 0x49, 0x5a, 0xe7, 0x4c, 0x0d, 0x68, 0x15, 0xe0, 0x8a, 0x4e, 0xd2, 0xda, 0x38, 0x7c, 0xc2, 0x46, 0xb6, 0x8b, 0x0f, 0x73, 0x64, 0x57, 0x97, 0xe6, 0x23, 0xcd, 0xa1, 0x79, 0x47, 0x5f, 0x8d, 0x3c, 0xeb, 0x1d, 0xc8, 0xf2, 0xef, 0x06, 0x13, 0xfe, 0x99, 0x91, 0x6e, 0x48, 0xaa, 0x5f, 0x2a, 0x29, 0x1e, 0x53, 0xc8, 0x4a, 0xbe, 0x2a, 0x97, 0x5b, 0x22, 0xa6, 0x94, 0x08, 0x6e, 0xe6, 0x94, 0x38, 0x40, 0xc7, 0x78, 0xd7, 0x37, 0x11, 0xbd, 0xa6, 0xc7, 0xd3, 0x01, 0xce, 0xa3, 0xef, 0x40, 0x8e, 0x35, 0x18, 0x4f, 0xcb, 0x88, 0xdf, 0x75, 0x59, 0xfd, 0x09, 0x5c, 0xa4, 0x08, 0xc9, 0x12, 0x79, 0xaf, 0x32, 0xab, 0x71, 0x84, 0x38, 0x26, 0x98, 0x5d, 0x8d, 0x09, 0xe6, 0x98, 0x4f, 0xf6, 0x31, 0xc1, 0x3d, 0xb4, 0x3b, 0x96, 0x28, 0xdd, 0x5a, 0x9b, 0x98, 0x1f, 0x89, 0x52, 0x39, 0x22, 0xd8, 0xfc, 0xb1, 0x11, 0xc1, 0x90, 0x52, 0x9e, 0x23, 0x88, 0x5a, 0x57, 0xb1, 0xec, 0x60, 0xa3, 0x78, 0x6a, 0xae, 0x26, 0xa4, 0x13, 0x0e, 0xb0, 0x5a, 0x67, 0x82, 0x09, 0xa9, 0x94, 0x89, 0xa8, 0x54, 0xb4, 0x0f, 0xcc, 0x4c, 0xcb, 0x2c, 0xe5, 0xe7, 0xc0, 0xea, 0x0e, 0x40, 0x36, 0x53, 0x3f, 0x3a, 0x43, 0xcc, 0x27, 0xbf, 0x1f, 0x5b, 0x5f, 0x44, 0x5a, 0x65, 0x62, 0x4a, 0x85, 0x10, 0x27, 0x1f, 0xeb, 0xda, 0x89, 0x1f, 0xed, 0x24, 0xd2, 0xe9, 0x20, 0xf9, 0x32, 0x53, 0x47, 0xf2, 0x10, 0x8d, 0x89, 0xc6, 0x23, 0x5b, 0x0f, 0xc1, 0xc8, 0x3f, 0x0c, 0x09, 0x1e, 0xd9, 0x7a, 0x16, 0xff, 0x3e, 0x82, 0x91, 0xbb, 0xfa, 0x04, 0x41, 0x6f, 0x59, 0xf5, 0x83, 0xbb, 0x96, 0x27, 0x33, 0xc8, 0x44, 0xc2, 0xff, 0x25, 0xee, 0xf8, 0x83, 0x03, 0xf8, 0x77, 0x37, 0xfe, 0x5d, 0x84, 0x91, 0x36, 0xaf, 0xe0, 0x8e, 0x6b, 0xe6, 0x88, 0x77, 0xff, 0xb0, 0x34, 0x95, 0x3b, 0xb6, 0x3f, 0x2c, 0xae, 0x7f, 0xdf, 0x26, 0xf8, 0xd2, 0xdf, 0xbf, 0x80, 0xd7, 0xb4, 0xa4, 0xd2, 0x10, 0x8e, 0x77, 0x09, 0x06, 0x37, 0xb2, 0x7a, 0xef, 0x18, 0x2e, 0xc9, 0x3d, 0xbb, 0x56, 0x3e, 0x29, 0x32, 0x6b, 0xfc, 0xef, 0x07, 0xa1, 0x04, 0x2f, 0x6c, 0xf3, 0x25, 0xee, 0xdb, 0xcb, 0x92, 0xee, 0x17, 0x4d, 0xc0, 0x23, 0x3b, 0xd4, 0x59, 0xf1, 0x28, 0xf2, 0xc8, 0x36, 0x9a, 0x4f, 0x77, 0x0d, 0x24, 0xf1, 0xc8, 0x26, 0xa4, 0x0f, 0x12, 0xcd, 0xfd, 0xbb, 0x7a, 0x53, 0x78, 0xe4, 0x36, 0x8d, 0x47, 0xde, 0xd5, 0xfe, 0xd9, 0x3c, 0xf2, 0xae, 0xe7, 0x91, 0x47, 0xa6, 0x25, 0xf3, 0xc8, 0xbb, 0x5e, 0x82, 0x76, 0x8b, 0x17, 0xf4, 0xc9, 0x7c, 0xf2, 0xae, 0x57, 0xaf, 0x8d, 0x4f, 0xe2, 0xb7, 0x57, 0xe1, 0x93, 0x77, 0xfd, 0xee, 0x5a, 0xf8, 0xa4, 0xda, 0xb7, 0xab, 0xf1, 0xc9, 0xee, 0x14, 0x3e, 0xd9, 0xf6, 0x97, 0xf0, 0xc9, 0xbb, 0x6a, 0xff, 0x52, 0x3e, 0x79, 0x57, 0xe5, 0x5f, 0xc0, 0x27, 0xdb, 0x53, 0xf9, 0x64, 0x5b, 0xfe, 0xb5, 0xf1, 0xc9, 0xbb, 0x5c, 0xe3, 0xa9, 0xfd, 0x5d, 0xf9, 0xa9, 0xd4, 0xbe, 0xcd, 0x70, 0x55, 0x3e, 0xd9, 0xf6, 0xd7, 0xf3, 0xc9, 0x19, 0x75, 0x10, 0xe5, 0x71, 0x7b, 0x67, 0x0c, 0xaf, 0x6c, 0x4b, 0xe2, 0x95, 0xed, 0x9f, 0xc7, 0x2b, 0xdb, 0x2c, 0x9f, 0xc5, 0x2b, 0xef, 0xca, 0xbe, 0x3a, 0xaf, 0xbc, 0xcb, 0x36, 0x96, 0x57, 0xb6, 0x39, 0x26, 0xe6, 0x95, 0x08, 0xd3, 0x31, 0xbc, 0xf2, 0xaf, 0x81, 0xde, 0xb5, 0xf3, 0x4a, 0x8a, 0xb0, 0xa8, 0xfa, 0x5a, 0xe4, 0xc8, 0x0c, 0x1e, 0x07, 0x58, 0xcc, 0xbe, 0x18, 0x44, 0xa6, 0xcf, 0x0d, 0x41, 0xc6, 0xdc, 0x15, 0xa0, 0x07, 0xf3, 0x5c, 0x8a, 0x9e, 0x9b, 0xc9, 0x71, 0x70, 0x2d, 0x73, 0x7d, 0x90, 0x85, 0x73, 0x80, 0xa2, 0xba, 0x99, 0xed, 0xf5, 0xc8, 0x57, 0xc9, 0xcf, 0x2e, 0x69, 0x43, 0x20, 0x5f, 0xb5, 0x2f, 0x44, 0xbe, 0xba, 0x15, 0xf9, 0xea, 0xdf, 0xd9, 0xff, 0x4e, 0xc4, 0x03, 0x14, 0xbc, 0xf5, 0xae, 0x3f, 0xa9, 0xbc, 0xb5, 0x2d, 0xc1, 0x5b, 0x03, 0x6f, 0x01, 0x45, 0xb8, 0xb0, 0x88, 0xf7, 0xc8, 0x5b, 0xdb, 0xe2, 0xbc, 0xd5, 0x4e, 0xbc, 0x95, 0xfa, 0xee, 0xd8, 0x5f, 0xb7, 0x15, 0xef, 0x4b, 0xea, 0xb6, 0x96, 0x9f, 0x07, 0x7f, 0xe2, 0x44, 0xb2, 0x5e, 0xe5, 0xb8, 0x38, 0xd6, 0xf0, 0xb9, 0x1c, 0x77, 0xcf, 0x55, 0x38, 0x2e, 0x40, 0xf7, 0x55, 0x79, 0xae, 0x2b, 0x89, 0xe7, 0x1a, 0x90, 0xe7, 0xe6, 0xd3, 0x19, 0xb7, 0xea, 0x9b, 0xd4, 0x22, 0x7f, 0x16, 0xff, 0x7d, 0xe1, 0xff, 0x77, 0xf9, 0x2f, 0x69, 0x1f, 0x59, 0x55, 0xed, 0x23, 0x1e, 0xed, 0x3b, 0x20, 0xcb, 0x7e, 0x07, 0x47, 0x36, 0x21, 0xed, 0x23, 0x6b, 0x9b, 0x61, 0x5f, 0x6c, 0x79, 0x49, 0xd5, 0x07, 0xb9, 0x90, 0x8d, 0x3d, 0xdd, 0x17, 0x8b, 0xe4, 0x2c, 0xcb, 0xc0, 0x3b, 0x4c, 0x0d, 0x4b, 0x72, 0x36, 0xc7, 0xf9, 0xc3, 0xbe, 0xc9, 0x4e, 0xf5, 0xce, 0x2c, 0x4b, 0x1c, 0xd9, 0x4f, 0x17, 0x8f, 0xea, 0x47, 0x3a, 0x3e, 0x35, 0x1c, 0xb7, 0x26, 0x45, 0xc7, 0x07, 0x31, 0xec, 0x2c, 0x8d, 0x90, 0x63, 0x15, 0x78, 0x9d, 0xa4, 0xc9, 0xd6, 0xcc, 0x1e, 0x38, 0xdb, 0x98, 0xef, 0xcf, 0x62, 0xbe, 0x9f, 0x4f, 0x54, 0xf7, 0x7f, 0x9e, 0x02, 0x89, 0x69, 0x33, 0xe9, 0x31, 0x3a, 0x98, 0xe7, 0xbb, 0xb0, 0x4c, 0x0f, 0x52, 0xf1, 0xac, 0x56, 0x5d, 0x52, 0x64, 0x4f, 0x1f, 0x8f, 0xde, 0x01, 0x7c, 0xef, 0x90, 0x5a, 0x54, 0x79, 0x40, 0xa5, 0xc9, 0x48, 0x89, 0x4d, 0xf8, 0x6e, 0x8b, 0xdd, 0x05, 0x39, 0x38, 0x9e, 0xa5, 0xfe, 0x7f, 0x69, 0x75, 0x1e, 0x5b, 0x7b, 0x4b, 0x39, 0xd0, 0xa9, 0x2d, 0x45, 0x3a, 0xb3, 0x36, 0x6c, 0x90, 0x7c, 0x36, 0x31, 0x62, 0x8f, 0xb0, 0x87, 0x32, 0xd3, 0xd7, 0x3a, 0x62, 0x40, 0x27, 0xbe, 0x5a, 0x8e, 0xc5, 0x1b, 0x08, 0x9b, 0x93, 0xf3, 0x10, 0x0d, 0xff, 0x1a, 0xca, 0x23, 0x95, 0x77, 0x82, 0xa5, 0xb4, 0x03, 0xfc, 0xaf, 0x3f, 0x27, 0xd5, 0x26, 0x62, 0xfc, 0xe2, 0x08, 0x97, 0x1c, 0x7d, 0xce, 0x3a, 0x3f, 0x31, 0xbe, 0x49, 0x6f, 0x5f, 0xa0, 0x28, 0x09, 0xb2, 0xc5, 0x3a, 0x3f, 0x9a, 0x95, 0x98, 0x81, 0x71, 0x4e, 0x90, 0x1f, 0x8f, 0xeb, 0x2b, 0x22, 0xa3, 0xd0, 0x49, 0x28, 0x72, 0x84, 0x1a, 0xc4, 0xf6, 0xe4, 0x1a, 0x6c, 0x38, 0x07, 0xe4, 0x3c, 0xf2, 0xad, 0xbc, 0xf7, 0x71, 0x30, 0x84, 0x33, 0x93, 0x70, 0xc9, 0x20, 0x1b, 0x6d, 0x3e, 0x29, 0x2b, 0x7c, 0x26, 0xa5, 0x4e, 0xf2, 0x5b, 0xca, 0x1c, 0x84, 0x7c, 0x72, 0xf7, 0xa9, 0xdf, 0x24, 0xb7, 0x40, 0xcc, 0x7e, 0x4d, 0x2e, 0xfa, 0x87, 0x53, 0x30, 0xb2, 0x2e, 0x1b, 0xe5, 0x22, 0x07, 0xde, 0xe3, 0x73, 0x87, 0x05, 0xff, 0x9e, 0x14, 0x4c, 0xfc, 0x7b, 0x2d, 0x77, 0x44, 0xbe, 0x87, 0x8b, 0xe5, 0x64, 0xd1, 0x28, 0x25, 0xed, 0xff, 0x92, 0x74, 0xf4, 0x8f, 0x26, 0x18, 0xb9, 0xfb, 0x25, 0xbc, 0x7a, 0x61, 0xe4, 0x87, 0x31, 0x21, 0x1d, 0x75, 0x9d, 0x15, 0xef, 0xba, 0xb7, 0x8f, 0xd9, 0x23, 0xd8, 0x88, 0xed, 0xef, 0x52, 0xbf, 0x1b, 0x9d, 0x60, 0x8f, 0x80, 0x6e, 0x84, 0xbc, 0xa3, 0x25, 0x15, 0x36, 0xfd, 0xcf, 0xcf, 0xdf, 0x2f, 0x88, 0xdf, 0xb4, 0x61, 0xce, 0xd6, 0xc2, 0xc6, 0xe5, 0xab, 0xef, 0xb8, 0x7d, 0x39, 0xdc, 0x7e, 0xc7, 0xf7, 0xbe, 0x57, 0xd8, 0xba, 0xfc, 0xae, 0x55, 0x3f, 0x68, 0xc5, 0xa7, 0x3b, 0x91, 0x57, 0x8d, 0xf9, 0x87, 0x32, 0xd1, 0xdd, 0x0f, 0x27, 0xee, 0x7f, 0xd8, 0xad, 0xde, 0xa7, 0xc1, 0x48, 0xe7, 0xa3, 0xf8, 0x77, 0x02, 0xff, 0x6c, 0x89, 0xf7, 0x5d, 0x96, 0x64, 0xf9, 0x29, 0x49, 0x86, 0xda, 0x84, 0xb3, 0x88, 0x70, 0xa5, 0x17, 0x65, 0xa8, 0xf5, 0x44, 0x37, 0x3b, 0x9e, 0xd1, 0x64, 0x28, 0x94, 0x95, 0x1a, 0x35, 0x59, 0xa9, 0x63, 0xbb, 0xf0, 0xbc, 0xf5, 0xdd, 0x1d, 0x34, 0xab, 0xd6, 0x59, 0x80, 0xec, 0x0d, 0x37, 0xe1, 0x5f, 0x2f, 0xfe, 0x6d, 0xc3, 0xb9, 0x52, 0x3b, 0x46, 0x86, 0xaa, 0x15, 0x52, 0x4f, 0xc7, 0x73, 0xb0, 0x94, 0x67, 0x9d, 0x5c, 0xfe, 0x3e, 0x3c, 0x5a, 0x7e, 0x4e, 0xb9, 0x88, 0xb3, 0xba, 0x91, 0xdf, 0x1c, 0x86, 0x26, 0x8a, 0xbb, 0x83, 0xef, 0x9a, 0x51, 0x96, 0xf2, 0x70, 0xda, 0x51, 0x28, 0x56, 0x65, 0xa9, 0x52, 0xa4, 0x33, 0x5e, 0x96, 0xa5, 0x7c, 0x51, 0x33, 0xfb, 0x11, 0x15, 0xb2, 0x54, 0x80, 0xf3, 0xfd, 0x16, 0x6a, 0xb1, 0xde, 0x7a, 0xfc, 0x5b, 0x44, 0xb2, 0x7a, 0x42, 0x96, 0xea, 0x78, 0x0b, 0xdb, 0x92, 0x3b, 0x81, 0x2c, 0xd5, 0x9a, 0x2c, 0x4b, 0xa9, 0x7d, 0x9c, 0x40, 0x96, 0x5a, 0x4a, 0x33, 0xa8, 0x2d, 0x45, 0x96, 0x22, 0x3f, 0x9b, 0xad, 0x63, 0x64, 0xa9, 0xd6, 0xcf, 0x93, 0xa5, 0x3a, 0x56, 0xfc, 0xa5, 0xb2, 0x54, 0xc7, 0xb2, 0xbf, 0x40, 0x96, 0xea, 0x4a, 0x95, 0xa5, 0x7e, 0xd8, 0x74, 0x6d, 0xb2, 0x54, 0x47, 0x70, 0xbc, 0x34, 0xd0, 0x51, 0x96, 0x2a, 0x0d, 0xfc, 0xd0, 0x7b, 0x55, 0x59, 0x6a, 0xfd, 0xdf, 0x66, 0xcf, 0xa1, 0xe3, 0xc3, 0x31, 0x72, 0xd4, 0xfa, 0x24, 0x39, 0xaa, 0xeb, 0xf3, 0xe4, 0xa8, 0x1f, 0x06, 0x3e, 0x4b, 0x8e, 0xea, 0x28, 0xba, 0xba, 0x1c, 0xd5, 0xe1, 0x1f, 0x2b, 0x47, 0xfd, 0x70, 0xd1, 0xc4, 0x72, 0x14, 0xc2, 0x73, 0x8c, 0x1c, 0xf5, 0xd7, 0x40, 0xee, 0xda, 0xe5, 0x28, 0x11, 0xf3, 0xd3, 0x53, 0x44, 0x1e, 0xe7, 0xed, 0x48, 0xa3, 0x3a, 0x14, 0x9a, 0xa5, 0x52, 0x05, 0xc2, 0x8b, 0xa3, 0x7e, 0x21, 0x5e, 0xdf, 0xfd, 0xc0, 0x61, 0x6b, 0xc5, 0x83, 0x2f, 0x25, 0x61, 0xbc, 0x17, 0xb9, 0x43, 0x6b, 0xc1, 0x9d, 0x70, 0xb7, 0x72, 0x89, 0x34, 0x8c, 0x28, 0x8a, 0xa9, 0xb4, 0x82, 0x75, 0x1e, 0x2e, 0xb9, 0x33, 0x84, 0x1f, 0x48, 0x3b, 0x48, 0x41, 0x81, 0xc1, 0x28, 0x5b, 0xad, 0x8d, 0x64, 0x7c, 0x8d, 0x74, 0xf4, 0x24, 0x2d, 0x62, 0x79, 0xad, 0x59, 0x39, 0xcd, 0xde, 0xd5, 0xbf, 0xef, 0xce, 0x44, 0x3e, 0x64, 0xa5, 0xa8, 0xb9, 0xc9, 0x9a, 0x5b, 0xac, 0xfb, 0x8a, 0xef, 0xdc, 0x93, 0x0a, 0xdd, 0x71, 0x7d, 0xda, 0x6d, 0x85, 0x37, 0x52, 0x3a, 0x79, 0x68, 0x60, 0xad, 0xda, 0x5c, 0x9c, 0x6f, 0x4d, 0xb0, 0x9e, 0x66, 0xeb, 0x0f, 0x4d, 0x60, 0x68, 0x5d, 0x73, 0x2c, 0x86, 0x7c, 0xd7, 0x84, 0x33, 0xd6, 0x8c, 0x7f, 0x16, 0xa4, 0x06, 0xd4, 0xdf, 0x6d, 0x81, 0x01, 0x5e, 0x6d, 0x5b, 0xfe, 0xec, 0x2f, 0xef, 0xa7, 0x76, 0x88, 0x2f, 0x11, 0x4a, 0x17, 0x11, 0x4a, 0x56, 0x5b, 0x8d, 0x1d, 0x57, 0xfc, 0xd9, 0x5f, 0x87, 0xff, 0x7d, 0x41, 0x67, 0xc1, 0xdf, 0xf7, 0x88, 0x7a, 0xfb, 0xa6, 0x0d, 0xd0, 0x5d, 0x39, 0xc5, 0x21, 0xa5, 0xa8, 0xa5, 0x87, 0xce, 0xe4, 0x55, 0xeb, 0x39, 0x3e, 0x09, 0x50, 0x6c, 0x07, 0x29, 0x54, 0xd7, 0x6b, 0xd1, 0x1b, 0x41, 0x59, 0x5f, 0xbf, 0xd9, 0x8c, 0x94, 0x72, 0x59, 0x0e, 0xe8, 0x95, 0x18, 0x69, 0xc3, 0x80, 0xc2, 0xbb, 0x3b, 0x9c, 0xa3, 0x7e, 0x73, 0xd5, 0xbb, 0xca, 0x45, 0x84, 0x19, 0x97, 0x20, 0xcd, 0x52, 0x2e, 0xf5, 0x22, 0x54, 0x5b, 0xbf, 0xb1, 0x37, 0xd6, 0x7c, 0x5e, 0xd4, 0xa4, 0x07, 0xe5, 0x7f, 0x8b, 0x9a, 0x08, 0x82, 0x95, 0x2a, 0x04, 0x49, 0x8a, 0xf4, 0x92, 0xf5, 0x87, 0x0b, 0x29, 0x6c, 0xf1, 0x58, 0x29, 0x52, 0xd7, 0xc3, 0xd0, 0x3d, 0x0f, 0x39, 0x09, 0xcf, 0xd1, 0xa4, 0x3d, 0x6e, 0x77, 0xc0, 0x6a, 0xda, 0xa5, 0x48, 0xf0, 0x5e, 0x1c, 0x23, 0x4b, 0x8a, 0x54, 0x07, 0xba, 0x5a, 0x94, 0x44, 0x1c, 0x05, 0x05, 0x60, 0x68, 0x87, 0xd5, 0x80, 0x52, 0x93, 0x88, 0xff, 0x7e, 0xfd, 0x96, 0x5d, 0xb0, 0x86, 0xa2, 0x0a, 0x2e, 0xcf, 0x24, 0x1b, 0xda, 0xfe, 0xce, 0x88, 0xc1, 0x0e, 0xb2, 0xde, 0x01, 0x9a, 0x3c, 0x89, 0x98, 0x7d, 0x3c, 0xb9, 0x24, 0x2c, 0x19, 0x87, 0x9e, 0x63, 0x5b, 0x17, 0x8f, 0x8f, 0xae, 0x07, 0xe7, 0x9c, 0xbe, 0xdf, 0xa2, 0x84, 0xe8, 0x5c, 0x5b, 0x50, 0x09, 0x06, 0x07, 0x79, 0x72, 0x77, 0x70, 0xec, 0x55, 0x5d, 0x4a, 0x84, 0xf8, 0x15, 0x14, 0x7d, 0x94, 0xe8, 0xea, 0x0f, 0xaf, 0x8f, 0xea, 0x51, 0x52, 0x5b, 0x91, 0x88, 0x99, 0x3e, 0x5a, 0x49, 0x7a, 0xad, 0xaa, 0x46, 0xa4, 0xf7, 0x97, 0x06, 0x20, 0xed, 0xd8, 0x17, 0xea, 0x37, 0x73, 0x7b, 0x9b, 0x60, 0x05, 0xb6, 0x32, 0xbb, 0x00, 0xe5, 0xab, 0x9b, 0x7c, 0xb0, 0x92, 0xca, 0x27, 0x7a, 0xf0, 0xc3, 0xe9, 0xf1, 0xaf, 0x33, 0xb1, 0xf4, 0x70, 0x38, 0xf1, 0x7d, 0x3a, 0x7f, 0x8f, 0x63, 0x45, 0x35, 0xfa, 0x67, 0xc2, 0x77, 0xa6, 0x51, 0x9c, 0xed, 0x86, 0x9b, 0x09, 0x57, 0x5c, 0xb0, 0x84, 0xae, 0x5d, 0xc1, 0xff, 0x2f, 0x73, 0x57, 0x03, 0xdc, 0xd4, 0x75, 0xa5, 0xcf, 0x93, 0x65, 0xf1, 0x30, 0xb2, 0x51, 0x1d, 0xd5, 0xab, 0x10, 0x2f, 0x79, 0x51, 0x14, 0x45, 0xb5, 0x84, 0xe5, 0x3a, 0xc0, 0x52, 0x86, 0xa5, 0xf2, 0x93, 0xfc, 0x83, 0x22, 0x34, 0xae, 0xe3, 0xa1, 0x0e, 0xcb, 0x10, 0x01, 0xf6, 0x93, 0x71, 0x6c, 0xd0, 0x28, 0x4e, 0xd6, 0x9b, 0xf1, 0x6c, 0x65, 0x82, 0x05, 0xcd, 0x0f, 0x76, 0x8c, 0x43, 0xdd, 0x8d, 0x9b, 0x65, 0x32, 0x9d, 0x2e, 0x61, 0xa1, 0x21, 0x94, 0x64, 0x13, 0x2f, 0xcb, 0x88, 0x2c, 0xdb, 0x21, 0x34, 0x9b, 0x35, 0x84, 0xc9, 0xd0, 0x0e, 0x5b, 0xd8, 0x34, 0xdb, 0x25, 0x29, 0x49, 0xd8, 0x94, 0xed, 0x52, 0xd6, 0xd2, 0xdb, 0x73, 0xee, 0x7d, 0xfa, 0xb5, 0x0d, 0x49, 0x9a, 0x76, 0x3a, 0x1e, 0xbf, 0x77, 0xcf, 0xbd, 0x57, 0xf7, 0x9e, 0x73, 0xde, 0xbd, 0xf7, 0x7d, 0xe7, 0xbc, 0xfb, 0x03, 0x1b, 0xef, 0x5c, 0x0d, 0xeb, 0xd9, 0x69, 0x7d, 0x45, 0xde, 0xf7, 0xa1, 0x19, 0x5b, 0x93, 0x82, 0x9c, 0x5e, 0x47, 0x4e, 0x2a, 0x32, 0x25, 0x09, 0xac, 0xa4, 0x15, 0xb4, 0x73, 0x29, 0x3b, 0x25, 0xef, 0x42, 0xff, 0x0a, 0x8e, 0x90, 0x6b, 0xac, 0x99, 0x73, 0x55, 0xdd, 0x68, 0xb9, 0x14, 0x3e, 0xa1, 0x37, 0xa9, 0x66, 0xb4, 0x3a, 0x14, 0xda, 0x11, 0x3a, 0x5c, 0xc2, 0x6b, 0xc0, 0xd2, 0xd9, 0xe9, 0x80, 0xfe, 0x7d, 0xb0, 0x85, 0x9d, 0xa5, 0xd7, 0x95, 0x91, 0x60, 0xe5, 0xb4, 0x12, 0x7e, 0x8c, 0x6f, 0xbb, 0x82, 0xf3, 0x57, 0x7d, 0xc6, 0xe0, 0x69, 0xea, 0x53, 0x69, 0xec, 0x34, 0x68, 0x81, 0xe4, 0xd0, 0x76, 0x8e, 0x9d, 0x06, 0x97, 0xe1, 0x7f, 0x10, 0xff, 0x7f, 0x93, 0x83, 0x9d, 0xa6, 0x39, 0x96, 0x0a, 0x62, 0xff, 0x40, 0xf8, 0x69, 0x67, 0x33, 0xfe, 0x97, 0xe3, 0xff, 0x76, 0x48, 0xc6, 0x4f, 0x72, 0xfc, 0xf4, 0x24, 0xff, 0x3e, 0x94, 0xdc, 0x15, 0xe7, 0xc8, 0x63, 0x48, 0x5f, 0xe0, 0x45, 0xda, 0x89, 0xb2, 0xbc, 0xce, 0xf3, 0x7c, 0xbb, 0x61, 0x46, 0x2f, 0x52, 0x01, 0x92, 0x62, 0xb2, 0x69, 0x49, 0x9f, 0xc2, 0xad, 0x94, 0x13, 0x8c, 0x6c, 0xed, 0x0d, 0x6f, 0xcd, 0xc2, 0xa8, 0xd5, 0x14, 0x29, 0xad, 0x91, 0xbb, 0x37, 0x6c, 0x79, 0x50, 0x7a, 0xa8, 0x23, 0xfa, 0x48, 0x47, 0x34, 0x8d, 0x8f, 0x76, 0xfc, 0x32, 0x8b, 0x95, 0xe2, 0x6f, 0x66, 0xb1, 0xd4, 0xe3, 0x97, 0x21, 0xf9, 0xc4, 0x02, 0xbc, 0x77, 0x67, 0xd3, 0x9f, 0x68, 0x9d, 0xe5, 0x7b, 0x0d, 0xe1, 0xa8, 0x31, 0x1c, 0xa1, 0x63, 0xd4, 0x17, 0xe2, 0x86, 0x02, 0x1c, 0xc5, 0x7c, 0x51, 0x83, 0xef, 0xe4, 0xe2, 0xa8, 0xa1, 0x6d, 0x1c, 0x3f, 0xe1, 0xff, 0x18, 0xfe, 0x8f, 0xcf, 0x8e, 0xa3, 0xe2, 0xf3, 0x10, 0x47, 0x15, 0x69, 0x38, 0xea, 0x40, 0x2e, 0x8e, 0x8a, 0x9b, 0xa6, 0xe3, 0xa8, 0xf8, 0x6d, 0x33, 0xe2, 0xa8, 0x8a, 0x42, 0x1c, 0x15, 0xbf, 0x6b, 0x36, 0x1c, 0x15, 0x5f, 0x3a, 0x0b, 0x8e, 0x8a, 0xe4, 0xe2, 0x28, 0x4d, 0xc6, 0xd9, 0x70, 0x54, 0xfe, 0xb7, 0x1b, 0x3a, 0x7d, 0x3a, 0x52, 0x80, 0xa3, 0x22, 0x37, 0xc3, 0x51, 0x83, 0xfb, 0x3f, 0x2f, 0x8e, 0x1a, 0x7c, 0xfe, 0x73, 0xe0, 0xa8, 0xed, 0xf9, 0x38, 0x2a, 0x7e, 0xe4, 0xd3, 0xe1, 0xa8, 0xc1, 0xc7, 0xa7, 0xa3, 0x81, 0xc1, 0x47, 0xf3, 0xd1, 0x40, 0x7c, 0xe7, 0xac, 0x38, 0x2a, 0xf6, 0xc5, 0xe0, 0xa8, 0xb8, 0x5c, 0x80, 0xa3, 0x62, 0x39, 0x38, 0x6a, 0xfb, 0xcd, 0x70, 0x54, 0x7c, 0xf4, 0x46, 0x38, 0x6a, 0x30, 0x3a, 0x3b, 0x8e, 0x1a, 0xdc, 0x56, 0x88, 0xa3, 0xe2, 0x7b, 0x67, 0xc6, 0x51, 0xa8, 0xcf, 0x02, 0x1c, 0xf5, 0xbb, 0x68, 0xee, 0xf3, 0xe3, 0xa8, 0x78, 0x90, 0x7a, 0x69, 0x1e, 0x8e, 0xea, 0x9b, 0x11, 0x47, 0x45, 0x10, 0x47, 0xf5, 0xfd, 0xbe, 0x71, 0x54, 0xe1, 0xba, 0xa2, 0x02, 0x24, 0x14, 0x63, 0x3d, 0xf5, 0x7e, 0x44, 0x42, 0xdd, 0x9f, 0x11, 0x43, 0xdd, 0xec, 0x97, 0x79, 0x18, 0x0a, 0xa0, 0xe9, 0xbf, 0x96, 0xd5, 0xd8, 0x56, 0x35, 0xbe, 0x0f, 0xe2, 0xd2, 0xaf, 0xc1, 0x85, 0x2b, 0x15, 0x7e, 0x7c, 0x37, 0x87, 0xc5, 0x1a, 0x0a, 0x1b, 0x43, 0x06, 0x76, 0x2f, 0x59, 0x0c, 0x17, 0xfd, 0xa3, 0xa8, 0xf5, 0x72, 0x18, 0xa9, 0x82, 0x5b, 0x96, 0x78, 0xa0, 0xbc, 0x69, 0x60, 0x49, 0x1d, 0x94, 0x98, 0x74, 0x4d, 0xb1, 0x25, 0xb4, 0xa2, 0xa3, 0x4e, 0xd1, 0xfb, 0x3d, 0xe1, 0x0a, 0x6c, 0x75, 0xe2, 0x12, 0x7a, 0x37, 0x97, 0x21, 0xb6, 0xc8, 0xa0, 0x28, 0xc2, 0x66, 0x17, 0x85, 0x28, 0x02, 0x0a, 0x30, 0x47, 0x3c, 0xbf, 0xd8, 0x97, 0xc0, 0x97, 0x35, 0xad, 0x9b, 0xf0, 0xc9, 0x7c, 0x57, 0x7b, 0x3a, 0xc3, 0x5d, 0x5a, 0x81, 0x0a, 0x02, 0x4c, 0x7b, 0x4c, 0xd1, 0x83, 0x0c, 0x3a, 0xa2, 0x85, 0x2c, 0xad, 0x3f, 0xd2, 0x05, 0xa6, 0xb0, 0xe7, 0x11, 0xe8, 0x83, 0x65, 0x3a, 0xfe, 0xec, 0x5f, 0x8b, 0xcd, 0xa1, 0xf5, 0xae, 0x45, 0x2d, 0x1e, 0xe4, 0x40, 0x9c, 0xa3, 0xff, 0x66, 0x82, 0xf1, 0x52, 0xe6, 0xeb, 0xca, 0xaf, 0xbd, 0xe5, 0xb1, 0x48, 0xd1, 0xa1, 0xc7, 0x94, 0x53, 0x4b, 0x64, 0x30, 0xd1, 0xf3, 0x31, 0x56, 0xaa, 0x97, 0xd3, 0x28, 0xed, 0x6b, 0x0c, 0xa5, 0xd1, 0xfc, 0xda, 0x5c, 0x94, 0x66, 0x27, 0x94, 0x76, 0x66, 0x16, 0x94, 0xd6, 0x09, 0xbd, 0x1c, 0x4d, 0x34, 0x75, 0xd2, 0xcc, 0xe3, 0xd4, 0xb2, 0xe6, 0x21, 0xb6, 0x5e, 0xd0, 0x64, 0xf5, 0xe6, 0x21, 0xb5, 0x11, 0xc4, 0x91, 0x39, 0xe8, 0x2a, 0xeb, 0x2b, 0x14, 0xba, 0xec, 0x1e, 0xed, 0xbc, 0x18, 0x87, 0x24, 0x33, 0x1f, 0xa1, 0x83, 0x9d, 0xe3, 0x4e, 0x3e, 0xc2, 0x6e, 0xe6, 0x23, 0xb4, 0x60, 0x3e, 0x91, 0x76, 0xe0, 0x55, 0xca, 0x42, 0x06, 0x3b, 0x5b, 0x97, 0x71, 0x77, 0xa7, 0x76, 0x5a, 0x8c, 0x37, 0xe3, 0x1f, 0x3c, 0xc5, 0x7a, 0x7f, 0x7b, 0x16, 0x35, 0xd9, 0x40, 0x31, 0x55, 0x33, 0xb4, 0x94, 0xe9, 0x11, 0xa3, 0xc4, 0xf3, 0x1d, 0x32, 0x28, 0xb2, 0x13, 0xcc, 0xa4, 0xd3, 0xf9, 0xbc, 0xed, 0x5f, 0x37, 0x7a, 0xe6, 0x23, 0xcf, 0xd5, 0x0c, 0x11, 0xe5, 0xe4, 0x66, 0x39, 0xac, 0x3c, 0xcf, 0x47, 0xf4, 0xdc, 0xde, 0x15, 0xd8, 0x79, 0x20, 0xe6, 0xa8, 0xc7, 0x21, 0xfc, 0xc7, 0x01, 0x49, 0xdf, 0x00, 0x09, 0x1d, 0x21, 0xde, 0x77, 0x19, 0xd6, 0xbe, 0x28, 0xf4, 0x22, 0x90, 0x03, 0xf3, 0x7f, 0xbe, 0x10, 0x13, 0x28, 0xf6, 0xa2, 0x70, 0xcf, 0x94, 0x0a, 0x50, 0xaa, 0x2e, 0xf6, 0x3b, 0xb5, 0x56, 0x54, 0xaa, 0xf2, 0x56, 0x54, 0xaa, 0x96, 0xfc, 0x19, 0xb6, 0x1b, 0xe2, 0xe7, 0xab, 0xfd, 0xf3, 0x81, 0xa3, 0x47, 0x42, 0x6e, 0x4f, 0xec, 0x42, 0xe4, 0x76, 0x2f, 0xac, 0xa7, 0x70, 0xfc, 0x21, 0x58, 0x8b, 0xd8, 0xae, 0x24, 0x8d, 0xf0, 0x22, 0xc5, 0x0c, 0xc9, 0xa5, 0xf9, 0x6b, 0x9b, 0x8e, 0xcb, 0x98, 0x7c, 0x81, 0xf4, 0x33, 0x89, 0x58, 0x27, 0xf7, 0xf3, 0x15, 0x1c, 0x53, 0x7b, 0x11, 0x2d, 0x7a, 0x67, 0xf0, 0x88, 0x8e, 0x73, 0xbc, 0xb7, 0xcc, 0xca, 0x3c, 0xa2, 0x88, 0xf5, 0x1c, 0x6e, 0x90, 0x66, 0x2e, 0x57, 0xde, 0x07, 0xbd, 0xc4, 0xa5, 0xed, 0x2b, 0xa0, 0x84, 0xa5, 0x02, 0x5e, 0x5a, 0x18, 0xd2, 0xa4, 0xd5, 0x7e, 0x5d, 0x4c, 0x5b, 0x57, 0xa7, 0x71, 0xb0, 0xb0, 0x79, 0xc8, 0xed, 0xc3, 0xf7, 0x9a, 0x37, 0xd7, 0x7b, 0xea, 0xab, 0xbc, 0xa9, 0xf7, 0xb4, 0x9b, 0x79, 0x4f, 0x57, 0xe4, 0x78, 0x4f, 0x2b, 0x37, 0x96, 0x63, 0x48, 0x87, 0xa1, 0x15, 0x78, 0x2f, 0x3a, 0x12, 0x53, 0x16, 0x86, 0xca, 0x99, 0xef, 0x74, 0x24, 0xe3, 0x43, 0xd5, 0x7f, 0x5a, 0x1f, 0x6a, 0xd6, 0x57, 0x37, 0x84, 0x98, 0xec, 0x17, 0x97, 0x10, 0x6f, 0xce, 0xc5, 0xf0, 0x3e, 0xfc, 0x3f, 0x06, 0xc9, 0xa7, 0x77, 0xe5, 0xe0, 0xcd, 0x47, 0x36, 0xb7, 0x77, 0x6c, 0x9d, 0x86, 0x37, 0xb3, 0xb1, 0x7f, 0x20, 0xbc, 0xf9, 0x9d, 0x8b, 0xf8, 0xff, 0x3c, 0x24, 0xc7, 0xcc, 0x90, 0x1c, 0x9d, 0xe2, 0x78, 0xf3, 0x87, 0x27, 0x81, 0x9a, 0x6a, 0xf2, 0xc5, 0x11, 0xbc, 0xff, 0x29, 0x24, 0x0f, 0x1c, 0xc0, 0xbb, 0x0e, 0xe3, 0xab, 0xf1, 0x8e, 0xd8, 0xf4, 0x10, 0xe1, 0xe6, 0x3f, 0xc1, 0x3b, 0x7d, 0xb9, 0x2c, 0x81, 0xe4, 0x4b, 0x34, 0x0b, 0x67, 0x1e, 0xde, 0x69, 0xbe, 0x8f, 0x11, 0x92, 0xcf, 0x45, 0xf0, 0x6e, 0x80, 0xe4, 0xf7, 0xec, 0xf4, 0xd4, 0x90, 0xa6, 0x2f, 0x90, 0xc5, 0x78, 0xa7, 0x72, 0xe7, 0x40, 0x72, 0x9c, 0x3c, 0x6b, 0x5f, 0xc2, 0xfc, 0x08, 0x11, 0x00, 0x91, 0xe0, 0x4b, 0x5d, 0x78, 0xbf, 0x2d, 0xcb, 0xd3, 0xdf, 0x2e, 0xe4, 0xf7, 0x03, 0x7c, 0xae, 0x51, 0xf2, 0x60, 0x15, 0x47, 0x8e, 0x07, 0x27, 0x18, 0x1f, 0x99, 0x7c, 0xc7, 0x8e, 0x69, 0xf7, 0x73, 0xf9, 0x5f, 0x5d, 0x5f, 0xb5, 0xf2, 0xdf, 0xbd, 0x4a, 0xfa, 0x46, 0xfd, 0xbf, 0xb6, 0x85, 0xf3, 0x79, 0xf4, 0x51, 0x5e, 0xce, 0xc4, 0x3e, 0xbc, 0xa3, 0x3d, 0xf0, 0x8f, 0x5b, 0x78, 0xfd, 0xff, 0x30, 0xc9, 0x7f, 0xf7, 0x4f, 0x57, 0x38, 0xff, 0xc7, 0x8e, 0xe2, 0xfd, 0xcf, 0xf1, 0xde, 0xc5, 0xf9, 0x9e, 0x58, 0xc3, 0xf8, 0xce, 0x94, 0xff, 0xa3, 0x33, 0xfc, 0xfe, 0x72, 0x90, 0xd7, 0xf3, 0x72, 0x82, 0xeb, 0xe7, 0x95, 0x89, 0x7c, 0x5c, 0x2e, 0xa0, 0x9d, 0x31, 0x5c, 0xcb, 0xf3, 0x8e, 0xbd, 0x13, 0x23, 0x5d, 0x60, 0x64, 0x4c, 0x93, 0x01, 0xef, 0x86, 0x2b, 0xe9, 0xac, 0x27, 0xd1, 0x00, 0x1c, 0xa6, 0x68, 0xc1, 0xa3, 0x8b, 0x15, 0x67, 0x8b, 0xc0, 0x4c, 0x22, 0xd0, 0x53, 0x29, 0x2a, 0x2a, 0x02, 0x3d, 0xfe, 0x17, 0xeb, 0x8b, 0xa0, 0x48, 0x27, 0x40, 0x51, 0x91, 0x0e, 0x28, 0x4e, 0x55, 0xbf, 0xa5, 0x7e, 0x5d, 0xbd, 0x5d, 0x9d, 0xaf, 0xce, 0x51, 0x8b, 0x54, 0x41, 0x05, 0x15, 0xbe, 0x05, 0x5f, 0x87, 0xdb, 0xf1, 0xf9, 0xcd, 0x41, 0x5e, 0xb0, 0xb6, 0x04, 0x5c, 0x84, 0x2b, 0x70, 0x0d, 0xa6, 0x20, 0x85, 0x89, 0x6a, 0x4c, 0x4d, 0xa8, 0x17, 0xd5, 0x2b, 0xea, 0x35, 0x75, 0x4a, 0x4d, 0xa9, 0xea, 0x29, 0x80, 0x53, 0xbc, 0xaa, 0xb5, 0x74, 0x39, 0xa5, 0x72, 0x1a, 0x25, 0x52, 0x89, 0x56, 0x0b, 0xac, 0x89, 0x70, 0x74, 0x43, 0xa4, 0x73, 0xf3, 0xa6, 0x87, 0x32, 0x01, 0x2d, 0x5a, 0xe9, 0xab, 0xce, 0xb6, 0xdf, 0x3c, 0x93, 0x22, 0xff, 0x67, 0x1b, 0x37, 0xf7, 0xf6, 0x6c, 0x88, 0xcc, 0x18, 0x59, 0x1d, 0x41, 0x23, 0x62, 0x43, 0x74, 0x63, 0xcf, 0x74, 0x2b, 0xe4, 0xb3, 0xfd, 0x9c, 0xa5, 0x6a, 0x91, 0x59, 0xa6, 0x66, 0xfc, 0x69, 0x78, 0x53, 0x96, 0xff, 0x87, 0xfe, 0x6a, 0xcb, 0xa6, 0x1b, 0x0b, 0x99, 0x8e, 0x8e, 0x6c, 0xee, 0x53, 0x7a, 0x0a, 0x15, 0xb2, 0x69, 0x6b, 0xf7, 0xd6, 0x28, 0xd5, 0x10, 0xd8, 0xfa, 0x97, 0x2d, 0x1d, 0x0f, 0xd1, 0x4d, 0xa2, 0x7b, 0xd3, 0xe6, 0x70, 0x67, 0xfa, 0xce, 0x22, 0xee, 0x7b, 0x38, 0xd2, 0x11, 0x4d, 0xc7, 0x32, 0x62, 0x51, 0x26, 0x4d, 0x5a, 0xb5, 0xa5, 0xb7, 0x23, 0xda, 0xbd, 0x01, 0x2d, 0x2b, 0x29, 0x80, 0xd7, 0x76, 0x68, 0xae, 0x0b, 0x40, 0xb0, 0xf5, 0x3e, 0x2f, 0x2c, 0x47, 0x6b, 0xa7, 0x6e, 0x35, 0x48, 0xf5, 0x4d, 0x32, 0x48, 0xbe, 0x87, 0x37, 0x74, 0x37, 0x37, 0xa4, 0xef, 0xb5, 0x50, 0x47, 0x62, 0xae, 0x61, 0xba, 0x9f, 0xe1, 0x59, 0xcd, 0x2c, 0x7a, 0x5a, 0xb6, 0x4d, 0x9b, 0x37, 0x6c, 0xcc, 0x1a, 0x74, 0x8d, 0x0d, 0x6d, 0x05, 0xe6, 0x9c, 0xdc, 0xbd, 0xb9, 0xb7, 0x97, 0xee, 0x1d, 0x1b, 0x7a, 0x98, 0x8e, 0x80, 0xb7, 0xf6, 0xef, 0xf4, 0x42, 0x72, 0x4f, 0x85, 0xd6, 0x4e, 0x91, 0xde, 0xe3, 0x83, 0xe4, 0x33, 0x90, 0xa5, 0xbf, 0x8b, 0xa3, 0xe0, 0xe1, 0xb7, 0xb2, 0xf4, 0xe1, 0x33, 0x90, 0x7c, 0xd6, 0x53, 0xe8, 0x33, 0xcf, 0xc5, 0x6a, 0xea, 0x64, 0xe1, 0xaa, 0x70, 0xf5, 0xd4, 0xb4, 0x98, 0x13, 0xd3, 0x62, 0x8e, 0xa5, 0xe7, 0x8e, 0x20, 0x56, 0x33, 0xe2, 0xdb, 0x07, 0x6d, 0x46, 0xc1, 0x6c, 0x73, 0x0a, 0x36, 0xb2, 0xa7, 0x46, 0x5a, 0x73, 0x6c, 0xc6, 0x13, 0x88, 0x91, 0x1d, 0x84, 0x7f, 0x87, 0x7f, 0xec, 0x36, 0xa6, 0xe7, 0x2f, 0xf4, 0x39, 0xce, 0xd1, 0x0a, 0xf2, 0x18, 0x8b, 0x6f, 0x70, 0xeb, 0x69, 0xfe, 0x82, 0xa0, 0x2f, 0xb4, 0x19, 0x05, 0x13, 0x21, 0xbf, 0x91, 0xfb, 0x05, 0x73, 0x44, 0xef, 0xf6, 0x08, 0x16, 0xb7, 0x4f, 0x60, 0x5f, 0xc3, 0x46, 0xd6, 0x0b, 0x12, 0xda, 0x8a, 0xf3, 0x31, 0xce, 0x86, 0x6f, 0xa3, 0x04, 0x8f, 0x83, 0x13, 0x9a, 0xad, 0x78, 0x12, 0xdf, 0x4e, 0x6f, 0x32, 0x5b, 0x71, 0x92, 0xf9, 0xdc, 0xcf, 0x6a, 0xb6, 0xe2, 0x39, 0x96, 0xef, 0x61, 0x38, 0x8f, 0xd8, 0xf1, 0x22, 0xfe, 0xbf, 0xa7, 0xcd, 0x5f, 0x68, 0xe0, 0xb6, 0xe2, 0xc8, 0xb7, 0xd1, 0x56, 0x1c, 0xcf, 0x41, 0xce, 0xe5, 0x9a, 0xad, 0x68, 0x45, 0xe4, 0x83, 0xef, 0xbf, 0xd4, 0x29, 0x5a, 0x63, 0x45, 0x1c, 0x8f, 0xb4, 0x22, 0xf5, 0x56, 0xf3, 0xd0, 0x0c, 0xf6, 0x62, 0x25, 0x96, 0x79, 0x15, 0x75, 0x55, 0xe2, 0xd6, 0xd1, 0xec, 0x28, 0x5b, 0x95, 0x60, 0x93, 0xaa, 0xc0, 0x1a, 0xae, 0xd0, 0xca, 0x38, 0xca, 0xbc, 0x71, 0x84, 0xb3, 0xf6, 0x12, 0x62, 0xe5, 0xb3, 0xac, 0x50, 0x87, 0x26, 0x3a, 0x8b, 0x6f, 0x66, 0x1d, 0x22, 0xae, 0x3a, 0x94, 0xd6, 0xe1, 0xd3, 0x4a, 0x76, 0x0e, 0x48, 0x9f, 0x8b, 0xe9, 0x30, 0xc4, 0xe2, 0x0d, 0xa4, 0xc3, 0x55, 0x1f, 0x0b, 0xa6, 0xf4, 0x97, 0x8e, 0xe1, 0x8f, 0xb4, 0x59, 0x21, 0xdf, 0x27, 0x29, 0x31, 0xb6, 0x26, 0x6f, 0x66, 0xc8, 0x93, 0x5c, 0xb3, 0x30, 0x4c, 0x9a, 0x85, 0x51, 0x7c, 0xaf, 0x33, 0x4b, 0x7e, 0xe4, 0x19, 0x18, 0x47, 0xcd, 0xce, 0xc3, 0xb8, 0xbd, 0x68, 0xb3, 0x7f, 0x9f, 0xc5, 0xed, 0x87, 0x7d, 0xda, 0x6c, 0x91, 0x03, 0xa8, 0xed, 0xf7, 0xb4, 0xb8, 0x4b, 0x9a, 0xb6, 0x2f, 0xa3, 0xb6, 0xaf, 0x30, 0x6d, 0x5f, 0x8d, 0x34, 0xe1, 0xf5, 0x1a, 0x6a, 0x76, 0x4a, 0x7e, 0x51, 0x60, 0x2b, 0x83, 0x0b, 0xb4, 0x7b, 0x6e, 0x06, 0xed, 0xda, 0xb9, 0x66, 0x92, 0xdd, 0xb9, 0xda, 0x4d, 0x46, 0x66, 0xd2, 0x6e, 0x3f, 0x69, 0xf7, 0xca, 0x34, 0xed, 0xda, 0xd3, 0xda, 0x4d, 0xae, 0x67, 0xda, 0xb5, 0x63, 0x48, 0xce, 0x6a, 0x77, 0x26, 0x7b, 0x7c, 0x78, 0xc1, 0xe7, 0xb5, 0xc7, 0x87, 0xcb, 0x3f, 0xbb, 0x3d, 0x2e, 0x48, 0xf9, 0xf6, 0xf8, 0xe8, 0xd8, 0xa7, 0xb3, 0xc7, 0x87, 0xae, 0x4f, 0xb7, 0x2a, 0x87, 0x3e, 0xc8, 0xb7, 0x2a, 0x47, 0x3b, 0x67, 0xb3, 0xc7, 0x05, 0xdb, 0x17, 0x63, 0x8f, 0x8f, 0x9c, 0xcc, 0xb7, 0xc7, 0x05, 0x5b, 0xd6, 0x1e, 0x17, 0xa4, 0x9b, 0xd9, 0xe3, 0xa3, 0x7d, 0x37, 0xb2, 0xc7, 0x87, 0xde, 0x9d, 0xdd, 0x1e, 0x1f, 0xfa, 0xa4, 0xd0, 0x1e, 0x1f, 0xdd, 0x39, 0xb3, 0x3d, 0x8e, 0xfa, 0x2c, 0xb0, 0xc7, 0x7f, 0x17, 0xcd, 0x7d, 0xa6, 0xf9, 0x21, 0xb4, 0xa6, 0xb8, 0xd6, 0xbe, 0x15, 0x6a, 0x9a, 0x68, 0x06, 0xc5, 0x6b, 0x90, 0x3c, 0xbd, 0xc6, 0xf5, 0xa0, 0xe0, 0x60, 0x27, 0xf0, 0x24, 0x5f, 0x7a, 0x8f, 0x5b, 0xd2, 0xe4, 0x83, 0xa2, 0xfd, 0x32, 0x58, 0x4f, 0x7d, 0x8e, 0xf7, 0xc2, 0xbf, 0x18, 0xa3, 0x39, 0x17, 0xbb, 0xdf, 0x40, 0x9d, 0xfe, 0xb5, 0x0d, 0xb2, 0xcf, 0x3f, 0xb5, 0x91, 0x56, 0xf3, 0xfb, 0xb7, 0x7d, 0x53, 0x6b, 0xf9, 0xf4, 0x3c, 0xf8, 0xd7, 0x70, 0xb2, 0xb1, 0xad, 0x59, 0x1b, 0x3b, 0x38, 0x6d, 0x37, 0x8f, 0x9f, 0x4f, 0x1b, 0xa5, 0xcf, 0xcf, 0x36, 0xb6, 0xf3, 0xf3, 0x43, 0x09, 0xb3, 0x93, 0x97, 0x18, 0xd3, 0x2c, 0xf4, 0x3d, 0x5f, 0x6b, 0xf1, 0xe9, 0x19, 0xa2, 0x0e, 0x41, 0xa7, 0xf5, 0xc8, 0xb3, 0xf5, 0xd7, 0xd5, 0x89, 0xe0, 0x88, 0x46, 0xbd, 0x9f, 0x0e, 0xed, 0x9e, 0x93, 0x09, 0xd9, 0x82, 0x23, 0x6c, 0x9d, 0xf6, 0x36, 0x46, 0x2d, 0xc9, 0xc4, 0x7b, 0x33, 0xa1, 0xb5, 0x99, 0xd0, 0x56, 0x96, 0x57, 0xe2, 0xbd, 0x13, 0xed, 0x8b, 0x17, 0xd9, 0xfe, 0x21, 0x13, 0xea, 0x4e, 0x9a, 0x2d, 0xca, 0x7c, 0xd7, 0xb4, 0x3a, 0x9b, 0x71, 0x26, 0xe9, 0x68, 0xb5, 0xae, 0x18, 0xa3, 0x7d, 0xb5, 0x7c, 0x5e, 0xb9, 0x1c, 0x69, 0x8f, 0x09, 0x8c, 0x31, 0xd0, 0x99, 0x40, 0x11, 0x59, 0x69, 0x67, 0x43, 0x65, 0x48, 0x0b, 0x48, 0x9b, 0x18, 0x7d, 0x8e, 0xeb, 0xf7, 0x01, 0x53, 0xf3, 0x10, 0xa3, 0xff, 0x3d, 0x4d, 0xf3, 0xb2, 0x62, 0x52, 0xf3, 0x90, 0x52, 0x8e, 0x76, 0x61, 0x72, 0xf7, 0x53, 0x7e, 0x6f, 0xb8, 0x96, 0x85, 0xe2, 0xa1, 0x2a, 0x23, 0xa5, 0x81, 0x96, 0xf2, 0x3d, 0x4c, 0xb1, 0xb0, 0xd0, 0x33, 0x21, 0x13, 0xbb, 0xff, 0x08, 0x63, 0x0c, 0x2c, 0xf4, 0x03, 0x37, 0x64, 0x6b, 0x10, 0x75, 0x30, 0x2f, 0xcc, 0xeb, 0xbd, 0x90, 0x8d, 0xf5, 0xeb, 0xba, 0x79, 0xdc, 0x7b, 0xd9, 0x38, 0x5e, 0xbb, 0xde, 0x63, 0x64, 0x90, 0x54, 0xe3, 0xfd, 0x7d, 0xc6, 0x3b, 0xc6, 0x6a, 0xbc, 0xff, 0x77, 0x36, 0xbf, 0xef, 0x75, 0xc5, 0xca, 0xea, 0xfb, 0xd7, 0x4c, 0xcd, 0xaf, 0xe3, 0xe8, 0xca, 0xce, 0x71, 0x0d, 0x5c, 0xd0, 0x1b, 0x83, 0xbf, 0xa5, 0x7c, 0x2c, 0xf4, 0x30, 0x7b, 0x5e, 0x26, 0xda, 0x13, 0xd0, 0x8a, 0x16, 0xd3, 0x3d, 0xfd, 0xd8, 0x97, 0xf5, 0x36, 0x41, 0x27, 0x9b, 0x00, 0x7f, 0x57, 0x59, 0x75, 0xd1, 0xb8, 0x8d, 0xf4, 0xc5, 0x4a, 0xa9, 0xac, 0x4a, 0xf8, 0x8e, 0x2b, 0xfa, 0x5e, 0x21, 0xb6, 0x4d, 0x14, 0x90, 0xf7, 0xf2, 0x5e, 0x31, 0xb6, 0x0d, 0xf3, 0x6e, 0x23, 0xcd, 0x84, 0xf5, 0x62, 0x02, 0xfb, 0xa8, 0xd0, 0x5d, 0x0e, 0xa8, 0xe5, 0xfc, 0xd8, 0x34, 0x65, 0x64, 0x57, 0xc5, 0x28, 0x02, 0x98, 0x14, 0xc3, 0xe2, 0x15, 0x60, 0x8a, 0xb1, 0x95, 0xd6, 0x62, 0x4c, 0xd1, 0x83, 0x47, 0x00, 0xe2, 0xc0, 0x1a, 0x23, 0xcb, 0xed, 0xab, 0xfd, 0x38, 0xa2, 0x1a, 0x22, 0xa2, 0xed, 0x76, 0xee, 0x9b, 0x58, 0x69, 0x67, 0x2b, 0x41, 0xb0, 0xaf, 0xd0, 0x5c, 0x0e, 0x57, 0x95, 0x40, 0xbb, 0x4d, 0xaf, 0xc3, 0xb1, 0x7b, 0xae, 0x9b, 0x4e, 0x74, 0xa1, 0x53, 0x76, 0xb5, 0x95, 0xcb, 0x21, 0x80, 0x77, 0xe9, 0xf4, 0x59, 0xe7, 0x57, 0x40, 0xdf, 0xa7, 0x3e, 0x02, 0xbd, 0xea, 0xa3, 0x10, 0x5a, 0x26, 0x79, 0x24, 0x93, 0x31, 0x86, 0xea, 0x12, 0xc2, 0x0b, 0x37, 0x96, 0xb0, 0x10, 0x28, 0xd6, 0xd0, 0x42, 0x16, 0xd2, 0x85, 0xcb, 0xd8, 0xbd, 0x88, 0xe6, 0x20, 0xd9, 0x20, 0x54, 0x62, 0x87, 0x90, 0xc1, 0x01, 0x21, 0x5d, 0x15, 0x7d, 0x33, 0x6a, 0xd0, 0xbe, 0x19, 0x1d, 0x45, 0x1b, 0x37, 0x18, 0x92, 0xfa, 0x61, 0x85, 0x03, 0xca, 0x27, 0xe2, 0x1b, 0xcd, 0x47, 0xe2, 0x1d, 0x26, 0x46, 0x99, 0x5f, 0x89, 0x6f, 0x34, 0xbc, 0x1a, 0xef, 0xd0, 0xb5, 0x78, 0xa4, 0x3a, 0xab, 0x49, 0x39, 0x5f, 0xe3, 0x69, 0xd9, 0x29, 0x89, 0x93, 0x3b, 0x27, 0x69, 0xbf, 0x8a, 0xcc, 0x77, 0xa2, 0x64, 0x2b, 0x8e, 0x51, 0xb4, 0xc7, 0x4f, 0x50, 0xae, 0x0b, 0xb9, 0x32, 0xe5, 0x48, 0x58, 0x4e, 0x65, 0xa6, 0x9c, 0x72, 0x2c, 0xa7, 0xac, 0xb6, 0xee, 0xed, 0x37, 0xde, 0x7e, 0xe3, 0xce, 0x7d, 0x50, 0x26, 0x42, 0x4b, 0x9d, 0xd4, 0xec, 0x1f, 0x56, 0x26, 0x69, 0xf7, 0xb2, 0xd3, 0x27, 0xa3, 0xea, 0x1d, 0x03, 0x22, 0xbe, 0xcd, 0xda, 0xfb, 0xc9, 0x72, 0x67, 0x3d, 0x51, 0x64, 0x3d, 0x11, 0xb5, 0xc2, 0x34, 0x22, 0xf2, 0x33, 0x7a, 0x83, 0xa7, 0xdd, 0xac, 0x56, 0x30, 0xba, 0x37, 0xd3, 0x9c, 0x2a, 0xdb, 0x03, 0x21, 0xf8, 0xbf, 0x14, 0x9b, 0x23, 0x6c, 0xa2, 0xdf, 0xd8, 0xb4, 0x13, 0x7f, 0x23, 0xea, 0xa1, 0x81, 0x70, 0x25, 0x93, 0xcc, 0x78, 0x18, 0xeb, 0x53, 0xf4, 0x92, 0x27, 0x64, 0x20, 0x6d, 0x29, 0x57, 0xc8, 0x4f, 0x8d, 0x34, 0xa6, 0xf9, 0x87, 0xc3, 0x64, 0x8f, 0x97, 0xa1, 0x6d, 0x2e, 0xda, 0xf6, 0x41, 0x25, 0x5a, 0xd1, 0x46, 0xeb, 0x3e, 0xb0, 0xe0, 0x9b, 0x4e, 0x65, 0x6f, 0xc9, 0xe9, 0x7c, 0x98, 0xd9, 0x93, 0x31, 0xe5, 0x3d, 0x99, 0x2a, 0xae, 0x41, 0x6c, 0x6b, 0x65, 0x87, 0x5f, 0x00, 0xbd, 0x62, 0x2e, 0x2c, 0x2f, 0x22, 0x68, 0x75, 0x9f, 0xb7, 0xb1, 0xbd, 0x85, 0x52, 0x3e, 0xda, 0x93, 0x44, 0xdb, 0x5b, 0xa8, 0xc2, 0x89, 0x6f, 0xa5, 0xd4, 0x3a, 0x7f, 0x95, 0x50, 0xa6, 0x40, 0x69, 0xc0, 0xfb, 0x01, 0x04, 0x9d, 0xab, 0x52, 0x21, 0xf7, 0x5c, 0x3e, 0x5b, 0x9c, 0x79, 0x6b, 0xf6, 0x5a, 0x57, 0xa0, 0xb4, 0x39, 0x1a, 0x77, 0x7a, 0x52, 0xed, 0x94, 0x32, 0x67, 0x72, 0x86, 0x94, 0x56, 0x27, 0xa2, 0x91, 0xa7, 0x27, 0x52, 0x6d, 0x6d, 0x43, 0xf6, 0x9e, 0x54, 0xbb, 0x4c, 0xbb, 0xc7, 0xbf, 0xc3, 0xe2, 0x4e, 0xa4, 0x3a, 0x69, 0x0f, 0x47, 0x63, 0x63, 0x31, 0x28, 0x36, 0x1a, 0xcd, 0x05, 0x03, 0x3b, 0x8b, 0xb0, 0x4b, 0x10, 0x99, 0xd7, 0xea, 0x79, 0x3f, 0x86, 0xc2, 0xd5, 0x6c, 0xc7, 0x39, 0x29, 0xa2, 0x0b, 0x49, 0xc6, 0x46, 0x5d, 0x4c, 0x31, 0xb1, 0x58, 0x1b, 0xdf, 0x87, 0x0e, 0x65, 0x29, 0x61, 0xb4, 0xf4, 0x28, 0xc8, 0x9e, 0x7e, 0x31, 0xb4, 0x30, 0x9d, 0xbb, 0x5f, 0x17, 0x2a, 0x4f, 0xe7, 0xe9, 0xd7, 0x87, 0x0c, 0x2c, 0xbd, 0xd8, 0xe8, 0x15, 0x86, 0xb6, 0x1a, 0xa3, 0xfa, 0xc7, 0x07, 0x30, 0x34, 0x8c, 0x2d, 0xd1, 0x60, 0xf4, 0xc2, 0x49, 0x45, 0x84, 0x41, 0x1a, 0x9f, 0x42, 0x06, 0xbc, 0x63, 0x3f, 0xec, 0x03, 0x1a, 0x09, 0x40, 0x45, 0xee, 0x23, 0x52, 0x31, 0x78, 0x44, 0xc0, 0x50, 0xaf, 0xb5, 0x98, 0x7a, 0x51, 0x4c, 0x72, 0xd6, 0xa5, 0xba, 0x23, 0xdf, 0x6a, 0x80, 0xd8, 0x20, 0xc6, 0xf6, 0xd5, 0xe8, 0x8d, 0x3e, 0x10, 0x94, 0x0a, 0xe2, 0x42, 0x11, 0xfd, 0x07, 0x53, 0xdd, 0x88, 0x28, 0x7e, 0xee, 0xec, 0x49, 0xf5, 0xa5, 0x02, 0x21, 0x17, 0xa6, 0xe9, 0xc2, 0xe2, 0xb2, 0x06, 0x67, 0x3d, 0x52, 0xd6, 0xda, 0xaa, 0x9c, 0x3c, 0x13, 0x98, 0xa7, 0x37, 0x15, 0xf0, 0xd7, 0x85, 0x0d, 0xcb, 0x70, 0x3c, 0x08, 0xe9, 0xf1, 0x6a, 0x60, 0xb2, 0x18, 0x9c, 0xbe, 0x54, 0x73, 0xc8, 0xec, 0xf7, 0x28, 0x22, 0xe6, 0x89, 0x60, 0x58, 0xb4, 0xea, 0x5b, 0x07, 0xb0, 0xde, 0xe6, 0x88, 0xb5, 0xf0, 0xab, 0xa8, 0xd5, 0x73, 0x4f, 0x23, 0x94, 0xdf, 0xe3, 0x05, 0xf3, 0x3d, 0x01, 0xa8, 0x30, 0x2d, 0x4a, 0xdd, 0x77, 0x8b, 0x07, 0xa4, 0x3b, 0x7b, 0x52, 0x01, 0x28, 0x93, 0x7a, 0x52, 0xa1, 0xec, 0xbc, 0xae, 0x1a, 0x99, 0xda, 0x76, 0xdd, 0xff, 0xec, 0x84, 0x3b, 0xee, 0x55, 0x8d, 0x77, 0x60, 0x8e, 0x54, 0x7f, 0x8b, 0x6c, 0xad, 0x82, 0xe5, 0xcd, 0x03, 0xf6, 0xe3, 0x35, 0x8d, 0xf6, 0x93, 0x11, 0xe3, 0xe4, 0x7e, 0x58, 0x6e, 0x4f, 0xd4, 0x78, 0x31, 0xfc, 0x65, 0x1e, 0x66, 0x1a, 0xd3, 0x47, 0xf4, 0x84, 0xb7, 0xec, 0x09, 0xf9, 0x59, 0xf9, 0xd9, 0x96, 0xed, 0xd1, 0xa2, 0xc3, 0xdb, 0x15, 0x50, 0x0d, 0x58, 0x7e, 0x67, 0xeb, 0xc1, 0x54, 0xe7, 0x4a, 0x8b, 0x02, 0xa9, 0xe5, 0xd6, 0x9e, 0x54, 0x1b, 0x52, 0x6d, 0x4b, 0x6f, 0x45, 0x4a, 0xaa, 0xfb, 0x15, 0xe8, 0x99, 0x34, 0xa0, 0x7b, 0xdd, 0x79, 0xaf, 0x7a, 0x1e, 0x51, 0xe0, 0xca, 0x96, 0x98, 0x3d, 0x16, 0x15, 0xa5, 0xe3, 0x14, 0x6e, 0x8d, 0x49, 0x09, 0xec, 0xb7, 0x26, 0x4e, 0xad, 0xe1, 0x94, 0x85, 0x53, 0x6d, 0x48, 0xc9, 0x63, 0xc8, 0xd9, 0xca, 0xb5, 0x03, 0x18, 0x33, 0x45, 0x46, 0x37, 0xc5, 0xaf, 0xc3, 0x78, 0xa4, 0x90, 0xa4, 0xb4, 0xf5, 0x3c, 0x0d, 0x49, 0x4a, 0x6b, 0x66, 0xbf, 0x89, 0x96, 0x9e, 0xd9, 0x0f, 0x2b, 0xd3, 0xf1, 0x91, 0xb2, 0x49, 0xa2, 0x30, 0x5e, 0xfa, 0x00, 0x56, 0x46, 0x75, 0xd2, 0xf1, 0xc8, 0x5c, 0x1e, 0x83, 0x75, 0x21, 0x1f, 0x91, 0x79, 0x19, 0x4a, 0x40, 0xaa, 0x24, 0x2f, 0xcd, 0x98, 0xa1, 0x2a, 0x90, 0x9a, 0x9f, 0xa1, 0xb0, 0x14, 0x79, 0x4c, 0x1e, 0xa3, 0xb3, 0xe6, 0x1d, 0x4d, 0x5c, 0x2a, 0x07, 0xfb, 0x8d, 0x43, 0x93, 0x8b, 0x51, 0x26, 0x87, 0x26, 0x17, 0xa3, 0x2c, 0x0e, 0x4d, 0x2e, 0x47, 0x42, 0x1e, 0xe7, 0x72, 0x39, 0x8e, 0x3b, 0x72, 0xe4, 0x72, 0x24, 0x1c, 0x39, 0x72, 0xb1, 0xb4, 0x8c, 0x5c, 0xf4, 0x1b, 0x2e, 0x57, 0x3a, 0x9e, 0xcb, 0x45, 0xf1, 0x0e, 0x26, 0x97, 0x43, 0x93, 0x8b, 0xd5, 0x65, 0x70, 0x68, 0x72, 0x31, 0x4a, 0x70, 0x68, 0x72, 0x65, 0xd2, 0x8c, 0x19, 0xaa, 0xc2, 0xa1, 0xc9, 0xc5, 0x28, 0x2c, 0x45, 0x1e, 0xc7, 0xbf, 0x83, 0xea, 0x7b, 0x52, 0x20, 0xf2, 0x25, 0x7a, 0xfa, 0x4c, 0xde, 0x08, 0x4a, 0x7f, 0x0b, 0xa7, 0xa4, 0xe3, 0x48, 0x97, 0x9f, 0xa1, 0x30, 0xd3, 0xb0, 0x07, 0x22, 0x66, 0x2d, 0x85, 0x51, 0xf4, 0x0e, 0x7c, 0xfa, 0xcd, 0xfe, 0xf3, 0xe7, 0x9f, 0xc2, 0x9e, 0x4e, 0x7d, 0x3f, 0x80, 0xef, 0x89, 0x71, 0x6b, 0x43, 0x5b, 0x5c, 0xba, 0x35, 0x5c, 0x82, 0xb2, 0xc9, 0xad, 0xf4, 0xcc, 0x12, 0xab, 0x3f, 0x54, 0x8d, 0xd5, 0xa5, 0x86, 0x1d, 0xaa, 0x9a, 0xea, 0x97, 0x7d, 0x55, 0x22, 0xb6, 0x9c, 0x40, 0x48, 0x91, 0x1a, 0xdb, 0x76, 0x48, 0x16, 0x2b, 0xf0, 0x77, 0x95, 0xdf, 0xab, 0x18, 0xfc, 0x03, 0x61, 0x31, 0xe4, 0x3f, 0xfc, 0x82, 0x3a, 0xa5, 0xf8, 0xdc, 0xf3, 0xdc, 0x80, 0x23, 0x51, 0x53, 0x70, 0xe2, 0x7f, 0xb7, 0x45, 0x4c, 0xac, 0xd6, 0xfa, 0xb6, 0x41, 0xac, 0x99, 0xae, 0x3f, 0xe1, 0xe7, 0x29, 0x3e, 0xd0, 0xde, 0xf8, 0x6b, 0x51, 0x40, 0xad, 0xc9, 0xd8, 0x9e, 0xb2, 0xa9, 0xef, 0xd0, 0xb8, 0x88, 0x75, 0x34, 0xb5, 0xf8, 0xda, 0x76, 0x1d, 0xf1, 0x6d, 0xd9, 0x23, 0xd5, 0x63, 0x49, 0x81, 0x16, 0x6f, 0x44, 0xa5, 0x9a, 0xdb, 0x0e, 0xa6, 0x02, 0x87, 0xbe, 0x8b, 0xed, 0xb9, 0x4d, 0x1e, 0x96, 0xf7, 0xb1, 0x93, 0x8c, 0xe4, 0xb6, 0x18, 0x3b, 0x43, 0x3e, 0xa0, 0x4e, 0x86, 0xa0, 0x78, 0x32, 0xd3, 0x76, 0xcd, 0x79, 0x6d, 0xd7, 0x92, 0xd7, 0x76, 0x2b, 0x67, 0x69, 0xbb, 0x30, 0x3f, 0xaf, 0xed, 0xc2, 0x95, 0x74, 0xdb, 0x8d, 0xcc, 0x97, 0x12, 0x14, 0x6e, 0x1e, 0xa0, 0x16, 0x85, 0xf6, 0x5b, 0x29, 0x6f, 0x63, 0xd1, 0xdb, 0x31, 0x2d, 0xaf, 0xe5, 0xf2, 0x56, 0x97, 0xd3, 0x76, 0x8b, 0x6f, 0xd0, 0x76, 0x8b, 0x6f, 0xd6, 0x76, 0xab, 0xc4, 0xb6, 0x41, 0x2c, 0xb7, 0x9e, 0x4b, 0xc5, 0xe2, 0xff, 0x58, 0xe4, 0xd2, 0xdf, 0x40, 0x2e, 0xfd, 0xcd, 0xe4, 0x72, 0x88, 0x6d, 0xdb, 0xb1, 0x5c, 0xdf, 0x1f, 0x9b, 0x5c, 0xac, 0xd7, 0xcc, 0xe3, 0xe3, 0x52, 0x44, 0xc0, 0xfc, 0x25, 0x3c, 0x4c, 0x16, 0x3b, 0x52, 0xc6, 0x0c, 0x55, 0x81, 0xd4, 0xfc, 0xdc, 0x34, 0x79, 0xcc, 0x2e, 0xb6, 0x3d, 0x26, 0x8f, 0xb9, 0xbc, 0x5c, 0x26, 0x57, 0x22, 0x6a, 0x76, 0x69, 0x12, 0xb9, 0x98, 0x44, 0x2e, 0x4d, 0x22, 0x46, 0x55, 0xba, 0x34, 0x89, 0x5c, 0x09, 0xf9, 0x39, 0x2e, 0x91, 0xeb, 0xb8, 0x2b, 0x47, 0x22, 0x57, 0xc2, 0x95, 0x23, 0x91, 0x0b, 0x25, 0x72, 0x69, 0x12, 0xb9, 0x8e, 0xcb, 0xcf, 0xa5, 0x25, 0xc2, 0x5a, 0x6e, 0x77, 0x69, 0x12, 0x51, 0x49, 0x2e, 0x4d, 0x22, 0x97, 0x26, 0x11, 0xab, 0xcb, 0xe0, 0xd2, 0x9e, 0x14, 0xa3, 0x04, 0x97, 0xf6, 0xa4, 0x32, 0x69, 0xc6, 0x0c, 0x55, 0xe1, 0xd2, 0x9e, 0x14, 0xa3, 0x74, 0x54, 0x93, 0xfc, 0x9c, 0x14, 0xfc, 0x14, 0x23, 0x0c, 0xbe, 0xbd, 0x8b, 0xae, 0xe0, 0x3b, 0x44, 0x1f, 0xd6, 0xd7, 0xac, 0xc0, 0xd1, 0x25, 0x91, 0x19, 0x6d, 0xa6, 0xa5, 0x64, 0xc6, 0x96, 0x9f, 0x58, 0x4b, 0x0d, 0x03, 0x34, 0xae, 0xac, 0xa2, 0x31, 0xc6, 0x68, 0xad, 0xa3, 0x91, 0x48, 0x6e, 0xc0, 0x77, 0x67, 0xc0, 0x19, 0x48, 0x35, 0x3b, 0xfc, 0xb6, 0xa6, 0x50, 0x83, 0x74, 0x2b, 0x1f, 0x65, 0x76, 0xee, 0x55, 0x96, 0x66, 0xc7, 0x95, 0x5f, 0x57, 0xe1, 0xb8, 0x72, 0x00, 0x96, 0xdb, 0x12, 0xb6, 0xbc, 0xf1, 0xc4, 0xea, 0xc2, 0xf1, 0x64, 0xc0, 0x76, 0x5c, 0x6a, 0xb4, 0x4d, 0x66, 0x46, 0x92, 0x86, 0xb6, 0x1d, 0x47, 0x1a, 0xb6, 0xbc, 0x22, 0xf9, 0x6d, 0x01, 0xeb, 0xa2, 0x54, 0xc0, 0xd1, 0x93, 0x6a, 0xa6, 0x71, 0x83, 0x5a, 0x5a, 0xb5, 0x88, 0xe3, 0xd8, 0xbf, 0x58, 0xeb, 0x5c, 0x46, 0xb9, 0x3e, 0x5d, 0x2f, 0x8e, 0x6e, 0xb7, 0xa6, 0x47, 0x36, 0x65, 0x0d, 0x0f, 0x21, 0x52, 0x1f, 0x60, 0x16, 0x4d, 0x43, 0x96, 0x87, 0x4f, 0x7e, 0xa0, 0x8d, 0x6d, 0x34, 0x16, 0x26, 0x1c, 0x78, 0x75, 0xcc, 0x34, 0xb6, 0x65, 0x52, 0xa5, 0x06, 0x47, 0x96, 0xa7, 0xfa, 0xb6, 0xf8, 0x91, 0xfa, 0x2d, 0x7b, 0x0a, 0xf8, 0x61, 0x79, 0xad, 0x78, 0xb5, 0x9e, 0x40, 0x8d, 0x19, 0x14, 0x25, 0xf4, 0x88, 0x44, 0x23, 0x72, 0x66, 0xa4, 0x55, 0x82, 0x79, 0xfc, 0x48, 0xca, 0x4a, 0xe2, 0x07, 0x79, 0x59, 0x90, 0xcb, 0x0b, 0x2b, 0x61, 0x56, 0x5e, 0x28, 0x55, 0xaa, 0xb7, 0x32, 0x5e, 0x70, 0x94, 0x1d, 0x0c, 0x95, 0xb8, 0x84, 0x2a, 0xa3, 0xec, 0x23, 0xf9, 0x71, 0xc4, 0xdd, 0x45, 0x3c, 0x49, 0x8d, 0x69, 0x0d, 0x49, 0xff, 0x2c, 0x7b, 0x11, 0x9b, 0x25, 0x9f, 0x6d, 0x71, 0xac, 0xa0, 0xd2, 0x5c, 0x62, 0xb5, 0x10, 0x0a, 0xe6, 0x8f, 0xff, 0xe1, 0xe5, 0xc4, 0x05, 0xed, 0xad, 0xa6, 0x71, 0x41, 0x3c, 0x27, 0xe8, 0x5d, 0x42, 0x5c, 0x48, 0xbe, 0xe0, 0x70, 0x0e, 0x0f, 0xd9, 0xb4, 0xb3, 0x8c, 0x03, 0x6f, 0xdb, 0x93, 0x47, 0xbc, 0x5b, 0x7e, 0x28, 0x35, 0x4c, 0x1b, 0xd1, 0x83, 0xea, 0x64, 0x54, 0xe7, 0xac, 0x53, 0xcf, 0xd2, 0x8e, 0x64, 0xce, 0x4e, 0xd0, 0xab, 0xe7, 0x68, 0x2f, 0x3c, 0xe7, 0x37, 0xd4, 0x4b, 0xd8, 0x62, 0x68, 0xc4, 0xbf, 0xdc, 0xd4, 0xa3, 0x5e, 0x62, 0x3b, 0xe8, 0x2d, 0x42, 0xb4, 0x8d, 0xa8, 0x58, 0xda, 0x9c, 0xb3, 0xaf, 0x2a, 0xe8, 0x2a, 0x1c, 0x40, 0xfb, 0xf7, 0x9d, 0x3b, 0x40, 0xe7, 0xc8, 0x09, 0x35, 0x75, 0x1f, 0xaa, 0xe3, 0x34, 0xe7, 0x46, 0xfe, 0x3b, 0xb7, 0xe8, 0x6c, 0xc2, 0x67, 0xc8, 0xfd, 0x77, 0x7a, 0x8e, 0x97, 0xbf, 0xdc, 0x0f, 0x82, 0x50, 0xb6, 0x84, 0x7c, 0x0c, 0xeb, 0xa4, 0x22, 0xc6, 0xc3, 0x51, 0x7c, 0xc3, 0x26, 0x1c, 0xb2, 0xb5, 0xbd, 0xff, 0xe8, 0x79, 0x3a, 0x03, 0x97, 0xe6, 0xb1, 0x2d, 0x08, 0x3e, 0xed, 0xa0, 0xf2, 0x2d, 0x76, 0x8f, 0x5c, 0xef, 0xf2, 0xae, 0xdf, 0x55, 0x5d, 0x7a, 0xff, 0x8e, 0x90, 0x0f, 0xb9, 0x3d, 0x8a, 0xbf, 0x48, 0xd0, 0x9c, 0x42, 0xc4, 0x1b, 0x27, 0x9c, 0x8d, 0xea, 0x49, 0xa9, 0x95, 0x7e, 0xc3, 0x67, 0x05, 0xa0, 0x1d, 0xeb, 0x09, 0x2f, 0x94, 0x7a, 0xd4, 0x29, 0x2f, 0x72, 0x11, 0x05, 0xc4, 0xd0, 0xc5, 0x21, 0x43, 0xcb, 0xc0, 0x4b, 0x3f, 0x0d, 0x8b, 0x87, 0x06, 0xb6, 0xfc, 0x06, 0xd1, 0xf5, 0x98, 0x74, 0x5b, 0x54, 0x3d, 0x1c, 0x53, 0x8e, 0xd0, 0x59, 0xdf, 0x35, 0xc5, 0x0c, 0x91, 0x19, 0x69, 0xef, 0x42, 0xe7, 0x41, 0x75, 0x5c, 0x1c, 0x0f, 0x95, 0x5b, 0xe1, 0x4c, 0xec, 0xcc, 0xc0, 0x7d, 0x31, 0x16, 0xf7, 0xb2, 0x38, 0x6e, 0x19, 0x6f, 0xa9, 0x37, 0xd6, 0xc3, 0x9c, 0x4d, 0x93, 0x76, 0xb4, 0x23, 0xaa, 0x8b, 0xd6, 0xef, 0x70, 0x95, 0xde, 0x1f, 0x7f, 0xf4, 0xca, 0xcf, 0x9e, 0x5a, 0x7d, 0xfd, 0xe3, 0x2e, 0xa7, 0x37, 0x15, 0xb0, 0x93, 0xf5, 0xf7, 0x33, 0xff, 0xdf, 0x03, 0xa2, 0x3e, 0x98, 0xa4, 0xd9, 0x0a, 0x0c, 0xaf, 0x02, 0x0c, 0x23, 0x7f, 0x8c, 0x5f, 0x67, 0x03, 0xf2, 0x5a, 0xaf, 0x9e, 0xb4, 0x7a, 0xa5, 0x6f, 0xa0, 0x36, 0x8f, 0xe6, 0xf1, 0xdb, 0xe9, 0x5e, 0x94, 0x5a, 0x47, 0xfb, 0x62, 0x49, 0x84, 0x3c, 0x63, 0x68, 0xab, 0x2f, 0x52, 0xa7, 0x82, 0x7b, 0xb4, 0xd8, 0xab, 0x6c, 0x3c, 0x5c, 0xee, 0x16, 0x78, 0x2c, 0xf2, 0xec, 0x84, 0x72, 0xf2, 0x45, 0x1c, 0x3a, 0xa8, 0x5e, 0x53, 0x5c, 0x8c, 0x36, 0x63, 0xf8, 0xaa, 0x42, 0x33, 0x11, 0x83, 0x56, 0xcc, 0x85, 0x6d, 0x1f, 0x11, 0x32, 0xda, 0x55, 0x95, 0x61, 0x91, 0xd9, 0x35, 0x57, 0x43, 0x16, 0xec, 0x4d, 0xcd, 0xac, 0x0f, 0xd0, 0xdb, 0xbd, 0x59, 0xb2, 0x30, 0x1d, 0x80, 0x1a, 0x42, 0x4b, 0x6c, 0x54, 0xd1, 0x13, 0xcf, 0x77, 0xa3, 0xd6, 0xa0, 0x92, 0x7d, 0x69, 0x96, 0x48, 0xf6, 0xbb, 0x1f, 0x16, 0xc7, 0x51, 0xff, 0xf7, 0xf9, 0x77, 0x63, 0x3e, 0x9b, 0xc3, 0x6b, 0xc7, 0x16, 0xbb, 0xf6, 0x31, 0xa7, 0x17, 0x25, 0xf2, 0xa9, 0x09, 0xa9, 0x35, 0x57, 0x0e, 0x19, 0x6d, 0x2f, 0xaa, 0xbd, 0x79, 0x48, 0x6a, 0x66, 0xf6, 0xdb, 0x35, 0x6d, 0xb6, 0xdf, 0xa2, 0x54, 0x6b, 0xfd, 0xf5, 0x0f, 0xa7, 0x82, 0x23, 0x19, 0xba, 0x9d, 0x79, 0x52, 0x4c, 0x21, 0x1d, 0xdf, 0x4b, 0x77, 0xdd, 0x54, 0xaa, 0x92, 0x66, 0x02, 0x30, 0x6d, 0xef, 0x14, 0x51, 0xd7, 0x21, 0x48, 0xd1, 0xce, 0xf7, 0xe4, 0x17, 0xb0, 0xf2, 0x55, 0xa6, 0xb4, 0xd3, 0xab, 0x9d, 0xe6, 0x08, 0x6c, 0x85, 0xc5, 0xb4, 0xf3, 0x1d, 0x8e, 0xb3, 0x07, 0xa0, 0x2a, 0xaa, 0xd2, 0xbe, 0xde, 0xae, 0x6e, 0xc1, 0x45, 0x5e, 0x23, 0x92, 0x27, 0xbc, 0x18, 0x47, 0x59, 0x4c, 0xa1, 0xb5, 0xa6, 0x12, 0xe6, 0x73, 0x77, 0x82, 0x1d, 0xcc, 0x51, 0xda, 0xcf, 0xd8, 0xe2, 0xa6, 0x35, 0x4f, 0x95, 0xee, 0x16, 0x90, 0xea, 0x3e, 0x06, 0x47, 0xdd, 0x25, 0x6c, 0xd1, 0x4d, 0x60, 0xab, 0x47, 0x3d, 0xba, 0x4b, 0xd8, 0x1c, 0x01, 0x6d, 0x3d, 0x11, 0xdb, 0x85, 0xec, 0xc2, 0x3a, 0xd0, 0xd6, 0xa1, 0x96, 0x60, 0x6b, 0x24, 0xaf, 0x93, 0x9b, 0xd9, 0xaf, 0x64, 0x39, 0xf2, 0x2f, 0xc4, 0xfb, 0x41, 0xee, 0x2d, 0x3b, 0x12, 0xeb, 0x68, 0x31, 0xe3, 0x9b, 0x0c, 0xef, 0xfe, 0x9c, 0x9d, 0x21, 0x5d, 0x08, 0xfc, 0xd2, 0x7f, 0x56, 0xfc, 0xb3, 0xb0, 0xd0, 0xe2, 0xcc, 0x97, 0x61, 0x16, 0xea, 0x15, 0xa4, 0x6d, 0xfc, 0xbb, 0xb1, 0x3c, 0x1c, 0xb2, 0xb2, 0xef, 0xc7, 0x47, 0x21, 0xb9, 0xfb, 0x3a, 0xfb, 0x6e, 0x6c, 0x46, 0x8e, 0x4d, 0xee, 0x55, 0x58, 0x2f, 0xf6, 0x34, 0xe6, 0x73, 0x3a, 0xcd, 0x3d, 0x4f, 0xe4, 0x93, 0x60, 0xfb, 0x01, 0x4a, 0x0e, 0xda, 0x93, 0xec, 0x41, 0x5a, 0x5f, 0x22, 0xb8, 0xee, 0xfd, 0x18, 0x2a, 0x9d, 0x2e, 0x5a, 0xe7, 0x24, 0x99, 0x88, 0xb3, 0x68, 0xd9, 0xe1, 0x58, 0x87, 0x84, 0xef, 0x0d, 0xe3, 0x61, 0xbe, 0xce, 0xa9, 0x34, 0xbb, 0xce, 0x49, 0xb0, 0xf0, 0x75, 0x4e, 0x42, 0x65, 0xfe, 0x3a, 0x27, 0xb7, 0x11, 0xb5, 0xe0, 0xc8, 0xd7, 0x42, 0xbf, 0x3e, 0x7b, 0xf2, 0x9b, 0x44, 0x9e, 0x10, 0x1b, 0xf3, 0x82, 0xa0, 0x3d, 0x2c, 0xd1, 0x9a, 0x5f, 0x2c, 0x85, 0xcd, 0x29, 0x0b, 0xd1, 0x7e, 0x96, 0xe1, 0xb5, 0xd8, 0x7a, 0xab, 0xac, 0xb0, 0x66, 0x80, 0x78, 0x8f, 0xd2, 0xf9, 0xb7, 0x66, 0xf9, 0x45, 0xb0, 0xd0, 0x2a, 0x2c, 0x27, 0x5b, 0xfd, 0xea, 0x2e, 0x73, 0x97, 0x4a, 0x9e, 0xa6, 0x4e, 0x98, 0xe7, 0xd6, 0x05, 0x27, 0x2e, 0xd7, 0xdc, 0xb5, 0x95, 0xf6, 0xce, 0x94, 0x64, 0x2f, 0xe6, 0x40, 0x3e, 0xfe, 0x46, 0xea, 0x12, 0x2c, 0xd4, 0x32, 0x58, 0x99, 0x16, 0x1c, 0x3d, 0xaa, 0x84, 0x4a, 0xea, 0x21, 0x21, 0x63, 0x53, 0x17, 0xf7, 0x53, 0x9e, 0x6a, 0x27, 0x6f, 0x5b, 0xe0, 0x42, 0xbb, 0x3e, 0x33, 0xfb, 0xf8, 0x1a, 0xcd, 0xfd, 0xa3, 0xd1, 0xc7, 0x86, 0x63, 0x16, 0xed, 0x20, 0x4a, 0xdf, 0x22, 0x68, 0x55, 0x38, 0x0e, 0x4a, 0xb7, 0xb8, 0x75, 0xd8, 0x46, 0xa7, 0xdc, 0x4e, 0xa8, 0xa5, 0x99, 0x28, 0xab, 0xaf, 0xff, 0xea, 0x28, 0xf6, 0x2a, 0x1d, 0xdb, 0x81, 0x8e, 0xc7, 0x99, 0x82, 0x7b, 0xd8, 0x6e, 0x8b, 0xd8, 0xfa, 0xc3, 0x21, 0xbc, 0x5e, 0x0b, 0xaf, 0x65, 0x27, 0x55, 0x74, 0x81, 0x89, 0x66, 0xc5, 0x80, 0xea, 0x2e, 0x5a, 0xd1, 0x85, 0xed, 0xa8, 0x0c, 0xaf, 0x66, 0x76, 0x5d, 0xc0, 0xae, 0x16, 0x76, 0x2d, 0x63, 0x57, 0xa3, 0xbb, 0xcc, 0xb5, 0x59, 0x9d, 0x7a, 0xfb, 0x23, 0x28, 0x77, 0xcf, 0xa5, 0x1d, 0xee, 0x4e, 0xbf, 0x4f, 0x67, 0xbb, 0xa6, 0x7d, 0xab, 0x3f, 0x0d, 0x60, 0x0d, 0x0e, 0xb4, 0x5c, 0xcb, 0xb1, 0x2d, 0xe5, 0xec, 0x42, 0xaa, 0xed, 0x76, 0x97, 0x9e, 0xa7, 0xf4, 0x19, 0x25, 0xf9, 0xe0, 0x93, 0x1b, 0x48, 0xd2, 0xce, 0x24, 0x59, 0x9f, 0x96, 0x04, 0x53, 0x2b, 0xbf, 0x28, 0x69, 0xce, 0x1e, 0xa3, 0x9d, 0xb7, 0x51, 0x1a, 0xf3, 0x74, 0x69, 0xd0, 0x1e, 0x16, 0x0a, 0x25, 0x92, 0x96, 0xb1, 0x7d, 0xb9, 0x35, 0x4f, 0x0a, 0x7d, 0xfb, 0xd0, 0x24, 0xc1, 0xb6, 0x82, 0x9c, 0xeb, 0x57, 0x5d, 0xff, 0xc0, 0x11, 0x1c, 0xe5, 0x92, 0x50, 0xfb, 0x69, 0xa1, 0xd1, 0x0f, 0xe3, 0x99, 0x6f, 0x5d, 0x62, 0x63, 0xb3, 0x3e, 0xe2, 0xc1, 0x92, 0x4d, 0x34, 0xae, 0xf5, 0xc2, 0x62, 0x38, 0x32, 0xd0, 0x51, 0x85, 0xe3, 0xfb, 0xb5, 0x49, 0x6d, 0x4f, 0xdb, 0x43, 0x3b, 0x3b, 0x16, 0xb8, 0xe7, 0xd5, 0x34, 0xb9, 0xc5, 0x9a, 0x3a, 0xe4, 0x53, 0x6b, 0x29, 0xff, 0x56, 0xcb, 0xc7, 0x18, 0xd9, 0x13, 0xf8, 0xb0, 0x52, 0xcf, 0x77, 0x6c, 0xa6, 0x31, 0x85, 0xd6, 0xa8, 0xfb, 0x3b, 0xb3, 0xa5, 0x92, 0xcf, 0x58, 0xa2, 0xdd, 0xcd, 0x4d, 0x93, 0x31, 0x29, 0x46, 0x9e, 0x5c, 0x8a, 0xa9, 0xed, 0x84, 0x12, 0xf7, 0xdc, 0x9a, 0x4e, 0x30, 0xb8, 0xd9, 0xbe, 0xd5, 0x11, 0xeb, 0xe4, 0x3e, 0x36, 0x9f, 0x84, 0xda, 0xe0, 0x2f, 0x49, 0xd6, 0x74, 0x4e, 0xcc, 0xa3, 0xc7, 0xfe, 0x4a, 0xb9, 0xf4, 0x5a, 0x2e, 0x0f, 0x72, 0xff, 0x5b, 0x48, 0xbe, 0x75, 0x80, 0xbe, 0x34, 0x92, 0xa7, 0x9d, 0xc6, 0x0d, 0xaa, 0xd7, 0xe6, 0x10, 0x1c, 0x18, 0xae, 0xa4, 0x7e, 0x43, 0xfd, 0x1d, 0x35, 0x62, 0x61, 0xdf, 0x7e, 0x4c, 0x8d, 0xd7, 0x2f, 0x5d, 0x0e, 0xee, 0x66, 0x61, 0x51, 0xbb, 0x1b, 0x83, 0xbb, 0xf1, 0xf9, 0x99, 0x69, 0x14, 0x62, 0xfd, 0x61, 0x01, 0xc6, 0x62, 0x2f, 0x0b, 0xee, 0xc6, 0x27, 0x6a, 0x8e, 0x18, 0xb3, 0xde, 0xfd, 0xe6, 0x21, 0x79, 0x3f, 0x98, 0xd2, 0x6b, 0x1e, 0xf1, 0xdf, 0x9c, 0xf9, 0x1a, 0x52, 0xc3, 0x67, 0x7f, 0x32, 0x9d, 0x33, 0x8f, 0x38, 0xd6, 0xb3, 0x27, 0xb8, 0xfb, 0x2e, 0x0f, 0xea, 0x3e, 0xed, 0x15, 0x27, 0xaa, 0x3a, 0xe3, 0x19, 0x27, 0xaa, 0x36, 0xe3, 0x1d, 0x27, 0x6a, 0x69, 0x9e, 0x87, 0x9c, 0x62, 0x96, 0x67, 0xbc, 0xe4, 0x44, 0xc9, 0x19, 0x4f, 0x39, 0x51, 0x2b, 0x33, 0xde, 0x72, 0xa2, 0xfc, 0xec, 0x19, 0xee, 0x87, 0xaa, 0xb0, 0x03, 0xaf, 0xd5, 0x61, 0x2b, 0x5e, 0x6b, 0xc3, 0x95, 0x78, 0x5d, 0x1a, 0xae, 0xc0, 0xeb, 0xf2, 0xb0, 0x09, 0xaf, 0x72, 0xb8, 0x04, 0xaf, 0x2b, 0xc3, 0x7a, 0x1c, 0x85, 0xca, 0xd8, 0xf3, 0x9b, 0xb8, 0x54, 0x8b, 0xfd, 0x1c, 0x58, 0x7b, 0x62, 0xb3, 0x65, 0x6e, 0xec, 0xfb, 0xa7, 0x67, 0x41, 0xff, 0x38, 0x4e, 0x9d, 0xa7, 0x1d, 0xb9, 0xe9, 0x84, 0x0a, 0x87, 0x03, 0x24, 0xda, 0x2d, 0x02, 0xc7, 0x6a, 0x5f, 0x18, 0xe0, 0x2d, 0xf6, 0x76, 0xf8, 0x7f, 0xf6, 0xfe, 0x06, 0x3e, 0xaa, 0xea, 0x5a, 0x18, 0x87, 0xd7, 0x39, 0xf3, 0x9d, 0x4c, 0x86, 0x31, 0xc6, 0x98, 0xd2, 0x14, 0x0f, 0xe3, 0x10, 0x87, 0x10, 0x32, 0x63, 0x88, 0x31, 0x4d, 0x53, 0x9c, 0xaf, 0x84, 0x61, 0x08, 0xd3, 0xdc, 0x80, 0x34, 0xb5, 0x14, 0x07, 0x48, 0x66, 0xf8, 0x08, 0xc9, 0x34, 0x44, 0x6e, 0xca, 0xcd, 0xcf, 0x4e, 0x02, 0x62, 0xa4, 0xd6, 0x50, 0x44, 0xea, 0xe3, 0xeb, 0xf5, 0xef, 0xdf, 0xb7, 0xb7, 0xa5, 0x68, 0x95, 0x4b, 0xbd, 0x3e, 0x5e, 0x1e, 0x1e, 0x6f, 0x44, 0xae, 0x17, 0x2d, 0xa5, 0x01, 0x29, 0xa5, 0x94, 0x2a, 0x52, 0xae, 0x22, 0x02, 0xa2, 0xa5, 0x88, 0x21, 0x99, 0xf9, 0xaf, 0xb5, 0xf6, 0x99, 0x8f, 0x04, 0xfc, 0xe8, 0xbd, 0xf7, 0x7d, 0xde, 0xf7, 0xf7, 0x7b, 0x2f, 0xe1, 0xcc, 0x39, 0x67, 0x7f, 0xae, 0xbd, 0xf6, 0xda, 0x6b, 0xaf, 0xb5, 0xf7, 0x3e, 0x6b, 0x15, 0x20, 0xa7, 0x71, 0x39, 0x82, 0x38, 0xc3, 0x39, 0x20, 0x9f, 0xe6, 0x9b, 0xa1, 0x07, 0xc2, 0x15, 0x38, 0x47, 0xf8, 0xa1, 0xac, 0x4b, 0xb2, 0xd5, 0xd2, 0x02, 0x97, 0x17, 0x66, 0x61, 0x9a, 0x70, 0x49, 0xc9, 0xc2, 0xae, 0xe4, 0xf3, 0x3f, 0x88, 0x68, 0x6d, 0x7d, 0x61, 0xcb, 0x0b, 0xbc, 0x1e, 0xe9, 0xfd, 0x51, 0x58, 0x6b, 0xfb, 0x65, 0x00, 0xd8, 0x8e, 0xdb, 0x89, 0xf0, 0xbe, 0x26, 0x38, 0xdc, 0x47, 0xdf, 0xa7, 0xbe, 0xda, 0x17, 0x9d, 0xb9, 0x06, 0x0a, 0x61, 0x92, 0xab, 0xda, 0x5e, 0x26, 0xd5, 0x6f, 0x70, 0x04, 0x6d, 0x73, 0x70, 0xc4, 0xe6, 0x1f, 0x59, 0x77, 0x64, 0xdd, 0x9c, 0x3f, 0x57, 0xc3, 0x1a, 0x29, 0x3c, 0xb1, 0x6c, 0xe1, 0xbc, 0x87, 0xd6, 0x8e, 0xee, 0x7a, 0xa8, 0xd5, 0x3c, 0x51, 0xf3, 0xba, 0x21, 0xaa, 0x5d, 0xf7, 0xa3, 0xb0, 0xfc, 0xeb, 0x1f, 0x1d, 0xd1, 0x34, 0x3f, 0xf0, 0xbf, 0x5e, 0x8b, 0x9c, 0x3c, 0xf9, 0x80, 0x19, 0xe0, 0xa6, 0xc8, 0xb3, 0x5e, 0x08, 0x4f, 0xea, 0x84, 0x7c, 0xa0, 0x93, 0x78, 0xb6, 0xce, 0x22, 0x98, 0xf5, 0x5e, 0x32, 0xd9, 0x35, 0xfa, 0xfc, 0x0f, 0x5a, 0xf5, 0x37, 0xff, 0xcf, 0x22, 0x57, 0x00, 0x9a, 0x60, 0x07, 0x96, 0xdb, 0x7a, 0x7c, 0x6d, 0x72, 0x72, 0x1d, 0x4a, 0x57, 0xdb, 0xc0, 0xaf, 0xda, 0x51, 0xb6, 0xf3, 0x68, 0x3b, 0x1b, 0x78, 0xb7, 0x56, 0xd8, 0x51, 0x2e, 0xc3, 0x39, 0xca, 0x87, 0xd4, 0x66, 0xbf, 0xca, 0xf2, 0x71, 0xe6, 0xfc, 0x9b, 0x5b, 0xd8, 0x3e, 0x46, 0x39, 0x2d, 0x90, 0xd9, 0x63, 0xa5, 0x58, 0xc5, 0x97, 0x3d, 0x3e, 0x6e, 0x73, 0x23, 0x8f, 0xe0, 0x11, 0xab, 0xf8, 0x90, 0xfe, 0x4a, 0x9d, 0xb9, 0x73, 0x87, 0x13, 0x9d, 0x29, 0xde, 0xa3, 0xf8, 0x10, 0xbf, 0x62, 0xcc, 0xe6, 0x32, 0xff, 0x21, 0x4a, 0x41, 0x89, 0x25, 0x76, 0xbd, 0xe2, 0xc3, 0xb1, 0x50, 0x2a, 0xc2, 0x39, 0xed, 0x05, 0xac, 0x49, 0xa6, 0x37, 0x1b, 0x96, 0x75, 0x1b, 0xce, 0x6c, 0xe4, 0x61, 0x51, 0x31, 0xfa, 0xe3, 0x9e, 0x0f, 0xfb, 0x93, 0x36, 0xe3, 0x60, 0xef, 0x3b, 0xfd, 0x58, 0x97, 0xf5, 0xb6, 0x55, 0xc9, 0x61, 0xb0, 0xd0, 0x57, 0x1e, 0x37, 0xb8, 0x21, 0xbf, 0x33, 0x39, 0xc5, 0x23, 0x64, 0x91, 0xb1, 0x6b, 0x7c, 0xa3, 0xf3, 0x91, 0xba, 0x8c, 0x44, 0x5d, 0xd1, 0x46, 0xaf, 0x26, 0x26, 0x85, 0xab, 0x8e, 0xae, 0x3f, 0xba, 0xbe, 0x14, 0x47, 0xcf, 0xb1, 0xf5, 0xae, 0x52, 0xb0, 0xbc, 0x7c, 0x06, 0xac, 0x9c, 0x43, 0xce, 0xac, 0x0a, 0xa2, 0x76, 0x4f, 0xa7, 0xa0, 0x8d, 0xc1, 0x1d, 0x01, 0xde, 0xa1, 0xf5, 0xbb, 0x9b, 0x34, 0xdd, 0x50, 0xa4, 0x79, 0x11, 0x25, 0xa7, 0x16, 0x3d, 0x72, 0xb4, 0xdd, 0x61, 0x2d, 0xfe, 0x92, 0x9d, 0xe0, 0xd1, 0x2d, 0xba, 0x98, 0x24, 0x4e, 0xa7, 0xa2, 0xec, 0x46, 0xd2, 0xef, 0x59, 0x94, 0xbc, 0xb3, 0xec, 0x04, 0xf3, 0x57, 0x0b, 0xe7, 0x16, 0xd6, 0x26, 0xf7, 0x0b, 0x4b, 0xa5, 0x7c, 0xfa, 0xbc, 0x18, 0x67, 0x64, 0xa5, 0x84, 0x2c, 0xf4, 0x36, 0xd0, 0x57, 0xc8, 0xfc, 0xdd, 0xb0, 0xdb, 0x2b, 0x87, 0x1d, 0xf4, 0xc5, 0x0b, 0x72, 0x17, 0xf7, 0xc1, 0x41, 0x5b, 0xec, 0x51, 0x10, 0xf6, 0x6f, 0x53, 0x50, 0x66, 0xc6, 0x71, 0x93, 0x8c, 0x23, 0xdb, 0xf8, 0x7c, 0x29, 0xf6, 0xf0, 0x81, 0x74, 0x3b, 0x43, 0x4e, 0x1f, 0xd8, 0x9d, 0x0d, 0xd9, 0x56, 0x77, 0x17, 0x9a, 0x43, 0x07, 0x85, 0x27, 0x4c, 0xac, 0xaf, 0xb2, 0x9c, 0xac, 0xc8, 0xe1, 0x5c, 0xb1, 0xc6, 0x76, 0xe4, 0x07, 0x8e, 0x69, 0x12, 0x49, 0x48, 0xd5, 0xd4, 0xaf, 0x38, 0xeb, 0xba, 0x94, 0x59, 0x74, 0xae, 0xd1, 0xeb, 0x25, 0xbd, 0xe2, 0xf5, 0x96, 0x32, 0xfc, 0xfd, 0x55, 0x5f, 0xf8, 0x5e, 0xb6, 0x6b, 0x5d, 0xda, 0x59, 0x80, 0x12, 0x42, 0x27, 0xad, 0xca, 0xe1, 0xb8, 0x70, 0x09, 0xeb, 0xd6, 0xd1, 0x1a, 0xbc, 0x6b, 0x50, 0x52, 0xb8, 0x8b, 0x24, 0x1c, 0xec, 0x8d, 0xa2, 0xa8, 0x19, 0xb9, 0xbc, 0x46, 0xa9, 0xe7, 0x59, 0xd8, 0x8f, 0x4f, 0x75, 0xa1, 0x4d, 0xcd, 0x03, 0x61, 0xb2, 0xf0, 0x41, 0xbe, 0x0d, 0x0b, 0x77, 0xf4, 0x47, 0xcb, 0x31, 0x5d, 0x61, 0xb8, 0x44, 0x0d, 0x29, 0xc0, 0x90, 0x62, 0x0c, 0x29, 0x68, 0xd3, 0xa2, 0x44, 0x58, 0x40, 0xad, 0xdc, 0x81, 0xf7, 0x76, 0xfd, 0x3c, 0x3a, 0x1f, 0x5a, 0x80, 0x32, 0xcf, 0xdc, 0x31, 0x36, 0xad, 0xbb, 0x9c, 0x06, 0x94, 0x3a, 0x6a, 0xb3, 0x67, 0x91, 0xa0, 0x37, 0x9a, 0xff, 0x4f, 0xef, 0xc3, 0xa2, 0x08, 0xd7, 0xcd, 0xbb, 0x93, 0xc1, 0xc6, 0x81, 0x94, 0xaf, 0x48, 0xa4, 0xf3, 0x11, 0x3a, 0x2b, 0xcb, 0x5a, 0x08, 0x52, 0x36, 0xcd, 0x95, 0xa8, 0x8d, 0x14, 0x3a, 0x90, 0xda, 0x4b, 0x96, 0x43, 0x3e, 0x6a, 0xbd, 0x5a, 0x94, 0x7b, 0x2b, 0x22, 0x6c, 0x19, 0x86, 0xa5, 0x2d, 0x80, 0xa3, 0x25, 0x48, 0xa5, 0x9b, 0xd7, 0x75, 0x15, 0xe0, 0xdc, 0x01, 0xb0, 0x8b, 0xfc, 0xc8, 0x7f, 0xb3, 0x17, 0xe5, 0xb6, 0x09, 0xfc, 0xbe, 0xfd, 0x50, 0x6f, 0xc5, 0xd7, 0x8a, 0x50, 0x72, 0xb3, 0xca, 0x50, 0x05, 0x4f, 0xc0, 0x7c, 0xbc, 0xae, 0xfe, 0x53, 0xa0, 0x14, 0xdc, 0x54, 0x66, 0x15, 0xca, 0x5c, 0x61, 0xa3, 0xfa, 0x54, 0xa0, 0xfc, 0x20, 0xdc, 0xad, 0x3e, 0x17, 0x85, 0x3f, 0xa2, 0x1e, 0xcc, 0x1e, 0x3d, 0xb6, 0x78, 0xf8, 0xae, 0x8a, 0x69, 0x60, 0x8d, 0xd4, 0x90, 0x7c, 0x2d, 0x62, 0xba, 0x30, 0xa6, 0xcb, 0xea, 0xd4, 0xf2, 0x2c, 0xa8, 0x21, 0xad, 0xf2, 0x8a, 0x8d, 0x4a, 0x50, 0x64, 0x7f, 0x9c, 0xe6, 0xb8, 0x79, 0xbd, 0x87, 0x7b, 0x07, 0xfb, 0xde, 0xe9, 0x57, 0xe2, 0x3c, 0x83, 0x4d, 0xa4, 0xb8, 0x0a, 0x8f, 0xf2, 0x00, 0x7f, 0x99, 0x0f, 0x4e, 0x93, 0xd0, 0xbd, 0x84, 0xf4, 0x60, 0x2e, 0x16, 0x33, 0x1b, 0x62, 0x44, 0x61, 0xe9, 0x94, 0xce, 0x31, 0xd2, 0x69, 0x4a, 0xe4, 0x13, 0xd8, 0x66, 0x3a, 0x61, 0x90, 0x93, 0xbd, 0x13, 0x82, 0x23, 0x7f, 0x52, 0x65, 0x67, 0x80, 0xbe, 0x7e, 0xe1, 0xaf, 0x60, 0x70, 0xc6, 0x5a, 0x47, 0xfb, 0x73, 0x0d, 0x6f, 0x69, 0x8b, 0x69, 0xce, 0x1a, 0x1a, 0xc4, 0xf9, 0x92, 0x9e, 0x89, 0xa6, 0x5d, 0x44, 0xd3, 0xa9, 0x52, 0x7f, 0x7b, 0x1a, 0xf2, 0x2b, 0x70, 0xa6, 0x7a, 0xe5, 0x7d, 0xd0, 0xa3, 0xbe, 0xa1, 0x6d, 0x93, 0x17, 0xb9, 0xdf, 0x71, 0xbb, 0xdc, 0x07, 0x5f, 0xb6, 0x1b, 0xd7, 0x8c, 0xbc, 0xda, 0xf7, 0xc2, 0x76, 0x1c, 0x8b, 0x66, 0xb2, 0xbb, 0x3e, 0xbc, 0x76, 0x8a, 0x0f, 0x94, 0xe6, 0x01, 0x45, 0x46, 0x49, 0x54, 0x79, 0xd7, 0x98, 0x3f, 0x0d, 0x74, 0xb2, 0x04, 0x86, 0x21, 0x3a, 0x7b, 0x0c, 0x37, 0x3c, 0x0d, 0xb9, 0x45, 0xf6, 0x98, 0xf4, 0xa7, 0x6d, 0xbd, 0xdb, 0x89, 0x7f, 0x99, 0xcd, 0xcc, 0xb7, 0x4f, 0x90, 0xed, 0x35, 0xac, 0xaf, 0x91, 0xfc, 0x8c, 0x60, 0x7d, 0x0d, 0x9f, 0x5e, 0x9f, 0xc3, 0xd8, 0x35, 0xb2, 0x77, 0xfd, 0xf3, 0x54, 0xdf, 0xda, 0x52, 0xc4, 0x0d, 0xd7, 0xa9, 0x9f, 0xe2, 0x05, 0x05, 0xb9, 0xbb, 0x63, 0x2d, 0x4c, 0xc4, 0x11, 0x74, 0xec, 0x3e, 0xfc, 0x7b, 0x00, 0x61, 0x98, 0x1d, 0x56, 0x1c, 0xdf, 0x41, 0x0d, 0xe7, 0xc1, 0x88, 0x16, 0x29, 0x21, 0xff, 0x45, 0xc1, 0xc9, 0x37, 0x61, 0xff, 0x95, 0x82, 0xa2, 0x3c, 0x6f, 0x84, 0xe6, 0xfe, 0x5d, 0xfd, 0x91, 0xe3, 0x5e, 0xb0, 0x33, 0xf7, 0x0f, 0x2b, 0x65, 0xf2, 0xfe, 0x47, 0xa3, 0xf2, 0x06, 0xe9, 0x90, 0x84, 0xe1, 0x1f, 0x31, 0xc4, 0xeb, 0x8a, 0xec, 0x27, 0x37, 0x12, 0x87, 0x8e, 0xe6, 0xa0, 0xf2, 0x30, 0xbb, 0x53, 0xf2, 0x6a, 0xc2, 0x27, 0x15, 0xed, 0xf8, 0xd6, 0x89, 0xfd, 0x11, 0x6b, 0x85, 0xd1, 0x2e, 0x9e, 0xc8, 0x9a, 0x1b, 0x71, 0x28, 0xe1, 0xed, 0x9c, 0x76, 0xdb, 0x69, 0xbc, 0xa6, 0xbc, 0x9e, 0x97, 0xe2, 0x78, 0x29, 0x46, 0xb9, 0xae, 0x0c, 0xa9, 0xa9, 0xb4, 0xe1, 0x0f, 0xc8, 0x2f, 0x9c, 0x79, 0xa1, 0x5d, 0x9f, 0xcc, 0x24, 0xff, 0xf1, 0xd8, 0x6e, 0x73, 0xf3, 0xc0, 0xce, 0x40, 0xd4, 0xac, 0x8e, 0x9f, 0x1c, 0xd4, 0x2a, 0xfb, 0x2b, 0x4b, 0x21, 0x87, 0xde, 0x77, 0x06, 0x56, 0xe9, 0xab, 0xa4, 0x0a, 0x63, 0x58, 0xae, 0x32, 0xee, 0xf0, 0xb6, 0xe9, 0x5d, 0xde, 0x4a, 0x70, 0x19, 0x83, 0xbe, 0x55, 0x6b, 0x83, 0xee, 0x55, 0x6b, 0x2a, 0x56, 0xa1, 0xcc, 0x3f, 0xbb, 0xad, 0xdd, 0xb5, 0x0a, 0x2c, 0xcf, 0x07, 0xda, 0x22, 0xd5, 0x52, 0xbd, 0xff, 0xde, 0x09, 0xe7, 0x5b, 0xf6, 0xf8, 0xab, 0xe5, 0x7a, 0xff, 0xf9, 0x96, 0xbd, 0xfe, 0x17, 0x66, 0xaf, 0xd2, 0x56, 0x99, 0xe6, 0xf9, 0x76, 0x04, 0x56, 0x69, 0x5d, 0xc6, 0x79, 0x6e, 0x79, 0x03, 0x4b, 0x86, 0x7a, 0xa7, 0xce, 0xe5, 0x46, 0x19, 0xca, 0x87, 0x97, 0x57, 0xc8, 0x52, 0xce, 0x3c, 0xb6, 0xeb, 0x8c, 0x23, 0xf0, 0x77, 0x7b, 0x78, 0x26, 0x77, 0x47, 0xc8, 0xf7, 0x47, 0x35, 0xf2, 0xa3, 0x4a, 0xe4, 0x47, 0x2e, 0xd5, 0x0a, 0xf8, 0x08, 0x9d, 0x69, 0xed, 0x11, 0xb6, 0x33, 0x95, 0x14, 0x05, 0x22, 0x1f, 0x54, 0xd6, 0xda, 0x8e, 0x6d, 0xc7, 0x91, 0x29, 0x1f, 0xdd, 0x8e, 0xad, 0xd3, 0x86, 0x76, 0x5d, 0x0e, 0x23, 0xbd, 0x6b, 0x9d, 0x3a, 0x2a, 0xf1, 0xed, 0x12, 0xd5, 0xe3, 0x4a, 0x21, 0x72, 0x38, 0x05, 0x69, 0x31, 0xeb, 0x74, 0xae, 0x96, 0xed, 0x50, 0x6b, 0x6b, 0xd3, 0x16, 0x0a, 0x2b, 0xed, 0xa5, 0x2c, 0x61, 0xd1, 0x97, 0x7c, 0xae, 0xdf, 0x21, 0x65, 0xe0, 0x3c, 0xb2, 0xeb, 0x32, 0xf1, 0x50, 0x6b, 0xf3, 0x80, 0xa0, 0x0c, 0x1a, 0x65, 0xaf, 0x9c, 0x81, 0xfc, 0x2a, 0x08, 0xbc, 0xa2, 0x78, 0x7c, 0x17, 0xaa, 0xc1, 0xeb, 0x5b, 0x2b, 0x75, 0x7f, 0xbf, 0x5e, 0x1b, 0xee, 0x42, 0x8d, 0xd1, 0xd8, 0x09, 0xe1, 0x05, 0x65, 0xba, 0x3f, 0x3d, 0x4b, 0x79, 0x94, 0xf9, 0xf7, 0x26, 0x5f, 0xea, 0x8f, 0xfa, 0x59, 0xae, 0x9a, 0x79, 0xaf, 0x61, 0xf0, 0xfe, 0x72, 0xed, 0x89, 0x9f, 0x29, 0x86, 0x83, 0xaf, 0x95, 0x7a, 0xc3, 0xb6, 0x7b, 0x61, 0xd2, 0x57, 0x0e, 0x6c, 0x88, 0x6a, 0x7b, 0xad, 0x61, 0xfd, 0x24, 0xa8, 0x37, 0xfc, 0xc6, 0x7a, 0xaf, 0xf4, 0x52, 0x3c, 0x62, 0x6c, 0xea, 0xa7, 0x1d, 0xae, 0xb0, 0x7c, 0xb2, 0x7f, 0x66, 0xde, 0x13, 0xde, 0x97, 0x90, 0xab, 0xad, 0x3a, 0xdc, 0xfc, 0x60, 0x53, 0x2f, 0xeb, 0xcb, 0xf9, 0x3b, 0x7a, 0xdb, 0x9f, 0x3c, 0x8c, 0xf2, 0x97, 0x6b, 0x25, 0x58, 0xdf, 0xd8, 0xd7, 0xe4, 0x7b, 0x01, 0xb9, 0xe3, 0xaa, 0x0d, 0xc2, 0xae, 0xa0, 0xe0, 0xd6, 0x0a, 0x79, 0xeb, 0xa1, 0xdd, 0x6e, 0x95, 0x0a, 0x7e, 0x8b, 0x72, 0x75, 0x85, 0x03, 0xcc, 0x08, 0xbf, 0xe7, 0x1d, 0x0f, 0xf6, 0xae, 0xf5, 0x5f, 0x4f, 0x83, 0xa5, 0x4a, 0x0a, 0xbc, 0x62, 0xf3, 0xce, 0xfa, 0x10, 0xe5, 0x06, 0x24, 0x0c, 0xc8, 0x7f, 0xf8, 0xb5, 0x4e, 0xf0, 0x6a, 0xbb, 0xa4, 0x70, 0xa1, 0x03, 0x29, 0x63, 0x6d, 0x72, 0xd7, 0xf3, 0x8f, 0x42, 0x44, 0x5f, 0x2a, 0xff, 0xe9, 0x17, 0xfd, 0xba, 0xa6, 0xde, 0xe6, 0x07, 0x5e, 0xe8, 0x6d, 0x7f, 0xc7, 0xeb, 0xab, 0x25, 0xdf, 0x1c, 0xe4, 0xf5, 0x17, 0xd3, 0xd8, 0xdc, 0xb5, 0x08, 0x65, 0xfe, 0xde, 0x0a, 0xd3, 0xe6, 0xfa, 0x9d, 0xcb, 0xc0, 0xba, 0xea, 0x62, 0x17, 0x84, 0x97, 0x94, 0x5b, 0xfe, 0xfd, 0x39, 0xaa, 0xad, 0x74, 0x3e, 0x96, 0xf1, 0xc3, 0x68, 0xe3, 0x2e, 0x6a, 0x7b, 0x70, 0xad, 0x61, 0xcf, 0x7d, 0x6b, 0xbf, 0x5f, 0xaf, 0x3b, 0xf9, 0x0f, 0x36, 0xdd, 0x1f, 0x7e, 0x65, 0x73, 0x4f, 0x34, 0xd4, 0xeb, 0x6e, 0xaa, 0x03, 0x67, 0xd8, 0x8e, 0xe3, 0xe8, 0x86, 0xd7, 0x7b, 0xa3, 0xda, 0x81, 0xeb, 0xc2, 0xe4, 0xcd, 0xd5, 0xf9, 0xab, 0xeb, 0xe8, 0xcb, 0x46, 0xc4, 0xc2, 0x0f, 0x3b, 0xbf, 0x5f, 0x2f, 0x21, 0x16, 0x1e, 0x68, 0x7a, 0xa0, 0xc6, 0xf4, 0x58, 0xfd, 0x2e, 0xaa, 0xe1, 0x10, 0xe2, 0xa1, 0x8f, 0xbf, 0x2c, 0xc8, 0xdf, 0xd9, 0xd7, 0xbe, 0x05, 0x67, 0x7e, 0x23, 0xf9, 0xa6, 0xfa, 0xdd, 0x6b, 0x88, 0x87, 0x65, 0x90, 0xbf, 0x0a, 0x92, 0xcb, 0x52, 0xfc, 0x3b, 0x33, 0x73, 0x95, 0x22, 0x0e, 0xc8, 0x97, 0x33, 0xf5, 0x6d, 0xc9, 0xdc, 0xdf, 0x9d, 0x15, 0xbd, 0x7a, 0xa9, 0x16, 0x47, 0x66, 0xd1, 0xbc, 0x78, 0xf3, 0x00, 0xd9, 0xc6, 0x6a, 0x21, 0x4e, 0x55, 0xeb, 0x9c, 0x2b, 0x68, 0xce, 0xd6, 0x26, 0xe8, 0x0d, 0xcb, 0x39, 0x48, 0xfd, 0x78, 0x75, 0xcf, 0xdb, 0x3c, 0x9e, 0x0f, 0xb3, 0x7a, 0x1e, 0x80, 0x74, 0x8a, 0xa2, 0x1e, 0x89, 0x2c, 0x4f, 0xde, 0x2b, 0x63, 0x2f, 0x02, 0x9c, 0x0a, 0xaf, 0x18, 0x4f, 0x0f, 0x36, 0xa2, 0x87, 0x07, 0xa2, 0xfe, 0x9d, 0xe3, 0xe8, 0xe1, 0x8d, 0x7d, 0x63, 0xe8, 0xe1, 0x3a, 0x95, 0x1e, 0xae, 0x53, 0xe9, 0xe1, 0x81, 0xcf, 0xa3, 0x87, 0x70, 0x9b, 0x5a, 0xd3, 0x5d, 0x8a, 0xee, 0x4f, 0xdb, 0xc8, 0xfa, 0x85, 0xa8, 0xad, 0x27, 0xb9, 0x7b, 0x4c, 0x6d, 0x65, 0xda, 0x13, 0x3f, 0x55, 0xf4, 0x54, 0x9b, 0xb7, 0x3e, 0x6c, 0xc7, 0x19, 0xbd, 0xec, 0xc0, 0xdf, 0x7f, 0x56, 0x7d, 0xec, 0x9b, 0xbd, 0x60, 0xd5, 0x91, 0x31, 0xb5, 0x3d, 0x4e, 0xd4, 0x57, 0x81, 0xd4, 0x77, 0xf0, 0x35, 0x95, 0xfa, 0x20, 0xa9, 0x4d, 0x61, 0x1d, 0xb9, 0x2b, 0x71, 0x73, 0xe1, 0x3f, 0xa0, 0x03, 0x1c, 0x29, 0x0e, 0xd4, 0x03, 0xc4, 0x83, 0xba, 0x6d, 0x47, 0x9f, 0x86, 0xc2, 0x12, 0xf9, 0xc8, 0xd3, 0xd8, 0x07, 0x9a, 0xd0, 0xae, 0x8b, 0x2f, 0x32, 0x37, 0x20, 0x8d, 0xd0, 0xe8, 0x22, 0x8d, 0x90, 0x7e, 0x73, 0xf8, 0xd7, 0x88, 0x5c, 0x41, 0xc3, 0x2b, 0x79, 0x82, 0x27, 0xd8, 0x55, 0x9e, 0xe0, 0x60, 0xef, 0x00, 0x73, 0x40, 0x11, 0x3c, 0xc1, 0xdc, 0xc3, 0xe7, 0xdc, 0x7b, 0x3e, 0x9f, 0x27, 0x5c, 0x6c, 0xc8, 0xf0, 0x84, 0x3f, 0xba, 0xbf, 0x08, 0x4f, 0x10, 0x7a, 0x1c, 0x4a, 0x0d, 0x66, 0xbe, 0xb2, 0x66, 0xb7, 0xcf, 0x8a, 0x09, 0x7d, 0x17, 0x71, 0x40, 0x73, 0x64, 0x71, 0x70, 0x1b, 0x3c, 0x45, 0x5f, 0x96, 0x04, 0x97, 0xc1, 0x3b, 0xa8, 0x19, 0x3c, 0x59, 0x81, 0x63, 0xc7, 0xeb, 0x43, 0x5a, 0xd9, 0x88, 0xfa, 0xc2, 0x31, 0xd4, 0x30, 0x35, 0x8a, 0x3c, 0xd4, 0x37, 0xd4, 0x37, 0xb1, 0xc2, 0x08, 0x45, 0x15, 0x46, 0x09, 0x39, 0xba, 0xdc, 0x79, 0xd3, 0x9e, 0xbe, 0x88, 0x3c, 0x7f, 0x36, 0x79, 0xfc, 0x86, 0x64, 0x3e, 0x9c, 0x36, 0xc9, 0x1e, 0x48, 0xd6, 0x6a, 0xe5, 0x7a, 0xb8, 0xd0, 0x57, 0xdf, 0x33, 0xa1, 0x5e, 0xbf, 0xff, 0xbe, 0xf7, 0x1e, 0xa2, 0xa7, 0xd7, 0x37, 0xbc, 0xfd, 0x43, 0xd9, 0x0d, 0x13, 0xe2, 0x75, 0xef, 0x35, 0xc8, 0x7e, 0xb8, 0x10, 0xf7, 0x77, 0x43, 0xb5, 0xe9, 0x70, 0xdf, 0xe1, 0xf5, 0x87, 0xfb, 0xb0, 0xfc, 0xa7, 0x6e, 0xeb, 0x75, 0x00, 0xde, 0x7f, 0x7a, 0x5b, 0xdc, 0x01, 0x41, 0x07, 0x9c, 0x88, 0xd2, 0xc9, 0x85, 0x97, 0xd4, 0xd0, 0x3d, 0x14, 0xca, 0x63, 0xe6, 0x68, 0x2b, 0x24, 0x3b, 0xc3, 0x28, 0xf0, 0x9a, 0x1d, 0x20, 0xc3, 0x5b, 0x51, 0xbd, 0xd7, 0x83, 0x6f, 0x45, 0xf4, 0x0b, 0x2f, 0x98, 0x3d, 0x30, 0x61, 0x89, 0xd6, 0x0b, 0x2c, 0x61, 0x20, 0xcc, 0x85, 0x92, 0xac, 0x01, 0xcd, 0x11, 0x10, 0x3a, 0xbe, 0x5d, 0x73, 0x78, 0xdd, 0x91, 0xbe, 0x4a, 0xe9, 0x54, 0x50, 0x96, 0x41, 0x33, 0x24, 0x77, 0x41, 0x01, 0x50, 0x8b, 0x0e, 0xc7, 0xad, 0xb7, 0x3a, 0xe0, 0xb4, 0xf1, 0xed, 0x40, 0xd1, 0xad, 0x0e, 0xf9, 0xb4, 0x19, 0xa1, 0x4b, 0xc6, 0xfd, 0x05, 0xb7, 0x3a, 0xa4, 0xd3, 0x39, 0xe2, 0x9b, 0xeb, 0xf7, 0x36, 0xc6, 0xbd, 0x76, 0xa0, 0x67, 0xf3, 0xfe, 0x53, 0x7d, 0xd6, 0x5b, 0xab, 0xd5, 0xd4, 0xd5, 0xe9, 0xd4, 0x85, 0xb7, 0x56, 0x4b, 0xa7, 0x73, 0x45, 0x3d, 0xef, 0xfd, 0x20, 0xee, 0x93, 0xdd, 0xe6, 0xfd, 0x71, 0x2f, 0xe2, 0x4c, 0xb2, 0x79, 0xdf, 0xd8, 0xe3, 0xfb, 0xf0, 0x51, 0x99, 0xdb, 0x18, 0x7f, 0x54, 0xb4, 0xcd, 0xc8, 0x6d, 0xc3, 0xb7, 0x26, 0xcf, 0x4e, 0xd1, 0xa6, 0xfa, 0x70, 0x33, 0x41, 0x5c, 0x29, 0xed, 0x1d, 0x01, 0x4d, 0x0a, 0x9e, 0x42, 0x82, 0x27, 0x57, 0xf6, 0x61, 0x0d, 0xbe, 0xf1, 0xf0, 0x7c, 0xe1, 0xb2, 0xb7, 0x21, 0x75, 0xf4, 0x08, 0x0a, 0xb0, 0x2d, 0x93, 0xf4, 0xec, 0xb5, 0xea, 0x37, 0x74, 0x1e, 0xed, 0x56, 0x37, 0x9c, 0xf1, 0x2f, 0x83, 0x33, 0xd8, 0xdf, 0x27, 0xa3, 0x41, 0xf2, 0x39, 0x95, 0x75, 0x1a, 0xcb, 0x3a, 0x63, 0x04, 0x25, 0xbb, 0xb7, 0x3e, 0x3c, 0x7e, 0x2b, 0xad, 0x47, 0x9f, 0x09, 0xdd, 0xa3, 0x9e, 0xca, 0xb2, 0xcc, 0xa0, 0x5d, 0x21, 0x0c, 0xf7, 0x2e, 0xa3, 0x50, 0x51, 0x5a, 0x54, 0xeb, 0x25, 0xa9, 0x4e, 0x99, 0x31, 0x48, 0x31, 0x2c, 0x75, 0x81, 0xcb, 0x09, 0x85, 0x15, 0x4e, 0x98, 0x58, 0xe9, 0x84, 0x49, 0x41, 0x4f, 0x34, 0xa7, 0x0a, 0xba, 0x27, 0x9c, 0x5e, 0x39, 0xe4, 0x3b, 0xe9, 0xa6, 0x35, 0x05, 0xac, 0xf3, 0x0c, 0xea, 0xbb, 0xde, 0xa8, 0xd9, 0xec, 0x96, 0x6e, 0xef, 0x28, 0x73, 0xd5, 0x4a, 0xb7, 0x87, 0x4b, 0xf0, 0x19, 0x3a, 0x14, 0x7c, 0x86, 0xf0, 0x44, 0x35, 0x4e, 0xd7, 0x61, 0xc5, 0x77, 0x5d, 0x38, 0xc7, 0xec, 0x86, 0x7d, 0x1d, 0x5a, 0x57, 0x2d, 0xec, 0xc3, 0xd2, 0xe4, 0x21, 0x94, 0xc6, 0xe8, 0x14, 0x9d, 0x58, 0x81, 0x63, 0x5f, 0x86, 0x6e, 0xf2, 0x37, 0x85, 0xbc, 0x33, 0x70, 0x47, 0x07, 0x84, 0x80, 0xf4, 0x3d, 0x33, 0x8e, 0xe2, 0x52, 0xd8, 0xba, 0xc6, 0x7a, 0xee, 0x69, 0xc5, 0x87, 0xb2, 0x52, 0xe1, 0xa4, 0x52, 0x38, 0x81, 0xdc, 0xd8, 0x50, 0x39, 0x0d, 0x0a, 0x02, 0x7b, 0x4e, 0x3e, 0x75, 0x78, 0x05, 0x44, 0xcc, 0x5e, 0x30, 0xb5, 0xe7, 0xd4, 0xc8, 0xfa, 0xba, 0xe4, 0xa5, 0xae, 0x1c, 0xf2, 0x6a, 0xea, 0xd0, 0x37, 0xad, 0xa7, 0x79, 0xa3, 0xc4, 0xf2, 0xde, 0xd3, 0x65, 0xbe, 0x2a, 0xe3, 0x3c, 0xdf, 0xab, 0x6e, 0xbf, 0xfb, 0x0e, 0xd4, 0xf8, 0xb1, 0x8c, 0x49, 0x81, 0xc1, 0x93, 0x4f, 0x0e, 0x79, 0xe9, 0x64, 0xa2, 0xf7, 0x67, 0x24, 0x17, 0x90, 0x94, 0x95, 0xe4, 0xb3, 0x9f, 0x5e, 0x0f, 0xf2, 0xf9, 0xb7, 0xab, 0xe5, 0x47, 0x3d, 0x41, 0x43, 0x54, 0x4f, 0x1c, 0x27, 0x2c, 0x3f, 0xfc, 0xda, 0xa1, 0x33, 0xf0, 0xf8, 0x1d, 0x2b, 0xe0, 0x51, 0xa8, 0xae, 0x0d, 0x39, 0x43, 0x50, 0x6e, 0xb3, 0xbc, 0xfb, 0x80, 0xe2, 0xa9, 0xed, 0x80, 0xaa, 0x0a, 0x4b, 0xe0, 0x65, 0xcf, 0x85, 0x22, 0xd4, 0xf1, 0xde, 0xa1, 0x95, 0xc1, 0x0a, 0x9b, 0x13, 0xca, 0xfd, 0xbd, 0xaf, 0x3c, 0x07, 0x15, 0x15, 0x3a, 0x94, 0xee, 0xac, 0x41, 0xc3, 0x82, 0x7f, 0x0b, 0xdc, 0x1f, 0xf8, 0x37, 0xff, 0xfd, 0x1f, 0xfc, 0xfc, 0x61, 0x0c, 0x45, 0x7e, 0x5b, 0x0a, 0x6f, 0x1d, 0xdf, 0x50, 0x56, 0xff, 0xc7, 0x57, 0xcb, 0x0c, 0xfa, 0x0d, 0x30, 0xfa, 0xa3, 0xe3, 0xc5, 0x55, 0xcb, 0x20, 0xe8, 0x8b, 0x18, 0xb1, 0xcd, 0xd5, 0x50, 0x15, 0x2e, 0x17, 0x32, 0x0b, 0x41, 0x6f, 0xb3, 0x9c, 0xfb, 0x79, 0x99, 0xe4, 0xc2, 0xf0, 0x4d, 0x2f, 0xdf, 0x11, 0x80, 0xaa, 0xc0, 0xab, 0x1f, 0x3c, 0x1b, 0xdc, 0xd0, 0x26, 0x2f, 0xd8, 0x70, 0x6a, 0x83, 0x7f, 0xc3, 0xa1, 0x57, 0xff, 0x48, 0xf5, 0xc8, 0x6f, 0xcf, 0xbe, 0xc3, 0x83, 0x39, 0x3d, 0xd0, 0xfb, 0x55, 0x0f, 0xc8, 0xb5, 0xf0, 0x76, 0x08, 0xea, 0xe1, 0xe5, 0xaf, 0xd6, 0x83, 0xbe, 0x56, 0x3e, 0x51, 0x8f, 0xa3, 0xd8, 0x00, 0xf5, 0x0a, 0x9c, 0x70, 0x13, 0x37, 0x7e, 0xbb, 0xff, 0x41, 0x37, 0xc6, 0xe4, 0x28, 0xab, 0xa0, 0x60, 0x7e, 0xff, 0xdc, 0x33, 0x70, 0x2e, 0x06, 0x77, 0xcc, 0xc6, 0x16, 0x39, 0xa1, 0x22, 0x5c, 0x8d, 0xb8, 0x9e, 0x74, 0x7c, 0x43, 0xf9, 0x34, 0x30, 0xbe, 0xb9, 0xc1, 0x36, 0xab, 0xec, 0x56, 0x84, 0x0b, 0xb1, 0x1d, 0xb5, 0xb0, 0x6f, 0x28, 0xe3, 0x4c, 0x9c, 0x8b, 0x02, 0xff, 0x76, 0xfc, 0xfe, 0xe3, 0xbd, 0xe5, 0x7a, 0xef, 0xac, 0xc0, 0x2c, 0xd7, 0xfd, 0xb7, 0xd6, 0x83, 0xb6, 0x29, 0xde, 0xd8, 0x8f, 0xf9, 0x90, 0x4f, 0xef, 0x8e, 0xb7, 0xbf, 0x44, 0xd6, 0x84, 0x03, 0xaf, 0x20, 0xdf, 0xc6, 0x56, 0x76, 0xca, 0x9b, 0xe3, 0x7f, 0x7a, 0xba, 0x42, 0x73, 0xca, 0x53, 0xab, 0x39, 0x5b, 0x1f, 0x78, 0xf5, 0x5e, 0xcd, 0xab, 0xf7, 0x2b, 0xfa, 0x49, 0xb5, 0x90, 0xf3, 0xc1, 0x36, 0xfc, 0xb5, 0x7c, 0xf0, 0x6c, 0xbc, 0xbe, 0x56, 0x42, 0xf8, 0x26, 0xc4, 0xeb, 0xcb, 0x34, 0x6f, 0x3f, 0x14, 0xaf, 0xef, 0x31, 0x9f, 0x7b, 0x3a, 0xee, 0x7b, 0x6f, 0x36, 0xf2, 0x9f, 0x0b, 0x71, 0xcf, 0x57, 0x51, 0xf7, 0xfa, 0x2a, 0xe2, 0x18, 0x2c, 0x5f, 0x5d, 0x01, 0x8f, 0x41, 0xfe, 0x57, 0x67, 0xc3, 0x44, 0xbc, 0x26, 0x1d, 0xae, 0x3b, 0xbc, 0x12, 0xfb, 0x50, 0xf4, 0x9e, 0x57, 0xf4, 0xde, 0x68, 0x13, 0xf5, 0x1e, 0xed, 0xf1, 0x54, 0xc0, 0xdb, 0xb3, 0x11, 0x17, 0xba, 0x5b, 0x3d, 0x60, 0x44, 0x7a, 0x4b, 0x76, 0xe8, 0xcd, 0x38, 0xba, 0x3b, 0x2c, 0x38, 0x06, 0xde, 0x02, 0x2d, 0xfe, 0x26, 0x40, 0x1f, 0x36, 0xdf, 0xda, 0x93, 0xe4, 0xb7, 0x24, 0xbe, 0x29, 0x77, 0x72, 0x0a, 0xbd, 0x6b, 0x77, 0xf2, 0xad, 0xb0, 0xd6, 0xb5, 0x5b, 0x4a, 0xbc, 0xdd, 0x00, 0x7e, 0x2c, 0xc1, 0x0f, 0xec, 0xc7, 0x06, 0x47, 0x01, 0xf9, 0xaf, 0xd3, 0xdd, 0xea, 0x4e, 0x8e, 0xa8, 0x6b, 0x12, 0x56, 0x3a, 0xe1, 0x97, 0xef, 0x84, 0x09, 0xae, 0x5a, 0xcd, 0xe9, 0xa0, 0x13, 0x72, 0xa3, 0x36, 0x6c, 0xb3, 0xd4, 0x29, 0xbd, 0xfd, 0x73, 0xbb, 0xa4, 0xc7, 0xf1, 0x2d, 0x5d, 0x52, 0x3c, 0xc1, 0xde, 0x36, 0xad, 0xe7, 0x34, 0xdc, 0xa4, 0x18, 0xcf, 0xc4, 0x87, 0xbc, 0x43, 0xee, 0x21, 0x37, 0x9d, 0xbb, 0x43, 0x4e, 0x4d, 0xf2, 0x72, 0x99, 0x4d, 0x95, 0x99, 0xab, 0x9c, 0x50, 0xa3, 0xcc, 0x47, 0x49, 0xfb, 0x2d, 0xf2, 0x6a, 0x68, 0x96, 0x40, 0xc2, 0x31, 0x83, 0xba, 0x7d, 0x84, 0xb5, 0x2c, 0xaf, 0xbb, 0xa2, 0x56, 0x96, 0x82, 0xd3, 0xb0, 0x17, 0xe4, 0x66, 0x4f, 0x9f, 0xfb, 0x76, 0x0f, 0x6c, 0x76, 0x8d, 0x48, 0x09, 0xd7, 0x48, 0x92, 0xae, 0xa4, 0xb8, 0x4b, 0xe0, 0x7a, 0x1f, 0x36, 0x4f, 0x0d, 0x40, 0x41, 0x65, 0x0f, 0x9c, 0x44, 0x3e, 0x1a, 0x88, 0x81, 0x4b, 0x9a, 0x83, 0x9a, 0x20, 0xf2, 0xc7, 0xe9, 0x70, 0xae, 0xd4, 0xfb, 0x87, 0x3d, 0x65, 0xcb, 0xc1, 0xf8, 0xc7, 0x5f, 0xdb, 0xab, 0x8e, 0x02, 0x9d, 0x5e, 0xac, 0x59, 0x0e, 0xd6, 0xc3, 0x3f, 0xd4, 0xbb, 0xa1, 0x9a, 0xe0, 0x72, 0xc5, 0x15, 0x99, 0x7c, 0x97, 0x22, 0x37, 0x91, 0x6f, 0x0d, 0x22, 0x5e, 0xbc, 0xa0, 0x6f, 0xec, 0x6f, 0xf2, 0x34, 0x07, 0xad, 0x53, 0x21, 0xdf, 0xeb, 0x2d, 0x80, 0xe7, 0x3d, 0x4b, 0x9e, 0x21, 0x7d, 0x81, 0x74, 0x9b, 0xdb, 0xdd, 0x70, 0x14, 0x31, 0x7b, 0xfd, 0x12, 0xf2, 0x7b, 0x55, 0x80, 0xcf, 0xe4, 0x35, 0xe5, 0xad, 0x88, 0x39, 0xb8, 0x12, 0xde, 0x89, 0x50, 0x98, 0x82, 0x61, 0x2b, 0xe9, 0x77, 0xa9, 0x19, 0x21, 0xf7, 0xb5, 0xa9, 0x61, 0xc6, 0x69, 0xa0, 0x01, 0x6f, 0xb4, 0xd0, 0x3c, 0x15, 0xf4, 0x90, 0xbf, 0xc4, 0x28, 0x72, 0xb3, 0xf7, 0x2c, 0x2c, 0x11, 0xa1, 0x37, 0xdb, 0x03, 0x95, 0x23, 0xf0, 0x90, 0xf7, 0x2e, 0xfc, 0xdd, 0x44, 0xbf, 0xd2, 0x29, 0x7e, 0xde, 0xcc, 0xbf, 0x5b, 0x38, 0x44, 0xe6, 0x5f, 0x23, 0xff, 0xe6, 0xf0, 0xaf, 0x96, 0xea, 0x8d, 0xe6, 0xb8, 0x6a, 0x65, 0x3b, 0xd7, 0x26, 0xc7, 0xec, 0x95, 0x83, 0xde, 0x67, 0xa0, 0x88, 0xc3, 0xf3, 0x31, 0x85, 0x19, 0x73, 0x5f, 0x87, 0xf7, 0x91, 0xa9, 0x38, 0xe3, 0x7a, 0xef, 0x42, 0x0e, 0xb0, 0xb9, 0x00, 0xdb, 0x65, 0x96, 0xc1, 0xb0, 0xd4, 0x58, 0x49, 0xcb, 0x62, 0x28, 0x0d, 0x77, 0x9a, 0xff, 0xb4, 0x62, 0xbd, 0x5b, 0x85, 0x51, 0x0b, 0x5e, 0x23, 0x60, 0x6a, 0xad, 0x68, 0x13, 0x72, 0x46, 0x40, 0x88, 0xdc, 0xe1, 0xd2, 0x22, 0x90, 0xb5, 0x70, 0x53, 0x84, 0x4a, 0xd5, 0x57, 0xc0, 0x99, 0xd9, 0x6b, 0xf3, 0xde, 0x5f, 0xde, 0xb7, 0x12, 0xb6, 0x54, 0xbe, 0x8c, 0xd8, 0x21, 0x8f, 0xa8, 0x83, 0x87, 0x3c, 0x95, 0x2f, 0x7b, 0xef, 0x6a, 0x72, 0xef, 0x58, 0x89, 0x7c, 0x7b, 0x08, 0xcb, 0x30, 0x62, 0x3e, 0x97, 0x9a, 0xaf, 0x88, 0xf2, 0xd5, 0x4c, 0x83, 0x2d, 0x50, 0x47, 0x0e, 0x7f, 0xce, 0xcc, 0xee, 0xc9, 0x3b, 0xb7, 0xbc, 0xaf, 0xee, 0x53, 0x72, 0xbf, 0x4e, 0xa9, 0x2b, 0xdf, 0x87, 0x2d, 0xe1, 0xa2, 0x0a, 0x50, 0x63, 0x7b, 0xbd, 0x2b, 0x40, 0x6e, 0xde, 0xa8, 0xa6, 0x38, 0xad, 0xe4, 0x6c, 0xda, 0x72, 0x92, 0x6c, 0x36, 0xc7, 0x54, 0x7f, 0x7f, 0xf4, 0x35, 0x2a, 0xdc, 0xe8, 0x86, 0xb7, 0x2b, 0x91, 0x3a, 0xf0, 0x4a, 0x20, 0x04, 0x56, 0x25, 0xc8, 0x34, 0xb2, 0x27, 0x43, 0x31, 0x63, 0x29, 0x87, 0xe9, 0x4b, 0xe1, 0x53, 0xad, 0xd3, 0xe0, 0x89, 0xb0, 0x16, 0x7f, 0x77, 0xb9, 0x46, 0x60, 0xbd, 0xf0, 0x52, 0xed, 0x7a, 0x19, 0x9f, 0x37, 0xb8, 0x06, 0x71, 0x7c, 0x24, 0x79, 0xc4, 0x90, 0x87, 0x33, 0x92, 0x7e, 0xd6, 0xa2, 0xc4, 0x34, 0x15, 0xb4, 0xa1, 0x7b, 0x16, 0x0c, 0x5a, 0x41, 0x7c, 0xe9, 0xab, 0x2c, 0xc7, 0xd9, 0x09, 0x67, 0x75, 0xe9, 0xc3, 0xa8, 0x71, 0xc6, 0x48, 0xdc, 0x0d, 0x6f, 0x5d, 0x78, 0x3c, 0x06, 0x62, 0xc5, 0x9c, 0xbe, 0x03, 0x56, 0x2a, 0xec, 0x98, 0x82, 0xbf, 0xf8, 0x95, 0xc5, 0xaf, 0x11, 0xc0, 0x12, 0x01, 0xa9, 0xb1, 0x64, 0x05, 0xb0, 0x47, 0xd1, 0x08, 0xad, 0x2d, 0x79, 0x23, 0x66, 0x9c, 0xa3, 0x28, 0xf7, 0x63, 0x28, 0x19, 0x54, 0x5a, 0x4b, 0xa5, 0x0f, 0x31, 0x1d, 0x44, 0xfd, 0x32, 0x24, 0x2f, 0xdd, 0xe0, 0xe6, 0x37, 0x29, 0xaa, 0xc5, 0x3c, 0x5e, 0xa4, 0x3e, 0x37, 0x18, 0x23, 0x05, 0x08, 0xb3, 0x45, 0xc1, 0x31, 0x7e, 0x01, 0x6c, 0x73, 0x10, 0x32, 0x3d, 0xe2, 0xe3, 0x9e, 0x92, 0x79, 0xe4, 0x03, 0x0a, 0x61, 0xd1, 0x4f, 0x99, 0x03, 0xde, 0xb0, 0x11, 0x7f, 0x6b, 0xd8, 0x2a, 0x47, 0x29, 0xad, 0xcb, 0x42, 0x29, 0xc1, 0x89, 0x3d, 0xfb, 0x26, 0xed, 0x4c, 0x46, 0x73, 0xe4, 0xd2, 0xe4, 0x28, 0xbf, 0x1f, 0x60, 0x38, 0x26, 0x79, 0xb1, 0xd6, 0x14, 0x14, 0x5e, 0x84, 0x09, 0xaf, 0x9a, 0xb2, 0x60, 0xe8, 0xd9, 0x44, 0x05, 0xa6, 0x79, 0x52, 0x2d, 0x79, 0x21, 0x87, 0xc4, 0xf3, 0x31, 0xad, 0x2c, 0x25, 0xaf, 0xdc, 0xe0, 0x91, 0x3e, 0xf4, 0xbf, 0xbc, 0xb2, 0x1e, 0x35, 0x25, 0x73, 0x45, 0x80, 0x57, 0xf4, 0x1f, 0x68, 0xab, 0xde, 0x14, 0xd0, 0xbb, 0x27, 0xd0, 0x37, 0x72, 0x5a, 0x8a, 0xcf, 0xff, 0x2a, 0xfc, 0xcb, 0x5b, 0x58, 0x35, 0x7c, 0xff, 0xfa, 0x97, 0xe9, 0xe9, 0x7a, 0x9a, 0x8d, 0xff, 0xe5, 0x18, 0xd2, 0xc3, 0x89, 0xd9, 0x14, 0xf2, 0x7b, 0xa0, 0xef, 0x5c, 0x8f, 0x42, 0xb8, 0x26, 0xd5, 0x1e, 0x3a, 0x67, 0xf5, 0x6f, 0xcb, 0x52, 0xad, 0xaa, 0x60, 0xbc, 0x89, 0x5f, 0xa3, 0x84, 0xd8, 0x4b, 0x63, 0x3a, 0x88, 0xda, 0x13, 0x30, 0x5c, 0x6c, 0x6d, 0x50, 0x4b, 0x78, 0x2f, 0x41, 0xda, 0x4d, 0xce, 0x57, 0xb1, 0x5f, 0x6d, 0x9f, 0x5d, 0x42, 0xf8, 0x9f, 0x0a, 0x48, 0x63, 0x33, 0xdc, 0x70, 0x97, 0xb2, 0x1c, 0x36, 0xb2, 0xa6, 0x58, 0xe0, 0xfa, 0x39, 0x90, 0x96, 0x33, 0x15, 0x7e, 0x1c, 0x93, 0xff, 0xb4, 0xed, 0xd6, 0x9f, 0xc3, 0x7a, 0x23, 0x9d, 0xb7, 0x5f, 0x88, 0x23, 0x5d, 0x8a, 0x94, 0xf3, 0x3c, 0x20, 0xbe, 0xd8, 0xd6, 0xb6, 0x29, 0x88, 0xaf, 0x27, 0x6e, 0x46, 0x39, 0xe1, 0xc2, 0x7a, 0x21, 0x49, 0x5c, 0xe8, 0x9f, 0x31, 0xd2, 0x4b, 0xf7, 0xad, 0xb7, 0xf5, 0xe0, 0xfb, 0x42, 0xd4, 0x7a, 0x16, 0x45, 0x5d, 0xde, 0x9f, 0x05, 0x56, 0xc0, 0x13, 0xb4, 0x4a, 0x33, 0x7b, 0xf8, 0x72, 0x31, 0xef, 0x79, 0x58, 0xb9, 0x9c, 0x7c, 0xfe, 0x26, 0x60, 0x05, 0xec, 0xa2, 0x38, 0x11, 0x8e, 0xb8, 0x5d, 0x64, 0x9d, 0xa6, 0xf6, 0x2b, 0x75, 0xb5, 0xf1, 0x46, 0x37, 0xb7, 0x82, 0xf6, 0x37, 0x2e, 0x50, 0x3b, 0x54, 0x99, 0x65, 0x64, 0xc6, 0x88, 0x4c, 0x77, 0x50, 0xdf, 0x65, 0xf5, 0xae, 0x9d, 0x31, 0x62, 0xa6, 0xbb, 0x1e, 0xdf, 0xaf, 0xc3, 0x3b, 0xd2, 0x4f, 0x9c, 0x20, 0x2a, 0x9d, 0x31, 0xa2, 0xf5, 0xe3, 0x7b, 0x3c, 0x63, 0x1f, 0x19, 0x65, 0xee, 0x8d, 0xa8, 0x23, 0x74, 0x89, 0x76, 0x63, 0x5b, 0x36, 0xa8, 0x74, 0xde, 0x4b, 0xa1, 0xc8, 0x03, 0xb5, 0x08, 0xcd, 0x46, 0xfe, 0xda, 0xa0, 0x27, 0xb3, 0x82, 0x89, 0xe3, 0x2e, 0x8e, 0xd7, 0xbd, 0x62, 0x55, 0x3e, 0x65, 0x0f, 0xb2, 0x64, 0x85, 0xa4, 0xc7, 0xd4, 0xb5, 0x33, 0x70, 0x24, 0x51, 0xfb, 0x79, 0xb5, 0x79, 0xd7, 0xa5, 0x66, 0x2c, 0xb5, 0x7b, 0x0c, 0x86, 0x36, 0x62, 0x69, 0x77, 0x35, 0x0e, 0x54, 0xe0, 0xef, 0x4e, 0x77, 0xf4, 0x32, 0xc2, 0xf0, 0x44, 0x66, 0x1d, 0x14, 0x4b, 0x78, 0x02, 0x43, 0x76, 0x8d, 0x09, 0xd9, 0x45, 0x65, 0xdc, 0x82, 0x12, 0xcb, 0x2d, 0xb4, 0x6b, 0x81, 0xa5, 0x26, 0x12, 0xde, 0x52, 0x78, 0xb3, 0x79, 0x40, 0xd8, 0x91, 0x4c, 0xad, 0x8a, 0xd9, 0xc8, 0x33, 0x2b, 0xd9, 0x93, 0x91, 0x6e, 0x9d, 0x0d, 0x0f, 0xe1, 0xac, 0xb7, 0x09, 0x75, 0x80, 0x8d, 0xd1, 0x35, 0xa8, 0x0f, 0xc7, 0xa3, 0x31, 0xd4, 0xb3, 0x1d, 0xf0, 0x56, 0xa5, 0x03, 0x5a, 0x02, 0x7b, 0xde, 0xdd, 0x7e, 0x78, 0x76, 0x60, 0x4f, 0xb7, 0xfc, 0xe8, 0xba, 0xf7, 0xb6, 0xb3, 0x94, 0x99, 0x25, 0xcf, 0x55, 0xc1, 0x91, 0x65, 0x10, 0xa9, 0xf0, 0x75, 0x6b, 0xf6, 0xf5, 0xbd, 0xfb, 0xa0, 0x4b, 0x3e, 0xe5, 0x46, 0x39, 0x5f, 0x8a, 0xfb, 0xab, 0x35, 0x47, 0x3d, 0x6f, 0x37, 0xc4, 0xfd, 0x27, 0x7c, 0x95, 0xbe, 0xdf, 0xbe, 0x5e, 0x92, 0x73, 0x64, 0x63, 0xdc, 0x57, 0xf7, 0xa1, 0x15, 0x6c, 0x39, 0x27, 0x7a, 0x0f, 0xf5, 0x96, 0x98, 0xde, 0xfe, 0xc1, 0x3b, 0xde, 0xf5, 0x3e, 0x9c, 0x2f, 0xfa, 0xe2, 0x1e, 0xc4, 0xdc, 0x7a, 0xb1, 0xbe, 0x46, 0x56, 0x3a, 0x55, 0x89, 0x8e, 0xd6, 0xbd, 0xdc, 0x4e, 0xc4, 0x92, 0xda, 0x86, 0x7d, 0xd8, 0x86, 0xb7, 0x4a, 0x68, 0xb5, 0x51, 0x23, 0xce, 0xfe, 0x37, 0x0f, 0xf0, 0x39, 0x7f, 0x25, 0x62, 0xbc, 0x81, 0xbe, 0xc7, 0x7e, 0x4b, 0x9c, 0xbf, 0x8f, 0x23, 0x25, 0xd3, 0x59, 0x0a, 0x78, 0xcb, 0xff, 0xca, 0x37, 0x07, 0xfd, 0x70, 0x83, 0x1b, 0x4e, 0xa0, 0x04, 0xf6, 0x0e, 0xb8, 0x22, 0x5a, 0xaf, 0x36, 0x2c, 0x77, 0xcb, 0x37, 0xf8, 0x61, 0x2b, 0xca, 0x80, 0xe6, 0xdb, 0xbc, 0xb0, 0x2c, 0x08, 0x51, 0x2b, 0x8e, 0x38, 0x0b, 0x9d, 0x0f, 0x5f, 0x21, 0x37, 0xc5, 0x4f, 0xf6, 0xe3, 0x3c, 0x8e, 0xfc, 0xe0, 0x36, 0x37, 0xac, 0x20, 0x2f, 0x63, 0xa8, 0x6e, 0x90, 0xfe, 0xfe, 0x96, 0xa2, 0x1d, 0x5a, 0x3f, 0x14, 0x1f, 0xea, 0xa5, 0x55, 0x70, 0x94, 0xbb, 0x5c, 0x46, 0xe0, 0xa7, 0xd3, 0x37, 0xc5, 0x90, 0xe4, 0x6e, 0x27, 0x2f, 0xd4, 0x7f, 0xda, 0x46, 0xb5, 0x4b, 0xee, 0x0e, 0xa3, 0x9d, 0xac, 0x03, 0xb8, 0xff, 0xb4, 0x5d, 0x48, 0x63, 0x4a, 0xfd, 0xbd, 0x92, 0x62, 0x38, 0xb7, 0xad, 0x06, 0xfc, 0x75, 0x35, 0x75, 0xa8, 0xff, 0xb7, 0xd4, 0x9a, 0xd6, 0x4e, 0x38, 0xd3, 0x7e, 0x7c, 0xf6, 0xc9, 0xfa, 0x9a, 0xbc, 0xd7, 0xeb, 0xc9, 0x1b, 0x34, 0x8a, 0x4f, 0x72, 0x99, 0xb9, 0xd4, 0xf8, 0xfe, 0xb3, 0xb6, 0xfa, 0x79, 0xee, 0x4d, 0xf5, 0x3d, 0x50, 0x2b, 0x97, 0x79, 0x9a, 0x1e, 0x2a, 0xb5, 0x9c, 0xf9, 0xe9, 0x50, 0x7d, 0x6d, 0xde, 0x60, 0x7d, 0x0d, 0x4a, 0x47, 0xc7, 0x06, 0x0f, 0x0d, 0xde, 0x36, 0x1b, 0x1e, 0x8f, 0x69, 0x4f, 0x3e, 0x89, 0x42, 0xd7, 0x6c, 0x71, 0xd2, 0x9a, 0xf8, 0x36, 0xad, 0xae, 0x6c, 0x1a, 0x74, 0x19, 0x6d, 0xe6, 0xf7, 0x7e, 0xee, 0xf7, 0x0c, 0x7a, 0x10, 0x7a, 0xe4, 0x9d, 0x56, 0x27, 0xdc, 0xfe, 0xf6, 0x73, 0x28, 0x83, 0x94, 0x6f, 0x9a, 0x85, 0x21, 0x8f, 0xde, 0x36, 0x17, 0x1e, 0x43, 0x1c, 0x9e, 0x63, 0xec, 0x9c, 0x67, 0x9c, 0x7d, 0x70, 0x03, 0x9d, 0xeb, 0xbf, 0x80, 0xbf, 0x5a, 0xf8, 0x10, 0x7f, 0x75, 0xf0, 0x11, 0xfe, 0xea, 0xe1, 0xcf, 0xf8, 0x6b, 0x80, 0x8b, 0x46, 0x0d, 0xca, 0x27, 0x55, 0xc8, 0x27, 0x71, 0xd6, 0x5d, 0x5a, 0xce, 0x31, 0xe7, 0x38, 0xe6, 0x3c, 0x96, 0xf3, 0x01, 0x97, 0x73, 0x81, 0xcb, 0xf9, 0x90, 0xcb, 0xf9, 0x88, 0xcb, 0xf9, 0x33, 0x97, 0x73, 0x51, 0x68, 0xe0, 0x4e, 0x58, 0x0b, 0x13, 0x9d, 0x70, 0x1b, 0x6a, 0xb2, 0xbb, 0x3e, 0x36, 0x36, 0x0e, 0x88, 0xbd, 0xc9, 0xb1, 0x7b, 0x10, 0xbc, 0x6b, 0xf1, 0x04, 0x8f, 0xef, 0xf2, 0x54, 0x2e, 0x94, 0x02, 0xdf, 0xa5, 0x35, 0xe0, 0x4b, 0x87, 0x3f, 0x23, 0xcf, 0x2e, 0x95, 0x4f, 0xe4, 0x12, 0x9f, 0xb8, 0x74, 0x32, 0xb4, 0x05, 0xa9, 0xda, 0x3b, 0x19, 0x43, 0xa0, 0x22, 0xcd, 0x31, 0x8a, 0xd3, 0x1c, 0x23, 0x97, 0x38, 0x86, 0x9a, 0x62, 0x17, 0xef, 0xdf, 0x59, 0xb1, 0x67, 0xb7, 0x92, 0xc4, 0x14, 0xd5, 0x93, 0xde, 0x1a, 0x96, 0x3b, 0x35, 0x58, 0xef, 0x8f, 0xcd, 0xf4, 0x05, 0x82, 0x59, 0xac, 0x56, 0x62, 0x9f, 0x93, 0x6e, 0x43, 0xab, 0xe6, 0x2f, 0x08, 0x3b, 0x31, 0x71, 0x8f, 0x2b, 0xce, 0x25, 0xeb, 0x31, 0xec, 0x90, 0x2b, 0x8e, 0x33, 0xc3, 0xa2, 0x1b, 0x56, 0xa2, 0x80, 0xf3, 0xa6, 0x13, 0x69, 0x93, 0x28, 0xf5, 0xa3, 0x2d, 0x38, 0x62, 0x37, 0xb3, 0x36, 0x04, 0xb7, 0xa3, 0xb6, 0xee, 0xfd, 0x19, 0x4b, 0xb5, 0x27, 0x9c, 0x40, 0x94, 0x26, 0xa4, 0xce, 0x8f, 0x8e, 0xa3, 0x2c, 0x34, 0x49, 0x9c, 0xf6, 0xa1, 0xbd, 0x4c, 0xe2, 0x97, 0x91, 0x61, 0x8a, 0xb9, 0x10, 0x73, 0xad, 0x80, 0x4d, 0xbc, 0xaa, 0xf0, 0x90, 0x48, 0x3b, 0xd2, 0x88, 0x75, 0x90, 0xe7, 0x44, 0x2b, 0xed, 0xfb, 0xb1, 0x14, 0x99, 0xfa, 0x4e, 0xc4, 0x88, 0x7a, 0x9b, 0x19, 0x47, 0xcf, 0xe9, 0xe8, 0x7c, 0x1c, 0xbb, 0x5d, 0xd1, 0x36, 0xc5, 0x01, 0x1b, 0x0b, 0x1c, 0xd8, 0x2a, 0x99, 0x5b, 0xe5, 0xa5, 0x56, 0x75, 0x69, 0xf2, 0x1d, 0xd8, 0x2a, 0x89, 0x5b, 0xd5, 0x4b, 0xad, 0x3a, 0xd4, 0x7b, 0xc8, 0x83, 0xad, 0x35, 0xa3, 0xce, 0xf9, 0x02, 0xaf, 0xb7, 0x58, 0xfb, 0xbc, 0x15, 0xbd, 0x3c, 0xb2, 0xf5, 0x18, 0x76, 0xa8, 0xa2, 0x17, 0x7f, 0xbb, 0xc2, 0x64, 0x35, 0xaa, 0x6b, 0xa7, 0xe0, 0x75, 0x8e, 0x14, 0xaf, 0xab, 0xe8, 0x55, 0x96, 0x09, 0x5e, 0x47, 0x32, 0xa9, 0xf8, 0x6a, 0x8a, 0xc7, 0x6b, 0x03, 0xea, 0x7a, 0x0b, 0x90, 0xab, 0xe5, 0xd7, 0x38, 0xa1, 0x29, 0x88, 0x23, 0x2e, 0x6a, 0x31, 0xd7, 0x81, 0xb5, 0x43, 0x8c, 0xce, 0x1f, 0x87, 0xb5, 0x48, 0x33, 0x3f, 0x66, 0x4c, 0xfc, 0x78, 0x8d, 0xfc, 0xf6, 0xd3, 0xdd, 0xd6, 0xb7, 0x9f, 0x79, 0x11, 0xb9, 0x62, 0x44, 0xff, 0x3c, 0xf2, 0xc7, 0x68, 0x2d, 0xaf, 0x57, 0x3f, 0x5a, 0xa1, 0x39, 0xe4, 0x73, 0xc9, 0xf3, 0xdd, 0x2f, 0xbf, 0x8c, 0x14, 0xdb, 0x73, 0xad, 0x9e, 0x4f, 0xd6, 0x60, 0xcf, 0x6f, 0x6c, 0x1e, 0x88, 0x82, 0xa4, 0xbf, 0xcd, 0x0f, 0xf7, 0xe2, 0x28, 0x8e, 0xe3, 0xf8, 0xd3, 0x94, 0xba, 0xff, 0x30, 0xe8, 0x40, 0xfe, 0xfc, 0xfb, 0x5f, 0x9f, 0x9c, 0x23, 0x2c, 0x77, 0x38, 0x7d, 0x50, 0xe6, 0xf5, 0xa1, 0x9c, 0x1f, 0x00, 0x57, 0x85, 0xdf, 0x39, 0x1b, 0x2a, 0x69, 0x9d, 0x02, 0xc3, 0xeb, 0xa0, 0x7a, 0xd6, 0xfb, 0x60, 0x72, 0x22, 0x56, 0x67, 0x7d, 0x00, 0x24, 0xa1, 0x6d, 0xd8, 0xf5, 0x1c, 0x54, 0xb7, 0xd1, 0xf7, 0x2c, 0xcd, 0x64, 0x79, 0xdd, 0x89, 0xdc, 0x07, 0xdc, 0x38, 0x32, 0xfd, 0x77, 0xf8, 0xa0, 0x9e, 0x76, 0xfb, 0x91, 0x7a, 0xd2, 0xbe, 0xf9, 0x50, 0xb6, 0xc6, 0x19, 0x17, 0x29, 0x46, 0x3a, 0xec, 0x5d, 0xef, 0xa1, 0x79, 0x47, 0xec, 0x9b, 0x1d, 0xf5, 0xf7, 0xbb, 0xe7, 0x85, 0x9a, 0xee, 0x73, 0x59, 0x22, 0x3b, 0x10, 0x22, 0x03, 0x9d, 0x97, 0xfa, 0x6a, 0x5f, 0x11, 0x0c, 0x3d, 0x07, 0x65, 0x43, 0xf1, 0xaf, 0xe2, 0xac, 0xa8, 0xaf, 0x07, 0x6b, 0xd3, 0xac, 0xb5, 0x50, 0xa3, 0xc7, 0xfa, 0x2a, 0xdb, 0x72, 0x50, 0x53, 0xb3, 0x7a, 0xfd, 0x5e, 0x6f, 0x38, 0xfe, 0xfb, 0x5f, 0x37, 0xf9, 0xa8, 0x15, 0x3b, 0x9e, 0x03, 0x57, 0x9b, 0x9e, 0x3c, 0x20, 0x87, 0x8f, 0x0a, 0x3a, 0xa8, 0x20, 0x3a, 0x30, 0x31, 0x76, 0x02, 0x18, 0x72, 0x5a, 0xd0, 0x44, 0x42, 0xa6, 0x2f, 0xcb, 0x62, 0xec, 0x87, 0x56, 0xa5, 0x09, 0xde, 0x9d, 0xa8, 0x25, 0xbf, 0xdb, 0xc5, 0xd8, 0x0e, 0x05, 0xb5, 0x83, 0x12, 0xfb, 0x54, 0x30, 0xda, 0xe4, 0x43, 0x3f, 0x07, 0x33, 0xdb, 0x82, 0x38, 0xb2, 0xa3, 0xb7, 0xf5, 0x2e, 0x94, 0xf1, 0x67, 0x3a, 0xe0, 0x68, 0xdc, 0xee, 0xff, 0xed, 0xe0, 0x6f, 0x5f, 0xc7, 0xbf, 0xf7, 0x70, 0xd6, 0xaa, 0x9b, 0x88, 0x12, 0x8d, 0xd7, 0x5f, 0x54, 0x0a, 0x5a, 0x97, 0x3c, 0x38, 0x02, 0x9a, 0x92, 0x65, 0x70, 0xec, 0xc6, 0xcd, 0x46, 0x5a, 0x7d, 0x39, 0x76, 0xc3, 0x7d, 0x46, 0x89, 0xef, 0xeb, 0x8d, 0x72, 0x93, 0xb7, 0xc9, 0x43, 0x1a, 0xc2, 0x0e, 0x2c, 0xb3, 0xf5, 0x45, 0x94, 0xfb, 0x90, 0x9e, 0x43, 0xbb, 0xce, 0xed, 0x6e, 0x1e, 0x08, 0x8b, 0x55, 0x00, 0xda, 0x99, 0xae, 0x15, 0xeb, 0x0d, 0x93, 0x91, 0x3e, 0x61, 0x11, 0x41, 0x35, 0x99, 0x66, 0xbc, 0x22, 0x82, 0xfb, 0x72, 0x17, 0xff, 0xee, 0x40, 0x3a, 0x91, 0x79, 0x47, 0x31, 0x27, 0x06, 0x65, 0x73, 0x68, 0x47, 0x71, 0x8a, 0x5b, 0xca, 0xe7, 0x90, 0x9b, 0xb2, 0x42, 0x2c, 0xd9, 0x96, 0x4f, 0xf0, 0x3d, 0xa7, 0x71, 0x80, 0xac, 0x88, 0xec, 0xd1, 0xc4, 0x33, 0x3b, 0xfd, 0x5b, 0x62, 0xd2, 0x98, 0x34, 0x7a, 0x35, 0x45, 0x86, 0x62, 0xb6, 0xd0, 0x5c, 0x4b, 0x5f, 0x3f, 0x6e, 0xa9, 0xca, 0xd8, 0x23, 0xc1, 0xb9, 0xb1, 0x74, 0x4a, 0x0f, 0x8c, 0xbe, 0x56, 0x00, 0x0b, 0xa6, 0x04, 0xa1, 0x89, 0x9e, 0xb7, 0xf8, 0x21, 0x84, 0xd4, 0xfa, 0x25, 0x98, 0xcb, 0x34, 0xdb, 0x10, 0xd3, 0xf9, 0xce, 0x80, 0x3f, 0x63, 0xe1, 0xe3, 0x16, 0x4c, 0xf3, 0x6f, 0x5b, 0xa1, 0xff, 0x96, 0x20, 0xac, 0xa7, 0xe7, 0x2d, 0x0b, 0x20, 0x7e, 0x23, 0xa5, 0xbc, 0x37, 0xa6, 0xf7, 0xbd, 0x0f, 0x6b, 0xd2, 0x29, 0x17, 0xa5, 0xa4, 0x3f, 0xce, 0xd1, 0x0d, 0x9d, 0x98, 0xa3, 0x9d, 0x73, 0x2c, 0x82, 0x15, 0x9c, 0x63, 0x59, 0xc6, 0xb6, 0x71, 0x4c, 0xc6, 0xbc, 0xe1, 0xb2, 0x95, 0x50, 0x4a, 0xb6, 0x4f, 0xd8, 0x5f, 0x2d, 0x3d, 0x9d, 0xb7, 0xb2, 0xb4, 0x87, 0x14, 0x1b, 0x27, 0xa9, 0x2e, 0x23, 0xed, 0xe1, 0x7d, 0x02, 0xcb, 0x7a, 0xfc, 0x7e, 0x14, 0x44, 0x3a, 0x94, 0x6d, 0xbe, 0x7f, 0x55, 0x3a, 0xc8, 0x4e, 0x17, 0xfb, 0xbb, 0x7a, 0x48, 0x95, 0x9d, 0xb1, 0xa1, 0x8c, 0x3c, 0x28, 0x0e, 0x2d, 0xf8, 0xeb, 0x80, 0x88, 0x90, 0xd2, 0x64, 0xf7, 0xf7, 0x41, 0x9c, 0xad, 0x9c, 0x00, 0x74, 0xce, 0x53, 0x4a, 0x2e, 0x7a, 0x99, 0x2d, 0xea, 0xbc, 0xe3, 0xc7, 0x51, 0x6d, 0x76, 0xdf, 0x94, 0x6c, 0x12, 0xd6, 0x6c, 0x4e, 0xe2, 0xfb, 0x49, 0xce, 0xd3, 0xa3, 0xca, 0x2a, 0x3d, 0x2c, 0x5b, 0xf6, 0xec, 0x74, 0x47, 0x6c, 0x33, 0x50, 0x53, 0x18, 0x13, 0x62, 0xed, 0xcc, 0x19, 0xec, 0xed, 0x32, 0x3e, 0x1f, 0x8f, 0xe8, 0x99, 0xef, 0x9d, 0xa2, 0x95, 0x1e, 0xe2, 0x13, 0x11, 0x39, 0xa6, 0x60, 0x69, 0x47, 0x88, 0xee, 0x3a, 0xa5, 0x80, 0x67, 0x0c, 0x8f, 0x3f, 0x16, 0x6b, 0xbc, 0x06, 0xe7, 0x6f, 0x8b, 0x59, 0xaf, 0xc1, 0x15, 0x36, 0xa0, 0x24, 0xd4, 0xe6, 0x79, 0x0f, 0xe4, 0x8a, 0x5a, 0x49, 0xf1, 0xc2, 0xad, 0x9e, 0x64, 0x02, 0xe5, 0x5a, 0xed, 0x94, 0x00, 0x74, 0xb9, 0xb6, 0xc3, 0x86, 0x4a, 0x69, 0xbe, 0x17, 0xe5, 0x0d, 0xf9, 0xd6, 0x15, 0xd0, 0x0f, 0xda, 0x26, 0x68, 0xf6, 0x34, 0xf6, 0x23, 0xaf, 0x37, 0x46, 0x8e, 0xcc, 0xe8, 0x81, 0x8d, 0xe0, 0xf6, 0x2e, 0x07, 0xaf, 0xef, 0x3d, 0xf0, 0x4f, 0x99, 0x0d, 0xdd, 0x15, 0xa8, 0xb1, 0xcc, 0x60, 0x8d, 0x05, 0x65, 0xa9, 0x36, 0x96, 0xc7, 0xe2, 0xd9, 0x92, 0x59, 0xfc, 0x04, 0xc9, 0x6c, 0x62, 0xb5, 0xa2, 0x29, 0x7e, 0xae, 0x1f, 0x7b, 0x5b, 0xc6, 0x36, 0x6c, 0xb9, 0x05, 0x21, 0x80, 0x12, 0x94, 0xb3, 0xd6, 0x8b, 0x6f, 0x3c, 0xcb, 0x3a, 0xd8, 0x83, 0x43, 0xb1, 0xf8, 0x52, 0x53, 0xbc, 0x25, 0xaa, 0xc7, 0xbc, 0x55, 0x94, 0xa5, 0xbe, 0xd8, 0xe2, 0x73, 0x1c, 0x15, 0x46, 0x97, 0x09, 0x47, 0x8b, 0x11, 0x31, 0x73, 0x32, 0x6a, 0x99, 0xf1, 0x1a, 0xd6, 0xb3, 0x70, 0xc6, 0x3e, 0xfc, 0x5d, 0x14, 0x9e, 0x68, 0x76, 0x6b, 0x61, 0x49, 0x81, 0xd9, 0x03, 0xee, 0x25, 0x96, 0x73, 0x01, 0xe4, 0x40, 0x77, 0xc4, 0x3d, 0x34, 0xcf, 0x5c, 0x68, 0x56, 0xbf, 0x3c, 0xbf, 0x90, 0xed, 0x79, 0xbd, 0x1a, 0x27, 0x50, 0x9c, 0xfd, 0x9b, 0x6a, 0x3b, 0x60, 0x41, 0x75, 0x07, 0xdc, 0x35, 0xd3, 0x09, 0x8b, 0x90, 0x2b, 0x2c, 0xc1, 0x9a, 0xdc, 0x65, 0x0e, 0xd4, 0x26, 0xfd, 0xf3, 0xe6, 0x1e, 0x3b, 0x30, 0x2f, 0x74, 0xfc, 0xdf, 0xfe, 0xe9, 0x57, 0x91, 0xb2, 0x17, 0x43, 0xed, 0xf6, 0x97, 0xe6, 0xb6, 0x2b, 0x2e, 0x5f, 0x85, 0x39, 0xf0, 0x72, 0x85, 0xdb, 0x6e, 0x3c, 0xdc, 0xfb, 0xcb, 0x3d, 0x6d, 0x56, 0xdf, 0x87, 0x45, 0xf0, 0x8f, 0xaf, 0x7d, 0xe7, 0x5f, 0x03, 0xf7, 0x05, 0xfe, 0xd5, 0x7f, 0x1f, 0x7d, 0x1d, 0x45, 0xab, 0x64, 0xb4, 0xbe, 0x45, 0x1c, 0xb5, 0x52, 0xdb, 0xa6, 0xd5, 0x7b, 0x61, 0xc2, 0x69, 0xaf, 0xcb, 0x8b, 0x39, 0xfa, 0xe9, 0xc4, 0x20, 0xad, 0x8b, 0xb1, 0x64, 0x62, 0x6d, 0x1c, 0x38, 0x1c, 0xa7, 0x1d, 0x0f, 0x4c, 0x59, 0xed, 0x32, 0x60, 0x4a, 0x37, 0xa6, 0xa4, 0xdd, 0xca, 0x7d, 0x98, 0xae, 0xba, 0xc2, 0x87, 0x7c, 0x2d, 0x00, 0x95, 0xa9, 0xb4, 0xbc, 0x93, 0x65, 0x3c, 0x12, 0xb7, 0x1a, 0x90, 0x96, 0x27, 0xe4, 0x6b, 0x51, 0xcf, 0x99, 0xb0, 0x49, 0x0a, 0xd6, 0x45, 0x0b, 0x9e, 0x5f, 0xb7, 0x54, 0x1f, 0x84, 0x55, 0x20, 0x17, 0x3e, 0xbf, 0xae, 0x05, 0x9f, 0xda, 0x41, 0x36, 0x07, 0xa1, 0x4d, 0xef, 0x87, 0xb5, 0x52, 0xd8, 0x8a, 0x29, 0x72, 0x9e, 0x5f, 0x77, 0x27, 0x42, 0xe8, 0xaf, 0x23, 0xd8, 0x82, 0x7e, 0xac, 0xc9, 0x8f, 0x35, 0xf9, 0x3b, 0xa5, 0xcd, 0x7e, 0x97, 0xa7, 0x22, 0xaf, 0x8d, 0x34, 0xe4, 0x09, 0xa7, 0x3d, 0x15, 0x9e, 0x43, 0xfb, 0x82, 0xb3, 0xf0, 0x6d, 0x16, 0xbe, 0xcd, 0xea, 0x96, 0x1e, 0x9d, 0xe5, 0xf2, 0xcf, 0xb4, 0x88, 0xf7, 0x6a, 0xc3, 0x69, 0xff, 0xd1, 0xc0, 0x4c, 0x40, 0x6d, 0xbe, 0xa3, 0x66, 0x16, 0x96, 0x19, 0x7a, 0x71, 0x76, 0x87, 0xd6, 0x3b, 0x2b, 0xac, 0xad, 0x36, 0xdd, 0x9b, 0xac, 0x68, 0x98, 0xf7, 0x40, 0xad, 0x7f, 0xde, 0x43, 0x7f, 0x3c, 0xe0, 0x21, 0x8f, 0xb9, 0x56, 0x3e, 0x19, 0xc9, 0xd0, 0x53, 0xdb, 0x68, 0x56, 0x18, 0x7a, 0xe8, 0x70, 0x9c, 0x5a, 0x45, 0xfb, 0x58, 0x4e, 0x13, 0xb6, 0xa5, 0x52, 0x84, 0x1e, 0x89, 0xd7, 0xf6, 0x24, 0x93, 0x61, 0x2b, 0x95, 0xf6, 0xf7, 0x07, 0xc2, 0xfa, 0x6a, 0x13, 0xbd, 0xdf, 0x9b, 0x74, 0xea, 0xc9, 0xdf, 0x3b, 0xff, 0x1e, 0x9b, 0xf1, 0x6f, 0xd8, 0x87, 0xfe, 0x19, 0x07, 0xf0, 0xb7, 0xde, 0xa5, 0xf5, 0xbb, 0x87, 0xdc, 0x15, 0x70, 0x08, 0x31, 0x3c, 0xe3, 0x65, 0x0c, 0x69, 0xc9, 0x7a, 0x5e, 0x82, 0xcf, 0x2b, 0xd4, 0xe7, 0xf0, 0x10, 0x3d, 0x51, 0xef, 0x47, 0x1a, 0x07, 0x10, 0x5e, 0x6d, 0x4c, 0xa6, 0xd9, 0x60, 0x66, 0x5e, 0x7c, 0x16, 0x87, 0x7a, 0x61, 0xd6, 0x84, 0xd7, 0x6b, 0x70, 0xb6, 0xb9, 0x17, 0x50, 0x4a, 0x58, 0x36, 0xd4, 0xe7, 0x74, 0x43, 0x65, 0x27, 0x54, 0x98, 0x1d, 0x1e, 0xe1, 0x3f, 0xd7, 0xe9, 0x87, 0xea, 0xb9, 0xc3, 0xa3, 0x1b, 0xaa, 0xf3, 0x64, 0xff, 0x95, 0x24, 0xce, 0x82, 0x8f, 0xf1, 0x7e, 0xbb, 0xab, 0x19, 0xe6, 0xc5, 0x3b, 0x47, 0x77, 0xc6, 0x5b, 0x01, 0xd6, 0x33, 0x7c, 0x35, 0x42, 0x2a, 0x6b, 0x1e, 0xd8, 0x71, 0x7f, 0x47, 0x0e, 0xd9, 0x0c, 0xa7, 0x34, 0x11, 0xb3, 0x4b, 0xab, 0x8e, 0xfa, 0xce, 0x70, 0x31, 0x9f, 0x9a, 0xe5, 0x10, 0x1e, 0xf5, 0x9d, 0xe1, 0x9c, 0xa1, 0x3e, 0x1e, 0x2b, 0x0d, 0xae, 0x3c, 0x86, 0xc6, 0x7d, 0xf3, 0x07, 0xa8, 0xd2, 0xbe, 0x75, 0xa1, 0x31, 0x55, 0xc7, 0xd0, 0x3a, 0x8e, 0x0f, 0x8c, 0x7b, 0x9f, 0xcf, 0xe7, 0x2d, 0x6b, 0xf1, 0x0a, 0xf0, 0xc9, 0x19, 0x73, 0xd3, 0xfd, 0xcd, 0xf7, 0xf1, 0x38, 0xcb, 0xdf, 0x71, 0x7f, 0x3b, 0x24, 0x17, 0x11, 0x44, 0x23, 0xdb, 0xf8, 0xf7, 0x25, 0x61, 0x1f, 0x3f, 0x3d, 0x03, 0x5a, 0xc5, 0x9e, 0x72, 0x29, 0x7d, 0x95, 0x8a, 0xf8, 0xc7, 0x56, 0x57, 0x3b, 0xb0, 0x9c, 0x72, 0x27, 0xca, 0x26, 0x58, 0x24, 0xcc, 0x44, 0xc9, 0xc4, 0x5b, 0xd1, 0x01, 0xf5, 0x25, 0xd3, 0x25, 0x3d, 0xdb, 0x65, 0xa8, 0xcc, 0x77, 0x75, 0x43, 0xad, 0x07, 0x65, 0x89, 0x60, 0xd0, 0x9d, 0xa2, 0xcf, 0x6a, 0xf7, 0xef, 0xf7, 0xbb, 0xf4, 0x74, 0x0a, 0xe5, 0xf7, 0x83, 0x2e, 0x39, 0x15, 0x8a, 0xb4, 0xe4, 0xae, 0xf2, 0xb8, 0x74, 0xa9, 0xf7, 0x23, 0x83, 0x31, 0x69, 0x53, 0x7d, 0x2d, 0x1c, 0x9f, 0x4d, 0x7b, 0x43, 0x23, 0x76, 0xfe, 0xb5, 0x76, 0x4e, 0xd8, 0xdb, 0xab, 0x78, 0x0f, 0x8e, 0xa0, 0x6e, 0x70, 0xd1, 0x85, 0x53, 0x2e, 0xb7, 0xdd, 0xff, 0x7a, 0xaf, 0x52, 0x47, 0x61, 0x9b, 0x0b, 0x5c, 0xd8, 0x52, 0x0e, 0xab, 0x77, 0xe5, 0xaa, 0xfd, 0x7c, 0x8d, 0xfe, 0x54, 0xf1, 0xea, 0xad, 0xb0, 0x78, 0xdd, 0x56, 0x09, 0xdc, 0x1a, 0x91, 0xc7, 0xad, 0x62, 0xb7, 0x0b, 0xfb, 0xfb, 0xfe, 0xa8, 0x31, 0x36, 0x61, 0xc7, 0xfd, 0x91, 0x9c, 0xb0, 0xb6, 0x1b, 0xe8, 0xaa, 0xd7, 0x7a, 0x65, 0xd2, 0x38, 0x90, 0xb6, 0x60, 0x66, 0xee, 0xdc, 0xe1, 0x2b, 0xcf, 0x86, 0x17, 0xa2, 0xec, 0x2d, 0xd3, 0x9e, 0xff, 0xb8, 0x7e, 0x75, 0x13, 0xac, 0x57, 0x5a, 0x8c, 0x5a, 0x61, 0x93, 0x81, 0xcb, 0xee, 0x4c, 0xf7, 0xc3, 0x83, 0xe3, 0xfa, 0x45, 0xbc, 0xcf, 0x2f, 0xdf, 0xe0, 0x34, 0x38, 0xf3, 0x44, 0x9f, 0x9c, 0x7c, 0xb0, 0x49, 0xe6, 0x13, 0x39, 0x4f, 0x70, 0x49, 0x13, 0xf9, 0xd7, 0x95, 0xdd, 0x1b, 0x99, 0x53, 0x67, 0x28, 0x4b, 0xcd, 0x07, 0x3f, 0xf2, 0xa4, 0x66, 0xec, 0x93, 0x85, 0x38, 0x2e, 0xba, 0x51, 0x97, 0x59, 0x82, 0x7c, 0x29, 0x52, 0xe1, 0x84, 0x15, 0x77, 0x74, 0xe0, 0x60, 0xae, 0x46, 0x4e, 0xd5, 0x89, 0xfd, 0xb3, 0x86, 0xfc, 0x5c, 0x96, 0x4f, 0x95, 0xf4, 0xb5, 0x1e, 0xe4, 0x4a, 0x7b, 0xd9, 0x5e, 0x81, 0xff, 0xa6, 0xef, 0xf6, 0x03, 0xd4, 0x9a, 0x9d, 0xd8, 0xf2, 0xda, 0x48, 0x35, 0x8e, 0xb8, 0x98, 0xf7, 0x39, 0x68, 0xa3, 0x95, 0xd5, 0x79, 0xee, 0xa1, 0x7a, 0xe4, 0x35, 0x01, 0x58, 0xc6, 0x6b, 0xeb, 0x2d, 0x15, 0xf5, 0x38, 0x16, 0xc3, 0x2e, 0x3f, 0x86, 0x2c, 0x74, 0x06, 0xa1, 0x39, 0x75, 0x0a, 0x2c, 0x0c, 0xa3, 0x67, 0x82, 0x48, 0x53, 0x51, 0xd0, 0xcc, 0xaf, 0x9e, 0x3b, 0xaf, 0xe1, 0xe8, 0xcb, 0xc8, 0xef, 0x5c, 0x15, 0x96, 0x9d, 0x73, 0x57, 0x95, 0xbc, 0xd8, 0xd0, 0x6e, 0x73, 0xd5, 0x23, 0x24, 0xd5, 0xd7, 0xe0, 0x79, 0xaf, 0x04, 0xd6, 0x05, 0x5e, 0xf1, 0xaf, 0x0b, 0xeb, 0xd7, 0x10, 0xcf, 0xf3, 0x91, 0x96, 0x85, 0x65, 0x07, 0x6a, 0x88, 0x9f, 0xd4, 0x21, 0x0d, 0xd4, 0xb9, 0xea, 0x4a, 0x8d, 0xc7, 0x88, 0xe7, 0x05, 0x2a, 0xdc, 0xaa, 0x36, 0x86, 0x7c, 0xec, 0x58, 0xdc, 0xb5, 0x82, 0x53, 0x36, 0x5c, 0x83, 0x3b, 0x36, 0x20, 0x94, 0xa6, 0x0c, 0x77, 0x14, 0x5c, 0xce, 0x95, 0x47, 0x1c, 0x6f, 0x33, 0xad, 0xaf, 0x16, 0xec, 0xea, 0x43, 0x5e, 0x27, 0x21, 0xaf, 0xdb, 0xb6, 0xab, 0x0f, 0x79, 0x9d, 0x84, 0xbc, 0xee, 0x89, 0xa0, 0x84, 0xbc, 0x4e, 0xea, 0x21, 0x5e, 0xe7, 0x8b, 0xe6, 0xec, 0xea, 0xbb, 0xf3, 0xd5, 0xc0, 0x06, 0x7f, 0x3d, 0xc2, 0x54, 0xef, 0xca, 0x4b, 0xd1, 0xe3, 0x1a, 0x69, 0xab, 0xdb, 0xe5, 0xab, 0x32, 0xe3, 0xbb, 0x0f, 0xdf, 0x7d, 0x43, 0xaf, 0xdc, 0x11, 0x80, 0xf2, 0x2a, 0xad, 0x78, 0x77, 0x69, 0x52, 0x29, 0x5c, 0x16, 0x91, 0xa3, 0x0a, 0x4e, 0xfb, 0x8e, 0x04, 0xb0, 0x66, 0x7c, 0xbe, 0xc3, 0x0d, 0x6e, 0x19, 0x39, 0x66, 0x8d, 0xbf, 0xda, 0x42, 0x77, 0x97, 0x99, 0x42, 0x83, 0xf5, 0x51, 0x80, 0xad, 0x81, 0xde, 0xb9, 0xa4, 0xe9, 0x5e, 0xe4, 0xf1, 0x52, 0xf0, 0x02, 0xea, 0xa1, 0xab, 0x26, 0xc6, 0xcc, 0x6f, 0x2f, 0xaf, 0xf6, 0xd4, 0xcc, 0xfd, 0xc3, 0xaf, 0x6b, 0xd6, 0x1c, 0x85, 0x5a, 0xff, 0x1f, 0x0f, 0xd4, 0xc6, 0x4e, 0x83, 0xd7, 0x1f, 0x9e, 0x54, 0x2d, 0xad, 0x31, 0xbf, 0xdb, 0x86, 0x3d, 0xec, 0x16, 0x71, 0x15, 0xee, 0x37, 0x5e, 0xab, 0x8d, 0x3d, 0x0a, 0xd5, 0x7e, 0x9c, 0x79, 0xca, 0x71, 0xec, 0x55, 0xcf, 0x7b, 0xc0, 0xe5, 0x9b, 0xd7, 0x8f, 0x33, 0x40, 0x00, 0xdc, 0x69, 0x5e, 0x1a, 0x60, 0x5e, 0x5a, 0x8d, 0xfd, 0x57, 0xcb, 0x5c, 0xf3, 0x39, 0x70, 0x1f, 0x23, 0x6e, 0xda, 0x80, 0x14, 0x51, 0xcd, 0xdc, 0xb4, 0x3a, 0x15, 0x7e, 0x38, 0x1e, 0x6e, 0xf8, 0x6c, 0x98, 0x6a, 0xa9, 0x5e, 0xff, 0x1b, 0xaf, 0xd5, 0x60, 0xbd, 0xe3, 0x61, 0xaa, 0x55, 0x61, 0xaa, 0x49, 0xc3, 0xe4, 0x34, 0xa0, 0x3c, 0x1a, 0xe1, 0xdf, 0x26, 0xe6, 0xc0, 0xfe, 0x19, 0xbf, 0xe6, 0xf1, 0xa9, 0x19, 0xc7, 0x87, 0x3f, 0x9d, 0xf7, 0xd6, 0xa7, 0x78, 0x6f, 0x85, 0x59, 0x9d, 0x8f, 0xbd, 0xde, 0xfa, 0x62, 0xa4, 0x38, 0xa8, 0x37, 0xc0, 0x83, 0xfe, 0xd4, 0xa8, 0xed, 0x86, 0xff, 0xb1, 0x7f, 0xee, 0xf0, 0xc7, 0x67, 0x63, 0xb4, 0x3b, 0x56, 0x4d, 0x76, 0x50, 0xd3, 0x7a, 0x4a, 0xed, 0x9c, 0xe1, 0x8f, 0x13, 0x55, 0x7a, 0xd9, 0xc7, 0x7c, 0x78, 0x93, 0x18, 0x7b, 0x81, 0xd4, 0x78, 0x5d, 0x8b, 0xd0, 0x6d, 0x4d, 0xf3, 0xe0, 0x07, 0x53, 0x3c, 0x38, 0x40, 0x3c, 0x58, 0x73, 0x15, 0x0f, 0xd6, 0x64, 0xf1, 0xe0, 0xfb, 0x54, 0x1e, 0xac, 0x17, 0xfc, 0x23, 0x55, 0xae, 0xca, 0x9b, 0x03, 0xe3, 0xde, 0xe7, 0xd3, 0xfc, 0x85, 0x97, 0x9b, 0x30, 0x1f, 0x7a, 0x84, 0xb9, 0xef, 0x83, 0xcd, 0xeb, 0x55, 0xee, 0xfb, 0x20, 0x72, 0xdf, 0x65, 0x84, 0xa7, 0x8f, 0x4b, 0xf9, 0xd7, 0x3d, 0x8e, 0xfb, 0xda, 0x79, 0xcc, 0x1f, 0x55, 0x25, 0x90, 0x85, 0x38, 0xda, 0xc3, 0xd8, 0x6f, 0xcd, 0xa5, 0x28, 0x69, 0xd0, 0xbe, 0xba, 0x93, 0x6c, 0x04, 0xd6, 0x97, 0x2d, 0x03, 0xe3, 0x1d, 0x2b, 0xa0, 0x08, 0x66, 0xce, 0xc4, 0x32, 0x51, 0xeb, 0x2d, 0xa8, 0x2e, 0x85, 0xc2, 0xea, 0x59, 0x47, 0xf7, 0xce, 0x6b, 0xa0, 0xb3, 0x1e, 0x47, 0xbd, 0xf3, 0xfc, 0x66, 0x07, 0x4a, 0x76, 0x05, 0x51, 0x33, 0xde, 0x73, 0xe0, 0xfa, 0x88, 0xb1, 0x47, 0x0e, 0xeb, 0xbd, 0xfa, 0xb0, 0xdc, 0xa3, 0x45, 0x99, 0x68, 0x62, 0x54, 0x6e, 0xd2, 0x57, 0xc8, 0xa9, 0x19, 0x9d, 0xbe, 0xc2, 0x47, 0xca, 0xf1, 0xaa, 0xf2, 0x48, 0x4d, 0x85, 0x21, 0x15, 0x53, 0xe3, 0xf9, 0xc3, 0xaf, 0xb1, 0x1d, 0x35, 0xd9, 0xd2, 0xc8, 0x1f, 0xc6, 0xf1, 0x73, 0x94, 0x0d, 0xb4, 0x22, 0xbd, 0x4b, 0x3a, 0xed, 0x1e, 0x0a, 0x54, 0x19, 0x52, 0xa3, 0x07, 0x63, 0x7d, 0x18, 0x6b, 0x16, 0xb1, 0x55, 0x12, 0x8d, 0x15, 0x19, 0xa5, 0x84, 0x0a, 0x33, 0x4a, 0x5d, 0x13, 0xee, 0xf0, 0x40, 0x15, 0x2a, 0x81, 0x13, 0xaa, 0xbd, 0x15, 0x5a, 0x7a, 0x2f, 0x30, 0x54, 0x9b, 0xb7, 0x68, 0x57, 0x00, 0x3c, 0xe1, 0x97, 0x03, 0x7d, 0xbe, 0x2c, 0xda, 0xdc, 0xe1, 0x6b, 0x27, 0xca, 0x5c, 0x51, 0x3d, 0xeb, 0xf7, 0xfb, 0x67, 0xde, 0xba, 0x0f, 0x50, 0x0e, 0xab, 0xfa, 0xfd, 0xfe, 0xea, 0xd8, 0x3e, 0xa2, 0xcc, 0x89, 0xd5, 0x32, 0x51, 0x66, 0x75, 0x83, 0x88, 0x23, 0x2b, 0x03, 0xd5, 0x48, 0x97, 0x55, 0x50, 0xa9, 0x25, 0x4f, 0x9f, 0x59, 0x23, 0xa5, 0x4a, 0x1d, 0x29, 0xa5, 0x60, 0xe6, 0x91, 0x52, 0x45, 0x6d, 0x55, 0x47, 0x84, 0x17, 0xaf, 0x2a, 0x27, 0x9d, 0x38, 0xc6, 0xd6, 0xe2, 0x78, 0xa9, 0xe2, 0xf1, 0x52, 0xa5, 0xc6, 0x56, 0xfd, 0x61, 0xf0, 0x0e, 0x92, 0xb6, 0x6b, 0xc2, 0xa1, 0x6c, 0xb8, 0x02, 0x7d, 0x08, 0xd9, 0xa4, 0x6e, 0xf3, 0x7b, 0x0c, 0x59, 0xf5, 0x77, 0xb1, 0x76, 0xcc, 0xf3, 0xc6, 0x6b, 0x33, 0x5d, 0x38, 0x66, 0x3a, 0xa0, 0xc6, 0xab, 0xc5, 0x71, 0x93, 0x86, 0x8e, 0xe3, 0x3d, 0x22, 0x96, 0xa0, 0xa3, 0x14, 0xb4, 0xa2, 0xf3, 0x97, 0x72, 0xa7, 0xce, 0x33, 0xfc, 0x97, 0x89, 0x04, 0x51, 0x68, 0xd3, 0x8c, 0xfd, 0x3c, 0x7a, 0xfe, 0x6d, 0xcc, 0xe8, 0x59, 0x01, 0x96, 0xf4, 0xe8, 0x59, 0x99, 0x1e, 0x3d, 0x2b, 0x33, 0x33, 0x5d, 0x6a, 0x46, 0xf3, 0x1a, 0xe6, 0xe9, 0x79, 0x64, 0xcc, 0xc4, 0xb6, 0x54, 0xa5, 0x47, 0x06, 0x9d, 0x4a, 0xd6, 0x0f, 0x91, 0x45, 0xa2, 0x10, 0xce, 0xe7, 0xf5, 0x36, 0x4b, 0xad, 0xbf, 0x5a, 0x46, 0x0d, 0x7e, 0x26, 0x72, 0xf8, 0xfa, 0x9b, 0xea, 0x61, 0x5e, 0x18, 0xe7, 0xee, 0x32, 0x38, 0xf9, 0x90, 0x5d, 0x3a, 0xb9, 0xd1, 0xee, 0xc5, 0x19, 0xcf, 0xc0, 0x33, 0x1e, 0x8d, 0x90, 0x18, 0xce, 0x78, 0xfd, 0x6b, 0x46, 0x5f, 0xe8, 0x6f, 0x05, 0x49, 0x41, 0x0e, 0x2b, 0x21, 0xaf, 0x95, 0xcc, 0x4e, 0xa4, 0xc3, 0x79, 0x4b, 0x14, 0xc4, 0x54, 0xc8, 0xf5, 0x77, 0x8f, 0xea, 0x43, 0x57, 0xe2, 0x32, 0xaa, 0x3b, 0x39, 0x38, 0x4b, 0x55, 0x81, 0xab, 0x4a, 0x5b, 0xdd, 0x63, 0x80, 0xae, 0x15, 0xe1, 0x58, 0x10, 0xa2, 0xf5, 0xea, 0xdb, 0x99, 0xf0, 0x12, 0x7c, 0xf3, 0xaa, 0x6f, 0xbb, 0xc2, 0xf3, 0x0b, 0xc0, 0x2a, 0xe5, 0xcb, 0x18, 0x66, 0x0e, 0x4a, 0xd1, 0x4a, 0xaf, 0xaf, 0xba, 0x47, 0x03, 0xe1, 0x8a, 0xa0, 0x14, 0xa9, 0x10, 0xcf, 0x5d, 0x39, 0xe1, 0x54, 0x49, 0x8f, 0x85, 0x4b, 0xd4, 0xa7, 0xd2, 0x70, 0xb1, 0xfa, 0xb4, 0x31, 0x9c, 0xaf, 0x3e, 0xbd, 0x1e, 0x36, 0xaa, 0x4f, 0x35, 0xd8, 0x7b, 0x33, 0x43, 0xbb, 0xfe, 0x7c, 0xc0, 0x65, 0xae, 0xb0, 0xc4, 0x3d, 0xb4, 0x72, 0x13, 0xf7, 0x8a, 0x51, 0xdb, 0x3c, 0xc0, 0xbb, 0xa8, 0x2a, 0x8f, 0xd9, 0xe0, 0x9e, 0xf1, 0x0a, 0x71, 0x98, 0xd4, 0x28, 0xc7, 0xbe, 0xae, 0x57, 0x1c, 0x60, 0x24, 0x4a, 0x10, 0xa3, 0x3d, 0x25, 0xa1, 0x0d, 0xfd, 0x50, 0x1d, 0xe5, 0x63, 0xdf, 0x69, 0x94, 0x57, 0xe1, 0x15, 0xc2, 0x2b, 0x8c, 0x35, 0x6e, 0xe0, 0x71, 0x6e, 0xb0, 0xe5, 0x28, 0xfa, 0x97, 0x90, 0xc3, 0xb4, 0x42, 0x62, 0x67, 0x29, 0xf5, 0x02, 0xf6, 0xef, 0x9f, 0xdd, 0xfc, 0xbb, 0xa0, 0x71, 0x20, 0xbd, 0xf2, 0xe4, 0xc8, 0xac, 0xf9, 0xd0, 0xb9, 0x44, 0x1c, 0xe5, 0xf3, 0x11, 0x82, 0x06, 0xbb, 0x3a, 0xca, 0xe9, 0xf4, 0x4c, 0x19, 0x42, 0x53, 0xbd, 0x02, 0x4a, 0x71, 0x74, 0xdb, 0x51, 0xfa, 0x2f, 0xa9, 0x2a, 0x05, 0x07, 0x9d, 0x59, 0x9c, 0xe7, 0xc1, 0x71, 0x53, 0x1b, 0xdc, 0x0e, 0x13, 0x23, 0x20, 0xc7, 0xcc, 0x2b, 0x90, 0x2a, 0xf3, 0xf1, 0x29, 0x32, 0x7e, 0xbc, 0x77, 0xd2, 0x78, 0x47, 0xce, 0xd2, 0x49, 0xe3, 0xbd, 0x08, 0xc7, 0xbb, 0x74, 0xc4, 0x3d, 0xcf, 0x57, 0x0d, 0x29, 0xa9, 0xde, 0xe5, 0x3f, 0xb8, 0xaf, 0xda, 0xf4, 0xda, 0xfb, 0x60, 0x3d, 0xb8, 0x97, 0x24, 0xf0, 0x54, 0xcc, 0x4c, 0x6d, 0x4a, 0xa6, 0xaf, 0xd6, 0xa4, 0xd2, 0x1e, 0x0d, 0xdc, 0x3b, 0x61, 0xf0, 0x7e, 0xc5, 0x2d, 0x24, 0xb2, 0xda, 0x98, 0x11, 0x5e, 0xbd, 0x5f, 0xf1, 0x09, 0x59, 0xac, 0xca, 0x55, 0x0d, 0x4e, 0xfa, 0x06, 0xca, 0x15, 0xda, 0xf5, 0x51, 0x8b, 0x53, 0x9e, 0x33, 0xfc, 0x51, 0x63, 0xe8, 0x11, 0x75, 0x0e, 0x20, 0x1c, 0x63, 0xff, 0xfb, 0x7d, 0x47, 0x7c, 0x74, 0x3a, 0x69, 0x9e, 0xfb, 0x65, 0xac, 0x8f, 0xe8, 0x76, 0xc8, 0xc7, 0xbd, 0x12, 0xbe, 0x66, 0x68, 0x36, 0x3d, 0x6b, 0xc8, 0x77, 0xf0, 0x3c, 0xa9, 0xd6, 0x53, 0xdd, 0xd0, 0xf4, 0xa0, 0xb3, 0x01, 0x35, 0xa0, 0x0e, 0x14, 0x42, 0x03, 0x50, 0x9b, 0x96, 0xbe, 0xdd, 0xb4, 0xf3, 0xcb, 0xb4, 0xed, 0x47, 0x2a, 0xf6, 0xe3, 0x9b, 0x66, 0x28, 0x4e, 0xeb, 0x58, 0xa2, 0xc7, 0x8e, 0xa6, 0xe5, 0x70, 0xc9, 0x66, 0xd5, 0x11, 0xfd, 0xe6, 0xeb, 0x89, 0x82, 0xab, 0x2d, 0x66, 0x2d, 0x68, 0x97, 0x4c, 0x24, 0x69, 0x29, 0x4d, 0xc1, 0x85, 0x88, 0x3b, 0x17, 0xd8, 0x61, 0x52, 0xf7, 0x8a, 0x70, 0x25, 0x52, 0xa6, 0xad, 0xfb, 0x4c, 0xb8, 0x0c, 0xef, 0x93, 0xba, 0x77, 0x85, 0xed, 0x45, 0x44, 0xaf, 0x5a, 0xd4, 0x85, 0x0b, 0x90, 0x46, 0x0b, 0xba, 0x73, 0xc2, 0xf9, 0xdd, 0x8f, 0x85, 0x2d, 0xdd, 0xa5, 0xe1, 0x9c, 0xee, 0x8d, 0x61, 0x7d, 0xf7, 0xeb, 0x61, 0xb9, 0xbb, 0x86, 0xbe, 0x3d, 0xfa, 0xb0, 0x91, 0xce, 0xb3, 0x80, 0x1f, 0xe5, 0xcd, 0xbd, 0x42, 0xde, 0x14, 0x72, 0x28, 0x79, 0x34, 0x6a, 0x1e, 0xe8, 0x46, 0x4d, 0x02, 0x67, 0xa7, 0x07, 0xf9, 0xdc, 0x83, 0x39, 0xbd, 0xf6, 0x8c, 0x23, 0xdc, 0xa6, 0x3d, 0xd4, 0xbf, 0xe7, 0x39, 0xa8, 0xa5, 0xf9, 0xe4, 0xe0, 0xcb, 0x15, 0xae, 0x22, 0x08, 0xba, 0xa3, 0xcd, 0x41, 0x4f, 0x74, 0xbe, 0x93, 0x2c, 0x8d, 0x55, 0x0a, 0x1c, 0x5f, 0xf8, 0x08, 0x31, 0xe2, 0x62, 0x0e, 0xd0, 0x69, 0x33, 0x1c, 0x7a, 0x0e, 0xaa, 0xc5, 0x28, 0x3d, 0x0a, 0x07, 0x5f, 0xbe, 0x79, 0x5f, 0x8a, 0x52, 0x0f, 0xed, 0x38, 0x0a, 0x37, 0x53, 0x9a, 0xf9, 0x38, 0xde, 0x2b, 0xef, 0x00, 0x6f, 0x94, 0xe5, 0x03, 0x27, 0x34, 0x63, 0x09, 0xc7, 0x48, 0xca, 0x27, 0x39, 0xec, 0xcd, 0xfe, 0xa6, 0xf5, 0xf3, 0x1e, 0xa4, 0x3e, 0x78, 0xd1, 0xbd, 0x0a, 0x92, 0xed, 0x4d, 0x9a, 0x93, 0x79, 0x27, 0x2d, 0x2f, 0x08, 0xfa, 0x7d, 0x91, 0xda, 0x72, 0x61, 0x3d, 0xff, 0x3e, 0x36, 0x6e, 0x96, 0x2a, 0xce, 0xb6, 0x69, 0xff, 0xa7, 0xb3, 0x90, 0x70, 0x6e, 0xe9, 0x95, 0x4c, 0x97, 0x60, 0xf4, 0x94, 0x19, 0xaf, 0x49, 0x30, 0xfa, 0xef, 0x27, 0x85, 0x5d, 0xbd, 0x7b, 0x16, 0xb7, 0x92, 0x51, 0xc3, 0x2c, 0xfb, 0xa2, 0x59, 0x21, 0xff, 0x87, 0x6c, 0x8b, 0x9e, 0x1b, 0xc6, 0x6b, 0x37, 0x8c, 0x9e, 0x2f, 0x87, 0xd1, 0xf7, 0xdd, 0x6c, 0x5b, 0x34, 0xa1, 0x09, 0xd2, 0x1e, 0x17, 0x8c, 0x26, 0x5e, 0x14, 0x36, 0x46, 0x93, 0x4f, 0x09, 0x1b, 0xa3, 0x23, 0x8d, 0xc2, 0x4a, 0xe0, 0x28, 0x59, 0x8d, 0xb7, 0x60, 0x7c, 0x4c, 0xd8, 0x1a, 0x4d, 0x90, 0x97, 0x9d, 0x62, 0x4c, 0x77, 0x80, 0x6d, 0x78, 0x26, 0xe4, 0x23, 0x6c, 0x6b, 0x34, 0xa1, 0x29, 0x15, 0xb6, 0x3a, 0x2f, 0xb6, 0x0b, 0x5b, 0xa3, 0x1f, 0x1d, 0x13, 0xb6, 0x46, 0x2f, 0xce, 0x14, 0x36, 0x3b, 0x2f, 0xbe, 0x3a, 0xd6, 0x66, 0xe7, 0x5f, 0x84, 0xa7, 0xe0, 0xd1, 0x91, 0x7a, 0x61, 0xb3, 0x73, 0xe4, 0x80, 0xb0, 0x05, 0x3a, 0xda, 0x35, 0xc6, 0xa6, 0x68, 0xa2, 0x48, 0x58, 0xa4, 0x4f, 0x14, 0x6d, 0x60, 0xdb, 0xa1, 0x89, 0x2f, 0xe5, 0x8b, 0x7a, 0x8b, 0x2d, 0x9c, 0x3e, 0xf1, 0xa5, 0x00, 0xc3, 0x9f, 0x98, 0x74, 0x84, 0x6d, 0x88, 0x26, 0x94, 0x22, 0xb6, 0x21, 0x9a, 0xb8, 0x31, 0x2c, 0xf2, 0x2b, 0x21, 0x86, 0x2b, 0x61, 0x2f, 0x63, 0x1b, 0xa2, 0x89, 0x9b, 0x05, 0x3c, 0x89, 0xc9, 0x4f, 0x31, 0x3c, 0x89, 0x42, 0xca, 0x57, 0x8d, 0xe9, 0x29, 0xdd, 0x57, 0x33, 0xf5, 0x5a, 0x45, 0x0f, 0x24, 0xf2, 0x9f, 0x11, 0xf5, 0x5f, 0x5f, 0xcc, 0x70, 0x25, 0x0a, 0xab, 0xc7, 0xd9, 0x14, 0x55, 0xb0, 0x9f, 0x85, 0x1d, 0xd9, 0xd1, 0xf3, 0x17, 0xb2, 0x6c, 0x8a, 0xa6, 0x6d, 0x89, 0x4a, 0x6e, 0xb8, 0x80, 0x25, 0x5c, 0xb4, 0x83, 0xf4, 0xa4, 0xa4, 0xe5, 0x20, 0x07, 0x42, 0x60, 0x05, 0xa9, 0x18, 0xe4, 0xb8, 0x74, 0x02, 0x34, 0xd2, 0xef, 0x75, 0x83, 0x1a, 0x37, 0x6d, 0x40, 0xe3, 0x3f, 0x17, 0xb6, 0xb2, 0x11, 0x34, 0x45, 0xa0, 0x51, 0xe4, 0x66, 0xd0, 0xca, 0x4b, 0x4f, 0x3c, 0xa9, 0x55, 0x64, 0x61, 0x9b, 0xbf, 0x1a, 0xcb, 0x89, 0x11, 0x76, 0xb4, 0x04, 0x82, 0x4e, 0xf3, 0xd6, 0x21, 0xb7, 0xce, 0xad, 0x29, 0xe1, 0xb8, 0x66, 0x0c, 0x6a, 0x06, 0x7d, 0xd1, 0x67, 0x92, 0x80, 0xa4, 0xd5, 0x99, 0xf3, 0x72, 0x72, 0x35, 0xb2, 0xc9, 0xa0, 0xa7, 0x95, 0x66, 0xd5, 0xa8, 0x68, 0xfa, 0x07, 0x31, 0x69, 0x05, 0x51, 0x84, 0x89, 0x83, 0x92, 0xa9, 0x08, 0xbc, 0x59, 0xc1, 0xc8, 0x38, 0xc6, 0x54, 0xe3, 0xb2, 0x25, 0xb3, 0x72, 0x1a, 0x20, 0x2b, 0x23, 0xc7, 0x16, 0xa9, 0x39, 0x89, 0x2e, 0xb2, 0xf2, 0x24, 0xc7, 0xd6, 0xa7, 0x81, 0x71, 0x15, 0x66, 0xe5, 0x93, 0x3f, 0x03, 0x4e, 0x1d, 0x39, 0xed, 0xc4, 0xec, 0x27, 0xf0, 0xe7, 0x26, 0x0e, 0xb9, 0x0e, 0xb9, 0xd7, 0x97, 0xb9, 0xd7, 0x10, 0xdb, 0xe4, 0x78, 0xda, 0x90, 0x89, 0xb3, 0xc2, 0x0d, 0x6a, 0x5c, 0xee, 0xa7, 0xe6, 0x23, 0xfa, 0xfa, 0xb4, 0x7c, 0x9f, 0xfd, 0xcf, 0xa8, 0x35, 0xcb, 0x39, 0x7a, 0x8b, 0xc1, 0xa4, 0xcb, 0xd3, 0xe4, 0x4a, 0x13, 0xbe, 0xb8, 0xad, 0x56, 0xc1, 0x0b, 0x3e, 0xdf, 0x4e, 0xeb, 0x17, 0xb3, 0xc4, 0xaa, 0xda, 0x5a, 0x15, 0x85, 0xfe, 0x1f, 0xb3, 0xb3, 0xda, 0x34, 0x7f, 0x56, 0x7d, 0x73, 0xcd, 0x94, 0x65, 0xdd, 0x53, 0xd6, 0xc0, 0x9d, 0x9e, 0xba, 0xf1, 0x2f, 0xd0, 0xd8, 0xd9, 0x1a, 0x5b, 0xdc, 0xd9, 0xba, 0x60, 0x79, 0xeb, 0xdf, 0x36, 0x76, 0x74, 0x76, 0xad, 0x56, 0xd6, 0xe0, 0x53, 0x0c, 0x9f, 0xbe, 0x3e, 0x25, 0x96, 0x33, 0xa6, 0x65, 0x58, 0x92, 0x6a, 0xf3, 0x14, 0xca, 0x97, 0x2e, 0xee, 0x6c, 0x81, 0xc6, 0xaf, 0x56, 0x51, 0x71, 0xca, 0xe2, 0xae, 0xae, 0xd6, 0x55, 0xb1, 0xae, 0xe5, 0xed, 0x51, 0xa5, 0xab, 0x43, 0x59, 0xde, 0xbe, 0xbc, 0x4b, 0xb9, 0x65, 0xca, 0xea, 0x5b, 0x72, 0xd2, 0x09, 0xea, 0x97, 0xb7, 0xb7, 0xf8, 0x30, 0x87, 0xb2, 0xfa, 0x9e, 0xa5, 0x4b, 0x5b, 0x5b, 0x5b, 0x5a, 0x5b, 0x32, 0x71, 0xb3, 0x31, 0xf9, 0xf8, 0xb8, 0xd0, 0xe2, 0x55, 0xad, 0x35, 0xa2, 0x88, 0xa6, 0xd6, 0x68, 0xcd, 0x14, 0x57, 0x75, 0xb7, 0x32, 0xfb, 0x1b, 0x7c, 0xcf, 0x41, 0xc1, 0x15, 0x53, 0xcf, 0xff, 0x5e, 0xac, 0xb5, 0x66, 0x4a, 0x8b, 0x32, 0xcb, 0x97, 0x7a, 0x6a, 0x4c, 0x3f, 0x79, 0x1b, 0x7d, 0x74, 0xab, 0x6f, 0x5b, 0x1c, 0x5d, 0xad, 0xe6, 0x99, 0xd2, 0x52, 0xa3, 0x04, 0x16, 0xd4, 0x4c, 0xa9, 0x6c, 0x51, 0x16, 0x2c, 0xa8, 0x51, 0xe8, 0x1e, 0x68, 0x12, 0xaf, 0xe2, 0x46, 0x39, 0x32, 0x30, 0x71, 0x13, 0x22, 0x8b, 0x97, 0xb7, 0x11, 0x30, 0x53, 0x5a, 0xca, 0xa6, 0xc4, 0x30, 0x4f, 0x4b, 0x37, 0xff, 0x57, 0x96, 0x2e, 0xff, 0x3a, 0xfd, 0xb6, 0xad, 0xa4, 0x9b, 0x63, 0x4a, 0x8b, 0x73, 0x4a, 0xcb, 0xd4, 0x1c, 0x58, 0x86, 0x40, 0xfd, 0x2d, 0xe2, 0x51, 0x59, 0x1d, 0xeb, 0x5c, 0xde, 0xd5, 0x4a, 0xe9, 0xb9, 0x3c, 0x46, 0x5a, 0x93, 0x67, 0xae, 0x12, 0xe9, 0xb8, 0xa7, 0xbd, 0x05, 0x51, 0xa5, 0x70, 0x6b, 0x56, 0x2f, 0x5f, 0xdb, 0xaa, 0x08, 0xd8, 0xd4, 0x44, 0x2d, 0x1d, 0xed, 0xad, 0x39, 0x82, 0x2c, 0xc7, 0xfe, 0x43, 0x6e, 0x7f, 0xee, 0x21, 0x18, 0x3d, 0x7b, 0x57, 0xe6, 0xfd, 0x6c, 0x3f, 0xce, 0x14, 0xfe, 0xcc, 0xfb, 0x05, 0xe4, 0xb0, 0x79, 0x3b, 0xd3, 0xef, 0x89, 0xbc, 0x17, 0x90, 0xd3, 0xeb, 0xff, 0x3f, 0x6c, 0x43, 0xb6, 0x40, 0xb5, 0x21, 0x6b, 0xb6, 0x4f, 0x93, 0x8a, 0x49, 0xdf, 0x38, 0x0d, 0x59, 0x36, 0x64, 0x77, 0xa7, 0xec, 0x9f, 0xfe, 0xfb, 0xc4, 0xab, 0x6c, 0xc8, 0x92, 0x87, 0xd2, 0xd1, 0x53, 0x4f, 0x09, 0x1b, 0xb2, 0x30, 0x72, 0x95, 0x0d, 0x59, 0xf6, 0x9b, 0x7c, 0x5a, 0x27, 0x99, 0xd9, 0x86, 0xac, 0xd5, 0xe9, 0x97, 0x0a, 0x38, 0x24, 0x47, 0x2a, 0xb2, 0xd6, 0x82, 0x05, 0xc3, 0x8a, 0x51, 0x67, 0x78, 0x51, 0x84, 0xc1, 0x6e, 0xd5, 0xaa, 0xe9, 0x20, 0xea, 0x0a, 0x7b, 0xd9, 0xaa, 0xe9, 0x3e, 0xb6, 0x21, 0xbb, 0x5f, 0xb5, 0x21, 0x3b, 0xc4, 0xe9, 0x26, 0xc3, 0x61, 0xef, 0x73, 0x70, 0x14, 0xaf, 0xe3, 0x63, 0x6d, 0xc8, 0x9e, 0xbe, 0x15, 0x61, 0xd8, 0xf2, 0x45, 0x6c, 0xc8, 0x9e, 0x86, 0xcf, 0xb4, 0x21, 0x7b, 0x76, 0x8c, 0x95, 0xd3, 0xe2, 0x2f, 0x64, 0x43, 0xb6, 0x58, 0xc5, 0xa1, 0xf6, 0x9a, 0x38, 0xdc, 0x92, 0xc6, 0xe1, 0xae, 0x6b, 0xe3, 0xf0, 0xdf, 0xbd, 0x2a, 0x0e, 0x0f, 0x5f, 0xe5, 0xbb, 0xe5, 0x84, 0xc0, 0x21, 0x9c, 0x62, 0x6b, 0xb1, 0xa7, 0x51, 0x0e, 0x3d, 0xcb, 0x21, 0x5f, 0x87, 0x0b, 0x02, 0x87, 0x70, 0xd1, 0xe9, 0x93, 0xb4, 0x22, 0x4c, 0x32, 0x0a, 0x1c, 0xa2, 0xda, 0x14, 0x94, 0xac, 0x84, 0x43, 0xa9, 0x20, 0x56, 0x45, 0xf6, 0x7b, 0xbd, 0xcf, 0x49, 0xc5, 0x78, 0x29, 0xd7, 0xc0, 0xd9, 0x89, 0xcf, 0xb0, 0x0c, 0xbb, 0x35, 0x1b, 0x67, 0xa3, 0x8f, 0x7d, 0x2a, 0xce, 0x4e, 0x5d, 0x85, 0xb3, 0x8c, 0x65, 0xd8, 0xfe, 0xb4, 0x65, 0xd8, 0xb6, 0xcf, 0xb6, 0x0c, 0x7b, 0x6a, 0xcd, 0x7f, 0xd4, 0x32, 0xec, 0xa9, 0xf6, 0xff, 0x80, 0x65, 0xd8, 0x82, 0xb1, 0x96, 0x61, 0xcf, 0x1c, 0xff, 0x62, 0x96, 0x61, 0x4f, 0x2d, 0xb8, 0xda, 0xbe, 0xe9, 0xa9, 0xfa, 0xb1, 0xf6, 0x4d, 0xcf, 0x3c, 0xf3, 0xa9, 0x96, 0x61, 0x8b, 0xff, 0x2b, 0xbc, 0x07, 0x4b, 0x45, 0xdc, 0x7b, 0x4d, 0xe3, 0xac, 0xc3, 0x16, 0x67, 0x59, 0x87, 0x2d, 0xf8, 0x3c, 0xeb, 0xb0, 0x67, 0x76, 0x7f, 0x96, 0x75, 0xd8, 0x53, 0x33, 0x3f, 0xdd, 0x3a, 0xec, 0xa9, 0xd0, 0x78, 0xeb, 0xb0, 0x67, 0xf6, 0x5f, 0xdb, 0x3a, 0x2c, 0xe2, 0x74, 0x9c, 0x75, 0xd8, 0xff, 0x0c, 0xf6, 0xbe, 0xa8, 0x75, 0x58, 0x1c, 0x8f, 0x67, 0xe9, 0xdc, 0x16, 0xf9, 0xde, 0xcd, 0xde, 0x6d, 0x2e, 0x23, 0x0a, 0x5f, 0xc2, 0x96, 0x6e, 0x12, 0x5a, 0x2d, 0xe2, 0xc4, 0x1d, 0xb1, 0x64, 0x5b, 0x7f, 0x0d, 0xd7, 0xa7, 0x6d, 0xc6, 0x9a, 0x11, 0xde, 0x02, 0x1e, 0x99, 0x1f, 0x5d, 0x6d, 0x33, 0xb6, 0xc4, 0x3d, 0xce, 0x66, 0xac, 0x99, 0xce, 0x11, 0x7e, 0x73, 0xcc, 0xa8, 0x68, 0x20, 0xcb, 0x1b, 0x05, 0x99, 0x7d, 0xc3, 0x64, 0x4f, 0xf6, 0x2e, 0x62, 0x72, 0x8d, 0x78, 0xcb, 0xd8, 0x94, 0x4d, 0x2c, 0x51, 0x79, 0xb4, 0x13, 0x8c, 0xb6, 0xb4, 0x4f, 0xbc, 0xd1, 0xf9, 0xe3, 0xd3, 0x5d, 0x6d, 0x7b, 0xf6, 0x3f, 0x66, 0x69, 0x36, 0x75, 0xae, 0x4d, 0xb5, 0x67, 0x52, 0x0a, 0xf3, 0x67, 0x0d, 0x27, 0x63, 0xd8, 0x0f, 0xa9, 0xf7, 0xe6, 0xac, 0xe7, 0x85, 0xfc, 0xbd, 0xfe, 0x83, 0x31, 0x25, 0xeb, 0x94, 0xdc, 0x76, 0x78, 0x30, 0x1d, 0xdf, 0x15, 0xda, 0x95, 0x5c, 0x88, 0x21, 0x5d, 0xf4, 0x7d, 0x9d, 0x38, 0xb5, 0x46, 0xe7, 0x10, 0xc5, 0x79, 0x50, 0xe6, 0x0b, 0xf4, 0x25, 0x8b, 0xe0, 0x23, 0x8b, 0xea, 0x86, 0x93, 0xf3, 0x53, 0xf6, 0x68, 0x4f, 0xaf, 0x4e, 0x3f, 0x3d, 0x98, 0x7e, 0xfa, 0xfb, 0x6c, 0x7b, 0xb6, 0xa7, 0x9f, 0x4e, 0x87, 0xef, 0x49, 0x3f, 0xfd, 0x8e, 0x53, 0x14, 0xa9, 0x9c, 0x84, 0xce, 0xfa, 0x19, 0xd9, 0xca, 0xc6, 0xae, 0xe4, 0x16, 0xf1, 0xe5, 0x7d, 0xd2, 0x46, 0x7a, 0xa4, 0xca, 0x9b, 0x2f, 0xaa, 0x6d, 0xa5, 0xaf, 0x40, 0x95, 0xb2, 0x15, 0xb0, 0x10, 0xdb, 0x32, 0xbf, 0x64, 0x39, 0xd4, 0xb2, 0xaf, 0x15, 0xfd, 0xac, 0xf7, 0xa1, 0x8c, 0xce, 0x8a, 0xf2, 0x79, 0xa1, 0x46, 0x1f, 0xf6, 0xe6, 0xff, 0x44, 0xba, 0x8b, 0x94, 0x93, 0x8f, 0x5a, 0x9e, 0x85, 0xcc, 0x31, 0xf2, 0x8c, 0x65, 0xc5, 0x19, 0xa7, 0x40, 0xd8, 0xf7, 0x80, 0xdd, 0x9c, 0xb6, 0x96, 0x6c, 0x7b, 0xc0, 0x20, 0x9f, 0x31, 0x71, 0x65, 0x52, 0x93, 0x77, 0x9c, 0x54, 0xda, 0x70, 0x91, 0xca, 0xcb, 0x13, 0x25, 0x7b, 0x52, 0x4f, 0xb7, 0x90, 0x5f, 0x2b, 0xab, 0x4a, 0x21, 0xe6, 0x54, 0xcf, 0xe1, 0x48, 0x16, 0x7d, 0x77, 0xa4, 0x4c, 0xb5, 0x8f, 0x72, 0x07, 0x59, 0x2a, 0x29, 0xe3, 0xef, 0xec, 0x84, 0x55, 0xd0, 0xdd, 0xaa, 0xbd, 0xd6, 0xca, 0xb1, 0xf6, 0x5a, 0x25, 0x17, 0xfb, 0xf1, 0x9b, 0x0a, 0xda, 0x2e, 0xe8, 0x4e, 0xae, 0x85, 0x35, 0xc9, 0x1e, 0x08, 0x07, 0xc9, 0x5e, 0x8e, 0x9e, 0xed, 0xb4, 0xb2, 0x17, 0x98, 0x9a, 0x2c, 0xbb, 0x2e, 0xa5, 0x28, 0x7f, 0xe7, 0xa3, 0x0e, 0x67, 0x2b, 0xa1, 0xaf, 0x45, 0x25, 0xb2, 0xac, 0x49, 0x56, 0x5c, 0xc3, 0x85, 0x0e, 0xba, 0x6b, 0xc2, 0x16, 0xfe, 0x8a, 0x54, 0x1b, 0xd6, 0x97, 0xf1, 0xd7, 0xa4, 0xca, 0x5c, 0xc4, 0xd9, 0x5a, 0xd5, 0x8a, 0xeb, 0x36, 0x6c, 0xfd, 0x82, 0x70, 0xcd, 0xbd, 0x30, 0xd3, 0x01, 0xf9, 0xbb, 0xef, 0x5f, 0x52, 0xfe, 0xc2, 0xfd, 0xad, 0xa5, 0xfc, 0x56, 0xb0, 0xeb, 0xfe, 0x25, 0xca, 0x8b, 0xf7, 0xb7, 0x16, 0x07, 0xfb, 0xa2, 0x85, 0x36, 0x6f, 0x58, 0xff, 0xd2, 0x36, 0x28, 0x8c, 0x9a, 0x4b, 0x67, 0x97, 0x7f, 0x29, 0x72, 0x91, 0xbe, 0xd3, 0x8b, 0xa4, 0xec, 0xbb, 0xee, 0x51, 0x7d, 0xde, 0x20, 0x47, 0x20, 0x4b, 0xaf, 0x07, 0xf7, 0x05, 0x62, 0xfd, 0x34, 0x4f, 0x68, 0x55, 0x4e, 0x43, 0x16, 0x3f, 0x16, 0x78, 0x3d, 0xe1, 0xfa, 0x74, 0x2d, 0x35, 0x58, 0x4b, 0x55, 0xba, 0x96, 0x32, 0xac, 0xc5, 0x31, 0xb6, 0x16, 0x3b, 0xd7, 0x42, 0x73, 0x53, 0xe4, 0x5a, 0xd6, 0x5f, 0x5f, 0x18, 0x67, 0xfd, 0x75, 0xe4, 0x9a, 0xd6, 0x5f, 0x77, 0x7f, 0x96, 0xf5, 0xd7, 0x91, 0x9e, 0xcf, 0xb0, 0xfe, 0xba, 0xe0, 0x33, 0xac, 0xbf, 0x2e, 0x18, 0x67, 0xfd, 0x75, 0xa2, 0x6a, 0xad, 0xb5, 0xf0, 0x53, 0xad, 0xbf, 0xee, 0xfe, 0x54, 0xeb, 0xaf, 0x0b, 0xae, 0x61, 0xfd, 0x35, 0x5d, 0xde, 0x78, 0xeb, 0xaf, 0xc9, 0x9f, 0x90, 0xf5, 0x57, 0xf2, 0x57, 0x45, 0xf6, 0x75, 0x3c, 0x67, 0xc0, 0x36, 0x2d, 0x90, 0x7c, 0x69, 0xda, 0x0a, 0xb8, 0x37, 0xb9, 0x13, 0x6b, 0xd9, 0x15, 0x01, 0xfd, 0x65, 0xdf, 0x19, 0x58, 0x30, 0x6d, 0x76, 0xf2, 0x85, 0x29, 0xb3, 0x61, 0x11, 0x8e, 0xdf, 0xbb, 0x66, 0x9f, 0x81, 0xbb, 0xa6, 0x34, 0xc0, 0x02, 0x4c, 0xdd, 0x32, 0x25, 0x00, 0x6d, 0x18, 0xb6, 0x0c, 0xd3, 0x2c, 0xc3, 0xf8, 0x16, 0xa4, 0xf0, 0xad, 0x7a, 0x22, 0x88, 0x7d, 0x7c, 0x02, 0x3d, 0xe1, 0x5c, 0x52, 0x4b, 0x3b, 0x14, 0x5b, 0x11, 0xc6, 0x27, 0x9a, 0x07, 0xbc, 0xde, 0xb0, 0xdc, 0xe4, 0x55, 0xad, 0x26, 0x5d, 0x4a, 0xf9, 0x48, 0x24, 0x6b, 0x07, 0x81, 0x3d, 0x8a, 0xfc, 0x7e, 0xbf, 0x13, 0x66, 0x0f, 0x5f, 0xb1, 0x85, 0xb6, 0x4c, 0x73, 0x27, 0x77, 0x65, 0xc7, 0xbe, 0xbb, 0x51, 0xf1, 0x06, 0x96, 0x21, 0x4f, 0xdc, 0x52, 0x06, 0x63, 0x72, 0x75, 0x9b, 0xe2, 0xa1, 0x2d, 0x6c, 0x9b, 0x4b, 0x29, 0xff, 0xe7, 0xec, 0x70, 0xd8, 0x16, 0xda, 0xe2, 0x00, 0xaa, 0x19, 0x7b, 0xeb, 0x09, 0x65, 0x55, 0x72, 0x97, 0xa3, 0x9e, 0x30, 0xe4, 0x75, 0x87, 0x97, 0xd8, 0x4a, 0xa1, 0xaa, 0xb1, 0x57, 0xe9, 0xc5, 0x99, 0x62, 0x2a, 0x94, 0x4f, 0xf6, 0x80, 0x76, 0x8d, 0xf9, 0xc8, 0x76, 0xa8, 0x9a, 0xec, 0x03, 0x23, 0x86, 0xb8, 0x30, 0xc4, 0xdc, 0x69, 0x3d, 0x44, 0x21, 0x1e, 0xb6, 0xad, 0x30, 0x7a, 0x7a, 0x38, 0xb8, 0x1d, 0x3a, 0xa3, 0x7a, 0x7e, 0x3e, 0x3f, 0x99, 0xac, 0xfd, 0x6c, 0x83, 0x22, 0xbc, 0x8a, 0x4b, 0xc8, 0xfe, 0xde, 0x3a, 0xc7, 0xba, 0xa9, 0x01, 0xd0, 0x36, 0xb9, 0x6d, 0x7f, 0xe3, 0x39, 0x0d, 0x4a, 0xe3, 0x83, 0xc1, 0x1f, 0x45, 0x1e, 0x0b, 0x0c, 0xbe, 0xdb, 0xaf, 0xd4, 0x1f, 0x1c, 0x14, 0x36, 0xc8, 0x28, 0xe7, 0x3b, 0x9b, 0xbd, 0xb3, 0xbc, 0x75, 0x5e, 0x3a, 0x13, 0x66, 0xc1, 0x16, 0xee, 0x9d, 0xe6, 0x49, 0xfe, 0xb4, 0xcc, 0x1f, 0x06, 0xf9, 0x58, 0x27, 0xe4, 0x4f, 0x4f, 0x3e, 0x4b, 0x5f, 0x53, 0x38, 0x01, 0x43, 0xc9, 0x17, 0x5d, 0xa2, 0x6c, 0x7f, 0xf3, 0x80, 0x6d, 0x7a, 0x72, 0xbb, 0xa3, 0x16, 0xe0, 0x8e, 0x84, 0x46, 0x1b, 0x05, 0xf9, 0xc9, 0xa0, 0x1b, 0x7f, 0x1f, 0x73, 0x4c, 0x4f, 0xee, 0xe5, 0xf7, 0x4d, 0x24, 0x43, 0xbe, 0xf3, 0xe4, 0xc3, 0xaf, 0x79, 0x3d, 0x94, 0xff, 0x6b, 0x9e, 0xe4, 0x9e, 0xb0, 0xcb, 0xe6, 0x69, 0x7a, 0x00, 0xa1, 0x28, 0x7e, 0x71, 0x55, 0x72, 0x4f, 0xc4, 0x56, 0x0d, 0x6d, 0xf2, 0x22, 0xff, 0x3b, 0x7e, 0x17, 0x7d, 0x9b, 0x67, 0xa8, 0xf0, 0x61, 0x3f, 0x3e, 0xdb, 0xe4, 0xfb, 0x9a, 0x2f, 0xb9, 0xa7, 0xc4, 0x68, 0xd0, 0x46, 0xcc, 0x61, 0x9b, 0xcd, 0x54, 0x6d, 0x8d, 0xbc, 0x8e, 0x50, 0x78, 0xb1, 0xdc, 0x67, 0xdf, 0x7d, 0x50, 0xf1, 0x1e, 0xdc, 0x2b, 0x60, 0xae, 0x9a, 0x8e, 0xe5, 0x81, 0x5c, 0xdb, 0x2d, 0x95, 0x18, 0xdf, 0x7d, 0xe6, 0x21, 0xbf, 0xab, 0xce, 0x61, 0x7c, 0xf7, 0x41, 0xcf, 0xa5, 0x00, 0x50, 0xab, 0xe7, 0xaf, 0x53, 0xd6, 0x89, 0x1c, 0x36, 0xef, 0x1b, 0x7b, 0x27, 0xcf, 0xc6, 0xf6, 0xd7, 0x39, 0x4a, 0xa1, 0xa6, 0x69, 0xbd, 0x6d, 0xbd, 0xe2, 0x39, 0xf8, 0xf2, 0xc1, 0x7d, 0x94, 0xfa, 0xd1, 0x7e, 0xc5, 0x4f, 0x2b, 0xb3, 0xef, 0x3c, 0x89, 0xf5, 0xe3, 0x38, 0xbd, 0xd9, 0x0f, 0xda, 0x6a, 0x2c, 0x37, 0xb0, 0x57, 0xe4, 0xc3, 0x92, 0x6a, 0xe6, 0xaf, 0xb3, 0xad, 0xe3, 0xd8, 0x02, 0x8a, 0xa5, 0x5a, 0x9b, 0x7c, 0xd5, 0x9a, 0x54, 0x0a, 0x2a, 0x73, 0x01, 0x96, 0xc9, 0x29, 0x0a, 0x29, 0xc5, 0xf8, 0xd8, 0xe6, 0x54, 0x6c, 0xd1, 0xb5, 0x62, 0xef, 0xc2, 0xd8, 0x9b, 0x97, 0x21, 0x47, 0xbb, 0x2a, 0x66, 0xa1, 0x88, 0xd1, 0x5f, 0x1d, 0xb3, 0x48, 0xc4, 0xe4, 0x5c, 0x1d, 0xd3, 0x28, 0x62, 0x2c, 0x99, 0x18, 0xc2, 0x57, 0x77, 0xde, 0x51, 0xb2, 0x51, 0xb7, 0x7e, 0x72, 0x0f, 0xaf, 0x8d, 0x8c, 0x8d, 0xb3, 0x88, 0x38, 0xc2, 0x68, 0x76, 0xb8, 0x82, 0xa1, 0x66, 0x37, 0x18, 0xdb, 0xf5, 0x15, 0x3d, 0xc8, 0x57, 0xe5, 0x87, 0x5f, 0x63, 0x1c, 0x66, 0xd5, 0xd7, 0x6d, 0xa2, 0x9c, 0xb6, 0xf5, 0x2e, 0xf7, 0xcd, 0x44, 0x5d, 0x3e, 0x97, 0x86, 0x68, 0x6a, 0xa8, 0xaf, 0x3b, 0x97, 0xc3, 0xdd, 0xb6, 0xf5, 0xbe, 0xd3, 0x60, 0xa0, 0xb3, 0x9c, 0x6d, 0x5a, 0x7c, 0xb2, 0x38, 0x4c, 0xef, 0xac, 0x77, 0xb8, 0xa7, 0xfa, 0x33, 0x69, 0xb1, 0x94, 0x41, 0xb6, 0xcc, 0x58, 0x63, 0x8b, 0x67, 0x97, 0x81, 0xf5, 0x0f, 0x76, 0x9b, 0x05, 0x5c, 0x31, 0x69, 0xb2, 0x7b, 0x5c, 0xcc, 0x84, 0x4f, 0x8d, 0xb1, 0x2a, 0xeb, 0xd9, 0x77, 0x9a, 0xf4, 0x6e, 0xff, 0xa6, 0x5e, 0x9b, 0xfb, 0x0d, 0xea, 0xd9, 0x5d, 0x15, 0x7f, 0x23, 0x20, 0xcf, 0xa4, 0x13, 0xf4, 0xd3, 0xe4, 0xc3, 0x71, 0xf7, 0xd3, 0xa6, 0x5f, 0x24, 0x7f, 0xfa, 0xe5, 0xe6, 0xe4, 0xb3, 0x11, 0x18, 0x9d, 0xe8, 0xb0, 0xb8, 0x74, 0x94, 0xc6, 0x73, 0xc9, 0x08, 0x6c, 0x01, 0xb2, 0x4a, 0x89, 0x77, 0xc6, 0x68, 0x04, 0xba, 0x74, 0x4d, 0xee, 0x0a, 0x08, 0xbc, 0xfc, 0xee, 0x03, 0x9e, 0x4b, 0x45, 0xb0, 0xe6, 0x7a, 0x1a, 0x8f, 0xca, 0x3a, 0x11, 0x37, 0x26, 0x26, 0x5f, 0xc4, 0x10, 0xa6, 0xdd, 0x30, 0x36, 0xae, 0xb3, 0x80, 0xc6, 0xac, 0xd2, 0x9b, 0x89, 0x4b, 0xd5, 0xb5, 0x46, 0xc6, 0x1c, 0xf5, 0x6c, 0x09, 0x70, 0x26, 0x5b, 0xe1, 0x3b, 0x3a, 0x2d, 0x94, 0x3c, 0x3e, 0xcd, 0x97, 0x3c, 0x91, 0xb6, 0x03, 0x78, 0x6a, 0x5a, 0x63, 0xf2, 0xb4, 0xef, 0x1c, 0xc6, 0xcc, 0xce, 0xb2, 0x01, 0xa8, 0x5a, 0x08, 0x2b, 0x51, 0xad, 0xff, 0x49, 0x2f, 0x0e, 0xd1, 0x77, 0xc3, 0x20, 0xac, 0xfb, 0xf1, 0x89, 0xb7, 0x5d, 0xf8, 0x6b, 0x05, 0xf1, 0xbc, 0x1b, 0x39, 0x4b, 0x53, 0x73, 0x2f, 0x8e, 0xe0, 0x7d, 0xde, 0x5f, 0x24, 0xf7, 0x97, 0xf8, 0x94, 0xa5, 0xf7, 0xee, 0x7b, 0xf3, 0x87, 0x4e, 0x83, 0x53, 0x23, 0x2c, 0xc7, 0x39, 0xdc, 0x58, 0xf7, 0xb3, 0x54, 0x56, 0xa9, 0x8c, 0x73, 0x72, 0x2d, 0xa5, 0x5f, 0xc4, 0xe9, 0xc9, 0x3a, 0xa1, 0xe7, 0x5c, 0x72, 0x04, 0xb9, 0xef, 0x90, 0x8f, 0xec, 0xfd, 0xcd, 0x4e, 0x1e, 0x56, 0xe6, 0x65, 0x72, 0xb2, 0xed, 0x3c, 0x90, 0x72, 0x9c, 0xd3, 0x93, 0x3b, 0xc9, 0xea, 0x8c, 0x42, 0x3c, 0x2c, 0x65, 0x3d, 0x6f, 0xd7, 0xa5, 0x1a, 0x35, 0xfc, 0x02, 0xdb, 0xcf, 0xab, 0x52, 0xed, 0xe7, 0xed, 0xba, 0x64, 0x4b, 0xf1, 0x5e, 0x1b, 0xe6, 0x41, 0x6e, 0x72, 0x81, 0x38, 0x65, 0xd8, 0xde, 0x05, 0x95, 0x0e, 0x28, 0xff, 0xe5, 0x9e, 0x48, 0x11, 0x3f, 0xb9, 0x76, 0xf6, 0x45, 0x2c, 0x76, 0x07, 0x94, 0xe2, 0x5c, 0x85, 0x4f, 0x61, 0x80, 0xa7, 0x78, 0x8e, 0x38, 0x8a, 0x4f, 0x8f, 0x62, 0x49, 0x97, 0xf1, 0x7a, 0x89, 0x78, 0xd2, 0xf4, 0x7c, 0xb9, 0x8f, 0xd7, 0xfe, 0xbc, 0x56, 0x78, 0xbb, 0x7f, 0x3d, 0xd9, 0x98, 0x59, 0x90, 0x2a, 0xb9, 0x71, 0x00, 0xdb, 0xb1, 0x37, 0x6c, 0x43, 0xae, 0x8a, 0xe3, 0xbc, 0xcc, 0xf3, 0xcb, 0x03, 0x91, 0x02, 0x7e, 0x2e, 0x28, 0xf3, 0xfc, 0xef, 0x73, 0xc9, 0xbd, 0x11, 0xfd, 0xf3, 0x38, 0xfb, 0x45, 0xc5, 0xec, 0x73, 0x0c, 0xe7, 0xdb, 0xda, 0xd8, 0xa4, 0xec, 0x93, 0x81, 0x6c, 0xcb, 0x7a, 0x55, 0xf2, 0x12, 0xe4, 0xe3, 0xef, 0x47, 0xc8, 0x0b, 0x56, 0x25, 0x2f, 0xe3, 0x78, 0x27, 0x3b, 0x7d, 0x13, 0x6f, 0xf6, 0x92, 0x35, 0xeb, 0xe4, 0x0b, 0x19, 0x6b, 0xd6, 0x8a, 0xd8, 0x19, 0x87, 0xc4, 0x4b, 0x76, 0x1d, 0xe2, 0xa2, 0xe9, 0x2e, 0xea, 0xd5, 0x7d, 0xd3, 0x56, 0x25, 0x9f, 0x4d, 0xee, 0xcf, 0xc6, 0x1b, 0xea, 0x39, 0xbb, 0x51, 0x3b, 0x15, 0x73, 0x86, 0xbe, 0x6e, 0xf8, 0xe2, 0xb1, 0x8c, 0x75, 0x3e, 0xf6, 0x98, 0x20, 0x9e, 0xe5, 0xf4, 0x93, 0x56, 0xf8, 0x3e, 0x08, 0xcb, 0x6b, 0x40, 0xd1, 0x90, 0xc5, 0xbe, 0x64, 0x4f, 0xca, 0x9e, 0xd6, 0x17, 0xb5, 0xd1, 0xc7, 0x72, 0xd0, 0xff, 0x79, 0x1b, 0x7d, 0x33, 0xd9, 0x46, 0xdf, 0x32, 0xd5, 0x46, 0x5f, 0x38, 0x4b, 0x96, 0xf3, 0xc2, 0x82, 0xf4, 0x5f, 0x19, 0x54, 0x43, 0x11, 0x3f, 0x05, 0xc9, 0x2e, 0x17, 0xce, 0xf1, 0x2f, 0x90, 0xa6, 0x5e, 0xe1, 0x56, 0x1e, 0xf0, 0x6f, 0x0a, 0xbb, 0x29, 0xac, 0x12, 0xc3, 0x94, 0x8d, 0xe1, 0x8c, 0x0d, 0xbf, 0xab, 0x2c, 0xf7, 0xbd, 0x67, 0xf8, 0x7c, 0xcb, 0x7d, 0x30, 0x53, 0xb5, 0x13, 0x64, 0x27, 0xc9, 0x02, 0xa5, 0xcf, 0xa2, 0x2c, 0xab, 0x7d, 0x33, 0x3f, 0xcb, 0x6a, 0x1f, 0xbc, 0x29, 0xac, 0xf6, 0xc1, 0xc9, 0x8c, 0x54, 0xc9, 0x36, 0x74, 0xf6, 0xf2, 0x39, 0x32, 0xfb, 0x38, 0xbb, 0x7d, 0x20, 0xe4, 0x34, 0xbb, 0x2a, 0x77, 0x91, 0xf5, 0x31, 0xa7, 0x03, 0x8e, 0x91, 0xed, 0x38, 0xe1, 0x31, 0xf1, 0xa2, 0x8d, 0x6d, 0x3d, 0xe1, 0x7b, 0x46, 0x92, 0x22, 0x29, 0x0a, 0x65, 0x16, 0x1b, 0x7d, 0xb9, 0x9c, 0xb6, 0xed, 0x57, 0x40, 0x1e, 0x1a, 0xa8, 0x8d, 0xfc, 0x66, 0x46, 0xbc, 0x16, 0x85, 0x51, 0xe6, 0xee, 0xa4, 0xaf, 0xcf, 0x81, 0xce, 0xad, 0xe2, 0x78, 0x93, 0x9c, 0xa6, 0xd0, 0xae, 0x3f, 0x0f, 0x61, 0xe9, 0xc7, 0x48, 0xcb, 0x78, 0xcf, 0x42, 0xbc, 0xc0, 0xb9, 0x99, 0x4f, 0x6e, 0x03, 0x95, 0x4f, 0x94, 0x82, 0x1c, 0xdd, 0xf6, 0xc6, 0x69, 0xec, 0x19, 0xb2, 0xb8, 0xf6, 0x85, 0x4a, 0x4f, 0x97, 0xbc, 0x26, 0x65, 0x71, 0x4d, 0xd0, 0x59, 0x2d, 0x61, 0xd1, 0x8d, 0x9a, 0x11, 0x9f, 0xfe, 0x5c, 0x63, 0x3b, 0xf2, 0x34, 0x96, 0xba, 0x02, 0x8c, 0x13, 0x1d, 0x70, 0xbd, 0x03, 0x29, 0x48, 0x69, 0x4b, 0x8e, 0xfc, 0xfe, 0x34, 0xe4, 0x97, 0xae, 0xa0, 0xef, 0x5d, 0x93, 0x23, 0x7f, 0x38, 0xcd, 0x76, 0x0d, 0x70, 0xac, 0x4e, 0x59, 0xd3, 0x3c, 0xa0, 0x94, 0x81, 0x75, 0xc7, 0x2f, 0xc0, 0x1a, 0x01, 0xe8, 0x0b, 0xb6, 0x41, 0x71, 0x74, 0x6d, 0x70, 0x15, 0xfe, 0x76, 0x39, 0xcd, 0x73, 0x3f, 0x40, 0x0a, 0xb3, 0x38, 0x35, 0x28, 0x5d, 0x24, 0xca, 0xd7, 0x90, 0x3d, 0x55, 0x67, 0xde, 0x1c, 0x0a, 0xcb, 0xc3, 0x91, 0x43, 0x6f, 0x65, 0xe4, 0xbb, 0xd2, 0xaa, 0x23, 0x09, 0xe3, 0xdd, 0x0b, 0x56, 0x97, 0x51, 0xb5, 0x89, 0xef, 0x04, 0xb2, 0x65, 0xc5, 0x5f, 0x32, 0x14, 0xf1, 0x6f, 0x21, 0xff, 0x16, 0xf0, 0x6f, 0xda, 0x86, 0x02, 0x96, 0x62, 0x11, 0x50, 0x4c, 0x7d, 0x0a, 0xdb, 0xe3, 0x47, 0x1d, 0x9a, 0x2c, 0xfa, 0xc8, 0xe3, 0x7a, 0xae, 0x36, 0x45, 0xd3, 0xa4, 0x9b, 0xa5, 0xfd, 0x18, 0x32, 0xec, 0xd8, 0xcf, 0x05, 0x7c, 0xa9, 0xde, 0x2c, 0x79, 0x4d, 0x48, 0x48, 0xac, 0x87, 0x55, 0x89, 0x35, 0x6d, 0x69, 0x4f, 0x95, 0x5a, 0x8f, 0x90, 0xdd, 0x21, 0x7b, 0x29, 0xdc, 0xab, 0xda, 0x0a, 0x4c, 0x5b, 0xdd, 0xfb, 0xb0, 0x58, 0xb5, 0xba, 0x77, 0xf1, 0x2a, 0xab, 0x7b, 0xc2, 0x86, 0xd7, 0x08, 0xf2, 0xe1, 0xd2, 0x85, 0xbd, 0xd8, 0x03, 0xa9, 0x70, 0x2b, 0xdb, 0x16, 0x5c, 0x82, 0xba, 0xd2, 0xe9, 0xa3, 0x3f, 0x9c, 0x7b, 0x2e, 0x79, 0x7c, 0xf6, 0x27, 0x28, 0x91, 0xb5, 0x84, 0x65, 0xbb, 0x86, 0xb0, 0x5c, 0x22, 0x37, 0xad, 0xc3, 0xb2, 0x42, 0xf3, 0x89, 0xeb, 0xf0, 0x3c, 0x32, 0xcd, 0x9f, 0x3c, 0xc5, 0xdf, 0x14, 0x58, 0x52, 0xdf, 0x14, 0x20, 0xf6, 0xa6, 0x27, 0xcf, 0x39, 0xe9, 0xf7, 0x7d, 0xfe, 0x7d, 0xcf, 0x49, 0x3b, 0xd3, 0xd3, 0x93, 0x47, 0x44, 0xcd, 0x9d, 0x9a, 0x9d, 0xeb, 0x22, 0x3b, 0x04, 0xd7, 0x09, 0xed, 0xfa, 0x20, 0x61, 0x9d, 0x06, 0xb9, 0x81, 0x38, 0xed, 0xc3, 0xa6, 0x64, 0x68, 0x5d, 0x1b, 0xca, 0xc3, 0x58, 0xaf, 0xb3, 0x3f, 0xb4, 0x05, 0x63, 0x27, 0x8c, 0x8b, 0x5d, 0x85, 0xb8, 0xda, 0x62, 0xa3, 0xb7, 0x5e, 0x7c, 0x6b, 0x77, 0x4a, 0x2c, 0x6f, 0x37, 0xb1, 0x34, 0x5c, 0x14, 0x2d, 0xc0, 0x9e, 0xd8, 0xf9, 0x8f, 0x38, 0x93, 0x44, 0x72, 0xf0, 0xe9, 0x79, 0x7c, 0xba, 0x18, 0xed, 0x49, 0x73, 0xbb, 0x5d, 0x1f, 0x1c, 0xca, 0x96, 0xa3, 0x63, 0x13, 0x86, 0x7e, 0x91, 0xbc, 0xfc, 0x4e, 0x3f, 0x42, 0x77, 0x51, 0x8e, 0xdf, 0x94, 0x4c, 0x26, 0xd4, 0xef, 0x47, 0xe9, 0x04, 0xaf, 0xbb, 0xb9, 0x5f, 0xe8, 0x5e, 0x1f, 0xf4, 0xdb, 0x91, 0x4e, 0xd3, 0xf5, 0xb7, 0xab, 0x12, 0xfe, 0x0a, 0x5e, 0xd3, 0xe9, 0x4b, 0x79, 0x4f, 0xc7, 0x74, 0x6e, 0x94, 0xf4, 0xdd, 0x38, 0xbf, 0x35, 0xb1, 0x85, 0xb3, 0x9d, 0xb7, 0x11, 0x57, 0x7f, 0x3e, 0x05, 0x29, 0xec, 0x52, 0x21, 0xbd, 0xcb, 0x18, 0x27, 0x9b, 0x36, 0x9d, 0xd6, 0x9d, 0x58, 0x77, 0x4b, 0x0e, 0xf9, 0x30, 0xa1, 0x6f, 0xa6, 0xd8, 0x13, 0x82, 0x94, 0xa9, 0x07, 0xd3, 0x8b, 0x7a, 0xba, 0xaa, 0x1b, 0x70, 0xfc, 0xe3, 0x6c, 0xc4, 0x90, 0x55, 0x36, 0x0e, 0x8c, 0xc3, 0xc7, 0x0a, 0x27, 0xcc, 0x15, 0xd8, 0xda, 0x8a, 0xd8, 0xfe, 0x78, 0x5c, 0xec, 0x4a, 0x2c, 0x65, 0xeb, 0xef, 0xf7, 0xff, 0x7e, 0xff, 0xec, 0x8b, 0xc2, 0xd6, 0x6e, 0x37, 0x60, 0xbf, 0x9e, 0xc6, 0x19, 0xae, 0x0f, 0x69, 0x52, 0xdb, 0x69, 0xc2, 0x79, 0x33, 0x88, 0x33, 0xd8, 0x69, 0x94, 0x8d, 0xcf, 0x7e, 0x6d, 0x56, 0xf2, 0xfc, 0xd8, 0xde, 0xcc, 0x7c, 0x1b, 0xd2, 0x38, 0x90, 0xf9, 0x3a, 0xe4, 0x58, 0xdd, 0x46, 0x77, 0x53, 0xbd, 0xb9, 0x1e, 0x26, 0x44, 0x14, 0xd7, 0xf4, 0xe4, 0x31, 0x3a, 0x07, 0xed, 0xbb, 0xd0, 0x0f, 0x33, 0xfa, 0xf6, 0x81, 0x82, 0x90, 0x9e, 0xee, 0x27, 0xff, 0x24, 0x5f, 0xbd, 0xcf, 0x08, 0x5e, 0x7d, 0xd3, 0x3a, 0x2c, 0xf9, 0x18, 0x85, 0xee, 0x58, 0xb7, 0xe4, 0xc1, 0x53, 0xfd, 0x72, 0xfc, 0x8e, 0x24, 0x8e, 0xdd, 0xc1, 0xa6, 0xf5, 0x33, 0xb5, 0x6c, 0x97, 0x2d, 0x67, 0x0d, 0x78, 0xeb, 0x51, 0x3f, 0xf0, 0x86, 0x8f, 0xa4, 0x30, 0x79, 0xee, 0x12, 0xd3, 0x0b, 0x69, 0x03, 0x05, 0x7c, 0x5e, 0x83, 0xe6, 0xa3, 0x67, 0x84, 0x15, 0x2c, 0x14, 0x78, 0x3b, 0xa0, 0x48, 0x51, 0x35, 0x42, 0x57, 0x1b, 0xdb, 0x6f, 0x4c, 0xb5, 0x36, 0xe2, 0x84, 0x59, 0x84, 0x8b, 0x7b, 0x43, 0x0f, 0x57, 0xb7, 0x41, 0x8e, 0xd3, 0x9c, 0x8e, 0x59, 0x86, 0x78, 0x78, 0x58, 0xb5, 0x1c, 0x99, 0x98, 0xb6, 0x57, 0x7c, 0x71, 0xd2, 0xf0, 0x56, 0x31, 0x7c, 0x8e, 0x8d, 0xc7, 0xc4, 0xb4, 0x76, 0xe1, 0xdd, 0x58, 0xa9, 0x76, 0x8c, 0xb1, 0x72, 0xa9, 0x8e, 0xb7, 0x91, 0xb4, 0x44, 0x52, 0x06, 0xc6, 0x59, 0xc3, 0xe7, 0xb6, 0x91, 0x6d, 0x47, 0x1a, 0x87, 0x6c, 0x0b, 0xbc, 0x4a, 0x84, 0x8b, 0xf5, 0x3f, 0xd5, 0x6e, 0x1e, 0xd9, 0x0f, 0xaf, 0xe1, 0x70, 0xb2, 0xff, 0x88, 0xf2, 0x0a, 0x8e, 0xac, 0x8b, 0x28, 0xc7, 0x2e, 0x7d, 0xe3, 0x35, 0x94, 0x1b, 0x6e, 0xdd, 0x46, 0xbd, 0x64, 0xc5, 0x59, 0xa2, 0xca, 0x8e, 0x38, 0xc3, 0xf0, 0x65, 0xa9, 0xf0, 0x9d, 0x7d, 0xad, 0xb6, 0x59, 0xe2, 0xec, 0x14, 0x38, 0xb1, 0xcc, 0xe6, 0x81, 0xf2, 0x3e, 0x6a, 0x55, 0xe3, 0xc0, 0x8e, 0xed, 0xf0, 0xd4, 0x9d, 0xdc, 0x33, 0x69, 0x6b, 0x98, 0xa7, 0x08, 0x5b, 0x62, 0xad, 0x8f, 0xbf, 0x68, 0x52, 0xbf, 0xfc, 0x30, 0x96, 0x83, 0x24, 0x4d, 0x8d, 0x82, 0x71, 0x78, 0x16, 0x72, 0x8f, 0x98, 0x41, 0x7c, 0x67, 0x02, 0x6b, 0x31, 0xe4, 0x62, 0x4c, 0x93, 0xfd, 0xed, 0x09, 0xac, 0xc1, 0xb0, 0x13, 0xb4, 0x92, 0xfa, 0x5e, 0x59, 0xf6, 0x4a, 0xaa, 0x9d, 0x66, 0x84, 0x7b, 0x31, 0x6e, 0xef, 0x58, 0x8d, 0x54, 0xbf, 0x33, 0xb4, 0xeb, 0xec, 0x22, 0x8c, 0xdb, 0x2a, 0x64, 0x46, 0xe3, 0x4f, 0x14, 0x37, 0xea, 0x63, 0x4f, 0x4c, 0x46, 0xac, 0x92, 0x54, 0x8c, 0x2d, 0xd1, 0x2a, 0x0f, 0x90, 0x5c, 0xe6, 0x39, 0xad, 0x0b, 0x5d, 0x33, 0xf4, 0xae, 0x6b, 0x85, 0xea, 0x6b, 0xc7, 0x85, 0x62, 0x8f, 0xda, 0x80, 0x46, 0x94, 0xbe, 0x61, 0x8a, 0x07, 0x1e, 0x2b, 0x01, 0xfd, 0x3a, 0x7c, 0xee, 0x9b, 0xe2, 0x83, 0xcd, 0x4e, 0x89, 0x6c, 0xcf, 0xea, 0x82, 0xcc, 0x3d, 0xba, 0x90, 0xfb, 0x09, 0x4f, 0xb1, 0xb5, 0x88, 0xf1, 0xad, 0xc4, 0x35, 0x90, 0x37, 0xae, 0xed, 0x74, 0x1f, 0xa2, 0x37, 0x29, 0xb4, 0xc5, 0xd5, 0x03, 0xb1, 0x83, 0x67, 0x60, 0x6b, 0xc6, 0x67, 0x34, 0x86, 0xf8, 0x29, 0x04, 0x25, 0xe9, 0xd1, 0x0f, 0x1f, 0x87, 0xfc, 0xc9, 0x08, 0x01, 0x58, 0xe8, 0xed, 0xbd, 0x6a, 0xc8, 0xf1, 0x3a, 0xc0, 0x74, 0x1d, 0x7d, 0xef, 0x62, 0xc4, 0x74, 0x77, 0x7d, 0x91, 0x74, 0xa2, 0xfe, 0xb9, 0xc3, 0xef, 0x17, 0x85, 0xb6, 0x2a, 0x5c, 0x4b, 0xe9, 0x32, 0x69, 0x2d, 0xd1, 0x02, 0xad, 0x1f, 0x3b, 0x37, 0x97, 0xd7, 0x12, 0x9c, 0x25, 0x39, 0xd4, 0x02, 0xd8, 0x5a, 0x9a, 0xeb, 0xf4, 0x42, 0x6d, 0x89, 0x0f, 0x75, 0xcf, 0xea, 0xb2, 0x55, 0x48, 0xbd, 0x16, 0x61, 0x75, 0xbc, 0x79, 0x60, 0x8d, 0xee, 0x85, 0x78, 0x1b, 0xc8, 0xec, 0xe1, 0xfe, 0x3d, 0x5f, 0x60, 0x8d, 0xf1, 0x0a, 0xc5, 0x2c, 0x2a, 0x42, 0xe9, 0x18, 0x65, 0x41, 0xd9, 0x98, 0x1a, 0x37, 0x67, 0x5e, 0x42, 0xe9, 0x3d, 0x87, 0x53, 0xcd, 0xc6, 0xd6, 0xe6, 0xc5, 0x2a, 0x45, 0xcb, 0x95, 0x59, 0xa1, 0x4d, 0x53, 0xe6, 0x42, 0x27, 0xb6, 0x7f, 0x2b, 0xd1, 0xbf, 0xfd, 0x24, 0x5b, 0xe3, 0x49, 0xd8, 0x87, 0x99, 0x87, 0x91, 0x84, 0xbd, 0x85, 0x73, 0xad, 0xc0, 0x5c, 0x1c, 0x33, 0xa5, 0x52, 0x95, 0xbc, 0x7b, 0x38, 0x7c, 0x43, 0x68, 0x8b, 0xf7, 0x67, 0x6a, 0xcc, 0x4f, 0x68, 0x6d, 0x4a, 0x3c, 0x97, 0x14, 0xb1, 0x95, 0x72, 0xac, 0xc1, 0x4e, 0x2d, 0xb9, 0x4b, 0xf1, 0xe2, 0x0c, 0x0a, 0x9c, 0xe3, 0x29, 0x61, 0xdd, 0x95, 0x7a, 0x8b, 0x46, 0x07, 0xc5, 0x94, 0x00, 0xd5, 0x6f, 0xf3, 0x86, 0x7e, 0x44, 0x36, 0xf1, 0x38, 0xd5, 0x2f, 0x42, 0x5b, 0xb2, 0xf9, 0x1d, 0xe7, 0xa7, 0xd3, 0x71, 0xa9, 0xb0, 0x17, 0x9d, 0x50, 0x42, 0x25, 0x2f, 0x51, 0x7c, 0xa1, 0x4d, 0xb5, 0xee, 0x74, 0xf8, 0xb3, 0x22, 0x6d, 0x19, 0xa4, 0xea, 0xe0, 0xd0, 0x9d, 0x22, 0xd4, 0x91, 0xe1, 0xa1, 0xdb, 0xd5, 0x32, 0x9d, 0x30, 0xf3, 0x0e, 0x8b, 0x37, 0xea, 0xd4, 0x3b, 0xb5, 0x6a, 0xcd, 0xff, 0x22, 0xe0, 0xab, 0xed, 0x81, 0xd3, 0x3d, 0x52, 0xbd, 0xbe, 0x1b, 0x6c, 0x3a, 0x25, 0xa8, 0x5c, 0x3f, 0xb4, 0x01, 0xc7, 0x96, 0x07, 0xc7, 0x6d, 0x00, 0x2a, 0x08, 0x52, 0xbb, 0x1b, 0xc3, 0x1e, 0x72, 0x82, 0xcd, 0x17, 0xfa, 0x51, 0x0d, 0xf8, 0xce, 0x27, 0x2f, 0xbd, 0xf1, 0x86, 0xd3, 0x44, 0x6f, 0x77, 0xb8, 0xc1, 0x8b, 0xef, 0x67, 0xb3, 0xde, 0x83, 0xf8, 0x7e, 0x32, 0xf5, 0xee, 0xcc, 0xb9, 0x43, 0xe7, 0x8d, 0xde, 0xe1, 0x84, 0x26, 0xfe, 0xbd, 0x0b, 0x7f, 0xe9, 0xfc, 0x8f, 0x96, 0x6b, 0xff, 0x73, 0x68, 0x4b, 0xd3, 0xfa, 0xe6, 0x0d, 0xf3, 0x1f, 0x42, 0x18, 0x5c, 0x64, 0x75, 0x04, 0xf9, 0x4e, 0x79, 0x4c, 0xb7, 0x83, 0xfc, 0xcb, 0xf4, 0x94, 0x4a, 0xf6, 0x00, 0x59, 0x03, 0xf3, 0xfe, 0xac, 0xb3, 0x52, 0xd0, 0x2a, 0xf5, 0x9f, 0x77, 0x3b, 0x74, 0x36, 0x0e, 0x78, 0xbd, 0xa9, 0xbe, 0x3e, 0xbd, 0xb7, 0x79, 0x20, 0xe8, 0x8d, 0xe4, 0xf3, 0x9e, 0xc0, 0xc4, 0xd0, 0x96, 0xe6, 0x81, 0xd2, 0x3b, 0x83, 0x8f, 0xa0, 0xb6, 0xf9, 0x6a, 0x49, 0x9d, 0x9d, 0xbe, 0x3a, 0x48, 0xa5, 0xdb, 0x8e, 0xe9, 0x30, 0x6f, 0xa4, 0x7b, 0x4a, 0x0f, 0x5c, 0x48, 0x86, 0x61, 0x03, 0x8e, 0x58, 0xbc, 0xf3, 0x18, 0xb9, 0x2b, 0xb4, 0x45, 0x8e, 0x27, 0x21, 0x99, 0xa4, 0xef, 0x8f, 0x9f, 0x44, 0x5e, 0x18, 0x01, 0xed, 0xd9, 0x14, 0x6d, 0x34, 0x33, 0x05, 0x68, 0x8f, 0xa7, 0x28, 0x62, 0xcc, 0xcc, 0xb4, 0x85, 0xe7, 0x03, 0x61, 0xc3, 0x99, 0xe3, 0xa7, 0xb5, 0x13, 0xc5, 0xd0, 0x3a, 0x3f, 0xad, 0x5b, 0x86, 0xe5, 0x1f, 0xed, 0xbb, 0x2d, 0x00, 0x2f, 0x20, 0x2d, 0xff, 0x44, 0x8c, 0xe3, 0xf1, 0x9c, 0xc0, 0x5b, 0x5f, 0xca, 0x3d, 0xeb, 0x90, 0x4b, 0x72, 0x30, 0xd5, 0xcc, 0x58, 0xc3, 0x78, 0x1f, 0x3f, 0x0e, 0xda, 0x91, 0x00, 0xd9, 0x7f, 0xb8, 0xef, 0x70, 0x9f, 0x22, 0xa3, 0xe6, 0xdd, 0xc7, 0xeb, 0x3e, 0xfa, 0xaf, 0xd2, 0x77, 0xca, 0xe5, 0xe2, 0x1c, 0x1c, 0xbe, 0xd1, 0x1a, 0x87, 0x8b, 0xbf, 0x09, 0xd4, 0x92, 0x1f, 0x25, 0x88, 0x37, 0xa2, 0x62, 0x3a, 0xd5, 0x0d, 0xa5, 0x53, 0x57, 0x42, 0x17, 0x04, 0xba, 0xe8, 0x0c, 0x68, 0x55, 0x69, 0x83, 0xc2, 0xeb, 0x49, 0x3a, 0xf2, 0x38, 0xfe, 0x94, 0x6d, 0x1a, 0x74, 0xf1, 0x9c, 0xbc, 0x0f, 0x71, 0x5b, 0x17, 0xda, 0x24, 0xbe, 0xcd, 0x6c, 0x1e, 0xe0, 0x58, 0xd4, 0xff, 0xff, 0x7d, 0x9b, 0x98, 0x7b, 0xcb, 0xf6, 0x4f, 0x02, 0x94, 0x67, 0x0c, 0x0e, 0xf7, 0xa2, 0x07, 0x15, 0xf3, 0x3b, 0xfd, 0x0e, 0xb7, 0xe7, 0x2c, 0xe4, 0xd1, 0x6a, 0x29, 0xe2, 0x66, 0xc7, 0x51, 0x88, 0xe0, 0x84, 0x88, 0x21, 0xad, 0x18, 0xf2, 0x3e, 0x74, 0xe1, 0x3c, 0x84, 0x65, 0x21, 0x1d, 0xcc, 0xc4, 0xb0, 0x15, 0xa9, 0x30, 0xb2, 0xe5, 0x8f, 0x61, 0x7e, 0x0c, 0xeb, 0xc8, 0x4e, 0x57, 0x4b, 0x65, 0x75, 0x65, 0xa7, 0x22, 0xbe, 0x5f, 0xe1, 0x84, 0x9a, 0x9d, 0x2b, 0x20, 0xa7, 0x15, 0x60, 0x04, 0x9f, 0x6b, 0xf1, 0xd9, 0x8c, 0xcf, 0x17, 0x2a, 0x2c, 0x3b, 0x9b, 0xf0, 0x7e, 0x7a, 0xc7, 0x0a, 0x90, 0xf1, 0x7e, 0x22, 0xe6, 0x1a, 0x8f, 0x2d, 0xde, 0xbf, 0x01, 0x78, 0xf5, 0xeb, 0xa4, 0x91, 0x5b, 0xf8, 0xd7, 0xfa, 0xf5, 0x26, 0xc8, 0xff, 0x3a, 0xe6, 0x80, 0x82, 0xaf, 0xcc, 0x82, 0x42, 0x7c, 0xca, 0x81, 0x22, 0xfc, 0x35, 0x83, 0x0d, 0x7f, 0x2d, 0x30, 0x11, 0x7f, 0xad, 0x60, 0xc7, 0xdf, 0x7c, 0x28, 0xc6, 0xdf, 0x02, 0x28, 0xc1, 0xdf, 0x42, 0x98, 0xf4, 0x75, 0x3a, 0xd5, 0xec, 0xf8, 0x0a, 0x4a, 0xbc, 0x70, 0x23, 0xef, 0x4f, 0xea, 0xd9, 0xca, 0x2b, 0x8d, 0xf8, 0x50, 0x39, 0x49, 0x73, 0x80, 0x12, 0x02, 0xbf, 0x4f, 0x39, 0x32, 0xdd, 0x0d, 0x65, 0x34, 0x92, 0x3a, 0x21, 0xbf, 0x1c, 0xa6, 0x39, 0x25, 0xfc, 0x2d, 0x45, 0x89, 0x12, 0x9c, 0x06, 0xc4, 0x5c, 0x39, 0x49, 0xb6, 0xae, 0x72, 0x94, 0x67, 0xe9, 0x37, 0x9f, 0xf3, 0x99, 0x99, 0x62, 0x9d, 0x42, 0x7f, 0x98, 0x8d, 0xf8, 0x24, 0xe9, 0x64, 0xea, 0x43, 0x47, 0x69, 0x2c, 0x3b, 0xf8, 0x7c, 0x6f, 0x55, 0x53, 0x5f, 0xcc, 0x8a, 0x1a, 0x39, 0x24, 0x1a, 0x44, 0xfb, 0x82, 0xd8, 0x83, 0x51, 0xd2, 0x24, 0xbb, 0x88, 0x8e, 0x6c, 0x73, 0x49, 0x13, 0x0e, 0x1b, 0x6d, 0x73, 0x63, 0x0d, 0x6c, 0x55, 0xb5, 0x1e, 0xb5, 0x79, 0xbd, 0x4d, 0x3e, 0xd4, 0x97, 0x5a, 0xa1, 0xb1, 0xbb, 0x7f, 0xcb, 0xb4, 0x81, 0x74, 0xaf, 0xc7, 0x11, 0xf1, 0x53, 0xbb, 0xd6, 0xee, 0xbb, 0x5a, 0x0e, 0xa3, 0x6f, 0xfb, 0x6f, 0x73, 0xc3, 0x0b, 0xa8, 0x2f, 0x20, 0x85, 0x22, 0x55, 0x3e, 0xf1, 0xcb, 0xd3, 0xf0, 0x53, 0xa4, 0x80, 0x33, 0x2a, 0x47, 0x7e, 0x75, 0xee, 0x19, 0x18, 0x42, 0xa9, 0xec, 0xcd, 0x39, 0x9f, 0x30, 0x0f, 0xc2, 0x12, 0x86, 0x1e, 0x44, 0xca, 0x78, 0x44, 0xf1, 0xcd, 0x5f, 0xe7, 0x1a, 0xc4, 0xfe, 0xcb, 0xa1, 0x59, 0x00, 0xe7, 0xe2, 0x47, 0x6a, 0x07, 0xe7, 0x3f, 0xd8, 0x38, 0xf0, 0xe2, 0x08, 0x9c, 0x8e, 0x1c, 0xad, 0x40, 0x3d, 0xd2, 0x69, 0xe2, 0x56, 0xde, 0x29, 0x5a, 0x49, 0x39, 0x9b, 0xe3, 0xaa, 0x54, 0x8b, 0x63, 0x8e, 0xbe, 0x11, 0xe7, 0x15, 0x0b, 0x9e, 0x87, 0xf0, 0xed, 0x29, 0x94, 0xe5, 0xdf, 0xc9, 0xcc, 0x43, 0x88, 0xf1, 0xa7, 0xf0, 0x7a, 0x82, 0xcb, 0x58, 0x31, 0x87, 0xe7, 0x8a, 0xd0, 0x23, 0x0e, 0xfa, 0x3e, 0x7c, 0xcc, 0x9c, 0x0b, 0x4a, 0x68, 0xd7, 0xa9, 0x33, 0x98, 0xff, 0x59, 0xc5, 0x7d, 0x1d, 0x79, 0x73, 0x27, 0x9b, 0xa5, 0xcf, 0x4e, 0x6e, 0x40, 0x39, 0x45, 0xdc, 0x0b, 0xe8, 0xae, 0x90, 0x24, 0xf2, 0xd4, 0x64, 0x37, 0x4a, 0x4d, 0x14, 0xba, 0x02, 0x9e, 0x82, 0x62, 0x2f, 0xf9, 0xab, 0x7f, 0x76, 0xea, 0x32, 0x28, 0x06, 0x2d, 0xef, 0x24, 0x8a, 0xfd, 0xa4, 0x45, 0xb3, 0x87, 0x4f, 0xed, 0x61, 0x88, 0x4a, 0xd3, 0x7b, 0x50, 0x5b, 0x32, 0xd6, 0xa3, 0x4f, 0x3f, 0xc8, 0x6f, 0x15, 0xe9, 0xbd, 0xa8, 0x2d, 0x63, 0xad, 0x47, 0x9f, 0x7e, 0x9a, 0x43, 0x66, 0xa6, 0xf7, 0xa4, 0xb6, 0x64, 0x6c, 0x49, 0x9f, 0xfe, 0x1d, 0xbf, 0xd5, 0xa7, 0x76, 0xba, 0x66, 0x0f, 0xbf, 0x63, 0xe7, 0x90, 0x60, 0x56, 0x7e, 0x91, 0x26, 0xa4, 0xa6, 0x11, 0xa5, 0xb1, 0x4d, 0x23, 0xb6, 0x30, 0x6d, 0x67, 0x0b, 0xd3, 0x93, 0xd8, 0xc2, 0x74, 0x11, 0x5b, 0x98, 0xce, 0x67, 0xab, 0xd2, 0x66, 0xb6, 0x33, 0x4d, 0xbd, 0x5d, 0x8f, 0xd2, 0x38, 0xef, 0x75, 0x9d, 0xda, 0x46, 0x96, 0x06, 0x4f, 0x55, 0x37, 0x0e, 0x84, 0x2d, 0x8c, 0xc5, 0x81, 0xd0, 0x23, 0xcd, 0x63, 0x4f, 0x4f, 0xd2, 0xfe, 0x23, 0xa5, 0x29, 0x68, 0x1e, 0x08, 0x9f, 0xa1, 0xef, 0x1b, 0x3f, 0x6b, 0x47, 0x10, 0x65, 0x40, 0x5a, 0x33, 0x33, 0xc7, 0xa6, 0x0c, 0xfd, 0x02, 0x8c, 0xa8, 0xfd, 0x9c, 0x98, 0x86, 0xd2, 0x60, 0xf2, 0xd4, 0xd7, 0x56, 0x41, 0x21, 0xca, 0xce, 0xab, 0x60, 0x62, 0xf2, 0x0c, 0x86, 0x14, 0xa3, 0x0c, 0xbd, 0x0a, 0x6c, 0xc9, 0x0b, 0xf8, 0x5b, 0x92, 0xfc, 0x08, 0x7f, 0x4b, 0x93, 0x17, 0xf1, 0xb7, 0x3c, 0x79, 0x09, 0x63, 0x5d, 0xc9, 0xcb, 0xf8, 0x5b, 0x89, 0x7a, 0x17, 0xca, 0xd8, 0x28, 0x0b, 0x9e, 0xc8, 0x7c, 0x87, 0x4d, 0xd2, 0x5a, 0xca, 0xc6, 0x35, 0xaf, 0x22, 0xd0, 0x9e, 0x5c, 0x01, 0xea, 0xc0, 0x45, 0x3c, 0xdb, 0x8a, 0x5d, 0x32, 0xea, 0xbf, 0x07, 0x95, 0x69, 0x50, 0x94, 0x1e, 0xf5, 0xf5, 0xa8, 0xb9, 0x91, 0x86, 0xe9, 0x86, 0x62, 0x91, 0x82, 0xed, 0x3f, 0x39, 0x49, 0xcb, 0x6c, 0x00, 0x61, 0x15, 0x90, 0x77, 0x7a, 0xb9, 0x45, 0xc1, 0x15, 0xa8, 0x03, 0xd7, 0x72, 0x79, 0xb9, 0x6a, 0x79, 0x2b, 0xe1, 0x41, 0xb2, 0x35, 0x4e, 0x16, 0x14, 0xd3, 0x65, 0xba, 0xc9, 0x5a, 0x79, 0x3a, 0x05, 0xc6, 0xfc, 0xe8, 0x69, 0x58, 0x2f, 0xec, 0xd4, 0x5e, 0x95, 0xb6, 0x5c, 0x8d, 0xef, 0x27, 0x9b, 0xe4, 0x5e, 0x2c, 0x3f, 0x65, 0x95, 0x83, 0x7d, 0x8f, 0x16, 0x88, 0x2f, 0xa5, 0x09, 0xcb, 0xc9, 0x32, 0x3b, 0x34, 0x0e, 0x44, 0xbd, 0x63, 0xca, 0xc6, 0xd2, 0x6c, 0xde, 0xec, 0xf2, 0x46, 0x37, 0xaa, 0xa9, 0x83, 0x53, 0xbc, 0x50, 0xc0, 0x6b, 0x8b, 0x74, 0x5a, 0xa2, 0xe8, 0xa0, 0x0a, 0x41, 0xaa, 0xff, 0x68, 0xbf, 0x9f, 0x57, 0xa6, 0xe8, 0xdb, 0xd2, 0xe5, 0x50, 0x1c, 0xc9, 0x57, 0x1c, 0x10, 0xdf, 0xb4, 0x0d, 0xd6, 0xef, 0xf8, 0x39, 0x14, 0x2d, 0x35, 0x86, 0x21, 0x79, 0x2f, 0x61, 0xd2, 0xeb, 0x1e, 0x0b, 0x0b, 0x95, 0xd5, 0x09, 0x19, 0x9e, 0x69, 0x87, 0x68, 0xed, 0x17, 0x83, 0x28, 0xf1, 0x22, 0x41, 0xa4, 0xc2, 0xd2, 0x3f, 0x1e, 0x16, 0x75, 0xd5, 0xa7, 0xc8, 0x41, 0xb6, 0x07, 0xdb, 0x10, 0x1e, 0xb7, 0x7d, 0x25, 0x78, 0xe7, 0x0e, 0x27, 0xd7, 0xcf, 0x19, 0x4e, 0x5c, 0x0c, 0x97, 0xfe, 0xf3, 0xeb, 0x48, 0xbb, 0x84, 0xfd, 0x49, 0xf8, 0x5b, 0x19, 0x11, 0x38, 0xd9, 0xca, 0x12, 0x96, 0x19, 0x75, 0xbb, 0xdc, 0xd0, 0x23, 0xf4, 0x1c, 0xc9, 0xb1, 0x37, 0x05, 0x37, 0x47, 0x0e, 0xa5, 0xbe, 0x3d, 0xef, 0x01, 0xa2, 0x50, 0x61, 0xad, 0x85, 0xfa, 0x30, 0xb5, 0x47, 0x3a, 0xe5, 0x27, 0xd7, 0xda, 0x37, 0xc5, 0x1e, 0x78, 0x72, 0xde, 0x4a, 0xa8, 0xf4, 0xae, 0x84, 0x0a, 0x7c, 0x0e, 0xf3, 0x1e, 0xf0, 0xdd, 0x25, 0x82, 0x76, 0xf7, 0x07, 0xde, 0x9d, 0x59, 0x53, 0x36, 0x1d, 0xf9, 0x43, 0x7d, 0x09, 0x69, 0x2f, 0xd3, 0x50, 0x7b, 0x49, 0xd9, 0x0d, 0xd7, 0xdb, 0xea, 0x85, 0xbd, 0x61, 0x47, 0xda, 0x72, 0xb8, 0xdc, 0x42, 0xb6, 0xa6, 0x51, 0xf6, 0xa9, 0x27, 0x1b, 0xbd, 0x48, 0x31, 0x55, 0x59, 0xa7, 0x6e, 0xd4, 0x55, 0x96, 0xb4, 0xb7, 0x82, 0x52, 0xa7, 0x79, 0xee, 0xf0, 0xc8, 0x9e, 0x2c, 0xdb, 0xe0, 0x97, 0x91, 0x46, 0xc5, 0x7a, 0x83, 0x39, 0x65, 0x19, 0x1c, 0x67, 0xdc, 0xd2, 0xf9, 0xb4, 0xd2, 0x60, 0x4e, 0xa7, 0xc3, 0x79, 0x88, 0xd2, 0x35, 0x66, 0xd2, 0xad, 0x00, 0x63, 0x67, 0xce, 0xa1, 0xa7, 0x79, 0xfe, 0x30, 0x8f, 0xb1, 0x35, 0x9e, 0x3b, 0xf4, 0x34, 0xeb, 0x4c, 0x64, 0x3b, 0x7f, 0x2b, 0xfd, 0x0a, 0x28, 0xa6, 0xe7, 0x23, 0x7f, 0x60, 0xaf, 0x01, 0xb7, 0x79, 0x60, 0x12, 0xce, 0x31, 0x64, 0xd1, 0x96, 0x63, 0xa6, 0x15, 0x57, 0xb8, 0xa7, 0xcd, 0xc6, 0x70, 0x37, 0x38, 0x30, 0xfe, 0x32, 0xc6, 0x2b, 0xac, 0x8f, 0x97, 0xbc, 0xfc, 0xf2, 0xa2, 0x78, 0xe7, 0xe5, 0x3d, 0x71, 0xd4, 0x1d, 0x8a, 0x78, 0xff, 0x6c, 0xa3, 0x58, 0x0d, 0xca, 0xdb, 0x45, 0xeb, 0x3f, 0x58, 0x1e, 0x6a, 0x9c, 0xb4, 0x6e, 0x84, 0xb4, 0x5e, 0xf4, 0xcb, 0xf7, 0xe1, 0xa9, 0x96, 0xc6, 0xb2, 0x95, 0xd0, 0x42, 0xb2, 0xca, 0x04, 0x63, 0xd8, 0xfd, 0x4f, 0x07, 0xa2, 0x35, 0xc1, 0x76, 0xec, 0xc9, 0x4a, 0xfc, 0xad, 0x8c, 0x94, 0xd3, 0x7a, 0x0f, 0xcd, 0xe6, 0xdc, 0x97, 0xb4, 0x82, 0xa9, 0xb1, 0xf9, 0x43, 0x3f, 0x12, 0xa5, 0xe0, 0x8c, 0x25, 0xe8, 0xe5, 0xa7, 0x82, 0x92, 0xc3, 0xfa, 0xb2, 0x05, 0xc1, 0xad, 0x91, 0xdd, 0xc8, 0xa7, 0x0a, 0x78, 0x07, 0x7d, 0x0c, 0x2d, 0x52, 0x9e, 0x68, 0x11, 0xce, 0x52, 0x45, 0x6f, 0x3c, 0x0d, 0xdb, 0xc3, 0x96, 0xb1, 0x79, 0x3d, 0xef, 0x43, 0x8b, 0x2d, 0x98, 0x59, 0x07, 0x2e, 0x29, 0xc5, 0x39, 0x95, 0x30, 0x7b, 0xb6, 0x33, 0x37, 0x85, 0xb1, 0xb9, 0xc3, 0x57, 0x6a, 0x19, 0x6b, 0xd6, 0xe0, 0xba, 0x68, 0x37, 0x6a, 0x96, 0x67, 0x79, 0x2d, 0x16, 0x35, 0x0b, 0xa4, 0x6b, 0x33, 0xf6, 0x80, 0x58, 0x73, 0xdf, 0x8f, 0xdc, 0x8b, 0xd6, 0xda, 0x4f, 0xd3, 0x5a, 0x3b, 0xde, 0x4f, 0xe1, 0xfd, 0xa8, 0xca, 0x91, 0xf6, 0xa7, 0x38, 0x12, 0x97, 0x7d, 0x02, 0xfb, 0x27, 0xb5, 0xda, 0x7e, 0x5a, 0xed, 0xc9, 0xe3, 0x38, 0x6f, 0x3d, 0xad, 0xae, 0xb4, 0x63, 0x18, 0xe2, 0xf4, 0x24, 0xd8, 0xf0, 0xf7, 0x4d, 0xb0, 0xd3, 0xfc, 0x1d, 0x76, 0x90, 0x8c, 0x76, 0xe6, 0xf1, 0x2c, 0xdb, 0xea, 0xc7, 0x29, 0x97, 0x33, 0x45, 0x67, 0xaa, 0x75, 0xf5, 0xff, 0xb1, 0x5f, 0x21, 0xcf, 0x18, 0x3d, 0xc9, 0x6d, 0xd7, 0xb2, 0xae, 0xde, 0x65, 0x3b, 0xfc, 0x34, 0x52, 0x29, 0xdb, 0x58, 0x77, 0xca, 0xa9, 0x55, 0x3d, 0x1c, 0x3b, 0x15, 0xd1, 0x1c, 0x5a, 0x4f, 0x0b, 0xed, 0x1a, 0x39, 0xdd, 0x38, 0x80, 0x3d, 0x54, 0x9a, 0x65, 0x45, 0x9d, 0xc3, 0xaf, 0x58, 0xb3, 0xb0, 0xa4, 0x6d, 0x1c, 0xb8, 0xb6, 0x6d, 0x75, 0xd4, 0x8b, 0xf7, 0xb1, 0x8d, 0x5a, 0x27, 0x2c, 0x2b, 0xed, 0x80, 0x36, 0xc5, 0x4f, 0x3a, 0x3d, 0x69, 0xc4, 0xa4, 0xd7, 0x3b, 0xe6, 0xd2, 0xca, 0xe2, 0x9a, 0x96, 0x23, 0x03, 0xdf, 0x5a, 0x67, 0xf3, 0x21, 0x9f, 0x89, 0xd9, 0x50, 0x6a, 0x65, 0x0a, 0x78, 0x15, 0x25, 0xd5, 0x1d, 0xb4, 0x6a, 0xa6, 0x58, 0x37, 0xf5, 0xf6, 0x14, 0xec, 0x8e, 0xb7, 0x82, 0xfc, 0x64, 0x71, 0x2d, 0x58, 0x77, 0xd3, 0xa8, 0xe9, 0xc2, 0xa7, 0xeb, 0xf8, 0xa9, 0x07, 0x9f, 0x34, 0xbb, 0x49, 0x37, 0xeb, 0x0b, 0x62, 0x5e, 0x0c, 0x69, 0x88, 0x25, 0x91, 0x4b, 0x37, 0x22, 0x0e, 0x51, 0x17, 0x47, 0xec, 0xe5, 0xcd, 0x1d, 0xfe, 0xe4, 0x21, 0xc6, 0x69, 0x07, 0x34, 0x96, 0xd1, 0xfa, 0xdc, 0x06, 0xd4, 0x4e, 0xf2, 0xd2, 0x54, 0xdf, 0x01, 0xf3, 0x79, 0xa5, 0x80, 0xec, 0xeb, 0xe7, 0xa9, 0xe9, 0x62, 0x94, 0xae, 0x51, 0x4d, 0x87, 0x70, 0xf5, 0xd0, 0x0e, 0xc0, 0x22, 0x3a, 0x57, 0xd1, 0xe0, 0xc4, 0x58, 0xa0, 0xf3, 0x19, 0xeb, 0x7d, 0xef, 0x25, 0x2f, 0x3a, 0x67, 0xc3, 0x7c, 0xf5, 0xf9, 0x02, 0x3e, 0x37, 0x13, 0x9d, 0x73, 0x0f, 0x77, 0x40, 0x59, 0x56, 0x0f, 0x93, 0x85, 0x90, 0xd4, 0xea, 0x85, 0x13, 0xda, 0xd4, 0x5a, 0x5a, 0x7a, 0xcc, 0xc7, 0x69, 0xe5, 0x42, 0x8f, 0x61, 0x3d, 0x0c, 0x8f, 0x9d, 0xe1, 0x09, 0xb0, 0x1f, 0xb4, 0x1a, 0x4e, 0x1b, 0xc6, 0xb4, 0x4e, 0x68, 0x11, 0x7c, 0x73, 0x7a, 0x3e, 0x4a, 0xdb, 0xf4, 0x3d, 0xd7, 0x66, 0x0c, 0x8b, 0xe1, 0xd5, 0x2d, 0xc2, 0xcb, 0x37, 0x95, 0xd3, 0x5a, 0xc1, 0x43, 0x53, 0xda, 0x50, 0xca, 0xdc, 0x48, 0xd4, 0xe1, 0xea, 0x00, 0xaf, 0xd3, 0x18, 0x73, 0x60, 0x39, 0x8f, 0xa9, 0xab, 0x56, 0xf7, 0x86, 0xb6, 0x62, 0x68, 0x3d, 0x86, 0x96, 0x8a, 0x50, 0x95, 0x82, 0x89, 0x8b, 0xe6, 0x30, 0x6f, 0xdc, 0x35, 0xfc, 0x54, 0xe3, 0xc0, 0x6d, 0x64, 0x09, 0xf3, 0x25, 0xfc, 0x0d, 0xc2, 0xe0, 0x14, 0xc4, 0x18, 0xec, 0xa1, 0x15, 0xfc, 0xe8, 0xa2, 0x1e, 0xe3, 0xee, 0xe7, 0xc0, 0xdf, 0xba, 0xa0, 0x0c, 0x25, 0xb8, 0xb9, 0xe7, 0x65, 0x6f, 0x6d, 0x29, 0xbc, 0xd8, 0x54, 0x1f, 0xae, 0x62, 0xff, 0x4e, 0x71, 0x94, 0x40, 0xab, 0x8a, 0x50, 0x5a, 0xc5, 0x5f, 0x89, 0x7f, 0x01, 0x79, 0x84, 0xb1, 0x1e, 0x86, 0xf4, 0xa9, 0x55, 0x5d, 0x01, 0x69, 0x59, 0x4b, 0x13, 0xed, 0x92, 0xd3, 0xda, 0xe1, 0x8b, 0xa8, 0x49, 0xe8, 0x2b, 0x02, 0x0b, 0x1e, 0xd8, 0xf1, 0x40, 0xc7, 0x2e, 0xe4, 0x7a, 0xb9, 0x04, 0xe5, 0x94, 0x9f, 0x84, 0xb6, 0x06, 0xba, 0x25, 0xa0, 0x77, 0xe6, 0xb6, 0x0b, 0xe8, 0xa9, 0xac, 0x96, 0x38, 0x30, 0x59, 0xce, 0xc7, 0x37, 0x83, 0x1a, 0x33, 0xcc, 0xf8, 0xfa, 0x01, 0x73, 0xe7, 0x4d, 0x6a, 0xd8, 0x76, 0xef, 0xcf, 0xc8, 0x6e, 0x8e, 0xcb, 0x09, 0x8b, 0x78, 0xdd, 0xa7, 0x40, 0x84, 0x3b, 0x1a, 0xc4, 0x5c, 0x6c, 0xab, 0x67, 0xd9, 0xdf, 0x9e, 0x99, 0x99, 0x6f, 0x31, 0xab, 0xcf, 0x5b, 0xbf, 0x4a, 0xa3, 0xbf, 0x62, 0x4a, 0x03, 0xf4, 0x35, 0xb5, 0x41, 0x25, 0xcf, 0xc2, 0xe5, 0x84, 0x15, 0xc1, 0x73, 0xc2, 0x36, 0xb6, 0xc9, 0xdf, 0x06, 0xae, 0x1d, 0xfd, 0xd1, 0xc2, 0xaf, 0xba, 0xc1, 0x15, 0xb6, 0xaa, 0x21, 0xe5, 0x18, 0xa2, 0xc5, 0x90, 0x72, 0xc5, 0x37, 0x66, 0x2f, 0x01, 0x46, 0xbd, 0xdc, 0x4b, 0x79, 0x4e, 0xad, 0xcd, 0x9f, 0x65, 0x67, 0x5e, 0xc8, 0x44, 0xd5, 0xc2, 0xa7, 0x48, 0x4a, 0x06, 0x52, 0xc8, 0xaa, 0xd6, 0x54, 0xc8, 0x2f, 0x49, 0xed, 0xb6, 0x20, 0xa7, 0xe9, 0x2a, 0x78, 0x3e, 0xde, 0xba, 0xf0, 0x9b, 0x71, 0xb6, 0xad, 0x1f, 0x6f, 0x6d, 0xca, 0xda, 0x6f, 0x71, 0xc0, 0x4c, 0x08, 0x5c, 0xf3, 0x4f, 0xc1, 0xbf, 0x4a, 0x75, 0x37, 0xa5, 0x8a, 0xf7, 0x5a, 0x3a, 0x8b, 0x2a, 0x94, 0x8d, 0x62, 0x87, 0x25, 0x66, 0x55, 0xe2, 0x61, 0x25, 0xed, 0x2f, 0x89, 0x76, 0x58, 0xc8, 0x26, 0x74, 0x01, 0x52, 0xae, 0x95, 0x76, 0x58, 0xd8, 0x3f, 0xc8, 0x41, 0xe1, 0x25, 0x84, 0xa0, 0xa3, 0xb5, 0x3f, 0x9a, 0x6d, 0x91, 0x4b, 0x6c, 0x43, 0x2e, 0x81, 0x70, 0xd2, 0x2c, 0x45, 0xf3, 0x6b, 0xc4, 0x22, 0xb8, 0xc0, 0xe5, 0x18, 0xf3, 0x63, 0x2f, 0xad, 0x70, 0x2a, 0xc8, 0x6d, 0xe9, 0x5b, 0x1c, 0x94, 0xca, 0x27, 0x29, 0x0f, 0x28, 0x64, 0x91, 0x6e, 0x05, 0x28, 0xfc, 0x64, 0x75, 0x95, 0x82, 0xf2, 0xf2, 0x19, 0x9c, 0x21, 0x56, 0xe2, 0xbc, 0x1f, 0x57, 0xe2, 0x4d, 0x38, 0x3b, 0x67, 0xf8, 0x4d, 0x6a, 0x86, 0x37, 0x6b, 0xd3, 0x7e, 0x65, 0xf2, 0x0f, 0x7e, 0x00, 0xc6, 0x79, 0xcb, 0xa0, 0x92, 0xe7, 0xfc, 0x5a, 0xd5, 0x72, 0x7e, 0x31, 0xcd, 0xa9, 0xbc, 0x7b, 0x55, 0x3c, 0xce, 0x12, 0x7f, 0xe7, 0xec, 0xf7, 0xc1, 0xc6, 0xdf, 0x17, 0x61, 0x89, 0x58, 0x5b, 0xce, 0xcb, 0x23, 0xa0, 0xb1, 0xb9, 0x7d, 0xef, 0xc9, 0xde, 0x37, 0xde, 0x47, 0x9d, 0x60, 0xe0, 0x47, 0xfb, 0x62, 0x10, 0xb6, 0x97, 0xae, 0x00, 0x6d, 0xfe, 0x3f, 0xf5, 0x03, 0xdd, 0xaf, 0xbf, 0xa7, 0x5f, 0x06, 0x49, 0x7d, 0xd2, 0x82, 0x8c, 0x1a, 0x8f, 0x79, 0xc1, 0x03, 0x4a, 0x2e, 0x72, 0x1d, 0x73, 0x89, 0xbb, 0xe9, 0x07, 0x3b, 0xe3, 0x4b, 0x86, 0xee, 0x90, 0xbc, 0x51, 0x3e, 0xe9, 0x97, 0xc3, 0x73, 0x27, 0x53, 0xa4, 0xd8, 0x3f, 0x11, 0x10, 0xd7, 0x82, 0xb0, 0xee, 0xaf, 0x08, 0x19, 0xb2, 0x38, 0x65, 0xdd, 0x1f, 0xe7, 0x7d, 0x63, 0x96, 0x9f, 0x1b, 0x01, 0x13, 0x7f, 0xd3, 0xf6, 0x6f, 0xef, 0x83, 0xbe, 0x02, 0x5e, 0x79, 0x1f, 0x5b, 0xe9, 0x3b, 0xf8, 0x32, 0x6a, 0x35, 0x28, 0x15, 0x9b, 0xdd, 0x20, 0x47, 0x8b, 0xdb, 0x8d, 0x6c, 0xfb, 0xce, 0x15, 0xb6, 0xe0, 0x5d, 0x13, 0xb5, 0xe2, 0xaf, 0x96, 0xbc, 0x5b, 0x5b, 0xfb, 0xc2, 0xc5, 0xae, 0xbe, 0x70, 0x91, 0xb0, 0x99, 0x69, 0x8d, 0x2b, 0xf2, 0x89, 0xfe, 0xeb, 0x30, 0xe5, 0x75, 0x5e, 0xda, 0xd5, 0x57, 0xfa, 0x84, 0xdd, 0xff, 0xec, 0xfe, 0x4a, 0xf5, 0xd4, 0xd5, 0x10, 0x54, 0x22, 0x04, 0xff, 0x9a, 0x81, 0xc0, 0x3b, 0x06, 0x82, 0x49, 0x2a, 0x04, 0xd5, 0x2a, 0x04, 0x05, 0x0c, 0x41, 0x69, 0xd8, 0x8e, 0xa3, 0xdb, 0x4a, 0xbf, 0x2e, 0x6b, 0x78, 0x12, 0x3d, 0xb3, 0x17, 0x65, 0x07, 0xc8, 0xa8, 0x89, 0x3a, 0x40, 0x7a, 0xfb, 0x81, 0x78, 0x6f, 0x58, 0xaf, 0x58, 0xc5, 0x89, 0x43, 0x41, 0x3b, 0x2e, 0x85, 0xbd, 0xe5, 0x38, 0x11, 0x2b, 0x4e, 0xf6, 0x8c, 0x90, 0xb5, 0xf3, 0xd2, 0x4c, 0x73, 0x45, 0x91, 0xd3, 0x2b, 0x3c, 0x99, 0xab, 0x16, 0xa9, 0x71, 0xae, 0x40, 0xe9, 0x69, 0x88, 0xbc, 0xae, 0xd0, 0xca, 0x2f, 0x59, 0xe2, 0x65, 0xcf, 0x4d, 0x0d, 0x64, 0xa1, 0xde, 0xe1, 0xc0, 0x51, 0xe1, 0xe7, 0xbd, 0x36, 0x2e, 0x01, 0x79, 0x69, 0x81, 0xb0, 0x69, 0x1e, 0x35, 0x77, 0xc9, 0xcf, 0xe3, 0x58, 0x93, 0x8e, 0x87, 0x01, 0xf6, 0xb8, 0xa6, 0x41, 0x09, 0xb7, 0xa4, 0xa6, 0x3d, 0x87, 0x5b, 0x02, 0xf2, 0x32, 0xb6, 0x02, 0xac, 0x41, 0x39, 0x63, 0x30, 0x4c, 0x5c, 0xdc, 0xe8, 0x5a, 0xc9, 0xdf, 0x15, 0xe6, 0xd7, 0x94, 0x92, 0x37, 0x1f, 0xd0, 0x92, 0xaf, 0xa6, 0x4a, 0x9c, 0xb5, 0x4b, 0x90, 0x32, 0xd7, 0xd8, 0x70, 0x9c, 0x7f, 0x5e, 0x9a, 0x9b, 0x6d, 0xfe, 0x23, 0x3f, 0x87, 0xe0, 0x34, 0x5f, 0x72, 0x68, 0xda, 0x9c, 0xe4, 0xe1, 0xaf, 0x05, 0x93, 0x47, 0xbf, 0x16, 0x4a, 0x1e, 0x9b, 0xe6, 0x4d, 0x1e, 0xf7, 0xe2, 0x4c, 0x8e, 0xd7, 0xc9, 0xaf, 0xd5, 0xa1, 0xbe, 0xe2, 0x49, 0xbe, 0x33, 0x2d, 0x80, 0x73, 0xbf, 0x3b, 0x79, 0x96, 0xbc, 0x99, 0x7f, 0x6e, 0xb9, 0xf6, 0xf0, 0x4f, 0xd3, 0xf0, 0x7b, 0x53, 0xf0, 0x4b, 0xdb, 0xc2, 0xf9, 0xdc, 0x17, 0xf3, 0xb9, 0x2f, 0x40, 0x7a, 0x14, 0xcb, 0x7a, 0xe6, 0x73, 0xcb, 0x2a, 0x0b, 0xd7, 0x7f, 0x6e, 0x9a, 0xe9, 0x5f, 0xa0, 0xad, 0xe5, 0x9f, 0xde, 0x56, 0x6c, 0xe3, 0x09, 0x6c, 0xe3, 0x49, 0x6c, 0xe3, 0x29, 0x6c, 0xe3, 0x69, 0xda, 0x27, 0x44, 0xf9, 0x63, 0xc8, 0x69, 0x4e, 0x9d, 0x27, 0x40, 0x48, 0xcf, 0x38, 0xd5, 0x1a, 0x70, 0xd6, 0xa1, 0x51, 0x94, 0xef, 0xe4, 0x53, 0xb3, 0x4e, 0x20, 0x3e, 0x4d, 0xfb, 0xa7, 0x15, 0xb4, 0xa7, 0x67, 0xa2, 0xfa, 0x70, 0x54, 0x4f, 0x43, 0x8a, 0x30, 0xdb, 0xfd, 0x18, 0x1e, 0x0c, 0xed, 0xfa, 0xf0, 0x32, 0xad, 0xd8, 0x61, 0x19, 0x3f, 0x9d, 0x86, 0x23, 0x34, 0x39, 0x52, 0x89, 0xb8, 0xf9, 0xd7, 0x33, 0xc8, 0x53, 0xa6, 0x81, 0xe3, 0x95, 0x33, 0x60, 0x39, 0xd4, 0x87, 0xd2, 0x51, 0x01, 0x4a, 0x59, 0x97, 0x89, 0xd3, 0x74, 0x9a, 0x6c, 0xfe, 0x43, 0x3f, 0x87, 0x26, 0x7c, 0x1f, 0x42, 0x68, 0x0e, 0xd3, 0x1c, 0x3c, 0xf7, 0x1c, 0x42, 0x93, 0xde, 0x5f, 0xc1, 0x19, 0x27, 0x9f, 0xac, 0xca, 0xe0, 0xe8, 0x36, 0x56, 0x22, 0x44, 0xa5, 0x38, 0x42, 0xbb, 0x8a, 0x4b, 0xfc, 0x28, 0xff, 0x04, 0xb1, 0x3d, 0x43, 0xd3, 0xea, 0x92, 0x47, 0x67, 0xd1, 0xb9, 0x08, 0x6c, 0xe7, 0xb4, 0x60, 0xf2, 0x78, 0x1d, 0x9d, 0x95, 0x08, 0xa2, 0xf6, 0xe9, 0xc6, 0xf6, 0x79, 0x58, 0x86, 0x3b, 0x8b, 0x6d, 0xbd, 0xe0, 0xfd, 0x45, 0xf2, 0x22, 0xb5, 0x95, 0xd6, 0x57, 0x44, 0x4b, 0xf9, 0x1c, 0x25, 0xf9, 0xaf, 0xd9, 0xa1, 0x7a, 0xea, 0xfa, 0xe2, 0x54, 0x5c, 0xf4, 0x05, 0xa9, 0x78, 0x45, 0x36, 0x15, 0x13, 0x3e, 0x31, 0xaf, 0x19, 0x7b, 0xad, 0x10, 0x7b, 0xad, 0x00, 0xc7, 0x74, 0x3e, 0xf6, 0x9a, 0x95, 0x7a, 0xcc, 0x8e, 0x92, 0x3d, 0x51, 0xf1, 0xe7, 0xa6, 0xc9, 0xa6, 0xe2, 0x60, 0xf2, 0x30, 0x52, 0xed, 0x51, 0xbc, 0x8e, 0x91, 0x27, 0x6d, 0xec, 0xe1, 0x13, 0x5f, 0xf3, 0x66, 0x51, 0x31, 0xf6, 0x2e, 0xb6, 0x9c, 0xa9, 0xf8, 0x73, 0xcb, 0xbd, 0x36, 0x15, 0x6f, 0x1f, 0x47, 0xc5, 0x8f, 0x11, 0x15, 0x7f, 0x6e, 0x59, 0x53, 0xc3, 0xf5, 0x9f, 0x9b, 0xa6, 0xf4, 0x0b, 0xb4, 0x75, 0xda, 0xd8, 0xb6, 0x62, 0x1b, 0x89, 0x8a, 0x8f, 0x63, 0x1b, 0xdf, 0x4c, 0x53, 0x31, 0xf5, 0x72, 0xe0, 0x53, 0xa8, 0xf8, 0xac, 0xa0, 0x60, 0xfa, 0x8e, 0x9e, 0xa9, 0xb8, 0x90, 0xa9, 0xb8, 0xc0, 0x09, 0x48, 0x4f, 0xf9, 0x4e, 0x13, 0xdb, 0xed, 0x30, 0x12, 0xf5, 0xaa, 0x54, 0x6d, 0x74, 0x9a, 0x6d, 0x7e, 0xe7, 0x54, 0xa2, 0xe2, 0x0f, 0x2a, 0x54, 0x2a, 0xde, 0x86, 0x54, 0x6c, 0x4c, 0x53, 0xb1, 0x55, 0xa5, 0xe2, 0xfc, 0xff, 0x00, 0x15, 0x17, 0x62, 0xad, 0x05, 0x94, 0x3f, 0xf0, 0x32, 0xb6, 0xd0, 0x88, 0xfa, 0x89, 0xb9, 0xab, 0xd8, 0xee, 0x3f, 0xbc, 0x5d, 0xa5, 0x63, 0x77, 0xf2, 0xa8, 0x4a, 0xbb, 0x87, 0xb1, 0xc5, 0x44, 0xc7, 0x97, 0x99, 0x8e, 0xe7, 0xfc, 0xd5, 0x74, 0x7c, 0x9c, 0xe8, 0xd8, 0x8e, 0xba, 0x6c, 0x89, 0x4a, 0xc7, 0x8e, 0x39, 0x8a, 0x97, 0x24, 0xf6, 0x32, 0x9c, 0x85, 0x55, 0x6f, 0x26, 0xcc, 0xcf, 0x5d, 0x65, 0xdc, 0xe3, 0x9a, 0x68, 0x15, 0xf5, 0x6f, 0xb4, 0x87, 0x7a, 0x9f, 0xbc, 0x43, 0x10, 0x85, 0xa3, 0x84, 0xe4, 0xa0, 0x19, 0x15, 0xa1, 0x2e, 0xc4, 0x9e, 0x29, 0xa8, 0x52, 0x79, 0x8d, 0xa3, 0x4d, 0xf4, 0x4e, 0x77, 0x49, 0xb8, 0xe4, 0x0b, 0xa5, 0xbb, 0xe5, 0xe8, 0xb3, 0xd8, 0x42, 0x7f, 0xf2, 0x38, 0xb5, 0x06, 0x69, 0xf5, 0x14, 0x5e, 0xef, 0x4c, 0x6b, 0x48, 0x9e, 0xc6, 0x3e, 0x3c, 0xfb, 0x35, 0x5f, 0xf2, 0x3c, 0xf6, 0xe7, 0x85, 0x70, 0x70, 0x7c, 0x59, 0x29, 0x8a, 0xa8, 0xca, 0x2e, 0xcb, 0xf1, 0xa9, 0x65, 0xd1, 0xde, 0xac, 0x17, 0xcb, 0xaa, 0x4b, 0x5e, 0xf8, 0xda, 0xec, 0xe4, 0x47, 0x88, 0xb1, 0x8b, 0x88, 0xad, 0xcb, 0x88, 0xd5, 0x11, 0x65, 0x25, 0xd3, 0xc6, 0x71, 0x94, 0x09, 0x53, 0xb4, 0x41, 0x5e, 0x08, 0x73, 0x9d, 0xb2, 0xcd, 0x9b, 0xed, 0x47, 0x08, 0x31, 0xb8, 0x5b, 0xd5, 0xb5, 0xfe, 0x63, 0xb3, 0xe0, 0xc5, 0x94, 0xef, 0xb1, 0xd2, 0x94, 0x4f, 0x26, 0xe4, 0x80, 0x25, 0x28, 0x15, 0x16, 0x39, 0xe0, 0x7a, 0x94, 0xc5, 0x9e, 0x81, 0xc2, 0x92, 0x3a, 0xf6, 0xf1, 0xa1, 0x4a, 0x50, 0x4e, 0xf6, 0x01, 0x79, 0xbe, 0x99, 0x65, 0xa1, 0x95, 0x40, 0xdf, 0x5f, 0x5c, 0x14, 0x76, 0x48, 0x51, 0xaa, 0x3e, 0x87, 0x5a, 0x8a, 0x45, 0xa4, 0x2c, 0xe7, 0xb3, 0x1f, 0xc1, 0xf5, 0xd1, 0x9c, 0xd8, 0x84, 0x1d, 0xeb, 0x23, 0x33, 0x63, 0x49, 0x9a, 0xb3, 0xc9, 0x1f, 0x45, 0x05, 0x51, 0x2d, 0xd9, 0x5b, 0xef, 0xe6, 0x13, 0x18, 0xa5, 0x60, 0x69, 0x72, 0x6f, 0x62, 0xfb, 0x34, 0xf8, 0x6c, 0xc6, 0x67, 0x0f, 0x3f, 0xa7, 0xfc, 0x02, 0xae, 0x4a, 0x5e, 0x0c, 0xd7, 0xc4, 0x34, 0x58, 0x86, 0xf7, 0xaa, 0xdc, 0x9a, 0xcf, 0xcb, 0x9d, 0x82, 0xc6, 0xb1, 0x93, 0xed, 0xec, 0xf8, 0x63, 0x39, 0xd7, 0x2a, 0xe7, 0x8b, 0x96, 0x32, 0xb5, 0x4c, 0xf5, 0xa6, 0x43, 0xab, 0x73, 0xba, 0x71, 0xfe, 0x20, 0x6b, 0x93, 0x87, 0x55, 0x5a, 0x3e, 0x81, 0x38, 0x25, 0xef, 0x89, 0xc6, 0x12, 0x15, 0xa7, 0x42, 0xf3, 0x75, 0xac, 0x84, 0xfc, 0x94, 0x05, 0x02, 0xe4, 0xcf, 0xc6, 0x2c, 0x1d, 0x98, 0x2d, 0x0e, 0x48, 0x01, 0x61, 0x71, 0xa0, 0x1d, 0xa4, 0x99, 0xb3, 0x2f, 0x56, 0xa3, 0x0c, 0xc8, 0xde, 0x36, 0xcf, 0xa3, 0xd4, 0x4b, 0xa7, 0x5d, 0x40, 0x72, 0x38, 0xcd, 0x84, 0x8d, 0x14, 0x7e, 0xa9, 0x2c, 0xaa, 0x7b, 0xac, 0x75, 0x82, 0x05, 0x83, 0xf3, 0xc9, 0x16, 0x10, 0xb0, 0x65, 0x02, 0xfa, 0x36, 0x58, 0xcb, 0xdc, 0xe0, 0xe4, 0xd7, 0x70, 0xde, 0x4b, 0xbe, 0x83, 0xbf, 0x16, 0x1c, 0x97, 0x75, 0xc9, 0x33, 0x48, 0x91, 0xe7, 0xbf, 0xec, 0x4e, 0xfe, 0x99, 0xe6, 0x48, 0x1c, 0x43, 0xd6, 0xe8, 0xc2, 0xf6, 0x49, 0xcc, 0x49, 0x6b, 0x55, 0xc9, 0xac, 0x2b, 0x5c, 0xc6, 0x23, 0xac, 0x92, 0xce, 0x75, 0x46, 0x22, 0x61, 0xba, 0xbb, 0xa3, 0xf5, 0x1c, 0xab, 0x44, 0x16, 0xf0, 0x7b, 0x3c, 0x3a, 0x93, 0x7c, 0x22, 0x44, 0x02, 0xe1, 0x99, 0xde, 0xe9, 0xc9, 0x8f, 0xc2, 0xfe, 0x2f, 0xa3, 0x66, 0x83, 0xf7, 0x5a, 0xbc, 0xcb, 0x78, 0xaf, 0xc4, 0xbb, 0x06, 0xef, 0x65, 0x78, 0xd7, 0xe2, 0xdd, 0x8e, 0x77, 0x1d, 0xde, 0x8b, 0xf1, 0xae, 0xc7, 0x7b, 0x01, 0xde, 0x0d, 0x78, 0x37, 0xe3, 0xdd, 0x88, 0x77, 0x6d, 0xe3, 0xb9, 0xe4, 0x47, 0xe6, 0xe9, 0xf4, 0xbc, 0xa4, 0x9a, 0x4e, 0xed, 0x70, 0xef, 0xac, 0x40, 0x7d, 0x99, 0xce, 0xe2, 0x38, 0xf8, 0xb7, 0x84, 0x7f, 0xed, 0x4c, 0x19, 0x27, 0x33, 0xf8, 0x28, 0x75, 0xa8, 0x5e, 0x4d, 0xa8, 0x6f, 0x34, 0x63, 0xce, 0xe6, 0x9c, 0x2b, 0xae, 0x4d, 0xee, 0x55, 0xfb, 0xe6, 0x14, 0x7f, 0xb5, 0x86, 0x7d, 0x53, 0xb6, 0x6a, 0x4c, 0xdf, 0x84, 0x7e, 0xff, 0xbe, 0xe8, 0x1d, 0xec, 0x19, 0xa2, 0xff, 0x74, 0xef, 0x88, 0x5e, 0x78, 0x7f, 0x19, 0x53, 0x33, 0xf7, 0x03, 0x3c, 0xf4, 0x57, 0xf6, 0xc3, 0xc4, 0xac, 0x7e, 0x38, 0x25, 0x7a, 0xe0, 0xcb, 0x2b, 0xe0, 0xba, 0xe4, 0x19, 0xc4, 0xff, 0xfb, 0xd8, 0x0f, 0x67, 0x91, 0x77, 0x5e, 0xc8, 0x6a, 0xed, 0xd5, 0x67, 0x91, 0xf2, 0xb9, 0xb5, 0xa7, 0xb2, 0x5a, 0xfb, 0x54, 0x56, 0x6b, 0x2d, 0x63, 0x5b, 0xbb, 0xb0, 0x38, 0xb9, 0xef, 0x3f, 0xce, 0x13, 0xfe, 0x9a, 0xf3, 0x4b, 0x7f, 0xd5, 0x59, 0xa7, 0xcf, 0x59, 0x8b, 0xf7, 0x2e, 0xd3, 0x07, 0xe8, 0xeb, 0x4c, 0x8c, 0xd5, 0x7a, 0xde, 0x93, 0xf2, 0x51, 0x9b, 0xb2, 0x29, 0x23, 0x90, 0xb0, 0x1f, 0xfb, 0xe5, 0xbe, 0xc8, 0xa5, 0xf4, 0x17, 0x41, 0xcb, 0xa1, 0x11, 0xf9, 0x5f, 0xd7, 0x6e, 0x3a, 0x75, 0x66, 0xa1, 0x9d, 0x59, 0xb6, 0x1c, 0x6e, 0x0a, 0xdd, 0x13, 0x2e, 0x50, 0xa6, 0x42, 0x8b, 0xb3, 0x96, 0xbe, 0xac, 0x4e, 0x59, 0x13, 0x6f, 0x1e, 0x48, 0x7d, 0x15, 0x44, 0xa7, 0x0c, 0xc7, 0xe4, 0xb5, 0xd6, 0x9d, 0x4f, 0x1e, 0x7f, 0xf8, 0x35, 0x4e, 0x99, 0x83, 0xb9, 0x0b, 0x29, 0xb7, 0x3d, 0xc0, 0xf9, 0xbf, 0x92, 0xc9, 0x9f, 0xfa, 0xf6, 0x8e, 0xd7, 0xa4, 0x7f, 0x0e, 0x8d, 0xd1, 0x49, 0x54, 0x82, 0xe2, 0x90, 0x96, 0x90, 0xdf, 0x11, 0x7d, 0x80, 0xde, 0xa8, 0xdc, 0x54, 0x8e, 0x71, 0xa9, 0x6d, 0x14, 0x6f, 0x73, 0x48, 0x8b, 0x32, 0xa9, 0x69, 0x1d, 0x3f, 0x9d, 0x43, 0x12, 0x39, 0x02, 0xef, 0x4a, 0x36, 0xea, 0x29, 0xe4, 0x03, 0x8d, 0xd1, 0x32, 0xb2, 0xd4, 0x8d, 0x79, 0xbc, 0x6a, 0x1e, 0x7a, 0x23, 0xad, 0x1d, 0x7b, 0xb0, 0x1c, 0x75, 0x51, 0xd4, 0xfb, 0xd3, 0x79, 0x91, 0xa3, 0x26, 0x1a, 0xde, 0xf2, 0x0b, 0xfb, 0xdf, 0x06, 0x6a, 0x63, 0xa6, 0x56, 0x84, 0x31, 0x98, 0xa9, 0x15, 0x73, 0x5a, 0xb3, 0xe1, 0x2c, 0xbf, 0xe9, 0x53, 0xeb, 0x9d, 0xf9, 0xd7, 0xd5, 0x9b, 0x6e, 0xab, 0xa2, 0xd6, 0x5a, 0x7f, 0x6d, 0xcc, 0x50, 0x9e, 0x0c, 0x76, 0x28, 0xd6, 0xe5, 0x04, 0x4b, 0x60, 0x90, 0xf3, 0x16, 0x63, 0xbd, 0x35, 0xd7, 0xc8, 0x47, 0x75, 0x15, 0xd8, 0x52, 0xfd, 0x3a, 0x31, 0x15, 0x96, 0xea, 0xd7, 0x4f, 0x29, 0x69, 0xe2, 0xe7, 0x96, 0x94, 0x3f, 0xbe, 0x24, 0xb1, 0x1e, 0x4f, 0x6d, 0xe6, 0x15, 0x9d, 0xfc, 0x4e, 0xa8, 0x70, 0x42, 0x21, 0xe3, 0xa5, 0xd8, 0xb6, 0x4c, 0x9a, 0x94, 0xc1, 0x49, 0x1a, 0x0f, 0x4c, 0x73, 0x38, 0x6e, 0x44, 0x89, 0xd7, 0xa7, 0xc2, 0x32, 0x34, 0x23, 0x7a, 0x84, 0xa0, 0x50, 0xf1, 0xe3, 0x90, 0x6c, 0x59, 0x3d, 0x32, 0x15, 0x96, 0x8d, 0xc1, 0x4f, 0x11, 0x51, 0x20, 0x85, 0x72, 0x79, 0x05, 0x19, 0x1a, 0x14, 0x7d, 0x95, 0xb6, 0xf0, 0xde, 0xc1, 0x73, 0x34, 0xb5, 0xb9, 0x10, 0xdb, 0xbc, 0x5d, 0x6d, 0x73, 0xc9, 0x35, 0x20, 0x14, 0x6d, 0x2e, 0x55, 0x21, 0xbc, 0x21, 0xd3, 0xe6, 0xd4, 0xf7, 0x70, 0xb7, 0x52, 0xef, 0x17, 0xd9, 0xe8, 0x3b, 0xb1, 0x54, 0xcb, 0x6d, 0xd8, 0xee, 0x92, 0xc0, 0xcb, 0x95, 0x4e, 0x28, 0x0d, 0xec, 0xe1, 0xd2, 0x95, 0x12, 0x87, 0x54, 0x9a, 0x29, 0xbd, 0xbc, 0x14, 0xe1, 0x4e, 0xd5, 0xa0, 0x21, 0xb8, 0x51, 0x2a, 0x6c, 0xa1, 0x50, 0xae, 0xa5, 0x30, 0x15, 0x4e, 0xb6, 0xdc, 0xfd, 0x0f, 0xb2, 0xbd, 0x43, 0xaa, 0xc5, 0x8e, 0xb5, 0x38, 0x1c, 0x4e, 0xa8, 0x45, 0x5a, 0xf2, 0xab, 0xf0, 0x97, 0x07, 0x06, 0xb1, 0xb6, 0x0a, 0xae, 0xad, 0x2a, 0xb0, 0x87, 0xbc, 0x85, 0x04, 0x5e, 0x61, 0x6b, 0xdc, 0x3e, 0xae, 0xd9, 0x5e, 0xe6, 0x90, 0xee, 0xbd, 0x46, 0xbb, 0xf4, 0xa1, 0x7b, 0xb8, 0x04, 0x87, 0x3e, 0x10, 0x2e, 0x28, 0x4b, 0xb5, 0xef, 0xba, 0x54, 0x1c, 0xd7, 0xcc, 0x5e, 0xed, 0xbe, 0x4e, 0x35, 0x93, 0x1d, 0x25, 0xf2, 0xcd, 0x55, 0xab, 0xd6, 0x5a, 0xca, 0xb5, 0x96, 0x73, 0xad, 0x15, 0x5c, 0x6b, 0x55, 0xe0, 0x95, 0x6e, 0x64, 0x85, 0xf0, 0x35, 0x51, 0x6b, 0xa9, 0x43, 0xda, 0x70, 0x8d, 0x5a, 0x75, 0xd9, 0xb5, 0x96, 0xa6, 0x6a, 0xbd, 0x29, 0x15, 0xc7, 0xb5, 0xee, 0xe6, 0xf6, 0xd6, 0x38, 0x54, 0x1f, 0x28, 0x76, 0xe1, 0xe7, 0x73, 0x3e, 0xca, 0x09, 0x54, 0x73, 0x0d, 0xd7, 0x3c, 0x93, 0x6b, 0xf6, 0x72, 0xcd, 0xf5, 0x81, 0x57, 0xaa, 0x9d, 0x10, 0x0c, 0xec, 0xad, 0xc1, 0xae, 0x0e, 0xfc, 0x6b, 0x0f, 0x14, 0x3b, 0x61, 0x5e, 0xf0, 0x19, 0x82, 0xa2, 0x64, 0x99, 0xf4, 0xac, 0x0a, 0x05, 0xe6, 0x2e, 0x6b, 0x53, 0xa1, 0xc8, 0x45, 0x28, 0xda, 0x52, 0x50, 0x94, 0xb4, 0xa9, 0x50, 0x14, 0xa7, 0xe2, 0x08, 0x8a, 0x85, 0xa2, 0xed, 0xfc, 0x2d, 0x28, 0x61, 0x1d, 0xa1, 0x28, 0x63, 0xac, 0xaf, 0x64, 0x28, 0x2a, 0x18, 0x8a, 0x2a, 0x86, 0xa2, 0x86, 0xa1, 0x98, 0xa9, 0xb6, 0xdf, 0x17, 0x7c, 0x5a, 0x6d, 0xff, 0x13, 0x6a, 0xcd, 0x98, 0xa3, 0x6c, 0x65, 0x56, 0xfb, 0x57, 0xa6, 0xdb, 0x3f, 0x4d, 0xad, 0x79, 0x52, 0x76, 0xfb, 0x1b, 0x76, 0xff, 0xa7, 0x6b, 0xde, 0xfa, 0x85, 0x6b, 0xfe, 0xf2, 0xf8, 0x9a, 0x53, 0x23, 0x0e, 0x6b, 0x2c, 0x50, 0xb9, 0x42, 0x7e, 0x16, 0x57, 0x28, 0xff, 0x5c, 0xae, 0x70, 0x63, 0x66, 0x84, 0xa4, 0xc7, 0x5c, 0x7a, 0x0c, 0x67, 0x95, 0xa6, 0xd8, 0x1c, 0xb2, 0xfe, 0x53, 0x46, 0x32, 0x95, 0x48, 0xab, 0xab, 0x99, 0x91, 0x6c, 0xff, 0xac, 0x52, 0x53, 0x9c, 0x41, 0xce, 0xf9, 0xc2, 0x9c, 0x61, 0xca, 0x35, 0x38, 0xc3, 0xd5, 0xe5, 0x59, 0xbe, 0x70, 0x79, 0x25, 0xe3, 0xcb, 0x4b, 0xf1, 0x05, 0xc1, 0x13, 0xac, 0x4e, 0xb8, 0xa9, 0x93, 0x16, 0x53, 0x6e, 0xee, 0x22, 0x35, 0xf4, 0x96, 0x35, 0x34, 0xd5, 0x4f, 0x13, 0x9c, 0xc1, 0xb6, 0x4c, 0xce, 0xff, 0x14, 0xce, 0x60, 0x62, 0x3c, 0xac, 0xc8, 0xe2, 0x0c, 0xb7, 0x64, 0x38, 0xa4, 0xe0, 0x0c, 0x38, 0xb3, 0x68, 0xe9, 0xf4, 0x69, 0xc4, 0x21, 0x6c, 0x39, 0x3b, 0x94, 0x88, 0x4d, 0x3c, 0x15, 0x58, 0x23, 0xc5, 0x74, 0x9a, 0x7e, 0x4f, 0x3c, 0x52, 0x44, 0x6b, 0xfa, 0x9a, 0xc1, 0x68, 0x41, 0x4c, 0x09, 0xdd, 0x13, 0x33, 0xe2, 0x35, 0x01, 0x2f, 0x2b, 0x5e, 0x45, 0x62, 0x27, 0x18, 0x65, 0xba, 0x0b, 0xb4, 0x2a, 0x6a, 0xa7, 0x33, 0x9c, 0x28, 0x6f, 0x23, 0x37, 0x5a, 0xe8, 0xd4, 0xd0, 0x2e, 0x26, 0xef, 0x6c, 0x14, 0xd1, 0x39, 0xe5, 0x59, 0xc3, 0x1f, 0xaf, 0x0f, 0x3d, 0xcc, 0xa1, 0x97, 0x69, 0x2f, 0xee, 0x2e, 0xda, 0xb3, 0x94, 0xd5, 0xf3, 0x9b, 0xeb, 0xd4, 0xb3, 0xd4, 0x45, 0x8b, 0x68, 0xc7, 0x44, 0x56, 0xd3, 0x5d, 0xe0, 0x6f, 0xe6, 0x8a, 0x44, 0x3a, 0x3a, 0xcf, 0xc9, 0xa7, 0x61, 0x8c, 0xbc, 0xf3, 0xb6, 0x0b, 0x61, 0x9b, 0xb0, 0x33, 0x1e, 0xa9, 0xa4, 0xf3, 0xaf, 0xe4, 0x53, 0xa1, 0x07, 0x22, 0x74, 0xc6, 0xfa, 0x02, 0xea, 0xa1, 0x4f, 0xb9, 0x6a, 0x21, 0x17, 0x75, 0xf0, 0xc1, 0xce, 0x99, 0xf4, 0x45, 0x07, 0xec, 0x31, 0xff, 0x82, 0x2c, 0xbf, 0x24, 0x2f, 0xe2, 0xf3, 0x0b, 0x64, 0xc7, 0xbd, 0xd3, 0x8a, 0xe1, 0xe5, 0xa9, 0x9c, 0x97, 0x21, 0x62, 0xe1, 0x9c, 0x31, 0xcc, 0x97, 0x83, 0xf1, 0xfd, 0x9d, 0x37, 0x71, 0xbe, 0x8d, 0xe9, 0x7c, 0xf7, 0x86, 0x9b, 0x3b, 0x15, 0x0c, 0x2b, 0x49, 0xe5, 0x49, 0x42, 0x34, 0x68, 0x8e, 0xd3, 0x87, 0x2b, 0xd1, 0x7a, 0x33, 0xef, 0x78, 0x44, 0xbd, 0x78, 0xc7, 0x80, 0x48, 0x53, 0xb8, 0xb6, 0xb3, 0x08, 0xd3, 0x06, 0x53, 0x69, 0x31, 0xae, 0x5c, 0x8d, 0xab, 0x0a, 0x3b, 0x62, 0x52, 0xb8, 0x24, 0xa6, 0x0b, 0xdb, 0x62, 0x79, 0xe1, 0x49, 0x31, 0x6d, 0x78, 0x62, 0xcc, 0x1c, 0x2e, 0x8c, 0x99, 0xc2, 0xf9, 0x31, 0x63, 0xd8, 0x12, 0x33, 0x84, 0x73, 0x62, 0xfa, 0xb0, 0x3e, 0xa6, 0xc1, 0x99, 0x5a, 0x6e, 0x38, 0x67, 0x56, 0xbd, 0xc1, 0xc7, 0x20, 0xfc, 0x91, 0xfa, 0xb5, 0xa6, 0x59, 0xf9, 0x39, 0x14, 0xdc, 0xba, 0x1c, 0x50, 0x42, 0x9e, 0xbc, 0x9c, 0x2c, 0xe9, 0x30, 0xf6, 0x51, 0x83, 0x74, 0x55, 0xdb, 0x55, 0x6d, 0x07, 0x25, 0xeb, 0x02, 0x3b, 0xf5, 0x40, 0xea, 0x14, 0x6d, 0x01, 0xef, 0x43, 0x69, 0x66, 0x0f, 0x5f, 0x92, 0x53, 0xde, 0xe2, 0xf9, 0x0c, 0x6d, 0x01, 0x85, 0x66, 0x9d, 0x5a, 0xbf, 0x98, 0xee, 0xad, 0xe9, 0x60, 0x0d, 0xd1, 0x39, 0x96, 0x2e, 0xfe, 0xd2, 0x07, 0x31, 0x5f, 0x82, 0x6d, 0x21, 0xbf, 0xd2, 0x8b, 0xe2, 0xef, 0xf4, 0x8b, 0x1d, 0x1e, 0x1b, 0xfb, 0x1b, 0xf4, 0xbd, 0x07, 0x79, 0xf4, 0xdd, 0x6b, 0xb8, 0x98, 0xcf, 0x89, 0x95, 0xd3, 0x37, 0x17, 0xfc, 0xe4, 0x7a, 0x21, 0x1e, 0xd1, 0x2b, 0xb7, 0xf6, 0x43, 0xa4, 0x48, 0xf1, 0xda, 0xad, 0x91, 0x13, 0xb7, 0x7b, 0x20, 0xff, 0x76, 0x3a, 0xbd, 0x5d, 0x70, 0xe3, 0xaa, 0xe4, 0xc7, 0x50, 0x48, 0x3e, 0xa0, 0x8b, 0xd5, 0xf6, 0xf1, 0x1e, 0x80, 0x75, 0xec, 0xdd, 0x95, 0x7a, 0x7f, 0x8e, 0xda, 0x38, 0xf6, 0xc9, 0xf5, 0x1c, 0xe4, 0x88, 0x27, 0xeb, 0x73, 0x90, 0x9b, 0x65, 0xab, 0x2b, 0xe1, 0x7c, 0x14, 0x12, 0x55, 0x4f, 0xf6, 0x4e, 0x35, 0xd6, 0xe3, 0xf3, 0x8b, 0x78, 0x1d, 0x84, 0x84, 0x4b, 0xb5, 0x74, 0xb2, 0x64, 0x71, 0x57, 0xd7, 0xd2, 0xb6, 0x8e, 0xa5, 0x2b, 0xcb, 0x3b, 0x5b, 0x57, 0x77, 0xdc, 0xd3, 0xb9, 0xb4, 0x55, 0x35, 0xd9, 0x75, 0x75, 0x84, 0xb2, 0x78, 0xd5, 0xf2, 0xe8, 0xe2, 0xe9, 0xab, 0xaa, 0xaa, 0x57, 0x2a, 0x95, 0xb7, 0x96, 0x57, 0xfc, 0xe7, 0xad, 0x78, 0x25, 0xaa, 0xb6, 0x40, 0xe2, 0x36, 0x23, 0x5e, 0xfb, 0xd8, 0x42, 0x17, 0x40, 0x19, 0x42, 0x56, 0x29, 0xe2, 0x5c, 0xdd, 0xf7, 0x74, 0x2d, 0x6f, 0x5b, 0xde, 0xf5, 0xbd, 0xb4, 0xad, 0x9c, 0x94, 0x61, 0x27, 0x48, 0xdc, 0xda, 0x98, 0xb2, 0xc3, 0xc2, 0x67, 0x57, 0xdc, 0xb7, 0xd1, 0xf9, 0xd7, 0xc2, 0xab, 0xac, 0x2c, 0x84, 0xb3, 0xec, 0x22, 0x24, 0x5c, 0xda, 0x94, 0xb5, 0x03, 0x75, 0xb7, 0xc4, 0x9b, 0xb6, 0x72, 0x90, 0x70, 0x15, 0x90, 0xd5, 0x83, 0x31, 0xa9, 0x97, 0x65, 0x59, 0x64, 0x20, 0x5b, 0x0a, 0x2d, 0x59, 0x56, 0x11, 0x12, 0xae, 0xb2, 0x71, 0xb6, 0x14, 0x12, 0xae, 0xe2, 0xab, 0x6c, 0x29, 0x24, 0x5c, 0xe6, 0xd0, 0xc3, 0x59, 0x30, 0x7d, 0xa6, 0xcd, 0x04, 0xaa, 0x45, 0x58, 0x4d, 0xe0, 0x2f, 0xf6, 0xbf, 0x1b, 0x78, 0x57, 0xa1, 0x73, 0xd4, 0xc5, 0x19, 0x5b, 0xf7, 0x6c, 0x2d, 0xde, 0x3a, 0x63, 0xe4, 0xfb, 0x64, 0x25, 0xef, 0x09, 0xd7, 0xf7, 0xe8, 0xad, 0xe2, 0xab, 0x70, 0x1c, 0xac, 0x3b, 0x03, 0x91, 0xaa, 0x19, 0x23, 0x71, 0xe9, 0x1a, 0xe1, 0x93, 0x66, 0x8c, 0xc0, 0x35, 0xc2, 0xbf, 0xb9, 0x27, 0xd0, 0xd7, 0xe4, 0x0d, 0xcb, 0x5d, 0x52, 0xaa, 0x3c, 0x70, 0xc7, 0x85, 0xa5, 0xe4, 0x27, 0x82, 0x5e, 0xd4, 0xe8, 0xfd, 0xbc, 0x23, 0x58, 0x8b, 0xa9, 0xf9, 0x14, 0xd9, 0x0c, 0x37, 0x9d, 0xc0, 0xf4, 0x0f, 0xae, 0x44, 0x5d, 0x1f, 0x63, 0x34, 0x22, 0x26, 0x1d, 0x56, 0xd0, 0x25, 0xd3, 0x39, 0xf8, 0x19, 0x77, 0xd1, 0xc9, 0xb5, 0xca, 0x30, 0x79, 0x49, 0xc5, 0x54, 0x79, 0x99, 0x54, 0x6c, 0x2b, 0x7e, 0x22, 0x86, 0x4d, 0xc8, 0x84, 0x05, 0x41, 0xf5, 0x3e, 0x53, 0x1a, 0x1e, 0x17, 0x83, 0xa9, 0xb5, 0x91, 0x02, 0xf6, 0x91, 0x42, 0x7e, 0x06, 0x8e, 0xd3, 0x5c, 0xd0, 0x45, 0xde, 0x68, 0x9f, 0x65, 0x7c, 0x5b, 0xd4, 0x94, 0x8c, 0xe9, 0x74, 0x2d, 0x0f, 0xe3, 0xb3, 0x36, 0xfb, 0x5d, 0xdd, 0xe3, 0xcc, 0x1b, 0x53, 0x63, 0x09, 0x86, 0x18, 0xb2, 0x6a, 0x4b, 0xe5, 0x9a, 0x90, 0x95, 0xab, 0x28, 0x5c, 0x41, 0x6d, 0xcc, 0x0e, 0xe5, 0x9a, 0xb2, 0xf3, 0x18, 0xc7, 0xd7, 0x84, 0xba, 0xda, 0x23, 0xcd, 0x03, 0xf3, 0x64, 0xb3, 0x9c, 0x4c, 0x46, 0x20, 0x29, 0x7b, 0xbd, 0x19, 0x3f, 0x01, 0x88, 0xd1, 0x42, 0x1f, 0x62, 0xc6, 0x35, 0x7f, 0xac, 0x8d, 0x10, 0xb0, 0xb9, 0xe4, 0xc0, 0x60, 0xc3, 0x5b, 0x3d, 0x5a, 0xe2, 0x66, 0x38, 0x9f, 0xe5, 0x92, 0x47, 0x77, 0xcf, 0x85, 0x7e, 0xcd, 0xc1, 0x0f, 0x70, 0x14, 0x5b, 0xc9, 0xb2, 0xf1, 0x35, 0x63, 0x9e, 0xa3, 0x70, 0xf2, 0x45, 0x84, 0xda, 0x73, 0x01, 0xcb, 0x29, 0x5f, 0xb6, 0x6a, 0x9b, 0xd2, 0xdf, 0x0e, 0x39, 0x35, 0x75, 0xc3, 0xc9, 0x1d, 0xa1, 0xcd, 0x05, 0xe0, 0xd4, 0x22, 0x2f, 0xdb, 0x9c, 0x2f, 0x1f, 0x92, 0x0f, 0x49, 0x74, 0x11, 0xcd, 0x0e, 0x49, 0xc2, 0x5f, 0x90, 0x53, 0xc3, 0x7e, 0x50, 0xcc, 0x3c, 0x7b, 0x5e, 0xef, 0xf5, 0xe1, 0xec, 0x79, 0x63, 0x85, 0x66, 0xcf, 0xc8, 0xfe, 0x5f, 0x93, 0xaf, 0x92, 0x77, 0x66, 0x5b, 0xe5, 0x54, 0x89, 0x36, 0xf7, 0x1b, 0x83, 0xbe, 0x0f, 0x1f, 0xd5, 0xf8, 0x2e, 0x3c, 0x0a, 0xf9, 0xbd, 0x2e, 0x69, 0xc8, 0x33, 0xe4, 0xa6, 0x6b, 0xab, 0xdb, 0xe6, 0x7d, 0xe3, 0x35, 0x8a, 0x39, 0xf8, 0x9a, 0x75, 0x9d, 0xfd, 0xa6, 0x92, 0x9b, 0x84, 0x96, 0x8c, 0x73, 0x7b, 0x89, 0x75, 0x2a, 0x94, 0x9a, 0x69, 0x0e, 0xcd, 0xf1, 0x9c, 0x86, 0x3b, 0xac, 0xbb, 0x01, 0xe5, 0x5f, 0xf2, 0x0e, 0x13, 0x31, 0xe2, 0xfb, 0xed, 0xf8, 0x0e, 0x9f, 0x91, 0x56, 0x3b, 0x2e, 0xad, 0x31, 0xb3, 0x4f, 0x4c, 0xe9, 0xf9, 0xcb, 0x2e, 0x80, 0x87, 0xd2, 0xf9, 0xaa, 0x7c, 0x98, 0x2e, 0x1f, 0xcb, 0xc4, 0xfb, 0xd7, 0xd4, 0xfb, 0x1d, 0x78, 0x97, 0x63, 0xb0, 0xa0, 0xbf, 0xee, 0x82, 0x11, 0x0a, 0x30, 0xac, 0x39, 0xde, 0xe9, 0x42, 0x4e, 0x7c, 0x01, 0xc3, 0x0d, 0x78, 0x69, 0xc3, 0x0d, 0x5c, 0x47, 0x7d, 0x2a, 0x6f, 0x1d, 0xe6, 0xa5, 0x74, 0x5e, 0x7a, 0xd2, 0xe4, 0xc7, 0x3b, 0x61, 0xd6, 0x47, 0x45, 0x50, 0x48, 0x39, 0x7b, 0xbb, 0x5c, 0xcf, 0xf7, 0x46, 0x2e, 0x34, 0x01, 0x53, 0xe6, 0x29, 0x4a, 0xad, 0x42, 0xaa, 0xa1, 0x96, 0xe0, 0xbb, 0x51, 0xec, 0xf9, 0x85, 0xbe, 0x2b, 0x3c, 0x09, 0x54, 0xdb, 0x4a, 0xca, 0xa1, 0xc4, 0x5e, 0x0e, 0xb6, 0xe0, 0x3a, 0xf2, 0x08, 0xeb, 0xfd, 0x19, 0xf6, 0x09, 0x8d, 0x90, 0xce, 0xd0, 0x66, 0xd9, 0x0d, 0xc9, 0x3b, 0xdc, 0xec, 0x4b, 0x51, 0xa6, 0xde, 0x51, 0xdf, 0x69, 0x5c, 0x69, 0xb3, 0xde, 0x69, 0xcd, 0xbc, 0xc8, 0x5c, 0x4e, 0x63, 0x60, 0xc1, 0xde, 0x98, 0x7e, 0x93, 0xb6, 0x88, 0xce, 0x06, 0x6b, 0x79, 0x76, 0x4a, 0xa5, 0xb1, 0x5b, 0xb5, 0xf3, 0xb3, 0x7a, 0x3d, 0x1d, 0x5e, 0xde, 0xac, 0x55, 0x57, 0x3e, 0xd3, 0x25, 0xea, 0xdd, 0x86, 0x36, 0x8c, 0xa9, 0x26, 0xfb, 0xb3, 0x9e, 0x0f, 0xa0, 0x9c, 0xcf, 0xcb, 0xf4, 0x31, 0xb5, 0xf3, 0x8e, 0xa5, 0xbf, 0x58, 0x58, 0x81, 0x17, 0xf0, 0xbb, 0x6c, 0xf6, 0x10, 0x42, 0x5f, 0x52, 0xd6, 0x0e, 0x36, 0x84, 0xff, 0x19, 0xcc, 0x91, 0x4f, 0x3c, 0x48, 0x9c, 0xfe, 0xaa, 0x34, 0x32, 0x4d, 0xde, 0x48, 0x3b, 0x58, 0x4e, 0x99, 0x4e, 0x2c, 0xcc, 0xd8, 0xc9, 0x56, 0x96, 0x9d, 0x30, 0xc5, 0x09, 0xdc, 0x2e, 0x59, 0x7d, 0x9f, 0xc1, 0xef, 0xf4, 0x2d, 0x14, 0x9d, 0xb3, 0x70, 0x98, 0x4b, 0xb9, 0x3d, 0xaf, 0x60, 0x7b, 0x34, 0x85, 0xc0, 0x29, 0xbe, 0xe4, 0x04, 0xab, 0x86, 0xe5, 0x1b, 0x91, 0xe3, 0x16, 0x7a, 0xcf, 0x6a, 0x15, 0x86, 0x63, 0xe8, 0x6d, 0x7a, 0x48, 0x6e, 0x49, 0x85, 0x35, 0x6b, 0x84, 0xbf, 0x58, 0xa2, 0x60, 0x2e, 0x57, 0x29, 0xdf, 0xc8, 0x70, 0x55, 0xb2, 0x04, 0x67, 0x16, 0x2d, 0xa1, 0x75, 0x1d, 0x9c, 0x01, 0xc9, 0x63, 0x87, 0x6a, 0x5f, 0x0b, 0x12, 0x77, 0xf6, 0x40, 0x62, 0x81, 0x1d, 0xef, 0x0a, 0x5e, 0x31, 0x7c, 0x76, 0xe0, 0x55, 0x04, 0x89, 0xf9, 0x01, 0x7c, 0xdf, 0x0f, 0x89, 0x3b, 0x0e, 0x43, 0x22, 0x34, 0x1f, 0x12, 0x6e, 0x2b, 0xbe, 0xe3, 0xbc, 0xe4, 0x2e, 0x86, 0xc4, 0x3c, 0x4c, 0x77, 0x67, 0x1c, 0x12, 0x75, 0x38, 0x73, 0x2e, 0xa8, 0xc4, 0x67, 0x9c, 0xa3, 0xee, 0xf4, 0xe3, 0x73, 0x35, 0x24, 0xe6, 0x0e, 0x8d, 0x9d, 0xcf, 0x16, 0x60, 0x78, 0x3d, 0xc6, 0x2f, 0x58, 0x88, 0x57, 0x18, 0xaf, 0x16, 0xbc, 0xba, 0xf1, 0xc2, 0x79, 0x6e, 0x01, 0xce, 0xc2, 0x0b, 0x6a, 0xf1, 0x72, 0x63, 0x7e, 0x8c, 0x6f, 0x46, 0x18, 0x9a, 0xed, 0x3c, 0xef, 0xe5, 0x42, 0xe2, 0xeb, 0x5e, 0xf8, 0x12, 0x24, 0x6a, 0x07, 0xc9, 0x9e, 0x63, 0x6d, 0x3b, 0x7c, 0x19, 0x12, 0x5f, 0x3b, 0x0d, 0x58, 0xfb, 0xd7, 0x6a, 0xe1, 0x2b, 0x90, 0xa8, 0xd9, 0x0b, 0x93, 0xf0, 0xb7, 0x11, 0x6e, 0xc2, 0xdf, 0x5a, 0x51, 0x19, 0xcd, 0xec, 0xb7, 0x77, 0x42, 0xe2, 0x5b, 0xcd, 0xb2, 0xc6, 0xf4, 0x7d, 0x48, 0x54, 0xff, 0x08, 0xdf, 0x9f, 0x44, 0xf8, 0xc3, 0x63, 0x27, 0x59, 0x31, 0x9d, 0xaf, 0x6c, 0xed, 0x6c, 0x6f, 0x6d, 0xbb, 0xe6, 0x5c, 0x3e, 0xa3, 0xfc, 0xd6, 0xf1, 0x53, 0xf9, 0x3d, 0xed, 0x8b, 0xdb, 0x96, 0x47, 0xdb, 0x5b, 0x5b, 0x94, 0xb9, 0x73, 0xef, 0x54, 0x62, 0x8b, 0xa3, 0xad, 0x4a, 0x67, 0xeb, 0x77, 0xef, 0x69, 0x5d, 0xdd, 0x35, 0x59, 0x99, 0x12, 0x53, 0x1c, 0x53, 0x62, 0x53, 0x55, 0x43, 0x6b, 0x14, 0xdf, 0x72, 0xcf, 0xaa, 0x98, 0xb2, 0xba, 0x6b, 0x71, 0x67, 0x57, 0xb9, 0x42, 0xb6, 0xd6, 0x94, 0xaf, 0x2b, 0x64, 0xe6, 0x0e, 0x13, 0x4e, 0x57, 0xd8, 0xca, 0x5b, 0x4c, 0xf9, 0x66, 0x23, 0x19, 0x76, 0x9b, 0x47, 0x3f, 0xbe, 0xb9, 0xc2, 0xc6, 0x1b, 0x66, 0x9f, 0x9a, 0x95, 0xbf, 0xb5, 0xbd, 0x25, 0x07, 0x56, 0x2d, 0x8e, 0xdd, 0xdd, 0xd9, 0x1a, 0x5d, 0xde, 0xd1, 0x8e, 0x55, 0x94, 0x29, 0x7c, 0x61, 0xba, 0x32, 0x65, 0x79, 0x3b, 0x66, 0x2a, 0x53, 0xfe, 0x36, 0xc6, 0xb7, 0xd5, 0x6c, 0x2c, 0x6e, 0xd5, 0xd7, 0xc9, 0x1c, 0xdc, 0x3d, 0xed, 0xe3, 0x33, 0x89, 0x82, 0xc7, 0x35, 0x18, 0x7c, 0x9d, 0xcb, 0xbb, 0x96, 0x2f, 0x5d, 0xdc, 0xa6, 0x2c, 0x21, 0x08, 0xc9, 0x0e, 0xdd, 0x3d, 0x9d, 0xad, 0x39, 0x90, 0xc1, 0x03, 0xd4, 0xb3, 0x6d, 0x3a, 0xb2, 0xb6, 0xb7, 0xb4, 0xb3, 0x75, 0x71, 0x57, 0x2b, 0x5b, 0xac, 0x5b, 0x8e, 0x39, 0xb0, 0x8c, 0xe5, 0x2d, 0xad, 0xed, 0x5d, 0x4a, 0xdb, 0xf2, 0xd5, 0x5d, 0x39, 0x21, 0xcc, 0xde, 0xda, 0xde, 0x71, 0x4f, 0x74, 0x99, 0xb2, 0xaa, 0x75, 0x55, 0x47, 0xe7, 0xf7, 0x94, 0xd5, 0xb1, 0xc5, 0x88, 0xd1, 0x58, 0x67, 0xc7, 0x1a, 0x4c, 0xd6, 0x02, 0xad, 0xdd, 0xad, 0x4b, 0xd3, 0x32, 0xcb, 0x55, 0x85, 0xd6, 0x61, 0xac, 0x77, 0xf1, 0xea, 0xd6, 0x9c, 0xec, 0x64, 0xca, 0xf2, 0xd5, 0x4a, 0x3b, 0x81, 0x45, 0xf6, 0xec, 0x3e, 0x23, 0x4f, 0xce, 0xdc, 0xd6, 0x55, 0x81, 0xd6, 0xc5, 0x2d, 0xad, 0x9d, 0x8a, 0xab, 0x9b, 0x1a, 0x5b, 0xbf, 0xbc, 0x73, 0x75, 0x97, 0xb2, 0x74, 0xd9, 0x3d, 0xed, 0x2b, 0xd5, 0x90, 0x29, 0xf7, 0x28, 0x4b, 0xbe, 0xd7, 0xd5, 0xba, 0x5a, 0x89, 0x74, 0xb6, 0xb6, 0x42, 0x53, 0x0a, 0xf4, 0x55, 0x1d, 0x2d, 0xf7, 0xb4, 0x61, 0xa8, 0x63, 0x71, 0x4b, 0x4b, 0x67, 0x0d, 0x02, 0xbb, 0x5c, 0x89, 0x90, 0x2d, 0x3f, 0x65, 0x4d, 0x6b, 0xe7, 0x6a, 0x44, 0x9d, 0xd2, 0xbe, 0x78, 0x55, 0xeb, 0xd4, 0x9a, 0x1c, 0x98, 0x26, 0xba, 0xac, 0xb2, 0x05, 0x11, 0x59, 0xd1, 0xad, 0x4c, 0x99, 0xd1, 0xa2, 0xd8, 0xa6, 0xac, 0xb6, 0xa9, 0xe2, 0x9d, 0x06, 0x12, 0x9e, 0x7d, 0x90, 0xf8, 0x46, 0x33, 0xd2, 0x7e, 0x97, 0xb0, 0x7f, 0x27, 0x66, 0x34, 0x31, 0x4b, 0xd1, 0x39, 0x28, 0x9b, 0xe7, 0x8d, 0x41, 0x92, 0x7e, 0x7d, 0x97, 0x1e, 0x05, 0xd4, 0xe7, 0x9a, 0x51, 0xc7, 0x75, 0xa2, 0x84, 0x2e, 0xbc, 0x2a, 0x2e, 0x87, 0xf9, 0xce, 0xbc, 0x52, 0x77, 0x4a, 0xb3, 0x2b, 0x15, 0x2b, 0x52, 0xb5, 0xe4, 0x7b, 0x8e, 0x66, 0xd8, 0xd0, 0xae, 0xe4, 0x0e, 0xfa, 0x02, 0x4f, 0xcc, 0x6e, 0xb4, 0x16, 0xcb, 0x52, 0x4f, 0x31, 0xf9, 0xab, 0x8c, 0x36, 0x57, 0xd2, 0xf3, 0xa4, 0xbd, 0x6e, 0xd9, 0x1b, 0x86, 0x35, 0x50, 0x25, 0x3b, 0x34, 0xc4, 0xe5, 0x14, 0x88, 0x9a, 0x9d, 0x34, 0x5b, 0xe7, 0x61, 0xee, 0xce, 0xc6, 0x01, 0x23, 0x59, 0x29, 0x2b, 0x50, 0x64, 0xe2, 0x16, 0x61, 0x60, 0xfe, 0x63, 0xc1, 0x98, 0xe6, 0xc6, 0x01, 0xb6, 0xcc, 0xfb, 0xb8, 0xb1, 0x14, 0x74, 0x10, 0x88, 0xe4, 0x08, 0x5e, 0xf6, 0x8d, 0x6d, 0xcd, 0x6c, 0xa1, 0x59, 0x5b, 0x9c, 0x59, 0x97, 0xce, 0xaa, 0x73, 0x61, 0xa6, 0xce, 0x22, 0xae, 0x53, 0x78, 0xd0, 0x2b, 0x12, 0xb2, 0xd2, 0xe3, 0xec, 0xe5, 0x4d, 0xd4, 0x4e, 0xa7, 0x76, 0x2f, 0x72, 0xed, 0xe6, 0x54, 0xed, 0x45, 0xa2, 0x76, 0x33, 0xc6, 0x1c, 0xc3, 0x98, 0x6b, 0xd7, 0x6b, 0xbe, 0x66, 0xbd, 0x00, 0x9b, 0x32, 0x35, 0x1b, 0xe2, 0x99, 0x9a, 0x0d, 0xc2, 0xe7, 0xc4, 0xe3, 0x41, 0x4d, 0x9b, 0xa8, 0xd7, 0x80, 0xa5, 0xf7, 0x70, 0xbd, 0xc6, 0x54, 0xbd, 0x86, 0x38, 0xd7, 0x6b, 0xc4, 0x98, 0x25, 0x1c, 0x63, 0x1a, 0x17, 0x63, 0xc2, 0x98, 0x00, 0xc7, 0xe4, 0x8c, 0x8b, 0x21, 0xff, 0x58, 0xe5, 0x7f, 0x25, 0xac, 0x2b, 0x32, 0x90, 0x42, 0x8c, 0x20, 0xc5, 0x72, 0xb5, 0x2a, 0x56, 0xb4, 0xa1, 0x5d, 0xa3, 0x6f, 0x72, 0x4d, 0xba, 0xa8, 0x35, 0x16, 0x1b, 0xec, 0xe3, 0x5a, 0x74, 0x18, 0xba, 0x0f, 0xfb, 0x39, 0x36, 0xb8, 0x2e, 0x8d, 0x47, 0x7d, 0x56, 0x3c, 0x79, 0x4e, 0xd9, 0xf6, 0x59, 0x50, 0xa4, 0xec, 0xdb, 0x65, 0x41, 0x51, 0xc5, 0xde, 0x92, 0x26, 0x0d, 0x7a, 0x3a, 0x8d, 0xe4, 0x2b, 0x69, 0x6f, 0x1c, 0x21, 0xa0, 0xb2, 0x34, 0x58, 0xd6, 0x42, 0xec, 0xfb, 0x3d, 0x9f, 0xd6, 0xf7, 0xe2, 0x5b, 0xfa, 0x6b, 0xb4, 0x2b, 0x92, 0xd5, 0x2e, 0x03, 0xb5, 0x2b, 0xa6, 0xc9, 0x82, 0x17, 0xa2, 0x39, 0x4e, 0x8d, 0xf7, 0x67, 0xa1, 0x5d, 0x23, 0x09, 0x6e, 0x9f, 0x84, 0xf0, 0x1b, 0x54, 0xf8, 0x25, 0x71, 0x62, 0xd4, 0xff, 0x4a, 0x24, 0x13, 0x46, 0xa7, 0x48, 0x0f, 0x7f, 0x56, 0x9b, 0x58, 0x9b, 0x73, 0x40, 0xd0, 0xe6, 0x36, 0xff, 0x4d, 0x52, 0x17, 0x71, 0x98, 0xb7, 0x79, 0x9a, 0xbe, 0x31, 0x0f, 0x94, 0xc8, 0x24, 0xa3, 0x83, 0xf3, 0x4c, 0x9c, 0x1f, 0x9f, 0xec, 0x86, 0xa0, 0xd3, 0xe8, 0xb4, 0x52, 0xde, 0xc6, 0x22, 0x31, 0x52, 0x68, 0xad, 0x81, 0x2e, 0x67, 0x8e, 0x9d, 0xc6, 0xd8, 0x63, 0x95, 0xbb, 0xbf, 0x9f, 0x54, 0xa5, 0xfa, 0xc7, 0x9d, 0x4e, 0x94, 0x54, 0x51, 0x13, 0xb9, 0xbd, 0x96, 0x72, 0xf8, 0xfb, 0x66, 0x8c, 0xf4, 0x91, 0x6f, 0xad, 0xad, 0x33, 0x46, 0xca, 0x7a, 0xf1, 0xfe, 0x10, 0xde, 0xc9, 0x5e, 0xf4, 0x26, 0xd4, 0x12, 0xaa, 0xf1, 0xbe, 0x19, 0xef, 0x43, 0x78, 0xdf, 0x52, 0xb9, 0x3b, 0x6e, 0x6f, 0x1c, 0x20, 0xbc, 0x40, 0x8f, 0x01, 0xe8, 0x0b, 0x81, 0xc1, 0x41, 0x5e, 0x85, 0x9d, 0x84, 0x50, 0xda, 0x51, 0xfe, 0xd2, 0x46, 0x00, 0x4e, 0xd2, 0xd7, 0xba, 0xd2, 0x05, 0xb3, 0x47, 0x72, 0xe3, 0xdb, 0x61, 0xb9, 0x23, 0x91, 0x84, 0x49, 0xa1, 0xb5, 0xfd, 0x12, 0xfb, 0x2b, 0x70, 0x37, 0xbc, 0xa5, 0xd1, 0x34, 0x0f, 0x84, 0x56, 0x23, 0x77, 0x18, 0x5b, 0x06, 0x79, 0xd0, 0x74, 0xa8, 0x65, 0x3c, 0x41, 0x65, 0x24, 0x07, 0xcd, 0x1e, 0x1d, 0xe0, 0xdb, 0x26, 0xca, 0xad, 0x2c, 0xd3, 0x5c, 0x44, 0x1d, 0x5e, 0x73, 0x71, 0xd9, 0x5f, 0xac, 0xf4, 0x3e, 0x79, 0x19, 0xd8, 0x35, 0x97, 0x6f, 0x45, 0x5e, 0xa0, 0x19, 0x99, 0x8c, 0xf3, 0xf7, 0xcc, 0x38, 0xd8, 0x45, 0xd9, 0xf2, 0x37, 0xef, 0x48, 0xc2, 0x37, 0xef, 0x07, 0xaa, 0xc3, 0x69, 0x4c, 0xe5, 0x95, 0xad, 0xc9, 0x91, 0x4c, 0x5e, 0xcd, 0x65, 0xb0, 0xdf, 0xb1, 0x4c, 0x83, 0xb5, 0x29, 0x77, 0x8f, 0x85, 0x45, 0x11, 0x90, 0x14, 0xab, 0x90, 0x14, 0xd0, 0x0a, 0x8f, 0x01, 0xd5, 0x11, 0x73, 0xaf, 0x84, 0xbf, 0x51, 0x48, 0x76, 0x21, 0xa6, 0x01, 0x39, 0xd5, 0xeb, 0x88, 0xbb, 0xcb, 0x5f, 0xca, 0x6f, 0x1c, 0xc0, 0xe7, 0xa1, 0xd4, 0xb3, 0xd3, 0xc9, 0x2b, 0xca, 0x07, 0x52, 0xef, 0xdc, 0xb2, 0x02, 0x4e, 0xff, 0xbf, 0x53, 0x61, 0xa1, 0xb5, 0x46, 0xe0, 0x90, 0x67, 0x53, 0x21, 0xca, 0x04, 0xfe, 0xa2, 0x4d, 0xa4, 0x7b, 0x3c, 0x5d, 0x96, 0x21, 0xf0, 0x6e, 0x32, 0x51, 0xfe, 0x1c, 0xb8, 0x9d, 0x1d, 0xe0, 0x07, 0xe5, 0x5e, 0x70, 0xde, 0xde, 0x05, 0x1c, 0x1b, 0x69, 0x1e, 0x68, 0x9a, 0x65, 0x9e, 0x85, 0xda, 0xd3, 0x59, 0xcc, 0x41, 0x96, 0x15, 0x2f, 0x17, 0x35, 0x35, 0x0f, 0x5c, 0x15, 0x3f, 0x81, 0xe3, 0x43, 0xa9, 0x78, 0x94, 0x80, 0x6a, 0xcb, 0x6f, 0x52, 0xfb, 0xc2, 0x4c, 0x16, 0xce, 0x34, 0x1a, 0xa4, 0x92, 0x7b, 0x56, 0x2b, 0xad, 0x9d, 0x9d, 0x1d, 0x9d, 0x93, 0x73, 0xe6, 0x75, 0x2d, 0xee, 0xba, 0x67, 0x35, 0xce, 0x34, 0xf7, 0xb4, 0x75, 0x29, 0x34, 0x25, 0xb4, 0xae, 0x5e, 0x0d, 0x8d, 0x3e, 0x98, 0xd7, 0x04, 0x77, 0xce, 0x6b, 0x84, 0x79, 0x78, 0xe5, 0xc0, 0x8c, 0x11, 0x37, 0xd9, 0x30, 0x7f, 0x8c, 0x64, 0xa9, 0xa0, 0x0b, 0xda, 0xa2, 0x39, 0x1f, 0x59, 0x1f, 0x87, 0x8f, 0x1c, 0x43, 0x49, 0x30, 0xff, 0x79, 0x19, 0xb4, 0x51, 0xf8, 0x9f, 0x1d, 0xd0, 0xa6, 0xc6, 0x39, 0x2e, 0x60, 0xf8, 0x47, 0x28, 0x10, 0x53, 0xb8, 0xf8, 0xfe, 0x54, 0x71, 0x68, 0x26, 0xf1, 0xd9, 0x45, 0xbd, 0x98, 0x25, 0xe6, 0x0c, 0xb3, 0x5d, 0xb5, 0x93, 0x0d, 0x6f, 0x85, 0x31, 0x95, 0xeb, 0x46, 0xe2, 0x3c, 0x0a, 0xf6, 0x1f, 0xe9, 0xbb, 0x83, 0x7b, 0xca, 0xba, 0x59, 0x5f, 0x7a, 0xa9, 0xe1, 0x2d, 0x9f, 0x86, 0x73, 0xd1, 0x29, 0xed, 0x02, 0x91, 0xd3, 0xde, 0x2e, 0xd1, 0xd7, 0x45, 0x36, 0xc7, 0x32, 0x58, 0xa2, 0xcc, 0xb1, 0x35, 0xc4, 0x42, 0xa8, 0x43, 0x6d, 0x12, 0xb5, 0xb8, 0x1c, 0x92, 0xa3, 0xad, 0xd8, 0x73, 0x16, 0x42, 0x41, 0x68, 0x63, 0x5b, 0xff, 0x31, 0xb0, 0xa1, 0xa4, 0x75, 0xc7, 0xe5, 0xd4, 0x0a, 0xe7, 0x94, 0x95, 0x50, 0x0b, 0x55, 0x64, 0xdf, 0x83, 0xbe, 0xb1, 0x6e, 0x1a, 0x0c, 0xbc, 0x2b, 0x51, 0xd9, 0x45, 0xa4, 0xdb, 0x36, 0x9d, 0x21, 0x9a, 0x08, 0x6d, 0xb1, 0xbb, 0xd5, 0xaf, 0xbf, 0xe2, 0x91, 0xa2, 0x60, 0xb9, 0x54, 0xb2, 0xca, 0xdc, 0x78, 0x5e, 0x2a, 0x99, 0x31, 0x32, 0x28, 0x70, 0xd0, 0xa9, 0x40, 0xf8, 0x48, 0x1a, 0x82, 0x06, 0xdb, 0x1c, 0x01, 0xc1, 0x2d, 0x2b, 0xa0, 0x0a, 0x6a, 0x3f, 0x07, 0x8e, 0x13, 0xe9, 0x3d, 0x35, 0x51, 0x03, 0x96, 0xde, 0x96, 0x93, 0x2a, 0x39, 0x6c, 0x4c, 0xe1, 0x99, 0x79, 0x83, 0x25, 0x5a, 0x43, 0x92, 0x36, 0x9d, 0x94, 0xfe, 0x56, 0x9c, 0xbe, 0x77, 0xda, 0xb1, 0x1d, 0x6a, 0x96, 0x58, 0xcb, 0x6b, 0x7b, 0x91, 0x27, 0x65, 0xfc, 0xf2, 0x21, 0x24, 0x55, 0xca, 0xd3, 0x10, 0x14, 0xf5, 0xdf, 0x82, 0xe3, 0xc2, 0x8d, 0xbc, 0x01, 0x5b, 0x48, 0x7b, 0x5f, 0x64, 0xe3, 0xcf, 0x18, 0xcb, 0x21, 0x2b, 0x33, 0x48, 0xa7, 0x66, 0x75, 0x6e, 0x3c, 0xd3, 0x38, 0xc0, 0xdc, 0xad, 0x08, 0xb9, 0x5b, 0x5e, 0xf4, 0x22, 0xf9, 0x49, 0x00, 0xaf, 0x04, 0xcc, 0x19, 0x5d, 0xc4, 0x07, 0xa9, 0xdf, 0x84, 0xc7, 0xbb, 0xf3, 0x92, 0xb8, 0x9f, 0x51, 0xef, 0xef, 0xa9, 0xf7, 0xd3, 0x78, 0x47, 0x79, 0xf5, 0x5f, 0x4e, 0xa9, 0xf7, 0x7f, 0x97, 0xc8, 0x83, 0xde, 0x69, 0x29, 0x9f, 0x7f, 0x77, 0x42, 0xf4, 0x12, 0xce, 0xf3, 0xff, 0x72, 0x42, 0xba, 0x0e, 0x75, 0x77, 0x0b, 0x7c, 0x6a, 0x1c, 0x88, 0xb8, 0x7f, 0xe7, 0xb8, 0x53, 0xd2, 0xdb, 0xe4, 0x8f, 0x2d, 0x19, 0xf7, 0x34, 0xb9, 0xeb, 0xdd, 0x66, 0xf7, 0xed, 0xbf, 0x58, 0x6a, 0x14, 0xf8, 0x24, 0xaf, 0x6d, 0xe5, 0xad, 0x4b, 0x52, 0x6f, 0x05, 0xe2, 0x6e, 0x76, 0xcf, 0xd0, 0x2e, 0x35, 0x62, 0x29, 0x15, 0xf2, 0xf5, 0x61, 0xfd, 0x75, 0xe4, 0xf0, 0xf5, 0x7a, 0xe2, 0x83, 0xa1, 0xef, 0x2e, 0x06, 0x58, 0x84, 0xd7, 0x5d, 0x78, 0x2d, 0xc0, 0xab, 0x09, 0xaf, 0x10, 0x5e, 0x41, 0xbc, 0xea, 0xf1, 0xf2, 0xe2, 0x35, 0x13, 0xaf, 0x1a, 0xbc, 0xaa, 0xf0, 0xaa, 0xc0, 0xab, 0x1c, 0xaf, 0x52, 0xbc, 0x4a, 0xf0, 0xb2, 0xe1, 0x35, 0x09, 0xaf, 0x89, 0x78, 0x15, 0xe2, 0x95, 0x8f, 0x97, 0x05, 0xaf, 0x1c, 0xbc, 0xf4, 0x78, 0xc9, 0xda, 0x1f, 0x43, 0xc2, 0xdb, 0x1f, 0x1a, 0x86, 0x8d, 0x00, 0x5f, 0x28, 0xed, 0x16, 0x4c, 0xbb, 0x88, 0xd3, 0xfe, 0xe7, 0xeb, 0x7d, 0x12, 0xcb, 0xca, 0x07, 0xb8, 0xc3, 0x09, 0x7a, 0xf9, 0x9b, 0x13, 0x92, 0xde, 0x28, 0x8a, 0xf9, 0x32, 0x59, 0x54, 0x2c, 0x7f, 0x88, 0xac, 0x15, 0x7a, 0x9f, 0x03, 0xb3, 0x13, 0xa9, 0xc0, 0xb7, 0x0f, 0x8c, 0xce, 0x10, 0x68, 0x91, 0xa3, 0x8c, 0xa0, 0xdc, 0x55, 0x1b, 0x5a, 0x46, 0x7e, 0x13, 0x94, 0x09, 0x34, 0xb6, 0x9c, 0x16, 0xfa, 0x52, 0x32, 0xb4, 0x0b, 0x7a, 0xc4, 0x19, 0xec, 0x3b, 0x92, 0x98, 0x53, 0x1b, 0x8a, 0x94, 0xdd, 0xdd, 0x3c, 0x10, 0xfc, 0x71, 0x54, 0xa6, 0x15, 0x70, 0xe2, 0xd8, 0xa8, 0x6b, 0xdb, 0x52, 0xfb, 0xf3, 0xb4, 0x17, 0xce, 0xfb, 0xd2, 0xfa, 0xe0, 0xb3, 0xf2, 0x47, 0x11, 0xc7, 0x64, 0xf2, 0x39, 0xad, 0x21, 0xd3, 0xec, 0x93, 0x07, 0x25, 0x2d, 0x5e, 0x46, 0xbc, 0xcc, 0x93, 0x47, 0x02, 0x75, 0x0d, 0x8d, 0x40, 0x7a, 0x24, 0x59, 0x31, 0xb8, 0x7c, 0x57, 0x35, 0x59, 0xe7, 0x4c, 0x1c, 0x53, 0xdc, 0x53, 0x96, 0x41, 0x05, 0xb8, 0xa7, 0x78, 0xc1, 0xcf, 0x71, 0x24, 0xd7, 0x41, 0x89, 0x53, 0x94, 0xed, 0x70, 0x42, 0x91, 0x51, 0xc6, 0xb2, 0x0b, 0x63, 0x89, 0xc1, 0x3e, 0xc5, 0xdd, 0x05, 0x95, 0x64, 0x25, 0x46, 0x66, 0xbb, 0x75, 0xfa, 0x70, 0xc1, 0xa9, 0x8d, 0x61, 0x2b, 0x6a, 0xb0, 0xa4, 0x25, 0x8b, 0x13, 0xce, 0xee, 0x48, 0x81, 0xd3, 0xaf, 0x9e, 0x0d, 0xf0, 0x11, 0x57, 0x83, 0xe2, 0x30, 0x24, 0x9b, 0xe8, 0xce, 0x1e, 0x3c, 0x65, 0x3a, 0x4d, 0x80, 0x10, 0x17, 0x1b, 0xcb, 0x01, 0xa4, 0xa9, 0xd1, 0x49, 0xae, 0x1e, 0x1c, 0x07, 0x32, 0xad, 0x5c, 0x47, 0xf5, 0xca, 0x6e, 0xc4, 0xce, 0xb2, 0xa6, 0x78, 0x73, 0x7f, 0xa7, 0x7b, 0x67, 0x3c, 0x72, 0x26, 0x1c, 0xa1, 0x58, 0xc5, 0x88, 0x1c, 0x39, 0xe1, 0x5d, 0xaf, 0x50, 0x78, 0x78, 0x67, 0x7f, 0xe4, 0x3c, 0xa5, 0xf3, 0x5e, 0x98, 0x8c, 0xda, 0x95, 0xf7, 0x22, 0xb4, 0xf0, 0xfd, 0x32, 0x2c, 0xe3, 0xfb, 0x08, 0xb4, 0xd1, 0xdd, 0x07, 0x10, 0xe3, 0xbb, 0x16, 0xba, 0xf8, 0x6e, 0x84, 0xee, 0xd8, 0xf7, 0xeb, 0x81, 0xed, 0x04, 0x24, 0xbc, 0x8f, 0x2b, 0x6e, 0xa5, 0xb7, 0x39, 0xce, 0xab, 0xdc, 0x83, 0x91, 0x33, 0x24, 0x2b, 0xd0, 0xdc, 0xa6, 0xf8, 0xba, 0x20, 0x2c, 0x37, 0xf5, 0xb9, 0xac, 0x0b, 0xfb, 0x23, 0x97, 0x15, 0xef, 0xc1, 0x3d, 0x07, 0xf7, 0x1d, 0xdc, 0xe3, 0xb9, 0xd0, 0xaf, 0x57, 0x8c, 0x9d, 0xa4, 0xa7, 0xd6, 0x28, 0x6e, 0x97, 0x3c, 0x8f, 0x3c, 0xbf, 0xb8, 0x0f, 0x79, 0xe8, 0x9a, 0xef, 0x89, 0x41, 0xb8, 0xa6, 0x5b, 0xea, 0x5f, 0xe7, 0xda, 0xed, 0xac, 0x2d, 0xd5, 0x7a, 0xeb, 0x02, 0x75, 0xb7, 0xd6, 0x81, 0x7c, 0xab, 0x1f, 0xb4, 0xb7, 0xf6, 0x20, 0x3d, 0xe8, 0x6f, 0xf5, 0x80, 0xd1, 0xe6, 0xeb, 0x86, 0xea, 0xeb, 0x6c, 0xfe, 0x37, 0xf6, 0xde, 0xdc, 0xff, 0x28, 0x34, 0xc5, 0x3d, 0xa7, 0x21, 0x67, 0xe1, 0x3a, 0xbd, 0x27, 0x79, 0xe9, 0xf9, 0x78, 0xfb, 0x1e, 0xd7, 0xee, 0xd0, 0x27, 0x0a, 0xf2, 0x20, 0xdf, 0x1a, 0xe1, 0x83, 0x16, 0x73, 0xc8, 0xe4, 0x81, 0xb6, 0xe1, 0x2d, 0x77, 0xad, 0x58, 0x67, 0xac, 0x96, 0xed, 0x92, 0xdc, 0x47, 0xc6, 0xec, 0x4b, 0x24, 0xd2, 0xab, 0x65, 0x70, 0x48, 0x24, 0x57, 0x1b, 0xc1, 0x28, 0x21, 0xe4, 0x39, 0xf8, 0x2b, 0x7d, 0xf3, 0x65, 0x3f, 0x79, 0x15, 0x91, 0x85, 0x0f, 0x5c, 0xa7, 0x14, 0x5c, 0xbf, 0xe0, 0xe5, 0x40, 0x6f, 0xe0, 0x65, 0x7f, 0x2f, 0x3e, 0xaf, 0xfb, 0x66, 0xe6, 0xb9, 0x2f, 0xf3, 0x8c, 0xba, 0xbb, 0x89, 0x4e, 0x28, 0x91, 0xe4, 0xd1, 0xf0, 0x13, 0xd2, 0xd2, 0x69, 0xad, 0xcb, 0x4d, 0x5e, 0x24, 0x90, 0x42, 0x8a, 0xca, 0x50, 0x3f, 0x97, 0x59, 0x33, 0xa0, 0xbd, 0xf2, 0x46, 0x45, 0xa2, 0x73, 0xdd, 0xe7, 0x03, 0x34, 0x23, 0x48, 0x23, 0x8a, 0xcb, 0x08, 0x5d, 0x1a, 0x94, 0xe1, 0x2a, 0x64, 0x77, 0x02, 0xec, 0x92, 0xd7, 0x1b, 0xf0, 0x12, 0x8c, 0x18, 0xe3, 0x56, 0x5c, 0x0e, 0x11, 0x57, 0xd8, 0x95, 0xac, 0x97, 0x07, 0xfb, 0xba, 0x72, 0x4e, 0xfd, 0xbc, 0xa0, 0x36, 0x39, 0xb2, 0xa7, 0x8f, 0xe2, 0x8a, 0x80, 0xf8, 0x18, 0xc9, 0x5b, 0x74, 0x0e, 0x91, 0xd6, 0xed, 0xac, 0xb4, 0x4a, 0x81, 0x73, 0x3d, 0x5d, 0xa1, 0x5d, 0x12, 0x9d, 0xc6, 0x51, 0x32, 0xbb, 0xa1, 0x45, 0x4e, 0x98, 0x51, 0xec, 0x84, 0xaf, 0xd9, 0xdb, 0xcc, 0x6f, 0xf2, 0x0e, 0xef, 0xed, 0x5d, 0xda, 0xf7, 0xb7, 0x97, 0xc8, 0xf3, 0xd6, 0x85, 0x0b, 0x68, 0xae, 0x96, 0xe8, 0x9b, 0x12, 0xbd, 0xbe, 0x97, 0xd4, 0xf4, 0x29, 0x1e, 0xc8, 0xb1, 0x95, 0x42, 0xce, 0xf3, 0xbd, 0x4b, 0xa8, 0x3f, 0x4b, 0x41, 0x5f, 0x0e, 0x07, 0xd6, 0xb1, 0xfd, 0xae, 0x3e, 0xfa, 0xde, 0x5b, 0x81, 0xce, 0xac, 0x2f, 0xa4, 0x4b, 0x68, 0x8d, 0x6a, 0x67, 0xfa, 0xbd, 0xc7, 0xe6, 0x13, 0x69, 0x32, 0x6b, 0xbe, 0xf4, 0xd5, 0xef, 0x84, 0x24, 0x85, 0x5a, 0x41, 0xf6, 0xa1, 0x76, 0xe4, 0x4b, 0xc7, 0x55, 0x96, 0x64, 0xd2, 0xad, 0x09, 0xae, 0x8b, 0x2e, 0x9b, 0xe2, 0x03, 0xfd, 0x94, 0x1e, 0x4a, 0x09, 0x39, 0x41, 0x7d, 0xb4, 0xc0, 0xac, 0x05, 0x69, 0xa9, 0xc5, 0xa9, 0x71, 0x9a, 0xc9, 0x22, 0x47, 0x58, 0x3b, 0x6b, 0x38, 0x69, 0x7e, 0x7e, 0x3b, 0xe4, 0x2c, 0x81, 0x24, 0x9d, 0xa9, 0xd5, 0xaf, 0x91, 0xde, 0x7f, 0xda, 0xeb, 0x09, 0x5b, 0xd9, 0xa3, 0x4f, 0xdd, 0xe4, 0xdd, 0x6f, 0xfe, 0x82, 0x7a, 0xb4, 0xc9, 0xb3, 0x16, 0x6a, 0xa4, 0x17, 0xee, 0x6b, 0x3f, 0x4d, 0xf9, 0x23, 0xda, 0x4e, 0x99, 0x3c, 0x37, 0xc7, 0x7b, 0x7f, 0xbb, 0x1d, 0xf4, 0x8f, 0x60, 0x6e, 0xd5, 0x8a, 0xf4, 0x48, 0xc6, 0x23, 0xa6, 0x5d, 0xb5, 0x8b, 0x84, 0x23, 0x2b, 0x80, 0xe3, 0xb5, 0xe1, 0x8e, 0x0e, 0x68, 0x82, 0xca, 0x9a, 0x0e, 0x58, 0x80, 0x4f, 0x77, 0x41, 0xd5, 0x24, 0x27, 0xdc, 0x5d, 0xb2, 0xc2, 0xfc, 0xe6, 0xc4, 0x69, 0xf4, 0xdd, 0x91, 0xf4, 0x4e, 0xf0, 0x61, 0xfc, 0x3d, 0xa1, 0x68, 0xa9, 0x1f, 0x27, 0x24, 0x23, 0x66, 0x45, 0x13, 0xef, 0x13, 0xcf, 0xd1, 0x89, 0xb4, 0x1a, 0xc5, 0xdf, 0xda, 0x26, 0x6e, 0x3f, 0x90, 0xb6, 0xe7, 0x64, 0x0d, 0x83, 0xb4, 0x23, 0xb8, 0x2e, 0x22, 0x97, 0xc8, 0xf4, 0xed, 0xbb, 0x0d, 0xde, 0x7f, 0xa0, 0xcc, 0xd3, 0x03, 0xc5, 0xba, 0xd9, 0xc3, 0x89, 0x85, 0xe4, 0xe9, 0xeb, 0xa6, 0x3a, 0x70, 0xde, 0x34, 0x0b, 0xca, 0x31, 0xdd, 0xbd, 0x0a, 0xd6, 0x24, 0xbe, 0x00, 0x48, 0x51, 0x8a, 0xad, 0xf1, 0x8d, 0x41, 0xe5, 0xba, 0x4e, 0xcd, 0x9e, 0x78, 0xa4, 0x58, 0x5d, 0xbf, 0x37, 0x38, 0xf5, 0xa8, 0x1f, 0xcc, 0x06, 0x77, 0x68, 0x8b, 0x0d, 0xa1, 0xb7, 0xc5, 0xa9, 0x16, 0x4a, 0x81, 0x90, 0xd5, 0x13, 0x3d, 0xd9, 0x64, 0x1a, 0x09, 0x44, 0xcb, 0x44, 0x4f, 0x07, 0x5f, 0x56, 0xac, 0xe9, 0xfc, 0x32, 0x69, 0x1f, 0x9c, 0x3f, 0x40, 0xf9, 0xc9, 0xdf, 0xa7, 0x92, 0x9d, 0x5f, 0xbf, 0x36, 0x59, 0xaf, 0x7b, 0x3d, 0x6e, 0x93, 0xef, 0xcd, 0x39, 0xff, 0xf3, 0x98, 0xa6, 0x1e, 0xf6, 0xc4, 0x6d, 0x75, 0x6f, 0xbc, 0xac, 0x5c, 0x17, 0xec, 0x80, 0xca, 0x68, 0x99, 0xad, 0x96, 0xf0, 0x1c, 0xec, 0xc3, 0xf1, 0xfe, 0x92, 0x79, 0x3d, 0xf5, 0x16, 0x3e, 0x3d, 0xef, 0x79, 0x0f, 0x34, 0xb7, 0x04, 0xc0, 0x62, 0xd3, 0xc8, 0x9e, 0x0b, 0x10, 0xf3, 0xf7, 0xc5, 0x91, 0x62, 0x9e, 0xa0, 0x12, 0x69, 0xb4, 0xf8, 0x3d, 0x2e, 0x8f, 0x88, 0x41, 0x85, 0x45, 0x02, 0x67, 0xa4, 0x6c, 0xad, 0xd4, 0x77, 0xdf, 0xcc, 0xbc, 0x88, 0xb1, 0xc6, 0x18, 0x31, 0xfa, 0x07, 0x23, 0xda, 0x7b, 0xb5, 0x7d, 0xf7, 0x73, 0x5c, 0xf9, 0x92, 0x1c, 0x0c, 0x5b, 0x82, 0xf3, 0xb7, 0x3e, 0xba, 0xf0, 0x5e, 0x77, 0xdf, 0xfd, 0xe1, 0x05, 0x6b, 0x35, 0x57, 0xa7, 0xa5, 0xef, 0xd7, 0x39, 0xa4, 0x18, 0xe5, 0x90, 0x9c, 0x7b, 0xbf, 0x5f, 0x6f, 0xe8, 0xbb, 0x1f, 0xdf, 0x2c, 0xe5, 0x70, 0x66, 0x60, 0xad, 0xe6, 0xc0, 0x7d, 0x2f, 0x3d, 0x07, 0xd5, 0x2d, 0xfa, 0x72, 0x0b, 0xe6, 0xd7, 0xaf, 0x0d, 0x0f, 0xde, 0xd7, 0x17, 0x47, 0x88, 0x8d, 0x02, 0xde, 0xa8, 0x16, 0x3c, 0x5a, 0xb0, 0xf5, 0xea, 0xd7, 0x27, 0x93, 0x17, 0x40, 0xdf, 0x47, 0x61, 0x44, 0xa7, 0x56, 0x08, 0xae, 0x8f, 0x40, 0x22, 0x7e, 0xb5, 0xd7, 0x48, 0x85, 0x4e, 0x13, 0x58, 0x89, 0x06, 0x0a, 0x88, 0x06, 0xd8, 0x36, 0x35, 0xd0, 0xd7, 0xf8, 0xf4, 0xdd, 0x3e, 0xf9, 0xe0, 0xde, 0xda, 0x39, 0xb2, 0x27, 0x5e, 0xd2, 0xcb, 0x7d, 0xc7, 0x16, 0xbd, 0x23, 0x7a, 0xaf, 0x03, 0xe7, 0xf3, 0x22, 0xb3, 0x8c, 0x34, 0x6c, 0x55, 0x53, 0x85, 0x1a, 0xb3, 0xfd, 0x20, 0x0b, 0xcb, 0xd1, 0x74, 0x66, 0x33, 0x8f, 0xbe, 0x0a, 0x52, 0x96, 0x99, 0xdf, 0xb4, 0x3a, 0x88, 0xc2, 0xe0, 0x34, 0xaf, 0xf8, 0x2e, 0x72, 0x36, 0xf2, 0x97, 0xc7, 0x56, 0x9a, 0xd7, 0x50, 0xaa, 0x24, 0x3b, 0xce, 0x27, 0xc3, 0x7e, 0x92, 0xe4, 0xfe, 0x66, 0x00, 0x65, 0xae, 0xc1, 0xbf, 0x0d, 0x97, 0xf7, 0x5e, 0xb8, 0xd1, 0x0d, 0xa1, 0xb5, 0x47, 0xa5, 0x69, 0x38, 0x2f, 0x7e, 0xfd, 0x28, 0x18, 0xcb, 0x77, 0x93, 0x6d, 0x5d, 0xb2, 0xb4, 0x73, 0xe1, 0xc6, 0x06, 0x30, 0xbe, 0x0c, 0x37, 0x89, 0x34, 0xde, 0x1f, 0x5f, 0xb8, 0xd1, 0x08, 0x17, 0x6e, 0x34, 0x03, 0xca, 0xec, 0xab, 0xb1, 0x6f, 0xd6, 0x93, 0x65, 0x57, 0xac, 0xc1, 0x8c, 0x75, 0x69, 0xbe, 0x39, 0xe8, 0x87, 0x9b, 0xe8, 0x8b, 0x33, 0x8f, 0xf0, 0x19, 0x4e, 0x2e, 0xd6, 0xf9, 0xc4, 0x57, 0x76, 0xcd, 0x8d, 0x2c, 0x43, 0x52, 0x5d, 0xb3, 0x35, 0x17, 0x69, 0x45, 0x74, 0x66, 0x71, 0x50, 0x8a, 0xea, 0xf9, 0x69, 0xdb, 0xb4, 0x10, 0x10, 0x87, 0xff, 0x3b, 0xab, 0x26, 0xf4, 0x77, 0x46, 0x3d, 0x5e, 0x86, 0x8b, 0xdd, 0x17, 0x9b, 0xff, 0x52, 0xa4, 0xf0, 0xba, 0x47, 0xe8, 0xef, 0x50, 0x47, 0xfd, 0x3b, 0xab, 0x16, 0x2f, 0x1d, 0x5e, 0x18, 0x6f, 0x35, 0x84, 0x56, 0xd3, 0xca, 0x48, 0xca, 0x26, 0x31, 0xe3, 0xc0, 0x9c, 0xc6, 0x81, 0x97, 0x31, 0xa0, 0x8c, 0xa9, 0xdf, 0x2a, 0xf4, 0x1a, 0x6a, 0x89, 0x9b, 0xbe, 0xc4, 0x5e, 0x1d, 0x2e, 0x1e, 0x13, 0x6f, 0xa1, 0xf8, 0x18, 0xd7, 0xf5, 0x97, 0x22, 0x51, 0x3a, 0xf3, 0xc0, 0x5a, 0x3a, 0x09, 0x41, 0x3d, 0x33, 0x49, 0x60, 0xf7, 0xa8, 0x62, 0xc5, 0xdf, 0x43, 0x6c, 0xb5, 0x24, 0x71, 0xfb, 0xe5, 0x59, 0xc2, 0x16, 0xc0, 0xc3, 0x74, 0xa2, 0xdb, 0xfc, 0xe6, 0xec, 0xe1, 0xe1, 0x90, 0x6a, 0x07, 0xd6, 0xfa, 0xff, 0xfa, 0xf5, 0x1a, 0x70, 0x68, 0x62, 0xe6, 0xb7, 0x9f, 0x31, 0xaf, 0x23, 0xa6, 0x14, 0xb5, 0xe0, 0xe8, 0xc6, 0x34, 0xb4, 0xcf, 0x52, 0x8a, 0xf3, 0xdc, 0x5a, 0x50, 0x74, 0xff, 0x14, 0x57, 0xb9, 0x80, 0x51, 0xa4, 0x89, 0xdc, 0x65, 0x36, 0x20, 0xe4, 0x66, 0x9b, 0x7c, 0xf6, 0x01, 0xf2, 0xc6, 0xe4, 0x85, 0xb0, 0xd5, 0x26, 0x9f, 0xa1, 0x67, 0x8d, 0x22, 0x9f, 0xef, 0x27, 0x3f, 0x4d, 0x4e, 0xb9, 0x47, 0xb3, 0xbf, 0xd7, 0xa9, 0xef, 0x94, 0xf6, 0xc4, 0x9d, 0x92, 0x7f, 0x4f, 0xca, 0x92, 0xb7, 0x13, 0x19, 0xfa, 0x05, 0x70, 0xca, 0xf4, 0xed, 0x40, 0x32, 0xe9, 0xcc, 0x23, 0xf8, 0xaa, 0xaf, 0xe7, 0xbd, 0x17, 0xc5, 0xae, 0x2b, 0xf5, 0x37, 0xad, 0xe3, 0x3a, 0xa4, 0x08, 0x24, 0x57, 0x90, 0x1c, 0x54, 0x5d, 0x0d, 0x65, 0x0d, 0x6f, 0xd5, 0x8e, 0x84, 0x93, 0xa8, 0xa8, 0x5e, 0xa6, 0x27, 0x6e, 0xaf, 0x8b, 0x4e, 0x80, 0x20, 0x3f, 0x73, 0x20, 0x3f, 0x2b, 0x43, 0x7e, 0xe6, 0xaa, 0x71, 0x42, 0x55, 0xad, 0x13, 0x6a, 0x66, 0x3a, 0x61, 0x26, 0xaf, 0x61, 0xf9, 0xec, 0x6e, 0x67, 0x4e, 0x70, 0xd6, 0x82, 0x74, 0xbd, 0xc1, 0xfa, 0xac, 0xe7, 0xba, 0xcc, 0x73, 0x86, 0x9b, 0x55, 0xd7, 0xa7, 0xb9, 0x99, 0xe2, 0x0c, 0x82, 0xdb, 0x35, 0x8b, 0x64, 0x2e, 0x57, 0x3d, 0xf9, 0x65, 0x74, 0xd5, 0xb1, 0xa7, 0x5b, 0x3f, 0xaa, 0x87, 0x3e, 0x28, 0x43, 0xc9, 0xc5, 0xe1, 0x9c, 0x43, 0xfa, 0xab, 0x79, 0x24, 0x0c, 0xc3, 0x8f, 0x53, 0x09, 0x08, 0x8d, 0x95, 0xf6, 0x71, 0xd2, 0xa5, 0x7d, 0x4f, 0x94, 0x96, 0x9a, 0xbf, 0x10, 0x27, 0x1a, 0x5a, 0x67, 0x27, 0x6b, 0x85, 0xa1, 0x5d, 0xc3, 0x74, 0xde, 0xb3, 0x4c, 0xec, 0xb5, 0x38, 0x2d, 0xb1, 0x82, 0xf1, 0x76, 0x39, 0xe8, 0xab, 0xbb, 0x28, 0x79, 0xd2, 0x35, 0xde, 0xec, 0x36, 0xbf, 0x69, 0x53, 0xd7, 0xe6, 0x5c, 0x53, 0x25, 0x07, 0xf2, 0x02, 0x92, 0x9a, 0x35, 0x38, 0xf2, 0x8a, 0xfd, 0x83, 0x2b, 0x8c, 0x6c, 0x33, 0x48, 0x1b, 0xb6, 0x22, 0xd7, 0x30, 0x93, 0xbc, 0x8e, 0xcf, 0x98, 0x92, 0xc6, 0x9f, 0xa0, 0x8d, 0xbf, 0x46, 0x2e, 0xf8, 0xc7, 0x11, 0xb8, 0x29, 0x99, 0x5c, 0x62, 0x34, 0xa3, 0xea, 0x1c, 0xc1, 0x19, 0xe5, 0xaf, 0x93, 0x13, 0xb0, 0x75, 0x63, 0xe4, 0x04, 0x55, 0x4a, 0xf8, 0x6e, 0x5a, 0xf7, 0x62, 0x39, 0xc5, 0x55, 0x63, 0xb7, 0x88, 0x54, 0xcd, 0x8e, 0x12, 0x37, 0xef, 0xef, 0x02, 0x3c, 0x7b, 0x63, 0x0f, 0x01, 0x84, 0xbf, 0xdf, 0x07, 0x13, 0x69, 0x41, 0xd5, 0x3f, 0x82, 0x1c, 0xc5, 0x4d, 0xbb, 0x6d, 0x55, 0x3f, 0x79, 0xe4, 0x75, 0xc4, 0xc8, 0x4f, 0x1f, 0x7e, 0xad, 0xee, 0x7d, 0xb0, 0x78, 0x3e, 0x7a, 0x14, 0x52, 0x16, 0x61, 0x66, 0x93, 0x45, 0x98, 0x07, 0x7d, 0xef, 0x81, 0x79, 0xe7, 0x88, 0x19, 0x22, 0xa7, 0x3c, 0xef, 0x9b, 0x0b, 0x63, 0x50, 0x02, 0x47, 0xe2, 0x36, 0xcd, 0xbb, 0x0f, 0x6c, 0x5e, 0x57, 0x22, 0x11, 0xc7, 0x33, 0x5b, 0x8e, 0xfc, 0x40, 0x59, 0xe7, 0xdd, 0x96, 0x1c, 0x21, 0x3b, 0x1e, 0xe6, 0xfc, 0x43, 0x3f, 0x98, 0xec, 0x49, 0x5e, 0x66, 0xf9, 0xca, 0x42, 0x76, 0x15, 0x23, 0x07, 0x6c, 0x73, 0x68, 0x17, 0x25, 0x31, 0xd1, 0x99, 0x9b, 0xbd, 0x73, 0xfc, 0xd5, 0x53, 0xd9, 0xbe, 0x0b, 0x04, 0xbd, 0xd8, 0x72, 0x91, 0x03, 0x7a, 0x94, 0x5c, 0xfe, 0x1e, 0x38, 0xfd, 0x95, 0x3d, 0x8d, 0xae, 0xef, 0x3c, 0x1a, 0xa6, 0x6f, 0x59, 0xb5, 0x88, 0x03, 0xb2, 0xad, 0xb5, 0x91, 0x6d, 0x28, 0xe6, 0x47, 0xce, 0xaa, 0xdf, 0xd2, 0x7f, 0x97, 0xbd, 0xc1, 0xe3, 0xbc, 0x2f, 0x6d, 0x36, 0x1f, 0x61, 0x2d, 0xe7, 0x4e, 0x00, 0x6a, 0x5d, 0xf5, 0xff, 0xed, 0xea, 0x31, 0x62, 0x6f, 0x59, 0x07, 0xad, 0x5f, 0x8a, 0x0c, 0x07, 0x56, 0xa9, 0x5f, 0xd7, 0xb3, 0xbf, 0xc6, 0x6f, 0xfb, 0xf1, 0xd9, 0x18, 0xe8, 0x36, 0xf2, 0xc9, 0xd7, 0x6f, 0x16, 0xb0, 0xf5, 0x89, 0xce, 0x5b, 0x20, 0x3c, 0xcc, 0x67, 0x5d, 0xd9, 0x02, 0x7c, 0xda, 0x3e, 0x97, 0x4e, 0x9a, 0x12, 0x55, 0x94, 0x72, 0x88, 0x45, 0x27, 0x76, 0x6a, 0xd5, 0x55, 0xda, 0x76, 0x68, 0x1b, 0xbb, 0x4a, 0x2b, 0x34, 0xaf, 0xa0, 0x43, 0xba, 0xa5, 0xcd, 0x81, 0xbf, 0xd3, 0xda, 0xf8, 0xab, 0x87, 0xa6, 0x70, 0xd0, 0x1d, 0x2d, 0x12, 0xe7, 0x7e, 0xdd, 0xb4, 0x2a, 0xe1, 0x05, 0xb3, 0x9d, 0x4e, 0xea, 0x20, 0x7c, 0xee, 0x67, 0xed, 0xe2, 0x0c, 0x90, 0x4c, 0x56, 0xf4, 0xa9, 0x46, 0xfe, 0xc6, 0xa7, 0x6a, 0x95, 0x9e, 0x3c, 0x5b, 0x84, 0x6b, 0x3a, 0x65, 0x7c, 0x9b, 0x94, 0x5f, 0x0b, 0x1a, 0xc4, 0x64, 0x59, 0x38, 0x07, 0xf3, 0x1a, 0xed, 0x37, 0xa1, 0x34, 0x1f, 0x4e, 0x97, 0x5c, 0x38, 0xa6, 0x64, 0x8c, 0x4d, 0x95, 0x9b, 0x3a, 0xb3, 0x1b, 0x53, 0xc6, 0x58, 0x57, 0x20, 0xca, 0x77, 0xdf, 0xc0, 0x76, 0x49, 0xa6, 0x20, 0x76, 0x21, 0xe7, 0x86, 0x9e, 0x64, 0x1c, 0x4c, 0xb7, 0xf5, 0x68, 0x51, 0x9f, 0xf2, 0x6e, 0x07, 0x2b, 0x86, 0x5a, 0xf9, 0xdc, 0x68, 0x41, 0x13, 0x69, 0xd6, 0x45, 0x18, 0xa6, 0xee, 0xaf, 0x7b, 0xce, 0x4b, 0x5e, 0x5b, 0x10, 0xfb, 0xf2, 0x23, 0x25, 0x47, 0x9c, 0x41, 0x64, 0xab, 0xef, 0x33, 0x51, 0x42, 0xac, 0x2c, 0xed, 0x80, 0xea, 0x92, 0x36, 0xb0, 0x4e, 0x9d, 0x87, 0x33, 0x0e, 0xce, 0x70, 0x3f, 0x7a, 0x06, 0x8a, 0x1d, 0x78, 0x2f, 0xd3, 0x9e, 0x7a, 0xa8, 0x0b, 0x4a, 0x6b, 0x21, 0x79, 0x77, 0x19, 0xce, 0x19, 0x8f, 0x97, 0x4f, 0x47, 0xdd, 0xb4, 0x29, 0x38, 0x82, 0x33, 0xfe, 0x86, 0x7f, 0x3a, 0x83, 0xe3, 0xe0, 0x5e, 0x27, 0x59, 0xbd, 0x29, 0x2b, 0x9b, 0xb3, 0x06, 0xc2, 0x85, 0xca, 0x22, 0x27, 0xcd, 0x29, 0xc8, 0x71, 0xd4, 0xef, 0xf7, 0xe3, 0x51, 0x63, 0xd3, 0xba, 0xe7, 0xd7, 0x2d, 0x79, 0x27, 0x5c, 0x1e, 0x4b, 0xee, 0x58, 0x17, 0x75, 0x1c, 0x59, 0xa7, 0xf8, 0x0e, 0xbe, 0xe2, 0xf9, 0x73, 0x3f, 0xd8, 0x1a, 0xf3, 0xa7, 0x42, 0xae, 0xb5, 0x14, 0x72, 0x77, 0x48, 0x4b, 0xcc, 0x11, 0x05, 0xdf, 0xf2, 0x76, 0x96, 0x42, 0x5e, 0x7b, 0xa1, 0xb2, 0x31, 0x9c, 0xaf, 0xc8, 0x43, 0x7d, 0x43, 0xf1, 0x5b, 0x36, 0xa2, 0x34, 0xd7, 0xb7, 0xbb, 0x0f, 0xc7, 0xc0, 0x76, 0x65, 0x05, 0xe8, 0xff, 0x69, 0x5f, 0x8b, 0xb6, 0xee, 0x74, 0x72, 0xa4, 0x24, 0x87, 0xd7, 0x26, 0xe5, 0xa6, 0x8d, 0xf3, 0x37, 0xbe, 0xb4, 0x11, 0xa5, 0xc1, 0xf6, 0xc6, 0x1f, 0xda, 0xef, 0xc4, 0x1a, 0x36, 0x22, 0x67, 0x5c, 0x24, 0xf2, 0x7a, 0x7f, 0x69, 0x04, 0x45, 0xfe, 0xf7, 0xfe, 0xce, 0xdc, 0xa1, 0xde, 0x35, 0x97, 0x07, 0xd7, 0x3d, 0x1a, 0xc7, 0x7e, 0x30, 0xec, 0x5c, 0xdf, 0x32, 0xd1, 0xf3, 0x67, 0x8c, 0x79, 0x06, 0xac, 0x8f, 0xc6, 0x27, 0xa3, 0x8e, 0x31, 0x35, 0x80, 0x9c, 0x09, 0xe7, 0x85, 0xdf, 0x61, 0x8b, 0x3b, 0xa5, 0x18, 0xcc, 0xeb, 0x0b, 0xbb, 0x68, 0x1f, 0xfa, 0xe0, 0x3e, 0x82, 0xd2, 0xd1, 0xd8, 0x14, 0xb7, 0xbb, 0x7f, 0x3b, 0xf8, 0xdb, 0xd7, 0xeb, 0xfe, 0xbc, 0x0d, 0x6c, 0x4d, 0x85, 0x65, 0x90, 0xf7, 0x02, 0x42, 0xda, 0x66, 0xb6, 0x3f, 0xa8, 0x3c, 0x80, 0xb2, 0xa7, 0x96, 0xf2, 0x3c, 0x1f, 0x5f, 0xb2, 0x3f, 0xe8, 0x89, 0x5e, 0x54, 0x72, 0x85, 0x6c, 0xd9, 0x33, 0x22, 0xec, 0x84, 0x28, 0xd5, 0x48, 0x13, 0x45, 0xb4, 0xbe, 0x43, 0xb6, 0xc9, 0x10, 0x83, 0x16, 0xb6, 0xfc, 0x63, 0xe1, 0x7d, 0x7a, 0xc4, 0x8d, 0xfd, 0xdb, 0x6c, 0x41, 0xfe, 0x0c, 0x9d, 0x88, 0x28, 0xd6, 0xb2, 0xb7, 0x06, 0xee, 0x29, 0x5b, 0xbb, 0x54, 0x20, 0xb7, 0x27, 0xbf, 0x2f, 0x95, 0x1a, 0xa7, 0xd2, 0x6a, 0x49, 0xa4, 0x1c, 0xfb, 0x6e, 0xeb, 0x3f, 0x9e, 0x97, 0x9e, 0x88, 0x56, 0x29, 0xe5, 0xd2, 0x56, 0xe4, 0x7f, 0x9b, 0x04, 0xcf, 0x19, 0xec, 0x55, 0xdc, 0x38, 0x5f, 0x9a, 0x76, 0x4c, 0x05, 0x53, 0xbb, 0x91, 0x29, 0xdd, 0x1e, 0xcd, 0xbf, 0x9e, 0x38, 0xe0, 0x04, 0xca, 0x43, 0xbd, 0x2d, 0xa4, 0x19, 0xd5, 0x1b, 0x84, 0x58, 0xb1, 0xc2, 0xf2, 0xaf, 0x6b, 0x97, 0x4a, 0xc0, 0x6a, 0x74, 0x80, 0x1e, 0x2c, 0x6c, 0x41, 0xd4, 0x3b, 0xf6, 0x14, 0xb5, 0x33, 0x47, 0x8c, 0x07, 0xfb, 0x32, 0xac, 0x2f, 0x3f, 0xca, 0x5f, 0xa6, 0x28, 0x71, 0xa5, 0x69, 0x32, 0xd9, 0x9a, 0xd5, 0x86, 0xe5, 0x47, 0x5e, 0x17, 0x65, 0x71, 0x0b, 0xcc, 0x4d, 0xcf, 0x4a, 0x45, 0xd0, 0x0e, 0x71, 0xa9, 0x34, 0xec, 0x55, 0x82, 0xe4, 0x01, 0x08, 0x69, 0xfb, 0x25, 0x91, 0x02, 0xe3, 0x8a, 0xbf, 0xb2, 0x02, 0xac, 0x52, 0xc9, 0xf4, 0xa0, 0x54, 0xf0, 0xf5, 0x76, 0x49, 0x91, 0x6c, 0x72, 0xfb, 0x5b, 0x49, 0xc9, 0xce, 0x27, 0x23, 0x26, 0x04, 0x11, 0x23, 0x6d, 0x64, 0x55, 0xb0, 0x3e, 0x05, 0x41, 0x8a, 0x3e, 0xf9, 0xab, 0x24, 0x28, 0x31, 0x3a, 0x4c, 0x8e, 0x50, 0xac, 0x70, 0x8c, 0xde, 0x41, 0xe3, 0xa0, 0x69, 0xa2, 0x7c, 0x8b, 0x0f, 0x8c, 0xb7, 0xf8, 0xc1, 0x7c, 0x4b, 0x10, 0xac, 0x37, 0xf6, 0x24, 0x4f, 0x40, 0xc1, 0x8d, 0x5e, 0xb8, 0x21, 0x73, 0x9e, 0x64, 0xa2, 0x2c, 0xdf, 0x47, 0x5c, 0x5a, 0xd1, 0x0d, 0xdd, 0x77, 0x2c, 0x4e, 0x5a, 0xc2, 0xc1, 0x7f, 0xf5, 0x5c, 0xec, 0xb7, 0x94, 0x6c, 0x42, 0x59, 0x55, 0x6b, 0x6b, 0xbc, 0x79, 0x0e, 0xb6, 0xea, 0x07, 0x99, 0x53, 0x0c, 0xcc, 0xbd, 0x6a, 0x85, 0x06, 0x4f, 0xdf, 0xd8, 0x92, 0xf6, 0x4e, 0xbb, 0xc0, 0xc2, 0xff, 0x82, 0x7a, 0x52, 0x00, 0x0e, 0xc5, 0x87, 0x7a, 0x87, 0xe2, 0x43, 0x71, 0x25, 0x66, 0xb4, 0xa0, 0xbe, 0x3b, 0xc9, 0xb6, 0x0c, 0x8c, 0x64, 0x3b, 0x3b, 0x9a, 0x8f, 0xf4, 0x6f, 0xc5, 0xcb, 0xec, 0xd4, 0x86, 0x7e, 0xb4, 0x3e, 0xce, 0x7c, 0xce, 0x57, 0x62, 0x8d, 0xbc, 0x19, 0x96, 0x85, 0x57, 0x15, 0xe1, 0x5f, 0x10, 0xdb, 0x55, 0x51, 0x80, 0xed, 0x2a, 0x35, 0x39, 0x2c, 0x28, 0xe7, 0xe4, 0x2d, 0x69, 0xbb, 0x46, 0xeb, 0xee, 0xe2, 0xb6, 0xd5, 0xa5, 0xdb, 0x76, 0x61, 0x7c, 0xdb, 0x68, 0xde, 0x82, 0x64, 0xca, 0x8e, 0x97, 0xe2, 0x3f, 0x38, 0xe8, 0x39, 0x6d, 0xc6, 0x96, 0x91, 0x46, 0x67, 0xb6, 0x1c, 0x8d, 0x23, 0x5e, 0xae, 0xd1, 0x42, 0xf2, 0x3c, 0x41, 0xad, 0x6c, 0xa8, 0x25, 0xbe, 0xc5, 0x67, 0x0b, 0x27, 0xa4, 0x6c, 0x3c, 0x91, 0x96, 0x7a, 0x70, 0x10, 0x65, 0x30, 0x4b, 0x38, 0xdd, 0x12, 0xfa, 0x86, 0x3c, 0xb4, 0x49, 0xf1, 0x36, 0x0e, 0xd8, 0xad, 0x91, 0x33, 0x69, 0xbe, 0x64, 0x21, 0xbd, 0x97, 0x38, 0xd7, 0x82, 0xc7, 0xa9, 0x95, 0x6c, 0xcf, 0xe7, 0xbb, 0x31, 0x50, 0x7a, 0x68, 0x3d, 0x3f, 0xa9, 0x63, 0x2f, 0x13, 0xe5, 0xe6, 0x23, 0x63, 0xad, 0x32, 0xab, 0xe7, 0xc6, 0x03, 0x14, 0x93, 0xd1, 0x10, 0xcb, 0xee, 0x4e, 0x97, 0x69, 0x14, 0xbc, 0xbc, 0x71, 0x40, 0x2d, 0x4f, 0xca, 0x94, 0x47, 0xf3, 0x02, 0x9f, 0xc2, 0x0e, 0x70, 0x5f, 0x54, 0x9b, 0x1d, 0xd4, 0xdb, 0x11, 0x57, 0x06, 0x1f, 0x4c, 0xa1, 0x9b, 0x53, 0x14, 0x9a, 0x69, 0xb1, 0x2d, 0x18, 0x2b, 0xcc, 0xd4, 0xa6, 0xda, 0x1e, 0xfa, 0xee, 0xb8, 0xb2, 0x2e, 0xfc, 0x67, 0xca, 0x8a, 0x69, 0x32, 0x70, 0xf2, 0xbb, 0x9c, 0x05, 0x37, 0xd1, 0xb3, 0x51, 0xdc, 0x53, 0xed, 0x14, 0xf6, 0x44, 0xa9, 0xad, 0x9e, 0x07, 0xd3, 0x6d, 0x55, 0xe3, 0x69, 0x2d, 0xb5, 0xfa, 0x45, 0x73, 0x7c, 0xdd, 0x05, 0xe2, 0x70, 0x9d, 0x49, 0x45, 0x6d, 0x37, 0xfe, 0xa5, 0x56, 0x1a, 0x92, 0xf3, 0xcc, 0xe2, 0xbb, 0x0e, 0xce, 0xa9, 0xe6, 0xa5, 0x5d, 0x90, 0xd4, 0x4e, 0x88, 0xe7, 0x41, 0x7c, 0x2a, 0xca, 0xa4, 0x54, 0x65, 0x0b, 0x17, 0x73, 0x23, 0x27, 0x14, 0x13, 0x45, 0x07, 0xe2, 0x55, 0x6e, 0x3a, 0xad, 0xe1, 0x79, 0x30, 0xcc, 0x5f, 0xec, 0x84, 0x36, 0xcf, 0xeb, 0x43, 0xae, 0xd4, 0x17, 0xf9, 0x48, 0x7c, 0x65, 0x2e, 0xd6, 0x57, 0x9d, 0xa4, 0x2b, 0x36, 0xe2, 0x75, 0x73, 0x68, 0x57, 0xf2, 0x25, 0x7e, 0xcb, 0x11, 0x70, 0xd3, 0x7c, 0xcb, 0xab, 0x10, 0xef, 0xce, 0x24, 0xf9, 0xda, 0x81, 0xa9, 0xcb, 0x44, 0xfc, 0x6c, 0x2e, 0x95, 0xce, 0x1b, 0x62, 0x9e, 0x5d, 0x44, 0x1d, 0xdd, 0x9a, 0x39, 0xc3, 0x49, 0xd2, 0x07, 0x37, 0x35, 0xad, 0xb3, 0x16, 0x45, 0x49, 0xe3, 0xc8, 0x89, 0xea, 0xf1, 0x77, 0x42, 0xe4, 0x7c, 0x2c, 0xb4, 0x63, 0x5d, 0x9b, 0xbc, 0x26, 0xd4, 0x13, 0x7a, 0x7c, 0x1d, 0xe7, 0xbf, 0x99, 0xed, 0xe0, 0xe9, 0x79, 0xef, 0x49, 0x66, 0x7b, 0x5c, 0xf8, 0x7e, 0xf2, 0x21, 0xe4, 0x9c, 0x7a, 0x7e, 0x63, 0xbf, 0xd3, 0x6b, 0x51, 0xaa, 0xb6, 0x4e, 0x0c, 0xc4, 0x9d, 0x32, 0x63, 0x72, 0x4b, 0xd3, 0x7d, 0x8d, 0x03, 0xb3, 0xb8, 0x5e, 0xd4, 0xfb, 0xdf, 0xc9, 0xa4, 0x55, 0x4b, 0x7c, 0x58, 0x85, 0x5c, 0x9c, 0x73, 0xcb, 0x8f, 0x5a, 0x9a, 0x36, 0xce, 0x5b, 0x1f, 0x35, 0x2a, 0x41, 0x9c, 0xb5, 0x70, 0xf6, 0x60, 0x48, 0xad, 0xcd, 0x03, 0x02, 0xf2, 0x60, 0x7e, 0xc4, 0x12, 0xa6, 0xb6, 0x88, 0x5e, 0xc2, 0xda, 0xad, 0x13, 0x45, 0xd9, 0x91, 0x33, 0xa9, 0x72, 0x1a, 0x69, 0xb6, 0x76, 0xa0, 0xc4, 0xdd, 0x13, 0x86, 0xc4, 0x11, 0xba, 0x0b, 0x7a, 0x15, 0xfd, 0x8c, 0xb4, 0x8f, 0x5a, 0x4f, 0xde, 0x1e, 0x55, 0x6e, 0x15, 0x1e, 0x78, 0x6a, 0x88, 0xe3, 0xf3, 0xce, 0xc8, 0x09, 0x9a, 0x25, 0x84, 0x05, 0x2c, 0x00, 0x96, 0x62, 0x54, 0xc9, 0x26, 0x33, 0x9e, 0xc4, 0x17, 0x44, 0x4a, 0x0d, 0x9d, 0x8e, 0xa3, 0xbe, 0x14, 0x3b, 0x69, 0x8d, 0x43, 0x64, 0xf1, 0x29, 0xc2, 0x7d, 0x5c, 0xfd, 0x4a, 0x78, 0x22, 0x4b, 0x62, 0xb9, 0xe2, 0xdb, 0x9f, 0xa6, 0x72, 0xb6, 0x5c, 0x59, 0xc8, 0x61, 0x45, 0xde, 0x9f, 0xf1, 0xce, 0xdb, 0xb2, 0xc6, 0x81, 0x1f, 0xff, 0x2a, 0x4c, 0xd6, 0x6a, 0xdc, 0x36, 0xfa, 0x26, 0x99, 0xbe, 0x00, 0x52, 0xfe, 0xfe, 0x40, 0x6a, 0xa5, 0x9e, 0xf8, 0x4c, 0x64, 0x12, 0xce, 0x48, 0xc5, 0x6c, 0xb1, 0x29, 0x87, 0xf3, 0x36, 0xa4, 0xf2, 0x52, 0x0f, 0x87, 0xef, 0xba, 0xc5, 0x2b, 0x95, 0x89, 0x99, 0x00, 0xe7, 0x0a, 0x49, 0x8e, 0x46, 0x03, 0x9c, 0xea, 0xc7, 0xde, 0x9f, 0xd5, 0x0d, 0x27, 0xdd, 0xa1, 0xcd, 0x0e, 0xe4, 0x0c, 0x88, 0x2d, 0x9c, 0xf7, 0x51, 0xb3, 0x70, 0x00, 0x42, 0x83, 0xbf, 0x39, 0xfc, 0x9b, 0x47, 0xb6, 0xc0, 0x89, 0x6a, 0x39, 0xc7, 0x6b, 0x58, 0x2e, 0xfb, 0xd9, 0x51, 0x16, 0xf2, 0xda, 0xe7, 0x7e, 0xe6, 0xb5, 0xda, 0xec, 0x33, 0x9c, 0xdf, 0x5a, 0x08, 0x89, 0xbb, 0x8b, 0x24, 0xd9, 0xb8, 0x14, 0x9f, 0x51, 0xce, 0xfd, 0xd6, 0x23, 0x90, 0xb8, 0x2b, 0x26, 0x36, 0xe5, 0x63, 0x9d, 0x1d, 0x4b, 0x5b, 0x57, 0xaf, 0xee, 0xe8, 0x1c, 0x7f, 0x86, 0xf3, 0xea, 0x88, 0xec, 0x73, 0x1f, 0x15, 0xff, 0x25, 0x8e, 0x58, 0x13, 0xdf, 0xee, 0xa7, 0x33, 0x2c, 0x53, 0x56, 0xc3, 0x9d, 0xed, 0x2b, 0xdb, 0x3b, 0xfe, 0xb6, 0x1d, 0xaa, 0xaa, 0x5d, 0x55, 0x2e, 0xfa, 0xad, 0xe4, 0xdf, 0x19, 0xfc, 0x5b, 0xc1, 0xbf, 0xb7, 0xf2, 0xaf, 0xcb, 0x05, 0xca, 0x34, 0xa5, 0xbe, 0xf1, 0x4e, 0xba, 0x55, 0x55, 0x57, 0x57, 0x57, 0xa4, 0x1e, 0x6e, 0xbd, 0xea, 0xd8, 0x46, 0xc6, 0xff, 0xde, 0xa2, 0x53, 0x90, 0xf8, 0x4e, 0x45, 0xd6, 0xb9, 0xcf, 0x9a, 0x98, 0xed, 0xda, 0x36, 0x1c, 0xe1, 0xc2, 0xac, 0xb3, 0xac, 0x13, 0x08, 0xcd, 0x60, 0xa9, 0xd0, 0x0c, 0x10, 0x6b, 0x39, 0xca, 0x1c, 0x92, 0x9d, 0xbf, 0x75, 0x39, 0x35, 0x43, 0x93, 0x7e, 0xf0, 0xd9, 0xa7, 0x46, 0xbf, 0xb5, 0xaf, 0x4e, 0x9c, 0xeb, 0xdc, 0x7c, 0xf5, 0xa9, 0xd1, 0x6f, 0x1d, 0x0d, 0x6d, 0x1e, 0x2b, 0xfb, 0xdf, 0xb5, 0xb0, 0x4e, 0x9c, 0x1a, 0xdd, 0xac, 0x9e, 0x1a, 0x5d, 0xe0, 0xcc, 0xcd, 0x4a, 0x7f, 0x81, 0xc3, 0xb3, 0x4e, 0x8d, 0x7e, 0xeb, 0xc4, 0xd5, 0xa7, 0x46, 0xbf, 0x35, 0x34, 0xf6, 0xd4, 0xa8, 0xad, 0x21, 0x66, 0x1b, 0x7b, 0x4e, 0x34, 0x6c, 0x41, 0xcd, 0x23, 0xe5, 0xf3, 0x6a, 0x62, 0x6a, 0xd6, 0x5a, 0xc8, 0xfb, 0x6e, 0x24, 0xb7, 0xba, 0x6c, 0xa8, 0x73, 0x5a, 0xed, 0xed, 0x50, 0x18, 0x33, 0x64, 0x6c, 0xec, 0xda, 0xc9, 0x7e, 0x24, 0xd9, 0x8b, 0x5e, 0x68, 0xb3, 0x2a, 0x92, 0x3e, 0xfe, 0xfd, 0x64, 0xf2, 0x76, 0x5a, 0xa3, 0x96, 0x4a, 0x97, 0x38, 0xc8, 0x7a, 0xba, 0xb9, 0x17, 0x5f, 0x5e, 0x8b, 0x14, 0xd2, 0x89, 0xf3, 0x3b, 0xe3, 0x24, 0x9f, 0xcf, 0x27, 0xeb, 0x9a, 0x71, 0x7f, 0x23, 0xe6, 0x31, 0x7b, 0xe9, 0x57, 0xcf, 0x69, 0x72, 0xe9, 0xa4, 0xf9, 0x92, 0x5a, 0x7e, 0x36, 0xe0, 0xf3, 0x89, 0x25, 0xc5, 0xfc, 0x2c, 0x47, 0xd7, 0xf0, 0x5d, 0x1b, 0x6d, 0xe1, 0xbb, 0x44, 0xbb, 0xc2, 0xe1, 0x46, 0x7e, 0x36, 0x45, 0x97, 0x50, 0x1d, 0x4b, 0x00, 0xd6, 0xd3, 0x98, 0xe3, 0xb0, 0x68, 0x74, 0x99, 0x9a, 0xd3, 0x12, 0x5d, 0xc6, 0xf7, 0x48, 0xb4, 0x81, 0xef, 0x66, 0xcc, 0xf9, 0x58, 0x78, 0x3e, 0x3f, 0x2f, 0x8f, 0x2e, 0x6a, 0x6d, 0xe2, 0xa7, 0x15, 0x11, 0xca, 0xbd, 0x8c, 0xca, 0x41, 0xb9, 0x6d, 0x12, 0xdd, 0x15, 0x94, 0xea, 0xc3, 0xed, 0xf4, 0xd4, 0xd9, 0x1e, 0xae, 0xe0, 0x90, 0x52, 0x50, 0x86, 0x50, 0xae, 0x57, 0xe2, 0xe1, 0x05, 0x6a, 0x8a, 0xe2, 0x70, 0x83, 0xfa, 0xa4, 0xa0, 0x04, 0x86, 0x4f, 0xde, 0x4d, 0xe1, 0x1a, 0xce, 0x23, 0x29, 0xbd, 0x28, 0xd1, 0x52, 0x79, 0x72, 0xf8, 0x00, 0xe6, 0xb4, 0xdb, 0x4a, 0xc1, 0xa1, 0xc4, 0xc9, 0x1b, 0x46, 0xb8, 0x88, 0x53, 0x5a, 0xc3, 0x56, 0x91, 0x83, 0xf4, 0xc6, 0xb0, 0x76, 0x8d, 0xf5, 0xc8, 0x80, 0xe2, 0xe3, 0xb3, 0x73, 0xaa, 0x7d, 0x9b, 0xc4, 0xf3, 0x36, 0x6f, 0xc6, 0xff, 0x18, 0x9d, 0x3e, 0x23, 0xf9, 0x96, 0xe6, 0x14, 0xb6, 0xb2, 0x5a, 0xf0, 0xc8, 0xeb, 0x64, 0x4b, 0xcd, 0xf7, 0x41, 0xc6, 0xc6, 0xdb, 0xc8, 0xeb, 0x29, 0xab, 0x75, 0x50, 0x11, 0x2b, 0xcb, 0x96, 0x02, 0x46, 0xe7, 0xb3, 0x0e, 0x03, 0xd2, 0x26, 0x92, 0xaf, 0x26, 0xbb, 0xf9, 0x44, 0x73, 0xe2, 0x2e, 0x0d, 0xff, 0x82, 0x13, 0x66, 0x0d, 0x27, 0xb7, 0x87, 0x1e, 0x9e, 0x82, 0x32, 0x0f, 0xdb, 0xbf, 0xdb, 0xce, 0x1a, 0x8c, 0x42, 0x5a, 0x8c, 0x92, 0xd2, 0xf3, 0x1d, 0xbc, 0xbe, 0x6d, 0x46, 0x5d, 0xbf, 0x34, 0xa6, 0x27, 0x1b, 0x5f, 0x9c, 0x37, 0x57, 0x2d, 0x01, 0xb9, 0x33, 0xad, 0x21, 0x2b, 0xf8, 0x5f, 0xbd, 0x17, 0x63, 0x6f, 0x6c, 0xf7, 0x0f, 0xae, 0x70, 0xc4, 0x74, 0xe9, 0xd4, 0xd7, 0x8d, 0x4d, 0x6d, 0x55, 0x53, 0x5b, 0x29, 0x75, 0x8f, 0x7f, 0x30, 0xe2, 0x88, 0x69, 0xd3, 0x69, 0x6f, 0x1c, 0x9b, 0x56, 0x52, 0xd3, 0x4a, 0x94, 0xb6, 0x91, 0xbe, 0xa1, 0x88, 0x2a, 0x31, 0x4d, 0x3a, 0xf5, 0x57, 0xae, 0x4e, 0x1d, 0x2e, 0x65, 0xbb, 0xae, 0x96, 0x98, 0x9c, 0x4e, 0x75, 0x73, 0xd8, 0x1c, 0x93, 0xd2, 0x6f, 0x53, 0x33, 0x79, 0x58, 0x66, 0xcc, 0x6a, 0x29, 0xaf, 0x83, 0x16, 0x06, 0x61, 0x95, 0x16, 0x5b, 0x10, 0x60, 0xa8, 0x8a, 0x38, 0xb5, 0x33, 0x5c, 0x82, 0x71, 0x3a, 0x2c, 0x55, 0x93, 0x0e, 0xab, 0x0a, 0xe7, 0x1b, 0x89, 0x36, 0x15, 0xae, 0x49, 0x84, 0xdd, 0x21, 0xca, 0x0e, 0xac, 0xa0, 0x13, 0x29, 0x89, 0x10, 0xfb, 0x76, 0xd2, 0x73, 0xdd, 0x84, 0x59, 0x3b, 0x5e, 0xf4, 0x65, 0x82, 0xea, 0x43, 0x2e, 0xf3, 0xa5, 0x1b, 0xf1, 0x90, 0xbb, 0x02, 0xe9, 0x5e, 0xb7, 0x60, 0x7a, 0x9c, 0x37, 0xcb, 0xdc, 0x48, 0x15, 0x0e, 0x7c, 0xb6, 0x88, 0x3c, 0x42, 0x06, 0x49, 0xf1, 0xef, 0xbb, 0x8b, 0x21, 0xb1, 0xa2, 0x4c, 0x3b, 0xd5, 0x78, 0x1f, 0x3e, 0xa3, 0x1c, 0x73, 0xf7, 0x3c, 0x48, 0x84, 0xd5, 0x53, 0xec, 0x6d, 0x2d, 0x2d, 0xad, 0xab, 0x3a, 0xda, 0xc7, 0x73, 0xef, 0xf1, 0xc1, 0x74, 0xe8, 0x7e, 0xc6, 0x7f, 0x9e, 0x63, 0x13, 0xb7, 0x6e, 0x58, 0xbe, 0x44, 0x29, 0x51, 0xfc, 0xad, 0x6b, 0x94, 0x86, 0x0e, 0x3e, 0x4d, 0xe6, 0x5f, 0x4c, 0x55, 0x41, 0x1c, 0x34, 0xef, 0x43, 0xa2, 0x75, 0x19, 0xde, 0xcf, 0x52, 0x5a, 0xbc, 0x9f, 0x53, 0xef, 0x1f, 0x53, 0x3e, 0xbc, 0x5f, 0x44, 0xd8, 0x9f, 0xc5, 0xfb, 0x5f, 0x84, 0x3f, 0x62, 0xf1, 0xaf, 0xb1, 0xe9, 0x1b, 0xb3, 0xfc, 0xb3, 0x9b, 0x6a, 0xc0, 0xb7, 0xbc, 0x73, 0xe9, 0x3d, 0x6d, 0x8b, 0x3b, 0x95, 0x96, 0xd6, 0x58, 0x6b, 0x7b, 0x4b, 0x6b, 0xfb, 0xd2, 0xef, 0x89, 0x43, 0x6d, 0x93, 0x73, 0xa0, 0xa5, 0x75, 0xcd, 0x6a, 0x68, 0x5b, 0xbe, 0x64, 0xf5, 0xb5, 0x9c, 0x35, 0x43, 0x62, 0xe9, 0xce, 0x6c, 0xdf, 0xaa, 0x64, 0x47, 0x31, 0xd6, 0x3d, 0x9e, 0xbf, 0x97, 0x08, 0xfe, 0x7e, 0xde, 0x0e, 0x29, 0xee, 0x9e, 0xbc, 0x4f, 0x70, 0x77, 0xc4, 0xa9, 0xba, 0xee, 0x73, 0xf7, 0xf6, 0x2f, 0xce, 0xdd, 0xef, 0x5e, 0xfb, 0xe9, 0xdc, 0xfd, 0xee, 0x8d, 0xe3, 0xb9, 0x7b, 0xb8, 0xf6, 0xb3, 0xb8, 0xfb, 0xdd, 0x4f, 0x8d, 0xe7, 0xee, 0x77, 0x6f, 0x4e, 0x95, 0x9e, 0x95, 0xaa, 0x2f, 0xb4, 0x79, 0x0c, 0x77, 0x9f, 0x13, 0xeb, 0xfe, 0x6c, 0xee, 0x9e, 0xf1, 0x39, 0x49, 0xdf, 0x53, 0x95, 0xa7, 0xfd, 0x11, 0x26, 0xb7, 0xa4, 0xbe, 0xb2, 0xfa, 0x2c, 0xaf, 0x86, 0x19, 0x4f, 0x84, 0xa3, 0xfb, 0xaf, 0x0a, 0x79, 0xf5, 0xd3, 0x3c, 0x1a, 0xda, 0x9c, 0x69, 0xff, 0x85, 0x2b, 0xae, 0x0a, 0x69, 0x51, 0x3d, 0x78, 0xd6, 0xa8, 0x56, 0x96, 0x8a, 0xbb, 0x2c, 0x87, 0xb7, 0xcb, 0x95, 0xc2, 0x16, 0x56, 0xf2, 0x21, 0x65, 0x1a, 0xd4, 0xce, 0x8b, 0xdf, 0xe2, 0x86, 0x5a, 0x94, 0xc7, 0x14, 0x6c, 0x0b, 0xe9, 0xbc, 0x5a, 0xb6, 0x6c, 0x93, 0x33, 0x7b, 0x38, 0xb9, 0x99, 0xfc, 0x55, 0xa2, 0x4c, 0xcd, 0xfe, 0x1f, 0xc2, 0x66, 0x94, 0xac, 0x56, 0xf2, 0xf9, 0x3c, 0x94, 0xc7, 0x9c, 0x41, 0x94, 0xb6, 0xbc, 0x50, 0x44, 0xb2, 0x0f, 0xca, 0x9e, 0x0b, 0xa8, 0x0e, 0xc7, 0x6c, 0x7b, 0xa8, 0xa4, 0x5d, 0xae, 0xb4, 0x4f, 0x83, 0x2e, 0xd6, 0x23, 0x2b, 0x9c, 0x94, 0xda, 0xec, 0x39, 0x9b, 0xbc, 0x58, 0xd6, 0xc0, 0xd2, 0x9a, 0x91, 0xf6, 0xad, 0xb1, 0xef, 0xac, 0x9d, 0xd2, 0x2d, 0x1e, 0x88, 0x09, 0x4f, 0xa7, 0xc9, 0x10, 0x96, 0x47, 0xa7, 0xd9, 0x2e, 0xf0, 0x97, 0x87, 0xaa, 0xc7, 0xce, 0x12, 0x2c, 0xcd, 0x41, 0xa5, 0x95, 0x41, 0x17, 0x95, 0x93, 0xd8, 0x5b, 0xb6, 0x92, 0xac, 0x28, 0xf1, 0x0e, 0xb7, 0xc3, 0x73, 0x3e, 0x79, 0xd1, 0x36, 0x27, 0x55, 0x66, 0x67, 0x12, 0x4b, 0x2b, 0x10, 0xe5, 0x4e, 0x4d, 0x97, 0x9b, 0xb8, 0xa4, 0x96, 0xfb, 0x68, 0x76, 0xb9, 0xd9, 0x50, 0x72, 0xb9, 0x6d, 0x08, 0xdf, 0x79, 0xc5, 0xfc, 0x59, 0x10, 0x26, 0x9e, 0x51, 0x4b, 0x0a, 0x65, 0x95, 0x54, 0x21, 0xca, 0xf1, 0x3e, 0x8d, 0xa9, 0xa8, 0x1c, 0xbb, 0xad, 0x5d, 0x5a, 0xdb, 0x3c, 0x10, 0x2e, 0x08, 0x2e, 0x07, 0x25, 0x62, 0x26, 0x5c, 0x26, 0xda, 0x83, 0x18, 0x1b, 0x99, 0x64, 0xf3, 0xda, 0xaf, 0x8b, 0x9c, 0xb6, 0xad, 0x90, 0x16, 0x85, 0x15, 0x8e, 0x2d, 0xe2, 0xd8, 0x20, 0xc5, 0x46, 0xcd, 0x54, 0xf2, 0xe8, 0x45, 0xb6, 0x2a, 0x66, 0xe5, 0x94, 0xc7, 0x39, 0xe4, 0x24, 0x86, 0x80, 0xa0, 0xa6, 0xd0, 0x9d, 0x64, 0x95, 0xd0, 0x55, 0x41, 0x5f, 0x48, 0x21, 0xc5, 0x56, 0x33, 0x75, 0xbe, 0x1a, 0x58, 0x95, 0xdc, 0x27, 0x7c, 0x6c, 0xc6, 0xb4, 0xd9, 0xb2, 0x03, 0x8d, 0x8f, 0x94, 0xef, 0x09, 0x67, 0x6d, 0xbf, 0x26, 0x6e, 0xc0, 0xd2, 0x62, 0xa8, 0xa1, 0xa5, 0xe6, 0xae, 0x08, 0x72, 0xbe, 0x70, 0x56, 0x0a, 0x64, 0xee, 0x98, 0x02, 0x7b, 0x01, 0xf5, 0xc5, 0x30, 0xcb, 0xbf, 0x13, 0xd2, 0x54, 0xbd, 0x83, 0xc2, 0xae, 0xeb, 0x81, 0x09, 0x30, 0x61, 0x0a, 0x8d, 0xdd, 0x67, 0x61, 0xbe, 0xb7, 0x14, 0xe6, 0xd1, 0xf3, 0x52, 0x3f, 0x90, 0xf7, 0xca, 0xe6, 0x29, 0x5e, 0xe8, 0xf2, 0x9c, 0x81, 0xda, 0x29, 0x01, 0xf0, 0xe3, 0xbb, 0x1b, 0x9f, 0xdd, 0xf8, 0x5c, 0x3b, 0xeb, 0x0c, 0x58, 0x94, 0x39, 0x19, 0xdb, 0xc5, 0xe2, 0x69, 0x7a, 0x50, 0xae, 0xf4, 0x9d, 0x01, 0x6c, 0xff, 0xc8, 0xb0, 0x0a, 0x41, 0x2e, 0xd6, 0x2e, 0x8b, 0xf5, 0x6f, 0x57, 0xcf, 0xe8, 0x51, 0xda, 0x03, 0x5f, 0x7e, 0xa8, 0x6c, 0x36, 0xd6, 0xbe, 0x10, 0x21, 0x5d, 0x96, 0x8a, 0x49, 0xf8, 0x39, 0x66, 0x49, 0x3a, 0xa6, 0x2d, 0x1d, 0xb3, 0x84, 0x62, 0x96, 0xcc, 0x17, 0x31, 0xe9, 0xd0, 0x99, 0x1c, 0xfa, 0x94, 0x08, 0x25, 0x6b, 0xf1, 0x4b, 0x86, 0xd3, 0x71, 0xed, 0x8a, 0x66, 0x5c, 0xea, 0x60, 0x2a, 0xa4, 0x73, 0xdf, 0xa1, 0x1f, 0xf2, 0x6a, 0x31, 0xcd, 0x16, 0x2d, 0x38, 0x32, 0x32, 0x98, 0xca, 0x25, 0x4c, 0x8d, 0xd8, 0x05, 0xa6, 0x50, 0xab, 0x6e, 0x49, 0x7b, 0x02, 0xc5, 0x36, 0x8c, 0x34, 0x0a, 0x8f, 0x14, 0x0d, 0xe6, 0xe4, 0xf3, 0xa4, 0xf9, 0x88, 0x75, 0xc9, 0x92, 0x6e, 0xd0, 0x96, 0x4f, 0x93, 0x2b, 0x95, 0x59, 0x0e, 0x07, 0x74, 0xd5, 0x0d, 0x8f, 0x84, 0x6c, 0xb3, 0x94, 0xe5, 0x10, 0x2e, 0x9b, 0x83, 0x35, 0xa0, 0x36, 0x29, 0x2d, 0x42, 0x0a, 0xaf, 0x29, 0x29, 0x83, 0xaa, 0xd2, 0x36, 0xb0, 0x3f, 0xfc, 0x1a, 0x87, 0x1f, 0x2b, 0xe5, 0x53, 0xa1, 0xdc, 0xcf, 0x09, 0xb6, 0x5b, 0x9a, 0x0c, 0xaf, 0x17, 0x7c, 0x2f, 0x52, 0x6e, 0x9e, 0x0e, 0x79, 0x60, 0x44, 0x09, 0xb1, 0x50, 0x99, 0x0e, 0xbb, 0x51, 0x06, 0xb1, 0x28, 0x75, 0x65, 0x0e, 0xd8, 0x8d, 0x52, 0xc8, 0x6e, 0xf1, 0x15, 0x81, 0x1d, 0x6c, 0x75, 0x37, 0xd7, 0xc3, 0x6e, 0x94, 0x18, 0xce, 0x63, 0x39, 0x35, 0xa2, 0x84, 0xbb, 0xb6, 0x08, 0xaf, 0x00, 0x70, 0x88, 0x57, 0x6b, 0x93, 0x77, 0xb7, 0x94, 0x41, 0xf9, 0xba, 0x94, 0x27, 0x01, 0xc5, 0xed, 0xb9, 0xb0, 0x4c, 0x46, 0x69, 0xb4, 0x8c, 0xce, 0x38, 0x10, 0x14, 0xaa, 0xe5, 0x70, 0x85, 0xc7, 0x00, 0xa5, 0x6a, 0xfc, 0xca, 0x6e, 0x70, 0x2e, 0x03, 0xa7, 0x26, 0xb0, 0x66, 0x99, 0x24, 0x42, 0x88, 0x33, 0xa8, 0xf0, 0x34, 0x62, 0x9d, 0xab, 0xe0, 0x51, 0x78, 0x34, 0x05, 0x03, 0x62, 0x6e, 0xa6, 0xb0, 0xb1, 0x80, 0x21, 0x96, 0xd0, 0x66, 0xb5, 0xf6, 0x0d, 0x0c, 0xb5, 0x5d, 0xa9, 0x43, 0x78, 0xb3, 0xd3, 0xe6, 0x73, 0x5a, 0x6f, 0x2a, 0x6d, 0x78, 0x61, 0x17, 0x70, 0x88, 0x0b, 0xb5, 0x79, 0x2b, 0xd6, 0x5c, 0xb3, 0x0c, 0x44, 0x1c, 0xa5, 0xb6, 0x85, 0x14, 0x27, 0xad, 0xd7, 0x12, 0x27, 0x0e, 0x5b, 0x32, 0xa5, 0x10, 0x0f, 0x9e, 0xea, 0x85, 0x99, 0xb6, 0x06, 0xc6, 0xe3, 0x86, 0x2c, 0x5c, 0x3f, 0xe8, 0x10, 0x52, 0xe0, 0x66, 0xd4, 0x75, 0xef, 0xb5, 0x43, 0x78, 0xdb, 0x37, 0x3e, 0x48, 0xee, 0x56, 0xf7, 0xcd, 0xd7, 0x97, 0x94, 0x62, 0x0f, 0xf9, 0x4a, 0xb1, 0x87, 0x90, 0x7b, 0x76, 0x95, 0xd5, 0x21, 0x75, 0x3e, 0xe6, 0x80, 0x7b, 0x2d, 0x6f, 0xae, 0x43, 0x0e, 0x88, 0xe3, 0x67, 0x78, 0x49, 0x4f, 0xed, 0xf1, 0x75, 0x4a, 0xbd, 0xcd, 0xcf, 0x23, 0xf7, 0xac, 0xc3, 0xad, 0xb6, 0xa6, 0x3f, 0xe6, 0x47, 0x6c, 0x05, 0x49, 0x22, 0x2c, 0x11, 0x7e, 0x72, 0xb5, 0x29, 0x8c, 0xda, 0xa1, 0x29, 0x9e, 0x8a, 0x2b, 0xa5, 0xb8, 0x5a, 0xc5, 0x6f, 0x73, 0x2b, 0x32, 0x87, 0x6c, 0xf2, 0xde, 0xe6, 0x80, 0x5b, 0xe6, 0x42, 0x8e, 0xe7, 0x7d, 0xb0, 0x70, 0xc8, 0x21, 0xe4, 0x24, 0xb5, 0xd8, 0xff, 0x54, 0xfe, 0x31, 0xe4, 0xc9, 0x6e, 0xac, 0x4d, 0x70, 0xe4, 0x1c, 0xc7, 0x9c, 0xf0, 0x24, 0x61, 0x6d, 0xf8, 0x93, 0x44, 0xe3, 0x40, 0x2a, 0x8d, 0xcd, 0x6d, 0x9c, 0x4a, 0x7e, 0x9e, 0x23, 0xc6, 0xb0, 0xab, 0xe9, 0x19, 0xa8, 0x0d, 0x97, 0x62, 0xe9, 0xcb, 0xc1, 0xa6, 0x9e, 0xc9, 0x29, 0x56, 0x1c, 0xcc, 0x13, 0x0b, 0x76, 0xbc, 0x08, 0xee, 0xc8, 0x47, 0x3c, 0x2b, 0x1a, 0xc4, 0x7e, 0x55, 0xf3, 0x80, 0x68, 0xd5, 0x27, 0x4f, 0xb0, 0x65, 0x72, 0xb2, 0x6d, 0x5f, 0x81, 0xdc, 0xbd, 0x8d, 0xb8, 0xfb, 0x27, 0xdd, 0x38, 0xeb, 0xf4, 0xa7, 0xda, 0x29, 0x5a, 0x29, 0x15, 0xdc, 0xd4, 0x03, 0x5a, 0xf8, 0x9b, 0x54, 0xcd, 0x4e, 0x37, 0x34, 0x79, 0x9d, 0xd0, 0xc8, 0xa1, 0x41, 0xcf, 0x07, 0x10, 0xf3, 0x9c, 0x4e, 0xbe, 0x83, 0xb4, 0xb3, 0xc8, 0xfb, 0x1c, 0xdc, 0x85, 0x12, 0x74, 0xcc, 0xf7, 0x5e, 0xf2, 0x8c, 0x73, 0x36, 0x2c, 0xc0, 0x14, 0x3a, 0xa8, 0xba, 0xa3, 0x07, 0xbc, 0xc8, 0x17, 0x44, 0xba, 0x43, 0xb4, 0xe3, 0xe6, 0xec, 0x80, 0x2e, 0x68, 0xc1, 0xdf, 0x1e, 0x58, 0x16, 0x83, 0x4e, 0x2b, 0x97, 0x7b, 0xc0, 0xe6, 0xa3, 0xde, 0xf2, 0xd1, 0x37, 0x2f, 0xf4, 0xbe, 0x19, 0x73, 0x78, 0xf9, 0x29, 0x6e, 0x77, 0x42, 0x1b, 0x4a, 0x13, 0x8f, 0x2a, 0xf2, 0x50, 0x9c, 0xbe, 0x71, 0x52, 0xa6, 0x26, 0x47, 0xfe, 0x26, 0xee, 0x79, 0x0f, 0x25, 0xfd, 0xda, 0x92, 0x80, 0xb9, 0x39, 0x38, 0x12, 0xa9, 0xf8, 0x9f, 0x43, 0x91, 0x72, 0xe2, 0x9c, 0x97, 0x1f, 0xb3, 0xcd, 0xb1, 0x31, 0x96, 0x93, 0x8f, 0x61, 0x5b, 0xd6, 0xdb, 0x56, 0x0a, 0x0c, 0x27, 0xce, 0xda, 0x79, 0xff, 0xfa, 0x72, 0x3f, 0xaf, 0x10, 0xcd, 0x0c, 0x9b, 0x51, 0x77, 0xfa, 0xd2, 0xce, 0x78, 0xeb, 0x4b, 0xca, 0x75, 0x91, 0x6d, 0x4e, 0x1d, 0x59, 0xbf, 0xc4, 0xd8, 0x41, 0xa4, 0xa2, 0x72, 0xeb, 0x54, 0x3e, 0xed, 0x12, 0xdf, 0xe1, 0x40, 0x5e, 0x5a, 0x80, 0x3c, 0x71, 0x2a, 0xe4, 0xee, 0x78, 0x0e, 0xba, 0x5b, 0x8d, 0xa2, 0x47, 0xb1, 0xe4, 0x94, 0x65, 0x4c, 0x7f, 0xe8, 0x1e, 0x81, 0xad, 0xe4, 0x93, 0x36, 0xf6, 0xc9, 0x15, 0x3e, 0xc5, 0x9a, 0xdd, 0xcc, 0x12, 0xb0, 0xcf, 0x2e, 0xc5, 0x19, 0xc2, 0x69, 0x09, 0xb4, 0x4b, 0x8b, 0x18, 0xff, 0x37, 0xf3, 0xfe, 0x99, 0x07, 0x5c, 0xc8, 0xf1, 0xfa, 0xd8, 0xaa, 0x72, 0x01, 0xd2, 0x5b, 0x31, 0x8d, 0x32, 0xfb, 0x74, 0x68, 0x53, 0xda, 0x50, 0x32, 0xd2, 0xd8, 0x82, 0x3c, 0x13, 0xc9, 0x2c, 0x45, 0x98, 0x11, 0x22, 0xa4, 0xb5, 0xb0, 0xb9, 0xf1, 0x0c, 0xdc, 0x94, 0xd2, 0x25, 0xac, 0xa5, 0x70, 0x13, 0xed, 0x55, 0x21, 0x04, 0xac, 0xc3, 0x50, 0x7d, 0x4a, 0x8d, 0x1d, 0x1c, 0xa9, 0xda, 0xd6, 0x72, 0x6d, 0x0e, 0x3a, 0xd7, 0x83, 0x35, 0x15, 0x95, 0x70, 0x4d, 0x58, 0x4b, 0x89, 0xad, 0x0c, 0xf9, 0xe9, 0x4a, 0xac, 0x45, 0x4e, 0xad, 0x9e, 0x90, 0xe5, 0x17, 0xb6, 0x12, 0xbe, 0xeb, 0xe3, 0xa3, 0xc8, 0xd7, 0x9c, 0x50, 0xa0, 0x9e, 0x2c, 0xd1, 0x52, 0xc9, 0x29, 0x99, 0x78, 0x85, 0x0b, 0x12, 0x3f, 0x3b, 0x2b, 0x4d, 0x35, 0x1e, 0xc0, 0xe7, 0x46, 0xbc, 0xa2, 0x90, 0x78, 0x5a, 0x15, 0x02, 0x5b, 0x3a, 0x56, 0xd3, 0x87, 0x1a, 0xe3, 0x65, 0xe2, 0xf1, 0xc1, 0x24, 0x13, 0xdf, 0xfa, 0x5f, 0x23, 0x13, 0x93, 0x14, 0x5a, 0xef, 0x99, 0xaf, 0x10, 0xe7, 0x55, 0xef, 0x7a, 0xf5, 0x6e, 0x08, 0xcd, 0xaf, 0x9f, 0x87, 0xf7, 0xdc, 0x05, 0x18, 0x80, 0x77, 0xb3, 0x7a, 0xb7, 0xa8, 0xf1, 0x65, 0xfe, 0x6f, 0x50, 0x34, 0x4c, 0xc7, 0x3b, 0xce, 0x7b, 0x50, 0x8e, 0x77, 0x0d, 0x7d, 0x1c, 0x31, 0x8f, 0xb3, 0x41, 0x7c, 0x6e, 0xa8, 0x99, 0xee, 0xbd, 0x78, 0xa7, 0xf8, 0x75, 0x75, 0xcd, 0xf3, 0x65, 0xbc, 0x3f, 0xd4, 0xb0, 0x60, 0x2e, 0x85, 0xff, 0x5f, 0xde, 0x79, 0xfc, 0x39, 0xee, 0x3f, 0xe0, 0x9d, 0xe2, 0x7f, 0x8a, 0x77, 0x8a, 0xff, 0x83, 0xaf, 0x71, 0x2e, 0xdd, 0xdf, 0xf7, 0xd6, 0x71, 0x41, 0x67, 0xe7, 0xcd, 0xf9, 0x16, 0xa5, 0x1b, 0x6d, 0xf2, 0xcc, 0xf6, 0x8f, 0x6d, 0x01, 0x62, 0x1b, 0x16, 0xc6, 0x00, 0x7a, 0x70, 0xe4, 0x6d, 0xdb, 0x06, 0x39, 0xee, 0x29, 0x50, 0x50, 0x50, 0x00, 0x76, 0xbb, 0x1d, 0xbe, 0xd9, 0x10, 0x83, 0x6f, 0x7e, 0xf3, 0x9b, 0xf0, 0x33, 0x8c, 0xfb, 0xd9, 0xcf, 0x7e, 0x06, 0xcf, 0x9f, 0x1c, 0x81, 0x7d, 0xfb, 0xf6, 0xc1, 0xc7, 0x1f, 0x7f, 0xcc, 0x40, 0xfd, 0xf7, 0xdf, 0x7f, 0xff, 0xfd, 0x95, 0x7f, 0xa7, 0xa0, 0x40, 0xaf, 0x87, 0xf1, 0xff, 0xe9, 0xf8, 0xe3, 0x73, 0x20, 0xe3, 0x63, 0x42, 0x6f, 0xca, 0x84, 0x27, 0x30, 0x78, 0x03, 0x07, 0x5f, 0xd6, 0xeb, 0x44, 0xc2, 0x51, 0xbd, 0x44, 0x89, 0xff, 0x19, 0x24, 0x7a, 0xd6, 0x52, 0xd6, 0x74, 0x24, 0x86, 0xf7, 0xc3, 0x87, 0x06, 0x8d, 0xde, 0xa0, 0x37, 0x24, 0xf4, 0x06, 0x83, 0x1e, 0x1f, 0x38, 0x74, 0x0f, 0x25, 0xe5, 0xd7, 0x84, 0x01, 0xf4, 0x97, 0x0c, 0x1a, 0x09, 0x23, 0x29, 0xf1, 0x64, 0xbd, 0x41, 0xa2, 0xff, 0x7a, 0xf1, 0x1f, 0xf3, 0x91, 0x6a, 0x6a, 0xa0, 0x7c, 0x54, 0x22, 0x3e, 0x60, 0x41, 0x38, 0x8e, 0x30, 0xf1, 0x61, 0xb8, 0x99, 0x01, 0x35, 0x70, 0x2a, 0x91, 0xc4, 0x00, 0xe2, 0x49, 0x14, 0x62, 0xc0, 0x52, 0xb1, 0xa2, 0x5e, 0xd8, 0x08, 0xc5, 0x94, 0x84, 0x62, 0xf9, 0x3f, 0x96, 0xa4, 0xd3, 0x13, 0xdc, 0x94, 0x1a, 0x61, 0x1d, 0x25, 0xd8, 0xe8, 0x3f, 0x95, 0xfb, 0x3b, 0xd1, 0x12, 0xbb, 0xc1, 0x20, 0x8a, 0x66, 0xa0, 0x09, 0x6e, 0x51, 0x78, 0x06, 0x22, 0x03, 0x27, 0xff, 0x01, 0xdc, 0x24, 0x52, 0xe8, 0xf0, 0x0f, 0x0b, 0xe3, 0x66, 0xea, 0x38, 0xa1, 0x84, 0x55, 0x50, 0x29, 0x23, 0x7a, 0x0d, 0x95, 0x4d, 0x90, 0xbc, 0x29, 0x0a, 0x37, 0x22, 0x68, 0xdc, 0x3a, 0x69, 0x54, 0xff, 0x25, 0x4c, 0xa6, 0x43, 0xd5, 0x58, 0x94, 0xcb, 0x70, 0x48, 0x54, 0x12, 0x63, 0x64, 0x23, 0x98, 0xf4, 0x1c, 0x4a, 0x71, 0x09, 0x84, 0x19, 0x23, 0x24, 0xc9, 0x30, 0x2a, 0x69, 0x0c, 0x78, 0x4b, 0x48, 0x56, 0x9d, 0x9e, 0xfe, 0xb8, 0x2d, 0x5c, 0x20, 0xe6, 0xf9, 0x77, 0xc8, 0x27, 0x68, 0x05, 0xe8, 0xdc, 0x40, 0x2a, 0x70, 0x18, 0x61, 0x49, 0x48, 0x79, 0x98, 0x9b, 0xf0, 0x22, 0x01, 0x23, 0x6d, 0x84, 0x91, 0x6e, 0x14, 0x28, 0xc4, 0xd4, 0x23, 0x9c, 0x48, 0x36, 0x50, 0x0d, 0x20, 0x5f, 0x96, 0xf2, 0x0c, 0x7a, 0x1d, 0xb5, 0x01, 0xa1, 0x16, 0x1d, 0x77, 0x86, 0xe0, 0x4f, 0xe8, 0x0b, 0x0c, 0x8c, 0x63, 0xc6, 0x32, 0xa5, 0xc6, 0x3f, 0xcc, 0x85, 0x79, 0xb0, 0x1a, 0x33, 0x03, 0xa9, 0x13, 0xf8, 0xc2, 0x2c, 0x0f, 0xc0, 0x75, 0x29, 0x8c, 0x60, 0x7f, 0x60, 0x26, 0x49, 0x96, 0xb0, 0x22, 0x93, 0x41, 0x27, 0x89, 0x9c, 0x98, 0x2f, 0xc7, 0x20, 0xf2, 0x60, 0x06, 0x03, 0xd1, 0xd8, 0x59, 0xac, 0x83, 0xc0, 0x04, 0xac, 0x22, 0x61, 0xd0, 0x22, 0xcc, 0xb2, 0xfe, 0x8a, 0x64, 0xc1, 0x2c, 0x22, 0x07, 0xa2, 0xc8, 0x40, 0xcd, 0x37, 0x22, 0x6c, 0x88, 0x71, 0x9d, 0x5e, 0x6d, 0x07, 0xe1, 0x49, 0x9f, 0x6e, 0x43, 0x82, 0xb0, 0x64, 0xe0, 0xba, 0x52, 0xf9, 0x64, 0xaa, 0x8b, 0x31, 0x23, 0xd1, 0x4f, 0x2f, 0x9c, 0x47, 0x04, 0x1b, 0x44, 0xff, 0xe9, 0xf5, 0x23, 0x94, 0x22, 0x05, 0x13, 0xe0, 0x85, 0xa5, 0xc8, 0x57, 0x08, 0x3a, 0x46, 0x24, 0xa8, 0x44, 0x3a, 0xaa, 0x9f, 0x40, 0x24, 0x04, 0x3a, 0xec, 0x37, 0x7a, 0xc0, 0xb2, 0xae, 0x48, 0x60, 0x4a, 0x70, 0x16, 0x49, 0xaf, 0x1b, 0x45, 0x48, 0xb9, 0xfb, 0x0d, 0x0c, 0x1e, 0x23, 0xee, 0x2f, 0x70, 0x83, 0x4a, 0x32, 0xdc, 0xb9, 0x3a, 0xaa, 0x86, 0x69, 0x7c, 0x44, 0x32, 0x9b, 0xe8, 0x19, 0x9b, 0xc6, 0xb4, 0x3c, 0xaa, 0xcf, 0x51, 0x69, 0x83, 0xf0, 0xd8, 0x0b, 0xf7, 0x73, 0xcf, 0x52, 0xd5, 0x57, 0x10, 0x29, 0x37, 0x18, 0x24, 0x93, 0x4c, 0x7f, 0xb9, 0x5a, 0x53, 0x6e, 0xae, 0x9c, 0x6b, 0x92, 0x19, 0x73, 0x09, 0xea, 0x29, 0x04, 0x1e, 0x3b, 0x8b, 0x93, 0x62, 0xbe, 0x8f, 0xa1, 0x44, 0xaf, 0x92, 0xaf, 0x24, 0x71, 0xa5, 0x7c, 0xc7, 0xff, 0xb2, 0x51, 0x36, 0x61, 0x56, 0x2e, 0x42, 0x92, 0x65, 0x44, 0xf8, 0x15, 0x41, 0xdf, 0xd4, 0x46, 0xb5, 0x42, 0xa2, 0x65, 0xdd, 0x28, 0x68, 0x30, 0x43, 0xee, 0x68, 0x9e, 0x64, 0xce, 0x1b, 0xb5, 0x18, 0xf2, 0x2c, 0x16, 0x73, 0x9e, 0xc5, 0x6c, 0x49, 0xe4, 0x69, 0x72, 0x65, 0x59, 0x9f, 0x00, 0x0b, 0xf7, 0x82, 0xa4, 0x07, 0x75, 0x9c, 0xf4, 0xc2, 0x15, 0x0c, 0xc3, 0x57, 0x6c, 0x39, 0x81, 0xc5, 0x78, 0x44, 0x6e, 0x21, 0xc9, 0x89, 0xbc, 0x4f, 0x2c, 0x90, 0x77, 0x05, 0xcb, 0xc8, 0xcd, 0x43, 0x98, 0xb1, 0x53, 0x41, 0x4b, 0x14, 0xa7, 0x4b, 0x30, 0x42, 0xcd, 0xe9, 0x11, 0x8c, 0x7f, 0xb9, 0xa3, 0x98, 0xf4, 0x22, 0x5e, 0x1f, 0x5b, 0x34, 0x32, 0x06, 0x24, 0x24, 0x2d, 0x96, 0xa3, 0xc3, 0x91, 0xc2, 0xf8, 0x48, 0xc0, 0x75, 0xd4, 0x2e, 0x6e, 0x0f, 0x75, 0x2b, 0xd6, 0x87, 0x7d, 0x84, 0xc9, 0x87, 0xf1, 0xfa, 0xb3, 0x45, 0x36, 0x03, 0x16, 0xce, 0x43, 0x0b, 0x44, 0x6f, 0x99, 0x44, 0x5f, 0x60, 0x49, 0x88, 0xbf, 0x5c, 0x93, 0xc5, 0x92, 0x47, 0xff, 0xe9, 0x67, 0xd4, 0xa2, 0x17, 0xcf, 0x08, 0x99, 0x3e, 0xd7, 0x9c, 0x8b, 0xda, 0x1b, 0x62, 0xd2, 0x94, 0x1a, 0x0c, 0x74, 0x64, 0x32, 0x9f, 0xc6, 0xa1, 0x44, 0x03, 0x5f, 0x47, 0xd5, 0x63, 0x55, 0xb9, 0x98, 0x18, 0xcc, 0xa3, 0xdc, 0x1c, 0x2d, 0x95, 0x83, 0x77, 0x73, 0x2e, 0x0e, 0x5e, 0xa2, 0x03, 0x46, 0x04, 0xa1, 0xd0, 0x48, 0xf9, 0x80, 0x7a, 0x7a, 0x04, 0x34, 0x66, 0xac, 0xe4, 0x13, 0x0b, 0x22, 0xf1, 0x32, 0xe6, 0x4a, 0x60, 0xee, 0x84, 0xc5, 0x68, 0x96, 0x4d, 0xd4, 0xfd, 0xc4, 0x00, 0x90, 0x6a, 0xf4, 0xeb, 0xc4, 0xc8, 0x27, 0x24, 0x24, 0x24, 0xac, 0x54, 0x32, 0xe5, 0x9a, 0x2d, 0xf4, 0xc7, 0x00, 0x5a, 0x08, 0xff, 0x90, 0xf7, 0x17, 0x8b, 0x25, 0x97, 0x3a, 0x98, 0x87, 0x96, 0x21, 0xc5, 0x5f, 0x91, 0x60, 0x88, 0xac, 0x18, 0x00, 0x30, 0x8d, 0x5a, 0x34, 0x94, 0x65, 0x04, 0x93, 0x8f, 0x22, 0x32, 0x2c, 0x58, 0x9f, 0x99, 0xcb, 0x40, 0x20, 0xcc, 0xb9, 0x12, 0x91, 0x8a, 0x91, 0x90, 0x47, 0x9d, 0xa6, 0xbf, 0x9f, 0x59, 0xf9, 0xa8, 0xde, 0xa4, 0x12, 0x07, 0x36, 0x6f, 0x14, 0xbb, 0x57, 0xb6, 0x50, 0x36, 0x50, 0x2f, 0x84, 0x5b, 0x3c, 0x60, 0xc1, 0xb9, 0xd2, 0x08, 0x73, 0x36, 0x1c, 0xdd, 0x3a, 0x03, 0x4d, 0x05, 0xb9, 0xdc, 0x11, 0xa2, 0xe3, 0x10, 0xef, 0x06, 0xaa, 0xd1, 0x9c, 0x47, 0x39, 0x74, 0x79, 0x88, 0x1a, 0x33, 0x36, 0x35, 0x91, 0x67, 0xa0, 0xb0, 0x3c, 0x86, 0x45, 0x93, 0x27, 0x13, 0x23, 0xe4, 0x21, 0x4c, 0x24, 0xb3, 0x11, 0x26, 0xe8, 0xa9, 0x73, 0xc1, 0xc0, 0xbc, 0x01, 0xc9, 0x0d, 0x73, 0x4c, 0xa0, 0xe4, 0x02, 0xb7, 0x58, 0x16, 0xfe, 0x4f, 0x10, 0x06, 0x08, 0x0d, 0xd4, 0x0e, 0x33, 0x75, 0xd3, 0x08, 0x30, 0x37, 0x61, 0x7e, 0xb7, 0x81, 0x18, 0x98, 0xce, 0xc0, 0xe3, 0x64, 0x18, 0x08, 0xbb, 0x5f, 0xa6, 0x16, 0xe7, 0x11, 0xb1, 0xd2, 0x03, 0x16, 0x40, 0xbf, 0x96, 0x5c, 0x2a, 0xcc, 0xc2, 0x85, 0x31, 0x0e, 0xf5, 0xcc, 0x38, 0xf1, 0xfe, 0x20, 0x14, 0xe9, 0xd5, 0x69, 0x44, 0x4c, 0x50, 0xb9, 0x02, 0x61, 0x98, 0x3e, 0x37, 0x61, 0x96, 0x2c, 0xe6, 0x11, 0xcb, 0x24, 0xa2, 0x12, 0x41, 0x37, 0xd4, 0x2b, 0xb9, 0x3c, 0xf5, 0x51, 0xa3, 0x75, 0x5c, 0x12, 0xf7, 0x79, 0xae, 0xe8, 0x73, 0x1e, 0xae, 0x88, 0x8b, 0x19, 0x48, 0x2d, 0xd8, 0x89, 0x79, 0x02, 0x0a, 0x33, 0x17, 0xc0, 0xe0, 0x98, 0xb1, 0x6d, 0xda, 0x5c, 0x82, 0x8f, 0x5e, 0xb5, 0x26, 0x9a, 0xd9, 0x90, 0x90, 0x79, 0xdc, 0xfe, 0x10, 0xd9, 0x11, 0x0d, 0x61, 0x20, 0xae, 0x9e, 0x00, 0x49, 0x8b, 0x00, 0x14, 0x51, 0x96, 0x3c, 0xb3, 0x36, 0x57, 0xa0, 0x84, 0x31, 0x42, 0x85, 0x12, 0x72, 0x0b, 0xb0, 0x08, 0x93, 0x80, 0x84, 0xe9, 0x8f, 0x18, 0x1b, 0x70, 0xcf, 0x18, 0x05, 0xb3, 0x21, 0xde, 0x44, 0x9f, 0xdc, 0x0b, 0x58, 0xcc, 0x02, 0x9f, 0x54, 0x37, 0x63, 0x23, 0x57, 0xc6, 0x52, 0x29, 0x24, 0x97, 0x5e, 0xf1, 0x46, 0x73, 0xa8, 0x9e, 0x59, 0x28, 0x66, 0xde, 0x0c, 0x53, 0x68, 0x18, 0xe8, 0x98, 0x5b, 0x62, 0x6b, 0x24, 0x4e, 0x63, 0xe6, 0xa4, 0x5a, 0x2d, 0x32, 0x10, 0x91, 0x27, 0xd7, 0x3c, 0x4a, 0xa5, 0x8a, 0xd2, 0x69, 0x6e, 0xc6, 0x71, 0x96, 0x03, 0x82, 0x9d, 0xd3, 0xc8, 0x21, 0x68, 0x72, 0x88, 0x48, 0x74, 0x62, 0x02, 0x1d, 0x86, 0x2f, 0xe9, 0x01, 0xd3, 0xe6, 0xe6, 0x72, 0x3b, 0xe8, 0x46, 0x85, 0x98, 0x65, 0x02, 0x26, 0x91, 0xab, 0xa3, 0x97, 0x5c, 0x6c, 0x77, 0x9e, 0x49, 0xcf, 0xd4, 0x05, 0xa2, 0x6b, 0x1f, 0x06, 0xab, 0x40, 0x2d, 0x75, 0x13, 0x37, 0x27, 0xd7, 0x9c, 0xc8, 0x9d, 0xcc, 0x99, 0x09, 0x1a, 0x84, 0x04, 0x1f, 0xf3, 0xc4, 0xcd, 0x42, 0x28, 0x13, 0xa3, 0x85, 0xd8, 0x01, 0x4b, 0x0f, 0x06, 0x29, 0x21, 0x58, 0xc8, 0x06, 0x64, 0x3e, 0x58, 0x02, 0xce, 0x2c, 0x1a, 0x3d, 0x73, 0x05, 0x89, 0x12, 0xe1, 0xd0, 0x4e, 0x30, 0x1c, 0xb9, 0x0c, 0x80, 0x99, 0x4a, 0xff, 0x8a, 0x94, 0xab, 0xe5, 0x3f, 0xe4, 0x5b, 0x58, 0x07, 0x42, 0x2a, 0xb3, 0xc4, 0xa1, 0xe3, 0xf9, 0x4d, 0xff, 0x08, 0xd8, 0xa9, 0xb7, 0x74, 0x62, 0x76, 0x40, 0xd6, 0x45, 0x78, 0xa1, 0xbe, 0xd5, 0xe6, 0xe6, 0x0a, 0x14, 0x69, 0xb9, 0xb0, 0x04, 0x15, 0x68, 0x61, 0xc0, 0xcc, 0x5a, 0x49, 0x4f, 0x7c, 0x15, 0x93, 0x8f, 0xea, 0x55, 0xae, 0x87, 0x20, 0xdd, 0x87, 0xe3, 0xc0, 0xa0, 0x4a, 0x2e, 0xea, 0x50, 0x46, 0x81, 0x09, 0x24, 0x22, 0x77, 0xad, 0x79, 0x34, 0xf7, 0x66, 0x2d, 0x41, 0x90, 0xab, 0x95, 0x91, 0x6f, 0x13, 0xde, 0xb1, 0x02, 0x06, 0x8c, 0xca, 0x07, 0x21, 0x27, 0xe9, 0x90, 0x91, 0x6f, 0x85, 0x69, 0xa2, 0x4c, 0x89, 0xe5, 0x14, 0x19, 0x33, 0x33, 0x2c, 0x04, 0x05, 0xe5, 0xce, 0x95, 0x18, 0x3c, 0x2c, 0x92, 0x22, 0xf2, 0x12, 0xb9, 0x85, 0x66, 0x0b, 0x88, 0xc1, 0xcb, 0xf2, 0x15, 0x8b, 0x5c, 0x34, 0x26, 0x7a, 0x61, 0xbd, 0x3a, 0xe1, 0xe9, 0x68, 0x46, 0xd6, 0x82, 0x40, 0xa4, 0x9d, 0x08, 0x89, 0x4a, 0xd3, 0x12, 0x3d, 0x32, 0x49, 0xca, 0xb2, 0x44, 0x50, 0x21, 0xda, 0xb5, 0x0c, 0x0f, 0x56, 0x97, 0xd0, 0x9a, 0x0d, 0x42, 0x30, 0x23, 0x62, 0x02, 0xfd, 0xff, 0x80, 0x5b, 0x59, 0x90, 0xa3, 0xc2, 0x00, 0x4c, 0x02, 0x16, 0x6a, 0x01, 0xc2, 0x80, 0x90, 0x60, 0x6e, 0xc4, 0x3d, 0xbd, 0xe7, 0xa9, 0x11, 0x66, 0xad, 0x49, 0xba, 0xa2, 0xcf, 0x03, 0x21, 0x44, 0xea, 0x88, 0x97, 0x13, 0x48, 0x7d, 0x80, 0x1d, 0xaa, 0xe3, 0xf9, 0x45, 0x20, 0xe8, 0x16, 0x01, 0x3b, 0xc8, 0x5c, 0x2d, 0x55, 0x4e, 0x98, 0x31, 0xe2, 0x9c, 0x85, 0xb4, 0x24, 0xc2, 0x44, 0x5d, 0x89, 0xdc, 0x1c, 0xad, 0xac, 0x17, 0xe3, 0x9b, 0xda, 0xf3, 0x38, 0x7c, 0x85, 0x29, 0x1b, 0x7b, 0x5e, 0x47, 0x22, 0x49, 0x0a, 0x72, 0x6d, 0xaa, 0x11, 0x23, 0xf2, 0x04, 0x6a, 0x1f, 0x77, 0x67, 0x1e, 0x21, 0x59, 0x46, 0x96, 0xa3, 0xd5, 0x0b, 0xe9, 0xc7, 0x08, 0xaa, 0x38, 0x80, 0x1d, 0xb7, 0x8e, 0xe6, 0x17, 0x83, 0x3e, 0x05, 0x11, 0x4d, 0x58, 0x57, 0xf4, 0x8a, 0x41, 0x26, 0x0c, 0xa7, 0xaa, 0x97, 0x51, 0xe4, 0x91, 0x8d, 0xa2, 0x06, 0x59, 0x83, 0x54, 0xa1, 0x91, 0x13, 0xd4, 0x6e, 0x89, 0x27, 0x0c, 0xee, 0xf5, 0xc7, 0xa0, 0x42, 0x48, 0x24, 0xcc, 0x04, 0x65, 0x06, 0x42, 0x93, 0x4b, 0xf4, 0x23, 0xca, 0xc0, 0xfc, 0xb2, 0x41, 0x4e, 0xa3, 0x18, 0xb1, 0x6f, 0x62, 0x0a, 0xa2, 0xfa, 0x46, 0x88, 0x9d, 0x0a, 0x89, 0x93, 0x71, 0xc4, 0xf3, 0x31, 0xf7, 0x26, 0x20, 0x2c, 0x32, 0x33, 0x66, 0xec, 0xf8, 0x5c, 0x62, 0xaa, 0x0c, 0x4f, 0x42, 0x52, 0xb0, 0xd7, 0x58, 0x02, 0xc0, 0x37, 0x0d, 0xe1, 0x3e, 0x87, 0x7e, 0xb4, 0xd4, 0x06, 0x49, 0x8c, 0xf6, 0xbf, 0x07, 0x33, 0x71, 0x58, 0xa0, 0xd1, 0x8f, 0xcd, 0x33, 0x26, 0xa8, 0x73, 0x28, 0x91, 0x06, 0xff, 0xa8, 0x11, 0xa3, 0xb2, 0x55, 0x92, 0xd2, 0xf0, 0x21, 0x29, 0xc8, 0x12, 0x42, 0x22, 0xd1, 0x70, 0xd2, 0x88, 0xb9, 0x56, 0x36, 0x08, 0x61, 0x6e, 0x1d, 0x8e, 0x7e, 0x1c, 0xc8, 0x42, 0x54, 0x12, 0x3a, 0x02, 0xa6, 0xbb, 0xa2, 0xbf, 0x9e, 0x71, 0xa2, 0xa1, 0xd6, 0xb1, 0x64, 0x62, 0xc0, 0xc1, 0x26, 0x27, 0x72, 0xf5, 0xd8, 0x77, 0x46, 0x44, 0x7a, 0x42, 0x06, 0xbc, 0x12, 0x24, 0x2a, 0x10, 0x33, 0xd2, 0x3f, 0x89, 0x8a, 0x0a, 0xcf, 0xf6, 0xcc, 0x7a, 0x65, 0x1a, 0x0b, 0x39, 0xd4, 0xcd, 0x09, 0x59, 0x41, 0x3c, 0xc9, 0x88, 0x2c, 0x23, 0x89, 0x96, 0x3a, 0x99, 0x59, 0x13, 0x95, 0x2b, 0x31, 0xf1, 0x60, 0x7a, 0x9c, 0x64, 0x73, 0x81, 0xdf, 0xc4, 0x45, 0x7a, 0x0f, 0x80, 0x8b, 0xd1, 0x44, 0xb3, 0x3a, 0x93, 0x18, 0x25, 0xd4, 0x81, 0x18, 0x7e, 0x02, 0x39, 0xf8, 0x9f, 0xc4, 0x25, 0x03, 0xb1, 0x06, 0xac, 0x49, 0xc6, 0xaa, 0xae, 0xcb, 0xd5, 0x1a, 0xe5, 0x3c, 0x04, 0x9c, 0x9a, 0xcb, 0x04, 0xcd, 0x1a, 0xcc, 0xff, 0x8d, 0x72, 0x0f, 0x88, 0x82, 0x80, 0x53, 0xe7, 0x26, 0xe4, 0x52, 0x2a, 0x22, 0x8f, 0x01, 0xc3, 0xd4, 0x3a, 0xbd, 0x89, 0x24, 0x22, 0x23, 0x41, 0x2a, 0x33, 0x68, 0xb4, 0xe5, 0xa6, 0x93, 0x78, 0xe8, 0x49, 0x44, 0x38, 0xa4, 0x0b, 0xe1, 0xaf, 0x41, 0x00, 0x27, 0xd0, 0x37, 0xa2, 0x37, 0x33, 0x40, 0x3a, 0x04, 0x8c, 0xa4, 0xf8, 0x84, 0xfe, 0x66, 0x10, 0x80, 0x19, 0x25, 0x16, 0x20, 0x81, 0x9e, 0x11, 0x24, 0x39, 0x47, 0xab, 0xa5, 0x6a, 0x10, 0x75, 0x28, 0x1c, 0x26, 0x40, 0x43, 0x42, 0x4b, 0x42, 0xff, 0x14, 0xce, 0x42, 0x7a, 0x16, 0x41, 0x09, 0x85, 0x06, 0x1a, 0xa9, 0x98, 0x9a, 0xd2, 0xe3, 0x7f, 0x6c, 0x06, 0xb5, 0x0b, 0x18, 0xf5, 0xd4, 0x95, 0x1a, 0x2d, 0xb6, 0x17, 0x2b, 0x43, 0x19, 0xe1, 0x7a, 0x52, 0x91, 0x24, 0x06, 0x91, 0x47, 0x32, 0x88, 0xa9, 0xb6, 0x17, 0x92, 0xf0, 0x25, 0x56, 0x94, 0x44, 0x42, 0x04, 0x5d, 0x47, 0xa3, 0x08, 0xff, 0xf0, 0x17, 0x9b, 0x71, 0x03, 0x36, 0x5e, 0x63, 0x42, 0x69, 0x96, 0xe2, 0x4c, 0x5a, 0xd9, 0x88, 0x95, 0x19, 0xb1, 0x57, 0xb5, 0xd7, 0xcb, 0x08, 0x97, 0x11, 0xfb, 0x88, 0xf0, 0x46, 0x5c, 0x86, 0x46, 0xf2, 0x3f, 0x00, 0x75, 0x8c, 0x98, 0x4b, 0x25, 0xe2, 0x96, 0x09, 0xb9, 0xd0, 0xc8, 0x6d, 0xc0, 0x3c, 0x7c, 0x21, 0x9e, 0x74, 0x44, 0x1b, 0xa6, 0x84, 0x7c, 0x3d, 0x8b, 0x07, 0x58, 0x31, 0x06, 0x50, 0x3f, 0xd1, 0x33, 0x76, 0xac, 0x98, 0xf8, 0x19, 0x6b, 0x09, 0xb8, 0x95, 0x68, 0x97, 0xa5, 0x1b, 0x16, 0xcd, 0x25, 0xaa, 0x44, 0xa2, 0x02, 0x30, 0x03, 0x66, 0x47, 0x56, 0x65, 0xd2, 0xb1, 0x60, 0x08, 0x54, 0x3a, 0x61, 0xc3, 0x88, 0x64, 0x66, 0x1c, 0x95, 0xf3, 0xe8, 0x59, 0x96, 0x75, 0x34, 0xf7, 0x4a, 0xc4, 0x49, 0x7f, 0x4a, 0x53, 0x16, 0x31, 0x40, 0x46, 0x40, 0x42, 0xd6, 0x31, 0x4c, 0x5a, 0x4a, 0x49, 0x8d, 0x20, 0x14, 0xb2, 0xd0, 0x35, 0x2a, 0x59, 0xf3, 0x8c, 0x8c, 0x00, 0x3d, 0xf5, 0x10, 0xed, 0x71, 0x62, 0x2f, 0x81, 0x6e, 0x54, 0xe5, 0xed, 0x2a, 0x68, 0x49, 0x9c, 0xbc, 0x70, 0x28, 0x01, 0x89, 0x92, 0x7a, 0x35, 0x71, 0x42, 0xca, 0x35, 0xa8, 0x19, 0x75, 0xac, 0x08, 0x24, 0xe8, 0xb0, 0x98, 0x4c, 0x48, 0xc3, 0x7e, 0xc1, 0x6e, 0x4a, 0xf0, 0x48, 0xb8, 0x82, 0xec, 0x91, 0x54, 0x43, 0xa1, 0xc1, 0xea, 0xb7, 0x41, 0x9e, 0x5e, 0xe5, 0x1a, 0x4c, 0xa8, 0xc6, 0x4f, 0x68, 0x4e, 0xc0, 0xe1, 0x08, 0x74, 0x49, 0x09, 0x98, 0xc2, 0x5c, 0x8d, 0xb1, 0xc3, 0xea, 0x09, 0x76, 0xae, 0x8e, 0x51, 0xa7, 0xa7, 0x00, 0x22, 0x78, 0x10, 0x8a, 0x6e, 0x2f, 0x8c, 0x22, 0x1a, 0xb1, 0xad, 0x44, 0x29, 0x18, 0x3d, 0x2a, 0x15, 0xe8, 0x58, 0x0f, 0xd1, 0x0b, 0xcd, 0x84, 0xc8, 0x8b, 0xb8, 0x36, 0xb1, 0x7f, 0x13, 0x82, 0xf2, 0x67, 0xd9, 0xac, 0xe5, 0x96, 0x4b, 0xa2, 0x03, 0x47, 0x11, 0x16, 0xa1, 0xfa, 0xe2, 0xcc, 0x0a, 0x3c, 0x6e, 0xf9, 0x3f, 0xa6, 0xf9, 0x44, 0x2e, 0xc0, 0x61, 0x6d, 0x64, 0xf9, 0x48, 0x67, 0x60, 0x52, 0x21, 0xec, 0x60, 0x93, 0x0b, 0x58, 0xad, 0xc7, 0x6a, 0xa8, 0x1b, 0x49, 0x76, 0xd2, 0x91, 0xd4, 0x44, 0xc0, 0x5c, 0x61, 0xd1, 0xc9, 0x40, 0xf5, 0x0d, 0x0b, 0xf5, 0xf6, 0x63, 0xc9, 0xa8, 0x63, 0x41, 0x15, 0x61, 0x21, 0x6e, 0x70, 0x85, 0xbb, 0x0a, 0xb0, 0xcb, 0x26, 0x90, 0xde, 0xc3, 0x83, 0x4d, 0x15, 0xdc, 0xb6, 0x13, 0xbb, 0x62, 0x16, 0xc8, 0x92, 0xb8, 0x6e, 0x04, 0x39, 0xae, 0xac, 0xfd, 0x48, 0x4e, 0x08, 0x0d, 0x98, 0x92, 0x8d, 0x92, 0x84, 0x29, 0x94, 0x3b, 0xa1, 0xd2, 0xd1, 0xa0, 0xd0, 0x81, 0xe8, 0x9f, 0x61, 0x64, 0xe3, 0xaa, 0xf2, 0xad, 0x37, 0x7c, 0x20, 0x4d, 0x20, 0xfc, 0xa5, 0xd4, 0x7c, 0x6c, 0x90, 0x71, 0x18, 0xab, 0x1f, 0x91, 0xb5, 0x4c, 0xe7, 0xa4, 0x22, 0x80, 0xda, 0x8b, 0xfa, 0xa7, 0x49, 0xe3, 0x11, 0x1a, 0x25, 0x0d, 0x67, 0x12, 0xf8, 0x25, 0x1d, 0x8d, 0x2f, 0x2d, 0x82, 0x6a, 0xd1, 0xd2, 0x38, 0x63, 0x9c, 0xf2, 0x9c, 0x75, 0x19, 0x87, 0x99, 0xee, 0x92, 0x64, 0x64, 0x84, 0x50, 0xb3, 0x44, 0xd5, 0x85, 0xac, 0xcb, 0x10, 0x65, 0x20, 0xb3, 0xa1, 0xc9, 0x02, 0x53, 0xe1, 0x0d, 0x15, 0xd7, 0x3c, 0xa1, 0x24, 0x32, 0x15, 0x62, 0x7f, 0x0c, 0x13, 0x19, 0x22, 0x1f, 0x11, 0x5a, 0xb6, 0x4e, 0x9d, 0xb7, 0x31, 0xf2, 0x69, 0x5e, 0x1c, 0x41, 0x78, 0xb1, 0x23, 0xc4, 0xda, 0x00, 0x62, 0x00, 0xcb, 0x19, 0xe5, 0xf1, 0x84, 0xb8, 0x90, 0xc4, 0x84, 0xc5, 0x52, 0x90, 0x44, 0xe3, 0xf3, 0x8a, 0x74, 0x9d, 0xd0, 0x41, 0x65, 0xd6, 0x3b, 0x41, 0x55, 0x6e, 0x7b, 0xe1, 0x13, 0x52, 0x82, 0x84, 0x32, 0x02, 0xc8, 0x4d, 0x51, 0xa9, 0x95, 0x13, 0xa8, 0x7e, 0x23, 0x48, 0x98, 0x16, 0x49, 0x24, 0xbd, 0xb8, 0x21, 0x11, 0xa8, 0x06, 0xa6, 0x2e, 0xf9, 0x23, 0x42, 0x89, 0x5e, 0x9d, 0x08, 0x9f, 0x63, 0xf1, 0x46, 0xa2, 0x79, 0x00, 0xcb, 0xb8, 0xc8, 0xea, 0x38, 0xb0, 0x42, 0x9d, 0x40, 0xc4, 0xd2, 0x42, 0x09, 0x4b, 0x4b, 0xd4, 0x4c, 0xd4, 0x0c, 0xa5, 0xeb, 0x65, 0xf1, 0xc4, 0xeb, 0x02, 0xdc, 0x9d, 0x3a, 0xe0, 0x3e, 0xb9, 0x0c, 0x42, 0xcc, 0x36, 0x30, 0x8b, 0x36, 0x8d, 0x52, 0x43, 0x90, 0x0e, 0x8a, 0x29, 0xa1, 0x89, 0x5e, 0xd4, 0x95, 0x19, 0x04, 0x36, 0x53, 0x00, 0x76, 0x0e, 0x3f, 0xf0, 0xff, 0x84, 0x44, 0xab, 0x4e, 0xb4, 0x42, 0x80, 0x0d, 0x7c, 0x0e, 0x86, 0x0d, 0x24, 0xbd, 0x8d, 0xd2, 0x6c, 0x8c, 0x14, 0x46, 0x09, 0xc4, 0x8d, 0x28, 0x9c, 0x05, 0x94, 0x51, 0xc2, 0x94, 0xcc, 0x09, 0x46, 0x51, 0x86, 0xd0, 0xf1, 0x00, 0x60, 0xc1, 0x85, 0xe0, 0xf9, 0x18, 0x47, 0x9e, 0x2a, 0xd4, 0x00, 0x23, 0x04, 0x3b, 0xd8, 0xc4, 0x39, 0x74, 0x5c, 0x1f, 0x4b, 0x16, 0x39, 0xc4, 0x9f, 0x74, 0xa9, 0xea, 0xb5, 0x6a, 0x1b, 0x2d, 0x32, 0x87, 0xe9, 0x54, 0xe6, 0x87, 0x6c, 0x6f, 0x07, 0xab, 0x5d, 0x84, 0x79, 0x62, 0x55, 0x94, 0xd4, 0x80, 0x3d, 0x8b, 0x77, 0x2c, 0x10, 0x55, 0x34, 0x13, 0x4d, 0x64, 0xd4, 0xf7, 0x09, 0x43, 0x1e, 0x8b, 0x38, 0x54, 0x0f, 0x37, 0x92, 0x06, 0xf9, 0x28, 0x11, 0x01, 0x08, 0x8d, 0x99, 0x51, 0x75, 0x91, 0x98, 0x02, 0x8d, 0x43, 0x42, 0x94, 0x84, 0xb1, 0x94, 0x6a, 0x44, 0xbe, 0x91, 0x72, 0x88, 0x36, 0xd0, 0xb0, 0xe0, 0x1a, 0x98, 0x1a, 0x90, 0x8d, 0x51, 0x94, 0xc9, 0xa4, 0x22, 0x0e, 0xa7, 0x1b, 0xc1, 0x60, 0x10, 0x2e, 0x5e, 0xc1, 0xa2, 0x51, 0x68, 0x61, 0x52, 0x41, 0x2c, 0xa4, 0xb1, 0x69, 0x95, 0x79, 0x82, 0x45, 0x4e, 0xae, 0x93, 0xc4, 0x8a, 0x01, 0xe1, 0x97, 0x4a, 0x34, 0x51, 0xcf, 0x60, 0x99, 0x18, 0x83, 0x17, 0x45, 0x91, 0x78, 0x2d, 0x40, 0x53, 0x91, 0x06, 0x84, 0x65, 0x4a, 0x3a, 0x42, 0x6c, 0x4a, 0x06, 0x5d, 0x82, 0x10, 0x2c, 0x56, 0x7c, 0x72, 0x11, 0x74, 0xcc, 0x29, 0xeb, 0x4c, 0x0c, 0x9c, 0x84, 0x8c, 0x5d, 0xed, 0x6d, 0xa2, 0x23, 0xa6, 0x45, 0x04, 0x6a, 0x27, 0x0b, 0xc9, 0xbc, 0x1c, 0x86, 0x08, 0x21, 0x20, 0x90, 0x28, 0x70, 0xb6, 0xa1, 0x74, 0xd7, 0x63, 0x56, 0x49, 0xa5, 0x75, 0xbd, 0x3a, 0x8e, 0x71, 0xa4, 0xe2, 0x8c, 0x26, 0x73, 0x31, 0xa6, 0x2b, 0x6a, 0x51, 0x92, 0x4e, 0x28, 0x01, 0x04, 0x59, 0x2e, 0x8b, 0x84, 0x42, 0x63, 0xc3, 0xa2, 0xe8, 0xa2, 0xc5, 0x95, 0x51, 0xe2, 0xb8, 0x06, 0x1e, 0xa3, 0xc0, 0xa3, 0x8e, 0x22, 0x74, 0x8c, 0x3a, 0x04, 0xde, 0x2c, 0xd1, 0x3c, 0x41, 0x1a, 0x27, 0x31, 0xef, 0x5f, 0x22, 0xe3, 0x61, 0xc6, 0x41, 0xc3, 0x11, 0xa9, 0x62, 0x04, 0x01, 0xd2, 0x89, 0x36, 0xe8, 0x44, 0x43, 0x27, 0x98, 0xc4, 0x00, 0xa3, 0x1e, 0xd0, 0x53, 0xf1, 0x97, 0xe5, 0x3c, 0x6c, 0xa6, 0x89, 0x74, 0x5e, 0x7d, 0x9a, 0x15, 0x7f, 0x44, 0x92, 0xc7, 0xa8, 0x41, 0x43, 0x63, 0x8b, 0xc0, 0xa5, 0x6b, 0x58, 0xb6, 0xd2, 0x5a, 0x09, 0xd1, 0x3f, 0x89, 0xf7, 0x8c, 0xbc, 0x4b, 0x8c, 0xfd, 0x11, 0xd9, 0xc8, 0x5d, 0x47, 0xd9, 0x13, 0x88, 0xbf, 0xe7, 0xc5, 0xa4, 0x00, 0x3c, 0x25, 0xa9, 0x2d, 0x46, 0xf2, 0x34, 0x10, 0x3a, 0x11, 0x29, 0x58, 0x9a, 0x99, 0x16, 0x8d, 0x24, 0x5a, 0x06, 0xa2, 0x59, 0x08, 0x65, 0x16, 0x1d, 0xb5, 0xf7, 0x63, 0xd9, 0xa4, 0x63, 0x0d, 0x26, 0x35, 0xbd, 0x7f, 0x08, 0x85, 0x7a, 0xd1, 0x36, 0x5e, 0xaf, 0x33, 0xca, 0x62, 0xb5, 0x49, 0xab, 0x45, 0x0c, 0x58, 0xc4, 0xd4, 0xaa, 0x23, 0x11, 0xd1, 0x20, 0xcb, 0x8c, 0x30, 0x6c, 0xa2, 0xe9, 0xa2, 0x9c, 0x43, 0x64, 0x0d, 0x5c, 0x3b, 0x82, 0x92, 0x2b, 0x19, 0xc4, 0x14, 0x83, 0x5d, 0xa4, 0x25, 0x7e, 0x7d, 0x45, 0xd6, 0xe0, 0x9c, 0x80, 0xed, 0xa6, 0x1e, 0xb0, 0xea, 0xc4, 0x44, 0x66, 0x12, 0xd3, 0x05, 0x26, 0xb9, 0x82, 0xf9, 0x59, 0xa2, 0x60, 0xc5, 0x8a, 0xa0, 0x38, 0x4f, 0xab, 0xa1, 0x09, 0x9a, 0x1b, 0x30, 0x44, 0xa6, 0x42, 0xf2, 0x4d, 0x22, 0x31, 0xc9, 0xbb, 0x12, 0x8b, 0x80, 0x3a, 0xee, 0xd5, 0x11, 0x22, 0x19, 0x13, 0xb7, 0x10, 0xb0, 0x02, 0xd2, 0xa5, 0x25, 0xb1, 0x18, 0xf5, 0x02, 0x2d, 0xec, 0x81, 0xca, 0xfd, 0x45, 0xdf, 0xde, 0x4e, 0x09, 0xb1, 0x56, 0xbe, 0x21, 0x06, 0x69, 0xc2, 0x17, 0x8b, 0xc0, 0x3a, 0x5e, 0x52, 0x24, 0x6e, 0x6d, 0x22, 0xb1, 0x80, 0x7e, 0x8c, 0x92, 0xba, 0xc2, 0xa0, 0x76, 0xd0, 0x39, 0xb8, 0x5e, 0x10, 0x15, 0xb5, 0x8d, 0xc6, 0x80, 0x49, 0x16, 0x73, 0x74, 0x01, 0xd2, 0xbb, 0x58, 0x8a, 0x20, 0xaa, 0x20, 0x99, 0x56, 0xe6, 0x46, 0xa1, 0xac, 0x71, 0x85, 0x3b, 0x12, 0x51, 0x2f, 0xb8, 0xb3, 0x4e, 0xc0, 0x65, 0xd4, 0x09, 0x56, 0x09, 0x48, 0x59, 0xd8, 0x8d, 0xd4, 0x2a, 0xad, 0x09, 0xdb, 0x38, 0x01, 0x73, 0x52, 0x56, 0xec, 0x24, 0x31, 0xb2, 0x71, 0xc0, 0x20, 0x0a, 0xa9, 0x0e, 0x2b, 0x45, 0xe5, 0x4a, 0xac, 0xd5, 0xe9, 0xd3, 0xac, 0xfa, 0x7d, 0x90, 0x79, 0x08, 0x7e, 0x45, 0x2c, 0x82, 0xa1, 0x2e, 0xc6, 0x62, 0x03, 0xe1, 0x95, 0xfb, 0x82, 0xa4, 0x24, 0x84, 0x0a, 0x49, 0x90, 0xc2, 0x8c, 0x58, 0x11, 0x63, 0x11, 0x6b, 0xc3, 0xa1, 0xa7, 0xa5, 0x67, 0x5a, 0x52, 0x26, 0xa1, 0x04, 0x21, 0x7a, 0x11, 0xf1, 0x95, 0x5e, 0x49, 0xbf, 0xa2, 0x8a, 0xbb, 0x34, 0xe9, 0x69, 0x28, 0x1f, 0x65, 0xc0, 0xe4, 0xa4, 0xdc, 0xd0, 0xcc, 0x3b, 0x22, 0xe7, 0x63, 0x68, 0x2e, 0xd6, 0x65, 0xe4, 0x49, 0x5c, 0x2c, 0x18, 0x12, 0x4c, 0xef, 0xc1, 0xf5, 0xea, 0xfa, 0x3b, 0xb7, 0x30, 0x57, 0xc8, 0x04, 0x38, 0x65, 0xeb, 0xc4, 0x1a, 0x23, 0x41, 0x8b, 0x58, 0x62, 0x79, 0x1a, 0x25, 0x50, 0x12, 0x28, 0x72, 0x49, 0x32, 0xd4, 0x12, 0x8d, 0x51, 0xa5, 0xa3, 0x7a, 0x8d, 0x81, 0x55, 0xa9, 0x7f, 0x16, 0x9a, 0x8c, 0x8e, 0x17, 0x82, 0x71, 0x5a, 0x65, 0x08, 0xb4, 0x24, 0xb0, 0xe9, 0x59, 0x02, 0x26, 0x15, 0x24, 0x4f, 0x6b, 0xe4, 0x15, 0x1b, 0xa4, 0x3f, 0x5e, 0x06, 0x45, 0xb0, 0x84, 0x5c, 0xcb, 0x43, 0x83, 0x44, 0x1d, 0xa4, 0x64, 0x02, 0xeb, 0x1d, 0xf8, 0x92, 0x18, 0x83, 0x19, 0xb0, 0x8c, 0x5a, 0xd6, 0x3c, 0x18, 0xcf, 0x26, 0x26, 0x3e, 0x16, 0xdc, 0x71, 0xd0, 0xf1, 0xaa, 0x08, 0x96, 0x63, 0x64, 0xd0, 0x65, 0x9a, 0x0f, 0xf5, 0x02, 0xeb, 0xfa, 0xff, 0x05, 0x13, 0xf5, 0x62, 0x8d, 0x85, 0x3b, 0x02, 0x1b, 0x62, 0x42, 0x39, 0x87, 0x05, 0x6f, 0x93, 0x11, 0xfb, 0xd0, 0xc2, 0xe2, 0x2b, 0x15, 0x4f, 0xb2, 0x33, 0x75, 0xce, 0x97, 0xb0, 0x5c, 0x12, 0x84, 0x09, 0xf8, 0x5c, 0xa3, 0x98, 0xe2, 0xd4, 0xb5, 0x26, 0x01, 0x18, 0x2d, 0x15, 0xf2, 0xf8, 0x33, 0xd0, 0x7c, 0x41, 0x2d, 0x4b, 0xc8, 0x13, 0x73, 0x79, 0x62, 0xd7, 0xf3, 0xba, 0x3f, 0x48, 0x46, 0xea, 0x55, 0x04, 0x4e, 0x43, 0xa5, 0x63, 0xaf, 0xa0, 0x76, 0x91, 0x9f, 0x4b, 0x18, 0x93, 0x79, 0xad, 0x48, 0xd5, 0xf7, 0xf5, 0xbb, 0xd5, 0xa5, 0x51, 0x31, 0x70, 0x48, 0xa4, 0x66, 0xcc, 0x13, 0xe9, 0xdf, 0x60, 0xe4, 0xde, 0x92, 0xc5, 0x0a, 0x82, 0xc4, 0xec, 0x8a, 0xd5, 0x33, 0xb5, 0x24, 0xbc, 0x78, 0xe5, 0x4b, 0x10, 0x00, 0x43, 0xf6, 0x27, 0x50, 0xc5, 0x4c, 0x9a, 0x1d, 0x50, 0xb7, 0xd2, 0x24, 0xe4, 0xaf, 0x90, 0x2e, 0x2b, 0x84, 0x77, 0x31, 0xc8, 0x24, 0xd2, 0x66, 0x4c, 0x9c, 0x5d, 0x4b, 0x3a, 0xcf, 0x0d, 0x44, 0xfd, 0x46, 0xaa, 0x02, 0xc4, 0x12, 0xad, 0x28, 0xf2, 0x25, 0x75, 0xd1, 0x10, 0x33, 0x22, 0x4d, 0x93, 0xdc, 0x82, 0xc2, 0xd1, 0x6d, 0x5a, 0x15, 0x20, 0x91, 0x9b, 0x94, 0x11, 0x5a, 0x56, 0x4e, 0x77, 0x93, 0x4e, 0x62, 0xf5, 0x04, 0xff, 0x93, 0x70, 0x21, 0x56, 0x26, 0x54, 0x69, 0xfa, 0x04, 0xad, 0x5b, 0x1a, 0xae, 0xe0, 0x0c, 0x85, 0x7d, 0x26, 0x31, 0xfa, 0x25, 0x96, 0xcc, 0x0c, 0x65, 0x24, 0x14, 0xea, 0x49, 0x01, 0xd4, 0x98, 0x10, 0x94, 0x3c, 0xce, 0x9f, 0x47, 0xa8, 0x47, 0xa5, 0x1b, 0x95, 0x78, 0xd6, 0x02, 0x0d, 0x82, 0xaa, 0x40, 0x3f, 0x08, 0x37, 0xb1, 0x54, 0x44, 0xf2, 0x95, 0x58, 0xbb, 0x25, 0x0a, 0x24, 0x4d, 0x52, 0x2b, 0x06, 0x4a, 0x6e, 0x6e, 0x82, 0xe5, 0xea, 0xaf, 0xa8, 0xfb, 0x2b, 0xac, 0xe0, 0x99, 0xa8, 0x40, 0xa3, 0xac, 0x97, 0xc4, 0x1a, 0x00, 0x8b, 0xd0, 0xe7, 0x08, 0x40, 0xda, 0x0c, 0x02, 0xfd, 0x59, 0x16, 0x13, 0xd4, 0x7d, 0x29, 0x9a, 0x14, 0x12, 0xd8, 0x6f, 0x26, 0x12, 0x32, 0x6e, 0x34, 0x88, 0xbd, 0x1c, 0xa4, 0x1a, 0x0d, 0xb7, 0x9a, 0x34, 0x41, 0x92, 0xa8, 0x13, 0xda, 0x1b, 0x78, 0x74, 0xca, 0x2a, 0xbf, 0x01, 0xb1, 0xea, 0x06, 0xfa, 0x97, 0x69, 0x99, 0x1c, 0x0b, 0x19, 0x35, 0x94, 0x00, 0xcb, 0xaa, 0x06, 0x52, 0x0e, 0x64, 0x5e, 0x77, 0xa1, 0xe5, 0x7f, 0x26, 0x62, 0x13, 0xea, 0x6d, 0x26, 0xbd, 0xba, 0xba, 0x96, 0x30, 0x58, 0xf5, 0xcc, 0x04, 0x64, 0x75, 0x8b, 0xca, 0x20, 0x34, 0x54, 0x31, 0xe1, 0x81, 0xfe, 0x0c, 0xed, 0x43, 0x88, 0x55, 0x27, 0xd1, 0xbf, 0x28, 0xc6, 0xc9, 0xd4, 0xa3, 0x09, 0x83, 0xd8, 0xc7, 0xa2, 0xc2, 0x8d, 0x04, 0x9a, 0x96, 0xb4, 0x7c, 0x5e, 0xb2, 0xa0, 0x41, 0xc2, 0xbb, 0x2a, 0xc4, 0xe7, 0x46, 0x79, 0xfb, 0xed, 0x7f, 0xa3, 0xf8, 0x92, 0x1e, 0xd1, 0x55, 0x24, 0x0c, 0x1a, 0xa8, 0x2f, 0x35, 0x79, 0x42, 0x3b, 0xc5, 0x21, 0xa0, 0x15, 0xb4, 0x02, 0x3c, 0xdf, 0x50, 0x8d, 0x46, 0x99, 0x57, 0xeb, 0x19, 0x22, 0x89, 0xd5, 0x36, 0x82, 0xe9, 0x28, 0xb5, 0x90, 0x24, 0x27, 0x20, 0x02, 0x4c, 0x18, 0xf2, 0x79, 0xc5, 0x87, 0x4e, 0x91, 0x8a, 0x9e, 0xc1, 0x52, 0xb1, 0x0f, 0xf4, 0x88, 0x1e, 0xd2, 0x9f, 0xaf, 0xd0, 0x52, 0x02, 0x61, 0x88, 0x65, 0xd0, 0x1d, 0x24, 0xf4, 0x73, 0x13, 0xc4, 0xc2, 0xe0, 0x28, 0xdc, 0xac, 0x67, 0x59, 0x44, 0xa8, 0x29, 0xb9, 0x32, 0xa4, 0x37, 0xf9, 0xe8, 0xa2, 0x41, 0x2b, 0xb1, 0x3e, 0xa3, 0xd1, 0xa9, 0xd3, 0xdd, 0x61, 0xc1, 0xf4, 0x58, 0xe4, 0x91, 0x58, 0xe5, 0x46, 0x64, 0x5d, 0x27, 0xa6, 0x43, 0x31, 0xc0, 0x25, 0x16, 0x51, 0x2e, 0xd3, 0xaa, 0x86, 0x58, 0x3a, 0x7a, 0x06, 0x84, 0x4e, 0xc1, 0x0c, 0xe0, 0x13, 0xd0, 0x32, 0xfb, 0x11, 0x48, 0x19, 0x45, 0xf9, 0x92, 0x74, 0xc7, 0x09, 0x2a, 0xea, 0x75, 0xea, 0x7e, 0x21, 0x57, 0x75, 0x88, 0x38, 0x90, 0xba, 0x54, 0x4e, 0x3b, 0x35, 0xac, 0x42, 0xa7, 0x66, 0xa8, 0x8f, 0x58, 0x14, 0x11, 0xc3, 0x5d, 0x4f, 0x3a, 0x9e, 0x85, 0xc9, 0x5d, 0xa7, 0x72, 0x19, 0xd0, 0x5f, 0xe2, 0x25, 0x6a, 0x83, 0x2a, 0xee, 0xeb, 0xc5, 0x70, 0x12, 0x60, 0xf3, 0xa6, 0x6c, 0x2f, 0x0c, 0xa1, 0xf2, 0xab, 0x4a, 0x84, 0x20, 0x36, 0x22, 0xc5, 0x4c, 0xcd, 0xa4, 0x9e, 0xda, 0xdf, 0x4c, 0x49, 0x46, 0xa9, 0xf6, 0xfd, 0xbf, 0x41, 0xac, 0xea, 0xa9, 0x33, 0x9b, 0xba, 0xdb, 0xa9, 0x22, 0x54, 0xcc, 0x8a, 0x7a, 0x55, 0x0d, 0x92, 0x88, 0x31, 0xab, 0xac, 0xe1, 0x75, 0xcc, 0x2a, 0x64, 0xef, 0x84, 0xa1, 0x48, 0x27, 0x36, 0x5b, 0x54, 0x34, 0x73, 0x8b, 0xc4, 0x74, 0x98, 0x20, 0xae, 0xf4, 0x28, 0x82, 0x67, 0x57, 0xb7, 0x22, 0xd5, 0x85, 0x29, 0x41, 0x05, 0x94, 0x50, 0xd2, 0xa7, 0x56, 0x2a, 0xd5, 0x19, 0x6d, 0x2f, 0x2d, 0x0d, 0x73, 0x95, 0xa9, 0xfd, 0x4c, 0x10, 0xbc, 0x51, 0x30, 0x2b, 0xa6, 0xc1, 0x4d, 0x58, 0xe2, 0x57, 0x20, 0x05, 0xaa, 0x58, 0x62, 0x56, 0xc5, 0x38, 0x95, 0x85, 0x71, 0x51, 0xff, 0x82, 0x3c, 0x02, 0xd2, 0x3b, 0xd2, 0x94, 0x17, 0x2e, 0xa3, 0x46, 0x02, 0xb4, 0xc6, 0xae, 0xd5, 0x8b, 0x55, 0x6a, 0x0d, 0xd5, 0x75, 0x85, 0x17, 0xa4, 0x28, 0x29, 0xc7, 0xfe, 0xf7, 0x89, 0x80, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xfe, 0xfb, 0xef, 0xbf, 0xff, 0xdf, 0xf8, 0x3b, 0x06, 0xc3, 0x26, 0x30, 0x5c, 0xc1, 0x6b, 0x14, 0xaf, 0x21, 0xf5, 0x7e, 0x11, 0xaf, 0x4f, 0xd4, 0xe7, 0xf1, 0x77, 0xba, 0x12, 0x9f, 0xf2, 0x4c, 0xf9, 0xce, 0xe1, 0x75, 0xfe, 0xd3, 0xf3, 0xe2, 0x5c, 0x2b, 0x59, 0x2c, 0x09, 0xfa, 0xf9, 0x0b, 0xfd, 0x8c, 0xd0, 0xcf, 0x30, 0xfd, 0xfc, 0x09, 0x12, 0x96, 0x77, 0xe8, 0xe1, 0x0c, 0xfd, 0x5c, 0xa4, 0x9f, 0x4f, 0xe8, 0xe7, 0xf7, 0xf4, 0x33, 0x4a, 0x3f, 0x6f, 0x42, 0xaf, 0xa5, 0x57, 0x64, 0xe3, 0x02, 0xce, 0xd3, 0xcf, 0x1f, 0xe8, 0xe7, 0xd4, 0xa7, 0xe5, 0x3b, 0x0a, 0x60, 0xe9, 0xcd, 0x5d, 0x9f, 0x2b, 0x99, 0x4c, 0x99, 0x7c, 0x09, 0x18, 0x15, 0xf5, 0x8e, 0xc2, 0x48, 0xe6, 0x81, 0xae, 0x8f, 0xf9, 0x3e, 0x8a, 0x29, 0x46, 0x2c, 0x97, 0xd4, 0xe7, 0xd4, 0x7b, 0xea, 0x3e, 0x22, 0xc0, 0x1e, 0xc5, 0xc4, 0x09, 0x8b, 0x0c, 0x16, 0x35, 0xd1, 0x88, 0x80, 0x91, 0x22, 0xde, 0xc5, 0x59, 0xf3, 0x49, 0x9c, 0xed, 0x3e, 0xe4, 0x93, 0x54, 0x1f, 0x93, 0xf0, 0xfa, 0x17, 0xd0, 0x5b, 0x2c, 0x80, 0x7f, 0x96, 0x2b, 0xe9, 0xe6, 0x64, 0x9a, 0x3e, 0x0a, 0x79, 0x18, 0x0b, 0x99, 0xeb, 0x92, 0x88, 0x1f, 0x17, 0xfa, 0x31, 0xdc, 0x30, 0x36, 0x20, 0x75, 0x71, 0xab, 0x2e, 0x83, 0x29, 0x13, 0x32, 0x2a, 0x8a, 0xd5, 0x89, 0xb7, 0xcb, 0x30, 0x6c, 0x99, 0x30, 0x3e, 0xd3, 0x68, 0x1a, 0x53, 0x44, 0x08, 0xc7, 0x31, 0x49, 0x22, 0xd3, 0x88, 0xcf, 0x83, 0x2c, 0xab, 0xaa, 0x3f, 0x7f, 0x26, 0x54, 0x57, 0xb0, 0x4c, 0xc3, 0x38, 0xa8, 0xae, 0x20, 0x40, 0x46, 0x15, 0x1d, 0x80, 0x6f, 0x63, 0xe3, 0x47, 0x30, 0x87, 0x80, 0x28, 0x81, 0x81, 0x89, 0xab, 0x62, 0x33, 0xa0, 0xe9, 0x52, 0xf5, 0x8c, 0xfc, 0xd5, 0x60, 0x5d, 0x85, 0xdb, 0xd1, 0x74, 0xb7, 0x5c, 0x14, 0x24, 0xa2, 0x16, 0x7e, 0x25, 0xf5, 0x30, 0x16, 0xa3, 0x02, 0xc0, 0x0c, 0x41, 0xa5, 0xc9, 0x22, 0x21, 0x3a, 0x38, 0x2b, 0xbf, 0xa4, 0x22, 0xed, 0x0a, 0xd3, 0x8f, 0x44, 0x90, 0x65, 0x08, 0x8b, 0x32, 0x10, 0xed, 0xa0, 0xfc, 0x34, 0x92, 0x22, 0x0d, 0xa2, 0xac, 0x6c, 0x52, 0x1d, 0x43, 0xa5, 0x7f, 0x42, 0x9a, 0x3a, 0x88, 0xf2, 0xd8, 0x45, 0xa2, 0xaa, 0x3f, 0x1b, 0x24, 0x13, 0x0e, 0x5e, 0x54, 0x6c, 0x4c, 0x7f, 0x32, 0x5c, 0x62, 0x19, 0x19, 0x03, 0x46, 0x4d, 0x7f, 0xc4, 0x04, 0x87, 0xf1, 0xf5, 0x1d, 0xc3, 0x5e, 0xcc, 0xdf, 0x0b, 0x07, 0x30, 0xb1, 0x69, 0xd8, 0x32, 0x2d, 0x4f, 0x3d, 0x9d, 0x93, 0x3e, 0x2d, 0x91, 0x7a, 0xb3, 0x58, 0x72, 0xf3, 0xf2, 0x72, 0xf3, 0x2c, 0xf4, 0x9f, 0x03, 0x72, 0x2d, 0x89, 0x3c, 0x30, 0x0c, 0x53, 0xbe, 0xd1, 0x3c, 0x19, 0x03, 0x47, 0xf2, 0x34, 0xf8, 0x4b, 0xa1, 0x78, 0x4d, 0x18, 0x97, 0x59, 0x1c, 0x5f, 0xb1, 0xf0, 0x31, 0x9a, 0x61, 0x0b, 0x98, 0xae, 0xa0, 0x74, 0x68, 0xca, 0xbb, 0xac, 0x9e, 0xe0, 0x49, 0x58, 0x8a, 0xf2, 0xae, 0x55, 0x33, 0x56, 0x69, 0xb9, 0x92, 0xa7, 0xc5, 0x67, 0x93, 0xfe, 0x38, 0xca, 0xe4, 0xb9, 0x96, 0xec, 0x54, 0x97, 0xb9, 0xac, 0x5e, 0x78, 0x08, 0xe5, 0x5d, 0x2c, 0x38, 0x27, 0x2f, 0x75, 0x40, 0x2a, 0x0f, 0x01, 0xd0, 0x89, 0xb3, 0x12, 0xa3, 0xb9, 0x39, 0xb4, 0x5d, 0x4e, 0x67, 0x1d, 0xf0, 0xff, 0x48, 0x2e, 0xe4, 0x8d, 0xe2, 0x95, 0xc8, 0xd5, 0xe0, 0xab, 0x81, 0x76, 0x94, 0xa9, 0x31, 0x89, 0x5c, 0x3d, 0x9d, 0x8b, 0xc2, 0xa0, 0x11, 0x04, 0x9e, 0xae, 0xd1, 0x3c, 0x9d, 0xa8, 0x26, 0x41, 0x47, 0x94, 0xf2, 0x52, 0x90, 0x8b, 0x73, 0x38, 0x08, 0xb3, 0x81, 0x94, 0x1d, 0x18, 0x1b, 0x96, 0x97, 0xc7, 0x47, 0x77, 0xf2, 0x30, 0x33, 0x58, 0x86, 0xf3, 0xf4, 0x02, 0x5f, 0x5c, 0x67, 0x82, 0xb6, 0xd6, 0xf3, 0x72, 0x0d, 0x7f, 0x04, 0x53, 0xe6, 0x08, 0x49, 0x22, 0xcf, 0x64, 0xe6, 0xf6, 0x08, 0xf4, 0xe8, 0xc4, 0x79, 0x1b, 0x6a, 0x0e, 0x15, 0x9c, 0xcb, 0x8d, 0xa1, 0x33, 0x30, 0xb9, 0xe6, 0xbc, 0x84, 0x79, 0x12, 0x1f, 0x22, 0x30, 0x67, 0x9f, 0x8e, 0xc8, 0x55, 0x1f, 0x39, 0x22, 0x91, 0x0b, 0xd8, 0x56, 0x86, 0x2a, 0x37, 0x91, 0x37, 0x45, 0x74, 0x16, 0xfd, 0xf1, 0xc9, 0x92, 0x5c, 0x2e, 0xc9, 0xcc, 0x27, 0x82, 0x2c, 0xa9, 0xb3, 0x39, 0x79, 0x2a, 0xe8, 0x3a, 0x3e, 0xd8, 0x63, 0x46, 0x0a, 0x33, 0x23, 0x46, 0xc0, 0x70, 0xd9, 0xa2, 0x37, 0x0b, 0xf4, 0x8f, 0x58, 0x6e, 0x30, 0xab, 0x59, 0xf8, 0x20, 0x0f, 0xf5, 0x3a, 0x1d, 0x1b, 0x31, 0x73, 0x3b, 0xb1, 0x9e, 0x44, 0xae, 0x94, 0x97, 0xfb, 0x47, 0x20, 0xc8, 0x73, 0xd5, 0x93, 0x29, 0x0c, 0xad, 0x38, 0xf3, 0x43, 0x55, 0xf2, 0xff, 0xdc, 0x5e, 0x18, 0x20, 0xb8, 0x2c, 0xb3, 0x31, 0x9c, 0x96, 0xce, 0x51, 0x97, 0x4c, 0xfd, 0xa9, 0x87, 0xc8, 0x4c, 0xb4, 0x96, 0x4b, 0x1b, 0x23, 0xa9, 0x2d, 0x22, 0x8a, 0x44, 0xa2, 0x95, 0x45, 0x2b, 0x79, 0xc3, 0x87, 0x7b, 0xc8, 0x64, 0x32, 0x70, 0x78, 0xc2, 0xa4, 0x43, 0x8e, 0x8d, 0x85, 0x7d, 0x68, 0x02, 0x69, 0xd8, 0xa4, 0xd5, 0x9b, 0x38, 0x90, 0x66, 0x1b, 0xd9, 0x60, 0xd2, 0x63, 0x43, 0x72, 0x47, 0x2d, 0x46, 0xca, 0x6a, 0x30, 0x31, 0xc5, 0xd3, 0x9e, 0x05, 0xc6, 0x4b, 0xa3, 0xa6, 0x1c, 0x03, 0x85, 0x49, 0x14, 0x2e, 0x61, 0x08, 0x86, 0x6a, 0xa9, 0x36, 0xd3, 0x95, 0x5c, 0xc9, 0x6c, 0x7a, 0x0b, 0x6e, 0x22, 0xa4, 0xd1, 0x72, 0x2d, 0xc5, 0x4b, 0x22, 0x21, 0x9d, 0x60, 0xa4, 0x24, 0xf8, 0x48, 0x2b, 0x20, 0x03, 0x40, 0xa7, 0xf1, 0xb0, 0xd1, 0x26, 0xde, 0x43, 0xc3, 0xff, 0x7f, 0xa1, 0xc1, 0xf6, 0x11, 0x2f, 0x8b, 0x8c, 0x80, 0x86, 0xb7, 0x4b, 0x72, 0xaf, 0x33, 0x13, 0xd8, 0x98, 0x10, 0x55, 0x78, 0xb1, 0x62, 0xae, 0xff, 0x58, 0xa8, 0x3e, 0xa8, 0xf3, 0x01, 0x1d, 0x95, 0x42, 0x7d, 0x5a, 0xdd, 0xb2, 0x4f, 0xf0, 0x4b, 0x8e, 0x41, 0x50, 0x83, 0xc4, 0x6a, 0x21, 0xad, 0x8d, 0x62, 0x49, 0x1f, 0xf3, 0x4b, 0x42, 0xff, 0x09, 0x1f, 0xbb, 0xd2, 0xd2, 0xd9, 0x34, 0x33, 0x12, 0x95, 0xfe, 0x6d, 0x8c, 0xa5, 0x0e, 0x91, 0x0c, 0x94, 0x62, 0x94, 0x2f, 0x2d, 0xef, 0x9e, 0x33, 0x0d, 0x99, 0xe8, 0xe4, 0x98, 0x74, 0x05, 0x5f, 0x2f, 0x70, 0x46, 0x71, 0x89, 0x64, 0xb4, 0x46, 0x83, 0xa5, 0xe0, 0xe0, 0x40, 0xd6, 0x69, 0x22, 0x0a, 0xc2, 0x7b, 0xc2, 0x90, 0xab, 0x9e, 0x7c, 0xe1, 0xff, 0x97, 0xf1, 0xfa, 0x80, 0xa1, 0xd2, 0xe8, 0x45, 0x46, 0x2c, 0x51, 0xce, 0x33, 0x1b, 0xae, 0x70, 0xa4, 0xa8, 0x69, 0x94, 0x8b, 0xd5, 0x89, 0x4c, 0x1f, 0xa3, 0x42, 0xc9, 0x85, 0xe5, 0x1a, 0xde, 0x06, 0xad, 0x89, 0xce, 0xdb, 0x8c, 0xa8, 0xea, 0xb3, 0x68, 0xed, 0x08, 0xa9, 0x84, 0x08, 0xdd, 0x26, 0x44, 0x16, 0x52, 0x83, 0x94, 0xa7, 0xff, 0x0d, 0xe4, 0x60, 0xb7, 0x9a, 0x11, 0x8f, 0x58, 0x3c, 0x8d, 0x43, 0x71, 0x9a, 0x4b, 0xbf, 0x1f, 0x53, 0xd0, 0xd1, 0xb7, 0x3c, 0xd3, 0x6f, 0x30, 0x62, 0x94, 0x56, 0x5e, 0x4f, 0x22, 0x4e, 0x91, 0xca, 0x72, 0x85, 0x86, 0x78, 0x49, 0x6d, 0xa0, 0xe9, 0xd7, 0x88, 0x56, 0x1a, 0x5f, 0x6a, 0x01, 0xa3, 0xb4, 0xbe, 0x60, 0x2a, 0x33, 0xa8, 0x64, 0xc2, 0x77, 0xf5, 0x71, 0xec, 0x5b, 0xea, 0x11, 0x7f, 0x86, 0xa9, 0x0a, 0x8b, 0x8c, 0x92, 0xc7, 0x6f, 0x40, 0x47, 0xe4, 0x6d, 0x32, 0x9c, 0x24, 0xf8, 0xb1, 0xb2, 0xfd, 0x08, 0xbf, 0xc9, 0x44, 0xf4, 0xd7, 0x0b, 0x3b, 0x54, 0x0c, 0x18, 0xf4, 0x07, 0xc0, 0xcc, 0xb1, 0x29, 0xe4, 0x8d, 0x82, 0x21, 0xd7, 0x22, 0x38, 0xcc, 0x68, 0x2e, 0x1f, 0xb1, 0xa4, 0xd1, 0x97, 0xc8, 0xfd, 0x12, 0x0f, 0x42, 0xf1, 0x3f, 0xfb, 0x31, 0x37, 0xcf, 0x34, 0x0c, 0x3a, 0x3a, 0x09, 0x69, 0x36, 0x20, 0xfc, 0xc4, 0x80, 0x20, 0x5d, 0x25, 0x72, 0x62, 0x53, 0xee, 0x30, 0x36, 0xdd, 0x70, 0x1c, 0x0a, 0x4d, 0xd7, 0xe6, 0xc7, 0xb4, 0x42, 0xaf, 0x43, 0x5e, 0x6b, 0xe6, 0xfc, 0x26, 0x4b, 0x82, 0x8e, 0x8e, 0x00, 0xdd, 0x41, 0xff, 0x2a, 0x83, 0xa9, 0xa1, 0xa3, 0x57, 0xbf, 0x01, 0x64, 0x42, 0xd8, 0x1c, 0x49, 0xff, 0x27, 0x2a, 0x1c, 0x3b, 0xe4, 0x37, 0xf0, 0x17, 0x0b, 0xe0, 0x88, 0x05, 0xd3, 0xfb, 0x78, 0x3f, 0x81, 0x83, 0xe4, 0xbc, 0xe5, 0x27, 0x6a, 0x51, 0xfa, 0x71, 0xa8, 0xa4, 0xa2, 0xd2, 0x40, 0xe2, 0x43, 0x6e, 0xae, 0x36, 0x0d, 0xe4, 0x21, 0x4c, 0x72, 0xc1, 0xf2, 0x16, 0x68, 0x30, 0x3e, 0xf7, 0x12, 0x68, 0x31, 0x15, 0x4d, 0x4f, 0x90, 0x7b, 0x12, 0x8b, 0xfc, 0x00, 0xd9, 0xca, 0x3f, 0x20, 0x4f, 0xa6, 0x0e, 0xca, 0xc5, 0xbc, 0x02, 0x59, 0x7a, 0x15, 0x59, 0xff, 0x2a, 0x7a, 0x2e, 0xd7, 0xa0, 0x56, 0x87, 0x83, 0xff, 0x4f, 0xe9, 0x52, 0x3f, 0x60, 0xa8, 0xd4, 0x52, 0x49, 0x76, 0x02, 0x64, 0x42, 0x27, 0xb3, 0xc1, 0xcc, 0x93, 0x7e, 0x0d, 0x26, 0x13, 0xe2, 0x91, 0xb6, 0xf2, 0xa8, 0xc5, 0xb4, 0x87, 0x6e, 0xfa, 0xc4, 0x50, 0x42, 0xbd, 0x9a, 0xd5, 0xbd, 0x63, 0xfa, 0x3c, 0xf3, 0x88, 0x9d, 0x4d, 0xc5, 0xe4, 0xe5, 0x65, 0xb7, 0x09, 0x1f, 0xe8, 0xe8, 0x1d, 0xce, 0x87, 0xa6, 0xf3, 0x08, 0xc0, 0xdb, 0x19, 0x00, 0xe8, 0x04, 0x8f, 0x05, 0x0c, 0x7f, 0x62, 0x08, 0xfe, 0x81, 0xe7, 0x3a, 0x9c, 0xbc, 0x54, 0x9c, 0x1b, 0x32, 0xfd, 0xff, 0x15, 0xc4, 0x73, 0xaa, 0xa7, 0x04, 0x29, 0x88, 0x9e, 0xb6, 0xe4, 0xa9, 0x54, 0x41, 0xe1, 0x4c, 0x03, 0x22, 0xc0, 0x24, 0x68, 0x8e, 0x8a, 0xa2, 0x19, 0x28, 0x17, 0xa9, 0x3a, 0x85, 0x84, 0xc3, 0x34, 0x9b, 0x9d, 0xc3, 0xa8, 0x93, 0xe3, 0xf1, 0x90, 0x82, 0xe3, 0x27, 0x2a, 0xed, 0xe7, 0x12, 0x1c, 0xc8, 0xf9, 0x0d, 0x29, 0xd4, 0x62, 0xbf, 0xea, 0xff, 0x8c, 0xd7, 0x27, 0x34, 0x54, 0x08, 0x1c, 0xd3, 0x01, 0x00, 0xee, 0x49, 0x1e, 0x8f, 0x98, 0xe4, 0xb7, 0x98, 0xf2, 0x8c, 0xe5, 0x53, 0x4b, 0xde, 0x0f, 0xc4, 0xd7, 0x8f, 0x23, 0xd1, 0xe7, 0xa9, 0xd9, 0xb9, 0xef, 0xc4, 0xe8, 0xc4, 0xec, 0xff, 0x2a, 0x86, 0xa5, 0x9c, 0x97, 0x6b, 0x1a, 0x02, 0x9d, 0x01, 0xd3, 0x9a, 0xa4, 0x93, 0x7c, 0x5e, 0xd3, 0x8c, 0xbc, 0xee, 0x08, 0x96, 0x75, 0x86, 0xcb, 0x4a, 0x91, 0x05, 0xb6, 0x36, 0x1b, 0x81, 0x07, 0xe9, 0x24, 0x91, 0xc9, 0x80, 0x43, 0x1f, 0x4c, 0xc7, 0xc1, 0xc0, 0x30, 0xe2, 0xd0, 0x1a, 0x12, 0xcd, 0xa0, 0xd3, 0x4f, 0x74, 0xdf, 0x2b, 0x86, 0xa3, 0x39, 0xcf, 0x70, 0x08, 0xeb, 0x60, 0xee, 0xff, 0x36, 0x55, 0x86, 0xb3, 0xb8, 0x8c, 0x55, 0x98, 0xfe, 0x82, 0xc4, 0x93, 0xfb, 0x31, 0xf6, 0x93, 0x5a, 0xcf, 0x87, 0x63, 0x9a, 0xf0, 0x06, 0x51, 0xd5, 0x27, 0x18, 0xfb, 0x07, 0x6a, 0x32, 0x9f, 0xd1, 0x94, 0xb1, 0x84, 0x13, 0x86, 0xbf, 0xa8, 0xb5, 0x18, 0x52, 0x8c, 0x82, 0xc6, 0x06, 0xf5, 0xcb, 0x48, 0xee, 0x97, 0x53, 0xdd, 0x95, 0x9b, 0x3d, 0x46, 0xc5, 0x1f, 0x26, 0xd5, 0xb1, 0x1c, 0x62, 0xba, 0xcc, 0xd5, 0xd1, 0xa9, 0xde, 0x3c, 0x93, 0xe9, 0x18, 0xb2, 0x3a, 0x94, 0x7b, 0x68, 0xe0, 0x12, 0x5b, 0x3d, 0x6d, 0xa0, 0x93, 0xcc, 0x38, 0x01, 0x9a, 0x08, 0x09, 0x38, 0x83, 0x9a, 0x58, 0x7c, 0xc1, 0xb9, 0x14, 0x0c, 0xa7, 0xae, 0x05, 0xe6, 0x61, 0x90, 0x11, 0xb3, 0x82, 0xa9, 0x82, 0xe1, 0x0f, 0xc8, 0x18, 0xe9, 0x60, 0xac, 0x94, 0x67, 0xfe, 0x23, 0x6a, 0x2f, 0x59, 0x03, 0x06, 0x79, 0xe8, 0x9f, 0x54, 0xd6, 0xfd, 0x11, 0xf3, 0x5d, 0xd9, 0x90, 0x97, 0x77, 0x98, 0xa5, 0x03, 0x3a, 0x5f, 0xc9, 0x07, 0xe3, 0x90, 0xfd, 0x88, 0x13, 0xb3, 0x02, 0x38, 0x4b, 0xde, 0x45, 0x3a, 0xfc, 0x9b, 0x6b, 0x96, 0xb1, 0x47, 0x2e, 0x23, 0xb2, 0x4c, 0xd8, 0x03, 0x7a, 0x44, 0x89, 0xe9, 0x14, 0x96, 0x78, 0x3a, 0x0d, 0xc2, 0x6f, 0x19, 0x04, 0x14, 0xc4, 0x4c, 0xb9, 0xfa, 0x63, 0x60, 0xd4, 0xe7, 0xf1, 0x19, 0x65, 0x92, 0x0a, 0x94, 0xab, 0xa4, 0xbf, 0x2c, 0x36, 0x44, 0xd2, 0x14, 0x4a, 0x92, 0x8c, 0x4c, 0x9a, 0x19, 0x90, 0x3b, 0x7f, 0x28, 0xa6, 0x88, 0x44, 0xfa, 0x92, 0x99, 0xe1, 0x8b, 0x53, 0xc9, 0x4c, 0x93, 0xd8, 0x7d, 0x24, 0x97, 0x0d, 0xa7, 0x0f, 0x7c, 0x27, 0x2c, 0x85, 0xd7, 0xaa, 0x04, 0xc7, 0xce, 0x68, 0x9e, 0x81, 0x85, 0x4c, 0x9c, 0xb8, 0x47, 0x40, 0x31, 0x88, 0xf1, 0x64, 0xe1, 0xc1, 0x24, 0x04, 0xb1, 0xdc, 0x74, 0x72, 0x9a, 0x69, 0x7e, 0x8b, 0x4d, 0x34, 0x1a, 0x58, 0x3c, 0x45, 0x82, 0xa5, 0x8e, 0x1f, 0xdb, 0x4a, 0xe2, 0x26, 0x48, 0xa6, 0xd4, 0x4c, 0x8b, 0xe5, 0x37, 0xf0, 0x15, 0x43, 0x2e, 0x71, 0x11, 0x51, 0x94, 0x10, 0x88, 0xcc, 0x16, 0x3e, 0x08, 0x4b, 0x97, 0x2a, 0x46, 0xe9, 0x49, 0x8c, 0xc1, 0x21, 0xf9, 0x31, 0xe4, 0xd1, 0x2c, 0x96, 0x2b, 0xc8, 0x1f, 0x43, 0xf6, 0x80, 0x4c, 0x14, 0x61, 0x29, 0xc8, 0x13, 0x72, 0x5b, 0x5e, 0x06, 0x3b, 0xf8, 0x73, 0x91, 0x4f, 0x15, 0x13, 0xe3, 0x37, 0xe4, 0xb1, 0x54, 0x26, 0xe3, 0xf4, 0x4b, 0xb5, 0xab, 0xf2, 0x66, 0xde, 0x27, 0xe9, 0x59, 0x80, 0xc5, 0x38, 0x93, 0x5e, 0x00, 0x6f, 0x11, 0x0a, 0x4c, 0xde, 0x78, 0xe0, 0x89, 0x8f, 0xbe, 0xcd, 0x5c, 0x75, 0x54, 0x90, 0x10, 0x4e, 0xc7, 0xa6, 0x13, 0x60, 0xd7, 0xa3, 0x6c, 0x92, 0x6b, 0x16, 0xf2, 0x56, 0xb6, 0x0c, 0x38, 0x46, 0x2c, 0xc4, 0x96, 0x48, 0x82, 0x92, 0x54, 0x92, 0x47, 0x84, 0x32, 0xab, 0xbc, 0x62, 0x40, 0x9a, 0x4b, 0xcf, 0x7d, 0xf8, 0x97, 0x30, 0xdc, 0x78, 0xcd, 0x99, 0x11, 0xff, 0x5f, 0xa4, 0x05, 0xec, 0x44, 0xae, 0xcc, 0xd2, 0xea, 0x0d, 0x42, 0xa2, 0x66, 0xbc, 0x33, 0xb6, 0x44, 0x5d, 0x23, 0xb9, 0xc8, 0x0e, 0x18, 0x69, 0x58, 0x83, 0x2c, 0x1b, 0x3e, 0xc1, 0x71, 0x67, 0xe6, 0xc3, 0xbb, 0x1a, 0x01, 0xc7, 0x04, 0xb3, 0x80, 0x4e, 0x40, 0x88, 0x42, 0xd0, 0x1b, 0xd8, 0x6a, 0x22, 0x08, 0x24, 0x8d, 0x4b, 0x57, 0xf5, 0xd7, 0xdb, 0xa8, 0x65, 0x16, 0x19, 0x4c, 0xd8, 0xc9, 0xd7, 0x62, 0xe0, 0x09, 0xd4, 0x6e, 0x8a, 0xc4, 0xa9, 0x23, 0x16, 0xeb, 0xe8, 0x3f, 0x49, 0x93, 0xe2, 0x5b, 0x84, 0x84, 0x21, 0x8f, 0x0f, 0xe5, 0x91, 0xf4, 0xa8, 0x37, 0xc8, 0x06, 0xe9, 0x12, 0xea, 0x0c, 0xa6, 0x5c, 0x94, 0xe4, 0x30, 0x07, 0x6f, 0xa4, 0x23, 0x6d, 0x9a, 0x55, 0x56, 0xcd, 0xec, 0xd8, 0x32, 0xa2, 0xce, 0xd7, 0xf8, 0x76, 0x85, 0x05, 0x75, 0x73, 0x6a, 0xb6, 0xa6, 0xcb, 0x74, 0x11, 0xe5, 0x13, 0x2a, 0x1c, 0xb3, 0x62, 0xf5, 0x09, 0xd3, 0x75, 0x06, 0x96, 0x39, 0x4d, 0x2c, 0xc4, 0x4a, 0xb4, 0x25, 0x82, 0xd2, 0xa3, 0x81, 0xf6, 0xa2, 0x29, 0x22, 0x61, 0xe2, 0xef, 0xa8, 0x3e, 0x86, 0x42, 0xbd, 0x49, 0x88, 0x98, 0x72, 0x4a, 0xce, 0x15, 0x12, 0x6d, 0x82, 0x8e, 0xec, 0xe8, 0x0f, 0xaa, 0xbd, 0x4e, 0xec, 0xe7, 0x5a, 0x24, 0xfb, 0x36, 0xfc, 0x11, 0x9f, 0x8f, 0xa8, 0xc3, 0x3e, 0x41, 0x27, 0xe7, 0xde, 0x51, 0xe5, 0xad, 0xd4, 0xd0, 0xa2, 0x0d, 0x20, 0xf5, 0x08, 0x3c, 0x0b, 0x6a, 0x7f, 0xce, 0x1a, 0x7e, 0x17, 0xc1, 0x98, 0x16, 0xe2, 0x86, 0x39, 0xfd, 0xbe, 0x34, 0x1b, 0x30, 0x8c, 0x67, 0x03, 0x82, 0xc6, 0xe8, 0xd3, 0x0d, 0xec, 0x66, 0x1c, 0x43, 0xa3, 0x16, 0x75, 0xbc, 0x59, 0xc4, 0x7f, 0xe6, 0xd5, 0x7f, 0x64, 0x89, 0x16, 0x45, 0xd0, 0x09, 0xa9, 0xb3, 0xca, 0xa9, 0x91, 0x9d, 0x50, 0x65, 0xc0, 0x0f, 0x54, 0x79, 0xf6, 0x0c, 0xd0, 0xf2, 0x8d, 0x29, 0x2d, 0x47, 0xb2, 0x48, 0x4a, 0xcf, 0xe7, 0xd3, 0xc2, 0x62, 0xbe, 0x0a, 0x5a, 0xf6, 0x4f, 0x4a, 0x70, 0x3d, 0x03, 0x13, 0xf4, 0x59, 0x11, 0x74, 0xed, 0x07, 0x64, 0xf5, 0x26, 0x54, 0x4e, 0x0c, 0xb9, 0x57, 0xb3, 0xb0, 0xb7, 0x69, 0x72, 0xc9, 0x1d, 0x26, 0xa6, 0x68, 0x41, 0xe1, 0x1b, 0xb1, 0x49, 0xb2, 0x21, 0x4d, 0x72, 0x97, 0x90, 0xeb, 0x9b, 0xd4, 0x59, 0x62, 0x6c, 0x0e, 0x94, 0x0f, 0x11, 0x19, 0xd8, 0x49, 0x1a, 0x9c, 0xbf, 0x58, 0x96, 0xfc, 0xd7, 0xf4, 0xbc, 0x95, 0x49, 0x39, 0x6c, 0x61, 0x9e, 0x6f, 0x41, 0x42, 0x24, 0xa6, 0xff, 0x16, 0x89, 0xf7, 0x17, 0x41, 0x83, 0x8f, 0x04, 0x2c, 0x11, 0xa5, 0xfe, 0x2d, 0xb8, 0x92, 0xb5, 0x70, 0x45, 0xaa, 0xc7, 0x59, 0xbc, 0x7e, 0xf5, 0x29, 0x0b, 0x5b, 0xd9, 0x0b, 0x66, 0x1f, 0xe3, 0x75, 0x60, 0xdc, 0x02, 0xd9, 0x95, 0xac, 0x05, 0xb0, 0x8f, 0xd4, 0x59, 0x3a, 0x03, 0xce, 0x27, 0x16, 0x94, 0x30, 0x51, 0xe9, 0x30, 0x59, 0x10, 0xfa, 0x21, 0x04, 0x3d, 0x8f, 0x26, 0x0f, 0x12, 0x20, 0xde, 0xca, 0x2c, 0x5f, 0xa1, 0x9c, 0x6f, 0x3a, 0x2b, 0x64, 0x30, 0x35, 0xa3, 0x15, 0x29, 0x9d, 0x06, 0x3f, 0xf5, 0x68, 0x2a, 0x37, 0x8a, 0x04, 0xa6, 0xcb, 0x22, 0xa3, 0x7e, 0x13, 0x2b, 0x0b, 0x97, 0xa8, 0x71, 0x1f, 0xa4, 0x85, 0x9f, 0x4c, 0xad, 0x09, 0xcb, 0x04, 0x9e, 0xa4, 0xd5, 0xcc, 0x7a, 0x7c, 0xfc, 0x35, 0xf6, 0x94, 0x09, 0x31, 0x8b, 0x55, 0x1b, 0xde, 0x04, 0xb1, 0xb3, 0x76, 0x01, 0xc5, 0x36, 0x94, 0xe5, 0xc7, 0xe6, 0x24, 0xcd, 0xd2, 0x88, 0x83, 0x08, 0x73, 0x1a, 0x2c, 0xfa, 0x84, 0x65, 0x1f, 0x43, 0x4b, 0xc9, 0xf7, 0x63, 0x3c, 0xc9, 0x8e, 0x04, 0xac, 0x96, 0x16, 0xbd, 0x18, 0xf1, 0xc3, 0x16, 0x63, 0x5e, 0x06, 0xc8, 0x7d, 0x8c, 0x63, 0x83, 0xba, 0xd9, 0x85, 0xd8, 0xc3, 0xbc, 0x6f, 0x66, 0xe5, 0x38, 0x49, 0xf4, 0x86, 0x1a, 0xbf, 0x25, 0x45, 0xac, 0x79, 0x94, 0xf2, 0x07, 0xc8, 0xae, 0x72, 0x2f, 0xb3, 0x70, 0xc1, 0x49, 0x89, 0xc7, 0x63, 0xe1, 0x38, 0x04, 0xf2, 0x2e, 0xf0, 0x7a, 0x4c, 0x3f, 0x0a, 0x1d, 0x3c, 0xc1, 0x9b, 0xf4, 0x7f, 0x20, 0x68, 0x71, 0xf6, 0x7e, 0x9b, 0x44, 0x9a, 0x0f, 0x2d, 0xff, 0xdf, 0x59, 0x5b, 0xfd, 0x13, 0x7b, 0x1e, 0xfc, 0xd9, 0x59, 0x48, 0xbc, 0x76, 0x5a, 0x3b, 0x35, 0xaf, 0x1f, 0x12, 0xdb, 0x77, 0x8b, 0x6f, 0xb7, 0x5f, 0xdb, 0x24, 0xbe, 0x45, 0xee, 0x5a, 0xbe, 0xaa, 0xb5, 0xb3, 0xbc, 0xa5, 0x75, 0xcd, 0xf2, 0xa5, 0xad, 0xd0, 0xda, 0x1d, 0x5b, 0xdc, 0x4e, 0x1e, 0xe6, 0xd2, 0x2e, 0xf1, 0xe8, 0x03, 0xee, 0x36, 0x36, 0x3b, 0x94, 0xf9, 0xba, 0x9b, 0xc2, 0x5a, 0x5a, 0xdb, 0x16, 0x7f, 0xef, 0xeb, 0xfc, 0xb8, 0xaa, 0xb5, 0xfd, 0x1e, 0x68, 0xef, 0x58, 0xd5, 0xd1, 0xbe, 0xbc, 0xab, 0xa3, 0x73, 0x35, 0x3e, 0x2e, 0xed, 0x58, 0x15, 0xeb, 0x58, 0xbd, 0xbc, 0x0b, 0x0b, 0x52, 0x13, 0x53, 0xe9, 0x5f, 0x87, 0xfa, 0xe5, 0x6d, 0xad, 0xf3, 0xbe, 0xb7, 0xba, 0xab, 0x75, 0x55, 0xa6, 0xb0, 0x96, 0x8e, 0xd5, 0xe9, 0xca, 0x62, 0x8b, 0x3b, 0xbb, 0x38, 0x57, 0x3a, 0x64, 0xe9, 0xe2, 0xce, 0x96, 0x96, 0xe5, 0xab, 0x57, 0xa6, 0x00, 0xfc, 0xb6, 0xb8, 0x2b, 0x1d, 0xb1, 0xd6, 0x76, 0xe1, 0x1e, 0xe9, 0x3b, 0xf0, 0xed, 0xf6, 0x0e, 0x65, 0x55, 0x6b, 0xcb, 0xf2, 0xc5, 0xdf, 0x81, 0xa5, 0xcb, 0x17, 0x2f, 0xce, 0x14, 0xbd, 0xb2, 0xf5, 0x7b, 0x4b, 0x3a, 0xb0, 0x80, 0x54, 0x66, 0x2f, 0x39, 0x13, 0xfc, 0x46, 0x8c, 0x2a, 0x58, 0x5d, 0x5e, 0x5e, 0x0e, 0xfe, 0xe5, 0xab, 0x63, 0xd8, 0x8a, 0xec, 0xa0, 0xba, 0x14, 0x02, 0x14, 0x2f, 0xe5, 0x54, 0xfc, 0xcb, 0x17, 0x47, 0xdb, 0x3b, 0x56, 0x77, 0x2d, 0x5f, 0x4a, 0xb1, 0x54, 0x80, 0x28, 0xe5, 0x9b, 0xcb, 0xbb, 0x96, 0x29, 0xa1, 0x0e, 0x65, 0x1e, 0x39, 0x52, 0xbc, 0x27, 0x36, 0x7d, 0x1e, 0x39, 0x5c, 0x6c, 0xc7, 0x3a, 0xee, 0x5c, 0xdd, 0x0a, 0xbe, 0xc5, 0xf8, 0xd4, 0x36, 0xbe, 0xf8, 0xcf, 0x28, 0x7b, 0x0c, 0x64, 0x40, 0x16, 0x37, 0x95, 0xba, 0xc5, 0x9d, 0x6d, 0xdf, 0x4b, 0x15, 0xaf, 0xf8, 0x3a, 0xda, 0xbb, 0x3a, 0x3b, 0xda, 0x60, 0xca, 0xd2, 0x29, 0xb7, 0xba, 0x56, 0xab, 0x1e, 0xff, 0x56, 0x4f, 0x9f, 0xd2, 0xd6, 0x02, 0x53, 0x56, 0x2b, 0xdf, 0x9e, 0xe2, 0xaa, 0x6e, 0xeb, 0xfe, 0x8e, 0x82, 0xaf, 0x2b, 0x61, 0x4a, 0x45, 0x4b, 0x8d, 0xc2, 0x01, 0xe4, 0xd0, 0x91, 0xef, 0x0e, 0xbe, 0x4d, 0x55, 0xa6, 0xdc, 0xd6, 0xc2, 0x2e, 0x02, 0xf9, 0x15, 0x94, 0xbb, 0x66, 0xe0, 0x55, 0x01, 0x8a, 0xa2, 0x80, 0xd2, 0xf4, 0x8d, 0xb9, 0xf8, 0xe3, 0x99, 0x0b, 0x8e, 0x18, 0x79, 0x97, 0x52, 0x16, 0x2b, 0x88, 0x3c, 0x72, 0x6a, 0xd8, 0xd5, 0x11, 0x8d, 0xb6, 0xb5, 0x2a, 0x5d, 0xcb, 0x5a, 0x95, 0x16, 0xb5, 0x3d, 0x4b, 0x5a, 0xbb, 0xfe, 0xb6, 0x15, 0xd1, 0xdf, 0xe8, 0x69, 0x50, 0x16, 0xb7, 0xb7, 0x28, 0xa1, 0xf9, 0xf3, 0x7c, 0x53, 0xe1, 0xdb, 0xd4, 0x86, 0xb9, 0x48, 0x0a, 0xdf, 0x51, 0x56, 0xad, 0x8e, 0x36, 0x74, 0x74, 0xc4, 0x6a, 0x10, 0x4b, 0xed, 0x2d, 0x1d, 0x7f, 0xab, 0xb4, 0x2d, 0x5e, 0xba, 0x92, 0x8a, 0xbc, 0x67, 0x75, 0x6b, 0x67, 0xac, 0xa3, 0xb3, 0x6b, 0x72, 0x0e, 0x44, 0x3a, 0x97, 0xdc, 0xd3, 0xd5, 0xd5, 0xd1, 0xbe, 0xb4, 0x6d, 0xf1, 0xea, 0xd5, 0x80, 0x88, 0x24, 0x32, 0x59, 0xbc, 0x04, 0x6b, 0xe2, 0x9e, 0x14, 0x66, 0xa8, 0x08, 0xe5, 0x57, 0x99, 0x16, 0xf0, 0x7f, 0x63, 0x1e, 0x63, 0x6b, 0x69, 0x5b, 0xeb, 0xe2, 0xf6, 0x7b, 0x62, 0x59, 0x36, 0xa9, 0x7e, 0xb1, 0x2f, 0xdb, 0x91, 0xa6, 0x7a, 0x77, 0x90, 0xcf, 0xf8, 0xac, 0x77, 0xba, 0x4f, 0x66, 0x7b, 0x55, 0x8b, 0x3e, 0xc5, 0x5e, 0xd5, 0x9b, 0x59, 0xf6, 0xaa, 0x0e, 0x08, 0x7b, 0x55, 0x2b, 0x1a, 0x53, 0xf6, 0xaa, 0x56, 0xbc, 0xf4, 0xc5, 0xed, 0x55, 0xad, 0x78, 0xe8, 0xd3, 0xed, 0x55, 0xad, 0x78, 0x62, 0xbc, 0xbd, 0xaa, 0xed, 0x43, 0x9f, 0x65, 0xaf, 0x6a, 0xc5, 0x0b, 0xe3, 0xed, 0x55, 0xad, 0xf8, 0xe9, 0xd5, 0xf6, 0xaa, 0x56, 0x6c, 0xbd, 0xca, 0x5e, 0xd5, 0xa2, 0xb1, 0xf6, 0xaa, 0x32, 0xf6, 0xa9, 0xfe, 0x66, 0x40, 0xf5, 0xa2, 0xa7, 0x14, 0x94, 0x82, 0xcd, 0x2a, 0xcb, 0x90, 0xfc, 0x97, 0x1b, 0xdc, 0x60, 0x2b, 0x61, 0x6b, 0x36, 0xb6, 0x0e, 0x28, 0x26, 0x5f, 0x0e, 0x4e, 0x4b, 0x99, 0x2f, 0xb4, 0xa9, 0xec, 0x6e, 0x27, 0xf9, 0x54, 0x08, 0x60, 0x2b, 0x9e, 0x03, 0x6b, 0xd4, 0x8c, 0x89, 0xdd, 0xf7, 0x61, 0xae, 0x18, 0x84, 0xb5, 0xe4, 0x65, 0x81, 0x7c, 0xe2, 0x35, 0xb2, 0xa5, 0xe8, 0xda, 0x8a, 0x12, 0x2c, 0x51, 0x59, 0x09, 0x56, 0xb6, 0x48, 0xdb, 0x12, 0xdc, 0x06, 0x8e, 0xe8, 0x22, 0x65, 0x19, 0x14, 0x1f, 0xdc, 0x77, 0x70, 0x1f, 0x87, 0x35, 0x92, 0x25, 0xde, 0xf4, 0x9b, 0x37, 0x96, 0xbf, 0x63, 0x53, 0x8b, 0x1e, 0xd3, 0x35, 0x44, 0xaa, 0xec, 0xd3, 0x20, 0x27, 0xea, 0xb2, 0x79, 0x95, 0xe5, 0xec, 0xe9, 0x0d, 0xa2, 0x76, 0xa3, 0x15, 0xb4, 0xd1, 0x49, 0xdd, 0x50, 0xed, 0x00, 0xfd, 0xd1, 0x7e, 0x01, 0x5b, 0x69, 0xae, 0xe2, 0xb7, 0x79, 0xed, 0x75, 0x65, 0x3e, 0xa7, 0x29, 0xb4, 0x89, 0xec, 0x31, 0x91, 0x0d, 0xe0, 0xd0, 0x9d, 0xc9, 0xe7, 0xd9, 0x17, 0x12, 0x5b, 0x53, 0x07, 0x1b, 0x62, 0x65, 0x55, 0xf2, 0x4d, 0xc2, 0xc3, 0x77, 0x1e, 0xfd, 0x72, 0x0f, 0x68, 0x93, 0xef, 0xf0, 0xef, 0xb9, 0x87, 0x5f, 0x4b, 0x5b, 0x36, 0x3a, 0x36, 0xcd, 0x9d, 0x3c, 0xef, 0x39, 0x97, 0xfc, 0x68, 0x5a, 0x20, 0x39, 0xec, 0xfd, 0x45, 0xf2, 0x12, 0x3e, 0x5f, 0xc2, 0xe7, 0x8f, 0x30, 0xa5, 0x21, 0xf9, 0x12, 0xbe, 0xbd, 0x89, 0x6f, 0x7b, 0xbf, 0xd6, 0x03, 0xb6, 0xe4, 0xbe, 0xba, 0x73, 0xc9, 0x17, 0x3c, 0x48, 0x01, 0xdb, 0xcc, 0x31, 0xc9, 0x16, 0xcc, 0xd8, 0x32, 0x4f, 0xf8, 0x55, 0xab, 0x3c, 0xcb, 0x30, 0x9d, 0x29, 0x79, 0x08, 0xeb, 0xae, 0x10, 0xd6, 0x75, 0x96, 0x56, 0x36, 0x0e, 0x60, 0x0d, 0x47, 0xb2, 0x42, 0x06, 0x1b, 0x07, 0xec, 0x70, 0x38, 0x7e, 0xb8, 0xcf, 0x26, 0xbf, 0xff, 0xc0, 0xe6, 0xbe, 0x43, 0x71, 0x45, 0x62, 0x0b, 0xcc, 0xbd, 0xef, 0xf7, 0x63, 0xca, 0x63, 0x6c, 0x07, 0x25, 0x55, 0xee, 0x01, 0x5b, 0x30, 0xfd, 0x5c, 0x9d, 0xf5, 0x3c, 0xb3, 0xe1, 0x9c, 0x5f, 0x9b, 0xdc, 0x26, 0x2c, 0xab, 0xb2, 0xed, 0x1a, 0x57, 0xac, 0x62, 0x8a, 0x1b, 0x9a, 0x89, 0x3e, 0xb7, 0x7d, 0xc9, 0x9b, 0xe5, 0xb5, 0x9a, 0xed, 0xa2, 0x5a, 0xcb, 0x6b, 0x77, 0x68, 0xe2, 0x39, 0x19, 0x6f, 0x64, 0x30, 0x0d, 0xb0, 0x9f, 0xa7, 0xcc, 0x01, 0x1b, 0xe7, 0x98, 0x96, 0xb1, 0x8d, 0x57, 0x26, 0x46, 0xc0, 0x45, 0xa5, 0x36, 0x2e, 0xd2, 0x0e, 0xf3, 0xfb, 0x29, 0xc5, 0xed, 0x68, 0xf4, 0x7a, 0xcb, 0x6a, 0xc9, 0x06, 0xd1, 0x1c, 0xa4, 0xba, 0x45, 0x45, 0x64, 0x49, 0x3d, 0xec, 0x70, 0xd4, 0x42, 0xe2, 0xc5, 0x4d, 0x25, 0xf8, 0xfc, 0xad, 0x9f, 0xcc, 0x1d, 0x4e, 0xdc, 0x1b, 0x06, 0xd8, 0x51, 0xd2, 0x06, 0xe4, 0x9b, 0x9d, 0x6d, 0xb0, 0x6e, 0xbb, 0xc3, 0x99, 0xab, 0xd4, 0xab, 0xfe, 0xa0, 0xe2, 0x11, 0x7b, 0x80, 0xec, 0x8e, 0xf8, 0xa8, 0xcf, 0xb8, 0xdc, 0x3e, 0xb2, 0x40, 0x7d, 0x28, 0xfe, 0xee, 0x03, 0x8a, 0xe7, 0xe0, 0x60, 0x20, 0xd6, 0x0f, 0xa1, 0xad, 0xe1, 0x08, 0xe7, 0x0b, 0x3a, 0x73, 0x43, 0x8f, 0xb0, 0x6d, 0xf1, 0xbb, 0xf8, 0x7d, 0x5e, 0xea, 0x3d, 0xa2, 0xb7, 0xd6, 0x82, 0x1c, 0x66, 0x6b, 0x83, 0xdb, 0x16, 0xa5, 0x43, 0x73, 0x30, 0x54, 0xdb, 0xbb, 0x1d, 0x2c, 0xe1, 0x32, 0xf2, 0xee, 0xc9, 0xb1, 0x6d, 0x58, 0x77, 0x5d, 0xba, 0xee, 0x82, 0x59, 0xef, 0x43, 0x2e, 0xb6, 0x39, 0xdf, 0x99, 0xa3, 0xf8, 0x09, 0x02, 0xf2, 0xa7, 0xee, 0x98, 0x1f, 0xdc, 0x12, 0x81, 0x64, 0x28, 0x2c, 0x7b, 0xbd, 0xc2, 0x32, 0xed, 0x0b, 0x2d, 0x2e, 0xaf, 0xd3, 0x28, 0x9e, 0xff, 0x99, 0x6c, 0x59, 0x95, 0x64, 0x61, 0x7e, 0x22, 0x95, 0x45, 0x5e, 0x42, 0x9e, 0xdb, 0x44, 0xbe, 0xd3, 0x5f, 0xdd, 0x35, 0x7b, 0x78, 0x74, 0x23, 0x59, 0xd4, 0xdd, 0x77, 0x0a, 0x73, 0x6c, 0xc5, 0x56, 0x61, 0x7a, 0xf6, 0x16, 0xf9, 0x08, 0xf6, 0x47, 0x49, 0xf3, 0x40, 0x17, 0x38, 0x4b, 0xa1, 0x39, 0xb4, 0x45, 0x29, 0xa5, 0xb7, 0x28, 0x96, 0xcb, 0x7e, 0x03, 0x06, 0x0e, 0x6f, 0x87, 0x66, 0x33, 0x59, 0xbd, 0x7e, 0x64, 0xc9, 0xab, 0xe1, 0xe3, 0xc2, 0x0e, 0xe8, 0x1d, 0x33, 0x71, 0xe4, 0x54, 0xe2, 0xc8, 0xb1, 0xe1, 0xf8, 0x08, 0x76, 0x93, 0xf7, 0xa9, 0xf5, 0x4a, 0x23, 0x5b, 0xf2, 0xb9, 0xb4, 0x16, 0xc2, 0x20, 0x6f, 0xa5, 0x38, 0x3b, 0xc6, 0x05, 0x37, 0xab, 0x7e, 0x0a, 0x72, 0xf6, 0xc4, 0xed, 0x1e, 0x73, 0x29, 0x58, 0xc9, 0x16, 0x94, 0xdc, 0x60, 0x2e, 0x25, 0x0b, 0xfa, 0x51, 0x90, 0xbd, 0x08, 0x87, 0x15, 0xef, 0x35, 0x4e, 0xb2, 0xd1, 0x94, 0x78, 0xa6, 0xd9, 0x89, 0x39, 0xc1, 0xa5, 0xac, 0x00, 0x6b, 0xf3, 0x80, 0xf0, 0xc7, 0x2d, 0x9d, 0x1d, 0x33, 0x26, 0x41, 0x3a, 0x5e, 0x6e, 0xb5, 0x3b, 0x40, 0x3b, 0x66, 0x6c, 0x82, 0xf4, 0xaa, 0x62, 0xed, 0x4c, 0xd6, 0x4b, 0x7b, 0xc8, 0x02, 0xd0, 0xae, 0xfc, 0x5a, 0xc8, 0xdf, 0x19, 0x6f, 0x01, 0x69, 0x87, 0x13, 0x53, 0xe2, 0xd5, 0xc0, 0x34, 0x6d, 0x6d, 0x1c, 0x18, 0x8a, 0x93, 0x3f, 0x06, 0x4c, 0xbf, 0x15, 0xe1, 0xcc, 0xd0, 0x5f, 0xa4, 0x8c, 0xca, 0x58, 0xa8, 0xb8, 0x63, 0x69, 0x8b, 0xd4, 0xa3, 0x9d, 0xc2, 0xea, 0xab, 0x54, 0x45, 0x3e, 0xb5, 0x3c, 0x17, 0xfa, 0x25, 0xc5, 0x60, 0x6b, 0xc8, 0x1e, 0x4d, 0x6c, 0x6d, 0xc8, 0x38, 0xd5, 0x07, 0xf6, 0xa9, 0x38, 0x1b, 0x79, 0x9f, 0x81, 0xb2, 0xaf, 0x92, 0x75, 0xf5, 0x62, 0x5b, 0x43, 0x66, 0x34, 0x04, 0xcb, 0xe0, 0xa6, 0x08, 0xc0, 0x6e, 0xaf, 0xe7, 0x47, 0xfb, 0x90, 0x07, 0xd9, 0x6c, 0xf7, 0x38, 0xc0, 0xec, 0x41, 0x4e, 0xa1, 0xb7, 0x9b, 0x6c, 0x01, 0xb6, 0xc2, 0xe7, 0x3d, 0x38, 0xb8, 0xa3, 0x7f, 0xa9, 0xdc, 0x14, 0x1f, 0xea, 0x6b, 0xf6, 0x28, 0xb3, 0xbb, 0xa0, 0x52, 0x7a, 0xa1, 0x6f, 0xc9, 0x91, 0xfa, 0xf8, 0x3f, 0x0e, 0x62, 0xce, 0x3e, 0xa6, 0xfc, 0xee, 0x0c, 0xe5, 0x23, 0x4c, 0x6d, 0xb6, 0x1b, 0xd8, 0x7a, 0x52, 0x7e, 0x38, 0x67, 0xe7, 0x36, 0xf2, 0xea, 0x2a, 0x35, 0x2a, 0x6e, 0xc5, 0x1a, 0xf9, 0x28, 0xdc, 0x34, 0x06, 0x57, 0x45, 0x63, 0x70, 0x94, 0xd3, 0x39, 0x61, 0xe7, 0xa6, 0x16, 0xed, 0x64, 0xb2, 0xd6, 0x34, 0x57, 0xd1, 0xe0, 0x9c, 0x02, 0x46, 0x63, 0xba, 0xb5, 0xf7, 0x3a, 0xc9, 0x9a, 0xb4, 0x39, 0xb0, 0x4a, 0xd8, 0x44, 0x7e, 0x46, 0x2b, 0x6c, 0xb3, 0x11, 0x84, 0xd8, 0x2a, 0x13, 0x14, 0x63, 0xfb, 0xec, 0xd9, 0x2d, 0xcb, 0x7a, 0x9e, 0xc9, 0xed, 0x48, 0xbf, 0x8f, 0xb6, 0xf1, 0x7b, 0x7d, 0xfa, 0x3d, 0x4c, 0xef, 0x36, 0xac, 0x33, 0xc3, 0xe1, 0x83, 0x7d, 0xd1, 0xfc, 0x18, 0xfc, 0x68, 0x9f, 0x08, 0x49, 0xd9, 0x10, 0xe2, 0xb6, 0x3e, 0x98, 0x4e, 0xf5, 0xa4, 0x1d, 0x54, 0x9e, 0x60, 0xc8, 0xf0, 0x04, 0x9b, 0x37, 0xcb, 0x3b, 0xc3, 0x63, 0x63, 0xad, 0x86, 0x13, 0xdd, 0xf9, 0x4e, 0x43, 0xc8, 0xfe, 0xc0, 0x94, 0x65, 0xd0, 0x84, 0x73, 0x03, 0xfe, 0xda, 0x36, 0x4e, 0x0e, 0x42, 0x53, 0xd3, 0x7d, 0x2f, 0xde, 0xd7, 0x0e, 0xa3, 0xcb, 0x62, 0x5f, 0xa9, 0x4f, 0x7b, 0x0b, 0x50, 0x34, 0x9d, 0x72, 0x66, 0x4e, 0x2d, 0x65, 0x8b, 0x5b, 0xa3, 0xe7, 0xc3, 0x90, 0x5c, 0xab, 0xdc, 0x40, 0x14, 0xc8, 0x14, 0x0d, 0x89, 0x67, 0xc3, 0x90, 0x18, 0x22, 0x1b, 0x9d, 0x38, 0xd3, 0x98, 0xc9, 0x27, 0x51, 0x59, 0x07, 0x14, 0xd0, 0x9c, 0xaa, 0x5a, 0x03, 0xbf, 0x33, 0x71, 0x34, 0xf0, 0xee, 0xcc, 0x9a, 0x12, 0xe4, 0xe6, 0xc8, 0xd1, 0xcd, 0x25, 0xab, 0xc0, 0xea, 0x58, 0x05, 0x05, 0x65, 0xd3, 0xa1, 0x08, 0x47, 0x78, 0x98, 0xb8, 0x7b, 0xe2, 0x98, 0xe0, 0xee, 0xc8, 0xb9, 0x2f, 0x4e, 0xeb, 0x21, 0x1b, 0xb6, 0xc9, 0xd3, 0xc8, 0xb3, 0x2f, 0x22, 0xcf, 0x3e, 0x8b, 0x61, 0x17, 0x6c, 0x0d, 0xc8, 0xb3, 0x4f, 0xb3, 0xfd, 0xd7, 0x9d, 0x88, 0x57, 0x2f, 0x7b, 0x62, 0x74, 0x0b, 0xfc, 0x37, 0xf6, 0xdb, 0x70, 0x1e, 0x63, 0x4b, 0xb5, 0x36, 0xec, 0x61, 0x90, 0x37, 0x71, 0x09, 0x4a, 0x72, 0x3f, 0x96, 0x30, 0x82, 0x25, 0x0c, 0xf1, 0xbb, 0x26, 0x79, 0x18, 0xdf, 0x37, 0xe2, 0xfb, 0x51, 0x7e, 0x97, 0x93, 0xc7, 0x3d, 0xe7, 0x12, 0x67, 0xf0, 0xfd, 0x04, 0xd6, 0x70, 0xca, 0x29, 0xe3, 0x1c, 0xb3, 0xdf, 0xa9, 0x0f, 0xed, 0x4a, 0x56, 0xc5, 0x24, 0xe4, 0xe0, 0x97, 0x11, 0x57, 0xda, 0x83, 0xfb, 0x7c, 0x48, 0xd7, 0x98, 0xef, 0x19, 0xb6, 0x19, 0x0e, 0xd6, 0x2f, 0x99, 0x01, 0xca, 0xa3, 0x93, 0x82, 0x10, 0x9d, 0x98, 0x0f, 0x7a, 0x29, 0xf9, 0x7f, 0x99, 0x25, 0xf8, 0xd2, 0x12, 0x2d, 0xce, 0xb8, 0x6f, 0x59, 0x07, 0x9b, 0xd6, 0xaf, 0x9d, 0xb8, 0x6b, 0x7d, 0xe4, 0x58, 0xe9, 0xf5, 0x31, 0xd3, 0x8e, 0xfb, 0x5a, 0xa8, 0x75, 0x39, 0x4e, 0x5d, 0x6a, 0xfe, 0x40, 0x05, 0xd5, 0xf5, 0xe5, 0x78, 0xe0, 0x99, 0xa6, 0xf5, 0x59, 0xe1, 0x83, 0xd9, 0xe1, 0x5f, 0xde, 0x0d, 0x8d, 0x74, 0x57, 0xda, 0x60, 0xe2, 0x5a, 0xcd, 0xae, 0x4d, 0x11, 0x6d, 0xf3, 0x2f, 0x92, 0x23, 0x8e, 0x55, 0xc9, 0x11, 0xcf, 0x59, 0x30, 0xe1, 0xec, 0xda, 0xaf, 0x96, 0x69, 0xe6, 0xbc, 0x9b, 0xae, 0x2a, 0x53, 0x84, 0x5f, 0xc8, 0x84, 0x7b, 0x6f, 0x0b, 0xfc, 0x22, 0x7f, 0x7a, 0x72, 0x23, 0xcd, 0x76, 0x2b, 0xf6, 0xc4, 0xa0, 0x1b, 0x8a, 0x24, 0x5b, 0x63, 0x63, 0xff, 0x2f, 0xf7, 0x46, 0x2c, 0xef, 0xf6, 0x2b, 0xee, 0x83, 0x64, 0x0d, 0x0a, 0x39, 0x43, 0x38, 0xa7, 0x29, 0xbe, 0xf6, 0xc6, 0x5d, 0xf1, 0xc8, 0xc9, 0x18, 0x60, 0xdb, 0x4b, 0x63, 0xd7, 0x4f, 0x73, 0x27, 0xce, 0xac, 0x2d, 0x98, 0x56, 0x97, 0x2c, 0x44, 0x7e, 0x4c, 0xf8, 0x98, 0x88, 0xad, 0x3d, 0x8c, 0xad, 0xd5, 0x2c, 0xb1, 0x62, 0xdc, 0xf0, 0x44, 0xe4, 0xdd, 0x18, 0x4b, 0x57, 0x55, 0x6c, 0xc2, 0x8e, 0x5f, 0x24, 0xce, 0x20, 0x37, 0xb9, 0x2b, 0xf8, 0x8b, 0x64, 0x29, 0x8e, 0xb6, 0xa6, 0xb5, 0xd2, 0x2e, 0xec, 0xc9, 0xa8, 0x1d, 0x71, 0xc8, 0xe3, 0x0b, 0xcb, 0x30, 0xa3, 0x6c, 0x50, 0x30, 0x6d, 0x19, 0x54, 0x26, 0x27, 0x61, 0xde, 0xbc, 0x5d, 0x28, 0x29, 0xe0, 0x5b, 0x75, 0xd2, 0x16, 0x93, 0x7a, 0x7f, 0x91, 0x9c, 0x48, 0x38, 0x9e, 0x16, 0x48, 0x1c, 0x13, 0x58, 0x27, 0x6e, 0x82, 0x6f, 0x6f, 0x4e, 0x9b, 0x97, 0x38, 0x39, 0x6d, 0x25, 0x98, 0x13, 0xef, 0x28, 0xf5, 0x25, 0xcb, 0xc0, 0xa2, 0xf6, 0x1c, 0xd1, 0x46, 0x4d, 0x8a, 0x36, 0xba, 0x81, 0x3c, 0x59, 0x2c, 0xb5, 0x12, 0x85, 0xcc, 0x1d, 0x1e, 0xed, 0x0e, 0x97, 0x38, 0x65, 0xb6, 0xaf, 0xb6, 0xd5, 0x39, 0x3d, 0xb9, 0x08, 0xaf, 0xfa, 0xd0, 0x96, 0xe6, 0x81, 0xf2, 0x5f, 0x24, 0x43, 0xc8, 0xb1, 0xb7, 0x1c, 0x8d, 0x97, 0xac, 0x04, 0x0b, 0x5b, 0xd0, 0x7a, 0x1a, 0x2c, 0x91, 0xc3, 0xce, 0xe9, 0x89, 0x04, 0x5e, 0x97, 0x52, 0xfc, 0xcf, 0x0e, 0xe4, 0x61, 0x28, 0xd5, 0x37, 0x6c, 0x15, 0x6e, 0x3d, 0x96, 0xa7, 0x4d, 0xf5, 0xe2, 0xc1, 0x5f, 0x24, 0x2d, 0x78, 0xe5, 0x23, 0xed, 0x1c, 0x43, 0x79, 0xea, 0xd9, 0x64, 0x8c, 0x3d, 0xff, 0x2c, 0xc2, 0x96, 0x5f, 0x8e, 0xea, 0x95, 0xe9, 0xc9, 0x92, 0xb0, 0x1c, 0x8b, 0x77, 0x4a, 0x28, 0x9b, 0x50, 0xec, 0xf1, 0xb0, 0x7f, 0x9a, 0x87, 0x29, 0xf1, 0x99, 0x34, 0x25, 0xca, 0x44, 0x89, 0x4c, 0x79, 0x82, 0x12, 0x6f, 0x26, 0x4a, 0x4c, 0x5e, 0xbe, 0x9a, 0x12, 0x47, 0x98, 0xea, 0x70, 0x74, 0x3d, 0xd9, 0x70, 0x6e, 0x61, 0x4f, 0xe2, 0x79, 0x21, 0x27, 0xd4, 0xce, 0x2c, 0x71, 0x0a, 0xdb, 0xf6, 0xe4, 0x47, 0xc9, 0x4e, 0x9e, 0x52, 0x9c, 0x40, 0x52, 0x05, 0x8d, 0x8a, 0x23, 0x08, 0x71, 0x00, 0xc7, 0xe6, 0x44, 0xc4, 0x96, 0x76, 0xce, 0x70, 0xf2, 0xd0, 0xec, 0xe1, 0x91, 0x38, 0x62, 0x44, 0xe7, 0xcc, 0x55, 0x3d, 0x3a, 0x3e, 0xc2, 0x6d, 0x77, 0x47, 0xac, 0xe4, 0x0d, 0x47, 0x0d, 0x23, 0x9b, 0xa0, 0x05, 0x25, 0xf3, 0x82, 0x0f, 0x47, 0x8e, 0xa8, 0xe5, 0x0c, 0xa5, 0xfd, 0x8d, 0xd5, 0xb2, 0x47, 0xb0, 0x13, 0x34, 0xab, 0x95, 0x39, 0xa1, 0x91, 0x39, 0xd0, 0xa3, 0x31, 0x39, 0x23, 0x99, 0xd8, 0xc9, 0xdf, 0xde, 0xb0, 0xad, 0x9e, 0xac, 0xd5, 0xd1, 0x9c, 0x86, 0xfc, 0x25, 0x38, 0x79, 0x36, 0x34, 0x79, 0xb7, 0x41, 0x88, 0x78, 0x0d, 0x3e, 0x07, 0xcb, 0x53, 0xde, 0x5a, 0x76, 0x2b, 0xf5, 0xa5, 0xcb, 0x70, 0x5e, 0x44, 0xee, 0x81, 0x72, 0xa2, 0x82, 0xd8, 0x7d, 0xdc, 0x81, 0x1c, 0xf9, 0xf7, 0xfb, 0x7f, 0xbf, 0x5f, 0xd8, 0xae, 0x83, 0x07, 0x95, 0x32, 0xf6, 0x88, 0xb5, 0xde, 0x56, 0x40, 0x3e, 0x4f, 0x68, 0xfc, 0x31, 0x44, 0x27, 0x59, 0xa6, 0x6f, 0x43, 0xfa, 0xc8, 0x2f, 0xc3, 0xb6, 0xb1, 0x5c, 0xb0, 0x5d, 0x69, 0x87, 0x02, 0x9c, 0xbd, 0x72, 0x6c, 0xb3, 0x42, 0x3f, 0x62, 0x19, 0xc3, 0xf1, 0xf5, 0x1e, 0x28, 0x84, 0x62, 0xcf, 0x07, 0xd0, 0xe0, 0x39, 0x9d, 0x3c, 0x31, 0x3d, 0x80, 0x5a, 0x90, 0x32, 0xdd, 0x8d, 0x9c, 0x39, 0x44, 0xfd, 0x91, 0xa8, 0x36, 0x3a, 0x11, 0xee, 0xd9, 0x91, 0x42, 0xf2, 0x2f, 0xe0, 0x34, 0x63, 0xeb, 0xf3, 0xc8, 0x22, 0x68, 0x35, 0xb0, 0x65, 0x79, 0xd9, 0xeb, 0x17, 0xbe, 0x85, 0x92, 0xc7, 0x83, 0xfe, 0x88, 0xd9, 0x73, 0x0e, 0x82, 0x88, 0x0f, 0xca, 0xf7, 0x91, 0xbd, 0xae, 0x34, 0x5f, 0xc8, 0xac, 0xc1, 0xfb, 0x50, 0xce, 0xa8, 0xb1, 0x79, 0x39, 0x7c, 0x89, 0x6a, 0x37, 0x4e, 0x11, 0x7e, 0x14, 0xc8, 0xa2, 0x2b, 0xfb, 0x0c, 0x73, 0xa6, 0xb9, 0xe0, 0xde, 0x8c, 0xad, 0x57, 0x97, 0x13, 0x2c, 0x81, 0xc1, 0x0a, 0x27, 0xe4, 0x07, 0x5e, 0x56, 0x63, 0xad, 0x99, 0x58, 0x25, 0x6d, 0x61, 0x36, 0xb1, 0x5d, 0xf5, 0x04, 0x45, 0x12, 0x78, 0x31, 0xf5, 0x76, 0xb5, 0x13, 0x4a, 0xec, 0x2b, 0xa1, 0xd4, 0x39, 0x0d, 0x26, 0x5a, 0x9d, 0x70, 0x8b, 0xf0, 0x03, 0x80, 0x12, 0x49, 0x05, 0xf2, 0xab, 0x3d, 0xae, 0x52, 0x30, 0x56, 0x42, 0xe7, 0x84, 0x93, 0x2b, 0x0e, 0xbb, 0x4f, 0x7a, 0xcb, 0x56, 0xc2, 0x44, 0x61, 0x23, 0xf2, 0xee, 0x16, 0xdb, 0x0a, 0xa8, 0x50, 0x88, 0x0e, 0x5f, 0x2f, 0x7f, 0xc8, 0xe5, 0x77, 0x1a, 0x2b, 0xa0, 0x7b, 0xc2, 0xe9, 0xe5, 0x87, 0xdc, 0x27, 0x3d, 0x5b, 0x3c, 0x2c, 0x1d, 0x89, 0x12, 0x96, 0xa4, 0xd2, 0xb3, 0x27, 0x2d, 0xcc, 0x0f, 0x0e, 0xd4, 0x12, 0xec, 0x4e, 0x1f, 0xbe, 0x61, 0x09, 0x50, 0x8c, 0x72, 0x39, 0x79, 0xfc, 0x54, 0x52, 0xd6, 0xb5, 0x91, 0xea, 0xc8, 0x87, 0x4c, 0xb1, 0x0f, 0xd3, 0x0b, 0x98, 0x33, 0xd6, 0xb5, 0xab, 0x49, 0x8e, 0xb5, 0xa3, 0xdc, 0x92, 0x1f, 0x31, 0xe2, 0x6f, 0x21, 0xd9, 0x14, 0xcf, 0x78, 0x63, 0xe4, 0x10, 0x85, 0x63, 0x27, 0x92, 0x57, 0x5f, 0xf2, 0xbc, 0x9d, 0xf2, 0x1d, 0x53, 0xe5, 0x11, 0xfe, 0x9a, 0xc2, 0x0b, 0x28, 0x06, 0x29, 0x38, 0x48, 0x12, 0xea, 0xdd, 0x2d, 0x34, 0xbe, 0xbf, 0xdd, 0x16, 0xae, 0x4d, 0xeb, 0x22, 0x2e, 0x94, 0x6f, 0x1c, 0xd1, 0x52, 0x47, 0x29, 0xca, 0x80, 0xda, 0xd0, 0x23, 0xcd, 0x03, 0x87, 0xfb, 0x48, 0x06, 0xe9, 0x84, 0x7c, 0xeb, 0xce, 0x78, 0x24, 0x9f, 0x46, 0x70, 0x60, 0x19, 0x48, 0x4c, 0xd7, 0xa4, 0xad, 0xe9, 0x4b, 0x7c, 0x25, 0xd7, 0x47, 0x06, 0x33, 0x9e, 0x1d, 0x51, 0x7a, 0x2c, 0x44, 0x89, 0x30, 0x1f, 0x7b, 0xaf, 0x98, 0xe9, 0xbb, 0x56, 0x95, 0xbf, 0x2f, 0x56, 0x3a, 0x61, 0x18, 0x21, 0x3e, 0xc0, 0x74, 0xfe, 0xfb, 0x31, 0x52, 0xc5, 0x44, 0xf2, 0x9d, 0x7b, 0x42, 0x22, 0xeb, 0xd7, 0x11, 0x0b, 0x7b, 0xf4, 0x2d, 0x34, 0x92, 0xd7, 0x08, 0x80, 0x27, 0x33, 0x72, 0x12, 0x79, 0x9f, 0x34, 0xcd, 0x1c, 0x2b, 0x27, 0x31, 0xe5, 0x2e, 0x63, 0x8d, 0xe3, 0xdd, 0x18, 0xd8, 0xe6, 0x8c, 0x93, 0x91, 0xbc, 0xb7, 0x93, 0xef, 0x24, 0xa2, 0xd9, 0x0b, 0x48, 0xb3, 0xc7, 0x6f, 0x41, 0x9a, 0x45, 0x7e, 0xa9, 0xdc, 0x42, 0x54, 0x3b, 0x27, 0x4b, 0x52, 0x9a, 0x86, 0x92, 0x52, 0x4e, 0x17, 0x39, 0xb1, 0x3e, 0x2c, 0x7b, 0x41, 0xca, 0x8a, 0x9b, 0x99, 0x65, 0x99, 0xb5, 0x4d, 0xf1, 0x65, 0xe4, 0x8a, 0xa0, 0x37, 0x0a, 0xc6, 0x1d, 0x42, 0x06, 0x7e, 0xf5, 0xa7, 0x42, 0x92, 0xc5, 0x10, 0x9c, 0x3b, 0x2b, 0x1c, 0x60, 0x31, 0x7b, 0x24, 0xe8, 0xd0, 0xc6, 0x14, 0xe4, 0x58, 0xd6, 0xcd, 0xee, 0xdb, 0x3c, 0xb0, 0x70, 0x8d, 0x84, 0x9a, 0x41, 0xe2, 0x15, 0x3b, 0x8e, 0xd7, 0xc4, 0xde, 0xfd, 0x5d, 0xd5, 0x87, 0x07, 0xaa, 0x35, 0x66, 0x3f, 0x59, 0x94, 0x97, 0x50, 0x16, 0x26, 0xaf, 0xee, 0x3c, 0xee, 0x3e, 0x66, 0xdd, 0xd5, 0x12, 0xe8, 0x96, 0x68, 0x3e, 0xba, 0x03, 0xaf, 0xe7, 0x6d, 0xf5, 0xa1, 0x1f, 0x91, 0xd7, 0x64, 0xd2, 0x4c, 0xcb, 0x37, 0x92, 0x07, 0x7a, 0x4a, 0xf9, 0x73, 0x43, 0x99, 0xdb, 0x59, 0x98, 0x95, 0x76, 0x3e, 0xa5, 0x25, 0x3d, 0x02, 0xd3, 0xd6, 0xa4, 0xd3, 0xea, 0x38, 0xed, 0x44, 0x9b, 0xdb, 0x79, 0x5d, 0x56, 0xda, 0xe5, 0x94, 0xb6, 0xac, 0x3e, 0xb4, 0x15, 0xd3, 0xce, 0x4c, 0xa7, 0x65, 0x8d, 0xf9, 0xe7, 0xd5, 0x8a, 0xdb, 0x69, 0x4d, 0xa5, 0xad, 0x58, 0x01, 0x0b, 0x9d, 0x26, 0x7c, 0xb3, 0x72, 0xda, 0xf2, 0x74, 0x5a, 0xf6, 0xeb, 0xf6, 0xf3, 0xaf, 0x67, 0xc3, 0xe0, 0xa2, 0xb4, 0xa8, 0x55, 0x4a, 0xcd, 0x2a, 0xc4, 0x15, 0xe4, 0xd1, 0x99, 0xe8, 0x5e, 0xc8, 0xc9, 0x06, 0x19, 0x69, 0xb3, 0x26, 0x0a, 0xfa, 0x61, 0xbc, 0xcf, 0xc4, 0xfb, 0x47, 0x78, 0x2f, 0xc7, 0xfb, 0x19, 0xec, 0xa9, 0x58, 0x18, 0xf4, 0x27, 0x19, 0x0f, 0x7a, 0x2e, 0xf9, 0xdb, 0x19, 0x3c, 0xd4, 0x52, 0xb9, 0x16, 0x82, 0x41, 0x6d, 0x9d, 0x37, 0x0d, 0x85, 0x81, 0xd3, 0xde, 0x9d, 0xdd, 0xba, 0x54, 0x6a, 0xa9, 0x59, 0x4d, 0x5d, 0x8f, 0x50, 0x78, 0x33, 0x50, 0xe8, 0x77, 0x91, 0x64, 0xad, 0x7f, 0x9e, 0xbc, 0x02, 0xea, 0x63, 0x18, 0x57, 0x52, 0xb1, 0x0c, 0xcc, 0xd4, 0x67, 0xde, 0x0e, 0x78, 0x1c, 0xaf, 0x27, 0xee, 0x98, 0x0d, 0x4f, 0xde, 0xe1, 0x81, 0xa7, 0xbc, 0x4e, 0xf8, 0xc9, 0x4d, 0xe4, 0x45, 0xee, 0x1f, 0x9c, 0x3d, 0xa0, 0xe0, 0x04, 0xff, 0x53, 0xbc, 0x43, 0x11, 0xc0, 0x76, 0x1c, 0xc1, 0xcf, 0x7a, 0x9f, 0x83, 0x9d, 0x78, 0xbd, 0x80, 0xfa, 0xfe, 0x2e, 0xbc, 0xbf, 0x84, 0x39, 0xf7, 0xe0, 0xb5, 0x17, 0xaf, 0x57, 0xf1, 0xda, 0x77, 0x07, 0xd9, 0x02, 0x7e, 0x1d, 0x29, 0xef, 0xf1, 0xb2, 0x15, 0x30, 0x89, 0xfc, 0x9f, 0x22, 0x2c, 0x38, 0x83, 0xeb, 0xce, 0x92, 0xb5, 0xdd, 0x9f, 0x47, 0xb0, 0xef, 0x35, 0xd1, 0x49, 0xfc, 0xbc, 0x06, 0x9f, 0xb5, 0xd1, 0x7c, 0x7e, 0x7e, 0x02, 0x9f, 0xe5, 0x88, 0x9e, 0x9f, 0x7f, 0xe4, 0x04, 0xd6, 0x11, 0x11, 0xdb, 0x64, 0x8f, 0xf3, 0x4a, 0x90, 0xad, 0xc8, 0x52, 0x3c, 0xc8, 0x67, 0x90, 0x7b, 0x94, 0xa2, 0xd4, 0x5c, 0x0a, 0x13, 0xa9, 0xe7, 0x90, 0xcb, 0x55, 0x3a, 0xa7, 0x12, 0xc7, 0xb9, 0x62, 0xe1, 0x11, 0x8e, 0x63, 0x9f, 0x46, 0x28, 0x42, 0x51, 0x01, 0x15, 0x35, 0xda, 0x52, 0x9f, 0x23, 0x88, 0xf2, 0xdb, 0x76, 0x65, 0x15, 0xfb, 0xbf, 0x2a, 0xae, 0xed, 0x40, 0x6d, 0x3b, 0x04, 0x95, 0x15, 0x6d, 0xb0, 0xd0, 0xf7, 0x5e, 0xf2, 0xec, 0x2f, 0x0f, 0x74, 0x80, 0xd6, 0x78, 0x64, 0xdd, 0x91, 0x75, 0xa8, 0x11, 0xf5, 0xd9, 0x7c, 0xb6, 0xa9, 0x34, 0x53, 0xc8, 0xdd, 0xf6, 0xe5, 0x60, 0x8c, 0xb5, 0xec, 0xd8, 0xd8, 0x52, 0xf8, 0xdb, 0xd7, 0x7f, 0xfb, 0x7a, 0xb7, 0xe5, 0xc5, 0xcd, 0x77, 0xb2, 0x56, 0xe5, 0xc8, 0xd9, 0x17, 0xb7, 0xfb, 0xc9, 0x2f, 0x94, 0xcd, 0xa7, 0x5c, 0x67, 0xf3, 0xbc, 0xf1, 0xf2, 0xdc, 0x0f, 0x1f, 0x95, 0xf2, 0xa7, 0x83, 0xa9, 0x48, 0x0a, 0xac, 0xaf, 0xf2, 0xa3, 0xf4, 0xef, 0x10, 0x12, 0x9e, 0x79, 0x3a, 0x6b, 0x5e, 0x85, 0x66, 0x29, 0x19, 0x8f, 0x5a, 0xff, 0xd7, 0x59, 0x28, 0x24, 0x7e, 0xe4, 0xea, 0x81, 0xd2, 0x4d, 0x2f, 0x87, 0xb5, 0x78, 0x47, 0xe6, 0xcc, 0xb6, 0x35, 0xc9, 0xdf, 0x8d, 0x8c, 0xbd, 0x4e, 0x3d, 0xfa, 0xcf, 0xc2, 0x5a, 0x70, 0x68, 0xd7, 0xf0, 0x19, 0xea, 0xb9, 0xf2, 0x67, 0x90, 0xef, 0xe2, 0x4c, 0x8c, 0x2d, 0x25, 0xef, 0xcd, 0xd5, 0xce, 0x72, 0x6a, 0xe9, 0xb0, 0x3e, 0x65, 0x9f, 0x97, 0xe3, 0x01, 0x67, 0x1c, 0x0e, 0xff, 0xe4, 0x70, 0x86, 0x67, 0x38, 0x68, 0xf6, 0x51, 0x90, 0x8f, 0xfc, 0xe4, 0x1a, 0x7c, 0x63, 0x2d, 0xdb, 0x51, 0x55, 0x65, 0x22, 0x6c, 0xc5, 0x9c, 0x32, 0x9f, 0xad, 0x3c, 0xe5, 0x47, 0x2e, 0x8b, 0x83, 0x58, 0xa0, 0x98, 0x24, 0x35, 0xe4, 0x1a, 0xca, 0x55, 0x5c, 0xc3, 0x8c, 0xb2, 0x8e, 0xf2, 0xcd, 0x57, 0x02, 0xeb, 0xfc, 0x3e, 0x9c, 0xe3, 0x7c, 0xd9, 0x9c, 0xe3, 0x0e, 0xa2, 0x1d, 0x57, 0x58, 0xef, 0xf5, 0x21, 0x3d, 0xb8, 0xb2, 0xf9, 0x48, 0x3a, 0xcc, 0x9f, 0xa5, 0xa7, 0xa8, 0x61, 0xcf, 0x8b, 0xb9, 0x7a, 0x7b, 0xd0, 0x47, 0x50, 0x23, 0x1f, 0x26, 0x7b, 0xb0, 0xfb, 0x63, 0x45, 0x25, 0xda, 0x13, 0x4f, 0xe7, 0x6b, 0xac, 0xeb, 0xcc, 0x1a, 0x30, 0xb6, 0x1b, 0xf5, 0x58, 0xb2, 0xb5, 0x37, 0x9c, 0x83, 0x6f, 0x37, 0xb5, 0x6b, 0xad, 0xbb, 0xa1, 0xfc, 0x6f, 0xe2, 0x4d, 0xfd, 0x9d, 0x97, 0x91, 0x47, 0x1f, 0x41, 0xba, 0x1d, 0x42, 0xba, 0x30, 0xe3, 0x55, 0x90, 0x92, 0xbd, 0xc8, 0x0b, 0x44, 0x53, 0xef, 0xe6, 0xed, 0x38, 0xf3, 0x48, 0xc2, 0x4a, 0xb1, 0x1a, 0xaa, 0x35, 0x93, 0x95, 0x8d, 0xf8, 0x12, 0xed, 0xc9, 0xfe, 0xb0, 0xe5, 0xc4, 0x03, 0xd9, 0xb1, 0x4e, 0xd2, 0xcb, 0xdd, 0x81, 0x0e, 0x38, 0x9c, 0xee, 0x97, 0xfd, 0xa9, 0x7e, 0xf9, 0xa4, 0x89, 0xc6, 0xa0, 0x43, 0x0e, 0x17, 0xd2, 0xea, 0xc6, 0xb6, 0x5d, 0x41, 0x84, 0x3c, 0x9a, 0x13, 0xf4, 0x45, 0x66, 0xf2, 0xfb, 0x01, 0x67, 0x59, 0xaa, 0xc7, 0xd8, 0xf3, 0x43, 0x35, 0x4a, 0x12, 0xd8, 0x33, 0x97, 0xe7, 0xa7, 0xac, 0xfe, 0xaa, 0x3d, 0x46, 0x2b, 0x68, 0x01, 0x41, 0xb7, 0x97, 0x27, 0x51, 0x4f, 0xe9, 0xc9, 0x9f, 0x5d, 0x45, 0xe9, 0x9d, 0xc1, 0x47, 0x50, 0x1f, 0x9a, 0x1f, 0x06, 0xa9, 0x8b, 0xc6, 0x06, 0xd9, 0x70, 0x76, 0x20, 0xbd, 0x97, 0x22, 0x65, 0xa7, 0x28, 0x1e, 0x6b, 0xa0, 0x5c, 0x0a, 0x51, 0xf9, 0x1a, 0x58, 0x5b, 0xf1, 0xf7, 0x07, 0xc8, 0xef, 0xc8, 0xdd, 0x56, 0x94, 0x84, 0x0e, 0xa3, 0xec, 0x42, 0xfe, 0xff, 0xec, 0x4d, 0xeb, 0x90, 0x22, 0x0a, 0x71, 0xee, 0x2a, 0x87, 0xeb, 0x9c, 0x52, 0x45, 0x39, 0x32, 0x78, 0x6c, 0x5f, 0x20, 0x66, 0x4c, 0x22, 0xad, 0x69, 0xd2, 0xad, 0x3a, 0x9e, 0x6a, 0xd5, 0xe5, 0x9e, 0x18, 0x58, 0xcb, 0xc1, 0xda, 0x79, 0x47, 0xbd, 0x34, 0xd8, 0x4b, 0x5e, 0x29, 0xd9, 0xe3, 0x75, 0x5c, 0xf8, 0xe0, 0xd9, 0xae, 0x0b, 0x17, 0xaa, 0x1e, 0xb0, 0xc5, 0xbb, 0x29, 0xcc, 0xbc, 0x6a, 0x7b, 0x1e, 0xd2, 0xe1, 0xc3, 0x8d, 0x03, 0xc6, 0x72, 0xd4, 0x03, 0x51, 0x5f, 0xe2, 0xb0, 0xeb, 0xd2, 0x61, 0xba, 0x74, 0x58, 0xa1, 0x08, 0xa3, 0x16, 0xb8, 0xea, 0x88, 0x53, 0x22, 0x3c, 0xdc, 0x8a, 0x8f, 0x6b, 0xd3, 0x94, 0xbc, 0x5d, 0xa5, 0x64, 0x11, 0x9e, 0xa3, 0xaf, 0x03, 0xf2, 0xba, 0xa8, 0x28, 0xa1, 0x58, 0xb2, 0x33, 0x59, 0x36, 0x17, 0xf9, 0xc8, 0x8b, 0x65, 0xac, 0x2d, 0x26, 0x8b, 0xc3, 0x77, 0xf1, 0xfc, 0x31, 0x1f, 0xf9, 0xcb, 0xc4, 0x18, 0xb8, 0xca, 0xe1, 0x40, 0xa7, 0x6e, 0xb0, 0x37, 0xea, 0xc7, 0x31, 0x55, 0x76, 0xf0, 0x0c, 0x94, 0xa0, 0xe4, 0x70, 0xba, 0x33, 0xb9, 0x93, 0x3d, 0x4e, 0x5b, 0x01, 0x21, 0x97, 0xac, 0x10, 0x35, 0xe2, 0x5d, 0xb6, 0x42, 0x64, 0x12, 0x43, 0xf4, 0x65, 0x84, 0x61, 0x12, 0x63, 0x13, 0xf9, 0xcb, 0xa5, 0x33, 0x6c, 0xbf, 0x5e, 0x5b, 0xad, 0xb3, 0x37, 0x54, 0xf7, 0xc0, 0x82, 0xdf, 0x9f, 0x81, 0x52, 0x65, 0xbe, 0xe0, 0x9a, 0x30, 0x9c, 0xa6, 0xeb, 0xf8, 0x9a, 0x24, 0xe2, 0x78, 0xbf, 0x32, 0x0d, 0x0a, 0xb0, 0x2c, 0x85, 0x7c, 0xa0, 0xba, 0xa6, 0x41, 0x91, 0xd9, 0x0d, 0x5f, 0xc6, 0x74, 0x3f, 0xad, 0x00, 0xbd, 0x27, 0xf9, 0x1b, 0xb3, 0x07, 0xe4, 0x25, 0x39, 0x55, 0xa0, 0xf7, 0x25, 0x0f, 0x62, 0xea, 0xcd, 0xd7, 0x98, 0xf3, 0x7b, 0x48, 0x96, 0xce, 0x59, 0x86, 0xf8, 0x39, 0x40, 0x4f, 0x46, 0x07, 0xc8, 0xf0, 0x9b, 0x28, 0xcf, 0x99, 0x5e, 0xf7, 0x8c, 0x41, 0x78, 0xeb, 0xc3, 0xe3, 0xe1, 0x66, 0xf6, 0x6b, 0xde, 0x84, 0xd2, 0x49, 0xb1, 0xcb, 0x01, 0x25, 0xf3, 0xdc, 0x58, 0x8b, 0x61, 0x89, 0x97, 0x3c, 0xb3, 0x25, 0x93, 0x43, 0x71, 0xd7, 0xd7, 0x8c, 0xfa, 0xd0, 0x15, 0xcc, 0x67, 0x45, 0xb9, 0xca, 0x0e, 0x65, 0xe0, 0x00, 0x17, 0xfd, 0xc5, 0x12, 0x2f, 0x6f, 0x07, 0xcb, 0x1a, 0x5d, 0xb8, 0xa8, 0x53, 0x5a, 0x47, 0x4f, 0xfa, 0xb0, 0x65, 0x8d, 0x1c, 0xce, 0x59, 0xa3, 0x0d, 0xeb, 0xd7, 0x68, 0xc2, 0xf2, 0x9a, 0xec, 0x19, 0x7e, 0x83, 0x32, 0x3f, 0xfd, 0xfc, 0x60, 0x89, 0xc0, 0xad, 0xdd, 0xec, 0x4b, 0x26, 0xa3, 0x90, 0x94, 0xc3, 0xa5, 0x8c, 0xa7, 0xf9, 0xc2, 0x1e, 0x74, 0x2c, 0x23, 0x5d, 0xec, 0x69, 0x1e, 0x40, 0xed, 0xe1, 0xa4, 0xcd, 0x7d, 0xed, 0x72, 0xb0, 0x94, 0x53, 0x58, 0x4f, 0x12, 0x5b, 0x56, 0xaa, 0xf2, 0xff, 0x17, 0xe9, 0x9d, 0x7b, 0xac, 0x1a, 0xb5, 0x83, 0x52, 0x28, 0x57, 0x66, 0x85, 0x36, 0xf1, 0x53, 0x05, 0xc9, 0xd8, 0xfc, 0x54, 0x55, 0x36, 0x0b, 0x75, 0x2b, 0x7a, 0xaa, 0x09, 0x6d, 0x15, 0xb3, 0x1c, 0x3e, 0xcf, 0x0c, 0x6d, 0x6d, 0x1c, 0x08, 0x4f, 0x5c, 0x93, 0xe4, 0x18, 0x6f, 0x3a, 0x5f, 0x3d, 0xe5, 0xa3, 0x3e, 0xab, 0xd6, 0x7c, 0xdb, 0x67, 0xf6, 0x81, 0xb4, 0x04, 0x3e, 0x7e, 0xb6, 0x4a, 0xcb, 0x71, 0x25, 0x24, 0x97, 0xfc, 0x9b, 0x42, 0x96, 0xbe, 0xd7, 0x24, 0xeb, 0x7d, 0xb1, 0x09, 0x27, 0x56, 0x32, 0x7f, 0x5a, 0x01, 0x85, 0xce, 0xd9, 0x70, 0x36, 0x5a, 0x9e, 0x96, 0xd8, 0xb4, 0x28, 0x69, 0x5e, 0x50, 0x16, 0x5f, 0xd7, 0x43, 0x7c, 0xfa, 0x3a, 0xf6, 0x3a, 0x8a, 0x14, 0x14, 0x44, 0x0a, 0xca, 0xf8, 0xe8, 0x21, 0x7f, 0x80, 0xb6, 0xc9, 0xe4, 0xfb, 0xb1, 0xda, 0xa5, 0x61, 0x7b, 0xca, 0x24, 0x99, 0xef, 0x65, 0xf9, 0xee, 0x49, 0x92, 0x4b, 0x51, 0x5f, 0x7a, 0x10, 0xa5, 0xe9, 0x4d, 0x8e, 0x0e, 0xd8, 0x82, 0xb4, 0xe8, 0x84, 0x27, 0x9c, 0x3d, 0x71, 0x0d, 0xf2, 0x3f, 0xc5, 0xd9, 0x01, 0xeb, 0x91, 0xeb, 0xd0, 0x9b, 0x06, 0x65, 0xdf, 0x0e, 0xe8, 0xc7, 0x59, 0x8b, 0xde, 0x0c, 0xec, 0x3f, 0xb6, 0x92, 0x9f, 0x75, 0xc8, 0x21, 0xfc, 0x50, 0xcb, 0xcf, 0xb9, 0xe0, 0xc6, 0xf9, 0xd4, 0xcf, 0xcf, 0x66, 0x08, 0xe0, 0x73, 0x03, 0x3f, 0xdf, 0x04, 0x8d, 0xce, 0x06, 0x98, 0xcf, 0xcf, 0x26, 0x68, 0xc6, 0x92, 0x1e, 0xc5, 0x99, 0x9e, 0xde, 0xac, 0x10, 0xc6, 0x19, 0xb9, 0x85, 0x9f, 0x6f, 0x80, 0x65, 0x31, 0x09, 0xdf, 0xda, 0xf8, 0xad, 0x10, 0x62, 0xf8, 0xdc, 0x85, 0x65, 0x74, 0xe3, 0xd5, 0x83, 0x5c, 0x7c, 0xe1, 0xd5, 0xfb, 0x19, 0xac, 0x65, 0x1d, 0x7e, 0x91, 0xad, 0x81, 0x73, 0xde, 0x46, 0xcf, 0xfb, 0x08, 0x63, 0x00, 0xfc, 0x75, 0xef, 0x63, 0xdd, 0x41, 0x68, 0xb8, 0xdd, 0x07, 0xfa, 0xdb, 0xfd, 0x60, 0xc6, 0xcb, 0x8a, 0x57, 0x01, 0xbe, 0x17, 0xe2, 0x35, 0xf1, 0x46, 0xe2, 0xf0, 0x8a, 0x77, 0x1a, 0xd8, 0x6e, 0x24, 0x1f, 0x8c, 0x37, 0xfb, 0xde, 0x07, 0xeb, 0x2d, 0xb3, 0xc1, 0x7e, 0x23, 0xad, 0xc5, 0xb9, 0x30, 0xbc, 0x82, 0xc3, 0x67, 0x60, 0x79, 0x5a, 0x94, 0x3d, 0x2b, 0xb1, 0xbc, 0xe2, 0x5b, 0x82, 0x50, 0xcd, 0xf1, 0x6e, 0x8c, 0xf7, 0x72, 0xbc, 0x0f, 0xf3, 0xf8, 0xb9, 0xac, 0x46, 0x0c, 0x6b, 0xe2, 0xb0, 0x79, 0x98, 0x7e, 0x3e, 0xe6, 0xab, 0xc5, 0x7b, 0xf3, 0x8f, 0xf6, 0xd1, 0xf8, 0xd9, 0xde, 0x57, 0x87, 0x9c, 0xa0, 0xb4, 0x03, 0x65, 0xe2, 0x55, 0x44, 0x51, 0xa3, 0xeb, 0x4b, 0xe2, 0xd1, 0x1c, 0xd6, 0xed, 0x0a, 0x1c, 0xf1, 0xb0, 0xd5, 0x36, 0x27, 0xb6, 0x30, 0xb3, 0xca, 0x25, 0xf6, 0x30, 0x7a, 0x8a, 0xb1, 0x9f, 0xc2, 0x19, 0x3f, 0x2f, 0x3c, 0xbb, 0x14, 0x2b, 0x4d, 0x36, 0x5a, 0x4b, 0x5a, 0xce, 0xa5, 0xdc, 0x6b, 0x0b, 0x66, 0xe7, 0x13, 0x2b, 0x4b, 0xd7, 0xf6, 0xcb, 0x81, 0xbd, 0x7d, 0x9c, 0x74, 0x27, 0xf2, 0xa0, 0x5e, 0xe8, 0x84, 0x59, 0x28, 0x2f, 0xcf, 0x89, 0x49, 0x19, 0x9f, 0x0a, 0x28, 0xe1, 0x4c, 0x8c, 0x69, 0xc6, 0xbc, 0x4f, 0x8a, 0xea, 0x51, 0xca, 0x9b, 0x98, 0xf1, 0x0d, 0xb0, 0x43, 0x43, 0xbe, 0x01, 0x92, 0x4f, 0x36, 0x0e, 0x04, 0xd6, 0x55, 0xf9, 0x9c, 0xa4, 0xa5, 0xeb, 0xa1, 0x88, 0x24, 0x2b, 0x1c, 0xd5, 0xc5, 0xfc, 0x6e, 0x40, 0xaa, 0x21, 0x5f, 0x3a, 0x27, 0x98, 0x6e, 0xc8, 0x3d, 0x2f, 0x79, 0x18, 0x2e, 0xc3, 0x1e, 0x74, 0x79, 0xc8, 0xeb, 0x10, 0x72, 0x8b, 0xd0, 0xb3, 0x57, 0xde, 0x71, 0x40, 0x2c, 0xb9, 0x63, 0x7d, 0xa6, 0xe4, 0xf5, 0x00, 0x26, 0x2c, 0xb9, 0xbe, 0x71, 0x80, 0x52, 0xac, 0x81, 0x2a, 0xe6, 0x88, 0xaf, 0xf6, 0x56, 0xd4, 0x4a, 0x27, 0x82, 0xeb, 0xa2, 0xe5, 0x8a, 0x36, 0xc3, 0x07, 0x23, 0xe6, 0x8a, 0x5a, 0xd8, 0x17, 0x94, 0xa3, 0x45, 0x87, 0x3c, 0xe1, 0x02, 0x95, 0x27, 0x62, 0x98, 0x04, 0x18, 0xa6, 0xad, 0xa8, 0x95, 0xe1, 0xd3, 0x20, 0x53, 0x24, 0xe2, 0x3e, 0x9a, 0xcb, 0xac, 0xc5, 0x5d, 0x03, 0x3a, 0x82, 0x8c, 0xb9, 0x6e, 0x80, 0x63, 0x2b, 0xb0, 0x04, 0xb7, 0x9a, 0x7b, 0x26, 0xd2, 0xca, 0x73, 0x6a, 0xae, 0x6a, 0xf2, 0xc3, 0x83, 0x31, 0x65, 0xfc, 0x36, 0x05, 0xc7, 0xc2, 0x1c, 0xa8, 0xc4, 0xd8, 0x6a, 0xec, 0x6b, 0xd1, 0x46, 0xea, 0x9b, 0xc7, 0x69, 0x4d, 0x7e, 0x6c, 0xfb, 0x12, 0x91, 0x46, 0xe1, 0xef, 0x82, 0x7a, 0xd6, 0x1e, 0xba, 0x87, 0xe5, 0x64, 0xf2, 0xa4, 0x6c, 0xc6, 0xb8, 0xb0, 0xf0, 0xaf, 0x4d, 0x9e, 0xc4, 0xb0, 0x8f, 0x0a, 0xd4, 0x9d, 0x33, 0x2d, 0xfb, 0xe4, 0xf0, 0x97, 0xb8, 0x79, 0x65, 0x9d, 0xf8, 0x42, 0xb3, 0xb0, 0x73, 0x1e, 0xa9, 0x9c, 0xfd, 0x3e, 0xcc, 0xb7, 0x35, 0x90, 0x74, 0x23, 0xb0, 0x9a, 0xd8, 0x6e, 0x6b, 0x88, 0x39, 0xea, 0xa1, 0xb3, 0x5b, 0xbc, 0x27, 0xad, 0xb6, 0x06, 0xd2, 0xae, 0xb6, 0x6f, 0x8a, 0x4d, 0x54, 0x43, 0xf6, 0xa6, 0x3c, 0x73, 0xa9, 0x34, 0x65, 0x25, 0xad, 0x5c, 0xe5, 0x71, 0x2f, 0x21, 0x7f, 0x99, 0x94, 0xf1, 0x1d, 0x85, 0x6f, 0x13, 0x33, 0x6f, 0x29, 0xff, 0x89, 0xb4, 0xce, 0x42, 0x3e, 0x04, 0x91, 0x57, 0x94, 0x99, 0x57, 0x48, 0x7f, 0x06, 0x73, 0x07, 0x48, 0x31, 0x7c, 0x5a, 0x03, 0x96, 0x0e, 0x72, 0x03, 0xbe, 0x02, 0x9a, 0xcd, 0x0e, 0x1c, 0x03, 0xba, 0xa5, 0x20, 0x35, 0xc7, 0x72, 0xb2, 0x3d, 0xe2, 0x8a, 0xdd, 0x47, 0xc9, 0x8b, 0xf2, 0xb1, 0x7c, 0xbc, 0x2d, 0x13, 0x33, 0x3a, 0xdf, 0xe6, 0x2e, 0xa1, 0x98, 0x89, 0x22, 0x86, 0x60, 0x5e, 0xb9, 0x2b, 0xbf, 0xa8, 0x4d, 0x09, 0xdb, 0xf3, 0x37, 0xcd, 0x8b, 0xcf, 0x93, 0x82, 0xf1, 0x0e, 0x7d, 0xd3, 0x03, 0x4d, 0x28, 0xe5, 0xd0, 0xae, 0xc4, 0xca, 0xb5, 0xdd, 0xb0, 0xb6, 0xec, 0xd8, 0xc6, 0xb0, 0x23, 0x28, 0xb5, 0xbd, 0x19, 0x3e, 0xc2, 0xd2, 0xe9, 0x50, 0x81, 0xd5, 0x2f, 0x95, 0xce, 0x0e, 0xe7, 0x4c, 0xdc, 0xa3, 0xe6, 0x38, 0x6c, 0x9b, 0x8b, 0xf1, 0x17, 0x30, 0xd7, 0xf3, 0xb6, 0xaf, 0x94, 0x48, 0x6f, 0xcf, 0x09, 0xf8, 0xbc, 0x3e, 0xbb, 0x14, 0xf0, 0x7a, 0xbd, 0x72, 0x1f, 0x99, 0x57, 0x7f, 0xfb, 0x01, 0xb9, 0x97, 0xee, 0x4a, 0x9d, 0xa2, 0x2d, 0x6b, 0x23, 0xfc, 0x8c, 0x3c, 0xd3, 0xb4, 0x3e, 0x66, 0x45, 0xba, 0x3c, 0x30, 0xe7, 0x0c, 0xe2, 0x76, 0xae, 0x17, 0x44, 0x38, 0x62, 0x76, 0x6e, 0x0c, 0x3a, 0xa1, 0x12, 0x25, 0xb3, 0xc0, 0x9e, 0xaa, 0x52, 0xd4, 0x56, 0x5e, 0x51, 0x63, 0x0e, 0xa0, 0xe6, 0x64, 0x56, 0x8c, 0xfa, 0x78, 0x32, 0x99, 0x30, 0x9f, 0x8c, 0xdf, 0xee, 0x06, 0x3d, 0x86, 0x58, 0x6c, 0x46, 0x7d, 0x2f, 0x86, 0x3c, 0x70, 0xb2, 0xf7, 0x76, 0x0f, 0x18, 0xc9, 0xff, 0x74, 0x32, 0x29, 0x66, 0x3e, 0x65, 0xae, 0x9d, 0xfd, 0xd8, 0x4b, 0x7f, 0x16, 0x7e, 0x9d, 0xa5, 0x35, 0xf6, 0x79, 0x28, 0x77, 0x81, 0x74, 0x51, 0x94, 0x78, 0xe5, 0x04, 0xf2, 0x11, 0xed, 0xd4, 0x39, 0x30, 0x3f, 0xf6, 0xa5, 0xa9, 0x6e, 0x68, 0x56, 0x72, 0x99, 0x3b, 0x64, 0x76, 0xb7, 0xca, 0xd9, 0x6f, 0xad, 0xf0, 0x7c, 0x6a, 0xa3, 0x5d, 0x4c, 0x94, 0xf3, 0xe7, 0x07, 0x51, 0x1a, 0x24, 0xcf, 0xf0, 0x37, 0xb8, 0x41, 0xdb, 0x89, 0x42, 0x18, 0x18, 0xbb, 0x08, 0x5a, 0x3d, 0xce, 0x06, 0xf3, 0x0f, 0x12, 0x4d, 0x2e, 0x87, 0x89, 0xb4, 0x3a, 0x6b, 0x0b, 0x28, 0x32, 0x79, 0x36, 0x94, 0xe2, 0x0c, 0xc3, 0xdf, 0xaf, 0x99, 0x71, 0xa4, 0x97, 0x5a, 0x11, 0xb6, 0x5d, 0x1d, 0x6e, 0x6f, 0xaa, 0x3b, 0x23, 0xc5, 0x05, 0x6c, 0x04, 0x57, 0xc3, 0x5b, 0xfe, 0x62, 0xe1, 0x27, 0x8c, 0x7c, 0x88, 0xd9, 0x57, 0xc2, 0x7c, 0xe6, 0x48, 0x93, 0x6c, 0x4d, 0xe9, 0x9e, 0x0c, 0x21, 0x3f, 0xca, 0x82, 0xd4, 0xfb, 0x34, 0xcc, 0x4f, 0xad, 0x7f, 0x28, 0x36, 0xbb, 0x85, 0x39, 0xe1, 0xd3, 0x24, 0x43, 0xb0, 0x67, 0xb1, 0x6a, 0xda, 0x35, 0x22, 0xdf, 0x30, 0x2a, 0x65, 0x2b, 0xec, 0x81, 0x06, 0x9f, 0x5e, 0xbb, 0x0b, 0xa9, 0xcf, 0xc6, 0xfe, 0x49, 0x96, 0xa8, 0x2b, 0x6f, 0x5a, 0x2c, 0x79, 0x11, 0x3f, 0x95, 0x0b, 0x9f, 0x31, 0xfe, 0x31, 0xfe, 0x08, 0x5f, 0x3b, 0x0b, 0x89, 0x03, 0x6e, 0x09, 0x8c, 0x8d, 0x90, 0x78, 0xdd, 0x8f, 0x57, 0x3e, 0x5e, 0x87, 0x52, 0x3b, 0xe2, 0x64, 0xab, 0x7f, 0xe9, 0xf2, 0xcc, 0xb9, 0x09, 0xc5, 0x45, 0x56, 0xfa, 0x2b, 0x6e, 0x4d, 0x5b, 0xe9, 0x07, 0x48, 0xfc, 0x1a, 0x73, 0xfd, 0x7a, 0x13, 0x24, 0xf6, 0x9f, 0xc0, 0xfb, 0x10, 0x59, 0xe0, 0xcf, 0xce, 0x31, 0xee, 0xdc, 0x85, 0x6f, 0xb6, 0x67, 0xba, 0x87, 0xc2, 0x96, 0x8c, 0x0d, 0xf3, 0xaa, 0xbe, 0xa2, 0x6c, 0x76, 0x27, 0x14, 0x10, 0x1d, 0xbf, 0xee, 0x7a, 0xf8, 0xb5, 0x47, 0x5e, 0x8f, 0x2d, 0x40, 0x6a, 0x27, 0xd8, 0x9f, 0xe1, 0x76, 0x97, 0xdd, 0xc0, 0xbb, 0xef, 0xec, 0xff, 0x39, 0xc7, 0xbb, 0x02, 0x0a, 0xc8, 0xd3, 0x0c, 0x42, 0x5c, 0x84, 0xe1, 0x7a, 0xb0, 0xdc, 0x46, 0xb3, 0x49, 0x21, 0x4a, 0x27, 0xec, 0xcd, 0x9b, 0x3c, 0x0e, 0xfb, 0xb5, 0xaa, 0x67, 0x51, 0xe6, 0x26, 0x24, 0xd5, 0xbc, 0xfe, 0x37, 0xc8, 0x2d, 0x1f, 0xb5, 0xb1, 0x87, 0x0e, 0x1c, 0x39, 0x91, 0x9b, 0x7b, 0x68, 0x0d, 0x06, 0x6c, 0xd7, 0x8f, 0xa0, 0x0c, 0xf0, 0x2f, 0xe7, 0x24, 0x5a, 0x75, 0x44, 0x79, 0x00, 0x27, 0x7d, 0xf1, 0x94, 0x8c, 0x4f, 0x80, 0x54, 0x58, 0x4e, 0xea, 0x69, 0x82, 0x29, 0x1d, 0x66, 0x4c, 0x3f, 0x89, 0x74, 0xa8, 0x95, 0xa4, 0x42, 0x34, 0x72, 0xaa, 0x8c, 0x24, 0x4e, 0x87, 0x04, 0x79, 0xe3, 0xf5, 0x3d, 0xa8, 0x51, 0x3b, 0xaf, 0xa7, 0x99, 0xb0, 0xfc, 0x66, 0x82, 0xfd, 0x6e, 0x70, 0xd1, 0x7d, 0xff, 0x42, 0xa8, 0xbe, 0xd9, 0x0d, 0x95, 0x31, 0x8d, 0xef, 0x3d, 0x28, 0x49, 0xd3, 0x41, 0x73, 0x16, 0xdc, 0xad, 0xc8, 0xcd, 0x4e, 0xd8, 0x55, 0xb8, 0xe1, 0x59, 0x6c, 0xf9, 0xbf, 0x0c, 0x41, 0x0a, 0xee, 0x3f, 0x02, 0xc9, 0x2a, 0x2a, 0xdc, 0x2b, 0xd2, 0x70, 0xaf, 0x48, 0xc3, 0xbd, 0x22, 0x0d, 0xf7, 0x8a, 0x34, 0xdc, 0x2b, 0xd2, 0x70, 0xaf, 0x20, 0xb8, 0x93, 0x49, 0x35, 0x67, 0x52, 0x4a, 0x95, 0x91, 0x94, 0xd3, 0x4f, 0x1a, 0xb8, 0xad, 0x07, 0xc5, 0xde, 0xc6, 0x1b, 0xb8, 0x05, 0xec, 0xd5, 0xb8, 0x9c, 0xb1, 0xbf, 0x1a, 0x5c, 0x53, 0xd4, 0x16, 0x4c, 0xa1, 0x16, 0xe4, 0xf9, 0xce, 0x64, 0xb7, 0x40, 0xc9, 0xc9, 0xf8, 0x50, 0x23, 0x5f, 0xa0, 0x74, 0x0e, 0xc0, 0x61, 0xb4, 0xcf, 0x2e, 0xb1, 0x30, 0xb6, 0x1c, 0x79, 0x58, 0x10, 0xdc, 0x14, 0x9f, 0x0a, 0xf3, 0xae, 0x77, 0xc3, 0xbc, 0x89, 0xf0, 0xfa, 0x54, 0x68, 0x8a, 0x86, 0xae, 0xaf, 0x83, 0xf9, 0xf9, 0xba, 0x7a, 0x69, 0x0f, 0x5c, 0xef, 0x81, 0x79, 0xb3, 0xde, 0x83, 0xda, 0x2e, 0x10, 0x5e, 0x8e, 0x75, 0xba, 0xa8, 0xcd, 0x36, 0x8f, 0x3d, 0x48, 0x4d, 0x54, 0xa6, 0x42, 0xbe, 0xe2, 0xb7, 0x2d, 0x07, 0x4b, 0x99, 0x6f, 0xac, 0x9f, 0xf3, 0xa6, 0xbe, 0xe6, 0x1f, 0xc4, 0x74, 0x3b, 0xfa, 0x22, 0x43, 0xde, 0x52, 0xe4, 0x07, 0xc0, 0xe7, 0x00, 0xbe, 0xa3, 0xfa, 0x88, 0xb5, 0x55, 0xe2, 0x14, 0x92, 0xf1, 0x83, 0x5b, 0x58, 0x0a, 0x4d, 0x41, 0xb9, 0x2d, 0x87, 0xce, 0x39, 0x20, 0x24, 0x9a, 0xb0, 0xde, 0x2a, 0xd7, 0xc3, 0xa0, 0x06, 0x39, 0x42, 0x13, 0xb7, 0xde, 0x9b, 0x07, 0xd6, 0x52, 0x98, 0x37, 0x88, 0xe9, 0xa2, 0x16, 0x57, 0x29, 0x34, 0x82, 0x3b, 0x0e, 0x24, 0xab, 0x5f, 0x78, 0x3c, 0xe3, 0x35, 0xd7, 0xeb, 0xb6, 0x6a, 0xc8, 0x6b, 0xa0, 0x5a, 0x47, 0x45, 0x89, 0xc9, 0x1e, 0xaa, 0x72, 0x67, 0x6a, 0x41, 0xa9, 0x66, 0x02, 0xed, 0x5c, 0xd8, 0x5d, 0xdb, 0x20, 0x52, 0x38, 0x79, 0xdd, 0x36, 0x88, 0x49, 0xb6, 0xdc, 0x3f, 0x6d, 0xeb, 0xfc, 0x7e, 0xbd, 0x14, 0xef, 0x65, 0x0f, 0x21, 0xe7, 0xb3, 0x7c, 0x34, 0xd3, 0x49, 0x0c, 0xb5, 0x2c, 0xa5, 0xc6, 0xce, 0x65, 0x89, 0xf4, 0x63, 0xd2, 0xf5, 0xcf, 0xc2, 0x52, 0x7f, 0xf7, 0xab, 0xdf, 0xfd, 0xea, 0xf9, 0x5f, 0x62, 0xa9, 0x5a, 0x2f, 0xfe, 0x66, 0xca, 0x48, 0xf9, 0xa2, 0x1a, 0xdf, 0x5e, 0xee, 0xed, 0x14, 0xde, 0xb1, 0x5d, 0xd8, 0xce, 0x79, 0x85, 0xb0, 0x01, 0xf1, 0x24, 0xfb, 0x20, 0x89, 0x98, 0x30, 0x22, 0x22, 0x6e, 0x5a, 0x0f, 0x61, 0x6d, 0xbd, 0xbc, 0x17, 0x6e, 0xf0, 0xc2, 0xbc, 0xcf, 0x6f, 0xbd, 0x2b, 0xdd, 0x76, 0xc1, 0x55, 0x0e, 0x78, 0x21, 0x31, 0x54, 0xdd, 0x3b, 0xd5, 0xd8, 0x82, 0xcf, 0x4b, 0xf0, 0xfa, 0x5b, 0xbc, 0x8e, 0xab, 0x5e, 0x4e, 0x3b, 0xba, 0xa2, 0x1d, 0x57, 0x79, 0x38, 0x1d, 0x13, 0x48, 0xde, 0x40, 0x2a, 0xfe, 0x2b, 0x7c, 0x9a, 0xfe, 0x66, 0x3f, 0x5e, 0xa7, 0x11, 0x16, 0xad, 0xea, 0x19, 0xa4, 0x04, 0xe1, 0xd8, 0x2f, 0xe2, 0x0e, 0x5c, 0x4c, 0x25, 0x23, 0xce, 0x6c, 0x77, 0xdf, 0x46, 0x34, 0x5d, 0xf8, 0xd9, 0xe7, 0x76, 0x0e, 0x3c, 0x9e, 0xf2, 0xf3, 0x79, 0xf5, 0xb9, 0x9d, 0x03, 0xcf, 0x84, 0x1e, 0xe6, 0xb5, 0xbc, 0x4c, 0xea, 0xdd, 0xb3, 0xc4, 0xb9, 0x9d, 0x87, 0xd5, 0x73, 0x3b, 0x2d, 0xce, 0x9c, 0xac, 0xf4, 0x7b, 0x39, 0x3c, 0xeb, 0xdc, 0xce, 0x81, 0xe7, 0xaf, 0xf6, 0x22, 0x7a, 0xe0, 0x27, 0x63, 0xbd, 0x88, 0xf2, 0x1c, 0x95, 0x8f, 0xda, 0x46, 0x29, 0x58, 0x6d, 0xc1, 0x87, 0x07, 0x87, 0x7a, 0xc7, 0x9e, 0xe2, 0x79, 0xe4, 0x75, 0xe2, 0x7b, 0x0d, 0xa0, 0xfa, 0x61, 0x96, 0x2b, 0xcb, 0xc1, 0x56, 0x21, 0xd7, 0x7b, 0xf6, 0xb8, 0xd7, 0x7b, 0xbe, 0xee, 0x05, 0x9b, 0x4b, 0xb2, 0xab, 0xde, 0xe6, 0xea, 0xdd, 0x2f, 0xb7, 0x83, 0x6d, 0xb0, 0x1d, 0xec, 0x5f, 0x47, 0xa9, 0x8e, 0x7b, 0xb4, 0x32, 0x25, 0xab, 0xb8, 0xe4, 0x4a, 0x90, 0xbd, 0x49, 0xa9, 0x4a, 0x92, 0x7d, 0xc9, 0xc4, 0xab, 0xde, 0x0d, 0x98, 0xaa, 0xde, 0xd3, 0xe7, 0x7d, 0xd5, 0xf3, 0x75, 0x1f, 0xd8, 0x65, 0x37, 0x48, 0x1b, 0xdc, 0x33, 0x5e, 0xa1, 0x1c, 0x0d, 0x6f, 0xb9, 0xcd, 0xd9, 0xf3, 0xc9, 0x50, 0x2d, 0x24, 0x8e, 0x6c, 0xc2, 0x9e, 0xbf, 0x05, 0x9f, 0x17, 0xe2, 0x15, 0xc3, 0xeb, 0x84, 0xea, 0x0b, 0x86, 0x4e, 0xeb, 0x8d, 0x77, 0x04, 0x93, 0x1d, 0xf6, 0x5f, 0xd6, 0xef, 0xbf, 0x0d, 0xe0, 0x85, 0x35, 0xff, 0x16, 0x39, 0xd3, 0x11, 0x7a, 0xc7, 0x59, 0xee, 0x48, 0x9b, 0x4a, 0x03, 0x5b, 0x10, 0xa2, 0xbd, 0x22, 0xdd, 0xc1, 0xea, 0xb1, 0x53, 0x11, 0x41, 0xa3, 0x2c, 0x6f, 0x6f, 0x69, 0xed, 0x16, 0x8f, 0xab, 0xbf, 0xd7, 0xbe, 0x54, 0x3c, 0xb5, 0xac, 0x5a, 0xac, 0xb4, 0x74, 0xb4, 0xb7, 0x5e, 0xed, 0xef, 0xf0, 0xb7, 0xd5, 0x7f, 0x1d, 0x0d, 0x0d, 0x6d, 0xf9, 0x74, 0x1a, 0x1a, 0xfa, 0xc9, 0x78, 0x1a, 0x3a, 0x58, 0xf6, 0x59, 0x34, 0x34, 0xb4, 0x7b, 0x3c, 0x0d, 0x0d, 0x3d, 0x73, 0x35, 0x0d, 0x0d, 0x3d, 0xfe, 0x9f, 0xa1, 0x21, 0xd5, 0x0f, 0x61, 0xff, 0x18, 0xaf, 0x84, 0x7d, 0x69, 0xdf, 0xce, 0x96, 0x19, 0x23, 0xd8, 0x66, 0xe4, 0x06, 0xc8, 0x87, 0x6d, 0xcc, 0x97, 0x27, 0x21, 0x5f, 0x2e, 0x89, 0x16, 0x29, 0x3d, 0x18, 0x0a, 0x14, 0x3a, 0x96, 0x37, 0xb3, 0x5f, 0xe8, 0xef, 0x64, 0x72, 0x5b, 0xe1, 0xaa, 0xdc, 0xb5, 0x59, 0xb9, 0xab, 0x3f, 0x2b, 0xf7, 0x98, 0x5c, 0x4d, 0x59, 0xb9, 0x42, 0xd7, 0xce, 0xa5, 0xfa, 0xbc, 0x2f, 0xe8, 0x34, 0x2a, 0xc6, 0xb7, 0x7f, 0x4e, 0xfb, 0x2f, 0x07, 0x89, 0x0f, 0x7e, 0xff, 0xfa, 0x41, 0x7a, 0x12, 0xef, 0x85, 0x52, 0xbd, 0x66, 0x50, 0x93, 0x1d, 0x12, 0x97, 0xb2, 0xdf, 0x70, 0x12, 0x8a, 0x67, 0xbf, 0x5f, 0x3b, 0x6d, 0x97, 0x12, 0x83, 0x22, 0x0e, 0xd9, 0xa7, 0xb9, 0x7e, 0x2f, 0xdd, 0x87, 0xe2, 0x45, 0x62, 0xbf, 0x47, 0x0b, 0xba, 0xa8, 0xb6, 0x5b, 0x8a, 0xaf, 0x17, 0xf1, 0xfd, 0x92, 0x88, 0x9f, 0x27, 0x47, 0x0e, 0xf0, 0x09, 0x08, 0x33, 0x69, 0x52, 0xb4, 0x5e, 0x1c, 0x78, 0x79, 0xb0, 0xd7, 0x73, 0x1a, 0xcc, 0x34, 0x6f, 0x90, 0xee, 0x3a, 0x39, 0xfe, 0x28, 0xce, 0x64, 0xc0, 0xb2, 0xa4, 0x44, 0xfa, 0x68, 0x81, 0xe8, 0xb7, 0x29, 0x21, 0x70, 0x90, 0x84, 0x38, 0x74, 0x41, 0xf5, 0x4b, 0x57, 0x46, 0xa7, 0x38, 0xe2, 0xba, 0xf8, 0xe4, 0xcc, 0x29, 0x0e, 0xd5, 0xef, 0x5e, 0xc0, 0xbb, 0x1d, 0xfc, 0xf8, 0xec, 0xc7, 0x67, 0x37, 0x41, 0x7c, 0x52, 0x92, 0x21, 0xf9, 0x0a, 0xc1, 0x7c, 0x52, 0xba, 0x7e, 0x04, 0xc7, 0x07, 0x42, 0x22, 0xee, 0x6f, 0xc0, 0x8c, 0x11, 0x37, 0xf5, 0x8d, 0x7d, 0xc6, 0x48, 0xdc, 0x8a, 0xf7, 0xad, 0x33, 0x46, 0xfc, 0x0f, 0xe0, 0xfd, 0xde, 0x19, 0x23, 0xdf, 0xa7, 0xf0, 0x27, 0x66, 0x8c, 0x3c, 0xc2, 0x77, 0x9c, 0x63, 0xd7, 0xb1, 0x44, 0xd0, 0x47, 0x92, 0xc0, 0x50, 0x02, 0xd6, 0xd3, 0xfd, 0xd0, 0x36, 0x78, 0x70, 0x4a, 0x10, 0xfa, 0x53, 0xeb, 0x8c, 0xa3, 0x2f, 0xc4, 0xb4, 0x28, 0x1b, 0xac, 0x45, 0xad, 0xa9, 0x8c, 0xce, 0x8f, 0xc5, 0xac, 0xea, 0xd3, 0xf9, 0x74, 0x8a, 0xa7, 0xb0, 0xa4, 0x55, 0x5c, 0x52, 0x1b, 0x95, 0x70, 0xd0, 0x04, 0xed, 0x5c, 0xd2, 0x0a, 0x58, 0x83, 0x25, 0x75, 0xa6, 0xd3, 0xb5, 0xc5, 0xcc, 0x58, 0x52, 0x4b, 0xba, 0x75, 0x8b, 0x54, 0x2a, 0x7a, 0x2c, 0x9d, 0xa2, 0x19, 0x4b, 0xfa, 0x26, 0x97, 0xb4, 0x80, 0x4b, 0xba, 0x1e, 0x9a, 0xb9, 0xa4, 0x32, 0x08, 0x63, 0x49, 0x0b, 0xd3, 0xe9, 0x6c, 0x31, 0x09, 0x4b, 0x0a, 0x65, 0x97, 0xc4, 0xd4, 0x9c, 0x29, 0x89, 0xf6, 0xf6, 0x8b, 0xfe, 0xfe, 0xc0, 0xac, 0xe1, 0xd1, 0xbd, 0x24, 0x49, 0x86, 0x1e, 0x6e, 0x7a, 0x08, 0x75, 0x51, 0xed, 0x8e, 0x87, 0x22, 0x17, 0x48, 0x83, 0xc4, 0x71, 0x12, 0xe7, 0x71, 0xe2, 0x04, 0x5a, 0xe5, 0x4d, 0xbc, 0xf1, 0xd3, 0xe6, 0x81, 0xc0, 0x20, 0x4b, 0x9d, 0x72, 0x41, 0x39, 0x94, 0x74, 0x42, 0xbe, 0x2c, 0x49, 0x11, 0x4b, 0xa7, 0xf4, 0xf6, 0xcf, 0xd7, 0x4b, 0x5f, 0xf1, 0x42, 0x89, 0xd8, 0x09, 0x17, 0x5c, 0x98, 0xc6, 0x97, 0xf4, 0x2c, 0xca, 0x4b, 0x29, 0xbe, 0x6b, 0x23, 0xb9, 0xc1, 0x5e, 0x9e, 0xb5, 0x0a, 0xd5, 0x8f, 0xb3, 0x6f, 0x49, 0xdb, 0x24, 0xea, 0x3f, 0x5b, 0x7a, 0x27, 0x2e, 0x99, 0xd1, 0x15, 0xfa, 0xba, 0x20, 0x5c, 0x4e, 0x34, 0x89, 0xf3, 0x78, 0xc9, 0x14, 0x1f, 0xd8, 0xb2, 0x4f, 0x31, 0x22, 0x2d, 0x6c, 0x0a, 0xf6, 0x45, 0xb4, 0xf6, 0xd2, 0xac, 0x12, 0x59, 0xba, 0xa0, 0xd9, 0xda, 0x69, 0xe9, 0x34, 0xf3, 0x19, 0xc3, 0xb8, 0x52, 0x65, 0x84, 0x14, 0x0c, 0xe4, 0xbb, 0x32, 0xbb, 0x0c, 0x7b, 0x46, 0xa6, 0xe8, 0x7f, 0x7e, 0x3b, 0x6c, 0x8a, 0x54, 0x23, 0x0d, 0x6d, 0x92, 0x4b, 0x51, 0xee, 0x2c, 0x21, 0xa8, 0xd2, 0x29, 0x13, 0x76, 0x77, 0x56, 0xda, 0xbe, 0x60, 0x5f, 0xb4, 0x28, 0xeb, 0x84, 0xdc, 0x86, 0x70, 0x4e, 0xb6, 0x6c, 0xa2, 0xfa, 0x41, 0xcd, 0xb1, 0xbb, 0x69, 0x27, 0x84, 0x30, 0x77, 0xe8, 0xcd, 0xba, 0x33, 0x60, 0xa6, 0x1d, 0x97, 0xc6, 0x01, 0xa5, 0xe2, 0xf4, 0x38, 0xbf, 0xbb, 0x47, 0x90, 0x6b, 0x1f, 0x8d, 0x4b, 0x12, 0xe9, 0x29, 0x47, 0x9e, 0xc7, 0xeb, 0x00, 0x24, 0x7e, 0xa7, 0xfa, 0xdd, 0xbd, 0xd6, 0xd9, 0x71, 0x31, 0xbb, 0x5c, 0x23, 0x46, 0xb9, 0xf5, 0xbf, 0xc0, 0x5d, 0x3a, 0xcd, 0x24, 0x7c, 0x16, 0xdb, 0xdf, 0xba, 0xa6, 0xb5, 0xad, 0x23, 0xb6, 0xaa, 0xb5, 0xbd, 0x4b, 0x99, 0xdf, 0xba, 0x78, 0x55, 0xd6, 0xbc, 0x70, 0xb4, 0x25, 0xed, 0xff, 0x56, 0xf9, 0x7c, 0xff, 0xb7, 0x28, 0x57, 0xf1, 0x79, 0x62, 0x6c, 0x9b, 0x7a, 0x9e, 0xf8, 0x77, 0x25, 0x5f, 0xfc, 0x3c, 0xf1, 0x91, 0x4b, 0x9f, 0x7e, 0x9e, 0xf8, 0x77, 0xfa, 0xf1, 0xe7, 0x89, 0x7f, 0xe7, 0xff, 0xac, 0xf3, 0xc4, 0xbf, 0x9b, 0x34, 0xfe, 0x3c, 0xf1, 0xef, 0x2c, 0x57, 0x9f, 0x27, 0x3e, 0x92, 0xb8, 0xea, 0x3c, 0xb1, 0xf2, 0x45, 0xfd, 0xdf, 0x22, 0x07, 0xd6, 0x4e, 0xc6, 0xb6, 0xfe, 0x8e, 0xd6, 0x03, 0x96, 0x41, 0x3e, 0x95, 0xe0, 0x78, 0x91, 0x7c, 0x9c, 0x66, 0xfa, 0xfb, 0xe8, 0x7a, 0x48, 0x1c, 0xbb, 0x2c, 0x4d, 0x35, 0x4e, 0xc7, 0xe7, 0x9f, 0xe0, 0xf5, 0x22, 0x24, 0x7e, 0xef, 0x16, 0xc8, 0x5d, 0xb5, 0x7c, 0xf5, 0xd2, 0xf1, 0x3d, 0x3d, 0x26, 0xec, 0xbf, 0xc8, 0x9b, 0x1c, 0x42, 0xd0, 0x85, 0xd7, 0x20, 0xf5, 0x76, 0x1d, 0x7d, 0x50, 0xa0, 0x4c, 0x9f, 0x8e, 0xd2, 0xc1, 0x9a, 0xc5, 0x6d, 0xcb, 0x5b, 0x94, 0x7b, 0xda, 0x97, 0x77, 0x95, 0x67, 0xcb, 0x01, 0xc7, 0x9a, 0x55, 0x39, 0xa0, 0x26, 0xd6, 0xfc, 0x19, 0xfe, 0xec, 0xcd, 0xe9, 0x1e, 0x9f, 0x2e, 0x7a, 0x1c, 0x5b, 0xa7, 0xfa, 0xb3, 0xff, 0xbd, 0xf9, 0x8b, 0xf7, 0xf8, 0xd1, 0xe3, 0x9f, 0xde, 0xe3, 0x47, 0xcf, 0x8e, 0xef, 0xf1, 0xdf, 0x57, 0x7e, 0x56, 0x8f, 0xff, 0x5e, 0x3b, 0xbe, 0xc7, 0x8f, 0x5e, 0xbc, 0x5a, 0x8a, 0x38, 0x7a, 0xea, 0x2a, 0x7f, 0xf6, 0xcd, 0x5f, 0xdc, 0x9f, 0xbd, 0xd3, 0xe2, 0xea, 0x01, 0xcb, 0xc1, 0x0f, 0x20, 0x73, 0x02, 0xf2, 0x50, 0x4c, 0x4a, 0xf3, 0x3d, 0xc4, 0x50, 0x89, 0xd1, 0x1e, 0xa2, 0x1d, 0xe0, 0xdf, 0x17, 0x75, 0x6a, 0x76, 0x3e, 0xd8, 0xea, 0x9a, 0x75, 0x7e, 0x8c, 0x87, 0xd8, 0xfd, 0xb3, 0xcf, 0xc2, 0x04, 0x3a, 0xd7, 0x63, 0xaf, 0x24, 0x5d, 0x67, 0x2a, 0x6a, 0x50, 0x59, 0xb1, 0xaf, 0x12, 0x6d, 0x2d, 0x54, 0x57, 0x01, 0xb1, 0xac, 0x50, 0x1d, 0xe5, 0x0e, 0x5e, 0x9d, 0xdb, 0xfb, 0xfc, 0x8b, 0x90, 0x15, 0xfe, 0x6a, 0x0a, 0xbe, 0x14, 0xdd, 0x1d, 0x1b, 0x81, 0xa4, 0x3e, 0x20, 0xfc, 0x7b, 0xff, 0xa1, 0x18, 0xaf, 0x5b, 0x21, 0x71, 0xa2, 0x47, 0x74, 0xf2, 0xea, 0x65, 0xad, 0x6d, 0x6d, 0xe3, 0x09, 0x6f, 0x6c, 0xe0, 0x7f, 0xad, 0x1f, 0x43, 0xfe, 0x37, 0xbf, 0x66, 0x1e, 0x55, 0x61, 0x6f, 0x5d, 0xb5, 0xa4, 0xb5, 0x05, 0xfe, 0xfb, 0xdf, 0xff, 0xbf, 0xfd, 0xcb, 0xfe, 0x0a, 0x8a, 0x89, 0x0d, 0x7c, 0x0d, 0xb3, 0xc1, 0x59, 0x03, 0xbe, 0x9a, 0xba, 0xee, 0xd6, 0xa5, 0xf7, 0x74, 0xb5, 0xc2, 0xdd, 0x77, 0xb7, 0xb4, 0x2e, 0xb9, 0x27, 0x7a, 0xf7, 0xaa, 0xd6, 0x55, 0x50, 0x5a, 0x5a, 0xaa, 0xf8, 0x3a, 0x56, 0xad, 0xa2, 0xcf, 0x6f, 0x3a, 0x5b, 0xbb, 0xee, 0xe9, 0x6c, 0x6f, 0x6d, 0x51, 0xfe, 0x96, 0xbe, 0x49, 0x8a, 0x74, 0xb6, 0xe2, 0xe3, 0xea, 0xe5, 0xd1, 0xf6, 0xc5, 0x6d, 0x8a, 0xab, 0x7b, 0x4a, 0x5b, 0x77, 0xce, 0x67, 0xa4, 0xbe, 0xa7, 0xfd, 0x5a, 0xe9, 0xe7, 0xb6, 0xae, 0xea, 0xe8, 0xfc, 0x9e, 0xd2, 0xd6, 0xba, 0x78, 0xa5, 0xd2, 0x11, 0x51, 0xa6, 0xb4, 0xdd, 0xa3, 0x2c, 0xf9, 0x5e, 0x57, 0xeb, 0x6a, 0x24, 0xf2, 0x26, 0x1f, 0x34, 0xb5, 0xae, 0xbe, 0xa7, 0xad, 0xab, 0x02, 0xee, 0x00, 0x26, 0x59, 0x68, 0xec, 0xec, 0x58, 0x4a, 0x9f, 0x0c, 0x4d, 0x69, 0x6b, 0x51, 0x5a, 0xdb, 0x5b, 0x96, 0xb7, 0x47, 0x73, 0x20, 0x26, 0xc2, 0xe0, 0xdb, 0xd8, 0x0a, 0x8a, 0xf8, 0x4e, 0x0e, 0x84, 0x5a, 0xff, 0x56, 0xe1, 0x0c, 0x4a, 0x2c, 0x93, 0x21, 0x67, 0x4c, 0xc3, 0x5b, 0x97, 0x2e, 0xeb, 0x00, 0xfa, 0xa6, 0xe9, 0x56, 0x50, 0xf0, 0x2f, 0x27, 0x8b, 0xef, 0xbe, 0xbd, 0x77, 0xac, 0xbf, 0xf9, 0xda, 0x99, 0xf6, 0x40, 0x49, 0x35, 0x68, 0xc5, 0x89, 0xc9, 0xc4, 0xb1, 0x12, 0x37, 0xad, 0xb6, 0x46, 0x26, 0xd6, 0xbd, 0x0f, 0x0b, 0x15, 0x71, 0xfa, 0x2e, 0xae, 0xde, 0x1f, 0x54, 0xdc, 0xf6, 0x65, 0x90, 0x43, 0xbc, 0xf7, 0xcd, 0x1f, 0xc4, 0xec, 0x14, 0xc6, 0xe7, 0x0f, 0xf5, 0x7c, 0x4a, 0x3e, 0x9f, 0xce, 0x3a, 0xdb, 0x9a, 0x38, 0xe5, 0xe6, 0xb5, 0x05, 0x61, 0x90, 0x16, 0x60, 0xb8, 0x39, 0x9a, 0x83, 0xb9, 0xdd, 0xa1, 0x67, 0x47, 0x16, 0x85, 0x8d, 0xea, 0x53, 0xb3, 0x03, 0xda, 0x8a, 0x62, 0xe6, 0xc1, 0xf5, 0x9d, 0xe6, 0x9d, 0xf1, 0xc8, 0xa4, 0xec, 0x7c, 0x61, 0x2b, 0xef, 0x72, 0x27, 0x4e, 0x3e, 0xd5, 0x3c, 0xb0, 0xe3, 0x07, 0x51, 0x90, 0xac, 0x4a, 0x29, 0x18, 0xbd, 0x4f, 0xc3, 0x6e, 0x65, 0x25, 0xc4, 0x49, 0xb2, 0x9f, 0x73, 0x1a, 0xac, 0xb3, 0x51, 0xca, 0x2f, 0xdd, 0xe2, 0xdd, 0xd2, 0xa9, 0x51, 0x7a, 0xd5, 0xf3, 0xa2, 0x89, 0x73, 0xb5, 0xa5, 0x20, 0xf2, 0xfe, 0x29, 0xc8, 0x3e, 0x5a, 0xcd, 0xc1, 0xf5, 0x6d, 0x8b, 0x50, 0x7b, 0x90, 0x22, 0xf9, 0x4e, 0xd9, 0x39, 0x0d, 0xf5, 0x00, 0x2a, 0x77, 0x11, 0x96, 0x55, 0xdc, 0x38, 0x80, 0xe1, 0xc0, 0xde, 0x98, 0xa7, 0x41, 0x35, 0xe7, 0x31, 0x67, 0x9e, 0x39, 0x4d, 0x35, 0x71, 0xf8, 0x98, 0x79, 0x5f, 0x7c, 0xc7, 0xfa, 0xe8, 0xc2, 0x29, 0x2b, 0xc1, 0x0c, 0xe6, 0x29, 0xf3, 0xc0, 0x3a, 0x06, 0x56, 0xbf, 0x82, 0xa5, 0x46, 0xad, 0xaa, 0x4f, 0xe7, 0x74, 0xd9, 0x36, 0x2c, 0x27, 0xea, 0xe0, 0x75, 0x58, 0x07, 0xce, 0x34, 0x66, 0x84, 0xbc, 0xfa, 0xe0, 0x3e, 0xe3, 0x0e, 0x30, 0xf4, 0xc3, 0xf8, 0x5a, 0x1a, 0x07, 0xe8, 0x84, 0x01, 0xbf, 0x6f, 0xe2, 0xb5, 0x4a, 0x73, 0xba, 0xb4, 0x7b, 0x1b, 0x07, 0x1c, 0x8f, 0x78, 0x1f, 0xa1, 0x33, 0x08, 0xfc, 0x5e, 0x43, 0xfb, 0xb4, 0x6b, 0x73, 0x14, 0x9d, 0x58, 0x95, 0xdf, 0xb4, 0x89, 0x65, 0x25, 0xdb, 0xe7, 0xcb, 0x4a, 0xc9, 0xfb, 0xc4, 0xcc, 0x89, 0xfc, 0x59, 0x95, 0x95, 0xfe, 0xb0, 0xe1, 0x8b, 0xcf, 0x9c, 0x7f, 0x58, 0xf0, 0xe9, 0x33, 0xe7, 0x1f, 0x22, 0xe3, 0x67, 0xce, 0x37, 0x9f, 0xf9, 0xac, 0x99, 0xf3, 0x0f, 0xf7, 0x8e, 0x9f, 0x39, 0xff, 0xd0, 0x7e, 0xb5, 0xac, 0xf4, 0x87, 0x45, 0x57, 0xc9, 0x4a, 0xb6, 0x2f, 0x2a, 0x2b, 0x91, 0xb7, 0x5a, 0x95, 0xbe, 0x73, 0x71, 0x6e, 0xdb, 0xf3, 0xef, 0x0f, 0x28, 0x1e, 0xc2, 0xde, 0x9b, 0x83, 0x0d, 0x6f, 0xa1, 0xb0, 0x0f, 0xa1, 0x23, 0x59, 0x32, 0x08, 0xe6, 0xc7, 0x4b, 0x46, 0x2d, 0x57, 0x26, 0xac, 0xfc, 0x31, 0x6b, 0xef, 0x7e, 0xf4, 0xa8, 0x03, 0xa2, 0xf5, 0xdc, 0xa2, 0x41, 0x82, 0xa2, 0xd4, 0xc1, 0x98, 0xb1, 0x23, 0xb6, 0x13, 0x7f, 0x7c, 0xc2, 0x0e, 0x6b, 0x92, 0x65, 0x7e, 0xf2, 0xba, 0x6e, 0xc7, 0xf7, 0xb7, 0xb7, 0x9c, 0xda, 0xc8, 0xe1, 0x3f, 0x11, 0x61, 0x36, 0x7f, 0x66, 0x3f, 0x8b, 0xb4, 0x17, 0x5a, 0x4f, 0x75, 0x17, 0x67, 0xad, 0x06, 0xac, 0xc9, 0x9c, 0x3a, 0xc5, 0x10, 0x33, 0xa5, 0x1b, 0x1f, 0x32, 0x1a, 0x52, 0x43, 0x9c, 0xa9, 0x90, 0xe4, 0xf1, 0x31, 0x2b, 0x0a, 0x7b, 0xaf, 0x8a, 0xff, 0xe9, 0x55, 0x21, 0x7d, 0x63, 0x72, 0xf4, 0xa8, 0x7b, 0xb6, 0x32, 0xa6, 0x30, 0xdb, 0x33, 0x27, 0x64, 0x0b, 0x53, 0x2b, 0x5c, 0x99, 0x9c, 0x89, 0x63, 0x57, 0x85, 0x1c, 0x16, 0x67, 0x62, 0x5d, 0x94, 0xdb, 0x4a, 0xbb, 0x0e, 0x25, 0x4e, 0x28, 0xc2, 0xb8, 0x62, 0x8c, 0x7b, 0x42, 0xac, 0x6a, 0x8d, 0x49, 0xff, 0xe8, 0x55, 0x25, 0x54, 0x5c, 0xbb, 0xfe, 0x44, 0x49, 0xaa, 0x7e, 0x01, 0x67, 0xa2, 0x60, 0x4c, 0xba, 0x5a, 0x00, 0xcd, 0x39, 0x75, 0x87, 0xf9, 0xa4, 0x48, 0x49, 0xf2, 0x70, 0x70, 0x1b, 0x69, 0xed, 0x8a, 0x03, 0x94, 0x1d, 0xdb, 0x70, 0x0c, 0xea, 0x63, 0xc9, 0xc9, 0xa8, 0xc7, 0x73, 0x68, 0x49, 0x2a, 0x34, 0x52, 0xcc, 0xe7, 0x7a, 0xa7, 0x1a, 0xce, 0xc8, 0x71, 0xfa, 0x0a, 0xcb, 0xcc, 0xbf, 0xe2, 0x8b, 0x1f, 0xea, 0x15, 0xcc, 0xe1, 0xe0, 0x2f, 0xbf, 0x2a, 0xca, 0x9d, 0xe0, 0x28, 0x73, 0x62, 0xfe, 0xfb, 0x23, 0x16, 0xa7, 0x1e, 0xc7, 0xe3, 0xae, 0xc4, 0x8b, 0xb4, 0x77, 0x10, 0x96, 0xed, 0xb3, 0x4a, 0x69, 0x5f, 0x0a, 0x66, 0x0d, 0x27, 0x96, 0x28, 0xba, 0xec, 0xbd, 0x44, 0xa4, 0x8f, 0x5a, 0x5b, 0x8e, 0x1d, 0x4a, 0x74, 0x65, 0xf5, 0x08, 0x75, 0x7b, 0xd0, 0x8d, 0xfa, 0x9b, 0x96, 0x9e, 0x47, 0x0f, 0xa9, 0xbb, 0xb1, 0xa8, 0x0f, 0x27, 0xca, 0xb0, 0x94, 0x82, 0xf4, 0xfb, 0xc3, 0xfa, 0xfb, 0xa8, 0x34, 0x0c, 0xdb, 0x89, 0x75, 0x59, 0x9d, 0xf5, 0x50, 0xe6, 0x0c, 0x82, 0x03, 0x69, 0x77, 0x24, 0x0c, 0x09, 0x3f, 0xdd, 0x33, 0xe7, 0xbd, 0x4b, 0x3b, 0xa0, 0xb1, 0xd4, 0x09, 0xcd, 0x4e, 0x1d, 0x96, 0x73, 0xd2, 0xe9, 0x86, 0x6a, 0x94, 0xf7, 0xc0, 0x0a, 0xd9, 0x50, 0x60, 0x68, 0x25, 0x9d, 0x29, 0xd5, 0x35, 0xd5, 0x9d, 0x83, 0x7c, 0x4e, 0xf9, 0x62, 0x89, 0x9b, 0xe8, 0xf6, 0x8f, 0xdb, 0x78, 0x8f, 0x2b, 0x19, 0xbe, 0x20, 0xc6, 0xed, 0x82, 0xbd, 0x81, 0xf5, 0x7e, 0x7f, 0x24, 0xb3, 0x0a, 0xd0, 0x63, 0xcb, 0xe9, 0x82, 0x35, 0xc0, 0xfe, 0xd9, 0x2f, 0x96, 0x41, 0xc4, 0x6a, 0xcb, 0x29, 0xa4, 0x3d, 0x5e, 0xf5, 0x3d, 0x5a, 0xae, 0xd4, 0x23, 0x26, 0xb5, 0x9d, 0x89, 0x9d, 0xf1, 0x68, 0x4e, 0x30, 0xbe, 0x6a, 0x52, 0x53, 0x1c, 0x31, 0xa6, 0x4d, 0x6b, 0xfa, 0x15, 0xa7, 0x1e, 0x6a, 0x1e, 0xe8, 0x86, 0x7b, 0xa5, 0x1f, 0xff, 0x0a, 0x79, 0xfd, 0x9a, 0x74, 0xf8, 0xc4, 0xe6, 0x01, 0xa7, 0xce, 0xfb, 0xb3, 0xd9, 0xc3, 0xa3, 0x5d, 0xa1, 0x2d, 0x08, 0x9f, 0xdb, 0xa9, 0xa3, 0x93, 0xff, 0xf8, 0x9b, 0x33, 0x77, 0x38, 0xe1, 0x08, 0x6d, 0x2d, 0x01, 0x82, 0x73, 0x74, 0x19, 0x73, 0x88, 0x75, 0x11, 0xd0, 0xbe, 0x14, 0xf4, 0x47, 0xb0, 0x62, 0x3e, 0x37, 0xf5, 0x3a, 0xf2, 0x7c, 0x5b, 0xc9, 0x4a, 0x30, 0x86, 0x27, 0x62, 0x8e, 0x69, 0x58, 0x22, 0xe7, 0xc4, 0x5c, 0xf3, 0x88, 0x73, 0xd0, 0xc9, 0x1b, 0xed, 0x83, 0xb4, 0x86, 0xff, 0x02, 0xcd, 0x52, 0xc7, 0xc3, 0xa0, 0x8d, 0xd8, 0xcc, 0x04, 0x73, 0x72, 0x45, 0x99, 0x28, 0xd7, 0x5a, 0x4e, 0x5c, 0x6c, 0x43, 0xd4, 0x66, 0xd3, 0x50, 0x78, 0x22, 0xce, 0xfc, 0x70, 0x8b, 0x8d, 0x5b, 0x3a, 0xfa, 0xec, 0x34, 0xb7, 0x94, 0x5f, 0xd5, 0x03, 0x52, 0x18, 0xa0, 0x8f, 0x6a, 0x94, 0x6e, 0x8d, 0xac, 0xe9, 0x44, 0x0e, 0xc2, 0x65, 0x14, 0x33, 0xf7, 0xf4, 0xda, 0x34, 0x76, 0x7e, 0x4f, 0xac, 0xc5, 0x5e, 0xad, 0x34, 0x4e, 0x03, 0x3d, 0xfc, 0x6d, 0xb4, 0x8c, 0xc7, 0xf8, 0xd3, 0xa2, 0x2e, 0xda, 0x95, 0x8f, 0x2a, 0x36, 0x73, 0x57, 0x82, 0xdf, 0x9f, 0x71, 0x40, 0xa4, 0x08, 0xe9, 0xb5, 0x8c, 0xdf, 0x5a, 0xc2, 0x56, 0xc4, 0xcb, 0xf7, 0xc2, 0x39, 0xb4, 0xf9, 0x13, 0xd6, 0x12, 0x65, 0xd1, 0x17, 0x00, 0xb4, 0x07, 0x1f, 0xda, 0x35, 0x72, 0x2f, 0xf5, 0x07, 0xe2, 0x4c, 0xfb, 0xe3, 0x5f, 0x75, 0x23, 0xc4, 0x4e, 0x0d, 0x86, 0x15, 0x21, 0x45, 0x58, 0x09, 0xfa, 0x91, 0x26, 0x82, 0xbe, 0x1b, 0x7e, 0xfc, 0xab, 0x1e, 0x60, 0x2f, 0xea, 0xb5, 0x18, 0x46, 0xb9, 0x0d, 0x78, 0xdf, 0xc9, 0xbc, 0x73, 0x56, 0xd8, 0xd8, 0x0d, 0xde, 0x59, 0x94, 0xc2, 0x96, 0xc3, 0x6d, 0x7a, 0x15, 0x5b, 0x0b, 0x72, 0x4f, 0xf6, 0x2a, 0x84, 0xc3, 0xad, 0xd0, 0x69, 0xcf, 0x65, 0x50, 0x09, 0xb5, 0xce, 0x36, 0x14, 0x00, 0xfc, 0xf8, 0x9b, 0x0f, 0xee, 0xe0, 0x2c, 0x9c, 0x8f, 0xea, 0x0f, 0xbe, 0xea, 0x8c, 0xf5, 0x1b, 0xa1, 0x2c, 0xac, 0x25, 0x0a, 0x0c, 0xae, 0x8f, 0x36, 0x62, 0x6a, 0x97, 0x75, 0x04, 0x6c, 0x36, 0xad, 0xdd, 0x58, 0xc2, 0x14, 0xcf, 0xed, 0x47, 0xaa, 0xc6, 0x11, 0x81, 0x70, 0x5d, 0xd9, 0x65, 0x07, 0x3a, 0xcd, 0x24, 0x1f, 0xa5, 0x94, 0xf3, 0xfb, 0xcb, 0x02, 0xc1, 0xa2, 0xc8, 0x70, 0x31, 0xe6, 0xc0, 0x4b, 0x41, 0xf8, 0xb0, 0xe7, 0xaf, 0x74, 0x3a, 0x2c, 0x8f, 0x3e, 0x47, 0x73, 0x5a, 0x58, 0x8f, 0x23, 0xd6, 0xd5, 0x4d, 0x6b, 0x87, 0xf3, 0xc3, 0xda, 0xe2, 0xc1, 0xa6, 0xf5, 0x7c, 0x42, 0x4c, 0x6b, 0x2d, 0x8a, 0x7c, 0xe4, 0x2d, 0x24, 0xea, 0xc0, 0xd4, 0xa7, 0x62, 0x40, 0xdf, 0x78, 0xb9, 0x32, 0xe7, 0xa5, 0x0e, 0x60, 0xfa, 0xda, 0xc9, 0x1d, 0x04, 0xf3, 0xd4, 0x20, 0xe4, 0x30, 0xbe, 0xff, 0x49, 0xf4, 0xcc, 0xc8, 0x0a, 0x9e, 0x1d, 0xf3, 0xb3, 0xf6, 0xf9, 0xe9, 0x8c, 0x7c, 0x75, 0x58, 0x4b, 0xe7, 0x21, 0x08, 0xf3, 0xc8, 0x51, 0x6a, 0x0f, 0xf7, 0x1d, 0xee, 0x43, 0xbe, 0xe4, 0x62, 0xd8, 0xe9, 0x4b, 0x80, 0x4a, 0xa4, 0x58, 0xb3, 0x33, 0xcf, 0x69, 0xc4, 0xfa, 0x5e, 0x67, 0x0c, 0x54, 0xb2, 0x5f, 0x76, 0xf7, 0x8e, 0xe7, 0xb0, 0xff, 0x00, 0xfa, 0xd7, 0x40, 0xdd, 0xf0, 0xf0, 0x33, 0x5d, 0x81, 0xc3, 0x03, 0x74, 0x26, 0xf1, 0xe4, 0xf9, 0x98, 0xf4, 0xee, 0x36, 0x2c, 0xcd, 0xbd, 0x27, 0xae, 0x78, 0xa8, 0xd4, 0x3d, 0x71, 0x86, 0xbc, 0x34, 0xd8, 0x1b, 0x69, 0xc2, 0xfa, 0x02, 0x88, 0x8b, 0xcd, 0xd8, 0x5a, 0x3e, 0xd9, 0xfc, 0xc7, 0x97, 0x9d, 0x40, 0x5f, 0x40, 0x66, 0xbe, 0x1b, 0x4b, 0xbc, 0x10, 0x76, 0x04, 0x7b, 0xa3, 0x8e, 0xab, 0x52, 0x7e, 0x70, 0x55, 0xca, 0x1d, 0x74, 0xba, 0xa2, 0x69, 0x5d, 0x4c, 0xd9, 0xb1, 0x2e, 0xb2, 0x31, 0x88, 0x6d, 0x88, 0x56, 0x64, 0xb7, 0xad, 0xee, 0x03, 0x68, 0xc0, 0xfa, 0xab, 0x37, 0xc7, 0xa7, 0x48, 0x84, 0xff, 0x61, 0x23, 0x8d, 0x02, 0x9e, 0x8f, 0x6e, 0xc2, 0xd1, 0xb4, 0x6b, 0x78, 0x0d, 0xe5, 0x9f, 0xda, 0x01, 0x7e, 0xfe, 0x96, 0x69, 0xd7, 0xf0, 0x1e, 0xbb, 0xbb, 0x79, 0xc0, 0x95, 0x1b, 0x2d, 0xb0, 0x4d, 0x97, 0xf2, 0x05, 0xa5, 0xf3, 0xb8, 0xdb, 0xf5, 0xc9, 0x71, 0x94, 0x48, 0xb0, 0x6d, 0x6f, 0x7e, 0x55, 0xa5, 0x95, 0xed, 0x50, 0x1b, 0xad, 0x41, 0x3a, 0x28, 0x3d, 0xbe, 0xa1, 0xa4, 0xfe, 0x77, 0xaf, 0x66, 0xf8, 0x01, 0x4a, 0x33, 0xda, 0x0e, 0xfd, 0xbc, 0xf8, 0x2d, 0x59, 0xa3, 0xfc, 0x93, 0x06, 0xec, 0x75, 0xa3, 0x4d, 0x2f, 0xe8, 0xda, 0x8b, 0x79, 0xa9, 0xb6, 0x4f, 0x9e, 0xa1, 0xf3, 0x9a, 0x4a, 0x9c, 0xbe, 0xcb, 0xc4, 0x71, 0xb4, 0x97, 0x4e, 0x62, 0xc2, 0xee, 0xe0, 0x2f, 0xe8, 0x14, 0x26, 0x3c, 0xcf, 0x29, 0x36, 0x36, 0x0f, 0xf0, 0x78, 0x3e, 0x1c, 0xb5, 0xf2, 0xfd, 0xd7, 0x7c, 0xaa, 0x10, 0xe0, 0x50, 0x24, 0x86, 0x7c, 0x47, 0x1d, 0x35, 0x25, 0x10, 0x5d, 0x32, 0x6e, 0xec, 0x05, 0x52, 0x63, 0x2f, 0xf9, 0x18, 0xbe, 0x95, 0x06, 0x9f, 0x46, 0x98, 0x8a, 0xc4, 0x28, 0x19, 0x5e, 0x20, 0xee, 0x9f, 0x14, 0x97, 0x00, 0x9f, 0x42, 0x34, 0x3b, 0x75, 0x38, 0xa6, 0x0e, 0x63, 0xc8, 0xa3, 0x28, 0x47, 0xa5, 0x47, 0xd8, 0x27, 0x74, 0xea, 0xc5, 0x2c, 0xd2, 0x5e, 0x7e, 0x93, 0x62, 0xf0, 0x3e, 0x4c, 0xf4, 0x1b, 0x2d, 0x22, 0x9a, 0x50, 0xe2, 0x84, 0x4b, 0xc6, 0x4d, 0xa7, 0xfa, 0x0d, 0xa1, 0xca, 0xbd, 0x70, 0xbc, 0x55, 0x62, 0xda, 0x6e, 0xe2, 0xfc, 0x5d, 0x51, 0x3e, 0x1b, 0xa5, 0x7e, 0x5d, 0x32, 0xfb, 0x1c, 0xe0, 0xf8, 0x74, 0x9a, 0x31, 0x4f, 0xa4, 0x04, 0xf9, 0x77, 0x14, 0x46, 0x9a, 0xc2, 0x70, 0x65, 0x43, 0x09, 0xd0, 0x99, 0xe9, 0x2b, 0xf7, 0xd2, 0x77, 0xa7, 0xd5, 0xb5, 0x25, 0x1d, 0x60, 0xa7, 0x13, 0x2b, 0x48, 0x8b, 0x95, 0xd5, 0x4e, 0xfe, 0x56, 0x79, 0xd7, 0x27, 0x0e, 0xbb, 0x7b, 0xce, 0x07, 0x60, 0xf7, 0xb6, 0xd2, 0xd7, 0x2e, 0x4e, 0x33, 0x9d, 0x78, 0x75, 0xe6, 0x12, 0x67, 0x96, 0x37, 0x72, 0x3b, 0x8a, 0x22, 0xee, 0x60, 0x07, 0x4c, 0x8a, 0x2e, 0x0a, 0xfa, 0x59, 0x96, 0x2c, 0xe0, 0xd8, 0xc4, 0x07, 0x97, 0xb9, 0x15, 0xe2, 0x7d, 0xd7, 0x27, 0x67, 0x4b, 0x48, 0x76, 0x2c, 0xc5, 0xf9, 0x76, 0xd7, 0xe5, 0x05, 0xfc, 0x54, 0x8d, 0x4f, 0x8b, 0x58, 0x1a, 0xb2, 0x73, 0x7e, 0xfd, 0xac, 0xf7, 0x21, 0x9f, 0x56, 0x11, 0x30, 0x36, 0x97, 0xdb, 0xbe, 0x25, 0x96, 0x33, 0x05, 0xe9, 0xdf, 0xbe, 0x4e, 0x2d, 0x89, 0x4e, 0x95, 0x10, 0x05, 0xd5, 0xd0, 0x97, 0xb6, 0x1f, 0x75, 0x85, 0x1e, 0xc6, 0xb0, 0x7c, 0x0e, 0xf9, 0x3a, 0xef, 0x8b, 0x14, 0x21, 0x6d, 0x38, 0xa2, 0x0a, 0xaf, 0x2f, 0xf5, 0x93, 0x1c, 0x5a, 0x37, 0x7c, 0xb9, 0x0c, 0xa9, 0x18, 0x5b, 0xf1, 0x31, 0xbf, 0xb3, 0xf4, 0x56, 0xa0, 0x68, 0x1a, 0xde, 0xaa, 0x2d, 0xa6, 0x2f, 0x14, 0x43, 0x77, 0x26, 0x8f, 0xe2, 0x4c, 0x55, 0x53, 0xb2, 0x4a, 0x7c, 0x5b, 0x48, 0x29, 0x2f, 0x57, 0xdb, 0xdd, 0xdd, 0x67, 0x8e, 0xfe, 0x90, 0xce, 0xe2, 0x7b, 0x7f, 0xe6, 0xd4, 0xd2, 0xd7, 0x23, 0xdf, 0x79, 0x34, 0xb4, 0x65, 0xed, 0xb1, 0x63, 0xa9, 0x30, 0x5d, 0x68, 0x8b, 0x77, 0x55, 0x32, 0x41, 0x5f, 0x40, 0xcd, 0x1d, 0xbe, 0x5c, 0xc1, 0xa7, 0x18, 0x95, 0xf2, 0xf5, 0x69, 0x19, 0xb2, 0x8e, 0xda, 0x7f, 0xfe, 0x51, 0xc6, 0x8e, 0x19, 0x67, 0x86, 0xfd, 0xf4, 0xbd, 0xb4, 0x2e, 0x4c, 0x5f, 0x45, 0x5c, 0x38, 0x8e, 0xe5, 0x25, 0x3e, 0x38, 0x21, 0xbe, 0x86, 0x2e, 0xc1, 0x3e, 0x25, 0xca, 0xa3, 0x16, 0xf3, 0x89, 0x47, 0x9e, 0x2d, 0xf0, 0xa2, 0x6f, 0xb8, 0x12, 0x4e, 0xad, 0x98, 0x01, 0x75, 0xcf, 0x70, 0x49, 0x4a, 0xa4, 0x38, 0xf8, 0x8b, 0xe4, 0xf9, 0x68, 0x21, 0xc6, 0xd2, 0x69, 0x56, 0xe4, 0x59, 0x84, 0xd9, 0x44, 0x3d, 0xc7, 0x16, 0x10, 0x34, 0xd8, 0xce, 0x9f, 0x28, 0xd3, 0x52, 0xf2, 0x42, 0xe3, 0x80, 0x90, 0x18, 0x22, 0x16, 0xd4, 0x41, 0x94, 0x1d, 0xdb, 0x51, 0xa2, 0xd0, 0x12, 0xdc, 0x84, 0xa5, 0x48, 0x0d, 0xce, 0x5c, 0x39, 0xa8, 0x0d, 0x98, 0xff, 0xf1, 0x0c, 0x14, 0xac, 0xe2, 0x70, 0xe2, 0x66, 0x0a, 0x9f, 0xbf, 0x18, 0x39, 0x8d, 0xb4, 0x5b, 0x24, 0xc6, 0xfe, 0x9b, 0xb3, 0x02, 0xdd, 0x92, 0x0b, 0x4b, 0xd6, 0x53, 0x1a, 0xb5, 0x27, 0xb8, 0xff, 0x75, 0x2d, 0xc8, 0xd3, 0x30, 0x8c, 0xbe, 0x77, 0x11, 0x21, 0xda, 0xf3, 0xfc, 0xe5, 0xb3, 0x23, 0x5a, 0x39, 0x6d, 0xa5, 0x54, 0x98, 0x1c, 0x76, 0xca, 0x75, 0xc3, 0x97, 0x2c, 0xd4, 0x03, 0xd8, 0x9e, 0x61, 0x2e, 0x6d, 0x2e, 0xd1, 0xed, 0xa5, 0x6e, 0xc4, 0xf4, 0x66, 0xee, 0x91, 0x5d, 0x97, 0x36, 0x52, 0xdb, 0xe8, 0xfc, 0x6c, 0x0a, 0xca, 0x68, 0x93, 0x88, 0xf9, 0xcb, 0x1e, 0x84, 0xcf, 0x4e, 0x3a, 0x13, 0xd6, 0x63, 0x45, 0xe9, 0xc4, 0xd8, 0xd4, 0xcb, 0x5a, 0xc9, 0x8b, 0xa9, 0x70, 0xaf, 0xd5, 0xeb, 0xc0, 0xe9, 0x16, 0xa9, 0x6a, 0x8a, 0x07, 0x94, 0x94, 0xc6, 0xf2, 0xcd, 0x41, 0xfa, 0xbe, 0x69, 0x4a, 0x00, 0x67, 0x2d, 0xc6, 0xc9, 0x25, 0xd4, 0x4c, 0xb0, 0x6c, 0xc7, 0xd7, 0xdc, 0xd8, 0xf6, 0x38, 0x69, 0x4d, 0x58, 0x76, 0x37, 0xd5, 0x31, 0x77, 0xf8, 0x92, 0x39, 0xb4, 0x35, 0x43, 0x2f, 0xdc, 0x93, 0x05, 0xa2, 0x4d, 0x89, 0x45, 0x08, 0xf3, 0x99, 0x3a, 0xea, 0xad, 0xbb, 0x50, 0x9e, 0x5f, 0x95, 0x3c, 0x16, 0xda, 0x8c, 0xe5, 0x68, 0x1a, 0xce, 0x2d, 0x1c, 0x49, 0xee, 0xa0, 0xdd, 0x25, 0x1a, 0x33, 0x2e, 0xfe, 0x9a, 0x6e, 0xcc, 0xfa, 0xb9, 0x3b, 0xa6, 0xcd, 0x9c, 0x0e, 0xa4, 0x73, 0x97, 0x92, 0x9d, 0xe4, 0x1e, 0xc3, 0xf9, 0x4e, 0x29, 0xe0, 0x19, 0xab, 0xe7, 0x44, 0x26, 0x71, 0x5f, 0x46, 0x11, 0x9e, 0xad, 0xea, 0x08, 0x46, 0xd8, 0x2e, 0xfe, 0x94, 0xb9, 0x03, 0xc0, 0xd9, 0x5b, 0x70, 0x3c, 0x1a, 0xce, 0x30, 0xbc, 0x4f, 0x39, 0xdc, 0x7c, 0x62, 0x1a, 0xc7, 0xcf, 0x5f, 0x0a, 0xf9, 0x09, 0xc7, 0xcf, 0x5f, 0x26, 0xb1, 0xf6, 0xb5, 0xeb, 0x2f, 0x23, 0xd8, 0xbe, 0x07, 0x6f, 0x71, 0x4b, 0x14, 0x03, 0x8c, 0xe7, 0xc5, 0x44, 0x83, 0x1f, 0x75, 0xd1, 0xf9, 0xb9, 0xf2, 0x1f, 0x70, 0xdf, 0xf8, 0x9b, 0x07, 0x62, 0x49, 0xe4, 0xd6, 0x45, 0x38, 0x9a, 0x95, 0x69, 0x98, 0x9e, 0xc6, 0x33, 0xa7, 0x5d, 0x8e, 0xa5, 0xb9, 0xc3, 0xc5, 0x31, 0x09, 0x63, 0x27, 0x5d, 0x15, 0xdb, 0x25, 0xea, 0xba, 0xb8, 0x97, 0xa0, 0xe2, 0xbe, 0xdf, 0x35, 0xb2, 0xaf, 0x04, 0x13, 0x19, 0x90, 0x37, 0x09, 0xed, 0x91, 0xbe, 0xc1, 0xc1, 0x14, 0xf4, 0xfd, 0x97, 0xd9, 0x36, 0x47, 0xb4, 0x36, 0xa3, 0xf1, 0x08, 0x18, 0x2f, 0x86, 0xd5, 0xfb, 0x8a, 0x4c, 0x4b, 0xff, 0xbc, 0x9b, 0x47, 0xed, 0xba, 0xa8, 0x36, 0x56, 0x20, 0xf4, 0x8c, 0x1e, 0x33, 0x8f, 0x4b, 0x3a, 0x3f, 0x67, 0x43, 0xd9, 0x91, 0xac, 0x52, 0xd8, 0x4b, 0x74, 0x47, 0xb6, 0x83, 0x96, 0x24, 0x69, 0x19, 0x5e, 0x40, 0x8d, 0x7c, 0x89, 0x31, 0x1c, 0xa4, 0xd3, 0x57, 0xf8, 0xd6, 0xb7, 0xe4, 0x92, 0x22, 0x37, 0xc5, 0xb3, 0x4f, 0xcf, 0x39, 0xc8, 0xae, 0x44, 0x29, 0x68, 0xa3, 0x16, 0xa5, 0x29, 0xa3, 0xc9, 0x8c, 0x6e, 0xc2, 0x30, 0x73, 0xd4, 0x9c, 0x39, 0x83, 0x95, 0x2c, 0xb7, 0xaf, 0x9f, 0xe2, 0x05, 0x33, 0x72, 0xd4, 0x62, 0x5b, 0xd3, 0x1b, 0x67, 0x40, 0xab, 0xe8, 0x32, 0xa9, 0xa7, 0xf8, 0xf0, 0xbd, 0xc9, 0xeb, 0xaa, 0x86, 0x18, 0x20, 0x64, 0xd1, 0x86, 0xb7, 0xfc, 0xa8, 0xb3, 0x22, 0xd7, 0x95, 0xe9, 0x84, 0x29, 0xe9, 0x0f, 0xc8, 0x07, 0xb1, 0xed, 0x4a, 0xfe, 0xd0, 0x76, 0x30, 0x12, 0xb5, 0x26, 0x43, 0xbf, 0xc5, 0x27, 0xc2, 0x80, 0xfd, 0x26, 0xfb, 0xdd, 0x99, 0xd3, 0xa8, 0x5c, 0x2f, 0xd6, 0xd0, 0x14, 0xcf, 0x3a, 0xef, 0xb5, 0x19, 0x67, 0x22, 0x2d, 0x5e, 0x46, 0xbc, 0xcc, 0x62, 0xe7, 0x03, 0xa5, 0xe6, 0x8b, 0xb4, 0x23, 0x44, 0xa7, 0x06, 0xe9, 0x9b, 0x05, 0x5a, 0x37, 0x70, 0x36, 0x61, 0x1d, 0x1e, 0xac, 0xcb, 0x0d, 0x24, 0x9d, 0x29, 0x58, 0xaf, 0x7d, 0x8d, 0xf5, 0xc8, 0x00, 0x4a, 0x27, 0x65, 0x44, 0x5d, 0x18, 0x56, 0x84, 0x94, 0x6f, 0x24, 0xad, 0x7e, 0x5e, 0xff, 0x3f, 0xbe, 0x1c, 0xd1, 0x37, 0xf5, 0xd2, 0x3b, 0xed, 0xf7, 0x88, 0x53, 0x92, 0xaa, 0xae, 0x61, 0x8e, 0x6a, 0x6d, 0x8d, 0xde, 0xeb, 0xbc, 0xdb, 0xb0, 0xd6, 0x6d, 0xa8, 0xa5, 0xd0, 0x77, 0xa0, 0x54, 0x53, 0x31, 0xe1, 0x18, 0x29, 0x98, 0xf5, 0xc2, 0x37, 0x7f, 0x8c, 0x33, 0x99, 0x8f, 0x64, 0x15, 0x1c, 0x25, 0x11, 0xfe, 0x02, 0xde, 0x6a, 0xb5, 0x9a, 0x01, 0xbe, 0x11, 0x25, 0x67, 0x95, 0x1d, 0x91, 0x26, 0x2b, 0x8e, 0x36, 0x7c, 0x0a, 0xf1, 0x7b, 0x7b, 0x84, 0xac, 0x0b, 0x68, 0xa3, 0x7a, 0x07, 0xb6, 0x30, 0x6c, 0xe4, 0xef, 0x55, 0xf7, 0x3a, 0xc0, 0xa6, 0xed, 0xca, 0x3f, 0xbc, 0x91, 0x57, 0x18, 0xb6, 0x07, 0xef, 0xc3, 0xf9, 0x5c, 0xdb, 0xa5, 0xf0, 0xdb, 0x3e, 0x94, 0xcd, 0x74, 0x22, 0x1c, 0xc3, 0x72, 0x44, 0x98, 0xc0, 0x6b, 0xe8, 0xbb, 0x04, 0x27, 0x61, 0xba, 0x29, 0x4e, 0x72, 0x99, 0x80, 0x3b, 0x9c, 0xa3, 0x87, 0xe4, 0x10, 0xd6, 0x64, 0x5a, 0x62, 0x64, 0xc9, 0xcb, 0x1d, 0xba, 0x87, 0xf6, 0x0c, 0xc6, 0xeb, 0x90, 0x57, 0x69, 0x64, 0xfb, 0x84, 0x9e, 0xf5, 0x37, 0x6c, 0x4b, 0xc1, 0x81, 0x72, 0x15, 0xe9, 0xb5, 0x89, 0x82, 0x12, 0x77, 0xe9, 0x4a, 0x28, 0xfa, 0xc3, 0xaf, 0xff, 0x9f, 0xf6, 0xde, 0x05, 0xbc, 0xa9, 0xeb, 0x4a, 0x14, 0x5e, 0xe7, 0x48, 0xc8, 0x42, 0x08, 0x47, 0x11, 0x8e, 0xe3, 0x38, 0x1e, 0x72, 0xa2, 0x0a, 0xa1, 0x08, 0x63, 0x29, 0xae, 0x87, 0xf8, 0xa6, 0x2e, 0x91, 0x8e, 0x8d, 0x91, 0x85, 0xa3, 0x52, 0x99, 0x52, 0x37, 0xa5, 0xcd, 0xc1, 0x8f, 0x23, 0x43, 0x8c, 0xad, 0x1a, 0xc7, 0x75, 0xa9, 0x27, 0x23, 0xcb, 0x06, 0x8c, 0xf3, 0x30, 0x21, 0x40, 0xd3, 0x36, 0xd3, 0xc9, 0xed, 0xcd, 0xcd, 0x50, 0x4a, 0x13, 0xca, 0x50, 0x4a, 0x69, 0x2e, 0xd7, 0x21, 0x34, 0x3f, 0x79, 0x34, 0x3f, 0x21, 0x34, 0xa1, 0x69, 0x2e, 0x25, 0x19, 0x4a, 0x28, 0x49, 0x80, 0xd2, 0x24, 0x43, 0x89, 0xe1, 0xfc, 0x6b, 0xed, 0x7d, 0xf4, 0xb0, 0x81, 0xcc, 0xf4, 0xde, 0xfb, 0xdd, 0xff, 0x7e, 0xdf, 0x9c, 0xed, 0x6f, 0xc9, 0xe7, 0xec, 0xf7, 0x5e, 0x67, 0xef, 0xb5, 0xd7, 0xde, 0x7b, 0xed, 0xb5, 0x7e, 0xf7, 0xeb, 0x04, 0x38, 0xae, 0x63, 0x72, 0xa9, 0x66, 0x46, 0x93, 0x77, 0x12, 0xed, 0xf5, 0x11, 0xd7, 0xfd, 0x63, 0x5c, 0x7f, 0x01, 0x1c, 0xd9, 0xf4, 0x62, 0xec, 0xc1, 0xba, 0x0b, 0xda, 0x93, 0x7d, 0x81, 0xb7, 0x90, 0x67, 0x84, 0xdd, 0x8e, 0xf2, 0x23, 0x80, 0xf5, 0x98, 0x81, 0x61, 0x8f, 0xc6, 0x86, 0x7f, 0x76, 0x86, 0xf1, 0x5e, 0x5b, 0xef, 0x3c, 0x77, 0x04, 0x1c, 0x85, 0xe8, 0xdf, 0x10, 0x8f, 0x36, 0xe5, 0x33, 0xbc, 0x14, 0xe3, 0x6f, 0x4c, 0x5d, 0xac, 0x4c, 0xc7, 0xff, 0x5d, 0xf1, 0x22, 0xfc, 0x5d, 0x19, 0x2f, 0xe7, 0xb8, 0x62, 0x37, 0x44, 0xda, 0x84, 0x42, 0xba, 0x2d, 0xe3, 0xa7, 0xfd, 0x98, 0x80, 0xdf, 0x4c, 0xe5, 0xba, 0x80, 0xd6, 0xe0, 0x47, 0x1f, 0xf3, 0x58, 0x58, 0x2d, 0x7f, 0x80, 0xfc, 0x4a, 0x4d, 0xf6, 0x16, 0xb3, 0xdb, 0xea, 0x9a, 0xc4, 0xfc, 0xb7, 0x2a, 0x65, 0x7e, 0x33, 0x8e, 0xb3, 0x19, 0x6c, 0x7e, 0x40, 0x5c, 0x39, 0x0a, 0xfd, 0xb4, 0x5e, 0xa0, 0x3b, 0x8a, 0x45, 0x8a, 0xd3, 0x6f, 0x26, 0xa9, 0x49, 0xd0, 0x32, 0x7e, 0x76, 0x5e, 0xcf, 0x56, 0xd0, 0x6a, 0xf4, 0x1c, 0x1e, 0x25, 0x6e, 0x80, 0x74, 0xb3, 0xf0, 0xf5, 0x59, 0x55, 0x15, 0x62, 0xa6, 0x06, 0xfb, 0x40, 0xd8, 0x67, 0x6e, 0x17, 0x6b, 0x56, 0xe3, 0xb8, 0x0f, 0x76, 0xf3, 0xbb, 0xd0, 0x67, 0xe9, 0x34, 0xa0, 0x79, 0xbd, 0x7e, 0xcf, 0x7c, 0xa3, 0x7e, 0x1f, 0x1c, 0x62, 0xa9, 0x9e, 0x9b, 0x36, 0xa7, 0x90, 0xe3, 0x4b, 0xc5, 0xf3, 0xf5, 0xb0, 0x47, 0x16, 0x8e, 0xf8, 0x40, 0x7d, 0x3d, 0x32, 0xd8, 0x6e, 0xbb, 0xe9, 0x19, 0x98, 0x5d, 0x29, 0x35, 0x0c, 0xc4, 0x52, 0xd5, 0xff, 0x5a, 0x79, 0xb3, 0x14, 0xc1, 0x1a, 0xfe, 0x36, 0x96, 0xdc, 0x99, 0xec, 0x38, 0x2f, 0x97, 0x5b, 0xd9, 0xfe, 0x46, 0x55, 0x15, 0xe7, 0x45, 0x78, 0xf9, 0x95, 0x62, 0xb7, 0xe3, 0xf0, 0x88, 0x5f, 0xe4, 0x6b, 0x04, 0xad, 0x1d, 0xbf, 0x61, 0x15, 0x72, 0x23, 0x6c, 0x94, 0xe3, 0x77, 0xa4, 0x9d, 0x88, 0xbe, 0x85, 0x23, 0xb4, 0xf3, 0x90, 0xbe, 0x1f, 0x9b, 0x5e, 0x57, 0x62, 0x9d, 0x17, 0x22, 0x97, 0xb2, 0x08, 0xfb, 0x6d, 0x23, 0xa6, 0x5a, 0x22, 0x2d, 0x7a, 0xf5, 0x7d, 0xb0, 0xce, 0x3f, 0x09, 0x82, 0x63, 0xda, 0x74, 0x5f, 0xde, 0xf1, 0xbd, 0xa0, 0x56, 0x6e, 0x9f, 0x05, 0x82, 0x5a, 0x5e, 0x30, 0x0b, 0xc4, 0x9d, 0xbe, 0xbc, 0x7f, 0x51, 0xbd, 0xf3, 0xcf, 0x20, 0xe7, 0x37, 0xc5, 0xef, 0x13, 0x0a, 0x89, 0x2e, 0xfe, 0xe9, 0x43, 0xbf, 0x09, 0x31, 0x35, 0x85, 0xcf, 0xd3, 0x8d, 0xdb, 0xd8, 0xb8, 0xa5, 0x1d, 0xbf, 0xef, 0x15, 0x38, 0xec, 0x22, 0xf2, 0x97, 0xd6, 0x22, 0x4c, 0x25, 0x2d, 0x50, 0x6a, 0xf1, 0xdb, 0xcd, 0x55, 0xcf, 0x29, 0x4e, 0xfc, 0x2f, 0xb1, 0x5e, 0xef, 0x52, 0xcb, 0x29, 0x86, 0x5a, 0xe8, 0x17, 0x30, 0x0f, 0x3b, 0x97, 0xc3, 0xbc, 0xa8, 0x53, 0x6c, 0x61, 0x89, 0xdf, 0xf4, 0xbd, 0xfb, 0x89, 0x93, 0xe3, 0x39, 0xf3, 0xfb, 0xd7, 0x42, 0x8d, 0x0f, 0xfb, 0xef, 0x6e, 0x88, 0x5b, 0xf7, 0xe2, 0x1a, 0x22, 0x02, 0xea, 0x8e, 0xd0, 0xa9, 0xbc, 0xaf, 0xdf, 0x79, 0x4a, 0x88, 0xe2, 0x0a, 0x63, 0xd2, 0xfa, 0xfb, 0xd9, 0x3a, 0x00, 0x57, 0x2c, 0xbe, 0xc6, 0x9b, 0x16, 0xc3, 0x6d, 0xd8, 0x8f, 0x2b, 0x77, 0x3e, 0xa5, 0x9d, 0xc5, 0xbe, 0x76, 0xd2, 0x2f, 0x96, 0x9a, 0xdf, 0x1a, 0x7c, 0x6b, 0xf0, 0xdd, 0x87, 0xf0, 0x77, 0x8d, 0x8b, 0xd4, 0x11, 0x83, 0x30, 0xfd, 0xd0, 0x30, 0x96, 0x3d, 0x05, 0xe9, 0xc2, 0xed, 0xfe, 0x30, 0xcc, 0x65, 0x6b, 0xe4, 0x41, 0x46, 0x79, 0xfd, 0x50, 0x86, 0xbd, 0xac, 0x9c, 0xdd, 0x3a, 0xdf, 0xb6, 0x87, 0xf8, 0xfe, 0x04, 0x7e, 0x05, 0x3f, 0xdc, 0x66, 0x05, 0x5a, 0xbd, 0xf8, 0x42, 0x4a, 0x1f, 0x3e, 0x09, 0x71, 0x1b, 0x49, 0x07, 0x1f, 0x7d, 0xbc, 0x5b, 0x50, 0xba, 0xf0, 0x7d, 0x92, 0x5a, 0xaa, 0xcc, 0x25, 0x7d, 0x11, 0x7e, 0x53, 0x86, 0x83, 0xf9, 0x21, 0x97, 0x56, 0x41, 0x7e, 0x64, 0x33, 0xc3, 0x14, 0xae, 0xfc, 0x63, 0x29, 0xd6, 0xc6, 0xfc, 0x6e, 0x20, 0xee, 0xeb, 0xf4, 0xa3, 0xa4, 0xfd, 0xe4, 0xec, 0x90, 0xf7, 0x6f, 0xd4, 0xfd, 0x4a, 0x7d, 0xe8, 0x5c, 0x1b, 0x32, 0x8e, 0x82, 0xac, 0x94, 0xec, 0xfd, 0x2c, 0xae, 0x24, 0x6d, 0x0b, 0xfe, 0xec, 0x15, 0xdc, 0x93, 0x36, 0x3e, 0xa8, 0xd8, 0x29, 0xc4, 0xd7, 0x26, 0xd4, 0x62, 0x68, 0x84, 0xd5, 0x48, 0xa2, 0xfd, 0x40, 0xff, 0xd4, 0x1c, 0xfc, 0xe4, 0xc7, 0x06, 0xef, 0x3c, 0x0d, 0xe5, 0xbb, 0xb7, 0x0a, 0xc5, 0x2b, 0xe0, 0xd2, 0x98, 0x34, 0x4f, 0xb2, 0x3a, 0x8b, 0xe2, 0x56, 0xc9, 0xba, 0x83, 0xbe, 0xdc, 0xb9, 0xf5, 0x1b, 0x6f, 0x09, 0x82, 0x95, 0xcd, 0x0d, 0xe9, 0x9b, 0xd2, 0x5f, 0xfa, 0xe8, 0x2c, 0x71, 0x6d, 0xee, 0x15, 0x60, 0x2f, 0x9b, 0x0d, 0x0e, 0xef, 0x6c, 0x28, 0xe8, 0x3b, 0xfb, 0x56, 0x9a, 0x3b, 0xb3, 0xcc, 0xe7, 0x1c, 0xdb, 0x23, 0xfc, 0x1d, 0x67, 0xee, 0x63, 0xd1, 0x47, 0xbc, 0x48, 0x21, 0xd9, 0xed, 0x49, 0xda, 0x9f, 0xc3, 0xd9, 0xfc, 0xe2, 0x31, 0xc2, 0xdb, 0x57, 0xa9, 0x06, 0x6e, 0xe4, 0x6f, 0xce, 0x51, 0xbc, 0x8b, 0xa7, 0x29, 0x4d, 0xde, 0x69, 0x7a, 0xfe, 0xe8, 0x1c, 0xb6, 0x98, 0xd3, 0xf3, 0xa2, 0x55, 0xac, 0xc5, 0x67, 0xca, 0x94, 0x39, 0x52, 0xcc, 0x19, 0xb0, 0x42, 0xb7, 0x6f, 0xe7, 0x6a, 0xd5, 0xc9, 0x78, 0x30, 0x0b, 0x49, 0x08, 0x50, 0x2b, 0x56, 0x81, 0x82, 0xf1, 0x8a, 0x85, 0x2e, 0x65, 0xc7, 0xea, 0x78, 0xc5, 0xf8, 0x30, 0xa2, 0xe4, 0xbf, 0x18, 0x6d, 0xda, 0xd7, 0xad, 0xec, 0x5c, 0x8d, 0x5c, 0xd5, 0x6c, 0xed, 0x43, 0x7f, 0x1e, 0xd6, 0xea, 0x2c, 0xe3, 0x92, 0xcb, 0xf4, 0x3e, 0x52, 0x1c, 0x4b, 0x22, 0xaf, 0x6b, 0x8d, 0x90, 0xde, 0x03, 0x24, 0xb2, 0xbe, 0xa9, 0x96, 0xd5, 0x9a, 0xf6, 0xd1, 0x39, 0xae, 0xe7, 0xc1, 0x5c, 0xc3, 0xff, 0x4f, 0x52, 0x7c, 0xc8, 0xbb, 0xe3, 0xd7, 0x7d, 0x6b, 0xde, 0x07, 0x17, 0x8f, 0x85, 0x97, 0xc3, 0x54, 0x09, 0x39, 0x57, 0xbf, 0x37, 0xdd, 0xab, 0x5d, 0x36, 0xb6, 0xdf, 0x74, 0x9a, 0xc6, 0xbb, 0xf6, 0xce, 0xac, 0xe0, 0x47, 0x1f, 0x13, 0xa7, 0x0f, 0x4f, 0xba, 0x80, 0x51, 0x80, 0xc3, 0xe8, 0x83, 0x5c, 0x25, 0xc7, 0x09, 0xd5, 0x80, 0xb5, 0x13, 0x53, 0x9e, 0xb2, 0xfa, 0x18, 0x0f, 0x49, 0xfa, 0x50, 0x5c, 0xb3, 0x3f, 0xfa, 0xb8, 0x5b, 0xdf, 0x1f, 0xd4, 0xf6, 0x96, 0x42, 0x7b, 0x85, 0xd2, 0x62, 0x2f, 0x02, 0x9b, 0x6a, 0xb9, 0xb6, 0x0f, 0x24, 0x4d, 0xfb, 0xe7, 0x03, 0xea, 0xd9, 0xc7, 0x92, 0x91, 0x35, 0x1d, 0xf9, 0xa1, 0x8f, 0x8a, 0xc0, 0xee, 0x05, 0xdb, 0xc5, 0x63, 0xaa, 0x28, 0x09, 0xfe, 0x3c, 0x36, 0xa2, 0x18, 0xed, 0x51, 0x6c, 0xf3, 0xb1, 0x7e, 0x75, 0xac, 0x9f, 0x50, 0x7e, 0xee, 0x29, 0x1e, 0x3e, 0xae, 0x6b, 0xb8, 0x8e, 0x81, 0x4e, 0x7b, 0xf5, 0x9f, 0xad, 0x9a, 0x14, 0x71, 0x41, 0x43, 0xbf, 0xf2, 0x14, 0xc9, 0xbf, 0xa8, 0x56, 0x16, 0xd6, 0xe7, 0xa3, 0xbb, 0xd7, 0xbc, 0x56, 0x8c, 0xbf, 0x54, 0xc4, 0x55, 0x40, 0x35, 0xcd, 0xe1, 0xc3, 0x8e, 0x31, 0x3e, 0x6c, 0x12, 0xf1, 0x61, 0x1f, 0x1d, 0xd0, 0xa5, 0x7c, 0x48, 0x3a, 0xa6, 0xc4, 0xab, 0xcf, 0x65, 0xac, 0x87, 0xe2, 0x98, 0x50, 0x3c, 0xd8, 0xd7, 0xcc, 0x92, 0x78, 0x30, 0x75, 0x30, 0xf5, 0xee, 0x10, 0xfe, 0x26, 0x99, 0xe4, 0xf6, 0xf4, 0x30, 0xf6, 0xfa, 0x8c, 0x34, 0xd6, 0x92, 0x58, 0x4a, 0xf2, 0x09, 0xc5, 0xdb, 0x53, 0x1d, 0x87, 0xba, 0x6e, 0xda, 0x91, 0x5c, 0x11, 0xa1, 0xef, 0x20, 0x14, 0xe7, 0xa6, 0x72, 0x05, 0xab, 0xff, 0x28, 0x4c, 0x97, 0x6a, 0xaa, 0xcf, 0x3d, 0x0a, 0xd9, 0x15, 0x30, 0x72, 0x14, 0x39, 0x71, 0x7e, 0x33, 0x1a, 0x3a, 0x57, 0x09, 0xb2, 0x57, 0x98, 0x3e, 0xa3, 0x5a, 0x98, 0x2b, 0xfb, 0x84, 0x28, 0xae, 0xc0, 0x34, 0xb6, 0xab, 0xcb, 0x6f, 0x88, 0x43, 0xf8, 0xdd, 0xb9, 0x48, 0xb9, 0x84, 0x52, 0x4f, 0xa7, 0x10, 0xf0, 0x76, 0x0a, 0x15, 0x5e, 0xbf, 0x50, 0x49, 0x1a, 0x5a, 0x14, 0xc9, 0x2e, 0x80, 0x5f, 0xb5, 0xdb, 0x3f, 0x0b, 0x51, 0xab, 0xa0, 0x9a, 0x63, 0x49, 0xc5, 0x5e, 0x7d, 0x46, 0xf0, 0xbe, 0x76, 0x60, 0x5a, 0x48, 0x83, 0xd8, 0x50, 0x2c, 0xe9, 0xfc, 0xac, 0x15, 0xe2, 0x76, 0x8c, 0x65, 0x8b, 0x5b, 0x70, 0x35, 0xaf, 0x35, 0x93, 0xdc, 0x90, 0xd6, 0x84, 0xeb, 0x0a, 0xe2, 0xb4, 0x04, 0xef, 0xc1, 0x91, 0x57, 0x47, 0x65, 0xaf, 0x06, 0x6e, 0x5f, 0xde, 0xd1, 0xb8, 0xb5, 0x8b, 0x51, 0x7b, 0xad, 0xb0, 0xcb, 0x7b, 0x68, 0xc4, 0x6d, 0x23, 0x3e, 0x29, 0xef, 0xeb, 0x3d, 0x0c, 0xf3, 0x63, 0xef, 0xcc, 0x08, 0xe6, 0x1d, 0x55, 0x6d, 0x1c, 0xd3, 0xd8, 0xe7, 0x36, 0xcb, 0x38, 0xe6, 0x70, 0xce, 0xc7, 0xf9, 0xe7, 0xe3, 0xfd, 0x6c, 0x3c, 0x3f, 0xea, 0xa3, 0xf9, 0x70, 0x08, 0xc3, 0x94, 0x58, 0xd2, 0xb7, 0xc0, 0x79, 0x23, 0xd5, 0x0d, 0x57, 0xc0, 0x02, 0xce, 0x78, 0x36, 0x56, 0x03, 0x73, 0x44, 0x50, 0x8f, 0xfb, 0xc1, 0x35, 0x75, 0x43, 0x12, 0xa9, 0x90, 0x8d, 0x56, 0x31, 0x5e, 0x38, 0x38, 0x48, 0xba, 0x16, 0x42, 0xe7, 0x86, 0xc0, 0xd3, 0x96, 0x47, 0x6b, 0x3a, 0xfb, 0xc1, 0x41, 0xc4, 0xcb, 0xe0, 0xc1, 0x64, 0xe8, 0x9c, 0x15, 0x42, 0x27, 0x11, 0x1b, 0x00, 0x8f, 0x39, 0x66, 0x33, 0xee, 0x61, 0x11, 0xf6, 0xc8, 0xe1, 0xa6, 0x32, 0x7c, 0x5a, 0x10, 0x6f, 0x6b, 0x22, 0xfe, 0x22, 0x14, 0x5f, 0x84, 0xbf, 0xb5, 0xd8, 0xfb, 0x2e, 0x29, 0x0b, 0xd9, 0x3c, 0xba, 0x84, 0xcd, 0xaa, 0xf4, 0x7b, 0x27, 0xd1, 0x41, 0x46, 0x87, 0x57, 0xc4, 0x83, 0x4d, 0x34, 0xdb, 0xaa, 0xf1, 0x52, 0xfc, 0xbd, 0x87, 0xfd, 0x2e, 0xc5, 0xd0, 0x17, 0x95, 0x42, 0x36, 0xcf, 0x52, 0x8e, 0xdd, 0xec, 0xb7, 0x83, 0x56, 0xf1, 0x4a, 0x11, 0x38, 0xb4, 0xa4, 0xe2, 0xa2, 0x1b, 0x5f, 0x4a, 0x09, 0xfe, 0x06, 0x95, 0x42, 0xfc, 0x95, 0x14, 0x07, 0xfe, 0x22, 0x6f, 0x81, 0xbf, 0x82, 0x62, 0xc6, 0x5f, 0x71, 0xd1, 0x83, 0xf6, 0xeb, 0xb0, 0x95, 0xd8, 0x65, 0x68, 0x4f, 0x2e, 0x1e, 0xf3, 0x98, 0x5f, 0x1f, 0x7c, 0x7d, 0xf0, 0xdd, 0xfb, 0x5f, 0x1f, 0x94, 0xaa, 0x5f, 0x7d, 0xce, 0x63, 0x7b, 0x7d, 0x48, 0xaa, 0x46, 0x3a, 0xea, 0x15, 0xa2, 0x5d, 0xa6, 0xd1, 0x7e, 0xb5, 0x8d, 0x6b, 0x93, 0x92, 0xaa, 0x6f, 0x0e, 0x0a, 0x32, 0xce, 0xd6, 0x8d, 0x8c, 0x86, 0xda, 0x15, 0x07, 0xad, 0x1f, 0x90, 0x87, 0x08, 0xaa, 0xb7, 0x4b, 0x37, 0xe2, 0x9c, 0xc1, 0x74, 0x88, 0xb0, 0x77, 0x1f, 0xe6, 0x5f, 0xaa, 0x3a, 0x63, 0x7c, 0xee, 0xc4, 0xb1, 0x01, 0x02, 0xf2, 0x3a, 0x70, 0xe9, 0xf1, 0x5b, 0xda, 0xc1, 0x4c, 0xb4, 0x4d, 0xb1, 0x25, 0x7a, 0x15, 0x4b, 0xa2, 0x0b, 0x39, 0xcd, 0x95, 0x48, 0xe7, 0xfa, 0xbe, 0x70, 0x46, 0x00, 0xe4, 0x81, 0xcc, 0x88, 0x41, 0xc4, 0xe3, 0x91, 0xa4, 0x54, 0xf3, 0xea, 0x7e, 0xc2, 0x2e, 0xaf, 0x45, 0xcd, 0x68, 0xfc, 0x01, 0x65, 0x9b, 0xde, 0xa7, 0xca, 0xb1, 0x1f, 0xb9, 0xb1, 0x5f, 0x79, 0x4b, 0xfd, 0x42, 0xc0, 0xed, 0x17, 0x4a, 0x0f, 0x23, 0xd5, 0x42, 0xbe, 0xd6, 0x4a, 0xf4, 0x07, 0x29, 0x1b, 0xdd, 0x00, 0x19, 0xf1, 0x4f, 0x62, 0x14, 0x6c, 0x98, 0x4b, 0x0f, 0x76, 0x09, 0x3b, 0x68, 0x86, 0x38, 0x4c, 0x74, 0x69, 0x7d, 0x8a, 0x38, 0x06, 0xda, 0xfd, 0x1a, 0xdb, 0xc3, 0x35, 0x12, 0xad, 0x00, 0xd8, 0xe5, 0xc1, 0x90, 0xd8, 0x00, 0xf2, 0xc0, 0x99, 0x5c, 0x68, 0xae, 0xa7, 0xb4, 0x0d, 0x49, 0x4a, 0xdd, 0x0a, 0xb0, 0x99, 0xa5, 0x1e, 0xc0, 0x75, 0x40, 0x66, 0x14, 0xb0, 0x3e, 0x70, 0x36, 0x0c, 0x2e, 0xa4, 0xf7, 0x4c, 0x4a, 0xcf, 0x21, 0x21, 0xd5, 0xcf, 0xe5, 0x7b, 0x25, 0x53, 0x2c, 0xe9, 0xe2, 0xbb, 0x73, 0x19, 0x7e, 0xdd, 0x25, 0x1e, 0x4a, 0x1d, 0x4a, 0xbd, 0xbb, 0xee, 0x50, 0x4a, 0x0a, 0xbd, 0xfa, 0x2c, 0xa5, 0x47, 0xbc, 0xd6, 0x86, 0x90, 0xd2, 0x23, 0x07, 0x7a, 0x85, 0xd1, 0x46, 0x3a, 0xd3, 0x10, 0x1f, 0xfb, 0xa8, 0x14, 0xf9, 0xd6, 0x4a, 0xb8, 0xb9, 0x5a, 0x40, 0x5e, 0x03, 0xb1, 0xd7, 0x83, 0xd8, 0xeb, 0xc6, 0xf1, 0xa6, 0x63, 0x8f, 0xd6, 0x7e, 0x74, 0x6b, 0x87, 0xee, 0x60, 0xb8, 0x48, 0xe7, 0x44, 0xc3, 0x6f, 0xde, 0xc3, 0x56, 0x0d, 0x3b, 0x9d, 0xd8, 0x8f, 0x25, 0xba, 0xf7, 0x8d, 0xff, 0x9b, 0x70, 0x4e, 0x17, 0x40, 0x56, 0x65, 0xdd, 0xbf, 0x2b, 0x6e, 0x4f, 0x94, 0xd5, 0x02, 0x3e, 0xc5, 0x54, 0x10, 0x7b, 0x74, 0xdf, 0xa5, 0x19, 0xdf, 0x10, 0xfa, 0x2a, 0xb1, 0x61, 0xf6, 0xe6, 0x24, 0xfd, 0x23, 0x62, 0x2c, 0x74, 0x32, 0xef, 0x1d, 0x05, 0xc4, 0x52, 0x0c, 0xbd, 0x87, 0xe5, 0xb6, 0x40, 0xed, 0xca, 0x94, 0x12, 0xc0, 0xdf, 0xd6, 0x4c, 0xea, 0x79, 0x18, 0xdf, 0xa5, 0x87, 0x7d, 0x8b, 0xc5, 0xfd, 0x8a, 0x3a, 0x7d, 0x5c, 0x6e, 0x66, 0xff, 0x64, 0xff, 0x14, 0xa4, 0xeb, 0x02, 0xdf, 0xf1, 0x53, 0x7a, 0x30, 0x4e, 0x77, 0x26, 0xfd, 0x22, 0x15, 0x84, 0x77, 0x72, 0xe3, 0x0b, 0x87, 0xb1, 0xf4, 0x7f, 0xc1, 0xd1, 0xfa, 0x14, 0x86, 0xb6, 0xc4, 0xad, 0xf8, 0x4b, 0x3b, 0xd1, 0x8b, 0xf4, 0x32, 0x5a, 0x99, 0x0f, 0x96, 0x0a, 0x3f, 0xd4, 0x7d, 0xd4, 0x4c, 0x5e, 0x38, 0xda, 0x84, 0xcd, 0xe9, 0x7a, 0x22, 0x37, 0x43, 0xfa, 0x0f, 0x48, 0xcb, 0x0b, 0x96, 0x9b, 0xe1, 0x66, 0x7a, 0x26, 0xb6, 0x5d, 0x68, 0xd1, 0x53, 0xdc, 0x9b, 0xf1, 0xfd, 0x12, 0xfa, 0x46, 0x75, 0xdf, 0xf6, 0x8c, 0x6f, 0x3d, 0xfa, 0x56, 0xea, 0xbe, 0xe3, 0xeb, 0xef, 0x62, 0xcf, 0xb8, 0xd2, 0x67, 0x5a, 0x21, 0x0a, 0x58, 0xb9, 0x93, 0x95, 0x35, 0x18, 0xda, 0x99, 0x89, 0xf7, 0x05, 0xac, 0xf1, 0x85, 0x4c, 0x9e, 0x16, 0x96, 0xdf, 0x92, 0x0c, 0x4e, 0xeb, 0x27, 0x96, 0x04, 0xaf, 0x5c, 0xe9, 0x3b, 0xc1, 0xee, 0x2b, 0x7d, 0x53, 0xc2, 0x44, 0x16, 0x7f, 0xb0, 0x11, 0xf1, 0x77, 0x5c, 0xe9, 0x60, 0xb5, 0xb4, 0x65, 0x6a, 0xd9, 0x97, 0x13, 0x27, 0x81, 0x31, 0xfe, 0xa0, 0xd4, 0xeb, 0x61, 0x09, 0x55, 0xd1, 0x73, 0xed, 0x54, 0x9d, 0xd8, 0x8a, 0x04, 0xb6, 0x22, 0x8a, 0x38, 0x63, 0x7b, 0x1f, 0x8a, 0x8b, 0x30, 0xa3, 0xce, 0xd5, 0x5b, 0xb8, 0x92, 0x38, 0x50, 0xfc, 0xdf, 0x06, 0xa2, 0xea, 0xd3, 0xe3, 0x3c, 0xd1, 0x38, 0x82, 0x9c, 0x31, 0x86, 0xb3, 0x5d, 0xd9, 0x82, 0x88, 0x33, 0x9e, 0xef, 0xd8, 0x0a, 0xc2, 0xcc, 0x7b, 0x88, 0x0e, 0xc8, 0xb4, 0xd2, 0xec, 0x76, 0xdf, 0xed, 0xb9, 0xec, 0xd4, 0x2b, 0x3d, 0xd6, 0x71, 0x9c, 0xbb, 0x5d, 0x38, 0xd6, 0x71, 0xcc, 0x07, 0x3c, 0x5f, 0x94, 0x16, 0xbc, 0xfa, 0x47, 0xb0, 0xda, 0x1d, 0xc8, 0x8d, 0x3a, 0x12, 0x9e, 0x5a, 0x88, 0x6c, 0xc0, 0x16, 0x1d, 0x8a, 0x0d, 0xf5, 0x91, 0xc4, 0x61, 0x2d, 0xfa, 0xcf, 0x55, 0x8b, 0x99, 0xff, 0x56, 0xb6, 0xaf, 0xb9, 0x3b, 0x36, 0xc4, 0xfc, 0xec, 0xb1, 0xa1, 0x1e, 0x41, 0xb1, 0xca, 0xd5, 0xf2, 0x3c, 0xc5, 0x2c, 0x57, 0xaf, 0x12, 0x1e, 0x7e, 0xe9, 0x33, 0x61, 0x1c, 0xe9, 0x66, 0xfa, 0x16, 0x88, 0x88, 0x52, 0xe2, 0xca, 0x19, 0x6f, 0x32, 0x9c, 0x33, 0xe2, 0xbb, 0x22, 0xb5, 0xf1, 0xe9, 0x2e, 0x51, 0x3f, 0xcf, 0x62, 0xfc, 0x85, 0x9b, 0x4e, 0x1a, 0x38, 0x67, 0xf1, 0x26, 0xe3, 0x5d, 0xe6, 0xc5, 0x17, 0x72, 0xfe, 0x23, 0x52, 0x1d, 0x17, 0xbf, 0x94, 0xea, 0x92, 0x0e, 0x8d, 0xf0, 0x98, 0x18, 0x6a, 0x8e, 0x17, 0xa2, 0x6f, 0x89, 0x0b, 0x90, 0xb7, 0x10, 0x38, 0x6f, 0xc1, 0xe6, 0x7d, 0x1b, 0xd1, 0x1e, 0xcd, 0x89, 0x74, 0xb4, 0x90, 0x56, 0xbd, 0x9c, 0x4f, 0xa1, 0x5d, 0x3f, 0xc5, 0x8c, 0x34, 0x91, 0xed, 0x09, 0xa4, 0x47, 0x74, 0xf4, 0x4b, 0x17, 0xc7, 0x88, 0xef, 0xf3, 0x22, 0xdf, 0x57, 0x8a, 0x7c, 0x5f, 0x59, 0xc1, 0x51, 0xe4, 0xdc, 0x4b, 0xe7, 0xc7, 0x1e, 0xb2, 0x17, 0xc2, 0xb7, 0x55, 0x6b, 0xec, 0xa1, 0x8a, 0x3e, 0x1c, 0x9e, 0xe2, 0xa6, 0x17, 0xdd, 0x53, 0x2d, 0x29, 0x4d, 0xbb, 0xa8, 0x79, 0xc4, 0xef, 0xbc, 0x84, 0x2b, 0x0a, 0xad, 0xfa, 0x88, 0x2f, 0x9f, 0xdd, 0xc1, 0xb2, 0x3b, 0x0a, 0xe3, 0x15, 0x38, 0x43, 0xfc, 0x9d, 0x5a, 0xa2, 0x94, 0xd2, 0x8e, 0x76, 0x17, 0x38, 0x0b, 0x91, 0xce, 0x7c, 0xf1, 0xd5, 0x67, 0x13, 0x10, 0x08, 0x14, 0x41, 0x97, 0x7d, 0xb4, 0x3f, 0xee, 0x94, 0xaa, 0x63, 0x03, 0x8e, 0xa3, 0xb1, 0xfb, 0x77, 0x8d, 0xe1, 0x90, 0xd9, 0x8f, 0xf5, 0x68, 0x0f, 0x7d, 0xb4, 0x1b, 0x67, 0xf7, 0x8b, 0x1a, 0xcb, 0xa5, 0x00, 0xcb, 0xfb, 0x3b, 0xd5, 0xe2, 0xcb, 0x8f, 0xad, 0x56, 0xc4, 0x86, 0xe1, 0x84, 0xb0, 0x7d, 0x38, 0x1e, 0x60, 0x73, 0x87, 0x0f, 0x31, 0xc4, 0xca, 0xd6, 0x80, 0x9f, 0x42, 0xf4, 0x42, 0xe9, 0x0a, 0x5a, 0x93, 0x8e, 0xf5, 0xb0, 0xfb, 0x92, 0x36, 0xa4, 0xa7, 0xc4, 0xcf, 0x80, 0x82, 0x94, 0x35, 0xdc, 0xb5, 0x1b, 0xb9, 0xa6, 0x2c, 0x27, 0xfc, 0xbd, 0x8d, 0xb7, 0xcc, 0x63, 0x9c, 0x2e, 0x72, 0x36, 0x17, 0x0f, 0xa7, 0xef, 0xaf, 0xdc, 0x51, 0xe5, 0xc3, 0xd5, 0x7e, 0xa9, 0x1f, 0x90, 0x6b, 0x80, 0x0a, 0xe4, 0x73, 0x2a, 0xe9, 0xa4, 0xa0, 0xcc, 0x0f, 0x41, 0x9f, 0x8f, 0xed, 0xa2, 0xd0, 0x97, 0x3a, 0xd6, 0x38, 0x22, 0xd7, 0xf4, 0xa4, 0xf9, 0xd4, 0x84, 0x14, 0x73, 0x20, 0x9f, 0xda, 0xe5, 0xdb, 0x31, 0xa0, 0xf3, 0xa9, 0x62, 0x9a, 0x17, 0xed, 0x01, 0x25, 0xd6, 0x43, 0x57, 0x86, 0x5d, 0xdb, 0x07, 0xd4, 0x42, 0x5b, 0x0d, 0x3f, 0xf9, 0xce, 0x09, 0x77, 0x29, 0xe5, 0xcf, 0x60, 0x08, 0x72, 0x73, 0xa4, 0x05, 0xcb, 0xce, 0xf4, 0x3d, 0xd1, 0xa9, 0x95, 0xcf, 0x63, 0x51, 0x8a, 0x22, 0x35, 0xaa, 0xa5, 0xeb, 0x73, 0x3b, 0x06, 0xe2, 0x85, 0xe3, 0x53, 0xd1, 0x5c, 0xb0, 0x27, 0xd9, 0x34, 0x34, 0x83, 0xd7, 0xff, 0xf7, 0x55, 0x63, 0xec, 0x6b, 0xbd, 0x4c, 0x7a, 0xdb, 0xbc, 0xb4, 0xb7, 0xaa, 0x7f, 0x31, 0x0f, 0xe2, 0xc2, 0x37, 0x1b, 0x8a, 0xee, 0x7c, 0x9f, 0xce, 0xfa, 0xf4, 0x99, 0x25, 0x3f, 0xdb, 0xd7, 0xa8, 0xa7, 0xc5, 0xcb, 0x9c, 0x55, 0x20, 0xf2, 0x33, 0x3b, 0xa4, 0x10, 0x47, 0x91, 0x0e, 0xbd, 0x85, 0x3d, 0xc3, 0x4a, 0x7b, 0x3a, 0xdb, 0xfb, 0x9b, 0xf5, 0x1d, 0x8e, 0xf5, 0x6c, 0xd7, 0x85, 0x28, 0x9f, 0x2b, 0x9f, 0x63, 0xfc, 0xd2, 0x21, 0x8e, 0x71, 0xb6, 0x82, 0xe4, 0xa7, 0x80, 0x3d, 0xc8, 0x69, 0x82, 0x90, 0x0a, 0x7d, 0x70, 0xe9, 0xd0, 0xac, 0x30, 0xf1, 0xc3, 0xda, 0x09, 0xf9, 0x27, 0xda, 0x29, 0x84, 0xd3, 0x99, 0xb5, 0xc1, 0x21, 0xae, 0x39, 0xce, 0x3f, 0x09, 0x9f, 0xdf, 0xa1, 0xfa, 0xf0, 0xaf, 0x97, 0x33, 0x02, 0x4a, 0xd2, 0x73, 0x9e, 0x10, 0x93, 0x1a, 0xee, 0xfc, 0x0b, 0xd3, 0x44, 0xe5, 0x24, 0xad, 0x51, 0x18, 0x67, 0xb3, 0x7e, 0xaf, 0xac, 0x52, 0xaa, 0xf6, 0x38, 0xd4, 0x53, 0xa1, 0x0f, 0x2e, 0x52, 0x49, 0x63, 0xd2, 0x82, 0xea, 0x0f, 0xb4, 0x73, 0x59, 0xe9, 0x5d, 0x2a, 0x95, 0x95, 0x70, 0x88, 0x4a, 0xf1, 0xdb, 0xb1, 0x74, 0x37, 0xad, 0x44, 0x2e, 0x6d, 0x8b, 0xee, 0xb9, 0x34, 0x9d, 0xed, 0x81, 0xd1, 0x8c, 0xbc, 0x47, 0x9a, 0xad, 0xbd, 0x2e, 0x61, 0xac, 0x6e, 0x50, 0xf2, 0x91, 0xe7, 0xfe, 0xaa, 0x6a, 0xc1, 0x11, 0xfb, 0xb5, 0xb8, 0x25, 0x96, 0xda, 0x9e, 0x6a, 0x3a, 0x7d, 0xe7, 0x07, 0x98, 0x96, 0x63, 0xeb, 0x18, 0xe2, 0x3e, 0x5f, 0xaf, 0x3d, 0x7e, 0x71, 0xcc, 0x4f, 0x0a, 0xaf, 0xb8, 0xc4, 0xda, 0x72, 0xd7, 0x46, 0x3d, 0xbf, 0x42, 0xa6, 0x4f, 0x86, 0xaf, 0xe7, 0x9e, 0xc8, 0xf6, 0x32, 0xc2, 0x23, 0xc7, 0x1e, 0xcf, 0xcf, 0x6f, 0x63, 0xbc, 0x75, 0x59, 0x74, 0x83, 0x0b, 0x4b, 0xa7, 0x18, 0x3b, 0x52, 0xcd, 0xc5, 0x58, 0x93, 0x37, 0x17, 0x25, 0x49, 0x13, 0x29, 0xe3, 0xf3, 0x78, 0x59, 0x1b, 0xf4, 0x73, 0x89, 0x29, 0xd8, 0x77, 0x59, 0x3b, 0xb0, 0xf6, 0xa4, 0x09, 0xb3, 0x80, 0xde, 0x38, 0x87, 0x3e, 0x2b, 0x78, 0xf1, 0x15, 0xc6, 0xa5, 0x1f, 0x62, 0x5c, 0xfa, 0xec, 0x8b, 0xaf, 0x28, 0x25, 0x34, 0xae, 0x37, 0x50, 0x89, 0x7c, 0x4d, 0x94, 0x5d, 0xf5, 0x88, 0x89, 0x5e, 0xd2, 0x4c, 0x76, 0x91, 0x69, 0x30, 0x45, 0x1a, 0x77, 0x96, 0x78, 0x64, 0xec, 0xe5, 0x55, 0x74, 0xf7, 0x1a, 0xe7, 0xed, 0x1a, 0xe4, 0xe8, 0xeb, 0xa5, 0x18, 0xf5, 0x2e, 0xea, 0xcf, 0x7c, 0x87, 0x03, 0xfb, 0x1f, 0x61, 0xbc, 0x17, 0x47, 0x6e, 0x69, 0xde, 0x1f, 0x90, 0x82, 0x38, 0x68, 0x9f, 0x9c, 0xe9, 0xae, 0xbb, 0x74, 0xe1, 0x4d, 0x92, 0xda, 0xa1, 0x7d, 0x71, 0xf2, 0x21, 0xed, 0x80, 0xd4, 0xfa, 0x0f, 0x77, 0x2e, 0xb8, 0x30, 0xb6, 0x3b, 0xba, 0xc9, 0xcd, 0x4f, 0x2b, 0x40, 0x90, 0x59, 0x8a, 0x29, 0x7e, 0x3b, 0xf2, 0x53, 0xa5, 0x79, 0xef, 0xf0, 0x1d, 0xd3, 0x73, 0xdb, 0x72, 0x62, 0x48, 0x39, 0x79, 0xa4, 0xbf, 0x54, 0x36, 0x54, 0xbc, 0xf3, 0x0c, 0xf8, 0xd8, 0x97, 0xd0, 0xbc, 0xbb, 0xfd, 0x6c, 0x35, 0x7d, 0xe6, 0x58, 0x74, 0x13, 0xa6, 0xc9, 0xe7, 0xf9, 0xe2, 0x1c, 0x2a, 0xb2, 0xd8, 0x25, 0x8c, 0xcf, 0xea, 0x84, 0x70, 0xe0, 0x19, 0x10, 0x4a, 0x69, 0xbc, 0x4e, 0x21, 0x7d, 0x53, 0xf2, 0xbc, 0x1e, 0x20, 0x7e, 0xfb, 0xe2, 0x93, 0x0b, 0xf8, 0x88, 0xed, 0xba, 0x6c, 0xc4, 0xd2, 0xce, 0xf5, 0x26, 0x7d, 0xc4, 0x2e, 0xca, 0x8c, 0x58, 0x8b, 0x6d, 0x1e, 0x72, 0xad, 0x73, 0x90, 0xd2, 0x4e, 0x88, 0xb5, 0x4a, 0x50, 0xca, 0xba, 0xaa, 0x70, 0x64, 0x5a, 0x12, 0x73, 0x31, 0x5e, 0x41, 0xba, 0xfe, 0x6c, 0x47, 0x1b, 0xc7, 0x6f, 0xdc, 0xa1, 0x84, 0xc7, 0xa7, 0x20, 0xac, 0x3e, 0x93, 0x6c, 0x5a, 0x33, 0xa3, 0x16, 0xc7, 0xd6, 0x2c, 0xa4, 0xcf, 0x36, 0xa9, 0xc1, 0x1e, 0x00, 0x9b, 0x55, 0xc3, 0x35, 0xfa, 0x94, 0x4c, 0xcf, 0x79, 0x92, 0xf7, 0x1c, 0x5d, 0x5b, 0xa5, 0x05, 0x7b, 0x26, 0xb6, 0x8c, 0x9d, 0x2c, 0xf5, 0x51, 0xce, 0x4c, 0xd6, 0x93, 0xf8, 0x2c, 0xab, 0xbc, 0x45, 0x28, 0xc6, 0x15, 0x62, 0x35, 0x38, 0xf0, 0xf7, 0x76, 0xb8, 0xb6, 0xfa, 0xa4, 0x30, 0x77, 0xde, 0xc9, 0xbc, 0xaf, 0x27, 0x24, 0xf9, 0x61, 0xf9, 0x16, 0xed, 0x98, 0xfc, 0x23, 0x30, 0x23, 0x58, 0x11, 0xec, 0xf2, 0x2d, 0x38, 0xfa, 0xbe, 0xd7, 0x90, 0xac, 0xfe, 0x23, 0x94, 0xab, 0xc7, 0x30, 0x7e, 0x55, 0xde, 0x3b, 0xf8, 0x3b, 0x37, 0xef, 0x5f, 0xf0, 0xd7, 0x9d, 0x77, 0x1c, 0x7f, 0xcb, 0xf2, 0xfe, 0x20, 0x6f, 0xc9, 0x3b, 0xe1, 0xbe, 0x5b, 0xbf, 0x13, 0x4b, 0x77, 0xb0, 0xd9, 0xbe, 0xf2, 0x44, 0xfe, 0xd1, 0x0d, 0x71, 0x89, 0x56, 0xed, 0xfa, 0xed, 0x58, 0x5c, 0xd3, 0xd3, 0x9e, 0xbf, 0xd6, 0x3e, 0x43, 0xce, 0x3b, 0xc1, 0x64, 0xa0, 0xd2, 0xfb, 0xb7, 0xfc, 0x76, 0x1c, 0xad, 0x14, 0x8b, 0x70, 0xa5, 0x74, 0x62, 0xfe, 0x29, 0xa1, 0x16, 0x71, 0x3b, 0x5d, 0xbf, 0x5d, 0xe8, 0x20, 0x1c, 0xe4, 0xf2, 0xaa, 0xb1, 0x81, 0xf9, 0xef, 0x41, 0xf9, 0x2e, 0xda, 0x95, 0x78, 0x2b, 0x92, 0x8a, 0xfb, 0x58, 0x19, 0x22, 0x3f, 0x91, 0xf9, 0xea, 0xa3, 0x2e, 0x79, 0xe2, 0x2e, 0x37, 0xe1, 0x87, 0xdf, 0xe2, 0xf3, 0x47, 0xa0, 0x88, 0x9e, 0x90, 0xc3, 0x3f, 0x91, 0x80, 0x6c, 0xfd, 0x69, 0xd7, 0x38, 0xb2, 0x21, 0xee, 0x24, 0x6a, 0xc6, 0xee, 0xac, 0xbe, 0xe9, 0x72, 0xea, 0xda, 0xe2, 0x68, 0x1f, 0xb5, 0x00, 0xfd, 0xed, 0xcc, 0xff, 0x30, 0x9b, 0x09, 0x59, 0x08, 0xdf, 0x29, 0x4e, 0xd7, 0x1e, 0xe7, 0xbe, 0x4e, 0x08, 0x90, 0x76, 0x58, 0x9c, 0x0f, 0x2a, 0x11, 0xeb, 0xa5, 0x3e, 0x2f, 0x48, 0xee, 0x45, 0x7c, 0xd7, 0xac, 0x1b, 0xe4, 0x6a, 0x17, 0x97, 0xe6, 0x78, 0xa5, 0x8c, 0xf4, 0x06, 0xac, 0x8d, 0x07, 0x13, 0x9f, 0xc3, 0xdf, 0x80, 0xa3, 0x0a, 0x6c, 0xdb, 0xd7, 0xaa, 0x05, 0xd8, 0x8e, 0x82, 0xd0, 0x39, 0xaf, 0x86, 0x54, 0x65, 0x96, 0x6a, 0x73, 0x3c, 0x03, 0x36, 0xc5, 0x11, 0xa9, 0x56, 0x1d, 0xd7, 0xad, 0xf5, 0x02, 0xae, 0x4e, 0x30, 0x4e, 0x3c, 0x5f, 0xae, 0x26, 0xdd, 0x21, 0x0d, 0x83, 0xea, 0x4e, 0x9c, 0xf7, 0x5c, 0x72, 0xb9, 0x17, 0x98, 0x9e, 0x3b, 0x5b, 0x96, 0x82, 0x50, 0xce, 0x24, 0x85, 0x32, 0x27, 0x59, 0xd3, 0x40, 0xd4, 0x7e, 0xc9, 0x58, 0x46, 0x8e, 0x5b, 0xb3, 0xd4, 0x83, 0x26, 0xd1, 0x7d, 0xb0, 0x00, 0x3e, 0xb7, 0x23, 0x24, 0x41, 0xcb, 0x9b, 0xce, 0x05, 0x96, 0x48, 0x83, 0xfb, 0x44, 0x71, 0x5a, 0xf2, 0x43, 0xaf, 0xff, 0xdd, 0x57, 0xc2, 0xb4, 0x1b, 0xc3, 0xa0, 0x95, 0x60, 0x1d, 0x8a, 0x96, 0x80, 0x66, 0x0f, 0xe2, 0x7f, 0x2f, 0xbe, 0xbb, 0x41, 0xbb, 0x76, 0x3d, 0x68, 0x8e, 0xc3, 0xe8, 0xd7, 0x8d, 0xcf, 0x8b, 0x10, 0x1a, 0x41, 0x73, 0x1e, 0x03, 0xad, 0xb0, 0x0d, 0xe3, 0xa0, 0xdf, 0xd4, 0x22, 0x04, 0x3b, 0xc6, 0x39, 0xa8, 0xcb, 0xe4, 0xae, 0xc2, 0x36, 0x70, 0x99, 0x2b, 0x6d, 0x4a, 0x1b, 0x1d, 0x16, 0xc3, 0xe3, 0x08, 0x3f, 0x44, 0x20, 0xe9, 0x74, 0x91, 0xcb, 0x61, 0xc9, 0xad, 0xf1, 0x65, 0x1d, 0xd5, 0xd8, 0x94, 0x50, 0x33, 0xc9, 0x33, 0x7a, 0x67, 0x24, 0x6e, 0xb1, 0x41, 0xf6, 0xbd, 0x21, 0xd1, 0xda, 0xda, 0x82, 0x9e, 0xa5, 0x33, 0x5a, 0x74, 0xff, 0xda, 0x4e, 0x6c, 0x6b, 0x75, 0xdb, 0xd2, 0x8e, 0x78, 0xab, 0x17, 0xbd, 0x16, 0x56, 0xdf, 0x59, 0x5d, 0x17, 0x92, 0x56, 0xb6, 0x77, 0x76, 0x4b, 0xad, 0x1d, 0xa4, 0xfc, 0xbc, 0xc5, 0x06, 0x75, 0x1d, 0x2b, 0x5b, 0xbb, 0xba, 0x5b, 0x5b, 0x24, 0x3d, 0x94, 0x50, 0x25, 0xb5, 0xb4, 0x76, 0xb7, 0x36, 0x77, 0xf3, 0x60, 0x2e, 0x98, 0xde, 0x7d, 0x6f, 0xa2, 0xbd, 0x55, 0x6a, 0x6e, 0x5b, 0xba, 0xac, 0x23, 0x27, 0xb4, 0xba, 0xae, 0x61, 0xd1, 0xc2, 0xfa, 0xbb, 0x43, 0x77, 0xd6, 0xcd, 0x0f, 0x35, 0xd6, 0x2d, 0xe4, 0x5a, 0xd4, 0x6d, 0xb0, 0xe8, 0x5b, 0x89, 0x56, 0x69, 0x46, 0x0b, 0xe9, 0x77, 0xe7, 0xf9, 0x31, 0xff, 0x52, 0x69, 0xe5, 0xb2, 0x55, 0xcc, 0x9f, 0x09, 0x77, 0xe2, 0x2b, 0x55, 0x18, 0xdf, 0x6d, 0x70, 0xe7, 0xd2, 0x44, 0x02, 0x1f, 0x97, 0xae, 0x94, 0xf8, 0xbd, 0x0a, 0x4a, 0x59, 0x66, 0x83, 0x28, 0x56, 0xf4, 0xde, 0x95, 0x4c, 0x4b, 0xfb, 0xc4, 0x20, 0x6a, 0xde, 0x9d, 0xcb, 0x56, 0x36, 0xeb, 0x8a, 0xea, 0x59, 0xb3, 0x03, 0xe5, 0xbd, 0x7a, 0xc3, 0x63, 0xad, 0x2b, 0x5b, 0xbb, 0xe9, 0x21, 0x8b, 0x23, 0xe6, 0x15, 0x6b, 0x5d, 0xd1, 0xd9, 0xd3, 0xca, 0x23, 0x57, 0x52, 0xe4, 0x78, 0x6b, 0x37, 0x55, 0x46, 0x52, 0xbb, 0x3a, 0x57, 0x64, 0x84, 0xf0, 0x97, 0xb6, 0xb4, 0x30, 0x9d, 0xf4, 0x33, 0x12, 0x98, 0xb4, 0x33, 0xf1, 0xad, 0x45, 0xd4, 0x76, 0x96, 0x88, 0xa7, 0xe3, 0x08, 0xd6, 0xf1, 0xc5, 0x02, 0x25, 0x2a, 0x5b, 0x0a, 0xb2, 0x04, 0x1c, 0x25, 0xd1, 0x2f, 0xd5, 0xd7, 0x67, 0x5e, 0xe6, 0x45, 0x6b, 0xb2, 0x01, 0x5f, 0xb8, 0xbb, 0xbe, 0x2e, 0xba, 0x20, 0xf3, 0x5e, 0xff, 0x85, 0xe8, 0x7c, 0xf2, 0xb8, 0x3b, 0x44, 0x6a, 0xf2, 0x7b, 0x2f, 0xf7, 0xaf, 0xd6, 0xfd, 0xa3, 0xad, 0xbd, 0xdd, 0x52, 0xfb, 0xb2, 0x8e, 0x7b, 0xf4, 0xf7, 0xf4, 0x97, 0xe9, 0xec, 0xa2, 0x6b, 0x0a, 0x2b, 0x97, 0x75, 0xc4, 0x59, 0x68, 0xf7, 0xd2, 0x2e, 0x6c, 0x54, 0x4e, 0xc5, 0x25, 0x75, 0x59, 0xc7, 0xb2, 0x95, 0x6d, 0xf4, 0xb9, 0x6a, 0x98, 0x59, 0x82, 0x9c, 0xe6, 0x60, 0x33, 0xe6, 0x75, 0xb4, 0x4c, 0xec, 0x52, 0xf3, 0x39, 0xee, 0xf0, 0xa3, 0x50, 0xaf, 0x59, 0xb4, 0xf0, 0xee, 0xd0, 0x8a, 0x65, 0xf1, 0xa5, 0x99, 0xef, 0x5b, 0xca, 0x10, 0xc4, 0xb0, 0x93, 0xdb, 0x67, 0xba, 0x08, 0xc1, 0x0c, 0x11, 0x36, 0xf8, 0xc2, 0x37, 0x3b, 0x74, 0xec, 0xa7, 0x11, 0xfd, 0x79, 0x8a, 0x1e, 0x6b, 0x6d, 0x6f, 0x5d, 0xba, 0xb2, 0x75, 0x5c, 0x90, 0xa4, 0xb6, 0x2f, 0x8d, 0xaf, 0xfc, 0x3c, 0x43, 0x60, 0xe7, 0x37, 0x3b, 0x5a, 0x5b, 0x30, 0x26, 0xe6, 0x45, 0xdf, 0x09, 0x1f, 0xb1, 0xd2, 0x89, 0xe6, 0x15, 0xcd, 0xcb, 0x96, 0xde, 0xdd, 0xd1, 0xfa, 0x4d, 0x0a, 0xee, 0xba, 0x5d, 0xea, 0x40, 0xef, 0x74, 0xd4, 0x5e, 0x8a, 0x4a, 0xef, 0xed, 0xcb, 0xa8, 0x73, 0x24, 0xba, 0xbf, 0xc5, 0xd2, 0x2c, 0xec, 0x44, 0x84, 0x50, 0xb7, 0xe9, 0xe8, 0x6c, 0xc1, 0x8f, 0x93, 0xe0, 0x85, 0xe8, 0x95, 0xbb, 0x2c, 0x43, 0xaa, 0x1a, 0x17, 0x7a, 0x26, 0x24, 0x36, 0x2f, 0x6d, 0xbb, 0x9b, 0x6a, 0x98, 0x1e, 0x18, 0x54, 0x53, 0x89, 0xe1, 0x45, 0x4f, 0xc8, 0x2b, 0xa7, 0xa7, 0x4d, 0x57, 0xb9, 0x54, 0x4a, 0xe7, 0xf7, 0xf9, 0x2b, 0x67, 0xc7, 0xbb, 0x5e, 0x4e, 0x6e, 0xe3, 0xec, 0x60, 0x50, 0x8c, 0x45, 0x4b, 0x57, 0xde, 0x23, 0x7d, 0xb3, 0xf3, 0x9e, 0xd6, 0x0e, 0xe9, 0xde, 0x1c, 0xdc, 0xb2, 0xe1, 0xdb, 0xdc, 0xd1, 0x4d, 0xad, 0xcc, 0xc5, 0xcb, 0xb8, 0xfb, 0xa2, 0xda, 0xd4, 0x8d, 0x7f, 0xd5, 0x7d, 0x51, 0xcd, 0xf2, 0xe4, 0x55, 0xef, 0x8b, 0x6a, 0x96, 0x5d, 0x13, 0xee, 0x8b, 0x6a, 0x53, 0x96, 0x7c, 0xca, 0x7d, 0x51, 0xcd, 0xf2, 0xca, 0x84, 0xfb, 0xa2, 0x9a, 0x65, 0xef, 0x65, 0x37, 0x3d, 0x34, 0xcb, 0x53, 0xff, 0x6b, 0x77, 0x8e, 0xdd, 0x93, 0x71, 0xe5, 0x88, 0xe9, 0xf3, 0x6a, 0xb9, 0x06, 0xa9, 0x85, 0x23, 0x3b, 0x9f, 0x82, 0x25, 0x6a, 0x7e, 0xa4, 0x03, 0xda, 0xbe, 0xcc, 0xa4, 0x15, 0x6b, 0x92, 0x4c, 0x2b, 0xc0, 0x4d, 0xd9, 0xfb, 0xc6, 0x9e, 0xc9, 0x4c, 0x53, 0x2e, 0x4f, 0xf7, 0x55, 0x9e, 0x8e, 0xda, 0xbb, 0x8b, 0x52, 0x2e, 0xa7, 0x94, 0x6a, 0x0b, 0xe9, 0x45, 0x17, 0x0f, 0x36, 0x2d, 0x61, 0xfa, 0xd1, 0x2f, 0x34, 0x15, 0xb2, 0xff, 0x9b, 0x9b, 0x8a, 0x12, 0x2d, 0xdb, 0x53, 0x2d, 0xc5, 0x3d, 0xe6, 0xee, 0x65, 0xb5, 0xa2, 0x52, 0xd8, 0xc3, 0x64, 0x2c, 0xc5, 0x83, 0x8a, 0x5d, 0x36, 0x75, 0x4f, 0x42, 0x1f, 0x73, 0x8f, 0xb5, 0xbb, 0x25, 0xe7, 0x3e, 0xdd, 0x7f, 0x82, 0x37, 0xb7, 0x23, 0xda, 0xb5, 0x3f, 0xaf, 0x81, 0x69, 0xcf, 0xd1, 0x73, 0xf6, 0x5e, 0x5a, 0x5a, 0xf2, 0x96, 0xdf, 0x69, 0xf6, 0xe7, 0x4b, 0x65, 0xd0, 0x9e, 0xbe, 0xa7, 0xc7, 0xa4, 0x95, 0xb4, 0xbc, 0x95, 0xbc, 0x6e, 0x8d, 0xa4, 0xe5, 0x0c, 0x97, 0x73, 0xea, 0x5d, 0xac, 0x6e, 0x8b, 0x38, 0xf7, 0x57, 0x74, 0xfc, 0xf3, 0xa4, 0x83, 0xa2, 0x8d, 0xbf, 0x4d, 0x67, 0xfa, 0xcd, 0x8a, 0x71, 0x4d, 0x40, 0x32, 0xc1, 0xc5, 0x83, 0x91, 0x60, 0xdc, 0xc3, 0xc2, 0x97, 0xf3, 0xf0, 0xe2, 0x5d, 0xc8, 0x63, 0x77, 0x40, 0x02, 0x4b, 0xe9, 0xce, 0xc8, 0x0b, 0x3c, 0x43, 0xfa, 0xe7, 0xa3, 0x1b, 0xb8, 0x9c, 0x6d, 0xe6, 0x24, 0xf8, 0x65, 0xd2, 0x03, 0x80, 0xf3, 0x7c, 0x7d, 0xb6, 0x1d, 0x19, 0x99, 0x82, 0x83, 0xe3, 0x6e, 0xdd, 0x89, 0x71, 0x30, 0x81, 0xab, 0x0f, 0x14, 0x47, 0x56, 0xaa, 0x92, 0x74, 0x4d, 0x82, 0x78, 0x2a, 0xf4, 0x1e, 0x44, 0x67, 0x86, 0x61, 0xb1, 0xfc, 0x63, 0x88, 0xe1, 0x73, 0x0c, 0x9f, 0xa3, 0xac, 0x4d, 0x6b, 0xe8, 0x94, 0xcf, 0xbf, 0x21, 0xba, 0x91, 0x4b, 0x6d, 0x14, 0x1d, 0x67, 0xb5, 0xdb, 0x76, 0x1b, 0x6b, 0x0b, 0xe1, 0x2b, 0x09, 0x0b, 0x47, 0x48, 0x4f, 0x29, 0xf2, 0xd9, 0x4f, 0xb0, 0x14, 0xdf, 0x4f, 0xc7, 0x2d, 0xde, 0x25, 0xdf, 0x03, 0x6d, 0x89, 0x92, 0x5c, 0x59, 0x86, 0x8b, 0x8b, 0xbc, 0x69, 0xfd, 0x1a, 0x3d, 0x37, 0x50, 0x0f, 0x2f, 0x76, 0x05, 0x4b, 0x17, 0x70, 0x9b, 0x01, 0xc8, 0x2d, 0x57, 0xb9, 0xea, 0xd9, 0xdb, 0x49, 0x57, 0xfd, 0xc3, 0x07, 0xba, 0x20, 0x01, 0xec, 0x6d, 0x77, 0x24, 0xa8, 0x72, 0x0c, 0xef, 0xc1, 0x49, 0xf5, 0x82, 0x9b, 0xc7, 0xd9, 0x86, 0xb9, 0x70, 0xdf, 0x23, 0xe8, 0x7b, 0xbc, 0x5b, 0x3e, 0x3c, 0xe2, 0xaa, 0x97, 0xe4, 0x2e, 0x21, 0x61, 0x4e, 0xa7, 0x22, 0x3d, 0x56, 0x92, 0x5c, 0x7d, 0x06, 0x0a, 0x99, 0xcf, 0x0e, 0x26, 0x1d, 0xb9, 0xcf, 0xe1, 0x87, 0xe9, 0x4e, 0xf8, 0x9a, 0x60, 0x17, 0x48, 0x43, 0x18, 0xec, 0xf0, 0xfb, 0x99, 0x6e, 0xbe, 0xe2, 0xf4, 0xa9, 0x28, 0xcb, 0xf3, 0x0c, 0xff, 0x96, 0x2c, 0xc7, 0x50, 0xba, 0x1e, 0x8c, 0x3f, 0x0e, 0xaa, 0x09, 0xe6, 0x2b, 0xe7, 0xd4, 0xee, 0xeb, 0xf6, 0xa7, 0xa9, 0xdf, 0x41, 0x71, 0xd3, 0x22, 0xc9, 0x0f, 0xa4, 0x15, 0xcf, 0xa4, 0x69, 0xcd, 0x8b, 0xf1, 0x3f, 0xce, 0xfc, 0xcd, 0xe6, 0x44, 0x30, 0x1c, 0x64, 0xda, 0x6c, 0xa0, 0x6b, 0x52, 0xf7, 0x27, 0x12, 0x7e, 0x01, 0x11, 0x5c, 0xf7, 0x40, 0xe6, 0xd6, 0xe3, 0xc5, 0xcd, 0x98, 0x23, 0xd6, 0x80, 0xe5, 0xf7, 0x22, 0x95, 0x6f, 0x95, 0xd2, 0x7d, 0xa9, 0x5b, 0x50, 0x1c, 0xcc, 0xe7, 0xb6, 0xb4, 0x8f, 0x2c, 0xeb, 0x58, 0x7a, 0xc7, 0x55, 0x9f, 0x10, 0xd8, 0xd3, 0x87, 0x64, 0x8b, 0x20, 0xab, 0x05, 0xfe, 0x62, 0x34, 0x22, 0xc7, 0x0b, 0x98, 0x56, 0xad, 0x5e, 0xfd, 0x5b, 0x24, 0x48, 0xa2, 0x51, 0x10, 0xc9, 0x56, 0x46, 0xae, 0x04, 0x8a, 0xbf, 0x2f, 0xe9, 0x20, 0x3a, 0xe3, 0xef, 0xc3, 0x3e, 0x39, 0x8c, 0x78, 0xa0, 0x77, 0x0b, 0x4c, 0xf7, 0xcb, 0xe0, 0x62, 0xcf, 0x56, 0xf0, 0x74, 0x5d, 0xe3, 0x0f, 0xe1, 0x1a, 0x86, 0xde, 0x1c, 0x50, 0xe6, 0x0f, 0x42, 0x39, 0x7b, 0xbe, 0x16, 0xe6, 0xf8, 0x17, 0xc0, 0xed, 0xf2, 0xd3, 0x30, 0x37, 0x44, 0x18, 0x4e, 0xf7, 0xb9, 0xe5, 0x33, 0x83, 0x90, 0x88, 0xd3, 0xae, 0x2f, 0x8e, 0xb5, 0x64, 0x8e, 0x86, 0xb8, 0x6c, 0xff, 0xbc, 0x9e, 0xb4, 0xaa, 0xcd, 0x62, 0xf5, 0xf3, 0xcd, 0x44, 0x3c, 0x40, 0xe9, 0x4c, 0x2c, 0xff, 0x86, 0x22, 0xa8, 0x98, 0xb9, 0x00, 0x02, 0x09, 0x53, 0xf5, 0x7b, 0x39, 0x77, 0x52, 0x1b, 0xaf, 0xef, 0xd3, 0xfa, 0x21, 0xc4, 0x75, 0x84, 0xb1, 0xd8, 0x32, 0xc5, 0x2e, 0x36, 0x43, 0x04, 0x63, 0xd7, 0x26, 0xa6, 0x62, 0xec, 0xca, 0x1c, 0xbd, 0x28, 0x7a, 0x7b, 0xd9, 0xef, 0x60, 0xb6, 0xf7, 0xd3, 0x1d, 0x42, 0xbe, 0x47, 0xb4, 0xc4, 0x8c, 0xdf, 0xb1, 0x82, 0xf3, 0xa1, 0x9c, 0xbe, 0x14, 0x08, 0xb8, 0xba, 0x13, 0xd2, 0x34, 0xc6, 0x1a, 0x9b, 0x40, 0x63, 0x16, 0xb2, 0x71, 0x1c, 0x29, 0x14, 0x45, 0x13, 0x72, 0xd3, 0x59, 0x6a, 0x41, 0x5a, 0x41, 0x6c, 0xd3, 0x46, 0x69, 0x0c, 0x44, 0x4c, 0xf1, 0x22, 0x1a, 0x0d, 0x8f, 0x43, 0x44, 0x6c, 0x37, 0xaf, 0x21, 0x0d, 0x19, 0xa6, 0xe7, 0x19, 0x0d, 0x79, 0x3c, 0x67, 0x04, 0x32, 0x7b, 0x29, 0x7b, 0xf1, 0x5b, 0x41, 0x46, 0x37, 0x82, 0xc6, 0xa5, 0x12, 0xd2, 0x74, 0xd1, 0xda, 0x3e, 0x8e, 0x2e, 0x16, 0xb0, 0x92, 0xf3, 0xd3, 0x34, 0x21, 0xdd, 0x06, 0x4e, 0x1d, 0x27, 0xd2, 0x46, 0xeb, 0xdf, 0x4f, 0xa8, 0xb7, 0x8b, 0xa5, 0x2e, 0x41, 0x4e, 0xde, 0x9c, 0x10, 0xa9, 0xd4, 0xbf, 0x09, 0x42, 0x2f, 0x76, 0xf1, 0x31, 0xaa, 0xf3, 0x7a, 0xc8, 0xc8, 0xeb, 0xdb, 0xf9, 0x0e, 0xb8, 0x5b, 0xdf, 0x01, 0x97, 0xa7, 0x49, 0x7d, 0x1a, 0x72, 0xae, 0xaf, 0xbe, 0xf8, 0xd3, 0x31, 0x08, 0x61, 0x3f, 0x76, 0x72, 0xfa, 0x66, 0xfd, 0x6e, 0xba, 0x6e, 0x8a, 0x93, 0x53, 0x2f, 0x1c, 0x61, 0x56, 0x87, 0xb3, 0x30, 0xa9, 0xdf, 0x5b, 0x66, 0xbb, 0x91, 0x24, 0xe9, 0x54, 0x45, 0x2b, 0xf3, 0xd2, 0x52, 0x5c, 0x7b, 0xb0, 0x33, 0xe5, 0xcf, 0xca, 0x9b, 0x3d, 0xc1, 0xee, 0x99, 0xb4, 0x57, 0x18, 0x5e, 0x79, 0x00, 0xe6, 0x5d, 0xd0, 0x36, 0xd0, 0x8a, 0x9f, 0x8d, 0xcf, 0x94, 0xdd, 0x8f, 0x44, 0x69, 0x66, 0x73, 0xef, 0x82, 0x3f, 0xef, 0x86, 0xba, 0x8f, 0x0e, 0x90, 0xe4, 0x9f, 0x5d, 0x0f, 0x6d, 0x29, 0xf4, 0xc3, 0x4c, 0x4c, 0xd3, 0xbd, 0x1b, 0x74, 0x9f, 0x58, 0xb1, 0xee, 0x73, 0x24, 0xed, 0x13, 0x2c, 0x62, 0x3e, 0xf3, 0x3f, 0xda, 0x0d, 0x39, 0xf1, 0x7c, 0x5c, 0x23, 0xcc, 0xdb, 0x0f, 0x8a, 0x83, 0xf4, 0x3f, 0x5c, 0x23, 0xd7, 0x0c, 0x0f, 0x0e, 0x9b, 0x58, 0x6d, 0x66, 0xbe, 0x1d, 0x0e, 0x07, 0xe5, 0xe0, 0x70, 0xb2, 0x74, 0x75, 0x56, 0xf3, 0xb8, 0x2e, 0xe1, 0xf7, 0x3e, 0x5b, 0x37, 0x4d, 0x76, 0x87, 0x3d, 0x02, 0xc3, 0xab, 0xe0, 0xb7, 0xea, 0xb8, 0xdd, 0x93, 0xc1, 0x6d, 0xc1, 0x6e, 0xc2, 0x2d, 0x98, 0xca, 0x18, 0x76, 0xc1, 0x94, 0xd5, 0x68, 0xd3, 0x77, 0xe3, 0xb7, 0x68, 0xce, 0xd0, 0x3e, 0x98, 0x36, 0x06, 0x76, 0x7a, 0x2a, 0x33, 0xc9, 0xf3, 0xc3, 0xf3, 0x67, 0xf5, 0xd1, 0x5a, 0x40, 0x3b, 0xbf, 0x4a, 0xe8, 0x15, 0x3d, 0x7d, 0xb4, 0x26, 0xe0, 0x34, 0xb5, 0x74, 0xea, 0x17, 0xd7, 0x60, 0xf9, 0xf3, 0x98, 0xfc, 0x1e, 0x49, 0xe7, 0xf5, 0x71, 0x9c, 0x88, 0x4f, 0xb2, 0x5b, 0x49, 0x85, 0xfe, 0x29, 0x58, 0xdf, 0xd9, 0x18, 0xc6, 0x28, 0x92, 0xf5, 0xb0, 0xae, 0x63, 0x7a, 0x5e, 0x3c, 0xdf, 0x3e, 0x1b, 0x04, 0xed, 0xd2, 0xe2, 0x5f, 0x85, 0x57, 0xd7, 0xcc, 0xa3, 0x1c, 0x28, 0x96, 0x1d, 0xc0, 0x89, 0xf8, 0xdc, 0xd2, 0x94, 0x4f, 0x3a, 0xa9, 0xf0, 0xed, 0x5a, 0x15, 0xe0, 0xa8, 0x42, 0xa7, 0x65, 0x05, 0x24, 0x57, 0xa2, 0x69, 0xb4, 0xfb, 0xad, 0x38, 0x58, 0xde, 0x00, 0x9c, 0xca, 0xbc, 0xa7, 0x94, 0xf2, 0x77, 0x71, 0x0d, 0x7b, 0x3f, 0x4f, 0xfa, 0xeb, 0x57, 0x09, 0x48, 0x29, 0x9c, 0x09, 0x8d, 0x2c, 0x13, 0xe8, 0xb1, 0x1f, 0xa3, 0xd0, 0xc9, 0x66, 0x0a, 0xc5, 0xa6, 0x7c, 0xec, 0xb7, 0x60, 0xcd, 0xcc, 0xec, 0x0c, 0x77, 0xcf, 0x25, 0x07, 0xab, 0x15, 0xd6, 0x5b, 0x38, 0xcd, 0x62, 0xe7, 0xfb, 0x67, 0x6b, 0xe7, 0x59, 0xfc, 0x02, 0x92, 0x07, 0x91, 0xf0, 0x8d, 0x74, 0xcc, 0x69, 0xec, 0x14, 0x12, 0xd7, 0x78, 0xd8, 0x7e, 0x25, 0x98, 0x9b, 0xc3, 0xc5, 0x57, 0x32, 0x39, 0x6c, 0x9b, 0x90, 0x43, 0x69, 0x4e, 0x0e, 0x77, 0xb0, 0x1c, 0x86, 0x31, 0x07, 0xac, 0x42, 0xba, 0x6e, 0xf1, 0xb6, 0x5d, 0xd8, 0x76, 0xb5, 0x29, 0x32, 0x3f, 0x6e, 0x6e, 0x98, 0xaf, 0xdc, 0xe5, 0x99, 0xda, 0x30, 0x40, 0xfa, 0xd6, 0xeb, 0x2e, 0x5c, 0x2c, 0x8b, 0x6e, 0x2c, 0xf8, 0x40, 0xd3, 0xa8, 0x07, 0x68, 0xda, 0xfc, 0x3f, 0x87, 0x69, 0x2f, 0xf5, 0x22, 0x9d, 0x3a, 0xa3, 0xef, 0xc5, 0x37, 0xf6, 0x73, 0x09, 0x05, 0x8a, 0xcb, 0xe3, 0xbd, 0xb1, 0x1f, 0xb1, 0x9f, 0x22, 0x09, 0x3c, 0xc4, 0xe6, 0x45, 0x27, 0x34, 0x08, 0x37, 0x86, 0xb4, 0x8b, 0x0d, 0xa9, 0x08, 0xa8, 0xb4, 0x53, 0x94, 0x2f, 0xa3, 0x6f, 0x64, 0x9e, 0xea, 0x8b, 0x60, 0x79, 0x18, 0xab, 0x8a, 0x72, 0x43, 0xbe, 0xc7, 0x1c, 0x5e, 0x69, 0x85, 0xe8, 0x9e, 0xb1, 0x51, 0xbd, 0x3f, 0x9f, 0xb2, 0xcf, 0xc6, 0xc5, 0xe0, 0x45, 0x9c, 0xcb, 0x8a, 0x27, 0xb4, 0xa5, 0x86, 0xda, 0xe2, 0x59, 0xa1, 0x9d, 0xc7, 0x35, 0xf1, 0xfd, 0x2a, 0xdb, 0x63, 0xfe, 0xf2, 0xbe, 0x70, 0xaa, 0x46, 0xc6, 0xe6, 0xec, 0xfa, 0xf9, 0x18, 0xfc, 0xa3, 0xa6, 0xc5, 0xf6, 0x87, 0x07, 0xbb, 0x84, 0x0d, 0x35, 0x95, 0x02, 0xc7, 0x7e, 0xe9, 0x82, 0x55, 0x7f, 0x7e, 0xf3, 0xc1, 0x2e, 0x70, 0x9a, 0x67, 0x85, 0xb4, 0xd3, 0x4a, 0x81, 0x7f, 0x12, 0x52, 0x82, 0x3d, 0x63, 0x8b, 0x58, 0x59, 0xf7, 0xc5, 0x56, 0xff, 0x8f, 0x0f, 0xb4, 0xd3, 0xcf, 0xac, 0x56, 0x4f, 0x92, 0xdc, 0x11, 0xf6, 0x09, 0x51, 0xfb, 0xb0, 0xb9, 0x18, 0xff, 0x57, 0x6b, 0x1f, 0xa9, 0x4e, 0xfc, 0x5f, 0xa7, 0x7d, 0xac, 0xda, 0xf0, 0x7f, 0x83, 0xf6, 0xaf, 0x71, 0xb8, 0xf8, 0x28, 0xab, 0x4f, 0x98, 0xd5, 0x65, 0x51, 0x7a, 0x2e, 0x51, 0x2a, 0xdf, 0xf8, 0x95, 0x02, 0x17, 0xfb, 0xb0, 0x35, 0x5a, 0x78, 0x65, 0x23, 0xb6, 0xe4, 0x93, 0x8f, 0x59, 0xee, 0x12, 0xeb, 0x7b, 0x17, 0xa5, 0x60, 0xb8, 0x0d, 0x44, 0xdd, 0x82, 0x84, 0x63, 0xe1, 0xc8, 0x1b, 0xa3, 0x18, 0x3b, 0xda, 0x4d, 0xe3, 0x46, 0x9e, 0xf6, 0x81, 0xf6, 0xc1, 0x38, 0x1e, 0xa9, 0x87, 0xb7, 0x98, 0x95, 0x90, 0xe1, 0x85, 0x02, 0x22, 0xbf, 0x81, 0xc2, 0x64, 0x21, 0xf7, 0xd3, 0xee, 0xdd, 0x2a, 0xb8, 0xdd, 0xcc, 0xb0, 0x38, 0xa8, 0x0c, 0x61, 0xed, 0xa6, 0x69, 0x7f, 0x8e, 0x83, 0x86, 0x58, 0xd0, 0x14, 0xea, 0x79, 0x97, 0x02, 0xc8, 0xcf, 0x04, 0x70, 0x04, 0xd6, 0x91, 0x06, 0x64, 0x96, 0xd7, 0x5a, 0x9e, 0x17, 0xf2, 0x26, 0x66, 0xf9, 0x11, 0x79, 0x16, 0x4c, 0x96, 0x83, 0x0e, 0xa7, 0xd3, 0x07, 0x02, 0xf5, 0x1b, 0x5c, 0xb1, 0x0b, 0x71, 0x2b, 0xfe, 0x5e, 0x8f, 0x38, 0xef, 0x13, 0x43, 0xa0, 0xe1, 0xd7, 0xe9, 0x0e, 0x9d, 0x02, 0xd1, 0xe1, 0x38, 0x69, 0xbd, 0x3e, 0x08, 0x56, 0x1c, 0x01, 0x79, 0xcd, 0xf4, 0x3b, 0x15, 0x63, 0xdc, 0x65, 0x0f, 0x61, 0x7c, 0x9c, 0x09, 0x31, 0x0f, 0x87, 0x18, 0x84, 0x6b, 0x98, 0x06, 0x55, 0x10, 0x2e, 0xd7, 0xa1, 0xfa, 0x26, 0xce, 0x76, 0x25, 0xe0, 0x85, 0x0a, 0x21, 0x20, 0x04, 0x60, 0xee, 0xcc, 0x3e, 0x36, 0xc3, 0x9b, 0x11, 0xd7, 0xa3, 0xec, 0xf9, 0x00, 0x7b, 0xde, 0xc9, 0x9e, 0x37, 0xb3, 0xe7, 0x2d, 0x89, 0x16, 0x92, 0x27, 0xc7, 0xa7, 0x1f, 0x14, 0xf8, 0xc0, 0xe4, 0x10, 0x4f, 0x58, 0xa9, 0x04, 0x24, 0xbc, 0x79, 0x54, 0x4b, 0xd5, 0x9c, 0xb0, 0x29, 0x54, 0x53, 0x51, 0xb5, 0x26, 0xec, 0x2c, 0xa6, 0x17, 0xdf, 0x4c, 0xe8, 0x3f, 0x55, 0x39, 0x8b, 0x4f, 0x66, 0x7c, 0xba, 0x46, 0x39, 0xc1, 0x6b, 0xd2, 0x90, 0xa4, 0x33, 0xd2, 0x57, 0x0f, 0xbc, 0x3a, 0x8a, 0xbc, 0x98, 0x39, 0x22, 0xab, 0x3e, 0xda, 0x75, 0x7a, 0x67, 0x88, 0xd2, 0xa9, 0x96, 0x6e, 0x61, 0xa6, 0x0c, 0xe6, 0x84, 0x49, 0x99, 0x4e, 0xbe, 0x3c, 0xe6, 0xc1, 0xa1, 0x83, 0x4c, 0x9e, 0xbd, 0x41, 0xb6, 0xcb, 0x58, 0xda, 0x09, 0xe5, 0x58, 0x0c, 0x64, 0xb9, 0x00, 0x76, 0x86, 0x9a, 0xf2, 0xbb, 0xa1, 0x00, 0x22, 0xe5, 0x5e, 0x58, 0xf1, 0x3e, 0x7e, 0x0b, 0x31, 0x46, 0xfb, 0x5c, 0xa2, 0x1e, 0x56, 0xce, 0xf9, 0x1e, 0x67, 0xb9, 0x15, 0x12, 0x79, 0xa3, 0xfd, 0x64, 0x69, 0x4a, 0x62, 0x7b, 0x44, 0x7f, 0xd8, 0x72, 0x62, 0x72, 0xf7, 0x4d, 0xfb, 0x52, 0x52, 0x88, 0x34, 0xdc, 0x67, 0xf5, 0x20, 0x2b, 0x36, 0xfb, 0x2c, 0x98, 0x0a, 0x56, 0xac, 0xad, 0xe0, 0x49, 0xd2, 0xf7, 0x48, 0xcf, 0x24, 0x76, 0xf3, 0x44, 0x3e, 0x7f, 0xf2, 0xf7, 0xff, 0x9d, 0x7c, 0x3e, 0xc5, 0x7d, 0x2a, 0xdd, 0x67, 0xb0, 0x7c, 0x2d, 0xaf, 0x8c, 0xfc, 0xbf, 0x38, 0xc2, 0xac, 0xbd, 0x44, 0x7e, 0x76, 0x1a, 0x53, 0x2f, 0x66, 0x14, 0x77, 0x21, 0x72, 0x1b, 0xd6, 0xae, 0x8e, 0x5a, 0x21, 0x61, 0xd1, 0xb9, 0xbc, 0xb9, 0x38, 0x87, 0x58, 0x60, 0x72, 0xf3, 0x1c, 0x46, 0xdf, 0xa7, 0x72, 0xfa, 0x8e, 0xa3, 0xc6, 0x0f, 0xf6, 0x70, 0x48, 0x0e, 0x25, 0xfb, 0x93, 0x7e, 0xb0, 0xb1, 0xf7, 0x29, 0x6f, 0xaf, 0x4b, 0xf6, 0x73, 0x7a, 0x3a, 0xf9, 0x99, 0x74, 0xcd, 0x38, 0x2f, 0xbd, 0x90, 0xc9, 0x92, 0x22, 0xe5, 0x06, 0xea, 0xd3, 0xfc, 0x7f, 0x12, 0xf8, 0x9c, 0x8e, 0xb3, 0xf6, 0x00, 0xcd, 0x99, 0x8f, 0xd3, 0x2d, 0x0f, 0xb3, 0xc3, 0xcb, 0x66, 0xd1, 0x24, 0x9f, 0x45, 0xd3, 0xba, 0xcb, 0x02, 0xe5, 0xa4, 0xb9, 0xcc, 0xb3, 0x0c, 0x96, 0x50, 0x9a, 0xf5, 0xb4, 0xdd, 0x53, 0x85, 0xf4, 0x60, 0xd4, 0x79, 0x0b, 0xc6, 0x16, 0xb4, 0xd1, 0x02, 0xa8, 0x15, 0x71, 0xfa, 0xaf, 0x4a, 0x89, 0x05, 0x2c, 0xcf, 0x51, 0x51, 0xb5, 0x4d, 0x7b, 0x96, 0x62, 0x62, 0x7f, 0xf9, 0x5e, 0x64, 0x19, 0x2c, 0x8f, 0x3b, 0xf9, 0xbb, 0x9f, 0xb4, 0x76, 0xf6, 0x32, 0x4a, 0x9b, 0x62, 0x27, 0x45, 0x73, 0x31, 0xb4, 0x4d, 0xad, 0x94, 0xee, 0x81, 0x42, 0x76, 0x16, 0x58, 0x66, 0x9d, 0x85, 0x73, 0x66, 0xf1, 0x62, 0x46, 0x3d, 0x5c, 0x5e, 0x70, 0xf2, 0x2f, 0xe8, 0x6a, 0x83, 0x7c, 0xff, 0x54, 0x5f, 0x88, 0xe9, 0xb6, 0x11, 0x48, 0xb7, 0x0d, 0xcd, 0x04, 0x34, 0x52, 0x6b, 0x01, 0x47, 0x0b, 0xab, 0x05, 0xd5, 0x2a, 0x05, 0xbc, 0x1c, 0xe4, 0x11, 0xc9, 0x6a, 0x4a, 0x21, 0xe5, 0x90, 0x00, 0x4a, 0xcd, 0x74, 0xa5, 0xe5, 0xa4, 0x57, 0x98, 0x9c, 0x65, 0x42, 0xa8, 0xff, 0xa0, 0xde, 0xae, 0xbd, 0x9f, 0xd5, 0xad, 0x83, 0xbc, 0x42, 0x1d, 0x6f, 0x25, 0xe3, 0xfc, 0xc3, 0x1c, 0x4b, 0xd3, 0xc6, 0xb4, 0xff, 0x9e, 0xf1, 0xab, 0x08, 0x5d, 0xb8, 0xb4, 0x93, 0xb5, 0xca, 0xca, 0xed, 0xad, 0x29, 0xae, 0xcf, 0xf2, 0xf5, 0x0d, 0xbe, 0xb9, 0x96, 0xe3, 0xca, 0xc6, 0x37, 0x7e, 0x65, 0xa3, 0x73, 0x36, 0x48, 0x1f, 0x4b, 0x57, 0x68, 0x63, 0x54, 0xd6, 0x95, 0x70, 0xcd, 0x4b, 0x42, 0xd7, 0xce, 0xbf, 0x07, 0xf7, 0x49, 0x02, 0x8e, 0xb3, 0x60, 0xf4, 0x5e, 0xfc, 0x6a, 0x02, 0xbd, 0xb1, 0x27, 0xe0, 0x4f, 0xba, 0x9c, 0x6c, 0x41, 0x96, 0x6f, 0xc3, 0xb1, 0xd9, 0x7b, 0x1d, 0xe9, 0x94, 0xed, 0x2d, 0xd4, 0xeb, 0x4d, 0x71, 0x59, 0xfd, 0x07, 0xa8, 0x94, 0x1c, 0x6d, 0x28, 0x55, 0x20, 0xac, 0x79, 0xdc, 0xc9, 0x74, 0xf3, 0x34, 0x24, 0xd5, 0x8f, 0xb3, 0x79, 0x5c, 0x27, 0x63, 0xbd, 0x44, 0xac, 0xd7, 0x3e, 0x4a, 0x31, 0x91, 0xcf, 0x13, 0x53, 0x6c, 0x25, 0x21, 0xb2, 0x7e, 0x76, 0x24, 0xdd, 0xcf, 0xb2, 0x3a, 0xe0, 0xa4, 0x72, 0x4f, 0x9d, 0x3b, 0x8a, 0xbd, 0xf5, 0x16, 0xa6, 0xdd, 0x9a, 0x8f, 0x94, 0xb3, 0x3c, 0x9e, 0x63, 0x16, 0xae, 0x44, 0x00, 0xfe, 0x1e, 0x29, 0x97, 0xbe, 0x22, 0x21, 0x2a, 0x57, 0x33, 0xaa, 0x66, 0x39, 0xcf, 0x3e, 0xa4, 0x6e, 0xd1, 0x9c, 0x5b, 0xa1, 0xd9, 0xd3, 0xa3, 0x1e, 0x5d, 0x77, 0x35, 0xe6, 0x54, 0xf2, 0x21, 0x8e, 0xd4, 0x28, 0x93, 0xe1, 0x6b, 0x62, 0xe3, 0x46, 0x76, 0x97, 0xe1, 0x18, 0x9a, 0xab, 0x2c, 0x8a, 0x6c, 0xc5, 0xff, 0x81, 0xab, 0xe5, 0xa6, 0x39, 0xb2, 0xb9, 0xc9, 0xff, 0x94, 0xcd, 0x8b, 0x76, 0xf3, 0xbb, 0xf5, 0x36, 0xd9, 0xc4, 0x74, 0x9b, 0xd2, 0x77, 0x51, 0x23, 0xcb, 0xb1, 0x84, 0x63, 0xca, 0x13, 0xfa, 0xd7, 0x00, 0xe8, 0xd3, 0xf7, 0xb2, 0xeb, 0xdc, 0x10, 0xc0, 0xd2, 0x91, 0x8f, 0xc2, 0xd2, 0x33, 0x2d, 0x16, 0x79, 0x9b, 0x6d, 0x79, 0x7a, 0x9b, 0x7d, 0xbc, 0xcd, 0xd7, 0x61, 0x9b, 0xe9, 0xdc, 0x84, 0x8d, 0xf6, 0x39, 0xac, 0xd6, 0x56, 0x5d, 0x7f, 0x4d, 0xb1, 0xfc, 0x14, 0xd9, 0x31, 0xc8, 0x59, 0x83, 0x0e, 0x36, 0x8e, 0x70, 0xee, 0x98, 0xb5, 0x39, 0x3f, 0x5d, 0x4f, 0x2b, 0x66, 0x14, 0xcf, 0xe1, 0xc9, 0xb2, 0x7a, 0x66, 0x34, 0x73, 0xb6, 0x65, 0x4c, 0x47, 0x4d, 0x71, 0x5a, 0x0b, 0xe4, 0xf8, 0x5b, 0xa3, 0xb9, 0x37, 0x57, 0x99, 0x8e, 0xbd, 0x4e, 0x28, 0xaa, 0xc0, 0x35, 0x23, 0xe1, 0xe9, 0xa7, 0xa7, 0x60, 0x71, 0x9a, 0x7e, 0xf9, 0x21, 0xb0, 0x9c, 0xb5, 0xcc, 0x07, 0x4b, 0xc8, 0xc2, 0x09, 0x6b, 0x51, 0x55, 0x66, 0xbd, 0xac, 0xdf, 0x2a, 0xd2, 0x7e, 0xe8, 0x59, 0x0e, 0x51, 0x26, 0x79, 0x3b, 0x1d, 0xdb, 0x3f, 0x8b, 0xb5, 0x7f, 0x0a, 0x8b, 0x9b, 0xd0, 0x39, 0x3a, 0xf4, 0x6b, 0xb7, 0x31, 0x9b, 0x38, 0x47, 0x71, 0xcc, 0x3f, 0xc0, 0xbe, 0x0f, 0xc0, 0x20, 0xc3, 0x69, 0xdf, 0x8c, 0x05, 0xb0, 0x04, 0xc7, 0x3b, 0x40, 0x71, 0x9a, 0x8b, 0x47, 0x6c, 0xf4, 0xea, 0x39, 0x3c, 0x38, 0x9f, 0x97, 0xf6, 0x88, 0xb4, 0x1c, 0x96, 0x80, 0x57, 0x4b, 0x42, 0x31, 0xce, 0xde, 0x72, 0x9c, 0x6c, 0x3c, 0x2c, 0x91, 0xda, 0xc0, 0xc9, 0xe8, 0x05, 0x69, 0x9b, 0xa7, 0x53, 0x48, 0x36, 0x33, 0xdb, 0x7e, 0xc8, 0x63, 0x53, 0xa8, 0x84, 0xfe, 0x6c, 0xdc, 0x33, 0xbc, 0x8c, 0xd7, 0x8b, 0xc5, 0xce, 0xef, 0x98, 0x3f, 0x9d, 0x50, 0x2c, 0x31, 0xd3, 0x09, 0x05, 0xdb, 0x99, 0xa2, 0xd3, 0x15, 0x6c, 0x31, 0xb6, 0x82, 0xd1, 0x51, 0xdb, 0xf3, 0xe9, 0x3a, 0xa4, 0x5b, 0x7c, 0x69, 0x3b, 0xe5, 0x4f, 0xfc, 0x15, 0xb7, 0xd5, 0x88, 0x25, 0xe5, 0x5f, 0xa1, 0x1e, 0x7f, 0xca, 0xd4, 0x23, 0xff, 0xdf, 0x59, 0x0f, 0x07, 0xed, 0x24, 0x29, 0x74, 0xdb, 0x82, 0x4b, 0xf6, 0x56, 0x24, 0xb4, 0xec, 0x6d, 0x34, 0xfd, 0xc4, 0x4f, 0x78, 0xfb, 0x47, 0x33, 0x42, 0xd0, 0x9d, 0x1b, 0x92, 0xb5, 0x7e, 0x30, 0x23, 0x08, 0x2d, 0x52, 0x30, 0xe1, 0xcd, 0xda, 0x3d, 0x40, 0x1f, 0x05, 0xf1, 0xdd, 0x12, 0x37, 0x73, 0x9b, 0x87, 0x49, 0x01, 0x20, 0x47, 0x33, 0x16, 0xb6, 0x6c, 0x4a, 0x01, 0xd2, 0xc6, 0xe5, 0xa0, 0x8c, 0xb7, 0xa4, 0x12, 0xa7, 0xb8, 0xe6, 0xdc, 0xb8, 0x2e, 0xb2, 0x5f, 0x30, 0x7e, 0xc5, 0xfb, 0xcc, 0x02, 0x86, 0x19, 0xe4, 0x45, 0x7f, 0x40, 0x96, 0x0f, 0xa7, 0x8b, 0xf3, 0x2f, 0x5c, 0xfc, 0x21, 0xd9, 0x3d, 0x2c, 0xde, 0x4c, 0xb7, 0x7c, 0x8a, 0x8e, 0x93, 0xad, 0xa2, 0xe2, 0xf1, 0x94, 0x70, 0x1f, 0xdb, 0xa9, 0xbb, 0x39, 0xba, 0x29, 0xb6, 0x15, 0xda, 0x75, 0x8c, 0x22, 0xdf, 0xc8, 0xfa, 0x02, 0xd7, 0x62, 0xda, 0xe6, 0xb7, 0x91, 0x4c, 0x59, 0xe3, 0x88, 0x1e, 0xfa, 0x08, 0x9d, 0xe7, 0xcb, 0x22, 0xe2, 0x52, 0xb9, 0x95, 0x59, 0x87, 0xa3, 0x27, 0x79, 0x0b, 0x48, 0xf4, 0xff, 0xe6, 0x3e, 0xa2, 0x60, 0xe0, 0xa6, 0x16, 0xe4, 0x58, 0x6a, 0xa8, 0x89, 0xe7, 0x93, 0x45, 0x45, 0xd2, 0x40, 0x15, 0x08, 0xfe, 0xf4, 0xd9, 0x38, 0xb3, 0xaf, 0x58, 0x00, 0xbd, 0x82, 0xb2, 0x3b, 0x22, 0x66, 0xfb, 0x37, 0xf6, 0xec, 0x76, 0x56, 0x9f, 0x8a, 0xe8, 0xa6, 0x09, 0xb9, 0xc2, 0x4c, 0xc7, 0xc4, 0x5c, 0x11, 0x4f, 0xb9, 0x2d, 0xe1, 0x5c, 0x3d, 0xcb, 0xed, 0x6f, 0x83, 0xd0, 0x56, 0xb3, 0x9c, 0xd5, 0xbc, 0x36, 0xba, 0x5e, 0x5e, 0x8e, 0xb3, 0x80, 0x8d, 0xe4, 0xd9, 0xf9, 0x38, 0x4e, 0xb7, 0x92, 0xc5, 0xa7, 0x76, 0x16, 0x72, 0xaa, 0x53, 0xbc, 0x2b, 0xad, 0x89, 0x7f, 0x6c, 0x15, 0xeb, 0x05, 0x99, 0xf6, 0x62, 0x1f, 0x78, 0x39, 0xa3, 0x97, 0x45, 0x93, 0x36, 0x82, 0xe6, 0x3e, 0x28, 0xdc, 0x02, 0xcb, 0xf0, 0x79, 0x27, 0xc2, 0x5e, 0x9c, 0x0b, 0x13, 0x69, 0xbd, 0x82, 0x4b, 0xe3, 0xd2, 0xb2, 0x8e, 0x65, 0xdd, 0xd9, 0x27, 0xae, 0x87, 0x25, 0xab, 0xa8, 0xd6, 0x06, 0x55, 0x1d, 0xf7, 0xb6, 0xb7, 0xcf, 0xbd, 0x82, 0x19, 0xe3, 0xe6, 0xa5, 0xed, 0xed, 0x5d, 0x9d, 0x2b, 0x56, 0xd2, 0xa6, 0xf7, 0xd2, 0x16, 0x66, 0x6d, 0x96, 0x6c, 0xde, 0x4a, 0x4d, 0x4b, 0x57, 0xb6, 0xd2, 0x0e, 0x77, 0x33, 0xdb, 0xe7, 0xee, 0xfe, 0x56, 0xa2, 0xf5, 0xf3, 0x7c, 0x57, 0x9a, 0x9b, 0xe8, 0x25, 0x25, 0x19, 0x9d, 0xf7, 0x76, 0x67, 0xe2, 0xdb, 0xa0, 0x65, 0xe9, 0xdd, 0xd5, 0x9d, 0x1d, 0xea, 0xb2, 0xb8, 0x1e, 0xaf, 0x61, 0xd9, 0x2a, 0x4a, 0x52, 0xd1, 0xcb, 0xcc, 0xf9, 0x2e, 0xec, 0x5c, 0x46, 0x3b, 0xc3, 0xf4, 0x4a, 0x46, 0x6a, 0x73, 0x5e, 0xa3, 0x4b, 0x57, 0xf0, 0x78, 0x36, 0x60, 0x8f, 0x33, 0x67, 0xac, 0x9c, 0x69, 0x83, 0xd9, 0x73, 0x57, 0xde, 0xcb, 0x76, 0xfa, 0xe9, 0x51, 0x5d, 0xba, 0x8c, 0x1d, 0x01, 0xa5, 0xeb, 0xca, 0x54, 0x11, 0xda, 0x80, 0xb6, 0xe5, 0x99, 0x45, 0x5f, 0xdd, 0xa0, 0x6f, 0xaf, 0xfe, 0xd3, 0x22, 0xf1, 0x3c, 0xaa, 0x31, 0x3a, 0xaf, 0x20, 0x1d, 0x9a, 0x04, 0xb1, 0x19, 0xcc, 0xe8, 0x31, 0x6d, 0xb3, 0x33, 0x4c, 0x51, 0xeb, 0x58, 0x8d, 0x5b, 0x5a, 0x7b, 0xd8, 0xde, 0x7a, 0x5a, 0x1f, 0x26, 0x3f, 0x9f, 0x24, 0x1d, 0xc9, 0xc8, 0x4f, 0x5d, 0x1f, 0xf0, 0x43, 0x31, 0xd3, 0x8a, 0x4c, 0x16, 0x96, 0xa4, 0x57, 0xf7, 0x45, 0x84, 0xf8, 0x74, 0xbb, 0x00, 0x41, 0xb5, 0x54, 0x71, 0x3b, 0x1d, 0xf3, 0x4e, 0x82, 0x58, 0xe0, 0x3c, 0x69, 0x13, 0x05, 0xed, 0xec, 0xa0, 0xe0, 0xdc, 0xd7, 0x10, 0x6c, 0x1c, 0x8a, 0x04, 0x91, 0x33, 0x9d, 0xee, 0x74, 0x38, 0x9f, 0x6d, 0x08, 0x2e, 0xa2, 0xb7, 0x0f, 0x15, 0x07, 0xe7, 0x78, 0xb3, 0xf2, 0x7b, 0x9c, 0x2e, 0xf3, 0x53, 0xfe, 0x3b, 0xe6, 0x7a, 0xa3, 0xa1, 0xd3, 0xc2, 0xaa, 0x6a, 0x1c, 0x4b, 0xd2, 0x31, 0xec, 0x57, 0xef, 0xbb, 0x41, 0xb5, 0xe1, 0xe8, 0x83, 0xa4, 0x8d, 0xd9, 0xe6, 0x93, 0x6f, 0xae, 0x67, 0xe7, 0xee, 0x9a, 0x74, 0x8e, 0x8f, 0x37, 0xec, 0xab, 0xb2, 0xb7, 0x0d, 0x70, 0x4d, 0xbf, 0xea, 0x73, 0x6f, 0x8e, 0xd0, 0x78, 0x73, 0x99, 0xfb, 0x4a, 0xe9, 0x76, 0x86, 0xb0, 0x88, 0x4e, 0xf1, 0x89, 0x49, 0xf4, 0xdb, 0xfd, 0xa5, 0x20, 0xb1, 0x54, 0x63, 0x5c, 0x6e, 0xc5, 0x5a, 0xca, 0xac, 0x55, 0x58, 0x22, 0xed, 0x50, 0xcc, 0xd7, 0x30, 0x37, 0x7f, 0x86, 0xce, 0xdf, 0x31, 0x55, 0x09, 0xbb, 0x7b, 0x49, 0xfb, 0xe8, 0x41, 0xbf, 0x9d, 0x46, 0x0a, 0xe3, 0x33, 0x17, 0x74, 0x5d, 0x43, 0x36, 0x2e, 0xfd, 0x6c, 0xaf, 0xfc, 0xe6, 0xcf, 0x45, 0x37, 0xa1, 0x5f, 0x43, 0x11, 0x88, 0x66, 0x6d, 0x94, 0xa8, 0xbd, 0x1d, 0xff, 0x23, 0xff, 0x77, 0xac, 0x2b, 0x30, 0xda, 0xef, 0xac, 0x02, 0x07, 0x93, 0xa3, 0x3c, 0xc4, 0xf7, 0x23, 0xfc, 0x16, 0x92, 0x2f, 0xf7, 0x9b, 0xd3, 0xb9, 0x21, 0x16, 0x6b, 0xfc, 0xf4, 0x5b, 0xcb, 0x7e, 0xc3, 0xec, 0x37, 0xc2, 0xe9, 0xeb, 0xcd, 0x0b, 0xa2, 0x9b, 0xf0, 0x8d, 0xec, 0x8b, 0xb8, 0x71, 0x8d, 0x30, 0xb5, 0x19, 0x67, 0x08, 0x8e, 0xaf, 0xae, 0x1c, 0x4d, 0x18, 0x4c, 0x07, 0x72, 0xd7, 0x2d, 0xa4, 0x59, 0x1d, 0x58, 0x7e, 0xe5, 0x24, 0x89, 0xcf, 0xf3, 0x27, 0x9b, 0x5d, 0xe5, 0xd0, 0x10, 0x62, 0xd6, 0x72, 0x70, 0x4d, 0xdb, 0x84, 0xeb, 0xcd, 0xed, 0xcb, 0x41, 0x6c, 0x01, 0x78, 0x8a, 0xe7, 0x44, 0x52, 0xce, 0xac, 0xac, 0xfb, 0xc8, 0x32, 0xaa, 0xc2, 0xf7, 0xee, 0xb4, 0x9b, 0x37, 0x22, 0x05, 0x46, 0x0c, 0x44, 0x06, 0xd5, 0x22, 0x57, 0x3b, 0x94, 0x60, 0xbe, 0xb7, 0x80, 0x98, 0x73, 0x33, 0x69, 0x1b, 0x94, 0x78, 0x17, 0x71, 0xea, 0x4f, 0x16, 0x51, 0x2f, 0xb1, 0xfd, 0xdf, 0x9b, 0x7f, 0x80, 0x74, 0x9d, 0xc5, 0x71, 0xb7, 0x31, 0x99, 0x57, 0xd2, 0x48, 0x6d, 0x63, 0x16, 0x7c, 0x34, 0xe9, 0xb7, 0x7e, 0xd2, 0x97, 0x3b, 0x99, 0xdb, 0x14, 0x63, 0xa7, 0x06, 0xf9, 0x8c, 0xca, 0x14, 0x91, 0x6d, 0x16, 0xbe, 0xcb, 0x74, 0xf3, 0x4f, 0xa2, 0x8f, 0xb8, 0x99, 0x35, 0x95, 0xc8, 0x06, 0x75, 0x7f, 0x46, 0x96, 0xdf, 0x11, 0xbd, 0xd7, 0x8d, 0x75, 0xe8, 0x85, 0x4a, 0x1f, 0x98, 0x8f, 0x0c, 0xd3, 0x6d, 0x0a, 0xfa, 0x82, 0x7e, 0x33, 0x4b, 0xf3, 0x6b, 0xfc, 0xe6, 0xed, 0x20, 0x79, 0xea, 0x33, 0x33, 0x88, 0xcc, 0x66, 0x10, 0x33, 0xcd, 0x20, 0xcc, 0xe6, 0x4d, 0x01, 0x6b, 0xd1, 0x3a, 0x6c, 0x0b, 0x68, 0x3e, 0xb2, 0x2f, 0xa6, 0xeb, 0xa3, 0xd5, 0xdc, 0x87, 0x40, 0x9b, 0xf9, 0x18, 0x52, 0x8f, 0x7f, 0xc5, 0xe7, 0x73, 0x08, 0x17, 0x40, 0x9b, 0xf1, 0x22, 0xef, 0xed, 0x38, 0x34, 0x68, 0x88, 0xa4, 0xff, 0x5f, 0x95, 0x72, 0xdc, 0xbb, 0xb4, 0x35, 0x7b, 0x58, 0x8d, 0x2f, 0x48, 0x3f, 0xee, 0x6e, 0x69, 0x5d, 0x71, 0x6f, 0x2f, 0xa5, 0xec, 0x5e, 0x1a, 0x27, 0xb2, 0x63, 0x03, 0x1a, 0xea, 0xd9, 0x51, 0x56, 0x87, 0x7e, 0xb1, 0xd6, 0x95, 0xcb, 0x5a, 0x48, 0x3f, 0x1c, 0xbe, 0x7b, 0x17, 0xd3, 0xd9, 0xd0, 0x42, 0xfa, 0xa9, 0xe5, 0x07, 0x69, 0x34, 0x50, 0xd9, 0xcf, 0x2d, 0xb6, 0x9c, 0x7c, 0xf4, 0xf1, 0x9d, 0x76, 0x37, 0x03, 0x44, 0x57, 0x59, 0xad, 0xd6, 0x51, 0xfc, 0xff, 0x6d, 0xab, 0x35, 0xba, 0x0a, 0x99, 0xaf, 0xe4, 0xe3, 0x49, 0xe4, 0x7c, 0xbf, 0x0d, 0x62, 0x74, 0x25, 0xed, 0xc7, 0x9d, 0xbd, 0x5e, 0x06, 0xe9, 0xfa, 0xc6, 0x91, 0xe8, 0x4a, 0xfe, 0xb5, 0xd9, 0xc8, 0x3a, 0xc9, 0xb4, 0xe1, 0x44, 0x69, 0x0d, 0x35, 0xf6, 0xba, 0x97, 0x34, 0xa5, 0x68, 0x33, 0x8a, 0x75, 0x4b, 0x24, 0x1e, 0xba, 0x65, 0x42, 0x3b, 0xc2, 0x33, 0x66, 0x42, 0x05, 0xd9, 0x17, 0xa2, 0x9b, 0xc4, 0xba, 0x5d, 0x5f, 0x1b, 0xce, 0x9f, 0x9f, 0xc1, 0x7e, 0x81, 0xf3, 0x0f, 0x61, 0x7e, 0x46, 0x05, 0xe7, 0xe0, 0x4a, 0xeb, 0x89, 0x2b, 0xf6, 0xb4, 0xd3, 0xa8, 0xeb, 0x76, 0xb3, 0x1b, 0xe6, 0xda, 0xd7, 0x48, 0x42, 0x1c, 0xc3, 0xb0, 0x3f, 0xbd, 0x89, 0x1c, 0x8c, 0x40, 0xd6, 0x51, 0xe1, 0x15, 0x7c, 0xa2, 0x71, 0x06, 0xb0, 0xdf, 0x77, 0x0f, 0x94, 0xec, 0xe1, 0xd6, 0x54, 0x76, 0xd3, 0x2d, 0xab, 0x71, 0x23, 0xe5, 0x49, 0xec, 0x1d, 0xb3, 0x41, 0x0c, 0x7d, 0x64, 0x3d, 0xe1, 0xb1, 0xea, 0xb7, 0x35, 0x44, 0x92, 0xc2, 0xf3, 0x2f, 0xc0, 0x79, 0x56, 0x4e, 0x38, 0x58, 0x89, 0x7d, 0x4c, 0xd2, 0xa4, 0xbb, 0xf4, 0xce, 0xc0, 0x75, 0x8b, 0x1e, 0xb4, 0x07, 0x23, 0x63, 0x6a, 0xdb, 0x7f, 0xfb, 0x8d, 0xda, 0x22, 0x95, 0x21, 0x3f, 0x81, 0x65, 0xcf, 0x98, 0x86, 0x35, 0x16, 0x5d, 0x20, 0x75, 0x20, 0x8f, 0xc1, 0xde, 0x19, 0x1f, 0x22, 0x4a, 0x24, 0x5f, 0x04, 0xcc, 0xb6, 0x8d, 0xcd, 0x4f, 0xbf, 0x53, 0xd3, 0x3d, 0x12, 0x9f, 0xa7, 0x30, 0xfb, 0x4b, 0xb3, 0x38, 0x75, 0x98, 0x11, 0xa4, 0xb9, 0xd6, 0x15, 0xcd, 0xb5, 0x73, 0xca, 0xee, 0xa0, 0x9a, 0x7f, 0xf9, 0x5c, 0xf3, 0x10, 0xe3, 0xd9, 0xb0, 0xcb, 0xb0, 0xba, 0xa4, 0x58, 0xfc, 0x3e, 0x1d, 0x1f, 0x11, 0xb2, 0x47, 0x41, 0x3d, 0x5c, 0x20, 0x6d, 0x2a, 0xd0, 0x5e, 0x50, 0x1a, 0x61, 0x35, 0x78, 0x94, 0xb8, 0x1b, 0xda, 0xbb, 0xc7, 0xd5, 0x55, 0x45, 0xcd, 0xe8, 0x72, 0x2b, 0x93, 0xcb, 0x07, 0x45, 0x42, 0x0e, 0xdf, 0xad, 0xc7, 0xd9, 0x95, 0x8d, 0x13, 0x49, 0xb6, 0x53, 0xcd, 0xf1, 0x33, 0xbb, 0x80, 0xe5, 0xd9, 0xeb, 0xaa, 0xa7, 0xff, 0x97, 0x9a, 0xb8, 0xc6, 0x7a, 0xa2, 0x34, 0x5c, 0xb7, 0x32, 0x5b, 0x83, 0x92, 0x8d, 0xc6, 0x02, 0x0f, 0xf2, 0xab, 0x74, 0x53, 0x31, 0x30, 0xad, 0xc2, 0xb9, 0x5d, 0xee, 0x14, 0x2b, 0x60, 0xce, 0x2c, 0x10, 0xcb, 0x71, 0xc4, 0x07, 0x10, 0xf7, 0xe5, 0x24, 0x1b, 0x17, 0x6a, 0x17, 0xcb, 0x61, 0xce, 0x3d, 0x60, 0xc1, 0x11, 0x68, 0xd9, 0x21, 0xaf, 0xf0, 0xec, 0xaa, 0xeb, 0x14, 0xcb, 0xab, 0xb7, 0x2f, 0xe8, 0x14, 0x03, 0x53, 0xb6, 0xd7, 0xad, 0xe0, 0xeb, 0xcc, 0x82, 0x40, 0xea, 0xd6, 0x3a, 0x10, 0x6f, 0x0d, 0x81, 0xf9, 0xd6, 0x20, 0x58, 0x14, 0xb3, 0x1c, 0x64, 0xab, 0xc1, 0xdf, 0xdb, 0xed, 0x54, 0x1e, 0x97, 0xe5, 0x41, 0xde, 0xcd, 0x4a, 0x3b, 0xc7, 0xa4, 0x85, 0x34, 0xcd, 0xb5, 0xb1, 0x3b, 0x8d, 0xe3, 0x42, 0xab, 0xcf, 0x8c, 0x0f, 0xd5, 0xf5, 0xb9, 0x3b, 0xb2, 0xbc, 0x19, 0xa3, 0x60, 0xc5, 0x33, 0x64, 0xb0, 0x5d, 0xd7, 0x09, 0xd7, 0xc3, 0xe4, 0x48, 0x2a, 0x6e, 0xcf, 0xb1, 0x26, 0xf3, 0x83, 0xb4, 0xce, 0x76, 0x5a, 0x7f, 0xe6, 0x9e, 0x60, 0x48, 0x41, 0x2c, 0xe3, 0x18, 0xe3, 0xdc, 0x6d, 0xfe, 0xc9, 0x08, 0x56, 0xe4, 0x28, 0xed, 0xdc, 0x82, 0x33, 0x95, 0x04, 0x6c, 0xcd, 0x7e, 0x73, 0x98, 0xa4, 0x8e, 0xc0, 0x5c, 0x7d, 0x12, 0xcc, 0xd2, 0x3a, 0xae, 0x71, 0x9f, 0xb4, 0xbd, 0x6e, 0x7a, 0x91, 0x76, 0xbc, 0x99, 0x85, 0x89, 0xf4, 0xf9, 0x85, 0x6e, 0x5d, 0x10, 0x90, 0x6a, 0x68, 0x3b, 0x69, 0xad, 0x7b, 0x53, 0x1f, 0xf6, 0xd8, 0xdb, 0x65, 0x3f, 0x7c, 0x4e, 0x7e, 0x1a, 0xaa, 0xf0, 0x7f, 0x70, 0xdc, 0x09, 0x4a, 0x10, 0x64, 0x16, 0x23, 0x14, 0x3a, 0x03, 0x8b, 0x42, 0x27, 0xb5, 0x73, 0xfe, 0x30, 0x44, 0x31, 0x66, 0x44, 0x7f, 0xff, 0x18, 0xdf, 0x6b, 0x31, 0xc6, 0x24, 0x70, 0x62, 0xda, 0x69, 0x18, 0x52, 0xa0, 0x87, 0x1c, 0xc5, 0x90, 0xa2, 0x3b, 0xfa, 0xc0, 0x4b, 0xb4, 0x35, 0xd7, 0x86, 0xf7, 0xbc, 0x33, 0x60, 0x23, 0xde, 0xf3, 0x96, 0x97, 0x25, 0xba, 0xb7, 0x16, 0x99, 0x60, 0xc5, 0xaf, 0xfc, 0x0e, 0xe2, 0xf3, 0x3c, 0x98, 0x1b, 0xd9, 0x8f, 0x59, 0x02, 0x3e, 0xfc, 0x55, 0xa0, 0xec, 0x6a, 0x96, 0xbf, 0xd9, 0x2e, 0x37, 0x74, 0x09, 0xa3, 0xfd, 0xb4, 0xcf, 0x81, 0x78, 0xa9, 0x8f, 0xde, 0x3b, 0xee, 0xdc, 0x9a, 0xcd, 0xeb, 0x01, 0x97, 0x87, 0x6e, 0xaa, 0xea, 0xd6, 0x19, 0x1b, 0x47, 0xdc, 0xb0, 0x28, 0x99, 0xab, 0x7d, 0x85, 0x7d, 0x9f, 0x12, 0xa9, 0xba, 0xfa, 0x14, 0x08, 0x74, 0x8f, 0x36, 0x3b, 0x5b, 0x17, 0xa4, 0x24, 0xdb, 0xf1, 0x21, 0xbe, 0x03, 0x54, 0x63, 0xcf, 0x7e, 0xdb, 0x44, 0x7e, 0xee, 0x5d, 0x5b, 0x96, 0xbe, 0x5d, 0x76, 0xca, 0x3e, 0x10, 0x10, 0xc4, 0xeb, 0xc8, 0x8e, 0x98, 0x09, 0x9f, 0xcc, 0x08, 0x93, 0x10, 0x2c, 0x08, 0x79, 0xe8, 0x1b, 0x05, 0xeb, 0x75, 0x7d, 0xda, 0x5f, 0x60, 0xb2, 0x24, 0xca, 0xc1, 0x70, 0xf0, 0x58, 0x18, 0xd7, 0x3b, 0x36, 0xfe, 0x8c, 0x4f, 0x53, 0x24, 0xf1, 0xd8, 0x10, 0xfe, 0xb7, 0xe3, 0x0a, 0x7c, 0x2a, 0xae, 0xc8, 0xac, 0x09, 0xcb, 0x44, 0xeb, 0xc9, 0x92, 0xad, 0x31, 0x99, 0xa9, 0x8f, 0x39, 0x7b, 0xbb, 0x16, 0xb9, 0x55, 0x7e, 0xd7, 0x20, 0x3f, 0x7b, 0x4e, 0x26, 0x6f, 0x85, 0x5a, 0x7e, 0x92, 0x4a, 0xfd, 0x8a, 0xcd, 0xeb, 0x53, 0x74, 0xad, 0x44, 0x63, 0xac, 0x4f, 0x99, 0x90, 0xea, 0xe0, 0x3b, 0x93, 0x82, 0x12, 0x99, 0x54, 0xf4, 0x6c, 0xd5, 0x12, 0x1b, 0xea, 0x42, 0x9c, 0xd2, 0xf9, 0xa4, 0x52, 0xe0, 0x0a, 0xbe, 0x36, 0xfa, 0xda, 0x0b, 0x07, 0xd7, 0xd1, 0xff, 0x70, 0xaa, 0xfa, 0x4f, 0xd2, 0x41, 0x69, 0x72, 0x41, 0x51, 0xa1, 0x68, 0x31, 0x69, 0x07, 0xed, 0x26, 0x98, 0xdc, 0x7c, 0x34, 0xd2, 0x1f, 0x17, 0x6b, 0x92, 0xee, 0x9b, 0x3c, 0x37, 0x31, 0xca, 0x7b, 0x58, 0x5f, 0xbd, 0x28, 0x91, 0xa7, 0x61, 0x49, 0x5c, 0xea, 0x85, 0x6e, 0xa8, 0xbb, 0xa0, 0x31, 0x0b, 0xe9, 0x81, 0x9d, 0xb4, 0x2e, 0xf0, 0x3f, 0x8f, 0xfd, 0xa3, 0x12, 0xfb, 0x46, 0x99, 0x02, 0x66, 0xab, 0x6e, 0x01, 0x50, 0xf3, 0xb3, 0x13, 0x88, 0xc0, 0x4e, 0x5c, 0x89, 0x5b, 0x14, 0x30, 0x5d, 0xe0, 0x77, 0x4c, 0x4d, 0x2f, 0x63, 0xff, 0x5d, 0x12, 0xbb, 0xdf, 0x3e, 0x0d, 0x02, 0xaa, 0x23, 0x76, 0x3f, 0xf6, 0xb3, 0x00, 0xdc, 0x46, 0xeb, 0x0a, 0xff, 0x16, 0xc5, 0x7e, 0x13, 0xd9, 0xe9, 0xe3, 0x6f, 0x3f, 0x75, 0x4c, 0xc3, 0x14, 0x3e, 0xd5, 0x5a, 0x1a, 0x8b, 0xdd, 0xdf, 0x38, 0xac, 0x78, 0x33, 0xf7, 0x65, 0x4b, 0x68, 0x0f, 0x5e, 0x2b, 0x6a, 0x1c, 0x29, 0x0d, 0x4a, 0x0b, 0x3c, 0x61, 0x47, 0x51, 0x3a, 0xa4, 0xf9, 0x9c, 0x22, 0xfe, 0xc3, 0x2b, 0x98, 0x73, 0x19, 0xb6, 0xfc, 0xfe, 0x74, 0x7a, 0x8f, 0x93, 0xa5, 0xcf, 0xc4, 0x6a, 0xb2, 0xb3, 0x53, 0x80, 0x23, 0x8d, 0x23, 0x1e, 0x50, 0xc4, 0x1e, 0x90, 0x16, 0x38, 0xa7, 0x61, 0x6c, 0x21, 0x93, 0xcb, 0x69, 0xe4, 0x07, 0xcb, 0xe2, 0x27, 0xf1, 0x77, 0x76, 0xfc, 0x1d, 0xfc, 0x9d, 0x15, 0x7f, 0x0b, 0xdb, 0xb6, 0x04, 0x9f, 0x9a, 0x91, 0xf2, 0x9f, 0x6f, 0x2a, 0xc4, 0xa7, 0x86, 0xf8, 0x72, 0x76, 0xc3, 0xa2, 0x1c, 0x7f, 0xb1, 0x55, 0xe2, 0x5b, 0x4a, 0x31, 0x49, 0xd0, 0x63, 0xf8, 0x36, 0xfc, 0xbf, 0x92, 0xcb, 0xf1, 0xa3, 0xff, 0x7e, 0xe4, 0xc6, 0xc2, 0xba, 0xe5, 0x83, 0x5e, 0x98, 0xa1, 0x80, 0xf8, 0xe6, 0x7c, 0xba, 0x8d, 0x1d, 0x63, 0xf4, 0x8a, 0x69, 0x43, 0x76, 0x14, 0x85, 0x93, 0x15, 0x41, 0xc5, 0x56, 0xd1, 0x07, 0x16, 0x1a, 0x43, 0xfe, 0x3d, 0x91, 0x81, 0xb8, 0xe8, 0xae, 0x26, 0xca, 0x10, 0xdd, 0x74, 0x78, 0x58, 0xb9, 0x8f, 0x52, 0xf8, 0x9c, 0xaa, 0x85, 0xcd, 0x4e, 0x7b, 0xa8, 0x74, 0xd5, 0x91, 0xc9, 0xd3, 0x15, 0xdd, 0x18, 0x4b, 0xe1, 0x7a, 0x8b, 0x34, 0x1e, 0xcc, 0x53, 0xc4, 0xd8, 0x00, 0xdd, 0x31, 0xc6, 0x5e, 0x30, 0x09, 0xd3, 0x0e, 0x2c, 0x1c, 0x41, 0x2a, 0xb7, 0xc4, 0x7e, 0x2d, 0xa6, 0x00, 0xb1, 0x6d, 0x7c, 0x1a, 0xc5, 0xc3, 0x6a, 0xe2, 0xc4, 0x6f, 0x17, 0xec, 0xba, 0x66, 0x5f, 0xd2, 0x55, 0x7b, 0xed, 0xad, 0x45, 0x70, 0x72, 0xe8, 0xa7, 0x67, 0x10, 0x7f, 0x24, 0x43, 0x6c, 0x0d, 0x77, 0x42, 0x15, 0xe7, 0xaf, 0xc4, 0x52, 0x8a, 0x5b, 0x48, 0x7b, 0xc4, 0x26, 0xc4, 0xd3, 0x31, 0xc4, 0x93, 0xd2, 0x6c, 0xb1, 0x9b, 0xb4, 0x7f, 0x6c, 0xd6, 0xad, 0xf7, 0x88, 0x03, 0x8c, 0x4f, 0x34, 0x45, 0x37, 0x2a, 0xaf, 0xe8, 0x16, 0x2e, 0x35, 0xff, 0xb3, 0xd1, 0x4d, 0x3c, 0xd4, 0x61, 0x3a, 0x69, 0xe5, 0xeb, 0x5d, 0xa9, 0x36, 0x2b, 0xed, 0xca, 0x34, 0x0f, 0xb1, 0xf0, 0xc4, 0x35, 0xcf, 0x27, 0xa5, 0x5a, 0xec, 0xcd, 0x81, 0x4a, 0xc8, 0xfa, 0x62, 0x3e, 0x33, 0xd9, 0x2a, 0x4b, 0x42, 0x2c, 0x6e, 0xf5, 0x4d, 0x61, 0x5f, 0xf4, 0xde, 0x38, 0xdd, 0x88, 0x6a, 0x89, 0xd3, 0xdd, 0xaa, 0xde, 0xb8, 0x0d, 0x7f, 0x1b, 0xe3, 0x66, 0x9f, 0x1f, 0x96, 0x50, 0x0d, 0x3d, 0x4e, 0xd7, 0x3c, 0x6c, 0x6d, 0x8b, 0x6a, 0xf1, 0x9a, 0xda, 0xc5, 0x9a, 0x01, 0xc4, 0x4a, 0xfd, 0x33, 0xb4, 0xc7, 0x6f, 0xae, 0xc2, 0x75, 0xa5, 0xdd, 0x4f, 0xbd, 0x4b, 0x2d, 0x6a, 0x78, 0x48, 0x29, 0x90, 0xf2, 0xbb, 0xac, 0x3b, 0x1e, 0x6a, 0x17, 0x13, 0x56, 0x9c, 0x3d, 0xf3, 0xa2, 0x9b, 0xbe, 0xf8, 0xd0, 0xc2, 0x11, 0x8a, 0xd9, 0x71, 0x42, 0x9a, 0x8f, 0x63, 0x46, 0x52, 0xf3, 0x33, 0x75, 0x08, 0xd0, 0x7a, 0x16, 0xf1, 0x05, 0x70, 0xd6, 0x35, 0xcf, 0x71, 0x2d, 0x2b, 0x9d, 0x76, 0xe7, 0xef, 0x55, 0x55, 0xa5, 0x24, 0x32, 0xd8, 0x5e, 0x98, 0x89, 0x39, 0x9b, 0xf0, 0xea, 0x31, 0xd7, 0x0c, 0xd0, 0xdd, 0x3e, 0x8f, 0x19, 0x31, 0xdb, 0x88, 0x3d, 0xa7, 0x1c, 0xbf, 0xac, 0xa4, 0x94, 0x35, 0x0c, 0xb3, 0x7b, 0xc5, 0xa6, 0xb4, 0xfd, 0xe4, 0x86, 0xa7, 0xa1, 0x1c, 0xbf, 0x4e, 0xb9, 0x54, 0xeb, 0xdc, 0x6e, 0x85, 0x9c, 0xb0, 0x8a, 0x85, 0xd8, 0x33, 0xb1, 0x0f, 0x2c, 0x64, 0xa7, 0x13, 0x07, 0x94, 0x30, 0xb5, 0x54, 0x95, 0x28, 0x37, 0xca, 0xa9, 0x61, 0x38, 0x71, 0xcd, 0xe8, 0x00, 0x7d, 0x2d, 0x2b, 0x9c, 0xbc, 0x3f, 0xee, 0x63, 0xb1, 0x4e, 0x29, 0xae, 0xf1, 0xe1, 0xc4, 0x1f, 0xf9, 0xdf, 0xd0, 0xe3, 0x58, 0x58, 0x9c, 0x13, 0x77, 0x7e, 0xbc, 0xe5, 0xd8, 0xa7, 0xb5, 0xbc, 0x47, 0xda, 0x3c, 0xec, 0x37, 0x85, 0xbf, 0xb9, 0xa5, 0x8a, 0xf7, 0x1d, 0xff, 0x3c, 0x58, 0xa2, 0x04, 0x38, 0x5e, 0xe9, 0x0e, 0x4e, 0x1a, 0xab, 0x84, 0x6d, 0x5c, 0xd1, 0x3e, 0xa1, 0x7f, 0xf9, 0xcc, 0xb7, 0xa4, 0x7e, 0xe8, 0x89, 0xc4, 0x90, 0x4a, 0xb8, 0x17, 0x20, 0x0d, 0x5a, 0xe2, 0x70, 0xa8, 0x30, 0x66, 0xcb, 0x68, 0x6a, 0x29, 0xd5, 0x77, 0x9e, 0x57, 0xe0, 0xca, 0x78, 0x36, 0xd0, 0x1d, 0xa0, 0x27, 0x16, 0x8e, 0xd0, 0xbe, 0x69, 0x40, 0x77, 0xb8, 0x56, 0xe7, 0x0e, 0xbc, 0xc4, 0xa6, 0xde, 0x02, 0x33, 0x97, 0x04, 0x10, 0xfd, 0xb7, 0x96, 0x7f, 0xb6, 0xe2, 0x6f, 0xe7, 0xdc, 0x56, 0xf9, 0x9f, 0x96, 0x36, 0x35, 0xb7, 0xb4, 0xaa, 0x39, 0x1e, 0x21, 0xb9, 0xba, 0x66, 0x5e, 0x2d, 0xe8, 0xb9, 0x16, 0x61, 0xae, 0xcc, 0x5e, 0xe2, 0xac, 0x1a, 0x9e, 0x2f, 0x9d, 0xec, 0x4a, 0x6e, 0x92, 0x4c, 0x5d, 0x80, 0xb3, 0xf9, 0x2c, 0x3f, 0x14, 0x91, 0xec, 0x4a, 0x60, 0x89, 0x62, 0x91, 0x82, 0x3b, 0xd7, 0xc7, 0x6d, 0xfe, 0xa9, 0xd1, 0x0d, 0x24, 0xa3, 0xa4, 0x9e, 0xad, 0xff, 0xbd, 0xdb, 0x4c, 0x27, 0xaa, 0x48, 0x53, 0x45, 0x8c, 0x6f, 0x67, 0xfa, 0x0f, 0xfc, 0xcc, 0x9a, 0xbd, 0x16, 0x00, 0x26, 0xff, 0x81, 0x69, 0xdc, 0x5e, 0x1c, 0x2f, 0xa2, 0xfb, 0x26, 0xce, 0x4b, 0x90, 0xfe, 0xb2, 0xc8, 0xc3, 0xf1, 0x5a, 0xe9, 0x8b, 0x12, 0x97, 0xed, 0x9f, 0xd3, 0x54, 0x92, 0x96, 0xee, 0xc7, 0xff, 0x26, 0xe4, 0x0a, 0x4b, 0x14, 0xda, 0x29, 0x32, 0xbb, 0x92, 0xea, 0x9b, 0xca, 0x74, 0xf9, 0x61, 0xa5, 0x98, 0xde, 0x62, 0xc9, 0x77, 0x87, 0x5e, 0x1d, 0x55, 0x6c, 0xb8, 0xd6, 0xb4, 0xba, 0x86, 0x15, 0xeb, 0xc2, 0x21, 0xd7, 0x90, 0xb2, 0xe7, 0xe1, 0x03, 0x92, 0x35, 0x87, 0xcf, 0x20, 0x2b, 0xc2, 0x0e, 0xc5, 0xd9, 0x90, 0xe2, 0xd8, 0xcd, 0xd0, 0xff, 0x31, 0x47, 0x71, 0xdc, 0x1c, 0x49, 0xa9, 0x27, 0xd2, 0xbc, 0x05, 0xe9, 0x01, 0xa8, 0x0c, 0xb8, 0xf9, 0xed, 0x50, 0x2f, 0xcd, 0xd5, 0xbd, 0x05, 0x47, 0x46, 0x70, 0x25, 0x85, 0xf3, 0x00, 0xb5, 0xd6, 0xcb, 0xb5, 0xfd, 0x31, 0x3d, 0xec, 0xf1, 0x45, 0x37, 0x05, 0x11, 0x4b, 0x2c, 0x2c, 0xc7, 0x77, 0x2e, 0xfa, 0xde, 0x70, 0x99, 0x2f, 0xdd, 0x2a, 0x2f, 0x2e, 0x4c, 0x5e, 0xe6, 0xef, 0xb8, 0x3e, 0x88, 0xf3, 0x69, 0x27, 0xb8, 0xa5, 0xa7, 0xa1, 0x28, 0x7d, 0x1e, 0x6d, 0x2f, 0xd1, 0xef, 0xde, 0x1f, 0x61, 0x73, 0x05, 0xf2, 0x00, 0x58, 0x1b, 0x85, 0xfa, 0x80, 0x7f, 0x21, 0x54, 0xd4, 0x9d, 0x81, 0xaa, 0x5b, 0xea, 0x91, 0x9f, 0xd9, 0x06, 0x66, 0x9d, 0x93, 0x78, 0xdf, 0x3b, 0x94, 0x28, 0xb8, 0x6c, 0xb6, 0x85, 0x49, 0x81, 0x55, 0x55, 0x6f, 0x8e, 0x48, 0xf3, 0xb2, 0x7c, 0x94, 0x66, 0x9b, 0xd1, 0x09, 0x2d, 0x4c, 0x97, 0x04, 0xd9, 0xa9, 0x5a, 0x32, 0x63, 0x21, 0xd8, 0x7b, 0xc3, 0x47, 0x46, 0x16, 0xb0, 0xb6, 0xd1, 0xec, 0x73, 0x07, 0x69, 0xc6, 0x71, 0xa8, 0x5e, 0x5c, 0xcf, 0x5b, 0xe9, 0x4b, 0xcc, 0x08, 0x81, 0x83, 0x74, 0x5b, 0xaa, 0x85, 0xe3, 0x75, 0x92, 0xd0, 0xbd, 0x9b, 0x38, 0x98, 0xd7, 0x50, 0x3c, 0x97, 0x0f, 0x73, 0x13, 0x48, 0x5f, 0xb8, 0x2b, 0x61, 0x05, 0x36, 0xc7, 0xe2, 0x87, 0x91, 0x04, 0x76, 0x4f, 0xd9, 0xd1, 0xb0, 0xee, 0xbe, 0xa9, 0x7b, 0xd7, 0xb5, 0x82, 0xf9, 0xae, 0xd7, 0x5e, 0x98, 0xf3, 0xed, 0x47, 0x6d, 0x34, 0x53, 0x46, 0x3f, 0xd9, 0x2e, 0x42, 0x09, 0xdc, 0x0e, 0x77, 0x41, 0x2f, 0x6c, 0x86, 0x9d, 0x82, 0x28, 0xdc, 0x25, 0x1c, 0x12, 0x41, 0x94, 0xc5, 0xa4, 0x78, 0xd6, 0xf4, 0xf5, 0xd7, 0x5e, 0x20, 0x09, 0xe7, 0x43, 0x3f, 0x1d, 0x02, 0x9e, 0x07, 0x62, 0x4d, 0xc0, 0x99, 0xb8, 0x36, 0xba, 0x9e, 0x4e, 0x4b, 0xaf, 0x1c, 0x4a, 0xbd, 0x6b, 0xce, 0x59, 0x5a, 0xbd, 0x5e, 0x3d, 0x3c, 0x70, 0x5c, 0xe9, 0xb9, 0x7a, 0x68, 0xb0, 0x5e, 0x69, 0xbc, 0x7a, 0xe8, 0x1d, 0x8b, 0x94, 0xdb, 0x3d, 0xcb, 0xc1, 0xfe, 0xda, 0x0b, 0xa5, 0xdf, 0xc8, 0x86, 0x22, 0x55, 0xff, 0x32, 0xaf, 0x59, 0xfa, 0x14, 0xdb, 0xd4, 0xf5, 0xc6, 0x2b, 0xb8, 0x78, 0x6f, 0x88, 0x17, 0x33, 0xcb, 0xdf, 0x3c, 0xe7, 0x53, 0x3c, 0x14, 0xe7, 0x8d, 0xad, 0x38, 0x7b, 0x2f, 0x94, 0x1f, 0xc1, 0x59, 0xe0, 0x71, 0x9e, 0x9b, 0x1f, 0x73, 0x83, 0x00, 0xcf, 0x8f, 0x34, 0xae, 0x97, 0x21, 0x45, 0x27, 0xac, 0x5f, 0xe9, 0x8b, 0x9a, 0x0a, 0x27, 0x7c, 0xcd, 0xf9, 0xc8, 0x01, 0x09, 0x94, 0xf2, 0x8d, 0x33, 0x10, 0x98, 0xb1, 0x80, 0xee, 0x87, 0x8b, 0xe1, 0x32, 0xdf, 0xf8, 0x5a, 0xba, 0xe0, 0x50, 0xf2, 0x50, 0xbf, 0x27, 0x51, 0xf4, 0x29, 0xb5, 0x16, 0x9f, 0x61, 0x75, 0xae, 0xf8, 0xf2, 0xd6, 0x2b, 0x97, 0x2c, 0x3e, 0x36, 0xa1, 0xe4, 0x05, 0xbc, 0x17, 0xe1, 0x5c, 0x72, 0x44, 0xde, 0xd5, 0x4b, 0xf7, 0x6b, 0x0e, 0x22, 0xee, 0x6e, 0x1d, 0x82, 0xfb, 0x44, 0xff, 0x7c, 0x08, 0xfb, 0x43, 0x50, 0xaf, 0x97, 0xc6, 0xfb, 0xfc, 0xa6, 0x74, 0x9f, 0x57, 0x41, 0x78, 0x12, 0x6b, 0x59, 0x8f, 0xb1, 0x27, 0xd4, 0xd0, 0x19, 0x28, 0x32, 0x91, 0x5d, 0x2f, 0xd0, 0x3c, 0xa1, 0x5c, 0x7f, 0x57, 0x20, 0x53, 0x73, 0xc1, 0x3f, 0xe5, 0xb5, 0x53, 0x48, 0x51, 0x26, 0xe3, 0x77, 0xfe, 0x21, 0xcf, 0x81, 0xde, 0xaf, 0xdc, 0xce, 0x89, 0xa9, 0x15, 0xb3, 0xeb, 0xa5, 0x86, 0xfe, 0x48, 0xbf, 0x7a, 0x1e, 0x6b, 0xeb, 0x7a, 0xed, 0x05, 0xcf, 0x84, 0xf2, 0x4b, 0xaf, 0x9a, 0x32, 0xdb, 0x26, 0xde, 0x1a, 0x7c, 0xaa, 0xe4, 0x2d, 0x22, 0xcd, 0x69, 0xf7, 0x69, 0x7b, 0x49, 0xa2, 0x6d, 0xd5, 0x5c, 0xe2, 0x20, 0xf3, 0x68, 0x6d, 0xf9, 0x06, 0xd5, 0x71, 0x0a, 0xbf, 0x2f, 0xc4, 0x6f, 0xed, 0xc3, 0x8e, 0x89, 0x7d, 0x87, 0x97, 0xe1, 0xc7, 0x32, 0xd3, 0x5f, 0x7f, 0x62, 0xa9, 0x09, 0x91, 0xb4, 0xab, 0xf1, 0x91, 0x85, 0x4f, 0x9f, 0x52, 0x36, 0x5c, 0x7a, 0xe3, 0x15, 0xc5, 0xe2, 0xc1, 0x3e, 0xc0, 0xda, 0xf7, 0xb1, 0x22, 0x67, 0xfb, 0x31, 0xc6, 0x0f, 0xf3, 0xfc, 0xe4, 0x4e, 0xcc, 0xa3, 0x1a, 0xa2, 0x74, 0x5e, 0x8c, 0xdc, 0xb0, 0xf5, 0xb5, 0x03, 0xf4, 0xbd, 0x32, 0x5f, 0x49, 0xf4, 0x0b, 0x3c, 0x5f, 0x26, 0x27, 0xb7, 0x0d, 0x47, 0xb6, 0xe3, 0xd5, 0x03, 0x3c, 0x5e, 0x04, 0xf3, 0x51, 0xe1, 0x93, 0x13, 0xb9, 0xa7, 0x29, 0xb8, 0xda, 0xb7, 0x92, 0xce, 0xb2, 0x38, 0x7c, 0xf2, 0x0a, 0x3b, 0xa7, 0x84, 0x4f, 0x9e, 0x97, 0xee, 0x61, 0x37, 0x44, 0xd2, 0x2d, 0xc1, 0xb6, 0xb9, 0x20, 0xd6, 0x3f, 0x13, 0x7b, 0xf3, 0x7d, 0x79, 0x7b, 0xd7, 0xc5, 0x6d, 0xd3, 0xab, 0xc0, 0xba, 0x77, 0x9d, 0x2a, 0x29, 0xd6, 0xc5, 0x74, 0x56, 0xed, 0x50, 0x0a, 0x0f, 0xf5, 0x1f, 0xea, 0x97, 0x30, 0xde, 0xab, 0xef, 0x81, 0x9d, 0xfb, 0x49, 0x48, 0x6d, 0x5c, 0x91, 0x44, 0x41, 0x8e, 0xf6, 0x9d, 0x05, 0x0a, 0x7c, 0xb2, 0x9c, 0xe8, 0xd5, 0xe5, 0x61, 0x48, 0x33, 0x23, 0xd2, 0xa2, 0xc8, 0xfa, 0x78, 0x80, 0x6b, 0xaf, 0xc3, 0x39, 0xc1, 0x1e, 0x77, 0x23, 0x6f, 0x5d, 0xa1, 0x4e, 0xf7, 0x7b, 0x99, 0xbe, 0x1d, 0xfc, 0x0a, 0x55, 0xfb, 0x90, 0x87, 0xc8, 0x77, 0x05, 0x73, 0x53, 0x4a, 0xf3, 0x32, 0x6b, 0xa4, 0xf3, 0x38, 0x6b, 0xbd, 0xa3, 0xcb, 0x02, 0xd1, 0xdc, 0xea, 0xa5, 0xb9, 0x80, 0xe9, 0x39, 0x73, 0x23, 0xe5, 0x25, 0x6d, 0x01, 0x6e, 0x9c, 0xf3, 0x8a, 0xe4, 0xff, 0xea, 0x9f, 0x4a, 0xdf, 0x20, 0x3d, 0x13, 0xf0, 0x9b, 0x2e, 0x09, 0x6d, 0x7b, 0x2a, 0x2e, 0xf1, 0x90, 0x1c, 0xca, 0x9e, 0xff, 0x76, 0x04, 0x6b, 0x2c, 0x1d, 0x0e, 0x06, 0x52, 0x69, 0xba, 0xee, 0x66, 0x9a, 0xc4, 0xc6, 0xcf, 0x31, 0xcc, 0xea, 0x61, 0x01, 0x5b, 0x79, 0xb8, 0x49, 0x77, 0xcf, 0xa7, 0xcc, 0x37, 0x4b, 0x58, 0xac, 0x19, 0xfe, 0x2b, 0xcd, 0x3a, 0x41, 0x9c, 0x5f, 0x3c, 0x18, 0x3e, 0xed, 0x8a, 0xa1, 0x2e, 0x76, 0xf2, 0x24, 0x5c, 0x29, 0x8c, 0x6e, 0x67, 0xd4, 0x04, 0x27, 0xcc, 0x3b, 0xc7, 0xf4, 0x79, 0x67, 0x21, 0xe9, 0x4d, 0xc1, 0x9c, 0xe7, 0xcc, 0x5c, 0xc0, 0x34, 0x13, 0xd3, 0x7c, 0x53, 0x8f, 0xf3, 0xcd, 0x69, 0xcf, 0x15, 0xe7, 0x1b, 0xb3, 0xad, 0x6f, 0xce, 0x5b, 0x23, 0x52, 0xed, 0x84, 0xf9, 0x66, 0x49, 0x9a, 0x46, 0xe1, 0xf3, 0x22, 0xb0, 0xaf, 0x92, 0xdf, 0x64, 0xfb, 0x43, 0x5e, 0x07, 0xcd, 0x3a, 0xa1, 0x8d, 0x48, 0x0f, 0x87, 0x62, 0xc9, 0x5b, 0x68, 0xa6, 0xe8, 0xc7, 0x99, 0xa2, 0xbf, 0x15, 0x4c, 0xdb, 0x0f, 0xf5, 0x97, 0x7f, 0xae, 0xc8, 0x12, 0xfd, 0xc4, 0x41, 0xb3, 0x44, 0x2d, 0x2e, 0x91, 0x1e, 0x83, 0x7d, 0x70, 0x4e, 0x98, 0x2b, 0x3c, 0x26, 0x96, 0x9b, 0x02, 0xa6, 0x80, 0xd8, 0x21, 0x6e, 0x15, 0x4f, 0xea, 0xbd, 0xac, 0x1d, 0xfb, 0x04, 0x8e, 0x19, 0x27, 0xf2, 0xdb, 0x9c, 0x7a, 0xf0, 0xdc, 0x74, 0xca, 0xbd, 0x89, 0xb4, 0x63, 0x8d, 0x8f, 0x59, 0xae, 0xc7, 0xd4, 0xc6, 0xc7, 0xa4, 0x7e, 0x52, 0x89, 0xb1, 0xf7, 0x8e, 0x8f, 0xed, 0xba, 0x95, 0xc6, 0xe3, 0xf8, 0x78, 0xb7, 0x85, 0x69, 0x9e, 0xf9, 0xb7, 0xe3, 0xc9, 0xc7, 0x95, 0x8e, 0xf1, 0xb1, 0xa4, 0x6f, 0x60, 0xcc, 0x6f, 0x14, 0x99, 0x33, 0x31, 0x99, 0x9d, 0x6f, 0x8a, 0x1b, 0x7a, 0x99, 0xc9, 0x24, 0xc9, 0xe3, 0xe3, 0x97, 0x65, 0x72, 0x8d, 0xac, 0x45, 0x1a, 0x63, 0xe3, 0x9a, 0x57, 0xd2, 0xf4, 0x94, 0x51, 0xee, 0x14, 0xe6, 0x92, 0xc7, 0xf3, 0xa8, 0x1e, 0x4c, 0xcf, 0x33, 0x02, 0xd2, 0x38, 0xb1, 0xad, 0xac, 0x14, 0x73, 0xc9, 0xd2, 0x99, 0x32, 0x9e, 0x53, 0x8e, 0x4f, 0x39, 0xf7, 0xb9, 0x22, 0xc5, 0xf7, 0x5d, 0xf6, 0x25, 0xcb, 0xd3, 0x5f, 0xf2, 0xe8, 0xd3, 0xb8, 0x3a, 0xed, 0xba, 0x5a, 0x4d, 0x2f, 0x2f, 0x11, 0xeb, 0x1e, 0xbd, 0xbc, 0xe6, 0xc2, 0x81, 0x2b, 0x95, 0x2b, 0xec, 0xb8, 0xac, 0xdc, 0x32, 0xb0, 0x72, 0x4e, 0x04, 0xe7, 0x3b, 0x3b, 0x69, 0x21, 0x14, 0x70, 0x6e, 0xa5, 0x1d, 0xc1, 0x9c, 0xbc, 0xfa, 0x62, 0xdb, 0xd8, 0x6c, 0x04, 0xf7, 0x09, 0x48, 0xab, 0x65, 0xe4, 0xdd, 0x6a, 0x79, 0x3d, 0xca, 0x02, 0xe9, 0x7a, 0x29, 0x4c, 0xbb, 0x22, 0xdf, 0x47, 0x6c, 0x58, 0x9b, 0x19, 0x1d, 0x20, 0x04, 0x23, 0x6b, 0xd5, 0xe3, 0xa4, 0xdd, 0xf1, 0x7f, 0x22, 0xad, 0x59, 0x4f, 0x3b, 0x74, 0xf5, 0xb4, 0x47, 0xd7, 0x1e, 0x5d, 0x7b, 0xb5, 0xf4, 0xb0, 0x9f, 0xa5, 0x0f, 0xeb, 0x69, 0xf0, 0x7b, 0x1d, 0xdd, 0x5e, 0x04, 0x94, 0x13, 0x4f, 0xcb, 0xac, 0xa6, 0xd7, 0x22, 0xd5, 0x0e, 0x33, 0xaa, 0xdd, 0x9e, 0xa5, 0xda, 0xac, 0xff, 0x4c, 0x22, 0xaa, 0x4d, 0x79, 0xea, 0x74, 0xbb, 0x5b, 0x6a, 0x67, 0x54, 0xbb, 0x3d, 0x43, 0xb5, 0x4b, 0xb3, 0x72, 0xc1, 0x9a, 0xd9, 0x8d, 0xf4, 0x99, 0xdd, 0x20, 0x2b, 0x64, 0xd2, 0x73, 0x0e, 0x57, 0x7d, 0x2e, 0x45, 0xf4, 0x46, 0x30, 0xb5, 0x55, 0x2a, 0xcd, 0x9d, 0x89, 0x70, 0xcd, 0xd1, 0x32, 0x3e, 0x16, 0x52, 0x33, 0xd7, 0x04, 0x4a, 0x5a, 0x7b, 0x55, 0x4a, 0x2a, 0x71, 0x7a, 0x57, 0x25, 0xa5, 0xe9, 0xdd, 0xed, 0x7e, 0xb2, 0x73, 0x43, 0x34, 0x4f, 0x9a, 0x74, 0x6c, 0xa8, 0x0b, 0xd8, 0x19, 0x4a, 0xe8, 0x53, 0xe9, 0x9e, 0x97, 0xa4, 0x39, 0x35, 0x2d, 0x81, 0x84, 0x60, 0x74, 0xf5, 0xbf, 0x45, 0xc3, 0xcc, 0x55, 0x44, 0xc3, 0xb8, 0x7e, 0x69, 0x29, 0x6b, 0xb1, 0xb7, 0x4c, 0x97, 0x96, 0x67, 0xfb, 0xde, 0x44, 0x2b, 0x73, 0x28, 0x5a, 0x95, 0x4e, 0xd1, 0x8a, 0xae, 0x30, 0x06, 0x8a, 0x90, 0xdb, 0xf6, 0x48, 0xf5, 0x13, 0xfa, 0x63, 0x0d, 0xe3, 0x7d, 0x0a, 0xf0, 0x09, 0xb9, 0xe0, 0x9e, 0xf2, 0xd7, 0xd3, 0xf4, 0xec, 0x82, 0x36, 0x84, 0xd8, 0x2d, 0x50, 0xf3, 0x89, 0x2b, 0x46, 0xde, 0xda, 0xc1, 0x46, 0x4b, 0x01, 0xe3, 0xa5, 0x7d, 0x50, 0x90, 0xc5, 0x2a, 0xf6, 0x9b, 0x0e, 0x36, 0xef, 0x16, 0x34, 0xf4, 0x77, 0x4f, 0xdd, 0x89, 0x34, 0x4f, 0x10, 0xc7, 0xd1, 0xbc, 0xf4, 0x9f, 0x04, 0x51, 0x68, 0xc4, 0xff, 0xbb, 0xf4, 0xbf, 0x3d, 0xb1, 0xa4, 0x12, 0xd0, 0xf3, 0x59, 0xae, 0xd3, 0x9d, 0x6f, 0xe8, 0xfc, 0x42, 0xc1, 0x0e, 0x7d, 0x37, 0x3d, 0xbb, 0xbf, 0x85, 0xfd, 0x72, 0xeb, 0x22, 0x16, 0x86, 0x4f, 0x8f, 0xf3, 0x74, 0x6e, 0xe4, 0x0b, 0x0e, 0x6f, 0x4f, 0xa7, 0xe1, 0x7e, 0xbe, 0x34, 0xcf, 0x51, 0x20, 0xc9, 0x38, 0x97, 0x76, 0x5f, 0x09, 0x17, 0x70, 0x7e, 0x02, 0x1e, 0xe6, 0x71, 0x2c, 0x48, 0x32, 0xad, 0x22, 0x94, 0xe0, 0xe2, 0xa4, 0xb2, 0x79, 0x7c, 0x09, 0x7e, 0x99, 0xe8, 0x0b, 0xe5, 0x7a, 0x07, 0x49, 0x6f, 0xcf, 0x99, 0xc0, 0xdf, 0x14, 0xb0, 0x31, 0x9c, 0xe9, 0xbd, 0x88, 0xa5, 0x82, 0xf1, 0xfc, 0xc6, 0xa5, 0x9d, 0xe3, 0xa4, 0x37, 0xa8, 0xef, 0x3e, 0x45, 0xfc, 0xc6, 0xa5, 0xc7, 0x9e, 0x61, 0x2d, 0xbd, 0xa4, 0xef, 0x6c, 0xf8, 0x71, 0xfd, 0x41, 0x1a, 0x3f, 0xd3, 0xfb, 0x23, 0x48, 0x67, 0x8a, 0xf4, 0xbb, 0xab, 0x45, 0x6e, 0xc4, 0xc1, 0xa5, 0xf6, 0xf1, 0xf1, 0xe6, 0x5f, 0xb8, 0x78, 0x2c, 0x2d, 0xaf, 0xa0, 0xc7, 0x65, 0x3a, 0x41, 0x15, 0x6f, 0x8e, 0x1f, 0xd7, 0x00, 0x6a, 0x57, 0xcc, 0xf3, 0x2e, 0x5c, 0xdc, 0x21, 0xd5, 0x8f, 0xeb, 0xe1, 0x47, 0xb2, 0x7b, 0xef, 0xc4, 0x27, 0xf8, 0xa7, 0x22, 0x77, 0x60, 0x65, 0xdc, 0x01, 0xae, 0x8a, 0x11, 0xd8, 0xba, 0xd9, 0xeb, 0xc8, 0xf4, 0x60, 0x0b, 0x72, 0x02, 0x0e, 0x47, 0x32, 0xdb, 0x57, 0x7d, 0x77, 0xf3, 0xf5, 0xb1, 0xae, 0xc9, 0xaf, 0x82, 0xb4, 0xf5, 0xe1, 0xe8, 0x28, 0x25, 0x8d, 0x8a, 0x2c, 0x9f, 0x2b, 0x8d, 0x03, 0x80, 0x67, 0x6e, 0x22, 0xac, 0x4d, 0x9d, 0x30, 0xbb, 0x03, 0x3c, 0x81, 0xfe, 0xd7, 0x5d, 0xc1, 0xff, 0x01, 0xf4, 0x2f, 0xbc, 0xcc, 0xbf, 0x1b, 0x7d, 0xaf, 0xbf, 0xcc, 0xf7, 0xeb, 0x6c, 0x35, 0x3b, 0xd1, 0x37, 0xcc, 0x56, 0xb3, 0x13, 0x7d, 0xcb, 0xf5, 0xd5, 0xec, 0x44, 0xff, 0x62, 0x7d, 0x35, 0xeb, 0xc5, 0x91, 0x57, 0x40, 0x1a, 0x07, 0xa5, 0xe4, 0xcd, 0x21, 0x30, 0xa7, 0xf9, 0x9f, 0x52, 0x5d, 0xd3, 0xe0, 0xff, 0x5d, 0xeb, 0xec, 0xcb, 0x75, 0xd1, 0x7f, 0x85, 0x69, 0x03, 0x2c, 0xf3, 0x43, 0x45, 0x8f, 0x63, 0x15, 0x32, 0x1f, 0x9b, 0x5e, 0xa4, 0xf3, 0xe3, 0xf9, 0xac, 0x5e, 0x24, 0xdf, 0xf3, 0xd5, 0x47, 0x71, 0xa4, 0xbf, 0x88, 0xb5, 0x2e, 0xf5, 0x5b, 0xf0, 0x6b, 0x07, 0xfd, 0x79, 0xd1, 0x47, 0xbc, 0x69, 0x5e, 0x70, 0x30, 0x5e, 0xbc, 0x27, 0xa5, 0xd6, 0xfa, 0x4c, 0x92, 0x29, 0x77, 0xff, 0xbc, 0x94, 0x74, 0x78, 0xa6, 0x6d, 0x73, 0xd3, 0xad, 0xe3, 0xe1, 0x85, 0x23, 0x72, 0x50, 0xa9, 0x60, 0x74, 0xb8, 0x90, 0x69, 0x50, 0xc8, 0xec, 0xd4, 0xe9, 0x7d, 0xb7, 0xc0, 0x1d, 0xbd, 0x6e, 0xd0, 0x0b, 0xb1, 0x81, 0xc8, 0x60, 0xdc, 0x1c, 0x4b, 0x29, 0x0f, 0x31, 0x4d, 0xc4, 0xc3, 0x74, 0x02, 0xd3, 0x37, 0xc6, 0xfb, 0x4f, 0xf4, 0x4b, 0xda, 0x79, 0x92, 0xd4, 0x85, 0x6b, 0xba, 0x84, 0x59, 0x21, 0xed, 0xfc, 0xac, 0xa0, 0x36, 0x16, 0x5e, 0xa1, 0x9d, 0xf7, 0xcf, 0xc6, 0x9e, 0x4e, 0xbb, 0x42, 0xe3, 0xfa, 0x21, 0xef, 0x7b, 0xb4, 0x97, 0x33, 0x0e, 0xff, 0xa5, 0x7f, 0x05, 0x0f, 0x0a, 0x70, 0xe8, 0x53, 0xb8, 0x50, 0x80, 0x9d, 0x2c, 0xd4, 0x73, 0x95, 0xd0, 0xcd, 0x5c, 0x02, 0xff, 0x8a, 0xa1, 0xbd, 0x2c, 0xcc, 0x7b, 0xc5, 0x30, 0xce, 0xf9, 0xde, 0x72, 0x55, 0xce, 0xd7, 0xf7, 0xbf, 0x87, 0xf3, 0x9d, 0xd8, 0x2f, 0xff, 0xef, 0xe3, 0xcd, 0x59, 0xfd, 0x2a, 0xbd, 0x3a, 0xb5, 0x60, 0xf5, 0x2b, 0x22, 0x2d, 0xa0, 0xdd, 0x45, 0x87, 0xf5, 0xfe, 0xe9, 0x25, 0x6d, 0x8a, 0x4e, 0x66, 0x63, 0x5d, 0x24, 0x9d, 0x66, 0xfc, 0x6e, 0x20, 0xd7, 0x28, 0x12, 0x1b, 0x8e, 0x14, 0xa8, 0x47, 0xd3, 0xbd, 0xbf, 0x44, 0x6f, 0x33, 0x9d, 0x39, 0xc6, 0x8e, 0x31, 0x7b, 0x12, 0xff, 0xa1, 0x9d, 0x78, 0xd9, 0x9f, 0x49, 0x12, 0xd3, 0x7f, 0xf0, 0x6f, 0xff, 0x09, 0x8a, 0x79, 0xf4, 0xd3, 0xfe, 0xe0, 0xc8, 0xe5, 0x7f, 0x13, 0x62, 0xfc, 0x26, 0xe7, 0xef, 0x57, 0xff, 0xbe, 0xbf, 0x71, 0xe9, 0x5f, 0xcf, 0xf9, 0x7b, 0xfe, 0xdf, 0xf7, 0x97, 0x4e, 0x2b, 0x1a, 0xe6, 0x94, 0x48, 0x78, 0x0f, 0x80, 0x56, 0x90, 0x24, 0xbf, 0x4b, 0x27, 0x30, 0x24, 0xad, 0x43, 0x37, 0x89, 0xd6, 0x20, 0xac, 0x45, 0x18, 0x42, 0x58, 0x87, 0x30, 0x8c, 0x70, 0x3f, 0xc2, 0x03, 0x08, 0x0f, 0x22, 0x3c, 0x84, 0x30, 0x82, 0xb0, 0x1e, 0xe1, 0x61, 0x84, 0x0d, 0x08, 0x8f, 0x30, 0x7b, 0xb2, 0x00, 0x9b, 0xd8, 0xfd, 0x00, 0x80, 0xef, 0x20, 0x3c, 0x8a, 0xf0, 0x5d, 0x84, 0xef, 0x21, 0x7c, 0x1f, 0xe1, 0x31, 0x84, 0x7f, 0x40, 0xf8, 0x01, 0xc2, 0x3f, 0xea, 0xfa, 0x02, 0xfe, 0xb3, 0xae, 0x33, 0xe0, 0xbf, 0x20, 0x3c, 0x81, 0xf0, 0x5f, 0x11, 0x9e, 0x44, 0xf8, 0x27, 0x84, 0x2d, 0x08, 0x3f, 0x42, 0xd8, 0x8a, 0xf0, 0x63, 0x84, 0x6d, 0x08, 0x3f, 0x41, 0x78, 0x0a, 0x81, 0x6e, 0x20, 0x6e, 0x47, 0xf8, 0x29, 0xc2, 0x0e, 0x84, 0x7f, 0x46, 0xd8, 0x89, 0xf0, 0x33, 0x84, 0x5d, 0x08, 0x3f, 0x47, 0xd8, 0x8d, 0xf0, 0x0b, 0x84, 0x3d, 0x08, 0xbf, 0x44, 0x78, 0x06, 0xe1, 0xbf, 0x21, 0xec, 0x45, 0xf8, 0xef, 0x08, 0xa3, 0x08, 0xcf, 0x22, 0xec, 0x43, 0x78, 0x0e, 0x81, 0xec, 0x27, 0xfd, 0x0a, 0xe1, 0x79, 0x84, 0xff, 0x87, 0xdd, 0x79, 0x00, 0x78, 0x81, 0x2c, 0x57, 0x20, 0xbc, 0x84, 0x40, 0xf6, 0x92, 0x7f, 0x8d, 0xf0, 0x0a, 0xc2, 0xff, 0x8b, 0x70, 0x10, 0x81, 0xcc, 0xa0, 0x92, 0x95, 0xf8, 0xd7, 0x48, 0x23, 0x3e, 0xc2, 0x6f, 0x10, 0x48, 0x2b, 0xc2, 0x1b, 0x08, 0x47, 0x10, 0x7e, 0x4b, 0xd2, 0xd6, 0x08, 0xbf, 0x43, 0x20, 0xbb, 0xcf, 0xff, 0x03, 0xe1, 0x28, 0xc2, 0xef, 0x11, 0xc8, 0x1a, 0xf0, 0xdb, 0x08, 0xef, 0x20, 0xfc, 0x0b, 0xc2, 0x71, 0x84, 0x3f, 0x20, 0x9c, 0x40, 0x78, 0x17, 0xe1, 0x24, 0xc2, 0x1f, 0x11, 0x4e, 0x21, 0xbc, 0x87, 0xf0, 0x3e, 0xc2, 0x07, 0x08, 0xa7, 0x11, 0xce, 0x20, 0x9c, 0x45, 0xf8, 0x13, 0xc2, 0x39, 0x84, 0x3f, 0x23, 0x90, 0x1d, 0xe7, 0x8f, 0x10, 0x3e, 0x46, 0xf8, 0x57, 0x84, 0xf3, 0x08, 0x7f, 0x61, 0xf7, 0x38, 0x00, 0x3e, 0x41, 0x20, 0xc9, 0xef, 0x8b, 0x64, 0xcd, 0x8f, 0x76, 0x0d, 0x72, 0x6c, 0xe5, 0xd0, 0x60, 0x30, 0xe9, 0x36, 0x73, 0x26, 0x21, 0x58, 0x10, 0xf2, 0x80, 0x4c, 0xa3, 0x03, 0x4c, 0x06, 0x60, 0x46, 0xa6, 0xc8, 0xf6, 0x8e, 0x1d, 0x61, 0x2a, 0x90, 0x69, 0x75, 0x32, 0x96, 0x4e, 0x06, 0x4b, 0x00, 0xae, 0x45, 0x70, 0x22, 0x4c, 0x43, 0x28, 0x40, 0xb8, 0x0e, 0xa1, 0x10, 0xe1, 0x7a, 0x04, 0x5c, 0x10, 0xc3, 0x0d, 0x24, 0xcb, 0x8b, 0x70, 0x23, 0x42, 0x09, 0xc2, 0xdf, 0x20, 0x90, 0xd6, 0x8b, 0x9b, 0x80, 0x54, 0xaa, 0x33, 0x89, 0x1e, 0x70, 0x21, 0x7c, 0x46, 0xb7, 0x5b, 0x35, 0x83, 0xd9, 0xa6, 0x06, 0x98, 0x89, 0xe0, 0x45, 0xb8, 0x05, 0xc1, 0x87, 0x40, 0x32, 0xc1, 0xa5, 0x08, 0xb3, 0x11, 0xc8, 0xda, 0xa0, 0x1f, 0xc8, 0xc0, 0x04, 0xc0, 0xad, 0x08, 0xe5, 0x08, 0x9f, 0x45, 0xa8, 0x40, 0xf8, 0x5b, 0x84, 0x39, 0x08, 0xb7, 0x21, 0x90, 0x3d, 0x62, 0xe2, 0x30, 0x6e, 0x47, 0xf8, 0x1c, 0x42, 0x15, 0xc2, 0xe7, 0x11, 0xe6, 0x22, 0xdc, 0xa1, 0xeb, 0xa9, 0x08, 0x21, 0xc8, 0x08, 0xd5, 0x08, 0x35, 0x08, 0xf3, 0xc8, 0x8c, 0x26, 0xc2, 0x7c, 0x12, 0x13, 0x40, 0xa8, 0x43, 0x88, 0x20, 0x2c, 0x40, 0xa8, 0x47, 0xb8, 0x13, 0x21, 0x8a, 0xf0, 0x05, 0x04, 0xb2, 0xba, 0xf9, 0x45, 0x84, 0x18, 0x42, 0x03, 0x19, 0xa8, 0x43, 0xf8, 0x12, 0xc2, 0x62, 0x84, 0x2f, 0x23, 0x90, 0x1d, 0xc4, 0xaf, 0x20, 0xdc, 0x85, 0xf0, 0x55, 0x84, 0x25, 0x08, 0x5f, 0x43, 0xf8, 0x3a, 0xc2, 0xdd, 0x08, 0xca, 0xff, 0xc1, 0xf2, 0xbf, 0x8d, 0x40, 0x77, 0x77, 0xfe, 0x0e, 0xe1, 0x3e, 0x84, 0xbf, 0x37, 0xc6, 0xff, 0x7f, 0xf8, 0xf1, 0x6f, 0x7c, 0x7f, 0x83, 0xfe, 0xff, 0x47, 0xa7, 0xff, 0x4b, 0x11, 0x9a, 0x48, 0x05, 0x13, 0x89, 0xcf, 0x23, 0x90, 0x7c, 0x98, 0x0a, 0x6c, 0x63, 0x09, 0xda, 0x10, 0x96, 0x21, 0x2c, 0x47, 0xb8, 0x87, 0x6e, 0x61, 0x91, 0xc9, 0x5d, 0x84, 0x0e, 0x84, 0x4e, 0x04, 0x92, 0xba, 0xff, 0x06, 0x09, 0xce, 0x92, 0x49, 0x54, 0x84, 0x6e, 0x04, 0x5a, 0x57, 0xf4, 0x20, 0x7c, 0x13, 0xa1, 0x17, 0xe1, 0x5b, 0x4c, 0x53, 0xd2, 0xd5, 0xe9, 0xff, 0xff, 0xa9, 0xf2, 0x0d, 0xfa, 0x6f, 0x8c, 0xff, 0xf1, 0xe3, 0x5f, 0xab, 0x39, 0x06, 0x5a, 0x18, 0x21, 0x7a, 0x8c, 0x49, 0x0c, 0xb2, 0xdd, 0x93, 0xea, 0x23, 0x4c, 0xe7, 0xe7, 0x8b, 0xa4, 0xf3, 0x73, 0x0b, 0x74, 0x59, 0x49, 0x8a, 0x32, 0x2b, 0xc7, 0x57, 0xe6, 0x07, 0xc5, 0xed, 0x87, 0x16, 0x8c, 0xdd, 0xb6, 0x0a, 0xee, 0x3c, 0x03, 0x8b, 0x15, 0xb0, 0x34, 0x72, 0xd9, 0x3c, 0x4b, 0x40, 0x92, 0x63, 0x43, 0x7d, 0x40, 0x32, 0x75, 0xe8, 0xf3, 0x99, 0x78, 0x09, 0xfe, 0x06, 0xd8, 0xdd, 0xfc, 0xd9, 0xcc, 0xde, 0x83, 0xc4, 0x64, 0xaf, 0x66, 0xa9, 0xc5, 0x09, 0xb3, 0x92, 0xcf, 0x34, 0x3b, 0x0b, 0x8a, 0x85, 0xee, 0x78, 0x25, 0x4c, 0x74, 0x8f, 0xe9, 0x81, 0x7e, 0x65, 0xbf, 0x7d, 0x1a, 0xf8, 0xe2, 0xb6, 0xef, 0xff, 0x9a, 0x6e, 0x31, 0xc4, 0xde, 0x57, 0xca, 0x42, 0xef, 0x01, 0x59, 0xa5, 0x37, 0xfb, 0x62, 0x24, 0x39, 0xdd, 0x6e, 0x4b, 0x98, 0x1f, 0x48, 0xba, 0xa6, 0xd6, 0xf4, 0xfb, 0x42, 0xee, 0x3a, 0xc5, 0x13, 0xfa, 0xe8, 0x08, 0xbc, 0x7a, 0x60, 0xc1, 0xd9, 0x23, 0xf0, 0xbb, 0x5f, 0x2f, 0xf8, 0xe8, 0xc0, 0x41, 0xef, 0x14, 0xc7, 0x8d, 0xe1, 0x64, 0xa5, 0x7e, 0x6b, 0x81, 0xc9, 0xe6, 0xbc, 0x25, 0xd5, 0xd8, 0x1d, 0x50, 0xa6, 0x36, 0x92, 0x0d, 0x04, 0x9e, 0xfb, 0x77, 0x5f, 0xf6, 0xf2, 0xdc, 0xdd, 0xe9, 0xdc, 0xbd, 0xb1, 0xdd, 0x98, 0xfb, 0x8a, 0x72, 0xcc, 0xb3, 0x22, 0xf4, 0xe1, 0x01, 0xcc, 0xb3, 0xee, 0xec, 0x01, 0xf8, 0xed, 0xcb, 0x75, 0x1f, 0x56, 0x1e, 0x94, 0x16, 0x14, 0xde, 0x18, 0x1e, 0x08, 0x3f, 0xe7, 0x37, 0xf9, 0xc3, 0x50, 0xe1, 0xaa, 0x89, 0x3e, 0xdc, 0x38, 0x42, 0x76, 0xd2, 0x30, 0xef, 0xc3, 0x8a, 0xc5, 0x5d, 0x57, 0xd9, 0xa7, 0x69, 0x85, 0x0e, 0xbb, 0x09, 0xda, 0xe2, 0x4e, 0xfc, 0x6d, 0x8f, 0xdb, 0xf1, 0xb7, 0x3e, 0x6e, 0xc1, 0xdf, 0x55, 0xaa, 0x39, 0x36, 0xa4, 0x88, 0x3d, 0xcb, 0x98, 0xa5, 0x90, 0x76, 0x66, 0x23, 0xe1, 0x1b, 0xaa, 0x35, 0x36, 0x54, 0x4e, 0x36, 0xea, 0xc4, 0x47, 0x5e, 0xa0, 0x1c, 0x3d, 0xe1, 0xd8, 0xd3, 0x50, 0xe1, 0xb8, 0x91, 0x74, 0x73, 0xc7, 0xc1, 0xb4, 0xaa, 0x83, 0x74, 0xb0, 0x36, 0xc7, 0x41, 0xfc, 0xb0, 0xa3, 0x98, 0x49, 0xa7, 0x91, 0x7e, 0xef, 0x26, 0x0c, 0xa9, 0xd0, 0x25, 0x20, 0xdb, 0x14, 0x30, 0xf5, 0x31, 0x29, 0x32, 0xd2, 0xf2, 0xbd, 0x0c, 0x7d, 0x16, 0x2b, 0x2e, 0xa6, 0xe5, 0x1b, 0xc4, 0xf7, 0x3b, 0x48, 0xa2, 0x2d, 0xd1, 0x01, 0x26, 0x59, 0xc9, 0x67, 0xd2, 0x6e, 0x56, 0x26, 0xfd, 0x05, 0x26, 0xb2, 0xb4, 0x91, 0x50, 0x0b, 0xf6, 0x30, 0x69, 0xb6, 0xdb, 0xfb, 0xc0, 0x9a, 0x10, 0x1f, 0x48, 0x26, 0x7a, 0x91, 0x00, 0x3d, 0x9a, 0x91, 0x48, 0x5b, 0x46, 0xb7, 0xf0, 0xa8, 0x0d, 0xea, 0x9c, 0xf2, 0xc9, 0x11, 0x21, 0x1e, 0x20, 0x79, 0x53, 0xcf, 0x72, 0x30, 0xbb, 0x63, 0xb4, 0x6b, 0xb7, 0xdc, 0xee, 0xb6, 0x79, 0xa6, 0xd4, 0x0c, 0x04, 0x53, 0x5d, 0x9a, 0x22, 0xd1, 0xb3, 0xcb, 0x96, 0x1a, 0x58, 0xfc, 0x6c, 0x8d, 0xc0, 0x4f, 0x21, 0x15, 0x09, 0xe3, 0x9b, 0x5d, 0xce, 0xf6, 0x02, 0x39, 0x25, 0x0f, 0xdc, 0x44, 0x56, 0xbd, 0x17, 0xd7, 0xf4, 0xd3, 0xe9, 0xbd, 0x3b, 0xac, 0xac, 0x22, 0x3f, 0xab, 0x05, 0xcc, 0x71, 0x2b, 0x86, 0xcc, 0xc2, 0x7e, 0x63, 0xab, 0x79, 0x7e, 0xb9, 0x8d, 0x49, 0x6c, 0x2e, 0xee, 0x45, 0x6c, 0xf4, 0x82, 0x1e, 0xb3, 0x87, 0xd5, 0xa0, 0xa4, 0x62, 0x72, 0x44, 0x8c, 0xe7, 0xbb, 0x9d, 0x1e, 0x1f, 0x98, 0x17, 0x0e, 0x93, 0x25, 0x38, 0xa5, 0xc8, 0x1f, 0x83, 0xca, 0xc6, 0x61, 0xc5, 0xce, 0xcb, 0xe1, 0xf1, 0xf5, 0x7c, 0x21, 0x5e, 0xc5, 0xec, 0xb0, 0x14, 0xd2, 0x97, 0x8c, 0x07, 0x98, 0xd5, 0x35, 0x1f, 0x93, 0x0e, 0xa5, 0xdc, 0x5d, 0x4c, 0xda, 0x8f, 0xf0, 0xdf, 0xa8, 0x16, 0xb0, 0xb0, 0x7c, 0x1e, 0x76, 0x53, 0x10, 0xbe, 0xdc, 0x2b, 0x52, 0xe9, 0xac, 0xc5, 0x38, 0x12, 0x29, 0x97, 0x78, 0x3b, 0x8b, 0x9f, 0x60, 0xf1, 0x1d, 0x09, 0x33, 0xc6, 0xbd, 0x06, 0x3e, 0x8f, 0xbf, 0xb7, 0x61, 0x2d, 0xda, 0xfc, 0x51, 0xa8, 0xfc, 0xce, 0x4b, 0x24, 0x71, 0x27, 0xff, 0x93, 0x6e, 0xc1, 0x55, 0x5b, 0x4e, 0xbb, 0xe3, 0x0e, 0x8b, 0x00, 0x81, 0x86, 0xa7, 0xd9, 0xfd, 0x81, 0x4a, 0x47, 0xff, 0xf8, 0x18, 0x2d, 0x47, 0x28, 0x06, 0x8e, 0xad, 0xc9, 0x6e, 0xf0, 0x08, 0xb1, 0xfb, 0x25, 0x31, 0x39, 0xa0, 0x92, 0x7e, 0x9f, 0xf3, 0x09, 0x13, 0xe6, 0x9c, 0x07, 0x9f, 0x57, 0xac, 0x39, 0x25, 0x7d, 0x19, 0x2a, 0xb1, 0x9c, 0xb9, 0xdf, 0x79, 0x49, 0x97, 0x8f, 0x0b, 0x82, 0xec, 0xf0, 0xc3, 0xe7, 0x47, 0x4d, 0x24, 0x63, 0xda, 0x61, 0x21, 0xab, 0x23, 0x8a, 0xf9, 0xa0, 0x1f, 0x2a, 0xb1, 0xbc, 0xb9, 0x58, 0xde, 0x5c, 0x47, 0xd2, 0xef, 0x07, 0x39, 0x53, 0x1a, 0xbb, 0x5d, 0x36, 0xa1, 0xb4, 0xbd, 0x58, 0xda, 0x30, 0x6b, 0x5f, 0x84, 0xb5, 0x2f, 0xc2, 0xda, 0x67, 0xed, 0x31, 0x77, 0x5f, 0x93, 0xb8, 0x4d, 0x91, 0xdd, 0xf9, 0xdf, 0x79, 0xc9, 0x83, 0x39, 0x8e, 0x97, 0x33, 0xa4, 0x92, 0x1a, 0x52, 0x92, 0xec, 0x48, 0x4e, 0x94, 0x31, 0x8c, 0xdd, 0x8f, 0x23, 0xa0, 0xb2, 0xc7, 0xd4, 0x9d, 0xa7, 0x98, 0x59, 0x1e, 0x5f, 0x96, 0xa2, 0x58, 0x5f, 0x26, 0xc9, 0xe9, 0xaa, 0x26, 0x0b, 0x77, 0x85, 0xe2, 0xf3, 0x02, 0xc9, 0x04, 0x63, 0x7d, 0x4d, 0x58, 0x5f, 0xf1, 0x75, 0xb8, 0xd6, 0xe4, 0x99, 0x7c, 0xe2, 0x47, 0x98, 0xf2, 0xb8, 0x3b, 0x7f, 0xe3, 0xfd, 0x09, 0x6d, 0xfb, 0x03, 0x88, 0xf3, 0x3d, 0x5d, 0x17, 0x5f, 0xee, 0x27, 0xdd, 0x02, 0xec, 0xcb, 0x3b, 0xd8, 0x97, 0xb7, 0xdd, 0xb4, 0x1c, 0x71, 0x52, 0xbb, 0x70, 0x58, 0xb1, 0xe2, 0x93, 0x09, 0x6a, 0x1b, 0x87, 0xc9, 0xb2, 0x63, 0x2f, 0x74, 0xd7, 0x1e, 0xa6, 0x1b, 0x3b, 0x6b, 0x3c, 0xb6, 0xc6, 0x01, 0xb7, 0x53, 0xb5, 0xb8, 0x71, 0x2c, 0x7f, 0x65, 0x23, 0x6f, 0xf5, 0xdd, 0x2d, 0x9e, 0x60, 0xe3, 0xc8, 0x2f, 0x46, 0x5b, 0x44, 0x4f, 0xbd, 0xbb, 0x5a, 0xf1, 0x52, 0x3f, 0x71, 0x3b, 0xc9, 0x72, 0x60, 0xdc, 0xe6, 0x92, 0x63, 0xa9, 0x04, 0x38, 0x6e, 0x40, 0x2c, 0xeb, 0x69, 0x3c, 0x41, 0x3d, 0x26, 0x29, 0x43, 0xad, 0x90, 0x62, 0xd2, 0xea, 0xc6, 0x61, 0xb2, 0xdb, 0xc8, 0x4a, 0x70, 0x46, 0x20, 0x6e, 0xa6, 0x7b, 0x20, 0x9e, 0xf0, 0x77, 0xf6, 0xd1, 0x38, 0xed, 0x85, 0xef, 0xbe, 0xfc, 0xfd, 0x5f, 0x2b, 0xf9, 0xbc, 0x16, 0x2c, 0x87, 0xef, 0x7f, 0xf7, 0x65, 0x69, 0xca, 0x2f, 0x5e, 0x6a, 0x16, 0x25, 0xfb, 0xc1, 0xc1, 0x5f, 0x8e, 0x36, 0x9b, 0xbf, 0x3f, 0xaa, 0x88, 0xdf, 0xff, 0x75, 0x8f, 0xf8, 0xfc, 0x9a, 0x78, 0x50, 0x8a, 0x76, 0xd1, 0x79, 0x50, 0xa5, 0x52, 0x86, 0xdf, 0x65, 0x09, 0x49, 0xe9, 0x96, 0x07, 0xfd, 0x93, 0xb1, 0xcf, 0x56, 0x60, 0x6e, 0x95, 0xae, 0xf9, 0xd1, 0x87, 0x17, 0x8e, 0x90, 0x3c, 0x0b, 0xd1, 0x92, 0x6e, 0x6d, 0x27, 0x9d, 0xac, 0x16, 0xc5, 0x56, 0xc7, 0xfa, 0x77, 0xf7, 0x37, 0xbd, 0x42, 0x76, 0x4e, 0x12, 0xe6, 0x97, 0x93, 0xea, 0xdc, 0x2e, 0x70, 0xc9, 0x4a, 0x39, 0xb3, 0x02, 0x85, 0xf8, 0x4b, 0x48, 0x94, 0x97, 0x1f, 0x58, 0x2e, 0x75, 0xd8, 0xcf, 0xe6, 0x47, 0xd7, 0xf3, 0x5c, 0x5c, 0x99, 0x5c, 0xe0, 0x10, 0xe5, 0xf2, 0xcb, 0x67, 0x9b, 0x5e, 0x74, 0x4f, 0x8e, 0x0c, 0xa8, 0x65, 0x52, 0x54, 0xf1, 0x8c, 0xab, 0x41, 0xa6, 0x74, 0x2a, 0x59, 0xdf, 0xa7, 0xfe, 0x01, 0xa6, 0x19, 0xd8, 0x3d, 0xd0, 0xf4, 0xba, 0x67, 0x8a, 0x42, 0xe7, 0x39, 0x4b, 0x48, 0x6e, 0x95, 0xe7, 0xce, 0x62, 0xf4, 0x51, 0xf8, 0x2f, 0x9e, 0x6b, 0x3a, 0xee, 0x95, 0x7b, 0x40, 0x29, 0x61, 0xf9, 0x95, 0xf0, 0x3b, 0x24, 0x3c, 0x2f, 0x16, 0x6b, 0x31, 0xc5, 0xfa, 0xf9, 0x73, 0x4d, 0xc7, 0x22, 0x6b, 0xe2, 0x73, 0xbb, 0x21, 0x93, 0x93, 0x94, 0x93, 0x53, 0x39, 0xc6, 0x49, 0xfd, 0x72, 0x5f, 0xd3, 0x71, 0x9e, 0xcb, 0x65, 0x79, 0x38, 0x63, 0xa9, 0xd8, 0x6a, 0xc5, 0x4c, 0x56, 0xf6, 0xb0, 0xcf, 0x39, 0x54, 0xf8, 0xcb, 0x13, 0xcc, 0x2a, 0xb2, 0x2e, 0x01, 0xaa, 0x4b, 0x76, 0xce, 0x60, 0x1c, 0xa0, 0xf6, 0x95, 0x7f, 0x88, 0xfe, 0x05, 0x7f, 0xb7, 0xb1, 0x7b, 0x7a, 0x95, 0xfa, 0xec, 0xd5, 0x09, 0x05, 0x52, 0x9d, 0xf3, 0xda, 0xd8, 0x3a, 0x77, 0xd0, 0x13, 0x2b, 0x10, 0xc2, 0xa9, 0x0a, 0xf9, 0x37, 0x2f, 0x5a, 0x3f, 0x0b, 0x93, 0xb6, 0x08, 0xea, 0x09, 0x1c, 0xe3, 0x09, 0x26, 0x93, 0x4d, 0x9a, 0xd3, 0x67, 0x73, 0xfa, 0x2c, 0x0b, 0xee, 0xf0, 0xc3, 0x07, 0x70, 0x3e, 0x0a, 0x86, 0x53, 0xe5, 0x72, 0xdd, 0x9f, 0x1e, 0x05, 0x8c, 0x6d, 0x3a, 0x20, 0xc4, 0x2b, 0x48, 0xc2, 0x66, 0x85, 0xc7, 0x9e, 0xbc, 0xe1, 0xbb, 0xdf, 0xfd, 0x6e, 0xd3, 0xf4, 0xea, 0x3f, 0x6a, 0x07, 0x55, 0x4b, 0xf7, 0xa4, 0x9d, 0xeb, 0x56, 0x38, 0xb3, 0x1a, 0x28, 0x0e, 0xae, 0x0b, 0x10, 0x35, 0x37, 0x07, 0x70, 0x1e, 0x28, 0x28, 0x56, 0x9f, 0xa1, 0x34, 0xed, 0x62, 0x42, 0x63, 0xf9, 0x5b, 0xb8, 0xd6, 0x87, 0xfa, 0xdf, 0x97, 0x98, 0x33, 0xd2, 0xab, 0x05, 0xfa, 0x59, 0x85, 0x3d, 0x7d, 0x5e, 0x71, 0xd7, 0x21, 0x76, 0xdf, 0xeb, 0x6b, 0xfc, 0x7c, 0x83, 0xc5, 0x19, 0x17, 0xfe, 0xd5, 0x1a, 0x76, 0x8a, 0xf4, 0xb5, 0xac, 0x7c, 0x29, 0xbb, 0x69, 0x62, 0x75, 0x3a, 0x62, 0x43, 0x3b, 0x85, 0xb8, 0x25, 0x22, 0xa8, 0xe7, 0x48, 0xb3, 0x84, 0x7e, 0xf7, 0xc3, 0x1a, 0xd9, 0x82, 0x54, 0xd6, 0x21, 0x21, 0xad, 0x71, 0x3e, 0x0d, 0x79, 0xb1, 0xa4, 0x94, 0x6c, 0xd8, 0x42, 0x67, 0x52, 0x4c, 0xe3, 0xcf, 0x79, 0x66, 0xa7, 0x6b, 0x05, 0x58, 0x89, 0xa2, 0x93, 0x46, 0x85, 0xf0, 0xbe, 0xfd, 0x3f, 0x01, 0xfb, 0x2c, 0x59, 0x1b, 0x9b, 0x15, 0x61, 0xe7, 0x28, 0xac, 0x7e, 0xe1, 0x55, 0xda, 0x2e, 0x3a, 0x57, 0xa1, 0xf2, 0x1b, 0xec, 0x4c, 0x0f, 0xd8, 0x4f, 0xb4, 0xb1, 0xb8, 0x55, 0x42, 0x3f, 0xd9, 0xa1, 0x58, 0x49, 0xc7, 0x92, 0x5c, 0xee, 0xd5, 0xdc, 0xb3, 0xb5, 0xb3, 0xee, 0x15, 0xda, 0x87, 0xba, 0xfe, 0x02, 0x6b, 0x6e, 0xa9, 0xbc, 0x44, 0xac, 0xb3, 0xde, 0x5e, 0xcc, 0xf3, 0x28, 0xb6, 0xcd, 0xca, 0xf3, 0x24, 0xeb, 0x2c, 0xb2, 0x23, 0xdd, 0x72, 0x66, 0xa7, 0xca, 0xc1, 0xce, 0xb0, 0x3b, 0x49, 0xfb, 0x31, 0x49, 0x75, 0xc5, 0x49, 0xba, 0xec, 0x86, 0x6e, 0x28, 0x28, 0x5a, 0x9f, 0x8a, 0x9f, 0xe6, 0xda, 0x33, 0xf8, 0xbd, 0x9f, 0xaa, 0x80, 0xe4, 0x87, 0x12, 0x3a, 0xb5, 0xc0, 0x54, 0x6e, 0xec, 0xbf, 0x27, 0xa5, 0xa0, 0x4b, 0x66, 0xbd, 0xff, 0x68, 0x73, 0x9b, 0x47, 0x5c, 0x93, 0xec, 0x35, 0x3d, 0x3f, 0x18, 0x9f, 0xe3, 0x11, 0x7f, 0x3a, 0xf0, 0xfc, 0xa0, 0xea, 0xdc, 0xdd, 0xdf, 0x92, 0x5f, 0x58, 0x05, 0xa6, 0xe7, 0x53, 0x38, 0xf3, 0x9a, 0x1f, 0x79, 0x4e, 0x11, 0x5d, 0xa1, 0x0d, 0xeb, 0x3c, 0xb2, 0x54, 0xe7, 0x0e, 0x16, 0xfc, 0xae, 0x61, 0x88, 0xbe, 0x99, 0xfa, 0x71, 0xe8, 0x4f, 0x56, 0xa8, 0xfe, 0x93, 0x17, 0xdc, 0xc2, 0xf1, 0xe1, 0x78, 0x81, 0xa7, 0xce, 0x23, 0xba, 0xc3, 0xee, 0xdf, 0x35, 0x0c, 0xa8, 0x17, 0x88, 0x82, 0xbc, 0xb6, 0xef, 0xd5, 0x7d, 0xab, 0x4c, 0xfb, 0x56, 0x63, 0xbd, 0x7a, 0x1d, 0xbf, 0x6d, 0xe8, 0x57, 0x3e, 0x3e, 0xdc, 0xef, 0x81, 0xd7, 0xfb, 0x5d, 0xb2, 0xbb, 0xda, 0x6b, 0x1a, 0x4a, 0xad, 0x32, 0x1d, 0x58, 0x1d, 0x2f, 0xf3, 0x9a, 0x7e, 0x36, 0x78, 0x60, 0xb5, 0xea, 0x28, 0xaa, 0x02, 0x33, 0x96, 0x6a, 0xc5, 0xff, 0xa6, 0x03, 0x29, 0x45, 0xf4, 0x0a, 0x1b, 0x06, 0xa5, 0x9a, 0xeb, 0x6e, 0x4e, 0x97, 0x55, 0x33, 0xf8, 0xfa, 0xe0, 0xe1, 0x41, 0xaf, 0x70, 0xfc, 0x81, 0x78, 0xb1, 0x5b, 0x76, 0x55, 0x4b, 0x35, 0x9f, 0x71, 0x65, 0xc3, 0x8e, 0xe0, 0xdf, 0x61, 0x8c, 0x41, 0xe5, 0x11, 0xe5, 0x92, 0xaa, 0xaf, 0xbd, 0xb9, 0xa1, 0x5f, 0xbd, 0x50, 0xff, 0x7b, 0x7b, 0x15, 0xb3, 0x4f, 0xf6, 0x1f, 0xbc, 0xfd, 0x01, 0x6a, 0x7f, 0x81, 0xdb, 0xcf, 0xef, 0x7d, 0xb9, 0x82, 0x8a, 0xd9, 0xb9, 0xaf, 0x61, 0xc8, 0x35, 0xd9, 0x8a, 0x6b, 0xd9, 0xb8, 0x95, 0xe5, 0x72, 0x5a, 0x89, 0xb8, 0xc3, 0x5d, 0xe6, 0x1d, 0x43, 0x2d, 0x48, 0xb1, 0x6a, 0xb1, 0xe5, 0x2e, 0xd3, 0xdb, 0xeb, 0x52, 0x03, 0x1e, 0x21, 0x5c, 0x2d, 0x57, 0xaf, 0xe9, 0xc7, 0xd6, 0x3d, 0xf7, 0x95, 0x21, 0x0a, 0x6f, 0xfd, 0xd8, 0x65, 0xfb, 0x6a, 0xff, 0xf1, 0x75, 0x1e, 0xa1, 0x66, 0xe0, 0xf5, 0x01, 0xb2, 0x6a, 0x12, 0x3a, 0x37, 0x34, 0x16, 0xeb, 0x27, 0x39, 0xbd, 0xd7, 0x9e, 0xe5, 0x39, 0xf3, 0x7a, 0xa5, 0xef, 0x81, 0x65, 0x69, 0x8d, 0x37, 0xc8, 0xa8, 0x4d, 0x27, 0x14, 0x39, 0x6f, 0x70, 0xb7, 0x83, 0xd5, 0x21, 0x84, 0x93, 0x73, 0x82, 0x6f, 0xbc, 0xe4, 0x9e, 0x72, 0xf8, 0x7e, 0xa2, 0xb7, 0xf4, 0x2c, 0x4d, 0x39, 0x78, 0xbf, 0xbb, 0xdc, 0x0b, 0x1b, 0x77, 0x90, 0xa5, 0x2f, 0x95, 0x6c, 0xc4, 0x1c, 0xe2, 0xf4, 0x80, 0x8d, 0x44, 0x5d, 0x4a, 0xbc, 0xfa, 0x88, 0x24, 0xbf, 0xba, 0xcf, 0x1d, 0xe4, 0xd2, 0x00, 0xd2, 0xad, 0x43, 0xc0, 0x2d, 0xe5, 0xb1, 0x5b, 0x8b, 0x9d, 0xe0, 0x25, 0x3d, 0xf7, 0xcc, 0x32, 0x14, 0xce, 0x71, 0x64, 0xed, 0xb4, 0xee, 0x82, 0xb6, 0xcf, 0x33, 0x35, 0x36, 0xe0, 0xb8, 0x8e, 0x53, 0xd0, 0xe8, 0x46, 0x2f, 0x38, 0x9c, 0xf4, 0x5c, 0x36, 0x44, 0x5a, 0xab, 0xb6, 0x0f, 0xaa, 0x73, 0x4a, 0xab, 0xe7, 0x9f, 0x02, 0xc1, 0x2d, 0x7b, 0xa7, 0x34, 0x0c, 0xb3, 0x53, 0xd7, 0xe9, 0x8e, 0xe9, 0xe9, 0xd8, 0x3e, 0x20, 0x4e, 0x39, 0x13, 0x7b, 0x75, 0xfc, 0x4d, 0xa5, 0x50, 0x9a, 0xb2, 0x3e, 0xa5, 0xd8, 0x22, 0xce, 0xb8, 0x39, 0x36, 0xac, 0x3c, 0xc9, 0xef, 0xdb, 0x45, 0xef, 0xdd, 0xb4, 0x6f, 0xde, 0xb9, 0x30, 0x28, 0xb8, 0x12, 0x41, 0x9c, 0x9b, 0x91, 0xa3, 0x60, 0xb4, 0x55, 0x3d, 0x4f, 0x63, 0xd5, 0x79, 0x83, 0xe3, 0x59, 0xb2, 0x48, 0xa7, 0xcb, 0xb3, 0x33, 0xba, 0xe4, 0x0e, 0xe3, 0xa8, 0x75, 0x74, 0x81, 0xf3, 0x86, 0xf5, 0xfd, 0x74, 0x73, 0x28, 0xe2, 0x54, 0xdf, 0xd7, 0xef, 0xa5, 0x51, 0x7a, 0x1a, 0xe1, 0xc1, 0x6c, 0x3a, 0xec, 0xbf, 0x66, 0x29, 0x24, 0x59, 0xe9, 0xd6, 0xc9, 0xfa, 0x7e, 0x26, 0xbf, 0x1e, 0x48, 0x5b, 0x25, 0xa1, 0xf3, 0x74, 0xf7, 0x02, 0x49, 0x90, 0x22, 0x24, 0x3f, 0xdf, 0x90, 0x8c, 0x14, 0xab, 0x1f, 0xba, 0xc3, 0x9b, 0x5e, 0xda, 0x30, 0x1c, 0x37, 0x7b, 0xea, 0x70, 0x76, 0x99, 0xcc, 0xf1, 0x71, 0x70, 0x98, 0x2c, 0x24, 0x24, 0x84, 0xed, 0xfd, 0x71, 0xb3, 0x63, 0x5f, 0x43, 0xbf, 0x34, 0xa5, 0xe0, 0x46, 0xf5, 0xac, 0xec, 0x58, 0xbf, 0xee, 0xe0, 0x30, 0xd7, 0xd1, 0xc3, 0xbe, 0x59, 0x80, 0x6e, 0xec, 0x51, 0xbf, 0xa1, 0xef, 0xc5, 0x65, 0x27, 0xf9, 0x97, 0x8d, 0x57, 0xe2, 0x28, 0x28, 0x76, 0xee, 0xf3, 0xd4, 0xb9, 0x6c, 0xc4, 0x79, 0xe8, 0xdf, 0xfb, 0x7d, 0xc5, 0xc2, 0xfe, 0x3b, 0xe4, 0x69, 0x0a, 0xdd, 0xa9, 0x0c, 0x15, 0x14, 0xb9, 0xac, 0x11, 0x51, 0x3d, 0x5f, 0x9b, 0x3c, 0xd8, 0xcf, 0xf3, 0x75, 0x01, 0xd6, 0xe3, 0x18, 0xf6, 0xc7, 0x4a, 0x76, 0x82, 0xda, 0xc9, 0xce, 0x26, 0x4b, 0xe8, 0xc4, 0xbc, 0xfa, 0x08, 0xd2, 0xb0, 0x14, 0x52, 0xc9, 0x8a, 0xc2, 0x1b, 0xa3, 0x1b, 0x99, 0xbd, 0x40, 0xab, 0xc3, 0x44, 0x33, 0xf0, 0x6b, 0x2f, 0xb8, 0x26, 0x1f, 0x5a, 0xe7, 0x28, 0xe6, 0xcf, 0xd2, 0xe4, 0x83, 0xeb, 0x48, 0x3e, 0x64, 0xc3, 0x76, 0xec, 0x1d, 0x82, 0x6a, 0x8d, 0x98, 0xd4, 0x03, 0xfa, 0x8c, 0xa1, 0xdf, 0x39, 0x64, 0x94, 0x91, 0xea, 0xcc, 0x6e, 0x1c, 0xea, 0x94, 0xb1, 0x90, 0x63, 0x19, 0x69, 0xe3, 0x0d, 0xeb, 0x53, 0xaa, 0x8d, 0x61, 0xf9, 0x04, 0xa7, 0x90, 0x1c, 0xd7, 0x94, 0x8e, 0xa4, 0x81, 0x5c, 0xfa, 0x5d, 0x00, 0x29, 0x48, 0x29, 0x5d, 0x61, 0x4c, 0x6b, 0x2f, 0x28, 0x76, 0xec, 0x53, 0xcf, 0x29, 0x66, 0xf9, 0x06, 0x2e, 0x1b, 0x9c, 0x4e, 0x43, 0xfd, 0x9a, 0xc6, 0x14, 0xb6, 0xa3, 0x80, 0xda, 0x70, 0xd7, 0x46, 0xc5, 0xc1, 0xfb, 0x0b, 0x72, 0x57, 0xa4, 0x93, 0x21, 0xa9, 0xda, 0xdc, 0x0b, 0x1c, 0xd3, 0x90, 0x7b, 0x3b, 0xc9, 0xf5, 0x9c, 0x96, 0x98, 0xc7, 0xcf, 0x49, 0x64, 0x6b, 0x66, 0xa7, 0xa0, 0x8a, 0xd2, 0x64, 0x57, 0xd8, 0x59, 0x84, 0x5f, 0xeb, 0xa6, 0x34, 0xee, 0xd3, 0x3a, 0xbe, 0xd3, 0x7c, 0x9a, 0x4b, 0x76, 0xde, 0xd0, 0x38, 0xb2, 0xc3, 0xa9, 0x4e, 0xf7, 0xd4, 0x85, 0xa8, 0x97, 0x06, 0xdd, 0x56, 0xbd, 0x97, 0x5a, 0x7e, 0x6e, 0x8d, 0x9f, 0x53, 0x0a, 0x1f, 0x1e, 0x95, 0xac, 0x99, 0xde, 0xf8, 0x7a, 0x5a, 0xdb, 0xd2, 0xa6, 0xd1, 0x79, 0xe7, 0xbc, 0xd8, 0x1b, 0x99, 0x84, 0x15, 0xe2, 0xdb, 0xeb, 0xe7, 0x76, 0x1a, 0x23, 0x83, 0xed, 0xc8, 0xe9, 0x29, 0x85, 0xdd, 0x02, 0x72, 0x6e, 0xab, 0xe3, 0xd6, 0xe8, 0x7a, 0xac, 0xad, 0x59, 0x29, 0x8f, 0xae, 0x3f, 0x3c, 0xa0, 0xd8, 0x3c, 0xe6, 0xd7, 0x07, 0xbe, 0x33, 0x90, 0x10, 0xd6, 0x24, 0x99, 0xa5, 0x9c, 0xa4, 0xd4, 0x65, 0x85, 0xc8, 0xe0, 0x0a, 0x46, 0x29, 0x16, 0xe3, 0x18, 0x8f, 0xa4, 0x68, 0x15, 0xa3, 0x3e, 0x9f, 0xd6, 0xeb, 0x64, 0xae, 0xa2, 0x7a, 0xb3, 0xf9, 0x2b, 0xe7, 0x94, 0x38, 0xfc, 0xee, 0x5c, 0x29, 0x6d, 0x4b, 0xab, 0x14, 0xe9, 0x2e, 0x96, 0xeb, 0xd5, 0xcb, 0x9d, 0x8e, 0xe5, 0x16, 0x23, 0xd7, 0x63, 0xf7, 0x4f, 0xd2, 0xd7, 0x9d, 0x56, 0x65, 0x0e, 0x7f, 0xfe, 0x2b, 0xca, 0xdf, 0x9b, 0x29, 0x9f, 0x69, 0x93, 0xe1, 0xa5, 0xf9, 0xf8, 0xd9, 0xb7, 0xd7, 0xcb, 0xed, 0x60, 0x07, 0xb0, 0xe4, 0x0a, 0x5c, 0xc1, 0x48, 0x2b, 0x2a, 0x70, 0x25, 0xe4, 0x21, 0x2b, 0x92, 0x7e, 0x8b, 0x5f, 0x64, 0xb2, 0xb8, 0xeb, 0x75, 0x7b, 0x14, 0x0e, 0xa5, 0x7e, 0xbc, 0x9f, 0x74, 0x17, 0xeb, 0xc9, 0x87, 0x94, 0x80, 0xdb, 0x49, 0x77, 0x19, 0x49, 0xea, 0xfe, 0x37, 0xa3, 0x4a, 0x09, 0xa6, 0xce, 0xe7, 0xb1, 0xf8, 0xd7, 0x55, 0x0a, 0xd2, 0x6f, 0xc8, 0xf1, 0x37, 0x45, 0x52, 0xfc, 0xec, 0x3c, 0x5d, 0xa3, 0x00, 0x8e, 0xd5, 0xd1, 0x33, 0x60, 0x2b, 0xf7, 0x83, 0x65, 0xdf, 0x19, 0xb0, 0x1e, 0x0c, 0x91, 0xde, 0x29, 0xfd, 0xcd, 0x76, 0xb0, 0x9f, 0xf7, 0x05, 0xb2, 0x37, 0x89, 0x3d, 0xcf, 0x6a, 0xef, 0xa7, 0x9d, 0xc5, 0x96, 0x42, 0x37, 0xc8, 0x72, 0x58, 0x1e, 0x7c, 0x36, 0x20, 0x86, 0x83, 0x15, 0x7e, 0xb0, 0xd1, 0x13, 0xd6, 0x43, 0x78, 0x67, 0xdd, 0x3b, 0x43, 0x7a, 0x9c, 0x0f, 0x93, 0xcf, 0xf2, 0x9b, 0xda, 0x2e, 0x71, 0xdf, 0x68, 0x58, 0xde, 0x8f, 0x10, 0x91, 0x55, 0xdb, 0xa1, 0x54, 0xab, 0x65, 0xc7, 0xd3, 0x60, 0x6d, 0x16, 0x1b, 0x92, 0xd4, 0x93, 0xfc, 0x62, 0xb7, 0x40, 0xb9, 0x2f, 0x37, 0xd7, 0xf4, 0xd7, 0x50, 0xef, 0xb6, 0xe2, 0x53, 0xb2, 0x46, 0xf4, 0xa7, 0x75, 0x75, 0xe1, 0xaa, 0x24, 0x22, 0x2e, 0x67, 0x77, 0x0f, 0x75, 0xda, 0x42, 0x12, 0x71, 0xe6, 0xdc, 0x70, 0xf2, 0xf3, 0xe7, 0xe8, 0xf6, 0x22, 0xfa, 0xb3, 0x21, 0x29, 0x09, 0x57, 0x8c, 0xbf, 0xfe, 0xd3, 0xe3, 0x73, 0x3d, 0x58, 0x77, 0x48, 0xc8, 0xc9, 0xd8, 0x7d, 0xc8, 0x37, 0x49, 0x56, 0xd7, 0x24, 0x37, 0x84, 0x83, 0x38, 0xc7, 0x84, 0x2a, 0xc5, 0x03, 0xcf, 0xed, 0x7f, 0xf6, 0xf9, 0xd1, 0x7d, 0xa3, 0x92, 0xf9, 0xa7, 0xc1, 0x70, 0xf0, 0x70, 0xf2, 0xf0, 0x40, 0x0b, 0xd9, 0x28, 0xc4, 0xf6, 0x86, 0xe5, 0x04, 0x04, 0xc4, 0x0a, 0x73, 0xa9, 0x78, 0xb0, 0xbf, 0x0c, 0x48, 0xb2, 0xa2, 0xd9, 0x81, 0x63, 0x0c, 0xb9, 0x24, 0xd2, 0xe6, 0xe8, 0x26, 0x7e, 0xc9, 0x4a, 0x16, 0xc6, 0x17, 0x8e, 0x60, 0x5f, 0x59, 0xeb, 0xb2, 0xd4, 0x7f, 0x60, 0x1e, 0xd3, 0x8e, 0xe7, 0xf0, 0x87, 0xef, 0x56, 0x82, 0x84, 0x71, 0x5c, 0xc8, 0x53, 0xb9, 0x31, 0x55, 0xbc, 0xa8, 0x47, 0xda, 0x9c, 0x8a, 0x0c, 0x74, 0x16, 0x79, 0xe1, 0xf8, 0xb6, 0x77, 0xb7, 0x78, 0xe0, 0xf8, 0x8f, 0xd6, 0xf4, 0x4b, 0x66, 0x97, 0xa9, 0xfe, 0xf7, 0x50, 0x42, 0xe9, 0x7a, 0xa1, 0x66, 0xe0, 0x04, 0xfa, 0x93, 0x9f, 0x72, 0x0a, 0xb9, 0xc0, 0x0f, 0x49, 0xef, 0x63, 0x19, 0xe6, 0x81, 0xf5, 0xb6, 0x63, 0x5e, 0x8e, 0x52, 0xac, 0xbf, 0xcb, 0xe2, 0x9e, 0xe4, 0xc9, 0x63, 0xd6, 0x36, 0x2e, 0xec, 0x5d, 0xd3, 0x02, 0x42, 0xd4, 0xbe, 0x86, 0xbe, 0x4a, 0x13, 0x98, 0x36, 0xd2, 0x13, 0xe9, 0x64, 0x36, 0xef, 0x7f, 0xf8, 0x00, 0x8e, 0x7d, 0xc1, 0x6b, 0x3d, 0xb9, 0xc5, 0x15, 0xa4, 0xfb, 0x86, 0x9d, 0x24, 0xc7, 0x12, 0x78, 0x14, 0xbc, 0xb6, 0x23, 0xc9, 0x84, 0xb4, 0x7e, 0x30, 0xee, 0x2c, 0x15, 0xde, 0x7e, 0xca, 0x93, 0xf7, 0xf6, 0x8f, 0x5d, 0x93, 0x4e, 0x62, 0x3d, 0xdc, 0x93, 0xde, 0xde, 0xea, 0xb3, 0xc8, 0xf3, 0xc2, 0xf3, 0xbc, 0x16, 0xae, 0x9b, 0x90, 0xec, 0x84, 0x34, 0x8f, 0x32, 0x1b, 0xde, 0x9b, 0xb1, 0xbd, 0x41, 0x66, 0x51, 0xb3, 0x82, 0xbd, 0x3f, 0xb2, 0x70, 0xa4, 0x8c, 0xdb, 0xd9, 0x24, 0xf9, 0x7c, 0x60, 0x1a, 0x04, 0x6d, 0x34, 0x63, 0xbb, 0x44, 0x39, 0x14, 0x0e, 0xad, 0xe9, 0xdf, 0x95, 0x6c, 0xc9, 0x6f, 0x58, 0xfb, 0xfa, 0x9a, 0x5d, 0x6b, 0x5a, 0x2d, 0xbb, 0x92, 0xad, 0x60, 0x6e, 0xda, 0x9c, 0xcc, 0xe6, 0x94, 0xce, 0xc3, 0x03, 0xe9, 0xd4, 0x2e, 0x1b, 0x69, 0x44, 0x4b, 0xc9, 0x3b, 0x28, 0xdd, 0xc0, 0xa1, 0x35, 0x3b, 0x30, 0x1d, 0x3e, 0x8b, 0x0d, 0x03, 0xe1, 0xf9, 0xf2, 0xfc, 0x87, 0x06, 0x88, 0x8e, 0xb9, 0xf2, 0x98, 0xae, 0xbe, 0x97, 0x09, 0x53, 0x7b, 0xc9, 0x96, 0x49, 0xd0, 0x9e, 0xe4, 0xed, 0x16, 0xc2, 0xcc, 0xae, 0x39, 0x61, 0x60, 0x7f, 0x37, 0xf4, 0x02, 0x62, 0xf6, 0xc7, 0x6e, 0x13, 0x6f, 0x75, 0x41, 0xa0, 0x12, 0xb8, 0xde, 0xab, 0x23, 0xa9, 0x3e, 0xe9, 0xb1, 0x41, 0x15, 0x63, 0xef, 0x4d, 0x36, 0x59, 0xf6, 0x90, 0x3c, 0xf7, 0xfe, 0xfb, 0x84, 0x89, 0x39, 0x23, 0x75, 0x00, 0xb1, 0x89, 0x63, 0xb4, 0x19, 0x4c, 0x7b, 0xf0, 0x49, 0x63, 0xb8, 0x1d, 0x4e, 0x38, 0xba, 0x1c, 0x1c, 0x07, 0x1e, 0xcb, 0xb1, 0x1f, 0x4b, 0x7a, 0xfe, 0x74, 0x97, 0x91, 0xaf, 0xfd, 0x0f, 0x11, 0x5e, 0xfb, 0x55, 0x10, 0xef, 0xfa, 0xc1, 0x1a, 0x8f, 0x45, 0xae, 0x0e, 0x57, 0xfb, 0x2c, 0x5c, 0x42, 0xb4, 0x02, 0x57, 0x1e, 0x1c, 0x9b, 0x3a, 0xce, 0x4c, 0xfe, 0x3c, 0xc2, 0x84, 0x17, 0xd8, 0x13, 0xc3, 0x26, 0xb3, 0x14, 0x8f, 0x98, 0x20, 0x9d, 0xa0, 0x1c, 0x8b, 0x43, 0xfd, 0xbb, 0x19, 0x16, 0x8f, 0xac, 0xd9, 0x8d, 0xd8, 0xd8, 0x8d, 0x2d, 0x36, 0xb9, 0x1f, 0x4d, 0x32, 0xd9, 0x19, 0x4c, 0x5b, 0x1a, 0xe4, 0x52, 0x34, 0x0c, 0x8b, 0x7a, 0x5a, 0x57, 0xfe, 0xa7, 0x63, 0x71, 0x7c, 0x4b, 0xef, 0x83, 0x89, 0x6d, 0x47, 0x2c, 0xb2, 0xb6, 0x8a, 0x3d, 0xdd, 0x8e, 0x5e, 0xc7, 0xa7, 0x61, 0x31, 0x0e, 0x97, 0x9e, 0x71, 0xc3, 0x07, 0x5b, 0x25, 0xe1, 0xe4, 0x96, 0xc1, 0xe4, 0x07, 0x3f, 0x72, 0x87, 0xa4, 0xbc, 0x93, 0x5b, 0xbc, 0x41, 0x4f, 0xde, 0x07, 0x3f, 0x96, 0x26, 0x9d, 0xdc, 0xb2, 0x26, 0xe9, 0x15, 0xe5, 0x9a, 0x30, 0xb6, 0x84, 0xcb, 0xb3, 0xcf, 0x0a, 0x69, 0x63, 0x7a, 0x7f, 0x32, 0x93, 0x45, 0x8f, 0x85, 0x23, 0xa4, 0x47, 0x52, 0xef, 0x51, 0xe4, 0x93, 0xdb, 0xa3, 0x66, 0x6b, 0x63, 0x7a, 0x7b, 0x82, 0x2e, 0xd2, 0x52, 0x89, 0x6d, 0x92, 0x4c, 0x74, 0xcf, 0x3a, 0x95, 0xdc, 0xb1, 0xae, 0xc5, 0xd1, 0xb0, 0xf6, 0x50, 0x6a, 0x47, 0xaa, 0xd5, 0x8a, 0xcf, 0x66, 0x7a, 0xde, 0xb0, 0x0e, 0x73, 0x20, 0x29, 0xb3, 0x0f, 0x75, 0xbc, 0x98, 0x5d, 0x64, 0x9f, 0x52, 0xa0, 0x3c, 0x11, 0xc3, 0xd9, 0xdc, 0x38, 0x76, 0xaa, 0x11, 0x23, 0x8e, 0x86, 0x41, 0x3d, 0x8f, 0x24, 0xe6, 0x31, 0x48, 0x76, 0xdb, 0x1e, 0x1e, 0x65, 0x38, 0x1a, 0x94, 0xf2, 0x5c, 0xb6, 0xbf, 0x86, 0x3a, 0xb8, 0xe5, 0x83, 0xfd, 0xae, 0xe0, 0x3f, 0x1f, 0xc0, 0x5e, 0x58, 0x16, 0x07, 0xc1, 0x75, 0x19, 0x4e, 0xf5, 0xfe, 0x23, 0xcc, 0xc5, 0xf5, 0xa7, 0x03, 0x7b, 0x82, 0x43, 0x81, 0xb1, 0x36, 0xde, 0x72, 0xae, 0xd3, 0x9c, 0xea, 0x59, 0x0a, 0x09, 0xe8, 0x82, 0x4f, 0xeb, 0x57, 0x71, 0xb8, 0xb8, 0xf5, 0xed, 0xa7, 0xbc, 0x79, 0xef, 0x6c, 0x73, 0xd7, 0x78, 0xf3, 0xde, 0xde, 0xe6, 0x9e, 0xf4, 0xce, 0xd6, 0xa1, 0x14, 0x8d, 0xda, 0xf1, 0x7d, 0x4d, 0xc7, 0xb2, 0xc9, 0x6f, 0x23, 0x6c, 0x94, 0x01, 0x7b, 0x7a, 0x84, 0xe1, 0x7b, 0x4c, 0xc7, 0x6f, 0xba, 0xa7, 0x61, 0x7b, 0x5d, 0x66, 0xea, 0x69, 0x0f, 0xf5, 0xef, 0x4d, 0xb6, 0x14, 0x34, 0xe0, 0xca, 0xf1, 0xe8, 0x9a, 0xbd, 0x6b, 0x5a, 0x6d, 0xf8, 0x66, 0xe1, 0x6f, 0x3f, 0x48, 0xa6, 0xfb, 0x2a, 0x7d, 0xaf, 0x74, 0x6f, 0x65, 0x23, 0x98, 0xe5, 0x51, 0x46, 0xdf, 0x87, 0xf0, 0x56, 0xb3, 0x97, 0xb0, 0x3a, 0xcc, 0xd2, 0x5b, 0xf7, 0x12, 0x56, 0x87, 0x29, 0xb5, 0x84, 0xd8, 0xa7, 0xd9, 0xc7, 0x6b, 0x1b, 0x4a, 0xba, 0x6b, 0x14, 0xb8, 0x68, 0xf9, 0xe0, 0x27, 0x3f, 0xfb, 0x55, 0x33, 0x5c, 0x7a, 0xb3, 0x61, 0xed, 0x44, 0x4c, 0x75, 0x17, 0xf5, 0x16, 0x21, 0x6e, 0x6a, 0xba, 0xad, 0xbd, 0x56, 0xfc, 0x5f, 0x85, 0xf8, 0xb2, 0x22, 0xbe, 0xf0, 0xf9, 0x93, 0x4a, 0x7c, 0x2e, 0xc2, 0x67, 0x0c, 0xff, 0xa4, 0x34, 0x51, 0xd4, 0x55, 0xc4, 0xf1, 0x87, 0xb1, 0x7a, 0xa8, 0x17, 0x2b, 0x70, 0xe9, 0x01, 0xa2, 0x36, 0x18, 0xfa, 0x3d, 0x1a, 0x2f, 0xe8, 0x7f, 0x84, 0x53, 0xc2, 0xe6, 0xfc, 0x84, 0xb5, 0xcb, 0x9a, 0x89, 0x1d, 0xe6, 0x4f, 0x84, 0x6b, 0x4c, 0xb3, 0x81, 0xc9, 0x29, 0x72, 0x3b, 0xac, 0x3a, 0x9d, 0x26, 0x1a, 0xeb, 0x41, 0x1a, 0x8b, 0x6b, 0x25, 0xa1, 0x54, 0x64, 0x34, 0xf6, 0xc4, 0xce, 0x01, 0xa4, 0xb1, 0x55, 0xf6, 0x01, 0x9d, 0xc6, 0x2e, 0xb1, 0x0f, 0xe8, 0x34, 0x76, 0xe3, 0x23, 0x2f, 0xf8, 0x6c, 0xc7, 0x7e, 0x92, 0xa5, 0xae, 0x8d, 0x70, 0x70, 0xdd, 0x2a, 0xe9, 0x7b, 0x74, 0x1f, 0x4e, 0xf1, 0xd8, 0xde, 0xfb, 0x71, 0xa9, 0xf8, 0xde, 0x53, 0x6e, 0xe1, 0xd8, 0xd6, 0x07, 0x52, 0x5e, 0xe1, 0xbd, 0x6d, 0x6e, 0x13, 0xcd, 0xb0, 0x65, 0x26, 0x71, 0x2d, 0xd3, 0xfc, 0xca, 0xbf, 0x93, 0xe8, 0xb7, 0x70, 0x8c, 0xd6, 0xf1, 0xb1, 0x40, 0xef, 0x88, 0xd7, 0x3b, 0xf9, 0x97, 0xca, 0x23, 0x7b, 0x8c, 0xd8, 0x3b, 0x6c, 0xe1, 0x5a, 0xb9, 0x96, 0x7f, 0xab, 0x07, 0xfa, 0x9f, 0x49, 0xb6, 0xd8, 0xdf, 0x1a, 0x78, 0x66, 0xa0, 0xd5, 0x82, 0x4f, 0xe2, 0x5b, 0x03, 0x8f, 0x25, 0xb3, 0xb9, 0xf0, 0xf4, 0x8d, 0x23, 0x65, 0x6b, 0x79, 0x4a, 0x9d, 0xae, 0xd6, 0x60, 0x3f, 0xb7, 0x1f, 0x1a, 0xd8, 0x31, 0xc0, 0xe9, 0xc1, 0xa1, 0x81, 0x0d, 0xc9, 0x04, 0x9c, 0xfa, 0x11, 0xc3, 0x3d, 0xb3, 0x3f, 0xba, 0x93, 0xe8, 0xa9, 0x2d, 0x43, 0x4f, 0xed, 0x19, 0x7a, 0xba, 0xa5, 0x07, 0xee, 0x03, 0x1f, 0x9c, 0xf8, 0x89, 0x67, 0x12, 0x6f, 0x67, 0x21, 0xb6, 0x92, 0xef, 0x1d, 0x1e, 0x1d, 0xc0, 0xb6, 0xae, 0x45, 0x7a, 0x6a, 0xdf, 0x99, 0x6c, 0x32, 0xef, 0x18, 0x6e, 0xb5, 0x96, 0xe2, 0xfa, 0xf1, 0xd1, 0xe1, 0x7f, 0x48, 0x4a, 0x16, 0x97, 0x39, 0x9b, 0x77, 0x64, 0x00, 0x29, 0xea, 0x62, 0x8e, 0x3f, 0xa4, 0xa8, 0x3f, 0xc4, 0x27, 0x4e, 0x51, 0xdb, 0x12, 0x0e, 0x5c, 0xe7, 0x3a, 0x78, 0xcb, 0x7d, 0xa6, 0x2b, 0x61, 0x12, 0xa9, 0xe9, 0xa2, 0x8d, 0x03, 0xa5, 0x26, 0xb9, 0x36, 0x5c, 0x3b, 0x1e, 0x73, 0x3a, 0x86, 0x90, 0x7f, 0xd2, 0x5b, 0x4e, 0x4f, 0x39, 0x2d, 0x77, 0xdb, 0xc2, 0xb2, 0x2c, 0x73, 0x9c, 0x0d, 0xf6, 0xef, 0xc4, 0xf6, 0x1f, 0x1e, 0xd8, 0x89, 0xed, 0xc7, 0x27, 0xf1, 0xf0, 0xc0, 0xc6, 0xe4, 0xd5, 0x52, 0x62, 0xbf, 0x78, 0x51, 0x12, 0xb3, 0xb5, 0xcf, 0xd0, 0xc4, 0xcd, 0x3d, 0x8e, 0xfb, 0x1c, 0x9f, 0x86, 0x09, 0xa4, 0x89, 0xe7, 0x4b, 0xe1, 0xbd, 0xa7, 0x24, 0xdb, 0xe9, 0x2d, 0x0f, 0x24, 0x25, 0xdb, 0x7b, 0x5b, 0xdc, 0x41, 0xaf, 0x78, 0x7a, 0xdb, 0x7b, 0x48, 0x25, 0x4f, 0x23, 0x95, 0x7c, 0xef, 0x47, 0x24, 0x09, 0xcb, 0x47, 0xab, 0x64, 0xe1, 0x9c, 0x14, 0x8d, 0xca, 0xf9, 0xe9, 0x11, 0x6b, 0xd6, 0xc7, 0xe9, 0x87, 0x7a, 0x5f, 0x20, 0x9f, 0x8d, 0x44, 0xc3, 0xee, 0xcc, 0xa5, 0x8b, 0x9b, 0x75, 0xba, 0xf8, 0x21, 0xa3, 0x8b, 0x62, 0x0e, 0x5d, 0x1c, 0x64, 0x14, 0x9f, 0xd3, 0x45, 0x7c, 0x46, 0xba, 0x68, 0x62, 0x74, 0xf1, 0x2c, 0x9b, 0x25, 0x70, 0xbe, 0xc0, 0x54, 0x67, 0x91, 0x2e, 0x6e, 0x64, 0x73, 0x46, 0x36, 0xb7, 0x29, 0x99, 0x59, 0xc3, 0xa1, 0xcf, 0x1a, 0x9c, 0x2e, 0xe2, 0x33, 0xa3, 0x8b, 0x38, 0x23, 0xad, 0x19, 0xc4, 0xb5, 0xff, 0xe4, 0xbf, 0x8e, 0x32, 0x7a, 0x18, 0x65, 0xf4, 0x4c, 0x76, 0x4f, 0x61, 0xd4, 0x71, 0x0e, 0x52, 0xc7, 0x35, 0xc8, 0x7b, 0x21, 0xc5, 0xd8, 0x90, 0x7a, 0x78, 0xe0, 0xd4, 0x8f, 0xdc, 0x70, 0x66, 0xeb, 0xa9, 0x2d, 0xa9, 0x54, 0x0e, 0xae, 0xf5, 0x9e, 0x21, 0xd4, 0xf0, 0x9e, 0x71, 0xe5, 0xd1, 0xa5, 0xc2, 0xd8, 0x13, 0xab, 0x70, 0xfc, 0x8e, 0x6d, 0xaf, 0xcb, 0xa1, 0xa2, 0xac, 0x9d, 0xac, 0x65, 0xd4, 0xca, 0x04, 0xe0, 0xd8, 0x34, 0x5d, 0x79, 0x6c, 0x5e, 0xdc, 0xfe, 0xde, 0x8f, 0xbd, 0xe2, 0xb1, 0x6d, 0xa5, 0x35, 0xef, 0x6d, 0xf5, 0x0a, 0xc7, 0xb6, 0x0d, 0x0e, 0xd2, 0xe8, 0xbc, 0x52, 0x1f, 0xc3, 0x9e, 0x91, 0x9f, 0xe9, 0x23, 0xf9, 0x97, 0x8f, 0x4b, 0xfc, 0x0e, 0xb6, 0x09, 0x5f, 0x21, 0x3d, 0xca, 0xd6, 0xd1, 0x28, 0x73, 0x87, 0x36, 0xbd, 0xc0, 0x6d, 0x28, 0x73, 0xfa, 0xcb, 0x9e, 0x73, 0x47, 0x27, 0x51, 0xc7, 0x34, 0xee, 0xc7, 0x8d, 0x4f, 0xb7, 0xb0, 0x31, 0x89, 0xd4, 0xd2, 0x45, 0xd8, 0xdb, 0x38, 0xfc, 0x9d, 0x2b, 0xe2, 0x0d, 0x7b, 0xea, 0xf3, 0x3d, 0x45, 0xf7, 0x11, 0xcd, 0x54, 0x7a, 0xac, 0xf7, 0x11, 0xcd, 0x6c, 0x4c, 0x58, 0xcb, 0x39, 0xc5, 0x6c, 0x4b, 0x14, 0x95, 0x73, 0x7a, 0xf9, 0x75, 0xfe, 0x54, 0x97, 0xa6, 0x81, 0x8f, 0xfe, 0xfc, 0x03, 0xed, 0x7c, 0xd3, 0x93, 0x1e, 0xeb, 0x55, 0xf2, 0xec, 0xe2, 0xf4, 0xad, 0xd9, 0xc1, 0xf3, 0xca, 0xa4, 0x53, 0xea, 0x74, 0xda, 0xf9, 0xc8, 0x0b, 0xa4, 0x15, 0x80, 0x24, 0x12, 0x44, 0xd1, 0x84, 0xce, 0xac, 0xbb, 0x49, 0x13, 0x9c, 0xe5, 0xdf, 0x70, 0x79, 0xff, 0x8b, 0xce, 0xfa, 0xff, 0xb3, 0xd3, 0xe5, 0x28, 0x40, 0x58, 0x15, 0x03, 0xb1, 0xaf, 0x48, 0xb8, 0xd1, 0x7e, 0x8d, 0xf9, 0x51, 0x81, 0xf9, 0x90, 0xfc, 0x45, 0x89, 0xa6, 0x7d, 0x18, 0x04, 0x98, 0xd4, 0x04, 0xb2, 0x7d, 0xaa, 0xb5, 0xe6, 0x21, 0xcb, 0x03, 0x79, 0xf7, 0x5b, 0x87, 0x27, 0xaf, 0xb5, 0xad, 0x99, 0xb2, 0xda, 0x3e, 0x38, 0x75, 0x20, 0x3f, 0x75, 0xcd, 0x83, 0xe2, 0x7d, 0x65, 0xe6, 0x50, 0x99, 0x55, 0xc6, 0xe5, 0xc5, 0x65, 0x0f, 0xb1, 0xf4, 0x83, 0x7c, 0xd9, 0x83, 0xd8, 0x7b, 0xf5, 0xb0, 0x2f, 0x7e, 0x4a, 0xb2, 0x86, 0xf4, 0x53, 0xed, 0x65, 0x0f, 0x5f, 0x62, 0x0f, 0x35, 0x2c, 0x76, 0x35, 0xf3, 0xa9, 0xce, 0x24, 0x8b, 0x94, 0x99, 0x65, 0xf6, 0xb4, 0xec, 0xb2, 0x2c, 0x33, 0xe9, 0x17, 0xa5, 0x1f, 0xaa, 0x2f, 0x8b, 0xf3, 0x29, 0x78, 0x02, 0x8e, 0xa7, 0xf3, 0x7d, 0x88, 0xa7, 0xdb, 0x75, 0x3c, 0xe5, 0x3d, 0x60, 0xbd, 0x7f, 0xf2, 0xb0, 0x6d, 0xed, 0x94, 0x35, 0xf6, 0xd5, 0x53, 0x07, 0xf3, 0x07, 0xae, 0x49, 0x39, 0x1e, 0x14, 0xbf, 0x7d, 0x19, 0x7a, 0x6a, 0xae, 0xda, 0x60, 0xbd, 0xb2, 0xe2, 0x37, 0xae, 0x12, 0x70, 0xc5, 0x04, 0xd5, 0x65, 0xf0, 0xed, 0xff, 0x39, 0xec, 0x2c, 0x65, 0xe9, 0x31, 0x2c, 0x7e, 0x59, 0xcb, 0x33, 0x75, 0x6c, 0x98, 0x88, 0x1d, 0xbd, 0x2a, 0x44, 0xee, 0x0c, 0x67, 0x38, 0xc3, 0x19, 0xce, 0x70, 0x86, 0x33, 0x9c, 0xe1, 0x0c, 0x67, 0x38, 0xc3, 0x19, 0xce, 0x70, 0x86, 0x33, 0x9c, 0xe1, 0x0c, 0x67, 0x38, 0xc3, 0x19, 0xce, 0x70, 0x86, 0x33, 0x9c, 0xe1, 0x0c, 0x67, 0x38, 0xc3, 0x19, 0xce, 0x70, 0x86, 0x33, 0x9c, 0xe1, 0x0c, 0x67, 0x38, 0xc3, 0x19, 0xce, 0x70, 0x86, 0x33, 0x9c, 0xe1, 0x0c, 0x67, 0x38, 0xc3, 0x19, 0xce, 0x70, 0x86, 0x33, 0x9c, 0xe1, 0x0c, 0x67, 0x38, 0xc3, 0x19, 0xce, 0x70, 0x86, 0x33, 0x9c, 0xe1, 0x0c, 0x67, 0x38, 0xc3, 0x19, 0xce, 0x70, 0x86, 0x33, 0x9c, 0xe1, 0x0c, 0x67, 0x38, 0xc3, 0x19, 0xce, 0x70, 0x86, 0x33, 0x9c, 0xe1, 0x0c, 0x67, 0x38, 0xc3, 0x19, 0xce, 0x70, 0x86, 0x33, 0x9c, 0xe1, 0x0c, 0x67, 0x38, 0xc3, 0x19, 0xce, 0x70, 0x86, 0x33, 0x9c, 0xe1, 0x0c, 0x67, 0x38, 0xc3, 0x19, 0xce, 0x70, 0x86, 0x33, 0x9c, 0xe1, 0x0c, 0x67, 0x38, 0xc3, 0x19, 0xce, 0x70, 0x86, 0x33, 0x9c, 0xe1, 0x0c, 0x67, 0x38, 0xc3, 0x19, 0xce, 0x70, 0x86, 0x33, 0x9c, 0xe1, 0x0c, 0x67, 0x38, 0xc3, 0x19, 0xce, 0x70, 0x86, 0x33, 0x9c, 0xe1, 0x0c, 0x67, 0x38, 0xc3, 0x19, 0xce, 0x70, 0x86, 0x33, 0x9c, 0xe1, 0x0c, 0x67, 0x38, 0xc3, 0x19, 0xce, 0x70, 0x86, 0x33, 0x9c, 0xe1, 0x0c, 0x67, 0x38, 0xc3, 0x19, 0xee, 0x32, 0x77, 0xfd, 0xf3, 0x7f, 0x7b, 0x18, 0xac, 0x00, 0x50, 0x04, 0x37, 0x40, 0x31, 0xdc, 0x08, 0x25, 0xf0, 0x37, 0x30, 0x5d, 0xd3, 0xfe, 0x3f, 0x3c, 0x77, 0x63, 0xa2, 0x00, 0x00, 0x10, 0x00 }; unsigned int arosrom_len = 533755; fs-uae-2.2.3+dfsg/src/uaeexe.cpp0000644000175000017500000000453412162366655016632 0ustar glaubitzglaubitz/* * uaeexe.c - UAE remote cli * * (c) 1997 by Samuel Devulder */ #include "sysconfig.h" #include "sysdeps.h" #include "options.h" #include "uae.h" #include "uae/memory.h" #include "custom.h" #include "newcpu.h" #include "autoconf.h" #include "traps.h" #include "uaeexe.h" static struct uae_xcmd *first = NULL; static struct uae_xcmd *last = NULL; static TCHAR running = 0; static uae_u32 REGPARAM3 uaeexe_server (TrapContext *context) REGPARAM; /* * Install the server */ void uaeexe_install (void) { uaecptr loop; if (!uae_boot_rom) return; loop = here (); org (UAEEXE_ORG); calltrap (deftrapres (uaeexe_server, 0, _T("uaeexe_server"))); dw (RTS); org (loop); } /* * Send command to the remote cli. * * To use this, just call uaeexe("command") and the command will be * executed by the remote cli (provided you've started it in the * s:user-startup for example). Be sure to add "run" if you want * to launch the command asynchronously. Please note also that the * remote cli works better if you've got the fifo-handler installed. */ int uaeexe (const TCHAR *cmd) { struct uae_xcmd *nw; if (!running) goto NORUN; nw = xmalloc (struct uae_xcmd, 1); if (!nw) goto NOMEM; nw->cmd = xmalloc (TCHAR, _tcslen (cmd) + 1); if (!nw->cmd) { xfree (nw); goto NOMEM; } _tcscpy (nw->cmd, cmd); nw->prev = last; nw->next = NULL; if (!first) first = nw; if (last) { last->next = nw; last = nw; } else last = nw; return UAEEXE_OK; NOMEM: return UAEEXE_NOMEM; NORUN: write_log (_T("Remote cli is not running.\n")); return UAEEXE_NOTRUNNING; } /* * returns next command to be executed */ static TCHAR *get_cmd (void) { struct uae_xcmd *cmd; TCHAR *s; if (!first) return NULL; s = first->cmd; cmd = first; first = first->next; if (!first) last = NULL; free (cmd); return s; } /* * helper function */ #define ARG(x) (get_long (m68k_areg (regs, 7) + 4 * (x + 1))) static uae_u32 REGPARAM2 uaeexe_server (TrapContext *context) { int len; TCHAR *cmd; char *dst, *s; if (ARG (0) && !running) { running = 1; write_log (_T("Remote CLI started.\n")); } cmd = get_cmd (); if (!cmd) return 0; if (!ARG (0)) { running = 0; return 0; } dst = (char*)get_real_address (ARG (0)); len = ARG (1); s = ua (cmd); strncpy (dst, s, len); write_log (_T("Sending '%s' to remote cli\n"), cmd); xfree (s); xfree (cmd); return ARG (0); } fs-uae-2.2.3+dfsg/src/blitter.cpp0000644000175000017500000012527012162366655017024 0ustar glaubitzglaubitz/* * UAE - The Un*x Amiga Emulator * * Custom chip emulation * * (c) 1995 Bernd Schmidt, Alessandro Bissacco * (c) 2002 - 2005 Toni Wilen */ //#define BLITTER_DEBUG_NOWAIT //#define BLITTER_DEBUG //#define BLITTER_DEBUG_NO_D //#define BLITTER_INSTANT #define SPEEDUP #include "sysconfig.h" #include "sysdeps.h" #include "options.h" #include "uae.h" #include "uae/memory.h" #include "custom.h" #include "events.h" #include "newcpu.h" #include "blitter.h" #include "blit.h" #include "savestate.h" #include "debug.h" /* we must not change ce-mode while blitter is running.. */ static int blitter_cycle_exact; static int blt_statefile_type; uae_u16 bltcon0, bltcon1; uae_u32 bltapt, bltbpt, bltcpt, bltdpt; int blitter_nasty; static int original_ch, original_fill, original_line; static int blinea_shift; static uae_u16 blinea, blineb; static int blitline, blitfc, blitfill, blitife, blitsing, blitdesc; static int blitonedot, blitsign, blitlinepixel; static int blit_add; static int blit_modadda, blit_modaddb, blit_modaddc, blit_modaddd; static int blit_ch; #ifdef BLITTER_DEBUG static int blitter_dontdo; static int blitter_delayed_debug; #endif #ifdef BLITTER_SLOWDOWNDEBUG static int blitter_slowdowndebug; #endif struct bltinfo blt_info; static uae_u8 blit_filltable[256][4][2]; uae_u32 blit_masktable[BLITTER_MAX_WORDS]; enum blitter_states bltstate; static int blit_cyclecounter, blit_waitcyclecounter; static int blit_maxcyclecounter, blit_slowdown, blit_totalcyclecounter; static int blit_startcycles, blit_misscyclecounter; #ifdef CPUEMU_12 extern uae_u8 cycle_line[256]; #endif static long blit_firstline_cycles; static long blit_first_cycle; static int blit_last_cycle, blit_dmacount, blit_dmacount2; static int blit_linecycles, blit_extracycles, blit_nod; static const int *blit_diag; static int blit_frozen, blit_faulty; static int blit_final; static int blt_delayed_irq; static uae_u16 ddat1, ddat2; static int ddat1use, ddat2use; int blit_interrupt; static int last_blitter_hpos; #define BLITTER_STARTUP_CYCLES 2 /* Blitter Idle Cycle: Cycles that are free cycles (available for CPU) and are not used by any other Agnus DMA channel. Blitter idle cycle is not "used" by blitter, CPU can still use it normally if it needs the bus. same in both block and line modes number of cycles, initial cycle, main cycle */ #define DIAGSIZE 10 static const int blit_cycle_diagram[][DIAGSIZE] = { { 2, 0,0, 0,0 }, /* 0 -- */ { 2, 0,0, 0,4 }, /* 1 -D */ { 2, 0,3, 0,3 }, /* 2 -C */ { 3, 0,3,0, 0,3,4 }, /* 3 -CD */ { 3, 0,2,0, 0,2,0 }, /* 4 -B- */ { 3, 0,2,0, 0,2,4 }, /* 5 -BD */ { 3, 0,2,3, 0,2,3 }, /* 6 -BC */ { 4, 0,2,3,0, 0,2,3,4 }, /* 7 -BCD */ { 2, 1,0, 1,0 }, /* 8 A- */ { 2, 1,0, 1,4 }, /* 9 AD */ { 2, 1,3, 1,3 }, /* A AC */ { 3, 1,3,0, 1,3,4, }, /* B ACD */ { 3, 1,2,0, 1,2,0 }, /* C AB- */ { 3, 1,2,0, 1,2,4 }, /* D ABD */ { 3, 1,2,3, 1,2,3 }, /* E ABC */ { 4, 1,2,3,0, 1,2,3,4 } /* F ABCD */ }; /* following 4 channel combinations in fill mode have extra idle cycle added (still requires free bus cycle) */ static const int blit_cycle_diagram_fill[][DIAGSIZE] = { { 0 }, /* 0 */ { 3, 0,0,0, 0,4,0 }, /* 1 */ { 0 }, /* 2 */ { 0 }, /* 3 */ { 0 }, /* 4 */ { 4, 0,2,0,0, 0,2,4,0 }, /* 5 */ { 0 }, /* 6 */ { 0 }, /* 7 */ { 0 }, /* 8 */ { 3, 1,0,0, 1,4,0 }, /* 9 */ { 0 }, /* A */ { 0 }, /* B */ { 0 }, /* C */ { 4, 1,2,0,0, 1,2,4,0 }, /* D */ { 0 }, /* E */ { 0 }, /* F */ }; /* -C-D C-D- ... C-D- -- line draw takes 4 cycles (-C-D) idle cycles do the same as above, 2 dma fetches (read from C, write to D, but see below) Oddities: - first word is written to address pointed by BLTDPT but all following writes go to address pointed by BLTCPT! (some kind of internal copy because all bus cyles are using normal BLTDDAT) - BLTDMOD is ignored by blitter (BLTCMOD is used) - state of D-channel enable bit does not matter! - disabling A-channel freezes the content of BPLAPT - C-channel disabled: nothing is written There is one tricky situation, writing to DFF058 just before last D write cycle (which is normally free) does not disturb blitter operation, final D is still written correctly before blitter starts normally (after 2 idle cycles) There is at least one demo that does this.. */ // 5 = internal "processing cycle" static const int blit_cycle_diagram_line[] = { 4, 0,3,5,4, 0,3,5,4 }; static const int blit_cycle_diagram_finald[] = { 2, 0,4, 0,4 }; static const int blit_cycle_diagram_finalld[] = { 2, 0,0, 0,0 }; static int get_cycle_diagram_type (const int *diag) { for (int i = 0; i < 16; i++) { if (diag == &blit_cycle_diagram[i][0]) return i; if (diag == &blit_cycle_diagram_fill[i][0]) return i + 0x40; } if (diag == blit_cycle_diagram_line) return 0x80; if (diag == blit_cycle_diagram_finald) return 0x81; if (diag == blit_cycle_diagram_finalld) return 0x82; return 0xff; } static const int *set_cycle_diagram_type (uae_u8 diag) { if (diag >= 0x00 && diag <= 0x0f) return &blit_cycle_diagram[diag][0]; if (diag >= 0x40 && diag <= 0x4f) return &blit_cycle_diagram_fill[diag][0]; if (diag == 0x80) return blit_cycle_diagram_line; if (diag == 0x81) return blit_cycle_diagram_finald; if (diag == 0x82) return blit_cycle_diagram_finalld; return NULL; } void build_blitfilltable (void) { unsigned int d, fillmask; int i; for (i = 0; i < BLITTER_MAX_WORDS; i++) blit_masktable[i] = 0xFFFF; for (d = 0; d < 256; d++) { for (i = 0; i < 4; i++) { int fc = i & 1; uae_u8 data = d; for (fillmask = 1; fillmask != 0x100; fillmask <<= 1) { uae_u16 tmp = data; if (fc) { if (i & 2) data |= fillmask; else data ^= fillmask; } if (tmp & fillmask) fc = !fc; } blit_filltable[d][i][0] = data; blit_filltable[d][i][1] = fc; } } } STATIC_INLINE void record_dma_blit (uae_u16 reg, uae_u16 dat, uae_u32 addr, int hpos) { #ifdef DEBUGGER int type; if (blitline) type = DMARECORD_BLITTER_LINE; else type = DMARECORD_BLITTER; if (debug_dma) record_dma (reg, dat, addr, hpos, vpos, type); #endif } static void blitter_dump (void) { write_log (_T("PT A=%08X B=%08X C=%08X D=%08X\n"), bltapt, bltbpt, bltcpt, bltdpt); write_log (_T("CON0=%04X CON1=%04X DAT A=%04X B=%04X C=%04X\n"), bltcon0, bltcon1, blt_info.bltadat, blt_info.bltbdat, blt_info.bltcdat); write_log (_T("AFWM=%04X ALWM=%04X MOD A=%04X B=%04X C=%04X D=%04X\n"), blt_info.bltafwm, blt_info.bltalwm, blt_info.bltamod & 0xffff, blt_info.bltbmod & 0xffff, blt_info.bltcmod & 0xffff, blt_info.bltdmod & 0xffff); } STATIC_INLINE const int *get_ch (void) { if (blit_faulty) return &blit_diag[0]; if (blit_final) return blitline ? blit_cycle_diagram_finalld : blit_cycle_diagram_finald; return blit_diag; } STATIC_INLINE int channel_state (int cycles) { const int *diag; if (cycles < 0) return 0; diag = get_ch (); if (cycles < diag[0]) return diag[1 + cycles]; cycles -= diag[0]; cycles %= diag[0]; return diag[1 + diag[0] + cycles]; } STATIC_INLINE int channel_pos (int cycles) { const int *diag; if (cycles < 0) return 0; diag = get_ch (); if (cycles < diag[0]) return cycles; cycles -= diag[0]; cycles %= diag[0]; return cycles; } int blitter_channel_state (void) { return channel_state (blit_cyclecounter); } extern int is_bitplane_dma (int hpos); STATIC_INLINE int canblit (int hpos) { if (is_bitplane_dma (hpos)) return 0; if (cycle_line[hpos] & CYCLE_MASK) return 0; return 1; } // blitter interrupt is set when last "main" cycle // has been finished, any non-linedraw D-channel blit // still needs 2 more cycles before final D is written static void blitter_interrupt (int hpos, int done) { if (blit_interrupt) return; if (!done && (!currprefs.blitter_cycle_exact || currprefs.cpu_model >= 68020)) return; blit_interrupt = 1; send_interrupt (6, 3 * CYCLE_UNIT); if (debug_dma) record_dma_event (DMA_EVENT_BLITIRQ, hpos, vpos); } static void blitter_done (int hpos) { ddat1use = ddat2use = 0; bltstate = blit_startcycles == 0 || !currprefs.blitter_cycle_exact ? BLT_done : BLT_init; blitter_interrupt (hpos, 1); blitter_done_notify (hpos); if (debug_dma) record_dma_event (DMA_EVENT_BLITFINISHED, hpos, vpos); event2_remevent (ev2_blitter); unset_special (SPCFLAG_BLTNASTY); #ifdef BLITTER_DEBUG write_log (_T("cycles %d, missed %d, total %d\n"), blit_totalcyclecounter, blit_misscyclecounter, blit_totalcyclecounter + blit_misscyclecounter); #endif } STATIC_INLINE void chipmem_agnus_wput2 (uaecptr addr, uae_u32 w) { last_custom_value1 = w; #ifndef BLITTER_DEBUG_NO_D chipmem_wput_indirect (addr, w); debug_wputpeekdma (addr, w); #endif } static void blitter_dofast (void) { int i,j; uaecptr bltadatptr = 0, bltbdatptr = 0, bltcdatptr = 0, bltddatptr = 0; uae_u8 mt = bltcon0 & 0xFF; blit_masktable[0] = blt_info.bltafwm; blit_masktable[blt_info.hblitsize - 1] &= blt_info.bltalwm; if (bltcon0 & 0x800) { bltadatptr = bltapt; bltapt += (blt_info.hblitsize * 2 + blt_info.bltamod) * blt_info.vblitsize; } if (bltcon0 & 0x400) { bltbdatptr = bltbpt; bltbpt += (blt_info.hblitsize * 2 + blt_info.bltbmod) * blt_info.vblitsize; } if (bltcon0 & 0x200) { bltcdatptr = bltcpt; bltcpt += (blt_info.hblitsize * 2 + blt_info.bltcmod) * blt_info.vblitsize; } if (bltcon0 & 0x100) { bltddatptr = bltdpt; bltdpt += (blt_info.hblitsize * 2 + blt_info.bltdmod) * blt_info.vblitsize; } #ifdef SPEEDUP if (blitfunc_dofast[mt] && !blitfill) { (*blitfunc_dofast[mt])(bltadatptr, bltbdatptr, bltcdatptr, bltddatptr, &blt_info); } else #endif { uae_u32 blitbhold = blt_info.bltbhold; uae_u32 preva = 0, prevb = 0; uaecptr dstp = 0; int dodst = 0; for (j = 0; j < blt_info.vblitsize; j++) { blitfc = !!(bltcon1 & 0x4); for (i = 0; i < blt_info.hblitsize; i++) { uae_u32 bltadat, blitahold; uae_u16 bltbdat; if (bltadatptr) { blt_info.bltadat = bltadat = chipmem_wget_indirect (bltadatptr); bltadatptr += 2; } else bltadat = blt_info.bltadat; bltadat &= blit_masktable[i]; blitahold = (((uae_u32)preva << 16) | bltadat) >> blt_info.blitashift; preva = bltadat; if (bltbdatptr) { blt_info.bltbdat = bltbdat = chipmem_wget_indirect (bltbdatptr); bltbdatptr += 2; blitbhold = (((uae_u32)prevb << 16) | bltbdat) >> blt_info.blitbshift; prevb = bltbdat; } if (bltcdatptr) { blt_info.bltcdat = chipmem_wget_indirect (bltcdatptr); bltcdatptr += 2; } if (dodst) chipmem_agnus_wput2 (dstp, blt_info.bltddat); blt_info.bltddat = blit_func (blitahold, blitbhold, blt_info.bltcdat, mt) & 0xFFFF; if (blitfill) { uae_u16 d = blt_info.bltddat; int ifemode = blitife ? 2 : 0; int fc1 = blit_filltable[d & 255][ifemode + blitfc][1]; blt_info.bltddat = (blit_filltable[d & 255][ifemode + blitfc][0] + (blit_filltable[d >> 8][ifemode + fc1][0] << 8)); blitfc = blit_filltable[d >> 8][ifemode + fc1][1]; } if (blt_info.bltddat) blt_info.blitzero = 0; if (bltddatptr) { dodst = 1; dstp = bltddatptr; bltddatptr += 2; } } if (bltadatptr) bltadatptr += blt_info.bltamod; if (bltbdatptr) bltbdatptr += blt_info.bltbmod; if (bltcdatptr) bltcdatptr += blt_info.bltcmod; if (bltddatptr) bltddatptr += blt_info.bltdmod; } if (dodst) chipmem_agnus_wput2 (dstp, blt_info.bltddat); blt_info.bltbhold = blitbhold; } blit_masktable[0] = 0xFFFF; blit_masktable[blt_info.hblitsize - 1] = 0xFFFF; bltstate = BLT_done; } static void blitter_dofast_desc (void) { int i,j; uaecptr bltadatptr = 0, bltbdatptr = 0, bltcdatptr = 0, bltddatptr = 0; uae_u8 mt = bltcon0 & 0xFF; blit_masktable[0] = blt_info.bltafwm; blit_masktable[blt_info.hblitsize - 1] &= blt_info.bltalwm; if (bltcon0 & 0x800) { bltadatptr = bltapt; bltapt -= (blt_info.hblitsize * 2 + blt_info.bltamod) * blt_info.vblitsize; } if (bltcon0 & 0x400) { bltbdatptr = bltbpt; bltbpt -= (blt_info.hblitsize * 2 + blt_info.bltbmod) * blt_info.vblitsize; } if (bltcon0 & 0x200) { bltcdatptr = bltcpt; bltcpt -= (blt_info.hblitsize * 2 + blt_info.bltcmod) * blt_info.vblitsize; } if (bltcon0 & 0x100) { bltddatptr = bltdpt; bltdpt -= (blt_info.hblitsize * 2 + blt_info.bltdmod) * blt_info.vblitsize; } #ifdef SPEEDUP if (blitfunc_dofast_desc[mt] && !blitfill) { (*blitfunc_dofast_desc[mt])(bltadatptr, bltbdatptr, bltcdatptr, bltddatptr, &blt_info); } else #endif { uae_u32 blitbhold = blt_info.bltbhold; uae_u32 preva = 0, prevb = 0; uaecptr dstp = 0; int dodst = 0; for (j = 0; j < blt_info.vblitsize; j++) { blitfc = !!(bltcon1 & 0x4); for (i = 0; i < blt_info.hblitsize; i++) { uae_u32 bltadat, blitahold; uae_u16 bltbdat; if (bltadatptr) { bltadat = blt_info.bltadat = chipmem_wget_indirect (bltadatptr); bltadatptr -= 2; } else bltadat = blt_info.bltadat; bltadat &= blit_masktable[i]; blitahold = (((uae_u32)bltadat << 16) | preva) >> blt_info.blitdownashift; preva = bltadat; if (bltbdatptr) { blt_info.bltbdat = bltbdat = chipmem_wget_indirect (bltbdatptr); bltbdatptr -= 2; blitbhold = (((uae_u32)bltbdat << 16) | prevb) >> blt_info.blitdownbshift; prevb = bltbdat; } if (bltcdatptr) { blt_info.bltcdat = blt_info.bltbdat = chipmem_wget_indirect (bltcdatptr); bltcdatptr -= 2; } if (dodst) chipmem_agnus_wput2 (dstp, blt_info.bltddat); blt_info.bltddat = blit_func (blitahold, blitbhold, blt_info.bltcdat, mt) & 0xFFFF; if (blitfill) { uae_u16 d = blt_info.bltddat; int ifemode = blitife ? 2 : 0; int fc1 = blit_filltable[d & 255][ifemode + blitfc][1]; blt_info.bltddat = (blit_filltable[d & 255][ifemode + blitfc][0] + (blit_filltable[d >> 8][ifemode + fc1][0] << 8)); blitfc = blit_filltable[d >> 8][ifemode + fc1][1]; } if (blt_info.bltddat) blt_info.blitzero = 0; if (bltddatptr) { dstp = bltddatptr; dodst = 1; bltddatptr -= 2; } } if (bltadatptr) bltadatptr -= blt_info.bltamod; if (bltbdatptr) bltbdatptr -= blt_info.bltbmod; if (bltcdatptr) bltcdatptr -= blt_info.bltcmod; if (bltddatptr) bltddatptr -= blt_info.bltdmod; } if (dodst) chipmem_agnus_wput2 (dstp, blt_info.bltddat); blt_info.bltbhold = blitbhold; } blit_masktable[0] = 0xFFFF; blit_masktable[blt_info.hblitsize - 1] = 0xFFFF; bltstate = BLT_done; } STATIC_INLINE void blitter_read (void) { if (bltcon0 & 0x200) { if (!dmaen (DMA_BLITTER)) return; blt_info.bltcdat = chipmem_wget_indirect (bltcpt); last_custom_value1 = blt_info.bltcdat; } bltstate = BLT_work; } STATIC_INLINE void blitter_write (void) { if (blt_info.bltddat) blt_info.blitzero = 0; /* D-channel state has no effect on linedraw, but C must be enabled or nothing is drawn! */ if (bltcon0 & 0x200) { if (!dmaen (DMA_BLITTER)) return; last_custom_value1 = blt_info.bltddat; chipmem_wput_indirect (bltdpt, blt_info.bltddat); debug_wputpeekdma (bltdpt, blt_info.bltddat); } bltstate = BLT_next; } STATIC_INLINE void blitter_line_incx (void) { if (++blinea_shift == 16) { blinea_shift = 0; bltcpt += 2; } } STATIC_INLINE void blitter_line_decx (void) { if (blinea_shift-- == 0) { blinea_shift = 15; bltcpt -= 2; } } STATIC_INLINE void blitter_line_decy (void) { bltcpt -= blt_info.bltcmod; blitonedot = 0; } STATIC_INLINE void blitter_line_incy (void) { bltcpt += blt_info.bltcmod; blitonedot = 0; } static void blitter_line (void) { uae_u16 blitahold = (blinea & blt_info.bltafwm) >> blinea_shift; uae_u16 blitchold = blt_info.bltcdat; blt_info.bltbhold = (blineb & 1) ? 0xFFFF : 0; blitlinepixel = !blitsing || (blitsing && !blitonedot); blt_info.bltddat = blit_func (blitahold, blt_info.bltbhold, blitchold, bltcon0 & 0xFF); blitonedot++; } static void blitter_line_proc (void) { if (bltcon0 & 0x800) { if (blitsign) bltapt += (uae_s16)blt_info.bltbmod; else bltapt += (uae_s16)blt_info.bltamod; } if (!blitsign) { if (bltcon1 & 0x10) { if (bltcon1 & 0x8) blitter_line_decy (); else blitter_line_incy (); } else { if (bltcon1 & 0x8) blitter_line_decx (); else blitter_line_incx (); } } if (bltcon1 & 0x10) { if (bltcon1 & 0x4) blitter_line_decx (); else blitter_line_incx (); } else { if (bltcon1 & 0x4) blitter_line_decy (); else blitter_line_incy (); } blitsign = 0 > (uae_s16)bltapt; bltstate = BLT_write; } STATIC_INLINE void blitter_nxline (void) { blineb = (blineb << 1) | (blineb >> 15); blt_info.vblitsize--; bltstate = BLT_read; } #ifdef CPUEMU_12 static int blitter_cyclecounter; static int blitter_hcounter1, blitter_hcounter2; static int blitter_vcounter1, blitter_vcounter2; static void decide_blitter_line (int hsync, int hpos) { if (blit_final && blt_info.vblitsize) blit_final = 0; while (last_blitter_hpos < hpos) { int c = channel_state (blit_cyclecounter); for (;;) { int v = canblit (last_blitter_hpos); if (blit_waitcyclecounter) { blit_waitcyclecounter = 0; break; } if (!v) { blit_misscyclecounter++; blitter_nasty++; break; } if ((!dmaen (DMA_BLITTER) || v <= 0) && (c == 3 || c == 4)) { blit_misscyclecounter++; blitter_nasty++; break; } blit_cyclecounter++; blit_totalcyclecounter++; // final 2 idle cycles? if (blit_final) { if (blit_cyclecounter > get_ch ()[0]) { blitter_done (last_blitter_hpos); return; } break; } if (c == 3) { blitter_read (); alloc_cycle_blitter (last_blitter_hpos, &bltcpt, 3); record_dma_blit (0x70, blt_info.bltcdat, bltcpt, last_blitter_hpos); } else if (c == 5) { if (ddat1use) { bltdpt = bltcpt; } ddat1use = 1; blitter_line (); blitter_line_proc (); blitter_nxline (); } else if (c == 4) { /* onedot mode and no pixel = bus write access is skipped */ if (blitlinepixel) { blitter_write (); alloc_cycle_blitter (last_blitter_hpos, &bltdpt, 4); record_dma_blit (0x00, blt_info.bltddat, bltdpt, last_blitter_hpos); blitlinepixel = 0; } if (blt_info.vblitsize == 0) { bltdpt = bltcpt; blit_final = 1; blit_cyclecounter = 0; blit_waitcyclecounter = 0; break; } } break; } last_blitter_hpos++; } if (hsync) last_blitter_hpos = 0; } #endif static void actually_do_blit (void) { if (blitline) { do { blitter_read (); if (ddat1use) bltdpt = bltcpt; ddat1use = 1; blitter_line (); blitter_line_proc (); blitter_nxline (); if (blitlinepixel) { blitter_write (); blitlinepixel = 0; } if (blt_info.vblitsize == 0) bltstate = BLT_done; } while (bltstate != BLT_done); bltdpt = bltcpt; } else { if (blitdesc) blitter_dofast_desc (); else blitter_dofast (); bltstate = BLT_done; } } static void blitter_doit (void) { #ifdef BLITTER_DEBUG if (!blitter_dontdo) actually_do_blit (); else bltstate = BLT_done; #else actually_do_blit (); #endif blitter_done (current_hpos ()); } void blitter_handler (uae_u32 data) { static int blitter_stuck; if (!dmaen (DMA_BLITTER)) { event2_newevent (ev2_blitter, 10, 0); blitter_stuck++; if (blitter_stuck < 20000 || !currprefs.immediate_blits) return; /* gotta come back later. */ /* "free" blitter in immediate mode if it has been "stuck" ~3 frames * fixes some JIT game incompatibilities */ debugtest (DEBUGTEST_BLITTER, _T("force-unstuck!\n")); } blitter_stuck = 0; if (blit_slowdown > 0 && !currprefs.immediate_blits) { event2_newevent (ev2_blitter, blit_slowdown, 0); blit_slowdown = -1; return; } blitter_doit (); } #ifdef CPUEMU_12 static uae_u32 preva, prevb; STATIC_INLINE uae_u16 blitter_doblit (void) { uae_u32 blitahold; uae_u16 bltadat, ddat; uae_u8 mt = bltcon0 & 0xFF; bltadat = blt_info.bltadat; if (blitter_hcounter1 == 0) bltadat &= blt_info.bltafwm; if (blitter_hcounter1 == blt_info.hblitsize - 1) bltadat &= blt_info.bltalwm; if (blitdesc) blitahold = (((uae_u32)bltadat << 16) | preva) >> blt_info.blitdownashift; else blitahold = (((uae_u32)preva << 16) | bltadat) >> blt_info.blitashift; preva = bltadat; ddat = blit_func (blitahold, blt_info.bltbhold, blt_info.bltcdat, mt) & 0xFFFF; if (bltcon1 & 0x18) { uae_u16 d = ddat; int ifemode = blitife ? 2 : 0; int fc1 = blit_filltable[d & 255][ifemode + blitfc][1]; ddat = (blit_filltable[d & 255][ifemode + blitfc][0] + (blit_filltable[d >> 8][ifemode + fc1][0] << 8)); blitfc = blit_filltable[d >> 8][ifemode + fc1][1]; } if (ddat) blt_info.blitzero = 0; return ddat; } STATIC_INLINE void blitter_doddma (int hpos) { int wd; uae_u16 d; wd = 0; if (blit_dmacount2 == 0) { d = blitter_doblit (); wd = -1; } else if (ddat2use) { d = ddat2; ddat2use = 0; wd = 2; } else if (ddat1use) { d = ddat1; ddat1use = 0; wd = 1; } else { static int warn = 10; if (warn > 0) { warn--; write_log (_T("BLITTER: D-channel without nothing to do?\n")); } blitter_vcounter2 = blitter_vcounter1 = blt_info.vblitsize; return; } record_dma_blit (0x00, d, bltdpt, hpos); last_custom_value1 = d; chipmem_agnus_wput2 (bltdpt, d); alloc_cycle_blitter (hpos, &bltdpt, 4); bltdpt += blit_add; blitter_hcounter2++; if (blitter_hcounter2 == blt_info.hblitsize) { blitter_hcounter2 = 0; bltdpt += blit_modaddd; blitter_vcounter2++; if (blitter_vcounter2 > blitter_vcounter1) blitter_vcounter1 = blitter_vcounter2; } if (blit_ch == 1) blitter_hcounter1 = blitter_hcounter2; } STATIC_INLINE void blitter_dodma (int ch, int hpos) { uae_u16 dat, reg; uae_u32 addr; switch (ch) { case 1: blt_info.bltadat = dat = chipmem_wget_indirect (bltapt); last_custom_value1 = blt_info.bltadat; addr = bltapt; bltapt += blit_add; reg = 0x74; alloc_cycle_blitter (hpos, &bltapt, 1); break; case 2: blt_info.bltbdat = dat = chipmem_wget_indirect (bltbpt); last_custom_value1 = blt_info.bltbdat; addr = bltbpt; bltbpt += blit_add; if (blitdesc) blt_info.bltbhold = (((uae_u32)blt_info.bltbdat << 16) | prevb) >> blt_info.blitdownbshift; else blt_info.bltbhold = (((uae_u32)prevb << 16) | blt_info.bltbdat) >> blt_info.blitbshift; prevb = blt_info.bltbdat; reg = 0x72; alloc_cycle_blitter (hpos, &bltbpt, 2); break; case 3: blt_info.bltcdat = dat = chipmem_wget_indirect (bltcpt); last_custom_value1 = blt_info.bltcdat; addr = bltcpt; bltcpt += blit_add; reg = 0x70; alloc_cycle_blitter (hpos, &bltcpt, 3); break; default: abort (); } blitter_cyclecounter++; if (blitter_cyclecounter >= blit_dmacount2) { blitter_cyclecounter = 0; ddat2 = ddat1; ddat2use = ddat1use; ddat1use = 0; ddat1 = blitter_doblit (); if (bltcon0 & 0x100) ddat1use = 1; blitter_hcounter1++; if (blitter_hcounter1 == blt_info.hblitsize) { blitter_hcounter1 = 0; if (bltcon0 & 0x800) bltapt += blit_modadda; if (bltcon0 & 0x400) bltbpt += blit_modaddb; if (bltcon0 & 0x200) bltcpt += blit_modaddc; blitter_vcounter1++; blitfc = !!(bltcon1 & 0x4); } } record_dma_blit (reg, dat, addr, hpos); } int blitter_need (int hpos) { int c; if (bltstate == BLT_done) return 0; if (!dmaen (DMA_BLITTER)) return 0; c = channel_state (blit_cyclecounter); return c; } static void do_startcycles (int hpos) { int vhpos = last_blitter_hpos; while (vhpos < hpos) { int v = canblit (vhpos); vhpos++; if (v) { blit_startcycles--; if (blit_startcycles == 0) { if (blit_faulty) blit_faulty = -1; bltstate = BLT_done; blit_final = 0; do_blitter (vhpos, 0); blit_startcycles = 0; blit_cyclecounter = 0; blit_waitcyclecounter = 0; if (blit_faulty) blit_faulty = 1; return; } } } } void decide_blitter (int hpos) { int hsync = hpos < 0; if (blit_startcycles > 0) do_startcycles (hpos); if (blt_delayed_irq > 0 && hsync) { blt_delayed_irq--; if (!blt_delayed_irq) send_interrupt (6, 2 * CYCLE_UNIT); } if (bltstate == BLT_done) return; #ifdef BLITTER_DEBUG if (blitter_delayed_debug) { blitter_delayed_debug = 0; blitter_dump (); } #endif if (!blitter_cycle_exact) return; if (hpos < 0) hpos = maxhpos; if (blitline) { blt_info.got_cycle = 1; decide_blitter_line (hsync, hpos); return; } while (last_blitter_hpos < hpos) { int c; c = channel_state (blit_cyclecounter); for (;;) { int v; v = canblit (last_blitter_hpos); // copper bltsize write needs one cycle (any cycle) delay if (blit_waitcyclecounter) { blit_waitcyclecounter = 0; break; } // idle cycles require free bus.. // (CPU can still use this cycle) if (c == 0 && v == 0) { blitter_nasty++; blit_misscyclecounter++; break; } if (blit_frozen) { blit_misscyclecounter++; break; } if (c == 0) { blt_info.got_cycle = 1; blit_cyclecounter++; if (blit_cyclecounter == 0) blit_final = 0; blit_totalcyclecounter++; /* check if blit with zero channels has ended */ if (blit_ch == 0 && blit_cyclecounter >= blit_maxcyclecounter) { blitter_done (last_blitter_hpos); return; } break; } blitter_nasty++; if (!dmaen (DMA_BLITTER) || v <= 0) { blit_misscyclecounter++; break; } blt_info.got_cycle = 1; if (c == 4) { blitter_doddma (last_blitter_hpos); blit_cyclecounter++; blit_totalcyclecounter++; } else { if (blitter_vcounter1 < blt_info.vblitsize) { blitter_dodma (c, last_blitter_hpos); } blit_cyclecounter++; blit_totalcyclecounter++; } if (blitter_vcounter1 >= blt_info.vblitsize && blitter_vcounter2 >= blt_info.vblitsize) { if (!ddat1use && !ddat2use) { blitter_done (last_blitter_hpos); return; } } break; } if (!blit_final && blitter_vcounter1 == blt_info.vblitsize && channel_pos (blit_cyclecounter - 1) == blit_diag[0] - 1) { blitter_interrupt (last_blitter_hpos, 0); blit_cyclecounter = 0; blit_final = 1; } last_blitter_hpos++; } if (hsync) last_blitter_hpos = 0; } #else void decide_blitter (int hpos) { } #endif static void blitter_force_finish (void) { uae_u16 odmacon; if (bltstate == BLT_done) return; if (bltstate != BLT_done) { /* blitter is currently running * force finish (no blitter state support yet) */ odmacon = dmacon; dmacon |= DMA_MASTER | DMA_BLITTER; write_log (_T("forcing blitter finish\n")); if (blitter_cycle_exact) { int rounds = 10000; while (bltstate != BLT_done && rounds > 0) { memset (cycle_line, 0, sizeof cycle_line); decide_blitter (-1); rounds--; } if (rounds == 0) write_log (_T("blitter froze!?\n")); blit_startcycles = 0; } else { actually_do_blit (); } blitter_done (current_hpos ()); dmacon = odmacon; } } static void blit_bltset (int con) { int i; const int *olddiag = blit_diag; if (con & 2) { blitdesc = bltcon1 & 2; blt_info.blitbshift = bltcon1 >> 12; blt_info.blitdownbshift = 16 - blt_info.blitbshift; } if (con & 1) { blt_info.blitashift = bltcon0 >> 12; blt_info.blitdownashift = 16 - blt_info.blitashift; } blit_ch = (bltcon0 & 0x0f00) >> 8; blitline = bltcon1 & 1; blitfill = !!(bltcon1 & 0x18); // disable line draw if bltcon0 is written while it is active if (!savestate_state && bltstate != BLT_done && blitline) { blitline = 0; bltstate = BLT_done; blit_interrupt = 1; write_log (_T("BLITTER: register modification during linedraw!\n")); } if (blitline) { if (blt_info.hblitsize != 2) debugtest (DEBUGTEST_BLITTER, _T("weird blt_info.hblitsize in linemode: %d vsize=%d\n"), blt_info.hblitsize, blt_info.vblitsize); blit_diag = blit_cycle_diagram_line; } else { if (con & 2) { blitfc = !!(bltcon1 & 0x4); blitife = !!(bltcon1 & 0x8); if ((bltcon1 & 0x18) == 0x18) { debugtest (DEBUGTEST_BLITTER, _T("weird fill mode\n")); blitife = 0; } } if (blitfill && !blitdesc) debugtest (DEBUGTEST_BLITTER, _T("fill without desc\n")); blit_diag = blitfill && blit_cycle_diagram_fill[blit_ch][0] ? blit_cycle_diagram_fill[blit_ch] : blit_cycle_diagram[blit_ch]; } if ((bltcon1 & 0x80) && (currprefs.chipset_mask & CSMASK_ECS_AGNUS)) debugtest (DEBUGTEST_BLITTER, _T("ECS BLTCON1 DOFF-bit set\n")); // on the fly switching fillmode from extra cycle to non-extra: blitter freezes // non-extra cycle to extra cycle: does not freeze but cycle diagram goes weird, // extra free cycle changes to another D write.. // (Absolute Inebriation vector cube inside semi-filled vector object requires freezing blitter.) if (!savestate_state && bltstate != BLT_done) { static int freezes = 10; int isen = blit_diag >= &blit_cycle_diagram_fill[0][0] && blit_diag <= &blit_cycle_diagram_fill[15][0]; int iseo = olddiag >= &blit_cycle_diagram_fill[0][0] && olddiag <= &blit_cycle_diagram_fill[15][0]; if (iseo != isen) { if (freezes > 0) { write_log (_T("BLITTER: on the fly %d (%d) -> %d (%d) switch! PC=%08x\n"), original_ch, iseo, blit_ch, isen, M68K_GETPC); freezes--; } } if (original_fill == isen) { blit_frozen = 0; // switched back to original fill mode? unfreeze } else if (iseo && !isen) { blit_frozen = 1; write_log (_T("BLITTER: frozen! %d (%d) -> %d (%d) %08X\n"), original_ch, iseo, blit_ch, isen, M68K_GETPC); } else if (!iseo && isen) { #ifdef BLITTER_DEBUG_NOWAIT write_log (_T("BLITTER: on the fly %d (%d) -> %d (%d) switch\n"), original_ch, iseo, blit_ch, isen); #endif } } // on the fly switching from CH=1 to CH=D -> blitter stops writing (Rampage/TEK) // currently just switch to no-channels mode, better than crashing the demo.. if (!savestate_state && bltstate != BLT_done) { static uae_u8 changetable[32 * 32]; int o = original_ch + (original_fill ? 16 : 0); int n = blit_ch + (blitfill ? 16 : 0); if (o != n) { if (changetable[o * 32 + n] < 10) { changetable[o * 32 + n]++; write_log (_T("BLITTER: channel mode changed while active (%02X->%02X) PC=%08x\n"), o, n, M68K_GETPC); } } if (blit_ch == 13 && original_ch == 1) { blit_faulty = 1; } } if (blit_faulty) { blit_ch = 0; blit_diag = blit_cycle_diagram[blit_ch]; } blit_dmacount = blit_dmacount2 = 0; blit_nod = 1; for (i = 0; i < blit_diag[0]; i++) { int v = blit_diag[1 + blit_diag[0] + i]; if (v <= 4) blit_dmacount++; if (v > 0 && v < 4) blit_dmacount2++; if (v == 4) blit_nod = 0; } } static void blit_modset (void) { int mult; blit_add = blitdesc ? -2 : 2; mult = blitdesc ? -1 : 1; blit_modadda = mult * blt_info.bltamod; blit_modaddb = mult * blt_info.bltbmod; blit_modaddc = mult * blt_info.bltcmod; blit_modaddd = mult * blt_info.bltdmod; } void reset_blit (int bltcon) { if (bltcon & 1) blinea_shift = bltcon0 >> 12; if (bltcon & 2) blitsign = bltcon1 & 0x40; if (bltstate == BLT_done) return; if (bltcon) blit_bltset (bltcon); blit_modset (); } static bool waitingblits (void) { static int warned = 10; bool waited = false; while (bltstate != BLT_done && dmaen (DMA_BLITTER)) { waited = true; x_do_cycles (8 * CYCLE_UNIT); } if (warned && waited) { warned--; write_log (_T("waiting_blits detected\n")); } if (bltstate == BLT_done) return true; return false; } static void do_blitter2 (int hpos, int copper) { int cycles; int cleanstart; #ifdef BLITTER_DEBUG_NOWAIT if (bltstate != BLT_done) { if (blit_final) { write_log (_T("blitter was already active! PC=%08x\n"), M68K_GETPC); //activate_debugger(); } } #endif cleanstart = 0; if (bltstate == BLT_done) { if (blit_faulty > 0) blit_faulty = 0; cleanstart = 1; } bltstate = BLT_done; blitter_cycle_exact = currprefs.blitter_cycle_exact; blt_info.blitzero = 1; preva = 0; prevb = 0; blt_info.got_cycle = 0; blit_frozen = 0; blit_firstline_cycles = blit_first_cycle = get_cycles (); blit_misscyclecounter = 0; blit_last_cycle = 0; blit_maxcyclecounter = 0; last_blitter_hpos = hpos + 1; blit_cyclecounter = 0; blit_totalcyclecounter = 0; blit_bltset (1 | 2); blit_modset (); ddat1use = ddat2use = 0; blit_interrupt = 0; if (blitline) { blinea = blt_info.bltadat; blineb = (blt_info.bltbdat >> blt_info.blitbshift) | (blt_info.bltbdat << (16 - blt_info.blitbshift)); blitonedot = 0; blitlinepixel = 0; blitsing = bltcon1 & 0x2; cycles = blt_info.vblitsize; } else { blit_firstline_cycles = blit_first_cycle + (blit_diag[0] * blt_info.hblitsize + cpu_cycles) * CYCLE_UNIT; cycles = blt_info.vblitsize * blt_info.hblitsize; } if (cleanstart) { original_ch = blit_ch; original_fill = blitfill; original_line = blitline; } #ifdef BLITTER_DEBUG blitter_dontdo = 0; if (1) { int ch = 0; if (blit_ch & 1) ch++; if (blit_ch & 2) ch++; if (blit_ch & 4) ch++; if (blit_ch & 8) ch++; write_log (_T("blitstart: %dx%d ch=%d %d*%d=%d d=%d f=%02X n=%d pc=%p l=%d dma=%04X %s\n"), blt_info.hblitsize, blt_info.vblitsize, ch, blit_diag[0], cycles, blit_diag[0] * cycles, blitdesc ? 1 : 0, blitfill, dmaen (DMA_BLITPRI) ? 1 : 0, M68K_GETPC, blitline, dmacon, ((dmacon & (DMA_MASTER | DMA_BLITTER)) == (DMA_MASTER | DMA_BLITTER)) ? _T("") : _T(" off!")); blitter_dump (); } #endif bltstate = BLT_init; blit_slowdown = 0; unset_special (SPCFLAG_BLTNASTY); if (dmaen (DMA_BLITPRI)) set_special (SPCFLAG_BLTNASTY); #if 0 if (M68K_GETPC >= 0x00070554 && M68K_GETPC <= 0x000706B0) { blitter_done (); return; } if (M68K_GETPC >= 0x00070838) { blitter_done (); return; } #endif if (dmaen (DMA_BLITTER)) bltstate = BLT_work; blit_maxcyclecounter = 0x7fffffff; if (blitter_cycle_exact) { #ifdef BLITTER_INSTANT blitter_handler (0); #else blitter_hcounter1 = blitter_hcounter2 = 0; blitter_vcounter1 = blitter_vcounter2 = 0; if (blit_nod) blitter_vcounter2 = blt_info.vblitsize; blit_cyclecounter = -BLITTER_STARTUP_CYCLES; blit_waitcyclecounter = copper; blit_startcycles = 0; blit_maxcyclecounter = blt_info.hblitsize * blt_info.vblitsize + 2; #endif return; } if (blt_info.vblitsize == 0 || (blitline && blt_info.hblitsize != 2)) { blitter_done (hpos); return; } blt_info.got_cycle = 1; blit_waitcyclecounter = 0; if (currprefs.immediate_blits) { blitter_doit (); return; } blit_cyclecounter = cycles * (blit_dmacount2 + (blit_nod ? 0 : 1)); event2_newevent (ev2_blitter, blit_cyclecounter, 0); if (dmaen (DMA_BLITTER) && (currprefs.cpu_model >= 68020 || !currprefs.cpu_cycle_exact)) { if (currprefs.waiting_blits) { // wait immediately if all cycles in use and blitter nastry if (blit_dmacount == blit_diag[0] && (regs.spcflags & SPCFLAG_BLTNASTY)) { waitingblits (); } } } } void do_blitter (int hpos, int copper) { if (bltstate == BLT_done || !currprefs.blitter_cycle_exact) { do_blitter2 (hpos, copper); return; } if (!dmaen (DMA_BLITTER) || !blt_info.got_cycle) return; // previous blit may have last write cycle left // and we must let it finish blit_startcycles = BLITTER_STARTUP_CYCLES; blit_waitcyclecounter = copper; } void maybe_blit (int hpos, int hack) { static int warned = 10; if (bltstate == BLT_done) return; if (savestate_state) return; if (dmaen (DMA_BLITTER) && (currprefs.cpu_model >= 68020 || !currprefs.cpu_cycle_exact)) { bool doit = false; if (currprefs.waiting_blits == 3) { // always doit = true; } else if (currprefs.waiting_blits == 2) { // noidle if (blit_dmacount == blit_diag[0] && (regs.spcflags & SPCFLAG_BLTNASTY)) doit = true; } else if (currprefs.waiting_blits == 1) { // automatic if (blit_dmacount == blit_diag[0] && (regs.spcflags & SPCFLAG_BLTNASTY)) doit = true; else if (currprefs.m68k_speed < 0) doit = true; } if (doit) { if (waitingblits ()) return; } } if (warned && dmaen (DMA_BLITTER) && blt_info.got_cycle) { warned--; debugtest (DEBUGTEST_BLITTER, _T("program does not wait for blitter tc=%d\n"), blit_cyclecounter); #ifdef BLITTER_DEBUG warned = 0; #endif #ifdef BLITTER_DEBUG_NOWAIT warned = 10; write_log (_T("program does not wait for blitter PC=%08x\n"), M68K_GETPC); //activate_debugger (); //blitter_done (hpos); #endif } if (blitter_cycle_exact) { decide_blitter (hpos); goto end; } if (hack == 1 && get_cycles() < blit_firstline_cycles) goto end; blitter_handler (0); end:; #ifdef BLITTER_DEBUG blitter_delayed_debug = 1; #endif } int blitnasty (void) { int cycles, ccnt; if (bltstate == BLT_done) return 0; if (!dmaen (DMA_BLITTER)) return 0; if (blitter_cycle_exact) { blitter_force_finish (); return -1; } if (blit_last_cycle >= blit_diag[0] && blit_dmacount == blit_diag[0]) return 0; cycles = (get_cycles () - blit_first_cycle) / CYCLE_UNIT; ccnt = 0; while (blit_last_cycle < cycles) { int c = channel_state (blit_last_cycle++); if (!c) ccnt++; } return ccnt; } /* very approximate emulation of blitter slowdown caused by bitplane DMA */ void blitter_slowdown (int ddfstrt, int ddfstop, int totalcycles, int freecycles) { static int oddfstrt, oddfstop, ototal, ofree; static int slow; if (!totalcycles || ddfstrt < 0 || ddfstop < 0) return; if (ddfstrt != oddfstrt || ddfstop != oddfstop || totalcycles != ototal || ofree != freecycles) { int linecycles = ((ddfstop - ddfstrt + totalcycles - 1) / totalcycles) * totalcycles; int freelinecycles = ((ddfstop - ddfstrt + totalcycles - 1) / totalcycles) * freecycles; int dmacycles = (linecycles * blit_dmacount) / blit_diag[0]; oddfstrt = ddfstrt; oddfstop = ddfstop; ototal = totalcycles; ofree = freecycles; slow = 0; if (dmacycles > freelinecycles) slow = dmacycles - freelinecycles; } if (blit_slowdown < 0 || blitline) return; blit_slowdown += slow; blit_misscyclecounter += slow; } #ifdef SAVESTATE void restore_blitter_finish (void) { record_dma_reset (); record_dma_reset (); if (blt_statefile_type == 0) { blit_interrupt = 1; if (bltstate == BLT_init) { write_log (_T("blitter was started but DMA was inactive during save\n")); //do_blitter (0); } if (blt_delayed_irq < 0) { if (intreq & 0x0040) blt_delayed_irq = 3; intreq &= 0x0040; } } else { last_blitter_hpos = 0; blit_modset (); } } uae_u8 *restore_blitter (uae_u8 *src) { uae_u32 flags = restore_u32(); blt_statefile_type = 0; blt_delayed_irq = 0; bltstate = BLT_done; if (flags & 4) { bltstate = (flags & 1) ? BLT_done : BLT_init; } if (flags & 2) { write_log (_T("blitter was force-finished when this statefile was saved\n")); write_log (_T("contact the author if restored program freezes\n")); // there is a problem. if system ks vblank is active, we must not activate // "old" blit's intreq until vblank is handled or ks 1.x thinks it was blitter // interrupt.. blt_delayed_irq = -1; } return src; } uae_u8 *save_blitter (int *len, uae_u8 *dstptr) { uae_u8 *dstbak,*dst; int forced; forced = 0; if (bltstate != BLT_done && bltstate != BLT_init) { write_log (_T("blitter is active, forcing immediate finish\n")); /* blitter is active just now but we don't have blitter state support yet */ blitter_force_finish (); forced = 2; } if (dstptr) dstbak = dst = dstptr; else dstbak = dst = xmalloc (uae_u8, 16); save_u32 (((bltstate != BLT_done) ? 0 : 1) | forced | 4); *len = dst - dstbak; return dstbak; } // totally non-real-blitter-like state save but better than nothing.. uae_u8 *restore_blitter_new (uae_u8 *src) { uae_u8 state; blt_statefile_type = 1; blitter_cycle_exact = restore_u8 (); state = restore_u8 (); blit_first_cycle = restore_u32 (); blit_last_cycle = restore_u32 (); blit_waitcyclecounter = restore_u32 (); blit_startcycles = restore_u32 (); blit_maxcyclecounter = restore_u32 (); blit_firstline_cycles = restore_u32 (); blit_cyclecounter = restore_u32 (); blit_slowdown = restore_u32 (); blit_misscyclecounter = restore_u32 (); blitter_hcounter1 = restore_u16 (); blitter_hcounter2 = restore_u16 (); blitter_vcounter1 = restore_u16 (); blitter_vcounter2 = restore_u16 (); blit_ch = restore_u8 (); blit_dmacount = restore_u8 (); blit_dmacount2 = restore_u8 (); blit_nod = restore_u8 (); blit_final = restore_u8 (); blitfc = restore_u8 (); blitife = restore_u8 (); blt_info.blitbshift = restore_u8 (); blt_info.blitdownbshift = restore_u8 (); blt_info.blitashift = restore_u8 (); blt_info.blitdownashift = restore_u8 (); ddat1use = restore_u8 (); ddat2use = restore_u8 (); ddat1 = restore_u16 (); ddat2 = restore_u16 (); blitline = restore_u8 (); blitfill = restore_u8 (); blinea = restore_u16 (); blineb = restore_u16 (); blinea_shift = restore_u8 (); blitonedot = restore_u8 (); blitlinepixel = restore_u8 (); blitsing = restore_u8 (); blitlinepixel = restore_u8 (); blit_interrupt = restore_u8 (); blt_delayed_irq = restore_u8 (); blt_info.blitzero = restore_u8 (); blt_info.got_cycle = restore_u8 (); blit_frozen = restore_u8 (); blit_faulty = restore_u8 (); original_ch = restore_u8 (); original_fill = restore_u8 (); original_line = restore_u8 (); blit_diag = set_cycle_diagram_type (restore_u8 ()); if (restore_u16 () != 0x1234) write_log (_T("error\n")); blitter_nasty = restore_u8 (); bltstate = BLT_done; if (!blitter_cycle_exact) { if (state > 0) do_blitter (0, 0); } else { if (state == 1) bltstate = BLT_init; else if (state == 2) bltstate = BLT_work; } return src; } uae_u8 *save_blitter_new (int *len, uae_u8 *dstptr) { uae_u8 *dstbak,*dst; if (dstptr) dstbak = dst = dstptr; else dstbak = dst = xmalloc (uae_u8, 1000); uae_u8 state; save_u8 (blitter_cycle_exact ? 1 : 0); if (bltstate == BLT_done) state = 0; else if (bltstate == BLT_init) state = 1; else state = 2; save_u8 (state); if (bltstate != BLT_done) { write_log (_T("BLITTER active while saving state\n")); blitter_dump (); } save_u32 (blit_first_cycle); save_u32 (blit_last_cycle); save_u32 (blit_waitcyclecounter); save_u32 (blit_startcycles); save_u32 (blit_maxcyclecounter); save_u32 (blit_firstline_cycles); save_u32 (blit_cyclecounter); save_u32 (blit_slowdown); save_u32 (blit_misscyclecounter); save_u16 (blitter_hcounter1); save_u16 (blitter_hcounter2); save_u16 (blitter_vcounter1); save_u16 (blitter_vcounter2); save_u8 (blit_ch); save_u8 (blit_dmacount); save_u8 (blit_dmacount2); save_u8 (blit_nod); save_u8 (blit_final); save_u8 (blitfc); save_u8 (blitife); save_u8 (blt_info.blitbshift); save_u8 (blt_info.blitdownbshift); save_u8 (blt_info.blitashift); save_u8 (blt_info.blitdownashift); save_u8 (ddat1use); save_u8 (ddat2use); save_u16 (ddat1); save_u16 (ddat2); save_u8 (blitline); save_u8 (blitfill); save_u16 (blinea); save_u16 (blineb); save_u8 (blinea_shift); save_u8 (blitonedot); save_u8 (blitlinepixel); save_u8 (blitsing); save_u8 (blitlinepixel); save_u8 (blit_interrupt); save_u8 (blt_delayed_irq); save_u8 (blt_info.blitzero); save_u8 (blt_info.got_cycle); save_u8 (blit_frozen); save_u8 (blit_faulty); save_u8 (original_ch); save_u8 (original_fill); save_u8 (original_line); save_u8 (get_cycle_diagram_type (blit_diag)); save_u16 (0x1234); save_u8 (blitter_nasty); *len = dst - dstbak; return dstbak; } #endif /* SAVESTATE */ fs-uae-2.2.3+dfsg/src/ncr_scsi.cpp0000644000175000017500000003165012162366655017160 0ustar glaubitzglaubitz/* * UAE - The Un*x Amiga Emulator * * A4000T NCR 53C710 SCSI (nothing done yet) * * (c) 2007 Toni Wilen */ #define NCR_LOG 1 #define NCR_DEBUG 1 #include "sysconfig.h" #include "sysdeps.h" #include "options.h" #include "uae.h" #include "uae/memory.h" #include "rommgr.h" #include "custom.h" #include "newcpu.h" #include "ncr_scsi.h" #include "zfile.h" #define NCRNAME _T("NCR53C710") #define NCR_REGS 0x40 #define ROM_VECTOR 0x0200 #define ROM_OFFSET 0x0000 #define ROM_SIZE 32768 #define ROM_MASK (ROM_SIZE - 1) #define BOARD_SIZE 16777216 static uae_u8 *rom; static int board_mask; static int configured; static uae_u8 acmemory[100]; static uae_u8 ncrregs[NCR_REGS]; struct ncrscsi { TCHAR *name; int be, le; }; static struct ncrscsi regsinfo[] = { _T("SCNTL0"), 0, 3, _T("SCNTL1"), 1, 2, _T("SDID"), 2, 1, _T("SIEN"), 3, 0, _T("SCID"), 4, 7, _T("SXFER"), 5, 6, _T("SODL"), 6, 5, _T("SOCL"), 7, 4, _T("SFBR"), 8, 11, _T("SIDL"), 9, 10, _T("SBDL"), 10, -1, _T("SBCL"), 11, 8, _T("DSTAT"), 12, 15, _T("SSTAT0"), 13, 14, _T("SSTAT1"), 14, 13, _T("SSTAT2"), 15, 12, _T("DSA0"), 16, 19, _T("DSA1"), 17, 18, _T("DSA2"), 18, 17, _T("DSA3"), 19, 16, _T("CTEST0"), 20, 23, _T("CTEST1"), 21, 22, _T("CTEST2"), 22, 21, _T("CTEST3"), 23, 20, _T("CTEST4"), 24, 27, _T("CTEST5"), 25, 26, _T("CTEST6"), 26, 25, _T("CTEST7"), 27, 24, _T("TEMP0"), 28, 31, _T("TEMP1"), 29, 30, _T("TEMP2"), 30, 29, _T("TEMP3"), 31, 28, _T("DFIFO"), 32, 35, _T("ISTAT"), 33, 34, _T("CTEST8"), 34, 33, _T("LCRC"), 35, 32, _T("DBC0"), 36, 39, _T("DBC1"), 37, 38, _T("DBC2"), 38, 37, _T("DCMD"), 39, 36, _T("DNAD0"), 40, 43, _T("DNAD1"), 41, 42, _T("DNAD2"), 42, 41, _T("DNAD3"), 43, 40, _T("DSP0"), 44, 47, _T("DSP1"), 45, 46, _T("DSP2"), 46, 45, _T("DSP3"), 47, 44, _T("DSPS0"), 48, 51, _T("DSPS1"), 49, 50, _T("DSPS2"), 50, 49, _T("DSPS3"), 51, 48, _T("SCRATCH0"), 52, 55, _T("SCRATCH1"), 53, 54, _T("SCRATCH2"), 54, 53, _T("SCRATCH3"), 55, 52, _T("DMODE"), 56, 59, _T("DIEN"), 57, 58, _T("DWT"), 58, 57, _T("DCNTL"), 59, 56, _T("ADDER0"), 60, 63, _T("ADDER1"), 61, 62, _T("ADDER2"), 62, 61, _T("ADDER3"), 63, 60, NULL }; static TCHAR *regname (uaecptr addr) { int i; for (i = 0; regsinfo[i].name; i++) { if (regsinfo[i].le == addr) return regsinfo[i].name; } return _T("?"); } #define SCNTL0_REG 0x03 #define FULL_ARBITRATION 0xc0 #define PARITY 0x08 #define ENABLE_PARITY 0x04 #define AUTO_ATN 0x02 #define SCNTL1_REG 0x02 #define SLOW_BUS 0x80 #define ENABLE_SELECT 0x20 #define ASSERT_RST 0x08 #define ASSERT_EVEN_PARITY 0x04 #define SDID_REG 0x01 #define SIEN_REG 0x00 #define PHASE_MM_INT 0x80 #define FUNC_COMP_INT 0x40 #define SEL_TIMEOUT_INT 0x20 #define SELECT_INT 0x10 #define GROSS_ERR_INT 0x08 #define UX_DISC_INT 0x04 #define RST_INT 0x02 #define PAR_ERR_INT 0x01 #define SCID_REG 0x07 #define SXFER_REG 0x06 #define ASYNC_OPERATION 0x00 #define SODL_REG 0x05 #define SOCL_REG 0x04 #define SFBR_REG 0x0b #define SIDL_REG 0x0a #define SBDL_REG 0x0a #define SBCL_REG 0x08 #define SBCL_IO 0x01 #define SYNC_DIV_AS_ASYNC 0x00 #define SYNC_DIV_1_0 0x01 #define SYNC_DIV_1_5 0x02 #define SYNC_DIV_2_0 0x03 #define DSTAT_REG 0x0e #define ILGL_INST_DETECTED 0x01 #define WATCH_DOG_INTERRUPT 0x02 #define SCRIPT_INT_RECEIVED 0x04 #define ABORTED 0x10 #define SSTAT0_REG 0x0e #define PARITY_ERROR 0x01 #define SCSI_RESET_DETECTED 0x02 #define UNEXPECTED_DISCONNECT 0x04 #define SCSI_GROSS_ERROR 0x08 #define SELECTED 0x10 #define SELECTION_TIMEOUT 0x20 #define FUNCTION_COMPLETE 0x40 #define PHASE_MISMATCH 0x80 #define SSTAT1_REG 0x0d #define SIDL_REG_FULL 0x80 #define SODR_REG_FULL 0x40 #define SODL_REG_FULL 0x20 #define SSTAT2_REG 0x0c #define CTEST0_REG 0x17 #define BTB_TIMER_DISABLE 0x40 #define CTEST1_REG 0x16 #define CTEST2_REG 0x15 #define CTEST3_REG 0x14 #define CTEST4_REG 0x1b #define DISABLE_FIFO 0x00 #define SLBE 0x10 #define SFWR 0x08 #define BYTE_LANE0 0x04 #define BYTE_LANE1 0x05 #define BYTE_LANE2 0x06 #define BYTE_LANE3 0x07 #define SCSI_ZMODE 0x20 #define ZMODE 0x40 #define CTEST5_REG 0x1a #define MASTER_CONTROL 0x10 #define DMA_DIRECTION 0x08 #define CTEST7_REG 0x18 #define BURST_DISABLE 0x80 /* 710 only */ #define SEL_TIMEOUT_DISABLE 0x10 /* 710 only */ #define DFP 0x08 #define EVP 0x04 #define DIFF 0x01 #define CTEST6_REG 0x19 #define TEMP_REG 0x1C #define DFIFO_REG 0x20 #define FLUSH_DMA_FIFO 0x80 #define CLR_FIFO 0x40 #define ISTAT_REG 0x22 #define ABORT_OPERATION 0x80 #define SOFTWARE_RESET_710 0x40 #define DMA_INT_PENDING 0x01 #define SCSI_INT_PENDING 0x02 #define CONNECTED 0x08 #define CTEST8_REG 0x21 #define LAST_DIS_ENBL 0x01 #define SHORTEN_FILTERING 0x04 #define ENABLE_ACTIVE_NEGATION 0x10 #define GENERATE_RECEIVE_PARITY 0x20 #define CLR_FIFO_710 0x04 #define FLUSH_DMA_FIFO_710 0x08 #define LCRC_REG 0x20 #define DBC_REG 0x25 #define DCMD_REG 0x24 #define DNAD_REG 0x28 #define DIEN_REG 0x3a #define BUS_FAULT 0x20 #define ABORT_INT 0x10 #define INT_INST_INT 0x04 #define WD_INT 0x02 #define ILGL_INST_INT 0x01 #define DCNTL_REG 0x38 #define SOFTWARE_RESET 0x01 #define COMPAT_700_MODE 0x01 #define SCRPTS_16BITS 0x20 #define ASYNC_DIV_2_0 0x00 #define ASYNC_DIV_1_5 0x40 #define ASYNC_DIV_1_0 0x80 #define ASYNC_DIV_3_0 0xc0 #define DMODE_710_REG 0x3b #define DMODE_700_REG 0x34 #define BURST_LENGTH_1 0x00 #define BURST_LENGTH_2 0x40 #define BURST_LENGTH_4 0x80 #define BURST_LENGTH_8 0xC0 #define DMODE_FC1 0x10 #define DMODE_FC2 0x20 #define BW16 32 #define MODE_286 16 #define IO_XFER 8 #define FIXED_ADDR 4 static void INT2(void) { if (ncrregs[SIEN_REG] == 0) return; INTREQ (0x8000 | 0x0008); write_log (_T("IRQ\n")); } static uae_u8 read_rombyte (uaecptr addr) { uae_u8 v = rom[addr]; //write_log (_T("%08X = %02X PC=%08X\n"), addr, v, M68K_GETPC); return v; } void ncr_bput2 (uaecptr addr, uae_u32 val) { uae_u32 v = val; addr &= board_mask; if (addr >= NCR_REGS) return; switch (addr) { case ISTAT_REG: if (val & 0x80) val |= 1; val &= ~0x80; INT2(); break; } write_log (_T("%s write %04X (%s) = %02X PC=%08X\n"), NCRNAME, addr, regname(addr), v & 0xff, M68K_GETPC); ncrregs[addr] = val; } uae_u32 ncr_bget2 (uaecptr addr) { uae_u32 v = 0, v2; addr &= board_mask; if (rom && addr >= ROM_VECTOR && addr >= ROM_OFFSET) return read_rombyte (addr); if (addr >= NCR_REGS) return v; v2 = v = ncrregs[addr]; switch (addr) { case ISTAT_REG: v2 &= ~3; break; case SSTAT2_REG: v &= ~7; v |= ncrregs[SBCL_REG] & 7; break; case CTEST8_REG: v &= 0x0f; // revision 0 break; } write_log (_T("%s read %04X (%s) = %02X PC=%08X\n"), NCRNAME, addr, regname(addr), v, M68K_GETPC); if (v2 != v) ncrregs[addr] = v2; return v; } extern addrbank ncr_bank; static uae_u32 REGPARAM2 ncr_lget (uaecptr addr) { uae_u32 v; #ifdef JIT special_mem |= S_READ; #endif addr &= 65535; v = (ncr_bget2 (addr) << 24) | (ncr_bget2 (addr + 1) << 16) | (ncr_bget2 (addr + 2) << 8) | (ncr_bget2 (addr + 3)); #if NCR_DEBUG > 0 if (addr < ROM_VECTOR) write_log (_T("ncr_lget %08X=%08X PC=%08X\n"), addr, v, M68K_GETPC); #endif return v; } static uae_u32 REGPARAM2 ncr_wget (uaecptr addr) { uae_u32 v; #ifdef JIT special_mem |= S_READ; #endif addr &= board_mask; v = (ncr_bget2 (addr) << 8) | ncr_bget2 (addr + 1); #if NCR_DEBUG > 0 if (addr < ROM_VECTOR) write_log (_T("ncr_wget %08X=%04X PC=%08X\n"), addr, v, M68K_GETPC); #endif return v; } static uae_u32 REGPARAM2 ncr_bget (uaecptr addr) { uae_u32 v; #ifdef JIT special_mem |= S_READ; #endif addr &= board_mask; if (!configured) { if (addr >= sizeof acmemory) return 0; return acmemory[addr]; } v = ncr_bget2 (addr); return v; } static void REGPARAM2 ncr_lput (uaecptr addr, uae_u32 l) { #ifdef JIT special_mem |= S_WRITE; #endif addr &= board_mask; #if NCR_DEBUG > 0 if (addr < ROM_VECTOR) write_log (_T("ncr_lput %08X=%08X PC=%08X\n"), addr, l, M68K_GETPC); #endif ncr_bput2 (addr, l >> 24); ncr_bput2 (addr + 1, l >> 16); ncr_bput2 (addr + 2, l >> 8); ncr_bput2 (addr + 3, l); } static void REGPARAM2 ncr_wput (uaecptr addr, uae_u32 w) { #ifdef JIT special_mem |= S_WRITE; #endif w &= 0xffff; addr &= board_mask; #if NCR_DEBUG > 0 if (addr < ROM_VECTOR) write_log (_T("ncr_wput %04X=%04X PC=%08X\n"), addr, w & 65535, M68K_GETPC); #endif if (addr == 0x44 && !configured) { uae_u32 value = (p96ram_start + ((currprefs.rtgmem_size + 0xffffff) & ~0xffffff)) >> 16; chipmem_wput (regs.regs[11] + 0x20, value); chipmem_wput (regs.regs[11] + 0x28, value); map_banks (&ncr_bank, value, BOARD_SIZE >> 16, 0); write_log (_T("A4091 Z3 autoconfigured at %04X0000\n"), value); configured = 1; expamem_next(); return; } ncr_bput2 (addr, w >> 8); ncr_bput2 (addr + 1, w); } static void REGPARAM2 ncr_bput (uaecptr addr, uae_u32 b) { #ifdef JIT special_mem |= S_WRITE; #endif b &= 0xff; addr &= board_mask; if (addr == 0x4c && !configured) { write_log (_T("A4091 AUTOCONFIG SHUT-UP!\n")); configured = 1; expamem_next(); return; } if (!configured) return; ncr_bput2 (addr, b); } addrbank ncr_bank = { ncr_lget, ncr_wget, ncr_bget, ncr_lput, ncr_wput, ncr_bput, default_xlate, default_check, NULL, _T("A4091"), dummy_lgeti, dummy_wgeti, ABFLAG_IO }; static void ew (int addr, uae_u32 value) { if (addr == 00 || addr == 02 || addr == 0x40 || addr == 0x42) { acmemory[addr] = (value & 0xf0); acmemory[addr + 2] = (value & 0x0f) << 4; } else { acmemory[addr] = ~(value & 0xf0); acmemory[addr + 2] = ~((value & 0x0f) << 4); } } void ncr_free (void) { } void ncr_reset (void) { board_mask = 131072 - 1; configured = 0; if (currprefs.cs_mbdmac == 2) { board_mask = 65535 - 1; configured = -1; } } void ncr_init (void) { struct zfile *z; int roms[3]; struct romlist *rl; int i; configured = 0; memset (acmemory, 0xff, 100); ew (0x00, 0x80 | 0x10 | 0x00); ew (0x08, 0x80 | 0x20 | 0x10); /* A4091 hardware id */ ew (0x04, 0x54); /* commodore's manufacturer id */ ew (0x10, 0x02); ew (0x14, 0x02); /* rom vector */ ew (0x28, ROM_VECTOR >> 8); ew (0x2c, ROM_VECTOR); ew (0x18, 0x00); /* ser.no. Byte 0 */ ew (0x1c, 0x00); /* ser.no. Byte 1 */ ew (0x20, 0x00); /* ser.no. Byte 2 */ ew (0x24, 0x00); /* ser.no. Byte 3 */ roms[0] = 58; roms[1] = 57; roms[2] = -1; rl = getromlistbyids(roms); if (rl) { struct romdata *rd = rl->rd; z = read_rom (&rd); if (z) { write_log (_T("A4091 BOOT ROM %d.%d\n"), rd->ver, rd->rev); rom = xmalloc (uae_u8, ROM_SIZE * 4); for (i = 0; i < ROM_SIZE; i++) { uae_u8 b; zfile_fread (&b, 1, 1, z); rom[i * 4 + 0] = b; rom[i * 4 + 2] = b << 4; } zfile_fclose(z); } } else { romwarning (roms); } map_banks (&ncr_bank, 0xe80000 >> 16, 65536 >> 16, 0); } fs-uae-2.2.3+dfsg/src/inprec.cpp0000644000175000017500000001132012162366655016625 0ustar glaubitzglaubitz static uae_u8 *inprec_buffer, *inprec_p; static struct zfile *inprec_zf; static int inprec_size; int input_recording = 0; static uae_u8 *inprec_plast, *inprec_plastptr; static int inprec_div; static uae_u32 oldbuttons[4]; static uae_u16 oldjoy[2]; int inprec_open(char *fname, int record) { uae_u32 t = (uae_u32)time(0); int i; inprec_close(); inprec_zf = zfile_fopen(fname, record > 0 ? "wb" : "rb"); if (inprec_zf == NULL) return 0; inprec_size = 10000; inprec_div = 1; if (record < 0) { uae_u32 id; zfile_fseek (inprec_zf, 0, SEEK_END); inprec_size = zfile_ftell (inprec_zf); zfile_fseek (inprec_zf, 0, SEEK_SET); inprec_buffer = inprec_p = (uae_u8*)xmalloc (inprec_size); zfile_fread (inprec_buffer, inprec_size, 1, inprec_zf); inprec_plastptr = inprec_buffer; id = inprec_pu32(); if (id != 'UAE\0') { inprec_close(); return 0; } inprec_pu32(); t = inprec_pu32(); i = inprec_pu32(); while (i-- > 0) inprec_pu8(); inprec_p = inprec_plastptr; oldbuttons[0] = oldbuttons[1] = oldbuttons[2] = oldbuttons[3] = 0; oldjoy[0] = oldjoy[1] = 0; if (record < -1) inprec_div = maxvpos; } else if (record > 0) { inprec_buffer = inprec_p = (uae_u8*)xmalloc (inprec_size); inprec_ru32('UAE\0'); inprec_ru8(1); inprec_ru8(UAEMAJOR); inprec_ru8(UAEMINOR); inprec_ru8(UAESUBREV); inprec_ru32(t); inprec_ru32(0); // extra header size } else { return 0; } input_recording = record; srand(t); CIA_inprec_prepare(); write_log ("inprec initialized '%s', mode=%d\n", fname, input_recording); return 1; } void inprec_close(void) { if (!inprec_zf) return; if (inprec_buffer && input_recording > 0) { hsync_counter++; inprec_rstart(INPREC_END); inprec_rend(); hsync_counter--; zfile_fwrite (inprec_buffer, inprec_p - inprec_buffer, 1, inprec_zf); inprec_p = inprec_buffer; } zfile_fclose (inprec_zf); inprec_zf = NULL; xfree (inprec_buffer); inprec_buffer = NULL; input_recording = 0; write_log ("inprec finished\n"); } void inprec_ru8(uae_u8 v) { *inprec_p++= v; } void inprec_ru16(uae_u16 v) { inprec_ru8((uae_u8)(v >> 8)); inprec_ru8((uae_u8)v); } void inprec_ru32(uae_u32 v) { inprec_ru16((uae_u16)(v >> 16)); inprec_ru16((uae_u16)v); } void inprec_rstr(const char *s) { while(*s) { inprec_ru8(*s); s++; } inprec_ru8(0); } void inprec_rstart(uae_u8 type) { write_log ("INPREC: %08X: %d\n", hsync_counter, type); inprec_ru32(hsync_counter); inprec_ru8(0); inprec_plast = inprec_p; inprec_ru8(0xff); inprec_ru8(type); } void inprec_rend(void) { *inprec_plast = inprec_p - (inprec_plast + 2); if (inprec_p >= inprec_buffer + inprec_size - 256) { zfile_fwrite (inprec_buffer, inprec_p - inprec_buffer, 1, inprec_zf); inprec_p = inprec_buffer; } } int inprec_pstart(uae_u8 type) { uae_u8 *p = inprec_p; uae_u32 hc = hsync_counter; static uae_u8 *lastp; uae_u32 hc_orig, hc2_orig; if (savestate_state) return 0; if (p[5 + 1] == INPREC_END) { inprec_close(); return 0; } hc_orig = hc; hc /= inprec_div; hc *= inprec_div; for (;;) { uae_u32 hc2 = (p[0] << 24) | (p[1] << 16) | (p[2] << 8) | p[3]; if (p > lastp) { write_log ("INPREC: Next %08x (%08x=%d): %d (%d)\n", hc2, hc, hc2 - hc, p[5 + 1], p[5]); lastp = p; } hc2_orig = hc2; hc2 /= inprec_div; hc2 *= inprec_div; if (hc > hc2) { write_log ("INPREC: %08x > %08x: %d (%d) missed!\n", hc, hc2, p[5 + 1], p[5]); inprec_close(); return 0; } if (hc2 != hc) { lastp = p; break; } if (p[5 + 1] == type) { write_log ("INPREC: %08x: %d (%d) (%+d)\n", hc, type, p[5], hc_orig - hc2_orig); inprec_plast = p; inprec_plastptr = p + 5 + 2; return 1; } p += 5 + 2 + p[5]; } inprec_plast = NULL; return 0; } void inprec_pend(void) { uae_u8 *p = inprec_p; uae_u32 hc = hsync_counter; if (!inprec_plast) return; inprec_plast[5 + 1] = 0; inprec_plast = NULL; inprec_plastptr = NULL; hc /= inprec_div; hc *= inprec_div; for (;;) { uae_u32 hc2 = (p[0] << 24) | (p[1] << 16) | (p[2] << 8) | p[3]; hc2 /= inprec_div; hc2 *= inprec_div; if (hc2 != hc) break; if (p[5 + 1] != 0) return; p += 5 + 2 + p[5]; } inprec_p = p; if (p[5 + 1] == INPREC_END) inprec_close(); } uae_u8 inprec_pu8(void) { return *inprec_plastptr++; } uae_u16 inprec_pu16(void) { uae_u16 v = inprec_pu8() << 8; v |= inprec_pu8(); return v; } uae_u32 inprec_pu32(void) { uae_u32 v = inprec_pu16() << 16; v |= inprec_pu16(); return v; } int inprec_pstr(char *s) { int len = 0; for(;;) { uae_u8 v = inprec_pu8(); *s++ = v; if (!v) break; len++; } return len; } fs-uae-2.2.3+dfsg/src/uaeunp.cpp0000644000175000017500000004020112162366654016641 0ustar glaubitzglaubitz#include #include #include #include "sysconfig.h" #include "sysdeps.h" #include "options.h" #include "zfile.h" #include "fsdb.h" #include "zarchive.h" TCHAR start_path_exe[MAX_DPATH]; TCHAR start_path_data[MAX_DPATH]; TCHAR sep[] = { FSDB_DIR_SEPARATOR, 0 }; struct uae_prefs currprefs; static int debug = 0; static int amigatest; #define WRITE_LOG_BUF_SIZE 4096 void write_log (const TCHAR *format, ...) { int count; TCHAR buffer[WRITE_LOG_BUF_SIZE]; va_list parms; va_start (parms, format); if (debug) { count = _vsntprintf (buffer, WRITE_LOG_BUF_SIZE - 1, format, parms); _tprintf (buffer); } va_end (parms); } void gui_message (const TCHAR *format, ...) { } uae_u32 uaerand (void) { return rand (); } static int pattern_match (const TCHAR *str, const TCHAR *pattern) { enum State { Exact, // exact match Any, // ? AnyRepeat // * }; const TCHAR *s = str; const TCHAR *p = pattern; const TCHAR *q = 0; int state = 0; int match = TRUE; while (match && *p) { if (*p == '*') { state = AnyRepeat; q = p+1; } else if (*p == '?') state = Any; else state = Exact; if (*s == 0) break; switch (state) { case Exact: match = *s == *p; s++; p++; break; case Any: match = TRUE; s++; p++; break; case AnyRepeat: match = TRUE; s++; if (*s == *q){ // make a recursive call so we don't match on just a single character if (pattern_match(s,q) == TRUE) { p++; } } break; } } if (state == AnyRepeat) return (*s == *q); else if (state == Any) return (*s == *p); else return match && (*s == *p); } static void geterror (void) { TCHAR *err = zfile_geterror (); if (!err) return; _tprintf (_T("%s\n"), err); } static const TCHAR *prots = _T("HSPARWED"); struct arcdir { TCHAR *name; int isdir; uae_u32 flags; uae_u64 size; TCHAR *comment; uae_u32 crc32; int iscrc; __time64_t dt; int parent, nextlevel; }; static struct arcdir **filelist; static void dolist (struct arcdir **filelist, struct arcdir *adp, int entries, int parent, int level) { int ii, i; for (ii = 0; ii < 2; ii++) { for (i = 0; i < entries; i++) { struct arcdir *ad = filelist[i]; int j; TCHAR protflags[9]; TCHAR dates[32]; TCHAR crcs[16]; int flags; struct tm *dt; if (ad->parent != parent) continue; if ((ii == 0 && ad->isdir) || (ii == 1 && !ad->isdir)) { flags = ad->flags; if (flags >= 0) { for (j = 0; j < 8; j++) { protflags[j] = '-'; if (flags & (1 << (7 - j))) protflags[j] = prots[j]; } protflags[j] = 0; } else { _tcscpy (protflags, _T("--------")); } if (ad->dt > 0) { dt = _gmtime64 (&ad->dt); _tcsftime (dates, sizeof (dates) / sizeof (TCHAR), _T("%Y/%m/%d %H:%M:%S"), dt); } else { _tcscpy (dates, _T("-------------------")); } for (j = 0; j < level; j++) _tprintf (_T(" ")); if (ad->iscrc > 0) _stprintf (crcs, _T("%08X"), ad->crc32); else if (ad->iscrc < 0) _tcscpy (crcs, _T("????????")); else _tcscpy (crcs, _T("--------")); if (ad->isdir > 0) _tprintf (_T(" [DIR] %s %s %s\n"), protflags, dates, ad->name); else if (ad->isdir < 0) _tprintf (_T(" [VDIR] %s %s %s\n"), protflags, dates, ad->name); else _tprintf (_T("%10I64d %s %s %s %s\n"), ad->size, protflags, dates, crcs, ad->name); if (ad->comment) _tprintf (_T(" \"%s\"\n"), ad->comment); if (ad->nextlevel >= 0) { level++; dolist (filelist, adp, entries, ad - adp, level); level--; } } } } } static int parentid = -1, subdirid; static int maxentries = 10000, entries; static void resetlist (void) { parentid = -1; subdirid = 0; maxentries = 10000; entries = 0; } static int unlist2 (struct arcdir *adp, const TCHAR *src, int all) { struct zvolume *zv; struct zdirectory *h; int i; TCHAR p[MAX_DPATH]; TCHAR fn[MAX_DPATH]; struct arcdir *ad; zv = zfile_fopen_archive_root (src, ZFD_ALL); if (zv == NULL) { geterror(); _tprintf (_T("Couldn't open archive '%s'\n"), src); return 0; } h = zfile_opendir_archive (src); if (!h) { _tcscpy (p, src); _tcscat (p, _T(".DIR")); h = zfile_opendir_archive (src); if (!h) { geterror(); _tprintf (_T("Couldn't open directory '%s'\n"), src); return 0; } } while (zfile_readdir_archive (h, fn)) { struct _stat64 st; int isdir; int flags; TCHAR *comment; struct zfile *zf; uae_u32 crc32 = 0; int iscrc = 0; int nextdir = -1; _tcscpy (p, src); _tcscat (p, sep); _tcscat (p, fn); if (!zfile_stat_archive (p, &st)) { st.st_size = -1; st.st_mtime = 0; } isdir = 0; flags = 0; comment = 0; zfile_fill_file_attrs_archive (p, &isdir, &flags, &comment); flags ^= 15; if (!isdir) { if (0 && st.st_size >= 2 * 1024 * 1024) { iscrc = -1; } else if (st.st_size > 0) { zf = zfile_open_archive (p, 0); if (zf) { crc32 = zfile_crc32 (zf); iscrc = 1; } } } ad = &adp[entries++]; ad->isdir = isdir; ad->comment = comment; ad->flags = flags; ad->name = my_strdup (fn); ad->size = st.st_size; ad->dt = st.st_mtime; ad->parent = parentid; ad->crc32 = crc32; ad->iscrc = iscrc; if (isdir && all) { int oldparent = parentid; parentid = ad - adp; nextdir = parentid + 1; unlist2 (adp, p, all); parentid = oldparent; } ad->nextlevel = nextdir; if (entries >= maxentries) break; } if (parentid >= 0) return 1; filelist = xmalloc (struct arcdir*, entries); for (i = 0; i < entries; i++) { filelist[i] = &adp[i]; } // bubblesort is the winner! for (i = 0; i < entries; i++) { int j; for (j = i + 1; j < entries; j++) { int diff = _tcsicmp (filelist[i]->name, filelist[j]->name); if (diff > 0) { struct arcdir *tmp; tmp = filelist[i]; filelist[i] = filelist[j]; filelist[j] = tmp; } } } dolist (filelist, adp, entries, -1, 0); zfile_closedir_archive (h); zfile_fclose_archive (zv); return 1; } static int unlist (const TCHAR *src, int all) { struct arcdir *adp; adp = xcalloc (struct arcdir, maxentries); unlist2 (adp, src, all); return 1; } static int docrclist (const TCHAR *src) { WIN32_FIND_DATA ffd; HANDLE h; TCHAR path[MAX_DPATH]; _tcscpy (path, src); _tcscat (path, _T("\\*.*")); h = FindFirstFile (path, &ffd); while (h) { if (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { if (!_tcscmp (ffd.cFileName, _T(".")) || !_tcscmp (ffd.cFileName, _T(".."))) goto next; _tcscpy (path, src); _tcscat (path, _T("\\")); _tcscat (path, ffd.cFileName); docrclist (path); } else { TCHAR path2[MAX_DPATH]; _tcscpy (path, src); _tcscat (path, _T("\\")); _tcscat (path, ffd.cFileName); GetFullPathName (path, MAX_DPATH, path2, NULL); resetlist (); unlist (path2, 1); } next: if (!FindNextFile (h, &ffd)) { FindClose (h); break; } } return 1; } static void setdate (const TCHAR *src, __time64_t tm) { struct utimbuf ut; if (tm) { ut.actime = ut.modtime = tm; utime (src, &ut); } } static int found; static int unpack (const TCHAR *src, const TCHAR *filename, const TCHAR *dst, int out, int all, int level) { struct zdirectory *h; struct zvolume *zv; int ret; uae_u8 *b; int size; TCHAR fn[MAX_DPATH]; ret = 0; zv = zfile_fopen_archive_root (src, ZFD_ALL); if (zv == NULL) { geterror(); _tprintf (_T("Couldn't open archive '%s'\n"), src); return 0; } h = zfile_opendir_archive (src); if (!h) { geterror(); _tprintf (_T("Couldn't open directory '%s'\n"), src); return 0; } while (zfile_readdir_archive (h, fn)) { if (all || !_tcsicmp (filename, fn)) { TCHAR tmp[MAX_DPATH]; struct zfile *s, *d; struct _stat64 st; found = 1; _tcscpy (tmp, src); _tcscat (tmp, sep); _tcscat (tmp, fn); if (!zfile_stat_archive (tmp, &st)) { _tprintf (_T("Couldn't stat '%s'\n"), tmp); continue; } if (dst == NULL || all) dst = fn; if (st.st_mode) { if (all > 0) continue; if (all < 0) { TCHAR oldcur[MAX_DPATH]; my_mkdir (fn); my_setcurrentdir (fn, oldcur); unpack (tmp, fn, dst, out, all, 1); my_setcurrentdir (oldcur, NULL); setdate (dst, st.st_mtime); continue; } _tprintf (_T("Directory extraction not yet supported\n")); return 0; } s = zfile_open_archive (tmp, ZFD_ARCHIVE | ZFD_NORECURSE); if (!s) { geterror(); _tprintf (_T("Couldn't open '%s' for reading\n"), src); continue; } zfile_fseek (s, 0, SEEK_END); size = zfile_ftell (s); zfile_fseek (s, 0, SEEK_SET); b = xcalloc (uae_u8, size); if (b) { if (zfile_fread (b, size, 1, s) == 1) { if (out) { _tprintf (_T("\n")); fwrite (b, size, 1, stdout); } else { d = zfile_fopen (dst, _T("wb"), 0); if (d) { if (zfile_fwrite (b, size, 1, d) == 1) { ret = 1; _tprintf (_T("%s extracted, %d bytes\n"), dst, size); } zfile_fclose (d); setdate (dst, st.st_mtime); } } } xfree (b); } zfile_fclose (s); if (!all) break; } } geterror (); if (!found && !level) { if (filename[0]) _tprintf (_T("'%s' not found\n"), filename); else _tprintf (_T("nothing extracted\n")); } return ret; } static int unpack2 (const TCHAR *src, const TCHAR *match, int level) { struct zdirectory *h; struct zvolume *zv; int ret; uae_u8 *b; int size; TCHAR fn[MAX_DPATH]; ret = 0; zv = zfile_fopen_archive_root (src, ZFD_ALL); if (zv == NULL) { geterror(); _tprintf (_T("Couldn't open archive '%s'\n"), src); return 0; } h = zfile_opendir_archive (src); if (!h) { geterror(); _tprintf (_T("Couldn't open directory '%s'\n"), src); return 0; } while (zfile_readdir_archive (h, fn)) { TCHAR tmp[MAX_DPATH]; TCHAR *dst; struct zfile *s, *d; int isdir, flags; _tcscpy (tmp, src); _tcscat (tmp, sep); _tcscat (tmp, fn); zfile_fill_file_attrs_archive (tmp, &isdir, &flags, NULL); if (isdir) { TCHAR *p = _tcsstr (fn, _T(".DIR")); if (isdir == ZNODE_VDIR && p && _tcslen (p) == 4) { p[0] = 0; if (pattern_match (fn, match)) continue; p[0] = '.'; } unpack2 (tmp, match, 1); continue; } if (pattern_match (fn, match)) { struct _stat64 st; if (!zfile_stat_archive (tmp, &st)) { st.st_mtime = -1; } found = 1; dst = fn; s = zfile_open_archive (tmp, ZFD_NORECURSE); if (!s) { geterror(); _tprintf (_T("Couldn't open '%s' for reading\n"), tmp); continue; } zfile_fseek (s, 0, SEEK_END); size = zfile_ftell (s); zfile_fseek (s, 0, SEEK_SET); b = xcalloc (uae_u8, size); if (b) { if (zfile_fread (b, size, 1, s) == 1) { d = zfile_fopen (dst, _T("wb"), 0); if (d) { if (zfile_fwrite (b, size, 1, d) == 1) { ret = 1; _tprintf (_T("%s extracted, %d bytes\n"), dst, size); } zfile_fclose (d); setdate (dst, st.st_mtime); } } xfree (b); } zfile_fclose (s); } } geterror (); if (!found && !level) { _tprintf (_T("'%s' not matched\n"), match); } return ret; } static int scanpath (TCHAR *src, TCHAR *outpath) { struct zvolume *zv; struct zdirectory *h; TCHAR fn[MAX_DPATH]; zv = zfile_fopen_archive_root (src, ZFD_ALL | ZFD_NORECURSE); if (zv == NULL) { geterror(); _tprintf (_T("Couldn't open archive '%s'\n"), src); return 0; } h = zfile_opendir_archive (src); if (!h) { geterror(); _tprintf (_T("Couldn't open directory '%s'\n"), src); return 0; } while (zfile_readdir_archive (h, fn)) { TCHAR tmp[MAX_DPATH]; int isdir, flags; _tcscpy (tmp, src); _tcscat (tmp, sep); _tcscat (tmp, fn); zfile_fill_file_attrs_archive (tmp, &isdir, &flags, NULL); if (isdir == ZNODE_VDIR) { _tcscpy (outpath, tmp); scanpath (tmp, outpath); break; } } return 1; } int __cdecl wmain (int argc, wchar_t *argv[], wchar_t *envp[]) { int ok = 0, i; int list = 0, xtract = 0, extract = 0; int out = 0, all = 0, crclist = 0; TCHAR path[MAX_DPATH] = { 0 }, pathx[MAX_DPATH] = { 0 }; #if 0 TCHAR tmppath[MAX_DPATH]; #endif int used[32] = { 0 }; TCHAR *parm2 = NULL; TCHAR *parm3 = NULL; TCHAR *match = NULL; resetlist (); for (i = 0; i < argc && i < 32; i++) { if (!_tcsicmp (argv[i], _T("-crclist"))) { crclist = 1; used[i] = 1; } if (!_tcsicmp (argv[i], _T("o"))) { out = 1; used[i] = 1; } if (!_tcsicmp (argv[i], _T("-o"))) { out = 1; used[i] = 1; } if (!_tcsicmp (argv[i], _T("l"))) { list = 1; used[i] = 1; } if (!_tcsicmp (argv[i], _T("-l"))) { list = 1; used[i] = 1; } if (!_tcsicmp (argv[i], _T("x"))) { xtract = 1; used[i] = 1; } if (!_tcsicmp (argv[i], _T("-x"))) { xtract = 1; used[i] = 1; } if (!_tcsicmp (argv[i], _T("e"))) { extract = 1; used[i] = 1; } if (!_tcsicmp (argv[i], _T("-e"))) { extract = 1; used[i] = 1; } if (!_tcsicmp (argv[i], _T("*"))) { all = 1; used[i] = 1; } if (!_tcsicmp (argv[i], _T("**"))) { all = -1; used[i] = 1; } if (!used[i] && (_tcschr (argv[i], '*') || _tcschr (argv[i], '?'))) { extract = 1; match = argv[i]; used[i] = 1; } } for (i = 1; i < argc && i < 32; i++) { if (!used[i]) { _tcscpy (pathx, argv[i]); GetFullPathName (argv[i], MAX_DPATH, path, NULL); used[i] = 1; break; } } for (i = 1; i < argc && i < 32; i++) { if (!used[i]) { parm2 = argv[i]; used[i] = 1; break; } } for (i = 1; i < argc && i < 32; i++) { if (!used[i]) { parm3 = argv[i]; used[i] = 1; break; } } // _tcscpy (tmppath, path); // scanpath (tmppath, path); if (crclist) { docrclist (_T(".")); ok = 1; } else if (!list && match) { unpack2 (path, match, 0); ok = 1; } else if (!list && !parm2 && all > 0) { unpack2 (path, _T("*"), 0); ok = 1; } else if (!list && extract && parm2) { unpack2 (path, parm2, 0); ok = 1; } else if (argc == 2 || (argc > 2 && list)) { unlist (path, all); ok = 1; } else if (((xtract && parm2) || all || (argc >= 3 && parm2)) && !out) { unpack (path, parm2, parm3, 0, all, 0); ok = 1; } else if (parm2 && (argc >= 4 && out)) { unpack (path, parm2, parm3, 1, all, 0); ok = 1; } if (!ok) { _tprintf (_T("UAE unpacker uaeunp 0.8f by Toni Wilen (c)2012\n")); _tprintf (_T("\n")); _tprintf (_T("List: \"uaeunp (-l) \"\n")); _tprintf (_T("List all recursively: \"uaeunp -l **\"\n")); _tprintf (_T("Extract to file: \"uaeunp (-x) []\"\n")); _tprintf (_T("Extract all (single directory): \"uaeunp (-x) *\"\n")); _tprintf (_T("Extract all (recursively): \"uaeunp (-x) **\"\n")); _tprintf (_T("Extract all (recursively, current dir): \"uaeunp -e \"\n")); _tprintf (_T("Output to console: \"uaeunp (-x) -o \"\n")); _tprintf (_T("\n")); _tprintf (_T("Supported disk image formats:\n")); _tprintf (_T(" ADF, HDF (VHD), DMS, encrypted DMS, IPF, FDI, DSQ, WRP\n")); _tprintf (_T("Supported filesystems:\n")); _tprintf (_T(" OFS, FFS, SFS, SFS2 and FAT12\n")); _tprintf (_T("Supported archive formats:\n")); _tprintf (_T(" 7ZIP, LHA, LZX, RAR (unrar.dll), TAR, ZIP, ArchiveAccess.DLL\n")); _tprintf (_T("Miscellaneous formats:\n")); _tprintf (_T(" RDB partition table, GZIP, XZ\n")); } return 0; } /* 0.8f: - PCDOS raw MFM decoding improved (multiformat disks) 0.8e: - DSQ extra header supported 0.8c: - do not extract archives inside archive in recursive extraction mode 0.8b: - DMS full cylinder 0 BBS ADs skipped when extracting - DMS BBS AD extraction support 0.8: - tar archive support - some fixes and improvements 0.7: - vhd read support - dms, ipf (and possible other) disk image formats didn't unpack inside archives - fixed duplicate vdir entries with some image types - all raw disk image formats support Amiga, FAT and extended adf extraction - cache relatively slow ipf and fdi extracted data 0.6: - rdb handling optimization (no more huge memory usage) - fat12 supported 0.5: - adf protection flags fixed - sfs support added - >512 block sizes supported (rdb hardfiles only) 0.5b: - SFS file extraction fixed - SFS2 supported - block size autodetection implemented (if non-rdb hardfile) 0.5c: - rdb_dump.dat added to rdb hardfiles, can be used to dump/backup rdb blocks */ fs-uae-2.2.3+dfsg/src/adide.cpp0000644000175000017500000000175012162366654016420 0ustar glaubitzglaubitz /* * UAE - The Un*x Amiga Emulator * * ADIDE * * (c) 2009 Toni Wilen */ #include "sysconfig.h" #include "sysdeps.h" #include "options.h" #include "gayle.h" static struct ide_hdf *idedrive[2]; int adide_add_ide_unit (int ch, TCHAR *path, int blocksize, int readonly, TCHAR *devname, int sectors, int surfaces, int reserved, int bootpri, TCHAR *filesys) { struct ide_hdf *ide; if (ch >= 2) return -1; alloc_ide_mem (); ide = idedrive[ch]; if (!hdf_hd_open (&ide->hdhfd, path, blocksize, readonly, devname, sectors, surfaces, reserved, bootpri, filesys)) return -1; ide->lba48 = ide->hdhfd.size >= 128 * (uae_u64)0x40000000 ? 1 : 0; write_log (_T("IDE%d '%s', CHS=%d,%d,%d. %uM. LBA48=%d\n"), ch, path, ide->hdhfd.cyls, ide->hdhfd.heads, ide->hdhfd.secspertrack, (int)(ide->hdhfd.size / (1024 * 1024)), ide->lba48); ide->status = 0; ide->data_offset = 0; ide->data_size = 0; //dumphdf (&ide->hdhfd.hfd); return 1; } fs-uae-2.2.3+dfsg/src/expansion.cpp0000644000175000017500000013315112162366655017360 0ustar glaubitzglaubitz/* * UAE - The Un*x Amiga Emulator * * AutoConfig (tm) Expansions (ZorroII/III) * * Copyright 1996,1997 Stefan Reinauer * Copyright 1997 Brian King * - added gfxcard code * */ //#define EXP_DEBUG #include "sysconfig.h" #include "sysdeps.h" #include "options.h" #include "uae.h" #include "uae/memory.h" #include "rommgr.h" #include "autoconf.h" #include "custom.h" #include "newcpu.h" #include "savestate.h" #include "zfile.h" #include "catweasel.h" #include "cdtv.h" #include "a2091.h" #include "a2065.h" #include "cd32_fmv.h" #include "ncr_scsi.h" #include "debug.h" #include "gayle.h" #define MAX_EXPANSION_BOARDS 8 /* ********************************************************** */ /* 00 / 02 */ /* er_Type */ #define Z2_MEM_8MB 0x00 /* Size of Memory Block */ #define Z2_MEM_4MB 0x07 #define Z2_MEM_2MB 0x06 #define Z2_MEM_1MB 0x05 #define Z2_MEM_512KB 0x04 #define Z2_MEM_256KB 0x03 #define Z2_MEM_128KB 0x02 #define Z2_MEM_64KB 0x01 /* extended definitions */ #define Z3_MEM_16MB 0x00 #define Z3_MEM_32MB 0x01 #define Z3_MEM_64MB 0x02 #define Z3_MEM_128MB 0x03 #define Z3_MEM_256MB 0x04 #define Z3_MEM_512MB 0x05 #define Z3_MEM_1GB 0x06 #define chainedconfig 0x08 /* Next config is part of the same card */ #define rom_card 0x10 /* ROM vector is valid */ #define add_memory 0x20 /* Link RAM into free memory list */ #define zorroII 0xc0 /* Type of Expansion Card */ #define zorroIII 0x80 /* ********************************************************** */ /* 04 - 06 & 10-16 */ /* Manufacturer */ #define commodore_g 513 /* Commodore Braunschweig (Germany) */ #define commodore 514 /* Commodore West Chester */ #define gvp 2017 /* GVP */ #define ass 2102 /* Advanced Systems & Software */ #define hackers_id 2011 /* Special ID for test cards */ /* Card Type */ #define commodore_a2091 3 /* A2091 / A590 Card from C= */ #define commodore_a2091_ram 10 /* A2091 / A590 Ram on HD-Card */ #define commodore_a2232 70 /* A2232 Multiport Expansion */ #define ass_nexus_scsi 1 /* Nexus SCSI Controller */ #define gvp_series_2_scsi 11 #define gvp_iv_24_gfx 32 /* ********************************************************** */ /* 08 - 0A */ /* er_Flags */ #define Z3_SS_MEM_SAME 0x00 #define Z3_SS_MEM_AUTO 0x01 #define Z3_SS_MEM_64KB 0x02 #define Z3_SS_MEM_128KB 0x03 #define Z3_SS_MEM_256KB 0x04 #define Z3_SS_MEM_512KB 0x05 #define Z3_SS_MEM_1MB 0x06 /* Zorro III card subsize */ #define Z3_SS_MEM_2MB 0x07 #define Z3_SS_MEM_4MB 0x08 #define Z3_SS_MEM_6MB 0x09 #define Z3_SS_MEM_8MB 0x0a #define Z3_SS_MEM_10MB 0x0b #define Z3_SS_MEM_12MB 0x0c #define Z3_SS_MEM_14MB 0x0d #define Z3_SS_MEM_defunct1 0x0e #define Z3_SS_MEM_defunct2 0x0f #define force_z3 0x10 /* *MUST* be set if card is Z3 */ #define ext_size 0x20 /* Use extended size table for bits 0-2 of er_Type */ #define no_shutup 0x40 /* Card cannot receive Shut_up_forever */ #define care_addr 0x80 /* Z2=Adress HAS to be $200000-$9fffff Z3=1->mem,0=io */ /* ********************************************************** */ /* 40-42 */ /* ec_interrupt (unused) */ #define enable_irq 0x01 /* enable Interrupt */ #define reset_card 0x04 /* Reset of Expansion Card - must be 0 */ #define card_int2 0x10 /* READ ONLY: IRQ 2 active */ #define card_irq6 0x20 /* READ ONLY: IRQ 6 active */ #define card_irq7 0x40 /* READ ONLY: IRQ 7 active */ #define does_irq 0x80 /* READ ONLY: Card currently throws IRQ */ /* ********************************************************** */ /* ROM defines (DiagVec) */ #define rom_4bit (0x00<<14) /* ROM width */ #define rom_8bit (0x01<<14) #define rom_16bit (0x02<<14) #define rom_never (0x00<<12) /* Never run Boot Code */ #define rom_install (0x01<<12) /* run code at install time */ #define rom_binddrv (0x02<<12) /* run code with binddrivers */ uaecptr ROM_filesys_resname, ROM_filesys_resid; uaecptr ROM_filesys_diagentry; uaecptr ROM_hardfile_resname, ROM_hardfile_resid; uaecptr ROM_hardfile_init; bool uae_boot_rom; int uae_boot_rom_size; /* size = code size only */ /* ********************************************************** */ static void (*card_init[MAX_EXPANSION_BOARDS]) (void); static void (*card_map[MAX_EXPANSION_BOARDS]) (void); static TCHAR *card_name[MAX_EXPANSION_BOARDS]; static int ecard, cardno, z3num; static uae_u16 uae_id; /* ********************************************************** */ /* Please note: ZorroIII implementation seems to work different * than described in the HRM. This claims that ZorroIII config * address is 0xff000000 while the ZorroII config space starts * at 0x00e80000. In reality, both, Z2 and Z3 cards are * configured in the ZorroII config space. Kickstart 3.1 doesn't * even do a single read or write access to the ZorroIII space. * The original Amiga include files tell the same as the HRM. * ZorroIII: If you set ext_size in er_Flags and give a Z2-size * in er_Type you can very likely add some ZorroII address space * to a ZorroIII card on a real Amiga. This is not implemented * yet. * -- Stefan * * Surprising that 0xFF000000 isn't used. Maybe it depends on the * ROM. Anyway, the HRM says that Z3 cards may appear in Z2 config * space, so what we are doing here is correct. * -- Bernd */ /* Autoconfig address space at 0xE80000 */ static uae_u8 expamem[65536]; static uae_u8 expamem_lo; static uae_u16 expamem_hi; static uae_u32 REGPARAM3 expamem_lget (uaecptr) REGPARAM; static uae_u32 REGPARAM3 expamem_wget (uaecptr) REGPARAM; static uae_u32 REGPARAM3 expamem_bget (uaecptr) REGPARAM; static void REGPARAM3 expamem_lput (uaecptr, uae_u32) REGPARAM; static void REGPARAM3 expamem_wput (uaecptr, uae_u32) REGPARAM; static void REGPARAM3 expamem_bput (uaecptr, uae_u32) REGPARAM; addrbank expamem_bank = { expamem_lget, expamem_wget, expamem_bget, expamem_lput, expamem_wput, expamem_bput, default_xlate, default_check, NULL, _T("Autoconfig"), dummy_lgeti, dummy_wgeti, ABFLAG_IO | ABFLAG_SAFE }; static void expamem_map_clear (void) { write_log (_T("expamem_map_clear() got called. Shouldn't happen.\n")); } static void expamem_init_clear (void) { memset (expamem, 0xff, sizeof expamem); } /* autoconfig area is "non-existing" after last device */ static void expamem_init_clear_zero (void) { map_banks (&dummy_bank, 0xe8, 1, 0); } static void expamem_init_clear2 (void) { expamem_bank.name = _T("Autoconfig"); expamem_init_clear_zero (); ecard = cardno; } static void expamem_init_last (void) { expamem_init_clear2 (); write_log (_T("Memory map after autoconfig:\n")); memory_map_dump (); } void expamem_next (void) { expamem_init_clear (); map_banks (&expamem_bank, 0xE8, 1, 0); ++ecard; if (ecard < cardno) { expamem_bank.name = card_name[ecard] ? card_name[ecard] : (TCHAR*) _T("None"); (*card_init[ecard]) (); } else { expamem_init_clear2 (); } } static uae_u32 REGPARAM2 expamem_lget (uaecptr addr) { write_log (_T("warning: READ.L from address $%lx PC=%x\n"), addr, M68K_GETPC); return (expamem_wget (addr) << 16) | expamem_wget (addr + 2); } static uae_u32 REGPARAM2 expamem_wget (uaecptr addr) { uae_u32 v = (expamem_bget (addr) << 8) | expamem_bget (addr + 1); write_log (_T("warning: READ.W from address $%lx=%04x PC=%x\n"), addr, v & 0xffff, M68K_GETPC); return v; } static uae_u32 REGPARAM2 expamem_bget (uaecptr addr) { uae_u8 b; #ifdef JIT special_mem |= S_READ; #endif addr &= 0xFFFF; b = expamem[addr]; #ifdef EXP_DEBUG write_log (_T("expamem_bget %x %x\n"), addr, b); #endif return b; } static void REGPARAM2 expamem_write (uaecptr addr, uae_u32 value) { #ifdef JIT special_mem |= S_WRITE; #endif addr &= 0xffff; if (addr == 00 || addr == 02 || addr == 0x40 || addr == 0x42) { expamem[addr] = (value & 0xf0); expamem[addr + 2] = (value & 0x0f) << 4; } else { expamem[addr] = ~(value & 0xf0); expamem[addr + 2] = ~((value & 0x0f) << 4); } } static int REGPARAM2 expamem_type (void) { return ((expamem[0] | expamem[2] >> 4) & 0xc0); } static void REGPARAM2 expamem_lput (uaecptr addr, uae_u32 value) { #ifdef JIT special_mem |= S_WRITE; #endif write_log (_T("warning: WRITE.L to address $%lx : value $%lx\n"), addr, value); } static void REGPARAM2 expamem_wput (uaecptr addr, uae_u32 value) { #ifdef EXP_DEBUG write_log (_T("expamem_wput %x %x\n"), addr, value); #endif #ifdef JIT special_mem |= S_WRITE; #endif value &= 0xffff; if (ecard >= cardno) return; if (expamem_type () != zorroIII) write_log (_T("warning: WRITE.W to address $%lx : value $%x\n"), addr, value); else { switch (addr & 0xff) { case 0x44: if (expamem_type () == zorroIII) { uae_u32 p1, p2 = 0; // +Bernd Roesch & Toni Wilen p1 = get_word (regs.regs[11] + 0x20); if (expamem[0] & add_memory) { // Z3 RAM expansion p2 = 0; while (!p2 && z3num < 2) { if (z3num == 0 && currprefs.z3fastmem_size) p2 = z3fastmem_start >> 16; else if (z3num == 1 && currprefs.z3fastmem2_size) p2 = z3fastmem2_start >> 16; if (!p2) z3num++; } z3num++; } else { // Z3 P96 RAM if (p96ram_start & 0xff000000) p2 = p96ram_start >> 16; #ifdef FSUAE #ifndef NATMEM_OFFSET p2 = value; #endif #endif } put_word (regs.regs[11] + 0x20, p2); put_word (regs.regs[11] + 0x28, p2); // -Bernd Roesch expamem_hi = p2; (*card_map[ecard]) (); if (p1 != p2) write_log (_T(" Card %d remapped %04x0000 -> %04x0000\n"), ecard + 1, p1, p2); write_log (_T(" Card %d (Zorro%s) done.\n"), ecard + 1, expamem_type () == 0xc0 ? _T("II") : _T("III")); expamem_next (); } break; case 0x4c: write_log (_T(" Card %d (Zorro%s) had no success.\n"), ecard + 1, expamem_type () == 0xc0 ? _T("II") : _T("III")); expamem_hi = expamem_lo = 0; (*card_map[ecard]) (); break; } } } static void REGPARAM2 expamem_bput (uaecptr addr, uae_u32 value) { #ifdef EXP_DEBUG write_log (_T("expamem_bput %x %x\n"), addr, value); #endif #ifdef JIT special_mem |= S_WRITE; #endif if (ecard >= cardno) return; value &= 0xff; switch (addr & 0xff) { case 0x30: case 0x32: expamem_hi = 0; expamem_lo = 0; expamem_write (0x48, 0x00); break; case 0x48: if (expamem_type () == zorroII) { expamem_hi = value; (*card_map[ecard]) (); write_log (_T(" Card %d (Zorro%s) done.\n"), ecard + 1, expamem_type () == 0xc0 ? _T("II") : _T("III")); expamem_next (); } else if (expamem_type() == zorroIII) expamem_lo = value; break; case 0x4a: if (expamem_type () == zorroII) expamem_lo = value; break; case 0x4c: expamem_hi = expamem_lo = 0; (*card_map[ecard]) (); write_log (_T(" Card %d (Zorro%s) had no success.\n"), ecard + 1, expamem_type () == 0xc0 ? _T("II") : _T("III")); expamem_next (); break; } } #ifdef CD32 static void expamem_map_cd32fmv (void) { uaecptr start = ((expamem_hi | (expamem_lo >> 4)) << 16); cd32_fmv_init (start); } static void expamem_init_cd32fmv (void) { int ids[] = { 23, -1 }; struct romlist *rl = getromlistbyids (ids); struct romdata *rd; struct zfile *z; expamem_init_clear (); if (!rl) return; write_log (_T("CD32 FMV ROM '%s' %d.%d\n"), rl->path, rl->rd->ver, rl->rd->rev); rd = rl->rd; z = read_rom (&rd); if (z) { zfile_fread (expamem, 128, 1, z); zfile_fclose (z); } } #endif /* ********************************************************** */ /* * Fast Memory */ static uae_u32 fastmem_mask; static uae_u32 REGPARAM3 fastmem_lget (uaecptr) REGPARAM; static uae_u32 REGPARAM3 fastmem_wget (uaecptr) REGPARAM; static uae_u32 REGPARAM3 fastmem_bget (uaecptr) REGPARAM; static void REGPARAM3 fastmem_lput (uaecptr, uae_u32) REGPARAM; static void REGPARAM3 fastmem_wput (uaecptr, uae_u32) REGPARAM; static void REGPARAM3 fastmem_bput (uaecptr, uae_u32) REGPARAM; static int REGPARAM3 fastmem_check (uaecptr addr, uae_u32 size) REGPARAM; static uae_u8 *REGPARAM3 fastmem_xlate (uaecptr addr) REGPARAM; uaecptr fastmem_start; /* Determined by the OS */ static uae_u8 *fastmemory; static uae_u32 REGPARAM2 fastmem_lget (uaecptr addr) { uae_u8 *m; addr -= fastmem_start & fastmem_mask; addr &= fastmem_mask; m = fastmemory + addr; return do_get_mem_long ((uae_u32 *)m); } static uae_u32 REGPARAM2 fastmem_wget (uaecptr addr) { uae_u8 *m; addr -= fastmem_start & fastmem_mask; addr &= fastmem_mask; m = fastmemory + addr; return do_get_mem_word ((uae_u16 *)m); } static uae_u32 REGPARAM2 fastmem_bget (uaecptr addr) { addr -= fastmem_start & fastmem_mask; addr &= fastmem_mask; return fastmemory[addr]; } static void REGPARAM2 fastmem_lput (uaecptr addr, uae_u32 l) { uae_u8 *m; addr -= fastmem_start & fastmem_mask; addr &= fastmem_mask; m = fastmemory + addr; do_put_mem_long ((uae_u32 *)m, l); } static void REGPARAM2 fastmem_wput (uaecptr addr, uae_u32 w) { uae_u8 *m; addr -= fastmem_start & fastmem_mask; addr &= fastmem_mask; m = fastmemory + addr; do_put_mem_word ((uae_u16 *)m, w); } static void REGPARAM2 fastmem_bput (uaecptr addr, uae_u32 b) { addr -= fastmem_start & fastmem_mask; addr &= fastmem_mask; fastmemory[addr] = b; } static int REGPARAM2 fastmem_check (uaecptr addr, uae_u32 size) { addr -= fastmem_start & fastmem_mask; addr &= fastmem_mask; return (addr + size) <= allocated_fastmem; } static uae_u8 *REGPARAM2 fastmem_xlate (uaecptr addr) { addr -= fastmem_start & fastmem_mask; addr &= fastmem_mask; return fastmemory + addr; } addrbank fastmem_bank = { fastmem_lget, fastmem_wget, fastmem_bget, fastmem_lput, fastmem_wput, fastmem_bput, fastmem_xlate, fastmem_check, NULL, _T("Fast memory"), fastmem_lget, fastmem_wget, ABFLAG_RAM }; #ifdef CATWEASEL /* * Catweasel ZorroII */ static uae_u32 REGPARAM3 catweasel_lget (uaecptr) REGPARAM; static uae_u32 REGPARAM3 catweasel_wget (uaecptr) REGPARAM; static uae_u32 REGPARAM3 catweasel_bget (uaecptr) REGPARAM; static void REGPARAM3 catweasel_lput (uaecptr, uae_u32) REGPARAM; static void REGPARAM3 catweasel_wput (uaecptr, uae_u32) REGPARAM; static void REGPARAM3 catweasel_bput (uaecptr, uae_u32) REGPARAM; static int REGPARAM3 catweasel_check (uaecptr addr, uae_u32 size) REGPARAM; static uae_u8 *REGPARAM3 catweasel_xlate (uaecptr addr) REGPARAM; static uae_u32 catweasel_mask; static uae_u32 catweasel_start; static uae_u32 REGPARAM2 catweasel_lget (uaecptr addr) { #ifdef JIT special_mem |= S_READ; #endif write_log (_T("catweasel_lget @%08X!\n"),addr); return 0; } static uae_u32 REGPARAM2 catweasel_wget (uaecptr addr) { #ifdef JIT special_mem |= S_READ; #endif write_log (_T("catweasel_wget @%08X!\n"),addr); return 0; } static uae_u32 REGPARAM2 catweasel_bget (uaecptr addr) { #ifdef JIT special_mem |= S_READ; #endif addr -= catweasel_start & catweasel_mask; addr &= catweasel_mask; return catweasel_do_bget (addr); } static void REGPARAM2 catweasel_lput (uaecptr addr, uae_u32 l) { #ifdef JIT special_mem |= S_WRITE; #endif write_log (_T("catweasel_lput @%08X=%08X!\n"),addr,l); } static void REGPARAM2 catweasel_wput (uaecptr addr, uae_u32 w) { #ifdef JIT special_mem |= S_WRITE; #endif write_log (_T("catweasel_wput @%08X=%04X!\n"),addr,w); } static void REGPARAM2 catweasel_bput (uaecptr addr, uae_u32 b) { #ifdef JIT special_mem |= S_WRITE; #endif addr -= catweasel_start & catweasel_mask; addr &= catweasel_mask; catweasel_do_bput (addr, b); } static int REGPARAM2 catweasel_check (uaecptr addr, uae_u32 size) { return 0; } static uae_u8 *REGPARAM2 catweasel_xlate (uaecptr addr) { write_log (_T("catweasel_xlate @%08X size %08X\n"), addr); return 0; } static addrbank catweasel_bank = { catweasel_lget, catweasel_wget, catweasel_bget, catweasel_lput, catweasel_wput, catweasel_bput, catweasel_xlate, catweasel_check, NULL, _T("Catweasel"), dummy_lgeti, dummy_wgeti, ABFLAG_IO }; static void expamem_map_catweasel (void) { catweasel_start = ((expamem_hi | (expamem_lo >> 4)) << 16); if (catweasel_start) { map_banks (&catweasel_bank, catweasel_start >> 16, 1, 0); write_log (_T("Catweasel MK%d: mapped @$%lx\n"), cwc.type, catweasel_start); } } static void expamem_init_catweasel (void) { uae_u8 productid = cwc.type >= CATWEASEL_TYPE_MK3 ? 66 : 200; uae_u16 vendorid = cwc.type >= CATWEASEL_TYPE_MK3 ? 4626 : 5001; catweasel_mask = (cwc.type >= CATWEASEL_TYPE_MK3) ? 0xffff : 0x1ffff; expamem_init_clear (); expamem_write (0x00, (cwc.type >= CATWEASEL_TYPE_MK3 ? Z2_MEM_64KB : Z2_MEM_128KB) | zorroII); expamem_write (0x04, productid); expamem_write (0x08, 0); expamem_write (0x10, vendorid >> 8); expamem_write (0x14, vendorid & 0xff); 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 (0x24, 0x00); /* ser.no. Byte 3 */ expamem_write (0x28, 0x00); /* Rom-Offset hi */ expamem_write (0x2c, 0x00); /* ROM-Offset lo */ expamem_write (0x40, 0x00); /* Ctrl/Statusreg.*/ } #endif #ifdef FILESYS /* * Filesystem device ROM * This is very simple, the Amiga shouldn't be doing things with it. */ static uae_u32 REGPARAM3 filesys_lget (uaecptr) REGPARAM; static uae_u32 REGPARAM3 filesys_wget (uaecptr) REGPARAM; static uae_u32 REGPARAM3 filesys_bget (uaecptr) REGPARAM; static void REGPARAM3 filesys_lput (uaecptr, uae_u32) REGPARAM; static void REGPARAM3 filesys_wput (uaecptr, uae_u32) REGPARAM; static void REGPARAM3 filesys_bput (uaecptr, uae_u32) REGPARAM; static uae_u32 filesys_start; /* Determined by the OS */ uae_u8 *filesysory; static uae_u32 REGPARAM2 filesys_lget (uaecptr addr) { uae_u8 *m; #ifdef JIT special_mem |= S_READ; #endif addr -= filesys_start & 65535; addr &= 65535; m = filesysory + addr; #ifdef EXP_DEBUG write_log (_T("filesys_lget %x %x\n"), addr, do_get_mem_long ((uae_u32 *)m)); #endif return do_get_mem_long ((uae_u32 *)m); } static uae_u32 REGPARAM2 filesys_wget (uaecptr addr) { uae_u8 *m; #ifdef JIT special_mem |= S_READ; #endif addr -= filesys_start & 65535; addr &= 65535; m = filesysory + addr; #ifdef EXP_DEBUG write_log (_T("filesys_wget %x %x\n"), addr, do_get_mem_word ((uae_u16 *)m)); #endif return do_get_mem_word ((uae_u16 *)m); } static uae_u32 REGPARAM2 filesys_bget (uaecptr addr) { #ifdef JIT special_mem |= S_READ; #endif addr -= filesys_start & 65535; addr &= 65535; #ifdef EXP_DEBUG write_log (_T("filesys_bget %x %x\n"), addr, filesysory[addr]); #endif return filesysory[addr]; } static void REGPARAM2 filesys_lput (uaecptr addr, uae_u32 l) { #ifdef JIT special_mem |= S_WRITE; #endif write_log (_T("filesys_lput called PC=%p\n"), M68K_GETPC); } static void REGPARAM2 filesys_wput (uaecptr addr, uae_u32 w) { #ifdef JIT special_mem |= S_WRITE; #endif write_log (_T("filesys_wput called PC=%p\n"), M68K_GETPC); } static void REGPARAM2 filesys_bput (uaecptr addr, uae_u32 b) { #ifdef JIT special_mem |= S_WRITE; #endif #ifdef EXP_DEBUG write_log (_T("filesys_bput %x %x\n"), addr, b); #endif } static addrbank filesys_bank = { filesys_lget, filesys_wget, filesys_bget, filesys_lput, filesys_wput, filesys_bput, default_xlate, default_check, NULL, _T("Filesystem Autoconfig Area"), dummy_lgeti, dummy_wgeti, ABFLAG_IO | ABFLAG_SAFE }; #endif /* FILESYS */ /* * Z3fastmem Memory */ static uae_u32 z3fastmem_mask, z3fastmem2_mask, z3chipmem_mask; uaecptr z3fastmem_start, z3fastmem2_start, z3chipmem_start; static uae_u8 *z3fastmem, *z3fastmem2, *z3chipmem; static uae_u32 REGPARAM2 z3fastmem_lget (uaecptr addr) { uae_u8 *m; addr -= z3fastmem_start & z3fastmem_mask; addr &= z3fastmem_mask; m = z3fastmem + addr; return do_get_mem_long ((uae_u32 *)m); } static uae_u32 REGPARAM2 z3fastmem_wget (uaecptr addr) { uae_u8 *m; addr -= z3fastmem_start & z3fastmem_mask; addr &= z3fastmem_mask; m = z3fastmem + addr; return do_get_mem_word ((uae_u16 *)m); } static uae_u32 REGPARAM2 z3fastmem_bget (uaecptr addr) { addr -= z3fastmem_start & z3fastmem_mask; addr &= z3fastmem_mask; return z3fastmem[addr]; } static void REGPARAM2 z3fastmem_lput (uaecptr addr, uae_u32 l) { uae_u8 *m; addr -= z3fastmem_start & z3fastmem_mask; addr &= z3fastmem_mask; m = z3fastmem + addr; do_put_mem_long ((uae_u32 *)m, l); } static void REGPARAM2 z3fastmem_wput (uaecptr addr, uae_u32 w) { uae_u8 *m; addr -= z3fastmem_start & z3fastmem_mask; addr &= z3fastmem_mask; m = z3fastmem + addr; do_put_mem_word ((uae_u16 *)m, w); } static void REGPARAM2 z3fastmem_bput (uaecptr addr, uae_u32 b) { addr -= z3fastmem_start & z3fastmem_mask; addr &= z3fastmem_mask; z3fastmem[addr] = b; } static int REGPARAM2 z3fastmem_check (uaecptr addr, uae_u32 size) { addr -= z3fastmem_start & z3fastmem_mask; addr &= z3fastmem_mask; return (addr + size) <= allocated_z3fastmem; } static uae_u8 *REGPARAM2 z3fastmem_xlate (uaecptr addr) { addr -= z3fastmem_start & z3fastmem_mask; addr &= z3fastmem_mask; return z3fastmem + addr; } static uae_u32 REGPARAM2 z3fastmem2_lget (uaecptr addr) { uae_u8 *m; addr -= z3fastmem2_start & z3fastmem2_mask; addr &= z3fastmem2_mask; m = z3fastmem2 + addr; return do_get_mem_long ((uae_u32 *)m); } static uae_u32 REGPARAM2 z3fastmem2_wget (uaecptr addr) { uae_u8 *m; addr -= z3fastmem2_start & z3fastmem2_mask; addr &= z3fastmem2_mask; m = z3fastmem2 + addr; return do_get_mem_word ((uae_u16 *)m); } static uae_u32 REGPARAM2 z3fastmem2_bget (uaecptr addr) { addr -= z3fastmem2_start & z3fastmem2_mask; addr &= z3fastmem2_mask; return z3fastmem2[addr]; } static void REGPARAM2 z3fastmem2_lput (uaecptr addr, uae_u32 l) { uae_u8 *m; addr -= z3fastmem2_start & z3fastmem2_mask; addr &= z3fastmem2_mask; m = z3fastmem2 + addr; do_put_mem_long ((uae_u32 *)m, l); } static void REGPARAM2 z3fastmem2_wput (uaecptr addr, uae_u32 w) { uae_u8 *m; addr -= z3fastmem2_start & z3fastmem2_mask; addr &= z3fastmem2_mask; m = z3fastmem2 + addr; do_put_mem_word ((uae_u16 *)m, w); } static void REGPARAM2 z3fastmem2_bput (uaecptr addr, uae_u32 b) { addr -= z3fastmem2_start & z3fastmem2_mask; addr &= z3fastmem2_mask; z3fastmem2[addr] = b; } static int REGPARAM2 z3fastmem2_check (uaecptr addr, uae_u32 size) { addr -= z3fastmem2_start & z3fastmem2_mask; addr &= z3fastmem2_mask; return (addr + size) <= allocated_z3fastmem2; } static uae_u8 *REGPARAM2 z3fastmem2_xlate (uaecptr addr) { addr -= z3fastmem2_start & z3fastmem2_mask; addr &= z3fastmem2_mask; return z3fastmem2 + addr; } static uae_u32 REGPARAM2 z3chipmem_lget (uaecptr addr) { uae_u8 *m; addr -= z3chipmem_start & z3chipmem_mask; addr &= z3chipmem_mask; m = z3chipmem + addr; return do_get_mem_long ((uae_u32 *)m); } static uae_u32 REGPARAM2 z3chipmem_wget (uaecptr addr) { uae_u8 *m; addr -= z3chipmem_start & z3chipmem_mask; addr &= z3chipmem_mask; m = z3chipmem + addr; return do_get_mem_word ((uae_u16 *)m); } static uae_u32 REGPARAM2 z3chipmem_bget (uaecptr addr) { addr -= z3chipmem_start & z3chipmem_mask; addr &= z3chipmem_mask; return z3chipmem[addr]; } static void REGPARAM2 z3chipmem_lput (uaecptr addr, uae_u32 l) { uae_u8 *m; addr -= z3chipmem_start & z3chipmem_mask; addr &= z3chipmem_mask; m = z3chipmem + addr; do_put_mem_long ((uae_u32 *)m, l); } static void REGPARAM2 z3chipmem_wput (uaecptr addr, uae_u32 w) { uae_u8 *m; addr -= z3chipmem_start & z3chipmem_mask; addr &= z3chipmem_mask; m = z3chipmem + addr; do_put_mem_word ((uae_u16 *)m, w); } static void REGPARAM2 z3chipmem_bput (uaecptr addr, uae_u32 b) { addr -= z3chipmem_start & z3chipmem_mask; addr &= z3chipmem_mask; z3chipmem[addr] = b; } static int REGPARAM2 z3chipmem_check (uaecptr addr, uae_u32 size) { addr -= z3chipmem_start & z3chipmem_mask; addr &= z3chipmem_mask; return (addr + size) <= allocated_z3chipmem; } static uae_u8 *REGPARAM2 z3chipmem_xlate (uaecptr addr) { addr -= z3chipmem_start & z3chipmem_mask; addr &= z3chipmem_mask; return z3chipmem + addr; } addrbank z3fastmem_bank = { z3fastmem_lget, z3fastmem_wget, z3fastmem_bget, z3fastmem_lput, z3fastmem_wput, z3fastmem_bput, z3fastmem_xlate, z3fastmem_check, NULL, _T("ZorroIII Fast RAM"), z3fastmem_lget, z3fastmem_wget, ABFLAG_RAM }; addrbank z3fastmem2_bank = { z3fastmem2_lget, z3fastmem2_wget, z3fastmem2_bget, z3fastmem2_lput, z3fastmem2_wput, z3fastmem2_bput, z3fastmem2_xlate, z3fastmem2_check, NULL, _T("ZorroIII Fast RAM #2"), z3fastmem2_lget, z3fastmem2_wget, ABFLAG_RAM }; addrbank z3chipmem_bank = { z3chipmem_lget, z3chipmem_wget, z3chipmem_bget, z3chipmem_lput, z3chipmem_wput, z3chipmem_bput, z3chipmem_xlate, z3chipmem_check, NULL, _T("MegaChipRAM"), z3chipmem_lget, z3chipmem_wget, ABFLAG_RAM }; /* Z3-based UAEGFX-card */ uae_u32 gfxmem_mask; /* for memory.c */ uae_u8 *gfxmemory; uae_u32 gfxmem_start; /* ********************************************************** */ /* * Expansion Card (ZORRO II) for 1/2/4/8 MB of Fast Memory */ static void expamem_map_fastcard (void) { fastmem_start = ((expamem_hi | (expamem_lo >> 4)) << 16); if (fastmem_start) { map_banks (&fastmem_bank, fastmem_start >> 16, allocated_fastmem >> 16, 0); write_log (_T("Fastcard: mapped @$%lx: %dMB fast memory\n"), fastmem_start, allocated_fastmem >> 20); } } static void expamem_init_fastcard (void) { uae_u16 mid = (currprefs.cs_a2091 || currprefs.uae_hide) ? commodore : uae_id; uae_u8 pid = (currprefs.cs_a2091 || currprefs.uae_hide) ? commodore_a2091_ram : 1; expamem_init_clear (); if (allocated_fastmem == 0x100000) expamem_write (0x00, Z2_MEM_1MB + add_memory + zorroII); else if (allocated_fastmem == 0x200000) expamem_write (0x00, Z2_MEM_2MB + add_memory + zorroII); else if (allocated_fastmem == 0x400000) expamem_write (0x00, Z2_MEM_4MB + add_memory + zorroII); else if (allocated_fastmem == 0x800000) expamem_write (0x00, Z2_MEM_8MB + add_memory + zorroII); expamem_write (0x08, care_addr); expamem_write (0x04, pid); expamem_write (0x10, mid >> 8); expamem_write (0x14, mid & 0xff); 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 (0x24, 0x01); /* ser.no. Byte 3 */ expamem_write (0x28, 0x00); /* Rom-Offset hi */ expamem_write (0x2c, 0x00); /* ROM-Offset lo */ expamem_write (0x40, 0x00); /* Ctrl/Statusreg.*/ } /* ********************************************************** */ #ifdef FILESYS /* * Filesystem device */ static void expamem_map_filesys (void) { uaecptr a; filesys_start = ((expamem_hi | (expamem_lo >> 4)) << 16); map_banks (&filesys_bank, filesys_start >> 16, 1, 0); write_log (_T("Filesystem: mapped memory @$%lx.\n"), filesys_start); /* 68k code needs to know this. */ a = here (); org (rtarea_base + RTAREA_FSBOARD); dl (filesys_start + 0x2000); org (a); } static void expamem_init_filesys (void) { /* struct DiagArea - the size has to be large enough to store several device ROMTags */ uae_u8 diagarea[] = { 0x90, 0x00, /* da_Config, da_Flags */ 0x02, 0x00, /* da_Size */ 0x01, 0x00, /* da_DiagPoint */ 0x01, 0x06 /* da_BootPoint */ }; expamem_init_clear (); expamem_write (0x00, Z2_MEM_64KB | rom_card | zorroII); expamem_write (0x08, no_shutup); expamem_write (0x04, currprefs.maprom ? 2 : 82); expamem_write (0x10, uae_id >> 8); expamem_write (0x14, uae_id & 0xff); 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 (0x24, 0x01); /* ser.no. Byte 3 */ /* er_InitDiagVec */ expamem_write (0x28, 0x10); /* Rom-Offset hi */ expamem_write (0x2c, 0x00); /* ROM-Offset lo */ expamem_write (0x40, 0x00); /* Ctrl/Statusreg.*/ /* Build a DiagArea */ memcpy (expamem + 0x1000, diagarea, sizeof diagarea); /* Call DiagEntry */ do_put_mem_word ((uae_u16 *)(expamem + 0x1100), 0x4EF9); /* JMP */ do_put_mem_long ((uae_u32 *)(expamem + 0x1102), ROM_filesys_diagentry); /* What comes next is a plain bootblock */ do_put_mem_word ((uae_u16 *)(expamem + 0x1106), 0x4EF9); /* JMP */ do_put_mem_long ((uae_u32 *)(expamem + 0x1108), EXPANSION_bootcode); memcpy (filesysory, expamem, 0x3000); } #endif /* * Zorro III expansion memory */ static void expamem_map_z3fastmem_2 (addrbank *bank, uaecptr *startp, uae_u32 size, uae_u32 allocated, int chip) { int z3fs = ((expamem_hi | (expamem_lo >> 4)) << 16); int start = *startp; if (z3fs) { if (start != z3fs) { write_log (_T("WARNING: Z3MEM mapping changed from $%08x to $%08x\n"), start, z3fs); map_banks (&dummy_bank, start >> 16, size >> 16, allocated); *startp = z3fs; map_banks (bank, start >> 16, size >> 16, allocated); } write_log (_T("Z3MEM (32bit): mapped @$%08x: %d MB Zorro III %s memory \n"), start, allocated / 0x100000, chip ? _T("chip") : _T("fast")); } } static void expamem_map_z3fastmem (void) { expamem_map_z3fastmem_2 (&z3fastmem_bank, &z3fastmem_start, currprefs.z3fastmem_size, allocated_z3fastmem, 0); } static void expamem_map_z3fastmem2 (void) { expamem_map_z3fastmem_2 (&z3fastmem2_bank, &z3fastmem2_start, currprefs.z3fastmem2_size, allocated_z3fastmem2, 0); } static void expamem_init_z3fastmem_2 (addrbank *bank, uae_u32 start, uae_u32 size, uae_u32 allocated) { int code = (allocated == 0x100000 ? Z2_MEM_1MB : allocated == 0x200000 ? Z2_MEM_2MB : allocated == 0x400000 ? Z2_MEM_4MB : allocated == 0x800000 ? Z2_MEM_8MB : allocated == 0x1000000 ? Z3_MEM_16MB : allocated == 0x2000000 ? Z3_MEM_32MB : allocated == 0x4000000 ? Z3_MEM_64MB : allocated == 0x8000000 ? Z3_MEM_128MB : allocated == 0x10000000 ? Z3_MEM_256MB : allocated == 0x20000000 ? Z3_MEM_512MB : Z3_MEM_1GB); int subsize = (allocated == 0x100000 ? Z3_SS_MEM_1MB : allocated == 0x200000 ? Z3_SS_MEM_2MB : allocated == 0x400000 ? Z3_SS_MEM_4MB : allocated == 0x800000 ? Z3_SS_MEM_8MB : Z3_SS_MEM_SAME); if (allocated < 0x1000000) code = Z3_MEM_16MB; /* Z3 physical board size is always at least 16M */ expamem_init_clear (); expamem_write (0x00, add_memory | zorroIII | code); expamem_write (0x08, care_addr | force_z3 | (allocated > 0x800000 ? ext_size : subsize)); expamem_write (0x04, currprefs.maprom ? 3 : 83); expamem_write (0x10, uae_id >> 8); expamem_write (0x14, uae_id & 0xff); 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 (0x24, 0x01); /* ser.no. Byte 3 */ expamem_write (0x28, 0x00); /* Rom-Offset hi */ expamem_write (0x2c, 0x00); /* ROM-Offset lo */ expamem_write (0x40, 0x00); /* Ctrl/Statusreg.*/ map_banks (bank, start >> 16, size >> 16, allocated); } static void expamem_init_z3fastmem (void) { expamem_init_z3fastmem_2 (&z3fastmem_bank, z3fastmem_start, currprefs.z3fastmem_size, allocated_z3fastmem); } static void expamem_init_z3fastmem2 (void) { expamem_init_z3fastmem_2 (&z3fastmem2_bank, z3fastmem2_start, currprefs.z3fastmem2_size, allocated_z3fastmem2); } #ifdef PICASSO96 /* * Fake Graphics Card (ZORRO III) - BDK */ uaecptr p96ram_start; static void expamem_map_gfxcard (void) { gfxmem_start = (expamem_hi | (expamem_lo >> 4)) << 16; if (gfxmem_start) { map_banks (&gfxmem_bank, gfxmem_start >> 16, allocated_gfxmem >> 16, allocated_gfxmem); write_log (_T("%sUAEGFX-card: mapped @$%lx, %d MB RTG RAM\n"), currprefs.rtgmem_type ? _T("Z3") : _T("Z2"), gfxmem_start, allocated_gfxmem / 0x100000); } } static void expamem_init_gfxcard (bool z3) { int code = (allocated_gfxmem == 0x100000 ? Z2_MEM_1MB : allocated_gfxmem == 0x200000 ? Z2_MEM_2MB : allocated_gfxmem == 0x400000 ? Z2_MEM_4MB : allocated_gfxmem == 0x800000 ? Z2_MEM_8MB : allocated_gfxmem == 0x1000000 ? Z3_MEM_16MB : allocated_gfxmem == 0x2000000 ? Z3_MEM_32MB : allocated_gfxmem == 0x4000000 ? Z3_MEM_64MB : allocated_gfxmem == 0x8000000 ? Z3_MEM_128MB : allocated_gfxmem == 0x10000000 ? Z3_MEM_256MB : allocated_gfxmem == 0x20000000 ? Z3_MEM_512MB : Z3_MEM_1GB); int subsize = (allocated_gfxmem == 0x100000 ? Z3_SS_MEM_1MB : allocated_gfxmem == 0x200000 ? Z3_SS_MEM_2MB : allocated_gfxmem == 0x400000 ? Z3_SS_MEM_4MB : allocated_gfxmem == 0x800000 ? Z3_SS_MEM_8MB : Z3_SS_MEM_SAME); if (allocated_gfxmem < 0x1000000 && z3) code = Z3_MEM_16MB; /* Z3 physical board size is always at least 16M */ expamem_init_clear (); expamem_write (0x00, (z3 ? zorroIII : zorroII) | code); expamem_write (0x08, care_addr | (z3 ? (force_z3 | (allocated_gfxmem > 0x800000 ? ext_size: subsize)) : 0)); expamem_write (0x04, 96); expamem_write (0x10, uae_id >> 8); expamem_write (0x14, uae_id & 0xff); 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 (0x24, 0x01); /* ser.no. Byte 3 */ expamem_write (0x28, 0x00); /* ROM-Offset hi */ expamem_write (0x2c, 0x00); /* ROM-Offset lo */ expamem_write (0x40, 0x00); /* Ctrl/Statusreg.*/ } static void expamem_init_gfxcard_z3 (void) { expamem_init_gfxcard (true); } static void expamem_init_gfxcard_z2 (void) { expamem_init_gfxcard (false); } #endif #ifdef SAVESTATE static size_t fast_filepos, z3_filepos, z3_filepos2, z3_fileposchip, p96_filepos; #endif void free_fastmemory (void) { if (fastmemory) mapped_free (fastmemory); fastmemory = 0; } static bool mapped_malloc_dynamic (uae_u32 *currpsize, uae_u32 *changedpsize, uae_u8 **memory, uae_u32 *allocated, uae_u32 *mask, int max, const TCHAR *name) { int alloc = *currpsize; *allocated = 0; *memory = NULL; *mask = 0; if (!alloc) return false; while (alloc >= max * 1024 * 1024) { uae_u8 *mem = mapped_malloc (alloc, name); if (mem) { *memory = mem; *currpsize = alloc; *changedpsize = alloc; *mask = alloc - 1; *allocated = alloc; return true; } write_log (_T("Out of memory for %s, %d bytes.\n"), name, alloc); alloc /= 2; } return false; } static void allocate_expamem (void) { currprefs.fastmem_size = changed_prefs.fastmem_size; currprefs.fastmem2_size = changed_prefs.fastmem2_size; currprefs.z3fastmem_size = changed_prefs.z3fastmem_size; currprefs.z3fastmem2_size = changed_prefs.z3fastmem2_size; currprefs.rtgmem_size = changed_prefs.rtgmem_size; currprefs.rtgmem_type = changed_prefs.rtgmem_type; currprefs.z3chipmem_size = changed_prefs.z3chipmem_size; z3chipmem_start = currprefs.z3fastmem_start; z3fastmem_start = currprefs.z3fastmem_start; if (currprefs.z3chipmem_size) z3fastmem_start += currprefs.z3chipmem_size + 16 * 1024 * 1024; z3fastmem2_start = z3fastmem_start + currprefs.z3fastmem_size; if (allocated_fastmem != currprefs.fastmem_size) { free_fastmemory (); allocated_fastmem = currprefs.fastmem_size; fastmem_mask = allocated_fastmem - 1; if (allocated_fastmem) { fastmemory = mapped_malloc (allocated_fastmem, _T("fast")); if (fastmemory == 0) { write_log (_T("Out of memory for fastmem card.\n")); allocated_fastmem = 0; } } memory_hardreset (1); } if (allocated_z3fastmem != currprefs.z3fastmem_size) { if (z3fastmem) mapped_free (z3fastmem); mapped_malloc_dynamic (&currprefs.z3fastmem_size, &changed_prefs.z3fastmem_size, &z3fastmem, &allocated_z3fastmem, &z3fastmem_mask, 1, _T("z3")); memory_hardreset (1); } if (allocated_z3fastmem2 != currprefs.z3fastmem2_size) { if (z3fastmem2) mapped_free (z3fastmem2); z3fastmem2 = 0; allocated_z3fastmem2 = currprefs.z3fastmem2_size; z3fastmem2_mask = allocated_z3fastmem2 - 1; if (allocated_z3fastmem2) { z3fastmem2 = mapped_malloc (allocated_z3fastmem2, _T("z3_2")); if (z3fastmem2 == 0) { write_log (_T("Out of memory for 32 bit fast memory #2.\n")); allocated_z3fastmem2 = 0; } } memory_hardreset (1); } if (allocated_z3chipmem != currprefs.z3chipmem_size) { if (z3chipmem) mapped_free (z3chipmem); mapped_malloc_dynamic (&currprefs.z3chipmem_size, &changed_prefs.z3chipmem_size, &z3chipmem, &allocated_z3chipmem, &z3chipmem_mask, 16, _T("z3_chip")); memory_hardreset (1); } #ifdef PICASSO96 if (allocated_gfxmem != currprefs.rtgmem_size) { if (gfxmemory) mapped_free (gfxmemory); mapped_malloc_dynamic (&currprefs.rtgmem_size, &changed_prefs.rtgmem_size, &gfxmemory, &allocated_gfxmem, &gfxmem_mask, 1, currprefs.rtgmem_type ? _T("z3_gfx") : _T("z2_gfx")); memory_hardreset (1); } #endif z3fastmem_bank.baseaddr = z3fastmem; z3fastmem2_bank.baseaddr = z3fastmem2; z3chipmem_bank.baseaddr = z3chipmem; fastmem_bank.baseaddr = fastmemory; #ifdef PICASSO96 gfxmem_bank.baseaddr = gfxmemory; #endif #ifdef SAVESTATE if (savestate_state == STATE_RESTORE) { if (allocated_fastmem > 0) { restore_ram (fast_filepos, fastmemory); map_banks (&fastmem_bank, fastmem_start >> 16, currprefs.fastmem_size >> 16, allocated_fastmem); } if (allocated_z3fastmem > 0) { restore_ram (z3_filepos, z3fastmem); map_banks (&z3fastmem_bank, z3fastmem_start >> 16, currprefs.z3fastmem_size >> 16, allocated_z3fastmem); } if (allocated_z3fastmem2 > 0) { restore_ram (z3_filepos2, z3fastmem2); map_banks (&z3fastmem2_bank, z3fastmem2_start >> 16, currprefs.z3fastmem2_size >> 16, allocated_z3fastmem2); } if (allocated_z3chipmem > 0) { restore_ram (z3_fileposchip, z3chipmem); map_banks (&z3chipmem_bank, z3chipmem_start >> 16, currprefs.z3chipmem_size >> 16, allocated_z3fastmem2); } #ifdef PICASSO96 if (allocated_gfxmem > 0 && gfxmem_start > 0) { restore_ram (p96_filepos, gfxmemory); map_banks (&gfxmem_bank, gfxmem_start >> 16, currprefs.rtgmem_size >> 16, allocated_gfxmem); } #endif } #endif /* SAVESTATE */ } static uaecptr check_boot_rom (void) { uaecptr b = RTAREA_DEFAULT; addrbank *ab; if (currprefs.cs_cdtvcd || currprefs.cs_cdtvscsi || currprefs.uae_hide > 1) b = RTAREA_BACKUP; if (currprefs.cs_mbdmac == 1) b = RTAREA_BACKUP; ab = &get_mem_bank (RTAREA_DEFAULT); if (ab) { if (valid_address (RTAREA_DEFAULT, 65536)) b = RTAREA_BACKUP; } if (nr_directory_units (NULL)) return b; if (nr_directory_units (&currprefs)) return b; if (currprefs.socket_emu) return b; if (currprefs.uaeserial) return b; if (currprefs.scsi == 1) return b; if (currprefs.sana2) return b; if (currprefs.input_tablet > 0) return b; if (currprefs.rtgmem_size) return b; if (currprefs.win32_automount_removable) return b; if (currprefs.chipmem_size > 2 * 1024 * 1024) return b; if (currprefs.z3chipmem_size) return b; return 0; } uaecptr need_uae_boot_rom (void) { uaecptr v; uae_boot_rom = 0; v = check_boot_rom (); if (v) uae_boot_rom = 1; if (!rtarea_base) { uae_boot_rom = 0; v = 0; } return v; } static void expamem_init_a2065 (void) { #ifdef A2065 a2065_init (); #endif } static void expamem_init_cdtv (void) { #ifdef CDTV cdtv_init (); #endif } static void expamem_init_a2091 (void) { #ifdef A2091 a2091_init (); #endif } static void expamem_init_a4091 (void) { #ifdef NCR ncr_init (); #endif } #if 0 void p96memstart (void) { /* make sure there is always empty space between Z3 and P96 RAM */ p96ram_start = currprefs.z3fastmem_start + ((currprefs.z3fastmem_size + currprefs.z3fastmem2_size + currprefs.z3chipmem_size + 0xffffff) & ~0xffffff); if (p96ram_start == currprefs.z3fastmem_start + currprefs.z3fastmem_size + currprefs.z3fastmem2_size + currprefs.z3chipmem_size && (currprefs.z3fastmem_size + currprefs.z3fastmem2_size + currprefs.z3chipmem_size < 512 * 1024 * 1024 || currprefs.rtgmem_size < 128 * 1024 * 1024)) p96ram_start += 0x1000000; } #endif void expamem_reset (void) { int do_mount = 1; ecard = 0; cardno = 0; if (currprefs.uae_hide) uae_id = commodore; else uae_id = hackers_id; allocate_expamem (); expamem_bank.name = _T("Autoconfig [reset]"); /* check if Kickstart version is below 1.3 */ if (kickstart_version && do_mount && (/* Kickstart 1.0 & 1.1! */ kickstart_version == 0xFFFF /* Kickstart < 1.3 */ || kickstart_version < 34)) { /* warn user */ write_log (_T("Kickstart version is below 1.3! Disabling automount devices.\n")); do_mount = 0; } if (need_uae_boot_rom () == 0) do_mount = 0; if (fastmemory != NULL && currprefs.chipmem_size <= 2 * 1024 * 1024) { if (currprefs.fastmem_autoconfig) { fastmem_bank.name = _T("Fast memory"); card_name[cardno] = _T("Z2Fast"); card_init[cardno] = expamem_init_fastcard; card_map[cardno++] = expamem_map_fastcard; } else { fastmem_bank.name = _T("Fast memory (non-autoconfig)"); map_banks (&fastmem_bank, 0x00200000 >> 16, allocated_fastmem >> 16, 0); } } #ifdef CDTV if (currprefs.cs_cdtvcd) { card_name[cardno] = _T("CDTV DMAC"); card_init[cardno] = expamem_init_cdtv; card_map[cardno++] = NULL; } #endif #ifdef CD32 if (currprefs.cs_cd32cd && currprefs.fastmem_size == 0 && currprefs.chipmem_size <= 0x200000) { int ids[] = { 23, -1 }; struct romlist *rl = getromlistbyids (ids); if (rl && !_tcscmp (rl->path, currprefs.cartfile)) { card_name[cardno] = _T("CD32MPEG"); card_init[cardno] = expamem_init_cd32fmv; card_map[cardno++] = expamem_map_cd32fmv; } } #endif #ifdef A2091 if (currprefs.cs_a2091) { card_name[cardno] = _T("A2091"); card_init[cardno] = expamem_init_a2091; card_map[cardno++] = NULL; } #endif #ifdef A2065 if (currprefs.a2065name[0]) { card_name[cardno] = _T("A2065"); card_init[cardno] = expamem_init_a2065; card_map[cardno++] = NULL; } #endif #ifdef FILESYS if (do_mount) { card_name[cardno] = _T("UAEFS"); card_init[cardno] = expamem_init_filesys; card_map[cardno++] = expamem_map_filesys; } #endif #ifdef CATWEASEL if (currprefs.catweasel && catweasel_init ()) { card_name[cardno] = _T("CWMK2"); card_init[cardno] = expamem_init_catweasel; card_map[cardno++] = expamem_map_catweasel; } #endif #ifdef PICASSO96 if (!currprefs.rtgmem_type && gfxmemory != NULL) { card_name[cardno] = _T("Z2RTG"); card_init[cardno] = expamem_init_gfxcard_z2; card_map[cardno++] = expamem_map_gfxcard; } #endif /* Z3 boards last */ if (z3fastmem != NULL) { z3num = 0; card_name[cardno] = _T("Z3Fast"); card_init[cardno] = expamem_init_z3fastmem; card_map[cardno++] = expamem_map_z3fastmem; map_banks (&z3fastmem_bank, z3fastmem_start >> 16, currprefs.z3fastmem_size >> 16, allocated_z3fastmem); if (z3fastmem2 != NULL) { card_name[cardno] = _T("Z3Fast2"); card_init[cardno] = expamem_init_z3fastmem2; card_map[cardno++] = expamem_map_z3fastmem2; map_banks (&z3fastmem2_bank, z3fastmem2_start >> 16, currprefs.z3fastmem2_size >> 16, allocated_z3fastmem2); } } if (z3chipmem != NULL) map_banks (&z3chipmem_bank, z3chipmem_start >> 16, currprefs.z3chipmem_size >> 16, allocated_z3chipmem); #ifdef NCR if (currprefs.cs_a4091) { card_name[cardno] = _T("A4091"); card_init[cardno] = expamem_init_a4091; card_map[cardno++] = NULL; } #endif #ifdef PICASSO96 if (currprefs.rtgmem_type && gfxmemory != NULL) { card_name[cardno] = _T("Z3RTG"); card_init[cardno] = expamem_init_gfxcard_z3; card_map[cardno++] = expamem_map_gfxcard; } #endif if (cardno > 0 && cardno < MAX_EXPANSION_BOARDS) { card_name[cardno] = _T("Empty"); card_init[cardno] = expamem_init_last; card_map[cardno++] = expamem_map_clear; } if (cardno == 0 || savestate_state) expamem_init_clear_zero (); else (*card_init[0]) (); } void expansion_init (void) { if (savestate_state != STATE_RESTORE) { allocated_fastmem = 0; fastmem_mask = fastmem_start = 0; fastmemory = 0; #ifdef PICASSO96 allocated_gfxmem = 0; gfxmem_mask = gfxmem_start = 0; gfxmemory = 0; #endif #ifdef CATWEASEL catweasel_mask = catweasel_start = 0; #endif allocated_z3fastmem = 0; z3fastmem_mask = z3fastmem_start = 0; z3fastmem = 0; allocated_z3fastmem2 = 0; z3fastmem2_mask = z3fastmem2_start = 0; z3fastmem2 = 0; allocated_z3chipmem = 0; z3chipmem_mask = z3chipmem_start = 0; z3chipmem = 0; } #ifdef FILESYS filesys_start = 0; filesysory = 0; #endif allocate_expamem (); #ifdef FILESYS filesysory = mapped_malloc (0x10000, _T("filesys")); if (!filesysory) { write_log (_T("virtual memory exhausted (filesysory)!\n")); exit (0); } filesys_bank.baseaddr = filesysory; #endif } void expansion_cleanup (void) { if (fastmemory) mapped_free (fastmemory); fastmemory = 0; if (z3fastmem) mapped_free (z3fastmem); z3fastmem = 0; if (z3fastmem2) mapped_free (z3fastmem2); z3fastmem2 = 0; if (z3chipmem) mapped_free (z3chipmem); z3chipmem = 0; #ifdef PICASSO96 if (gfxmemory) mapped_free (gfxmemory); gfxmemory = 0; #endif #ifdef FILESYS if (filesysory) mapped_free (filesysory); filesysory = 0; #endif #ifdef CATWEASEL catweasel_free (); #endif } void expansion_clear (void) { if (fastmemory) memset (fastmemory, 0, allocated_fastmem); if (z3fastmem) memset (z3fastmem, 0, allocated_z3fastmem > 0x800000 ? 0x800000 : allocated_z3fastmem); if (z3fastmem2) memset (z3fastmem2, 0, allocated_z3fastmem2 > 0x800000 ? 0x800000 : allocated_z3fastmem2); if (z3chipmem) memset (z3chipmem, 0, allocated_z3chipmem > 0x800000 ? 0x800000 : allocated_z3chipmem); if (gfxmemory) memset (gfxmemory, 0, allocated_gfxmem); } #ifdef SAVESTATE /* State save/restore code. */ uae_u8 *save_fram (int *len) { *len = allocated_fastmem; return fastmemory; } uae_u8 *save_zram (int *len, int num) { if (num < 0) { *len = allocated_z3chipmem; return z3chipmem; } *len = num ? allocated_z3fastmem2 : allocated_z3fastmem; return num ? z3fastmem2 : z3fastmem; } uae_u8 *save_pram (int *len) { *len = allocated_gfxmem; return gfxmemory; } void restore_fram (int len, size_t filepos) { fast_filepos = filepos; changed_prefs.fastmem_size = len; } void restore_zram (int len, size_t filepos, int num) { if (num == -1) { z3_fileposchip = filepos; changed_prefs.z3chipmem_size = len; } else if (num == 1) { z3_filepos2 = filepos; changed_prefs.z3fastmem2_size = len; } else { z3_filepos = filepos; changed_prefs.z3fastmem_size = len; } } void restore_pram (int len, size_t filepos) { p96_filepos = filepos; changed_prefs.rtgmem_size = len; } uae_u8 *save_expansion (int *len, uae_u8 *dstptr) { static uae_u8 t[20]; uae_u8 *dst = t, *dstbak = t; if (dstptr) dst = dstbak = dstptr; save_u32 (fastmem_start); save_u32 (z3fastmem_start); save_u32 (gfxmem_start); save_u32 (rtarea_base); *len = 4 + 4 + 4 + 4; return dstbak; } uae_u8 *restore_expansion (uae_u8 *src) { fastmem_start = restore_u32 (); z3fastmem_start = restore_u32 (); gfxmem_start = restore_u32 (); rtarea_base = restore_u32 (); if (rtarea_base != 0 && rtarea_base != RTAREA_DEFAULT && rtarea_base != RTAREA_BACKUP) rtarea_base = 0; return src; } #endif /* SAVESTATE */ fs-uae-2.2.3+dfsg/src/specialmonitors.cpp0000644000175000017500000002730012162366655020565 0ustar glaubitzglaubitz#include "sysconfig.h" #include "sysdeps.h" #include #include #include "options.h" #include "xwin.h" #include "custom.h" static bool automatic; static int monitor; extern unsigned int bplcon0; static uae_u8 graffiti_palette[256 * 4]; STATIC_INLINE bool FR(struct vidbuffer *src, uae_u8 *dataline) { if (src->pixbytes == 4) return (dataline[2] & 0x80) != 0; else return ((dataline[1] >> 7) & 1) != 0; } STATIC_INLINE bool FG(struct vidbuffer *src, uae_u8 *dataline) { if (src->pixbytes == 4) return (dataline[1] & 0x80) != 0; else return ((dataline[1] >> 2) & 1) != 0; } STATIC_INLINE bool FB(struct vidbuffer *src, uae_u8 *dataline) { if (src->pixbytes == 4) return (dataline[0] & 0x80) != 0; else return ((dataline[0] >> 4) & 1) != 0; } STATIC_INLINE bool FI(struct vidbuffer *src, uae_u8 *dataline) { if (src->pixbytes == 4) return (dataline[0] & 0x10) != 0; else return ((dataline[0] >> 1) & 1) != 0; } STATIC_INLINE void PRGB(struct vidbuffer *dst, uae_u8 *dataline, uae_u8 r, uae_u8 g, uae_u8 b) { if (dst->pixbytes == 4) { dataline[0] = b; dataline[1] = g; dataline[2] = r; } else { r >>= 3; g >>= 2; b >>= 3; ((uae_u16*)dataline)[0] = (r << 11) | (g << 5) | b; } } static void clearmonitor(struct vidbuffer *dst) { uae_u8 *p = dst->bufmem; for (int y = 0; y < dst->height_allocated; y++) { memset(p, 0, dst->width_allocated * dst->pixbytes); p += dst->rowbytes; } } static bool graffiti(struct vidbuffer *src, struct vidbuffer *dst) { int y, x; int ystart, yend, isntsc; int xstart, xend; uae_u8 *srcbuf, *srcend; uae_u8 *dstbuf; bool command, hires, found; int xadd, xpixadd, extrapix; int waitline = 0, dbl; uae_u8 read_mask = 0xff, color = 0, color2 = 0; if (!(bplcon0 & 0x0100)) // GAUD return false; command = true; found = false; isntsc = (beamcon0 & 0x20) ? 0 : 1; if (!(currprefs.chipset_mask & CSMASK_ECS_AGNUS)) isntsc = currprefs.ntscmode ? 1 : 0; dbl = gfxvidinfo.ychange == 1 ? 2 : 1; ystart = isntsc ? VBLANK_ENDLINE_NTSC : VBLANK_ENDLINE_PAL; yend = isntsc ? MAXVPOS_NTSC : MAXVPOS_PAL; if (src->yoffset >= (ystart << VRES_MAX)) ystart = src->yoffset >> VRES_MAX; xadd = gfxvidinfo.xchange == 1 ? src->pixbytes * 2 : src->pixbytes; xpixadd = gfxvidinfo.xchange == 1 ? 4 : 2; xstart = 0x1c * 2 + 1; xend = 0xf0 * 2 + 1; srcbuf = src->bufmem + (((ystart << VRES_MAX) - src->yoffset) / gfxvidinfo.ychange) * src->rowbytes + (((xstart << RES_MAX) - src->xoffset) / gfxvidinfo.xchange) * src->pixbytes; srcend = src->bufmem + (((yend << VRES_MAX) - src->yoffset) / gfxvidinfo.ychange) * src->rowbytes; extrapix = 0; dstbuf = dst->bufmem + (((ystart << VRES_MAX) - src->yoffset) / gfxvidinfo.ychange) * dst->rowbytes + (((xstart << RES_MAX) - src->xoffset) / gfxvidinfo.xchange) * dst->pixbytes; y = 0; while (srcend > srcbuf && dst->bufmemend > dstbuf) { uae_u8 *srcp = srcbuf + extrapix; uae_u8 *dstp = dstbuf; x = xstart; while (x < xend) { uae_u8 mask = 0x80; uae_u8 chunky[4] = { 0, 0, 0, 0 }; while (mask) { if (FR(src, srcp)) // R chunky[3] |= mask; if (FG(src, srcp)) // G chunky[2] |= mask; if (FB(src, srcp)) // B chunky[1] |= mask; if (FI(src, srcp)) // I chunky[0] |= mask; srcp += xadd; mask >>= 1; } if (command) { if (chunky[0] || chunky[1] || chunky[2] || chunky[3] || found) { for (int pix = 0; pix < 2; pix++) { uae_u8 cmd = chunky[pix * 2 + 0]; uae_u8 parm = chunky[pix * 2 + 1]; #if 0 //if (cmd != 0) write_log(_T("X=%d Y=%d %02x = %02x (%d %d)\n"), x, y, cmd, parm, color, color2); #endif if (automatic && cmd >= 0x40) return false; if (cmd != 0) found = true; if (cmd & 8) { command = false; dbl = 1; waitline = 2; if (cmd & 16) { hires = true; xadd /= 2; xpixadd /= 2; extrapix = -4 * src->pixbytes; } else { hires = false; } if (xpixadd == 0) // shres needed return false; if (monitor != MONITOREMU_GRAFFITI) clearmonitor(dst); } else if (cmd & 4) { if ((cmd & 3) == 1) { read_mask = parm; } else if ((cmd & 3) == 2) { graffiti_palette[color * 4 + color2] = (parm << 2) | (parm & 3); color2++; if (color2 == 3) { color2 = 0; color++; } } else if ((cmd & 3) == 0) { color = parm; color2 = 0; } } } } memset(dstp, 0, dst->pixbytes * 4 * 2); dstp += dst->pixbytes * 4 * 2; } else if (waitline) { memset(dstp, 0, dst->pixbytes * 4 * 2); dstp += dst->pixbytes * 4 * 2; } else { for (int pix = 0; pix < 4; pix++) { uae_u8 r, g, b, c; c = chunky[pix] & read_mask; r = graffiti_palette[c * 4 + 0]; g = graffiti_palette[c * 4 + 1]; b = graffiti_palette[c * 4 + 2]; PRGB(dst, dstp, r, g, b); dstp += dst->pixbytes; PRGB(dst, dstp, r, g, b); dstp += dst->pixbytes; if (gfxvidinfo.xchange == 1 && !hires) { PRGB(dst, dstp, r, g, b); dstp += dst->pixbytes; PRGB(dst, dstp, r, g, b); dstp += dst->pixbytes; } } } x += xpixadd; } y++; srcbuf += src->rowbytes * dbl; dstbuf += dst->rowbytes * dbl; if (waitline > 0) waitline--; } dst->nativepositioning = true; if (monitor != MONITOREMU_GRAFFITI) { monitor = MONITOREMU_GRAFFITI; write_log (_T("GRAFFITI %s mode\n"), hires ? _T("hires") : _T("lores")); } return true; } /* A2024 information comes from US patent 4851826 */ static bool a2024(struct vidbuffer *src, struct vidbuffer *dst) { int y; uae_u8 *srcbuf, *dstbuf; uae_u8 *dataline; int px, py, doff, pxcnt, dbl; int panel_width, panel_width_draw, panel_height, srcxoffset; bool f64, interlace, expand, wpb, less16; uae_u8 enp, dpl; bool hires, ntsc, found; int idline; int total_width, total_height; dbl = gfxvidinfo.ychange == 1 ? 2 : 1; doff = (128 * 2 / gfxvidinfo.xchange) * src->pixbytes; found = false; for (idline = 21; idline <= 29; idline += 8) { if (src->yoffset > (idline << VRES_MAX)) continue; // min 178 max 234 dataline = src->bufmem + (((idline << VRES_MAX) - src->yoffset) / gfxvidinfo.ychange) * src->rowbytes + (((200 << RES_MAX) - src->xoffset) / gfxvidinfo.xchange) * src->pixbytes; #if 0 write_log (_T("%02x%02x%02x %02x%02x%02x %02x%02x%02x %02x%02x%02x\n"), dataline[0 * doff + 0], dataline[0 * doff + 1], dataline[0 * doff + 2], dataline[1 * doff + 0], dataline[1 * doff + 1], dataline[1 * doff + 2], dataline[2 * doff + 0], dataline[2 * doff + 1], dataline[2 * doff + 2], dataline[3 * doff + 0], dataline[3 * doff + 1], dataline[3 * doff + 2]); #endif if (FB(src, &dataline[0 * doff])) // 0:B = 0 continue; if (!FI(src, &dataline[0 * doff])) // 0:I = 1 continue; if (FI(src, &dataline[2 * doff])) // 2:I = 0 continue; if (!FI(src, &dataline[3 * doff])) // 3:I = 1 continue; ntsc = idline < 26; found = true; break; } if (!found) return false; px = py = 0; if (FB(src, &dataline[1 * doff])) // 1:B FN2 px |= 2; if (FG(src, &dataline[1 * doff])) // 1:G FN1 px |= 1; if (FR(src, &dataline[1 * doff])) // 1:R FN0 py |= 1; f64 = FR(src, &dataline[0 * doff]) != 0; // 0:R interlace = FG(src, &dataline[0 * doff]) != 0; // 0:G (*Always zero) expand = FI(src, &dataline[1 * doff]) != 0; // 1:I (*Always set) enp = FR(src, &dataline[2 * doff]) ? 1 : 0; // 2:R (*ENP=3) enp |= FG(src, &dataline[2 * doff]) ? 2 : 0; // 2:G wpb = FB(src, &dataline[2 * doff]) != 0; // 2:B (*Always zero) dpl = FR(src, &dataline[3 * doff]) ? 1 : 0; // 3:R (*DPL=3) dpl |= FG(src, &dataline[3 * doff]) ? 2 : 0; // 3:G less16 = FB(src, &dataline[3 * doff]) != 0; // 3:B /* (*) = AOS A2024 driver static bits. Not yet implemented in emulation. */ if (f64) { panel_width = 336; panel_width_draw = px == 2 ? 352 : 336; pxcnt = 3; hires = false; srcxoffset = 113; if (px > 2) return false; total_width = 336 + 336 + 352; } else { panel_width = 512; panel_width_draw = 512; pxcnt = 2; hires = true; srcxoffset = 129; if (px > 1) return false; total_width = 512 + 512; } panel_height = ntsc ? 400 : 512; if (monitor != MONITOREMU_A2024) { clearmonitor(dst); } #if 0 write_log (_T("0 = F6-4:%d INTERLACE:%d\n"), f64, interlace); write_log (_T("1 = FN:%d EXPAND:%d\n"), py + px *2, expand); write_log (_T("2 = ENP:%d WPB=%d\n"), enp, wpb); write_log (_T("3 = DPL:%d LESS16=%d\n"), dpl, less16); #endif #if 0 write_log (_T("%02x%02x%02x %02x%02x%02x %02x%02x%02x %02x%02x%02x %dx%d\n"), dataline[0 * doff + 0], dataline[0 * doff + 1], dataline[0 * doff + 2], dataline[1 * doff + 0], dataline[1 * doff + 1], dataline[1 * doff + 2], dataline[2 * doff + 0], dataline[2 * doff + 1], dataline[2 * doff + 2], dataline[3 * doff + 0], dataline[3 * doff + 1], dataline[3 * doff + 2], px, py); #endif if (less16) { total_width -= 16; if (px == pxcnt - 1) panel_width_draw -= 16; } total_height = panel_height * dbl; srcbuf = src->bufmem + (((44 << VRES_MAX) - src->yoffset) / gfxvidinfo.ychange) * src->rowbytes + (((srcxoffset << RES_MAX) - src->xoffset) / gfxvidinfo.xchange) * src->pixbytes; dstbuf = dst->bufmem + py * (panel_height / gfxvidinfo.ychange) * dst->rowbytes + px * ((panel_width * 2) / gfxvidinfo.xchange) * dst->pixbytes; for (y = 0; y < (panel_height / (dbl == 1 ? 1 : 2)) / gfxvidinfo.ychange; y++) { #if 0 memcpy (dstbuf, srcbuf, ((panel_width * 2) / gfxvidinfo.xchange) * dst->pixbytes); #else uae_u8 *srcp = srcbuf; uae_u8 *dstp1 = dstbuf; uae_u8 *dstp2 = dstbuf + dst->rowbytes; int x; for (x = 0; x < (panel_width_draw * 2) / gfxvidinfo.xchange; x++) { uae_u8 c1 = 0, c2 = 0; if (FR(src, srcp)) // R c1 |= 2; if (FG(src, srcp)) // G c2 |= 2; if (FB(src, srcp)) // B c1 |= 1; if (FI(src, srcp)) // I c2 |= 1; if (dpl == 0) { c1 = c2 = 0; } else if (dpl == 1) { c1 &= 1; c1 |= c1 << 1; c2 &= 1; c2 |= c2 << 1; } else if (dpl == 2) { c1 &= 2; c1 |= c1 >> 1; c2 &= 2; c2 |= c2 >> 1; } if (dbl == 1) { c1 = (c1 + c2 + 1) / 2; c1 = (c1 << 6) | (c1 << 4) | (c1 << 2) | (c1 << 0); PRGB(dst, dstp1, c1, c1, c1); } else { c1 = (c1 << 6) | (c1 << 4) | (c1 << 2) | (c1 << 0); c2 = (c2 << 6) | (c2 << 4) | (c2 << 2) | (c2 << 0); PRGB(dst, dstp1, c1, c1, c1); PRGB(dst, dstp2, c2, c2, c2); dstp2 += dst->pixbytes; } srcp += src->pixbytes; if (!hires) srcp += src->pixbytes; dstp1 += dst->pixbytes; } #endif srcbuf += src->rowbytes * dbl; dstbuf += dst->rowbytes * dbl; } total_width /= 2; total_width <<= currprefs.gfx_resolution; dst->outwidth = total_width; dst->outheight = total_height; dst->inwidth = total_width; dst->inheight = total_height; dst->inwidth2 = total_width; dst->inheight2 = total_height; dst->nativepositioning = false; if (monitor != MONITOREMU_A2024) { monitor = MONITOREMU_A2024; write_log (_T("A2024 %dHz %s mode\n"), hires ? 10 : 15, ntsc ? _T("NTSC") : _T("PAL")); } return true; } static bool emulate_specialmonitors2(struct vidbuffer *src, struct vidbuffer *dst) { if (currprefs.monitoremu == MONITOREMU_AUTO) { automatic = true; bool v = a2024(src, dst); if (!v) v = graffiti(src, dst); return v; } else if (currprefs.monitoremu == MONITOREMU_A2024) { automatic = false; return a2024(src, dst); } else if (currprefs.monitoremu == MONITOREMU_GRAFFITI) { automatic = false; return graffiti(src, dst); } return false; } bool emulate_specialmonitors(struct vidbuffer *src, struct vidbuffer *dst) { if (!emulate_specialmonitors2(src, dst)) { if (monitor) { clearmonitor(dst); monitor = 0; write_log (_T("Native mode\n")); } return false; } return true; } fs-uae-2.2.3+dfsg/src/jit/0000755000175000017500000000000012162366654015431 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/src/jit/compstbl.cpp0000644000175000017500000055024512162366654017773 0ustar glaubitzglaubitz#include "sysconfig.h" #if defined(JIT) #include "sysdeps.h" #include "options.h" #include "uae/memory.h" #include "newcpu.h" #include "comptbl.h" const struct comptbl op_smalltbl_0_comp_ff[] = { { op_0_0_comp_ff, 0, 0x00000002 }, /* OR */ { op_10_0_comp_ff, 16, 0x00000002 }, /* OR */ { op_18_0_comp_ff, 24, 0x00000002 }, /* OR */ { op_20_0_comp_ff, 32, 0x00000002 }, /* OR */ { op_28_0_comp_ff, 40, 0x00000002 }, /* OR */ { op_30_0_comp_ff, 48, 0x00000002 }, /* OR */ { op_38_0_comp_ff, 56, 0x00000002 }, /* OR */ { op_39_0_comp_ff, 57, 0x00000002 }, /* OR */ { NULL, 60, 0x00000001 }, /* ORSR */ { op_40_0_comp_ff, 64, 0x00000002 }, /* OR */ { op_50_0_comp_ff, 80, 0x00000002 }, /* OR */ { op_58_0_comp_ff, 88, 0x00000002 }, /* OR */ { op_60_0_comp_ff, 96, 0x00000002 }, /* OR */ { op_68_0_comp_ff, 104, 0x00000002 }, /* OR */ { op_70_0_comp_ff, 112, 0x00000002 }, /* OR */ { op_78_0_comp_ff, 120, 0x00000002 }, /* OR */ { op_79_0_comp_ff, 121, 0x00000002 }, /* OR */ { NULL, 124, 0x00000001 }, /* ORSR */ { op_80_0_comp_ff, 128, 0x00000002 }, /* OR */ { op_90_0_comp_ff, 144, 0x00000002 }, /* OR */ { op_98_0_comp_ff, 152, 0x00000002 }, /* OR */ { op_a0_0_comp_ff, 160, 0x00000002 }, /* OR */ { op_a8_0_comp_ff, 168, 0x00000002 }, /* OR */ { op_b0_0_comp_ff, 176, 0x00000002 }, /* OR */ { op_b8_0_comp_ff, 184, 0x00000002 }, /* OR */ { op_b9_0_comp_ff, 185, 0x00000002 }, /* OR */ { NULL, 208, 0x00000001 }, /* CHK2 */ { NULL, 232, 0x00000001 }, /* CHK2 */ { NULL, 240, 0x00000001 }, /* CHK2 */ { NULL, 248, 0x00000001 }, /* CHK2 */ { NULL, 249, 0x00000001 }, /* CHK2 */ { NULL, 250, 0x00000001 }, /* CHK2 */ { NULL, 251, 0x00000001 }, /* CHK2 */ { op_100_0_comp_ff, 256, 0x00000000 }, /* BTST */ { NULL, 264, 0x00000001 }, /* MVPMR */ { op_110_0_comp_ff, 272, 0x00000000 }, /* BTST */ { op_118_0_comp_ff, 280, 0x00000000 }, /* BTST */ { op_120_0_comp_ff, 288, 0x00000000 }, /* BTST */ { op_128_0_comp_ff, 296, 0x00000002 }, /* BTST */ { op_130_0_comp_ff, 304, 0x00000002 }, /* BTST */ { op_138_0_comp_ff, 312, 0x00000002 }, /* BTST */ { op_139_0_comp_ff, 313, 0x00000002 }, /* BTST */ { op_13a_0_comp_ff, 314, 0x00000002 }, /* BTST */ { op_13b_0_comp_ff, 315, 0x00000002 }, /* BTST */ { op_13c_0_comp_ff, 316, 0x00000002 }, /* BTST */ { op_140_0_comp_ff, 320, 0x00000000 }, /* BCHG */ { NULL, 328, 0x00000001 }, /* MVPMR */ { op_150_0_comp_ff, 336, 0x00000000 }, /* BCHG */ { op_158_0_comp_ff, 344, 0x00000000 }, /* BCHG */ { op_160_0_comp_ff, 352, 0x00000000 }, /* BCHG */ { op_168_0_comp_ff, 360, 0x00000002 }, /* BCHG */ { op_170_0_comp_ff, 368, 0x00000002 }, /* BCHG */ { op_178_0_comp_ff, 376, 0x00000002 }, /* BCHG */ { op_179_0_comp_ff, 377, 0x00000002 }, /* BCHG */ { op_17a_0_comp_ff, 378, 0x00000002 }, /* BCHG */ { op_17b_0_comp_ff, 379, 0x00000002 }, /* BCHG */ { op_180_0_comp_ff, 384, 0x00000000 }, /* BCLR */ { NULL, 392, 0x00000001 }, /* MVPRM */ { op_190_0_comp_ff, 400, 0x00000000 }, /* BCLR */ { op_198_0_comp_ff, 408, 0x00000000 }, /* BCLR */ { op_1a0_0_comp_ff, 416, 0x00000000 }, /* BCLR */ { op_1a8_0_comp_ff, 424, 0x00000002 }, /* BCLR */ { op_1b0_0_comp_ff, 432, 0x00000002 }, /* BCLR */ { op_1b8_0_comp_ff, 440, 0x00000002 }, /* BCLR */ { op_1b9_0_comp_ff, 441, 0x00000002 }, /* BCLR */ { op_1ba_0_comp_ff, 442, 0x00000002 }, /* BCLR */ { op_1bb_0_comp_ff, 443, 0x00000002 }, /* BCLR */ { op_1c0_0_comp_ff, 448, 0x00000000 }, /* BSET */ { NULL, 456, 0x00000001 }, /* MVPRM */ { op_1d0_0_comp_ff, 464, 0x00000000 }, /* BSET */ { op_1d8_0_comp_ff, 472, 0x00000000 }, /* BSET */ { op_1e0_0_comp_ff, 480, 0x00000000 }, /* BSET */ { op_1e8_0_comp_ff, 488, 0x00000002 }, /* BSET */ { op_1f0_0_comp_ff, 496, 0x00000002 }, /* BSET */ { op_1f8_0_comp_ff, 504, 0x00000002 }, /* BSET */ { op_1f9_0_comp_ff, 505, 0x00000002 }, /* BSET */ { op_1fa_0_comp_ff, 506, 0x00000002 }, /* BSET */ { op_1fb_0_comp_ff, 507, 0x00000002 }, /* BSET */ { op_200_0_comp_ff, 512, 0x00000002 }, /* AND */ { op_210_0_comp_ff, 528, 0x00000002 }, /* AND */ { op_218_0_comp_ff, 536, 0x00000002 }, /* AND */ { op_220_0_comp_ff, 544, 0x00000002 }, /* AND */ { op_228_0_comp_ff, 552, 0x00000002 }, /* AND */ { op_230_0_comp_ff, 560, 0x00000002 }, /* AND */ { op_238_0_comp_ff, 568, 0x00000002 }, /* AND */ { op_239_0_comp_ff, 569, 0x00000002 }, /* AND */ { NULL, 572, 0x00000001 }, /* ANDSR */ { op_240_0_comp_ff, 576, 0x00000002 }, /* AND */ { op_250_0_comp_ff, 592, 0x00000002 }, /* AND */ { op_258_0_comp_ff, 600, 0x00000002 }, /* AND */ { op_260_0_comp_ff, 608, 0x00000002 }, /* AND */ { op_268_0_comp_ff, 616, 0x00000002 }, /* AND */ { op_270_0_comp_ff, 624, 0x00000002 }, /* AND */ { op_278_0_comp_ff, 632, 0x00000002 }, /* AND */ { op_279_0_comp_ff, 633, 0x00000002 }, /* AND */ { NULL, 636, 0x00000001 }, /* ANDSR */ { op_280_0_comp_ff, 640, 0x00000002 }, /* AND */ { op_290_0_comp_ff, 656, 0x00000002 }, /* AND */ { op_298_0_comp_ff, 664, 0x00000002 }, /* AND */ { op_2a0_0_comp_ff, 672, 0x00000002 }, /* AND */ { op_2a8_0_comp_ff, 680, 0x00000002 }, /* AND */ { op_2b0_0_comp_ff, 688, 0x00000002 }, /* AND */ { op_2b8_0_comp_ff, 696, 0x00000002 }, /* AND */ { op_2b9_0_comp_ff, 697, 0x00000002 }, /* AND */ { NULL, 720, 0x00000001 }, /* CHK2 */ { NULL, 744, 0x00000001 }, /* CHK2 */ { NULL, 752, 0x00000001 }, /* CHK2 */ { NULL, 760, 0x00000001 }, /* CHK2 */ { NULL, 761, 0x00000001 }, /* CHK2 */ { NULL, 762, 0x00000001 }, /* CHK2 */ { NULL, 763, 0x00000001 }, /* CHK2 */ { op_400_0_comp_ff, 1024, 0x00000002 }, /* SUB */ { op_410_0_comp_ff, 1040, 0x00000002 }, /* SUB */ { op_418_0_comp_ff, 1048, 0x00000002 }, /* SUB */ { op_420_0_comp_ff, 1056, 0x00000002 }, /* SUB */ { op_428_0_comp_ff, 1064, 0x00000002 }, /* SUB */ { op_430_0_comp_ff, 1072, 0x00000002 }, /* SUB */ { op_438_0_comp_ff, 1080, 0x00000002 }, /* SUB */ { op_439_0_comp_ff, 1081, 0x00000002 }, /* SUB */ { op_440_0_comp_ff, 1088, 0x00000002 }, /* SUB */ { op_450_0_comp_ff, 1104, 0x00000002 }, /* SUB */ { op_458_0_comp_ff, 1112, 0x00000002 }, /* SUB */ { op_460_0_comp_ff, 1120, 0x00000002 }, /* SUB */ { op_468_0_comp_ff, 1128, 0x00000002 }, /* SUB */ { op_470_0_comp_ff, 1136, 0x00000002 }, /* SUB */ { op_478_0_comp_ff, 1144, 0x00000002 }, /* SUB */ { op_479_0_comp_ff, 1145, 0x00000002 }, /* SUB */ { op_480_0_comp_ff, 1152, 0x00000002 }, /* SUB */ { op_490_0_comp_ff, 1168, 0x00000002 }, /* SUB */ { op_498_0_comp_ff, 1176, 0x00000002 }, /* SUB */ { op_4a0_0_comp_ff, 1184, 0x00000002 }, /* SUB */ { op_4a8_0_comp_ff, 1192, 0x00000002 }, /* SUB */ { op_4b0_0_comp_ff, 1200, 0x00000002 }, /* SUB */ { op_4b8_0_comp_ff, 1208, 0x00000002 }, /* SUB */ { op_4b9_0_comp_ff, 1209, 0x00000002 }, /* SUB */ { NULL, 1232, 0x00000001 }, /* CHK2 */ { NULL, 1256, 0x00000001 }, /* CHK2 */ { NULL, 1264, 0x00000001 }, /* CHK2 */ { NULL, 1272, 0x00000001 }, /* CHK2 */ { NULL, 1273, 0x00000001 }, /* CHK2 */ { NULL, 1274, 0x00000001 }, /* CHK2 */ { NULL, 1275, 0x00000001 }, /* CHK2 */ { op_600_0_comp_ff, 1536, 0x00000002 }, /* ADD */ { op_610_0_comp_ff, 1552, 0x00000002 }, /* ADD */ { op_618_0_comp_ff, 1560, 0x00000002 }, /* ADD */ { op_620_0_comp_ff, 1568, 0x00000002 }, /* ADD */ { op_628_0_comp_ff, 1576, 0x00000002 }, /* ADD */ { op_630_0_comp_ff, 1584, 0x00000002 }, /* ADD */ { op_638_0_comp_ff, 1592, 0x00000002 }, /* ADD */ { op_639_0_comp_ff, 1593, 0x00000002 }, /* ADD */ { op_640_0_comp_ff, 1600, 0x00000002 }, /* ADD */ { op_650_0_comp_ff, 1616, 0x00000002 }, /* ADD */ { op_658_0_comp_ff, 1624, 0x00000002 }, /* ADD */ { op_660_0_comp_ff, 1632, 0x00000002 }, /* ADD */ { op_668_0_comp_ff, 1640, 0x00000002 }, /* ADD */ { op_670_0_comp_ff, 1648, 0x00000002 }, /* ADD */ { op_678_0_comp_ff, 1656, 0x00000002 }, /* ADD */ { op_679_0_comp_ff, 1657, 0x00000002 }, /* ADD */ { op_680_0_comp_ff, 1664, 0x00000002 }, /* ADD */ { op_690_0_comp_ff, 1680, 0x00000002 }, /* ADD */ { op_698_0_comp_ff, 1688, 0x00000002 }, /* ADD */ { op_6a0_0_comp_ff, 1696, 0x00000002 }, /* ADD */ { op_6a8_0_comp_ff, 1704, 0x00000002 }, /* ADD */ { op_6b0_0_comp_ff, 1712, 0x00000002 }, /* ADD */ { op_6b8_0_comp_ff, 1720, 0x00000002 }, /* ADD */ { op_6b9_0_comp_ff, 1721, 0x00000002 }, /* ADD */ { NULL, 1728, 0x00000001 }, /* RTM */ { NULL, 1736, 0x00000001 }, /* RTM */ { NULL, 1744, 0x00000001 }, /* CALLM */ { NULL, 1768, 0x00000001 }, /* CALLM */ { NULL, 1776, 0x00000001 }, /* CALLM */ { NULL, 1784, 0x00000001 }, /* CALLM */ { NULL, 1785, 0x00000001 }, /* CALLM */ { NULL, 1786, 0x00000001 }, /* CALLM */ { NULL, 1787, 0x00000001 }, /* CALLM */ { op_800_0_comp_ff, 2048, 0x00000002 }, /* BTST */ { op_810_0_comp_ff, 2064, 0x00000002 }, /* BTST */ { op_818_0_comp_ff, 2072, 0x00000002 }, /* BTST */ { op_820_0_comp_ff, 2080, 0x00000002 }, /* BTST */ { op_828_0_comp_ff, 2088, 0x00000002 }, /* BTST */ { op_830_0_comp_ff, 2096, 0x00000002 }, /* BTST */ { op_838_0_comp_ff, 2104, 0x00000002 }, /* BTST */ { op_839_0_comp_ff, 2105, 0x00000002 }, /* BTST */ { op_83a_0_comp_ff, 2106, 0x00000002 }, /* BTST */ { op_83b_0_comp_ff, 2107, 0x00000002 }, /* BTST */ { op_83c_0_comp_ff, 2108, 0x00000002 }, /* BTST */ { op_840_0_comp_ff, 2112, 0x00000002 }, /* BCHG */ { op_850_0_comp_ff, 2128, 0x00000002 }, /* BCHG */ { op_858_0_comp_ff, 2136, 0x00000002 }, /* BCHG */ { op_860_0_comp_ff, 2144, 0x00000002 }, /* BCHG */ { op_868_0_comp_ff, 2152, 0x00000002 }, /* BCHG */ { op_870_0_comp_ff, 2160, 0x00000002 }, /* BCHG */ { op_878_0_comp_ff, 2168, 0x00000002 }, /* BCHG */ { op_879_0_comp_ff, 2169, 0x00000002 }, /* BCHG */ { op_87a_0_comp_ff, 2170, 0x00000002 }, /* BCHG */ { op_87b_0_comp_ff, 2171, 0x00000002 }, /* BCHG */ { op_880_0_comp_ff, 2176, 0x00000002 }, /* BCLR */ { op_890_0_comp_ff, 2192, 0x00000002 }, /* BCLR */ { op_898_0_comp_ff, 2200, 0x00000002 }, /* BCLR */ { op_8a0_0_comp_ff, 2208, 0x00000002 }, /* BCLR */ { op_8a8_0_comp_ff, 2216, 0x00000002 }, /* BCLR */ { op_8b0_0_comp_ff, 2224, 0x00000002 }, /* BCLR */ { op_8b8_0_comp_ff, 2232, 0x00000002 }, /* BCLR */ { op_8b9_0_comp_ff, 2233, 0x00000002 }, /* BCLR */ { op_8ba_0_comp_ff, 2234, 0x00000002 }, /* BCLR */ { op_8bb_0_comp_ff, 2235, 0x00000002 }, /* BCLR */ { op_8c0_0_comp_ff, 2240, 0x00000002 }, /* BSET */ { op_8d0_0_comp_ff, 2256, 0x00000002 }, /* BSET */ { op_8d8_0_comp_ff, 2264, 0x00000002 }, /* BSET */ { op_8e0_0_comp_ff, 2272, 0x00000002 }, /* BSET */ { op_8e8_0_comp_ff, 2280, 0x00000002 }, /* BSET */ { op_8f0_0_comp_ff, 2288, 0x00000002 }, /* BSET */ { op_8f8_0_comp_ff, 2296, 0x00000002 }, /* BSET */ { op_8f9_0_comp_ff, 2297, 0x00000002 }, /* BSET */ { op_8fa_0_comp_ff, 2298, 0x00000002 }, /* BSET */ { op_8fb_0_comp_ff, 2299, 0x00000002 }, /* BSET */ { op_a00_0_comp_ff, 2560, 0x00000002 }, /* EOR */ { op_a10_0_comp_ff, 2576, 0x00000002 }, /* EOR */ { op_a18_0_comp_ff, 2584, 0x00000002 }, /* EOR */ { op_a20_0_comp_ff, 2592, 0x00000002 }, /* EOR */ { op_a28_0_comp_ff, 2600, 0x00000002 }, /* EOR */ { op_a30_0_comp_ff, 2608, 0x00000002 }, /* EOR */ { op_a38_0_comp_ff, 2616, 0x00000002 }, /* EOR */ { op_a39_0_comp_ff, 2617, 0x00000002 }, /* EOR */ { NULL, 2620, 0x00000001 }, /* EORSR */ { op_a40_0_comp_ff, 2624, 0x00000002 }, /* EOR */ { op_a50_0_comp_ff, 2640, 0x00000002 }, /* EOR */ { op_a58_0_comp_ff, 2648, 0x00000002 }, /* EOR */ { op_a60_0_comp_ff, 2656, 0x00000002 }, /* EOR */ { op_a68_0_comp_ff, 2664, 0x00000002 }, /* EOR */ { op_a70_0_comp_ff, 2672, 0x00000002 }, /* EOR */ { op_a78_0_comp_ff, 2680, 0x00000002 }, /* EOR */ { op_a79_0_comp_ff, 2681, 0x00000002 }, /* EOR */ { NULL, 2684, 0x00000001 }, /* EORSR */ { op_a80_0_comp_ff, 2688, 0x00000002 }, /* EOR */ { op_a90_0_comp_ff, 2704, 0x00000002 }, /* EOR */ { op_a98_0_comp_ff, 2712, 0x00000002 }, /* EOR */ { op_aa0_0_comp_ff, 2720, 0x00000002 }, /* EOR */ { op_aa8_0_comp_ff, 2728, 0x00000002 }, /* EOR */ { op_ab0_0_comp_ff, 2736, 0x00000002 }, /* EOR */ { op_ab8_0_comp_ff, 2744, 0x00000002 }, /* EOR */ { op_ab9_0_comp_ff, 2745, 0x00000002 }, /* EOR */ { NULL, 2768, 0x00000000 }, /* CAS */ { NULL, 2776, 0x00000000 }, /* CAS */ { NULL, 2784, 0x00000000 }, /* CAS */ { NULL, 2792, 0x00000000 }, /* CAS */ { NULL, 2800, 0x00000000 }, /* CAS */ { NULL, 2808, 0x00000000 }, /* CAS */ { NULL, 2809, 0x00000000 }, /* CAS */ { op_c00_0_comp_ff, 3072, 0x00000002 }, /* CMP */ { op_c10_0_comp_ff, 3088, 0x00000002 }, /* CMP */ { op_c18_0_comp_ff, 3096, 0x00000002 }, /* CMP */ { op_c20_0_comp_ff, 3104, 0x00000002 }, /* CMP */ { op_c28_0_comp_ff, 3112, 0x00000002 }, /* CMP */ { op_c30_0_comp_ff, 3120, 0x00000002 }, /* CMP */ { op_c38_0_comp_ff, 3128, 0x00000002 }, /* CMP */ { op_c39_0_comp_ff, 3129, 0x00000002 }, /* CMP */ { op_c3a_0_comp_ff, 3130, 0x00000002 }, /* CMP */ { op_c3b_0_comp_ff, 3131, 0x00000002 }, /* CMP */ { op_c40_0_comp_ff, 3136, 0x00000002 }, /* CMP */ { op_c50_0_comp_ff, 3152, 0x00000002 }, /* CMP */ { op_c58_0_comp_ff, 3160, 0x00000002 }, /* CMP */ { op_c60_0_comp_ff, 3168, 0x00000002 }, /* CMP */ { op_c68_0_comp_ff, 3176, 0x00000002 }, /* CMP */ { op_c70_0_comp_ff, 3184, 0x00000002 }, /* CMP */ { op_c78_0_comp_ff, 3192, 0x00000002 }, /* CMP */ { op_c79_0_comp_ff, 3193, 0x00000002 }, /* CMP */ { op_c7a_0_comp_ff, 3194, 0x00000002 }, /* CMP */ { op_c7b_0_comp_ff, 3195, 0x00000002 }, /* CMP */ { op_c80_0_comp_ff, 3200, 0x00000002 }, /* CMP */ { op_c90_0_comp_ff, 3216, 0x00000002 }, /* CMP */ { op_c98_0_comp_ff, 3224, 0x00000002 }, /* CMP */ { op_ca0_0_comp_ff, 3232, 0x00000002 }, /* CMP */ { op_ca8_0_comp_ff, 3240, 0x00000002 }, /* CMP */ { op_cb0_0_comp_ff, 3248, 0x00000002 }, /* CMP */ { op_cb8_0_comp_ff, 3256, 0x00000002 }, /* CMP */ { op_cb9_0_comp_ff, 3257, 0x00000002 }, /* CMP */ { op_cba_0_comp_ff, 3258, 0x00000002 }, /* CMP */ { op_cbb_0_comp_ff, 3259, 0x00000002 }, /* CMP */ { NULL, 3280, 0x00000000 }, /* CAS */ { NULL, 3288, 0x00000000 }, /* CAS */ { NULL, 3296, 0x00000000 }, /* CAS */ { NULL, 3304, 0x00000000 }, /* CAS */ { NULL, 3312, 0x00000000 }, /* CAS */ { NULL, 3320, 0x00000000 }, /* CAS */ { NULL, 3321, 0x00000000 }, /* CAS */ { NULL, 3324, 0x00000000 }, /* CAS2 */ { NULL, 3600, 0x00000001 }, /* MOVES */ { NULL, 3608, 0x00000001 }, /* MOVES */ { NULL, 3616, 0x00000001 }, /* MOVES */ { NULL, 3624, 0x00000001 }, /* MOVES */ { NULL, 3632, 0x00000001 }, /* MOVES */ { NULL, 3640, 0x00000001 }, /* MOVES */ { NULL, 3641, 0x00000001 }, /* MOVES */ { NULL, 3664, 0x00000001 }, /* MOVES */ { NULL, 3672, 0x00000001 }, /* MOVES */ { NULL, 3680, 0x00000001 }, /* MOVES */ { NULL, 3688, 0x00000001 }, /* MOVES */ { NULL, 3696, 0x00000001 }, /* MOVES */ { NULL, 3704, 0x00000001 }, /* MOVES */ { NULL, 3705, 0x00000001 }, /* MOVES */ { NULL, 3728, 0x00000001 }, /* MOVES */ { NULL, 3736, 0x00000001 }, /* MOVES */ { NULL, 3744, 0x00000001 }, /* MOVES */ { NULL, 3752, 0x00000001 }, /* MOVES */ { NULL, 3760, 0x00000001 }, /* MOVES */ { NULL, 3768, 0x00000001 }, /* MOVES */ { NULL, 3769, 0x00000001 }, /* MOVES */ { NULL, 3792, 0x00000000 }, /* CAS */ { NULL, 3800, 0x00000000 }, /* CAS */ { NULL, 3808, 0x00000000 }, /* CAS */ { NULL, 3816, 0x00000000 }, /* CAS */ { NULL, 3824, 0x00000000 }, /* CAS */ { NULL, 3832, 0x00000000 }, /* CAS */ { NULL, 3833, 0x00000000 }, /* CAS */ { NULL, 3836, 0x00000000 }, /* CAS2 */ { op_1000_0_comp_ff, 4096, 0x00000000 }, /* MOVE */ { op_1010_0_comp_ff, 4112, 0x00000000 }, /* MOVE */ { op_1018_0_comp_ff, 4120, 0x00000000 }, /* MOVE */ { op_1020_0_comp_ff, 4128, 0x00000000 }, /* MOVE */ { op_1028_0_comp_ff, 4136, 0x00000002 }, /* MOVE */ { op_1030_0_comp_ff, 4144, 0x00000002 }, /* MOVE */ { op_1038_0_comp_ff, 4152, 0x00000002 }, /* MOVE */ { op_1039_0_comp_ff, 4153, 0x00000002 }, /* MOVE */ { op_103a_0_comp_ff, 4154, 0x00000002 }, /* MOVE */ { op_103b_0_comp_ff, 4155, 0x00000002 }, /* MOVE */ { op_103c_0_comp_ff, 4156, 0x00000002 }, /* MOVE */ { op_1080_0_comp_ff, 4224, 0x00000000 }, /* MOVE */ { op_1090_0_comp_ff, 4240, 0x00000000 }, /* MOVE */ { op_1098_0_comp_ff, 4248, 0x00000000 }, /* MOVE */ { op_10a0_0_comp_ff, 4256, 0x00000000 }, /* MOVE */ { op_10a8_0_comp_ff, 4264, 0x00000002 }, /* MOVE */ { op_10b0_0_comp_ff, 4272, 0x00000002 }, /* MOVE */ { op_10b8_0_comp_ff, 4280, 0x00000002 }, /* MOVE */ { op_10b9_0_comp_ff, 4281, 0x00000002 }, /* MOVE */ { op_10ba_0_comp_ff, 4282, 0x00000002 }, /* MOVE */ { op_10bb_0_comp_ff, 4283, 0x00000002 }, /* MOVE */ { op_10bc_0_comp_ff, 4284, 0x00000002 }, /* MOVE */ { op_10c0_0_comp_ff, 4288, 0x00000000 }, /* MOVE */ { op_10d0_0_comp_ff, 4304, 0x00000000 }, /* MOVE */ { op_10d8_0_comp_ff, 4312, 0x00000000 }, /* MOVE */ { op_10e0_0_comp_ff, 4320, 0x00000000 }, /* MOVE */ { op_10e8_0_comp_ff, 4328, 0x00000002 }, /* MOVE */ { op_10f0_0_comp_ff, 4336, 0x00000002 }, /* MOVE */ { op_10f8_0_comp_ff, 4344, 0x00000002 }, /* MOVE */ { op_10f9_0_comp_ff, 4345, 0x00000002 }, /* MOVE */ { op_10fa_0_comp_ff, 4346, 0x00000002 }, /* MOVE */ { op_10fb_0_comp_ff, 4347, 0x00000002 }, /* MOVE */ { op_10fc_0_comp_ff, 4348, 0x00000002 }, /* MOVE */ { op_1100_0_comp_ff, 4352, 0x00000000 }, /* MOVE */ { op_1110_0_comp_ff, 4368, 0x00000000 }, /* MOVE */ { op_1118_0_comp_ff, 4376, 0x00000000 }, /* MOVE */ { op_1120_0_comp_ff, 4384, 0x00000000 }, /* MOVE */ { op_1128_0_comp_ff, 4392, 0x00000002 }, /* MOVE */ { op_1130_0_comp_ff, 4400, 0x00000002 }, /* MOVE */ { op_1138_0_comp_ff, 4408, 0x00000002 }, /* MOVE */ { op_1139_0_comp_ff, 4409, 0x00000002 }, /* MOVE */ { op_113a_0_comp_ff, 4410, 0x00000002 }, /* MOVE */ { op_113b_0_comp_ff, 4411, 0x00000002 }, /* MOVE */ { op_113c_0_comp_ff, 4412, 0x00000002 }, /* MOVE */ { op_1140_0_comp_ff, 4416, 0x00000002 }, /* MOVE */ { op_1150_0_comp_ff, 4432, 0x00000002 }, /* MOVE */ { op_1158_0_comp_ff, 4440, 0x00000002 }, /* MOVE */ { op_1160_0_comp_ff, 4448, 0x00000002 }, /* MOVE */ { op_1168_0_comp_ff, 4456, 0x00000002 }, /* MOVE */ { op_1170_0_comp_ff, 4464, 0x00000002 }, /* MOVE */ { op_1178_0_comp_ff, 4472, 0x00000002 }, /* MOVE */ { op_1179_0_comp_ff, 4473, 0x00000002 }, /* MOVE */ { op_117a_0_comp_ff, 4474, 0x00000002 }, /* MOVE */ { op_117b_0_comp_ff, 4475, 0x00000002 }, /* MOVE */ { op_117c_0_comp_ff, 4476, 0x00000002 }, /* MOVE */ { op_1180_0_comp_ff, 4480, 0x00000002 }, /* MOVE */ { op_1190_0_comp_ff, 4496, 0x00000002 }, /* MOVE */ { op_1198_0_comp_ff, 4504, 0x00000002 }, /* MOVE */ { op_11a0_0_comp_ff, 4512, 0x00000002 }, /* MOVE */ { op_11a8_0_comp_ff, 4520, 0x00000002 }, /* MOVE */ { op_11b0_0_comp_ff, 4528, 0x00000002 }, /* MOVE */ { op_11b8_0_comp_ff, 4536, 0x00000002 }, /* MOVE */ { op_11b9_0_comp_ff, 4537, 0x00000002 }, /* MOVE */ { op_11ba_0_comp_ff, 4538, 0x00000002 }, /* MOVE */ { op_11bb_0_comp_ff, 4539, 0x00000002 }, /* MOVE */ { op_11bc_0_comp_ff, 4540, 0x00000002 }, /* MOVE */ { op_11c0_0_comp_ff, 4544, 0x00000002 }, /* MOVE */ { op_11d0_0_comp_ff, 4560, 0x00000002 }, /* MOVE */ { op_11d8_0_comp_ff, 4568, 0x00000002 }, /* MOVE */ { op_11e0_0_comp_ff, 4576, 0x00000002 }, /* MOVE */ { op_11e8_0_comp_ff, 4584, 0x00000002 }, /* MOVE */ { op_11f0_0_comp_ff, 4592, 0x00000002 }, /* MOVE */ { op_11f8_0_comp_ff, 4600, 0x00000002 }, /* MOVE */ { op_11f9_0_comp_ff, 4601, 0x00000002 }, /* MOVE */ { op_11fa_0_comp_ff, 4602, 0x00000002 }, /* MOVE */ { op_11fb_0_comp_ff, 4603, 0x00000002 }, /* MOVE */ { op_11fc_0_comp_ff, 4604, 0x00000002 }, /* MOVE */ { op_13c0_0_comp_ff, 5056, 0x00000002 }, /* MOVE */ { op_13d0_0_comp_ff, 5072, 0x00000002 }, /* MOVE */ { op_13d8_0_comp_ff, 5080, 0x00000002 }, /* MOVE */ { op_13e0_0_comp_ff, 5088, 0x00000002 }, /* MOVE */ { op_13e8_0_comp_ff, 5096, 0x00000002 }, /* MOVE */ { op_13f0_0_comp_ff, 5104, 0x00000002 }, /* MOVE */ { op_13f8_0_comp_ff, 5112, 0x00000002 }, /* MOVE */ { op_13f9_0_comp_ff, 5113, 0x00000002 }, /* MOVE */ { op_13fa_0_comp_ff, 5114, 0x00000002 }, /* MOVE */ { op_13fb_0_comp_ff, 5115, 0x00000002 }, /* MOVE */ { op_13fc_0_comp_ff, 5116, 0x00000002 }, /* MOVE */ { op_2000_0_comp_ff, 8192, 0x00000000 }, /* MOVE */ { op_2008_0_comp_ff, 8200, 0x00000000 }, /* MOVE */ { op_2010_0_comp_ff, 8208, 0x00000000 }, /* MOVE */ { op_2018_0_comp_ff, 8216, 0x00000000 }, /* MOVE */ { op_2020_0_comp_ff, 8224, 0x00000000 }, /* MOVE */ { op_2028_0_comp_ff, 8232, 0x00000002 }, /* MOVE */ { op_2030_0_comp_ff, 8240, 0x00000002 }, /* MOVE */ { op_2038_0_comp_ff, 8248, 0x00000002 }, /* MOVE */ { op_2039_0_comp_ff, 8249, 0x00000002 }, /* MOVE */ { op_203a_0_comp_ff, 8250, 0x00000002 }, /* MOVE */ { op_203b_0_comp_ff, 8251, 0x00000002 }, /* MOVE */ { op_203c_0_comp_ff, 8252, 0x00000002 }, /* MOVE */ { op_2040_0_comp_ff, 8256, 0x00000000 }, /* MOVEA */ { op_2048_0_comp_ff, 8264, 0x00000000 }, /* MOVEA */ { op_2050_0_comp_ff, 8272, 0x00000000 }, /* MOVEA */ { op_2058_0_comp_ff, 8280, 0x00000000 }, /* MOVEA */ { op_2060_0_comp_ff, 8288, 0x00000000 }, /* MOVEA */ { op_2068_0_comp_ff, 8296, 0x00000002 }, /* MOVEA */ { op_2070_0_comp_ff, 8304, 0x00000002 }, /* MOVEA */ { op_2078_0_comp_ff, 8312, 0x00000002 }, /* MOVEA */ { op_2079_0_comp_ff, 8313, 0x00000002 }, /* MOVEA */ { op_207a_0_comp_ff, 8314, 0x00000002 }, /* MOVEA */ { op_207b_0_comp_ff, 8315, 0x00000002 }, /* MOVEA */ { op_207c_0_comp_ff, 8316, 0x00000002 }, /* MOVEA */ { op_2080_0_comp_ff, 8320, 0x00000000 }, /* MOVE */ { op_2088_0_comp_ff, 8328, 0x00000000 }, /* MOVE */ { op_2090_0_comp_ff, 8336, 0x00000000 }, /* MOVE */ { op_2098_0_comp_ff, 8344, 0x00000000 }, /* MOVE */ { op_20a0_0_comp_ff, 8352, 0x00000000 }, /* MOVE */ { op_20a8_0_comp_ff, 8360, 0x00000002 }, /* MOVE */ { op_20b0_0_comp_ff, 8368, 0x00000002 }, /* MOVE */ { op_20b8_0_comp_ff, 8376, 0x00000002 }, /* MOVE */ { op_20b9_0_comp_ff, 8377, 0x00000002 }, /* MOVE */ { op_20ba_0_comp_ff, 8378, 0x00000002 }, /* MOVE */ { op_20bb_0_comp_ff, 8379, 0x00000002 }, /* MOVE */ { op_20bc_0_comp_ff, 8380, 0x00000002 }, /* MOVE */ { op_20c0_0_comp_ff, 8384, 0x00000000 }, /* MOVE */ { op_20c8_0_comp_ff, 8392, 0x00000000 }, /* MOVE */ { op_20d0_0_comp_ff, 8400, 0x00000000 }, /* MOVE */ { op_20d8_0_comp_ff, 8408, 0x00000000 }, /* MOVE */ { op_20e0_0_comp_ff, 8416, 0x00000000 }, /* MOVE */ { op_20e8_0_comp_ff, 8424, 0x00000002 }, /* MOVE */ { op_20f0_0_comp_ff, 8432, 0x00000002 }, /* MOVE */ { op_20f8_0_comp_ff, 8440, 0x00000002 }, /* MOVE */ { op_20f9_0_comp_ff, 8441, 0x00000002 }, /* MOVE */ { op_20fa_0_comp_ff, 8442, 0x00000002 }, /* MOVE */ { op_20fb_0_comp_ff, 8443, 0x00000002 }, /* MOVE */ { op_20fc_0_comp_ff, 8444, 0x00000002 }, /* MOVE */ { op_2100_0_comp_ff, 8448, 0x00000000 }, /* MOVE */ { op_2108_0_comp_ff, 8456, 0x00000000 }, /* MOVE */ { op_2110_0_comp_ff, 8464, 0x00000000 }, /* MOVE */ { op_2118_0_comp_ff, 8472, 0x00000000 }, /* MOVE */ { op_2120_0_comp_ff, 8480, 0x00000000 }, /* MOVE */ { op_2128_0_comp_ff, 8488, 0x00000002 }, /* MOVE */ { op_2130_0_comp_ff, 8496, 0x00000002 }, /* MOVE */ { op_2138_0_comp_ff, 8504, 0x00000002 }, /* MOVE */ { op_2139_0_comp_ff, 8505, 0x00000002 }, /* MOVE */ { op_213a_0_comp_ff, 8506, 0x00000002 }, /* MOVE */ { op_213b_0_comp_ff, 8507, 0x00000002 }, /* MOVE */ { op_213c_0_comp_ff, 8508, 0x00000002 }, /* MOVE */ { op_2140_0_comp_ff, 8512, 0x00000002 }, /* MOVE */ { op_2148_0_comp_ff, 8520, 0x00000002 }, /* MOVE */ { op_2150_0_comp_ff, 8528, 0x00000002 }, /* MOVE */ { op_2158_0_comp_ff, 8536, 0x00000002 }, /* MOVE */ { op_2160_0_comp_ff, 8544, 0x00000002 }, /* MOVE */ { op_2168_0_comp_ff, 8552, 0x00000002 }, /* MOVE */ { op_2170_0_comp_ff, 8560, 0x00000002 }, /* MOVE */ { op_2178_0_comp_ff, 8568, 0x00000002 }, /* MOVE */ { op_2179_0_comp_ff, 8569, 0x00000002 }, /* MOVE */ { op_217a_0_comp_ff, 8570, 0x00000002 }, /* MOVE */ { op_217b_0_comp_ff, 8571, 0x00000002 }, /* MOVE */ { op_217c_0_comp_ff, 8572, 0x00000002 }, /* MOVE */ { op_2180_0_comp_ff, 8576, 0x00000002 }, /* MOVE */ { op_2188_0_comp_ff, 8584, 0x00000002 }, /* MOVE */ { op_2190_0_comp_ff, 8592, 0x00000002 }, /* MOVE */ { op_2198_0_comp_ff, 8600, 0x00000002 }, /* MOVE */ { op_21a0_0_comp_ff, 8608, 0x00000002 }, /* MOVE */ { op_21a8_0_comp_ff, 8616, 0x00000002 }, /* MOVE */ { op_21b0_0_comp_ff, 8624, 0x00000002 }, /* MOVE */ { op_21b8_0_comp_ff, 8632, 0x00000002 }, /* MOVE */ { op_21b9_0_comp_ff, 8633, 0x00000002 }, /* MOVE */ { op_21ba_0_comp_ff, 8634, 0x00000002 }, /* MOVE */ { op_21bb_0_comp_ff, 8635, 0x00000002 }, /* MOVE */ { op_21bc_0_comp_ff, 8636, 0x00000002 }, /* MOVE */ { op_21c0_0_comp_ff, 8640, 0x00000002 }, /* MOVE */ { op_21c8_0_comp_ff, 8648, 0x00000002 }, /* MOVE */ { op_21d0_0_comp_ff, 8656, 0x00000002 }, /* MOVE */ { op_21d8_0_comp_ff, 8664, 0x00000002 }, /* MOVE */ { op_21e0_0_comp_ff, 8672, 0x00000002 }, /* MOVE */ { op_21e8_0_comp_ff, 8680, 0x00000002 }, /* MOVE */ { op_21f0_0_comp_ff, 8688, 0x00000002 }, /* MOVE */ { op_21f8_0_comp_ff, 8696, 0x00000002 }, /* MOVE */ { op_21f9_0_comp_ff, 8697, 0x00000002 }, /* MOVE */ { op_21fa_0_comp_ff, 8698, 0x00000002 }, /* MOVE */ { op_21fb_0_comp_ff, 8699, 0x00000002 }, /* MOVE */ { op_21fc_0_comp_ff, 8700, 0x00000002 }, /* MOVE */ { op_23c0_0_comp_ff, 9152, 0x00000002 }, /* MOVE */ { op_23c8_0_comp_ff, 9160, 0x00000002 }, /* MOVE */ { op_23d0_0_comp_ff, 9168, 0x00000002 }, /* MOVE */ { op_23d8_0_comp_ff, 9176, 0x00000002 }, /* MOVE */ { op_23e0_0_comp_ff, 9184, 0x00000002 }, /* MOVE */ { op_23e8_0_comp_ff, 9192, 0x00000002 }, /* MOVE */ { op_23f0_0_comp_ff, 9200, 0x00000002 }, /* MOVE */ { op_23f8_0_comp_ff, 9208, 0x00000002 }, /* MOVE */ { op_23f9_0_comp_ff, 9209, 0x00000002 }, /* MOVE */ { op_23fa_0_comp_ff, 9210, 0x00000002 }, /* MOVE */ { op_23fb_0_comp_ff, 9211, 0x00000002 }, /* MOVE */ { op_23fc_0_comp_ff, 9212, 0x00000002 }, /* MOVE */ { op_3000_0_comp_ff, 12288, 0x00000000 }, /* MOVE */ { op_3008_0_comp_ff, 12296, 0x00000000 }, /* MOVE */ { op_3010_0_comp_ff, 12304, 0x00000000 }, /* MOVE */ { op_3018_0_comp_ff, 12312, 0x00000000 }, /* MOVE */ { op_3020_0_comp_ff, 12320, 0x00000000 }, /* MOVE */ { op_3028_0_comp_ff, 12328, 0x00000002 }, /* MOVE */ { op_3030_0_comp_ff, 12336, 0x00000002 }, /* MOVE */ { op_3038_0_comp_ff, 12344, 0x00000002 }, /* MOVE */ { op_3039_0_comp_ff, 12345, 0x00000002 }, /* MOVE */ { op_303a_0_comp_ff, 12346, 0x00000002 }, /* MOVE */ { op_303b_0_comp_ff, 12347, 0x00000002 }, /* MOVE */ { op_303c_0_comp_ff, 12348, 0x00000002 }, /* MOVE */ { op_3040_0_comp_ff, 12352, 0x00000000 }, /* MOVEA */ { op_3048_0_comp_ff, 12360, 0x00000000 }, /* MOVEA */ { op_3050_0_comp_ff, 12368, 0x00000000 }, /* MOVEA */ { op_3058_0_comp_ff, 12376, 0x00000000 }, /* MOVEA */ { op_3060_0_comp_ff, 12384, 0x00000000 }, /* MOVEA */ { op_3068_0_comp_ff, 12392, 0x00000002 }, /* MOVEA */ { op_3070_0_comp_ff, 12400, 0x00000002 }, /* MOVEA */ { op_3078_0_comp_ff, 12408, 0x00000002 }, /* MOVEA */ { op_3079_0_comp_ff, 12409, 0x00000002 }, /* MOVEA */ { op_307a_0_comp_ff, 12410, 0x00000002 }, /* MOVEA */ { op_307b_0_comp_ff, 12411, 0x00000002 }, /* MOVEA */ { op_307c_0_comp_ff, 12412, 0x00000002 }, /* MOVEA */ { op_3080_0_comp_ff, 12416, 0x00000000 }, /* MOVE */ { op_3088_0_comp_ff, 12424, 0x00000000 }, /* MOVE */ { op_3090_0_comp_ff, 12432, 0x00000000 }, /* MOVE */ { op_3098_0_comp_ff, 12440, 0x00000000 }, /* MOVE */ { op_30a0_0_comp_ff, 12448, 0x00000000 }, /* MOVE */ { op_30a8_0_comp_ff, 12456, 0x00000002 }, /* MOVE */ { op_30b0_0_comp_ff, 12464, 0x00000002 }, /* MOVE */ { op_30b8_0_comp_ff, 12472, 0x00000002 }, /* MOVE */ { op_30b9_0_comp_ff, 12473, 0x00000002 }, /* MOVE */ { op_30ba_0_comp_ff, 12474, 0x00000002 }, /* MOVE */ { op_30bb_0_comp_ff, 12475, 0x00000002 }, /* MOVE */ { op_30bc_0_comp_ff, 12476, 0x00000002 }, /* MOVE */ { op_30c0_0_comp_ff, 12480, 0x00000000 }, /* MOVE */ { op_30c8_0_comp_ff, 12488, 0x00000000 }, /* MOVE */ { op_30d0_0_comp_ff, 12496, 0x00000000 }, /* MOVE */ { op_30d8_0_comp_ff, 12504, 0x00000000 }, /* MOVE */ { op_30e0_0_comp_ff, 12512, 0x00000000 }, /* MOVE */ { op_30e8_0_comp_ff, 12520, 0x00000002 }, /* MOVE */ { op_30f0_0_comp_ff, 12528, 0x00000002 }, /* MOVE */ { op_30f8_0_comp_ff, 12536, 0x00000002 }, /* MOVE */ { op_30f9_0_comp_ff, 12537, 0x00000002 }, /* MOVE */ { op_30fa_0_comp_ff, 12538, 0x00000002 }, /* MOVE */ { op_30fb_0_comp_ff, 12539, 0x00000002 }, /* MOVE */ { op_30fc_0_comp_ff, 12540, 0x00000002 }, /* MOVE */ { op_3100_0_comp_ff, 12544, 0x00000000 }, /* MOVE */ { op_3108_0_comp_ff, 12552, 0x00000000 }, /* MOVE */ { op_3110_0_comp_ff, 12560, 0x00000000 }, /* MOVE */ { op_3118_0_comp_ff, 12568, 0x00000000 }, /* MOVE */ { op_3120_0_comp_ff, 12576, 0x00000000 }, /* MOVE */ { op_3128_0_comp_ff, 12584, 0x00000002 }, /* MOVE */ { op_3130_0_comp_ff, 12592, 0x00000002 }, /* MOVE */ { op_3138_0_comp_ff, 12600, 0x00000002 }, /* MOVE */ { op_3139_0_comp_ff, 12601, 0x00000002 }, /* MOVE */ { op_313a_0_comp_ff, 12602, 0x00000002 }, /* MOVE */ { op_313b_0_comp_ff, 12603, 0x00000002 }, /* MOVE */ { op_313c_0_comp_ff, 12604, 0x00000002 }, /* MOVE */ { op_3140_0_comp_ff, 12608, 0x00000002 }, /* MOVE */ { op_3148_0_comp_ff, 12616, 0x00000002 }, /* MOVE */ { op_3150_0_comp_ff, 12624, 0x00000002 }, /* MOVE */ { op_3158_0_comp_ff, 12632, 0x00000002 }, /* MOVE */ { op_3160_0_comp_ff, 12640, 0x00000002 }, /* MOVE */ { op_3168_0_comp_ff, 12648, 0x00000002 }, /* MOVE */ { op_3170_0_comp_ff, 12656, 0x00000002 }, /* MOVE */ { op_3178_0_comp_ff, 12664, 0x00000002 }, /* MOVE */ { op_3179_0_comp_ff, 12665, 0x00000002 }, /* MOVE */ { op_317a_0_comp_ff, 12666, 0x00000002 }, /* MOVE */ { op_317b_0_comp_ff, 12667, 0x00000002 }, /* MOVE */ { op_317c_0_comp_ff, 12668, 0x00000002 }, /* MOVE */ { op_3180_0_comp_ff, 12672, 0x00000002 }, /* MOVE */ { op_3188_0_comp_ff, 12680, 0x00000002 }, /* MOVE */ { op_3190_0_comp_ff, 12688, 0x00000002 }, /* MOVE */ { op_3198_0_comp_ff, 12696, 0x00000002 }, /* MOVE */ { op_31a0_0_comp_ff, 12704, 0x00000002 }, /* MOVE */ { op_31a8_0_comp_ff, 12712, 0x00000002 }, /* MOVE */ { op_31b0_0_comp_ff, 12720, 0x00000002 }, /* MOVE */ { op_31b8_0_comp_ff, 12728, 0x00000002 }, /* MOVE */ { op_31b9_0_comp_ff, 12729, 0x00000002 }, /* MOVE */ { op_31ba_0_comp_ff, 12730, 0x00000002 }, /* MOVE */ { op_31bb_0_comp_ff, 12731, 0x00000002 }, /* MOVE */ { op_31bc_0_comp_ff, 12732, 0x00000002 }, /* MOVE */ { op_31c0_0_comp_ff, 12736, 0x00000002 }, /* MOVE */ { op_31c8_0_comp_ff, 12744, 0x00000002 }, /* MOVE */ { op_31d0_0_comp_ff, 12752, 0x00000002 }, /* MOVE */ { op_31d8_0_comp_ff, 12760, 0x00000002 }, /* MOVE */ { op_31e0_0_comp_ff, 12768, 0x00000002 }, /* MOVE */ { op_31e8_0_comp_ff, 12776, 0x00000002 }, /* MOVE */ { op_31f0_0_comp_ff, 12784, 0x00000002 }, /* MOVE */ { op_31f8_0_comp_ff, 12792, 0x00000002 }, /* MOVE */ { op_31f9_0_comp_ff, 12793, 0x00000002 }, /* MOVE */ { op_31fa_0_comp_ff, 12794, 0x00000002 }, /* MOVE */ { op_31fb_0_comp_ff, 12795, 0x00000002 }, /* MOVE */ { op_31fc_0_comp_ff, 12796, 0x00000002 }, /* MOVE */ { op_33c0_0_comp_ff, 13248, 0x00000002 }, /* MOVE */ { op_33c8_0_comp_ff, 13256, 0x00000002 }, /* MOVE */ { op_33d0_0_comp_ff, 13264, 0x00000002 }, /* MOVE */ { op_33d8_0_comp_ff, 13272, 0x00000002 }, /* MOVE */ { op_33e0_0_comp_ff, 13280, 0x00000002 }, /* MOVE */ { op_33e8_0_comp_ff, 13288, 0x00000002 }, /* MOVE */ { op_33f0_0_comp_ff, 13296, 0x00000002 }, /* MOVE */ { op_33f8_0_comp_ff, 13304, 0x00000002 }, /* MOVE */ { op_33f9_0_comp_ff, 13305, 0x00000002 }, /* MOVE */ { op_33fa_0_comp_ff, 13306, 0x00000002 }, /* MOVE */ { op_33fb_0_comp_ff, 13307, 0x00000002 }, /* MOVE */ { op_33fc_0_comp_ff, 13308, 0x00000002 }, /* MOVE */ { op_4000_0_comp_ff, 16384, 0x00000004 }, /* NEGX */ { op_4010_0_comp_ff, 16400, 0x00000004 }, /* NEGX */ { op_4018_0_comp_ff, 16408, 0x00000004 }, /* NEGX */ { op_4020_0_comp_ff, 16416, 0x00000004 }, /* NEGX */ { op_4028_0_comp_ff, 16424, 0x00000006 }, /* NEGX */ { op_4030_0_comp_ff, 16432, 0x00000006 }, /* NEGX */ { op_4038_0_comp_ff, 16440, 0x00000006 }, /* NEGX */ { op_4039_0_comp_ff, 16441, 0x00000006 }, /* NEGX */ { op_4040_0_comp_ff, 16448, 0x00000004 }, /* NEGX */ { op_4050_0_comp_ff, 16464, 0x00000004 }, /* NEGX */ { op_4058_0_comp_ff, 16472, 0x00000004 }, /* NEGX */ { op_4060_0_comp_ff, 16480, 0x00000004 }, /* NEGX */ { op_4068_0_comp_ff, 16488, 0x00000006 }, /* NEGX */ { op_4070_0_comp_ff, 16496, 0x00000006 }, /* NEGX */ { op_4078_0_comp_ff, 16504, 0x00000006 }, /* NEGX */ { op_4079_0_comp_ff, 16505, 0x00000006 }, /* NEGX */ { op_4080_0_comp_ff, 16512, 0x00000004 }, /* NEGX */ { op_4090_0_comp_ff, 16528, 0x00000004 }, /* NEGX */ { op_4098_0_comp_ff, 16536, 0x00000004 }, /* NEGX */ { op_40a0_0_comp_ff, 16544, 0x00000004 }, /* NEGX */ { op_40a8_0_comp_ff, 16552, 0x00000006 }, /* NEGX */ { op_40b0_0_comp_ff, 16560, 0x00000006 }, /* NEGX */ { op_40b8_0_comp_ff, 16568, 0x00000006 }, /* NEGX */ { op_40b9_0_comp_ff, 16569, 0x00000006 }, /* NEGX */ { NULL, 16576, 0x00000001 }, /* MVSR2 */ { NULL, 16592, 0x00000001 }, /* MVSR2 */ { NULL, 16600, 0x00000001 }, /* MVSR2 */ { NULL, 16608, 0x00000001 }, /* MVSR2 */ { NULL, 16616, 0x00000001 }, /* MVSR2 */ { NULL, 16624, 0x00000001 }, /* MVSR2 */ { NULL, 16632, 0x00000001 }, /* MVSR2 */ { NULL, 16633, 0x00000001 }, /* MVSR2 */ { NULL, 16640, 0x00000001 }, /* CHK */ { NULL, 16656, 0x00000001 }, /* CHK */ { NULL, 16664, 0x00000001 }, /* CHK */ { NULL, 16672, 0x00000001 }, /* CHK */ { NULL, 16680, 0x00000001 }, /* CHK */ { NULL, 16688, 0x00000001 }, /* CHK */ { NULL, 16696, 0x00000001 }, /* CHK */ { NULL, 16697, 0x00000001 }, /* CHK */ { NULL, 16698, 0x00000001 }, /* CHK */ { NULL, 16699, 0x00000001 }, /* CHK */ { NULL, 16700, 0x00000001 }, /* CHK */ { NULL, 16768, 0x00000001 }, /* CHK */ { NULL, 16784, 0x00000001 }, /* CHK */ { NULL, 16792, 0x00000001 }, /* CHK */ { NULL, 16800, 0x00000001 }, /* CHK */ { NULL, 16808, 0x00000001 }, /* CHK */ { NULL, 16816, 0x00000001 }, /* CHK */ { NULL, 16824, 0x00000001 }, /* CHK */ { NULL, 16825, 0x00000001 }, /* CHK */ { NULL, 16826, 0x00000001 }, /* CHK */ { NULL, 16827, 0x00000001 }, /* CHK */ { NULL, 16828, 0x00000001 }, /* CHK */ { op_41d0_0_comp_ff, 16848, 0x00000000 }, /* LEA */ { op_41e8_0_comp_ff, 16872, 0x00000002 }, /* LEA */ { op_41f0_0_comp_ff, 16880, 0x00000002 }, /* LEA */ { op_41f8_0_comp_ff, 16888, 0x00000002 }, /* LEA */ { op_41f9_0_comp_ff, 16889, 0x00000002 }, /* LEA */ { op_41fa_0_comp_ff, 16890, 0x00000002 }, /* LEA */ { op_41fb_0_comp_ff, 16891, 0x00000002 }, /* LEA */ { op_4200_0_comp_ff, 16896, 0x00000000 }, /* CLR */ { op_4210_0_comp_ff, 16912, 0x00000000 }, /* CLR */ { op_4218_0_comp_ff, 16920, 0x00000000 }, /* CLR */ { op_4220_0_comp_ff, 16928, 0x00000000 }, /* CLR */ { op_4228_0_comp_ff, 16936, 0x00000002 }, /* CLR */ { op_4230_0_comp_ff, 16944, 0x00000002 }, /* CLR */ { op_4238_0_comp_ff, 16952, 0x00000002 }, /* CLR */ { op_4239_0_comp_ff, 16953, 0x00000002 }, /* CLR */ { op_4240_0_comp_ff, 16960, 0x00000000 }, /* CLR */ { op_4250_0_comp_ff, 16976, 0x00000000 }, /* CLR */ { op_4258_0_comp_ff, 16984, 0x00000000 }, /* CLR */ { op_4260_0_comp_ff, 16992, 0x00000000 }, /* CLR */ { op_4268_0_comp_ff, 17000, 0x00000002 }, /* CLR */ { op_4270_0_comp_ff, 17008, 0x00000002 }, /* CLR */ { op_4278_0_comp_ff, 17016, 0x00000002 }, /* CLR */ { op_4279_0_comp_ff, 17017, 0x00000002 }, /* CLR */ { op_4280_0_comp_ff, 17024, 0x00000000 }, /* CLR */ { op_4290_0_comp_ff, 17040, 0x00000000 }, /* CLR */ { op_4298_0_comp_ff, 17048, 0x00000000 }, /* CLR */ { op_42a0_0_comp_ff, 17056, 0x00000000 }, /* CLR */ { op_42a8_0_comp_ff, 17064, 0x00000002 }, /* CLR */ { op_42b0_0_comp_ff, 17072, 0x00000002 }, /* CLR */ { op_42b8_0_comp_ff, 17080, 0x00000002 }, /* CLR */ { op_42b9_0_comp_ff, 17081, 0x00000002 }, /* CLR */ { NULL, 17088, 0x00000001 }, /* MVSR2 */ { NULL, 17104, 0x00000001 }, /* MVSR2 */ { NULL, 17112, 0x00000001 }, /* MVSR2 */ { NULL, 17120, 0x00000001 }, /* MVSR2 */ { NULL, 17128, 0x00000001 }, /* MVSR2 */ { NULL, 17136, 0x00000001 }, /* MVSR2 */ { NULL, 17144, 0x00000001 }, /* MVSR2 */ { NULL, 17145, 0x00000001 }, /* MVSR2 */ { op_4400_0_comp_ff, 17408, 0x00000000 }, /* NEG */ { op_4410_0_comp_ff, 17424, 0x00000000 }, /* NEG */ { op_4418_0_comp_ff, 17432, 0x00000000 }, /* NEG */ { op_4420_0_comp_ff, 17440, 0x00000000 }, /* NEG */ { op_4428_0_comp_ff, 17448, 0x00000002 }, /* NEG */ { op_4430_0_comp_ff, 17456, 0x00000002 }, /* NEG */ { op_4438_0_comp_ff, 17464, 0x00000002 }, /* NEG */ { op_4439_0_comp_ff, 17465, 0x00000002 }, /* NEG */ { op_4440_0_comp_ff, 17472, 0x00000000 }, /* NEG */ { op_4450_0_comp_ff, 17488, 0x00000000 }, /* NEG */ { op_4458_0_comp_ff, 17496, 0x00000000 }, /* NEG */ { op_4460_0_comp_ff, 17504, 0x00000000 }, /* NEG */ { op_4468_0_comp_ff, 17512, 0x00000002 }, /* NEG */ { op_4470_0_comp_ff, 17520, 0x00000002 }, /* NEG */ { op_4478_0_comp_ff, 17528, 0x00000002 }, /* NEG */ { op_4479_0_comp_ff, 17529, 0x00000002 }, /* NEG */ { op_4480_0_comp_ff, 17536, 0x00000000 }, /* NEG */ { op_4490_0_comp_ff, 17552, 0x00000000 }, /* NEG */ { op_4498_0_comp_ff, 17560, 0x00000000 }, /* NEG */ { op_44a0_0_comp_ff, 17568, 0x00000000 }, /* NEG */ { op_44a8_0_comp_ff, 17576, 0x00000002 }, /* NEG */ { op_44b0_0_comp_ff, 17584, 0x00000002 }, /* NEG */ { op_44b8_0_comp_ff, 17592, 0x00000002 }, /* NEG */ { op_44b9_0_comp_ff, 17593, 0x00000002 }, /* NEG */ { NULL, 17600, 0x00000001 }, /* MV2SR */ { NULL, 17616, 0x00000001 }, /* MV2SR */ { NULL, 17624, 0x00000001 }, /* MV2SR */ { NULL, 17632, 0x00000001 }, /* MV2SR */ { NULL, 17640, 0x00000001 }, /* MV2SR */ { NULL, 17648, 0x00000001 }, /* MV2SR */ { NULL, 17656, 0x00000001 }, /* MV2SR */ { NULL, 17657, 0x00000001 }, /* MV2SR */ { NULL, 17658, 0x00000001 }, /* MV2SR */ { NULL, 17659, 0x00000001 }, /* MV2SR */ { NULL, 17660, 0x00000001 }, /* MV2SR */ { op_4600_0_comp_ff, 17920, 0x00000000 }, /* NOT */ { op_4610_0_comp_ff, 17936, 0x00000000 }, /* NOT */ { op_4618_0_comp_ff, 17944, 0x00000000 }, /* NOT */ { op_4620_0_comp_ff, 17952, 0x00000000 }, /* NOT */ { op_4628_0_comp_ff, 17960, 0x00000002 }, /* NOT */ { op_4630_0_comp_ff, 17968, 0x00000002 }, /* NOT */ { op_4638_0_comp_ff, 17976, 0x00000002 }, /* NOT */ { op_4639_0_comp_ff, 17977, 0x00000002 }, /* NOT */ { op_4640_0_comp_ff, 17984, 0x00000000 }, /* NOT */ { op_4650_0_comp_ff, 18000, 0x00000000 }, /* NOT */ { op_4658_0_comp_ff, 18008, 0x00000000 }, /* NOT */ { op_4660_0_comp_ff, 18016, 0x00000000 }, /* NOT */ { op_4668_0_comp_ff, 18024, 0x00000002 }, /* NOT */ { op_4670_0_comp_ff, 18032, 0x00000002 }, /* NOT */ { op_4678_0_comp_ff, 18040, 0x00000002 }, /* NOT */ { op_4679_0_comp_ff, 18041, 0x00000002 }, /* NOT */ { op_4680_0_comp_ff, 18048, 0x00000000 }, /* NOT */ { op_4690_0_comp_ff, 18064, 0x00000000 }, /* NOT */ { op_4698_0_comp_ff, 18072, 0x00000000 }, /* NOT */ { op_46a0_0_comp_ff, 18080, 0x00000000 }, /* NOT */ { op_46a8_0_comp_ff, 18088, 0x00000002 }, /* NOT */ { op_46b0_0_comp_ff, 18096, 0x00000002 }, /* NOT */ { op_46b8_0_comp_ff, 18104, 0x00000002 }, /* NOT */ { op_46b9_0_comp_ff, 18105, 0x00000002 }, /* NOT */ { NULL, 18112, 0x00000001 }, /* MV2SR */ { NULL, 18128, 0x00000001 }, /* MV2SR */ { NULL, 18136, 0x00000001 }, /* MV2SR */ { NULL, 18144, 0x00000001 }, /* MV2SR */ { NULL, 18152, 0x00000001 }, /* MV2SR */ { NULL, 18160, 0x00000001 }, /* MV2SR */ { NULL, 18168, 0x00000001 }, /* MV2SR */ { NULL, 18169, 0x00000001 }, /* MV2SR */ { NULL, 18170, 0x00000001 }, /* MV2SR */ { NULL, 18171, 0x00000001 }, /* MV2SR */ { NULL, 18172, 0x00000001 }, /* MV2SR */ { NULL, 18432, 0x00000000 }, /* NBCD */ { op_4808_0_comp_ff, 18440, 0x00000002 }, /* LINK */ { NULL, 18448, 0x00000000 }, /* NBCD */ { NULL, 18456, 0x00000000 }, /* NBCD */ { NULL, 18464, 0x00000000 }, /* NBCD */ { NULL, 18472, 0x00000000 }, /* NBCD */ { NULL, 18480, 0x00000000 }, /* NBCD */ { NULL, 18488, 0x00000000 }, /* NBCD */ { NULL, 18489, 0x00000000 }, /* NBCD */ { op_4840_0_comp_ff, 18496, 0x00000000 }, /* SWAP */ { NULL, 18504, 0x00000001 }, /* BKPT */ { op_4850_0_comp_ff, 18512, 0x00000000 }, /* PEA */ { op_4868_0_comp_ff, 18536, 0x00000002 }, /* PEA */ { op_4870_0_comp_ff, 18544, 0x00000002 }, /* PEA */ { op_4878_0_comp_ff, 18552, 0x00000002 }, /* PEA */ { op_4879_0_comp_ff, 18553, 0x00000002 }, /* PEA */ { op_487a_0_comp_ff, 18554, 0x00000002 }, /* PEA */ { op_487b_0_comp_ff, 18555, 0x00000002 }, /* PEA */ { op_4880_0_comp_ff, 18560, 0x00000000 }, /* EXT */ { op_4890_0_comp_ff, 18576, 0x00000002 }, /* MVMLE */ { op_48a0_0_comp_ff, 18592, 0x00000002 }, /* MVMLE */ { op_48a8_0_comp_ff, 18600, 0x00000002 }, /* MVMLE */ { op_48b0_0_comp_ff, 18608, 0x00000002 }, /* MVMLE */ { op_48b8_0_comp_ff, 18616, 0x00000002 }, /* MVMLE */ { op_48b9_0_comp_ff, 18617, 0x00000002 }, /* MVMLE */ { op_48c0_0_comp_ff, 18624, 0x00000000 }, /* EXT */ { op_48d0_0_comp_ff, 18640, 0x00000002 }, /* MVMLE */ { op_48e0_0_comp_ff, 18656, 0x00000002 }, /* MVMLE */ { op_48e8_0_comp_ff, 18664, 0x00000002 }, /* MVMLE */ { op_48f0_0_comp_ff, 18672, 0x00000002 }, /* MVMLE */ { op_48f8_0_comp_ff, 18680, 0x00000002 }, /* MVMLE */ { op_48f9_0_comp_ff, 18681, 0x00000002 }, /* MVMLE */ { op_49c0_0_comp_ff, 18880, 0x00000000 }, /* EXT */ { op_4a00_0_comp_ff, 18944, 0x00000000 }, /* TST */ { op_4a10_0_comp_ff, 18960, 0x00000000 }, /* TST */ { op_4a18_0_comp_ff, 18968, 0x00000000 }, /* TST */ { op_4a20_0_comp_ff, 18976, 0x00000000 }, /* TST */ { op_4a28_0_comp_ff, 18984, 0x00000002 }, /* TST */ { op_4a30_0_comp_ff, 18992, 0x00000002 }, /* TST */ { op_4a38_0_comp_ff, 19000, 0x00000002 }, /* TST */ { op_4a39_0_comp_ff, 19001, 0x00000002 }, /* TST */ { op_4a3a_0_comp_ff, 19002, 0x00000002 }, /* TST */ { op_4a3b_0_comp_ff, 19003, 0x00000002 }, /* TST */ { op_4a3c_0_comp_ff, 19004, 0x00000002 }, /* TST */ { op_4a40_0_comp_ff, 19008, 0x00000000 }, /* TST */ { op_4a48_0_comp_ff, 19016, 0x00000000 }, /* TST */ { op_4a50_0_comp_ff, 19024, 0x00000000 }, /* TST */ { op_4a58_0_comp_ff, 19032, 0x00000000 }, /* TST */ { op_4a60_0_comp_ff, 19040, 0x00000000 }, /* TST */ { op_4a68_0_comp_ff, 19048, 0x00000002 }, /* TST */ { op_4a70_0_comp_ff, 19056, 0x00000002 }, /* TST */ { op_4a78_0_comp_ff, 19064, 0x00000002 }, /* TST */ { op_4a79_0_comp_ff, 19065, 0x00000002 }, /* TST */ { op_4a7a_0_comp_ff, 19066, 0x00000002 }, /* TST */ { op_4a7b_0_comp_ff, 19067, 0x00000002 }, /* TST */ { op_4a7c_0_comp_ff, 19068, 0x00000002 }, /* TST */ { op_4a80_0_comp_ff, 19072, 0x00000000 }, /* TST */ { op_4a88_0_comp_ff, 19080, 0x00000000 }, /* TST */ { op_4a90_0_comp_ff, 19088, 0x00000000 }, /* TST */ { op_4a98_0_comp_ff, 19096, 0x00000000 }, /* TST */ { op_4aa0_0_comp_ff, 19104, 0x00000000 }, /* TST */ { op_4aa8_0_comp_ff, 19112, 0x00000002 }, /* TST */ { op_4ab0_0_comp_ff, 19120, 0x00000002 }, /* TST */ { op_4ab8_0_comp_ff, 19128, 0x00000002 }, /* TST */ { op_4ab9_0_comp_ff, 19129, 0x00000002 }, /* TST */ { op_4aba_0_comp_ff, 19130, 0x00000002 }, /* TST */ { op_4abb_0_comp_ff, 19131, 0x00000002 }, /* TST */ { op_4abc_0_comp_ff, 19132, 0x00000002 }, /* TST */ { NULL, 19136, 0x00000000 }, /* TAS */ { NULL, 19152, 0x00000000 }, /* TAS */ { NULL, 19160, 0x00000000 }, /* TAS */ { NULL, 19168, 0x00000000 }, /* TAS */ { NULL, 19176, 0x00000000 }, /* TAS */ { NULL, 19184, 0x00000000 }, /* TAS */ { NULL, 19192, 0x00000000 }, /* TAS */ { NULL, 19193, 0x00000000 }, /* TAS */ { NULL, 19456, 0x00000000 }, /* MULL */ { NULL, 19472, 0x00000000 }, /* MULL */ { NULL, 19480, 0x00000000 }, /* MULL */ { NULL, 19488, 0x00000000 }, /* MULL */ { NULL, 19496, 0x00000000 }, /* MULL */ { NULL, 19504, 0x00000000 }, /* MULL */ { NULL, 19512, 0x00000000 }, /* MULL */ { NULL, 19513, 0x00000000 }, /* MULL */ { NULL, 19514, 0x00000000 }, /* MULL */ { NULL, 19515, 0x00000000 }, /* MULL */ { NULL, 19516, 0x00000000 }, /* MULL */ { NULL, 19520, 0x00000001 }, /* DIVL */ { NULL, 19536, 0x00000001 }, /* DIVL */ { NULL, 19544, 0x00000001 }, /* DIVL */ { NULL, 19552, 0x00000001 }, /* DIVL */ { NULL, 19560, 0x00000001 }, /* DIVL */ { NULL, 19568, 0x00000001 }, /* DIVL */ { NULL, 19576, 0x00000001 }, /* DIVL */ { NULL, 19577, 0x00000001 }, /* DIVL */ { NULL, 19578, 0x00000001 }, /* DIVL */ { NULL, 19579, 0x00000001 }, /* DIVL */ { NULL, 19580, 0x00000001 }, /* DIVL */ { op_4c90_0_comp_ff, 19600, 0x00000002 }, /* MVMEL */ { op_4c98_0_comp_ff, 19608, 0x00000002 }, /* MVMEL */ { op_4ca8_0_comp_ff, 19624, 0x00000002 }, /* MVMEL */ { op_4cb0_0_comp_ff, 19632, 0x00000002 }, /* MVMEL */ { op_4cb8_0_comp_ff, 19640, 0x00000002 }, /* MVMEL */ { op_4cb9_0_comp_ff, 19641, 0x00000002 }, /* MVMEL */ { op_4cba_0_comp_ff, 19642, 0x00000002 }, /* MVMEL */ { op_4cbb_0_comp_ff, 19643, 0x00000002 }, /* MVMEL */ { op_4cd0_0_comp_ff, 19664, 0x00000002 }, /* MVMEL */ { op_4cd8_0_comp_ff, 19672, 0x00000002 }, /* MVMEL */ { op_4ce8_0_comp_ff, 19688, 0x00000002 }, /* MVMEL */ { op_4cf0_0_comp_ff, 19696, 0x00000002 }, /* MVMEL */ { op_4cf8_0_comp_ff, 19704, 0x00000002 }, /* MVMEL */ { op_4cf9_0_comp_ff, 19705, 0x00000002 }, /* MVMEL */ { op_4cfa_0_comp_ff, 19706, 0x00000002 }, /* MVMEL */ { op_4cfb_0_comp_ff, 19707, 0x00000002 }, /* MVMEL */ { NULL, 20032, 0x00000001 }, /* TRAP */ { op_4e50_0_comp_ff, 20048, 0x00000002 }, /* LINK */ { op_4e58_0_comp_ff, 20056, 0x00000000 }, /* UNLK */ { NULL, 20064, 0x00000001 }, /* MVR2USP */ { NULL, 20072, 0x00000001 }, /* MVUSP2R */ { NULL, 20080, 0x00000001 }, /* RESET */ { op_4e71_0_comp_ff, 20081, 0x00000000 }, /* NOP */ { NULL, 20082, 0x00000001 }, /* STOP */ { NULL, 20083, 0x00000001 }, /* RTE */ { op_4e74_0_comp_ff, 20084, 0x00000003 }, /* RTD */ { op_4e75_0_comp_ff, 20085, 0x00000001 }, /* RTS */ { NULL, 20086, 0x00000001 }, /* TRAPV */ { NULL, 20087, 0x00000001 }, /* RTR */ { NULL, 20090, 0x00000001 }, /* MOVEC2 */ { NULL, 20091, 0x00000001 }, /* MOVE2C */ { op_4e90_0_comp_ff, 20112, 0x00000001 }, /* JSR */ { op_4ea8_0_comp_ff, 20136, 0x00000003 }, /* JSR */ { op_4eb0_0_comp_ff, 20144, 0x00000003 }, /* JSR */ { op_4eb8_0_comp_ff, 20152, 0x00000003 }, /* JSR */ { op_4eb9_0_comp_ff, 20153, 0x00000003 }, /* JSR */ { op_4eba_0_comp_ff, 20154, 0x00000003 }, /* JSR */ { op_4ebb_0_comp_ff, 20155, 0x00000003 }, /* JSR */ { op_4ed0_0_comp_ff, 20176, 0x00000001 }, /* JMP */ { op_4ee8_0_comp_ff, 20200, 0x00000003 }, /* JMP */ { op_4ef0_0_comp_ff, 20208, 0x00000003 }, /* JMP */ { op_4ef8_0_comp_ff, 20216, 0x00000003 }, /* JMP */ { op_4ef9_0_comp_ff, 20217, 0x00000003 }, /* JMP */ { op_4efa_0_comp_ff, 20218, 0x00000003 }, /* JMP */ { op_4efb_0_comp_ff, 20219, 0x00000003 }, /* JMP */ { op_5000_0_comp_ff, 20480, 0x00000000 }, /* ADD */ { op_5010_0_comp_ff, 20496, 0x00000000 }, /* ADD */ { op_5018_0_comp_ff, 20504, 0x00000000 }, /* ADD */ { op_5020_0_comp_ff, 20512, 0x00000000 }, /* ADD */ { op_5028_0_comp_ff, 20520, 0x00000002 }, /* ADD */ { op_5030_0_comp_ff, 20528, 0x00000002 }, /* ADD */ { op_5038_0_comp_ff, 20536, 0x00000002 }, /* ADD */ { op_5039_0_comp_ff, 20537, 0x00000002 }, /* ADD */ { op_5040_0_comp_ff, 20544, 0x00000000 }, /* ADD */ { op_5048_0_comp_ff, 20552, 0x00000000 }, /* ADDA */ { op_5050_0_comp_ff, 20560, 0x00000000 }, /* ADD */ { op_5058_0_comp_ff, 20568, 0x00000000 }, /* ADD */ { op_5060_0_comp_ff, 20576, 0x00000000 }, /* ADD */ { op_5068_0_comp_ff, 20584, 0x00000002 }, /* ADD */ { op_5070_0_comp_ff, 20592, 0x00000002 }, /* ADD */ { op_5078_0_comp_ff, 20600, 0x00000002 }, /* ADD */ { op_5079_0_comp_ff, 20601, 0x00000002 }, /* ADD */ { op_5080_0_comp_ff, 20608, 0x00000000 }, /* ADD */ { op_5088_0_comp_ff, 20616, 0x00000000 }, /* ADDA */ { op_5090_0_comp_ff, 20624, 0x00000000 }, /* ADD */ { op_5098_0_comp_ff, 20632, 0x00000000 }, /* ADD */ { op_50a0_0_comp_ff, 20640, 0x00000000 }, /* ADD */ { op_50a8_0_comp_ff, 20648, 0x00000002 }, /* ADD */ { op_50b0_0_comp_ff, 20656, 0x00000002 }, /* ADD */ { op_50b8_0_comp_ff, 20664, 0x00000002 }, /* ADD */ { op_50b9_0_comp_ff, 20665, 0x00000002 }, /* ADD */ { op_50c0_0_comp_ff, 20672, 0x00000000 }, /* Scc */ { op_50c8_0_comp_ff, 20680, 0x00000007 }, /* DBcc */ { op_50d0_0_comp_ff, 20688, 0x00000000 }, /* Scc */ { op_50d8_0_comp_ff, 20696, 0x00000000 }, /* Scc */ { op_50e0_0_comp_ff, 20704, 0x00000000 }, /* Scc */ { op_50e8_0_comp_ff, 20712, 0x00000002 }, /* Scc */ { op_50f0_0_comp_ff, 20720, 0x00000002 }, /* Scc */ { op_50f8_0_comp_ff, 20728, 0x00000002 }, /* Scc */ { op_50f9_0_comp_ff, 20729, 0x00000002 }, /* Scc */ { NULL, 20730, 0x00000001 }, /* TRAPcc */ { NULL, 20731, 0x00000001 }, /* TRAPcc */ { NULL, 20732, 0x00000001 }, /* TRAPcc */ { op_5100_0_comp_ff, 20736, 0x00000000 }, /* SUB */ { op_5110_0_comp_ff, 20752, 0x00000000 }, /* SUB */ { op_5118_0_comp_ff, 20760, 0x00000000 }, /* SUB */ { op_5120_0_comp_ff, 20768, 0x00000000 }, /* SUB */ { op_5128_0_comp_ff, 20776, 0x00000002 }, /* SUB */ { op_5130_0_comp_ff, 20784, 0x00000002 }, /* SUB */ { op_5138_0_comp_ff, 20792, 0x00000002 }, /* SUB */ { op_5139_0_comp_ff, 20793, 0x00000002 }, /* SUB */ { op_5140_0_comp_ff, 20800, 0x00000000 }, /* SUB */ { op_5148_0_comp_ff, 20808, 0x00000000 }, /* SUBA */ { op_5150_0_comp_ff, 20816, 0x00000000 }, /* SUB */ { op_5158_0_comp_ff, 20824, 0x00000000 }, /* SUB */ { op_5160_0_comp_ff, 20832, 0x00000000 }, /* SUB */ { op_5168_0_comp_ff, 20840, 0x00000002 }, /* SUB */ { op_5170_0_comp_ff, 20848, 0x00000002 }, /* SUB */ { op_5178_0_comp_ff, 20856, 0x00000002 }, /* SUB */ { op_5179_0_comp_ff, 20857, 0x00000002 }, /* SUB */ { op_5180_0_comp_ff, 20864, 0x00000000 }, /* SUB */ { op_5188_0_comp_ff, 20872, 0x00000000 }, /* SUBA */ { op_5190_0_comp_ff, 20880, 0x00000000 }, /* SUB */ { op_5198_0_comp_ff, 20888, 0x00000000 }, /* SUB */ { op_51a0_0_comp_ff, 20896, 0x00000000 }, /* SUB */ { op_51a8_0_comp_ff, 20904, 0x00000002 }, /* SUB */ { op_51b0_0_comp_ff, 20912, 0x00000002 }, /* SUB */ { op_51b8_0_comp_ff, 20920, 0x00000002 }, /* SUB */ { op_51b9_0_comp_ff, 20921, 0x00000002 }, /* SUB */ { op_51c0_0_comp_ff, 20928, 0x00000000 }, /* Scc */ { op_51c8_0_comp_ff, 20936, 0x00000007 }, /* DBcc */ { op_51d0_0_comp_ff, 20944, 0x00000000 }, /* Scc */ { op_51d8_0_comp_ff, 20952, 0x00000000 }, /* Scc */ { op_51e0_0_comp_ff, 20960, 0x00000000 }, /* Scc */ { op_51e8_0_comp_ff, 20968, 0x00000002 }, /* Scc */ { op_51f0_0_comp_ff, 20976, 0x00000002 }, /* Scc */ { op_51f8_0_comp_ff, 20984, 0x00000002 }, /* Scc */ { op_51f9_0_comp_ff, 20985, 0x00000002 }, /* Scc */ { NULL, 20986, 0x00000001 }, /* TRAPcc */ { NULL, 20987, 0x00000001 }, /* TRAPcc */ { NULL, 20988, 0x00000001 }, /* TRAPcc */ { op_52c0_0_comp_ff, 21184, 0x00000000 }, /* Scc */ { op_52c8_0_comp_ff, 21192, 0x00000007 }, /* DBcc */ { op_52d0_0_comp_ff, 21200, 0x00000000 }, /* Scc */ { op_52d8_0_comp_ff, 21208, 0x00000000 }, /* Scc */ { op_52e0_0_comp_ff, 21216, 0x00000000 }, /* Scc */ { op_52e8_0_comp_ff, 21224, 0x00000002 }, /* Scc */ { op_52f0_0_comp_ff, 21232, 0x00000002 }, /* Scc */ { op_52f8_0_comp_ff, 21240, 0x00000002 }, /* Scc */ { op_52f9_0_comp_ff, 21241, 0x00000002 }, /* Scc */ { NULL, 21242, 0x00000001 }, /* TRAPcc */ { NULL, 21243, 0x00000001 }, /* TRAPcc */ { NULL, 21244, 0x00000001 }, /* TRAPcc */ { op_53c0_0_comp_ff, 21440, 0x00000000 }, /* Scc */ { op_53c8_0_comp_ff, 21448, 0x00000007 }, /* DBcc */ { op_53d0_0_comp_ff, 21456, 0x00000000 }, /* Scc */ { op_53d8_0_comp_ff, 21464, 0x00000000 }, /* Scc */ { op_53e0_0_comp_ff, 21472, 0x00000000 }, /* Scc */ { op_53e8_0_comp_ff, 21480, 0x00000002 }, /* Scc */ { op_53f0_0_comp_ff, 21488, 0x00000002 }, /* Scc */ { op_53f8_0_comp_ff, 21496, 0x00000002 }, /* Scc */ { op_53f9_0_comp_ff, 21497, 0x00000002 }, /* Scc */ { NULL, 21498, 0x00000001 }, /* TRAPcc */ { NULL, 21499, 0x00000001 }, /* TRAPcc */ { NULL, 21500, 0x00000001 }, /* TRAPcc */ { op_54c0_0_comp_ff, 21696, 0x00000000 }, /* Scc */ { op_54c8_0_comp_ff, 21704, 0x00000007 }, /* DBcc */ { op_54d0_0_comp_ff, 21712, 0x00000000 }, /* Scc */ { op_54d8_0_comp_ff, 21720, 0x00000000 }, /* Scc */ { op_54e0_0_comp_ff, 21728, 0x00000000 }, /* Scc */ { op_54e8_0_comp_ff, 21736, 0x00000002 }, /* Scc */ { op_54f0_0_comp_ff, 21744, 0x00000002 }, /* Scc */ { op_54f8_0_comp_ff, 21752, 0x00000002 }, /* Scc */ { op_54f9_0_comp_ff, 21753, 0x00000002 }, /* Scc */ { NULL, 21754, 0x00000001 }, /* TRAPcc */ { NULL, 21755, 0x00000001 }, /* TRAPcc */ { NULL, 21756, 0x00000001 }, /* TRAPcc */ { op_55c0_0_comp_ff, 21952, 0x00000000 }, /* Scc */ { op_55c8_0_comp_ff, 21960, 0x00000007 }, /* DBcc */ { op_55d0_0_comp_ff, 21968, 0x00000000 }, /* Scc */ { op_55d8_0_comp_ff, 21976, 0x00000000 }, /* Scc */ { op_55e0_0_comp_ff, 21984, 0x00000000 }, /* Scc */ { op_55e8_0_comp_ff, 21992, 0x00000002 }, /* Scc */ { op_55f0_0_comp_ff, 22000, 0x00000002 }, /* Scc */ { op_55f8_0_comp_ff, 22008, 0x00000002 }, /* Scc */ { op_55f9_0_comp_ff, 22009, 0x00000002 }, /* Scc */ { NULL, 22010, 0x00000001 }, /* TRAPcc */ { NULL, 22011, 0x00000001 }, /* TRAPcc */ { NULL, 22012, 0x00000001 }, /* TRAPcc */ { op_56c0_0_comp_ff, 22208, 0x00000000 }, /* Scc */ { op_56c8_0_comp_ff, 22216, 0x00000007 }, /* DBcc */ { op_56d0_0_comp_ff, 22224, 0x00000000 }, /* Scc */ { op_56d8_0_comp_ff, 22232, 0x00000000 }, /* Scc */ { op_56e0_0_comp_ff, 22240, 0x00000000 }, /* Scc */ { op_56e8_0_comp_ff, 22248, 0x00000002 }, /* Scc */ { op_56f0_0_comp_ff, 22256, 0x00000002 }, /* Scc */ { op_56f8_0_comp_ff, 22264, 0x00000002 }, /* Scc */ { op_56f9_0_comp_ff, 22265, 0x00000002 }, /* Scc */ { NULL, 22266, 0x00000001 }, /* TRAPcc */ { NULL, 22267, 0x00000001 }, /* TRAPcc */ { NULL, 22268, 0x00000001 }, /* TRAPcc */ { op_57c0_0_comp_ff, 22464, 0x00000000 }, /* Scc */ { op_57c8_0_comp_ff, 22472, 0x00000007 }, /* DBcc */ { op_57d0_0_comp_ff, 22480, 0x00000000 }, /* Scc */ { op_57d8_0_comp_ff, 22488, 0x00000000 }, /* Scc */ { op_57e0_0_comp_ff, 22496, 0x00000000 }, /* Scc */ { op_57e8_0_comp_ff, 22504, 0x00000002 }, /* Scc */ { op_57f0_0_comp_ff, 22512, 0x00000002 }, /* Scc */ { op_57f8_0_comp_ff, 22520, 0x00000002 }, /* Scc */ { op_57f9_0_comp_ff, 22521, 0x00000002 }, /* Scc */ { NULL, 22522, 0x00000001 }, /* TRAPcc */ { NULL, 22523, 0x00000001 }, /* TRAPcc */ { NULL, 22524, 0x00000001 }, /* TRAPcc */ { NULL, 22720, 0x00000000 }, /* Scc */ { NULL, 22728, 0x00000007 }, /* DBcc */ { NULL, 22736, 0x00000000 }, /* Scc */ { NULL, 22744, 0x00000000 }, /* Scc */ { NULL, 22752, 0x00000000 }, /* Scc */ { NULL, 22760, 0x00000002 }, /* Scc */ { NULL, 22768, 0x00000002 }, /* Scc */ { NULL, 22776, 0x00000002 }, /* Scc */ { NULL, 22777, 0x00000002 }, /* Scc */ { NULL, 22778, 0x00000001 }, /* TRAPcc */ { NULL, 22779, 0x00000001 }, /* TRAPcc */ { NULL, 22780, 0x00000001 }, /* TRAPcc */ { NULL, 22976, 0x00000000 }, /* Scc */ { NULL, 22984, 0x00000007 }, /* DBcc */ { NULL, 22992, 0x00000000 }, /* Scc */ { NULL, 23000, 0x00000000 }, /* Scc */ { NULL, 23008, 0x00000000 }, /* Scc */ { NULL, 23016, 0x00000002 }, /* Scc */ { NULL, 23024, 0x00000002 }, /* Scc */ { NULL, 23032, 0x00000002 }, /* Scc */ { NULL, 23033, 0x00000002 }, /* Scc */ { NULL, 23034, 0x00000001 }, /* TRAPcc */ { NULL, 23035, 0x00000001 }, /* TRAPcc */ { NULL, 23036, 0x00000001 }, /* TRAPcc */ { op_5ac0_0_comp_ff, 23232, 0x00000000 }, /* Scc */ { op_5ac8_0_comp_ff, 23240, 0x00000007 }, /* DBcc */ { op_5ad0_0_comp_ff, 23248, 0x00000000 }, /* Scc */ { op_5ad8_0_comp_ff, 23256, 0x00000000 }, /* Scc */ { op_5ae0_0_comp_ff, 23264, 0x00000000 }, /* Scc */ { op_5ae8_0_comp_ff, 23272, 0x00000002 }, /* Scc */ { op_5af0_0_comp_ff, 23280, 0x00000002 }, /* Scc */ { op_5af8_0_comp_ff, 23288, 0x00000002 }, /* Scc */ { op_5af9_0_comp_ff, 23289, 0x00000002 }, /* Scc */ { NULL, 23290, 0x00000001 }, /* TRAPcc */ { NULL, 23291, 0x00000001 }, /* TRAPcc */ { NULL, 23292, 0x00000001 }, /* TRAPcc */ { op_5bc0_0_comp_ff, 23488, 0x00000000 }, /* Scc */ { op_5bc8_0_comp_ff, 23496, 0x00000007 }, /* DBcc */ { op_5bd0_0_comp_ff, 23504, 0x00000000 }, /* Scc */ { op_5bd8_0_comp_ff, 23512, 0x00000000 }, /* Scc */ { op_5be0_0_comp_ff, 23520, 0x00000000 }, /* Scc */ { op_5be8_0_comp_ff, 23528, 0x00000002 }, /* Scc */ { op_5bf0_0_comp_ff, 23536, 0x00000002 }, /* Scc */ { op_5bf8_0_comp_ff, 23544, 0x00000002 }, /* Scc */ { op_5bf9_0_comp_ff, 23545, 0x00000002 }, /* Scc */ { NULL, 23546, 0x00000001 }, /* TRAPcc */ { NULL, 23547, 0x00000001 }, /* TRAPcc */ { NULL, 23548, 0x00000001 }, /* TRAPcc */ { op_5cc0_0_comp_ff, 23744, 0x00000000 }, /* Scc */ { op_5cc8_0_comp_ff, 23752, 0x00000007 }, /* DBcc */ { op_5cd0_0_comp_ff, 23760, 0x00000000 }, /* Scc */ { op_5cd8_0_comp_ff, 23768, 0x00000000 }, /* Scc */ { op_5ce0_0_comp_ff, 23776, 0x00000000 }, /* Scc */ { op_5ce8_0_comp_ff, 23784, 0x00000002 }, /* Scc */ { op_5cf0_0_comp_ff, 23792, 0x00000002 }, /* Scc */ { op_5cf8_0_comp_ff, 23800, 0x00000002 }, /* Scc */ { op_5cf9_0_comp_ff, 23801, 0x00000002 }, /* Scc */ { NULL, 23802, 0x00000001 }, /* TRAPcc */ { NULL, 23803, 0x00000001 }, /* TRAPcc */ { NULL, 23804, 0x00000001 }, /* TRAPcc */ { op_5dc0_0_comp_ff, 24000, 0x00000000 }, /* Scc */ { op_5dc8_0_comp_ff, 24008, 0x00000007 }, /* DBcc */ { op_5dd0_0_comp_ff, 24016, 0x00000000 }, /* Scc */ { op_5dd8_0_comp_ff, 24024, 0x00000000 }, /* Scc */ { op_5de0_0_comp_ff, 24032, 0x00000000 }, /* Scc */ { op_5de8_0_comp_ff, 24040, 0x00000002 }, /* Scc */ { op_5df0_0_comp_ff, 24048, 0x00000002 }, /* Scc */ { op_5df8_0_comp_ff, 24056, 0x00000002 }, /* Scc */ { op_5df9_0_comp_ff, 24057, 0x00000002 }, /* Scc */ { NULL, 24058, 0x00000001 }, /* TRAPcc */ { NULL, 24059, 0x00000001 }, /* TRAPcc */ { NULL, 24060, 0x00000001 }, /* TRAPcc */ { op_5ec0_0_comp_ff, 24256, 0x00000000 }, /* Scc */ { op_5ec8_0_comp_ff, 24264, 0x00000007 }, /* DBcc */ { op_5ed0_0_comp_ff, 24272, 0x00000000 }, /* Scc */ { op_5ed8_0_comp_ff, 24280, 0x00000000 }, /* Scc */ { op_5ee0_0_comp_ff, 24288, 0x00000000 }, /* Scc */ { op_5ee8_0_comp_ff, 24296, 0x00000002 }, /* Scc */ { op_5ef0_0_comp_ff, 24304, 0x00000002 }, /* Scc */ { op_5ef8_0_comp_ff, 24312, 0x00000002 }, /* Scc */ { op_5ef9_0_comp_ff, 24313, 0x00000002 }, /* Scc */ { NULL, 24314, 0x00000001 }, /* TRAPcc */ { NULL, 24315, 0x00000001 }, /* TRAPcc */ { NULL, 24316, 0x00000001 }, /* TRAPcc */ { op_5fc0_0_comp_ff, 24512, 0x00000000 }, /* Scc */ { op_5fc8_0_comp_ff, 24520, 0x00000007 }, /* DBcc */ { op_5fd0_0_comp_ff, 24528, 0x00000000 }, /* Scc */ { op_5fd8_0_comp_ff, 24536, 0x00000000 }, /* Scc */ { op_5fe0_0_comp_ff, 24544, 0x00000000 }, /* Scc */ { op_5fe8_0_comp_ff, 24552, 0x00000002 }, /* Scc */ { op_5ff0_0_comp_ff, 24560, 0x00000002 }, /* Scc */ { op_5ff8_0_comp_ff, 24568, 0x00000002 }, /* Scc */ { op_5ff9_0_comp_ff, 24569, 0x00000002 }, /* Scc */ { NULL, 24570, 0x00000001 }, /* TRAPcc */ { NULL, 24571, 0x00000001 }, /* TRAPcc */ { NULL, 24572, 0x00000001 }, /* TRAPcc */ { op_6000_0_comp_ff, 24576, 0x00000012 }, /* Bcc */ { op_6001_0_comp_ff, 24577, 0x00000010 }, /* Bcc */ { op_60ff_0_comp_ff, 24831, 0x00000012 }, /* Bcc */ { op_6100_0_comp_ff, 24832, 0x00000012 }, /* BSR */ { op_6101_0_comp_ff, 24833, 0x00000010 }, /* BSR */ { NULL, 25087, 0x00000012 }, /* BSR */ { op_6200_0_comp_ff, 25088, 0x00000003 }, /* Bcc */ { op_6201_0_comp_ff, 25089, 0x00000001 }, /* Bcc */ { op_62ff_0_comp_ff, 25343, 0x00000003 }, /* Bcc */ { op_6300_0_comp_ff, 25344, 0x00000003 }, /* Bcc */ { op_6301_0_comp_ff, 25345, 0x00000001 }, /* Bcc */ { op_63ff_0_comp_ff, 25599, 0x00000003 }, /* Bcc */ { op_6400_0_comp_ff, 25600, 0x00000003 }, /* Bcc */ { op_6401_0_comp_ff, 25601, 0x00000001 }, /* Bcc */ { op_64ff_0_comp_ff, 25855, 0x00000003 }, /* Bcc */ { op_6500_0_comp_ff, 25856, 0x00000003 }, /* Bcc */ { op_6501_0_comp_ff, 25857, 0x00000001 }, /* Bcc */ { op_65ff_0_comp_ff, 26111, 0x00000003 }, /* Bcc */ { op_6600_0_comp_ff, 26112, 0x00000003 }, /* Bcc */ { op_6601_0_comp_ff, 26113, 0x00000001 }, /* Bcc */ { op_66ff_0_comp_ff, 26367, 0x00000003 }, /* Bcc */ { op_6700_0_comp_ff, 26368, 0x00000003 }, /* Bcc */ { op_6701_0_comp_ff, 26369, 0x00000001 }, /* Bcc */ { op_67ff_0_comp_ff, 26623, 0x00000003 }, /* Bcc */ { NULL, 26624, 0x00000003 }, /* Bcc */ { NULL, 26625, 0x00000001 }, /* Bcc */ { NULL, 26879, 0x00000003 }, /* Bcc */ { NULL, 26880, 0x00000003 }, /* Bcc */ { NULL, 26881, 0x00000001 }, /* Bcc */ { NULL, 27135, 0x00000003 }, /* Bcc */ { op_6a00_0_comp_ff, 27136, 0x00000003 }, /* Bcc */ { op_6a01_0_comp_ff, 27137, 0x00000001 }, /* Bcc */ { op_6aff_0_comp_ff, 27391, 0x00000003 }, /* Bcc */ { op_6b00_0_comp_ff, 27392, 0x00000003 }, /* Bcc */ { op_6b01_0_comp_ff, 27393, 0x00000001 }, /* Bcc */ { op_6bff_0_comp_ff, 27647, 0x00000003 }, /* Bcc */ { op_6c00_0_comp_ff, 27648, 0x00000003 }, /* Bcc */ { op_6c01_0_comp_ff, 27649, 0x00000001 }, /* Bcc */ { op_6cff_0_comp_ff, 27903, 0x00000003 }, /* Bcc */ { op_6d00_0_comp_ff, 27904, 0x00000003 }, /* Bcc */ { op_6d01_0_comp_ff, 27905, 0x00000001 }, /* Bcc */ { op_6dff_0_comp_ff, 28159, 0x00000003 }, /* Bcc */ { op_6e00_0_comp_ff, 28160, 0x00000003 }, /* Bcc */ { op_6e01_0_comp_ff, 28161, 0x00000001 }, /* Bcc */ { op_6eff_0_comp_ff, 28415, 0x00000003 }, /* Bcc */ { op_6f00_0_comp_ff, 28416, 0x00000003 }, /* Bcc */ { op_6f01_0_comp_ff, 28417, 0x00000001 }, /* Bcc */ { op_6fff_0_comp_ff, 28671, 0x00000003 }, /* Bcc */ { op_7000_0_comp_ff, 28672, 0x00000000 }, /* MOVE */ { op_8000_0_comp_ff, 32768, 0x00000000 }, /* OR */ { op_8010_0_comp_ff, 32784, 0x00000000 }, /* OR */ { op_8018_0_comp_ff, 32792, 0x00000000 }, /* OR */ { op_8020_0_comp_ff, 32800, 0x00000000 }, /* OR */ { op_8028_0_comp_ff, 32808, 0x00000002 }, /* OR */ { op_8030_0_comp_ff, 32816, 0x00000002 }, /* OR */ { op_8038_0_comp_ff, 32824, 0x00000002 }, /* OR */ { op_8039_0_comp_ff, 32825, 0x00000002 }, /* OR */ { op_803a_0_comp_ff, 32826, 0x00000002 }, /* OR */ { op_803b_0_comp_ff, 32827, 0x00000002 }, /* OR */ { op_803c_0_comp_ff, 32828, 0x00000002 }, /* OR */ { op_8040_0_comp_ff, 32832, 0x00000000 }, /* OR */ { op_8050_0_comp_ff, 32848, 0x00000000 }, /* OR */ { op_8058_0_comp_ff, 32856, 0x00000000 }, /* OR */ { op_8060_0_comp_ff, 32864, 0x00000000 }, /* OR */ { op_8068_0_comp_ff, 32872, 0x00000002 }, /* OR */ { op_8070_0_comp_ff, 32880, 0x00000002 }, /* OR */ { op_8078_0_comp_ff, 32888, 0x00000002 }, /* OR */ { op_8079_0_comp_ff, 32889, 0x00000002 }, /* OR */ { op_807a_0_comp_ff, 32890, 0x00000002 }, /* OR */ { op_807b_0_comp_ff, 32891, 0x00000002 }, /* OR */ { op_807c_0_comp_ff, 32892, 0x00000002 }, /* OR */ { op_8080_0_comp_ff, 32896, 0x00000000 }, /* OR */ { op_8090_0_comp_ff, 32912, 0x00000000 }, /* OR */ { op_8098_0_comp_ff, 32920, 0x00000000 }, /* OR */ { op_80a0_0_comp_ff, 32928, 0x00000000 }, /* OR */ { op_80a8_0_comp_ff, 32936, 0x00000002 }, /* OR */ { op_80b0_0_comp_ff, 32944, 0x00000002 }, /* OR */ { op_80b8_0_comp_ff, 32952, 0x00000002 }, /* OR */ { op_80b9_0_comp_ff, 32953, 0x00000002 }, /* OR */ { op_80ba_0_comp_ff, 32954, 0x00000002 }, /* OR */ { op_80bb_0_comp_ff, 32955, 0x00000002 }, /* OR */ { op_80bc_0_comp_ff, 32956, 0x00000002 }, /* OR */ { NULL, 32960, 0x00000001 }, /* DIVU */ { NULL, 32976, 0x00000001 }, /* DIVU */ { NULL, 32984, 0x00000001 }, /* DIVU */ { NULL, 32992, 0x00000001 }, /* DIVU */ { NULL, 33000, 0x00000001 }, /* DIVU */ { NULL, 33008, 0x00000001 }, /* DIVU */ { NULL, 33016, 0x00000001 }, /* DIVU */ { NULL, 33017, 0x00000001 }, /* DIVU */ { NULL, 33018, 0x00000001 }, /* DIVU */ { NULL, 33019, 0x00000001 }, /* DIVU */ { NULL, 33020, 0x00000001 }, /* DIVU */ { NULL, 33024, 0x00000000 }, /* SBCD */ { NULL, 33032, 0x00000000 }, /* SBCD */ { op_8110_0_comp_ff, 33040, 0x00000000 }, /* OR */ { op_8118_0_comp_ff, 33048, 0x00000000 }, /* OR */ { op_8120_0_comp_ff, 33056, 0x00000000 }, /* OR */ { op_8128_0_comp_ff, 33064, 0x00000002 }, /* OR */ { op_8130_0_comp_ff, 33072, 0x00000002 }, /* OR */ { op_8138_0_comp_ff, 33080, 0x00000002 }, /* OR */ { op_8139_0_comp_ff, 33081, 0x00000002 }, /* OR */ { NULL, 33088, 0x00000000 }, /* PACK */ { NULL, 33096, 0x00000000 }, /* PACK */ { op_8150_0_comp_ff, 33104, 0x00000000 }, /* OR */ { op_8158_0_comp_ff, 33112, 0x00000000 }, /* OR */ { op_8160_0_comp_ff, 33120, 0x00000000 }, /* OR */ { op_8168_0_comp_ff, 33128, 0x00000002 }, /* OR */ { op_8170_0_comp_ff, 33136, 0x00000002 }, /* OR */ { op_8178_0_comp_ff, 33144, 0x00000002 }, /* OR */ { op_8179_0_comp_ff, 33145, 0x00000002 }, /* OR */ { NULL, 33152, 0x00000000 }, /* UNPK */ { NULL, 33160, 0x00000000 }, /* UNPK */ { op_8190_0_comp_ff, 33168, 0x00000000 }, /* OR */ { op_8198_0_comp_ff, 33176, 0x00000000 }, /* OR */ { op_81a0_0_comp_ff, 33184, 0x00000000 }, /* OR */ { op_81a8_0_comp_ff, 33192, 0x00000002 }, /* OR */ { op_81b0_0_comp_ff, 33200, 0x00000002 }, /* OR */ { op_81b8_0_comp_ff, 33208, 0x00000002 }, /* OR */ { op_81b9_0_comp_ff, 33209, 0x00000002 }, /* OR */ { NULL, 33216, 0x00000001 }, /* DIVS */ { NULL, 33232, 0x00000001 }, /* DIVS */ { NULL, 33240, 0x00000001 }, /* DIVS */ { NULL, 33248, 0x00000001 }, /* DIVS */ { NULL, 33256, 0x00000001 }, /* DIVS */ { NULL, 33264, 0x00000001 }, /* DIVS */ { NULL, 33272, 0x00000001 }, /* DIVS */ { NULL, 33273, 0x00000001 }, /* DIVS */ { NULL, 33274, 0x00000001 }, /* DIVS */ { NULL, 33275, 0x00000001 }, /* DIVS */ { NULL, 33276, 0x00000001 }, /* DIVS */ { op_9000_0_comp_ff, 36864, 0x00000000 }, /* SUB */ { op_9010_0_comp_ff, 36880, 0x00000000 }, /* SUB */ { op_9018_0_comp_ff, 36888, 0x00000000 }, /* SUB */ { op_9020_0_comp_ff, 36896, 0x00000000 }, /* SUB */ { op_9028_0_comp_ff, 36904, 0x00000002 }, /* SUB */ { op_9030_0_comp_ff, 36912, 0x00000002 }, /* SUB */ { op_9038_0_comp_ff, 36920, 0x00000002 }, /* SUB */ { op_9039_0_comp_ff, 36921, 0x00000002 }, /* SUB */ { op_903a_0_comp_ff, 36922, 0x00000002 }, /* SUB */ { op_903b_0_comp_ff, 36923, 0x00000002 }, /* SUB */ { op_903c_0_comp_ff, 36924, 0x00000002 }, /* SUB */ { op_9040_0_comp_ff, 36928, 0x00000000 }, /* SUB */ { op_9048_0_comp_ff, 36936, 0x00000000 }, /* SUB */ { op_9050_0_comp_ff, 36944, 0x00000000 }, /* SUB */ { op_9058_0_comp_ff, 36952, 0x00000000 }, /* SUB */ { op_9060_0_comp_ff, 36960, 0x00000000 }, /* SUB */ { op_9068_0_comp_ff, 36968, 0x00000002 }, /* SUB */ { op_9070_0_comp_ff, 36976, 0x00000002 }, /* SUB */ { op_9078_0_comp_ff, 36984, 0x00000002 }, /* SUB */ { op_9079_0_comp_ff, 36985, 0x00000002 }, /* SUB */ { op_907a_0_comp_ff, 36986, 0x00000002 }, /* SUB */ { op_907b_0_comp_ff, 36987, 0x00000002 }, /* SUB */ { op_907c_0_comp_ff, 36988, 0x00000002 }, /* SUB */ { op_9080_0_comp_ff, 36992, 0x00000000 }, /* SUB */ { op_9088_0_comp_ff, 37000, 0x00000000 }, /* SUB */ { op_9090_0_comp_ff, 37008, 0x00000000 }, /* SUB */ { op_9098_0_comp_ff, 37016, 0x00000000 }, /* SUB */ { op_90a0_0_comp_ff, 37024, 0x00000000 }, /* SUB */ { op_90a8_0_comp_ff, 37032, 0x00000002 }, /* SUB */ { op_90b0_0_comp_ff, 37040, 0x00000002 }, /* SUB */ { op_90b8_0_comp_ff, 37048, 0x00000002 }, /* SUB */ { op_90b9_0_comp_ff, 37049, 0x00000002 }, /* SUB */ { op_90ba_0_comp_ff, 37050, 0x00000002 }, /* SUB */ { op_90bb_0_comp_ff, 37051, 0x00000002 }, /* SUB */ { op_90bc_0_comp_ff, 37052, 0x00000002 }, /* SUB */ { op_90c0_0_comp_ff, 37056, 0x00000000 }, /* SUBA */ { op_90c8_0_comp_ff, 37064, 0x00000000 }, /* SUBA */ { op_90d0_0_comp_ff, 37072, 0x00000000 }, /* SUBA */ { op_90d8_0_comp_ff, 37080, 0x00000000 }, /* SUBA */ { op_90e0_0_comp_ff, 37088, 0x00000000 }, /* SUBA */ { op_90e8_0_comp_ff, 37096, 0x00000002 }, /* SUBA */ { op_90f0_0_comp_ff, 37104, 0x00000002 }, /* SUBA */ { op_90f8_0_comp_ff, 37112, 0x00000002 }, /* SUBA */ { op_90f9_0_comp_ff, 37113, 0x00000002 }, /* SUBA */ { op_90fa_0_comp_ff, 37114, 0x00000002 }, /* SUBA */ { op_90fb_0_comp_ff, 37115, 0x00000002 }, /* SUBA */ { op_90fc_0_comp_ff, 37116, 0x00000002 }, /* SUBA */ { op_9100_0_comp_ff, 37120, 0x0000000c }, /* SUBX */ { op_9108_0_comp_ff, 37128, 0x0000000c }, /* SUBX */ { op_9110_0_comp_ff, 37136, 0x00000000 }, /* SUB */ { op_9118_0_comp_ff, 37144, 0x00000000 }, /* SUB */ { op_9120_0_comp_ff, 37152, 0x00000000 }, /* SUB */ { op_9128_0_comp_ff, 37160, 0x00000002 }, /* SUB */ { op_9130_0_comp_ff, 37168, 0x00000002 }, /* SUB */ { op_9138_0_comp_ff, 37176, 0x00000002 }, /* SUB */ { op_9139_0_comp_ff, 37177, 0x00000002 }, /* SUB */ { op_9140_0_comp_ff, 37184, 0x0000000c }, /* SUBX */ { op_9148_0_comp_ff, 37192, 0x0000000c }, /* SUBX */ { op_9150_0_comp_ff, 37200, 0x00000000 }, /* SUB */ { op_9158_0_comp_ff, 37208, 0x00000000 }, /* SUB */ { op_9160_0_comp_ff, 37216, 0x00000000 }, /* SUB */ { op_9168_0_comp_ff, 37224, 0x00000002 }, /* SUB */ { op_9170_0_comp_ff, 37232, 0x00000002 }, /* SUB */ { op_9178_0_comp_ff, 37240, 0x00000002 }, /* SUB */ { op_9179_0_comp_ff, 37241, 0x00000002 }, /* SUB */ { op_9180_0_comp_ff, 37248, 0x0000000c }, /* SUBX */ { op_9188_0_comp_ff, 37256, 0x0000000c }, /* SUBX */ { op_9190_0_comp_ff, 37264, 0x00000000 }, /* SUB */ { op_9198_0_comp_ff, 37272, 0x00000000 }, /* SUB */ { op_91a0_0_comp_ff, 37280, 0x00000000 }, /* SUB */ { op_91a8_0_comp_ff, 37288, 0x00000002 }, /* SUB */ { op_91b0_0_comp_ff, 37296, 0x00000002 }, /* SUB */ { op_91b8_0_comp_ff, 37304, 0x00000002 }, /* SUB */ { op_91b9_0_comp_ff, 37305, 0x00000002 }, /* SUB */ { op_91c0_0_comp_ff, 37312, 0x00000000 }, /* SUBA */ { op_91c8_0_comp_ff, 37320, 0x00000000 }, /* SUBA */ { op_91d0_0_comp_ff, 37328, 0x00000000 }, /* SUBA */ { op_91d8_0_comp_ff, 37336, 0x00000000 }, /* SUBA */ { op_91e0_0_comp_ff, 37344, 0x00000000 }, /* SUBA */ { op_91e8_0_comp_ff, 37352, 0x00000002 }, /* SUBA */ { op_91f0_0_comp_ff, 37360, 0x00000002 }, /* SUBA */ { op_91f8_0_comp_ff, 37368, 0x00000002 }, /* SUBA */ { op_91f9_0_comp_ff, 37369, 0x00000002 }, /* SUBA */ { op_91fa_0_comp_ff, 37370, 0x00000002 }, /* SUBA */ { op_91fb_0_comp_ff, 37371, 0x00000002 }, /* SUBA */ { op_91fc_0_comp_ff, 37372, 0x00000002 }, /* SUBA */ { op_b000_0_comp_ff, 45056, 0x00000000 }, /* CMP */ { op_b010_0_comp_ff, 45072, 0x00000000 }, /* CMP */ { op_b018_0_comp_ff, 45080, 0x00000000 }, /* CMP */ { op_b020_0_comp_ff, 45088, 0x00000000 }, /* CMP */ { op_b028_0_comp_ff, 45096, 0x00000002 }, /* CMP */ { op_b030_0_comp_ff, 45104, 0x00000002 }, /* CMP */ { op_b038_0_comp_ff, 45112, 0x00000002 }, /* CMP */ { op_b039_0_comp_ff, 45113, 0x00000002 }, /* CMP */ { op_b03a_0_comp_ff, 45114, 0x00000002 }, /* CMP */ { op_b03b_0_comp_ff, 45115, 0x00000002 }, /* CMP */ { op_b03c_0_comp_ff, 45116, 0x00000002 }, /* CMP */ { op_b040_0_comp_ff, 45120, 0x00000000 }, /* CMP */ { op_b048_0_comp_ff, 45128, 0x00000000 }, /* CMP */ { op_b050_0_comp_ff, 45136, 0x00000000 }, /* CMP */ { op_b058_0_comp_ff, 45144, 0x00000000 }, /* CMP */ { op_b060_0_comp_ff, 45152, 0x00000000 }, /* CMP */ { op_b068_0_comp_ff, 45160, 0x00000002 }, /* CMP */ { op_b070_0_comp_ff, 45168, 0x00000002 }, /* CMP */ { op_b078_0_comp_ff, 45176, 0x00000002 }, /* CMP */ { op_b079_0_comp_ff, 45177, 0x00000002 }, /* CMP */ { op_b07a_0_comp_ff, 45178, 0x00000002 }, /* CMP */ { op_b07b_0_comp_ff, 45179, 0x00000002 }, /* CMP */ { op_b07c_0_comp_ff, 45180, 0x00000002 }, /* CMP */ { op_b080_0_comp_ff, 45184, 0x00000000 }, /* CMP */ { op_b088_0_comp_ff, 45192, 0x00000000 }, /* CMP */ { op_b090_0_comp_ff, 45200, 0x00000000 }, /* CMP */ { op_b098_0_comp_ff, 45208, 0x00000000 }, /* CMP */ { op_b0a0_0_comp_ff, 45216, 0x00000000 }, /* CMP */ { op_b0a8_0_comp_ff, 45224, 0x00000002 }, /* CMP */ { op_b0b0_0_comp_ff, 45232, 0x00000002 }, /* CMP */ { op_b0b8_0_comp_ff, 45240, 0x00000002 }, /* CMP */ { op_b0b9_0_comp_ff, 45241, 0x00000002 }, /* CMP */ { op_b0ba_0_comp_ff, 45242, 0x00000002 }, /* CMP */ { op_b0bb_0_comp_ff, 45243, 0x00000002 }, /* CMP */ { op_b0bc_0_comp_ff, 45244, 0x00000002 }, /* CMP */ { op_b0c0_0_comp_ff, 45248, 0x00000000 }, /* CMPA */ { op_b0c8_0_comp_ff, 45256, 0x00000000 }, /* CMPA */ { op_b0d0_0_comp_ff, 45264, 0x00000000 }, /* CMPA */ { op_b0d8_0_comp_ff, 45272, 0x00000000 }, /* CMPA */ { op_b0e0_0_comp_ff, 45280, 0x00000000 }, /* CMPA */ { op_b0e8_0_comp_ff, 45288, 0x00000002 }, /* CMPA */ { op_b0f0_0_comp_ff, 45296, 0x00000002 }, /* CMPA */ { op_b0f8_0_comp_ff, 45304, 0x00000002 }, /* CMPA */ { op_b0f9_0_comp_ff, 45305, 0x00000002 }, /* CMPA */ { op_b0fa_0_comp_ff, 45306, 0x00000002 }, /* CMPA */ { op_b0fb_0_comp_ff, 45307, 0x00000002 }, /* CMPA */ { op_b0fc_0_comp_ff, 45308, 0x00000002 }, /* CMPA */ { op_b100_0_comp_ff, 45312, 0x00000000 }, /* EOR */ { op_b108_0_comp_ff, 45320, 0x00000000 }, /* CMPM */ { op_b110_0_comp_ff, 45328, 0x00000000 }, /* EOR */ { op_b118_0_comp_ff, 45336, 0x00000000 }, /* EOR */ { op_b120_0_comp_ff, 45344, 0x00000000 }, /* EOR */ { op_b128_0_comp_ff, 45352, 0x00000002 }, /* EOR */ { op_b130_0_comp_ff, 45360, 0x00000002 }, /* EOR */ { op_b138_0_comp_ff, 45368, 0x00000002 }, /* EOR */ { op_b139_0_comp_ff, 45369, 0x00000002 }, /* EOR */ { op_b140_0_comp_ff, 45376, 0x00000000 }, /* EOR */ { op_b148_0_comp_ff, 45384, 0x00000000 }, /* CMPM */ { op_b150_0_comp_ff, 45392, 0x00000000 }, /* EOR */ { op_b158_0_comp_ff, 45400, 0x00000000 }, /* EOR */ { op_b160_0_comp_ff, 45408, 0x00000000 }, /* EOR */ { op_b168_0_comp_ff, 45416, 0x00000002 }, /* EOR */ { op_b170_0_comp_ff, 45424, 0x00000002 }, /* EOR */ { op_b178_0_comp_ff, 45432, 0x00000002 }, /* EOR */ { op_b179_0_comp_ff, 45433, 0x00000002 }, /* EOR */ { op_b180_0_comp_ff, 45440, 0x00000000 }, /* EOR */ { op_b188_0_comp_ff, 45448, 0x00000000 }, /* CMPM */ { op_b190_0_comp_ff, 45456, 0x00000000 }, /* EOR */ { op_b198_0_comp_ff, 45464, 0x00000000 }, /* EOR */ { op_b1a0_0_comp_ff, 45472, 0x00000000 }, /* EOR */ { op_b1a8_0_comp_ff, 45480, 0x00000002 }, /* EOR */ { op_b1b0_0_comp_ff, 45488, 0x00000002 }, /* EOR */ { op_b1b8_0_comp_ff, 45496, 0x00000002 }, /* EOR */ { op_b1b9_0_comp_ff, 45497, 0x00000002 }, /* EOR */ { op_b1c0_0_comp_ff, 45504, 0x00000000 }, /* CMPA */ { op_b1c8_0_comp_ff, 45512, 0x00000000 }, /* CMPA */ { op_b1d0_0_comp_ff, 45520, 0x00000000 }, /* CMPA */ { op_b1d8_0_comp_ff, 45528, 0x00000000 }, /* CMPA */ { op_b1e0_0_comp_ff, 45536, 0x00000000 }, /* CMPA */ { op_b1e8_0_comp_ff, 45544, 0x00000002 }, /* CMPA */ { op_b1f0_0_comp_ff, 45552, 0x00000002 }, /* CMPA */ { op_b1f8_0_comp_ff, 45560, 0x00000002 }, /* CMPA */ { op_b1f9_0_comp_ff, 45561, 0x00000002 }, /* CMPA */ { op_b1fa_0_comp_ff, 45562, 0x00000002 }, /* CMPA */ { op_b1fb_0_comp_ff, 45563, 0x00000002 }, /* CMPA */ { op_b1fc_0_comp_ff, 45564, 0x00000002 }, /* CMPA */ { op_c000_0_comp_ff, 49152, 0x00000000 }, /* AND */ { op_c010_0_comp_ff, 49168, 0x00000000 }, /* AND */ { op_c018_0_comp_ff, 49176, 0x00000000 }, /* AND */ { op_c020_0_comp_ff, 49184, 0x00000000 }, /* AND */ { op_c028_0_comp_ff, 49192, 0x00000002 }, /* AND */ { op_c030_0_comp_ff, 49200, 0x00000002 }, /* AND */ { op_c038_0_comp_ff, 49208, 0x00000002 }, /* AND */ { op_c039_0_comp_ff, 49209, 0x00000002 }, /* AND */ { op_c03a_0_comp_ff, 49210, 0x00000002 }, /* AND */ { op_c03b_0_comp_ff, 49211, 0x00000002 }, /* AND */ { op_c03c_0_comp_ff, 49212, 0x00000002 }, /* AND */ { op_c040_0_comp_ff, 49216, 0x00000000 }, /* AND */ { op_c050_0_comp_ff, 49232, 0x00000000 }, /* AND */ { op_c058_0_comp_ff, 49240, 0x00000000 }, /* AND */ { op_c060_0_comp_ff, 49248, 0x00000000 }, /* AND */ { op_c068_0_comp_ff, 49256, 0x00000002 }, /* AND */ { op_c070_0_comp_ff, 49264, 0x00000002 }, /* AND */ { op_c078_0_comp_ff, 49272, 0x00000002 }, /* AND */ { op_c079_0_comp_ff, 49273, 0x00000002 }, /* AND */ { op_c07a_0_comp_ff, 49274, 0x00000002 }, /* AND */ { op_c07b_0_comp_ff, 49275, 0x00000002 }, /* AND */ { op_c07c_0_comp_ff, 49276, 0x00000002 }, /* AND */ { op_c080_0_comp_ff, 49280, 0x00000000 }, /* AND */ { op_c090_0_comp_ff, 49296, 0x00000000 }, /* AND */ { op_c098_0_comp_ff, 49304, 0x00000000 }, /* AND */ { op_c0a0_0_comp_ff, 49312, 0x00000000 }, /* AND */ { op_c0a8_0_comp_ff, 49320, 0x00000002 }, /* AND */ { op_c0b0_0_comp_ff, 49328, 0x00000002 }, /* AND */ { op_c0b8_0_comp_ff, 49336, 0x00000002 }, /* AND */ { op_c0b9_0_comp_ff, 49337, 0x00000002 }, /* AND */ { op_c0ba_0_comp_ff, 49338, 0x00000002 }, /* AND */ { op_c0bb_0_comp_ff, 49339, 0x00000002 }, /* AND */ { op_c0bc_0_comp_ff, 49340, 0x00000002 }, /* AND */ { op_c0c0_0_comp_ff, 49344, 0x00000000 }, /* MULU */ { op_c0d0_0_comp_ff, 49360, 0x00000000 }, /* MULU */ { op_c0d8_0_comp_ff, 49368, 0x00000000 }, /* MULU */ { op_c0e0_0_comp_ff, 49376, 0x00000000 }, /* MULU */ { op_c0e8_0_comp_ff, 49384, 0x00000002 }, /* MULU */ { op_c0f0_0_comp_ff, 49392, 0x00000002 }, /* MULU */ { op_c0f8_0_comp_ff, 49400, 0x00000002 }, /* MULU */ { op_c0f9_0_comp_ff, 49401, 0x00000002 }, /* MULU */ { op_c0fa_0_comp_ff, 49402, 0x00000002 }, /* MULU */ { op_c0fb_0_comp_ff, 49403, 0x00000002 }, /* MULU */ { op_c0fc_0_comp_ff, 49404, 0x00000002 }, /* MULU */ { NULL, 49408, 0x00000000 }, /* ABCD */ { NULL, 49416, 0x00000000 }, /* ABCD */ { op_c110_0_comp_ff, 49424, 0x00000000 }, /* AND */ { op_c118_0_comp_ff, 49432, 0x00000000 }, /* AND */ { op_c120_0_comp_ff, 49440, 0x00000000 }, /* AND */ { op_c128_0_comp_ff, 49448, 0x00000002 }, /* AND */ { op_c130_0_comp_ff, 49456, 0x00000002 }, /* AND */ { op_c138_0_comp_ff, 49464, 0x00000002 }, /* AND */ { op_c139_0_comp_ff, 49465, 0x00000002 }, /* AND */ { op_c140_0_comp_ff, 49472, 0x00000000 }, /* EXG */ { op_c148_0_comp_ff, 49480, 0x00000000 }, /* EXG */ { op_c150_0_comp_ff, 49488, 0x00000000 }, /* AND */ { op_c158_0_comp_ff, 49496, 0x00000000 }, /* AND */ { op_c160_0_comp_ff, 49504, 0x00000000 }, /* AND */ { op_c168_0_comp_ff, 49512, 0x00000002 }, /* AND */ { op_c170_0_comp_ff, 49520, 0x00000002 }, /* AND */ { op_c178_0_comp_ff, 49528, 0x00000002 }, /* AND */ { op_c179_0_comp_ff, 49529, 0x00000002 }, /* AND */ { op_c188_0_comp_ff, 49544, 0x00000000 }, /* EXG */ { op_c190_0_comp_ff, 49552, 0x00000000 }, /* AND */ { op_c198_0_comp_ff, 49560, 0x00000000 }, /* AND */ { op_c1a0_0_comp_ff, 49568, 0x00000000 }, /* AND */ { op_c1a8_0_comp_ff, 49576, 0x00000002 }, /* AND */ { op_c1b0_0_comp_ff, 49584, 0x00000002 }, /* AND */ { op_c1b8_0_comp_ff, 49592, 0x00000002 }, /* AND */ { op_c1b9_0_comp_ff, 49593, 0x00000002 }, /* AND */ { op_c1c0_0_comp_ff, 49600, 0x00000000 }, /* MULS */ { op_c1d0_0_comp_ff, 49616, 0x00000000 }, /* MULS */ { op_c1d8_0_comp_ff, 49624, 0x00000000 }, /* MULS */ { op_c1e0_0_comp_ff, 49632, 0x00000000 }, /* MULS */ { op_c1e8_0_comp_ff, 49640, 0x00000002 }, /* MULS */ { op_c1f0_0_comp_ff, 49648, 0x00000002 }, /* MULS */ { op_c1f8_0_comp_ff, 49656, 0x00000002 }, /* MULS */ { op_c1f9_0_comp_ff, 49657, 0x00000002 }, /* MULS */ { op_c1fa_0_comp_ff, 49658, 0x00000002 }, /* MULS */ { op_c1fb_0_comp_ff, 49659, 0x00000002 }, /* MULS */ { op_c1fc_0_comp_ff, 49660, 0x00000002 }, /* MULS */ { op_d000_0_comp_ff, 53248, 0x00000000 }, /* ADD */ { op_d010_0_comp_ff, 53264, 0x00000000 }, /* ADD */ { op_d018_0_comp_ff, 53272, 0x00000000 }, /* ADD */ { op_d020_0_comp_ff, 53280, 0x00000000 }, /* ADD */ { op_d028_0_comp_ff, 53288, 0x00000002 }, /* ADD */ { op_d030_0_comp_ff, 53296, 0x00000002 }, /* ADD */ { op_d038_0_comp_ff, 53304, 0x00000002 }, /* ADD */ { op_d039_0_comp_ff, 53305, 0x00000002 }, /* ADD */ { op_d03a_0_comp_ff, 53306, 0x00000002 }, /* ADD */ { op_d03b_0_comp_ff, 53307, 0x00000002 }, /* ADD */ { op_d03c_0_comp_ff, 53308, 0x00000002 }, /* ADD */ { op_d040_0_comp_ff, 53312, 0x00000000 }, /* ADD */ { op_d048_0_comp_ff, 53320, 0x00000000 }, /* ADD */ { op_d050_0_comp_ff, 53328, 0x00000000 }, /* ADD */ { op_d058_0_comp_ff, 53336, 0x00000000 }, /* ADD */ { op_d060_0_comp_ff, 53344, 0x00000000 }, /* ADD */ { op_d068_0_comp_ff, 53352, 0x00000002 }, /* ADD */ { op_d070_0_comp_ff, 53360, 0x00000002 }, /* ADD */ { op_d078_0_comp_ff, 53368, 0x00000002 }, /* ADD */ { op_d079_0_comp_ff, 53369, 0x00000002 }, /* ADD */ { op_d07a_0_comp_ff, 53370, 0x00000002 }, /* ADD */ { op_d07b_0_comp_ff, 53371, 0x00000002 }, /* ADD */ { op_d07c_0_comp_ff, 53372, 0x00000002 }, /* ADD */ { op_d080_0_comp_ff, 53376, 0x00000000 }, /* ADD */ { op_d088_0_comp_ff, 53384, 0x00000000 }, /* ADD */ { op_d090_0_comp_ff, 53392, 0x00000000 }, /* ADD */ { op_d098_0_comp_ff, 53400, 0x00000000 }, /* ADD */ { op_d0a0_0_comp_ff, 53408, 0x00000000 }, /* ADD */ { op_d0a8_0_comp_ff, 53416, 0x00000002 }, /* ADD */ { op_d0b0_0_comp_ff, 53424, 0x00000002 }, /* ADD */ { op_d0b8_0_comp_ff, 53432, 0x00000002 }, /* ADD */ { op_d0b9_0_comp_ff, 53433, 0x00000002 }, /* ADD */ { op_d0ba_0_comp_ff, 53434, 0x00000002 }, /* ADD */ { op_d0bb_0_comp_ff, 53435, 0x00000002 }, /* ADD */ { op_d0bc_0_comp_ff, 53436, 0x00000002 }, /* ADD */ { op_d0c0_0_comp_ff, 53440, 0x00000000 }, /* ADDA */ { op_d0c8_0_comp_ff, 53448, 0x00000000 }, /* ADDA */ { op_d0d0_0_comp_ff, 53456, 0x00000000 }, /* ADDA */ { op_d0d8_0_comp_ff, 53464, 0x00000000 }, /* ADDA */ { op_d0e0_0_comp_ff, 53472, 0x00000000 }, /* ADDA */ { op_d0e8_0_comp_ff, 53480, 0x00000002 }, /* ADDA */ { op_d0f0_0_comp_ff, 53488, 0x00000002 }, /* ADDA */ { op_d0f8_0_comp_ff, 53496, 0x00000002 }, /* ADDA */ { op_d0f9_0_comp_ff, 53497, 0x00000002 }, /* ADDA */ { op_d0fa_0_comp_ff, 53498, 0x00000002 }, /* ADDA */ { op_d0fb_0_comp_ff, 53499, 0x00000002 }, /* ADDA */ { op_d0fc_0_comp_ff, 53500, 0x00000002 }, /* ADDA */ { op_d100_0_comp_ff, 53504, 0x0000000c }, /* ADDX */ { op_d108_0_comp_ff, 53512, 0x0000000c }, /* ADDX */ { op_d110_0_comp_ff, 53520, 0x00000000 }, /* ADD */ { op_d118_0_comp_ff, 53528, 0x00000000 }, /* ADD */ { op_d120_0_comp_ff, 53536, 0x00000000 }, /* ADD */ { op_d128_0_comp_ff, 53544, 0x00000002 }, /* ADD */ { op_d130_0_comp_ff, 53552, 0x00000002 }, /* ADD */ { op_d138_0_comp_ff, 53560, 0x00000002 }, /* ADD */ { op_d139_0_comp_ff, 53561, 0x00000002 }, /* ADD */ { op_d140_0_comp_ff, 53568, 0x0000000c }, /* ADDX */ { op_d148_0_comp_ff, 53576, 0x0000000c }, /* ADDX */ { op_d150_0_comp_ff, 53584, 0x00000000 }, /* ADD */ { op_d158_0_comp_ff, 53592, 0x00000000 }, /* ADD */ { op_d160_0_comp_ff, 53600, 0x00000000 }, /* ADD */ { op_d168_0_comp_ff, 53608, 0x00000002 }, /* ADD */ { op_d170_0_comp_ff, 53616, 0x00000002 }, /* ADD */ { op_d178_0_comp_ff, 53624, 0x00000002 }, /* ADD */ { op_d179_0_comp_ff, 53625, 0x00000002 }, /* ADD */ { op_d180_0_comp_ff, 53632, 0x0000000c }, /* ADDX */ { op_d188_0_comp_ff, 53640, 0x0000000c }, /* ADDX */ { op_d190_0_comp_ff, 53648, 0x00000000 }, /* ADD */ { op_d198_0_comp_ff, 53656, 0x00000000 }, /* ADD */ { op_d1a0_0_comp_ff, 53664, 0x00000000 }, /* ADD */ { op_d1a8_0_comp_ff, 53672, 0x00000002 }, /* ADD */ { op_d1b0_0_comp_ff, 53680, 0x00000002 }, /* ADD */ { op_d1b8_0_comp_ff, 53688, 0x00000002 }, /* ADD */ { op_d1b9_0_comp_ff, 53689, 0x00000002 }, /* ADD */ { op_d1c0_0_comp_ff, 53696, 0x00000000 }, /* ADDA */ { op_d1c8_0_comp_ff, 53704, 0x00000000 }, /* ADDA */ { op_d1d0_0_comp_ff, 53712, 0x00000000 }, /* ADDA */ { op_d1d8_0_comp_ff, 53720, 0x00000000 }, /* ADDA */ { op_d1e0_0_comp_ff, 53728, 0x00000000 }, /* ADDA */ { op_d1e8_0_comp_ff, 53736, 0x00000002 }, /* ADDA */ { op_d1f0_0_comp_ff, 53744, 0x00000002 }, /* ADDA */ { op_d1f8_0_comp_ff, 53752, 0x00000002 }, /* ADDA */ { op_d1f9_0_comp_ff, 53753, 0x00000002 }, /* ADDA */ { op_d1fa_0_comp_ff, 53754, 0x00000002 }, /* ADDA */ { op_d1fb_0_comp_ff, 53755, 0x00000002 }, /* ADDA */ { op_d1fc_0_comp_ff, 53756, 0x00000002 }, /* ADDA */ { op_e000_0_comp_ff, 57344, 0x00000000 }, /* ASR */ { op_e008_0_comp_ff, 57352, 0x00000000 }, /* LSR */ { NULL, 57360, 0x00000000 }, /* ROXR */ { op_e018_0_comp_ff, 57368, 0x00000000 }, /* ROR */ { op_e020_0_comp_ff, 57376, 0x00000004 }, /* ASR */ { op_e028_0_comp_ff, 57384, 0x00000004 }, /* LSR */ { NULL, 57392, 0x00000000 }, /* ROXR */ { op_e038_0_comp_ff, 57400, 0x00000000 }, /* ROR */ { op_e040_0_comp_ff, 57408, 0x00000000 }, /* ASR */ { op_e048_0_comp_ff, 57416, 0x00000000 }, /* LSR */ { NULL, 57424, 0x00000000 }, /* ROXR */ { op_e058_0_comp_ff, 57432, 0x00000000 }, /* ROR */ { op_e060_0_comp_ff, 57440, 0x00000004 }, /* ASR */ { op_e068_0_comp_ff, 57448, 0x00000004 }, /* LSR */ { NULL, 57456, 0x00000000 }, /* ROXR */ { op_e078_0_comp_ff, 57464, 0x00000000 }, /* ROR */ { op_e080_0_comp_ff, 57472, 0x00000000 }, /* ASR */ { op_e088_0_comp_ff, 57480, 0x00000000 }, /* LSR */ { NULL, 57488, 0x00000000 }, /* ROXR */ { op_e098_0_comp_ff, 57496, 0x00000000 }, /* ROR */ { op_e0a0_0_comp_ff, 57504, 0x00000004 }, /* ASR */ { op_e0a8_0_comp_ff, 57512, 0x00000004 }, /* LSR */ { NULL, 57520, 0x00000000 }, /* ROXR */ { op_e0b8_0_comp_ff, 57528, 0x00000000 }, /* ROR */ { NULL, 57552, 0x00000000 }, /* ASRW */ { NULL, 57560, 0x00000000 }, /* ASRW */ { NULL, 57568, 0x00000000 }, /* ASRW */ { NULL, 57576, 0x00000000 }, /* ASRW */ { NULL, 57584, 0x00000000 }, /* ASRW */ { NULL, 57592, 0x00000000 }, /* ASRW */ { NULL, 57593, 0x00000000 }, /* ASRW */ { op_e100_0_comp_ff, 57600, 0x00000000 }, /* ASL */ { op_e108_0_comp_ff, 57608, 0x00000000 }, /* LSL */ { NULL, 57616, 0x00000000 }, /* ROXL */ { op_e118_0_comp_ff, 57624, 0x00000000 }, /* ROL */ { op_e120_0_comp_ff, 57632, 0x00000004 }, /* ASL */ { op_e128_0_comp_ff, 57640, 0x00000004 }, /* LSL */ { NULL, 57648, 0x00000000 }, /* ROXL */ { op_e138_0_comp_ff, 57656, 0x00000000 }, /* ROL */ { op_e140_0_comp_ff, 57664, 0x00000000 }, /* ASL */ { op_e148_0_comp_ff, 57672, 0x00000000 }, /* LSL */ { NULL, 57680, 0x00000000 }, /* ROXL */ { op_e158_0_comp_ff, 57688, 0x00000000 }, /* ROL */ { op_e160_0_comp_ff, 57696, 0x00000004 }, /* ASL */ { op_e168_0_comp_ff, 57704, 0x00000004 }, /* LSL */ { NULL, 57712, 0x00000000 }, /* ROXL */ { op_e178_0_comp_ff, 57720, 0x00000000 }, /* ROL */ { op_e180_0_comp_ff, 57728, 0x00000000 }, /* ASL */ { op_e188_0_comp_ff, 57736, 0x00000000 }, /* LSL */ { NULL, 57744, 0x00000000 }, /* ROXL */ { op_e198_0_comp_ff, 57752, 0x00000000 }, /* ROL */ { op_e1a0_0_comp_ff, 57760, 0x00000004 }, /* ASL */ { op_e1a8_0_comp_ff, 57768, 0x00000004 }, /* LSL */ { NULL, 57776, 0x00000000 }, /* ROXL */ { op_e1b8_0_comp_ff, 57784, 0x00000000 }, /* ROL */ { NULL, 57808, 0x00000000 }, /* ASLW */ { NULL, 57816, 0x00000000 }, /* ASLW */ { NULL, 57824, 0x00000000 }, /* ASLW */ { NULL, 57832, 0x00000000 }, /* ASLW */ { NULL, 57840, 0x00000000 }, /* ASLW */ { NULL, 57848, 0x00000000 }, /* ASLW */ { NULL, 57849, 0x00000000 }, /* ASLW */ { NULL, 58064, 0x00000000 }, /* LSRW */ { NULL, 58072, 0x00000000 }, /* LSRW */ { NULL, 58080, 0x00000000 }, /* LSRW */ { NULL, 58088, 0x00000000 }, /* LSRW */ { NULL, 58096, 0x00000000 }, /* LSRW */ { NULL, 58104, 0x00000000 }, /* LSRW */ { NULL, 58105, 0x00000000 }, /* LSRW */ { NULL, 58320, 0x00000000 }, /* LSLW */ { NULL, 58328, 0x00000000 }, /* LSLW */ { NULL, 58336, 0x00000000 }, /* LSLW */ { NULL, 58344, 0x00000000 }, /* LSLW */ { NULL, 58352, 0x00000000 }, /* LSLW */ { NULL, 58360, 0x00000000 }, /* LSLW */ { NULL, 58361, 0x00000000 }, /* LSLW */ { NULL, 58576, 0x00000000 }, /* ROXRW */ { NULL, 58584, 0x00000000 }, /* ROXRW */ { NULL, 58592, 0x00000000 }, /* ROXRW */ { NULL, 58600, 0x00000000 }, /* ROXRW */ { NULL, 58608, 0x00000000 }, /* ROXRW */ { NULL, 58616, 0x00000000 }, /* ROXRW */ { NULL, 58617, 0x00000000 }, /* ROXRW */ { NULL, 58832, 0x00000000 }, /* ROXLW */ { NULL, 58840, 0x00000000 }, /* ROXLW */ { NULL, 58848, 0x00000000 }, /* ROXLW */ { NULL, 58856, 0x00000000 }, /* ROXLW */ { NULL, 58864, 0x00000000 }, /* ROXLW */ { NULL, 58872, 0x00000000 }, /* ROXLW */ { NULL, 58873, 0x00000000 }, /* ROXLW */ { NULL, 59088, 0x00000000 }, /* RORW */ { NULL, 59096, 0x00000000 }, /* RORW */ { NULL, 59104, 0x00000000 }, /* RORW */ { NULL, 59112, 0x00000000 }, /* RORW */ { NULL, 59120, 0x00000000 }, /* RORW */ { NULL, 59128, 0x00000000 }, /* RORW */ { NULL, 59129, 0x00000000 }, /* RORW */ { NULL, 59344, 0x00000000 }, /* ROLW */ { NULL, 59352, 0x00000000 }, /* ROLW */ { NULL, 59360, 0x00000000 }, /* ROLW */ { NULL, 59368, 0x00000000 }, /* ROLW */ { NULL, 59376, 0x00000000 }, /* ROLW */ { NULL, 59384, 0x00000000 }, /* ROLW */ { NULL, 59385, 0x00000000 }, /* ROLW */ { NULL, 59584, 0x00000000 }, /* BFTST */ { NULL, 59600, 0x00000000 }, /* BFTST */ { NULL, 59624, 0x00000000 }, /* BFTST */ { NULL, 59632, 0x00000000 }, /* BFTST */ { NULL, 59640, 0x00000000 }, /* BFTST */ { NULL, 59641, 0x00000000 }, /* BFTST */ { NULL, 59642, 0x00000000 }, /* BFTST */ { NULL, 59643, 0x00000000 }, /* BFTST */ { NULL, 59840, 0x00000000 }, /* BFEXTU */ { NULL, 59856, 0x00000000 }, /* BFEXTU */ { NULL, 59880, 0x00000000 }, /* BFEXTU */ { NULL, 59888, 0x00000000 }, /* BFEXTU */ { NULL, 59896, 0x00000000 }, /* BFEXTU */ { NULL, 59897, 0x00000000 }, /* BFEXTU */ { NULL, 59898, 0x00000000 }, /* BFEXTU */ { NULL, 59899, 0x00000000 }, /* BFEXTU */ { NULL, 60096, 0x00000000 }, /* BFCHG */ { NULL, 60112, 0x00000000 }, /* BFCHG */ { NULL, 60136, 0x00000000 }, /* BFCHG */ { NULL, 60144, 0x00000000 }, /* BFCHG */ { NULL, 60152, 0x00000000 }, /* BFCHG */ { NULL, 60153, 0x00000000 }, /* BFCHG */ { NULL, 60352, 0x00000000 }, /* BFEXTS */ { NULL, 60368, 0x00000000 }, /* BFEXTS */ { NULL, 60392, 0x00000000 }, /* BFEXTS */ { NULL, 60400, 0x00000000 }, /* BFEXTS */ { NULL, 60408, 0x00000000 }, /* BFEXTS */ { NULL, 60409, 0x00000000 }, /* BFEXTS */ { NULL, 60410, 0x00000000 }, /* BFEXTS */ { NULL, 60411, 0x00000000 }, /* BFEXTS */ { NULL, 60608, 0x00000000 }, /* BFCLR */ { NULL, 60624, 0x00000000 }, /* BFCLR */ { NULL, 60648, 0x00000000 }, /* BFCLR */ { NULL, 60656, 0x00000000 }, /* BFCLR */ { NULL, 60664, 0x00000000 }, /* BFCLR */ { NULL, 60665, 0x00000000 }, /* BFCLR */ { NULL, 60864, 0x00000000 }, /* BFFFO */ { NULL, 60880, 0x00000000 }, /* BFFFO */ { NULL, 60904, 0x00000000 }, /* BFFFO */ { NULL, 60912, 0x00000000 }, /* BFFFO */ { NULL, 60920, 0x00000000 }, /* BFFFO */ { NULL, 60921, 0x00000000 }, /* BFFFO */ { NULL, 60922, 0x00000000 }, /* BFFFO */ { NULL, 60923, 0x00000000 }, /* BFFFO */ { NULL, 61120, 0x00000000 }, /* BFSET */ { NULL, 61136, 0x00000000 }, /* BFSET */ { NULL, 61160, 0x00000000 }, /* BFSET */ { NULL, 61168, 0x00000000 }, /* BFSET */ { NULL, 61176, 0x00000000 }, /* BFSET */ { NULL, 61177, 0x00000000 }, /* BFSET */ { NULL, 61376, 0x00000000 }, /* BFINS */ { NULL, 61392, 0x00000000 }, /* BFINS */ { NULL, 61416, 0x00000000 }, /* BFINS */ { NULL, 61424, 0x00000000 }, /* BFINS */ { NULL, 61432, 0x00000000 }, /* BFINS */ { NULL, 61433, 0x00000000 }, /* BFINS */ { NULL, 61456, 0x00000001 }, /* MMUOP030 */ { NULL, 61480, 0x00000001 }, /* MMUOP030 */ { NULL, 61488, 0x00000001 }, /* MMUOP030 */ { NULL, 61496, 0x00000001 }, /* MMUOP030 */ { NULL, 61497, 0x00000001 }, /* MMUOP030 */ { op_f200_0_comp_ff, 61952, 0x00000002 }, /* FPP */ { op_f208_0_comp_ff, 61960, 0x00000002 }, /* FPP */ { op_f210_0_comp_ff, 61968, 0x00000002 }, /* FPP */ { op_f218_0_comp_ff, 61976, 0x00000002 }, /* FPP */ { op_f220_0_comp_ff, 61984, 0x00000002 }, /* FPP */ { op_f228_0_comp_ff, 61992, 0x00000002 }, /* FPP */ { op_f230_0_comp_ff, 62000, 0x00000002 }, /* FPP */ { op_f238_0_comp_ff, 62008, 0x00000002 }, /* FPP */ { op_f239_0_comp_ff, 62009, 0x00000002 }, /* FPP */ { op_f23a_0_comp_ff, 62010, 0x00000002 }, /* FPP */ { op_f23b_0_comp_ff, 62011, 0x00000002 }, /* FPP */ { op_f23c_0_comp_ff, 62012, 0x00000002 }, /* FPP */ { op_f240_0_comp_ff, 62016, 0x00000006 }, /* FScc */ { NULL, 62024, 0x00000001 }, /* FDBcc */ { op_f250_0_comp_ff, 62032, 0x00000006 }, /* FScc */ { op_f258_0_comp_ff, 62040, 0x00000006 }, /* FScc */ { op_f260_0_comp_ff, 62048, 0x00000006 }, /* FScc */ { op_f268_0_comp_ff, 62056, 0x00000006 }, /* FScc */ { op_f270_0_comp_ff, 62064, 0x00000006 }, /* FScc */ { op_f278_0_comp_ff, 62072, 0x00000006 }, /* FScc */ { op_f279_0_comp_ff, 62073, 0x00000006 }, /* FScc */ { NULL, 62074, 0x00000001 }, /* FTRAPcc */ { NULL, 62075, 0x00000001 }, /* FTRAPcc */ { NULL, 62076, 0x00000001 }, /* FTRAPcc */ { op_f280_0_comp_ff, 62080, 0x00000005 }, /* FBcc */ { op_f2c0_0_comp_ff, 62144, 0x00000005 }, /* FBcc */ { NULL, 62224, 0x00000000 }, /* FSAVE */ { NULL, 62240, 0x00000000 }, /* FSAVE */ { NULL, 62248, 0x00000000 }, /* FSAVE */ { NULL, 62256, 0x00000000 }, /* FSAVE */ { NULL, 62264, 0x00000000 }, /* FSAVE */ { NULL, 62265, 0x00000000 }, /* FSAVE */ { NULL, 62288, 0x00000000 }, /* FRESTORE */ { NULL, 62296, 0x00000000 }, /* FRESTORE */ { NULL, 62312, 0x00000000 }, /* FRESTORE */ { NULL, 62320, 0x00000000 }, /* FRESTORE */ { NULL, 62328, 0x00000000 }, /* FRESTORE */ { NULL, 62329, 0x00000000 }, /* FRESTORE */ { NULL, 62330, 0x00000000 }, /* FRESTORE */ { NULL, 62331, 0x00000000 }, /* FRESTORE */ { NULL, 62472, 0x00000001 }, /* CINVL */ { NULL, 62480, 0x00000001 }, /* CINVP */ { NULL, 62488, 0x00000001 }, /* CINVA */ { NULL, 62489, 0x00000001 }, /* CINVA */ { NULL, 62490, 0x00000001 }, /* CINVA */ { NULL, 62491, 0x00000001 }, /* CINVA */ { NULL, 62492, 0x00000001 }, /* CINVA */ { NULL, 62493, 0x00000001 }, /* CINVA */ { NULL, 62494, 0x00000001 }, /* CINVA */ { NULL, 62495, 0x00000001 }, /* CINVA */ { NULL, 62504, 0x00000001 }, /* CPUSHL */ { NULL, 62512, 0x00000001 }, /* CPUSHP */ { NULL, 62520, 0x00000001 }, /* CPUSHA */ { NULL, 62521, 0x00000001 }, /* CPUSHA */ { NULL, 62522, 0x00000001 }, /* CPUSHA */ { NULL, 62523, 0x00000001 }, /* CPUSHA */ { NULL, 62524, 0x00000001 }, /* CPUSHA */ { NULL, 62525, 0x00000001 }, /* CPUSHA */ { NULL, 62526, 0x00000001 }, /* CPUSHA */ { NULL, 62527, 0x00000001 }, /* CPUSHA */ { NULL, 62720, 0x00000001 }, /* PFLUSHN */ { NULL, 62728, 0x00000001 }, /* PFLUSH */ { NULL, 62736, 0x00000001 }, /* PFLUSHAN */ { NULL, 62744, 0x00000001 }, /* PFLUSHA */ { NULL, 62792, 0x00000001 }, /* PTESTR */ { NULL, 62824, 0x00000001 }, /* PTESTW */ { NULL, 62856, 0x00000001 }, /* PLPAR */ { NULL, 62920, 0x00000001 }, /* PLPAW */ { op_f600_0_comp_ff, 62976, 0x00000002 }, /* MOVE16 */ { op_f608_0_comp_ff, 62984, 0x00000002 }, /* MOVE16 */ { op_f610_0_comp_ff, 62992, 0x00000002 }, /* MOVE16 */ { op_f618_0_comp_ff, 63000, 0x00000002 }, /* MOVE16 */ { op_f620_0_comp_ff, 63008, 0x00000002 }, /* MOVE16 */ { NULL, 63488, 0x00000001 }, /* LPSTOP */ { 0, 65536, 0 }}; const struct comptbl op_smalltbl_0_comp_nf[] = { { op_0_0_comp_nf, 0, 0x00000002 }, /* OR */ { op_10_0_comp_nf, 16, 0x00000002 }, /* OR */ { op_18_0_comp_nf, 24, 0x00000002 }, /* OR */ { op_20_0_comp_nf, 32, 0x00000002 }, /* OR */ { op_28_0_comp_nf, 40, 0x00000002 }, /* OR */ { op_30_0_comp_nf, 48, 0x00000002 }, /* OR */ { op_38_0_comp_nf, 56, 0x00000002 }, /* OR */ { op_39_0_comp_nf, 57, 0x00000002 }, /* OR */ { NULL, 60, 0x00000001 }, /* ORSR */ { op_40_0_comp_nf, 64, 0x00000002 }, /* OR */ { op_50_0_comp_nf, 80, 0x00000002 }, /* OR */ { op_58_0_comp_nf, 88, 0x00000002 }, /* OR */ { op_60_0_comp_nf, 96, 0x00000002 }, /* OR */ { op_68_0_comp_nf, 104, 0x00000002 }, /* OR */ { op_70_0_comp_nf, 112, 0x00000002 }, /* OR */ { op_78_0_comp_nf, 120, 0x00000002 }, /* OR */ { op_79_0_comp_nf, 121, 0x00000002 }, /* OR */ { NULL, 124, 0x00000001 }, /* ORSR */ { op_80_0_comp_nf, 128, 0x00000002 }, /* OR */ { op_90_0_comp_nf, 144, 0x00000002 }, /* OR */ { op_98_0_comp_nf, 152, 0x00000002 }, /* OR */ { op_a0_0_comp_nf, 160, 0x00000002 }, /* OR */ { op_a8_0_comp_nf, 168, 0x00000002 }, /* OR */ { op_b0_0_comp_nf, 176, 0x00000002 }, /* OR */ { op_b8_0_comp_nf, 184, 0x00000002 }, /* OR */ { op_b9_0_comp_nf, 185, 0x00000002 }, /* OR */ { NULL, 208, 0x00000001 }, /* CHK2 */ { NULL, 232, 0x00000001 }, /* CHK2 */ { NULL, 240, 0x00000001 }, /* CHK2 */ { NULL, 248, 0x00000001 }, /* CHK2 */ { NULL, 249, 0x00000001 }, /* CHK2 */ { NULL, 250, 0x00000001 }, /* CHK2 */ { NULL, 251, 0x00000001 }, /* CHK2 */ { op_100_0_comp_nf, 256, 0x00000000 }, /* BTST */ { NULL, 264, 0x00000001 }, /* MVPMR */ { op_110_0_comp_nf, 272, 0x00000000 }, /* BTST */ { op_118_0_comp_nf, 280, 0x00000000 }, /* BTST */ { op_120_0_comp_nf, 288, 0x00000000 }, /* BTST */ { op_128_0_comp_nf, 296, 0x00000002 }, /* BTST */ { op_130_0_comp_nf, 304, 0x00000002 }, /* BTST */ { op_138_0_comp_nf, 312, 0x00000002 }, /* BTST */ { op_139_0_comp_nf, 313, 0x00000002 }, /* BTST */ { op_13a_0_comp_nf, 314, 0x00000002 }, /* BTST */ { op_13b_0_comp_nf, 315, 0x00000002 }, /* BTST */ { op_13c_0_comp_nf, 316, 0x00000002 }, /* BTST */ { op_140_0_comp_nf, 320, 0x00000000 }, /* BCHG */ { NULL, 328, 0x00000001 }, /* MVPMR */ { op_150_0_comp_nf, 336, 0x00000000 }, /* BCHG */ { op_158_0_comp_nf, 344, 0x00000000 }, /* BCHG */ { op_160_0_comp_nf, 352, 0x00000000 }, /* BCHG */ { op_168_0_comp_nf, 360, 0x00000002 }, /* BCHG */ { op_170_0_comp_nf, 368, 0x00000002 }, /* BCHG */ { op_178_0_comp_nf, 376, 0x00000002 }, /* BCHG */ { op_179_0_comp_nf, 377, 0x00000002 }, /* BCHG */ { op_17a_0_comp_nf, 378, 0x00000002 }, /* BCHG */ { op_17b_0_comp_nf, 379, 0x00000002 }, /* BCHG */ { op_180_0_comp_nf, 384, 0x00000000 }, /* BCLR */ { NULL, 392, 0x00000001 }, /* MVPRM */ { op_190_0_comp_nf, 400, 0x00000000 }, /* BCLR */ { op_198_0_comp_nf, 408, 0x00000000 }, /* BCLR */ { op_1a0_0_comp_nf, 416, 0x00000000 }, /* BCLR */ { op_1a8_0_comp_nf, 424, 0x00000002 }, /* BCLR */ { op_1b0_0_comp_nf, 432, 0x00000002 }, /* BCLR */ { op_1b8_0_comp_nf, 440, 0x00000002 }, /* BCLR */ { op_1b9_0_comp_nf, 441, 0x00000002 }, /* BCLR */ { op_1ba_0_comp_nf, 442, 0x00000002 }, /* BCLR */ { op_1bb_0_comp_nf, 443, 0x00000002 }, /* BCLR */ { op_1c0_0_comp_nf, 448, 0x00000000 }, /* BSET */ { NULL, 456, 0x00000001 }, /* MVPRM */ { op_1d0_0_comp_nf, 464, 0x00000000 }, /* BSET */ { op_1d8_0_comp_nf, 472, 0x00000000 }, /* BSET */ { op_1e0_0_comp_nf, 480, 0x00000000 }, /* BSET */ { op_1e8_0_comp_nf, 488, 0x00000002 }, /* BSET */ { op_1f0_0_comp_nf, 496, 0x00000002 }, /* BSET */ { op_1f8_0_comp_nf, 504, 0x00000002 }, /* BSET */ { op_1f9_0_comp_nf, 505, 0x00000002 }, /* BSET */ { op_1fa_0_comp_nf, 506, 0x00000002 }, /* BSET */ { op_1fb_0_comp_nf, 507, 0x00000002 }, /* BSET */ { op_200_0_comp_nf, 512, 0x00000002 }, /* AND */ { op_210_0_comp_nf, 528, 0x00000002 }, /* AND */ { op_218_0_comp_nf, 536, 0x00000002 }, /* AND */ { op_220_0_comp_nf, 544, 0x00000002 }, /* AND */ { op_228_0_comp_nf, 552, 0x00000002 }, /* AND */ { op_230_0_comp_nf, 560, 0x00000002 }, /* AND */ { op_238_0_comp_nf, 568, 0x00000002 }, /* AND */ { op_239_0_comp_nf, 569, 0x00000002 }, /* AND */ { NULL, 572, 0x00000001 }, /* ANDSR */ { op_240_0_comp_nf, 576, 0x00000002 }, /* AND */ { op_250_0_comp_nf, 592, 0x00000002 }, /* AND */ { op_258_0_comp_nf, 600, 0x00000002 }, /* AND */ { op_260_0_comp_nf, 608, 0x00000002 }, /* AND */ { op_268_0_comp_nf, 616, 0x00000002 }, /* AND */ { op_270_0_comp_nf, 624, 0x00000002 }, /* AND */ { op_278_0_comp_nf, 632, 0x00000002 }, /* AND */ { op_279_0_comp_nf, 633, 0x00000002 }, /* AND */ { NULL, 636, 0x00000001 }, /* ANDSR */ { op_280_0_comp_nf, 640, 0x00000002 }, /* AND */ { op_290_0_comp_nf, 656, 0x00000002 }, /* AND */ { op_298_0_comp_nf, 664, 0x00000002 }, /* AND */ { op_2a0_0_comp_nf, 672, 0x00000002 }, /* AND */ { op_2a8_0_comp_nf, 680, 0x00000002 }, /* AND */ { op_2b0_0_comp_nf, 688, 0x00000002 }, /* AND */ { op_2b8_0_comp_nf, 696, 0x00000002 }, /* AND */ { op_2b9_0_comp_nf, 697, 0x00000002 }, /* AND */ { NULL, 720, 0x00000001 }, /* CHK2 */ { NULL, 744, 0x00000001 }, /* CHK2 */ { NULL, 752, 0x00000001 }, /* CHK2 */ { NULL, 760, 0x00000001 }, /* CHK2 */ { NULL, 761, 0x00000001 }, /* CHK2 */ { NULL, 762, 0x00000001 }, /* CHK2 */ { NULL, 763, 0x00000001 }, /* CHK2 */ { op_400_0_comp_nf, 1024, 0x00000002 }, /* SUB */ { op_410_0_comp_nf, 1040, 0x00000002 }, /* SUB */ { op_418_0_comp_nf, 1048, 0x00000002 }, /* SUB */ { op_420_0_comp_nf, 1056, 0x00000002 }, /* SUB */ { op_428_0_comp_nf, 1064, 0x00000002 }, /* SUB */ { op_430_0_comp_nf, 1072, 0x00000002 }, /* SUB */ { op_438_0_comp_nf, 1080, 0x00000002 }, /* SUB */ { op_439_0_comp_nf, 1081, 0x00000002 }, /* SUB */ { op_440_0_comp_nf, 1088, 0x00000002 }, /* SUB */ { op_450_0_comp_nf, 1104, 0x00000002 }, /* SUB */ { op_458_0_comp_nf, 1112, 0x00000002 }, /* SUB */ { op_460_0_comp_nf, 1120, 0x00000002 }, /* SUB */ { op_468_0_comp_nf, 1128, 0x00000002 }, /* SUB */ { op_470_0_comp_nf, 1136, 0x00000002 }, /* SUB */ { op_478_0_comp_nf, 1144, 0x00000002 }, /* SUB */ { op_479_0_comp_nf, 1145, 0x00000002 }, /* SUB */ { op_480_0_comp_nf, 1152, 0x00000002 }, /* SUB */ { op_490_0_comp_nf, 1168, 0x00000002 }, /* SUB */ { op_498_0_comp_nf, 1176, 0x00000002 }, /* SUB */ { op_4a0_0_comp_nf, 1184, 0x00000002 }, /* SUB */ { op_4a8_0_comp_nf, 1192, 0x00000002 }, /* SUB */ { op_4b0_0_comp_nf, 1200, 0x00000002 }, /* SUB */ { op_4b8_0_comp_nf, 1208, 0x00000002 }, /* SUB */ { op_4b9_0_comp_nf, 1209, 0x00000002 }, /* SUB */ { NULL, 1232, 0x00000001 }, /* CHK2 */ { NULL, 1256, 0x00000001 }, /* CHK2 */ { NULL, 1264, 0x00000001 }, /* CHK2 */ { NULL, 1272, 0x00000001 }, /* CHK2 */ { NULL, 1273, 0x00000001 }, /* CHK2 */ { NULL, 1274, 0x00000001 }, /* CHK2 */ { NULL, 1275, 0x00000001 }, /* CHK2 */ { op_600_0_comp_nf, 1536, 0x00000002 }, /* ADD */ { op_610_0_comp_nf, 1552, 0x00000002 }, /* ADD */ { op_618_0_comp_nf, 1560, 0x00000002 }, /* ADD */ { op_620_0_comp_nf, 1568, 0x00000002 }, /* ADD */ { op_628_0_comp_nf, 1576, 0x00000002 }, /* ADD */ { op_630_0_comp_nf, 1584, 0x00000002 }, /* ADD */ { op_638_0_comp_nf, 1592, 0x00000002 }, /* ADD */ { op_639_0_comp_nf, 1593, 0x00000002 }, /* ADD */ { op_640_0_comp_nf, 1600, 0x00000002 }, /* ADD */ { op_650_0_comp_nf, 1616, 0x00000002 }, /* ADD */ { op_658_0_comp_nf, 1624, 0x00000002 }, /* ADD */ { op_660_0_comp_nf, 1632, 0x00000002 }, /* ADD */ { op_668_0_comp_nf, 1640, 0x00000002 }, /* ADD */ { op_670_0_comp_nf, 1648, 0x00000002 }, /* ADD */ { op_678_0_comp_nf, 1656, 0x00000002 }, /* ADD */ { op_679_0_comp_nf, 1657, 0x00000002 }, /* ADD */ { op_680_0_comp_nf, 1664, 0x00000002 }, /* ADD */ { op_690_0_comp_nf, 1680, 0x00000002 }, /* ADD */ { op_698_0_comp_nf, 1688, 0x00000002 }, /* ADD */ { op_6a0_0_comp_nf, 1696, 0x00000002 }, /* ADD */ { op_6a8_0_comp_nf, 1704, 0x00000002 }, /* ADD */ { op_6b0_0_comp_nf, 1712, 0x00000002 }, /* ADD */ { op_6b8_0_comp_nf, 1720, 0x00000002 }, /* ADD */ { op_6b9_0_comp_nf, 1721, 0x00000002 }, /* ADD */ { NULL, 1728, 0x00000001 }, /* RTM */ { NULL, 1736, 0x00000001 }, /* RTM */ { NULL, 1744, 0x00000001 }, /* CALLM */ { NULL, 1768, 0x00000001 }, /* CALLM */ { NULL, 1776, 0x00000001 }, /* CALLM */ { NULL, 1784, 0x00000001 }, /* CALLM */ { NULL, 1785, 0x00000001 }, /* CALLM */ { NULL, 1786, 0x00000001 }, /* CALLM */ { NULL, 1787, 0x00000001 }, /* CALLM */ { op_800_0_comp_nf, 2048, 0x00000002 }, /* BTST */ { op_810_0_comp_nf, 2064, 0x00000002 }, /* BTST */ { op_818_0_comp_nf, 2072, 0x00000002 }, /* BTST */ { op_820_0_comp_nf, 2080, 0x00000002 }, /* BTST */ { op_828_0_comp_nf, 2088, 0x00000002 }, /* BTST */ { op_830_0_comp_nf, 2096, 0x00000002 }, /* BTST */ { op_838_0_comp_nf, 2104, 0x00000002 }, /* BTST */ { op_839_0_comp_nf, 2105, 0x00000002 }, /* BTST */ { op_83a_0_comp_nf, 2106, 0x00000002 }, /* BTST */ { op_83b_0_comp_nf, 2107, 0x00000002 }, /* BTST */ { op_83c_0_comp_nf, 2108, 0x00000002 }, /* BTST */ { op_840_0_comp_nf, 2112, 0x00000002 }, /* BCHG */ { op_850_0_comp_nf, 2128, 0x00000002 }, /* BCHG */ { op_858_0_comp_nf, 2136, 0x00000002 }, /* BCHG */ { op_860_0_comp_nf, 2144, 0x00000002 }, /* BCHG */ { op_868_0_comp_nf, 2152, 0x00000002 }, /* BCHG */ { op_870_0_comp_nf, 2160, 0x00000002 }, /* BCHG */ { op_878_0_comp_nf, 2168, 0x00000002 }, /* BCHG */ { op_879_0_comp_nf, 2169, 0x00000002 }, /* BCHG */ { op_87a_0_comp_nf, 2170, 0x00000002 }, /* BCHG */ { op_87b_0_comp_nf, 2171, 0x00000002 }, /* BCHG */ { op_880_0_comp_nf, 2176, 0x00000002 }, /* BCLR */ { op_890_0_comp_nf, 2192, 0x00000002 }, /* BCLR */ { op_898_0_comp_nf, 2200, 0x00000002 }, /* BCLR */ { op_8a0_0_comp_nf, 2208, 0x00000002 }, /* BCLR */ { op_8a8_0_comp_nf, 2216, 0x00000002 }, /* BCLR */ { op_8b0_0_comp_nf, 2224, 0x00000002 }, /* BCLR */ { op_8b8_0_comp_nf, 2232, 0x00000002 }, /* BCLR */ { op_8b9_0_comp_nf, 2233, 0x00000002 }, /* BCLR */ { op_8ba_0_comp_nf, 2234, 0x00000002 }, /* BCLR */ { op_8bb_0_comp_nf, 2235, 0x00000002 }, /* BCLR */ { op_8c0_0_comp_nf, 2240, 0x00000002 }, /* BSET */ { op_8d0_0_comp_nf, 2256, 0x00000002 }, /* BSET */ { op_8d8_0_comp_nf, 2264, 0x00000002 }, /* BSET */ { op_8e0_0_comp_nf, 2272, 0x00000002 }, /* BSET */ { op_8e8_0_comp_nf, 2280, 0x00000002 }, /* BSET */ { op_8f0_0_comp_nf, 2288, 0x00000002 }, /* BSET */ { op_8f8_0_comp_nf, 2296, 0x00000002 }, /* BSET */ { op_8f9_0_comp_nf, 2297, 0x00000002 }, /* BSET */ { op_8fa_0_comp_nf, 2298, 0x00000002 }, /* BSET */ { op_8fb_0_comp_nf, 2299, 0x00000002 }, /* BSET */ { op_a00_0_comp_nf, 2560, 0x00000002 }, /* EOR */ { op_a10_0_comp_nf, 2576, 0x00000002 }, /* EOR */ { op_a18_0_comp_nf, 2584, 0x00000002 }, /* EOR */ { op_a20_0_comp_nf, 2592, 0x00000002 }, /* EOR */ { op_a28_0_comp_nf, 2600, 0x00000002 }, /* EOR */ { op_a30_0_comp_nf, 2608, 0x00000002 }, /* EOR */ { op_a38_0_comp_nf, 2616, 0x00000002 }, /* EOR */ { op_a39_0_comp_nf, 2617, 0x00000002 }, /* EOR */ { NULL, 2620, 0x00000001 }, /* EORSR */ { op_a40_0_comp_nf, 2624, 0x00000002 }, /* EOR */ { op_a50_0_comp_nf, 2640, 0x00000002 }, /* EOR */ { op_a58_0_comp_nf, 2648, 0x00000002 }, /* EOR */ { op_a60_0_comp_nf, 2656, 0x00000002 }, /* EOR */ { op_a68_0_comp_nf, 2664, 0x00000002 }, /* EOR */ { op_a70_0_comp_nf, 2672, 0x00000002 }, /* EOR */ { op_a78_0_comp_nf, 2680, 0x00000002 }, /* EOR */ { op_a79_0_comp_nf, 2681, 0x00000002 }, /* EOR */ { NULL, 2684, 0x00000001 }, /* EORSR */ { op_a80_0_comp_nf, 2688, 0x00000002 }, /* EOR */ { op_a90_0_comp_nf, 2704, 0x00000002 }, /* EOR */ { op_a98_0_comp_nf, 2712, 0x00000002 }, /* EOR */ { op_aa0_0_comp_nf, 2720, 0x00000002 }, /* EOR */ { op_aa8_0_comp_nf, 2728, 0x00000002 }, /* EOR */ { op_ab0_0_comp_nf, 2736, 0x00000002 }, /* EOR */ { op_ab8_0_comp_nf, 2744, 0x00000002 }, /* EOR */ { op_ab9_0_comp_nf, 2745, 0x00000002 }, /* EOR */ { NULL, 2768, 0x00000000 }, /* CAS */ { NULL, 2776, 0x00000000 }, /* CAS */ { NULL, 2784, 0x00000000 }, /* CAS */ { NULL, 2792, 0x00000000 }, /* CAS */ { NULL, 2800, 0x00000000 }, /* CAS */ { NULL, 2808, 0x00000000 }, /* CAS */ { NULL, 2809, 0x00000000 }, /* CAS */ { op_c00_0_comp_nf, 3072, 0x00000002 }, /* CMP */ { op_c10_0_comp_nf, 3088, 0x00000002 }, /* CMP */ { op_c18_0_comp_nf, 3096, 0x00000002 }, /* CMP */ { op_c20_0_comp_nf, 3104, 0x00000002 }, /* CMP */ { op_c28_0_comp_nf, 3112, 0x00000002 }, /* CMP */ { op_c30_0_comp_nf, 3120, 0x00000002 }, /* CMP */ { op_c38_0_comp_nf, 3128, 0x00000002 }, /* CMP */ { op_c39_0_comp_nf, 3129, 0x00000002 }, /* CMP */ { op_c3a_0_comp_nf, 3130, 0x00000002 }, /* CMP */ { op_c3b_0_comp_nf, 3131, 0x00000002 }, /* CMP */ { op_c40_0_comp_nf, 3136, 0x00000002 }, /* CMP */ { op_c50_0_comp_nf, 3152, 0x00000002 }, /* CMP */ { op_c58_0_comp_nf, 3160, 0x00000002 }, /* CMP */ { op_c60_0_comp_nf, 3168, 0x00000002 }, /* CMP */ { op_c68_0_comp_nf, 3176, 0x00000002 }, /* CMP */ { op_c70_0_comp_nf, 3184, 0x00000002 }, /* CMP */ { op_c78_0_comp_nf, 3192, 0x00000002 }, /* CMP */ { op_c79_0_comp_nf, 3193, 0x00000002 }, /* CMP */ { op_c7a_0_comp_nf, 3194, 0x00000002 }, /* CMP */ { op_c7b_0_comp_nf, 3195, 0x00000002 }, /* CMP */ { op_c80_0_comp_nf, 3200, 0x00000002 }, /* CMP */ { op_c90_0_comp_nf, 3216, 0x00000002 }, /* CMP */ { op_c98_0_comp_nf, 3224, 0x00000002 }, /* CMP */ { op_ca0_0_comp_nf, 3232, 0x00000002 }, /* CMP */ { op_ca8_0_comp_nf, 3240, 0x00000002 }, /* CMP */ { op_cb0_0_comp_nf, 3248, 0x00000002 }, /* CMP */ { op_cb8_0_comp_nf, 3256, 0x00000002 }, /* CMP */ { op_cb9_0_comp_nf, 3257, 0x00000002 }, /* CMP */ { op_cba_0_comp_nf, 3258, 0x00000002 }, /* CMP */ { op_cbb_0_comp_nf, 3259, 0x00000002 }, /* CMP */ { NULL, 3280, 0x00000000 }, /* CAS */ { NULL, 3288, 0x00000000 }, /* CAS */ { NULL, 3296, 0x00000000 }, /* CAS */ { NULL, 3304, 0x00000000 }, /* CAS */ { NULL, 3312, 0x00000000 }, /* CAS */ { NULL, 3320, 0x00000000 }, /* CAS */ { NULL, 3321, 0x00000000 }, /* CAS */ { NULL, 3324, 0x00000000 }, /* CAS2 */ { NULL, 3600, 0x00000001 }, /* MOVES */ { NULL, 3608, 0x00000001 }, /* MOVES */ { NULL, 3616, 0x00000001 }, /* MOVES */ { NULL, 3624, 0x00000001 }, /* MOVES */ { NULL, 3632, 0x00000001 }, /* MOVES */ { NULL, 3640, 0x00000001 }, /* MOVES */ { NULL, 3641, 0x00000001 }, /* MOVES */ { NULL, 3664, 0x00000001 }, /* MOVES */ { NULL, 3672, 0x00000001 }, /* MOVES */ { NULL, 3680, 0x00000001 }, /* MOVES */ { NULL, 3688, 0x00000001 }, /* MOVES */ { NULL, 3696, 0x00000001 }, /* MOVES */ { NULL, 3704, 0x00000001 }, /* MOVES */ { NULL, 3705, 0x00000001 }, /* MOVES */ { NULL, 3728, 0x00000001 }, /* MOVES */ { NULL, 3736, 0x00000001 }, /* MOVES */ { NULL, 3744, 0x00000001 }, /* MOVES */ { NULL, 3752, 0x00000001 }, /* MOVES */ { NULL, 3760, 0x00000001 }, /* MOVES */ { NULL, 3768, 0x00000001 }, /* MOVES */ { NULL, 3769, 0x00000001 }, /* MOVES */ { NULL, 3792, 0x00000000 }, /* CAS */ { NULL, 3800, 0x00000000 }, /* CAS */ { NULL, 3808, 0x00000000 }, /* CAS */ { NULL, 3816, 0x00000000 }, /* CAS */ { NULL, 3824, 0x00000000 }, /* CAS */ { NULL, 3832, 0x00000000 }, /* CAS */ { NULL, 3833, 0x00000000 }, /* CAS */ { NULL, 3836, 0x00000000 }, /* CAS2 */ { op_1000_0_comp_nf, 4096, 0x00000000 }, /* MOVE */ { op_1010_0_comp_nf, 4112, 0x00000000 }, /* MOVE */ { op_1018_0_comp_nf, 4120, 0x00000000 }, /* MOVE */ { op_1020_0_comp_nf, 4128, 0x00000000 }, /* MOVE */ { op_1028_0_comp_nf, 4136, 0x00000002 }, /* MOVE */ { op_1030_0_comp_nf, 4144, 0x00000002 }, /* MOVE */ { op_1038_0_comp_nf, 4152, 0x00000002 }, /* MOVE */ { op_1039_0_comp_nf, 4153, 0x00000002 }, /* MOVE */ { op_103a_0_comp_nf, 4154, 0x00000002 }, /* MOVE */ { op_103b_0_comp_nf, 4155, 0x00000002 }, /* MOVE */ { op_103c_0_comp_nf, 4156, 0x00000002 }, /* MOVE */ { op_1080_0_comp_nf, 4224, 0x00000000 }, /* MOVE */ { op_1090_0_comp_nf, 4240, 0x00000000 }, /* MOVE */ { op_1098_0_comp_nf, 4248, 0x00000000 }, /* MOVE */ { op_10a0_0_comp_nf, 4256, 0x00000000 }, /* MOVE */ { op_10a8_0_comp_nf, 4264, 0x00000002 }, /* MOVE */ { op_10b0_0_comp_nf, 4272, 0x00000002 }, /* MOVE */ { op_10b8_0_comp_nf, 4280, 0x00000002 }, /* MOVE */ { op_10b9_0_comp_nf, 4281, 0x00000002 }, /* MOVE */ { op_10ba_0_comp_nf, 4282, 0x00000002 }, /* MOVE */ { op_10bb_0_comp_nf, 4283, 0x00000002 }, /* MOVE */ { op_10bc_0_comp_nf, 4284, 0x00000002 }, /* MOVE */ { op_10c0_0_comp_nf, 4288, 0x00000000 }, /* MOVE */ { op_10d0_0_comp_nf, 4304, 0x00000000 }, /* MOVE */ { op_10d8_0_comp_nf, 4312, 0x00000000 }, /* MOVE */ { op_10e0_0_comp_nf, 4320, 0x00000000 }, /* MOVE */ { op_10e8_0_comp_nf, 4328, 0x00000002 }, /* MOVE */ { op_10f0_0_comp_nf, 4336, 0x00000002 }, /* MOVE */ { op_10f8_0_comp_nf, 4344, 0x00000002 }, /* MOVE */ { op_10f9_0_comp_nf, 4345, 0x00000002 }, /* MOVE */ { op_10fa_0_comp_nf, 4346, 0x00000002 }, /* MOVE */ { op_10fb_0_comp_nf, 4347, 0x00000002 }, /* MOVE */ { op_10fc_0_comp_nf, 4348, 0x00000002 }, /* MOVE */ { op_1100_0_comp_nf, 4352, 0x00000000 }, /* MOVE */ { op_1110_0_comp_nf, 4368, 0x00000000 }, /* MOVE */ { op_1118_0_comp_nf, 4376, 0x00000000 }, /* MOVE */ { op_1120_0_comp_nf, 4384, 0x00000000 }, /* MOVE */ { op_1128_0_comp_nf, 4392, 0x00000002 }, /* MOVE */ { op_1130_0_comp_nf, 4400, 0x00000002 }, /* MOVE */ { op_1138_0_comp_nf, 4408, 0x00000002 }, /* MOVE */ { op_1139_0_comp_nf, 4409, 0x00000002 }, /* MOVE */ { op_113a_0_comp_nf, 4410, 0x00000002 }, /* MOVE */ { op_113b_0_comp_nf, 4411, 0x00000002 }, /* MOVE */ { op_113c_0_comp_nf, 4412, 0x00000002 }, /* MOVE */ { op_1140_0_comp_nf, 4416, 0x00000002 }, /* MOVE */ { op_1150_0_comp_nf, 4432, 0x00000002 }, /* MOVE */ { op_1158_0_comp_nf, 4440, 0x00000002 }, /* MOVE */ { op_1160_0_comp_nf, 4448, 0x00000002 }, /* MOVE */ { op_1168_0_comp_nf, 4456, 0x00000002 }, /* MOVE */ { op_1170_0_comp_nf, 4464, 0x00000002 }, /* MOVE */ { op_1178_0_comp_nf, 4472, 0x00000002 }, /* MOVE */ { op_1179_0_comp_nf, 4473, 0x00000002 }, /* MOVE */ { op_117a_0_comp_nf, 4474, 0x00000002 }, /* MOVE */ { op_117b_0_comp_nf, 4475, 0x00000002 }, /* MOVE */ { op_117c_0_comp_nf, 4476, 0x00000002 }, /* MOVE */ { op_1180_0_comp_nf, 4480, 0x00000002 }, /* MOVE */ { op_1190_0_comp_nf, 4496, 0x00000002 }, /* MOVE */ { op_1198_0_comp_nf, 4504, 0x00000002 }, /* MOVE */ { op_11a0_0_comp_nf, 4512, 0x00000002 }, /* MOVE */ { op_11a8_0_comp_nf, 4520, 0x00000002 }, /* MOVE */ { op_11b0_0_comp_nf, 4528, 0x00000002 }, /* MOVE */ { op_11b8_0_comp_nf, 4536, 0x00000002 }, /* MOVE */ { op_11b9_0_comp_nf, 4537, 0x00000002 }, /* MOVE */ { op_11ba_0_comp_nf, 4538, 0x00000002 }, /* MOVE */ { op_11bb_0_comp_nf, 4539, 0x00000002 }, /* MOVE */ { op_11bc_0_comp_nf, 4540, 0x00000002 }, /* MOVE */ { op_11c0_0_comp_nf, 4544, 0x00000002 }, /* MOVE */ { op_11d0_0_comp_nf, 4560, 0x00000002 }, /* MOVE */ { op_11d8_0_comp_nf, 4568, 0x00000002 }, /* MOVE */ { op_11e0_0_comp_nf, 4576, 0x00000002 }, /* MOVE */ { op_11e8_0_comp_nf, 4584, 0x00000002 }, /* MOVE */ { op_11f0_0_comp_nf, 4592, 0x00000002 }, /* MOVE */ { op_11f8_0_comp_nf, 4600, 0x00000002 }, /* MOVE */ { op_11f9_0_comp_nf, 4601, 0x00000002 }, /* MOVE */ { op_11fa_0_comp_nf, 4602, 0x00000002 }, /* MOVE */ { op_11fb_0_comp_nf, 4603, 0x00000002 }, /* MOVE */ { op_11fc_0_comp_nf, 4604, 0x00000002 }, /* MOVE */ { op_13c0_0_comp_nf, 5056, 0x00000002 }, /* MOVE */ { op_13d0_0_comp_nf, 5072, 0x00000002 }, /* MOVE */ { op_13d8_0_comp_nf, 5080, 0x00000002 }, /* MOVE */ { op_13e0_0_comp_nf, 5088, 0x00000002 }, /* MOVE */ { op_13e8_0_comp_nf, 5096, 0x00000002 }, /* MOVE */ { op_13f0_0_comp_nf, 5104, 0x00000002 }, /* MOVE */ { op_13f8_0_comp_nf, 5112, 0x00000002 }, /* MOVE */ { op_13f9_0_comp_nf, 5113, 0x00000002 }, /* MOVE */ { op_13fa_0_comp_nf, 5114, 0x00000002 }, /* MOVE */ { op_13fb_0_comp_nf, 5115, 0x00000002 }, /* MOVE */ { op_13fc_0_comp_nf, 5116, 0x00000002 }, /* MOVE */ { op_2000_0_comp_nf, 8192, 0x00000000 }, /* MOVE */ { op_2008_0_comp_nf, 8200, 0x00000000 }, /* MOVE */ { op_2010_0_comp_nf, 8208, 0x00000000 }, /* MOVE */ { op_2018_0_comp_nf, 8216, 0x00000000 }, /* MOVE */ { op_2020_0_comp_nf, 8224, 0x00000000 }, /* MOVE */ { op_2028_0_comp_nf, 8232, 0x00000002 }, /* MOVE */ { op_2030_0_comp_nf, 8240, 0x00000002 }, /* MOVE */ { op_2038_0_comp_nf, 8248, 0x00000002 }, /* MOVE */ { op_2039_0_comp_nf, 8249, 0x00000002 }, /* MOVE */ { op_203a_0_comp_nf, 8250, 0x00000002 }, /* MOVE */ { op_203b_0_comp_nf, 8251, 0x00000002 }, /* MOVE */ { op_203c_0_comp_nf, 8252, 0x00000002 }, /* MOVE */ { op_2040_0_comp_nf, 8256, 0x00000000 }, /* MOVEA */ { op_2048_0_comp_nf, 8264, 0x00000000 }, /* MOVEA */ { op_2050_0_comp_nf, 8272, 0x00000000 }, /* MOVEA */ { op_2058_0_comp_nf, 8280, 0x00000000 }, /* MOVEA */ { op_2060_0_comp_nf, 8288, 0x00000000 }, /* MOVEA */ { op_2068_0_comp_nf, 8296, 0x00000002 }, /* MOVEA */ { op_2070_0_comp_nf, 8304, 0x00000002 }, /* MOVEA */ { op_2078_0_comp_nf, 8312, 0x00000002 }, /* MOVEA */ { op_2079_0_comp_nf, 8313, 0x00000002 }, /* MOVEA */ { op_207a_0_comp_nf, 8314, 0x00000002 }, /* MOVEA */ { op_207b_0_comp_nf, 8315, 0x00000002 }, /* MOVEA */ { op_207c_0_comp_nf, 8316, 0x00000002 }, /* MOVEA */ { op_2080_0_comp_nf, 8320, 0x00000000 }, /* MOVE */ { op_2088_0_comp_nf, 8328, 0x00000000 }, /* MOVE */ { op_2090_0_comp_nf, 8336, 0x00000000 }, /* MOVE */ { op_2098_0_comp_nf, 8344, 0x00000000 }, /* MOVE */ { op_20a0_0_comp_nf, 8352, 0x00000000 }, /* MOVE */ { op_20a8_0_comp_nf, 8360, 0x00000002 }, /* MOVE */ { op_20b0_0_comp_nf, 8368, 0x00000002 }, /* MOVE */ { op_20b8_0_comp_nf, 8376, 0x00000002 }, /* MOVE */ { op_20b9_0_comp_nf, 8377, 0x00000002 }, /* MOVE */ { op_20ba_0_comp_nf, 8378, 0x00000002 }, /* MOVE */ { op_20bb_0_comp_nf, 8379, 0x00000002 }, /* MOVE */ { op_20bc_0_comp_nf, 8380, 0x00000002 }, /* MOVE */ { op_20c0_0_comp_nf, 8384, 0x00000000 }, /* MOVE */ { op_20c8_0_comp_nf, 8392, 0x00000000 }, /* MOVE */ { op_20d0_0_comp_nf, 8400, 0x00000000 }, /* MOVE */ { op_20d8_0_comp_nf, 8408, 0x00000000 }, /* MOVE */ { op_20e0_0_comp_nf, 8416, 0x00000000 }, /* MOVE */ { op_20e8_0_comp_nf, 8424, 0x00000002 }, /* MOVE */ { op_20f0_0_comp_nf, 8432, 0x00000002 }, /* MOVE */ { op_20f8_0_comp_nf, 8440, 0x00000002 }, /* MOVE */ { op_20f9_0_comp_nf, 8441, 0x00000002 }, /* MOVE */ { op_20fa_0_comp_nf, 8442, 0x00000002 }, /* MOVE */ { op_20fb_0_comp_nf, 8443, 0x00000002 }, /* MOVE */ { op_20fc_0_comp_nf, 8444, 0x00000002 }, /* MOVE */ { op_2100_0_comp_nf, 8448, 0x00000000 }, /* MOVE */ { op_2108_0_comp_nf, 8456, 0x00000000 }, /* MOVE */ { op_2110_0_comp_nf, 8464, 0x00000000 }, /* MOVE */ { op_2118_0_comp_nf, 8472, 0x00000000 }, /* MOVE */ { op_2120_0_comp_nf, 8480, 0x00000000 }, /* MOVE */ { op_2128_0_comp_nf, 8488, 0x00000002 }, /* MOVE */ { op_2130_0_comp_nf, 8496, 0x00000002 }, /* MOVE */ { op_2138_0_comp_nf, 8504, 0x00000002 }, /* MOVE */ { op_2139_0_comp_nf, 8505, 0x00000002 }, /* MOVE */ { op_213a_0_comp_nf, 8506, 0x00000002 }, /* MOVE */ { op_213b_0_comp_nf, 8507, 0x00000002 }, /* MOVE */ { op_213c_0_comp_nf, 8508, 0x00000002 }, /* MOVE */ { op_2140_0_comp_nf, 8512, 0x00000002 }, /* MOVE */ { op_2148_0_comp_nf, 8520, 0x00000002 }, /* MOVE */ { op_2150_0_comp_nf, 8528, 0x00000002 }, /* MOVE */ { op_2158_0_comp_nf, 8536, 0x00000002 }, /* MOVE */ { op_2160_0_comp_nf, 8544, 0x00000002 }, /* MOVE */ { op_2168_0_comp_nf, 8552, 0x00000002 }, /* MOVE */ { op_2170_0_comp_nf, 8560, 0x00000002 }, /* MOVE */ { op_2178_0_comp_nf, 8568, 0x00000002 }, /* MOVE */ { op_2179_0_comp_nf, 8569, 0x00000002 }, /* MOVE */ { op_217a_0_comp_nf, 8570, 0x00000002 }, /* MOVE */ { op_217b_0_comp_nf, 8571, 0x00000002 }, /* MOVE */ { op_217c_0_comp_nf, 8572, 0x00000002 }, /* MOVE */ { op_2180_0_comp_nf, 8576, 0x00000002 }, /* MOVE */ { op_2188_0_comp_nf, 8584, 0x00000002 }, /* MOVE */ { op_2190_0_comp_nf, 8592, 0x00000002 }, /* MOVE */ { op_2198_0_comp_nf, 8600, 0x00000002 }, /* MOVE */ { op_21a0_0_comp_nf, 8608, 0x00000002 }, /* MOVE */ { op_21a8_0_comp_nf, 8616, 0x00000002 }, /* MOVE */ { op_21b0_0_comp_nf, 8624, 0x00000002 }, /* MOVE */ { op_21b8_0_comp_nf, 8632, 0x00000002 }, /* MOVE */ { op_21b9_0_comp_nf, 8633, 0x00000002 }, /* MOVE */ { op_21ba_0_comp_nf, 8634, 0x00000002 }, /* MOVE */ { op_21bb_0_comp_nf, 8635, 0x00000002 }, /* MOVE */ { op_21bc_0_comp_nf, 8636, 0x00000002 }, /* MOVE */ { op_21c0_0_comp_nf, 8640, 0x00000002 }, /* MOVE */ { op_21c8_0_comp_nf, 8648, 0x00000002 }, /* MOVE */ { op_21d0_0_comp_nf, 8656, 0x00000002 }, /* MOVE */ { op_21d8_0_comp_nf, 8664, 0x00000002 }, /* MOVE */ { op_21e0_0_comp_nf, 8672, 0x00000002 }, /* MOVE */ { op_21e8_0_comp_nf, 8680, 0x00000002 }, /* MOVE */ { op_21f0_0_comp_nf, 8688, 0x00000002 }, /* MOVE */ { op_21f8_0_comp_nf, 8696, 0x00000002 }, /* MOVE */ { op_21f9_0_comp_nf, 8697, 0x00000002 }, /* MOVE */ { op_21fa_0_comp_nf, 8698, 0x00000002 }, /* MOVE */ { op_21fb_0_comp_nf, 8699, 0x00000002 }, /* MOVE */ { op_21fc_0_comp_nf, 8700, 0x00000002 }, /* MOVE */ { op_23c0_0_comp_nf, 9152, 0x00000002 }, /* MOVE */ { op_23c8_0_comp_nf, 9160, 0x00000002 }, /* MOVE */ { op_23d0_0_comp_nf, 9168, 0x00000002 }, /* MOVE */ { op_23d8_0_comp_nf, 9176, 0x00000002 }, /* MOVE */ { op_23e0_0_comp_nf, 9184, 0x00000002 }, /* MOVE */ { op_23e8_0_comp_nf, 9192, 0x00000002 }, /* MOVE */ { op_23f0_0_comp_nf, 9200, 0x00000002 }, /* MOVE */ { op_23f8_0_comp_nf, 9208, 0x00000002 }, /* MOVE */ { op_23f9_0_comp_nf, 9209, 0x00000002 }, /* MOVE */ { op_23fa_0_comp_nf, 9210, 0x00000002 }, /* MOVE */ { op_23fb_0_comp_nf, 9211, 0x00000002 }, /* MOVE */ { op_23fc_0_comp_nf, 9212, 0x00000002 }, /* MOVE */ { op_3000_0_comp_nf, 12288, 0x00000000 }, /* MOVE */ { op_3008_0_comp_nf, 12296, 0x00000000 }, /* MOVE */ { op_3010_0_comp_nf, 12304, 0x00000000 }, /* MOVE */ { op_3018_0_comp_nf, 12312, 0x00000000 }, /* MOVE */ { op_3020_0_comp_nf, 12320, 0x00000000 }, /* MOVE */ { op_3028_0_comp_nf, 12328, 0x00000002 }, /* MOVE */ { op_3030_0_comp_nf, 12336, 0x00000002 }, /* MOVE */ { op_3038_0_comp_nf, 12344, 0x00000002 }, /* MOVE */ { op_3039_0_comp_nf, 12345, 0x00000002 }, /* MOVE */ { op_303a_0_comp_nf, 12346, 0x00000002 }, /* MOVE */ { op_303b_0_comp_nf, 12347, 0x00000002 }, /* MOVE */ { op_303c_0_comp_nf, 12348, 0x00000002 }, /* MOVE */ { op_3040_0_comp_nf, 12352, 0x00000000 }, /* MOVEA */ { op_3048_0_comp_nf, 12360, 0x00000000 }, /* MOVEA */ { op_3050_0_comp_nf, 12368, 0x00000000 }, /* MOVEA */ { op_3058_0_comp_nf, 12376, 0x00000000 }, /* MOVEA */ { op_3060_0_comp_nf, 12384, 0x00000000 }, /* MOVEA */ { op_3068_0_comp_nf, 12392, 0x00000002 }, /* MOVEA */ { op_3070_0_comp_nf, 12400, 0x00000002 }, /* MOVEA */ { op_3078_0_comp_nf, 12408, 0x00000002 }, /* MOVEA */ { op_3079_0_comp_nf, 12409, 0x00000002 }, /* MOVEA */ { op_307a_0_comp_nf, 12410, 0x00000002 }, /* MOVEA */ { op_307b_0_comp_nf, 12411, 0x00000002 }, /* MOVEA */ { op_307c_0_comp_nf, 12412, 0x00000002 }, /* MOVEA */ { op_3080_0_comp_nf, 12416, 0x00000000 }, /* MOVE */ { op_3088_0_comp_nf, 12424, 0x00000000 }, /* MOVE */ { op_3090_0_comp_nf, 12432, 0x00000000 }, /* MOVE */ { op_3098_0_comp_nf, 12440, 0x00000000 }, /* MOVE */ { op_30a0_0_comp_nf, 12448, 0x00000000 }, /* MOVE */ { op_30a8_0_comp_nf, 12456, 0x00000002 }, /* MOVE */ { op_30b0_0_comp_nf, 12464, 0x00000002 }, /* MOVE */ { op_30b8_0_comp_nf, 12472, 0x00000002 }, /* MOVE */ { op_30b9_0_comp_nf, 12473, 0x00000002 }, /* MOVE */ { op_30ba_0_comp_nf, 12474, 0x00000002 }, /* MOVE */ { op_30bb_0_comp_nf, 12475, 0x00000002 }, /* MOVE */ { op_30bc_0_comp_nf, 12476, 0x00000002 }, /* MOVE */ { op_30c0_0_comp_nf, 12480, 0x00000000 }, /* MOVE */ { op_30c8_0_comp_nf, 12488, 0x00000000 }, /* MOVE */ { op_30d0_0_comp_nf, 12496, 0x00000000 }, /* MOVE */ { op_30d8_0_comp_nf, 12504, 0x00000000 }, /* MOVE */ { op_30e0_0_comp_nf, 12512, 0x00000000 }, /* MOVE */ { op_30e8_0_comp_nf, 12520, 0x00000002 }, /* MOVE */ { op_30f0_0_comp_nf, 12528, 0x00000002 }, /* MOVE */ { op_30f8_0_comp_nf, 12536, 0x00000002 }, /* MOVE */ { op_30f9_0_comp_nf, 12537, 0x00000002 }, /* MOVE */ { op_30fa_0_comp_nf, 12538, 0x00000002 }, /* MOVE */ { op_30fb_0_comp_nf, 12539, 0x00000002 }, /* MOVE */ { op_30fc_0_comp_nf, 12540, 0x00000002 }, /* MOVE */ { op_3100_0_comp_nf, 12544, 0x00000000 }, /* MOVE */ { op_3108_0_comp_nf, 12552, 0x00000000 }, /* MOVE */ { op_3110_0_comp_nf, 12560, 0x00000000 }, /* MOVE */ { op_3118_0_comp_nf, 12568, 0x00000000 }, /* MOVE */ { op_3120_0_comp_nf, 12576, 0x00000000 }, /* MOVE */ { op_3128_0_comp_nf, 12584, 0x00000002 }, /* MOVE */ { op_3130_0_comp_nf, 12592, 0x00000002 }, /* MOVE */ { op_3138_0_comp_nf, 12600, 0x00000002 }, /* MOVE */ { op_3139_0_comp_nf, 12601, 0x00000002 }, /* MOVE */ { op_313a_0_comp_nf, 12602, 0x00000002 }, /* MOVE */ { op_313b_0_comp_nf, 12603, 0x00000002 }, /* MOVE */ { op_313c_0_comp_nf, 12604, 0x00000002 }, /* MOVE */ { op_3140_0_comp_nf, 12608, 0x00000002 }, /* MOVE */ { op_3148_0_comp_nf, 12616, 0x00000002 }, /* MOVE */ { op_3150_0_comp_nf, 12624, 0x00000002 }, /* MOVE */ { op_3158_0_comp_nf, 12632, 0x00000002 }, /* MOVE */ { op_3160_0_comp_nf, 12640, 0x00000002 }, /* MOVE */ { op_3168_0_comp_nf, 12648, 0x00000002 }, /* MOVE */ { op_3170_0_comp_nf, 12656, 0x00000002 }, /* MOVE */ { op_3178_0_comp_nf, 12664, 0x00000002 }, /* MOVE */ { op_3179_0_comp_nf, 12665, 0x00000002 }, /* MOVE */ { op_317a_0_comp_nf, 12666, 0x00000002 }, /* MOVE */ { op_317b_0_comp_nf, 12667, 0x00000002 }, /* MOVE */ { op_317c_0_comp_nf, 12668, 0x00000002 }, /* MOVE */ { op_3180_0_comp_nf, 12672, 0x00000002 }, /* MOVE */ { op_3188_0_comp_nf, 12680, 0x00000002 }, /* MOVE */ { op_3190_0_comp_nf, 12688, 0x00000002 }, /* MOVE */ { op_3198_0_comp_nf, 12696, 0x00000002 }, /* MOVE */ { op_31a0_0_comp_nf, 12704, 0x00000002 }, /* MOVE */ { op_31a8_0_comp_nf, 12712, 0x00000002 }, /* MOVE */ { op_31b0_0_comp_nf, 12720, 0x00000002 }, /* MOVE */ { op_31b8_0_comp_nf, 12728, 0x00000002 }, /* MOVE */ { op_31b9_0_comp_nf, 12729, 0x00000002 }, /* MOVE */ { op_31ba_0_comp_nf, 12730, 0x00000002 }, /* MOVE */ { op_31bb_0_comp_nf, 12731, 0x00000002 }, /* MOVE */ { op_31bc_0_comp_nf, 12732, 0x00000002 }, /* MOVE */ { op_31c0_0_comp_nf, 12736, 0x00000002 }, /* MOVE */ { op_31c8_0_comp_nf, 12744, 0x00000002 }, /* MOVE */ { op_31d0_0_comp_nf, 12752, 0x00000002 }, /* MOVE */ { op_31d8_0_comp_nf, 12760, 0x00000002 }, /* MOVE */ { op_31e0_0_comp_nf, 12768, 0x00000002 }, /* MOVE */ { op_31e8_0_comp_nf, 12776, 0x00000002 }, /* MOVE */ { op_31f0_0_comp_nf, 12784, 0x00000002 }, /* MOVE */ { op_31f8_0_comp_nf, 12792, 0x00000002 }, /* MOVE */ { op_31f9_0_comp_nf, 12793, 0x00000002 }, /* MOVE */ { op_31fa_0_comp_nf, 12794, 0x00000002 }, /* MOVE */ { op_31fb_0_comp_nf, 12795, 0x00000002 }, /* MOVE */ { op_31fc_0_comp_nf, 12796, 0x00000002 }, /* MOVE */ { op_33c0_0_comp_nf, 13248, 0x00000002 }, /* MOVE */ { op_33c8_0_comp_nf, 13256, 0x00000002 }, /* MOVE */ { op_33d0_0_comp_nf, 13264, 0x00000002 }, /* MOVE */ { op_33d8_0_comp_nf, 13272, 0x00000002 }, /* MOVE */ { op_33e0_0_comp_nf, 13280, 0x00000002 }, /* MOVE */ { op_33e8_0_comp_nf, 13288, 0x00000002 }, /* MOVE */ { op_33f0_0_comp_nf, 13296, 0x00000002 }, /* MOVE */ { op_33f8_0_comp_nf, 13304, 0x00000002 }, /* MOVE */ { op_33f9_0_comp_nf, 13305, 0x00000002 }, /* MOVE */ { op_33fa_0_comp_nf, 13306, 0x00000002 }, /* MOVE */ { op_33fb_0_comp_nf, 13307, 0x00000002 }, /* MOVE */ { op_33fc_0_comp_nf, 13308, 0x00000002 }, /* MOVE */ { op_4000_0_comp_nf, 16384, 0x00000000 }, /* NEGX */ { op_4010_0_comp_nf, 16400, 0x00000000 }, /* NEGX */ { op_4018_0_comp_nf, 16408, 0x00000000 }, /* NEGX */ { op_4020_0_comp_nf, 16416, 0x00000000 }, /* NEGX */ { op_4028_0_comp_nf, 16424, 0x00000002 }, /* NEGX */ { op_4030_0_comp_nf, 16432, 0x00000002 }, /* NEGX */ { op_4038_0_comp_nf, 16440, 0x00000002 }, /* NEGX */ { op_4039_0_comp_nf, 16441, 0x00000002 }, /* NEGX */ { op_4040_0_comp_nf, 16448, 0x00000000 }, /* NEGX */ { op_4050_0_comp_nf, 16464, 0x00000000 }, /* NEGX */ { op_4058_0_comp_nf, 16472, 0x00000000 }, /* NEGX */ { op_4060_0_comp_nf, 16480, 0x00000000 }, /* NEGX */ { op_4068_0_comp_nf, 16488, 0x00000002 }, /* NEGX */ { op_4070_0_comp_nf, 16496, 0x00000002 }, /* NEGX */ { op_4078_0_comp_nf, 16504, 0x00000002 }, /* NEGX */ { op_4079_0_comp_nf, 16505, 0x00000002 }, /* NEGX */ { op_4080_0_comp_nf, 16512, 0x00000000 }, /* NEGX */ { op_4090_0_comp_nf, 16528, 0x00000000 }, /* NEGX */ { op_4098_0_comp_nf, 16536, 0x00000000 }, /* NEGX */ { op_40a0_0_comp_nf, 16544, 0x00000000 }, /* NEGX */ { op_40a8_0_comp_nf, 16552, 0x00000002 }, /* NEGX */ { op_40b0_0_comp_nf, 16560, 0x00000002 }, /* NEGX */ { op_40b8_0_comp_nf, 16568, 0x00000002 }, /* NEGX */ { op_40b9_0_comp_nf, 16569, 0x00000002 }, /* NEGX */ { NULL, 16576, 0x00000001 }, /* MVSR2 */ { NULL, 16592, 0x00000001 }, /* MVSR2 */ { NULL, 16600, 0x00000001 }, /* MVSR2 */ { NULL, 16608, 0x00000001 }, /* MVSR2 */ { NULL, 16616, 0x00000001 }, /* MVSR2 */ { NULL, 16624, 0x00000001 }, /* MVSR2 */ { NULL, 16632, 0x00000001 }, /* MVSR2 */ { NULL, 16633, 0x00000001 }, /* MVSR2 */ { NULL, 16640, 0x00000001 }, /* CHK */ { NULL, 16656, 0x00000001 }, /* CHK */ { NULL, 16664, 0x00000001 }, /* CHK */ { NULL, 16672, 0x00000001 }, /* CHK */ { NULL, 16680, 0x00000001 }, /* CHK */ { NULL, 16688, 0x00000001 }, /* CHK */ { NULL, 16696, 0x00000001 }, /* CHK */ { NULL, 16697, 0x00000001 }, /* CHK */ { NULL, 16698, 0x00000001 }, /* CHK */ { NULL, 16699, 0x00000001 }, /* CHK */ { NULL, 16700, 0x00000001 }, /* CHK */ { NULL, 16768, 0x00000001 }, /* CHK */ { NULL, 16784, 0x00000001 }, /* CHK */ { NULL, 16792, 0x00000001 }, /* CHK */ { NULL, 16800, 0x00000001 }, /* CHK */ { NULL, 16808, 0x00000001 }, /* CHK */ { NULL, 16816, 0x00000001 }, /* CHK */ { NULL, 16824, 0x00000001 }, /* CHK */ { NULL, 16825, 0x00000001 }, /* CHK */ { NULL, 16826, 0x00000001 }, /* CHK */ { NULL, 16827, 0x00000001 }, /* CHK */ { NULL, 16828, 0x00000001 }, /* CHK */ { op_41d0_0_comp_nf, 16848, 0x00000000 }, /* LEA */ { op_41e8_0_comp_nf, 16872, 0x00000002 }, /* LEA */ { op_41f0_0_comp_nf, 16880, 0x00000002 }, /* LEA */ { op_41f8_0_comp_nf, 16888, 0x00000002 }, /* LEA */ { op_41f9_0_comp_nf, 16889, 0x00000002 }, /* LEA */ { op_41fa_0_comp_nf, 16890, 0x00000002 }, /* LEA */ { op_41fb_0_comp_nf, 16891, 0x00000002 }, /* LEA */ { op_4200_0_comp_nf, 16896, 0x00000000 }, /* CLR */ { op_4210_0_comp_nf, 16912, 0x00000000 }, /* CLR */ { op_4218_0_comp_nf, 16920, 0x00000000 }, /* CLR */ { op_4220_0_comp_nf, 16928, 0x00000000 }, /* CLR */ { op_4228_0_comp_nf, 16936, 0x00000002 }, /* CLR */ { op_4230_0_comp_nf, 16944, 0x00000002 }, /* CLR */ { op_4238_0_comp_nf, 16952, 0x00000002 }, /* CLR */ { op_4239_0_comp_nf, 16953, 0x00000002 }, /* CLR */ { op_4240_0_comp_nf, 16960, 0x00000000 }, /* CLR */ { op_4250_0_comp_nf, 16976, 0x00000000 }, /* CLR */ { op_4258_0_comp_nf, 16984, 0x00000000 }, /* CLR */ { op_4260_0_comp_nf, 16992, 0x00000000 }, /* CLR */ { op_4268_0_comp_nf, 17000, 0x00000002 }, /* CLR */ { op_4270_0_comp_nf, 17008, 0x00000002 }, /* CLR */ { op_4278_0_comp_nf, 17016, 0x00000002 }, /* CLR */ { op_4279_0_comp_nf, 17017, 0x00000002 }, /* CLR */ { op_4280_0_comp_nf, 17024, 0x00000000 }, /* CLR */ { op_4290_0_comp_nf, 17040, 0x00000000 }, /* CLR */ { op_4298_0_comp_nf, 17048, 0x00000000 }, /* CLR */ { op_42a0_0_comp_nf, 17056, 0x00000000 }, /* CLR */ { op_42a8_0_comp_nf, 17064, 0x00000002 }, /* CLR */ { op_42b0_0_comp_nf, 17072, 0x00000002 }, /* CLR */ { op_42b8_0_comp_nf, 17080, 0x00000002 }, /* CLR */ { op_42b9_0_comp_nf, 17081, 0x00000002 }, /* CLR */ { NULL, 17088, 0x00000001 }, /* MVSR2 */ { NULL, 17104, 0x00000001 }, /* MVSR2 */ { NULL, 17112, 0x00000001 }, /* MVSR2 */ { NULL, 17120, 0x00000001 }, /* MVSR2 */ { NULL, 17128, 0x00000001 }, /* MVSR2 */ { NULL, 17136, 0x00000001 }, /* MVSR2 */ { NULL, 17144, 0x00000001 }, /* MVSR2 */ { NULL, 17145, 0x00000001 }, /* MVSR2 */ { op_4400_0_comp_nf, 17408, 0x00000000 }, /* NEG */ { op_4410_0_comp_nf, 17424, 0x00000000 }, /* NEG */ { op_4418_0_comp_nf, 17432, 0x00000000 }, /* NEG */ { op_4420_0_comp_nf, 17440, 0x00000000 }, /* NEG */ { op_4428_0_comp_nf, 17448, 0x00000002 }, /* NEG */ { op_4430_0_comp_nf, 17456, 0x00000002 }, /* NEG */ { op_4438_0_comp_nf, 17464, 0x00000002 }, /* NEG */ { op_4439_0_comp_nf, 17465, 0x00000002 }, /* NEG */ { op_4440_0_comp_nf, 17472, 0x00000000 }, /* NEG */ { op_4450_0_comp_nf, 17488, 0x00000000 }, /* NEG */ { op_4458_0_comp_nf, 17496, 0x00000000 }, /* NEG */ { op_4460_0_comp_nf, 17504, 0x00000000 }, /* NEG */ { op_4468_0_comp_nf, 17512, 0x00000002 }, /* NEG */ { op_4470_0_comp_nf, 17520, 0x00000002 }, /* NEG */ { op_4478_0_comp_nf, 17528, 0x00000002 }, /* NEG */ { op_4479_0_comp_nf, 17529, 0x00000002 }, /* NEG */ { op_4480_0_comp_nf, 17536, 0x00000000 }, /* NEG */ { op_4490_0_comp_nf, 17552, 0x00000000 }, /* NEG */ { op_4498_0_comp_nf, 17560, 0x00000000 }, /* NEG */ { op_44a0_0_comp_nf, 17568, 0x00000000 }, /* NEG */ { op_44a8_0_comp_nf, 17576, 0x00000002 }, /* NEG */ { op_44b0_0_comp_nf, 17584, 0x00000002 }, /* NEG */ { op_44b8_0_comp_nf, 17592, 0x00000002 }, /* NEG */ { op_44b9_0_comp_nf, 17593, 0x00000002 }, /* NEG */ { NULL, 17600, 0x00000001 }, /* MV2SR */ { NULL, 17616, 0x00000001 }, /* MV2SR */ { NULL, 17624, 0x00000001 }, /* MV2SR */ { NULL, 17632, 0x00000001 }, /* MV2SR */ { NULL, 17640, 0x00000001 }, /* MV2SR */ { NULL, 17648, 0x00000001 }, /* MV2SR */ { NULL, 17656, 0x00000001 }, /* MV2SR */ { NULL, 17657, 0x00000001 }, /* MV2SR */ { NULL, 17658, 0x00000001 }, /* MV2SR */ { NULL, 17659, 0x00000001 }, /* MV2SR */ { NULL, 17660, 0x00000001 }, /* MV2SR */ { op_4600_0_comp_nf, 17920, 0x00000000 }, /* NOT */ { op_4610_0_comp_nf, 17936, 0x00000000 }, /* NOT */ { op_4618_0_comp_nf, 17944, 0x00000000 }, /* NOT */ { op_4620_0_comp_nf, 17952, 0x00000000 }, /* NOT */ { op_4628_0_comp_nf, 17960, 0x00000002 }, /* NOT */ { op_4630_0_comp_nf, 17968, 0x00000002 }, /* NOT */ { op_4638_0_comp_nf, 17976, 0x00000002 }, /* NOT */ { op_4639_0_comp_nf, 17977, 0x00000002 }, /* NOT */ { op_4640_0_comp_nf, 17984, 0x00000000 }, /* NOT */ { op_4650_0_comp_nf, 18000, 0x00000000 }, /* NOT */ { op_4658_0_comp_nf, 18008, 0x00000000 }, /* NOT */ { op_4660_0_comp_nf, 18016, 0x00000000 }, /* NOT */ { op_4668_0_comp_nf, 18024, 0x00000002 }, /* NOT */ { op_4670_0_comp_nf, 18032, 0x00000002 }, /* NOT */ { op_4678_0_comp_nf, 18040, 0x00000002 }, /* NOT */ { op_4679_0_comp_nf, 18041, 0x00000002 }, /* NOT */ { op_4680_0_comp_nf, 18048, 0x00000000 }, /* NOT */ { op_4690_0_comp_nf, 18064, 0x00000000 }, /* NOT */ { op_4698_0_comp_nf, 18072, 0x00000000 }, /* NOT */ { op_46a0_0_comp_nf, 18080, 0x00000000 }, /* NOT */ { op_46a8_0_comp_nf, 18088, 0x00000002 }, /* NOT */ { op_46b0_0_comp_nf, 18096, 0x00000002 }, /* NOT */ { op_46b8_0_comp_nf, 18104, 0x00000002 }, /* NOT */ { op_46b9_0_comp_nf, 18105, 0x00000002 }, /* NOT */ { NULL, 18112, 0x00000001 }, /* MV2SR */ { NULL, 18128, 0x00000001 }, /* MV2SR */ { NULL, 18136, 0x00000001 }, /* MV2SR */ { NULL, 18144, 0x00000001 }, /* MV2SR */ { NULL, 18152, 0x00000001 }, /* MV2SR */ { NULL, 18160, 0x00000001 }, /* MV2SR */ { NULL, 18168, 0x00000001 }, /* MV2SR */ { NULL, 18169, 0x00000001 }, /* MV2SR */ { NULL, 18170, 0x00000001 }, /* MV2SR */ { NULL, 18171, 0x00000001 }, /* MV2SR */ { NULL, 18172, 0x00000001 }, /* MV2SR */ { NULL, 18432, 0x00000000 }, /* NBCD */ { op_4808_0_comp_nf, 18440, 0x00000002 }, /* LINK */ { NULL, 18448, 0x00000000 }, /* NBCD */ { NULL, 18456, 0x00000000 }, /* NBCD */ { NULL, 18464, 0x00000000 }, /* NBCD */ { NULL, 18472, 0x00000000 }, /* NBCD */ { NULL, 18480, 0x00000000 }, /* NBCD */ { NULL, 18488, 0x00000000 }, /* NBCD */ { NULL, 18489, 0x00000000 }, /* NBCD */ { op_4840_0_comp_nf, 18496, 0x00000000 }, /* SWAP */ { NULL, 18504, 0x00000001 }, /* BKPT */ { op_4850_0_comp_nf, 18512, 0x00000000 }, /* PEA */ { op_4868_0_comp_nf, 18536, 0x00000002 }, /* PEA */ { op_4870_0_comp_nf, 18544, 0x00000002 }, /* PEA */ { op_4878_0_comp_nf, 18552, 0x00000002 }, /* PEA */ { op_4879_0_comp_nf, 18553, 0x00000002 }, /* PEA */ { op_487a_0_comp_nf, 18554, 0x00000002 }, /* PEA */ { op_487b_0_comp_nf, 18555, 0x00000002 }, /* PEA */ { op_4880_0_comp_nf, 18560, 0x00000000 }, /* EXT */ { op_4890_0_comp_nf, 18576, 0x00000002 }, /* MVMLE */ { op_48a0_0_comp_nf, 18592, 0x00000002 }, /* MVMLE */ { op_48a8_0_comp_nf, 18600, 0x00000002 }, /* MVMLE */ { op_48b0_0_comp_nf, 18608, 0x00000002 }, /* MVMLE */ { op_48b8_0_comp_nf, 18616, 0x00000002 }, /* MVMLE */ { op_48b9_0_comp_nf, 18617, 0x00000002 }, /* MVMLE */ { op_48c0_0_comp_nf, 18624, 0x00000000 }, /* EXT */ { op_48d0_0_comp_nf, 18640, 0x00000002 }, /* MVMLE */ { op_48e0_0_comp_nf, 18656, 0x00000002 }, /* MVMLE */ { op_48e8_0_comp_nf, 18664, 0x00000002 }, /* MVMLE */ { op_48f0_0_comp_nf, 18672, 0x00000002 }, /* MVMLE */ { op_48f8_0_comp_nf, 18680, 0x00000002 }, /* MVMLE */ { op_48f9_0_comp_nf, 18681, 0x00000002 }, /* MVMLE */ { op_49c0_0_comp_nf, 18880, 0x00000000 }, /* EXT */ { op_4a00_0_comp_nf, 18944, 0x00000000 }, /* TST */ { op_4a10_0_comp_nf, 18960, 0x00000000 }, /* TST */ { op_4a18_0_comp_nf, 18968, 0x00000000 }, /* TST */ { op_4a20_0_comp_nf, 18976, 0x00000000 }, /* TST */ { op_4a28_0_comp_nf, 18984, 0x00000002 }, /* TST */ { op_4a30_0_comp_nf, 18992, 0x00000002 }, /* TST */ { op_4a38_0_comp_nf, 19000, 0x00000002 }, /* TST */ { op_4a39_0_comp_nf, 19001, 0x00000002 }, /* TST */ { op_4a3a_0_comp_nf, 19002, 0x00000002 }, /* TST */ { op_4a3b_0_comp_nf, 19003, 0x00000002 }, /* TST */ { op_4a3c_0_comp_nf, 19004, 0x00000002 }, /* TST */ { op_4a40_0_comp_nf, 19008, 0x00000000 }, /* TST */ { op_4a48_0_comp_nf, 19016, 0x00000000 }, /* TST */ { op_4a50_0_comp_nf, 19024, 0x00000000 }, /* TST */ { op_4a58_0_comp_nf, 19032, 0x00000000 }, /* TST */ { op_4a60_0_comp_nf, 19040, 0x00000000 }, /* TST */ { op_4a68_0_comp_nf, 19048, 0x00000002 }, /* TST */ { op_4a70_0_comp_nf, 19056, 0x00000002 }, /* TST */ { op_4a78_0_comp_nf, 19064, 0x00000002 }, /* TST */ { op_4a79_0_comp_nf, 19065, 0x00000002 }, /* TST */ { op_4a7a_0_comp_nf, 19066, 0x00000002 }, /* TST */ { op_4a7b_0_comp_nf, 19067, 0x00000002 }, /* TST */ { op_4a7c_0_comp_nf, 19068, 0x00000002 }, /* TST */ { op_4a80_0_comp_nf, 19072, 0x00000000 }, /* TST */ { op_4a88_0_comp_nf, 19080, 0x00000000 }, /* TST */ { op_4a90_0_comp_nf, 19088, 0x00000000 }, /* TST */ { op_4a98_0_comp_nf, 19096, 0x00000000 }, /* TST */ { op_4aa0_0_comp_nf, 19104, 0x00000000 }, /* TST */ { op_4aa8_0_comp_nf, 19112, 0x00000002 }, /* TST */ { op_4ab0_0_comp_nf, 19120, 0x00000002 }, /* TST */ { op_4ab8_0_comp_nf, 19128, 0x00000002 }, /* TST */ { op_4ab9_0_comp_nf, 19129, 0x00000002 }, /* TST */ { op_4aba_0_comp_nf, 19130, 0x00000002 }, /* TST */ { op_4abb_0_comp_nf, 19131, 0x00000002 }, /* TST */ { op_4abc_0_comp_nf, 19132, 0x00000002 }, /* TST */ { NULL, 19136, 0x00000000 }, /* TAS */ { NULL, 19152, 0x00000000 }, /* TAS */ { NULL, 19160, 0x00000000 }, /* TAS */ { NULL, 19168, 0x00000000 }, /* TAS */ { NULL, 19176, 0x00000000 }, /* TAS */ { NULL, 19184, 0x00000000 }, /* TAS */ { NULL, 19192, 0x00000000 }, /* TAS */ { NULL, 19193, 0x00000000 }, /* TAS */ { op_4c00_0_comp_nf, 19456, 0x00000002 }, /* MULL */ { op_4c10_0_comp_nf, 19472, 0x00000002 }, /* MULL */ { op_4c18_0_comp_nf, 19480, 0x00000002 }, /* MULL */ { op_4c20_0_comp_nf, 19488, 0x00000002 }, /* MULL */ { op_4c28_0_comp_nf, 19496, 0x00000002 }, /* MULL */ { op_4c30_0_comp_nf, 19504, 0x00000002 }, /* MULL */ { op_4c38_0_comp_nf, 19512, 0x00000002 }, /* MULL */ { op_4c39_0_comp_nf, 19513, 0x00000002 }, /* MULL */ { op_4c3a_0_comp_nf, 19514, 0x00000002 }, /* MULL */ { op_4c3b_0_comp_nf, 19515, 0x00000002 }, /* MULL */ { op_4c3c_0_comp_nf, 19516, 0x00000002 }, /* MULL */ { NULL, 19520, 0x00000001 }, /* DIVL */ { NULL, 19536, 0x00000001 }, /* DIVL */ { NULL, 19544, 0x00000001 }, /* DIVL */ { NULL, 19552, 0x00000001 }, /* DIVL */ { NULL, 19560, 0x00000001 }, /* DIVL */ { NULL, 19568, 0x00000001 }, /* DIVL */ { NULL, 19576, 0x00000001 }, /* DIVL */ { NULL, 19577, 0x00000001 }, /* DIVL */ { NULL, 19578, 0x00000001 }, /* DIVL */ { NULL, 19579, 0x00000001 }, /* DIVL */ { NULL, 19580, 0x00000001 }, /* DIVL */ { op_4c90_0_comp_nf, 19600, 0x00000002 }, /* MVMEL */ { op_4c98_0_comp_nf, 19608, 0x00000002 }, /* MVMEL */ { op_4ca8_0_comp_nf, 19624, 0x00000002 }, /* MVMEL */ { op_4cb0_0_comp_nf, 19632, 0x00000002 }, /* MVMEL */ { op_4cb8_0_comp_nf, 19640, 0x00000002 }, /* MVMEL */ { op_4cb9_0_comp_nf, 19641, 0x00000002 }, /* MVMEL */ { op_4cba_0_comp_nf, 19642, 0x00000002 }, /* MVMEL */ { op_4cbb_0_comp_nf, 19643, 0x00000002 }, /* MVMEL */ { op_4cd0_0_comp_nf, 19664, 0x00000002 }, /* MVMEL */ { op_4cd8_0_comp_nf, 19672, 0x00000002 }, /* MVMEL */ { op_4ce8_0_comp_nf, 19688, 0x00000002 }, /* MVMEL */ { op_4cf0_0_comp_nf, 19696, 0x00000002 }, /* MVMEL */ { op_4cf8_0_comp_nf, 19704, 0x00000002 }, /* MVMEL */ { op_4cf9_0_comp_nf, 19705, 0x00000002 }, /* MVMEL */ { op_4cfa_0_comp_nf, 19706, 0x00000002 }, /* MVMEL */ { op_4cfb_0_comp_nf, 19707, 0x00000002 }, /* MVMEL */ { NULL, 20032, 0x00000001 }, /* TRAP */ { op_4e50_0_comp_nf, 20048, 0x00000002 }, /* LINK */ { op_4e58_0_comp_nf, 20056, 0x00000000 }, /* UNLK */ { NULL, 20064, 0x00000001 }, /* MVR2USP */ { NULL, 20072, 0x00000001 }, /* MVUSP2R */ { NULL, 20080, 0x00000001 }, /* RESET */ { op_4e71_0_comp_nf, 20081, 0x00000000 }, /* NOP */ { NULL, 20082, 0x00000001 }, /* STOP */ { NULL, 20083, 0x00000001 }, /* RTE */ { op_4e74_0_comp_nf, 20084, 0x00000003 }, /* RTD */ { op_4e75_0_comp_nf, 20085, 0x00000001 }, /* RTS */ { NULL, 20086, 0x00000001 }, /* TRAPV */ { NULL, 20087, 0x00000001 }, /* RTR */ { NULL, 20090, 0x00000001 }, /* MOVEC2 */ { NULL, 20091, 0x00000001 }, /* MOVE2C */ { op_4e90_0_comp_nf, 20112, 0x00000001 }, /* JSR */ { op_4ea8_0_comp_nf, 20136, 0x00000003 }, /* JSR */ { op_4eb0_0_comp_nf, 20144, 0x00000003 }, /* JSR */ { op_4eb8_0_comp_nf, 20152, 0x00000003 }, /* JSR */ { op_4eb9_0_comp_nf, 20153, 0x00000003 }, /* JSR */ { op_4eba_0_comp_nf, 20154, 0x00000003 }, /* JSR */ { op_4ebb_0_comp_nf, 20155, 0x00000003 }, /* JSR */ { op_4ed0_0_comp_nf, 20176, 0x00000001 }, /* JMP */ { op_4ee8_0_comp_nf, 20200, 0x00000003 }, /* JMP */ { op_4ef0_0_comp_nf, 20208, 0x00000003 }, /* JMP */ { op_4ef8_0_comp_nf, 20216, 0x00000003 }, /* JMP */ { op_4ef9_0_comp_nf, 20217, 0x00000003 }, /* JMP */ { op_4efa_0_comp_nf, 20218, 0x00000003 }, /* JMP */ { op_4efb_0_comp_nf, 20219, 0x00000003 }, /* JMP */ { op_5000_0_comp_nf, 20480, 0x00000000 }, /* ADD */ { op_5010_0_comp_nf, 20496, 0x00000000 }, /* ADD */ { op_5018_0_comp_nf, 20504, 0x00000000 }, /* ADD */ { op_5020_0_comp_nf, 20512, 0x00000000 }, /* ADD */ { op_5028_0_comp_nf, 20520, 0x00000002 }, /* ADD */ { op_5030_0_comp_nf, 20528, 0x00000002 }, /* ADD */ { op_5038_0_comp_nf, 20536, 0x00000002 }, /* ADD */ { op_5039_0_comp_nf, 20537, 0x00000002 }, /* ADD */ { op_5040_0_comp_nf, 20544, 0x00000000 }, /* ADD */ { op_5048_0_comp_nf, 20552, 0x00000000 }, /* ADDA */ { op_5050_0_comp_nf, 20560, 0x00000000 }, /* ADD */ { op_5058_0_comp_nf, 20568, 0x00000000 }, /* ADD */ { op_5060_0_comp_nf, 20576, 0x00000000 }, /* ADD */ { op_5068_0_comp_nf, 20584, 0x00000002 }, /* ADD */ { op_5070_0_comp_nf, 20592, 0x00000002 }, /* ADD */ { op_5078_0_comp_nf, 20600, 0x00000002 }, /* ADD */ { op_5079_0_comp_nf, 20601, 0x00000002 }, /* ADD */ { op_5080_0_comp_nf, 20608, 0x00000000 }, /* ADD */ { op_5088_0_comp_nf, 20616, 0x00000000 }, /* ADDA */ { op_5090_0_comp_nf, 20624, 0x00000000 }, /* ADD */ { op_5098_0_comp_nf, 20632, 0x00000000 }, /* ADD */ { op_50a0_0_comp_nf, 20640, 0x00000000 }, /* ADD */ { op_50a8_0_comp_nf, 20648, 0x00000002 }, /* ADD */ { op_50b0_0_comp_nf, 20656, 0x00000002 }, /* ADD */ { op_50b8_0_comp_nf, 20664, 0x00000002 }, /* ADD */ { op_50b9_0_comp_nf, 20665, 0x00000002 }, /* ADD */ { op_50c0_0_comp_nf, 20672, 0x00000000 }, /* Scc */ { op_50c8_0_comp_nf, 20680, 0x00000007 }, /* DBcc */ { op_50d0_0_comp_nf, 20688, 0x00000000 }, /* Scc */ { op_50d8_0_comp_nf, 20696, 0x00000000 }, /* Scc */ { op_50e0_0_comp_nf, 20704, 0x00000000 }, /* Scc */ { op_50e8_0_comp_nf, 20712, 0x00000002 }, /* Scc */ { op_50f0_0_comp_nf, 20720, 0x00000002 }, /* Scc */ { op_50f8_0_comp_nf, 20728, 0x00000002 }, /* Scc */ { op_50f9_0_comp_nf, 20729, 0x00000002 }, /* Scc */ { NULL, 20730, 0x00000001 }, /* TRAPcc */ { NULL, 20731, 0x00000001 }, /* TRAPcc */ { NULL, 20732, 0x00000001 }, /* TRAPcc */ { op_5100_0_comp_nf, 20736, 0x00000000 }, /* SUB */ { op_5110_0_comp_nf, 20752, 0x00000000 }, /* SUB */ { op_5118_0_comp_nf, 20760, 0x00000000 }, /* SUB */ { op_5120_0_comp_nf, 20768, 0x00000000 }, /* SUB */ { op_5128_0_comp_nf, 20776, 0x00000002 }, /* SUB */ { op_5130_0_comp_nf, 20784, 0x00000002 }, /* SUB */ { op_5138_0_comp_nf, 20792, 0x00000002 }, /* SUB */ { op_5139_0_comp_nf, 20793, 0x00000002 }, /* SUB */ { op_5140_0_comp_nf, 20800, 0x00000000 }, /* SUB */ { op_5148_0_comp_nf, 20808, 0x00000000 }, /* SUBA */ { op_5150_0_comp_nf, 20816, 0x00000000 }, /* SUB */ { op_5158_0_comp_nf, 20824, 0x00000000 }, /* SUB */ { op_5160_0_comp_nf, 20832, 0x00000000 }, /* SUB */ { op_5168_0_comp_nf, 20840, 0x00000002 }, /* SUB */ { op_5170_0_comp_nf, 20848, 0x00000002 }, /* SUB */ { op_5178_0_comp_nf, 20856, 0x00000002 }, /* SUB */ { op_5179_0_comp_nf, 20857, 0x00000002 }, /* SUB */ { op_5180_0_comp_nf, 20864, 0x00000000 }, /* SUB */ { op_5188_0_comp_nf, 20872, 0x00000000 }, /* SUBA */ { op_5190_0_comp_nf, 20880, 0x00000000 }, /* SUB */ { op_5198_0_comp_nf, 20888, 0x00000000 }, /* SUB */ { op_51a0_0_comp_nf, 20896, 0x00000000 }, /* SUB */ { op_51a8_0_comp_nf, 20904, 0x00000002 }, /* SUB */ { op_51b0_0_comp_nf, 20912, 0x00000002 }, /* SUB */ { op_51b8_0_comp_nf, 20920, 0x00000002 }, /* SUB */ { op_51b9_0_comp_nf, 20921, 0x00000002 }, /* SUB */ { op_51c0_0_comp_nf, 20928, 0x00000000 }, /* Scc */ { op_51c8_0_comp_nf, 20936, 0x00000007 }, /* DBcc */ { op_51d0_0_comp_nf, 20944, 0x00000000 }, /* Scc */ { op_51d8_0_comp_nf, 20952, 0x00000000 }, /* Scc */ { op_51e0_0_comp_nf, 20960, 0x00000000 }, /* Scc */ { op_51e8_0_comp_nf, 20968, 0x00000002 }, /* Scc */ { op_51f0_0_comp_nf, 20976, 0x00000002 }, /* Scc */ { op_51f8_0_comp_nf, 20984, 0x00000002 }, /* Scc */ { op_51f9_0_comp_nf, 20985, 0x00000002 }, /* Scc */ { NULL, 20986, 0x00000001 }, /* TRAPcc */ { NULL, 20987, 0x00000001 }, /* TRAPcc */ { NULL, 20988, 0x00000001 }, /* TRAPcc */ { op_52c0_0_comp_nf, 21184, 0x00000000 }, /* Scc */ { op_52c8_0_comp_nf, 21192, 0x00000007 }, /* DBcc */ { op_52d0_0_comp_nf, 21200, 0x00000000 }, /* Scc */ { op_52d8_0_comp_nf, 21208, 0x00000000 }, /* Scc */ { op_52e0_0_comp_nf, 21216, 0x00000000 }, /* Scc */ { op_52e8_0_comp_nf, 21224, 0x00000002 }, /* Scc */ { op_52f0_0_comp_nf, 21232, 0x00000002 }, /* Scc */ { op_52f8_0_comp_nf, 21240, 0x00000002 }, /* Scc */ { op_52f9_0_comp_nf, 21241, 0x00000002 }, /* Scc */ { NULL, 21242, 0x00000001 }, /* TRAPcc */ { NULL, 21243, 0x00000001 }, /* TRAPcc */ { NULL, 21244, 0x00000001 }, /* TRAPcc */ { op_53c0_0_comp_nf, 21440, 0x00000000 }, /* Scc */ { op_53c8_0_comp_nf, 21448, 0x00000007 }, /* DBcc */ { op_53d0_0_comp_nf, 21456, 0x00000000 }, /* Scc */ { op_53d8_0_comp_nf, 21464, 0x00000000 }, /* Scc */ { op_53e0_0_comp_nf, 21472, 0x00000000 }, /* Scc */ { op_53e8_0_comp_nf, 21480, 0x00000002 }, /* Scc */ { op_53f0_0_comp_nf, 21488, 0x00000002 }, /* Scc */ { op_53f8_0_comp_nf, 21496, 0x00000002 }, /* Scc */ { op_53f9_0_comp_nf, 21497, 0x00000002 }, /* Scc */ { NULL, 21498, 0x00000001 }, /* TRAPcc */ { NULL, 21499, 0x00000001 }, /* TRAPcc */ { NULL, 21500, 0x00000001 }, /* TRAPcc */ { op_54c0_0_comp_nf, 21696, 0x00000000 }, /* Scc */ { op_54c8_0_comp_nf, 21704, 0x00000007 }, /* DBcc */ { op_54d0_0_comp_nf, 21712, 0x00000000 }, /* Scc */ { op_54d8_0_comp_nf, 21720, 0x00000000 }, /* Scc */ { op_54e0_0_comp_nf, 21728, 0x00000000 }, /* Scc */ { op_54e8_0_comp_nf, 21736, 0x00000002 }, /* Scc */ { op_54f0_0_comp_nf, 21744, 0x00000002 }, /* Scc */ { op_54f8_0_comp_nf, 21752, 0x00000002 }, /* Scc */ { op_54f9_0_comp_nf, 21753, 0x00000002 }, /* Scc */ { NULL, 21754, 0x00000001 }, /* TRAPcc */ { NULL, 21755, 0x00000001 }, /* TRAPcc */ { NULL, 21756, 0x00000001 }, /* TRAPcc */ { op_55c0_0_comp_nf, 21952, 0x00000000 }, /* Scc */ { op_55c8_0_comp_nf, 21960, 0x00000007 }, /* DBcc */ { op_55d0_0_comp_nf, 21968, 0x00000000 }, /* Scc */ { op_55d8_0_comp_nf, 21976, 0x00000000 }, /* Scc */ { op_55e0_0_comp_nf, 21984, 0x00000000 }, /* Scc */ { op_55e8_0_comp_nf, 21992, 0x00000002 }, /* Scc */ { op_55f0_0_comp_nf, 22000, 0x00000002 }, /* Scc */ { op_55f8_0_comp_nf, 22008, 0x00000002 }, /* Scc */ { op_55f9_0_comp_nf, 22009, 0x00000002 }, /* Scc */ { NULL, 22010, 0x00000001 }, /* TRAPcc */ { NULL, 22011, 0x00000001 }, /* TRAPcc */ { NULL, 22012, 0x00000001 }, /* TRAPcc */ { op_56c0_0_comp_nf, 22208, 0x00000000 }, /* Scc */ { op_56c8_0_comp_nf, 22216, 0x00000007 }, /* DBcc */ { op_56d0_0_comp_nf, 22224, 0x00000000 }, /* Scc */ { op_56d8_0_comp_nf, 22232, 0x00000000 }, /* Scc */ { op_56e0_0_comp_nf, 22240, 0x00000000 }, /* Scc */ { op_56e8_0_comp_nf, 22248, 0x00000002 }, /* Scc */ { op_56f0_0_comp_nf, 22256, 0x00000002 }, /* Scc */ { op_56f8_0_comp_nf, 22264, 0x00000002 }, /* Scc */ { op_56f9_0_comp_nf, 22265, 0x00000002 }, /* Scc */ { NULL, 22266, 0x00000001 }, /* TRAPcc */ { NULL, 22267, 0x00000001 }, /* TRAPcc */ { NULL, 22268, 0x00000001 }, /* TRAPcc */ { op_57c0_0_comp_nf, 22464, 0x00000000 }, /* Scc */ { op_57c8_0_comp_nf, 22472, 0x00000007 }, /* DBcc */ { op_57d0_0_comp_nf, 22480, 0x00000000 }, /* Scc */ { op_57d8_0_comp_nf, 22488, 0x00000000 }, /* Scc */ { op_57e0_0_comp_nf, 22496, 0x00000000 }, /* Scc */ { op_57e8_0_comp_nf, 22504, 0x00000002 }, /* Scc */ { op_57f0_0_comp_nf, 22512, 0x00000002 }, /* Scc */ { op_57f8_0_comp_nf, 22520, 0x00000002 }, /* Scc */ { op_57f9_0_comp_nf, 22521, 0x00000002 }, /* Scc */ { NULL, 22522, 0x00000001 }, /* TRAPcc */ { NULL, 22523, 0x00000001 }, /* TRAPcc */ { NULL, 22524, 0x00000001 }, /* TRAPcc */ { NULL, 22720, 0x00000000 }, /* Scc */ { NULL, 22728, 0x00000007 }, /* DBcc */ { NULL, 22736, 0x00000000 }, /* Scc */ { NULL, 22744, 0x00000000 }, /* Scc */ { NULL, 22752, 0x00000000 }, /* Scc */ { NULL, 22760, 0x00000002 }, /* Scc */ { NULL, 22768, 0x00000002 }, /* Scc */ { NULL, 22776, 0x00000002 }, /* Scc */ { NULL, 22777, 0x00000002 }, /* Scc */ { NULL, 22778, 0x00000001 }, /* TRAPcc */ { NULL, 22779, 0x00000001 }, /* TRAPcc */ { NULL, 22780, 0x00000001 }, /* TRAPcc */ { NULL, 22976, 0x00000000 }, /* Scc */ { NULL, 22984, 0x00000007 }, /* DBcc */ { NULL, 22992, 0x00000000 }, /* Scc */ { NULL, 23000, 0x00000000 }, /* Scc */ { NULL, 23008, 0x00000000 }, /* Scc */ { NULL, 23016, 0x00000002 }, /* Scc */ { NULL, 23024, 0x00000002 }, /* Scc */ { NULL, 23032, 0x00000002 }, /* Scc */ { NULL, 23033, 0x00000002 }, /* Scc */ { NULL, 23034, 0x00000001 }, /* TRAPcc */ { NULL, 23035, 0x00000001 }, /* TRAPcc */ { NULL, 23036, 0x00000001 }, /* TRAPcc */ { op_5ac0_0_comp_nf, 23232, 0x00000000 }, /* Scc */ { op_5ac8_0_comp_nf, 23240, 0x00000007 }, /* DBcc */ { op_5ad0_0_comp_nf, 23248, 0x00000000 }, /* Scc */ { op_5ad8_0_comp_nf, 23256, 0x00000000 }, /* Scc */ { op_5ae0_0_comp_nf, 23264, 0x00000000 }, /* Scc */ { op_5ae8_0_comp_nf, 23272, 0x00000002 }, /* Scc */ { op_5af0_0_comp_nf, 23280, 0x00000002 }, /* Scc */ { op_5af8_0_comp_nf, 23288, 0x00000002 }, /* Scc */ { op_5af9_0_comp_nf, 23289, 0x00000002 }, /* Scc */ { NULL, 23290, 0x00000001 }, /* TRAPcc */ { NULL, 23291, 0x00000001 }, /* TRAPcc */ { NULL, 23292, 0x00000001 }, /* TRAPcc */ { op_5bc0_0_comp_nf, 23488, 0x00000000 }, /* Scc */ { op_5bc8_0_comp_nf, 23496, 0x00000007 }, /* DBcc */ { op_5bd0_0_comp_nf, 23504, 0x00000000 }, /* Scc */ { op_5bd8_0_comp_nf, 23512, 0x00000000 }, /* Scc */ { op_5be0_0_comp_nf, 23520, 0x00000000 }, /* Scc */ { op_5be8_0_comp_nf, 23528, 0x00000002 }, /* Scc */ { op_5bf0_0_comp_nf, 23536, 0x00000002 }, /* Scc */ { op_5bf8_0_comp_nf, 23544, 0x00000002 }, /* Scc */ { op_5bf9_0_comp_nf, 23545, 0x00000002 }, /* Scc */ { NULL, 23546, 0x00000001 }, /* TRAPcc */ { NULL, 23547, 0x00000001 }, /* TRAPcc */ { NULL, 23548, 0x00000001 }, /* TRAPcc */ { op_5cc0_0_comp_nf, 23744, 0x00000000 }, /* Scc */ { op_5cc8_0_comp_nf, 23752, 0x00000007 }, /* DBcc */ { op_5cd0_0_comp_nf, 23760, 0x00000000 }, /* Scc */ { op_5cd8_0_comp_nf, 23768, 0x00000000 }, /* Scc */ { op_5ce0_0_comp_nf, 23776, 0x00000000 }, /* Scc */ { op_5ce8_0_comp_nf, 23784, 0x00000002 }, /* Scc */ { op_5cf0_0_comp_nf, 23792, 0x00000002 }, /* Scc */ { op_5cf8_0_comp_nf, 23800, 0x00000002 }, /* Scc */ { op_5cf9_0_comp_nf, 23801, 0x00000002 }, /* Scc */ { NULL, 23802, 0x00000001 }, /* TRAPcc */ { NULL, 23803, 0x00000001 }, /* TRAPcc */ { NULL, 23804, 0x00000001 }, /* TRAPcc */ { op_5dc0_0_comp_nf, 24000, 0x00000000 }, /* Scc */ { op_5dc8_0_comp_nf, 24008, 0x00000007 }, /* DBcc */ { op_5dd0_0_comp_nf, 24016, 0x00000000 }, /* Scc */ { op_5dd8_0_comp_nf, 24024, 0x00000000 }, /* Scc */ { op_5de0_0_comp_nf, 24032, 0x00000000 }, /* Scc */ { op_5de8_0_comp_nf, 24040, 0x00000002 }, /* Scc */ { op_5df0_0_comp_nf, 24048, 0x00000002 }, /* Scc */ { op_5df8_0_comp_nf, 24056, 0x00000002 }, /* Scc */ { op_5df9_0_comp_nf, 24057, 0x00000002 }, /* Scc */ { NULL, 24058, 0x00000001 }, /* TRAPcc */ { NULL, 24059, 0x00000001 }, /* TRAPcc */ { NULL, 24060, 0x00000001 }, /* TRAPcc */ { op_5ec0_0_comp_nf, 24256, 0x00000000 }, /* Scc */ { op_5ec8_0_comp_nf, 24264, 0x00000007 }, /* DBcc */ { op_5ed0_0_comp_nf, 24272, 0x00000000 }, /* Scc */ { op_5ed8_0_comp_nf, 24280, 0x00000000 }, /* Scc */ { op_5ee0_0_comp_nf, 24288, 0x00000000 }, /* Scc */ { op_5ee8_0_comp_nf, 24296, 0x00000002 }, /* Scc */ { op_5ef0_0_comp_nf, 24304, 0x00000002 }, /* Scc */ { op_5ef8_0_comp_nf, 24312, 0x00000002 }, /* Scc */ { op_5ef9_0_comp_nf, 24313, 0x00000002 }, /* Scc */ { NULL, 24314, 0x00000001 }, /* TRAPcc */ { NULL, 24315, 0x00000001 }, /* TRAPcc */ { NULL, 24316, 0x00000001 }, /* TRAPcc */ { op_5fc0_0_comp_nf, 24512, 0x00000000 }, /* Scc */ { op_5fc8_0_comp_nf, 24520, 0x00000007 }, /* DBcc */ { op_5fd0_0_comp_nf, 24528, 0x00000000 }, /* Scc */ { op_5fd8_0_comp_nf, 24536, 0x00000000 }, /* Scc */ { op_5fe0_0_comp_nf, 24544, 0x00000000 }, /* Scc */ { op_5fe8_0_comp_nf, 24552, 0x00000002 }, /* Scc */ { op_5ff0_0_comp_nf, 24560, 0x00000002 }, /* Scc */ { op_5ff8_0_comp_nf, 24568, 0x00000002 }, /* Scc */ { op_5ff9_0_comp_nf, 24569, 0x00000002 }, /* Scc */ { NULL, 24570, 0x00000001 }, /* TRAPcc */ { NULL, 24571, 0x00000001 }, /* TRAPcc */ { NULL, 24572, 0x00000001 }, /* TRAPcc */ { op_6000_0_comp_nf, 24576, 0x00000012 }, /* Bcc */ { op_6001_0_comp_nf, 24577, 0x00000010 }, /* Bcc */ { op_60ff_0_comp_nf, 24831, 0x00000012 }, /* Bcc */ { op_6100_0_comp_nf, 24832, 0x00000012 }, /* BSR */ { op_6101_0_comp_nf, 24833, 0x00000010 }, /* BSR */ { NULL, 25087, 0x00000012 }, /* BSR */ { op_6200_0_comp_nf, 25088, 0x00000003 }, /* Bcc */ { op_6201_0_comp_nf, 25089, 0x00000001 }, /* Bcc */ { op_62ff_0_comp_nf, 25343, 0x00000003 }, /* Bcc */ { op_6300_0_comp_nf, 25344, 0x00000003 }, /* Bcc */ { op_6301_0_comp_nf, 25345, 0x00000001 }, /* Bcc */ { op_63ff_0_comp_nf, 25599, 0x00000003 }, /* Bcc */ { op_6400_0_comp_nf, 25600, 0x00000003 }, /* Bcc */ { op_6401_0_comp_nf, 25601, 0x00000001 }, /* Bcc */ { op_64ff_0_comp_nf, 25855, 0x00000003 }, /* Bcc */ { op_6500_0_comp_nf, 25856, 0x00000003 }, /* Bcc */ { op_6501_0_comp_nf, 25857, 0x00000001 }, /* Bcc */ { op_65ff_0_comp_nf, 26111, 0x00000003 }, /* Bcc */ { op_6600_0_comp_nf, 26112, 0x00000003 }, /* Bcc */ { op_6601_0_comp_nf, 26113, 0x00000001 }, /* Bcc */ { op_66ff_0_comp_nf, 26367, 0x00000003 }, /* Bcc */ { op_6700_0_comp_nf, 26368, 0x00000003 }, /* Bcc */ { op_6701_0_comp_nf, 26369, 0x00000001 }, /* Bcc */ { op_67ff_0_comp_nf, 26623, 0x00000003 }, /* Bcc */ { NULL, 26624, 0x00000003 }, /* Bcc */ { NULL, 26625, 0x00000001 }, /* Bcc */ { NULL, 26879, 0x00000003 }, /* Bcc */ { NULL, 26880, 0x00000003 }, /* Bcc */ { NULL, 26881, 0x00000001 }, /* Bcc */ { NULL, 27135, 0x00000003 }, /* Bcc */ { op_6a00_0_comp_nf, 27136, 0x00000003 }, /* Bcc */ { op_6a01_0_comp_nf, 27137, 0x00000001 }, /* Bcc */ { op_6aff_0_comp_nf, 27391, 0x00000003 }, /* Bcc */ { op_6b00_0_comp_nf, 27392, 0x00000003 }, /* Bcc */ { op_6b01_0_comp_nf, 27393, 0x00000001 }, /* Bcc */ { op_6bff_0_comp_nf, 27647, 0x00000003 }, /* Bcc */ { op_6c00_0_comp_nf, 27648, 0x00000003 }, /* Bcc */ { op_6c01_0_comp_nf, 27649, 0x00000001 }, /* Bcc */ { op_6cff_0_comp_nf, 27903, 0x00000003 }, /* Bcc */ { op_6d00_0_comp_nf, 27904, 0x00000003 }, /* Bcc */ { op_6d01_0_comp_nf, 27905, 0x00000001 }, /* Bcc */ { op_6dff_0_comp_nf, 28159, 0x00000003 }, /* Bcc */ { op_6e00_0_comp_nf, 28160, 0x00000003 }, /* Bcc */ { op_6e01_0_comp_nf, 28161, 0x00000001 }, /* Bcc */ { op_6eff_0_comp_nf, 28415, 0x00000003 }, /* Bcc */ { op_6f00_0_comp_nf, 28416, 0x00000003 }, /* Bcc */ { op_6f01_0_comp_nf, 28417, 0x00000001 }, /* Bcc */ { op_6fff_0_comp_nf, 28671, 0x00000003 }, /* Bcc */ { op_7000_0_comp_nf, 28672, 0x00000000 }, /* MOVE */ { op_8000_0_comp_nf, 32768, 0x00000000 }, /* OR */ { op_8010_0_comp_nf, 32784, 0x00000000 }, /* OR */ { op_8018_0_comp_nf, 32792, 0x00000000 }, /* OR */ { op_8020_0_comp_nf, 32800, 0x00000000 }, /* OR */ { op_8028_0_comp_nf, 32808, 0x00000002 }, /* OR */ { op_8030_0_comp_nf, 32816, 0x00000002 }, /* OR */ { op_8038_0_comp_nf, 32824, 0x00000002 }, /* OR */ { op_8039_0_comp_nf, 32825, 0x00000002 }, /* OR */ { op_803a_0_comp_nf, 32826, 0x00000002 }, /* OR */ { op_803b_0_comp_nf, 32827, 0x00000002 }, /* OR */ { op_803c_0_comp_nf, 32828, 0x00000002 }, /* OR */ { op_8040_0_comp_nf, 32832, 0x00000000 }, /* OR */ { op_8050_0_comp_nf, 32848, 0x00000000 }, /* OR */ { op_8058_0_comp_nf, 32856, 0x00000000 }, /* OR */ { op_8060_0_comp_nf, 32864, 0x00000000 }, /* OR */ { op_8068_0_comp_nf, 32872, 0x00000002 }, /* OR */ { op_8070_0_comp_nf, 32880, 0x00000002 }, /* OR */ { op_8078_0_comp_nf, 32888, 0x00000002 }, /* OR */ { op_8079_0_comp_nf, 32889, 0x00000002 }, /* OR */ { op_807a_0_comp_nf, 32890, 0x00000002 }, /* OR */ { op_807b_0_comp_nf, 32891, 0x00000002 }, /* OR */ { op_807c_0_comp_nf, 32892, 0x00000002 }, /* OR */ { op_8080_0_comp_nf, 32896, 0x00000000 }, /* OR */ { op_8090_0_comp_nf, 32912, 0x00000000 }, /* OR */ { op_8098_0_comp_nf, 32920, 0x00000000 }, /* OR */ { op_80a0_0_comp_nf, 32928, 0x00000000 }, /* OR */ { op_80a8_0_comp_nf, 32936, 0x00000002 }, /* OR */ { op_80b0_0_comp_nf, 32944, 0x00000002 }, /* OR */ { op_80b8_0_comp_nf, 32952, 0x00000002 }, /* OR */ { op_80b9_0_comp_nf, 32953, 0x00000002 }, /* OR */ { op_80ba_0_comp_nf, 32954, 0x00000002 }, /* OR */ { op_80bb_0_comp_nf, 32955, 0x00000002 }, /* OR */ { op_80bc_0_comp_nf, 32956, 0x00000002 }, /* OR */ { NULL, 32960, 0x00000001 }, /* DIVU */ { NULL, 32976, 0x00000001 }, /* DIVU */ { NULL, 32984, 0x00000001 }, /* DIVU */ { NULL, 32992, 0x00000001 }, /* DIVU */ { NULL, 33000, 0x00000001 }, /* DIVU */ { NULL, 33008, 0x00000001 }, /* DIVU */ { NULL, 33016, 0x00000001 }, /* DIVU */ { NULL, 33017, 0x00000001 }, /* DIVU */ { NULL, 33018, 0x00000001 }, /* DIVU */ { NULL, 33019, 0x00000001 }, /* DIVU */ { NULL, 33020, 0x00000001 }, /* DIVU */ { NULL, 33024, 0x00000000 }, /* SBCD */ { NULL, 33032, 0x00000000 }, /* SBCD */ { op_8110_0_comp_nf, 33040, 0x00000000 }, /* OR */ { op_8118_0_comp_nf, 33048, 0x00000000 }, /* OR */ { op_8120_0_comp_nf, 33056, 0x00000000 }, /* OR */ { op_8128_0_comp_nf, 33064, 0x00000002 }, /* OR */ { op_8130_0_comp_nf, 33072, 0x00000002 }, /* OR */ { op_8138_0_comp_nf, 33080, 0x00000002 }, /* OR */ { op_8139_0_comp_nf, 33081, 0x00000002 }, /* OR */ { NULL, 33088, 0x00000000 }, /* PACK */ { NULL, 33096, 0x00000000 }, /* PACK */ { op_8150_0_comp_nf, 33104, 0x00000000 }, /* OR */ { op_8158_0_comp_nf, 33112, 0x00000000 }, /* OR */ { op_8160_0_comp_nf, 33120, 0x00000000 }, /* OR */ { op_8168_0_comp_nf, 33128, 0x00000002 }, /* OR */ { op_8170_0_comp_nf, 33136, 0x00000002 }, /* OR */ { op_8178_0_comp_nf, 33144, 0x00000002 }, /* OR */ { op_8179_0_comp_nf, 33145, 0x00000002 }, /* OR */ { NULL, 33152, 0x00000000 }, /* UNPK */ { NULL, 33160, 0x00000000 }, /* UNPK */ { op_8190_0_comp_nf, 33168, 0x00000000 }, /* OR */ { op_8198_0_comp_nf, 33176, 0x00000000 }, /* OR */ { op_81a0_0_comp_nf, 33184, 0x00000000 }, /* OR */ { op_81a8_0_comp_nf, 33192, 0x00000002 }, /* OR */ { op_81b0_0_comp_nf, 33200, 0x00000002 }, /* OR */ { op_81b8_0_comp_nf, 33208, 0x00000002 }, /* OR */ { op_81b9_0_comp_nf, 33209, 0x00000002 }, /* OR */ { NULL, 33216, 0x00000001 }, /* DIVS */ { NULL, 33232, 0x00000001 }, /* DIVS */ { NULL, 33240, 0x00000001 }, /* DIVS */ { NULL, 33248, 0x00000001 }, /* DIVS */ { NULL, 33256, 0x00000001 }, /* DIVS */ { NULL, 33264, 0x00000001 }, /* DIVS */ { NULL, 33272, 0x00000001 }, /* DIVS */ { NULL, 33273, 0x00000001 }, /* DIVS */ { NULL, 33274, 0x00000001 }, /* DIVS */ { NULL, 33275, 0x00000001 }, /* DIVS */ { NULL, 33276, 0x00000001 }, /* DIVS */ { op_9000_0_comp_nf, 36864, 0x00000000 }, /* SUB */ { op_9010_0_comp_nf, 36880, 0x00000000 }, /* SUB */ { op_9018_0_comp_nf, 36888, 0x00000000 }, /* SUB */ { op_9020_0_comp_nf, 36896, 0x00000000 }, /* SUB */ { op_9028_0_comp_nf, 36904, 0x00000002 }, /* SUB */ { op_9030_0_comp_nf, 36912, 0x00000002 }, /* SUB */ { op_9038_0_comp_nf, 36920, 0x00000002 }, /* SUB */ { op_9039_0_comp_nf, 36921, 0x00000002 }, /* SUB */ { op_903a_0_comp_nf, 36922, 0x00000002 }, /* SUB */ { op_903b_0_comp_nf, 36923, 0x00000002 }, /* SUB */ { op_903c_0_comp_nf, 36924, 0x00000002 }, /* SUB */ { op_9040_0_comp_nf, 36928, 0x00000000 }, /* SUB */ { op_9048_0_comp_nf, 36936, 0x00000000 }, /* SUB */ { op_9050_0_comp_nf, 36944, 0x00000000 }, /* SUB */ { op_9058_0_comp_nf, 36952, 0x00000000 }, /* SUB */ { op_9060_0_comp_nf, 36960, 0x00000000 }, /* SUB */ { op_9068_0_comp_nf, 36968, 0x00000002 }, /* SUB */ { op_9070_0_comp_nf, 36976, 0x00000002 }, /* SUB */ { op_9078_0_comp_nf, 36984, 0x00000002 }, /* SUB */ { op_9079_0_comp_nf, 36985, 0x00000002 }, /* SUB */ { op_907a_0_comp_nf, 36986, 0x00000002 }, /* SUB */ { op_907b_0_comp_nf, 36987, 0x00000002 }, /* SUB */ { op_907c_0_comp_nf, 36988, 0x00000002 }, /* SUB */ { op_9080_0_comp_nf, 36992, 0x00000000 }, /* SUB */ { op_9088_0_comp_nf, 37000, 0x00000000 }, /* SUB */ { op_9090_0_comp_nf, 37008, 0x00000000 }, /* SUB */ { op_9098_0_comp_nf, 37016, 0x00000000 }, /* SUB */ { op_90a0_0_comp_nf, 37024, 0x00000000 }, /* SUB */ { op_90a8_0_comp_nf, 37032, 0x00000002 }, /* SUB */ { op_90b0_0_comp_nf, 37040, 0x00000002 }, /* SUB */ { op_90b8_0_comp_nf, 37048, 0x00000002 }, /* SUB */ { op_90b9_0_comp_nf, 37049, 0x00000002 }, /* SUB */ { op_90ba_0_comp_nf, 37050, 0x00000002 }, /* SUB */ { op_90bb_0_comp_nf, 37051, 0x00000002 }, /* SUB */ { op_90bc_0_comp_nf, 37052, 0x00000002 }, /* SUB */ { op_90c0_0_comp_nf, 37056, 0x00000000 }, /* SUBA */ { op_90c8_0_comp_nf, 37064, 0x00000000 }, /* SUBA */ { op_90d0_0_comp_nf, 37072, 0x00000000 }, /* SUBA */ { op_90d8_0_comp_nf, 37080, 0x00000000 }, /* SUBA */ { op_90e0_0_comp_nf, 37088, 0x00000000 }, /* SUBA */ { op_90e8_0_comp_nf, 37096, 0x00000002 }, /* SUBA */ { op_90f0_0_comp_nf, 37104, 0x00000002 }, /* SUBA */ { op_90f8_0_comp_nf, 37112, 0x00000002 }, /* SUBA */ { op_90f9_0_comp_nf, 37113, 0x00000002 }, /* SUBA */ { op_90fa_0_comp_nf, 37114, 0x00000002 }, /* SUBA */ { op_90fb_0_comp_nf, 37115, 0x00000002 }, /* SUBA */ { op_90fc_0_comp_nf, 37116, 0x00000002 }, /* SUBA */ { op_9100_0_comp_nf, 37120, 0x00000008 }, /* SUBX */ { op_9108_0_comp_nf, 37128, 0x00000008 }, /* SUBX */ { op_9110_0_comp_nf, 37136, 0x00000000 }, /* SUB */ { op_9118_0_comp_nf, 37144, 0x00000000 }, /* SUB */ { op_9120_0_comp_nf, 37152, 0x00000000 }, /* SUB */ { op_9128_0_comp_nf, 37160, 0x00000002 }, /* SUB */ { op_9130_0_comp_nf, 37168, 0x00000002 }, /* SUB */ { op_9138_0_comp_nf, 37176, 0x00000002 }, /* SUB */ { op_9139_0_comp_nf, 37177, 0x00000002 }, /* SUB */ { op_9140_0_comp_nf, 37184, 0x00000008 }, /* SUBX */ { op_9148_0_comp_nf, 37192, 0x00000008 }, /* SUBX */ { op_9150_0_comp_nf, 37200, 0x00000000 }, /* SUB */ { op_9158_0_comp_nf, 37208, 0x00000000 }, /* SUB */ { op_9160_0_comp_nf, 37216, 0x00000000 }, /* SUB */ { op_9168_0_comp_nf, 37224, 0x00000002 }, /* SUB */ { op_9170_0_comp_nf, 37232, 0x00000002 }, /* SUB */ { op_9178_0_comp_nf, 37240, 0x00000002 }, /* SUB */ { op_9179_0_comp_nf, 37241, 0x00000002 }, /* SUB */ { op_9180_0_comp_nf, 37248, 0x00000008 }, /* SUBX */ { op_9188_0_comp_nf, 37256, 0x00000008 }, /* SUBX */ { op_9190_0_comp_nf, 37264, 0x00000000 }, /* SUB */ { op_9198_0_comp_nf, 37272, 0x00000000 }, /* SUB */ { op_91a0_0_comp_nf, 37280, 0x00000000 }, /* SUB */ { op_91a8_0_comp_nf, 37288, 0x00000002 }, /* SUB */ { op_91b0_0_comp_nf, 37296, 0x00000002 }, /* SUB */ { op_91b8_0_comp_nf, 37304, 0x00000002 }, /* SUB */ { op_91b9_0_comp_nf, 37305, 0x00000002 }, /* SUB */ { op_91c0_0_comp_nf, 37312, 0x00000000 }, /* SUBA */ { op_91c8_0_comp_nf, 37320, 0x00000000 }, /* SUBA */ { op_91d0_0_comp_nf, 37328, 0x00000000 }, /* SUBA */ { op_91d8_0_comp_nf, 37336, 0x00000000 }, /* SUBA */ { op_91e0_0_comp_nf, 37344, 0x00000000 }, /* SUBA */ { op_91e8_0_comp_nf, 37352, 0x00000002 }, /* SUBA */ { op_91f0_0_comp_nf, 37360, 0x00000002 }, /* SUBA */ { op_91f8_0_comp_nf, 37368, 0x00000002 }, /* SUBA */ { op_91f9_0_comp_nf, 37369, 0x00000002 }, /* SUBA */ { op_91fa_0_comp_nf, 37370, 0x00000002 }, /* SUBA */ { op_91fb_0_comp_nf, 37371, 0x00000002 }, /* SUBA */ { op_91fc_0_comp_nf, 37372, 0x00000002 }, /* SUBA */ { op_b000_0_comp_nf, 45056, 0x00000000 }, /* CMP */ { op_b010_0_comp_nf, 45072, 0x00000000 }, /* CMP */ { op_b018_0_comp_nf, 45080, 0x00000000 }, /* CMP */ { op_b020_0_comp_nf, 45088, 0x00000000 }, /* CMP */ { op_b028_0_comp_nf, 45096, 0x00000002 }, /* CMP */ { op_b030_0_comp_nf, 45104, 0x00000002 }, /* CMP */ { op_b038_0_comp_nf, 45112, 0x00000002 }, /* CMP */ { op_b039_0_comp_nf, 45113, 0x00000002 }, /* CMP */ { op_b03a_0_comp_nf, 45114, 0x00000002 }, /* CMP */ { op_b03b_0_comp_nf, 45115, 0x00000002 }, /* CMP */ { op_b03c_0_comp_nf, 45116, 0x00000002 }, /* CMP */ { op_b040_0_comp_nf, 45120, 0x00000000 }, /* CMP */ { op_b048_0_comp_nf, 45128, 0x00000000 }, /* CMP */ { op_b050_0_comp_nf, 45136, 0x00000000 }, /* CMP */ { op_b058_0_comp_nf, 45144, 0x00000000 }, /* CMP */ { op_b060_0_comp_nf, 45152, 0x00000000 }, /* CMP */ { op_b068_0_comp_nf, 45160, 0x00000002 }, /* CMP */ { op_b070_0_comp_nf, 45168, 0x00000002 }, /* CMP */ { op_b078_0_comp_nf, 45176, 0x00000002 }, /* CMP */ { op_b079_0_comp_nf, 45177, 0x00000002 }, /* CMP */ { op_b07a_0_comp_nf, 45178, 0x00000002 }, /* CMP */ { op_b07b_0_comp_nf, 45179, 0x00000002 }, /* CMP */ { op_b07c_0_comp_nf, 45180, 0x00000002 }, /* CMP */ { op_b080_0_comp_nf, 45184, 0x00000000 }, /* CMP */ { op_b088_0_comp_nf, 45192, 0x00000000 }, /* CMP */ { op_b090_0_comp_nf, 45200, 0x00000000 }, /* CMP */ { op_b098_0_comp_nf, 45208, 0x00000000 }, /* CMP */ { op_b0a0_0_comp_nf, 45216, 0x00000000 }, /* CMP */ { op_b0a8_0_comp_nf, 45224, 0x00000002 }, /* CMP */ { op_b0b0_0_comp_nf, 45232, 0x00000002 }, /* CMP */ { op_b0b8_0_comp_nf, 45240, 0x00000002 }, /* CMP */ { op_b0b9_0_comp_nf, 45241, 0x00000002 }, /* CMP */ { op_b0ba_0_comp_nf, 45242, 0x00000002 }, /* CMP */ { op_b0bb_0_comp_nf, 45243, 0x00000002 }, /* CMP */ { op_b0bc_0_comp_nf, 45244, 0x00000002 }, /* CMP */ { op_b0c0_0_comp_nf, 45248, 0x00000000 }, /* CMPA */ { op_b0c8_0_comp_nf, 45256, 0x00000000 }, /* CMPA */ { op_b0d0_0_comp_nf, 45264, 0x00000000 }, /* CMPA */ { op_b0d8_0_comp_nf, 45272, 0x00000000 }, /* CMPA */ { op_b0e0_0_comp_nf, 45280, 0x00000000 }, /* CMPA */ { op_b0e8_0_comp_nf, 45288, 0x00000002 }, /* CMPA */ { op_b0f0_0_comp_nf, 45296, 0x00000002 }, /* CMPA */ { op_b0f8_0_comp_nf, 45304, 0x00000002 }, /* CMPA */ { op_b0f9_0_comp_nf, 45305, 0x00000002 }, /* CMPA */ { op_b0fa_0_comp_nf, 45306, 0x00000002 }, /* CMPA */ { op_b0fb_0_comp_nf, 45307, 0x00000002 }, /* CMPA */ { op_b0fc_0_comp_nf, 45308, 0x00000002 }, /* CMPA */ { op_b100_0_comp_nf, 45312, 0x00000000 }, /* EOR */ { op_b108_0_comp_nf, 45320, 0x00000000 }, /* CMPM */ { op_b110_0_comp_nf, 45328, 0x00000000 }, /* EOR */ { op_b118_0_comp_nf, 45336, 0x00000000 }, /* EOR */ { op_b120_0_comp_nf, 45344, 0x00000000 }, /* EOR */ { op_b128_0_comp_nf, 45352, 0x00000002 }, /* EOR */ { op_b130_0_comp_nf, 45360, 0x00000002 }, /* EOR */ { op_b138_0_comp_nf, 45368, 0x00000002 }, /* EOR */ { op_b139_0_comp_nf, 45369, 0x00000002 }, /* EOR */ { op_b140_0_comp_nf, 45376, 0x00000000 }, /* EOR */ { op_b148_0_comp_nf, 45384, 0x00000000 }, /* CMPM */ { op_b150_0_comp_nf, 45392, 0x00000000 }, /* EOR */ { op_b158_0_comp_nf, 45400, 0x00000000 }, /* EOR */ { op_b160_0_comp_nf, 45408, 0x00000000 }, /* EOR */ { op_b168_0_comp_nf, 45416, 0x00000002 }, /* EOR */ { op_b170_0_comp_nf, 45424, 0x00000002 }, /* EOR */ { op_b178_0_comp_nf, 45432, 0x00000002 }, /* EOR */ { op_b179_0_comp_nf, 45433, 0x00000002 }, /* EOR */ { op_b180_0_comp_nf, 45440, 0x00000000 }, /* EOR */ { op_b188_0_comp_nf, 45448, 0x00000000 }, /* CMPM */ { op_b190_0_comp_nf, 45456, 0x00000000 }, /* EOR */ { op_b198_0_comp_nf, 45464, 0x00000000 }, /* EOR */ { op_b1a0_0_comp_nf, 45472, 0x00000000 }, /* EOR */ { op_b1a8_0_comp_nf, 45480, 0x00000002 }, /* EOR */ { op_b1b0_0_comp_nf, 45488, 0x00000002 }, /* EOR */ { op_b1b8_0_comp_nf, 45496, 0x00000002 }, /* EOR */ { op_b1b9_0_comp_nf, 45497, 0x00000002 }, /* EOR */ { op_b1c0_0_comp_nf, 45504, 0x00000000 }, /* CMPA */ { op_b1c8_0_comp_nf, 45512, 0x00000000 }, /* CMPA */ { op_b1d0_0_comp_nf, 45520, 0x00000000 }, /* CMPA */ { op_b1d8_0_comp_nf, 45528, 0x00000000 }, /* CMPA */ { op_b1e0_0_comp_nf, 45536, 0x00000000 }, /* CMPA */ { op_b1e8_0_comp_nf, 45544, 0x00000002 }, /* CMPA */ { op_b1f0_0_comp_nf, 45552, 0x00000002 }, /* CMPA */ { op_b1f8_0_comp_nf, 45560, 0x00000002 }, /* CMPA */ { op_b1f9_0_comp_nf, 45561, 0x00000002 }, /* CMPA */ { op_b1fa_0_comp_nf, 45562, 0x00000002 }, /* CMPA */ { op_b1fb_0_comp_nf, 45563, 0x00000002 }, /* CMPA */ { op_b1fc_0_comp_nf, 45564, 0x00000002 }, /* CMPA */ { op_c000_0_comp_nf, 49152, 0x00000000 }, /* AND */ { op_c010_0_comp_nf, 49168, 0x00000000 }, /* AND */ { op_c018_0_comp_nf, 49176, 0x00000000 }, /* AND */ { op_c020_0_comp_nf, 49184, 0x00000000 }, /* AND */ { op_c028_0_comp_nf, 49192, 0x00000002 }, /* AND */ { op_c030_0_comp_nf, 49200, 0x00000002 }, /* AND */ { op_c038_0_comp_nf, 49208, 0x00000002 }, /* AND */ { op_c039_0_comp_nf, 49209, 0x00000002 }, /* AND */ { op_c03a_0_comp_nf, 49210, 0x00000002 }, /* AND */ { op_c03b_0_comp_nf, 49211, 0x00000002 }, /* AND */ { op_c03c_0_comp_nf, 49212, 0x00000002 }, /* AND */ { op_c040_0_comp_nf, 49216, 0x00000000 }, /* AND */ { op_c050_0_comp_nf, 49232, 0x00000000 }, /* AND */ { op_c058_0_comp_nf, 49240, 0x00000000 }, /* AND */ { op_c060_0_comp_nf, 49248, 0x00000000 }, /* AND */ { op_c068_0_comp_nf, 49256, 0x00000002 }, /* AND */ { op_c070_0_comp_nf, 49264, 0x00000002 }, /* AND */ { op_c078_0_comp_nf, 49272, 0x00000002 }, /* AND */ { op_c079_0_comp_nf, 49273, 0x00000002 }, /* AND */ { op_c07a_0_comp_nf, 49274, 0x00000002 }, /* AND */ { op_c07b_0_comp_nf, 49275, 0x00000002 }, /* AND */ { op_c07c_0_comp_nf, 49276, 0x00000002 }, /* AND */ { op_c080_0_comp_nf, 49280, 0x00000000 }, /* AND */ { op_c090_0_comp_nf, 49296, 0x00000000 }, /* AND */ { op_c098_0_comp_nf, 49304, 0x00000000 }, /* AND */ { op_c0a0_0_comp_nf, 49312, 0x00000000 }, /* AND */ { op_c0a8_0_comp_nf, 49320, 0x00000002 }, /* AND */ { op_c0b0_0_comp_nf, 49328, 0x00000002 }, /* AND */ { op_c0b8_0_comp_nf, 49336, 0x00000002 }, /* AND */ { op_c0b9_0_comp_nf, 49337, 0x00000002 }, /* AND */ { op_c0ba_0_comp_nf, 49338, 0x00000002 }, /* AND */ { op_c0bb_0_comp_nf, 49339, 0x00000002 }, /* AND */ { op_c0bc_0_comp_nf, 49340, 0x00000002 }, /* AND */ { op_c0c0_0_comp_nf, 49344, 0x00000000 }, /* MULU */ { op_c0d0_0_comp_nf, 49360, 0x00000000 }, /* MULU */ { op_c0d8_0_comp_nf, 49368, 0x00000000 }, /* MULU */ { op_c0e0_0_comp_nf, 49376, 0x00000000 }, /* MULU */ { op_c0e8_0_comp_nf, 49384, 0x00000002 }, /* MULU */ { op_c0f0_0_comp_nf, 49392, 0x00000002 }, /* MULU */ { op_c0f8_0_comp_nf, 49400, 0x00000002 }, /* MULU */ { op_c0f9_0_comp_nf, 49401, 0x00000002 }, /* MULU */ { op_c0fa_0_comp_nf, 49402, 0x00000002 }, /* MULU */ { op_c0fb_0_comp_nf, 49403, 0x00000002 }, /* MULU */ { op_c0fc_0_comp_nf, 49404, 0x00000002 }, /* MULU */ { NULL, 49408, 0x00000000 }, /* ABCD */ { NULL, 49416, 0x00000000 }, /* ABCD */ { op_c110_0_comp_nf, 49424, 0x00000000 }, /* AND */ { op_c118_0_comp_nf, 49432, 0x00000000 }, /* AND */ { op_c120_0_comp_nf, 49440, 0x00000000 }, /* AND */ { op_c128_0_comp_nf, 49448, 0x00000002 }, /* AND */ { op_c130_0_comp_nf, 49456, 0x00000002 }, /* AND */ { op_c138_0_comp_nf, 49464, 0x00000002 }, /* AND */ { op_c139_0_comp_nf, 49465, 0x00000002 }, /* AND */ { op_c140_0_comp_nf, 49472, 0x00000000 }, /* EXG */ { op_c148_0_comp_nf, 49480, 0x00000000 }, /* EXG */ { op_c150_0_comp_nf, 49488, 0x00000000 }, /* AND */ { op_c158_0_comp_nf, 49496, 0x00000000 }, /* AND */ { op_c160_0_comp_nf, 49504, 0x00000000 }, /* AND */ { op_c168_0_comp_nf, 49512, 0x00000002 }, /* AND */ { op_c170_0_comp_nf, 49520, 0x00000002 }, /* AND */ { op_c178_0_comp_nf, 49528, 0x00000002 }, /* AND */ { op_c179_0_comp_nf, 49529, 0x00000002 }, /* AND */ { op_c188_0_comp_nf, 49544, 0x00000000 }, /* EXG */ { op_c190_0_comp_nf, 49552, 0x00000000 }, /* AND */ { op_c198_0_comp_nf, 49560, 0x00000000 }, /* AND */ { op_c1a0_0_comp_nf, 49568, 0x00000000 }, /* AND */ { op_c1a8_0_comp_nf, 49576, 0x00000002 }, /* AND */ { op_c1b0_0_comp_nf, 49584, 0x00000002 }, /* AND */ { op_c1b8_0_comp_nf, 49592, 0x00000002 }, /* AND */ { op_c1b9_0_comp_nf, 49593, 0x00000002 }, /* AND */ { op_c1c0_0_comp_nf, 49600, 0x00000000 }, /* MULS */ { op_c1d0_0_comp_nf, 49616, 0x00000000 }, /* MULS */ { op_c1d8_0_comp_nf, 49624, 0x00000000 }, /* MULS */ { op_c1e0_0_comp_nf, 49632, 0x00000000 }, /* MULS */ { op_c1e8_0_comp_nf, 49640, 0x00000002 }, /* MULS */ { op_c1f0_0_comp_nf, 49648, 0x00000002 }, /* MULS */ { op_c1f8_0_comp_nf, 49656, 0x00000002 }, /* MULS */ { op_c1f9_0_comp_nf, 49657, 0x00000002 }, /* MULS */ { op_c1fa_0_comp_nf, 49658, 0x00000002 }, /* MULS */ { op_c1fb_0_comp_nf, 49659, 0x00000002 }, /* MULS */ { op_c1fc_0_comp_nf, 49660, 0x00000002 }, /* MULS */ { op_d000_0_comp_nf, 53248, 0x00000000 }, /* ADD */ { op_d010_0_comp_nf, 53264, 0x00000000 }, /* ADD */ { op_d018_0_comp_nf, 53272, 0x00000000 }, /* ADD */ { op_d020_0_comp_nf, 53280, 0x00000000 }, /* ADD */ { op_d028_0_comp_nf, 53288, 0x00000002 }, /* ADD */ { op_d030_0_comp_nf, 53296, 0x00000002 }, /* ADD */ { op_d038_0_comp_nf, 53304, 0x00000002 }, /* ADD */ { op_d039_0_comp_nf, 53305, 0x00000002 }, /* ADD */ { op_d03a_0_comp_nf, 53306, 0x00000002 }, /* ADD */ { op_d03b_0_comp_nf, 53307, 0x00000002 }, /* ADD */ { op_d03c_0_comp_nf, 53308, 0x00000002 }, /* ADD */ { op_d040_0_comp_nf, 53312, 0x00000000 }, /* ADD */ { op_d048_0_comp_nf, 53320, 0x00000000 }, /* ADD */ { op_d050_0_comp_nf, 53328, 0x00000000 }, /* ADD */ { op_d058_0_comp_nf, 53336, 0x00000000 }, /* ADD */ { op_d060_0_comp_nf, 53344, 0x00000000 }, /* ADD */ { op_d068_0_comp_nf, 53352, 0x00000002 }, /* ADD */ { op_d070_0_comp_nf, 53360, 0x00000002 }, /* ADD */ { op_d078_0_comp_nf, 53368, 0x00000002 }, /* ADD */ { op_d079_0_comp_nf, 53369, 0x00000002 }, /* ADD */ { op_d07a_0_comp_nf, 53370, 0x00000002 }, /* ADD */ { op_d07b_0_comp_nf, 53371, 0x00000002 }, /* ADD */ { op_d07c_0_comp_nf, 53372, 0x00000002 }, /* ADD */ { op_d080_0_comp_nf, 53376, 0x00000000 }, /* ADD */ { op_d088_0_comp_nf, 53384, 0x00000000 }, /* ADD */ { op_d090_0_comp_nf, 53392, 0x00000000 }, /* ADD */ { op_d098_0_comp_nf, 53400, 0x00000000 }, /* ADD */ { op_d0a0_0_comp_nf, 53408, 0x00000000 }, /* ADD */ { op_d0a8_0_comp_nf, 53416, 0x00000002 }, /* ADD */ { op_d0b0_0_comp_nf, 53424, 0x00000002 }, /* ADD */ { op_d0b8_0_comp_nf, 53432, 0x00000002 }, /* ADD */ { op_d0b9_0_comp_nf, 53433, 0x00000002 }, /* ADD */ { op_d0ba_0_comp_nf, 53434, 0x00000002 }, /* ADD */ { op_d0bb_0_comp_nf, 53435, 0x00000002 }, /* ADD */ { op_d0bc_0_comp_nf, 53436, 0x00000002 }, /* ADD */ { op_d0c0_0_comp_nf, 53440, 0x00000000 }, /* ADDA */ { op_d0c8_0_comp_nf, 53448, 0x00000000 }, /* ADDA */ { op_d0d0_0_comp_nf, 53456, 0x00000000 }, /* ADDA */ { op_d0d8_0_comp_nf, 53464, 0x00000000 }, /* ADDA */ { op_d0e0_0_comp_nf, 53472, 0x00000000 }, /* ADDA */ { op_d0e8_0_comp_nf, 53480, 0x00000002 }, /* ADDA */ { op_d0f0_0_comp_nf, 53488, 0x00000002 }, /* ADDA */ { op_d0f8_0_comp_nf, 53496, 0x00000002 }, /* ADDA */ { op_d0f9_0_comp_nf, 53497, 0x00000002 }, /* ADDA */ { op_d0fa_0_comp_nf, 53498, 0x00000002 }, /* ADDA */ { op_d0fb_0_comp_nf, 53499, 0x00000002 }, /* ADDA */ { op_d0fc_0_comp_nf, 53500, 0x00000002 }, /* ADDA */ { op_d100_0_comp_nf, 53504, 0x00000008 }, /* ADDX */ { op_d108_0_comp_nf, 53512, 0x00000008 }, /* ADDX */ { op_d110_0_comp_nf, 53520, 0x00000000 }, /* ADD */ { op_d118_0_comp_nf, 53528, 0x00000000 }, /* ADD */ { op_d120_0_comp_nf, 53536, 0x00000000 }, /* ADD */ { op_d128_0_comp_nf, 53544, 0x00000002 }, /* ADD */ { op_d130_0_comp_nf, 53552, 0x00000002 }, /* ADD */ { op_d138_0_comp_nf, 53560, 0x00000002 }, /* ADD */ { op_d139_0_comp_nf, 53561, 0x00000002 }, /* ADD */ { op_d140_0_comp_nf, 53568, 0x00000008 }, /* ADDX */ { op_d148_0_comp_nf, 53576, 0x00000008 }, /* ADDX */ { op_d150_0_comp_nf, 53584, 0x00000000 }, /* ADD */ { op_d158_0_comp_nf, 53592, 0x00000000 }, /* ADD */ { op_d160_0_comp_nf, 53600, 0x00000000 }, /* ADD */ { op_d168_0_comp_nf, 53608, 0x00000002 }, /* ADD */ { op_d170_0_comp_nf, 53616, 0x00000002 }, /* ADD */ { op_d178_0_comp_nf, 53624, 0x00000002 }, /* ADD */ { op_d179_0_comp_nf, 53625, 0x00000002 }, /* ADD */ { op_d180_0_comp_nf, 53632, 0x00000008 }, /* ADDX */ { op_d188_0_comp_nf, 53640, 0x00000008 }, /* ADDX */ { op_d190_0_comp_nf, 53648, 0x00000000 }, /* ADD */ { op_d198_0_comp_nf, 53656, 0x00000000 }, /* ADD */ { op_d1a0_0_comp_nf, 53664, 0x00000000 }, /* ADD */ { op_d1a8_0_comp_nf, 53672, 0x00000002 }, /* ADD */ { op_d1b0_0_comp_nf, 53680, 0x00000002 }, /* ADD */ { op_d1b8_0_comp_nf, 53688, 0x00000002 }, /* ADD */ { op_d1b9_0_comp_nf, 53689, 0x00000002 }, /* ADD */ { op_d1c0_0_comp_nf, 53696, 0x00000000 }, /* ADDA */ { op_d1c8_0_comp_nf, 53704, 0x00000000 }, /* ADDA */ { op_d1d0_0_comp_nf, 53712, 0x00000000 }, /* ADDA */ { op_d1d8_0_comp_nf, 53720, 0x00000000 }, /* ADDA */ { op_d1e0_0_comp_nf, 53728, 0x00000000 }, /* ADDA */ { op_d1e8_0_comp_nf, 53736, 0x00000002 }, /* ADDA */ { op_d1f0_0_comp_nf, 53744, 0x00000002 }, /* ADDA */ { op_d1f8_0_comp_nf, 53752, 0x00000002 }, /* ADDA */ { op_d1f9_0_comp_nf, 53753, 0x00000002 }, /* ADDA */ { op_d1fa_0_comp_nf, 53754, 0x00000002 }, /* ADDA */ { op_d1fb_0_comp_nf, 53755, 0x00000002 }, /* ADDA */ { op_d1fc_0_comp_nf, 53756, 0x00000002 }, /* ADDA */ { op_e000_0_comp_nf, 57344, 0x00000000 }, /* ASR */ { op_e008_0_comp_nf, 57352, 0x00000000 }, /* LSR */ { NULL, 57360, 0x00000000 }, /* ROXR */ { op_e018_0_comp_nf, 57368, 0x00000000 }, /* ROR */ { op_e020_0_comp_nf, 57376, 0x00000004 }, /* ASR */ { op_e028_0_comp_nf, 57384, 0x00000004 }, /* LSR */ { NULL, 57392, 0x00000000 }, /* ROXR */ { op_e038_0_comp_nf, 57400, 0x00000000 }, /* ROR */ { op_e040_0_comp_nf, 57408, 0x00000000 }, /* ASR */ { op_e048_0_comp_nf, 57416, 0x00000000 }, /* LSR */ { NULL, 57424, 0x00000000 }, /* ROXR */ { op_e058_0_comp_nf, 57432, 0x00000000 }, /* ROR */ { op_e060_0_comp_nf, 57440, 0x00000004 }, /* ASR */ { op_e068_0_comp_nf, 57448, 0x00000004 }, /* LSR */ { NULL, 57456, 0x00000000 }, /* ROXR */ { op_e078_0_comp_nf, 57464, 0x00000000 }, /* ROR */ { op_e080_0_comp_nf, 57472, 0x00000000 }, /* ASR */ { op_e088_0_comp_nf, 57480, 0x00000000 }, /* LSR */ { NULL, 57488, 0x00000000 }, /* ROXR */ { op_e098_0_comp_nf, 57496, 0x00000000 }, /* ROR */ { op_e0a0_0_comp_nf, 57504, 0x00000004 }, /* ASR */ { op_e0a8_0_comp_nf, 57512, 0x00000004 }, /* LSR */ { NULL, 57520, 0x00000000 }, /* ROXR */ { op_e0b8_0_comp_nf, 57528, 0x00000000 }, /* ROR */ { NULL, 57552, 0x00000000 }, /* ASRW */ { NULL, 57560, 0x00000000 }, /* ASRW */ { NULL, 57568, 0x00000000 }, /* ASRW */ { NULL, 57576, 0x00000000 }, /* ASRW */ { NULL, 57584, 0x00000000 }, /* ASRW */ { NULL, 57592, 0x00000000 }, /* ASRW */ { NULL, 57593, 0x00000000 }, /* ASRW */ { op_e100_0_comp_nf, 57600, 0x00000000 }, /* ASL */ { op_e108_0_comp_nf, 57608, 0x00000000 }, /* LSL */ { NULL, 57616, 0x00000000 }, /* ROXL */ { op_e118_0_comp_nf, 57624, 0x00000000 }, /* ROL */ { op_e120_0_comp_nf, 57632, 0x00000004 }, /* ASL */ { op_e128_0_comp_nf, 57640, 0x00000004 }, /* LSL */ { NULL, 57648, 0x00000000 }, /* ROXL */ { op_e138_0_comp_nf, 57656, 0x00000000 }, /* ROL */ { op_e140_0_comp_nf, 57664, 0x00000000 }, /* ASL */ { op_e148_0_comp_nf, 57672, 0x00000000 }, /* LSL */ { NULL, 57680, 0x00000000 }, /* ROXL */ { op_e158_0_comp_nf, 57688, 0x00000000 }, /* ROL */ { op_e160_0_comp_nf, 57696, 0x00000004 }, /* ASL */ { op_e168_0_comp_nf, 57704, 0x00000004 }, /* LSL */ { NULL, 57712, 0x00000000 }, /* ROXL */ { op_e178_0_comp_nf, 57720, 0x00000000 }, /* ROL */ { op_e180_0_comp_nf, 57728, 0x00000000 }, /* ASL */ { op_e188_0_comp_nf, 57736, 0x00000000 }, /* LSL */ { NULL, 57744, 0x00000000 }, /* ROXL */ { op_e198_0_comp_nf, 57752, 0x00000000 }, /* ROL */ { op_e1a0_0_comp_nf, 57760, 0x00000004 }, /* ASL */ { op_e1a8_0_comp_nf, 57768, 0x00000004 }, /* LSL */ { NULL, 57776, 0x00000000 }, /* ROXL */ { op_e1b8_0_comp_nf, 57784, 0x00000000 }, /* ROL */ { NULL, 57808, 0x00000000 }, /* ASLW */ { NULL, 57816, 0x00000000 }, /* ASLW */ { NULL, 57824, 0x00000000 }, /* ASLW */ { NULL, 57832, 0x00000000 }, /* ASLW */ { NULL, 57840, 0x00000000 }, /* ASLW */ { NULL, 57848, 0x00000000 }, /* ASLW */ { NULL, 57849, 0x00000000 }, /* ASLW */ { NULL, 58064, 0x00000000 }, /* LSRW */ { NULL, 58072, 0x00000000 }, /* LSRW */ { NULL, 58080, 0x00000000 }, /* LSRW */ { NULL, 58088, 0x00000000 }, /* LSRW */ { NULL, 58096, 0x00000000 }, /* LSRW */ { NULL, 58104, 0x00000000 }, /* LSRW */ { NULL, 58105, 0x00000000 }, /* LSRW */ { NULL, 58320, 0x00000000 }, /* LSLW */ { NULL, 58328, 0x00000000 }, /* LSLW */ { NULL, 58336, 0x00000000 }, /* LSLW */ { NULL, 58344, 0x00000000 }, /* LSLW */ { NULL, 58352, 0x00000000 }, /* LSLW */ { NULL, 58360, 0x00000000 }, /* LSLW */ { NULL, 58361, 0x00000000 }, /* LSLW */ { NULL, 58576, 0x00000000 }, /* ROXRW */ { NULL, 58584, 0x00000000 }, /* ROXRW */ { NULL, 58592, 0x00000000 }, /* ROXRW */ { NULL, 58600, 0x00000000 }, /* ROXRW */ { NULL, 58608, 0x00000000 }, /* ROXRW */ { NULL, 58616, 0x00000000 }, /* ROXRW */ { NULL, 58617, 0x00000000 }, /* ROXRW */ { NULL, 58832, 0x00000000 }, /* ROXLW */ { NULL, 58840, 0x00000000 }, /* ROXLW */ { NULL, 58848, 0x00000000 }, /* ROXLW */ { NULL, 58856, 0x00000000 }, /* ROXLW */ { NULL, 58864, 0x00000000 }, /* ROXLW */ { NULL, 58872, 0x00000000 }, /* ROXLW */ { NULL, 58873, 0x00000000 }, /* ROXLW */ { NULL, 59088, 0x00000000 }, /* RORW */ { NULL, 59096, 0x00000000 }, /* RORW */ { NULL, 59104, 0x00000000 }, /* RORW */ { NULL, 59112, 0x00000000 }, /* RORW */ { NULL, 59120, 0x00000000 }, /* RORW */ { NULL, 59128, 0x00000000 }, /* RORW */ { NULL, 59129, 0x00000000 }, /* RORW */ { NULL, 59344, 0x00000000 }, /* ROLW */ { NULL, 59352, 0x00000000 }, /* ROLW */ { NULL, 59360, 0x00000000 }, /* ROLW */ { NULL, 59368, 0x00000000 }, /* ROLW */ { NULL, 59376, 0x00000000 }, /* ROLW */ { NULL, 59384, 0x00000000 }, /* ROLW */ { NULL, 59385, 0x00000000 }, /* ROLW */ { NULL, 59584, 0x00000000 }, /* BFTST */ { NULL, 59600, 0x00000000 }, /* BFTST */ { NULL, 59624, 0x00000000 }, /* BFTST */ { NULL, 59632, 0x00000000 }, /* BFTST */ { NULL, 59640, 0x00000000 }, /* BFTST */ { NULL, 59641, 0x00000000 }, /* BFTST */ { NULL, 59642, 0x00000000 }, /* BFTST */ { NULL, 59643, 0x00000000 }, /* BFTST */ { NULL, 59840, 0x00000000 }, /* BFEXTU */ { NULL, 59856, 0x00000000 }, /* BFEXTU */ { NULL, 59880, 0x00000000 }, /* BFEXTU */ { NULL, 59888, 0x00000000 }, /* BFEXTU */ { NULL, 59896, 0x00000000 }, /* BFEXTU */ { NULL, 59897, 0x00000000 }, /* BFEXTU */ { NULL, 59898, 0x00000000 }, /* BFEXTU */ { NULL, 59899, 0x00000000 }, /* BFEXTU */ { NULL, 60096, 0x00000000 }, /* BFCHG */ { NULL, 60112, 0x00000000 }, /* BFCHG */ { NULL, 60136, 0x00000000 }, /* BFCHG */ { NULL, 60144, 0x00000000 }, /* BFCHG */ { NULL, 60152, 0x00000000 }, /* BFCHG */ { NULL, 60153, 0x00000000 }, /* BFCHG */ { NULL, 60352, 0x00000000 }, /* BFEXTS */ { NULL, 60368, 0x00000000 }, /* BFEXTS */ { NULL, 60392, 0x00000000 }, /* BFEXTS */ { NULL, 60400, 0x00000000 }, /* BFEXTS */ { NULL, 60408, 0x00000000 }, /* BFEXTS */ { NULL, 60409, 0x00000000 }, /* BFEXTS */ { NULL, 60410, 0x00000000 }, /* BFEXTS */ { NULL, 60411, 0x00000000 }, /* BFEXTS */ { NULL, 60608, 0x00000000 }, /* BFCLR */ { NULL, 60624, 0x00000000 }, /* BFCLR */ { NULL, 60648, 0x00000000 }, /* BFCLR */ { NULL, 60656, 0x00000000 }, /* BFCLR */ { NULL, 60664, 0x00000000 }, /* BFCLR */ { NULL, 60665, 0x00000000 }, /* BFCLR */ { NULL, 60864, 0x00000000 }, /* BFFFO */ { NULL, 60880, 0x00000000 }, /* BFFFO */ { NULL, 60904, 0x00000000 }, /* BFFFO */ { NULL, 60912, 0x00000000 }, /* BFFFO */ { NULL, 60920, 0x00000000 }, /* BFFFO */ { NULL, 60921, 0x00000000 }, /* BFFFO */ { NULL, 60922, 0x00000000 }, /* BFFFO */ { NULL, 60923, 0x00000000 }, /* BFFFO */ { NULL, 61120, 0x00000000 }, /* BFSET */ { NULL, 61136, 0x00000000 }, /* BFSET */ { NULL, 61160, 0x00000000 }, /* BFSET */ { NULL, 61168, 0x00000000 }, /* BFSET */ { NULL, 61176, 0x00000000 }, /* BFSET */ { NULL, 61177, 0x00000000 }, /* BFSET */ { NULL, 61376, 0x00000000 }, /* BFINS */ { NULL, 61392, 0x00000000 }, /* BFINS */ { NULL, 61416, 0x00000000 }, /* BFINS */ { NULL, 61424, 0x00000000 }, /* BFINS */ { NULL, 61432, 0x00000000 }, /* BFINS */ { NULL, 61433, 0x00000000 }, /* BFINS */ { NULL, 61456, 0x00000001 }, /* MMUOP030 */ { NULL, 61480, 0x00000001 }, /* MMUOP030 */ { NULL, 61488, 0x00000001 }, /* MMUOP030 */ { NULL, 61496, 0x00000001 }, /* MMUOP030 */ { NULL, 61497, 0x00000001 }, /* MMUOP030 */ { op_f200_0_comp_nf, 61952, 0x00000002 }, /* FPP */ { op_f208_0_comp_nf, 61960, 0x00000002 }, /* FPP */ { op_f210_0_comp_nf, 61968, 0x00000002 }, /* FPP */ { op_f218_0_comp_nf, 61976, 0x00000002 }, /* FPP */ { op_f220_0_comp_nf, 61984, 0x00000002 }, /* FPP */ { op_f228_0_comp_nf, 61992, 0x00000002 }, /* FPP */ { op_f230_0_comp_nf, 62000, 0x00000002 }, /* FPP */ { op_f238_0_comp_nf, 62008, 0x00000002 }, /* FPP */ { op_f239_0_comp_nf, 62009, 0x00000002 }, /* FPP */ { op_f23a_0_comp_nf, 62010, 0x00000002 }, /* FPP */ { op_f23b_0_comp_nf, 62011, 0x00000002 }, /* FPP */ { op_f23c_0_comp_nf, 62012, 0x00000002 }, /* FPP */ { op_f240_0_comp_nf, 62016, 0x00000006 }, /* FScc */ { NULL, 62024, 0x00000001 }, /* FDBcc */ { op_f250_0_comp_nf, 62032, 0x00000006 }, /* FScc */ { op_f258_0_comp_nf, 62040, 0x00000006 }, /* FScc */ { op_f260_0_comp_nf, 62048, 0x00000006 }, /* FScc */ { op_f268_0_comp_nf, 62056, 0x00000006 }, /* FScc */ { op_f270_0_comp_nf, 62064, 0x00000006 }, /* FScc */ { op_f278_0_comp_nf, 62072, 0x00000006 }, /* FScc */ { op_f279_0_comp_nf, 62073, 0x00000006 }, /* FScc */ { NULL, 62074, 0x00000001 }, /* FTRAPcc */ { NULL, 62075, 0x00000001 }, /* FTRAPcc */ { NULL, 62076, 0x00000001 }, /* FTRAPcc */ { op_f280_0_comp_nf, 62080, 0x00000005 }, /* FBcc */ { op_f2c0_0_comp_nf, 62144, 0x00000005 }, /* FBcc */ { NULL, 62224, 0x00000000 }, /* FSAVE */ { NULL, 62240, 0x00000000 }, /* FSAVE */ { NULL, 62248, 0x00000000 }, /* FSAVE */ { NULL, 62256, 0x00000000 }, /* FSAVE */ { NULL, 62264, 0x00000000 }, /* FSAVE */ { NULL, 62265, 0x00000000 }, /* FSAVE */ { NULL, 62288, 0x00000000 }, /* FRESTORE */ { NULL, 62296, 0x00000000 }, /* FRESTORE */ { NULL, 62312, 0x00000000 }, /* FRESTORE */ { NULL, 62320, 0x00000000 }, /* FRESTORE */ { NULL, 62328, 0x00000000 }, /* FRESTORE */ { NULL, 62329, 0x00000000 }, /* FRESTORE */ { NULL, 62330, 0x00000000 }, /* FRESTORE */ { NULL, 62331, 0x00000000 }, /* FRESTORE */ { NULL, 62472, 0x00000001 }, /* CINVL */ { NULL, 62480, 0x00000001 }, /* CINVP */ { NULL, 62488, 0x00000001 }, /* CINVA */ { NULL, 62489, 0x00000001 }, /* CINVA */ { NULL, 62490, 0x00000001 }, /* CINVA */ { NULL, 62491, 0x00000001 }, /* CINVA */ { NULL, 62492, 0x00000001 }, /* CINVA */ { NULL, 62493, 0x00000001 }, /* CINVA */ { NULL, 62494, 0x00000001 }, /* CINVA */ { NULL, 62495, 0x00000001 }, /* CINVA */ { NULL, 62504, 0x00000001 }, /* CPUSHL */ { NULL, 62512, 0x00000001 }, /* CPUSHP */ { NULL, 62520, 0x00000001 }, /* CPUSHA */ { NULL, 62521, 0x00000001 }, /* CPUSHA */ { NULL, 62522, 0x00000001 }, /* CPUSHA */ { NULL, 62523, 0x00000001 }, /* CPUSHA */ { NULL, 62524, 0x00000001 }, /* CPUSHA */ { NULL, 62525, 0x00000001 }, /* CPUSHA */ { NULL, 62526, 0x00000001 }, /* CPUSHA */ { NULL, 62527, 0x00000001 }, /* CPUSHA */ { NULL, 62720, 0x00000001 }, /* PFLUSHN */ { NULL, 62728, 0x00000001 }, /* PFLUSH */ { NULL, 62736, 0x00000001 }, /* PFLUSHAN */ { NULL, 62744, 0x00000001 }, /* PFLUSHA */ { NULL, 62792, 0x00000001 }, /* PTESTR */ { NULL, 62824, 0x00000001 }, /* PTESTW */ { NULL, 62856, 0x00000001 }, /* PLPAR */ { NULL, 62920, 0x00000001 }, /* PLPAW */ { op_f600_0_comp_nf, 62976, 0x00000002 }, /* MOVE16 */ { op_f608_0_comp_nf, 62984, 0x00000002 }, /* MOVE16 */ { op_f610_0_comp_nf, 62992, 0x00000002 }, /* MOVE16 */ { op_f618_0_comp_nf, 63000, 0x00000002 }, /* MOVE16 */ { op_f620_0_comp_nf, 63008, 0x00000002 }, /* MOVE16 */ { NULL, 63488, 0x00000001 }, /* LPSTOP */ { 0, 65536, 0 }}; #endif fs-uae-2.2.3+dfsg/src/jit/comptbl.h0000644000175000017500000032103012162366654017241 0ustar glaubitzglaubitz#ifdef NOFLAGS_SUPPORT /* 68040 */ extern const struct comptbl op_smalltbl_0_nf[]; #endif extern const struct comptbl op_smalltbl_0_comp_nf[]; extern const struct comptbl op_smalltbl_0_comp_ff[]; extern compop_func op_0_0_comp_ff; extern compop_func op_10_0_comp_ff; extern compop_func op_18_0_comp_ff; extern compop_func op_20_0_comp_ff; extern compop_func op_28_0_comp_ff; extern compop_func op_30_0_comp_ff; extern compop_func op_38_0_comp_ff; extern compop_func op_39_0_comp_ff; extern compop_func op_40_0_comp_ff; extern compop_func op_50_0_comp_ff; extern compop_func op_58_0_comp_ff; extern compop_func op_60_0_comp_ff; extern compop_func op_68_0_comp_ff; extern compop_func op_70_0_comp_ff; extern compop_func op_78_0_comp_ff; extern compop_func op_79_0_comp_ff; extern compop_func op_80_0_comp_ff; extern compop_func op_90_0_comp_ff; extern compop_func op_98_0_comp_ff; extern compop_func op_a0_0_comp_ff; extern compop_func op_a8_0_comp_ff; extern compop_func op_b0_0_comp_ff; extern compop_func op_b8_0_comp_ff; extern compop_func op_b9_0_comp_ff; extern compop_func op_100_0_comp_ff; extern compop_func op_110_0_comp_ff; extern compop_func op_118_0_comp_ff; extern compop_func op_120_0_comp_ff; extern compop_func op_128_0_comp_ff; extern compop_func op_130_0_comp_ff; extern compop_func op_138_0_comp_ff; extern compop_func op_139_0_comp_ff; extern compop_func op_13a_0_comp_ff; extern compop_func op_13b_0_comp_ff; extern compop_func op_13c_0_comp_ff; extern compop_func op_140_0_comp_ff; extern compop_func op_150_0_comp_ff; extern compop_func op_158_0_comp_ff; extern compop_func op_160_0_comp_ff; extern compop_func op_168_0_comp_ff; extern compop_func op_170_0_comp_ff; extern compop_func op_178_0_comp_ff; extern compop_func op_179_0_comp_ff; extern compop_func op_17a_0_comp_ff; extern compop_func op_17b_0_comp_ff; extern compop_func op_180_0_comp_ff; extern compop_func op_190_0_comp_ff; extern compop_func op_198_0_comp_ff; extern compop_func op_1a0_0_comp_ff; extern compop_func op_1a8_0_comp_ff; extern compop_func op_1b0_0_comp_ff; extern compop_func op_1b8_0_comp_ff; extern compop_func op_1b9_0_comp_ff; extern compop_func op_1ba_0_comp_ff; extern compop_func op_1bb_0_comp_ff; extern compop_func op_1c0_0_comp_ff; extern compop_func op_1d0_0_comp_ff; extern compop_func op_1d8_0_comp_ff; extern compop_func op_1e0_0_comp_ff; extern compop_func op_1e8_0_comp_ff; extern compop_func op_1f0_0_comp_ff; extern compop_func op_1f8_0_comp_ff; extern compop_func op_1f9_0_comp_ff; extern compop_func op_1fa_0_comp_ff; extern compop_func op_1fb_0_comp_ff; extern compop_func op_200_0_comp_ff; extern compop_func op_210_0_comp_ff; extern compop_func op_218_0_comp_ff; extern compop_func op_220_0_comp_ff; extern compop_func op_228_0_comp_ff; extern compop_func op_230_0_comp_ff; extern compop_func op_238_0_comp_ff; extern compop_func op_239_0_comp_ff; extern compop_func op_240_0_comp_ff; extern compop_func op_250_0_comp_ff; extern compop_func op_258_0_comp_ff; extern compop_func op_260_0_comp_ff; extern compop_func op_268_0_comp_ff; extern compop_func op_270_0_comp_ff; extern compop_func op_278_0_comp_ff; extern compop_func op_279_0_comp_ff; extern compop_func op_280_0_comp_ff; extern compop_func op_290_0_comp_ff; extern compop_func op_298_0_comp_ff; extern compop_func op_2a0_0_comp_ff; extern compop_func op_2a8_0_comp_ff; extern compop_func op_2b0_0_comp_ff; extern compop_func op_2b8_0_comp_ff; extern compop_func op_2b9_0_comp_ff; extern compop_func op_400_0_comp_ff; extern compop_func op_410_0_comp_ff; extern compop_func op_418_0_comp_ff; extern compop_func op_420_0_comp_ff; extern compop_func op_428_0_comp_ff; extern compop_func op_430_0_comp_ff; extern compop_func op_438_0_comp_ff; extern compop_func op_439_0_comp_ff; extern compop_func op_440_0_comp_ff; extern compop_func op_450_0_comp_ff; extern compop_func op_458_0_comp_ff; extern compop_func op_460_0_comp_ff; extern compop_func op_468_0_comp_ff; extern compop_func op_470_0_comp_ff; extern compop_func op_478_0_comp_ff; extern compop_func op_479_0_comp_ff; extern compop_func op_480_0_comp_ff; extern compop_func op_490_0_comp_ff; extern compop_func op_498_0_comp_ff; extern compop_func op_4a0_0_comp_ff; extern compop_func op_4a8_0_comp_ff; extern compop_func op_4b0_0_comp_ff; extern compop_func op_4b8_0_comp_ff; extern compop_func op_4b9_0_comp_ff; extern compop_func op_600_0_comp_ff; extern compop_func op_610_0_comp_ff; extern compop_func op_618_0_comp_ff; extern compop_func op_620_0_comp_ff; extern compop_func op_628_0_comp_ff; extern compop_func op_630_0_comp_ff; extern compop_func op_638_0_comp_ff; extern compop_func op_639_0_comp_ff; extern compop_func op_640_0_comp_ff; extern compop_func op_650_0_comp_ff; extern compop_func op_658_0_comp_ff; extern compop_func op_660_0_comp_ff; extern compop_func op_668_0_comp_ff; extern compop_func op_670_0_comp_ff; extern compop_func op_678_0_comp_ff; extern compop_func op_679_0_comp_ff; extern compop_func op_680_0_comp_ff; extern compop_func op_690_0_comp_ff; extern compop_func op_698_0_comp_ff; extern compop_func op_6a0_0_comp_ff; extern compop_func op_6a8_0_comp_ff; extern compop_func op_6b0_0_comp_ff; extern compop_func op_6b8_0_comp_ff; extern compop_func op_6b9_0_comp_ff; extern compop_func op_800_0_comp_ff; extern compop_func op_810_0_comp_ff; extern compop_func op_818_0_comp_ff; extern compop_func op_820_0_comp_ff; extern compop_func op_828_0_comp_ff; extern compop_func op_830_0_comp_ff; extern compop_func op_838_0_comp_ff; extern compop_func op_839_0_comp_ff; extern compop_func op_83a_0_comp_ff; extern compop_func op_83b_0_comp_ff; extern compop_func op_83c_0_comp_ff; extern compop_func op_840_0_comp_ff; extern compop_func op_850_0_comp_ff; extern compop_func op_858_0_comp_ff; extern compop_func op_860_0_comp_ff; extern compop_func op_868_0_comp_ff; extern compop_func op_870_0_comp_ff; extern compop_func op_878_0_comp_ff; extern compop_func op_879_0_comp_ff; extern compop_func op_87a_0_comp_ff; extern compop_func op_87b_0_comp_ff; extern compop_func op_880_0_comp_ff; extern compop_func op_890_0_comp_ff; extern compop_func op_898_0_comp_ff; extern compop_func op_8a0_0_comp_ff; extern compop_func op_8a8_0_comp_ff; extern compop_func op_8b0_0_comp_ff; extern compop_func op_8b8_0_comp_ff; extern compop_func op_8b9_0_comp_ff; extern compop_func op_8ba_0_comp_ff; extern compop_func op_8bb_0_comp_ff; extern compop_func op_8c0_0_comp_ff; extern compop_func op_8d0_0_comp_ff; extern compop_func op_8d8_0_comp_ff; extern compop_func op_8e0_0_comp_ff; extern compop_func op_8e8_0_comp_ff; extern compop_func op_8f0_0_comp_ff; extern compop_func op_8f8_0_comp_ff; extern compop_func op_8f9_0_comp_ff; extern compop_func op_8fa_0_comp_ff; extern compop_func op_8fb_0_comp_ff; extern compop_func op_a00_0_comp_ff; extern compop_func op_a10_0_comp_ff; extern compop_func op_a18_0_comp_ff; extern compop_func op_a20_0_comp_ff; extern compop_func op_a28_0_comp_ff; extern compop_func op_a30_0_comp_ff; extern compop_func op_a38_0_comp_ff; extern compop_func op_a39_0_comp_ff; extern compop_func op_a40_0_comp_ff; extern compop_func op_a50_0_comp_ff; extern compop_func op_a58_0_comp_ff; extern compop_func op_a60_0_comp_ff; extern compop_func op_a68_0_comp_ff; extern compop_func op_a70_0_comp_ff; extern compop_func op_a78_0_comp_ff; extern compop_func op_a79_0_comp_ff; extern compop_func op_a80_0_comp_ff; extern compop_func op_a90_0_comp_ff; extern compop_func op_a98_0_comp_ff; extern compop_func op_aa0_0_comp_ff; extern compop_func op_aa8_0_comp_ff; extern compop_func op_ab0_0_comp_ff; extern compop_func op_ab8_0_comp_ff; extern compop_func op_ab9_0_comp_ff; extern compop_func op_c00_0_comp_ff; extern compop_func op_c10_0_comp_ff; extern compop_func op_c18_0_comp_ff; extern compop_func op_c20_0_comp_ff; extern compop_func op_c28_0_comp_ff; extern compop_func op_c30_0_comp_ff; extern compop_func op_c38_0_comp_ff; extern compop_func op_c39_0_comp_ff; extern compop_func op_c3a_0_comp_ff; extern compop_func op_c3b_0_comp_ff; extern compop_func op_c40_0_comp_ff; extern compop_func op_c50_0_comp_ff; extern compop_func op_c58_0_comp_ff; extern compop_func op_c60_0_comp_ff; extern compop_func op_c68_0_comp_ff; extern compop_func op_c70_0_comp_ff; extern compop_func op_c78_0_comp_ff; extern compop_func op_c79_0_comp_ff; extern compop_func op_c7a_0_comp_ff; extern compop_func op_c7b_0_comp_ff; extern compop_func op_c80_0_comp_ff; extern compop_func op_c90_0_comp_ff; extern compop_func op_c98_0_comp_ff; extern compop_func op_ca0_0_comp_ff; extern compop_func op_ca8_0_comp_ff; extern compop_func op_cb0_0_comp_ff; extern compop_func op_cb8_0_comp_ff; extern compop_func op_cb9_0_comp_ff; extern compop_func op_cba_0_comp_ff; extern compop_func op_cbb_0_comp_ff; extern compop_func op_1000_0_comp_ff; extern compop_func op_1010_0_comp_ff; extern compop_func op_1018_0_comp_ff; extern compop_func op_1020_0_comp_ff; extern compop_func op_1028_0_comp_ff; extern compop_func op_1030_0_comp_ff; extern compop_func op_1038_0_comp_ff; extern compop_func op_1039_0_comp_ff; extern compop_func op_103a_0_comp_ff; extern compop_func op_103b_0_comp_ff; extern compop_func op_103c_0_comp_ff; extern compop_func op_1080_0_comp_ff; extern compop_func op_1090_0_comp_ff; extern compop_func op_1098_0_comp_ff; extern compop_func op_10a0_0_comp_ff; extern compop_func op_10a8_0_comp_ff; extern compop_func op_10b0_0_comp_ff; extern compop_func op_10b8_0_comp_ff; extern compop_func op_10b9_0_comp_ff; extern compop_func op_10ba_0_comp_ff; extern compop_func op_10bb_0_comp_ff; extern compop_func op_10bc_0_comp_ff; extern compop_func op_10c0_0_comp_ff; extern compop_func op_10d0_0_comp_ff; extern compop_func op_10d8_0_comp_ff; extern compop_func op_10e0_0_comp_ff; extern compop_func op_10e8_0_comp_ff; extern compop_func op_10f0_0_comp_ff; extern compop_func op_10f8_0_comp_ff; extern compop_func op_10f9_0_comp_ff; extern compop_func op_10fa_0_comp_ff; extern compop_func op_10fb_0_comp_ff; extern compop_func op_10fc_0_comp_ff; extern compop_func op_1100_0_comp_ff; extern compop_func op_1110_0_comp_ff; extern compop_func op_1118_0_comp_ff; extern compop_func op_1120_0_comp_ff; extern compop_func op_1128_0_comp_ff; extern compop_func op_1130_0_comp_ff; extern compop_func op_1138_0_comp_ff; extern compop_func op_1139_0_comp_ff; extern compop_func op_113a_0_comp_ff; extern compop_func op_113b_0_comp_ff; extern compop_func op_113c_0_comp_ff; extern compop_func op_1140_0_comp_ff; extern compop_func op_1150_0_comp_ff; extern compop_func op_1158_0_comp_ff; extern compop_func op_1160_0_comp_ff; extern compop_func op_1168_0_comp_ff; extern compop_func op_1170_0_comp_ff; extern compop_func op_1178_0_comp_ff; extern compop_func op_1179_0_comp_ff; extern compop_func op_117a_0_comp_ff; extern compop_func op_117b_0_comp_ff; extern compop_func op_117c_0_comp_ff; extern compop_func op_1180_0_comp_ff; extern compop_func op_1190_0_comp_ff; extern compop_func op_1198_0_comp_ff; extern compop_func op_11a0_0_comp_ff; extern compop_func op_11a8_0_comp_ff; extern compop_func op_11b0_0_comp_ff; extern compop_func op_11b8_0_comp_ff; extern compop_func op_11b9_0_comp_ff; extern compop_func op_11ba_0_comp_ff; extern compop_func op_11bb_0_comp_ff; extern compop_func op_11bc_0_comp_ff; extern compop_func op_11c0_0_comp_ff; extern compop_func op_11d0_0_comp_ff; extern compop_func op_11d8_0_comp_ff; extern compop_func op_11e0_0_comp_ff; extern compop_func op_11e8_0_comp_ff; extern compop_func op_11f0_0_comp_ff; extern compop_func op_11f8_0_comp_ff; extern compop_func op_11f9_0_comp_ff; extern compop_func op_11fa_0_comp_ff; extern compop_func op_11fb_0_comp_ff; extern compop_func op_11fc_0_comp_ff; extern compop_func op_13c0_0_comp_ff; extern compop_func op_13d0_0_comp_ff; extern compop_func op_13d8_0_comp_ff; extern compop_func op_13e0_0_comp_ff; extern compop_func op_13e8_0_comp_ff; extern compop_func op_13f0_0_comp_ff; extern compop_func op_13f8_0_comp_ff; extern compop_func op_13f9_0_comp_ff; extern compop_func op_13fa_0_comp_ff; extern compop_func op_13fb_0_comp_ff; extern compop_func op_13fc_0_comp_ff; extern compop_func op_2000_0_comp_ff; extern compop_func op_2008_0_comp_ff; extern compop_func op_2010_0_comp_ff; extern compop_func op_2018_0_comp_ff; extern compop_func op_2020_0_comp_ff; extern compop_func op_2028_0_comp_ff; extern compop_func op_2030_0_comp_ff; extern compop_func op_2038_0_comp_ff; extern compop_func op_2039_0_comp_ff; extern compop_func op_203a_0_comp_ff; extern compop_func op_203b_0_comp_ff; extern compop_func op_203c_0_comp_ff; extern compop_func op_2040_0_comp_ff; extern compop_func op_2048_0_comp_ff; extern compop_func op_2050_0_comp_ff; extern compop_func op_2058_0_comp_ff; extern compop_func op_2060_0_comp_ff; extern compop_func op_2068_0_comp_ff; extern compop_func op_2070_0_comp_ff; extern compop_func op_2078_0_comp_ff; extern compop_func op_2079_0_comp_ff; extern compop_func op_207a_0_comp_ff; extern compop_func op_207b_0_comp_ff; extern compop_func op_207c_0_comp_ff; extern compop_func op_2080_0_comp_ff; extern compop_func op_2088_0_comp_ff; extern compop_func op_2090_0_comp_ff; extern compop_func op_2098_0_comp_ff; extern compop_func op_20a0_0_comp_ff; extern compop_func op_20a8_0_comp_ff; extern compop_func op_20b0_0_comp_ff; extern compop_func op_20b8_0_comp_ff; extern compop_func op_20b9_0_comp_ff; extern compop_func op_20ba_0_comp_ff; extern compop_func op_20bb_0_comp_ff; extern compop_func op_20bc_0_comp_ff; extern compop_func op_20c0_0_comp_ff; extern compop_func op_20c8_0_comp_ff; extern compop_func op_20d0_0_comp_ff; extern compop_func op_20d8_0_comp_ff; extern compop_func op_20e0_0_comp_ff; extern compop_func op_20e8_0_comp_ff; extern compop_func op_20f0_0_comp_ff; extern compop_func op_20f8_0_comp_ff; extern compop_func op_20f9_0_comp_ff; extern compop_func op_20fa_0_comp_ff; extern compop_func op_20fb_0_comp_ff; extern compop_func op_20fc_0_comp_ff; extern compop_func op_2100_0_comp_ff; extern compop_func op_2108_0_comp_ff; extern compop_func op_2110_0_comp_ff; extern compop_func op_2118_0_comp_ff; extern compop_func op_2120_0_comp_ff; extern compop_func op_2128_0_comp_ff; extern compop_func op_2130_0_comp_ff; extern compop_func op_2138_0_comp_ff; extern compop_func op_2139_0_comp_ff; extern compop_func op_213a_0_comp_ff; extern compop_func op_213b_0_comp_ff; extern compop_func op_213c_0_comp_ff; extern compop_func op_2140_0_comp_ff; extern compop_func op_2148_0_comp_ff; extern compop_func op_2150_0_comp_ff; extern compop_func op_2158_0_comp_ff; extern compop_func op_2160_0_comp_ff; extern compop_func op_2168_0_comp_ff; extern compop_func op_2170_0_comp_ff; extern compop_func op_2178_0_comp_ff; extern compop_func op_2179_0_comp_ff; extern compop_func op_217a_0_comp_ff; extern compop_func op_217b_0_comp_ff; extern compop_func op_217c_0_comp_ff; extern compop_func op_2180_0_comp_ff; extern compop_func op_2188_0_comp_ff; extern compop_func op_2190_0_comp_ff; extern compop_func op_2198_0_comp_ff; extern compop_func op_21a0_0_comp_ff; extern compop_func op_21a8_0_comp_ff; extern compop_func op_21b0_0_comp_ff; extern compop_func op_21b8_0_comp_ff; extern compop_func op_21b9_0_comp_ff; extern compop_func op_21ba_0_comp_ff; extern compop_func op_21bb_0_comp_ff; extern compop_func op_21bc_0_comp_ff; extern compop_func op_21c0_0_comp_ff; extern compop_func op_21c8_0_comp_ff; extern compop_func op_21d0_0_comp_ff; extern compop_func op_21d8_0_comp_ff; extern compop_func op_21e0_0_comp_ff; extern compop_func op_21e8_0_comp_ff; extern compop_func op_21f0_0_comp_ff; extern compop_func op_21f8_0_comp_ff; extern compop_func op_21f9_0_comp_ff; extern compop_func op_21fa_0_comp_ff; extern compop_func op_21fb_0_comp_ff; extern compop_func op_21fc_0_comp_ff; extern compop_func op_23c0_0_comp_ff; extern compop_func op_23c8_0_comp_ff; extern compop_func op_23d0_0_comp_ff; extern compop_func op_23d8_0_comp_ff; extern compop_func op_23e0_0_comp_ff; extern compop_func op_23e8_0_comp_ff; extern compop_func op_23f0_0_comp_ff; extern compop_func op_23f8_0_comp_ff; extern compop_func op_23f9_0_comp_ff; extern compop_func op_23fa_0_comp_ff; extern compop_func op_23fb_0_comp_ff; extern compop_func op_23fc_0_comp_ff; extern compop_func op_3000_0_comp_ff; extern compop_func op_3008_0_comp_ff; extern compop_func op_3010_0_comp_ff; extern compop_func op_3018_0_comp_ff; extern compop_func op_3020_0_comp_ff; extern compop_func op_3028_0_comp_ff; extern compop_func op_3030_0_comp_ff; extern compop_func op_3038_0_comp_ff; extern compop_func op_3039_0_comp_ff; extern compop_func op_303a_0_comp_ff; extern compop_func op_303b_0_comp_ff; extern compop_func op_303c_0_comp_ff; extern compop_func op_3040_0_comp_ff; extern compop_func op_3048_0_comp_ff; extern compop_func op_3050_0_comp_ff; extern compop_func op_3058_0_comp_ff; extern compop_func op_3060_0_comp_ff; extern compop_func op_3068_0_comp_ff; extern compop_func op_3070_0_comp_ff; extern compop_func op_3078_0_comp_ff; extern compop_func op_3079_0_comp_ff; extern compop_func op_307a_0_comp_ff; extern compop_func op_307b_0_comp_ff; extern compop_func op_307c_0_comp_ff; extern compop_func op_3080_0_comp_ff; extern compop_func op_3088_0_comp_ff; extern compop_func op_3090_0_comp_ff; extern compop_func op_3098_0_comp_ff; extern compop_func op_30a0_0_comp_ff; extern compop_func op_30a8_0_comp_ff; extern compop_func op_30b0_0_comp_ff; extern compop_func op_30b8_0_comp_ff; extern compop_func op_30b9_0_comp_ff; extern compop_func op_30ba_0_comp_ff; extern compop_func op_30bb_0_comp_ff; extern compop_func op_30bc_0_comp_ff; extern compop_func op_30c0_0_comp_ff; extern compop_func op_30c8_0_comp_ff; extern compop_func op_30d0_0_comp_ff; extern compop_func op_30d8_0_comp_ff; extern compop_func op_30e0_0_comp_ff; extern compop_func op_30e8_0_comp_ff; extern compop_func op_30f0_0_comp_ff; extern compop_func op_30f8_0_comp_ff; extern compop_func op_30f9_0_comp_ff; extern compop_func op_30fa_0_comp_ff; extern compop_func op_30fb_0_comp_ff; extern compop_func op_30fc_0_comp_ff; extern compop_func op_3100_0_comp_ff; extern compop_func op_3108_0_comp_ff; extern compop_func op_3110_0_comp_ff; extern compop_func op_3118_0_comp_ff; extern compop_func op_3120_0_comp_ff; extern compop_func op_3128_0_comp_ff; extern compop_func op_3130_0_comp_ff; extern compop_func op_3138_0_comp_ff; extern compop_func op_3139_0_comp_ff; extern compop_func op_313a_0_comp_ff; extern compop_func op_313b_0_comp_ff; extern compop_func op_313c_0_comp_ff; extern compop_func op_3140_0_comp_ff; extern compop_func op_3148_0_comp_ff; extern compop_func op_3150_0_comp_ff; extern compop_func op_3158_0_comp_ff; extern compop_func op_3160_0_comp_ff; extern compop_func op_3168_0_comp_ff; extern compop_func op_3170_0_comp_ff; extern compop_func op_3178_0_comp_ff; extern compop_func op_3179_0_comp_ff; extern compop_func op_317a_0_comp_ff; extern compop_func op_317b_0_comp_ff; extern compop_func op_317c_0_comp_ff; extern compop_func op_3180_0_comp_ff; extern compop_func op_3188_0_comp_ff; extern compop_func op_3190_0_comp_ff; extern compop_func op_3198_0_comp_ff; extern compop_func op_31a0_0_comp_ff; extern compop_func op_31a8_0_comp_ff; extern compop_func op_31b0_0_comp_ff; extern compop_func op_31b8_0_comp_ff; extern compop_func op_31b9_0_comp_ff; extern compop_func op_31ba_0_comp_ff; extern compop_func op_31bb_0_comp_ff; extern compop_func op_31bc_0_comp_ff; extern compop_func op_31c0_0_comp_ff; extern compop_func op_31c8_0_comp_ff; extern compop_func op_31d0_0_comp_ff; extern compop_func op_31d8_0_comp_ff; extern compop_func op_31e0_0_comp_ff; extern compop_func op_31e8_0_comp_ff; extern compop_func op_31f0_0_comp_ff; extern compop_func op_31f8_0_comp_ff; extern compop_func op_31f9_0_comp_ff; extern compop_func op_31fa_0_comp_ff; extern compop_func op_31fb_0_comp_ff; extern compop_func op_31fc_0_comp_ff; extern compop_func op_33c0_0_comp_ff; extern compop_func op_33c8_0_comp_ff; extern compop_func op_33d0_0_comp_ff; extern compop_func op_33d8_0_comp_ff; extern compop_func op_33e0_0_comp_ff; extern compop_func op_33e8_0_comp_ff; extern compop_func op_33f0_0_comp_ff; extern compop_func op_33f8_0_comp_ff; extern compop_func op_33f9_0_comp_ff; extern compop_func op_33fa_0_comp_ff; extern compop_func op_33fb_0_comp_ff; extern compop_func op_33fc_0_comp_ff; extern compop_func op_4000_0_comp_ff; extern compop_func op_4010_0_comp_ff; extern compop_func op_4018_0_comp_ff; extern compop_func op_4020_0_comp_ff; extern compop_func op_4028_0_comp_ff; extern compop_func op_4030_0_comp_ff; extern compop_func op_4038_0_comp_ff; extern compop_func op_4039_0_comp_ff; extern compop_func op_4040_0_comp_ff; extern compop_func op_4050_0_comp_ff; extern compop_func op_4058_0_comp_ff; extern compop_func op_4060_0_comp_ff; extern compop_func op_4068_0_comp_ff; extern compop_func op_4070_0_comp_ff; extern compop_func op_4078_0_comp_ff; extern compop_func op_4079_0_comp_ff; extern compop_func op_4080_0_comp_ff; extern compop_func op_4090_0_comp_ff; extern compop_func op_4098_0_comp_ff; extern compop_func op_40a0_0_comp_ff; extern compop_func op_40a8_0_comp_ff; extern compop_func op_40b0_0_comp_ff; extern compop_func op_40b8_0_comp_ff; extern compop_func op_40b9_0_comp_ff; extern compop_func op_41d0_0_comp_ff; extern compop_func op_41e8_0_comp_ff; extern compop_func op_41f0_0_comp_ff; extern compop_func op_41f8_0_comp_ff; extern compop_func op_41f9_0_comp_ff; extern compop_func op_41fa_0_comp_ff; extern compop_func op_41fb_0_comp_ff; extern compop_func op_4200_0_comp_ff; extern compop_func op_4210_0_comp_ff; extern compop_func op_4218_0_comp_ff; extern compop_func op_4220_0_comp_ff; extern compop_func op_4228_0_comp_ff; extern compop_func op_4230_0_comp_ff; extern compop_func op_4238_0_comp_ff; extern compop_func op_4239_0_comp_ff; extern compop_func op_4240_0_comp_ff; extern compop_func op_4250_0_comp_ff; extern compop_func op_4258_0_comp_ff; extern compop_func op_4260_0_comp_ff; extern compop_func op_4268_0_comp_ff; extern compop_func op_4270_0_comp_ff; extern compop_func op_4278_0_comp_ff; extern compop_func op_4279_0_comp_ff; extern compop_func op_4280_0_comp_ff; extern compop_func op_4290_0_comp_ff; extern compop_func op_4298_0_comp_ff; extern compop_func op_42a0_0_comp_ff; extern compop_func op_42a8_0_comp_ff; extern compop_func op_42b0_0_comp_ff; extern compop_func op_42b8_0_comp_ff; extern compop_func op_42b9_0_comp_ff; extern compop_func op_4400_0_comp_ff; extern compop_func op_4410_0_comp_ff; extern compop_func op_4418_0_comp_ff; extern compop_func op_4420_0_comp_ff; extern compop_func op_4428_0_comp_ff; extern compop_func op_4430_0_comp_ff; extern compop_func op_4438_0_comp_ff; extern compop_func op_4439_0_comp_ff; extern compop_func op_4440_0_comp_ff; extern compop_func op_4450_0_comp_ff; extern compop_func op_4458_0_comp_ff; extern compop_func op_4460_0_comp_ff; extern compop_func op_4468_0_comp_ff; extern compop_func op_4470_0_comp_ff; extern compop_func op_4478_0_comp_ff; extern compop_func op_4479_0_comp_ff; extern compop_func op_4480_0_comp_ff; extern compop_func op_4490_0_comp_ff; extern compop_func op_4498_0_comp_ff; extern compop_func op_44a0_0_comp_ff; extern compop_func op_44a8_0_comp_ff; extern compop_func op_44b0_0_comp_ff; extern compop_func op_44b8_0_comp_ff; extern compop_func op_44b9_0_comp_ff; extern compop_func op_4600_0_comp_ff; extern compop_func op_4610_0_comp_ff; extern compop_func op_4618_0_comp_ff; extern compop_func op_4620_0_comp_ff; extern compop_func op_4628_0_comp_ff; extern compop_func op_4630_0_comp_ff; extern compop_func op_4638_0_comp_ff; extern compop_func op_4639_0_comp_ff; extern compop_func op_4640_0_comp_ff; extern compop_func op_4650_0_comp_ff; extern compop_func op_4658_0_comp_ff; extern compop_func op_4660_0_comp_ff; extern compop_func op_4668_0_comp_ff; extern compop_func op_4670_0_comp_ff; extern compop_func op_4678_0_comp_ff; extern compop_func op_4679_0_comp_ff; extern compop_func op_4680_0_comp_ff; extern compop_func op_4690_0_comp_ff; extern compop_func op_4698_0_comp_ff; extern compop_func op_46a0_0_comp_ff; extern compop_func op_46a8_0_comp_ff; extern compop_func op_46b0_0_comp_ff; extern compop_func op_46b8_0_comp_ff; extern compop_func op_46b9_0_comp_ff; extern compop_func op_4808_0_comp_ff; extern compop_func op_4840_0_comp_ff; extern compop_func op_4850_0_comp_ff; extern compop_func op_4868_0_comp_ff; extern compop_func op_4870_0_comp_ff; extern compop_func op_4878_0_comp_ff; extern compop_func op_4879_0_comp_ff; extern compop_func op_487a_0_comp_ff; extern compop_func op_487b_0_comp_ff; extern compop_func op_4880_0_comp_ff; extern compop_func op_4890_0_comp_ff; extern compop_func op_48a0_0_comp_ff; extern compop_func op_48a8_0_comp_ff; extern compop_func op_48b0_0_comp_ff; extern compop_func op_48b8_0_comp_ff; extern compop_func op_48b9_0_comp_ff; extern compop_func op_48c0_0_comp_ff; extern compop_func op_48d0_0_comp_ff; extern compop_func op_48e0_0_comp_ff; extern compop_func op_48e8_0_comp_ff; extern compop_func op_48f0_0_comp_ff; extern compop_func op_48f8_0_comp_ff; extern compop_func op_48f9_0_comp_ff; extern compop_func op_49c0_0_comp_ff; extern compop_func op_4a00_0_comp_ff; extern compop_func op_4a10_0_comp_ff; extern compop_func op_4a18_0_comp_ff; extern compop_func op_4a20_0_comp_ff; extern compop_func op_4a28_0_comp_ff; extern compop_func op_4a30_0_comp_ff; extern compop_func op_4a38_0_comp_ff; extern compop_func op_4a39_0_comp_ff; extern compop_func op_4a3a_0_comp_ff; extern compop_func op_4a3b_0_comp_ff; extern compop_func op_4a3c_0_comp_ff; extern compop_func op_4a40_0_comp_ff; extern compop_func op_4a48_0_comp_ff; extern compop_func op_4a50_0_comp_ff; extern compop_func op_4a58_0_comp_ff; extern compop_func op_4a60_0_comp_ff; extern compop_func op_4a68_0_comp_ff; extern compop_func op_4a70_0_comp_ff; extern compop_func op_4a78_0_comp_ff; extern compop_func op_4a79_0_comp_ff; extern compop_func op_4a7a_0_comp_ff; extern compop_func op_4a7b_0_comp_ff; extern compop_func op_4a7c_0_comp_ff; extern compop_func op_4a80_0_comp_ff; extern compop_func op_4a88_0_comp_ff; extern compop_func op_4a90_0_comp_ff; extern compop_func op_4a98_0_comp_ff; extern compop_func op_4aa0_0_comp_ff; extern compop_func op_4aa8_0_comp_ff; extern compop_func op_4ab0_0_comp_ff; extern compop_func op_4ab8_0_comp_ff; extern compop_func op_4ab9_0_comp_ff; extern compop_func op_4aba_0_comp_ff; extern compop_func op_4abb_0_comp_ff; extern compop_func op_4abc_0_comp_ff; extern compop_func op_4c90_0_comp_ff; extern compop_func op_4c98_0_comp_ff; extern compop_func op_4ca8_0_comp_ff; extern compop_func op_4cb0_0_comp_ff; extern compop_func op_4cb8_0_comp_ff; extern compop_func op_4cb9_0_comp_ff; extern compop_func op_4cba_0_comp_ff; extern compop_func op_4cbb_0_comp_ff; extern compop_func op_4cd0_0_comp_ff; extern compop_func op_4cd8_0_comp_ff; extern compop_func op_4ce8_0_comp_ff; extern compop_func op_4cf0_0_comp_ff; extern compop_func op_4cf8_0_comp_ff; extern compop_func op_4cf9_0_comp_ff; extern compop_func op_4cfa_0_comp_ff; extern compop_func op_4cfb_0_comp_ff; extern compop_func op_4e50_0_comp_ff; extern compop_func op_4e58_0_comp_ff; extern compop_func op_4e71_0_comp_ff; extern compop_func op_4e74_0_comp_ff; extern compop_func op_4e75_0_comp_ff; extern compop_func op_4e90_0_comp_ff; extern compop_func op_4ea8_0_comp_ff; extern compop_func op_4eb0_0_comp_ff; extern compop_func op_4eb8_0_comp_ff; extern compop_func op_4eb9_0_comp_ff; extern compop_func op_4eba_0_comp_ff; extern compop_func op_4ebb_0_comp_ff; extern compop_func op_4ed0_0_comp_ff; extern compop_func op_4ee8_0_comp_ff; extern compop_func op_4ef0_0_comp_ff; extern compop_func op_4ef8_0_comp_ff; extern compop_func op_4ef9_0_comp_ff; extern compop_func op_4efa_0_comp_ff; extern compop_func op_4efb_0_comp_ff; extern compop_func op_5000_0_comp_ff; extern compop_func op_5010_0_comp_ff; extern compop_func op_5018_0_comp_ff; extern compop_func op_5020_0_comp_ff; extern compop_func op_5028_0_comp_ff; extern compop_func op_5030_0_comp_ff; extern compop_func op_5038_0_comp_ff; extern compop_func op_5039_0_comp_ff; extern compop_func op_5040_0_comp_ff; extern compop_func op_5048_0_comp_ff; extern compop_func op_5050_0_comp_ff; extern compop_func op_5058_0_comp_ff; extern compop_func op_5060_0_comp_ff; extern compop_func op_5068_0_comp_ff; extern compop_func op_5070_0_comp_ff; extern compop_func op_5078_0_comp_ff; extern compop_func op_5079_0_comp_ff; extern compop_func op_5080_0_comp_ff; extern compop_func op_5088_0_comp_ff; extern compop_func op_5090_0_comp_ff; extern compop_func op_5098_0_comp_ff; extern compop_func op_50a0_0_comp_ff; extern compop_func op_50a8_0_comp_ff; extern compop_func op_50b0_0_comp_ff; extern compop_func op_50b8_0_comp_ff; extern compop_func op_50b9_0_comp_ff; extern compop_func op_50c0_0_comp_ff; extern compop_func op_50c8_0_comp_ff; extern compop_func op_50d0_0_comp_ff; extern compop_func op_50d8_0_comp_ff; extern compop_func op_50e0_0_comp_ff; extern compop_func op_50e8_0_comp_ff; extern compop_func op_50f0_0_comp_ff; extern compop_func op_50f8_0_comp_ff; extern compop_func op_50f9_0_comp_ff; extern compop_func op_5100_0_comp_ff; extern compop_func op_5110_0_comp_ff; extern compop_func op_5118_0_comp_ff; extern compop_func op_5120_0_comp_ff; extern compop_func op_5128_0_comp_ff; extern compop_func op_5130_0_comp_ff; extern compop_func op_5138_0_comp_ff; extern compop_func op_5139_0_comp_ff; extern compop_func op_5140_0_comp_ff; extern compop_func op_5148_0_comp_ff; extern compop_func op_5150_0_comp_ff; extern compop_func op_5158_0_comp_ff; extern compop_func op_5160_0_comp_ff; extern compop_func op_5168_0_comp_ff; extern compop_func op_5170_0_comp_ff; extern compop_func op_5178_0_comp_ff; extern compop_func op_5179_0_comp_ff; extern compop_func op_5180_0_comp_ff; extern compop_func op_5188_0_comp_ff; extern compop_func op_5190_0_comp_ff; extern compop_func op_5198_0_comp_ff; extern compop_func op_51a0_0_comp_ff; extern compop_func op_51a8_0_comp_ff; extern compop_func op_51b0_0_comp_ff; extern compop_func op_51b8_0_comp_ff; extern compop_func op_51b9_0_comp_ff; extern compop_func op_51c0_0_comp_ff; extern compop_func op_51c8_0_comp_ff; extern compop_func op_51d0_0_comp_ff; extern compop_func op_51d8_0_comp_ff; extern compop_func op_51e0_0_comp_ff; extern compop_func op_51e8_0_comp_ff; extern compop_func op_51f0_0_comp_ff; extern compop_func op_51f8_0_comp_ff; extern compop_func op_51f9_0_comp_ff; extern compop_func op_52c0_0_comp_ff; extern compop_func op_52c8_0_comp_ff; extern compop_func op_52d0_0_comp_ff; extern compop_func op_52d8_0_comp_ff; extern compop_func op_52e0_0_comp_ff; extern compop_func op_52e8_0_comp_ff; extern compop_func op_52f0_0_comp_ff; extern compop_func op_52f8_0_comp_ff; extern compop_func op_52f9_0_comp_ff; extern compop_func op_53c0_0_comp_ff; extern compop_func op_53c8_0_comp_ff; extern compop_func op_53d0_0_comp_ff; extern compop_func op_53d8_0_comp_ff; extern compop_func op_53e0_0_comp_ff; extern compop_func op_53e8_0_comp_ff; extern compop_func op_53f0_0_comp_ff; extern compop_func op_53f8_0_comp_ff; extern compop_func op_53f9_0_comp_ff; extern compop_func op_54c0_0_comp_ff; extern compop_func op_54c8_0_comp_ff; extern compop_func op_54d0_0_comp_ff; extern compop_func op_54d8_0_comp_ff; extern compop_func op_54e0_0_comp_ff; extern compop_func op_54e8_0_comp_ff; extern compop_func op_54f0_0_comp_ff; extern compop_func op_54f8_0_comp_ff; extern compop_func op_54f9_0_comp_ff; extern compop_func op_55c0_0_comp_ff; extern compop_func op_55c8_0_comp_ff; extern compop_func op_55d0_0_comp_ff; extern compop_func op_55d8_0_comp_ff; extern compop_func op_55e0_0_comp_ff; extern compop_func op_55e8_0_comp_ff; extern compop_func op_55f0_0_comp_ff; extern compop_func op_55f8_0_comp_ff; extern compop_func op_55f9_0_comp_ff; extern compop_func op_56c0_0_comp_ff; extern compop_func op_56c8_0_comp_ff; extern compop_func op_56d0_0_comp_ff; extern compop_func op_56d8_0_comp_ff; extern compop_func op_56e0_0_comp_ff; extern compop_func op_56e8_0_comp_ff; extern compop_func op_56f0_0_comp_ff; extern compop_func op_56f8_0_comp_ff; extern compop_func op_56f9_0_comp_ff; extern compop_func op_57c0_0_comp_ff; extern compop_func op_57c8_0_comp_ff; extern compop_func op_57d0_0_comp_ff; extern compop_func op_57d8_0_comp_ff; extern compop_func op_57e0_0_comp_ff; extern compop_func op_57e8_0_comp_ff; extern compop_func op_57f0_0_comp_ff; extern compop_func op_57f8_0_comp_ff; extern compop_func op_57f9_0_comp_ff; extern compop_func op_5ac0_0_comp_ff; extern compop_func op_5ac8_0_comp_ff; extern compop_func op_5ad0_0_comp_ff; extern compop_func op_5ad8_0_comp_ff; extern compop_func op_5ae0_0_comp_ff; extern compop_func op_5ae8_0_comp_ff; extern compop_func op_5af0_0_comp_ff; extern compop_func op_5af8_0_comp_ff; extern compop_func op_5af9_0_comp_ff; extern compop_func op_5bc0_0_comp_ff; extern compop_func op_5bc8_0_comp_ff; extern compop_func op_5bd0_0_comp_ff; extern compop_func op_5bd8_0_comp_ff; extern compop_func op_5be0_0_comp_ff; extern compop_func op_5be8_0_comp_ff; extern compop_func op_5bf0_0_comp_ff; extern compop_func op_5bf8_0_comp_ff; extern compop_func op_5bf9_0_comp_ff; extern compop_func op_5cc0_0_comp_ff; extern compop_func op_5cc8_0_comp_ff; extern compop_func op_5cd0_0_comp_ff; extern compop_func op_5cd8_0_comp_ff; extern compop_func op_5ce0_0_comp_ff; extern compop_func op_5ce8_0_comp_ff; extern compop_func op_5cf0_0_comp_ff; extern compop_func op_5cf8_0_comp_ff; extern compop_func op_5cf9_0_comp_ff; extern compop_func op_5dc0_0_comp_ff; extern compop_func op_5dc8_0_comp_ff; extern compop_func op_5dd0_0_comp_ff; extern compop_func op_5dd8_0_comp_ff; extern compop_func op_5de0_0_comp_ff; extern compop_func op_5de8_0_comp_ff; extern compop_func op_5df0_0_comp_ff; extern compop_func op_5df8_0_comp_ff; extern compop_func op_5df9_0_comp_ff; extern compop_func op_5ec0_0_comp_ff; extern compop_func op_5ec8_0_comp_ff; extern compop_func op_5ed0_0_comp_ff; extern compop_func op_5ed8_0_comp_ff; extern compop_func op_5ee0_0_comp_ff; extern compop_func op_5ee8_0_comp_ff; extern compop_func op_5ef0_0_comp_ff; extern compop_func op_5ef8_0_comp_ff; extern compop_func op_5ef9_0_comp_ff; extern compop_func op_5fc0_0_comp_ff; extern compop_func op_5fc8_0_comp_ff; extern compop_func op_5fd0_0_comp_ff; extern compop_func op_5fd8_0_comp_ff; extern compop_func op_5fe0_0_comp_ff; extern compop_func op_5fe8_0_comp_ff; extern compop_func op_5ff0_0_comp_ff; extern compop_func op_5ff8_0_comp_ff; extern compop_func op_5ff9_0_comp_ff; extern compop_func op_6000_0_comp_ff; extern compop_func op_6001_0_comp_ff; extern compop_func op_60ff_0_comp_ff; extern compop_func op_6100_0_comp_ff; extern compop_func op_6101_0_comp_ff; extern compop_func op_6200_0_comp_ff; extern compop_func op_6201_0_comp_ff; extern compop_func op_62ff_0_comp_ff; extern compop_func op_6300_0_comp_ff; extern compop_func op_6301_0_comp_ff; extern compop_func op_63ff_0_comp_ff; extern compop_func op_6400_0_comp_ff; extern compop_func op_6401_0_comp_ff; extern compop_func op_64ff_0_comp_ff; extern compop_func op_6500_0_comp_ff; extern compop_func op_6501_0_comp_ff; extern compop_func op_65ff_0_comp_ff; extern compop_func op_6600_0_comp_ff; extern compop_func op_6601_0_comp_ff; extern compop_func op_66ff_0_comp_ff; extern compop_func op_6700_0_comp_ff; extern compop_func op_6701_0_comp_ff; extern compop_func op_67ff_0_comp_ff; extern compop_func op_6a00_0_comp_ff; extern compop_func op_6a01_0_comp_ff; extern compop_func op_6aff_0_comp_ff; extern compop_func op_6b00_0_comp_ff; extern compop_func op_6b01_0_comp_ff; extern compop_func op_6bff_0_comp_ff; extern compop_func op_6c00_0_comp_ff; extern compop_func op_6c01_0_comp_ff; extern compop_func op_6cff_0_comp_ff; extern compop_func op_6d00_0_comp_ff; extern compop_func op_6d01_0_comp_ff; extern compop_func op_6dff_0_comp_ff; extern compop_func op_6e00_0_comp_ff; extern compop_func op_6e01_0_comp_ff; extern compop_func op_6eff_0_comp_ff; extern compop_func op_6f00_0_comp_ff; extern compop_func op_6f01_0_comp_ff; extern compop_func op_6fff_0_comp_ff; extern compop_func op_7000_0_comp_ff; extern compop_func op_8000_0_comp_ff; extern compop_func op_8010_0_comp_ff; extern compop_func op_8018_0_comp_ff; extern compop_func op_8020_0_comp_ff; extern compop_func op_8028_0_comp_ff; extern compop_func op_8030_0_comp_ff; extern compop_func op_8038_0_comp_ff; extern compop_func op_8039_0_comp_ff; extern compop_func op_803a_0_comp_ff; extern compop_func op_803b_0_comp_ff; extern compop_func op_803c_0_comp_ff; extern compop_func op_8040_0_comp_ff; extern compop_func op_8050_0_comp_ff; extern compop_func op_8058_0_comp_ff; extern compop_func op_8060_0_comp_ff; extern compop_func op_8068_0_comp_ff; extern compop_func op_8070_0_comp_ff; extern compop_func op_8078_0_comp_ff; extern compop_func op_8079_0_comp_ff; extern compop_func op_807a_0_comp_ff; extern compop_func op_807b_0_comp_ff; extern compop_func op_807c_0_comp_ff; extern compop_func op_8080_0_comp_ff; extern compop_func op_8090_0_comp_ff; extern compop_func op_8098_0_comp_ff; extern compop_func op_80a0_0_comp_ff; extern compop_func op_80a8_0_comp_ff; extern compop_func op_80b0_0_comp_ff; extern compop_func op_80b8_0_comp_ff; extern compop_func op_80b9_0_comp_ff; extern compop_func op_80ba_0_comp_ff; extern compop_func op_80bb_0_comp_ff; extern compop_func op_80bc_0_comp_ff; extern compop_func op_8110_0_comp_ff; extern compop_func op_8118_0_comp_ff; extern compop_func op_8120_0_comp_ff; extern compop_func op_8128_0_comp_ff; extern compop_func op_8130_0_comp_ff; extern compop_func op_8138_0_comp_ff; extern compop_func op_8139_0_comp_ff; extern compop_func op_8150_0_comp_ff; extern compop_func op_8158_0_comp_ff; extern compop_func op_8160_0_comp_ff; extern compop_func op_8168_0_comp_ff; extern compop_func op_8170_0_comp_ff; extern compop_func op_8178_0_comp_ff; extern compop_func op_8179_0_comp_ff; extern compop_func op_8190_0_comp_ff; extern compop_func op_8198_0_comp_ff; extern compop_func op_81a0_0_comp_ff; extern compop_func op_81a8_0_comp_ff; extern compop_func op_81b0_0_comp_ff; extern compop_func op_81b8_0_comp_ff; extern compop_func op_81b9_0_comp_ff; extern compop_func op_9000_0_comp_ff; extern compop_func op_9010_0_comp_ff; extern compop_func op_9018_0_comp_ff; extern compop_func op_9020_0_comp_ff; extern compop_func op_9028_0_comp_ff; extern compop_func op_9030_0_comp_ff; extern compop_func op_9038_0_comp_ff; extern compop_func op_9039_0_comp_ff; extern compop_func op_903a_0_comp_ff; extern compop_func op_903b_0_comp_ff; extern compop_func op_903c_0_comp_ff; extern compop_func op_9040_0_comp_ff; extern compop_func op_9048_0_comp_ff; extern compop_func op_9050_0_comp_ff; extern compop_func op_9058_0_comp_ff; extern compop_func op_9060_0_comp_ff; extern compop_func op_9068_0_comp_ff; extern compop_func op_9070_0_comp_ff; extern compop_func op_9078_0_comp_ff; extern compop_func op_9079_0_comp_ff; extern compop_func op_907a_0_comp_ff; extern compop_func op_907b_0_comp_ff; extern compop_func op_907c_0_comp_ff; extern compop_func op_9080_0_comp_ff; extern compop_func op_9088_0_comp_ff; extern compop_func op_9090_0_comp_ff; extern compop_func op_9098_0_comp_ff; extern compop_func op_90a0_0_comp_ff; extern compop_func op_90a8_0_comp_ff; extern compop_func op_90b0_0_comp_ff; extern compop_func op_90b8_0_comp_ff; extern compop_func op_90b9_0_comp_ff; extern compop_func op_90ba_0_comp_ff; extern compop_func op_90bb_0_comp_ff; extern compop_func op_90bc_0_comp_ff; extern compop_func op_90c0_0_comp_ff; extern compop_func op_90c8_0_comp_ff; extern compop_func op_90d0_0_comp_ff; extern compop_func op_90d8_0_comp_ff; extern compop_func op_90e0_0_comp_ff; extern compop_func op_90e8_0_comp_ff; extern compop_func op_90f0_0_comp_ff; extern compop_func op_90f8_0_comp_ff; extern compop_func op_90f9_0_comp_ff; extern compop_func op_90fa_0_comp_ff; extern compop_func op_90fb_0_comp_ff; extern compop_func op_90fc_0_comp_ff; extern compop_func op_9100_0_comp_ff; extern compop_func op_9108_0_comp_ff; extern compop_func op_9110_0_comp_ff; extern compop_func op_9118_0_comp_ff; extern compop_func op_9120_0_comp_ff; extern compop_func op_9128_0_comp_ff; extern compop_func op_9130_0_comp_ff; extern compop_func op_9138_0_comp_ff; extern compop_func op_9139_0_comp_ff; extern compop_func op_9140_0_comp_ff; extern compop_func op_9148_0_comp_ff; extern compop_func op_9150_0_comp_ff; extern compop_func op_9158_0_comp_ff; extern compop_func op_9160_0_comp_ff; extern compop_func op_9168_0_comp_ff; extern compop_func op_9170_0_comp_ff; extern compop_func op_9178_0_comp_ff; extern compop_func op_9179_0_comp_ff; extern compop_func op_9180_0_comp_ff; extern compop_func op_9188_0_comp_ff; extern compop_func op_9190_0_comp_ff; extern compop_func op_9198_0_comp_ff; extern compop_func op_91a0_0_comp_ff; extern compop_func op_91a8_0_comp_ff; extern compop_func op_91b0_0_comp_ff; extern compop_func op_91b8_0_comp_ff; extern compop_func op_91b9_0_comp_ff; extern compop_func op_91c0_0_comp_ff; extern compop_func op_91c8_0_comp_ff; extern compop_func op_91d0_0_comp_ff; extern compop_func op_91d8_0_comp_ff; extern compop_func op_91e0_0_comp_ff; extern compop_func op_91e8_0_comp_ff; extern compop_func op_91f0_0_comp_ff; extern compop_func op_91f8_0_comp_ff; extern compop_func op_91f9_0_comp_ff; extern compop_func op_91fa_0_comp_ff; extern compop_func op_91fb_0_comp_ff; extern compop_func op_91fc_0_comp_ff; extern compop_func op_b000_0_comp_ff; extern compop_func op_b010_0_comp_ff; extern compop_func op_b018_0_comp_ff; extern compop_func op_b020_0_comp_ff; extern compop_func op_b028_0_comp_ff; extern compop_func op_b030_0_comp_ff; extern compop_func op_b038_0_comp_ff; extern compop_func op_b039_0_comp_ff; extern compop_func op_b03a_0_comp_ff; extern compop_func op_b03b_0_comp_ff; extern compop_func op_b03c_0_comp_ff; extern compop_func op_b040_0_comp_ff; extern compop_func op_b048_0_comp_ff; extern compop_func op_b050_0_comp_ff; extern compop_func op_b058_0_comp_ff; extern compop_func op_b060_0_comp_ff; extern compop_func op_b068_0_comp_ff; extern compop_func op_b070_0_comp_ff; extern compop_func op_b078_0_comp_ff; extern compop_func op_b079_0_comp_ff; extern compop_func op_b07a_0_comp_ff; extern compop_func op_b07b_0_comp_ff; extern compop_func op_b07c_0_comp_ff; extern compop_func op_b080_0_comp_ff; extern compop_func op_b088_0_comp_ff; extern compop_func op_b090_0_comp_ff; extern compop_func op_b098_0_comp_ff; extern compop_func op_b0a0_0_comp_ff; extern compop_func op_b0a8_0_comp_ff; extern compop_func op_b0b0_0_comp_ff; extern compop_func op_b0b8_0_comp_ff; extern compop_func op_b0b9_0_comp_ff; extern compop_func op_b0ba_0_comp_ff; extern compop_func op_b0bb_0_comp_ff; extern compop_func op_b0bc_0_comp_ff; extern compop_func op_b0c0_0_comp_ff; extern compop_func op_b0c8_0_comp_ff; extern compop_func op_b0d0_0_comp_ff; extern compop_func op_b0d8_0_comp_ff; extern compop_func op_b0e0_0_comp_ff; extern compop_func op_b0e8_0_comp_ff; extern compop_func op_b0f0_0_comp_ff; extern compop_func op_b0f8_0_comp_ff; extern compop_func op_b0f9_0_comp_ff; extern compop_func op_b0fa_0_comp_ff; extern compop_func op_b0fb_0_comp_ff; extern compop_func op_b0fc_0_comp_ff; extern compop_func op_b100_0_comp_ff; extern compop_func op_b108_0_comp_ff; extern compop_func op_b110_0_comp_ff; extern compop_func op_b118_0_comp_ff; extern compop_func op_b120_0_comp_ff; extern compop_func op_b128_0_comp_ff; extern compop_func op_b130_0_comp_ff; extern compop_func op_b138_0_comp_ff; extern compop_func op_b139_0_comp_ff; extern compop_func op_b140_0_comp_ff; extern compop_func op_b148_0_comp_ff; extern compop_func op_b150_0_comp_ff; extern compop_func op_b158_0_comp_ff; extern compop_func op_b160_0_comp_ff; extern compop_func op_b168_0_comp_ff; extern compop_func op_b170_0_comp_ff; extern compop_func op_b178_0_comp_ff; extern compop_func op_b179_0_comp_ff; extern compop_func op_b180_0_comp_ff; extern compop_func op_b188_0_comp_ff; extern compop_func op_b190_0_comp_ff; extern compop_func op_b198_0_comp_ff; extern compop_func op_b1a0_0_comp_ff; extern compop_func op_b1a8_0_comp_ff; extern compop_func op_b1b0_0_comp_ff; extern compop_func op_b1b8_0_comp_ff; extern compop_func op_b1b9_0_comp_ff; extern compop_func op_b1c0_0_comp_ff; extern compop_func op_b1c8_0_comp_ff; extern compop_func op_b1d0_0_comp_ff; extern compop_func op_b1d8_0_comp_ff; extern compop_func op_b1e0_0_comp_ff; extern compop_func op_b1e8_0_comp_ff; extern compop_func op_b1f0_0_comp_ff; extern compop_func op_b1f8_0_comp_ff; extern compop_func op_b1f9_0_comp_ff; extern compop_func op_b1fa_0_comp_ff; extern compop_func op_b1fb_0_comp_ff; extern compop_func op_b1fc_0_comp_ff; extern compop_func op_c000_0_comp_ff; extern compop_func op_c010_0_comp_ff; extern compop_func op_c018_0_comp_ff; extern compop_func op_c020_0_comp_ff; extern compop_func op_c028_0_comp_ff; extern compop_func op_c030_0_comp_ff; extern compop_func op_c038_0_comp_ff; extern compop_func op_c039_0_comp_ff; extern compop_func op_c03a_0_comp_ff; extern compop_func op_c03b_0_comp_ff; extern compop_func op_c03c_0_comp_ff; extern compop_func op_c040_0_comp_ff; extern compop_func op_c050_0_comp_ff; extern compop_func op_c058_0_comp_ff; extern compop_func op_c060_0_comp_ff; extern compop_func op_c068_0_comp_ff; extern compop_func op_c070_0_comp_ff; extern compop_func op_c078_0_comp_ff; extern compop_func op_c079_0_comp_ff; extern compop_func op_c07a_0_comp_ff; extern compop_func op_c07b_0_comp_ff; extern compop_func op_c07c_0_comp_ff; extern compop_func op_c080_0_comp_ff; extern compop_func op_c090_0_comp_ff; extern compop_func op_c098_0_comp_ff; extern compop_func op_c0a0_0_comp_ff; extern compop_func op_c0a8_0_comp_ff; extern compop_func op_c0b0_0_comp_ff; extern compop_func op_c0b8_0_comp_ff; extern compop_func op_c0b9_0_comp_ff; extern compop_func op_c0ba_0_comp_ff; extern compop_func op_c0bb_0_comp_ff; extern compop_func op_c0bc_0_comp_ff; extern compop_func op_c0c0_0_comp_ff; extern compop_func op_c0d0_0_comp_ff; extern compop_func op_c0d8_0_comp_ff; extern compop_func op_c0e0_0_comp_ff; extern compop_func op_c0e8_0_comp_ff; extern compop_func op_c0f0_0_comp_ff; extern compop_func op_c0f8_0_comp_ff; extern compop_func op_c0f9_0_comp_ff; extern compop_func op_c0fa_0_comp_ff; extern compop_func op_c0fb_0_comp_ff; extern compop_func op_c0fc_0_comp_ff; extern compop_func op_c110_0_comp_ff; extern compop_func op_c118_0_comp_ff; extern compop_func op_c120_0_comp_ff; extern compop_func op_c128_0_comp_ff; extern compop_func op_c130_0_comp_ff; extern compop_func op_c138_0_comp_ff; extern compop_func op_c139_0_comp_ff; extern compop_func op_c140_0_comp_ff; extern compop_func op_c148_0_comp_ff; extern compop_func op_c150_0_comp_ff; extern compop_func op_c158_0_comp_ff; extern compop_func op_c160_0_comp_ff; extern compop_func op_c168_0_comp_ff; extern compop_func op_c170_0_comp_ff; extern compop_func op_c178_0_comp_ff; extern compop_func op_c179_0_comp_ff; extern compop_func op_c188_0_comp_ff; extern compop_func op_c190_0_comp_ff; extern compop_func op_c198_0_comp_ff; extern compop_func op_c1a0_0_comp_ff; extern compop_func op_c1a8_0_comp_ff; extern compop_func op_c1b0_0_comp_ff; extern compop_func op_c1b8_0_comp_ff; extern compop_func op_c1b9_0_comp_ff; extern compop_func op_c1c0_0_comp_ff; extern compop_func op_c1d0_0_comp_ff; extern compop_func op_c1d8_0_comp_ff; extern compop_func op_c1e0_0_comp_ff; extern compop_func op_c1e8_0_comp_ff; extern compop_func op_c1f0_0_comp_ff; extern compop_func op_c1f8_0_comp_ff; extern compop_func op_c1f9_0_comp_ff; extern compop_func op_c1fa_0_comp_ff; extern compop_func op_c1fb_0_comp_ff; extern compop_func op_c1fc_0_comp_ff; extern compop_func op_d000_0_comp_ff; extern compop_func op_d010_0_comp_ff; extern compop_func op_d018_0_comp_ff; extern compop_func op_d020_0_comp_ff; extern compop_func op_d028_0_comp_ff; extern compop_func op_d030_0_comp_ff; extern compop_func op_d038_0_comp_ff; extern compop_func op_d039_0_comp_ff; extern compop_func op_d03a_0_comp_ff; extern compop_func op_d03b_0_comp_ff; extern compop_func op_d03c_0_comp_ff; extern compop_func op_d040_0_comp_ff; extern compop_func op_d048_0_comp_ff; extern compop_func op_d050_0_comp_ff; extern compop_func op_d058_0_comp_ff; extern compop_func op_d060_0_comp_ff; extern compop_func op_d068_0_comp_ff; extern compop_func op_d070_0_comp_ff; extern compop_func op_d078_0_comp_ff; extern compop_func op_d079_0_comp_ff; extern compop_func op_d07a_0_comp_ff; extern compop_func op_d07b_0_comp_ff; extern compop_func op_d07c_0_comp_ff; extern compop_func op_d080_0_comp_ff; extern compop_func op_d088_0_comp_ff; extern compop_func op_d090_0_comp_ff; extern compop_func op_d098_0_comp_ff; extern compop_func op_d0a0_0_comp_ff; extern compop_func op_d0a8_0_comp_ff; extern compop_func op_d0b0_0_comp_ff; extern compop_func op_d0b8_0_comp_ff; extern compop_func op_d0b9_0_comp_ff; extern compop_func op_d0ba_0_comp_ff; extern compop_func op_d0bb_0_comp_ff; extern compop_func op_d0bc_0_comp_ff; extern compop_func op_d0c0_0_comp_ff; extern compop_func op_d0c8_0_comp_ff; extern compop_func op_d0d0_0_comp_ff; extern compop_func op_d0d8_0_comp_ff; extern compop_func op_d0e0_0_comp_ff; extern compop_func op_d0e8_0_comp_ff; extern compop_func op_d0f0_0_comp_ff; extern compop_func op_d0f8_0_comp_ff; extern compop_func op_d0f9_0_comp_ff; extern compop_func op_d0fa_0_comp_ff; extern compop_func op_d0fb_0_comp_ff; extern compop_func op_d0fc_0_comp_ff; extern compop_func op_d100_0_comp_ff; extern compop_func op_d108_0_comp_ff; extern compop_func op_d110_0_comp_ff; extern compop_func op_d118_0_comp_ff; extern compop_func op_d120_0_comp_ff; extern compop_func op_d128_0_comp_ff; extern compop_func op_d130_0_comp_ff; extern compop_func op_d138_0_comp_ff; extern compop_func op_d139_0_comp_ff; extern compop_func op_d140_0_comp_ff; extern compop_func op_d148_0_comp_ff; extern compop_func op_d150_0_comp_ff; extern compop_func op_d158_0_comp_ff; extern compop_func op_d160_0_comp_ff; extern compop_func op_d168_0_comp_ff; extern compop_func op_d170_0_comp_ff; extern compop_func op_d178_0_comp_ff; extern compop_func op_d179_0_comp_ff; extern compop_func op_d180_0_comp_ff; extern compop_func op_d188_0_comp_ff; extern compop_func op_d190_0_comp_ff; extern compop_func op_d198_0_comp_ff; extern compop_func op_d1a0_0_comp_ff; extern compop_func op_d1a8_0_comp_ff; extern compop_func op_d1b0_0_comp_ff; extern compop_func op_d1b8_0_comp_ff; extern compop_func op_d1b9_0_comp_ff; extern compop_func op_d1c0_0_comp_ff; extern compop_func op_d1c8_0_comp_ff; extern compop_func op_d1d0_0_comp_ff; extern compop_func op_d1d8_0_comp_ff; extern compop_func op_d1e0_0_comp_ff; extern compop_func op_d1e8_0_comp_ff; extern compop_func op_d1f0_0_comp_ff; extern compop_func op_d1f8_0_comp_ff; extern compop_func op_d1f9_0_comp_ff; extern compop_func op_d1fa_0_comp_ff; extern compop_func op_d1fb_0_comp_ff; extern compop_func op_d1fc_0_comp_ff; extern compop_func op_e000_0_comp_ff; extern compop_func op_e008_0_comp_ff; extern compop_func op_e018_0_comp_ff; extern compop_func op_e020_0_comp_ff; extern compop_func op_e028_0_comp_ff; extern compop_func op_e038_0_comp_ff; extern compop_func op_e040_0_comp_ff; extern compop_func op_e048_0_comp_ff; extern compop_func op_e058_0_comp_ff; extern compop_func op_e060_0_comp_ff; extern compop_func op_e068_0_comp_ff; extern compop_func op_e078_0_comp_ff; extern compop_func op_e080_0_comp_ff; extern compop_func op_e088_0_comp_ff; extern compop_func op_e098_0_comp_ff; extern compop_func op_e0a0_0_comp_ff; extern compop_func op_e0a8_0_comp_ff; extern compop_func op_e0b8_0_comp_ff; extern compop_func op_e100_0_comp_ff; extern compop_func op_e108_0_comp_ff; extern compop_func op_e118_0_comp_ff; extern compop_func op_e120_0_comp_ff; extern compop_func op_e128_0_comp_ff; extern compop_func op_e138_0_comp_ff; extern compop_func op_e140_0_comp_ff; extern compop_func op_e148_0_comp_ff; extern compop_func op_e158_0_comp_ff; extern compop_func op_e160_0_comp_ff; extern compop_func op_e168_0_comp_ff; extern compop_func op_e178_0_comp_ff; extern compop_func op_e180_0_comp_ff; extern compop_func op_e188_0_comp_ff; extern compop_func op_e198_0_comp_ff; extern compop_func op_e1a0_0_comp_ff; extern compop_func op_e1a8_0_comp_ff; extern compop_func op_e1b8_0_comp_ff; extern compop_func op_f200_0_comp_ff; extern compop_func op_f208_0_comp_ff; extern compop_func op_f210_0_comp_ff; extern compop_func op_f218_0_comp_ff; extern compop_func op_f220_0_comp_ff; extern compop_func op_f228_0_comp_ff; extern compop_func op_f230_0_comp_ff; extern compop_func op_f238_0_comp_ff; extern compop_func op_f239_0_comp_ff; extern compop_func op_f23a_0_comp_ff; extern compop_func op_f23b_0_comp_ff; extern compop_func op_f23c_0_comp_ff; extern compop_func op_f240_0_comp_ff; extern compop_func op_f250_0_comp_ff; extern compop_func op_f258_0_comp_ff; extern compop_func op_f260_0_comp_ff; extern compop_func op_f268_0_comp_ff; extern compop_func op_f270_0_comp_ff; extern compop_func op_f278_0_comp_ff; extern compop_func op_f279_0_comp_ff; extern compop_func op_f280_0_comp_ff; extern compop_func op_f2c0_0_comp_ff; extern compop_func op_f600_0_comp_ff; extern compop_func op_f608_0_comp_ff; extern compop_func op_f610_0_comp_ff; extern compop_func op_f618_0_comp_ff; extern compop_func op_f620_0_comp_ff; extern compop_func op_0_0_comp_nf; extern compop_func op_10_0_comp_nf; extern compop_func op_18_0_comp_nf; extern compop_func op_20_0_comp_nf; extern compop_func op_28_0_comp_nf; extern compop_func op_30_0_comp_nf; extern compop_func op_38_0_comp_nf; extern compop_func op_39_0_comp_nf; extern compop_func op_40_0_comp_nf; extern compop_func op_50_0_comp_nf; extern compop_func op_58_0_comp_nf; extern compop_func op_60_0_comp_nf; extern compop_func op_68_0_comp_nf; extern compop_func op_70_0_comp_nf; extern compop_func op_78_0_comp_nf; extern compop_func op_79_0_comp_nf; extern compop_func op_80_0_comp_nf; extern compop_func op_90_0_comp_nf; extern compop_func op_98_0_comp_nf; extern compop_func op_a0_0_comp_nf; extern compop_func op_a8_0_comp_nf; extern compop_func op_b0_0_comp_nf; extern compop_func op_b8_0_comp_nf; extern compop_func op_b9_0_comp_nf; extern compop_func op_100_0_comp_nf; extern compop_func op_110_0_comp_nf; extern compop_func op_118_0_comp_nf; extern compop_func op_120_0_comp_nf; extern compop_func op_128_0_comp_nf; extern compop_func op_130_0_comp_nf; extern compop_func op_138_0_comp_nf; extern compop_func op_139_0_comp_nf; extern compop_func op_13a_0_comp_nf; extern compop_func op_13b_0_comp_nf; extern compop_func op_13c_0_comp_nf; extern compop_func op_140_0_comp_nf; extern compop_func op_150_0_comp_nf; extern compop_func op_158_0_comp_nf; extern compop_func op_160_0_comp_nf; extern compop_func op_168_0_comp_nf; extern compop_func op_170_0_comp_nf; extern compop_func op_178_0_comp_nf; extern compop_func op_179_0_comp_nf; extern compop_func op_17a_0_comp_nf; extern compop_func op_17b_0_comp_nf; extern compop_func op_180_0_comp_nf; extern compop_func op_190_0_comp_nf; extern compop_func op_198_0_comp_nf; extern compop_func op_1a0_0_comp_nf; extern compop_func op_1a8_0_comp_nf; extern compop_func op_1b0_0_comp_nf; extern compop_func op_1b8_0_comp_nf; extern compop_func op_1b9_0_comp_nf; extern compop_func op_1ba_0_comp_nf; extern compop_func op_1bb_0_comp_nf; extern compop_func op_1c0_0_comp_nf; extern compop_func op_1d0_0_comp_nf; extern compop_func op_1d8_0_comp_nf; extern compop_func op_1e0_0_comp_nf; extern compop_func op_1e8_0_comp_nf; extern compop_func op_1f0_0_comp_nf; extern compop_func op_1f8_0_comp_nf; extern compop_func op_1f9_0_comp_nf; extern compop_func op_1fa_0_comp_nf; extern compop_func op_1fb_0_comp_nf; extern compop_func op_200_0_comp_nf; extern compop_func op_210_0_comp_nf; extern compop_func op_218_0_comp_nf; extern compop_func op_220_0_comp_nf; extern compop_func op_228_0_comp_nf; extern compop_func op_230_0_comp_nf; extern compop_func op_238_0_comp_nf; extern compop_func op_239_0_comp_nf; extern compop_func op_240_0_comp_nf; extern compop_func op_250_0_comp_nf; extern compop_func op_258_0_comp_nf; extern compop_func op_260_0_comp_nf; extern compop_func op_268_0_comp_nf; extern compop_func op_270_0_comp_nf; extern compop_func op_278_0_comp_nf; extern compop_func op_279_0_comp_nf; extern compop_func op_280_0_comp_nf; extern compop_func op_290_0_comp_nf; extern compop_func op_298_0_comp_nf; extern compop_func op_2a0_0_comp_nf; extern compop_func op_2a8_0_comp_nf; extern compop_func op_2b0_0_comp_nf; extern compop_func op_2b8_0_comp_nf; extern compop_func op_2b9_0_comp_nf; extern compop_func op_400_0_comp_nf; extern compop_func op_410_0_comp_nf; extern compop_func op_418_0_comp_nf; extern compop_func op_420_0_comp_nf; extern compop_func op_428_0_comp_nf; extern compop_func op_430_0_comp_nf; extern compop_func op_438_0_comp_nf; extern compop_func op_439_0_comp_nf; extern compop_func op_440_0_comp_nf; extern compop_func op_450_0_comp_nf; extern compop_func op_458_0_comp_nf; extern compop_func op_460_0_comp_nf; extern compop_func op_468_0_comp_nf; extern compop_func op_470_0_comp_nf; extern compop_func op_478_0_comp_nf; extern compop_func op_479_0_comp_nf; extern compop_func op_480_0_comp_nf; extern compop_func op_490_0_comp_nf; extern compop_func op_498_0_comp_nf; extern compop_func op_4a0_0_comp_nf; extern compop_func op_4a8_0_comp_nf; extern compop_func op_4b0_0_comp_nf; extern compop_func op_4b8_0_comp_nf; extern compop_func op_4b9_0_comp_nf; extern compop_func op_600_0_comp_nf; extern compop_func op_610_0_comp_nf; extern compop_func op_618_0_comp_nf; extern compop_func op_620_0_comp_nf; extern compop_func op_628_0_comp_nf; extern compop_func op_630_0_comp_nf; extern compop_func op_638_0_comp_nf; extern compop_func op_639_0_comp_nf; extern compop_func op_640_0_comp_nf; extern compop_func op_650_0_comp_nf; extern compop_func op_658_0_comp_nf; extern compop_func op_660_0_comp_nf; extern compop_func op_668_0_comp_nf; extern compop_func op_670_0_comp_nf; extern compop_func op_678_0_comp_nf; extern compop_func op_679_0_comp_nf; extern compop_func op_680_0_comp_nf; extern compop_func op_690_0_comp_nf; extern compop_func op_698_0_comp_nf; extern compop_func op_6a0_0_comp_nf; extern compop_func op_6a8_0_comp_nf; extern compop_func op_6b0_0_comp_nf; extern compop_func op_6b8_0_comp_nf; extern compop_func op_6b9_0_comp_nf; extern compop_func op_800_0_comp_nf; extern compop_func op_810_0_comp_nf; extern compop_func op_818_0_comp_nf; extern compop_func op_820_0_comp_nf; extern compop_func op_828_0_comp_nf; extern compop_func op_830_0_comp_nf; extern compop_func op_838_0_comp_nf; extern compop_func op_839_0_comp_nf; extern compop_func op_83a_0_comp_nf; extern compop_func op_83b_0_comp_nf; extern compop_func op_83c_0_comp_nf; extern compop_func op_840_0_comp_nf; extern compop_func op_850_0_comp_nf; extern compop_func op_858_0_comp_nf; extern compop_func op_860_0_comp_nf; extern compop_func op_868_0_comp_nf; extern compop_func op_870_0_comp_nf; extern compop_func op_878_0_comp_nf; extern compop_func op_879_0_comp_nf; extern compop_func op_87a_0_comp_nf; extern compop_func op_87b_0_comp_nf; extern compop_func op_880_0_comp_nf; extern compop_func op_890_0_comp_nf; extern compop_func op_898_0_comp_nf; extern compop_func op_8a0_0_comp_nf; extern compop_func op_8a8_0_comp_nf; extern compop_func op_8b0_0_comp_nf; extern compop_func op_8b8_0_comp_nf; extern compop_func op_8b9_0_comp_nf; extern compop_func op_8ba_0_comp_nf; extern compop_func op_8bb_0_comp_nf; extern compop_func op_8c0_0_comp_nf; extern compop_func op_8d0_0_comp_nf; extern compop_func op_8d8_0_comp_nf; extern compop_func op_8e0_0_comp_nf; extern compop_func op_8e8_0_comp_nf; extern compop_func op_8f0_0_comp_nf; extern compop_func op_8f8_0_comp_nf; extern compop_func op_8f9_0_comp_nf; extern compop_func op_8fa_0_comp_nf; extern compop_func op_8fb_0_comp_nf; extern compop_func op_a00_0_comp_nf; extern compop_func op_a10_0_comp_nf; extern compop_func op_a18_0_comp_nf; extern compop_func op_a20_0_comp_nf; extern compop_func op_a28_0_comp_nf; extern compop_func op_a30_0_comp_nf; extern compop_func op_a38_0_comp_nf; extern compop_func op_a39_0_comp_nf; extern compop_func op_a40_0_comp_nf; extern compop_func op_a50_0_comp_nf; extern compop_func op_a58_0_comp_nf; extern compop_func op_a60_0_comp_nf; extern compop_func op_a68_0_comp_nf; extern compop_func op_a70_0_comp_nf; extern compop_func op_a78_0_comp_nf; extern compop_func op_a79_0_comp_nf; extern compop_func op_a80_0_comp_nf; extern compop_func op_a90_0_comp_nf; extern compop_func op_a98_0_comp_nf; extern compop_func op_aa0_0_comp_nf; extern compop_func op_aa8_0_comp_nf; extern compop_func op_ab0_0_comp_nf; extern compop_func op_ab8_0_comp_nf; extern compop_func op_ab9_0_comp_nf; extern compop_func op_c00_0_comp_nf; extern compop_func op_c10_0_comp_nf; extern compop_func op_c18_0_comp_nf; extern compop_func op_c20_0_comp_nf; extern compop_func op_c28_0_comp_nf; extern compop_func op_c30_0_comp_nf; extern compop_func op_c38_0_comp_nf; extern compop_func op_c39_0_comp_nf; extern compop_func op_c3a_0_comp_nf; extern compop_func op_c3b_0_comp_nf; extern compop_func op_c40_0_comp_nf; extern compop_func op_c50_0_comp_nf; extern compop_func op_c58_0_comp_nf; extern compop_func op_c60_0_comp_nf; extern compop_func op_c68_0_comp_nf; extern compop_func op_c70_0_comp_nf; extern compop_func op_c78_0_comp_nf; extern compop_func op_c79_0_comp_nf; extern compop_func op_c7a_0_comp_nf; extern compop_func op_c7b_0_comp_nf; extern compop_func op_c80_0_comp_nf; extern compop_func op_c90_0_comp_nf; extern compop_func op_c98_0_comp_nf; extern compop_func op_ca0_0_comp_nf; extern compop_func op_ca8_0_comp_nf; extern compop_func op_cb0_0_comp_nf; extern compop_func op_cb8_0_comp_nf; extern compop_func op_cb9_0_comp_nf; extern compop_func op_cba_0_comp_nf; extern compop_func op_cbb_0_comp_nf; extern compop_func op_1000_0_comp_nf; extern compop_func op_1010_0_comp_nf; extern compop_func op_1018_0_comp_nf; extern compop_func op_1020_0_comp_nf; extern compop_func op_1028_0_comp_nf; extern compop_func op_1030_0_comp_nf; extern compop_func op_1038_0_comp_nf; extern compop_func op_1039_0_comp_nf; extern compop_func op_103a_0_comp_nf; extern compop_func op_103b_0_comp_nf; extern compop_func op_103c_0_comp_nf; extern compop_func op_1080_0_comp_nf; extern compop_func op_1090_0_comp_nf; extern compop_func op_1098_0_comp_nf; extern compop_func op_10a0_0_comp_nf; extern compop_func op_10a8_0_comp_nf; extern compop_func op_10b0_0_comp_nf; extern compop_func op_10b8_0_comp_nf; extern compop_func op_10b9_0_comp_nf; extern compop_func op_10ba_0_comp_nf; extern compop_func op_10bb_0_comp_nf; extern compop_func op_10bc_0_comp_nf; extern compop_func op_10c0_0_comp_nf; extern compop_func op_10d0_0_comp_nf; extern compop_func op_10d8_0_comp_nf; extern compop_func op_10e0_0_comp_nf; extern compop_func op_10e8_0_comp_nf; extern compop_func op_10f0_0_comp_nf; extern compop_func op_10f8_0_comp_nf; extern compop_func op_10f9_0_comp_nf; extern compop_func op_10fa_0_comp_nf; extern compop_func op_10fb_0_comp_nf; extern compop_func op_10fc_0_comp_nf; extern compop_func op_1100_0_comp_nf; extern compop_func op_1110_0_comp_nf; extern compop_func op_1118_0_comp_nf; extern compop_func op_1120_0_comp_nf; extern compop_func op_1128_0_comp_nf; extern compop_func op_1130_0_comp_nf; extern compop_func op_1138_0_comp_nf; extern compop_func op_1139_0_comp_nf; extern compop_func op_113a_0_comp_nf; extern compop_func op_113b_0_comp_nf; extern compop_func op_113c_0_comp_nf; extern compop_func op_1140_0_comp_nf; extern compop_func op_1150_0_comp_nf; extern compop_func op_1158_0_comp_nf; extern compop_func op_1160_0_comp_nf; extern compop_func op_1168_0_comp_nf; extern compop_func op_1170_0_comp_nf; extern compop_func op_1178_0_comp_nf; extern compop_func op_1179_0_comp_nf; extern compop_func op_117a_0_comp_nf; extern compop_func op_117b_0_comp_nf; extern compop_func op_117c_0_comp_nf; extern compop_func op_1180_0_comp_nf; extern compop_func op_1190_0_comp_nf; extern compop_func op_1198_0_comp_nf; extern compop_func op_11a0_0_comp_nf; extern compop_func op_11a8_0_comp_nf; extern compop_func op_11b0_0_comp_nf; extern compop_func op_11b8_0_comp_nf; extern compop_func op_11b9_0_comp_nf; extern compop_func op_11ba_0_comp_nf; extern compop_func op_11bb_0_comp_nf; extern compop_func op_11bc_0_comp_nf; extern compop_func op_11c0_0_comp_nf; extern compop_func op_11d0_0_comp_nf; extern compop_func op_11d8_0_comp_nf; extern compop_func op_11e0_0_comp_nf; extern compop_func op_11e8_0_comp_nf; extern compop_func op_11f0_0_comp_nf; extern compop_func op_11f8_0_comp_nf; extern compop_func op_11f9_0_comp_nf; extern compop_func op_11fa_0_comp_nf; extern compop_func op_11fb_0_comp_nf; extern compop_func op_11fc_0_comp_nf; extern compop_func op_13c0_0_comp_nf; extern compop_func op_13d0_0_comp_nf; extern compop_func op_13d8_0_comp_nf; extern compop_func op_13e0_0_comp_nf; extern compop_func op_13e8_0_comp_nf; extern compop_func op_13f0_0_comp_nf; extern compop_func op_13f8_0_comp_nf; extern compop_func op_13f9_0_comp_nf; extern compop_func op_13fa_0_comp_nf; extern compop_func op_13fb_0_comp_nf; extern compop_func op_13fc_0_comp_nf; extern compop_func op_2000_0_comp_nf; extern compop_func op_2008_0_comp_nf; extern compop_func op_2010_0_comp_nf; extern compop_func op_2018_0_comp_nf; extern compop_func op_2020_0_comp_nf; extern compop_func op_2028_0_comp_nf; extern compop_func op_2030_0_comp_nf; extern compop_func op_2038_0_comp_nf; extern compop_func op_2039_0_comp_nf; extern compop_func op_203a_0_comp_nf; extern compop_func op_203b_0_comp_nf; extern compop_func op_203c_0_comp_nf; extern compop_func op_2040_0_comp_nf; extern compop_func op_2048_0_comp_nf; extern compop_func op_2050_0_comp_nf; extern compop_func op_2058_0_comp_nf; extern compop_func op_2060_0_comp_nf; extern compop_func op_2068_0_comp_nf; extern compop_func op_2070_0_comp_nf; extern compop_func op_2078_0_comp_nf; extern compop_func op_2079_0_comp_nf; extern compop_func op_207a_0_comp_nf; extern compop_func op_207b_0_comp_nf; extern compop_func op_207c_0_comp_nf; extern compop_func op_2080_0_comp_nf; extern compop_func op_2088_0_comp_nf; extern compop_func op_2090_0_comp_nf; extern compop_func op_2098_0_comp_nf; extern compop_func op_20a0_0_comp_nf; extern compop_func op_20a8_0_comp_nf; extern compop_func op_20b0_0_comp_nf; extern compop_func op_20b8_0_comp_nf; extern compop_func op_20b9_0_comp_nf; extern compop_func op_20ba_0_comp_nf; extern compop_func op_20bb_0_comp_nf; extern compop_func op_20bc_0_comp_nf; extern compop_func op_20c0_0_comp_nf; extern compop_func op_20c8_0_comp_nf; extern compop_func op_20d0_0_comp_nf; extern compop_func op_20d8_0_comp_nf; extern compop_func op_20e0_0_comp_nf; extern compop_func op_20e8_0_comp_nf; extern compop_func op_20f0_0_comp_nf; extern compop_func op_20f8_0_comp_nf; extern compop_func op_20f9_0_comp_nf; extern compop_func op_20fa_0_comp_nf; extern compop_func op_20fb_0_comp_nf; extern compop_func op_20fc_0_comp_nf; extern compop_func op_2100_0_comp_nf; extern compop_func op_2108_0_comp_nf; extern compop_func op_2110_0_comp_nf; extern compop_func op_2118_0_comp_nf; extern compop_func op_2120_0_comp_nf; extern compop_func op_2128_0_comp_nf; extern compop_func op_2130_0_comp_nf; extern compop_func op_2138_0_comp_nf; extern compop_func op_2139_0_comp_nf; extern compop_func op_213a_0_comp_nf; extern compop_func op_213b_0_comp_nf; extern compop_func op_213c_0_comp_nf; extern compop_func op_2140_0_comp_nf; extern compop_func op_2148_0_comp_nf; extern compop_func op_2150_0_comp_nf; extern compop_func op_2158_0_comp_nf; extern compop_func op_2160_0_comp_nf; extern compop_func op_2168_0_comp_nf; extern compop_func op_2170_0_comp_nf; extern compop_func op_2178_0_comp_nf; extern compop_func op_2179_0_comp_nf; extern compop_func op_217a_0_comp_nf; extern compop_func op_217b_0_comp_nf; extern compop_func op_217c_0_comp_nf; extern compop_func op_2180_0_comp_nf; extern compop_func op_2188_0_comp_nf; extern compop_func op_2190_0_comp_nf; extern compop_func op_2198_0_comp_nf; extern compop_func op_21a0_0_comp_nf; extern compop_func op_21a8_0_comp_nf; extern compop_func op_21b0_0_comp_nf; extern compop_func op_21b8_0_comp_nf; extern compop_func op_21b9_0_comp_nf; extern compop_func op_21ba_0_comp_nf; extern compop_func op_21bb_0_comp_nf; extern compop_func op_21bc_0_comp_nf; extern compop_func op_21c0_0_comp_nf; extern compop_func op_21c8_0_comp_nf; extern compop_func op_21d0_0_comp_nf; extern compop_func op_21d8_0_comp_nf; extern compop_func op_21e0_0_comp_nf; extern compop_func op_21e8_0_comp_nf; extern compop_func op_21f0_0_comp_nf; extern compop_func op_21f8_0_comp_nf; extern compop_func op_21f9_0_comp_nf; extern compop_func op_21fa_0_comp_nf; extern compop_func op_21fb_0_comp_nf; extern compop_func op_21fc_0_comp_nf; extern compop_func op_23c0_0_comp_nf; extern compop_func op_23c8_0_comp_nf; extern compop_func op_23d0_0_comp_nf; extern compop_func op_23d8_0_comp_nf; extern compop_func op_23e0_0_comp_nf; extern compop_func op_23e8_0_comp_nf; extern compop_func op_23f0_0_comp_nf; extern compop_func op_23f8_0_comp_nf; extern compop_func op_23f9_0_comp_nf; extern compop_func op_23fa_0_comp_nf; extern compop_func op_23fb_0_comp_nf; extern compop_func op_23fc_0_comp_nf; extern compop_func op_3000_0_comp_nf; extern compop_func op_3008_0_comp_nf; extern compop_func op_3010_0_comp_nf; extern compop_func op_3018_0_comp_nf; extern compop_func op_3020_0_comp_nf; extern compop_func op_3028_0_comp_nf; extern compop_func op_3030_0_comp_nf; extern compop_func op_3038_0_comp_nf; extern compop_func op_3039_0_comp_nf; extern compop_func op_303a_0_comp_nf; extern compop_func op_303b_0_comp_nf; extern compop_func op_303c_0_comp_nf; extern compop_func op_3040_0_comp_nf; extern compop_func op_3048_0_comp_nf; extern compop_func op_3050_0_comp_nf; extern compop_func op_3058_0_comp_nf; extern compop_func op_3060_0_comp_nf; extern compop_func op_3068_0_comp_nf; extern compop_func op_3070_0_comp_nf; extern compop_func op_3078_0_comp_nf; extern compop_func op_3079_0_comp_nf; extern compop_func op_307a_0_comp_nf; extern compop_func op_307b_0_comp_nf; extern compop_func op_307c_0_comp_nf; extern compop_func op_3080_0_comp_nf; extern compop_func op_3088_0_comp_nf; extern compop_func op_3090_0_comp_nf; extern compop_func op_3098_0_comp_nf; extern compop_func op_30a0_0_comp_nf; extern compop_func op_30a8_0_comp_nf; extern compop_func op_30b0_0_comp_nf; extern compop_func op_30b8_0_comp_nf; extern compop_func op_30b9_0_comp_nf; extern compop_func op_30ba_0_comp_nf; extern compop_func op_30bb_0_comp_nf; extern compop_func op_30bc_0_comp_nf; extern compop_func op_30c0_0_comp_nf; extern compop_func op_30c8_0_comp_nf; extern compop_func op_30d0_0_comp_nf; extern compop_func op_30d8_0_comp_nf; extern compop_func op_30e0_0_comp_nf; extern compop_func op_30e8_0_comp_nf; extern compop_func op_30f0_0_comp_nf; extern compop_func op_30f8_0_comp_nf; extern compop_func op_30f9_0_comp_nf; extern compop_func op_30fa_0_comp_nf; extern compop_func op_30fb_0_comp_nf; extern compop_func op_30fc_0_comp_nf; extern compop_func op_3100_0_comp_nf; extern compop_func op_3108_0_comp_nf; extern compop_func op_3110_0_comp_nf; extern compop_func op_3118_0_comp_nf; extern compop_func op_3120_0_comp_nf; extern compop_func op_3128_0_comp_nf; extern compop_func op_3130_0_comp_nf; extern compop_func op_3138_0_comp_nf; extern compop_func op_3139_0_comp_nf; extern compop_func op_313a_0_comp_nf; extern compop_func op_313b_0_comp_nf; extern compop_func op_313c_0_comp_nf; extern compop_func op_3140_0_comp_nf; extern compop_func op_3148_0_comp_nf; extern compop_func op_3150_0_comp_nf; extern compop_func op_3158_0_comp_nf; extern compop_func op_3160_0_comp_nf; extern compop_func op_3168_0_comp_nf; extern compop_func op_3170_0_comp_nf; extern compop_func op_3178_0_comp_nf; extern compop_func op_3179_0_comp_nf; extern compop_func op_317a_0_comp_nf; extern compop_func op_317b_0_comp_nf; extern compop_func op_317c_0_comp_nf; extern compop_func op_3180_0_comp_nf; extern compop_func op_3188_0_comp_nf; extern compop_func op_3190_0_comp_nf; extern compop_func op_3198_0_comp_nf; extern compop_func op_31a0_0_comp_nf; extern compop_func op_31a8_0_comp_nf; extern compop_func op_31b0_0_comp_nf; extern compop_func op_31b8_0_comp_nf; extern compop_func op_31b9_0_comp_nf; extern compop_func op_31ba_0_comp_nf; extern compop_func op_31bb_0_comp_nf; extern compop_func op_31bc_0_comp_nf; extern compop_func op_31c0_0_comp_nf; extern compop_func op_31c8_0_comp_nf; extern compop_func op_31d0_0_comp_nf; extern compop_func op_31d8_0_comp_nf; extern compop_func op_31e0_0_comp_nf; extern compop_func op_31e8_0_comp_nf; extern compop_func op_31f0_0_comp_nf; extern compop_func op_31f8_0_comp_nf; extern compop_func op_31f9_0_comp_nf; extern compop_func op_31fa_0_comp_nf; extern compop_func op_31fb_0_comp_nf; extern compop_func op_31fc_0_comp_nf; extern compop_func op_33c0_0_comp_nf; extern compop_func op_33c8_0_comp_nf; extern compop_func op_33d0_0_comp_nf; extern compop_func op_33d8_0_comp_nf; extern compop_func op_33e0_0_comp_nf; extern compop_func op_33e8_0_comp_nf; extern compop_func op_33f0_0_comp_nf; extern compop_func op_33f8_0_comp_nf; extern compop_func op_33f9_0_comp_nf; extern compop_func op_33fa_0_comp_nf; extern compop_func op_33fb_0_comp_nf; extern compop_func op_33fc_0_comp_nf; extern compop_func op_4000_0_comp_nf; extern compop_func op_4010_0_comp_nf; extern compop_func op_4018_0_comp_nf; extern compop_func op_4020_0_comp_nf; extern compop_func op_4028_0_comp_nf; extern compop_func op_4030_0_comp_nf; extern compop_func op_4038_0_comp_nf; extern compop_func op_4039_0_comp_nf; extern compop_func op_4040_0_comp_nf; extern compop_func op_4050_0_comp_nf; extern compop_func op_4058_0_comp_nf; extern compop_func op_4060_0_comp_nf; extern compop_func op_4068_0_comp_nf; extern compop_func op_4070_0_comp_nf; extern compop_func op_4078_0_comp_nf; extern compop_func op_4079_0_comp_nf; extern compop_func op_4080_0_comp_nf; extern compop_func op_4090_0_comp_nf; extern compop_func op_4098_0_comp_nf; extern compop_func op_40a0_0_comp_nf; extern compop_func op_40a8_0_comp_nf; extern compop_func op_40b0_0_comp_nf; extern compop_func op_40b8_0_comp_nf; extern compop_func op_40b9_0_comp_nf; extern compop_func op_41d0_0_comp_nf; extern compop_func op_41e8_0_comp_nf; extern compop_func op_41f0_0_comp_nf; extern compop_func op_41f8_0_comp_nf; extern compop_func op_41f9_0_comp_nf; extern compop_func op_41fa_0_comp_nf; extern compop_func op_41fb_0_comp_nf; extern compop_func op_4200_0_comp_nf; extern compop_func op_4210_0_comp_nf; extern compop_func op_4218_0_comp_nf; extern compop_func op_4220_0_comp_nf; extern compop_func op_4228_0_comp_nf; extern compop_func op_4230_0_comp_nf; extern compop_func op_4238_0_comp_nf; extern compop_func op_4239_0_comp_nf; extern compop_func op_4240_0_comp_nf; extern compop_func op_4250_0_comp_nf; extern compop_func op_4258_0_comp_nf; extern compop_func op_4260_0_comp_nf; extern compop_func op_4268_0_comp_nf; extern compop_func op_4270_0_comp_nf; extern compop_func op_4278_0_comp_nf; extern compop_func op_4279_0_comp_nf; extern compop_func op_4280_0_comp_nf; extern compop_func op_4290_0_comp_nf; extern compop_func op_4298_0_comp_nf; extern compop_func op_42a0_0_comp_nf; extern compop_func op_42a8_0_comp_nf; extern compop_func op_42b0_0_comp_nf; extern compop_func op_42b8_0_comp_nf; extern compop_func op_42b9_0_comp_nf; extern compop_func op_4400_0_comp_nf; extern compop_func op_4410_0_comp_nf; extern compop_func op_4418_0_comp_nf; extern compop_func op_4420_0_comp_nf; extern compop_func op_4428_0_comp_nf; extern compop_func op_4430_0_comp_nf; extern compop_func op_4438_0_comp_nf; extern compop_func op_4439_0_comp_nf; extern compop_func op_4440_0_comp_nf; extern compop_func op_4450_0_comp_nf; extern compop_func op_4458_0_comp_nf; extern compop_func op_4460_0_comp_nf; extern compop_func op_4468_0_comp_nf; extern compop_func op_4470_0_comp_nf; extern compop_func op_4478_0_comp_nf; extern compop_func op_4479_0_comp_nf; extern compop_func op_4480_0_comp_nf; extern compop_func op_4490_0_comp_nf; extern compop_func op_4498_0_comp_nf; extern compop_func op_44a0_0_comp_nf; extern compop_func op_44a8_0_comp_nf; extern compop_func op_44b0_0_comp_nf; extern compop_func op_44b8_0_comp_nf; extern compop_func op_44b9_0_comp_nf; extern compop_func op_4600_0_comp_nf; extern compop_func op_4610_0_comp_nf; extern compop_func op_4618_0_comp_nf; extern compop_func op_4620_0_comp_nf; extern compop_func op_4628_0_comp_nf; extern compop_func op_4630_0_comp_nf; extern compop_func op_4638_0_comp_nf; extern compop_func op_4639_0_comp_nf; extern compop_func op_4640_0_comp_nf; extern compop_func op_4650_0_comp_nf; extern compop_func op_4658_0_comp_nf; extern compop_func op_4660_0_comp_nf; extern compop_func op_4668_0_comp_nf; extern compop_func op_4670_0_comp_nf; extern compop_func op_4678_0_comp_nf; extern compop_func op_4679_0_comp_nf; extern compop_func op_4680_0_comp_nf; extern compop_func op_4690_0_comp_nf; extern compop_func op_4698_0_comp_nf; extern compop_func op_46a0_0_comp_nf; extern compop_func op_46a8_0_comp_nf; extern compop_func op_46b0_0_comp_nf; extern compop_func op_46b8_0_comp_nf; extern compop_func op_46b9_0_comp_nf; extern compop_func op_4808_0_comp_nf; extern compop_func op_4840_0_comp_nf; extern compop_func op_4850_0_comp_nf; extern compop_func op_4868_0_comp_nf; extern compop_func op_4870_0_comp_nf; extern compop_func op_4878_0_comp_nf; extern compop_func op_4879_0_comp_nf; extern compop_func op_487a_0_comp_nf; extern compop_func op_487b_0_comp_nf; extern compop_func op_4880_0_comp_nf; extern compop_func op_4890_0_comp_nf; extern compop_func op_48a0_0_comp_nf; extern compop_func op_48a8_0_comp_nf; extern compop_func op_48b0_0_comp_nf; extern compop_func op_48b8_0_comp_nf; extern compop_func op_48b9_0_comp_nf; extern compop_func op_48c0_0_comp_nf; extern compop_func op_48d0_0_comp_nf; extern compop_func op_48e0_0_comp_nf; extern compop_func op_48e8_0_comp_nf; extern compop_func op_48f0_0_comp_nf; extern compop_func op_48f8_0_comp_nf; extern compop_func op_48f9_0_comp_nf; extern compop_func op_49c0_0_comp_nf; extern compop_func op_4a00_0_comp_nf; extern compop_func op_4a10_0_comp_nf; extern compop_func op_4a18_0_comp_nf; extern compop_func op_4a20_0_comp_nf; extern compop_func op_4a28_0_comp_nf; extern compop_func op_4a30_0_comp_nf; extern compop_func op_4a38_0_comp_nf; extern compop_func op_4a39_0_comp_nf; extern compop_func op_4a3a_0_comp_nf; extern compop_func op_4a3b_0_comp_nf; extern compop_func op_4a3c_0_comp_nf; extern compop_func op_4a40_0_comp_nf; extern compop_func op_4a48_0_comp_nf; extern compop_func op_4a50_0_comp_nf; extern compop_func op_4a58_0_comp_nf; extern compop_func op_4a60_0_comp_nf; extern compop_func op_4a68_0_comp_nf; extern compop_func op_4a70_0_comp_nf; extern compop_func op_4a78_0_comp_nf; extern compop_func op_4a79_0_comp_nf; extern compop_func op_4a7a_0_comp_nf; extern compop_func op_4a7b_0_comp_nf; extern compop_func op_4a7c_0_comp_nf; extern compop_func op_4a80_0_comp_nf; extern compop_func op_4a88_0_comp_nf; extern compop_func op_4a90_0_comp_nf; extern compop_func op_4a98_0_comp_nf; extern compop_func op_4aa0_0_comp_nf; extern compop_func op_4aa8_0_comp_nf; extern compop_func op_4ab0_0_comp_nf; extern compop_func op_4ab8_0_comp_nf; extern compop_func op_4ab9_0_comp_nf; extern compop_func op_4aba_0_comp_nf; extern compop_func op_4abb_0_comp_nf; extern compop_func op_4abc_0_comp_nf; extern compop_func op_4c00_0_comp_nf; extern compop_func op_4c10_0_comp_nf; extern compop_func op_4c18_0_comp_nf; extern compop_func op_4c20_0_comp_nf; extern compop_func op_4c28_0_comp_nf; extern compop_func op_4c30_0_comp_nf; extern compop_func op_4c38_0_comp_nf; extern compop_func op_4c39_0_comp_nf; extern compop_func op_4c3a_0_comp_nf; extern compop_func op_4c3b_0_comp_nf; extern compop_func op_4c3c_0_comp_nf; extern compop_func op_4c90_0_comp_nf; extern compop_func op_4c98_0_comp_nf; extern compop_func op_4ca8_0_comp_nf; extern compop_func op_4cb0_0_comp_nf; extern compop_func op_4cb8_0_comp_nf; extern compop_func op_4cb9_0_comp_nf; extern compop_func op_4cba_0_comp_nf; extern compop_func op_4cbb_0_comp_nf; extern compop_func op_4cd0_0_comp_nf; extern compop_func op_4cd8_0_comp_nf; extern compop_func op_4ce8_0_comp_nf; extern compop_func op_4cf0_0_comp_nf; extern compop_func op_4cf8_0_comp_nf; extern compop_func op_4cf9_0_comp_nf; extern compop_func op_4cfa_0_comp_nf; extern compop_func op_4cfb_0_comp_nf; extern compop_func op_4e50_0_comp_nf; extern compop_func op_4e58_0_comp_nf; extern compop_func op_4e71_0_comp_nf; extern compop_func op_4e74_0_comp_nf; extern compop_func op_4e75_0_comp_nf; extern compop_func op_4e90_0_comp_nf; extern compop_func op_4ea8_0_comp_nf; extern compop_func op_4eb0_0_comp_nf; extern compop_func op_4eb8_0_comp_nf; extern compop_func op_4eb9_0_comp_nf; extern compop_func op_4eba_0_comp_nf; extern compop_func op_4ebb_0_comp_nf; extern compop_func op_4ed0_0_comp_nf; extern compop_func op_4ee8_0_comp_nf; extern compop_func op_4ef0_0_comp_nf; extern compop_func op_4ef8_0_comp_nf; extern compop_func op_4ef9_0_comp_nf; extern compop_func op_4efa_0_comp_nf; extern compop_func op_4efb_0_comp_nf; extern compop_func op_5000_0_comp_nf; extern compop_func op_5010_0_comp_nf; extern compop_func op_5018_0_comp_nf; extern compop_func op_5020_0_comp_nf; extern compop_func op_5028_0_comp_nf; extern compop_func op_5030_0_comp_nf; extern compop_func op_5038_0_comp_nf; extern compop_func op_5039_0_comp_nf; extern compop_func op_5040_0_comp_nf; extern compop_func op_5048_0_comp_nf; extern compop_func op_5050_0_comp_nf; extern compop_func op_5058_0_comp_nf; extern compop_func op_5060_0_comp_nf; extern compop_func op_5068_0_comp_nf; extern compop_func op_5070_0_comp_nf; extern compop_func op_5078_0_comp_nf; extern compop_func op_5079_0_comp_nf; extern compop_func op_5080_0_comp_nf; extern compop_func op_5088_0_comp_nf; extern compop_func op_5090_0_comp_nf; extern compop_func op_5098_0_comp_nf; extern compop_func op_50a0_0_comp_nf; extern compop_func op_50a8_0_comp_nf; extern compop_func op_50b0_0_comp_nf; extern compop_func op_50b8_0_comp_nf; extern compop_func op_50b9_0_comp_nf; extern compop_func op_50c0_0_comp_nf; extern compop_func op_50c8_0_comp_nf; extern compop_func op_50d0_0_comp_nf; extern compop_func op_50d8_0_comp_nf; extern compop_func op_50e0_0_comp_nf; extern compop_func op_50e8_0_comp_nf; extern compop_func op_50f0_0_comp_nf; extern compop_func op_50f8_0_comp_nf; extern compop_func op_50f9_0_comp_nf; extern compop_func op_5100_0_comp_nf; extern compop_func op_5110_0_comp_nf; extern compop_func op_5118_0_comp_nf; extern compop_func op_5120_0_comp_nf; extern compop_func op_5128_0_comp_nf; extern compop_func op_5130_0_comp_nf; extern compop_func op_5138_0_comp_nf; extern compop_func op_5139_0_comp_nf; extern compop_func op_5140_0_comp_nf; extern compop_func op_5148_0_comp_nf; extern compop_func op_5150_0_comp_nf; extern compop_func op_5158_0_comp_nf; extern compop_func op_5160_0_comp_nf; extern compop_func op_5168_0_comp_nf; extern compop_func op_5170_0_comp_nf; extern compop_func op_5178_0_comp_nf; extern compop_func op_5179_0_comp_nf; extern compop_func op_5180_0_comp_nf; extern compop_func op_5188_0_comp_nf; extern compop_func op_5190_0_comp_nf; extern compop_func op_5198_0_comp_nf; extern compop_func op_51a0_0_comp_nf; extern compop_func op_51a8_0_comp_nf; extern compop_func op_51b0_0_comp_nf; extern compop_func op_51b8_0_comp_nf; extern compop_func op_51b9_0_comp_nf; extern compop_func op_51c0_0_comp_nf; extern compop_func op_51c8_0_comp_nf; extern compop_func op_51d0_0_comp_nf; extern compop_func op_51d8_0_comp_nf; extern compop_func op_51e0_0_comp_nf; extern compop_func op_51e8_0_comp_nf; extern compop_func op_51f0_0_comp_nf; extern compop_func op_51f8_0_comp_nf; extern compop_func op_51f9_0_comp_nf; extern compop_func op_52c0_0_comp_nf; extern compop_func op_52c8_0_comp_nf; extern compop_func op_52d0_0_comp_nf; extern compop_func op_52d8_0_comp_nf; extern compop_func op_52e0_0_comp_nf; extern compop_func op_52e8_0_comp_nf; extern compop_func op_52f0_0_comp_nf; extern compop_func op_52f8_0_comp_nf; extern compop_func op_52f9_0_comp_nf; extern compop_func op_53c0_0_comp_nf; extern compop_func op_53c8_0_comp_nf; extern compop_func op_53d0_0_comp_nf; extern compop_func op_53d8_0_comp_nf; extern compop_func op_53e0_0_comp_nf; extern compop_func op_53e8_0_comp_nf; extern compop_func op_53f0_0_comp_nf; extern compop_func op_53f8_0_comp_nf; extern compop_func op_53f9_0_comp_nf; extern compop_func op_54c0_0_comp_nf; extern compop_func op_54c8_0_comp_nf; extern compop_func op_54d0_0_comp_nf; extern compop_func op_54d8_0_comp_nf; extern compop_func op_54e0_0_comp_nf; extern compop_func op_54e8_0_comp_nf; extern compop_func op_54f0_0_comp_nf; extern compop_func op_54f8_0_comp_nf; extern compop_func op_54f9_0_comp_nf; extern compop_func op_55c0_0_comp_nf; extern compop_func op_55c8_0_comp_nf; extern compop_func op_55d0_0_comp_nf; extern compop_func op_55d8_0_comp_nf; extern compop_func op_55e0_0_comp_nf; extern compop_func op_55e8_0_comp_nf; extern compop_func op_55f0_0_comp_nf; extern compop_func op_55f8_0_comp_nf; extern compop_func op_55f9_0_comp_nf; extern compop_func op_56c0_0_comp_nf; extern compop_func op_56c8_0_comp_nf; extern compop_func op_56d0_0_comp_nf; extern compop_func op_56d8_0_comp_nf; extern compop_func op_56e0_0_comp_nf; extern compop_func op_56e8_0_comp_nf; extern compop_func op_56f0_0_comp_nf; extern compop_func op_56f8_0_comp_nf; extern compop_func op_56f9_0_comp_nf; extern compop_func op_57c0_0_comp_nf; extern compop_func op_57c8_0_comp_nf; extern compop_func op_57d0_0_comp_nf; extern compop_func op_57d8_0_comp_nf; extern compop_func op_57e0_0_comp_nf; extern compop_func op_57e8_0_comp_nf; extern compop_func op_57f0_0_comp_nf; extern compop_func op_57f8_0_comp_nf; extern compop_func op_57f9_0_comp_nf; extern compop_func op_5ac0_0_comp_nf; extern compop_func op_5ac8_0_comp_nf; extern compop_func op_5ad0_0_comp_nf; extern compop_func op_5ad8_0_comp_nf; extern compop_func op_5ae0_0_comp_nf; extern compop_func op_5ae8_0_comp_nf; extern compop_func op_5af0_0_comp_nf; extern compop_func op_5af8_0_comp_nf; extern compop_func op_5af9_0_comp_nf; extern compop_func op_5bc0_0_comp_nf; extern compop_func op_5bc8_0_comp_nf; extern compop_func op_5bd0_0_comp_nf; extern compop_func op_5bd8_0_comp_nf; extern compop_func op_5be0_0_comp_nf; extern compop_func op_5be8_0_comp_nf; extern compop_func op_5bf0_0_comp_nf; extern compop_func op_5bf8_0_comp_nf; extern compop_func op_5bf9_0_comp_nf; extern compop_func op_5cc0_0_comp_nf; extern compop_func op_5cc8_0_comp_nf; extern compop_func op_5cd0_0_comp_nf; extern compop_func op_5cd8_0_comp_nf; extern compop_func op_5ce0_0_comp_nf; extern compop_func op_5ce8_0_comp_nf; extern compop_func op_5cf0_0_comp_nf; extern compop_func op_5cf8_0_comp_nf; extern compop_func op_5cf9_0_comp_nf; extern compop_func op_5dc0_0_comp_nf; extern compop_func op_5dc8_0_comp_nf; extern compop_func op_5dd0_0_comp_nf; extern compop_func op_5dd8_0_comp_nf; extern compop_func op_5de0_0_comp_nf; extern compop_func op_5de8_0_comp_nf; extern compop_func op_5df0_0_comp_nf; extern compop_func op_5df8_0_comp_nf; extern compop_func op_5df9_0_comp_nf; extern compop_func op_5ec0_0_comp_nf; extern compop_func op_5ec8_0_comp_nf; extern compop_func op_5ed0_0_comp_nf; extern compop_func op_5ed8_0_comp_nf; extern compop_func op_5ee0_0_comp_nf; extern compop_func op_5ee8_0_comp_nf; extern compop_func op_5ef0_0_comp_nf; extern compop_func op_5ef8_0_comp_nf; extern compop_func op_5ef9_0_comp_nf; extern compop_func op_5fc0_0_comp_nf; extern compop_func op_5fc8_0_comp_nf; extern compop_func op_5fd0_0_comp_nf; extern compop_func op_5fd8_0_comp_nf; extern compop_func op_5fe0_0_comp_nf; extern compop_func op_5fe8_0_comp_nf; extern compop_func op_5ff0_0_comp_nf; extern compop_func op_5ff8_0_comp_nf; extern compop_func op_5ff9_0_comp_nf; extern compop_func op_6000_0_comp_nf; extern compop_func op_6001_0_comp_nf; extern compop_func op_60ff_0_comp_nf; extern compop_func op_6100_0_comp_nf; extern compop_func op_6101_0_comp_nf; extern compop_func op_6200_0_comp_nf; extern compop_func op_6201_0_comp_nf; extern compop_func op_62ff_0_comp_nf; extern compop_func op_6300_0_comp_nf; extern compop_func op_6301_0_comp_nf; extern compop_func op_63ff_0_comp_nf; extern compop_func op_6400_0_comp_nf; extern compop_func op_6401_0_comp_nf; extern compop_func op_64ff_0_comp_nf; extern compop_func op_6500_0_comp_nf; extern compop_func op_6501_0_comp_nf; extern compop_func op_65ff_0_comp_nf; extern compop_func op_6600_0_comp_nf; extern compop_func op_6601_0_comp_nf; extern compop_func op_66ff_0_comp_nf; extern compop_func op_6700_0_comp_nf; extern compop_func op_6701_0_comp_nf; extern compop_func op_67ff_0_comp_nf; extern compop_func op_6a00_0_comp_nf; extern compop_func op_6a01_0_comp_nf; extern compop_func op_6aff_0_comp_nf; extern compop_func op_6b00_0_comp_nf; extern compop_func op_6b01_0_comp_nf; extern compop_func op_6bff_0_comp_nf; extern compop_func op_6c00_0_comp_nf; extern compop_func op_6c01_0_comp_nf; extern compop_func op_6cff_0_comp_nf; extern compop_func op_6d00_0_comp_nf; extern compop_func op_6d01_0_comp_nf; extern compop_func op_6dff_0_comp_nf; extern compop_func op_6e00_0_comp_nf; extern compop_func op_6e01_0_comp_nf; extern compop_func op_6eff_0_comp_nf; extern compop_func op_6f00_0_comp_nf; extern compop_func op_6f01_0_comp_nf; extern compop_func op_6fff_0_comp_nf; extern compop_func op_7000_0_comp_nf; extern compop_func op_8000_0_comp_nf; extern compop_func op_8010_0_comp_nf; extern compop_func op_8018_0_comp_nf; extern compop_func op_8020_0_comp_nf; extern compop_func op_8028_0_comp_nf; extern compop_func op_8030_0_comp_nf; extern compop_func op_8038_0_comp_nf; extern compop_func op_8039_0_comp_nf; extern compop_func op_803a_0_comp_nf; extern compop_func op_803b_0_comp_nf; extern compop_func op_803c_0_comp_nf; extern compop_func op_8040_0_comp_nf; extern compop_func op_8050_0_comp_nf; extern compop_func op_8058_0_comp_nf; extern compop_func op_8060_0_comp_nf; extern compop_func op_8068_0_comp_nf; extern compop_func op_8070_0_comp_nf; extern compop_func op_8078_0_comp_nf; extern compop_func op_8079_0_comp_nf; extern compop_func op_807a_0_comp_nf; extern compop_func op_807b_0_comp_nf; extern compop_func op_807c_0_comp_nf; extern compop_func op_8080_0_comp_nf; extern compop_func op_8090_0_comp_nf; extern compop_func op_8098_0_comp_nf; extern compop_func op_80a0_0_comp_nf; extern compop_func op_80a8_0_comp_nf; extern compop_func op_80b0_0_comp_nf; extern compop_func op_80b8_0_comp_nf; extern compop_func op_80b9_0_comp_nf; extern compop_func op_80ba_0_comp_nf; extern compop_func op_80bb_0_comp_nf; extern compop_func op_80bc_0_comp_nf; extern compop_func op_8110_0_comp_nf; extern compop_func op_8118_0_comp_nf; extern compop_func op_8120_0_comp_nf; extern compop_func op_8128_0_comp_nf; extern compop_func op_8130_0_comp_nf; extern compop_func op_8138_0_comp_nf; extern compop_func op_8139_0_comp_nf; extern compop_func op_8150_0_comp_nf; extern compop_func op_8158_0_comp_nf; extern compop_func op_8160_0_comp_nf; extern compop_func op_8168_0_comp_nf; extern compop_func op_8170_0_comp_nf; extern compop_func op_8178_0_comp_nf; extern compop_func op_8179_0_comp_nf; extern compop_func op_8190_0_comp_nf; extern compop_func op_8198_0_comp_nf; extern compop_func op_81a0_0_comp_nf; extern compop_func op_81a8_0_comp_nf; extern compop_func op_81b0_0_comp_nf; extern compop_func op_81b8_0_comp_nf; extern compop_func op_81b9_0_comp_nf; extern compop_func op_9000_0_comp_nf; extern compop_func op_9010_0_comp_nf; extern compop_func op_9018_0_comp_nf; extern compop_func op_9020_0_comp_nf; extern compop_func op_9028_0_comp_nf; extern compop_func op_9030_0_comp_nf; extern compop_func op_9038_0_comp_nf; extern compop_func op_9039_0_comp_nf; extern compop_func op_903a_0_comp_nf; extern compop_func op_903b_0_comp_nf; extern compop_func op_903c_0_comp_nf; extern compop_func op_9040_0_comp_nf; extern compop_func op_9048_0_comp_nf; extern compop_func op_9050_0_comp_nf; extern compop_func op_9058_0_comp_nf; extern compop_func op_9060_0_comp_nf; extern compop_func op_9068_0_comp_nf; extern compop_func op_9070_0_comp_nf; extern compop_func op_9078_0_comp_nf; extern compop_func op_9079_0_comp_nf; extern compop_func op_907a_0_comp_nf; extern compop_func op_907b_0_comp_nf; extern compop_func op_907c_0_comp_nf; extern compop_func op_9080_0_comp_nf; extern compop_func op_9088_0_comp_nf; extern compop_func op_9090_0_comp_nf; extern compop_func op_9098_0_comp_nf; extern compop_func op_90a0_0_comp_nf; extern compop_func op_90a8_0_comp_nf; extern compop_func op_90b0_0_comp_nf; extern compop_func op_90b8_0_comp_nf; extern compop_func op_90b9_0_comp_nf; extern compop_func op_90ba_0_comp_nf; extern compop_func op_90bb_0_comp_nf; extern compop_func op_90bc_0_comp_nf; extern compop_func op_90c0_0_comp_nf; extern compop_func op_90c8_0_comp_nf; extern compop_func op_90d0_0_comp_nf; extern compop_func op_90d8_0_comp_nf; extern compop_func op_90e0_0_comp_nf; extern compop_func op_90e8_0_comp_nf; extern compop_func op_90f0_0_comp_nf; extern compop_func op_90f8_0_comp_nf; extern compop_func op_90f9_0_comp_nf; extern compop_func op_90fa_0_comp_nf; extern compop_func op_90fb_0_comp_nf; extern compop_func op_90fc_0_comp_nf; extern compop_func op_9100_0_comp_nf; extern compop_func op_9108_0_comp_nf; extern compop_func op_9110_0_comp_nf; extern compop_func op_9118_0_comp_nf; extern compop_func op_9120_0_comp_nf; extern compop_func op_9128_0_comp_nf; extern compop_func op_9130_0_comp_nf; extern compop_func op_9138_0_comp_nf; extern compop_func op_9139_0_comp_nf; extern compop_func op_9140_0_comp_nf; extern compop_func op_9148_0_comp_nf; extern compop_func op_9150_0_comp_nf; extern compop_func op_9158_0_comp_nf; extern compop_func op_9160_0_comp_nf; extern compop_func op_9168_0_comp_nf; extern compop_func op_9170_0_comp_nf; extern compop_func op_9178_0_comp_nf; extern compop_func op_9179_0_comp_nf; extern compop_func op_9180_0_comp_nf; extern compop_func op_9188_0_comp_nf; extern compop_func op_9190_0_comp_nf; extern compop_func op_9198_0_comp_nf; extern compop_func op_91a0_0_comp_nf; extern compop_func op_91a8_0_comp_nf; extern compop_func op_91b0_0_comp_nf; extern compop_func op_91b8_0_comp_nf; extern compop_func op_91b9_0_comp_nf; extern compop_func op_91c0_0_comp_nf; extern compop_func op_91c8_0_comp_nf; extern compop_func op_91d0_0_comp_nf; extern compop_func op_91d8_0_comp_nf; extern compop_func op_91e0_0_comp_nf; extern compop_func op_91e8_0_comp_nf; extern compop_func op_91f0_0_comp_nf; extern compop_func op_91f8_0_comp_nf; extern compop_func op_91f9_0_comp_nf; extern compop_func op_91fa_0_comp_nf; extern compop_func op_91fb_0_comp_nf; extern compop_func op_91fc_0_comp_nf; extern compop_func op_b000_0_comp_nf; extern compop_func op_b010_0_comp_nf; extern compop_func op_b018_0_comp_nf; extern compop_func op_b020_0_comp_nf; extern compop_func op_b028_0_comp_nf; extern compop_func op_b030_0_comp_nf; extern compop_func op_b038_0_comp_nf; extern compop_func op_b039_0_comp_nf; extern compop_func op_b03a_0_comp_nf; extern compop_func op_b03b_0_comp_nf; extern compop_func op_b03c_0_comp_nf; extern compop_func op_b040_0_comp_nf; extern compop_func op_b048_0_comp_nf; extern compop_func op_b050_0_comp_nf; extern compop_func op_b058_0_comp_nf; extern compop_func op_b060_0_comp_nf; extern compop_func op_b068_0_comp_nf; extern compop_func op_b070_0_comp_nf; extern compop_func op_b078_0_comp_nf; extern compop_func op_b079_0_comp_nf; extern compop_func op_b07a_0_comp_nf; extern compop_func op_b07b_0_comp_nf; extern compop_func op_b07c_0_comp_nf; extern compop_func op_b080_0_comp_nf; extern compop_func op_b088_0_comp_nf; extern compop_func op_b090_0_comp_nf; extern compop_func op_b098_0_comp_nf; extern compop_func op_b0a0_0_comp_nf; extern compop_func op_b0a8_0_comp_nf; extern compop_func op_b0b0_0_comp_nf; extern compop_func op_b0b8_0_comp_nf; extern compop_func op_b0b9_0_comp_nf; extern compop_func op_b0ba_0_comp_nf; extern compop_func op_b0bb_0_comp_nf; extern compop_func op_b0bc_0_comp_nf; extern compop_func op_b0c0_0_comp_nf; extern compop_func op_b0c8_0_comp_nf; extern compop_func op_b0d0_0_comp_nf; extern compop_func op_b0d8_0_comp_nf; extern compop_func op_b0e0_0_comp_nf; extern compop_func op_b0e8_0_comp_nf; extern compop_func op_b0f0_0_comp_nf; extern compop_func op_b0f8_0_comp_nf; extern compop_func op_b0f9_0_comp_nf; extern compop_func op_b0fa_0_comp_nf; extern compop_func op_b0fb_0_comp_nf; extern compop_func op_b0fc_0_comp_nf; extern compop_func op_b100_0_comp_nf; extern compop_func op_b108_0_comp_nf; extern compop_func op_b110_0_comp_nf; extern compop_func op_b118_0_comp_nf; extern compop_func op_b120_0_comp_nf; extern compop_func op_b128_0_comp_nf; extern compop_func op_b130_0_comp_nf; extern compop_func op_b138_0_comp_nf; extern compop_func op_b139_0_comp_nf; extern compop_func op_b140_0_comp_nf; extern compop_func op_b148_0_comp_nf; extern compop_func op_b150_0_comp_nf; extern compop_func op_b158_0_comp_nf; extern compop_func op_b160_0_comp_nf; extern compop_func op_b168_0_comp_nf; extern compop_func op_b170_0_comp_nf; extern compop_func op_b178_0_comp_nf; extern compop_func op_b179_0_comp_nf; extern compop_func op_b180_0_comp_nf; extern compop_func op_b188_0_comp_nf; extern compop_func op_b190_0_comp_nf; extern compop_func op_b198_0_comp_nf; extern compop_func op_b1a0_0_comp_nf; extern compop_func op_b1a8_0_comp_nf; extern compop_func op_b1b0_0_comp_nf; extern compop_func op_b1b8_0_comp_nf; extern compop_func op_b1b9_0_comp_nf; extern compop_func op_b1c0_0_comp_nf; extern compop_func op_b1c8_0_comp_nf; extern compop_func op_b1d0_0_comp_nf; extern compop_func op_b1d8_0_comp_nf; extern compop_func op_b1e0_0_comp_nf; extern compop_func op_b1e8_0_comp_nf; extern compop_func op_b1f0_0_comp_nf; extern compop_func op_b1f8_0_comp_nf; extern compop_func op_b1f9_0_comp_nf; extern compop_func op_b1fa_0_comp_nf; extern compop_func op_b1fb_0_comp_nf; extern compop_func op_b1fc_0_comp_nf; extern compop_func op_c000_0_comp_nf; extern compop_func op_c010_0_comp_nf; extern compop_func op_c018_0_comp_nf; extern compop_func op_c020_0_comp_nf; extern compop_func op_c028_0_comp_nf; extern compop_func op_c030_0_comp_nf; extern compop_func op_c038_0_comp_nf; extern compop_func op_c039_0_comp_nf; extern compop_func op_c03a_0_comp_nf; extern compop_func op_c03b_0_comp_nf; extern compop_func op_c03c_0_comp_nf; extern compop_func op_c040_0_comp_nf; extern compop_func op_c050_0_comp_nf; extern compop_func op_c058_0_comp_nf; extern compop_func op_c060_0_comp_nf; extern compop_func op_c068_0_comp_nf; extern compop_func op_c070_0_comp_nf; extern compop_func op_c078_0_comp_nf; extern compop_func op_c079_0_comp_nf; extern compop_func op_c07a_0_comp_nf; extern compop_func op_c07b_0_comp_nf; extern compop_func op_c07c_0_comp_nf; extern compop_func op_c080_0_comp_nf; extern compop_func op_c090_0_comp_nf; extern compop_func op_c098_0_comp_nf; extern compop_func op_c0a0_0_comp_nf; extern compop_func op_c0a8_0_comp_nf; extern compop_func op_c0b0_0_comp_nf; extern compop_func op_c0b8_0_comp_nf; extern compop_func op_c0b9_0_comp_nf; extern compop_func op_c0ba_0_comp_nf; extern compop_func op_c0bb_0_comp_nf; extern compop_func op_c0bc_0_comp_nf; extern compop_func op_c0c0_0_comp_nf; extern compop_func op_c0d0_0_comp_nf; extern compop_func op_c0d8_0_comp_nf; extern compop_func op_c0e0_0_comp_nf; extern compop_func op_c0e8_0_comp_nf; extern compop_func op_c0f0_0_comp_nf; extern compop_func op_c0f8_0_comp_nf; extern compop_func op_c0f9_0_comp_nf; extern compop_func op_c0fa_0_comp_nf; extern compop_func op_c0fb_0_comp_nf; extern compop_func op_c0fc_0_comp_nf; extern compop_func op_c110_0_comp_nf; extern compop_func op_c118_0_comp_nf; extern compop_func op_c120_0_comp_nf; extern compop_func op_c128_0_comp_nf; extern compop_func op_c130_0_comp_nf; extern compop_func op_c138_0_comp_nf; extern compop_func op_c139_0_comp_nf; extern compop_func op_c140_0_comp_nf; extern compop_func op_c148_0_comp_nf; extern compop_func op_c150_0_comp_nf; extern compop_func op_c158_0_comp_nf; extern compop_func op_c160_0_comp_nf; extern compop_func op_c168_0_comp_nf; extern compop_func op_c170_0_comp_nf; extern compop_func op_c178_0_comp_nf; extern compop_func op_c179_0_comp_nf; extern compop_func op_c188_0_comp_nf; extern compop_func op_c190_0_comp_nf; extern compop_func op_c198_0_comp_nf; extern compop_func op_c1a0_0_comp_nf; extern compop_func op_c1a8_0_comp_nf; extern compop_func op_c1b0_0_comp_nf; extern compop_func op_c1b8_0_comp_nf; extern compop_func op_c1b9_0_comp_nf; extern compop_func op_c1c0_0_comp_nf; extern compop_func op_c1d0_0_comp_nf; extern compop_func op_c1d8_0_comp_nf; extern compop_func op_c1e0_0_comp_nf; extern compop_func op_c1e8_0_comp_nf; extern compop_func op_c1f0_0_comp_nf; extern compop_func op_c1f8_0_comp_nf; extern compop_func op_c1f9_0_comp_nf; extern compop_func op_c1fa_0_comp_nf; extern compop_func op_c1fb_0_comp_nf; extern compop_func op_c1fc_0_comp_nf; extern compop_func op_d000_0_comp_nf; extern compop_func op_d010_0_comp_nf; extern compop_func op_d018_0_comp_nf; extern compop_func op_d020_0_comp_nf; extern compop_func op_d028_0_comp_nf; extern compop_func op_d030_0_comp_nf; extern compop_func op_d038_0_comp_nf; extern compop_func op_d039_0_comp_nf; extern compop_func op_d03a_0_comp_nf; extern compop_func op_d03b_0_comp_nf; extern compop_func op_d03c_0_comp_nf; extern compop_func op_d040_0_comp_nf; extern compop_func op_d048_0_comp_nf; extern compop_func op_d050_0_comp_nf; extern compop_func op_d058_0_comp_nf; extern compop_func op_d060_0_comp_nf; extern compop_func op_d068_0_comp_nf; extern compop_func op_d070_0_comp_nf; extern compop_func op_d078_0_comp_nf; extern compop_func op_d079_0_comp_nf; extern compop_func op_d07a_0_comp_nf; extern compop_func op_d07b_0_comp_nf; extern compop_func op_d07c_0_comp_nf; extern compop_func op_d080_0_comp_nf; extern compop_func op_d088_0_comp_nf; extern compop_func op_d090_0_comp_nf; extern compop_func op_d098_0_comp_nf; extern compop_func op_d0a0_0_comp_nf; extern compop_func op_d0a8_0_comp_nf; extern compop_func op_d0b0_0_comp_nf; extern compop_func op_d0b8_0_comp_nf; extern compop_func op_d0b9_0_comp_nf; extern compop_func op_d0ba_0_comp_nf; extern compop_func op_d0bb_0_comp_nf; extern compop_func op_d0bc_0_comp_nf; extern compop_func op_d0c0_0_comp_nf; extern compop_func op_d0c8_0_comp_nf; extern compop_func op_d0d0_0_comp_nf; extern compop_func op_d0d8_0_comp_nf; extern compop_func op_d0e0_0_comp_nf; extern compop_func op_d0e8_0_comp_nf; extern compop_func op_d0f0_0_comp_nf; extern compop_func op_d0f8_0_comp_nf; extern compop_func op_d0f9_0_comp_nf; extern compop_func op_d0fa_0_comp_nf; extern compop_func op_d0fb_0_comp_nf; extern compop_func op_d0fc_0_comp_nf; extern compop_func op_d100_0_comp_nf; extern compop_func op_d108_0_comp_nf; extern compop_func op_d110_0_comp_nf; extern compop_func op_d118_0_comp_nf; extern compop_func op_d120_0_comp_nf; extern compop_func op_d128_0_comp_nf; extern compop_func op_d130_0_comp_nf; extern compop_func op_d138_0_comp_nf; extern compop_func op_d139_0_comp_nf; extern compop_func op_d140_0_comp_nf; extern compop_func op_d148_0_comp_nf; extern compop_func op_d150_0_comp_nf; extern compop_func op_d158_0_comp_nf; extern compop_func op_d160_0_comp_nf; extern compop_func op_d168_0_comp_nf; extern compop_func op_d170_0_comp_nf; extern compop_func op_d178_0_comp_nf; extern compop_func op_d179_0_comp_nf; extern compop_func op_d180_0_comp_nf; extern compop_func op_d188_0_comp_nf; extern compop_func op_d190_0_comp_nf; extern compop_func op_d198_0_comp_nf; extern compop_func op_d1a0_0_comp_nf; extern compop_func op_d1a8_0_comp_nf; extern compop_func op_d1b0_0_comp_nf; extern compop_func op_d1b8_0_comp_nf; extern compop_func op_d1b9_0_comp_nf; extern compop_func op_d1c0_0_comp_nf; extern compop_func op_d1c8_0_comp_nf; extern compop_func op_d1d0_0_comp_nf; extern compop_func op_d1d8_0_comp_nf; extern compop_func op_d1e0_0_comp_nf; extern compop_func op_d1e8_0_comp_nf; extern compop_func op_d1f0_0_comp_nf; extern compop_func op_d1f8_0_comp_nf; extern compop_func op_d1f9_0_comp_nf; extern compop_func op_d1fa_0_comp_nf; extern compop_func op_d1fb_0_comp_nf; extern compop_func op_d1fc_0_comp_nf; extern compop_func op_e000_0_comp_nf; extern compop_func op_e008_0_comp_nf; extern compop_func op_e018_0_comp_nf; extern compop_func op_e020_0_comp_nf; extern compop_func op_e028_0_comp_nf; extern compop_func op_e038_0_comp_nf; extern compop_func op_e040_0_comp_nf; extern compop_func op_e048_0_comp_nf; extern compop_func op_e058_0_comp_nf; extern compop_func op_e060_0_comp_nf; extern compop_func op_e068_0_comp_nf; extern compop_func op_e078_0_comp_nf; extern compop_func op_e080_0_comp_nf; extern compop_func op_e088_0_comp_nf; extern compop_func op_e098_0_comp_nf; extern compop_func op_e0a0_0_comp_nf; extern compop_func op_e0a8_0_comp_nf; extern compop_func op_e0b8_0_comp_nf; extern compop_func op_e100_0_comp_nf; extern compop_func op_e108_0_comp_nf; extern compop_func op_e118_0_comp_nf; extern compop_func op_e120_0_comp_nf; extern compop_func op_e128_0_comp_nf; extern compop_func op_e138_0_comp_nf; extern compop_func op_e140_0_comp_nf; extern compop_func op_e148_0_comp_nf; extern compop_func op_e158_0_comp_nf; extern compop_func op_e160_0_comp_nf; extern compop_func op_e168_0_comp_nf; extern compop_func op_e178_0_comp_nf; extern compop_func op_e180_0_comp_nf; extern compop_func op_e188_0_comp_nf; extern compop_func op_e198_0_comp_nf; extern compop_func op_e1a0_0_comp_nf; extern compop_func op_e1a8_0_comp_nf; extern compop_func op_e1b8_0_comp_nf; extern compop_func op_f200_0_comp_nf; extern compop_func op_f208_0_comp_nf; extern compop_func op_f210_0_comp_nf; extern compop_func op_f218_0_comp_nf; extern compop_func op_f220_0_comp_nf; extern compop_func op_f228_0_comp_nf; extern compop_func op_f230_0_comp_nf; extern compop_func op_f238_0_comp_nf; extern compop_func op_f239_0_comp_nf; extern compop_func op_f23a_0_comp_nf; extern compop_func op_f23b_0_comp_nf; extern compop_func op_f23c_0_comp_nf; extern compop_func op_f240_0_comp_nf; extern compop_func op_f250_0_comp_nf; extern compop_func op_f258_0_comp_nf; extern compop_func op_f260_0_comp_nf; extern compop_func op_f268_0_comp_nf; extern compop_func op_f270_0_comp_nf; extern compop_func op_f278_0_comp_nf; extern compop_func op_f279_0_comp_nf; extern compop_func op_f280_0_comp_nf; extern compop_func op_f2c0_0_comp_nf; extern compop_func op_f600_0_comp_nf; extern compop_func op_f608_0_comp_nf; extern compop_func op_f610_0_comp_nf; extern compop_func op_f618_0_comp_nf; extern compop_func op_f620_0_comp_nf; fs-uae-2.2.3+dfsg/src/jit/codegen_x86.h0000644000175000017500000035220312162366654017720 0ustar glaubitzglaubitz/******************** -*- mode: C; tab-width: 8 -*- ******************** * * Run-time assembler for IA-32 and AMD64 * ***********************************************************************/ /*********************************************************************** * * This file is derived from CCG. * * Copyright 1999, 2000, 2001, 2002, 2003 Ian Piumarta * * Adaptations and enhancements for AMD64 support, Copyright 2003-2008 * Gwenole Beauchesne * * Basilisk II (C) 1997-2008 Christian Bauer * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * ***********************************************************************/ #ifndef X86_RTASM_H #define X86_RTASM_H /* NOTES * * o Best viewed on a 1024x768 screen with fixed-6x10 font ;-) * * TODO * * o Fix FIXMEs * o i387 FPU instructions * o SSE instructions * o Optimize for cases where register numbers are not integral constants */ /* --- Configuration ------------------------------------------------------- */ /* Define to settle a "flat" register set, i.e. different regno for each size variant. */ #ifndef X86_FLAT_REGISTERS #define X86_FLAT_REGISTERS 1 #endif /* Define to generate x86-64 code. */ #ifndef X86_TARGET_64BIT #define X86_TARGET_64BIT 0 #endif /* Define to optimize ALU instructions. */ #ifndef X86_OPTIMIZE_ALU #define X86_OPTIMIZE_ALU 1 #endif /* Define to optimize rotate/shift instructions. */ #ifndef X86_OPTIMIZE_ROTSHI #define X86_OPTIMIZE_ROTSHI 1 #endif /* Define to optimize absolute addresses for RIP relative addressing. */ #ifndef X86_RIP_RELATIVE_ADDR #define X86_RIP_RELATIVE_ADDR 1 #endif /* --- Macros -------------------------------------------------------------- */ /* Functions used to emit code. * * x86_emit_byte(B) * x86_emit_word(W) * x86_emit_long(L) */ /* Get pointer to current code * * x86_get_target() */ /* Abort assembler, fatal failure. * * x86_emit_failure(MSG) */ #define x86_emit_failure0(MSG) (x86_emit_failure(MSG),0) /* --- Register set -------------------------------------------------------- */ enum { X86_RIP = -2, #if X86_FLAT_REGISTERS X86_NOREG = 0, X86_Reg8L_Base = 0x10, X86_Reg8H_Base = 0x20, X86_Reg16_Base = 0x30, X86_Reg32_Base = 0x40, X86_Reg64_Base = 0x50, X86_RegMMX_Base = 0x60, X86_RegXMM_Base = 0x70, #else X86_NOREG = -1, X86_Reg8L_Base = 0, X86_Reg8H_Base = 16, X86_Reg16_Base = 0, X86_Reg32_Base = 0, X86_Reg64_Base = 0, X86_RegMMX_Base = 0, X86_RegXMM_Base = 0, #endif }; enum { X86_AL = X86_Reg8L_Base, X86_CL, X86_DL, X86_BL, X86_SPL, X86_BPL, X86_SIL, X86_DIL, X86_R8B, X86_R9B, X86_R10B, X86_R11B, X86_R12B, X86_R13B, X86_R14B, X86_R15B, X86_AH = X86_Reg8H_Base + 4, X86_CH, X86_DH, X86_BH }; enum { X86_AX = X86_Reg16_Base, X86_CX, X86_DX, X86_BX, X86_SP, X86_BP, X86_SI, X86_DI, X86_R8W, X86_R9W, X86_R10W, X86_R11W, X86_R12W, X86_R13W, X86_R14W, X86_R15W }; enum { X86_EAX = X86_Reg32_Base, X86_ECX, X86_EDX, X86_EBX, X86_ESP, X86_EBP, X86_ESI, X86_EDI, X86_R8D, X86_R9D, X86_R10D, X86_R11D, X86_R12D, X86_R13D, X86_R14D, X86_R15D }; enum { X86_RAX = X86_Reg64_Base, X86_RCX, X86_RDX, X86_RBX, X86_RSP, X86_RBP, X86_RSI, X86_RDI, X86_R8, X86_R9, X86_R10, X86_R11, X86_R12, X86_R13, X86_R14, X86_R15 }; enum { X86_MM0 = X86_RegMMX_Base, X86_MM1, X86_MM2, X86_MM3, X86_MM4, X86_MM5, X86_MM6, X86_MM7, }; enum { X86_XMM0 = X86_RegXMM_Base, X86_XMM1, X86_XMM2, X86_XMM3, X86_XMM4, X86_XMM5, X86_XMM6, X86_XMM7, X86_XMM8, X86_XMM9, X86_XMM10, X86_XMM11, X86_XMM12, X86_XMM13, X86_XMM14, X86_XMM15 }; /* Register control and access * * _r0P(R) Null register? * _rIP(R) RIP register? * _rXP(R) Extended register? * * _rC(R) Class of register (only valid if X86_FLAT_REGISTERS) * _rR(R) Full register number * _rN(R) Short register number for encoding * * _r1(R) 8-bit register ID * _r2(R) 16-bit register ID * _r4(R) 32-bit register ID * _r8(R) 64-bit register ID * _rM(R) MMX register ID * _rX(R) XMM register ID * _rA(R) Address register ID used for EA calculation */ #define _r0P(R) ((int)(R) == (int)X86_NOREG) #define _rIP(R) (X86_TARGET_64BIT ? ((int)(R) == (int)X86_RIP) : 0) #if X86_FLAT_REGISTERS #define _rC(R) ((R) & 0xf0) #define _rR(R) ((R) & 0x0f) #define _rN(R) ((R) & 0x07) #define _rXP(R) ((R) > 0 && _rR(R) > 7) #else #define _rN(R) ((R) & 0x07) #define _rR(R) (int(R)) #define _rXP(R) (_rR(R) > 7 && _rR(R) < 16) #endif #if !defined(_ASM_SAFETY) || ! X86_FLAT_REGISTERS #define _r1(R) _rN(R) #define _r2(R) _rN(R) #define _r4(R) _rN(R) #define _r8(R) _rN(R) #define _rA(R) _rN(R) #define _rM(R) _rN(R) #define _rX(R) _rN(R) #else #define _r1(R) ( ((_rC(R) & (X86_Reg8L_Base | X86_Reg8H_Base)) != 0) ? _rN(R) : x86_emit_failure0( "8-bit register required")) #define _r2(R) ( (_rC(R) == X86_Reg16_Base) ? _rN(R) : x86_emit_failure0("16-bit register required")) #define _r4(R) ( (_rC(R) == X86_Reg32_Base) ? _rN(R) : x86_emit_failure0("32-bit register required")) #define _r8(R) ( (_rC(R) == X86_Reg64_Base) ? _rN(R) : x86_emit_failure0("64-bit register required")) #define _rA(R) ( X86_TARGET_64BIT ? \ ( (_rC(R) == X86_Reg64_Base) ? _rN(R) : x86_emit_failure0("not a valid 64-bit base/index expression")) : \ ( (_rC(R) == X86_Reg32_Base) ? _rN(R) : x86_emit_failure0("not a valid 32-bit base/index expression")) ) #define _rM(R) ( (_rC(R) == X86_RegMMX_Base) ? _rN(R) : x86_emit_failure0("MMX register required")) #define _rX(R) ( (_rC(R) == X86_RegXMM_Base) ? _rN(R) : x86_emit_failure0("SSE register required")) #endif #define _rSP() (X86_TARGET_64BIT ? (int)X86_RSP : (int)X86_ESP) #define _r1e8lP(R) (int(R) >= X86_SPL && int(R) <= X86_DIL) #define _rbpP(R) (_rR(R) == _rR(X86_RBP)) #define _rspP(R) (_rR(R) == _rR(X86_RSP)) #define _rbp13P(R) (_rN(R) == _rN(X86_RBP)) #define _rsp12P(R) (_rN(R) == _rN(X86_RSP)) /* ========================================================================= */ /* --- UTILITY ------------------------------------------------------------- */ /* ========================================================================= */ typedef signed char _sc; typedef unsigned char _uc; typedef signed short _ss; typedef unsigned short _us; typedef signed int _sl; typedef unsigned int _ul; #define _UC(X) ((_uc )(unsigned long)(X)) #define _US(X) ((_us )(unsigned long)(X)) #define _SL(X) ((_sl )(unsigned long)(X)) #define _UL(X) ((_ul )(unsigned long)(X)) #define _PUC(X) ((_uc *)(X)) #define _PUS(X) ((_us *)(X)) #define _PSL(X) ((_sl *)(X)) #define _PUL(X) ((_ul *)(X)) #define _B(B) x86_emit_byte((B)) #define _W(W) x86_emit_word((W)) #define _L(L) x86_emit_long((L)) #define _Q(Q) x86_emit_quad((Q)) #define _MASK(N) ((unsigned)((1<<(N)))-1) #define _siP(N,I) (!((((unsigned)(I))^(((unsigned)(I))<<1))&~_MASK(N))) #define _uiP(N,I) (!(((unsigned)(I))&~_MASK(N))) #define _suiP(N,I) (_siP(N,I) | _uiP(N,I)) #ifndef _ASM_SAFETY #define _ck_s(W,I) (_UL(I) & _MASK(W)) #define _ck_u(W,I) (_UL(I) & _MASK(W)) #define _ck_su(W,I) (_UL(I) & _MASK(W)) #define _ck_d(W,I) (_UL(I) & _MASK(W)) #else #define _ck_s(W,I) (_siP(W,I) ? (_UL(I) & _MASK(W)) : x86_emit_failure0( "signed integer `"#I"' too large for "#W"-bit field")) #define _ck_u(W,I) (_uiP(W,I) ? (_UL(I) & _MASK(W)) : x86_emit_failure0("unsigned integer `"#I"' too large for "#W"-bit field")) #define _ck_su(W,I) (_suiP(W,I) ? (_UL(I) & _MASK(W)) : x86_emit_failure0( "integer `"#I"' too large for "#W"-bit field")) #define _ck_d(W,I) (_siP(W,I) ? (_UL(I) & _MASK(W)) : x86_emit_failure0( "displacement `"#I"' too large for "#W"-bit field")) #endif #define _s0P(I) ((I)==0) #define _s8P(I) _siP(8,I) #define _s16P(I) _siP(16,I) #define _u8P(I) _uiP(8,I) #define _u16P(I) _uiP(16,I) #define _su8(I) _ck_su(8,I) #define _su16(I) _ck_su(16,I) #define _s1(I) _ck_s( 1,I) #define _s2(I) _ck_s( 2,I) #define _s3(I) _ck_s( 3,I) #define _s4(I) _ck_s( 4,I) #define _s5(I) _ck_s( 5,I) #define _s6(I) _ck_s( 6,I) #define _s7(I) _ck_s( 7,I) #define _s8(I) _ck_s( 8,I) #define _s9(I) _ck_s( 9,I) #define _s10(I) _ck_s(10,I) #define _s11(I) _ck_s(11,I) #define _s12(I) _ck_s(12,I) #define _s13(I) _ck_s(13,I) #define _s14(I) _ck_s(14,I) #define _s15(I) _ck_s(15,I) #define _s16(I) _ck_s(16,I) #define _s17(I) _ck_s(17,I) #define _s18(I) _ck_s(18,I) #define _s19(I) _ck_s(19,I) #define _s20(I) _ck_s(20,I) #define _s21(I) _ck_s(21,I) #define _s22(I) _ck_s(22,I) #define _s23(I) _ck_s(23,I) #define _s24(I) _ck_s(24,I) #define _s25(I) _ck_s(25,I) #define _s26(I) _ck_s(26,I) #define _s27(I) _ck_s(27,I) #define _s28(I) _ck_s(28,I) #define _s29(I) _ck_s(29,I) #define _s30(I) _ck_s(30,I) #define _s31(I) _ck_s(31,I) #define _u1(I) _ck_u( 1,I) #define _u2(I) _ck_u( 2,I) #define _u3(I) _ck_u( 3,I) #define _u4(I) _ck_u( 4,I) #define _u5(I) _ck_u( 5,I) #define _u6(I) _ck_u( 6,I) #define _u7(I) _ck_u( 7,I) #define _u8(I) _ck_u( 8,I) #define _u9(I) _ck_u( 9,I) #define _u10(I) _ck_u(10,I) #define _u11(I) _ck_u(11,I) #define _u12(I) _ck_u(12,I) #define _u13(I) _ck_u(13,I) #define _u14(I) _ck_u(14,I) #define _u15(I) _ck_u(15,I) #define _u16(I) _ck_u(16,I) #define _u17(I) _ck_u(17,I) #define _u18(I) _ck_u(18,I) #define _u19(I) _ck_u(19,I) #define _u20(I) _ck_u(20,I) #define _u21(I) _ck_u(21,I) #define _u22(I) _ck_u(22,I) #define _u23(I) _ck_u(23,I) #define _u24(I) _ck_u(24,I) #define _u25(I) _ck_u(25,I) #define _u26(I) _ck_u(26,I) #define _u27(I) _ck_u(27,I) #define _u28(I) _ck_u(28,I) #define _u29(I) _ck_u(29,I) #define _u30(I) _ck_u(30,I) #define _u31(I) _ck_u(31,I) /* ========================================================================= */ /* --- ASSEMBLER ----------------------------------------------------------- */ /* ========================================================================= */ #define _b00 0 #define _b01 1 #define _b10 2 #define _b11 3 #define _b000 0 #define _b001 1 #define _b010 2 #define _b011 3 #define _b100 4 #define _b101 5 #define _b110 6 #define _b111 7 #define _OFF4(D) (_UL(D) - _UL(x86_get_target())) #define _CKD8(D) _ck_d(8, ((_uc) _OFF4(D)) ) #define _D8(D) (_B(0), ((*(_PUC(x86_get_target())-1))= _CKD8(D))) #define _D32(D) (_L(0), ((*(_PUL(x86_get_target())-1))= _OFF4(D))) #ifndef _ASM_SAFETY # define _M(M) (M) # define _r(R) (R) # define _m(M) (M) # define _s(S) (S) # define _i(I) (I) # define _b(B) (B) #else # define _M(M) (((M)>3) ? x86_emit_failure0("internal error: mod = " #M) : (M)) # define _r(R) (((R)>7) ? x86_emit_failure0("internal error: reg = " #R) : (R)) # define _m(M) (((M)>7) ? x86_emit_failure0("internal error: r/m = " #M) : (M)) # define _s(S) (((S)>3) ? x86_emit_failure0("internal error: memory scale = " #S) : (S)) # define _i(I) (((I)>7) ? x86_emit_failure0("internal error: memory index = " #I) : (I)) # define _b(B) (((B)>7) ? x86_emit_failure0("internal error: memory base = " #B) : (B)) #endif #define _Mrm(Md,R,M) _B((_M(Md)<<6)|(_r(R)<<3)|_m(M)) #define _SIB(Sc,I, B) _B((_s(Sc)<<6)|(_i(I)<<3)|_b(B)) #define _SCL(S) ((((S)==1) ? _b00 : \ (((S)==2) ? _b01 : \ (((S)==4) ? _b10 : \ (((S)==8) ? _b11 : x86_emit_failure0("illegal scale: " #S)))))) /* --- Memory subformats - urgh! ------------------------------------------- */ /* _r_D() is RIP addressing mode if X86_TARGET_64BIT, use _r_DSIB() instead */ #define _r_D( R, D ) (_Mrm(_b00,_rN(R),_b101 ) ,_L((_sl)(D))) #define _r_DSIB(R, D ) (_Mrm(_b00,_rN(R),_b100 ),_SIB(_SCL(1),_b100 ,_b101 ),_L((_sl)(D))) #define _r_0B( R, B ) (_Mrm(_b00,_rN(R),_rA(B)) ) #define _r_0BIS(R, B,I,S) (_Mrm(_b00,_rN(R),_b100 ),_SIB(_SCL(S),_rA(I),_rA(B)) ) #define _r_1B( R, D,B ) (_Mrm(_b01,_rN(R),_rA(B)) ,_B((_sc)(D))) #define _r_1BIS(R, D,B,I,S) (_Mrm(_b01,_rN(R),_b100 ),_SIB(_SCL(S),_rA(I),_rA(B)),_B((_sc)(D))) #define _r_4B( R, D,B ) (_Mrm(_b10,_rN(R),_rA(B)) ,_L((_sl)(D))) #define _r_4IS( R, D,I,S) (_Mrm(_b00,_rN(R),_b100 ),_SIB(_SCL(S),_rA(I),_b101 ),_L((_sl)(D))) #define _r_4BIS(R, D,B,I,S) (_Mrm(_b10,_rN(R),_b100 ),_SIB(_SCL(S),_rA(I),_rA(B)),_L((_sl)(D))) #define _r_DB( R, D,B ) ((_s0P(D) && (!_rbp13P(B)) ? _r_0B (R, B ) : (_s8P(D) ? _r_1B( R,D,B ) : _r_4B( R,D,B )))) #define _r_DBIS(R, D,B,I,S) ((_s0P(D) && (!_rbp13P(B)) ? _r_0BIS(R, B,I,S) : (_s8P(D) ? _r_1BIS(R,D,B,I,S) : _r_4BIS(R,D,B,I,S)))) /* Use RIP-addressing in 64-bit mode, if possible */ #define _x86_RIP_addressing_possible(D,O) (X86_RIP_RELATIVE_ADDR && \ ((uintptr)x86_get_target() + 4 + (O) - (D) <= 0xffffffff)) #define _r_X( R, D,B,I,S,O) (_r0P(I) ? (_r0P(B) ? (!X86_TARGET_64BIT ? _r_D(R,D) : \ (_x86_RIP_addressing_possible(D, O) ? \ _r_D(R, (D) - ((uintptr)x86_get_target() + 4 + (O))) : \ _r_DSIB(R,D))) : \ (_rIP(B) ? _r_D (R,D ) : \ (_rsp12P(B) ? _r_DBIS(R,D,_rSP(),_rSP(),1) : \ _r_DB (R,D, B )))) : \ (_r0P(B) ? _r_4IS (R,D, I,S) : \ (!_rspP(I) ? _r_DBIS(R,D, B, I,S) : \ x86_emit_failure("illegal index register: %esp")))) /* --- Instruction formats ------------------------------------------------- */ #define _m32only(X) (! X86_TARGET_64BIT ? X : x86_emit_failure("invalid instruction in 64-bit mode")) #define _m64only(X) ( X86_TARGET_64BIT ? X : x86_emit_failure("invalid instruction in 32-bit mode")) #define _m64(X) ( X86_TARGET_64BIT ? X : ((void)0) ) /* _format Opcd ModR/M dN(rB,rI,Sc) imm... */ #define _d16() ( _B(0x66 ) ) #define _O( OP ) ( _B( OP ) ) #define _Or( OP,R ) ( _B( (OP)|_r(R)) ) #define _OO( OP ) ( _B((OP)>>8), _B(( (OP) )&0xff) ) #define _OOr( OP,R ) ( _B((OP)>>8), _B(( (OP)|_r(R))&0xff) ) #define _Os( OP,B ) ( _s8P(B) ? _B(((OP)|_b10)) : _B(OP) ) #define _sW( W ) ( _s8P(W) ? _B(W):_W(W) ) #define _sL( L ) ( _s8P(L) ? _B(L):_L(L) ) #define _sWO( W ) ( _s8P(W) ? 1 : 2 ) #define _sLO( L ) ( _s8P(L) ? 1 : 4 ) #define _O_B( OP ,B ) ( _O ( OP ) ,_B(B) ) #define _O_W( OP ,W ) ( _O ( OP ) ,_W(W) ) #define _O_L( OP ,L ) ( _O ( OP ) ,_L(L) ) #define _OO_L( OP ,L ) ( _OO ( OP ) ,_L(L) ) #define _O_D8( OP ,D ) ( _O ( OP ) ,_D8(D) ) #define _O_D32( OP ,D ) ( _O ( OP ) ,_D32(D) ) #define _OO_D32( OP ,D ) ( _OO ( OP ) ,_D32(D) ) #define _Os_sW( OP ,W ) ( _Os ( OP,W) ,_sW(W) ) #define _Os_sL( OP ,L ) ( _Os ( OP,L) ,_sL(L) ) #define _O_W_B( OP ,W,B) ( _O ( OP ) ,_W(W),_B(B)) #define _Or_B( OP,R ,B ) ( _Or ( OP,R) ,_B(B) ) #define _Or_W( OP,R ,W ) ( _Or ( OP,R) ,_W(W) ) #define _Or_L( OP,R ,L ) ( _Or ( OP,R) ,_L(L) ) #define _Or_Q( OP,R ,Q ) ( _Or ( OP,R) ,_Q(Q) ) #define _O_Mrm( OP ,MO,R,M ) ( _O ( OP ),_Mrm(MO,R,M ) ) #define _OO_Mrm( OP ,MO,R,M ) ( _OO ( OP ),_Mrm(MO,R,M ) ) #define _O_Mrm_B( OP ,MO,R,M ,B ) ( _O ( OP ),_Mrm(MO,R,M ) ,_B(B) ) #define _O_Mrm_W( OP ,MO,R,M ,W ) ( _O ( OP ),_Mrm(MO,R,M ) ,_W(W) ) #define _O_Mrm_L( OP ,MO,R,M ,L ) ( _O ( OP ),_Mrm(MO,R,M ) ,_L(L) ) #define _OO_Mrm_B( OP ,MO,R,M ,B ) ( _OO ( OP ),_Mrm(MO,R,M ) ,_B(B) ) #define _Os_Mrm_sW(OP ,MO,R,M ,W ) ( _Os ( OP,W),_Mrm(MO,R,M ),_sW(W) ) #define _Os_Mrm_sL(OP ,MO,R,M ,L ) ( _Os ( OP,L),_Mrm(MO,R,M ),_sL(L) ) #define _O_r_X( OP ,R ,MD,MB,MI,MS ) ( _O ( OP ),_r_X( R ,MD,MB,MI,MS,0) ) #define _OO_r_X( OP ,R ,MD,MB,MI,MS ) ( _OO ( OP ),_r_X( R ,MD,MB,MI,MS,0) ) #define _O_r_X_B( OP ,R ,MD,MB,MI,MS,B ) ( _O ( OP ),_r_X( R ,MD,MB,MI,MS,1) ,_B(B) ) #define _O_r_X_W( OP ,R ,MD,MB,MI,MS,W ) ( _O ( OP ),_r_X( R ,MD,MB,MI,MS,2) ,_W(W) ) #define _O_r_X_L( OP ,R ,MD,MB,MI,MS,L ) ( _O ( OP ),_r_X( R ,MD,MB,MI,MS,4) ,_L(L) ) #define _OO_r_X_B( OP ,R ,MD,MB,MI,MS,B ) ( _OO ( OP ),_r_X( R ,MD,MB,MI,MS,1) ,_B(B) ) #define _Os_r_X_sW(OP ,R ,MD,MB,MI,MS,W ) ( _Os ( OP,W),_r_X( R ,MD,MB,MI,MS,_sWO(W)),_sW(W)) #define _Os_r_X_sL(OP ,R ,MD,MB,MI,MS,L ) ( _Os ( OP,L),_r_X( R ,MD,MB,MI,MS,_sLO(L)),_sL(L)) #define _O_X_B( OP ,MD,MB,MI,MS,B ) ( _O_r_X_B( OP ,0 ,MD,MB,MI,MS ,B) ) #define _O_X_W( OP ,MD,MB,MI,MS,W ) ( _O_r_X_W( OP ,0 ,MD,MB,MI,MS ,W) ) #define _O_X_L( OP ,MD,MB,MI,MS,L ) ( _O_r_X_L( OP ,0 ,MD,MB,MI,MS ,L) ) /* --- REX prefixes -------------------------------------------------------- */ #define _VOID() ((void)0) #define _BIT(X) (!!(X)) #define _d64(W,R,X,B) (_B(0x40|(W)<<3|(R)<<2|(X)<<1|(B))) #define __REXwrxb(L,W,R,X,B) ((W|R|X|B) || (L) ? _d64(W,R,X,B) : _VOID()) #define __REXwrx_(L,W,R,X,MR) (__REXwrxb(L,W,R,X,_BIT(_rIP(MR)?0:_rXP(MR)))) #define __REXw_x_(L,W,R,X,MR) (__REXwrx_(L,W,_BIT(_rXP(R)),X,MR)) #define __REX_reg(RR) (__REXwrxb(0,0,0,00,_BIT(_rXP(RR)))) #define __REX_mem(MB,MI) (__REXwrxb(0,0,0,_BIT(_rXP(MI)),_BIT(_rXP(MB)))) // FIXME: can't mix new (SPL,BPL,SIL,DIL) with (AH,BH,CH,DH) #define _REXBrr(RR,MR) _m64(__REXw_x_(_r1e8lP(RR)||_r1e8lP(MR),0,RR,0,MR)) #define _REXBmr(MB,MI,RD) _m64(__REXw_x_(_r1e8lP(RD)||_r1e8lP(MB),0,RD,_BIT(_rXP(MI)),MB)) #define _REXBrm(RS,MB,MI) _REXBmr(MB,MI,RS) #define _REXBLrr(RR,MR) _m64(__REXw_x_(_r1e8lP(MR),0,RR,0,MR)) #define _REXLrr(RR,MR) _m64(__REXw_x_(0,0,RR,0,MR)) #define _REXLmr(MB,MI,RD) _m64(__REXw_x_(0,0,RD,_BIT(_rXP(MI)),MB)) #define _REXLrm(RS,MB,MI) _REXLmr(MB,MI,RS) #define _REXLr(RR) _m64(__REX_reg(RR)) #define _REXLm(MB,MI) _m64(__REX_mem(MB,MI)) #define _REXQrr(RR,MR) _m64only(__REXw_x_(0,1,RR,0,MR)) #define _REXQmr(MB,MI,RD) _m64only(__REXw_x_(0,1,RD,_BIT(_rXP(MI)),MB)) #define _REXQrm(RS,MB,MI) _REXQmr(MB,MI,RS) #define _REXQr(RR) _m64only(__REX_reg(RR)) #define _REXQm(MB,MI) _m64only(__REX_mem(MB,MI)) /* ========================================================================= */ /* --- Fully-qualified intrinsic instructions ------------------------------ */ /* ========================================================================= */ /* OPCODE + i = immediate operand * + r = register operand * + m = memory operand (disp,base,index,scale) * + sr/sm = a star preceding a register or memory * + 0 = top of stack register (for FPU instructions) * * NOTE in x86-64 mode: a memory operand with only a valid * displacement value will lead to the expect absolute mode. If * RIP addressing is necessary, X86_RIP shall be used as the base * register argument. */ /* --- ALU instructions ---------------------------------------------------- */ enum { X86_ADD = 0, X86_OR = 1, X86_ADC = 2, X86_SBB = 3, X86_AND = 4, X86_SUB = 5, X86_XOR = 6, X86_CMP = 7, }; /* _format Opcd ,Mod ,r ,m ,mem=dsp+sib ,imm... */ #define _ALUBrr(OP,RS, RD) (_REXBrr(RS, RD), _O_Mrm (((OP) << 3) ,_b11,_r1(RS),_r1(RD) )) #define _ALUBmr(OP, MD, MB, MI, MS, RD) (_REXBmr(MB, MI, RD), _O_r_X (((OP) << 3) + 2 ,_r1(RD) ,MD,MB,MI,MS )) #define _ALUBrm(OP, RS, MD, MB, MI, MS) (_REXBrm(RS, MB, MI), _O_r_X (((OP) << 3) ,_r1(RS) ,MD,MB,MI,MS )) #define _ALUBir(OP, IM, RD) (X86_OPTIMIZE_ALU && ((RD) == X86_AL) ? \ (_REXBrr(0, RD), _O_B (((OP) << 3) + 4 ,_su8(IM))) : \ (_REXBrr(0, RD), _O_Mrm_B (0x80 ,_b11,OP ,_r1(RD) ,_su8(IM))) ) #define _ALUBim(OP, IM, MD, MB, MI, MS) (_REXBrm(0, MB, MI), _O_r_X_B (0x80 ,OP ,MD,MB,MI,MS ,_su8(IM))) #define _ALUWrr(OP, RS, RD) (_d16(), _REXLrr(RS, RD), _O_Mrm (((OP) << 3) + 1,_b11,_r2(RS),_r2(RD) )) #define _ALUWmr(OP, MD, MB, MI, MS, RD) (_d16(), _REXLmr(MB, MI, RD), _O_r_X (((OP) << 3) + 3 ,_r2(RD) ,MD,MB,MI,MS )) #define _ALUWrm(OP, RS, MD, MB, MI, MS) (_d16(), _REXLrm(RS, MB, MI), _O_r_X (((OP) << 3) + 1 ,_r2(RS) ,MD,MB,MI,MS )) #define _ALUWir(OP, IM, RD) (X86_OPTIMIZE_ALU && ((RD) == X86_AX) ? \ (_d16(), _REXLrr(0, RD), _O_W (((OP) << 3) + 5 ,_su16(IM))) : \ (_d16(), _REXLrr(0, RD), _Os_Mrm_sW (0x81 ,_b11,OP ,_r2(RD) ,_su16(IM))) ) #define _ALUWim(OP, IM, MD, MB, MI, MS) (_d16(), _REXLrm(0, MB, MI), _Os_r_X_sW (0x81 ,OP ,MD,MB,MI,MS ,_su16(IM))) #define _ALULrr(OP, RS, RD) (_REXLrr(RS, RD), _O_Mrm (((OP) << 3) + 1,_b11,_r4(RS),_r4(RD) )) #define _ALULmr(OP, MD, MB, MI, MS, RD) (_REXLmr(MB, MI, RD), _O_r_X (((OP) << 3) + 3 ,_r4(RD) ,MD,MB,MI,MS )) #define _ALULrm(OP, RS, MD, MB, MI, MS) (_REXLrm(RS, MB, MI), _O_r_X (((OP) << 3) + 1 ,_r4(RS) ,MD,MB,MI,MS )) #define _ALULir(OP, IM, RD) (X86_OPTIMIZE_ALU && ((RD) == X86_EAX) ? \ (_REXLrr(0, RD), _O_L (((OP) << 3) + 5 ,IM )) : \ (_REXLrr(0, RD), _Os_Mrm_sL (0x81 ,_b11,OP ,_r4(RD) ,IM )) ) #define _ALULim(OP, IM, MD, MB, MI, MS) (_REXLrm(0, MB, MI), _Os_r_X_sL (0x81 ,OP ,MD,MB,MI,MS ,IM )) #define _ALUQrr(OP, RS, RD) (_REXQrr(RS, RD), _O_Mrm (((OP) << 3) + 1,_b11,_r8(RS),_r8(RD) )) #define _ALUQmr(OP, MD, MB, MI, MS, RD) (_REXQmr(MB, MI, RD), _O_r_X (((OP) << 3) + 3 ,_r8(RD) ,MD,MB,MI,MS )) #define _ALUQrm(OP, RS, MD, MB, MI, MS) (_REXQrm(RS, MB, MI), _O_r_X (((OP) << 3) + 1 ,_r8(RS) ,MD,MB,MI,MS )) #define _ALUQir(OP, IM, RD) (X86_OPTIMIZE_ALU && ((RD) == X86_RAX) ? \ (_REXQrr(0, RD), _O_L (((OP) << 3) + 5 ,IM )) : \ (_REXQrr(0, RD), _Os_Mrm_sL (0x81 ,_b11,OP ,_r8(RD) ,IM )) ) #define _ALUQim(OP, IM, MD, MB, MI, MS) (_REXQrm(0, MB, MI), _Os_r_X_sL (0x81 ,OP ,MD,MB,MI,MS ,IM )) #define ADCBrr(RS, RD) _ALUBrr(X86_ADC, RS, RD) #define ADCBmr(MD, MB, MI, MS, RD) _ALUBmr(X86_ADC, MD, MB, MI, MS, RD) #define ADCBrm(RS, MD, MB, MI, MS) _ALUBrm(X86_ADC, RS, MD, MB, MI, MS) #define ADCBir(IM, RD) _ALUBir(X86_ADC, IM, RD) #define ADCBim(IM, MD, MB, MI, MS) _ALUBim(X86_ADC, IM, MD, MB, MI, MS) #define ADCWrr(RS, RD) _ALUWrr(X86_ADC, RS, RD) #define ADCWmr(MD, MB, MI, MS, RD) _ALUWmr(X86_ADC, MD, MB, MI, MS, RD) #define ADCWrm(RS, MD, MB, MI, MS) _ALUWrm(X86_ADC, RS, MD, MB, MI, MS) #define ADCWir(IM, RD) _ALUWir(X86_ADC, IM, RD) #define ADCWim(IM, MD, MB, MI, MS) _ALUWim(X86_ADC, IM, MD, MB, MI, MS) #define ADCLrr(RS, RD) _ALULrr(X86_ADC, RS, RD) #define ADCLmr(MD, MB, MI, MS, RD) _ALULmr(X86_ADC, MD, MB, MI, MS, RD) #define ADCLrm(RS, MD, MB, MI, MS) _ALULrm(X86_ADC, RS, MD, MB, MI, MS) #define ADCLir(IM, RD) _ALULir(X86_ADC, IM, RD) #define ADCLim(IM, MD, MB, MI, MS) _ALULim(X86_ADC, IM, MD, MB, MI, MS) #define ADCQrr(RS, RD) _ALUQrr(X86_ADC, RS, RD) #define ADCQmr(MD, MB, MI, MS, RD) _ALUQmr(X86_ADC, MD, MB, MI, MS, RD) #define ADCQrm(RS, MD, MB, MI, MS) _ALUQrm(X86_ADC, RS, MD, MB, MI, MS) #define ADCQir(IM, RD) _ALUQir(X86_ADC, IM, RD) #define ADCQim(IM, MD, MB, MI, MS) _ALUQim(X86_ADC, IM, MD, MB, MI, MS) #define ADDBrr(RS, RD) _ALUBrr(X86_ADD, RS, RD) #define ADDBmr(MD, MB, MI, MS, RD) _ALUBmr(X86_ADD, MD, MB, MI, MS, RD) #define ADDBrm(RS, MD, MB, MI, MS) _ALUBrm(X86_ADD, RS, MD, MB, MI, MS) #define ADDBir(IM, RD) _ALUBir(X86_ADD, IM, RD) #define ADDBim(IM, MD, MB, MI, MS) _ALUBim(X86_ADD, IM, MD, MB, MI, MS) #define ADDWrr(RS, RD) _ALUWrr(X86_ADD, RS, RD) #define ADDWmr(MD, MB, MI, MS, RD) _ALUWmr(X86_ADD, MD, MB, MI, MS, RD) #define ADDWrm(RS, MD, MB, MI, MS) _ALUWrm(X86_ADD, RS, MD, MB, MI, MS) #define ADDWir(IM, RD) _ALUWir(X86_ADD, IM, RD) #define ADDWim(IM, MD, MB, MI, MS) _ALUWim(X86_ADD, IM, MD, MB, MI, MS) #define ADDLrr(RS, RD) _ALULrr(X86_ADD, RS, RD) #define ADDLmr(MD, MB, MI, MS, RD) _ALULmr(X86_ADD, MD, MB, MI, MS, RD) #define ADDLrm(RS, MD, MB, MI, MS) _ALULrm(X86_ADD, RS, MD, MB, MI, MS) #define ADDLir(IM, RD) _ALULir(X86_ADD, IM, RD) #define ADDLim(IM, MD, MB, MI, MS) _ALULim(X86_ADD, IM, MD, MB, MI, MS) #define ADDQrr(RS, RD) _ALUQrr(X86_ADD, RS, RD) #define ADDQmr(MD, MB, MI, MS, RD) _ALUQmr(X86_ADD, MD, MB, MI, MS, RD) #define ADDQrm(RS, MD, MB, MI, MS) _ALUQrm(X86_ADD, RS, MD, MB, MI, MS) #define ADDQir(IM, RD) _ALUQir(X86_ADD, IM, RD) #define ADDQim(IM, MD, MB, MI, MS) _ALUQim(X86_ADD, IM, MD, MB, MI, MS) #define ANDBrr(RS, RD) _ALUBrr(X86_AND, RS, RD) #define ANDBmr(MD, MB, MI, MS, RD) _ALUBmr(X86_AND, MD, MB, MI, MS, RD) #define ANDBrm(RS, MD, MB, MI, MS) _ALUBrm(X86_AND, RS, MD, MB, MI, MS) #define ANDBir(IM, RD) _ALUBir(X86_AND, IM, RD) #define ANDBim(IM, MD, MB, MI, MS) _ALUBim(X86_AND, IM, MD, MB, MI, MS) #define ANDWrr(RS, RD) _ALUWrr(X86_AND, RS, RD) #define ANDWmr(MD, MB, MI, MS, RD) _ALUWmr(X86_AND, MD, MB, MI, MS, RD) #define ANDWrm(RS, MD, MB, MI, MS) _ALUWrm(X86_AND, RS, MD, MB, MI, MS) #define ANDWir(IM, RD) _ALUWir(X86_AND, IM, RD) #define ANDWim(IM, MD, MB, MI, MS) _ALUWim(X86_AND, IM, MD, MB, MI, MS) #define ANDLrr(RS, RD) _ALULrr(X86_AND, RS, RD) #define ANDLmr(MD, MB, MI, MS, RD) _ALULmr(X86_AND, MD, MB, MI, MS, RD) #define ANDLrm(RS, MD, MB, MI, MS) _ALULrm(X86_AND, RS, MD, MB, MI, MS) #define ANDLir(IM, RD) _ALULir(X86_AND, IM, RD) #define ANDLim(IM, MD, MB, MI, MS) _ALULim(X86_AND, IM, MD, MB, MI, MS) #define ANDQrr(RS, RD) _ALUQrr(X86_AND, RS, RD) #define ANDQmr(MD, MB, MI, MS, RD) _ALUQmr(X86_AND, MD, MB, MI, MS, RD) #define ANDQrm(RS, MD, MB, MI, MS) _ALUQrm(X86_AND, RS, MD, MB, MI, MS) #define ANDQir(IM, RD) _ALUQir(X86_AND, IM, RD) #define ANDQim(IM, MD, MB, MI, MS) _ALUQim(X86_AND, IM, MD, MB, MI, MS) #define CMPBrr(RS, RD) _ALUBrr(X86_CMP, RS, RD) #define CMPBmr(MD, MB, MI, MS, RD) _ALUBmr(X86_CMP, MD, MB, MI, MS, RD) #define CMPBrm(RS, MD, MB, MI, MS) _ALUBrm(X86_CMP, RS, MD, MB, MI, MS) #define CMPBir(IM, RD) _ALUBir(X86_CMP, IM, RD) #define CMPBim(IM, MD, MB, MI, MS) _ALUBim(X86_CMP, IM, MD, MB, MI, MS) #define CMPWrr(RS, RD) _ALUWrr(X86_CMP, RS, RD) #define CMPWmr(MD, MB, MI, MS, RD) _ALUWmr(X86_CMP, MD, MB, MI, MS, RD) #define CMPWrm(RS, MD, MB, MI, MS) _ALUWrm(X86_CMP, RS, MD, MB, MI, MS) #define CMPWir(IM, RD) _ALUWir(X86_CMP, IM, RD) #define CMPWim(IM, MD, MB, MI, MS) _ALUWim(X86_CMP, IM, MD, MB, MI, MS) #define CMPLrr(RS, RD) _ALULrr(X86_CMP, RS, RD) #define CMPLmr(MD, MB, MI, MS, RD) _ALULmr(X86_CMP, MD, MB, MI, MS, RD) #define CMPLrm(RS, MD, MB, MI, MS) _ALULrm(X86_CMP, RS, MD, MB, MI, MS) #define CMPLir(IM, RD) _ALULir(X86_CMP, IM, RD) #define CMPLim(IM, MD, MB, MI, MS) _ALULim(X86_CMP, IM, MD, MB, MI, MS) #define CMPQrr(RS, RD) _ALUQrr(X86_CMP, RS, RD) #define CMPQmr(MD, MB, MI, MS, RD) _ALUQmr(X86_CMP, MD, MB, MI, MS, RD) #define CMPQrm(RS, MD, MB, MI, MS) _ALUQrm(X86_CMP, RS, MD, MB, MI, MS) #define CMPQir(IM, RD) _ALUQir(X86_CMP, IM, RD) #define CMPQim(IM, MD, MB, MI, MS) _ALUQim(X86_CMP, IM, MD, MB, MI, MS) #define ORBrr(RS, RD) _ALUBrr(X86_OR, RS, RD) #define ORBmr(MD, MB, MI, MS, RD) _ALUBmr(X86_OR, MD, MB, MI, MS, RD) #define ORBrm(RS, MD, MB, MI, MS) _ALUBrm(X86_OR, RS, MD, MB, MI, MS) #define ORBir(IM, RD) _ALUBir(X86_OR, IM, RD) #define ORBim(IM, MD, MB, MI, MS) _ALUBim(X86_OR, IM, MD, MB, MI, MS) #define ORWrr(RS, RD) _ALUWrr(X86_OR, RS, RD) #define ORWmr(MD, MB, MI, MS, RD) _ALUWmr(X86_OR, MD, MB, MI, MS, RD) #define ORWrm(RS, MD, MB, MI, MS) _ALUWrm(X86_OR, RS, MD, MB, MI, MS) #define ORWir(IM, RD) _ALUWir(X86_OR, IM, RD) #define ORWim(IM, MD, MB, MI, MS) _ALUWim(X86_OR, IM, MD, MB, MI, MS) #define ORLrr(RS, RD) _ALULrr(X86_OR, RS, RD) #define ORLmr(MD, MB, MI, MS, RD) _ALULmr(X86_OR, MD, MB, MI, MS, RD) #define ORLrm(RS, MD, MB, MI, MS) _ALULrm(X86_OR, RS, MD, MB, MI, MS) #define ORLir(IM, RD) _ALULir(X86_OR, IM, RD) #define ORLim(IM, MD, MB, MI, MS) _ALULim(X86_OR, IM, MD, MB, MI, MS) #define ORQrr(RS, RD) _ALUQrr(X86_OR, RS, RD) #define ORQmr(MD, MB, MI, MS, RD) _ALUQmr(X86_OR, MD, MB, MI, MS, RD) #define ORQrm(RS, MD, MB, MI, MS) _ALUQrm(X86_OR, RS, MD, MB, MI, MS) #define ORQir(IM, RD) _ALUQir(X86_OR, IM, RD) #define ORQim(IM, MD, MB, MI, MS) _ALUQim(X86_OR, IM, MD, MB, MI, MS) #define SBBBrr(RS, RD) _ALUBrr(X86_SBB, RS, RD) #define SBBBmr(MD, MB, MI, MS, RD) _ALUBmr(X86_SBB, MD, MB, MI, MS, RD) #define SBBBrm(RS, MD, MB, MI, MS) _ALUBrm(X86_SBB, RS, MD, MB, MI, MS) #define SBBBir(IM, RD) _ALUBir(X86_SBB, IM, RD) #define SBBBim(IM, MD, MB, MI, MS) _ALUBim(X86_SBB, IM, MD, MB, MI, MS) #define SBBWrr(RS, RD) _ALUWrr(X86_SBB, RS, RD) #define SBBWmr(MD, MB, MI, MS, RD) _ALUWmr(X86_SBB, MD, MB, MI, MS, RD) #define SBBWrm(RS, MD, MB, MI, MS) _ALUWrm(X86_SBB, RS, MD, MB, MI, MS) #define SBBWir(IM, RD) _ALUWir(X86_SBB, IM, RD) #define SBBWim(IM, MD, MB, MI, MS) _ALUWim(X86_SBB, IM, MD, MB, MI, MS) #define SBBLrr(RS, RD) _ALULrr(X86_SBB, RS, RD) #define SBBLmr(MD, MB, MI, MS, RD) _ALULmr(X86_SBB, MD, MB, MI, MS, RD) #define SBBLrm(RS, MD, MB, MI, MS) _ALULrm(X86_SBB, RS, MD, MB, MI, MS) #define SBBLir(IM, RD) _ALULir(X86_SBB, IM, RD) #define SBBLim(IM, MD, MB, MI, MS) _ALULim(X86_SBB, IM, MD, MB, MI, MS) #define SBBQrr(RS, RD) _ALUQrr(X86_SBB, RS, RD) #define SBBQmr(MD, MB, MI, MS, RD) _ALUQmr(X86_SBB, MD, MB, MI, MS, RD) #define SBBQrm(RS, MD, MB, MI, MS) _ALUQrm(X86_SBB, RS, MD, MB, MI, MS) #define SBBQir(IM, RD) _ALUQir(X86_SBB, IM, RD) #define SBBQim(IM, MD, MB, MI, MS) _ALUQim(X86_SBB, IM, MD, MB, MI, MS) #define SUBBrr(RS, RD) _ALUBrr(X86_SUB, RS, RD) #define SUBBmr(MD, MB, MI, MS, RD) _ALUBmr(X86_SUB, MD, MB, MI, MS, RD) #define SUBBrm(RS, MD, MB, MI, MS) _ALUBrm(X86_SUB, RS, MD, MB, MI, MS) #define SUBBir(IM, RD) _ALUBir(X86_SUB, IM, RD) #define SUBBim(IM, MD, MB, MI, MS) _ALUBim(X86_SUB, IM, MD, MB, MI, MS) #define SUBWrr(RS, RD) _ALUWrr(X86_SUB, RS, RD) #define SUBWmr(MD, MB, MI, MS, RD) _ALUWmr(X86_SUB, MD, MB, MI, MS, RD) #define SUBWrm(RS, MD, MB, MI, MS) _ALUWrm(X86_SUB, RS, MD, MB, MI, MS) #define SUBWir(IM, RD) _ALUWir(X86_SUB, IM, RD) #define SUBWim(IM, MD, MB, MI, MS) _ALUWim(X86_SUB, IM, MD, MB, MI, MS) #define SUBLrr(RS, RD) _ALULrr(X86_SUB, RS, RD) #define SUBLmr(MD, MB, MI, MS, RD) _ALULmr(X86_SUB, MD, MB, MI, MS, RD) #define SUBLrm(RS, MD, MB, MI, MS) _ALULrm(X86_SUB, RS, MD, MB, MI, MS) #define SUBLir(IM, RD) _ALULir(X86_SUB, IM, RD) #define SUBLim(IM, MD, MB, MI, MS) _ALULim(X86_SUB, IM, MD, MB, MI, MS) #define SUBQrr(RS, RD) _ALUQrr(X86_SUB, RS, RD) #define SUBQmr(MD, MB, MI, MS, RD) _ALUQmr(X86_SUB, MD, MB, MI, MS, RD) #define SUBQrm(RS, MD, MB, MI, MS) _ALUQrm(X86_SUB, RS, MD, MB, MI, MS) #define SUBQir(IM, RD) _ALUQir(X86_SUB, IM, RD) #define SUBQim(IM, MD, MB, MI, MS) _ALUQim(X86_SUB, IM, MD, MB, MI, MS) #define XORBrr(RS, RD) _ALUBrr(X86_XOR, RS, RD) #define XORBmr(MD, MB, MI, MS, RD) _ALUBmr(X86_XOR, MD, MB, MI, MS, RD) #define XORBrm(RS, MD, MB, MI, MS) _ALUBrm(X86_XOR, RS, MD, MB, MI, MS) #define XORBir(IM, RD) _ALUBir(X86_XOR, IM, RD) #define XORBim(IM, MD, MB, MI, MS) _ALUBim(X86_XOR, IM, MD, MB, MI, MS) #define XORWrr(RS, RD) _ALUWrr(X86_XOR, RS, RD) #define XORWmr(MD, MB, MI, MS, RD) _ALUWmr(X86_XOR, MD, MB, MI, MS, RD) #define XORWrm(RS, MD, MB, MI, MS) _ALUWrm(X86_XOR, RS, MD, MB, MI, MS) #define XORWir(IM, RD) _ALUWir(X86_XOR, IM, RD) #define XORWim(IM, MD, MB, MI, MS) _ALUWim(X86_XOR, IM, MD, MB, MI, MS) #define XORLrr(RS, RD) _ALULrr(X86_XOR, RS, RD) #define XORLmr(MD, MB, MI, MS, RD) _ALULmr(X86_XOR, MD, MB, MI, MS, RD) #define XORLrm(RS, MD, MB, MI, MS) _ALULrm(X86_XOR, RS, MD, MB, MI, MS) #define XORLir(IM, RD) _ALULir(X86_XOR, IM, RD) #define XORLim(IM, MD, MB, MI, MS) _ALULim(X86_XOR, IM, MD, MB, MI, MS) #define XORQrr(RS, RD) _ALUQrr(X86_XOR, RS, RD) #define XORQmr(MD, MB, MI, MS, RD) _ALUQmr(X86_XOR, MD, MB, MI, MS, RD) #define XORQrm(RS, MD, MB, MI, MS) _ALUQrm(X86_XOR, RS, MD, MB, MI, MS) #define XORQir(IM, RD) _ALUQir(X86_XOR, IM, RD) #define XORQim(IM, MD, MB, MI, MS) _ALUQim(X86_XOR, IM, MD, MB, MI, MS) /* --- Shift/Rotate instructions ------------------------------------------- */ enum { X86_ROL = 0, X86_ROR = 1, X86_RCL = 2, X86_RCR = 3, X86_SHL = 4, X86_SHR = 5, X86_SAR = 7, }; /* _format Opcd ,Mod ,r ,m ,mem=dsp+sib ,imm... */ #define _ROTSHIBir(OP,IM,RD) (X86_OPTIMIZE_ROTSHI && ((IM) == 1) ? \ (_REXBrr(0, RD), _O_Mrm (0xd0 ,_b11,OP,_r1(RD) )) : \ (_REXBrr(0, RD), _O_Mrm_B (0xc0 ,_b11,OP,_r1(RD) ,_u8(IM))) ) #define _ROTSHIBim(OP,IM,MD,MB,MI,MS) (X86_OPTIMIZE_ROTSHI && ((IM) == 1) ? \ (_REXBrm(0, MB, MI), _O_r_X (0xd0 ,OP ,MD,MB,MI,MS )) : \ (_REXBrm(0, MB, MI), _O_r_X_B (0xc0 ,OP ,MD,MB,MI,MS ,_u8(IM))) ) #define _ROTSHIBrr(OP,RS,RD) (((RS) == X86_CL) ? \ (_REXBrr(RS, RD), _O_Mrm (0xd2 ,_b11,OP,_r1(RD) )) : \ x86_emit_failure("source register must be CL" ) ) #define _ROTSHIBrm(OP,RS,MD,MB,MI,MS) (((RS) == X86_CL) ? \ (_REXBrm(RS, MB, MI), _O_r_X (0xd2 ,OP ,MD,MB,MI,MS )) : \ x86_emit_failure("source register must be CL" ) ) #define _ROTSHIWir(OP,IM,RD) (X86_OPTIMIZE_ROTSHI && ((IM) == 1) ? \ (_d16(), _REXLrr(0, RD), _O_Mrm (0xd1 ,_b11,OP,_r2(RD) )) : \ (_d16(), _REXLrr(0, RD), _O_Mrm_B (0xc1 ,_b11,OP,_r2(RD) ,_u8(IM))) ) #define _ROTSHIWim(OP,IM,MD,MB,MI,MS) (X86_OPTIMIZE_ROTSHI && ((IM) == 1) ? \ (_d16(), _REXLrm(0, MB, MI), _O_r_X (0xd1 ,OP ,MD,MB,MI,MS )) : \ (_d16(), _REXLrm(0, MB, MI), _O_r_X_B (0xc1 ,OP ,MD,MB,MI,MS ,_u8(IM))) ) #define _ROTSHIWrr(OP,RS,RD) (((RS) == X86_CL) ? \ (_d16(), _REXLrr(RS, RD), _O_Mrm (0xd3 ,_b11,OP,_r2(RD) )) : \ x86_emit_failure("source register must be CL" ) ) #define _ROTSHIWrm(OP,RS,MD,MB,MI,MS) (((RS) == X86_CL) ? \ (_d16(), _REXLrm(RS, MB, MI), _O_r_X (0xd3 ,OP ,MD,MB,MI,MS )) : \ x86_emit_failure("source register must be CL" ) ) #define _ROTSHILir(OP,IM,RD) (X86_OPTIMIZE_ROTSHI && ((IM) == 1) ? \ (_REXLrr(0, RD), _O_Mrm (0xd1 ,_b11,OP,_r4(RD) )) : \ (_REXLrr(0, RD), _O_Mrm_B (0xc1 ,_b11,OP,_r4(RD) ,_u8(IM))) ) #define _ROTSHILim(OP,IM,MD,MB,MI,MS) (X86_OPTIMIZE_ROTSHI && ((IM) == 1) ? \ (_REXLrm(0, MB, MI), _O_r_X (0xd1 ,OP ,MD,MB,MI,MS )) : \ (_REXLrm(0, MB, MI), _O_r_X_B (0xc1 ,OP ,MD,MB,MI,MS ,_u8(IM))) ) #define _ROTSHILrr(OP,RS,RD) (((RS) == X86_CL) ? \ (_REXLrr(RS, RD), _O_Mrm (0xd3 ,_b11,OP,_r4(RD) )) : \ x86_emit_failure("source register must be CL" ) ) #define _ROTSHILrm(OP,RS,MD,MB,MI,MS) (((RS) == X86_CL) ? \ (_REXLrm(RS, MB, MI), _O_r_X (0xd3 ,OP ,MD,MB,MI,MS )) : \ x86_emit_failure("source register must be CL" ) ) #define _ROTSHIQir(OP,IM,RD) (X86_OPTIMIZE_ROTSHI && ((IM) == 1) ? \ (_REXQrr(0, RD), _O_Mrm (0xd1 ,_b11,OP,_r8(RD) )) : \ (_REXQrr(0, RD), _O_Mrm_B (0xc1 ,_b11,OP,_r8(RD) ,_u8(IM))) ) #define _ROTSHIQim(OP,IM,MD,MB,MI,MS) (X86_OPTIMIZE_ROTSHI && ((IM) == 1) ? \ (_REXQrm(0, MB, MI), _O_r_X (0xd1 ,OP ,MD,MB,MI,MS )) : \ (_REXQrm(0, MB, MI), _O_r_X_B (0xc1 ,OP ,MD,MB,MI,MS ,_u8(IM))) ) #define _ROTSHIQrr(OP,RS,RD) (((RS) == X86_CL) ? \ (_REXQrr(RS, RD), _O_Mrm (0xd3 ,_b11,OP,_r8(RD) )) : \ x86_emit_failure("source register must be CL" ) ) #define _ROTSHIQrm(OP,RS,MD,MB,MI,MS) (((RS) == X86_CL) ? \ (_REXQrm(RS, MB, MI), _O_r_X (0xd3 ,OP ,MD,MB,MI,MS )) : \ x86_emit_failure("source register must be CL" ) ) #define ROLBir(IM, RD) _ROTSHIBir(X86_ROL, IM, RD) #define ROLBim(IM, MD, MB, MI, MS) _ROTSHIBim(X86_ROL, IM, MD, MB, MI, MS) #define ROLBrr(RS, RD) _ROTSHIBrr(X86_ROL, RS, RD) #define ROLBrm(RS, MD, MB, MI, MS) _ROTSHIBrm(X86_ROL, RS, MD, MB, MI, MS) #define ROLWir(IM, RD) _ROTSHIWir(X86_ROL, IM, RD) #define ROLWim(IM, MD, MB, MI, MS) _ROTSHIWim(X86_ROL, IM, MD, MB, MI, MS) #define ROLWrr(RS, RD) _ROTSHIWrr(X86_ROL, RS, RD) #define ROLWrm(RS, MD, MB, MI, MS) _ROTSHIWrm(X86_ROL, RS, MD, MB, MI, MS) #define ROLLir(IM, RD) _ROTSHILir(X86_ROL, IM, RD) #define ROLLim(IM, MD, MB, MI, MS) _ROTSHILim(X86_ROL, IM, MD, MB, MI, MS) #define ROLLrr(RS, RD) _ROTSHILrr(X86_ROL, RS, RD) #define ROLLrm(RS, MD, MB, MI, MS) _ROTSHILrm(X86_ROL, RS, MD, MB, MI, MS) #define ROLQir(IM, RD) _ROTSHIQir(X86_ROL, IM, RD) #define ROLQim(IM, MD, MB, MI, MS) _ROTSHIQim(X86_ROL, IM, MD, MB, MI, MS) #define ROLQrr(RS, RD) _ROTSHIQrr(X86_ROL, RS, RD) #define ROLQrm(RS, MD, MB, MI, MS) _ROTSHIQrm(X86_ROL, RS, MD, MB, MI, MS) #define RORBir(IM, RD) _ROTSHIBir(X86_ROR, IM, RD) #define RORBim(IM, MD, MB, MI, MS) _ROTSHIBim(X86_ROR, IM, MD, MB, MI, MS) #define RORBrr(RS, RD) _ROTSHIBrr(X86_ROR, RS, RD) #define RORBrm(RS, MD, MB, MI, MS) _ROTSHIBrm(X86_ROR, RS, MD, MB, MI, MS) #define RORWir(IM, RD) _ROTSHIWir(X86_ROR, IM, RD) #define RORWim(IM, MD, MB, MI, MS) _ROTSHIWim(X86_ROR, IM, MD, MB, MI, MS) #define RORWrr(RS, RD) _ROTSHIWrr(X86_ROR, RS, RD) #define RORWrm(RS, MD, MB, MI, MS) _ROTSHIWrm(X86_ROR, RS, MD, MB, MI, MS) #define RORLir(IM, RD) _ROTSHILir(X86_ROR, IM, RD) #define RORLim(IM, MD, MB, MI, MS) _ROTSHILim(X86_ROR, IM, MD, MB, MI, MS) #define RORLrr(RS, RD) _ROTSHILrr(X86_ROR, RS, RD) #define RORLrm(RS, MD, MB, MI, MS) _ROTSHILrm(X86_ROR, RS, MD, MB, MI, MS) #define RORQir(IM, RD) _ROTSHIQir(X86_ROR, IM, RD) #define RORQim(IM, MD, MB, MI, MS) _ROTSHIQim(X86_ROR, IM, MD, MB, MI, MS) #define RORQrr(RS, RD) _ROTSHIQrr(X86_ROR, RS, RD) #define RORQrm(RS, MD, MB, MI, MS) _ROTSHIQrm(X86_ROR, RS, MD, MB, MI, MS) #define RCLBir(IM, RD) _ROTSHIBir(X86_RCL, IM, RD) #define RCLBim(IM, MD, MB, MI, MS) _ROTSHIBim(X86_RCL, IM, MD, MB, MI, MS) #define RCLBrr(RS, RD) _ROTSHIBrr(X86_RCL, RS, RD) #define RCLBrm(RS, MD, MB, MI, MS) _ROTSHIBrm(X86_RCL, RS, MD, MB, MI, MS) #define RCLWir(IM, RD) _ROTSHIWir(X86_RCL, IM, RD) #define RCLWim(IM, MD, MB, MI, MS) _ROTSHIWim(X86_RCL, IM, MD, MB, MI, MS) #define RCLWrr(RS, RD) _ROTSHIWrr(X86_RCL, RS, RD) #define RCLWrm(RS, MD, MB, MI, MS) _ROTSHIWrm(X86_RCL, RS, MD, MB, MI, MS) #define RCLLir(IM, RD) _ROTSHILir(X86_RCL, IM, RD) #define RCLLim(IM, MD, MB, MI, MS) _ROTSHILim(X86_RCL, IM, MD, MB, MI, MS) #define RCLLrr(RS, RD) _ROTSHILrr(X86_RCL, RS, RD) #define RCLLrm(RS, MD, MB, MI, MS) _ROTSHILrm(X86_RCL, RS, MD, MB, MI, MS) #define RCLQir(IM, RD) _ROTSHIQir(X86_RCL, IM, RD) #define RCLQim(IM, MD, MB, MI, MS) _ROTSHIQim(X86_RCL, IM, MD, MB, MI, MS) #define RCLQrr(RS, RD) _ROTSHIQrr(X86_RCL, RS, RD) #define RCLQrm(RS, MD, MB, MI, MS) _ROTSHIQrm(X86_RCL, RS, MD, MB, MI, MS) #define RCRBir(IM, RD) _ROTSHIBir(X86_RCR, IM, RD) #define RCRBim(IM, MD, MB, MI, MS) _ROTSHIBim(X86_RCR, IM, MD, MB, MI, MS) #define RCRBrr(RS, RD) _ROTSHIBrr(X86_RCR, RS, RD) #define RCRBrm(RS, MD, MB, MI, MS) _ROTSHIBrm(X86_RCR, RS, MD, MB, MI, MS) #define RCRWir(IM, RD) _ROTSHIWir(X86_RCR, IM, RD) #define RCRWim(IM, MD, MB, MI, MS) _ROTSHIWim(X86_RCR, IM, MD, MB, MI, MS) #define RCRWrr(RS, RD) _ROTSHIWrr(X86_RCR, RS, RD) #define RCRWrm(RS, MD, MB, MI, MS) _ROTSHIWrm(X86_RCR, RS, MD, MB, MI, MS) #define RCRLir(IM, RD) _ROTSHILir(X86_RCR, IM, RD) #define RCRLim(IM, MD, MB, MI, MS) _ROTSHILim(X86_RCR, IM, MD, MB, MI, MS) #define RCRLrr(RS, RD) _ROTSHILrr(X86_RCR, RS, RD) #define RCRLrm(RS, MD, MB, MI, MS) _ROTSHILrm(X86_RCR, RS, MD, MB, MI, MS) #define RCRQir(IM, RD) _ROTSHIQir(X86_RCR, IM, RD) #define RCRQim(IM, MD, MB, MI, MS) _ROTSHIQim(X86_RCR, IM, MD, MB, MI, MS) #define RCRQrr(RS, RD) _ROTSHIQrr(X86_RCR, RS, RD) #define RCRQrm(RS, MD, MB, MI, MS) _ROTSHIQrm(X86_RCR, RS, MD, MB, MI, MS) #define SHLBir(IM, RD) _ROTSHIBir(X86_SHL, IM, RD) #define SHLBim(IM, MD, MB, MI, MS) _ROTSHIBim(X86_SHL, IM, MD, MB, MI, MS) #define SHLBrr(RS, RD) _ROTSHIBrr(X86_SHL, RS, RD) #define SHLBrm(RS, MD, MB, MI, MS) _ROTSHIBrm(X86_SHL, RS, MD, MB, MI, MS) #define SHLWir(IM, RD) _ROTSHIWir(X86_SHL, IM, RD) #define SHLWim(IM, MD, MB, MI, MS) _ROTSHIWim(X86_SHL, IM, MD, MB, MI, MS) #define SHLWrr(RS, RD) _ROTSHIWrr(X86_SHL, RS, RD) #define SHLWrm(RS, MD, MB, MI, MS) _ROTSHIWrm(X86_SHL, RS, MD, MB, MI, MS) #define SHLLir(IM, RD) _ROTSHILir(X86_SHL, IM, RD) #define SHLLim(IM, MD, MB, MI, MS) _ROTSHILim(X86_SHL, IM, MD, MB, MI, MS) #define SHLLrr(RS, RD) _ROTSHILrr(X86_SHL, RS, RD) #define SHLLrm(RS, MD, MB, MI, MS) _ROTSHILrm(X86_SHL, RS, MD, MB, MI, MS) #define SHLQir(IM, RD) _ROTSHIQir(X86_SHL, IM, RD) #define SHLQim(IM, MD, MB, MI, MS) _ROTSHIQim(X86_SHL, IM, MD, MB, MI, MS) #define SHLQrr(RS, RD) _ROTSHIQrr(X86_SHL, RS, RD) #define SHLQrm(RS, MD, MB, MI, MS) _ROTSHIQrm(X86_SHL, RS, MD, MB, MI, MS) #define SHRBir(IM, RD) _ROTSHIBir(X86_SHR, IM, RD) #define SHRBim(IM, MD, MB, MI, MS) _ROTSHIBim(X86_SHR, IM, MD, MB, MI, MS) #define SHRBrr(RS, RD) _ROTSHIBrr(X86_SHR, RS, RD) #define SHRBrm(RS, MD, MB, MI, MS) _ROTSHIBrm(X86_SHR, RS, MD, MB, MI, MS) #define SHRWir(IM, RD) _ROTSHIWir(X86_SHR, IM, RD) #define SHRWim(IM, MD, MB, MI, MS) _ROTSHIWim(X86_SHR, IM, MD, MB, MI, MS) #define SHRWrr(RS, RD) _ROTSHIWrr(X86_SHR, RS, RD) #define SHRWrm(RS, MD, MB, MI, MS) _ROTSHIWrm(X86_SHR, RS, MD, MB, MI, MS) #define SHRLir(IM, RD) _ROTSHILir(X86_SHR, IM, RD) #define SHRLim(IM, MD, MB, MI, MS) _ROTSHILim(X86_SHR, IM, MD, MB, MI, MS) #define SHRLrr(RS, RD) _ROTSHILrr(X86_SHR, RS, RD) #define SHRLrm(RS, MD, MB, MI, MS) _ROTSHILrm(X86_SHR, RS, MD, MB, MI, MS) #define SHRQir(IM, RD) _ROTSHIQir(X86_SHR, IM, RD) #define SHRQim(IM, MD, MB, MI, MS) _ROTSHIQim(X86_SHR, IM, MD, MB, MI, MS) #define SHRQrr(RS, RD) _ROTSHIQrr(X86_SHR, RS, RD) #define SHRQrm(RS, MD, MB, MI, MS) _ROTSHIQrm(X86_SHR, RS, MD, MB, MI, MS) #define SALBir SHLBir #define SALBim SHLBim #define SALBrr SHLBrr #define SALBrm SHLBrm #define SALWir SHLWir #define SALWim SHLWim #define SALWrr SHLWrr #define SALWrm SHLWrm #define SALLir SHLLir #define SALLim SHLLim #define SALLrr SHLLrr #define SALLrm SHLLrm #define SALQir SHLQir #define SALQim SHLQim #define SALQrr SHLQrr #define SALQrm SHLQrm #define SARBir(IM, RD) _ROTSHIBir(X86_SAR, IM, RD) #define SARBim(IM, MD, MB, MI, MS) _ROTSHIBim(X86_SAR, IM, MD, MB, MI, MS) #define SARBrr(RS, RD) _ROTSHIBrr(X86_SAR, RS, RD) #define SARBrm(RS, MD, MB, MI, MS) _ROTSHIBrm(X86_SAR, RS, MD, MB, MI, MS) #define SARWir(IM, RD) _ROTSHIWir(X86_SAR, IM, RD) #define SARWim(IM, MD, MB, MI, MS) _ROTSHIWim(X86_SAR, IM, MD, MB, MI, MS) #define SARWrr(RS, RD) _ROTSHIWrr(X86_SAR, RS, RD) #define SARWrm(RS, MD, MB, MI, MS) _ROTSHIWrm(X86_SAR, RS, MD, MB, MI, MS) #define SARLir(IM, RD) _ROTSHILir(X86_SAR, IM, RD) #define SARLim(IM, MD, MB, MI, MS) _ROTSHILim(X86_SAR, IM, MD, MB, MI, MS) #define SARLrr(RS, RD) _ROTSHILrr(X86_SAR, RS, RD) #define SARLrm(RS, MD, MB, MI, MS) _ROTSHILrm(X86_SAR, RS, MD, MB, MI, MS) #define SARQir(IM, RD) _ROTSHIQir(X86_SAR, IM, RD) #define SARQim(IM, MD, MB, MI, MS) _ROTSHIQim(X86_SAR, IM, MD, MB, MI, MS) #define SARQrr(RS, RD) _ROTSHIQrr(X86_SAR, RS, RD) #define SARQrm(RS, MD, MB, MI, MS) _ROTSHIQrm(X86_SAR, RS, MD, MB, MI, MS) /* --- Bit test instructions ----------------------------------------------- */ enum { X86_BT = 4, X86_BTS = 5, X86_BTR = 6, X86_BTC = 7, }; /* _format Opcd ,Mod ,r ,m ,mem=dsp+sib ,imm... */ #define _BTWir(OP, IM, RD) (_d16(), _REXLrr(0, RD), _OO_Mrm_B (0x0fba ,_b11,OP ,_r2(RD) ,_u8(IM))) #define _BTWim(OP, IM, MD, MB, MI, MS) (_d16(), _REXLrm(0, MB, MI), _OO_r_X_B (0x0fba ,OP ,MD,MB,MI,MS ,_u8(IM))) #define _BTWrr(OP, RS, RD) (_d16(), _REXLrr(RS, RD), _OO_Mrm (0x0f83|((OP)<<3),_b11,_r2(RS),_r2(RD) )) #define _BTWrm(OP, RS, MD, MB, MI, MS) (_d16(), _REXLrm(RS, MB, MI), _OO_r_X (0x0f83|((OP)<<3) ,_r2(RS) ,MD,MB,MI,MS )) #define _BTLir(OP, IM, RD) (_REXLrr(0, RD), _OO_Mrm_B (0x0fba ,_b11,OP ,_r4(RD) ,_u8(IM))) #define _BTLim(OP, IM, MD, MB, MI, MS) (_REXLrm(0, MB, MI), _OO_r_X_B (0x0fba ,OP ,MD,MB,MI,MS ,_u8(IM))) #define _BTLrr(OP, RS, RD) (_REXLrr(RS, RD), _OO_Mrm (0x0f83|((OP)<<3),_b11,_r4(RS),_r4(RD) )) #define _BTLrm(OP, RS, MD, MB, MI, MS) (_REXLrm(RS, MB, MI), _OO_r_X (0x0f83|((OP)<<3) ,_r4(RS) ,MD,MB,MI,MS )) #define _BTQir(OP, IM, RD) (_REXQrr(0, RD), _OO_Mrm_B (0x0fba ,_b11,OP ,_r8(RD) ,_u8(IM))) #define _BTQim(OP, IM, MD, MB, MI, MS) (_REXQrm(0, MB, MI), _OO_r_X_B (0x0fba ,OP ,MD,MB,MI,MS ,_u8(IM))) #define _BTQrr(OP, RS, RD) (_REXQrr(RS, RD), _OO_Mrm (0x0f83|((OP)<<3),_b11,_r8(RS),_r8(RD) )) #define _BTQrm(OP, RS, MD, MB, MI, MS) (_REXQrm(RS, MB, MI), _OO_r_X (0x0f83|((OP)<<3) ,_r8(RS) ,MD,MB,MI,MS )) #define BTWir(IM, RD) _BTWir(X86_BT, IM, RD) #define BTWim(IM, MD, MB, MI, MS) _BTWim(X86_BT, IM, MD, MB, MI, MS) #define BTWrr(RS, RD) _BTWrr(X86_BT, RS, RD) #define BTWrm(RS, MD, MB, MI, MS) _BTWrm(X86_BT, RS, MD, MB, MI, MS) #define BTLir(IM, RD) _BTLir(X86_BT, IM, RD) #define BTLim(IM, MD, MB, MI, MS) _BTLim(X86_BT, IM, MD, MB, MI, MS) #define BTLrr(RS, RD) _BTLrr(X86_BT, RS, RD) #define BTLrm(RS, MD, MB, MI, MS) _BTLrm(X86_BT, RS, MD, MB, MI, MS) #define BTQir(IM, RD) _BTQir(X86_BT, IM, RD) #define BTQim(IM, MD, MB, MI, MS) _BTQim(X86_BT, IM, MD, MB, MI, MS) #define BTQrr(RS, RD) _BTQrr(X86_BT, RS, RD) #define BTQrm(RS, MD, MB, MI, MS) _BTQrm(X86_BT, RS, MD, MB, MI, MS) #define BTCWir(IM, RD) _BTWir(X86_BTC, IM, RD) #define BTCWim(IM, MD, MB, MI, MS) _BTWim(X86_BTC, IM, MD, MB, MI, MS) #define BTCWrr(RS, RD) _BTWrr(X86_BTC, RS, RD) #define BTCWrm(RS, MD, MB, MI, MS) _BTWrm(X86_BTC, RS, MD, MB, MI, MS) #define BTCLir(IM, RD) _BTLir(X86_BTC, IM, RD) #define BTCLim(IM, MD, MB, MI, MS) _BTLim(X86_BTC, IM, MD, MB, MI, MS) #define BTCLrr(RS, RD) _BTLrr(X86_BTC, RS, RD) #define BTCLrm(RS, MD, MB, MI, MS) _BTLrm(X86_BTC, RS, MD, MB, MI, MS) #define BTCQir(IM, RD) _BTQir(X86_BTC, IM, RD) #define BTCQim(IM, MD, MB, MI, MS) _BTQim(X86_BTC, IM, MD, MB, MI, MS) #define BTCQrr(RS, RD) _BTQrr(X86_BTC, RS, RD) #define BTCQrm(RS, MD, MB, MI, MS) _BTQrm(X86_BTC, RS, MD, MB, MI, MS) #define BTRWir(IM, RD) _BTWir(X86_BTR, IM, RD) #define BTRWim(IM, MD, MB, MI, MS) _BTWim(X86_BTR, IM, MD, MB, MI, MS) #define BTRWrr(RS, RD) _BTWrr(X86_BTR, RS, RD) #define BTRWrm(RS, MD, MB, MI, MS) _BTWrm(X86_BTR, RS, MD, MB, MI, MS) #define BTRLir(IM, RD) _BTLir(X86_BTR, IM, RD) #define BTRLim(IM, MD, MB, MI, MS) _BTLim(X86_BTR, IM, MD, MB, MI, MS) #define BTRLrr(RS, RD) _BTLrr(X86_BTR, RS, RD) #define BTRLrm(RS, MD, MB, MI, MS) _BTLrm(X86_BTR, RS, MD, MB, MI, MS) #define BTRQir(IM, RD) _BTQir(X86_BTR, IM, RD) #define BTRQim(IM, MD, MB, MI, MS) _BTQim(X86_BTR, IM, MD, MB, MI, MS) #define BTRQrr(RS, RD) _BTQrr(X86_BTR, RS, RD) #define BTRQrm(RS, MD, MB, MI, MS) _BTQrm(X86_BTR, RS, MD, MB, MI, MS) #define BTSWir(IM, RD) _BTWir(X86_BTS, IM, RD) #define BTSWim(IM, MD, MB, MI, MS) _BTWim(X86_BTS, IM, MD, MB, MI, MS) #define BTSWrr(RS, RD) _BTWrr(X86_BTS, RS, RD) #define BTSWrm(RS, MD, MB, MI, MS) _BTWrm(X86_BTS, RS, MD, MB, MI, MS) #define BTSLir(IM, RD) _BTLir(X86_BTS, IM, RD) #define BTSLim(IM, MD, MB, MI, MS) _BTLim(X86_BTS, IM, MD, MB, MI, MS) #define BTSLrr(RS, RD) _BTLrr(X86_BTS, RS, RD) #define BTSLrm(RS, MD, MB, MI, MS) _BTLrm(X86_BTS, RS, MD, MB, MI, MS) #define BTSQir(IM, RD) _BTQir(X86_BTS, IM, RD) #define BTSQim(IM, MD, MB, MI, MS) _BTQim(X86_BTS, IM, MD, MB, MI, MS) #define BTSQrr(RS, RD) _BTQrr(X86_BTS, RS, RD) #define BTSQrm(RS, MD, MB, MI, MS) _BTQrm(X86_BTS, RS, MD, MB, MI, MS) /* --- Move instructions --------------------------------------------------- */ /* _format Opcd ,Mod ,r ,m ,mem=dsp+sib ,imm... */ #define MOVBrr(RS, RD) (_REXBrr(RS, RD), _O_Mrm (0x88 ,_b11,_r1(RS),_r1(RD) )) #define MOVBmr(MD, MB, MI, MS, RD) (_REXBmr(MB, MI, RD), _O_r_X (0x8a ,_r1(RD) ,MD,MB,MI,MS )) #define MOVBrm(RS, MD, MB, MI, MS) (_REXBrm(RS, MB, MI), _O_r_X (0x88 ,_r1(RS) ,MD,MB,MI,MS )) #define MOVBir(IM, R) (_REXBrr(0, R), _Or_B (0xb0,_r1(R) ,_su8(IM))) #define MOVBim(IM, MD, MB, MI, MS) (_REXBrm(0, MB, MI), _O_X_B (0xc6 ,MD,MB,MI,MS ,_su8(IM))) #define MOVWrr(RS, RD) (_d16(), _REXLrr(RS, RD), _O_Mrm (0x89 ,_b11,_r2(RS),_r2(RD) )) #define MOVWmr(MD, MB, MI, MS, RD) (_d16(), _REXLmr(MB, MI, RD), _O_r_X (0x8b ,_r2(RD) ,MD,MB,MI,MS )) #define MOVWrm(RS, MD, MB, MI, MS) (_d16(), _REXLrm(RS, MB, MI), _O_r_X (0x89 ,_r2(RS) ,MD,MB,MI,MS )) #define MOVWir(IM, R) (_d16(), _REXLrr(0, R), _Or_W (0xb8,_r2(R) ,_su16(IM))) #define MOVWim(IM, MD, MB, MI, MS) (_d16(), _REXLrm(0, MB, MI), _O_X_W (0xc7 ,MD,MB,MI,MS ,_su16(IM))) #define MOVLrr(RS, RD) (_REXLrr(RS, RD), _O_Mrm (0x89 ,_b11,_r4(RS),_r4(RD) )) #define MOVLmr(MD, MB, MI, MS, RD) (_REXLmr(MB, MI, RD), _O_r_X (0x8b ,_r4(RD) ,MD,MB,MI,MS )) #define MOVLrm(RS, MD, MB, MI, MS) (_REXLrm(RS, MB, MI), _O_r_X (0x89 ,_r4(RS) ,MD,MB,MI,MS )) #define MOVLir(IM, R) (_REXLrr(0, R), _Or_L (0xb8,_r4(R) ,IM )) #define MOVLim(IM, MD, MB, MI, MS) (_REXLrm(0, MB, MI), _O_X_L (0xc7 ,MD,MB,MI,MS ,IM )) #define MOVQrr(RS, RD) (_REXQrr(RS, RD), _O_Mrm (0x89 ,_b11,_r8(RS),_r8(RD) )) #define MOVQmr(MD, MB, MI, MS, RD) (_REXQmr(MB, MI, RD), _O_r_X (0x8b ,_r8(RD) ,MD,MB,MI,MS )) #define MOVQrm(RS, MD, MB, MI, MS) (_REXQrm(RS, MB, MI), _O_r_X (0x89 ,_r8(RS) ,MD,MB,MI,MS )) #define MOVQir(IM, R) (_REXQrr(0, R), _Or_Q (0xb8,_r8(R) ,IM )) #define MOVQim(IM, MD, MB, MI, MS) (_REXQrm(0, MB, MI), _O_X_L (0xc7 ,MD,MB,MI,MS ,IM )) /* --- Unary and Multiply/Divide instructions ------------------------------ */ enum { X86_NOT = 2, X86_NEG = 3, X86_MUL = 4, X86_IMUL = 5, X86_DIV = 6, X86_IDIV = 7, }; /* _format Opcd ,Mod ,r ,m ,mem=dsp+sib ,imm... */ #define _UNARYBr(OP, RS) (_REXBrr(0, RS), _O_Mrm (0xf6 ,_b11,OP ,_r1(RS) )) #define _UNARYBm(OP, MD, MB, MI, MS) (_REXBrm(0, MB, MI), _O_r_X (0xf6 ,OP ,MD,MB,MI,MS )) #define _UNARYWr(OP, RS) (_d16(), _REXLrr(0, RS), _O_Mrm (0xf7 ,_b11,OP ,_r2(RS) )) #define _UNARYWm(OP, MD, MB, MI, MS) (_d16(), _REXLmr(MB, MI, 0), _O_r_X (0xf7 ,OP ,MD,MB,MI,MS )) #define _UNARYLr(OP, RS) (_REXLrr(0, RS), _O_Mrm (0xf7 ,_b11,OP ,_r4(RS) )) #define _UNARYLm(OP, MD, MB, MI, MS) (_REXLmr(MB, MI, 0), _O_r_X (0xf7 ,OP ,MD,MB,MI,MS )) #define _UNARYQr(OP, RS) (_REXQrr(0, RS), _O_Mrm (0xf7 ,_b11,OP ,_r8(RS) )) #define _UNARYQm(OP, MD, MB, MI, MS) (_REXQmr(MB, MI, 0), _O_r_X (0xf7 ,OP ,MD,MB,MI,MS )) #define NOTBr(RS) _UNARYBr(X86_NOT, RS) #define NOTBm(MD, MB, MI, MS) _UNARYBm(X86_NOT, MD, MB, MI, MS) #define NOTWr(RS) _UNARYWr(X86_NOT, RS) #define NOTWm(MD, MB, MI, MS) _UNARYWm(X86_NOT, MD, MB, MI, MS) #define NOTLr(RS) _UNARYLr(X86_NOT, RS) #define NOTLm(MD, MB, MI, MS) _UNARYLm(X86_NOT, MD, MB, MI, MS) #define NOTQr(RS) _UNARYQr(X86_NOT, RS) #define NOTQm(MD, MB, MI, MS) _UNARYQm(X86_NOT, MD, MB, MI, MS) #define NEGBr(RS) _UNARYBr(X86_NEG, RS) #define NEGBm(MD, MB, MI, MS) _UNARYBm(X86_NEG, MD, MB, MI, MS) #define NEGWr(RS) _UNARYWr(X86_NEG, RS) #define NEGWm(MD, MB, MI, MS) _UNARYWm(X86_NEG, MD, MB, MI, MS) #define NEGLr(RS) _UNARYLr(X86_NEG, RS) #define NEGLm(MD, MB, MI, MS) _UNARYLm(X86_NEG, MD, MB, MI, MS) #define NEGQr(RS) _UNARYQr(X86_NEG, RS) #define NEGQm(MD, MB, MI, MS) _UNARYQm(X86_NEG, MD, MB, MI, MS) #define MULBr(RS) _UNARYBr(X86_MUL, RS) #define MULBm(MD, MB, MI, MS) _UNARYBm(X86_MUL, MD, MB, MI, MS) #define MULWr(RS) _UNARYWr(X86_MUL, RS) #define MULWm(MD, MB, MI, MS) _UNARYWm(X86_MUL, MD, MB, MI, MS) #define MULLr(RS) _UNARYLr(X86_MUL, RS) #define MULLm(MD, MB, MI, MS) _UNARYLm(X86_MUL, MD, MB, MI, MS) #define MULQr(RS) _UNARYQr(X86_MUL, RS) #define MULQm(MD, MB, MI, MS) _UNARYQm(X86_MUL, MD, MB, MI, MS) #define IMULBr(RS) _UNARYBr(X86_IMUL, RS) #define IMULBm(MD, MB, MI, MS) _UNARYBm(X86_IMUL, MD, MB, MI, MS) #define IMULWr(RS) _UNARYWr(X86_IMUL, RS) #define IMULWm(MD, MB, MI, MS) _UNARYWm(X86_IMUL, MD, MB, MI, MS) #define IMULLr(RS) _UNARYLr(X86_IMUL, RS) #define IMULLm(MD, MB, MI, MS) _UNARYLm(X86_IMUL, MD, MB, MI, MS) #define IMULQr(RS) _UNARYQr(X86_IMUL, RS) #define IMULQm(MD, MB, MI, MS) _UNARYQm(X86_IMUL, MD, MB, MI, MS) #define DIVBr(RS) _UNARYBr(X86_DIV, RS) #define DIVBm(MD, MB, MI, MS) _UNARYBm(X86_DIV, MD, MB, MI, MS) #define DIVWr(RS) _UNARYWr(X86_DIV, RS) #define DIVWm(MD, MB, MI, MS) _UNARYWm(X86_DIV, MD, MB, MI, MS) #define DIVLr(RS) _UNARYLr(X86_DIV, RS) #define DIVLm(MD, MB, MI, MS) _UNARYLm(X86_DIV, MD, MB, MI, MS) #define DIVQr(RS) _UNARYQr(X86_DIV, RS) #define DIVQm(MD, MB, MI, MS) _UNARYQm(X86_DIV, MD, MB, MI, MS) #define IDIVBr(RS) _UNARYBr(X86_IDIV, RS) #define IDIVBm(MD, MB, MI, MS) _UNARYBm(X86_IDIV, MD, MB, MI, MS) #define IDIVWr(RS) _UNARYWr(X86_IDIV, RS) #define IDIVWm(MD, MB, MI, MS) _UNARYWm(X86_IDIV, MD, MB, MI, MS) #define IDIVLr(RS) _UNARYLr(X86_IDIV, RS) #define IDIVLm(MD, MB, MI, MS) _UNARYLm(X86_IDIV, MD, MB, MI, MS) #define IDIVQr(RS) _UNARYQr(X86_IDIV, RS) #define IDIVQm(MD, MB, MI, MS) _UNARYQm(X86_IDIV, MD, MB, MI, MS) /* _format Opcd ,Mod ,r ,m ,mem=dsp+sib ,imm... */ #define IMULWrr(RS, RD) (_d16(), _REXLrr(RD, RS), _OO_Mrm (0x0faf ,_b11,_r2(RD),_r2(RS) )) #define IMULWmr(MD, MB, MI, MS, RD) (_d16(), _REXLmr(MB, MI, RD), _OO_r_X (0x0faf ,_r2(RD) ,MD,MB,MI,MS )) #define IMULWirr(IM,RS,RD) (_d16(), _REXLrr(RS, RD), _Os_Mrm_sW (0x69 ,_b11,_r2(RS),_r2(RD) ,_su16(IM) )) #define IMULWimr(IM,MD,MB,MI,MS,RD) (_d16(), _REXLmr(MB, MI, RD), _Os_r_X_sW (0x69 ,_r2(RD) ,MD,MB,MI,MS ,_su16(IM) )) #define IMULLir(IM, RD) (_REXLrr(0, RD), _Os_Mrm_sL (0x69 ,_b11,_r4(RD),_r4(RD) ,IM )) #define IMULLrr(RS, RD) (_REXLrr(RD, RS), _OO_Mrm (0x0faf ,_b11,_r4(RD),_r4(RS) )) #define IMULLmr(MD, MB, MI, MS, RD) (_REXLmr(MB, MI, RD), _OO_r_X (0x0faf ,_r4(RD) ,MD,MB,MI,MS )) #define IMULQir(IM, RD) (_REXQrr(0, RD), _Os_Mrm_sL (0x69 ,_b11,_r8(RD),_r8(RD) ,IM )) #define IMULQrr(RS, RD) (_REXQrr(RD, RS), _OO_Mrm (0x0faf ,_b11,_r8(RD),_r8(RS) )) #define IMULQmr(MD, MB, MI, MS, RD) (_REXQmr(MB, MI, RD), _OO_r_X (0x0faf ,_r8(RD) ,MD,MB,MI,MS )) #define IMULLirr(IM,RS,RD) (_REXLrr(RS, RD), _Os_Mrm_sL (0x69 ,_b11,_r4(RS),_r4(RD) ,IM )) #define IMULLimr(IM,MD,MB,MI,MS,RD) (_REXLmr(MB, MI, RD), _Os_r_X_sL (0x69 ,_r4(RD) ,MD,MB,MI,MS ,IM )) #define IMULQirr(IM,RS,RD) (_REXQrr(RS, RD), _Os_Mrm_sL (0x69 ,_b11,_r8(RS),_r8(RD) ,IM )) #define IMULQimr(IM,MD,MB,MI,MS,RD) (_REXQmr(MB, MI, RD), _Os_r_X_sL (0x69 ,_r8(RD) ,MD,MB,MI,MS ,IM )) /* --- Control Flow related instructions ----------------------------------- */ enum { X86_CC_O = 0x0, X86_CC_NO = 0x1, X86_CC_NAE = 0x2, X86_CC_B = 0x2, X86_CC_C = 0x2, X86_CC_AE = 0x3, X86_CC_NB = 0x3, X86_CC_NC = 0x3, X86_CC_E = 0x4, X86_CC_Z = 0x4, X86_CC_NE = 0x5, X86_CC_NZ = 0x5, X86_CC_BE = 0x6, X86_CC_NA = 0x6, X86_CC_A = 0x7, X86_CC_NBE = 0x7, X86_CC_S = 0x8, X86_CC_NS = 0x9, X86_CC_P = 0xa, X86_CC_PE = 0xa, X86_CC_NP = 0xb, X86_CC_PO = 0xb, X86_CC_L = 0xc, X86_CC_NGE = 0xc, X86_CC_GE = 0xd, X86_CC_NL = 0xd, X86_CC_LE = 0xe, X86_CC_NG = 0xe, X86_CC_G = 0xf, X86_CC_NLE = 0xf, }; /* _format Opcd ,Mod ,r ,m ,mem=dsp+sib ,imm... */ // FIXME: no prefix is availble to encode a 32-bit operand size in 64-bit mode #define CALLm(M) _O_D32 (0xe8 ,(int)(M) ) #define _CALLLsr(R) (_REXLrr(0, R), _O_Mrm (0xff ,_b11,_b010,_r4(R) )) #define _CALLQsr(R) (_REXLrr(0, R), _O_Mrm (0xff ,_b11,_b010,_r8(R) )) #define CALLsr(R) ( X86_TARGET_64BIT ? _CALLQsr(R) : _CALLLsr(R)) #define CALLsm(D,B,I,S) (_REXLrm(0, B, I), _O_r_X (0xff ,_b010 ,(int)(D),B,I,S )) // FIXME: no prefix is availble to encode a 32-bit operand size in 64-bit mode #define JMPSm(M) _O_D8 (0xeb ,(int)(M) ) #define JMPm(M) _O_D32 (0xe9 ,(int)(M) ) #define _JMPLsr(R) (_REXLrr(0, R), _O_Mrm (0xff ,_b11,_b100,_r4(R) )) #define _JMPQsr(R) (_REXLrr(0, R), _O_Mrm (0xff ,_b11,_b100,_r8(R) )) #define JMPsr(R) ( X86_TARGET_64BIT ? _JMPQsr(R) : _JMPLsr(R)) #define JMPsm(D,B,I,S) (_REXLrm(0, B, I), _O_r_X (0xff ,_b100 ,(int)(D),B,I,S )) /* _format Opcd ,Mod ,r ,m ,mem=dsp+sib ,imm... */ #define JCCSii(CC, D) _O_B (0x70|(CC) ,(_sc)(int)(D) ) #define JCCSim(CC, D) _O_D8 (0x70|(CC) ,(int)(D) ) #define JOSm(D) JCCSim(X86_CC_O, D) #define JNOSm(D) JCCSim(X86_CC_NO, D) #define JBSm(D) JCCSim(X86_CC_B, D) #define JNAESm(D) JCCSim(X86_CC_NAE, D) #define JNBSm(D) JCCSim(X86_CC_NB, D) #define JAESm(D) JCCSim(X86_CC_AE, D) #define JESm(D) JCCSim(X86_CC_E, D) #define JZSm(D) JCCSim(X86_CC_Z, D) #define JNESm(D) JCCSim(X86_CC_NE, D) #define JNZSm(D) JCCSim(X86_CC_NZ, D) #define JBESm(D) JCCSim(X86_CC_BE, D) #define JNASm(D) JCCSim(X86_CC_NA, D) #define JNBESm(D) JCCSim(X86_CC_NBE, D) #define JASm(D) JCCSim(X86_CC_A, D) #define JSSm(D) JCCSim(X86_CC_S, D) #define JNSSm(D) JCCSim(X86_CC_NS, D) #define JPSm(D) JCCSim(X86_CC_P, D) #define JPESm(D) JCCSim(X86_CC_PE, D) #define JNPSm(D) JCCSim(X86_CC_NP, D) #define JPOSm(D) JCCSim(X86_CC_PO, D) #define JLSm(D) JCCSim(X86_CC_L, D) #define JNGESm(D) JCCSim(X86_CC_NGE, D) #define JNLSm(D) JCCSim(X86_CC_NL, D) #define JGESm(D) JCCSim(X86_CC_GE, D) #define JLESm(D) JCCSim(X86_CC_LE, D) #define JNGSm(D) JCCSim(X86_CC_NG, D) #define JNLESm(D) JCCSim(X86_CC_NLE, D) #define JGSm(D) JCCSim(X86_CC_G, D) /* _format Opcd ,Mod ,r ,m ,mem=dsp+sib ,imm... */ #define JCCii(CC, D) _OO_L (0x0f80|(CC) ,(int)(D) ) #define JCCim(CC, D) _OO_D32 (0x0f80|(CC) ,(int)(D) ) #define JOm(D) JCCim(X86_CC_O, D) #define JNOm(D) JCCim(X86_CC_NO, D) #define JBm(D) JCCim(X86_CC_B, D) #define JNAEm(D) JCCim(X86_CC_NAE, D) #define JNBm(D) JCCim(X86_CC_NB, D) #define JAEm(D) JCCim(X86_CC_AE, D) #define JEm(D) JCCim(X86_CC_E, D) #define JZm(D) JCCim(X86_CC_Z, D) #define JNEm(D) JCCim(X86_CC_NE, D) #define JNZm(D) JCCim(X86_CC_NZ, D) #define JBEm(D) JCCim(X86_CC_BE, D) #define JNAm(D) JCCim(X86_CC_NA, D) #define JNBEm(D) JCCim(X86_CC_NBE, D) #define JAm(D) JCCim(X86_CC_A, D) #define JSm(D) JCCim(X86_CC_S, D) #define JNSm(D) JCCim(X86_CC_NS, D) #define JPm(D) JCCim(X86_CC_P, D) #define JPEm(D) JCCim(X86_CC_PE, D) #define JNPm(D) JCCim(X86_CC_NP, D) #define JPOm(D) JCCim(X86_CC_PO, D) #define JLm(D) JCCim(X86_CC_L, D) #define JNGEm(D) JCCim(X86_CC_NGE, D) #define JNLm(D) JCCim(X86_CC_NL, D) #define JGEm(D) JCCim(X86_CC_GE, D) #define JLEm(D) JCCim(X86_CC_LE, D) #define JNGm(D) JCCim(X86_CC_NG, D) #define JNLEm(D) JCCim(X86_CC_NLE, D) #define JGm(D) JCCim(X86_CC_G, D) /* _format Opcd ,Mod ,r ,m ,mem=dsp+sib ,imm... */ #define SETCCir(CC, RD) (_REXBrr(0, RD), _OO_Mrm (0x0f90|(CC) ,_b11,_b000,_r1(RD) )) #define SETOr(RD) SETCCir(X86_CC_O, RD) #define SETNOr(RD) SETCCir(X86_CC_NO, RD) #define SETBr(RD) SETCCir(X86_CC_B, RD) #define SETNAEr(RD) SETCCir(X86_CC_NAE, RD) #define SETNBr(RD) SETCCir(X86_CC_NB, RD) #define SETAEr(RD) SETCCir(X86_CC_AE, RD) #define SETEr(RD) SETCCir(X86_CC_E, RD) #define SETZr(RD) SETCCir(X86_CC_Z, RD) #define SETNEr(RD) SETCCir(X86_CC_NE, RD) #define SETNZr(RD) SETCCir(X86_CC_NZ, RD) #define SETBEr(RD) SETCCir(X86_CC_BE, RD) #define SETNAr(RD) SETCCir(X86_CC_NA, RD) #define SETNBEr(RD) SETCCir(X86_CC_NBE, RD) #define SETAr(RD) SETCCir(X86_CC_A, RD) #define SETSr(RD) SETCCir(X86_CC_S, RD) #define SETNSr(RD) SETCCir(X86_CC_NS, RD) #define SETPr(RD) SETCCir(X86_CC_P, RD) #define SETPEr(RD) SETCCir(X86_CC_PE, RD) #define SETNPr(RD) SETCCir(X86_CC_NP, RD) #define SETPOr(RD) SETCCir(X86_CC_PO, RD) #define SETLr(RD) SETCCir(X86_CC_L, RD) #define SETNGEr(RD) SETCCir(X86_CC_NGE, RD) #define SETNLr(RD) SETCCir(X86_CC_NL, RD) #define SETGEr(RD) SETCCir(X86_CC_GE, RD) #define SETLEr(RD) SETCCir(X86_CC_LE, RD) #define SETNGr(RD) SETCCir(X86_CC_NG, RD) #define SETNLEr(RD) SETCCir(X86_CC_NLE, RD) #define SETGr(RD) SETCCir(X86_CC_G, RD) /* _format Opcd ,Mod ,r ,m ,mem=dsp+sib ,imm... */ #define SETCCim(CC,MD,MB,MI,MS) (_REXBrm(0, MB, MI), _OO_r_X (0x0f90|(CC) ,_b000 ,MD,MB,MI,MS )) #define SETOm(D, B, I, S) SETCCim(X86_CC_O, D, B, I, S) #define SETNOm(D, B, I, S) SETCCim(X86_CC_NO, D, B, I, S) #define SETBm(D, B, I, S) SETCCim(X86_CC_B, D, B, I, S) #define SETNAEm(D, B, I, S) SETCCim(X86_CC_NAE, D, B, I, S) #define SETNBm(D, B, I, S) SETCCim(X86_CC_NB, D, B, I, S) #define SETAEm(D, B, I, S) SETCCim(X86_CC_AE, D, B, I, S) #define SETEm(D, B, I, S) SETCCim(X86_CC_E, D, B, I, S) #define SETZm(D, B, I, S) SETCCim(X86_CC_Z, D, B, I, S) #define SETNEm(D, B, I, S) SETCCim(X86_CC_NE, D, B, I, S) #define SETNZm(D, B, I, S) SETCCim(X86_CC_NZ, D, B, I, S) #define SETBEm(D, B, I, S) SETCCim(X86_CC_BE, D, B, I, S) #define SETNAm(D, B, I, S) SETCCim(X86_CC_NA, D, B, I, S) #define SETNBEm(D, B, I, S) SETCCim(X86_CC_NBE, D, B, I, S) #define SETAm(D, B, I, S) SETCCim(X86_CC_A, D, B, I, S) #define SETSm(D, B, I, S) SETCCim(X86_CC_S, D, B, I, S) #define SETNSm(D, B, I, S) SETCCim(X86_CC_NS, D, B, I, S) #define SETPm(D, B, I, S) SETCCim(X86_CC_P, D, B, I, S) #define SETPEm(D, B, I, S) SETCCim(X86_CC_PE, D, B, I, S) #define SETNPm(D, B, I, S) SETCCim(X86_CC_NP, D, B, I, S) #define SETPOm(D, B, I, S) SETCCim(X86_CC_PO, D, B, I, S) #define SETLm(D, B, I, S) SETCCim(X86_CC_L, D, B, I, S) #define SETNGEm(D, B, I, S) SETCCim(X86_CC_NGE, D, B, I, S) #define SETNLm(D, B, I, S) SETCCim(X86_CC_NL, D, B, I, S) #define SETGEm(D, B, I, S) SETCCim(X86_CC_GE, D, B, I, S) #define SETLEm(D, B, I, S) SETCCim(X86_CC_LE, D, B, I, S) #define SETNGm(D, B, I, S) SETCCim(X86_CC_NG, D, B, I, S) #define SETNLEm(D, B, I, S) SETCCim(X86_CC_NLE, D, B, I, S) #define SETGm(D, B, I, S) SETCCim(X86_CC_G, D, B, I, S) /* _format Opcd ,Mod ,r ,m ,mem=dsp+sib ,imm... */ #define CMOVWrr(CC,RS,RD) (_d16(), _REXLrr(RD, RS), _OO_Mrm (0x0f40|(CC) ,_b11,_r2(RD),_r2(RS) )) #define CMOVWmr(CC,MD,MB,MI,MS,RD) (_d16(), _REXLmr(MB, MI, RD), _OO_r_X (0x0f40|(CC) ,_r2(RD) ,MD,MB,MI,MS )) #define CMOVLrr(CC,RS,RD) (_REXLrr(RD, RS), _OO_Mrm (0x0f40|(CC) ,_b11,_r4(RD),_r4(RS) )) #define CMOVLmr(CC,MD,MB,MI,MS,RD) (_REXLmr(MB, MI, RD), _OO_r_X (0x0f40|(CC) ,_r4(RD) ,MD,MB,MI,MS )) #define CMOVQrr(CC,RS,RD) (_REXQrr(RD, RS), _OO_Mrm (0x0f40|(CC) ,_b11,_r8(RD),_r8(RS) )) #define CMOVQmr(CC,MD,MB,MI,MS,RD) (_REXQmr(MB, MI, RD), _OO_r_X (0x0f40|(CC) ,_r8(RD) ,MD,MB,MI,MS )) /* --- Push/Pop instructions ----------------------------------------------- */ /* _format Opcd ,Mod ,r ,m ,mem=dsp+sib ,imm... */ #define POPWr(RD) _m32only((_d16(), _Or (0x58,_r2(RD) ))) #define POPWm(MD, MB, MI, MS) _m32only((_d16(), _O_r_X (0x8f ,_b000 ,MD,MB,MI,MS ))) #define POPLr(RD) _m32only( _Or (0x58,_r4(RD) )) #define POPLm(MD, MB, MI, MS) _m32only( _O_r_X (0x8f ,_b000 ,MD,MB,MI,MS )) #define POPQr(RD) _m64only((_REXQr(RD), _Or (0x58,_r8(RD) ))) #define POPQm(MD, MB, MI, MS) _m64only((_REXQm(MB, MI), _O_r_X (0x8f ,_b000 ,MD,MB,MI,MS ))) #define PUSHWr(RS) _m32only((_d16(), _Or (0x50,_r2(RS) ))) #define PUSHWm(MD, MB, MI, MS) _m32only((_d16(), _O_r_X (0xff, ,_b110 ,MD,MB,MI,MS ))) #define PUSHWi(IM) _m32only((_d16(), _Os_sW (0x68 ,IM ))) #define PUSHLr(RS) _m32only( _Or (0x50,_r4(RS) )) #define PUSHLm(MD, MB, MI, MS) _m32only( _O_r_X (0xff ,_b110 ,MD,MB,MI,MS )) #define PUSHLi(IM) _m32only( _Os_sL (0x68 ,IM )) #define PUSHQr(RS) _m64only((_REXQr(RS), _Or (0x50,_r8(RS) ))) #define PUSHQm(MD, MB, MI, MS) _m64only((_REXQm(MB, MI), _O_r_X (0xff ,_b110 ,MD,MB,MI,MS ))) #define PUSHQi(IM) _m64only( _Os_sL (0x68 ,IM )) #define POPA() (_d16(), _O (0x61 )) #define POPAD() _O (0x61 ) #define PUSHA() (_d16(), _O (0x60 )) #define PUSHAD() _O (0x60 ) #define POPF() _O (0x9d ) #define PUSHF() _O (0x9c ) /* --- Test instructions --------------------------------------------------- */ /* _format Opcd ,Mod ,r ,m ,mem=dsp+sib ,imm... */ #define TESTBrr(RS, RD) (_REXBrr(RS, RD), _O_Mrm (0x84 ,_b11,_r1(RS),_r1(RD) )) #define TESTBrm(RS, MD, MB, MI, MS) (_REXBrm(RS, MB, MI), _O_r_X (0x84 ,_r1(RS) ,MD,MB,MI,MS )) #define TESTBir(IM, RD) (X86_OPTIMIZE_ALU && ((RD) == X86_AL) ? \ (_REXBrr(0, RD), _O_B (0xa8 ,_u8(IM))) : \ (_REXBrr(0, RD), _O_Mrm_B (0xf6 ,_b11,_b000 ,_r1(RD) ,_u8(IM))) ) #define TESTBim(IM, MD, MB, MI, MS) (_REXBrm(0, MB, MI), _O_r_X_B (0xf6 ,_b000 ,MD,MB,MI,MS ,_u8(IM))) #define TESTWrr(RS, RD) (_d16(), _REXLrr(RS, RD), _O_Mrm (0x85 ,_b11,_r2(RS),_r2(RD) )) #define TESTWrm(RS, MD, MB, MI, MS) (_d16(), _REXLrm(RS, MB, MI), _O_r_X (0x85 ,_r2(RS) ,MD,MB,MI,MS )) #define TESTWir(IM, RD) (X86_OPTIMIZE_ALU && ((RD) == X86_AX) ? \ (_d16(), _REXLrr(0, RD), _O_W (0xa9 ,_u16(IM))) : \ (_d16(), _REXLrr(0, RD), _O_Mrm_W (0xf7 ,_b11,_b000 ,_r2(RD) ,_u16(IM))) ) #define TESTWim(IM, MD, MB, MI, MS) (_d16(), _REXLrm(0, MB, MI), _O_r_X_W (0xf7 ,_b000 ,MD,MB,MI,MS ,_u16(IM))) #define TESTLrr(RS, RD) (_REXLrr(RS, RD), _O_Mrm (0x85 ,_b11,_r4(RS),_r4(RD) )) #define TESTLrm(RS, MD, MB, MI, MS) (_REXLrm(RS, MB, MI), _O_r_X (0x85 ,_r4(RS) ,MD,MB,MI,MS )) #define TESTLir(IM, RD) (X86_OPTIMIZE_ALU && ((RD) == X86_EAX) ? \ (_REXLrr(0, RD), _O_L (0xa9 ,IM )) : \ (_REXLrr(0, RD), _O_Mrm_L (0xf7 ,_b11,_b000 ,_r4(RD) ,IM )) ) #define TESTLim(IM, MD, MB, MI, MS) (_REXLrm(0, MB, MI), _O_r_X_L (0xf7 ,_b000 ,MD,MB,MI,MS ,IM )) #define TESTQrr(RS, RD) (_REXQrr(RS, RD), _O_Mrm (0x85 ,_b11,_r8(RS),_r8(RD) )) #define TESTQrm(RS, MD, MB, MI, MS) (_REXQrm(RS, MB, MI), _O_r_X (0x85 ,_r8(RS) ,MD,MB,MI,MS )) #define TESTQir(IM, RD) (X86_OPTIMIZE_ALU && ((RD) == X86_RAX) ? \ (_REXQrr(0, RD), _O_L (0xa9 ,IM )) : \ (_REXQrr(0, RD), _O_Mrm_L (0xf7 ,_b11,_b000 ,_r8(RD) ,IM )) ) #define TESTQim(IM, MD, MB, MI, MS) (_REXQrm(0, MB, MI), _O_r_X_L (0xf7 ,_b000 ,MD,MB,MI,MS ,IM )) /* --- Exchange instructions ----------------------------------------------- */ /* _format Opcd ,Mod ,r ,m ,mem=dsp+sib ,imm... */ #define CMPXCHGBrr(RS, RD) (_REXBrr(RS, RD), _OO_Mrm (0x0fb0 ,_b11,_r1(RS),_r1(RD) )) #define CMPXCHGBrm(RS, MD, MB, MI, MS) (_REXBrm(RS, MB, MI), _OO_r_X (0x0fb0 ,_r1(RS) ,MD,MB,MI,MS )) #define CMPXCHGWrr(RS, RD) (_d16(), _REXLrr(RS, RD), _OO_Mrm (0x0fb1 ,_b11,_r2(RS),_r2(RD) )) #define CMPXCHGWrm(RS, MD, MB, MI, MS) (_d16(), _REXLrm(RS, MB, MI), _OO_r_X (0x0fb1 ,_r2(RS) ,MD,MB,MI,MS )) #define CMPXCHGLrr(RS, RD) (_REXLrr(RS, RD), _OO_Mrm (0x0fb1 ,_b11,_r4(RS),_r4(RD) )) #define CMPXCHGLrm(RS, MD, MB, MI, MS) (_REXLrm(RS, MB, MI), _OO_r_X (0x0fb1 ,_r4(RS) ,MD,MB,MI,MS )) #define CMPXCHGQrr(RS, RD) (_REXQrr(RS, RD), _OO_Mrm (0x0fb1 ,_b11,_r8(RS),_r8(RD) )) #define CMPXCHGQrm(RS, MD, MB, MI, MS) (_REXQrm(RS, MB, MI), _OO_r_X (0x0fb1 ,_r8(RS) ,MD,MB,MI,MS )) #define XADDBrr(RS, RD) (_REXBrr(RS, RD), _OO_Mrm (0x0fc0 ,_b11,_r1(RS),_r1(RD) )) #define XADDBrm(RS, MD, MB, MI, MS) (_REXBrm(RS, MB, MI), _OO_r_X (0x0fc0 ,_r1(RS) ,MD,MB,MI,MS )) #define XADDWrr(RS, RD) (_d16(), _REXLrr(RS, RD), _OO_Mrm (0x0fc1 ,_b11,_r2(RS),_r2(RD) )) #define XADDWrm(RS, MD, MB, MI, MS) (_d16(), _REXLrm(RS, MB, MI), _OO_r_X (0x0fc1 ,_r2(RS) ,MD,MB,MI,MS )) #define XADDLrr(RS, RD) (_REXLrr(RS, RD), _OO_Mrm (0x0fc1 ,_b11,_r4(RS),_r4(RD) )) #define XADDLrm(RS, MD, MB, MI, MS) (_REXLrm(RS, MB, MI), _OO_r_X (0x0fc1 ,_r4(RS) ,MD,MB,MI,MS )) #define XADDQrr(RS, RD) (_REXQrr(RS, RD), _OO_Mrm (0x0fc1 ,_b11,_r8(RS),_r8(RD) )) #define XADDQrm(RS, MD, MB, MI, MS) (_REXQrm(RS, MB, MI), _OO_r_X (0x0fc1 ,_r8(RS) ,MD,MB,MI,MS )) #define XCHGBrr(RS, RD) (_REXBrr(RS, RD), _O_Mrm (0x86 ,_b11,_r1(RS),_r1(RD) )) #define XCHGBrm(RS, MD, MB, MI, MS) (_REXBrm(RS, MB, MI), _O_r_X (0x86 ,_r1(RS) ,MD,MB,MI,MS )) #define XCHGWrr(RS, RD) (_d16(), _REXLrr(RS, RD), _O_Mrm (0x87 ,_b11,_r2(RS),_r2(RD) )) #define XCHGWrm(RS, MD, MB, MI, MS) (_d16(), _REXLrm(RS, MB, MI), _O_r_X (0x87 ,_r2(RS) ,MD,MB,MI,MS )) #define XCHGLrr(RS, RD) (_REXLrr(RS, RD), _O_Mrm (0x87 ,_b11,_r4(RS),_r4(RD) )) #define XCHGLrm(RS, MD, MB, MI, MS) (_REXLrm(RS, MB, MI), _O_r_X (0x87 ,_r4(RS) ,MD,MB,MI,MS )) #define XCHGQrr(RS, RD) (_REXQrr(RS, RD), _O_Mrm (0x87 ,_b11,_r8(RS),_r8(RD) )) #define XCHGQrm(RS, MD, MB, MI, MS) (_REXQrm(RS, MB, MI), _O_r_X (0x87 ,_r8(RS) ,MD,MB,MI,MS )) /* --- Increment/Decrement instructions ------------------------------------ */ /* _format Opcd ,Mod ,r ,m ,mem=dsp+sib ,imm... */ #define DECBm(MD, MB, MI, MS) (_REXBrm(0, MB, MI), _O_r_X (0xfe ,_b001 ,MD,MB,MI,MS )) #define DECBr(RD) (_REXBrr(0, RD), _O_Mrm (0xfe ,_b11,_b001 ,_r1(RD) )) #define DECWm(MD, MB, MI, MS) (_d16(), _REXLrm(0, MB, MI), _O_r_X (0xff ,_b001 ,MD,MB,MI,MS )) #define DECWr(RD) (! X86_TARGET_64BIT ? (_d16(), _Or (0x48,_r2(RD) )) : \ (_d16(), _REXLrr(0, RD), _O_Mrm (0xff ,_b11,_b001 ,_r2(RD) ))) #define DECLm(MD, MB, MI, MS) (_REXLrm(0, MB, MI), _O_r_X (0xff ,_b001 ,MD,MB,MI,MS )) #define DECLr(RD) (! X86_TARGET_64BIT ? _Or (0x48,_r4(RD) ) : \ (_REXLrr(0, RD), _O_Mrm (0xff ,_b11,_b001 ,_r4(RD) ))) #define DECQm(MD, MB, MI, MS) (_REXQrm(0, MB, MI), _O_r_X (0xff ,_b001 ,MD,MB,MI,MS )) #define DECQr(RD) (_REXQrr(0, RD), _O_Mrm (0xff ,_b11,_b001 ,_r8(RD) )) #define INCBm(MD, MB, MI, MS) (_REXBrm(0, MB, MI), _O_r_X (0xfe ,_b000 ,MD,MB,MI,MS )) #define INCBr(RD) (_REXBrr(0, RD), _O_Mrm (0xfe ,_b11,_b000 ,_r1(RD) )) #define INCWm(MD, MB, MI, MS) (_d16(), _REXLrm(0, MB, MI), _O_r_X (0xff ,_b000 ,MD,MB,MI,MS )) #define INCWr(RD) (! X86_TARGET_64BIT ? (_d16(), _Or (0x40,_r2(RD) )) : \ (_d16(), _REXLrr(0, RD), _O_Mrm (0xff ,_b11,_b000 ,_r2(RD) )) ) #define INCLm(MD, MB, MI, MS) (_REXLrm(0, MB, MI), _O_r_X (0xff ,_b000 ,MD,MB,MI,MS )) #define INCLr(RD) (! X86_TARGET_64BIT ? _Or (0x40,_r4(RD) ) : \ (_REXLrr(0, RD), _O_Mrm (0xff ,_b11,_b000 ,_r4(RD) ))) #define INCQm(MD, MB, MI, MS) (_REXQrm(0, MB, MI), _O_r_X (0xff ,_b000 ,MD,MB,MI,MS )) #define INCQr(RD) (_REXQrr(0, RD), _O_Mrm (0xff ,_b11,_b000 ,_r8(RD) )) /* --- Misc instructions --------------------------------------------------- */ /* _format Opcd ,Mod ,r ,m ,mem=dsp+sib ,imm... */ #define BSFWrr(RS, RD) (_d16(), _REXLrr(RD, RS), _OO_Mrm (0x0fbc ,_b11,_r2(RD),_r2(RS) )) #define BSFWmr(MD, MB, MI, MS, RD) (_d16(), _REXLmr(MB, MI, RD), _OO_r_X (0x0fbc ,_r2(RD) ,MD,MB,MI,MS )) #define BSRWrr(RS, RD) (_d16(), _REXLrr(RD, RS), _OO_Mrm (0x0fbd ,_b11,_r2(RD),_r2(RS) )) #define BSRWmr(MD, MB, MI, MS, RD) (_d16(), _REXLmr(MB, MI, RD), _OO_r_X (0x0fbd ,_r2(RD) ,MD,MB,MI,MS )) #define BSFLrr(RS, RD) (_REXLrr(RD, RS), _OO_Mrm (0x0fbc ,_b11,_r4(RD),_r4(RS) )) #define BSFLmr(MD, MB, MI, MS, RD) (_REXLmr(MB, MI, RD), _OO_r_X (0x0fbc ,_r4(RD) ,MD,MB,MI,MS )) #define BSRLrr(RS, RD) (_REXLrr(RD, RS), _OO_Mrm (0x0fbd ,_b11,_r4(RD),_r4(RS) )) #define BSRLmr(MD, MB, MI, MS, RD) (_REXLmr(MB, MI, RD), _OO_r_X (0x0fbd ,_r4(RD) ,MD,MB,MI,MS )) #define BSFQrr(RS, RD) (_REXQrr(RD, RS), _OO_Mrm (0x0fbc ,_b11,_r8(RD),_r8(RS) )) #define BSFQmr(MD, MB, MI, MS, RD) (_REXQmr(MB, MI, RD), _OO_r_X (0x0fbc ,_r8(RD) ,MD,MB,MI,MS )) #define BSRQrr(RS, RD) (_REXQrr(RD, RS), _OO_Mrm (0x0fbd ,_b11,_r8(RD),_r8(RS) )) #define BSRQmr(MD, MB, MI, MS, RD) (_REXQmr(MB, MI, RD), _OO_r_X (0x0fbd ,_r8(RD) ,MD,MB,MI,MS )) /* _format Opcd ,Mod ,r ,m ,mem=dsp+sib ,imm... */ #define MOVSBWrr(RS, RD) (_d16(), _REXBLrr(RD, RS), _OO_Mrm (0x0fbe ,_b11,_r2(RD),_r1(RS) )) #define MOVSBWmr(MD, MB, MI, MS, RD) (_d16(), _REXLmr(MB, MI, RD), _OO_r_X (0x0fbe ,_r2(RD) ,MD,MB,MI,MS )) #define MOVZBWrr(RS, RD) (_d16(), _REXBLrr(RD, RS), _OO_Mrm (0x0fb6 ,_b11,_r2(RD),_r1(RS) )) #define MOVZBWmr(MD, MB, MI, MS, RD) (_d16(), _REXLmr(MB, MI, RD), _OO_r_X (0x0fb6 ,_r2(RD) ,MD,MB,MI,MS )) #define MOVSBLrr(RS, RD) (_REXBLrr(RD, RS), _OO_Mrm (0x0fbe ,_b11,_r4(RD),_r1(RS) )) #define MOVSBLmr(MD, MB, MI, MS, RD) (_REXLmr(MB, MI, RD), _OO_r_X (0x0fbe ,_r4(RD) ,MD,MB,MI,MS )) #define MOVZBLrr(RS, RD) (_REXBLrr(RD, RS), _OO_Mrm (0x0fb6 ,_b11,_r4(RD),_r1(RS) )) #define MOVZBLmr(MD, MB, MI, MS, RD) (_REXLmr(MB, MI, RD), _OO_r_X (0x0fb6 ,_r4(RD) ,MD,MB,MI,MS )) #define MOVSBQrr(RS, RD) (_REXQrr(RD, RS), _OO_Mrm (0x0fbe ,_b11,_r8(RD),_r1(RS) )) #define MOVSBQmr(MD, MB, MI, MS, RD) (_REXQmr(MB, MI, RD), _OO_r_X (0x0fbe ,_r8(RD) ,MD,MB,MI,MS )) #define MOVZBQrr(RS, RD) (_REXQrr(RD, RS), _OO_Mrm (0x0fb6 ,_b11,_r8(RD),_r1(RS) )) #define MOVZBQmr(MD, MB, MI, MS, RD) (_REXQmr(MB, MI, RD), _OO_r_X (0x0fb6 ,_r8(RD) ,MD,MB,MI,MS )) #define MOVSWLrr(RS, RD) (_REXLrr(RD, RS), _OO_Mrm (0x0fbf ,_b11,_r4(RD),_r2(RS) )) #define MOVSWLmr(MD, MB, MI, MS, RD) (_REXLmr(MB, MI, RD), _OO_r_X (0x0fbf ,_r4(RD) ,MD,MB,MI,MS )) #define MOVZWLrr(RS, RD) (_REXLrr(RD, RS), _OO_Mrm (0x0fb7 ,_b11,_r4(RD),_r2(RS) )) #define MOVZWLmr(MD, MB, MI, MS, RD) (_REXLmr(MB, MI, RD), _OO_r_X (0x0fb7 ,_r4(RD) ,MD,MB,MI,MS )) #define MOVSWQrr(RS, RD) _m64only((_REXQrr(RD, RS), _OO_Mrm (0x0fbf ,_b11,_r8(RD),_r2(RS) ))) #define MOVSWQmr(MD, MB, MI, MS, RD) _m64only((_REXQmr(MB, MI, RD), _OO_r_X (0x0fbf ,_r8(RD) ,MD,MB,MI,MS ))) #define MOVZWQrr(RS, RD) _m64only((_REXQrr(RD, RS), _OO_Mrm (0x0fb7 ,_b11,_r8(RD),_r2(RS) ))) #define MOVZWQmr(MD, MB, MI, MS, RD) _m64only((_REXQmr(MB, MI, RD), _OO_r_X (0x0fb7 ,_r8(RD) ,MD,MB,MI,MS ))) #define MOVSLQrr(RS, RD) _m64only((_REXQrr(RD, RS), _O_Mrm (0x63 ,_b11,_r8(RD),_r4(RS) ))) #define MOVSLQmr(MD, MB, MI, MS, RD) _m64only((_REXQmr(MB, MI, RD), _O_r_X (0x63 ,_r8(RD) ,MD,MB,MI,MS ))) /* _format Opcd ,Mod ,r ,m ,mem=dsp+sib ,imm... */ #define LEALmr(MD, MB, MI, MS, RD) (_REXLmr(MB, MI, RD), _O_r_X (0x8d ,_r4(RD) ,MD,MB,MI,MS )) #define LEAQmr(MD, MB, MI, MS, RD) (_REXQmr(MB, MI, RD), _O_r_X (0x8d ,_r4(RD) ,MD,MB,MI,MS )) #define BSWAPLr(R) (_REXLrr(0, R), _OOr (0x0fc8,_r4(R) )) #define BSWAPQr(R) (_REXQrr(0, R), _OOr (0x0fc8,_r8(R) )) #define CLC() _O (0xf8 ) #define STC() _O (0xf9 ) #define CMC() _O (0xf5 ) #define CLD() _O (0xfc ) #define STD() _O (0xfd ) #define CBTW() (_d16(), _O (0x98 )) #define CWTL() _O (0x98 ) #define CLTQ() _m64only(_REXQrr(0, 0), _O (0x98 )) #define CBW CBTW #define CWDE CWTL #define CDQE CLTQ #define CWTD() (_d16(), _O (0x99 )) #define CLTD() _O (0x99 ) #define CQTO() _m64only(_REXQrr(0, 0), _O (0x99 )) #define CWD CWTD #define CDQ CLTD #define CQO CQTO #define LAHF() _O (0x9f ) #define SAHF() _O (0x9e ) /* _format Opcd ,Mod ,r ,m ,mem=dsp+sib ,imm... */ #define CPUID() _OO (0x0fa2 ) #define RDTSC() _OO (0xff31 ) #define ENTERii(W, B) _O_W_B (0xc8 ,_su16(W),_su8(B)) #define LEAVE() _O (0xc9 ) #define RET() _O (0xc3 ) #define RETi(IM) _O_W (0xc2 ,_su16(IM)) #define NOP() _O (0x90 ) /* --- Media 64-bit instructions ------------------------------------------- */ enum { X86_MMX_PABSB = 0x1c, // 2P X86_MMX_PABSW = 0x1d, // 2P X86_MMX_PABSD = 0x1e, // 2P X86_MMX_PACKSSWB = 0x63, X86_MMX_PACKSSDW = 0x6b, X86_MMX_PACKUSWB = 0x67, X86_MMX_PADDB = 0xfc, X86_MMX_PADDW = 0xfd, X86_MMX_PADDD = 0xfe, X86_MMX_PADDQ = 0xd4, X86_MMX_PADDSB = 0xec, X86_MMX_PADDSW = 0xed, X86_MMX_PADDUSB = 0xdc, X86_MMX_PADDUSW = 0xdd, X86_MMX_PAND = 0xdb, X86_MMX_PANDN = 0xdf, X86_MMX_PAVGB = 0xe0, X86_MMX_PAVGW = 0xe3, X86_MMX_PCMPEQB = 0x74, X86_MMX_PCMPEQW = 0x75, X86_MMX_PCMPEQD = 0x76, X86_MMX_PCMPGTB = 0x64, X86_MMX_PCMPGTW = 0x65, X86_MMX_PCMPGTD = 0x66, X86_MMX_PEXTRW = 0xc5, // 64, /r ib X86_MMX_PHADDW = 0x01, // 2P X86_MMX_PHADDD = 0x02, // 2P X86_MMX_PHADDSW = 0x03, // 2P X86_MMX_PHSUBW = 0x05, // 2P X86_MMX_PHSUBD = 0x06, // 2P X86_MMX_PHSUBSW = 0x07, // 2P X86_MMX_PINSRW = 0xc4, // 64, /r ib X86_MMX_PMADDUBSW = 0x04, // 2P X86_MMX_PMADDWD = 0xf5, X86_MMX_PMAXSW = 0xee, X86_MMX_PMAXUB = 0xde, X86_MMX_PMINSW = 0xea, X86_MMX_PMINUB = 0xda, X86_MMX_PMOVMSKB = 0xd7, // 64 X86_MMX_PMULHRSW = 0x0b, // 2P X86_MMX_PMULHUW = 0xe4, X86_MMX_PMULHW = 0xe5, X86_MMX_PMULLW = 0xd5, X86_MMX_PMULUDQ = 0xf4, X86_MMX_POR = 0xeb, X86_MMX_PSADBW = 0xf6, X86_MMX_PSHUFB = 0x00, // 2P X86_MMX_PSHUFW = 0x70, // /r ib X86_MMX_PSIGNB = 0x08, // 2P X86_MMX_PSIGNW = 0x09, // 2P X86_MMX_PSIGND = 0x0a, // 2P X86_MMX_PSLLW = 0xf1, X86_MMX_PSLLWi = 0x71, // /6 ib X86_MMX_PSLLD = 0xf2, X86_MMX_PSLLDi = 0x72, // /6 ib X86_MMX_PSLLQ = 0xf3, X86_MMX_PSLLQi = 0x73, // /6 ib X86_MMX_PSRAW = 0xe1, X86_MMX_PSRAWi = 0x71, // /4 ib X86_MMX_PSRAD = 0xe2, X86_MMX_PSRADi = 0x72, // /4 ib X86_MMX_PSRLW = 0xd1, X86_MMX_PSRLWi = 0x71, // /2 ib X86_MMX_PSRLD = 0xd2, X86_MMX_PSRLDi = 0x72, // /2 ib X86_MMX_PSRLQ = 0xd3, X86_MMX_PSRLQi = 0x73, // /2 ib X86_MMX_PSUBB = 0xf8, X86_MMX_PSUBW = 0xf9, X86_MMX_PSUBD = 0xfa, X86_MMX_PSUBQ = 0xfb, X86_MMX_PSUBSB = 0xe8, X86_MMX_PSUBSW = 0xe9, X86_MMX_PSUBUSB = 0xd8, X86_MMX_PSUBUSW = 0xd9, X86_MMX_PUNPCKHBW = 0x68, X86_MMX_PUNPCKHWD = 0x69, X86_MMX_PUNPCKHDQ = 0x6a, X86_MMX_PUNPCKLBW = 0x60, X86_MMX_PUNPCKLWD = 0x61, X86_MMX_PUNPCKLDQ = 0x62, X86_MMX_PXOR = 0xef, }; #define __MMXLrr(OP,RS,RSA,RD,RDA) (_REXLrr(RD, RS), _OO_Mrm (0x0f00|(OP) ,_b11,RDA(RD),RSA(RS) )) #define __MMXLmr(OP,MD,MB,MI,MS,RD,RDA) (_REXLmr(MB, MI, RD), _OO_r_X (0x0f00|(OP) ,RDA(RD) ,MD,MB,MI,MS )) #define __MMXLrm(OP,RS,RSA,MD,MB,MI,MS) (_REXLrm(RS, MB, MI), _OO_r_X (0x0f00|(OP) ,RSA(RS) ,MD,MB,MI,MS )) #define __MMXLirr(OP,IM,RS,RSA,RD,RDA) (_REXLrr(RD, RS), _OO_Mrm_B (0x0f00|(OP) ,_b11,RDA(RD),RSA(RS) ,_u8(IM))) #define __MMXLimr(OP,IM,MD,MB,MI,MS,RD,RDA) (_REXLmr(MB, MI, RS), _OO_r_X_B (0x0f00|(OP) ,RDA(RD) ,MD,MB,MI,MS ,_u8(IM))) #define __MMXQrr(OP,RS,RSA,RD,RDA) (_REXQrr(RD, RS), _OO_Mrm (0x0f00|(OP) ,_b11,RDA(RD),RSA(RS) )) #define __MMXQmr(OP,MD,MB,MI,MS,RD,RDA) (_REXQmr(MB, MI, RD), _OO_r_X (0x0f00|(OP) ,RDA(RD) ,MD,MB,MI,MS )) #define __MMXQrm(OP,RS,RSA,MD,MB,MI,MS) (_REXQrm(RS, MB, MI), _OO_r_X (0x0f00|(OP) ,RSA(RS) ,MD,MB,MI,MS )) #define __MMXQirr(OP,IM,RS,RSA,RD,RDA) (_REXQrr(RD, RS), _OO_Mrm_B (0x0f00|(OP) ,_b11,RDA(RD),RSA(RS) ,_u8(IM))) #define __MMXQimr(OP,IM,MD,MB,MI,MS,RD,RDA) (_REXQmr(MB, MI, RS), _OO_r_X_B (0x0f00|(OP) ,RDA(RD) ,MD,MB,MI,MS ,_u8(IM))) #define __MMX1Lrr(PX,OP,RS,RSA,RD,RDA) (_REXLrr(RD, RS), _B(0x0f),_OO_Mrm(((PX)<<8)|(OP) ,_b11,RDA(RD),RSA(RS) )) #define __MMX1Lmr(PX,OP,MD,MB,MI,MS,RD,RDA) (_REXLmr(MB, MI, RD), _B(0x0f),_OO_r_X(((PX)<<8)|(OP) ,RDA(RD) ,MD,MB,MI,MS )) #define __MMX1Lrm(PX,OP,RS,RSA,MD,MB,MI,MS) (_REXLrm(RS, MB, MI), _B(0x0f),_OO_r_X(((PX)<<8)|(OP) ,RSA(RS) ,MD,MB,MI,MS )) #define _MMXLrr(OP,RS,RD) __MMXLrr(OP,RS,_rM,RD,_rM) #define _MMXLmr(OP,MD,MB,MI,MS,RD) __MMXLmr(OP,MD,MB,MI,MS,RD,_rM) #define _MMXLrm(OP,RS,MD,MB,MI,MS) __MMXLrm(OP,RS,_rM,MD,MB,MI,MS) #define _MMXQrr(OP,RS,RD) __MMXQrr(OP,RS,_rM,RD,_rM) #define _MMXQmr(OP,MD,MB,MI,MS,RD) __MMXQmr(OP,MD,MB,MI,MS,RD,_rM) #define _MMXQrm(OP,RS,MD,MB,MI,MS) __MMXQrm(OP,RS,_rM,MD,MB,MI,MS) #define _2P_MMXLrr(OP,RS,RD) __MMX1Lrr(0x38, OP,RS,_rM,RD,_rM) #define _2P_MMXLmr(OP,MD,MB,MI,MS,RD) __MMX1Lmr(0x38, OP,MD,MB,MI,MS,RD,_rM) #define _2P_MMXLrm(OP,RS,MD,MB,MI,MS) __MMX1Lrm(0x38, OP,RS,_rM,MD,MB,MI,MS) #define MMX_MOVDMDrr(RS, RD) __MMXLrr(0x6e, RS,_r4, RD,_rM) #define MMX_MOVQMDrr(RS, RD) __MMXQrr(0x6e, RS,_r8, RD,_rM) #define MMX_MOVDMSrr(RS, RD) __MMXLrr(0x7e, RD,_r4, RS,_rM) #define MMX_MOVQMSrr(RS, RD) __MMXQrr(0x7e, RD,_r8, RS,_rM) #define MMX_MOVDmr(MD, MB, MI, MS, RD) _MMXLmr(0x6e, MD, MB, MI, MS, RD) #define MMX_MOVDrm(RS, MD, MB, MI, MS) _MMXLrm(0x7e, RS, MD, MB, MI, MS) #define MMX_MOVQrr(RS, RD) _MMXLrr(0x6f, RS, RD) #define MMX_MOVQmr(MD, MB, MI, MS, RD) _MMXLmr(0x6f, MD, MB, MI, MS, RD) #define MMX_MOVQrm(RS, MD, MB, MI, MS) _MMXLrm(0x7f, RS, MD, MB, MI, MS) // Original MMX instructions #define MMX_PACKSSWBrr(RS, RD) _MMXLrr(X86_MMX_PACKSSWB,RS,RD) #define MMX_PACKSSWBmr(MD,MB,MI,MS,RD) _MMXLmr(X86_MMX_PACKSSWB, MD, MB, MI, MS, RD) #define MMX_PACKSSDWrr(RS, RD) _MMXLrr(X86_MMX_PACKSSDW,RS,RD) #define MMX_PACKSSDWmr(MD,MB,MI,MS,RD) _MMXLmr(X86_MMX_PACKSSDW, MD, MB, MI, MS, RD) #define MMX_PACKUSWBrr(RS, RD) _MMXLrr(X86_MMX_PACKUSWB,RS,RD) #define MMX_PACKUSWBmr(MD,MB,MI,MS,RD) _MMXLmr(X86_MMX_PACKUSWB, MD, MB, MI, MS, RD) #define MMX_PADDBrr(RS, RD) _MMXLrr(X86_MMX_PADDB,RS,RD) #define MMX_PADDBmr(MD,MB,MI,MS,RD) _MMXLmr(X86_MMX_PADDB, MD, MB, MI, MS, RD) #define MMX_PADDWrr(RS, RD) _MMXLrr(X86_MMX_PADDW,RS,RD) #define MMX_PADDWmr(MD,MB,MI,MS,RD) _MMXLmr(X86_MMX_PADDW, MD, MB, MI, MS, RD) #define MMX_PADDDrr(RS, RD) _MMXLrr(X86_MMX_PADDD,RS,RD) #define MMX_PADDDmr(MD,MB,MI,MS,RD) _MMXLmr(X86_MMX_PADDD, MD, MB, MI, MS, RD) #define MMX_PADDQrr(RS, RD) _MMXLrr(X86_MMX_PADDQ,RS,RD) #define MMX_PADDQmr(MD,MB,MI,MS,RD) _MMXLmr(X86_MMX_PADDQ, MD, MB, MI, MS, RD) #define MMX_PADDSBrr(RS, RD) _MMXLrr(X86_MMX_PADDSB,RS,RD) #define MMX_PADDSBmr(MD,MB,MI,MS,RD) _MMXLmr(X86_MMX_PADDSB, MD, MB, MI, MS, RD) #define MMX_PADDSWrr(RS, RD) _MMXLrr(X86_MMX_PADDSW,RS,RD) #define MMX_PADDSWmr(MD,MB,MI,MS,RD) _MMXLmr(X86_MMX_PADDSW, MD, MB, MI, MS, RD) #define MMX_PADDUSBrr(RS, RD) _MMXLrr(X86_MMX_PADDUSB,RS,RD) #define MMX_PADDUSBmr(MD,MB,MI,MS,RD) _MMXLmr(X86_MMX_PADDUSB, MD, MB, MI, MS, RD) #define MMX_PADDUSWrr(RS, RD) _MMXLrr(X86_MMX_PADDUSW,RS,RD) #define MMX_PADDUSWmr(MD,MB,MI,MS,RD) _MMXLmr(X86_MMX_PADDUSW, MD, MB, MI, MS, RD) #define MMX_PANDrr(RS, RD) _MMXLrr(X86_MMX_PAND,RS,RD) #define MMX_PANDmr(MD,MB,MI,MS,RD) _MMXLmr(X86_MMX_PAND, MD, MB, MI, MS, RD) #define MMX_PANDNrr(RS, RD) _MMXLrr(X86_MMX_PANDN,RS,RD) #define MMX_PANDNmr(MD,MB,MI,MS,RD) _MMXLmr(X86_MMX_PANDN, MD, MB, MI, MS, RD) #define MMX_PAVGBrr(RS, RD) _MMXLrr(X86_MMX_PAVGB,RS,RD) #define MMX_PAVGBmr(MD,MB,MI,MS,RD) _MMXLmr(X86_MMX_PAVGB, MD, MB, MI, MS, RD) #define MMX_PAVGWrr(RS, RD) _MMXLrr(X86_MMX_PAVGW,RS,RD) #define MMX_PAVGWmr(MD,MB,MI,MS,RD) _MMXLmr(X86_MMX_PAVGW, MD, MB, MI, MS, RD) #define MMX_PCMPEQBrr(RS, RD) _MMXLrr(X86_MMX_PCMPEQB,RS,RD) #define MMX_PCMPEQBmr(MD,MB,MI,MS,RD) _MMXLmr(X86_MMX_PCMPEQB, MD, MB, MI, MS, RD) #define MMX_PCMPEQWrr(RS, RD) _MMXLrr(X86_MMX_PCMPEQW,RS,RD) #define MMX_PCMPEQWmr(MD,MB,MI,MS,RD) _MMXLmr(X86_MMX_PCMPEQW, MD, MB, MI, MS, RD) #define MMX_PCMPEQDrr(RS, RD) _MMXLrr(X86_MMX_PCMPEQD,RS,RD) #define MMX_PCMPEQDmr(MD,MB,MI,MS,RD) _MMXLmr(X86_MMX_PCMPEQD, MD, MB, MI, MS, RD) #define MMX_PCMPGTBrr(RS, RD) _MMXLrr(X86_MMX_PCMPGTB,RS,RD) #define MMX_PCMPGTBmr(MD,MB,MI,MS,RD) _MMXLmr(X86_MMX_PCMPGTB, MD, MB, MI, MS, RD) #define MMX_PCMPGTWrr(RS, RD) _MMXLrr(X86_MMX_PCMPGTW,RS,RD) #define MMX_PCMPGTWmr(MD,MB,MI,MS,RD) _MMXLmr(X86_MMX_PCMPGTW, MD, MB, MI, MS, RD) #define MMX_PCMPGTDrr(RS, RD) _MMXLrr(X86_MMX_PCMPGTD,RS,RD) #define MMX_PCMPGTDmr(MD,MB,MI,MS,RD) _MMXLmr(X86_MMX_PCMPGTD, MD, MB, MI, MS, RD) #define MMX_PMADDWDrr(RS, RD) _MMXLrr(X86_MMX_PMADDWD,RS,RD) #define MMX_PMADDWDmr(MD,MB,MI,MS,RD) _MMXLmr(X86_MMX_PMADDWD, MD, MB, MI, MS, RD) #define MMX_PMAXSWrr(RS, RD) _MMXLrr(X86_MMX_PMAXSW,RS,RD) #define MMX_PMAXSWmr(MD,MB,MI,MS,RD) _MMXLmr(X86_MMX_PMAXSW, MD, MB, MI, MS, RD) #define MMX_PMAXUBrr(RS, RD) _MMXLrr(X86_MMX_PMAXUB,RS,RD) #define MMX_PMAXUBmr(MD,MB,MI,MS,RD) _MMXLmr(X86_MMX_PMAXUB, MD, MB, MI, MS, RD) #define MMX_PMINSWrr(RS, RD) _MMXLrr(X86_MMX_PMINSW,RS,RD) #define MMX_PMINSWmr(MD,MB,MI,MS,RD) _MMXLmr(X86_MMX_PMINSW, MD, MB, MI, MS, RD) #define MMX_PMINUBrr(RS, RD) _MMXLrr(X86_MMX_PMINUB,RS,RD) #define MMX_PMINUBmr(MD,MB,MI,MS,RD) _MMXLmr(X86_MMX_PMINUB, MD, MB, MI, MS, RD) #define MMX_PMULHUWrr(RS, RD) _MMXLrr(X86_MMX_PMULHUW,RS,RD) #define MMX_PMULHUWmr(MD,MB,MI,MS,RD) _MMXLmr(X86_MMX_PMULHUW, MD, MB, MI, MS, RD) #define MMX_PMULHWrr(RS, RD) _MMXLrr(X86_MMX_PMULHW,RS,RD) #define MMX_PMULHWmr(MD,MB,MI,MS,RD) _MMXLmr(X86_MMX_PMULHW, MD, MB, MI, MS, RD) #define MMX_PMULLWrr(RS, RD) _MMXLrr(X86_MMX_PMULLW,RS,RD) #define MMX_PMULLWmr(MD,MB,MI,MS,RD) _MMXLmr(X86_MMX_PMULLW, MD, MB, MI, MS, RD) #define MMX_PMULUDQrr(RS, RD) _MMXLrr(X86_MMX_PMULUDQ,RS,RD) #define MMX_PMULUDQmr(MD,MB,MI,MS,RD) _MMXLmr(X86_MMX_PMULUDQ, MD, MB, MI, MS, RD) #define MMX_PORrr(RS, RD) _MMXLrr(X86_MMX_POR,RS,RD) #define MMX_PORmr(MD,MB,MI,MS,RD) _MMXLmr(X86_MMX_POR, MD, MB, MI, MS, RD) #define MMX_PSADBWrr(RS, RD) _MMXLrr(X86_MMX_PSADBW,RS,RD) #define MMX_PSADBWmr(MD,MB,MI,MS,RD) _MMXLmr(X86_MMX_PSADBW, MD, MB, MI, MS, RD) #define MMX_PSLLWir(IM, RD) __MMXLirr(X86_MMX_PSLLWi, IM, RD,_rM, _b110,_rN) #define MMX_PSLLWrr(RS, RD) _MMXLrr(X86_MMX_PSLLW,RS,RD) #define MMX_PSLLWmr(MD,MB,MI,MS,RD) _MMXLmr(X86_MMX_PSLLW, MD, MB, MI, MS, RD) #define MMX_PSLLDir(IM, RD) __MMXLirr(X86_MMX_PSLLDi, IM, RD,_rM, _b110,_rN) #define MMX_PSLLDrr(RS, RD) _MMXLrr(X86_MMX_PSLLD,RS,RD) #define MMX_PSLLDmr(MD,MB,MI,MS,RD) _MMXLmr(X86_MMX_PSLLD, MD, MB, MI, MS, RD) #define MMX_PSLLQir(IM, RD) __MMXLirr(X86_MMX_PSLLQi, IM, RD,_rM, _b110,_rN) #define MMX_PSLLQrr(RS, RD) _MMXLrr(X86_MMX_PSLLQ,RS,RD) #define MMX_PSLLQmr(MD,MB,MI,MS,RD) _MMXLmr(X86_MMX_PSLLQ, MD, MB, MI, MS, RD) #define MMX_PSRAWir(IM, RD) __MMXLirr(X86_MMX_PSRAWi, IM, RD,_rM, _b100,_rN) #define MMX_PSRAWrr(RS, RD) _MMXLrr(X86_MMX_PSRAW,RS,RD) #define MMX_PSRAWmr(MD,MB,MI,MS,RD) _MMXLmr(X86_MMX_PSRAW, MD, MB, MI, MS, RD) #define MMX_PSRADir(IM, RD) __MMXLirr(X86_MMX_PSRADi, IM, RD,_rM, _b100,_rN) #define MMX_PSRADrr(RS, RD) _MMXLrr(X86_MMX_PSRAD,RS,RD) #define MMX_PSRADmr(MD,MB,MI,MS,RD) _MMXLmr(X86_MMX_PSRAD, MD, MB, MI, MS, RD) #define MMX_PSRLWir(IM, RD) __MMXLirr(X86_MMX_PSRLWi, IM, RD,_rM, _b010,_rN) #define MMX_PSRLWrr(RS, RD) _MMXLrr(X86_MMX_PSRLW,RS,RD) #define MMX_PSRLWmr(MD,MB,MI,MS,RD) _MMXLmr(X86_MMX_PSRLW, MD, MB, MI, MS, RD) #define MMX_PSRLDir(IM, RD) __MMXLirr(X86_MMX_PSRLDi, IM, RD,_rM, _b010,_rN) #define MMX_PSRLDrr(RS, RD) _MMXLrr(X86_MMX_PSRLD,RS,RD) #define MMX_PSRLDmr(MD,MB,MI,MS,RD) _MMXLmr(X86_MMX_PSRLD, MD, MB, MI, MS, RD) #define MMX_PSRLQir(IM, RD) __MMXLirr(X86_MMX_PSRLQi, IM, RD,_rM, _b010,_rN) #define MMX_PSRLQrr(RS, RD) _MMXLrr(X86_MMX_PSRLQ,RS,RD) #define MMX_PSRLQmr(MD,MB,MI,MS,RD) _MMXLmr(X86_MMX_PSRLQ, MD, MB, MI, MS, RD) #define MMX_PSUBBrr(RS, RD) _MMXLrr(X86_MMX_PSUBB,RS,RD) #define MMX_PSUBBmr(MD,MB,MI,MS,RD) _MMXLmr(X86_MMX_PSUBB, MD, MB, MI, MS, RD) #define MMX_PSUBWrr(RS, RD) _MMXLrr(X86_MMX_PSUBW,RS,RD) #define MMX_PSUBWmr(MD,MB,MI,MS,RD) _MMXLmr(X86_MMX_PSUBW, MD, MB, MI, MS, RD) #define MMX_PSUBDrr(RS, RD) _MMXLrr(X86_MMX_PSUBD,RS,RD) #define MMX_PSUBDmr(MD,MB,MI,MS,RD) _MMXLmr(X86_MMX_PSUBD, MD, MB, MI, MS, RD) #define MMX_PSUBQrr(RS, RD) _MMXLrr(X86_MMX_PSUBQ,RS,RD) #define MMX_PSUBQmr(MD,MB,MI,MS,RD) _MMXLmr(X86_MMX_PSUBQ, MD, MB, MI, MS, RD) #define MMX_PSUBSBrr(RS, RD) _MMXLrr(X86_MMX_PSUBSB,RS,RD) #define MMX_PSUBSBmr(MD,MB,MI,MS,RD) _MMXLmr(X86_MMX_PSUBSB, MD, MB, MI, MS, RD) #define MMX_PSUBSWrr(RS, RD) _MMXLrr(X86_MMX_PSUBSW,RS,RD) #define MMX_PSUBSWmr(MD,MB,MI,MS,RD) _MMXLmr(X86_MMX_PSUBSW, MD, MB, MI, MS, RD) #define MMX_PSUBUSBrr(RS, RD) _MMXLrr(X86_MMX_PSUBUSB,RS,RD) #define MMX_PSUBUSBmr(MD,MB,MI,MS,RD) _MMXLmr(X86_MMX_PSUBUSB, MD, MB, MI, MS, RD) #define MMX_PSUBUSWrr(RS, RD) _MMXLrr(X86_MMX_PSUBUSW,RS,RD) #define MMX_PSUBUSWmr(MD,MB,MI,MS,RD) _MMXLmr(X86_MMX_PSUBUSW, MD, MB, MI, MS, RD) #define MMX_PUNPCKHBWrr(RS, RD) _MMXLrr(X86_MMX_PUNPCKHBW,RS,RD) #define MMX_PUNPCKHBWmr(MD,MB,MI,MS,RD) _MMXLmr(X86_MMX_PUNPCKHBW, MD, MB, MI, MS, RD) #define MMX_PUNPCKHWDrr(RS, RD) _MMXLrr(X86_MMX_PUNPCKHWD,RS,RD) #define MMX_PUNPCKHWDmr(MD,MB,MI,MS,RD) _MMXLmr(X86_MMX_PUNPCKHWD, MD, MB, MI, MS, RD) #define MMX_PUNPCKHDQrr(RS, RD) _MMXLrr(X86_MMX_PUNPCKHDQ,RS,RD) #define MMX_PUNPCKHDQmr(MD,MB,MI,MS,RD) _MMXLmr(X86_MMX_PUNPCKHDQ, MD, MB, MI, MS, RD) #define MMX_PUNPCKLBWrr(RS, RD) _MMXLrr(X86_MMX_PUNPCKLBW,RS,RD) #define MMX_PUNPCKLBWmr(MD,MB,MI,MS,RD) _MMXLmr(X86_MMX_PUNPCKLBW, MD, MB, MI, MS, RD) #define MMX_PUNPCKLWDrr(RS, RD) _MMXLrr(X86_MMX_PUNPCKLWD,RS,RD) #define MMX_PUNPCKLWDmr(MD,MB,MI,MS,RD) _MMXLmr(X86_MMX_PUNPCKLWD, MD, MB, MI, MS, RD) #define MMX_PUNPCKLDQrr(RS, RD) _MMXLrr(X86_MMX_PUNPCKLDQ,RS,RD) #define MMX_PUNPCKLDQmr(MD,MB,MI,MS,RD) _MMXLmr(X86_MMX_PUNPCKLDQ, MD, MB, MI, MS, RD) #define MMX_PXORrr(RS, RD) _MMXLrr(X86_MMX_PXOR,RS,RD) #define MMX_PXORmr(MD,MB,MI,MS,RD) _MMXLmr(X86_MMX_PXOR, MD, MB, MI, MS, RD) #define MMX_PSHUFWirr(IM, RS, RD) __MMXLirr(X86_MMX_PSHUFW, IM, RS,_rM, RD,_rM) #define MMX_PSHUFWimr(IM, MD, MB, MI, MS, RD) __MMXLimr(X86_MMX_PSHUFW, IM, MD, MB, MI, MS, RD,_rM) #define MMX_PEXTRWLirr(IM, RS, RD) __MMXLirr(X86_MMX_PEXTRW, IM, RS,_rM, RD,_r4) #define MMX_PEXTRWQirr(IM, RS, RD) __MMXQirr(X86_MMX_PEXTRW, IM, RS,_rM, RD,_r8) #define MMX_PINSRWLirr(IM, RS, RD) __MMXLirr(X86_MMX_PINSRW, IM, RS,_r4, RD,_rM) #define MMX_PINSRWLimr(IM, MD, MB, MI, MS, RD) __MMXLimr(X86_MMX_PINSRW, IM, MD, MB, MI, MS, RD,_r4) #define MMX_PINSRWQirr(IM, RS, RD) __MMXQirr(X86_MMX_PINSRW, IM, RS,_r4, RD,_rM) #define MMX_PINSRWQimr(IM, MD, MB, MI, MS, RD) __MMXQimr(X86_MMX_PINSRW, IM, MD, MB, MI, MS, RD,_r8) // Additionnal MMX instructions, brought by SSSE3 ISA #define MMX_PABSBrr(RS, RD) _2P_MMXLrr(X86_MMX_PABSB,RS,RD) #define MMX_PABSBmr(MD,MB,MI,MS,RD) _2P_MMXLmr(X86_MMX_PABSB, MD, MB, MI, MS, RD) #define MMX_PABSWrr(RS, RD) _2P_MMXLrr(X86_MMX_PABSW,RS,RD) #define MMX_PABSWmr(MD,MB,MI,MS,RD) _2P_MMXLmr(X86_MMX_PABSW, MD, MB, MI, MS, RD) #define MMX_PABSDrr(RS, RD) _2P_MMXLrr(X86_MMX_PABSD,RS,RD) #define MMX_PABSDmr(MD,MB,MI,MS,RD) _2P_MMXLmr(X86_MMX_PABSD, MD, MB, MI, MS, RD) #define MMX_PHADDWrr(RS, RD) _2P_MMXLrr(X86_MMX_PHADDW,RS,RD) #define MMX_PHADDWmr(MD,MB,MI,MS,RD) _2P_MMXLmr(X86_MMX_PHADDW, MD, MB, MI, MS, RD) #define MMX_PHADDDrr(RS, RD) _2P_MMXLrr(X86_MMX_PHADDD,RS,RD) #define MMX_PHADDDmr(MD,MB,MI,MS,RD) _2P_MMXLmr(X86_MMX_PHADDD, MD, MB, MI, MS, RD) #define MMX_PHADDSWrr(RS, RD) _2P_MMXLrr(X86_MMX_PHADDSW,RS,RD) #define MMX_PHADDSWmr(MD,MB,MI,MS,RD) _2P_MMXLmr(X86_MMX_PHADDSW, MD, MB, MI, MS, RD) #define MMX_PHSUBWrr(RS, RD) _2P_MMXLrr(X86_MMX_PHSUBW,RS,RD) #define MMX_PHSUBWmr(MD,MB,MI,MS,RD) _2P_MMXLmr(X86_MMX_PHSUBW, MD, MB, MI, MS, RD) #define MMX_PHSUBDrr(RS, RD) _2P_MMXLrr(X86_MMX_PHSUBD,RS,RD) #define MMX_PHSUBDmr(MD,MB,MI,MS,RD) _2P_MMXLmr(X86_MMX_PHSUBD, MD, MB, MI, MS, RD) #define MMX_PHSUBSWrr(RS, RD) _2P_MMXLrr(X86_MMX_PHSUBSW,RS,RD) #define MMX_PHSUBSWmr(MD,MB,MI,MS,RD) _2P_MMXLmr(X86_MMX_PHSUBSW, MD, MB, MI, MS, RD) #define MMX_PMADDUBSWrr(RS, RD) _2P_MMXLrr(X86_MMX_PMADDUBSW,RS,RD) #define MMX_PMADDUBSWmr(MD,MB,MI,MS,RD) _2P_MMXLmr(X86_MMX_PMADDUBSW, MD, MB, MI, MS, RD) #define MMX_PMULHRSWrr(RS, RD) _2P_MMXLrr(X86_MMX_PMULHRSW,RS,RD) #define MMX_PMULHRSWmr(MD,MB,MI,MS,RD) _2P_MMXLmr(X86_MMX_PMULHRSW, MD, MB, MI, MS, RD) #define MMX_PSHUFBrr(RS, RD) _2P_MMXLrr(X86_MMX_PSHUFB,RS,RD) #define MMX_PSHUFBmr(MD,MB,MI,MS,RD) _2P_MMXLmr(X86_MMX_PSHUFB, MD, MB, MI, MS, RD) #define MMX_PSIGNBrr(RS, RD) _2P_MMXLrr(X86_MMX_PSIGNB,RS,RD) #define MMX_PSIGNBmr(MD,MB,MI,MS,RD) _2P_MMXLmr(X86_MMX_PSIGNB, MD, MB, MI, MS, RD) #define MMX_PSIGNWrr(RS, RD) _2P_MMXLrr(X86_MMX_PSIGNW,RS,RD) #define MMX_PSIGNWmr(MD,MB,MI,MS,RD) _2P_MMXLmr(X86_MMX_PSIGNW, MD, MB, MI, MS, RD) #define MMX_PSIGNDrr(RS, RD) _2P_MMXLrr(X86_MMX_PSIGND,RS,RD) #define MMX_PSIGNDmr(MD,MB,MI,MS,RD) _2P_MMXLmr(X86_MMX_PSIGND, MD, MB, MI, MS, RD) #define EMMS() _OO (0x0f77 ) /* --- Media 128-bit instructions ------------------------------------------ */ enum { X86_SSE_CC_EQ = 0, X86_SSE_CC_LT = 1, X86_SSE_CC_GT = 1, X86_SSE_CC_LE = 2, X86_SSE_CC_GE = 2, X86_SSE_CC_U = 3, X86_SSE_CC_NEQ = 4, X86_SSE_CC_NLT = 5, X86_SSE_CC_NGT = 5, X86_SSE_CC_NLE = 6, X86_SSE_CC_NGE = 6, X86_SSE_CC_O = 7 }; enum { X86_SSE_UCOMI = 0x2e, X86_SSE_COMI = 0x2f, X86_SSE_CMP = 0xc2, X86_SSE_SQRT = 0x51, X86_SSE_RSQRT = 0x52, X86_SSE_RCP = 0x53, X86_SSE_AND = 0x54, X86_SSE_ANDN = 0x55, X86_SSE_OR = 0x56, X86_SSE_XOR = 0x57, X86_SSE_ADD = 0x58, X86_SSE_MUL = 0x59, X86_SSE_SUB = 0x5c, X86_SSE_MIN = 0x5d, X86_SSE_DIV = 0x5e, X86_SSE_MAX = 0x5f, X86_SSE_CVTDQ2PD = 0xe6, X86_SSE_CVTDQ2PS = 0x5b, X86_SSE_CVTPD2DQ = 0xe6, X86_SSE_CVTPD2PI = 0x2d, X86_SSE_CVTPD2PS = 0x5a, X86_SSE_CVTPI2PD = 0x2a, X86_SSE_CVTPI2PS = 0x2a, X86_SSE_CVTPS2DQ = 0x5b, X86_SSE_CVTPS2PD = 0x5a, X86_SSE_CVTPS2PI = 0x2d, X86_SSE_CVTSD2SI = 0x2d, X86_SSE_CVTSD2SS = 0x5a, X86_SSE_CVTSI2SD = 0x2a, X86_SSE_CVTSI2SS = 0x2a, X86_SSE_CVTSS2SD = 0x5a, X86_SSE_CVTSS2SI = 0x2d, X86_SSE_CVTTPD2PI = 0x2c, X86_SSE_CVTTPD2DQ = 0xe6, X86_SSE_CVTTPS2DQ = 0x5b, X86_SSE_CVTTPS2PI = 0x2c, X86_SSE_CVTTSD2SI = 0x2c, X86_SSE_CVTTSS2SI = 0x2c, X86_SSE_MOVMSK = 0x50, X86_SSE_PACKSSDW = 0x6b, X86_SSE_PACKSSWB = 0x63, X86_SSE_PACKUSWB = 0x67, X86_SSE_PADDB = 0xfc, X86_SSE_PADDD = 0xfe, X86_SSE_PADDQ = 0xd4, X86_SSE_PADDSB = 0xec, X86_SSE_PADDSW = 0xed, X86_SSE_PADDUSB = 0xdc, X86_SSE_PADDUSW = 0xdd, X86_SSE_PADDW = 0xfd, X86_SSE_PAND = 0xdb, X86_SSE_PANDN = 0xdf, X86_SSE_PAVGB = 0xe0, X86_SSE_PAVGW = 0xe3, X86_SSE_PCMPEQB = 0x74, X86_SSE_PCMPEQD = 0x76, X86_SSE_PCMPEQW = 0x75, X86_SSE_PCMPGTB = 0x64, X86_SSE_PCMPGTD = 0x66, X86_SSE_PCMPGTW = 0x65, X86_SSE_PMADDWD = 0xf5, X86_SSE_PMAXSW = 0xee, X86_SSE_PMAXUB = 0xde, X86_SSE_PMINSW = 0xea, X86_SSE_PMINUB = 0xda, X86_SSE_PMOVMSKB = 0xd7, X86_SSE_PMULHUW = 0xe4, X86_SSE_PMULHW = 0xe5, X86_SSE_PMULLW = 0xd5, X86_SSE_PMULUDQ = 0xf4, X86_SSE_POR = 0xeb, X86_SSE_PSADBW = 0xf6, X86_SSE_PSLLD = 0xf2, X86_SSE_PSLLQ = 0xf3, X86_SSE_PSLLW = 0xf1, X86_SSE_PSRAD = 0xe2, X86_SSE_PSRAW = 0xe1, X86_SSE_PSRLD = 0xd2, X86_SSE_PSRLQ = 0xd3, X86_SSE_PSRLW = 0xd1, X86_SSE_PSUBB = 0xf8, X86_SSE_PSUBD = 0xfa, X86_SSE_PSUBQ = 0xfb, X86_SSE_PSUBSB = 0xe8, X86_SSE_PSUBSW = 0xe9, X86_SSE_PSUBUSB = 0xd8, X86_SSE_PSUBUSW = 0xd9, X86_SSE_PSUBW = 0xf9, X86_SSE_PUNPCKHBW = 0x68, X86_SSE_PUNPCKHDQ = 0x6a, X86_SSE_PUNPCKHQDQ = 0x6d, X86_SSE_PUNPCKHWD = 0x69, X86_SSE_PUNPCKLBW = 0x60, X86_SSE_PUNPCKLDQ = 0x62, X86_SSE_PUNPCKLQDQ = 0x6c, X86_SSE_PUNPCKLWD = 0x61, X86_SSE_PXOR = 0xef, X86_SSSE3_PSHUFB = 0x00, }; /* _format Opcd ,Mod ,r ,m ,mem=dsp+sib ,imm... */ #define _SSSE3Lrr(OP1,OP2,RS,RSA,RD,RDA) (_B(0x66), _REXLrr(RD,RD), _B(0x0f), _OO_Mrm (((OP1)<<8)|(OP2) ,_b11,RDA(RD),RSA(RS) )) #define _SSSE3Lmr(OP1,OP2,MD,MB,MI,MS,RD,RDA) (_B(0x66), _REXLmr(MB, MI, RD), _B(0x0f), _OO_r_X (((OP1)<<8)|(OP2) ,RDA(RD) ,MD,MB,MI,MS )) #define _SSSE3Lirr(OP1,OP2,IM,RS,RD) (_B(0x66), _REXLrr(RD, RS), _B(0x0f), _OO_Mrm_B (((OP1)<<8)|(OP2) ,_b11,_rX(RD),_rX(RS) ,_u8(IM))) #define _SSSE3Limr(OP1,OP2,IM,MD,MB,MI,MS,RD) (_B(0x66), _REXLmr(MB, MI, RD), _B(0x0f), _OO_r_X_B (((OP1)<<8)|(OP2) ,_rX(RD) ,MD,MB,MI,MS ,_u8(IM))) #define __SSELir(OP,MO,IM,RD) (_REXLrr(0, RD), _OO_Mrm_B (0x0f00|(OP) ,_b11,MO ,_rX(RD) ,_u8(IM))) #define __SSELim(OP,MO,IM,MD,MB,MI,MS) (_REXLrm(0, MB, MI), _OO_r_X_B (0x0f00|(OP) ,MO ,MD,MB,MI,MS ,_u8(IM))) #define __SSELrr(OP,RS,RSA,RD,RDA) (_REXLrr(RD, RS), _OO_Mrm (0x0f00|(OP) ,_b11,RDA(RD),RSA(RS) )) #define __SSELmr(OP,MD,MB,MI,MS,RD,RDA) (_REXLmr(MB, MI, RD), _OO_r_X (0x0f00|(OP) ,RDA(RD) ,MD,MB,MI,MS )) #define __SSELrm(OP,RS,RSA,MD,MB,MI,MS) (_REXLrm(RS, MB, MI), _OO_r_X (0x0f00|(OP) ,RSA(RS) ,MD,MB,MI,MS )) #define __SSELirr(OP,IM,RS,RD) (_REXLrr(RD, RS), _OO_Mrm_B (0x0f00|(OP) ,_b11,_rX(RD),_rX(RS) ,_u8(IM))) #define __SSELimr(OP,IM,MD,MB,MI,MS,RD) (_REXLmr(MB, MI, RD), _OO_r_X_B (0x0f00|(OP) ,_rX(RD) ,MD,MB,MI,MS ,_u8(IM))) #define __SSEQrr(OP,RS,RSA,RD,RDA) (_REXQrr(RD, RS), _OO_Mrm (0x0f00|(OP) ,_b11,RDA(RD),RSA(RS) )) #define __SSEQmr(OP,MD,MB,MI,MS,RD,RDA) (_REXQmr(MB, MI, RD), _OO_r_X (0x0f00|(OP) ,RDA(RD) ,MD,MB,MI,MS )) #define __SSEQrm(OP,RS,RSA,MD,MB,MI,MS) (_REXQrm(RS, MB, MI), _OO_r_X (0x0f00|(OP) ,RSA(RS) ,MD,MB,MI,MS )) #define _SSELrr(PX,OP,RS,RSA,RD,RDA) (_B(PX), __SSELrr(OP, RS, RSA, RD, RDA)) #define _SSELmr(PX,OP,MD,MB,MI,MS,RD,RDA) (_B(PX), __SSELmr(OP, MD, MB, MI, MS, RD, RDA)) #define _SSELrm(PX,OP,RS,RSA,MD,MB,MI,MS) (_B(PX), __SSELrm(OP, RS, RSA, MD, MB, MI, MS)) #define _SSELir(PX,OP,MO,IM,RD) (_B(PX), __SSELir(OP, MO, IM, RD)) #define _SSELim(PX,OP,MO,IM,MD,MB,MI,MS) (_B(PX), __SSELim(OP, MO, IM, MD, MB, MI, MS)) #define _SSELirr(PX,OP,IM,RS,RD) (_B(PX), __SSELirr(OP, IM, RS, RD)) #define _SSELimr(PX,OP,IM,MD,MB,MI,MS,RD) (_B(PX), __SSELimr(OP, IM, MD, MB, MI, MS, RD)) #define _SSEQrr(PX,OP,RS,RSA,RD,RDA) (_B(PX), __SSEQrr(OP, RS, RSA, RD, RDA)) #define _SSEQmr(PX,OP,MD,MB,MI,MS,RD,RDA) (_B(PX), __SSEQmr(OP, MD, MB, MI, MS, RD, RDA)) #define _SSEQrm(PX,OP,RS,RSA,MD,MB,MI,MS) (_B(PX), __SSEQrm(OP, RS, RSA, MD, MB, MI, MS)) #define _SSEPSrr(OP,RS,RD) __SSELrr( OP, RS,_rX, RD,_rX) #define _SSEPSmr(OP,MD,MB,MI,MS,RD) __SSELmr( OP, MD, MB, MI, MS, RD,_rX) #define _SSEPSrm(OP,RS,MD,MB,MI,MS) __SSELrm( OP, RS,_rX, MD, MB, MI, MS) #define _SSEPSirr(OP,IM,RS,RD) __SSELirr( OP, IM, RS, RD) #define _SSEPSimr(OP,IM,MD,MB,MI,MS,RD) __SSELimr( OP, IM, MD, MB, MI, MS, RD) #define _SSEPDrr(OP,RS,RD) _SSELrr(0x66, OP, RS,_rX, RD,_rX) #define _SSEPDmr(OP,MD,MB,MI,MS,RD) _SSELmr(0x66, OP, MD, MB, MI, MS, RD,_rX) #define _SSEPDrm(OP,RS,MD,MB,MI,MS) _SSELrm(0x66, OP, RS,_rX, MD, MB, MI, MS) #define _SSEPDirr(OP,IM,RS,RD) _SSELirr(0x66, OP, IM, RS, RD) #define _SSEPDimr(OP,IM,MD,MB,MI,MS,RD) _SSELimr(0x66, OP, IM, MD, MB, MI, MS, RD) #define _SSESSrr(OP,RS,RD) _SSELrr(0xf3, OP, RS,_rX, RD,_rX) #define _SSESSmr(OP,MD,MB,MI,MS,RD) _SSELmr(0xf3, OP, MD, MB, MI, MS, RD,_rX) #define _SSESSrm(OP,RS,MD,MB,MI,MS) _SSELrm(0xf3, OP, RS,_rX, MD, MB, MI, MS) #define _SSESSirr(OP,IM,RS,RD) _SSELirr(0xf3, OP, IM, RS, RD) #define _SSESSimr(OP,IM,MD,MB,MI,MS,RD) _SSELimr(0xf3, OP, IM, MD, MB, MI, MS, RD) #define _SSESDrr(OP,RS,RD) _SSELrr(0xf2, OP, RS,_rX, RD,_rX) #define _SSESDmr(OP,MD,MB,MI,MS,RD) _SSELmr(0xf2, OP, MD, MB, MI, MS, RD,_rX) #define _SSESDrm(OP,RS,MD,MB,MI,MS) _SSELrm(0xf2, OP, RS,_rX, MD, MB, MI, MS) #define _SSESDirr(OP,IM,RS,RD) _SSELirr(0xf2, OP, IM, RS, RD) #define _SSESDimr(OP,IM,MD,MB,MI,MS,RD) _SSELimr(0xf2, OP, IM, MD, MB, MI, MS, RD) #define ADDPSrr(RS, RD) _SSEPSrr(X86_SSE_ADD, RS, RD) #define ADDPSmr(MD, MB, MI, MS, RD) _SSEPSmr(X86_SSE_ADD, MD, MB, MI, MS, RD) #define ADDPDrr(RS, RD) _SSEPDrr(X86_SSE_ADD, RS, RD) #define ADDPDmr(MD, MB, MI, MS, RD) _SSEPDmr(X86_SSE_ADD, MD, MB, MI, MS, RD) #define ADDSSrr(RS, RD) _SSESSrr(X86_SSE_ADD, RS, RD) #define ADDSSmr(MD, MB, MI, MS, RD) _SSESSmr(X86_SSE_ADD, MD, MB, MI, MS, RD) #define ADDSDrr(RS, RD) _SSESDrr(X86_SSE_ADD, RS, RD) #define ADDSDmr(MD, MB, MI, MS, RD) _SSESDmr(X86_SSE_ADD, MD, MB, MI, MS, RD) #define ANDNPSrr(RS, RD) _SSEPSrr(X86_SSE_ANDN, RS, RD) #define ANDNPSmr(MD, MB, MI, MS, RD) _SSEPSmr(X86_SSE_ANDN, MD, MB, MI, MS, RD) #define ANDNPDrr(RS, RD) _SSEPDrr(X86_SSE_ANDN, RS, RD) #define ANDNPDmr(MD, MB, MI, MS, RD) _SSEPDmr(X86_SSE_ANDN, MD, MB, MI, MS, RD) #define ANDPSrr(RS, RD) _SSEPSrr(X86_SSE_AND, RS, RD) #define ANDPSmr(MD, MB, MI, MS, RD) _SSEPSmr(X86_SSE_AND, MD, MB, MI, MS, RD) #define ANDPDrr(RS, RD) _SSEPDrr(X86_SSE_AND, RS, RD) #define ANDPDmr(MD, MB, MI, MS, RD) _SSEPDmr(X86_SSE_AND, MD, MB, MI, MS, RD) #define CMPPSrr(IM, RS, RD) _SSEPSirr(X86_SSE_CMP, IM, RS, RD) #define CMPPSmr(IM, MD, MB, MI, MS, RD) _SSEPSimr(X86_SSE_CMP, IM, MD, MB, MI, MS, RD) #define CMPPDrr(IM, RS, RD) _SSEPDirr(X86_SSE_CMP, IM, RS, RD) #define CMPPDmr(IM, MD, MB, MI, MS, RD) _SSEPDimr(X86_SSE_CMP, IM, MD, MB, MI, MS, RD) #define CMPSSrr(IM, RS, RD) _SSESSirr(X86_SSE_CMP, IM, RS, RD) #define CMPSSmr(IM, MD, MB, MI, MS, RD) _SSESSimr(X86_SSE_CMP, IM, MD, MB, MI, MS, RD) #define CMPSDrr(IM, RS, RD) _SSESDirr(X86_SSE_CMP, IM, RS, RD) #define CMPSDmr(IM, MD, MB, MI, MS, RD) _SSESDimr(X86_SSE_CMP, IM, MD, MB, MI, MS, RD) #define DIVPSrr(RS, RD) _SSEPSrr(X86_SSE_DIV, RS, RD) #define DIVPSmr(MD, MB, MI, MS, RD) _SSEPSmr(X86_SSE_DIV, MD, MB, MI, MS, RD) #define DIVPDrr(RS, RD) _SSEPDrr(X86_SSE_DIV, RS, RD) #define DIVPDmr(MD, MB, MI, MS, RD) _SSEPDmr(X86_SSE_DIV, MD, MB, MI, MS, RD) #define DIVSSrr(RS, RD) _SSESSrr(X86_SSE_DIV, RS, RD) #define DIVSSmr(MD, MB, MI, MS, RD) _SSESSmr(X86_SSE_DIV, MD, MB, MI, MS, RD) #define DIVSDrr(RS, RD) _SSESDrr(X86_SSE_DIV, RS, RD) #define DIVSDmr(MD, MB, MI, MS, RD) _SSESDmr(X86_SSE_DIV, MD, MB, MI, MS, RD) #define MAXPSrr(RS, RD) _SSEPSrr(X86_SSE_MAX, RS, RD) #define MAXPSmr(MD, MB, MI, MS, RD) _SSEPSmr(X86_SSE_MAX, MD, MB, MI, MS, RD) #define MAXPDrr(RS, RD) _SSEPDrr(X86_SSE_MAX, RS, RD) #define MAXPDmr(MD, MB, MI, MS, RD) _SSEPDmr(X86_SSE_MAX, MD, MB, MI, MS, RD) #define MAXSSrr(RS, RD) _SSESSrr(X86_SSE_MAX, RS, RD) #define MAXSSmr(MD, MB, MI, MS, RD) _SSESSmr(X86_SSE_MAX, MD, MB, MI, MS, RD) #define MAXSDrr(RS, RD) _SSESDrr(X86_SSE_MAX, RS, RD) #define MAXSDmr(MD, MB, MI, MS, RD) _SSESDmr(X86_SSE_MAX, MD, MB, MI, MS, RD) #define MINPSrr(RS, RD) _SSEPSrr(X86_SSE_MIN, RS, RD) #define MINPSmr(MD, MB, MI, MS, RD) _SSEPSmr(X86_SSE_MIN, MD, MB, MI, MS, RD) #define MINPDrr(RS, RD) _SSEPDrr(X86_SSE_MIN, RS, RD) #define MINPDmr(MD, MB, MI, MS, RD) _SSEPDmr(X86_SSE_MIN, MD, MB, MI, MS, RD) #define MINSSrr(RS, RD) _SSESSrr(X86_SSE_MIN, RS, RD) #define MINSSmr(MD, MB, MI, MS, RD) _SSESSmr(X86_SSE_MIN, MD, MB, MI, MS, RD) #define MINSDrr(RS, RD) _SSESDrr(X86_SSE_MIN, RS, RD) #define MINSDmr(MD, MB, MI, MS, RD) _SSESDmr(X86_SSE_MIN, MD, MB, MI, MS, RD) #define MULPSrr(RS, RD) _SSEPSrr(X86_SSE_MUL, RS, RD) #define MULPSmr(MD, MB, MI, MS, RD) _SSEPSmr(X86_SSE_MUL, MD, MB, MI, MS, RD) #define MULPDrr(RS, RD) _SSEPDrr(X86_SSE_MUL, RS, RD) #define MULPDmr(MD, MB, MI, MS, RD) _SSEPDmr(X86_SSE_MUL, MD, MB, MI, MS, RD) #define MULSSrr(RS, RD) _SSESSrr(X86_SSE_MUL, RS, RD) #define MULSSmr(MD, MB, MI, MS, RD) _SSESSmr(X86_SSE_MUL, MD, MB, MI, MS, RD) #define MULSDrr(RS, RD) _SSESDrr(X86_SSE_MUL, RS, RD) #define MULSDmr(MD, MB, MI, MS, RD) _SSESDmr(X86_SSE_MUL, MD, MB, MI, MS, RD) #define ORPSrr(RS, RD) _SSEPSrr(X86_SSE_OR, RS, RD) #define ORPSmr(MD, MB, MI, MS, RD) _SSEPSmr(X86_SSE_OR, MD, MB, MI, MS, RD) #define ORPDrr(RS, RD) _SSEPDrr(X86_SSE_OR, RS, RD) #define ORPDmr(MD, MB, MI, MS, RD) _SSEPDmr(X86_SSE_OR, MD, MB, MI, MS, RD) #define RCPPSrr(RS, RD) _SSEPSrr(X86_SSE_RCP, RS, RD) #define RCPPSmr(MD, MB, MI, MS, RD) _SSEPSmr(X86_SSE_RCP, MD, MB, MI, MS, RD) #define RCPSSrr(RS, RD) _SSESSrr(X86_SSE_RCP, RS, RD) #define RCPSSmr(MD, MB, MI, MS, RD) _SSESSmr(X86_SSE_RCP, MD, MB, MI, MS, RD) #define RSQRTPSrr(RS, RD) _SSEPSrr(X86_SSE_RSQRT, RS, RD) #define RSQRTPSmr(MD, MB, MI, MS, RD) _SSEPSmr(X86_SSE_RSQRT, MD, MB, MI, MS, RD) #define RSQRTSSrr(RS, RD) _SSESSrr(X86_SSE_RSQRT, RS, RD) #define RSQRTSSmr(MD, MB, MI, MS, RD) _SSESSmr(X86_SSE_RSQRT, MD, MB, MI, MS, RD) #define SQRTPSrr(RS, RD) _SSEPSrr(X86_SSE_SQRT, RS, RD) #define SQRTPSmr(MD, MB, MI, MS, RD) _SSEPSmr(X86_SSE_SQRT, MD, MB, MI, MS, RD) #define SQRTPDrr(RS, RD) _SSEPDrr(X86_SSE_SQRT, RS, RD) #define SQRTPDmr(MD, MB, MI, MS, RD) _SSEPDmr(X86_SSE_SQRT, MD, MB, MI, MS, RD) #define SQRTSSrr(RS, RD) _SSESSrr(X86_SSE_SQRT, RS, RD) #define SQRTSSmr(MD, MB, MI, MS, RD) _SSESSmr(X86_SSE_SQRT, MD, MB, MI, MS, RD) #define SQRTSDrr(RS, RD) _SSESDrr(X86_SSE_SQRT, RS, RD) #define SQRTSDmr(MD, MB, MI, MS, RD) _SSESDmr(X86_SSE_SQRT, MD, MB, MI, MS, RD) #define SUBPSrr(RS, RD) _SSEPSrr(X86_SSE_SUB, RS, RD) #define SUBPSmr(MD, MB, MI, MS, RD) _SSEPSmr(X86_SSE_SUB, MD, MB, MI, MS, RD) #define SUBPDrr(RS, RD) _SSEPDrr(X86_SSE_SUB, RS, RD) #define SUBPDmr(MD, MB, MI, MS, RD) _SSEPDmr(X86_SSE_SUB, MD, MB, MI, MS, RD) #define SUBSSrr(RS, RD) _SSESSrr(X86_SSE_SUB, RS, RD) #define SUBSSmr(MD, MB, MI, MS, RD) _SSESSmr(X86_SSE_SUB, MD, MB, MI, MS, RD) #define SUBSDrr(RS, RD) _SSESDrr(X86_SSE_SUB, RS, RD) #define SUBSDmr(MD, MB, MI, MS, RD) _SSESDmr(X86_SSE_SUB, MD, MB, MI, MS, RD) #define XORPSrr(RS, RD) _SSEPSrr(X86_SSE_XOR, RS, RD) #define XORPSmr(MD, MB, MI, MS, RD) _SSEPSmr(X86_SSE_XOR, MD, MB, MI, MS, RD) #define XORPDrr(RS, RD) _SSEPDrr(X86_SSE_XOR, RS, RD) #define XORPDmr(MD, MB, MI, MS, RD) _SSEPDmr(X86_SSE_XOR, MD, MB, MI, MS, RD) #define COMISSrr(RS, RD) _SSEPSrr(X86_SSE_COMI, RS, RD) #define COMISSmr(MD, MB, MI, MS, RD) _SSEPSmr(X86_SSE_COMI, MD, MB, MI, MS, RD) #define COMISDrr(RS, RD) _SSEPDrr(X86_SSE_COMI, RS, RD) #define COMISDmr(MD, MB, MI, MS, RD) _SSEPDmr(X86_SSE_COMI, MD, MB, MI, MS, RD) #define UCOMISSrr(RS, RD) _SSEPSrr(X86_SSE_UCOMI, RS, RD) #define UCOMISSmr(MD, MB, MI, MS, RD) _SSEPSmr(X86_SSE_UCOMI, MD, MB, MI, MS, RD) #define UCOMISDrr(RS, RD) _SSEPDrr(X86_SSE_UCOMI, RS, RD) #define UCOMISDmr(MD, MB, MI, MS, RD) _SSEPDmr(X86_SSE_UCOMI, MD, MB, MI, MS, RD) #define MOVAPSrr(RS, RD) _SSEPSrr(0x28, RS, RD) #define MOVAPSmr(MD, MB, MI, MS, RD) _SSEPSmr(0x28, MD, MB, MI, MS, RD) #define MOVAPSrm(RS, MD, MB, MI, MS) _SSEPSrm(0x29, RS, MD, MB, MI, MS) #define MOVAPDrr(RS, RD) _SSEPDrr(0x28, RS, RD) #define MOVAPDmr(MD, MB, MI, MS, RD) _SSEPDmr(0x28, MD, MB, MI, MS, RD) #define MOVAPDrm(RS, MD, MB, MI, MS) _SSEPDrm(0x29, RS, MD, MB, MI, MS) #define CVTDQ2PDrr(RS, RD) _SSELrr(0xf3, X86_SSE_CVTDQ2PD, RS,_rX, RD,_rX) #define CVTDQ2PDmr(MD, MB, MI, MS, RD) _SSELmr(0xf3, X86_SSE_CVTDQ2PD, MD, MB, MI, MS, RD,_rX) #define CVTDQ2PSrr(RS, RD) __SSELrr( X86_SSE_CVTDQ2PS, RS,_rX, RD,_rX) #define CVTDQ2PSmr(MD, MB, MI, MS, RD) __SSELmr( X86_SSE_CVTDQ2PS, MD, MB, MI, MS, RD,_rX) #define CVTPD2DQrr(RS, RD) _SSELrr(0xf2, X86_SSE_CVTPD2DQ, RS,_rX, RD,_rX) #define CVTPD2DQmr(MD, MB, MI, MS, RD) _SSELmr(0xf2, X86_SSE_CVTPD2DQ, MD, MB, MI, MS, RD,_rX) #define CVTPD2PIrr(RS, RD) _SSELrr(0x66, X86_SSE_CVTPD2PI, RS,_rX, RD,_rM) #define CVTPD2PImr(MD, MB, MI, MS, RD) _SSELmr(0x66, X86_SSE_CVTPD2PI, MD, MB, MI, MS, RD,_rM) #define CVTPD2PSrr(RS, RD) _SSELrr(0x66, X86_SSE_CVTPD2PS, RS,_rX, RD,_rX) #define CVTPD2PSmr(MD, MB, MI, MS, RD) _SSELmr(0x66, X86_SSE_CVTPD2PS, MD, MB, MI, MS, RD,_rX) #define CVTPI2PDrr(RS, RD) _SSELrr(0x66, X86_SSE_CVTPI2PD, RS,_rM, RD,_rX) #define CVTPI2PDmr(MD, MB, MI, MS, RD) _SSELmr(0x66, X86_SSE_CVTPI2PD, MD, MB, MI, MS, RD,_rX) #define CVTPI2PSrr(RS, RD) __SSELrr( X86_SSE_CVTPI2PS, RS,_rM, RD,_rX) #define CVTPI2PSmr(MD, MB, MI, MS, RD) __SSELmr( X86_SSE_CVTPI2PS, MD, MB, MI, MS, RD,_rX) #define CVTPS2DQrr(RS, RD) _SSELrr(0x66, X86_SSE_CVTPS2DQ, RS,_rX, RD,_rX) #define CVTPS2DQmr(MD, MB, MI, MS, RD) _SSELmr(0x66, X86_SSE_CVTPS2DQ, MD, MB, MI, MS, RD,_rX) #define CVTPS2PDrr(RS, RD) __SSELrr( X86_SSE_CVTPS2PD, RS,_rX, RD,_rX) #define CVTPS2PDmr(MD, MB, MI, MS, RD) __SSELmr( X86_SSE_CVTPS2PD, MD, MB, MI, MS, RD,_rX) #define CVTPS2PIrr(RS, RD) __SSELrr( X86_SSE_CVTPS2PI, RS,_rX, RD,_rM) #define CVTPS2PImr(MD, MB, MI, MS, RD) __SSELmr( X86_SSE_CVTPS2PI, MD, MB, MI, MS, RD,_rM) #define CVTSD2SILrr(RS, RD) _SSELrr(0xf2, X86_SSE_CVTSD2SI, RS,_rX, RD,_r4) #define CVTSD2SILmr(MD, MB, MI, MS, RD) _SSELmr(0xf2, X86_SSE_CVTSD2SI, MD, MB, MI, MS, RD,_r4) #define CVTSD2SIQrr(RS, RD) _SSEQrr(0xf2, X86_SSE_CVTSD2SI, RS,_rX, RD,_r8) #define CVTSD2SIQmr(MD, MB, MI, MS, RD) _SSEQmr(0xf2, X86_SSE_CVTSD2SI, MD, MB, MI, MS, RD,_r8) #define CVTSD2SSrr(RS, RD) _SSELrr(0xf2, X86_SSE_CVTSD2SS, RS,_rX, RD,_rX) #define CVTSD2SSmr(MD, MB, MI, MS, RD) _SSELmr(0xf2, X86_SSE_CVTSD2SS, MD, MB, MI, MS, RD,_rX) #define CVTSI2SDLrr(RS, RD) _SSELrr(0xf2, X86_SSE_CVTSI2SD, RS,_r4, RD,_rX) #define CVTSI2SDLmr(MD, MB, MI, MS, RD) _SSELmr(0xf2, X86_SSE_CVTSI2SD, MD, MB, MI, MS, RD,_rX) #define CVTSI2SDQrr(RS, RD) _SSEQrr(0xf2, X86_SSE_CVTSI2SD, RS,_r8, RD,_rX) #define CVTSI2SDQmr(MD, MB, MI, MS, RD) _SSEQmr(0xf2, X86_SSE_CVTSI2SD, MD, MB, MI, MS, RD,_rX) #define CVTSI2SSLrr(RS, RD) _SSELrr(0xf3, X86_SSE_CVTSI2SS, RS,_r4, RD,_rX) #define CVTSI2SSLmr(MD, MB, MI, MS, RD) _SSELmr(0xf3, X86_SSE_CVTSI2SS, MD, MB, MI, MS, RD,_rX) #define CVTSI2SSQrr(RS, RD) _SSEQrr(0xf3, X86_SSE_CVTSI2SS, RS,_r8, RD,_rX) #define CVTSI2SSQmr(MD, MB, MI, MS, RD) _SSEQmr(0xf3, X86_SSE_CVTSI2SS, MD, MB, MI, MS, RD,_rX) #define CVTSS2SDrr(RS, RD) _SSELrr(0xf3, X86_SSE_CVTSS2SD, RS,_rX, RD,_rX) #define CVTSS2SDmr(MD, MB, MI, MS, RD) _SSELmr(0xf3, X86_SSE_CVTSS2SD, MD, MB, MI, MS, RD,_rX) #define CVTSS2SILrr(RS, RD) _SSELrr(0xf3, X86_SSE_CVTSS2SI, RS,_rX, RD,_r4) #define CVTSS2SILmr(MD, MB, MI, MS, RD) _SSELmr(0xf3, X86_SSE_CVTSS2SI, MD, MB, MI, MS, RD,_r4) #define CVTSS2SIQrr(RS, RD) _SSEQrr(0xf3, X86_SSE_CVTSS2SI, RS,_rX, RD,_r8) #define CVTSS2SIQmr(MD, MB, MI, MS, RD) _SSEQmr(0xf3, X86_SSE_CVTSS2SI, MD, MB, MI, MS, RD,_r8) #define CVTTPD2PIrr(RS, RD) _SSELrr(0x66, X86_SSE_CVTTPD2PI, RS,_rX, RD,_rM) #define CVTTPD2PImr(MD, MB, MI, MS, RD) _SSELmr(0x66, X86_SSE_CVTTPD2PI, MD, MB, MI, MS, RD,_rM) #define CVTTPD2DQrr(RS, RD) _SSELrr(0x66, X86_SSE_CVTTPD2DQ, RS,_rX, RD,_rX) #define CVTTPD2DQmr(MD, MB, MI, MS, RD) _SSELmr(0x66, X86_SSE_CVTTPD2DQ, MD, MB, MI, MS, RD,_rX) #define CVTTPS2DQrr(RS, RD) _SSELrr(0xf3, X86_SSE_CVTTPS2DQ, RS,_rX, RD,_rX) #define CVTTPS2DQmr(MD, MB, MI, MS, RD) _SSELmr(0xf3, X86_SSE_CVTTPS2DQ, MD, MB, MI, MS, RD,_rX) #define CVTTPS2PIrr(RS, RD) __SSELrr( X86_SSE_CVTTPS2PI, RS,_rX, RD,_rM) #define CVTTPS2PImr(MD, MB, MI, MS, RD) __SSELmr( X86_SSE_CVTTPS2PI, MD, MB, MI, MS, RD,_rM) #define CVTTSD2SILrr(RS, RD) _SSELrr(0xf2, X86_SSE_CVTTSD2SI, RS,_rX, RD,_r4) #define CVTTSD2SILmr(MD, MB, MI, MS, RD) _SSELmr(0xf2, X86_SSE_CVTTSD2SI, MD, MB, MI, MS, RD,_r4) #define CVTTSD2SIQrr(RS, RD) _SSEQrr(0xf2, X86_SSE_CVTTSD2SI, RS,_rX, RD,_r8) #define CVTTSD2SIQmr(MD, MB, MI, MS, RD) _SSEQmr(0xf2, X86_SSE_CVTTSD2SI, MD, MB, MI, MS, RD,_r8) #define CVTTSS2SILrr(RS, RD) _SSELrr(0xf3, X86_SSE_CVTTSS2SI, RS,_rX, RD,_r4) #define CVTTSS2SILmr(MD, MB, MI, MS, RD) _SSELmr(0xf3, X86_SSE_CVTTSS2SI, MD, MB, MI, MS, RD,_r4) #define CVTTSS2SIQrr(RS, RD) _SSEQrr(0xf3, X86_SSE_CVTTSS2SI, RS,_rX, RD,_r8) #define CVTTSS2SIQmr(MD, MB, MI, MS, RD) _SSEQmr(0xf3, X86_SSE_CVTTSS2SI, MD, MB, MI, MS, RD,_r8) #define MOVDXDrr(RS, RD) _SSELrr(0x66, 0x6e, RS,_r4, RD,_rX) #define MOVDXDmr(MD, MB, MI, MS, RD) _SSELmr(0x66, 0x6e, MD, MB, MI, MS, RD,_rX) #define MOVQXDrr(RS, RD) _SSEQrr(0x66, 0x6e, RS,_r8, RD,_rX) #define MOVQXDmr(MD, MB, MI, MS, RD) _SSEQmr(0x66, 0x6e, MD, MB, MI, MS, RD,_rX) #define MOVDXSrr(RS, RD) _SSELrr(0x66, 0x7e, RD,_r4, RS,_rX) #define MOVDXSrm(RS, MD, MB, MI, MS) _SSELrm(0x66, 0x7e, RS,_rX, MD, MB, MI, MS) #define MOVQXSrr(RS, RD) _SSEQrr(0x66, 0x7e, RD,_r8, RS,_rX) #define MOVQXSrm(RS, MD, MB, MI, MS) _SSEQrm(0x66, 0x7e, RS,_rX, MD, MB, MI, MS) #define MOVDLMrr(RS, RD) __SSELrr( 0x6e, RS,_r4, RD,_rM) #define MOVDLMmr(MD, MB, MI, MS, RD) __SSELmr( 0x6e, MD, MB, MI, MS, RD,_rM) #define MOVDQMrr(RS, RD) __SSEQrr( 0x6e, RS,_r8, RD,_rM) #define MOVDQMmr(MD, MB, MI, MS, RD) __SSEQmr( 0x6e, MD, MB, MI, MS, RD,_rM) #define MOVDMLrr(RS, RD) __SSELrr( 0x7e, RS,_rM, RD,_r4) #define MOVDMLrm(RS, MD, MB, MI, MS) __SSELrm( 0x7e, RS,_rM, MD, MB, MI, MS) #define MOVDMQrr(RS, RD) __SSEQrr( 0x7e, RS,_rM, RD,_r8) #define MOVDMQrm(RS, MD, MB, MI, MS) __SSEQrm( 0x7e, RS,_rM, MD, MB, MI, MS) #define MOVDQ2Qrr(RS, RD) _SSELrr(0xf2, 0xd6, RS,_rX, RD,_rM) #define MOVMSKPSrr(RS, RD) __SSELrr( 0x50, RS,_rX, RD,_r4) #define MOVMSKPDrr(RS, RD) _SSELrr(0x66, 0x50, RS,_rX, RD,_r4) #define MOVHLPSrr(RS, RD) __SSELrr( 0x12, RS,_rX, RD,_rX) #define MOVLHPSrr(RS, RD) __SSELrr( 0x16, RS,_rX, RD,_rX) #define MOVDQArr(RS, RD) _SSELrr(0x66, 0x6f, RS,_rX, RD,_rX) #define MOVDQAmr(MD, MB, MI, MS, RD) _SSELmr(0x66, 0x6f, MD, MB, MI, MS, RD,_rX) #define MOVDQArm(RS, MD, MB, MI, MS) _SSELrm(0x66, 0x7f, RS,_rX, MD, MB, MI, MS) #define MOVDQUrr(RS, RD) _SSELrr(0xf3, 0x6f, RS,_rX, RD,_rX) #define MOVDQUmr(MD, MB, MI, MS, RD) _SSELmr(0xf3, 0x6f, MD, MB, MI, MS, RD,_rX) #define MOVDQUrm(RS, MD, MB, MI, MS) _SSELrm(0xf3, 0x7f, RS,_rX, MD, MB, MI, MS) #define MOVHPDmr(MD, MB, MI, MS, RD) _SSELmr(0x66, 0x16, MD, MB, MI, MS, RD,_rX) #define MOVHPDrm(RS, MD, MB, MI, MS) _SSELrm(0x66, 0x17, RS,_rX, MD, MB, MI, MS) #define MOVHPSmr(MD, MB, MI, MS, RD) __SSELmr( 0x16, MD, MB, MI, MS, RD,_rX) #define MOVHPSrm(RS, MD, MB, MI, MS) __SSELrm( 0x17, RS,_rX, MD, MB, MI, MS) #define MOVLPDmr(MD, MB, MI, MS, RD) _SSELmr(0x66, 0x12, MD, MB, MI, MS, RD,_rX) #define MOVLPDrm(RS, MD, MB, MI, MS) _SSELrm(0x66, 0x13, RS,_rX, MD, MB, MI, MS) #define MOVLPSmr(MD, MB, MI, MS, RD) __SSELmr( 0x12, MD, MB, MI, MS, RD,_rX) #define MOVLPSrm(RS, MD, MB, MI, MS) __SSELrm( 0x13, RS,_rX, MD, MB, MI, MS) /* --- FLoating-Point instructions ----------------------------------------- */ #define _ESCmi(D,B,I,S,OP) (_REXLrm(0,B,I), _O_r_X(0xd8|(OP & 7), (OP >> 3), D,B,I,S)) #define FLDr(R) _OOr(0xd9c0,_rN(R)) #define FLDLm(D,B,I,S) _ESCmi(D,B,I,S,005) #define FLDSm(D,B,I,S) _ESCmi(D,B,I,S,001) #define FLDTm(D,B,I,S) _ESCmi(D,B,I,S,053) #define FSTr(R) _OOr(0xddd0,_rN(R)) #define FSTSm(D,B,I,S) _ESCmi(D,B,I,S,021) #define FSTLm(D,B,I,S) _ESCmi(D,B,I,S,025) #define FSTPr(R) _OOr(0xddd8,_rN(R)) #define FSTPSm(D,B,I,S) _ESCmi(D,B,I,S,031) #define FSTPLm(D,B,I,S) _ESCmi(D,B,I,S,035) #define FSTPTm(D,B,I,S) _ESCmi(D,B,I,S,073) #define FADDr0(R) _OOr(0xd8c0,_rN(R)) #define FADD0r(R) _OOr(0xdcc0,_rN(R)) #define FADDP0r(R) _OOr(0xdec0,_rN(R)) #define FADDSm(D,B,I,S) _ESCmi(D,B,I,S,000) #define FADDLm(D,B,I,S) _ESCmi(D,B,I,S,004) #define FSUBSm(D,B,I,S) _ESCmi(D,B,I,S,040) #define FSUBLm(D,B,I,S) _ESCmi(D,B,I,S,044) #define FSUBr0(R) _OOr(0xd8e0,_rN(R)) #define FSUB0r(R) _OOr(0xdce8,_rN(R)) #define FSUBP0r(R) _OOr(0xdee8,_rN(R)) #define FSUBRr0(R) _OOr(0xd8e8,_rN(R)) #define FSUBR0r(R) _OOr(0xdce0,_rN(R)) #define FSUBRP0r(R) _OOr(0xdee0,_rN(R)) #define FSUBRSm(D,B,I,S) _ESCmi(D,B,I,S,050) #define FSUBRLm(D,B,I,S) _ESCmi(D,B,I,S,054) #define FMULr0(R) _OOr(0xd8c8,_rN(R)) #define FMUL0r(R) _OOr(0xdcc8,_rN(R)) #define FMULP0r(R) _OOr(0xdec8,_rN(R)) #define FMULSm(D,B,I,S) _ESCmi(D,B,I,S,010) #define FMULLm(D,B,I,S) _ESCmi(D,B,I,S,014) #define FDIVr0(R) _OOr(0xd8f0,_rN(R)) #define FDIV0r(R) _OOr(0xdcf8,_rN(R)) #define FDIVP0r(R) _OOr(0xdef8,_rN(R)) #define FDIVSm(D,B,I,S) _ESCmi(D,B,I,S,060) #define FDIVLm(D,B,I,S) _ESCmi(D,B,I,S,064) #define FDIVRr0(R) _OOr(0xd8f8,_rN(R)) #define FDIVR0r(R) _OOr(0xdcf0,_rN(R)) #define FDIVRP0r(R) _OOr(0xdef0,_rN(R)) #define FDIVRSm(D,B,I,S) _ESCmi(D,B,I,S,070) #define FDIVRLm(D,B,I,S) _ESCmi(D,B,I,S,074) #define FCMOVBr0(R) _OOr(0xdac0,_rN(R)) #define FCMOVBEr0(R) _OOr(0xdad0,_rN(R)) #define FCMOVEr0(R) _OOr(0xdac8,_rN(R)) #define FCMOVNBr0(R) _OOr(0xdbc0,_rN(R)) #define FCMOVNBEr0(R) _OOr(0xdbd0,_rN(R)) #define FCMOVNEr0(R) _OOr(0xdbc8,_rN(R)) #define FCMOVNUr0(R) _OOr(0xdbd8,_rN(R)) #define FCMOVUr0(R) _OOr(0xdad8,_rN(R)) #define FCOMIr0(R) _OOr(0xdbf0,_rN(R)) #define FCOMIPr0(R) _OOr(0xdff0,_rN(R)) #define FCOMr(R) _OOr(0xd8d0,_rN(R)) #define FCOMSm(D,B,I,S) _ESCmi(D,B,I,S,020) #define FCOMLm(D,B,I,S) _ESCmi(D,B,I,S,024) #define FCOMPr(R) _OOr(0xd8d8,_rN(R)) #define FCOMPSm(D,B,I,S) _ESCmi(D,B,I,S,030) #define FCOMPLm(D,B,I,S) _ESCmi(D,B,I,S,034) #define FUCOMIr0(R) _OOr(0xdbe8,_rN(R)) #define FUCOMIPr0(R) _OOr(0xdfe8,_rN(R)) #define FUCOMPr(R) _OOr(0xdde8,_rN(R)) #define FUCOMr(R) _OOr(0xdde0,_rN(R)) #define FIADDLm(D,B,I,S) _ESCmi(D,B,I,S,002) #define FICOMLm(D,B,I,S) _ESCmi(D,B,I,S,022) #define FICOMPLm(D,B,I,S) _ESCmi(D,B,I,S,032) #define FIDIVLm(D,B,I,S) _ESCmi(D,B,I,S,062) #define FIDIVRLm(D,B,I,S) _ESCmi(D,B,I,S,072) #define FILDLm(D,B,I,S) _ESCmi(D,B,I,S,003) #define FILDQm(D,B,I,S) _ESCmi(D,B,I,S,057) #define FIMULLm(D,B,I,S) _ESCmi(D,B,I,S,012) #define FISTLm(D,B,I,S) _ESCmi(D,B,I,S,023) #define FISTPLm(D,B,I,S) _ESCmi(D,B,I,S,033) #define FISTPQm(D,B,I,S) _ESCmi(D,B,I,S,077) #define FISUBLm(D,B,I,S) _ESCmi(D,B,I,S,042) #define FISUBRLm(D,B,I,S) _ESCmi(D,B,I,S,052) #define FREEr(R) _OOr(0xddc0,_rN(R)) #define FXCHr(R) _OOr(0xd9c8,_rN(R)) #endif /* X86_RTASM_H */ fs-uae-2.2.3+dfsg/src/jit/compemu_fpp.cpp0000644000175000017500000011552212162366654020455 0ustar glaubitzglaubitz/* * UAE - The Un*x Amiga Emulator * * MC68881 emulation * * Copyright 1996 Herman ten Brugge * Adapted for JIT compilation (c) Bernd Meyer, 2000 * Modified 2005 Peter Keunecke */ #include #include "sysconfig.h" #include "sysdeps.h" #include "options.h" #include "uae/memory.h" #include "custom.h" #include "newcpu.h" #include "ersatz.h" #include "md-fpp.h" #include "compemu.h" #if defined(JIT) uae_u32 temp_fp[] = {0,0,0}; /* To convert between FP and */ /* 128 words, indexed through the low byte of the 68k fpu control word */ static const uae_u16 x86_fpucw[]={ 0x137f, 0x137f, 0x137f, 0x137f, 0x137f, 0x137f, 0x137f, 0x137f, /* E-RN */ 0x1f7f, 0x1f7f, 0x1f7f, 0x1f7f, 0x1f7f, 0x1f7f, 0x1f7f, 0x1f7f, /* E-RZ */ 0x177f, 0x177f, 0x177f, 0x177f, 0x177f, 0x177f, 0x177f, 0x177f, /* E-RD */ 0x1b7f, 0x1b7f, 0x1b7f, 0x1b7f, 0x1b7f, 0x1b7f, 0x1b7f, 0x1b7f, /* E-RU */ 0x107f, 0x107f, 0x107f, 0x107f, 0x107f, 0x107f, 0x107f, 0x107f, /* S-RN */ 0x1c7f, 0x1c7f, 0x1c7f, 0x1c7f, 0x1c7f, 0x1c7f, 0x1c7f, 0x1c7f, /* S-RZ */ 0x147f, 0x147f, 0x147f, 0x147f, 0x147f, 0x147f, 0x147f, 0x147f, /* S-RD */ 0x187f, 0x187f, 0x187f, 0x187f, 0x187f, 0x187f, 0x187f, 0x187f, /* S-RU */ 0x127f, 0x127f, 0x127f, 0x127f, 0x127f, 0x127f, 0x127f, 0x127f, /* D-RN */ 0x1e7f, 0x1e7f, 0x1e7f, 0x1e7f, 0x1e7f, 0x1e7f, 0x1e7f, 0x1e7f, /* D-RZ */ 0x167f, 0x167f, 0x167f, 0x167f, 0x167f, 0x167f, 0x167f, 0x167f, /* D-RD */ 0x1a7f, 0x1a7f, 0x1a7f, 0x1a7f, 0x1a7f, 0x1a7f, 0x1a7f, 0x1a7f, /* D-RU */ 0x137f, 0x137f, 0x137f, 0x137f, 0x137f, 0x137f, 0x137f, 0x137f, /* ?-RN */ 0x1f7f, 0x1f7f, 0x1f7f, 0x1f7f, 0x1f7f, 0x1f7f, 0x1f7f, 0x1f7f, /* ?-RZ */ 0x177f, 0x177f, 0x177f, 0x177f, 0x177f, 0x177f, 0x177f, 0x177f, /* ?-RD */ 0x1b7f, 0x1b7f, 0x1b7f, 0x1b7f, 0x1b7f, 0x1b7f, 0x1b7f, 0x1b7f /* ?-RU */ }; static const int sz1[8] = { 4, 4, 12, 12, 2, 8, 1, 0 }; static const int sz2[8] = { 4, 4, 12, 12, 2, 8, 2, 0 }; static struct { double b[2]; double w[2]; double l[2]; } clamp_bounds = { { -128.0, 127.0 }, { -32768.0, 32767.0 }, { -2147483648.0, 2147483647.0 } }; /* return the required floating point precision or -1 for failure, 0=E, 1=S, 2=D */ STATIC_INLINE int comp_fp_get (uae_u32 opcode, uae_u16 extra, int treg) { int reg = opcode & 7; int mode = (opcode >> 3) & 7; int size = (extra >> 10) & 7; if (size == 3 || size == 7) /* 3 = packed decimal, 7 is not defined */ return -1; switch (mode) { case 0: /* Dn */ switch (size) { case 0: /* Long */ mov_l_mr((uae_u32)temp_fp,reg); fmovi_rm(treg,(uae_u32)temp_fp); return 2; case 1: /* Single */ mov_l_mr((uae_u32)temp_fp,reg); fmovs_rm(treg,(uae_u32)temp_fp); return 1; case 4: /* Word */ sign_extend_16_rr(S1,reg); mov_l_mr((uae_u32)temp_fp,S1); fmovi_rm(treg,(uae_u32)temp_fp); return 1; case 6: /* Byte */ sign_extend_8_rr(S1,reg); mov_l_mr((uae_u32)temp_fp,S1); fmovi_rm(treg,(uae_u32)temp_fp); return 1; default: return -1; } case 1: /* An, invalid mode */ return -1; case 2: /* (An) */ mov_l_rr(S1,reg+8); break; case 3: /* (An)+ */ mov_l_rr(S1,reg+8); lea_l_brr(reg+8,reg+8,(reg == 7?sz2[size]:sz1[size])); break; case 4: /* -(An) */ lea_l_brr(reg+8,reg+8,-(reg == 7?sz2[size]:sz1[size])); mov_l_rr(S1,reg+8); break; case 5: /* (d16,An) */ { uae_u32 off=(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_rr(S1,reg+8); lea_l_brr(S1,S1,off); break; } case 6: /* (d8,An,Xn) or (bd,An,Xn) or ([bd,An,Xn],od) or ([bd,An],Xn,od) */ { uae_u32 dp=comp_get_iword((m68k_pc_offset+=2)-2); calc_disp_ea_020(reg+8,dp,S1,S2); break; } case 7: switch (reg) { case 0: /* (xxx).W */ { uae_u32 off=(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(S1,off); break; } case 1: /* (xxx).L */ { uae_u32 off=comp_get_ilong((m68k_pc_offset+=4)-4); mov_l_ri(S1,off); break; } case 2: /* (d16,PC) */ { uae_u32 address=start_pc+((uae_char*)comp_pc_p-(uae_char*)start_pc_p)+ m68k_pc_offset; uae_s32 PC16off =(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(S1,address+PC16off); break; } case 3: /* (d8,PC,Xn) or (bd,PC,Xn) or ([bd,PC,Xn],od) or ([bd,PC],Xn,od) */ return -1; /* rarely used, fallback to non-JIT */ case 4: /* # < data >; Constants should be converted just once by the JIT */ m68k_pc_offset+=sz2[size]; switch (size) { case 0: { uae_s32 li = comp_get_ilong(m68k_pc_offset-4); float si = (float) li; if (li == (int) si) { //write_log (_T("converted immediate LONG constant to SINGLE\n")); fmovs_ri(treg,*(uae_u32 *)&si); return 1; } //write_log (_T("immediate LONG constant\n")); fmovl_ri(treg,li); return 2; } case 1: //write_log (_T("immediate SINGLE constant\n")); fmovs_ri(treg,comp_get_ilong(m68k_pc_offset-4)); return 1; case 2: //write_log (_T("immediate LONG DOUBLE constant\n")); fmov_ext_ri(treg,comp_get_ilong(m68k_pc_offset-4), comp_get_ilong(m68k_pc_offset-8), (comp_get_ilong(m68k_pc_offset-12)>>16)&0xffff); return 0; case 4: { float si = (float)(uae_s16)comp_get_iword(m68k_pc_offset-2); //write_log (_T("converted immediate WORD constant to SINGLE\n")); fmovs_ri(treg,*(uae_u32 *)&si); return 1; } case 5: { uae_u32 longarray[] = {comp_get_ilong(m68k_pc_offset-4), comp_get_ilong(m68k_pc_offset-8)}; float si = (float)*(double *)longarray; if (*(double *)longarray == (double)si) { //write_log (_T("SPEED GAIN: converted a DOUBLE constant to SINGLE\n")); fmovs_ri(treg,*(uae_u32 *)&si); return 1; } //write_log (_T("immediate DOUBLE constant\n")); fmov_ri(treg,longarray[0],longarray[1]); return 2; } case 6: { float si = (float)(uae_s8)comp_get_ibyte(m68k_pc_offset-2); //write_log (_T("immediate BYTE constant converted to SINGLE\n")); fmovs_ri(treg,*(uae_u32 *)&si); return 1; } default: /* never reached */ return -1; } default: /* never reached */ return -1; } } switch (size) { case 0: /* Long */ readlong(S1,S2,S3); mov_l_mr((uae_u32)temp_fp,S2); fmovi_rm(treg,(uae_u32)temp_fp); return 2; case 1: /* Single */ readlong(S1,S2,S3); mov_l_mr((uae_u32)temp_fp,S2); fmovs_rm(treg,(uae_u32)temp_fp); return 1; case 2: /* Long Double */ readword(S1,S2,S3); mov_w_mr(((uae_u32)temp_fp)+8,S2); add_l_ri(S1,4); readlong(S1,S2,S3); mov_l_mr((uae_u32)(temp_fp)+4,S2); add_l_ri(S1,4); readlong(S1,S2,S3); mov_l_mr((uae_u32)(temp_fp),S2); fmov_ext_rm(treg,(uae_u32)(temp_fp)); return 0; case 4: /* Word */ readword(S1,S2,S3); sign_extend_16_rr(S2,S2); mov_l_mr((uae_u32)temp_fp,S2); fmovi_rm(treg,(uae_u32)temp_fp); return 1; case 5: /* Double */ readlong(S1,S2,S3); mov_l_mr(((uae_u32)temp_fp)+4,S2); add_l_ri(S1,4); readlong(S1,S2,S3); mov_l_mr((uae_u32)(temp_fp),S2); fmov_rm(treg,(uae_u32)(temp_fp)); return 2; case 6: /* Byte */ readbyte(S1,S2,S3); sign_extend_8_rr(S2,S2); mov_l_mr((uae_u32)temp_fp,S2); fmovi_rm(treg,(uae_u32)temp_fp); return 1; default: return -1; } return -1; } /* return of -1 means failure, >=0 means OK */ STATIC_INLINE int comp_fp_put (uae_u32 opcode, uae_u16 extra) { int reg = opcode & 7; int sreg = (extra >> 7) &7; int mode = (opcode >> 3) & 7; int size = (extra >> 10) & 7; if (size == 3 || size == 7) /* 3 = packed decimal, 7 is not defined */ return -1; switch (mode) { case 0: /* Dn */ switch (size) { case 0: /* FMOVE.L FPx, Dn */ #if USE_X86_FPUCW && 0 if (!(regs.fpcr & 0xf0)) { /* if extended round to nearest */ mov_l_ri(S1,0x10); /* use extended round to zero mode */ fldcw_m_indexed(S1,(uae_u32)x86_fpucw); fmovi_mrb((uae_u32)temp_fp,sreg, clamp_bounds.l); mov_l_rm(reg,(uae_u32)temp_fp); mov_l_rm(S1,(uae_u32)®s.fpcr); and_l_ri(S1,0xf0); /* restore control word */ fldcw_m_indexed(S1,(uae_u32)x86_fpucw); return 0; } #endif fmovi_mrb((uae_u32)temp_fp,sreg, clamp_bounds.l); mov_l_rm(reg,(uae_u32)temp_fp); return 0; case 1: /* FMOVE.S FPx, Dn */ fmovs_mr((uae_u32)temp_fp,sreg); mov_l_rm(reg,(uae_u32)temp_fp); return 0; case 4: /* FMOVE.W FPx, Dn */ #if USE_X86_FPUCW && 0 if (!(regs.fpcr & 0xf0)) { /* if extended round to nearest */ mov_l_ri(S1,0x10); /* use extended round to zero mode */ fldcw_m_indexed(S1,(uae_u32)x86_fpucw); fmovi_mrb((uae_u32)temp_fp,sreg, clamp_bounds.w); mov_w_rm(reg,(uae_u32)temp_fp); mov_l_rm(S1,(uae_u32)®s.fpcr); and_l_ri(S1,0xf0); /* restore control word */ fldcw_m_indexed(S1,(uae_u32)x86_fpucw); return 0; } #endif fmovi_mrb((uae_u32)temp_fp,sreg, clamp_bounds.w); mov_w_rm(reg,(uae_u32)temp_fp); return 0; case 6: /* FMOVE.B FPx, Dn */ #if USE_X86_FPUCW && 0 if (!(regs.fpcr & 0xf0)) { /* if extended round to nearest */ mov_l_ri(S1,0x10); /* use extended round to zero mode */ fldcw_m_indexed(S1,(uae_u32)x86_fpucw); fmovi_mrb((uae_u32)temp_fp,sreg, clamp_bounds.b); mov_b_rm(reg,(uae_u32)temp_fp); mov_l_rm(S1,(uae_u32)®s.fpcr); and_l_ri(S1,0xf0); /* restore control word */ fldcw_m_indexed(S1,(uae_u32)x86_fpucw); return 0; } #endif fmovi_mrb((uae_u32)temp_fp,sreg, clamp_bounds.b); mov_b_rm(reg,(uae_u32)temp_fp); return 0; default: return -1; } case 1: /* An, invalid mode */ return -1; case 2: /* (An) */ mov_l_rr(S1,reg+8); break; case 3: /* (An)+ */ mov_l_rr(S1,reg+8); lea_l_brr(reg+8,reg+8,(reg == 7?sz2[size]:sz1[size])); break; case 4: /* -(An) */ lea_l_brr(reg+8,reg+8,-(reg == 7?sz2[size]:sz1[size])); mov_l_rr(S1,reg+8); break; case 5: /* (d16,An) */ { uae_u32 off=(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_rr(S1,reg+8); add_l_ri(S1,off); break; } case 6: /* (d8,An,Xn) or (bd,An,Xn) or ([bd,An,Xn],od) or ([bd,An],Xn,od) */ { uae_u32 dp=comp_get_iword((m68k_pc_offset+=2)-2); calc_disp_ea_020(reg+8,dp,S1,S2); break; } case 7: switch (reg) { case 0: /* (xxx).W */ { uae_u32 off=(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(S1,off); break; } case 1: /* (xxx).L */ { uae_u32 off=comp_get_ilong((m68k_pc_offset+=4)-4); mov_l_ri(S1,off); break; } default: /* All other modes are not allowed for FPx to */ write_log (_T("JIT FMOVE FPx, Mode is not allowed %04x %04x\n"),opcode,extra); return -1; } } switch (size) { case 0: /* Long */ fmovi_mrb((uae_u32)temp_fp,sreg, clamp_bounds.l); mov_l_rm(S2,(uae_u32)temp_fp); writelong_clobber(S1,S2,S3); return 0; case 1: /* Single */ fmovs_mr((uae_u32)temp_fp,sreg); mov_l_rm(S2,(uae_u32)temp_fp); writelong_clobber(S1,S2,S3); return 0; case 2:/* Long Double */ fmov_ext_mr((uae_u32)temp_fp,sreg); mov_w_rm(S2,(uae_u32)temp_fp+8); writeword_clobber(S1,S2,S3); add_l_ri(S1,4); mov_l_rm(S2,(uae_u32)temp_fp+4); writelong_clobber(S1,S2,S3); add_l_ri(S1,4); mov_l_rm(S2,(uae_u32)temp_fp); writelong_clobber(S1,S2,S3); return 0; case 4: /* Word */ fmovi_mrb((uae_u32)temp_fp,sreg, clamp_bounds.w); mov_l_rm(S2,(uae_u32)temp_fp); writeword_clobber(S1,S2,S3); return 0; case 5: /* Double */ fmov_mr((uae_u32)temp_fp,sreg); mov_l_rm(S2,(uae_u32)temp_fp+4); writelong_clobber(S1,S2,S3); add_l_ri(S1,4); mov_l_rm(S2,(uae_u32)temp_fp); writelong_clobber(S1,S2,S3); return 0; case 6: /* Byte */ fmovi_mrb((uae_u32)temp_fp,sreg, clamp_bounds.b); mov_l_rm(S2,(uae_u32)temp_fp); writebyte(S1,S2,S3); return 0; default: return -1; } return -1; } /* return -1 for failure, or register number for success */ STATIC_INLINE int comp_fp_adr (uae_u32 opcode) { uae_s32 off; int mode = (opcode >> 3) & 7; int reg = opcode & 7; switch (mode) { case 2: case 3: case 4: mov_l_rr(S1,8+reg); return S1; case 5: off=(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_rr(S1,8+reg); add_l_ri(S1,off); return S1; case 7: switch (reg) { case 0: off=(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(S1,off); return S1; case 1: off=comp_get_ilong((m68k_pc_offset+=4)-4); mov_l_ri(S1,off); return S1; } default: return -1; } } void comp_fdbcc_opp (uae_u32 opcode, uae_u16 extra) { FAIL(1); return; } void comp_fscc_opp (uae_u32 opcode, uae_u16 extra) { uae_u32 ad; int cc; int reg; if (!currprefs.compfpu) { FAIL(1); return; } #if DEBUG_FPP write_log (_T("JIT: fscc_opp at %08lx\n"), M68K_GETPC); #endif if (extra&0x20) { /* only cc from 00 to 1f are defined */ FAIL(1); return; } if ((opcode & 0x38) != 0) { /* We can only do to integer register */ FAIL(1); return; } fflags_into_flags(S2); reg=(opcode&7); mov_l_ri(S1,255); mov_l_ri(S4,0); switch(extra&0x0f) { /* according to fpp.c, the 0x10 bit is ignored */ case 0: break; /* set never */ case 1: mov_l_rr(S2,S4); cmov_l_rr(S4,S1,4); cmov_l_rr(S4,S2,10); break; case 2: cmov_l_rr(S4,S1,7); break; case 3: cmov_l_rr(S4,S1,3); break; case 4: mov_l_rr(S2,S4); cmov_l_rr(S4,S1,2); cmov_l_rr(S4,S2,10); break; case 5: mov_l_rr(S2,S4); cmov_l_rr(S4,S1,6); cmov_l_rr(S4,S2,10); break; case 6: cmov_l_rr(S4,S1,5); break; case 7: cmov_l_rr(S4,S1,11); break; case 8: cmov_l_rr(S4,S1,10); break; case 9: cmov_l_rr(S4,S1,4); break; case 10: cmov_l_rr(S4,S1,10); cmov_l_rr(S4,S1,7); break; case 11: cmov_l_rr(S4,S1,4); cmov_l_rr(S4,S1,3); break; case 12: cmov_l_rr(S4,S1,2); break; case 13: cmov_l_rr(S4,S1,6); break; case 14: cmov_l_rr(S4,S1,5); cmov_l_rr(S4,S1,10); break; case 15: mov_l_rr(S4,S1); break; } if (!(opcode & 0x38)) mov_b_rr(reg,S4); #if 0 else { abort(); if (!comp_fp_adr (opcode)) { m68k_setpc (m68k_getpc () - 4); op_illg (opcode); } else put_byte (ad, cc ? 0xff : 0x00); } #endif } void comp_ftrapcc_opp (uae_u32 opcode, uaecptr oldpc) { FAIL(1); return; } extern unsigned long foink3, oink; void comp_fbcc_opp (uae_u32 opcode) { uae_u32 start_68k_offset=m68k_pc_offset; uae_u32 off, v1, v2; int cc; if (!currprefs.compfpu) { FAIL(1); return; } if (opcode&0x20) { /* only cc from 00 to 1f are defined */ FAIL(1); return; } if (!(opcode&0x40)) { off=(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); } else { off=comp_get_ilong((m68k_pc_offset+=4)-4); } mov_l_ri(S1,(uae_u32) (comp_pc_p+off-(m68k_pc_offset-start_68k_offset))); mov_l_ri(PC_P,(uae_u32)comp_pc_p); /* Now they are both constant. Might as well fold in m68k_pc_offset */ add_l_ri(S1,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; /* according to fpp.c, the 0x10 bit is ignored (it handles exception handling, which we don't do, anyway ;-) */ cc=opcode&0x0f; v1=get_const(PC_P); v2=get_const(S1); fflags_into_flags(S2); // mov_l_mi((uae_u32)&foink3,cc); switch(cc) { case 0: break; /* jump never */ case 1: mov_l_rr(S2,PC_P); cmov_l_rr(PC_P,S1,4); cmov_l_rr(PC_P,S2,10); break; case 2: register_branch(v1,v2,7); break; case 3: register_branch(v1,v2,3); break; case 4: mov_l_rr(S2,PC_P); cmov_l_rr(PC_P,S1,2); cmov_l_rr(PC_P,S2,10); break; case 5: mov_l_rr(S2,PC_P); cmov_l_rr(PC_P,S1,6); cmov_l_rr(PC_P,S2,10); break; case 6: register_branch(v1,v2,5); break; case 7: register_branch(v1,v2,11); break; case 8: register_branch(v1,v2,10); break; case 9: register_branch(v1,v2,4); break; case 10: cmov_l_rr(PC_P,S1,10); cmov_l_rr(PC_P,S1,7); break; case 11: cmov_l_rr(PC_P,S1,4); cmov_l_rr(PC_P,S1,3); break; case 12: register_branch(v1,v2,2); break; case 13: register_branch(v1,v2,6); break; case 14: cmov_l_rr(PC_P,S1,5); cmov_l_rr(PC_P,S1,10); break; case 15: mov_l_rr(PC_P,S1); break; } } /* Floating point conditions The "NotANumber" part could be problematic; Howver, when NaN is encountered, the ftst instruction sets bot N and Z to 1 on the x87, so quite often things just fall into place. This is probably not accurate wrt the 68k FPU, but it is *as* accurate as this was before. However, some more thought should go into fixing this stuff up so it accurately emulates the 68k FPU. >==> 7) & 7; int source = (extra >> 13) & 7; int opmode = extra & 0x7f; if (!currprefs.compfpu) { FAIL(1); return; } switch (source) { case 3: /* FMOVE FPx, */ if (comp_fp_put(opcode,extra) < 0) FAIL(1); return; case 4: /* FMOVE.L , ControlReg */ if (!(opcode & 0x30)) { /* Dn or An */ if (extra & 0x1000) { /* FPCR */ mov_l_mr((uae_u32)®s.fpcr,opcode & 15); #if USE_X86_FPUCW mov_l_rr(S1,opcode & 15); and_l_ri(S1,0xf0); fldcw_m_indexed(S1,(uae_u32)x86_fpucw); #endif return; } if (extra & 0x0800) { /* FPSR */ FAIL(1); return; // set_fpsr(m68k_dreg (regs, opcode & 15)); } if (extra & 0x0400) { /* FPIAR */ mov_l_mr((uae_u32)®s.fpiar,opcode & 15); return; } } else if ((opcode & 0x3f) == 0x3c) { if (extra & 0x1000) { /* FPCR */ uae_u32 val=comp_get_ilong((m68k_pc_offset+=4)-4); mov_l_mi((uae_u32)®s.fpcr,val); #if USE_X86_FPUCW mov_l_ri(S1,val&0xf0); fldcw_m_indexed(S1,(uae_u32)x86_fpucw); #endif return; } if (extra & 0x0800) { /* FPSR */ FAIL(1); return; } if (extra & 0x0400) { /* FPIAR */ uae_u32 val=comp_get_ilong((m68k_pc_offset+=4)-4); mov_l_mi((uae_u32)®s.fpiar,val); return; } } FAIL(1); return; case 5: /* FMOVE.L ControlReg, */ if (!(opcode & 0x30)) { /* Dn or An */ if (extra & 0x1000) { /* FPCR */ mov_l_rm(opcode & 15,(uae_u32)®s.fpcr); return; } if (extra & 0x0800) { /* FPSR */ FAIL(1); return; } if (extra & 0x0400) { /* FPIAR */ mov_l_rm(opcode & 15,(uae_u32)®s.fpiar); return; } } FAIL(1); return; case 6: case 7: { uae_u32 list = 0; int incr = 0; if (extra & 0x2000) { uae_u32 ad; /* FMOVEM FPP->memory */ switch ((extra >> 11) & 3) { /* Get out early if failure */ case 0: case 2: break; case 1: case 3: default: FAIL(1); return; } ad=comp_fp_adr (opcode); if (ad<0) { m68k_setpc (m68k_getpc () - 4); op_illg (opcode); return; } switch ((extra >> 11) & 3) { case 0: /* static pred */ list = extra & 0xff; incr = -1; break; case 2: /* static postinc */ list = extra & 0xff; incr = 1; break; case 1: /* dynamic pred */ case 3: /* dynamic postinc */ abort(); } if (incr < 0) { /* Predecrement */ for (reg = 7; reg >= 0; reg--) { if (list & 0x80) { fmov_ext_mr((uintptr)temp_fp,reg); sub_l_ri(ad,4); mov_l_rm(S2,(uintptr)temp_fp); writelong_clobber(ad,S2,S3); sub_l_ri(ad,4); mov_l_rm(S2,(uintptr)temp_fp+4); writelong_clobber(ad,S2,S3); sub_l_ri(ad,4); mov_w_rm(S2,(uintptr)temp_fp+8); writeword_clobber(ad,S2,S3); } list <<= 1; } } else { /* Postincrement */ for (reg = 0; reg <= 7; reg++) { if (list & 0x80) { fmov_ext_mr((uintptr)temp_fp,reg); mov_w_rm(S2,(uintptr)temp_fp+8); writeword_clobber(ad,S2,S3); add_l_ri(ad,4); mov_l_rm(S2,(uintptr)temp_fp+4); writelong_clobber(ad,S2,S3); add_l_ri(ad,4); mov_l_rm(S2,(uintptr)temp_fp); writelong_clobber(ad,S2,S3); add_l_ri(ad,4); } list <<= 1; } } if ((opcode & 0x38) == 0x18) mov_l_rr((opcode & 7)+8,ad); if ((opcode & 0x38) == 0x20) mov_l_rr((opcode & 7)+8,ad); } else { /* FMOVEM memory->FPP */ uae_u32 ad; switch ((extra >> 11) & 3) { /* Get out early if failure */ case 0: case 2: break; case 1: case 3: default: FAIL(1); return; } ad=comp_fp_adr (opcode); if (ad<0) { m68k_setpc (m68k_getpc () - 4); op_illg (opcode); return; } switch ((extra >> 11) & 3) { case 0: /* static pred */ list = extra & 0xff; incr = -1; break; case 2: /* static postinc */ list = extra & 0xff; incr = 1; break; case 1: /* dynamic pred */ case 3: /* dynamic postinc */ abort(); } if (incr < 0) { // not reached for (reg = 7; reg >= 0; reg--) { if (list & 0x80) { sub_l_ri(ad,4); readlong(ad,S2,S3); mov_l_mr((uintptr)(temp_fp),S2); sub_l_ri(ad,4); readlong(ad,S2,S3); mov_l_mr((uintptr)(temp_fp)+4,S2); sub_l_ri(ad,4); readword(ad,S2,S3); mov_w_mr(((uintptr)temp_fp)+8,S2); fmov_ext_rm(reg,(uintptr)(temp_fp)); } list <<= 1; } } else { for (reg = 0; reg <= 7; reg++) { if (list & 0x80) { readword(ad,S2,S3); mov_w_mr(((uintptr)temp_fp)+8,S2); add_l_ri(ad,4); readlong(ad,S2,S3); mov_l_mr((uintptr)(temp_fp)+4,S2); add_l_ri(ad,4); readlong(ad,S2,S3); mov_l_mr((uintptr)(temp_fp),S2); add_l_ri(ad,4); fmov_ext_rm(reg,(uintptr)(temp_fp)); } list <<= 1; } } if ((opcode & 0x38) == 0x18) mov_l_rr((opcode & 7)+8,ad); if ((opcode & 0x38) == 0x20) mov_l_rr((opcode & 7)+8,ad); } } return; #if 0 case 6: /* FMOVEM , FPx-FPz */ if (!(extra & 0x0800)) { uae_u32 list = extra & 0xff; int ad; if ((ad = comp_fp_adr(opcode)) < 0) {FAIL(1);return;} while (list) { if (extra & 0x1000) { /* postincrement */ readword(ad,S2,S3); mov_w_mr(((uae_u32)temp_fp)+8,S2); add_l_ri(ad,4); readlong(ad,S2,S3); mov_l_mr((uae_u32)(temp_fp)+4,S2); add_l_ri(ad,4); readlong(ad,S2,S3); mov_l_mr((uae_u32)(temp_fp),S2); add_l_ri(ad,4); fmov_ext_rm(fpp_movem_index1[list],(uae_u32)(temp_fp)); } else { /* predecrement */ sub_l_ri(ad,4); readlong(ad,S2,S3); mov_l_mr((uae_u32)(temp_fp),S2); sub_l_ri(ad,4); readlong(ad,S2,S3); mov_l_mr((uae_u32)(temp_fp)+4,S2); sub_l_ri(ad,4); readword(ad,S2,S3); mov_w_mr(((uae_u32)temp_fp)+8,S2); fmov_ext_rm(fpp_movem_index2[list],(uae_u32)(temp_fp)); } list = fpp_movem_next[list]; } if ((opcode & 0x38) == 0x18) mov_l_rr((opcode & 7)+8,ad); return; } /* no break for dynamic register list */ case 7: /* FMOVEM FPx-FPz, */ if (!(extra & 0x0800)) { uae_u32 list = extra & 0xff; int ad; if ((ad = comp_fp_adr(opcode)) < 0) {FAIL(1);return;} while (list) { if (extra & 0x1000) { /* postincrement */ fmov_ext_mr((uae_u32)temp_fp,fpp_movem_index2[list]); mov_w_rm(S2,(uae_u32)temp_fp+8); writeword_clobber(ad,S2,S3); add_l_ri(ad,4); mov_l_rm(S2,(uae_u32)temp_fp+4); writelong_clobber(ad,S2,S3); add_l_ri(ad,4); mov_l_rm(S2,(uae_u32)temp_fp); writelong_clobber(ad,S2,S3); add_l_ri(ad,4); } else { /* predecrement */ fmov_ext_mr((uae_u32)temp_fp,fpp_movem_index2[list]); sub_l_ri(ad,4); mov_l_rm(S2,(uae_u32)temp_fp); writelong_clobber(ad,S2,S3); sub_l_ri(ad,4); mov_l_rm(S2,(uae_u32)temp_fp+4); writelong_clobber(ad,S2,S3); sub_l_ri(ad,4); mov_w_rm(S2,(uae_u32)temp_fp+8); writeword_clobber(ad,S2,S3); } list = fpp_movem_next[list]; } if ((opcode & 0x38) == 0x20) mov_l_rr((opcode & 7)+8,ad); return; } /* no break */ write_log (_T("fallback from JIT FMOVEM dynamic register list\n")); FAIL(1); return; #endif case 2: /* from to FPx */ dont_care_fflags(); if ((extra & 0xfc00) == 0x5c00) { /* FMOVECR */ //write_log (_T("JIT FMOVECR %x\n"), opmode); switch (opmode) { case 0x00: fmov_pi(dreg); break; case 0x0b: fmov_ext_rm(dreg,(uae_u32)&xhex_l10_2); break; case 0x0c: fmov_ext_rm(dreg,(uae_u32)&xhex_exp_1); break; case 0x0d: fmov_log2_e(dreg); break; case 0x0e: fmov_ext_rm(dreg,(uae_u32)&xhex_l10_e); break; case 0x0f: fmov_0(dreg); break; case 0x30: fmov_loge_2(dreg); break; case 0x31: fmov_ext_rm(dreg,(uae_u32)&xhex_ln_10); break; case 0x32: fmov_1(dreg); break; case 0x33: fmovs_rm(dreg,(uae_u32)&fp_1e1); break; case 0x34: fmovs_rm(dreg,(uae_u32)&fp_1e2); break; case 0x35: fmovs_rm(dreg,(uae_u32)&fp_1e4); break; case 0x36: fmov_rm(dreg,(uae_u32)&fp_1e8); break; case 0x37: fmov_ext_rm(dreg,(uae_u32)&xhex_1e16); break; case 0x38: fmov_ext_rm(dreg,(uae_u32)&xhex_1e32); break; case 0x39: fmov_ext_rm(dreg,(uae_u32)&xhex_1e64); break; case 0x3a: fmov_ext_rm(dreg,(uae_u32)&xhex_1e128); break; case 0x3b: fmov_ext_rm(dreg,(uae_u32)&xhex_1e256); break; case 0x3c: fmov_ext_rm(dreg,(uae_u32)&xhex_1e512); break; case 0x3d: fmov_ext_rm(dreg,(uae_u32)&xhex_1e1024); break; case 0x3e: fmov_ext_rm(dreg,(uae_u32)&xhex_1e2048); break; case 0x3f: fmov_ext_rm(dreg,(uae_u32)&xhex_1e4096); break; default: FAIL(1); return; } fmov_rr(FP_RESULT,dreg); return; } if (opmode & 0x20) /* two operands, so we need a scratch reg */ sreg = FS1; else /* one operand only, thus we can load the argument into dreg */ sreg = dreg; if ((prec = comp_fp_get(opcode,extra,sreg)) < 0) { FAIL(1); return; } if (!opmode) { /* FMOVE ,FPx */ fmov_rr(FP_RESULT,dreg); return; } /* no break here for to dreg */ case 0: /* directly from sreg to dreg */ if (!source) { /* no */ dont_care_fflags(); sreg = (extra >> 10) & 7; } switch (opmode) { case 0x00: /* FMOVE */ fmov_rr(dreg,sreg); break; case 0x01: /* FINT */ frndint_rr(dreg,sreg); break; case 0x02: /* FSINH */ fsinh_rr(dreg,sreg); break; case 0x03: /* FINTRZ */ #if USE_X86_FPUCW /* if we have control over the CW, we can do this */ if (0 && (regs.fpcr & 0xf0) == 0x10) /* maybe unsafe, because this test is done */ frndint_rr(dreg,sreg); /* during the JIT compilation and not at runtime */ else { mov_l_ri(S1,0x10); /* extended round to zero */ fldcw_m_indexed(S1,(uae_u32)x86_fpucw); frndint_rr(dreg,sreg); mov_l_rm(S1,(uae_u32)®s.fpcr); and_l_ri(S1,0xf0); /* restore control word */ fldcw_m_indexed(S1,(uae_u32)x86_fpucw); } break; #endif FAIL(1); return; case 0x04: /* FSQRT */ fsqrt_rr(dreg,sreg); break; case 0x06: /* FLOGNP1 */ flogNP1_rr(dreg,sreg); break; case 0x08: /* FETOXM1 */ fetoxM1_rr(dreg,sreg); break; case 0x09: /* FTANH */ ftanh_rr(dreg,sreg); break; case 0x0a: /* FATAN */ fatan_rr(dreg,sreg); break; case 0x0c: /* FASIN */ fasin_rr(dreg,sreg); break; case 0x0d: /* FATANH */ fatanh_rr(dreg,sreg); break; case 0x0e: /* FSIN */ fsin_rr(dreg,sreg); break; case 0x0f: /* FTAN */ ftan_rr(dreg,sreg); break; case 0x10: /* FETOX */ fetox_rr(dreg,sreg); break; case 0x11: /* FTWOTOX */ ftwotox_rr(dreg,sreg); break; case 0x12: /* FTENTOX */ ftentox_rr(dreg,sreg); break; case 0x14: /* FLOGN */ flogN_rr(dreg,sreg); break; case 0x15: /* FLOG10 */ flog10_rr(dreg,sreg); break; case 0x16: /* FLOG2 */ flog2_rr(dreg,sreg); break; case 0x18: /* FABS */ fabs_rr(dreg,sreg); break; case 0x19: /* FCOSH */ fcosh_rr(dreg,sreg); break; case 0x1a: /* FNEG */ fneg_rr(dreg,sreg); break; case 0x1c: /* FACOS */ #if USE_X86_FPUCW if ((regs.fpcr & 0x30) != 0x10) { /* use round to zero */ mov_l_ri(S1,(regs.fpcr & 0xC0) | 0x10); fldcw_m_indexed(S1,(uae_u32)x86_fpucw); facos_rr(dreg,sreg); mov_l_rm(S1,(uae_u32)®s.fpcr); and_l_ri(S1,0xf0); /* restore control word */ fldcw_m_indexed(S1,(uae_u32)x86_fpucw); break; } #endif facos_rr(dreg,sreg); break; case 0x1d: /* FCOS */ fcos_rr(dreg,sreg); break; case 0x1e: /* FGETEXP */ fgetexp_rr(dreg,sreg); break; case 0x1f: /* FGETMAN */ fgetman_rr(dreg,sreg); break; case 0x20: /* FDIV */ fdiv_rr(dreg,sreg); break; case 0x21: /* FMOD */ frem_rr(dreg,sreg); break; case 0x22: /* FADD */ fadd_rr(dreg,sreg); break; case 0x23: /* FMUL */ fmul_rr(dreg,sreg); break; case 0x24: /* FSGLDIV is not exactly the same as FSDIV, */ /* because both operands should be SINGLE precision, too */ case 0x60: /* FSDIV */ fdiv_rr(dreg,sreg); if (!currprefs.fpu_strict) /* faster, but less strict rounding */ break; #if USE_X86_FPUCW if ((regs.fpcr & 0xC0) == 0x40) /* if SINGLE precision */ break; #endif fcuts_r(dreg); break; case 0x25: /* FREM */ frem1_rr(dreg,sreg); break; case 0x26: /* FSCALE */ fscale_rr(dreg,sreg); break; case 0x27: /* FSGLMUL is not exactly the same as FSMUL, */ /* because both operands should be SINGLE precision, too */ case 0x63: /* FSMUL */ fmul_rr(dreg,sreg); if (!currprefs.fpu_strict) /* faster, but less strict rounding */ break; #if USE_X86_FPUCW if ((regs.fpcr & 0xC0) == 0x40) /* if SINGLE precision */ break; #endif fcuts_r(dreg); break; case 0x28: /* FSUB */ fsub_rr(dreg,sreg); break; case 0x30: /* FSINCOS */ case 0x31: case 0x32: case 0x33: case 0x34: case 0x35: case 0x36: case 0x37: if (dreg == (extra & 7)) fsin_rr(dreg, sreg); else fsincos_rr(dreg, extra & 7, sreg); break; case 0x38: /* FCMP */ fmov_rr(FP_RESULT,dreg); fsub_rr(FP_RESULT,sreg); return; case 0x3a: /* FTST */ fmov_rr(FP_RESULT,sreg); return; case 0x40: /* FSMOVE */ if (prec == 1 || !currprefs.fpu_strict) { if (sreg != dreg) /* no */ fmov_rr(dreg,sreg); } else { fmovs_mr((uae_u32)temp_fp,sreg); fmovs_rm(dreg,(uae_u32)temp_fp); } break; case 0x44: /* FDMOVE */ if (prec || !currprefs.fpu_strict) { if (sreg != dreg) /* no */ fmov_rr(dreg,sreg); } else { fmov_mr((uae_u32)temp_fp,sreg); fmov_rm(dreg,(uae_u32)temp_fp); } break; case 0x41: /* FSSQRT */ fsqrt_rr(dreg,sreg); if (!currprefs.fpu_strict) /* faster, but less strict rounding */ break; #if USE_X86_FPUCW if ((regs.fpcr & 0xC0) == 0x40) /* if SINGLE precision */ break; #endif fcuts_r(dreg); break; case 0x45: /* FDSQRT */ if (!currprefs.fpu_strict) { /* faster, but less strict rounding */ fsqrt_rr(dreg,sreg); break; } #if USE_X86_FPUCW if (regs.fpcr & 0xC0) { /* if we don't have EXTENDED precision */ if ((regs.fpcr & 0xC0) == 0x80) /* if we have DOUBLE */ fsqrt_rr(dreg,sreg); else { /* if we have SINGLE presision, force DOUBLE */ mov_l_ri(S1,(regs.fpcr & 0x30) | 0x80); fldcw_m_indexed(S1,(uae_u32)x86_fpucw); fsqrt_rr(dreg,sreg); mov_l_rm(S1,(uae_u32)®s.fpcr); and_l_ri(S1,0xf0); /* restore control word */ fldcw_m_indexed(S1,(uae_u32)x86_fpucw); } break; } #endif /* in case of EXTENDED precision, just reduce the result to DOUBLE */ fsqrt_rr(dreg,sreg); fcut_r(dreg); break; case 0x58: /* FSABS */ fabs_rr(dreg,sreg); if (prec != 1 && currprefs.fpu_strict) fcuts_r(dreg); break; case 0x5a: /* FSNEG */ fneg_rr(dreg,sreg); if (prec != 1 && currprefs.fpu_strict) fcuts_r(dreg); break; case 0x5c: /* FDABS */ fabs_rr(dreg,sreg); if (!prec && currprefs.fpu_strict) fcut_r(dreg); break; case 0x5e: /* FDNEG */ fneg_rr(dreg,sreg); if (!prec && currprefs.fpu_strict) fcut_r(dreg); break; case 0x62: /* FSADD */ fadd_rr(dreg,sreg); if (!currprefs.fpu_strict) /* faster, but less strict rounding */ break; #if USE_X86_FPUCW if ((regs.fpcr & 0xC0) == 0x40) /* if SINGLE precision */ break; #endif fcuts_r(dreg); break; case 0x64: /* FDDIV */ if (!currprefs.fpu_strict) { /* faster, but less strict rounding */ fdiv_rr(dreg,sreg); break; } #if USE_X86_FPUCW if (regs.fpcr & 0xC0) { /* if we don't have EXTENDED precision */ if ((regs.fpcr & 0xC0) == 0x80) /* if we have DOUBLE */ fdiv_rr(dreg,sreg); else { /* if we have SINGLE presision, force DOUBLE */ mov_l_ri(S1,(regs.fpcr & 0x30) | 0x80); fldcw_m_indexed(S1,(uae_u32)x86_fpucw); fdiv_rr(dreg,sreg); mov_l_rm(S1,(uae_u32)®s.fpcr); and_l_ri(S1,0xf0); /* restore control word */ fldcw_m_indexed(S1,(uae_u32)x86_fpucw); } break; } #endif /* in case of EXTENDED precision, just reduce the result to DOUBLE */ fdiv_rr(dreg,sreg); fcut_r(dreg); break; case 0x66: /* FDADD */ if (!currprefs.fpu_strict) { /* faster, but less strict rounding */ fadd_rr(dreg,sreg); break; } #if USE_X86_FPUCW if (regs.fpcr & 0xC0) { /* if we don't have EXTENDED precision */ if ((regs.fpcr & 0xC0) == 0x80) /* if we have DOUBLE */ fadd_rr(dreg,sreg); else { /* if we have SINGLE presision, force DOUBLE */ mov_l_ri(S1,(regs.fpcr & 0x30) | 0x80); fldcw_m_indexed(S1,(uae_u32)x86_fpucw); fadd_rr(dreg,sreg); mov_l_rm(S1,(uae_u32)®s.fpcr); and_l_ri(S1,0xf0); /* restore control word */ fldcw_m_indexed(S1,(uae_u32)x86_fpucw); } break; } #endif /* in case of EXTENDED precision, just reduce the result to DOUBLE */ fadd_rr(dreg,sreg); fcut_r(dreg); break; case 0x67: /* FDMUL */ if (!currprefs.fpu_strict) { /* faster, but less strict rounding */ fmul_rr(dreg,sreg); break; } #if USE_X86_FPUCW if (regs.fpcr & 0xC0) { /* if we don't have EXTENDED precision */ if ((regs.fpcr & 0xC0) == 0x80) /* if we have DOUBLE */ fmul_rr(dreg,sreg); else { /* if we have SINGLE presision, force DOUBLE */ mov_l_ri(S1,(regs.fpcr & 0x30) | 0x80); fldcw_m_indexed(S1,(uae_u32)x86_fpucw); fmul_rr(dreg,sreg); mov_l_rm(S1,(uae_u32)®s.fpcr); and_l_ri(S1,0xf0); /* restore control word */ fldcw_m_indexed(S1,(uae_u32)x86_fpucw); } break; } #endif /* in case of EXTENDED precision, just reduce the result to DOUBLE */ fmul_rr(dreg,sreg); fcut_r(dreg); break; case 0x68: /* FSSUB */ fsub_rr(dreg,sreg); if (!currprefs.fpu_strict) /* faster, but less strict rounding */ break; #if USE_X86_FPUCW if ((regs.fpcr & 0xC0) == 0x40) /* if SINGLE precision */ break; #endif fcuts_r(dreg); break; case 0x6c: /* FDSUB */ if (!currprefs.fpu_strict) { /* faster, but less strict rounding */ fsub_rr(dreg,sreg); break; } #if USE_X86_FPUCW if (regs.fpcr & 0xC0) { /* if we don't have EXTENDED precision */ if ((regs.fpcr & 0xC0) == 0x80) /* if we have DOUBLE */ fsub_rr(dreg,sreg); else { /* if we have SINGLE presision, force DOUBLE */ mov_l_ri(S1,(regs.fpcr & 0x30) | 0x80); fldcw_m_indexed(S1,(uae_u32)x86_fpucw); fsub_rr(dreg,sreg); mov_l_rm(S1,(uae_u32)®s.fpcr); and_l_ri(S1,0xf0); /* restore control word */ fldcw_m_indexed(S1,(uae_u32)x86_fpucw); } break; } #endif /* in case of EXTENDED precision, just reduce the result to DOUBLE */ fsub_rr(dreg,sreg); fcut_r(dreg); break; default: FAIL(1); return; } fmov_rr(FP_RESULT,dreg); return; default: write_log (_T("Unsupported JIT-FPU instruction: 0x%04x %04x\n"),opcode,extra); FAIL(1); return; } } #endif fs-uae-2.2.3+dfsg/src/jit/codegen_x86.cpp0000644000175000017500000032720612162366654020260 0ustar glaubitzglaubitz/* * compiler/codegen_x86.cpp - IA-32 code generator * * Original 68040 JIT compiler for UAE, copyright 2000-2002 Bernd Meyer * * Adaptation for Basilisk II and improvements, copyright 2000-2005 * Gwenole Beauchesne * * Basilisk II (C) 1997-2008 Christian Bauer * * Portions related to CPU detection come from linux/arch/i386/kernel/setup.c * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ /* This should eventually end up in machdep/, but for now, x86 is the only target, and it's easier this way... */ #include "flags_x86.h" /************************************************************************* * Some basic information about the the target CPU * *************************************************************************/ #define EAX_INDEX 0 #define ECX_INDEX 1 #define EDX_INDEX 2 #define EBX_INDEX 3 #define ESP_INDEX 4 #define EBP_INDEX 5 #define ESI_INDEX 6 #define EDI_INDEX 7 #if defined(__x86_64__) #define R8_INDEX 8 #define R9_INDEX 9 #define R10_INDEX 10 #define R11_INDEX 11 #define R12_INDEX 12 #define R13_INDEX 13 #define R14_INDEX 14 #define R15_INDEX 15 #endif /* XXX this has to match X86_Reg8H_Base + 4 */ #define AH_INDEX (0x10+4+EAX_INDEX) #define CH_INDEX (0x10+4+ECX_INDEX) #define DH_INDEX (0x10+4+EDX_INDEX) #define BH_INDEX (0x10+4+EBX_INDEX) /* The register in which subroutines return an integer return value */ #define REG_RESULT EAX_INDEX /* The registers subroutines take their first and second argument in */ #if defined( _MSC_VER ) && !defined( USE_NORMAL_CALLING_CONVENTION ) /* Handle the _fastcall parameters of ECX and EDX */ #define REG_PAR1 ECX_INDEX #define REG_PAR2 EDX_INDEX #elif defined(__x86_64__) #define REG_PAR1 EDI_INDEX #define REG_PAR2 ESI_INDEX #else #define REG_PAR1 EAX_INDEX #define REG_PAR2 EDX_INDEX #endif #define REG_PC_PRE EAX_INDEX /* The register we use for preloading regs.pc_p */ #if defined( _MSC_VER ) && !defined( USE_NORMAL_CALLING_CONVENTION ) #define REG_PC_TMP EAX_INDEX #else #define REG_PC_TMP ECX_INDEX /* Another register that is not the above */ #endif #define SHIFTCOUNT_NREG ECX_INDEX /* Register that can be used for shiftcount. -1 if any reg will do */ #define MUL_NREG1 EAX_INDEX /* %eax will hold the low 32 bits after a 32x32 mul */ #define MUL_NREG2 EDX_INDEX /* %edx will hold the high 32 bits */ #define STACK_ALIGN 16 #define STACK_OFFSET sizeof(void *) uae_s8 always_used[]={4,-1}; #if defined(__x86_64__) uae_s8 can_byte[]={0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,-1}; uae_s8 can_word[]={0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,-1}; #else uae_s8 can_byte[]={0,1,2,3,-1}; uae_s8 can_word[]={0,1,2,3,5,6,7,-1}; #endif #if USE_OPTIMIZED_CALLS /* Make sure interpretive core does not use cpuopti */ uae_u8 call_saved[]={0,0,0,1,1,1,1,1}; #error FIXME: code not ready #else /* cpuopti mutate instruction handlers to assume registers are saved by the caller */ uae_u8 call_saved[]={0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0}; #endif /* This *should* be the same as call_saved. But: - We might not really know which registers are saved, and which aren't, so we need to preserve some, but don't want to rely on everyone else also saving those registers - Special registers (such like the stack pointer) should not be "preserved" by pushing, even though they are "saved" across function calls */ #if defined(__x86_64__) /* callee-saved registers as defined by Linux AMD64 ABI: rbx, rbp, rsp, r12 - r15 */ /* preserve r11 because it's generally used to hold pointers to functions */ static const uae_u8 need_to_preserve[]={0,0,0,1,0,1,0,0,0,0,0,1,1,1,1,1}; #else /* callee-saved registers as defined by System V IA-32 ABI: edi, esi, ebx, ebp */ static const uae_u8 need_to_preserve[]={0,0,0,1,0,1,1,1}; #endif /* Whether classes of instructions do or don't clobber the native flags */ #define CLOBBER_MOV #define CLOBBER_LEA #define CLOBBER_CMOV #define CLOBBER_POP #define CLOBBER_PUSH #define CLOBBER_SUB clobber_flags() #define CLOBBER_SBB clobber_flags() #define CLOBBER_CMP clobber_flags() #define CLOBBER_ADD clobber_flags() #define CLOBBER_ADC clobber_flags() #define CLOBBER_AND clobber_flags() #define CLOBBER_OR clobber_flags() #define CLOBBER_XOR clobber_flags() #define CLOBBER_ROL clobber_flags() #define CLOBBER_ROR clobber_flags() #define CLOBBER_SHLL clobber_flags() #define CLOBBER_SHRL clobber_flags() #define CLOBBER_SHRA clobber_flags() #define CLOBBER_TEST clobber_flags() #define CLOBBER_CL16 #define CLOBBER_CL8 #define CLOBBER_SE32 #define CLOBBER_SE16 #define CLOBBER_SE8 #define CLOBBER_ZE32 #define CLOBBER_ZE16 #define CLOBBER_ZE8 #define CLOBBER_SW16 clobber_flags() #define CLOBBER_SW32 #define CLOBBER_SETCC #define CLOBBER_MUL clobber_flags() #define CLOBBER_BT clobber_flags() #define CLOBBER_BSF clobber_flags() /* The older code generator is now deprecated. */ #define USE_NEW_RTASM 1 #if USE_NEW_RTASM #if defined(__x86_64__) #define X86_TARGET_64BIT 1 /* The address override prefix causes a 5 cycles penalty on Intel Core processors. Another solution would be to decompose the load in an LEA, MOV (to zero-extend), MOV (from memory): is it better? */ #define ADDR32 x86_emit_byte(0x67), #else #define ADDR32 /**/ #endif #define X86_FLAT_REGISTERS 0 #define X86_OPTIMIZE_ALU 1 #define X86_OPTIMIZE_ROTSHI 1 #include "codegen_x86.h" #define x86_emit_byte(B) emit_byte(B) #define x86_emit_word(W) emit_word(W) #define x86_emit_long(L) emit_long(L) #define x86_emit_quad(Q) emit_quad(Q) #define x86_get_target() get_target() #define x86_emit_failure(MSG) jit_fail(MSG, __FILE__, __LINE__, __FUNCTION__) static void jit_fail(const char *msg, const char *file, int line, const char *function) { fprintf(stderr, "JIT failure in function %s from file %s at line %d: %s\n", function, file, line, msg); abort(); } LOWFUNC(NONE,WRITE,1,raw_push_l_r,(R4 r)) { #if defined(__x86_64__) PUSHQr(r); #else PUSHLr(r); #endif } LENDFUNC(NONE,WRITE,1,raw_push_l_r,(R4 r)) LOWFUNC(NONE,READ,1,raw_pop_l_r,(R4 r)) { #if defined(__x86_64__) POPQr(r); #else POPLr(r); #endif } LENDFUNC(NONE,READ,1,raw_pop_l_r,(R4 r)) LOWFUNC(NONE,READ,1,raw_pop_l_m,(MEMW d)) { #if defined(__x86_64__) POPQm(d, X86_NOREG, X86_NOREG, 1); #else POPLm(d, X86_NOREG, X86_NOREG, 1); #endif } LENDFUNC(NONE,READ,1,raw_pop_l_m,(MEMW d)) LOWFUNC(WRITE,NONE,2,raw_bt_l_ri,(R4 r, IMM i)) { BTLir(i, r); } LENDFUNC(WRITE,NONE,2,raw_bt_l_ri,(R4 r, IMM i)) LOWFUNC(WRITE,NONE,2,raw_bt_l_rr,(R4 r, R4 b)) { BTLrr(b, r); } LENDFUNC(WRITE,NONE,2,raw_bt_l_rr,(R4 r, R4 b)) LOWFUNC(WRITE,NONE,2,raw_btc_l_ri,(RW4 r, IMM i)) { BTCLir(i, r); } LENDFUNC(WRITE,NONE,2,raw_btc_l_ri,(RW4 r, IMM i)) LOWFUNC(WRITE,NONE,2,raw_btc_l_rr,(RW4 r, R4 b)) { BTCLrr(b, r); } LENDFUNC(WRITE,NONE,2,raw_btc_l_rr,(RW4 r, R4 b)) LOWFUNC(WRITE,NONE,2,raw_btr_l_ri,(RW4 r, IMM i)) { BTRLir(i, r); } LENDFUNC(WRITE,NONE,2,raw_btr_l_ri,(RW4 r, IMM i)) LOWFUNC(WRITE,NONE,2,raw_btr_l_rr,(RW4 r, R4 b)) { BTRLrr(b, r); } LENDFUNC(WRITE,NONE,2,raw_btr_l_rr,(RW4 r, R4 b)) LOWFUNC(WRITE,NONE,2,raw_bts_l_ri,(RW4 r, IMM i)) { BTSLir(i, r); } LENDFUNC(WRITE,NONE,2,raw_bts_l_ri,(RW4 r, IMM i)) LOWFUNC(WRITE,NONE,2,raw_bts_l_rr,(RW4 r, R4 b)) { BTSLrr(b, r); } LENDFUNC(WRITE,NONE,2,raw_bts_l_rr,(RW4 r, R4 b)) LOWFUNC(WRITE,NONE,2,raw_sub_w_ri,(RW2 d, IMM i)) { SUBWir(i, d); } LENDFUNC(WRITE,NONE,2,raw_sub_w_ri,(RW2 d, IMM i)) LOWFUNC(NONE,READ,2,raw_mov_l_rm,(W4 d, MEMR s)) { MOVLmr(s, X86_NOREG, X86_NOREG, 1, d); } LENDFUNC(NONE,READ,2,raw_mov_l_rm,(W4 d, MEMR s)) LOWFUNC(NONE,WRITE,2,raw_mov_l_mi,(MEMW d, IMM s)) { MOVLim(s, d, X86_NOREG, X86_NOREG, 1); } LENDFUNC(NONE,WRITE,2,raw_mov_l_mi,(MEMW d, IMM s)) LOWFUNC(NONE,WRITE,2,raw_mov_w_mi,(MEMW d, IMM s)) { MOVWim(s, d, X86_NOREG, X86_NOREG, 1); } LENDFUNC(NONE,WRITE,2,raw_mov_w_mi,(MEMW d, IMM s)) LOWFUNC(NONE,WRITE,2,raw_mov_b_mi,(MEMW d, IMM s)) { MOVBim(s, d, X86_NOREG, X86_NOREG, 1); } LENDFUNC(NONE,WRITE,2,raw_mov_b_mi,(MEMW d, IMM s)) LOWFUNC(WRITE,RMW,2,raw_rol_b_mi,(MEMRW d, IMM i)) { ROLBim(i, d, X86_NOREG, X86_NOREG, 1); } LENDFUNC(WRITE,RMW,2,raw_rol_b_mi,(MEMRW d, IMM i)) LOWFUNC(WRITE,NONE,2,raw_rol_b_ri,(RW1 r, IMM i)) { ROLBir(i, r); } LENDFUNC(WRITE,NONE,2,raw_rol_b_ri,(RW1 r, IMM i)) LOWFUNC(WRITE,NONE,2,raw_rol_w_ri,(RW2 r, IMM i)) { ROLWir(i, r); } LENDFUNC(WRITE,NONE,2,raw_rol_w_ri,(RW2 r, IMM i)) LOWFUNC(WRITE,NONE,2,raw_rol_l_ri,(RW4 r, IMM i)) { ROLLir(i, r); } LENDFUNC(WRITE,NONE,2,raw_rol_l_ri,(RW4 r, IMM i)) LOWFUNC(WRITE,NONE,2,raw_rol_l_rr,(RW4 d, R1 r)) { ROLLrr(r, d); } LENDFUNC(WRITE,NONE,2,raw_rol_l_rr,(RW4 d, R1 r)) LOWFUNC(WRITE,NONE,2,raw_rol_w_rr,(RW2 d, R1 r)) { ROLWrr(r, d); } LENDFUNC(WRITE,NONE,2,raw_rol_w_rr,(RW2 d, R1 r)) LOWFUNC(WRITE,NONE,2,raw_rol_b_rr,(RW1 d, R1 r)) { ROLBrr(r, d); } LENDFUNC(WRITE,NONE,2,raw_rol_b_rr,(RW1 d, R1 r)) LOWFUNC(WRITE,NONE,2,raw_shll_l_rr,(RW4 d, R1 r)) { SHLLrr(r, d); } LENDFUNC(WRITE,NONE,2,raw_shll_l_rr,(RW4 d, R1 r)) LOWFUNC(WRITE,NONE,2,raw_shll_w_rr,(RW2 d, R1 r)) { SHLWrr(r, d); } LENDFUNC(WRITE,NONE,2,raw_shll_w_rr,(RW2 d, R1 r)) LOWFUNC(WRITE,NONE,2,raw_shll_b_rr,(RW1 d, R1 r)) { SHLBrr(r, d); } LENDFUNC(WRITE,NONE,2,raw_shll_b_rr,(RW1 d, R1 r)) LOWFUNC(WRITE,NONE,2,raw_ror_b_ri,(RW1 r, IMM i)) { RORBir(i, r); } LENDFUNC(WRITE,NONE,2,raw_ror_b_ri,(RW1 r, IMM i)) LOWFUNC(WRITE,NONE,2,raw_ror_w_ri,(RW2 r, IMM i)) { RORWir(i, r); } LENDFUNC(WRITE,NONE,2,raw_ror_w_ri,(RW2 r, IMM i)) LOWFUNC(WRITE,READ,2,raw_or_l_rm,(RW4 d, MEMR s)) { ORLmr(s, X86_NOREG, X86_NOREG, 1, d); } LENDFUNC(WRITE,READ,2,raw_or_l_rm,(RW4 d, MEMR s)) LOWFUNC(WRITE,NONE,2,raw_ror_l_ri,(RW4 r, IMM i)) { RORLir(i, r); } LENDFUNC(WRITE,NONE,2,raw_ror_l_ri,(RW4 r, IMM i)) LOWFUNC(WRITE,NONE,2,raw_ror_l_rr,(RW4 d, R1 r)) { RORLrr(r, d); } LENDFUNC(WRITE,NONE,2,raw_ror_l_rr,(RW4 d, R1 r)) LOWFUNC(WRITE,NONE,2,raw_ror_w_rr,(RW2 d, R1 r)) { RORWrr(r, d); } LENDFUNC(WRITE,NONE,2,raw_ror_w_rr,(RW2 d, R1 r)) LOWFUNC(WRITE,NONE,2,raw_ror_b_rr,(RW1 d, R1 r)) { RORBrr(r, d); } LENDFUNC(WRITE,NONE,2,raw_ror_b_rr,(RW1 d, R1 r)) LOWFUNC(WRITE,NONE,2,raw_shrl_l_rr,(RW4 d, R1 r)) { SHRLrr(r, d); } LENDFUNC(WRITE,NONE,2,raw_shrl_l_rr,(RW4 d, R1 r)) LOWFUNC(WRITE,NONE,2,raw_shrl_w_rr,(RW2 d, R1 r)) { SHRWrr(r, d); } LENDFUNC(WRITE,NONE,2,raw_shrl_w_rr,(RW2 d, R1 r)) LOWFUNC(WRITE,NONE,2,raw_shrl_b_rr,(RW1 d, R1 r)) { SHRBrr(r, d); } LENDFUNC(WRITE,NONE,2,raw_shrl_b_rr,(RW1 d, R1 r)) LOWFUNC(WRITE,NONE,2,raw_shra_l_rr,(RW4 d, R1 r)) { SARLrr(r, d); } LENDFUNC(WRITE,NONE,2,raw_shra_l_rr,(RW4 d, R1 r)) LOWFUNC(WRITE,NONE,2,raw_shra_w_rr,(RW2 d, R1 r)) { SARWrr(r, d); } LENDFUNC(WRITE,NONE,2,raw_shra_w_rr,(RW2 d, R1 r)) LOWFUNC(WRITE,NONE,2,raw_shra_b_rr,(RW1 d, R1 r)) { SARBrr(r, d); } LENDFUNC(WRITE,NONE,2,raw_shra_b_rr,(RW1 d, R1 r)) LOWFUNC(WRITE,NONE,2,raw_shll_l_ri,(RW4 r, IMM i)) { SHLLir(i, r); } LENDFUNC(WRITE,NONE,2,raw_shll_l_ri,(RW4 r, IMM i)) LOWFUNC(WRITE,NONE,2,raw_shll_w_ri,(RW2 r, IMM i)) { SHLWir(i, r); } LENDFUNC(WRITE,NONE,2,raw_shll_w_ri,(RW2 r, IMM i)) LOWFUNC(WRITE,NONE,2,raw_shll_b_ri,(RW1 r, IMM i)) { SHLBir(i, r); } LENDFUNC(WRITE,NONE,2,raw_shll_b_ri,(RW1 r, IMM i)) LOWFUNC(WRITE,NONE,2,raw_shrl_l_ri,(RW4 r, IMM i)) { SHRLir(i, r); } LENDFUNC(WRITE,NONE,2,raw_shrl_l_ri,(RW4 r, IMM i)) LOWFUNC(WRITE,NONE,2,raw_shrl_w_ri,(RW2 r, IMM i)) { SHRWir(i, r); } LENDFUNC(WRITE,NONE,2,raw_shrl_w_ri,(RW2 r, IMM i)) LOWFUNC(WRITE,NONE,2,raw_shrl_b_ri,(RW1 r, IMM i)) { SHRBir(i, r); } LENDFUNC(WRITE,NONE,2,raw_shrl_b_ri,(RW1 r, IMM i)) LOWFUNC(WRITE,NONE,2,raw_shra_l_ri,(RW4 r, IMM i)) { SARLir(i, r); } LENDFUNC(WRITE,NONE,2,raw_shra_l_ri,(RW4 r, IMM i)) LOWFUNC(WRITE,NONE,2,raw_shra_w_ri,(RW2 r, IMM i)) { SARWir(i, r); } LENDFUNC(WRITE,NONE,2,raw_shra_w_ri,(RW2 r, IMM i)) LOWFUNC(WRITE,NONE,2,raw_shra_b_ri,(RW1 r, IMM i)) { SARBir(i, r); } LENDFUNC(WRITE,NONE,2,raw_shra_b_ri,(RW1 r, IMM i)) LOWFUNC(WRITE,NONE,1,raw_sahf,(R2 dummy_ah)) { SAHF(); } LENDFUNC(WRITE,NONE,1,raw_sahf,(R2 dummy_ah)) LOWFUNC(NONE,NONE,1,raw_cpuid,(R4 dummy_eax)) { CPUID(); } LENDFUNC(NONE,NONE,1,raw_cpuid,(R4 dummy_eax)) LOWFUNC(READ,NONE,1,raw_lahf,(W2 dummy_ah)) { LAHF(); } LENDFUNC(READ,NONE,1,raw_lahf,(W2 dummy_ah)) LOWFUNC(READ,NONE,2,raw_setcc,(W1 d, IMM cc)) { SETCCir(cc, d); } LENDFUNC(READ,NONE,2,raw_setcc,(W1 d, IMM cc)) LOWFUNC(READ,WRITE,2,raw_setcc_m,(MEMW d, IMM cc)) { SETCCim(cc, d, X86_NOREG, X86_NOREG, 1); } LENDFUNC(READ,WRITE,2,raw_setcc_m,(MEMW d, IMM cc)) LOWFUNC(READ,NONE,3,raw_cmov_b_rr,(RW1 d, R1 s, IMM cc)) { /* replacement using branch and mov */ int8 *target_p = (int8 *)x86_get_target() + 1; JCCSii(cc^1, 0); MOVBrr(s, d); *target_p = (uintptr)x86_get_target() - ((uintptr)target_p + 1); } LENDFUNC(READ,NONE,3,raw_cmov_b_rr,(RW1 d, R1 s, IMM cc)) LOWFUNC(READ,NONE,3,raw_cmov_w_rr,(RW2 d, R2 s, IMM cc)) { if (have_cmov) CMOVWrr(cc, s, d); else { /* replacement using branch and mov */ int8 *target_p = (int8 *)x86_get_target() + 1; JCCSii(cc^1, 0); MOVWrr(s, d); *target_p = (uintptr)x86_get_target() - ((uintptr)target_p + 1); } } LENDFUNC(READ,NONE,3,raw_cmov_w_rr,(RW2 d, R2 s, IMM cc)) LOWFUNC(READ,NONE,3,raw_cmov_l_rr,(RW4 d, R4 s, IMM cc)) { if (have_cmov) CMOVLrr(cc, s, d); else { /* replacement using branch and mov */ int8 *target_p = (int8 *)x86_get_target() + 1; JCCSii(cc^1, 0); MOVLrr(s, d); *target_p = (uintptr)x86_get_target() - ((uintptr)target_p + 1); } } LENDFUNC(READ,NONE,3,raw_cmov_l_rr,(RW4 d, R4 s, IMM cc)) LOWFUNC(WRITE,NONE,2,raw_bsf_l_rr,(W4 d, R4 s)) { BSFLrr(s, d); } LENDFUNC(WRITE,NONE,2,raw_bsf_l_rr,(W4 d, R4 s)) LOWFUNC(NONE,NONE,2,raw_sign_extend_32_rr,(W4 d, R4 s)) { MOVSLQrr(s, d); } LENDFUNC(NONE,NONE,2,raw_sign_extend_32_rr,(W4 d, R4 s)) LOWFUNC(NONE,NONE,2,raw_sign_extend_16_rr,(W4 d, R2 s)) { MOVSWLrr(s, d); } LENDFUNC(NONE,NONE,2,raw_sign_extend_16_rr,(W4 d, R2 s)) LOWFUNC(NONE,NONE,2,raw_sign_extend_8_rr,(W4 d, R1 s)) { MOVSBLrr(s, d); } LENDFUNC(NONE,NONE,2,raw_sign_extend_8_rr,(W4 d, R1 s)) LOWFUNC(NONE,NONE,2,raw_zero_extend_16_rr,(W4 d, R2 s)) { MOVZWLrr(s, d); } LENDFUNC(NONE,NONE,2,raw_zero_extend_16_rr,(W4 d, R2 s)) LOWFUNC(NONE,NONE,2,raw_zero_extend_8_rr,(W4 d, R1 s)) { MOVZBLrr(s, d); } LENDFUNC(NONE,NONE,2,raw_zero_extend_8_rr,(W4 d, R1 s)) LOWFUNC(NONE,NONE,2,raw_imul_32_32,(RW4 d, R4 s)) { IMULLrr(s, d); } LENDFUNC(NONE,NONE,2,raw_imul_32_32,(RW4 d, R4 s)) LOWFUNC(NONE,NONE,2,raw_imul_64_32,(RW4 d, RW4 s)) { if (d!=MUL_NREG1 || s!=MUL_NREG2) { write_log("Bad register in IMUL: d=%d, s=%d\n",d,s); abort(); } IMULLr(s); } LENDFUNC(NONE,NONE,2,raw_imul_64_32,(RW4 d, RW4 s)) LOWFUNC(NONE,NONE,2,raw_mul_64_32,(RW4 d, RW4 s)) { if (d!=MUL_NREG1 || s!=MUL_NREG2) { write_log("Bad register in MUL: d=%d, s=%d\n",d,s); abort(); } MULLr(s); } LENDFUNC(NONE,NONE,2,raw_mul_64_32,(RW4 d, RW4 s)) LOWFUNC(NONE,NONE,2,raw_mul_32_32,(RW4 d, R4 s)) { abort(); /* %^$&%^$%#^ x86! */ } LENDFUNC(NONE,NONE,2,raw_mul_32_32,(RW4 d, R4 s)) LOWFUNC(NONE,NONE,2,raw_mov_b_rr,(W1 d, R1 s)) { MOVBrr(s, d); } LENDFUNC(NONE,NONE,2,raw_mov_b_rr,(W1 d, R1 s)) LOWFUNC(NONE,NONE,2,raw_mov_w_rr,(W2 d, R2 s)) { MOVWrr(s, d); } LENDFUNC(NONE,NONE,2,raw_mov_w_rr,(W2 d, R2 s)) LOWFUNC(NONE,READ,4,raw_mov_l_rrm_indexed,(W4 d,R4 baser, R4 index, IMM factor)) { ADDR32 MOVLmr(0, baser, index, factor, d); } LENDFUNC(NONE,READ,4,raw_mov_l_rrm_indexed,(W4 d,R4 baser, R4 index, IMM factor)) LOWFUNC(NONE,READ,4,raw_mov_w_rrm_indexed,(W2 d, R4 baser, R4 index, IMM factor)) { ADDR32 MOVWmr(0, baser, index, factor, d); } LENDFUNC(NONE,READ,4,raw_mov_w_rrm_indexed,(W2 d, R4 baser, R4 index, IMM factor)) LOWFUNC(NONE,READ,4,raw_mov_b_rrm_indexed,(W1 d, R4 baser, R4 index, IMM factor)) { ADDR32 MOVBmr(0, baser, index, factor, d); } LENDFUNC(NONE,READ,4,raw_mov_b_rrm_indexed,(W1 d, R4 baser, R4 index, IMM factor)) LOWFUNC(NONE,WRITE,4,raw_mov_l_mrr_indexed,(R4 baser, R4 index, IMM factor, R4 s)) { ADDR32 MOVLrm(s, 0, baser, index, factor); } LENDFUNC(NONE,WRITE,4,raw_mov_l_mrr_indexed,(R4 baser, R4 index, IMM factor, R4 s)) LOWFUNC(NONE,WRITE,4,raw_mov_w_mrr_indexed,(R4 baser, R4 index, IMM factor, R2 s)) { ADDR32 MOVWrm(s, 0, baser, index, factor); } LENDFUNC(NONE,WRITE,4,raw_mov_w_mrr_indexed,(R4 baser, R4 index, IMM factor, R2 s)) LOWFUNC(NONE,WRITE,4,raw_mov_b_mrr_indexed,(R4 baser, R4 index, IMM factor, R1 s)) { ADDR32 MOVBrm(s, 0, baser, index, factor); } LENDFUNC(NONE,WRITE,4,raw_mov_b_mrr_indexed,(R4 baser, R4 index, IMM factor, R1 s)) LOWFUNC(NONE,WRITE,5,raw_mov_l_bmrr_indexed,(IMM base, R4 baser, R4 index, IMM factor, R4 s)) { ADDR32 MOVLrm(s, base, baser, index, factor); } LENDFUNC(NONE,WRITE,5,raw_mov_l_bmrr_indexed,(IMM base, R4 baser, R4 index, IMM factor, R4 s)) LOWFUNC(NONE,WRITE,5,raw_mov_w_bmrr_indexed,(IMM base, R4 baser, R4 index, IMM factor, R2 s)) { ADDR32 MOVWrm(s, base, baser, index, factor); } LENDFUNC(NONE,WRITE,5,raw_mov_w_bmrr_indexed,(IMM base, R4 baser, R4 index, IMM factor, R2 s)) LOWFUNC(NONE,WRITE,5,raw_mov_b_bmrr_indexed,(IMM base, R4 baser, R4 index, IMM factor, R1 s)) { ADDR32 MOVBrm(s, base, baser, index, factor); } LENDFUNC(NONE,WRITE,5,raw_mov_b_bmrr_indexed,(IMM base, R4 baser, R4 index, IMM factor, R1 s)) LOWFUNC(NONE,READ,5,raw_mov_l_brrm_indexed,(W4 d, IMM base, R4 baser, R4 index, IMM factor)) { ADDR32 MOVLmr(base, baser, index, factor, d); } LENDFUNC(NONE,READ,5,raw_mov_l_brrm_indexed,(W4 d, IMM base, R4 baser, R4 index, IMM factor)) LOWFUNC(NONE,READ,5,raw_mov_w_brrm_indexed,(W2 d, IMM base, R4 baser, R4 index, IMM factor)) { ADDR32 MOVWmr(base, baser, index, factor, d); } LENDFUNC(NONE,READ,5,raw_mov_w_brrm_indexed,(W2 d, IMM base, R4 baser, R4 index, IMM factor)) LOWFUNC(NONE,READ,5,raw_mov_b_brrm_indexed,(W1 d, IMM base, R4 baser, R4 index, IMM factor)) { ADDR32 MOVBmr(base, baser, index, factor, d); } LENDFUNC(NONE,READ,5,raw_mov_b_brrm_indexed,(W1 d, IMM base, R4 baser, R4 index, IMM factor)) LOWFUNC(NONE,READ,4,raw_mov_l_rm_indexed,(W4 d, IMM base, R4 index, IMM factor)) { ADDR32 MOVLmr(base, X86_NOREG, index, factor, d); } LENDFUNC(NONE,READ,4,raw_mov_l_rm_indexed,(W4 d, IMM base, R4 index, IMM factor)) LOWFUNC(NONE,READ,5,raw_cmov_l_rm_indexed,(W4 d, IMM base, R4 index, IMM factor, IMM cond)) { if (have_cmov) ADDR32 CMOVLmr(cond, base, X86_NOREG, index, factor, d); else { /* replacement using branch and mov */ int8 *target_p = (int8 *)x86_get_target() + 1; JCCSii(cond^1, 0); ADDR32 MOVLmr(base, X86_NOREG, index, factor, d); *target_p = (uintptr)x86_get_target() - ((uintptr)target_p + 1); } } LENDFUNC(NONE,READ,5,raw_cmov_l_rm_indexed,(W4 d, IMM base, R4 index, IMM factor, IMM cond)) LOWFUNC(NONE,READ,3,raw_cmov_l_rm,(W4 d, IMM mem, IMM cond)) { if (have_cmov) CMOVLmr(cond, mem, X86_NOREG, X86_NOREG, 1, d); else { /* replacement using branch and mov */ int8 *target_p = (int8 *)x86_get_target() + 1; JCCSii(cond^1, 0); MOVLmr(mem, X86_NOREG, X86_NOREG, 1, d); *target_p = (uintptr)x86_get_target() - ((uintptr)target_p + 1); } } LENDFUNC(NONE,READ,3,raw_cmov_l_rm,(W4 d, IMM mem, IMM cond)) LOWFUNC(NONE,READ,3,raw_mov_l_rR,(W4 d, R4 s, IMM offset)) { ADDR32 MOVLmr(offset, s, X86_NOREG, 1, d); } LENDFUNC(NONE,READ,3,raw_mov_l_rR,(W4 d, R4 s, IMM offset)) LOWFUNC(NONE,READ,3,raw_mov_w_rR,(W2 d, R4 s, IMM offset)) { ADDR32 MOVWmr(offset, s, X86_NOREG, 1, d); } LENDFUNC(NONE,READ,3,raw_mov_w_rR,(W2 d, R4 s, IMM offset)) LOWFUNC(NONE,READ,3,raw_mov_b_rR,(W1 d, R4 s, IMM offset)) { ADDR32 MOVBmr(offset, s, X86_NOREG, 1, d); } LENDFUNC(NONE,READ,3,raw_mov_b_rR,(W1 d, R4 s, IMM offset)) LOWFUNC(NONE,READ,3,raw_mov_l_brR,(W4 d, R4 s, IMM offset)) { ADDR32 MOVLmr(offset, s, X86_NOREG, 1, d); } LENDFUNC(NONE,READ,3,raw_mov_l_brR,(W4 d, R4 s, IMM offset)) LOWFUNC(NONE,READ,3,raw_mov_w_brR,(W2 d, R4 s, IMM offset)) { ADDR32 MOVWmr(offset, s, X86_NOREG, 1, d); } LENDFUNC(NONE,READ,3,raw_mov_w_brR,(W2 d, R4 s, IMM offset)) LOWFUNC(NONE,READ,3,raw_mov_b_brR,(W1 d, R4 s, IMM offset)) { ADDR32 MOVBmr(offset, s, X86_NOREG, 1, d); } LENDFUNC(NONE,READ,3,raw_mov_b_brR,(W1 d, R4 s, IMM offset)) LOWFUNC(NONE,WRITE,3,raw_mov_l_Ri,(R4 d, IMM i, IMM offset)) { ADDR32 MOVLim(i, offset, d, X86_NOREG, 1); } LENDFUNC(NONE,WRITE,3,raw_mov_l_Ri,(R4 d, IMM i, IMM offset)) LOWFUNC(NONE,WRITE,3,raw_mov_w_Ri,(R4 d, IMM i, IMM offset)) { ADDR32 MOVWim(i, offset, d, X86_NOREG, 1); } LENDFUNC(NONE,WRITE,3,raw_mov_w_Ri,(R4 d, IMM i, IMM offset)) LOWFUNC(NONE,WRITE,3,raw_mov_b_Ri,(R4 d, IMM i, IMM offset)) { ADDR32 MOVBim(i, offset, d, X86_NOREG, 1); } LENDFUNC(NONE,WRITE,3,raw_mov_b_Ri,(R4 d, IMM i, IMM offset)) LOWFUNC(NONE,WRITE,3,raw_mov_l_Rr,(R4 d, R4 s, IMM offset)) { ADDR32 MOVLrm(s, offset, d, X86_NOREG, 1); } LENDFUNC(NONE,WRITE,3,raw_mov_l_Rr,(R4 d, R4 s, IMM offset)) LOWFUNC(NONE,WRITE,3,raw_mov_w_Rr,(R4 d, R2 s, IMM offset)) { ADDR32 MOVWrm(s, offset, d, X86_NOREG, 1); } LENDFUNC(NONE,WRITE,3,raw_mov_w_Rr,(R4 d, R2 s, IMM offset)) LOWFUNC(NONE,WRITE,3,raw_mov_b_Rr,(R4 d, R1 s, IMM offset)) { ADDR32 MOVBrm(s, offset, d, X86_NOREG, 1); } LENDFUNC(NONE,WRITE,3,raw_mov_b_Rr,(R4 d, R1 s, IMM offset)) LOWFUNC(NONE,NONE,3,raw_lea_l_brr,(W4 d, R4 s, IMM offset)) { LEALmr(offset, s, X86_NOREG, 1, d); } LENDFUNC(NONE,NONE,3,raw_lea_l_brr,(W4 d, R4 s, IMM offset)) LOWFUNC(NONE,NONE,5,raw_lea_l_brr_indexed,(W4 d, R4 s, R4 index, IMM factor, IMM offset)) { LEALmr(offset, s, index, factor, d); } LENDFUNC(NONE,NONE,5,raw_lea_l_brr_indexed,(W4 d, R4 s, R4 index, IMM factor, IMM offset)) LOWFUNC(NONE,NONE,4,raw_lea_l_rr_indexed,(W4 d, R4 s, R4 index, IMM factor)) { LEALmr(0, s, index, factor, d); } LENDFUNC(NONE,NONE,4,raw_lea_l_rr_indexed,(W4 d, R4 s, R4 index, IMM factor)) LOWFUNC(NONE,NONE,4,raw_lea_l_r_scaled,(W4 d, R4 index, IMM factor)) { LEALmr(0, X86_NOREG, index, factor, d); } LENDFUNC(NONE,NONE,4,raw_lea_l_r_scaled,(W4 d, R4 index, IMM factor)) LOWFUNC(NONE,WRITE,3,raw_mov_l_bRr,(R4 d, R4 s, IMM offset)) { ADDR32 MOVLrm(s, offset, d, X86_NOREG, 1); } LENDFUNC(NONE,WRITE,3,raw_mov_l_bRr,(R4 d, R4 s, IMM offset)) LOWFUNC(NONE,WRITE,3,raw_mov_w_bRr,(R4 d, R2 s, IMM offset)) { ADDR32 MOVWrm(s, offset, d, X86_NOREG, 1); } LENDFUNC(NONE,WRITE,3,raw_mov_w_bRr,(R4 d, R2 s, IMM offset)) LOWFUNC(NONE,WRITE,3,raw_mov_b_bRr,(R4 d, R1 s, IMM offset)) { ADDR32 MOVBrm(s, offset, d, X86_NOREG, 1); } LENDFUNC(NONE,WRITE,3,raw_mov_b_bRr,(R4 d, R1 s, IMM offset)) LOWFUNC(NONE,NONE,1,raw_bswap_32,(RW4 r)) { BSWAPLr(r); } LENDFUNC(NONE,NONE,1,raw_bswap_32,(RW4 r)) LOWFUNC(WRITE,NONE,1,raw_bswap_16,(RW2 r)) { ROLWir(8, r); } LENDFUNC(WRITE,NONE,1,raw_bswap_16,(RW2 r)) LOWFUNC(NONE,NONE,2,raw_mov_l_rr,(W4 d, R4 s)) { MOVLrr(s, d); } LENDFUNC(NONE,NONE,2,raw_mov_l_rr,(W4 d, R4 s)) LOWFUNC(NONE,WRITE,2,raw_mov_l_mr,(IMM d, R4 s)) { MOVLrm(s, d, X86_NOREG, X86_NOREG, 1); } LENDFUNC(NONE,WRITE,2,raw_mov_l_mr,(IMM d, R4 s)) LOWFUNC(NONE,WRITE,2,raw_mov_w_mr,(IMM d, R2 s)) { MOVWrm(s, d, X86_NOREG, X86_NOREG, 1); } LENDFUNC(NONE,WRITE,2,raw_mov_w_mr,(IMM d, R2 s)) LOWFUNC(NONE,READ,2,raw_mov_w_rm,(W2 d, IMM s)) { MOVWmr(s, X86_NOREG, X86_NOREG, 1, d); } LENDFUNC(NONE,READ,2,raw_mov_w_rm,(W2 d, IMM s)) LOWFUNC(NONE,WRITE,2,raw_mov_b_mr,(IMM d, R1 s)) { MOVBrm(s, d, X86_NOREG, X86_NOREG, 1); } LENDFUNC(NONE,WRITE,2,raw_mov_b_mr,(IMM d, R1 s)) LOWFUNC(NONE,READ,2,raw_mov_b_rm,(W1 d, IMM s)) { MOVBmr(s, X86_NOREG, X86_NOREG, 1, d); } LENDFUNC(NONE,READ,2,raw_mov_b_rm,(W1 d, IMM s)) LOWFUNC(NONE,NONE,2,raw_mov_l_ri,(W4 d, IMM s)) { MOVLir(s, d); } LENDFUNC(NONE,NONE,2,raw_mov_l_ri,(W4 d, IMM s)) LOWFUNC(NONE,NONE,2,raw_mov_w_ri,(W2 d, IMM s)) { MOVWir(s, d); } LENDFUNC(NONE,NONE,2,raw_mov_w_ri,(W2 d, IMM s)) LOWFUNC(NONE,NONE,2,raw_mov_b_ri,(W1 d, IMM s)) { MOVBir(s, d); } LENDFUNC(NONE,NONE,2,raw_mov_b_ri,(W1 d, IMM s)) LOWFUNC(RMW,RMW,2,raw_adc_l_mi,(MEMRW d, IMM s)) { ADCLim(s, d, X86_NOREG, X86_NOREG, 1); } LENDFUNC(RMW,RMW,2,raw_adc_l_mi,(MEMRW d, IMM s)) LOWFUNC(WRITE,RMW,2,raw_add_l_mi,(IMM d, IMM s)) { ADDLim(s, d, X86_NOREG, X86_NOREG, 1); } LENDFUNC(WRITE,RMW,2,raw_add_l_mi,(IMM d, IMM s)) LOWFUNC(WRITE,RMW,2,raw_add_w_mi,(IMM d, IMM s)) { ADDWim(s, d, X86_NOREG, X86_NOREG, 1); } LENDFUNC(WRITE,RMW,2,raw_add_w_mi,(IMM d, IMM s)) LOWFUNC(WRITE,RMW,2,raw_add_b_mi,(IMM d, IMM s)) { ADDBim(s, d, X86_NOREG, X86_NOREG, 1); } LENDFUNC(WRITE,RMW,2,raw_add_b_mi,(IMM d, IMM s)) LOWFUNC(WRITE,NONE,2,raw_test_l_ri,(R4 d, IMM i)) { TESTLir(i, d); } LENDFUNC(WRITE,NONE,2,raw_test_l_ri,(R4 d, IMM i)) LOWFUNC(WRITE,NONE,2,raw_test_l_rr,(R4 d, R4 s)) { TESTLrr(s, d); } LENDFUNC(WRITE,NONE,2,raw_test_l_rr,(R4 d, R4 s)) LOWFUNC(WRITE,NONE,2,raw_test_w_rr,(R2 d, R2 s)) { TESTWrr(s, d); } LENDFUNC(WRITE,NONE,2,raw_test_w_rr,(R2 d, R2 s)) LOWFUNC(WRITE,NONE,2,raw_test_b_rr,(R1 d, R1 s)) { TESTBrr(s, d); } LENDFUNC(WRITE,NONE,2,raw_test_b_rr,(R1 d, R1 s)) LOWFUNC(WRITE,NONE,2,raw_xor_l_ri,(RW4 d, IMM i)) { XORLir(i, d); } LENDFUNC(WRITE,NONE,2,raw_xor_l_ri,(RW4 d, IMM i)) LOWFUNC(WRITE,NONE,2,raw_and_l_ri,(RW4 d, IMM i)) { ANDLir(i, d); } LENDFUNC(WRITE,NONE,2,raw_and_l_ri,(RW4 d, IMM i)) LOWFUNC(WRITE,NONE,2,raw_and_w_ri,(RW2 d, IMM i)) { ANDWir(i, d); } LENDFUNC(WRITE,NONE,2,raw_and_w_ri,(RW2 d, IMM i)) LOWFUNC(WRITE,NONE,2,raw_and_l,(RW4 d, R4 s)) { ANDLrr(s, d); } LENDFUNC(WRITE,NONE,2,raw_and_l,(RW4 d, R4 s)) LOWFUNC(WRITE,NONE,2,raw_and_w,(RW2 d, R2 s)) { ANDWrr(s, d); } LENDFUNC(WRITE,NONE,2,raw_and_w,(RW2 d, R2 s)) LOWFUNC(WRITE,NONE,2,raw_and_b,(RW1 d, R1 s)) { ANDBrr(s, d); } LENDFUNC(WRITE,NONE,2,raw_and_b,(RW1 d, R1 s)) LOWFUNC(WRITE,NONE,2,raw_or_l_ri,(RW4 d, IMM i)) { ORLir(i, d); } LENDFUNC(WRITE,NONE,2,raw_or_l_ri,(RW4 d, IMM i)) LOWFUNC(WRITE,NONE,2,raw_or_l,(RW4 d, R4 s)) { ORLrr(s, d); } LENDFUNC(WRITE,NONE,2,raw_or_l,(RW4 d, R4 s)) LOWFUNC(WRITE,NONE,2,raw_or_w,(RW2 d, R2 s)) { ORWrr(s, d); } LENDFUNC(WRITE,NONE,2,raw_or_w,(RW2 d, R2 s)) LOWFUNC(WRITE,NONE,2,raw_or_b,(RW1 d, R1 s)) { ORBrr(s, d); } LENDFUNC(WRITE,NONE,2,raw_or_b,(RW1 d, R1 s)) LOWFUNC(RMW,NONE,2,raw_adc_l,(RW4 d, R4 s)) { ADCLrr(s, d); } LENDFUNC(RMW,NONE,2,raw_adc_l,(RW4 d, R4 s)) LOWFUNC(RMW,NONE,2,raw_adc_w,(RW2 d, R2 s)) { ADCWrr(s, d); } LENDFUNC(RMW,NONE,2,raw_adc_w,(RW2 d, R2 s)) LOWFUNC(RMW,NONE,2,raw_adc_b,(RW1 d, R1 s)) { ADCBrr(s, d); } LENDFUNC(RMW,NONE,2,raw_adc_b,(RW1 d, R1 s)) LOWFUNC(WRITE,NONE,2,raw_add_l,(RW4 d, R4 s)) { ADDLrr(s, d); } LENDFUNC(WRITE,NONE,2,raw_add_l,(RW4 d, R4 s)) LOWFUNC(WRITE,NONE,2,raw_add_w,(RW2 d, R2 s)) { ADDWrr(s, d); } LENDFUNC(WRITE,NONE,2,raw_add_w,(RW2 d, R2 s)) LOWFUNC(WRITE,NONE,2,raw_add_b,(RW1 d, R1 s)) { ADDBrr(s, d); } LENDFUNC(WRITE,NONE,2,raw_add_b,(RW1 d, R1 s)) LOWFUNC(WRITE,NONE,2,raw_sub_l_ri,(RW4 d, IMM i)) { SUBLir(i, d); } LENDFUNC(WRITE,NONE,2,raw_sub_l_ri,(RW4 d, IMM i)) LOWFUNC(WRITE,NONE,2,raw_sub_b_ri,(RW1 d, IMM i)) { SUBBir(i, d); } LENDFUNC(WRITE,NONE,2,raw_sub_b_ri,(RW1 d, IMM i)) LOWFUNC(WRITE,NONE,2,raw_add_l_ri,(RW4 d, IMM i)) { ADDLir(i, d); } LENDFUNC(WRITE,NONE,2,raw_add_l_ri,(RW4 d, IMM i)) LOWFUNC(WRITE,NONE,2,raw_add_w_ri,(RW2 d, IMM i)) { ADDWir(i, d); } LENDFUNC(WRITE,NONE,2,raw_add_w_ri,(RW2 d, IMM i)) LOWFUNC(WRITE,NONE,2,raw_add_b_ri,(RW1 d, IMM i)) { ADDBir(i, d); } LENDFUNC(WRITE,NONE,2,raw_add_b_ri,(RW1 d, IMM i)) LOWFUNC(RMW,NONE,2,raw_sbb_l,(RW4 d, R4 s)) { SBBLrr(s, d); } LENDFUNC(RMW,NONE,2,raw_sbb_l,(RW4 d, R4 s)) LOWFUNC(RMW,NONE,2,raw_sbb_w,(RW2 d, R2 s)) { SBBWrr(s, d); } LENDFUNC(RMW,NONE,2,raw_sbb_w,(RW2 d, R2 s)) LOWFUNC(RMW,NONE,2,raw_sbb_b,(RW1 d, R1 s)) { SBBBrr(s, d); } LENDFUNC(RMW,NONE,2,raw_sbb_b,(RW1 d, R1 s)) LOWFUNC(WRITE,NONE,2,raw_sub_l,(RW4 d, R4 s)) { SUBLrr(s, d); } LENDFUNC(WRITE,NONE,2,raw_sub_l,(RW4 d, R4 s)) LOWFUNC(WRITE,NONE,2,raw_sub_w,(RW2 d, R2 s)) { SUBWrr(s, d); } LENDFUNC(WRITE,NONE,2,raw_sub_w,(RW2 d, R2 s)) LOWFUNC(WRITE,NONE,2,raw_sub_b,(RW1 d, R1 s)) { SUBBrr(s, d); } LENDFUNC(WRITE,NONE,2,raw_sub_b,(RW1 d, R1 s)) LOWFUNC(WRITE,NONE,2,raw_cmp_l,(R4 d, R4 s)) { CMPLrr(s, d); } LENDFUNC(WRITE,NONE,2,raw_cmp_l,(R4 d, R4 s)) LOWFUNC(WRITE,NONE,2,raw_cmp_l_ri,(R4 r, IMM i)) { CMPLir(i, r); } LENDFUNC(WRITE,NONE,2,raw_cmp_l_ri,(R4 r, IMM i)) LOWFUNC(WRITE,NONE,2,raw_cmp_w,(R2 d, R2 s)) { CMPWrr(s, d); } LENDFUNC(WRITE,NONE,2,raw_cmp_w,(R2 d, R2 s)) LOWFUNC(WRITE,READ,2,raw_cmp_b_mi,(MEMR d, IMM s)) { CMPBim(s, d, X86_NOREG, X86_NOREG, 1); } LENDFUNC(WRITE,READ,2,raw_cmp_l_mi,(MEMR d, IMM s)) LOWFUNC(WRITE,NONE,2,raw_cmp_b_ri,(R1 d, IMM i)) { CMPBir(i, d); } LENDFUNC(WRITE,NONE,2,raw_cmp_b_ri,(R1 d, IMM i)) LOWFUNC(WRITE,NONE,2,raw_cmp_b,(R1 d, R1 s)) { CMPBrr(s, d); } LENDFUNC(WRITE,NONE,2,raw_cmp_b,(R1 d, R1 s)) LOWFUNC(WRITE,READ,4,raw_cmp_l_rm_indexed,(R4 d, IMM offset, R4 index, IMM factor)) { ADDR32 CMPLmr(offset, X86_NOREG, index, factor, d); } LENDFUNC(WRITE,READ,4,raw_cmp_l_rm_indexed,(R4 d, IMM offset, R4 index, IMM factor)) LOWFUNC(WRITE,NONE,2,raw_xor_l,(RW4 d, R4 s)) { XORLrr(s, d); } LENDFUNC(WRITE,NONE,2,raw_xor_l,(RW4 d, R4 s)) LOWFUNC(WRITE,NONE,2,raw_xor_w,(RW2 d, R2 s)) { XORWrr(s, d); } LENDFUNC(WRITE,NONE,2,raw_xor_w,(RW2 d, R2 s)) LOWFUNC(WRITE,NONE,2,raw_xor_b,(RW1 d, R1 s)) { XORBrr(s, d); } LENDFUNC(WRITE,NONE,2,raw_xor_b,(RW1 d, R1 s)) LOWFUNC(WRITE,RMW,2,raw_sub_l_mi,(MEMRW d, IMM s)) { SUBLim(s, d, X86_NOREG, X86_NOREG, 1); } LENDFUNC(WRITE,RMW,2,raw_sub_l_mi,(MEMRW d, IMM s)) LOWFUNC(WRITE,READ,2,raw_cmp_l_mi,(MEMR d, IMM s)) { CMPLim(s, d, X86_NOREG, X86_NOREG, 1); } LENDFUNC(WRITE,READ,2,raw_cmp_l_mi,(MEMR d, IMM s)) LOWFUNC(NONE,NONE,2,raw_xchg_l_rr,(RW4 r1, RW4 r2)) { XCHGLrr(r2, r1); } LENDFUNC(NONE,NONE,2,raw_xchg_l_rr,(RW4 r1, RW4 r2)) LOWFUNC(NONE,NONE,2,raw_xchg_b_rr,(RW4 r1, RW4 r2)) { XCHGBrr(r2, r1); } LENDFUNC(NONE,NONE,2,raw_xchg_b_rr,(RW4 r1, RW4 r2)) LOWFUNC(READ,WRITE,0,raw_pushfl,(void)) { PUSHF(); } LENDFUNC(READ,WRITE,0,raw_pushfl,(void)) LOWFUNC(WRITE,READ,0,raw_popfl,(void)) { POPF(); } LENDFUNC(WRITE,READ,0,raw_popfl,(void)) /* Generate floating-point instructions */ static inline void x86_fadd_m(MEMR s) { FADDLm(s,X86_NOREG,X86_NOREG,1); } #else const bool optimize_accum = true; const bool optimize_imm8 = true; const bool optimize_shift_once = true; /************************************************************************* * Actual encoding of the instructions on the target CPU * *************************************************************************/ static __inline__ int isaccum(int r) { return (r == EAX_INDEX); } static __inline__ int isbyte(uae_s32 x) { return (x>=-128 && x<=127); } static __inline__ int isword(uae_s32 x) { return (x>=-32768 && x<=32767); } LOWFUNC(NONE,WRITE,1,raw_push_l_r,(R4 r)) { emit_byte(0x50+r); } LENDFUNC(NONE,WRITE,1,raw_push_l_r,(R4 r)) LOWFUNC(NONE,READ,1,raw_pop_l_r,(R4 r)) { emit_byte(0x58+r); } LENDFUNC(NONE,READ,1,raw_pop_l_r,(R4 r)) LOWFUNC(NONE,READ,1,raw_pop_l_m,(MEMW d)) { emit_byte(0x8f); emit_byte(0x05); emit_long(d); } LENDFUNC(NONE,READ,1,raw_pop_l_m,(MEMW d)) LOWFUNC(WRITE,NONE,2,raw_bt_l_ri,(R4 r, IMM i)) { emit_byte(0x0f); emit_byte(0xba); emit_byte(0xe0+r); emit_byte(i); } LENDFUNC(WRITE,NONE,2,raw_bt_l_ri,(R4 r, IMM i)) LOWFUNC(WRITE,NONE,2,raw_bt_l_rr,(R4 r, R4 b)) { emit_byte(0x0f); emit_byte(0xa3); emit_byte(0xc0+8*b+r); } LENDFUNC(WRITE,NONE,2,raw_bt_l_rr,(R4 r, R4 b)) LOWFUNC(WRITE,NONE,2,raw_btc_l_ri,(RW4 r, IMM i)) { emit_byte(0x0f); emit_byte(0xba); emit_byte(0xf8+r); emit_byte(i); } LENDFUNC(WRITE,NONE,2,raw_btc_l_ri,(RW4 r, IMM i)) LOWFUNC(WRITE,NONE,2,raw_btc_l_rr,(RW4 r, R4 b)) { emit_byte(0x0f); emit_byte(0xbb); emit_byte(0xc0+8*b+r); } LENDFUNC(WRITE,NONE,2,raw_btc_l_rr,(RW4 r, R4 b)) LOWFUNC(WRITE,NONE,2,raw_btr_l_ri,(RW4 r, IMM i)) { emit_byte(0x0f); emit_byte(0xba); emit_byte(0xf0+r); emit_byte(i); } LENDFUNC(WRITE,NONE,2,raw_btr_l_ri,(RW4 r, IMM i)) LOWFUNC(WRITE,NONE,2,raw_btr_l_rr,(RW4 r, R4 b)) { emit_byte(0x0f); emit_byte(0xb3); emit_byte(0xc0+8*b+r); } LENDFUNC(WRITE,NONE,2,raw_btr_l_rr,(RW4 r, R4 b)) LOWFUNC(WRITE,NONE,2,raw_bts_l_ri,(RW4 r, IMM i)) { emit_byte(0x0f); emit_byte(0xba); emit_byte(0xe8+r); emit_byte(i); } LENDFUNC(WRITE,NONE,2,raw_bts_l_ri,(RW4 r, IMM i)) LOWFUNC(WRITE,NONE,2,raw_bts_l_rr,(RW4 r, R4 b)) { emit_byte(0x0f); emit_byte(0xab); emit_byte(0xc0+8*b+r); } LENDFUNC(WRITE,NONE,2,raw_bts_l_rr,(RW4 r, R4 b)) LOWFUNC(WRITE,NONE,2,raw_sub_w_ri,(RW2 d, IMM i)) { emit_byte(0x66); if (isbyte(i)) { emit_byte(0x83); emit_byte(0xe8+d); emit_byte(i); } else { if (optimize_accum && isaccum(d)) emit_byte(0x2d); else { emit_byte(0x81); emit_byte(0xe8+d); } emit_word(i); } } LENDFUNC(WRITE,NONE,2,raw_sub_w_ri,(RW2 d, IMM i)) LOWFUNC(NONE,READ,2,raw_mov_l_rm,(W4 d, MEMR s)) { emit_byte(0x8b); emit_byte(0x05+8*d); emit_long(s); } LENDFUNC(NONE,READ,2,raw_mov_l_rm,(W4 d, MEMR s)) LOWFUNC(NONE,WRITE,2,raw_mov_l_mi,(MEMW d, IMM s)) { emit_byte(0xc7); emit_byte(0x05); emit_long(d); emit_long(s); } LENDFUNC(NONE,WRITE,2,raw_mov_l_mi,(MEMW d, IMM s)) LOWFUNC(NONE,WRITE,2,raw_mov_w_mi,(MEMW d, IMM s)) { emit_byte(0x66); emit_byte(0xc7); emit_byte(0x05); emit_long(d); emit_word(s); } LENDFUNC(NONE,WRITE,2,raw_mov_w_mi,(MEMW d, IMM s)) LOWFUNC(NONE,WRITE,2,raw_mov_b_mi,(MEMW d, IMM s)) { emit_byte(0xc6); emit_byte(0x05); emit_long(d); emit_byte(s); } LENDFUNC(NONE,WRITE,2,raw_mov_b_mi,(MEMW d, IMM s)) LOWFUNC(WRITE,RMW,2,raw_rol_b_mi,(MEMRW d, IMM i)) { if (optimize_shift_once && (i == 1)) { emit_byte(0xd0); emit_byte(0x05); emit_long(d); } else { emit_byte(0xc0); emit_byte(0x05); emit_long(d); emit_byte(i); } } LENDFUNC(WRITE,RMW,2,raw_rol_b_mi,(MEMRW d, IMM i)) LOWFUNC(WRITE,NONE,2,raw_rol_b_ri,(RW1 r, IMM i)) { if (optimize_shift_once && (i == 1)) { emit_byte(0xd0); emit_byte(0xc0+r); } else { emit_byte(0xc0); emit_byte(0xc0+r); emit_byte(i); } } LENDFUNC(WRITE,NONE,2,raw_rol_b_ri,(RW1 r, IMM i)) LOWFUNC(WRITE,NONE,2,raw_rol_w_ri,(RW2 r, IMM i)) { emit_byte(0x66); emit_byte(0xc1); emit_byte(0xc0+r); emit_byte(i); } LENDFUNC(WRITE,NONE,2,raw_rol_w_ri,(RW2 r, IMM i)) LOWFUNC(WRITE,NONE,2,raw_rol_l_ri,(RW4 r, IMM i)) { if (optimize_shift_once && (i == 1)) { emit_byte(0xd1); emit_byte(0xc0+r); } else { emit_byte(0xc1); emit_byte(0xc0+r); emit_byte(i); } } LENDFUNC(WRITE,NONE,2,raw_rol_l_ri,(RW4 r, IMM i)) LOWFUNC(WRITE,NONE,2,raw_rol_l_rr,(RW4 d, R1 r)) { emit_byte(0xd3); emit_byte(0xc0+d); } LENDFUNC(WRITE,NONE,2,raw_rol_l_rr,(RW4 d, R1 r)) LOWFUNC(WRITE,NONE,2,raw_rol_w_rr,(RW2 d, R1 r)) { emit_byte(0x66); emit_byte(0xd3); emit_byte(0xc0+d); } LENDFUNC(WRITE,NONE,2,raw_rol_w_rr,(RW2 d, R1 r)) LOWFUNC(WRITE,NONE,2,raw_rol_b_rr,(RW1 d, R1 r)) { emit_byte(0xd2); emit_byte(0xc0+d); } LENDFUNC(WRITE,NONE,2,raw_rol_b_rr,(RW1 d, R1 r)) LOWFUNC(WRITE,NONE,2,raw_shll_l_rr,(RW4 d, R1 r)) { emit_byte(0xd3); emit_byte(0xe0+d); } LENDFUNC(WRITE,NONE,2,raw_shll_l_rr,(RW4 d, R1 r)) LOWFUNC(WRITE,NONE,2,raw_shll_w_rr,(RW2 d, R1 r)) { emit_byte(0x66); emit_byte(0xd3); emit_byte(0xe0+d); } LENDFUNC(WRITE,NONE,2,raw_shll_w_rr,(RW2 d, R1 r)) LOWFUNC(WRITE,NONE,2,raw_shll_b_rr,(RW1 d, R1 r)) { emit_byte(0xd2); emit_byte(0xe0+d); } LENDFUNC(WRITE,NONE,2,raw_shll_b_rr,(RW1 d, R1 r)) LOWFUNC(WRITE,NONE,2,raw_ror_b_ri,(RW1 r, IMM i)) { if (optimize_shift_once && (i == 1)) { emit_byte(0xd0); emit_byte(0xc8+r); } else { emit_byte(0xc0); emit_byte(0xc8+r); emit_byte(i); } } LENDFUNC(WRITE,NONE,2,raw_ror_b_ri,(RW1 r, IMM i)) LOWFUNC(WRITE,NONE,2,raw_ror_w_ri,(RW2 r, IMM i)) { emit_byte(0x66); emit_byte(0xc1); emit_byte(0xc8+r); emit_byte(i); } LENDFUNC(WRITE,NONE,2,raw_ror_w_ri,(RW2 r, IMM i)) // gb-- used for making an fpcr value in compemu_fpp.cpp LOWFUNC(WRITE,READ,2,raw_or_l_rm,(RW4 d, MEMR s)) { emit_byte(0x0b); emit_byte(0x05+8*d); emit_long(s); } LENDFUNC(WRITE,READ,2,raw_or_l_rm,(RW4 d, MEMR s)) LOWFUNC(WRITE,NONE,2,raw_ror_l_ri,(RW4 r, IMM i)) { if (optimize_shift_once && (i == 1)) { emit_byte(0xd1); emit_byte(0xc8+r); } else { emit_byte(0xc1); emit_byte(0xc8+r); emit_byte(i); } } LENDFUNC(WRITE,NONE,2,raw_ror_l_ri,(RW4 r, IMM i)) LOWFUNC(WRITE,NONE,2,raw_ror_l_rr,(RW4 d, R1 r)) { emit_byte(0xd3); emit_byte(0xc8+d); } LENDFUNC(WRITE,NONE,2,raw_ror_l_rr,(RW4 d, R1 r)) LOWFUNC(WRITE,NONE,2,raw_ror_w_rr,(RW2 d, R1 r)) { emit_byte(0x66); emit_byte(0xd3); emit_byte(0xc8+d); } LENDFUNC(WRITE,NONE,2,raw_ror_w_rr,(RW2 d, R1 r)) LOWFUNC(WRITE,NONE,2,raw_ror_b_rr,(RW1 d, R1 r)) { emit_byte(0xd2); emit_byte(0xc8+d); } LENDFUNC(WRITE,NONE,2,raw_ror_b_rr,(RW1 d, R1 r)) LOWFUNC(WRITE,NONE,2,raw_shrl_l_rr,(RW4 d, R1 r)) { emit_byte(0xd3); emit_byte(0xe8+d); } LENDFUNC(WRITE,NONE,2,raw_shrl_l_rr,(RW4 d, R1 r)) LOWFUNC(WRITE,NONE,2,raw_shrl_w_rr,(RW2 d, R1 r)) { emit_byte(0x66); emit_byte(0xd3); emit_byte(0xe8+d); } LENDFUNC(WRITE,NONE,2,raw_shrl_w_rr,(RW2 d, R1 r)) LOWFUNC(WRITE,NONE,2,raw_shrl_b_rr,(RW1 d, R1 r)) { emit_byte(0xd2); emit_byte(0xe8+d); } LENDFUNC(WRITE,NONE,2,raw_shrl_b_rr,(RW1 d, R1 r)) LOWFUNC(WRITE,NONE,2,raw_shra_l_rr,(RW4 d, R1 r)) { emit_byte(0xd3); emit_byte(0xf8+d); } LENDFUNC(WRITE,NONE,2,raw_shra_l_rr,(RW4 d, R1 r)) LOWFUNC(WRITE,NONE,2,raw_shra_w_rr,(RW2 d, R1 r)) { emit_byte(0x66); emit_byte(0xd3); emit_byte(0xf8+d); } LENDFUNC(WRITE,NONE,2,raw_shra_w_rr,(RW2 d, R1 r)) LOWFUNC(WRITE,NONE,2,raw_shra_b_rr,(RW1 d, R1 r)) { emit_byte(0xd2); emit_byte(0xf8+d); } LENDFUNC(WRITE,NONE,2,raw_shra_b_rr,(RW1 d, R1 r)) LOWFUNC(WRITE,NONE,2,raw_shll_l_ri,(RW4 r, IMM i)) { if (optimize_shift_once && (i == 1)) { emit_byte(0xd1); emit_byte(0xe0+r); } else { emit_byte(0xc1); emit_byte(0xe0+r); emit_byte(i); } } LENDFUNC(WRITE,NONE,2,raw_shll_l_ri,(RW4 r, IMM i)) LOWFUNC(WRITE,NONE,2,raw_shll_w_ri,(RW2 r, IMM i)) { emit_byte(0x66); emit_byte(0xc1); emit_byte(0xe0+r); emit_byte(i); } LENDFUNC(WRITE,NONE,2,raw_shll_w_ri,(RW2 r, IMM i)) LOWFUNC(WRITE,NONE,2,raw_shll_b_ri,(RW1 r, IMM i)) { if (optimize_shift_once && (i == 1)) { emit_byte(0xd0); emit_byte(0xe0+r); } else { emit_byte(0xc0); emit_byte(0xe0+r); emit_byte(i); } } LENDFUNC(WRITE,NONE,2,raw_shll_b_ri,(RW1 r, IMM i)) LOWFUNC(WRITE,NONE,2,raw_shrl_l_ri,(RW4 r, IMM i)) { if (optimize_shift_once && (i == 1)) { emit_byte(0xd1); emit_byte(0xe8+r); } else { emit_byte(0xc1); emit_byte(0xe8+r); emit_byte(i); } } LENDFUNC(WRITE,NONE,2,raw_shrl_l_ri,(RW4 r, IMM i)) LOWFUNC(WRITE,NONE,2,raw_shrl_w_ri,(RW2 r, IMM i)) { emit_byte(0x66); emit_byte(0xc1); emit_byte(0xe8+r); emit_byte(i); } LENDFUNC(WRITE,NONE,2,raw_shrl_w_ri,(RW2 r, IMM i)) LOWFUNC(WRITE,NONE,2,raw_shrl_b_ri,(RW1 r, IMM i)) { if (optimize_shift_once && (i == 1)) { emit_byte(0xd0); emit_byte(0xe8+r); } else { emit_byte(0xc0); emit_byte(0xe8+r); emit_byte(i); } } LENDFUNC(WRITE,NONE,2,raw_shrl_b_ri,(RW1 r, IMM i)) LOWFUNC(WRITE,NONE,2,raw_shra_l_ri,(RW4 r, IMM i)) { if (optimize_shift_once && (i == 1)) { emit_byte(0xd1); emit_byte(0xf8+r); } else { emit_byte(0xc1); emit_byte(0xf8+r); emit_byte(i); } } LENDFUNC(WRITE,NONE,2,raw_shra_l_ri,(RW4 r, IMM i)) LOWFUNC(WRITE,NONE,2,raw_shra_w_ri,(RW2 r, IMM i)) { emit_byte(0x66); emit_byte(0xc1); emit_byte(0xf8+r); emit_byte(i); } LENDFUNC(WRITE,NONE,2,raw_shra_w_ri,(RW2 r, IMM i)) LOWFUNC(WRITE,NONE,2,raw_shra_b_ri,(RW1 r, IMM i)) { if (optimize_shift_once && (i == 1)) { emit_byte(0xd0); emit_byte(0xf8+r); } else { emit_byte(0xc0); emit_byte(0xf8+r); emit_byte(i); } } LENDFUNC(WRITE,NONE,2,raw_shra_b_ri,(RW1 r, IMM i)) LOWFUNC(WRITE,NONE,1,raw_sahf,(R2 dummy_ah)) { emit_byte(0x9e); } LENDFUNC(WRITE,NONE,1,raw_sahf,(R2 dummy_ah)) LOWFUNC(NONE,NONE,1,raw_cpuid,(R4 dummy_eax)) { emit_byte(0x0f); emit_byte(0xa2); } LENDFUNC(NONE,NONE,1,raw_cpuid,(R4 dummy_eax)) LOWFUNC(READ,NONE,1,raw_lahf,(W2 dummy_ah)) { emit_byte(0x9f); } LENDFUNC(READ,NONE,1,raw_lahf,(W2 dummy_ah)) LOWFUNC(READ,NONE,2,raw_setcc,(W1 d, IMM cc)) { emit_byte(0x0f); emit_byte(0x90+cc); emit_byte(0xc0+d); } LENDFUNC(READ,NONE,2,raw_setcc,(W1 d, IMM cc)) LOWFUNC(READ,WRITE,2,raw_setcc_m,(MEMW d, IMM cc)) { emit_byte(0x0f); emit_byte(0x90+cc); emit_byte(0x05); emit_long(d); } LENDFUNC(READ,WRITE,2,raw_setcc_m,(MEMW d, IMM cc)) LOWFUNC(READ,NONE,3,raw_cmov_b_rr,(RW1 d, R1 s, IMM cc)) { /* replacement using branch and mov */ int uncc=(cc^1); emit_byte(0x70+uncc); emit_byte(3); /* skip next 2 bytes if not cc=true */ emit_byte(0x88); emit_byte(0xc0+8*s+d); } LENDFUNC(READ,NONE,3,raw_cmov_b_rr,(RW1 d, R1 s, IMM cc)) LOWFUNC(READ,NONE,3,raw_cmov_w_rr,(RW2 d, R2 s, IMM cc)) { if (have_cmov) { emit_byte(0x66); emit_byte(0x0f); emit_byte(0x40+cc); emit_byte(0xc0+8*d+s); } else { /* replacement using branch and mov */ int uncc=(cc^1); emit_byte(0x70+uncc); emit_byte(3); /* skip next 3 bytes if not cc=true */ emit_byte(0x66); emit_byte(0x89); emit_byte(0xc0+8*s+d); } } LENDFUNC(READ,NONE,3,raw_cmov_w_rr,(RW2 d, R2 s, IMM cc)) LOWFUNC(READ,NONE,3,raw_cmov_l_rr,(RW4 d, R4 s, IMM cc)) { if (have_cmov) { emit_byte(0x0f); emit_byte(0x40+cc); emit_byte(0xc0+8*d+s); } else { /* replacement using branch and mov */ int uncc=(cc^1); emit_byte(0x70+uncc); emit_byte(2); /* skip next 2 bytes if not cc=true */ emit_byte(0x89); emit_byte(0xc0+8*s+d); } } LENDFUNC(READ,NONE,3,raw_cmov_l_rr,(RW4 d, R4 s, IMM cc)) LOWFUNC(WRITE,NONE,2,raw_bsf_l_rr,(W4 d, R4 s)) { emit_byte(0x0f); emit_byte(0xbc); emit_byte(0xc0+8*d+s); } LENDFUNC(WRITE,NONE,2,raw_bsf_l_rr,(W4 d, R4 s)) LOWFUNC(NONE,NONE,2,raw_sign_extend_16_rr,(W4 d, R2 s)) { emit_byte(0x0f); emit_byte(0xbf); emit_byte(0xc0+8*d+s); } LENDFUNC(NONE,NONE,2,raw_sign_extend_16_rr,(W4 d, R2 s)) LOWFUNC(NONE,NONE,2,raw_sign_extend_8_rr,(W4 d, R1 s)) { emit_byte(0x0f); emit_byte(0xbe); emit_byte(0xc0+8*d+s); } LENDFUNC(NONE,NONE,2,raw_sign_extend_8_rr,(W4 d, R1 s)) LOWFUNC(NONE,NONE,2,raw_zero_extend_16_rr,(W4 d, R2 s)) { emit_byte(0x0f); emit_byte(0xb7); emit_byte(0xc0+8*d+s); } LENDFUNC(NONE,NONE,2,raw_zero_extend_16_rr,(W4 d, R2 s)) LOWFUNC(NONE,NONE,2,raw_zero_extend_8_rr,(W4 d, R1 s)) { emit_byte(0x0f); emit_byte(0xb6); emit_byte(0xc0+8*d+s); } LENDFUNC(NONE,NONE,2,raw_zero_extend_8_rr,(W4 d, R1 s)) LOWFUNC(NONE,NONE,2,raw_imul_32_32,(RW4 d, R4 s)) { emit_byte(0x0f); emit_byte(0xaf); emit_byte(0xc0+8*d+s); } LENDFUNC(NONE,NONE,2,raw_imul_32_32,(RW4 d, R4 s)) LOWFUNC(NONE,NONE,2,raw_imul_64_32,(RW4 d, RW4 s)) { if (d!=MUL_NREG1 || s!=MUL_NREG2) abort(); emit_byte(0xf7); emit_byte(0xea); } LENDFUNC(NONE,NONE,2,raw_imul_64_32,(RW4 d, RW4 s)) LOWFUNC(NONE,NONE,2,raw_mul_64_32,(RW4 d, RW4 s)) { if (d!=MUL_NREG1 || s!=MUL_NREG2) { printf("Bad register in MUL: d=%d, s=%d\n",d,s); abort(); } emit_byte(0xf7); emit_byte(0xe2); } LENDFUNC(NONE,NONE,2,raw_mul_64_32,(RW4 d, RW4 s)) LOWFUNC(NONE,NONE,2,raw_mul_32_32,(RW4 d, R4 s)) { abort(); /* %^$&%^$%#^ x86! */ emit_byte(0x0f); emit_byte(0xaf); emit_byte(0xc0+8*d+s); } LENDFUNC(NONE,NONE,2,raw_mul_32_32,(RW4 d, R4 s)) LOWFUNC(NONE,NONE,2,raw_mov_b_rr,(W1 d, R1 s)) { emit_byte(0x88); emit_byte(0xc0+8*s+d); } LENDFUNC(NONE,NONE,2,raw_mov_b_rr,(W1 d, R1 s)) LOWFUNC(NONE,NONE,2,raw_mov_w_rr,(W2 d, R2 s)) { emit_byte(0x66); emit_byte(0x89); emit_byte(0xc0+8*s+d); } LENDFUNC(NONE,NONE,2,raw_mov_w_rr,(W2 d, R2 s)) LOWFUNC(NONE,READ,4,raw_mov_l_rrm_indexed,(W4 d,R4 baser, R4 index, IMM factor)) { int isebp=(baser==5)?0x40:0; int fi; switch(factor) { case 1: fi=0; break; case 2: fi=1; break; case 4: fi=2; break; case 8: fi=3; break; default: abort(); } emit_byte(0x8b); emit_byte(0x04+8*d+isebp); emit_byte(baser+8*index+0x40*fi); if (isebp) emit_byte(0x00); } LENDFUNC(NONE,READ,4,raw_mov_l_rrm_indexed,(W4 d,R4 baser, R4 index, IMM factor)) LOWFUNC(NONE,READ,4,raw_mov_w_rrm_indexed,(W2 d, R4 baser, R4 index, IMM factor)) { int fi; int isebp; switch(factor) { case 1: fi=0; break; case 2: fi=1; break; case 4: fi=2; break; case 8: fi=3; break; default: abort(); } isebp=(baser==5)?0x40:0; emit_byte(0x66); emit_byte(0x8b); emit_byte(0x04+8*d+isebp); emit_byte(baser+8*index+0x40*fi); if (isebp) emit_byte(0x00); } LENDFUNC(NONE,READ,4,raw_mov_w_rrm_indexed,(W2 d, R4 baser, R4 index, IMM factor)) LOWFUNC(NONE,READ,4,raw_mov_b_rrm_indexed,(W1 d, R4 baser, R4 index, IMM factor)) { int fi; int isebp; switch(factor) { case 1: fi=0; break; case 2: fi=1; break; case 4: fi=2; break; case 8: fi=3; break; default: abort(); } isebp=(baser==5)?0x40:0; emit_byte(0x8a); emit_byte(0x04+8*d+isebp); emit_byte(baser+8*index+0x40*fi); if (isebp) emit_byte(0x00); } LENDFUNC(NONE,READ,4,raw_mov_b_rrm_indexed,(W1 d, R4 baser, R4 index, IMM factor)) LOWFUNC(NONE,WRITE,4,raw_mov_l_mrr_indexed,(R4 baser, R4 index, IMM factor, R4 s)) { int fi; int isebp; switch(factor) { case 1: fi=0; break; case 2: fi=1; break; case 4: fi=2; break; case 8: fi=3; break; default: abort(); } isebp=(baser==5)?0x40:0; emit_byte(0x89); emit_byte(0x04+8*s+isebp); emit_byte(baser+8*index+0x40*fi); if (isebp) emit_byte(0x00); } LENDFUNC(NONE,WRITE,4,raw_mov_l_mrr_indexed,(R4 baser, R4 index, IMM factor, R4 s)) LOWFUNC(NONE,WRITE,4,raw_mov_w_mrr_indexed,(R4 baser, R4 index, IMM factor, R2 s)) { int fi; int isebp; switch(factor) { case 1: fi=0; break; case 2: fi=1; break; case 4: fi=2; break; case 8: fi=3; break; default: abort(); } isebp=(baser==5)?0x40:0; emit_byte(0x66); emit_byte(0x89); emit_byte(0x04+8*s+isebp); emit_byte(baser+8*index+0x40*fi); if (isebp) emit_byte(0x00); } LENDFUNC(NONE,WRITE,4,raw_mov_w_mrr_indexed,(R4 baser, R4 index, IMM factor, R2 s)) LOWFUNC(NONE,WRITE,4,raw_mov_b_mrr_indexed,(R4 baser, R4 index, IMM factor, R1 s)) { int fi; int isebp; switch(factor) { case 1: fi=0; break; case 2: fi=1; break; case 4: fi=2; break; case 8: fi=3; break; default: abort(); } isebp=(baser==5)?0x40:0; emit_byte(0x88); emit_byte(0x04+8*s+isebp); emit_byte(baser+8*index+0x40*fi); if (isebp) emit_byte(0x00); } LENDFUNC(NONE,WRITE,4,raw_mov_b_mrr_indexed,(R4 baser, R4 index, IMM factor, R1 s)) LOWFUNC(NONE,WRITE,5,raw_mov_l_bmrr_indexed,(IMM base, R4 baser, R4 index, IMM factor, R4 s)) { int fi; switch(factor) { case 1: fi=0; break; case 2: fi=1; break; case 4: fi=2; break; case 8: fi=3; break; default: abort(); } emit_byte(0x89); emit_byte(0x84+8*s); emit_byte(baser+8*index+0x40*fi); emit_long(base); } LENDFUNC(NONE,WRITE,5,raw_mov_l_bmrr_indexed,(IMM base, R4 baser, R4 index, IMM factor, R4 s)) LOWFUNC(NONE,WRITE,5,raw_mov_w_bmrr_indexed,(IMM base, R4 baser, R4 index, IMM factor, R2 s)) { int fi; switch(factor) { case 1: fi=0; break; case 2: fi=1; break; case 4: fi=2; break; case 8: fi=3; break; default: abort(); } emit_byte(0x66); emit_byte(0x89); emit_byte(0x84+8*s); emit_byte(baser+8*index+0x40*fi); emit_long(base); } LENDFUNC(NONE,WRITE,5,raw_mov_w_bmrr_indexed,(IMM base, R4 baser, R4 index, IMM factor, R2 s)) LOWFUNC(NONE,WRITE,5,raw_mov_b_bmrr_indexed,(IMM base, R4 baser, R4 index, IMM factor, R1 s)) { int fi; switch(factor) { case 1: fi=0; break; case 2: fi=1; break; case 4: fi=2; break; case 8: fi=3; break; default: abort(); } emit_byte(0x88); emit_byte(0x84+8*s); emit_byte(baser+8*index+0x40*fi); emit_long(base); } LENDFUNC(NONE,WRITE,5,raw_mov_b_bmrr_indexed,(IMM base, R4 baser, R4 index, IMM factor, R1 s)) LOWFUNC(NONE,READ,5,raw_mov_l_brrm_indexed,(W4 d, IMM base, R4 baser, R4 index, IMM factor)) { int fi; switch(factor) { case 1: fi=0; break; case 2: fi=1; break; case 4: fi=2; break; case 8: fi=3; break; default: abort(); } emit_byte(0x8b); emit_byte(0x84+8*d); emit_byte(baser+8*index+0x40*fi); emit_long(base); } LENDFUNC(NONE,READ,5,raw_mov_l_brrm_indexed,(W4 d, IMM base, R4 baser, R4 index, IMM factor)) LOWFUNC(NONE,READ,5,raw_mov_w_brrm_indexed,(W2 d, IMM base, R4 baser, R4 index, IMM factor)) { int fi; switch(factor) { case 1: fi=0; break; case 2: fi=1; break; case 4: fi=2; break; case 8: fi=3; break; default: abort(); } emit_byte(0x66); emit_byte(0x8b); emit_byte(0x84+8*d); emit_byte(baser+8*index+0x40*fi); emit_long(base); } LENDFUNC(NONE,READ,5,raw_mov_w_brrm_indexed,(W2 d, IMM base, R4 baser, R4 index, IMM factor)) LOWFUNC(NONE,READ,5,raw_mov_b_brrm_indexed,(W1 d, IMM base, R4 baser, R4 index, IMM factor)) { int fi; switch(factor) { case 1: fi=0; break; case 2: fi=1; break; case 4: fi=2; break; case 8: fi=3; break; default: abort(); } emit_byte(0x8a); emit_byte(0x84+8*d); emit_byte(baser+8*index+0x40*fi); emit_long(base); } LENDFUNC(NONE,READ,5,raw_mov_b_brrm_indexed,(W1 d, IMM base, R4 baser, R4 index, IMM factor)) LOWFUNC(NONE,READ,4,raw_mov_l_rm_indexed,(W4 d, IMM base, R4 index, IMM factor)) { int fi; switch(factor) { case 1: fi=0; break; case 2: fi=1; break; case 4: fi=2; break; case 8: fi=3; break; default: fprintf(stderr,"Bad factor %d in mov_l_rm_indexed!\n",factor); abort(); } emit_byte(0x8b); emit_byte(0x04+8*d); emit_byte(0x05+8*index+64*fi); emit_long(base); } LENDFUNC(NONE,READ,4,raw_mov_l_rm_indexed,(W4 d, IMM base, R4 index, IMM factor)) LOWFUNC(NONE,READ,5,raw_cmov_l_rm_indexed,(W4 d, IMM base, R4 index, IMM factor, IMM cond)) { int fi; switch(factor) { case 1: fi=0; break; case 2: fi=1; break; case 4: fi=2; break; case 8: fi=3; break; default: fprintf(stderr,"Bad factor %d in mov_l_rm_indexed!\n",factor); abort(); } if (have_cmov) { emit_byte(0x0f); emit_byte(0x40+cond); emit_byte(0x04+8*d); emit_byte(0x05+8*index+64*fi); emit_long(base); } else { /* replacement using branch and mov */ int uncc=(cond^1); emit_byte(0x70+uncc); emit_byte(7); /* skip next 7 bytes if not cc=true */ emit_byte(0x8b); emit_byte(0x04+8*d); emit_byte(0x05+8*index+64*fi); emit_long(base); } } LENDFUNC(NONE,READ,5,raw_cmov_l_rm_indexed,(W4 d, IMM base, R4 index, IMM factor, IMM cond)) LOWFUNC(NONE,READ,3,raw_cmov_l_rm,(W4 d, IMM mem, IMM cond)) { if (have_cmov) { emit_byte(0x0f); emit_byte(0x40+cond); emit_byte(0x05+8*d); emit_long(mem); } else { /* replacement using branch and mov */ int uncc=(cond^1); emit_byte(0x70+uncc); emit_byte(6); /* skip next 6 bytes if not cc=true */ emit_byte(0x8b); emit_byte(0x05+8*d); emit_long(mem); } } LENDFUNC(NONE,READ,3,raw_cmov_l_rm,(W4 d, IMM mem, IMM cond)) LOWFUNC(NONE,READ,3,raw_mov_l_rR,(W4 d, R4 s, IMM offset)) { Dif(!isbyte(offset)) abort(); emit_byte(0x8b); emit_byte(0x40+8*d+s); emit_byte(offset); } LENDFUNC(NONE,READ,3,raw_mov_l_rR,(W4 d, R4 s, IMM offset)) LOWFUNC(NONE,READ,3,raw_mov_w_rR,(W2 d, R4 s, IMM offset)) { Dif(!isbyte(offset)) abort(); emit_byte(0x66); emit_byte(0x8b); emit_byte(0x40+8*d+s); emit_byte(offset); } LENDFUNC(NONE,READ,3,raw_mov_w_rR,(W2 d, R4 s, IMM offset)) LOWFUNC(NONE,READ,3,raw_mov_b_rR,(W1 d, R4 s, IMM offset)) { Dif(!isbyte(offset)) abort(); emit_byte(0x8a); emit_byte(0x40+8*d+s); emit_byte(offset); } LENDFUNC(NONE,READ,3,raw_mov_b_rR,(W1 d, R4 s, IMM offset)) LOWFUNC(NONE,READ,3,raw_mov_l_brR,(W4 d, R4 s, IMM offset)) { emit_byte(0x8b); emit_byte(0x80+8*d+s); emit_long(offset); } LENDFUNC(NONE,READ,3,raw_mov_l_brR,(W4 d, R4 s, IMM offset)) LOWFUNC(NONE,READ,3,raw_mov_w_brR,(W2 d, R4 s, IMM offset)) { emit_byte(0x66); emit_byte(0x8b); emit_byte(0x80+8*d+s); emit_long(offset); } LENDFUNC(NONE,READ,3,raw_mov_w_brR,(W2 d, R4 s, IMM offset)) LOWFUNC(NONE,READ,3,raw_mov_b_brR,(W1 d, R4 s, IMM offset)) { emit_byte(0x8a); emit_byte(0x80+8*d+s); emit_long(offset); } LENDFUNC(NONE,READ,3,raw_mov_b_brR,(W1 d, R4 s, IMM offset)) LOWFUNC(NONE,WRITE,3,raw_mov_l_Ri,(R4 d, IMM i, IMM offset)) { Dif(!isbyte(offset)) abort(); emit_byte(0xc7); emit_byte(0x40+d); emit_byte(offset); emit_long(i); } LENDFUNC(NONE,WRITE,3,raw_mov_l_Ri,(R4 d, IMM i, IMM offset)) LOWFUNC(NONE,WRITE,3,raw_mov_w_Ri,(R4 d, IMM i, IMM offset)) { Dif(!isbyte(offset)) abort(); emit_byte(0x66); emit_byte(0xc7); emit_byte(0x40+d); emit_byte(offset); emit_word(i); } LENDFUNC(NONE,WRITE,3,raw_mov_w_Ri,(R4 d, IMM i, IMM offset)) LOWFUNC(NONE,WRITE,3,raw_mov_b_Ri,(R4 d, IMM i, IMM offset)) { Dif(!isbyte(offset)) abort(); emit_byte(0xc6); emit_byte(0x40+d); emit_byte(offset); emit_byte(i); } LENDFUNC(NONE,WRITE,3,raw_mov_b_Ri,(R4 d, IMM i, IMM offset)) LOWFUNC(NONE,WRITE,3,raw_mov_l_Rr,(R4 d, R4 s, IMM offset)) { Dif(!isbyte(offset)) abort(); emit_byte(0x89); emit_byte(0x40+8*s+d); emit_byte(offset); } LENDFUNC(NONE,WRITE,3,raw_mov_l_Rr,(R4 d, R4 s, IMM offset)) LOWFUNC(NONE,WRITE,3,raw_mov_w_Rr,(R4 d, R2 s, IMM offset)) { Dif(!isbyte(offset)) abort(); emit_byte(0x66); emit_byte(0x89); emit_byte(0x40+8*s+d); emit_byte(offset); } LENDFUNC(NONE,WRITE,3,raw_mov_w_Rr,(R4 d, R2 s, IMM offset)) LOWFUNC(NONE,WRITE,3,raw_mov_b_Rr,(R4 d, R1 s, IMM offset)) { Dif(!isbyte(offset)) abort(); emit_byte(0x88); emit_byte(0x40+8*s+d); emit_byte(offset); } LENDFUNC(NONE,WRITE,3,raw_mov_b_Rr,(R4 d, R1 s, IMM offset)) LOWFUNC(NONE,NONE,3,raw_lea_l_brr,(W4 d, R4 s, IMM offset)) { if (optimize_imm8 && isbyte(offset)) { emit_byte(0x8d); emit_byte(0x40+8*d+s); emit_byte(offset); } else { emit_byte(0x8d); emit_byte(0x80+8*d+s); emit_long(offset); } } LENDFUNC(NONE,NONE,3,raw_lea_l_brr,(W4 d, R4 s, IMM offset)) LOWFUNC(NONE,NONE,5,raw_lea_l_brr_indexed,(W4 d, R4 s, R4 index, IMM factor, IMM offset)) { int fi; switch(factor) { case 1: fi=0; break; case 2: fi=1; break; case 4: fi=2; break; case 8: fi=3; break; default: abort(); } if (optimize_imm8 && isbyte(offset)) { emit_byte(0x8d); emit_byte(0x44+8*d); emit_byte(0x40*fi+8*index+s); emit_byte(offset); } else { emit_byte(0x8d); emit_byte(0x84+8*d); emit_byte(0x40*fi+8*index+s); emit_long(offset); } } LENDFUNC(NONE,NONE,5,raw_lea_l_brr_indexed,(W4 d, R4 s, R4 index, IMM factor, IMM offset)) LOWFUNC(NONE,NONE,4,raw_lea_l_rr_indexed,(W4 d, R4 s, R4 index, IMM factor)) { int isebp=(s==5)?0x40:0; int fi; switch(factor) { case 1: fi=0; break; case 2: fi=1; break; case 4: fi=2; break; case 8: fi=3; break; default: abort(); } emit_byte(0x8d); emit_byte(0x04+8*d+isebp); emit_byte(0x40*fi+8*index+s); if (isebp) emit_byte(0); } LENDFUNC(NONE,NONE,4,raw_lea_l_rr_indexed,(W4 d, R4 s, R4 index, IMM factor)) LOWFUNC(NONE,WRITE,3,raw_mov_l_bRr,(R4 d, R4 s, IMM offset)) { if (optimize_imm8 && isbyte(offset)) { emit_byte(0x89); emit_byte(0x40+8*s+d); emit_byte(offset); } else { emit_byte(0x89); emit_byte(0x80+8*s+d); emit_long(offset); } } LENDFUNC(NONE,WRITE,3,raw_mov_l_bRr,(R4 d, R4 s, IMM offset)) LOWFUNC(NONE,WRITE,3,raw_mov_w_bRr,(R4 d, R2 s, IMM offset)) { emit_byte(0x66); emit_byte(0x89); emit_byte(0x80+8*s+d); emit_long(offset); } LENDFUNC(NONE,WRITE,3,raw_mov_w_bRr,(R4 d, R2 s, IMM offset)) LOWFUNC(NONE,WRITE,3,raw_mov_b_bRr,(R4 d, R1 s, IMM offset)) { if (optimize_imm8 && isbyte(offset)) { emit_byte(0x88); emit_byte(0x40+8*s+d); emit_byte(offset); } else { emit_byte(0x88); emit_byte(0x80+8*s+d); emit_long(offset); } } LENDFUNC(NONE,WRITE,3,raw_mov_b_bRr,(R4 d, R1 s, IMM offset)) LOWFUNC(NONE,NONE,1,raw_bswap_32,(RW4 r)) { emit_byte(0x0f); emit_byte(0xc8+r); } LENDFUNC(NONE,NONE,1,raw_bswap_32,(RW4 r)) LOWFUNC(WRITE,NONE,1,raw_bswap_16,(RW2 r)) { emit_byte(0x66); emit_byte(0xc1); emit_byte(0xc0+r); emit_byte(0x08); } LENDFUNC(WRITE,NONE,1,raw_bswap_16,(RW2 r)) LOWFUNC(NONE,NONE,2,raw_mov_l_rr,(W4 d, R4 s)) { emit_byte(0x89); emit_byte(0xc0+8*s+d); } LENDFUNC(NONE,NONE,2,raw_mov_l_rr,(W4 d, R4 s)) LOWFUNC(NONE,WRITE,2,raw_mov_l_mr,(IMM d, R4 s)) { emit_byte(0x89); emit_byte(0x05+8*s); emit_long(d); } LENDFUNC(NONE,WRITE,2,raw_mov_l_mr,(IMM d, R4 s)) LOWFUNC(NONE,WRITE,2,raw_mov_w_mr,(IMM d, R2 s)) { emit_byte(0x66); emit_byte(0x89); emit_byte(0x05+8*s); emit_long(d); } LENDFUNC(NONE,WRITE,2,raw_mov_w_mr,(IMM d, R2 s)) LOWFUNC(NONE,READ,2,raw_mov_w_rm,(W2 d, IMM s)) { emit_byte(0x66); emit_byte(0x8b); emit_byte(0x05+8*d); emit_long(s); } LENDFUNC(NONE,READ,2,raw_mov_w_rm,(W2 d, IMM s)) LOWFUNC(NONE,WRITE,2,raw_mov_b_mr,(IMM d, R1 s)) { emit_byte(0x88); emit_byte(0x05+8*(s&0xf)); /* XXX this handles %ah case (defined as 0x10+4) and others */ emit_long(d); } LENDFUNC(NONE,WRITE,2,raw_mov_b_mr,(IMM d, R1 s)) LOWFUNC(NONE,READ,2,raw_mov_b_rm,(W1 d, IMM s)) { emit_byte(0x8a); emit_byte(0x05+8*d); emit_long(s); } LENDFUNC(NONE,READ,2,raw_mov_b_rm,(W1 d, IMM s)) LOWFUNC(NONE,NONE,2,raw_mov_l_ri,(W4 d, IMM s)) { emit_byte(0xb8+d); emit_long(s); } LENDFUNC(NONE,NONE,2,raw_mov_l_ri,(W4 d, IMM s)) LOWFUNC(NONE,NONE,2,raw_mov_w_ri,(W2 d, IMM s)) { emit_byte(0x66); emit_byte(0xb8+d); emit_word(s); } LENDFUNC(NONE,NONE,2,raw_mov_w_ri,(W2 d, IMM s)) LOWFUNC(NONE,NONE,2,raw_mov_b_ri,(W1 d, IMM s)) { emit_byte(0xb0+d); emit_byte(s); } LENDFUNC(NONE,NONE,2,raw_mov_b_ri,(W1 d, IMM s)) LOWFUNC(RMW,RMW,2,raw_adc_l_mi,(MEMRW d, IMM s)) { emit_byte(0x81); emit_byte(0x15); emit_long(d); emit_long(s); } LENDFUNC(RMW,RMW,2,raw_adc_l_mi,(MEMRW d, IMM s)) LOWFUNC(WRITE,RMW,2,raw_add_l_mi,(IMM d, IMM s)) { if (optimize_imm8 && isbyte(s)) { emit_byte(0x83); emit_byte(0x05); emit_long(d); emit_byte(s); } else { emit_byte(0x81); emit_byte(0x05); emit_long(d); emit_long(s); } } LENDFUNC(WRITE,RMW,2,raw_add_l_mi,(IMM d, IMM s)) LOWFUNC(WRITE,RMW,2,raw_add_w_mi,(IMM d, IMM s)) { emit_byte(0x66); emit_byte(0x81); emit_byte(0x05); emit_long(d); emit_word(s); } LENDFUNC(WRITE,RMW,2,raw_add_w_mi,(IMM d, IMM s)) LOWFUNC(WRITE,RMW,2,raw_add_b_mi,(IMM d, IMM s)) { emit_byte(0x80); emit_byte(0x05); emit_long(d); emit_byte(s); } LENDFUNC(WRITE,RMW,2,raw_add_b_mi,(IMM d, IMM s)) LOWFUNC(WRITE,NONE,2,raw_test_l_ri,(R4 d, IMM i)) { if (optimize_accum && isaccum(d)) emit_byte(0xa9); else { emit_byte(0xf7); emit_byte(0xc0+d); } emit_long(i); } LENDFUNC(WRITE,NONE,2,raw_test_l_ri,(R4 d, IMM i)) LOWFUNC(WRITE,NONE,2,raw_test_l_rr,(R4 d, R4 s)) { emit_byte(0x85); emit_byte(0xc0+8*s+d); } LENDFUNC(WRITE,NONE,2,raw_test_l_rr,(R4 d, R4 s)) LOWFUNC(WRITE,NONE,2,raw_test_w_rr,(R2 d, R2 s)) { emit_byte(0x66); emit_byte(0x85); emit_byte(0xc0+8*s+d); } LENDFUNC(WRITE,NONE,2,raw_test_w_rr,(R2 d, R2 s)) LOWFUNC(WRITE,NONE,2,raw_test_b_rr,(R1 d, R1 s)) { emit_byte(0x84); emit_byte(0xc0+8*s+d); } LENDFUNC(WRITE,NONE,2,raw_test_b_rr,(R1 d, R1 s)) LOWFUNC(WRITE,NONE,2,raw_xor_l_ri,(RW4 d, IMM i)) { emit_byte(0x81); emit_byte(0xf0+d); emit_long(i); } LENDFUNC(WRITE,NONE,2,raw_xor_l_ri,(RW4 d, IMM i)) LOWFUNC(WRITE,NONE,2,raw_and_l_ri,(RW4 d, IMM i)) { if (optimize_imm8 && isbyte(i)) { emit_byte(0x83); emit_byte(0xe0+d); emit_byte(i); } else { if (optimize_accum && isaccum(d)) emit_byte(0x25); else { emit_byte(0x81); emit_byte(0xe0+d); } emit_long(i); } } LENDFUNC(WRITE,NONE,2,raw_and_l_ri,(RW4 d, IMM i)) LOWFUNC(WRITE,NONE,2,raw_and_w_ri,(RW2 d, IMM i)) { emit_byte(0x66); if (optimize_imm8 && isbyte(i)) { emit_byte(0x83); emit_byte(0xe0+d); emit_byte(i); } else { if (optimize_accum && isaccum(d)) emit_byte(0x25); else { emit_byte(0x81); emit_byte(0xe0+d); } emit_word(i); } } LENDFUNC(WRITE,NONE,2,raw_and_w_ri,(RW2 d, IMM i)) LOWFUNC(WRITE,NONE,2,raw_and_l,(RW4 d, R4 s)) { emit_byte(0x21); emit_byte(0xc0+8*s+d); } LENDFUNC(WRITE,NONE,2,raw_and_l,(RW4 d, R4 s)) LOWFUNC(WRITE,NONE,2,raw_and_w,(RW2 d, R2 s)) { emit_byte(0x66); emit_byte(0x21); emit_byte(0xc0+8*s+d); } LENDFUNC(WRITE,NONE,2,raw_and_w,(RW2 d, R2 s)) LOWFUNC(WRITE,NONE,2,raw_and_b,(RW1 d, R1 s)) { emit_byte(0x20); emit_byte(0xc0+8*s+d); } LENDFUNC(WRITE,NONE,2,raw_and_b,(RW1 d, R1 s)) LOWFUNC(WRITE,NONE,2,raw_or_l_ri,(RW4 d, IMM i)) { if (optimize_imm8 && isbyte(i)) { emit_byte(0x83); emit_byte(0xc8+d); emit_byte(i); } else { if (optimize_accum && isaccum(d)) emit_byte(0x0d); else { emit_byte(0x81); emit_byte(0xc8+d); } emit_long(i); } } LENDFUNC(WRITE,NONE,2,raw_or_l_ri,(RW4 d, IMM i)) LOWFUNC(WRITE,NONE,2,raw_or_l,(RW4 d, R4 s)) { emit_byte(0x09); emit_byte(0xc0+8*s+d); } LENDFUNC(WRITE,NONE,2,raw_or_l,(RW4 d, R4 s)) LOWFUNC(WRITE,NONE,2,raw_or_w,(RW2 d, R2 s)) { emit_byte(0x66); emit_byte(0x09); emit_byte(0xc0+8*s+d); } LENDFUNC(WRITE,NONE,2,raw_or_w,(RW2 d, R2 s)) LOWFUNC(WRITE,NONE,2,raw_or_b,(RW1 d, R1 s)) { emit_byte(0x08); emit_byte(0xc0+8*s+d); } LENDFUNC(WRITE,NONE,2,raw_or_b,(RW1 d, R1 s)) LOWFUNC(RMW,NONE,2,raw_adc_l,(RW4 d, R4 s)) { emit_byte(0x11); emit_byte(0xc0+8*s+d); } LENDFUNC(RMW,NONE,2,raw_adc_l,(RW4 d, R4 s)) LOWFUNC(RMW,NONE,2,raw_adc_w,(RW2 d, R2 s)) { emit_byte(0x66); emit_byte(0x11); emit_byte(0xc0+8*s+d); } LENDFUNC(RMW,NONE,2,raw_adc_w,(RW2 d, R2 s)) LOWFUNC(RMW,NONE,2,raw_adc_b,(RW1 d, R1 s)) { emit_byte(0x10); emit_byte(0xc0+8*s+d); } LENDFUNC(RMW,NONE,2,raw_adc_b,(RW1 d, R1 s)) LOWFUNC(WRITE,NONE,2,raw_add_l,(RW4 d, R4 s)) { emit_byte(0x01); emit_byte(0xc0+8*s+d); } LENDFUNC(WRITE,NONE,2,raw_add_l,(RW4 d, R4 s)) LOWFUNC(WRITE,NONE,2,raw_add_w,(RW2 d, R2 s)) { emit_byte(0x66); emit_byte(0x01); emit_byte(0xc0+8*s+d); } LENDFUNC(WRITE,NONE,2,raw_add_w,(RW2 d, R2 s)) LOWFUNC(WRITE,NONE,2,raw_add_b,(RW1 d, R1 s)) { emit_byte(0x00); emit_byte(0xc0+8*s+d); } LENDFUNC(WRITE,NONE,2,raw_add_b,(RW1 d, R1 s)) LOWFUNC(WRITE,NONE,2,raw_sub_l_ri,(RW4 d, IMM i)) { if (isbyte(i)) { emit_byte(0x83); emit_byte(0xe8+d); emit_byte(i); } else { if (optimize_accum && isaccum(d)) emit_byte(0x2d); else { emit_byte(0x81); emit_byte(0xe8+d); } emit_long(i); } } LENDFUNC(WRITE,NONE,2,raw_sub_l_ri,(RW4 d, IMM i)) LOWFUNC(WRITE,NONE,2,raw_sub_b_ri,(RW1 d, IMM i)) { if (optimize_accum && isaccum(d)) emit_byte(0x2c); else { emit_byte(0x80); emit_byte(0xe8+d); } emit_byte(i); } LENDFUNC(WRITE,NONE,2,raw_sub_b_ri,(RW1 d, IMM i)) LOWFUNC(WRITE,NONE,2,raw_add_l_ri,(RW4 d, IMM i)) { if (isbyte(i)) { emit_byte(0x83); emit_byte(0xc0+d); emit_byte(i); } else { if (optimize_accum && isaccum(d)) emit_byte(0x05); else { emit_byte(0x81); emit_byte(0xc0+d); } emit_long(i); } } LENDFUNC(WRITE,NONE,2,raw_add_l_ri,(RW4 d, IMM i)) LOWFUNC(WRITE,NONE,2,raw_add_w_ri,(RW2 d, IMM i)) { emit_byte(0x66); if (isbyte(i)) { emit_byte(0x83); emit_byte(0xc0+d); emit_byte(i); } else { if (optimize_accum && isaccum(d)) emit_byte(0x05); else { emit_byte(0x81); emit_byte(0xc0+d); } emit_word(i); } } LENDFUNC(WRITE,NONE,2,raw_add_w_ri,(RW2 d, IMM i)) LOWFUNC(WRITE,NONE,2,raw_add_b_ri,(RW1 d, IMM i)) { if (optimize_accum && isaccum(d)) emit_byte(0x04); else { emit_byte(0x80); emit_byte(0xc0+d); } emit_byte(i); } LENDFUNC(WRITE,NONE,2,raw_add_b_ri,(RW1 d, IMM i)) LOWFUNC(RMW,NONE,2,raw_sbb_l,(RW4 d, R4 s)) { emit_byte(0x19); emit_byte(0xc0+8*s+d); } LENDFUNC(RMW,NONE,2,raw_sbb_l,(RW4 d, R4 s)) LOWFUNC(RMW,NONE,2,raw_sbb_w,(RW2 d, R2 s)) { emit_byte(0x66); emit_byte(0x19); emit_byte(0xc0+8*s+d); } LENDFUNC(RMW,NONE,2,raw_sbb_w,(RW2 d, R2 s)) LOWFUNC(RMW,NONE,2,raw_sbb_b,(RW1 d, R1 s)) { emit_byte(0x18); emit_byte(0xc0+8*s+d); } LENDFUNC(RMW,NONE,2,raw_sbb_b,(RW1 d, R1 s)) LOWFUNC(WRITE,NONE,2,raw_sub_l,(RW4 d, R4 s)) { emit_byte(0x29); emit_byte(0xc0+8*s+d); } LENDFUNC(WRITE,NONE,2,raw_sub_l,(RW4 d, R4 s)) LOWFUNC(WRITE,NONE,2,raw_sub_w,(RW2 d, R2 s)) { emit_byte(0x66); emit_byte(0x29); emit_byte(0xc0+8*s+d); } LENDFUNC(WRITE,NONE,2,raw_sub_w,(RW2 d, R2 s)) LOWFUNC(WRITE,NONE,2,raw_sub_b,(RW1 d, R1 s)) { emit_byte(0x28); emit_byte(0xc0+8*s+d); } LENDFUNC(WRITE,NONE,2,raw_sub_b,(RW1 d, R1 s)) LOWFUNC(WRITE,NONE,2,raw_cmp_l,(R4 d, R4 s)) { emit_byte(0x39); emit_byte(0xc0+8*s+d); } LENDFUNC(WRITE,NONE,2,raw_cmp_l,(R4 d, R4 s)) LOWFUNC(WRITE,NONE,2,raw_cmp_l_ri,(R4 r, IMM i)) { if (optimize_imm8 && isbyte(i)) { emit_byte(0x83); emit_byte(0xf8+r); emit_byte(i); } else { if (optimize_accum && isaccum(r)) emit_byte(0x3d); else { emit_byte(0x81); emit_byte(0xf8+r); } emit_long(i); } } LENDFUNC(WRITE,NONE,2,raw_cmp_l_ri,(R4 r, IMM i)) LOWFUNC(WRITE,NONE,2,raw_cmp_w,(R2 d, R2 s)) { emit_byte(0x66); emit_byte(0x39); emit_byte(0xc0+8*s+d); } LENDFUNC(WRITE,NONE,2,raw_cmp_w,(R2 d, R2 s)) LOWFUNC(WRITE,READ,2,raw_cmp_b_mi,(MEMR d, IMM s)) { emit_byte(0x80); emit_byte(0x3d); emit_long(d); emit_byte(s); } LENDFUNC(WRITE,READ,2,raw_cmp_l_mi,(MEMR d, IMM s)) LOWFUNC(WRITE,NONE,2,raw_cmp_b_ri,(R1 d, IMM i)) { if (optimize_accum && isaccum(d)) emit_byte(0x3c); else { emit_byte(0x80); emit_byte(0xf8+d); } emit_byte(i); } LENDFUNC(WRITE,NONE,2,raw_cmp_b_ri,(R1 d, IMM i)) LOWFUNC(WRITE,NONE,2,raw_cmp_b,(R1 d, R1 s)) { emit_byte(0x38); emit_byte(0xc0+8*s+d); } LENDFUNC(WRITE,NONE,2,raw_cmp_b,(R1 d, R1 s)) LOWFUNC(WRITE,READ,4,raw_cmp_l_rm_indexed,(R4 d, IMM offset, R4 index, IMM factor)) { int fi; switch(factor) { case 1: fi=0; break; case 2: fi=1; break; case 4: fi=2; break; case 8: fi=3; break; default: abort(); } emit_byte(0x39); emit_byte(0x04+8*d); emit_byte(5+8*index+0x40*fi); emit_long(offset); } LENDFUNC(WRITE,READ,4,raw_cmp_l_rm_indexed,(R4 d, IMM offset, R4 index, IMM factor)) LOWFUNC(WRITE,NONE,2,raw_xor_l,(RW4 d, R4 s)) { emit_byte(0x31); emit_byte(0xc0+8*s+d); } LENDFUNC(WRITE,NONE,2,raw_xor_l,(RW4 d, R4 s)) LOWFUNC(WRITE,NONE,2,raw_xor_w,(RW2 d, R2 s)) { emit_byte(0x66); emit_byte(0x31); emit_byte(0xc0+8*s+d); } LENDFUNC(WRITE,NONE,2,raw_xor_w,(RW2 d, R2 s)) LOWFUNC(WRITE,NONE,2,raw_xor_b,(RW1 d, R1 s)) { emit_byte(0x30); emit_byte(0xc0+8*s+d); } LENDFUNC(WRITE,NONE,2,raw_xor_b,(RW1 d, R1 s)) LOWFUNC(WRITE,RMW,2,raw_sub_l_mi,(MEMRW d, IMM s)) { if (optimize_imm8 && isbyte(s)) { emit_byte(0x83); emit_byte(0x2d); emit_long(d); emit_byte(s); } else { emit_byte(0x81); emit_byte(0x2d); emit_long(d); emit_long(s); } } LENDFUNC(WRITE,RMW,2,raw_sub_l_mi,(MEMRW d, IMM s)) LOWFUNC(WRITE,READ,2,raw_cmp_l_mi,(MEMR d, IMM s)) { if (optimize_imm8 && isbyte(s)) { emit_byte(0x83); emit_byte(0x3d); emit_long(d); emit_byte(s); } else { emit_byte(0x81); emit_byte(0x3d); emit_long(d); emit_long(s); } } LENDFUNC(WRITE,READ,2,raw_cmp_l_mi,(MEMR d, IMM s)) LOWFUNC(NONE,NONE,2,raw_xchg_l_rr,(RW4 r1, RW4 r2)) { emit_byte(0x87); emit_byte(0xc0+8*r1+r2); } LENDFUNC(NONE,NONE,2,raw_xchg_l_rr,(RW4 r1, RW4 r2)) LOWFUNC(NONE,NONE,2,raw_xchg_b_rr,(RW4 r1, RW4 r2)) { emit_byte(0x86); emit_byte(0xc0+8*(r1&0xf)+(r2&0xf)); /* XXX this handles upper-halves registers (e.g. %ah defined as 0x10+4) */ } LENDFUNC(NONE,NONE,2,raw_xchg_l_rr,(RW4 r1, RW4 r2)) /************************************************************************* * FIXME: mem access modes probably wrong * *************************************************************************/ LOWFUNC(READ,WRITE,0,raw_pushfl,(void)) { emit_byte(0x9c); } LENDFUNC(READ,WRITE,0,raw_pushfl,(void)) LOWFUNC(WRITE,READ,0,raw_popfl,(void)) { emit_byte(0x9d); } LENDFUNC(WRITE,READ,0,raw_popfl,(void)) /* Generate floating-point instructions */ static inline void x86_fadd_m(MEMR s) { emit_byte(0xdc); emit_byte(0x05); emit_long(s); } #endif /************************************************************************* * Unoptimizable stuff --- jump * *************************************************************************/ static __inline__ void raw_call_r(R4 r) { #if USE_NEW_RTASM CALLsr(r); #else emit_byte(0xff); emit_byte(0xd0+r); #endif } static __inline__ void raw_call_m_indexed(uae_u32 base, uae_u32 r, uae_u32 m) { #if USE_NEW_RTASM CALLsm(base, X86_NOREG, r, m); #else int mu; switch(m) { case 1: mu=0; break; case 2: mu=1; break; case 4: mu=2; break; case 8: mu=3; break; default: abort(); } emit_byte(0xff); emit_byte(0x14); emit_byte(0x05+8*r+0x40*mu); emit_long(base); #endif } static __inline__ void raw_jmp_r(R4 r) { #if USE_NEW_RTASM JMPsr(r); #else emit_byte(0xff); emit_byte(0xe0+r); #endif } static __inline__ void raw_jmp_m_indexed(uae_u32 base, uae_u32 r, uae_u32 m) { #if USE_NEW_RTASM JMPsm(base, X86_NOREG, r, m); #else int mu; switch(m) { case 1: mu=0; break; case 2: mu=1; break; case 4: mu=2; break; case 8: mu=3; break; default: abort(); } emit_byte(0xff); emit_byte(0x24); emit_byte(0x05+8*r+0x40*mu); emit_long(base); #endif } static __inline__ void raw_jmp_m(uae_u32 base) { emit_byte(0xff); emit_byte(0x25); emit_long(base); } static __inline__ void raw_call(uae_u32 t) { #if USE_NEW_RTASM CALLm(t); #else emit_byte(0xe8); emit_long(t-(uae_u32)target-4); #endif } static __inline__ void raw_jmp(uae_u32 t) { #if USE_NEW_RTASM JMPm(t); #else emit_byte(0xe9); emit_long(t-(uae_u32)target-4); #endif } static __inline__ void raw_jl(uae_u32 t) { emit_byte(0x0f); emit_byte(0x8c); emit_long(t-(uintptr)target-4); } static __inline__ void raw_jz(uae_u32 t) { emit_byte(0x0f); emit_byte(0x84); emit_long(t-(uintptr)target-4); } static __inline__ void raw_jnz(uae_u32 t) { emit_byte(0x0f); emit_byte(0x85); emit_long(t-(uintptr)target-4); } static __inline__ void raw_jnz_l_oponly(void) { emit_byte(0x0f); emit_byte(0x85); } static __inline__ void raw_jcc_l_oponly(int cc) { emit_byte(0x0f); emit_byte(0x80+cc); } static __inline__ void raw_jnz_b_oponly(void) { emit_byte(0x75); } static __inline__ void raw_jz_b_oponly(void) { emit_byte(0x74); } static __inline__ void raw_jcc_b_oponly(int cc) { emit_byte(0x70+cc); } static __inline__ void raw_jmp_l_oponly(void) { emit_byte(0xe9); } static __inline__ void raw_jmp_b_oponly(void) { emit_byte(0xeb); } static __inline__ void raw_ret(void) { emit_byte(0xc3); } static __inline__ void raw_nop(void) { emit_byte(0x90); } static __inline__ void raw_emit_nop_filler(int nbytes) { /* Source: GNU Binutils 2.12.90.0.15 */ /* Various efficient no-op patterns for aligning code labels. Note: Don't try to assemble the instructions in the comments. 0L and 0w are not legal. */ static const uae_u8 f32_1[] = {0x90}; /* nop */ static const uae_u8 f32_2[] = {0x89,0xf6}; /* movl %esi,%esi */ static const uae_u8 f32_3[] = {0x8d,0x76,0x00}; /* leal 0(%esi),%esi */ static const uae_u8 f32_4[] = {0x8d,0x74,0x26,0x00}; /* leal 0(%esi,1),%esi */ static const uae_u8 f32_5[] = {0x90, /* nop */ 0x8d,0x74,0x26,0x00}; /* leal 0(%esi,1),%esi */ static const uae_u8 f32_6[] = {0x8d,0xb6,0x00,0x00,0x00,0x00}; /* leal 0L(%esi),%esi */ static const uae_u8 f32_7[] = {0x8d,0xb4,0x26,0x00,0x00,0x00,0x00}; /* leal 0L(%esi,1),%esi */ static const uae_u8 f32_8[] = {0x90, /* nop */ 0x8d,0xb4,0x26,0x00,0x00,0x00,0x00}; /* leal 0L(%esi,1),%esi */ static const uae_u8 f32_9[] = {0x89,0xf6, /* movl %esi,%esi */ 0x8d,0xbc,0x27,0x00,0x00,0x00,0x00}; /* leal 0L(%edi,1),%edi */ static const uae_u8 f32_10[] = {0x8d,0x76,0x00, /* leal 0(%esi),%esi */ 0x8d,0xbc,0x27,0x00,0x00,0x00,0x00}; /* leal 0L(%edi,1),%edi */ static const uae_u8 f32_11[] = {0x8d,0x74,0x26,0x00, /* leal 0(%esi,1),%esi */ 0x8d,0xbc,0x27,0x00,0x00,0x00,0x00}; /* leal 0L(%edi,1),%edi */ static const uae_u8 f32_12[] = {0x8d,0xb6,0x00,0x00,0x00,0x00, /* leal 0L(%esi),%esi */ 0x8d,0xbf,0x00,0x00,0x00,0x00}; /* leal 0L(%edi),%edi */ static const uae_u8 f32_13[] = {0x8d,0xb6,0x00,0x00,0x00,0x00, /* leal 0L(%esi),%esi */ 0x8d,0xbc,0x27,0x00,0x00,0x00,0x00}; /* leal 0L(%edi,1),%edi */ static const uae_u8 f32_14[] = {0x8d,0xb4,0x26,0x00,0x00,0x00,0x00, /* leal 0L(%esi,1),%esi */ 0x8d,0xbc,0x27,0x00,0x00,0x00,0x00}; /* leal 0L(%edi,1),%edi */ static const uae_u8 f32_15[] = {0xeb,0x0d,0x90,0x90,0x90,0x90,0x90, /* jmp .+15; lotsa nops */ 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90}; static const uae_u8 f32_16[] = {0xeb,0x0d,0x90,0x90,0x90,0x90,0x90, /* jmp .+15; lotsa nops */ 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90}; static const uae_u8 *const f32_patt[] = { f32_1, f32_2, f32_3, f32_4, f32_5, f32_6, f32_7, f32_8, f32_9, f32_10, f32_11, f32_12, f32_13, f32_14, f32_15 }; static const uae_u8 prefixes[4] = { 0x66, 0x66, 0x66, 0x66 }; #if defined(__x86_64__) /* The recommended way to pad 64bit code is to use NOPs preceded by maximally four 0x66 prefixes. Balance the size of nops. */ if (nbytes == 0) return; int i; int nnops = (nbytes + 3) / 4; int len = nbytes / nnops; int remains = nbytes - nnops * len; for (i = 0; i < remains; i++) { emit_block(prefixes, len); raw_nop(); } for (; i < nnops; i++) { emit_block(prefixes, len - 1); raw_nop(); } #else int nloops = nbytes / 16; while (nloops-- > 0) emit_block(f32_16, sizeof(f32_16)); nbytes %= 16; if (nbytes) emit_block(f32_patt[nbytes - 1], nbytes); #endif } /************************************************************************* * Flag handling, to and fro UAE flag register * *************************************************************************/ static __inline__ void raw_flags_evicted(int r) { //live.state[FLAGTMP].status=CLEAN; live.state[FLAGTMP].status=INMEM; live.state[FLAGTMP].realreg=-1; /* We just "evicted" FLAGTMP. */ if (live.nat[r].nholds!=1) { /* Huh? */ abort(); } live.nat[r].nholds=0; } #define FLAG_NREG1_FLAGREG 0 /* Set to -1 if any register will do */ static __inline__ void raw_flags_to_reg_FLAGREG(int r) { raw_lahf(0); /* Most flags in AH */ //raw_setcc(r,0); /* V flag in AL */ raw_setcc_m((uintptr)live.state[FLAGTMP].mem,0); #if 1 /* Let's avoid those nasty partial register stalls */ //raw_mov_b_mr((uintptr)live.state[FLAGTMP].mem,r); raw_mov_b_mr(((uintptr)live.state[FLAGTMP].mem)+1,AH_INDEX); raw_flags_evicted(r); #endif } #define FLAG_NREG2_FLAGREG 0 /* Set to -1 if any register will do */ static __inline__ void raw_reg_to_flags_FLAGREG(int r) { raw_cmp_b_ri(r,-127); /* set V */ raw_sahf(0); } #define FLAG_NREG3_FLAGREG 0 /* Set to -1 if any register will do */ static __inline__ void raw_flags_set_zero_FLAGREG(int s, int tmp) { raw_mov_l_rr(tmp,s); raw_lahf(s); /* flags into ah */ raw_and_l_ri(s,0xffffbfff); raw_and_l_ri(tmp,0x00004000); raw_xor_l_ri(tmp,0x00004000); raw_or_l(s,tmp); raw_sahf(s); } static __inline__ void raw_flags_init_FLAGREG(void) { } #define FLAG_NREG1_FLAGSTK -1 /* Set to -1 if any register will do */ static __inline__ void raw_flags_to_reg_FLAGSTK(int r) { raw_pushfl(); raw_pop_l_r(r); raw_mov_l_mr((uintptr)live.state[FLAGTMP].mem,r); raw_flags_evicted(r); } #define FLAG_NREG2_FLAGSTK -1 /* Set to -1 if any register will do */ static __inline__ void raw_reg_to_flags_FLAGSTK(int r) { raw_push_l_r(r); raw_popfl(); } #define FLAG_NREG3_FLAGSTK -1 /* Set to -1 if any register will do */ static __inline__ void raw_flags_set_zero_FLAGSTK(int s, int tmp) { raw_mov_l_rr(tmp,s); raw_pushfl(); raw_pop_l_r(s); raw_and_l_ri(s,0xffffffbf); raw_and_l_ri(tmp,0x00000040); raw_xor_l_ri(tmp,0x00000040); raw_or_l(s,tmp); raw_push_l_r(s); raw_popfl(); } static __inline__ void raw_flags_init_FLAGSTK(void) { } #if defined(__x86_64__) /* Try to use the LAHF/SETO method on x86_64 since it is faster. This can't be the default because some older CPUs don't support LAHF/SAHF in long mode. */ static int FLAG_NREG1_FLAGGEN = 0; static __inline__ void raw_flags_to_reg_FLAGGEN(int r) { if (have_lahf_lm) { // NOTE: the interpreter uses the normal EFLAGS layout // pushf/popf CF(0) ZF( 6) SF( 7) OF(11) // sahf/lahf CF(8) ZF(14) SF(15) OF( 0) assert(r == 0); raw_setcc(r,0); /* V flag in AL */ raw_lea_l_r_scaled(0,0,8); /* move it to its EFLAGS location */ raw_mov_b_mr(((uintptr)live.state[FLAGTMP].mem)+1,0); raw_lahf(0); /* most flags in AH */ raw_mov_b_mr((uintptr)live.state[FLAGTMP].mem,AH_INDEX); raw_flags_evicted(r); } else raw_flags_to_reg_FLAGSTK(r); } static int FLAG_NREG2_FLAGGEN = 0; static __inline__ void raw_reg_to_flags_FLAGGEN(int r) { if (have_lahf_lm) { raw_xchg_b_rr(0,AH_INDEX); raw_cmp_b_ri(r,-120); /* set V */ raw_sahf(0); } else raw_reg_to_flags_FLAGSTK(r); } static int FLAG_NREG3_FLAGGEN = 0; static __inline__ void raw_flags_set_zero_FLAGGEN(int s, int tmp) { if (have_lahf_lm) raw_flags_set_zero_FLAGREG(s, tmp); else raw_flags_set_zero_FLAGSTK(s, tmp); } static __inline__ void raw_flags_init_FLAGGEN(void) { if (have_lahf_lm) { FLAG_NREG1_FLAGGEN = FLAG_NREG1_FLAGREG; FLAG_NREG2_FLAGGEN = FLAG_NREG2_FLAGREG; FLAG_NREG1_FLAGGEN = FLAG_NREG3_FLAGREG; } else { FLAG_NREG1_FLAGGEN = FLAG_NREG1_FLAGSTK; FLAG_NREG2_FLAGGEN = FLAG_NREG2_FLAGSTK; FLAG_NREG1_FLAGGEN = FLAG_NREG3_FLAGSTK; } } #endif #ifdef SAHF_SETO_PROFITABLE #define FLAG_SUFFIX FLAGREG #elif defined __x86_64__ #define FLAG_SUFFIX FLAGGEN #else #define FLAG_SUFFIX FLAGSTK #endif #define FLAG_GLUE_2(x, y) x ## _ ## y #define FLAG_GLUE_1(x, y) FLAG_GLUE_2(x, y) #define FLAG_GLUE(x) FLAG_GLUE_1(x, FLAG_SUFFIX) #define raw_flags_init FLAG_GLUE(raw_flags_init) #define FLAG_NREG1 FLAG_GLUE(FLAG_NREG1) #define raw_flags_to_reg FLAG_GLUE(raw_flags_to_reg) #define FLAG_NREG2 FLAG_GLUE(FLAG_NREG2) #define raw_reg_to_flags FLAG_GLUE(raw_reg_to_flags) #define FLAG_NREG3 FLAG_GLUE(FLAG_NREG3) #define raw_flags_set_zero FLAG_GLUE(raw_flags_set_zero) /* Apparently, there are enough instructions between flag store and flag reload to avoid the partial memory stall */ static __inline__ void raw_load_flagreg(uae_u32 target, uae_u32 r) { #if 1 raw_mov_l_rm(target,(uintptr)live.state[r].mem); #else raw_mov_b_rm(target,(uintptr)live.state[r].mem); raw_mov_b_rm(target+4,((uintptr)live.state[r].mem)+1); #endif } /* FLAGX is byte sized, and we *do* write it at that size */ static __inline__ void raw_load_flagx(uae_u32 target, uae_u32 r) { if (live.nat[target].canbyte) raw_mov_b_rm(target,(uintptr)live.state[r].mem); else if (live.nat[target].canword) raw_mov_w_rm(target,(uintptr)live.state[r].mem); else raw_mov_l_rm(target,(uintptr)live.state[r].mem); } static __inline__ void raw_dec_sp(int off) { if (off) raw_sub_l_ri(ESP_INDEX,off); } static __inline__ void raw_inc_sp(int off) { if (off) raw_add_l_ri(ESP_INDEX,off); } /************************************************************************* * Handling mistaken direct memory access * *************************************************************************/ // gb-- I don't need that part for JIT Basilisk II #if defined(NATMEM_OFFSET) && 0 #include #include #define SIG_READ 1 #define SIG_WRITE 2 static int in_handler=0; static uae_u8 veccode[256]; static void vec(int x, struct sigcontext sc) { uae_u8* i=(uae_u8*)sc.eip; uae_u32 addr=sc.cr2; int r=-1; int size=4; int dir=-1; int len=0; int j; write_log("fault address is %08x at %08x\n",sc.cr2,sc.eip); if (!canbang) write_log("Not happy! Canbang is 0 in SIGSEGV handler!\n"); if (in_handler) write_log("Argh --- Am already in a handler. Shouldn't happen!\n"); if (canbang && i>=compiled_code && i<=current_compile_p) { if (*i==0x66) { i++; size=2; len++; } switch(i[0]) { case 0x8a: if ((i[1]&0xc0)==0x80) { r=(i[1]>>3)&7; dir=SIG_READ; size=1; len+=6; break; } break; case 0x88: if ((i[1]&0xc0)==0x80) { r=(i[1]>>3)&7; dir=SIG_WRITE; size=1; len+=6; break; } break; case 0x8b: if ((i[1]&0xc0)==0x80) { r=(i[1]>>3)&7; dir=SIG_READ; len+=6; break; } if ((i[1]&0xc0)==0x40) { r=(i[1]>>3)&7; dir=SIG_READ; len+=3; break; } break; case 0x89: if ((i[1]&0xc0)==0x80) { r=(i[1]>>3)&7; dir=SIG_WRITE; len+=6; break; } if ((i[1]&0xc0)==0x40) { r=(i[1]>>3)&7; dir=SIG_WRITE; len+=3; break; } break; } } if (r!=-1) { void* pr=NULL; write_log("register was %d, direction was %d, size was %d\n",r,dir,size); switch(r) { case 0: pr=&(sc.eax); break; case 1: pr=&(sc.ecx); break; case 2: pr=&(sc.edx); break; case 3: pr=&(sc.ebx); break; case 4: pr=(size>1)?NULL:(((uae_u8*)&(sc.eax))+1); break; case 5: pr=(size>1)? (void*)(&(sc.ebp)): (void*)(((uae_u8*)&(sc.ecx))+1); break; case 6: pr=(size>1)? (void*)(&(sc.esi)): (void*)(((uae_u8*)&(sc.edx))+1); break; case 7: pr=(size>1)? (void*)(&(sc.edi)): (void*)(((uae_u8*)&(sc.ebx))+1); break; default: abort(); } if (pr) { blockinfo* bi; if (currprefs.comp_oldsegv) { addr-=NATMEM_OFFSET; if ((addr>=0x10000000 && addr<0x40000000) || (addr>=0x50000000)) { write_log("Suspicious address in %x SEGV handler.\n",addr); } if (dir==SIG_READ) { switch(size) { case 1: *((uae_u8*)pr)=get_byte(addr); break; case 2: *((uae_u16*)pr)=get_word(addr); break; case 4: *((uae_u32*)pr)=get_long(addr); break; default: abort(); } } else { /* write */ switch(size) { case 1: put_byte(addr,*((uae_u8*)pr)); break; case 2: put_word(addr,*((uae_u16*)pr)); break; case 4: put_long(addr,*((uae_u32*)pr)); break; default: abort(); } } write_log("Handled one access!\n"); fflush(stdout); segvcount++; sc.eip+=len; } else { void* tmp=target; int i; uae_u8 vecbuf[5]; addr-=NATMEM_OFFSET; if ((addr>=0x10000000 && addr<0x40000000) || (addr>=0x50000000)) { write_log("Suspicious address in %x SEGV handler.\n",addr); } target=(uae_u8*)sc.eip; for (i=0;i<5;i++) vecbuf[i]=target[i]; emit_byte(0xe9); emit_long((uintptr)veccode-(uintptr)target-4); write_log("Create jump to %p\n",veccode); write_log("Handled one access!\n"); fflush(stdout); segvcount++; target=veccode; if (dir==SIG_READ) { switch(size) { case 1: raw_mov_b_ri(r,get_byte(addr)); break; case 2: raw_mov_w_ri(r,get_byte(addr)); break; case 4: raw_mov_l_ri(r,get_byte(addr)); break; default: abort(); } } else { /* write */ switch(size) { case 1: put_byte(addr,*((uae_u8*)pr)); break; case 2: put_word(addr,*((uae_u16*)pr)); break; case 4: put_long(addr,*((uae_u32*)pr)); break; default: abort(); } } for (i=0;i<5;i++) raw_mov_b_mi(sc.eip+i,vecbuf[i]); raw_mov_l_mi((uintptr)&in_handler,0); emit_byte(0xe9); emit_long(sc.eip+len-(uintptr)target-4); in_handler=1; target=tmp; } bi=active; while (bi) { if (bi->handler && (uae_u8*)bi->direct_handler<=i && (uae_u8*)bi->nexthandler>i) { write_log("deleted trigger (%p<%p<%p) %p\n", bi->handler, i, bi->nexthandler, bi->pc_p); invalidate_block(bi); raise_in_cl_list(bi); set_special(0); return; } bi=bi->next; } /* Not found in the active list. Might be a rom routine that is in the dormant list */ bi=dormant; while (bi) { if (bi->handler && (uae_u8*)bi->direct_handler<=i && (uae_u8*)bi->nexthandler>i) { write_log("deleted trigger (%p<%p<%p) %p\n", bi->handler, i, bi->nexthandler, bi->pc_p); invalidate_block(bi); raise_in_cl_list(bi); set_special(0); return; } bi=bi->next; } write_log("Huh? Could not find trigger!\n"); return; } } write_log("Can't handle access!\n"); for (j=0;j<10;j++) { write_log("instruction byte %2d is %02x\n",j,i[j]); } write_log("Please send the above info (starting at \"fault address\") to\n" "bmeyer@csse.monash.edu.au\n" "This shouldn't happen ;-)\n"); fflush(stdout); signal(SIGSEGV,SIG_DFL); /* returning here will cause a "real" SEGV */ } #endif /************************************************************************* * Checking for CPU features * *************************************************************************/ struct cpuinfo_x86 { uae_u8 x86; // CPU family uae_u8 x86_vendor; // CPU vendor uae_u8 x86_processor; // CPU canonical processor type uae_u8 x86_brand_id; // CPU BrandID if supported, yield 0 otherwise uae_u32 x86_hwcap; uae_u8 x86_model; uae_u8 x86_mask; int cpuid_level; // Maximum supported CPUID level, -1=no CPUID char x86_vendor_id[16]; }; struct cpuinfo_x86 cpuinfo; enum { X86_VENDOR_INTEL = 0, X86_VENDOR_CYRIX = 1, X86_VENDOR_AMD = 2, X86_VENDOR_UMC = 3, X86_VENDOR_NEXGEN = 4, X86_VENDOR_CENTAUR = 5, X86_VENDOR_RISE = 6, X86_VENDOR_TRANSMETA = 7, X86_VENDOR_NSC = 8, X86_VENDOR_UNKNOWN = 0xff }; enum { X86_PROCESSOR_I386, /* 80386 */ X86_PROCESSOR_I486, /* 80486DX, 80486SX, 80486DX[24] */ X86_PROCESSOR_PENTIUM, X86_PROCESSOR_PENTIUMPRO, X86_PROCESSOR_K6, X86_PROCESSOR_ATHLON, X86_PROCESSOR_PENTIUM4, X86_PROCESSOR_X86_64, X86_PROCESSOR_max }; static const char * x86_processor_string_table[X86_PROCESSOR_max] = { "80386", "80486", "Pentium", "PentiumPro", "K6", "Athlon", "Pentium4", "x86-64" }; static struct ptt { const int align_loop; const int align_loop_max_skip; const int align_jump; const int align_jump_max_skip; const int align_func; } x86_alignments[X86_PROCESSOR_max] = { { 4, 3, 4, 3, 4 }, { 16, 15, 16, 15, 16 }, { 16, 7, 16, 7, 16 }, { 16, 15, 16, 7, 16 }, { 32, 7, 32, 7, 32 }, { 16, 7, 16, 7, 16 }, { 0, 0, 0, 0, 0 }, { 16, 7, 16, 7, 16 } }; static void x86_get_cpu_vendor(struct cpuinfo_x86 *c) { char *v = c->x86_vendor_id; if (!strcmp(v, "GenuineIntel")) c->x86_vendor = X86_VENDOR_INTEL; else if (!strcmp(v, "AuthenticAMD")) c->x86_vendor = X86_VENDOR_AMD; else if (!strcmp(v, "CyrixInstead")) c->x86_vendor = X86_VENDOR_CYRIX; else if (!strcmp(v, "Geode by NSC")) c->x86_vendor = X86_VENDOR_NSC; else if (!strcmp(v, "UMC UMC UMC ")) c->x86_vendor = X86_VENDOR_UMC; else if (!strcmp(v, "CentaurHauls")) c->x86_vendor = X86_VENDOR_CENTAUR; else if (!strcmp(v, "NexGenDriven")) c->x86_vendor = X86_VENDOR_NEXGEN; else if (!strcmp(v, "RiseRiseRise")) c->x86_vendor = X86_VENDOR_RISE; else if (!strcmp(v, "GenuineTMx86") || !strcmp(v, "TransmetaCPU")) c->x86_vendor = X86_VENDOR_TRANSMETA; else c->x86_vendor = X86_VENDOR_UNKNOWN; } static void cpuid(uae_u32 op, uae_u32 *eax, uae_u32 *ebx, uae_u32 *ecx, uae_u32 *edx) { const int CPUID_SPACE = 4096; uae_u8* cpuid_space = (uae_u8 *)vm_acquire(CPUID_SPACE); if (cpuid_space == VM_MAP_FAILED) abort(); vm_protect(cpuid_space, CPUID_SPACE, VM_PAGE_READ | VM_PAGE_WRITE | VM_PAGE_EXECUTE); static uae_u32 s_op, s_eax, s_ebx, s_ecx, s_edx; uae_u8* tmp=get_target(); s_op = op; set_target(cpuid_space); raw_push_l_r(0); /* eax */ raw_push_l_r(1); /* ecx */ raw_push_l_r(2); /* edx */ raw_push_l_r(3); /* ebx */ raw_mov_l_rm(0,(uintptr)&s_op); raw_cpuid(0); raw_mov_l_mr((uintptr)&s_eax,0); raw_mov_l_mr((uintptr)&s_ebx,3); raw_mov_l_mr((uintptr)&s_ecx,1); raw_mov_l_mr((uintptr)&s_edx,2); raw_pop_l_r(3); raw_pop_l_r(2); raw_pop_l_r(1); raw_pop_l_r(0); raw_ret(); set_target(tmp); ((cpuop_func*)cpuid_space)(0); if (eax != NULL) *eax = s_eax; if (ebx != NULL) *ebx = s_ebx; if (ecx != NULL) *ecx = s_ecx; if (edx != NULL) *edx = s_edx; vm_release(cpuid_space, CPUID_SPACE); } static void raw_init_cpu(void) { struct cpuinfo_x86 *c = &cpuinfo; /* Defaults */ c->x86_processor = X86_PROCESSOR_max; c->x86_vendor = X86_VENDOR_UNKNOWN; c->cpuid_level = -1; /* CPUID not detected */ c->x86_model = c->x86_mask = 0; /* So far unknown... */ c->x86_vendor_id[0] = '\0'; /* Unset */ c->x86_hwcap = 0; /* Get vendor name */ c->x86_vendor_id[12] = '\0'; cpuid(0x00000000, (uae_u32 *)&c->cpuid_level, (uae_u32 *)&c->x86_vendor_id[0], (uae_u32 *)&c->x86_vendor_id[8], (uae_u32 *)&c->x86_vendor_id[4]); x86_get_cpu_vendor(c); /* Intel-defined flags: level 0x00000001 */ c->x86_brand_id = 0; if ( c->cpuid_level >= 0x00000001 ) { uae_u32 tfms, brand_id; cpuid(0x00000001, &tfms, &brand_id, NULL, &c->x86_hwcap); c->x86 = (tfms >> 8) & 15; if (c->x86 == 0xf) c->x86 += (tfms >> 20) & 0xff; /* extended family */ c->x86_model = (tfms >> 4) & 15; if (c->x86_model == 0xf) c->x86_model |= (tfms >> 12) & 0xf0; /* extended model */ c->x86_brand_id = brand_id & 0xff; c->x86_mask = tfms & 15; } else { /* Have CPUID level 0 only - unheard of */ c->x86 = 4; } /* AMD-defined flags: level 0x80000001 */ uae_u32 xlvl; cpuid(0x80000000, &xlvl, NULL, NULL, NULL); if ( (xlvl & 0xffff0000) == 0x80000000 ) { if ( xlvl >= 0x80000001 ) { uae_u32 features, extra_features; cpuid(0x80000001, NULL, NULL, &extra_features, &features); if (features & (1 << 29)) { /* Assume x86-64 if long mode is supported */ c->x86_processor = X86_PROCESSOR_X86_64; } if (extra_features & (1 << 0)) have_lahf_lm = true; } } /* Canonicalize processor ID */ switch (c->x86) { case 3: c->x86_processor = X86_PROCESSOR_I386; break; case 4: c->x86_processor = X86_PROCESSOR_I486; break; case 5: if (c->x86_vendor == X86_VENDOR_AMD) c->x86_processor = X86_PROCESSOR_K6; else c->x86_processor = X86_PROCESSOR_PENTIUM; break; case 6: if (c->x86_vendor == X86_VENDOR_AMD) c->x86_processor = X86_PROCESSOR_ATHLON; else c->x86_processor = X86_PROCESSOR_PENTIUMPRO; break; case 15: if (c->x86_processor == X86_PROCESSOR_max) { switch (c->x86_vendor) { case X86_VENDOR_INTEL: c->x86_processor = X86_PROCESSOR_PENTIUM4; break; case X86_VENDOR_AMD: /* Assume a 32-bit Athlon processor if not in long mode */ c->x86_processor = X86_PROCESSOR_ATHLON; break; } } break; } if (c->x86_processor == X86_PROCESSOR_max) { c->x86_processor = X86_PROCESSOR_I386; fprintf(stderr, "Error: unknown processor type, assuming i386\n"); fprintf(stderr, " Family : %d\n", c->x86); fprintf(stderr, " Model : %d\n", c->x86_model); fprintf(stderr, " Mask : %d\n", c->x86_mask); fprintf(stderr, " Vendor : %s [%d]\n", c->x86_vendor_id, c->x86_vendor); if (c->x86_brand_id) fprintf(stderr, " BrandID : %02x\n", c->x86_brand_id); } /* Have CMOV support? */ have_cmov = c->x86_hwcap & (1 << 15); #if defined(__x86_64__) if (!have_cmov) { write_log("x86-64 implementations are bound to have CMOV!\n"); abort(); } #endif /* Can the host CPU suffer from partial register stalls? */ have_rat_stall = (c->x86_vendor == X86_VENDOR_INTEL); #if 1 /* It appears that partial register writes are a bad idea even on AMD K7 cores, even though they are not supposed to have the dreaded rat stall. Why? Anyway, that's why we lie about it ;-) */ if (c->x86_processor == X86_PROCESSOR_ATHLON) have_rat_stall = true; #endif /* Alignments */ if (tune_alignment) { align_loops = x86_alignments[c->x86_processor].align_loop; align_jumps = x86_alignments[c->x86_processor].align_jump; } write_log("Max CPUID level=%d Processor is %s [%s]\n", c->cpuid_level, c->x86_vendor_id, x86_processor_string_table[c->x86_processor]); raw_flags_init(); } static bool target_check_bsf(void) { bool mismatch = false; for (int g_ZF = 0; g_ZF <= 1; g_ZF++) { for (int g_CF = 0; g_CF <= 1; g_CF++) { for (int g_OF = 0; g_OF <= 1; g_OF++) { for (int g_SF = 0; g_SF <= 1; g_SF++) { for (int value = -1; value <= 1; value++) { unsigned long flags = (g_SF << 7) | (g_OF << 11) | (g_ZF << 6) | g_CF; unsigned long tmp = value; __asm__ __volatile__ ("push %0; popf; bsf %1,%1; pushf; pop %0" : "+r" (flags), "+r" (tmp) : : "cc"); int OF = (flags >> 11) & 1; int SF = (flags >> 7) & 1; int ZF = (flags >> 6) & 1; int CF = flags & 1; tmp = (value == 0); if (ZF != tmp || SF != g_SF || OF != g_OF || CF != g_CF) mismatch = true; } }}}} if (mismatch) write_log("Target CPU defines all flags on BSF instruction\n"); return !mismatch; } /************************************************************************* * FPU stuff * *************************************************************************/ static __inline__ void raw_fp_init(void) { int i; for (i=0;i1) { emit_byte(0x9b); emit_byte(0xdb); emit_byte(0xe3); live.tos=-1; } #endif while (live.tos>=1) { emit_byte(0xde); emit_byte(0xd9); live.tos-=2; } while (live.tos>=0) { emit_byte(0xdd); emit_byte(0xd8); live.tos--; } raw_fp_init(); } static __inline__ void make_tos(int r) { int p,q; if (live.spos[r]<0) { /* Register not yet on stack */ emit_byte(0xd9); emit_byte(0xe8); /* Push '1' on the stack, just to grow it */ live.tos++; live.spos[r]=live.tos; live.onstack[live.tos]=r; return; } /* Register is on stack */ if (live.tos==live.spos[r]) return; p=live.spos[r]; q=live.onstack[live.tos]; emit_byte(0xd9); emit_byte(0xc8+live.tos-live.spos[r]); /* exchange it with top of stack */ live.onstack[live.tos]=r; live.spos[r]=live.tos; live.onstack[p]=q; live.spos[q]=p; } static __inline__ void make_tos2(int r, int r2) { int q; make_tos(r2); /* Put the reg that's supposed to end up in position2 on top */ if (live.spos[r]<0) { /* Register not yet on stack */ make_tos(r); /* This will extend the stack */ return; } /* Register is on stack */ emit_byte(0xd9); emit_byte(0xc9); /* Move r2 into position 2 */ q=live.onstack[live.tos-1]; live.onstack[live.tos]=q; live.spos[q]=live.tos; live.onstack[live.tos-1]=r2; live.spos[r2]=live.tos-1; make_tos(r); /* And r into 1 */ } static __inline__ int stackpos(int r) { if (live.spos[r]<0) abort(); if (live.tos=0) { /* source is on top of stack, and we already have the dest */ int dd=stackpos(d); emit_byte(0xdd); emit_byte(0xd0+dd); } else { emit_byte(0xd9); emit_byte(0xc0+ds); /* duplicate source on tos */ tos_make(d); /* store to destination, pop if necessary */ } } LENDFUNC(NONE,NONE,2,raw_fmov_rr,(FW d, FR s)) LOWFUNC(NONE,READ,4,raw_fldcw_m_indexed,(R4 index, IMM base)) { emit_byte(0xd9); emit_byte(0xa8+index); emit_long(base); } LENDFUNC(NONE,READ,4,raw_fldcw_m_indexed,(R4 index, IMM base)) LOWFUNC(NONE,NONE,2,raw_fsqrt_rr,(FW d, FR s)) { int ds; if (d!=s) { usereg(s); ds=stackpos(s); emit_byte(0xd9); emit_byte(0xc0+ds); /* duplicate source */ emit_byte(0xd9); emit_byte(0xfa); /* take square root */ tos_make(d); /* store to destination */ } else { make_tos(d); emit_byte(0xd9); emit_byte(0xfa); /* take square root */ } } LENDFUNC(NONE,NONE,2,raw_fsqrt_rr,(FW d, FR s)) LOWFUNC(NONE,NONE,2,raw_fabs_rr,(FW d, FR s)) { int ds; if (d!=s) { usereg(s); ds=stackpos(s); emit_byte(0xd9); emit_byte(0xc0+ds); /* duplicate source */ emit_byte(0xd9); emit_byte(0xe1); /* take fabs */ tos_make(d); /* store to destination */ } else { make_tos(d); emit_byte(0xd9); emit_byte(0xe1); /* take fabs */ } } LENDFUNC(NONE,NONE,2,raw_fabs_rr,(FW d, FR s)) LOWFUNC(NONE,NONE,2,raw_frndint_rr,(FW d, FR s)) { int ds; if (d!=s) { usereg(s); ds=stackpos(s); emit_byte(0xd9); emit_byte(0xc0+ds); /* duplicate source */ emit_byte(0xd9); emit_byte(0xfc); /* take frndint */ tos_make(d); /* store to destination */ } else { make_tos(d); emit_byte(0xd9); emit_byte(0xfc); /* take frndint */ } } LENDFUNC(NONE,NONE,2,raw_frndint_rr,(FW d, FR s)) LOWFUNC(NONE,NONE,2,raw_fcos_rr,(FW d, FR s)) { int ds; if (d!=s) { usereg(s); ds=stackpos(s); emit_byte(0xd9); emit_byte(0xc0+ds); /* duplicate source */ emit_byte(0xd9); emit_byte(0xff); /* take cos */ tos_make(d); /* store to destination */ } else { make_tos(d); emit_byte(0xd9); emit_byte(0xff); /* take cos */ } } LENDFUNC(NONE,NONE,2,raw_fcos_rr,(FW d, FR s)) LOWFUNC(NONE,NONE,2,raw_fsin_rr,(FW d, FR s)) { int ds; if (d!=s) { usereg(s); ds=stackpos(s); emit_byte(0xd9); emit_byte(0xc0+ds); /* duplicate source */ emit_byte(0xd9); emit_byte(0xfe); /* take sin */ tos_make(d); /* store to destination */ } else { make_tos(d); emit_byte(0xd9); emit_byte(0xfe); /* take sin */ } } LENDFUNC(NONE,NONE,2,raw_fsin_rr,(FW d, FR s)) static const double one=1; LOWFUNC(NONE,NONE,2,raw_ftwotox_rr,(FW d, FR s)) { int ds; usereg(s); ds=stackpos(s); emit_byte(0xd9); emit_byte(0xc0+ds); /* duplicate source */ emit_byte(0xd9); emit_byte(0xc0); /* duplicate top of stack. Now up to 8 high */ emit_byte(0xd9); emit_byte(0xfc); /* rndint */ emit_byte(0xd9); emit_byte(0xc9); /* swap top two elements */ emit_byte(0xd8); emit_byte(0xe1); /* subtract rounded from original */ emit_byte(0xd9); emit_byte(0xf0); /* f2xm1 */ x86_fadd_m((uintptr)&one); /* Add '1' without using extra stack space */ emit_byte(0xd9); emit_byte(0xfd); /* and scale it */ emit_byte(0xdd); emit_byte(0xd9); /* take he rounded value off */ tos_make(d); /* store to destination */ } LENDFUNC(NONE,NONE,2,raw_ftwotox_rr,(FW d, FR s)) LOWFUNC(NONE,NONE,2,raw_fetox_rr,(FW d, FR s)) { int ds; usereg(s); ds=stackpos(s); emit_byte(0xd9); emit_byte(0xc0+ds); /* duplicate source */ emit_byte(0xd9); emit_byte(0xea); /* fldl2e */ emit_byte(0xde); emit_byte(0xc9); /* fmulp --- multiply source by log2(e) */ emit_byte(0xd9); emit_byte(0xc0); /* duplicate top of stack. Now up to 8 high */ emit_byte(0xd9); emit_byte(0xfc); /* rndint */ emit_byte(0xd9); emit_byte(0xc9); /* swap top two elements */ emit_byte(0xd8); emit_byte(0xe1); /* subtract rounded from original */ emit_byte(0xd9); emit_byte(0xf0); /* f2xm1 */ x86_fadd_m((uintptr)&one); /* Add '1' without using extra stack space */ emit_byte(0xd9); emit_byte(0xfd); /* and scale it */ emit_byte(0xdd); emit_byte(0xd9); /* take he rounded value off */ tos_make(d); /* store to destination */ } LENDFUNC(NONE,NONE,2,raw_fetox_rr,(FW d, FR s)) LOWFUNC(NONE,NONE,2,raw_flog2_rr,(FW d, FR s)) { int ds; usereg(s); ds=stackpos(s); emit_byte(0xd9); emit_byte(0xc0+ds); /* duplicate source */ emit_byte(0xd9); emit_byte(0xe8); /* push '1' */ emit_byte(0xd9); emit_byte(0xc9); /* swap top two */ emit_byte(0xd9); emit_byte(0xf1); /* take 1*log2(x) */ tos_make(d); /* store to destination */ } LENDFUNC(NONE,NONE,2,raw_flog2_rr,(FW d, FR s)) LOWFUNC(NONE,NONE,2,raw_fneg_rr,(FW d, FR s)) { int ds; if (d!=s) { usereg(s); ds=stackpos(s); emit_byte(0xd9); emit_byte(0xc0+ds); /* duplicate source */ emit_byte(0xd9); emit_byte(0xe0); /* take fchs */ tos_make(d); /* store to destination */ } else { make_tos(d); emit_byte(0xd9); emit_byte(0xe0); /* take fchs */ } } LENDFUNC(NONE,NONE,2,raw_fneg_rr,(FW d, FR s)) LOWFUNC(NONE,NONE,2,raw_fadd_rr,(FRW d, FR s)) { int ds; usereg(s); usereg(d); if (live.spos[s]==live.tos) { /* Source is on top of stack */ ds=stackpos(d); emit_byte(0xdc); emit_byte(0xc0+ds); /* add source to dest*/ } else { make_tos(d); ds=stackpos(s); emit_byte(0xd8); emit_byte(0xc0+ds); /* add source to dest*/ } } LENDFUNC(NONE,NONE,2,raw_fadd_rr,(FRW d, FR s)) LOWFUNC(NONE,NONE,2,raw_fsub_rr,(FRW d, FR s)) { int ds; usereg(s); usereg(d); if (live.spos[s]==live.tos) { /* Source is on top of stack */ ds=stackpos(d); emit_byte(0xdc); emit_byte(0xe8+ds); /* sub source from dest*/ } else { make_tos(d); ds=stackpos(s); emit_byte(0xd8); emit_byte(0xe0+ds); /* sub src from dest */ } } LENDFUNC(NONE,NONE,2,raw_fsub_rr,(FRW d, FR s)) LOWFUNC(NONE,NONE,2,raw_fcmp_rr,(FR d, FR s)) { int ds; usereg(s); usereg(d); make_tos(d); ds=stackpos(s); emit_byte(0xdd); emit_byte(0xe0+ds); /* cmp dest with source*/ } LENDFUNC(NONE,NONE,2,raw_fcmp_rr,(FR d, FR s)) LOWFUNC(NONE,NONE,2,raw_fmul_rr,(FRW d, FR s)) { int ds; usereg(s); usereg(d); if (live.spos[s]==live.tos) { /* Source is on top of stack */ ds=stackpos(d); emit_byte(0xdc); emit_byte(0xc8+ds); /* mul dest by source*/ } else { make_tos(d); ds=stackpos(s); emit_byte(0xd8); emit_byte(0xc8+ds); /* mul dest by source*/ } } LENDFUNC(NONE,NONE,2,raw_fmul_rr,(FRW d, FR s)) LOWFUNC(NONE,NONE,2,raw_fdiv_rr,(FRW d, FR s)) { int ds; usereg(s); usereg(d); if (live.spos[s]==live.tos) { /* Source is on top of stack */ ds=stackpos(d); emit_byte(0xdc); emit_byte(0xf8+ds); /* div dest by source */ } else { make_tos(d); ds=stackpos(s); emit_byte(0xd8); emit_byte(0xf0+ds); /* div dest by source*/ } } LENDFUNC(NONE,NONE,2,raw_fdiv_rr,(FRW d, FR s)) LOWFUNC(NONE,NONE,2,raw_frem_rr,(FRW d, FR s)) { int ds; usereg(s); usereg(d); make_tos2(d,s); ds=stackpos(s); if (ds!=1) { printf("Failed horribly in raw_frem_rr! ds is %d\n",ds); abort(); } emit_byte(0xd9); emit_byte(0xf8); /* take rem from dest by source */ } LENDFUNC(NONE,NONE,2,raw_frem_rr,(FRW d, FR s)) LOWFUNC(NONE,NONE,2,raw_frem1_rr,(FRW d, FR s)) { int ds; usereg(s); usereg(d); make_tos2(d,s); ds=stackpos(s); if (ds!=1) { printf("Failed horribly in raw_frem1_rr! ds is %d\n",ds); abort(); } emit_byte(0xd9); emit_byte(0xf5); /* take rem1 from dest by source */ } LENDFUNC(NONE,NONE,2,raw_frem1_rr,(FRW d, FR s)) LOWFUNC(NONE,NONE,1,raw_ftst_r,(FR r)) { make_tos(r); emit_byte(0xd9); /* ftst */ emit_byte(0xe4); } LENDFUNC(NONE,NONE,1,raw_ftst_r,(FR r)) /* %eax register is clobbered if target processor doesn't support fucomi */ #define FFLAG_NREG_CLOBBER_CONDITION !have_cmov #define FFLAG_NREG EAX_INDEX static __inline__ void raw_fflags_into_flags(int r) { int p; usereg(r); p=stackpos(r); emit_byte(0xd9); emit_byte(0xee); /* Push 0 */ emit_byte(0xd9); emit_byte(0xc9+p); /* swap top two around */ if (have_cmov) { // gb-- fucomi is for P6 cores only, not K6-2 then... emit_byte(0xdb); emit_byte(0xe9+p); /* fucomi them */ } else { emit_byte(0xdd); emit_byte(0xe1+p); /* fucom them */ emit_byte(0x9b); emit_byte(0xdf); emit_byte(0xe0); /* fstsw ax */ raw_sahf(0); /* sahf */ } emit_byte(0xdd); emit_byte(0xd9+p); /* store value back, and get rid of 0 */ } fs-uae-2.2.3+dfsg/src/jit/compemu_raw_x86.cpp0000644000175000017500000027172012162366654021171 0ustar glaubitzglaubitz/* This should eventually end up in machdep/, but for now, x86 is the only target, and it's easier this way... */ #ifdef FSUAE #ifdef WINDOWS #define _WIN32 #endif extern uae_u8 *natmem_offset, *natmem_offset_end; #endif /************************************************************************* * Some basic information about the the target CPU * *************************************************************************/ #define EAX_INDEX 0 #define ECX_INDEX 1 #define EDX_INDEX 2 #define EBX_INDEX 3 #define ESP_INDEX 4 #define EBP_INDEX 5 #define ESI_INDEX 6 #define EDI_INDEX 7 #if defined(__x86_64__) #define R8_INDEX 8 #define R9_INDEX 9 #define R10_INDEX 10 #define R11_INDEX 11 #define R12_INDEX 12 #define R13_INDEX 13 #define R14_INDEX 14 #define R15_INDEX 15 #endif /* XXX this has to match X86_Reg8H_Base + 4 */ #define AH_INDEX (0x10+4+EAX_INDEX) #define CH_INDEX (0x10+4+ECX_INDEX) #define DH_INDEX (0x10+4+EDX_INDEX) #define BH_INDEX (0x10+4+EBX_INDEX) /* The register in which subroutines return an integer return value */ #define REG_RESULT EAX_INDEX /* The registers subroutines take their first and second argument in */ #if defined(_WIN32) /* Handle the _fastcall parameters of ECX and EDX */ #define REG_PAR1 ECX_INDEX #define REG_PAR2 EDX_INDEX #elif defined(__x86_64__) #define REG_PAR1 EDI_INDEX #define REG_PAR2 ESI_INDEX #else #define REG_PAR1 EAX_INDEX #define REG_PAR2 EDX_INDEX #endif #if defined(_WIN32) #define REG_PC_PRE EAX_INDEX /* The register we use for preloading regs.pc_p */ #define REG_PC_TMP ECX_INDEX #define SHIFTCOUNT_NREG ECX_INDEX /* Register that can be used for shiftcount. -1 if any reg will do */ #else #define REG_PC_PRE EAX_INDEX /* The register we use for preloading regs.pc_p */ #define REG_PC_TMP ECX_INDEX /* Another register that is not the above */ #define SHIFTCOUNT_NREG ECX_INDEX /* Register that can be used for shiftcount. -1 if any reg will do */ #endif #define MUL_NREG1 EAX_INDEX /* %eax will hold the low 32 bits after a 32x32 mul */ #define MUL_NREG2 EDX_INDEX /* %edx will hold the high 32 bits */ #define STACK_ALIGN 16 #define STACK_OFFSET sizeof(void *) uae_u8 always_used[]={4,0xff}; #if defined(__x86_64__) uae_s8 can_byte[]={0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,-1}; uae_s8 can_word[]={0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,-1}; #else uae_u8 can_byte[]={0,1,2,3,0xff}; uae_u8 can_word[]={0,1,2,3,5,6,7,0xff}; #endif uae_u8 call_saved[]={0,0,0,0,1,0,0,0}; /* This *should* be the same as call_saved. But: - We might not really know which registers are saved, and which aren't, so we need to preserve some, but don't want to rely on everyone else also saving those registers - Special registers (such like the stack pointer) should not be "preserved" by pushing, even though they are "saved" across function calls */ uae_u8 need_to_preserve[]={1,1,1,1,0,1,1,1}; /* Whether classes of instructions do or don't clobber the native flags */ #define CLOBBER_MOV #define CLOBBER_LEA #define CLOBBER_CMOV #define CLOBBER_POP #define CLOBBER_PUSH #define CLOBBER_SUB clobber_flags() #define CLOBBER_SBB clobber_flags() #define CLOBBER_CMP clobber_flags() #define CLOBBER_ADD clobber_flags() #define CLOBBER_ADC clobber_flags() #define CLOBBER_AND clobber_flags() #define CLOBBER_OR clobber_flags() #define CLOBBER_XOR clobber_flags() #define CLOBBER_ROL clobber_flags() #define CLOBBER_ROR clobber_flags() #define CLOBBER_SHLL clobber_flags() #define CLOBBER_SHRL clobber_flags() #define CLOBBER_SHRA clobber_flags() #define CLOBBER_TEST clobber_flags() #define CLOBBER_CL16 #define CLOBBER_CL8 #define CLOBBER_SE16 #define CLOBBER_SE8 #define CLOBBER_ZE16 #define CLOBBER_ZE8 #define CLOBBER_SW16 clobber_flags() #define CLOBBER_SW32 #define CLOBBER_SETCC #define CLOBBER_MUL clobber_flags() #define CLOBBER_BT clobber_flags() #define CLOBBER_BSF clobber_flags() /************************************************************************* * Actual encoding of the instructions on the target CPU * *************************************************************************/ //#include "compemu_optimizer_x86.c" STATIC_INLINE uae_u16 swap16(uae_u16 x) { return ((x&0xff00)>>8)|((x&0x00ff)<<8); } STATIC_INLINE uae_u32 swap32(uae_u32 x) { return ((x&0xff00)<<8)|((x&0x00ff)<<24)|((x&0xff0000)>>8)|((x&0xff000000)>>24); } STATIC_INLINE int isbyte(uae_s32 x) { return (x>=-128 && x<=127); } LOWFUNC(NONE,WRITE,1,raw_push_l_r,(R4 r)) { emit_byte(0x50+r); } LENDFUNC(NONE,WRITE,1,raw_push_l_r,(R4 r)) LOWFUNC(NONE,READ,1,raw_pop_l_r,(R4 r)) { emit_byte(0x58+r); } LENDFUNC(NONE,READ,1,raw_pop_l_r,(R4 r)) LOWFUNC(WRITE,NONE,2,raw_bt_l_ri,(R4 r, IMM i)) { emit_byte(0x0f); emit_byte(0xba); emit_byte(0xe0+r); emit_byte(i); } LENDFUNC(WRITE,NONE,2,raw_bt_l_ri,(R4 r, IMM i)) LOWFUNC(WRITE,NONE,2,raw_bt_l_rr,(R4 r, R4 b)) { emit_byte(0x0f); emit_byte(0xa3); emit_byte(0xc0+8*b+r); } LENDFUNC(WRITE,NONE,2,raw_bt_l_rr,(R4 r, R4 b)) LOWFUNC(WRITE,NONE,2,raw_btc_l_ri,(RW4 r, IMM i)) { emit_byte(0x0f); emit_byte(0xba); emit_byte(0xf8+r); emit_byte(i); } LENDFUNC(WRITE,NONE,2,raw_btc_l_ri,(RW4 r, IMM i)) LOWFUNC(WRITE,NONE,2,raw_btc_l_rr,(RW4 r, R4 b)) { emit_byte(0x0f); emit_byte(0xbb); emit_byte(0xc0+8*b+r); } LENDFUNC(WRITE,NONE,2,raw_btc_l_rr,(RW4 r, R4 b)) LOWFUNC(WRITE,NONE,2,raw_btr_l_ri,(RW4 r, IMM i)) { emit_byte(0x0f); emit_byte(0xba); emit_byte(0xf0+r); emit_byte(i); } LENDFUNC(WRITE,NONE,2,raw_btr_l_ri,(RW4 r, IMM i)) LOWFUNC(WRITE,NONE,2,raw_btr_l_rr,(RW4 r, R4 b)) { emit_byte(0x0f); emit_byte(0xb3); emit_byte(0xc0+8*b+r); } LENDFUNC(WRITE,NONE,2,raw_btr_l_rr,(RW4 r, R4 b)) LOWFUNC(WRITE,NONE,2,raw_bts_l_ri,(RW4 r, IMM i)) { emit_byte(0x0f); emit_byte(0xba); emit_byte(0xe8+r); emit_byte(i); } LENDFUNC(WRITE,NONE,2,raw_bts_l_ri,(RW4 r, IMM i)) LOWFUNC(WRITE,NONE,2,raw_bts_l_rr,(RW4 r, R4 b)) { emit_byte(0x0f); emit_byte(0xab); emit_byte(0xc0+8*b+r); } LENDFUNC(WRITE,NONE,2,raw_bts_l_rr,(RW4 r, R4 b)) LOWFUNC(WRITE,NONE,2,raw_sub_w_ri,(RW2 d, IMM i)) { emit_byte(0x66); if (isbyte(i)) { emit_byte(0x83); emit_byte(0xe8+d); emit_byte(i); } else { emit_byte(0x81); emit_byte(0xe8+d); emit_word(i); } } LENDFUNC(WRITE,NONE,2,raw_sub_w_ri,(RW2 d, IMM i)) LOWFUNC(NONE,WRITE,2,raw_mov_l_mi,(MEMW d, IMM s)) { emit_byte(0xc7); emit_byte(0x05); emit_long(d); emit_long(s); } LENDFUNC(NONE,WRITE,2,raw_mov_l_mi,(MEMW d, IMM s)) LOWFUNC(NONE,WRITE,2,raw_mov_w_mi,(MEMW d, IMM s)) { emit_byte(0x66); emit_byte(0xc7); emit_byte(0x05); emit_long(d); emit_word(s); } LENDFUNC(NONE,WRITE,2,raw_mov_w_mi,(MEMW d, IMM s)) LOWFUNC(NONE,WRITE,2,raw_mov_b_mi,(MEMW d, IMM s)) { emit_byte(0xc6); emit_byte(0x05); emit_long(d); emit_byte(s); } LENDFUNC(NONE,WRITE,2,raw_mov_b_mi,(MEMW d, IMM s)) LOWFUNC(WRITE,RMW,2,raw_rol_b_mi,(MEMRW d, IMM i)) { emit_byte(0xc0); emit_byte(0x05); emit_long(d); emit_byte(i); } LENDFUNC(WRITE,RMW,2,raw_rol_b_mi,(MEMRW d, IMM i)) LOWFUNC(WRITE,NONE,2,raw_rol_b_ri,(RW1 r, IMM i)) { emit_byte(0xc0); emit_byte(0xc0+r); emit_byte(i); } LENDFUNC(WRITE,NONE,2,raw_rol_b_ri,(RW1 r, IMM i)) LOWFUNC(WRITE,NONE,2,raw_rol_w_ri,(RW2 r, IMM i)) { emit_byte(0x66); emit_byte(0xc1); emit_byte(0xc0+r); emit_byte(i); } LENDFUNC(WRITE,NONE,2,raw_rol_w_ri,(RW2 r, IMM i)) LOWFUNC(WRITE,NONE,2,raw_rol_l_ri,(RW4 r, IMM i)) { emit_byte(0xc1); emit_byte(0xc0+r); emit_byte(i); } LENDFUNC(WRITE,NONE,2,raw_rol_l_ri,(RW4 r, IMM i)) LOWFUNC(WRITE,NONE,2,raw_rol_l_rr,(RW4 d, R1 r)) { emit_byte(0xd3); emit_byte(0xc0+d); } LENDFUNC(WRITE,NONE,2,raw_rol_l_rr,(RW4 d, R1 r)) LOWFUNC(WRITE,NONE,2,raw_rol_w_rr,(RW2 d, R1 r)) { emit_byte(0x66); emit_byte(0xd3); emit_byte(0xc0+d); } LENDFUNC(WRITE,NONE,2,raw_rol_w_rr,(RW2 d, R1 r)) LOWFUNC(WRITE,NONE,2,raw_rol_b_rr,(RW1 d, R1 r)) { emit_byte(0xd2); emit_byte(0xc0+d); } LENDFUNC(WRITE,NONE,2,raw_rol_b_rr,(RW1 d, R1 r)) LOWFUNC(WRITE,NONE,2,raw_shll_l_rr,(RW4 d, R1 r)) { emit_byte(0xd3); emit_byte(0xe0+d); } LENDFUNC(WRITE,NONE,2,raw_shll_l_rr,(RW4 d, R1 r)) LOWFUNC(WRITE,NONE,2,raw_shll_w_rr,(RW2 d, R1 r)) { emit_byte(0x66); emit_byte(0xd3); emit_byte(0xe0+d); } LENDFUNC(WRITE,NONE,2,raw_shll_w_rr,(RW2 d, R1 r)) LOWFUNC(WRITE,NONE,2,raw_shll_b_rr,(RW1 d, R1 r)) { emit_byte(0xd2); emit_byte(0xe0+d); } LENDFUNC(WRITE,NONE,2,raw_shll_b_rr,(RW1 d, R1 r)) LOWFUNC(WRITE,NONE,2,raw_ror_b_ri,(RW1 r, IMM i)) { emit_byte(0xc0); emit_byte(0xc8+r); emit_byte(i); } LENDFUNC(WRITE,NONE,2,raw_ror_b_ri,(RW1 r, IMM i)) LOWFUNC(WRITE,NONE,2,raw_ror_w_ri,(RW2 r, IMM i)) { emit_byte(0x66); emit_byte(0xc1); emit_byte(0xc8+r); emit_byte(i); } LENDFUNC(WRITE,NONE,2,raw_ror_w_ri,(RW2 r, IMM i)) LOWFUNC(WRITE,NONE,2,raw_ror_l_ri,(RW4 r, IMM i)) { emit_byte(0xc1); emit_byte(0xc8+r); emit_byte(i); } LENDFUNC(WRITE,NONE,2,raw_ror_l_ri,(RW4 r, IMM i)) LOWFUNC(WRITE,NONE,2,raw_ror_l_rr,(RW4 d, R1 r)) { emit_byte(0xd3); emit_byte(0xc8+d); } LENDFUNC(WRITE,NONE,2,raw_ror_l_rr,(RW4 d, R1 r)) LOWFUNC(WRITE,NONE,2,raw_ror_w_rr,(RW2 d, R1 r)) { emit_byte(0x66); emit_byte(0xd3); emit_byte(0xc8+d); } LENDFUNC(WRITE,NONE,2,raw_ror_w_rr,(RW2 d, R1 r)) LOWFUNC(WRITE,NONE,2,raw_ror_b_rr,(RW1 d, R1 r)) { emit_byte(0xd2); emit_byte(0xc8+d); } LENDFUNC(WRITE,NONE,2,raw_ror_b_rr,(RW1 d, R1 r)) LOWFUNC(WRITE,NONE,2,raw_shrl_l_rr,(RW4 d, R1 r)) { emit_byte(0xd3); emit_byte(0xe8+d); } LENDFUNC(WRITE,NONE,2,raw_shrl_l_rr,(RW4 d, R1 r)) LOWFUNC(WRITE,NONE,2,raw_shrl_w_rr,(RW2 d, R1 r)) { emit_byte(0x66); emit_byte(0xd3); emit_byte(0xe8+d); } LENDFUNC(WRITE,NONE,2,raw_shrl_w_rr,(RW2 d, R1 r)) LOWFUNC(WRITE,NONE,2,raw_shrl_b_rr,(RW1 d, R1 r)) { emit_byte(0xd2); emit_byte(0xe8+d); } LENDFUNC(WRITE,NONE,2,raw_shrl_b_rr,(RW1 d, R1 r)) LOWFUNC(WRITE,NONE,2,raw_shra_l_rr,(RW4 d, R1 r)) { emit_byte(0xd3); emit_byte(0xf8+d); } LENDFUNC(WRITE,NONE,2,raw_shra_l_rr,(RW4 d, R1 r)) LOWFUNC(WRITE,NONE,2,raw_shra_w_rr,(RW2 d, R1 r)) { emit_byte(0x66); emit_byte(0xd3); emit_byte(0xf8+d); } LENDFUNC(WRITE,NONE,2,raw_shra_w_rr,(RW2 d, R1 r)) LOWFUNC(WRITE,NONE,2,raw_shra_b_rr,(RW1 d, R1 r)) { emit_byte(0xd2); emit_byte(0xf8+d); } LENDFUNC(WRITE,NONE,2,raw_shra_b_rr,(RW1 d, R1 r)) LOWFUNC(WRITE,NONE,2,raw_shll_l_ri,(RW4 r, IMM i)) { emit_byte(0xc1); emit_byte(0xe0+r); emit_byte(i); } LENDFUNC(WRITE,NONE,2,raw_shll_l_ri,(RW4 r, IMM i)) LOWFUNC(WRITE,NONE,2,raw_shll_w_ri,(RW2 r, IMM i)) { emit_byte(0x66); emit_byte(0xc1); emit_byte(0xe0+r); emit_byte(i); } LENDFUNC(WRITE,NONE,2,raw_shll_w_ri,(RW2 r, IMM i)) LOWFUNC(WRITE,NONE,2,raw_shll_b_ri,(RW1 r, IMM i)) { emit_byte(0xc0); emit_byte(0xe0+r); emit_byte(i); } LENDFUNC(WRITE,NONE,2,raw_shll_b_ri,(RW1 r, IMM i)) LOWFUNC(WRITE,NONE,2,raw_shrl_l_ri,(RW4 r, IMM i)) { emit_byte(0xc1); emit_byte(0xe8+r); emit_byte(i); } LENDFUNC(WRITE,NONE,2,raw_shrl_l_ri,(RW4 r, IMM i)) LOWFUNC(WRITE,NONE,2,raw_shrl_w_ri,(RW2 r, IMM i)) { emit_byte(0x66); emit_byte(0xc1); emit_byte(0xe8+r); emit_byte(i); } LENDFUNC(WRITE,NONE,2,raw_shrl_w_ri,(RW2 r, IMM i)) LOWFUNC(WRITE,NONE,2,raw_shrl_b_ri,(RW1 r, IMM i)) { emit_byte(0xc0); emit_byte(0xe8+r); emit_byte(i); } LENDFUNC(WRITE,NONE,2,raw_shrl_b_ri,(RW1 r, IMM i)) LOWFUNC(WRITE,NONE,2,raw_shra_l_ri,(RW4 r, IMM i)) { emit_byte(0xc1); emit_byte(0xf8+r); emit_byte(i); } LENDFUNC(WRITE,NONE,2,raw_shra_l_ri,(RW4 r, IMM i)) LOWFUNC(WRITE,NONE,2,raw_shra_w_ri,(RW2 r, IMM i)) { emit_byte(0x66); emit_byte(0xc1); emit_byte(0xf8+r); emit_byte(i); } LENDFUNC(WRITE,NONE,2,raw_shra_w_ri,(RW2 r, IMM i)) LOWFUNC(WRITE,NONE,2,raw_shra_b_ri,(RW1 r, IMM i)) { emit_byte(0xc0); emit_byte(0xf8+r); emit_byte(i); } LENDFUNC(WRITE,NONE,2,raw_shra_b_ri,(RW1 r, IMM i)) LOWFUNC(WRITE,NONE,1,raw_sahf,(R2 dummy_ah)) { emit_byte(0x9e); } LENDFUNC(WRITE,NONE,1,raw_sahf,(R2 dummy_ah)) LOWFUNC(NONE,NONE,1,raw_cpuid,(R4 dummy_eax)) { emit_byte(0x0f); emit_byte(0xa2); } LENDFUNC(NONE,NONE,1,raw_cpuid,(R4 dummy_eax)) LOWFUNC(READ,NONE,1,raw_lahf,(W2 dummy_ah)) { emit_byte(0x9f); } LENDFUNC(READ,NONE,1,raw_lahf,(W2 dummy_ah)) LOWFUNC(READ,NONE,2,raw_setcc,(W1 d, IMM cc)) { emit_byte(0x0f); emit_byte(0x90+cc); emit_byte(0xc0+d); } LENDFUNC(READ,NONE,2,raw_setcc,(W1 d, IMM cc)) LOWFUNC(READ,WRITE,2,raw_setcc_m,(MEMW d, IMM cc)) { emit_byte(0x0f); emit_byte(0x90+cc); emit_byte(0x05); emit_long(d); } LENDFUNC(READ,WRITE,2,raw_setcc_m,(MEMW d, IMM cc)) LOWFUNC(READ,NONE,3,raw_cmov_b_rr,(RW1 d, R1 s, IMM cc)) { /* replacement using branch and mov */ int uncc=(cc^1); emit_byte(0x70+uncc); emit_byte(3); /* skip next 2 bytes if not cc=true */ emit_byte(0x88); emit_byte(0xc0+8*s+d); } LENDFUNC(READ,NONE,3,raw_cmov_b_rr,(RW1 d, R1 s, IMM cc)) LOWFUNC(READ,NONE,3,raw_cmov_w_rr,(RW2 d, R2 s, IMM cc)) { if (have_cmov) { emit_byte(0x66); emit_byte(0x0f); emit_byte(0x40+cc); emit_byte(0xc0+8*d+s); } else { /* replacement using branch and mov */ int uncc=(cc^1); emit_byte(0x70+uncc); emit_byte(3); /* skip next 3 bytes if not cc=true */ emit_byte(0x66); emit_byte(0x89); emit_byte(0xc0+8*s+d); } } LENDFUNC(READ,NONE,3,raw_cmov_w_rr,(RW2 d, R2 s, IMM cc)) LOWFUNC(READ,NONE,3,raw_cmov_l_rr,(RW4 d, R4 s, IMM cc)) { if (have_cmov) { emit_byte(0x0f); emit_byte(0x40+cc); emit_byte(0xc0+8*d+s); } else { /* replacement using branch and mov */ int uncc=(cc^1); emit_byte(0x70+uncc); emit_byte(2); /* skip next 2 bytes if not cc=true */ emit_byte(0x89); emit_byte(0xc0+8*s+d); } } LENDFUNC(READ,NONE,3,raw_cmov_l_rr,(RW4 d, R4 s, IMM cc)) LOWFUNC(WRITE,NONE,2,raw_bsf_l_rr,(W4 d, R4 s)) { emit_byte(0x0f); emit_byte(0xbc); emit_byte(0xc0+8*d+s); } LENDFUNC(WRITE,NONE,2,raw_bsf_l_rr,(W4 d, R4 s)) LOWFUNC(NONE,NONE,2,raw_sign_extend_16_rr,(W4 d, R2 s)) { emit_byte(0x0f); emit_byte(0xbf); emit_byte(0xc0+8*d+s); } LENDFUNC(NONE,NONE,2,raw_sign_extend_16_rr,(W4 d, R2 s)) LOWFUNC(NONE,NONE,2,raw_sign_extend_8_rr,(W4 d, R1 s)) { emit_byte(0x0f); emit_byte(0xbe); emit_byte(0xc0+8*d+s); } LENDFUNC(NONE,NONE,2,raw_sign_extend_8_rr,(W4 d, R1 s)) LOWFUNC(NONE,NONE,2,raw_zero_extend_16_rr,(W4 d, R2 s)) { emit_byte(0x0f); emit_byte(0xb7); emit_byte(0xc0+8*d+s); } LENDFUNC(NONE,NONE,2,raw_zero_extend_16_rr,(W4 d, R2 s)) LOWFUNC(NONE,NONE,2,raw_zero_extend_8_rr,(W4 d, R1 s)) { emit_byte(0x0f); emit_byte(0xb6); emit_byte(0xc0+8*d+s); } LENDFUNC(NONE,NONE,2,raw_zero_extend_8_rr,(W4 d, R1 s)) LOWFUNC(NONE,NONE,2,raw_imul_32_32,(RW4 d, R4 s)) { emit_byte(0x0f); emit_byte(0xaf); emit_byte(0xc0+8*d+s); } LENDFUNC(NONE,NONE,2,raw_imul_32_32,(RW4 d, R4 s)) LOWFUNC(NONE,NONE,2,raw_imul_64_32,(RW4 d, RW4 s)) { #ifdef JIT_DEBUG if (d!=MUL_NREG1 || s!=MUL_NREG2) { write_log (_T("JIT: Bad register in IMUL: d=%d, s=%d\n"),d,s); abort(); } #endif emit_byte(0xf7); emit_byte(0xea); } LENDFUNC(NONE,NONE,2,raw_imul_64_32,(RW4 d, RW4 s)) LOWFUNC(NONE,NONE,2,raw_mul_64_32,(RW4 d, RW4 s)) { #ifdef JIT_DEBUG if (d!=MUL_NREG1 || s!=MUL_NREG2) { write_log (_T("JIT: Bad register in MUL: d=%d, s=%d\n"),d,s); abort(); } #endif emit_byte(0xf7); emit_byte(0xe2); } LENDFUNC(NONE,NONE,2,raw_mul_64_32,(RW4 d, RW4 s)) LOWFUNC(NONE,NONE,2,raw_mov_b_rr,(W1 d, R1 s)) { emit_byte(0x88); emit_byte(0xc0+8*s+d); } LENDFUNC(NONE,NONE,2,raw_mov_b_rr,(W1 d, R1 s)) LOWFUNC(NONE,NONE,2,raw_mov_w_rr,(W2 d, R2 s)) { emit_byte(0x66); emit_byte(0x89); emit_byte(0xc0+8*s+d); } LENDFUNC(NONE,NONE,2,raw_mov_w_rr,(W2 d, R2 s)) LOWFUNC(NONE,READ,3,raw_mov_l_rrm_indexed,(W4 d, R4 baser, R4 index)) { emit_byte(0x8b); if (baser==5) { emit_byte(0x44+8*d); emit_byte(8*index+baser); emit_byte(0); return; } emit_byte(0x04+8*d); emit_byte(8*index+baser); } LENDFUNC(NONE,READ,3,raw_mov_l_rrm_indexed,(W4 d, R4 baser, R4 index)) LOWFUNC(NONE,READ,3,raw_mov_w_rrm_indexed,(W2 d, R4 baser, R4 index)) { emit_byte(0x66); emit_byte(0x8b); if (baser==5) { emit_byte(0x44+8*d); emit_byte(8*index+baser); emit_byte(0); return; } emit_byte(0x04+8*d); emit_byte(8*index+baser); } LENDFUNC(NONE,READ,3,raw_mov_w_rrm_indexed,(W2 d, R4 baser, R4 index)) LOWFUNC(NONE,READ,3,raw_mov_b_rrm_indexed,(W1 d, R4 baser, R4 index)) { emit_byte(0x8a); if (baser==5) { emit_byte(0x44+8*d); emit_byte(8*index+baser); emit_byte(0); return; } emit_byte(0x04+8*d); emit_byte(8*index+baser); } LENDFUNC(NONE,READ,3,raw_mov_b_rrm_indexed,(W1 d, R4 baser, R4 index)) LOWFUNC(NONE,WRITE,3,raw_mov_l_mrr_indexed,(R4 baser, R4 index, R4 s)) { emit_byte(0x89); if (baser==5) { emit_byte(0x44+8*s); emit_byte(8*index+baser); emit_byte(0); return; } emit_byte(0x04+8*s); emit_byte(8*index+baser); } LENDFUNC(NONE,WRITE,3,raw_mov_l_mrr_indexed,(R4 baser, R4 index, R4 s)) LOWFUNC(NONE,WRITE,3,raw_mov_w_mrr_indexed,(R4 baser, R4 index, R2 s)) { emit_byte(0x66); emit_byte(0x89); if (baser==5) { emit_byte(0x44+8*s); emit_byte(8*index+baser); emit_byte(0); return; } emit_byte(0x04+8*s); emit_byte(8*index+baser); } LENDFUNC(NONE,WRITE,3,raw_mov_w_mrr_indexed,(R4 baser, R4 index, R2 s)) LOWFUNC(NONE,WRITE,3,raw_mov_b_mrr_indexed,(R4 baser, R4 index, R1 s)) { emit_byte(0x88); if (baser==5) { emit_byte(0x44+8*s); emit_byte(8*index+baser); emit_byte(0); return; } emit_byte(0x04+8*s); emit_byte(8*index+baser); } LENDFUNC(NONE,WRITE,3,raw_mov_b_mrr_indexed,(R4 baser, R4 index, R1 s)) LOWFUNC(NONE,READ,3,raw_mov_l_rm_indexed,(W4 d, IMM base, R4 index)) { emit_byte(0x8b); emit_byte(0x04+8*d); emit_byte(0x85+8*index); emit_long(base); } LENDFUNC(NONE,READ,3,raw_mov_l_rm_indexed,(W4 d, IMM base, R4 index)) LOWFUNC(NONE,READ,4,raw_cmov_l_rm_indexed,(W4 d, IMM base, R4 index, IMM cond)) { if (have_cmov) { emit_byte(0x0f); emit_byte(0x40+cond); } else { /* replacement using branch and mov */ int uncc=(cond^1); emit_byte(0x70+uncc); emit_byte(7); /* skip next 7 bytes if not cc=true */ emit_byte(0x8b); } emit_byte(0x04+8*d); emit_byte(0x85+8*index); emit_long(base); } LENDFUNC(NONE,READ,4,raw_cmov_l_rm_indexed,(W4 d, IMM base, R4 index, IMM cond)) LOWFUNC(NONE,READ,3,raw_cmov_l_rm,(W4 d, IMM mem, IMM cond)) { if (have_cmov) { emit_byte(0x0f); emit_byte(0x40+cond); emit_byte(0x05+8*d); emit_long(mem); } else { /* replacement using branch and mov */ int uncc=(cond^1); emit_byte(0x70+uncc); emit_byte(6); /* skip next 6 bytes if not cc=true */ emit_byte(0x8b); emit_byte(0x05+8*d); emit_long(mem); } } LENDFUNC(NONE,READ,3,raw_cmov_l_rm,(W4 d, IMM mem, IMM cond)) LOWFUNC(NONE,READ,3,raw_mov_l_rR,(W4 d, R4 s, IMM offset)) { emit_byte(0x8b); emit_byte(0x40+8*d+s); emit_byte(offset); } LENDFUNC(NONE,READ,3,raw_mov_l_rR,(W4 d, R4 s, IMM offset)) LOWFUNC(NONE,READ,3,raw_mov_w_rR,(W2 d, R4 s, IMM offset)) { emit_byte(0x66); emit_byte(0x8b); emit_byte(0x40+8*d+s); emit_byte(offset); } LENDFUNC(NONE,READ,3,raw_mov_w_rR,(W2 d, R4 s, IMM offset)) LOWFUNC(NONE,READ,3,raw_mov_b_rR,(W1 d, R4 s, IMM offset)) { emit_byte(0x8a); emit_byte(0x40+8*d+s); emit_byte(offset); } LENDFUNC(NONE,READ,3,raw_mov_b_rR,(W1 d, R4 s, IMM offset)) LOWFUNC(NONE,READ,3,raw_mov_l_brR,(W4 d, R4 s, IMM offset)) { emit_byte(0x8b); emit_byte(0x80+8*d+s); emit_long(offset); } LENDFUNC(NONE,READ,3,raw_mov_l_brR,(W4 d, R4 s, IMM offset)) LOWFUNC(NONE,READ,3,raw_mov_w_brR,(W2 d, R4 s, IMM offset)) { emit_byte(0x66); emit_byte(0x8b); emit_byte(0x80+8*d+s); emit_long(offset); } LENDFUNC(NONE,READ,3,raw_mov_w_brR,(W2 d, R4 s, IMM offset)) LOWFUNC(NONE,READ,3,raw_mov_b_brR,(W1 d, R4 s, IMM offset)) { emit_byte(0x8a); emit_byte(0x80+8*d+s); emit_long(offset); } LENDFUNC(NONE,READ,3,raw_mov_b_brR,(W1 d, R4 s, IMM offset)) LOWFUNC(NONE,WRITE,3,raw_mov_l_Ri,(R4 d, IMM i, IMM offset)) { emit_byte(0xc7); emit_byte(0x40+d); emit_byte(offset); emit_long(i); } LENDFUNC(NONE,WRITE,3,raw_mov_l_Ri,(R4 d, IMM i, IMM offset)) LOWFUNC(NONE,WRITE,3,raw_mov_w_Ri,(R4 d, IMM i, IMM offset)) { emit_byte(0x66); emit_byte(0xc7); emit_byte(0x40+d); emit_byte(offset); emit_word(i); } LENDFUNC(NONE,WRITE,3,raw_mov_w_Ri,(R4 d, IMM i, IMM offset)) LOWFUNC(NONE,WRITE,3,raw_mov_b_Ri,(R4 d, IMM i, IMM offset)) { emit_byte(0xc6); emit_byte(0x40+d); emit_byte(offset); emit_byte(i); } LENDFUNC(NONE,WRITE,3,raw_mov_b_Ri,(R4 d, IMM i, IMM offset)) LOWFUNC(NONE,WRITE,3,raw_mov_l_Rr,(R4 d, R4 s, IMM offset)) { emit_byte(0x89); emit_byte(0x40+8*s+d); emit_byte(offset); } LENDFUNC(NONE,WRITE,3,raw_mov_l_Rr,(R4 d, R4 s, IMM offset)) LOWFUNC(NONE,WRITE,3,raw_mov_w_Rr,(R4 d, R2 s, IMM offset)) { emit_byte(0x66); emit_byte(0x89); emit_byte(0x40+8*s+d); emit_byte(offset); } LENDFUNC(NONE,WRITE,3,raw_mov_w_Rr,(R4 d, R2 s, IMM offset)) LOWFUNC(NONE,WRITE,3,raw_mov_b_Rr,(R4 d, R1 s, IMM offset)) { emit_byte(0x88); emit_byte(0x40+8*s+d); emit_byte(offset); } LENDFUNC(NONE,WRITE,3,raw_mov_b_Rr,(R4 d, R1 s, IMM offset)) LOWFUNC(NONE,NONE,3,raw_lea_l_brr,(W4 d, R4 s, IMM offset)) { emit_byte(0x8d); emit_byte(0x80+8*d+s); emit_long(offset); } LENDFUNC(NONE,NONE,3,raw_lea_l_brr,(W4 d, R4 s, IMM offset)) LOWFUNC(NONE,NONE,5,raw_lea_l_brr_indexed,(W4 d, R4 s, R4 index, IMM factor, IMM offset)) { emit_byte(0x8d); if (!offset) { if (s!=5) { emit_byte(0x04+8*d); emit_byte(0x40*factor+8*index+s); return; } emit_byte(0x44+8*d); emit_byte(0x40*factor+8*index+s); emit_byte(0); return; } emit_byte(0x84+8*d); emit_byte(0x40*factor+8*index+s); emit_long(offset); } LENDFUNC(NONE,NONE,5,raw_lea_l_brr_indexed,(W4 d, R4 s, R4 index, IMM factor, IMM offset)) LOWFUNC(NONE,NONE,3,raw_lea_l_rr_indexed,(W4 d, R4 s, R4 index)) { emit_byte(0x8d); if (s==5) { emit_byte(0x44+8*d); emit_byte(8*index+s); emit_byte(0); return; } emit_byte(0x04+8*d); emit_byte(8*index+s); } LENDFUNC(NONE,NONE,3,raw_lea_l_rr_indexed,(W4 d, R4 s, R4 index)) LOWFUNC(NONE,WRITE,3,raw_mov_l_bRr,(R4 d, R4 s, IMM offset)) { emit_byte(0x89); emit_byte(0x80+8*s+d); emit_long(offset); } LENDFUNC(NONE,WRITE,3,raw_mov_l_bRr,(R4 d, R4 s, IMM offset)) LOWFUNC(NONE,WRITE,3,raw_mov_w_bRr,(R4 d, R2 s, IMM offset)) { emit_byte(0x66); emit_byte(0x89); emit_byte(0x80+8*s+d); emit_long(offset); } LENDFUNC(NONE,WRITE,3,raw_mov_w_bRr,(R4 d, R2 s, IMM offset)) LOWFUNC(NONE,WRITE,3,raw_mov_b_bRr,(R4 d, R1 s, IMM offset)) { emit_byte(0x88); emit_byte(0x80+8*s+d); emit_long(offset); } LENDFUNC(NONE,WRITE,3,raw_mov_b_bRr,(R4 d, R1 s, IMM offset)) LOWFUNC(NONE,NONE,1,raw_bswap_32,(RW4 r)) { emit_byte(0x0f); emit_byte(0xc8+r); } LENDFUNC(NONE,NONE,1,raw_bswap_32,(RW4 r)) LOWFUNC(WRITE,NONE,1,raw_bswap_16,(RW2 r)) { emit_byte(0x66); emit_byte(0xc1); emit_byte(0xc0+r); emit_byte(0x08); } LENDFUNC(WRITE,NONE,1,raw_bswap_16,(RW2 r)) LOWFUNC(NONE,NONE,2,raw_mov_l_rr,(W4 d, R4 s)) { emit_byte(0x89); emit_byte(0xc0+8*s+d); } LENDFUNC(NONE,NONE,2,raw_mov_l_rr,(W4 d, R4 s)) LOWFUNC(NONE,WRITE,2,raw_mov_l_mr,(IMM d, R4 s)) { emit_byte(0x89); emit_byte(0x05+8*s); emit_long(d); } LENDFUNC(NONE,WRITE,2,raw_mov_l_mr,(IMM d, R4 s)) LOWFUNC(NONE,READ,2,raw_mov_l_rm,(W4 d, MEMR s)) { emit_byte(0x8b); emit_byte(0x05+8*d); emit_long(s); } LENDFUNC(NONE,READ,2,raw_mov_l_rm,(W4 d, MEMR s)) LOWFUNC(NONE,WRITE,2,raw_mov_w_mr,(IMM d, R2 s)) { emit_byte(0x66); emit_byte(0x89); emit_byte(0x05+8*s); emit_long(d); } LENDFUNC(NONE,WRITE,2,raw_mov_w_mr,(IMM d, R2 s)) LOWFUNC(NONE,READ,2,raw_mov_w_rm,(W2 d, IMM s)) { emit_byte(0x66); emit_byte(0x8b); emit_byte(0x05+8*d); emit_long(s); } LENDFUNC(NONE,READ,2,raw_mov_w_rm,(W2 d, IMM s)) LOWFUNC(NONE,WRITE,2,raw_mov_b_mr,(IMM d, R1 s)) { emit_byte(0x88); emit_byte(0x05+8*s); emit_long(d); } LENDFUNC(NONE,WRITE,2,raw_mov_b_mr,(IMM d, R1 s)) LOWFUNC(NONE,READ,2,raw_mov_b_rm,(W1 d, IMM s)) { emit_byte(0x8a); emit_byte(0x05+8*d); emit_long(s); } LENDFUNC(NONE,READ,2,raw_mov_b_rm,(W1 d, IMM s)) LOWFUNC(NONE,NONE,2,raw_mov_l_ri,(W4 d, IMM s)) { emit_byte(0xb8+d); emit_long(s); } LENDFUNC(NONE,NONE,2,raw_mov_l_ri,(W4 d, IMM s)) LOWFUNC(NONE,NONE,2,raw_mov_w_ri,(W2 d, IMM s)) { emit_byte(0x66); emit_byte(0xb8+d); emit_word(s); } LENDFUNC(NONE,NONE,2,raw_mov_w_ri,(W2 d, IMM s)) LOWFUNC(NONE,NONE,2,raw_mov_b_ri,(W1 d, IMM s)) { emit_byte(0xb0+d); emit_byte(s); } LENDFUNC(NONE,NONE,2,raw_mov_b_ri,(W1 d, IMM s)) LOWFUNC(RMW,RMW,2,raw_adc_l_mi,(MEMRW d, IMM s)) { emit_byte(0x81); emit_byte(0x15); emit_long(d); emit_long(s); } LENDFUNC(RMW,RMW,2,raw_adc_l_mi,(MEMRW d, IMM s)) LOWFUNC(WRITE,RMW,2,raw_add_l_mi,(IMM d, IMM s)) { emit_byte(0x81); emit_byte(0x05); emit_long(d); emit_long(s); } LENDFUNC(WRITE,RMW,2,raw_add_l_mi,(IMM d, IMM s)) LOWFUNC(WRITE,RMW,2,raw_add_w_mi,(IMM d, IMM s)) { emit_byte(0x66); emit_byte(0x81); emit_byte(0x05); emit_long(d); emit_word(s); } LENDFUNC(WRITE,RMW,2,raw_add_w_mi,(IMM d, IMM s)) LOWFUNC(WRITE,RMW,2,raw_add_b_mi,(IMM d, IMM s)) { emit_byte(0x80); emit_byte(0x05); emit_long(d); emit_byte(s); } LENDFUNC(WRITE,RMW,2,raw_add_b_mi,(IMM d, IMM s)) LOWFUNC(WRITE,NONE,2,raw_test_l_ri,(R4 d, IMM i)) { emit_byte(0xf7); emit_byte(0xc0+d); emit_long(i); } LENDFUNC(WRITE,NONE,2,raw_test_l_ri,(R4 d, IMM i)) LOWFUNC(WRITE,NONE,2,raw_test_l_rr,(R4 d, R4 s)) { emit_byte(0x85); emit_byte(0xc0+8*s+d); } LENDFUNC(WRITE,NONE,2,raw_test_l_rr,(R4 d, R4 s)) LOWFUNC(WRITE,NONE,2,raw_test_w_rr,(R2 d, R2 s)) { emit_byte(0x66); emit_byte(0x85); emit_byte(0xc0+8*s+d); } LENDFUNC(WRITE,NONE,2,raw_test_w_rr,(R2 d, R2 s)) LOWFUNC(WRITE,NONE,2,raw_test_b_rr,(R1 d, R1 s)) { emit_byte(0x84); emit_byte(0xc0+8*s+d); } LENDFUNC(WRITE,NONE,2,raw_test_b_rr,(R1 d, R1 s)) LOWFUNC(WRITE,NONE,2,raw_and_l_ri,(RW4 d, IMM i)) { emit_byte(0x81); emit_byte(0xe0+d); emit_long(i); } LENDFUNC(WRITE,NONE,2,raw_and_l_ri,(RW4 d, IMM i)) LOWFUNC(WRITE,NONE,2,raw_and_w_ri,(RW2 d, IMM i)) { emit_byte(0x66); emit_byte(0x81); emit_byte(0xe0+d); emit_word(i); } LENDFUNC(WRITE,NONE,2,raw_and_w_ri,(RW2 d, IMM i)) LOWFUNC(WRITE,NONE,2,raw_and_l,(RW4 d, R4 s)) { emit_byte(0x21); emit_byte(0xc0+8*s+d); } LENDFUNC(WRITE,NONE,2,raw_and_l,(RW4 d, R4 s)) LOWFUNC(WRITE,NONE,2,raw_and_w,(RW2 d, R2 s)) { emit_byte(0x66); emit_byte(0x21); emit_byte(0xc0+8*s+d); } LENDFUNC(WRITE,NONE,2,raw_and_w,(RW2 d, R2 s)) LOWFUNC(WRITE,NONE,2,raw_and_b,(RW1 d, R1 s)) { emit_byte(0x20); emit_byte(0xc0+8*s+d); } LENDFUNC(WRITE,NONE,2,raw_and_b,(RW1 d, R1 s)) LOWFUNC(WRITE,NONE,2,raw_or_l_ri,(RW4 d, IMM i)) { emit_byte(0x81); emit_byte(0xc8+d); emit_long(i); } LENDFUNC(WRITE,NONE,2,raw_or_l_ri,(RW4 d, IMM i)) LOWFUNC(WRITE,NONE,2,raw_or_l,(RW4 d, R4 s)) { emit_byte(0x09); emit_byte(0xc0+8*s+d); } LENDFUNC(WRITE,NONE,2,raw_or_l,(RW4 d, R4 s)) LOWFUNC(WRITE,NONE,2,raw_or_w,(RW2 d, R2 s)) { emit_byte(0x66); emit_byte(0x09); emit_byte(0xc0+8*s+d); } LENDFUNC(WRITE,NONE,2,raw_or_w,(RW2 d, R2 s)) LOWFUNC(WRITE,NONE,2,raw_or_b,(RW1 d, R1 s)) { emit_byte(0x08); emit_byte(0xc0+8*s+d); } LENDFUNC(WRITE,NONE,2,raw_or_b,(RW1 d, R1 s)) LOWFUNC(RMW,NONE,2,raw_adc_l,(RW4 d, R4 s)) { emit_byte(0x11); emit_byte(0xc0+8*s+d); } LENDFUNC(RMW,NONE,2,raw_adc_l,(RW4 d, R4 s)) LOWFUNC(RMW,NONE,2,raw_adc_w,(RW2 d, R2 s)) { emit_byte(0x66); emit_byte(0x11); emit_byte(0xc0+8*s+d); } LENDFUNC(RMW,NONE,2,raw_adc_w,(RW2 d, R2 s)) LOWFUNC(RMW,NONE,2,raw_adc_b,(RW1 d, R1 s)) { emit_byte(0x10); emit_byte(0xc0+8*s+d); } LENDFUNC(RMW,NONE,2,raw_adc_b,(RW1 d, R1 s)) LOWFUNC(WRITE,NONE,2,raw_add_l,(RW4 d, R4 s)) { emit_byte(0x01); emit_byte(0xc0+8*s+d); } LENDFUNC(WRITE,NONE,2,raw_add_l,(RW4 d, R4 s)) LOWFUNC(WRITE,NONE,2,raw_add_w,(RW2 d, R2 s)) { emit_byte(0x66); emit_byte(0x01); emit_byte(0xc0+8*s+d); } LENDFUNC(WRITE,NONE,2,raw_add_w,(RW2 d, R2 s)) LOWFUNC(WRITE,NONE,2,raw_add_b,(RW1 d, R1 s)) { emit_byte(0x00); emit_byte(0xc0+8*s+d); } LENDFUNC(WRITE,NONE,2,raw_add_b,(RW1 d, R1 s)) LOWFUNC(WRITE,NONE,2,raw_sub_l_ri,(RW4 d, IMM i)) { if (isbyte(i)) { emit_byte(0x83); emit_byte(0xe8+d); emit_byte(i); } else { emit_byte(0x81); emit_byte(0xe8+d); emit_long(i); } } LENDFUNC(WRITE,NONE,2,raw_sub_l_ri,(RW4 d, IMM i)) LOWFUNC(WRITE,NONE,2,raw_sub_b_ri,(RW1 d, IMM i)) { emit_byte(0x80); emit_byte(0xe8+d); emit_byte(i); } LENDFUNC(WRITE,NONE,2,raw_sub_b_ri,(RW1 d, IMM i)) LOWFUNC(WRITE,NONE,2,raw_add_l_ri,(RW4 d, IMM i)) { if (isbyte(i)) { emit_byte(0x83); emit_byte(0xc0+d); emit_byte(i); } else { emit_byte(0x81); emit_byte(0xc0+d); emit_long(i); } } LENDFUNC(WRITE,NONE,2,raw_add_l_ri,(RW4 d, IMM i)) LOWFUNC(WRITE,NONE,2,raw_add_w_ri,(RW2 d, IMM i)) { if (isbyte(i)) { emit_byte(0x66); emit_byte(0x83); emit_byte(0xc0+d); emit_byte(i); } else { emit_byte(0x66); emit_byte(0x81); emit_byte(0xc0+d); emit_word(i); } } LENDFUNC(WRITE,NONE,2,raw_add_w_ri,(RW2 d, IMM i)) LOWFUNC(WRITE,NONE,2,raw_add_b_ri,(RW1 d, IMM i)) { emit_byte(0x80); emit_byte(0xc0+d); emit_byte(i); } LENDFUNC(WRITE,NONE,2,raw_add_b_ri,(RW1 d, IMM i)) LOWFUNC(RMW,NONE,2,raw_sbb_l,(RW4 d, R4 s)) { emit_byte(0x19); emit_byte(0xc0+8*s+d); } LENDFUNC(RMW,NONE,2,raw_sbb_l,(RW4 d, R4 s)) LOWFUNC(RMW,NONE,2,raw_sbb_w,(RW2 d, R2 s)) { emit_byte(0x66); emit_byte(0x19); emit_byte(0xc0+8*s+d); } LENDFUNC(RMW,NONE,2,raw_sbb_w,(RW2 d, R2 s)) LOWFUNC(RMW,NONE,2,raw_sbb_b,(RW1 d, R1 s)) { emit_byte(0x18); emit_byte(0xc0+8*s+d); } LENDFUNC(RMW,NONE,2,raw_sbb_b,(RW1 d, R1 s)) LOWFUNC(WRITE,NONE,2,raw_sub_l,(RW4 d, R4 s)) { emit_byte(0x29); emit_byte(0xc0+8*s+d); } LENDFUNC(WRITE,NONE,2,raw_sub_l,(RW4 d, R4 s)) LOWFUNC(WRITE,NONE,2,raw_sub_w,(RW2 d, R2 s)) { emit_byte(0x66); emit_byte(0x29); emit_byte(0xc0+8*s+d); } LENDFUNC(WRITE,NONE,2,raw_sub_w,(RW2 d, R2 s)) LOWFUNC(WRITE,NONE,2,raw_sub_b,(RW1 d, R1 s)) { emit_byte(0x28); emit_byte(0xc0+8*s+d); } LENDFUNC(WRITE,NONE,2,raw_sub_b,(RW1 d, R1 s)) LOWFUNC(WRITE,NONE,2,raw_cmp_l,(R4 d, R4 s)) { emit_byte(0x39); emit_byte(0xc0+8*s+d); } LENDFUNC(WRITE,NONE,2,raw_cmp_l,(R4 d, R4 s)) LOWFUNC(WRITE,NONE,2,raw_cmp_l_ri,(R4 r, IMM i)) { emit_byte(0x81); emit_byte(0xf8+r); emit_long(i); } LENDFUNC(WRITE,NONE,2,raw_cmp_l_ri,(R4 r, IMM i)) LOWFUNC(WRITE,NONE,2,raw_cmp_w,(R2 d, R2 s)) { emit_byte(0x66); emit_byte(0x39); emit_byte(0xc0+8*s+d); } LENDFUNC(WRITE,NONE,2,raw_cmp_w,(R2 d, R2 s)) LOWFUNC(WRITE,NONE,2,raw_cmp_b_ri,(R1 d, IMM i)) { emit_byte(0x80); emit_byte(0xf8+d); emit_byte(i); } LENDFUNC(WRITE,NONE,2,raw_cmp_b_ri,(R1 d, IMM i)) LOWFUNC(WRITE,NONE,2,raw_cmp_b,(R1 d, R1 s)) { emit_byte(0x38); emit_byte(0xc0+8*s+d); } LENDFUNC(WRITE,NONE,2,raw_cmp_b,(R1 d, R1 s)) LOWFUNC(WRITE,NONE,2,raw_xor_l,(RW4 d, R4 s)) { emit_byte(0x31); emit_byte(0xc0+8*s+d); } LENDFUNC(WRITE,NONE,2,raw_xor_l,(RW4 d, R4 s)) LOWFUNC(WRITE,NONE,2,raw_xor_w,(RW2 d, R2 s)) { emit_byte(0x66); emit_byte(0x31); emit_byte(0xc0+8*s+d); } LENDFUNC(WRITE,NONE,2,raw_xor_w,(RW2 d, R2 s)) LOWFUNC(WRITE,NONE,2,raw_xor_b,(RW1 d, R1 s)) { emit_byte(0x30); emit_byte(0xc0+8*s+d); } LENDFUNC(WRITE,NONE,2,raw_xor_b,(RW1 d, R1 s)) LOWFUNC(WRITE,RMW,2,raw_sub_l_mi,(MEMRW d, IMM s)) { emit_byte(0x81); emit_byte(0x2d); emit_long(d); emit_long(s); } LENDFUNC(WRITE,RMW,2,raw_sub_l_mi,(MEMRW d, IMM s)) LOWFUNC(WRITE,READ,2,raw_cmp_l_mi,(MEMR d, IMM s)) { emit_byte(0x81); emit_byte(0x3d); emit_long(d); emit_long(s); } LENDFUNC(WRITE,READ,2,raw_cmp_l_mi,(MEMR d, IMM s)) LOWFUNC(NONE,NONE,2,raw_xchg_l_rr,(RW4 r1, RW4 r2)) { emit_byte(0x87); emit_byte(0xc0+8*r1+r2); } LENDFUNC(NONE,NONE,2,raw_xchg_l_rr,(RW4 r1, RW4 r2)) LOWFUNC(READ,WRITE,0,raw_pushfl,(void)) { emit_byte(0x9c); } LENDFUNC(READ,WRITE,0,raw_pushfl,(void)) LOWFUNC(WRITE,READ,0,raw_popfl,(void)) { emit_byte(0x9d); } LENDFUNC(WRITE,READ,0,raw_popfl,(void)) /************************************************************************* * Unoptimizable stuff --- jump * *************************************************************************/ STATIC_INLINE void raw_call_r(R4 r) { lopt_emit_all(); emit_byte(0xff); emit_byte(0xd0+r); } STATIC_INLINE void raw_jmp_r(R4 r) { lopt_emit_all(); emit_byte(0xff); emit_byte(0xe0+r); } STATIC_INLINE void raw_jmp_m_indexed(uae_u32 base, uae_u32 r, uae_u32 m) { int sib; switch (m) { case 1: sib = 0x05; break; case 2: sib = 0x45; break; case 4: sib = 0x85; break; case 8: sib = 0xC5; break; default: abort(); } lopt_emit_all(); emit_byte(0xff); emit_byte(0x24); emit_byte(8*r+sib); emit_long(base); } STATIC_INLINE void raw_jmp_m(uae_u32 base) { lopt_emit_all(); emit_byte(0xff); emit_byte(0x25); emit_long(base); } STATIC_INLINE void raw_call(uae_u32 t) { lopt_emit_all(); emit_byte(0xe8); emit_long(t-(uae_u32)target-4); } STATIC_INLINE void raw_jmp(uae_u32 t) { lopt_emit_all(); emit_byte(0xe9); emit_long(t-(uae_u32)target-4); } STATIC_INLINE void raw_jl(uae_u32 t) { lopt_emit_all(); emit_byte(0x0f); emit_byte(0x8c); emit_long(t-(uae_u32)target-4); } STATIC_INLINE void raw_jz(uae_u32 t) { lopt_emit_all(); emit_byte(0x0f); emit_byte(0x84); emit_long(t-(uae_u32)target-4); } STATIC_INLINE void raw_jnz(uae_u32 t) { lopt_emit_all(); emit_byte(0x0f); emit_byte(0x85); emit_long(t-(uae_u32)target-4); } STATIC_INLINE void raw_jnz_l_oponly(void) { lopt_emit_all(); emit_byte(0x0f); emit_byte(0x85); } STATIC_INLINE void raw_jcc_l_oponly(int cc) { lopt_emit_all(); emit_byte(0x0f); emit_byte(0x80+cc); } STATIC_INLINE void raw_jnz_b_oponly(void) { lopt_emit_all(); emit_byte(0x75); } STATIC_INLINE void raw_jz_b_oponly(void) { lopt_emit_all(); emit_byte(0x74); } STATIC_INLINE void raw_jmp_l_oponly(void) { lopt_emit_all(); emit_byte(0xe9); } STATIC_INLINE void raw_jmp_b_oponly(void) { lopt_emit_all(); emit_byte(0xeb); } STATIC_INLINE void raw_ret(void) { lopt_emit_all(); emit_byte(0xc3); } STATIC_INLINE void raw_nop(void) { lopt_emit_all(); emit_byte(0x90); } /************************************************************************* * Flag handling, to and fro UAE flag register * *************************************************************************/ #define FLAG_NREG1 0 /* Set to -1 if any register will do */ STATIC_INLINE void raw_flags_to_reg(int r) { raw_lahf(0); /* Most flags in AH */ //raw_setcc(r,0); /* V flag in AL */ raw_setcc_m((uae_u32)live.state[FLAGTMP].mem,0); #if 1 /* Let's avoid those nasty partial register stalls */ //raw_mov_b_mr((uae_u32)live.state[FLAGTMP].mem,r); raw_mov_b_mr(((uae_u32)live.state[FLAGTMP].mem)+1,r+4); //live.state[FLAGTMP].status=CLEAN; live.state[FLAGTMP].status=INMEM; live.state[FLAGTMP].realreg=-1; /* We just "evicted" FLAGTMP. */ if (live.nat[r].nholds!=1) { /* Huh? */ abort(); } live.nat[r].nholds=0; #endif } #define FLAG_NREG2 0 /* Set to -1 if any register will do */ STATIC_INLINE void raw_reg_to_flags(int r) { raw_cmp_b_ri(r,-127); /* set V */ raw_sahf(0); } /* Apparently, there are enough instructions between flag store and flag reload to avoid the partial memory stall */ STATIC_INLINE void raw_load_flagreg(uae_u32 target, uae_u32 r) { #if 1 raw_mov_l_rm(target,(uae_u32)live.state[r].mem); #else raw_mov_b_rm(target,(uae_u32)live.state[r].mem); raw_mov_b_rm(target+4,((uae_u32)live.state[r].mem)+1); #endif } /* FLAGX is word-sized */ STATIC_INLINE void raw_load_flagx(uae_u32 target, uae_u32 r) { if (live.nat[target].canword) raw_mov_w_rm(target,(uae_u32)live.state[r].mem); else raw_mov_l_rm(target,(uae_u32)live.state[r].mem); } #define NATIVE_FLAG_Z 0x40 #define NATIVE_CC_EQ 4 STATIC_INLINE void raw_flags_set_zero(int f, int r, int t) { // FIXME: this is really suboptimal raw_pushfl(); raw_pop_l_r(f); raw_and_l_ri(f,~NATIVE_FLAG_Z); raw_test_l_rr(r,r); raw_mov_l_ri(r,0); raw_mov_l_ri(t,NATIVE_FLAG_Z); raw_cmov_l_rr(r,t,NATIVE_CC_EQ); raw_or_l(f,r); raw_push_l_r(f); raw_popfl(); } STATIC_INLINE void raw_inc_sp(int off) { raw_add_l_ri(4,off); } /************************************************************************* * Handling mistaken direct memory access * *************************************************************************/ #ifdef NATMEM_OFFSET #ifdef _WIN32 // %%% BRIAN KING WAS HERE %%% #include #else #ifndef __USE_GNU #define __USE_GNU #endif #include #endif #include #define SIG_READ 1 #define SIG_WRITE 2 static int in_handler=0; static uae_u8 *veccode; #ifdef _WIN32 #if defined(__x86_64__) #define ctxPC (pContext->Rip) #else #define ctxPC (pContext->Eip) #endif int EvalException (LPEXCEPTION_POINTERS blah, int n_except) { PEXCEPTION_RECORD pExceptRecord = NULL; PCONTEXT pContext = NULL; uae_u8* i = NULL; uae_u32 addr = 0; int r=-1; int size=4; int dir=-1; int len=0; if (n_except != STATUS_ACCESS_VIOLATION || !canbang || currprefs.cachesize == 0) return EXCEPTION_CONTINUE_SEARCH; pExceptRecord = blah->ExceptionRecord; pContext = blah->ContextRecord; if (pContext) i = (uae_u8 *)ctxPC; if (pExceptRecord) addr = (uae_u32)(pExceptRecord->ExceptionInformation[1]); #ifdef JIT_DEBUG write_log (_T("JIT: fault address is 0x%x at 0x%x\n"),addr,i); #endif if (!canbang || !currprefs.cachesize) return EXCEPTION_CONTINUE_SEARCH; if (in_handler) write_log (_T("JIT: Argh --- Am already in a handler. Shouldn't happen!\n")); if (canbang && i>=compiled_code && i<=current_compile_p) { if (*i==0x66) { i++; size=2; len++; } switch(i[0]) { case 0x8a: if ((i[1]&0xc0)==0x80) { r=(i[1]>>3)&7; dir=SIG_READ; size=1; len+=6; break; } break; case 0x88: if ((i[1]&0xc0)==0x80) { r=(i[1]>>3)&7; dir=SIG_WRITE; size=1; len+=6; break; } break; case 0x8b: switch(i[1]&0xc0) { case 0x80: r=(i[1]>>3)&7; dir=SIG_READ; len+=6; break; case 0x40: r=(i[1]>>3)&7; dir=SIG_READ; len+=3; break; case 0x00: r=(i[1]>>3)&7; dir=SIG_READ; len+=2; break; default: break; } break; case 0x89: switch(i[1]&0xc0) { case 0x80: r=(i[1]>>3)&7; dir=SIG_WRITE; len+=6; break; case 0x40: r=(i[1]>>3)&7; dir=SIG_WRITE; len+=3; break; case 0x00: r=(i[1]>>3)&7; dir=SIG_WRITE; len+=2; break; } break; } } if (r!=-1) { void* pr=NULL; #ifdef JIT_DEBUG write_log (_T("JIT: register was %d, direction was %d, size was %d\n"),r,dir,size); #endif switch(r) { #if defined(__x86_64__) case 0: pr=&(pContext->Rax); break; case 1: pr=&(pContext->Rcx); break; case 2: pr=&(pContext->Rdx); break; case 3: pr=&(pContext->Rbx); break; case 4: pr=(size>1)?NULL:(((uae_u8*)&(pContext->Rax))+1); break; case 5: pr=(size>1)? (void*)(&(pContext->Rbp)): (void*)(((uae_u8*)&(pContext->Rcx))+1); break; case 6: pr=(size>1)? (void*)(&(pContext->Rsi)): (void*)(((uae_u8*)&(pContext->Rdx))+1); break; case 7: pr=(size>1)? (void*)(&(pContext->Rdi)): (void*)(((uae_u8*)&(pContext->Rbx))+1); break; #else case 0: pr=&(pContext->Eax); break; case 1: pr=&(pContext->Ecx); break; case 2: pr=&(pContext->Edx); break; case 3: pr=&(pContext->Ebx); break; case 4: pr=(size>1)?NULL:(((uae_u8*)&(pContext->Eax))+1); break; case 5: pr=(size>1)? (void*)(&(pContext->Ebp)): (void*)(((uae_u8*)&(pContext->Ecx))+1); break; case 6: pr=(size>1)? (void*)(&(pContext->Esi)): (void*)(((uae_u8*)&(pContext->Edx))+1); break; case 7: pr=(size>1)? (void*)(&(pContext->Edi)): (void*)(((uae_u8*)&(pContext->Ebx))+1); break; #endif default: abort(); } if (pr) { blockinfo* bi; if (currprefs.comp_oldsegv) { addr-=(uae_u32)NATMEM_OFFSET; #ifdef JIT_DEBUG if ((addr>=0x10000000 && addr<0x40000000) || (addr>=0x50000000)) { write_log (_T("JIT: Suspicious address 0x%x in SEGV handler.\n"),addr); } #endif if (dir==SIG_READ) { switch (size) { case 1: *((uae_u8*)pr)=get_byte (addr); break; case 2: *((uae_u16*)pr)=swap16(get_word (addr)); break; case 4: *((uae_u32*)pr)=swap32(get_long (addr)); break; default: abort(); } } else { /* write */ switch (size) { case 1: put_byte (addr,*((uae_u8*)pr)); break; case 2: put_word (addr,swap16(*((uae_u16*)pr))); break; case 4: put_long (addr,swap32(*((uae_u32*)pr))); break; default: abort(); } } #ifdef JIT_DEBUG write_log (_T("JIT: Handled one access!\n")); #endif fflush(stdout); segvcount++; ctxPC+=len; } else { void* tmp=target; int i; uae_u8 vecbuf[5]; addr-=(uae_u32)NATMEM_OFFSET; #ifdef JIT_DEBUG if ((addr>=0x10000000 && addr<0x40000000) || (addr>=0x50000000)) { write_log (_T("JIT: Suspicious address 0x%x in SEGV handler.\n"),addr); } #endif target=(uae_u8*)ctxPC; for (i=0;i<5;i++) vecbuf[i]=target[i]; emit_byte(0xe9); emit_long((uae_u32)veccode-(uae_u32)target-4); #ifdef JIT_DEBUG write_log (_T("JIT: Create jump to %p\n"),veccode); write_log (_T("JIT: Handled one access!\n")); #endif segvcount++; target=veccode; if (dir==SIG_READ) { switch(size) { case 1: raw_mov_b_ri(r,get_byte (addr)); break; case 2: raw_mov_w_ri(r,swap16(get_word (addr))); break; case 4: raw_mov_l_ri(r,swap32(get_long (addr))); break; default: abort(); } } else { /* write */ switch(size) { case 1: put_byte (addr,*((uae_u8*)pr)); break; case 2: put_word (addr,swap16(*((uae_u16*)pr))); break; case 4: put_long (addr,swap32(*((uae_u32*)pr))); break; default: abort(); } } for (i=0;i<5;i++) raw_mov_b_mi(ctxPC+i,vecbuf[i]); raw_mov_l_mi((uae_u32)&in_handler,0); emit_byte(0xe9); emit_long(ctxPC+len-(uae_u32)target-4); in_handler=1; target=(uae_u8*)tmp; } bi=active; while (bi) { if (bi->handler && (uae_u8*)bi->direct_handler<=i && (uae_u8*)bi->nexthandler>i) { #ifdef JIT_DEBUG write_log (_T("JIT: deleted trigger (%p<%p<%p) %p\n"), bi->handler, i, bi->nexthandler, bi->pc_p); #endif invalidate_block(bi); raise_in_cl_list(bi); set_special(0); return EXCEPTION_CONTINUE_EXECUTION; } bi=bi->next; } /* Not found in the active list. Might be a rom routine that is in the dormant list */ bi=dormant; while (bi) { if (bi->handler && (uae_u8*)bi->direct_handler<=i && (uae_u8*)bi->nexthandler>i) { #ifdef JIT_DEBUG write_log (_T("JIT: deleted trigger (%p<%p<%p) %p\n"), bi->handler, i, bi->nexthandler, bi->pc_p); #endif invalidate_block(bi); raise_in_cl_list(bi); set_special(0); return EXCEPTION_CONTINUE_EXECUTION; } bi=bi->next; } #ifdef JIT_DEBUG write_log (_T("JIT: Huh? Could not find trigger!\n")); #endif return EXCEPTION_CONTINUE_EXECUTION; } } write_log (_T("JIT: Can't handle access %08X!\n"), i); #if 0 if (i) { int j; for (j=0;j<10;j++) { write_log (_T("JIT: instruction byte %2d is 0x%02x\n"),j,i[j]); } } write_log (_T("Please send the above info (starting at \"fault address\") to\n")); write_log (_T("bmeyer@csse.monash.edu.au\n")); write_log (_T("This shouldn't happen ;-)\n")); #endif return EXCEPTION_CONTINUE_SEARCH; } #else #if defined(__APPLE__) && __DARWIN_UNIX03 #define CONTEXT_MEMBER(x) __##x #elif defined(__FreeBSD__) #define CONTEXT_MEMBER(x) sc_##x #else #define CONTEXT_MEMBER(x) x #endif #ifdef __APPLE__ static void vec(int x, siginfo_t *info, ucontext_t *uap) { _STRUCT_X86_THREAD_STATE32 sc = uap->uc_mcontext->CONTEXT_MEMBER(ss); uae_u32 addr = 0; #else static void vec(int x, struct sigcontext sc) { #endif uae_u8* i=(uae_u8*)sc.CONTEXT_MEMBER(eip); #ifdef __APPLE__ if (i >= compiled_code) { unsigned int j; write_log ("JIT_APPLE: can't handle access!\n"); for (j = 0 ; j < 10; j++) write_log ("JIT: instruction byte %2d is %02x\n", i, j[i]); } else { write_log ("Caught illegal access to (unknown) at eip=%08x\n", i); } exit (EXIT_FAILURE); #elif defined(__FreeBSD__) //uae_u32 addr=sc.cr2; uae_u32 addr=sc.CONTEXT_MEMBER(spare2); // UJ: @@@@: ????: #else uae_u32 addr=sc.cr2; #endif int r=-1; int size=4; int dir=-1; int len=0; int j; write_log (_T("JIT: fault address is %08x at %08x\n"),addr,i); if (!canbang) write_log (_T("JIT: Not happy! Canbang is 0 in SIGSEGV handler!\n")); if (in_handler) write_log (_T("JIT: Argh --- Am already in a handler. Shouldn't happen!\n")); /* * Decode access opcode */ if (canbang && i>=compiled_code && i<=current_compile_p) { if (*i==0x66) { i++; size=2; len++; } switch(i[0]) { case 0x8a: if ((i[1]&0xc0)==0x80) { r=(i[1]>>3)&7; dir=SIG_READ; size=1; len+=6; break; } break; case 0x88: if ((i[1]&0xc0)==0x80) { r=(i[1]>>3)&7; dir=SIG_WRITE; size=1; len+=6; break; } break; case 0x8b: switch(i[1]&0xc0) { case 0x80: r=(i[1]>>3)&7; dir=SIG_READ; len+=6; break; case 0x40: r=(i[1]>>3)&7; dir=SIG_READ; len+=3; break; case 0x00: r=(i[1]>>3)&7; dir=SIG_READ; len+=2; break; default: break; } break; case 0x89: switch(i[1]&0xc0) { case 0x80: r=(i[1]>>3)&7; dir=SIG_WRITE; len+=6; break; case 0x40: r=(i[1]>>3)&7; dir=SIG_WRITE; len+=3; break; case 0x00: r=(i[1]>>3)&7; dir=SIG_WRITE; len+=2; break; } break; } } if (r!=-1) { void* pr=NULL; write_log (_T("JIT: register was %d, direction was %d, size was %d\n"),r,dir,size); switch(r) { case 0: pr = &(sc.CONTEXT_MEMBER(eax)); break; case 1: pr = &(sc.CONTEXT_MEMBER(ecx)); break; case 2: pr = &(sc.CONTEXT_MEMBER(edx)); break; case 3: pr = &(sc.CONTEXT_MEMBER(ebx)); break; case 4: pr = (size>1) ? NULL:(((uae_u8*)&(sc.CONTEXT_MEMBER(eax)))+1); break; case 5: pr=(size>1)? (void*)(&(sc.CONTEXT_MEMBER(ebp))): (void*)(((uae_u8*)&(sc.CONTEXT_MEMBER(ecx)))+1); break; case 6: pr=(size>1)? (void*)(&(sc.CONTEXT_MEMBER(esi))): (void*)(((uae_u8*)&(sc.CONTEXT_MEMBER(edx)))+1); break; case 7: pr=(size>1)? (void*)(&(sc.CONTEXT_MEMBER(edi))): (void*)(((uae_u8*)&(sc.CONTEXT_MEMBER(ebx)))+1); break; default: abort(); } if (pr) { blockinfo* bi; if (currprefs.comp_oldsegv) { #ifdef FSUAE // FIXME: check why (uae_u8 was here originally...?) addr -= (uae_u32)NATMEM_OFFSET; #else addr -= (uae_u8)NATMEM_OFFSET; #endif if ((addr>=0x10000000 && addr<0x40000000) || (addr>=0x50000000)) { write_log (_T("JIT: Suspicious address in %x SEGV handler.\n"),addr); } if (dir==SIG_READ) { switch(size) { case 1: *((uae_u8*)pr)=get_byte (addr); break; case 2: *((uae_u16*)pr)=get_word (addr); break; case 4: *((uae_u32*)pr)=get_long (addr); break; default: abort(); } } else { /* write */ switch(size) { case 1: put_byte (addr,*((uae_u8*)pr)); break; case 2: put_word (addr,*((uae_u16*)pr)); break; case 4: put_long (addr,*((uae_u32*)pr)); break; default: abort(); } } write_log ("JIT: Handled one access!\n"); fflush(stdout); segvcount++; sc.CONTEXT_MEMBER(eip) += len; } else { uint8_t* tmp=target; int i; uae_u8 vecbuf[5]; #ifdef FSUAE // FIXME: check why (uae_u8 was here originally...?) addr -= (uae_u32)NATMEM_OFFSET; #else addr-=(uae_u8)NATMEM_OFFSET; #endif if ((addr>=0x10000000 && addr<0x40000000) || (addr>=0x50000000)) { write_log (_T("JIT: Suspicious address 0x%x in SEGV handler.\n"),addr); } target = (uae_u8*)sc.CONTEXT_MEMBER(eip); for (i=0;i<5;i++) vecbuf[i]=target[i]; emit_byte(0xe9); emit_long((uae_u32)veccode-(uae_u32)target-4); write_log (_T("JIT: Create jump to %p\n"),veccode); write_log (_T("JIT: Handled one access!\n")); segvcount++; target=veccode; if (dir==SIG_READ) { switch(size) { case 1: raw_mov_b_ri(r,get_byte (addr)); break; case 2: raw_mov_w_ri(r,get_word (addr)); break; case 4: raw_mov_l_ri(r,get_long (addr)); break; default: abort(); } } else { /* write */ switch(size) { case 1: put_byte (addr,*((uae_u8*)pr)); break; case 2: put_word (addr,*((uae_u16*)pr)); break; case 4: put_long (addr,*((uae_u32*)pr)); break; default: abort(); } } for (i=0;i<5;i++) raw_mov_b_mi(sc.CONTEXT_MEMBER(eip)+i,vecbuf[i]); raw_mov_l_mi((uae_u32)&in_handler,0); emit_byte(0xe9); emit_long(sc.CONTEXT_MEMBER(eip)+len-(uae_u32)target-4); in_handler=1; target=tmp; } bi=active; while (bi) { if (bi->handler && (uae_u8*)bi->direct_handler<=i && (uae_u8*)bi->nexthandler>i) { write_log (_T("JIT: deleted trigger (%p<%p<%p) %p\n"), bi->handler, i, bi->nexthandler, bi->pc_p); invalidate_block(bi); raise_in_cl_list(bi); set_special(0); return; } bi=bi->next; } /* Not found in the active list. Might be a rom routine that is in the dormant list */ bi=dormant; while (bi) { if (bi->handler && (uae_u8*)bi->direct_handler<=i && (uae_u8*)bi->nexthandler>i) { write_log (_T("JIT: deleted trigger (%p<%p<%p) %p\n"), bi->handler, i, bi->nexthandler, bi->pc_p); invalidate_block(bi); raise_in_cl_list(bi); set_special(0); return; } bi=bi->next; } write_log (_T("JIT: Huh? Could not find trigger!\n")); return; } } write_log (_T("JIT: Can't handle access!\n")); for (j=0;j<10;j++) { write_log (_T("JIT: instruction byte %2d is %02x\n"),j,i[j]); } #if 0 write_log (_T("Please send the above info (starting at \"fault address\") to\n") "bmeyer@csse.monash.edu.au\n" "This shouldn't happen ;-)\n"); fflush(stdout); #endif signal(SIGSEGV,SIG_DFL); /* returning here will cause a "real" SEGV */ } #endif #endif /************************************************************************* * Checking for CPU features * *************************************************************************/ struct cpuinfo_x86 { uae_u8 x86; // CPU family uae_u8 x86_vendor; // CPU vendor uae_u8 x86_processor; // CPU canonical processor type uae_u8 x86_brand_id; // CPU BrandID if supported, yield 0 otherwise uae_u32 x86_hwcap; uae_u8 x86_model; uae_u8 x86_mask; int cpuid_level; // Maximum supported CPUID level, -1=no CPUID char x86_vendor_id[16]; }; struct cpuinfo_x86 cpuinfo; enum { X86_VENDOR_INTEL = 0, X86_VENDOR_CYRIX = 1, X86_VENDOR_AMD = 2, X86_VENDOR_UMC = 3, X86_VENDOR_NEXGEN = 4, X86_VENDOR_CENTAUR = 5, X86_VENDOR_RISE = 6, X86_VENDOR_TRANSMETA = 7, X86_VENDOR_NSC = 8, X86_VENDOR_UNKNOWN = 0xff }; enum { X86_PROCESSOR_I386, /* 80386 */ X86_PROCESSOR_I486, /* 80486DX, 80486SX, 80486DX[24] */ X86_PROCESSOR_PENTIUM, X86_PROCESSOR_PENTIUMPRO, X86_PROCESSOR_K6, X86_PROCESSOR_ATHLON, X86_PROCESSOR_PENTIUM4, X86_PROCESSOR_K8, X86_PROCESSOR_max }; static struct ptt { const int align_loop; const int align_loop_max_skip; const int align_jump; const int align_jump_max_skip; const int align_func; } x86_alignments[X86_PROCESSOR_max + 1] = { { 4, 3, 4, 3, 4 }, { 16, 15, 16, 15, 16 }, { 16, 7, 16, 7, 16 }, { 16, 15, 16, 7, 16 }, { 32, 7, 32, 7, 32 }, { 16, 7, 16, 7, 16 }, { 0, 0, 0, 0, 0 }, { 16, 7, 16, 7, 16 }, { 0, 0, 0, 0, 0 } }; static void x86_get_cpu_vendor(struct cpuinfo_x86 *c) { char *v = c->x86_vendor_id; if (!strcmp(v, "GenuineIntel")) c->x86_vendor = X86_VENDOR_INTEL; else if (!strcmp(v, "AuthenticAMD")) c->x86_vendor = X86_VENDOR_AMD; else if (!strcmp(v, "CyrixInstead")) c->x86_vendor = X86_VENDOR_CYRIX; else if (!strcmp(v, "Geode by NSC")) c->x86_vendor = X86_VENDOR_NSC; else if (!strcmp(v, "UMC UMC UMC ")) c->x86_vendor = X86_VENDOR_UMC; else if (!strcmp(v, "CentaurHauls")) c->x86_vendor = X86_VENDOR_CENTAUR; else if (!strcmp(v, "NexGenDriven")) c->x86_vendor = X86_VENDOR_NEXGEN; else if (!strcmp(v, "RiseRiseRise")) c->x86_vendor = X86_VENDOR_RISE; else if (!strcmp(v, "GenuineTMx86") || !strcmp(v, "TransmetaCPU")) c->x86_vendor = X86_VENDOR_TRANSMETA; else c->x86_vendor = X86_VENDOR_UNKNOWN; } static void cpuid(uae_u32 op, uae_u32 *eax, uae_u32 *ebx, uae_u32 *ecx, uae_u32 *edx) { const int CPUID_SPACE = 4096; uae_u8* cpuid_space = (uae_u8*)cache_alloc(CPUID_SPACE); if (cpuid_space == 0) abort (); static uae_u32 s_op, s_eax, s_ebx, s_ecx, s_edx; uae_u8* tmp=get_target(); s_op = op; set_target(cpuid_space); raw_push_l_r(0); /* eax */ raw_push_l_r(1); /* ecx */ raw_push_l_r(2); /* edx */ raw_push_l_r(3); /* ebx */ raw_mov_l_rm(0,(uintptr)&s_op); raw_cpuid(0); raw_mov_l_mr((uintptr)&s_eax,0); raw_mov_l_mr((uintptr)&s_ebx,3); raw_mov_l_mr((uintptr)&s_ecx,1); raw_mov_l_mr((uintptr)&s_edx,2); raw_pop_l_r(3); raw_pop_l_r(2); raw_pop_l_r(1); raw_pop_l_r(0); raw_ret(); set_target(tmp); ((compop_func*)cpuid_space)(0); if (eax != NULL) *eax = s_eax; if (ebx != NULL) *ebx = s_ebx; if (ecx != NULL) *ecx = s_ecx; if (edx != NULL) *edx = s_edx; cache_free (cpuid_space); } static void raw_init_cpu(void) { struct cpuinfo_x86 *c = &cpuinfo; uae_u32 xlvl; /* Defaults */ c->x86_processor = X86_PROCESSOR_max; c->x86_vendor = X86_VENDOR_UNKNOWN; c->cpuid_level = -1; /* CPUID not detected */ c->x86_model = c->x86_mask = 0; /* So far unknown... */ c->x86_vendor_id[0] = '\0'; /* Unset */ c->x86_hwcap = 0; /* Get vendor name */ c->x86_vendor_id[12] = '\0'; cpuid(0x00000000, (uae_u32 *)&c->cpuid_level, (uae_u32 *)&c->x86_vendor_id[0], (uae_u32 *)&c->x86_vendor_id[8], (uae_u32 *)&c->x86_vendor_id[4]); x86_get_cpu_vendor(c); /* Intel-defined flags: level 0x00000001 */ c->x86_brand_id = 0; if ( c->cpuid_level >= 0x00000001 ) { uae_u32 tfms, brand_id; cpuid(0x00000001, &tfms, &brand_id, NULL, &c->x86_hwcap); c->x86 = (tfms >> 8) & 15; c->x86_model = (tfms >> 4) & 15; c->x86_brand_id = brand_id & 0xff; if ( (c->x86_vendor == X86_VENDOR_AMD) && (c->x86 == 0xf)) { /* AMD Extended Family and Model Values */ c->x86 += (tfms >> 20) & 0xff; c->x86_model += (tfms >> 12) & 0xf0; } c->x86_mask = tfms & 15; } else { /* Have CPUID level 0 only - unheard of */ c->x86 = 4; } /* AMD-defined flags: level 0x80000001 */ cpuid(0x80000000, &xlvl, NULL, NULL, NULL); if ( (xlvl & 0xffff0000) == 0x80000000 ) { if ( xlvl >= 0x80000001 ) { uae_u32 features; cpuid(0x80000001, NULL, NULL, NULL, &features); if (features & (1 << 29)) { /* Assume x86-64 if long mode is supported */ c->x86_processor = X86_PROCESSOR_K8; } } } /* Canonicalize processor ID */ switch (c->x86) { case 3: c->x86_processor = X86_PROCESSOR_I386; break; case 4: c->x86_processor = X86_PROCESSOR_I486; break; case 5: if (c->x86_vendor == X86_VENDOR_AMD) c->x86_processor = X86_PROCESSOR_K6; else c->x86_processor = X86_PROCESSOR_PENTIUM; break; case 6: if (c->x86_vendor == X86_VENDOR_AMD) c->x86_processor = X86_PROCESSOR_ATHLON; else c->x86_processor = X86_PROCESSOR_PENTIUMPRO; break; case 15: if (c->x86_vendor == X86_VENDOR_INTEL) { /* Assume any BrandID >= 8 and family == 15 yields a Pentium 4 */ if (c->x86_brand_id >= 8) c->x86_processor = X86_PROCESSOR_PENTIUM4; } if (c->x86_vendor == X86_VENDOR_AMD) { /* Assume an Athlon processor if family == 15 and it was not detected as an x86-64 so far */ if (c->x86_processor == X86_PROCESSOR_max) c->x86_processor = X86_PROCESSOR_ATHLON; } break; } /* Have CMOV support? */ have_cmov = c->x86_hwcap & (1 << 15); #if 0 /* Can the host CPU suffer from partial register stalls? */ have_rat_stall = (c->x86_vendor == X86_VENDOR_INTEL); /* It appears that partial register writes are a bad idea even on AMD K7 cores, even though they are not supposed to have the dreaded rat stall. Why? Anyway, that's why we lie about it ;-) */ if (c->x86_processor == X86_PROCESSOR_ATHLON) have_rat_stall = 1; #endif have_rat_stall = 1; /* Alignments */ if (tune_alignment) { align_loops = x86_alignments[c->x86_processor].align_loop; align_jumps = x86_alignments[c->x86_processor].align_jump; } { write_log (_T("CPUID level=%d, Family=%d, Model=%d, Mask=%d, Vendor=%s [%d]\n"), c->cpuid_level, c->x86, c->x86_model, c->x86_mask, c->x86_vendor_id, c->x86_vendor); } } #if 0 static int target_check_bsf(void) { int mismatch = 0; for (int g_ZF = 0; g_ZF <= 1; g_ZF++) { for (int g_CF = 0; g_CF <= 1; g_CF++) { for (int g_OF = 0; g_OF <= 1; g_OF++) { for (int g_SF = 0; g_SF <= 1; g_SF++) { for (int value = -1; value <= 1; value++) { unsigned long flags = (g_SF << 7) | (g_OF << 11) | (g_ZF << 6) | g_CF; unsigned long tmp = value; __asm__ __volatile__ ("push %0; popf; bsf %1,%1; pushf; pop %0" : "+r" (flags), "+r" (tmp) : : "cc"); int OF = (flags >> 11) & 1; int SF = (flags >> 7) & 1; int ZF = (flags >> 6) & 1; int CF = flags & 1; tmp = (value == 0); if (ZF != tmp || SF != g_SF || OF != g_OF || CF != g_CF) mismatch = true; } }}}} if (mismatch) write_log (_T("Target CPU defines all flags on BSF instruction\n")); return !mismatch; } #endif #if 0 /************************************************************************* * Checking for CPU features * *************************************************************************/ typedef struct { uae_u32 eax; uae_u32 ecx; uae_u32 edx; uae_u32 ebx; } x86_regs; /* This could be so much easier if it could make assumptions about the compiler... */ static uae_u32 cpuid_ptr; static uae_u32 cpuid_level; static x86_regs cpuid(uae_u32 level) { x86_regs answer; uae_u8 *cpuid_space; void* tmp=get_target(); cpuid_ptr=(uae_u32)&answer; cpuid_level=level; cpuid_space = cache_alloc (256); set_target(cpuid_space); raw_push_l_r(0); /* eax */ raw_push_l_r(1); /* ecx */ raw_push_l_r(2); /* edx */ raw_push_l_r(3); /* ebx */ raw_push_l_r(7); /* edi */ raw_mov_l_rm(0,(uae_u32)&cpuid_level); raw_cpuid(0); raw_mov_l_rm(7,(uae_u32)&cpuid_ptr); raw_mov_l_Rr(7,0,0); raw_mov_l_Rr(7,1,4); raw_mov_l_Rr(7,2,8); raw_mov_l_Rr(7,3,12); raw_pop_l_r(7); raw_pop_l_r(3); raw_pop_l_r(2); raw_pop_l_r(1); raw_pop_l_r(0); raw_ret(); set_target(tmp); ((cpuop_func*)cpuid_space)(0); cache_free (cpuid_space); return answer; } static void raw_init_cpu(void) { x86_regs x; uae_u32 maxlev; x=cpuid(0); maxlev=x.eax; write_log (_T("Max CPUID level=%d Processor is %c%c%c%c%c%c%c%c%c%c%c%c\n"), maxlev, x.ebx, x.ebx>>8, x.ebx>>16, x.ebx>>24, x.edx, x.edx>>8, x.edx>>16, x.edx>>24, x.ecx, x.ecx>>8, x.ecx>>16, x.ecx>>24 ); have_rat_stall=(x.ecx==0x6c65746e); if (maxlev>=1) { x=cpuid(1); if (x.edx&(1<<15)) have_cmov=1; } have_rat_stall=1; #if 0 if (!have_cmov) have_rat_stall=0; #endif #if 0 write_log (_T("have_cmov=%d, avoid_cmov=%d, have_rat_stall=%d\n"), have_cmov,currprefs.avoid_cmov,have_rat_stall); if (currprefs.avoid_cmov) { write_log (_T("Disabling cmov use despite processor claiming to support it!\n")); have_cmov=0; } #else /* Dear Bernie, I don't want to keep around options which are useless, and not represented in the GUI anymore... Is this okay? */ write_log (_T("have_cmov=%d, have_rat_stall=%d\n"), have_cmov, have_rat_stall); #endif #if 0 /* For testing of non-cmov code! */ have_cmov=0; #endif #if 0 /* It appears that partial register writes are a bad idea even on AMD K7 cores, even though they are not supposed to have the dreaded rat stall. Why? Anyway, that's why we lie about it ;-) */ if (have_cmov) have_rat_stall=1; #endif } #endif /************************************************************************* * FPU stuff * *************************************************************************/ STATIC_INLINE void raw_fp_init(void) { int i; for (i=0;i1) { emit_byte(0x9b); emit_byte(0xdb); emit_byte(0xe3); live.tos=-1; } #endif while (live.tos>=1) { emit_byte(0xde); emit_byte(0xd9); live.tos-=2; } while (live.tos>=0) { emit_byte(0xdd); emit_byte(0xd8); live.tos--; } raw_fp_init(); } STATIC_INLINE void make_tos(int r) { int p,q; if (live.spos[r]<0) { /* Register not yet on stack */ emit_byte(0xd9); emit_byte(0xe8); /* Push '1' on the stack, just to grow it */ live.tos++; live.spos[r]=live.tos; live.onstack[live.tos]=r; return; } /* Register is on stack */ if (live.tos==live.spos[r]) return; p=live.spos[r]; q=live.onstack[live.tos]; emit_byte(0xd9); emit_byte(0xc8+live.tos-live.spos[r]); /* exchange it with top of stack */ live.onstack[live.tos]=r; live.spos[r]=live.tos; live.onstack[p]=q; live.spos[q]=p; } STATIC_INLINE int stackpos(int r) { if (live.spos[r]<0) abort(); if (live.tos=0) { /* source is on top of stack, and we already have the dest */ int dd=stackpos(d); emit_byte(0xdd); emit_byte(0xd0+dd); } else { emit_byte(0xd9); emit_byte(0xc0+ds); /* duplicate source on tos */ tos_make(d); /* store to destination, pop if necessary */ } } LENDFUNC(NONE,NONE,2,raw_fmov_rr,(FW d, FR s)) LOWFUNC(NONE,READ,2,raw_fldcw_m_indexed,(R4 index, IMM base)) { emit_byte(0xd9); emit_byte(0xa8+index); emit_long(base); } LENDFUNC(NONE,READ,2,raw_fldcw_m_indexed,(R4 index, IMM base)) LOWFUNC(NONE,NONE,2,raw_fsqrt_rr,(FW d, FR s)) { int ds; if (d!=s) { ds=stackpos(s); emit_byte(0xd9); emit_byte(0xc0+ds); /* fld x */ emit_byte(0xd9); emit_byte(0xfa); /* fsqrt sqrt(x) */ tos_make(d); /* store to destination */ } else { make_tos(d); emit_byte(0xd9); emit_byte(0xfa); /* fsqrt y=sqrt(x) */ } } LENDFUNC(NONE,NONE,2,raw_fsqrt_rr,(FW d, FR s)) LOWFUNC(NONE,NONE,2,raw_fabs_rr,(FW d, FR s)) { int ds; if (d!=s) { ds=stackpos(s); emit_byte(0xd9); emit_byte(0xc0+ds); /* fld x */ emit_byte(0xd9); emit_byte(0xe1); /* fabs abs(x) */ tos_make(d); /* store to destination */ } else { make_tos(d); emit_byte(0xd9); emit_byte(0xe1); /* fabs y=abs(x) */ } } LENDFUNC(NONE,NONE,2,raw_fabs_rr,(FW d, FR s)) LOWFUNC(NONE,NONE,2,raw_frndint_rr,(FW d, FR s)) { int ds; if (d!=s) { ds=stackpos(s); emit_byte(0xd9); emit_byte(0xc0+ds); /* fld x */ emit_byte(0xd9); emit_byte(0xfc); /* frndint int(x) */ tos_make(d); /* store to destination */ } else { make_tos(d); emit_byte(0xd9); emit_byte(0xfc); /* frndint y=int(x) */ } } LENDFUNC(NONE,NONE,2,raw_frndint_rr,(FW d, FR s)) LOWFUNC(NONE,NONE,2,raw_fgetexp_rr,(FW d, FR s)) { int ds; if (d!=s) { ds=stackpos(s); emit_byte(0xd9); emit_byte(0xc0+ds); /* fld x */ emit_byte(0xd9); emit_byte(0xf4); /* fxtract exp push man */ emit_byte(0xdd); emit_byte(0xd8); /* fstp just pop man */ tos_make(d); /* store exp to destination */ } else { make_tos(d); /* tos=x=y */ emit_byte(0xd9); emit_byte(0xf4); /* fxtract exp push man */ emit_byte(0xdd); emit_byte(0xd8); /* fstp just pop man */ } } LENDFUNC(NONE,NONE,2,raw_fgetexp_rr,(FW d, FR s)) LOWFUNC(NONE,NONE,2,raw_fgetman_rr,(FW d, FR s)) { int ds; if (d!=s) { ds=stackpos(s); emit_byte(0xd9); emit_byte(0xc0+ds); /* fld x */ emit_byte(0xd9); emit_byte(0xf4); /* fxtract exp push man */ emit_byte(0xdd); emit_byte(0xd9); /* fstp copy man up & pop */ tos_make(d); /* store man to destination */ } else { make_tos(d); /* tos=x=y */ emit_byte(0xd9); emit_byte(0xf4); /* fxtract exp push man */ emit_byte(0xdd); emit_byte(0xd9); /* fstp copy man up & pop */ } } LENDFUNC(NONE,NONE,2,raw_fgetman_rr,(FW d, FR s)) LOWFUNC(NONE,NONE,2,raw_fsin_rr,(FW d, FR s)) { int ds; if (d!=s) { ds=stackpos(s); emit_byte(0xd9); emit_byte(0xc0+ds); /* fld x */ emit_byte(0xd9); emit_byte(0xfe); /* fsin sin(x) */ tos_make(d); /* store to destination */ } else { make_tos(d); emit_byte(0xd9); emit_byte(0xfe); /* fsin y=sin(x) */ } } LENDFUNC(NONE,NONE,2,raw_fsin_rr,(FW d, FR s)) LOWFUNC(NONE,NONE,2,raw_fcos_rr,(FW d, FR s)) { int ds; if (d!=s) { ds=stackpos(s); emit_byte(0xd9); emit_byte(0xc0+ds); /* fld x */ emit_byte(0xd9); emit_byte(0xff); /* fcos cos(x) */ tos_make(d); /* store to destination */ } else { make_tos(d); emit_byte(0xd9); emit_byte(0xff); /* fcos y=cos(x) */ } } LENDFUNC(NONE,NONE,2,raw_fcos_rr,(FW d, FR s)) LOWFUNC(NONE,NONE,2,raw_ftan_rr,(FW d, FR s)) { int ds; if (d!=s) { ds=stackpos(s); emit_byte(0xd9); emit_byte(0xc0+ds); /* fld x */ emit_byte(0xd9); emit_byte(0xf2); /* fptan tan(x)=y/1.0 */ emit_byte(0xdd); emit_byte(0xd8); /* fstp pop 1.0 */ tos_make(d); /* store to destination */ } else { make_tos(d); emit_byte(0xd9); emit_byte(0xf2); /* fptan tan(x)=y/1.0 */ emit_byte(0xdd); emit_byte(0xd8); /* fstp pop 1.0 */ } } LENDFUNC(NONE,NONE,2,raw_ftan_rr,(FW d, FR s)) LOWFUNC(NONE,NONE,3,raw_fsincos_rr,(FW d, FW c, FR s)) { int ds; if (s==d) { //write_log (_T("FSINCOS src = dest\n")); make_tos(s); emit_byte(0xd9); emit_byte(0xfb); /* fsincos sin(x) push cos(x) */ tos_make(c); /* store cos(x) to c */ return; } ds=stackpos(s); emit_byte(0xd9); emit_byte(0xc0+ds); /* fld x */ emit_byte(0xd9); emit_byte(0xfb); /* fsincos sin(x) push cos(x) */ if (live.spos[c]<0) { if (live.spos[d]<0) { /* occupy both regs directly */ live.tos++; live.spos[d]=live.tos; live.onstack[live.tos]=d; /* sin(x) comes first */ live.tos++; live.spos[c]=live.tos; live.onstack[live.tos]=c; } else { emit_byte(0xd9); emit_byte(0xc9); /* fxch swap cos(x) with sin(x) */ emit_byte(0xdd); /* store sin(x) to d & pop */ emit_byte(0xd8+(live.tos+2)-live.spos[d]); live.tos++; /* occupy a reg for cos(x) here */ live.spos[c]=live.tos; live.onstack[live.tos]=c; } } else { emit_byte(0xdd); /* store cos(x) to c & pop */ emit_byte(0xd8+(live.tos+2)-live.spos[c]); tos_make(d); /* store sin(x) to destination */ } } LENDFUNC(NONE,NONE,3,raw_fsincos_rr,(FW d, FW c, FR s)) float one=1; LOWFUNC(NONE,NONE,2,raw_fscale_rr,(FRW d, FR s)) { int ds; if (live.spos[d]==live.tos && live.spos[s]==live.tos-1) { //write_log (_T("fscale found x in TOS-1 and y in TOS\n")); emit_byte(0xd9); emit_byte(0xfd); /* fscale y*(2^x) */ } else { make_tos(s); /* tos=x */ ds=stackpos(d); emit_byte(0xd9); emit_byte(0xc0+ds); /* fld y */ emit_byte(0xd9); emit_byte(0xfd); /* fscale y*(2^x) */ tos_make(d); /* store y=y*(2^x) */ } } LENDFUNC(NONE,NONE,2,raw_fscale_rr,(FRW d, FR s)) LOWFUNC(NONE,NONE,2,raw_ftwotox_rr,(FW d, FR s)) { int ds; ds=stackpos(s); emit_byte(0xd9); emit_byte(0xc0+ds); /* fld x */ emit_byte(0xd9); emit_byte(0xfc); /* frndint int(x) */ emit_byte(0xd9); emit_byte(0xc1+ds); /* fld x again */ emit_byte(0xd8); emit_byte(0xe1); /* fsub frac(x) = x - int(x) */ emit_byte(0xd9); emit_byte(0xf0); /* f2xm1 (2^frac(x))-1 */ emit_byte(0xd8); emit_byte(0x05); emit_long((uae_u32)&one); /* fadd (2^frac(x))-1 + 1 */ emit_byte(0xd9); emit_byte(0xfd); /* fscale (2^frac(x))*2^int(x) */ emit_byte(0xdd); emit_byte(0xd9); /* fstp copy & pop */ tos_make(d); /* store y=2^x */ } LENDFUNC(NONE,NONE,2,raw_ftwotox_rr,(FW d, FR s)) LOWFUNC(NONE,NONE,2,raw_fetox_rr,(FW d, FR s)) { int ds; if (s==d) make_tos(s); else { ds=stackpos(s); emit_byte(0xd9); emit_byte(0xc0+ds); /* fld x */ } emit_byte(0xd9); emit_byte(0xea); /* fldl2e log2(e) */ emit_byte(0xd8); emit_byte(0xc9); /* fmul x*log2(e) */ emit_byte(0xdd); emit_byte(0xd1); /* fst copy up */ emit_byte(0xd9); emit_byte(0xfc); /* frndint int(x*log2(e)) */ emit_byte(0xd9); emit_byte(0xc9); /* fxch swap top two elements */ emit_byte(0xd8); emit_byte(0xe1); /* fsub x*log2(e) - int(x*log2(e)) */ emit_byte(0xd9); emit_byte(0xf0); /* f2xm1 (2^frac(x))-1 */ emit_byte(0xd8); emit_byte(0x05); emit_long((uae_u32)&one); /* fadd (2^frac(x))-1 + 1 */ emit_byte(0xd9); emit_byte(0xfd); /* fscale (2^frac(x))*2^int(x*log2(e)) */ emit_byte(0xdd); emit_byte(0xd9); /* fstp copy & pop */ if (s!=d) tos_make(d); /* store y=e^x */ } LENDFUNC(NONE,NONE,2,raw_fetox_rr,(FW d, FR s)) LOWFUNC(NONE,NONE,2,raw_fetoxM1_rr,(FW d, FR s)) { int ds; if (s==d) make_tos(s); else { ds=stackpos(s); emit_byte(0xd9); emit_byte(0xc0+ds); /* fld x */ } emit_byte(0xd9); emit_byte(0xea); /* fldl2e log2(e) */ emit_byte(0xd8); emit_byte(0xc9); /* fmul x*log2(e) */ emit_byte(0xdd); emit_byte(0xd1); /* fst copy up */ emit_byte(0xd9); emit_byte(0xfc); /* frndint int(x*log2(e)) */ emit_byte(0xd9); emit_byte(0xc9); /* fxch swap top two elements */ emit_byte(0xd8); emit_byte(0xe1); /* fsub x*log2(e) - int(x*log2(e)) */ emit_byte(0xd9); emit_byte(0xf0); /* f2xm1 (2^frac(x))-1 */ emit_byte(0xd9); emit_byte(0xfd); /* fscale ((2^frac(x))-1)*2^int(x*log2(e)) */ emit_byte(0xdd); emit_byte(0xd9); /* fstp copy & pop */ if (s!=d) tos_make(d); /* store y=(e^x)-1 */ } LENDFUNC(NONE,NONE,2,raw_fetoxM1_rr,(FW d, FR s)) LOWFUNC(NONE,NONE,2,raw_ftentox_rr,(FW d, FR s)) { int ds; if (s==d) make_tos(s); else { ds=stackpos(s); emit_byte(0xd9); emit_byte(0xc0+ds); /* fld x */ } emit_byte(0xd9); emit_byte(0xe9); /* fldl2t log2(10) */ emit_byte(0xd8); emit_byte(0xc9); /* fmul x*log2(10) */ emit_byte(0xdd); emit_byte(0xd1); /* fst copy up */ emit_byte(0xd9); emit_byte(0xfc); /* frndint int(x*log2(10)) */ emit_byte(0xd9); emit_byte(0xc9); /* fxch swap top two elements */ emit_byte(0xd8); emit_byte(0xe1); /* fsub x*log2(10) - int(x*log2(10)) */ emit_byte(0xd9); emit_byte(0xf0); /* f2xm1 (2^frac(x))-1 */ emit_byte(0xd8); emit_byte(0x05); emit_long((uae_u32)&one); /* fadd (2^frac(x))-1 + 1 */ emit_byte(0xd9); emit_byte(0xfd); /* fscale (2^frac(x))*2^int(x*log2(10)) */ emit_byte(0xdd); emit_byte(0xd9); /* fstp copy & pop */ if (s!=d) tos_make(d); /* store y=10^x */ } LENDFUNC(NONE,NONE,2,raw_ftentox_rr,(FW d, FR s)) LOWFUNC(NONE,NONE,2,raw_flog2_rr,(FW d, FR s)) { int ds; if (s==d) make_tos(s); else { ds=stackpos(s); emit_byte(0xd9); emit_byte(0xc0+ds); /* fld x */ } emit_byte(0xd9); emit_byte(0xe8); /* fld1 1 */ emit_byte(0xd9); emit_byte(0xc9); /* fxch swap 1 with x */ emit_byte(0xd9); emit_byte(0xf1); /* fyl2x 1*log2(x) */ if (s!=d) tos_make(d); /* store y=log2(x) */ } LENDFUNC(NONE,NONE,2,raw_flog2_rr,(FW d, FR s)) LOWFUNC(NONE,NONE,2,raw_flogN_rr,(FW d, FR s)) { int ds; if (s==d) make_tos(s); else { ds=stackpos(s); emit_byte(0xd9); emit_byte(0xc0+ds); /* fld x */ } emit_byte(0xd9); emit_byte(0xed); /* fldln2 logN(2) */ emit_byte(0xd9); emit_byte(0xc9); /* fxch swap logN(2) with x */ emit_byte(0xd9); emit_byte(0xf1); /* fyl2x logN(2)*log2(x) */ if (s!=d) tos_make(d); /* store y=logN(x) */ } LENDFUNC(NONE,NONE,2,raw_flogN_rr,(FW d, FR s)) LOWFUNC(NONE,NONE,2,raw_flogNP1_rr,(FW d, FR s)) { int ds; if (s==d) make_tos(s); else { ds=stackpos(s); emit_byte(0xd9); emit_byte(0xc0+ds); /* fld x */ } emit_byte(0xd9); emit_byte(0xed); /* fldln2 logN(2) */ emit_byte(0xd9); emit_byte(0xc9); /* fxch swap logN(2) with x */ emit_byte(0xd9); emit_byte(0xf9); /* fyl2xp1 logN(2)*log2(x+1) */ if (s!=d) tos_make(d); /* store y=logN(x+1) */ } LENDFUNC(NONE,NONE,2,raw_flogNP1_rr,(FW d, FR s)) LOWFUNC(NONE,NONE,2,raw_flog10_rr,(FW d, FR s)) { int ds; if (s==d) make_tos(s); else { ds=stackpos(s); emit_byte(0xd9); emit_byte(0xc0+ds); /* fld x */ } emit_byte(0xd9); emit_byte(0xec); /* fldlg2 log10(2) */ emit_byte(0xd9); emit_byte(0xc9); /* fxch swap log10(2) with x */ emit_byte(0xd9); emit_byte(0xf1); /* fyl2x log10(2)*log2(x) */ if (s!=d) tos_make(d); /* store y=log10(x) */ } LENDFUNC(NONE,NONE,2,raw_flog10_rr,(FW d, FR s)) LOWFUNC(NONE,NONE,2,raw_fasin_rr,(FW d, FR s)) { int ds; ds=stackpos(s); emit_byte(0xd9); emit_byte(0xc0+ds); /* fld x */ emit_byte(0xd8); emit_byte(0xc8); /* fmul x*x */ emit_byte(0xd9); emit_byte(0xe8); /* fld 1.0 */ emit_byte(0xde); emit_byte(0xe1); /* fsubrp 1 - (x^2) */ emit_byte(0xd9); emit_byte(0xfa); /* fsqrt sqrt(1-(x^2)) */ emit_byte(0xd9); emit_byte(0xc1+ds); /* fld x again */ emit_byte(0xd9); emit_byte(0xc9); /* fxch swap x with sqrt(1-(x^2)) */ emit_byte(0xd9); emit_byte(0xf3); /* fpatan atan(x/sqrt(1-(x^2))) & pop */ tos_make(d); /* store y=asin(x) */ } LENDFUNC(NONE,NONE,2,raw_fasin_rr,(FW d, FR s)) static uae_u32 pihalf[] = {0x2168c234, 0xc90fdaa2, 0x3fff}; // LSB=0 to get acos(1)=0 LOWFUNC(NONE,NONE,2,raw_facos_rr,(FW d, FR s)) { int ds; ds=stackpos(s); emit_byte(0xd9); emit_byte(0xc0+ds); /* fld x */ emit_byte(0xd8); emit_byte(0xc8); /* fmul x*x */ emit_byte(0xd9); emit_byte(0xe8); /* fld 1.0 */ emit_byte(0xde); emit_byte(0xe1); /* fsubrp 1 - (x^2) */ emit_byte(0xd9); emit_byte(0xfa); /* fsqrt sqrt(1-(x^2)) */ emit_byte(0xd9); emit_byte(0xc1+ds); /* fld x again */ emit_byte(0xd9); emit_byte(0xc9); /* fxch swap x with sqrt(1-(x^2)) */ emit_byte(0xd9); emit_byte(0xf3); /* fpatan atan(x/sqrt(1-(x^2))) & pop */ emit_byte(0xdb); emit_byte(0x2d); emit_long((uae_u32)&pihalf); /* fld load pi/2 from pihalf */ emit_byte(0xde); emit_byte(0xe1); /* fsubrp pi/2 - asin(x) & pop */ tos_make(d); /* store y=acos(x) */ } LENDFUNC(NONE,NONE,2,raw_facos_rr,(FW d, FR s)) LOWFUNC(NONE,NONE,2,raw_fatan_rr,(FW d, FR s)) { int ds; if (s==d) make_tos(s); else { ds=stackpos(s); emit_byte(0xd9); emit_byte(0xc0+ds); /* fld x */ } emit_byte(0xd9); emit_byte(0xe8); /* fld 1.0 */ emit_byte(0xd9); emit_byte(0xf3); /* fpatan atan(x)/1 & pop*/ if (s!=d) tos_make(d); /* store y=atan(x) */ } LENDFUNC(NONE,NONE,2,raw_fatan_rr,(FW d, FR s)) LOWFUNC(NONE,NONE,2,raw_fatanh_rr,(FW d, FR s)) { int ds; ds=stackpos(s); emit_byte(0xd9); emit_byte(0xc0+ds); /* fld x */ emit_byte(0xd9); emit_byte(0xe8); /* fld 1.0 */ emit_byte(0xdc); emit_byte(0xc1); /* fadd 1 + x */ emit_byte(0xd8); emit_byte(0xe2+ds); /* fsub 1 - x */ emit_byte(0xde); emit_byte(0xf9); /* fdivp (1+x)/(1-x) */ emit_byte(0xd9); emit_byte(0xed); /* fldl2e logN(2) */ emit_byte(0xd9); emit_byte(0xc9); /* fxch swap logN(2) with (1+x)/(1-x) */ emit_byte(0xd9); emit_byte(0xf1); /* fyl2x logN(2)*log2((1+x)/(1-x)) pop */ emit_byte(0xd9); emit_byte(0xe8); /* fld 1.0 */ emit_byte(0xd9); emit_byte(0xe0); /* fchs -1.0 */ emit_byte(0xd9); emit_byte(0xc9); /* fxch swap */ emit_byte(0xd9); emit_byte(0xfd); /* fscale logN((1+x)/(1-x)) * 2^(-1) */ emit_byte(0xdd); emit_byte(0xd9); /* fstp copy & pop */ tos_make(d); /* store y=atanh(x) */ } LENDFUNC(NONE,NONE,2,raw_fatanh_rr,(FW d, FR s)) LOWFUNC(NONE,NONE,2,raw_fsinh_rr,(FW d, FR s)) { int ds,tr; tr=live.onstack[live.tos+3]; if (s==d) make_tos(s); else { ds=stackpos(s); emit_byte(0xd9); emit_byte(0xc0+ds); /* fld x */ } emit_byte(0xd9); emit_byte(0xea); /* fldl2e log2(e) */ emit_byte(0xd8); emit_byte(0xc9); /* fmul x*log2(e) */ emit_byte(0xdd); emit_byte(0xd1); /* fst copy x*log2(e) */ if (tr>=0) { emit_byte(0xd9); emit_byte(0xca); /* fxch swap with temp-reg */ emit_byte(0x83); emit_byte(0xc4); emit_byte(0xf4); /* add -12 to esp */ emit_byte(0xdb); emit_byte(0x3c); emit_byte(0x24); /* fstp store temp-reg to [esp] & pop */ } emit_byte(0xd9); emit_byte(0xe0); /* fchs -x*log2(e) */ emit_byte(0xd9); emit_byte(0xc0); /* fld -x*log2(e) again */ emit_byte(0xd9); emit_byte(0xfc); /* frndint int(-x*log2(e)) */ emit_byte(0xd9); emit_byte(0xc9); /* fxch swap */ emit_byte(0xd8); emit_byte(0xe1); /* fsub -x*log2(e) - int(-x*log2(e)) */ emit_byte(0xd9); emit_byte(0xf0); /* f2xm1 (2^frac(x))-1 */ emit_byte(0xd8); emit_byte(0x05); emit_long((uae_u32)&one); /* fadd (2^frac(x))-1 + 1 */ emit_byte(0xd9); emit_byte(0xfd); /* fscale (2^frac(x))*2^int(x*log2(e)) */ emit_byte(0xd9); emit_byte(0xca); /* fxch swap e^-x with x*log2(e) in tr */ emit_byte(0xdd); emit_byte(0xd1); /* fst copy x*log2(e) */ emit_byte(0xd9); emit_byte(0xfc); /* frndint int(x*log2(e)) */ emit_byte(0xd9); emit_byte(0xc9); /* fxch swap */ emit_byte(0xd8); emit_byte(0xe1); /* fsub x*log2(e) - int(x*log2(e)) */ emit_byte(0xd9); emit_byte(0xf0); /* f2xm1 (2^frac(x))-1 */ emit_byte(0xd8); emit_byte(0x05); emit_long((uae_u32)&one); /* fadd (2^frac(x))-1 + 1 */ emit_byte(0xd9); emit_byte(0xfd); /* fscale (2^frac(x))*2^int(x*log2(e)) */ emit_byte(0xdd); emit_byte(0xd9); /* fstp copy e^x & pop */ if (tr>=0) { emit_byte(0xdb); emit_byte(0x2c); emit_byte(0x24); /* fld load temp-reg from [esp] */ emit_byte(0x83); emit_byte(0xc4); emit_byte(0x0c); /* add +12 to esp */ emit_byte(0xd9); emit_byte(0xca); /* fxch swap temp-reg with e^-x in tr */ emit_byte(0xde); emit_byte(0xe9); /* fsubp (e^x)-(e^-x) */ } else { emit_byte(0xde); emit_byte(0xe1); /* fsubrp (e^x)-(e^-x) */ } emit_byte(0xd9); emit_byte(0xe8); /* fld 1.0 */ emit_byte(0xd9); emit_byte(0xe0); /* fchs -1.0 */ emit_byte(0xd9); emit_byte(0xc9); /* fxch swap */ emit_byte(0xd9); emit_byte(0xfd); /* fscale ((e^x)-(e^-x))/2 */ emit_byte(0xdd); emit_byte(0xd9); /* fstp copy & pop */ if (s!=d) tos_make(d); /* store y=sinh(x) */ } LENDFUNC(NONE,NONE,2,raw_fsinh_rr,(FW d, FR s)) LOWFUNC(NONE,NONE,2,raw_fcosh_rr,(FW d, FR s)) { int ds,tr; tr=live.onstack[live.tos+3]; if (s==d) make_tos(s); else { ds=stackpos(s); emit_byte(0xd9); emit_byte(0xc0+ds); /* fld x */ } emit_byte(0xd9); emit_byte(0xea); /* fldl2e log2(e) */ emit_byte(0xd8); emit_byte(0xc9); /* fmul x*log2(e) */ emit_byte(0xdd); emit_byte(0xd1); /* fst copy x*log2(e) */ if (tr>=0) { emit_byte(0xd9); emit_byte(0xca); /* fxch swap with temp-reg */ emit_byte(0x83); emit_byte(0xc4); emit_byte(0xf4); /* add -12 to esp */ emit_byte(0xdb); emit_byte(0x3c); emit_byte(0x24); /* fstp store temp-reg to [esp] & pop */ } emit_byte(0xd9); emit_byte(0xe0); /* fchs -x*log2(e) */ emit_byte(0xd9); emit_byte(0xc0); /* fld -x*log2(e) again */ emit_byte(0xd9); emit_byte(0xfc); /* frndint int(-x*log2(e)) */ emit_byte(0xd9); emit_byte(0xc9); /* fxch swap */ emit_byte(0xd8); emit_byte(0xe1); /* fsub -x*log2(e) - int(-x*log2(e)) */ emit_byte(0xd9); emit_byte(0xf0); /* f2xm1 (2^frac(x))-1 */ emit_byte(0xd8); emit_byte(0x05); emit_long((uae_u32)&one); /* fadd (2^frac(x))-1 + 1 */ emit_byte(0xd9); emit_byte(0xfd); /* fscale (2^frac(x))*2^int(x*log2(e)) */ emit_byte(0xd9); emit_byte(0xca); /* fxch swap e^-x with x*log2(e) in tr */ emit_byte(0xdd); emit_byte(0xd1); /* fst copy x*log2(e) */ emit_byte(0xd9); emit_byte(0xfc); /* frndint int(x*log2(e)) */ emit_byte(0xd9); emit_byte(0xc9); /* fxch swap */ emit_byte(0xd8); emit_byte(0xe1); /* fsub x*log2(e) - int(x*log2(e)) */ emit_byte(0xd9); emit_byte(0xf0); /* f2xm1 (2^frac(x))-1 */ emit_byte(0xd8); emit_byte(0x05); emit_long((uae_u32)&one); /* fadd (2^frac(x))-1 + 1 */ emit_byte(0xd9); emit_byte(0xfd); /* fscale (2^frac(x))*2^int(x*log2(e)) */ emit_byte(0xdd); emit_byte(0xd9); /* fstp copy e^x & pop */ if (tr>=0) { emit_byte(0xdb); emit_byte(0x2c); emit_byte(0x24); /* fld load temp-reg from [esp] */ emit_byte(0x83); emit_byte(0xc4); emit_byte(0x0c); /* add +12 to esp */ emit_byte(0xd9); emit_byte(0xca); /* fxch swap temp-reg with e^-x in tr */ } emit_byte(0xde); emit_byte(0xc1); /* faddp (e^x)+(e^-x) */ emit_byte(0xd9); emit_byte(0xe8); /* fld 1.0 */ emit_byte(0xd9); emit_byte(0xe0); /* fchs -1.0 */ emit_byte(0xd9); emit_byte(0xc9); /* fxch swap */ emit_byte(0xd9); emit_byte(0xfd); /* fscale ((e^x)+(e^-x))/2 */ emit_byte(0xdd); emit_byte(0xd9); /* fstp copy & pop */ if (s!=d) tos_make(d); /* store y=cosh(x) */ } LENDFUNC(NONE,NONE,2,raw_fcosh_rr,(FW d, FR s)) LOWFUNC(NONE,NONE,2,raw_ftanh_rr,(FW d, FR s)) { int ds,tr; tr=live.onstack[live.tos+3]; if (s==d) make_tos(s); else { ds=stackpos(s); emit_byte(0xd9); emit_byte(0xc0+ds); /* fld x */ } emit_byte(0xd9); emit_byte(0xea); /* fldl2e log2(e) */ emit_byte(0xd8); emit_byte(0xc9); /* fmul x*log2(e) */ emit_byte(0xdd); emit_byte(0xd1); /* fst copy x*log2(e) */ if (tr>=0) { emit_byte(0xd9); emit_byte(0xca); /* fxch swap with temp-reg */ emit_byte(0x83); emit_byte(0xc4); emit_byte(0xf4); /* add -12 to esp */ emit_byte(0xdb); emit_byte(0x3c); emit_byte(0x24); /* fstp store temp-reg to [esp] & pop */ } emit_byte(0xd9); emit_byte(0xe0); /* fchs -x*log2(e) */ emit_byte(0xd9); emit_byte(0xc0); /* fld -x*log2(e) again */ emit_byte(0xd9); emit_byte(0xfc); /* frndint int(-x*log2(e)) */ emit_byte(0xd9); emit_byte(0xc9); /* fxch swap */ emit_byte(0xd8); emit_byte(0xe1); /* fsub -x*log2(e) - int(-x*log2(e)) */ emit_byte(0xd9); emit_byte(0xf0); /* f2xm1 (2^frac(x))-1 */ emit_byte(0xd8); emit_byte(0x05); emit_long((uae_u32)&one); /* fadd (2^frac(x))-1 + 1 */ emit_byte(0xd9); emit_byte(0xfd); /* fscale (2^frac(x))*2^int(x*log2(e)) */ emit_byte(0xd9); emit_byte(0xca); /* fxch swap e^-x with x*log2(e) */ emit_byte(0xdd); emit_byte(0xd1); /* fst copy x*log2(e) */ emit_byte(0xd9); emit_byte(0xfc); /* frndint int(x*log2(e)) */ emit_byte(0xd9); emit_byte(0xc9); /* fxch swap */ emit_byte(0xd8); emit_byte(0xe1); /* fsub x*log2(e) - int(x*log2(e)) */ emit_byte(0xd9); emit_byte(0xf0); /* f2xm1 (2^frac(x))-1 */ emit_byte(0xd8); emit_byte(0x05); emit_long((uae_u32)&one); /* fadd (2^frac(x))-1 + 1 */ emit_byte(0xd9); emit_byte(0xfd); /* fscale (2^frac(x))*2^int(x*log2(e)) */ emit_byte(0xdd); emit_byte(0xd1); /* fst copy e^x */ emit_byte(0xd8); emit_byte(0xc2); /* fadd (e^x)+(e^-x) */ emit_byte(0xd9); emit_byte(0xca); /* fxch swap with e^-x */ emit_byte(0xde); emit_byte(0xe9); /* fsubp (e^x)-(e^-x) */ if (tr>=0) { emit_byte(0xdb); emit_byte(0x2c); emit_byte(0x24); /* fld load temp-reg from [esp] */ emit_byte(0x83); emit_byte(0xc4); emit_byte(0x0c); /* add +12 to esp */ emit_byte(0xd9); emit_byte(0xca); /* fxch swap temp-reg with e^-x in tr */ emit_byte(0xde); emit_byte(0xf9); /* fdivp ((e^x)-(e^-x))/((e^x)+(e^-x)) */ } else { emit_byte(0xde); emit_byte(0xf1); /* fdivrp ((e^x)-(e^-x))/((e^x)+(e^-x)) */ } if (s!=d) tos_make(d); /* store y=tanh(x) */ } LENDFUNC(NONE,NONE,2,raw_ftanh_rr,(FW d, FR s)) LOWFUNC(NONE,NONE,2,raw_fneg_rr,(FW d, FR s)) { int ds; if (d!=s) { ds=stackpos(s); emit_byte(0xd9); emit_byte(0xc0+ds); /* duplicate source */ emit_byte(0xd9); emit_byte(0xe0); /* take fchs */ tos_make(d); /* store to destination */ } else { make_tos(d); emit_byte(0xd9); emit_byte(0xe0); /* take fchs */ } } LENDFUNC(NONE,NONE,2,raw_fneg_rr,(FW d, FR s)) LOWFUNC(NONE,NONE,2,raw_fadd_rr,(FRW d, FR s)) { int ds; if (live.spos[s]==live.tos) { /* Source is on top of stack */ ds=stackpos(d); emit_byte(0xdc); emit_byte(0xc0+ds); /* add source to dest*/ } else { make_tos(d); ds=stackpos(s); emit_byte(0xd8); emit_byte(0xc0+ds); /* add source to dest*/ } } LENDFUNC(NONE,NONE,2,raw_fadd_rr,(FRW d, FR s)) LOWFUNC(NONE,NONE,2,raw_fsub_rr,(FRW d, FR s)) { int ds; if (live.spos[s]==live.tos) { /* Source is on top of stack */ ds=stackpos(d); emit_byte(0xdc); emit_byte(0xe8+ds); /* sub source from dest*/ } else { make_tos(d); ds=stackpos(s); emit_byte(0xd8); emit_byte(0xe0+ds); /* sub src from dest */ } } LENDFUNC(NONE,NONE,2,raw_fsub_rr,(FRW d, FR s)) LOWFUNC(NONE,NONE,2,raw_fcmp_rr,(FR d, FR s)) { int ds; make_tos(d); ds=stackpos(s); emit_byte(0xdd); emit_byte(0xe0+ds); /* cmp dest with source*/ } LENDFUNC(NONE,NONE,2,raw_fcmp_rr,(FR d, FR s)) LOWFUNC(NONE,NONE,2,raw_fmul_rr,(FRW d, FR s)) { int ds; if (live.spos[s]==live.tos) { /* Source is on top of stack */ ds=stackpos(d); emit_byte(0xdc); emit_byte(0xc8+ds); /* mul dest by source*/ } else { make_tos(d); ds=stackpos(s); emit_byte(0xd8); emit_byte(0xc8+ds); /* mul dest by source*/ } } LENDFUNC(NONE,NONE,2,raw_fmul_rr,(FRW d, FR s)) LOWFUNC(NONE,NONE,2,raw_fdiv_rr,(FRW d, FR s)) { int ds; if (live.spos[s]==live.tos) { /* Source is on top of stack */ ds=stackpos(d); emit_byte(0xdc); emit_byte(0xf8+ds); /* div dest by source */ } else { make_tos(d); ds=stackpos(s); emit_byte(0xd8); emit_byte(0xf0+ds); /* div dest by source*/ } } LENDFUNC(NONE,NONE,2,raw_fdiv_rr,(FRW d, FR s)) LOWFUNC(NONE,NONE,2,raw_frem_rr,(FRW d, FR s)) { int ds; if (live.spos[d]==live.tos && live.spos[s]==live.tos-1) { //write_log (_T("frem found x in TOS-1 and y in TOS\n")); emit_byte(0xd9); emit_byte(0xf8); /* fprem rem(y/x) */ } else { make_tos(s); /* tos=x */ ds=stackpos(d); emit_byte(0xd9); emit_byte(0xc0+ds); /* fld y */ emit_byte(0xd9); emit_byte(0xf8); /* fprem rem(y/x) */ tos_make(d); /* store y=rem(y/x) */ } } LENDFUNC(NONE,NONE,2,raw_frem_rr,(FRW d, FR s)) LOWFUNC(NONE,NONE,2,raw_frem1_rr,(FRW d, FR s)) { int ds; if (live.spos[d]==live.tos && live.spos[s]==live.tos-1) { //write_log (_T("frem1 found x in TOS-1 and y in TOS\n")); emit_byte(0xd9); emit_byte(0xf5); /* fprem1 rem1(y/x) */ } else { make_tos(s); /* tos=x */ ds=stackpos(d); emit_byte(0xd9); emit_byte(0xc0+ds); /* fld y */ emit_byte(0xd9); emit_byte(0xf5); /* fprem1 rem1(y/x) */ tos_make(d); /* store y=rem(y/x) */ } } LENDFUNC(NONE,NONE,2,raw_frem1_rr,(FRW d, FR s)) LOWFUNC(NONE,NONE,1,raw_ftst_r,(FR r)) { make_tos(r); emit_byte(0xd9); /* ftst */ emit_byte(0xe4); } LENDFUNC(NONE,NONE,1,raw_ftst_r,(FR r)) STATIC_INLINE void raw_fflags_into_flags(int r) { int p; usereg(r); p=stackpos(r); emit_byte(0xd9); emit_byte(0xee); /* Push 0 */ emit_byte(0xd9); emit_byte(0xc9+p); /* swap top two around */ if (have_cmov) { // gb-- fucomi is for P6 cores only, not K6-2 then... emit_byte(0xdb); emit_byte(0xe9+p); /* fucomi them */ } else { emit_byte(0xdd); emit_byte(0xe1+p); /* fucom them */ emit_byte(0x9b); emit_byte(0xdf); emit_byte(0xe0); /* fstsw ax */ raw_sahf(0); /* sahf */ } emit_byte(0xdd); emit_byte(0xd9+p); /* store value back, and get rid of 0 */ } fs-uae-2.2.3+dfsg/src/jit/compemu_support.cpp0000644000175000017500000037634012162366654021413 0ustar glaubitzglaubitz #define writemem_special writemem #define readmem_special readmem #define USE_MATCHSTATE 0 #include "sysconfig.h" #include "sysdeps.h" #if defined(JIT) #include "options.h" #include "events.h" #include "uae/memory.h" #include "custom.h" #include "newcpu.h" #include "comptbl.h" #include "compemu.h" #define NATMEM_OFFSETX (uae_u32)NATMEM_OFFSET // %%% BRIAN KING WAS HERE %%% extern bool canbang; //#include extern void jit_abort(const TCHAR*,...); compop_func *compfunctbl[65536]; compop_func *nfcompfunctbl[65536]; #ifdef NOFLAGS_SUPPORT compop_func *nfcpufunctbl[65536]; #endif uae_u8* comp_pc_p; uae_u8* start_pc_p; uae_u32 start_pc; uae_u32 current_block_pc_p; uae_u32 current_block_start_target; uae_u32 needed_flags; static uae_u32 next_pc_p; static uae_u32 taken_pc_p; static int branch_cc; int segvcount=0; int soft_flush_count=0; int hard_flush_count=0; int compile_count=0; int checksum_count=0; static uae_u8* current_compile_p=NULL; static uae_u8* max_compile_start; uae_u8* compiled_code=NULL; static uae_s32 reg_alloc_run; static int lazy_flush = 1; // Flag: lazy translation cache invalidation static int avoid_fpu = 1; // Flag: compile FPU instructions ? static int have_cmov = 0; // target has CMOV instructions ? static int have_rat_stall = 1; // target has partial register stalls ? const int tune_alignment = 1; // Tune code alignments for running CPU ? const int tune_nop_fillers = 1; // Tune no-op fillers for architecture static int setzflg_uses_bsf = 0; // setzflg virtual instruction can use native BSF instruction correctly? static int align_loops = 32; // Align the start of loops static int align_jumps = 32; // Align the start of jumps void* pushall_call_handler=NULL; static void* popall_do_nothing=NULL; static void* popall_exec_nostats=NULL; static void* popall_execute_normal=NULL; static void* popall_cache_miss=NULL; static void* popall_recompile_block=NULL; static void* popall_check_checksum=NULL; extern uae_u32 oink; extern unsigned long foink3; extern unsigned long foink; /* The 68k only ever executes from even addresses. So right now, we waste half the entries in this array UPDATE: We now use those entries to store the start of the linked lists that we maintain for each hash result. */ static cacheline cache_tags[TAGSIZE]; static int letit=0; static blockinfo* hold_bi[MAX_HOLD_BI]; static blockinfo* active; static blockinfo* dormant; op_properties prop[65536]; #ifdef NOFLAGS_SUPPORT /* 68040 */ extern const struct comptbl op_smalltbl_0_nf[]; #endif extern const struct comptbl op_smalltbl_0_comp_nf[]; extern const struct comptbl op_smalltbl_0_comp_ff[]; #ifdef NOFLAGS_SUPPORT /* 68020 + 68881 */ extern const struct cputbl op_smalltbl_1_nf[]; /* 68020 */ extern const struct cputbl op_smalltbl_2_nf[]; /* 68010 */ extern const struct cputbl op_smalltbl_3_nf[]; /* 68000 */ extern const struct cputbl op_smalltbl_4_nf[]; /* 68000 slow but compatible. */ extern const struct cputbl op_smalltbl_5_nf[]; #endif static void flush_icache_hard(uae_u32 ptr, int n); static bigstate live; static smallstate empty_ss; static smallstate default_ss; static int optlev; static int writereg(int r, int size); static void unlock(int r); static void setlock(int r); static int readreg_specific(int r, int size, int spec); static int writereg_specific(int r, int size, int spec); static void prepare_for_call_1(void); static void prepare_for_call_2(void); static void align_target(uae_u32 a); static uae_s32 nextused[VREGS]; static uae_u8 *popallspace; uae_u32 m68k_pc_offset; /* Some arithmetic operations can be optimized away if the operands are known to be constant. But that's only a good idea when the side effects they would have on the flags are not important. This variable indicates whether we need the side effects or not */ uae_u32 needflags=0; /* Flag handling is complicated. x86 instructions create flags, which quite often are exactly what we want. So at times, the "68k" flags are actually in the x86 flags. Then again, sometimes we do x86 instructions that clobber the x86 flags, but don't represent a corresponding m68k instruction. In that case, we have to save them. We used to save them to the stack, but now store them back directly into the regflags.cznv of the traditional emulation. Thus some odd names. So flags can be in either of two places (used to be three; boy were things complicated back then!); And either place can contain either valid flags or invalid trash (and on the stack, there was also the option of "nothing at all", now gone). A couple of variables keep track of the respective states. To make things worse, we might or might not be interested in the flags. by default, we are, but a call to dont_care_flags can change that until the next call to live_flags. If we are not, pretty much whatever is in the register and/or the native flags is seen as valid. */ STATIC_INLINE blockinfo* get_blockinfo(uae_u32 cl) { return cache_tags[cl+1].bi; } STATIC_INLINE blockinfo* get_blockinfo_addr(void* addr) { blockinfo* bi=get_blockinfo(cacheline(addr)); while (bi) { if (bi->pc_p==addr) return bi; bi=bi->next_same_cl; } return NULL; } /******************************************************************* * All sorts of list related functions for all of the lists * *******************************************************************/ STATIC_INLINE void remove_from_cl_list(blockinfo* bi) { uae_u32 cl=cacheline(bi->pc_p); if (bi->prev_same_cl_p) *(bi->prev_same_cl_p)=bi->next_same_cl; if (bi->next_same_cl) bi->next_same_cl->prev_same_cl_p=bi->prev_same_cl_p; if (cache_tags[cl+1].bi) cache_tags[cl].handler=cache_tags[cl+1].bi->handler_to_use; else cache_tags[cl].handler=(cpuop_func*)popall_execute_normal; } STATIC_INLINE void remove_from_list(blockinfo* bi) { if (bi->prev_p) *(bi->prev_p)=bi->next; if (bi->next) bi->next->prev_p=bi->prev_p; } STATIC_INLINE void remove_from_lists(blockinfo* bi) { remove_from_list(bi); remove_from_cl_list(bi); } STATIC_INLINE void add_to_cl_list(blockinfo* bi) { uae_u32 cl=cacheline(bi->pc_p); if (cache_tags[cl+1].bi) cache_tags[cl+1].bi->prev_same_cl_p=&(bi->next_same_cl); bi->next_same_cl=cache_tags[cl+1].bi; cache_tags[cl+1].bi=bi; bi->prev_same_cl_p=&(cache_tags[cl+1].bi); cache_tags[cl].handler=bi->handler_to_use; } STATIC_INLINE void raise_in_cl_list(blockinfo* bi) { remove_from_cl_list(bi); add_to_cl_list(bi); } STATIC_INLINE void add_to_active(blockinfo* bi) { if (active) active->prev_p=&(bi->next); bi->next=active; active=bi; bi->prev_p=&active; } STATIC_INLINE void add_to_dormant(blockinfo* bi) { if (dormant) dormant->prev_p=&(bi->next); bi->next=dormant; dormant=bi; bi->prev_p=&dormant; } STATIC_INLINE void remove_dep(dependency* d) { if (d->prev_p) *(d->prev_p)=d->next; if (d->next) d->next->prev_p=d->prev_p; d->prev_p=NULL; d->next=NULL; } /* This block's code is about to be thrown away, so it no longer depends on anything else */ STATIC_INLINE void remove_deps(blockinfo* bi) { remove_dep(&(bi->dep[0])); remove_dep(&(bi->dep[1])); } STATIC_INLINE void adjust_jmpdep(dependency* d, void* a) { *(d->jmp_off)=(uae_u32)a-((uae_u32)d->jmp_off+4); } /******************************************************************** * Soft flush handling support functions * ********************************************************************/ STATIC_INLINE void set_dhtu(blockinfo* bi, cpuop_func *dh) { //write_log (_T("JIT: bi is %p\n"),bi); if (dh!=bi->direct_handler_to_use) { dependency* x=bi->deplist; //write_log (_T("JIT: bi->deplist=%p\n"),bi->deplist); while (x) { //write_log (_T("JIT: x is %p\n"),x); //write_log (_T("JIT: x->next is %p\n"),x->next); //write_log (_T("JIT: x->prev_p is %p\n"),x->prev_p); if (x->jmp_off) { adjust_jmpdep(x, (void*) dh); } x=x->next; } bi->direct_handler_to_use=(cpuop_func*)dh; } } STATIC_INLINE void invalidate_block(blockinfo* bi) { int i; bi->optlevel=0; bi->count=currprefs.optcount[0]-1; bi->handler=NULL; bi->handler_to_use=(cpuop_func*)popall_execute_normal; bi->direct_handler=NULL; set_dhtu(bi,bi->direct_pen); bi->needed_flags=0xff; for (i=0;i<2;i++) { bi->dep[i].jmp_off=NULL; bi->dep[i].target=NULL; } remove_deps(bi); } STATIC_INLINE void create_jmpdep(blockinfo* bi, int i, uae_u32* jmpaddr, uae_u32 target) { blockinfo* tbi=get_blockinfo_addr((void*)target); Dif(!tbi) { jit_abort (_T("JIT: Could not create jmpdep!\n")); } bi->dep[i].jmp_off=jmpaddr; bi->dep[i].target=tbi; bi->dep[i].next=tbi->deplist; if (bi->dep[i].next) bi->dep[i].next->prev_p=&(bi->dep[i].next); bi->dep[i].prev_p=&(tbi->deplist); tbi->deplist=&(bi->dep[i]); } STATIC_INLINE void big_to_small_state(bigstate* b, smallstate* s) { int i; int count=0; for (i=0;inat[i].validsize=0; s->nat[i].dirtysize=0; if (b->nat[i].nholds) { int index=b->nat[i].nholds-1; int r=b->nat[i].holds[index]; s->nat[i].holds=r; s->nat[i].validsize=b->state[r].validsize; s->nat[i].dirtysize=b->state[r].dirtysize; count++; } } write_log (_T("JIT: count=%d\n"),count); for (i=0;inat[i].dirtysize=0; } } STATIC_INLINE void attached_state(blockinfo* bi) { bi->havestate=1; if (bi->direct_handler_to_use==bi->direct_handler) set_dhtu(bi,bi->direct_pen); bi->direct_handler=bi->direct_pen; bi->status=BI_TARGETTED; } STATIC_INLINE blockinfo* get_blockinfo_addr_new(void* addr, int setstate) { blockinfo* bi=get_blockinfo_addr(addr); int i; #if USE_OPTIMIZER if (reg_alloc_run) return NULL; #endif if (!bi) { for (i=0;ipc_p=(uae_u8*)addr; invalidate_block(bi); add_to_active(bi); add_to_cl_list(bi); } } } if (!bi) { jit_abort (_T("JIT: Looking for blockinfo, can't find free one\n")); } #if USE_MATCHSTATE if (setstate && !bi->havestate) { big_to_small_state(&live,&(bi->env)); attached_state(bi); } #endif return bi; } static void prepare_block(blockinfo* bi); STATIC_INLINE void alloc_blockinfos(void) { int i; blockinfo* bi; for (i=0;i>24)&0xff) | ((oldv>>8)&0xff00) | ((oldv<<8)&0xff0000) | ((oldv<<24)&0xff000000); } void set_target(uae_u8* t) { lopt_emit_all(); target=t; } STATIC_INLINE uae_u8* get_target_noopt(void) { return target; } STATIC_INLINE uae_u8* get_target(void) { lopt_emit_all(); return get_target_noopt(); } /******************************************************************** * Getting the information about the target CPU * ********************************************************************/ #include "compemu_raw_x86.cpp" /******************************************************************** * Flags status handling. EMIT TIME! * ********************************************************************/ static void bt_l_ri_noclobber(R4 r, IMM i); static void make_flags_live_internal(void) { if (live.flags_in_flags==VALID) return; Dif (live.flags_on_stack==TRASH) { jit_abort (_T("JIT: Want flags, got something on stack, but it is TRASH\n")); } if (live.flags_on_stack==VALID) { int tmp; tmp=readreg_specific(FLAGTMP,4,FLAG_NREG2); raw_reg_to_flags(tmp); unlock(tmp); live.flags_in_flags=VALID; return; } jit_abort (_T("JIT: Huh? live.flags_in_flags=%d, live.flags_on_stack=%d, but need to make live\n"), live.flags_in_flags,live.flags_on_stack); } static void flags_to_stack(void) { if (live.flags_on_stack==VALID) return; if (!live.flags_are_important) { live.flags_on_stack=VALID; return; } Dif (live.flags_in_flags!=VALID) jit_abort (_T("flags_to_stack != VALID")); else { int tmp; tmp=writereg_specific(FLAGTMP,4,FLAG_NREG1); raw_flags_to_reg(tmp); unlock(tmp); } live.flags_on_stack=VALID; } STATIC_INLINE void clobber_flags(void) { if (live.flags_in_flags==VALID && live.flags_on_stack!=VALID) flags_to_stack(); live.flags_in_flags=TRASH; } /* Prepare for leaving the compiled stuff */ STATIC_INLINE void flush_flags(void) { flags_to_stack(); return; } int touchcnt; /******************************************************************** * register allocation per block logging * ********************************************************************/ static uae_s8 vstate[VREGS]; static uae_s8 nstate[N_REGS]; #define L_UNKNOWN -127 #define L_UNAVAIL -1 #define L_NEEDED -2 #define L_UNNEEDED -3 STATIC_INLINE void log_startblock(void) { int i; for (i=0;i0) { free_nreg(bestreg); } if (isinreg(r)) { int rr=live.state[r].realreg; /* This will happen if we read a partially dirty register at a bigger size */ Dif (willclobber || live.state[r].validsize>=size) jit_abort (_T("willclobber || live.state[r].validsize>=size")); Dif (live.nat[rr].nholds!=1) jit_abort (_T("live.nat[rr].nholds!=1")); if (size==4 && live.state[r].validsize==2) { log_isused(bestreg); raw_mov_l_rm(bestreg,(uae_u32)live.state[r].mem); raw_bswap_32(bestreg); raw_zero_extend_16_rr(rr,rr); raw_zero_extend_16_rr(bestreg,bestreg); raw_bswap_32(bestreg); raw_lea_l_rr_indexed(rr,rr,bestreg); live.state[r].validsize=4; live.nat[rr].touched=touchcnt++; return rr; } if (live.state[r].validsize==1) { /* Nothing yet */ } evict(r); } if (!willclobber) { if (live.state[r].status!=UNDEF) { if (isconst(r)) { raw_mov_l_ri(bestreg,live.state[r].val); live.state[r].val=0; live.state[r].dirtysize=4; set_status(r,DIRTY); log_isused(bestreg); } else { if (r==FLAGTMP) raw_load_flagreg(bestreg,r); else if (r==FLAGX) raw_load_flagx(bestreg,r); else { raw_mov_l_rm(bestreg,(uae_u32)live.state[r].mem); } live.state[r].dirtysize=0; set_status(r,CLEAN); log_isreg(bestreg,r); } } else { live.state[r].val=0; live.state[r].dirtysize=0; set_status(r,CLEAN); log_isused(bestreg); } live.state[r].validsize=4; } else { /* this is the easiest way, but not optimal. FIXME! */ /* Now it's trickier, but hopefully still OK */ if (!isconst(r) || size==4) { live.state[r].validsize=size; live.state[r].dirtysize=size; live.state[r].val=0; set_status(r,DIRTY); if (size==4) log_isused(bestreg); else log_isreg(bestreg,r); } else { if (live.state[r].status!=UNDEF) raw_mov_l_ri(bestreg,live.state[r].val); live.state[r].val=0; live.state[r].validsize=4; live.state[r].dirtysize=4; set_status(r,DIRTY); log_isused(bestreg); } } live.state[r].realreg=bestreg; live.state[r].realind=live.nat[bestreg].nholds; live.nat[bestreg].touched=touchcnt++; live.nat[bestreg].holds[live.nat[bestreg].nholds]=r; live.nat[bestreg].nholds++; return bestreg; } static int alloc_reg(int r, int size, int willclobber) { return alloc_reg_hinted(r,size,willclobber,-1); } static void unlock(int r) { Dif (!live.nat[r].locked) jit_abort (_T("unlock %d not locked"), r); live.nat[r].locked--; } static void setlock(int r) { live.nat[r].locked++; } static void mov_nregs(int d, int s) { int ns=live.nat[s].nholds; int nd=live.nat[d].nholds; int i; if (s==d) return; if (nd>0) free_nreg(d); raw_mov_l_rr(d,s); log_isused(d); for (i=0;i=size) { n=live.state[r].realreg; switch(size) { case 1: if (live.nat[n].canbyte || spec>=0) { answer=n; } break; case 2: if (live.nat[n].canword || spec>=0) { answer=n; } break; case 4: answer=n; break; default: abort(); } if (answer<0) evict(r); } /* either the value was in memory to start with, or it was evicted and is in memory now */ if (answer<0) { answer=alloc_reg_hinted(r,spec>=0?4:size,0,spec); } if (spec>=0 && spec!=answer) { /* Too bad */ mov_nregs(spec,answer); answer=spec; } live.nat[answer].locked++; live.nat[answer].touched=touchcnt++; return answer; } static int readreg(int r, int size) { return readreg_general(r,size,-1,0); } static int readreg_specific(int r, int size, int spec) { return readreg_general(r,size,spec,0); } static int readreg_offset(int r, int size) { return readreg_general(r,size,-1,1); } STATIC_INLINE int writereg_general(int r, int size, int spec) { int n; int answer=-1; if (size<4) { remove_offset(r,spec); } make_exclusive(r,size,spec); if (isinreg(r)) { int nvsize=size>live.state[r].validsize?size:live.state[r].validsize; int ndsize=size>live.state[r].dirtysize?size:live.state[r].dirtysize; n=live.state[r].realreg; Dif (live.nat[n].nholds!=1) jit_abort (_T("live.nat[%d].nholds!=1"), n); switch(size) { case 1: if (live.nat[n].canbyte || spec>=0) { live.state[r].dirtysize=ndsize; live.state[r].validsize=nvsize; answer=n; } break; case 2: if (live.nat[n].canword || spec>=0) { live.state[r].dirtysize=ndsize; live.state[r].validsize=nvsize; answer=n; } break; case 4: live.state[r].dirtysize=ndsize; live.state[r].validsize=nvsize; answer=n; break; default: abort(); } if (answer<0) evict(r); } /* either the value was in memory to start with, or it was evicted and is in memory now */ if (answer<0) { answer=alloc_reg_hinted(r,size,1,spec); } if (spec>=0 && spec!=answer) { mov_nregs(spec,answer); answer=spec; } if (live.state[r].status==UNDEF) live.state[r].validsize=4; live.state[r].dirtysize=size>live.state[r].dirtysize?size:live.state[r].dirtysize; live.state[r].validsize=size>live.state[r].validsize?size:live.state[r].validsize; live.nat[answer].locked++; live.nat[answer].touched=touchcnt++; if (size==4) { live.state[r].val=0; } else { Dif (live.state[r].val) { jit_abort (_T("JIT: Problem with val\n")); } } set_status(r,DIRTY); return answer; } static int writereg(int r, int size) { return writereg_general(r,size,-1); } static int writereg_specific(int r, int size, int spec) { return writereg_general(r,size,spec); } STATIC_INLINE int rmw_general(int r, int wsize, int rsize, int spec) { int n; int answer=-1; if (live.state[r].status==UNDEF) { write_log (_T("JIT: WARNING: Unexpected read of undefined register %d\n"),r); } remove_offset(r,spec); make_exclusive(r,0,spec); Dif (wsize=rsize) { n=live.state[r].realreg; Dif (live.nat[n].nholds!=1) jit_abort (_T("live.nat[n].nholds!=1"), n); switch(rsize) { case 1: if (live.nat[n].canbyte || spec>=0) { answer=n; } break; case 2: if (live.nat[n].canword || spec>=0) { answer=n; } break; case 4: answer=n; break; default: abort(); } if (answer<0) evict(r); } /* either the value was in memory to start with, or it was evicted and is in memory now */ if (answer<0) { answer=alloc_reg_hinted(r,spec>=0?4:rsize,0,spec); } if (spec>=0 && spec!=answer) { /* Too bad */ mov_nregs(spec,answer); answer=spec; } if (wsize>live.state[r].dirtysize) live.state[r].dirtysize=wsize; if (wsize>live.state[r].validsize) live.state[r].validsize=wsize; set_status(r,DIRTY); live.nat[answer].locked++; live.nat[answer].touched=touchcnt++; Dif (live.state[r].val) { jit_abort (_T("JIT: Problem with val(rmw)\n")); } return answer; } static int rmw(int r, int wsize, int rsize) { return rmw_general(r,wsize,rsize,-1); } static int rmw_specific(int r, int wsize, int rsize, int spec) { return rmw_general(r,wsize,rsize,spec); } /* needed for restoring the carry flag on non-P6 cores */ static void bt_l_ri_noclobber(R4 r, IMM i) { int size=4; if (i<16) size=2; r=readreg(r,size); raw_bt_l_ri(r,i); unlock(r); } /******************************************************************** * FPU register status handling. EMIT TIME! * ********************************************************************/ static void f_tomem(int r) { if (live.fate[r].status==DIRTY) { #if USE_LONG_DOUBLE raw_fmov_ext_mr((uae_u32)live.fate[r].mem,live.fate[r].realreg); #else raw_fmov_mr((uae_u32)live.fate[r].mem,live.fate[r].realreg); #endif live.fate[r].status=CLEAN; } } static void f_tomem_drop(int r) { if (live.fate[r].status==DIRTY) { #if USE_LONG_DOUBLE raw_fmov_ext_mr_drop((uae_u32)live.fate[r].mem,live.fate[r].realreg); #else raw_fmov_mr_drop((uae_u32)live.fate[r].mem,live.fate[r].realreg); #endif live.fate[r].status=INMEM; } } STATIC_INLINE int f_isinreg(int r) { return live.fate[r].status==CLEAN || live.fate[r].status==DIRTY; } static void f_evict(int r) { int rr; if (!f_isinreg(r)) return; rr=live.fate[r].realreg; if (live.fat[rr].nholds==1) f_tomem_drop(r); else f_tomem(r); Dif (live.fat[rr].locked && live.fat[rr].nholds==1) { jit_abort (_T("JIT: FPU register %d in nreg %d is locked!\n"),r,live.fate[r].realreg); } live.fat[rr].nholds--; if (live.fat[rr].nholds!=live.fate[r].realind) { /* Was not last */ int topreg=live.fat[rr].holds[live.fat[rr].nholds]; int thisind=live.fate[r].realind; live.fat[rr].holds[thisind]=topreg; live.fate[topreg].realind=thisind; } live.fate[r].status=INMEM; live.fate[r].realreg=-1; } STATIC_INLINE void f_free_nreg(int r) { int i=live.fat[r].nholds; while (i) { int vr; --i; vr=live.fat[r].holds[i]; f_evict(vr); } Dif (live.fat[r].nholds!=0) { jit_abort (_T("JIT: Failed to free nreg %d, nholds is %d\n"),r,live.fat[r].nholds); } } /* Use with care! */ STATIC_INLINE void f_isclean(int r) { if (!f_isinreg(r)) return; live.fate[r].status=CLEAN; } STATIC_INLINE void f_disassociate(int r) { f_isclean(r); f_evict(r); } static int f_alloc_reg(int r, int willclobber) { int bestreg; uae_s32 when; int i; uae_s32 badness; bestreg=-1; when=2000000000; for (i=N_FREGS;i--;) { badness=live.fat[i].touched; if (live.fat[i].nholds==0) badness=0; if (!live.fat[i].locked && badness0) { f_free_nreg(bestreg); } if (f_isinreg(r)) { f_evict(r); } if (!willclobber) { if (live.fate[r].status!=UNDEF) { #if USE_LONG_DOUBLE raw_fmov_ext_rm(bestreg,(uae_u32)live.fate[r].mem); #else raw_fmov_rm(bestreg,(uae_u32)live.fate[r].mem); #endif } live.fate[r].status=CLEAN; } else { live.fate[r].status=DIRTY; } live.fate[r].realreg=bestreg; live.fate[r].realind=live.fat[bestreg].nholds; live.fat[bestreg].touched=touchcnt++; live.fat[bestreg].holds[live.fat[bestreg].nholds]=r; live.fat[bestreg].nholds++; return bestreg; } static void f_unlock(int r) { Dif (!live.fat[r].locked) jit_abort (_T("unlock %d"), r); live.fat[r].locked--; } static void f_setlock(int r) { live.fat[r].locked++; } STATIC_INLINE int f_readreg(int r) { int n; int answer=-1; if (f_isinreg(r)) { n=live.fate[r].realreg; answer=n; } /* either the value was in memory to start with, or it was evicted and is in memory now */ if (answer<0) answer=f_alloc_reg(r,0); live.fat[answer].locked++; live.fat[answer].touched=touchcnt++; return answer; } STATIC_INLINE void f_make_exclusive(int r, int clobber) { freg_status oldstate; int rr=live.fate[r].realreg; int nr; int nind; int ndirt=0; int i; if (!f_isinreg(r)) return; if (live.fat[rr].nholds==1) return; for (i=0;i>=i; return; } CLOBBER_SHRL; r=rmw(r,4,4); raw_shrl_l_ri(r,i); unlock(r); } MENDFUNC(2,shrl_l_ri,(RW4 r, IMM i)) MIDFUNC(2,shrl_w_ri,(RW2 r, IMM i)) { if (!i && !needflags) return; CLOBBER_SHRL; r=rmw(r,2,2); raw_shrl_w_ri(r,i); unlock(r); } MENDFUNC(2,shrl_w_ri,(RW2 r, IMM i)) MIDFUNC(2,shrl_b_ri,(RW1 r, IMM i)) { if (!i && !needflags) return; CLOBBER_SHRL; r=rmw(r,1,1); raw_shrl_b_ri(r,i); unlock(r); } MENDFUNC(2,shrl_b_ri,(RW1 r, IMM i)) MIDFUNC(2,shra_l_ri,(RW4 r, IMM i)) { if (!i && !needflags) return; CLOBBER_SHRA; r=rmw(r,4,4); raw_shra_l_ri(r,i); unlock(r); } MENDFUNC(2,shra_l_ri,(RW4 r, IMM i)) MIDFUNC(2,shra_w_ri,(RW2 r, IMM i)) { if (!i && !needflags) return; CLOBBER_SHRA; r=rmw(r,2,2); raw_shra_w_ri(r,i); unlock(r); } MENDFUNC(2,shra_w_ri,(RW2 r, IMM i)) MIDFUNC(2,shra_b_ri,(RW1 r, IMM i)) { if (!i && !needflags) return; CLOBBER_SHRA; r=rmw(r,1,1); raw_shra_b_ri(r,i); unlock(r); } MENDFUNC(2,shra_b_ri,(RW1 r, IMM i)) MIDFUNC(2,shra_l_rr,(RW4 d, R1 r)) { if (isconst(r)) { COMPCALL(shra_l_ri)(d,(uae_u8)live.state[r].val); return; } CLOBBER_SHRA; r=readreg_specific(r,1,SHIFTCOUNT_NREG); d=rmw(d,4,4); Dif (r!=1) { jit_abort (_T("JIT: Illegal register %d in raw_rol_b\n"),r); } raw_shra_l_rr(d,r) ; unlock(r); unlock(d); } MENDFUNC(2,shra_l_rr,(RW4 d, R1 r)) MIDFUNC(2,shra_w_rr,(RW2 d, R1 r)) { /* Can only do this with r==1, i.e. cl */ if (isconst(r)) { COMPCALL(shra_w_ri)(d,(uae_u8)live.state[r].val); return; } CLOBBER_SHRA; r=readreg_specific(r,1,SHIFTCOUNT_NREG); d=rmw(d,2,2); Dif (r!=1) { jit_abort (_T("JIT: Illegal register %d in raw_shra_b\n"),r); } raw_shra_w_rr(d,r) ; unlock(r); unlock(d); } MENDFUNC(2,shra_w_rr,(RW2 d, R1 r)) MIDFUNC(2,shra_b_rr,(RW1 d, R1 r)) { /* Can only do this with r==1, i.e. cl */ if (isconst(r)) { COMPCALL(shra_b_ri)(d,(uae_u8)live.state[r].val); return; } CLOBBER_SHRA; r=readreg_specific(r,1,SHIFTCOUNT_NREG); d=rmw(d,1,1); Dif (r!=1) { jit_abort (_T("JIT: Illegal register %d in raw_shra_b\n"),r); } raw_shra_b_rr(d,r) ; unlock(r); unlock(d); } MENDFUNC(2,shra_b_rr,(RW1 d, R1 r)) MIDFUNC(2,setcc,(W1 d, IMM cc)) { CLOBBER_SETCC; d=writereg(d,1); raw_setcc(d,cc); unlock(d); } MENDFUNC(2,setcc,(W1 d, IMM cc)) MIDFUNC(2,setcc_m,(IMM d, IMM cc)) { CLOBBER_SETCC; raw_setcc_m(d,cc); } MENDFUNC(2,setcc_m,(IMM d, IMM cc)) MIDFUNC(3,cmov_b_rr,(RW1 d, R1 s, IMM cc)) { if (d==s) return; CLOBBER_CMOV; s=readreg(s,1); d=rmw(d,1,1); raw_cmov_b_rr(d,s,cc); unlock(s); unlock(d); } MENDFUNC(3,cmov_b_rr,(RW1 d, R1 s, IMM cc)) MIDFUNC(3,cmov_w_rr,(RW2 d, R2 s, IMM cc)) { if (d==s) return; CLOBBER_CMOV; s=readreg(s,2); d=rmw(d,2,2); raw_cmov_w_rr(d,s,cc); unlock(s); unlock(d); } MENDFUNC(3,cmov_w_rr,(RW2 d, R2 s, IMM cc)) MIDFUNC(3,cmov_l_rr,(RW4 d, R4 s, IMM cc)) { if (d==s) return; CLOBBER_CMOV; s=readreg(s,4); d=rmw(d,4,4); raw_cmov_l_rr(d,s,cc); unlock(s); unlock(d); } MENDFUNC(3,cmov_l_rr,(RW4 d, R4 s, IMM cc)) MIDFUNC(1,setzflg_l,(RW4 r)) { if (setzflg_uses_bsf) { CLOBBER_BSF; r=rmw(r,4,4); raw_bsf_l_rr(r,r); unlock(r); } else { Dif (live.flags_in_flags!=VALID) { jit_abort (_T("JIT: setzflg() wanted flags in native flags, they are %d\n"), live.flags_in_flags); } r=readreg(r,4); { int f=writereg(S11,4); int t=writereg(S12,4); raw_flags_set_zero(f,r,t); unlock(f); unlock(r); unlock(t); } } } MENDFUNC(1,setzflg_l,(RW4 r)) MIDFUNC(3,cmov_l_rm,(RW4 d, IMM s, IMM cc)) { CLOBBER_CMOV; d=rmw(d,4,4); raw_cmov_l_rm(d,s,cc); unlock(d); } MENDFUNC(3,cmov_l_rm,(RW4 d, IMM s, IMM cc)) MIDFUNC(2,bsf_l_rr,(W4 d, R4 s)) { CLOBBER_BSF; s=readreg(s,4); d=writereg(d,4); raw_bsf_l_rr(d,s); unlock(s); unlock(d); } MENDFUNC(2,bsf_l_rr,(W4 d, R4 s)) MIDFUNC(2,imul_32_32,(RW4 d, R4 s)) { CLOBBER_MUL; s=readreg(s,4); d=rmw(d,4,4); raw_imul_32_32(d,s); unlock(s); unlock(d); } MENDFUNC(2,imul_32_32,(RW4 d, R4 s)) MIDFUNC(2,imul_64_32,(RW4 d, RW4 s)) { CLOBBER_MUL; s=rmw_specific(s,4,4,MUL_NREG2); d=rmw_specific(d,4,4,MUL_NREG1); raw_imul_64_32(d,s); unlock(s); unlock(d); } MENDFUNC(2,imul_64_32,(RW4 d, RW4 s)) MIDFUNC(2,mul_64_32,(RW4 d, RW4 s)) { CLOBBER_MUL; s=rmw_specific(s,4,4,MUL_NREG2); d=rmw_specific(d,4,4,MUL_NREG1); raw_mul_64_32(d,s); unlock(s); unlock(d); } MENDFUNC(2,mul_64_32,(RW4 d, RW4 s)) MIDFUNC(2,sign_extend_16_rr,(W4 d, R2 s)) { int isrmw; if (isconst(s)) { set_const(d,(uae_s32)(uae_s16)live.state[s].val); return; } CLOBBER_SE16; isrmw=(s==d); if (!isrmw) { s=readreg(s,2); d=writereg(d,4); } else { /* If we try to lock this twice, with different sizes, we are int trouble! */ s=d=rmw(s,4,2); } raw_sign_extend_16_rr(d,s); if (!isrmw) { unlock(d); unlock(s); } else { unlock(s); } } MENDFUNC(2,sign_extend_16_rr,(W4 d, R2 s)) MIDFUNC(2,sign_extend_8_rr,(W4 d, R1 s)) { int isrmw; if (isconst(s)) { set_const(d,(uae_s32)(uae_s8)live.state[s].val); return; } isrmw=(s==d); CLOBBER_SE8; if (!isrmw) { s=readreg(s,1); d=writereg(d,4); } else { /* If we try to lock this twice, with different sizes, we are int trouble! */ s=d=rmw(s,4,1); } raw_sign_extend_8_rr(d,s); if (!isrmw) { unlock(d); unlock(s); } else { unlock(s); } } MENDFUNC(2,sign_extend_8_rr,(W4 d, R1 s)) MIDFUNC(2,zero_extend_16_rr,(W4 d, R2 s)) { int isrmw; if (isconst(s)) { set_const(d,(uae_u32)(uae_u16)live.state[s].val); return; } isrmw=(s==d); CLOBBER_ZE16; if (!isrmw) { s=readreg(s,2); d=writereg(d,4); } else { /* If we try to lock this twice, with different sizes, we are int trouble! */ s=d=rmw(s,4,2); } raw_zero_extend_16_rr(d,s); if (!isrmw) { unlock(d); unlock(s); } else { unlock(s); } } MENDFUNC(2,zero_extend_16_rr,(W4 d, R2 s)) MIDFUNC(2,zero_extend_8_rr,(W4 d, R1 s)) { int isrmw; if (isconst(s)) { set_const(d,(uae_u32)(uae_u8)live.state[s].val); return; } isrmw=(s==d); CLOBBER_ZE8; if (!isrmw) { s=readreg(s,1); d=writereg(d,4); } else { /* If we try to lock this twice, with different sizes, we are int trouble! */ s=d=rmw(s,4,1); } raw_zero_extend_8_rr(d,s); if (!isrmw) { unlock(d); unlock(s); } else { unlock(s); } } MENDFUNC(2,zero_extend_8_rr,(W4 d, R1 s)) MIDFUNC(2,mov_b_rr,(W1 d, R1 s)) { if (d==s) return; if (isconst(s)) { COMPCALL(mov_b_ri)(d,(uae_u8)live.state[s].val); return; } CLOBBER_MOV; s=readreg(s,1); d=writereg(d,1); raw_mov_b_rr(d,s); unlock(d); unlock(s); } MENDFUNC(2,mov_b_rr,(W1 d, R1 s)) MIDFUNC(2,mov_w_rr,(W2 d, R2 s)) { if (d==s) return; if (isconst(s)) { COMPCALL(mov_w_ri)(d,(uae_u16)live.state[s].val); return; } CLOBBER_MOV; s=readreg(s,2); d=writereg(d,2); raw_mov_w_rr(d,s); unlock(d); unlock(s); } MENDFUNC(2,mov_w_rr,(W2 d, R2 s)) MIDFUNC(3,mov_l_rrm_indexed,(W4 d,R4 baser, R4 index)) { CLOBBER_MOV; baser=readreg(baser,4); index=readreg(index,4); d=writereg(d,4); raw_mov_l_rrm_indexed(d,baser,index); unlock(d); unlock(baser); unlock(index); } MENDFUNC(3,mov_l_rrm_indexed,(W4 d,R4 baser, R4 index)) MIDFUNC(3,mov_w_rrm_indexed,(W2 d, R4 baser, R4 index)) { CLOBBER_MOV; baser=readreg(baser,4); index=readreg(index,4); d=writereg(d,2); raw_mov_w_rrm_indexed(d,baser,index); unlock(d); unlock(baser); unlock(index); } MENDFUNC(3,mov_w_rrm_indexed,(W2 d, R4 baser, R4 index)) MIDFUNC(3,mov_b_rrm_indexed,(W1 d, R4 baser, R4 index)) { CLOBBER_MOV; baser=readreg(baser,4); index=readreg(index,4); d=writereg(d,1); raw_mov_b_rrm_indexed(d,baser,index); unlock(d); unlock(baser); unlock(index); } MENDFUNC(3,mov_b_rrm_indexed,(W1 d, R4 baser, R4 index)) MIDFUNC(3,mov_l_mrr_indexed,(R4 baser, R4 index, R4 s)) { CLOBBER_MOV; baser=readreg(baser,4); index=readreg(index,4); s=readreg(s,4); Dif (baser==s || index==s) jit_abort (_T("mov_l_mrr_indexed")); raw_mov_l_mrr_indexed(baser,index,s); unlock(s); unlock(baser); unlock(index); } MENDFUNC(3,mov_l_mrr_indexed,(R4 baser, R4 index, R4 s)) MIDFUNC(3,mov_w_mrr_indexed,(R4 baser, R4 index, R2 s)) { CLOBBER_MOV; baser=readreg(baser,4); index=readreg(index,4); s=readreg(s,2); raw_mov_w_mrr_indexed(baser,index,s); unlock(s); unlock(baser); unlock(index); } MENDFUNC(3,mov_w_mrr_indexed,(R4 baser, R4 index, R2 s)) MIDFUNC(3,mov_b_mrr_indexed,(R4 baser, R4 index, R1 s)) { CLOBBER_MOV; s=readreg(s,1); baser=readreg(baser,4); index=readreg(index,4); raw_mov_b_mrr_indexed(baser,index,s); unlock(s); unlock(baser); unlock(index); } MENDFUNC(3,mov_b_mrr_indexed,(R4 baser, R4 index, R1 s)) /* Read a long from base+4*index */ MIDFUNC(3,mov_l_rm_indexed,(W4 d, IMM base, R4 index)) { int indexreg=index; if (isconst(index)) { COMPCALL(mov_l_rm)(d,base+4*live.state[index].val); return; } CLOBBER_MOV; index=readreg_offset(index,4); base+=get_offset(indexreg)*4; d=writereg(d,4); raw_mov_l_rm_indexed(d,base,index); unlock(index); unlock(d); } MENDFUNC(3,mov_l_rm_indexed,(W4 d, IMM base, R4 index)) /* read the long at the address contained in s+offset and store in d */ MIDFUNC(3,mov_l_rR,(W4 d, R4 s, IMM offset)) { if (isconst(s)) { COMPCALL(mov_l_rm)(d,live.state[s].val+offset); return; } CLOBBER_MOV; s=readreg(s,4); d=writereg(d,4); raw_mov_l_rR(d,s,offset); unlock(d); unlock(s); } MENDFUNC(3,mov_l_rR,(W4 d, R4 s, IMM offset)) /* read the word at the address contained in s+offset and store in d */ MIDFUNC(3,mov_w_rR,(W2 d, R4 s, IMM offset)) { if (isconst(s)) { COMPCALL(mov_w_rm)(d,live.state[s].val+offset); return; } CLOBBER_MOV; s=readreg(s,4); d=writereg(d,2); raw_mov_w_rR(d,s,offset); unlock(d); unlock(s); } MENDFUNC(3,mov_w_rR,(W2 d, R4 s, IMM offset)) /* read the word at the address contained in s+offset and store in d */ MIDFUNC(3,mov_b_rR,(W1 d, R4 s, IMM offset)) { if (isconst(s)) { COMPCALL(mov_b_rm)(d,live.state[s].val+offset); return; } CLOBBER_MOV; s=readreg(s,4); d=writereg(d,1); raw_mov_b_rR(d,s,offset); unlock(d); unlock(s); } MENDFUNC(3,mov_b_rR,(W1 d, R4 s, IMM offset)) /* read the long at the address contained in s+offset and store in d */ MIDFUNC(3,mov_l_brR,(W4 d, R4 s, IMM offset)) { int sreg=s; if (isconst(s)) { COMPCALL(mov_l_rm)(d,live.state[s].val+offset); return; } CLOBBER_MOV; s=readreg_offset(s,4); offset+=get_offset(sreg); d=writereg(d,4); raw_mov_l_brR(d,s,offset); unlock(d); unlock(s); } MENDFUNC(3,mov_l_brR,(W4 d, R4 s, IMM offset)) /* read the word at the address contained in s+offset and store in d */ MIDFUNC(3,mov_w_brR,(W2 d, R4 s, IMM offset)) { int sreg=s; if (isconst(s)) { COMPCALL(mov_w_rm)(d,live.state[s].val+offset); return; } CLOBBER_MOV; remove_offset(d,-1); s=readreg_offset(s,4); offset+=get_offset(sreg); d=writereg(d,2); raw_mov_w_brR(d,s,offset); unlock(d); unlock(s); } MENDFUNC(3,mov_w_brR,(W2 d, R4 s, IMM offset)) /* read the word at the address contained in s+offset and store in d */ MIDFUNC(3,mov_b_brR,(W1 d, R4 s, IMM offset)) { int sreg=s; if (isconst(s)) { COMPCALL(mov_b_rm)(d,live.state[s].val+offset); return; } CLOBBER_MOV; remove_offset(d,-1); s=readreg_offset(s,4); offset+=get_offset(sreg); d=writereg(d,1); raw_mov_b_brR(d,s,offset); unlock(d); unlock(s); } MENDFUNC(3,mov_b_brR,(W1 d, R4 s, IMM offset)) MIDFUNC(3,mov_l_Ri,(R4 d, IMM i, IMM offset)) { int dreg=d; if (isconst(d)) { COMPCALL(mov_l_mi)(live.state[d].val+offset,i); return; } CLOBBER_MOV; d=readreg_offset(d,4); offset+=get_offset(dreg); raw_mov_l_Ri(d,i,offset); unlock(d); } MENDFUNC(3,mov_l_Ri,(R4 d, IMM i, IMM offset)) MIDFUNC(3,mov_w_Ri,(R4 d, IMM i, IMM offset)) { int dreg=d; if (isconst(d)) { COMPCALL(mov_w_mi)(live.state[d].val+offset,i); return; } CLOBBER_MOV; d=readreg_offset(d,4); offset+=get_offset(dreg); raw_mov_w_Ri(d,i,offset); unlock(d); } MENDFUNC(3,mov_w_Ri,(R4 d, IMM i, IMM offset)) MIDFUNC(3,mov_b_Ri,(R4 d, IMM i, IMM offset)) { int dreg=d; if (isconst(d)) { COMPCALL(mov_b_mi)(live.state[d].val+offset,i); return; } CLOBBER_MOV; d=readreg_offset(d,4); offset+=get_offset(dreg); raw_mov_b_Ri(d,i,offset); unlock(d); } MENDFUNC(3,mov_b_Ri,(R4 d, IMM i, IMM offset)) /* Warning! OFFSET is byte sized only! */ MIDFUNC(3,mov_l_Rr,(R4 d, R4 s, IMM offset)) { if (isconst(d)) { COMPCALL(mov_l_mr)(live.state[d].val+offset,s); return; } if (isconst(s)) { COMPCALL(mov_l_Ri)(d,live.state[s].val,offset); return; } CLOBBER_MOV; s=readreg(s,4); d=readreg(d,4); raw_mov_l_Rr(d,s,offset); unlock(d); unlock(s); } MENDFUNC(3,mov_l_Rr,(R4 d, R4 s, IMM offset)) MIDFUNC(3,mov_w_Rr,(R4 d, R2 s, IMM offset)) { if (isconst(d)) { COMPCALL(mov_w_mr)(live.state[d].val+offset,s); return; } if (isconst(s)) { COMPCALL(mov_w_Ri)(d,(uae_u16)live.state[s].val,offset); return; } CLOBBER_MOV; s=readreg(s,2); d=readreg(d,4); raw_mov_w_Rr(d,s,offset); unlock(d); unlock(s); } MENDFUNC(3,mov_w_Rr,(R4 d, R2 s, IMM offset)) MIDFUNC(3,mov_b_Rr,(R4 d, R1 s, IMM offset)) { if (isconst(d)) { COMPCALL(mov_b_mr)(live.state[d].val+offset,s); return; } if (isconst(s)) { COMPCALL(mov_b_Ri)(d,(uae_u8)live.state[s].val,offset); return; } CLOBBER_MOV; s=readreg(s,1); d=readreg(d,4); raw_mov_b_Rr(d,s,offset); unlock(d); unlock(s); } MENDFUNC(3,mov_b_Rr,(R4 d, R1 s, IMM offset)) MIDFUNC(3,lea_l_brr,(W4 d, R4 s, IMM offset)) { if (isconst(s)) { COMPCALL(mov_l_ri)(d,live.state[s].val+offset); return; } #if USE_OFFSET if (d==s) { add_offset(d,offset); return; } #endif CLOBBER_LEA; s=readreg(s,4); d=writereg(d,4); raw_lea_l_brr(d,s,offset); unlock(d); unlock(s); } MENDFUNC(3,lea_l_brr,(W4 d, R4 s, IMM offset)) MIDFUNC(5,lea_l_brr_indexed,(W4 d, R4 s, R4 index, IMM factor, IMM offset)) { CLOBBER_LEA; s=readreg(s,4); index=readreg(index,4); d=writereg(d,4); raw_lea_l_brr_indexed(d,s,index,factor,offset); unlock(d); unlock(index); unlock(s); } MENDFUNC(5,lea_l_brr_indexed,(W4 d, R4 s, R4 index, IMM factor, IMM offset)) /* write d to the long at the address contained in s+offset */ MIDFUNC(3,mov_l_bRr,(R4 d, R4 s, IMM offset)) { int dreg=d; if (isconst(d)) { COMPCALL(mov_l_mr)(live.state[d].val+offset,s); return; } CLOBBER_MOV; s=readreg(s,4); d=readreg_offset(d,4); offset+=get_offset(dreg); raw_mov_l_bRr(d,s,offset); unlock(d); unlock(s); } MENDFUNC(3,mov_l_bRr,(R4 d, R4 s, IMM offset)) /* write the word at the address contained in s+offset and store in d */ MIDFUNC(3,mov_w_bRr,(R4 d, R2 s, IMM offset)) { int dreg=d; if (isconst(d)) { COMPCALL(mov_w_mr)(live.state[d].val+offset,s); return; } CLOBBER_MOV; s=readreg(s,2); d=readreg_offset(d,4); offset+=get_offset(dreg); raw_mov_w_bRr(d,s,offset); unlock(d); unlock(s); } MENDFUNC(3,mov_w_bRr,(R4 d, R2 s, IMM offset)) MIDFUNC(3,mov_b_bRr,(R4 d, R1 s, IMM offset)) { int dreg=d; if (isconst(d)) { COMPCALL(mov_b_mr)(live.state[d].val+offset,s); return; } CLOBBER_MOV; s=readreg(s,1); d=readreg_offset(d,4); offset+=get_offset(dreg); raw_mov_b_bRr(d,s,offset); unlock(d); unlock(s); } MENDFUNC(3,mov_b_bRr,(R4 d, R1 s, IMM offset)) MIDFUNC(1,gen_bswap_32,(RW4 r)) { int reg=r; if (isconst(r)) { uae_u32 oldv=live.state[r].val; live.state[r].val=reverse32(oldv); return; } CLOBBER_SW32; r=rmw(r,4,4); raw_bswap_32(r); unlock(r); } MENDFUNC(1,gen_bswap_32,(RW4 r)) MIDFUNC(1,gen_bswap_16,(RW2 r)) { if (isconst(r)) { uae_u32 oldv=live.state[r].val; live.state[r].val=((oldv>>8)&0xff) | ((oldv<<8)&0xff00) | (oldv&0xffff0000); return; } CLOBBER_SW16; r=rmw(r,2,2); raw_bswap_16(r); unlock(r); } MENDFUNC(1,gen_bswap_16,(RW2 r)) MIDFUNC(2,mov_l_rr,(W4 d, R4 s)) { int olds; if (d==s) { /* How pointless! */ return; } if (isconst(s)) { COMPCALL(mov_l_ri)(d,live.state[s].val); return; } #if USE_ALIAS olds=s; disassociate(d); s=readreg_offset(s,4); live.state[d].realreg=s; live.state[d].realind=live.nat[s].nholds; live.state[d].val=live.state[olds].val; live.state[d].validsize=4; live.state[d].dirtysize=4; set_status(d,DIRTY); live.nat[s].holds[live.nat[s].nholds]=d; live.nat[s].nholds++; log_clobberreg(d); /* write_log (_T("JIT: Added %d to nreg %d(%d), now holds %d regs\n"), d,s,live.state[d].realind,live.nat[s].nholds); */ unlock(s); #else CLOBBER_MOV; s=readreg(s,4); d=writereg(d,4); raw_mov_l_rr(d,s); unlock(d); unlock(s); #endif } MENDFUNC(2,mov_l_rr,(W4 d, R4 s)) MIDFUNC(2,mov_l_mr,(IMM d, R4 s)) { if (isconst(s)) { COMPCALL(mov_l_mi)(d,live.state[s].val); return; } CLOBBER_MOV; s=readreg(s,4); raw_mov_l_mr(d,s); unlock(s); } MENDFUNC(2,mov_l_mr,(IMM d, R4 s)) MIDFUNC(2,mov_w_mr,(IMM d, R2 s)) { if (isconst(s)) { COMPCALL(mov_w_mi)(d,(uae_u16)live.state[s].val); return; } CLOBBER_MOV; s=readreg(s,2); raw_mov_w_mr(d,s); unlock(s); } MENDFUNC(2,mov_w_mr,(IMM d, R2 s)) MIDFUNC(2,mov_w_rm,(W2 d, IMM s)) { CLOBBER_MOV; d=writereg(d,2); raw_mov_w_rm(d,s); unlock(d); } MENDFUNC(2,mov_w_rm,(W2 d, IMM s)) MIDFUNC(2,mov_b_mr,(IMM d, R1 s)) { if (isconst(s)) { COMPCALL(mov_b_mi)(d,(uae_u8)live.state[s].val); return; } CLOBBER_MOV; s=readreg(s,1); raw_mov_b_mr(d,s); unlock(s); } MENDFUNC(2,mov_b_mr,(IMM d, R1 s)) MIDFUNC(2,mov_b_rm,(W1 d, IMM s)) { CLOBBER_MOV; d=writereg(d,1); raw_mov_b_rm(d,s); unlock(d); } MENDFUNC(2,mov_b_rm,(W1 d, IMM s)) MIDFUNC(2,mov_l_ri,(W4 d, IMM s)) { set_const(d,s); return; } MENDFUNC(2,mov_l_ri,(W4 d, IMM s)) MIDFUNC(2,mov_w_ri,(W2 d, IMM s)) { CLOBBER_MOV; d=writereg(d,2); raw_mov_w_ri(d,s); unlock(d); } MENDFUNC(2,mov_w_ri,(W2 d, IMM s)) MIDFUNC(2,mov_b_ri,(W1 d, IMM s)) { CLOBBER_MOV; d=writereg(d,1); raw_mov_b_ri(d,s); unlock(d); } MENDFUNC(2,mov_b_ri,(W1 d, IMM s)) MIDFUNC(2,add_l_mi,(IMM d, IMM s)) { CLOBBER_ADD; raw_add_l_mi(d,s) ; } MENDFUNC(2,add_l_mi,(IMM d, IMM s)) MIDFUNC(2,add_w_mi,(IMM d, IMM s)) { CLOBBER_ADD; raw_add_w_mi(d,s) ; } MENDFUNC(2,add_w_mi,(IMM d, IMM s)) MIDFUNC(2,add_b_mi,(IMM d, IMM s)) { CLOBBER_ADD; raw_add_b_mi(d,s) ; } MENDFUNC(2,add_b_mi,(IMM d, IMM s)) MIDFUNC(2,test_l_ri,(R4 d, IMM i)) { CLOBBER_TEST; d=readreg(d,4); raw_test_l_ri(d,i); unlock(d); } MENDFUNC(2,test_l_ri,(R4 d, IMM i)) MIDFUNC(2,test_l_rr,(R4 d, R4 s)) { CLOBBER_TEST; d=readreg(d,4); s=readreg(s,4); raw_test_l_rr(d,s);; unlock(d); unlock(s); } MENDFUNC(2,test_l_rr,(R4 d, R4 s)) MIDFUNC(2,test_w_rr,(R2 d, R2 s)) { CLOBBER_TEST; d=readreg(d,2); s=readreg(s,2); raw_test_w_rr(d,s); unlock(d); unlock(s); } MENDFUNC(2,test_w_rr,(R2 d, R2 s)) MIDFUNC(2,test_b_rr,(R1 d, R1 s)) { CLOBBER_TEST; d=readreg(d,1); s=readreg(s,1); raw_test_b_rr(d,s); unlock(d); unlock(s); } MENDFUNC(2,test_b_rr,(R1 d, R1 s)) MIDFUNC(2,and_l_ri,(RW4 d, IMM i)) { if (isconst (d) && ! needflags) { live.state[d].val &= i; return; } CLOBBER_AND; d=rmw(d,4,4); raw_and_l_ri(d,i); unlock(d); } MENDFUNC(2,and_l_ri,(RW4 d, IMM i)) MIDFUNC(2,and_l,(RW4 d, R4 s)) { CLOBBER_AND; s=readreg(s,4); d=rmw(d,4,4); raw_and_l(d,s); unlock(d); unlock(s); } MENDFUNC(2,and_l,(RW4 d, R4 s)) MIDFUNC(2,and_w,(RW2 d, R2 s)) { CLOBBER_AND; s=readreg(s,2); d=rmw(d,2,2); raw_and_w(d,s); unlock(d); unlock(s); } MENDFUNC(2,and_w,(RW2 d, R2 s)) MIDFUNC(2,and_b,(RW1 d, R1 s)) { CLOBBER_AND; s=readreg(s,1); d=rmw(d,1,1); raw_and_b(d,s); unlock(d); unlock(s); } MENDFUNC(2,and_b,(RW1 d, R1 s)) MIDFUNC(2,or_l_ri,(RW4 d, IMM i)) { if (isconst(d) && !needflags) { live.state[d].val|=i; return; } CLOBBER_OR; d=rmw(d,4,4); raw_or_l_ri(d,i); unlock(d); } MENDFUNC(2,or_l_ri,(RW4 d, IMM i)) MIDFUNC(2,or_l,(RW4 d, R4 s)) { if (isconst(d) && isconst(s) && !needflags) { live.state[d].val|=live.state[s].val; return; } CLOBBER_OR; s=readreg(s,4); d=rmw(d,4,4); raw_or_l(d,s); unlock(d); unlock(s); } MENDFUNC(2,or_l,(RW4 d, R4 s)) MIDFUNC(2,or_w,(RW2 d, R2 s)) { CLOBBER_OR; s=readreg(s,2); d=rmw(d,2,2); raw_or_w(d,s); unlock(d); unlock(s); } MENDFUNC(2,or_w,(RW2 d, R2 s)) MIDFUNC(2,or_b,(RW1 d, R1 s)) { CLOBBER_OR; s=readreg(s,1); d=rmw(d,1,1); raw_or_b(d,s); unlock(d); unlock(s); } MENDFUNC(2,or_b,(RW1 d, R1 s)) MIDFUNC(2,adc_l,(RW4 d, R4 s)) { CLOBBER_ADC; s=readreg(s,4); d=rmw(d,4,4); raw_adc_l(d,s); unlock(d); unlock(s); } MENDFUNC(2,adc_l,(RW4 d, R4 s)) MIDFUNC(2,adc_w,(RW2 d, R2 s)) { CLOBBER_ADC; s=readreg(s,2); d=rmw(d,2,2); raw_adc_w(d,s); unlock(d); unlock(s); } MENDFUNC(2,adc_w,(RW2 d, R2 s)) MIDFUNC(2,adc_b,(RW1 d, R1 s)) { CLOBBER_ADC; s=readreg(s,1); d=rmw(d,1,1); raw_adc_b(d,s); unlock(d); unlock(s); } MENDFUNC(2,adc_b,(RW1 d, R1 s)) MIDFUNC(2,add_l,(RW4 d, R4 s)) { if (isconst(s)) { COMPCALL(add_l_ri)(d,live.state[s].val); return; } CLOBBER_ADD; s=readreg(s,4); d=rmw(d,4,4); raw_add_l(d,s); unlock(d); unlock(s); } MENDFUNC(2,add_l,(RW4 d, R4 s)) MIDFUNC(2,add_w,(RW2 d, R2 s)) { if (isconst(s)) { COMPCALL(add_w_ri)(d,(uae_u16)live.state[s].val); return; } CLOBBER_ADD; s=readreg(s,2); d=rmw(d,2,2); raw_add_w(d,s); unlock(d); unlock(s); } MENDFUNC(2,add_w,(RW2 d, R2 s)) MIDFUNC(2,add_b,(RW1 d, R1 s)) { if (isconst(s)) { COMPCALL(add_b_ri)(d,(uae_u8)live.state[s].val); return; } CLOBBER_ADD; s=readreg(s,1); d=rmw(d,1,1); raw_add_b(d,s); unlock(d); unlock(s); } MENDFUNC(2,add_b,(RW1 d, R1 s)) MIDFUNC(2,sub_l_ri,(RW4 d, IMM i)) { if (!i && !needflags) return; if (isconst(d) && !needflags) { live.state[d].val-=i; return; } #if USE_OFFSET if (!needflags) { add_offset(d,-(signed)i); return; } #endif CLOBBER_SUB; d=rmw(d,4,4); raw_sub_l_ri(d,i); unlock(d); } MENDFUNC(2,sub_l_ri,(RW4 d, IMM i)) MIDFUNC(2,sub_w_ri,(RW2 d, IMM i)) { if (!i && !needflags) return; CLOBBER_SUB; d=rmw(d,2,2); raw_sub_w_ri(d,i); unlock(d); } MENDFUNC(2,sub_w_ri,(RW2 d, IMM i)) MIDFUNC(2,sub_b_ri,(RW1 d, IMM i)) { if (!i && !needflags) return; CLOBBER_SUB; d=rmw(d,1,1); raw_sub_b_ri(d,i); unlock(d); } MENDFUNC(2,sub_b_ri,(RW1 d, IMM i)) MIDFUNC(2,add_l_ri,(RW4 d, IMM i)) { if (!i && !needflags) return; if (isconst(d) && !needflags) { live.state[d].val+=i; return; } #if USE_OFFSET if (!needflags) { add_offset(d,i); return; } #endif CLOBBER_ADD; d=rmw(d,4,4); raw_add_l_ri(d,i); unlock(d); } MENDFUNC(2,add_l_ri,(RW4 d, IMM i)) MIDFUNC(2,add_w_ri,(RW2 d, IMM i)) { if (!i && !needflags) return; CLOBBER_ADD; d=rmw(d,2,2); raw_add_w_ri(d,i); unlock(d); } MENDFUNC(2,add_w_ri,(RW2 d, IMM i)) MIDFUNC(2,add_b_ri,(RW1 d, IMM i)) { if (!i && !needflags) return; CLOBBER_ADD; d=rmw(d,1,1); raw_add_b_ri(d,i); unlock(d); } MENDFUNC(2,add_b_ri,(RW1 d, IMM i)) MIDFUNC(2,sbb_l,(RW4 d, R4 s)) { CLOBBER_SBB; s=readreg(s,4); d=rmw(d,4,4); raw_sbb_l(d,s); unlock(d); unlock(s); } MENDFUNC(2,sbb_l,(RW4 d, R4 s)) MIDFUNC(2,sbb_w,(RW2 d, R2 s)) { CLOBBER_SBB; s=readreg(s,2); d=rmw(d,2,2); raw_sbb_w(d,s); unlock(d); unlock(s); } MENDFUNC(2,sbb_w,(RW2 d, R2 s)) MIDFUNC(2,sbb_b,(RW1 d, R1 s)) { CLOBBER_SBB; s=readreg(s,1); d=rmw(d,1,1); raw_sbb_b(d,s); unlock(d); unlock(s); } MENDFUNC(2,sbb_b,(RW1 d, R1 s)) MIDFUNC(2,sub_l,(RW4 d, R4 s)) { if (isconst(s)) { COMPCALL(sub_l_ri)(d,live.state[s].val); return; } CLOBBER_SUB; s=readreg(s,4); d=rmw(d,4,4); raw_sub_l(d,s); unlock(d); unlock(s); } MENDFUNC(2,sub_l,(RW4 d, R4 s)) MIDFUNC(2,sub_w,(RW2 d, R2 s)) { if (isconst(s)) { COMPCALL(sub_w_ri)(d,(uae_u16)live.state[s].val); return; } CLOBBER_SUB; s=readreg(s,2); d=rmw(d,2,2); raw_sub_w(d,s); unlock(d); unlock(s); } MENDFUNC(2,sub_w,(RW2 d, R2 s)) MIDFUNC(2,sub_b,(RW1 d, R1 s)) { if (isconst(s)) { COMPCALL(sub_b_ri)(d,(uae_u8)live.state[s].val); return; } CLOBBER_SUB; s=readreg(s,1); d=rmw(d,1,1); raw_sub_b(d,s); unlock(d); unlock(s); } MENDFUNC(2,sub_b,(RW1 d, R1 s)) MIDFUNC(2,cmp_l,(R4 d, R4 s)) { CLOBBER_CMP; s=readreg(s,4); d=readreg(d,4); raw_cmp_l(d,s); unlock(d); unlock(s); } MENDFUNC(2,cmp_l,(R4 d, R4 s)) MIDFUNC(2,cmp_l_ri,(R4 r, IMM i)) { CLOBBER_CMP; r=readreg(r,4); raw_cmp_l_ri(r,i); unlock(r); } MENDFUNC(2,cmp_l_ri,(R4 r, IMM i)) MIDFUNC(2,cmp_w,(R2 d, R2 s)) { CLOBBER_CMP; s=readreg(s,2); d=readreg(d,2); raw_cmp_w(d,s); unlock(d); unlock(s); } MENDFUNC(2,cmp_w,(R2 d, R2 s)) MIDFUNC(2,cmp_b,(R1 d, R1 s)) { CLOBBER_CMP; s=readreg(s,1); d=readreg(d,1); raw_cmp_b(d,s); unlock(d); unlock(s); } MENDFUNC(2,cmp_b,(R1 d, R1 s)) MIDFUNC(2,xor_l,(RW4 d, R4 s)) { CLOBBER_XOR; s=readreg(s,4); d=rmw(d,4,4); raw_xor_l(d,s); unlock(d); unlock(s); } MENDFUNC(2,xor_l,(RW4 d, R4 s)) MIDFUNC(2,xor_w,(RW2 d, R2 s)) { CLOBBER_XOR; s=readreg(s,2); d=rmw(d,2,2); raw_xor_w(d,s); unlock(d); unlock(s); } MENDFUNC(2,xor_w,(RW2 d, R2 s)) MIDFUNC(2,xor_b,(RW1 d, R1 s)) { CLOBBER_XOR; s=readreg(s,1); d=rmw(d,1,1); raw_xor_b(d,s); unlock(d); unlock(s); } MENDFUNC(2,xor_b,(RW1 d, R1 s)) MIDFUNC(5,call_r_11,(W4 out1, R4 r, R4 in1, IMM osize, IMM isize)) { clobber_flags(); remove_all_offsets(); if (osize==4) { if (out1!=in1 && out1!=r) { COMPCALL(forget_about)(out1); } } else { tomem_c(out1); } in1=readreg_specific(in1,isize,REG_PAR1); r=readreg(r,4); prepare_for_call_1(); /* This should ensure that there won't be any need for swapping nregs in prepare_for_call_2 */ #if USE_NORMAL_CALLING_CONVENTION raw_push_l_r(in1); #endif unlock(in1); unlock(r); prepare_for_call_2(); raw_call_r(r); #if USE_NORMAL_CALLING_CONVENTION raw_inc_sp(4); #endif live.nat[REG_RESULT].holds[0]=out1; live.nat[REG_RESULT].nholds=1; live.nat[REG_RESULT].touched=touchcnt++; live.state[out1].realreg=REG_RESULT; live.state[out1].realind=0; live.state[out1].val=0; live.state[out1].validsize=osize; live.state[out1].dirtysize=osize; set_status(out1,DIRTY); } MENDFUNC(5,call_r_11,(W4 out1, R4 r, R4 in1, IMM osize, IMM isize)) MIDFUNC(5,call_r_02,(R4 r, R4 in1, R4 in2, IMM isize1, IMM isize2)) { clobber_flags(); remove_all_offsets(); in1=readreg_specific(in1,isize1,REG_PAR1); in2=readreg_specific(in2,isize2,REG_PAR2); r=readreg(r,4); prepare_for_call_1(); /* This should ensure that there won't be any need for swapping nregs in prepare_for_call_2 */ #if USE_NORMAL_CALLING_CONVENTION raw_push_l_r(in2); raw_push_l_r(in1); #endif unlock(r); unlock(in1); unlock(in2); prepare_for_call_2(); raw_call_r(r); #if USE_NORMAL_CALLING_CONVENTION raw_inc_sp(8); #endif } MENDFUNC(5,call_r_02,(R4 r, R4 in1, R4 in2, IMM isize1, IMM isize2)) MIDFUNC(1,forget_about,(W4 r)) { if (isinreg(r)) disassociate(r); live.state[r].val=0; set_status(r,UNDEF); } MENDFUNC(1,forget_about,(W4 r)) MIDFUNC(0,nop,(void)) { raw_nop(); } MENDFUNC(0,nop,(void)) MIDFUNC(1,f_forget_about,(FW r)) { if (f_isinreg(r)) f_disassociate(r); live.fate[r].status=UNDEF; } MENDFUNC(1,f_forget_about,(FW r)) MIDFUNC(1,fmov_pi,(FW r)) { r=f_writereg(r); raw_fmov_pi(r); f_unlock(r); } MENDFUNC(1,fmov_pi,(FW r)) MIDFUNC(1,fmov_log10_2,(FW r)) { r=f_writereg(r); raw_fmov_log10_2(r); f_unlock(r); } MENDFUNC(1,fmov_log10_2,(FW r)) MIDFUNC(1,fmov_log2_e,(FW r)) { r=f_writereg(r); raw_fmov_log2_e(r); f_unlock(r); } MENDFUNC(1,fmov_log2_e,(FW r)) MIDFUNC(1,fmov_loge_2,(FW r)) { r=f_writereg(r); raw_fmov_loge_2(r); f_unlock(r); } MENDFUNC(1,fmov_loge_2,(FW r)) MIDFUNC(1,fmov_1,(FW r)) { r=f_writereg(r); raw_fmov_1(r); f_unlock(r); } MENDFUNC(1,fmov_1,(FW r)) MIDFUNC(1,fmov_0,(FW r)) { r=f_writereg(r); raw_fmov_0(r); f_unlock(r); } MENDFUNC(1,fmov_0,(FW r)) MIDFUNC(2,fmov_rm,(FW r, MEMR m)) { r=f_writereg(r); raw_fmov_rm(r,m); f_unlock(r); } MENDFUNC(2,fmov_rm,(FW r, MEMR m)) MIDFUNC(2,fmovi_rm,(FW r, MEMR m)) { r=f_writereg(r); raw_fmovi_rm(r,m); f_unlock(r); } MENDFUNC(2,fmovi_rm,(FW r, MEMR m)) MIDFUNC(3,fmovi_mrb,(MEMW m, FR r, double *bounds)) { r=f_readreg(r); raw_fmovi_mrb(m,r,bounds); f_unlock(r); } MENDFUNC(3,fmovi_mrb,(MEMW m, FR r, double *bounds)) MIDFUNC(2,fmovs_rm,(FW r, MEMR m)) { r=f_writereg(r); raw_fmovs_rm(r,m); f_unlock(r); } MENDFUNC(2,fmovs_rm,(FW r, MEMR m)) MIDFUNC(2,fmovs_mr,(MEMW m, FR r)) { r=f_readreg(r); raw_fmovs_mr(m,r); f_unlock(r); } MENDFUNC(2,fmovs_mr,(MEMW m, FR r)) MIDFUNC(1,fcuts_r,(FRW r)) { r=f_rmw(r); raw_fcuts_r(r); f_unlock(r); } MENDFUNC(1,fcuts_r,(FRW r)) MIDFUNC(1,fcut_r,(FRW r)) { r=f_rmw(r); raw_fcut_r(r); f_unlock(r); } MENDFUNC(1,fcut_r,(FRW r)) MIDFUNC(2,fmovl_ri,(FW r, IMMS i)) { r=f_writereg(r); raw_fmovl_ri(r,i); f_unlock(r); } MENDFUNC(2,fmovl_ri,(FW r, IMMS i)) MIDFUNC(2,fmovs_ri,(FW r, IMM i)) { r=f_writereg(r); raw_fmovs_ri(r,i); f_unlock(r); } MENDFUNC(2,fmovs_ri,(FW r, IMM i)) MIDFUNC(3,fmov_ri,(FW r, IMM i1, IMM i2)) { r=f_writereg(r); raw_fmov_ri(r,i1,i2); f_unlock(r); } MENDFUNC(3,fmov_ri,(FW r, IMM i1, IMM i2)) MIDFUNC(4,fmov_ext_ri,(FW r, IMM i1, IMM i2, IMM i3)) { r=f_writereg(r); raw_fmov_ext_ri(r,i1,i2,i3); f_unlock(r); } MENDFUNC(4,fmov_ext_ri,(FW r, IMM i1, IMM i2, IMM i3)) MIDFUNC(2,fmov_ext_mr,(MEMW m, FR r)) { r=f_readreg(r); raw_fmov_ext_mr(m,r); f_unlock(r); } MENDFUNC(2,fmov_ext_mr,(MEMW m, FR r)) MIDFUNC(2,fmov_mr,(MEMW m, FR r)) { r=f_readreg(r); raw_fmov_mr(m,r); f_unlock(r); } MENDFUNC(2,fmov_mr,(MEMW m, FR r)) MIDFUNC(2,fmov_ext_rm,(FW r, MEMR m)) { r=f_writereg(r); raw_fmov_ext_rm(r,m); f_unlock(r); } MENDFUNC(2,fmov_ext_rm,(FW r, MEMR m)) MIDFUNC(2,fmov_rr,(FW d, FR s)) { if (d==s) { /* How pointless! */ return; } #if USE_F_ALIAS f_disassociate(d); s=f_readreg(s); live.fate[d].realreg=s; live.fate[d].realind=live.fat[s].nholds; live.fate[d].status=DIRTY; live.fat[s].holds[live.fat[s].nholds]=d; live.fat[s].nholds++; f_unlock(s); #else s=f_readreg(s); d=f_writereg(d); raw_fmov_rr(d,s); f_unlock(s); f_unlock(d); #endif } MENDFUNC(2,fmov_rr,(FW d, FR s)) MIDFUNC(2,fldcw_m_indexed,(R4 index, IMM base)) { index=readreg(index,4); raw_fldcw_m_indexed(index,base); unlock(index); } MENDFUNC(2,fldcw_m_indexed,(R4 index, IMM base)) MIDFUNC(1,ftst_r,(FR r)) { r=f_readreg(r); raw_ftst_r(r); f_unlock(r); } MENDFUNC(1,ftst_r,(FR r)) MIDFUNC(0,dont_care_fflags,(void)) { f_disassociate(FP_RESULT); } MENDFUNC(0,dont_care_fflags,(void)) MIDFUNC(2,fsqrt_rr,(FW d, FR s)) { s=f_readreg(s); d=f_writereg(d); raw_fsqrt_rr(d,s); f_unlock(s); f_unlock(d); } MENDFUNC(2,fsqrt_rr,(FW d, FR s)) MIDFUNC(2,fabs_rr,(FW d, FR s)) { s=f_readreg(s); d=f_writereg(d); raw_fabs_rr(d,s); f_unlock(s); f_unlock(d); } MENDFUNC(2,fabs_rr,(FW d, FR s)) MIDFUNC(2,frndint_rr,(FW d, FR s)) { s=f_readreg(s); d=f_writereg(d); raw_frndint_rr(d,s); f_unlock(s); f_unlock(d); } MENDFUNC(2,frndint_rr,(FW d, FR s)) MIDFUNC(2,fgetexp_rr,(FW d, FR s)) { s=f_readreg(s); d=f_writereg(d); raw_fgetexp_rr(d,s); f_unlock(s); f_unlock(d); } MENDFUNC(2,fgetexp_rr,(FW d, FR s)) MIDFUNC(2,fgetman_rr,(FW d, FR s)) { s=f_readreg(s); d=f_writereg(d); raw_fgetman_rr(d,s); f_unlock(s); f_unlock(d); } MENDFUNC(2,fgetman_rr,(FW d, FR s)) MIDFUNC(2,fsin_rr,(FW d, FR s)) { s=f_readreg(s); d=f_writereg(d); raw_fsin_rr(d,s); f_unlock(s); f_unlock(d); } MENDFUNC(2,fsin_rr,(FW d, FR s)) MIDFUNC(2,fcos_rr,(FW d, FR s)) { s=f_readreg(s); d=f_writereg(d); raw_fcos_rr(d,s); f_unlock(s); f_unlock(d); } MENDFUNC(2,fcos_rr,(FW d, FR s)) MIDFUNC(2,ftan_rr,(FW d, FR s)) { s=f_readreg(s); d=f_writereg(d); raw_ftan_rr(d,s); f_unlock(s); f_unlock(d); } MENDFUNC(2,ftan_rr,(FW d, FR s)) MIDFUNC(3,fsincos_rr,(FW d, FW c, FR s)) { s=f_readreg(s); /* s for source */ d=f_writereg(d); /* d for sine */ c=f_writereg(c); /* c for cosine */ raw_fsincos_rr(d,c,s); f_unlock(s); f_unlock(d); f_unlock(c); } MENDFUNC(3,fsincos_rr,(FW d, FW c, FR s)) MIDFUNC(2,fscale_rr,(FRW d, FR s)) { s=f_readreg(s); d=f_rmw(d); raw_fscale_rr(d,s); f_unlock(s); f_unlock(d); } MENDFUNC(2,fscale_rr,(FRW d, FR s)) MIDFUNC(2,ftwotox_rr,(FW d, FR s)) { s=f_readreg(s); d=f_writereg(d); raw_ftwotox_rr(d,s); f_unlock(s); f_unlock(d); } MENDFUNC(2,ftwotox_rr,(FW d, FR s)) MIDFUNC(2,fetox_rr,(FW d, FR s)) { s=f_readreg(s); d=f_writereg(d); raw_fetox_rr(d,s); f_unlock(s); f_unlock(d); } MENDFUNC(2,fetox_rr,(FW d, FR s)) MIDFUNC(2,fetoxM1_rr,(FW d, FR s)) { s=f_readreg(s); d=f_writereg(d); raw_fetoxM1_rr(d,s); f_unlock(s); f_unlock(d); } MENDFUNC(2,fetoxM1_rr,(FW d, FR s)) MIDFUNC(2,ftentox_rr,(FW d, FR s)) { s=f_readreg(s); d=f_writereg(d); raw_ftentox_rr(d,s); f_unlock(s); f_unlock(d); } MENDFUNC(2,ftentox_rr,(FW d, FR s)) MIDFUNC(2,flog2_rr,(FW d, FR s)) { s=f_readreg(s); d=f_writereg(d); raw_flog2_rr(d,s); f_unlock(s); f_unlock(d); } MENDFUNC(2,flog2_rr,(FW d, FR s)) MIDFUNC(2,flogN_rr,(FW d, FR s)) { s=f_readreg(s); d=f_writereg(d); raw_flogN_rr(d,s); f_unlock(s); f_unlock(d); } MENDFUNC(2,flogN_rr,(FW d, FR s)) MIDFUNC(2,flogNP1_rr,(FW d, FR s)) { s=f_readreg(s); d=f_writereg(d); raw_flogNP1_rr(d,s); f_unlock(s); f_unlock(d); } MENDFUNC(2,flogNP1_rr,(FW d, FR s)) MIDFUNC(2,flog10_rr,(FW d, FR s)) { s=f_readreg(s); d=f_writereg(d); raw_flog10_rr(d,s); f_unlock(s); f_unlock(d); } MENDFUNC(2,flog10_rr,(FW d, FR s)) MIDFUNC(2,fasin_rr,(FW d, FR s)) { s=f_readreg(s); d=f_writereg(d); raw_fasin_rr(d,s); f_unlock(s); f_unlock(d); } MENDFUNC(2,fasin_rr,(FW d, FR s)) MIDFUNC(2,facos_rr,(FW d, FR s)) { s=f_readreg(s); d=f_writereg(d); raw_facos_rr(d,s); f_unlock(s); f_unlock(d); } MENDFUNC(2,facos_rr,(FW d, FR s)) MIDFUNC(2,fatan_rr,(FW d, FR s)) { s=f_readreg(s); d=f_writereg(d); raw_fatan_rr(d,s); f_unlock(s); f_unlock(d); } MENDFUNC(2,fatan_rr,(FW d, FR s)) MIDFUNC(2,fatanh_rr,(FW d, FR s)) { s=f_readreg(s); d=f_writereg(d); raw_fatanh_rr(d,s); f_unlock(s); f_unlock(d); } MENDFUNC(2,fatanh_rr,(FW d, FR s)) MIDFUNC(2,fsinh_rr,(FW d, FR s)) { s=f_readreg(s); d=f_writereg(d); raw_fsinh_rr(d,s); f_unlock(s); f_unlock(d); } MENDFUNC(2,fsinh_rr,(FW d, FR s)) MIDFUNC(2,fcosh_rr,(FW d, FR s)) { s=f_readreg(s); d=f_writereg(d); raw_fcosh_rr(d,s); f_unlock(s); f_unlock(d); } MENDFUNC(2,fcosh_rr,(FW d, FR s)) MIDFUNC(2,ftanh_rr,(FW d, FR s)) { s=f_readreg(s); d=f_writereg(d); raw_ftanh_rr(d,s); f_unlock(s); f_unlock(d); } MENDFUNC(2,ftanh_rr,(FW d, FR s)) MIDFUNC(2,fneg_rr,(FW d, FR s)) { s=f_readreg(s); d=f_writereg(d); raw_fneg_rr(d,s); f_unlock(s); f_unlock(d); } MENDFUNC(2,fneg_rr,(FW d, FR s)) MIDFUNC(2,fadd_rr,(FRW d, FR s)) { s=f_readreg(s); d=f_rmw(d); raw_fadd_rr(d,s); f_unlock(s); f_unlock(d); } MENDFUNC(2,fadd_rr,(FRW d, FR s)) MIDFUNC(2,fsub_rr,(FRW d, FR s)) { s=f_readreg(s); d=f_rmw(d); raw_fsub_rr(d,s); f_unlock(s); f_unlock(d); } MENDFUNC(2,fsub_rr,(FRW d, FR s)) MIDFUNC(2,fcmp_rr,(FR d, FR s)) { d=f_readreg(d); s=f_readreg(s); raw_fcmp_rr(d,s); f_unlock(s); f_unlock(d); } MENDFUNC(2,fcmp_rr,(FR d, FR s)) MIDFUNC(2,fdiv_rr,(FRW d, FR s)) { s=f_readreg(s); d=f_rmw(d); raw_fdiv_rr(d,s); f_unlock(s); f_unlock(d); } MENDFUNC(2,fdiv_rr,(FRW d, FR s)) MIDFUNC(2,frem_rr,(FRW d, FR s)) { s=f_readreg(s); d=f_rmw(d); raw_frem_rr(d,s); f_unlock(s); f_unlock(d); } MENDFUNC(2,frem_rr,(FRW d, FR s)) MIDFUNC(2,frem1_rr,(FRW d, FR s)) { s=f_readreg(s); d=f_rmw(d); raw_frem1_rr(d,s); f_unlock(s); f_unlock(d); } MENDFUNC(2,frem1_rr,(FRW d, FR s)) MIDFUNC(2,fmul_rr,(FRW d, FR s)) { s=f_readreg(s); d=f_rmw(d); raw_fmul_rr(d,s); f_unlock(s); f_unlock(d); } MENDFUNC(2,fmul_rr,(FRW d, FR s)) /******************************************************************** * Support functions exposed to gencomp. CREATE time * ********************************************************************/ int kill_rodent(int r) { return KILLTHERAT && have_rat_stall && (live.state[r].status==INMEM || live.state[r].status==CLEAN || live.state[r].status==ISCONST || live.state[r].dirtysize==4); } uae_u32 get_const(int r) { #if USE_OPTIMIZER if (!reg_alloc_run) #endif Dif (!isconst(r)) { jit_abort (_T("JIT: Register %d should be constant, but isn't\n"),r); } return live.state[r].val; } void sync_m68k_pc(void) { if (m68k_pc_offset) { add_l_ri(PC_P,m68k_pc_offset); comp_pc_p+=m68k_pc_offset; m68k_pc_offset=0; } } /******************************************************************** * Support functions exposed to newcpu * ********************************************************************/ uae_u32 scratch[VREGS]; fptype fscratch[VFREGS]; void init_comp(void) { int i; uae_u8* cb=can_byte; uae_u8* cw=can_word; uae_u8* au=always_used; for (i=0;i1) jit_abort (_T("vinton")); if (live.nat[n].nholds && depthnat[i].validsize) vton[s->nat[i].holds]=i; flush_flags(); /* low level */ sync_m68k_pc(); /* mid level */ /* We don't do FREGS yet, so this is raw flush() code */ for (i=0;is->nat[vton[i]].dirtysize) tomem(i); /* Fall-through! */ case CLEAN: if (vton[i]==-1 || live.state[i].validsizenat[vton[i]].validsize) evict(i); else make_exclusive(i,0,-1); break; case INMEM: break; case UNDEF: break; default: write_log (_T("JIT: Weird status: %d\n"),live.state[i].status); abort(); } } /* Quick consistency check */ for (i=0;is->nat[n].dirtysize) abort; if (live.state[i].validsizenat[n].validsize) abort; live.state[i].dirtysize=s->nat[n].dirtysize; live.state[i].validsize=s->nat[n].validsize; if (live.state[i].dirtysize) set_status(i,DIRTY); break; case UNDEF: break; } if (n!=-1) live.nat[n].touched=touchcnt++; } } #else STATIC_INLINE void match_states(smallstate* s) { flush(1); } #endif /* Only do this if you really mean it! The next call should be to init!*/ void flush(int save_regs) { int i; log_flush(); flush_flags(); /* low level */ sync_m68k_pc(); /* mid level */ if (save_regs) { for (i=0;i=(uae_u32)kickmemory && addr<(uae_u32)kickmemory+8*65536); } static void flush_all(void) { int i; log_flush(); for (i=0;i0) free_nreg(i); for (i=0;i0) f_free_nreg(i); live.flags_in_flags=TRASH; /* Note: We assume we already rescued the flags at the very start of the call_r functions! */ } /******************************************************************** * Memory access and related functions, CREATE time * ********************************************************************/ void register_branch(uae_u32 not_taken, uae_u32 taken, uae_u8 cond) { next_pc_p=not_taken; taken_pc_p=taken; branch_cc=cond; } static uae_u32 get_handler_address(uae_u32 addr) { uae_u32 cl=cacheline(addr); blockinfo* bi=get_blockinfo_addr_new((void*)addr,0); #if USE_OPTIMIZER if (!bi && reg_alloc_run) return 0; #endif return (uae_u32)&(bi->direct_handler_to_use); } static uae_u32 get_handler(uae_u32 addr) { uae_u32 cl=cacheline(addr); blockinfo* bi=get_blockinfo_addr_new((void*)addr,0); #if USE_OPTIMIZER if (!bi && reg_alloc_run) return 0; #endif return (uae_u32)bi->direct_handler_to_use; } static void load_handler(int reg, uae_u32 addr) { mov_l_rm(reg,get_handler_address(addr)); } /* This version assumes that it is writing *real* memory, and *will* fail * if that assumption is wrong! No branches, no second chances, just * straight go-for-it attitude */ static void writemem_real(int address, int source, int offset, int size, int tmp, int clobber) { int f=tmp; #ifdef NATMEM_OFFSET if (canbang) { /* Woohoo! go directly at the memory! */ if (clobber) f=source; switch(size) { case 1: mov_b_bRr(address,source,NATMEM_OFFSETX); break; case 2: mov_w_rr(f,source); gen_bswap_16(f); mov_w_bRr(address,f,NATMEM_OFFSETX); break; case 4: mov_l_rr(f,source); gen_bswap_32(f); mov_l_bRr(address,f,NATMEM_OFFSETX); break; } forget_about(tmp); forget_about(f); return; } #endif mov_l_rr(f,address); shrl_l_ri(f,16); /* The index into the baseaddr table */ mov_l_rm_indexed(f,(uae_u32)(baseaddr),f); if (address==source) { /* IBrowse does this! */ if (size > 1) { add_l(f,address); /* f now holds the final address */ switch (size) { case 2: gen_bswap_16(source); mov_w_Rr(f,source,0); gen_bswap_16(source); return; case 4: gen_bswap_32(source); mov_l_Rr(f,source,0); gen_bswap_32(source); return; } } } switch (size) { /* f now holds the offset */ case 1: mov_b_mrr_indexed(address,f,source); break; case 2: gen_bswap_16(source); mov_w_mrr_indexed(address,f,source); gen_bswap_16(source); break; /* base, index, source */ case 4: gen_bswap_32(source); mov_l_mrr_indexed(address,f,source); gen_bswap_32(source); break; } } STATIC_INLINE void writemem(int address, int source, int offset, int size, int tmp) { int f=tmp; mov_l_rr(f,address); shrl_l_ri(f,16); /* The index into the mem bank table */ mov_l_rm_indexed(f,(uae_u32)mem_banks,f); /* Now f holds a pointer to the actual membank */ mov_l_rR(f,f,offset); /* Now f holds the address of the b/w/lput function */ call_r_02(f,address,source,4,size); forget_about(tmp); } void writebyte(int address, int source, int tmp) { int distrust; switch (currprefs.comptrustbyte) { case 0: distrust=0; break; case 1: distrust=1; break; case 2: distrust=((start_pc&0xF80000)==0xF80000); break; case 3: distrust=!have_done_picasso; break; default: abort(); } if ((special_mem&S_WRITE) || distrust) writemem_special(address,source,20,1,tmp); else writemem_real(address,source,20,1,tmp,0); } STATIC_INLINE void writeword_general(int address, int source, int tmp, int clobber) { int distrust; switch (currprefs.comptrustword) { case 0: distrust=0; break; case 1: distrust=1; break; case 2: distrust=((start_pc&0xF80000)==0xF80000); break; case 3: distrust=!have_done_picasso; break; default: abort(); } if ((special_mem&S_WRITE) || distrust) writemem_special(address,source,16,2,tmp); else writemem_real(address,source,16,2,tmp,clobber); } void writeword_clobber(int address, int source, int tmp) { writeword_general(address,source,tmp,1); } void writeword(int address, int source, int tmp) { writeword_general(address,source,tmp,0); } STATIC_INLINE void writelong_general(int address, int source, int tmp, int clobber) { int distrust; switch (currprefs.comptrustlong) { case 0: distrust=0; break; case 1: distrust=1; break; case 2: distrust=((start_pc&0xF80000)==0xF80000); break; case 3: distrust=!have_done_picasso; break; default: abort(); } if ((special_mem&S_WRITE) || distrust) writemem_special(address,source,12,4,tmp); else writemem_real(address,source,12,4,tmp,clobber); } void writelong_clobber(int address, int source, int tmp) { writelong_general(address,source,tmp,1); } void writelong(int address, int source, int tmp) { writelong_general(address,source,tmp,0); } /* This version assumes that it is reading *real* memory, and *will* fail * if that assumption is wrong! No branches, no second chances, just * straight go-for-it attitude */ static void readmem_real(int address, int dest, int offset, int size, int tmp) { int f=tmp; if (size==4 && address!=dest) f=dest; #ifdef NATMEM_OFFSET if (canbang) { /* Woohoo! go directly at the memory! */ switch(size) { case 1: mov_b_brR(dest,address,NATMEM_OFFSETX); break; case 2: mov_w_brR(dest,address,NATMEM_OFFSETX); gen_bswap_16(dest); break; case 4: mov_l_brR(dest,address,NATMEM_OFFSETX); gen_bswap_32(dest); break; } forget_about(tmp); return; } #endif mov_l_rr(f,address); shrl_l_ri(f,16); /* The index into the baseaddr table */ mov_l_rm_indexed(f,(uae_u32)baseaddr,f); /* f now holds the offset */ switch(size) { case 1: mov_b_rrm_indexed(dest,address,f); break; case 2: mov_w_rrm_indexed(dest,address,f); gen_bswap_16(dest); break; case 4: mov_l_rrm_indexed(dest,address,f); gen_bswap_32(dest); break; } forget_about(tmp); } STATIC_INLINE void readmem(int address, int dest, int offset, int size, int tmp) { int f=tmp; mov_l_rr(f,address); shrl_l_ri(f,16); /* The index into the mem bank table */ mov_l_rm_indexed(f,(uae_u32)mem_banks,f); /* Now f holds a pointer to the actual membank */ mov_l_rR(f,f,offset); /* Now f holds the address of the b/w/lget function */ call_r_11(dest,f,address,size,4); forget_about(tmp); } void readbyte(int address, int dest, int tmp) { int distrust; switch (currprefs.comptrustbyte) { case 0: distrust=0; break; case 1: distrust=1; break; case 2: distrust=((start_pc&0xF80000)==0xF80000); break; case 3: distrust=!have_done_picasso; break; default: abort(); } if ((special_mem&S_READ) || distrust) readmem_special(address,dest,8,1,tmp); else readmem_real(address,dest,8,1,tmp); } void readword(int address, int dest, int tmp) { int distrust; switch (currprefs.comptrustword) { case 0: distrust=0; break; case 1: distrust=1; break; case 2: distrust=((start_pc&0xF80000)==0xF80000); break; case 3: distrust=!have_done_picasso; break; default: abort(); } if ((special_mem&S_READ) || distrust) readmem_special(address,dest,4,2,tmp); else readmem_real(address,dest,4,2,tmp); } void readlong(int address, int dest, int tmp) { int distrust; switch (currprefs.comptrustlong) { case 0: distrust=0; break; case 1: distrust=1; break; case 2: distrust=((start_pc&0xF80000)==0xF80000); break; case 3: distrust=!have_done_picasso; break; default: abort(); } if ((special_mem&S_READ) || distrust) readmem_special(address,dest,0,4,tmp); else readmem_real(address,dest,0,4,tmp); } /* This one might appear a bit odd... */ STATIC_INLINE void get_n_addr_old(int address, int dest, int tmp) { readmem(address,dest,24,4,tmp); } STATIC_INLINE void get_n_addr_real(int address, int dest, int tmp) { int f=tmp; if (address!=dest) f=dest; #ifdef NATMEM_OFFSET if (canbang) { lea_l_brr(dest,address,NATMEM_OFFSETX); forget_about(tmp); return; } #endif mov_l_rr(f,address); mov_l_rr(dest,address); // gb-- nop if dest==address shrl_l_ri(f,16); mov_l_rm_indexed(f,(uae_u32)baseaddr,f); add_l(dest,f); forget_about(tmp); } void get_n_addr(int address, int dest, int tmp) { int distrust; switch (currprefs.comptrustnaddr) { case 0: distrust=0; break; case 1: distrust=1; break; case 2: distrust=((start_pc&0xF80000)==0xF80000); break; case 3: distrust=!have_done_picasso; break; default: abort(); } if (special_mem || distrust) get_n_addr_old(address,dest,tmp); else get_n_addr_real(address,dest,tmp); } void get_n_addr_jmp(int address, int dest, int tmp) { #if 0 /* For this, we need to get the same address as the rest of UAE would --- otherwise we end up translating everything twice */ get_n_addr(address,dest,tmp); #else int f=tmp; if (address!=dest) f=dest; mov_l_rr(f,address); shrl_l_ri(f,16); /* The index into the baseaddr bank table */ mov_l_rm_indexed(dest,(uae_u32)baseaddr,f); add_l(dest,address); and_l_ri (dest, ~1); forget_about(tmp); #endif } /* base, target and tmp are registers, but dp is the actual opcode extension word */ void calc_disp_ea_020(int base, uae_u32 dp, int target, int tmp) { int reg = (dp >> 12) & 15; int regd_shift=(dp >> 9) & 3; if (dp & 0x100) { int ignorebase=(dp&0x80); int ignorereg=(dp&0x40); int addbase=0; int outer=0; if ((dp & 0x30) == 0x20) addbase = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); if ((dp & 0x30) == 0x30) addbase = comp_get_ilong((m68k_pc_offset+=4)-4); if ((dp & 0x3) == 0x2) outer = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); if ((dp & 0x3) == 0x3) outer = comp_get_ilong((m68k_pc_offset+=4)-4); if ((dp & 0x4) == 0) { /* add regd *before* the get_long */ if (!ignorereg) { if ((dp & 0x800) == 0) sign_extend_16_rr(target,reg); else mov_l_rr(target,reg); shll_l_ri(target,regd_shift); } else mov_l_ri(target,0); /* target is now regd */ if (!ignorebase) add_l(target,base); add_l_ri(target,addbase); if (dp&0x03) readlong(target,target,tmp); } else { /* do the getlong first, then add regd */ if (!ignorebase) { mov_l_rr(target,base); add_l_ri(target,addbase); } else mov_l_ri(target,addbase); if (dp&0x03) readlong(target,target,tmp); if (!ignorereg) { if ((dp & 0x800) == 0) sign_extend_16_rr(tmp,reg); else mov_l_rr(tmp,reg); shll_l_ri(tmp,regd_shift); /* tmp is now regd */ add_l(target,tmp); } } add_l_ri(target,outer); } else { /* 68000 version */ if ((dp & 0x800) == 0) { /* Sign extend */ sign_extend_16_rr(target,reg); lea_l_brr_indexed(target,base,target,regd_shift,(uae_s32)(uae_s8)dp); } else { lea_l_brr_indexed(target,base,reg,regd_shift,(uae_s32)(uae_s8)dp); } } forget_about(tmp); } STATIC_INLINE unsigned int cft_map (unsigned int f) { return ((f >> 8) & 255) | ((f & 255) << 8); } void set_cache_state(int enabled) { if (enabled!=letit) flush_icache_hard(0, 3); letit=enabled; } int get_cache_state(void) { return letit; } uae_u32 get_jitted_size(void) { if (compiled_code) return current_compile_p-compiled_code; return 0; } void alloc_cache(void) { if (compiled_code) { flush_icache_hard(0, 3); cache_free(compiled_code); } if (veccode == NULL) veccode = cache_alloc (256); if (popallspace == NULL) popallspace = cache_alloc (1024); compiled_code = NULL; if (currprefs.cachesize == 0) return; while (!compiled_code && currprefs.cachesize) { compiled_code=cache_alloc(currprefs.cachesize*1024); if (!compiled_code) currprefs.cachesize/=2; } if (compiled_code) { max_compile_start=compiled_code+currprefs.cachesize*1024-BYTES_PER_INST; current_compile_p=compiled_code; } } static void calc_checksum(blockinfo* bi, uae_u32* c1, uae_u32* c2) { uae_u32 k1=0; uae_u32 k2=0; uae_s32 len=bi->len; uae_u32 tmp=bi->min_pcp; uae_u32* pos; len+=(tmp&3); tmp&=(~3); pos=(uae_u32*)tmp; if (len<0 || len>MAX_CHECKSUM_LEN) { *c1=0; *c2=0; } else { while (len>0) { k1+=*pos; k2^=*pos; pos++; len-=4; } *c1=k1; *c2=k2; } } static void show_checksum(blockinfo* bi) { uae_u32 k1=0; uae_u32 k2=0; uae_s32 len=bi->len; uae_u32 tmp=(uae_u32)bi->pc_p; uae_u32* pos; len+=(tmp&3); tmp&=(~3); pos=(uae_u32*)tmp; if (len<0 || len>MAX_CHECKSUM_LEN) { return; } else { while (len>0) { write_log (_T("%08x "),*pos); pos++; len-=4; } write_log (_T(" bla\n")); } } int check_for_cache_miss(void) { blockinfo* bi=get_blockinfo_addr(regs.pc_p); if (bi) { int cl=cacheline(regs.pc_p); if (bi!=cache_tags[cl+1].bi) { raise_in_cl_list(bi); return 1; } } return 0; } static void recompile_block(void) { /* An existing block's countdown code has expired. We need to make sure that execute_normal doesn't refuse to recompile due to a perceived cache miss... */ blockinfo* bi=get_blockinfo_addr(regs.pc_p); Dif (!bi) jit_abort (_T("recompile_block")); raise_in_cl_list(bi); execute_normal(); return; } static void cache_miss(void) { blockinfo* bi=get_blockinfo_addr(regs.pc_p); uae_u32 cl=cacheline(regs.pc_p); blockinfo* bi2=get_blockinfo(cl); if (!bi) { execute_normal(); /* Compile this block now */ return; } Dif (!bi2 || bi==bi2) { jit_abort (_T("Unexplained cache miss %p %p\n"),bi,bi2); } raise_in_cl_list(bi); return; } static void check_checksum(void) { blockinfo* bi=get_blockinfo_addr(regs.pc_p); uae_u32 cl=cacheline(regs.pc_p); blockinfo* bi2=get_blockinfo(cl); uae_u32 c1,c2; checksum_count++; /* These are not the droids you are looking for... */ if (!bi) { /* Whoever is the primary target is in a dormant state, but calling it was accidental, and we should just compile this new block */ execute_normal(); return; } if (bi!=bi2) { /* The block was hit accidentally, but it does exist. Cache miss */ cache_miss(); return; } if (bi->c1 || bi->c2) calc_checksum(bi,&c1,&c2); else { c1=c2=1; /* Make sure it doesn't match */ } if (c1==bi->c1 && c2==bi->c2) { /* This block is still OK. So we reactivate. Of course, that means we have to move it into the needs-to-be-flushed list */ bi->handler_to_use=bi->handler; set_dhtu(bi,bi->direct_handler); /* write_log (_T("JIT: reactivate %p/%p (%x %x/%x %x)\n"),bi,bi->pc_p, c1,c2,bi->c1,bi->c2);*/ remove_from_list(bi); add_to_active(bi); raise_in_cl_list(bi); } else { /* This block actually changed. We need to invalidate it, and set it up to be recompiled */ /* write_log (_T("JIT: discard %p/%p (%x %x/%x %x)\n"),bi,bi->pc_p, c1,c2,bi->c1,bi->c2); */ invalidate_block(bi); raise_in_cl_list(bi); execute_normal(); } } STATIC_INLINE void create_popalls(void) { int i,r; current_compile_p=popallspace; set_target(current_compile_p); #if USE_PUSH_POP /* If we can't use gcc inline assembly, we need to pop some registers before jumping back to the various get-out routines. This generates the code for it. */ popall_do_nothing=current_compile_p; for (i=0;idirect_pen=(cpuop_func*)get_target(); raw_mov_l_rm(0,(uae_u32)&(bi->pc_p)); raw_mov_l_mr((uae_u32)®s.pc_p,0); raw_jmp((uae_u32)popall_execute_normal); align_target(32); bi->direct_pcc=(cpuop_func*)get_target(); raw_mov_l_rm(0,(uae_u32)&(bi->pc_p)); raw_mov_l_mr((uae_u32)®s.pc_p,0); raw_jmp((uae_u32)popall_check_checksum); align_target(32); current_compile_p=get_target(); bi->deplist=NULL; for (i=0;i<2;i++) { bi->dep[i].prev_p=NULL; bi->dep[i].next=NULL; } bi->env=default_ss; bi->status=BI_NEW; bi->havestate=0; //bi->env=empty_ss; } void compemu_reset(void) { set_cache_state(0); } void build_comp(void) { int i; int jumpcount=0; unsigned long opcode; const struct comptbl* tbl=op_smalltbl_0_comp_ff; const struct comptbl* nftbl=op_smalltbl_0_comp_nf; int count; #ifdef NOFLAGS_SUPPORT struct comptbl *nfctbl = (currprefs.cpu_level >= 5 ? op_smalltbl_0_nf : currprefs.cpu_level == 4 ? op_smalltbl_1_nf : (currprefs.cpu_level == 2 || currprefs.cpu_level == 3) ? op_smalltbl_2_nf : currprefs.cpu_level == 1 ? op_smalltbl_3_nf : ! currprefs.cpu_compatible ? op_smalltbl_4_nf : op_smalltbl_5_nf); #endif raw_init_cpu(); #ifdef NATMEM_OFFSET write_log (_T("JIT: Setting signal handler\n")); #ifndef _WIN32 struct sigaction sa; sa.sa_handler = (void (*)(int)) vec; sigemptyset(&sa.sa_mask); sa.sa_flags = SA_RESTART; sigaction(SIGSEGV, &sa, NULL); // signal(SIGSEGV,vec); #endif #endif write_log (_T("JIT: Building Compiler function table\n")); for (opcode = 0; opcode < 65536; opcode++) { #ifdef NOFLAGS_SUPPORT nfcpufunctbl[opcode] = op_illg; #endif compfunctbl[opcode] = NULL; nfcompfunctbl[opcode] = NULL; prop[opcode].use_flags = 0x1f; prop[opcode].set_flags = 0x1f; prop[opcode].is_jump=1; } for (i = 0; tbl[i].opcode < 65536; i++) { int isjmp=(tbl[i].specific&1); int isaddx=(tbl[i].specific&8); int iscjmp=(tbl[i].specific&16); prop[tbl[i].opcode].is_jump=isjmp; prop[tbl[i].opcode].is_const_jump=iscjmp; prop[tbl[i].opcode].is_addx=isaddx; compfunctbl[tbl[i].opcode] = tbl[i].handler; } for (i = 0; nftbl[i].opcode < 65536; i++) { nfcompfunctbl[nftbl[i].opcode] = nftbl[i].handler; #ifdef NOFLAGS_SUPPORT nfcpufunctbl[nftbl[i].opcode] = nfctbl[i].handler; #endif } #ifdef NOFLAGS_SUPPORT for (i = 0; nfctbl[i].handler; i++) { nfcpufunctbl[nfctbl[i].opcode] = nfctbl[i].handler; } #endif for (opcode = 0; opcode < 65536; opcode++) { compop_func *f; compop_func *nff; #ifdef NOFLAGS_SUPPORT compop_func *nfcf; #endif int isjmp,isaddx,iscjmp; int lvl; lvl = (currprefs.cpu_model - 68000) / 10; if (lvl > 4) lvl--; if (table68k[opcode].mnemo == i_ILLG || table68k[opcode].clev > lvl) continue; if (table68k[opcode].handler != -1) { f = compfunctbl[table68k[opcode].handler]; nff = nfcompfunctbl[table68k[opcode].handler]; #ifdef NOFLAGS_SUPPORT nfcf = nfcpufunctbl[table68k[opcode].handler]; #endif isjmp=prop[table68k[opcode].handler].is_jump; iscjmp=prop[table68k[opcode].handler].is_const_jump; isaddx=prop[table68k[opcode].handler].is_addx; prop[opcode].is_jump=isjmp; prop[opcode].is_const_jump=iscjmp; prop[opcode].is_addx=isaddx; compfunctbl[opcode] = f; nfcompfunctbl[opcode] = nff; #ifdef NOFLAGS_SUPPORT Dif (nfcf == op_illg) abort(); nfcpufunctbl[opcode] = nfcf; #endif } prop[opcode].set_flags =table68k[opcode].flagdead; prop[opcode].use_flags =table68k[opcode].flaglive; /* Unconditional jumps don't evaluate condition codes, so they don't actually use any flags themselves */ if (prop[opcode].is_const_jump) prop[opcode].use_flags=0; } #ifdef NOFLAGS_SUPPORT for (i = 0; nfctbl[i].handler != NULL; i++) { if (nfctbl[i].specific) nfcpufunctbl[tbl[i].opcode] = nfctbl[i].handler; } #endif count=0; for (opcode = 0; opcode < 65536; opcode++) { if (compfunctbl[opcode]) count++; } write_log (_T("JIT: Supposedly %d compileable opcodes!\n"),count); /* Initialise state */ alloc_cache(); create_popalls(); reset_lists(); for (i=0;ipc_p)].handler=(cpuop_func*)popall_execute_normal; cache_tags[cacheline(bi->pc_p)+1].bi=NULL; bi=bi->next; } bi=dormant; while(bi) { cache_tags[cacheline(bi->pc_p)].handler=(cpuop_func*)popall_execute_normal; cache_tags[cacheline(bi->pc_p)+1].bi=NULL; bi=bi->next; } reset_lists(); if (!compiled_code) return; current_compile_p=compiled_code; set_special(0); /* To get out of compiled code */ } /* "Soft flushing" --- instead of actually throwing everything away, we simply mark everything as "needs to be checked". */ void flush_icache(uaecptr ptr, int n) { blockinfo* bi; blockinfo* bi2; if (currprefs.comp_hardflush) { flush_icache_hard(ptr, n); return; } soft_flush_count++; if (!active) return; bi=active; while (bi) { uae_u32 cl=cacheline(bi->pc_p); if (!bi->handler) { /* invalidated block */ if (bi==cache_tags[cl+1].bi) cache_tags[cl].handler=(cpuop_func*)popall_execute_normal; bi->handler_to_use=(cpuop_func*)popall_execute_normal; set_dhtu(bi,bi->direct_pen); } else { if (bi==cache_tags[cl+1].bi) cache_tags[cl].handler=(cpuop_func*)popall_check_checksum; bi->handler_to_use=(cpuop_func*)popall_check_checksum; set_dhtu(bi,bi->direct_pcc); } bi2=bi; bi=bi->next; } /* bi2 is now the last entry in the active list */ bi2->next=dormant; if (dormant) dormant->prev_p=&(bi2->next); dormant=active; active->prev_p=&dormant; active=NULL; } static void catastrophe(void) { jit_abort (_T("catastprophe")); } int failure; void compile_block(cpu_history* pc_hist, int blocklen, int totcycles) { if (letit && compiled_code && currprefs.cpu_model>=68020) { /* OK, here we need to 'compile' a block */ int i; int r; int was_comp=0; uae_u8 liveflags[MAXRUN+1]; uae_u32 max_pcp=(uae_u32)pc_hist[0].location; uae_u32 min_pcp=max_pcp; uae_u32 cl=cacheline(pc_hist[0].location); void* specflags=(void*)®s.spcflags; blockinfo* bi=NULL; blockinfo* bi2; int extra_len=0; compile_count++; if (current_compile_p>=max_compile_start) flush_icache_hard(0, 3); alloc_blockinfos(); bi=get_blockinfo_addr_new(pc_hist[0].location,0); bi2=get_blockinfo(cl); optlev=bi->optlevel; if (bi->handler) { Dif (bi!=bi2) { /* I don't think it can happen anymore. Shouldn't, in any case. So let's make sure... */ jit_abort (_T("JIT: WOOOWOO count=%d, ol=%d %p %p\n"), bi->count,bi->optlevel,bi->handler_to_use, cache_tags[cl].handler); } Dif (bi->count!=-1 && bi->status!=BI_TARGETTED) { /* What the heck? We are not supposed to be here! */ jit_abort (_T("BI_TARGETTED")); } } if (bi->count==-1) { optlev++; while (!currprefs.optcount[optlev]) optlev++; bi->count=currprefs.optcount[optlev]-1; } current_block_pc_p=(uae_u32)pc_hist[0].location; remove_deps(bi); /* We are about to create new code */ bi->optlevel=optlev; bi->pc_p=(uae_u8*)pc_hist[0].location; liveflags[blocklen]=0x1f; /* All flags needed afterwards */ i=blocklen; while (i--) { uae_u16* currpcp=pc_hist[i].location; int op=cft_map(*currpcp); if ((uae_u32)currpcpmax_pcp) max_pcp=(uae_u32)currpcp; if (currprefs.compnf) { liveflags[i]=((liveflags[i+1]& (~prop[op].set_flags))| prop[op].use_flags); if (prop[op].is_addx && (liveflags[i+1]&FLAG_Z)==0) liveflags[i]&= ~FLAG_Z; } else { liveflags[i]=0x1f; } } bi->needed_flags=liveflags[0]; /* This is the non-direct handler */ align_target(32); set_target(get_target()+1); align_target(16); /* Now aligned at n*32+16 */ bi->handler= bi->handler_to_use=(cpuop_func*)get_target(); raw_cmp_l_mi((uae_u32)®s.pc_p,(uae_u32)pc_hist[0].location); raw_jnz((uae_u32)popall_cache_miss); /* This was 16 bytes on the x86, so now aligned on (n+1)*32 */ was_comp=0; #if USE_MATCHSTATE comp_pc_p=(uae_u8*)pc_hist[0].location; init_comp(); match_states(&(bi->env)); was_comp=1; #endif bi->direct_handler=(cpuop_func*)get_target(); set_dhtu(bi,bi->direct_handler); current_block_start_target=(uae_u32)get_target(); if (bi->count>=0) { /* Need to generate countdown code */ raw_mov_l_mi((uae_u32)®s.pc_p,(uae_u32)pc_hist[0].location); raw_sub_l_mi((uae_u32)&(bi->count),1); raw_jl((uae_u32)popall_recompile_block); } if (optlev==0) { /* No need to actually translate */ /* Execute normally without keeping stats */ raw_mov_l_mi((uae_u32)®s.pc_p,(uae_u32)pc_hist[0].location); raw_jmp((uae_u32)popall_exec_nostats); } else { reg_alloc_run=0; next_pc_p=0; taken_pc_p=0; branch_cc=0; log_startblock(); for (i=0;i1) { failure=0; if (!was_comp) { comp_pc_p=(uae_u8*)pc_hist[i].location; init_comp(); } was_comp++; comptbl[opcode](opcode); freescratch(); if (!(liveflags[i+1] & FLAG_CZNV)) { /* We can forget about flags */ dont_care_flags(); } #if INDIVIDUAL_INST flush(1); nop(); flush(1); was_comp=0; #endif } else failure=1; if (failure) { if (was_comp) { flush(1); was_comp=0; } raw_mov_l_ri(REG_PAR1,(uae_u32)opcode); raw_mov_l_ri(REG_PAR2,(uae_u32)®s); #if USE_NORMAL_CALLING_CONVENTION raw_push_l_r(REG_PAR2); raw_push_l_r(REG_PAR1); #endif raw_mov_l_mi((uae_u32)®s.pc_p, (uae_u32)pc_hist[i].location); raw_call((uae_u32)cputbl[opcode]); //raw_add_l_mi((uae_u32)&oink,1); // FIXME #if USE_NORMAL_CALLING_CONVENTION raw_inc_sp(8); #endif /*if (needed_flags) raw_mov_l_mi((uae_u32)&foink3,(uae_u32)opcode+65536); else raw_mov_l_mi((uae_u32)&foink3,(uae_u32)opcode); */ if (ineeded_flags; if (x==0xff || 1) { /* To be on the safe side */ uae_u16* next=(uae_u16*)next_pc_p; uae_u16 op=cft_map(*next); x=0x1f; x&=(~prop[op].set_flags); x|=prop[op].use_flags; } x|=bi2->needed_flags; if (!(x & FLAG_CZNV)) { /* We can forget about flags */ dont_care_flags(); extra_len+=2; /* The next instruction now is part of this block */ } } #endif if (next_pc_p) { /* A branch was registered */ uae_u32 t1=next_pc_p; uae_u32 t2=taken_pc_p; int cc=branch_cc; uae_u32* branchadd; uae_u32* tba; bigstate tmp; blockinfo* tbi; if (taken_pc_penv)); //flush(1); /* Can only get here if was_comp==1 */ raw_sub_l_mi((uae_u32)&countdown,scaled_cycles(totcycles)); raw_jcc_l_oponly(9); tba=(uae_u32*)get_target(); emit_long(get_handler(t1)-((uae_u32)tba+4)); raw_mov_l_mi((uae_u32)®s.pc_p,t1); raw_jmp((uae_u32)popall_do_nothing); create_jmpdep(bi,0,tba,t1); align_target(16); /* not-predicted outcome */ *branchadd=(uae_u32)get_target()-((uae_u32)branchadd+4); live=tmp; /* Ouch again */ tbi=get_blockinfo_addr_new((void*)t2,1); match_states(&(tbi->env)); //flush(1); /* Can only get here if was_comp==1 */ raw_sub_l_mi((uae_u32)&countdown,scaled_cycles(totcycles)); raw_jcc_l_oponly(9); tba=(uae_u32*)get_target(); emit_long(get_handler(t2)-((uae_u32)tba+4)); raw_mov_l_mi((uae_u32)®s.pc_p,t2); raw_jmp((uae_u32)popall_do_nothing); create_jmpdep(bi,1,tba,t2); } else { if (was_comp) { flush(1); } /* Let's find out where next_handler is... */ if (was_comp && isinreg(PC_P)) { int r2; r=live.state[PC_P].realreg; if (r==0) r2=1; else r2=0; raw_and_l_ri(r,TAGMASK); raw_mov_l_ri(r2,(uae_u32)popall_do_nothing); raw_sub_l_mi((uae_u32)&countdown,scaled_cycles(totcycles)); raw_cmov_l_rm_indexed(r2,(uae_u32)cache_tags,r,9); raw_jmp_r(r2); } else if (was_comp && isconst(PC_P)) { uae_u32 v=live.state[PC_P].val; uae_u32* tba; blockinfo* tbi; tbi=get_blockinfo_addr_new((void*)v,1); match_states(&(tbi->env)); raw_sub_l_mi((uae_u32)&countdown,scaled_cycles(totcycles)); raw_jcc_l_oponly(9); tba=(uae_u32*)get_target(); emit_long(get_handler(v)-((uae_u32)tba+4)); raw_mov_l_mi((uae_u32)®s.pc_p,v); raw_jmp((uae_u32)popall_do_nothing); create_jmpdep(bi,0,tba,v); } else { int r2; r=REG_PC_TMP; raw_mov_l_rm(r,(uae_u32)®s.pc_p); if (r==0) r2=1; else r2=0; raw_and_l_ri(r,TAGMASK); raw_mov_l_ri(r2,(uae_u32)popall_do_nothing); raw_sub_l_mi((uae_u32)&countdown,scaled_cycles(totcycles)); raw_cmov_l_rm_indexed(r2,(uae_u32)cache_tags,r,9); raw_jmp_r(r2); } } } if (next_pc_p+extra_len>=max_pcp && next_pc_p+extra_lenlen=max_pcp-min_pcp; bi->min_pcp=min_pcp; remove_from_list(bi); if (isinrom(min_pcp) && isinrom(max_pcp)) add_to_dormant(bi); /* No need to checksum it on cache flush. Please don't start changing ROMs in flight! */ else { calc_checksum(bi,&(bi->c1),&(bi->c2)); add_to_active(bi); } log_dump(); align_target(32); current_compile_p=get_target(); raise_in_cl_list(bi); bi->nexthandler=current_compile_p; /* We will flush soon, anyway, so let's do it now */ if (current_compile_p>=max_compile_start) flush_icache_hard(0, 3); do_extra_cycles(totcycles); /* for the compilation time */ } } #endif fs-uae-2.2.3+dfsg/src/jit/compemu_support_codegen.cpp0000644000175000017500000046134012162366654023072 0ustar glaubitzglaubitz/* * compiler/compemu_support.cpp - Core dynamic translation engine * * Original 68040 JIT compiler for UAE, copyright 2000-2002 Bernd Meyer * * Adaptation for Basilisk II and improvements, copyright 2000-2005 * Gwenole Beauchesne * * Basilisk II (C) 1997-2008 Christian Bauer * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #if 0 #if !REAL_ADDRESSING && !DIRECT_ADDRESSING #error "Only Real or Direct Addressing is supported with the JIT Compiler" #endif #if X86_ASSEMBLY && !SAHF_SETO_PROFITABLE #error "Only [LS]AHF scheme to [gs]et flags is supported with the JIT Compiler" #endif #endif /* NOTE: support for AMD64 assumes translation cache and other code * buffers are allocated into a 32-bit address space because (i) B2/JIT * code is not 64-bit clean and (ii) it's faster to resolve branches * that way. */ #if 0 #if !defined(__i386__) && !defined(__x86_64__) #error "Only IA-32 and X86-64 targets are supported with the JIT Compiler" #endif #endif #define USE_MATCH 0 /* kludge for Brian, so he can compile under MSVC++ */ #define USE_NORMAL_CALLING_CONVENTION 0 #ifndef WIN32 #include #include #include #endif #include #include #include #include "sysconfig.h" #include "sysdeps.h" #if 0 #include "cpu_emulation.h" #include "main.h" #include "prefs.h" #include "user_strings.h" #include "vm_alloc.h" #endif //#include "machdep/m68k.h" #include "custom.h" #include "uae/memory.h" //#include "readcpu.h" #include "newcpu.h" #include "comptbl.h" #include "jit/compemu_codegen.h" #include "fpu/fpu.h" #include "fpu/flags.h" #define DEBUG 1 #include "debug.h" #ifdef ENABLE_MON #include "mon.h" #endif #ifndef WIN32 #define PROFILE_COMPILE_TIME 1 #define PROFILE_UNTRANSLATED_INSNS 1 #endif #if defined(__x86_64__) && 0 #define RECORD_REGISTER_USAGE 1 #endif #ifdef WIN32 #undef write_log #define write_log dummy_write_log static void dummy_write_log(const char *, ...) { } #endif #if JIT_DEBUG #undef abort #define abort() do { \ fprintf(stderr, "Abort in file %s at line %d\n", __FILE__, __LINE__); \ exit(EXIT_FAILURE); \ } while (0) #endif #if RECORD_REGISTER_USAGE static uint64 reg_count[16]; static int reg_count_local[16]; static int reg_count_compare(const void *ap, const void *bp) { const int a = *((int *)ap); const int b = *((int *)bp); return reg_count[b] - reg_count[a]; } #endif #if PROFILE_COMPILE_TIME #include static uae_u32 compile_count = 0; static clock_t compile_time = 0; static clock_t emul_start_time = 0; static clock_t emul_end_time = 0; #endif #if PROFILE_UNTRANSLATED_INSNS const int untranslated_top_ten = 20; static uae_u32 raw_cputbl_count[65536] = { 0, }; static uae_u16 opcode_nums[65536]; static int untranslated_compfn(const void *e1, const void *e2) { return raw_cputbl_count[*(const uae_u16 *)e1] < raw_cputbl_count[*(const uae_u16 *)e2]; } #endif static compop_func *compfunctbl[65536]; static compop_func *nfcompfunctbl[65536]; static cpuop_func *nfcpufunctbl[65536]; uae_u8* comp_pc_p; // From newcpu.cpp extern bool quit_program; // gb-- Extra data for Basilisk II/JIT #if JIT_DEBUG static bool JITDebug = false; // Enable runtime disassemblers through mon? #else const bool JITDebug = false; // Don't use JIT debug mode at all #endif #if USE_INLINING static bool follow_const_jumps = true; // Flag: translation through constant jumps #else const bool follow_const_jumps = false; #endif const uae_u32 MIN_CACHE_SIZE = 1024; // Minimal translation cache size (1 MB) static uae_u32 cache_size = 0; // Size of total cache allocated for compiled blocks static uae_u32 current_cache_size = 0; // Cache grows upwards: how much has been consumed already static bool lazy_flush = true; // Flag: lazy translation cache invalidation static bool avoid_fpu = true; // Flag: compile FPU instructions ? static bool have_cmov = false; // target has CMOV instructions ? static bool have_lahf_lm = true; // target has LAHF supported in long mode ? static bool have_rat_stall = true; // target has partial register stalls ? const bool tune_alignment = true; // Tune code alignments for running CPU ? const bool tune_nop_fillers = true; // Tune no-op fillers for architecture static bool setzflg_uses_bsf = false; // setzflg virtual instruction can use native BSF instruction correctly? static int align_loops = 32; // Align the start of loops static int align_jumps = 32; // Align the start of jumps static int optcount[10] = { 10, // How often a block has to be executed before it is translated 0, // How often to use naive translation 0, 0, 0, 0, -1, -1, -1, -1 }; struct op_properties { uae_u8 use_flags; uae_u8 set_flags; uae_u8 is_addx; uae_u8 cflow; }; static op_properties prop[65536]; static inline int end_block(uae_u32 opcode) { return (prop[opcode].cflow & fl_end_block); } static inline bool is_const_jump(uae_u32 opcode) { return (prop[opcode].cflow == fl_const_jump); } static inline bool may_trap(uae_u32 opcode) { return (prop[opcode].cflow & fl_trap); } static inline unsigned int cft_map (unsigned int f) { #ifndef HAVE_GET_WORD_UNSWAPPED return f; #else return ((f >> 8) & 255) | ((f & 255) << 8); #endif } uae_u8* start_pc_p; uae_u32 start_pc; uae_u32 current_block_pc_p; static uintptr current_block_start_target; uae_u32 needed_flags; static uintptr next_pc_p; static uintptr taken_pc_p; static int branch_cc; static int redo_current_block; int segvcount=0; int soft_flush_count=0; int hard_flush_count=0; int checksum_count=0; static uae_u8* current_compile_p=NULL; static uae_u8* max_compile_start; static uae_u8* compiled_code=NULL; static uae_s32 reg_alloc_run; const int POPALLSPACE_SIZE = 1024; /* That should be enough space */ static uae_u8* popallspace=NULL; void* pushall_call_handler=NULL; static void* popall_do_nothing=NULL; static void* popall_exec_nostats=NULL; static void* popall_execute_normal=NULL; static void* popall_cache_miss=NULL; static void* popall_recompile_block=NULL; static void* popall_check_checksum=NULL; /* The 68k only ever executes from even addresses. So right now, we * waste half the entries in this array * UPDATE: We now use those entries to store the start of the linked * lists that we maintain for each hash result. */ cacheline cache_tags[TAGSIZE]; int letit=0; blockinfo* hold_bi[MAX_HOLD_BI]; blockinfo* active; blockinfo* dormant; /* 68040 */ extern struct cputbl op_smalltbl_0_nf[]; extern struct comptbl op_smalltbl_0_comp_nf[]; extern struct comptbl op_smalltbl_0_comp_ff[]; /* 68020 + 68881 */ extern struct cputbl op_smalltbl_1_nf[]; /* 68020 */ extern struct cputbl op_smalltbl_2_nf[]; /* 68010 */ extern struct cputbl op_smalltbl_3_nf[]; /* 68000 */ extern struct cputbl op_smalltbl_4_nf[]; /* 68000 slow but compatible. */ extern struct cputbl op_smalltbl_5_nf[]; static void flush_icache_hard(int n); static void flush_icache_lazy(int n); static void flush_icache_none(int n); void (*flush_icache)(int n) = flush_icache_none; bigstate live; smallstate empty_ss; smallstate default_ss; static int optlev; static int writereg(int r, int size); static void unlock2(int r); static void setlock(int r); static int readreg_specific(int r, int size, int spec); static int writereg_specific(int r, int size, int spec); static void prepare_for_call_1(void); static void prepare_for_call_2(void); static void align_target(uae_u32 a); static uae_s32 nextused[VREGS]; uae_u32 m68k_pc_offset; /* Some arithmetic ooperations can be optimized away if the operands * are known to be constant. But that's only a good idea when the * side effects they would have on the flags are not important. This * variable indicates whether we need the side effects or not */ uae_u32 needflags=0; /* Flag handling is complicated. * * x86 instructions create flags, which quite often are exactly what we * want. So at times, the "68k" flags are actually in the x86 flags. * * Then again, sometimes we do x86 instructions that clobber the x86 * flags, but don't represent a corresponding m68k instruction. In that * case, we have to save them. * * We used to save them to the stack, but now store them back directly * into the regflags.cznv of the traditional emulation. Thus some odd * names. * * So flags can be in either of two places (used to be three; boy were * things complicated back then!); And either place can contain either * valid flags or invalid trash (and on the stack, there was also the * option of "nothing at all", now gone). A couple of variables keep * track of the respective states. * * To make things worse, we might or might not be interested in the flags. * by default, we are, but a call to dont_care_flags can change that * until the next call to live_flags. If we are not, pretty much whatever * is in the register and/or the native flags is seen as valid. */ static __inline__ blockinfo* get_blockinfo(uae_u32 cl) { return cache_tags[cl+1].bi; } static __inline__ blockinfo* get_blockinfo_addr(void* addr) { blockinfo* bi=get_blockinfo(cacheline(addr)); while (bi) { if (bi->pc_p==addr) return bi; bi=bi->next_same_cl; } return NULL; } /******************************************************************* * All sorts of list related functions for all of the lists * *******************************************************************/ static __inline__ void remove_from_cl_list(blockinfo* bi) { uae_u32 cl=cacheline(bi->pc_p); if (bi->prev_same_cl_p) *(bi->prev_same_cl_p)=bi->next_same_cl; if (bi->next_same_cl) bi->next_same_cl->prev_same_cl_p=bi->prev_same_cl_p; if (cache_tags[cl+1].bi) cache_tags[cl].handler=cache_tags[cl+1].bi->handler_to_use; else cache_tags[cl].handler=(cpuop_func *)popall_execute_normal; } static __inline__ void remove_from_list(blockinfo* bi) { if (bi->prev_p) *(bi->prev_p)=bi->next; if (bi->next) bi->next->prev_p=bi->prev_p; } static __inline__ void remove_from_lists(blockinfo* bi) { remove_from_list(bi); remove_from_cl_list(bi); } static __inline__ void add_to_cl_list(blockinfo* bi) { uae_u32 cl=cacheline(bi->pc_p); if (cache_tags[cl+1].bi) cache_tags[cl+1].bi->prev_same_cl_p=&(bi->next_same_cl); bi->next_same_cl=cache_tags[cl+1].bi; cache_tags[cl+1].bi=bi; bi->prev_same_cl_p=&(cache_tags[cl+1].bi); cache_tags[cl].handler=bi->handler_to_use; } static __inline__ void raise_in_cl_list(blockinfo* bi) { remove_from_cl_list(bi); add_to_cl_list(bi); } static __inline__ void add_to_active(blockinfo* bi) { if (active) active->prev_p=&(bi->next); bi->next=active; active=bi; bi->prev_p=&active; } static __inline__ void add_to_dormant(blockinfo* bi) { if (dormant) dormant->prev_p=&(bi->next); bi->next=dormant; dormant=bi; bi->prev_p=&dormant; } static __inline__ void remove_dep(dependency* d) { if (d->prev_p) *(d->prev_p)=d->next; if (d->next) d->next->prev_p=d->prev_p; d->prev_p=NULL; d->next=NULL; } /* This block's code is about to be thrown away, so it no longer depends on anything else */ static __inline__ void remove_deps(blockinfo* bi) { remove_dep(&(bi->dep[0])); remove_dep(&(bi->dep[1])); } static __inline__ void adjust_jmpdep(dependency* d, cpuop_func* a) { *(d->jmp_off)=(uintptr)a-((uintptr)d->jmp_off+4); } /******************************************************************** * Soft flush handling support functions * ********************************************************************/ static __inline__ void set_dhtu(blockinfo* bi, cpuop_func* dh) { //write_log("bi is %p\n",bi); if (dh!=bi->direct_handler_to_use) { dependency* x=bi->deplist; //write_log("bi->deplist=%p\n",bi->deplist); while (x) { //write_log("x is %p\n",x); //write_log("x->next is %p\n",x->next); //write_log("x->prev_p is %p\n",x->prev_p); if (x->jmp_off) { adjust_jmpdep(x,dh); } x=x->next; } bi->direct_handler_to_use=dh; } } static __inline__ void invalidate_block(blockinfo* bi) { int i; bi->optlevel=0; bi->count=optcount[0]-1; bi->handler=NULL; bi->handler_to_use=(cpuop_func *)popall_execute_normal; bi->direct_handler=NULL; set_dhtu(bi,bi->direct_pen); bi->needed_flags=0xff; bi->status=BI_INVALID; for (i=0;i<2;i++) { bi->dep[i].jmp_off=NULL; bi->dep[i].target=NULL; } remove_deps(bi); } static __inline__ void create_jmpdep(blockinfo* bi, int i, uae_u32* jmpaddr, uae_u32 target) { blockinfo* tbi=get_blockinfo_addr((void*)(uintptr)target); Dif(!tbi) { write_log("Could not create jmpdep!\n"); abort(); } bi->dep[i].jmp_off=jmpaddr; bi->dep[i].source=bi; bi->dep[i].target=tbi; bi->dep[i].next=tbi->deplist; if (bi->dep[i].next) bi->dep[i].next->prev_p=&(bi->dep[i].next); bi->dep[i].prev_p=&(tbi->deplist); tbi->deplist=&(bi->dep[i]); } static __inline__ void block_need_recompile(blockinfo * bi) { uae_u32 cl = cacheline(bi->pc_p); set_dhtu(bi, bi->direct_pen); bi->direct_handler = bi->direct_pen; bi->handler_to_use = (cpuop_func *)popall_execute_normal; bi->handler = (cpuop_func *)popall_execute_normal; if (bi == cache_tags[cl + 1].bi) cache_tags[cl].handler = (cpuop_func *)popall_execute_normal; bi->status = BI_NEED_RECOMP; } static __inline__ void mark_callers_recompile(blockinfo * bi) { dependency *x = bi->deplist; while (x) { dependency *next = x->next; /* This disappears when we mark for * recompilation and thus remove the * blocks from the lists */ if (x->jmp_off) { blockinfo *cbi = x->source; Dif(cbi->status == BI_INVALID) { // write_log("invalid block in dependency list\n"); // FIXME? // abort(); } if (cbi->status == BI_ACTIVE || cbi->status == BI_NEED_CHECK) { block_need_recompile(cbi); mark_callers_recompile(cbi); } else if (cbi->status == BI_COMPILING) { redo_current_block = 1; } else if (cbi->status == BI_NEED_RECOMP) { /* nothing */ } else { //write_log("Status %d in mark_callers\n",cbi->status); // FIXME? } } x = next; } } static __inline__ blockinfo* get_blockinfo_addr_new(void* addr, int setstate) { blockinfo* bi=get_blockinfo_addr(addr); int i; if (!bi) { for (i=0;ipc_p=(uae_u8 *)addr; invalidate_block(bi); add_to_active(bi); add_to_cl_list(bi); } } } if (!bi) { write_log("Looking for blockinfo, can't find free one\n"); abort(); } return bi; } static void prepare_block(blockinfo* bi); /* Managment of blockinfos. A blockinfo struct is allocated whenever a new block has to be compiled. If the list of free blockinfos is empty, we allocate a new pool of blockinfos and link the newly created blockinfos altogether into the list of free blockinfos. Otherwise, we simply pop a structure off the free list. Blockinfo are lazily deallocated, i.e. chained altogether in the list of free blockinfos whenvever a translation cache flush (hard or soft) request occurs. */ template< class T > class LazyBlockAllocator { enum { kPoolSize = 1 + 4096 / sizeof(T) }; struct Pool { T chunk[kPoolSize]; Pool * next; }; Pool * mPools; T * mChunks; public: LazyBlockAllocator() : mPools(0), mChunks(0) { } ~LazyBlockAllocator(); T * acquire(); void release(T * const); }; template< class T > LazyBlockAllocator::~LazyBlockAllocator() { Pool * currentPool = mPools; while (currentPool) { Pool * deadPool = currentPool; currentPool = currentPool->next; free(deadPool); } } template< class T > T * LazyBlockAllocator::acquire() { if (!mChunks) { // There is no chunk left, allocate a new pool and link the // chunks into the free list Pool * newPool = (Pool *)malloc(sizeof(Pool)); for (T * chunk = &newPool->chunk[0]; chunk < &newPool->chunk[kPoolSize]; chunk++) { chunk->next = mChunks; mChunks = chunk; } newPool->next = mPools; mPools = newPool; } T * chunk = mChunks; mChunks = chunk->next; return chunk; } template< class T > void LazyBlockAllocator::release(T * const chunk) { chunk->next = mChunks; mChunks = chunk; } template< class T > class HardBlockAllocator { public: T * acquire() { T * data = (T *)current_compile_p; current_compile_p += sizeof(T); return data; } void release(T * const chunk) { // Deallocated on invalidation } }; #if USE_SEPARATE_BIA static LazyBlockAllocator BlockInfoAllocator; static LazyBlockAllocator ChecksumInfoAllocator; #else static HardBlockAllocator BlockInfoAllocator; static HardBlockAllocator ChecksumInfoAllocator; #endif static __inline__ checksum_info *alloc_checksum_info(void) { checksum_info *csi = ChecksumInfoAllocator.acquire(); csi->next = NULL; return csi; } static __inline__ void free_checksum_info(checksum_info *csi) { csi->next = NULL; ChecksumInfoAllocator.release(csi); } static __inline__ void free_checksum_info_chain(checksum_info *csi) { while (csi != NULL) { checksum_info *csi2 = csi->next; free_checksum_info(csi); csi = csi2; } } static __inline__ blockinfo *alloc_blockinfo(void) { blockinfo *bi = BlockInfoAllocator.acquire(); #if USE_CHECKSUM_INFO bi->csi = NULL; #endif return bi; } static __inline__ void free_blockinfo(blockinfo *bi) { #if USE_CHECKSUM_INFO free_checksum_info_chain(bi->csi); bi->csi = NULL; #endif BlockInfoAllocator.release(bi); } static __inline__ void alloc_blockinfos(void) { int i; blockinfo* bi; for (i=0;i>24)&0xff) | ((v>>8)&0xff00) | ((v<<8)&0xff0000) | ((v<<24)&0xff000000); #endif } /******************************************************************** * Getting the information about the target CPU * ********************************************************************/ #include "codegen_x86.cpp" void set_target(uae_u8* t) { target=t; } static __inline__ uae_u8* get_target_noopt(void) { return target; } __inline__ uae_u8* get_target(void) { return get_target_noopt(); } /******************************************************************** * Flags status handling. EMIT TIME! * ********************************************************************/ static void bt_l_ri_noclobber(R4 r, IMM i); static void make_flags_live_internal(void) { if (live.flags_in_flags==VALID) return; Dif (live.flags_on_stack==TRASH) { write_log("Want flags, got something on stack, but it is TRASH\n"); abort(); } if (live.flags_on_stack==VALID) { int tmp; tmp=readreg_specific(FLAGTMP,4,FLAG_NREG2); raw_reg_to_flags(tmp); unlock2(tmp); live.flags_in_flags=VALID; return; } write_log("Huh? live.flags_in_flags=%d, live.flags_on_stack=%d, but need to make live\n", live.flags_in_flags,live.flags_on_stack); abort(); } static void flags_to_stack(void) { if (live.flags_on_stack==VALID) return; if (!live.flags_are_important) { live.flags_on_stack=VALID; return; } Dif (live.flags_in_flags!=VALID) abort(); else { int tmp; tmp=writereg_specific(FLAGTMP,4,FLAG_NREG1); raw_flags_to_reg(tmp); unlock2(tmp); } live.flags_on_stack=VALID; } static __inline__ void clobber_flags(void) { if (live.flags_in_flags==VALID && live.flags_on_stack!=VALID) flags_to_stack(); live.flags_in_flags=TRASH; } /* Prepare for leaving the compiled stuff */ static __inline__ void flush_flags(void) { flags_to_stack(); return; } int touchcnt; /******************************************************************** * Partial register flushing for optimized calls * ********************************************************************/ struct regusage { uae_u16 rmask; uae_u16 wmask; }; static inline void ru_set(uae_u16 *mask, int reg) { #if USE_OPTIMIZED_CALLS *mask |= 1 << reg; #endif } static inline bool ru_get(const uae_u16 *mask, int reg) { #if USE_OPTIMIZED_CALLS return (*mask & (1 << reg)); #else /* Default: instruction reads & write to register */ return true; #endif } static inline void ru_set_read(regusage *ru, int reg) { ru_set(&ru->rmask, reg); } static inline void ru_set_write(regusage *ru, int reg) { ru_set(&ru->wmask, reg); } static inline bool ru_read_p(const regusage *ru, int reg) { return ru_get(&ru->rmask, reg); } static inline bool ru_write_p(const regusage *ru, int reg) { return ru_get(&ru->wmask, reg); } static void ru_fill_ea(regusage *ru, int reg, amodes mode, wordsizes size, int write_mode) { switch (mode) { case Areg: reg += 8; /* fall through */ case Dreg: ru_set(write_mode ? &ru->wmask : &ru->rmask, reg); break; case Ad16: /* skip displacment */ m68k_pc_offset += 2; case Aind: case Aipi: case Apdi: ru_set_read(ru, reg+8); break; case Ad8r: ru_set_read(ru, reg+8); /* fall through */ case PC8r: { uae_u16 dp = comp_get_iword((m68k_pc_offset+=2)-2); reg = (dp >> 12) & 15; ru_set_read(ru, reg); if (dp & 0x100) m68k_pc_offset += (((dp & 0x30) >> 3) & 7) + ((dp & 3) * 2); break; } case PC16: case absw: case imm0: case imm1: m68k_pc_offset += 2; break; case absl: case imm2: m68k_pc_offset += 4; break; case immi: m68k_pc_offset += (size == sz_long) ? 4 : 2; break; } } /* TODO: split into a static initialization part and a dynamic one (instructions depending on extension words) */ static void ru_fill(regusage *ru, uae_u32 opcode) { m68k_pc_offset += 2; /* Default: no register is used or written to */ ru->rmask = 0; ru->wmask = 0; uae_u32 real_opcode = cft_map(opcode); struct instr *dp = &table68k[real_opcode]; bool rw_dest = true; bool handled = false; /* Handle some instructions specifically */ uae_u16 reg, ext; switch (dp->mnemo) { case i_BFCHG: case i_BFCLR: case i_BFEXTS: case i_BFEXTU: case i_BFFFO: case i_BFINS: case i_BFSET: case i_BFTST: ext = comp_get_iword((m68k_pc_offset+=2)-2); if (ext & 0x800) ru_set_read(ru, (ext >> 6) & 7); if (ext & 0x020) ru_set_read(ru, ext & 7); ru_fill_ea(ru, dp->dreg, (amodes)dp->dmode, (wordsizes)dp->size, 1); if (dp->dmode == Dreg) ru_set_read(ru, dp->dreg); switch (dp->mnemo) { case i_BFEXTS: case i_BFEXTU: case i_BFFFO: ru_set_write(ru, (ext >> 12) & 7); break; case i_BFINS: ru_set_read(ru, (ext >> 12) & 7); /* fall through */ case i_BFCHG: case i_BFCLR: case i_BSET: if (dp->dmode == Dreg) ru_set_write(ru, dp->dreg); break; } handled = true; rw_dest = false; break; case i_BTST: rw_dest = false; break; case i_CAS: { ext = comp_get_iword((m68k_pc_offset+=2)-2); int Du = ext & 7; ru_set_read(ru, Du); int Dc = (ext >> 6) & 7; ru_set_read(ru, Dc); ru_set_write(ru, Dc); break; } case i_CAS2: { int Dc1, Dc2, Du1, Du2, Rn1, Rn2; ext = comp_get_iword((m68k_pc_offset+=2)-2); Rn1 = (ext >> 12) & 15; Du1 = (ext >> 6) & 7; Dc1 = ext & 7; ru_set_read(ru, Rn1); ru_set_read(ru, Du1); ru_set_read(ru, Dc1); ru_set_write(ru, Dc1); ext = comp_get_iword((m68k_pc_offset+=2)-2); Rn2 = (ext >> 12) & 15; Du2 = (ext >> 6) & 7; Dc2 = ext & 7; ru_set_read(ru, Rn2); ru_set_read(ru, Du2); ru_set_write(ru, Dc2); break; } case i_DIVL: case i_MULL: m68k_pc_offset += 2; break; case i_LEA: case i_MOVE: case i_MOVEA: case i_MOVE16: rw_dest = false; break; case i_PACK: case i_UNPK: rw_dest = false; m68k_pc_offset += 2; break; case i_TRAPcc: m68k_pc_offset += (dp->size == sz_long) ? 4 : 2; break; case i_RTR: /* do nothing, just for coverage debugging */ break; /* TODO: handle EXG instruction */ } /* Handle A-Traps better */ if ((real_opcode & 0xf000) == 0xa000) { handled = true; } /* Handle EmulOps better */ if ((real_opcode & 0xff00) == 0x7100) { handled = true; ru->rmask = 0xffff; ru->wmask = 0; } if (dp->suse && !handled) ru_fill_ea(ru, dp->sreg, (amodes)dp->smode, (wordsizes)dp->size, 0); if (dp->duse && !handled) ru_fill_ea(ru, dp->dreg, (amodes)dp->dmode, (wordsizes)dp->size, 1); if (rw_dest) ru->rmask |= ru->wmask; handled = handled || dp->suse || dp->duse; /* Mark all registers as used/written if the instruction may trap */ if (may_trap(opcode)) { handled = true; ru->rmask = 0xffff; ru->wmask = 0xffff; } if (!handled) { write_log("ru_fill: %04x = { %04x, %04x }\n", real_opcode, ru->rmask, ru->wmask); abort(); } } /******************************************************************** * register allocation per block logging * ********************************************************************/ static uae_s8 vstate[VREGS]; static uae_s8 vwritten[VREGS]; static uae_s8 nstate[N_REGS]; #define L_UNKNOWN -127 #define L_UNAVAIL -1 #define L_NEEDED -2 #define L_UNNEEDED -3 static __inline__ void big_to_small_state(bigstate * b, smallstate * s) { int i; for (i = 0; i < VREGS; i++) s->virt[i] = vstate[i]; for (i = 0; i < N_REGS; i++) s->nat[i] = nstate[i]; } static __inline__ int callers_need_recompile(bigstate * b, smallstate * s) { int i; int reverse = 0; for (i = 0; i < VREGS; i++) { if (vstate[i] != L_UNNEEDED && s->virt[i] == L_UNNEEDED) return 1; if (vstate[i] == L_UNNEEDED && s->virt[i] != L_UNNEEDED) reverse++; } for (i = 0; i < N_REGS; i++) { if (nstate[i] >= 0 && nstate[i] != s->nat[i]) return 1; if (nstate[i] < 0 && s->nat[i] >= 0) reverse++; } if (reverse >= 2 && USE_MATCH) return 1; /* In this case, it might be worth recompiling the * callers */ return 0; } static __inline__ void log_startblock(void) { int i; for (i = 0; i < VREGS; i++) { vstate[i] = L_UNKNOWN; vwritten[i] = 0; } for (i = 0; i < N_REGS; i++) nstate[i] = L_UNKNOWN; } /* Using an n-reg for a temp variable */ static __inline__ void log_isused(int n) { if (nstate[n] == L_UNKNOWN) nstate[n] = L_UNAVAIL; } static __inline__ void log_visused(int r) { if (vstate[r] == L_UNKNOWN) vstate[r] = L_NEEDED; } static __inline__ void do_load_reg(int n, int r) { if (r == FLAGTMP) raw_load_flagreg(n, r); else if (r == FLAGX) raw_load_flagx(n, r); else raw_mov_l_rm(n, (uintptr) live.state[r].mem); } static __inline__ void check_load_reg(int n, int r) { raw_mov_l_rm(n, (uintptr) live.state[r].mem); } static __inline__ void log_vwrite(int r) { vwritten[r] = 1; } /* Using an n-reg to hold a v-reg */ static __inline__ void log_isreg(int n, int r) { static int count = 0; if (nstate[n] == L_UNKNOWN && r < 16 && !vwritten[r] && USE_MATCH) nstate[n] = r; else { do_load_reg(n, r); if (nstate[n] == L_UNKNOWN) nstate[n] = L_UNAVAIL; } if (vstate[r] == L_UNKNOWN) vstate[r] = L_NEEDED; } static __inline__ void log_clobberreg(int r) { if (vstate[r] == L_UNKNOWN) vstate[r] = L_UNNEEDED; } /* This ends all possibility of clever register allocation */ static __inline__ void log_flush(void) { int i; for (i = 0; i < VREGS; i++) if (vstate[i] == L_UNKNOWN) vstate[i] = L_NEEDED; for (i = 0; i < N_REGS; i++) if (nstate[i] == L_UNKNOWN) nstate[i] = L_UNAVAIL; } static __inline__ void log_dump(void) { int i; return; write_log("----------------------\n"); for (i = 0; i < N_REGS; i++) { switch (nstate[i]) { case L_UNKNOWN: write_log("Nat %d : UNKNOWN\n", i); break; case L_UNAVAIL: write_log("Nat %d : UNAVAIL\n", i); break; default: write_log("Nat %d : %d\n", i, nstate[i]); break; } } for (i = 0; i < VREGS; i++) { if (vstate[i] == L_UNNEEDED) write_log("Virt %d: UNNEEDED\n", i); } } /******************************************************************** * register status handling. EMIT TIME! * ********************************************************************/ static __inline__ void set_status(int r, int status) { if (status == ISCONST) log_clobberreg(r); live.state[r].status=status; } static __inline__ int isinreg(int r) { return live.state[r].status==CLEAN || live.state[r].status==DIRTY; } static __inline__ void adjust_nreg(int r, uae_u32 val) { if (!val) return; raw_lea_l_brr(r,r,val); } static void tomem(int r) { int rr=live.state[r].realreg; if (isinreg(r)) { if (live.state[r].val && live.nat[rr].nholds==1 && !live.nat[rr].locked) { // write_log("RemovingA offset %x from reg %d (%d) at %p\n", // live.state[r].val,r,rr,target); adjust_nreg(rr,live.state[r].val); live.state[r].val=0; live.state[r].dirtysize=4; set_status(r,DIRTY); } } if (live.state[r].status==DIRTY) { switch (live.state[r].dirtysize) { case 1: raw_mov_b_mr((uintptr)live.state[r].mem,rr); break; case 2: raw_mov_w_mr((uintptr)live.state[r].mem,rr); break; case 4: raw_mov_l_mr((uintptr)live.state[r].mem,rr); break; default: abort(); } log_vwrite(r); set_status(r,CLEAN); live.state[r].dirtysize=0; } } static __inline__ int isconst(int r) { return live.state[r].status==ISCONST; } int is_const(int r) { return isconst(r); } static __inline__ void writeback_const(int r) { if (!isconst(r)) return; Dif (live.state[r].needflush==NF_HANDLER) { write_log("Trying to write back constant NF_HANDLER!\n"); abort(); } raw_mov_l_mi((uintptr)live.state[r].mem,live.state[r].val); log_vwrite(r); live.state[r].val=0; set_status(r,INMEM); } static __inline__ void tomem_c(int r) { if (isconst(r)) { writeback_const(r); } else tomem(r); } static void evict(int r) { int rr; if (!isinreg(r)) return; tomem(r); rr=live.state[r].realreg; Dif (live.nat[rr].locked && live.nat[rr].nholds==1) { write_log("register %d in nreg %d is locked!\n",r,live.state[r].realreg); abort(); } live.nat[rr].nholds--; if (live.nat[rr].nholds!=live.state[r].realind) { /* Was not last */ int topreg=live.nat[rr].holds[live.nat[rr].nholds]; int thisind=live.state[r].realind; live.nat[rr].holds[thisind]=topreg; live.state[topreg].realind=thisind; } live.state[r].realreg=-1; set_status(r,INMEM); } static __inline__ void free_nreg(int r) { int i=live.nat[r].nholds; while (i) { int vr; --i; vr=live.nat[r].holds[i]; evict(vr); } Dif (live.nat[r].nholds!=0) { write_log("Failed to free nreg %d, nholds is %d\n",r,live.nat[r].nholds); abort(); } } /* Use with care! */ static __inline__ void isclean(int r) { if (!isinreg(r)) return; live.state[r].validsize=4; live.state[r].dirtysize=0; live.state[r].val=0; set_status(r,CLEAN); } static __inline__ void disassociate(int r) { isclean(r); evict(r); } static __inline__ void set_const(int r, uae_u32 val) { disassociate(r); live.state[r].val=val; set_status(r,ISCONST); } static __inline__ uae_u32 get_offset(int r) { return live.state[r].val; } static int alloc_reg_hinted(int r, int size, int willclobber, int hint) { int bestreg; uae_s32 when; int i; uae_s32 badness=0; /* to shut up gcc */ bestreg=-1; when=2000000000; /* XXX use a regalloc_order table? */ for (i=0;i0) { free_nreg(bestreg); } if (isinreg(r)) { int rr=live.state[r].realreg; /* This will happen if we read a partially dirty register at a bigger size */ Dif (willclobber || live.state[r].validsize>=size) abort(); Dif (live.nat[rr].nholds!=1) abort(); if (size==4 && live.state[r].validsize==2) { log_isused(bestreg); log_visused(r); raw_mov_l_rm(bestreg,(uintptr)live.state[r].mem); raw_bswap_32(bestreg); raw_zero_extend_16_rr(rr,rr); raw_zero_extend_16_rr(bestreg,bestreg); raw_bswap_32(bestreg); raw_lea_l_brr_indexed(rr,rr,bestreg,1,0); live.state[r].validsize=4; live.nat[rr].touched=touchcnt++; return rr; } if (live.state[r].validsize==1) { /* Nothing yet */ } evict(r); } if (!willclobber) { if (live.state[r].status!=UNDEF) { if (isconst(r)) { raw_mov_l_ri(bestreg,live.state[r].val); live.state[r].val=0; live.state[r].dirtysize=4; set_status(r,DIRTY); log_isused(bestreg); } else { log_isreg(bestreg, r); /* This will also load it! */ live.state[r].dirtysize=0; set_status(r,CLEAN); } } else { live.state[r].val=0; live.state[r].dirtysize=0; set_status(r,CLEAN); log_isused(bestreg); } live.state[r].validsize=4; } else { /* this is the easiest way, but not optimal. FIXME! */ /* Now it's trickier, but hopefully still OK */ if (!isconst(r) || size==4) { live.state[r].validsize=size; live.state[r].dirtysize=size; live.state[r].val=0; set_status(r,DIRTY); if (size == 4) { log_clobberreg(r); log_isused(bestreg); } else { log_visused(r); log_isused(bestreg); } } else { if (live.state[r].status!=UNDEF) raw_mov_l_ri(bestreg,live.state[r].val); live.state[r].val=0; live.state[r].validsize=4; live.state[r].dirtysize=4; set_status(r,DIRTY); log_isused(bestreg); } } live.state[r].realreg=bestreg; live.state[r].realind=live.nat[bestreg].nholds; live.nat[bestreg].touched=touchcnt++; live.nat[bestreg].holds[live.nat[bestreg].nholds]=r; live.nat[bestreg].nholds++; return bestreg; } static int alloc_reg(int r, int size, int willclobber) { return alloc_reg_hinted(r,size,willclobber,-1); } static void unlock2(int r) { Dif (!live.nat[r].locked) abort(); live.nat[r].locked--; } static void setlock(int r) { live.nat[r].locked++; } static void mov_nregs(int d, int s) { int ns=live.nat[s].nholds; int nd=live.nat[d].nholds; int i; if (s==d) return; if (nd>0) free_nreg(d); log_isused(d); raw_mov_l_rr(d,s); for (i=0;i=size) { n=live.state[r].realreg; switch(size) { case 1: if (live.nat[n].canbyte || spec>=0) { answer=n; } break; case 2: if (live.nat[n].canword || spec>=0) { answer=n; } break; case 4: answer=n; break; default: abort(); } if (answer<0) evict(r); } /* either the value was in memory to start with, or it was evicted and is in memory now */ if (answer<0) { answer=alloc_reg_hinted(r,spec>=0?4:size,0,spec); } if (spec>=0 && spec!=answer) { /* Too bad */ mov_nregs(spec,answer); answer=spec; } live.nat[answer].locked++; live.nat[answer].touched=touchcnt++; return answer; } static int readreg(int r, int size) { return readreg_general(r,size,-1,0); } static int readreg_specific(int r, int size, int spec) { return readreg_general(r,size,spec,0); } static int readreg_offset(int r, int size) { return readreg_general(r,size,-1,1); } /* writereg_general(r, size, spec) * * INPUT * - r : mid-layer register * - size : requested size (1/2/4) * - spec : -1 if find or make a register free, otherwise specifies * the physical register to use in any case * * OUTPUT * - hard (physical, x86 here) register allocated to virtual register r */ static __inline__ int writereg_general(int r, int size, int spec) { int n; int answer=-1; record_register(r); if (size<4) { remove_offset(r,spec); } make_exclusive(r,size,spec); if (isinreg(r)) { int nvsize=size>live.state[r].validsize?size:live.state[r].validsize; int ndsize=size>live.state[r].dirtysize?size:live.state[r].dirtysize; n=live.state[r].realreg; Dif (live.nat[n].nholds!=1) abort(); switch(size) { case 1: if (live.nat[n].canbyte || spec>=0) { live.state[r].dirtysize=ndsize; live.state[r].validsize=nvsize; answer=n; } break; case 2: if (live.nat[n].canword || spec>=0) { live.state[r].dirtysize=ndsize; live.state[r].validsize=nvsize; answer=n; } break; case 4: live.state[r].dirtysize=ndsize; live.state[r].validsize=nvsize; answer=n; break; default: abort(); } if (answer<0) evict(r); } /* either the value was in memory to start with, or it was evicted and is in memory now */ if (answer<0) { answer=alloc_reg_hinted(r,size,1,spec); } if (spec>=0 && spec!=answer) { mov_nregs(spec,answer); answer=spec; } if (live.state[r].status==UNDEF) live.state[r].validsize=4; live.state[r].dirtysize=size>live.state[r].dirtysize?size:live.state[r].dirtysize; live.state[r].validsize=size>live.state[r].validsize?size:live.state[r].validsize; live.nat[answer].locked++; live.nat[answer].touched=touchcnt++; if (size==4) { live.state[r].val=0; } else { Dif (live.state[r].val) { write_log("Problem with val\n"); abort(); } } set_status(r,DIRTY); return answer; } static int writereg(int r, int size) { return writereg_general(r,size,-1); } static int writereg_specific(int r, int size, int spec) { return writereg_general(r,size,spec); } static __inline__ int rmw_general(int r, int wsize, int rsize, int spec) { int n; int answer=-1; record_register(r); if (live.state[r].status==UNDEF) { write_log("WARNING: Unexpected read of undefined register %d\n",r); } remove_offset(r,spec); make_exclusive(r,0,spec); Dif (wsize=rsize) { n=live.state[r].realreg; Dif (live.nat[n].nholds!=1) abort(); switch(rsize) { case 1: if (live.nat[n].canbyte || spec>=0) { answer=n; } break; case 2: if (live.nat[n].canword || spec>=0) { answer=n; } break; case 4: answer=n; break; default: abort(); } if (answer<0) evict(r); } /* either the value was in memory to start with, or it was evicted and is in memory now */ if (answer<0) { answer=alloc_reg_hinted(r,spec>=0?4:rsize,0,spec); } if (spec>=0 && spec!=answer) { /* Too bad */ mov_nregs(spec,answer); answer=spec; } if (wsize>live.state[r].dirtysize) live.state[r].dirtysize=wsize; if (wsize>live.state[r].validsize) live.state[r].validsize=wsize; set_status(r,DIRTY); live.nat[answer].locked++; live.nat[answer].touched=touchcnt++; Dif (live.state[r].val) { write_log("Problem with val(rmw)\n"); abort(); } return answer; } static int rmw(int r, int wsize, int rsize) { return rmw_general(r,wsize,rsize,-1); } static int rmw_specific(int r, int wsize, int rsize, int spec) { return rmw_general(r,wsize,rsize,spec); } /* needed for restoring the carry flag on non-P6 cores */ static void bt_l_ri_noclobber(R4 r, IMM i) { int size=4; if (i<16) size=2; r=readreg(r,size); raw_bt_l_ri(r,i); unlock2(r); } /******************************************************************** * FPU register status handling. EMIT TIME! * ********************************************************************/ static void f_tomem(int r) { if (live.fate[r].status==DIRTY) { #if USE_LONG_DOUBLE raw_fmov_ext_mr((uintptr)live.fate[r].mem,live.fate[r].realreg); #else raw_fmov_mr((uintptr)live.fate[r].mem,live.fate[r].realreg); #endif live.fate[r].status=CLEAN; } } static void f_tomem_drop(int r) { if (live.fate[r].status==DIRTY) { #if USE_LONG_DOUBLE raw_fmov_ext_mr_drop((uintptr)live.fate[r].mem,live.fate[r].realreg); #else raw_fmov_mr_drop((uintptr)live.fate[r].mem,live.fate[r].realreg); #endif live.fate[r].status=INMEM; } } static __inline__ int f_isinreg(int r) { return live.fate[r].status==CLEAN || live.fate[r].status==DIRTY; } static void f_evict(int r) { int rr; if (!f_isinreg(r)) return; rr=live.fate[r].realreg; if (live.fat[rr].nholds==1) f_tomem_drop(r); else f_tomem(r); Dif (live.fat[rr].locked && live.fat[rr].nholds==1) { write_log("FPU register %d in nreg %d is locked!\n",r,live.fate[r].realreg); abort(); } live.fat[rr].nholds--; if (live.fat[rr].nholds!=live.fate[r].realind) { /* Was not last */ int topreg=live.fat[rr].holds[live.fat[rr].nholds]; int thisind=live.fate[r].realind; live.fat[rr].holds[thisind]=topreg; live.fate[topreg].realind=thisind; } live.fate[r].status=INMEM; live.fate[r].realreg=-1; } static __inline__ void f_free_nreg(int r) { int i=live.fat[r].nholds; while (i) { int vr; --i; vr=live.fat[r].holds[i]; f_evict(vr); } Dif (live.fat[r].nholds!=0) { write_log("Failed to free nreg %d, nholds is %d\n",r,live.fat[r].nholds); abort(); } } /* Use with care! */ static __inline__ void f_isclean(int r) { if (!f_isinreg(r)) return; live.fate[r].status=CLEAN; } static __inline__ void f_disassociate(int r) { f_isclean(r); f_evict(r); } static int f_alloc_reg(int r, int willclobber) { int bestreg; uae_s32 when; int i; uae_s32 badness; bestreg=-1; when=2000000000; for (i=N_FREGS;i--;) { badness=live.fat[i].touched; if (live.fat[i].nholds==0) badness=0; if (!live.fat[i].locked && badness0) { f_free_nreg(bestreg); } if (f_isinreg(r)) { f_evict(r); } if (!willclobber) { if (live.fate[r].status!=UNDEF) { #if USE_LONG_DOUBLE raw_fmov_ext_rm(bestreg,(uintptr)live.fate[r].mem); #else raw_fmov_rm(bestreg,(uintptr)live.fate[r].mem); #endif } live.fate[r].status=CLEAN; } else { live.fate[r].status=DIRTY; } live.fate[r].realreg=bestreg; live.fate[r].realind=live.fat[bestreg].nholds; live.fat[bestreg].touched=touchcnt++; live.fat[bestreg].holds[live.fat[bestreg].nholds]=r; live.fat[bestreg].nholds++; return bestreg; } static void f_unlock(int r) { Dif (!live.fat[r].locked) abort(); live.fat[r].locked--; } static void f_setlock(int r) { live.fat[r].locked++; } static __inline__ int f_readreg(int r) { int n; int answer=-1; if (f_isinreg(r)) { n=live.fate[r].realreg; answer=n; } /* either the value was in memory to start with, or it was evicted and is in memory now */ if (answer<0) answer=f_alloc_reg(r,0); live.fat[answer].locked++; live.fat[answer].touched=touchcnt++; return answer; } static __inline__ void f_make_exclusive(int r, int clobber) { freg_status oldstate; int rr=live.fate[r].realreg; int nr; int nind; int ndirt=0; int i; if (!f_isinreg(r)) return; if (live.fat[rr].nholds==1) return; for (i=0;i>=i; return; } CLOBBER_SHRL; r=rmw(r,4,4); raw_shrl_l_ri(r,i); unlock2(r); } MENDFUNC(2,shrl_l_ri,(RW4 r, IMM i)) MIDFUNC(2,shrl_w_ri,(RW2 r, IMM i)) { if (!i && !needflags) return; CLOBBER_SHRL; r=rmw(r,2,2); raw_shrl_w_ri(r,i); unlock2(r); } MENDFUNC(2,shrl_w_ri,(RW2 r, IMM i)) MIDFUNC(2,shrl_b_ri,(RW1 r, IMM i)) { if (!i && !needflags) return; CLOBBER_SHRL; r=rmw(r,1,1); raw_shrl_b_ri(r,i); unlock2(r); } MENDFUNC(2,shrl_b_ri,(RW1 r, IMM i)) MIDFUNC(2,shra_l_ri,(RW4 r, IMM i)) { if (!i && !needflags) return; CLOBBER_SHRA; r=rmw(r,4,4); raw_shra_l_ri(r,i); unlock2(r); } MENDFUNC(2,shra_l_ri,(RW4 r, IMM i)) MIDFUNC(2,shra_w_ri,(RW2 r, IMM i)) { if (!i && !needflags) return; CLOBBER_SHRA; r=rmw(r,2,2); raw_shra_w_ri(r,i); unlock2(r); } MENDFUNC(2,shra_w_ri,(RW2 r, IMM i)) MIDFUNC(2,shra_b_ri,(RW1 r, IMM i)) { if (!i && !needflags) return; CLOBBER_SHRA; r=rmw(r,1,1); raw_shra_b_ri(r,i); unlock2(r); } MENDFUNC(2,shra_b_ri,(RW1 r, IMM i)) MIDFUNC(2,shra_l_rr,(RW4 d, R1 r)) { if (isconst(r)) { COMPCALL(shra_l_ri)(d,(uae_u8)live.state[r].val); return; } CLOBBER_SHRA; r=readreg_specific(r,1,SHIFTCOUNT_NREG); d=rmw(d,4,4); Dif (r!=1) { write_log("Illegal register %d in raw_rol_b\n",r); abort(); } raw_shra_l_rr(d,r) ; unlock2(r); unlock2(d); } MENDFUNC(2,shra_l_rr,(RW4 d, R1 r)) MIDFUNC(2,shra_w_rr,(RW2 d, R1 r)) { /* Can only do this with r==1, i.e. cl */ if (isconst(r)) { COMPCALL(shra_w_ri)(d,(uae_u8)live.state[r].val); return; } CLOBBER_SHRA; r=readreg_specific(r,1,SHIFTCOUNT_NREG); d=rmw(d,2,2); Dif (r!=1) { write_log("Illegal register %d in raw_shra_b\n",r); abort(); } raw_shra_w_rr(d,r) ; unlock2(r); unlock2(d); } MENDFUNC(2,shra_w_rr,(RW2 d, R1 r)) MIDFUNC(2,shra_b_rr,(RW1 d, R1 r)) { /* Can only do this with r==1, i.e. cl */ if (isconst(r)) { COMPCALL(shra_b_ri)(d,(uae_u8)live.state[r].val); return; } CLOBBER_SHRA; r=readreg_specific(r,1,SHIFTCOUNT_NREG); d=rmw(d,1,1); Dif (r!=1) { write_log("Illegal register %d in raw_shra_b\n",r); abort(); } raw_shra_b_rr(d,r) ; unlock2(r); unlock2(d); } MENDFUNC(2,shra_b_rr,(RW1 d, R1 r)) MIDFUNC(2,setcc,(W1 d, IMM cc)) { CLOBBER_SETCC; d=writereg(d,1); raw_setcc(d,cc); unlock2(d); } MENDFUNC(2,setcc,(W1 d, IMM cc)) MIDFUNC(2,setcc_m,(IMM d, IMM cc)) { CLOBBER_SETCC; raw_setcc_m(d,cc); } MENDFUNC(2,setcc_m,(IMM d, IMM cc)) MIDFUNC(3,cmov_b_rr,(RW1 d, R1 s, IMM cc)) { if (d==s) return; CLOBBER_CMOV; s=readreg(s,1); d=rmw(d,1,1); raw_cmov_b_rr(d,s,cc); unlock2(s); unlock2(d); } MENDFUNC(3,cmov_b_rr,(RW1 d, R1 s, IMM cc)) MIDFUNC(3,cmov_w_rr,(RW2 d, R2 s, IMM cc)) { if (d==s) return; CLOBBER_CMOV; s=readreg(s,2); d=rmw(d,2,2); raw_cmov_w_rr(d,s,cc); unlock2(s); unlock2(d); } MENDFUNC(3,cmov_w_rr,(RW2 d, R2 s, IMM cc)) MIDFUNC(3,cmov_l_rr,(RW4 d, R4 s, IMM cc)) { if (d==s) return; CLOBBER_CMOV; s=readreg(s,4); d=rmw(d,4,4); raw_cmov_l_rr(d,s,cc); unlock2(s); unlock2(d); } MENDFUNC(3,cmov_l_rr,(RW4 d, R4 s, IMM cc)) MIDFUNC(3,cmov_l_rm,(RW4 d, IMM s, IMM cc)) { CLOBBER_CMOV; d=rmw(d,4,4); raw_cmov_l_rm(d,s,cc); unlock2(d); } MENDFUNC(3,cmov_l_rm,(RW4 d, IMM s, IMM cc)) MIDFUNC(2,bsf_l_rr,(W4 d, W4 s)) { CLOBBER_BSF; s = readreg(s, 4); d = writereg(d, 4); raw_bsf_l_rr(d, s); unlock2(s); unlock2(d); } MENDFUNC(2,bsf_l_rr,(W4 d, W4 s)) /* Set the Z flag depending on the value in s. Note that the value has to be 0 or -1 (or, more precisely, for non-zero values, bit 14 must be set)! */ MIDFUNC(2,simulate_bsf,(W4 tmp, RW4 s)) { CLOBBER_BSF; s=rmw_specific(s,4,4,FLAG_NREG3); tmp=writereg(tmp,4); raw_flags_set_zero(s, tmp); unlock2(tmp); unlock2(s); } MENDFUNC(2,simulate_bsf,(W4 tmp, RW4 s)) MIDFUNC(2,imul_32_32,(RW4 d, R4 s)) { CLOBBER_MUL; s=readreg(s,4); d=rmw(d,4,4); raw_imul_32_32(d,s); unlock2(s); unlock2(d); } MENDFUNC(2,imul_32_32,(RW4 d, R4 s)) MIDFUNC(2,imul_64_32,(RW4 d, RW4 s)) { CLOBBER_MUL; s=rmw_specific(s,4,4,MUL_NREG2); d=rmw_specific(d,4,4,MUL_NREG1); raw_imul_64_32(d,s); unlock2(s); unlock2(d); } MENDFUNC(2,imul_64_32,(RW4 d, RW4 s)) MIDFUNC(2,mul_64_32,(RW4 d, RW4 s)) { CLOBBER_MUL; s=rmw_specific(s,4,4,MUL_NREG2); d=rmw_specific(d,4,4,MUL_NREG1); raw_mul_64_32(d,s); unlock2(s); unlock2(d); } MENDFUNC(2,mul_64_32,(RW4 d, RW4 s)) MIDFUNC(2,mul_32_32,(RW4 d, R4 s)) { CLOBBER_MUL; s=readreg(s,4); d=rmw(d,4,4); raw_mul_32_32(d,s); unlock2(s); unlock2(d); } MENDFUNC(2,mul_32_32,(RW4 d, R4 s)) #if SIZEOF_VOID_P == 8 MIDFUNC(2,sign_extend_32_rr,(W4 d, R2 s)) { int isrmw; if (isconst(s)) { set_const(d,(uae_s32)live.state[s].val); return; } CLOBBER_SE32; isrmw=(s==d); if (!isrmw) { s=readreg(s,4); d=writereg(d,4); } else { /* If we try to lock this twice, with different sizes, we are int trouble! */ s=d=rmw(s,4,4); } raw_sign_extend_32_rr(d,s); if (!isrmw) { unlock2(d); unlock2(s); } else { unlock2(s); } } MENDFUNC(2,sign_extend_32_rr,(W4 d, R2 s)) #endif MIDFUNC(2,sign_extend_16_rr,(W4 d, R2 s)) { int isrmw; if (isconst(s)) { set_const(d,(uae_s32)(uae_s16)live.state[s].val); return; } CLOBBER_SE16; isrmw=(s==d); if (!isrmw) { s=readreg(s,2); d=writereg(d,4); } else { /* If we try to lock this twice, with different sizes, we are int trouble! */ s=d=rmw(s,4,2); } raw_sign_extend_16_rr(d,s); if (!isrmw) { unlock2(d); unlock2(s); } else { unlock2(s); } } MENDFUNC(2,sign_extend_16_rr,(W4 d, R2 s)) MIDFUNC(2,sign_extend_8_rr,(W4 d, R1 s)) { int isrmw; if (isconst(s)) { set_const(d,(uae_s32)(uae_s8)live.state[s].val); return; } isrmw=(s==d); CLOBBER_SE8; if (!isrmw) { s=readreg(s,1); d=writereg(d,4); } else { /* If we try to lock this twice, with different sizes, we are int trouble! */ s=d=rmw(s,4,1); } raw_sign_extend_8_rr(d,s); if (!isrmw) { unlock2(d); unlock2(s); } else { unlock2(s); } } MENDFUNC(2,sign_extend_8_rr,(W4 d, R1 s)) MIDFUNC(2,zero_extend_16_rr,(W4 d, R2 s)) { int isrmw; if (isconst(s)) { set_const(d,(uae_u32)(uae_u16)live.state[s].val); return; } isrmw=(s==d); CLOBBER_ZE16; if (!isrmw) { s=readreg(s,2); d=writereg(d,4); } else { /* If we try to lock this twice, with different sizes, we are int trouble! */ s=d=rmw(s,4,2); } raw_zero_extend_16_rr(d,s); if (!isrmw) { unlock2(d); unlock2(s); } else { unlock2(s); } } MENDFUNC(2,zero_extend_16_rr,(W4 d, R2 s)) MIDFUNC(2,zero_extend_8_rr,(W4 d, R1 s)) { int isrmw; if (isconst(s)) { set_const(d,(uae_u32)(uae_u8)live.state[s].val); return; } isrmw=(s==d); CLOBBER_ZE8; if (!isrmw) { s=readreg(s,1); d=writereg(d,4); } else { /* If we try to lock this twice, with different sizes, we are int trouble! */ s=d=rmw(s,4,1); } raw_zero_extend_8_rr(d,s); if (!isrmw) { unlock2(d); unlock2(s); } else { unlock2(s); } } MENDFUNC(2,zero_extend_8_rr,(W4 d, R1 s)) MIDFUNC(2,mov_b_rr,(W1 d, R1 s)) { if (d==s) return; if (isconst(s)) { COMPCALL(mov_b_ri)(d,(uae_u8)live.state[s].val); return; } CLOBBER_MOV; s=readreg(s,1); d=writereg(d,1); raw_mov_b_rr(d,s); unlock2(d); unlock2(s); } MENDFUNC(2,mov_b_rr,(W1 d, R1 s)) MIDFUNC(2,mov_w_rr,(W2 d, R2 s)) { if (d==s) return; if (isconst(s)) { COMPCALL(mov_w_ri)(d,(uae_u16)live.state[s].val); return; } CLOBBER_MOV; s=readreg(s,2); d=writereg(d,2); raw_mov_w_rr(d,s); unlock2(d); unlock2(s); } MENDFUNC(2,mov_w_rr,(W2 d, R2 s)) MIDFUNC(4,mov_l_rrm_indexed,(W4 d,R4 baser, R4 index, IMM factor)) { CLOBBER_MOV; baser=readreg(baser,4); index=readreg(index,4); d=writereg(d,4); raw_mov_l_rrm_indexed(d,baser,index,factor); unlock2(d); unlock2(baser); unlock2(index); } MENDFUNC(4,mov_l_rrm_indexed,(W4 d,R4 baser, R4 index, IMM factor)) MIDFUNC(4,mov_w_rrm_indexed,(W2 d, R4 baser, R4 index, IMM factor)) { CLOBBER_MOV; baser=readreg(baser,4); index=readreg(index,4); d=writereg(d,2); raw_mov_w_rrm_indexed(d,baser,index,factor); unlock2(d); unlock2(baser); unlock2(index); } MENDFUNC(4,mov_w_rrm_indexed,(W2 d, R4 baser, R4 index, IMM factor)) MIDFUNC(4,mov_b_rrm_indexed,(W1 d, R4 baser, R4 index, IMM factor)) { CLOBBER_MOV; baser=readreg(baser,4); index=readreg(index,4); d=writereg(d,1); raw_mov_b_rrm_indexed(d,baser,index,factor); unlock2(d); unlock2(baser); unlock2(index); } MENDFUNC(4,mov_b_rrm_indexed,(W1 d, R4 baser, R4 index, IMM factor)) MIDFUNC(4,mov_l_mrr_indexed,(R4 baser, R4 index, IMM factor, R4 s)) { CLOBBER_MOV; baser=readreg(baser,4); index=readreg(index,4); s=readreg(s,4); Dif (baser==s || index==s) abort(); raw_mov_l_mrr_indexed(baser,index,factor,s); unlock2(s); unlock2(baser); unlock2(index); } MENDFUNC(4,mov_l_mrr_indexed,(R4 baser, R4 index, IMM factor, R4 s)) MIDFUNC(4,mov_w_mrr_indexed,(R4 baser, R4 index, IMM factor, R2 s)) { CLOBBER_MOV; baser=readreg(baser,4); index=readreg(index,4); s=readreg(s,2); raw_mov_w_mrr_indexed(baser,index,factor,s); unlock2(s); unlock2(baser); unlock2(index); } MENDFUNC(4,mov_w_mrr_indexed,(R4 baser, R4 index, IMM factor, R2 s)) MIDFUNC(4,mov_b_mrr_indexed,(R4 baser, R4 index, IMM factor, R1 s)) { CLOBBER_MOV; s=readreg(s,1); baser=readreg(baser,4); index=readreg(index,4); raw_mov_b_mrr_indexed(baser,index,factor,s); unlock2(s); unlock2(baser); unlock2(index); } MENDFUNC(4,mov_b_mrr_indexed,(R4 baser, R4 index, IMM factor, R1 s)) MIDFUNC(5,mov_l_bmrr_indexed,(IMM base, R4 baser, R4 index, IMM factor, R4 s)) { int basereg=baser; int indexreg=index; CLOBBER_MOV; s=readreg(s,4); baser=readreg_offset(baser,4); index=readreg_offset(index,4); base+=get_offset(basereg); base+=factor*get_offset(indexreg); raw_mov_l_bmrr_indexed(base,baser,index,factor,s); unlock2(s); unlock2(baser); unlock2(index); } MENDFUNC(5,mov_l_bmrr_indexed,(IMM base, R4 baser, R4 index, IMM factor, R4 s)) MIDFUNC(5,mov_w_bmrr_indexed,(IMM base, R4 baser, R4 index, IMM factor, R2 s)) { int basereg=baser; int indexreg=index; CLOBBER_MOV; s=readreg(s,2); baser=readreg_offset(baser,4); index=readreg_offset(index,4); base+=get_offset(basereg); base+=factor*get_offset(indexreg); raw_mov_w_bmrr_indexed(base,baser,index,factor,s); unlock2(s); unlock2(baser); unlock2(index); } MENDFUNC(5,mov_w_bmrr_indexed,(IMM base, R4 baser, R4 index, IMM factor, R2 s)) MIDFUNC(5,mov_b_bmrr_indexed,(IMM base, R4 baser, R4 index, IMM factor, R1 s)) { int basereg=baser; int indexreg=index; CLOBBER_MOV; s=readreg(s,1); baser=readreg_offset(baser,4); index=readreg_offset(index,4); base+=get_offset(basereg); base+=factor*get_offset(indexreg); raw_mov_b_bmrr_indexed(base,baser,index,factor,s); unlock2(s); unlock2(baser); unlock2(index); } MENDFUNC(5,mov_b_bmrr_indexed,(IMM base, R4 baser, R4 index, IMM factor, R1 s)) /* Read a long from base+baser+factor*index */ MIDFUNC(5,mov_l_brrm_indexed,(W4 d, IMM base, R4 baser, R4 index, IMM factor)) { int basereg=baser; int indexreg=index; CLOBBER_MOV; baser=readreg_offset(baser,4); index=readreg_offset(index,4); base+=get_offset(basereg); base+=factor*get_offset(indexreg); d=writereg(d,4); raw_mov_l_brrm_indexed(d,base,baser,index,factor); unlock2(d); unlock2(baser); unlock2(index); } MENDFUNC(5,mov_l_brrm_indexed,(W4 d, IMM base, R4 baser, R4 index, IMM factor)) MIDFUNC(5,mov_w_brrm_indexed,(W2 d, IMM base, R4 baser, R4 index, IMM factor)) { int basereg=baser; int indexreg=index; CLOBBER_MOV; remove_offset(d,-1); baser=readreg_offset(baser,4); index=readreg_offset(index,4); base+=get_offset(basereg); base+=factor*get_offset(indexreg); d=writereg(d,2); raw_mov_w_brrm_indexed(d,base,baser,index,factor); unlock2(d); unlock2(baser); unlock2(index); } MENDFUNC(5,mov_w_brrm_indexed,(W2 d, IMM base, R4 baser, R4 index, IMM factor)) MIDFUNC(5,mov_b_brrm_indexed,(W1 d, IMM base, R4 baser, R4 index, IMM factor)) { int basereg=baser; int indexreg=index; CLOBBER_MOV; remove_offset(d,-1); baser=readreg_offset(baser,4); index=readreg_offset(index,4); base+=get_offset(basereg); base+=factor*get_offset(indexreg); d=writereg(d,1); raw_mov_b_brrm_indexed(d,base,baser,index,factor); unlock2(d); unlock2(baser); unlock2(index); } MENDFUNC(5,mov_b_brrm_indexed,(W1 d, IMM base, R4 baser, R4 index, IMM factor)) /* Read a long from base+factor*index */ MIDFUNC(4,mov_l_rm_indexed,(W4 d, IMM base, R4 index, IMM factor)) { int indexreg=index; if (isconst(index)) { COMPCALL(mov_l_rm)(d,base+factor*live.state[index].val); return; } CLOBBER_MOV; index=readreg_offset(index,4); base+=get_offset(indexreg)*factor; d=writereg(d,4); raw_mov_l_rm_indexed(d,base,index,factor); unlock2(index); unlock2(d); } MENDFUNC(4,mov_l_rm_indexed,(W4 d, IMM base, R4 index, IMM factor)) /* read the long at the address contained in s+offset and store in d */ MIDFUNC(3,mov_l_rR,(W4 d, R4 s, IMM offset)) { if (isconst(s)) { COMPCALL(mov_l_rm)(d,live.state[s].val+offset); return; } CLOBBER_MOV; s=readreg(s,4); d=writereg(d,4); raw_mov_l_rR(d,s,offset); unlock2(d); unlock2(s); } MENDFUNC(3,mov_l_rR,(W4 d, R4 s, IMM offset)) /* read the word at the address contained in s+offset and store in d */ MIDFUNC(3,mov_w_rR,(W2 d, R4 s, IMM offset)) { if (isconst(s)) { COMPCALL(mov_w_rm)(d,live.state[s].val+offset); return; } CLOBBER_MOV; s=readreg(s,4); d=writereg(d,2); raw_mov_w_rR(d,s,offset); unlock2(d); unlock2(s); } MENDFUNC(3,mov_w_rR,(W2 d, R4 s, IMM offset)) /* read the word at the address contained in s+offset and store in d */ MIDFUNC(3,mov_b_rR,(W1 d, R4 s, IMM offset)) { if (isconst(s)) { COMPCALL(mov_b_rm)(d,live.state[s].val+offset); return; } CLOBBER_MOV; s=readreg(s,4); d=writereg(d,1); raw_mov_b_rR(d,s,offset); unlock2(d); unlock2(s); } MENDFUNC(3,mov_b_rR,(W1 d, R4 s, IMM offset)) /* read the long at the address contained in s+offset and store in d */ MIDFUNC(3,mov_l_brR,(W4 d, R4 s, IMM offset)) { int sreg=s; if (isconst(s)) { COMPCALL(mov_l_rm)(d,live.state[s].val+offset); return; } CLOBBER_MOV; s=readreg_offset(s,4); offset+=get_offset(sreg); d=writereg(d,4); raw_mov_l_brR(d,s,offset); unlock2(d); unlock2(s); } MENDFUNC(3,mov_l_brR,(W4 d, R4 s, IMM offset)) /* read the word at the address contained in s+offset and store in d */ MIDFUNC(3,mov_w_brR,(W2 d, R4 s, IMM offset)) { int sreg=s; if (isconst(s)) { COMPCALL(mov_w_rm)(d,live.state[s].val+offset); return; } CLOBBER_MOV; remove_offset(d,-1); s=readreg_offset(s,4); offset+=get_offset(sreg); d=writereg(d,2); raw_mov_w_brR(d,s,offset); unlock2(d); unlock2(s); } MENDFUNC(3,mov_w_brR,(W2 d, R4 s, IMM offset)) /* read the word at the address contained in s+offset and store in d */ MIDFUNC(3,mov_b_brR,(W1 d, R4 s, IMM offset)) { int sreg=s; if (isconst(s)) { COMPCALL(mov_b_rm)(d,live.state[s].val+offset); return; } CLOBBER_MOV; remove_offset(d,-1); s=readreg_offset(s,4); offset+=get_offset(sreg); d=writereg(d,1); raw_mov_b_brR(d,s,offset); unlock2(d); unlock2(s); } MENDFUNC(3,mov_b_brR,(W1 d, R4 s, IMM offset)) MIDFUNC(3,mov_l_Ri,(R4 d, IMM i, IMM offset)) { int dreg=d; if (isconst(d)) { COMPCALL(mov_l_mi)(live.state[d].val+offset,i); return; } CLOBBER_MOV; d=readreg_offset(d,4); offset+=get_offset(dreg); raw_mov_l_Ri(d,i,offset); unlock2(d); } MENDFUNC(3,mov_l_Ri,(R4 d, IMM i, IMM offset)) MIDFUNC(3,mov_w_Ri,(R4 d, IMM i, IMM offset)) { int dreg=d; if (isconst(d)) { COMPCALL(mov_w_mi)(live.state[d].val+offset,i); return; } CLOBBER_MOV; d=readreg_offset(d,4); offset+=get_offset(dreg); raw_mov_w_Ri(d,i,offset); unlock2(d); } MENDFUNC(3,mov_w_Ri,(R4 d, IMM i, IMM offset)) MIDFUNC(3,mov_b_Ri,(R4 d, IMM i, IMM offset)) { int dreg=d; if (isconst(d)) { COMPCALL(mov_b_mi)(live.state[d].val+offset,i); return; } CLOBBER_MOV; d=readreg_offset(d,4); offset+=get_offset(dreg); raw_mov_b_Ri(d,i,offset); unlock2(d); } MENDFUNC(3,mov_b_Ri,(R4 d, IMM i, IMM offset)) /* Warning! OFFSET is byte sized only! */ MIDFUNC(3,mov_l_Rr,(R4 d, R4 s, IMM offset)) { if (isconst(d)) { COMPCALL(mov_l_mr)(live.state[d].val+offset,s); return; } if (isconst(s)) { COMPCALL(mov_l_Ri)(d,live.state[s].val,offset); return; } CLOBBER_MOV; s=readreg(s,4); d=readreg(d,4); raw_mov_l_Rr(d,s,offset); unlock2(d); unlock2(s); } MENDFUNC(3,mov_l_Rr,(R4 d, R4 s, IMM offset)) MIDFUNC(3,mov_w_Rr,(R4 d, R2 s, IMM offset)) { if (isconst(d)) { COMPCALL(mov_w_mr)(live.state[d].val+offset,s); return; } if (isconst(s)) { COMPCALL(mov_w_Ri)(d,(uae_u16)live.state[s].val,offset); return; } CLOBBER_MOV; s=readreg(s,2); d=readreg(d,4); raw_mov_w_Rr(d,s,offset); unlock2(d); unlock2(s); } MENDFUNC(3,mov_w_Rr,(R4 d, R2 s, IMM offset)) MIDFUNC(3,mov_b_Rr,(R4 d, R1 s, IMM offset)) { if (isconst(d)) { COMPCALL(mov_b_mr)(live.state[d].val+offset,s); return; } if (isconst(s)) { COMPCALL(mov_b_Ri)(d,(uae_u8)live.state[s].val,offset); return; } CLOBBER_MOV; s=readreg(s,1); d=readreg(d,4); raw_mov_b_Rr(d,s,offset); unlock2(d); unlock2(s); } MENDFUNC(3,mov_b_Rr,(R4 d, R1 s, IMM offset)) MIDFUNC(3,lea_l_brr,(W4 d, R4 s, IMM offset)) { if (isconst(s)) { COMPCALL(mov_l_ri)(d,live.state[s].val+offset); return; } #if USE_OFFSET if (d==s) { add_offset(d,offset); return; } #endif CLOBBER_LEA; s=readreg(s,4); d=writereg(d,4); raw_lea_l_brr(d,s,offset); unlock2(d); unlock2(s); } MENDFUNC(3,lea_l_brr,(W4 d, R4 s, IMM offset)) MIDFUNC(5,lea_l_brr_indexed,(W4 d, R4 s, R4 index, IMM factor, IMM offset)) { if (!offset) { COMPCALL(lea_l_rr_indexed)(d,s,index,factor); return; } CLOBBER_LEA; s=readreg(s,4); index=readreg(index,4); d=writereg(d,4); raw_lea_l_brr_indexed(d,s,index,factor,offset); unlock2(d); unlock2(index); unlock2(s); } MENDFUNC(5,lea_l_brr_indexed,(W4 d, R4 s, R4 index, IMM factor, IMM offset)) MIDFUNC(4,lea_l_rr_indexed,(W4 d, R4 s, R4 index, IMM factor)) { CLOBBER_LEA; s=readreg(s,4); index=readreg(index,4); d=writereg(d,4); raw_lea_l_rr_indexed(d,s,index,factor); unlock2(d); unlock2(index); unlock2(s); } MENDFUNC(4,lea_l_rr_indexed,(W4 d, R4 s, R4 index, IMM factor)) /* write d to the long at the address contained in s+offset */ MIDFUNC(3,mov_l_bRr,(R4 d, R4 s, IMM offset)) { int dreg=d; if (isconst(d)) { COMPCALL(mov_l_mr)(live.state[d].val+offset,s); return; } CLOBBER_MOV; s=readreg(s,4); d=readreg_offset(d,4); offset+=get_offset(dreg); raw_mov_l_bRr(d,s,offset); unlock2(d); unlock2(s); } MENDFUNC(3,mov_l_bRr,(R4 d, R4 s, IMM offset)) /* write the word at the address contained in s+offset and store in d */ MIDFUNC(3,mov_w_bRr,(R4 d, R2 s, IMM offset)) { int dreg=d; if (isconst(d)) { COMPCALL(mov_w_mr)(live.state[d].val+offset,s); return; } CLOBBER_MOV; s=readreg(s,2); d=readreg_offset(d,4); offset+=get_offset(dreg); raw_mov_w_bRr(d,s,offset); unlock2(d); unlock2(s); } MENDFUNC(3,mov_w_bRr,(R4 d, R2 s, IMM offset)) MIDFUNC(3,mov_b_bRr,(R4 d, R1 s, IMM offset)) { int dreg=d; if (isconst(d)) { COMPCALL(mov_b_mr)(live.state[d].val+offset,s); return; } CLOBBER_MOV; s=readreg(s,1); d=readreg_offset(d,4); offset+=get_offset(dreg); raw_mov_b_bRr(d,s,offset); unlock2(d); unlock2(s); } MENDFUNC(3,mov_b_bRr,(R4 d, R1 s, IMM offset)) MIDFUNC(1,bswap_32,(RW4 r)) { int reg=r; if (isconst(r)) { uae_u32 oldv=live.state[r].val; live.state[r].val=reverse32(oldv); return; } CLOBBER_SW32; r=rmw(r,4,4); raw_bswap_32(r); unlock2(r); } MENDFUNC(1,bswap_32,(RW4 r)) MIDFUNC(1,bswap_16,(RW2 r)) { if (isconst(r)) { uae_u32 oldv=live.state[r].val; live.state[r].val=((oldv>>8)&0xff) | ((oldv<<8)&0xff00) | (oldv&0xffff0000); return; } CLOBBER_SW16; r=rmw(r,2,2); raw_bswap_16(r); unlock2(r); } MENDFUNC(1,bswap_16,(RW2 r)) MIDFUNC(2,mov_l_rr,(W4 d, R4 s)) { int olds; if (d==s) { /* How pointless! */ return; } if (isconst(s)) { COMPCALL(mov_l_ri)(d,live.state[s].val); return; } olds=s; disassociate(d); s=readreg_offset(s,4); live.state[d].realreg=s; live.state[d].realind=live.nat[s].nholds; live.state[d].val=live.state[olds].val; live.state[d].validsize=4; live.state[d].dirtysize=4; set_status(d,DIRTY); live.nat[s].holds[live.nat[s].nholds]=d; live.nat[s].nholds++; log_clobberreg(d); /* write_log("Added %d to nreg %d(%d), now holds %d regs\n", d,s,live.state[d].realind,live.nat[s].nholds); */ unlock2(s); } MENDFUNC(2,mov_l_rr,(W4 d, R4 s)) MIDFUNC(2,mov_l_mr,(IMM d, R4 s)) { if (isconst(s)) { COMPCALL(mov_l_mi)(d,live.state[s].val); return; } CLOBBER_MOV; s=readreg(s,4); raw_mov_l_mr(d,s); unlock2(s); } MENDFUNC(2,mov_l_mr,(IMM d, R4 s)) MIDFUNC(2,mov_w_mr,(IMM d, R2 s)) { if (isconst(s)) { COMPCALL(mov_w_mi)(d,(uae_u16)live.state[s].val); return; } CLOBBER_MOV; s=readreg(s,2); raw_mov_w_mr(d,s); unlock2(s); } MENDFUNC(2,mov_w_mr,(IMM d, R2 s)) MIDFUNC(2,mov_w_rm,(W2 d, IMM s)) { CLOBBER_MOV; d=writereg(d,2); raw_mov_w_rm(d,s); unlock2(d); } MENDFUNC(2,mov_w_rm,(W2 d, IMM s)) MIDFUNC(2,mov_b_mr,(IMM d, R1 s)) { if (isconst(s)) { COMPCALL(mov_b_mi)(d,(uae_u8)live.state[s].val); return; } CLOBBER_MOV; s=readreg(s,1); raw_mov_b_mr(d,s); unlock2(s); } MENDFUNC(2,mov_b_mr,(IMM d, R1 s)) MIDFUNC(2,mov_b_rm,(W1 d, IMM s)) { CLOBBER_MOV; d=writereg(d,1); raw_mov_b_rm(d,s); unlock2(d); } MENDFUNC(2,mov_b_rm,(W1 d, IMM s)) MIDFUNC(2,mov_l_ri,(W4 d, IMM s)) { set_const(d,s); return; } MENDFUNC(2,mov_l_ri,(W4 d, IMM s)) MIDFUNC(2,mov_w_ri,(W2 d, IMM s)) { CLOBBER_MOV; d=writereg(d,2); raw_mov_w_ri(d,s); unlock2(d); } MENDFUNC(2,mov_w_ri,(W2 d, IMM s)) MIDFUNC(2,mov_b_ri,(W1 d, IMM s)) { CLOBBER_MOV; d=writereg(d,1); raw_mov_b_ri(d,s); unlock2(d); } MENDFUNC(2,mov_b_ri,(W1 d, IMM s)) MIDFUNC(2,add_l_mi,(IMM d, IMM s)) { CLOBBER_ADD; raw_add_l_mi(d,s) ; } MENDFUNC(2,add_l_mi,(IMM d, IMM s)) MIDFUNC(2,add_w_mi,(IMM d, IMM s)) { CLOBBER_ADD; raw_add_w_mi(d,s) ; } MENDFUNC(2,add_w_mi,(IMM d, IMM s)) MIDFUNC(2,add_b_mi,(IMM d, IMM s)) { CLOBBER_ADD; raw_add_b_mi(d,s) ; } MENDFUNC(2,add_b_mi,(IMM d, IMM s)) MIDFUNC(2,test_l_ri,(R4 d, IMM i)) { CLOBBER_TEST; d=readreg(d,4); raw_test_l_ri(d,i); unlock2(d); } MENDFUNC(2,test_l_ri,(R4 d, IMM i)) MIDFUNC(2,test_l_rr,(R4 d, R4 s)) { CLOBBER_TEST; d=readreg(d,4); s=readreg(s,4); raw_test_l_rr(d,s);; unlock2(d); unlock2(s); } MENDFUNC(2,test_l_rr,(R4 d, R4 s)) MIDFUNC(2,test_w_rr,(R2 d, R2 s)) { CLOBBER_TEST; d=readreg(d,2); s=readreg(s,2); raw_test_w_rr(d,s); unlock2(d); unlock2(s); } MENDFUNC(2,test_w_rr,(R2 d, R2 s)) MIDFUNC(2,test_b_rr,(R1 d, R1 s)) { CLOBBER_TEST; d=readreg(d,1); s=readreg(s,1); raw_test_b_rr(d,s); unlock2(d); unlock2(s); } MENDFUNC(2,test_b_rr,(R1 d, R1 s)) MIDFUNC(2,and_l_ri,(RW4 d, IMM i)) { if (isconst(d) && !needflags) { live.state[d].val &= i; return; } CLOBBER_AND; d=rmw(d,4,4); raw_and_l_ri(d,i); unlock2(d); } MENDFUNC(2,and_l_ri,(RW4 d, IMM i)) MIDFUNC(2,and_l,(RW4 d, R4 s)) { CLOBBER_AND; s=readreg(s,4); d=rmw(d,4,4); raw_and_l(d,s); unlock2(d); unlock2(s); } MENDFUNC(2,and_l,(RW4 d, R4 s)) MIDFUNC(2,and_w,(RW2 d, R2 s)) { CLOBBER_AND; s=readreg(s,2); d=rmw(d,2,2); raw_and_w(d,s); unlock2(d); unlock2(s); } MENDFUNC(2,and_w,(RW2 d, R2 s)) MIDFUNC(2,and_b,(RW1 d, R1 s)) { CLOBBER_AND; s=readreg(s,1); d=rmw(d,1,1); raw_and_b(d,s); unlock2(d); unlock2(s); } MENDFUNC(2,and_b,(RW1 d, R1 s)) // gb-- used for making an fpcr value in compemu_fpp.cpp MIDFUNC(2,or_l_rm,(RW4 d, IMM s)) { CLOBBER_OR; d=rmw(d,4,4); raw_or_l_rm(d,s); unlock2(d); } MENDFUNC(2,or_l_rm,(RW4 d, IMM s)) MIDFUNC(2,or_l_ri,(RW4 d, IMM i)) { if (isconst(d) && !needflags) { live.state[d].val|=i; return; } CLOBBER_OR; d=rmw(d,4,4); raw_or_l_ri(d,i); unlock2(d); } MENDFUNC(2,or_l_ri,(RW4 d, IMM i)) MIDFUNC(2,or_l,(RW4 d, R4 s)) { if (isconst(d) && isconst(s) && !needflags) { live.state[d].val|=live.state[s].val; return; } CLOBBER_OR; s=readreg(s,4); d=rmw(d,4,4); raw_or_l(d,s); unlock2(d); unlock2(s); } MENDFUNC(2,or_l,(RW4 d, R4 s)) MIDFUNC(2,or_w,(RW2 d, R2 s)) { CLOBBER_OR; s=readreg(s,2); d=rmw(d,2,2); raw_or_w(d,s); unlock2(d); unlock2(s); } MENDFUNC(2,or_w,(RW2 d, R2 s)) MIDFUNC(2,or_b,(RW1 d, R1 s)) { CLOBBER_OR; s=readreg(s,1); d=rmw(d,1,1); raw_or_b(d,s); unlock2(d); unlock2(s); } MENDFUNC(2,or_b,(RW1 d, R1 s)) MIDFUNC(2,adc_l,(RW4 d, R4 s)) { CLOBBER_ADC; s=readreg(s,4); d=rmw(d,4,4); raw_adc_l(d,s); unlock2(d); unlock2(s); } MENDFUNC(2,adc_l,(RW4 d, R4 s)) MIDFUNC(2,adc_w,(RW2 d, R2 s)) { CLOBBER_ADC; s=readreg(s,2); d=rmw(d,2,2); raw_adc_w(d,s); unlock2(d); unlock2(s); } MENDFUNC(2,adc_w,(RW2 d, R2 s)) MIDFUNC(2,adc_b,(RW1 d, R1 s)) { CLOBBER_ADC; s=readreg(s,1); d=rmw(d,1,1); raw_adc_b(d,s); unlock2(d); unlock2(s); } MENDFUNC(2,adc_b,(RW1 d, R1 s)) MIDFUNC(2,add_l,(RW4 d, R4 s)) { if (isconst(s)) { COMPCALL(add_l_ri)(d,live.state[s].val); return; } CLOBBER_ADD; s=readreg(s,4); d=rmw(d,4,4); raw_add_l(d,s); unlock2(d); unlock2(s); } MENDFUNC(2,add_l,(RW4 d, R4 s)) MIDFUNC(2,add_w,(RW2 d, R2 s)) { if (isconst(s)) { COMPCALL(add_w_ri)(d,(uae_u16)live.state[s].val); return; } CLOBBER_ADD; s=readreg(s,2); d=rmw(d,2,2); raw_add_w(d,s); unlock2(d); unlock2(s); } MENDFUNC(2,add_w,(RW2 d, R2 s)) MIDFUNC(2,add_b,(RW1 d, R1 s)) { if (isconst(s)) { COMPCALL(add_b_ri)(d,(uae_u8)live.state[s].val); return; } CLOBBER_ADD; s=readreg(s,1); d=rmw(d,1,1); raw_add_b(d,s); unlock2(d); unlock2(s); } MENDFUNC(2,add_b,(RW1 d, R1 s)) MIDFUNC(2,sub_l_ri,(RW4 d, IMM i)) { if (!i && !needflags) return; if (isconst(d) && !needflags) { live.state[d].val-=i; return; } #if USE_OFFSET if (!needflags) { add_offset(d,-i); return; } #endif CLOBBER_SUB; d=rmw(d,4,4); raw_sub_l_ri(d,i); unlock2(d); } MENDFUNC(2,sub_l_ri,(RW4 d, IMM i)) MIDFUNC(2,sub_w_ri,(RW2 d, IMM i)) { if (!i && !needflags) return; CLOBBER_SUB; d=rmw(d,2,2); raw_sub_w_ri(d,i); unlock2(d); } MENDFUNC(2,sub_w_ri,(RW2 d, IMM i)) MIDFUNC(2,sub_b_ri,(RW1 d, IMM i)) { if (!i && !needflags) return; CLOBBER_SUB; d=rmw(d,1,1); raw_sub_b_ri(d,i); unlock2(d); } MENDFUNC(2,sub_b_ri,(RW1 d, IMM i)) MIDFUNC(2,add_l_ri,(RW4 d, IMM i)) { if (!i && !needflags) return; if (isconst(d) && !needflags) { live.state[d].val+=i; return; } #if USE_OFFSET if (!needflags) { add_offset(d,i); return; } #endif CLOBBER_ADD; d=rmw(d,4,4); raw_add_l_ri(d,i); unlock2(d); } MENDFUNC(2,add_l_ri,(RW4 d, IMM i)) MIDFUNC(2,add_w_ri,(RW2 d, IMM i)) { if (!i && !needflags) return; CLOBBER_ADD; d=rmw(d,2,2); raw_add_w_ri(d,i); unlock2(d); } MENDFUNC(2,add_w_ri,(RW2 d, IMM i)) MIDFUNC(2,add_b_ri,(RW1 d, IMM i)) { if (!i && !needflags) return; CLOBBER_ADD; d=rmw(d,1,1); raw_add_b_ri(d,i); unlock2(d); } MENDFUNC(2,add_b_ri,(RW1 d, IMM i)) MIDFUNC(2,sbb_l,(RW4 d, R4 s)) { CLOBBER_SBB; s=readreg(s,4); d=rmw(d,4,4); raw_sbb_l(d,s); unlock2(d); unlock2(s); } MENDFUNC(2,sbb_l,(RW4 d, R4 s)) MIDFUNC(2,sbb_w,(RW2 d, R2 s)) { CLOBBER_SBB; s=readreg(s,2); d=rmw(d,2,2); raw_sbb_w(d,s); unlock2(d); unlock2(s); } MENDFUNC(2,sbb_w,(RW2 d, R2 s)) MIDFUNC(2,sbb_b,(RW1 d, R1 s)) { CLOBBER_SBB; s=readreg(s,1); d=rmw(d,1,1); raw_sbb_b(d,s); unlock2(d); unlock2(s); } MENDFUNC(2,sbb_b,(RW1 d, R1 s)) MIDFUNC(2,sub_l,(RW4 d, R4 s)) { if (isconst(s)) { COMPCALL(sub_l_ri)(d,live.state[s].val); return; } CLOBBER_SUB; s=readreg(s,4); d=rmw(d,4,4); raw_sub_l(d,s); unlock2(d); unlock2(s); } MENDFUNC(2,sub_l,(RW4 d, R4 s)) MIDFUNC(2,sub_w,(RW2 d, R2 s)) { if (isconst(s)) { COMPCALL(sub_w_ri)(d,(uae_u16)live.state[s].val); return; } CLOBBER_SUB; s=readreg(s,2); d=rmw(d,2,2); raw_sub_w(d,s); unlock2(d); unlock2(s); } MENDFUNC(2,sub_w,(RW2 d, R2 s)) MIDFUNC(2,sub_b,(RW1 d, R1 s)) { if (isconst(s)) { COMPCALL(sub_b_ri)(d,(uae_u8)live.state[s].val); return; } CLOBBER_SUB; s=readreg(s,1); d=rmw(d,1,1); raw_sub_b(d,s); unlock2(d); unlock2(s); } MENDFUNC(2,sub_b,(RW1 d, R1 s)) MIDFUNC(2,cmp_l,(R4 d, R4 s)) { CLOBBER_CMP; s=readreg(s,4); d=readreg(d,4); raw_cmp_l(d,s); unlock2(d); unlock2(s); } MENDFUNC(2,cmp_l,(R4 d, R4 s)) MIDFUNC(2,cmp_l_ri,(R4 r, IMM i)) { CLOBBER_CMP; r=readreg(r,4); raw_cmp_l_ri(r,i); unlock2(r); } MENDFUNC(2,cmp_l_ri,(R4 r, IMM i)) MIDFUNC(2,cmp_w,(R2 d, R2 s)) { CLOBBER_CMP; s=readreg(s,2); d=readreg(d,2); raw_cmp_w(d,s); unlock2(d); unlock2(s); } MENDFUNC(2,cmp_w,(R2 d, R2 s)) MIDFUNC(2,cmp_b,(R1 d, R1 s)) { CLOBBER_CMP; s=readreg(s,1); d=readreg(d,1); raw_cmp_b(d,s); unlock2(d); unlock2(s); } MENDFUNC(2,cmp_b,(R1 d, R1 s)) MIDFUNC(2,xor_l,(RW4 d, R4 s)) { CLOBBER_XOR; s=readreg(s,4); d=rmw(d,4,4); raw_xor_l(d,s); unlock2(d); unlock2(s); } MENDFUNC(2,xor_l,(RW4 d, R4 s)) MIDFUNC(2,xor_w,(RW2 d, R2 s)) { CLOBBER_XOR; s=readreg(s,2); d=rmw(d,2,2); raw_xor_w(d,s); unlock2(d); unlock2(s); } MENDFUNC(2,xor_w,(RW2 d, R2 s)) MIDFUNC(2,xor_b,(RW1 d, R1 s)) { CLOBBER_XOR; s=readreg(s,1); d=rmw(d,1,1); raw_xor_b(d,s); unlock2(d); unlock2(s); } MENDFUNC(2,xor_b,(RW1 d, R1 s)) MIDFUNC(5,call_r_11,(W4 out1, R4 r, R4 in1, IMM osize, IMM isize)) { clobber_flags(); remove_all_offsets(); if (osize==4) { if (out1!=in1 && out1!=r) { COMPCALL(forget_about)(out1); } } else { tomem_c(out1); } in1=readreg_specific(in1,isize,REG_PAR1); r=readreg(r,4); prepare_for_call_1(); /* This should ensure that there won't be any need for swapping nregs in prepare_for_call_2 */ #if USE_NORMAL_CALLING_CONVENTION raw_push_l_r(in1); #endif unlock2(in1); unlock2(r); prepare_for_call_2(); raw_call_r(r); #if USE_NORMAL_CALLING_CONVENTION raw_inc_sp(4); #endif live.nat[REG_RESULT].holds[0]=out1; live.nat[REG_RESULT].nholds=1; live.nat[REG_RESULT].touched=touchcnt++; live.state[out1].realreg=REG_RESULT; live.state[out1].realind=0; live.state[out1].val=0; live.state[out1].validsize=osize; live.state[out1].dirtysize=osize; set_status(out1,DIRTY); } MENDFUNC(5,call_r_11,(W4 out1, R4 r, R4 in1, IMM osize, IMM isize)) MIDFUNC(5,call_r_02,(R4 r, R4 in1, R4 in2, IMM isize1, IMM isize2)) { clobber_flags(); remove_all_offsets(); in1=readreg_specific(in1,isize1,REG_PAR1); in2=readreg_specific(in2,isize2,REG_PAR2); r=readreg(r,4); prepare_for_call_1(); /* This should ensure that there won't be any need for swapping nregs in prepare_for_call_2 */ #if USE_NORMAL_CALLING_CONVENTION raw_push_l_r(in2); raw_push_l_r(in1); #endif unlock2(r); unlock2(in1); unlock2(in2); prepare_for_call_2(); raw_call_r(r); #if USE_NORMAL_CALLING_CONVENTION raw_inc_sp(8); #endif } MENDFUNC(5,call_r_02,(R4 r, R4 in1, R4 in2, IMM isize1, IMM isize2)) /* forget_about() takes a mid-layer register */ MIDFUNC(1,forget_about,(W4 r)) { if (isinreg(r)) disassociate(r); live.state[r].val=0; set_status(r,UNDEF); } MENDFUNC(1,forget_about,(W4 r)) MIDFUNC(0,nop,(void)) { raw_nop(); } MENDFUNC(0,nop,(void)) MIDFUNC(1,f_forget_about,(FW r)) { if (f_isinreg(r)) f_disassociate(r); live.fate[r].status=UNDEF; } MENDFUNC(1,f_forget_about,(FW r)) MIDFUNC(1,fmov_pi,(FW r)) { r=f_writereg(r); raw_fmov_pi(r); f_unlock(r); } MENDFUNC(1,fmov_pi,(FW r)) MIDFUNC(1,fmov_log10_2,(FW r)) { r=f_writereg(r); raw_fmov_log10_2(r); f_unlock(r); } MENDFUNC(1,fmov_log10_2,(FW r)) MIDFUNC(1,fmov_log2_e,(FW r)) { r=f_writereg(r); raw_fmov_log2_e(r); f_unlock(r); } MENDFUNC(1,fmov_log2_e,(FW r)) MIDFUNC(1,fmov_loge_2,(FW r)) { r=f_writereg(r); raw_fmov_loge_2(r); f_unlock(r); } MENDFUNC(1,fmov_loge_2,(FW r)) MIDFUNC(1,fmov_1,(FW r)) { r=f_writereg(r); raw_fmov_1(r); f_unlock(r); } MENDFUNC(1,fmov_1,(FW r)) MIDFUNC(1,fmov_0,(FW r)) { r=f_writereg(r); raw_fmov_0(r); f_unlock(r); } MENDFUNC(1,fmov_0,(FW r)) MIDFUNC(2,fmov_rm,(FW r, MEMR m)) { r=f_writereg(r); raw_fmov_rm(r,m); f_unlock(r); } MENDFUNC(2,fmov_rm,(FW r, MEMR m)) MIDFUNC(2,fmovi_rm,(FW r, MEMR m)) { r=f_writereg(r); raw_fmovi_rm(r,m); f_unlock(r); } MENDFUNC(2,fmovi_rm,(FW r, MEMR m)) MIDFUNC(2,fmovi_mr,(MEMW m, FR r)) { r=f_readreg(r); raw_fmovi_mr(m,r); f_unlock(r); } MENDFUNC(2,fmovi_mr,(MEMW m, FR r)) MIDFUNC(2,fmovs_rm,(FW r, MEMR m)) { r=f_writereg(r); raw_fmovs_rm(r,m); f_unlock(r); } MENDFUNC(2,fmovs_rm,(FW r, MEMR m)) MIDFUNC(2,fmovs_mr,(MEMW m, FR r)) { r=f_readreg(r); raw_fmovs_mr(m,r); f_unlock(r); } MENDFUNC(2,fmovs_mr,(MEMW m, FR r)) MIDFUNC(2,fmov_ext_mr,(MEMW m, FR r)) { r=f_readreg(r); raw_fmov_ext_mr(m,r); f_unlock(r); } MENDFUNC(2,fmov_ext_mr,(MEMW m, FR r)) MIDFUNC(2,fmov_mr,(MEMW m, FR r)) { r=f_readreg(r); raw_fmov_mr(m,r); f_unlock(r); } MENDFUNC(2,fmov_mr,(MEMW m, FR r)) MIDFUNC(2,fmov_ext_rm,(FW r, MEMR m)) { r=f_writereg(r); raw_fmov_ext_rm(r,m); f_unlock(r); } MENDFUNC(2,fmov_ext_rm,(FW r, MEMR m)) MIDFUNC(2,fmov_rr,(FW d, FR s)) { if (d==s) { /* How pointless! */ return; } #if USE_F_ALIAS f_disassociate(d); s=f_readreg(s); live.fate[d].realreg=s; live.fate[d].realind=live.fat[s].nholds; live.fate[d].status=DIRTY; live.fat[s].holds[live.fat[s].nholds]=d; live.fat[s].nholds++; f_unlock(s); #else s=f_readreg(s); d=f_writereg(d); raw_fmov_rr(d,s); f_unlock(s); f_unlock(d); #endif } MENDFUNC(2,fmov_rr,(FW d, FR s)) MIDFUNC(2,fldcw_m_indexed,(R4 index, IMM base)) { index=readreg(index,4); raw_fldcw_m_indexed(index,base); unlock2(index); } MENDFUNC(2,fldcw_m_indexed,(R4 index, IMM base)) MIDFUNC(1,ftst_r,(FR r)) { r=f_readreg(r); raw_ftst_r(r); f_unlock(r); } MENDFUNC(1,ftst_r,(FR r)) MIDFUNC(0,dont_care_fflags,(void)) { f_disassociate(FP_RESULT); } MENDFUNC(0,dont_care_fflags,(void)) MIDFUNC(2,fsqrt_rr,(FW d, FR s)) { s=f_readreg(s); d=f_writereg(d); raw_fsqrt_rr(d,s); f_unlock(s); f_unlock(d); } MENDFUNC(2,fsqrt_rr,(FW d, FR s)) MIDFUNC(2,fabs_rr,(FW d, FR s)) { s=f_readreg(s); d=f_writereg(d); raw_fabs_rr(d,s); f_unlock(s); f_unlock(d); } MENDFUNC(2,fabs_rr,(FW d, FR s)) MIDFUNC(2,fsin_rr,(FW d, FR s)) { s=f_readreg(s); d=f_writereg(d); raw_fsin_rr(d,s); f_unlock(s); f_unlock(d); } MENDFUNC(2,fsin_rr,(FW d, FR s)) MIDFUNC(2,fcos_rr,(FW d, FR s)) { s=f_readreg(s); d=f_writereg(d); raw_fcos_rr(d,s); f_unlock(s); f_unlock(d); } MENDFUNC(2,fcos_rr,(FW d, FR s)) MIDFUNC(2,ftwotox_rr,(FW d, FR s)) { s=f_readreg(s); d=f_writereg(d); raw_ftwotox_rr(d,s); f_unlock(s); f_unlock(d); } MENDFUNC(2,ftwotox_rr,(FW d, FR s)) MIDFUNC(2,fetox_rr,(FW d, FR s)) { s=f_readreg(s); d=f_writereg(d); raw_fetox_rr(d,s); f_unlock(s); f_unlock(d); } MENDFUNC(2,fetox_rr,(FW d, FR s)) MIDFUNC(2,frndint_rr,(FW d, FR s)) { s=f_readreg(s); d=f_writereg(d); raw_frndint_rr(d,s); f_unlock(s); f_unlock(d); } MENDFUNC(2,frndint_rr,(FW d, FR s)) MIDFUNC(2,flog2_rr,(FW d, FR s)) { s=f_readreg(s); d=f_writereg(d); raw_flog2_rr(d,s); f_unlock(s); f_unlock(d); } MENDFUNC(2,flog2_rr,(FW d, FR s)) MIDFUNC(2,fneg_rr,(FW d, FR s)) { s=f_readreg(s); d=f_writereg(d); raw_fneg_rr(d,s); f_unlock(s); f_unlock(d); } MENDFUNC(2,fneg_rr,(FW d, FR s)) MIDFUNC(2,fadd_rr,(FRW d, FR s)) { s=f_readreg(s); d=f_rmw(d); raw_fadd_rr(d,s); f_unlock(s); f_unlock(d); } MENDFUNC(2,fadd_rr,(FRW d, FR s)) MIDFUNC(2,fsub_rr,(FRW d, FR s)) { s=f_readreg(s); d=f_rmw(d); raw_fsub_rr(d,s); f_unlock(s); f_unlock(d); } MENDFUNC(2,fsub_rr,(FRW d, FR s)) MIDFUNC(2,fcmp_rr,(FR d, FR s)) { d=f_readreg(d); s=f_readreg(s); raw_fcmp_rr(d,s); f_unlock(s); f_unlock(d); } MENDFUNC(2,fcmp_rr,(FR d, FR s)) MIDFUNC(2,fdiv_rr,(FRW d, FR s)) { s=f_readreg(s); d=f_rmw(d); raw_fdiv_rr(d,s); f_unlock(s); f_unlock(d); } MENDFUNC(2,fdiv_rr,(FRW d, FR s)) MIDFUNC(2,frem_rr,(FRW d, FR s)) { s=f_readreg(s); d=f_rmw(d); raw_frem_rr(d,s); f_unlock(s); f_unlock(d); } MENDFUNC(2,frem_rr,(FRW d, FR s)) MIDFUNC(2,frem1_rr,(FRW d, FR s)) { s=f_readreg(s); d=f_rmw(d); raw_frem1_rr(d,s); f_unlock(s); f_unlock(d); } MENDFUNC(2,frem1_rr,(FRW d, FR s)) MIDFUNC(2,fmul_rr,(FRW d, FR s)) { s=f_readreg(s); d=f_rmw(d); raw_fmul_rr(d,s); f_unlock(s); f_unlock(d); } MENDFUNC(2,fmul_rr,(FRW d, FR s)) /******************************************************************** * Support functions exposed to gencomp. CREATE time * ********************************************************************/ void set_zero(int r, int tmp) { if (setzflg_uses_bsf) bsf_l_rr(r,r); else simulate_bsf(tmp,r); } int kill_rodent(int r) { return KILLTHERAT && have_rat_stall && (live.state[r].status==INMEM || live.state[r].status==CLEAN || live.state[r].status==ISCONST || live.state[r].dirtysize==4); } uae_u32 get_const(int r) { Dif (!isconst(r)) { write_log("Register %d should be constant, but isn't\n",r); abort(); } return live.state[r].val; } void sync_m68k_pc(void) { if (m68k_pc_offset) { add_l_ri(PC_P,m68k_pc_offset); comp_pc_p+=m68k_pc_offset; m68k_pc_offset=0; } } /******************************************************************** * Scratch registers management * ********************************************************************/ struct scratch_t { uae_u32 regs[VREGS]; fpu_register fregs[VFREGS]; }; static scratch_t scratch; /******************************************************************** * Support functions exposed to newcpu * ********************************************************************/ static inline const char *str_on_off(bool b) { return b ? "on" : "off"; } void compiler_init(void) { static bool initialized = false; if (initialized) return; #if JIT_DEBUG // JIT debug mode ? JITDebug = PrefsFindBool("jitdebug"); #endif write_log(" : enable runtime disassemblers : %s\n", JITDebug ? "yes" : "no"); #ifdef USE_JIT_FPU // Use JIT compiler for FPU instructions ? avoid_fpu = !PrefsFindBool("jitfpu"); #else // JIT FPU is always disabled avoid_fpu = true; #endif write_log(" : compile FPU instructions : %s\n", !avoid_fpu ? "yes" : "no"); // Get size of the translation cache (in KB) cache_size = PrefsFindInt32("jitcachesize"); write_log(" : requested translation cache size : %d KB\n", cache_size); // Initialize target CPU (check for features, e.g. CMOV, rat stalls) raw_init_cpu(); setzflg_uses_bsf = target_check_bsf(); write_log(" : target processor has CMOV instructions : %s\n", have_cmov ? "yes" : "no"); write_log(" : target processor can suffer from partial register stalls : %s\n", have_rat_stall ? "yes" : "no"); write_log(" : alignment for loops, jumps are %d, %d\n", align_loops, align_jumps); // Translation cache flush mechanism lazy_flush = PrefsFindBool("jitlazyflush"); write_log(" : lazy translation cache invalidation : %s\n", str_on_off(lazy_flush)); flush_icache = lazy_flush ? flush_icache_lazy : flush_icache_hard; // Compiler features write_log(" : register aliasing : %s\n", str_on_off(1)); write_log(" : FP register aliasing : %s\n", str_on_off(USE_F_ALIAS)); write_log(" : lazy constant offsetting : %s\n", str_on_off(USE_OFFSET)); #if USE_INLINING follow_const_jumps = PrefsFindBool("jitinline"); #endif write_log(" : translate through constant jumps : %s\n", str_on_off(follow_const_jumps)); write_log(" : separate blockinfo allocation : %s\n", str_on_off(USE_SEPARATE_BIA)); // Build compiler tables build_comp(); initialized = true; #if PROFILE_UNTRANSLATED_INSNS write_log(" : gather statistics on untranslated insns count\n"); #endif #if PROFILE_COMPILE_TIME write_log(" : gather statistics on translation time\n"); emul_start_time = clock(); #endif } void compiler_exit(void) { #if PROFILE_COMPILE_TIME emul_end_time = clock(); #endif // Deallocate translation cache if (compiled_code) { vm_release(compiled_code, cache_size * 1024); compiled_code = 0; } // Deallocate popallspace if (popallspace) { vm_release(popallspace, POPALLSPACE_SIZE); popallspace = 0; } #if PROFILE_COMPILE_TIME write_log("### Compile Block statistics\n"); write_log("Number of calls to compile_block : %d\n", compile_count); uae_u32 emul_time = emul_end_time - emul_start_time; write_log("Total emulation time : %.1f sec\n", double(emul_time)/double(CLOCKS_PER_SEC)); write_log("Total compilation time : %.1f sec (%.1f%%)\n", double(compile_time)/double(CLOCKS_PER_SEC), 100.0*double(compile_time)/double(emul_time)); write_log("\n"); #endif #if PROFILE_UNTRANSLATED_INSNS uae_u64 untranslated_count = 0; for (int i = 0; i < 65536; i++) { opcode_nums[i] = i; untranslated_count += raw_cputbl_count[i]; } write_log("Sorting out untranslated instructions count...\n"); qsort(opcode_nums, 65536, sizeof(uae_u16), untranslated_compfn); write_log("\nRank Opc Count Name\n"); for (int i = 0; i < untranslated_top_ten; i++) { uae_u32 count = raw_cputbl_count[opcode_nums[i]]; struct instr *dp; struct mnemolookup *lookup; if (!count) break; dp = table68k + opcode_nums[i]; for (lookup = lookuptab; lookup->mnemo != dp->mnemo; lookup++) ; write_log("%03d: %04x %10lu %s\n", i, opcode_nums[i], count, lookup->name); } #endif #if RECORD_REGISTER_USAGE int reg_count_ids[16]; uint64 tot_reg_count = 0; for (int i = 0; i < 16; i++) { reg_count_ids[i] = i; tot_reg_count += reg_count[i]; } qsort(reg_count_ids, 16, sizeof(int), reg_count_compare); uint64 cum_reg_count = 0; for (int i = 0; i < 16; i++) { int r = reg_count_ids[i]; cum_reg_count += reg_count[r]; printf("%c%d : %16ld %2.1f%% [%2.1f]\n", r < 8 ? 'D' : 'A', r % 8, reg_count[r], 100.0*double(reg_count[r])/double(tot_reg_count), 100.0*double(cum_reg_count)/double(tot_reg_count)); } #endif } bool compiler_use_jit(void) { // Check for the "jit" prefs item if (!PrefsFindBool("jit")) return false; // Don't use JIT if translation cache size is less then MIN_CACHE_SIZE KB if (PrefsFindInt32("jitcachesize") < MIN_CACHE_SIZE) { write_log(" : translation cache size is less than %d KB. Disabling JIT.\n", MIN_CACHE_SIZE); return false; } // Enable JIT for 68020+ emulation only if (CPUType < 2) { write_log(" : JIT is not supported in 680%d0 emulation mode, disabling.\n", CPUType); return false; } return true; } void init_comp(void) { int i; uae_s8* cb=can_byte; uae_s8* cw=can_word; uae_s8* au=always_used; #if RECORD_REGISTER_USAGE for (i=0;i<16;i++) reg_count_local[i] = 0; #endif for (i=0;i= (uintptr)ROMBaseHost) && (addr < (uintptr)ROMBaseHost + ROMSize)); } static void flush_all(void) { int i; log_flush(); for (i=0;i0) free_nreg(i); for (i=0;i0) f_free_nreg(i); live.flags_in_flags=TRASH; /* Note: We assume we already rescued the flags at the very start of the call_r functions! */ } /******************************************************************** * Memory access and related functions, CREATE time * ********************************************************************/ void register_branch(uae_u32 not_taken, uae_u32 taken, uae_u8 cond) { next_pc_p=not_taken; taken_pc_p=taken; branch_cc=cond; } static uae_u32 get_handler_address(uae_u32 addr) { uae_u32 cl=cacheline(addr); blockinfo* bi=get_blockinfo_addr_new((void*)(uintptr)addr,0); return (uintptr)&(bi->direct_handler_to_use); } static uae_u32 get_handler(uae_u32 addr) { uae_u32 cl=cacheline(addr); blockinfo* bi=get_blockinfo_addr_new((void*)(uintptr)addr,0); return (uintptr)bi->direct_handler_to_use; } static void load_handler(int reg, uae_u32 addr) { mov_l_rm(reg,get_handler_address(addr)); } /* This version assumes that it is writing *real* memory, and *will* fail * if that assumption is wrong! No branches, no second chances, just * straight go-for-it attitude */ static void writemem_real(int address, int source, int size, int tmp, int clobber) { int f=tmp; if (clobber) f=source; switch(size) { case 1: mov_b_bRr(address,source,MEMBaseDiff); break; case 2: mov_w_rr(f,source); bswap_16(f); mov_w_bRr(address,f,MEMBaseDiff); break; case 4: mov_l_rr(f,source); bswap_32(f); mov_l_bRr(address,f,MEMBaseDiff); break; } forget_about(tmp); forget_about(f); } void writebyte(int address, int source, int tmp) { writemem_real(address,source,1,tmp,0); } static __inline__ void writeword_general(int address, int source, int tmp, int clobber) { writemem_real(address,source,2,tmp,clobber); } void writeword_clobber(int address, int source, int tmp) { writeword_general(address,source,tmp,1); } void writeword(int address, int source, int tmp) { writeword_general(address,source,tmp,0); } static __inline__ void writelong_general(int address, int source, int tmp, int clobber) { writemem_real(address,source,4,tmp,clobber); } void writelong_clobber(int address, int source, int tmp) { writelong_general(address,source,tmp,1); } void writelong(int address, int source, int tmp) { writelong_general(address,source,tmp,0); } /* This version assumes that it is reading *real* memory, and *will* fail * if that assumption is wrong! No branches, no second chances, just * straight go-for-it attitude */ static void readmem_real(int address, int dest, int size, int tmp) { int f=tmp; if (size==4 && address!=dest) f=dest; switch(size) { case 1: mov_b_brR(dest,address,MEMBaseDiff); break; case 2: mov_w_brR(dest,address,MEMBaseDiff); bswap_16(dest); break; case 4: mov_l_brR(dest,address,MEMBaseDiff); bswap_32(dest); break; } forget_about(tmp); } void readbyte(int address, int dest, int tmp) { readmem_real(address,dest,1,tmp); } void readword(int address, int dest, int tmp) { readmem_real(address,dest,2,tmp); } void readlong(int address, int dest, int tmp) { readmem_real(address,dest,4,tmp); } void get_n_addr(int address, int dest, int tmp) { // a is the register containing the virtual address // after the offset had been fetched int a=tmp; // f is the register that will contain the offset int f=tmp; // a == f == tmp if (address == dest) if (address!=dest) { a=address; f=dest; } #if REAL_ADDRESSING mov_l_rr(dest, address); #elif DIRECT_ADDRESSING lea_l_brr(dest,address,MEMBaseDiff); #endif forget_about(tmp); } void get_n_addr_jmp(int address, int dest, int tmp) { /* For this, we need to get the same address as the rest of UAE would --- otherwise we end up translating everything twice */ get_n_addr(address,dest,tmp); } /* base is a register, but dp is an actual value. target is a register, as is tmp */ void calc_disp_ea_020(int base, uae_u32 dp, int target, int tmp) { int reg = (dp >> 12) & 15; int regd_shift=(dp >> 9) & 3; if (dp & 0x100) { int ignorebase=(dp&0x80); int ignorereg=(dp&0x40); int addbase=0; int outer=0; if ((dp & 0x30) == 0x20) addbase = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); if ((dp & 0x30) == 0x30) addbase = comp_get_ilong((m68k_pc_offset+=4)-4); if ((dp & 0x3) == 0x2) outer = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); if ((dp & 0x3) == 0x3) outer = comp_get_ilong((m68k_pc_offset+=4)-4); if ((dp & 0x4) == 0) { /* add regd *before* the get_long */ if (!ignorereg) { if ((dp & 0x800) == 0) sign_extend_16_rr(target,reg); else mov_l_rr(target,reg); shll_l_ri(target,regd_shift); } else mov_l_ri(target,0); /* target is now regd */ if (!ignorebase) add_l(target,base); add_l_ri(target,addbase); if (dp&0x03) readlong(target,target,tmp); } else { /* do the getlong first, then add regd */ if (!ignorebase) { mov_l_rr(target,base); add_l_ri(target,addbase); } else mov_l_ri(target,addbase); if (dp&0x03) readlong(target,target,tmp); if (!ignorereg) { if ((dp & 0x800) == 0) sign_extend_16_rr(tmp,reg); else mov_l_rr(tmp,reg); shll_l_ri(tmp,regd_shift); /* tmp is now regd */ add_l(target,tmp); } } add_l_ri(target,outer); } else { /* 68000 version */ if ((dp & 0x800) == 0) { /* Sign extend */ sign_extend_16_rr(target,reg); lea_l_brr_indexed(target,base,target,1<= CODE_ALLOC_MAX_ATTEMPTS) return NULL; return do_alloc_code(size, depth + 1); #else uint8 *code = (uint8 *)vm_acquire(size); return code == VM_MAP_FAILED ? NULL : code; #endif } static inline uint8 *alloc_code(uint32 size) { uint8 *ptr = do_alloc_code(size, 0); /* allocated code must fit in 32-bit boundaries */ assert((uintptr)ptr <= 0xffffffff); return ptr; } void alloc_cache(void) { if (compiled_code) { flush_icache_hard(6); vm_release(compiled_code, cache_size * 1024); compiled_code = 0; } if (cache_size == 0) return; while (!compiled_code && cache_size) { if ((compiled_code = alloc_code(cache_size * 1024)) == NULL) { compiled_code = 0; cache_size /= 2; } } vm_protect(compiled_code, cache_size * 1024, VM_PAGE_READ | VM_PAGE_WRITE | VM_PAGE_EXECUTE); if (compiled_code) { write_log(" : actual translation cache size : %d KB at 0x%08X\n", cache_size, compiled_code); max_compile_start = compiled_code + cache_size*1024 - BYTES_PER_INST; current_compile_p = compiled_code; current_cache_size = 0; } } extern void op_illg_1 (uae_u32 opcode) REGPARAM; static void calc_checksum(blockinfo* bi, uae_u32* c1, uae_u32* c2) { uae_u32 k1 = 0; uae_u32 k2 = 0; #if USE_CHECKSUM_INFO checksum_info *csi = bi->csi; Dif(!csi) abort(); while (csi) { uae_s32 len = csi->length; uintptr tmp = (uintptr)csi->start_p; #else uae_s32 len = bi->len; uintptr tmp = (uintptr)bi->min_pcp; #endif uae_u32*pos; len += (tmp & 3); tmp &= ~((uintptr)3); pos = (uae_u32 *)tmp; if (len >= 0 && len <= MAX_CHECKSUM_LEN) { while (len > 0) { k1 += *pos; k2 ^= *pos; pos++; len -= 4; } } #if USE_CHECKSUM_INFO csi = csi->next; } #endif *c1 = k1; *c2 = k2; } #if 0 static void show_checksum(CSI_TYPE* csi) { uae_u32 k1=0; uae_u32 k2=0; uae_s32 len=CSI_LENGTH(csi); uae_u32 tmp=(uintptr)CSI_START_P(csi); uae_u32* pos; len+=(tmp&3); tmp&=(~3); pos=(uae_u32*)tmp; if (len<0 || len>MAX_CHECKSUM_LEN) { return; } else { while (len>0) { write_log("%08x ",*pos); pos++; len-=4; } write_log(" bla\n"); } } #endif int check_for_cache_miss(void) { blockinfo* bi=get_blockinfo_addr(regs.pc_p); if (bi) { int cl=cacheline(regs.pc_p); if (bi!=cache_tags[cl+1].bi) { raise_in_cl_list(bi); return 1; } } return 0; } static void recompile_block(void) { /* An existing block's countdown code has expired. We need to make sure that execute_normal doesn't refuse to recompile due to a perceived cache miss... */ blockinfo* bi=get_blockinfo_addr(regs.pc_p); Dif (!bi) abort(); raise_in_cl_list(bi); execute_normal(); return; } static void cache_miss(void) { blockinfo* bi=get_blockinfo_addr(regs.pc_p); uae_u32 cl=cacheline(regs.pc_p); blockinfo* bi2=get_blockinfo(cl); if (!bi) { execute_normal(); /* Compile this block now */ return; } Dif (!bi2 || bi==bi2) { write_log("Unexplained cache miss %p %p\n",bi,bi2); abort(); } raise_in_cl_list(bi); return; } static int called_check_checksum(blockinfo* bi); static inline int block_check_checksum(blockinfo* bi) { uae_u32 c1,c2; bool isgood; if (bi->status!=BI_NEED_CHECK) return 1; /* This block is in a checked state */ checksum_count++; if (bi->c1 || bi->c2) calc_checksum(bi,&c1,&c2); else { c1=c2=1; /* Make sure it doesn't match */ } isgood=(c1==bi->c1 && c2==bi->c2); if (isgood) { /* This block is still OK. So we reactivate. Of course, that means we have to move it into the needs-to-be-flushed list */ bi->handler_to_use=bi->handler; set_dhtu(bi,bi->direct_handler); bi->status=BI_CHECKING; isgood=called_check_checksum(bi); } if (isgood) { /* write_log("reactivate %p/%p (%x %x/%x %x)\n",bi,bi->pc_p, c1,c2,bi->c1,bi->c2);*/ remove_from_list(bi); add_to_active(bi); raise_in_cl_list(bi); bi->status=BI_ACTIVE; } else { /* This block actually changed. We need to invalidate it, and set it up to be recompiled */ /* write_log("discard %p/%p (%x %x/%x %x)\n",bi,bi->pc_p, c1,c2,bi->c1,bi->c2); */ invalidate_block(bi); raise_in_cl_list(bi); } return isgood; } static int called_check_checksum(blockinfo* bi) { dependency* x=bi->deplist; int isgood=1; int i; for (i=0;i<2 && isgood;i++) { if (bi->dep[i].jmp_off) { isgood=block_check_checksum(bi->dep[i].target); } } return isgood; } static void check_checksum(void) { blockinfo* bi=get_blockinfo_addr(regs.pc_p); uae_u32 cl=cacheline(regs.pc_p); blockinfo* bi2=get_blockinfo(cl); /* These are not the droids you are looking for... */ if (!bi) { /* Whoever is the primary target is in a dormant state, but calling it was accidental, and we should just compile this new block */ execute_normal(); return; } if (bi!=bi2) { /* The block was hit accidentally, but it does exist. Cache miss */ cache_miss(); return; } if (!block_check_checksum(bi)) execute_normal(); } static __inline__ void match_states(blockinfo* bi) { int i; smallstate* s=&(bi->env); if (bi->status==BI_NEED_CHECK) { block_check_checksum(bi); } if (bi->status==BI_ACTIVE || bi->status==BI_FINALIZING) { /* Deal with the *promises* the block makes (about not using certain vregs) */ for (i=0;i<16;i++) { if (s->virt[i]==L_UNNEEDED) { // write_log("unneeded reg %d at %p\n",i,target); COMPCALL(forget_about)(i); // FIXME } } } flush(1); /* And now deal with the *demands* the block makes */ for (i=0;inat[i]; if (v>=0) { // printf("Loading reg %d into %d at %p\n",v,i,target); readreg_specific(v,4,i); // do_load_reg(i,v); // setlock(i); } } for (i=0;inat[i]; if (v>=0) { unlock2(i); } } } static __inline__ void create_popalls(void) { int i,r; if ((popallspace = alloc_code(POPALLSPACE_SIZE)) == NULL) { write_log("FATAL: Could not allocate popallspace!\n"); abort(); } vm_protect(popallspace, POPALLSPACE_SIZE, VM_PAGE_READ | VM_PAGE_WRITE); int stack_space = STACK_OFFSET; for (i=0;idirect_pen=(cpuop_func *)get_target(); raw_mov_l_rm(0,(uintptr)&(bi->pc_p)); raw_mov_l_mr((uintptr)®s.pc_p,0); raw_jmp((uintptr)popall_execute_normal); align_target(align_jumps); bi->direct_pcc=(cpuop_func *)get_target(); raw_mov_l_rm(0,(uintptr)&(bi->pc_p)); raw_mov_l_mr((uintptr)®s.pc_p,0); raw_jmp((uintptr)popall_check_checksum); current_compile_p=get_target(); bi->deplist=NULL; for (i=0;i<2;i++) { bi->dep[i].prev_p=NULL; bi->dep[i].next=NULL; } bi->env=default_ss; bi->status=BI_INVALID; bi->havestate=0; //bi->env=empty_ss; } // OPCODE is in big endian format, use cft_map() beforehand, if needed. static inline void reset_compop(int opcode) { compfunctbl[opcode] = NULL; nfcompfunctbl[opcode] = NULL; } static int read_opcode(const char *p) { int opcode = 0; for (int i = 0; i < 4; i++) { int op = p[i]; switch (op) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': opcode = (opcode << 4) | (op - '0'); break; case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': opcode = (opcode << 4) | ((op - 'a') + 10); break; case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': opcode = (opcode << 4) | ((op - 'A') + 10); break; default: return -1; } } return opcode; } static bool merge_blacklist() { const char *blacklist = PrefsFindString("jitblacklist"); if (blacklist) { const char *p = blacklist; for (;;) { if (*p == 0) return true; int opcode1 = read_opcode(p); if (opcode1 < 0) return false; p += 4; int opcode2 = opcode1; if (*p == '-') { p++; opcode2 = read_opcode(p); if (opcode2 < 0) return false; p += 4; } if (*p == 0 || *p == ',' || *p == ';') { write_log(" : blacklist opcodes : %04x-%04x\n", opcode1, opcode2); for (int opcode = opcode1; opcode <= opcode2; opcode++) reset_compop(cft_map(opcode)); if (*p == ',' || *p++ == ';') continue; return true; } return false; } } return true; } void build_comp(void) { int i; int jumpcount=0; unsigned long opcode; struct comptbl* tbl=op_smalltbl_0_comp_ff; struct comptbl* nftbl=op_smalltbl_0_comp_nf; int count; int cpu_level = 0; // 68000 (default) if (CPUType == 4) cpu_level = 4; // 68040 with FPU else { if (FPUType) cpu_level = 3; // 68020 with FPU else if (CPUType >= 2) cpu_level = 2; // 68020 else if (CPUType == 1) cpu_level = 1; } struct cputbl *nfctbl = ( cpu_level == 4 ? op_smalltbl_0_nf : cpu_level == 3 ? op_smalltbl_1_nf : cpu_level == 2 ? op_smalltbl_2_nf : cpu_level == 1 ? op_smalltbl_3_nf : op_smalltbl_4_nf); write_log (" : building compiler function tables\n"); for (opcode = 0; opcode < 65536; opcode++) { reset_compop(opcode); nfcpufunctbl[opcode] = op_illg_1; prop[opcode].use_flags = 0x1f; prop[opcode].set_flags = 0x1f; prop[opcode].cflow = fl_trap; // ILLEGAL instructions do trap } for (i = 0; tbl[i].opcode < 65536; i++) { int cflow = table68k[tbl[i].opcode].cflow; if (follow_const_jumps && (tbl[i].specific & 16)) cflow = fl_const_jump; else cflow &= ~fl_const_jump; prop[cft_map(tbl[i].opcode)].cflow = cflow; int uses_fpu = tbl[i].specific & 32; if (uses_fpu && avoid_fpu) compfunctbl[cft_map(tbl[i].opcode)] = NULL; else compfunctbl[cft_map(tbl[i].opcode)] = tbl[i].handler; } for (i = 0; nftbl[i].opcode < 65536; i++) { int uses_fpu = tbl[i].specific & 32; if (uses_fpu && avoid_fpu) nfcompfunctbl[cft_map(nftbl[i].opcode)] = NULL; else nfcompfunctbl[cft_map(nftbl[i].opcode)] = nftbl[i].handler; nfcpufunctbl[cft_map(nftbl[i].opcode)] = nfctbl[i].handler; } for (i = 0; nfctbl[i].handler; i++) { nfcpufunctbl[cft_map(nfctbl[i].opcode)] = nfctbl[i].handler; } for (opcode = 0; opcode < 65536; opcode++) { compop_func *f; compop_func *nff; cpuop_func *nfcf; int isaddx,cflow; if (table68k[opcode].mnemo == i_ILLG || table68k[opcode].clev > cpu_level) continue; if (table68k[opcode].handler != -1) { f = compfunctbl[cft_map(table68k[opcode].handler)]; nff = nfcompfunctbl[cft_map(table68k[opcode].handler)]; nfcf = nfcpufunctbl[cft_map(table68k[opcode].handler)]; cflow = prop[cft_map(table68k[opcode].handler)].cflow; isaddx = prop[cft_map(table68k[opcode].handler)].is_addx; prop[cft_map(opcode)].cflow = cflow; prop[cft_map(opcode)].is_addx = isaddx; compfunctbl[cft_map(opcode)] = f; nfcompfunctbl[cft_map(opcode)] = nff; Dif (nfcf == op_illg_1) abort(); nfcpufunctbl[cft_map(opcode)] = nfcf; } prop[cft_map(opcode)].set_flags = table68k[opcode].flagdead; prop[cft_map(opcode)].use_flags = table68k[opcode].flaglive; /* Unconditional jumps don't evaluate condition codes, so they * don't actually use any flags themselves */ if (prop[cft_map(opcode)].cflow & fl_const_jump) prop[cft_map(opcode)].use_flags = 0; } for (i = 0; nfctbl[i].handler != NULL; i++) { if (nfctbl[i].specific) nfcpufunctbl[cft_map(tbl[i].opcode)] = nfctbl[i].handler; } /* Merge in blacklist */ if (!merge_blacklist()) write_log(" : blacklist merge failure!\n"); count=0; for (opcode = 0; opcode < 65536; opcode++) { if (compfunctbl[cft_map(opcode)]) count++; } write_log(" : supposedly %d compileable opcodes!\n",count); /* Initialise state */ create_popalls(); alloc_cache(); reset_lists(); for (i=0;ipc_p)].handler=(cpuop_func *)popall_execute_normal; cache_tags[cacheline(bi->pc_p)+1].bi=NULL; dbi=bi; bi=bi->next; free_blockinfo(dbi); } bi=dormant; while(bi) { cache_tags[cacheline(bi->pc_p)].handler=(cpuop_func *)popall_execute_normal; cache_tags[cacheline(bi->pc_p)+1].bi=NULL; dbi=bi; bi=bi->next; free_blockinfo(dbi); } reset_lists(); if (!compiled_code) return; current_compile_p=compiled_code; SPCFLAGS_SET( SPCFLAG_JIT_EXEC_RETURN ); /* To get out of compiled code */ } /* "Soft flushing" --- instead of actually throwing everything away, we simply mark everything as "needs to be checked". */ static inline void flush_icache_lazy(int n) { uae_u32 i; blockinfo* bi; blockinfo* bi2; soft_flush_count++; if (!active) return; bi=active; while (bi) { uae_u32 cl=cacheline(bi->pc_p); if (bi->status==BI_INVALID || bi->status==BI_NEED_RECOMP) { if (bi==cache_tags[cl+1].bi) cache_tags[cl].handler=(cpuop_func *)popall_execute_normal; bi->handler_to_use=(cpuop_func *)popall_execute_normal; set_dhtu(bi,bi->direct_pen); bi->status=BI_INVALID; } else { if (bi==cache_tags[cl+1].bi) cache_tags[cl].handler=(cpuop_func *)popall_check_checksum; bi->handler_to_use=(cpuop_func *)popall_check_checksum; set_dhtu(bi,bi->direct_pcc); bi->status=BI_NEED_CHECK; } bi2=bi; bi=bi->next; } /* bi2 is now the last entry in the active list */ bi2->next=dormant; if (dormant) dormant->prev_p=&(bi2->next); dormant=active; active->prev_p=&dormant; active=NULL; } void flush_icache_range(uae_u8 *start_p, uae_u32 length) { if (!active) return; #if LAZY_FLUSH_ICACHE_RANGE blockinfo *bi = active; while (bi) { #if USE_CHECKSUM_INFO bool candidate = false; for (checksum_info *csi = bi->csi; csi; csi = csi->next) { if (((start_p - csi->start_p) < csi->length) || ((csi->start_p - start_p) < length)) { candidate = true; break; } } #else // Assume system is consistent and would invalidate the right range const bool candidate = (bi->pc_p - start_p) < length; #endif blockinfo *dbi = bi; bi = bi->next; if (candidate) { uae_u32 cl = cacheline(dbi->pc_p); if (dbi->status == BI_INVALID || dbi->status == BI_NEED_RECOMP) { if (dbi == cache_tags[cl+1].bi) cache_tags[cl].handler = (cpuop_func *)popall_execute_normal; dbi->handler_to_use = (cpuop_func *)popall_execute_normal; set_dhtu(dbi, dbi->direct_pen); dbi->status = BI_INVALID; } else { if (dbi == cache_tags[cl+1].bi) cache_tags[cl].handler = (cpuop_func *)popall_check_checksum; dbi->handler_to_use = (cpuop_func *)popall_check_checksum; set_dhtu(dbi, dbi->direct_pcc); dbi->status = BI_NEED_CHECK; } remove_from_list(dbi); add_to_dormant(dbi); } } return; #endif flush_icache(-1); } static void catastrophe(void) { abort(); } int failure; #define TARGET_M68K 0 #define TARGET_POWERPC 1 #define TARGET_X86 2 #define TARGET_X86_64 3 #if defined(i386) || defined(__i386__) #define TARGET_NATIVE TARGET_X86 #endif #if defined(powerpc) || defined(__powerpc__) #define TARGET_NATIVE TARGET_POWERPC #endif #if defined(x86_64) || defined(__x86_64__) #define TARGET_NATIVE TARGET_X86_64 #endif #ifdef ENABLE_MON static uae_u32 mon_read_byte_jit(uintptr addr) { uae_u8 *m = (uae_u8 *)addr; return (uintptr)(*m); } static void mon_write_byte_jit(uintptr addr, uae_u32 b) { uae_u8 *m = (uae_u8 *)addr; *m = b; } #endif void disasm_block(int target, uint8 * start, size_t length) { if (!JITDebug) return; #if defined(JIT_DEBUG) && defined(ENABLE_MON) char disasm_str[200]; sprintf(disasm_str, "%s $%x $%x", target == TARGET_M68K ? "d68" : target == TARGET_X86 ? "d86" : target == TARGET_X86_64 ? "d8664" : target == TARGET_POWERPC ? "d" : "x", start, start + length - 1); uae_u32 (*old_mon_read_byte)(uintptr) = mon_read_byte; void (*old_mon_write_byte)(uintptr, uae_u32) = mon_write_byte; mon_read_byte = mon_read_byte_jit; mon_write_byte = mon_write_byte_jit; char *arg[5] = {"mon", "-m", "-r", disasm_str, NULL}; mon(4, arg); mon_read_byte = old_mon_read_byte; mon_write_byte = old_mon_write_byte; #endif } static void disasm_native_block(uint8 *start, size_t length) { disasm_block(TARGET_NATIVE, start, length); } static void disasm_m68k_block(uint8 *start, size_t length) { disasm_block(TARGET_M68K, start, length); } #ifdef HAVE_GET_WORD_UNSWAPPED # define DO_GET_OPCODE(a) (do_get_mem_word_unswapped((uae_u16 *)(a))) #else # define DO_GET_OPCODE(a) (do_get_mem_word((uae_u16 *)(a))) #endif #if JIT_DEBUG static uae_u8 *last_regs_pc_p = 0; static uae_u8 *last_compiled_block_addr = 0; void compiler_dumpstate(void) { if (!JITDebug) return; write_log("### Host addresses\n"); write_log("MEM_BASE : %x\n", MEMBaseDiff); write_log("PC_P : %p\n", ®s.pc_p); write_log("SPCFLAGS : %p\n", ®s.spcflags); write_log("D0-D7 : %p-%p\n", ®s.regs[0], ®s.regs[7]); write_log("A0-A7 : %p-%p\n", ®s.regs[8], ®s.regs[15]); write_log("\n"); write_log("### M68k processor state\n"); m68k_dumpstate(0); write_log("\n"); write_log("### Block in Mac address space\n"); write_log("M68K block : %p\n", (void *)(uintptr)get_virtual_address(last_regs_pc_p)); write_log("Native block : %p (%d bytes)\n", (void *)(uintptr)get_virtual_address(last_compiled_block_addr), get_blockinfo_addr(last_regs_pc_p)->direct_handler_size); write_log("\n"); } #endif static void compile_block(cpu_history* pc_hist, int blocklen) { if (letit && compiled_code) { #if PROFILE_COMPILE_TIME compile_count++; clock_t start_time = clock(); #endif #if JIT_DEBUG bool disasm_block = false; #endif /* OK, here we need to 'compile' a block */ int i; int r; int was_comp=0; uae_u8 liveflags[MAXRUN+1]; #if USE_CHECKSUM_INFO bool trace_in_rom = isinrom((uintptr)pc_hist[0].location); uintptr max_pcp=(uintptr)pc_hist[blocklen - 1].location; uintptr min_pcp=max_pcp; #else uintptr max_pcp=(uintptr)pc_hist[0].location; uintptr min_pcp=max_pcp; #endif uae_u32 cl=cacheline(pc_hist[0].location); void* specflags=(void*)®s.spcflags; blockinfo* bi=NULL; blockinfo* bi2; int extra_len=0; redo_current_block=0; if (current_compile_p>=max_compile_start) flush_icache_hard(7); alloc_blockinfos(); bi=get_blockinfo_addr_new(pc_hist[0].location,0); bi2=get_blockinfo(cl); optlev=bi->optlevel; if (bi->status!=BI_INVALID) { Dif (bi!=bi2) { /* I don't think it can happen anymore. Shouldn't, in any case. So let's make sure... */ write_log("WOOOWOO count=%d, ol=%d %p %p\n", bi->count,bi->optlevel,bi->handler_to_use, cache_tags[cl].handler); abort(); } Dif (bi->count!=-1 && bi->status!=BI_NEED_RECOMP) { write_log("bi->count=%d, bi->status=%d\n",bi->count,bi->status); /* What the heck? We are not supposed to be here! */ abort(); } } if (bi->count==-1) { optlev++; while (!optcount[optlev]) optlev++; bi->count=optcount[optlev]-1; } current_block_pc_p=(uintptr)pc_hist[0].location; remove_deps(bi); /* We are about to create new code */ bi->optlevel=optlev; bi->pc_p=(uae_u8*)pc_hist[0].location; #if USE_CHECKSUM_INFO free_checksum_info_chain(bi->csi); bi->csi = NULL; #endif liveflags[blocklen]=0x1f; /* All flags needed afterwards */ i=blocklen; while (i--) { uae_u16* currpcp=pc_hist[i].location; uae_u32 op=DO_GET_OPCODE(currpcp); #if USE_CHECKSUM_INFO trace_in_rom = trace_in_rom && isinrom((uintptr)currpcp); if (follow_const_jumps && is_const_jump(op)) { checksum_info *csi = alloc_checksum_info(); csi->start_p = (uae_u8 *)min_pcp; csi->length = max_pcp - min_pcp + LONGEST_68K_INST; csi->next = bi->csi; bi->csi = csi; max_pcp = (uintptr)currpcp; } min_pcp = (uintptr)currpcp; #else if ((uintptr)currpcpmax_pcp) max_pcp=(uintptr)currpcp; #endif liveflags[i]=((liveflags[i+1]& (~prop[op].set_flags))| prop[op].use_flags); if (prop[op].is_addx && (liveflags[i+1]&FLAG_Z)==0) liveflags[i]&= ~FLAG_Z; } #if USE_CHECKSUM_INFO checksum_info *csi = alloc_checksum_info(); csi->start_p = (uae_u8 *)min_pcp; csi->length = max_pcp - min_pcp + LONGEST_68K_INST; csi->next = bi->csi; bi->csi = csi; #endif bi->needed_flags=liveflags[0]; align_target(align_loops); was_comp=0; bi->direct_handler=(cpuop_func *)get_target(); set_dhtu(bi,bi->direct_handler); bi->status=BI_COMPILING; current_block_start_target=(uintptr)get_target(); log_startblock(); if (bi->count>=0) { /* Need to generate countdown code */ raw_mov_l_mi((uintptr)®s.pc_p,(uintptr)pc_hist[0].location); raw_sub_l_mi((uintptr)&(bi->count),1); raw_jl((uintptr)popall_recompile_block); } if (optlev==0) { /* No need to actually translate */ /* Execute normally without keeping stats */ raw_mov_l_mi((uintptr)®s.pc_p,(uintptr)pc_hist[0].location); raw_jmp((uintptr)popall_exec_nostats); } else { reg_alloc_run=0; next_pc_p=0; taken_pc_p=0; branch_cc=0; comp_pc_p=(uae_u8*)pc_hist[0].location; init_comp(); was_comp=1; #ifdef USE_CPU_EMUL_SERVICES raw_sub_l_mi((uintptr)&emulated_ticks,blocklen); raw_jcc_b_oponly(NATIVE_CC_GT); uae_s8 *branchadd=(uae_s8*)get_target(); emit_byte(0); raw_call((uintptr)cpu_do_check_ticks); *branchadd=(uintptr)get_target()-((uintptr)branchadd+1); #endif #if JIT_DEBUG if (JITDebug) { raw_mov_l_mi((uintptr)&last_regs_pc_p,(uintptr)pc_hist[0].location); raw_mov_l_mi((uintptr)&last_compiled_block_addr,current_block_start_target); } #endif for (i=0;i1) { failure=0; if (!was_comp) { comp_pc_p=(uae_u8*)pc_hist[i].location; init_comp(); } was_comp=1; comptbl[opcode](opcode); freescratch(); if (!(liveflags[i+1] & FLAG_CZNV)) { /* We can forget about flags */ dont_care_flags(); } #if INDIVIDUAL_INST flush(1); nop(); flush(1); was_comp=0; #endif } if (failure) { if (was_comp) { flush(1); was_comp=0; } raw_mov_l_ri(REG_PAR1,(uae_u32)opcode); #if USE_NORMAL_CALLING_CONVENTION raw_push_l_r(REG_PAR1); #endif raw_mov_l_mi((uintptr)®s.pc_p, (uintptr)pc_hist[i].location); raw_call((uintptr)cputbl[opcode]); #if PROFILE_UNTRANSLATED_INSNS // raw_cputbl_count[] is indexed with plain opcode (in m68k order) raw_add_l_mi((uintptr)&raw_cputbl_count[cft_map(opcode)],1); #endif #if USE_NORMAL_CALLING_CONVENTION raw_inc_sp(4); #endif if (i < blocklen - 1) { uae_s8* branchadd; raw_mov_l_rm(0,(uintptr)specflags); raw_test_l_rr(0,0); raw_jz_b_oponly(); branchadd=(uae_s8 *)get_target(); emit_byte(0); raw_jmp((uintptr)popall_do_nothing); *branchadd=(uintptr)get_target()-(uintptr)branchadd-1; } } } #if 1 /* This isn't completely kosher yet; It really needs to be be integrated into a general inter-block-dependency scheme */ if (next_pc_p && taken_pc_p && was_comp && taken_pc_p==current_block_pc_p) { blockinfo* bi1=get_blockinfo_addr_new((void*)next_pc_p,0); blockinfo* bi2=get_blockinfo_addr_new((void*)taken_pc_p,0); uae_u8 x=bi1->needed_flags; if (x==0xff || 1) { /* To be on the safe side */ uae_u16* next=(uae_u16*)next_pc_p; uae_u32 op=DO_GET_OPCODE(next); x=0x1f; x&=(~prop[op].set_flags); x|=prop[op].use_flags; } x|=bi2->needed_flags; if (!(x & FLAG_CZNV)) { /* We can forget about flags */ dont_care_flags(); extra_len+=2; /* The next instruction now is part of this block */ } } #endif log_flush(); if (next_pc_p) { /* A branch was registered */ uintptr t1=next_pc_p; uintptr t2=taken_pc_p; int cc=branch_cc; uae_u32* branchadd; uae_u32* tba; bigstate tmp; blockinfo* tbi; if (taken_pc_penv))) { mark_callers_recompile(bi); } big_to_small_state(&live,&(bi->env)); #endif #if USE_CHECKSUM_INFO remove_from_list(bi); if (trace_in_rom) { // No need to checksum that block trace on cache invalidation free_checksum_info_chain(bi->csi); bi->csi = NULL; add_to_dormant(bi); } else { calc_checksum(bi,&(bi->c1),&(bi->c2)); add_to_active(bi); } #else if (next_pc_p+extra_len>=max_pcp && next_pc_p+extra_lenlen=max_pcp-min_pcp; bi->min_pcp=min_pcp; remove_from_list(bi); if (isinrom(min_pcp) && isinrom(max_pcp)) { add_to_dormant(bi); /* No need to checksum it on cache flush. Please don't start changing ROMs in flight! */ } else { calc_checksum(bi,&(bi->c1),&(bi->c2)); add_to_active(bi); } #endif current_cache_size += get_target() - (uae_u8 *)current_compile_p; #if JIT_DEBUG if (JITDebug) bi->direct_handler_size = get_target() - (uae_u8 *)current_block_start_target; if (JITDebug && disasm_block) { uaecptr block_addr = start_pc + ((char *)pc_hist[0].location - (char *)start_pc_p); D(bug("M68K block @ 0x%08x (%d insns)\n", block_addr, blocklen)); uae_u32 block_size = ((uae_u8 *)pc_hist[blocklen - 1].location - (uae_u8 *)pc_hist[0].location) + 1; disasm_m68k_block((uae_u8 *)pc_hist[0].location, block_size); D(bug("Compiled block @ 0x%08x\n", pc_hist[0].location)); disasm_native_block((uae_u8 *)current_block_start_target, bi->direct_handler_size); getchar(); } #endif log_dump(); align_target(align_jumps); /* This is the non-direct handler */ bi->handler= bi->handler_to_use=(cpuop_func *)get_target(); raw_cmp_l_mi((uintptr)®s.pc_p,(uintptr)pc_hist[0].location); raw_jnz((uintptr)popall_cache_miss); comp_pc_p=(uae_u8*)pc_hist[0].location; bi->status=BI_FINALIZING; init_comp(); match_states(bi); flush(1); raw_jmp((uintptr)bi->direct_handler); current_compile_p=get_target(); raise_in_cl_list(bi); /* We will flush soon, anyway, so let's do it now */ if (current_compile_p>=max_compile_start) flush_icache_hard(7); bi->status=BI_ACTIVE; if (redo_current_block) block_need_recompile(bi); #if PROFILE_COMPILE_TIME compile_time += (clock() - start_time); #endif } /* Account for compilation time */ cpu_do_check_ticks(); } void do_nothing(void) { /* What did you expect this to do? */ } void exec_nostats(void) { for (;;) { uae_u32 opcode = GET_OPCODE; #if FLIGHT_RECORDER m68k_record_step(m68k_getpc()); #endif (*cpufunctbl[opcode])(opcode); cpu_check_ticks(); if (end_block(opcode) || SPCFLAGS_TEST(SPCFLAG_ALL)) { return; /* We will deal with the spcflags in the caller */ } } } void execute_normal(void) { if (!check_for_cache_miss()) { cpu_history pc_hist[MAXRUN]; int blocklen = 0; #if REAL_ADDRESSING || DIRECT_ADDRESSING start_pc_p = regs.pc_p; start_pc = get_virtual_address(regs.pc_p); #else start_pc_p = regs.pc_oldp; start_pc = regs.pc; #endif for (;;) { /* Take note: This is the do-it-normal loop */ pc_hist[blocklen++].location = (uae_u16 *)regs.pc_p; uae_u32 opcode = GET_OPCODE; #if FLIGHT_RECORDER m68k_record_step(m68k_getpc()); #endif (*cpufunctbl[opcode])(opcode); cpu_check_ticks(); if (end_block(opcode) || SPCFLAGS_TEST(SPCFLAG_ALL) || blocklen>=MAXRUN) { compile_block(pc_hist, blocklen); return; /* We will deal with the spcflags in the caller */ } /* No need to check regs.spcflags, because if they were set, we'd have ended up inside that "if" */ } } } typedef void (*compiled_handler)(void); static void m68k_do_compile_execute(void) { for (;;) { ((compiled_handler)(pushall_call_handler))(); /* Whenever we return from that, we should check spcflags */ if (SPCFLAGS_TEST(SPCFLAG_ALL)) { if (m68k_do_specialties ()) return; } } } void m68k_compile_execute (void) { for (;;) { if (quit_program) break; m68k_do_compile_execute(); } } fs-uae-2.2.3+dfsg/src/jit/compemu_codegen.h0000644000175000017500000004517712162366654020751 0ustar glaubitzglaubitz/* * compiler/compemu.h - Public interface and definitions * * Original 68040 JIT compiler for UAE, copyright 2000-2002 Bernd Meyer * * Adaptation for Basilisk II and improvements, copyright 2000-2005 * Gwenole Beauchesne * * Basilisk II (C) 1997-2008 Christian Bauer * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef COMPEMU_H #define COMPEMU_H #ifdef __x86_64__ typedef uae_u64 uintptr; #else typedef uae_u32 uintptr; #endif #ifdef JIT #if defined __i386__ || defined __x86_64__ #include "flags_x86.h" #else #error "Unsupported JIT compiler for this architecture" #endif #if JIT_DEBUG /* dump some information (m68k block, x86 block addresses) about the compiler state */ extern void compiler_dumpstate(void); #endif /* Now that we do block chaining, and also have linked lists on each tag, TAGMASK can be much smaller and still do its job. Saves several megs of memory! */ #define TAGMASK 0x0000ffff #define TAGSIZE (TAGMASK+1) #define MAXRUN 1024 #define cacheline(x) (((uintptr)x)&TAGMASK) extern uae_u8* start_pc_p; extern uae_u32 start_pc; struct blockinfo_t; struct cpu_history { uae_u16 * location; }; union cacheline { cpuop_func * handler; blockinfo_t * bi; }; /* Use new spill/reload strategy when calling external functions */ #define USE_OPTIMIZED_CALLS 0 #if USE_OPTIMIZED_CALLS #error implementation in progress #endif /* (gb) When on, this option can save save up to 30% compilation time * when many lazy flushes occur (e.g. apps in MacOS 8.x). */ #define USE_SEPARATE_BIA 1 /* Use chain of checksum_info_t to compute the block checksum */ #define USE_CHECKSUM_INFO 1 /* Use code inlining, aka follow-up of constant jumps */ #define USE_INLINING 1 /* Inlining requires the chained checksuming information */ #if USE_INLINING #undef USE_CHECKSUM_INFO #define USE_CHECKSUM_INFO 1 #endif /* Does flush_icache_range() only check for blocks falling in the requested range? */ #define LAZY_FLUSH_ICACHE_RANGE 0 #define USE_F_ALIAS 1 #define USE_OFFSET 1 #define COMP_DEBUG 1 #if COMP_DEBUG #define Dif(x) if (x) #else #define Dif(x) if (0) #endif #define SCALE 2 #define BYTES_PER_INST 10240 /* paranoid ;-) */ #define LONGEST_68K_INST 16 /* The number of bytes the longest possible 68k instruction takes */ #define MAX_CHECKSUM_LEN 2048 /* The maximum size we calculate checksums for. Anything larger will be flushed unconditionally even with SOFT_FLUSH */ #define MAX_HOLD_BI 3 /* One for the current block, and up to two for jump targets */ #define INDIVIDUAL_INST 0 #if 1 // gb-- my format from readcpu.cpp is not the same #define FLAG_X 0x0010 #define FLAG_N 0x0008 #define FLAG_Z 0x0004 #define FLAG_V 0x0002 #define FLAG_C 0x0001 #else #define FLAG_C 0x0010 #define FLAG_V 0x0008 #define FLAG_Z 0x0004 #define FLAG_N 0x0002 #define FLAG_X 0x0001 #endif #define FLAG_CZNV (FLAG_C | FLAG_Z | FLAG_N | FLAG_V) #define FLAG_ZNV (FLAG_Z | FLAG_N | FLAG_V) #define KILLTHERAT 1 /* Set to 1 to avoid some partial_rat_stalls */ #if defined(__x86_64__) #define N_REGS 16 /* really only 15, but they are numbered 0-3,5-15 */ #else #define N_REGS 8 /* really only 7, but they are numbered 0,1,2,3,5,6,7 */ #endif #define N_FREGS 6 /* That leaves us two positions on the stack to play with */ /* Functions exposed to newcpu, or to what was moved from newcpu.c to * compemu_support.c */ extern void compiler_init(void); extern void compiler_exit(void); extern bool compiler_use_jit(void); extern void init_comp(void); extern void flush(int save_regs); extern void small_flush(int save_regs); extern void set_target(uae_u8* t); extern uae_u8* get_target(void); extern void freescratch(void); extern void build_comp(void); extern void set_cache_state(int enabled); extern int get_cache_state(void); extern uae_u32 get_jitted_size(void); extern void (*flush_icache)(int n); extern void alloc_cache(void); extern int check_for_cache_miss(void); /* JIT FPU compilation */ extern void comp_fpp_opp (uae_u32 opcode, uae_u16 extra); extern void comp_fbcc_opp (uae_u32 opcode); extern void comp_fscc_opp (uae_u32 opcode, uae_u16 extra); extern uae_u32 needed_flags; //extern cacheline cache_tags[]; extern uae_u8* comp_pc_p; extern void* pushall_call_handler; #define VREGS 32 #define VFREGS 16 #define INMEM 1 #define CLEAN 2 #define DIRTY 3 #define UNDEF 4 #define ISCONST 5 typedef struct { uae_u32* mem; uae_u32 val; uae_u8 is_swapped; uae_u8 status; uae_s8 realreg; /* gb-- realreg can hold -1 */ uae_u8 realind; /* The index in the holds[] array */ uae_u8 needflush; uae_u8 validsize; uae_u8 dirtysize; uae_u8 dummy; } reg_status; typedef struct { uae_u32* mem; double val; uae_u8 status; uae_s8 realreg; /* gb-- realreg can hold -1 */ uae_u8 realind; uae_u8 needflush; } freg_status; #define PC_P 16 #define FLAGX 17 #define FLAGTMP 18 #define NEXT_HANDLER 19 #define S1 20 #define S2 21 #define S3 22 #define S4 23 #define S5 24 #define S6 25 #define S7 26 #define S8 27 #define S9 28 #define S10 29 #define S11 30 #define S12 31 #define FP_RESULT 8 #define FS1 9 #define FS2 10 #define FS3 11 typedef struct { uae_u32 touched; uae_s8 holds[VREGS]; uae_u8 nholds; uae_u8 canbyte; uae_u8 canword; uae_u8 locked; } n_status; typedef struct { uae_u32 touched; uae_s8 holds[VFREGS]; uae_u8 nholds; uae_u8 locked; } fn_status; /* For flag handling */ #define NADA 1 #define TRASH 2 #define VALID 3 /* needflush values */ #define NF_SCRATCH 0 #define NF_TOMEM 1 #define NF_HANDLER 2 typedef struct { /* Integer part */ reg_status state[VREGS]; n_status nat[N_REGS]; uae_u32 flags_on_stack; uae_u32 flags_in_flags; uae_u32 flags_are_important; /* FPU part */ freg_status fate[VFREGS]; fn_status fat[N_FREGS]; /* x86 FPU part */ uae_s8 spos[N_FREGS]; uae_s8 onstack[6]; uae_s8 tos; } bigstate; typedef struct { /* Integer part */ char virt[VREGS]; char nat[N_REGS]; } smallstate; extern bigstate live; extern int touchcnt; #define IMM uae_s32 #define R1 uae_u32 #define R2 uae_u32 #define R4 uae_u32 #define W1 uae_u32 #define W2 uae_u32 #define W4 uae_u32 #define RW1 uae_u32 #define RW2 uae_u32 #define RW4 uae_u32 #define MEMR uae_u32 #define MEMW uae_u32 #define MEMRW uae_u32 #define FW uae_u32 #define FR uae_u32 #define FRW uae_u32 #define MIDFUNC(nargs,func,args) void func args #define MENDFUNC(nargs,func,args) #define COMPCALL(func) func #define LOWFUNC(flags,mem,nargs,func,args) static __inline__ void func args #define LENDFUNC(flags,mem,nargs,func,args) /* What we expose to the outside */ #define DECLARE_MIDFUNC(func) extern void func DECLARE_MIDFUNC(bt_l_ri(R4 r, IMM i)); DECLARE_MIDFUNC(bt_l_rr(R4 r, R4 b)); DECLARE_MIDFUNC(btc_l_ri(RW4 r, IMM i)); DECLARE_MIDFUNC(btc_l_rr(RW4 r, R4 b)); DECLARE_MIDFUNC(bts_l_ri(RW4 r, IMM i)); DECLARE_MIDFUNC(bts_l_rr(RW4 r, R4 b)); DECLARE_MIDFUNC(btr_l_ri(RW4 r, IMM i)); DECLARE_MIDFUNC(btr_l_rr(RW4 r, R4 b)); DECLARE_MIDFUNC(mov_l_rm(W4 d, IMM s)); DECLARE_MIDFUNC(call_r(R4 r)); DECLARE_MIDFUNC(sub_l_mi(IMM d, IMM s)); DECLARE_MIDFUNC(mov_l_mi(IMM d, IMM s)); DECLARE_MIDFUNC(mov_w_mi(IMM d, IMM s)); DECLARE_MIDFUNC(mov_b_mi(IMM d, IMM s)); DECLARE_MIDFUNC(rol_b_ri(RW1 r, IMM i)); DECLARE_MIDFUNC(rol_w_ri(RW2 r, IMM i)); DECLARE_MIDFUNC(rol_l_ri(RW4 r, IMM i)); DECLARE_MIDFUNC(rol_l_rr(RW4 d, R1 r)); DECLARE_MIDFUNC(rol_w_rr(RW2 d, R1 r)); DECLARE_MIDFUNC(rol_b_rr(RW1 d, R1 r)); DECLARE_MIDFUNC(shll_l_rr(RW4 d, R1 r)); DECLARE_MIDFUNC(shll_w_rr(RW2 d, R1 r)); DECLARE_MIDFUNC(shll_b_rr(RW1 d, R1 r)); DECLARE_MIDFUNC(ror_b_ri(R1 r, IMM i)); DECLARE_MIDFUNC(ror_w_ri(R2 r, IMM i)); DECLARE_MIDFUNC(ror_l_ri(R4 r, IMM i)); DECLARE_MIDFUNC(ror_l_rr(R4 d, R1 r)); DECLARE_MIDFUNC(ror_w_rr(R2 d, R1 r)); DECLARE_MIDFUNC(ror_b_rr(R1 d, R1 r)); DECLARE_MIDFUNC(shrl_l_rr(RW4 d, R1 r)); DECLARE_MIDFUNC(shrl_w_rr(RW2 d, R1 r)); DECLARE_MIDFUNC(shrl_b_rr(RW1 d, R1 r)); DECLARE_MIDFUNC(shra_l_rr(RW4 d, R1 r)); DECLARE_MIDFUNC(shra_w_rr(RW2 d, R1 r)); DECLARE_MIDFUNC(shra_b_rr(RW1 d, R1 r)); DECLARE_MIDFUNC(shll_l_ri(RW4 r, IMM i)); DECLARE_MIDFUNC(shll_w_ri(RW2 r, IMM i)); DECLARE_MIDFUNC(shll_b_ri(RW1 r, IMM i)); DECLARE_MIDFUNC(shrl_l_ri(RW4 r, IMM i)); DECLARE_MIDFUNC(shrl_w_ri(RW2 r, IMM i)); DECLARE_MIDFUNC(shrl_b_ri(RW1 r, IMM i)); DECLARE_MIDFUNC(shra_l_ri(RW4 r, IMM i)); DECLARE_MIDFUNC(shra_w_ri(RW2 r, IMM i)); DECLARE_MIDFUNC(shra_b_ri(RW1 r, IMM i)); DECLARE_MIDFUNC(setcc(W1 d, IMM cc)); DECLARE_MIDFUNC(setcc_m(IMM d, IMM cc)); DECLARE_MIDFUNC(cmov_b_rr(RW1 d, R1 s, IMM cc)); DECLARE_MIDFUNC(cmov_w_rr(RW2 d, R2 s, IMM cc)); DECLARE_MIDFUNC(cmov_l_rr(RW4 d, R4 s, IMM cc)); DECLARE_MIDFUNC(cmov_l_rm(RW4 d, IMM s, IMM cc)); DECLARE_MIDFUNC(bsf_l_rr(W4 d, R4 s)); DECLARE_MIDFUNC(pop_m(IMM d)); DECLARE_MIDFUNC(push_m(IMM d)); DECLARE_MIDFUNC(pop_l(W4 d)); DECLARE_MIDFUNC(push_l_i(IMM i)); DECLARE_MIDFUNC(push_l(R4 s)); DECLARE_MIDFUNC(clear_16(RW4 r)); DECLARE_MIDFUNC(clear_8(RW4 r)); DECLARE_MIDFUNC(sign_extend_16_rr(W4 d, R2 s)); DECLARE_MIDFUNC(sign_extend_8_rr(W4 d, R1 s)); DECLARE_MIDFUNC(zero_extend_16_rr(W4 d, R2 s)); DECLARE_MIDFUNC(zero_extend_8_rr(W4 d, R1 s)); DECLARE_MIDFUNC(imul_64_32(RW4 d, RW4 s)); DECLARE_MIDFUNC(mul_64_32(RW4 d, RW4 s)); DECLARE_MIDFUNC(imul_32_32(RW4 d, R4 s)); DECLARE_MIDFUNC(mul_32_32(RW4 d, R4 s)); DECLARE_MIDFUNC(mov_b_rr(W1 d, R1 s)); DECLARE_MIDFUNC(mov_w_rr(W2 d, R2 s)); DECLARE_MIDFUNC(mov_l_rrm_indexed(W4 d,R4 baser, R4 index, IMM factor)); DECLARE_MIDFUNC(mov_w_rrm_indexed(W2 d, R4 baser, R4 index, IMM factor)); DECLARE_MIDFUNC(mov_b_rrm_indexed(W1 d, R4 baser, R4 index, IMM factor)); DECLARE_MIDFUNC(mov_l_mrr_indexed(R4 baser, R4 index, IMM factor, R4 s)); DECLARE_MIDFUNC(mov_w_mrr_indexed(R4 baser, R4 index, IMM factor, R2 s)); DECLARE_MIDFUNC(mov_b_mrr_indexed(R4 baser, R4 index, IMM factor, R1 s)); DECLARE_MIDFUNC(mov_l_bmrr_indexed(IMM base, R4 baser, R4 index, IMM factor, R4 s)); DECLARE_MIDFUNC(mov_w_bmrr_indexed(IMM base, R4 baser, R4 index, IMM factor, R2 s)); DECLARE_MIDFUNC(mov_b_bmrr_indexed(IMM base, R4 baser, R4 index, IMM factor, R1 s)); DECLARE_MIDFUNC(mov_l_brrm_indexed(W4 d, IMM base, R4 baser, R4 index, IMM factor)); DECLARE_MIDFUNC(mov_w_brrm_indexed(W2 d, IMM base, R4 baser, R4 index, IMM factor)); DECLARE_MIDFUNC(mov_b_brrm_indexed(W1 d, IMM base, R4 baser, R4 index, IMM factor)); DECLARE_MIDFUNC(mov_l_rm_indexed(W4 d, IMM base, R4 index, IMM factor)); DECLARE_MIDFUNC(mov_l_rR(W4 d, R4 s, IMM offset)); DECLARE_MIDFUNC(mov_w_rR(W2 d, R4 s, IMM offset)); DECLARE_MIDFUNC(mov_b_rR(W1 d, R4 s, IMM offset)); DECLARE_MIDFUNC(mov_l_brR(W4 d, R4 s, IMM offset)); DECLARE_MIDFUNC(mov_w_brR(W2 d, R4 s, IMM offset)); DECLARE_MIDFUNC(mov_b_brR(W1 d, R4 s, IMM offset)); DECLARE_MIDFUNC(mov_l_Ri(R4 d, IMM i, IMM offset)); DECLARE_MIDFUNC(mov_w_Ri(R4 d, IMM i, IMM offset)); DECLARE_MIDFUNC(mov_b_Ri(R4 d, IMM i, IMM offset)); DECLARE_MIDFUNC(mov_l_Rr(R4 d, R4 s, IMM offset)); DECLARE_MIDFUNC(mov_w_Rr(R4 d, R2 s, IMM offset)); DECLARE_MIDFUNC(mov_b_Rr(R4 d, R1 s, IMM offset)); DECLARE_MIDFUNC(lea_l_brr(W4 d, R4 s, IMM offset)); DECLARE_MIDFUNC(lea_l_brr_indexed(W4 d, R4 s, R4 index, IMM factor, IMM offset)); DECLARE_MIDFUNC(lea_l_rr_indexed(W4 d, R4 s, R4 index, IMM factor)); DECLARE_MIDFUNC(mov_l_bRr(R4 d, R4 s, IMM offset)); DECLARE_MIDFUNC(mov_w_bRr(R4 d, R2 s, IMM offset)); DECLARE_MIDFUNC(mov_b_bRr(R4 d, R1 s, IMM offset)); DECLARE_MIDFUNC(bswap_32(RW4 r)); DECLARE_MIDFUNC(bswap_16(RW2 r)); DECLARE_MIDFUNC(mov_l_rr(W4 d, R4 s)); DECLARE_MIDFUNC(mov_l_mr(IMM d, R4 s)); DECLARE_MIDFUNC(mov_w_mr(IMM d, R2 s)); DECLARE_MIDFUNC(mov_w_rm(W2 d, IMM s)); DECLARE_MIDFUNC(mov_b_mr(IMM d, R1 s)); DECLARE_MIDFUNC(mov_b_rm(W1 d, IMM s)); DECLARE_MIDFUNC(mov_l_ri(W4 d, IMM s)); DECLARE_MIDFUNC(mov_w_ri(W2 d, IMM s)); DECLARE_MIDFUNC(mov_b_ri(W1 d, IMM s)); DECLARE_MIDFUNC(add_l_mi(IMM d, IMM s) ); DECLARE_MIDFUNC(add_w_mi(IMM d, IMM s) ); DECLARE_MIDFUNC(add_b_mi(IMM d, IMM s) ); DECLARE_MIDFUNC(test_l_ri(R4 d, IMM i)); DECLARE_MIDFUNC(test_l_rr(R4 d, R4 s)); DECLARE_MIDFUNC(test_w_rr(R2 d, R2 s)); DECLARE_MIDFUNC(test_b_rr(R1 d, R1 s)); DECLARE_MIDFUNC(and_l_ri(RW4 d, IMM i)); DECLARE_MIDFUNC(and_l(RW4 d, R4 s)); DECLARE_MIDFUNC(and_w(RW2 d, R2 s)); DECLARE_MIDFUNC(and_b(RW1 d, R1 s)); DECLARE_MIDFUNC(or_l_rm(RW4 d, IMM s)); DECLARE_MIDFUNC(or_l_ri(RW4 d, IMM i)); DECLARE_MIDFUNC(or_l(RW4 d, R4 s)); DECLARE_MIDFUNC(or_w(RW2 d, R2 s)); DECLARE_MIDFUNC(or_b(RW1 d, R1 s)); DECLARE_MIDFUNC(adc_l(RW4 d, R4 s)); DECLARE_MIDFUNC(adc_w(RW2 d, R2 s)); DECLARE_MIDFUNC(adc_b(RW1 d, R1 s)); DECLARE_MIDFUNC(add_l(RW4 d, R4 s)); DECLARE_MIDFUNC(add_w(RW2 d, R2 s)); DECLARE_MIDFUNC(add_b(RW1 d, R1 s)); DECLARE_MIDFUNC(sub_l_ri(RW4 d, IMM i)); DECLARE_MIDFUNC(sub_w_ri(RW2 d, IMM i)); DECLARE_MIDFUNC(sub_b_ri(RW1 d, IMM i)); DECLARE_MIDFUNC(add_l_ri(RW4 d, IMM i)); DECLARE_MIDFUNC(add_w_ri(RW2 d, IMM i)); DECLARE_MIDFUNC(add_b_ri(RW1 d, IMM i)); DECLARE_MIDFUNC(sbb_l(RW4 d, R4 s)); DECLARE_MIDFUNC(sbb_w(RW2 d, R2 s)); DECLARE_MIDFUNC(sbb_b(RW1 d, R1 s)); DECLARE_MIDFUNC(sub_l(RW4 d, R4 s)); DECLARE_MIDFUNC(sub_w(RW2 d, R2 s)); DECLARE_MIDFUNC(sub_b(RW1 d, R1 s)); DECLARE_MIDFUNC(cmp_l(R4 d, R4 s)); DECLARE_MIDFUNC(cmp_l_ri(R4 r, IMM i)); DECLARE_MIDFUNC(cmp_w(R2 d, R2 s)); DECLARE_MIDFUNC(cmp_b(R1 d, R1 s)); DECLARE_MIDFUNC(xor_l(RW4 d, R4 s)); DECLARE_MIDFUNC(xor_w(RW2 d, R2 s)); DECLARE_MIDFUNC(xor_b(RW1 d, R1 s)); DECLARE_MIDFUNC(live_flags(void)); DECLARE_MIDFUNC(dont_care_flags(void)); DECLARE_MIDFUNC(duplicate_carry(void)); DECLARE_MIDFUNC(restore_carry(void)); DECLARE_MIDFUNC(start_needflags(void)); DECLARE_MIDFUNC(end_needflags(void)); DECLARE_MIDFUNC(make_flags_live(void)); DECLARE_MIDFUNC(call_r_11(R4 r, W4 out1, R4 in1, IMM osize, IMM isize)); DECLARE_MIDFUNC(call_r_02(R4 r, R4 in1, R4 in2, IMM isize1, IMM isize2)); DECLARE_MIDFUNC(forget_about(W4 r)); DECLARE_MIDFUNC(nop(void)); DECLARE_MIDFUNC(f_forget_about(FW r)); DECLARE_MIDFUNC(fmov_pi(FW r)); DECLARE_MIDFUNC(fmov_log10_2(FW r)); DECLARE_MIDFUNC(fmov_log2_e(FW r)); DECLARE_MIDFUNC(fmov_loge_2(FW r)); DECLARE_MIDFUNC(fmov_1(FW r)); DECLARE_MIDFUNC(fmov_0(FW r)); DECLARE_MIDFUNC(fmov_rm(FW r, MEMR m)); DECLARE_MIDFUNC(fmovi_rm(FW r, MEMR m)); DECLARE_MIDFUNC(fmovi_mr(MEMW m, FR r)); DECLARE_MIDFUNC(fmovs_rm(FW r, MEMR m)); DECLARE_MIDFUNC(fmovs_mr(MEMW m, FR r)); DECLARE_MIDFUNC(fmov_mr(MEMW m, FR r)); DECLARE_MIDFUNC(fmov_ext_mr(MEMW m, FR r)); DECLARE_MIDFUNC(fmov_ext_rm(FW r, MEMR m)); DECLARE_MIDFUNC(fmov_rr(FW d, FR s)); DECLARE_MIDFUNC(fldcw_m_indexed(R4 index, IMM base)); DECLARE_MIDFUNC(ftst_r(FR r)); DECLARE_MIDFUNC(dont_care_fflags(void)); DECLARE_MIDFUNC(fsqrt_rr(FW d, FR s)); DECLARE_MIDFUNC(fabs_rr(FW d, FR s)); DECLARE_MIDFUNC(frndint_rr(FW d, FR s)); DECLARE_MIDFUNC(fsin_rr(FW d, FR s)); DECLARE_MIDFUNC(fcos_rr(FW d, FR s)); DECLARE_MIDFUNC(ftwotox_rr(FW d, FR s)); DECLARE_MIDFUNC(fetox_rr(FW d, FR s)); DECLARE_MIDFUNC(flog2_rr(FW d, FR s)); DECLARE_MIDFUNC(fneg_rr(FW d, FR s)); DECLARE_MIDFUNC(fadd_rr(FRW d, FR s)); DECLARE_MIDFUNC(fsub_rr(FRW d, FR s)); DECLARE_MIDFUNC(fmul_rr(FRW d, FR s)); DECLARE_MIDFUNC(frem_rr(FRW d, FR s)); DECLARE_MIDFUNC(frem1_rr(FRW d, FR s)); DECLARE_MIDFUNC(fdiv_rr(FRW d, FR s)); DECLARE_MIDFUNC(fcmp_rr(FR d, FR s)); DECLARE_MIDFUNC(fflags_into_flags(W2 tmp)); #undef DECLARE_MIDFUNC extern int failure; #define FAIL(x) do { failure|=x; } while (0) /* Convenience functions exposed to gencomp */ extern uae_u32 m68k_pc_offset; extern void readbyte(int address, int dest, int tmp); extern void readword(int address, int dest, int tmp); extern void readlong(int address, int dest, int tmp); extern void writebyte(int address, int source, int tmp); extern void writeword(int address, int source, int tmp); extern void writelong(int address, int source, int tmp); extern void writeword_clobber(int address, int source, int tmp); extern void writelong_clobber(int address, int source, int tmp); extern void get_n_addr(int address, int dest, int tmp); extern void get_n_addr_jmp(int address, int dest, int tmp); extern void calc_disp_ea_020(int base, uae_u32 dp, int target, int tmp); /* Set native Z flag only if register is zero */ extern void set_zero(int r, int tmp); extern int kill_rodent(int r); extern void sync_m68k_pc(void); extern uae_u32 get_const(int r); extern int is_const(int r); extern void register_branch(uae_u32 not_taken, uae_u32 taken, uae_u8 cond); #define comp_get_ibyte(o) do_get_mem_byte((uae_u8 *)(comp_pc_p + (o) + 1)) #define comp_get_iword(o) do_get_mem_word((uae_u16 *)(comp_pc_p + (o))) #define comp_get_ilong(o) do_get_mem_long((uae_u32 *)(comp_pc_p + (o))) struct blockinfo_t; typedef struct dep_t { uae_u32* jmp_off; struct blockinfo_t* target; struct blockinfo_t* source; struct dep_t** prev_p; struct dep_t* next; } dependency; typedef struct checksum_info_t { uae_u8 *start_p; uae_u32 length; struct checksum_info_t *next; } checksum_info; typedef struct blockinfo_t { uae_s32 count; cpuop_func* direct_handler_to_use; cpuop_func* handler_to_use; /* The direct handler does not check for the correct address */ cpuop_func* handler; cpuop_func* direct_handler; cpuop_func* direct_pen; cpuop_func* direct_pcc; uae_u8* pc_p; uae_u32 c1; uae_u32 c2; #if USE_CHECKSUM_INFO checksum_info *csi; #else uae_u32 len; uae_u32 min_pcp; #endif struct blockinfo_t* next_same_cl; struct blockinfo_t** prev_same_cl_p; struct blockinfo_t* next; struct blockinfo_t** prev_p; uae_u8 optlevel; uae_u8 needed_flags; uae_u8 status; uae_u8 havestate; dependency dep[2]; /* Holds things we depend on */ dependency* deplist; /* List of things that depend on this */ smallstate env; #if JIT_DEBUG /* (gb) size of the compiled block (direct handler) */ uae_u32 direct_handler_size; #endif } blockinfo; #define BI_INVALID 0 #define BI_ACTIVE 1 #define BI_NEED_RECOMP 2 #define BI_NEED_CHECK 3 #define BI_CHECKING 4 #define BI_COMPILING 5 #define BI_FINALIZING 6 void execute_normal(void); void exec_nostats(void); void do_nothing(void); #else static __inline__ void flush_icache(int) { } static __inline__ void build_comp() { } #endif /* !USE_JIT */ #endif /* COMPEMU_H */ fs-uae-2.2.3+dfsg/src/jit/compemu_optimizer_x86.cpp0000644000175000017500000002266512162366654022424 0ustar glaubitzglaubitz#if USE_LOW_OPTIMIZER /* Welcome to the magical world of cpp ;-) */ /* This was broken by the advent of FPU emulation. It also didn't provide any useful speedup while it worked. *Sigh* Someone fix my software, please ;-) */ #define MAXLOPTINST 100 #define LDECISION currprefs.comp_lowopt #define lopt_op0(dummy) lopt_store_op0( #define lopt_op1(a1) lopt_store_op1(LOPT_##a1, #define lopt_op2(a1,a2) lopt_store_op2(LOPT_##a1,LOPT_##a2, #define lopt_op3(a1,a2,a3) lopt_store_op3(LOPT_##a1,LOPT_##a2,LOPT_##a3, #define lopt_op4(a1,a2,a3,a4) lopt_store_op4(LOPT_##a1,LOPT_##a2,LOPT_##a3,LOPT_##a4, #define lopt_op5(a1,a2,a3,a4,a5) lopt_store_op5(LOPT_##a1,LOPT_##a2,LOPT_##a3,LOPT_##a4,LOPT_##a5, #define ldirect0(dummy) () #define ldirect1(a1) (LDIR_##a1) #define ldirect2(a1,a2) (LDIR_##a1,LDIR_##a2) #define ldirect3(a1,a2,a3) (LDIR_##a1,LDIR_##a2,LDIR_##a3) #define ldirect4(a1,a2,a3,a4) (LDIR_##a1,LDIR_##a2,LDIR_##a3,LDIR_##a4) #define ldirect5(a1,a2,a3,a4,a5) (LDIR_##a1,LDIR_##a2,LDIR_##a3,LDIR_##a4,LDIR_##a5) #define NONE 0 #define READ 1 #define WRITE 2 #define RMW (READ|WRITE) #define SIZE1 4 #define SIZE2 8 #define SIZE4 12 #define FLOAT 16 #define SIZEMASK 12 #define LIMM NONE #define LR1 (READ | SIZE1) #define LR2 (READ | SIZE2) #define LR4 (READ | SIZE4) #define LW1 (WRITE | SIZE1) #define LW2 (WRITE | SIZE2) #define LW4 (WRITE | SIZE4) #define LRW1 (RMW | SIZE1) #define LRW2 (RMW | SIZE2) #define LRW4 (RMW | SIZE4) #define LFW (READ | FLOAT) #define LFR (WRITE | FLOAT) #define LFRW (RMW | FLOAT) #define LMEMR NONE #define LMEMW NONE #define LMEMRW NONE #define LOPT_IMM LIMM, #define LOPT_R1 LR1 , #define LOPT_R2 LR2 , #define LOPT_R4 LR4 , #define LOPT_W1 LW1 , #define LOPT_W2 LW2 , #define LOPT_W4 LW4 , #define LOPT_RW1 LRW1, #define LOPT_RW2 LRW2, #define LOPT_RW4 LRW4, #define LOPT_FR LFR, #define LOPT_FW LFW, #define LOPT_FRW LFRW, #define LOPT_MEMR LMEMR, #define LOPT_MEMW LMEMW, #define LOPT_MEMRW LMEMRW, #define LDIR_IMM #define LDIR_R1 #define LDIR_R2 #define LDIR_R4 #define LDIR_W1 #define LDIR_W2 #define LDIR_W4 #define LDIR_RW1 #define LDIR_RW2 #define LDIR_RW4 #define LDIR_FW #define LDIR_FR #define LDIR_FRW #define LDIR_MEMR #define LDIR_MEMW #define LDIR_MEMRW #undef LOWFUNC #undef LENDFUNC #define LOWFUNC(flags,mem,nargs,func,args) \ STATIC_INLINE void do_##func args #define LENDFUNC(flags,mem,nargs,func,args) \ STATIC_INLINE void func args \ { \ if (LDECISION) { \ lopt_op##nargs##args do_##func, mem, flags); \ } else { \ do_##func ldirect##nargs##args; \ } \ } typedef struct lopt_inst_rec { void* func; uae_u32 args[5]; uae_u8 argtype[5]; uae_s8 nargs; uae_u8 mem; uae_u8 flags; } lopt_inst; static lopt_inst linst[MAXLOPTINST]; static int lopt_index=0; STATIC_INLINE int argsize(int type) { return type&SIZEMASK; } STATIC_INLINE int reads_mem(int i) { return linst[i].mem & READ; } STATIC_INLINE int access_reg(int i, int r, int mode) { int k; for (k=0;k=i-4 && j>=0 && !depends_on(i,j)) { j--; } if (j!=i-1) { lopt_inst x=linst[i]; int k=i; j++; while (k>j) { linst[k]=linst[k-1]; k--; } linst[j]=x; } } } } typedef void lopt_handler0(void); typedef void lopt_handler1(uae_u32); typedef void lopt_handler2(uae_u32,uae_u32); typedef void lopt_handler3(uae_u32,uae_u32,uae_u32); typedef void lopt_handler4(uae_u32,uae_u32,uae_u32,uae_u32); typedef void lopt_handler5(uae_u32,uae_u32,uae_u32,uae_u32,uae_u32); static void lopt_emit_all(void) { int i; lopt_inst* x; static int inemit=0; if (inemit) { printf("WARNING: lopt_emit is not reentrant!\n"); } inemit=1; low_peephole(); for (i=0;inargs) { case 0: ((lopt_handler0*)x->func)(); break; case 1: ((lopt_handler1*)x->func)(x->args[0]); break; case 2: ((lopt_handler2*)x->func)(x->args[0],x->args[1]); break; case 3: ((lopt_handler3*)x->func)(x->args[0],x->args[1],x->args[2]); break; case 4: ((lopt_handler4*)x->func)(x->args[0],x->args[1],x->args[2], x->args[3]); break; case 5: ((lopt_handler5*)x->func)(x->args[0],x->args[1],x->args[2], x->args[3],x->args[4]); break; default: abort(); } } lopt_index=0; inemit=0; } STATIC_INLINE void low_advance(void) { lopt_index++; if (lopt_index==MAXLOPTINST) lopt_emit_all(); } STATIC_INLINE void lopt_store_op0(void* lfuncptr, uae_u32 lmem, uae_u32 lflags) { linst[lopt_index].func=lfuncptr; linst[lopt_index].mem=lmem; linst[lopt_index].flags=lflags; linst[lopt_index].nargs=0; low_advance(); } STATIC_INLINE void lopt_store_op1(uae_u8 t1, uae_u32 a1, void* lfuncptr, uae_u32 lmem, uae_u32 lflags) { linst[lopt_index].func=lfuncptr; linst[lopt_index].mem=lmem; linst[lopt_index].flags=lflags; linst[lopt_index].nargs=1; linst[lopt_index].argtype[0]=t1; linst[lopt_index].args[0]=a1; low_advance(); } STATIC_INLINE void lopt_store_op2(uae_u8 t1, uae_u32 a1, uae_u8 t2, uae_u32 a2, void* lfuncptr, uae_u32 lmem, uae_u32 lflags) { linst[lopt_index].func=lfuncptr; linst[lopt_index].mem=lmem; linst[lopt_index].flags=lflags; linst[lopt_index].nargs=2; linst[lopt_index].argtype[0]=t1; linst[lopt_index].args[0]=a1; linst[lopt_index].argtype[1]=t2; linst[lopt_index].args[1]=a2; low_advance(); } STATIC_INLINE void lopt_store_op3(uae_u8 t1, uae_u32 a1, uae_u8 t2, uae_u32 a2, uae_u8 t3, uae_u32 a3, void* lfuncptr, uae_u32 lmem, uae_u32 lflags) { linst[lopt_index].func=lfuncptr; linst[lopt_index].mem=lmem; linst[lopt_index].flags=lflags; linst[lopt_index].nargs=3; linst[lopt_index].argtype[0]=t1; linst[lopt_index].args[0]=a1; linst[lopt_index].argtype[1]=t2; linst[lopt_index].args[1]=a2; linst[lopt_index].argtype[2]=t3; linst[lopt_index].args[2]=a3; low_advance(); } STATIC_INLINE void lopt_store_op4(uae_u8 t1, uae_u32 a1, uae_u8 t2, uae_u32 a2, uae_u8 t3, uae_u32 a3, uae_u8 t4, uae_u32 a4, void* lfuncptr, uae_u32 lmem, uae_u32 lflags) { linst[lopt_index].func=lfuncptr; linst[lopt_index].mem=lmem; linst[lopt_index].flags=lflags; linst[lopt_index].nargs=4; linst[lopt_index].argtype[0]=t1; linst[lopt_index].args[0]=a1; linst[lopt_index].argtype[1]=t2; linst[lopt_index].args[1]=a2; linst[lopt_index].argtype[2]=t3; linst[lopt_index].args[2]=a3; linst[lopt_index].argtype[3]=t4; linst[lopt_index].args[3]=a4; low_advance(); } STATIC_INLINE void lopt_store_op5(uae_u8 t1, uae_u32 a1, uae_u8 t2, uae_u32 a2, uae_u8 t3, uae_u32 a3, uae_u8 t4, uae_u32 a4, uae_u8 t5, uae_u32 a5, void* lfuncptr, uae_u32 lmem, uae_u32 lflags) { linst[lopt_index].func=lfuncptr; linst[lopt_index].mem=lmem; linst[lopt_index].flags=lflags; linst[lopt_index].nargs=5; linst[lopt_index].argtype[0]=t1; linst[lopt_index].args[0]=a1; linst[lopt_index].argtype[1]=t2; linst[lopt_index].args[1]=a2; linst[lopt_index].argtype[2]=t3; linst[lopt_index].args[2]=a3; linst[lopt_index].argtype[3]=t4; linst[lopt_index].args[3]=a4; linst[lopt_index].argtype[4]=t5; linst[lopt_index].args[4]=a5; low_advance(); } STATIC_INLINE void empty_low_optimizer(void) { lopt_emit_all(); } #else #define lopt_emit_all() #define empty_low_optimizer() #endif fs-uae-2.2.3+dfsg/src/jit/compemu.h0000644000175000017500000003721512162366654017257 0ustar glaubitzglaubitz #include "flags_x86.h" #ifdef CPU_64_BIT typedef uae_u64 uintptr; #else typedef uae_u32 uintptr; #endif /* Flags for Bernie during development/debugging. Should go away eventually */ #define DISTRUST_CONSISTENT_MEM 0 #define TAGMASK 0x000fffff #define TAGSIZE (TAGMASK+1) #define MAXRUN 1024 extern uae_u8* start_pc_p; extern uae_u32 start_pc; #define cacheline(x) (((uae_u32)x)&TAGMASK) typedef struct { uae_u16* location; uae_u8 cycles; uae_u8 specmem; uae_u8 dummy2; uae_u8 dummy3; } cpu_history; struct blockinfo_t; typedef union { cpuop_func* handler; struct blockinfo_t* bi; } cacheline; extern signed long pissoff; #define USE_OPTIMIZER 0 #define USE_LOW_OPTIMIZER 0 #define USE_ALIAS 1 #define USE_F_ALIAS 1 #define USE_SOFT_FLUSH 1 #define USE_OFFSET 1 #define COMP_DEBUG 1 #if COMP_DEBUG #define Dif(x) if (x) #else #define Dif(x) if (0) #endif #define SCALE 2 #define MAXCYCLES (1000 * CYCLE_UNIT) #define MAXREGOPT 65536 #define BYTES_PER_INST 10240 /* paranoid ;-) */ #define LONGEST_68K_INST 16 /* The number of bytes the longest possible 68k instruction takes */ #define MAX_CHECKSUM_LEN 2048 /* The maximum size we calculate checksums for. Anything larger will be flushed unconditionally even with SOFT_FLUSH */ #define MAX_HOLD_BI 3 /* One for the current block, and up to two for jump targets */ #define INDIVIDUAL_INST 0 #define FLAG_C 0x0010 #define FLAG_V 0x0008 #define FLAG_Z 0x0004 #define FLAG_N 0x0002 #define FLAG_X 0x0001 #define FLAG_CZNV (FLAG_C | FLAG_Z | FLAG_N | FLAG_V) #define FLAG_ZNV (FLAG_Z | FLAG_N | FLAG_V) #define KILLTHERAT 1 /* Set to 1 to avoid some partial_rat_stalls */ /* Whether to preserve registers across calls to JIT compiled routines */ #if defined X86_ASSEMBLY #define USE_PUSH_POP 0 #else #define USE_PUSH_POP 1 #endif #define N_REGS 8 /* really only 7, but they are numbered 0,1,2,3,5,6,7 */ #define N_FREGS 6 /* That leaves us two positions on the stack to play with */ /* Functions exposed to newcpu, or to what was moved from newcpu.c to * compemu_support.c */ extern void init_comp(void); extern void flush(int save_regs); extern void small_flush(int save_regs); extern void set_target(uae_u8* t); extern void freescratch(void); extern void build_comp(void); extern void set_cache_state(int enabled); extern int get_cache_state(void); extern uae_u32 get_jitted_size(void); #ifdef JIT extern void flush_icache(uaecptr ptr, int n); #endif extern void alloc_cache(void); extern void compile_block(cpu_history* pc_hist, int blocklen, int totcyles); extern int check_for_cache_miss(void); #define scaled_cycles(x) (currprefs.m68k_speed<0?(((x)/SCALE)?(((x)/SCALE= REGALLOC */ #define DECLARE(func) extern void func; extern void do_##func #else #define REGALLOC_O 2000000 #define PEEPHOLE_O 2000000 #define DECLARE(func) extern void func #endif /* What we expose to the outside */ DECLARE(bt_l_ri(R4 r, IMM i)); DECLARE(bt_l_rr(R4 r, R4 b)); DECLARE(btc_l_ri(RW4 r, IMM i)); DECLARE(btc_l_rr(RW4 r, R4 b)); DECLARE(bts_l_ri(RW4 r, IMM i)); DECLARE(bts_l_rr(RW4 r, R4 b)); DECLARE(btr_l_ri(RW4 r, IMM i)); DECLARE(btr_l_rr(RW4 r, R4 b)); DECLARE(mov_l_rm(W4 d, IMM s)); DECLARE(call_r(R4 r)); DECLARE(sub_l_mi(IMM d, IMM s)); DECLARE(mov_l_mi(IMM d, IMM s)); DECLARE(mov_w_mi(IMM d, IMM s)); DECLARE(mov_b_mi(IMM d, IMM s)); DECLARE(rol_b_ri(RW1 r, IMM i)); DECLARE(rol_w_ri(RW2 r, IMM i)); DECLARE(rol_l_ri(RW4 r, IMM i)); DECLARE(rol_l_rr(RW4 d, R1 r)); DECLARE(rol_w_rr(RW2 d, R1 r)); DECLARE(rol_b_rr(RW1 d, R1 r)); DECLARE(shll_l_rr(RW4 d, R1 r)); DECLARE(shll_w_rr(RW2 d, R1 r)); DECLARE(shll_b_rr(RW1 d, R1 r)); DECLARE(ror_b_ri(R1 r, IMM i)); DECLARE(ror_w_ri(R2 r, IMM i)); DECLARE(ror_l_ri(R4 r, IMM i)); DECLARE(ror_l_rr(R4 d, R1 r)); DECLARE(ror_w_rr(R2 d, R1 r)); DECLARE(ror_b_rr(R1 d, R1 r)); DECLARE(shrl_l_rr(RW4 d, R1 r)); DECLARE(shrl_w_rr(RW2 d, R1 r)); DECLARE(shrl_b_rr(RW1 d, R1 r)); DECLARE(shra_l_rr(RW4 d, R1 r)); DECLARE(shra_w_rr(RW2 d, R1 r)); DECLARE(shra_b_rr(RW1 d, R1 r)); DECLARE(shll_l_ri(RW4 r, IMM i)); DECLARE(shll_w_ri(RW2 r, IMM i)); DECLARE(shll_b_ri(RW1 r, IMM i)); DECLARE(shrl_l_ri(RW4 r, IMM i)); DECLARE(shrl_w_ri(RW2 r, IMM i)); DECLARE(shrl_b_ri(RW1 r, IMM i)); DECLARE(shra_l_ri(RW4 r, IMM i)); DECLARE(shra_w_ri(RW2 r, IMM i)); DECLARE(shra_b_ri(RW1 r, IMM i)); DECLARE(setcc(W1 d, IMM cc)); DECLARE(setcc_m(IMM d, IMM cc)); DECLARE(cmov_b_rr(RW1 d, R1 s, IMM cc)); DECLARE(cmov_w_rr(RW2 d, R2 s, IMM cc)); DECLARE(cmov_l_rr(RW4 d, R4 s, IMM cc)); DECLARE(cmov_l_rm(RW4 d, IMM s, IMM cc)); DECLARE(bsf_l_rr(W4 d, R4 s)); DECLARE(pop_m(IMM d)); DECLARE(push_m(IMM d)); DECLARE(pop_l(W4 d)); DECLARE(push_l_i(IMM i)); DECLARE(push_l(R4 s)); DECLARE(clear_16(RW4 r)); DECLARE(clear_8(RW4 r)); DECLARE(sign_extend_16_rr(W4 d, R2 s)); DECLARE(sign_extend_8_rr(W4 d, R1 s)); DECLARE(zero_extend_16_rr(W4 d, R2 s)); DECLARE(zero_extend_8_rr(W4 d, R1 s)); DECLARE(imul_64_32(RW4 d, RW4 s)); DECLARE(mul_64_32(RW4 d, RW4 s)); DECLARE(imul_32_32(RW4 d, R4 s)); DECLARE(mov_b_rr(W1 d, R1 s)); DECLARE(mov_w_rr(W2 d, R2 s)); DECLARE(mov_l_rrm_indexed(W4 d, R4 baser, R4 index)); DECLARE(mov_w_rrm_indexed(W2 d, R4 baser, R4 index)); DECLARE(mov_b_rrm_indexed(W1 d, R4 baser, R4 index)); DECLARE(mov_l_mrr_indexed(R4 baser, R4 index, R4 s)); DECLARE(mov_w_mrr_indexed(R4 baser, R4 index, R2 s)); DECLARE(mov_b_mrr_indexed(R4 baser, R4 index, R1 s)); DECLARE(mov_l_rm_indexed(W4 d, IMM base, R4 index)); DECLARE(mov_l_rR(W4 d, R4 s, IMM offset)); DECLARE(mov_w_rR(W2 d, R4 s, IMM offset)); DECLARE(mov_b_rR(W1 d, R4 s, IMM offset)); DECLARE(mov_l_brR(W4 d, R4 s, IMM offset)); DECLARE(mov_w_brR(W2 d, R4 s, IMM offset)); DECLARE(mov_b_brR(W1 d, R4 s, IMM offset)); DECLARE(mov_l_Ri(R4 d, IMM i, IMM offset)); DECLARE(mov_w_Ri(R4 d, IMM i, IMM offset)); DECLARE(mov_b_Ri(R4 d, IMM i, IMM offset)); DECLARE(mov_l_Rr(R4 d, R4 s, IMM offset)); DECLARE(mov_w_Rr(R4 d, R2 s, IMM offset)); DECLARE(mov_b_Rr(R4 d, R1 s, IMM offset)); DECLARE(lea_l_brr(W4 d, R4 s, IMM offset)); DECLARE(lea_l_brr_indexed(W4 d, R4 s, R4 index, IMM factor, IMM offset)); DECLARE(mov_l_bRr(R4 d, R4 s, IMM offset)); DECLARE(mov_w_bRr(R4 d, R2 s, IMM offset)); DECLARE(mov_b_bRr(R4 d, R1 s, IMM offset)); DECLARE(gen_bswap_32(RW4 r)); DECLARE(gen_bswap_16(RW2 r)); DECLARE(mov_l_rr(W4 d, R4 s)); DECLARE(mov_l_mr(IMM d, R4 s)); DECLARE(mov_w_mr(IMM d, R2 s)); DECLARE(mov_w_rm(W2 d, IMM s)); DECLARE(mov_b_mr(IMM d, R1 s)); DECLARE(mov_b_rm(W1 d, IMM s)); DECLARE(mov_l_ri(W4 d, IMM s)); DECLARE(mov_w_ri(W2 d, IMM s)); DECLARE(mov_b_ri(W1 d, IMM s)); DECLARE(add_l_mi(IMM d, IMM s) ); DECLARE(add_w_mi(IMM d, IMM s) ); DECLARE(add_b_mi(IMM d, IMM s) ); DECLARE(test_l_ri(R4 d, IMM i)); DECLARE(test_l_rr(R4 d, R4 s)); DECLARE(test_w_rr(R2 d, R2 s)); DECLARE(test_b_rr(R1 d, R1 s)); DECLARE(and_l_ri(RW4 d, IMM i)); DECLARE(and_l(RW4 d, R4 s)); DECLARE(and_w(RW2 d, R2 s)); DECLARE(and_b(RW1 d, R1 s)); DECLARE(or_l_ri(RW4 d, IMM i)); DECLARE(or_l(RW4 d, R4 s)); DECLARE(or_w(RW2 d, R2 s)); DECLARE(or_b(RW1 d, R1 s)); DECLARE(adc_l(RW4 d, R4 s)); DECLARE(adc_w(RW2 d, R2 s)); DECLARE(adc_b(RW1 d, R1 s)); DECLARE(add_l(RW4 d, R4 s)); DECLARE(add_w(RW2 d, R2 s)); DECLARE(add_b(RW1 d, R1 s)); DECLARE(sub_l_ri(RW4 d, IMM i)); DECLARE(sub_w_ri(RW2 d, IMM i)); DECLARE(sub_b_ri(RW1 d, IMM i)); DECLARE(add_l_ri(RW4 d, IMM i)); DECLARE(add_w_ri(RW2 d, IMM i)); DECLARE(add_b_ri(RW1 d, IMM i)); DECLARE(sbb_l(RW4 d, R4 s)); DECLARE(sbb_w(RW2 d, R2 s)); DECLARE(sbb_b(RW1 d, R1 s)); DECLARE(sub_l(RW4 d, R4 s)); DECLARE(sub_w(RW2 d, R2 s)); DECLARE(sub_b(RW1 d, R1 s)); DECLARE(cmp_l(R4 d, R4 s)); DECLARE(cmp_l_ri(R4 r, IMM i)); DECLARE(cmp_w(R2 d, R2 s)); DECLARE(cmp_b(R1 d, R1 s)); DECLARE(xor_l(RW4 d, R4 s)); DECLARE(xor_w(RW2 d, R2 s)); DECLARE(xor_b(RW1 d, R1 s)); DECLARE(live_flags(void)); DECLARE(dont_care_flags(void)); DECLARE(duplicate_carry(void)); DECLARE(restore_carry(void)); DECLARE(start_needflags(void)); DECLARE(end_needflags(void)); DECLARE(make_flags_live(void)); DECLARE(call_r_11(R4 r, W4 out1, R4 in1, IMM osize, IMM isize)); DECLARE(call_r_02(R4 r, R4 in1, R4 in2, IMM isize1, IMM isize2)); DECLARE(readmem_new(R4 address, W4 dest, IMM offset, IMM size, W4 tmp)); DECLARE(writemem_new(R4 address, R4 source, IMM offset, IMM size, W4 tmp)); DECLARE(forget_about(W4 r)); DECLARE(nop(void)); DECLARE(f_forget_about(FW r)); DECLARE(fmov_pi(FW r)); DECLARE(fmov_log10_2(FW r)); DECLARE(fmov_log2_e(FW r)); DECLARE(fmov_loge_2(FW r)); DECLARE(fmov_1(FW r)); DECLARE(fmov_0(FW r)); DECLARE(fmov_rm(FW r, MEMR m)); DECLARE(fmov_mr(MEMW m, FR r)); DECLARE(fmovi_rm(FW r, MEMR m)); DECLARE(fmovi_mrb(MEMW m, FR r, double *bounds)); DECLARE(fmovs_rm(FW r, MEMR m)); DECLARE(fmovs_mr(MEMW m, FR r)); DECLARE(fcuts_r(FRW r)); DECLARE(fcut_r(FRW r)); DECLARE(fmovl_ri(FW r, IMMS i)); DECLARE(fmovs_ri(FW r, IMM i)); DECLARE(fmov_ri(FW r, IMM i1, IMM i2)); DECLARE(fmov_ext_ri(FW r, IMM i1, IMM i2, IMM i3)); DECLARE(fmov_ext_mr(MEMW m, FR r)); DECLARE(fmov_ext_rm(FW r, MEMR m)); DECLARE(fmov_rr(FW d, FR s)); DECLARE(fldcw_m_indexed(R4 index, IMM base)); DECLARE(ftst_r(FR r)); DECLARE(dont_care_fflags(void)); DECLARE(fsqrt_rr(FW d, FR s)); DECLARE(fabs_rr(FW d, FR s)); DECLARE(frndint_rr(FW d, FR s)); DECLARE(fgetexp_rr(FW d, FR s)); DECLARE(fgetman_rr(FW d, FR s)); DECLARE(fsin_rr(FW d, FR s)); DECLARE(fcos_rr(FW d, FR s)); DECLARE(ftan_rr(FW d, FR s)); DECLARE(fsincos_rr(FW d, FW c, FR s)); DECLARE(fscale_rr(FRW d, FR s)); DECLARE(ftwotox_rr(FW d, FR s)); DECLARE(fetox_rr(FW d, FR s)); DECLARE(fetoxM1_rr(FW d, FR s)); DECLARE(ftentox_rr(FW d, FR s)); DECLARE(flog2_rr(FW d, FR s)); DECLARE(flogN_rr(FW d, FR s)); DECLARE(flogNP1_rr(FW d, FR s)); DECLARE(flog10_rr(FW d, FR s)); DECLARE(fasin_rr(FW d, FR s)); DECLARE(facos_rr(FW d, FR s)); DECLARE(fatan_rr(FW d, FR s)); DECLARE(fatanh_rr(FW d, FR s)); DECLARE(fsinh_rr(FW d, FR s)); DECLARE(fcosh_rr(FW d, FR s)); DECLARE(ftanh_rr(FW d, FR s)); DECLARE(fneg_rr(FW d, FR s)); DECLARE(fadd_rr(FRW d, FR s)); DECLARE(fsub_rr(FRW d, FR s)); DECLARE(fmul_rr(FRW d, FR s)); DECLARE(frem_rr(FRW d, FR s)); DECLARE(frem1_rr(FRW d, FR s)); DECLARE(fdiv_rr(FRW d, FR s)); DECLARE(fcmp_rr(FR d, FR s)); DECLARE(fflags_into_flags(W2 tmp)); extern int failure; #define FAIL(x) do { failure|=x; } while (0) /* Convenience functions exposed to gencomp */ extern uae_u32 m68k_pc_offset; extern void readbyte(int address, int dest, int tmp); extern void readword(int address, int dest, int tmp); extern void readlong(int address, int dest, int tmp); extern void writebyte(int address, int source, int tmp); extern void writeword(int address, int source, int tmp); extern void writelong(int address, int source, int tmp); extern void writeword_clobber(int address, int source, int tmp); extern void writelong_clobber(int address, int source, int tmp); extern void get_n_addr(int address, int dest, int tmp); extern void get_n_addr_jmp(int address, int dest, int tmp); extern void calc_disp_ea_020(int base, uae_u32 dp, int target, int tmp); extern int kill_rodent(int r); extern void sync_m68k_pc(void); extern uae_u32 get_const(int r); extern int is_const(int r); extern void register_branch(uae_u32 not_taken, uae_u32 taken, uae_u8 cond); extern void empty_optimizer(void); #define comp_get_ibyte(o) do_get_mem_byte((uae_u8 *)(comp_pc_p + (o) + 1)) #define comp_get_iword(o) do_get_mem_word((uae_u16 *)(comp_pc_p + (o))) #define comp_get_ilong(o) do_get_mem_long((uae_u32 *)(comp_pc_p + (o))) struct blockinfo_t; typedef struct dep_t { uae_u32* jmp_off; struct blockinfo_t* target; struct dep_t** prev_p; struct dep_t* next; } dependency; typedef struct blockinfo_t { uae_s32 count; cpuop_func* direct_handler_to_use; cpuop_func* handler_to_use; /* The direct handler does not check for the correct address */ cpuop_func* handler; cpuop_func* direct_handler; cpuop_func* direct_pen; cpuop_func* direct_pcc; uae_u8* nexthandler; uae_u8* pc_p; uae_u32 c1; uae_u32 c2; uae_u32 len; struct blockinfo_t* next_same_cl; struct blockinfo_t** prev_same_cl_p; struct blockinfo_t* next; struct blockinfo_t** prev_p; uae_u32 min_pcp; uae_u8 optlevel; uae_u8 needed_flags; uae_u8 status; uae_u8 havestate; dependency dep[2]; /* Holds things we depend on */ dependency* deplist; /* List of things that depend on this */ smallstate env; } blockinfo; #define BI_NEW 0 #define BI_COUNTING 1 #define BI_TARGETTED 2 typedef struct { uae_u8 type; uae_u8 reg; uae_u32 next; } regacc; void execute_normal(void); void exec_nostats(void); void do_nothing(void); void comp_fdbcc_opp (uae_u32 opcode, uae_u16 extra); void comp_fscc_opp (uae_u32 opcode, uae_u16 extra); void comp_ftrapcc_opp (uae_u32 opcode, uaecptr oldpc); void comp_fbcc_opp (uae_u32 opcode); void comp_fsave_opp (uae_u32 opcode); void comp_frestore_opp (uae_u32 opcode); void comp_fpp_opp (uae_u32 opcode, uae_u16 extra); fs-uae-2.2.3+dfsg/src/jit/gencomp.cpp0000644000175000017500000025070012162366654017571 0ustar glaubitzglaubitz/* * UAE - The Un*x Amiga Emulator * * MC68000 compilation generator * * Based on work Copyright 1995, 1996 Bernd Schmidt. Changes Copyright 2000 * Bernd Meyer */ #include "sysconfig.h" #include "sysdeps.h" #include #include "readcpu.h" #include #include #define BOOL_TYPE "int" #define failure global_failure=1 #define FAILURE global_failure=1 #define isjump global_isjump=1 #define is_const_jump global_iscjump=1; #define isaddx global_isaddx=1 #define uses_cmov global_cmov=1 #define mayfail global_mayfail=1 int hack_opcode; static int global_failure; static int global_isjump; static int global_iscjump; static int global_isaddx; static int global_cmov; static int long_opcode; static int global_mayfail; static char endstr[1000]; static char lines[100000]; static int comp_index=0; static int cond_codes_x86[]={-1,-1,7,6,3,2,5,4,-1,-1,9,8,13,12,15,14}; static void comprintf(const char* format, ...) { va_list args; va_start(args,format); comp_index+=vsprintf(lines+comp_index,format,args); } static void com_discard(void) { comp_index=0; } static void com_flush(void) { int i; for (i=0;i 0); n_braces--; comprintf ("}"); } static void finish_braces (void) { while (n_braces > 0) close_brace (); } static void pop_braces (int to) { while (n_braces > to) close_brace (); } static int bit_size (int size) { switch (size) { case sz_byte: return 8; case sz_word: return 16; case sz_long: return 32; default: abort (); } return 0; } static const char * bit_mask (int size) { switch (size) { case sz_byte: return "0xff"; case sz_word: return "0xffff"; case sz_long: return "0xffffffff"; default: abort (); } return 0; } static __inline__ void gen_update_next_handler(void) { return; /* Can anything clever be done here? */ } static void gen_writebyte (char* address, char* source) { comprintf("\twritebyte(%s,%s,scratchie);\n",address,source); } static void gen_writeword (char* address, char* source) { comprintf("\twriteword(%s,%s,scratchie);\n",address,source); } static void gen_writelong (char* address, char* source) { comprintf("\twritelong(%s,%s,scratchie);\n",address,source); } static void gen_readbyte (char* address, char* dest) { comprintf("\treadbyte(%s,%s,scratchie);\n",address,dest); } static void gen_readword (char* address, char* dest) { comprintf("\treadword(%s,%s,scratchie);\n",address,dest); } static void gen_readlong (char* address, char* dest) { comprintf("\treadlong(%s,%s,scratchie);\n",address,dest); } static const char * gen_nextilong (void) { static char buffer[80]; sprintf (buffer, "comp_get_ilong((m68k_pc_offset+=4)-4)"); insn_n_cycles += 4; long_opcode=1; return buffer; } static const char * gen_nextiword (void) { static char buffer[80]; sprintf (buffer, "comp_get_iword((m68k_pc_offset+=2)-2)"); insn_n_cycles+=2; long_opcode=1; return buffer; } static const char * gen_nextibyte (void) { static char buffer[80]; sprintf (buffer, "comp_get_ibyte((m68k_pc_offset+=2)-2)"); insn_n_cycles += 2; long_opcode=1; return buffer; } static void sync_m68k_pc (void) { comprintf("\t if (m68k_pc_offset>100) sync_m68k_pc();\n"); } /* getv == 1: fetch data; getv != 0: check for odd address. If movem != 0, * the calling routine handles Apdi and Aipi modes. */ static void genamode (amodes mode, char *reg, wordsizes size, char *name, int getv, int movem) { start_brace (); switch (mode) { case Dreg: /* Do we need to check dodgy here? */ if (movem) abort (); if (getv == 1 || getv==2) { /* We generate the variable even for getv==2, so we can use it as a destination for MOVE */ comprintf ("\tint %s=%s;\n",name,reg); } return; case Areg: if (movem) abort (); if (getv == 1 || getv==2) { /* see above */ comprintf ("\tint %s=dodgy?scratchie++:%s+8;\n",name,reg); if (getv==1) { comprintf ("\tif (dodgy) \n"); comprintf ("\t\tmov_l_rr(%s,%s+8);\n",name, reg); } } return; case Aind: comprintf ("\tint %sa=dodgy?scratchie++:%s+8;\n",name,reg); comprintf ("\tif (dodgy) \n"); comprintf ("\t\tmov_l_rr(%sa,%s+8);\n",name, reg); break; case Aipi: comprintf ("\tint %sa=scratchie++;\n",name,reg); comprintf ("\tmov_l_rr(%sa,%s+8);\n",name, reg); break; case Apdi: switch (size) { case sz_byte: if (movem) { comprintf ("\tint %sa=dodgy?scratchie++:%s+8;\n",name,reg); comprintf ("\tif (dodgy) \n"); comprintf("\tmov_l_rr(%sa,8+%s);\n",name,reg); } else { start_brace(); comprintf ("\tint %sa=dodgy?scratchie++:%s+8;\n",name,reg); comprintf("\tlea_l_brr(%s+8,%s+8,(uae_s32)-areg_byteinc[%s]);\n",reg,reg,reg); comprintf ("\tif (dodgy) \n"); comprintf("\tmov_l_rr(%sa,8+%s);\n",name,reg); } break; case sz_word: if (movem) { comprintf ("\tint %sa=dodgy?scratchie++:%s+8;\n",name,reg); comprintf ("\tif (dodgy) \n"); comprintf("\tmov_l_rr(%sa,8+%s);\n",name,reg); } else { start_brace(); comprintf ("\tint %sa=dodgy?scratchie++:%s+8;\n",name,reg); comprintf("\tlea_l_brr(%s+8,%s+8,-2);\n",reg,reg); comprintf ("\tif (dodgy) \n"); comprintf("\tmov_l_rr(%sa,8+%s);\n",name,reg); } break; case sz_long: if (movem) { comprintf ("\tint %sa=dodgy?scratchie++:%s+8;\n",name,reg); comprintf ("\tif (dodgy) \n"); comprintf("\tmov_l_rr(%sa,8+%s);\n",name,reg); } else { start_brace(); comprintf ("\tint %sa=dodgy?scratchie++:%s+8;\n",name,reg); comprintf("\tlea_l_brr(%s+8,%s+8,-4);\n",reg,reg); comprintf ("\tif (dodgy) \n"); comprintf("\tmov_l_rr(%sa,8+%s);\n",name,reg); } break; default: abort (); } break; case Ad16: comprintf("\tint %sa=scratchie++;\n",name); comprintf("\tmov_l_rr(%sa,8+%s);\n",name,reg); comprintf("\tlea_l_brr(%sa,%sa,(uae_s32)(uae_s16)%s);\n",name,name,gen_nextiword()); break; case Ad8r: comprintf("\tint %sa=scratchie++;\n",name); comprintf("\tcalc_disp_ea_020(%s+8,%s,%sa,scratchie);\n", reg,gen_nextiword(),name); break; case PC16: comprintf("\tint %sa=scratchie++;\n",name); comprintf("\tuae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset;\n"); comprintf ("\tuae_s32 PC16off = (uae_s32)(uae_s16)%s;\n", gen_nextiword ()); comprintf("\tmov_l_ri(%sa,address+PC16off);\n",name); break; case PC8r: comprintf("\tint pctmp=scratchie++;\n"); comprintf("\tint %sa=scratchie++;\n",name); comprintf("\tuae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset;\n"); start_brace(); comprintf("\tmov_l_ri(pctmp,address);\n"); comprintf("\tcalc_disp_ea_020(pctmp,%s,%sa,scratchie);\n", gen_nextiword(),name); break; case absw: comprintf ("\tint %sa = scratchie++;\n",name); comprintf ("\tmov_l_ri(%sa,(uae_s32)(uae_s16)%s);\n", name, gen_nextiword ()); break; case absl: comprintf ("\tint %sa = scratchie++;\n",name); comprintf ("\tmov_l_ri(%sa,%s); /* absl */\n", name, gen_nextilong ()); break; case imm: if (getv != 1) abort (); switch (size) { case sz_byte: comprintf ("\tint %s = scratchie++;\n",name); comprintf ("\tmov_l_ri(%s,(uae_s32)(uae_s8)%s);\n", name, gen_nextibyte ()); break; case sz_word: comprintf ("\tint %s = scratchie++;\n",name); comprintf ("\tmov_l_ri(%s,(uae_s32)(uae_s16)%s);\n", name, gen_nextiword ()); break; case sz_long: comprintf ("\tint %s = scratchie++;\n",name); comprintf ("\tmov_l_ri(%s,%s);\n", name, gen_nextilong ()); break; default: abort (); } return; case imm0: if (getv != 1) abort (); comprintf ("\tint %s = scratchie++;\n",name); comprintf ("\tmov_l_ri(%s,(uae_s32)(uae_s8)%s);\n", name, gen_nextibyte ()); return; case imm1: if (getv != 1) abort (); comprintf ("\tint %s = scratchie++;\n",name); comprintf ("\tmov_l_ri(%s,(uae_s32)(uae_s16)%s);\n", name, gen_nextiword ()); return; case imm2: if (getv != 1) abort (); comprintf ("\tint %s = scratchie++;\n",name); comprintf ("\tmov_l_ri(%s,%s);\n", name, gen_nextilong ()); return; case immi: if (getv != 1) abort (); comprintf ("\tint %s = scratchie++;\n",name); comprintf ("\tmov_l_ri(%s,%s);\n", name, reg); return; default: abort (); } /* We get here for all non-reg non-immediate addressing modes to * actually fetch the value. */ if (getv == 1) { char astring[80]; sprintf(astring,"%sa",name); switch (size) { case sz_byte: insn_n_cycles += 2; break; case sz_word: insn_n_cycles += 2; break; case sz_long: insn_n_cycles += 4; break; default: abort (); } start_brace (); comprintf("\tint %s=scratchie++;\n",name); switch (size) { case sz_byte: gen_readbyte(astring,name); break; case sz_word: gen_readword(astring,name); break; case sz_long: gen_readlong(astring,name); break; default: abort (); } } /* We now might have to fix up the register for pre-dec or post-inc * addressing modes. */ if (!movem) { switch (mode) { case Aipi: switch (size) { case sz_byte: comprintf("\tlea_l_brr(%s+8,%s+8,areg_byteinc[%s]);\n",reg,reg,reg); break; case sz_word: comprintf("\tlea_l_brr(%s+8,%s+8,2);\n",reg,reg,reg); break; case sz_long: comprintf("\tlea_l_brr(%s+8,%s+8,4);\n",reg,reg); break; default: abort (); } break; case Apdi: break; default: break; } } } static void genastore (char *from, amodes mode, char *reg, wordsizes size, char *to) { switch (mode) { case Dreg: switch (size) { case sz_byte: comprintf("\tif(%s!=%s)\n",reg,from); comprintf ("\t\tmov_b_rr(%s,%s);\n", reg, from); break; case sz_word: comprintf("\tif(%s!=%s)\n",reg,from); comprintf ("\t\tmov_w_rr(%s,%s);\n", reg, from); break; case sz_long: comprintf("\tif(%s!=%s)\n",reg,from); comprintf ("\t\tmov_l_rr(%s,%s);\n", reg, from); break; default: abort (); } break; case Areg: switch (size) { case sz_word: comprintf("\tif(%s+8!=%s)\n",reg,from); comprintf ("\t\tmov_w_rr(%s+8,%s);\n", reg, from); break; case sz_long: comprintf("\tif(%s+8!=%s)\n",reg,from); comprintf ("\t\tmov_l_rr(%s+8,%s);\n", reg, from); break; default: abort (); } break; case Apdi: case absw: case PC16: case PC8r: case Ad16: case Ad8r: case Aipi: case Aind: case absl: { char astring[80]; sprintf(astring,"%sa",to); switch (size) { case sz_byte: insn_n_cycles += 2; gen_writebyte(astring,from); break; case sz_word: insn_n_cycles += 2; gen_writeword(astring,from); break; case sz_long: insn_n_cycles += 4; gen_writelong(astring,from); break; default: abort (); } } break; case imm: case imm0: case imm1: case imm2: case immi: abort (); break; default: abort (); } } static void genmov16(uae_u32 opcode, struct instr *curi) { comprintf("\tint src=scratchie++;\n"); comprintf("\tint dst=scratchie++;\n"); if ((opcode & 0xfff8) == 0xf620) { /* MOVE16 (Ax)+,(Ay)+ */ comprintf("\tuae_u16 dstreg=((%s)>>12)&0x07;\n", gen_nextiword()); comprintf("\tmov_l_rr(src,8+srcreg);\n"); comprintf("\tmov_l_rr(dst,8+dstreg);\n"); } else { /* Other variants */ genamode (curi->smode, "srcreg", curi->size, "src", 0, 2); genamode (curi->dmode, "dstreg", curi->size, "dst", 0, 2); comprintf("\tmov_l_rr(src,srca);\n"); comprintf("\tmov_l_rr(dst,dsta);\n"); } /* Align on 16-byte boundaries */ comprintf("\tand_l_ri(src,~15);\n"); comprintf("\tand_l_ri(dst,~15);\n"); if ((opcode & 0xfff8) == 0xf620) { comprintf("\tif (srcreg != dstreg)\n"); comprintf("\tadd_l_ri(srcreg+8,16);\n"); comprintf("\tadd_l_ri(dstreg+8,16);\n"); } else if ((opcode & 0xfff8) == 0xf600) comprintf("\tadd_l_ri(srcreg+8,16);\n"); else if ((opcode & 0xfff8) == 0xf608) comprintf("\tadd_l_ri(dstreg+8,16);\n"); comprintf("\tif (special_mem) {\n"); comprintf("\t\tint tmp=scratchie;\n"); comprintf("\tscratchie+=4;\n" "\treadlong(src,tmp,scratchie);\n" "\twritelong_clobber(dst,tmp,scratchie);\n" "\tadd_l_ri(src,4);\n" "\tadd_l_ri(dst,4);\n" "\treadlong(src,tmp,scratchie);\n" "\twritelong_clobber(dst,tmp,scratchie);\n" "\tadd_l_ri(src,4);\n" "\tadd_l_ri(dst,4);\n" "\treadlong(src,tmp,scratchie);\n" "\twritelong_clobber(dst,tmp,scratchie);\n" "\tadd_l_ri(src,4);\n" "\tadd_l_ri(dst,4);\n" "\treadlong(src,tmp,scratchie);\n" "\twritelong_clobber(dst,tmp,scratchie);\n"); comprintf("\t} else {\n"); comprintf("\t\tint tmp=scratchie;\n"); comprintf("\tscratchie+=4;\n"); comprintf("\tget_n_addr(src,src,scratchie);\n" "\tget_n_addr(dst,dst,scratchie);\n" "\tmov_l_rR(tmp+0,src,0);\n" "\tmov_l_rR(tmp+1,src,4);\n" "\tmov_l_rR(tmp+2,src,8);\n" "\tmov_l_rR(tmp+3,src,12);\n" "\tmov_l_Rr(dst,tmp+0,0);\n" "\tforget_about(tmp+0);\n" "\tmov_l_Rr(dst,tmp+1,4);\n" "\tforget_about(tmp+1);\n" "\tmov_l_Rr(dst,tmp+2,8);\n" "\tforget_about(tmp+2);\n" "\tmov_l_Rr(dst,tmp+3,12);\t}\n"); } #if 0 static void genmov16(void) { comprintf("\tint src=scratchie++;\n" "\tuae_u16 dstreg=((%s)>>12)&0x07;\n",gen_nextiword()); comprintf("\tint dst=scratchie++;\n" "\tint tmp=scratchie;\n" "\tscratchie+=4;\n" "\tmov_l_rr(src,8+srcreg);\n" "\tand_l_ri(src,~15);\n" "\tmov_l_rr(dst,8+dstreg);\n" "\tand_l_ri(dst,~15);\n" "\tadd_l_ri(srcreg+8,16);\n" "\tadd_l_ri(dstreg+8,16);\n"); comprintf("\tif (special_mem) {\n" "\treadlong(src,tmp,scratchie);\n" "\twritelong_clobber(dst,tmp,scratchie);\n" "\tadd_l_ri(src,4);\n" "\tadd_l_ri(dst,4);\n" "\treadlong(src,tmp,scratchie);\n" "\twritelong_clobber(dst,tmp,scratchie);\n" "\tadd_l_ri(src,4);\n" "\tadd_l_ri(dst,4);\n" "\treadlong(src,tmp,scratchie);\n" "\twritelong_clobber(dst,tmp,scratchie);\n" "\tadd_l_ri(src,4);\n" "\tadd_l_ri(dst,4);\n" "\treadlong(src,tmp,scratchie);\n" "\twritelong_clobber(dst,tmp,scratchie);\n"); comprintf("\t} else {\n"); comprintf("\tget_n_addr(src,src,scratchie);\n" "\tget_n_addr(dst,dst,scratchie);\n" "\tmov_l_rR(tmp+0,src,0);\n" "\tmov_l_rR(tmp+1,src,4);\n" "\tmov_l_rR(tmp+2,src,8);\n" "\tmov_l_rR(tmp+3,src,12);\n" "\tmov_l_Rr(dst,tmp+0,0);\n" "\tforget_about(tmp+0);\n" "\tmov_l_Rr(dst,tmp+1,4);\n" "\tforget_about(tmp+1);\n" "\tmov_l_Rr(dst,tmp+2,8);\n" "\tforget_about(tmp+2);\n" "\tmov_l_Rr(dst,tmp+3,12);\n" "\t}\n"); } #endif static void genmovemel (uae_u16 opcode) { comprintf ("\tuae_u16 mask = %s;\n", gen_nextiword ()); comprintf ("\tint native=scratchie++;\n"); comprintf ("\tint i;\n"); comprintf ("\tint offset=0;\n"); genamode (table68k[opcode].dmode, "dstreg", table68k[opcode].size, "src", 2, 1); comprintf("\tif (1 && !special_mem) {\n"); /* Fast but unsafe... */ comprintf("\tget_n_addr(srca,native,scratchie);\n"); comprintf("\tfor (i=0;i<16;i++) {\n" "\t\tif ((mask>>i)&1) {\n"); switch(table68k[opcode].size) { case sz_long: comprintf("\t\t\tmov_l_rR(i,native,offset);\n" "\t\t\tgen_bswap_32(i);\n" "\t\t\toffset+=4;\n"); break; case sz_word: comprintf("\t\t\tmov_w_rR(i,native,offset);\n" "\t\t\tgen_bswap_16(i);\n" "\t\t\tsign_extend_16_rr(i,i);\n" "\t\t\toffset+=2;\n"); break; default: abort(); } comprintf("\t\t}\n" "\t}"); if (table68k[opcode].dmode == Aipi) { comprintf("\t\t\tlea_l_brr(8+dstreg,srca,offset);\n"); } /* End fast but unsafe. */ comprintf("\t} else {\n"); comprintf ("\tint tmp=scratchie++;\n"); comprintf("\tmov_l_rr(tmp,srca);\n"); comprintf("\tfor (i=0;i<16;i++) {\n" "\t\tif ((mask>>i)&1) {\n"); switch(table68k[opcode].size) { case sz_long: comprintf("\t\t\treadlong(tmp,i,scratchie);\n" "\t\t\tadd_l_ri(tmp,4);\n"); break; case sz_word: comprintf("\t\t\treadword(tmp,i,scratchie);\n" "\t\t\tadd_l_ri(tmp,2);\n"); break; default: abort(); } comprintf("\t\t}\n" "\t}"); if (table68k[opcode].dmode == Aipi) { comprintf("\t\t\tmov_l_rr(8+dstreg,tmp);\n"); } comprintf("\t}\n"); } static void genmovemle (uae_u16 opcode) { comprintf ("\tuae_u16 mask = %s;\n", gen_nextiword ()); comprintf ("\tint native=scratchie++;\n"); comprintf ("\tint i;\n"); comprintf ("\tint tmp=scratchie++;\n"); comprintf ("\tsigned char offset=0;\n"); genamode (table68k[opcode].dmode, "dstreg", table68k[opcode].size, "src", 2, 1); /* *Sigh* Some clever geek realized that the fastest way to copy a buffer from main memory to the gfx card is by using movmle. Good on her, but unfortunately, gfx mem isn't "real" mem, and thus that act of cleverness means that movmle must pay attention to special_mem, or Genetic Species is a rather boring-looking game ;-) */ comprintf("\tif (1 && !special_mem) {\n"); comprintf("\tget_n_addr(srca,native,scratchie);\n"); if (table68k[opcode].dmode!=Apdi) { comprintf("\tfor (i=0;i<16;i++) {\n" "\t\tif ((mask>>i)&1) {\n"); switch(table68k[opcode].size) { case sz_long: comprintf("\t\t\tmov_l_rr(tmp,i);\n" "\t\t\tgen_bswap_32(tmp);\n" "\t\t\tmov_l_Rr(native,tmp,offset);\n" "\t\t\toffset+=4;\n"); break; case sz_word: comprintf("\t\t\tmov_l_rr(tmp,i);\n" "\t\t\tgen_bswap_16(tmp);\n" "\t\t\tmov_w_Rr(native,tmp,offset);\n" "\t\t\toffset+=2;\n"); break; default: abort(); } } else { /* Pre-decrement */ comprintf("\tfor (i=0;i<16;i++) {\n" "\t\tif ((mask>>i)&1) {\n"); switch(table68k[opcode].size) { case sz_long: comprintf("\t\t\toffset-=4;\n" "\t\t\tmov_l_rr(tmp,15-i);\n" "\t\t\tgen_bswap_32(tmp);\n" "\t\t\tmov_l_Rr(native,tmp,offset);\n" ); break; case sz_word: comprintf("\t\t\toffset-=2;\n" "\t\t\tmov_l_rr(tmp,15-i);\n" "\t\t\tgen_bswap_16(tmp);\n" "\t\t\tmov_w_Rr(native,tmp,offset);\n" ); break; default: abort(); } } comprintf("\t\t}\n" "\t}"); if (table68k[opcode].dmode == Apdi) { comprintf("\t\t\tlea_l_brr(8+dstreg,srca,(uae_s32)offset);\n"); } comprintf("\t} else {\n"); if (table68k[opcode].dmode!=Apdi) { comprintf("\tmov_l_rr(tmp,srca);\n"); comprintf("\tfor (i=0;i<16;i++) {\n" "\t\tif ((mask>>i)&1) {\n"); switch(table68k[opcode].size) { case sz_long: comprintf("\t\t\twritelong(tmp,i,scratchie);\n" "\t\t\tadd_l_ri(tmp,4);\n"); break; case sz_word: comprintf("\t\t\twriteword(tmp,i,scratchie);\n" "\t\t\tadd_l_ri(tmp,2);\n"); break; default: abort(); } } else { /* Pre-decrement */ comprintf("\tfor (i=0;i<16;i++) {\n" "\t\tif ((mask>>i)&1) {\n"); switch(table68k[opcode].size) { case sz_long: comprintf("\t\t\tsub_l_ri(srca,4);\n" "\t\t\twritelong(srca,15-i,scratchie);\n"); break; case sz_word: comprintf("\t\t\tsub_l_ri(srca,2);\n" "\t\t\twriteword(srca,15-i,scratchie);\n"); break; default: abort(); } } comprintf("\t\t}\n" "\t}"); if (table68k[opcode].dmode == Apdi) { comprintf("\t\t\tmov_l_rr(8+dstreg,srca);\n"); } comprintf("\t}\n"); } static void duplicate_carry (void) { comprintf ("\tif (needed_flags&FLAG_X) duplicate_carry();\n"); } typedef enum { flag_logical_noclobber, flag_logical, flag_add, flag_sub, flag_cmp, flag_addx, flag_subx, flag_zn, flag_av, flag_sv, flag_and, flag_or, flag_eor, flag_mov } flagtypes; static void genflags (flagtypes type, wordsizes size, char *value, char *src, char *dst) { if (noflags) { switch(type) { case flag_cmp: comprintf("\tdont_care_flags();\n"); comprintf("/* Weird --- CMP with noflags ;-) */\n"); return; case flag_add: case flag_sub: comprintf("\tdont_care_flags();\n"); { char* op; switch(type) { case flag_add: op="add"; break; case flag_sub: op="sub"; break; default: abort(); } switch (size) { case sz_byte: comprintf("\t%s_b(%s,%s);\n",op,dst,src); break; case sz_word: comprintf("\t%s_w(%s,%s);\n",op,dst,src); break; case sz_long: comprintf("\t%s_l(%s,%s);\n",op,dst,src); break; } return; } break; case flag_and: comprintf("\tdont_care_flags();\n"); switch (size) { case sz_byte: comprintf("if (kill_rodent(dst)) {\n"); comprintf("\tzero_extend_8_rr(scratchie,%s);\n",src); comprintf("\tor_l_ri(scratchie,0xffffff00);\n"); comprintf("\tand_l(%s,scratchie);\n",dst); comprintf("\tforget_about(scratchie);\n"); comprintf("\t} else \n" "\tand_b(%s,%s);\n",dst,src); break; case sz_word: comprintf("if (kill_rodent(dst)) {\n"); comprintf("\tzero_extend_16_rr(scratchie,%s);\n",src); comprintf("\tor_l_ri(scratchie,0xffff0000);\n"); comprintf("\tand_l(%s,scratchie);\n",dst); comprintf("\tforget_about(scratchie);\n"); comprintf("\t} else \n" "\tand_w(%s,%s);\n",dst,src); break; case sz_long: comprintf("\tand_l(%s,%s);\n",dst,src); break; } return; case flag_mov: comprintf("\tdont_care_flags();\n"); switch (size) { case sz_byte: comprintf("if (kill_rodent(dst)) {\n"); comprintf("\tzero_extend_8_rr(scratchie,%s);\n",src); comprintf("\tand_l_ri(%s,0xffffff00);\n",dst); comprintf("\tor_l(%s,scratchie);\n",dst); comprintf("\tforget_about(scratchie);\n"); comprintf("\t} else \n" "\tmov_b_rr(%s,%s);\n",dst,src); break; case sz_word: comprintf("if (kill_rodent(dst)) {\n"); comprintf("\tzero_extend_16_rr(scratchie,%s);\n",src); comprintf("\tand_l_ri(%s,0xffff0000);\n",dst); comprintf("\tor_l(%s,scratchie);\n",dst); comprintf("\tforget_about(scratchie);\n"); comprintf("\t} else \n" "\tmov_w_rr(%s,%s);\n",dst,src); break; case sz_long: comprintf("\tmov_l_rr(%s,%s);\n",dst,src); break; } return; case flag_or: case flag_eor: comprintf("\tdont_care_flags();\n"); start_brace(); { char* op; switch(type) { case flag_or: op="or"; break; case flag_eor: op="xor"; break; default: abort(); } switch (size) { case sz_byte: comprintf("if (kill_rodent(dst)) {\n"); comprintf("\tzero_extend_8_rr(scratchie,%s);\n",src); comprintf("\t%s_l(%s,scratchie);\n",op,dst); comprintf("\tforget_about(scratchie);\n"); comprintf("\t} else \n" "\t%s_b(%s,%s);\n",op,dst,src); break; case sz_word: comprintf("if (kill_rodent(dst)) {\n"); comprintf("\tzero_extend_16_rr(scratchie,%s);\n",src); comprintf("\t%s_l(%s,scratchie);\n",op,dst); comprintf("\tforget_about(scratchie);\n"); comprintf("\t} else \n" "\t%s_w(%s,%s);\n",op,dst,src); break; case sz_long: comprintf("\t%s_l(%s,%s);\n",op,dst,src); break; } close_brace(); return; } case flag_addx: case flag_subx: comprintf("\tdont_care_flags();\n"); { char* op; switch(type) { case flag_addx: op="adc"; break; case flag_subx: op="sbb"; break; default: abort(); } comprintf("\trestore_carry();\n"); /* Reload the X flag into C */ switch (size) { case sz_byte: comprintf("\t%s_b(%s,%s);\n",op,dst,src); break; case sz_word: comprintf("\t%s_w(%s,%s);\n",op,dst,src); break; case sz_long: comprintf("\t%s_l(%s,%s);\n",op,dst,src); break; } return; } break; default: return; } } /* Need the flags, but possibly not all of them */ switch (type) { case flag_logical_noclobber: failure; case flag_and: case flag_or: case flag_eor: comprintf("\tdont_care_flags();\n"); start_brace(); { char* op; switch(type) { case flag_and: op="and"; break; case flag_or: op="or"; break; case flag_eor: op="xor"; break; default: abort(); } switch (size) { case sz_byte: comprintf("\tstart_needflags();\n" "\t%s_b(%s,%s);\n",op,dst,src); break; case sz_word: comprintf("\tstart_needflags();\n" "\t%s_w(%s,%s);\n",op,dst,src); break; case sz_long: comprintf("\tstart_needflags();\n" "\t%s_l(%s,%s);\n",op,dst,src); break; } comprintf("\tlive_flags();\n"); comprintf("\tend_needflags();\n"); close_brace(); return; } case flag_mov: comprintf("\tdont_care_flags();\n"); start_brace(); { switch (size) { case sz_byte: comprintf("\tif (%s!=%s) {\n",src,dst); comprintf("\tmov_b_ri(%s,0);\n" "\tstart_needflags();\n",dst); comprintf("\tor_b(%s,%s);\n",dst,src); comprintf("\t} else {\n"); comprintf("\tmov_b_rr(%s,%s);\n",dst,src); comprintf("\ttest_b_rr(%s,%s);\n",dst,dst); comprintf("\t}\n"); break; case sz_word: comprintf("\tif (%s!=%s) {\n",src,dst); comprintf("\tmov_w_ri(%s,0);\n" "\tstart_needflags();\n",dst); comprintf("\tor_w(%s,%s);\n",dst,src); comprintf("\t} else {\n"); comprintf("\tmov_w_rr(%s,%s);\n",dst,src); comprintf("\ttest_w_rr(%s,%s);\n",dst,dst); comprintf("\t}\n"); break; case sz_long: comprintf("\tif (%s!=%s) {\n",src,dst); comprintf("\tmov_l_ri(%s,0);\n" "\tstart_needflags();\n",dst); comprintf("\tor_l(%s,%s);\n",dst,src); comprintf("\t} else {\n"); comprintf("\tmov_l_rr(%s,%s);\n",dst,src); comprintf("\ttest_l_rr(%s,%s);\n",dst,dst); comprintf("\t}\n"); break; } comprintf("\tlive_flags();\n"); comprintf("\tend_needflags();\n"); close_brace(); return; } case flag_logical: comprintf("\tdont_care_flags();\n"); start_brace(); switch (size) { case sz_byte: comprintf("\tstart_needflags();\n" "\ttest_b_rr(%s,%s);\n",value,value); break; case sz_word: comprintf("\tstart_needflags();\n" "\ttest_w_rr(%s,%s);\n",value,value); break; case sz_long: comprintf("\tstart_needflags();\n" "\ttest_l_rr(%s,%s);\n",value,value); break; } comprintf("\tlive_flags();\n"); comprintf("\tend_needflags();\n"); close_brace(); return; case flag_add: case flag_sub: case flag_cmp: comprintf("\tdont_care_flags();\n"); { char* op; switch(type) { case flag_add: op="add"; break; case flag_sub: op="sub"; break; case flag_cmp: op="cmp"; break; default: abort(); } switch (size) { case sz_byte: comprintf("\tstart_needflags();\n" "\t%s_b(%s,%s);\n",op,dst,src); break; case sz_word: comprintf("\tstart_needflags();\n" "\t%s_w(%s,%s);\n",op,dst,src); break; case sz_long: comprintf("\tstart_needflags();\n" "\t%s_l(%s,%s);\n",op,dst,src); break; } comprintf("\tlive_flags();\n"); comprintf("\tend_needflags();\n"); if (type!=flag_cmp) { duplicate_carry(); } comprintf("if (!(needed_flags & FLAG_CZNV)) dont_care_flags();\n"); return; } case flag_addx: case flag_subx: uses_cmov; comprintf("\tdont_care_flags();\n"); { char* op; switch(type) { case flag_addx: op="adc"; break; case flag_subx: op="sbb"; break; default: abort(); } start_brace(); comprintf("\tint zero=scratchie++;\n" "\tint one=scratchie++;\n" "\tif (needed_flags&FLAG_Z) {\n" "\tmov_l_ri(zero,0);\n" "\tmov_l_ri(one,1);\n" "\tmake_flags_live();\n" "\tcmov_l_rr(zero,one,5);\n" "\t}\n"); comprintf("\trestore_carry();\n"); /* Reload the X flag into C */ switch (size) { case sz_byte: comprintf("\tstart_needflags();\n" "\t%s_b(%s,%s);\n",op,dst,src); break; case sz_word: comprintf("\tstart_needflags();\n" "\t%s_w(%s,%s);\n",op,dst,src); break; case sz_long: comprintf("\tstart_needflags();\n" "\t%s_l(%s,%s);\n",op,dst,src); break; } comprintf("\tlive_flags();\n"); comprintf("\tif (needed_flags&FLAG_Z) {\n" "\tcmov_l_rr(zero,one,5);\n" "\tsetzflg_l(zero);\n" "\tlive_flags();\n" "\t}\n"); comprintf("\tend_needflags();\n"); duplicate_carry(); comprintf("if (!(needed_flags & FLAG_CZNV)) dont_care_flags();\n"); return; } default: failure; break; } } static void force_range_for_rox (const char *var, wordsizes size) { /* Could do a modulo operation here... which one is faster? */ switch (size) { case sz_long: comprintf ("\tif (%s >= 33) %s -= 33;\n", var, var); break; case sz_word: comprintf ("\tif (%s >= 34) %s -= 34;\n", var, var); comprintf ("\tif (%s >= 17) %s -= 17;\n", var, var); break; case sz_byte: comprintf ("\tif (%s >= 36) %s -= 36;\n", var, var); comprintf ("\tif (%s >= 18) %s -= 18;\n", var, var); comprintf ("\tif (%s >= 9) %s -= 9;\n", var, var); break; } } static const char * cmask (wordsizes size) { switch (size) { case sz_byte: return "0x80"; case sz_word: return "0x8000"; case sz_long: return "0x80000000"; default: abort (); } } static int source_is_imm1_8 (struct instr *i) { return i->stype == 3; } static int /* returns zero for success, non-zero for failure */ gen_opcode (unsigned long int opcode) { struct instr *curi = table68k + opcode; char* ssize=NULL; insn_n_cycles = 2; global_failure=0; long_opcode=0; global_isjump=0; global_iscjump=0; global_isaddx=0; global_cmov=0; global_mayfail=0; hack_opcode=opcode; endstr[0]=0; start_brace (); comprintf("\tuae_u8 scratchie=S1;\n"); switch (curi->plev) { case 0: /* not privileged */ break; case 1: /* unprivileged only on 68000 */ if (cpu_level == 0) break; if (next_cpu_level < 0) next_cpu_level = 0; /* fall through */ case 2: /* priviledged */ failure; /* Easy ones first */ break; case 3: /* privileged if size == word */ if (curi->size == sz_byte) break; failure; break; } switch (curi->size) { case sz_byte: ssize="b"; break; case sz_word: ssize="w"; break; case sz_long: ssize="l"; break; default: abort(); } switch (curi->mnemo) { case i_OR: case i_AND: case i_EOR: genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); genamode (curi->dmode, "dstreg", curi->size, "dst", 1, 0); switch(curi->mnemo) { case i_OR: genflags (flag_or, curi->size, "", "src", "dst"); break; case i_AND: genflags (flag_and, curi->size, "", "src", "dst"); break; case i_EOR: genflags (flag_eor, curi->size, "", "src", "dst"); break; } genastore ("dst", curi->dmode, "dstreg", curi->size, "dst"); break; case i_ORSR: case i_EORSR: failure; isjump; break; case i_ANDSR: failure; isjump; break; case i_SUB: genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); genamode (curi->dmode, "dstreg", curi->size, "dst", 1, 0); genflags (flag_sub, curi->size, "", "src", "dst"); genastore ("dst", curi->dmode, "dstreg", curi->size, "dst"); break; case i_SUBA: genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); genamode (curi->dmode, "dstreg", sz_long, "dst", 1, 0); start_brace(); comprintf("\tint tmp=scratchie++;\n"); switch(curi->size) { case sz_byte: comprintf("\tsign_extend_8_rr(tmp,src);\n"); break; case sz_word: comprintf("\tsign_extend_16_rr(tmp,src);\n"); break; case sz_long: comprintf("\ttmp=src;\n"); break; default: abort(); } comprintf("\tsub_l(dst,tmp);\n"); genastore ("dst", curi->dmode, "dstreg", sz_long, "dst"); break; case i_SUBX: isaddx; genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); genamode (curi->dmode, "dstreg", curi->size, "dst", 1, 0); genflags (flag_subx, curi->size, "", "src", "dst"); genastore ("dst", curi->dmode, "dstreg", curi->size, "dst"); break; case i_SBCD: failure; /* I don't think so! */ break; case i_ADD: genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); genamode (curi->dmode, "dstreg", curi->size, "dst", 1, 0); genflags (flag_add, curi->size, "", "src", "dst"); genastore ("dst", curi->dmode, "dstreg", curi->size, "dst"); break; case i_ADDA: genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); genamode (curi->dmode, "dstreg", sz_long, "dst", 1, 0); start_brace(); comprintf("\tint tmp=scratchie++;\n"); switch(curi->size) { case sz_byte: comprintf("\tsign_extend_8_rr(tmp,src);\n"); break; case sz_word: comprintf("\tsign_extend_16_rr(tmp,src);\n"); break; case sz_long: comprintf("\ttmp=src;\n"); break; default: abort(); } comprintf("\tadd_l(dst,tmp);\n"); genastore ("dst", curi->dmode, "dstreg", sz_long, "dst"); break; case i_ADDX: isaddx; genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); genamode (curi->dmode, "dstreg", curi->size, "dst", 1, 0); start_brace(); genflags (flag_addx, curi->size, "", "src", "dst"); genastore ("dst", curi->dmode, "dstreg", curi->size, "dst"); break; case i_ABCD: failure; /* No BCD maths for me.... */ break; case i_NEG: genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); start_brace (); comprintf("\tint dst=scratchie++;\n"); comprintf("\tmov_l_ri(dst,0);\n"); genflags (flag_sub, curi->size, "", "src", "dst"); genastore ("dst", curi->smode, "srcreg", curi->size, "src"); break; case i_NEGX: genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); start_brace (); comprintf("\tint dst=scratchie++;\n"); comprintf("\tmov_l_ri(dst,0);\n"); genflags (flag_subx, curi->size, "", "src", "dst"); genastore ("dst", curi->smode, "srcreg", curi->size, "src"); break; case i_NBCD: failure; /* Nope! */ break; case i_CLR: genamode (curi->smode, "srcreg", curi->size, "src", 2, 0); start_brace(); comprintf("\tint dst=scratchie++;\n"); comprintf("\tmov_l_ri(dst,0);\n"); genflags (flag_logical, curi->size, "dst", "", ""); genastore ("dst", curi->smode, "srcreg", curi->size, "src"); break; case i_NOT: genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); start_brace (); comprintf("\tint dst=scratchie++;\n"); comprintf("\tmov_l_ri(dst,0xffffffff);\n"); genflags (flag_eor, curi->size, "", "src", "dst"); genastore ("dst", curi->smode, "srcreg", curi->size, "src"); break; case i_TST: genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); genflags (flag_logical, curi->size, "src", "", ""); break; case i_BCHG: case i_BCLR: case i_BSET: case i_BTST: genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); genamode (curi->dmode, "dstreg", curi->size, "dst", 1, 0); start_brace(); comprintf("\tint s=scratchie++;\n" "\tmov_l_rr(s,src);\n"); if (curi->size == sz_byte) comprintf("\tand_l_ri(s,7);\n"); else comprintf("\tand_l_ri(s,31);\n"); { char* op; int need_write=1; switch(curi->mnemo) { case i_BCHG: op="btc"; break; case i_BCLR: op="btr"; break; case i_BSET: op="bts"; break; case i_BTST: op="bt"; need_write=0; break; } comprintf("\t%s_l_rr(dst,s);\n" /* Answer now in C */ "\tsbb_l(s,s);\n" /* s is 0 if bit was 0, -1 otherwise */ "\tmake_flags_live();\n" /* Get the flags back */ "\tdont_care_flags();\n",op); if (!noflags) { comprintf("\tstart_needflags();\n" "\tsetzflg_l(s);\n" "\tlive_flags();\n" "\tend_needflags();\n"); } if (need_write) genastore ("dst", curi->dmode, "dstreg", curi->size, "dst"); } break; /*if (!noflags) { failure; break; } genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); genamode (curi->dmode, "dstreg", curi->size, "dst", 1, 0); start_brace(); comprintf("\tint s=scratchie++;\n" "\tmov_l_rr(s,src);\n"); if (curi->size == sz_byte) comprintf("\tand_l_ri(s,7);\n"); else comprintf("\tand_l_ri(s,31);\n"); { char* op; int need_write=1; switch(curi->mnemo) { case i_BCHG: op="btc"; break; case i_BCLR: op="btr"; break; case i_BSET: op="bts"; break; case i_BTST: op="bt"; need_write=0; break; } comprintf("\t%s_l_rr(dst,s);\n" // Answer now in C "\tsbb_l(s,s);\n" // s is 0 if bit was 0, -1 otherwise "\tmake_flags_live();\n" // Get the flags back "\tdont_care_flags();\n" "\tstart_needflags();\n" "\tbsf_l_rr(s,s);\n" "\tlive_flags();\n" "\tend_needflags();\n",op); if (need_write) genastore ("dst", curi->dmode, "dstreg", curi->size, "dst"); } break; */ case i_CMPM: case i_CMP: genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); genamode (curi->dmode, "dstreg", curi->size, "dst", 1, 0); start_brace (); genflags (flag_cmp, curi->size, "", "src", "dst"); break; case i_CMPA: genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); genamode (curi->dmode, "dstreg", sz_long, "dst", 1, 0); start_brace(); comprintf("\tint tmps=scratchie++;\n"); switch(curi->size) { case sz_byte: comprintf("\tsign_extend_8_rr(tmps,src);\n"); break; case sz_word: comprintf("\tsign_extend_16_rr(tmps,src);\n"); break; case sz_long: comprintf("tmps=src;\n"); break; default: abort(); } genflags (flag_cmp, sz_long, "", "tmps", "dst"); break; /* The next two are coded a little unconventional, but they are doing * weird things... */ case i_MVPRM: isjump; failure; break; case i_MVPMR: isjump; failure; break; case i_MOVE: switch(curi->dmode) { case Dreg: case Areg: genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); genamode (curi->dmode, "dstreg", curi->size, "dst", 2, 0); genflags (flag_mov, curi->size, "", "src", "dst"); genastore ("dst", curi->dmode, "dstreg", curi->size, "dst"); break; default: /* It goes to memory, not a register */ genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); genamode (curi->dmode, "dstreg", curi->size, "dst", 2, 0); genflags (flag_logical, curi->size, "src", "", ""); genastore ("src", curi->dmode, "dstreg", curi->size, "dst"); break; } break; case i_MOVEA: genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); genamode (curi->dmode, "dstreg", curi->size, "dst", 2, 0); start_brace(); comprintf("\tint tmps=scratchie++;\n"); switch(curi->size) { case sz_word: comprintf("\tsign_extend_16_rr(dst,src);\n"); break; case sz_long: comprintf("\tmov_l_rr(dst,src);\n"); break; default: abort(); } genastore ("dst", curi->dmode, "dstreg", sz_long, "dst"); break; case i_MVSR2: isjump; failure; break; case i_MV2SR: isjump; failure; break; case i_SWAP: genamode (curi->smode, "srcreg", sz_long, "src", 1, 0); comprintf("\tdont_care_flags();\n"); comprintf("\trol_l_ri(src,16);\n"); genflags (flag_logical, sz_long, "src", "", ""); genastore ("src", curi->smode, "srcreg", sz_long, "src"); break; case i_EXG: genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); genamode (curi->dmode, "dstreg", curi->size, "dst", 1, 0); start_brace(); comprintf("\tint tmp=scratchie++;\n" "\tmov_l_rr(tmp,src);\n"); genastore ("dst", curi->smode, "srcreg", curi->size, "src"); genastore ("tmp", curi->dmode, "dstreg", curi->size, "dst"); break; case i_EXT: genamode (curi->smode, "srcreg", sz_long, "src", 1, 0); comprintf("\tdont_care_flags();\n"); start_brace (); switch (curi->size) { case sz_byte: comprintf ("\tint dst = src;\n" "\tsign_extend_8_rr(src,src);\n"); break; case sz_word: comprintf ("\tint dst = scratchie++;\n" "\tsign_extend_8_rr(dst,src);\n"); break; case sz_long: comprintf ("\tint dst = src;\n" "\tsign_extend_16_rr(src,src);\n"); break; default: abort (); } genflags (flag_logical, curi->size == sz_word ? sz_word : sz_long, "dst", "", ""); genastore ("dst", curi->smode, "srcreg", curi->size == sz_word ? sz_word : sz_long, "src"); break; case i_MVMEL: genmovemel (opcode); break; case i_MVMLE: genmovemle (opcode); break; case i_TRAP: isjump; failure; break; case i_MVR2USP: isjump; failure; break; case i_MVUSP2R: isjump; failure; break; case i_RESET: isjump; failure; break; case i_NOP: break; case i_STOP: isjump; failure; break; case i_RTE: isjump; failure; break; case i_RTD: genamode (curi->smode, "srcreg", curi->size, "offs", 1, 0); /* offs is constant */ comprintf("\tadd_l_ri(offs,4);\n"); start_brace(); comprintf("\tint newad=scratchie++;\n" "\treadlong(15,newad,scratchie);\n" "\tand_l_ri(newad,~1);\n" "\tmov_l_mr((uae_u32)®s.pc,newad);\n" "\tget_n_addr_jmp(newad,PC_P,scratchie);\n" "\tmov_l_mr((uae_u32)®s.pc_oldp,PC_P);\n" "\tm68k_pc_offset=0;\n" "\tadd_l(15,offs);\n"); gen_update_next_handler(); isjump; break; case i_LINK: genamode (curi->smode, "srcreg", sz_long, "src", 1, 0); genamode (curi->dmode, "dstreg", curi->size, "offs", 1, 0); comprintf("\tsub_l_ri(15,4);\n" "\twritelong_clobber(15,src,scratchie);\n" "\tmov_l_rr(src,15);\n"); if (curi->size==sz_word) comprintf("\tsign_extend_16_rr(offs,offs);\n"); comprintf("\tadd_l(15,offs);\n"); genastore ("src", curi->smode, "srcreg", sz_long, "src"); break; case i_UNLK: genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); comprintf("\tmov_l_rr(15,src);\n" "\treadlong(15,src,scratchie);\n" "\tadd_l_ri(15,4);\n"); genastore ("src", curi->smode, "srcreg", curi->size, "src"); break; case i_RTS: comprintf("\tint newad=scratchie++;\n" "\treadlong(15,newad,scratchie);\n" "\tand_l_ri(newad,~1);\n" "\tmov_l_mr((uae_u32)®s.pc,newad);\n" "\tget_n_addr_jmp(newad,PC_P,scratchie);\n" "\tmov_l_mr((uae_u32)®s.pc_oldp,PC_P);\n" "\tm68k_pc_offset=0;\n" "\tlea_l_brr(15,15,4);\n"); gen_update_next_handler(); isjump; break; case i_TRAPV: isjump; failure; break; case i_RTR: isjump; failure; break; case i_JSR: isjump; genamode (curi->smode, "srcreg", curi->size, "src", 0, 0); start_brace(); comprintf("\tuae_u32 retadd=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset;\n"); comprintf("\tint ret=scratchie++;\n" "\tmov_l_ri(ret,retadd);\n" "\tsub_l_ri(15,4);\n" "\twritelong_clobber(15,ret,scratchie);\n"); comprintf("\tand_l_ri(srca,~1);\n" "\tmov_l_mr((uae_u32)®s.pc,srca);\n" "\tget_n_addr_jmp(srca,PC_P,scratchie);\n" "\tmov_l_mr((uae_u32)®s.pc_oldp,PC_P);\n" "\tm68k_pc_offset=0;\n"); gen_update_next_handler(); break; case i_JMP: isjump; genamode (curi->smode, "srcreg", curi->size, "src", 0, 0); comprintf("\tand_l_ri(srca,~1);\n" "\tmov_l_mr((uae_u32)®s.pc,srca);\n" "\tget_n_addr_jmp(srca,PC_P,scratchie);\n" "\tmov_l_mr((uae_u32)®s.pc_oldp,PC_P);\n" "\tm68k_pc_offset=0;\n"); gen_update_next_handler(); break; case i_BSR: if (curi->size==sz_long) failure; is_const_jump; genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); comprintf("\tand_l_ri(src,~1);\n"); start_brace(); comprintf("\tuae_u32 retadd=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset;\n"); comprintf("\tint ret=scratchie++;\n" "\tmov_l_ri(ret,retadd);\n" "\tsub_l_ri(15,4);\n" "\twritelong_clobber(15,ret,scratchie);\n"); comprintf("\tadd_l_ri(src,m68k_pc_offset_thisinst+2);\n"); comprintf("\tm68k_pc_offset=0;\n"); comprintf("\tadd_l(PC_P,src);\n"); comprintf("\tcomp_pc_p=(uae_u8*)get_const(PC_P);\n"); break; case i_Bcc: comprintf("\tuae_u32 v1,v2;\n"); genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); /* That source is an immediate, so we can clobber it with abandon */ switch(curi->size) { case sz_byte: comprintf("\tsign_extend_8_rr(src,src);\n"); break; case sz_word: comprintf("\tsign_extend_16_rr(src,src);\n"); break; case sz_long: break; } comprintf("\tand_l_ri(src,~1);\n"); comprintf("\tsub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2);\n"); /* Leave the following as "add" --- it will allow it to be optimized away due to src being a constant ;-) */ comprintf("\tadd_l_ri(src,(uae_u32)comp_pc_p);\n"); comprintf("\tmov_l_ri(PC_P,(uae_u32)comp_pc_p);\n"); /* Now they are both constant. Might as well fold in m68k_pc_offset */ comprintf("\tadd_l_ri(src,m68k_pc_offset);\n"); comprintf("\tadd_l_ri(PC_P,m68k_pc_offset);\n"); comprintf("\tm68k_pc_offset=0;\n"); if (curi->cc>=2) { comprintf("\tv1=get_const(PC_P);\n" "\tv2=get_const(src);\n" "\tregister_branch(v1,v2,%d);\n", cond_codes_x86[curi->cc]); comprintf("\tmake_flags_live();\n"); /* Load the flags */ isjump; } else { is_const_jump; } switch(curi->cc) { case 0: /* Unconditional jump */ comprintf("\tmov_l_rr(PC_P,src);\n"); comprintf("\tcomp_pc_p=(uae_u8*)get_const(PC_P);\n"); break; case 1: break; /* This is silly! */ case 8: failure; break; /* Work out details! FIXME */ case 9: failure; break; /* Not critical, though! */ case 2: case 3: case 4: case 5: case 6: case 7: case 10: case 11: case 12: case 13: case 14: case 15: break; default: abort(); } break; case i_LEA: genamode (curi->smode, "srcreg", curi->size, "src", 0, 0); genamode (curi->dmode, "dstreg", curi->size, "dst", 2, 0); genastore ("srca", curi->dmode, "dstreg", curi->size, "dst"); break; case i_PEA: if (table68k[opcode].smode==Areg || table68k[opcode].smode==Aind || table68k[opcode].smode==Aipi || table68k[opcode].smode==Apdi || table68k[opcode].smode==Ad16 || table68k[opcode].smode==Ad8r) comprintf("if (srcreg==7) dodgy=1;\n"); genamode (curi->smode, "srcreg", curi->size, "src", 0, 0); genamode (Apdi, "7", sz_long, "dst", 2, 0); genastore ("srca", Apdi, "7", sz_long, "dst"); break; case i_DBcc: isjump; uses_cmov; genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); genamode (curi->dmode, "dstreg", curi->size, "offs", 1, 0); /* That offs is an immediate, so we can clobber it with abandon */ switch(curi->size) { case sz_word: comprintf("\tsign_extend_16_rr(offs,offs);\n"); break; default: abort(); /* Seems this only comes in word flavour */ } comprintf("\tsub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2);\n"); comprintf("\tadd_l_ri(offs,(uae_u32)comp_pc_p);\n"); /* New PC, once the offset_68k is * also added */ /* Let's fold in the m68k_pc_offset at this point */ comprintf("\tadd_l_ri(offs,m68k_pc_offset);\n"); comprintf("\tadd_l_ri(PC_P,m68k_pc_offset);\n"); comprintf("\tm68k_pc_offset=0;\n"); start_brace(); comprintf("\tint nsrc=scratchie++;\n"); if (curi->cc>=2) { comprintf("\tmake_flags_live();\n"); /* Load the flags */ } if (curi->size!=sz_word) abort(); switch(curi->cc) { case 0: /* This is an elaborate nop? */ break; case 1: comprintf("\tstart_needflags();\n"); comprintf("\tsub_w_ri(src,1);\n"); comprintf("\t end_needflags();\n"); start_brace(); comprintf("\tuae_u32 v2;\n" "\tuae_u32 v1=get_const(PC_P);\n"); comprintf("\tv2=get_const(offs);\n" "\tregister_branch(v1,v2,3);\n"); break; case 8: failure; break; /* Work out details! FIXME */ case 9: failure; break; /* Not critical, though! */ case 2: case 3: case 4: case 5: case 6: case 7: case 10: case 11: case 12: case 13: case 14: case 15: comprintf("\tmov_l_rr(nsrc,src);\n"); comprintf("\tlea_l_brr(scratchie,src,(uae_s32)-1);\n" "\tmov_w_rr(src,scratchie);\n"); comprintf("\tcmov_l_rr(offs,PC_P,%d);\n", cond_codes_x86[curi->cc]); comprintf("\tcmov_l_rr(src,nsrc,%d);\n", cond_codes_x86[curi->cc]); /* OK, now for cc=true, we have src==nsrc and offs==PC_P, so whether we move them around doesn't matter. However, if cc=false, we have offs==jump_pc, and src==nsrc-1 */ comprintf("\t start_needflags();\n"); comprintf("\ttest_w_rr(nsrc,nsrc);\n"); comprintf("\t end_needflags();\n"); comprintf("\tcmov_l_rr(PC_P,offs,5);\n"); break; default: abort(); } genastore ("src", curi->smode, "srcreg", curi->size, "src"); gen_update_next_handler(); break; case i_Scc: genamode (curi->smode, "srcreg", curi->size, "src", 2, 0); start_brace (); comprintf ("\tint val = scratchie++;\n"); /* We set val to 0 if we really should use 255, and to 1 for real 0 */ switch(curi->cc) { case 0: /* Unconditional set */ comprintf("\tmov_l_ri(val,0);\n"); break; case 1: /* Unconditional not-set */ comprintf("\tmov_l_ri(val,1);\n"); break; case 8: failure; break; /* Work out details! FIXME */ case 9: failure; break; /* Not critical, though! */ case 2: case 3: case 4: case 5: case 6: case 7: case 10: case 11: case 12: case 13: case 14: case 15: comprintf("\tmake_flags_live();\n"); /* Load the flags */ /* All condition codes can be inverted by changing the LSB */ comprintf("\tsetcc(val,%d);\n", cond_codes_x86[curi->cc]^1); break; default: abort(); } comprintf("\tsub_b_ri(val,1);\n"); genastore ("val", curi->smode, "srcreg", curi->size, "src"); break; case i_DIVU: isjump; failure; break; case i_DIVS: isjump; failure; break; case i_MULU: comprintf("\tdont_care_flags();\n"); genamode (curi->smode, "srcreg", sz_word, "src", 1, 0); genamode (curi->dmode, "dstreg", sz_word, "dst", 1, 0); /* To do 16x16 unsigned multiplication, we actually use 32x32 signed, and zero-extend the registers first. That solves the problem of MUL needing dedicated registers on the x86 */ comprintf("\tzero_extend_16_rr(scratchie,src);\n" "\tzero_extend_16_rr(dst,dst);\n" "\timul_32_32(dst,scratchie);\n"); genflags (flag_logical, sz_long, "dst", "", ""); genastore ("dst", curi->dmode, "dstreg", sz_long, "dst"); break; case i_MULS: comprintf("\tdont_care_flags();\n"); genamode (curi->smode, "srcreg", sz_word, "src", 1, 0); genamode (curi->dmode, "dstreg", sz_word, "dst", 1, 0); comprintf("\tsign_extend_16_rr(scratchie,src);\n" "\tsign_extend_16_rr(dst,dst);\n" "\timul_32_32(dst,scratchie);\n"); genflags (flag_logical, sz_long, "dst", "", ""); genastore ("dst", curi->dmode, "dstreg", sz_long, "dst"); break; case i_CHK: isjump; failure; break; case i_CHK2: isjump; failure; break; case i_ASR: mayfail; if (curi->smode==Dreg) { comprintf("if ((uae_u32)srcreg==(uae_u32)dstreg) {\n" " FAIL(1);\n" " return 0;\n" "} \n"); start_brace(); } comprintf("\tdont_care_flags();\n"); genamode (curi->smode, "srcreg", curi->size, "cnt", 1, 0); genamode (curi->dmode, "dstreg", curi->size, "data", 1, 0); if (curi->smode!=immi) { if (!noflags) { uses_cmov; start_brace(); comprintf("\tint highmask;\n" "\tint width;\n" "\tint cdata=scratchie++;\n" "\tint tmpcnt=scratchie++;\n" "\tint highshift=scratchie++;\n"); comprintf("\tmov_l_rr(tmpcnt,cnt);\n" "\tand_l_ri(tmpcnt,63);\n" "\tmov_l_ri(cdata,0);\n" "\tcmov_l_rr(cdata,data,5);\n"); /* cdata is now either data (for shift count!=0) or 0 (for shift count==0) */ switch(curi->size) { case sz_byte: comprintf("\tshra_b_rr(data,cnt);\n" "\thighmask=0x38;\n" "\twidth=8;\n"); break; case sz_word: comprintf("\tshra_w_rr(data,cnt);\n" "\thighmask=0x30;\n" "\twidth=16;\n"); break; case sz_long: comprintf("\tshra_l_rr(data,cnt);\n" "\thighmask=0x20;\n" "\twidth=32;\n"); break; default: abort(); } comprintf("test_l_ri(cnt,highmask);\n" "mov_l_ri(highshift,0);\n" "mov_l_ri(scratchie,width/2);\n" "cmov_l_rr(highshift,scratchie,5);\n"); /* The x86 masks out bits, so we now make sure that things really get shifted as much as planned */ switch(curi->size) { case sz_byte: comprintf("\tshra_b_rr(data,highshift);\n");break; case sz_word: comprintf("\tshra_w_rr(data,highshift);\n");break; case sz_long: comprintf("\tshra_l_rr(data,highshift);\n");break; default: abort(); } /* And again */ switch(curi->size) { case sz_byte: comprintf("\tshra_b_rr(data,highshift);\n");break; case sz_word: comprintf("\tshra_w_rr(data,highshift);\n");break; case sz_long: comprintf("\tshra_l_rr(data,highshift);\n");break; default: abort(); } /* Result of shift is now in data. Now we need to determine the carry by shifting cdata one less */ comprintf("\tsub_l_ri(tmpcnt,1);\n"); switch(curi->size) { case sz_byte: comprintf("\tshra_b_rr(cdata,tmpcnt);\n");break; case sz_word: comprintf("\tshra_w_rr(cdata,tmpcnt);\n");break; case sz_long: comprintf("\tshra_l_rr(cdata,tmpcnt);\n");break; default: abort(); } /* If the shift count was higher than the width, we need to pick up the sign from data */ comprintf("test_l_ri(tmpcnt,highmask);\n" "cmov_l_rr(cdata,data,5);\n"); /* And create the flags */ comprintf("\tstart_needflags();\n"); comprintf("\tif (needed_flags & FLAG_ZNV)\n"); switch(curi->size) { case sz_byte: comprintf("\t test_b_rr(data,data);\n"); break; case sz_word: comprintf("\t test_w_rr(data,data);\n"); break; case sz_long: comprintf("\t test_l_rr(data,data);\n"); break; } comprintf("\t bt_l_ri(cdata,0);\n"); /* Set C */ comprintf("\t live_flags();\n"); comprintf("\t end_needflags();\n"); comprintf("\t duplicate_carry();\n"); comprintf("if (!(needed_flags & FLAG_CZNV)) dont_care_flags();\n"); genastore ("data", curi->dmode, "dstreg", curi->size, "data"); } else { uses_cmov; start_brace(); comprintf("\tint highmask;\n" "\tint width;\n" "\tint highshift=scratchie++;\n"); switch(curi->size) { case sz_byte: comprintf("\tshra_b_rr(data,cnt);\n" "\thighmask=0x38;\n" "\twidth=8;\n"); break; case sz_word: comprintf("\tshra_w_rr(data,cnt);\n" "\thighmask=0x30;\n" "\twidth=16;\n"); break; case sz_long: comprintf("\tshra_l_rr(data,cnt);\n" "\thighmask=0x20;\n" "\twidth=32;\n"); break; default: abort(); } comprintf("test_l_ri(cnt,highmask);\n" "mov_l_ri(highshift,0);\n" "mov_l_ri(scratchie,width/2);\n" "cmov_l_rr(highshift,scratchie,5);\n"); /* The x86 masks out bits, so we now make sure that things really get shifted as much as planned */ switch(curi->size) { case sz_byte: comprintf("\tshra_b_rr(data,highshift);\n");break; case sz_word: comprintf("\tshra_w_rr(data,highshift);\n");break; case sz_long: comprintf("\tshra_l_rr(data,highshift);\n");break; default: abort(); } /* And again */ switch(curi->size) { case sz_byte: comprintf("\tshra_b_rr(data,highshift);\n");break; case sz_word: comprintf("\tshra_w_rr(data,highshift);\n");break; case sz_long: comprintf("\tshra_l_rr(data,highshift);\n");break; default: abort(); } genastore ("data", curi->dmode, "dstreg", curi->size, "data"); } } else { start_brace(); comprintf("\tint tmp=scratchie++;\n" "\tint bp;\n" "\tmov_l_rr(tmp,data);\n"); switch(curi->size) { case sz_byte: comprintf("\tshra_b_ri(data,srcreg);\n" "\tbp=srcreg-1;\n"); break; case sz_word: comprintf("\tshra_w_ri(data,srcreg);\n" "\tbp=srcreg-1;\n"); break; case sz_long: comprintf("\tshra_l_ri(data,srcreg);\n" "\tbp=srcreg-1;\n"); break; default: abort(); } if (!noflags) { comprintf("\tstart_needflags();\n"); comprintf("\tif (needed_flags & FLAG_ZNV)\n"); switch(curi->size) { case sz_byte: comprintf("\t test_b_rr(data,data);\n"); break; case sz_word: comprintf("\t test_w_rr(data,data);\n"); break; case sz_long: comprintf("\t test_l_rr(data,data);\n"); break; } comprintf("\t bt_l_ri(tmp,bp);\n"); /* Set C */ comprintf("\t live_flags();\n"); comprintf("\t end_needflags();\n"); comprintf("\t duplicate_carry();\n"); comprintf("if (!(needed_flags & FLAG_CZNV)) dont_care_flags();\n"); } genastore ("data", curi->dmode, "dstreg", curi->size, "data"); } break; case i_ASL: mayfail; if (curi->smode==Dreg) { comprintf("if ((uae_u32)srcreg==(uae_u32)dstreg) {\n" " FAIL(1);\n" " return 0;\n" "} \n"); start_brace(); } comprintf("\tdont_care_flags();\n"); /* Except for the handling of the V flag, this is identical to LSL. The handling of V is, uhm, unpleasant, so if it's needed, let the normal emulation handle it. Shoulders of giants kinda thing ;-) */ comprintf("if (needed_flags & FLAG_V) {\n" " FAIL(1);\n" " return 0;\n" "} \n"); genamode (curi->smode, "srcreg", curi->size, "cnt", 1, 0); genamode (curi->dmode, "dstreg", curi->size, "data", 1, 0); if (curi->smode!=immi) { if (!noflags) { uses_cmov; start_brace(); comprintf("\tint highmask;\n" "\tint cdata=scratchie++;\n" "\tint tmpcnt=scratchie++;\n"); comprintf("\tmov_l_rr(tmpcnt,cnt);\n" "\tand_l_ri(tmpcnt,63);\n" "\tmov_l_ri(cdata,0);\n" "\tcmov_l_rr(cdata,data,5);\n"); /* cdata is now either data (for shift count!=0) or 0 (for shift count==0) */ switch(curi->size) { case sz_byte: comprintf("\tshll_b_rr(data,cnt);\n" "\thighmask=0x38;\n"); break; case sz_word: comprintf("\tshll_w_rr(data,cnt);\n" "\thighmask=0x30;\n"); break; case sz_long: comprintf("\tshll_l_rr(data,cnt);\n" "\thighmask=0x20;\n"); break; default: abort(); } comprintf("test_l_ri(cnt,highmask);\n" "mov_l_ri(scratchie,0);\n" "cmov_l_rr(scratchie,data,4);\n"); switch(curi->size) { case sz_byte: comprintf("\tmov_b_rr(data,scratchie);\n");break; case sz_word: comprintf("\tmov_w_rr(data,scratchie);\n");break; case sz_long: comprintf("\tmov_l_rr(data,scratchie);\n");break; default: abort(); } /* Result of shift is now in data. Now we need to determine the carry by shifting cdata one less */ comprintf("\tsub_l_ri(tmpcnt,1);\n"); switch(curi->size) { case sz_byte: comprintf("\tshll_b_rr(cdata,tmpcnt);\n");break; case sz_word: comprintf("\tshll_w_rr(cdata,tmpcnt);\n");break; case sz_long: comprintf("\tshll_l_rr(cdata,tmpcnt);\n");break; default: abort(); } comprintf("test_l_ri(tmpcnt,highmask);\n" "mov_l_ri(scratchie,0);\n" "cmov_l_rr(cdata,scratchie,5);\n"); /* And create the flags */ comprintf("\tstart_needflags();\n"); comprintf("\tif (needed_flags & FLAG_ZNV)\n"); switch(curi->size) { case sz_byte: comprintf("\t test_b_rr(data,data);\n"); comprintf("\t bt_l_ri(cdata,7);\n"); break; case sz_word: comprintf("\t test_w_rr(data,data);\n"); comprintf("\t bt_l_ri(cdata,15);\n"); break; case sz_long: comprintf("\t test_l_rr(data,data);\n"); comprintf("\t bt_l_ri(cdata,31);\n"); break; } comprintf("\t live_flags();\n"); comprintf("\t end_needflags();\n"); comprintf("\t duplicate_carry();\n"); comprintf("if (!(needed_flags & FLAG_CZNV)) dont_care_flags();\n"); genastore ("data", curi->dmode, "dstreg", curi->size, "data"); } else { uses_cmov; start_brace(); comprintf("\tint highmask;\n"); switch(curi->size) { case sz_byte: comprintf("\tshll_b_rr(data,cnt);\n" "\thighmask=0x38;\n"); break; case sz_word: comprintf("\tshll_w_rr(data,cnt);\n" "\thighmask=0x30;\n"); break; case sz_long: comprintf("\tshll_l_rr(data,cnt);\n" "\thighmask=0x20;\n"); break; default: abort(); } comprintf("test_l_ri(cnt,highmask);\n" "mov_l_ri(scratchie,0);\n" "cmov_l_rr(scratchie,data,4);\n"); switch(curi->size) { case sz_byte: comprintf("\tmov_b_rr(data,scratchie);\n");break; case sz_word: comprintf("\tmov_w_rr(data,scratchie);\n");break; case sz_long: comprintf("\tmov_l_rr(data,scratchie);\n");break; default: abort(); } genastore ("data", curi->dmode, "dstreg", curi->size, "data"); } } else { start_brace(); comprintf("\tint tmp=scratchie++;\n" "\tint bp;\n" "\tmov_l_rr(tmp,data);\n"); switch(curi->size) { case sz_byte: comprintf("\tshll_b_ri(data,srcreg);\n" "\tbp=8-srcreg;\n"); break; case sz_word: comprintf("\tshll_w_ri(data,srcreg);\n" "\tbp=16-srcreg;\n"); break; case sz_long: comprintf("\tshll_l_ri(data,srcreg);\n" "\tbp=32-srcreg;\n"); break; default: abort(); } if (!noflags) { comprintf("\tstart_needflags();\n"); comprintf("\tif (needed_flags & FLAG_ZNV)\n"); switch(curi->size) { case sz_byte: comprintf("\t test_b_rr(data,data);\n"); break; case sz_word: comprintf("\t test_w_rr(data,data);\n"); break; case sz_long: comprintf("\t test_l_rr(data,data);\n"); break; } comprintf("\t bt_l_ri(tmp,bp);\n"); /* Set C */ comprintf("\t live_flags();\n"); comprintf("\t end_needflags();\n"); comprintf("\t duplicate_carry();\n"); comprintf("if (!(needed_flags & FLAG_CZNV)) dont_care_flags();\n"); } genastore ("data", curi->dmode, "dstreg", curi->size, "data"); } break; case i_LSR: mayfail; if (curi->smode==Dreg) { comprintf("if ((uae_u32)srcreg==(uae_u32)dstreg) {\n" " FAIL(1);\n" " return 0;\n" "} \n"); start_brace(); } comprintf("\tdont_care_flags();\n"); genamode (curi->smode, "srcreg", curi->size, "cnt", 1, 0); genamode (curi->dmode, "dstreg", curi->size, "data", 1, 0); if (curi->smode!=immi) { if (!noflags) { uses_cmov; start_brace(); comprintf("\tint highmask;\n" "\tint cdata=scratchie++;\n" "\tint tmpcnt=scratchie++;\n"); comprintf("\tmov_l_rr(tmpcnt,cnt);\n" "\tand_l_ri(tmpcnt,63);\n" "\tmov_l_ri(cdata,0);\n" "\tcmov_l_rr(cdata,data,5);\n"); /* cdata is now either data (for shift count!=0) or 0 (for shift count==0) */ switch(curi->size) { case sz_byte: comprintf("\tshrl_b_rr(data,cnt);\n" "\thighmask=0x38;\n"); break; case sz_word: comprintf("\tshrl_w_rr(data,cnt);\n" "\thighmask=0x30;\n"); break; case sz_long: comprintf("\tshrl_l_rr(data,cnt);\n" "\thighmask=0x20;\n"); break; default: abort(); } comprintf("test_l_ri(cnt,highmask);\n" "mov_l_ri(scratchie,0);\n" "cmov_l_rr(scratchie,data,4);\n"); switch(curi->size) { case sz_byte: comprintf("\tmov_b_rr(data,scratchie);\n");break; case sz_word: comprintf("\tmov_w_rr(data,scratchie);\n");break; case sz_long: comprintf("\tmov_l_rr(data,scratchie);\n");break; default: abort(); } /* Result of shift is now in data. Now we need to determine the carry by shifting cdata one less */ comprintf("\tsub_l_ri(tmpcnt,1);\n"); switch(curi->size) { case sz_byte: comprintf("\tshrl_b_rr(cdata,tmpcnt);\n");break; case sz_word: comprintf("\tshrl_w_rr(cdata,tmpcnt);\n");break; case sz_long: comprintf("\tshrl_l_rr(cdata,tmpcnt);\n");break; default: abort(); } comprintf("test_l_ri(tmpcnt,highmask);\n" "mov_l_ri(scratchie,0);\n" "cmov_l_rr(cdata,scratchie,5);\n"); /* And create the flags */ comprintf("\tstart_needflags();\n"); comprintf("\tif (needed_flags & FLAG_ZNV)\n"); switch(curi->size) { case sz_byte: comprintf("\t test_b_rr(data,data);\n"); break; case sz_word: comprintf("\t test_w_rr(data,data);\n"); break; case sz_long: comprintf("\t test_l_rr(data,data);\n"); break; } comprintf("\t bt_l_ri(cdata,0);\n"); /* Set C */ comprintf("\t live_flags();\n"); comprintf("\t end_needflags();\n"); comprintf("\t duplicate_carry();\n"); comprintf("if (!(needed_flags & FLAG_CZNV)) dont_care_flags();\n"); genastore ("data", curi->dmode, "dstreg", curi->size, "data"); } else { uses_cmov; start_brace(); comprintf("\tint highmask;\n"); switch(curi->size) { case sz_byte: comprintf("\tshrl_b_rr(data,cnt);\n" "\thighmask=0x38;\n"); break; case sz_word: comprintf("\tshrl_w_rr(data,cnt);\n" "\thighmask=0x30;\n"); break; case sz_long: comprintf("\tshrl_l_rr(data,cnt);\n" "\thighmask=0x20;\n"); break; default: abort(); } comprintf("test_l_ri(cnt,highmask);\n" "mov_l_ri(scratchie,0);\n" "cmov_l_rr(scratchie,data,4);\n"); switch(curi->size) { case sz_byte: comprintf("\tmov_b_rr(data,scratchie);\n");break; case sz_word: comprintf("\tmov_w_rr(data,scratchie);\n");break; case sz_long: comprintf("\tmov_l_rr(data,scratchie);\n");break; default: abort(); } genastore ("data", curi->dmode, "dstreg", curi->size, "data"); } } else { start_brace(); comprintf("\tint tmp=scratchie++;\n" "\tint bp;\n" "\tmov_l_rr(tmp,data);\n"); switch(curi->size) { case sz_byte: comprintf("\tshrl_b_ri(data,srcreg);\n" "\tbp=srcreg-1;\n"); break; case sz_word: comprintf("\tshrl_w_ri(data,srcreg);\n" "\tbp=srcreg-1;\n"); break; case sz_long: comprintf("\tshrl_l_ri(data,srcreg);\n" "\tbp=srcreg-1;\n"); break; default: abort(); } if (!noflags) { comprintf("\tstart_needflags();\n"); comprintf("\tif (needed_flags & FLAG_ZNV)\n"); switch(curi->size) { case sz_byte: comprintf("\t test_b_rr(data,data);\n"); break; case sz_word: comprintf("\t test_w_rr(data,data);\n"); break; case sz_long: comprintf("\t test_l_rr(data,data);\n"); break; } comprintf("\t bt_l_ri(tmp,bp);\n"); /* Set C */ comprintf("\t live_flags();\n"); comprintf("\t end_needflags();\n"); comprintf("\t duplicate_carry();\n"); comprintf("if (!(needed_flags & FLAG_CZNV)) dont_care_flags();\n"); } genastore ("data", curi->dmode, "dstreg", curi->size, "data"); } break; case i_LSL: comprintf("\tdont_care_flags();\n"); genamode (curi->smode, "srcreg", curi->size, "cnt", 1, 0); genamode (curi->dmode, "dstreg", curi->size, "data", 1, 0); if (curi->smode!=immi) { if (!noflags) { uses_cmov; start_brace(); comprintf("\tint highmask;\n" "\tint cdata=scratchie++;\n" "\tint tmpcnt=scratchie++;\n"); comprintf("\tmov_l_rr(tmpcnt,cnt);\n" "\tand_l_ri(tmpcnt,63);\n" "\tmov_l_ri(cdata,0);\n" "\tcmov_l_rr(cdata,data,5);\n"); /* cdata is now either data (for shift count!=0) or 0 (for shift count==0) */ switch(curi->size) { case sz_byte: comprintf("\tshll_b_rr(data,cnt);\n" "\thighmask=0x38;\n"); break; case sz_word: comprintf("\tshll_w_rr(data,cnt);\n" "\thighmask=0x30;\n"); break; case sz_long: comprintf("\tshll_l_rr(data,cnt);\n" "\thighmask=0x20;\n"); break; default: abort(); } comprintf("test_l_ri(cnt,highmask);\n" "mov_l_ri(scratchie,0);\n" "cmov_l_rr(scratchie,data,4);\n"); switch(curi->size) { case sz_byte: comprintf("\tmov_b_rr(data,scratchie);\n");break; case sz_word: comprintf("\tmov_w_rr(data,scratchie);\n");break; case sz_long: comprintf("\tmov_l_rr(data,scratchie);\n");break; default: abort(); } /* Result of shift is now in data. Now we need to determine the carry by shifting cdata one less */ comprintf("\tsub_l_ri(tmpcnt,1);\n"); switch(curi->size) { case sz_byte: comprintf("\tshll_b_rr(cdata,tmpcnt);\n");break; case sz_word: comprintf("\tshll_w_rr(cdata,tmpcnt);\n");break; case sz_long: comprintf("\tshll_l_rr(cdata,tmpcnt);\n");break; default: abort(); } comprintf("test_l_ri(tmpcnt,highmask);\n" "mov_l_ri(scratchie,0);\n" "cmov_l_rr(cdata,scratchie,5);\n"); /* And create the flags */ comprintf("\tstart_needflags();\n"); comprintf("\tif (needed_flags & FLAG_ZNV)\n"); switch(curi->size) { case sz_byte: comprintf("\t test_b_rr(data,data);\n"); comprintf("\t bt_l_ri(cdata,7);\n"); break; case sz_word: comprintf("\t test_w_rr(data,data);\n"); comprintf("\t bt_l_ri(cdata,15);\n"); break; case sz_long: comprintf("\t test_l_rr(data,data);\n"); comprintf("\t bt_l_ri(cdata,31);\n"); break; } comprintf("\t live_flags();\n"); comprintf("\t end_needflags();\n"); comprintf("\t duplicate_carry();\n"); comprintf("if (!(needed_flags & FLAG_CZNV)) dont_care_flags();\n"); genastore ("data", curi->dmode, "dstreg", curi->size, "data"); } else { uses_cmov; start_brace(); comprintf("\tint highmask;\n"); switch(curi->size) { case sz_byte: comprintf("\tshll_b_rr(data,cnt);\n" "\thighmask=0x38;\n"); break; case sz_word: comprintf("\tshll_w_rr(data,cnt);\n" "\thighmask=0x30;\n"); break; case sz_long: comprintf("\tshll_l_rr(data,cnt);\n" "\thighmask=0x20;\n"); break; default: abort(); } comprintf("test_l_ri(cnt,highmask);\n" "mov_l_ri(scratchie,0);\n" "cmov_l_rr(scratchie,data,4);\n"); switch(curi->size) { case sz_byte: comprintf("\tmov_b_rr(data,scratchie);\n");break; case sz_word: comprintf("\tmov_w_rr(data,scratchie);\n");break; case sz_long: comprintf("\tmov_l_rr(data,scratchie);\n");break; default: abort(); } genastore ("data", curi->dmode, "dstreg", curi->size, "data"); } } else { start_brace(); comprintf("\tint tmp=scratchie++;\n" "\tint bp;\n" "\tmov_l_rr(tmp,data);\n"); switch(curi->size) { case sz_byte: comprintf("\tshll_b_ri(data,srcreg);\n" "\tbp=8-srcreg;\n"); break; case sz_word: comprintf("\tshll_w_ri(data,srcreg);\n" "\tbp=16-srcreg;\n"); break; case sz_long: comprintf("\tshll_l_ri(data,srcreg);\n" "\tbp=32-srcreg;\n"); break; default: abort(); } if (!noflags) { comprintf("\tstart_needflags();\n"); comprintf("\tif (needed_flags & FLAG_ZNV)\n"); switch(curi->size) { case sz_byte: comprintf("\t test_b_rr(data,data);\n"); break; case sz_word: comprintf("\t test_w_rr(data,data);\n"); break; case sz_long: comprintf("\t test_l_rr(data,data);\n"); break; } comprintf("\t bt_l_ri(tmp,bp);\n"); /* Set C */ comprintf("\t live_flags();\n"); comprintf("\t end_needflags();\n"); comprintf("\t duplicate_carry();\n"); comprintf("if (!(needed_flags & FLAG_CZNV)) dont_care_flags();\n"); } genastore ("data", curi->dmode, "dstreg", curi->size, "data"); } break; case i_ROL: mayfail; if (curi->smode==Dreg) { comprintf("if ((uae_u32)srcreg==(uae_u32)dstreg) {\n" " FAIL(1);\n" " return 0;\n" "} \n"); start_brace(); } comprintf("\tdont_care_flags();\n"); genamode (curi->smode, "srcreg", curi->size, "cnt", 1, 0); genamode (curi->dmode, "dstreg", curi->size, "data", 1, 0); start_brace (); switch(curi->size) { case sz_long: comprintf("\t rol_l_rr(data,cnt);\n"); break; case sz_word: comprintf("\t rol_w_rr(data,cnt);\n"); break; case sz_byte: comprintf("\t rol_b_rr(data,cnt);\n"); break; } if (!noflags) { comprintf("\tstart_needflags();\n"); comprintf("\tif (needed_flags & FLAG_ZNV)\n"); switch(curi->size) { case sz_byte: comprintf("\t test_b_rr(data,data);\n"); break; case sz_word: comprintf("\t test_w_rr(data,data);\n"); break; case sz_long: comprintf("\t test_l_rr(data,data);\n"); break; } comprintf("\t bt_l_ri(data,0x00);\n"); /* Set C */ comprintf("\t live_flags();\n"); comprintf("\t end_needflags();\n"); } genastore ("data", curi->dmode, "dstreg", curi->size, "data"); break; case i_ROR: mayfail; if (curi->smode==Dreg) { comprintf("if ((uae_u32)srcreg==(uae_u32)dstreg) {\n" " FAIL(1);\n" " return 0;\n" "} \n"); start_brace(); } comprintf("\tdont_care_flags();\n"); genamode (curi->smode, "srcreg", curi->size, "cnt", 1, 0); genamode (curi->dmode, "dstreg", curi->size, "data", 1, 0); start_brace (); switch(curi->size) { case sz_long: comprintf("\t ror_l_rr(data,cnt);\n"); break; case sz_word: comprintf("\t ror_w_rr(data,cnt);\n"); break; case sz_byte: comprintf("\t ror_b_rr(data,cnt);\n"); break; } if (!noflags) { comprintf("\tstart_needflags();\n"); comprintf("\tif (needed_flags & FLAG_ZNV)\n"); switch(curi->size) { case sz_byte: comprintf("\t test_b_rr(data,data);\n"); break; case sz_word: comprintf("\t test_w_rr(data,data);\n"); break; case sz_long: comprintf("\t test_l_rr(data,data);\n"); break; } switch(curi->size) { case sz_byte: comprintf("\t bt_l_ri(data,0x07);\n"); break; case sz_word: comprintf("\t bt_l_ri(data,0x0f);\n"); break; case sz_long: comprintf("\t bt_l_ri(data,0x1f);\n"); break; } comprintf("\t live_flags();\n"); comprintf("\t end_needflags();\n"); } genastore ("data", curi->dmode, "dstreg", curi->size, "data"); break; case i_ROXL: failure; break; case i_ROXR: failure; break; case i_ASRW: failure; break; case i_ASLW: failure; break; case i_LSRW: failure; break; case i_LSLW: failure; break; case i_ROLW: failure; break; case i_RORW: failure; break; case i_ROXLW: failure; break; case i_ROXRW: failure; break; case i_MOVEC2: isjump; failure; break; case i_MOVE2C: isjump; failure; break; case i_CAS: failure; break; case i_CAS2: failure; break; case i_MOVES: /* ignore DFC and SFC because we have no MMU */ isjump; failure; break; case i_BKPT: /* only needed for hardware emulators */ isjump; failure; break; case i_CALLM: /* not present in 68030 */ isjump; failure; break; case i_RTM: /* not present in 68030 */ isjump; failure; break; case i_TRAPcc: isjump; failure; break; case i_DIVL: isjump; failure; break; case i_MULL: if (!noflags) { failure; break; } comprintf("\tuae_u16 extra=%s;\n",gen_nextiword()); comprintf("\tint r2=(extra>>12)&7;\n" "\tint tmp=scratchie++;\n"); genamode (curi->dmode, "dstreg", curi->size, "dst", 1, 0); /* The two operands are in dst and r2 */ comprintf("\tif (extra&0x0400) {\n" /* Need full 64 bit result */ "\tint r3=(extra&7);\n" "\tmov_l_rr(r3,dst);\n"); /* operands now in r3 and r2 */ comprintf("\tif (extra&0x0800) { \n" /* signed */ "\t\timul_64_32(r2,r3);\n" "\t} else { \n" "\t\tmul_64_32(r2,r3);\n" "\t} \n"); /* The result is in r2/tmp, with r2 holding the lower 32 bits */ comprintf("\t} else {\n"); /* Only want 32 bit result */ /* operands in dst and r2, result foes into r2 */ /* shouldn't matter whether it's signed or unsigned?!? */ comprintf("\timul_32_32(r2,dst);\n" "\t}\n"); break; case i_BFTST: case i_BFEXTU: case i_BFCHG: case i_BFEXTS: case i_BFCLR: case i_BFFFO: case i_BFSET: case i_BFINS: failure; break; case i_PACK: failure; break; case i_UNPK: failure; break; case i_TAS: failure; break; case i_FPP: mayfail; comprintf("\tuae_u16 extra=%s;\n",gen_nextiword()); comprintf("\tcomp_fpp_opp(opcode,extra);\n"); break; case i_FBcc: isjump; uses_cmov; mayfail; comprintf("\tcomp_fbcc_opp(opcode);\n"); break; case i_FDBcc: isjump; failure; break; case i_FScc: mayfail; uses_cmov; comprintf("\tuae_u16 extra=%s;\n",gen_nextiword()); comprintf("\tcomp_fscc_opp(opcode,extra);\n"); break; case i_FTRAPcc: isjump; failure; break; case i_FSAVE: failure; break; case i_FRESTORE: failure; break; case i_CINVL: case i_CINVP: case i_CINVA: isjump; /* Not really, but it's probably a good idea to stop translating at this point */ failure; comprintf ("\tflush_icache();\n"); /* Differentiate a bit more? */ break; case i_CPUSHL: case i_CPUSHP: case i_CPUSHA: isjump; /* Not really, but it's probably a good idea to stop translating at this point */ failure; break; case i_MOVE16: //if ((opcode & 0xfff8) == 0xf620) { genmov16(opcode,curi); //} else { // isjump; // failure; //} break; case i_MMUOP030: case i_PFLUSHN: case i_PFLUSH: case i_PFLUSHAN: case i_PFLUSHA: case i_PLPAR: case i_PLPAW: case i_PTESTR: case i_PTESTW: case i_LPSTOP: isjump; failure; break; default: abort (); break; } comprintf("%s",endstr); finish_braces (); sync_m68k_pc (); if (global_mayfail) comprintf("\tif (failure) m68k_pc_offset=m68k_pc_offset_thisinst;\n"); return global_failure; } static void generate_includes (FILE * f, int bigger) { fprintf (f, "#include \"sysconfig.h\"\n"); fprintf (f, "#if defined(JIT)\n"); fprintf (f, "#include \"sysdeps.h\"\n"); if (bigger) fprintf (f, "#include \"options.h\"\n"); fprintf (f, "#include \"uae/memory.h\"\n"); fprintf (f, "#include \"newcpu.h\"\n"); fprintf (f, "#include \"comptbl.h\"\n"); } static int postfix; static void generate_one_opcode (int rp, int noflags) { int i; uae_u16 smsk, dmsk; long int opcode = opcode_map[rp]; int aborted=0; int have_srcreg=0; int have_dstreg=0; if (table68k[opcode].mnemo == i_ILLG || table68k[opcode].clev > cpu_level) return; for (i = 0; lookuptab[i].name[0]; i++) { if (table68k[opcode].mnemo == lookuptab[i].mnemo) break; } if (table68k[opcode].handler != -1) return; switch (table68k[opcode].stype) { case 0: smsk = 7; break; case 1: smsk = 255; break; case 2: smsk = 15; break; case 3: smsk = 7; break; case 4: smsk = 7; break; case 5: smsk = 63; break; case 7: smsk = 3; break; default: abort (); } dmsk = 7; next_cpu_level = -1; if (table68k[opcode].suse && table68k[opcode].smode != imm && table68k[opcode].smode != imm0 && table68k[opcode].smode != imm1 && table68k[opcode].smode != imm2 && table68k[opcode].smode != absw && table68k[opcode].smode != absl && table68k[opcode].smode != PC8r && table68k[opcode].smode != PC16) { have_srcreg=1; if (table68k[opcode].spos == -1) { if (((int) table68k[opcode].sreg) >= 128) comprintf ("\tuae_s32 srcreg = (uae_s32)(uae_s8)%d;\n", (int) table68k[opcode].sreg); else comprintf ("\tuae_s32 srcreg = %d;\n", (int) table68k[opcode].sreg); } else { char source[100]; int pos = table68k[opcode].spos; if (pos) sprintf (source, "((opcode >> %d) & %d)", pos, smsk); else sprintf (source, "(opcode & %d)", smsk); if (table68k[opcode].stype == 3) comprintf ("\tuae_s32 srcreg = imm8_table[%s];\n", source); else if (table68k[opcode].stype == 1) comprintf ("\tuae_s32 srcreg = (uae_s32)(uae_s8)%s;\n", source); else comprintf ("\tuae_s32 srcreg = %s;\n", source); } } if (table68k[opcode].duse /* Yes, the dmode can be imm, in case of LINK or DBcc */ && table68k[opcode].dmode != imm && table68k[opcode].dmode != imm0 && table68k[opcode].dmode != imm1 && table68k[opcode].dmode != imm2 && table68k[opcode].dmode != absw && table68k[opcode].dmode != absl) { have_dstreg=1; if (table68k[opcode].dpos == -1) { if (((int) table68k[opcode].dreg) >= 128) comprintf ("\tuae_s32 dstreg = (uae_s32)(uae_s8)%d;\n", (int) table68k[opcode].dreg); else comprintf ("\tuae_s32 dstreg = %d;\n", (int) table68k[opcode].dreg); } else { int pos = table68k[opcode].dpos; if (pos) comprintf ("\tuae_u32 dstreg = (opcode >> %d) & %d;\n", pos, dmsk); else comprintf ("\tuae_u32 dstreg = opcode & %d;\n", dmsk); } } if (have_srcreg && have_dstreg && (table68k[opcode].dmode==Areg || table68k[opcode].dmode==Aind || table68k[opcode].dmode==Aipi || table68k[opcode].dmode==Apdi || table68k[opcode].dmode==Ad16 || table68k[opcode].dmode==Ad8r) && (table68k[opcode].smode==Areg || table68k[opcode].smode==Aind || table68k[opcode].smode==Aipi || table68k[opcode].smode==Apdi || table68k[opcode].smode==Ad16 || table68k[opcode].smode==Ad8r) ) { comprintf("\tuae_u32 dodgy=(srcreg==(uae_s32)dstreg);\n"); } else { comprintf("\tuae_u32 dodgy=0;\n"); } comprintf("\tuae_u32 m68k_pc_offset_thisinst=m68k_pc_offset;\n"); comprintf("\tm68k_pc_offset+=2;\n"); aborted=gen_opcode (opcode); { int flags=0; if (global_isjump) flags|=1; if (long_opcode) flags|=2; if (global_cmov) flags|=4; if (global_isaddx) flags|=8; if (global_iscjump) flags|=16; comprintf ("return 0;\n"); comprintf ("}\n"); char name[100] = { 0 }; for (int k = 0; lookuptab[i].name[k]; k++) name[k] = lookuptab[i].name[k]; if (aborted) { fprintf (stblfile, "{ NULL, %ld, 0x%08x }, /* %s */\n", opcode, flags, name); com_discard(); } else { if (noflags) { fprintf (stblfile, "{ op_%lx_%d_comp_nf, %ld, 0x%08x }, /* %s */\n", opcode, postfix, opcode, flags, name); fprintf (headerfile, "extern compop_func op_%lx_%d_comp_nf;\n", opcode, postfix); printf ("uae_u32 REGPARAM2 op_%lx_%d_comp_nf(uae_u32 opcode) /* %s */\n{\n", opcode, postfix, name); } else { fprintf (stblfile, "{ op_%lx_%d_comp_ff, %ld, 0x%08x }, /* %s */\n", opcode, postfix, opcode, flags, name); fprintf (headerfile, "extern compop_func op_%lx_%d_comp_ff;\n", opcode, postfix); printf ("uae_u32 REGPARAM2 op_%lx_%d_comp_ff(uae_u32 opcode) /* %s */\n{\n", opcode, postfix, name); } com_flush(); } } opcode_next_clev[rp] = next_cpu_level; opcode_last_postfix[rp] = postfix; } static void generate_func (int noflags) { int i, j, rp; using_prefetch = 0; using_exception_3 = 0; for (i = 0; i < 1; i++) /* We only do one level! */ { cpu_level = 5 - i; postfix = i; if (noflags) fprintf (stblfile, "const struct comptbl op_smalltbl_%d_comp_nf[] = {\n", postfix); else fprintf (stblfile, "const struct comptbl op_smalltbl_%d_comp_ff[] = {\n", postfix); /* sam: this is for people with low memory (eg. me :)) */ printf ("\n" "#if !defined(PART_1) && !defined(PART_2) && " "!defined(PART_3) && !defined(PART_4) && " "!defined(PART_5) && !defined(PART_6) && " "!defined(PART_7) && !defined(PART_8)" "\n" "#define PART_1 1\n" "#define PART_2 1\n" "#define PART_3 1\n" "#define PART_4 1\n" "#define PART_5 1\n" "#define PART_6 1\n" "#define PART_7 1\n" "#define PART_8 1\n" "#endif\n\n" "extern void setzflg_l(uae_u32);\n" "extern void comp_fpp_opp();\n" "extern void comp_fscc_opp();\n" "extern void comp_fbcc_opp();\n\n"); rp = 0; for (j = 1; j <= 8; ++j) { int k = (j * nr_cpuop_funcs) / 8; printf ("#ifdef PART_%d\n", j); for (; rp < k; rp++) generate_one_opcode (rp,noflags); printf ("#endif\n\n"); } fprintf (stblfile, "{ 0, 65536, 0 }};\n"); } } int main (int argc, char **argv) { read_table68k (); do_merges (); opcode_map = xmalloc (int, nr_cpuop_funcs); opcode_last_postfix = xmalloc (int, nr_cpuop_funcs); opcode_next_clev = xmalloc (int, nr_cpuop_funcs); counts = xmalloc (unsigned long, 65536); read_counts (); /* It would be a lot nicer to put all in one file (we'd also get rid of * cputbl.h that way), but cpuopti can't cope. That could be fixed, but * I don't dare to touch the 68k version. */ headerfile = fopen ("jit/comptbl.h", "wb"); fprintf (headerfile, "" \ "#ifdef NOFLAGS_SUPPORT\n" \ "/* 68040 */\n" \ "extern const struct comptbl op_smalltbl_0_nf[];\n" \ "#endif\n" \ "extern const struct comptbl op_smalltbl_0_comp_nf[];\n" \ "extern const struct comptbl op_smalltbl_0_comp_ff[];\n" \ ""); stblfile = fopen ("jit/compstbl.cpp", "wb"); freopen ("jit/compemu.cpp", "wb", stdout); generate_includes (stdout, 1); generate_includes (stblfile, 1); printf("#include \"compemu.h\"\n"); noflags=0; generate_func (noflags); opcode_map = xmalloc (int, nr_cpuop_funcs); opcode_last_postfix = xmalloc (int, nr_cpuop_funcs); opcode_next_clev = xmalloc (int, nr_cpuop_funcs); counts = xmalloc (unsigned long, 65536); read_counts (); noflags=1; generate_func (noflags); printf ("#endif\n"); fprintf (stblfile, "#endif\n"); free (table68k); return 0; } fs-uae-2.2.3+dfsg/src/jit/compemu.cpp0000644000175000017500000650404512162366654017620 0ustar glaubitzglaubitz#include "sysconfig.h" #if defined(JIT) #include "sysdeps.h" #include "options.h" #include "uae/memory.h" #include "newcpu.h" #include "comptbl.h" #include "compemu.h" #if !defined(PART_1) && !defined(PART_2) && !defined(PART_3) && !defined(PART_4) && !defined(PART_5) && !defined(PART_6) && !defined(PART_7) && !defined(PART_8) #define PART_1 1 #define PART_2 1 #define PART_3 1 #define PART_4 1 #define PART_5 1 #define PART_6 1 #define PART_7 1 #define PART_8 1 #endif extern void setzflg_l(uae_u32); #ifdef PART_1 uae_u32 REGPARAM2 op_0_0_comp_ff(uae_u32 opcode) /* OR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dst=dstreg; dont_care_flags(); { start_needflags(); or_b(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_b_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_10_0_comp_ff(uae_u32 opcode) /* OR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); or_b(dst,src); live_flags(); end_needflags(); } writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_18_0_comp_ff(uae_u32 opcode) /* OR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,areg_byteinc[dstreg]); dont_care_flags(); { start_needflags(); or_b(dst,src); live_flags(); end_needflags(); } writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_20_0_comp_ff(uae_u32 opcode) /* OR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,(uae_s32)-areg_byteinc[dstreg]); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); or_b(dst,src); live_flags(); end_needflags(); } writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_28_0_comp_ff(uae_u32 opcode) /* OR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); or_b(dst,src); live_flags(); end_needflags(); } writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_30_0_comp_ff(uae_u32 opcode) /* OR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); or_b(dst,src); live_flags(); end_needflags(); } writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_38_0_comp_ff(uae_u32 opcode) /* OR */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); or_b(dst,src); live_flags(); end_needflags(); } writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_39_0_comp_ff(uae_u32 opcode) /* OR */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); or_b(dst,src); live_flags(); end_needflags(); } writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_40_0_comp_ff(uae_u32 opcode) /* OR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=dstreg; dont_care_flags(); { start_needflags(); or_w(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_w_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_50_0_comp_ff(uae_u32 opcode) /* OR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); or_w(dst,src); live_flags(); end_needflags(); } writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_58_0_comp_ff(uae_u32 opcode) /* OR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readword(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,2); dont_care_flags(); { start_needflags(); or_w(dst,src); live_flags(); end_needflags(); } writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_60_0_comp_ff(uae_u32 opcode) /* OR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-2); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); or_w(dst,src); live_flags(); end_needflags(); } writeword(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_68_0_comp_ff(uae_u32 opcode) /* OR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); or_w(dst,src); live_flags(); end_needflags(); } writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_70_0_comp_ff(uae_u32 opcode) /* OR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); or_w(dst,src); live_flags(); end_needflags(); } writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_78_0_comp_ff(uae_u32 opcode) /* OR */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); or_w(dst,src); live_flags(); end_needflags(); } writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_79_0_comp_ff(uae_u32 opcode) /* OR */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); or_w(dst,src); live_flags(); end_needflags(); } writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_80_0_comp_ff(uae_u32 opcode) /* OR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dst=dstreg; dont_care_flags(); { start_needflags(); or_l(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_90_0_comp_ff(uae_u32 opcode) /* OR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); or_l(dst,src); live_flags(); end_needflags(); } writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_98_0_comp_ff(uae_u32 opcode) /* OR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readlong(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,4); dont_care_flags(); { start_needflags(); or_l(dst,src); live_flags(); end_needflags(); } writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_a0_0_comp_ff(uae_u32 opcode) /* OR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-4); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); or_l(dst,src); live_flags(); end_needflags(); } writelong(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_a8_0_comp_ff(uae_u32 opcode) /* OR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); or_l(dst,src); live_flags(); end_needflags(); } writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b0_0_comp_ff(uae_u32 opcode) /* OR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); or_l(dst,src); live_flags(); end_needflags(); } writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b8_0_comp_ff(uae_u32 opcode) /* OR */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); or_l(dst,src); live_flags(); end_needflags(); } writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b9_0_comp_ff(uae_u32 opcode) /* OR */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); or_l(dst,src); live_flags(); end_needflags(); } writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_100_0_comp_ff(uae_u32 opcode) /* BTST */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dstreg; { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,31); bt_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_110_0_comp_ff(uae_u32 opcode) /* BTST */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bt_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_118_0_comp_ff(uae_u32 opcode) /* BTST */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,areg_byteinc[dstreg]); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bt_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_120_0_comp_ff(uae_u32 opcode) /* BTST */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,(uae_s32)-areg_byteinc[dstreg]); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bt_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_128_0_comp_ff(uae_u32 opcode) /* BTST */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bt_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_130_0_comp_ff(uae_u32 opcode) /* BTST */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bt_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_138_0_comp_ff(uae_u32 opcode) /* BTST */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bt_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_139_0_comp_ff(uae_u32 opcode) /* BTST */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bt_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_13a_0_comp_ff(uae_u32 opcode) /* BTST */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_s32 dstreg = 2; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(dsta,address+PC16off); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bt_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_13b_0_comp_ff(uae_u32 opcode) /* BTST */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_s32 dstreg = 3; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int pctmp=scratchie++; int dsta=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bt_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_13c_0_comp_ff(uae_u32 opcode) /* BTST */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst = scratchie++; mov_l_ri(dst,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bt_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_140_0_comp_ff(uae_u32 opcode) /* BCHG */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dstreg; { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,31); btc_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_150_0_comp_ff(uae_u32 opcode) /* BCHG */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); btc_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_158_0_comp_ff(uae_u32 opcode) /* BCHG */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,areg_byteinc[dstreg]); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); btc_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_160_0_comp_ff(uae_u32 opcode) /* BCHG */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,(uae_s32)-areg_byteinc[dstreg]); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); btc_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); writebyte(dsta,dst,scratchie); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_168_0_comp_ff(uae_u32 opcode) /* BCHG */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); btc_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_170_0_comp_ff(uae_u32 opcode) /* BCHG */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); btc_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_178_0_comp_ff(uae_u32 opcode) /* BCHG */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); btc_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_179_0_comp_ff(uae_u32 opcode) /* BCHG */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); btc_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_17a_0_comp_ff(uae_u32 opcode) /* BCHG */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_s32 dstreg = 2; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(dsta,address+PC16off); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); btc_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_17b_0_comp_ff(uae_u32 opcode) /* BCHG */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_s32 dstreg = 3; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int pctmp=scratchie++; int dsta=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); btc_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); writebyte(dsta,dst,scratchie); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_180_0_comp_ff(uae_u32 opcode) /* BCLR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dstreg; { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,31); btr_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_190_0_comp_ff(uae_u32 opcode) /* BCLR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); btr_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_198_0_comp_ff(uae_u32 opcode) /* BCLR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,areg_byteinc[dstreg]); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); btr_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1a0_0_comp_ff(uae_u32 opcode) /* BCLR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,(uae_s32)-areg_byteinc[dstreg]); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); btr_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); writebyte(dsta,dst,scratchie); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1a8_0_comp_ff(uae_u32 opcode) /* BCLR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); btr_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1b0_0_comp_ff(uae_u32 opcode) /* BCLR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); btr_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1b8_0_comp_ff(uae_u32 opcode) /* BCLR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); btr_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1b9_0_comp_ff(uae_u32 opcode) /* BCLR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); btr_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1ba_0_comp_ff(uae_u32 opcode) /* BCLR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_s32 dstreg = 2; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(dsta,address+PC16off); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); btr_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1bb_0_comp_ff(uae_u32 opcode) /* BCLR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_s32 dstreg = 3; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int pctmp=scratchie++; int dsta=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); btr_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); writebyte(dsta,dst,scratchie); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1c0_0_comp_ff(uae_u32 opcode) /* BSET */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dstreg; { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,31); bts_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1d0_0_comp_ff(uae_u32 opcode) /* BSET */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bts_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1d8_0_comp_ff(uae_u32 opcode) /* BSET */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,areg_byteinc[dstreg]); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bts_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1e0_0_comp_ff(uae_u32 opcode) /* BSET */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,(uae_s32)-areg_byteinc[dstreg]); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bts_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); writebyte(dsta,dst,scratchie); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1e8_0_comp_ff(uae_u32 opcode) /* BSET */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bts_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1f0_0_comp_ff(uae_u32 opcode) /* BSET */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bts_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1f8_0_comp_ff(uae_u32 opcode) /* BSET */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bts_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1f9_0_comp_ff(uae_u32 opcode) /* BSET */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bts_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1fa_0_comp_ff(uae_u32 opcode) /* BSET */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_s32 dstreg = 2; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(dsta,address+PC16off); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bts_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1fb_0_comp_ff(uae_u32 opcode) /* BSET */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_s32 dstreg = 3; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int pctmp=scratchie++; int dsta=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bts_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); writebyte(dsta,dst,scratchie); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_200_0_comp_ff(uae_u32 opcode) /* AND */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dst=dstreg; dont_care_flags(); { start_needflags(); and_b(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_b_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_210_0_comp_ff(uae_u32 opcode) /* AND */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); and_b(dst,src); live_flags(); end_needflags(); } writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_218_0_comp_ff(uae_u32 opcode) /* AND */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,areg_byteinc[dstreg]); dont_care_flags(); { start_needflags(); and_b(dst,src); live_flags(); end_needflags(); } writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_220_0_comp_ff(uae_u32 opcode) /* AND */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,(uae_s32)-areg_byteinc[dstreg]); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); and_b(dst,src); live_flags(); end_needflags(); } writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_228_0_comp_ff(uae_u32 opcode) /* AND */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); and_b(dst,src); live_flags(); end_needflags(); } writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_230_0_comp_ff(uae_u32 opcode) /* AND */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); and_b(dst,src); live_flags(); end_needflags(); } writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_238_0_comp_ff(uae_u32 opcode) /* AND */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); and_b(dst,src); live_flags(); end_needflags(); } writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_239_0_comp_ff(uae_u32 opcode) /* AND */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); and_b(dst,src); live_flags(); end_needflags(); } writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_240_0_comp_ff(uae_u32 opcode) /* AND */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=dstreg; dont_care_flags(); { start_needflags(); and_w(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_w_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_250_0_comp_ff(uae_u32 opcode) /* AND */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); and_w(dst,src); live_flags(); end_needflags(); } writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_258_0_comp_ff(uae_u32 opcode) /* AND */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readword(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,2); dont_care_flags(); { start_needflags(); and_w(dst,src); live_flags(); end_needflags(); } writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_260_0_comp_ff(uae_u32 opcode) /* AND */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-2); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); and_w(dst,src); live_flags(); end_needflags(); } writeword(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_268_0_comp_ff(uae_u32 opcode) /* AND */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); and_w(dst,src); live_flags(); end_needflags(); } writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_270_0_comp_ff(uae_u32 opcode) /* AND */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); and_w(dst,src); live_flags(); end_needflags(); } writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_278_0_comp_ff(uae_u32 opcode) /* AND */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); and_w(dst,src); live_flags(); end_needflags(); } writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_279_0_comp_ff(uae_u32 opcode) /* AND */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); and_w(dst,src); live_flags(); end_needflags(); } writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_280_0_comp_ff(uae_u32 opcode) /* AND */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dst=dstreg; dont_care_flags(); { start_needflags(); and_l(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_290_0_comp_ff(uae_u32 opcode) /* AND */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); and_l(dst,src); live_flags(); end_needflags(); } writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_298_0_comp_ff(uae_u32 opcode) /* AND */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readlong(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,4); dont_care_flags(); { start_needflags(); and_l(dst,src); live_flags(); end_needflags(); } writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2a0_0_comp_ff(uae_u32 opcode) /* AND */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-4); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); and_l(dst,src); live_flags(); end_needflags(); } writelong(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2a8_0_comp_ff(uae_u32 opcode) /* AND */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); and_l(dst,src); live_flags(); end_needflags(); } writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2b0_0_comp_ff(uae_u32 opcode) /* AND */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); and_l(dst,src); live_flags(); end_needflags(); } writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2b8_0_comp_ff(uae_u32 opcode) /* AND */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); and_l(dst,src); live_flags(); end_needflags(); } writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2b9_0_comp_ff(uae_u32 opcode) /* AND */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); and_l(dst,src); live_flags(); end_needflags(); } writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_400_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dst=dstreg; dont_care_flags(); start_needflags(); sub_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_410_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); start_needflags(); sub_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_418_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,areg_byteinc[dstreg]); dont_care_flags(); start_needflags(); sub_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_420_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,(uae_s32)-areg_byteinc[dstreg]); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); start_needflags(); sub_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_428_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); start_needflags(); sub_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_430_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); start_needflags(); sub_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_438_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); start_needflags(); sub_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_439_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); start_needflags(); sub_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_440_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=dstreg; dont_care_flags(); start_needflags(); sub_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_450_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); start_needflags(); sub_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_458_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readword(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,2); dont_care_flags(); start_needflags(); sub_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_460_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-2); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); start_needflags(); sub_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writeword(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_468_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); start_needflags(); sub_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_470_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); start_needflags(); sub_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_478_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); start_needflags(); sub_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_479_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); start_needflags(); sub_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_480_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dst=dstreg; dont_care_flags(); start_needflags(); sub_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_490_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); start_needflags(); sub_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_498_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readlong(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,4); dont_care_flags(); start_needflags(); sub_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4a0_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-4); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); start_needflags(); sub_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writelong(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4a8_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); start_needflags(); sub_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4b0_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); start_needflags(); sub_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4b8_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); start_needflags(); sub_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4b9_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); start_needflags(); sub_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_600_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dst=dstreg; dont_care_flags(); start_needflags(); add_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_610_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); start_needflags(); add_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_618_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,areg_byteinc[dstreg]); dont_care_flags(); start_needflags(); add_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_620_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,(uae_s32)-areg_byteinc[dstreg]); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); start_needflags(); add_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_628_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); start_needflags(); add_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_630_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); start_needflags(); add_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_638_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); start_needflags(); add_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_639_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); start_needflags(); add_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_640_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=dstreg; dont_care_flags(); start_needflags(); add_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_650_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); start_needflags(); add_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_658_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readword(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,2); dont_care_flags(); start_needflags(); add_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_660_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-2); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); start_needflags(); add_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writeword(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_668_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); start_needflags(); add_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_670_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); start_needflags(); add_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_678_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); start_needflags(); add_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_679_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); start_needflags(); add_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_680_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dst=dstreg; dont_care_flags(); start_needflags(); add_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_690_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); start_needflags(); add_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_698_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readlong(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,4); dont_care_flags(); start_needflags(); add_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6a0_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-4); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); start_needflags(); add_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writelong(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6a8_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); start_needflags(); add_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6b0_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); start_needflags(); add_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6b8_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); start_needflags(); add_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6b9_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); start_needflags(); add_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_800_0_comp_ff(uae_u32 opcode) /* BTST */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=dstreg; { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,31); bt_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_810_0_comp_ff(uae_u32 opcode) /* BTST */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bt_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_818_0_comp_ff(uae_u32 opcode) /* BTST */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,areg_byteinc[dstreg]); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bt_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_820_0_comp_ff(uae_u32 opcode) /* BTST */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,(uae_s32)-areg_byteinc[dstreg]); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bt_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_828_0_comp_ff(uae_u32 opcode) /* BTST */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bt_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_830_0_comp_ff(uae_u32 opcode) /* BTST */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bt_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_838_0_comp_ff(uae_u32 opcode) /* BTST */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bt_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_839_0_comp_ff(uae_u32 opcode) /* BTST */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bt_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_83a_0_comp_ff(uae_u32 opcode) /* BTST */ { uae_s32 dstreg = 2; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(dsta,address+PC16off); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bt_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_83b_0_comp_ff(uae_u32 opcode) /* BTST */ { uae_s32 dstreg = 3; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int pctmp=scratchie++; int dsta=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bt_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_83c_0_comp_ff(uae_u32 opcode) /* BTST */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst = scratchie++; mov_l_ri(dst,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bt_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_840_0_comp_ff(uae_u32 opcode) /* BCHG */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=dstreg; { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,31); btc_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_850_0_comp_ff(uae_u32 opcode) /* BCHG */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); btc_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_858_0_comp_ff(uae_u32 opcode) /* BCHG */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,areg_byteinc[dstreg]); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); btc_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_860_0_comp_ff(uae_u32 opcode) /* BCHG */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,(uae_s32)-areg_byteinc[dstreg]); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); btc_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); writebyte(dsta,dst,scratchie); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_868_0_comp_ff(uae_u32 opcode) /* BCHG */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); btc_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_870_0_comp_ff(uae_u32 opcode) /* BCHG */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); btc_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_878_0_comp_ff(uae_u32 opcode) /* BCHG */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); btc_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_879_0_comp_ff(uae_u32 opcode) /* BCHG */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); btc_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_87a_0_comp_ff(uae_u32 opcode) /* BCHG */ { uae_s32 dstreg = 2; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(dsta,address+PC16off); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); btc_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_87b_0_comp_ff(uae_u32 opcode) /* BCHG */ { uae_s32 dstreg = 3; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int pctmp=scratchie++; int dsta=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); btc_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); writebyte(dsta,dst,scratchie); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_880_0_comp_ff(uae_u32 opcode) /* BCLR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=dstreg; { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,31); btr_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_890_0_comp_ff(uae_u32 opcode) /* BCLR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); btr_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_898_0_comp_ff(uae_u32 opcode) /* BCLR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,areg_byteinc[dstreg]); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); btr_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8a0_0_comp_ff(uae_u32 opcode) /* BCLR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,(uae_s32)-areg_byteinc[dstreg]); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); btr_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); writebyte(dsta,dst,scratchie); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8a8_0_comp_ff(uae_u32 opcode) /* BCLR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); btr_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8b0_0_comp_ff(uae_u32 opcode) /* BCLR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); btr_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8b8_0_comp_ff(uae_u32 opcode) /* BCLR */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); btr_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8b9_0_comp_ff(uae_u32 opcode) /* BCLR */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); btr_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8ba_0_comp_ff(uae_u32 opcode) /* BCLR */ { uae_s32 dstreg = 2; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(dsta,address+PC16off); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); btr_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8bb_0_comp_ff(uae_u32 opcode) /* BCLR */ { uae_s32 dstreg = 3; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int pctmp=scratchie++; int dsta=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); btr_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); writebyte(dsta,dst,scratchie); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8c0_0_comp_ff(uae_u32 opcode) /* BSET */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=dstreg; { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,31); bts_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8d0_0_comp_ff(uae_u32 opcode) /* BSET */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bts_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8d8_0_comp_ff(uae_u32 opcode) /* BSET */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,areg_byteinc[dstreg]); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bts_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8e0_0_comp_ff(uae_u32 opcode) /* BSET */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,(uae_s32)-areg_byteinc[dstreg]); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bts_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); writebyte(dsta,dst,scratchie); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8e8_0_comp_ff(uae_u32 opcode) /* BSET */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bts_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8f0_0_comp_ff(uae_u32 opcode) /* BSET */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bts_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8f8_0_comp_ff(uae_u32 opcode) /* BSET */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bts_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8f9_0_comp_ff(uae_u32 opcode) /* BSET */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bts_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8fa_0_comp_ff(uae_u32 opcode) /* BSET */ { uae_s32 dstreg = 2; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(dsta,address+PC16off); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bts_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8fb_0_comp_ff(uae_u32 opcode) /* BSET */ { uae_s32 dstreg = 3; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int pctmp=scratchie++; int dsta=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bts_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); start_needflags(); setzflg_l(s); live_flags(); end_needflags(); writebyte(dsta,dst,scratchie); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_a00_0_comp_ff(uae_u32 opcode) /* EOR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dst=dstreg; dont_care_flags(); { start_needflags(); xor_b(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_b_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_a10_0_comp_ff(uae_u32 opcode) /* EOR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); xor_b(dst,src); live_flags(); end_needflags(); } writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_a18_0_comp_ff(uae_u32 opcode) /* EOR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,areg_byteinc[dstreg]); dont_care_flags(); { start_needflags(); xor_b(dst,src); live_flags(); end_needflags(); } writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_a20_0_comp_ff(uae_u32 opcode) /* EOR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,(uae_s32)-areg_byteinc[dstreg]); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); xor_b(dst,src); live_flags(); end_needflags(); } writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_a28_0_comp_ff(uae_u32 opcode) /* EOR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); xor_b(dst,src); live_flags(); end_needflags(); } writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_a30_0_comp_ff(uae_u32 opcode) /* EOR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); xor_b(dst,src); live_flags(); end_needflags(); } writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_a38_0_comp_ff(uae_u32 opcode) /* EOR */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); xor_b(dst,src); live_flags(); end_needflags(); } writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_a39_0_comp_ff(uae_u32 opcode) /* EOR */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); xor_b(dst,src); live_flags(); end_needflags(); } writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_a40_0_comp_ff(uae_u32 opcode) /* EOR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=dstreg; dont_care_flags(); { start_needflags(); xor_w(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_w_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_a50_0_comp_ff(uae_u32 opcode) /* EOR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); xor_w(dst,src); live_flags(); end_needflags(); } writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_a58_0_comp_ff(uae_u32 opcode) /* EOR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readword(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,2); dont_care_flags(); { start_needflags(); xor_w(dst,src); live_flags(); end_needflags(); } writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_a60_0_comp_ff(uae_u32 opcode) /* EOR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-2); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); xor_w(dst,src); live_flags(); end_needflags(); } writeword(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_a68_0_comp_ff(uae_u32 opcode) /* EOR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); xor_w(dst,src); live_flags(); end_needflags(); } writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_a70_0_comp_ff(uae_u32 opcode) /* EOR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); xor_w(dst,src); live_flags(); end_needflags(); } writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_a78_0_comp_ff(uae_u32 opcode) /* EOR */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); xor_w(dst,src); live_flags(); end_needflags(); } writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_a79_0_comp_ff(uae_u32 opcode) /* EOR */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); xor_w(dst,src); live_flags(); end_needflags(); } writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } #endif #ifdef PART_2 uae_u32 REGPARAM2 op_a80_0_comp_ff(uae_u32 opcode) /* EOR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dst=dstreg; dont_care_flags(); { start_needflags(); xor_l(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_a90_0_comp_ff(uae_u32 opcode) /* EOR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); xor_l(dst,src); live_flags(); end_needflags(); } writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_a98_0_comp_ff(uae_u32 opcode) /* EOR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readlong(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,4); dont_care_flags(); { start_needflags(); xor_l(dst,src); live_flags(); end_needflags(); } writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_aa0_0_comp_ff(uae_u32 opcode) /* EOR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-4); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); xor_l(dst,src); live_flags(); end_needflags(); } writelong(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_aa8_0_comp_ff(uae_u32 opcode) /* EOR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); xor_l(dst,src); live_flags(); end_needflags(); } writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_ab0_0_comp_ff(uae_u32 opcode) /* EOR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); xor_l(dst,src); live_flags(); end_needflags(); } writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_ab8_0_comp_ff(uae_u32 opcode) /* EOR */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); xor_l(dst,src); live_flags(); end_needflags(); } writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_ab9_0_comp_ff(uae_u32 opcode) /* EOR */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); xor_l(dst,src); live_flags(); end_needflags(); } writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c00_0_comp_ff(uae_u32 opcode) /* CMP */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dst=dstreg; { dont_care_flags(); start_needflags(); cmp_b(dst,src); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c10_0_comp_ff(uae_u32 opcode) /* CMP */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { dont_care_flags(); start_needflags(); cmp_b(dst,src); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c18_0_comp_ff(uae_u32 opcode) /* CMP */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,areg_byteinc[dstreg]); { dont_care_flags(); start_needflags(); cmp_b(dst,src); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c20_0_comp_ff(uae_u32 opcode) /* CMP */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,(uae_s32)-areg_byteinc[dstreg]); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { dont_care_flags(); start_needflags(); cmp_b(dst,src); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c28_0_comp_ff(uae_u32 opcode) /* CMP */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { dont_care_flags(); start_needflags(); cmp_b(dst,src); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c30_0_comp_ff(uae_u32 opcode) /* CMP */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { dont_care_flags(); start_needflags(); cmp_b(dst,src); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c38_0_comp_ff(uae_u32 opcode) /* CMP */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { dont_care_flags(); start_needflags(); cmp_b(dst,src); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c39_0_comp_ff(uae_u32 opcode) /* CMP */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readbyte(dsta,dst,scratchie); { dont_care_flags(); start_needflags(); cmp_b(dst,src); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c3a_0_comp_ff(uae_u32 opcode) /* CMP */ { uae_s32 dstreg = 2; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(dsta,address+PC16off); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { dont_care_flags(); start_needflags(); cmp_b(dst,src); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c3b_0_comp_ff(uae_u32 opcode) /* CMP */ { uae_s32 dstreg = 3; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int pctmp=scratchie++; int dsta=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { dont_care_flags(); start_needflags(); cmp_b(dst,src); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c40_0_comp_ff(uae_u32 opcode) /* CMP */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=dstreg; { dont_care_flags(); start_needflags(); cmp_w(dst,src); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c50_0_comp_ff(uae_u32 opcode) /* CMP */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readword(dsta,dst,scratchie); { dont_care_flags(); start_needflags(); cmp_w(dst,src); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c58_0_comp_ff(uae_u32 opcode) /* CMP */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readword(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,2); { dont_care_flags(); start_needflags(); cmp_w(dst,src); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c60_0_comp_ff(uae_u32 opcode) /* CMP */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-2); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readword(dsta,dst,scratchie); { dont_care_flags(); start_needflags(); cmp_w(dst,src); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c68_0_comp_ff(uae_u32 opcode) /* CMP */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readword(dsta,dst,scratchie); { dont_care_flags(); start_needflags(); cmp_w(dst,src); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c70_0_comp_ff(uae_u32 opcode) /* CMP */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readword(dsta,dst,scratchie); { dont_care_flags(); start_needflags(); cmp_w(dst,src); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c78_0_comp_ff(uae_u32 opcode) /* CMP */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readword(dsta,dst,scratchie); { dont_care_flags(); start_needflags(); cmp_w(dst,src); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c79_0_comp_ff(uae_u32 opcode) /* CMP */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readword(dsta,dst,scratchie); { dont_care_flags(); start_needflags(); cmp_w(dst,src); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c7a_0_comp_ff(uae_u32 opcode) /* CMP */ { uae_s32 dstreg = 2; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(dsta,address+PC16off); { int dst=scratchie++; readword(dsta,dst,scratchie); { dont_care_flags(); start_needflags(); cmp_w(dst,src); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c7b_0_comp_ff(uae_u32 opcode) /* CMP */ { uae_s32 dstreg = 3; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int pctmp=scratchie++; int dsta=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readword(dsta,dst,scratchie); { dont_care_flags(); start_needflags(); cmp_w(dst,src); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c80_0_comp_ff(uae_u32 opcode) /* CMP */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dst=dstreg; { dont_care_flags(); start_needflags(); cmp_l(dst,src); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c90_0_comp_ff(uae_u32 opcode) /* CMP */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readlong(dsta,dst,scratchie); { dont_care_flags(); start_needflags(); cmp_l(dst,src); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c98_0_comp_ff(uae_u32 opcode) /* CMP */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readlong(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,4); { dont_care_flags(); start_needflags(); cmp_l(dst,src); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_ca0_0_comp_ff(uae_u32 opcode) /* CMP */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-4); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readlong(dsta,dst,scratchie); { dont_care_flags(); start_needflags(); cmp_l(dst,src); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_ca8_0_comp_ff(uae_u32 opcode) /* CMP */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readlong(dsta,dst,scratchie); { dont_care_flags(); start_needflags(); cmp_l(dst,src); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_cb0_0_comp_ff(uae_u32 opcode) /* CMP */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readlong(dsta,dst,scratchie); { dont_care_flags(); start_needflags(); cmp_l(dst,src); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_cb8_0_comp_ff(uae_u32 opcode) /* CMP */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readlong(dsta,dst,scratchie); { dont_care_flags(); start_needflags(); cmp_l(dst,src); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_cb9_0_comp_ff(uae_u32 opcode) /* CMP */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readlong(dsta,dst,scratchie); { dont_care_flags(); start_needflags(); cmp_l(dst,src); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_cba_0_comp_ff(uae_u32 opcode) /* CMP */ { uae_s32 dstreg = 2; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(dsta,address+PC16off); { int dst=scratchie++; readlong(dsta,dst,scratchie); { dont_care_flags(); start_needflags(); cmp_l(dst,src); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_cbb_0_comp_ff(uae_u32 opcode) /* CMP */ { uae_s32 dstreg = 3; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int pctmp=scratchie++; int dsta=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readlong(dsta,dst,scratchie); { dont_care_flags(); start_needflags(); cmp_l(dst,src); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1000_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dstreg; dont_care_flags(); { if (src!=dst) { mov_b_ri(dst,0); start_needflags(); or_b(dst,src); } else { mov_b_rr(dst,src); test_b_rr(dst,dst); } live_flags(); end_needflags(); } if(dstreg!=dst) mov_b_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1010_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { if (src!=dst) { mov_b_ri(dst,0); start_needflags(); or_b(dst,src); } else { mov_b_rr(dst,src); test_b_rr(dst,dst); } live_flags(); end_needflags(); } if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1018_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); { int dst=dstreg; dont_care_flags(); { if (src!=dst) { mov_b_ri(dst,0); start_needflags(); or_b(dst,src); } else { mov_b_rr(dst,src); test_b_rr(dst,dst); } live_flags(); end_needflags(); } if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1020_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { if (src!=dst) { mov_b_ri(dst,0); start_needflags(); or_b(dst,src); } else { mov_b_rr(dst,src); test_b_rr(dst,dst); } live_flags(); end_needflags(); } if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1028_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { if (src!=dst) { mov_b_ri(dst,0); start_needflags(); or_b(dst,src); } else { mov_b_rr(dst,src); test_b_rr(dst,dst); } live_flags(); end_needflags(); } if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1030_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { if (src!=dst) { mov_b_ri(dst,0); start_needflags(); or_b(dst,src); } else { mov_b_rr(dst,src); test_b_rr(dst,dst); } live_flags(); end_needflags(); } if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1038_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { if (src!=dst) { mov_b_ri(dst,0); start_needflags(); or_b(dst,src); } else { mov_b_rr(dst,src); test_b_rr(dst,dst); } live_flags(); end_needflags(); } if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1039_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { if (src!=dst) { mov_b_ri(dst,0); start_needflags(); or_b(dst,src); } else { mov_b_rr(dst,src); test_b_rr(dst,dst); } live_flags(); end_needflags(); } if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_103a_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { if (src!=dst) { mov_b_ri(dst,0); start_needflags(); or_b(dst,src); } else { mov_b_rr(dst,src); test_b_rr(dst,dst); } live_flags(); end_needflags(); } if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_103b_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { if (src!=dst) { mov_b_ri(dst,0); start_needflags(); or_b(dst,src); } else { mov_b_rr(dst,src); test_b_rr(dst,dst); } live_flags(); end_needflags(); } if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_103c_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dst=dstreg; dont_care_flags(); { if (src!=dst) { mov_b_ri(dst,0); start_needflags(); or_b(dst,src); } else { mov_b_rr(dst,src); test_b_rr(dst,dst); } live_flags(); end_needflags(); } if(dstreg!=dst) mov_b_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1080_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1090_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1098_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_10a0_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_10a8_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_10b0_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_10b8_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_10b9_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_10ba_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_10bb_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_10bc_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_10c0_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); lea_l_brr(dstreg+8,dstreg+8,areg_byteinc[dstreg]); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_10d0_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); lea_l_brr(dstreg+8,dstreg+8,areg_byteinc[dstreg]); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_10d8_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); lea_l_brr(dstreg+8,dstreg+8,areg_byteinc[dstreg]); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_10e0_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); lea_l_brr(dstreg+8,dstreg+8,areg_byteinc[dstreg]); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_10e8_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); lea_l_brr(dstreg+8,dstreg+8,areg_byteinc[dstreg]); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_10f0_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); lea_l_brr(dstreg+8,dstreg+8,areg_byteinc[dstreg]); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_10f8_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); lea_l_brr(dstreg+8,dstreg+8,areg_byteinc[dstreg]); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_10f9_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); lea_l_brr(dstreg+8,dstreg+8,areg_byteinc[dstreg]); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_10fa_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); lea_l_brr(dstreg+8,dstreg+8,areg_byteinc[dstreg]); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_10fb_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); lea_l_brr(dstreg+8,dstreg+8,areg_byteinc[dstreg]); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_10fc_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); lea_l_brr(dstreg+8,dstreg+8,areg_byteinc[dstreg]); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1100_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,(uae_s32)-areg_byteinc[dstreg]); if (dodgy) mov_l_rr(dsta,8+dstreg); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1110_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,(uae_s32)-areg_byteinc[dstreg]); if (dodgy) mov_l_rr(dsta,8+dstreg); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1118_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,(uae_s32)-areg_byteinc[dstreg]); if (dodgy) mov_l_rr(dsta,8+dstreg); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1120_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readbyte(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,(uae_s32)-areg_byteinc[dstreg]); if (dodgy) mov_l_rr(dsta,8+dstreg); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1128_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readbyte(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,(uae_s32)-areg_byteinc[dstreg]); if (dodgy) mov_l_rr(dsta,8+dstreg); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1130_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readbyte(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,(uae_s32)-areg_byteinc[dstreg]); if (dodgy) mov_l_rr(dsta,8+dstreg); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1138_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readbyte(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,(uae_s32)-areg_byteinc[dstreg]); if (dodgy) mov_l_rr(dsta,8+dstreg); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1139_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readbyte(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,(uae_s32)-areg_byteinc[dstreg]); if (dodgy) mov_l_rr(dsta,8+dstreg); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_113a_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readbyte(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,(uae_s32)-areg_byteinc[dstreg]); if (dodgy) mov_l_rr(dsta,8+dstreg); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_113b_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readbyte(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,(uae_s32)-areg_byteinc[dstreg]); if (dodgy) mov_l_rr(dsta,8+dstreg); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_113c_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,(uae_s32)-areg_byteinc[dstreg]); if (dodgy) mov_l_rr(dsta,8+dstreg); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1140_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1150_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1158_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1160_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1168_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1170_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1178_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1179_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_117a_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_117b_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_117c_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1180_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1190_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1198_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_11a0_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_11a8_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_11b0_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_11b8_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_11b9_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_11ba_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_11bb_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_11bc_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_11c0_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_11d0_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_11d8_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_11e0_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_11e8_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_11f0_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_11f8_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_11f9_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_11fa_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_11fb_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_11fc_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_13c0_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_13d0_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_13d8_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_13e0_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_13e8_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_13f0_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_13f8_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_13f9_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_13fa_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_13fb_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_13fc_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); } writebyte(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2000_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dstreg; dont_care_flags(); { if (src!=dst) { mov_l_ri(dst,0); start_needflags(); or_l(dst,src); } else { mov_l_rr(dst,src); test_l_rr(dst,dst); } live_flags(); end_needflags(); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2008_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); { int dst=dstreg; dont_care_flags(); { if (src!=dst) { mov_l_ri(dst,0); start_needflags(); or_l(dst,src); } else { mov_l_rr(dst,src); test_l_rr(dst,dst); } live_flags(); end_needflags(); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2010_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { if (src!=dst) { mov_l_ri(dst,0); start_needflags(); or_l(dst,src); } else { mov_l_rr(dst,src); test_l_rr(dst,dst); } live_flags(); end_needflags(); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2018_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,4); { int dst=dstreg; dont_care_flags(); { if (src!=dst) { mov_l_ri(dst,0); start_needflags(); or_l(dst,src); } else { mov_l_rr(dst,src); test_l_rr(dst,dst); } live_flags(); end_needflags(); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2020_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-4); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { if (src!=dst) { mov_l_ri(dst,0); start_needflags(); or_l(dst,src); } else { mov_l_rr(dst,src); test_l_rr(dst,dst); } live_flags(); end_needflags(); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2028_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { if (src!=dst) { mov_l_ri(dst,0); start_needflags(); or_l(dst,src); } else { mov_l_rr(dst,src); test_l_rr(dst,dst); } live_flags(); end_needflags(); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2030_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { if (src!=dst) { mov_l_ri(dst,0); start_needflags(); or_l(dst,src); } else { mov_l_rr(dst,src); test_l_rr(dst,dst); } live_flags(); end_needflags(); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2038_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { if (src!=dst) { mov_l_ri(dst,0); start_needflags(); or_l(dst,src); } else { mov_l_rr(dst,src); test_l_rr(dst,dst); } live_flags(); end_needflags(); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2039_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { if (src!=dst) { mov_l_ri(dst,0); start_needflags(); or_l(dst,src); } else { mov_l_rr(dst,src); test_l_rr(dst,dst); } live_flags(); end_needflags(); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_203a_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { if (src!=dst) { mov_l_ri(dst,0); start_needflags(); or_l(dst,src); } else { mov_l_rr(dst,src); test_l_rr(dst,dst); } live_flags(); end_needflags(); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_203b_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { if (src!=dst) { mov_l_ri(dst,0); start_needflags(); or_l(dst,src); } else { mov_l_rr(dst,src); test_l_rr(dst,dst); } live_flags(); end_needflags(); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_203c_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dst=dstreg; dont_care_flags(); { if (src!=dst) { mov_l_ri(dst,0); start_needflags(); or_l(dst,src); } else { mov_l_rr(dst,src); test_l_rr(dst,dst); } live_flags(); end_needflags(); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2040_0_comp_ff(uae_u32 opcode) /* MOVEA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dodgy?scratchie++:dstreg+8; { int tmps=scratchie++; mov_l_rr(dst,src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2048_0_comp_ff(uae_u32 opcode) /* MOVEA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); { int dst=dodgy?scratchie++:dstreg+8; { int tmps=scratchie++; mov_l_rr(dst,src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2050_0_comp_ff(uae_u32 opcode) /* MOVEA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; { int tmps=scratchie++; mov_l_rr(dst,src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2058_0_comp_ff(uae_u32 opcode) /* MOVEA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,4); { int dst=dodgy?scratchie++:dstreg+8; { int tmps=scratchie++; mov_l_rr(dst,src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2060_0_comp_ff(uae_u32 opcode) /* MOVEA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-4); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; { int tmps=scratchie++; mov_l_rr(dst,src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2068_0_comp_ff(uae_u32 opcode) /* MOVEA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; { int tmps=scratchie++; mov_l_rr(dst,src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2070_0_comp_ff(uae_u32 opcode) /* MOVEA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; { int tmps=scratchie++; mov_l_rr(dst,src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2078_0_comp_ff(uae_u32 opcode) /* MOVEA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; { int tmps=scratchie++; mov_l_rr(dst,src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2079_0_comp_ff(uae_u32 opcode) /* MOVEA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; { int tmps=scratchie++; mov_l_rr(dst,src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_207a_0_comp_ff(uae_u32 opcode) /* MOVEA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; { int tmps=scratchie++; mov_l_rr(dst,src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_207b_0_comp_ff(uae_u32 opcode) /* MOVEA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; { int tmps=scratchie++; mov_l_rr(dst,src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_207c_0_comp_ff(uae_u32 opcode) /* MOVEA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dst=dodgy?scratchie++:dstreg+8; { int tmps=scratchie++; mov_l_rr(dst,src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2080_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2088_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2090_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2098_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,4); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_20a0_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-4); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_20a8_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_20b0_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_20b8_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_20b9_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readlong(srca,src,scratchie); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_20ba_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_20bb_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_20bc_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_20c0_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); lea_l_brr(dstreg+8,dstreg+8,4); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_20c8_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); lea_l_brr(dstreg+8,dstreg+8,4); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_20d0_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); lea_l_brr(dstreg+8,dstreg+8,4); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_20d8_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,4); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); lea_l_brr(dstreg+8,dstreg+8,4); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_20e0_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-4); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); lea_l_brr(dstreg+8,dstreg+8,4); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_20e8_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); lea_l_brr(dstreg+8,dstreg+8,4); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_20f0_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); lea_l_brr(dstreg+8,dstreg+8,4); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_20f8_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); lea_l_brr(dstreg+8,dstreg+8,4); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_20f9_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readlong(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); lea_l_brr(dstreg+8,dstreg+8,4); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_20fa_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); lea_l_brr(dstreg+8,dstreg+8,4); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_20fb_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); lea_l_brr(dstreg+8,dstreg+8,4); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_20fc_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); lea_l_brr(dstreg+8,dstreg+8,4); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2100_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-4); if (dodgy) mov_l_rr(dsta,8+dstreg); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2108_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-4); if (dodgy) mov_l_rr(dsta,8+dstreg); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2110_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-4); if (dodgy) mov_l_rr(dsta,8+dstreg); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2118_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,4); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-4); if (dodgy) mov_l_rr(dsta,8+dstreg); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2120_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-4); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readlong(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-4); if (dodgy) mov_l_rr(dsta,8+dstreg); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2128_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-4); if (dodgy) mov_l_rr(dsta,8+dstreg); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2130_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-4); if (dodgy) mov_l_rr(dsta,8+dstreg); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2138_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-4); if (dodgy) mov_l_rr(dsta,8+dstreg); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2139_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readlong(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-4); if (dodgy) mov_l_rr(dsta,8+dstreg); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_213a_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readlong(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-4); if (dodgy) mov_l_rr(dsta,8+dstreg); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_213b_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-4); if (dodgy) mov_l_rr(dsta,8+dstreg); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_213c_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-4); if (dodgy) mov_l_rr(dsta,8+dstreg); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2140_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2148_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2150_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2158_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,4); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2160_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-4); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } #endif #ifdef PART_3 uae_u32 REGPARAM2 op_2168_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2170_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2178_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2179_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readlong(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_217a_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_217b_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_217c_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2180_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2188_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2190_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2198_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,4); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_21a0_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-4); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_21a8_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_21b0_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_21b8_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_21b9_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readlong(srca,src,scratchie); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_21ba_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_21bb_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_21bc_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_21c0_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_21c8_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_21d0_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_21d8_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,4); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_21e0_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-4); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_21e8_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_21f0_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_21f8_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_21f9_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readlong(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_21fa_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_21fb_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_21fc_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_23c0_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_23c8_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_23d0_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_23d8_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,4); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_23e0_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-4); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_23e8_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_23f0_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_23f8_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_23f9_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readlong(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_23fa_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_23fb_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_23fc_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } writelong(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3000_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dstreg; dont_care_flags(); { if (src!=dst) { mov_w_ri(dst,0); start_needflags(); or_w(dst,src); } else { mov_w_rr(dst,src); test_w_rr(dst,dst); } live_flags(); end_needflags(); } if(dstreg!=dst) mov_w_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3008_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); { int dst=dstreg; dont_care_flags(); { if (src!=dst) { mov_w_ri(dst,0); start_needflags(); or_w(dst,src); } else { mov_w_rr(dst,src); test_w_rr(dst,dst); } live_flags(); end_needflags(); } if(dstreg!=dst) mov_w_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3010_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { if (src!=dst) { mov_w_ri(dst,0); start_needflags(); or_w(dst,src); } else { mov_w_rr(dst,src); test_w_rr(dst,dst); } live_flags(); end_needflags(); } if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3018_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,2); { int dst=dstreg; dont_care_flags(); { if (src!=dst) { mov_w_ri(dst,0); start_needflags(); or_w(dst,src); } else { mov_w_rr(dst,src); test_w_rr(dst,dst); } live_flags(); end_needflags(); } if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3020_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-2); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { if (src!=dst) { mov_w_ri(dst,0); start_needflags(); or_w(dst,src); } else { mov_w_rr(dst,src); test_w_rr(dst,dst); } live_flags(); end_needflags(); } if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3028_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { if (src!=dst) { mov_w_ri(dst,0); start_needflags(); or_w(dst,src); } else { mov_w_rr(dst,src); test_w_rr(dst,dst); } live_flags(); end_needflags(); } if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3030_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { if (src!=dst) { mov_w_ri(dst,0); start_needflags(); or_w(dst,src); } else { mov_w_rr(dst,src); test_w_rr(dst,dst); } live_flags(); end_needflags(); } if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3038_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { if (src!=dst) { mov_w_ri(dst,0); start_needflags(); or_w(dst,src); } else { mov_w_rr(dst,src); test_w_rr(dst,dst); } live_flags(); end_needflags(); } if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3039_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { if (src!=dst) { mov_w_ri(dst,0); start_needflags(); or_w(dst,src); } else { mov_w_rr(dst,src); test_w_rr(dst,dst); } live_flags(); end_needflags(); } if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_303a_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { if (src!=dst) { mov_w_ri(dst,0); start_needflags(); or_w(dst,src); } else { mov_w_rr(dst,src); test_w_rr(dst,dst); } live_flags(); end_needflags(); } if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_303b_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { if (src!=dst) { mov_w_ri(dst,0); start_needflags(); or_w(dst,src); } else { mov_w_rr(dst,src); test_w_rr(dst,dst); } live_flags(); end_needflags(); } if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_303c_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=dstreg; dont_care_flags(); { if (src!=dst) { mov_w_ri(dst,0); start_needflags(); or_w(dst,src); } else { mov_w_rr(dst,src); test_w_rr(dst,dst); } live_flags(); end_needflags(); } if(dstreg!=dst) mov_w_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3040_0_comp_ff(uae_u32 opcode) /* MOVEA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dodgy?scratchie++:dstreg+8; { int tmps=scratchie++; sign_extend_16_rr(dst,src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3048_0_comp_ff(uae_u32 opcode) /* MOVEA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); { int dst=dodgy?scratchie++:dstreg+8; { int tmps=scratchie++; sign_extend_16_rr(dst,src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3050_0_comp_ff(uae_u32 opcode) /* MOVEA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; { int tmps=scratchie++; sign_extend_16_rr(dst,src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3058_0_comp_ff(uae_u32 opcode) /* MOVEA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,2); { int dst=dodgy?scratchie++:dstreg+8; { int tmps=scratchie++; sign_extend_16_rr(dst,src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3060_0_comp_ff(uae_u32 opcode) /* MOVEA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-2); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; { int tmps=scratchie++; sign_extend_16_rr(dst,src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3068_0_comp_ff(uae_u32 opcode) /* MOVEA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; { int tmps=scratchie++; sign_extend_16_rr(dst,src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3070_0_comp_ff(uae_u32 opcode) /* MOVEA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; { int tmps=scratchie++; sign_extend_16_rr(dst,src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3078_0_comp_ff(uae_u32 opcode) /* MOVEA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; { int tmps=scratchie++; sign_extend_16_rr(dst,src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3079_0_comp_ff(uae_u32 opcode) /* MOVEA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; { int tmps=scratchie++; sign_extend_16_rr(dst,src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_307a_0_comp_ff(uae_u32 opcode) /* MOVEA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; { int tmps=scratchie++; sign_extend_16_rr(dst,src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_307b_0_comp_ff(uae_u32 opcode) /* MOVEA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; { int tmps=scratchie++; sign_extend_16_rr(dst,src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_307c_0_comp_ff(uae_u32 opcode) /* MOVEA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=dodgy?scratchie++:dstreg+8; { int tmps=scratchie++; sign_extend_16_rr(dst,src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3080_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3088_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3090_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3098_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,2); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_30a0_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-2); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readword(srca,src,scratchie); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_30a8_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_30b0_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_30b8_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_30b9_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readword(srca,src,scratchie); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_30ba_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readword(srca,src,scratchie); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_30bb_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_30bc_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_30c0_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); lea_l_brr(dstreg+8,dstreg+8,2); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_30c8_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); lea_l_brr(dstreg+8,dstreg+8,2); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_30d0_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); lea_l_brr(dstreg+8,dstreg+8,2); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_30d8_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,2); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); lea_l_brr(dstreg+8,dstreg+8,2); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_30e0_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-2); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readword(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); lea_l_brr(dstreg+8,dstreg+8,2); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_30e8_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); lea_l_brr(dstreg+8,dstreg+8,2); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_30f0_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); lea_l_brr(dstreg+8,dstreg+8,2); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_30f8_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); lea_l_brr(dstreg+8,dstreg+8,2); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_30f9_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readword(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); lea_l_brr(dstreg+8,dstreg+8,2); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_30fa_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readword(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); lea_l_brr(dstreg+8,dstreg+8,2); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_30fb_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); lea_l_brr(dstreg+8,dstreg+8,2); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_30fc_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); lea_l_brr(dstreg+8,dstreg+8,2); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3100_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-2); if (dodgy) mov_l_rr(dsta,8+dstreg); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3108_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-2); if (dodgy) mov_l_rr(dsta,8+dstreg); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3110_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-2); if (dodgy) mov_l_rr(dsta,8+dstreg); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3118_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,2); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-2); if (dodgy) mov_l_rr(dsta,8+dstreg); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3120_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-2); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readword(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-2); if (dodgy) mov_l_rr(dsta,8+dstreg); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3128_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-2); if (dodgy) mov_l_rr(dsta,8+dstreg); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3130_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-2); if (dodgy) mov_l_rr(dsta,8+dstreg); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3138_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-2); if (dodgy) mov_l_rr(dsta,8+dstreg); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3139_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readword(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-2); if (dodgy) mov_l_rr(dsta,8+dstreg); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_313a_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readword(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-2); if (dodgy) mov_l_rr(dsta,8+dstreg); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_313b_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-2); if (dodgy) mov_l_rr(dsta,8+dstreg); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_313c_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-2); if (dodgy) mov_l_rr(dsta,8+dstreg); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3140_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3148_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3150_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3158_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,2); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3160_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-2); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readword(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3168_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3170_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3178_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3179_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readword(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_317a_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readword(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_317b_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_317c_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3180_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3188_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3190_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3198_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,2); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_31a0_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-2); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readword(srca,src,scratchie); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_31a8_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_31b0_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_31b8_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_31b9_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readword(srca,src,scratchie); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_31ba_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readword(srca,src,scratchie); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_31bb_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_31bc_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_31c0_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_31c8_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_31d0_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_31d8_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,2); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_31e0_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-2); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readword(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_31e8_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_31f0_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_31f8_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_31f9_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readword(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_31fa_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readword(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_31fb_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_31fc_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_33c0_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_33c8_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_33d0_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_33d8_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,2); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_33e0_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-2); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readword(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_33e8_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_33f0_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_33f8_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_33f9_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readword(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_33fa_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readword(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_33fb_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_33fc_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); } writeword(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4000_0_comp_ff(uae_u32 opcode) /* NEGX */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); { int zero=scratchie++; int one=scratchie++; if (needed_flags&FLAG_Z) { mov_l_ri(zero,0); mov_l_ri(one,1); make_flags_live(); cmov_l_rr(zero,one,5); } restore_carry(); start_needflags(); sbb_b(dst,src); live_flags(); if (needed_flags&FLAG_Z) { cmov_l_rr(zero,one,5); setzflg_l(zero); live_flags(); } end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(srcreg!=dst) mov_b_rr(srcreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4010_0_comp_ff(uae_u32 opcode) /* NEGX */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); { int zero=scratchie++; int one=scratchie++; if (needed_flags&FLAG_Z) { mov_l_ri(zero,0); mov_l_ri(one,1); make_flags_live(); cmov_l_rr(zero,one,5); } restore_carry(); start_needflags(); sbb_b(dst,src); live_flags(); if (needed_flags&FLAG_Z) { cmov_l_rr(zero,one,5); setzflg_l(zero); live_flags(); } end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writebyte(srca,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4018_0_comp_ff(uae_u32 opcode) /* NEGX */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); { int zero=scratchie++; int one=scratchie++; if (needed_flags&FLAG_Z) { mov_l_ri(zero,0); mov_l_ri(one,1); make_flags_live(); cmov_l_rr(zero,one,5); } restore_carry(); start_needflags(); sbb_b(dst,src); live_flags(); if (needed_flags&FLAG_Z) { cmov_l_rr(zero,one,5); setzflg_l(zero); live_flags(); } end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writebyte(srca,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4020_0_comp_ff(uae_u32 opcode) /* NEGX */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); { int zero=scratchie++; int one=scratchie++; if (needed_flags&FLAG_Z) { mov_l_ri(zero,0); mov_l_ri(one,1); make_flags_live(); cmov_l_rr(zero,one,5); } restore_carry(); start_needflags(); sbb_b(dst,src); live_flags(); if (needed_flags&FLAG_Z) { cmov_l_rr(zero,one,5); setzflg_l(zero); live_flags(); } end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writebyte(srca,dst,scratchie); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4028_0_comp_ff(uae_u32 opcode) /* NEGX */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); { int zero=scratchie++; int one=scratchie++; if (needed_flags&FLAG_Z) { mov_l_ri(zero,0); mov_l_ri(one,1); make_flags_live(); cmov_l_rr(zero,one,5); } restore_carry(); start_needflags(); sbb_b(dst,src); live_flags(); if (needed_flags&FLAG_Z) { cmov_l_rr(zero,one,5); setzflg_l(zero); live_flags(); } end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writebyte(srca,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4030_0_comp_ff(uae_u32 opcode) /* NEGX */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); { int zero=scratchie++; int one=scratchie++; if (needed_flags&FLAG_Z) { mov_l_ri(zero,0); mov_l_ri(one,1); make_flags_live(); cmov_l_rr(zero,one,5); } restore_carry(); start_needflags(); sbb_b(dst,src); live_flags(); if (needed_flags&FLAG_Z) { cmov_l_rr(zero,one,5); setzflg_l(zero); live_flags(); } end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writebyte(srca,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4038_0_comp_ff(uae_u32 opcode) /* NEGX */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); { int zero=scratchie++; int one=scratchie++; if (needed_flags&FLAG_Z) { mov_l_ri(zero,0); mov_l_ri(one,1); make_flags_live(); cmov_l_rr(zero,one,5); } restore_carry(); start_needflags(); sbb_b(dst,src); live_flags(); if (needed_flags&FLAG_Z) { cmov_l_rr(zero,one,5); setzflg_l(zero); live_flags(); } end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writebyte(srca,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4039_0_comp_ff(uae_u32 opcode) /* NEGX */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); { int zero=scratchie++; int one=scratchie++; if (needed_flags&FLAG_Z) { mov_l_ri(zero,0); mov_l_ri(one,1); make_flags_live(); cmov_l_rr(zero,one,5); } restore_carry(); start_needflags(); sbb_b(dst,src); live_flags(); if (needed_flags&FLAG_Z) { cmov_l_rr(zero,one,5); setzflg_l(zero); live_flags(); } end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writebyte(srca,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4040_0_comp_ff(uae_u32 opcode) /* NEGX */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); { int zero=scratchie++; int one=scratchie++; if (needed_flags&FLAG_Z) { mov_l_ri(zero,0); mov_l_ri(one,1); make_flags_live(); cmov_l_rr(zero,one,5); } restore_carry(); start_needflags(); sbb_w(dst,src); live_flags(); if (needed_flags&FLAG_Z) { cmov_l_rr(zero,one,5); setzflg_l(zero); live_flags(); } end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(srcreg!=dst) mov_w_rr(srcreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4050_0_comp_ff(uae_u32 opcode) /* NEGX */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); { int zero=scratchie++; int one=scratchie++; if (needed_flags&FLAG_Z) { mov_l_ri(zero,0); mov_l_ri(one,1); make_flags_live(); cmov_l_rr(zero,one,5); } restore_carry(); start_needflags(); sbb_w(dst,src); live_flags(); if (needed_flags&FLAG_Z) { cmov_l_rr(zero,one,5); setzflg_l(zero); live_flags(); } end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writeword(srca,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4058_0_comp_ff(uae_u32 opcode) /* NEGX */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,2); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); { int zero=scratchie++; int one=scratchie++; if (needed_flags&FLAG_Z) { mov_l_ri(zero,0); mov_l_ri(one,1); make_flags_live(); cmov_l_rr(zero,one,5); } restore_carry(); start_needflags(); sbb_w(dst,src); live_flags(); if (needed_flags&FLAG_Z) { cmov_l_rr(zero,one,5); setzflg_l(zero); live_flags(); } end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writeword(srca,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4060_0_comp_ff(uae_u32 opcode) /* NEGX */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-2); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readword(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); { int zero=scratchie++; int one=scratchie++; if (needed_flags&FLAG_Z) { mov_l_ri(zero,0); mov_l_ri(one,1); make_flags_live(); cmov_l_rr(zero,one,5); } restore_carry(); start_needflags(); sbb_w(dst,src); live_flags(); if (needed_flags&FLAG_Z) { cmov_l_rr(zero,one,5); setzflg_l(zero); live_flags(); } end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writeword(srca,dst,scratchie); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4068_0_comp_ff(uae_u32 opcode) /* NEGX */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); { int zero=scratchie++; int one=scratchie++; if (needed_flags&FLAG_Z) { mov_l_ri(zero,0); mov_l_ri(one,1); make_flags_live(); cmov_l_rr(zero,one,5); } restore_carry(); start_needflags(); sbb_w(dst,src); live_flags(); if (needed_flags&FLAG_Z) { cmov_l_rr(zero,one,5); setzflg_l(zero); live_flags(); } end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writeword(srca,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4070_0_comp_ff(uae_u32 opcode) /* NEGX */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); { int zero=scratchie++; int one=scratchie++; if (needed_flags&FLAG_Z) { mov_l_ri(zero,0); mov_l_ri(one,1); make_flags_live(); cmov_l_rr(zero,one,5); } restore_carry(); start_needflags(); sbb_w(dst,src); live_flags(); if (needed_flags&FLAG_Z) { cmov_l_rr(zero,one,5); setzflg_l(zero); live_flags(); } end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writeword(srca,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4078_0_comp_ff(uae_u32 opcode) /* NEGX */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); { int zero=scratchie++; int one=scratchie++; if (needed_flags&FLAG_Z) { mov_l_ri(zero,0); mov_l_ri(one,1); make_flags_live(); cmov_l_rr(zero,one,5); } restore_carry(); start_needflags(); sbb_w(dst,src); live_flags(); if (needed_flags&FLAG_Z) { cmov_l_rr(zero,one,5); setzflg_l(zero); live_flags(); } end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writeword(srca,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4079_0_comp_ff(uae_u32 opcode) /* NEGX */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readword(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); { int zero=scratchie++; int one=scratchie++; if (needed_flags&FLAG_Z) { mov_l_ri(zero,0); mov_l_ri(one,1); make_flags_live(); cmov_l_rr(zero,one,5); } restore_carry(); start_needflags(); sbb_w(dst,src); live_flags(); if (needed_flags&FLAG_Z) { cmov_l_rr(zero,one,5); setzflg_l(zero); live_flags(); } end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writeword(srca,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4080_0_comp_ff(uae_u32 opcode) /* NEGX */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); { int zero=scratchie++; int one=scratchie++; if (needed_flags&FLAG_Z) { mov_l_ri(zero,0); mov_l_ri(one,1); make_flags_live(); cmov_l_rr(zero,one,5); } restore_carry(); start_needflags(); sbb_l(dst,src); live_flags(); if (needed_flags&FLAG_Z) { cmov_l_rr(zero,one,5); setzflg_l(zero); live_flags(); } end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(srcreg!=dst) mov_l_rr(srcreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4090_0_comp_ff(uae_u32 opcode) /* NEGX */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); { int zero=scratchie++; int one=scratchie++; if (needed_flags&FLAG_Z) { mov_l_ri(zero,0); mov_l_ri(one,1); make_flags_live(); cmov_l_rr(zero,one,5); } restore_carry(); start_needflags(); sbb_l(dst,src); live_flags(); if (needed_flags&FLAG_Z) { cmov_l_rr(zero,one,5); setzflg_l(zero); live_flags(); } end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writelong(srca,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4098_0_comp_ff(uae_u32 opcode) /* NEGX */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,4); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); { int zero=scratchie++; int one=scratchie++; if (needed_flags&FLAG_Z) { mov_l_ri(zero,0); mov_l_ri(one,1); make_flags_live(); cmov_l_rr(zero,one,5); } restore_carry(); start_needflags(); sbb_l(dst,src); live_flags(); if (needed_flags&FLAG_Z) { cmov_l_rr(zero,one,5); setzflg_l(zero); live_flags(); } end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writelong(srca,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_40a0_0_comp_ff(uae_u32 opcode) /* NEGX */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-4); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); { int zero=scratchie++; int one=scratchie++; if (needed_flags&FLAG_Z) { mov_l_ri(zero,0); mov_l_ri(one,1); make_flags_live(); cmov_l_rr(zero,one,5); } restore_carry(); start_needflags(); sbb_l(dst,src); live_flags(); if (needed_flags&FLAG_Z) { cmov_l_rr(zero,one,5); setzflg_l(zero); live_flags(); } end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writelong(srca,dst,scratchie); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_40a8_0_comp_ff(uae_u32 opcode) /* NEGX */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); { int zero=scratchie++; int one=scratchie++; if (needed_flags&FLAG_Z) { mov_l_ri(zero,0); mov_l_ri(one,1); make_flags_live(); cmov_l_rr(zero,one,5); } restore_carry(); start_needflags(); sbb_l(dst,src); live_flags(); if (needed_flags&FLAG_Z) { cmov_l_rr(zero,one,5); setzflg_l(zero); live_flags(); } end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writelong(srca,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_40b0_0_comp_ff(uae_u32 opcode) /* NEGX */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); { int zero=scratchie++; int one=scratchie++; if (needed_flags&FLAG_Z) { mov_l_ri(zero,0); mov_l_ri(one,1); make_flags_live(); cmov_l_rr(zero,one,5); } restore_carry(); start_needflags(); sbb_l(dst,src); live_flags(); if (needed_flags&FLAG_Z) { cmov_l_rr(zero,one,5); setzflg_l(zero); live_flags(); } end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writelong(srca,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_40b8_0_comp_ff(uae_u32 opcode) /* NEGX */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); { int zero=scratchie++; int one=scratchie++; if (needed_flags&FLAG_Z) { mov_l_ri(zero,0); mov_l_ri(one,1); make_flags_live(); cmov_l_rr(zero,one,5); } restore_carry(); start_needflags(); sbb_l(dst,src); live_flags(); if (needed_flags&FLAG_Z) { cmov_l_rr(zero,one,5); setzflg_l(zero); live_flags(); } end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writelong(srca,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_40b9_0_comp_ff(uae_u32 opcode) /* NEGX */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readlong(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); { int zero=scratchie++; int one=scratchie++; if (needed_flags&FLAG_Z) { mov_l_ri(zero,0); mov_l_ri(one,1); make_flags_live(); cmov_l_rr(zero,one,5); } restore_carry(); start_needflags(); sbb_l(dst,src); live_flags(); if (needed_flags&FLAG_Z) { cmov_l_rr(zero,one,5); setzflg_l(zero); live_flags(); } end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writelong(srca,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_41d0_0_comp_ff(uae_u32 opcode) /* LEA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int dst=dodgy?scratchie++:dstreg+8; if(dstreg+8!=srca) mov_l_rr(dstreg+8,srca); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_41e8_0_comp_ff(uae_u32 opcode) /* LEA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=dodgy?scratchie++:dstreg+8; if(dstreg+8!=srca) mov_l_rr(dstreg+8,srca); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_41f0_0_comp_ff(uae_u32 opcode) /* LEA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if(dstreg+8!=srca) mov_l_rr(dstreg+8,srca); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_41f8_0_comp_ff(uae_u32 opcode) /* LEA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=dodgy?scratchie++:dstreg+8; if(dstreg+8!=srca) mov_l_rr(dstreg+8,srca); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_41f9_0_comp_ff(uae_u32 opcode) /* LEA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=dodgy?scratchie++:dstreg+8; if(dstreg+8!=srca) mov_l_rr(dstreg+8,srca); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_41fa_0_comp_ff(uae_u32 opcode) /* LEA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int dst=dodgy?scratchie++:dstreg+8; if(dstreg+8!=srca) mov_l_rr(dstreg+8,srca); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_41fb_0_comp_ff(uae_u32 opcode) /* LEA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if(dstreg+8!=srca) mov_l_rr(dstreg+8,srca); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4200_0_comp_ff(uae_u32 opcode) /* CLR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); { start_needflags(); test_b_rr(dst,dst); live_flags(); end_needflags(); } if(srcreg!=dst) mov_b_rr(srcreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4210_0_comp_ff(uae_u32 opcode) /* CLR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); { start_needflags(); test_b_rr(dst,dst); live_flags(); end_needflags(); } writebyte(srca,dst,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4218_0_comp_ff(uae_u32 opcode) /* CLR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); { start_needflags(); test_b_rr(dst,dst); live_flags(); end_needflags(); } writebyte(srca,dst,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4220_0_comp_ff(uae_u32 opcode) /* CLR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); { start_needflags(); test_b_rr(dst,dst); live_flags(); end_needflags(); } writebyte(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4228_0_comp_ff(uae_u32 opcode) /* CLR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); { start_needflags(); test_b_rr(dst,dst); live_flags(); end_needflags(); } writebyte(srca,dst,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4230_0_comp_ff(uae_u32 opcode) /* CLR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); { start_needflags(); test_b_rr(dst,dst); live_flags(); end_needflags(); } writebyte(srca,dst,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4238_0_comp_ff(uae_u32 opcode) /* CLR */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); { start_needflags(); test_b_rr(dst,dst); live_flags(); end_needflags(); } writebyte(srca,dst,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4239_0_comp_ff(uae_u32 opcode) /* CLR */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); { start_needflags(); test_b_rr(dst,dst); live_flags(); end_needflags(); } writebyte(srca,dst,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4240_0_comp_ff(uae_u32 opcode) /* CLR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); { start_needflags(); test_w_rr(dst,dst); live_flags(); end_needflags(); } if(srcreg!=dst) mov_w_rr(srcreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4250_0_comp_ff(uae_u32 opcode) /* CLR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); { start_needflags(); test_w_rr(dst,dst); live_flags(); end_needflags(); } writeword(srca,dst,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4258_0_comp_ff(uae_u32 opcode) /* CLR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); lea_l_brr(srcreg+8,srcreg+8,2); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); { start_needflags(); test_w_rr(dst,dst); live_flags(); end_needflags(); } writeword(srca,dst,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4260_0_comp_ff(uae_u32 opcode) /* CLR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-2); if (dodgy) mov_l_rr(srca,8+srcreg); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); { start_needflags(); test_w_rr(dst,dst); live_flags(); end_needflags(); } writeword(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4268_0_comp_ff(uae_u32 opcode) /* CLR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); { start_needflags(); test_w_rr(dst,dst); live_flags(); end_needflags(); } writeword(srca,dst,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4270_0_comp_ff(uae_u32 opcode) /* CLR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); { start_needflags(); test_w_rr(dst,dst); live_flags(); end_needflags(); } writeword(srca,dst,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4278_0_comp_ff(uae_u32 opcode) /* CLR */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); { start_needflags(); test_w_rr(dst,dst); live_flags(); end_needflags(); } writeword(srca,dst,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4279_0_comp_ff(uae_u32 opcode) /* CLR */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); { start_needflags(); test_w_rr(dst,dst); live_flags(); end_needflags(); } writeword(srca,dst,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4280_0_comp_ff(uae_u32 opcode) /* CLR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); { start_needflags(); test_l_rr(dst,dst); live_flags(); end_needflags(); } if(srcreg!=dst) mov_l_rr(srcreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4290_0_comp_ff(uae_u32 opcode) /* CLR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); { start_needflags(); test_l_rr(dst,dst); live_flags(); end_needflags(); } writelong(srca,dst,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4298_0_comp_ff(uae_u32 opcode) /* CLR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); lea_l_brr(srcreg+8,srcreg+8,4); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); { start_needflags(); test_l_rr(dst,dst); live_flags(); end_needflags(); } writelong(srca,dst,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_42a0_0_comp_ff(uae_u32 opcode) /* CLR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-4); if (dodgy) mov_l_rr(srca,8+srcreg); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); { start_needflags(); test_l_rr(dst,dst); live_flags(); end_needflags(); } writelong(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_42a8_0_comp_ff(uae_u32 opcode) /* CLR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); { start_needflags(); test_l_rr(dst,dst); live_flags(); end_needflags(); } writelong(srca,dst,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_42b0_0_comp_ff(uae_u32 opcode) /* CLR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); { start_needflags(); test_l_rr(dst,dst); live_flags(); end_needflags(); } writelong(srca,dst,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_42b8_0_comp_ff(uae_u32 opcode) /* CLR */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); { start_needflags(); test_l_rr(dst,dst); live_flags(); end_needflags(); } writelong(srca,dst,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } #endif #ifdef PART_4 uae_u32 REGPARAM2 op_42b9_0_comp_ff(uae_u32 opcode) /* CLR */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); { start_needflags(); test_l_rr(dst,dst); live_flags(); end_needflags(); } writelong(srca,dst,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4400_0_comp_ff(uae_u32 opcode) /* NEG */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); start_needflags(); sub_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(srcreg!=dst) mov_b_rr(srcreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4410_0_comp_ff(uae_u32 opcode) /* NEG */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); start_needflags(); sub_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writebyte(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4418_0_comp_ff(uae_u32 opcode) /* NEG */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); start_needflags(); sub_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writebyte(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4420_0_comp_ff(uae_u32 opcode) /* NEG */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); start_needflags(); sub_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writebyte(srca,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4428_0_comp_ff(uae_u32 opcode) /* NEG */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); start_needflags(); sub_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writebyte(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4430_0_comp_ff(uae_u32 opcode) /* NEG */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); start_needflags(); sub_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writebyte(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4438_0_comp_ff(uae_u32 opcode) /* NEG */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); start_needflags(); sub_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writebyte(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4439_0_comp_ff(uae_u32 opcode) /* NEG */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); start_needflags(); sub_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writebyte(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4440_0_comp_ff(uae_u32 opcode) /* NEG */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); start_needflags(); sub_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(srcreg!=dst) mov_w_rr(srcreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4450_0_comp_ff(uae_u32 opcode) /* NEG */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); start_needflags(); sub_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writeword(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4458_0_comp_ff(uae_u32 opcode) /* NEG */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,2); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); start_needflags(); sub_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writeword(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4460_0_comp_ff(uae_u32 opcode) /* NEG */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-2); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readword(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); start_needflags(); sub_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writeword(srca,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4468_0_comp_ff(uae_u32 opcode) /* NEG */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); start_needflags(); sub_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writeword(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4470_0_comp_ff(uae_u32 opcode) /* NEG */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); start_needflags(); sub_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writeword(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4478_0_comp_ff(uae_u32 opcode) /* NEG */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); start_needflags(); sub_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writeword(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4479_0_comp_ff(uae_u32 opcode) /* NEG */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readword(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); start_needflags(); sub_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writeword(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4480_0_comp_ff(uae_u32 opcode) /* NEG */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); start_needflags(); sub_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(srcreg!=dst) mov_l_rr(srcreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4490_0_comp_ff(uae_u32 opcode) /* NEG */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); start_needflags(); sub_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writelong(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4498_0_comp_ff(uae_u32 opcode) /* NEG */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,4); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); start_needflags(); sub_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writelong(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_44a0_0_comp_ff(uae_u32 opcode) /* NEG */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-4); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); start_needflags(); sub_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writelong(srca,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_44a8_0_comp_ff(uae_u32 opcode) /* NEG */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); start_needflags(); sub_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writelong(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_44b0_0_comp_ff(uae_u32 opcode) /* NEG */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); start_needflags(); sub_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writelong(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_44b8_0_comp_ff(uae_u32 opcode) /* NEG */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); start_needflags(); sub_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writelong(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_44b9_0_comp_ff(uae_u32 opcode) /* NEG */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readlong(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); start_needflags(); sub_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writelong(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4600_0_comp_ff(uae_u32 opcode) /* NOT */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=scratchie++; mov_l_ri(dst,0xffffffff); dont_care_flags(); { start_needflags(); xor_b(dst,src); live_flags(); end_needflags(); } if(srcreg!=dst) mov_b_rr(srcreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4610_0_comp_ff(uae_u32 opcode) /* NOT */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0xffffffff); dont_care_flags(); { start_needflags(); xor_b(dst,src); live_flags(); end_needflags(); } writebyte(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4618_0_comp_ff(uae_u32 opcode) /* NOT */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); { int dst=scratchie++; mov_l_ri(dst,0xffffffff); dont_care_flags(); { start_needflags(); xor_b(dst,src); live_flags(); end_needflags(); } writebyte(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4620_0_comp_ff(uae_u32 opcode) /* NOT */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0xffffffff); dont_care_flags(); { start_needflags(); xor_b(dst,src); live_flags(); end_needflags(); } writebyte(srca,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4628_0_comp_ff(uae_u32 opcode) /* NOT */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0xffffffff); dont_care_flags(); { start_needflags(); xor_b(dst,src); live_flags(); end_needflags(); } writebyte(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4630_0_comp_ff(uae_u32 opcode) /* NOT */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0xffffffff); dont_care_flags(); { start_needflags(); xor_b(dst,src); live_flags(); end_needflags(); } writebyte(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4638_0_comp_ff(uae_u32 opcode) /* NOT */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0xffffffff); dont_care_flags(); { start_needflags(); xor_b(dst,src); live_flags(); end_needflags(); } writebyte(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4639_0_comp_ff(uae_u32 opcode) /* NOT */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0xffffffff); dont_care_flags(); { start_needflags(); xor_b(dst,src); live_flags(); end_needflags(); } writebyte(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4640_0_comp_ff(uae_u32 opcode) /* NOT */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=scratchie++; mov_l_ri(dst,0xffffffff); dont_care_flags(); { start_needflags(); xor_w(dst,src); live_flags(); end_needflags(); } if(srcreg!=dst) mov_w_rr(srcreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4650_0_comp_ff(uae_u32 opcode) /* NOT */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0xffffffff); dont_care_flags(); { start_needflags(); xor_w(dst,src); live_flags(); end_needflags(); } writeword(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4658_0_comp_ff(uae_u32 opcode) /* NOT */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,2); { int dst=scratchie++; mov_l_ri(dst,0xffffffff); dont_care_flags(); { start_needflags(); xor_w(dst,src); live_flags(); end_needflags(); } writeword(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4660_0_comp_ff(uae_u32 opcode) /* NOT */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-2); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readword(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0xffffffff); dont_care_flags(); { start_needflags(); xor_w(dst,src); live_flags(); end_needflags(); } writeword(srca,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4668_0_comp_ff(uae_u32 opcode) /* NOT */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0xffffffff); dont_care_flags(); { start_needflags(); xor_w(dst,src); live_flags(); end_needflags(); } writeword(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4670_0_comp_ff(uae_u32 opcode) /* NOT */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0xffffffff); dont_care_flags(); { start_needflags(); xor_w(dst,src); live_flags(); end_needflags(); } writeword(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4678_0_comp_ff(uae_u32 opcode) /* NOT */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0xffffffff); dont_care_flags(); { start_needflags(); xor_w(dst,src); live_flags(); end_needflags(); } writeword(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4679_0_comp_ff(uae_u32 opcode) /* NOT */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readword(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0xffffffff); dont_care_flags(); { start_needflags(); xor_w(dst,src); live_flags(); end_needflags(); } writeword(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4680_0_comp_ff(uae_u32 opcode) /* NOT */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=scratchie++; mov_l_ri(dst,0xffffffff); dont_care_flags(); { start_needflags(); xor_l(dst,src); live_flags(); end_needflags(); } if(srcreg!=dst) mov_l_rr(srcreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4690_0_comp_ff(uae_u32 opcode) /* NOT */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0xffffffff); dont_care_flags(); { start_needflags(); xor_l(dst,src); live_flags(); end_needflags(); } writelong(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4698_0_comp_ff(uae_u32 opcode) /* NOT */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,4); { int dst=scratchie++; mov_l_ri(dst,0xffffffff); dont_care_flags(); { start_needflags(); xor_l(dst,src); live_flags(); end_needflags(); } writelong(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_46a0_0_comp_ff(uae_u32 opcode) /* NOT */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-4); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0xffffffff); dont_care_flags(); { start_needflags(); xor_l(dst,src); live_flags(); end_needflags(); } writelong(srca,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_46a8_0_comp_ff(uae_u32 opcode) /* NOT */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0xffffffff); dont_care_flags(); { start_needflags(); xor_l(dst,src); live_flags(); end_needflags(); } writelong(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_46b0_0_comp_ff(uae_u32 opcode) /* NOT */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0xffffffff); dont_care_flags(); { start_needflags(); xor_l(dst,src); live_flags(); end_needflags(); } writelong(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_46b8_0_comp_ff(uae_u32 opcode) /* NOT */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0xffffffff); dont_care_flags(); { start_needflags(); xor_l(dst,src); live_flags(); end_needflags(); } writelong(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_46b9_0_comp_ff(uae_u32 opcode) /* NOT */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readlong(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0xffffffff); dont_care_flags(); { start_needflags(); xor_l(dst,src); live_flags(); end_needflags(); } writelong(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4808_0_comp_ff(uae_u32 opcode) /* LINK */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); { int offs = scratchie++; mov_l_ri(offs,comp_get_ilong((m68k_pc_offset+=4)-4)); sub_l_ri(15,4); writelong_clobber(15,src,scratchie); mov_l_rr(src,15); add_l(15,offs); if(srcreg+8!=src) mov_l_rr(srcreg+8,src); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4840_0_comp_ff(uae_u32 opcode) /* SWAP */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; dont_care_flags(); rol_l_ri(src,16); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); } if(srcreg!=src) mov_l_rr(srcreg,src); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4850_0_comp_ff(uae_u32 opcode) /* PEA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; if (srcreg==7) dodgy=1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); {{ int dsta=dodgy?scratchie++:7+8; lea_l_brr(7+8,7+8,-4); if (dodgy) mov_l_rr(dsta,8+7); writelong(dsta,srca,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4868_0_comp_ff(uae_u32 opcode) /* PEA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; if (srcreg==7) dodgy=1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); {{ int dsta=dodgy?scratchie++:7+8; lea_l_brr(7+8,7+8,-4); if (dodgy) mov_l_rr(dsta,8+7); writelong(dsta,srca,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4870_0_comp_ff(uae_u32 opcode) /* PEA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; if (srcreg==7) dodgy=1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); {{ int dsta=dodgy?scratchie++:7+8; lea_l_brr(7+8,7+8,-4); if (dodgy) mov_l_rr(dsta,8+7); writelong(dsta,srca,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4878_0_comp_ff(uae_u32 opcode) /* PEA */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); {{ int dsta=dodgy?scratchie++:7+8; lea_l_brr(7+8,7+8,-4); if (dodgy) mov_l_rr(dsta,8+7); writelong(dsta,srca,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4879_0_comp_ff(uae_u32 opcode) /* PEA */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ {{ int dsta=dodgy?scratchie++:7+8; lea_l_brr(7+8,7+8,-4); if (dodgy) mov_l_rr(dsta,8+7); writelong(dsta,srca,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_487a_0_comp_ff(uae_u32 opcode) /* PEA */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); {{ int dsta=dodgy?scratchie++:7+8; lea_l_brr(7+8,7+8,-4); if (dodgy) mov_l_rr(dsta,8+7); writelong(dsta,srca,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_487b_0_comp_ff(uae_u32 opcode) /* PEA */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); {{ int dsta=dodgy?scratchie++:7+8; lea_l_brr(7+8,7+8,-4); if (dodgy) mov_l_rr(dsta,8+7); writelong(dsta,srca,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4880_0_comp_ff(uae_u32 opcode) /* EXT */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; dont_care_flags(); { int dst = scratchie++; sign_extend_8_rr(dst,src); dont_care_flags(); { start_needflags(); test_w_rr(dst,dst); live_flags(); end_needflags(); } if(srcreg!=dst) mov_w_rr(srcreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4890_0_comp_ff(uae_u32 opcode) /* MVMLE */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; int tmp=scratchie++; signed char offset=0; { int srca=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(srca,dstreg+8); if (1 && !special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { mov_l_rr(tmp,i); gen_bswap_16(tmp); mov_w_Rr(native,tmp,offset); offset+=2; } } } else { mov_l_rr(tmp,srca); for (i=0;i<16;i++) { if ((mask>>i)&1) { writeword(tmp,i,scratchie); add_l_ri(tmp,2); } } } }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_48a0_0_comp_ff(uae_u32 opcode) /* MVMLE */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; int tmp=scratchie++; signed char offset=0; { int srca=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(srca,8+dstreg); if (1 && !special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { offset-=2; mov_l_rr(tmp,15-i); gen_bswap_16(tmp); mov_w_Rr(native,tmp,offset); } } lea_l_brr(8+dstreg,srca,(uae_s32)offset); } else { for (i=0;i<16;i++) { if ((mask>>i)&1) { sub_l_ri(srca,2); writeword(srca,15-i,scratchie); } } mov_l_rr(8+dstreg,srca); } }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_48a8_0_comp_ff(uae_u32 opcode) /* MVMLE */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; int tmp=scratchie++; signed char offset=0; { int srca=scratchie++; mov_l_rr(srca,8+dstreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); if (1 && !special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { mov_l_rr(tmp,i); gen_bswap_16(tmp); mov_w_Rr(native,tmp,offset); offset+=2; } } } else { mov_l_rr(tmp,srca); for (i=0;i<16;i++) { if ((mask>>i)&1) { writeword(tmp,i,scratchie); add_l_ri(tmp,2); } } } }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_48b0_0_comp_ff(uae_u32 opcode) /* MVMLE */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; int tmp=scratchie++; signed char offset=0; { int srca=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); if (1 && !special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { mov_l_rr(tmp,i); gen_bswap_16(tmp); mov_w_Rr(native,tmp,offset); offset+=2; } } } else { mov_l_rr(tmp,srca); for (i=0;i<16;i++) { if ((mask>>i)&1) { writeword(tmp,i,scratchie); add_l_ri(tmp,2); } } } }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_48b8_0_comp_ff(uae_u32 opcode) /* MVMLE */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; int tmp=scratchie++; signed char offset=0; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); if (1 && !special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { mov_l_rr(tmp,i); gen_bswap_16(tmp); mov_w_Rr(native,tmp,offset); offset+=2; } } } else { mov_l_rr(tmp,srca); for (i=0;i<16;i++) { if ((mask>>i)&1) { writeword(tmp,i,scratchie); add_l_ri(tmp,2); } } } }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_48b9_0_comp_ff(uae_u32 opcode) /* MVMLE */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; int tmp=scratchie++; signed char offset=0; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ if (1 && !special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { mov_l_rr(tmp,i); gen_bswap_16(tmp); mov_w_Rr(native,tmp,offset); offset+=2; } } } else { mov_l_rr(tmp,srca); for (i=0;i<16;i++) { if ((mask>>i)&1) { writeword(tmp,i,scratchie); add_l_ri(tmp,2); } } } }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_48c0_0_comp_ff(uae_u32 opcode) /* EXT */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; dont_care_flags(); { int dst = src; sign_extend_16_rr(src,src); dont_care_flags(); { start_needflags(); test_l_rr(dst,dst); live_flags(); end_needflags(); } if(srcreg!=dst) mov_l_rr(srcreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_48d0_0_comp_ff(uae_u32 opcode) /* MVMLE */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; int tmp=scratchie++; signed char offset=0; { int srca=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(srca,dstreg+8); if (1 && !special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { mov_l_rr(tmp,i); gen_bswap_32(tmp); mov_l_Rr(native,tmp,offset); offset+=4; } } } else { mov_l_rr(tmp,srca); for (i=0;i<16;i++) { if ((mask>>i)&1) { writelong(tmp,i,scratchie); add_l_ri(tmp,4); } } } }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_48e0_0_comp_ff(uae_u32 opcode) /* MVMLE */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; int tmp=scratchie++; signed char offset=0; { int srca=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(srca,8+dstreg); if (1 && !special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { offset-=4; mov_l_rr(tmp,15-i); gen_bswap_32(tmp); mov_l_Rr(native,tmp,offset); } } lea_l_brr(8+dstreg,srca,(uae_s32)offset); } else { for (i=0;i<16;i++) { if ((mask>>i)&1) { sub_l_ri(srca,4); writelong(srca,15-i,scratchie); } } mov_l_rr(8+dstreg,srca); } }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_48e8_0_comp_ff(uae_u32 opcode) /* MVMLE */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; int tmp=scratchie++; signed char offset=0; { int srca=scratchie++; mov_l_rr(srca,8+dstreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); if (1 && !special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { mov_l_rr(tmp,i); gen_bswap_32(tmp); mov_l_Rr(native,tmp,offset); offset+=4; } } } else { mov_l_rr(tmp,srca); for (i=0;i<16;i++) { if ((mask>>i)&1) { writelong(tmp,i,scratchie); add_l_ri(tmp,4); } } } }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_48f0_0_comp_ff(uae_u32 opcode) /* MVMLE */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; int tmp=scratchie++; signed char offset=0; { int srca=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); if (1 && !special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { mov_l_rr(tmp,i); gen_bswap_32(tmp); mov_l_Rr(native,tmp,offset); offset+=4; } } } else { mov_l_rr(tmp,srca); for (i=0;i<16;i++) { if ((mask>>i)&1) { writelong(tmp,i,scratchie); add_l_ri(tmp,4); } } } }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_48f8_0_comp_ff(uae_u32 opcode) /* MVMLE */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; int tmp=scratchie++; signed char offset=0; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); if (1 && !special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { mov_l_rr(tmp,i); gen_bswap_32(tmp); mov_l_Rr(native,tmp,offset); offset+=4; } } } else { mov_l_rr(tmp,srca); for (i=0;i<16;i++) { if ((mask>>i)&1) { writelong(tmp,i,scratchie); add_l_ri(tmp,4); } } } }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_48f9_0_comp_ff(uae_u32 opcode) /* MVMLE */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; int tmp=scratchie++; signed char offset=0; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ if (1 && !special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { mov_l_rr(tmp,i); gen_bswap_32(tmp); mov_l_Rr(native,tmp,offset); offset+=4; } } } else { mov_l_rr(tmp,srca); for (i=0;i<16;i++) { if ((mask>>i)&1) { writelong(tmp,i,scratchie); add_l_ri(tmp,4); } } } }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_49c0_0_comp_ff(uae_u32 opcode) /* EXT */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; dont_care_flags(); { int dst = src; sign_extend_8_rr(src,src); dont_care_flags(); { start_needflags(); test_l_rr(dst,dst); live_flags(); end_needflags(); } if(srcreg!=dst) mov_l_rr(srcreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4a00_0_comp_ff(uae_u32 opcode) /* TST */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4a10_0_comp_ff(uae_u32 opcode) /* TST */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4a18_0_comp_ff(uae_u32 opcode) /* TST */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4a20_0_comp_ff(uae_u32 opcode) /* TST */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readbyte(srca,src,scratchie); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4a28_0_comp_ff(uae_u32 opcode) /* TST */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readbyte(srca,src,scratchie); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4a30_0_comp_ff(uae_u32 opcode) /* TST */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readbyte(srca,src,scratchie); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4a38_0_comp_ff(uae_u32 opcode) /* TST */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readbyte(srca,src,scratchie); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4a39_0_comp_ff(uae_u32 opcode) /* TST */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readbyte(srca,src,scratchie); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4a3a_0_comp_ff(uae_u32 opcode) /* TST */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readbyte(srca,src,scratchie); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4a3b_0_comp_ff(uae_u32 opcode) /* TST */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readbyte(srca,src,scratchie); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4a3c_0_comp_ff(uae_u32 opcode) /* TST */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); dont_care_flags(); { start_needflags(); test_b_rr(src,src); live_flags(); end_needflags(); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4a40_0_comp_ff(uae_u32 opcode) /* TST */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4a48_0_comp_ff(uae_u32 opcode) /* TST */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4a50_0_comp_ff(uae_u32 opcode) /* TST */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4a58_0_comp_ff(uae_u32 opcode) /* TST */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,2); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4a60_0_comp_ff(uae_u32 opcode) /* TST */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-2); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readword(srca,src,scratchie); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4a68_0_comp_ff(uae_u32 opcode) /* TST */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4a70_0_comp_ff(uae_u32 opcode) /* TST */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4a78_0_comp_ff(uae_u32 opcode) /* TST */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4a79_0_comp_ff(uae_u32 opcode) /* TST */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readword(srca,src,scratchie); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4a7a_0_comp_ff(uae_u32 opcode) /* TST */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readword(srca,src,scratchie); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4a7b_0_comp_ff(uae_u32 opcode) /* TST */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4a7c_0_comp_ff(uae_u32 opcode) /* TST */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); dont_care_flags(); { start_needflags(); test_w_rr(src,src); live_flags(); end_needflags(); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4a80_0_comp_ff(uae_u32 opcode) /* TST */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4a88_0_comp_ff(uae_u32 opcode) /* TST */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4a90_0_comp_ff(uae_u32 opcode) /* TST */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4a98_0_comp_ff(uae_u32 opcode) /* TST */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,4); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4aa0_0_comp_ff(uae_u32 opcode) /* TST */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-4); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readlong(srca,src,scratchie); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4aa8_0_comp_ff(uae_u32 opcode) /* TST */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4ab0_0_comp_ff(uae_u32 opcode) /* TST */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4ab8_0_comp_ff(uae_u32 opcode) /* TST */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4ab9_0_comp_ff(uae_u32 opcode) /* TST */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readlong(srca,src,scratchie); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4aba_0_comp_ff(uae_u32 opcode) /* TST */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readlong(srca,src,scratchie); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4abb_0_comp_ff(uae_u32 opcode) /* TST */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4abc_0_comp_ff(uae_u32 opcode) /* TST */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); dont_care_flags(); { start_needflags(); test_l_rr(src,src); live_flags(); end_needflags(); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4c90_0_comp_ff(uae_u32 opcode) /* MVMEL */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; int offset=0; { int srca=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(srca,dstreg+8); if (1 && !special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { mov_w_rR(i,native,offset); gen_bswap_16(i); sign_extend_16_rr(i,i); offset+=2; } } } else { int tmp=scratchie++; mov_l_rr(tmp,srca); for (i=0;i<16;i++) { if ((mask>>i)&1) { readword(tmp,i,scratchie); add_l_ri(tmp,2); } } } }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4c98_0_comp_ff(uae_u32 opcode) /* MVMEL */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; int offset=0; { int srca=scratchie++; mov_l_rr(srca,dstreg+8); if (1 && !special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { mov_w_rR(i,native,offset); gen_bswap_16(i); sign_extend_16_rr(i,i); offset+=2; } } lea_l_brr(8+dstreg,srca,offset); } else { int tmp=scratchie++; mov_l_rr(tmp,srca); for (i=0;i<16;i++) { if ((mask>>i)&1) { readword(tmp,i,scratchie); add_l_ri(tmp,2); } } mov_l_rr(8+dstreg,tmp); } }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4ca8_0_comp_ff(uae_u32 opcode) /* MVMEL */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; int offset=0; { int srca=scratchie++; mov_l_rr(srca,8+dstreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); if (1 && !special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { mov_w_rR(i,native,offset); gen_bswap_16(i); sign_extend_16_rr(i,i); offset+=2; } } } else { int tmp=scratchie++; mov_l_rr(tmp,srca); for (i=0;i<16;i++) { if ((mask>>i)&1) { readword(tmp,i,scratchie); add_l_ri(tmp,2); } } } }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4cb0_0_comp_ff(uae_u32 opcode) /* MVMEL */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; int offset=0; { int srca=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); if (1 && !special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { mov_w_rR(i,native,offset); gen_bswap_16(i); sign_extend_16_rr(i,i); offset+=2; } } } else { int tmp=scratchie++; mov_l_rr(tmp,srca); for (i=0;i<16;i++) { if ((mask>>i)&1) { readword(tmp,i,scratchie); add_l_ri(tmp,2); } } } }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4cb8_0_comp_ff(uae_u32 opcode) /* MVMEL */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; int offset=0; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); if (1 && !special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { mov_w_rR(i,native,offset); gen_bswap_16(i); sign_extend_16_rr(i,i); offset+=2; } } } else { int tmp=scratchie++; mov_l_rr(tmp,srca); for (i=0;i<16;i++) { if ((mask>>i)&1) { readword(tmp,i,scratchie); add_l_ri(tmp,2); } } } }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4cb9_0_comp_ff(uae_u32 opcode) /* MVMEL */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; int offset=0; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ if (1 && !special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { mov_w_rR(i,native,offset); gen_bswap_16(i); sign_extend_16_rr(i,i); offset+=2; } } } else { int tmp=scratchie++; mov_l_rr(tmp,srca); for (i=0;i<16;i++) { if ((mask>>i)&1) { readword(tmp,i,scratchie); add_l_ri(tmp,2); } } } }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4cba_0_comp_ff(uae_u32 opcode) /* MVMEL */ { uae_s32 dstreg = 2; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; int offset=0; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); if (1 && !special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { mov_w_rR(i,native,offset); gen_bswap_16(i); sign_extend_16_rr(i,i); offset+=2; } } } else { int tmp=scratchie++; mov_l_rr(tmp,srca); for (i=0;i<16;i++) { if ((mask>>i)&1) { readword(tmp,i,scratchie); add_l_ri(tmp,2); } } } }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4cbb_0_comp_ff(uae_u32 opcode) /* MVMEL */ { uae_s32 dstreg = 3; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; int offset=0; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); if (1 && !special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { mov_w_rR(i,native,offset); gen_bswap_16(i); sign_extend_16_rr(i,i); offset+=2; } } } else { int tmp=scratchie++; mov_l_rr(tmp,srca); for (i=0;i<16;i++) { if ((mask>>i)&1) { readword(tmp,i,scratchie); add_l_ri(tmp,2); } } } }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4cd0_0_comp_ff(uae_u32 opcode) /* MVMEL */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; int offset=0; { int srca=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(srca,dstreg+8); if (1 && !special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { mov_l_rR(i,native,offset); gen_bswap_32(i); offset+=4; } } } else { int tmp=scratchie++; mov_l_rr(tmp,srca); for (i=0;i<16;i++) { if ((mask>>i)&1) { readlong(tmp,i,scratchie); add_l_ri(tmp,4); } } } }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4cd8_0_comp_ff(uae_u32 opcode) /* MVMEL */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; int offset=0; { int srca=scratchie++; mov_l_rr(srca,dstreg+8); if (1 && !special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { mov_l_rR(i,native,offset); gen_bswap_32(i); offset+=4; } } lea_l_brr(8+dstreg,srca,offset); } else { int tmp=scratchie++; mov_l_rr(tmp,srca); for (i=0;i<16;i++) { if ((mask>>i)&1) { readlong(tmp,i,scratchie); add_l_ri(tmp,4); } } mov_l_rr(8+dstreg,tmp); } }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4ce8_0_comp_ff(uae_u32 opcode) /* MVMEL */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; int offset=0; { int srca=scratchie++; mov_l_rr(srca,8+dstreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); if (1 && !special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { mov_l_rR(i,native,offset); gen_bswap_32(i); offset+=4; } } } else { int tmp=scratchie++; mov_l_rr(tmp,srca); for (i=0;i<16;i++) { if ((mask>>i)&1) { readlong(tmp,i,scratchie); add_l_ri(tmp,4); } } } }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4cf0_0_comp_ff(uae_u32 opcode) /* MVMEL */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; int offset=0; { int srca=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); if (1 && !special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { mov_l_rR(i,native,offset); gen_bswap_32(i); offset+=4; } } } else { int tmp=scratchie++; mov_l_rr(tmp,srca); for (i=0;i<16;i++) { if ((mask>>i)&1) { readlong(tmp,i,scratchie); add_l_ri(tmp,4); } } } }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4cf8_0_comp_ff(uae_u32 opcode) /* MVMEL */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; int offset=0; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); if (1 && !special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { mov_l_rR(i,native,offset); gen_bswap_32(i); offset+=4; } } } else { int tmp=scratchie++; mov_l_rr(tmp,srca); for (i=0;i<16;i++) { if ((mask>>i)&1) { readlong(tmp,i,scratchie); add_l_ri(tmp,4); } } } }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4cf9_0_comp_ff(uae_u32 opcode) /* MVMEL */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; int offset=0; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ if (1 && !special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { mov_l_rR(i,native,offset); gen_bswap_32(i); offset+=4; } } } else { int tmp=scratchie++; mov_l_rr(tmp,srca); for (i=0;i<16;i++) { if ((mask>>i)&1) { readlong(tmp,i,scratchie); add_l_ri(tmp,4); } } } }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4cfa_0_comp_ff(uae_u32 opcode) /* MVMEL */ { uae_s32 dstreg = 2; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; int offset=0; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); if (1 && !special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { mov_l_rR(i,native,offset); gen_bswap_32(i); offset+=4; } } } else { int tmp=scratchie++; mov_l_rr(tmp,srca); for (i=0;i<16;i++) { if ((mask>>i)&1) { readlong(tmp,i,scratchie); add_l_ri(tmp,4); } } } }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4cfb_0_comp_ff(uae_u32 opcode) /* MVMEL */ { uae_s32 dstreg = 3; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; int offset=0; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); if (1 && !special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { mov_l_rR(i,native,offset); gen_bswap_32(i); offset+=4; } } } else { int tmp=scratchie++; mov_l_rr(tmp,srca); for (i=0;i<16;i++) { if ((mask>>i)&1) { readlong(tmp,i,scratchie); add_l_ri(tmp,4); } } } }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4e50_0_comp_ff(uae_u32 opcode) /* LINK */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); { int offs = scratchie++; mov_l_ri(offs,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); sub_l_ri(15,4); writelong_clobber(15,src,scratchie); mov_l_rr(src,15); sign_extend_16_rr(offs,offs); add_l(15,offs); if(srcreg+8!=src) mov_l_rr(srcreg+8,src); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4e58_0_comp_ff(uae_u32 opcode) /* UNLK */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); mov_l_rr(15,src); readlong(15,src,scratchie); add_l_ri(15,4); if(srcreg+8!=src) mov_l_rr(srcreg+8,src); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4e71_0_comp_ff(uae_u32 opcode) /* NOP */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; } if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4e74_0_comp_ff(uae_u32 opcode) /* RTD */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int offs = scratchie++; mov_l_ri(offs,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); add_l_ri(offs,4); { int newad=scratchie++; readlong(15,newad,scratchie); and_l_ri(newad,~1); mov_l_mr((uae_u32)®s.pc,newad); get_n_addr_jmp(newad,PC_P,scratchie); mov_l_mr((uae_u32)®s.pc_oldp,PC_P); m68k_pc_offset=0; add_l(15,offs); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4e75_0_comp_ff(uae_u32 opcode) /* RTS */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; int newad=scratchie++; readlong(15,newad,scratchie); and_l_ri(newad,~1); mov_l_mr((uae_u32)®s.pc,newad); get_n_addr_jmp(newad,PC_P,scratchie); mov_l_mr((uae_u32)®s.pc_oldp,PC_P); m68k_pc_offset=0; lea_l_brr(15,15,4); } if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4e90_0_comp_ff(uae_u32 opcode) /* JSR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { uae_u32 retadd=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; int ret=scratchie++; mov_l_ri(ret,retadd); sub_l_ri(15,4); writelong_clobber(15,ret,scratchie); and_l_ri(srca,~1); mov_l_mr((uae_u32)®s.pc,srca); get_n_addr_jmp(srca,PC_P,scratchie); mov_l_mr((uae_u32)®s.pc_oldp,PC_P); m68k_pc_offset=0; }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4ea8_0_comp_ff(uae_u32 opcode) /* JSR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { uae_u32 retadd=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; int ret=scratchie++; mov_l_ri(ret,retadd); sub_l_ri(15,4); writelong_clobber(15,ret,scratchie); and_l_ri(srca,~1); mov_l_mr((uae_u32)®s.pc,srca); get_n_addr_jmp(srca,PC_P,scratchie); mov_l_mr((uae_u32)®s.pc_oldp,PC_P); m68k_pc_offset=0; }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4eb0_0_comp_ff(uae_u32 opcode) /* JSR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { uae_u32 retadd=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; int ret=scratchie++; mov_l_ri(ret,retadd); sub_l_ri(15,4); writelong_clobber(15,ret,scratchie); and_l_ri(srca,~1); mov_l_mr((uae_u32)®s.pc,srca); get_n_addr_jmp(srca,PC_P,scratchie); mov_l_mr((uae_u32)®s.pc_oldp,PC_P); m68k_pc_offset=0; }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4eb8_0_comp_ff(uae_u32 opcode) /* JSR */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { uae_u32 retadd=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; int ret=scratchie++; mov_l_ri(ret,retadd); sub_l_ri(15,4); writelong_clobber(15,ret,scratchie); and_l_ri(srca,~1); mov_l_mr((uae_u32)®s.pc,srca); get_n_addr_jmp(srca,PC_P,scratchie); mov_l_mr((uae_u32)®s.pc_oldp,PC_P); m68k_pc_offset=0; }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4eb9_0_comp_ff(uae_u32 opcode) /* JSR */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { uae_u32 retadd=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; int ret=scratchie++; mov_l_ri(ret,retadd); sub_l_ri(15,4); writelong_clobber(15,ret,scratchie); and_l_ri(srca,~1); mov_l_mr((uae_u32)®s.pc,srca); get_n_addr_jmp(srca,PC_P,scratchie); mov_l_mr((uae_u32)®s.pc_oldp,PC_P); m68k_pc_offset=0; }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4eba_0_comp_ff(uae_u32 opcode) /* JSR */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { uae_u32 retadd=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; int ret=scratchie++; mov_l_ri(ret,retadd); sub_l_ri(15,4); writelong_clobber(15,ret,scratchie); and_l_ri(srca,~1); mov_l_mr((uae_u32)®s.pc,srca); get_n_addr_jmp(srca,PC_P,scratchie); mov_l_mr((uae_u32)®s.pc_oldp,PC_P); m68k_pc_offset=0; }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4ebb_0_comp_ff(uae_u32 opcode) /* JSR */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { uae_u32 retadd=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; int ret=scratchie++; mov_l_ri(ret,retadd); sub_l_ri(15,4); writelong_clobber(15,ret,scratchie); and_l_ri(srca,~1); mov_l_mr((uae_u32)®s.pc,srca); get_n_addr_jmp(srca,PC_P,scratchie); mov_l_mr((uae_u32)®s.pc_oldp,PC_P); m68k_pc_offset=0; }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4ed0_0_comp_ff(uae_u32 opcode) /* JMP */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); and_l_ri(srca,~1); mov_l_mr((uae_u32)®s.pc,srca); get_n_addr_jmp(srca,PC_P,scratchie); mov_l_mr((uae_u32)®s.pc_oldp,PC_P); m68k_pc_offset=0; }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4ee8_0_comp_ff(uae_u32 opcode) /* JMP */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); and_l_ri(srca,~1); mov_l_mr((uae_u32)®s.pc,srca); get_n_addr_jmp(srca,PC_P,scratchie); mov_l_mr((uae_u32)®s.pc_oldp,PC_P); m68k_pc_offset=0; }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4ef0_0_comp_ff(uae_u32 opcode) /* JMP */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); and_l_ri(srca,~1); mov_l_mr((uae_u32)®s.pc,srca); get_n_addr_jmp(srca,PC_P,scratchie); mov_l_mr((uae_u32)®s.pc_oldp,PC_P); m68k_pc_offset=0; }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4ef8_0_comp_ff(uae_u32 opcode) /* JMP */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); and_l_ri(srca,~1); mov_l_mr((uae_u32)®s.pc,srca); get_n_addr_jmp(srca,PC_P,scratchie); mov_l_mr((uae_u32)®s.pc_oldp,PC_P); m68k_pc_offset=0; }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4ef9_0_comp_ff(uae_u32 opcode) /* JMP */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ and_l_ri(srca,~1); mov_l_mr((uae_u32)®s.pc,srca); get_n_addr_jmp(srca,PC_P,scratchie); mov_l_mr((uae_u32)®s.pc_oldp,PC_P); m68k_pc_offset=0; }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4efa_0_comp_ff(uae_u32 opcode) /* JMP */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); and_l_ri(srca,~1); mov_l_mr((uae_u32)®s.pc,srca); get_n_addr_jmp(srca,PC_P,scratchie); mov_l_mr((uae_u32)®s.pc_oldp,PC_P); m68k_pc_offset=0; }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4efb_0_comp_ff(uae_u32 opcode) /* JMP */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); and_l_ri(srca,~1); mov_l_mr((uae_u32)®s.pc,srca); get_n_addr_jmp(srca,PC_P,scratchie); mov_l_mr((uae_u32)®s.pc_oldp,PC_P); m68k_pc_offset=0; }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5000_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dst=dstreg; dont_care_flags(); start_needflags(); add_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5010_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); start_needflags(); add_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5018_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,areg_byteinc[dstreg]); dont_care_flags(); start_needflags(); add_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5020_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,(uae_s32)-areg_byteinc[dstreg]); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); start_needflags(); add_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5028_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); start_needflags(); add_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5030_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); start_needflags(); add_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5038_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); start_needflags(); add_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5039_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); start_needflags(); add_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5040_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dst=dstreg; dont_care_flags(); start_needflags(); add_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5048_0_comp_ff(uae_u32 opcode) /* ADDA */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; sign_extend_16_rr(tmp,src); add_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5050_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); start_needflags(); add_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5058_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readword(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,2); dont_care_flags(); start_needflags(); add_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5060_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-2); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); start_needflags(); add_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writeword(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } #endif #ifdef PART_5 uae_u32 REGPARAM2 op_5068_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); start_needflags(); add_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5070_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); start_needflags(); add_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5078_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); start_needflags(); add_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5079_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); start_needflags(); add_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5080_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dst=dstreg; dont_care_flags(); start_needflags(); add_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5088_0_comp_ff(uae_u32 opcode) /* ADDA */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; tmp=src; add_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5090_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); start_needflags(); add_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5098_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readlong(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,4); dont_care_flags(); start_needflags(); add_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_50a0_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-4); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); start_needflags(); add_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writelong(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_50a8_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); start_needflags(); add_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_50b0_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); start_needflags(); add_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_50b8_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); start_needflags(); add_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_50b9_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); start_needflags(); add_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_50c0_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int val = scratchie++; mov_l_ri(val,0); sub_b_ri(val,1); if(srcreg!=val) mov_b_rr(srcreg,val); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_50c8_0_comp_ff(uae_u32 opcode) /* DBcc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int offs = scratchie++; mov_l_ri(offs,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); sign_extend_16_rr(offs,offs); sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(offs,(uae_u32)comp_pc_p); add_l_ri(offs,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; { int nsrc=scratchie++; if(srcreg!=src) mov_w_rr(srcreg,src); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_50d0_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int val = scratchie++; mov_l_ri(val,0); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_50d8_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); { int val = scratchie++; mov_l_ri(val,0); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_50e0_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int val = scratchie++; mov_l_ri(val,0); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_50e8_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int val = scratchie++; mov_l_ri(val,0); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_50f0_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int val = scratchie++; mov_l_ri(val,0); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_50f8_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int val = scratchie++; mov_l_ri(val,0); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_50f9_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int val = scratchie++; mov_l_ri(val,0); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5100_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dst=dstreg; dont_care_flags(); start_needflags(); sub_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5110_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); start_needflags(); sub_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5118_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,areg_byteinc[dstreg]); dont_care_flags(); start_needflags(); sub_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5120_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,(uae_s32)-areg_byteinc[dstreg]); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); start_needflags(); sub_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5128_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); start_needflags(); sub_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5130_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); start_needflags(); sub_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5138_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); start_needflags(); sub_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5139_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); start_needflags(); sub_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5140_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dst=dstreg; dont_care_flags(); start_needflags(); sub_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5148_0_comp_ff(uae_u32 opcode) /* SUBA */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; sign_extend_16_rr(tmp,src); sub_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5150_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); start_needflags(); sub_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5158_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readword(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,2); dont_care_flags(); start_needflags(); sub_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5160_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-2); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); start_needflags(); sub_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writeword(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5168_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); start_needflags(); sub_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5170_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); start_needflags(); sub_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5178_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); start_needflags(); sub_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5179_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); start_needflags(); sub_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5180_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dst=dstreg; dont_care_flags(); start_needflags(); sub_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5188_0_comp_ff(uae_u32 opcode) /* SUBA */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; tmp=src; sub_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5190_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); start_needflags(); sub_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5198_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readlong(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,4); dont_care_flags(); start_needflags(); sub_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_51a0_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-4); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); start_needflags(); sub_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writelong(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_51a8_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); start_needflags(); sub_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_51b0_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); start_needflags(); sub_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_51b8_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); start_needflags(); sub_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_51b9_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); start_needflags(); sub_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_51c0_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int val = scratchie++; mov_l_ri(val,1); sub_b_ri(val,1); if(srcreg!=val) mov_b_rr(srcreg,val); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_51c8_0_comp_ff(uae_u32 opcode) /* DBcc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int offs = scratchie++; mov_l_ri(offs,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); sign_extend_16_rr(offs,offs); sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(offs,(uae_u32)comp_pc_p); add_l_ri(offs,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; { int nsrc=scratchie++; start_needflags(); sub_w_ri(src,1); end_needflags(); { uae_u32 v2; uae_u32 v1=get_const(PC_P); v2=get_const(offs); register_branch(v1,v2,3); if(srcreg!=src) mov_w_rr(srcreg,src); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_51d0_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int val = scratchie++; mov_l_ri(val,1); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_51d8_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); { int val = scratchie++; mov_l_ri(val,1); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_51e0_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int val = scratchie++; mov_l_ri(val,1); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_51e8_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int val = scratchie++; mov_l_ri(val,1); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_51f0_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int val = scratchie++; mov_l_ri(val,1); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_51f8_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int val = scratchie++; mov_l_ri(val,1); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_51f9_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int val = scratchie++; mov_l_ri(val,1); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_52c0_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int val = scratchie++; make_flags_live(); setcc(val,6); sub_b_ri(val,1); if(srcreg!=val) mov_b_rr(srcreg,val); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_52c8_0_comp_ff(uae_u32 opcode) /* DBcc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int offs = scratchie++; mov_l_ri(offs,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); sign_extend_16_rr(offs,offs); sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(offs,(uae_u32)comp_pc_p); add_l_ri(offs,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; { int nsrc=scratchie++; make_flags_live(); mov_l_rr(nsrc,src); lea_l_brr(scratchie,src,(uae_s32)-1); mov_w_rr(src,scratchie); cmov_l_rr(offs,PC_P,7); cmov_l_rr(src,nsrc,7); start_needflags(); test_w_rr(nsrc,nsrc); end_needflags(); cmov_l_rr(PC_P,offs,5); if(srcreg!=src) mov_w_rr(srcreg,src); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_52d0_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int val = scratchie++; make_flags_live(); setcc(val,6); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_52d8_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); { int val = scratchie++; make_flags_live(); setcc(val,6); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_52e0_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int val = scratchie++; make_flags_live(); setcc(val,6); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_52e8_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int val = scratchie++; make_flags_live(); setcc(val,6); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_52f0_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int val = scratchie++; make_flags_live(); setcc(val,6); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_52f8_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int val = scratchie++; make_flags_live(); setcc(val,6); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_52f9_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int val = scratchie++; make_flags_live(); setcc(val,6); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_53c0_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int val = scratchie++; make_flags_live(); setcc(val,7); sub_b_ri(val,1); if(srcreg!=val) mov_b_rr(srcreg,val); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_53c8_0_comp_ff(uae_u32 opcode) /* DBcc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int offs = scratchie++; mov_l_ri(offs,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); sign_extend_16_rr(offs,offs); sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(offs,(uae_u32)comp_pc_p); add_l_ri(offs,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; { int nsrc=scratchie++; make_flags_live(); mov_l_rr(nsrc,src); lea_l_brr(scratchie,src,(uae_s32)-1); mov_w_rr(src,scratchie); cmov_l_rr(offs,PC_P,6); cmov_l_rr(src,nsrc,6); start_needflags(); test_w_rr(nsrc,nsrc); end_needflags(); cmov_l_rr(PC_P,offs,5); if(srcreg!=src) mov_w_rr(srcreg,src); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_53d0_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int val = scratchie++; make_flags_live(); setcc(val,7); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_53d8_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); { int val = scratchie++; make_flags_live(); setcc(val,7); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_53e0_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int val = scratchie++; make_flags_live(); setcc(val,7); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_53e8_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int val = scratchie++; make_flags_live(); setcc(val,7); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_53f0_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int val = scratchie++; make_flags_live(); setcc(val,7); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_53f8_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int val = scratchie++; make_flags_live(); setcc(val,7); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_53f9_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int val = scratchie++; make_flags_live(); setcc(val,7); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_54c0_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int val = scratchie++; make_flags_live(); setcc(val,2); sub_b_ri(val,1); if(srcreg!=val) mov_b_rr(srcreg,val); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_54c8_0_comp_ff(uae_u32 opcode) /* DBcc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int offs = scratchie++; mov_l_ri(offs,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); sign_extend_16_rr(offs,offs); sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(offs,(uae_u32)comp_pc_p); add_l_ri(offs,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; { int nsrc=scratchie++; make_flags_live(); mov_l_rr(nsrc,src); lea_l_brr(scratchie,src,(uae_s32)-1); mov_w_rr(src,scratchie); cmov_l_rr(offs,PC_P,3); cmov_l_rr(src,nsrc,3); start_needflags(); test_w_rr(nsrc,nsrc); end_needflags(); cmov_l_rr(PC_P,offs,5); if(srcreg!=src) mov_w_rr(srcreg,src); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_54d0_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int val = scratchie++; make_flags_live(); setcc(val,2); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_54d8_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); { int val = scratchie++; make_flags_live(); setcc(val,2); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_54e0_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int val = scratchie++; make_flags_live(); setcc(val,2); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_54e8_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int val = scratchie++; make_flags_live(); setcc(val,2); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_54f0_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int val = scratchie++; make_flags_live(); setcc(val,2); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_54f8_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int val = scratchie++; make_flags_live(); setcc(val,2); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_54f9_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int val = scratchie++; make_flags_live(); setcc(val,2); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_55c0_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int val = scratchie++; make_flags_live(); setcc(val,3); sub_b_ri(val,1); if(srcreg!=val) mov_b_rr(srcreg,val); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_55c8_0_comp_ff(uae_u32 opcode) /* DBcc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int offs = scratchie++; mov_l_ri(offs,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); sign_extend_16_rr(offs,offs); sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(offs,(uae_u32)comp_pc_p); add_l_ri(offs,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; { int nsrc=scratchie++; make_flags_live(); mov_l_rr(nsrc,src); lea_l_brr(scratchie,src,(uae_s32)-1); mov_w_rr(src,scratchie); cmov_l_rr(offs,PC_P,2); cmov_l_rr(src,nsrc,2); start_needflags(); test_w_rr(nsrc,nsrc); end_needflags(); cmov_l_rr(PC_P,offs,5); if(srcreg!=src) mov_w_rr(srcreg,src); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_55d0_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int val = scratchie++; make_flags_live(); setcc(val,3); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_55d8_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); { int val = scratchie++; make_flags_live(); setcc(val,3); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_55e0_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int val = scratchie++; make_flags_live(); setcc(val,3); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_55e8_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int val = scratchie++; make_flags_live(); setcc(val,3); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_55f0_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int val = scratchie++; make_flags_live(); setcc(val,3); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_55f8_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int val = scratchie++; make_flags_live(); setcc(val,3); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_55f9_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int val = scratchie++; make_flags_live(); setcc(val,3); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_56c0_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int val = scratchie++; make_flags_live(); setcc(val,4); sub_b_ri(val,1); if(srcreg!=val) mov_b_rr(srcreg,val); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_56c8_0_comp_ff(uae_u32 opcode) /* DBcc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int offs = scratchie++; mov_l_ri(offs,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); sign_extend_16_rr(offs,offs); sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(offs,(uae_u32)comp_pc_p); add_l_ri(offs,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; { int nsrc=scratchie++; make_flags_live(); mov_l_rr(nsrc,src); lea_l_brr(scratchie,src,(uae_s32)-1); mov_w_rr(src,scratchie); cmov_l_rr(offs,PC_P,5); cmov_l_rr(src,nsrc,5); start_needflags(); test_w_rr(nsrc,nsrc); end_needflags(); cmov_l_rr(PC_P,offs,5); if(srcreg!=src) mov_w_rr(srcreg,src); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_56d0_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int val = scratchie++; make_flags_live(); setcc(val,4); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_56d8_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); { int val = scratchie++; make_flags_live(); setcc(val,4); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_56e0_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int val = scratchie++; make_flags_live(); setcc(val,4); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_56e8_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int val = scratchie++; make_flags_live(); setcc(val,4); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_56f0_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int val = scratchie++; make_flags_live(); setcc(val,4); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_56f8_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int val = scratchie++; make_flags_live(); setcc(val,4); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_56f9_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int val = scratchie++; make_flags_live(); setcc(val,4); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_57c0_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int val = scratchie++; make_flags_live(); setcc(val,5); sub_b_ri(val,1); if(srcreg!=val) mov_b_rr(srcreg,val); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_57c8_0_comp_ff(uae_u32 opcode) /* DBcc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int offs = scratchie++; mov_l_ri(offs,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); sign_extend_16_rr(offs,offs); sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(offs,(uae_u32)comp_pc_p); add_l_ri(offs,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; { int nsrc=scratchie++; make_flags_live(); mov_l_rr(nsrc,src); lea_l_brr(scratchie,src,(uae_s32)-1); mov_w_rr(src,scratchie); cmov_l_rr(offs,PC_P,4); cmov_l_rr(src,nsrc,4); start_needflags(); test_w_rr(nsrc,nsrc); end_needflags(); cmov_l_rr(PC_P,offs,5); if(srcreg!=src) mov_w_rr(srcreg,src); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_57d0_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int val = scratchie++; make_flags_live(); setcc(val,5); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_57d8_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); { int val = scratchie++; make_flags_live(); setcc(val,5); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_57e0_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int val = scratchie++; make_flags_live(); setcc(val,5); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_57e8_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int val = scratchie++; make_flags_live(); setcc(val,5); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_57f0_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int val = scratchie++; make_flags_live(); setcc(val,5); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_57f8_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int val = scratchie++; make_flags_live(); setcc(val,5); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_57f9_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int val = scratchie++; make_flags_live(); setcc(val,5); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5ac0_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int val = scratchie++; make_flags_live(); setcc(val,8); sub_b_ri(val,1); if(srcreg!=val) mov_b_rr(srcreg,val); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5ac8_0_comp_ff(uae_u32 opcode) /* DBcc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int offs = scratchie++; mov_l_ri(offs,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); sign_extend_16_rr(offs,offs); sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(offs,(uae_u32)comp_pc_p); add_l_ri(offs,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; { int nsrc=scratchie++; make_flags_live(); mov_l_rr(nsrc,src); lea_l_brr(scratchie,src,(uae_s32)-1); mov_w_rr(src,scratchie); cmov_l_rr(offs,PC_P,9); cmov_l_rr(src,nsrc,9); start_needflags(); test_w_rr(nsrc,nsrc); end_needflags(); cmov_l_rr(PC_P,offs,5); if(srcreg!=src) mov_w_rr(srcreg,src); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5ad0_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int val = scratchie++; make_flags_live(); setcc(val,8); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5ad8_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); { int val = scratchie++; make_flags_live(); setcc(val,8); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5ae0_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int val = scratchie++; make_flags_live(); setcc(val,8); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5ae8_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int val = scratchie++; make_flags_live(); setcc(val,8); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5af0_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int val = scratchie++; make_flags_live(); setcc(val,8); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5af8_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int val = scratchie++; make_flags_live(); setcc(val,8); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5af9_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int val = scratchie++; make_flags_live(); setcc(val,8); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5bc0_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int val = scratchie++; make_flags_live(); setcc(val,9); sub_b_ri(val,1); if(srcreg!=val) mov_b_rr(srcreg,val); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5bc8_0_comp_ff(uae_u32 opcode) /* DBcc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int offs = scratchie++; mov_l_ri(offs,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); sign_extend_16_rr(offs,offs); sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(offs,(uae_u32)comp_pc_p); add_l_ri(offs,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; { int nsrc=scratchie++; make_flags_live(); mov_l_rr(nsrc,src); lea_l_brr(scratchie,src,(uae_s32)-1); mov_w_rr(src,scratchie); cmov_l_rr(offs,PC_P,8); cmov_l_rr(src,nsrc,8); start_needflags(); test_w_rr(nsrc,nsrc); end_needflags(); cmov_l_rr(PC_P,offs,5); if(srcreg!=src) mov_w_rr(srcreg,src); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5bd0_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int val = scratchie++; make_flags_live(); setcc(val,9); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5bd8_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); { int val = scratchie++; make_flags_live(); setcc(val,9); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5be0_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int val = scratchie++; make_flags_live(); setcc(val,9); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5be8_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int val = scratchie++; make_flags_live(); setcc(val,9); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5bf0_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int val = scratchie++; make_flags_live(); setcc(val,9); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5bf8_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int val = scratchie++; make_flags_live(); setcc(val,9); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5bf9_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int val = scratchie++; make_flags_live(); setcc(val,9); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5cc0_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int val = scratchie++; make_flags_live(); setcc(val,12); sub_b_ri(val,1); if(srcreg!=val) mov_b_rr(srcreg,val); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5cc8_0_comp_ff(uae_u32 opcode) /* DBcc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int offs = scratchie++; mov_l_ri(offs,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); sign_extend_16_rr(offs,offs); sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(offs,(uae_u32)comp_pc_p); add_l_ri(offs,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; { int nsrc=scratchie++; make_flags_live(); mov_l_rr(nsrc,src); lea_l_brr(scratchie,src,(uae_s32)-1); mov_w_rr(src,scratchie); cmov_l_rr(offs,PC_P,13); cmov_l_rr(src,nsrc,13); start_needflags(); test_w_rr(nsrc,nsrc); end_needflags(); cmov_l_rr(PC_P,offs,5); if(srcreg!=src) mov_w_rr(srcreg,src); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5cd0_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int val = scratchie++; make_flags_live(); setcc(val,12); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5cd8_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); { int val = scratchie++; make_flags_live(); setcc(val,12); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5ce0_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int val = scratchie++; make_flags_live(); setcc(val,12); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5ce8_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int val = scratchie++; make_flags_live(); setcc(val,12); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5cf0_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int val = scratchie++; make_flags_live(); setcc(val,12); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5cf8_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int val = scratchie++; make_flags_live(); setcc(val,12); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5cf9_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int val = scratchie++; make_flags_live(); setcc(val,12); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5dc0_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int val = scratchie++; make_flags_live(); setcc(val,13); sub_b_ri(val,1); if(srcreg!=val) mov_b_rr(srcreg,val); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5dc8_0_comp_ff(uae_u32 opcode) /* DBcc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int offs = scratchie++; mov_l_ri(offs,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); sign_extend_16_rr(offs,offs); sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(offs,(uae_u32)comp_pc_p); add_l_ri(offs,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; { int nsrc=scratchie++; make_flags_live(); mov_l_rr(nsrc,src); lea_l_brr(scratchie,src,(uae_s32)-1); mov_w_rr(src,scratchie); cmov_l_rr(offs,PC_P,12); cmov_l_rr(src,nsrc,12); start_needflags(); test_w_rr(nsrc,nsrc); end_needflags(); cmov_l_rr(PC_P,offs,5); if(srcreg!=src) mov_w_rr(srcreg,src); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5dd0_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int val = scratchie++; make_flags_live(); setcc(val,13); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5dd8_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); { int val = scratchie++; make_flags_live(); setcc(val,13); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5de0_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int val = scratchie++; make_flags_live(); setcc(val,13); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5de8_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int val = scratchie++; make_flags_live(); setcc(val,13); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5df0_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int val = scratchie++; make_flags_live(); setcc(val,13); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5df8_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int val = scratchie++; make_flags_live(); setcc(val,13); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5df9_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int val = scratchie++; make_flags_live(); setcc(val,13); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5ec0_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int val = scratchie++; make_flags_live(); setcc(val,14); sub_b_ri(val,1); if(srcreg!=val) mov_b_rr(srcreg,val); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5ec8_0_comp_ff(uae_u32 opcode) /* DBcc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int offs = scratchie++; mov_l_ri(offs,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); sign_extend_16_rr(offs,offs); sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(offs,(uae_u32)comp_pc_p); add_l_ri(offs,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; { int nsrc=scratchie++; make_flags_live(); mov_l_rr(nsrc,src); lea_l_brr(scratchie,src,(uae_s32)-1); mov_w_rr(src,scratchie); cmov_l_rr(offs,PC_P,15); cmov_l_rr(src,nsrc,15); start_needflags(); test_w_rr(nsrc,nsrc); end_needflags(); cmov_l_rr(PC_P,offs,5); if(srcreg!=src) mov_w_rr(srcreg,src); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5ed0_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int val = scratchie++; make_flags_live(); setcc(val,14); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5ed8_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); { int val = scratchie++; make_flags_live(); setcc(val,14); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5ee0_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int val = scratchie++; make_flags_live(); setcc(val,14); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5ee8_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int val = scratchie++; make_flags_live(); setcc(val,14); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5ef0_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int val = scratchie++; make_flags_live(); setcc(val,14); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5ef8_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int val = scratchie++; make_flags_live(); setcc(val,14); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5ef9_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int val = scratchie++; make_flags_live(); setcc(val,14); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5fc0_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int val = scratchie++; make_flags_live(); setcc(val,15); sub_b_ri(val,1); if(srcreg!=val) mov_b_rr(srcreg,val); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5fc8_0_comp_ff(uae_u32 opcode) /* DBcc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int offs = scratchie++; mov_l_ri(offs,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); sign_extend_16_rr(offs,offs); sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(offs,(uae_u32)comp_pc_p); add_l_ri(offs,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; { int nsrc=scratchie++; make_flags_live(); mov_l_rr(nsrc,src); lea_l_brr(scratchie,src,(uae_s32)-1); mov_w_rr(src,scratchie); cmov_l_rr(offs,PC_P,14); cmov_l_rr(src,nsrc,14); start_needflags(); test_w_rr(nsrc,nsrc); end_needflags(); cmov_l_rr(PC_P,offs,5); if(srcreg!=src) mov_w_rr(srcreg,src); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5fd0_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int val = scratchie++; make_flags_live(); setcc(val,15); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5fd8_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); { int val = scratchie++; make_flags_live(); setcc(val,15); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5fe0_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int val = scratchie++; make_flags_live(); setcc(val,15); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5fe8_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int val = scratchie++; make_flags_live(); setcc(val,15); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5ff0_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int val = scratchie++; make_flags_live(); setcc(val,15); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5ff8_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int val = scratchie++; make_flags_live(); setcc(val,15); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5ff9_0_comp_ff(uae_u32 opcode) /* Scc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int val = scratchie++; make_flags_live(); setcc(val,15); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6000_0_comp_ff(uae_u32 opcode) /* Bcc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); sign_extend_16_rr(src,src); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; mov_l_rr(PC_P,src); comp_pc_p=(uae_u8*)get_const(PC_P); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6001_0_comp_ff(uae_u32 opcode) /* Bcc */ { uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,srcreg); sign_extend_8_rr(src,src); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; mov_l_rr(PC_P,src); comp_pc_p=(uae_u8*)get_const(PC_P); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_60ff_0_comp_ff(uae_u32 opcode) /* Bcc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; mov_l_rr(PC_P,src); comp_pc_p=(uae_u8*)get_const(PC_P); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6100_0_comp_ff(uae_u32 opcode) /* BSR */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); and_l_ri(src,~1); { uae_u32 retadd=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; int ret=scratchie++; mov_l_ri(ret,retadd); sub_l_ri(15,4); writelong_clobber(15,ret,scratchie); add_l_ri(src,m68k_pc_offset_thisinst+2); m68k_pc_offset=0; add_l(PC_P,src); comp_pc_p=(uae_u8*)get_const(PC_P); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } #endif #ifdef PART_6 uae_u32 REGPARAM2 op_6101_0_comp_ff(uae_u32 opcode) /* BSR */ { uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); and_l_ri(src,~1); { uae_u32 retadd=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; int ret=scratchie++; mov_l_ri(ret,retadd); sub_l_ri(15,4); writelong_clobber(15,ret,scratchie); add_l_ri(src,m68k_pc_offset_thisinst+2); m68k_pc_offset=0; add_l(PC_P,src); comp_pc_p=(uae_u8*)get_const(PC_P); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6200_0_comp_ff(uae_u32 opcode) /* Bcc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); sign_extend_16_rr(src,src); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; v1=get_const(PC_P); v2=get_const(src); register_branch(v1,v2,7); make_flags_live(); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6201_0_comp_ff(uae_u32 opcode) /* Bcc */ { uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,srcreg); sign_extend_8_rr(src,src); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; v1=get_const(PC_P); v2=get_const(src); register_branch(v1,v2,7); make_flags_live(); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_62ff_0_comp_ff(uae_u32 opcode) /* Bcc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; v1=get_const(PC_P); v2=get_const(src); register_branch(v1,v2,7); make_flags_live(); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6300_0_comp_ff(uae_u32 opcode) /* Bcc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); sign_extend_16_rr(src,src); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; v1=get_const(PC_P); v2=get_const(src); register_branch(v1,v2,6); make_flags_live(); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6301_0_comp_ff(uae_u32 opcode) /* Bcc */ { uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,srcreg); sign_extend_8_rr(src,src); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; v1=get_const(PC_P); v2=get_const(src); register_branch(v1,v2,6); make_flags_live(); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_63ff_0_comp_ff(uae_u32 opcode) /* Bcc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; v1=get_const(PC_P); v2=get_const(src); register_branch(v1,v2,6); make_flags_live(); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6400_0_comp_ff(uae_u32 opcode) /* Bcc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); sign_extend_16_rr(src,src); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; v1=get_const(PC_P); v2=get_const(src); register_branch(v1,v2,3); make_flags_live(); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6401_0_comp_ff(uae_u32 opcode) /* Bcc */ { uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,srcreg); sign_extend_8_rr(src,src); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; v1=get_const(PC_P); v2=get_const(src); register_branch(v1,v2,3); make_flags_live(); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_64ff_0_comp_ff(uae_u32 opcode) /* Bcc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; v1=get_const(PC_P); v2=get_const(src); register_branch(v1,v2,3); make_flags_live(); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6500_0_comp_ff(uae_u32 opcode) /* Bcc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); sign_extend_16_rr(src,src); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; v1=get_const(PC_P); v2=get_const(src); register_branch(v1,v2,2); make_flags_live(); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6501_0_comp_ff(uae_u32 opcode) /* Bcc */ { uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,srcreg); sign_extend_8_rr(src,src); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; v1=get_const(PC_P); v2=get_const(src); register_branch(v1,v2,2); make_flags_live(); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_65ff_0_comp_ff(uae_u32 opcode) /* Bcc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; v1=get_const(PC_P); v2=get_const(src); register_branch(v1,v2,2); make_flags_live(); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6600_0_comp_ff(uae_u32 opcode) /* Bcc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); sign_extend_16_rr(src,src); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; v1=get_const(PC_P); v2=get_const(src); register_branch(v1,v2,5); make_flags_live(); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6601_0_comp_ff(uae_u32 opcode) /* Bcc */ { uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,srcreg); sign_extend_8_rr(src,src); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; v1=get_const(PC_P); v2=get_const(src); register_branch(v1,v2,5); make_flags_live(); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_66ff_0_comp_ff(uae_u32 opcode) /* Bcc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; v1=get_const(PC_P); v2=get_const(src); register_branch(v1,v2,5); make_flags_live(); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6700_0_comp_ff(uae_u32 opcode) /* Bcc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); sign_extend_16_rr(src,src); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; v1=get_const(PC_P); v2=get_const(src); register_branch(v1,v2,4); make_flags_live(); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6701_0_comp_ff(uae_u32 opcode) /* Bcc */ { uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,srcreg); sign_extend_8_rr(src,src); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; v1=get_const(PC_P); v2=get_const(src); register_branch(v1,v2,4); make_flags_live(); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_67ff_0_comp_ff(uae_u32 opcode) /* Bcc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; v1=get_const(PC_P); v2=get_const(src); register_branch(v1,v2,4); make_flags_live(); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6a00_0_comp_ff(uae_u32 opcode) /* Bcc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); sign_extend_16_rr(src,src); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; v1=get_const(PC_P); v2=get_const(src); register_branch(v1,v2,9); make_flags_live(); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6a01_0_comp_ff(uae_u32 opcode) /* Bcc */ { uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,srcreg); sign_extend_8_rr(src,src); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; v1=get_const(PC_P); v2=get_const(src); register_branch(v1,v2,9); make_flags_live(); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6aff_0_comp_ff(uae_u32 opcode) /* Bcc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; v1=get_const(PC_P); v2=get_const(src); register_branch(v1,v2,9); make_flags_live(); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6b00_0_comp_ff(uae_u32 opcode) /* Bcc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); sign_extend_16_rr(src,src); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; v1=get_const(PC_P); v2=get_const(src); register_branch(v1,v2,8); make_flags_live(); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6b01_0_comp_ff(uae_u32 opcode) /* Bcc */ { uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,srcreg); sign_extend_8_rr(src,src); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; v1=get_const(PC_P); v2=get_const(src); register_branch(v1,v2,8); make_flags_live(); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6bff_0_comp_ff(uae_u32 opcode) /* Bcc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; v1=get_const(PC_P); v2=get_const(src); register_branch(v1,v2,8); make_flags_live(); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6c00_0_comp_ff(uae_u32 opcode) /* Bcc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); sign_extend_16_rr(src,src); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; v1=get_const(PC_P); v2=get_const(src); register_branch(v1,v2,13); make_flags_live(); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6c01_0_comp_ff(uae_u32 opcode) /* Bcc */ { uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,srcreg); sign_extend_8_rr(src,src); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; v1=get_const(PC_P); v2=get_const(src); register_branch(v1,v2,13); make_flags_live(); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6cff_0_comp_ff(uae_u32 opcode) /* Bcc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; v1=get_const(PC_P); v2=get_const(src); register_branch(v1,v2,13); make_flags_live(); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6d00_0_comp_ff(uae_u32 opcode) /* Bcc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); sign_extend_16_rr(src,src); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; v1=get_const(PC_P); v2=get_const(src); register_branch(v1,v2,12); make_flags_live(); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6d01_0_comp_ff(uae_u32 opcode) /* Bcc */ { uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,srcreg); sign_extend_8_rr(src,src); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; v1=get_const(PC_P); v2=get_const(src); register_branch(v1,v2,12); make_flags_live(); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6dff_0_comp_ff(uae_u32 opcode) /* Bcc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; v1=get_const(PC_P); v2=get_const(src); register_branch(v1,v2,12); make_flags_live(); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6e00_0_comp_ff(uae_u32 opcode) /* Bcc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); sign_extend_16_rr(src,src); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; v1=get_const(PC_P); v2=get_const(src); register_branch(v1,v2,15); make_flags_live(); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6e01_0_comp_ff(uae_u32 opcode) /* Bcc */ { uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,srcreg); sign_extend_8_rr(src,src); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; v1=get_const(PC_P); v2=get_const(src); register_branch(v1,v2,15); make_flags_live(); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6eff_0_comp_ff(uae_u32 opcode) /* Bcc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; v1=get_const(PC_P); v2=get_const(src); register_branch(v1,v2,15); make_flags_live(); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6f00_0_comp_ff(uae_u32 opcode) /* Bcc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); sign_extend_16_rr(src,src); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; v1=get_const(PC_P); v2=get_const(src); register_branch(v1,v2,14); make_flags_live(); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6f01_0_comp_ff(uae_u32 opcode) /* Bcc */ { uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,srcreg); sign_extend_8_rr(src,src); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; v1=get_const(PC_P); v2=get_const(src); register_branch(v1,v2,14); make_flags_live(); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6fff_0_comp_ff(uae_u32 opcode) /* Bcc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; v1=get_const(PC_P); v2=get_const(src); register_branch(v1,v2,14); make_flags_live(); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_7000_0_comp_ff(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dst=dstreg; dont_care_flags(); { if (src!=dst) { mov_l_ri(dst,0); start_needflags(); or_l(dst,src); } else { mov_l_rr(dst,src); test_l_rr(dst,dst); } live_flags(); end_needflags(); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8000_0_comp_ff(uae_u32 opcode) /* OR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dstreg; dont_care_flags(); { start_needflags(); or_b(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_b_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8010_0_comp_ff(uae_u32 opcode) /* OR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { start_needflags(); or_b(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8018_0_comp_ff(uae_u32 opcode) /* OR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); { int dst=dstreg; dont_care_flags(); { start_needflags(); or_b(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8020_0_comp_ff(uae_u32 opcode) /* OR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { start_needflags(); or_b(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8028_0_comp_ff(uae_u32 opcode) /* OR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { start_needflags(); or_b(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8030_0_comp_ff(uae_u32 opcode) /* OR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { start_needflags(); or_b(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8038_0_comp_ff(uae_u32 opcode) /* OR */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { start_needflags(); or_b(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8039_0_comp_ff(uae_u32 opcode) /* OR */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { start_needflags(); or_b(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_803a_0_comp_ff(uae_u32 opcode) /* OR */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { start_needflags(); or_b(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_803b_0_comp_ff(uae_u32 opcode) /* OR */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { start_needflags(); or_b(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_803c_0_comp_ff(uae_u32 opcode) /* OR */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dst=dstreg; dont_care_flags(); { start_needflags(); or_b(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_b_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8040_0_comp_ff(uae_u32 opcode) /* OR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dstreg; dont_care_flags(); { start_needflags(); or_w(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_w_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8050_0_comp_ff(uae_u32 opcode) /* OR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { start_needflags(); or_w(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8058_0_comp_ff(uae_u32 opcode) /* OR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,2); { int dst=dstreg; dont_care_flags(); { start_needflags(); or_w(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8060_0_comp_ff(uae_u32 opcode) /* OR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-2); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { start_needflags(); or_w(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8068_0_comp_ff(uae_u32 opcode) /* OR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { start_needflags(); or_w(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8070_0_comp_ff(uae_u32 opcode) /* OR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { start_needflags(); or_w(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8078_0_comp_ff(uae_u32 opcode) /* OR */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { start_needflags(); or_w(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8079_0_comp_ff(uae_u32 opcode) /* OR */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { start_needflags(); or_w(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_807a_0_comp_ff(uae_u32 opcode) /* OR */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { start_needflags(); or_w(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_807b_0_comp_ff(uae_u32 opcode) /* OR */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { start_needflags(); or_w(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_807c_0_comp_ff(uae_u32 opcode) /* OR */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=dstreg; dont_care_flags(); { start_needflags(); or_w(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_w_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8080_0_comp_ff(uae_u32 opcode) /* OR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dstreg; dont_care_flags(); { start_needflags(); or_l(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8090_0_comp_ff(uae_u32 opcode) /* OR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { start_needflags(); or_l(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8098_0_comp_ff(uae_u32 opcode) /* OR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,4); { int dst=dstreg; dont_care_flags(); { start_needflags(); or_l(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_80a0_0_comp_ff(uae_u32 opcode) /* OR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-4); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { start_needflags(); or_l(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_80a8_0_comp_ff(uae_u32 opcode) /* OR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { start_needflags(); or_l(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_80b0_0_comp_ff(uae_u32 opcode) /* OR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { start_needflags(); or_l(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_80b8_0_comp_ff(uae_u32 opcode) /* OR */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { start_needflags(); or_l(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_80b9_0_comp_ff(uae_u32 opcode) /* OR */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { start_needflags(); or_l(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_80ba_0_comp_ff(uae_u32 opcode) /* OR */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { start_needflags(); or_l(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_80bb_0_comp_ff(uae_u32 opcode) /* OR */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { start_needflags(); or_l(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_80bc_0_comp_ff(uae_u32 opcode) /* OR */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dst=dstreg; dont_care_flags(); { start_needflags(); or_l(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8110_0_comp_ff(uae_u32 opcode) /* OR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); or_b(dst,src); live_flags(); end_needflags(); } writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8118_0_comp_ff(uae_u32 opcode) /* OR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,areg_byteinc[dstreg]); dont_care_flags(); { start_needflags(); or_b(dst,src); live_flags(); end_needflags(); } writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8120_0_comp_ff(uae_u32 opcode) /* OR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,(uae_s32)-areg_byteinc[dstreg]); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); or_b(dst,src); live_flags(); end_needflags(); } writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8128_0_comp_ff(uae_u32 opcode) /* OR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); or_b(dst,src); live_flags(); end_needflags(); } writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8130_0_comp_ff(uae_u32 opcode) /* OR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); or_b(dst,src); live_flags(); end_needflags(); } writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8138_0_comp_ff(uae_u32 opcode) /* OR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); or_b(dst,src); live_flags(); end_needflags(); } writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8139_0_comp_ff(uae_u32 opcode) /* OR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); or_b(dst,src); live_flags(); end_needflags(); } writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8150_0_comp_ff(uae_u32 opcode) /* OR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); or_w(dst,src); live_flags(); end_needflags(); } writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8158_0_comp_ff(uae_u32 opcode) /* OR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readword(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,2); dont_care_flags(); { start_needflags(); or_w(dst,src); live_flags(); end_needflags(); } writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8160_0_comp_ff(uae_u32 opcode) /* OR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-2); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); or_w(dst,src); live_flags(); end_needflags(); } writeword(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8168_0_comp_ff(uae_u32 opcode) /* OR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); or_w(dst,src); live_flags(); end_needflags(); } writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8170_0_comp_ff(uae_u32 opcode) /* OR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); or_w(dst,src); live_flags(); end_needflags(); } writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8178_0_comp_ff(uae_u32 opcode) /* OR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); or_w(dst,src); live_flags(); end_needflags(); } writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8179_0_comp_ff(uae_u32 opcode) /* OR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); or_w(dst,src); live_flags(); end_needflags(); } writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8190_0_comp_ff(uae_u32 opcode) /* OR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); or_l(dst,src); live_flags(); end_needflags(); } writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8198_0_comp_ff(uae_u32 opcode) /* OR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readlong(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,4); dont_care_flags(); { start_needflags(); or_l(dst,src); live_flags(); end_needflags(); } writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_81a0_0_comp_ff(uae_u32 opcode) /* OR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-4); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); or_l(dst,src); live_flags(); end_needflags(); } writelong(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_81a8_0_comp_ff(uae_u32 opcode) /* OR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); or_l(dst,src); live_flags(); end_needflags(); } writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_81b0_0_comp_ff(uae_u32 opcode) /* OR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); or_l(dst,src); live_flags(); end_needflags(); } writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_81b8_0_comp_ff(uae_u32 opcode) /* OR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); or_l(dst,src); live_flags(); end_needflags(); } writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_81b9_0_comp_ff(uae_u32 opcode) /* OR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); or_l(dst,src); live_flags(); end_needflags(); } writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9000_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dstreg; dont_care_flags(); start_needflags(); sub_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9010_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); start_needflags(); sub_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9018_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); { int dst=dstreg; dont_care_flags(); start_needflags(); sub_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9020_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); start_needflags(); sub_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9028_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); start_needflags(); sub_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9030_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); start_needflags(); sub_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9038_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); start_needflags(); sub_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9039_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); start_needflags(); sub_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_903a_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); start_needflags(); sub_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_903b_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); start_needflags(); sub_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_903c_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dst=dstreg; dont_care_flags(); start_needflags(); sub_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9040_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dstreg; dont_care_flags(); start_needflags(); sub_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9048_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); { int dst=dstreg; dont_care_flags(); start_needflags(); sub_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9050_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); start_needflags(); sub_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9058_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,2); { int dst=dstreg; dont_care_flags(); start_needflags(); sub_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9060_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-2); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); start_needflags(); sub_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9068_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); start_needflags(); sub_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9070_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); start_needflags(); sub_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9078_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); start_needflags(); sub_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9079_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); start_needflags(); sub_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_907a_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); start_needflags(); sub_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_907b_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); start_needflags(); sub_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_907c_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=dstreg; dont_care_flags(); start_needflags(); sub_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9080_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dstreg; dont_care_flags(); start_needflags(); sub_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9088_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); { int dst=dstreg; dont_care_flags(); start_needflags(); sub_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9090_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); start_needflags(); sub_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9098_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,4); { int dst=dstreg; dont_care_flags(); start_needflags(); sub_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_90a0_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-4); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); start_needflags(); sub_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_90a8_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); start_needflags(); sub_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_90b0_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); start_needflags(); sub_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_90b8_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); start_needflags(); sub_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_90b9_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); start_needflags(); sub_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_90ba_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); start_needflags(); sub_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_90bb_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); start_needflags(); sub_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_90bc_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dst=dstreg; dont_care_flags(); start_needflags(); sub_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_90c0_0_comp_ff(uae_u32 opcode) /* SUBA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; sign_extend_16_rr(tmp,src); sub_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_90c8_0_comp_ff(uae_u32 opcode) /* SUBA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; sign_extend_16_rr(tmp,src); sub_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_90d0_0_comp_ff(uae_u32 opcode) /* SUBA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; sign_extend_16_rr(tmp,src); sub_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_90d8_0_comp_ff(uae_u32 opcode) /* SUBA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,2); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; sign_extend_16_rr(tmp,src); sub_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_90e0_0_comp_ff(uae_u32 opcode) /* SUBA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-2); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; sign_extend_16_rr(tmp,src); sub_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_90e8_0_comp_ff(uae_u32 opcode) /* SUBA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; sign_extend_16_rr(tmp,src); sub_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_90f0_0_comp_ff(uae_u32 opcode) /* SUBA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; sign_extend_16_rr(tmp,src); sub_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_90f8_0_comp_ff(uae_u32 opcode) /* SUBA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; sign_extend_16_rr(tmp,src); sub_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_90f9_0_comp_ff(uae_u32 opcode) /* SUBA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; sign_extend_16_rr(tmp,src); sub_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_90fa_0_comp_ff(uae_u32 opcode) /* SUBA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; sign_extend_16_rr(tmp,src); sub_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_90fb_0_comp_ff(uae_u32 opcode) /* SUBA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; sign_extend_16_rr(tmp,src); sub_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_90fc_0_comp_ff(uae_u32 opcode) /* SUBA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; sign_extend_16_rr(tmp,src); sub_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9100_0_comp_ff(uae_u32 opcode) /* SUBX */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dstreg; dont_care_flags(); { int zero=scratchie++; int one=scratchie++; if (needed_flags&FLAG_Z) { mov_l_ri(zero,0); mov_l_ri(one,1); make_flags_live(); cmov_l_rr(zero,one,5); } restore_carry(); start_needflags(); sbb_b(dst,src); live_flags(); if (needed_flags&FLAG_Z) { cmov_l_rr(zero,one,5); setzflg_l(zero); live_flags(); } end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9108_0_comp_ff(uae_u32 opcode) /* SUBX */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readbyte(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,(uae_s32)-areg_byteinc[dstreg]); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); { int zero=scratchie++; int one=scratchie++; if (needed_flags&FLAG_Z) { mov_l_ri(zero,0); mov_l_ri(one,1); make_flags_live(); cmov_l_rr(zero,one,5); } restore_carry(); start_needflags(); sbb_b(dst,src); live_flags(); if (needed_flags&FLAG_Z) { cmov_l_rr(zero,one,5); setzflg_l(zero); live_flags(); } end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9110_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); start_needflags(); sub_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9118_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,areg_byteinc[dstreg]); dont_care_flags(); start_needflags(); sub_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9120_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,(uae_s32)-areg_byteinc[dstreg]); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); start_needflags(); sub_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9128_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); start_needflags(); sub_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9130_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); start_needflags(); sub_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9138_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); start_needflags(); sub_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9139_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); start_needflags(); sub_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9140_0_comp_ff(uae_u32 opcode) /* SUBX */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dstreg; dont_care_flags(); { int zero=scratchie++; int one=scratchie++; if (needed_flags&FLAG_Z) { mov_l_ri(zero,0); mov_l_ri(one,1); make_flags_live(); cmov_l_rr(zero,one,5); } restore_carry(); start_needflags(); sbb_w(dst,src); live_flags(); if (needed_flags&FLAG_Z) { cmov_l_rr(zero,one,5); setzflg_l(zero); live_flags(); } end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9148_0_comp_ff(uae_u32 opcode) /* SUBX */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-2); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readword(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-2); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); { int zero=scratchie++; int one=scratchie++; if (needed_flags&FLAG_Z) { mov_l_ri(zero,0); mov_l_ri(one,1); make_flags_live(); cmov_l_rr(zero,one,5); } restore_carry(); start_needflags(); sbb_w(dst,src); live_flags(); if (needed_flags&FLAG_Z) { cmov_l_rr(zero,one,5); setzflg_l(zero); live_flags(); } end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writeword(dsta,dst,scratchie); }}}}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9150_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); start_needflags(); sub_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9158_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readword(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,2); dont_care_flags(); start_needflags(); sub_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9160_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-2); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); start_needflags(); sub_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writeword(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9168_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); start_needflags(); sub_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9170_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); start_needflags(); sub_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9178_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); start_needflags(); sub_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9179_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); start_needflags(); sub_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9180_0_comp_ff(uae_u32 opcode) /* SUBX */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dstreg; dont_care_flags(); { int zero=scratchie++; int one=scratchie++; if (needed_flags&FLAG_Z) { mov_l_ri(zero,0); mov_l_ri(one,1); make_flags_live(); cmov_l_rr(zero,one,5); } restore_carry(); start_needflags(); sbb_l(dst,src); live_flags(); if (needed_flags&FLAG_Z) { cmov_l_rr(zero,one,5); setzflg_l(zero); live_flags(); } end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9188_0_comp_ff(uae_u32 opcode) /* SUBX */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-4); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readlong(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-4); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); { int zero=scratchie++; int one=scratchie++; if (needed_flags&FLAG_Z) { mov_l_ri(zero,0); mov_l_ri(one,1); make_flags_live(); cmov_l_rr(zero,one,5); } restore_carry(); start_needflags(); sbb_l(dst,src); live_flags(); if (needed_flags&FLAG_Z) { cmov_l_rr(zero,one,5); setzflg_l(zero); live_flags(); } end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writelong(dsta,dst,scratchie); }}}}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9190_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); start_needflags(); sub_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9198_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readlong(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,4); dont_care_flags(); start_needflags(); sub_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_91a0_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-4); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); start_needflags(); sub_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writelong(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_91a8_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); start_needflags(); sub_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_91b0_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); start_needflags(); sub_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_91b8_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); start_needflags(); sub_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_91b9_0_comp_ff(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); start_needflags(); sub_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_91c0_0_comp_ff(uae_u32 opcode) /* SUBA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; tmp=src; sub_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_91c8_0_comp_ff(uae_u32 opcode) /* SUBA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; tmp=src; sub_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_91d0_0_comp_ff(uae_u32 opcode) /* SUBA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; tmp=src; sub_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_91d8_0_comp_ff(uae_u32 opcode) /* SUBA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,4); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; tmp=src; sub_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_91e0_0_comp_ff(uae_u32 opcode) /* SUBA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-4); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; tmp=src; sub_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_91e8_0_comp_ff(uae_u32 opcode) /* SUBA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; tmp=src; sub_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_91f0_0_comp_ff(uae_u32 opcode) /* SUBA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; tmp=src; sub_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_91f8_0_comp_ff(uae_u32 opcode) /* SUBA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; tmp=src; sub_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_91f9_0_comp_ff(uae_u32 opcode) /* SUBA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; tmp=src; sub_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_91fa_0_comp_ff(uae_u32 opcode) /* SUBA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; tmp=src; sub_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_91fb_0_comp_ff(uae_u32 opcode) /* SUBA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; tmp=src; sub_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_91fc_0_comp_ff(uae_u32 opcode) /* SUBA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; tmp=src; sub_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b000_0_comp_ff(uae_u32 opcode) /* CMP */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dstreg; { dont_care_flags(); start_needflags(); cmp_b(dst,src); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b010_0_comp_ff(uae_u32 opcode) /* CMP */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; { dont_care_flags(); start_needflags(); cmp_b(dst,src); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b018_0_comp_ff(uae_u32 opcode) /* CMP */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); { int dst=dstreg; { dont_care_flags(); start_needflags(); cmp_b(dst,src); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b020_0_comp_ff(uae_u32 opcode) /* CMP */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; { dont_care_flags(); start_needflags(); cmp_b(dst,src); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b028_0_comp_ff(uae_u32 opcode) /* CMP */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; { dont_care_flags(); start_needflags(); cmp_b(dst,src); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b030_0_comp_ff(uae_u32 opcode) /* CMP */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; { dont_care_flags(); start_needflags(); cmp_b(dst,src); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b038_0_comp_ff(uae_u32 opcode) /* CMP */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; { dont_care_flags(); start_needflags(); cmp_b(dst,src); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b039_0_comp_ff(uae_u32 opcode) /* CMP */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; { dont_care_flags(); start_needflags(); cmp_b(dst,src); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b03a_0_comp_ff(uae_u32 opcode) /* CMP */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; { dont_care_flags(); start_needflags(); cmp_b(dst,src); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b03b_0_comp_ff(uae_u32 opcode) /* CMP */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; { dont_care_flags(); start_needflags(); cmp_b(dst,src); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b03c_0_comp_ff(uae_u32 opcode) /* CMP */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dst=dstreg; { dont_care_flags(); start_needflags(); cmp_b(dst,src); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b040_0_comp_ff(uae_u32 opcode) /* CMP */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dstreg; { dont_care_flags(); start_needflags(); cmp_w(dst,src); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b048_0_comp_ff(uae_u32 opcode) /* CMP */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); { int dst=dstreg; { dont_care_flags(); start_needflags(); cmp_w(dst,src); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b050_0_comp_ff(uae_u32 opcode) /* CMP */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; { dont_care_flags(); start_needflags(); cmp_w(dst,src); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b058_0_comp_ff(uae_u32 opcode) /* CMP */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,2); { int dst=dstreg; { dont_care_flags(); start_needflags(); cmp_w(dst,src); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b060_0_comp_ff(uae_u32 opcode) /* CMP */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-2); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; { dont_care_flags(); start_needflags(); cmp_w(dst,src); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b068_0_comp_ff(uae_u32 opcode) /* CMP */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; { dont_care_flags(); start_needflags(); cmp_w(dst,src); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b070_0_comp_ff(uae_u32 opcode) /* CMP */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; { dont_care_flags(); start_needflags(); cmp_w(dst,src); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b078_0_comp_ff(uae_u32 opcode) /* CMP */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; { dont_care_flags(); start_needflags(); cmp_w(dst,src); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b079_0_comp_ff(uae_u32 opcode) /* CMP */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; { dont_care_flags(); start_needflags(); cmp_w(dst,src); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b07a_0_comp_ff(uae_u32 opcode) /* CMP */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; { dont_care_flags(); start_needflags(); cmp_w(dst,src); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b07b_0_comp_ff(uae_u32 opcode) /* CMP */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; { dont_care_flags(); start_needflags(); cmp_w(dst,src); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } #endif #ifdef PART_7 uae_u32 REGPARAM2 op_b07c_0_comp_ff(uae_u32 opcode) /* CMP */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=dstreg; { dont_care_flags(); start_needflags(); cmp_w(dst,src); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b080_0_comp_ff(uae_u32 opcode) /* CMP */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dstreg; { dont_care_flags(); start_needflags(); cmp_l(dst,src); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b088_0_comp_ff(uae_u32 opcode) /* CMP */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); { int dst=dstreg; { dont_care_flags(); start_needflags(); cmp_l(dst,src); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b090_0_comp_ff(uae_u32 opcode) /* CMP */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; { dont_care_flags(); start_needflags(); cmp_l(dst,src); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b098_0_comp_ff(uae_u32 opcode) /* CMP */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,4); { int dst=dstreg; { dont_care_flags(); start_needflags(); cmp_l(dst,src); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b0a0_0_comp_ff(uae_u32 opcode) /* CMP */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-4); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; { dont_care_flags(); start_needflags(); cmp_l(dst,src); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b0a8_0_comp_ff(uae_u32 opcode) /* CMP */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; { dont_care_flags(); start_needflags(); cmp_l(dst,src); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b0b0_0_comp_ff(uae_u32 opcode) /* CMP */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; { dont_care_flags(); start_needflags(); cmp_l(dst,src); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b0b8_0_comp_ff(uae_u32 opcode) /* CMP */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; { dont_care_flags(); start_needflags(); cmp_l(dst,src); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b0b9_0_comp_ff(uae_u32 opcode) /* CMP */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; { dont_care_flags(); start_needflags(); cmp_l(dst,src); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b0ba_0_comp_ff(uae_u32 opcode) /* CMP */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; { dont_care_flags(); start_needflags(); cmp_l(dst,src); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b0bb_0_comp_ff(uae_u32 opcode) /* CMP */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; { dont_care_flags(); start_needflags(); cmp_l(dst,src); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b0bc_0_comp_ff(uae_u32 opcode) /* CMP */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dst=dstreg; { dont_care_flags(); start_needflags(); cmp_l(dst,src); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b0c0_0_comp_ff(uae_u32 opcode) /* CMPA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmps=scratchie++; sign_extend_16_rr(tmps,src); dont_care_flags(); start_needflags(); cmp_l(dst,tmps); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b0c8_0_comp_ff(uae_u32 opcode) /* CMPA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmps=scratchie++; sign_extend_16_rr(tmps,src); dont_care_flags(); start_needflags(); cmp_l(dst,tmps); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b0d0_0_comp_ff(uae_u32 opcode) /* CMPA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmps=scratchie++; sign_extend_16_rr(tmps,src); dont_care_flags(); start_needflags(); cmp_l(dst,tmps); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b0d8_0_comp_ff(uae_u32 opcode) /* CMPA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,2); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmps=scratchie++; sign_extend_16_rr(tmps,src); dont_care_flags(); start_needflags(); cmp_l(dst,tmps); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b0e0_0_comp_ff(uae_u32 opcode) /* CMPA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-2); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmps=scratchie++; sign_extend_16_rr(tmps,src); dont_care_flags(); start_needflags(); cmp_l(dst,tmps); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b0e8_0_comp_ff(uae_u32 opcode) /* CMPA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmps=scratchie++; sign_extend_16_rr(tmps,src); dont_care_flags(); start_needflags(); cmp_l(dst,tmps); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b0f0_0_comp_ff(uae_u32 opcode) /* CMPA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmps=scratchie++; sign_extend_16_rr(tmps,src); dont_care_flags(); start_needflags(); cmp_l(dst,tmps); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b0f8_0_comp_ff(uae_u32 opcode) /* CMPA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmps=scratchie++; sign_extend_16_rr(tmps,src); dont_care_flags(); start_needflags(); cmp_l(dst,tmps); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b0f9_0_comp_ff(uae_u32 opcode) /* CMPA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmps=scratchie++; sign_extend_16_rr(tmps,src); dont_care_flags(); start_needflags(); cmp_l(dst,tmps); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b0fa_0_comp_ff(uae_u32 opcode) /* CMPA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmps=scratchie++; sign_extend_16_rr(tmps,src); dont_care_flags(); start_needflags(); cmp_l(dst,tmps); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b0fb_0_comp_ff(uae_u32 opcode) /* CMPA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmps=scratchie++; sign_extend_16_rr(tmps,src); dont_care_flags(); start_needflags(); cmp_l(dst,tmps); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b0fc_0_comp_ff(uae_u32 opcode) /* CMPA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmps=scratchie++; sign_extend_16_rr(tmps,src); dont_care_flags(); start_needflags(); cmp_l(dst,tmps); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b100_0_comp_ff(uae_u32 opcode) /* EOR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dstreg; dont_care_flags(); { start_needflags(); xor_b(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_b_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b108_0_comp_ff(uae_u32 opcode) /* CMPM */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,areg_byteinc[dstreg]); { dont_care_flags(); start_needflags(); cmp_b(dst,src); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b110_0_comp_ff(uae_u32 opcode) /* EOR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); xor_b(dst,src); live_flags(); end_needflags(); } writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b118_0_comp_ff(uae_u32 opcode) /* EOR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,areg_byteinc[dstreg]); dont_care_flags(); { start_needflags(); xor_b(dst,src); live_flags(); end_needflags(); } writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b120_0_comp_ff(uae_u32 opcode) /* EOR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,(uae_s32)-areg_byteinc[dstreg]); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); xor_b(dst,src); live_flags(); end_needflags(); } writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b128_0_comp_ff(uae_u32 opcode) /* EOR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); xor_b(dst,src); live_flags(); end_needflags(); } writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b130_0_comp_ff(uae_u32 opcode) /* EOR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); xor_b(dst,src); live_flags(); end_needflags(); } writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b138_0_comp_ff(uae_u32 opcode) /* EOR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); xor_b(dst,src); live_flags(); end_needflags(); } writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b139_0_comp_ff(uae_u32 opcode) /* EOR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); xor_b(dst,src); live_flags(); end_needflags(); } writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b140_0_comp_ff(uae_u32 opcode) /* EOR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dstreg; dont_care_flags(); { start_needflags(); xor_w(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_w_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b148_0_comp_ff(uae_u32 opcode) /* CMPM */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,2); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readword(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,2); { dont_care_flags(); start_needflags(); cmp_w(dst,src); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b150_0_comp_ff(uae_u32 opcode) /* EOR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); xor_w(dst,src); live_flags(); end_needflags(); } writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b158_0_comp_ff(uae_u32 opcode) /* EOR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readword(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,2); dont_care_flags(); { start_needflags(); xor_w(dst,src); live_flags(); end_needflags(); } writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b160_0_comp_ff(uae_u32 opcode) /* EOR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-2); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); xor_w(dst,src); live_flags(); end_needflags(); } writeword(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b168_0_comp_ff(uae_u32 opcode) /* EOR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); xor_w(dst,src); live_flags(); end_needflags(); } writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b170_0_comp_ff(uae_u32 opcode) /* EOR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); xor_w(dst,src); live_flags(); end_needflags(); } writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b178_0_comp_ff(uae_u32 opcode) /* EOR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); xor_w(dst,src); live_flags(); end_needflags(); } writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b179_0_comp_ff(uae_u32 opcode) /* EOR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); xor_w(dst,src); live_flags(); end_needflags(); } writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b180_0_comp_ff(uae_u32 opcode) /* EOR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dstreg; dont_care_flags(); { start_needflags(); xor_l(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b188_0_comp_ff(uae_u32 opcode) /* CMPM */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,4); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readlong(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,4); { dont_care_flags(); start_needflags(); cmp_l(dst,src); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b190_0_comp_ff(uae_u32 opcode) /* EOR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); xor_l(dst,src); live_flags(); end_needflags(); } writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b198_0_comp_ff(uae_u32 opcode) /* EOR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readlong(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,4); dont_care_flags(); { start_needflags(); xor_l(dst,src); live_flags(); end_needflags(); } writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b1a0_0_comp_ff(uae_u32 opcode) /* EOR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-4); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); xor_l(dst,src); live_flags(); end_needflags(); } writelong(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b1a8_0_comp_ff(uae_u32 opcode) /* EOR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); xor_l(dst,src); live_flags(); end_needflags(); } writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b1b0_0_comp_ff(uae_u32 opcode) /* EOR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); xor_l(dst,src); live_flags(); end_needflags(); } writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b1b8_0_comp_ff(uae_u32 opcode) /* EOR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); xor_l(dst,src); live_flags(); end_needflags(); } writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b1b9_0_comp_ff(uae_u32 opcode) /* EOR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); xor_l(dst,src); live_flags(); end_needflags(); } writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b1c0_0_comp_ff(uae_u32 opcode) /* CMPA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmps=scratchie++; tmps=src; dont_care_flags(); start_needflags(); cmp_l(dst,tmps); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b1c8_0_comp_ff(uae_u32 opcode) /* CMPA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmps=scratchie++; tmps=src; dont_care_flags(); start_needflags(); cmp_l(dst,tmps); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b1d0_0_comp_ff(uae_u32 opcode) /* CMPA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmps=scratchie++; tmps=src; dont_care_flags(); start_needflags(); cmp_l(dst,tmps); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b1d8_0_comp_ff(uae_u32 opcode) /* CMPA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,4); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmps=scratchie++; tmps=src; dont_care_flags(); start_needflags(); cmp_l(dst,tmps); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b1e0_0_comp_ff(uae_u32 opcode) /* CMPA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-4); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmps=scratchie++; tmps=src; dont_care_flags(); start_needflags(); cmp_l(dst,tmps); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b1e8_0_comp_ff(uae_u32 opcode) /* CMPA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmps=scratchie++; tmps=src; dont_care_flags(); start_needflags(); cmp_l(dst,tmps); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b1f0_0_comp_ff(uae_u32 opcode) /* CMPA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmps=scratchie++; tmps=src; dont_care_flags(); start_needflags(); cmp_l(dst,tmps); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b1f8_0_comp_ff(uae_u32 opcode) /* CMPA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmps=scratchie++; tmps=src; dont_care_flags(); start_needflags(); cmp_l(dst,tmps); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b1f9_0_comp_ff(uae_u32 opcode) /* CMPA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmps=scratchie++; tmps=src; dont_care_flags(); start_needflags(); cmp_l(dst,tmps); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b1fa_0_comp_ff(uae_u32 opcode) /* CMPA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmps=scratchie++; tmps=src; dont_care_flags(); start_needflags(); cmp_l(dst,tmps); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b1fb_0_comp_ff(uae_u32 opcode) /* CMPA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmps=scratchie++; tmps=src; dont_care_flags(); start_needflags(); cmp_l(dst,tmps); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b1fc_0_comp_ff(uae_u32 opcode) /* CMPA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmps=scratchie++; tmps=src; dont_care_flags(); start_needflags(); cmp_l(dst,tmps); live_flags(); end_needflags(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c000_0_comp_ff(uae_u32 opcode) /* AND */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dstreg; dont_care_flags(); { start_needflags(); and_b(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_b_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c010_0_comp_ff(uae_u32 opcode) /* AND */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { start_needflags(); and_b(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c018_0_comp_ff(uae_u32 opcode) /* AND */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); { int dst=dstreg; dont_care_flags(); { start_needflags(); and_b(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c020_0_comp_ff(uae_u32 opcode) /* AND */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { start_needflags(); and_b(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c028_0_comp_ff(uae_u32 opcode) /* AND */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { start_needflags(); and_b(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c030_0_comp_ff(uae_u32 opcode) /* AND */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { start_needflags(); and_b(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c038_0_comp_ff(uae_u32 opcode) /* AND */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { start_needflags(); and_b(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c039_0_comp_ff(uae_u32 opcode) /* AND */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { start_needflags(); and_b(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c03a_0_comp_ff(uae_u32 opcode) /* AND */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { start_needflags(); and_b(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c03b_0_comp_ff(uae_u32 opcode) /* AND */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { start_needflags(); and_b(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c03c_0_comp_ff(uae_u32 opcode) /* AND */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dst=dstreg; dont_care_flags(); { start_needflags(); and_b(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_b_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c040_0_comp_ff(uae_u32 opcode) /* AND */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dstreg; dont_care_flags(); { start_needflags(); and_w(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_w_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c050_0_comp_ff(uae_u32 opcode) /* AND */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { start_needflags(); and_w(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c058_0_comp_ff(uae_u32 opcode) /* AND */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,2); { int dst=dstreg; dont_care_flags(); { start_needflags(); and_w(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c060_0_comp_ff(uae_u32 opcode) /* AND */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-2); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { start_needflags(); and_w(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c068_0_comp_ff(uae_u32 opcode) /* AND */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { start_needflags(); and_w(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c070_0_comp_ff(uae_u32 opcode) /* AND */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { start_needflags(); and_w(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c078_0_comp_ff(uae_u32 opcode) /* AND */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { start_needflags(); and_w(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c079_0_comp_ff(uae_u32 opcode) /* AND */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { start_needflags(); and_w(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c07a_0_comp_ff(uae_u32 opcode) /* AND */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { start_needflags(); and_w(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c07b_0_comp_ff(uae_u32 opcode) /* AND */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { start_needflags(); and_w(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c07c_0_comp_ff(uae_u32 opcode) /* AND */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=dstreg; dont_care_flags(); { start_needflags(); and_w(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_w_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c080_0_comp_ff(uae_u32 opcode) /* AND */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dstreg; dont_care_flags(); { start_needflags(); and_l(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c090_0_comp_ff(uae_u32 opcode) /* AND */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { start_needflags(); and_l(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c098_0_comp_ff(uae_u32 opcode) /* AND */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,4); { int dst=dstreg; dont_care_flags(); { start_needflags(); and_l(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c0a0_0_comp_ff(uae_u32 opcode) /* AND */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-4); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { start_needflags(); and_l(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c0a8_0_comp_ff(uae_u32 opcode) /* AND */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { start_needflags(); and_l(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c0b0_0_comp_ff(uae_u32 opcode) /* AND */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { start_needflags(); and_l(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c0b8_0_comp_ff(uae_u32 opcode) /* AND */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { start_needflags(); and_l(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c0b9_0_comp_ff(uae_u32 opcode) /* AND */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { start_needflags(); and_l(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c0ba_0_comp_ff(uae_u32 opcode) /* AND */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { start_needflags(); and_l(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c0bb_0_comp_ff(uae_u32 opcode) /* AND */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { start_needflags(); and_l(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c0bc_0_comp_ff(uae_u32 opcode) /* AND */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dst=dstreg; dont_care_flags(); { start_needflags(); and_l(dst,src); live_flags(); end_needflags(); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c0c0_0_comp_ff(uae_u32 opcode) /* MULU */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int src=srcreg; { int dst=dstreg; zero_extend_16_rr(scratchie,src); zero_extend_16_rr(dst,dst); imul_32_32(dst,scratchie); dont_care_flags(); { start_needflags(); test_l_rr(dst,dst); live_flags(); end_needflags(); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c0d0_0_comp_ff(uae_u32 opcode) /* MULU */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; zero_extend_16_rr(scratchie,src); zero_extend_16_rr(dst,dst); imul_32_32(dst,scratchie); dont_care_flags(); { start_needflags(); test_l_rr(dst,dst); live_flags(); end_needflags(); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c0d8_0_comp_ff(uae_u32 opcode) /* MULU */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,2); { int dst=dstreg; zero_extend_16_rr(scratchie,src); zero_extend_16_rr(dst,dst); imul_32_32(dst,scratchie); dont_care_flags(); { start_needflags(); test_l_rr(dst,dst); live_flags(); end_needflags(); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c0e0_0_comp_ff(uae_u32 opcode) /* MULU */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-2); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; zero_extend_16_rr(scratchie,src); zero_extend_16_rr(dst,dst); imul_32_32(dst,scratchie); dont_care_flags(); { start_needflags(); test_l_rr(dst,dst); live_flags(); end_needflags(); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c0e8_0_comp_ff(uae_u32 opcode) /* MULU */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; zero_extend_16_rr(scratchie,src); zero_extend_16_rr(dst,dst); imul_32_32(dst,scratchie); dont_care_flags(); { start_needflags(); test_l_rr(dst,dst); live_flags(); end_needflags(); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c0f0_0_comp_ff(uae_u32 opcode) /* MULU */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; zero_extend_16_rr(scratchie,src); zero_extend_16_rr(dst,dst); imul_32_32(dst,scratchie); dont_care_flags(); { start_needflags(); test_l_rr(dst,dst); live_flags(); end_needflags(); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c0f8_0_comp_ff(uae_u32 opcode) /* MULU */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; zero_extend_16_rr(scratchie,src); zero_extend_16_rr(dst,dst); imul_32_32(dst,scratchie); dont_care_flags(); { start_needflags(); test_l_rr(dst,dst); live_flags(); end_needflags(); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c0f9_0_comp_ff(uae_u32 opcode) /* MULU */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; zero_extend_16_rr(scratchie,src); zero_extend_16_rr(dst,dst); imul_32_32(dst,scratchie); dont_care_flags(); { start_needflags(); test_l_rr(dst,dst); live_flags(); end_needflags(); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c0fa_0_comp_ff(uae_u32 opcode) /* MULU */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; zero_extend_16_rr(scratchie,src); zero_extend_16_rr(dst,dst); imul_32_32(dst,scratchie); dont_care_flags(); { start_needflags(); test_l_rr(dst,dst); live_flags(); end_needflags(); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c0fb_0_comp_ff(uae_u32 opcode) /* MULU */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; zero_extend_16_rr(scratchie,src); zero_extend_16_rr(dst,dst); imul_32_32(dst,scratchie); dont_care_flags(); { start_needflags(); test_l_rr(dst,dst); live_flags(); end_needflags(); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c0fc_0_comp_ff(uae_u32 opcode) /* MULU */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=dstreg; zero_extend_16_rr(scratchie,src); zero_extend_16_rr(dst,dst); imul_32_32(dst,scratchie); dont_care_flags(); { start_needflags(); test_l_rr(dst,dst); live_flags(); end_needflags(); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c110_0_comp_ff(uae_u32 opcode) /* AND */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); and_b(dst,src); live_flags(); end_needflags(); } writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c118_0_comp_ff(uae_u32 opcode) /* AND */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,areg_byteinc[dstreg]); dont_care_flags(); { start_needflags(); and_b(dst,src); live_flags(); end_needflags(); } writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c120_0_comp_ff(uae_u32 opcode) /* AND */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,(uae_s32)-areg_byteinc[dstreg]); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); and_b(dst,src); live_flags(); end_needflags(); } writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c128_0_comp_ff(uae_u32 opcode) /* AND */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); and_b(dst,src); live_flags(); end_needflags(); } writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c130_0_comp_ff(uae_u32 opcode) /* AND */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); and_b(dst,src); live_flags(); end_needflags(); } writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c138_0_comp_ff(uae_u32 opcode) /* AND */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); and_b(dst,src); live_flags(); end_needflags(); } writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c139_0_comp_ff(uae_u32 opcode) /* AND */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); and_b(dst,src); live_flags(); end_needflags(); } writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c140_0_comp_ff(uae_u32 opcode) /* EXG */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dstreg; { int tmp=scratchie++; mov_l_rr(tmp,src); if(srcreg!=dst) mov_l_rr(srcreg,dst); if(dstreg!=tmp) mov_l_rr(dstreg,tmp); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c148_0_comp_ff(uae_u32 opcode) /* EXG */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; mov_l_rr(tmp,src); if(srcreg+8!=dst) mov_l_rr(srcreg+8,dst); if(dstreg+8!=tmp) mov_l_rr(dstreg+8,tmp); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c150_0_comp_ff(uae_u32 opcode) /* AND */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); and_w(dst,src); live_flags(); end_needflags(); } writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c158_0_comp_ff(uae_u32 opcode) /* AND */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readword(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,2); dont_care_flags(); { start_needflags(); and_w(dst,src); live_flags(); end_needflags(); } writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c160_0_comp_ff(uae_u32 opcode) /* AND */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-2); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); and_w(dst,src); live_flags(); end_needflags(); } writeword(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c168_0_comp_ff(uae_u32 opcode) /* AND */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); and_w(dst,src); live_flags(); end_needflags(); } writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c170_0_comp_ff(uae_u32 opcode) /* AND */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); and_w(dst,src); live_flags(); end_needflags(); } writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c178_0_comp_ff(uae_u32 opcode) /* AND */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); and_w(dst,src); live_flags(); end_needflags(); } writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c179_0_comp_ff(uae_u32 opcode) /* AND */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); and_w(dst,src); live_flags(); end_needflags(); } writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c188_0_comp_ff(uae_u32 opcode) /* EXG */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; mov_l_rr(tmp,src); if(srcreg!=dst) mov_l_rr(srcreg,dst); if(dstreg+8!=tmp) mov_l_rr(dstreg+8,tmp); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c190_0_comp_ff(uae_u32 opcode) /* AND */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); and_l(dst,src); live_flags(); end_needflags(); } writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c198_0_comp_ff(uae_u32 opcode) /* AND */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readlong(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,4); dont_care_flags(); { start_needflags(); and_l(dst,src); live_flags(); end_needflags(); } writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c1a0_0_comp_ff(uae_u32 opcode) /* AND */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-4); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); and_l(dst,src); live_flags(); end_needflags(); } writelong(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c1a8_0_comp_ff(uae_u32 opcode) /* AND */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); and_l(dst,src); live_flags(); end_needflags(); } writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c1b0_0_comp_ff(uae_u32 opcode) /* AND */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); and_l(dst,src); live_flags(); end_needflags(); } writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c1b8_0_comp_ff(uae_u32 opcode) /* AND */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); and_l(dst,src); live_flags(); end_needflags(); } writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c1b9_0_comp_ff(uae_u32 opcode) /* AND */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); { start_needflags(); and_l(dst,src); live_flags(); end_needflags(); } writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c1c0_0_comp_ff(uae_u32 opcode) /* MULS */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int src=srcreg; { int dst=dstreg; sign_extend_16_rr(scratchie,src); sign_extend_16_rr(dst,dst); imul_32_32(dst,scratchie); dont_care_flags(); { start_needflags(); test_l_rr(dst,dst); live_flags(); end_needflags(); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c1d0_0_comp_ff(uae_u32 opcode) /* MULS */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; sign_extend_16_rr(scratchie,src); sign_extend_16_rr(dst,dst); imul_32_32(dst,scratchie); dont_care_flags(); { start_needflags(); test_l_rr(dst,dst); live_flags(); end_needflags(); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c1d8_0_comp_ff(uae_u32 opcode) /* MULS */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,2); { int dst=dstreg; sign_extend_16_rr(scratchie,src); sign_extend_16_rr(dst,dst); imul_32_32(dst,scratchie); dont_care_flags(); { start_needflags(); test_l_rr(dst,dst); live_flags(); end_needflags(); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c1e0_0_comp_ff(uae_u32 opcode) /* MULS */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-2); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; sign_extend_16_rr(scratchie,src); sign_extend_16_rr(dst,dst); imul_32_32(dst,scratchie); dont_care_flags(); { start_needflags(); test_l_rr(dst,dst); live_flags(); end_needflags(); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c1e8_0_comp_ff(uae_u32 opcode) /* MULS */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; sign_extend_16_rr(scratchie,src); sign_extend_16_rr(dst,dst); imul_32_32(dst,scratchie); dont_care_flags(); { start_needflags(); test_l_rr(dst,dst); live_flags(); end_needflags(); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c1f0_0_comp_ff(uae_u32 opcode) /* MULS */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; sign_extend_16_rr(scratchie,src); sign_extend_16_rr(dst,dst); imul_32_32(dst,scratchie); dont_care_flags(); { start_needflags(); test_l_rr(dst,dst); live_flags(); end_needflags(); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c1f8_0_comp_ff(uae_u32 opcode) /* MULS */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; sign_extend_16_rr(scratchie,src); sign_extend_16_rr(dst,dst); imul_32_32(dst,scratchie); dont_care_flags(); { start_needflags(); test_l_rr(dst,dst); live_flags(); end_needflags(); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c1f9_0_comp_ff(uae_u32 opcode) /* MULS */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; sign_extend_16_rr(scratchie,src); sign_extend_16_rr(dst,dst); imul_32_32(dst,scratchie); dont_care_flags(); { start_needflags(); test_l_rr(dst,dst); live_flags(); end_needflags(); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c1fa_0_comp_ff(uae_u32 opcode) /* MULS */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; sign_extend_16_rr(scratchie,src); sign_extend_16_rr(dst,dst); imul_32_32(dst,scratchie); dont_care_flags(); { start_needflags(); test_l_rr(dst,dst); live_flags(); end_needflags(); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c1fb_0_comp_ff(uae_u32 opcode) /* MULS */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; sign_extend_16_rr(scratchie,src); sign_extend_16_rr(dst,dst); imul_32_32(dst,scratchie); dont_care_flags(); { start_needflags(); test_l_rr(dst,dst); live_flags(); end_needflags(); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c1fc_0_comp_ff(uae_u32 opcode) /* MULS */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=dstreg; sign_extend_16_rr(scratchie,src); sign_extend_16_rr(dst,dst); imul_32_32(dst,scratchie); dont_care_flags(); { start_needflags(); test_l_rr(dst,dst); live_flags(); end_needflags(); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d000_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dstreg; dont_care_flags(); start_needflags(); add_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d010_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); start_needflags(); add_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d018_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); { int dst=dstreg; dont_care_flags(); start_needflags(); add_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d020_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); start_needflags(); add_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d028_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); start_needflags(); add_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d030_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); start_needflags(); add_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d038_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); start_needflags(); add_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d039_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); start_needflags(); add_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d03a_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); start_needflags(); add_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d03b_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); start_needflags(); add_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d03c_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dst=dstreg; dont_care_flags(); start_needflags(); add_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d040_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dstreg; dont_care_flags(); start_needflags(); add_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d048_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); { int dst=dstreg; dont_care_flags(); start_needflags(); add_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d050_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); start_needflags(); add_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d058_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,2); { int dst=dstreg; dont_care_flags(); start_needflags(); add_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d060_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-2); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); start_needflags(); add_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d068_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); start_needflags(); add_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d070_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); start_needflags(); add_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d078_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); start_needflags(); add_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d079_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); start_needflags(); add_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d07a_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); start_needflags(); add_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d07b_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); start_needflags(); add_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d07c_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=dstreg; dont_care_flags(); start_needflags(); add_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d080_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dstreg; dont_care_flags(); start_needflags(); add_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d088_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); { int dst=dstreg; dont_care_flags(); start_needflags(); add_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d090_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); start_needflags(); add_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d098_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,4); { int dst=dstreg; dont_care_flags(); start_needflags(); add_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d0a0_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-4); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); start_needflags(); add_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d0a8_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); start_needflags(); add_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d0b0_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); start_needflags(); add_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d0b8_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); start_needflags(); add_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d0b9_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); start_needflags(); add_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d0ba_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); start_needflags(); add_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d0bb_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); start_needflags(); add_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d0bc_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dst=dstreg; dont_care_flags(); start_needflags(); add_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d0c0_0_comp_ff(uae_u32 opcode) /* ADDA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; sign_extend_16_rr(tmp,src); add_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d0c8_0_comp_ff(uae_u32 opcode) /* ADDA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; sign_extend_16_rr(tmp,src); add_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d0d0_0_comp_ff(uae_u32 opcode) /* ADDA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; sign_extend_16_rr(tmp,src); add_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d0d8_0_comp_ff(uae_u32 opcode) /* ADDA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,2); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; sign_extend_16_rr(tmp,src); add_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d0e0_0_comp_ff(uae_u32 opcode) /* ADDA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-2); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; sign_extend_16_rr(tmp,src); add_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d0e8_0_comp_ff(uae_u32 opcode) /* ADDA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; sign_extend_16_rr(tmp,src); add_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d0f0_0_comp_ff(uae_u32 opcode) /* ADDA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; sign_extend_16_rr(tmp,src); add_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d0f8_0_comp_ff(uae_u32 opcode) /* ADDA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; sign_extend_16_rr(tmp,src); add_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d0f9_0_comp_ff(uae_u32 opcode) /* ADDA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; sign_extend_16_rr(tmp,src); add_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d0fa_0_comp_ff(uae_u32 opcode) /* ADDA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; sign_extend_16_rr(tmp,src); add_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d0fb_0_comp_ff(uae_u32 opcode) /* ADDA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; sign_extend_16_rr(tmp,src); add_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d0fc_0_comp_ff(uae_u32 opcode) /* ADDA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; sign_extend_16_rr(tmp,src); add_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d100_0_comp_ff(uae_u32 opcode) /* ADDX */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dstreg; { dont_care_flags(); { int zero=scratchie++; int one=scratchie++; if (needed_flags&FLAG_Z) { mov_l_ri(zero,0); mov_l_ri(one,1); make_flags_live(); cmov_l_rr(zero,one,5); } restore_carry(); start_needflags(); adc_b(dst,src); live_flags(); if (needed_flags&FLAG_Z) { cmov_l_rr(zero,one,5); setzflg_l(zero); live_flags(); } end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d108_0_comp_ff(uae_u32 opcode) /* ADDX */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readbyte(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,(uae_s32)-areg_byteinc[dstreg]); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { dont_care_flags(); { int zero=scratchie++; int one=scratchie++; if (needed_flags&FLAG_Z) { mov_l_ri(zero,0); mov_l_ri(one,1); make_flags_live(); cmov_l_rr(zero,one,5); } restore_carry(); start_needflags(); adc_b(dst,src); live_flags(); if (needed_flags&FLAG_Z) { cmov_l_rr(zero,one,5); setzflg_l(zero); live_flags(); } end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d110_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); start_needflags(); add_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d118_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,areg_byteinc[dstreg]); dont_care_flags(); start_needflags(); add_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d120_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,(uae_s32)-areg_byteinc[dstreg]); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); start_needflags(); add_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d128_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); start_needflags(); add_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d130_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); start_needflags(); add_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d138_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); start_needflags(); add_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d139_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); start_needflags(); add_b(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d140_0_comp_ff(uae_u32 opcode) /* ADDX */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dstreg; { dont_care_flags(); { int zero=scratchie++; int one=scratchie++; if (needed_flags&FLAG_Z) { mov_l_ri(zero,0); mov_l_ri(one,1); make_flags_live(); cmov_l_rr(zero,one,5); } restore_carry(); start_needflags(); adc_w(dst,src); live_flags(); if (needed_flags&FLAG_Z) { cmov_l_rr(zero,one,5); setzflg_l(zero); live_flags(); } end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d148_0_comp_ff(uae_u32 opcode) /* ADDX */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-2); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readword(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-2); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readword(dsta,dst,scratchie); { dont_care_flags(); { int zero=scratchie++; int one=scratchie++; if (needed_flags&FLAG_Z) { mov_l_ri(zero,0); mov_l_ri(one,1); make_flags_live(); cmov_l_rr(zero,one,5); } restore_carry(); start_needflags(); adc_w(dst,src); live_flags(); if (needed_flags&FLAG_Z) { cmov_l_rr(zero,one,5); setzflg_l(zero); live_flags(); } end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writeword(dsta,dst,scratchie); }}}}}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d150_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); start_needflags(); add_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d158_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readword(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,2); dont_care_flags(); start_needflags(); add_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d160_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-2); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); start_needflags(); add_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writeword(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d168_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); start_needflags(); add_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d170_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); start_needflags(); add_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d178_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); start_needflags(); add_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d179_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); start_needflags(); add_w(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d180_0_comp_ff(uae_u32 opcode) /* ADDX */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dstreg; { dont_care_flags(); { int zero=scratchie++; int one=scratchie++; if (needed_flags&FLAG_Z) { mov_l_ri(zero,0); mov_l_ri(one,1); make_flags_live(); cmov_l_rr(zero,one,5); } restore_carry(); start_needflags(); adc_l(dst,src); live_flags(); if (needed_flags&FLAG_Z) { cmov_l_rr(zero,one,5); setzflg_l(zero); live_flags(); } end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d188_0_comp_ff(uae_u32 opcode) /* ADDX */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-4); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readlong(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-4); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readlong(dsta,dst,scratchie); { dont_care_flags(); { int zero=scratchie++; int one=scratchie++; if (needed_flags&FLAG_Z) { mov_l_ri(zero,0); mov_l_ri(one,1); make_flags_live(); cmov_l_rr(zero,one,5); } restore_carry(); start_needflags(); adc_l(dst,src); live_flags(); if (needed_flags&FLAG_Z) { cmov_l_rr(zero,one,5); setzflg_l(zero); live_flags(); } end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writelong(dsta,dst,scratchie); }}}}}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d190_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); start_needflags(); add_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d198_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readlong(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,4); dont_care_flags(); start_needflags(); add_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d1a0_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-4); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); start_needflags(); add_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writelong(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d1a8_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); start_needflags(); add_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d1b0_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); start_needflags(); add_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d1b8_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); start_needflags(); add_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d1b9_0_comp_ff(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); start_needflags(); add_l(dst,src); live_flags(); end_needflags(); if (needed_flags&FLAG_X) duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d1c0_0_comp_ff(uae_u32 opcode) /* ADDA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; tmp=src; add_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d1c8_0_comp_ff(uae_u32 opcode) /* ADDA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; tmp=src; add_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d1d0_0_comp_ff(uae_u32 opcode) /* ADDA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; tmp=src; add_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d1d8_0_comp_ff(uae_u32 opcode) /* ADDA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,4); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; tmp=src; add_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d1e0_0_comp_ff(uae_u32 opcode) /* ADDA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-4); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; tmp=src; add_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d1e8_0_comp_ff(uae_u32 opcode) /* ADDA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; tmp=src; add_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d1f0_0_comp_ff(uae_u32 opcode) /* ADDA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; tmp=src; add_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d1f8_0_comp_ff(uae_u32 opcode) /* ADDA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; tmp=src; add_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d1f9_0_comp_ff(uae_u32 opcode) /* ADDA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; tmp=src; add_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d1fa_0_comp_ff(uae_u32 opcode) /* ADDA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; tmp=src; add_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d1fb_0_comp_ff(uae_u32 opcode) /* ADDA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; tmp=src; add_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d1fc_0_comp_ff(uae_u32 opcode) /* ADDA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; tmp=src; add_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_e000_0_comp_ff(uae_u32 opcode) /* ASR */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int cnt = scratchie++; mov_l_ri(cnt,srcreg); { int data=dstreg; { int tmp=scratchie++; int bp; mov_l_rr(tmp,data); shra_b_ri(data,srcreg); bp=srcreg-1; start_needflags(); if (needed_flags & FLAG_ZNV) test_b_rr(data,data); bt_l_ri(tmp,bp); live_flags(); end_needflags(); duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=data) mov_b_rr(dstreg,data); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_e008_0_comp_ff(uae_u32 opcode) /* LSR */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int cnt = scratchie++; mov_l_ri(cnt,srcreg); { int data=dstreg; { int tmp=scratchie++; int bp; mov_l_rr(tmp,data); shrl_b_ri(data,srcreg); bp=srcreg-1; start_needflags(); if (needed_flags & FLAG_ZNV) test_b_rr(data,data); bt_l_ri(tmp,bp); live_flags(); end_needflags(); duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=data) mov_b_rr(dstreg,data); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_e018_0_comp_ff(uae_u32 opcode) /* ROR */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int cnt = scratchie++; mov_l_ri(cnt,srcreg); { int data=dstreg; { ror_b_rr(data,cnt); start_needflags(); if (needed_flags & FLAG_ZNV) test_b_rr(data,data); bt_l_ri(data,0x07); live_flags(); end_needflags(); if(dstreg!=data) mov_b_rr(dstreg,data); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } #endif #ifdef PART_8 uae_u32 REGPARAM2 op_e020_0_comp_ff(uae_u32 opcode) /* ASR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; if ((uae_u32)srcreg==(uae_u32)dstreg) { FAIL(1); return 0; } { dont_care_flags(); { int cnt=srcreg; { int data=dstreg; { int highmask; int width; int cdata=scratchie++; int tmpcnt=scratchie++; int highshift=scratchie++; mov_l_rr(tmpcnt,cnt); and_l_ri(tmpcnt,63); mov_l_ri(cdata,0); cmov_l_rr(cdata,data,5); shra_b_rr(data,cnt); highmask=0x38; width=8; test_l_ri(cnt,highmask); mov_l_ri(highshift,0); mov_l_ri(scratchie,width/2); cmov_l_rr(highshift,scratchie,5); shra_b_rr(data,highshift); shra_b_rr(data,highshift); sub_l_ri(tmpcnt,1); shra_b_rr(cdata,tmpcnt); test_l_ri(tmpcnt,highmask); cmov_l_rr(cdata,data,5); start_needflags(); if (needed_flags & FLAG_ZNV) test_b_rr(data,data); bt_l_ri(cdata,0); live_flags(); end_needflags(); duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=data) mov_b_rr(dstreg,data); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_e028_0_comp_ff(uae_u32 opcode) /* LSR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; if ((uae_u32)srcreg==(uae_u32)dstreg) { FAIL(1); return 0; } { dont_care_flags(); { int cnt=srcreg; { int data=dstreg; { int highmask; int cdata=scratchie++; int tmpcnt=scratchie++; mov_l_rr(tmpcnt,cnt); and_l_ri(tmpcnt,63); mov_l_ri(cdata,0); cmov_l_rr(cdata,data,5); shrl_b_rr(data,cnt); highmask=0x38; test_l_ri(cnt,highmask); mov_l_ri(scratchie,0); cmov_l_rr(scratchie,data,4); mov_b_rr(data,scratchie); sub_l_ri(tmpcnt,1); shrl_b_rr(cdata,tmpcnt); test_l_ri(tmpcnt,highmask); mov_l_ri(scratchie,0); cmov_l_rr(cdata,scratchie,5); start_needflags(); if (needed_flags & FLAG_ZNV) test_b_rr(data,data); bt_l_ri(cdata,0); live_flags(); end_needflags(); duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=data) mov_b_rr(dstreg,data); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_e038_0_comp_ff(uae_u32 opcode) /* ROR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; if ((uae_u32)srcreg==(uae_u32)dstreg) { FAIL(1); return 0; } { dont_care_flags(); { int cnt=srcreg; { int data=dstreg; { ror_b_rr(data,cnt); start_needflags(); if (needed_flags & FLAG_ZNV) test_b_rr(data,data); bt_l_ri(data,0x07); live_flags(); end_needflags(); if(dstreg!=data) mov_b_rr(dstreg,data); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_e040_0_comp_ff(uae_u32 opcode) /* ASR */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int cnt = scratchie++; mov_l_ri(cnt,srcreg); { int data=dstreg; { int tmp=scratchie++; int bp; mov_l_rr(tmp,data); shra_w_ri(data,srcreg); bp=srcreg-1; start_needflags(); if (needed_flags & FLAG_ZNV) test_w_rr(data,data); bt_l_ri(tmp,bp); live_flags(); end_needflags(); duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=data) mov_w_rr(dstreg,data); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_e048_0_comp_ff(uae_u32 opcode) /* LSR */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int cnt = scratchie++; mov_l_ri(cnt,srcreg); { int data=dstreg; { int tmp=scratchie++; int bp; mov_l_rr(tmp,data); shrl_w_ri(data,srcreg); bp=srcreg-1; start_needflags(); if (needed_flags & FLAG_ZNV) test_w_rr(data,data); bt_l_ri(tmp,bp); live_flags(); end_needflags(); duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=data) mov_w_rr(dstreg,data); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_e058_0_comp_ff(uae_u32 opcode) /* ROR */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int cnt = scratchie++; mov_l_ri(cnt,srcreg); { int data=dstreg; { ror_w_rr(data,cnt); start_needflags(); if (needed_flags & FLAG_ZNV) test_w_rr(data,data); bt_l_ri(data,0x0f); live_flags(); end_needflags(); if(dstreg!=data) mov_w_rr(dstreg,data); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_e060_0_comp_ff(uae_u32 opcode) /* ASR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; if ((uae_u32)srcreg==(uae_u32)dstreg) { FAIL(1); return 0; } { dont_care_flags(); { int cnt=srcreg; { int data=dstreg; { int highmask; int width; int cdata=scratchie++; int tmpcnt=scratchie++; int highshift=scratchie++; mov_l_rr(tmpcnt,cnt); and_l_ri(tmpcnt,63); mov_l_ri(cdata,0); cmov_l_rr(cdata,data,5); shra_w_rr(data,cnt); highmask=0x30; width=16; test_l_ri(cnt,highmask); mov_l_ri(highshift,0); mov_l_ri(scratchie,width/2); cmov_l_rr(highshift,scratchie,5); shra_w_rr(data,highshift); shra_w_rr(data,highshift); sub_l_ri(tmpcnt,1); shra_w_rr(cdata,tmpcnt); test_l_ri(tmpcnt,highmask); cmov_l_rr(cdata,data,5); start_needflags(); if (needed_flags & FLAG_ZNV) test_w_rr(data,data); bt_l_ri(cdata,0); live_flags(); end_needflags(); duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=data) mov_w_rr(dstreg,data); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_e068_0_comp_ff(uae_u32 opcode) /* LSR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; if ((uae_u32)srcreg==(uae_u32)dstreg) { FAIL(1); return 0; } { dont_care_flags(); { int cnt=srcreg; { int data=dstreg; { int highmask; int cdata=scratchie++; int tmpcnt=scratchie++; mov_l_rr(tmpcnt,cnt); and_l_ri(tmpcnt,63); mov_l_ri(cdata,0); cmov_l_rr(cdata,data,5); shrl_w_rr(data,cnt); highmask=0x30; test_l_ri(cnt,highmask); mov_l_ri(scratchie,0); cmov_l_rr(scratchie,data,4); mov_w_rr(data,scratchie); sub_l_ri(tmpcnt,1); shrl_w_rr(cdata,tmpcnt); test_l_ri(tmpcnt,highmask); mov_l_ri(scratchie,0); cmov_l_rr(cdata,scratchie,5); start_needflags(); if (needed_flags & FLAG_ZNV) test_w_rr(data,data); bt_l_ri(cdata,0); live_flags(); end_needflags(); duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=data) mov_w_rr(dstreg,data); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_e078_0_comp_ff(uae_u32 opcode) /* ROR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; if ((uae_u32)srcreg==(uae_u32)dstreg) { FAIL(1); return 0; } { dont_care_flags(); { int cnt=srcreg; { int data=dstreg; { ror_w_rr(data,cnt); start_needflags(); if (needed_flags & FLAG_ZNV) test_w_rr(data,data); bt_l_ri(data,0x0f); live_flags(); end_needflags(); if(dstreg!=data) mov_w_rr(dstreg,data); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_e080_0_comp_ff(uae_u32 opcode) /* ASR */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int cnt = scratchie++; mov_l_ri(cnt,srcreg); { int data=dstreg; { int tmp=scratchie++; int bp; mov_l_rr(tmp,data); shra_l_ri(data,srcreg); bp=srcreg-1; start_needflags(); if (needed_flags & FLAG_ZNV) test_l_rr(data,data); bt_l_ri(tmp,bp); live_flags(); end_needflags(); duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=data) mov_l_rr(dstreg,data); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_e088_0_comp_ff(uae_u32 opcode) /* LSR */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int cnt = scratchie++; mov_l_ri(cnt,srcreg); { int data=dstreg; { int tmp=scratchie++; int bp; mov_l_rr(tmp,data); shrl_l_ri(data,srcreg); bp=srcreg-1; start_needflags(); if (needed_flags & FLAG_ZNV) test_l_rr(data,data); bt_l_ri(tmp,bp); live_flags(); end_needflags(); duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=data) mov_l_rr(dstreg,data); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_e098_0_comp_ff(uae_u32 opcode) /* ROR */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int cnt = scratchie++; mov_l_ri(cnt,srcreg); { int data=dstreg; { ror_l_rr(data,cnt); start_needflags(); if (needed_flags & FLAG_ZNV) test_l_rr(data,data); bt_l_ri(data,0x1f); live_flags(); end_needflags(); if(dstreg!=data) mov_l_rr(dstreg,data); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_e0a0_0_comp_ff(uae_u32 opcode) /* ASR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; if ((uae_u32)srcreg==(uae_u32)dstreg) { FAIL(1); return 0; } { dont_care_flags(); { int cnt=srcreg; { int data=dstreg; { int highmask; int width; int cdata=scratchie++; int tmpcnt=scratchie++; int highshift=scratchie++; mov_l_rr(tmpcnt,cnt); and_l_ri(tmpcnt,63); mov_l_ri(cdata,0); cmov_l_rr(cdata,data,5); shra_l_rr(data,cnt); highmask=0x20; width=32; test_l_ri(cnt,highmask); mov_l_ri(highshift,0); mov_l_ri(scratchie,width/2); cmov_l_rr(highshift,scratchie,5); shra_l_rr(data,highshift); shra_l_rr(data,highshift); sub_l_ri(tmpcnt,1); shra_l_rr(cdata,tmpcnt); test_l_ri(tmpcnt,highmask); cmov_l_rr(cdata,data,5); start_needflags(); if (needed_flags & FLAG_ZNV) test_l_rr(data,data); bt_l_ri(cdata,0); live_flags(); end_needflags(); duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=data) mov_l_rr(dstreg,data); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_e0a8_0_comp_ff(uae_u32 opcode) /* LSR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; if ((uae_u32)srcreg==(uae_u32)dstreg) { FAIL(1); return 0; } { dont_care_flags(); { int cnt=srcreg; { int data=dstreg; { int highmask; int cdata=scratchie++; int tmpcnt=scratchie++; mov_l_rr(tmpcnt,cnt); and_l_ri(tmpcnt,63); mov_l_ri(cdata,0); cmov_l_rr(cdata,data,5); shrl_l_rr(data,cnt); highmask=0x20; test_l_ri(cnt,highmask); mov_l_ri(scratchie,0); cmov_l_rr(scratchie,data,4); mov_l_rr(data,scratchie); sub_l_ri(tmpcnt,1); shrl_l_rr(cdata,tmpcnt); test_l_ri(tmpcnt,highmask); mov_l_ri(scratchie,0); cmov_l_rr(cdata,scratchie,5); start_needflags(); if (needed_flags & FLAG_ZNV) test_l_rr(data,data); bt_l_ri(cdata,0); live_flags(); end_needflags(); duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=data) mov_l_rr(dstreg,data); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_e0b8_0_comp_ff(uae_u32 opcode) /* ROR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; if ((uae_u32)srcreg==(uae_u32)dstreg) { FAIL(1); return 0; } { dont_care_flags(); { int cnt=srcreg; { int data=dstreg; { ror_l_rr(data,cnt); start_needflags(); if (needed_flags & FLAG_ZNV) test_l_rr(data,data); bt_l_ri(data,0x1f); live_flags(); end_needflags(); if(dstreg!=data) mov_l_rr(dstreg,data); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_e100_0_comp_ff(uae_u32 opcode) /* ASL */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); if (needed_flags & FLAG_V) { FAIL(1); return 0; } { int cnt = scratchie++; mov_l_ri(cnt,srcreg); { int data=dstreg; { int tmp=scratchie++; int bp; mov_l_rr(tmp,data); shll_b_ri(data,srcreg); bp=8-srcreg; start_needflags(); if (needed_flags & FLAG_ZNV) test_b_rr(data,data); bt_l_ri(tmp,bp); live_flags(); end_needflags(); duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=data) mov_b_rr(dstreg,data); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_e108_0_comp_ff(uae_u32 opcode) /* LSL */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int cnt = scratchie++; mov_l_ri(cnt,srcreg); { int data=dstreg; { int tmp=scratchie++; int bp; mov_l_rr(tmp,data); shll_b_ri(data,srcreg); bp=8-srcreg; start_needflags(); if (needed_flags & FLAG_ZNV) test_b_rr(data,data); bt_l_ri(tmp,bp); live_flags(); end_needflags(); duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=data) mov_b_rr(dstreg,data); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_e118_0_comp_ff(uae_u32 opcode) /* ROL */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int cnt = scratchie++; mov_l_ri(cnt,srcreg); { int data=dstreg; { rol_b_rr(data,cnt); start_needflags(); if (needed_flags & FLAG_ZNV) test_b_rr(data,data); bt_l_ri(data,0x00); live_flags(); end_needflags(); if(dstreg!=data) mov_b_rr(dstreg,data); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_e120_0_comp_ff(uae_u32 opcode) /* ASL */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; if ((uae_u32)srcreg==(uae_u32)dstreg) { FAIL(1); return 0; } { dont_care_flags(); if (needed_flags & FLAG_V) { FAIL(1); return 0; } { int cnt=srcreg; { int data=dstreg; { int highmask; int cdata=scratchie++; int tmpcnt=scratchie++; mov_l_rr(tmpcnt,cnt); and_l_ri(tmpcnt,63); mov_l_ri(cdata,0); cmov_l_rr(cdata,data,5); shll_b_rr(data,cnt); highmask=0x38; test_l_ri(cnt,highmask); mov_l_ri(scratchie,0); cmov_l_rr(scratchie,data,4); mov_b_rr(data,scratchie); sub_l_ri(tmpcnt,1); shll_b_rr(cdata,tmpcnt); test_l_ri(tmpcnt,highmask); mov_l_ri(scratchie,0); cmov_l_rr(cdata,scratchie,5); start_needflags(); if (needed_flags & FLAG_ZNV) test_b_rr(data,data); bt_l_ri(cdata,7); live_flags(); end_needflags(); duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=data) mov_b_rr(dstreg,data); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_e128_0_comp_ff(uae_u32 opcode) /* LSL */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int cnt=srcreg; { int data=dstreg; { int highmask; int cdata=scratchie++; int tmpcnt=scratchie++; mov_l_rr(tmpcnt,cnt); and_l_ri(tmpcnt,63); mov_l_ri(cdata,0); cmov_l_rr(cdata,data,5); shll_b_rr(data,cnt); highmask=0x38; test_l_ri(cnt,highmask); mov_l_ri(scratchie,0); cmov_l_rr(scratchie,data,4); mov_b_rr(data,scratchie); sub_l_ri(tmpcnt,1); shll_b_rr(cdata,tmpcnt); test_l_ri(tmpcnt,highmask); mov_l_ri(scratchie,0); cmov_l_rr(cdata,scratchie,5); start_needflags(); if (needed_flags & FLAG_ZNV) test_b_rr(data,data); bt_l_ri(cdata,7); live_flags(); end_needflags(); duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=data) mov_b_rr(dstreg,data); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_e138_0_comp_ff(uae_u32 opcode) /* ROL */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; if ((uae_u32)srcreg==(uae_u32)dstreg) { FAIL(1); return 0; } { dont_care_flags(); { int cnt=srcreg; { int data=dstreg; { rol_b_rr(data,cnt); start_needflags(); if (needed_flags & FLAG_ZNV) test_b_rr(data,data); bt_l_ri(data,0x00); live_flags(); end_needflags(); if(dstreg!=data) mov_b_rr(dstreg,data); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_e140_0_comp_ff(uae_u32 opcode) /* ASL */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); if (needed_flags & FLAG_V) { FAIL(1); return 0; } { int cnt = scratchie++; mov_l_ri(cnt,srcreg); { int data=dstreg; { int tmp=scratchie++; int bp; mov_l_rr(tmp,data); shll_w_ri(data,srcreg); bp=16-srcreg; start_needflags(); if (needed_flags & FLAG_ZNV) test_w_rr(data,data); bt_l_ri(tmp,bp); live_flags(); end_needflags(); duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=data) mov_w_rr(dstreg,data); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_e148_0_comp_ff(uae_u32 opcode) /* LSL */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int cnt = scratchie++; mov_l_ri(cnt,srcreg); { int data=dstreg; { int tmp=scratchie++; int bp; mov_l_rr(tmp,data); shll_w_ri(data,srcreg); bp=16-srcreg; start_needflags(); if (needed_flags & FLAG_ZNV) test_w_rr(data,data); bt_l_ri(tmp,bp); live_flags(); end_needflags(); duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=data) mov_w_rr(dstreg,data); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_e158_0_comp_ff(uae_u32 opcode) /* ROL */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int cnt = scratchie++; mov_l_ri(cnt,srcreg); { int data=dstreg; { rol_w_rr(data,cnt); start_needflags(); if (needed_flags & FLAG_ZNV) test_w_rr(data,data); bt_l_ri(data,0x00); live_flags(); end_needflags(); if(dstreg!=data) mov_w_rr(dstreg,data); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_e160_0_comp_ff(uae_u32 opcode) /* ASL */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; if ((uae_u32)srcreg==(uae_u32)dstreg) { FAIL(1); return 0; } { dont_care_flags(); if (needed_flags & FLAG_V) { FAIL(1); return 0; } { int cnt=srcreg; { int data=dstreg; { int highmask; int cdata=scratchie++; int tmpcnt=scratchie++; mov_l_rr(tmpcnt,cnt); and_l_ri(tmpcnt,63); mov_l_ri(cdata,0); cmov_l_rr(cdata,data,5); shll_w_rr(data,cnt); highmask=0x30; test_l_ri(cnt,highmask); mov_l_ri(scratchie,0); cmov_l_rr(scratchie,data,4); mov_w_rr(data,scratchie); sub_l_ri(tmpcnt,1); shll_w_rr(cdata,tmpcnt); test_l_ri(tmpcnt,highmask); mov_l_ri(scratchie,0); cmov_l_rr(cdata,scratchie,5); start_needflags(); if (needed_flags & FLAG_ZNV) test_w_rr(data,data); bt_l_ri(cdata,15); live_flags(); end_needflags(); duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=data) mov_w_rr(dstreg,data); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_e168_0_comp_ff(uae_u32 opcode) /* LSL */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int cnt=srcreg; { int data=dstreg; { int highmask; int cdata=scratchie++; int tmpcnt=scratchie++; mov_l_rr(tmpcnt,cnt); and_l_ri(tmpcnt,63); mov_l_ri(cdata,0); cmov_l_rr(cdata,data,5); shll_w_rr(data,cnt); highmask=0x30; test_l_ri(cnt,highmask); mov_l_ri(scratchie,0); cmov_l_rr(scratchie,data,4); mov_w_rr(data,scratchie); sub_l_ri(tmpcnt,1); shll_w_rr(cdata,tmpcnt); test_l_ri(tmpcnt,highmask); mov_l_ri(scratchie,0); cmov_l_rr(cdata,scratchie,5); start_needflags(); if (needed_flags & FLAG_ZNV) test_w_rr(data,data); bt_l_ri(cdata,15); live_flags(); end_needflags(); duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=data) mov_w_rr(dstreg,data); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_e178_0_comp_ff(uae_u32 opcode) /* ROL */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; if ((uae_u32)srcreg==(uae_u32)dstreg) { FAIL(1); return 0; } { dont_care_flags(); { int cnt=srcreg; { int data=dstreg; { rol_w_rr(data,cnt); start_needflags(); if (needed_flags & FLAG_ZNV) test_w_rr(data,data); bt_l_ri(data,0x00); live_flags(); end_needflags(); if(dstreg!=data) mov_w_rr(dstreg,data); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_e180_0_comp_ff(uae_u32 opcode) /* ASL */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); if (needed_flags & FLAG_V) { FAIL(1); return 0; } { int cnt = scratchie++; mov_l_ri(cnt,srcreg); { int data=dstreg; { int tmp=scratchie++; int bp; mov_l_rr(tmp,data); shll_l_ri(data,srcreg); bp=32-srcreg; start_needflags(); if (needed_flags & FLAG_ZNV) test_l_rr(data,data); bt_l_ri(tmp,bp); live_flags(); end_needflags(); duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=data) mov_l_rr(dstreg,data); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_e188_0_comp_ff(uae_u32 opcode) /* LSL */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int cnt = scratchie++; mov_l_ri(cnt,srcreg); { int data=dstreg; { int tmp=scratchie++; int bp; mov_l_rr(tmp,data); shll_l_ri(data,srcreg); bp=32-srcreg; start_needflags(); if (needed_flags & FLAG_ZNV) test_l_rr(data,data); bt_l_ri(tmp,bp); live_flags(); end_needflags(); duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=data) mov_l_rr(dstreg,data); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_e198_0_comp_ff(uae_u32 opcode) /* ROL */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int cnt = scratchie++; mov_l_ri(cnt,srcreg); { int data=dstreg; { rol_l_rr(data,cnt); start_needflags(); if (needed_flags & FLAG_ZNV) test_l_rr(data,data); bt_l_ri(data,0x00); live_flags(); end_needflags(); if(dstreg!=data) mov_l_rr(dstreg,data); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_e1a0_0_comp_ff(uae_u32 opcode) /* ASL */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; if ((uae_u32)srcreg==(uae_u32)dstreg) { FAIL(1); return 0; } { dont_care_flags(); if (needed_flags & FLAG_V) { FAIL(1); return 0; } { int cnt=srcreg; { int data=dstreg; { int highmask; int cdata=scratchie++; int tmpcnt=scratchie++; mov_l_rr(tmpcnt,cnt); and_l_ri(tmpcnt,63); mov_l_ri(cdata,0); cmov_l_rr(cdata,data,5); shll_l_rr(data,cnt); highmask=0x20; test_l_ri(cnt,highmask); mov_l_ri(scratchie,0); cmov_l_rr(scratchie,data,4); mov_l_rr(data,scratchie); sub_l_ri(tmpcnt,1); shll_l_rr(cdata,tmpcnt); test_l_ri(tmpcnt,highmask); mov_l_ri(scratchie,0); cmov_l_rr(cdata,scratchie,5); start_needflags(); if (needed_flags & FLAG_ZNV) test_l_rr(data,data); bt_l_ri(cdata,31); live_flags(); end_needflags(); duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=data) mov_l_rr(dstreg,data); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_e1a8_0_comp_ff(uae_u32 opcode) /* LSL */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int cnt=srcreg; { int data=dstreg; { int highmask; int cdata=scratchie++; int tmpcnt=scratchie++; mov_l_rr(tmpcnt,cnt); and_l_ri(tmpcnt,63); mov_l_ri(cdata,0); cmov_l_rr(cdata,data,5); shll_l_rr(data,cnt); highmask=0x20; test_l_ri(cnt,highmask); mov_l_ri(scratchie,0); cmov_l_rr(scratchie,data,4); mov_l_rr(data,scratchie); sub_l_ri(tmpcnt,1); shll_l_rr(cdata,tmpcnt); test_l_ri(tmpcnt,highmask); mov_l_ri(scratchie,0); cmov_l_rr(cdata,scratchie,5); start_needflags(); if (needed_flags & FLAG_ZNV) test_l_rr(data,data); bt_l_ri(cdata,31); live_flags(); end_needflags(); duplicate_carry(); if (!(needed_flags & FLAG_CZNV)) dont_care_flags(); if(dstreg!=data) mov_l_rr(dstreg,data); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_e1b8_0_comp_ff(uae_u32 opcode) /* ROL */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; if ((uae_u32)srcreg==(uae_u32)dstreg) { FAIL(1); return 0; } { dont_care_flags(); { int cnt=srcreg; { int data=dstreg; { rol_l_rr(data,cnt); start_needflags(); if (needed_flags & FLAG_ZNV) test_l_rr(data,data); bt_l_ri(data,0x00); live_flags(); end_needflags(); if(dstreg!=data) mov_l_rr(dstreg,data); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_f200_0_comp_ff(uae_u32 opcode) /* FPP */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); comp_fpp_opp(opcode,extra); } if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_f208_0_comp_ff(uae_u32 opcode) /* FPP */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); comp_fpp_opp(opcode,extra); } if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_f210_0_comp_ff(uae_u32 opcode) /* FPP */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); comp_fpp_opp(opcode,extra); } if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_f218_0_comp_ff(uae_u32 opcode) /* FPP */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); comp_fpp_opp(opcode,extra); } if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_f220_0_comp_ff(uae_u32 opcode) /* FPP */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); comp_fpp_opp(opcode,extra); } if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_f228_0_comp_ff(uae_u32 opcode) /* FPP */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); comp_fpp_opp(opcode,extra); } if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_f230_0_comp_ff(uae_u32 opcode) /* FPP */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); comp_fpp_opp(opcode,extra); } if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_f238_0_comp_ff(uae_u32 opcode) /* FPP */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); comp_fpp_opp(opcode,extra); } if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_f239_0_comp_ff(uae_u32 opcode) /* FPP */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); comp_fpp_opp(opcode,extra); } if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_f23a_0_comp_ff(uae_u32 opcode) /* FPP */ { uae_s32 dstreg = 2; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); comp_fpp_opp(opcode,extra); } if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_f23b_0_comp_ff(uae_u32 opcode) /* FPP */ { uae_s32 dstreg = 3; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); comp_fpp_opp(opcode,extra); } if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_f23c_0_comp_ff(uae_u32 opcode) /* FPP */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); comp_fpp_opp(opcode,extra); } if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_f240_0_comp_ff(uae_u32 opcode) /* FScc */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); comp_fscc_opp(opcode,extra); } if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_f250_0_comp_ff(uae_u32 opcode) /* FScc */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); comp_fscc_opp(opcode,extra); } if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_f258_0_comp_ff(uae_u32 opcode) /* FScc */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); comp_fscc_opp(opcode,extra); } if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_f260_0_comp_ff(uae_u32 opcode) /* FScc */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); comp_fscc_opp(opcode,extra); } if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_f268_0_comp_ff(uae_u32 opcode) /* FScc */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); comp_fscc_opp(opcode,extra); } if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_f270_0_comp_ff(uae_u32 opcode) /* FScc */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); comp_fscc_opp(opcode,extra); } if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_f278_0_comp_ff(uae_u32 opcode) /* FScc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); comp_fscc_opp(opcode,extra); } if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_f279_0_comp_ff(uae_u32 opcode) /* FScc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); comp_fscc_opp(opcode,extra); } if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_f280_0_comp_ff(uae_u32 opcode) /* FBcc */ { uae_s32 srcreg = (opcode & 63); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; comp_fbcc_opp(opcode); } if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_f2c0_0_comp_ff(uae_u32 opcode) /* FBcc */ { uae_s32 srcreg = (opcode & 63); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; comp_fbcc_opp(opcode); } if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_f600_0_comp_ff(uae_u32 opcode) /* MOVE16 */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; int src=scratchie++; int dst=scratchie++; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ mov_l_rr(src,srca); mov_l_rr(dst,dsta); and_l_ri(src,~15); and_l_ri(dst,~15); add_l_ri(srcreg+8,16); if (special_mem) { int tmp=scratchie; scratchie+=4; readlong(src,tmp,scratchie); writelong_clobber(dst,tmp,scratchie); add_l_ri(src,4); add_l_ri(dst,4); readlong(src,tmp,scratchie); writelong_clobber(dst,tmp,scratchie); add_l_ri(src,4); add_l_ri(dst,4); readlong(src,tmp,scratchie); writelong_clobber(dst,tmp,scratchie); add_l_ri(src,4); add_l_ri(dst,4); readlong(src,tmp,scratchie); writelong_clobber(dst,tmp,scratchie); } else { int tmp=scratchie; scratchie+=4; get_n_addr(src,src,scratchie); get_n_addr(dst,dst,scratchie); mov_l_rR(tmp+0,src,0); mov_l_rR(tmp+1,src,4); mov_l_rR(tmp+2,src,8); mov_l_rR(tmp+3,src,12); mov_l_Rr(dst,tmp+0,0); forget_about(tmp+0); mov_l_Rr(dst,tmp+1,4); forget_about(tmp+1); mov_l_Rr(dst,tmp+2,8); forget_about(tmp+2); mov_l_Rr(dst,tmp+3,12); } }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_f608_0_comp_ff(uae_u32 opcode) /* MOVE16 */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; int src=scratchie++; int dst=scratchie++; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); mov_l_rr(src,srca); mov_l_rr(dst,dsta); and_l_ri(src,~15); and_l_ri(dst,~15); add_l_ri(dstreg+8,16); if (special_mem) { int tmp=scratchie; scratchie+=4; readlong(src,tmp,scratchie); writelong_clobber(dst,tmp,scratchie); add_l_ri(src,4); add_l_ri(dst,4); readlong(src,tmp,scratchie); writelong_clobber(dst,tmp,scratchie); add_l_ri(src,4); add_l_ri(dst,4); readlong(src,tmp,scratchie); writelong_clobber(dst,tmp,scratchie); add_l_ri(src,4); add_l_ri(dst,4); readlong(src,tmp,scratchie); writelong_clobber(dst,tmp,scratchie); } else { int tmp=scratchie; scratchie+=4; get_n_addr(src,src,scratchie); get_n_addr(dst,dst,scratchie); mov_l_rR(tmp+0,src,0); mov_l_rR(tmp+1,src,4); mov_l_rR(tmp+2,src,8); mov_l_rR(tmp+3,src,12); mov_l_Rr(dst,tmp+0,0); forget_about(tmp+0); mov_l_Rr(dst,tmp+1,4); forget_about(tmp+1); mov_l_Rr(dst,tmp+2,8); forget_about(tmp+2); mov_l_Rr(dst,tmp+3,12); } }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_f610_0_comp_ff(uae_u32 opcode) /* MOVE16 */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; int src=scratchie++; int dst=scratchie++; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ mov_l_rr(src,srca); mov_l_rr(dst,dsta); and_l_ri(src,~15); and_l_ri(dst,~15); if (special_mem) { int tmp=scratchie; scratchie+=4; readlong(src,tmp,scratchie); writelong_clobber(dst,tmp,scratchie); add_l_ri(src,4); add_l_ri(dst,4); readlong(src,tmp,scratchie); writelong_clobber(dst,tmp,scratchie); add_l_ri(src,4); add_l_ri(dst,4); readlong(src,tmp,scratchie); writelong_clobber(dst,tmp,scratchie); add_l_ri(src,4); add_l_ri(dst,4); readlong(src,tmp,scratchie); writelong_clobber(dst,tmp,scratchie); } else { int tmp=scratchie; scratchie+=4; get_n_addr(src,src,scratchie); get_n_addr(dst,dst,scratchie); mov_l_rR(tmp+0,src,0); mov_l_rR(tmp+1,src,4); mov_l_rR(tmp+2,src,8); mov_l_rR(tmp+3,src,12); mov_l_Rr(dst,tmp+0,0); forget_about(tmp+0); mov_l_Rr(dst,tmp+1,4); forget_about(tmp+1); mov_l_Rr(dst,tmp+2,8); forget_about(tmp+2); mov_l_Rr(dst,tmp+3,12); } }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_f618_0_comp_ff(uae_u32 opcode) /* MOVE16 */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; int src=scratchie++; int dst=scratchie++; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); mov_l_rr(src,srca); mov_l_rr(dst,dsta); and_l_ri(src,~15); and_l_ri(dst,~15); if (special_mem) { int tmp=scratchie; scratchie+=4; readlong(src,tmp,scratchie); writelong_clobber(dst,tmp,scratchie); add_l_ri(src,4); add_l_ri(dst,4); readlong(src,tmp,scratchie); writelong_clobber(dst,tmp,scratchie); add_l_ri(src,4); add_l_ri(dst,4); readlong(src,tmp,scratchie); writelong_clobber(dst,tmp,scratchie); add_l_ri(src,4); add_l_ri(dst,4); readlong(src,tmp,scratchie); writelong_clobber(dst,tmp,scratchie); } else { int tmp=scratchie; scratchie+=4; get_n_addr(src,src,scratchie); get_n_addr(dst,dst,scratchie); mov_l_rR(tmp+0,src,0); mov_l_rR(tmp+1,src,4); mov_l_rR(tmp+2,src,8); mov_l_rR(tmp+3,src,12); mov_l_Rr(dst,tmp+0,0); forget_about(tmp+0); mov_l_Rr(dst,tmp+1,4); forget_about(tmp+1); mov_l_Rr(dst,tmp+2,8); forget_about(tmp+2); mov_l_Rr(dst,tmp+3,12); } }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_f620_0_comp_ff(uae_u32 opcode) /* MOVE16 */ { uae_s32 srcreg = (opcode & 7); uae_s32 dstreg = 0; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; int src=scratchie++; int dst=scratchie++; uae_u16 dstreg=((comp_get_iword((m68k_pc_offset+=2)-2))>>12)&0x07; mov_l_rr(src,8+srcreg); mov_l_rr(dst,8+dstreg); and_l_ri(src,~15); and_l_ri(dst,~15); if (srcreg != dstreg) add_l_ri(srcreg+8,16); add_l_ri(dstreg+8,16); if (special_mem) { int tmp=scratchie; scratchie+=4; readlong(src,tmp,scratchie); writelong_clobber(dst,tmp,scratchie); add_l_ri(src,4); add_l_ri(dst,4); readlong(src,tmp,scratchie); writelong_clobber(dst,tmp,scratchie); add_l_ri(src,4); add_l_ri(dst,4); readlong(src,tmp,scratchie); writelong_clobber(dst,tmp,scratchie); add_l_ri(src,4); add_l_ri(dst,4); readlong(src,tmp,scratchie); writelong_clobber(dst,tmp,scratchie); } else { int tmp=scratchie; scratchie+=4; get_n_addr(src,src,scratchie); get_n_addr(dst,dst,scratchie); mov_l_rR(tmp+0,src,0); mov_l_rR(tmp+1,src,4); mov_l_rR(tmp+2,src,8); mov_l_rR(tmp+3,src,12); mov_l_Rr(dst,tmp+0,0); forget_about(tmp+0); mov_l_Rr(dst,tmp+1,4); forget_about(tmp+1); mov_l_Rr(dst,tmp+2,8); forget_about(tmp+2); mov_l_Rr(dst,tmp+3,12); } } if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } #endif #if !defined(PART_1) && !defined(PART_2) && !defined(PART_3) && !defined(PART_4) && !defined(PART_5) && !defined(PART_6) && !defined(PART_7) && !defined(PART_8) #define PART_1 1 #define PART_2 1 #define PART_3 1 #define PART_4 1 #define PART_5 1 #define PART_6 1 #define PART_7 1 #define PART_8 1 #endif #ifdef PART_1 uae_u32 REGPARAM2 op_0_0_comp_nf(uae_u32 opcode) /* OR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dst=dstreg; dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); or_l(dst,scratchie); forget_about(scratchie); } else or_b(dst,src); } if(dstreg!=dst) mov_b_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_10_0_comp_nf(uae_u32 opcode) /* OR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); or_l(dst,scratchie); forget_about(scratchie); } else or_b(dst,src); } writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_18_0_comp_nf(uae_u32 opcode) /* OR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,areg_byteinc[dstreg]); dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); or_l(dst,scratchie); forget_about(scratchie); } else or_b(dst,src); } writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_20_0_comp_nf(uae_u32 opcode) /* OR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,(uae_s32)-areg_byteinc[dstreg]); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); or_l(dst,scratchie); forget_about(scratchie); } else or_b(dst,src); } writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_28_0_comp_nf(uae_u32 opcode) /* OR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); or_l(dst,scratchie); forget_about(scratchie); } else or_b(dst,src); } writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_30_0_comp_nf(uae_u32 opcode) /* OR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); or_l(dst,scratchie); forget_about(scratchie); } else or_b(dst,src); } writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_38_0_comp_nf(uae_u32 opcode) /* OR */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); or_l(dst,scratchie); forget_about(scratchie); } else or_b(dst,src); } writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_39_0_comp_nf(uae_u32 opcode) /* OR */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); or_l(dst,scratchie); forget_about(scratchie); } else or_b(dst,src); } writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_40_0_comp_nf(uae_u32 opcode) /* OR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=dstreg; dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); or_l(dst,scratchie); forget_about(scratchie); } else or_w(dst,src); } if(dstreg!=dst) mov_w_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_50_0_comp_nf(uae_u32 opcode) /* OR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); or_l(dst,scratchie); forget_about(scratchie); } else or_w(dst,src); } writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_58_0_comp_nf(uae_u32 opcode) /* OR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readword(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,2); dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); or_l(dst,scratchie); forget_about(scratchie); } else or_w(dst,src); } writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_60_0_comp_nf(uae_u32 opcode) /* OR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-2); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); or_l(dst,scratchie); forget_about(scratchie); } else or_w(dst,src); } writeword(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_68_0_comp_nf(uae_u32 opcode) /* OR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); or_l(dst,scratchie); forget_about(scratchie); } else or_w(dst,src); } writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_70_0_comp_nf(uae_u32 opcode) /* OR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); or_l(dst,scratchie); forget_about(scratchie); } else or_w(dst,src); } writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_78_0_comp_nf(uae_u32 opcode) /* OR */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); or_l(dst,scratchie); forget_about(scratchie); } else or_w(dst,src); } writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_79_0_comp_nf(uae_u32 opcode) /* OR */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); or_l(dst,scratchie); forget_about(scratchie); } else or_w(dst,src); } writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_80_0_comp_nf(uae_u32 opcode) /* OR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dst=dstreg; dont_care_flags(); { or_l(dst,src); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_90_0_comp_nf(uae_u32 opcode) /* OR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); { or_l(dst,src); } writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_98_0_comp_nf(uae_u32 opcode) /* OR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readlong(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,4); dont_care_flags(); { or_l(dst,src); } writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_a0_0_comp_nf(uae_u32 opcode) /* OR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-4); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); { or_l(dst,src); } writelong(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_a8_0_comp_nf(uae_u32 opcode) /* OR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); { or_l(dst,src); } writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b0_0_comp_nf(uae_u32 opcode) /* OR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); { or_l(dst,src); } writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b8_0_comp_nf(uae_u32 opcode) /* OR */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); { or_l(dst,src); } writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b9_0_comp_nf(uae_u32 opcode) /* OR */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); { or_l(dst,src); } writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_100_0_comp_nf(uae_u32 opcode) /* BTST */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dstreg; { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,31); bt_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_110_0_comp_nf(uae_u32 opcode) /* BTST */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bt_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_118_0_comp_nf(uae_u32 opcode) /* BTST */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,areg_byteinc[dstreg]); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bt_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_120_0_comp_nf(uae_u32 opcode) /* BTST */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,(uae_s32)-areg_byteinc[dstreg]); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bt_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_128_0_comp_nf(uae_u32 opcode) /* BTST */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bt_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_130_0_comp_nf(uae_u32 opcode) /* BTST */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bt_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_138_0_comp_nf(uae_u32 opcode) /* BTST */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bt_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_139_0_comp_nf(uae_u32 opcode) /* BTST */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bt_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_13a_0_comp_nf(uae_u32 opcode) /* BTST */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_s32 dstreg = 2; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(dsta,address+PC16off); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bt_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_13b_0_comp_nf(uae_u32 opcode) /* BTST */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_s32 dstreg = 3; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int pctmp=scratchie++; int dsta=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bt_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_13c_0_comp_nf(uae_u32 opcode) /* BTST */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst = scratchie++; mov_l_ri(dst,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bt_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_140_0_comp_nf(uae_u32 opcode) /* BCHG */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dstreg; { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,31); btc_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_150_0_comp_nf(uae_u32 opcode) /* BCHG */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); btc_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_158_0_comp_nf(uae_u32 opcode) /* BCHG */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,areg_byteinc[dstreg]); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); btc_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_160_0_comp_nf(uae_u32 opcode) /* BCHG */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,(uae_s32)-areg_byteinc[dstreg]); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); btc_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_168_0_comp_nf(uae_u32 opcode) /* BCHG */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); btc_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_170_0_comp_nf(uae_u32 opcode) /* BCHG */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); btc_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_178_0_comp_nf(uae_u32 opcode) /* BCHG */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); btc_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_179_0_comp_nf(uae_u32 opcode) /* BCHG */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); btc_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_17a_0_comp_nf(uae_u32 opcode) /* BCHG */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_s32 dstreg = 2; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(dsta,address+PC16off); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); btc_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_17b_0_comp_nf(uae_u32 opcode) /* BCHG */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_s32 dstreg = 3; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int pctmp=scratchie++; int dsta=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); btc_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_180_0_comp_nf(uae_u32 opcode) /* BCLR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dstreg; { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,31); btr_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_190_0_comp_nf(uae_u32 opcode) /* BCLR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); btr_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_198_0_comp_nf(uae_u32 opcode) /* BCLR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,areg_byteinc[dstreg]); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); btr_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1a0_0_comp_nf(uae_u32 opcode) /* BCLR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,(uae_s32)-areg_byteinc[dstreg]); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); btr_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1a8_0_comp_nf(uae_u32 opcode) /* BCLR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); btr_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1b0_0_comp_nf(uae_u32 opcode) /* BCLR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); btr_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1b8_0_comp_nf(uae_u32 opcode) /* BCLR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); btr_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1b9_0_comp_nf(uae_u32 opcode) /* BCLR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); btr_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1ba_0_comp_nf(uae_u32 opcode) /* BCLR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_s32 dstreg = 2; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(dsta,address+PC16off); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); btr_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1bb_0_comp_nf(uae_u32 opcode) /* BCLR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_s32 dstreg = 3; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int pctmp=scratchie++; int dsta=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); btr_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1c0_0_comp_nf(uae_u32 opcode) /* BSET */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dstreg; { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,31); bts_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1d0_0_comp_nf(uae_u32 opcode) /* BSET */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bts_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1d8_0_comp_nf(uae_u32 opcode) /* BSET */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,areg_byteinc[dstreg]); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bts_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1e0_0_comp_nf(uae_u32 opcode) /* BSET */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,(uae_s32)-areg_byteinc[dstreg]); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bts_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1e8_0_comp_nf(uae_u32 opcode) /* BSET */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bts_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1f0_0_comp_nf(uae_u32 opcode) /* BSET */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bts_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1f8_0_comp_nf(uae_u32 opcode) /* BSET */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bts_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1f9_0_comp_nf(uae_u32 opcode) /* BSET */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bts_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1fa_0_comp_nf(uae_u32 opcode) /* BSET */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_s32 dstreg = 2; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(dsta,address+PC16off); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bts_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1fb_0_comp_nf(uae_u32 opcode) /* BSET */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_s32 dstreg = 3; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int pctmp=scratchie++; int dsta=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bts_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_200_0_comp_nf(uae_u32 opcode) /* AND */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dst=dstreg; dont_care_flags(); if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); or_l_ri(scratchie,0xffffff00); and_l(dst,scratchie); forget_about(scratchie); } else and_b(dst,src); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_210_0_comp_nf(uae_u32 opcode) /* AND */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); or_l_ri(scratchie,0xffffff00); and_l(dst,scratchie); forget_about(scratchie); } else and_b(dst,src); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_218_0_comp_nf(uae_u32 opcode) /* AND */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,areg_byteinc[dstreg]); dont_care_flags(); if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); or_l_ri(scratchie,0xffffff00); and_l(dst,scratchie); forget_about(scratchie); } else and_b(dst,src); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_220_0_comp_nf(uae_u32 opcode) /* AND */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,(uae_s32)-areg_byteinc[dstreg]); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); or_l_ri(scratchie,0xffffff00); and_l(dst,scratchie); forget_about(scratchie); } else and_b(dst,src); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_228_0_comp_nf(uae_u32 opcode) /* AND */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); or_l_ri(scratchie,0xffffff00); and_l(dst,scratchie); forget_about(scratchie); } else and_b(dst,src); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_230_0_comp_nf(uae_u32 opcode) /* AND */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); or_l_ri(scratchie,0xffffff00); and_l(dst,scratchie); forget_about(scratchie); } else and_b(dst,src); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_238_0_comp_nf(uae_u32 opcode) /* AND */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); or_l_ri(scratchie,0xffffff00); and_l(dst,scratchie); forget_about(scratchie); } else and_b(dst,src); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_239_0_comp_nf(uae_u32 opcode) /* AND */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); or_l_ri(scratchie,0xffffff00); and_l(dst,scratchie); forget_about(scratchie); } else and_b(dst,src); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_240_0_comp_nf(uae_u32 opcode) /* AND */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=dstreg; dont_care_flags(); if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); or_l_ri(scratchie,0xffff0000); and_l(dst,scratchie); forget_about(scratchie); } else and_w(dst,src); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_250_0_comp_nf(uae_u32 opcode) /* AND */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); or_l_ri(scratchie,0xffff0000); and_l(dst,scratchie); forget_about(scratchie); } else and_w(dst,src); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_258_0_comp_nf(uae_u32 opcode) /* AND */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readword(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,2); dont_care_flags(); if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); or_l_ri(scratchie,0xffff0000); and_l(dst,scratchie); forget_about(scratchie); } else and_w(dst,src); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_260_0_comp_nf(uae_u32 opcode) /* AND */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-2); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); or_l_ri(scratchie,0xffff0000); and_l(dst,scratchie); forget_about(scratchie); } else and_w(dst,src); writeword(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_268_0_comp_nf(uae_u32 opcode) /* AND */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); or_l_ri(scratchie,0xffff0000); and_l(dst,scratchie); forget_about(scratchie); } else and_w(dst,src); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_270_0_comp_nf(uae_u32 opcode) /* AND */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); or_l_ri(scratchie,0xffff0000); and_l(dst,scratchie); forget_about(scratchie); } else and_w(dst,src); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_278_0_comp_nf(uae_u32 opcode) /* AND */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); or_l_ri(scratchie,0xffff0000); and_l(dst,scratchie); forget_about(scratchie); } else and_w(dst,src); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_279_0_comp_nf(uae_u32 opcode) /* AND */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); or_l_ri(scratchie,0xffff0000); and_l(dst,scratchie); forget_about(scratchie); } else and_w(dst,src); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_280_0_comp_nf(uae_u32 opcode) /* AND */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dst=dstreg; dont_care_flags(); and_l(dst,src); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_290_0_comp_nf(uae_u32 opcode) /* AND */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); and_l(dst,src); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_298_0_comp_nf(uae_u32 opcode) /* AND */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readlong(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,4); dont_care_flags(); and_l(dst,src); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2a0_0_comp_nf(uae_u32 opcode) /* AND */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-4); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); and_l(dst,src); writelong(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2a8_0_comp_nf(uae_u32 opcode) /* AND */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); and_l(dst,src); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2b0_0_comp_nf(uae_u32 opcode) /* AND */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); and_l(dst,src); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2b8_0_comp_nf(uae_u32 opcode) /* AND */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); and_l(dst,src); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2b9_0_comp_nf(uae_u32 opcode) /* AND */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); and_l(dst,src); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_400_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dst=dstreg; dont_care_flags(); sub_b(dst,src); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_410_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); sub_b(dst,src); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_418_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,areg_byteinc[dstreg]); dont_care_flags(); sub_b(dst,src); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_420_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,(uae_s32)-areg_byteinc[dstreg]); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); sub_b(dst,src); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_428_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); sub_b(dst,src); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_430_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); sub_b(dst,src); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_438_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); sub_b(dst,src); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_439_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); sub_b(dst,src); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_440_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=dstreg; dont_care_flags(); sub_w(dst,src); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_450_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); sub_w(dst,src); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_458_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readword(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,2); dont_care_flags(); sub_w(dst,src); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_460_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-2); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); sub_w(dst,src); writeword(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_468_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); sub_w(dst,src); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_470_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); sub_w(dst,src); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_478_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); sub_w(dst,src); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_479_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); sub_w(dst,src); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_480_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dst=dstreg; dont_care_flags(); sub_l(dst,src); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_490_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); sub_l(dst,src); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_498_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readlong(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,4); dont_care_flags(); sub_l(dst,src); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4a0_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-4); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); sub_l(dst,src); writelong(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4a8_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); sub_l(dst,src); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4b0_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); sub_l(dst,src); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4b8_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); sub_l(dst,src); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4b9_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); sub_l(dst,src); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_600_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dst=dstreg; dont_care_flags(); add_b(dst,src); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_610_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); add_b(dst,src); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_618_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,areg_byteinc[dstreg]); dont_care_flags(); add_b(dst,src); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_620_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,(uae_s32)-areg_byteinc[dstreg]); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); add_b(dst,src); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_628_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); add_b(dst,src); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_630_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); add_b(dst,src); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_638_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); add_b(dst,src); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_639_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); add_b(dst,src); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_640_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=dstreg; dont_care_flags(); add_w(dst,src); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_650_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); add_w(dst,src); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_658_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readword(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,2); dont_care_flags(); add_w(dst,src); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_660_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-2); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); add_w(dst,src); writeword(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_668_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); add_w(dst,src); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_670_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); add_w(dst,src); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_678_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); add_w(dst,src); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_679_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); add_w(dst,src); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_680_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dst=dstreg; dont_care_flags(); add_l(dst,src); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_690_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); add_l(dst,src); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_698_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readlong(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,4); dont_care_flags(); add_l(dst,src); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6a0_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-4); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); add_l(dst,src); writelong(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6a8_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); add_l(dst,src); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6b0_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); add_l(dst,src); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6b8_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); add_l(dst,src); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6b9_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); add_l(dst,src); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_800_0_comp_nf(uae_u32 opcode) /* BTST */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=dstreg; { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,31); bt_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_810_0_comp_nf(uae_u32 opcode) /* BTST */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bt_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_818_0_comp_nf(uae_u32 opcode) /* BTST */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,areg_byteinc[dstreg]); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bt_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_820_0_comp_nf(uae_u32 opcode) /* BTST */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,(uae_s32)-areg_byteinc[dstreg]); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bt_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_828_0_comp_nf(uae_u32 opcode) /* BTST */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bt_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_830_0_comp_nf(uae_u32 opcode) /* BTST */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bt_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_838_0_comp_nf(uae_u32 opcode) /* BTST */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bt_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_839_0_comp_nf(uae_u32 opcode) /* BTST */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bt_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_83a_0_comp_nf(uae_u32 opcode) /* BTST */ { uae_s32 dstreg = 2; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(dsta,address+PC16off); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bt_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_83b_0_comp_nf(uae_u32 opcode) /* BTST */ { uae_s32 dstreg = 3; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int pctmp=scratchie++; int dsta=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bt_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_83c_0_comp_nf(uae_u32 opcode) /* BTST */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst = scratchie++; mov_l_ri(dst,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bt_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_840_0_comp_nf(uae_u32 opcode) /* BCHG */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=dstreg; { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,31); btc_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_850_0_comp_nf(uae_u32 opcode) /* BCHG */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); btc_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_858_0_comp_nf(uae_u32 opcode) /* BCHG */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,areg_byteinc[dstreg]); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); btc_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_860_0_comp_nf(uae_u32 opcode) /* BCHG */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,(uae_s32)-areg_byteinc[dstreg]); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); btc_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_868_0_comp_nf(uae_u32 opcode) /* BCHG */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); btc_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_870_0_comp_nf(uae_u32 opcode) /* BCHG */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); btc_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_878_0_comp_nf(uae_u32 opcode) /* BCHG */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); btc_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_879_0_comp_nf(uae_u32 opcode) /* BCHG */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); btc_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_87a_0_comp_nf(uae_u32 opcode) /* BCHG */ { uae_s32 dstreg = 2; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(dsta,address+PC16off); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); btc_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_87b_0_comp_nf(uae_u32 opcode) /* BCHG */ { uae_s32 dstreg = 3; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int pctmp=scratchie++; int dsta=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); btc_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_880_0_comp_nf(uae_u32 opcode) /* BCLR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=dstreg; { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,31); btr_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_890_0_comp_nf(uae_u32 opcode) /* BCLR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); btr_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_898_0_comp_nf(uae_u32 opcode) /* BCLR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,areg_byteinc[dstreg]); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); btr_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8a0_0_comp_nf(uae_u32 opcode) /* BCLR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,(uae_s32)-areg_byteinc[dstreg]); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); btr_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8a8_0_comp_nf(uae_u32 opcode) /* BCLR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); btr_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8b0_0_comp_nf(uae_u32 opcode) /* BCLR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); btr_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8b8_0_comp_nf(uae_u32 opcode) /* BCLR */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); btr_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8b9_0_comp_nf(uae_u32 opcode) /* BCLR */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); btr_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8ba_0_comp_nf(uae_u32 opcode) /* BCLR */ { uae_s32 dstreg = 2; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(dsta,address+PC16off); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); btr_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8bb_0_comp_nf(uae_u32 opcode) /* BCLR */ { uae_s32 dstreg = 3; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int pctmp=scratchie++; int dsta=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); btr_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8c0_0_comp_nf(uae_u32 opcode) /* BSET */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=dstreg; { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,31); bts_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8d0_0_comp_nf(uae_u32 opcode) /* BSET */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bts_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8d8_0_comp_nf(uae_u32 opcode) /* BSET */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,areg_byteinc[dstreg]); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bts_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8e0_0_comp_nf(uae_u32 opcode) /* BSET */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,(uae_s32)-areg_byteinc[dstreg]); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bts_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8e8_0_comp_nf(uae_u32 opcode) /* BSET */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bts_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8f0_0_comp_nf(uae_u32 opcode) /* BSET */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bts_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8f8_0_comp_nf(uae_u32 opcode) /* BSET */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bts_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8f9_0_comp_nf(uae_u32 opcode) /* BSET */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bts_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8fa_0_comp_nf(uae_u32 opcode) /* BSET */ { uae_s32 dstreg = 2; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(dsta,address+PC16off); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bts_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8fb_0_comp_nf(uae_u32 opcode) /* BSET */ { uae_s32 dstreg = 3; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int pctmp=scratchie++; int dsta=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { int s=scratchie++; mov_l_rr(s,src); and_l_ri(s,7); bts_l_rr(dst,s); sbb_l(s,s); make_flags_live(); dont_care_flags(); writebyte(dsta,dst,scratchie); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_a00_0_comp_nf(uae_u32 opcode) /* EOR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dst=dstreg; dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); xor_l(dst,scratchie); forget_about(scratchie); } else xor_b(dst,src); } if(dstreg!=dst) mov_b_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_a10_0_comp_nf(uae_u32 opcode) /* EOR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); xor_l(dst,scratchie); forget_about(scratchie); } else xor_b(dst,src); } writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_a18_0_comp_nf(uae_u32 opcode) /* EOR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,areg_byteinc[dstreg]); dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); xor_l(dst,scratchie); forget_about(scratchie); } else xor_b(dst,src); } writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_a20_0_comp_nf(uae_u32 opcode) /* EOR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,(uae_s32)-areg_byteinc[dstreg]); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); xor_l(dst,scratchie); forget_about(scratchie); } else xor_b(dst,src); } writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_a28_0_comp_nf(uae_u32 opcode) /* EOR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); xor_l(dst,scratchie); forget_about(scratchie); } else xor_b(dst,src); } writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_a30_0_comp_nf(uae_u32 opcode) /* EOR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); xor_l(dst,scratchie); forget_about(scratchie); } else xor_b(dst,src); } writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_a38_0_comp_nf(uae_u32 opcode) /* EOR */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); xor_l(dst,scratchie); forget_about(scratchie); } else xor_b(dst,src); } writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_a39_0_comp_nf(uae_u32 opcode) /* EOR */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); xor_l(dst,scratchie); forget_about(scratchie); } else xor_b(dst,src); } writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_a40_0_comp_nf(uae_u32 opcode) /* EOR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=dstreg; dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); xor_l(dst,scratchie); forget_about(scratchie); } else xor_w(dst,src); } if(dstreg!=dst) mov_w_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_a50_0_comp_nf(uae_u32 opcode) /* EOR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); xor_l(dst,scratchie); forget_about(scratchie); } else xor_w(dst,src); } writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_a58_0_comp_nf(uae_u32 opcode) /* EOR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readword(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,2); dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); xor_l(dst,scratchie); forget_about(scratchie); } else xor_w(dst,src); } writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_a60_0_comp_nf(uae_u32 opcode) /* EOR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-2); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); xor_l(dst,scratchie); forget_about(scratchie); } else xor_w(dst,src); } writeword(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_a68_0_comp_nf(uae_u32 opcode) /* EOR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); xor_l(dst,scratchie); forget_about(scratchie); } else xor_w(dst,src); } writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_a70_0_comp_nf(uae_u32 opcode) /* EOR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); xor_l(dst,scratchie); forget_about(scratchie); } else xor_w(dst,src); } writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_a78_0_comp_nf(uae_u32 opcode) /* EOR */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); xor_l(dst,scratchie); forget_about(scratchie); } else xor_w(dst,src); } writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_a79_0_comp_nf(uae_u32 opcode) /* EOR */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); xor_l(dst,scratchie); forget_about(scratchie); } else xor_w(dst,src); } writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } #endif #ifdef PART_2 uae_u32 REGPARAM2 op_a80_0_comp_nf(uae_u32 opcode) /* EOR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dst=dstreg; dont_care_flags(); { xor_l(dst,src); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_a90_0_comp_nf(uae_u32 opcode) /* EOR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); { xor_l(dst,src); } writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_a98_0_comp_nf(uae_u32 opcode) /* EOR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readlong(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,4); dont_care_flags(); { xor_l(dst,src); } writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_aa0_0_comp_nf(uae_u32 opcode) /* EOR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-4); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); { xor_l(dst,src); } writelong(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_aa8_0_comp_nf(uae_u32 opcode) /* EOR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); { xor_l(dst,src); } writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_ab0_0_comp_nf(uae_u32 opcode) /* EOR */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); { xor_l(dst,src); } writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_ab8_0_comp_nf(uae_u32 opcode) /* EOR */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); { xor_l(dst,src); } writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_ab9_0_comp_nf(uae_u32 opcode) /* EOR */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); { xor_l(dst,src); } writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c00_0_comp_nf(uae_u32 opcode) /* CMP */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dst=dstreg; { dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c10_0_comp_nf(uae_u32 opcode) /* CMP */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c18_0_comp_nf(uae_u32 opcode) /* CMP */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,areg_byteinc[dstreg]); { dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c20_0_comp_nf(uae_u32 opcode) /* CMP */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,(uae_s32)-areg_byteinc[dstreg]); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c28_0_comp_nf(uae_u32 opcode) /* CMP */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c30_0_comp_nf(uae_u32 opcode) /* CMP */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c38_0_comp_nf(uae_u32 opcode) /* CMP */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c39_0_comp_nf(uae_u32 opcode) /* CMP */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readbyte(dsta,dst,scratchie); { dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c3a_0_comp_nf(uae_u32 opcode) /* CMP */ { uae_s32 dstreg = 2; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(dsta,address+PC16off); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c3b_0_comp_nf(uae_u32 opcode) /* CMP */ { uae_s32 dstreg = 3; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int pctmp=scratchie++; int dsta=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c40_0_comp_nf(uae_u32 opcode) /* CMP */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=dstreg; { dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c50_0_comp_nf(uae_u32 opcode) /* CMP */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readword(dsta,dst,scratchie); { dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c58_0_comp_nf(uae_u32 opcode) /* CMP */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readword(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,2); { dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c60_0_comp_nf(uae_u32 opcode) /* CMP */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-2); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readword(dsta,dst,scratchie); { dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c68_0_comp_nf(uae_u32 opcode) /* CMP */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readword(dsta,dst,scratchie); { dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c70_0_comp_nf(uae_u32 opcode) /* CMP */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readword(dsta,dst,scratchie); { dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c78_0_comp_nf(uae_u32 opcode) /* CMP */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readword(dsta,dst,scratchie); { dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c79_0_comp_nf(uae_u32 opcode) /* CMP */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readword(dsta,dst,scratchie); { dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c7a_0_comp_nf(uae_u32 opcode) /* CMP */ { uae_s32 dstreg = 2; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(dsta,address+PC16off); { int dst=scratchie++; readword(dsta,dst,scratchie); { dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c7b_0_comp_nf(uae_u32 opcode) /* CMP */ { uae_s32 dstreg = 3; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int pctmp=scratchie++; int dsta=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readword(dsta,dst,scratchie); { dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c80_0_comp_nf(uae_u32 opcode) /* CMP */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dst=dstreg; { dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c90_0_comp_nf(uae_u32 opcode) /* CMP */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readlong(dsta,dst,scratchie); { dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c98_0_comp_nf(uae_u32 opcode) /* CMP */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readlong(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,4); { dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_ca0_0_comp_nf(uae_u32 opcode) /* CMP */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-4); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readlong(dsta,dst,scratchie); { dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_ca8_0_comp_nf(uae_u32 opcode) /* CMP */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readlong(dsta,dst,scratchie); { dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_cb0_0_comp_nf(uae_u32 opcode) /* CMP */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readlong(dsta,dst,scratchie); { dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_cb8_0_comp_nf(uae_u32 opcode) /* CMP */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readlong(dsta,dst,scratchie); { dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_cb9_0_comp_nf(uae_u32 opcode) /* CMP */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readlong(dsta,dst,scratchie); { dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_cba_0_comp_nf(uae_u32 opcode) /* CMP */ { uae_s32 dstreg = 2; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(dsta,address+PC16off); { int dst=scratchie++; readlong(dsta,dst,scratchie); { dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_cbb_0_comp_nf(uae_u32 opcode) /* CMP */ { uae_s32 dstreg = 3; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int pctmp=scratchie++; int dsta=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readlong(dsta,dst,scratchie); { dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1000_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dstreg; dont_care_flags(); if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); and_l_ri(dst,0xffffff00); or_l(dst,scratchie); forget_about(scratchie); } else mov_b_rr(dst,src); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1010_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); and_l_ri(dst,0xffffff00); or_l(dst,scratchie); forget_about(scratchie); } else mov_b_rr(dst,src); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1018_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); { int dst=dstreg; dont_care_flags(); if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); and_l_ri(dst,0xffffff00); or_l(dst,scratchie); forget_about(scratchie); } else mov_b_rr(dst,src); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1020_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); and_l_ri(dst,0xffffff00); or_l(dst,scratchie); forget_about(scratchie); } else mov_b_rr(dst,src); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1028_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); and_l_ri(dst,0xffffff00); or_l(dst,scratchie); forget_about(scratchie); } else mov_b_rr(dst,src); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1030_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); and_l_ri(dst,0xffffff00); or_l(dst,scratchie); forget_about(scratchie); } else mov_b_rr(dst,src); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1038_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); and_l_ri(dst,0xffffff00); or_l(dst,scratchie); forget_about(scratchie); } else mov_b_rr(dst,src); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1039_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); and_l_ri(dst,0xffffff00); or_l(dst,scratchie); forget_about(scratchie); } else mov_b_rr(dst,src); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_103a_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); and_l_ri(dst,0xffffff00); or_l(dst,scratchie); forget_about(scratchie); } else mov_b_rr(dst,src); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_103b_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); and_l_ri(dst,0xffffff00); or_l(dst,scratchie); forget_about(scratchie); } else mov_b_rr(dst,src); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_103c_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dst=dstreg; dont_care_flags(); if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); and_l_ri(dst,0xffffff00); or_l(dst,scratchie); forget_about(scratchie); } else mov_b_rr(dst,src); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1080_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); writebyte(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1090_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1098_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_10a0_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); writebyte(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_10a8_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_10b0_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_10b8_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_10b9_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_10ba_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_10bb_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); writebyte(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_10bc_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); writebyte(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_10c0_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); lea_l_brr(dstreg+8,dstreg+8,areg_byteinc[dstreg]); writebyte(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_10d0_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); lea_l_brr(dstreg+8,dstreg+8,areg_byteinc[dstreg]); writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_10d8_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); lea_l_brr(dstreg+8,dstreg+8,areg_byteinc[dstreg]); writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_10e0_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); lea_l_brr(dstreg+8,dstreg+8,areg_byteinc[dstreg]); writebyte(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_10e8_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); lea_l_brr(dstreg+8,dstreg+8,areg_byteinc[dstreg]); writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_10f0_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); lea_l_brr(dstreg+8,dstreg+8,areg_byteinc[dstreg]); writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_10f8_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); lea_l_brr(dstreg+8,dstreg+8,areg_byteinc[dstreg]); writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_10f9_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); lea_l_brr(dstreg+8,dstreg+8,areg_byteinc[dstreg]); writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_10fa_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); lea_l_brr(dstreg+8,dstreg+8,areg_byteinc[dstreg]); writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_10fb_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); lea_l_brr(dstreg+8,dstreg+8,areg_byteinc[dstreg]); writebyte(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_10fc_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); lea_l_brr(dstreg+8,dstreg+8,areg_byteinc[dstreg]); writebyte(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1100_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,(uae_s32)-areg_byteinc[dstreg]); if (dodgy) mov_l_rr(dsta,8+dstreg); writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1110_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,(uae_s32)-areg_byteinc[dstreg]); if (dodgy) mov_l_rr(dsta,8+dstreg); writebyte(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1118_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,(uae_s32)-areg_byteinc[dstreg]); if (dodgy) mov_l_rr(dsta,8+dstreg); writebyte(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1120_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readbyte(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,(uae_s32)-areg_byteinc[dstreg]); if (dodgy) mov_l_rr(dsta,8+dstreg); writebyte(dsta,src,scratchie); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1128_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readbyte(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,(uae_s32)-areg_byteinc[dstreg]); if (dodgy) mov_l_rr(dsta,8+dstreg); writebyte(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1130_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readbyte(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,(uae_s32)-areg_byteinc[dstreg]); if (dodgy) mov_l_rr(dsta,8+dstreg); writebyte(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1138_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readbyte(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,(uae_s32)-areg_byteinc[dstreg]); if (dodgy) mov_l_rr(dsta,8+dstreg); writebyte(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1139_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readbyte(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,(uae_s32)-areg_byteinc[dstreg]); if (dodgy) mov_l_rr(dsta,8+dstreg); writebyte(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_113a_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readbyte(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,(uae_s32)-areg_byteinc[dstreg]); if (dodgy) mov_l_rr(dsta,8+dstreg); writebyte(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_113b_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readbyte(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,(uae_s32)-areg_byteinc[dstreg]); if (dodgy) mov_l_rr(dsta,8+dstreg); writebyte(dsta,src,scratchie); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_113c_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,(uae_s32)-areg_byteinc[dstreg]); if (dodgy) mov_l_rr(dsta,8+dstreg); writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1140_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); writebyte(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1150_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1158_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1160_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); writebyte(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1168_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1170_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1178_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1179_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_117a_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_117b_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); writebyte(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_117c_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); writebyte(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1180_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); writebyte(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1190_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_1198_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_11a0_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); writebyte(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_11a8_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_11b0_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_11b8_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_11b9_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_11ba_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_11bb_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); writebyte(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_11bc_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); writebyte(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_11c0_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); writebyte(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_11d0_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_11d8_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_11e0_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); writebyte(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_11e8_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_11f0_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_11f8_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_11f9_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_11fa_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_11fb_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); writebyte(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_11fc_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); writebyte(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_13c0_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ writebyte(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_13d0_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_13d8_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_13e0_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ writebyte(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_13e8_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_13f0_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_13f8_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_13f9_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_13fa_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ writebyte(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_13fb_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readbyte(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ writebyte(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_13fc_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ writebyte(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2000_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dstreg; dont_care_flags(); mov_l_rr(dst,src); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2008_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); { int dst=dstreg; dont_care_flags(); mov_l_rr(dst,src); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2010_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); mov_l_rr(dst,src); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2018_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,4); { int dst=dstreg; dont_care_flags(); mov_l_rr(dst,src); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2020_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-4); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); mov_l_rr(dst,src); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2028_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); mov_l_rr(dst,src); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2030_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); mov_l_rr(dst,src); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2038_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); mov_l_rr(dst,src); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2039_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); mov_l_rr(dst,src); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_203a_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); mov_l_rr(dst,src); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_203b_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); mov_l_rr(dst,src); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_203c_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dst=dstreg; dont_care_flags(); mov_l_rr(dst,src); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2040_0_comp_nf(uae_u32 opcode) /* MOVEA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dodgy?scratchie++:dstreg+8; { int tmps=scratchie++; mov_l_rr(dst,src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2048_0_comp_nf(uae_u32 opcode) /* MOVEA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); { int dst=dodgy?scratchie++:dstreg+8; { int tmps=scratchie++; mov_l_rr(dst,src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2050_0_comp_nf(uae_u32 opcode) /* MOVEA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; { int tmps=scratchie++; mov_l_rr(dst,src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2058_0_comp_nf(uae_u32 opcode) /* MOVEA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,4); { int dst=dodgy?scratchie++:dstreg+8; { int tmps=scratchie++; mov_l_rr(dst,src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2060_0_comp_nf(uae_u32 opcode) /* MOVEA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-4); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; { int tmps=scratchie++; mov_l_rr(dst,src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2068_0_comp_nf(uae_u32 opcode) /* MOVEA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; { int tmps=scratchie++; mov_l_rr(dst,src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2070_0_comp_nf(uae_u32 opcode) /* MOVEA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; { int tmps=scratchie++; mov_l_rr(dst,src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2078_0_comp_nf(uae_u32 opcode) /* MOVEA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; { int tmps=scratchie++; mov_l_rr(dst,src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2079_0_comp_nf(uae_u32 opcode) /* MOVEA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; { int tmps=scratchie++; mov_l_rr(dst,src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_207a_0_comp_nf(uae_u32 opcode) /* MOVEA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; { int tmps=scratchie++; mov_l_rr(dst,src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_207b_0_comp_nf(uae_u32 opcode) /* MOVEA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; { int tmps=scratchie++; mov_l_rr(dst,src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_207c_0_comp_nf(uae_u32 opcode) /* MOVEA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dst=dodgy?scratchie++:dstreg+8; { int tmps=scratchie++; mov_l_rr(dst,src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2080_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); writelong(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2088_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); writelong(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2090_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2098_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,4); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_20a0_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-4); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); writelong(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_20a8_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_20b0_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_20b8_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_20b9_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readlong(srca,src,scratchie); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_20ba_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_20bb_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); writelong(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_20bc_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); writelong(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_20c0_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); lea_l_brr(dstreg+8,dstreg+8,4); writelong(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_20c8_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); lea_l_brr(dstreg+8,dstreg+8,4); writelong(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_20d0_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); lea_l_brr(dstreg+8,dstreg+8,4); writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_20d8_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,4); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); lea_l_brr(dstreg+8,dstreg+8,4); writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_20e0_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-4); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); lea_l_brr(dstreg+8,dstreg+8,4); writelong(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_20e8_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); lea_l_brr(dstreg+8,dstreg+8,4); writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_20f0_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); lea_l_brr(dstreg+8,dstreg+8,4); writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_20f8_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); lea_l_brr(dstreg+8,dstreg+8,4); writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_20f9_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readlong(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); lea_l_brr(dstreg+8,dstreg+8,4); writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_20fa_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); lea_l_brr(dstreg+8,dstreg+8,4); writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_20fb_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); lea_l_brr(dstreg+8,dstreg+8,4); writelong(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_20fc_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); lea_l_brr(dstreg+8,dstreg+8,4); writelong(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2100_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-4); if (dodgy) mov_l_rr(dsta,8+dstreg); writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2108_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-4); if (dodgy) mov_l_rr(dsta,8+dstreg); writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2110_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-4); if (dodgy) mov_l_rr(dsta,8+dstreg); writelong(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2118_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,4); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-4); if (dodgy) mov_l_rr(dsta,8+dstreg); writelong(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2120_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-4); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readlong(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-4); if (dodgy) mov_l_rr(dsta,8+dstreg); writelong(dsta,src,scratchie); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2128_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-4); if (dodgy) mov_l_rr(dsta,8+dstreg); writelong(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2130_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-4); if (dodgy) mov_l_rr(dsta,8+dstreg); writelong(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2138_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-4); if (dodgy) mov_l_rr(dsta,8+dstreg); writelong(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2139_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readlong(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-4); if (dodgy) mov_l_rr(dsta,8+dstreg); writelong(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_213a_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readlong(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-4); if (dodgy) mov_l_rr(dsta,8+dstreg); writelong(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_213b_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-4); if (dodgy) mov_l_rr(dsta,8+dstreg); writelong(dsta,src,scratchie); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_213c_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-4); if (dodgy) mov_l_rr(dsta,8+dstreg); writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2140_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); writelong(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2148_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); writelong(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2150_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2158_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,4); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2160_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-4); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); writelong(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } #endif #ifdef PART_3 uae_u32 REGPARAM2 op_2168_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2170_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2178_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2179_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readlong(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_217a_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_217b_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); writelong(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_217c_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); writelong(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2180_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); writelong(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2188_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); writelong(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2190_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_2198_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,4); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_21a0_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-4); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); writelong(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_21a8_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_21b0_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_21b8_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_21b9_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readlong(srca,src,scratchie); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_21ba_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_21bb_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); writelong(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_21bc_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); writelong(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_21c0_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); writelong(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_21c8_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); writelong(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_21d0_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_21d8_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,4); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_21e0_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-4); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); writelong(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_21e8_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_21f0_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_21f8_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_21f9_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readlong(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_21fa_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_21fb_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); writelong(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_21fc_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); writelong(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_23c0_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ writelong(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_23c8_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ writelong(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_23d0_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_23d8_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,4); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_23e0_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-4); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ writelong(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_23e8_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_23f0_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_23f8_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_23f9_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readlong(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_23fa_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ writelong(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_23fb_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ writelong(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_23fc_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ writelong(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3000_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dstreg; dont_care_flags(); if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); and_l_ri(dst,0xffff0000); or_l(dst,scratchie); forget_about(scratchie); } else mov_w_rr(dst,src); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3008_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); { int dst=dstreg; dont_care_flags(); if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); and_l_ri(dst,0xffff0000); or_l(dst,scratchie); forget_about(scratchie); } else mov_w_rr(dst,src); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3010_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); and_l_ri(dst,0xffff0000); or_l(dst,scratchie); forget_about(scratchie); } else mov_w_rr(dst,src); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3018_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,2); { int dst=dstreg; dont_care_flags(); if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); and_l_ri(dst,0xffff0000); or_l(dst,scratchie); forget_about(scratchie); } else mov_w_rr(dst,src); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3020_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-2); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); and_l_ri(dst,0xffff0000); or_l(dst,scratchie); forget_about(scratchie); } else mov_w_rr(dst,src); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3028_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); and_l_ri(dst,0xffff0000); or_l(dst,scratchie); forget_about(scratchie); } else mov_w_rr(dst,src); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3030_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); and_l_ri(dst,0xffff0000); or_l(dst,scratchie); forget_about(scratchie); } else mov_w_rr(dst,src); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3038_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); and_l_ri(dst,0xffff0000); or_l(dst,scratchie); forget_about(scratchie); } else mov_w_rr(dst,src); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3039_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); and_l_ri(dst,0xffff0000); or_l(dst,scratchie); forget_about(scratchie); } else mov_w_rr(dst,src); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_303a_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); and_l_ri(dst,0xffff0000); or_l(dst,scratchie); forget_about(scratchie); } else mov_w_rr(dst,src); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_303b_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); and_l_ri(dst,0xffff0000); or_l(dst,scratchie); forget_about(scratchie); } else mov_w_rr(dst,src); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_303c_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=dstreg; dont_care_flags(); if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); and_l_ri(dst,0xffff0000); or_l(dst,scratchie); forget_about(scratchie); } else mov_w_rr(dst,src); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3040_0_comp_nf(uae_u32 opcode) /* MOVEA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dodgy?scratchie++:dstreg+8; { int tmps=scratchie++; sign_extend_16_rr(dst,src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3048_0_comp_nf(uae_u32 opcode) /* MOVEA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); { int dst=dodgy?scratchie++:dstreg+8; { int tmps=scratchie++; sign_extend_16_rr(dst,src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3050_0_comp_nf(uae_u32 opcode) /* MOVEA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; { int tmps=scratchie++; sign_extend_16_rr(dst,src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3058_0_comp_nf(uae_u32 opcode) /* MOVEA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,2); { int dst=dodgy?scratchie++:dstreg+8; { int tmps=scratchie++; sign_extend_16_rr(dst,src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3060_0_comp_nf(uae_u32 opcode) /* MOVEA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-2); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; { int tmps=scratchie++; sign_extend_16_rr(dst,src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3068_0_comp_nf(uae_u32 opcode) /* MOVEA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; { int tmps=scratchie++; sign_extend_16_rr(dst,src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3070_0_comp_nf(uae_u32 opcode) /* MOVEA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; { int tmps=scratchie++; sign_extend_16_rr(dst,src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3078_0_comp_nf(uae_u32 opcode) /* MOVEA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; { int tmps=scratchie++; sign_extend_16_rr(dst,src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3079_0_comp_nf(uae_u32 opcode) /* MOVEA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; { int tmps=scratchie++; sign_extend_16_rr(dst,src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_307a_0_comp_nf(uae_u32 opcode) /* MOVEA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; { int tmps=scratchie++; sign_extend_16_rr(dst,src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_307b_0_comp_nf(uae_u32 opcode) /* MOVEA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; { int tmps=scratchie++; sign_extend_16_rr(dst,src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_307c_0_comp_nf(uae_u32 opcode) /* MOVEA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=dodgy?scratchie++:dstreg+8; { int tmps=scratchie++; sign_extend_16_rr(dst,src); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3080_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); writeword(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3088_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); writeword(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3090_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3098_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,2); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_30a0_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-2); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readword(srca,src,scratchie); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); writeword(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_30a8_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_30b0_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_30b8_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_30b9_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readword(srca,src,scratchie); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_30ba_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readword(srca,src,scratchie); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_30bb_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); writeword(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_30bc_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); writeword(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_30c0_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); lea_l_brr(dstreg+8,dstreg+8,2); writeword(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_30c8_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); lea_l_brr(dstreg+8,dstreg+8,2); writeword(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_30d0_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); lea_l_brr(dstreg+8,dstreg+8,2); writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_30d8_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,2); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); lea_l_brr(dstreg+8,dstreg+8,2); writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_30e0_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-2); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readword(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); lea_l_brr(dstreg+8,dstreg+8,2); writeword(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_30e8_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); lea_l_brr(dstreg+8,dstreg+8,2); writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_30f0_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); lea_l_brr(dstreg+8,dstreg+8,2); writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_30f8_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); lea_l_brr(dstreg+8,dstreg+8,2); writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_30f9_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readword(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); lea_l_brr(dstreg+8,dstreg+8,2); writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_30fa_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readword(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); lea_l_brr(dstreg+8,dstreg+8,2); writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_30fb_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); lea_l_brr(dstreg+8,dstreg+8,2); writeword(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_30fc_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); lea_l_brr(dstreg+8,dstreg+8,2); writeword(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3100_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-2); if (dodgy) mov_l_rr(dsta,8+dstreg); writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3108_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-2); if (dodgy) mov_l_rr(dsta,8+dstreg); writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3110_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-2); if (dodgy) mov_l_rr(dsta,8+dstreg); writeword(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3118_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,2); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-2); if (dodgy) mov_l_rr(dsta,8+dstreg); writeword(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3120_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-2); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readword(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-2); if (dodgy) mov_l_rr(dsta,8+dstreg); writeword(dsta,src,scratchie); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3128_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-2); if (dodgy) mov_l_rr(dsta,8+dstreg); writeword(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3130_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-2); if (dodgy) mov_l_rr(dsta,8+dstreg); writeword(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3138_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-2); if (dodgy) mov_l_rr(dsta,8+dstreg); writeword(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3139_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readword(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-2); if (dodgy) mov_l_rr(dsta,8+dstreg); writeword(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_313a_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readword(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-2); if (dodgy) mov_l_rr(dsta,8+dstreg); writeword(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_313b_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-2); if (dodgy) mov_l_rr(dsta,8+dstreg); writeword(dsta,src,scratchie); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_313c_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-2); if (dodgy) mov_l_rr(dsta,8+dstreg); writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3140_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); writeword(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3148_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); writeword(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3150_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3158_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,2); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3160_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-2); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readword(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); writeword(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3168_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3170_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3178_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3179_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readword(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_317a_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readword(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_317b_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); writeword(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_317c_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); writeword(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3180_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); writeword(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3188_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); writeword(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3190_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_3198_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,2); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_31a0_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-2); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readword(srca,src,scratchie); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); writeword(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_31a8_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_31b0_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_31b8_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_31b9_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readword(srca,src,scratchie); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_31ba_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readword(srca,src,scratchie); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_31bb_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); writeword(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_31bc_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); writeword(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_31c0_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); writeword(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_31c8_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); writeword(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_31d0_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_31d8_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,2); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_31e0_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-2); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readword(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); writeword(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_31e8_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_31f0_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_31f8_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_31f9_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readword(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_31fa_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readword(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_31fb_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); writeword(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_31fc_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); writeword(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_33c0_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ writeword(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_33c8_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ writeword(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_33d0_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_33d8_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,2); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_33e0_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-2); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readword(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ writeword(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_33e8_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_33f0_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_33f8_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_33f9_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readword(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_33fa_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readword(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ writeword(dsta,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_33fb_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ writeword(dsta,src,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_33fc_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ writeword(dsta,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4000_0_comp_nf(uae_u32 opcode) /* NEGX */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); restore_carry(); sbb_b(dst,src); if(srcreg!=dst) mov_b_rr(srcreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4010_0_comp_nf(uae_u32 opcode) /* NEGX */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); restore_carry(); sbb_b(dst,src); writebyte(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4018_0_comp_nf(uae_u32 opcode) /* NEGX */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); restore_carry(); sbb_b(dst,src); writebyte(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4020_0_comp_nf(uae_u32 opcode) /* NEGX */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); restore_carry(); sbb_b(dst,src); writebyte(srca,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4028_0_comp_nf(uae_u32 opcode) /* NEGX */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); restore_carry(); sbb_b(dst,src); writebyte(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4030_0_comp_nf(uae_u32 opcode) /* NEGX */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); restore_carry(); sbb_b(dst,src); writebyte(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4038_0_comp_nf(uae_u32 opcode) /* NEGX */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); restore_carry(); sbb_b(dst,src); writebyte(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4039_0_comp_nf(uae_u32 opcode) /* NEGX */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); restore_carry(); sbb_b(dst,src); writebyte(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4040_0_comp_nf(uae_u32 opcode) /* NEGX */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); restore_carry(); sbb_w(dst,src); if(srcreg!=dst) mov_w_rr(srcreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4050_0_comp_nf(uae_u32 opcode) /* NEGX */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); restore_carry(); sbb_w(dst,src); writeword(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4058_0_comp_nf(uae_u32 opcode) /* NEGX */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,2); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); restore_carry(); sbb_w(dst,src); writeword(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4060_0_comp_nf(uae_u32 opcode) /* NEGX */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-2); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readword(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); restore_carry(); sbb_w(dst,src); writeword(srca,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4068_0_comp_nf(uae_u32 opcode) /* NEGX */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); restore_carry(); sbb_w(dst,src); writeword(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4070_0_comp_nf(uae_u32 opcode) /* NEGX */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); restore_carry(); sbb_w(dst,src); writeword(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4078_0_comp_nf(uae_u32 opcode) /* NEGX */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); restore_carry(); sbb_w(dst,src); writeword(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4079_0_comp_nf(uae_u32 opcode) /* NEGX */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readword(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); restore_carry(); sbb_w(dst,src); writeword(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4080_0_comp_nf(uae_u32 opcode) /* NEGX */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); restore_carry(); sbb_l(dst,src); if(srcreg!=dst) mov_l_rr(srcreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4090_0_comp_nf(uae_u32 opcode) /* NEGX */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); restore_carry(); sbb_l(dst,src); writelong(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4098_0_comp_nf(uae_u32 opcode) /* NEGX */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,4); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); restore_carry(); sbb_l(dst,src); writelong(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_40a0_0_comp_nf(uae_u32 opcode) /* NEGX */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-4); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); restore_carry(); sbb_l(dst,src); writelong(srca,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_40a8_0_comp_nf(uae_u32 opcode) /* NEGX */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); restore_carry(); sbb_l(dst,src); writelong(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_40b0_0_comp_nf(uae_u32 opcode) /* NEGX */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); restore_carry(); sbb_l(dst,src); writelong(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_40b8_0_comp_nf(uae_u32 opcode) /* NEGX */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); restore_carry(); sbb_l(dst,src); writelong(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_40b9_0_comp_nf(uae_u32 opcode) /* NEGX */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readlong(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); restore_carry(); sbb_l(dst,src); writelong(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_41d0_0_comp_nf(uae_u32 opcode) /* LEA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int dst=dodgy?scratchie++:dstreg+8; if(dstreg+8!=srca) mov_l_rr(dstreg+8,srca); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_41e8_0_comp_nf(uae_u32 opcode) /* LEA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=dodgy?scratchie++:dstreg+8; if(dstreg+8!=srca) mov_l_rr(dstreg+8,srca); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_41f0_0_comp_nf(uae_u32 opcode) /* LEA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if(dstreg+8!=srca) mov_l_rr(dstreg+8,srca); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_41f8_0_comp_nf(uae_u32 opcode) /* LEA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=dodgy?scratchie++:dstreg+8; if(dstreg+8!=srca) mov_l_rr(dstreg+8,srca); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_41f9_0_comp_nf(uae_u32 opcode) /* LEA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=dodgy?scratchie++:dstreg+8; if(dstreg+8!=srca) mov_l_rr(dstreg+8,srca); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_41fa_0_comp_nf(uae_u32 opcode) /* LEA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int dst=dodgy?scratchie++:dstreg+8; if(dstreg+8!=srca) mov_l_rr(dstreg+8,srca); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_41fb_0_comp_nf(uae_u32 opcode) /* LEA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if(dstreg+8!=srca) mov_l_rr(dstreg+8,srca); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4200_0_comp_nf(uae_u32 opcode) /* CLR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=scratchie++; mov_l_ri(dst,0); if(srcreg!=dst) mov_b_rr(srcreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4210_0_comp_nf(uae_u32 opcode) /* CLR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int dst=scratchie++; mov_l_ri(dst,0); writebyte(srca,dst,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4218_0_comp_nf(uae_u32 opcode) /* CLR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); { int dst=scratchie++; mov_l_ri(dst,0); writebyte(srca,dst,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4220_0_comp_nf(uae_u32 opcode) /* CLR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int dst=scratchie++; mov_l_ri(dst,0); writebyte(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4228_0_comp_nf(uae_u32 opcode) /* CLR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; mov_l_ri(dst,0); writebyte(srca,dst,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4230_0_comp_nf(uae_u32 opcode) /* CLR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); writebyte(srca,dst,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4238_0_comp_nf(uae_u32 opcode) /* CLR */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; mov_l_ri(dst,0); writebyte(srca,dst,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4239_0_comp_nf(uae_u32 opcode) /* CLR */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; mov_l_ri(dst,0); writebyte(srca,dst,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4240_0_comp_nf(uae_u32 opcode) /* CLR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=scratchie++; mov_l_ri(dst,0); if(srcreg!=dst) mov_w_rr(srcreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4250_0_comp_nf(uae_u32 opcode) /* CLR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int dst=scratchie++; mov_l_ri(dst,0); writeword(srca,dst,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4258_0_comp_nf(uae_u32 opcode) /* CLR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); lea_l_brr(srcreg+8,srcreg+8,2); { int dst=scratchie++; mov_l_ri(dst,0); writeword(srca,dst,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4260_0_comp_nf(uae_u32 opcode) /* CLR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-2); if (dodgy) mov_l_rr(srca,8+srcreg); { int dst=scratchie++; mov_l_ri(dst,0); writeword(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4268_0_comp_nf(uae_u32 opcode) /* CLR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; mov_l_ri(dst,0); writeword(srca,dst,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4270_0_comp_nf(uae_u32 opcode) /* CLR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); writeword(srca,dst,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4278_0_comp_nf(uae_u32 opcode) /* CLR */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; mov_l_ri(dst,0); writeword(srca,dst,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4279_0_comp_nf(uae_u32 opcode) /* CLR */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; mov_l_ri(dst,0); writeword(srca,dst,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4280_0_comp_nf(uae_u32 opcode) /* CLR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=scratchie++; mov_l_ri(dst,0); if(srcreg!=dst) mov_l_rr(srcreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4290_0_comp_nf(uae_u32 opcode) /* CLR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int dst=scratchie++; mov_l_ri(dst,0); writelong(srca,dst,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4298_0_comp_nf(uae_u32 opcode) /* CLR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); lea_l_brr(srcreg+8,srcreg+8,4); { int dst=scratchie++; mov_l_ri(dst,0); writelong(srca,dst,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_42a0_0_comp_nf(uae_u32 opcode) /* CLR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-4); if (dodgy) mov_l_rr(srca,8+srcreg); { int dst=scratchie++; mov_l_ri(dst,0); writelong(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_42a8_0_comp_nf(uae_u32 opcode) /* CLR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; mov_l_ri(dst,0); writelong(srca,dst,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_42b0_0_comp_nf(uae_u32 opcode) /* CLR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); writelong(srca,dst,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_42b8_0_comp_nf(uae_u32 opcode) /* CLR */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; mov_l_ri(dst,0); writelong(srca,dst,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } #endif #ifdef PART_4 uae_u32 REGPARAM2 op_42b9_0_comp_nf(uae_u32 opcode) /* CLR */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; mov_l_ri(dst,0); writelong(srca,dst,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4400_0_comp_nf(uae_u32 opcode) /* NEG */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); sub_b(dst,src); if(srcreg!=dst) mov_b_rr(srcreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4410_0_comp_nf(uae_u32 opcode) /* NEG */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); sub_b(dst,src); writebyte(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4418_0_comp_nf(uae_u32 opcode) /* NEG */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); sub_b(dst,src); writebyte(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4420_0_comp_nf(uae_u32 opcode) /* NEG */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); sub_b(dst,src); writebyte(srca,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4428_0_comp_nf(uae_u32 opcode) /* NEG */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); sub_b(dst,src); writebyte(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4430_0_comp_nf(uae_u32 opcode) /* NEG */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); sub_b(dst,src); writebyte(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4438_0_comp_nf(uae_u32 opcode) /* NEG */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); sub_b(dst,src); writebyte(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4439_0_comp_nf(uae_u32 opcode) /* NEG */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); sub_b(dst,src); writebyte(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4440_0_comp_nf(uae_u32 opcode) /* NEG */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); sub_w(dst,src); if(srcreg!=dst) mov_w_rr(srcreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4450_0_comp_nf(uae_u32 opcode) /* NEG */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); sub_w(dst,src); writeword(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4458_0_comp_nf(uae_u32 opcode) /* NEG */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,2); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); sub_w(dst,src); writeword(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4460_0_comp_nf(uae_u32 opcode) /* NEG */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-2); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readword(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); sub_w(dst,src); writeword(srca,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4468_0_comp_nf(uae_u32 opcode) /* NEG */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); sub_w(dst,src); writeword(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4470_0_comp_nf(uae_u32 opcode) /* NEG */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); sub_w(dst,src); writeword(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4478_0_comp_nf(uae_u32 opcode) /* NEG */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); sub_w(dst,src); writeword(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4479_0_comp_nf(uae_u32 opcode) /* NEG */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readword(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); sub_w(dst,src); writeword(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4480_0_comp_nf(uae_u32 opcode) /* NEG */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); sub_l(dst,src); if(srcreg!=dst) mov_l_rr(srcreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4490_0_comp_nf(uae_u32 opcode) /* NEG */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); sub_l(dst,src); writelong(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4498_0_comp_nf(uae_u32 opcode) /* NEG */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,4); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); sub_l(dst,src); writelong(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_44a0_0_comp_nf(uae_u32 opcode) /* NEG */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-4); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); sub_l(dst,src); writelong(srca,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_44a8_0_comp_nf(uae_u32 opcode) /* NEG */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); sub_l(dst,src); writelong(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_44b0_0_comp_nf(uae_u32 opcode) /* NEG */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); sub_l(dst,src); writelong(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_44b8_0_comp_nf(uae_u32 opcode) /* NEG */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); sub_l(dst,src); writelong(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_44b9_0_comp_nf(uae_u32 opcode) /* NEG */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readlong(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0); dont_care_flags(); sub_l(dst,src); writelong(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4600_0_comp_nf(uae_u32 opcode) /* NOT */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=scratchie++; mov_l_ri(dst,0xffffffff); dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); xor_l(dst,scratchie); forget_about(scratchie); } else xor_b(dst,src); } if(srcreg!=dst) mov_b_rr(srcreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4610_0_comp_nf(uae_u32 opcode) /* NOT */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0xffffffff); dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); xor_l(dst,scratchie); forget_about(scratchie); } else xor_b(dst,src); } writebyte(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4618_0_comp_nf(uae_u32 opcode) /* NOT */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); { int dst=scratchie++; mov_l_ri(dst,0xffffffff); dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); xor_l(dst,scratchie); forget_about(scratchie); } else xor_b(dst,src); } writebyte(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4620_0_comp_nf(uae_u32 opcode) /* NOT */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0xffffffff); dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); xor_l(dst,scratchie); forget_about(scratchie); } else xor_b(dst,src); } writebyte(srca,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4628_0_comp_nf(uae_u32 opcode) /* NOT */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0xffffffff); dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); xor_l(dst,scratchie); forget_about(scratchie); } else xor_b(dst,src); } writebyte(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4630_0_comp_nf(uae_u32 opcode) /* NOT */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0xffffffff); dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); xor_l(dst,scratchie); forget_about(scratchie); } else xor_b(dst,src); } writebyte(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4638_0_comp_nf(uae_u32 opcode) /* NOT */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0xffffffff); dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); xor_l(dst,scratchie); forget_about(scratchie); } else xor_b(dst,src); } writebyte(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4639_0_comp_nf(uae_u32 opcode) /* NOT */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0xffffffff); dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); xor_l(dst,scratchie); forget_about(scratchie); } else xor_b(dst,src); } writebyte(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4640_0_comp_nf(uae_u32 opcode) /* NOT */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=scratchie++; mov_l_ri(dst,0xffffffff); dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); xor_l(dst,scratchie); forget_about(scratchie); } else xor_w(dst,src); } if(srcreg!=dst) mov_w_rr(srcreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4650_0_comp_nf(uae_u32 opcode) /* NOT */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0xffffffff); dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); xor_l(dst,scratchie); forget_about(scratchie); } else xor_w(dst,src); } writeword(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4658_0_comp_nf(uae_u32 opcode) /* NOT */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,2); { int dst=scratchie++; mov_l_ri(dst,0xffffffff); dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); xor_l(dst,scratchie); forget_about(scratchie); } else xor_w(dst,src); } writeword(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4660_0_comp_nf(uae_u32 opcode) /* NOT */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-2); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readword(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0xffffffff); dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); xor_l(dst,scratchie); forget_about(scratchie); } else xor_w(dst,src); } writeword(srca,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4668_0_comp_nf(uae_u32 opcode) /* NOT */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0xffffffff); dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); xor_l(dst,scratchie); forget_about(scratchie); } else xor_w(dst,src); } writeword(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4670_0_comp_nf(uae_u32 opcode) /* NOT */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0xffffffff); dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); xor_l(dst,scratchie); forget_about(scratchie); } else xor_w(dst,src); } writeword(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4678_0_comp_nf(uae_u32 opcode) /* NOT */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0xffffffff); dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); xor_l(dst,scratchie); forget_about(scratchie); } else xor_w(dst,src); } writeword(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4679_0_comp_nf(uae_u32 opcode) /* NOT */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readword(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0xffffffff); dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); xor_l(dst,scratchie); forget_about(scratchie); } else xor_w(dst,src); } writeword(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4680_0_comp_nf(uae_u32 opcode) /* NOT */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=scratchie++; mov_l_ri(dst,0xffffffff); dont_care_flags(); { xor_l(dst,src); } if(srcreg!=dst) mov_l_rr(srcreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4690_0_comp_nf(uae_u32 opcode) /* NOT */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0xffffffff); dont_care_flags(); { xor_l(dst,src); } writelong(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4698_0_comp_nf(uae_u32 opcode) /* NOT */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,4); { int dst=scratchie++; mov_l_ri(dst,0xffffffff); dont_care_flags(); { xor_l(dst,src); } writelong(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_46a0_0_comp_nf(uae_u32 opcode) /* NOT */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-4); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0xffffffff); dont_care_flags(); { xor_l(dst,src); } writelong(srca,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_46a8_0_comp_nf(uae_u32 opcode) /* NOT */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0xffffffff); dont_care_flags(); { xor_l(dst,src); } writelong(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_46b0_0_comp_nf(uae_u32 opcode) /* NOT */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0xffffffff); dont_care_flags(); { xor_l(dst,src); } writelong(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_46b8_0_comp_nf(uae_u32 opcode) /* NOT */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0xffffffff); dont_care_flags(); { xor_l(dst,src); } writelong(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_46b9_0_comp_nf(uae_u32 opcode) /* NOT */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readlong(srca,src,scratchie); { int dst=scratchie++; mov_l_ri(dst,0xffffffff); dont_care_flags(); { xor_l(dst,src); } writelong(srca,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4808_0_comp_nf(uae_u32 opcode) /* LINK */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); { int offs = scratchie++; mov_l_ri(offs,comp_get_ilong((m68k_pc_offset+=4)-4)); sub_l_ri(15,4); writelong_clobber(15,src,scratchie); mov_l_rr(src,15); add_l(15,offs); if(srcreg+8!=src) mov_l_rr(srcreg+8,src); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4840_0_comp_nf(uae_u32 opcode) /* SWAP */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; dont_care_flags(); rol_l_ri(src,16); if(srcreg!=src) mov_l_rr(srcreg,src); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4850_0_comp_nf(uae_u32 opcode) /* PEA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; if (srcreg==7) dodgy=1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); {{ int dsta=dodgy?scratchie++:7+8; lea_l_brr(7+8,7+8,-4); if (dodgy) mov_l_rr(dsta,8+7); writelong(dsta,srca,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4868_0_comp_nf(uae_u32 opcode) /* PEA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; if (srcreg==7) dodgy=1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); {{ int dsta=dodgy?scratchie++:7+8; lea_l_brr(7+8,7+8,-4); if (dodgy) mov_l_rr(dsta,8+7); writelong(dsta,srca,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4870_0_comp_nf(uae_u32 opcode) /* PEA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; if (srcreg==7) dodgy=1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); {{ int dsta=dodgy?scratchie++:7+8; lea_l_brr(7+8,7+8,-4); if (dodgy) mov_l_rr(dsta,8+7); writelong(dsta,srca,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4878_0_comp_nf(uae_u32 opcode) /* PEA */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); {{ int dsta=dodgy?scratchie++:7+8; lea_l_brr(7+8,7+8,-4); if (dodgy) mov_l_rr(dsta,8+7); writelong(dsta,srca,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4879_0_comp_nf(uae_u32 opcode) /* PEA */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ {{ int dsta=dodgy?scratchie++:7+8; lea_l_brr(7+8,7+8,-4); if (dodgy) mov_l_rr(dsta,8+7); writelong(dsta,srca,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_487a_0_comp_nf(uae_u32 opcode) /* PEA */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); {{ int dsta=dodgy?scratchie++:7+8; lea_l_brr(7+8,7+8,-4); if (dodgy) mov_l_rr(dsta,8+7); writelong(dsta,srca,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_487b_0_comp_nf(uae_u32 opcode) /* PEA */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); {{ int dsta=dodgy?scratchie++:7+8; lea_l_brr(7+8,7+8,-4); if (dodgy) mov_l_rr(dsta,8+7); writelong(dsta,srca,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4880_0_comp_nf(uae_u32 opcode) /* EXT */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; dont_care_flags(); { int dst = scratchie++; sign_extend_8_rr(dst,src); if(srcreg!=dst) mov_w_rr(srcreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4890_0_comp_nf(uae_u32 opcode) /* MVMLE */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; int tmp=scratchie++; signed char offset=0; { int srca=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(srca,dstreg+8); if (1 && !special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { mov_l_rr(tmp,i); gen_bswap_16(tmp); mov_w_Rr(native,tmp,offset); offset+=2; } } } else { mov_l_rr(tmp,srca); for (i=0;i<16;i++) { if ((mask>>i)&1) { writeword(tmp,i,scratchie); add_l_ri(tmp,2); } } } }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_48a0_0_comp_nf(uae_u32 opcode) /* MVMLE */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; int tmp=scratchie++; signed char offset=0; { int srca=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(srca,8+dstreg); if (1 && !special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { offset-=2; mov_l_rr(tmp,15-i); gen_bswap_16(tmp); mov_w_Rr(native,tmp,offset); } } lea_l_brr(8+dstreg,srca,(uae_s32)offset); } else { for (i=0;i<16;i++) { if ((mask>>i)&1) { sub_l_ri(srca,2); writeword(srca,15-i,scratchie); } } mov_l_rr(8+dstreg,srca); } }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_48a8_0_comp_nf(uae_u32 opcode) /* MVMLE */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; int tmp=scratchie++; signed char offset=0; { int srca=scratchie++; mov_l_rr(srca,8+dstreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); if (1 && !special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { mov_l_rr(tmp,i); gen_bswap_16(tmp); mov_w_Rr(native,tmp,offset); offset+=2; } } } else { mov_l_rr(tmp,srca); for (i=0;i<16;i++) { if ((mask>>i)&1) { writeword(tmp,i,scratchie); add_l_ri(tmp,2); } } } }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_48b0_0_comp_nf(uae_u32 opcode) /* MVMLE */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; int tmp=scratchie++; signed char offset=0; { int srca=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); if (1 && !special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { mov_l_rr(tmp,i); gen_bswap_16(tmp); mov_w_Rr(native,tmp,offset); offset+=2; } } } else { mov_l_rr(tmp,srca); for (i=0;i<16;i++) { if ((mask>>i)&1) { writeword(tmp,i,scratchie); add_l_ri(tmp,2); } } } }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_48b8_0_comp_nf(uae_u32 opcode) /* MVMLE */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; int tmp=scratchie++; signed char offset=0; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); if (1 && !special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { mov_l_rr(tmp,i); gen_bswap_16(tmp); mov_w_Rr(native,tmp,offset); offset+=2; } } } else { mov_l_rr(tmp,srca); for (i=0;i<16;i++) { if ((mask>>i)&1) { writeword(tmp,i,scratchie); add_l_ri(tmp,2); } } } }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_48b9_0_comp_nf(uae_u32 opcode) /* MVMLE */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; int tmp=scratchie++; signed char offset=0; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ if (1 && !special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { mov_l_rr(tmp,i); gen_bswap_16(tmp); mov_w_Rr(native,tmp,offset); offset+=2; } } } else { mov_l_rr(tmp,srca); for (i=0;i<16;i++) { if ((mask>>i)&1) { writeword(tmp,i,scratchie); add_l_ri(tmp,2); } } } }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_48c0_0_comp_nf(uae_u32 opcode) /* EXT */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; dont_care_flags(); { int dst = src; sign_extend_16_rr(src,src); if(srcreg!=dst) mov_l_rr(srcreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_48d0_0_comp_nf(uae_u32 opcode) /* MVMLE */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; int tmp=scratchie++; signed char offset=0; { int srca=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(srca,dstreg+8); if (1 && !special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { mov_l_rr(tmp,i); gen_bswap_32(tmp); mov_l_Rr(native,tmp,offset); offset+=4; } } } else { mov_l_rr(tmp,srca); for (i=0;i<16;i++) { if ((mask>>i)&1) { writelong(tmp,i,scratchie); add_l_ri(tmp,4); } } } }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_48e0_0_comp_nf(uae_u32 opcode) /* MVMLE */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; int tmp=scratchie++; signed char offset=0; { int srca=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(srca,8+dstreg); if (1 && !special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { offset-=4; mov_l_rr(tmp,15-i); gen_bswap_32(tmp); mov_l_Rr(native,tmp,offset); } } lea_l_brr(8+dstreg,srca,(uae_s32)offset); } else { for (i=0;i<16;i++) { if ((mask>>i)&1) { sub_l_ri(srca,4); writelong(srca,15-i,scratchie); } } mov_l_rr(8+dstreg,srca); } }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_48e8_0_comp_nf(uae_u32 opcode) /* MVMLE */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; int tmp=scratchie++; signed char offset=0; { int srca=scratchie++; mov_l_rr(srca,8+dstreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); if (1 && !special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { mov_l_rr(tmp,i); gen_bswap_32(tmp); mov_l_Rr(native,tmp,offset); offset+=4; } } } else { mov_l_rr(tmp,srca); for (i=0;i<16;i++) { if ((mask>>i)&1) { writelong(tmp,i,scratchie); add_l_ri(tmp,4); } } } }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_48f0_0_comp_nf(uae_u32 opcode) /* MVMLE */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; int tmp=scratchie++; signed char offset=0; { int srca=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); if (1 && !special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { mov_l_rr(tmp,i); gen_bswap_32(tmp); mov_l_Rr(native,tmp,offset); offset+=4; } } } else { mov_l_rr(tmp,srca); for (i=0;i<16;i++) { if ((mask>>i)&1) { writelong(tmp,i,scratchie); add_l_ri(tmp,4); } } } }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_48f8_0_comp_nf(uae_u32 opcode) /* MVMLE */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; int tmp=scratchie++; signed char offset=0; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); if (1 && !special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { mov_l_rr(tmp,i); gen_bswap_32(tmp); mov_l_Rr(native,tmp,offset); offset+=4; } } } else { mov_l_rr(tmp,srca); for (i=0;i<16;i++) { if ((mask>>i)&1) { writelong(tmp,i,scratchie); add_l_ri(tmp,4); } } } }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_48f9_0_comp_nf(uae_u32 opcode) /* MVMLE */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; int tmp=scratchie++; signed char offset=0; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ if (1 && !special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { mov_l_rr(tmp,i); gen_bswap_32(tmp); mov_l_Rr(native,tmp,offset); offset+=4; } } } else { mov_l_rr(tmp,srca); for (i=0;i<16;i++) { if ((mask>>i)&1) { writelong(tmp,i,scratchie); add_l_ri(tmp,4); } } } }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_49c0_0_comp_nf(uae_u32 opcode) /* EXT */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; dont_care_flags(); { int dst = src; sign_extend_8_rr(src,src); if(srcreg!=dst) mov_l_rr(srcreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4a00_0_comp_nf(uae_u32 opcode) /* TST */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4a10_0_comp_nf(uae_u32 opcode) /* TST */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4a18_0_comp_nf(uae_u32 opcode) /* TST */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4a20_0_comp_nf(uae_u32 opcode) /* TST */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readbyte(srca,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4a28_0_comp_nf(uae_u32 opcode) /* TST */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readbyte(srca,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4a30_0_comp_nf(uae_u32 opcode) /* TST */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readbyte(srca,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4a38_0_comp_nf(uae_u32 opcode) /* TST */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readbyte(srca,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4a39_0_comp_nf(uae_u32 opcode) /* TST */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readbyte(srca,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4a3a_0_comp_nf(uae_u32 opcode) /* TST */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readbyte(srca,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4a3b_0_comp_nf(uae_u32 opcode) /* TST */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readbyte(srca,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4a3c_0_comp_nf(uae_u32 opcode) /* TST */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4a40_0_comp_nf(uae_u32 opcode) /* TST */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4a48_0_comp_nf(uae_u32 opcode) /* TST */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4a50_0_comp_nf(uae_u32 opcode) /* TST */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4a58_0_comp_nf(uae_u32 opcode) /* TST */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,2); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4a60_0_comp_nf(uae_u32 opcode) /* TST */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-2); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readword(srca,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4a68_0_comp_nf(uae_u32 opcode) /* TST */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4a70_0_comp_nf(uae_u32 opcode) /* TST */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4a78_0_comp_nf(uae_u32 opcode) /* TST */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4a79_0_comp_nf(uae_u32 opcode) /* TST */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readword(srca,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4a7a_0_comp_nf(uae_u32 opcode) /* TST */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readword(srca,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4a7b_0_comp_nf(uae_u32 opcode) /* TST */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4a7c_0_comp_nf(uae_u32 opcode) /* TST */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4a80_0_comp_nf(uae_u32 opcode) /* TST */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4a88_0_comp_nf(uae_u32 opcode) /* TST */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4a90_0_comp_nf(uae_u32 opcode) /* TST */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4a98_0_comp_nf(uae_u32 opcode) /* TST */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,4); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4aa0_0_comp_nf(uae_u32 opcode) /* TST */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-4); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readlong(srca,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4aa8_0_comp_nf(uae_u32 opcode) /* TST */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4ab0_0_comp_nf(uae_u32 opcode) /* TST */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4ab8_0_comp_nf(uae_u32 opcode) /* TST */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4ab9_0_comp_nf(uae_u32 opcode) /* TST */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readlong(srca,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4aba_0_comp_nf(uae_u32 opcode) /* TST */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readlong(srca,src,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4abb_0_comp_nf(uae_u32 opcode) /* TST */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4abc_0_comp_nf(uae_u32 opcode) /* TST */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4c00_0_comp_nf(uae_u32 opcode) /* MULL */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); int r2=(extra>>12)&7; int tmp=scratchie++; { int dst=dstreg; if (extra&0x0400) { int r3=(extra&7); mov_l_rr(r3,dst); if (extra&0x0800) { imul_64_32(r2,r3); } else { mul_64_32(r2,r3); } } else { imul_32_32(r2,dst); } }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4c10_0_comp_nf(uae_u32 opcode) /* MULL */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); int r2=(extra>>12)&7; int tmp=scratchie++; { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readlong(dsta,dst,scratchie); if (extra&0x0400) { int r3=(extra&7); mov_l_rr(r3,dst); if (extra&0x0800) { imul_64_32(r2,r3); } else { mul_64_32(r2,r3); } } else { imul_32_32(r2,dst); } }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4c18_0_comp_nf(uae_u32 opcode) /* MULL */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); int r2=(extra>>12)&7; int tmp=scratchie++; { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readlong(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,4); if (extra&0x0400) { int r3=(extra&7); mov_l_rr(r3,dst); if (extra&0x0800) { imul_64_32(r2,r3); } else { mul_64_32(r2,r3); } } else { imul_32_32(r2,dst); } }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4c20_0_comp_nf(uae_u32 opcode) /* MULL */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); int r2=(extra>>12)&7; int tmp=scratchie++; {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-4); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readlong(dsta,dst,scratchie); if (extra&0x0400) { int r3=(extra&7); mov_l_rr(r3,dst); if (extra&0x0800) { imul_64_32(r2,r3); } else { mul_64_32(r2,r3); } } else { imul_32_32(r2,dst); } }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4c28_0_comp_nf(uae_u32 opcode) /* MULL */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); int r2=(extra>>12)&7; int tmp=scratchie++; { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readlong(dsta,dst,scratchie); if (extra&0x0400) { int r3=(extra&7); mov_l_rr(r3,dst); if (extra&0x0800) { imul_64_32(r2,r3); } else { mul_64_32(r2,r3); } } else { imul_32_32(r2,dst); } }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4c30_0_comp_nf(uae_u32 opcode) /* MULL */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); int r2=(extra>>12)&7; int tmp=scratchie++; { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readlong(dsta,dst,scratchie); if (extra&0x0400) { int r3=(extra&7); mov_l_rr(r3,dst); if (extra&0x0800) { imul_64_32(r2,r3); } else { mul_64_32(r2,r3); } } else { imul_32_32(r2,dst); } }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4c38_0_comp_nf(uae_u32 opcode) /* MULL */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); int r2=(extra>>12)&7; int tmp=scratchie++; { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readlong(dsta,dst,scratchie); if (extra&0x0400) { int r3=(extra&7); mov_l_rr(r3,dst); if (extra&0x0800) { imul_64_32(r2,r3); } else { mul_64_32(r2,r3); } } else { imul_32_32(r2,dst); } }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4c39_0_comp_nf(uae_u32 opcode) /* MULL */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); int r2=(extra>>12)&7; int tmp=scratchie++; { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readlong(dsta,dst,scratchie); if (extra&0x0400) { int r3=(extra&7); mov_l_rr(r3,dst); if (extra&0x0800) { imul_64_32(r2,r3); } else { mul_64_32(r2,r3); } } else { imul_32_32(r2,dst); } }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4c3a_0_comp_nf(uae_u32 opcode) /* MULL */ { uae_s32 dstreg = 2; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); int r2=(extra>>12)&7; int tmp=scratchie++; { int dsta=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(dsta,address+PC16off); { int dst=scratchie++; readlong(dsta,dst,scratchie); if (extra&0x0400) { int r3=(extra&7); mov_l_rr(r3,dst); if (extra&0x0800) { imul_64_32(r2,r3); } else { mul_64_32(r2,r3); } } else { imul_32_32(r2,dst); } }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4c3b_0_comp_nf(uae_u32 opcode) /* MULL */ { uae_s32 dstreg = 3; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); int r2=(extra>>12)&7; int tmp=scratchie++; { int pctmp=scratchie++; int dsta=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readlong(dsta,dst,scratchie); if (extra&0x0400) { int r3=(extra&7); mov_l_rr(r3,dst); if (extra&0x0800) { imul_64_32(r2,r3); } else { mul_64_32(r2,r3); } } else { imul_32_32(r2,dst); } }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4c3c_0_comp_nf(uae_u32 opcode) /* MULL */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); int r2=(extra>>12)&7; int tmp=scratchie++; { int dst = scratchie++; mov_l_ri(dst,comp_get_ilong((m68k_pc_offset+=4)-4)); if (extra&0x0400) { int r3=(extra&7); mov_l_rr(r3,dst); if (extra&0x0800) { imul_64_32(r2,r3); } else { mul_64_32(r2,r3); } } else { imul_32_32(r2,dst); } }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4c90_0_comp_nf(uae_u32 opcode) /* MVMEL */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; int offset=0; { int srca=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(srca,dstreg+8); if (1 && !special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { mov_w_rR(i,native,offset); gen_bswap_16(i); sign_extend_16_rr(i,i); offset+=2; } } } else { int tmp=scratchie++; mov_l_rr(tmp,srca); for (i=0;i<16;i++) { if ((mask>>i)&1) { readword(tmp,i,scratchie); add_l_ri(tmp,2); } } } }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4c98_0_comp_nf(uae_u32 opcode) /* MVMEL */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; int offset=0; { int srca=scratchie++; mov_l_rr(srca,dstreg+8); if (1 && !special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { mov_w_rR(i,native,offset); gen_bswap_16(i); sign_extend_16_rr(i,i); offset+=2; } } lea_l_brr(8+dstreg,srca,offset); } else { int tmp=scratchie++; mov_l_rr(tmp,srca); for (i=0;i<16;i++) { if ((mask>>i)&1) { readword(tmp,i,scratchie); add_l_ri(tmp,2); } } mov_l_rr(8+dstreg,tmp); } }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4ca8_0_comp_nf(uae_u32 opcode) /* MVMEL */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; int offset=0; { int srca=scratchie++; mov_l_rr(srca,8+dstreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); if (1 && !special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { mov_w_rR(i,native,offset); gen_bswap_16(i); sign_extend_16_rr(i,i); offset+=2; } } } else { int tmp=scratchie++; mov_l_rr(tmp,srca); for (i=0;i<16;i++) { if ((mask>>i)&1) { readword(tmp,i,scratchie); add_l_ri(tmp,2); } } } }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4cb0_0_comp_nf(uae_u32 opcode) /* MVMEL */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; int offset=0; { int srca=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); if (1 && !special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { mov_w_rR(i,native,offset); gen_bswap_16(i); sign_extend_16_rr(i,i); offset+=2; } } } else { int tmp=scratchie++; mov_l_rr(tmp,srca); for (i=0;i<16;i++) { if ((mask>>i)&1) { readword(tmp,i,scratchie); add_l_ri(tmp,2); } } } }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4cb8_0_comp_nf(uae_u32 opcode) /* MVMEL */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; int offset=0; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); if (1 && !special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { mov_w_rR(i,native,offset); gen_bswap_16(i); sign_extend_16_rr(i,i); offset+=2; } } } else { int tmp=scratchie++; mov_l_rr(tmp,srca); for (i=0;i<16;i++) { if ((mask>>i)&1) { readword(tmp,i,scratchie); add_l_ri(tmp,2); } } } }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4cb9_0_comp_nf(uae_u32 opcode) /* MVMEL */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; int offset=0; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ if (1 && !special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { mov_w_rR(i,native,offset); gen_bswap_16(i); sign_extend_16_rr(i,i); offset+=2; } } } else { int tmp=scratchie++; mov_l_rr(tmp,srca); for (i=0;i<16;i++) { if ((mask>>i)&1) { readword(tmp,i,scratchie); add_l_ri(tmp,2); } } } }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4cba_0_comp_nf(uae_u32 opcode) /* MVMEL */ { uae_s32 dstreg = 2; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; int offset=0; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); if (1 && !special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { mov_w_rR(i,native,offset); gen_bswap_16(i); sign_extend_16_rr(i,i); offset+=2; } } } else { int tmp=scratchie++; mov_l_rr(tmp,srca); for (i=0;i<16;i++) { if ((mask>>i)&1) { readword(tmp,i,scratchie); add_l_ri(tmp,2); } } } }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4cbb_0_comp_nf(uae_u32 opcode) /* MVMEL */ { uae_s32 dstreg = 3; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; int offset=0; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); if (1 && !special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { mov_w_rR(i,native,offset); gen_bswap_16(i); sign_extend_16_rr(i,i); offset+=2; } } } else { int tmp=scratchie++; mov_l_rr(tmp,srca); for (i=0;i<16;i++) { if ((mask>>i)&1) { readword(tmp,i,scratchie); add_l_ri(tmp,2); } } } }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4cd0_0_comp_nf(uae_u32 opcode) /* MVMEL */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; int offset=0; { int srca=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(srca,dstreg+8); if (1 && !special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { mov_l_rR(i,native,offset); gen_bswap_32(i); offset+=4; } } } else { int tmp=scratchie++; mov_l_rr(tmp,srca); for (i=0;i<16;i++) { if ((mask>>i)&1) { readlong(tmp,i,scratchie); add_l_ri(tmp,4); } } } }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4cd8_0_comp_nf(uae_u32 opcode) /* MVMEL */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; int offset=0; { int srca=scratchie++; mov_l_rr(srca,dstreg+8); if (1 && !special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { mov_l_rR(i,native,offset); gen_bswap_32(i); offset+=4; } } lea_l_brr(8+dstreg,srca,offset); } else { int tmp=scratchie++; mov_l_rr(tmp,srca); for (i=0;i<16;i++) { if ((mask>>i)&1) { readlong(tmp,i,scratchie); add_l_ri(tmp,4); } } mov_l_rr(8+dstreg,tmp); } }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4ce8_0_comp_nf(uae_u32 opcode) /* MVMEL */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; int offset=0; { int srca=scratchie++; mov_l_rr(srca,8+dstreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); if (1 && !special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { mov_l_rR(i,native,offset); gen_bswap_32(i); offset+=4; } } } else { int tmp=scratchie++; mov_l_rr(tmp,srca); for (i=0;i<16;i++) { if ((mask>>i)&1) { readlong(tmp,i,scratchie); add_l_ri(tmp,4); } } } }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4cf0_0_comp_nf(uae_u32 opcode) /* MVMEL */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; int offset=0; { int srca=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); if (1 && !special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { mov_l_rR(i,native,offset); gen_bswap_32(i); offset+=4; } } } else { int tmp=scratchie++; mov_l_rr(tmp,srca); for (i=0;i<16;i++) { if ((mask>>i)&1) { readlong(tmp,i,scratchie); add_l_ri(tmp,4); } } } }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4cf8_0_comp_nf(uae_u32 opcode) /* MVMEL */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; int offset=0; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); if (1 && !special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { mov_l_rR(i,native,offset); gen_bswap_32(i); offset+=4; } } } else { int tmp=scratchie++; mov_l_rr(tmp,srca); for (i=0;i<16;i++) { if ((mask>>i)&1) { readlong(tmp,i,scratchie); add_l_ri(tmp,4); } } } }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4cf9_0_comp_nf(uae_u32 opcode) /* MVMEL */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; int offset=0; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ if (1 && !special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { mov_l_rR(i,native,offset); gen_bswap_32(i); offset+=4; } } } else { int tmp=scratchie++; mov_l_rr(tmp,srca); for (i=0;i<16;i++) { if ((mask>>i)&1) { readlong(tmp,i,scratchie); add_l_ri(tmp,4); } } } }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4cfa_0_comp_nf(uae_u32 opcode) /* MVMEL */ { uae_s32 dstreg = 2; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; int offset=0; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); if (1 && !special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { mov_l_rR(i,native,offset); gen_bswap_32(i); offset+=4; } } } else { int tmp=scratchie++; mov_l_rr(tmp,srca); for (i=0;i<16;i++) { if ((mask>>i)&1) { readlong(tmp,i,scratchie); add_l_ri(tmp,4); } } } }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4cfb_0_comp_nf(uae_u32 opcode) /* MVMEL */ { uae_s32 dstreg = 3; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 mask = comp_get_iword((m68k_pc_offset+=2)-2); int native=scratchie++; int i; int offset=0; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); if (1 && !special_mem) { get_n_addr(srca,native,scratchie); for (i=0;i<16;i++) { if ((mask>>i)&1) { mov_l_rR(i,native,offset); gen_bswap_32(i); offset+=4; } } } else { int tmp=scratchie++; mov_l_rr(tmp,srca); for (i=0;i<16;i++) { if ((mask>>i)&1) { readlong(tmp,i,scratchie); add_l_ri(tmp,4); } } } }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4e50_0_comp_nf(uae_u32 opcode) /* LINK */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); { int offs = scratchie++; mov_l_ri(offs,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); sub_l_ri(15,4); writelong_clobber(15,src,scratchie); mov_l_rr(src,15); sign_extend_16_rr(offs,offs); add_l(15,offs); if(srcreg+8!=src) mov_l_rr(srcreg+8,src); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4e58_0_comp_nf(uae_u32 opcode) /* UNLK */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); mov_l_rr(15,src); readlong(15,src,scratchie); add_l_ri(15,4); if(srcreg+8!=src) mov_l_rr(srcreg+8,src); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4e71_0_comp_nf(uae_u32 opcode) /* NOP */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; } if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4e74_0_comp_nf(uae_u32 opcode) /* RTD */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int offs = scratchie++; mov_l_ri(offs,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); add_l_ri(offs,4); { int newad=scratchie++; readlong(15,newad,scratchie); and_l_ri(newad,~1); mov_l_mr((uae_u32)®s.pc,newad); get_n_addr_jmp(newad,PC_P,scratchie); mov_l_mr((uae_u32)®s.pc_oldp,PC_P); m68k_pc_offset=0; add_l(15,offs); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4e75_0_comp_nf(uae_u32 opcode) /* RTS */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; int newad=scratchie++; readlong(15,newad,scratchie); and_l_ri(newad,~1); mov_l_mr((uae_u32)®s.pc,newad); get_n_addr_jmp(newad,PC_P,scratchie); mov_l_mr((uae_u32)®s.pc_oldp,PC_P); m68k_pc_offset=0; lea_l_brr(15,15,4); } if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4e90_0_comp_nf(uae_u32 opcode) /* JSR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { uae_u32 retadd=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; int ret=scratchie++; mov_l_ri(ret,retadd); sub_l_ri(15,4); writelong_clobber(15,ret,scratchie); and_l_ri(srca,~1); mov_l_mr((uae_u32)®s.pc,srca); get_n_addr_jmp(srca,PC_P,scratchie); mov_l_mr((uae_u32)®s.pc_oldp,PC_P); m68k_pc_offset=0; }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4ea8_0_comp_nf(uae_u32 opcode) /* JSR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { uae_u32 retadd=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; int ret=scratchie++; mov_l_ri(ret,retadd); sub_l_ri(15,4); writelong_clobber(15,ret,scratchie); and_l_ri(srca,~1); mov_l_mr((uae_u32)®s.pc,srca); get_n_addr_jmp(srca,PC_P,scratchie); mov_l_mr((uae_u32)®s.pc_oldp,PC_P); m68k_pc_offset=0; }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4eb0_0_comp_nf(uae_u32 opcode) /* JSR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { uae_u32 retadd=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; int ret=scratchie++; mov_l_ri(ret,retadd); sub_l_ri(15,4); writelong_clobber(15,ret,scratchie); and_l_ri(srca,~1); mov_l_mr((uae_u32)®s.pc,srca); get_n_addr_jmp(srca,PC_P,scratchie); mov_l_mr((uae_u32)®s.pc_oldp,PC_P); m68k_pc_offset=0; }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4eb8_0_comp_nf(uae_u32 opcode) /* JSR */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { uae_u32 retadd=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; int ret=scratchie++; mov_l_ri(ret,retadd); sub_l_ri(15,4); writelong_clobber(15,ret,scratchie); and_l_ri(srca,~1); mov_l_mr((uae_u32)®s.pc,srca); get_n_addr_jmp(srca,PC_P,scratchie); mov_l_mr((uae_u32)®s.pc_oldp,PC_P); m68k_pc_offset=0; }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4eb9_0_comp_nf(uae_u32 opcode) /* JSR */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { uae_u32 retadd=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; int ret=scratchie++; mov_l_ri(ret,retadd); sub_l_ri(15,4); writelong_clobber(15,ret,scratchie); and_l_ri(srca,~1); mov_l_mr((uae_u32)®s.pc,srca); get_n_addr_jmp(srca,PC_P,scratchie); mov_l_mr((uae_u32)®s.pc_oldp,PC_P); m68k_pc_offset=0; }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4eba_0_comp_nf(uae_u32 opcode) /* JSR */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { uae_u32 retadd=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; int ret=scratchie++; mov_l_ri(ret,retadd); sub_l_ri(15,4); writelong_clobber(15,ret,scratchie); and_l_ri(srca,~1); mov_l_mr((uae_u32)®s.pc,srca); get_n_addr_jmp(srca,PC_P,scratchie); mov_l_mr((uae_u32)®s.pc_oldp,PC_P); m68k_pc_offset=0; }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4ebb_0_comp_nf(uae_u32 opcode) /* JSR */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { uae_u32 retadd=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; int ret=scratchie++; mov_l_ri(ret,retadd); sub_l_ri(15,4); writelong_clobber(15,ret,scratchie); and_l_ri(srca,~1); mov_l_mr((uae_u32)®s.pc,srca); get_n_addr_jmp(srca,PC_P,scratchie); mov_l_mr((uae_u32)®s.pc_oldp,PC_P); m68k_pc_offset=0; }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4ed0_0_comp_nf(uae_u32 opcode) /* JMP */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); and_l_ri(srca,~1); mov_l_mr((uae_u32)®s.pc,srca); get_n_addr_jmp(srca,PC_P,scratchie); mov_l_mr((uae_u32)®s.pc_oldp,PC_P); m68k_pc_offset=0; }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4ee8_0_comp_nf(uae_u32 opcode) /* JMP */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); and_l_ri(srca,~1); mov_l_mr((uae_u32)®s.pc,srca); get_n_addr_jmp(srca,PC_P,scratchie); mov_l_mr((uae_u32)®s.pc_oldp,PC_P); m68k_pc_offset=0; }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4ef0_0_comp_nf(uae_u32 opcode) /* JMP */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); and_l_ri(srca,~1); mov_l_mr((uae_u32)®s.pc,srca); get_n_addr_jmp(srca,PC_P,scratchie); mov_l_mr((uae_u32)®s.pc_oldp,PC_P); m68k_pc_offset=0; }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4ef8_0_comp_nf(uae_u32 opcode) /* JMP */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); and_l_ri(srca,~1); mov_l_mr((uae_u32)®s.pc,srca); get_n_addr_jmp(srca,PC_P,scratchie); mov_l_mr((uae_u32)®s.pc_oldp,PC_P); m68k_pc_offset=0; }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4ef9_0_comp_nf(uae_u32 opcode) /* JMP */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ and_l_ri(srca,~1); mov_l_mr((uae_u32)®s.pc,srca); get_n_addr_jmp(srca,PC_P,scratchie); mov_l_mr((uae_u32)®s.pc_oldp,PC_P); m68k_pc_offset=0; }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4efa_0_comp_nf(uae_u32 opcode) /* JMP */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); and_l_ri(srca,~1); mov_l_mr((uae_u32)®s.pc,srca); get_n_addr_jmp(srca,PC_P,scratchie); mov_l_mr((uae_u32)®s.pc_oldp,PC_P); m68k_pc_offset=0; }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_4efb_0_comp_nf(uae_u32 opcode) /* JMP */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); and_l_ri(srca,~1); mov_l_mr((uae_u32)®s.pc,srca); get_n_addr_jmp(srca,PC_P,scratchie); mov_l_mr((uae_u32)®s.pc_oldp,PC_P); m68k_pc_offset=0; }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5000_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dst=dstreg; dont_care_flags(); add_b(dst,src); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5010_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); add_b(dst,src); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5018_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,areg_byteinc[dstreg]); dont_care_flags(); add_b(dst,src); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5020_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,(uae_s32)-areg_byteinc[dstreg]); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); add_b(dst,src); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5028_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); add_b(dst,src); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5030_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); add_b(dst,src); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5038_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); add_b(dst,src); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5039_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); add_b(dst,src); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5040_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dst=dstreg; dont_care_flags(); add_w(dst,src); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5048_0_comp_nf(uae_u32 opcode) /* ADDA */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; sign_extend_16_rr(tmp,src); add_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5050_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); add_w(dst,src); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5058_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readword(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,2); dont_care_flags(); add_w(dst,src); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5060_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-2); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); add_w(dst,src); writeword(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } #endif #ifdef PART_5 uae_u32 REGPARAM2 op_5068_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); add_w(dst,src); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5070_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); add_w(dst,src); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5078_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); add_w(dst,src); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5079_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); add_w(dst,src); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5080_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dst=dstreg; dont_care_flags(); add_l(dst,src); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5088_0_comp_nf(uae_u32 opcode) /* ADDA */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; tmp=src; add_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5090_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); add_l(dst,src); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5098_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readlong(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,4); dont_care_flags(); add_l(dst,src); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_50a0_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-4); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); add_l(dst,src); writelong(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_50a8_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); add_l(dst,src); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_50b0_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); add_l(dst,src); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_50b8_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); add_l(dst,src); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_50b9_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); add_l(dst,src); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_50c0_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int val = scratchie++; mov_l_ri(val,0); sub_b_ri(val,1); if(srcreg!=val) mov_b_rr(srcreg,val); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_50c8_0_comp_nf(uae_u32 opcode) /* DBcc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int offs = scratchie++; mov_l_ri(offs,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); sign_extend_16_rr(offs,offs); sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(offs,(uae_u32)comp_pc_p); add_l_ri(offs,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; { int nsrc=scratchie++; if(srcreg!=src) mov_w_rr(srcreg,src); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_50d0_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int val = scratchie++; mov_l_ri(val,0); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_50d8_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); { int val = scratchie++; mov_l_ri(val,0); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_50e0_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int val = scratchie++; mov_l_ri(val,0); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_50e8_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int val = scratchie++; mov_l_ri(val,0); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_50f0_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int val = scratchie++; mov_l_ri(val,0); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_50f8_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int val = scratchie++; mov_l_ri(val,0); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_50f9_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int val = scratchie++; mov_l_ri(val,0); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5100_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dst=dstreg; dont_care_flags(); sub_b(dst,src); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5110_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); sub_b(dst,src); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5118_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,areg_byteinc[dstreg]); dont_care_flags(); sub_b(dst,src); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5120_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,(uae_s32)-areg_byteinc[dstreg]); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); sub_b(dst,src); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5128_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); sub_b(dst,src); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5130_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); sub_b(dst,src); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5138_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); sub_b(dst,src); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5139_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); sub_b(dst,src); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5140_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dst=dstreg; dont_care_flags(); sub_w(dst,src); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5148_0_comp_nf(uae_u32 opcode) /* SUBA */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; sign_extend_16_rr(tmp,src); sub_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5150_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); sub_w(dst,src); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5158_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readword(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,2); dont_care_flags(); sub_w(dst,src); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5160_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-2); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); sub_w(dst,src); writeword(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5168_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); sub_w(dst,src); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5170_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); sub_w(dst,src); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5178_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); sub_w(dst,src); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5179_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); sub_w(dst,src); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5180_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dst=dstreg; dont_care_flags(); sub_l(dst,src); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5188_0_comp_nf(uae_u32 opcode) /* SUBA */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; tmp=src; sub_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5190_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); sub_l(dst,src); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5198_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readlong(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,4); dont_care_flags(); sub_l(dst,src); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_51a0_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-4); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); sub_l(dst,src); writelong(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_51a8_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); sub_l(dst,src); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_51b0_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); sub_l(dst,src); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_51b8_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); sub_l(dst,src); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_51b9_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); sub_l(dst,src); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_51c0_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int val = scratchie++; mov_l_ri(val,1); sub_b_ri(val,1); if(srcreg!=val) mov_b_rr(srcreg,val); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_51c8_0_comp_nf(uae_u32 opcode) /* DBcc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int offs = scratchie++; mov_l_ri(offs,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); sign_extend_16_rr(offs,offs); sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(offs,(uae_u32)comp_pc_p); add_l_ri(offs,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; { int nsrc=scratchie++; start_needflags(); sub_w_ri(src,1); end_needflags(); { uae_u32 v2; uae_u32 v1=get_const(PC_P); v2=get_const(offs); register_branch(v1,v2,3); if(srcreg!=src) mov_w_rr(srcreg,src); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_51d0_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int val = scratchie++; mov_l_ri(val,1); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_51d8_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); { int val = scratchie++; mov_l_ri(val,1); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_51e0_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int val = scratchie++; mov_l_ri(val,1); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_51e8_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int val = scratchie++; mov_l_ri(val,1); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_51f0_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int val = scratchie++; mov_l_ri(val,1); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_51f8_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int val = scratchie++; mov_l_ri(val,1); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_51f9_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int val = scratchie++; mov_l_ri(val,1); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_52c0_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int val = scratchie++; make_flags_live(); setcc(val,6); sub_b_ri(val,1); if(srcreg!=val) mov_b_rr(srcreg,val); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_52c8_0_comp_nf(uae_u32 opcode) /* DBcc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int offs = scratchie++; mov_l_ri(offs,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); sign_extend_16_rr(offs,offs); sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(offs,(uae_u32)comp_pc_p); add_l_ri(offs,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; { int nsrc=scratchie++; make_flags_live(); mov_l_rr(nsrc,src); lea_l_brr(scratchie,src,(uae_s32)-1); mov_w_rr(src,scratchie); cmov_l_rr(offs,PC_P,7); cmov_l_rr(src,nsrc,7); start_needflags(); test_w_rr(nsrc,nsrc); end_needflags(); cmov_l_rr(PC_P,offs,5); if(srcreg!=src) mov_w_rr(srcreg,src); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_52d0_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int val = scratchie++; make_flags_live(); setcc(val,6); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_52d8_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); { int val = scratchie++; make_flags_live(); setcc(val,6); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_52e0_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int val = scratchie++; make_flags_live(); setcc(val,6); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_52e8_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int val = scratchie++; make_flags_live(); setcc(val,6); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_52f0_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int val = scratchie++; make_flags_live(); setcc(val,6); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_52f8_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int val = scratchie++; make_flags_live(); setcc(val,6); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_52f9_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int val = scratchie++; make_flags_live(); setcc(val,6); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_53c0_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int val = scratchie++; make_flags_live(); setcc(val,7); sub_b_ri(val,1); if(srcreg!=val) mov_b_rr(srcreg,val); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_53c8_0_comp_nf(uae_u32 opcode) /* DBcc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int offs = scratchie++; mov_l_ri(offs,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); sign_extend_16_rr(offs,offs); sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(offs,(uae_u32)comp_pc_p); add_l_ri(offs,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; { int nsrc=scratchie++; make_flags_live(); mov_l_rr(nsrc,src); lea_l_brr(scratchie,src,(uae_s32)-1); mov_w_rr(src,scratchie); cmov_l_rr(offs,PC_P,6); cmov_l_rr(src,nsrc,6); start_needflags(); test_w_rr(nsrc,nsrc); end_needflags(); cmov_l_rr(PC_P,offs,5); if(srcreg!=src) mov_w_rr(srcreg,src); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_53d0_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int val = scratchie++; make_flags_live(); setcc(val,7); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_53d8_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); { int val = scratchie++; make_flags_live(); setcc(val,7); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_53e0_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int val = scratchie++; make_flags_live(); setcc(val,7); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_53e8_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int val = scratchie++; make_flags_live(); setcc(val,7); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_53f0_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int val = scratchie++; make_flags_live(); setcc(val,7); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_53f8_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int val = scratchie++; make_flags_live(); setcc(val,7); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_53f9_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int val = scratchie++; make_flags_live(); setcc(val,7); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_54c0_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int val = scratchie++; make_flags_live(); setcc(val,2); sub_b_ri(val,1); if(srcreg!=val) mov_b_rr(srcreg,val); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_54c8_0_comp_nf(uae_u32 opcode) /* DBcc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int offs = scratchie++; mov_l_ri(offs,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); sign_extend_16_rr(offs,offs); sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(offs,(uae_u32)comp_pc_p); add_l_ri(offs,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; { int nsrc=scratchie++; make_flags_live(); mov_l_rr(nsrc,src); lea_l_brr(scratchie,src,(uae_s32)-1); mov_w_rr(src,scratchie); cmov_l_rr(offs,PC_P,3); cmov_l_rr(src,nsrc,3); start_needflags(); test_w_rr(nsrc,nsrc); end_needflags(); cmov_l_rr(PC_P,offs,5); if(srcreg!=src) mov_w_rr(srcreg,src); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_54d0_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int val = scratchie++; make_flags_live(); setcc(val,2); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_54d8_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); { int val = scratchie++; make_flags_live(); setcc(val,2); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_54e0_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int val = scratchie++; make_flags_live(); setcc(val,2); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_54e8_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int val = scratchie++; make_flags_live(); setcc(val,2); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_54f0_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int val = scratchie++; make_flags_live(); setcc(val,2); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_54f8_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int val = scratchie++; make_flags_live(); setcc(val,2); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_54f9_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int val = scratchie++; make_flags_live(); setcc(val,2); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_55c0_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int val = scratchie++; make_flags_live(); setcc(val,3); sub_b_ri(val,1); if(srcreg!=val) mov_b_rr(srcreg,val); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_55c8_0_comp_nf(uae_u32 opcode) /* DBcc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int offs = scratchie++; mov_l_ri(offs,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); sign_extend_16_rr(offs,offs); sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(offs,(uae_u32)comp_pc_p); add_l_ri(offs,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; { int nsrc=scratchie++; make_flags_live(); mov_l_rr(nsrc,src); lea_l_brr(scratchie,src,(uae_s32)-1); mov_w_rr(src,scratchie); cmov_l_rr(offs,PC_P,2); cmov_l_rr(src,nsrc,2); start_needflags(); test_w_rr(nsrc,nsrc); end_needflags(); cmov_l_rr(PC_P,offs,5); if(srcreg!=src) mov_w_rr(srcreg,src); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_55d0_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int val = scratchie++; make_flags_live(); setcc(val,3); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_55d8_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); { int val = scratchie++; make_flags_live(); setcc(val,3); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_55e0_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int val = scratchie++; make_flags_live(); setcc(val,3); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_55e8_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int val = scratchie++; make_flags_live(); setcc(val,3); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_55f0_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int val = scratchie++; make_flags_live(); setcc(val,3); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_55f8_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int val = scratchie++; make_flags_live(); setcc(val,3); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_55f9_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int val = scratchie++; make_flags_live(); setcc(val,3); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_56c0_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int val = scratchie++; make_flags_live(); setcc(val,4); sub_b_ri(val,1); if(srcreg!=val) mov_b_rr(srcreg,val); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_56c8_0_comp_nf(uae_u32 opcode) /* DBcc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int offs = scratchie++; mov_l_ri(offs,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); sign_extend_16_rr(offs,offs); sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(offs,(uae_u32)comp_pc_p); add_l_ri(offs,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; { int nsrc=scratchie++; make_flags_live(); mov_l_rr(nsrc,src); lea_l_brr(scratchie,src,(uae_s32)-1); mov_w_rr(src,scratchie); cmov_l_rr(offs,PC_P,5); cmov_l_rr(src,nsrc,5); start_needflags(); test_w_rr(nsrc,nsrc); end_needflags(); cmov_l_rr(PC_P,offs,5); if(srcreg!=src) mov_w_rr(srcreg,src); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_56d0_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int val = scratchie++; make_flags_live(); setcc(val,4); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_56d8_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); { int val = scratchie++; make_flags_live(); setcc(val,4); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_56e0_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int val = scratchie++; make_flags_live(); setcc(val,4); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_56e8_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int val = scratchie++; make_flags_live(); setcc(val,4); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_56f0_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int val = scratchie++; make_flags_live(); setcc(val,4); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_56f8_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int val = scratchie++; make_flags_live(); setcc(val,4); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_56f9_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int val = scratchie++; make_flags_live(); setcc(val,4); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_57c0_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int val = scratchie++; make_flags_live(); setcc(val,5); sub_b_ri(val,1); if(srcreg!=val) mov_b_rr(srcreg,val); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_57c8_0_comp_nf(uae_u32 opcode) /* DBcc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int offs = scratchie++; mov_l_ri(offs,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); sign_extend_16_rr(offs,offs); sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(offs,(uae_u32)comp_pc_p); add_l_ri(offs,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; { int nsrc=scratchie++; make_flags_live(); mov_l_rr(nsrc,src); lea_l_brr(scratchie,src,(uae_s32)-1); mov_w_rr(src,scratchie); cmov_l_rr(offs,PC_P,4); cmov_l_rr(src,nsrc,4); start_needflags(); test_w_rr(nsrc,nsrc); end_needflags(); cmov_l_rr(PC_P,offs,5); if(srcreg!=src) mov_w_rr(srcreg,src); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_57d0_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int val = scratchie++; make_flags_live(); setcc(val,5); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_57d8_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); { int val = scratchie++; make_flags_live(); setcc(val,5); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_57e0_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int val = scratchie++; make_flags_live(); setcc(val,5); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_57e8_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int val = scratchie++; make_flags_live(); setcc(val,5); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_57f0_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int val = scratchie++; make_flags_live(); setcc(val,5); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_57f8_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int val = scratchie++; make_flags_live(); setcc(val,5); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_57f9_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int val = scratchie++; make_flags_live(); setcc(val,5); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5ac0_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int val = scratchie++; make_flags_live(); setcc(val,8); sub_b_ri(val,1); if(srcreg!=val) mov_b_rr(srcreg,val); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5ac8_0_comp_nf(uae_u32 opcode) /* DBcc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int offs = scratchie++; mov_l_ri(offs,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); sign_extend_16_rr(offs,offs); sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(offs,(uae_u32)comp_pc_p); add_l_ri(offs,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; { int nsrc=scratchie++; make_flags_live(); mov_l_rr(nsrc,src); lea_l_brr(scratchie,src,(uae_s32)-1); mov_w_rr(src,scratchie); cmov_l_rr(offs,PC_P,9); cmov_l_rr(src,nsrc,9); start_needflags(); test_w_rr(nsrc,nsrc); end_needflags(); cmov_l_rr(PC_P,offs,5); if(srcreg!=src) mov_w_rr(srcreg,src); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5ad0_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int val = scratchie++; make_flags_live(); setcc(val,8); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5ad8_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); { int val = scratchie++; make_flags_live(); setcc(val,8); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5ae0_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int val = scratchie++; make_flags_live(); setcc(val,8); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5ae8_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int val = scratchie++; make_flags_live(); setcc(val,8); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5af0_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int val = scratchie++; make_flags_live(); setcc(val,8); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5af8_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int val = scratchie++; make_flags_live(); setcc(val,8); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5af9_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int val = scratchie++; make_flags_live(); setcc(val,8); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5bc0_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int val = scratchie++; make_flags_live(); setcc(val,9); sub_b_ri(val,1); if(srcreg!=val) mov_b_rr(srcreg,val); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5bc8_0_comp_nf(uae_u32 opcode) /* DBcc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int offs = scratchie++; mov_l_ri(offs,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); sign_extend_16_rr(offs,offs); sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(offs,(uae_u32)comp_pc_p); add_l_ri(offs,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; { int nsrc=scratchie++; make_flags_live(); mov_l_rr(nsrc,src); lea_l_brr(scratchie,src,(uae_s32)-1); mov_w_rr(src,scratchie); cmov_l_rr(offs,PC_P,8); cmov_l_rr(src,nsrc,8); start_needflags(); test_w_rr(nsrc,nsrc); end_needflags(); cmov_l_rr(PC_P,offs,5); if(srcreg!=src) mov_w_rr(srcreg,src); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5bd0_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int val = scratchie++; make_flags_live(); setcc(val,9); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5bd8_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); { int val = scratchie++; make_flags_live(); setcc(val,9); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5be0_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int val = scratchie++; make_flags_live(); setcc(val,9); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5be8_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int val = scratchie++; make_flags_live(); setcc(val,9); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5bf0_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int val = scratchie++; make_flags_live(); setcc(val,9); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5bf8_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int val = scratchie++; make_flags_live(); setcc(val,9); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5bf9_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int val = scratchie++; make_flags_live(); setcc(val,9); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5cc0_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int val = scratchie++; make_flags_live(); setcc(val,12); sub_b_ri(val,1); if(srcreg!=val) mov_b_rr(srcreg,val); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5cc8_0_comp_nf(uae_u32 opcode) /* DBcc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int offs = scratchie++; mov_l_ri(offs,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); sign_extend_16_rr(offs,offs); sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(offs,(uae_u32)comp_pc_p); add_l_ri(offs,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; { int nsrc=scratchie++; make_flags_live(); mov_l_rr(nsrc,src); lea_l_brr(scratchie,src,(uae_s32)-1); mov_w_rr(src,scratchie); cmov_l_rr(offs,PC_P,13); cmov_l_rr(src,nsrc,13); start_needflags(); test_w_rr(nsrc,nsrc); end_needflags(); cmov_l_rr(PC_P,offs,5); if(srcreg!=src) mov_w_rr(srcreg,src); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5cd0_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int val = scratchie++; make_flags_live(); setcc(val,12); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5cd8_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); { int val = scratchie++; make_flags_live(); setcc(val,12); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5ce0_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int val = scratchie++; make_flags_live(); setcc(val,12); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5ce8_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int val = scratchie++; make_flags_live(); setcc(val,12); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5cf0_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int val = scratchie++; make_flags_live(); setcc(val,12); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5cf8_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int val = scratchie++; make_flags_live(); setcc(val,12); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5cf9_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int val = scratchie++; make_flags_live(); setcc(val,12); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5dc0_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int val = scratchie++; make_flags_live(); setcc(val,13); sub_b_ri(val,1); if(srcreg!=val) mov_b_rr(srcreg,val); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5dc8_0_comp_nf(uae_u32 opcode) /* DBcc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int offs = scratchie++; mov_l_ri(offs,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); sign_extend_16_rr(offs,offs); sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(offs,(uae_u32)comp_pc_p); add_l_ri(offs,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; { int nsrc=scratchie++; make_flags_live(); mov_l_rr(nsrc,src); lea_l_brr(scratchie,src,(uae_s32)-1); mov_w_rr(src,scratchie); cmov_l_rr(offs,PC_P,12); cmov_l_rr(src,nsrc,12); start_needflags(); test_w_rr(nsrc,nsrc); end_needflags(); cmov_l_rr(PC_P,offs,5); if(srcreg!=src) mov_w_rr(srcreg,src); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5dd0_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int val = scratchie++; make_flags_live(); setcc(val,13); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5dd8_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); { int val = scratchie++; make_flags_live(); setcc(val,13); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5de0_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int val = scratchie++; make_flags_live(); setcc(val,13); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5de8_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int val = scratchie++; make_flags_live(); setcc(val,13); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5df0_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int val = scratchie++; make_flags_live(); setcc(val,13); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5df8_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int val = scratchie++; make_flags_live(); setcc(val,13); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5df9_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int val = scratchie++; make_flags_live(); setcc(val,13); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5ec0_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int val = scratchie++; make_flags_live(); setcc(val,14); sub_b_ri(val,1); if(srcreg!=val) mov_b_rr(srcreg,val); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5ec8_0_comp_nf(uae_u32 opcode) /* DBcc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int offs = scratchie++; mov_l_ri(offs,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); sign_extend_16_rr(offs,offs); sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(offs,(uae_u32)comp_pc_p); add_l_ri(offs,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; { int nsrc=scratchie++; make_flags_live(); mov_l_rr(nsrc,src); lea_l_brr(scratchie,src,(uae_s32)-1); mov_w_rr(src,scratchie); cmov_l_rr(offs,PC_P,15); cmov_l_rr(src,nsrc,15); start_needflags(); test_w_rr(nsrc,nsrc); end_needflags(); cmov_l_rr(PC_P,offs,5); if(srcreg!=src) mov_w_rr(srcreg,src); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5ed0_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int val = scratchie++; make_flags_live(); setcc(val,14); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5ed8_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); { int val = scratchie++; make_flags_live(); setcc(val,14); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5ee0_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int val = scratchie++; make_flags_live(); setcc(val,14); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5ee8_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int val = scratchie++; make_flags_live(); setcc(val,14); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5ef0_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int val = scratchie++; make_flags_live(); setcc(val,14); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5ef8_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int val = scratchie++; make_flags_live(); setcc(val,14); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5ef9_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int val = scratchie++; make_flags_live(); setcc(val,14); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5fc0_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int val = scratchie++; make_flags_live(); setcc(val,15); sub_b_ri(val,1); if(srcreg!=val) mov_b_rr(srcreg,val); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5fc8_0_comp_nf(uae_u32 opcode) /* DBcc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int offs = scratchie++; mov_l_ri(offs,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); sign_extend_16_rr(offs,offs); sub_l_ri(offs,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(offs,(uae_u32)comp_pc_p); add_l_ri(offs,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; { int nsrc=scratchie++; make_flags_live(); mov_l_rr(nsrc,src); lea_l_brr(scratchie,src,(uae_s32)-1); mov_w_rr(src,scratchie); cmov_l_rr(offs,PC_P,14); cmov_l_rr(src,nsrc,14); start_needflags(); test_w_rr(nsrc,nsrc); end_needflags(); cmov_l_rr(PC_P,offs,5); if(srcreg!=src) mov_w_rr(srcreg,src); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5fd0_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int val = scratchie++; make_flags_live(); setcc(val,15); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5fd8_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); { int val = scratchie++; make_flags_live(); setcc(val,15); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5fe0_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int val = scratchie++; make_flags_live(); setcc(val,15); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5fe8_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int val = scratchie++; make_flags_live(); setcc(val,15); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5ff0_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int val = scratchie++; make_flags_live(); setcc(val,15); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5ff8_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int val = scratchie++; make_flags_live(); setcc(val,15); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_5ff9_0_comp_nf(uae_u32 opcode) /* Scc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int val = scratchie++; make_flags_live(); setcc(val,15); sub_b_ri(val,1); writebyte(srca,val,scratchie); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6000_0_comp_nf(uae_u32 opcode) /* Bcc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); sign_extend_16_rr(src,src); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; mov_l_rr(PC_P,src); comp_pc_p=(uae_u8*)get_const(PC_P); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6001_0_comp_nf(uae_u32 opcode) /* Bcc */ { uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,srcreg); sign_extend_8_rr(src,src); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; mov_l_rr(PC_P,src); comp_pc_p=(uae_u8*)get_const(PC_P); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_60ff_0_comp_nf(uae_u32 opcode) /* Bcc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; mov_l_rr(PC_P,src); comp_pc_p=(uae_u8*)get_const(PC_P); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6100_0_comp_nf(uae_u32 opcode) /* BSR */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); and_l_ri(src,~1); { uae_u32 retadd=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; int ret=scratchie++; mov_l_ri(ret,retadd); sub_l_ri(15,4); writelong_clobber(15,ret,scratchie); add_l_ri(src,m68k_pc_offset_thisinst+2); m68k_pc_offset=0; add_l(PC_P,src); comp_pc_p=(uae_u8*)get_const(PC_P); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } #endif #ifdef PART_6 uae_u32 REGPARAM2 op_6101_0_comp_nf(uae_u32 opcode) /* BSR */ { uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); and_l_ri(src,~1); { uae_u32 retadd=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; int ret=scratchie++; mov_l_ri(ret,retadd); sub_l_ri(15,4); writelong_clobber(15,ret,scratchie); add_l_ri(src,m68k_pc_offset_thisinst+2); m68k_pc_offset=0; add_l(PC_P,src); comp_pc_p=(uae_u8*)get_const(PC_P); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6200_0_comp_nf(uae_u32 opcode) /* Bcc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); sign_extend_16_rr(src,src); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; v1=get_const(PC_P); v2=get_const(src); register_branch(v1,v2,7); make_flags_live(); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6201_0_comp_nf(uae_u32 opcode) /* Bcc */ { uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,srcreg); sign_extend_8_rr(src,src); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; v1=get_const(PC_P); v2=get_const(src); register_branch(v1,v2,7); make_flags_live(); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_62ff_0_comp_nf(uae_u32 opcode) /* Bcc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; v1=get_const(PC_P); v2=get_const(src); register_branch(v1,v2,7); make_flags_live(); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6300_0_comp_nf(uae_u32 opcode) /* Bcc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); sign_extend_16_rr(src,src); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; v1=get_const(PC_P); v2=get_const(src); register_branch(v1,v2,6); make_flags_live(); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6301_0_comp_nf(uae_u32 opcode) /* Bcc */ { uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,srcreg); sign_extend_8_rr(src,src); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; v1=get_const(PC_P); v2=get_const(src); register_branch(v1,v2,6); make_flags_live(); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_63ff_0_comp_nf(uae_u32 opcode) /* Bcc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; v1=get_const(PC_P); v2=get_const(src); register_branch(v1,v2,6); make_flags_live(); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6400_0_comp_nf(uae_u32 opcode) /* Bcc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); sign_extend_16_rr(src,src); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; v1=get_const(PC_P); v2=get_const(src); register_branch(v1,v2,3); make_flags_live(); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6401_0_comp_nf(uae_u32 opcode) /* Bcc */ { uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,srcreg); sign_extend_8_rr(src,src); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; v1=get_const(PC_P); v2=get_const(src); register_branch(v1,v2,3); make_flags_live(); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_64ff_0_comp_nf(uae_u32 opcode) /* Bcc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; v1=get_const(PC_P); v2=get_const(src); register_branch(v1,v2,3); make_flags_live(); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6500_0_comp_nf(uae_u32 opcode) /* Bcc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); sign_extend_16_rr(src,src); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; v1=get_const(PC_P); v2=get_const(src); register_branch(v1,v2,2); make_flags_live(); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6501_0_comp_nf(uae_u32 opcode) /* Bcc */ { uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,srcreg); sign_extend_8_rr(src,src); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; v1=get_const(PC_P); v2=get_const(src); register_branch(v1,v2,2); make_flags_live(); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_65ff_0_comp_nf(uae_u32 opcode) /* Bcc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; v1=get_const(PC_P); v2=get_const(src); register_branch(v1,v2,2); make_flags_live(); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6600_0_comp_nf(uae_u32 opcode) /* Bcc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); sign_extend_16_rr(src,src); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; v1=get_const(PC_P); v2=get_const(src); register_branch(v1,v2,5); make_flags_live(); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6601_0_comp_nf(uae_u32 opcode) /* Bcc */ { uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,srcreg); sign_extend_8_rr(src,src); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; v1=get_const(PC_P); v2=get_const(src); register_branch(v1,v2,5); make_flags_live(); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_66ff_0_comp_nf(uae_u32 opcode) /* Bcc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; v1=get_const(PC_P); v2=get_const(src); register_branch(v1,v2,5); make_flags_live(); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6700_0_comp_nf(uae_u32 opcode) /* Bcc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); sign_extend_16_rr(src,src); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; v1=get_const(PC_P); v2=get_const(src); register_branch(v1,v2,4); make_flags_live(); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6701_0_comp_nf(uae_u32 opcode) /* Bcc */ { uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,srcreg); sign_extend_8_rr(src,src); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; v1=get_const(PC_P); v2=get_const(src); register_branch(v1,v2,4); make_flags_live(); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_67ff_0_comp_nf(uae_u32 opcode) /* Bcc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; v1=get_const(PC_P); v2=get_const(src); register_branch(v1,v2,4); make_flags_live(); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6a00_0_comp_nf(uae_u32 opcode) /* Bcc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); sign_extend_16_rr(src,src); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; v1=get_const(PC_P); v2=get_const(src); register_branch(v1,v2,9); make_flags_live(); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6a01_0_comp_nf(uae_u32 opcode) /* Bcc */ { uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,srcreg); sign_extend_8_rr(src,src); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; v1=get_const(PC_P); v2=get_const(src); register_branch(v1,v2,9); make_flags_live(); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6aff_0_comp_nf(uae_u32 opcode) /* Bcc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; v1=get_const(PC_P); v2=get_const(src); register_branch(v1,v2,9); make_flags_live(); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6b00_0_comp_nf(uae_u32 opcode) /* Bcc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); sign_extend_16_rr(src,src); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; v1=get_const(PC_P); v2=get_const(src); register_branch(v1,v2,8); make_flags_live(); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6b01_0_comp_nf(uae_u32 opcode) /* Bcc */ { uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,srcreg); sign_extend_8_rr(src,src); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; v1=get_const(PC_P); v2=get_const(src); register_branch(v1,v2,8); make_flags_live(); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6bff_0_comp_nf(uae_u32 opcode) /* Bcc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; v1=get_const(PC_P); v2=get_const(src); register_branch(v1,v2,8); make_flags_live(); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6c00_0_comp_nf(uae_u32 opcode) /* Bcc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); sign_extend_16_rr(src,src); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; v1=get_const(PC_P); v2=get_const(src); register_branch(v1,v2,13); make_flags_live(); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6c01_0_comp_nf(uae_u32 opcode) /* Bcc */ { uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,srcreg); sign_extend_8_rr(src,src); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; v1=get_const(PC_P); v2=get_const(src); register_branch(v1,v2,13); make_flags_live(); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6cff_0_comp_nf(uae_u32 opcode) /* Bcc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; v1=get_const(PC_P); v2=get_const(src); register_branch(v1,v2,13); make_flags_live(); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6d00_0_comp_nf(uae_u32 opcode) /* Bcc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); sign_extend_16_rr(src,src); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; v1=get_const(PC_P); v2=get_const(src); register_branch(v1,v2,12); make_flags_live(); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6d01_0_comp_nf(uae_u32 opcode) /* Bcc */ { uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,srcreg); sign_extend_8_rr(src,src); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; v1=get_const(PC_P); v2=get_const(src); register_branch(v1,v2,12); make_flags_live(); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6dff_0_comp_nf(uae_u32 opcode) /* Bcc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; v1=get_const(PC_P); v2=get_const(src); register_branch(v1,v2,12); make_flags_live(); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6e00_0_comp_nf(uae_u32 opcode) /* Bcc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); sign_extend_16_rr(src,src); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; v1=get_const(PC_P); v2=get_const(src); register_branch(v1,v2,15); make_flags_live(); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6e01_0_comp_nf(uae_u32 opcode) /* Bcc */ { uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,srcreg); sign_extend_8_rr(src,src); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; v1=get_const(PC_P); v2=get_const(src); register_branch(v1,v2,15); make_flags_live(); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6eff_0_comp_nf(uae_u32 opcode) /* Bcc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; v1=get_const(PC_P); v2=get_const(src); register_branch(v1,v2,15); make_flags_live(); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6f00_0_comp_nf(uae_u32 opcode) /* Bcc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); sign_extend_16_rr(src,src); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; v1=get_const(PC_P); v2=get_const(src); register_branch(v1,v2,14); make_flags_live(); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6f01_0_comp_nf(uae_u32 opcode) /* Bcc */ { uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,srcreg); sign_extend_8_rr(src,src); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; v1=get_const(PC_P); v2=get_const(src); register_branch(v1,v2,14); make_flags_live(); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_6fff_0_comp_nf(uae_u32 opcode) /* Bcc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u32 v1,v2; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); and_l_ri(src,~1); sub_l_ri(src,m68k_pc_offset-m68k_pc_offset_thisinst-2); add_l_ri(src,(uae_u32)comp_pc_p); mov_l_ri(PC_P,(uae_u32)comp_pc_p); add_l_ri(src,m68k_pc_offset); add_l_ri(PC_P,m68k_pc_offset); m68k_pc_offset=0; v1=get_const(PC_P); v2=get_const(src); register_branch(v1,v2,14); make_flags_live(); }} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_7000_0_comp_nf(uae_u32 opcode) /* MOVE */ { uae_s32 srcreg = (uae_s32)(uae_s8)(opcode & 255); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,srcreg); { int dst=dstreg; dont_care_flags(); mov_l_rr(dst,src); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8000_0_comp_nf(uae_u32 opcode) /* OR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dstreg; dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); or_l(dst,scratchie); forget_about(scratchie); } else or_b(dst,src); } if(dstreg!=dst) mov_b_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8010_0_comp_nf(uae_u32 opcode) /* OR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); or_l(dst,scratchie); forget_about(scratchie); } else or_b(dst,src); } if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8018_0_comp_nf(uae_u32 opcode) /* OR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); { int dst=dstreg; dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); or_l(dst,scratchie); forget_about(scratchie); } else or_b(dst,src); } if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8020_0_comp_nf(uae_u32 opcode) /* OR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); or_l(dst,scratchie); forget_about(scratchie); } else or_b(dst,src); } if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8028_0_comp_nf(uae_u32 opcode) /* OR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); or_l(dst,scratchie); forget_about(scratchie); } else or_b(dst,src); } if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8030_0_comp_nf(uae_u32 opcode) /* OR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); or_l(dst,scratchie); forget_about(scratchie); } else or_b(dst,src); } if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8038_0_comp_nf(uae_u32 opcode) /* OR */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); or_l(dst,scratchie); forget_about(scratchie); } else or_b(dst,src); } if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8039_0_comp_nf(uae_u32 opcode) /* OR */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); or_l(dst,scratchie); forget_about(scratchie); } else or_b(dst,src); } if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_803a_0_comp_nf(uae_u32 opcode) /* OR */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); or_l(dst,scratchie); forget_about(scratchie); } else or_b(dst,src); } if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_803b_0_comp_nf(uae_u32 opcode) /* OR */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); or_l(dst,scratchie); forget_about(scratchie); } else or_b(dst,src); } if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_803c_0_comp_nf(uae_u32 opcode) /* OR */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dst=dstreg; dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); or_l(dst,scratchie); forget_about(scratchie); } else or_b(dst,src); } if(dstreg!=dst) mov_b_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8040_0_comp_nf(uae_u32 opcode) /* OR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dstreg; dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); or_l(dst,scratchie); forget_about(scratchie); } else or_w(dst,src); } if(dstreg!=dst) mov_w_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8050_0_comp_nf(uae_u32 opcode) /* OR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); or_l(dst,scratchie); forget_about(scratchie); } else or_w(dst,src); } if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8058_0_comp_nf(uae_u32 opcode) /* OR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,2); { int dst=dstreg; dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); or_l(dst,scratchie); forget_about(scratchie); } else or_w(dst,src); } if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8060_0_comp_nf(uae_u32 opcode) /* OR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-2); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); or_l(dst,scratchie); forget_about(scratchie); } else or_w(dst,src); } if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8068_0_comp_nf(uae_u32 opcode) /* OR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); or_l(dst,scratchie); forget_about(scratchie); } else or_w(dst,src); } if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8070_0_comp_nf(uae_u32 opcode) /* OR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); or_l(dst,scratchie); forget_about(scratchie); } else or_w(dst,src); } if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8078_0_comp_nf(uae_u32 opcode) /* OR */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); or_l(dst,scratchie); forget_about(scratchie); } else or_w(dst,src); } if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8079_0_comp_nf(uae_u32 opcode) /* OR */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); or_l(dst,scratchie); forget_about(scratchie); } else or_w(dst,src); } if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_807a_0_comp_nf(uae_u32 opcode) /* OR */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); or_l(dst,scratchie); forget_about(scratchie); } else or_w(dst,src); } if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_807b_0_comp_nf(uae_u32 opcode) /* OR */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); or_l(dst,scratchie); forget_about(scratchie); } else or_w(dst,src); } if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_807c_0_comp_nf(uae_u32 opcode) /* OR */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=dstreg; dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); or_l(dst,scratchie); forget_about(scratchie); } else or_w(dst,src); } if(dstreg!=dst) mov_w_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8080_0_comp_nf(uae_u32 opcode) /* OR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dstreg; dont_care_flags(); { or_l(dst,src); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8090_0_comp_nf(uae_u32 opcode) /* OR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { or_l(dst,src); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8098_0_comp_nf(uae_u32 opcode) /* OR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,4); { int dst=dstreg; dont_care_flags(); { or_l(dst,src); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_80a0_0_comp_nf(uae_u32 opcode) /* OR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-4); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { or_l(dst,src); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_80a8_0_comp_nf(uae_u32 opcode) /* OR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { or_l(dst,src); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_80b0_0_comp_nf(uae_u32 opcode) /* OR */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { or_l(dst,src); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_80b8_0_comp_nf(uae_u32 opcode) /* OR */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { or_l(dst,src); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_80b9_0_comp_nf(uae_u32 opcode) /* OR */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { or_l(dst,src); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_80ba_0_comp_nf(uae_u32 opcode) /* OR */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { or_l(dst,src); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_80bb_0_comp_nf(uae_u32 opcode) /* OR */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); { or_l(dst,src); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_80bc_0_comp_nf(uae_u32 opcode) /* OR */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dst=dstreg; dont_care_flags(); { or_l(dst,src); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8110_0_comp_nf(uae_u32 opcode) /* OR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); or_l(dst,scratchie); forget_about(scratchie); } else or_b(dst,src); } writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8118_0_comp_nf(uae_u32 opcode) /* OR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,areg_byteinc[dstreg]); dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); or_l(dst,scratchie); forget_about(scratchie); } else or_b(dst,src); } writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8120_0_comp_nf(uae_u32 opcode) /* OR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,(uae_s32)-areg_byteinc[dstreg]); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); or_l(dst,scratchie); forget_about(scratchie); } else or_b(dst,src); } writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8128_0_comp_nf(uae_u32 opcode) /* OR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); or_l(dst,scratchie); forget_about(scratchie); } else or_b(dst,src); } writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8130_0_comp_nf(uae_u32 opcode) /* OR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); or_l(dst,scratchie); forget_about(scratchie); } else or_b(dst,src); } writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8138_0_comp_nf(uae_u32 opcode) /* OR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); or_l(dst,scratchie); forget_about(scratchie); } else or_b(dst,src); } writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8139_0_comp_nf(uae_u32 opcode) /* OR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); or_l(dst,scratchie); forget_about(scratchie); } else or_b(dst,src); } writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8150_0_comp_nf(uae_u32 opcode) /* OR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); or_l(dst,scratchie); forget_about(scratchie); } else or_w(dst,src); } writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8158_0_comp_nf(uae_u32 opcode) /* OR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readword(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,2); dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); or_l(dst,scratchie); forget_about(scratchie); } else or_w(dst,src); } writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8160_0_comp_nf(uae_u32 opcode) /* OR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-2); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); or_l(dst,scratchie); forget_about(scratchie); } else or_w(dst,src); } writeword(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8168_0_comp_nf(uae_u32 opcode) /* OR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); or_l(dst,scratchie); forget_about(scratchie); } else or_w(dst,src); } writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8170_0_comp_nf(uae_u32 opcode) /* OR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); or_l(dst,scratchie); forget_about(scratchie); } else or_w(dst,src); } writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8178_0_comp_nf(uae_u32 opcode) /* OR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); or_l(dst,scratchie); forget_about(scratchie); } else or_w(dst,src); } writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8179_0_comp_nf(uae_u32 opcode) /* OR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); or_l(dst,scratchie); forget_about(scratchie); } else or_w(dst,src); } writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8190_0_comp_nf(uae_u32 opcode) /* OR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); { or_l(dst,src); } writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_8198_0_comp_nf(uae_u32 opcode) /* OR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readlong(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,4); dont_care_flags(); { or_l(dst,src); } writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_81a0_0_comp_nf(uae_u32 opcode) /* OR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-4); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); { or_l(dst,src); } writelong(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_81a8_0_comp_nf(uae_u32 opcode) /* OR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); { or_l(dst,src); } writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_81b0_0_comp_nf(uae_u32 opcode) /* OR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); { or_l(dst,src); } writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_81b8_0_comp_nf(uae_u32 opcode) /* OR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); { or_l(dst,src); } writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_81b9_0_comp_nf(uae_u32 opcode) /* OR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); { or_l(dst,src); } writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9000_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dstreg; dont_care_flags(); sub_b(dst,src); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9010_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); sub_b(dst,src); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9018_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); { int dst=dstreg; dont_care_flags(); sub_b(dst,src); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9020_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); sub_b(dst,src); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9028_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); sub_b(dst,src); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9030_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); sub_b(dst,src); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9038_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); sub_b(dst,src); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9039_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); sub_b(dst,src); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_903a_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); sub_b(dst,src); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_903b_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); sub_b(dst,src); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_903c_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dst=dstreg; dont_care_flags(); sub_b(dst,src); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9040_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dstreg; dont_care_flags(); sub_w(dst,src); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9048_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); { int dst=dstreg; dont_care_flags(); sub_w(dst,src); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9050_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); sub_w(dst,src); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9058_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,2); { int dst=dstreg; dont_care_flags(); sub_w(dst,src); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9060_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-2); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); sub_w(dst,src); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9068_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); sub_w(dst,src); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9070_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); sub_w(dst,src); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9078_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); sub_w(dst,src); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9079_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); sub_w(dst,src); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_907a_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); sub_w(dst,src); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_907b_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); sub_w(dst,src); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_907c_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=dstreg; dont_care_flags(); sub_w(dst,src); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9080_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dstreg; dont_care_flags(); sub_l(dst,src); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9088_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); { int dst=dstreg; dont_care_flags(); sub_l(dst,src); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9090_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); sub_l(dst,src); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9098_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,4); { int dst=dstreg; dont_care_flags(); sub_l(dst,src); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_90a0_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-4); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); sub_l(dst,src); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_90a8_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); sub_l(dst,src); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_90b0_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); sub_l(dst,src); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_90b8_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); sub_l(dst,src); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_90b9_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); sub_l(dst,src); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_90ba_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); sub_l(dst,src); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_90bb_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); sub_l(dst,src); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_90bc_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dst=dstreg; dont_care_flags(); sub_l(dst,src); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_90c0_0_comp_nf(uae_u32 opcode) /* SUBA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; sign_extend_16_rr(tmp,src); sub_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_90c8_0_comp_nf(uae_u32 opcode) /* SUBA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; sign_extend_16_rr(tmp,src); sub_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_90d0_0_comp_nf(uae_u32 opcode) /* SUBA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; sign_extend_16_rr(tmp,src); sub_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_90d8_0_comp_nf(uae_u32 opcode) /* SUBA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,2); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; sign_extend_16_rr(tmp,src); sub_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_90e0_0_comp_nf(uae_u32 opcode) /* SUBA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-2); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; sign_extend_16_rr(tmp,src); sub_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_90e8_0_comp_nf(uae_u32 opcode) /* SUBA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; sign_extend_16_rr(tmp,src); sub_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_90f0_0_comp_nf(uae_u32 opcode) /* SUBA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; sign_extend_16_rr(tmp,src); sub_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_90f8_0_comp_nf(uae_u32 opcode) /* SUBA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; sign_extend_16_rr(tmp,src); sub_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_90f9_0_comp_nf(uae_u32 opcode) /* SUBA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; sign_extend_16_rr(tmp,src); sub_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_90fa_0_comp_nf(uae_u32 opcode) /* SUBA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; sign_extend_16_rr(tmp,src); sub_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_90fb_0_comp_nf(uae_u32 opcode) /* SUBA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; sign_extend_16_rr(tmp,src); sub_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_90fc_0_comp_nf(uae_u32 opcode) /* SUBA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; sign_extend_16_rr(tmp,src); sub_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9100_0_comp_nf(uae_u32 opcode) /* SUBX */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dstreg; dont_care_flags(); restore_carry(); sbb_b(dst,src); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9108_0_comp_nf(uae_u32 opcode) /* SUBX */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readbyte(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,(uae_s32)-areg_byteinc[dstreg]); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); restore_carry(); sbb_b(dst,src); writebyte(dsta,dst,scratchie); }}}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9110_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); sub_b(dst,src); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9118_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,areg_byteinc[dstreg]); dont_care_flags(); sub_b(dst,src); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9120_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,(uae_s32)-areg_byteinc[dstreg]); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); sub_b(dst,src); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9128_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); sub_b(dst,src); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9130_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); sub_b(dst,src); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9138_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); sub_b(dst,src); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9139_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); sub_b(dst,src); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9140_0_comp_nf(uae_u32 opcode) /* SUBX */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dstreg; dont_care_flags(); restore_carry(); sbb_w(dst,src); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9148_0_comp_nf(uae_u32 opcode) /* SUBX */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-2); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readword(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-2); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); restore_carry(); sbb_w(dst,src); writeword(dsta,dst,scratchie); }}}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9150_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); sub_w(dst,src); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9158_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readword(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,2); dont_care_flags(); sub_w(dst,src); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9160_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-2); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); sub_w(dst,src); writeword(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9168_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); sub_w(dst,src); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9170_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); sub_w(dst,src); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9178_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); sub_w(dst,src); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9179_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); sub_w(dst,src); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9180_0_comp_nf(uae_u32 opcode) /* SUBX */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dstreg; dont_care_flags(); restore_carry(); sbb_l(dst,src); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9188_0_comp_nf(uae_u32 opcode) /* SUBX */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-4); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readlong(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-4); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); restore_carry(); sbb_l(dst,src); writelong(dsta,dst,scratchie); }}}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9190_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); sub_l(dst,src); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_9198_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readlong(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,4); dont_care_flags(); sub_l(dst,src); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_91a0_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-4); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); sub_l(dst,src); writelong(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_91a8_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); sub_l(dst,src); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_91b0_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); sub_l(dst,src); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_91b8_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); sub_l(dst,src); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_91b9_0_comp_nf(uae_u32 opcode) /* SUB */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); sub_l(dst,src); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_91c0_0_comp_nf(uae_u32 opcode) /* SUBA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; tmp=src; sub_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_91c8_0_comp_nf(uae_u32 opcode) /* SUBA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; tmp=src; sub_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_91d0_0_comp_nf(uae_u32 opcode) /* SUBA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; tmp=src; sub_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_91d8_0_comp_nf(uae_u32 opcode) /* SUBA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,4); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; tmp=src; sub_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_91e0_0_comp_nf(uae_u32 opcode) /* SUBA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-4); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; tmp=src; sub_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_91e8_0_comp_nf(uae_u32 opcode) /* SUBA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; tmp=src; sub_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_91f0_0_comp_nf(uae_u32 opcode) /* SUBA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; tmp=src; sub_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_91f8_0_comp_nf(uae_u32 opcode) /* SUBA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; tmp=src; sub_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_91f9_0_comp_nf(uae_u32 opcode) /* SUBA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; tmp=src; sub_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_91fa_0_comp_nf(uae_u32 opcode) /* SUBA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; tmp=src; sub_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_91fb_0_comp_nf(uae_u32 opcode) /* SUBA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; tmp=src; sub_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_91fc_0_comp_nf(uae_u32 opcode) /* SUBA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; tmp=src; sub_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b000_0_comp_nf(uae_u32 opcode) /* CMP */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dstreg; { dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b010_0_comp_nf(uae_u32 opcode) /* CMP */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; { dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b018_0_comp_nf(uae_u32 opcode) /* CMP */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); { int dst=dstreg; { dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b020_0_comp_nf(uae_u32 opcode) /* CMP */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; { dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b028_0_comp_nf(uae_u32 opcode) /* CMP */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; { dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b030_0_comp_nf(uae_u32 opcode) /* CMP */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; { dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b038_0_comp_nf(uae_u32 opcode) /* CMP */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; { dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b039_0_comp_nf(uae_u32 opcode) /* CMP */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; { dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b03a_0_comp_nf(uae_u32 opcode) /* CMP */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; { dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b03b_0_comp_nf(uae_u32 opcode) /* CMP */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; { dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b03c_0_comp_nf(uae_u32 opcode) /* CMP */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dst=dstreg; { dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b040_0_comp_nf(uae_u32 opcode) /* CMP */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dstreg; { dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b048_0_comp_nf(uae_u32 opcode) /* CMP */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); { int dst=dstreg; { dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b050_0_comp_nf(uae_u32 opcode) /* CMP */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; { dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b058_0_comp_nf(uae_u32 opcode) /* CMP */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,2); { int dst=dstreg; { dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b060_0_comp_nf(uae_u32 opcode) /* CMP */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-2); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; { dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b068_0_comp_nf(uae_u32 opcode) /* CMP */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; { dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b070_0_comp_nf(uae_u32 opcode) /* CMP */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; { dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b078_0_comp_nf(uae_u32 opcode) /* CMP */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; { dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b079_0_comp_nf(uae_u32 opcode) /* CMP */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; { dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b07a_0_comp_nf(uae_u32 opcode) /* CMP */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; { dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b07b_0_comp_nf(uae_u32 opcode) /* CMP */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; { dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } #endif #ifdef PART_7 uae_u32 REGPARAM2 op_b07c_0_comp_nf(uae_u32 opcode) /* CMP */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=dstreg; { dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b080_0_comp_nf(uae_u32 opcode) /* CMP */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dstreg; { dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b088_0_comp_nf(uae_u32 opcode) /* CMP */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); { int dst=dstreg; { dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b090_0_comp_nf(uae_u32 opcode) /* CMP */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; { dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b098_0_comp_nf(uae_u32 opcode) /* CMP */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,4); { int dst=dstreg; { dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b0a0_0_comp_nf(uae_u32 opcode) /* CMP */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-4); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; { dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b0a8_0_comp_nf(uae_u32 opcode) /* CMP */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; { dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b0b0_0_comp_nf(uae_u32 opcode) /* CMP */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; { dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b0b8_0_comp_nf(uae_u32 opcode) /* CMP */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; { dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b0b9_0_comp_nf(uae_u32 opcode) /* CMP */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; { dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b0ba_0_comp_nf(uae_u32 opcode) /* CMP */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; { dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b0bb_0_comp_nf(uae_u32 opcode) /* CMP */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; { dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b0bc_0_comp_nf(uae_u32 opcode) /* CMP */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dst=dstreg; { dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b0c0_0_comp_nf(uae_u32 opcode) /* CMPA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmps=scratchie++; sign_extend_16_rr(tmps,src); dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b0c8_0_comp_nf(uae_u32 opcode) /* CMPA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmps=scratchie++; sign_extend_16_rr(tmps,src); dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b0d0_0_comp_nf(uae_u32 opcode) /* CMPA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmps=scratchie++; sign_extend_16_rr(tmps,src); dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b0d8_0_comp_nf(uae_u32 opcode) /* CMPA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,2); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmps=scratchie++; sign_extend_16_rr(tmps,src); dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b0e0_0_comp_nf(uae_u32 opcode) /* CMPA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-2); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmps=scratchie++; sign_extend_16_rr(tmps,src); dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b0e8_0_comp_nf(uae_u32 opcode) /* CMPA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmps=scratchie++; sign_extend_16_rr(tmps,src); dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b0f0_0_comp_nf(uae_u32 opcode) /* CMPA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmps=scratchie++; sign_extend_16_rr(tmps,src); dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b0f8_0_comp_nf(uae_u32 opcode) /* CMPA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmps=scratchie++; sign_extend_16_rr(tmps,src); dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b0f9_0_comp_nf(uae_u32 opcode) /* CMPA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmps=scratchie++; sign_extend_16_rr(tmps,src); dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b0fa_0_comp_nf(uae_u32 opcode) /* CMPA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmps=scratchie++; sign_extend_16_rr(tmps,src); dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b0fb_0_comp_nf(uae_u32 opcode) /* CMPA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmps=scratchie++; sign_extend_16_rr(tmps,src); dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b0fc_0_comp_nf(uae_u32 opcode) /* CMPA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmps=scratchie++; sign_extend_16_rr(tmps,src); dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b100_0_comp_nf(uae_u32 opcode) /* EOR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dstreg; dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); xor_l(dst,scratchie); forget_about(scratchie); } else xor_b(dst,src); } if(dstreg!=dst) mov_b_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b108_0_comp_nf(uae_u32 opcode) /* CMPM */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,areg_byteinc[dstreg]); { dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b110_0_comp_nf(uae_u32 opcode) /* EOR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); xor_l(dst,scratchie); forget_about(scratchie); } else xor_b(dst,src); } writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b118_0_comp_nf(uae_u32 opcode) /* EOR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,areg_byteinc[dstreg]); dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); xor_l(dst,scratchie); forget_about(scratchie); } else xor_b(dst,src); } writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b120_0_comp_nf(uae_u32 opcode) /* EOR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,(uae_s32)-areg_byteinc[dstreg]); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); xor_l(dst,scratchie); forget_about(scratchie); } else xor_b(dst,src); } writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b128_0_comp_nf(uae_u32 opcode) /* EOR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); xor_l(dst,scratchie); forget_about(scratchie); } else xor_b(dst,src); } writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b130_0_comp_nf(uae_u32 opcode) /* EOR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); xor_l(dst,scratchie); forget_about(scratchie); } else xor_b(dst,src); } writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b138_0_comp_nf(uae_u32 opcode) /* EOR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); xor_l(dst,scratchie); forget_about(scratchie); } else xor_b(dst,src); } writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b139_0_comp_nf(uae_u32 opcode) /* EOR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); xor_l(dst,scratchie); forget_about(scratchie); } else xor_b(dst,src); } writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b140_0_comp_nf(uae_u32 opcode) /* EOR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dstreg; dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); xor_l(dst,scratchie); forget_about(scratchie); } else xor_w(dst,src); } if(dstreg!=dst) mov_w_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b148_0_comp_nf(uae_u32 opcode) /* CMPM */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,2); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readword(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,2); { dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b150_0_comp_nf(uae_u32 opcode) /* EOR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); xor_l(dst,scratchie); forget_about(scratchie); } else xor_w(dst,src); } writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b158_0_comp_nf(uae_u32 opcode) /* EOR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readword(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,2); dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); xor_l(dst,scratchie); forget_about(scratchie); } else xor_w(dst,src); } writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b160_0_comp_nf(uae_u32 opcode) /* EOR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-2); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); xor_l(dst,scratchie); forget_about(scratchie); } else xor_w(dst,src); } writeword(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b168_0_comp_nf(uae_u32 opcode) /* EOR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); xor_l(dst,scratchie); forget_about(scratchie); } else xor_w(dst,src); } writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b170_0_comp_nf(uae_u32 opcode) /* EOR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); xor_l(dst,scratchie); forget_about(scratchie); } else xor_w(dst,src); } writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b178_0_comp_nf(uae_u32 opcode) /* EOR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); xor_l(dst,scratchie); forget_about(scratchie); } else xor_w(dst,src); } writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b179_0_comp_nf(uae_u32 opcode) /* EOR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); {if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); xor_l(dst,scratchie); forget_about(scratchie); } else xor_w(dst,src); } writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b180_0_comp_nf(uae_u32 opcode) /* EOR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dstreg; dont_care_flags(); { xor_l(dst,src); } if(dstreg!=dst) mov_l_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b188_0_comp_nf(uae_u32 opcode) /* CMPM */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,4); { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readlong(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,4); { dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b190_0_comp_nf(uae_u32 opcode) /* EOR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); { xor_l(dst,src); } writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b198_0_comp_nf(uae_u32 opcode) /* EOR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readlong(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,4); dont_care_flags(); { xor_l(dst,src); } writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b1a0_0_comp_nf(uae_u32 opcode) /* EOR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-4); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); { xor_l(dst,src); } writelong(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b1a8_0_comp_nf(uae_u32 opcode) /* EOR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); { xor_l(dst,src); } writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b1b0_0_comp_nf(uae_u32 opcode) /* EOR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); { xor_l(dst,src); } writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b1b8_0_comp_nf(uae_u32 opcode) /* EOR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); { xor_l(dst,src); } writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b1b9_0_comp_nf(uae_u32 opcode) /* EOR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); { xor_l(dst,src); } writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b1c0_0_comp_nf(uae_u32 opcode) /* CMPA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmps=scratchie++; tmps=src; dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b1c8_0_comp_nf(uae_u32 opcode) /* CMPA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmps=scratchie++; tmps=src; dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b1d0_0_comp_nf(uae_u32 opcode) /* CMPA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmps=scratchie++; tmps=src; dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b1d8_0_comp_nf(uae_u32 opcode) /* CMPA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,4); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmps=scratchie++; tmps=src; dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b1e0_0_comp_nf(uae_u32 opcode) /* CMPA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-4); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmps=scratchie++; tmps=src; dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b1e8_0_comp_nf(uae_u32 opcode) /* CMPA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmps=scratchie++; tmps=src; dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b1f0_0_comp_nf(uae_u32 opcode) /* CMPA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmps=scratchie++; tmps=src; dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b1f8_0_comp_nf(uae_u32 opcode) /* CMPA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmps=scratchie++; tmps=src; dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b1f9_0_comp_nf(uae_u32 opcode) /* CMPA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmps=scratchie++; tmps=src; dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b1fa_0_comp_nf(uae_u32 opcode) /* CMPA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmps=scratchie++; tmps=src; dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b1fb_0_comp_nf(uae_u32 opcode) /* CMPA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmps=scratchie++; tmps=src; dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_b1fc_0_comp_nf(uae_u32 opcode) /* CMPA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmps=scratchie++; tmps=src; dont_care_flags(); /* Weird --- CMP with noflags ;-) */ }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c000_0_comp_nf(uae_u32 opcode) /* AND */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dstreg; dont_care_flags(); if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); or_l_ri(scratchie,0xffffff00); and_l(dst,scratchie); forget_about(scratchie); } else and_b(dst,src); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c010_0_comp_nf(uae_u32 opcode) /* AND */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); or_l_ri(scratchie,0xffffff00); and_l(dst,scratchie); forget_about(scratchie); } else and_b(dst,src); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c018_0_comp_nf(uae_u32 opcode) /* AND */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); { int dst=dstreg; dont_care_flags(); if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); or_l_ri(scratchie,0xffffff00); and_l(dst,scratchie); forget_about(scratchie); } else and_b(dst,src); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c020_0_comp_nf(uae_u32 opcode) /* AND */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); or_l_ri(scratchie,0xffffff00); and_l(dst,scratchie); forget_about(scratchie); } else and_b(dst,src); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c028_0_comp_nf(uae_u32 opcode) /* AND */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); or_l_ri(scratchie,0xffffff00); and_l(dst,scratchie); forget_about(scratchie); } else and_b(dst,src); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c030_0_comp_nf(uae_u32 opcode) /* AND */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); or_l_ri(scratchie,0xffffff00); and_l(dst,scratchie); forget_about(scratchie); } else and_b(dst,src); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c038_0_comp_nf(uae_u32 opcode) /* AND */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); or_l_ri(scratchie,0xffffff00); and_l(dst,scratchie); forget_about(scratchie); } else and_b(dst,src); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c039_0_comp_nf(uae_u32 opcode) /* AND */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); or_l_ri(scratchie,0xffffff00); and_l(dst,scratchie); forget_about(scratchie); } else and_b(dst,src); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c03a_0_comp_nf(uae_u32 opcode) /* AND */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); or_l_ri(scratchie,0xffffff00); and_l(dst,scratchie); forget_about(scratchie); } else and_b(dst,src); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c03b_0_comp_nf(uae_u32 opcode) /* AND */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); or_l_ri(scratchie,0xffffff00); and_l(dst,scratchie); forget_about(scratchie); } else and_b(dst,src); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c03c_0_comp_nf(uae_u32 opcode) /* AND */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dst=dstreg; dont_care_flags(); if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); or_l_ri(scratchie,0xffffff00); and_l(dst,scratchie); forget_about(scratchie); } else and_b(dst,src); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c040_0_comp_nf(uae_u32 opcode) /* AND */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dstreg; dont_care_flags(); if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); or_l_ri(scratchie,0xffff0000); and_l(dst,scratchie); forget_about(scratchie); } else and_w(dst,src); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c050_0_comp_nf(uae_u32 opcode) /* AND */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); or_l_ri(scratchie,0xffff0000); and_l(dst,scratchie); forget_about(scratchie); } else and_w(dst,src); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c058_0_comp_nf(uae_u32 opcode) /* AND */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,2); { int dst=dstreg; dont_care_flags(); if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); or_l_ri(scratchie,0xffff0000); and_l(dst,scratchie); forget_about(scratchie); } else and_w(dst,src); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c060_0_comp_nf(uae_u32 opcode) /* AND */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-2); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); or_l_ri(scratchie,0xffff0000); and_l(dst,scratchie); forget_about(scratchie); } else and_w(dst,src); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c068_0_comp_nf(uae_u32 opcode) /* AND */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); or_l_ri(scratchie,0xffff0000); and_l(dst,scratchie); forget_about(scratchie); } else and_w(dst,src); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c070_0_comp_nf(uae_u32 opcode) /* AND */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); or_l_ri(scratchie,0xffff0000); and_l(dst,scratchie); forget_about(scratchie); } else and_w(dst,src); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c078_0_comp_nf(uae_u32 opcode) /* AND */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); or_l_ri(scratchie,0xffff0000); and_l(dst,scratchie); forget_about(scratchie); } else and_w(dst,src); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c079_0_comp_nf(uae_u32 opcode) /* AND */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); or_l_ri(scratchie,0xffff0000); and_l(dst,scratchie); forget_about(scratchie); } else and_w(dst,src); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c07a_0_comp_nf(uae_u32 opcode) /* AND */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); or_l_ri(scratchie,0xffff0000); and_l(dst,scratchie); forget_about(scratchie); } else and_w(dst,src); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c07b_0_comp_nf(uae_u32 opcode) /* AND */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); or_l_ri(scratchie,0xffff0000); and_l(dst,scratchie); forget_about(scratchie); } else and_w(dst,src); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c07c_0_comp_nf(uae_u32 opcode) /* AND */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=dstreg; dont_care_flags(); if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); or_l_ri(scratchie,0xffff0000); and_l(dst,scratchie); forget_about(scratchie); } else and_w(dst,src); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c080_0_comp_nf(uae_u32 opcode) /* AND */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dstreg; dont_care_flags(); and_l(dst,src); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c090_0_comp_nf(uae_u32 opcode) /* AND */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); and_l(dst,src); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c098_0_comp_nf(uae_u32 opcode) /* AND */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,4); { int dst=dstreg; dont_care_flags(); and_l(dst,src); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c0a0_0_comp_nf(uae_u32 opcode) /* AND */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-4); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); and_l(dst,src); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c0a8_0_comp_nf(uae_u32 opcode) /* AND */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); and_l(dst,src); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c0b0_0_comp_nf(uae_u32 opcode) /* AND */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); and_l(dst,src); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c0b8_0_comp_nf(uae_u32 opcode) /* AND */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); and_l(dst,src); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c0b9_0_comp_nf(uae_u32 opcode) /* AND */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); and_l(dst,src); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c0ba_0_comp_nf(uae_u32 opcode) /* AND */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); and_l(dst,src); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c0bb_0_comp_nf(uae_u32 opcode) /* AND */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); and_l(dst,src); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c0bc_0_comp_nf(uae_u32 opcode) /* AND */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dst=dstreg; dont_care_flags(); and_l(dst,src); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c0c0_0_comp_nf(uae_u32 opcode) /* MULU */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int src=srcreg; { int dst=dstreg; zero_extend_16_rr(scratchie,src); zero_extend_16_rr(dst,dst); imul_32_32(dst,scratchie); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c0d0_0_comp_nf(uae_u32 opcode) /* MULU */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; zero_extend_16_rr(scratchie,src); zero_extend_16_rr(dst,dst); imul_32_32(dst,scratchie); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c0d8_0_comp_nf(uae_u32 opcode) /* MULU */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,2); { int dst=dstreg; zero_extend_16_rr(scratchie,src); zero_extend_16_rr(dst,dst); imul_32_32(dst,scratchie); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c0e0_0_comp_nf(uae_u32 opcode) /* MULU */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-2); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; zero_extend_16_rr(scratchie,src); zero_extend_16_rr(dst,dst); imul_32_32(dst,scratchie); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c0e8_0_comp_nf(uae_u32 opcode) /* MULU */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; zero_extend_16_rr(scratchie,src); zero_extend_16_rr(dst,dst); imul_32_32(dst,scratchie); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c0f0_0_comp_nf(uae_u32 opcode) /* MULU */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; zero_extend_16_rr(scratchie,src); zero_extend_16_rr(dst,dst); imul_32_32(dst,scratchie); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c0f8_0_comp_nf(uae_u32 opcode) /* MULU */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; zero_extend_16_rr(scratchie,src); zero_extend_16_rr(dst,dst); imul_32_32(dst,scratchie); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c0f9_0_comp_nf(uae_u32 opcode) /* MULU */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; zero_extend_16_rr(scratchie,src); zero_extend_16_rr(dst,dst); imul_32_32(dst,scratchie); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c0fa_0_comp_nf(uae_u32 opcode) /* MULU */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; zero_extend_16_rr(scratchie,src); zero_extend_16_rr(dst,dst); imul_32_32(dst,scratchie); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c0fb_0_comp_nf(uae_u32 opcode) /* MULU */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; zero_extend_16_rr(scratchie,src); zero_extend_16_rr(dst,dst); imul_32_32(dst,scratchie); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c0fc_0_comp_nf(uae_u32 opcode) /* MULU */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=dstreg; zero_extend_16_rr(scratchie,src); zero_extend_16_rr(dst,dst); imul_32_32(dst,scratchie); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c110_0_comp_nf(uae_u32 opcode) /* AND */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); or_l_ri(scratchie,0xffffff00); and_l(dst,scratchie); forget_about(scratchie); } else and_b(dst,src); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c118_0_comp_nf(uae_u32 opcode) /* AND */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,areg_byteinc[dstreg]); dont_care_flags(); if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); or_l_ri(scratchie,0xffffff00); and_l(dst,scratchie); forget_about(scratchie); } else and_b(dst,src); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c120_0_comp_nf(uae_u32 opcode) /* AND */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,(uae_s32)-areg_byteinc[dstreg]); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); or_l_ri(scratchie,0xffffff00); and_l(dst,scratchie); forget_about(scratchie); } else and_b(dst,src); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c128_0_comp_nf(uae_u32 opcode) /* AND */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); or_l_ri(scratchie,0xffffff00); and_l(dst,scratchie); forget_about(scratchie); } else and_b(dst,src); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c130_0_comp_nf(uae_u32 opcode) /* AND */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); or_l_ri(scratchie,0xffffff00); and_l(dst,scratchie); forget_about(scratchie); } else and_b(dst,src); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c138_0_comp_nf(uae_u32 opcode) /* AND */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); or_l_ri(scratchie,0xffffff00); and_l(dst,scratchie); forget_about(scratchie); } else and_b(dst,src); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c139_0_comp_nf(uae_u32 opcode) /* AND */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); if (kill_rodent(dst)) { zero_extend_8_rr(scratchie,src); or_l_ri(scratchie,0xffffff00); and_l(dst,scratchie); forget_about(scratchie); } else and_b(dst,src); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c140_0_comp_nf(uae_u32 opcode) /* EXG */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dstreg; { int tmp=scratchie++; mov_l_rr(tmp,src); if(srcreg!=dst) mov_l_rr(srcreg,dst); if(dstreg!=tmp) mov_l_rr(dstreg,tmp); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c148_0_comp_nf(uae_u32 opcode) /* EXG */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; mov_l_rr(tmp,src); if(srcreg+8!=dst) mov_l_rr(srcreg+8,dst); if(dstreg+8!=tmp) mov_l_rr(dstreg+8,tmp); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c150_0_comp_nf(uae_u32 opcode) /* AND */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); or_l_ri(scratchie,0xffff0000); and_l(dst,scratchie); forget_about(scratchie); } else and_w(dst,src); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c158_0_comp_nf(uae_u32 opcode) /* AND */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readword(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,2); dont_care_flags(); if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); or_l_ri(scratchie,0xffff0000); and_l(dst,scratchie); forget_about(scratchie); } else and_w(dst,src); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c160_0_comp_nf(uae_u32 opcode) /* AND */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-2); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); or_l_ri(scratchie,0xffff0000); and_l(dst,scratchie); forget_about(scratchie); } else and_w(dst,src); writeword(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c168_0_comp_nf(uae_u32 opcode) /* AND */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); or_l_ri(scratchie,0xffff0000); and_l(dst,scratchie); forget_about(scratchie); } else and_w(dst,src); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c170_0_comp_nf(uae_u32 opcode) /* AND */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); or_l_ri(scratchie,0xffff0000); and_l(dst,scratchie); forget_about(scratchie); } else and_w(dst,src); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c178_0_comp_nf(uae_u32 opcode) /* AND */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); or_l_ri(scratchie,0xffff0000); and_l(dst,scratchie); forget_about(scratchie); } else and_w(dst,src); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c179_0_comp_nf(uae_u32 opcode) /* AND */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); if (kill_rodent(dst)) { zero_extend_16_rr(scratchie,src); or_l_ri(scratchie,0xffff0000); and_l(dst,scratchie); forget_about(scratchie); } else and_w(dst,src); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c188_0_comp_nf(uae_u32 opcode) /* EXG */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; mov_l_rr(tmp,src); if(srcreg!=dst) mov_l_rr(srcreg,dst); if(dstreg+8!=tmp) mov_l_rr(dstreg+8,tmp); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c190_0_comp_nf(uae_u32 opcode) /* AND */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); and_l(dst,src); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c198_0_comp_nf(uae_u32 opcode) /* AND */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readlong(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,4); dont_care_flags(); and_l(dst,src); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c1a0_0_comp_nf(uae_u32 opcode) /* AND */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-4); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); and_l(dst,src); writelong(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c1a8_0_comp_nf(uae_u32 opcode) /* AND */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); and_l(dst,src); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c1b0_0_comp_nf(uae_u32 opcode) /* AND */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); and_l(dst,src); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c1b8_0_comp_nf(uae_u32 opcode) /* AND */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); and_l(dst,src); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c1b9_0_comp_nf(uae_u32 opcode) /* AND */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); and_l(dst,src); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c1c0_0_comp_nf(uae_u32 opcode) /* MULS */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int src=srcreg; { int dst=dstreg; sign_extend_16_rr(scratchie,src); sign_extend_16_rr(dst,dst); imul_32_32(dst,scratchie); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c1d0_0_comp_nf(uae_u32 opcode) /* MULS */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; sign_extend_16_rr(scratchie,src); sign_extend_16_rr(dst,dst); imul_32_32(dst,scratchie); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c1d8_0_comp_nf(uae_u32 opcode) /* MULS */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,2); { int dst=dstreg; sign_extend_16_rr(scratchie,src); sign_extend_16_rr(dst,dst); imul_32_32(dst,scratchie); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c1e0_0_comp_nf(uae_u32 opcode) /* MULS */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-2); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; sign_extend_16_rr(scratchie,src); sign_extend_16_rr(dst,dst); imul_32_32(dst,scratchie); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c1e8_0_comp_nf(uae_u32 opcode) /* MULS */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; sign_extend_16_rr(scratchie,src); sign_extend_16_rr(dst,dst); imul_32_32(dst,scratchie); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c1f0_0_comp_nf(uae_u32 opcode) /* MULS */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; sign_extend_16_rr(scratchie,src); sign_extend_16_rr(dst,dst); imul_32_32(dst,scratchie); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c1f8_0_comp_nf(uae_u32 opcode) /* MULS */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; sign_extend_16_rr(scratchie,src); sign_extend_16_rr(dst,dst); imul_32_32(dst,scratchie); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c1f9_0_comp_nf(uae_u32 opcode) /* MULS */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; sign_extend_16_rr(scratchie,src); sign_extend_16_rr(dst,dst); imul_32_32(dst,scratchie); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c1fa_0_comp_nf(uae_u32 opcode) /* MULS */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; sign_extend_16_rr(scratchie,src); sign_extend_16_rr(dst,dst); imul_32_32(dst,scratchie); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c1fb_0_comp_nf(uae_u32 opcode) /* MULS */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; sign_extend_16_rr(scratchie,src); sign_extend_16_rr(dst,dst); imul_32_32(dst,scratchie); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_c1fc_0_comp_nf(uae_u32 opcode) /* MULS */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=dstreg; sign_extend_16_rr(scratchie,src); sign_extend_16_rr(dst,dst); imul_32_32(dst,scratchie); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d000_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dstreg; dont_care_flags(); add_b(dst,src); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d010_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); add_b(dst,src); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d018_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readbyte(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,areg_byteinc[srcreg]); { int dst=dstreg; dont_care_flags(); add_b(dst,src); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d020_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); add_b(dst,src); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d028_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); add_b(dst,src); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d030_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); add_b(dst,src); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d038_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); add_b(dst,src); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d039_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); add_b(dst,src); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d03a_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); add_b(dst,src); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d03b_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readbyte(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); add_b(dst,src); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d03c_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s8)comp_get_ibyte((m68k_pc_offset+=2)-2)); { int dst=dstreg; dont_care_flags(); add_b(dst,src); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d040_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dstreg; dont_care_flags(); add_w(dst,src); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d048_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); { int dst=dstreg; dont_care_flags(); add_w(dst,src); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d050_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); add_w(dst,src); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d058_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,2); { int dst=dstreg; dont_care_flags(); add_w(dst,src); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d060_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-2); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); add_w(dst,src); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d068_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); add_w(dst,src); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d070_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); add_w(dst,src); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d078_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); add_w(dst,src); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d079_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); add_w(dst,src); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d07a_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); add_w(dst,src); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d07b_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); add_w(dst,src); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d07c_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=dstreg; dont_care_flags(); add_w(dst,src); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d080_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dstreg; dont_care_flags(); add_l(dst,src); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d088_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); { int dst=dstreg; dont_care_flags(); add_l(dst,src); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d090_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); add_l(dst,src); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d098_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,4); { int dst=dstreg; dont_care_flags(); add_l(dst,src); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d0a0_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-4); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); add_l(dst,src); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d0a8_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); add_l(dst,src); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d0b0_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); add_l(dst,src); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d0b8_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); add_l(dst,src); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d0b9_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); add_l(dst,src); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d0ba_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); add_l(dst,src); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d0bb_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dstreg; dont_care_flags(); add_l(dst,src); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d0bc_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dst=dstreg; dont_care_flags(); add_l(dst,src); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d0c0_0_comp_nf(uae_u32 opcode) /* ADDA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; sign_extend_16_rr(tmp,src); add_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d0c8_0_comp_nf(uae_u32 opcode) /* ADDA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; sign_extend_16_rr(tmp,src); add_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d0d0_0_comp_nf(uae_u32 opcode) /* ADDA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; sign_extend_16_rr(tmp,src); add_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d0d8_0_comp_nf(uae_u32 opcode) /* ADDA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readword(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,2); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; sign_extend_16_rr(tmp,src); add_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d0e0_0_comp_nf(uae_u32 opcode) /* ADDA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-2); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; sign_extend_16_rr(tmp,src); add_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d0e8_0_comp_nf(uae_u32 opcode) /* ADDA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; sign_extend_16_rr(tmp,src); add_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d0f0_0_comp_nf(uae_u32 opcode) /* ADDA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; sign_extend_16_rr(tmp,src); add_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d0f8_0_comp_nf(uae_u32 opcode) /* ADDA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; sign_extend_16_rr(tmp,src); add_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d0f9_0_comp_nf(uae_u32 opcode) /* ADDA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; sign_extend_16_rr(tmp,src); add_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d0fa_0_comp_nf(uae_u32 opcode) /* ADDA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; sign_extend_16_rr(tmp,src); add_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d0fb_0_comp_nf(uae_u32 opcode) /* ADDA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readword(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; sign_extend_16_rr(tmp,src); add_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d0fc_0_comp_nf(uae_u32 opcode) /* ADDA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; sign_extend_16_rr(tmp,src); add_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d100_0_comp_nf(uae_u32 opcode) /* ADDX */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dstreg; { dont_care_flags(); restore_carry(); adc_b(dst,src); if(dstreg!=dst) mov_b_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d108_0_comp_nf(uae_u32 opcode) /* ADDX */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,(uae_s32)-areg_byteinc[srcreg]); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readbyte(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,(uae_s32)-areg_byteinc[dstreg]); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readbyte(dsta,dst,scratchie); { dont_care_flags(); restore_carry(); adc_b(dst,src); writebyte(dsta,dst,scratchie); }}}}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d110_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); add_b(dst,src); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d118_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readbyte(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,areg_byteinc[dstreg]); dont_care_flags(); add_b(dst,src); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d120_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,(uae_s32)-areg_byteinc[dstreg]); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); add_b(dst,src); writebyte(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d128_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); add_b(dst,src); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d130_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); add_b(dst,src); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d138_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); add_b(dst,src); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d139_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readbyte(dsta,dst,scratchie); dont_care_flags(); add_b(dst,src); writebyte(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d140_0_comp_nf(uae_u32 opcode) /* ADDX */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dstreg; { dont_care_flags(); restore_carry(); adc_w(dst,src); if(dstreg!=dst) mov_w_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d148_0_comp_nf(uae_u32 opcode) /* ADDX */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-2); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readword(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-2); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readword(dsta,dst,scratchie); { dont_care_flags(); restore_carry(); adc_w(dst,src); writeword(dsta,dst,scratchie); }}}}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d150_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); add_w(dst,src); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d158_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readword(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,2); dont_care_flags(); add_w(dst,src); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d160_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-2); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); add_w(dst,src); writeword(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d168_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); add_w(dst,src); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d170_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); add_w(dst,src); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d178_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); add_w(dst,src); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d179_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readword(dsta,dst,scratchie); dont_care_flags(); add_w(dst,src); writeword(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d180_0_comp_nf(uae_u32 opcode) /* ADDX */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dstreg; { dont_care_flags(); restore_carry(); adc_l(dst,src); if(dstreg!=dst) mov_l_rr(dstreg,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d188_0_comp_nf(uae_u32 opcode) /* ADDX */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-4); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readlong(srca,src,scratchie); {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-4); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readlong(dsta,dst,scratchie); { dont_care_flags(); restore_carry(); adc_l(dst,src); writelong(dsta,dst,scratchie); }}}}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d190_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); add_l(dst,src); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d198_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); { int dst=scratchie++; readlong(dsta,dst,scratchie); lea_l_brr(dstreg+8,dstreg+8,4); dont_care_flags(); add_l(dst,src); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d1a0_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; {{ int dsta=dodgy?scratchie++:dstreg+8; lea_l_brr(dstreg+8,dstreg+8,-4); if (dodgy) mov_l_rr(dsta,8+dstreg); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); add_l(dst,src); writelong(dsta,dst,scratchie); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d1a8_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; mov_l_rr(dsta,8+dstreg); lea_l_brr(dsta,dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); add_l(dst,src); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d1b0_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta=scratchie++; calc_disp_ea_020(dstreg+8,comp_get_iword((m68k_pc_offset+=2)-2),dsta,scratchie); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); add_l(dst,src); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d1b8_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); add_l(dst,src); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d1b9_0_comp_nf(uae_u32 opcode) /* ADD */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dst=scratchie++; readlong(dsta,dst,scratchie); dont_care_flags(); add_l(dst,src); writelong(dsta,dst,scratchie); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d1c0_0_comp_nf(uae_u32 opcode) /* ADDA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=srcreg; { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; tmp=src; add_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d1c8_0_comp_nf(uae_u32 opcode) /* ADDA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(src,srcreg+8); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; tmp=src; add_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d1d0_0_comp_nf(uae_u32 opcode) /* ADDA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; tmp=src; add_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d1d8_0_comp_nf(uae_u32 opcode) /* ADDA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int src=scratchie++; readlong(srca,src,scratchie); lea_l_brr(srcreg+8,srcreg+8,4); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; tmp=src; add_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d1e0_0_comp_nf(uae_u32 opcode) /* ADDA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; {{ int srca=dodgy?scratchie++:srcreg+8; lea_l_brr(srcreg+8,srcreg+8,-4); if (dodgy) mov_l_rr(srca,8+srcreg); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; tmp=src; add_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d1e8_0_comp_nf(uae_u32 opcode) /* ADDA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; mov_l_rr(srca,8+srcreg); lea_l_brr(srca,srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; tmp=src; add_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d1f0_0_comp_nf(uae_u32 opcode) /* ADDA */ { uae_s32 srcreg = (opcode & 7); uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; calc_disp_ea_020(srcreg+8,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; tmp=src; add_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d1f8_0_comp_nf(uae_u32 opcode) /* ADDA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,(uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2)); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; tmp=src; add_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d1f9_0_comp_nf(uae_u32 opcode) /* ADDA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; tmp=src; add_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d1fa_0_comp_nf(uae_u32 opcode) /* ADDA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; uae_s32 PC16off = (uae_s32)(uae_s16)comp_get_iword((m68k_pc_offset+=2)-2); mov_l_ri(srca,address+PC16off); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; tmp=src; add_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d1fb_0_comp_nf(uae_u32 opcode) /* ADDA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int pctmp=scratchie++; int srca=scratchie++; uae_u32 address=start_pc+((char *)comp_pc_p-(char *)start_pc_p)+m68k_pc_offset; { mov_l_ri(pctmp,address); calc_disp_ea_020(pctmp,comp_get_iword((m68k_pc_offset+=2)-2),srca,scratchie); { int src=scratchie++; readlong(srca,src,scratchie); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; tmp=src; add_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_d1fc_0_comp_nf(uae_u32 opcode) /* ADDA */ { uae_u32 dstreg = (opcode >> 9) & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; { int src = scratchie++; mov_l_ri(src,comp_get_ilong((m68k_pc_offset+=4)-4)); { int dst=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dst,dstreg+8); { int tmp=scratchie++; tmp=src; add_l(dst,tmp); if(dstreg+8!=dst) mov_l_rr(dstreg+8,dst); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_e000_0_comp_nf(uae_u32 opcode) /* ASR */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int cnt = scratchie++; mov_l_ri(cnt,srcreg); { int data=dstreg; { int tmp=scratchie++; int bp; mov_l_rr(tmp,data); shra_b_ri(data,srcreg); bp=srcreg-1; if(dstreg!=data) mov_b_rr(dstreg,data); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_e008_0_comp_nf(uae_u32 opcode) /* LSR */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int cnt = scratchie++; mov_l_ri(cnt,srcreg); { int data=dstreg; { int tmp=scratchie++; int bp; mov_l_rr(tmp,data); shrl_b_ri(data,srcreg); bp=srcreg-1; if(dstreg!=data) mov_b_rr(dstreg,data); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_e018_0_comp_nf(uae_u32 opcode) /* ROR */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int cnt = scratchie++; mov_l_ri(cnt,srcreg); { int data=dstreg; { ror_b_rr(data,cnt); if(dstreg!=data) mov_b_rr(dstreg,data); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } #endif #ifdef PART_8 uae_u32 REGPARAM2 op_e020_0_comp_nf(uae_u32 opcode) /* ASR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; if ((uae_u32)srcreg==(uae_u32)dstreg) { FAIL(1); return 0; } { dont_care_flags(); { int cnt=srcreg; { int data=dstreg; { int highmask; int width; int highshift=scratchie++; shra_b_rr(data,cnt); highmask=0x38; width=8; test_l_ri(cnt,highmask); mov_l_ri(highshift,0); mov_l_ri(scratchie,width/2); cmov_l_rr(highshift,scratchie,5); shra_b_rr(data,highshift); shra_b_rr(data,highshift); if(dstreg!=data) mov_b_rr(dstreg,data); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_e028_0_comp_nf(uae_u32 opcode) /* LSR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; if ((uae_u32)srcreg==(uae_u32)dstreg) { FAIL(1); return 0; } { dont_care_flags(); { int cnt=srcreg; { int data=dstreg; { int highmask; shrl_b_rr(data,cnt); highmask=0x38; test_l_ri(cnt,highmask); mov_l_ri(scratchie,0); cmov_l_rr(scratchie,data,4); mov_b_rr(data,scratchie); if(dstreg!=data) mov_b_rr(dstreg,data); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_e038_0_comp_nf(uae_u32 opcode) /* ROR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; if ((uae_u32)srcreg==(uae_u32)dstreg) { FAIL(1); return 0; } { dont_care_flags(); { int cnt=srcreg; { int data=dstreg; { ror_b_rr(data,cnt); if(dstreg!=data) mov_b_rr(dstreg,data); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_e040_0_comp_nf(uae_u32 opcode) /* ASR */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int cnt = scratchie++; mov_l_ri(cnt,srcreg); { int data=dstreg; { int tmp=scratchie++; int bp; mov_l_rr(tmp,data); shra_w_ri(data,srcreg); bp=srcreg-1; if(dstreg!=data) mov_w_rr(dstreg,data); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_e048_0_comp_nf(uae_u32 opcode) /* LSR */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int cnt = scratchie++; mov_l_ri(cnt,srcreg); { int data=dstreg; { int tmp=scratchie++; int bp; mov_l_rr(tmp,data); shrl_w_ri(data,srcreg); bp=srcreg-1; if(dstreg!=data) mov_w_rr(dstreg,data); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_e058_0_comp_nf(uae_u32 opcode) /* ROR */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int cnt = scratchie++; mov_l_ri(cnt,srcreg); { int data=dstreg; { ror_w_rr(data,cnt); if(dstreg!=data) mov_w_rr(dstreg,data); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_e060_0_comp_nf(uae_u32 opcode) /* ASR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; if ((uae_u32)srcreg==(uae_u32)dstreg) { FAIL(1); return 0; } { dont_care_flags(); { int cnt=srcreg; { int data=dstreg; { int highmask; int width; int highshift=scratchie++; shra_w_rr(data,cnt); highmask=0x30; width=16; test_l_ri(cnt,highmask); mov_l_ri(highshift,0); mov_l_ri(scratchie,width/2); cmov_l_rr(highshift,scratchie,5); shra_w_rr(data,highshift); shra_w_rr(data,highshift); if(dstreg!=data) mov_w_rr(dstreg,data); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_e068_0_comp_nf(uae_u32 opcode) /* LSR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; if ((uae_u32)srcreg==(uae_u32)dstreg) { FAIL(1); return 0; } { dont_care_flags(); { int cnt=srcreg; { int data=dstreg; { int highmask; shrl_w_rr(data,cnt); highmask=0x30; test_l_ri(cnt,highmask); mov_l_ri(scratchie,0); cmov_l_rr(scratchie,data,4); mov_w_rr(data,scratchie); if(dstreg!=data) mov_w_rr(dstreg,data); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_e078_0_comp_nf(uae_u32 opcode) /* ROR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; if ((uae_u32)srcreg==(uae_u32)dstreg) { FAIL(1); return 0; } { dont_care_flags(); { int cnt=srcreg; { int data=dstreg; { ror_w_rr(data,cnt); if(dstreg!=data) mov_w_rr(dstreg,data); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_e080_0_comp_nf(uae_u32 opcode) /* ASR */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int cnt = scratchie++; mov_l_ri(cnt,srcreg); { int data=dstreg; { int tmp=scratchie++; int bp; mov_l_rr(tmp,data); shra_l_ri(data,srcreg); bp=srcreg-1; if(dstreg!=data) mov_l_rr(dstreg,data); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_e088_0_comp_nf(uae_u32 opcode) /* LSR */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int cnt = scratchie++; mov_l_ri(cnt,srcreg); { int data=dstreg; { int tmp=scratchie++; int bp; mov_l_rr(tmp,data); shrl_l_ri(data,srcreg); bp=srcreg-1; if(dstreg!=data) mov_l_rr(dstreg,data); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_e098_0_comp_nf(uae_u32 opcode) /* ROR */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int cnt = scratchie++; mov_l_ri(cnt,srcreg); { int data=dstreg; { ror_l_rr(data,cnt); if(dstreg!=data) mov_l_rr(dstreg,data); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_e0a0_0_comp_nf(uae_u32 opcode) /* ASR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; if ((uae_u32)srcreg==(uae_u32)dstreg) { FAIL(1); return 0; } { dont_care_flags(); { int cnt=srcreg; { int data=dstreg; { int highmask; int width; int highshift=scratchie++; shra_l_rr(data,cnt); highmask=0x20; width=32; test_l_ri(cnt,highmask); mov_l_ri(highshift,0); mov_l_ri(scratchie,width/2); cmov_l_rr(highshift,scratchie,5); shra_l_rr(data,highshift); shra_l_rr(data,highshift); if(dstreg!=data) mov_l_rr(dstreg,data); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_e0a8_0_comp_nf(uae_u32 opcode) /* LSR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; if ((uae_u32)srcreg==(uae_u32)dstreg) { FAIL(1); return 0; } { dont_care_flags(); { int cnt=srcreg; { int data=dstreg; { int highmask; shrl_l_rr(data,cnt); highmask=0x20; test_l_ri(cnt,highmask); mov_l_ri(scratchie,0); cmov_l_rr(scratchie,data,4); mov_l_rr(data,scratchie); if(dstreg!=data) mov_l_rr(dstreg,data); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_e0b8_0_comp_nf(uae_u32 opcode) /* ROR */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; if ((uae_u32)srcreg==(uae_u32)dstreg) { FAIL(1); return 0; } { dont_care_flags(); { int cnt=srcreg; { int data=dstreg; { ror_l_rr(data,cnt); if(dstreg!=data) mov_l_rr(dstreg,data); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_e100_0_comp_nf(uae_u32 opcode) /* ASL */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); if (needed_flags & FLAG_V) { FAIL(1); return 0; } { int cnt = scratchie++; mov_l_ri(cnt,srcreg); { int data=dstreg; { int tmp=scratchie++; int bp; mov_l_rr(tmp,data); shll_b_ri(data,srcreg); bp=8-srcreg; if(dstreg!=data) mov_b_rr(dstreg,data); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_e108_0_comp_nf(uae_u32 opcode) /* LSL */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int cnt = scratchie++; mov_l_ri(cnt,srcreg); { int data=dstreg; { int tmp=scratchie++; int bp; mov_l_rr(tmp,data); shll_b_ri(data,srcreg); bp=8-srcreg; if(dstreg!=data) mov_b_rr(dstreg,data); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_e118_0_comp_nf(uae_u32 opcode) /* ROL */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int cnt = scratchie++; mov_l_ri(cnt,srcreg); { int data=dstreg; { rol_b_rr(data,cnt); if(dstreg!=data) mov_b_rr(dstreg,data); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_e120_0_comp_nf(uae_u32 opcode) /* ASL */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; if ((uae_u32)srcreg==(uae_u32)dstreg) { FAIL(1); return 0; } { dont_care_flags(); if (needed_flags & FLAG_V) { FAIL(1); return 0; } { int cnt=srcreg; { int data=dstreg; { int highmask; shll_b_rr(data,cnt); highmask=0x38; test_l_ri(cnt,highmask); mov_l_ri(scratchie,0); cmov_l_rr(scratchie,data,4); mov_b_rr(data,scratchie); if(dstreg!=data) mov_b_rr(dstreg,data); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_e128_0_comp_nf(uae_u32 opcode) /* LSL */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int cnt=srcreg; { int data=dstreg; { int highmask; shll_b_rr(data,cnt); highmask=0x38; test_l_ri(cnt,highmask); mov_l_ri(scratchie,0); cmov_l_rr(scratchie,data,4); mov_b_rr(data,scratchie); if(dstreg!=data) mov_b_rr(dstreg,data); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_e138_0_comp_nf(uae_u32 opcode) /* ROL */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; if ((uae_u32)srcreg==(uae_u32)dstreg) { FAIL(1); return 0; } { dont_care_flags(); { int cnt=srcreg; { int data=dstreg; { rol_b_rr(data,cnt); if(dstreg!=data) mov_b_rr(dstreg,data); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_e140_0_comp_nf(uae_u32 opcode) /* ASL */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); if (needed_flags & FLAG_V) { FAIL(1); return 0; } { int cnt = scratchie++; mov_l_ri(cnt,srcreg); { int data=dstreg; { int tmp=scratchie++; int bp; mov_l_rr(tmp,data); shll_w_ri(data,srcreg); bp=16-srcreg; if(dstreg!=data) mov_w_rr(dstreg,data); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_e148_0_comp_nf(uae_u32 opcode) /* LSL */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int cnt = scratchie++; mov_l_ri(cnt,srcreg); { int data=dstreg; { int tmp=scratchie++; int bp; mov_l_rr(tmp,data); shll_w_ri(data,srcreg); bp=16-srcreg; if(dstreg!=data) mov_w_rr(dstreg,data); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_e158_0_comp_nf(uae_u32 opcode) /* ROL */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int cnt = scratchie++; mov_l_ri(cnt,srcreg); { int data=dstreg; { rol_w_rr(data,cnt); if(dstreg!=data) mov_w_rr(dstreg,data); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_e160_0_comp_nf(uae_u32 opcode) /* ASL */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; if ((uae_u32)srcreg==(uae_u32)dstreg) { FAIL(1); return 0; } { dont_care_flags(); if (needed_flags & FLAG_V) { FAIL(1); return 0; } { int cnt=srcreg; { int data=dstreg; { int highmask; shll_w_rr(data,cnt); highmask=0x30; test_l_ri(cnt,highmask); mov_l_ri(scratchie,0); cmov_l_rr(scratchie,data,4); mov_w_rr(data,scratchie); if(dstreg!=data) mov_w_rr(dstreg,data); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_e168_0_comp_nf(uae_u32 opcode) /* LSL */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int cnt=srcreg; { int data=dstreg; { int highmask; shll_w_rr(data,cnt); highmask=0x30; test_l_ri(cnt,highmask); mov_l_ri(scratchie,0); cmov_l_rr(scratchie,data,4); mov_w_rr(data,scratchie); if(dstreg!=data) mov_w_rr(dstreg,data); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_e178_0_comp_nf(uae_u32 opcode) /* ROL */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; if ((uae_u32)srcreg==(uae_u32)dstreg) { FAIL(1); return 0; } { dont_care_flags(); { int cnt=srcreg; { int data=dstreg; { rol_w_rr(data,cnt); if(dstreg!=data) mov_w_rr(dstreg,data); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_e180_0_comp_nf(uae_u32 opcode) /* ASL */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); if (needed_flags & FLAG_V) { FAIL(1); return 0; } { int cnt = scratchie++; mov_l_ri(cnt,srcreg); { int data=dstreg; { int tmp=scratchie++; int bp; mov_l_rr(tmp,data); shll_l_ri(data,srcreg); bp=32-srcreg; if(dstreg!=data) mov_l_rr(dstreg,data); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_e188_0_comp_nf(uae_u32 opcode) /* LSL */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int cnt = scratchie++; mov_l_ri(cnt,srcreg); { int data=dstreg; { int tmp=scratchie++; int bp; mov_l_rr(tmp,data); shll_l_ri(data,srcreg); bp=32-srcreg; if(dstreg!=data) mov_l_rr(dstreg,data); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_e198_0_comp_nf(uae_u32 opcode) /* ROL */ { uae_s32 srcreg = imm8_table[((opcode >> 9) & 7)]; uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int cnt = scratchie++; mov_l_ri(cnt,srcreg); { int data=dstreg; { rol_l_rr(data,cnt); if(dstreg!=data) mov_l_rr(dstreg,data); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_e1a0_0_comp_nf(uae_u32 opcode) /* ASL */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; if ((uae_u32)srcreg==(uae_u32)dstreg) { FAIL(1); return 0; } { dont_care_flags(); if (needed_flags & FLAG_V) { FAIL(1); return 0; } { int cnt=srcreg; { int data=dstreg; { int highmask; shll_l_rr(data,cnt); highmask=0x20; test_l_ri(cnt,highmask); mov_l_ri(scratchie,0); cmov_l_rr(scratchie,data,4); mov_l_rr(data,scratchie); if(dstreg!=data) mov_l_rr(dstreg,data); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_e1a8_0_comp_nf(uae_u32 opcode) /* LSL */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; dont_care_flags(); { int cnt=srcreg; { int data=dstreg; { int highmask; shll_l_rr(data,cnt); highmask=0x20; test_l_ri(cnt,highmask); mov_l_ri(scratchie,0); cmov_l_rr(scratchie,data,4); mov_l_rr(data,scratchie); if(dstreg!=data) mov_l_rr(dstreg,data); }}}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_e1b8_0_comp_nf(uae_u32 opcode) /* ROL */ { uae_s32 srcreg = ((opcode >> 9) & 7); uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; if ((uae_u32)srcreg==(uae_u32)dstreg) { FAIL(1); return 0; } { dont_care_flags(); { int cnt=srcreg; { int data=dstreg; { rol_l_rr(data,cnt); if(dstreg!=data) mov_l_rr(dstreg,data); }}}}} if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_f200_0_comp_nf(uae_u32 opcode) /* FPP */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); comp_fpp_opp(opcode,extra); } if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_f208_0_comp_nf(uae_u32 opcode) /* FPP */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); comp_fpp_opp(opcode,extra); } if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_f210_0_comp_nf(uae_u32 opcode) /* FPP */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); comp_fpp_opp(opcode,extra); } if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_f218_0_comp_nf(uae_u32 opcode) /* FPP */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); comp_fpp_opp(opcode,extra); } if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_f220_0_comp_nf(uae_u32 opcode) /* FPP */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); comp_fpp_opp(opcode,extra); } if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_f228_0_comp_nf(uae_u32 opcode) /* FPP */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); comp_fpp_opp(opcode,extra); } if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_f230_0_comp_nf(uae_u32 opcode) /* FPP */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); comp_fpp_opp(opcode,extra); } if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_f238_0_comp_nf(uae_u32 opcode) /* FPP */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); comp_fpp_opp(opcode,extra); } if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_f239_0_comp_nf(uae_u32 opcode) /* FPP */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); comp_fpp_opp(opcode,extra); } if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_f23a_0_comp_nf(uae_u32 opcode) /* FPP */ { uae_s32 dstreg = 2; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); comp_fpp_opp(opcode,extra); } if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_f23b_0_comp_nf(uae_u32 opcode) /* FPP */ { uae_s32 dstreg = 3; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); comp_fpp_opp(opcode,extra); } if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_f23c_0_comp_nf(uae_u32 opcode) /* FPP */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); comp_fpp_opp(opcode,extra); } if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_f240_0_comp_nf(uae_u32 opcode) /* FScc */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); comp_fscc_opp(opcode,extra); } if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_f250_0_comp_nf(uae_u32 opcode) /* FScc */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); comp_fscc_opp(opcode,extra); } if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_f258_0_comp_nf(uae_u32 opcode) /* FScc */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); comp_fscc_opp(opcode,extra); } if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_f260_0_comp_nf(uae_u32 opcode) /* FScc */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); comp_fscc_opp(opcode,extra); } if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_f268_0_comp_nf(uae_u32 opcode) /* FScc */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); comp_fscc_opp(opcode,extra); } if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_f270_0_comp_nf(uae_u32 opcode) /* FScc */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); comp_fscc_opp(opcode,extra); } if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_f278_0_comp_nf(uae_u32 opcode) /* FScc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); comp_fscc_opp(opcode,extra); } if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_f279_0_comp_nf(uae_u32 opcode) /* FScc */ { uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; uae_u16 extra=comp_get_iword((m68k_pc_offset+=2)-2); comp_fscc_opp(opcode,extra); } if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_f280_0_comp_nf(uae_u32 opcode) /* FBcc */ { uae_s32 srcreg = (opcode & 63); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; comp_fbcc_opp(opcode); } if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_f2c0_0_comp_nf(uae_u32 opcode) /* FBcc */ { uae_s32 srcreg = (opcode & 63); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; comp_fbcc_opp(opcode); } if (m68k_pc_offset>100) sync_m68k_pc(); if (failure) m68k_pc_offset=m68k_pc_offset_thisinst; return 0; } uae_u32 REGPARAM2 op_f600_0_comp_nf(uae_u32 opcode) /* MOVE16 */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; int src=scratchie++; int dst=scratchie++; { int srca=scratchie++; mov_l_rr(srca,srcreg+8); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ mov_l_rr(src,srca); mov_l_rr(dst,dsta); and_l_ri(src,~15); and_l_ri(dst,~15); add_l_ri(srcreg+8,16); if (special_mem) { int tmp=scratchie; scratchie+=4; readlong(src,tmp,scratchie); writelong_clobber(dst,tmp,scratchie); add_l_ri(src,4); add_l_ri(dst,4); readlong(src,tmp,scratchie); writelong_clobber(dst,tmp,scratchie); add_l_ri(src,4); add_l_ri(dst,4); readlong(src,tmp,scratchie); writelong_clobber(dst,tmp,scratchie); add_l_ri(src,4); add_l_ri(dst,4); readlong(src,tmp,scratchie); writelong_clobber(dst,tmp,scratchie); } else { int tmp=scratchie; scratchie+=4; get_n_addr(src,src,scratchie); get_n_addr(dst,dst,scratchie); mov_l_rR(tmp+0,src,0); mov_l_rR(tmp+1,src,4); mov_l_rR(tmp+2,src,8); mov_l_rR(tmp+3,src,12); mov_l_Rr(dst,tmp+0,0); forget_about(tmp+0); mov_l_Rr(dst,tmp+1,4); forget_about(tmp+1); mov_l_Rr(dst,tmp+2,8); forget_about(tmp+2); mov_l_Rr(dst,tmp+3,12); } }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_f608_0_comp_nf(uae_u32 opcode) /* MOVE16 */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; int src=scratchie++; int dst=scratchie++; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dsta=scratchie++; mov_l_rr(dsta,dstreg+8); mov_l_rr(src,srca); mov_l_rr(dst,dsta); and_l_ri(src,~15); and_l_ri(dst,~15); add_l_ri(dstreg+8,16); if (special_mem) { int tmp=scratchie; scratchie+=4; readlong(src,tmp,scratchie); writelong_clobber(dst,tmp,scratchie); add_l_ri(src,4); add_l_ri(dst,4); readlong(src,tmp,scratchie); writelong_clobber(dst,tmp,scratchie); add_l_ri(src,4); add_l_ri(dst,4); readlong(src,tmp,scratchie); writelong_clobber(dst,tmp,scratchie); add_l_ri(src,4); add_l_ri(dst,4); readlong(src,tmp,scratchie); writelong_clobber(dst,tmp,scratchie); } else { int tmp=scratchie; scratchie+=4; get_n_addr(src,src,scratchie); get_n_addr(dst,dst,scratchie); mov_l_rR(tmp+0,src,0); mov_l_rR(tmp+1,src,4); mov_l_rR(tmp+2,src,8); mov_l_rR(tmp+3,src,12); mov_l_Rr(dst,tmp+0,0); forget_about(tmp+0); mov_l_Rr(dst,tmp+1,4); forget_about(tmp+1); mov_l_Rr(dst,tmp+2,8); forget_about(tmp+2); mov_l_Rr(dst,tmp+3,12); } }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_f610_0_comp_nf(uae_u32 opcode) /* MOVE16 */ { uae_s32 srcreg = (opcode & 7); uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; int src=scratchie++; int dst=scratchie++; { int srca=dodgy?scratchie++:srcreg+8; if (dodgy) mov_l_rr(srca,srcreg+8); { int dsta = scratchie++; mov_l_ri(dsta,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ mov_l_rr(src,srca); mov_l_rr(dst,dsta); and_l_ri(src,~15); and_l_ri(dst,~15); if (special_mem) { int tmp=scratchie; scratchie+=4; readlong(src,tmp,scratchie); writelong_clobber(dst,tmp,scratchie); add_l_ri(src,4); add_l_ri(dst,4); readlong(src,tmp,scratchie); writelong_clobber(dst,tmp,scratchie); add_l_ri(src,4); add_l_ri(dst,4); readlong(src,tmp,scratchie); writelong_clobber(dst,tmp,scratchie); add_l_ri(src,4); add_l_ri(dst,4); readlong(src,tmp,scratchie); writelong_clobber(dst,tmp,scratchie); } else { int tmp=scratchie; scratchie+=4; get_n_addr(src,src,scratchie); get_n_addr(dst,dst,scratchie); mov_l_rR(tmp+0,src,0); mov_l_rR(tmp+1,src,4); mov_l_rR(tmp+2,src,8); mov_l_rR(tmp+3,src,12); mov_l_Rr(dst,tmp+0,0); forget_about(tmp+0); mov_l_Rr(dst,tmp+1,4); forget_about(tmp+1); mov_l_Rr(dst,tmp+2,8); forget_about(tmp+2); mov_l_Rr(dst,tmp+3,12); } }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_f618_0_comp_nf(uae_u32 opcode) /* MOVE16 */ { uae_u32 dstreg = opcode & 7; uae_u32 dodgy=0; uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; int src=scratchie++; int dst=scratchie++; { int srca = scratchie++; mov_l_ri(srca,comp_get_ilong((m68k_pc_offset+=4)-4)); /* absl */ { int dsta=dodgy?scratchie++:dstreg+8; if (dodgy) mov_l_rr(dsta,dstreg+8); mov_l_rr(src,srca); mov_l_rr(dst,dsta); and_l_ri(src,~15); and_l_ri(dst,~15); if (special_mem) { int tmp=scratchie; scratchie+=4; readlong(src,tmp,scratchie); writelong_clobber(dst,tmp,scratchie); add_l_ri(src,4); add_l_ri(dst,4); readlong(src,tmp,scratchie); writelong_clobber(dst,tmp,scratchie); add_l_ri(src,4); add_l_ri(dst,4); readlong(src,tmp,scratchie); writelong_clobber(dst,tmp,scratchie); add_l_ri(src,4); add_l_ri(dst,4); readlong(src,tmp,scratchie); writelong_clobber(dst,tmp,scratchie); } else { int tmp=scratchie; scratchie+=4; get_n_addr(src,src,scratchie); get_n_addr(dst,dst,scratchie); mov_l_rR(tmp+0,src,0); mov_l_rR(tmp+1,src,4); mov_l_rR(tmp+2,src,8); mov_l_rR(tmp+3,src,12); mov_l_Rr(dst,tmp+0,0); forget_about(tmp+0); mov_l_Rr(dst,tmp+1,4); forget_about(tmp+1); mov_l_Rr(dst,tmp+2,8); forget_about(tmp+2); mov_l_Rr(dst,tmp+3,12); } }}} if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } uae_u32 REGPARAM2 op_f620_0_comp_nf(uae_u32 opcode) /* MOVE16 */ { uae_s32 srcreg = (opcode & 7); uae_s32 dstreg = 0; uae_u32 dodgy=(srcreg==(uae_s32)dstreg); uae_u32 m68k_pc_offset_thisinst=m68k_pc_offset; m68k_pc_offset+=2; { uae_u8 scratchie=S1; int src=scratchie++; int dst=scratchie++; uae_u16 dstreg=((comp_get_iword((m68k_pc_offset+=2)-2))>>12)&0x07; mov_l_rr(src,8+srcreg); mov_l_rr(dst,8+dstreg); and_l_ri(src,~15); and_l_ri(dst,~15); if (srcreg != dstreg) add_l_ri(srcreg+8,16); add_l_ri(dstreg+8,16); if (special_mem) { int tmp=scratchie; scratchie+=4; readlong(src,tmp,scratchie); writelong_clobber(dst,tmp,scratchie); add_l_ri(src,4); add_l_ri(dst,4); readlong(src,tmp,scratchie); writelong_clobber(dst,tmp,scratchie); add_l_ri(src,4); add_l_ri(dst,4); readlong(src,tmp,scratchie); writelong_clobber(dst,tmp,scratchie); add_l_ri(src,4); add_l_ri(dst,4); readlong(src,tmp,scratchie); writelong_clobber(dst,tmp,scratchie); } else { int tmp=scratchie; scratchie+=4; get_n_addr(src,src,scratchie); get_n_addr(dst,dst,scratchie); mov_l_rR(tmp+0,src,0); mov_l_rR(tmp+1,src,4); mov_l_rR(tmp+2,src,8); mov_l_rR(tmp+3,src,12); mov_l_Rr(dst,tmp+0,0); forget_about(tmp+0); mov_l_Rr(dst,tmp+1,4); forget_about(tmp+1); mov_l_Rr(dst,tmp+2,8); forget_about(tmp+2); mov_l_Rr(dst,tmp+3,12); } } if (m68k_pc_offset>100) sync_m68k_pc(); return 0; } #endif #endif fs-uae-2.2.3+dfsg/src/filesys.asm0000644000175000017500000014015412162366655017031 0ustar glaubitzglaubitz SECTION code,code ; This file can be translated with A68k or PhxAss and then linked with BLink ; to produce an Amiga executable. Make sure it does not contain any ; relocations, then run it through the filesys.sh script ; ; Patrick: It also works with SAS/C asm+slink, but I had to remove ; the .l from jsr.l and jmp.l. ; Toni Wilen: modified SECTION, compiles now with AsmOne and clones(?) ; Removed absolute RT_AREA references ; 2002.08.06 RDB automount/autoboot support (Toni Wilen) ; 2002.09.11 KS1.3 RDB support (TW) ; 200?.??.?? Picasso96 vblank hack (TW) ; 2006.03.04 Mousehack code integrated (TW) ; 2006.18.07 FileSystem.resource find routine access fault fixed (TW) ; 2007.03.30 mousehack do not start multiple times anymore (TW) ; 2007.06.15 uninitialized variable in memory type selection fixed (stupid me) (TW) ; 2007.08.09 started implementing removable drive support (TW) ; 2007.09.01 ACTION_EXAMINE_ALL (TW) ; 2007.09.05 full filesystem device mounting on the fly (TW) ; 2008.01.09 ACTION_EXAMINE_ALL does not anymore return eac_Entries = 0 with continue (fixes some broken programs) ; 2008.12.11 mousehack -> tablet driver ; 2008.12.25 mousehack cursor sync ; 2009.01.20 clipboard sharing ; 2009.12.27 console hook ; 2010.05.27 Z3Chip ; 2011.12.17 built-in CDFS support AllocMem = -198 FreeMem = -210 ; don't forget filesys.c! */ PP_MAXSIZE = 4 * 96 PP_FSSIZE = 400 PP_FSPTR = 404 PP_FSRES = 408 PP_EXPLIB = 412 PP_FSHDSTART = 416 PP_TOTAL = (PP_FSHDSTART+140) NOTIFY_CLASS = $40000000 NOTIFY_CODE = $1234 NRF_SEND_MESSAGE = 1 NRF_SEND_SIGNAL = 2 NRF_WAIT_REPLY = 8 NRF_NOTIFY_INITIAL = 16 NRF_MAGIC = $80000000 dc.l 16 ; 4 our_seglist: dc.l 0 ; 8 /* NextSeg */ start: dc.l 9 ;0 12 bra.w filesys_mainloop ;1 16 dc.l make_dev-start ;2 20 dc.l filesys_init-start ;3 24 dc.l exter_server-start ;4 28 dc.l bootcode-start ;5 32 dc.l setup_exter-start ;6 36 dc.l 0 ;7 40 dc.l clipboard_init-start ;8 44 ;52 bootcode: lea.l doslibname(pc),a1 jsr -96(a6) ; FindResident move.l d0,a0 move.l 22(a0),d0 move.l d0,a0 jsr (a0) rts residenthack movem.l d0-d2/a0-a2/a6,-(sp) move.w #$FF38,d0 moveq #17,d1 bsr.w getrtbase jsr (a0) tst.l d0 beq.s .rsh move.l 4.w,a6 cmp.w #37,20(a6) bcs.s .rsh moveq #residentcodeend-residentcodestart,d0 move.l d0,d2 moveq #1,d1 jsr AllocMem(a6) tst.l d0 beq.s .rsh move.l d0,a2 move.l a2,a0 lea residentcodestart(pc),a1 .cp1 move.l (a1)+,(a0)+ subq.l #4,d2 bne.s .cp1 jsr -$0078(a6) ;Disable move.l a6,a1 move.w #-$48,a0 ;InitCode move.l a2,d0 jsr -$01a4(a6) ;SetFunction move.l d0,residentcodejump2-residentcodestart+2(a2) lea myafterdos(pc),a0 move.l a0,residentcodejump1-residentcodestart+2(a2) jsr -$27C(a6) ;CacheClearU jsr -$007e(a6) ;Enable .rsh movem.l (sp)+,d0-d2/a0-a2/a6 rts myafterdos move.l (sp),a0 move.l 2(a0),a0 move.l a0,-(sp) jsr (a0) ;jump to original InitCode move.l (sp)+,a0 addq.l #4,sp ;remove return address movem.l d0-d7/a1-a6,-(sp) move.l a6,a1 move.l a0,d0 move.w #-$48,a0 ;InitCode jsr -$01a4(a6) ;SetFunction (restore original) bsr.w clipboard_init bsr.w consolehook movem.l (sp)+,d0-d7/a1-a6 rts ;return directly to caller cnop 0,4 residentcodestart: btst #2,d0 ;RTF_AFTERDOS? beq.s resjump residentcodejump1 jsr $f00000 resjump residentcodejump2 jmp $f00000 cnop 0,4 residentcodeend: filesys_init: movem.l d0-d7/a0-a6,-(sp) move.l 4.w,a6 move.w #$FFEC,d0 ; filesys base bsr getrtbase move.l (a0),a5 lea.l explibname(pc),a1 ; expansion lib name moveq #36,d0 moveq #1,d5 jsr -552(a6) ; OpenLibrary tst.l d0 bne.b FSIN_explibok lea.l explibname(pc),a1 ; expansion lib name moveq #0,d0 moveq #0,d5 jsr -552(a6) ; OpenLibrary FSIN_explibok: move.l d0,a4 tst.l $10c(a5) beq.w FSIN_none move.l #PP_TOTAL,d0 move.l #$10001,d1 jsr AllocMem(a6) move.l d0,a3 ; param packet move.l a4,PP_EXPLIB(a3) moveq #0,d6 FSIN_init_units: cmp.w $10e(a5),d6 bcc.b FSIN_units_ok move.l d6,-(sp) FSIN_nextsub: moveq #1,d7 tst.w d5 beq.s .oldks bset #2,d7 .oldks move.l a3,-(sp) move.l a3,a0 bsr.w make_dev move.l (sp)+,a3 cmp.l #-2,d0 beq.s FSIN_nomoresub swap d6 addq.w #1,d6 swap d6 bra.s FSIN_nextsub FSIN_nomoresub: move.l (sp)+,d6 addq.w #1,d6 bra.b FSIN_init_units FSIN_units_ok: move.l 4.w,a6 move.l a3,a1 move.l #PP_TOTAL,d0 jsr FreeMem(a6) FSIN_none: move.l 4.w,a6 move.l a4,a1 jsr -414(a6) ; CloseLibrary ; move.w #$FF80,d0 ; bsr.w getrtbase ; jsr (a0) ; jsr -$0078(a6) ; Disable ; lea 322(a6),a0 ; MemHeader ;FSIN_scanchip: ; move.l (a0),a0 ; first MemList ; tst.l (a0) ; beq.s FSIN_scandone ; move.w 14(a0),d1 ; attributes ; and #2,d1 ; MEMF_CHIP? ; beq.s FSIN_scanchip ; sub.l 24(a0),d0 ; did KS detect all chip? ; bmi.s FSIN_scandone ; beq.s FSIN_scandone ; ; add the missing piece ; add.l d0,24(a0) ; mh_Upper ; add.l d0,28(a0) ; mh_Free ; add.l d0,62(a6) ; MaxLocMem ; ; we still need to update last node's free space ; move.l 16(a0),a0 ; mh_First ;FSIN_chiploop2 ; tst.l (a0) ; beq.s FSIN_chiploop ; move.l (a0),a0 ; bra.s FSIN_chiploop2 ;FSIN_chiploop: ; add.l d0,4(a0) ;FSIN_scandone: ; jsr -$007e(a6) ; Enable filesys_dev_storeinfo moveq #3,d4 ; MEMF_CHIP | MEMF_PUBLIC cmp.w #36,20(a6) bcs.s FSIN_ksold or.w #256,d4 ; MEMF_LOCAL FSIN_ksold ; add >2MB-6MB chip RAM to memory list lea $210000,a1 ; do not add if RAM detected already jsr -$216(a6) ; TypeOfMem tst.l d0 bne.s FSIN_chip_done move.w #$FF80,d0 bsr.w getrtbase jsr (a0) move.l d4,d1 moveq #-10,d2 move.l #$200000,a0 sub.l a0,d0 bcs.b FSIN_chip_done beq.b FSIN_chip_done sub.l a1,a1 jsr -618(a6) ; AddMemList FSIN_chip_done ; add MegaChipRAM move.w #$FF80,d0 bsr.w getrtbase jsr (a0) ; d1 = size, a1 = start address move.l a1,a0 move.l d1,d0 beq.s FSIN_fchip_done move.l d4,d1 moveq #-5,d2 lea fchipname(pc),a1 jsr -618(a6) ; AddMemList FSIN_fchip_done lea fstaskname(pc),a0 lea fsmounttask(pc),a1 moveq #10,d0 bsr createtask move.l d0,a1 moveq #1,d1 move.w #$FF48,d0 ; store task pointer bsr.w getrtbase jsr (a0) movem.l (sp)+,d0-d7/a0-a6 general_ret: rts createproc movem.l d2-d4/a2/a6,-(sp) move.l 4.w,a6 move.l d0,d2 move.l d1,d4 move.l a1,d3 move.l a0,a2 lea doslibname(pc),a1 moveq #0,d0 jsr -$0228(a6) ; OpenLibrary tst.l d0 beq.s .noproc move.l d0,a6 move.l a2,d1 lsr.l #2,d3 jsr -$08a(a6) ; CreateProc move.l a6,a1 move.l 4.w,a6 jsr -$019e(a6); CloseLibrary .noproc movem.l (sp)+,d2-d4/a2/a6 rts ; this is getting ridiculous but I don't see any other solutions.. fsmounttask .fsm1 move.l 4.w,a6 moveq #0,d0 bset #13,d0 ; SIGBREAK_CTRL_D jsr -$013e(a6) ;Wait lea fsprocname(pc),a0 lea mountproc(pc),a1 moveq #15,d0 move.l #8000,d1 bsr.w createproc bra.s .fsm1 ; dummy process here because can't mount devices with ADNF_STARTPROC from task.. ; (AddDosNode() internally calls GetDeviceProc() which accesses ExecBase->ThisTask->pr_GlobVec) cnop 0,4 dc.l 16 mountproc dc.l 0 moveq #2,d1 move.w #$FF48,d0 ; get new unit number bsr.w getrtbase jsr (a0) move.l d0,d1 bmi.s .out bsr.w addfsonthefly .out moveq #0,d0 rts exter_data: exter_server: movem.l a2,-(sp) move.w #$FF50,d0 ; exter_int_helper bsr.w getrtbase moveq.l #0,d0 jsr (a0) tst.l d0 beq.w exter_server_exit ; This is the hard part - we have to send some messages. move.l 4.w,a6 EXTS_loop: move.w #$FF50,d0 ; exter_int_helper bsr.w getrtbase moveq.l #2,d0 jsr (a0) cmp.w #1,d0 blt.w EXTS_done bgt.b EXTS_signal_reply jsr -366(a6) ; PutMsg bra.b EXTS_loop EXTS_signal_reply: cmp.w #2,d0 bgt.b EXTS_reply move.l d1,d0 jsr -$144(a6) ; Signal bra.b EXTS_loop EXTS_reply: cmp.w #3,d0 bgt.b EXTS_cause jsr -$17a(a6) ; ReplyMsg bra.b EXTS_loop EXTS_cause: cmp.w #4,d0 bgt.b EXTS_notificationhack jsr -$b4(a6) ; Cause bra.b EXTS_loop EXTS_notificationhack: cmp.w #5,d0 bgt.b EXTS_done movem.l a0-a1,-(sp) moveq #38,d0 move.l #65536+1,d1 jsr AllocMem(a6) movem.l (sp)+,a0-a1 move.l d0,a2 move.b #8,8(a2) move.l a0,14(a2) move.w #38,18(a2) move.l #NOTIFY_CLASS,20(a2) move.w #NOTIFY_CODE,24(a2) move.l a1,26(a2) move.l 16(a1),a0 move.l a2,a1 jsr -366(a6) ; PutMsg bra.w EXTS_loop EXTS_done: move.w #$FF50,d0 ;exter_int_helper bsr.w getrtbase moveq.l #4,d0 jsr (a0) moveq.l #1,d0 ; clear Z - it was for us. exter_server_exit: movem.l (sp)+,a2 rts heartbeatvblank: movem.l d0-d1/a0-a2,-(sp) move.w #$FF38,d0 moveq #18,d1 bsr.w getrtbase jsr (a0) move.l d0,a2 moveq #22,d0 move.l #65536+1,d1 jsr AllocMem(a6) move.l d0,a1 move.b #2,8(a1) ;NT_INTERRUPT move.b #-10,9(a1) ;priority lea kaname(pc),a0 move.l a0,10(a1) lea kaint(pc),a0 move.l a0,18(a1) move.l a2,14(a1) moveq #5,d0 ;INTB_VERTB jsr -$00a8(a6) movem.l (sp)+,d0-d1/a0-a2 rts kaint: addq.l #1,(a1) moveq #0,d0 rts setup_exter: movem.l d0-d1/a0-a1,-(sp) bsr.w residenthack moveq.l #26,d0 move.l #$10001,d1 jsr AllocMem(a6) move.l d0,a1 lea.l exter_name(pc),a0 move.l a0,10(a1) lea.l exter_data(pc),a0 move.l a0,14(a1) lea.l exter_server(pc),a0 move.l a0,18(a1) move.w #$0214,8(a1) moveq.l #3,d0 jsr -168(a6) ; AddIntServer bsr.w heartbeatvblank move.w #$FF38,d0 moveq #4,d1 bsr.w getrtbase jsr (a0) tst.l d0 beq.s .nomh bsr.w mousehack_init .nomh movem.l (sp)+,d0-d1/a0-a1 rts addfs: ; a0 = first hunk, a1 = parmpacket movem.l d0-d1/a0-a3/a6,-(sp) move.l 4.w,a6 move.l a0,a2 move.l a1,a3 move.l #62+128,d0 ; sizeof(FileSysEntry) + patchflags; move.l #$10001,d1 jsr -198(a6) move.l d0,a0 moveq #0,d0 lea PP_FSHDSTART(a3),a1 af1 move.b 0(a1,d0.w),14(a0,d0.w) addq.w #1,d0 cmp.w #140,d0 bne.s af1 move.l a2,d0 lsr.l #2,d0 move.l d0,54(a0) ;seglist move.l a0,a1 lea exter_name(pc),a0 move.l a0,10(a1) ; name move.l PP_FSRES(a3),a0 ; FileSystem.resource lea 18(a0),a0 ; fsr_FileSysEntries jsr -$f0(a6) ;AddHead movem.l (sp)+,d0-d1/a0-a3/a6 rts relocate: ;a0=pointer to executable, returns first segment in A0 movem.l d1-d7/a1-a6,-(sp) move.l 4.w,a6 move.l a0,a2 cmp.l #$3f3,(a2)+ bne.w ree addq.l #8,a2 ; skip name end and skip total hunks + 1 move.l 4(a2),d7 ; last hunk sub.l (a2),d7 ; first hunk addq.l #8,a2 ; skip hunk to load first and hunk to load last addq.l #1,d7 move.l a2,a3 move.l d7,d0 add.l d0,d0 add.l d0,d0 add.l d0,a3 move.l a2,a4 ; allocate hunks sub.l a5,a5 ;prev segment moveq #0,d6 r15 move.l (a2),d2 ; hunk size (header) moveq #1,d1 btst #30,d2 ; chip mem? beq.s r2 bset #1,d1 r2 bset #16,d1 lsl.l #2,d2 bne.s r17 clr.l (a2)+ ; empty hunk bra.s r18 r17 addq.l #8,d2 ; size + pointer to next hunk + hunk size move.l d2,d0 jsr AllocMem(a6) tst.l d0 beq.w ree move.l d0,a0 move.l d2,(a0)+ ; store size move.l a0,(a2)+ ; store new pointer move.l a5,d1 beq.s r10 move.l a0,d0 lsr.l #2,d0 move.l d0,(a5) r10 move.l a0,a5 r18 addq.l #1,d6 cmp.l d6,d7 bne.s r15 moveq #0,d6 r3 move.l d6,d1 add.l d1,d1 add.l d1,d1 move.l 0(a4,d1.l),a0 addq.l #4,a0 move.l (a3)+,d3 ; hunk type move.l (a3)+,d4 ; hunk size lsl.l #2,d4 cmp.l #$3e9,d3 ;code beq.s r4 cmp.l #$3ea,d3 ;data bne.s r5 r4 ; code and data move.l d4,d0 r6 tst.l d0 beq.s r7 move.b (a3)+,(a0)+ subq.l #1,d0 bra.s r6 r5 cmp.l #$3eb,d3 ;bss bne.s ree r7 ; scan for reloc32 or hunk_end move.l (a3)+,d3 cmp.l #$3ec,d3 ;reloc32 bne.s r13 ; relocate move.l d6,d1 add.l d1,d1 add.l d1,d1 move.l 0(a4,d1.l),a0 ; current hunk addq.l #4,a0 r11 move.l (a3)+,d0 ;number of relocs beq.s r7 move.l (a3)+,d1 ;hunk add.l d1,d1 add.l d1,d1 move.l 0(a4,d1.l),d3 ;hunk start address addq.l #4,d3 r9 move.l (a3)+,d2 ;offset add.l d3,0(a0,d2.l) subq.l #1,d0 bne.s r9 bra.s r11 r13 cmp.l #$3f2,d3 ;end bne.s ree addq.l #1,d6 cmp.l d6,d7 bne.w r3 moveq #1,d7 move.l (a4),a0 r0 move.l d7,d0 movem.l (sp)+,d1-d7/a1-a6 rts ree moveq #0,d7 bra.s r0 fsres: movem.l d1/a0-a2/a6,-(sp) move.l 4.w,a6 lea $150(a6),a0 ;ResourceList move.l (a0),a0 ;lh_Head fsres3 tst.l (a0) ;end of list? beq.s fsres1 move.l 10(a0),a1 ;name lea fsresname(pc),a2 fsres5 move.b (a1)+,d0 move.b (a2)+,d1 cmp.b d1,d0 bne.s fsres2 tst.b d0 beq.s fsres4 bra.s fsres5 fsres2 move.l (a0),a0 bra.s fsres3 ; FileSystem.resource does not exist -> create it fsres1 moveq #32,d0 ; sizeof(FileSysResource) move.l #$10001,d1 jsr AllocMem(a6) move.l d0,a2 move.b #8,8(a2) ; NT_RESOURCE lea fsresname(pc),a0 move.l a0,10(a2) ; node name lea exter_name(pc),a0 move.l a0,14(a2) ; fsr_Creator lea 18(a2),a0 move.l a0,(a0) ; NewList() fsr_FileSysEntries addq.l #4,(a0) move.l a0,8(a0) lea $150(a6),a0 ; ResourceList move.l a2,a1 jsr -$f6(a6) ; AddTail move.l a2,a0 fsres4 move.l a0,d0 movem.l (sp)+,d1/a0-a2/a6 rts addvolumenode movem.l d7/a6,-(sp) move.l d0,d7 tst.b 32+44(a3) beq.s .end ;empty volume string = empty drive move.l 160(a3),a6 cmp.w #37, 20(a6) bcs.s .prev37 moveq #(1<<1)+(1<<3)+(1<<2),d1 ;LDF_WRITE | LDF_VOLUMES | LDF_DEVICES jsr -$29A(a6) ;AttemptLockDosList and.l #~1,d0 beq.s .end btst #0,d7 beq.s .nvol lea 32(a3),a0 move.l a0,d1 jsr -$2A6(a6) ;AddDosEntry (Volume) .nvol btst #1,d7 beq.s .ndev tst.b 158(a3) bne.s .ndev st 158(a3) move.l 180(a3),d1 jsr -$2A6(a6) ;AddDosEntry (Device) .ndev moveq #(1<<1)+(1<<3)+(1<<2),d1 ;LDF_WRITE | LDF_VOLUMES | LDF_DEVICES jsr -$294(a6) ;UnLockDosList bra.s .end .prev37 move.l 4.w,a6 jsr -$0084(a6) ; Forbid btst #0,d7 beq.s .nvol13 lea 32(a3),a0 bsr.w adddosentry13 .nvol13 btst #1,d7 beq.s .ndev13 tst.b 158(a3) bne.s .ndev13 st 158(a3) move.l 180(a3),a0 bsr.w adddosentry13 .ndev13 jsr -$008a(a6) ;Permit .end movem.l (sp)+,d7/a6 rts remvolumenode movem.l d7/a2/a6,-(sp) move.l d0,d7 move.l 160(a3),a6 cmp.w #37,20(a6) bcs.s .prev37 moveq #(1<<1)+(1<<3)+(1<<2),d1 ;LDF_WRITE | LDF_VOLUMES | LDF_DEVICES jsr -$29A(a6) ;AttemptLockDosList and.l #~1,d0 beq.s .end btst #0,d7 beq.s .nvol lea 32(a3),a0 move.l a0,d1 jsr -$2A0(a6) ;RemDosEntry (Volume) .nvol btst #1,d7 beq.s .ndev tst.b 158(a3) beq.s .ndev clr.b 158(a3) move.l 180(a3),d1 jsr -$2A0(a6) ;RemDosEntry (Device) .ndev moveq #(1<<1)+(1<<3)+(1<<2),d1 ;LDF_WRITE | LDF_VOLUMES | LDF_DEVICES jsr -$294(a6) ;UnLockDosList bra.s .end .prev37 move.l 4.w,a6 jsr -$0084(a6) ; Forbid btst #0,d7 beq.s .nvol13 lea 32(a3),a0 bsr.w remdosentry13 .nvol13 btst #1,d7 beq.s .ndev13 tst.b 158(a3) beq.s .ndev13 clr.b 158(a3) move.l 180(a3),a0 bsr.w remdosentry13 .ndev13 jsr -$008a(a6) ;Permit .end movem.l (sp)+,d7/a2/a6 rts adddosentry13: move.l a0,a1 move.l 160(a3),a0 move.l 34(a0),a0 ; RootNode move.l 24(a0),a0 ; DosInfo add.l a0,a0 add.l a0,a0 move.l 4(a0),(a1) ; myentry->dl_Next = di_DevInfo move.l a1,d0 lsr.l #2,d0 move.l d0,4(a0) ; di_DevInfo = myentry rts remdosentry13: move.l a0,a2 move.l 160(a3),a0 move.l 34(a0),a0 ; RootNode move.l 24(a0),a0 ; DosInfo add.l a0,a0 add.l a0,a0 move.l 4(a0),a1 ; DosInfo->di_DevInfo add.l a1,a1 add.l a1,a1 cmp.l a2,a1 bne.s .pr2 ; was first entry move.l (a2),4(a0) ; di_DevInfo = myentry->dl_Next bra.s .pr1 .pr2 move.l a1,d0 beq.s .pr3 move.l (a1),d0 ; prevEntry->dl_Next add.l d0,d0 add.l d0,d0 cmp.l d0,a2 ; next is our entry? beq.s .pr3 move.l d0,a1 bra.s .pr2 .pr3 move.l a1,d0 beq.s .pr1 move.l (a2),(a1) ; prevEntry->dl_Next = myentry->dl_Next .pr1 rts diskinsertremove: movem.l d2/a2/a6,-(sp) moveq #22,d2 sub.l d2,sp move.l sp,a2 move.w d2,d1 .l1 clr.b -1(a2,d1.w) subq.w #1,d1 bne.s .l1 move.l 4.w,a6 moveq #15,d1 ;IECLASS_DISKREMOVED tst.l d0 beq.s .l2 moveq #16,d1 ;IECLASS_DISKINSERTED .l2 move.b d1,4(a2) ;ie_Class move.w #$0800,8(a2); ie_Qualifier=IEQUALIFIER_MULTIBROADCAST move.l 164(a3),a1 move.w #11,28(a1) ;IND_WRITEEVENT move.l #22,36(a1) ;sizeof(struct InputEvent) move.l a2,40(a1) move.b #1,30(a1) ;IOF_QUICK move.l 168(a3),a1 move.w #10,28(a1) ;TR_GETSYSTIME move.b #1,30(a1) ;IOF_QUICK jsr -$01c8(a6) ;DoIO move.l 168(a3),a1 move.l 32(a1),14(a2) move.l 36(a1),18(a2) move.l 164(a3),a1 jsr -$01c8(a6) ;DoIO add.l d2,sp movem.l (sp)+,d2/a2/a6 rts dodiskchange tst.b d0 beq.s .eject tst.b 32+44(a3) bne.s .end moveq #0,d0 .dc2 tst.b 32+45(a3,d0.w) beq.s .dc1 addq.b #1,d0 bra.s .dc2 .dc1 move.b d0,32+44(a3) beq.s .end move.l d1,d0 bsr.w addvolumenode moveq #1,d0 bsr.w diskinsertremove bra.s .end .eject tst.b 32+44(a3) beq.s .end clr.b 32+44(a3) move.l d1,d0 bsr.w remvolumenode moveq #0,d0 bsr.w diskinsertremove .end rts action_inhibit tst.l 20(a4) ;dp_Arg1 beq.s .add moveq #0,d0 moveq #1,d1 bsr dodiskchange rts .add moveq #1,d0 moveq #3,d1 bsr dodiskchange rts diskchange move.b 172(a3),d0 bmi.s .nodisk moveq #1,d0 moveq #3,d1 bsr dodiskchange rts .nodisk moveq #1,d1 cmp.b #-2,d0 ;remove device node? bne.s .nod1 moveq #3,d1 .nod1 moveq #0,d0 bsr dodiskchange rts ; exall is complex, need to emulate eac_MatchString and/or eac_MatchFunc action_exall move.l 36(a4),a0 ; dp_Arg5, struct ExAllControl tst.l (a0) beq.s .ex0 tst.l 8(a0) ; eac_MatchString bne.s .ex1 tst.l 12(a0) ; eac_MatchFunc bne.s .ex1 .ex0 moveq #1,d0 ; no need to get more entries rts ;nothing to do here .ex1: movem.l d2-d7/a2-a6,-(sp) move.l a0,a5 move.l 24(a4),a2 ;dp_Arg2, ExAllData move.l (a5),d7 ; eac_Entries moveq #0,d5 ; previous entry .ex4 tst.l d7 beq.s .ex3 move.l a2,d0 beq.s .ex3 moveq #0,d6 move.l 8(a5),d1 ; MatchString beq.s .ex5 move.l 4(a2),d2 ; dir/file name move.l 160(a3),a6 ; dosbase jsr -$03cc(a6) ; MatchPatternNoCase tst.l d0 bne.s .ex5 st d6 .ex5 move.l 12(a5),d1 ; MatchFunc beq.s .ex6 move.l d1,a0 move.l a2,a1 move.l a2,-(sp) lea 32(a4),a2 ; dp_Arg4, Type pea .pop(pc) move.l 8(a0),-(sp) rts .pop move.l (sp)+,a2 tst.l d0 bne.s .ex6 st d6 .ex6 tst.b d6 beq.s .ex7 ; need to delete current entry.. this is not really the proper way.. move.l 4(a2),d0 ; pointer to filename (which is first address after structure) sub.l a2,d0 ; copy this much data tst.l (a2) ; delete last? (eac_Next) bne.s .ex10 ; need to clear previous eac_Next move.l d5,d0 beq.s .ex8 move.l d0,a0 clr.l (a0) bra.s .ex8 .ex10 move.l (a2),a0 move.l a2,a1 .ex9 move.l (a0)+,(a1)+ subq.l #4,d0 bpl.s .ex9 .ex8 subq.l #1,(a5) ; eac_Entries subq.l #1,d7 bra.s .ex4 .ex7 move.l a2,d5 move.l (a2),a2 ; eac_Next subq.l #1,d7 bra.s .ex4 .ex3 movem.l (sp)+,d2-d7/a2-a6 move.l 36(a4),a0 ; dp_Arg5, struct ExAllControl tst.l (a0) ; eac_Entries == 0 -> get more rts ; mount harddrives, virtual or hdf make_dev: ; IN: A0 param_packet, D6: unit_no, D7: b0=autoboot,b1=onthefly,b2=v36+ ; A4: expansionbase bsr.w fsres move.l d0,PP_FSRES(a0) ; pointer to FileSystem.resource move.l a0,-(sp) move.w #$FFEC,d0 ; filesys base bsr.w getrtbase move.l (a0),a5 move.w #$FF28,d0 ; fill in unit-dependent info (filesys_dev_storeinfo) bsr.w getrtbase move.l a0,a1 move.l (sp)+,a0 clr.l PP_FSSIZE(a0) ; filesystem size clr.l PP_FSPTR(a0) ; filesystem memory jsr (a1) ; ret:0=virtual,1=hardfile,2=rdbhardfile,-1=hardfile-donotmount,-2=no more subunits move.l d0,d3 cmp.w #-2,d3 beq.w general_ret ;cmp.w #1,d3 ;bne.s mountalways ; KS < V36: init regular hardfiles only if filesystem is loaded ;btst #2,d7 ;bne.s mountalways ; >= 36 ;btst #1,d7 ;bne.w mountalways mountalways ; allocate memory for loaded filesystem move.l PP_FSSIZE(a0),d0 beq.s .nordbfs1 bmi.s .nordbfs1 move.l a0,-(sp) moveq #1,d1 move.l 4.w,a6 jsr AllocMem(a6) move.l (sp)+,a0 move.l d0,PP_FSPTR(a0) .nordbfs1: tst.l d3 bpl.s do_mount ; 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 jsr (a0) bra.s dont_mount do_mount: move.l a4,a6 move.l a0,-(sp) jsr -144(a6) ; MakeDosNode() move.l (sp)+,a0 ; parmpacket move.l a0,a1 move.l d0,a3 ; devicenode move.w #$FF20,d0 ; record in ui.startup (filesys_dev_remember) bsr.w getrtbase jsr (a0) moveq #0,d0 move.l d0,8(a3) ; dn_Task move.l d0,16(a3) ; dn_Handler move.l d0,32(a3) ; dn_SegList dont_mount: tst.l PP_FSPTR(a1) ; filesystem? beq.s nordbfs2 move.l PP_FSPTR(a1),a0 bsr.w relocate movem.l d0/a0-a1,-(sp) move.l PP_FSSIZE(a1),d0 move.l PP_FSPTR(a1),a1 move.l 4.w,a6 jsr FreeMem(a6) movem.l (sp)+,d0/a0-a1 tst.l d0 beq.s nordbfs2 bsr.w addfs nordbfs2: tst.l d3 bmi.w general_ret move.w #$FF18,d0 ; update dn_SegList if needed (filesys_dev_bootfilesys) bsr.w getrtbase jsr (a0) move.l d3,d0 move.b 79(a1),d3 ; bootpri tst.l d0 bne.b MKDV_doboot ; not directory harddrive? MKDV_is_filesys: move.l #6000,20(a3) ; dn_StackSize lea.l our_seglist(pc),a0 move.l a0,d0 lsr.l #2,d0 move.l d0,32(a3) ; dn_SegList moveq #-1,d0 move.l d0,36(a3) ; dn_GlobalVec MKDV_doboot: btst #0,d7 beq.b MKDV_noboot cmp.b #-128,d3 beq.s MKDV_noboot move.l 4.w,a6 moveq #20,d0 move.l #65536+1,d1 jsr AllocMem(a6) move.l d0,a1 ; bootnode move.w #$1000,d0 or.b d3,d0 move.w d0,8(a1) move.l $104(a5),10(a1) ; filesys_configdev move.l a3,16(a1) ; devicenode lea.l 74(a4),a0 ; MountList jsr -$0084(a6) ;Forbid jsr -270(a6) ; Enqueue() jsr -$008a(a6) ;Permit moveq #0,d0 rts MKDV_noboot: move.l a1,a2 ; bootnode move.l a3,a0 ; parmpacket moveq #0,d1 move.l d1,a1 btst #1,d7 beq.s .nob btst #2,d7 beq.s .nob moveq #1,d1 ; ADNF_STARTPROC (v36+) .nob moveq #-128,d0 move.l a4,a6 ; expansion base jsr -150(a6) ; AddDosNode btst #1,d7 beq.s .noproc btst #2,d7 bne.s .noproc ; 1.3 and need to start immediately move.l (a2),a0 ; 'dh0' but need 'dh0:' moveq #2,d2 .devpr1 addq.l #1,d2 tst.b -3(a0,d2.l) bne.s .devpr1 move.l 4.w,a6 move.l d2,d0 moveq #1,d1 jsr AllocMem(a6) tst.l d0 beq.s .noproc move.l (a2),a0 move.l d0,a2 move.l a2,a1 .devpr2 move.b (a0)+,(a1)+ bne.s .devpr2 move.b #':',-1(a1) clr.b (a1) move.l 4.w,a6 lea doslibname(pc),a1 moveq #0,d0 jsr -$0228(a6) ; OpenLibrary move.l d0,a6 move.l a2,d1 jsr -$0AE(a6) ; DeviceProc (start fs handler, ignore return code) move.l a6,a1 move.l 4.w,a6 jsr -$019e(a6); CloseLibrary move.l a2,a1 move.l d2,d0 jsr FreeMem(a6) .noproc moveq #0,d0 rts addfsonthefly ; d1 = fs index movem.l d2-d7/a2-a6,-(sp) move.l d1,d6 moveq #2+4,d7 move.l 4.w,a6 lea.l explibname(pc),a1 ; expansion lib name moveq #36,d0 jsr -552(a6) ; OpenLibrary tst.l d0 bne.s .newks bclr #2,d7 lea.l explibname(pc),a1 ; expansion lib name moveq #0,d0 jsr -552(a6) ; OpenLibrary .newks move.l d0,a4 move.l #PP_TOTAL,d0 move.l #$10001,d1 jsr AllocMem(a6) move.l d0,a0 ; param packet tst.l d0 beq.s .nomem move.l a4,PP_EXPLIB(a0) .next movem.l a0/a4/a6,-(sp) bsr.w make_dev movem.l (sp)+,a0/a4/a6 cmp.l #-2,d0 beq.s .nomsub swap d6 addq.w #1,d6 swap d6 bra.s .next .nomsub move.l a0,a1 move.l #PP_TOTAL,d0 jsr FreeMem(a6) .nomem move.l a4,a1 jsr -414(a6) ; CloseLibrary movem.l (sp)+,d2-d7/a2-a6 rts clockreset: move.w #$ff58,d0 ; fsmisc_helper bsr.w getrtbase moveq #3,d0 ; get time jsr (a0) move.l 168(a3),a1 move.l d0,32(a1) beq.s .cr moveq #0,d0 move.l d0,36(a1) move.w #11,28(a1) ;TR_SETSYSTIME move.b #1,30(a1) ;IOF_QUICK jsr -$01c8(a6) ;DoIO .cr rts filesys_mainloop: move.l 4.w,a6 sub.l a1,a1 jsr -294(a6) ; FindTask move.l d0,a0 lea.l $5c(a0),a5 ; pr_MsgPort ; Open DOS library lea.l doslibname(pc),a1 moveq.l #0,d0 jsr -552(a6) ; OpenLibrary move.l d0,a2 ; Allocate some memory. Usage: ; 0: lock chain ; 4: command chain ; 8: second thread's lock chain ; 12: dummy message ; 32: the volume (44+80+1 bytes) ; 157: mousehack started-flag ; 158: device node on/off status ; 160: dosbase ; 164: input.device ioreq (disk inserted/removed input message) ; 168: timer.device ioreq ; 172: disk change from host ; 173: clock reset ; 176: my task ; 180: device node move.l #12+20+(80+44+1)+(1+3)+4+4+4+(1+3)+4+4,d0 move.l #$10001,d1 ; MEMF_PUBLIC | MEMF_CLEAR jsr AllocMem(a6) move.l d0,a3 moveq.l #0,d6 move.l d6,(a3) move.l d6,4(a3) move.l d6,8(a3) move.l a2,160(a3) st 158(a3) sub.l a1,a1 jsr -294(a6) ; FindTask move.l d0,176(a3) lea inp_dev(pc),a0 moveq #0,d0 moveq #0,d1 bsr.w allocdevice move.l d0,164(a3) lea tim_dev(pc),a0 moveq #0,d0 moveq #0,d1 bsr.w allocdevice move.l d0,168(a3) moveq.l #0,d5 ; No commands queued. ; Fetch our startup packet move.l a5,a0 jsr -384(a6) ; WaitPort move.l a5,a0 jsr -372(a6) ; GetMsg move.l d0,a4 move.l 10(a4),d3 ; ln_Name move.w #$FF40,d0 ; startup_handler bsr.w getrtbase moveq.l #0,d0 jsr (a0) move.l d0,d2 moveq #1,d0 bsr.w addvolumenode btst #1,d2 beq.s .nonotif moveq #1,d0 bsr.w diskinsertremove .nonotif bra.w FSML_Reply ; We abuse some of the fields of the message we get. Offset 0 is ; used for chaining unprocessed commands, and offset 1 is used for ; indicating the status of a command. 0 means the command was handed ; off to some UAE thread and did not complete yet, 1 means we didn't ; even hand it over yet because we were afraid that might blow some ; pipe limit, and -1 means the command was handed over and has completed ; processing by now, so it's safe to reply to it. FSML_loop: move.l a5,a0 jsr -372(a6) ; GetMsg move.l d0,a4 tst.l d0 bne.s .msg moveq #0,d0 move.b 15(a5),d1 ;mp_SigBit bset d1,d0 bset #13,d0 ; SIGBREAK_CTRL_D jsr -$013e(a6) ;Wait .msg ; SIGBREAK_CTRL_D checks ; clock reset tst.b 173(a3) beq.s .noclk bsr.w clockreset clr.b 173(a3) .noclk ; disk change notification from native code tst.b 172(a3) beq.s .nodc ; call filesys_media_change_reply (pre) move.w #$ff58,d0 ; fsmisc_helper bsr.w getrtbase moveq #1,d0 ; filesys_media_change_reply jsr (a0) tst.l d0 beq.s .nodc2 bsr.w diskchange .nodc2 clr.b 172(a3) ; call filesys_media_change_reply (post) move.w #$ff58,d0 ; fsmisc_helper bsr.w getrtbase moveq #2,d0 ; filesys_media_change_reply jsr (a0) .nodc move.l a4,d0 beq.s nonnotif ; notify reply? cmp.w #38, 18(a4) bne.s nonnotif cmp.l #NOTIFY_CLASS, 20(a4) bne.s nonnotif cmp.w #NOTIFY_CODE, 24(a4) bne.s nonnotif move.l 26(a4),a0 ; NotifyRequest move.l 12(a0),d0 ; flags and.l #NRF_WAIT_REPLY|NRF_MAGIC,d0 cmp.l #NRF_WAIT_REPLY|NRF_MAGIC,d0 bne.s nonoti and.l #~NRF_MAGIC,12(a0) move.l 16(a0),a0 move.l a4,a1 move.b #8,(a1) jsr -366(a6) ; PutMsg bra.w FSML_loop nonoti move.l a4,a1 moveq #38,d0 jsr FreeMem(a6) bra.w FSML_loop nonnotif moveq #-2,d2 ; lock timeout "done" value move.l a4,d0 beq.s FSML_check_queue_other move.l 10(a4),d3 ; ln_Name bne.b FSML_FromDOS moveq #-1,d2 ; normal "done" value ; It's a dummy packet indicating that some queued command finished. move.w #$FF50,d0 ; exter_int_helper bsr.w getrtbase moveq.l #1,d0 jsr (a0) FSML_check_queue_other: ; Go through the queue and reply all those that finished. lea.l 4(a3),a2 move.l (a2),a0 FSML_check_old: move.l a0,d0 beq.w FSML_loop move.l (a0),a1 move.l d0,a0 ; This field may be accessed concurrently by several UAE threads. ; This _should_ be harmless on all reasonable machines. move.l 4(a0),d0 cmp.l d0,d2 bne.b FSML_check_next movem.l a0/a1,-(a7) move.l 10(a0),a4 bsr.b ReplyOne subq.l #1,d5 ; One command less in the queue movem.l (a7)+,a0/a1 move.l a1,(a2) move.l a1,a0 bra.b FSML_check_old FSML_check_next: move.l a0,a2 move.l a1,a0 bra.b FSML_check_old FSML_FromDOS: ; Limit the number of outstanding started commands. We can handle an ; unlimited number of unstarted commands. cmp.l #20,d5 bcs FSML_DoCommand ; Too many commands queued. moveq.l #1,d0 move.l d0,4(a4) bra.b FSML_Enqueue 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 jsr (a0) tst.l d0 beq.b FSML_Reply ; The command did not complete yet. Enqueue it and increase number of ; queued commands ; The C code already set 4(a4) to 0 addq.l #1,d5 FSML_Enqueue: move.l 4(a3),(a4) move.l a4,4(a3) bra.w FSML_loop FSML_Reply: move.l d3,a4 bsr.b ReplyOne bra.w FSML_loop ReplyOne: cmp.l #31,8(a4) ;ACTION_INHIBIT? bne.s FSML_ReplyOne2 bsr.w action_inhibit FSML_ReplyOne2: cmp.l #1033,8(a4) ;ACTION_EXAMINE_ALL bne.s FSML_ReplyOne3 .exaretry: bsr.w action_exall 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 moveq #0,d0 ; exall jsr (a0) bra.s .exaretry FSML_ReplyOne3: move.l (a4),a1 ; dp_Link move.l 4(a4),a0 ; dp_Port move.l a5,4(a4) jmp -366(a6) ; PutMsg ; ugly code to avoid calling AllocMem / FreeMem from native C code. ; We keep a linked list of 3 locks. In theory, only one should ever ; be used. Before handling every packet, we check that the list has the ; right length. LockCheck: move.l d5,-(a7) moveq.l #-4,d5 ; Keep three locks move.l (a3),a2 move.l a2,d7 LKCK_Loop: move.l a2,d1 beq LKCK_ListEnd addq.l #1,d5 beq.b LKCK_TooMany move.l a2,a1 move.l (a2),a2 bra.b LKCK_Loop LKCK_ListEnd: addq.l #1,d5 beq.b LKCK_ret move.l d7,a2 moveq.l #24,d0 ; sizeof Lock is 20, 4 for chain moveq.l #1,d1 ; MEMF_PUBLIC jsr AllocMem(a6) addq.w #1,d6 move.l d0,a2 move.l d7,(a2) move.l a2,d7 bra.b LKCK_ListEnd LKCK_TooMany: move.l (a2),d0 ; We have too many, but we tolerate that to some extent. beq.b LKCK_ret move.l d0,a0 move.l (a0),d0 beq.b LKCK_ret move.l d0,a0 move.l (a0),d0 beq.b LKCK_ret moveq.l #0,d0 ; Now we are sure that we really have too many. Delete some. move.l d0,(a1) LKCK_TooManyLoop: move.l a2,a1 move.l (a1),a2 moveq.l #24,d0 jsr FreeMem(a6) add.l #$10000,d6 move.l a2,d0 bne.b LKCK_TooManyLoop LKCK_ret: move.l d7,(a3) move.l (a7)+,d5 rts ; mouse hack newlist: move.l a0,(a0) addq.l #4,(a0) clr.l 4(a0) move.l a0,8(a0) rts createport: movem.l d2/a2/a6,-(sp) move.l 4.w,a6 moveq #-1,d0 jsr -$014a(a6) ;AllocSignal sub.l a0,a0 move.l d0,d2 bmi.s .f moveq #34,d0 move.l #65536+1,d1 jsr AllocMem(a6) sub.l a0,a0 move.l d0,a2 tst.l d0 beq.s .f move.b #4,8(a2) ;NT_MSGPORT move.b d2,15(a2) sub.l a1,a1 jsr -$0126(a6) ;FindTask move.l d0,16(a2) lea 20(a2),a0 bsr.w newlist move.l a2,a0 .f move.l a0,d0 movem.l (sp)+,d2/a2/a6 rts createio: movem.l d2/a2/a6,-(sp) move.l 4.w,a6 tst.l d0 beq.s .f move.l d0,a2 move.l d1,d2 bne.s .ci moveq #48,d2 .ci move.l d2,d0 move.l #65536+1,d1 jsr AllocMem(a6) move.l d0,a0 move.b #10,8(a0) ;NT_MESSAGE move.w d2,18(a0) move.l a2,14(a0) .f tst.l d0 movem.l (sp)+,d2/a2/a6 rts allocdevice movem.l d2-d3/a2/a6,-(sp) move.l a0,a2 move.l d0,d2 move.l d1,d3 move.l 4.w,a6 bsr.w createport move.l d3,d1 bsr.w createio beq.s .f move.l a2,a0 move.l d0,a1 move.l d0,a2 move.l d2,d0 moveq #0,d1 jsr -$01bc(a6) ;OpenDevice move.l d0,d1 moveq #0,d0 tst.l d1 bne.s .f move.l a2,d0 .f tst.l d0 movem.l (sp)+,d2-d3/a2/a6 rts createtask: movem.l d2/d3/d4/a2/a3/a6,-(sp) move.l 4.w,a6 move.l d0,d4 move.l a0,d2 move.l a1,d3 move.l #92+2048,d0 move.l #65536+1,d1 jsr AllocMem(a6) tst.l d0 beq .f move.l d0,a2 move.b #1,8(a2) ;NT_TASK move.b d4,9(a2) ; priority move.l d2,10(a2) lea 92(a2),a3 move.l a3,58(a2) lea 2048(a3),a3 move.l a3,62(a2) move.l a3,54(a2) move.l a2,a1 move.l d3,a2 sub.l a3,a3 move.l a1,d2 jsr -$011a(a6) ;AddTask move.l d2,d0 .f movem.l (sp)+,d2/d3/d4/a2/a3/a6 rts ; mousehack/tablet mousehack_init: lea mhname(pc),a0 lea mousehack_task(pc),a1 moveq #19,d0 bsr createtask rts mhdoiotimer: move.l MH_TM(a5),a1 move.w #10,28(a1) ;TR_GETSYSTIME move.b #1,30(a1) ;IOF_QUICK jsr -$01c8(a6) ;DoIO move.l MH_TM(a5),a1 move.l 32(a1),14(a2) move.l 36(a1),18(a2) move.l MH_IO(a5),a1 move.b #1,30(a1) ;IOF_QUICK jsr -$01c8(a6) ;DoIO rts mhdoio: clr.l 14(a2) clr.l 18(a2) move.l MH_IO(a5),a1 move.b #1,30(a1) ;IOF_QUICK jsr -$01c8(a6) ;DoIO rts MH_E = 0 MH_CNT = 2 MH_MAXX = 4 MH_MAXY = 6 MH_MAXZ = 8 MH_X = 10 MH_Y = 12 MH_Z = 14 MH_RESX = 16 MH_RESY = 18 MH_MAXAX = 20 MH_MAXAY = 22 MH_MAXAZ = 24 MH_AX = 26 MH_AY = 28 MH_AZ = 30 MH_PRESSURE = 32 MH_BUTTONBITS = 34 MH_INPROXIMITY = 38 MH_ABSX = 40 MH_ABSY = 42 MH_DATA_SIZE = 44 MH_INT = 0 MH_FOO = (MH_INT+22) MH_FOO_CNT = 0 MH_FOO_BUTTONS = 4 MH_FOO_TASK = 8 MH_FOO_MASK = 12 MH_FOO_EXECBASE = 16 MH_FOO_INTBASE = 20 MH_FOO_GFXBASE = 24 MH_FOO_DELAY = 28 MH_FOO_DIMS_X = 32 MH_FOO_DIMS_Y = 36 MH_FOO_VPXY = 40 MH_FOO_MOFFSET = 44 MH_FOO_ALIVE = 48 MH_FOO_LIMITCNT = 52 MH_FOO_DIMS = 56 MH_FOO_DISP = (MH_FOO_DIMS+88) MH_FOO_PREFS = (MH_FOO_DISP+48) MH_FOO_SIZE = (MH_FOO_PREFS+102) PREFS_SIZE = 102 MH_IEV = (MH_FOO+MH_FOO_SIZE) ;InputEvent MH_IEH = (MH_IEV+22) ;InputHandler (Interrupt) MH_IEPT = (MH_IEH+22) ;IEPointerTable/IENewTablet MH_IENTTAGS = (MH_IEPT+32) ;space for ient_TagList MH_IO = (MH_IENTTAGS+16*4*2) MH_TM = (MH_IO+4) MH_DATA = (MH_TM+4) MH_END = (MH_DATA+MH_DATA_SIZE) MH_MOUSEHACK = 0 MH_TABLET = 1 MH_ACTIVE = 7 TAG_USER equ $80000000 TABLETA_Dummy EQU TAG_USER+$3A000 TABLETA_TabletZ EQU TABLETA_Dummy+$01 TABLETA_RangeZ EQU TABLETA_Dummy+$02 TABLETA_AngleX EQU TABLETA_Dummy+$03 TABLETA_AngleY EQU TABLETA_Dummy+$04 TABLETA_AngleZ EQU TABLETA_Dummy+$05 TABLETA_Pressure EQU TABLETA_Dummy+$06 TABLETA_ButtonBits EQU TABLETA_Dummy+$07 TABLETA_InProximity EQU TABLETA_Dummy+$08 TABLETA_ResolutionX EQU TABLETA_Dummy+$09 TABLETA_ResolutionY EQU TABLETA_Dummy+$0A DTAG_DISP EQU $80000000 DTAG_DIMS EQU $80001000 DTAG_MNTR EQU $80002000 DTAG_NAME EQU $80003000 getgfxlimits: movem.l d0-d4/a0-a6,-(sp) move.l a0,a5 sub.l a2,a2 sub.l a3,a3 sub.l a4,a4 moveq #0,d4 move.l MH_FOO_GFXBASE(a5),a6 move.l MH_FOO_INTBASE(a5),a0 move.l 60(a0),d0 ;FirstScreen beq.s .end move.l d0,a0 lea 44(a0),a0 ;ViewPort move.l a0,a4 jsr -$318(a6) ;GetVPModeID moveq #-1,d1 moveq #-1,d2 cmp.l d0,d1 beq.s .end move.l d0,d3 ; mouse offset move.l MH_FOO_INTBASE(a5),a6 lea MH_FOO_PREFS(a5),a0 moveq #PREFS_SIZE,d0 jsr -$84(a6) ;GetPrefs lea MH_FOO_PREFS(a5),a0 move.w 100(a0),d4 move.l MH_FOO_GFXBASE(a5),a6 ; Text Overscan area needed sub.l a0,a0 lea MH_FOO_DIMS(a5),a1 moveq #0,d0 move.w #88,d0 move.l #DTAG_DIMS,d1 move.l d3,d2 jsr -$2f4(a6) ;GetDisplayInfoData moveq #-1,d1 moveq #-1,d2 tst.l d0 bmi.s .end lea MH_FOO_DIMS(a5),a2 move.l 50(a2),d1 move.l 54(a2),d2 .end move.l 28(a4),d0 cmp.w MH_FOO_MOFFSET(a5),d4 bne.s .dosend cmp.l MH_FOO_VPXY(a5),d0 bne.s .dosend cmp.l MH_FOO_DIMS_X(a5),d1 bne.s .dosend cmp.l MH_FOO_DIMS_Y(a5),d2 beq.s .nosend .dosend move.l d0,MH_FOO_VPXY(a5) move.l d1,MH_FOO_DIMS_X(a5) move.l d2,MH_FOO_DIMS_Y(a5) move.w d4,MH_FOO_MOFFSET(a5) ; This only for doublescan properties bit.. sub.l a0,a0 lea MH_FOO_DISP(a5),a1 moveq #0,d0 move.w #88,d0 move.l #DTAG_DISP,d1 move.l d3,d2 jsr -$2f4(a6) ;GetDisplayInfoData tst.l d0 bmi.s .nomntr lea MH_FOO_DISP(a5),a3 .nomntr ;send updated data to native side move.w MH_FOO_MOFFSET(a5),d2 move.w #$FF38,d0 moveq #1,d1 bsr.w getrtbase jsr (a0) .nosend movem.l (sp)+,d0-d4/a0-a6 rts mousehack_task: move.l 4.w,a6 move.w 20(a6),d7 ; KS version moveq #-1,d0 jsr -$014a(a6) ;AllocSignal moveq #0,d6 bset d0,d6 sub.l a1,a1 jsr -$0126(a6) ;FindTask move.l d0,a4 moveq #20,d0 move.l a4,a1 jsr -$012c(a6) ;SetTaskPri moveq #0,d0 move.w #MH_END,d0 move.l #65536+1,d1 jsr AllocMem(a6) move.l d0,a5 lea MH_FOO(a5),a3 move.l a6,MH_FOO_EXECBASE(a3) move.l a4,MH_FOO_TASK(a3) move.l d6,MH_FOO_MASK(a3) moveq #-1,d0 move.w d0,MH_FOO_CNT(a3) ; send data structure address move.w #$FF38,d0 moveq #5,d1 bsr.w getrtbase move.l a5,d0 add.l #MH_DATA,d0 jsr (a0) lea MH_INT(a5),a1 move.b #2,8(a1) ;NT_INTERRUPT move.b #5,9(a1) ;priority lea mhname(pc),a0 move.l a0,10(a1) lea mousehackint(pc),a0 move.l a0,18(a1) move.l a5,14(a1) moveq #5,d0 ;INTB_VERTB jsr -$00a8(a6) mhloop move.l d6,d0 jsr -$013e(a6) ;Wait moveq #0,d0 subq.l #1,MH_FOO_DELAY(a3) bpl.s .delay1 moveq #10,d0 move.l d0,MH_FOO_DELAY(a3) .delay1 tst.l MH_FOO_INTBASE(a3) bne.s .intyes tst.l MH_FOO_DELAY(a3) bne.s mhloop lea intlibname(pc),a1 moveq #0,d0 jsr -$0228(a6) ;OpenLibrary move.l d0,MH_FOO_INTBASE(a3) beq.s mhloop .intyes tst.l MH_FOO_GFXBASE(a3) bne.s .gfxyes tst.l MH_FOO_DELAY(a3) bne.s mhloop lea gfxlibname(pc),a1 moveq #0,d0 jsr -$0228(a6) ;OpenLibrary move.l d0,MH_FOO_GFXBASE(a3) beq.w mhloop .gfxyes tst.l MH_IO(a5) bne.s .yesio tst.l MH_FOO_DELAY(a3) bne.s mhloop jsr -$0084(a6) ;Forbid lea 350(a6),a0 ;DeviceList lea inp_dev(pc),a1 jsr -$114(a6) ;FindName move.l d0,d2 jsr -$008a(a6) ;Permit tst.l d2 beq.s mhloop lea inp_dev(pc),a0 moveq #0,d0 moveq #0,d1 bsr.w allocdevice move.l d0,MH_IO(a5) beq.w mhend bra.w mhloop .yesio tst.l MH_TM(a5) bne.s .yestim tst.l MH_FOO_DELAY(a3) bne.w mhloop jsr -$0084(a6) ;Forbid lea 350(a6),a0 ;DeviceList lea tim_dev(pc),a1 jsr -$114(a6) ;FindName move.l d0,d2 jsr -$008a(a6) ;Permit tst.l d2 beq.w mhloop lea tim_dev(pc),a0 moveq #0,d0 moveq #0,d1 bsr.w allocdevice move.l d0,MH_TM(a5) beq.w mhend ;tell native side that mousehack is now active move.w #$FF38,d0 moveq #0,d1 bsr.w getrtbase jsr (a0) bra.w mhloop .yestim cmp.w #36,d7 bcs.s .nodims subq.l #1,MH_FOO_LIMITCNT(a3) bpl.s .nodims move.l a3,a0 bsr.w getgfxlimits moveq #50,d0 move.l d0,MH_FOO_LIMITCNT(a3) .nodims move.l MH_IO(a5),a1 lea MH_IEV(a5),a2 move.w #11,28(a1) ;IND_WRITEEVENT move.l #22,36(a1) ;sizeof(struct InputEvent) move.l a2,40(a1) move.b MH_E+MH_DATA(a5),d0 cmp.w #39,d7 bcs.w .notablet btst #MH_TABLET,d0 beq.w .notablet ;IENewTablet lea MH_IEPT(a5),a0 move.l a0,10(a2) ;ie_Addr move.b #$13,4(a2) ;ie_Class=IECLASS_NEWPOINTERPOS move.b #3,5(a2) ;ie_SubClass = IESUBCLASS_NEWTABLET clr.l (a0) ;ient_CallBack clr.l 4(a0) clr.l 8(a0) clr.w 12(a0) clr.w 6(a2) ;ie_Code bsr.w buttonstoqual move.w MH_X+MH_DATA(a5),12+2(a0) ;ient_TabletX clr.w 16(a0) move.w MH_Y++MH_DATA(a5),16+2(a0) ;ient_TabletY clr.w 20(a0) move.w MH_MAXX+MH_DATA(a5),20+2(a0) ;ient_RangeX clr.w 24(a0) move.w MH_MAXY+MH_DATA(a5),24+2(a0) ;ient_RangeY lea MH_IENTTAGS(a5),a1 move.l a1,28(a0) ;ient_TagList move.l #TABLETA_Pressure,(a1)+ move.w MH_PRESSURE+MH_DATA(a5),d0 ext.l d0 asl.l #8,d0 move.l d0,(a1)+ move.l #TABLETA_ButtonBits,(a1)+ move.l MH_BUTTONBITS+MH_DATA(a5),(a1)+ moveq #0,d0 move.w MH_RESX+MH_DATA(a5),d0 bmi.s .noresx move.l #TABLETA_ResolutionX,(a1)+ move.l d0,(a1)+ .noresx move.w MH_RESY+MH_DATA(a5),d0 bmi.s .noresy move.l #TABLETA_ResolutionY,(a1)+ move.l d0,(a1)+ .noresy move.w MH_MAXZ+MH_DATA(a5),d0 bmi.s .noz move.l #TABLETA_RangeZ,(a1)+ move.l d0,(a1)+ move.w MH_Z+MH_DATA(a5),d0 move.l #TABLETA_TabletZ,(a1)+ move.l d0,(a1)+ .noz move.w MH_MAXAX+MH_DATA(a5),d0 bmi.s .noax move.l #TABLETA_AngleX,(a1)+ move.w MH_AX+MH_DATA(a5),d0 ext.l d0 asl.l #8,d0 move.l d0,(a1)+ .noax move.w MH_MAXAY++MH_DATA(a5),d0 bmi.s .noay move.l #TABLETA_AngleY,(a1)+ move.w MH_AY+MH_DATA(a5),d0 ext.l d0 asl.l #8,d0 move.l d0,(a1)+ .noay move.w MH_MAXAZ++MH_DATA(a5),d0 bmi.s .noaz move.l #TABLETA_AngleZ,(a1)+ move.w MH_AZ+MH_DATA(a5),d0 ext.l d0 asl.l #8,d0 move.l d0,(a1)+ .noaz moveq #0,d0 move.w MH_INPROXIMITY+MH_DATA(a5),d0 bmi.s .noproxi move.l #TABLETA_InProximity,(a1)+ move.l d0,(a1)+ .noproxi clr.l (a1) ;TAG_DONE bsr.w mhdoio ;create mouse button events if button state changed move.w #$68,d3 ;IECODE_LBUTTON->IECODE_RBUTTON->IECODE_MBUTTON moveq #1,d2 move.l MH_BUTTONBITS+MH_DATA(a5),d4 .nextbut move.l d4,d0 and.l d2,d0 move.l MH_FOO_BUTTONS(a3),d1 and.l d2,d1 cmp.l d0,d1 beq.s .nobut clr.l (a2) move.w #$0200,4(a2) ;ie_Class=IECLASS_RAWMOUSE,ie_SubClass=0 clr.l 10(a2) ;ie_Addr/X+Y move.w d3,d1 tst.b d0 bne.s .butdown bset #7,d1 ;IECODE_UP_PREFIX .butdown move.w d1,6(a2) ;ie_Code clr.w 8(a2) ;ie_Qualifier bsr.w mhdoio .nobut addq.w #1,d3 add.w d2,d2 cmp.w #8,d2 bne.s .nextbut move.l d4,MH_FOO_BUTTONS(a3) .notablet move.b MH_E+MH_DATA(a5),d0 btst #MH_MOUSEHACK,d0 beq.w mhloop clr.l (a2) move.w #$0400,4(a2) ;IECLASS_POINTERPOS clr.w 6(a2) ;ie_Code bsr.w buttonstoqual move.l MH_FOO_INTBASE(a3),a0 move.w MH_ABSX+MH_DATA(a5),d0 move.w 34+14(a0),d1 add.w d1,d1 sub.w d1,d0 bpl.s .xn moveq #0,d0 .xn move.w d0,10(a2) move.w MH_ABSY+MH_DATA(a5),d0 move.w 34+12(a0),d1 add.w d1,d1 sub.w d1,d0 bpl.s .yn moveq #0,d0 .yn move.w d0,12(a2) bsr.w mhdoiotimer bra.w mhloop mhend rts buttonstoqual: ;IEQUALIFIER_MIDBUTTON=0x1000/IEQUALIFIER_RBUTTON=0x2000/IEQUALIFIER_LEFTBUTTON=0x4000 move.l MH_BUTTONBITS+MH_DATA(a5),d1 moveq #0,d0 btst #0,d1 beq.s .btq1 bset #14,d0 .btq1: btst #1,d1 beq.s .btq2 bset #13,d0 .btq2: btst #2,d1 beq.s .btq3 bset #12,d0 .btq3: move.w d0,8(a2) ;ie_Qualifier rts mousehackint: tst.l MH_IO(a1) beq.s .l1 tst.l MH_TM(a1) beq.s .l1 move.w MH_CNT+MH_DATA(a1),d0 cmp.w MH_FOO+MH_FOO_CNT(a1),d0 beq.s .l2 move.w d0,MH_FOO+MH_FOO_CNT(a1) .l1 move.l MH_FOO+MH_FOO_EXECBASE(a1),a6 move.l MH_FOO+MH_FOO_MASK(a1),d0 move.l MH_FOO+MH_FOO_TASK(a1),a1 jsr -$0144(a6) ; Signal .l2 subq.w #1,MH_FOO+MH_FOO_ALIVE(a1) bpl.s .l3 move.w #50,MH_FOO+MH_FOO_ALIVE(a1) move.w #$FF38,d0 moveq #2,d1 bsr.w getrtbase jsr (a0) .l3 lea $dff000,a0 moveq #0,d0 rts ; clipboard sharing CLIP_WRITE_SIZE = 0 CLIP_WRITE_ALLOC = (CLIP_WRITE_SIZE+4) CLIP_TASK = (CLIP_WRITE_ALLOC+4) CLIP_UNIT = (CLIP_TASK+4) CLIP_ID = (CLIP_UNIT+4) CLIP_EXEC = (CLIP_ID+4) CLIP_DOS = (CLIP_EXEC+4) CLIP_HOOK = (CLIP_DOS+4) CLIP_BUF = (CLIP_HOOK+20) CLIP_BUF_SIZE = 8 CLIP_POINTER_NOTIFY = (CLIP_BUF+CLIP_BUF_SIZE) CLIP_POINTER_PREFS = (CLIP_POINTER_NOTIFY+48) CLIP_END = (CLIP_POINTER_PREFS+32) clipboard_init: movem.l a5/a6,-(sp) move.w #$FF38,d0 moveq #17,d1 bsr.w getrtbase jsr (a0) btst #0,d0 beq.s .noclip move.l 4.w,a6 move.l #CLIP_END,d0 move.l #$10001,d1 jsr AllocMem(a6) tst.l d0 beq.w clipdie move.l d0,a5 move.l a6,CLIP_EXEC(a5) move.w #$FF38,d0 moveq #14,d1 bsr.w getrtbase move.l a5,d0 jsr (a0) ; we need to be a process, LoadLibrary() needs to call dos lea clname(pc),a0 lea clipboard_proc(pc),a1 moveq #-10,d0 move.l #10000,d1 bsr.w createproc .noclip moveq #0,d0 movem.l (sp)+,a5/a6 rts clipkill move.w #$FF38,d0 moveq #10,d1 bsr.w getrtbase jsr (a0) rts clipdie: bsr.s clipkill move.l a5,d0 beq.s .cd1 move.l CLIP_EXEC(a5),a6 move.l CLIP_DOS(a5),d0 beq.s .cd2 move.l d0,a1 jsr -414(a6) ; CloseLibrary .cd2 move.l a5,a1 move.l #CLIP_END,d0 jsr FreeMem(a6) .cd1 moveq #0,d0 rts prefsread: movem.l d2-d4/a2-a6,-(sp) move.l CLIP_DOS(a5),a6 lea pointer_prefs(pc),a0 move.l a0,d1 move.l #1005,d2 jsr -$001e(a6) ;Open move.l d0,d4 beq.s .pr1 lea CLIP_POINTER_PREFS(a5),a2 .pr4 clr.l (a2) .pr3 move.w 2(a2),(a2) move.l a2,d2 addq.l #2,d2 moveq #2,d3 move.l d4,d1 jsr -$002a(a6) ;Read cmp.l d0,d3 bne.s .pr1 cmp.l #'PNTR',(a2) bne.s .pr3 move.l a2,d2 moveq #4,d3 move.l d4,d1 jsr -$002a(a6) ;Read move.l a2,d2 moveq #32,d3 move.l d4,d1 jsr -$002a(a6) ;Read cmp.l d0,d3 bne.s .pr1 tst.w 16(a2) ;pp_Which bne.s .pr4 move.w #$FF38,d0 moveq #16,d1 bsr.w getrtbase jsr (a0) .pr1 move.l d4,d1 beq.s .pr2 jsr -$0024(a6) ;Close .pr2 movem.l (sp)+,d2-d4/a2-a6 rts prefshook: move.l CLIP_DOS(a5),a6 lea ram_name(pc),a0 move.l a0,d1 moveq #-2,d2 jsr -$0054(a6) ;Lock move.l d0,d1 beq.s .ph1 jsr -$005a(a6) ;Unlock move.l CLIP_EXEC(a5),a6 lea CLIP_POINTER_NOTIFY(a5),a2 moveq #-1,d0 jsr -$014a(a6) ;AllocSignal move.b d0,20(a2) ;nr_SignalNum lea pointer_prefs(pc),a0 move.l a0,(a2) ;nr_Name move.l #NRF_SEND_SIGNAL|NRF_NOTIFY_INITIAL,12(a2) ;nr_Flags move.l CLIP_TASK(a5),16(a2) ;nr_Task move.l CLIP_DOS(a5),a6 move.l a2,d1 jsr -$378(a6) ;StartNotify .ph1 move.l CLIP_EXEC(a5),a6 rts cnop 0,4 dc.l 16 clipboard_proc: dc.l 0 move.w #$FF38,d0 moveq #13,d1 bsr.w getrtbase jsr (a0) tst.l d0 beq.w clipdie move.l d0,a5 move.l CLIP_EXEC(a5),a6 sub.l a1,a1 jsr -294(a6) ; FindTask move.l d0,CLIP_TASK(a5) lea doslibname(pc),a1 moveq #0,d0 jsr -$0228(a6) ; OpenLibrary move.l d0,CLIP_DOS(a5) beq.w clipdie move.l d0,a6 .devsloop moveq #50,d1 jsr -$00c6(a6) ;Delay lea devs_name(pc),a0 move.l a0,d1 moveq #-2,d2 jsr -$0054(a6) ;Lock tst.l d0 beq.s .devsloop move.l d0,d1 jsr -$005a(a6) ;Unlock moveq #50,d1 jsr -$00c6(a6) ;Delay lea clip_name(pc),a0 move.l a0,d1 moveq #-2,d2 jsr -$0054(a6) ;Lock tst.l d0 beq.w clipdie move.l d0,d1 jsr -$005a(a6) ;Unlock move.l CLIP_EXEC(a5),a6 bsr.w createport moveq #0,d1 move.w #52,d1 bsr.w createio move.l d0,a4 tst.l d0 beq.w clipdie cfloop2 moveq #0,d0 bset #13,d0 jsr -$013e(a6) ;Wait moveq #0,d1 move.l CLIP_UNIT(a5),d0 lea clip_dev(pc),a0 move.l a4,a1 jsr -$01bc(a6) ;OpenDevice tst.l d0 bne.s cfloop2 move.l 20(a4),a0 ;device node cmp.w #37,20(a0) ;must be at least v37 bcc.s cfversion ;too lazy to free everything.. bsr.w clipkill cfloop3 moveq #0,d0 jsr -$013e(a6) ;Wait bra.s cfloop3 cfversion bsr.w prefshook lea CLIP_HOOK(a5),a0 move.l a0,40(a4) moveq #1,d0 move.l d0,36(a4) move.w #12,28(a4) ;CBD_CHANGEHOOK move.l a5,CLIP_HOOK+16(a5) lea cliphook(pc),a0 move.l a0,CLIP_HOOK+8(a5) move.l a4,a1 jsr -$01c8(a6) ;DoIO move.w #$FF38,d0 moveq #15,d1 bsr.w getrtbase jsr (a0) tst.l CLIP_WRITE_SIZE(a5) bne.s clipsignal cfloop moveq #0,d0 moveq #0,d2 move.b CLIP_POINTER_NOTIFY+20(a5),d2 bset d2,d0 bset #13,d0 jsr -$013e(a6) ;Wait btst d2,d0 beq.s clipsignal bsr.w prefsread bra.s cfloop clipsignal move.l CLIP_WRITE_SIZE(a5),d0 beq.w clipread ;allocate amiga-side space moveq #1,d1 jsr AllocMem(a6) move.l d0,CLIP_WRITE_ALLOC(a5) ;and notify host-side move.w #$FF38,d0 moveq #12,d1 bsr.w getrtbase jsr (a0) tst.l d0 beq.s .nowrite ; and now we should have the data in CLIP_WRITE_ALLOC tst.l CLIP_WRITE_ALLOC(a5) beq.s .nowrite move.w #3,28(a4) ;CMD_WRITE clr.b 31(a4) clr.l 32(a4) move.l CLIP_WRITE_SIZE(a5),36(a4) move.l CLIP_WRITE_ALLOC(a5),40(a4) clr.l 44(a4) clr.l 48(a4) move.l a4,a1 jsr -$01c8(a6) ;DoIO move.l 48(a4),CLIP_ID(a5) move.w #4,28(a4) ;CMD_UPDATE move.l a4,a1 jsr -$01c8(a6) ;DoIO .nowrite move.l CLIP_WRITE_SIZE(a5),d0 clr.l CLIP_WRITE_SIZE(a5) move.l CLIP_WRITE_ALLOC(a5),d1 beq.w cfloop move.l d1,a1 jsr FreeMem(a6) bra.w cfloop clipread: ; read first 8 bytes move.w #2,28(a4) ;CMD_READ lea CLIP_BUF(a5),a0 clr.l (a0) clr.l 4(a0) clr.b 31(a4) clr.l 44(a4) clr.l 48(a4) move.l a0,40(a4) moveq #8,d0 move.l d0,36(a4) move.l a4,a1 jsr -$01c8(a6) ;DoIO cmp.l #'FORM',CLIP_BUF(a5) bne.s .cf1 move.l CLIP_BUF+4(a5),d0 beq.s .cf1 bmi.s .cf1 move.l 48(a4),CLIP_ID(a5) addq.l #8,d0 move.l d0,d2 moveq #1,d1 jsr AllocMem(a6) tst.l d0 beq.s .cf1 move.l d0,a2 ; read the rest move.l a2,a0 move.l CLIP_BUF(a5),(a0)+ move.l CLIP_BUF+4(a5),(a0)+ move.l a0,40(a4) move.l d2,d0 subq.l #8,d0 move.l d0,36(a4) move.l a4,a1 jsr -$01c8(a6) ;DoIO move.w #$FF38,d0 moveq #11,d1 bsr.w getrtbase move.l 32(a4),d0 jsr (a0) move.l a2,a1 move.l d2,d0 jsr FreeMem(a6) .cf1 ; tell clipboard.device that we are done (read until io_Actual==0) tst.l 32(a4) beq.w cfloop lea CLIP_BUF(a5),a0 move.l a0,40(a4) moveq #1,d0 move.l d0,36(a4) clr.l 32(a4) move.l a4,a1 jsr -$01c8(a6) ;DoIO bra.s .cf1 cliphook: lea -CLIP_HOOK(a0),a0 move.l 8(a1),d0 cmp.l CLIP_ID(a0),d0 ;ClipHookMsg->chm_ClipID beq.s .same move.l d0,CLIP_ID(a0) move.l a6,-(sp) move.l CLIP_EXEC(a0),a6 move.l CLIP_TASK(a0),a1 moveq #0,d0 bset #13,d0 ;SIG_D jsr -$0144(a6) ;Signal move.l (sp)+,a6 .same moveq #0,d0 rts consolehook: move.l 4.w,a6 moveq #-1,d2 move.w #$FF38,d0 moveq #17,d1 bsr.w getrtbase jsr (a0) btst #1,d0 beq.s .ch2 moveq #0,d2 jsr -$0084(a6) ;Forbid lea 350(a6),a0 ;DeviceList lea con_dev(pc),a1 jsr -$114(a6) ;FindName tst.l d0 beq.s .ch1 move.l d0,a0 lea chook(pc),a1 move.l -$1e+2(a0),a2 ; BeginIO move.l a1,-$1e+2(a0) move.l a0,a1 move.w #$FF38,d0 moveq #101,d1 bsr.w getrtbase jsr (a0) moveq #1,d2 .ch1 jsr -$008a(a6) ;Permit .ch2 move.l d2,d0 rts chook: subq.l #4,sp ; native code fills with original return address movem.l d0-d1/a0,-(sp) move.w #$FF38,d0 moveq #102,d1 bsr.w getrtbase jsr (a0) movem.l (sp)+,d0-d1/a0 rts getrtbase: lea start-8-4(pc),a0 and.l #$FFFF,d0 add.l d0,a0 rts inp_dev: dc.b 'input.device',0 tim_dev: dc.b 'timer.device',0 con_dev: dc.b 'console.device',0 devsn_name: dc.b 'DEVS',0 devs_name: dc.b 'DEVS:',0 clip_name: dc.b 'DEVS:clipboard.device',0 ram_name: dc.b 'RAM:',0 clip_dev: dc.b 'clipboard.device',0 ;argghh but StartNotify()ing non-existing ENV: causes "Insert disk ENV: in any drive" dialog.. pointer_prefs: dc.b 'RAM:Env/Sys/Pointer.prefs',0 clname: dc.b 'UAE clipboard sharing',0 mhname: dc.b 'UAE mouse driver',0 kaname: dc.b 'UAE heart beat',0 exter_name: dc.b 'UAE filesystem',0 fstaskname: dc.b 'UAE fs automounter',0 fsprocname: dc.b 'UAE fs automount process',0 doslibname: dc.b 'dos.library',0 intlibname: dc.b 'intuition.library',0 gfxlibname: dc.b 'graphics.library',0 explibname: dc.b 'expansion.library',0 fsresname: dc.b 'FileSystem.resource',0 fchipname: dc.b 'megachip memory',0 END fs-uae-2.2.3+dfsg/src/genlinetoscr.cpp0000644000175000017500000003515712162366655020057 0ustar glaubitzglaubitz/* * E-UAE - The portable Amiga Emulator * * Generate pixel output code. * * (c) 2006 Richard Drummond */ #include #include #include /* Output for big-endian target if true, little-endian is false. */ int do_bigendian; typedef int DEPTH_T; #define DEPTH_8BPP 0 #define DEPTH_16BPP 1 #define DEPTH_32BPP 2 #define DEPTH_MAX DEPTH_32BPP static const char *get_depth_str (DEPTH_T bpp) { if (bpp == DEPTH_8BPP) return "8"; else if (bpp == DEPTH_16BPP) return "16"; else return "32"; } static const char *get_depth_type_str (DEPTH_T bpp) { if (bpp == DEPTH_8BPP) return "uae_u8"; else if (bpp == DEPTH_16BPP) return "uae_u16"; else return "uae_u32"; } typedef int HMODE_T; #define HMODE_NORMAL 0 #define HMODE_DOUBLE 1 #define HMODE_DOUBLE2X 2 #define HMODE_HALVE1 3 #define HMODE_HALVE1F 4 #define HMODE_HALVE2 5 #define HMODE_HALVE2F 6 #define HMODE_MAX HMODE_HALVE2F static const char *get_hmode_str (HMODE_T hmode) { if (hmode == HMODE_DOUBLE) return "_stretch1"; else if (hmode == HMODE_DOUBLE2X) return "_stretch2"; else if (hmode == HMODE_HALVE1) return "_shrink1"; else if (hmode == HMODE_HALVE1F) return "_shrink1f"; else if (hmode == HMODE_HALVE2) return "_shrink2"; else if (hmode == HMODE_HALVE2F) return "_shrink2f"; else return ""; } typedef enum { CMODE_NORMAL, CMODE_DUALPF, CMODE_EXTRAHB, CMODE_HAM } CMODE_T; #define CMODE_MAX CMODE_HAM static FILE *outfile; static unsigned int outfile_indent = 0; void set_outfile (FILE *f) { outfile = f; } int set_indent (int indent) { int old_indent = outfile_indent; outfile_indent = indent; return old_indent; } void outln (const char *s) { unsigned int i; for (i = 0; i < outfile_indent; i++) fputc (' ', outfile); fprintf (outfile, "%s\n", s); } void outlnf (const char *s, ...) { va_list ap; unsigned int i; for (i = 0; i < outfile_indent; i++) fputc (' ', outfile); va_start (ap, s); vfprintf (outfile, s, ap); fputc ('\n', outfile); } static void out_linetoscr_decl (DEPTH_T bpp, HMODE_T hmode, int aga, int spr) { outlnf ("static int NOINLINE linetoscr_%s%s%s%s (int spix, int dpix, int dpix_end)", get_depth_str (bpp), get_hmode_str (hmode), aga ? "_aga" : "", spr ? "_spr" : ""); } static void out_linetoscr_do_srcpix (DEPTH_T bpp, HMODE_T hmode, int aga, CMODE_T cmode, int spr) { if (aga && cmode != CMODE_DUALPF) { if (spr) outln ( " sprpix_val = pixdata.apixels[spix];"); outln ( " spix_val = pixdata.apixels[spix] ^ xor_val;"); } else if (cmode != CMODE_HAM) { outln ( " spix_val = pixdata.apixels[spix];"); if (spr) outln ( " sprpix_val = spix_val;"); } } static void out_linetoscr_do_dstpix (DEPTH_T bpp, HMODE_T hmode, int aga, CMODE_T cmode, int spr) { if (aga && cmode == CMODE_HAM) { outln ( " dpix_val = CONVERT_RGB (ham_linebuf[spix]);"); if (spr) outln ( " sprpix_val = dpix_val;"); } else if (cmode == CMODE_HAM) { outln ( " dpix_val = xcolors[ham_linebuf[spix]];"); if (spr) outln ( " sprpix_val = dpix_val;"); } else if (aga && cmode == CMODE_DUALPF) { outln ( " {"); outln ( " uae_u8 val = lookup[spix_val];"); outln ( " if (lookup_no[spix_val])"); outln ( " val += dblpfofs[bpldualpf2of];"); outln ( " val ^= xor_val;"); outln ( " dpix_val = colors_for_drawing.acolors[val];"); outln ( " }"); } else if (cmode == CMODE_DUALPF) { outln ( " dpix_val = colors_for_drawing.acolors[lookup[spix_val]];"); } else if (aga && cmode == CMODE_EXTRAHB) { outln ( " if (spix_val >= 32 && spix_val < 64) {"); outln ( " unsigned int c = (colors_for_drawing.color_regs_aga[spix_val - 32] >> 1) & 0x7F7F7F;"); outln ( " dpix_val = CONVERT_RGB (c);"); outln ( " } else"); outln ( " dpix_val = colors_for_drawing.acolors[spix_val];"); } else if (cmode == CMODE_EXTRAHB) { outln ( " if (spix_val <= 31)"); outln ( " dpix_val = colors_for_drawing.acolors[spix_val];"); outln ( " else"); outln ( " dpix_val = xcolors[(colors_for_drawing.color_regs_ecs[spix_val - 32] >> 1) & 0x777];"); } else outln ( " dpix_val = colors_for_drawing.acolors[spix_val];"); } static void out_linetoscr_do_incspix (DEPTH_T bpp, HMODE_T hmode, int aga, CMODE_T cmode, int spr) { if (hmode == HMODE_HALVE1F) { outln ( " {"); outln ( " uae_u32 tmp_val;"); outln ( " spix++;"); outln ( " tmp_val = dpix_val;"); out_linetoscr_do_srcpix (bpp, hmode, aga, cmode, spr); out_linetoscr_do_dstpix (bpp, hmode, aga, cmode, spr); outlnf ( " dpix_val = merge_2pixel%d (dpix_val, tmp_val);", bpp == 0 ? 8 : bpp == 1 ? 16 : 32); outln ( " spix++;"); outln ( " }"); } else if (hmode == HMODE_HALVE2F) { outln ( " {"); outln ( " uae_u32 tmp_val, tmp_val2, tmp_val3;"); outln ( " spix++;"); outln ( " tmp_val = dpix_val;"); out_linetoscr_do_srcpix (bpp, hmode, aga, cmode, spr); out_linetoscr_do_dstpix (bpp, hmode, aga, cmode, spr); outln ( " spix++;"); outln ( " tmp_val2 = dpix_val;"); out_linetoscr_do_srcpix (bpp, hmode, aga, cmode, spr); out_linetoscr_do_dstpix (bpp, hmode, aga, cmode, spr); outln ( " spix++;"); outln ( " tmp_val3 = dpix_val;"); out_linetoscr_do_srcpix (bpp, hmode, aga, cmode, spr); out_linetoscr_do_dstpix (bpp, hmode, aga, cmode, spr); outlnf ( " tmp_val = merge_2pixel%d (tmp_val, tmp_val2);", bpp == 0 ? 8 : bpp == 1 ? 16 : 32); outlnf ( " tmp_val2 = merge_2pixel%d (tmp_val3, dpix_val);", bpp == 0 ? 8 : bpp == 1 ? 16 : 32); outlnf ( " dpix_val = merge_2pixel%d (tmp_val, tmp_val2);", bpp == 0 ? 8 : bpp == 1 ? 16 : 32); outln ( " spix++;"); outln ( " }"); } else if (hmode == HMODE_HALVE1) { outln ( " spix += 2;"); } else if (hmode == HMODE_HALVE2) { outln ( " spix += 4;"); } else { outln ( " spix++;"); } } static void put_dpix (const char *var) { outlnf (" buf[dpix++] = %s;", var); } static void out_sprite (DEPTH_T bpp, HMODE_T hmode, CMODE_T cmode, int aga, int cnt) { if (aga) { if (cnt == 1) { outlnf ( " if (spritepixels[dpix].data) {"); outlnf ( " sprcol = render_sprites (dpix + 0, %d, sprpix_val, %d);", cmode == CMODE_DUALPF ? 1 : 0, aga); outlnf ( " if (sprcol)"); outlnf ( " out_val = colors_for_drawing.acolors[sprcol];"); outlnf ( " }"); put_dpix ("out_val"); } else if (cnt == 2) { outlnf ( " {"); outlnf ( " uae_u32 out_val1 = out_val;"); outlnf ( " uae_u32 out_val2 = out_val;"); outlnf ( " if (spritepixels[dpix + 0].data) {"); outlnf ( " sprcol = render_sprites (dpix + 0, %d, sprpix_val, %d);", cmode == CMODE_DUALPF ? 1 : 0, aga); outlnf ( " if (sprcol)"); outlnf ( " out_val1 = colors_for_drawing.acolors[sprcol];"); outlnf ( " }"); outlnf ( " if (spritepixels[dpix + 1].data) {"); outlnf ( " sprcol = render_sprites (dpix + 1, %d, sprpix_val, %d);", cmode == CMODE_DUALPF ? 1 : 0, aga); outlnf ( " if (sprcol)"); outlnf ( " out_val2 = colors_for_drawing.acolors[sprcol];"); outlnf ( " }"); put_dpix ("out_val1"); put_dpix ("out_val2"); outlnf ( " }"); } else if (cnt == 4) { outlnf ( " {"); outlnf ( " uae_u32 out_val1 = out_val;"); outlnf ( " uae_u32 out_val2 = out_val;"); outlnf ( " uae_u32 out_val3 = out_val;"); outlnf ( " uae_u32 out_val4 = out_val;"); outlnf ( " if (spritepixels[dpix + 0].data) {"); outlnf ( " sprcol = render_sprites (dpix + 0, %d, sprpix_val, %d);", cmode == CMODE_DUALPF ? 1 : 0, aga); outlnf ( " if (sprcol)"); outlnf ( " out_val1 = colors_for_drawing.acolors[sprcol];"); outlnf ( " }"); outlnf ( " if (spritepixels[dpix + 1].data) {"); outlnf ( " sprcol = render_sprites (dpix + 1, %d, sprpix_val, %d);", cmode == CMODE_DUALPF ? 1 : 0, aga); outlnf ( " if (sprcol)"); outlnf ( " out_val2 = colors_for_drawing.acolors[sprcol];"); outlnf ( " }"); outlnf ( " if (spritepixels[dpix + 2].data) {"); outlnf ( " sprcol = render_sprites (dpix + 2, %d, sprpix_val, %d);", cmode == CMODE_DUALPF ? 1 : 0, aga); outlnf ( " if (sprcol)"); outlnf ( " out_val3 = colors_for_drawing.acolors[sprcol];"); outlnf ( " }"); outlnf ( " if (spritepixels[dpix + 3].data) {"); outlnf ( " sprcol = render_sprites (dpix + 3, %d, sprpix_val, %d);", cmode == CMODE_DUALPF ? 1 : 0, aga); outlnf ( " if (sprcol)"); outlnf ( " out_val4 = colors_for_drawing.acolors[sprcol];"); outlnf ( " }"); put_dpix ("out_val1"); put_dpix ("out_val2"); put_dpix ("out_val3"); put_dpix ("out_val4"); outlnf ( " }"); } } else { outlnf ( " if (spritepixels[dpix].data) {"); outlnf ( " sprcol = render_sprites (dpix, %d, sprpix_val, %d);", cmode == CMODE_DUALPF ? 1 : 0, aga); outlnf ( " if (sprcol) {"); outlnf ( " uae_u32 spcol = colors_for_drawing.acolors[sprcol];"); outlnf ( " out_val = spcol;"); outlnf ( " }"); outlnf ( " }"); while (cnt-- > 0) put_dpix ("out_val"); } } static void out_linetoscr_mode (DEPTH_T bpp, HMODE_T hmode, int aga, int spr, CMODE_T cmode) { int old_indent = set_indent (8); if (aga && cmode == CMODE_DUALPF) { outln ( "int *lookup = bpldualpfpri ? dblpf_ind2_aga : dblpf_ind1_aga;"); outln ( "int *lookup_no = bpldualpfpri ? dblpf_2nd2 : dblpf_2nd1;"); } else if (cmode == CMODE_DUALPF) outln ( "int *lookup = bpldualpfpri ? dblpf_ind2 : dblpf_ind1;"); /* TODO: add support for combining pixel writes in 8-bpp modes. */ if (bpp == DEPTH_16BPP && hmode != HMODE_DOUBLE && hmode != HMODE_DOUBLE2X && spr == 0) { outln ( "int rem;"); outln ( "if (((long)&buf[dpix]) & 2) {"); outln ( " uae_u32 spix_val;"); outln ( " uae_u32 dpix_val;"); out_linetoscr_do_srcpix (bpp, hmode, aga, cmode, spr); out_linetoscr_do_dstpix (bpp, hmode, aga, cmode, spr); out_linetoscr_do_incspix (bpp, hmode, aga, cmode, spr); put_dpix ("dpix_val"); outln ( "}"); outln ( "if (dpix >= dpix_end)"); outln ( " return spix;"); outln ( "rem = (((long)&buf[dpix_end]) & 2);"); outln ( "if (rem)"); outln ( " dpix_end--;"); } outln ( "while (dpix < dpix_end) {"); if (spr) outln ( " uae_u32 sprpix_val;"); outln ( " uae_u32 spix_val;"); outln ( " uae_u32 dpix_val;"); outln ( " uae_u32 out_val;"); outln ( ""); out_linetoscr_do_srcpix (bpp, hmode, aga, cmode, spr); out_linetoscr_do_dstpix (bpp, hmode, aga, cmode, spr); out_linetoscr_do_incspix (bpp, hmode, aga, cmode, spr); outln ( " out_val = dpix_val;"); if (hmode != HMODE_DOUBLE && hmode != HMODE_DOUBLE2X && bpp == DEPTH_16BPP && spr == 0) { out_linetoscr_do_srcpix (bpp, hmode, aga, cmode, spr); out_linetoscr_do_dstpix (bpp, hmode, aga, cmode, spr); out_linetoscr_do_incspix (bpp, hmode, aga, cmode, spr); if (do_bigendian) outln ( " out_val = (out_val << 16) | (dpix_val & 0xFFFF);"); else outln ( " out_val = (out_val & 0xFFFF) | (dpix_val << 16);"); } if (hmode == HMODE_DOUBLE) { if (bpp == DEPTH_8BPP) { outln ( " *((uae_u16 *)&buf[dpix]) = (uae_u16) out_val;"); outln ( " dpix += 2;"); } else if (bpp == DEPTH_16BPP) { if (spr) { out_sprite (bpp, hmode, cmode, aga, 2); } else { outln ( " *((uae_u32 *)&buf[dpix]) = out_val;"); outln ( " dpix += 2;"); } } else { if (spr) { out_sprite (bpp, hmode, cmode, aga, 2); } else { put_dpix ("out_val"); put_dpix ("out_val"); } } } else if (hmode == HMODE_DOUBLE2X) { if (bpp == DEPTH_8BPP) { outln ( " *((uae_u32 *)&buf[dpix]) = (uae_u32) out_val;"); outln ( " dpix += 4;"); } else if (bpp == DEPTH_16BPP) { if (spr) { out_sprite (bpp, hmode, cmode, aga, 4); } else { outln ( " *((uae_u32 *)&buf[dpix]) = out_val;"); outln ( " dpix += 2;"); outln ( " *((uae_u32 *)&buf[dpix]) = out_val;"); outln ( " dpix += 2;"); } } else { if (spr) { out_sprite (bpp, hmode, cmode, aga, 4); } else { put_dpix ("out_val"); put_dpix ("out_val"); put_dpix ("out_val"); put_dpix ("out_val"); } } } else { if (bpp == DEPTH_16BPP) { if (spr) { out_sprite (bpp, hmode, cmode, aga, 1); } else { outln ( " *((uae_u32 *)&buf[dpix]) = out_val;"); outln ( " dpix += 2;"); } } else { if (spr) { out_sprite (bpp, hmode, cmode, aga, 1); } else { put_dpix ("out_val"); } } } outln ( "}"); if (bpp == DEPTH_16BPP && hmode != HMODE_DOUBLE && hmode != HMODE_DOUBLE2X && spr == 0) { outln ( "if (rem) {"); outln ( " uae_u32 spix_val;"); outln ( " uae_u32 dpix_val;"); out_linetoscr_do_srcpix (bpp, hmode, aga, cmode, spr); out_linetoscr_do_dstpix (bpp, hmode, aga, cmode, spr); out_linetoscr_do_incspix (bpp, hmode, aga, cmode, spr); put_dpix ("dpix_val"); outln ( "}"); } set_indent (old_indent); return; } static void out_linetoscr (DEPTH_T bpp, HMODE_T hmode, int aga, int spr) { if (aga) outln ("#ifdef AGA"); out_linetoscr_decl (bpp, hmode, aga, spr); outln ( "{"); outlnf ( " %s *buf = (%s *) xlinebuffer;", get_depth_type_str (bpp), get_depth_type_str (bpp)); if (spr) outln ( " uae_u8 sprcol;"); if (aga) outln ( " uae_u8 xor_val = bplxor;"); outln ( ""); outln ( " if (dp_for_drawing->ham_seen) {"); out_linetoscr_mode (bpp, hmode, aga, spr, CMODE_HAM); outln ( " } else if (bpldualpf) {"); out_linetoscr_mode (bpp, hmode, aga, spr, CMODE_DUALPF); outln ( " } else if (bplehb) {"); out_linetoscr_mode (bpp, hmode, aga, spr, CMODE_EXTRAHB); outln ( " } else {"); out_linetoscr_mode (bpp, hmode, aga, spr, CMODE_NORMAL); outln ( " }\n"); outln ( " return spix;"); outln ( "}"); if (aga) outln ( "#endif"); outln ( ""); } int main (int argc, char *argv[]) { DEPTH_T bpp; int aga, spr; HMODE_T hmode; unsigned int i; do_bigendian = 0; for (i = 1; i < argc; i++) { if (argv[i][0] != '-') continue; if (argv[i][1] == 'b' && argv[i][2] == '\0') do_bigendian = 1; } set_outfile (stdout); outln ("/*"); outln (" * E-UAE - The portable Amiga emulator."); outln (" *"); outln (" * This file was generated by genlinetoscr. Don't edit."); outln (" */"); outln (""); for (bpp = DEPTH_16BPP; bpp <= DEPTH_MAX; bpp++) { for (aga = 0; aga <= 1 ; aga++) { if (aga && bpp == DEPTH_8BPP) continue; for (spr = 0; spr <= 1; spr++) { for (hmode = HMODE_NORMAL; hmode <= HMODE_MAX; hmode++) out_linetoscr (bpp, hmode, aga, spr); } } } return 0; } fs-uae-2.2.3+dfsg/src/cfgfile.cpp0000644000175000017500000051077212162366654016762 0ustar glaubitzglaubitz/* * UAE - The Un*x Amiga Emulator * * Config file handling * This still needs some thought before it's complete... * * Copyright 1998 Brian King, Bernd Schmidt */ #include "sysconfig.h" #include "sysdeps.h" #include #include "options.h" #include "uae.h" #include "audio.h" #include "autoconf.h" #include "events.h" #include "custom.h" #include "inputdevice.h" #include "gfxfilter.h" #include "savestate.h" #include "uae/memory.h" #include "rommgr.h" #include "gui.h" #include "newcpu.h" #include "zfile.h" #include "filesys.h" #include "fsdb.h" #include "disk.h" #include "blkdev.h" #include "statusline.h" #include "debug.h" #include "calc.h" static int config_newfilesystem; static struct strlist *temp_lines; static struct zfile *default_file, *configstore; static int uaeconfig; static int unicode_config = 0; /* @@@ need to get rid of this... just cut part of the manual and print that * as a help text. */ struct cfg_lines { const TCHAR *config_label, *config_help; }; static const struct cfg_lines opttable[] = { {_T("help"), _T("Prints this help") }, {_T("config_description"), _T("") }, {_T("config_info"), _T("") }, {_T("use_gui"), _T("Enable the GUI? If no, then goes straight to emulator") }, {_T("use_debugger"), _T("Enable the debugger?") }, {_T("cpu_speed"), _T("can be max, real, or a number between 1 and 20") }, {_T("cpu_model"), _T("Can be 68000, 68010, 68020, 68030, 68040, 68060") }, {_T("fpu_model"), _T("Can be 68881, 68882, 68040, 68060") }, {_T("cpu_compatible"), _T("yes enables compatibility-mode") }, {_T("cpu_24bit_addressing"), _T("must be set to 'no' in order for Z3mem or P96mem to work") }, {_T("autoconfig"), _T("yes = add filesystems and extra ram") }, {_T("log_illegal_mem"), _T("print illegal memory access by Amiga software?") }, {_T("fastmem_size"), _T("Size in megabytes of fast-memory") }, {_T("chipmem_size"), _T("Size in megabytes of chip-memory") }, {_T("bogomem_size"), _T("Size in megabytes of bogo-memory at 0xC00000") }, {_T("a3000mem_size"), _T("Size in megabytes of A3000 memory") }, {_T("gfxcard_size"), _T("Size in megabytes of Picasso96 graphics-card memory") }, {_T("z3mem_size"), _T("Size in megabytes of Zorro-III expansion memory") }, {_T("gfx_test_speed"), _T("Test graphics speed?") }, {_T("gfx_framerate"), _T("Print every nth frame") }, {_T("gfx_width"), _T("Screen width") }, {_T("gfx_height"), _T("Screen height") }, {_T("gfx_refreshrate"), _T("Fullscreen refresh rate") }, {_T("gfx_vsync"), _T("Sync screen refresh to refresh rate") }, {_T("gfx_lores"), _T("Treat display as lo-res?") }, {_T("gfx_linemode"), _T("Can be none, double, or scanlines") }, {_T("gfx_fullscreen_amiga"), _T("Amiga screens are fullscreen?") }, {_T("gfx_fullscreen_picasso"), _T("Picasso screens are fullscreen?") }, {_T("gfx_center_horizontal"), _T("Center display horizontally?") }, {_T("gfx_center_vertical"), _T("Center display vertically?") }, {_T("gfx_colour_mode"), _T("") }, {_T("32bit_blits"), _T("Enable 32 bit blitter emulation") }, {_T("immediate_blits"), _T("Perform blits immediately") }, {_T("show_leds"), _T("LED display") }, {_T("keyboard_leds"), _T("Keyboard LEDs") }, {_T("gfxlib_replacement"), _T("Use graphics.library replacement?") }, {_T("sound_output"), _T("") }, {_T("sound_frequency"), _T("") }, {_T("sound_bits"), _T("") }, {_T("sound_channels"), _T("") }, {_T("sound_max_buff"), _T("") }, {_T("comp_trustbyte"), _T("How to access bytes in compiler (direct/indirect/indirectKS/afterPic") }, {_T("comp_trustword"), _T("How to access words in compiler (direct/indirect/indirectKS/afterPic") }, {_T("comp_trustlong"), _T("How to access longs in compiler (direct/indirect/indirectKS/afterPic") }, {_T("comp_nf"), _T("Whether to optimize away flag generation where possible") }, {_T("comp_fpu"), _T("Whether to provide JIT FPU emulation") }, {_T("compforcesettings"), _T("Whether to force the JIT compiler settings") }, {_T("cachesize"), _T("How many MB to use to buffer translated instructions")}, {_T("override_dga_address"),_T("Address from which to map the frame buffer (upper 16 bits) (DANGEROUS!)")}, {_T("avoid_cmov"), _T("Set to yes on machines that lack the CMOV instruction") }, {_T("avoid_dga"), _T("Set to yes if the use of DGA extension creates problems") }, {_T("avoid_vid"), _T("Set to yes if the use of the Vidmode extension creates problems") }, {_T("parallel_on_demand"), _T("") }, {_T("serial_on_demand"), _T("") }, {_T("scsi"), _T("scsi.device emulation") }, {_T("joyport0"), _T("") }, {_T("joyport1"), _T("") }, {_T("pci_devices"), _T("List of PCI devices to make visible to the emulated Amiga") }, {_T("kickstart_rom_file"), _T("Kickstart ROM image, (C) Copyright Amiga, Inc.") }, {_T("kickstart_ext_rom_file"), _T("Extended Kickstart ROM image, (C) Copyright Amiga, Inc.") }, {_T("kickstart_key_file"), _T("Key-file for encrypted ROM images (from Cloanto's Amiga Forever)") }, {_T("flash_ram_file"), _T("Flash/battery backed RAM image file.") }, {_T("cart_file"), _T("Freezer cartridge ROM image file.") }, {_T("floppy0"), _T("Diskfile for drive 0") }, {_T("floppy1"), _T("Diskfile for drive 1") }, {_T("floppy2"), _T("Diskfile for drive 2") }, {_T("floppy3"), _T("Diskfile for drive 3") }, {_T("hardfile"), _T("access,sectors, surfaces, reserved, blocksize, path format") }, {_T("filesystem"), _T("access,'Amiga volume-name':'host directory path' - where 'access' can be 'read-only' or 'read-write'") }, {_T("catweasel"), _T("Catweasel board io base address") } }; static const TCHAR *guimode1[] = { _T("no"), _T("yes"), _T("nowait"), 0 }; static const TCHAR *guimode2[] = { _T("false"), _T("true"), _T("nowait"), 0 }; static const TCHAR *guimode3[] = { _T("0"), _T("1"), _T("nowait"), 0 }; static const TCHAR *csmode[] = { _T("ocs"), _T("ecs_agnus"), _T("ecs_denise"), _T("ecs"), _T("aga"), 0 }; static const TCHAR *linemode[] = { _T("none"), _T("none"), _T("double"), _T("scanlines"), 0 }; static const TCHAR *speedmode[] = { _T("max"), _T("real"), 0 }; static const TCHAR *colormode1[] = { _T("8bit"), _T("15bit"), _T("16bit"), _T("8bit_dither"), _T("4bit_dither"), _T("32bit"), 0 }; static const TCHAR *colormode2[] = { _T("8"), _T("15"), _T("16"), _T("8d"), _T("4d"), _T("32"), 0 }; static const TCHAR *soundmode1[] = { _T("none"), _T("interrupts"), _T("normal"), _T("exact"), 0 }; static const TCHAR *soundmode2[] = { _T("none"), _T("interrupts"), _T("good"), _T("best"), 0 }; static const TCHAR *centermode1[] = { _T("none"), _T("simple"), _T("smart"), 0 }; static const TCHAR *centermode2[] = { _T("false"), _T("true"), _T("smart"), 0 }; static const TCHAR *stereomode[] = { _T("mono"), _T("stereo"), _T("clonedstereo"), _T("4ch"), _T("clonedstereo6ch"), _T("6ch"), _T("mixed"), 0 }; static const TCHAR *interpolmode[] = { _T("none"), _T("anti"), _T("sinc"), _T("rh"), _T("crux"), 0 }; static const TCHAR *collmode[] = { _T("none"), _T("sprites"), _T("playfields"), _T("full"), 0 }; static const TCHAR *compmode[] = { _T("direct"), _T("indirect"), _T("indirectKS"), _T("afterPic"), 0 }; static const TCHAR *flushmode[] = { _T("soft"), _T("hard"), 0 }; static const TCHAR *kbleds[] = { _T("none"), _T("POWER"), _T("DF0"), _T("DF1"), _T("DF2"), _T("DF3"), _T("HD"), _T("CD"), 0 }; static const TCHAR *onscreenleds[] = { _T("false"), _T("true"), _T("rtg"), _T("both"), 0 }; static const TCHAR *soundfiltermode1[] = { _T("off"), _T("emulated"), _T("on"), 0 }; static const TCHAR *soundfiltermode2[] = { _T("standard"), _T("enhanced"), 0 }; static const TCHAR *lorestype1[] = { _T("lores"), _T("hires"), _T("superhires"), 0 }; static const TCHAR *lorestype2[] = { _T("true"), _T("false"), 0 }; static const TCHAR *loresmode[] = { _T("normal"), _T("filtered"), 0 }; static const TCHAR *horizmode[] = { _T("vertical"), _T("lores"), _T("hires"), _T("superhires"), 0 }; static const TCHAR *vertmode[] = { _T("horizontal"), _T("single"), _T("double"), _T("quadruple"), 0 }; #ifdef GFXFILTER static const TCHAR *filtermode2[] = { _T("1x"), _T("2x"), _T("3x"), _T("4x"), 0 }; #endif static const TCHAR *cartsmode[] = { _T("none"), _T("hrtmon"), 0 }; static const TCHAR *idemode[] = { _T("none"), _T("a600/a1200"), _T("a4000"), 0 }; static const TCHAR *rtctype[] = { _T("none"), _T("MSM6242B"), _T("RP5C01A"), 0 }; static const TCHAR *ciaatodmode[] = { _T("vblank"), _T("50hz"), _T("60hz"), 0 }; static const TCHAR *ksmirrortype[] = { _T("none"), _T("e0"), _T("a8+e0"), 0 }; static const TCHAR *cscompa[] = { _T("-"), _T("Generic"), _T("CDTV"), _T("CD32"), _T("A500"), _T("A500+"), _T("A600"), _T("A1000"), _T("A1200"), _T("A2000"), _T("A3000"), _T("A3000T"), _T("A4000"), _T("A4000T"), 0 }; static const TCHAR *qsmodes[] = { _T("A500"), _T("A500+"), _T("A600"), _T("A1000"), _T("A1200"), _T("A3000"), _T("A4000"), _T(""), _T("CD32"), _T("CDTV"), _T("ARCADIA"), NULL }; /* 3-state boolean! */ static const TCHAR *fullmodes[] = { _T("false"), _T("true"), /* "FILE_NOT_FOUND", */ _T("fullwindow"), 0 }; /* bleh for compatibility */ static const TCHAR *scsimode[] = { _T("false"), _T("true"), _T("scsi"), 0 }; static const TCHAR *maxhoriz[] = { _T("lores"), _T("hires"), _T("superhires"), 0 }; static const TCHAR *maxvert[] = { _T("nointerlace"), _T("interlace"), 0 }; static const TCHAR *abspointers[] = { _T("none"), _T("mousehack"), _T("tablet"), 0 }; static const TCHAR *magiccursors[] = { _T("both"), _T("native"), _T("host"), 0 }; static const TCHAR *autoscale[] = { _T("none"), _T("auto"), _T("standard"), _T("max"), _T("scale"), _T("resize"), _T("center"), _T("manual"), _T("integer"), _T("integer_auto"), 0 }; static const TCHAR *joyportmodes[] = { _T(""), _T("mouse"), _T("djoy"), _T("gamepad"), _T("ajoy"), _T("cdtvjoy"), _T("cd32joy"), _T("lightpen"), 0 }; static const TCHAR *joyaf[] = { _T("none"), _T("normal"), _T("toggle"), 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 *vsyncmodes2[] = { _T("normal"), _T("busywait"), 0 }; static const TCHAR *filterapi[] = { _T("directdraw"), _T("direct3d"), 0 }; static const TCHAR *dongles[] = { _T("none"), _T("robocop 3"), _T("leaderboard"), _T("b.a.t. ii"), _T("italy'90 soccer"), _T("dames grand maitre"), _T("rugby coach"), _T("cricket captain"), _T("leviathan"), NULL }; static const TCHAR *cdmodes[] = { _T("disabled"), _T(""), _T("image"), _T("ioctl"), _T("spti"), _T("aspi"), 0 }; static const TCHAR *cdconmodes[] = { _T(""), _T("uae"), _T("ide"), _T("scsi"), _T("cdtv"), _T("cd32"), 0 }; static const TCHAR *specialmonitors[] = { _T("none"), _T("autodetect"), _T("a2024"), _T("graffiti"), 0 }; static const TCHAR *rtgtype[] = { _T("ZorroII"), _T("ZorroIII"), 0 }; static const TCHAR *waitblits[] = { _T("disabled"), _T("automatic"), _T("noidleonly"), _T("always"), 0 }; static const TCHAR *autoext2[] = { _T("disabled"), _T("copy"), _T("replace"), 0 }; static const TCHAR *leds[] = { _T("power"), _T("df0"), _T("df1"), _T("df2"), _T("df3"), _T("hd"), _T("cd"), _T("fps"), _T("cpu"), _T("snd"), _T("md"), 0 }; static int leds_order[] = { 3, 6, 7, 8, 9, 4, 5, 2, 1, 0, 9 }; static const TCHAR *obsolete[] = { _T("accuracy"), _T("gfx_opengl"), _T("gfx_32bit_blits"), _T("32bit_blits"), _T("gfx_immediate_blits"), _T("gfx_ntsc"), _T("win32"), _T("gfx_filter_bits"), _T("sound_pri_cutoff"), _T("sound_pri_time"), _T("sound_min_buff"), _T("sound_bits"), _T("gfx_test_speed"), _T("gfxlib_replacement"), _T("enforcer"), _T("catweasel_io"), _T("kickstart_key_file"), _T("fast_copper"), _T("sound_adjust"), _T("sound_latency"), _T("serial_hardware_dtrdsr"), _T("gfx_filter_upscale"), _T("gfx_correct_aspect"), _T("gfx_autoscale"), _T("parallel_sampler"), _T("parallel_ascii_emulation"), _T("avoid_vid"), _T("avoid_dga"), _T("z3chipmem_size"), _T("state_replay_buffer"), _T("state_replay"), NULL }; #define UNEXPANDED _T("$(FILE_PATH)") static void trimwsa (char *s) { /* Delete trailing whitespace. */ int len = strlen (s); while (len > 0 && strcspn (s + len - 1, "\t \r\n") == 0) s[--len] = '\0'; } static int match_string (const TCHAR *table[], const TCHAR *str) { int i; for (i = 0; table[i] != 0; i++) if (strcasecmp (table[i], str) == 0) return i; return -1; } static TCHAR *cfgfile_subst_path2 (const TCHAR *path, const TCHAR *subst, const TCHAR *file) { /* @@@ use strcasecmp for some targets. */ if (_tcslen (path) > 0 && _tcsncmp (file, path, _tcslen (path)) == 0) { int l; TCHAR *p2, *p = xmalloc (TCHAR, _tcslen (file) + _tcslen (subst) + 2); _tcscpy (p, subst); l = _tcslen (p); while (l > 0 && p[l - 1] == '/') p[--l] = '\0'; l = _tcslen (path); while (file[l] == '/') l++; _tcscat (p, _T("/")); _tcscat (p, file + l); p2 = target_expand_environment (p); xfree (p); return p2; } return NULL; } TCHAR *cfgfile_subst_path (const TCHAR *path, const TCHAR *subst, const TCHAR *file) { TCHAR *s = cfgfile_subst_path2 (path, subst, file); if (s) return s; s = target_expand_environment (file); if (s) { TCHAR tmp[MAX_DPATH]; _tcscpy (tmp, s); xfree (s); fullpath (tmp, sizeof tmp / sizeof (TCHAR)); s = my_strdup (tmp); } return s; } static TCHAR *cfgfile_get_multipath2 (struct multipath *mp, const TCHAR *path, const TCHAR *file, bool dir) { for (int i = 0; i < MAX_PATHS; i++) { if (mp->path[i][0] && _tcscmp (mp->path[i], _T(".\\")) != 0 && _tcscmp (mp->path[i], _T("./")) != 0 && (file[0] != '/' && file[0] != '\\' && !_tcschr(file, ':'))) { TCHAR *s = NULL; if (path) s = cfgfile_subst_path2 (path, mp->path[i], file); if (!s) { TCHAR np[MAX_DPATH]; _tcscpy (np, mp->path[i]); fixtrailing (np); _tcscat (np, file); fullpath (np, sizeof np / sizeof (TCHAR)); s = my_strdup (np); } if (dir) { if (my_existsdir (s)) return s; } else { if (zfile_exists (s)) return s; } xfree (s); } } return NULL; } static TCHAR *cfgfile_get_multipath (struct multipath *mp, const TCHAR *path, const TCHAR *file, bool dir) { TCHAR *s = cfgfile_get_multipath2 (mp, path, file, dir); if (s) return s; return my_strdup (file); } static TCHAR *cfgfile_put_multipath (struct multipath *mp, const TCHAR *s) { for (int i = 0; i < MAX_PATHS; i++) { if (mp->path[i][0] && _tcscmp (mp->path[i], _T(".\\")) != 0 && _tcscmp (mp->path[i], _T("./")) != 0) { if (_tcsnicmp (mp->path[i], s, _tcslen (mp->path[i])) == 0) { return my_strdup (s + _tcslen (mp->path[i])); } } } return my_strdup (s); } static TCHAR *cfgfile_subst_path_load (const TCHAR *path, struct multipath *mp, const TCHAR *file, bool dir) { TCHAR *s = cfgfile_get_multipath2 (mp, path, file, dir); if (s) return s; return cfgfile_subst_path (path, mp->path[0], file); } static bool isdefault (const TCHAR *s) { TCHAR tmp[MAX_DPATH]; if (!default_file || uaeconfig) return false; zfile_fseek (default_file, 0, SEEK_SET); while (zfile_fgets (tmp, sizeof tmp / sizeof (TCHAR), default_file)) { if (tmp[0] && tmp[_tcslen (tmp) - 1] == '\n') tmp[_tcslen (tmp) - 1] = 0; if (!_tcscmp (tmp, s)) return true; } return false; } static size_t cfg_write (const void *b, struct zfile *z) { size_t v; if (unicode_config) { TCHAR lf = 10; v = zfile_fwrite (b, _tcslen ((TCHAR*)b), sizeof (TCHAR), z); zfile_fwrite (&lf, 1, 1, z); } else { char lf = 10; char *s = ua ((TCHAR*)b); v = zfile_fwrite (s, strlen (s), 1, z); zfile_fwrite (&lf, 1, 1, z); xfree (s); } return v; } #define UTF8NAME _T(".utf8") static void cfg_dowrite (struct zfile *f, const TCHAR *option, const TCHAR *value, int d, int target) { char lf = 10; TCHAR tmp[CONFIG_BLEN]; char tmpa[CONFIG_BLEN]; char *tmp1, *tmp2; int utf8; if (value == NULL) return; utf8 = 0; tmp1 = ua (value); tmp2 = uutf8 (value); if (strcmp (tmp1, tmp2) && tmp2[0] != 0) utf8 = 1; if (target) _stprintf (tmp, _T("%s.%s=%s"), TARGET_NAME, option, value); else _stprintf (tmp, _T("%s=%s"), option, value); if (d && isdefault (tmp)) goto end; cfg_write (tmp, f); if (utf8 && !unicode_config) { char *opt = ua (option); if (target) { char *tna = ua (TARGET_NAME); sprintf (tmpa, "%s.%s.utf8=%s", tna, opt, tmp2); xfree (tna); } else { sprintf (tmpa, "%s.utf8=%s", opt, tmp2); } xfree (opt); zfile_fwrite (tmpa, strlen (tmpa), 1, f); zfile_fwrite (&lf, 1, 1, f); } end: xfree (tmp2); xfree (tmp1); } void cfgfile_write_bool (struct zfile *f, const TCHAR *option, bool b) { cfg_dowrite (f, option, b ? _T("true") : _T("false"), 0, 0); } void cfgfile_dwrite_bool (struct zfile *f, const TCHAR *option, bool b) { cfg_dowrite (f, option, b ? _T("true") : _T("false"), 1, 0); } void cfgfile_dwrite_bool (struct zfile *f, const TCHAR *option, int b) { cfgfile_dwrite_bool (f, option, b != 0); } void cfgfile_write_str (struct zfile *f, const TCHAR *option, const TCHAR *value) { cfg_dowrite (f, option, value, 0, 0); } void cfgfile_dwrite_str (struct zfile *f, const TCHAR *option, const TCHAR *value) { cfg_dowrite (f, option, value, 1, 0); } void cfgfile_target_write_bool (struct zfile *f, const TCHAR *option, bool b) { cfg_dowrite (f, option, b ? _T("true") : _T("false"), 0, 1); } void cfgfile_target_dwrite_bool (struct zfile *f, const TCHAR *option, bool b) { cfg_dowrite (f, option, b ? _T("true") : _T("false"), 1, 1); } void cfgfile_target_write_str (struct zfile *f, const TCHAR *option, const TCHAR *value) { cfg_dowrite (f, option, value, 0, 1); } void cfgfile_target_dwrite_str (struct zfile *f, const TCHAR *option, const TCHAR *value) { cfg_dowrite (f, option, value, 1, 1); } void cfgfile_write (struct zfile *f, const TCHAR *option, const TCHAR *format,...) { va_list parms; TCHAR tmp[CONFIG_BLEN]; va_start (parms, format); _vsntprintf (tmp, CONFIG_BLEN, format, parms); cfg_dowrite (f, option, tmp, 0, 0); va_end (parms); } void cfgfile_dwrite (struct zfile *f, const TCHAR *option, const TCHAR *format,...) { va_list parms; TCHAR tmp[CONFIG_BLEN]; va_start (parms, format); _vsntprintf (tmp, CONFIG_BLEN, format, parms); cfg_dowrite (f, option, tmp, 1, 0); va_end (parms); } void cfgfile_target_write (struct zfile *f, const TCHAR *option, const TCHAR *format,...) { va_list parms; TCHAR tmp[CONFIG_BLEN]; va_start (parms, format); _vsntprintf (tmp, CONFIG_BLEN, format, parms); cfg_dowrite (f, option, tmp, 0, 1); va_end (parms); } void cfgfile_target_dwrite (struct zfile *f, const TCHAR *option, const TCHAR *format,...) { va_list parms; TCHAR tmp[CONFIG_BLEN]; va_start (parms, format); _vsntprintf (tmp, CONFIG_BLEN, format, parms); cfg_dowrite (f, option, tmp, 1, 1); va_end (parms); } static void cfgfile_write_rom (struct zfile *f, struct multipath *mp, const TCHAR *romfile, const TCHAR *name) { TCHAR *str = cfgfile_subst_path (mp->path[0], UNEXPANDED, romfile); str = cfgfile_put_multipath (mp, str); cfgfile_write_str (f, name, str); struct zfile *zf = zfile_fopen (str, _T("rb"), ZFD_ALL); if (zf) { struct romdata *rd = getromdatabyzfile (zf); if (rd) { TCHAR name2[MAX_DPATH], str2[MAX_DPATH]; _tcscpy (name2, name); _tcscat (name2, _T("_id")); _stprintf (str2, _T("%08X,%s"), rd->crc32, rd->name); cfgfile_write_str (f, name2, str2); } zfile_fclose (zf); } xfree (str); } static void cfgfile_write_path (struct zfile *f, struct multipath *mp, const TCHAR *option, const TCHAR *value) { TCHAR *s = cfgfile_put_multipath (mp, value); cfgfile_write_str (f, option, s); xfree (s); } static void cfgfile_dwrite_path (struct zfile *f, struct multipath *mp, const TCHAR *option, const TCHAR *value) { TCHAR *s = cfgfile_put_multipath (mp, value); cfgfile_dwrite_str (f, option, s); xfree (s); } static void write_filesys_config (struct uae_prefs *p, struct zfile *f) { int i; TCHAR tmp[MAX_DPATH], tmp2[MAX_DPATH]; TCHAR *hdcontrollers[] = { _T("uae"), _T("ide0"), _T("ide1"), _T("ide2"), _T("ide3"), _T("scsi0"), _T("scsi1"), _T("scsi2"), _T("scsi3"), _T("scsi4"), _T("scsi5"), _T("scsi6"), _T("scsram"), _T("scide") }; /* scsram = smart card sram = pcmcia sram card */ for (i = 0; i < p->mountitems; i++) { struct uaedev_config_info *uci = &p->mountconfig[i]; TCHAR *str; int bp = uci->bootpri; if (!uci->autoboot) bp = -128; if (uci->donotmount) bp = -129; str = cfgfile_put_multipath (&p->path_hardfile, uci->rootdir); if (!uci->ishdf) { _stprintf (tmp, _T("%s,%s:%s:%s,%d"), uci->readonly ? _T("ro") : _T("rw"), uci->devname ? uci->devname : _T(""), uci->volname, str, bp); cfgfile_write_str (f, _T("filesystem2"), tmp); #if 0 _stprintf (tmp2, _T("filesystem=%s,%s:%s"), uci->readonly ? _T("ro") : _T("rw"), uci->volname, str); zfile_fputs (f, tmp2); #endif } else { _stprintf (tmp, _T("%s,%s:%s,%d,%d,%d,%d,%d,%s,%s"), uci->readonly ? _T("ro") : _T("rw"), uci->devname ? uci->devname : _T(""), str, uci->sectors, uci->surfaces, uci->reserved, uci->blocksize, bp, uci->filesys ? uci->filesys : _T(""), hdcontrollers[uci->controller]); if (uci->cyls || (uci->pcyls && uci->pheads && uci->psecs)) { TCHAR *s = tmp + _tcslen (tmp); _stprintf (s, _T(",%d,%d/%d/%d"), uci->cyls, uci->pcyls, uci->pheads, uci->psecs); } cfgfile_write_str (f, _T("hardfile2"), tmp); #if 0 _stprintf (tmp2, _T("hardfile=%s,%d,%d,%d,%d,%s"), uci->readonly ? "ro" : "rw", uci->sectors, uci->surfaces, uci->reserved, uci->blocksize, str); zfile_fputs (f, tmp2); #endif } _stprintf (tmp2, _T("uaehf%d"), i); cfgfile_write (f, tmp2, _T("%s,%s"), uci->ishdf ? _T("hdf") : _T("dir"), tmp); xfree (str); } } static void write_compatibility_cpu (struct zfile *f, struct uae_prefs *p) { TCHAR tmp[100]; int model; model = p->cpu_model; if (model == 68030) model = 68020; if (model == 68060) model = 68040; if (p->address_space_24 && model == 68020) _tcscpy (tmp, _T("68ec020")); else _stprintf (tmp, _T("%d"), model); if (model == 68020 && (p->fpu_model == 68881 || p->fpu_model == 68882)) _tcscat (tmp, _T("/68881")); cfgfile_write (f, _T("cpu_type"), tmp); } static void write_leds (struct zfile *f, const TCHAR *name, int mask) { TCHAR tmp[MAX_DPATH]; tmp[0] = 0; for (int i = 0; leds[i]; i++) { bool got = false; for (int j = 0; leds[j]; j++) { if (leds_order[j] == i) { if (mask & (1 << j)) { if (got) _tcscat (tmp, _T(":")); _tcscat (tmp, leds[j]); got = true; } } } if (leds[i + 1] && got) _tcscat (tmp, _T(",")); } while (tmp[0] && tmp[_tcslen (tmp) - 1] == ',') tmp[_tcslen (tmp) - 1] = 0; cfgfile_dwrite_str (f, name, tmp); } void cfgfile_save_options (struct zfile *f, struct uae_prefs *p, int type) { struct strlist *sl; TCHAR tmp[MAX_DPATH]; int i; cfgfile_write_str (f, _T("config_description"), p->description); cfgfile_write_bool (f, _T("config_hardware"), type & CONFIG_TYPE_HARDWARE); cfgfile_write_bool (f, _T("config_host"), !!(type & CONFIG_TYPE_HOST)); if (p->info[0]) cfgfile_write (f, _T("config_info"), p->info); cfgfile_write (f, _T("config_version"), _T("%d.%d.%d"), UAEMAJOR, UAEMINOR, UAESUBREV); cfgfile_write_str (f, _T("config_hardware_path"), p->config_hardware_path); cfgfile_write_str (f, _T("config_host_path"), p->config_host_path); if (p->config_window_title[0]) cfgfile_write_str (f, _T("config_window_title"), p->config_window_title); for (sl = p->all_lines; sl; sl = sl->next) { if (sl->unknown) { if (sl->option) cfgfile_write_str (f, sl->option, sl->value); } } for (i = 0; i < MAX_PATHS; i++) { if (p->path_rom.path[i][0]) { _stprintf (tmp, _T("%s.rom_path"), TARGET_NAME); cfgfile_write_str (f, tmp, p->path_rom.path[i]); } } for (i = 0; i < MAX_PATHS; i++) { if (p->path_floppy.path[i][0]) { _stprintf (tmp, _T("%s.floppy_path"), TARGET_NAME); cfgfile_write_str (f, tmp, p->path_floppy.path[i]); } } for (i = 0; i < MAX_PATHS; i++) { if (p->path_hardfile.path[i][0]) { _stprintf (tmp, _T("%s.hardfile_path"), TARGET_NAME); cfgfile_write_str (f, tmp, p->path_hardfile.path[i]); } } for (i = 0; i < MAX_PATHS; i++) { if (p->path_cd.path[i][0]) { _stprintf (tmp, _T("%s.cd_path"), TARGET_NAME); cfgfile_write_str (f, tmp, p->path_cd.path[i]); } } cfg_write (_T("; host-specific"), f); target_save_options (f, p); cfg_write (_T("; common"), f); cfgfile_write_str (f, _T("use_gui"), guimode1[p->start_gui]); cfgfile_write_bool (f, _T("use_debugger"), p->start_debugger); cfgfile_write_rom (f, &p->path_rom, p->romfile, _T("kickstart_rom_file")); cfgfile_write_rom (f, &p->path_rom, p->romextfile, _T("kickstart_ext_rom_file")); if (p->romextfile2addr) { cfgfile_write (f, _T("kickstart_ext_rom_file2_address"), _T("%x"), p->romextfile2addr); cfgfile_write_rom (f, &p->path_rom, p->romextfile2, _T("kickstart_ext_rom_file2")); } if (p->romident[0]) cfgfile_dwrite_str (f, _T("kickstart_rom"), p->romident); if (p->romextident[0]) cfgfile_write_str (f, _T("kickstart_ext_rom="), p->romextident); cfgfile_write_path (f, &p->path_rom, _T("flash_file"), p->flashfile); cfgfile_write_path (f, &p->path_rom, _T("cart_file"), p->cartfile); cfgfile_write_path (f, &p->path_rom, _T("rtc_file"), p->rtcfile); if (p->cartident[0]) cfgfile_write_str (f, _T("cart"), p->cartident); if (p->amaxromfile[0]) cfgfile_write_path (f, &p->path_rom, _T("amax_rom_file"), p->amaxromfile); cfgfile_write_bool (f, _T("kickshifter"), p->kickshifter); p->nr_floppies = 4; for (i = 0; i < 4; i++) { _stprintf (tmp, _T("floppy%d"), i); cfgfile_write_path (f, &p->path_floppy, tmp, p->floppyslots[i].df); _stprintf (tmp, _T("floppy%dtype"), i); cfgfile_dwrite (f, tmp, _T("%d"), p->floppyslots[i].dfxtype); _stprintf (tmp, _T("floppy%dsound"), i); cfgfile_dwrite (f, tmp, _T("%d"), p->floppyslots[i].dfxclick); if (p->floppyslots[i].dfxclick < 0 && p->floppyslots[i].dfxclickexternal[0]) { _stprintf (tmp, _T("floppy%dsoundext"), i); cfgfile_dwrite (f, tmp, p->floppyslots[i].dfxclickexternal); } if (p->floppyslots[i].dfxtype < 0 && p->nr_floppies > i) p->nr_floppies = i; } for (i = 0; i < MAX_SPARE_DRIVES; i++) { if (p->dfxlist[i][0]) { _stprintf (tmp, _T("diskimage%d"), i); cfgfile_dwrite_path (f, &p->path_floppy, tmp, p->dfxlist[i]); } } for (i = 0; i < MAX_TOTAL_SCSI_DEVICES; i++) { if (p->cdslots[i].name[0] || p->cdslots[i].inuse) { TCHAR tmp2[MAX_DPATH]; _stprintf (tmp, _T("cdimage%d"), i); TCHAR *s = cfgfile_put_multipath (&p->path_cd, p->cdslots[i].name); _tcscpy (tmp2, s); xfree (s); if (p->cdslots[i].type != SCSI_UNIT_DEFAULT || _tcschr (p->cdslots[i].name, ',') || p->cdslots[i].delayed) { _tcscat (tmp2, _T(",")); if (p->cdslots[i].delayed) { _tcscat (tmp2, _T("delay")); _tcscat (tmp2, _T(":")); } if (p->cdslots[i].type != SCSI_UNIT_DEFAULT) { _tcscat (tmp2, cdmodes[p->cdslots[i].type + 1]); } } cfgfile_write_str (f, tmp, tmp2); } } if (p->statefile[0]) cfgfile_write_str (f, _T("statefile"), p->statefile); if (p->quitstatefile[0]) cfgfile_write_str (f, _T("statefile_quit"), p->quitstatefile); cfgfile_write (f, _T("nr_floppies"), _T("%d"), p->nr_floppies); cfgfile_dwrite_bool (f, _T("floppy_write_protect"), p->floppy_read_only); cfgfile_write (f, _T("floppy_speed"), _T("%d"), p->floppy_speed); cfgfile_write (f, _T("floppy_volume"), _T("%d"), p->dfxclickvolume); cfgfile_dwrite (f, _T("floppy_channel_mask"), _T("0x%x"), p->dfxclickchannelmask); cfgfile_write_bool (f, _T("parallel_on_demand"), p->parallel_demand); cfgfile_write_bool (f, _T("serial_on_demand"), p->serial_demand); cfgfile_write_bool (f, _T("serial_hardware_ctsrts"), p->serial_hwctsrts); cfgfile_write_bool (f, _T("serial_direct"), p->serial_direct); cfgfile_dwrite (f, _T("serial_stopbits"), _T("%d"), p->serial_stopbits); cfgfile_write_str (f, _T("scsi"), scsimode[p->scsi]); cfgfile_write_bool (f, _T("uaeserial"), p->uaeserial); cfgfile_write_bool (f, _T("sana2"), p->sana2); cfgfile_write_str (f, _T("sound_output"), soundmode1[p->produce_sound]); cfgfile_write_str (f, _T("sound_channels"), stereomode[p->sound_stereo]); cfgfile_write (f, _T("sound_stereo_separation"), _T("%d"), p->sound_stereo_separation); cfgfile_write (f, _T("sound_stereo_mixing_delay"), _T("%d"), p->sound_mixed_stereo_delay >= 0 ? p->sound_mixed_stereo_delay : 0); cfgfile_write (f, _T("sound_max_buff"), _T("%d"), p->sound_maxbsiz); cfgfile_write (f, _T("sound_frequency"), _T("%d"), p->sound_freq); cfgfile_write_str (f, _T("sound_interpol"), interpolmode[p->sound_interpol]); cfgfile_write_str (f, _T("sound_filter"), soundfiltermode1[p->sound_filter]); cfgfile_write_str (f, _T("sound_filter_type"), soundfiltermode2[p->sound_filter_type]); cfgfile_write (f, _T("sound_volume"), _T("%d"), p->sound_volume); if (p->sound_volume_cd >= 0) cfgfile_write (f, _T("sound_volume_cd"), _T("%d"), p->sound_volume_cd); cfgfile_write_bool (f, _T("sound_auto"), p->sound_auto); cfgfile_write_bool (f, _T("sound_stereo_swap_paula"), p->sound_stereo_swap_paula); cfgfile_write_bool (f, _T("sound_stereo_swap_ahi"), p->sound_stereo_swap_ahi); cfgfile_dwrite (f, _T("sampler_frequency"), _T("%d"), p->sampler_freq); cfgfile_dwrite (f, _T("sampler_buffer"), _T("%d"), p->sampler_buffer); cfgfile_dwrite_bool (f, _T("sampler_stereo"), p->sampler_stereo); cfgfile_write_str (f, _T("comp_trustbyte"), compmode[p->comptrustbyte]); cfgfile_write_str (f, _T("comp_trustword"), compmode[p->comptrustword]); cfgfile_write_str (f, _T("comp_trustlong"), compmode[p->comptrustlong]); cfgfile_write_str (f, _T("comp_trustnaddr"), compmode[p->comptrustnaddr]); cfgfile_write_bool (f, _T("comp_nf"), p->compnf); cfgfile_write_bool (f, _T("comp_constjump"), p->comp_constjump); cfgfile_write_bool (f, _T("comp_oldsegv"), p->comp_oldsegv); cfgfile_write_str (f, _T("comp_flushmode"), flushmode[p->comp_hardflush]); cfgfile_write_bool (f, _T("compfpu"), p->compfpu); cfgfile_write_bool (f, _T("fpu_strict"), p->fpu_strict); cfgfile_write_bool (f, _T("comp_midopt"), p->comp_midopt); cfgfile_write_bool (f, _T("comp_lowopt"), p->comp_lowopt); cfgfile_write_bool (f, _T("avoid_cmov"), p->avoid_cmov); cfgfile_write (f, _T("cachesize"), _T("%d"), p->cachesize); for (i = 0; i < MAX_JPORTS; i++) { struct jport *jp = &p->jports[i]; int v = jp->id; TCHAR tmp1[MAX_DPATH], tmp2[MAX_DPATH]; if (v == JPORT_CUSTOM) { _tcscpy (tmp2, _T("custom")); } else if (v == JPORT_NONE) { _tcscpy (tmp2, _T("none")); } else if (v < JSEM_JOYS) { _stprintf (tmp2, _T("kbd%d"), v + 1); } else if (v < JSEM_MICE) { _stprintf (tmp2, _T("joy%d"), v - JSEM_JOYS); } else { _tcscpy (tmp2, _T("mouse")); if (v - JSEM_MICE > 0) _stprintf (tmp2, _T("mouse%d"), v - JSEM_MICE); } if (i < 2 || jp->id >= 0) { _stprintf (tmp1, _T("joyport%d"), i); cfgfile_write (f, tmp1, tmp2); _stprintf (tmp1, _T("joyport%dautofire"), i); cfgfile_write (f, tmp1, joyaf[jp->autofire]); if (i < 2 && jp->mode > 0) { _stprintf (tmp1, _T("joyport%dmode"), i); cfgfile_write (f, tmp1, joyportmodes[jp->mode]); } if (jp->name[0]) { _stprintf (tmp1, _T("joyportfriendlyname%d"), i); cfgfile_write (f, tmp1, jp->name); } if (jp->configname[0]) { _stprintf (tmp1, _T("joyportname%d"), i); cfgfile_write (f, tmp1, jp->configname); } } } if (p->dongle) { if (p->dongle + 1 >= sizeof (dongles) / sizeof (TCHAR*)) cfgfile_write (f, _T("dongle"), _T("%d"), p->dongle); else cfgfile_write_str (f, _T("dongle"), dongles[p->dongle]); } cfgfile_write_bool (f, _T("bsdsocket_emu"), p->socket_emu); if (p->a2065name[0]) cfgfile_write_str (f, _T("a2065"), p->a2065name); cfgfile_write_bool (f, _T("synchronize_clock"), p->tod_hack); cfgfile_write (f, _T("maprom"), _T("0x%x"), p->maprom); cfgfile_dwrite_str (f, _T("parallel_matrix_emulation"), epsonprinter[p->parallel_matrix_emulation]); cfgfile_write_bool (f, _T("parallel_postscript_emulation"), p->parallel_postscript_emulation); cfgfile_write_bool (f, _T("parallel_postscript_detection"), p->parallel_postscript_detection); cfgfile_write_str (f, _T("ghostscript_parameters"), p->ghostscript_parameters); cfgfile_write (f, _T("parallel_autoflush"), _T("%d"), p->parallel_autoflush_time); cfgfile_dwrite (f, _T("uae_hide"), _T("%d"), p->uae_hide); cfgfile_dwrite_bool (f, _T("magic_mouse"), p->input_magic_mouse); cfgfile_dwrite_str (f, _T("magic_mousecursor"), magiccursors[p->input_magic_mouse_cursor]); cfgfile_dwrite_str (f, _T("absolute_mouse"), abspointers[p->input_tablet]); cfgfile_dwrite_bool (f, _T("clipboard_sharing"), p->clipboard_sharing); cfgfile_dwrite_bool (f, _T("native_code"), p->native_code); cfgfile_write (f, _T("gfx_display"), _T("%d"), p->gfx_apmode[APMODE_NATIVE].gfx_display); cfgfile_write_str (f, _T("gfx_display_friendlyname"), target_get_display_name (p->gfx_apmode[APMODE_NATIVE].gfx_display, true)); cfgfile_write_str (f, _T("gfx_display_name"), target_get_display_name (p->gfx_apmode[APMODE_NATIVE].gfx_display, false)); cfgfile_write (f, _T("gfx_display_rtg"), _T("%d"), p->gfx_apmode[APMODE_RTG].gfx_display); cfgfile_write_str (f, _T("gfx_display_friendlyname_rtg"), target_get_display_name (p->gfx_apmode[APMODE_RTG].gfx_display, true)); cfgfile_write_str (f, _T("gfx_display_name_rtg"), target_get_display_name (p->gfx_apmode[APMODE_RTG].gfx_display, false)); cfgfile_write (f, _T("gfx_framerate"), _T("%d"), p->gfx_framerate); cfgfile_write (f, _T("gfx_width"), _T("%d"), p->gfx_size_win.width); /* compatibility with old versions */ cfgfile_write (f, _T("gfx_height"), _T("%d"), p->gfx_size_win.height); /* compatibility with old versions */ cfgfile_write (f, _T("gfx_top_windowed"), _T("%d"), p->gfx_size_win.x); cfgfile_write (f, _T("gfx_left_windowed"), _T("%d"), p->gfx_size_win.y); cfgfile_write (f, _T("gfx_width_windowed"), _T("%d"), p->gfx_size_win.width); cfgfile_write (f, _T("gfx_height_windowed"), _T("%d"), p->gfx_size_win.height); cfgfile_write (f, _T("gfx_width_fullscreen"), _T("%d"), p->gfx_size_fs.width); cfgfile_write (f, _T("gfx_height_fullscreen"), _T("%d"), p->gfx_size_fs.height); cfgfile_write (f, _T("gfx_refreshrate"), _T("%d"), p->gfx_apmode[0].gfx_refreshrate); cfgfile_dwrite (f, _T("gfx_refreshrate_rtg"), _T("%d"), p->gfx_apmode[1].gfx_refreshrate); cfgfile_write_bool (f, _T("gfx_autoresolution"), p->gfx_autoresolution); cfgfile_dwrite (f, _T("gfx_autoresolution_min_vertical"), vertmode[p->gfx_autoresolution_minv + 1]); cfgfile_dwrite (f, _T("gfx_autoresolution_min_horizontal"), horizmode[p->gfx_autoresolution_minh + 1]); cfgfile_write (f, _T("gfx_backbuffers"), _T("%d"), p->gfx_apmode[0].gfx_backbuffers); 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_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_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]); cfgfile_write_str (f, _T("gfx_lores_mode"), loresmode[p->gfx_lores_mode]); cfgfile_write_bool (f, _T("gfx_flickerfixer"), p->gfx_scandoubler); cfgfile_write_str (f, _T("gfx_linemode"), linemode[p->gfx_vresolution * 2 + p->gfx_scanlines]); cfgfile_write_str (f, _T("gfx_fullscreen_amiga"), fullmodes[p->gfx_apmode[0].gfx_fullscreen]); cfgfile_write_str (f, _T("gfx_fullscreen_picasso"), fullmodes[p->gfx_apmode[1].gfx_fullscreen]); cfgfile_write_str (f, _T("gfx_center_horizontal"), centermode1[p->gfx_xcenter]); cfgfile_write_str (f, _T("gfx_center_vertical"), centermode1[p->gfx_ycenter]); cfgfile_write_str (f, _T("gfx_colour_mode"), colormode1[p->color_mode]); cfgfile_write_bool (f, _T("gfx_blacker_than_black"), p->gfx_blackerthanblack); cfgfile_write_str (f, _T("gfx_api"), filterapi[p->gfx_api]); cfgfile_dwrite (f, _T("gfx_horizontal_tweak"), _T("%d"), p->gfx_extrawidth); #ifdef GFXFILTER if (p->gfx_filtershader[0] && p->gfx_api) { cfgfile_dwrite (f, _T("gfx_filter"), _T("D3D:%s"), p->gfx_filtershader); } else if (p->gfx_filter > 0) { int i = 0; struct uae_filter *uf; while (uaefilters[i].name) { uf = &uaefilters[i]; if (uf->type == p->gfx_filter) { cfgfile_dwrite_str (f, _T("gfx_filter"), uf->cfgname); } i++; } } else { cfgfile_dwrite (f, _T("gfx_filter"), _T("no")); } cfgfile_dwrite_str (f, _T("gfx_filter_mode"), filtermode2[p->gfx_filter_filtermode]); cfgfile_dwrite (f, _T("gfx_filter_vert_zoom"), _T("%d"), p->gfx_filter_vert_zoom); cfgfile_dwrite (f, _T("gfx_filter_horiz_zoom"), _T("%d"), p->gfx_filter_horiz_zoom); cfgfile_dwrite (f, _T("gfx_filter_vert_zoom_mult"), _T("%d"), p->gfx_filter_vert_zoom_mult); cfgfile_dwrite (f, _T("gfx_filter_horiz_zoom_mult"), _T("%d"), p->gfx_filter_horiz_zoom_mult); cfgfile_dwrite (f, _T("gfx_filter_vert_offset"), _T("%d"), p->gfx_filter_vert_offset); cfgfile_dwrite (f, _T("gfx_filter_horiz_offset"), _T("%d"), p->gfx_filter_horiz_offset); cfgfile_dwrite (f, _T("gfx_filter_scanlines"), _T("%d"), p->gfx_filter_scanlines); cfgfile_dwrite (f, _T("gfx_filter_scanlinelevel"), _T("%d"), p->gfx_filter_scanlinelevel); cfgfile_dwrite (f, _T("gfx_filter_scanlineratio"), _T("%d"), p->gfx_filter_scanlineratio); cfgfile_dwrite (f, _T("gfx_filter_luminance"), _T("%d"), p->gfx_filter_luminance); cfgfile_dwrite (f, _T("gfx_filter_contrast"), _T("%d"), p->gfx_filter_contrast); cfgfile_dwrite (f, _T("gfx_filter_saturation"), _T("%d"), p->gfx_filter_saturation); cfgfile_dwrite (f, _T("gfx_filter_gamma"), _T("%d"), p->gfx_filter_gamma); cfgfile_dwrite (f, _T("gfx_filter_blur"), _T("%d"), p->gfx_filter_blur); cfgfile_dwrite (f, _T("gfx_filter_noise"), _T("%d"), p->gfx_filter_noise); cfgfile_dwrite_bool (f, _T("gfx_filter_bilinear"), p->gfx_filter_bilinear != 0); cfgfile_dwrite (f, _T("gfx_filter_keep_autoscale_aspect"), _T("%d"), p->gfx_filter_keep_autoscale_aspect); cfgfile_dwrite_str (f, _T("gfx_filter_keep_aspect"), aspects[p->gfx_filter_keep_aspect]); cfgfile_dwrite_str (f, _T("gfx_filter_autoscale"), autoscale[p->gfx_filter_autoscale]); cfgfile_dwrite (f, _T("gfx_filter_aspect_ratio"), _T("%d:%d"), p->gfx_filter_aspect >= 0 ? (p->gfx_filter_aspect >> 8) : -1, p->gfx_filter_aspect >= 0 ? (p->gfx_filter_aspect & 0xff) : -1); cfgfile_dwrite (f, _T("gfx_luminance"), _T("%d"), p->gfx_luminance); cfgfile_dwrite (f, _T("gfx_contrast"), _T("%d"), p->gfx_contrast); cfgfile_dwrite (f, _T("gfx_gamma"), _T("%d"), p->gfx_gamma); cfgfile_dwrite_str (f, _T("gfx_filter_mask"), p->gfx_filtermask); if (p->gfx_filteroverlay[0]) { cfgfile_dwrite (f, _T("gfx_filter_overlay"), _T("%s%s"), p->gfx_filteroverlay, _tcschr (p->gfx_filteroverlay, ',') ? _T(",") : _T("")); #if 0 cfgfile_dwrite (f, _T("gfx_filter_overlay"), _T("%s,%d%s:%d%s:%d%s:%d%s:%d%%"), p->gfx_filteroverlay, p->gfx_filteroverlay_pos.x >= -24000 ? p->gfx_filteroverlay_pos.x : -p->gfx_filteroverlay_pos.x - 30000, p->gfx_filteroverlay_pos.x >= -24000 ? _T("") : _T("%"), p->gfx_filteroverlay_pos.y >= -24000 ? p->gfx_filteroverlay_pos.y : -p->gfx_filteroverlay_pos.y - 30000, p->gfx_filteroverlay_pos.y >= -24000 ? _T("") : _T("%"), p->gfx_filteroverlay_pos.width >= -24000 ? p->gfx_filteroverlay_pos.width : -p->gfx_filteroverlay_pos.width - 30000, p->gfx_filteroverlay_pos.width >= -24000 ? _T("") : _T("%"), p->gfx_filteroverlay_pos.height >= -24000 ? p->gfx_filteroverlay_pos.height : -p->gfx_filteroverlay_pos.height - 30000, p->gfx_filteroverlay_pos.height >= -24000 ? _T("") : _T("%"), p->gfx_filteroverlay_overscan ); #endif } cfgfile_dwrite (f, _T("gfx_center_horizontal_position"), _T("%d"), p->gfx_xcenter_pos); cfgfile_dwrite (f, _T("gfx_center_vertical_position"), _T("%d"), p->gfx_ycenter_pos); cfgfile_dwrite (f, _T("gfx_center_horizontal_size"), _T("%d"), p->gfx_xcenter_size); cfgfile_dwrite (f, _T("gfx_center_vertical_size"), _T("%d"), p->gfx_ycenter_size); #endif cfgfile_write_bool (f, _T("immediate_blits"), p->immediate_blits); cfgfile_dwrite_str (f, _T("waiting_blits"), waitblits[p->waiting_blits]); cfgfile_write_bool (f, _T("ntsc"), p->ntscmode); cfgfile_write_bool (f, _T("genlock"), p->genlock); cfgfile_dwrite_str (f, _T("monitoremu"), specialmonitors[p->monitoremu]); cfgfile_dwrite_bool (f, _T("show_leds"), !!(p->leds_on_screen & STATUSLINE_CHIPSET)); cfgfile_dwrite_bool (f, _T("show_leds_rtg"), !!(p->leds_on_screen & STATUSLINE_RTG)); write_leds(f, _T("show_leds_enabled"), p->leds_on_screen_mask[0]); write_leds(f, _T("show_leds_enabled_rtg"), p->leds_on_screen_mask[1]); if (p->osd_pos.y || p->osd_pos.x) { cfgfile_dwrite (f, _T("osd_position"), _T("%.1f%s:%.1f%s"), p->osd_pos.x >= 20000 ? (p->osd_pos.x - 30000) / 10.0 : (float)p->osd_pos.x, p->osd_pos.x >= 20000 ? _T("%") : _T(""), p->osd_pos.y >= 20000 ? (p->osd_pos.y - 30000) / 10.0 : (float)p->osd_pos.y, p->osd_pos.y >= 20000 ? _T("%") : _T("")); } cfgfile_dwrite (f, _T("keyboard_leds"), _T("numlock:%s,capslock:%s,scrolllock:%s"), kbleds[p->keyboard_leds[0]], kbleds[p->keyboard_leds[1]], kbleds[p->keyboard_leds[2]]); if (p->chipset_mask & CSMASK_AGA) cfgfile_write (f, _T("chipset"),_T("aga")); else if ((p->chipset_mask & CSMASK_ECS_AGNUS) && (p->chipset_mask & CSMASK_ECS_DENISE)) cfgfile_write (f, _T("chipset"),_T("ecs")); else if (p->chipset_mask & CSMASK_ECS_AGNUS) cfgfile_write (f, _T("chipset"),_T("ecs_agnus")); else if (p->chipset_mask & CSMASK_ECS_DENISE) cfgfile_write (f, _T("chipset"),_T("ecs_denise")); else cfgfile_write (f, _T("chipset"), _T("ocs")); if (p->chipset_refreshrate > 0) cfgfile_write (f, _T("chipset_refreshrate"), _T("%f"), p->chipset_refreshrate); for (int i = 0; i < MAX_CHIPSET_REFRESH_TOTAL; i++) { if (p->cr[i].rate <= 0) continue; struct chipset_refresh *cr = &p->cr[i]; cr->index = i; _stprintf (tmp, _T("%f"), cr->rate); TCHAR *s = tmp + _tcslen (tmp); if (cr->label[0] > 0 && i < MAX_CHIPSET_REFRESH) s += _stprintf (s, _T(",t=%s"), cr->label); if (cr->horiz > 0) s += _stprintf (s, _T(",h=%d"), cr->horiz); if (cr->vert > 0) s += _stprintf (s, _T(",v=%d"), cr->vert); if (cr->locked) _tcscat (s, _T(",locked")); if (cr->ntsc > 0) _tcscat (s, _T(",ntsc")); else if (cr->ntsc == 0) _tcscat (s, _T(",pal")); if (cr->lace > 0) _tcscat (s, _T(",lace")); else if (cr->lace == 0) _tcscat (s, _T(",nlace")); if (cr->framelength > 0) _tcscat (s, _T(",lof")); else if (cr->framelength == 0) _tcscat (s, _T(",shf")); if (cr->vsync > 0) _tcscat (s, _T(",vsync")); else if (cr->vsync == 0) _tcscat (s, _T(",nvsync")); if (cr->rtg) _tcscat (s, _T(",rtg")); if (cr->commands[0]) { _tcscat (s, _T(",")); _tcscat (s, cr->commands); for (int j = 0; j < _tcslen (s); j++) { if (s[j] == '\n') s[j] = ','; } s[_tcslen (s) - 1] = 0; } if (i == CHIPSET_REFRESH_PAL) cfgfile_dwrite (f, _T("displaydata_pal"), tmp); else if (i == CHIPSET_REFRESH_NTSC) cfgfile_dwrite (f, _T("displaydata_ntsc"), tmp); else cfgfile_dwrite (f, _T("displaydata"), tmp); } cfgfile_write_str (f, _T("collision_level"), collmode[p->collision_level]); cfgfile_write_str(f, _T("chipset_compatible"), cscompa[p->cs_compatible]); cfgfile_dwrite_str (f, _T("ciaatod"), ciaatodmode[p->cs_ciaatod]); cfgfile_dwrite_str (f, _T("rtc"), rtctype[p->cs_rtc]); //cfgfile_dwrite (f, _T("chipset_rtc_adjust"), _T("%d"), p->cs_rtc_adjust); cfgfile_dwrite_bool (f, _T("ksmirror_e0"), p->cs_ksmirror_e0); cfgfile_dwrite_bool (f, _T("ksmirror_a8"), p->cs_ksmirror_a8); cfgfile_dwrite_bool (f, _T("cd32cd"), p->cs_cd32cd); cfgfile_dwrite_bool (f, _T("cd32c2p"), p->cs_cd32c2p); cfgfile_dwrite_bool (f, _T("cd32nvram"), p->cs_cd32nvram); cfgfile_dwrite_bool (f, _T("cdtvcd"), p->cs_cdtvcd); cfgfile_dwrite_bool (f, _T("cdtvram"), p->cs_cdtvram); cfgfile_dwrite (f, _T("cdtvramcard"), _T("%d"), p->cs_cdtvcard); cfgfile_dwrite_str (f, _T("ide"), p->cs_ide == IDE_A600A1200 ? _T("a600/a1200") : (p->cs_ide == IDE_A4000 ? _T("a4000") : _T("none"))); cfgfile_dwrite_bool (f, _T("a1000ram"), p->cs_a1000ram); cfgfile_dwrite (f, _T("fatgary"), _T("%d"), p->cs_fatgaryrev); cfgfile_dwrite (f, _T("ramsey"), _T("%d"), p->cs_ramseyrev); cfgfile_dwrite_bool (f, _T("pcmcia"), p->cs_pcmcia); cfgfile_dwrite_bool (f, _T("scsi_cdtv"), p->cs_cdtvscsi); cfgfile_dwrite_bool (f, _T("scsi_a2091"), p->cs_a2091); cfgfile_dwrite_bool (f, _T("scsi_a4091"), p->cs_a4091); cfgfile_dwrite_bool (f, _T("scsi_a3000"), p->cs_mbdmac == 1); cfgfile_dwrite_bool (f, _T("scsi_a4000t"), p->cs_mbdmac == 2); cfgfile_dwrite_bool (f, _T("bogomem_fast"), p->cs_slowmemisfast); cfgfile_dwrite_bool (f, _T("resetwarning"), p->cs_resetwarning); cfgfile_dwrite_bool (f, _T("denise_noehb"), p->cs_denisenoehb); cfgfile_dwrite_bool (f, _T("agnus_bltbusybug"), p->cs_agnusbltbusybug); cfgfile_dwrite_bool (f, _T("ics_agnus"), p->cs_dipagnus); cfgfile_dwrite_bool (f, _T("fastmem_autoconfig"), p->fastmem_autoconfig); cfgfile_write (f, _T("fastmem_size"), _T("%d"), p->fastmem_size / 0x100000); cfgfile_dwrite (f, _T("fastmem2_size"), _T("%d"), p->fastmem2_size / 0x100000); cfgfile_write (f, _T("a3000mem_size"), _T("%d"), p->mbresmem_low_size / 0x100000); cfgfile_write (f, _T("mbresmem_size"), _T("%d"), p->mbresmem_high_size / 0x100000); cfgfile_write (f, _T("z3mem_size"), _T("%d"), p->z3fastmem_size / 0x100000); cfgfile_dwrite (f, _T("z3mem2_size"), _T("%d"), p->z3fastmem2_size / 0x100000); cfgfile_write (f, _T("z3mem_start"), _T("0x%x"), p->z3fastmem_start); cfgfile_write (f, _T("bogomem_size"), _T("%d"), p->bogomem_size / 0x40000); cfgfile_write (f, _T("gfxcard_size"), _T("%d"), p->rtgmem_size / 0x100000); cfgfile_write_str (f, _T("gfxcard_type"), rtgtype[p->rtgmem_type]); cfgfile_write_bool (f, _T("gfxcard_hardware_vblank"), p->rtg_hardwareinterrupt); cfgfile_write_bool (f, _T("gfxcard_hardware_sprite"), p->rtg_hardwaresprite); cfgfile_write (f, _T("chipmem_size"), _T("%d"), p->chipmem_size == 0x20000 ? -1 : (p->chipmem_size == 0x40000 ? 0 : p->chipmem_size / 0x80000)); cfgfile_dwrite (f, _T("megachipmem_size"), _T("%d"), p->z3chipmem_size / 0x100000); if (p->custom_memory_sizes[0]) cfgfile_write (f, _T("addmem1"), _T("0x%x,0x%x"), p->custom_memory_addrs[0], p->custom_memory_sizes[0]); if (p->custom_memory_sizes[1]) cfgfile_write (f, _T("addmem2"), _T("0x%x,0x%x"), p->custom_memory_addrs[1], p->custom_memory_sizes[1]); if (p->m68k_speed > 0) { cfgfile_write (f, _T("finegrain_cpu_speed"), _T("%d"), p->m68k_speed); } else { cfgfile_write_str (f, _T("cpu_speed"), p->m68k_speed < 0 ? _T("max") : _T("real")); } cfgfile_write (f, _T("cpu_throttle"), _T("%.1f"), p->m68k_speed_throttle); /* do not reorder start */ write_compatibility_cpu(f, p); cfgfile_write (f, _T("cpu_model"), _T("%d"), p->cpu_model); if (p->fpu_model) cfgfile_write (f, _T("fpu_model"), _T("%d"), p->fpu_model); if (p->mmu_model) cfgfile_write (f, _T("mmu_model"), _T("%d"), p->mmu_model); cfgfile_write_bool (f, _T("cpu_compatible"), p->cpu_compatible); cfgfile_write_bool (f, _T("cpu_24bit_addressing"), p->address_space_24); /* do not reorder end */ if (p->cpu_cycle_exact) { if (p->cpu_frequency) cfgfile_write (f, _T("cpu_frequency"), _T("%d"), p->cpu_frequency); if (p->cpu_clock_multiplier) { if (p->cpu_clock_multiplier >= 256) cfgfile_write (f, _T("cpu_multiplier"), _T("%d"), p->cpu_clock_multiplier >> 8); } } cfgfile_write_bool (f, _T("cpu_cycle_exact"), p->cpu_cycle_exact); cfgfile_write_bool (f, _T("blitter_cycle_exact"), p->blitter_cycle_exact); cfgfile_write_bool (f, _T("cycle_exact"), p->cpu_cycle_exact && p->blitter_cycle_exact ? 1 : 0); cfgfile_write_bool (f, _T("rtg_nocustom"), p->picasso96_nocustom); cfgfile_write (f, _T("rtg_modes"), _T("0x%x"), p->picasso96_modeflags); cfgfile_write_bool (f, _T("log_illegal_mem"), p->illegal_mem); if (p->catweasel >= 100) cfgfile_dwrite (f, _T("catweasel"), _T("0x%x"), p->catweasel); else cfgfile_dwrite (f, _T("catweasel"), _T("%d"), p->catweasel); cfgfile_write_str (f, _T("kbd_lang"), (p->keyboard_lang == KBD_LANG_DE ? _T("de") : p->keyboard_lang == KBD_LANG_DK ? _T("dk") : p->keyboard_lang == KBD_LANG_ES ? _T("es") : p->keyboard_lang == KBD_LANG_US ? _T("us") : p->keyboard_lang == KBD_LANG_SE ? _T("se") : p->keyboard_lang == KBD_LANG_FR ? _T("fr") : p->keyboard_lang == KBD_LANG_IT ? _T("it") : _T("FOO"))); cfgfile_dwrite (f, _T("state_replay_rate"), _T("%d"), p->statecapturerate); cfgfile_dwrite (f, _T("state_replay_buffers"), _T("%d"), p->statecapturebuffersize); cfgfile_dwrite_bool (f, _T("state_replay_autoplay"), p->inprec_autoplay); cfgfile_dwrite_bool (f, _T("warp"), p->turbo_emulation); #ifdef FILESYS write_filesys_config (p, f); if (p->filesys_no_uaefsdb) cfgfile_write_bool (f, _T("filesys_no_fsdb"), p->filesys_no_uaefsdb); cfgfile_dwrite (f, _T("filesys_max_size"), _T("%d"), p->filesys_limit); #endif write_inputdevice_config (p, f); } int cfgfile_yesno (const TCHAR *option, const TCHAR *value, const TCHAR *name, int *location) { if (name != NULL && _tcscmp (option, name) != 0) return 0; if (strcasecmp (value, _T("yes")) == 0 || strcasecmp (value, _T("y")) == 0 || strcasecmp (value, _T("true")) == 0 || strcasecmp (value, _T("t")) == 0) *location = 1; else if (strcasecmp (value, _T("no")) == 0 || strcasecmp (value, _T("n")) == 0 || strcasecmp (value, _T("false")) == 0 || strcasecmp (value, _T("f")) == 0 || strcasecmp (value, _T("0")) == 0) *location = 0; else { write_log (_T("Option `%s' requires a value of either `yes' or `no' (was '%s').\n"), option, value); return -1; } return 1; } int cfgfile_yesno (const TCHAR *option, const TCHAR *value, const TCHAR *name, bool *location) { int val; int ret = cfgfile_yesno (option, value, name, &val); if (ret == 0) return 0; if (ret < 0) *location = false; else *location = val != 0; return 1; } int cfgfile_doubleval (const TCHAR *option, const TCHAR *value, const TCHAR *name, double *location) { int base = 10; TCHAR *endptr; if (name != NULL && _tcscmp (option, name) != 0) return 0; *location = _tcstod (value, &endptr); return 1; } int cfgfile_intval (const TCHAR *option, const TCHAR *value, const TCHAR *name, unsigned int *location, int scale) { int base = 10; TCHAR *endptr; if (name != NULL && _tcscmp (option, name) != 0) return 0; /* I guess octal isn't popular enough to worry about here... */ if (value[0] == '0' && _totupper (value[1]) == 'X') value += 2, base = 16; *location = _tcstol (value, &endptr, base) * scale; if (*endptr != '\0' || *value == '\0') { if (strcasecmp (value, _T("false")) == 0 || strcasecmp (value, _T("no")) == 0) { *location = 0; return 1; } if (strcasecmp (value, _T("true")) == 0 || strcasecmp (value, _T("yes")) == 0) { *location = 1; return 1; } write_log (_T("Option '%s' requires a numeric argument but got '%s'\n"), option, value); return -1; } return 1; } int cfgfile_intval (const TCHAR *option, const TCHAR *value, const TCHAR *name, int *location, int scale) { unsigned int v = 0; int r = cfgfile_intval (option, value, name, &v, scale); if (!r) return 0; *location = (int)v; return r; } int cfgfile_strval (const TCHAR *option, const TCHAR *value, const TCHAR *name, int *location, const TCHAR *table[], int more) { int val; if (name != NULL && _tcscmp (option, name) != 0) return 0; val = match_string (table, value); if (val == -1) { if (more) return 0; if (!strcasecmp (value, _T("yes")) || !strcasecmp (value, _T("true"))) { val = 1; } else if (!strcasecmp (value, _T("no")) || !strcasecmp (value, _T("false"))) { val = 0; } else { write_log (_T("Unknown value ('%s') for option '%s'.\n"), value, option); return -1; } } *location = val; return 1; } int cfgfile_strboolval (const TCHAR *option, const TCHAR *value, const TCHAR *name, bool *location, const TCHAR *table[], int more) { int locationint; if (!cfgfile_strval (option, value, name, &locationint, table, more)) return 0; *location = locationint != 0; return 1; } int cfgfile_string (const TCHAR *option, const TCHAR *value, const TCHAR *name, TCHAR *location, int maxsz) { if (_tcscmp (option, name) != 0) return 0; _tcsncpy (location, value, maxsz - 1); location[maxsz - 1] = '\0'; return 1; } int cfgfile_path (const TCHAR *option, const TCHAR *value, const TCHAR *name, TCHAR *location, int maxsz, struct multipath *mp) { if (!cfgfile_string (option, value, name, location, maxsz)) return 0; TCHAR *s = target_expand_environment (location); _tcsncpy (location, s, maxsz - 1); location[maxsz - 1] = 0; if (mp) { for (int i = 0; i < MAX_PATHS; i++) { if (mp->path[i][0] && _tcscmp (mp->path[i], _T(".\\")) != 0 && _tcscmp (mp->path[i], _T("./")) != 0 && (location[0] != '/' && location[0] != '\\' && !_tcschr(location, ':'))) { TCHAR np[MAX_DPATH]; _tcscpy (np, mp->path[i]); fixtrailing (np); _tcscat (np, s); fullpath (np, sizeof np / sizeof (TCHAR)); if (zfile_exists (np)) { _tcsncpy (location, np, maxsz - 1); location[maxsz - 1] = 0; break; } } } } xfree (s); return 1; } int cfgfile_path (const TCHAR *option, const TCHAR *value, const TCHAR *name, TCHAR *location, int maxsz) { return cfgfile_path (option, value, name, location, maxsz, NULL); } int cfgfile_multipath (const TCHAR *option, const TCHAR *value, const TCHAR *name, struct multipath *mp) { TCHAR tmploc[MAX_DPATH]; if (!cfgfile_string (option, value, name, tmploc, 256)) return 0; for (int i = 0; i < MAX_PATHS; i++) { if (mp->path[i][0] == 0 || (i == 0 && (!_tcscmp (mp->path[i], _T(".\\")) || !_tcscmp (mp->path[i], _T("./"))))) { TCHAR *s = target_expand_environment (tmploc); _tcsncpy (mp->path[i], s, 256 - 1); mp->path[i][256 - 1] = 0; fixtrailing (mp->path[i]); xfree (s); return 1; } } return 1; } int cfgfile_rom (const TCHAR *option, const TCHAR *value, const TCHAR *name, TCHAR *location, int maxsz) { TCHAR id[MAX_DPATH]; if (!cfgfile_string (option, value, name, id, sizeof id / sizeof (TCHAR))) return 0; if (zfile_exists (location)) return 1; TCHAR *p = _tcschr (id, ','); if (p) { TCHAR *endptr, tmp; *p = 0; tmp = id[4]; id[4] = 0; uae_u32 crc32 = _tcstol (id, &endptr, 16) << 16; id[4] = tmp; crc32 |= _tcstol (id + 4, &endptr, 16); struct romdata *rd = getromdatabycrc (crc32); if (rd) { struct romlist *rl = getromlistbyromdata (rd); if (rl) { write_log (_T("%s: %s -> %s\n"), name, location, rl->path); _tcsncpy (location, rl->path, maxsz); } } } return 1; } static int getintval (TCHAR **p, int *result, int delim) { TCHAR *value = *p; int base = 10; TCHAR *endptr; TCHAR *p2 = _tcschr (*p, delim); if (p2 == 0) return 0; *p2++ = '\0'; if (value[0] == '0' && _totupper (value[1]) == 'X') value += 2, base = 16; *result = _tcstol (value, &endptr, base); *p = p2; if (*endptr != '\0' || *value == '\0') return 0; return 1; } static int getintval2 (TCHAR **p, int *result, int delim) { TCHAR *value = *p; int base = 10; TCHAR *endptr; TCHAR *p2 = _tcschr (*p, delim); if (p2 == 0) { p2 = _tcschr (*p, 0); if (p2 == 0) { *p = 0; return 0; } } if (*p2 != 0) *p2++ = '\0'; if (value[0] == '0' && _totupper (value[1]) == 'X') value += 2, base = 16; *result = _tcstol (value, &endptr, base); *p = p2; if (*endptr != '\0' || *value == '\0') { *p = 0; return 0; } return 1; } static void set_chipset_mask (struct uae_prefs *p, int val) { p->chipset_mask = (val == 0 ? 0 : val == 1 ? CSMASK_ECS_AGNUS : val == 2 ? CSMASK_ECS_DENISE : val == 3 ? CSMASK_ECS_DENISE | CSMASK_ECS_AGNUS : CSMASK_AGA | CSMASK_ECS_DENISE | CSMASK_ECS_AGNUS); } static int cfgfile_parse_host (struct uae_prefs *p, TCHAR *option, TCHAR *value) { int i; bool vb; TCHAR *section = 0; TCHAR *tmpp; TCHAR tmpbuf[CONFIG_BLEN]; if (_tcsncmp (option, _T("input."), 6) == 0) { read_inputdevice_config (p, option, value); return 1; } for (tmpp = option; *tmpp != '\0'; tmpp++) if (_istupper (*tmpp)) *tmpp = _totlower (*tmpp); tmpp = _tcschr (option, '.'); if (tmpp) { section = option; option = tmpp + 1; *tmpp = '\0'; if (_tcscmp (section, TARGET_NAME) == 0) { /* We special case the various path options here. */ if (cfgfile_multipath (option, value, _T("rom_path"), &p->path_rom) || cfgfile_multipath (option, value, _T("floppy_path"), &p->path_floppy) || cfgfile_multipath (option, value, _T("cd_path"), &p->path_cd) || cfgfile_multipath (option, value, _T("hardfile_path"), &p->path_hardfile)) return 1; return target_parse_option (p, option, value); } return 0; } for (i = 0; i < MAX_SPARE_DRIVES; i++) { _stprintf (tmpbuf, _T("diskimage%d"), i); if (cfgfile_path (option, value, tmpbuf, p->dfxlist[i], sizeof p->dfxlist[i] / sizeof (TCHAR), &p->path_floppy)) { #if 0 if (i < 4 && !p->df[i][0]) _tcscpy (p->df[i], p->dfxlist[i]); #endif return 1; } } for (i = 0; i < MAX_TOTAL_SCSI_DEVICES; i++) { TCHAR tmp[20]; _stprintf (tmp, _T("cdimage%d"), i); if (!_tcsicmp (option, tmp)) { if (!_tcsicmp (value, _T("autodetect"))) { p->cdslots[i].type = SCSI_UNIT_DEFAULT; p->cdslots[i].inuse = true; p->cdslots[i].name[0] = 0; } else { p->cdslots[i].delayed = false; TCHAR *next = _tcsrchr (value, ','); int type = SCSI_UNIT_DEFAULT; int mode = 0; int unitnum = 0; for (;;) { if (!next) break; *next++ = 0; TCHAR *next2 = _tcschr (next, ':'); if (next2) *next2++ = 0; int tmpval = 0; if (!_tcsicmp (next, _T("delay"))) { p->cdslots[i].delayed = true; next = next2; if (!next) break; next2 = _tcschr (next, ':'); if (next2) *next2++ = 0; } type = match_string (cdmodes, next); if (type < 0) type = SCSI_UNIT_DEFAULT; else type--; next = next2; if (!next) break; next2 = _tcschr (next, ':'); if (next2) *next2++ = 0; mode = match_string (cdconmodes, next); if (mode < 0) mode = 0; next = next2; if (!next) break; next2 = _tcschr (next, ':'); if (next2) *next2++ = 0; cfgfile_intval (option, next, tmp, &unitnum, 1); } if (_tcslen (value) > 0) { TCHAR *s = cfgfile_get_multipath (&p->path_cd, NULL, value, false); _tcsncpy (p->cdslots[i].name, s, sizeof p->cdslots[i].name / sizeof (TCHAR)); xfree (s); } p->cdslots[i].name[sizeof p->cdslots[i].name - 1] = 0; p->cdslots[i].inuse = true; p->cdslots[i].type = type; } // disable all following units i++; while (i < MAX_TOTAL_SCSI_DEVICES) { p->cdslots[i].type = SCSI_UNIT_DISABLED; i++; } return 1; } } if (cfgfile_strval (option, value, _T("gfx_autoresolution_min_vertical"), &p->gfx_autoresolution_minv, vertmode, 0)) { p->gfx_autoresolution_minv--; return 1; } if (cfgfile_strval (option, value, _T("gfx_autoresolution_min_horizontal"), &p->gfx_autoresolution_minh, horizmode, 0)) { p->gfx_autoresolution_minh--; return 1; } if (cfgfile_intval (option, value, _T("sound_frequency"), &p->sound_freq, 1) || cfgfile_intval (option, value, _T("sound_max_buff"), &p->sound_maxbsiz, 1) || cfgfile_intval (option, value, _T("state_replay_rate"), &p->statecapturerate, 1) || cfgfile_intval (option, value, _T("state_replay_buffers"), &p->statecapturebuffersize, 1) || cfgfile_yesno (option, value, _T("state_replay_autoplay"), &p->inprec_autoplay) || cfgfile_intval (option, value, _T("sound_frequency"), &p->sound_freq, 1) || cfgfile_intval (option, value, _T("sound_volume"), &p->sound_volume, 1) || cfgfile_intval (option, value, _T("sound_volume_cd"), &p->sound_volume_cd, 1) || cfgfile_intval (option, value, _T("sound_stereo_separation"), &p->sound_stereo_separation, 1) || cfgfile_intval (option, value, _T("sound_stereo_mixing_delay"), &p->sound_mixed_stereo_delay, 1) || cfgfile_intval (option, value, _T("sampler_frequency"), &p->sampler_freq, 1) || cfgfile_intval (option, value, _T("sampler_buffer"), &p->sampler_buffer, 1) || cfgfile_intval (option, value, _T("gfx_framerate"), &p->gfx_framerate, 1) || cfgfile_intval (option, value, _T("gfx_width_windowed"), &p->gfx_size_win.width, 1) || cfgfile_intval (option, value, _T("gfx_height_windowed"), &p->gfx_size_win.height, 1) || cfgfile_intval (option, value, _T("gfx_top_windowed"), &p->gfx_size_win.x, 1) || cfgfile_intval (option, value, _T("gfx_left_windowed"), &p->gfx_size_win.y, 1) || cfgfile_intval (option, value, _T("gfx_width_fullscreen"), &p->gfx_size_fs.width, 1) || cfgfile_intval (option, value, _T("gfx_height_fullscreen"), &p->gfx_size_fs.height, 1) || cfgfile_intval (option, value, _T("gfx_refreshrate"), &p->gfx_apmode[APMODE_NATIVE].gfx_refreshrate, 1) || cfgfile_intval (option, value, _T("gfx_refreshrate_rtg"), &p->gfx_apmode[APMODE_RTG].gfx_refreshrate, 1) || cfgfile_yesno (option, value, _T("gfx_autoresolution"), &p->gfx_autoresolution) || cfgfile_intval (option, value, _T("gfx_backbuffers"), &p->gfx_apmode[APMODE_NATIVE].gfx_backbuffers, 1) || cfgfile_intval (option, value, _T("gfx_backbuffers_rtg"), &p->gfx_apmode[APMODE_RTG].gfx_backbuffers, 1) || cfgfile_yesno (option, value, _T("gfx_interlace"), &p->gfx_apmode[APMODE_NATIVE].gfx_interlaced) || cfgfile_yesno (option, value, _T("gfx_interlace_rtg"), &p->gfx_apmode[APMODE_RTG].gfx_interlaced) || cfgfile_intval (option, value, _T("gfx_center_horizontal_position"), &p->gfx_xcenter_pos, 1) || cfgfile_intval (option, value, _T("gfx_center_vertical_position"), &p->gfx_ycenter_pos, 1) || cfgfile_intval (option, value, _T("gfx_center_horizontal_size"), &p->gfx_xcenter_size, 1) || cfgfile_intval (option, value, _T("gfx_center_vertical_size"), &p->gfx_ycenter_size, 1) #ifdef GFXFILTER || cfgfile_intval (option, value, _T("gfx_filter_vert_zoom"), &p->gfx_filter_vert_zoom, 1) || cfgfile_intval (option, value, _T("gfx_filter_horiz_zoom"), &p->gfx_filter_horiz_zoom, 1) || cfgfile_intval (option, value, _T("gfx_filter_vert_zoom_mult"), &p->gfx_filter_vert_zoom_mult, 1) || cfgfile_intval (option, value, _T("gfx_filter_horiz_zoom_mult"), &p->gfx_filter_horiz_zoom_mult, 1) || cfgfile_intval (option, value, _T("gfx_filter_vert_offset"), &p->gfx_filter_vert_offset, 1) || cfgfile_intval (option, value, _T("gfx_filter_horiz_offset"), &p->gfx_filter_horiz_offset, 1) || cfgfile_intval (option, value, _T("gfx_filter_scanlines"), &p->gfx_filter_scanlines, 1) || cfgfile_intval (option, value, _T("gfx_filter_scanlinelevel"), &p->gfx_filter_scanlinelevel, 1) || cfgfile_intval (option, value, _T("gfx_filter_scanlineratio"), &p->gfx_filter_scanlineratio, 1) || cfgfile_intval (option, value, _T("gfx_filter_luminance"), &p->gfx_filter_luminance, 1) || cfgfile_intval (option, value, _T("gfx_filter_contrast"), &p->gfx_filter_contrast, 1) || cfgfile_intval (option, value, _T("gfx_filter_saturation"), &p->gfx_filter_saturation, 1) || cfgfile_intval (option, value, _T("gfx_filter_gamma"), &p->gfx_filter_gamma, 1) || cfgfile_intval (option, value, _T("gfx_filter_blur"), &p->gfx_filter_blur, 1) || cfgfile_intval (option, value, _T("gfx_filter_noise"), &p->gfx_filter_noise, 1) || cfgfile_intval (option, value, _T("gfx_filter_bilinear"), &p->gfx_filter_bilinear, 1) || cfgfile_intval (option, value, _T("gfx_luminance"), &p->gfx_luminance, 1) || cfgfile_intval (option, value, _T("gfx_contrast"), &p->gfx_contrast, 1) || cfgfile_intval (option, value, _T("gfx_gamma"), &p->gfx_gamma, 1) || cfgfile_intval (option, value, _T("gfx_filter_keep_autoscale_aspect"), &p->gfx_filter_keep_autoscale_aspect, 1) || cfgfile_intval (option, value, _T("gfx_horizontal_tweak"), &p->gfx_extrawidth, 1) || cfgfile_string (option, value, _T("gfx_filter_mask"), p->gfx_filtermask, sizeof p->gfx_filtermask / sizeof (TCHAR)) || cfgfile_intval (option, value, _T("filesys_max_size"), &p->filesys_limit, 1) || cfgfile_intval (option, value, _T("rtg_vert_zoom_mult"), &p->rtg_vert_zoom_mult, 1) || cfgfile_intval (option, value, _T("rtg_horiz_zoom_mult"), &p->rtg_horiz_zoom_mult, 1) #endif || cfgfile_intval (option, value, _T("floppy0sound"), &p->floppyslots[0].dfxclick, 1) || cfgfile_intval (option, value, _T("floppy1sound"), &p->floppyslots[1].dfxclick, 1) || cfgfile_intval (option, value, _T("floppy2sound"), &p->floppyslots[2].dfxclick, 1) || cfgfile_intval (option, value, _T("floppy3sound"), &p->floppyslots[3].dfxclick, 1) || cfgfile_intval (option, value, _T("floppy_channel_mask"), &p->dfxclickchannelmask, 1) || cfgfile_intval (option, value, _T("floppy_volume"), &p->dfxclickvolume, 1)) return 1; if (cfgfile_path (option, value, _T("floppy0soundext"), p->floppyslots[0].dfxclickexternal, sizeof p->floppyslots[0].dfxclickexternal / sizeof (TCHAR)) || cfgfile_path (option, value, _T("floppy1soundext"), p->floppyslots[1].dfxclickexternal, sizeof p->floppyslots[1].dfxclickexternal / sizeof (TCHAR)) || cfgfile_path (option, value, _T("floppy2soundext"), p->floppyslots[2].dfxclickexternal, sizeof p->floppyslots[2].dfxclickexternal / sizeof (TCHAR)) || cfgfile_path (option, value, _T("floppy3soundext"), p->floppyslots[3].dfxclickexternal, sizeof p->floppyslots[3].dfxclickexternal / sizeof (TCHAR)) || cfgfile_string (option, value, _T("config_window_title"), p->config_window_title, sizeof p->config_window_title / sizeof (TCHAR)) || cfgfile_string (option, value, _T("config_info"), p->info, sizeof p->info / sizeof (TCHAR)) || cfgfile_string (option, value, _T("config_description"), p->description, sizeof p->description / sizeof (TCHAR))) return 1; if (cfgfile_yesno (option, value, _T("use_debugger"), &p->start_debugger) || cfgfile_yesno (option, value, _T("sampler_stereo"), &p->sampler_stereo) || cfgfile_yesno (option, value, _T("sound_auto"), &p->sound_auto) || cfgfile_yesno (option, value, _T("sound_stereo_swap_paula"), &p->sound_stereo_swap_paula) || cfgfile_yesno (option, value, _T("sound_stereo_swap_ahi"), &p->sound_stereo_swap_ahi) || cfgfile_yesno (option, value, _T("avoid_cmov"), &p->avoid_cmov) || cfgfile_yesno (option, value, _T("log_illegal_mem"), &p->illegal_mem) || cfgfile_yesno (option, value, _T("filesys_no_fsdb"), &p->filesys_no_uaefsdb) || cfgfile_yesno (option, value, _T("gfx_blacker_than_black"), &p->gfx_blackerthanblack) || cfgfile_yesno (option, value, _T("gfx_flickerfixer"), &p->gfx_scandoubler) || cfgfile_yesno (option, value, _T("magic_mouse"), &p->input_magic_mouse) || cfgfile_yesno (option, value, _T("warp"), &p->turbo_emulation) || cfgfile_yesno (option, value, _T("headless"), &p->headless) || cfgfile_yesno (option, value, _T("clipboard_sharing"), &p->clipboard_sharing) || cfgfile_yesno (option, value, _T("native_code"), &p->native_code) || cfgfile_yesno (option, value, _T("bsdsocket_emu"), &p->socket_emu)) return 1; if (cfgfile_strval (option, value, _T("sound_output"), &p->produce_sound, soundmode1, 1) || cfgfile_strval (option, value, _T("sound_output"), &p->produce_sound, soundmode2, 0) || cfgfile_strval (option, value, _T("sound_interpol"), &p->sound_interpol, interpolmode, 0) || cfgfile_strval (option, value, _T("sound_filter"), &p->sound_filter, soundfiltermode1, 0) || cfgfile_strval (option, value, _T("sound_filter_type"), &p->sound_filter_type, soundfiltermode2, 0) || cfgfile_strboolval (option, value, _T("use_gui"), &p->start_gui, guimode1, 1) || cfgfile_strboolval (option, value, _T("use_gui"), &p->start_gui, guimode2, 1) || cfgfile_strboolval (option, value, _T("use_gui"), &p->start_gui, guimode3, 0) || cfgfile_strval (option, value, _T("gfx_resolution"), &p->gfx_resolution, lorestype1, 0) || cfgfile_strval (option, value, _T("gfx_lores"), &p->gfx_resolution, lorestype2, 0) || cfgfile_strval (option, value, _T("gfx_lores_mode"), &p->gfx_lores_mode, loresmode, 0) || cfgfile_strval (option, value, _T("gfx_fullscreen_amiga"), &p->gfx_apmode[APMODE_NATIVE].gfx_fullscreen, fullmodes, 0) || cfgfile_strval (option, value, _T("gfx_fullscreen_picasso"), &p->gfx_apmode[APMODE_RTG].gfx_fullscreen, fullmodes, 0) || cfgfile_strval (option, value, _T("gfx_center_horizontal"), &p->gfx_xcenter, centermode1, 1) || cfgfile_strval (option, value, _T("gfx_center_vertical"), &p->gfx_ycenter, centermode1, 1) || cfgfile_strval (option, value, _T("gfx_center_horizontal"), &p->gfx_xcenter, centermode2, 0) || cfgfile_strval (option, value, _T("gfx_center_vertical"), &p->gfx_ycenter, centermode2, 0) || cfgfile_strval (option, value, _T("gfx_colour_mode"), &p->color_mode, colormode1, 1) || cfgfile_strval (option, value, _T("gfx_colour_mode"), &p->color_mode, colormode2, 0) || cfgfile_strval (option, value, _T("gfx_color_mode"), &p->color_mode, colormode1, 1) || cfgfile_strval (option, value, _T("gfx_color_mode"), &p->color_mode, colormode2, 0) || cfgfile_strval (option, value, _T("gfx_max_horizontal"), &p->gfx_max_horizontal, maxhoriz, 0) || cfgfile_strval (option, value, _T("gfx_max_vertical"), &p->gfx_max_vertical, maxvert, 0) || cfgfile_strval (option, value, _T("gfx_filter_autoscale"), &p->gfx_filter_autoscale, autoscale, 0) || cfgfile_strval (option, value, _T("gfx_api"), &p->gfx_api, filterapi, 0) || cfgfile_strval (option, value, _T("magic_mousecursor"), &p->input_magic_mouse_cursor, magiccursors, 0) || cfgfile_strval (option, value, _T("gfx_filter_keep_aspect"), &p->gfx_filter_keep_aspect, aspects, 0) || cfgfile_strval (option, value, _T("absolute_mouse"), &p->input_tablet, abspointers, 0)) return 1; if (cfgfile_intval (option, value, _T("gfx_display"), &p->gfx_apmode[APMODE_NATIVE].gfx_display, 1)) { p->gfx_apmode[APMODE_RTG].gfx_display = p->gfx_apmode[APMODE_NATIVE].gfx_display; return 1; } if (cfgfile_intval (option, value, _T("gfx_display_rtg"), &p->gfx_apmode[APMODE_RTG].gfx_display, 1)) { return 1; } if (_tcscmp (option, _T("gfx_display_friendlyname")) == 0 || _tcscmp (option, _T("gfx_display_name")) == 0) { TCHAR tmp[MAX_DPATH]; if (cfgfile_string (option, value, _T("gfx_display_friendlyname"), tmp, sizeof tmp / sizeof (TCHAR))) { int num = target_get_display (tmp); if (num >= 0) p->gfx_apmode[APMODE_RTG].gfx_display = p->gfx_apmode[APMODE_NATIVE].gfx_display = num; } if (cfgfile_string (option, value, _T("gfx_display_name"), tmp, sizeof tmp / sizeof (TCHAR))) { int num = target_get_display (tmp); if (num >= 0) p->gfx_apmode[APMODE_RTG].gfx_display = p->gfx_apmode[APMODE_NATIVE].gfx_display = num; } return 1; } if (_tcscmp (option, _T("gfx_display_friendlyname_rtg")) == 0 || _tcscmp (option, _T("gfx_display_name_rtg")) == 0) { TCHAR tmp[MAX_DPATH]; if (cfgfile_string (option, value, _T("gfx_display_friendlyname_rtg"), tmp, sizeof tmp / sizeof (TCHAR))) { int num = target_get_display (tmp); if (num >= 0) p->gfx_apmode[APMODE_RTG].gfx_display = num; } if (cfgfile_string (option, value, _T("gfx_display_name_rtg"), tmp, sizeof tmp / sizeof (TCHAR))) { int num = target_get_display (tmp); if (num >= 0) p->gfx_apmode[APMODE_RTG].gfx_display = num; } return 1; } if (_tcscmp (option, _T("gfx_linemode")) == 0) { int v; p->gfx_vresolution = VRES_DOUBLE; p->gfx_scanlines = false; if (cfgfile_strval (option, value, _T("gfx_linemode"), &v, linemode, 0)) { p->gfx_scanlines = v & 1; p->gfx_vresolution = v / 2; } 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) 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) 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)) return 1; if (cfgfile_strval (option, value, _T("gfx_vsyncmode_picasso"), &p->gfx_apmode[APMODE_RTG].gfx_vsyncmode, vsyncmodes2, 0)) return 1; if (cfgfile_yesno (option, value, _T("show_leds"), &vb)) { if (vb) p->leds_on_screen |= STATUSLINE_CHIPSET; else p->leds_on_screen &= ~STATUSLINE_CHIPSET; return 1; } if (cfgfile_yesno (option, value, _T("show_leds_rtg"), &vb)) { if (vb) p->leds_on_screen |= STATUSLINE_RTG; else p->leds_on_screen &= ~STATUSLINE_RTG; return 1; } if (_tcscmp (option, _T("show_leds_enabled")) == 0 || _tcscmp (option, _T("show_leds_enabled_rtg")) == 0) { TCHAR tmp[MAX_DPATH]; int idx = _tcscmp (option, _T("show_leds_enabled")) == 0 ? 0 : 1; p->leds_on_screen_mask[idx] = 0; _tcscpy (tmp, value); _tcscat (tmp, _T(",")); TCHAR *s = tmp; for (;;) { TCHAR *s2 = s; TCHAR *s3 = _tcschr (s, ':'); s = _tcschr (s, ','); if (!s) break; if (s3 && s3 < s) s = s3; *s = 0; for (int i = 0; leds[i]; i++) { if (!_tcsicmp (s2, leds[i])) { p->leds_on_screen_mask[idx] |= 1 << i; } } s++; } return 1; } if (!_tcscmp (option, _T("osd_position"))) { TCHAR *s = value; p->osd_pos.x = 0; p->osd_pos.y = 0; while (s) { if (!_tcschr (s, ':')) break; p->osd_pos.x = (int)(_tstof (s) * 10.0); s = _tcschr (s, ':'); if (!s) break; if (s[-1] == '%') p->osd_pos.x += 30000; s++; p->osd_pos.y = (int)(_tstof (s) * 10.0); s += _tcslen (s); if (s[-1] == '%') p->osd_pos.y += 30000; break; } return 1; } #ifdef GFXFILTER if (_tcscmp (option, _T("gfx_filter_overlay")) == 0) { TCHAR *s = _tcschr (value, ','); p->gfx_filteroverlay_overscan = 0; p->gfx_filteroverlay_pos.x = 0; p->gfx_filteroverlay_pos.y = 0; p->gfx_filteroverlay_pos.width = 0; p->gfx_filteroverlay_pos.height = 0; if (s) *s = 0; while (s) { *s++ = 0; p->gfx_filteroverlay_overscan = _tstol (s); s = _tcschr (s, ':'); if (!s) break; #if 0 p->gfx_filteroverlay_pos.x = _tstol (s); s = _tcschr (s, ','); if (!s) break; if (s[-1] == '%') p->gfx_filteroverlay_pos.x = -30000 - p->gfx_filteroverlay_pos.x; *s++ = 0; p->gfx_filteroverlay_pos.y = _tstol (s); s = _tcschr (s, ','); if (!s) break; if (s[-1] == '%') p->gfx_filteroverlay_pos.y = -30000 - p->gfx_filteroverlay_pos.y; *s++ = 0; p->gfx_filteroverlay_pos.width = _tstol (s); s = _tcschr (s, ','); if (!s) break; if (s[-1] == '%') p->gfx_filteroverlay_pos.width = -30000 - p->gfx_filteroverlay_pos.width; *s++ = 0; p->gfx_filteroverlay_pos.height = _tstol (s); s = _tcschr (s, ','); if (!s) break; if (s[-1] == '%') p->gfx_filteroverlay_pos.height = -30000 - p->gfx_filteroverlay_pos.height; *s++ = 0; p->gfx_filteroverlay_overscan = _tstol (s); TCHAR *s2 = _tcschr (s, ','); if (s2) *s2 = 0; #endif break; } _tcsncpy (p->gfx_filteroverlay, value, sizeof p->gfx_filteroverlay / sizeof (TCHAR) - 1); p->gfx_filteroverlay[sizeof p->gfx_filteroverlay / sizeof (TCHAR) - 1] = 0; return 1; } if (_tcscmp (option, _T("gfx_filter")) == 0) { int i = 0; TCHAR *s = _tcschr (value, ':'); p->gfx_filtershader[0] = 0; p->gfx_filter = 0; if (s) { *s++ = 0; if (!_tcscmp (value, _T("D3D"))) { p->gfx_api = 1; _tcscpy (p->gfx_filtershader, s); } } if (!_tcscmp (value, _T("direct3d"))) { p->gfx_api = 1; // forwards compatibiity } else { while(uaefilters[i].name) { if (!_tcscmp (uaefilters[i].cfgname, value)) { p->gfx_filter = uaefilters[i].type; break; } i++; } } return 1; } if (_tcscmp (option, _T("gfx_filter_mode")) == 0) { cfgfile_strval (option, value, _T("gfx_filter_mode"), &p->gfx_filter_filtermode, filtermode2, 0); return 1; } if (cfgfile_string (option, value, _T("gfx_filter_aspect_ratio"), tmpbuf, sizeof tmpbuf / sizeof (TCHAR))) { int v1, v2; TCHAR *s; p->gfx_filter_aspect = -1; v1 = _tstol (tmpbuf); s = _tcschr (tmpbuf, ':'); if (s) { v2 = _tstol (s + 1); if (v1 < 0 || v2 < 0) p->gfx_filter_aspect = -1; else if (v1 == 0 || v2 == 0) p->gfx_filter_aspect = 0; else p->gfx_filter_aspect = (v1 << 8) | v2; } return 1; } #endif if (_tcscmp (option, _T("gfx_width")) == 0 || _tcscmp (option, _T("gfx_height")) == 0) { cfgfile_intval (option, value, _T("gfx_width"), &p->gfx_size_win.width, 1); cfgfile_intval (option, value, _T("gfx_height"), &p->gfx_size_win.height, 1); p->gfx_size_fs.width = p->gfx_size_win.width; p->gfx_size_fs.height = p->gfx_size_win.height; return 1; } if (_tcscmp (option, _T("gfx_fullscreen_multi")) == 0 || _tcscmp (option, _T("gfx_windowed_multi")) == 0) { TCHAR tmp[256], *tmpp, *tmpp2; struct wh *wh = p->gfx_size_win_xtra; if (_tcscmp (option, _T("gfx_fullscreen_multi")) == 0) wh = p->gfx_size_fs_xtra; _stprintf (tmp, _T(",%s,"), value); tmpp2 = tmp; for (i = 0; i < 4; i++) { tmpp = _tcschr (tmpp2, ','); tmpp++; wh[i].width = _tstol (tmpp); while (*tmpp != ',' && *tmpp != 'x' && *tmpp != '*') tmpp++; wh[i].height = _tstol (tmpp + 1); tmpp2 = tmpp; } return 1; } if (_tcscmp (option, _T("joyportfriendlyname0")) == 0 || _tcscmp (option, _T("joyportfriendlyname1")) == 0) { inputdevice_joyport_config (p, value, _tcscmp (option, _T("joyportfriendlyname0")) == 0 ? 0 : 1, -1, 2); return 1; } if (_tcscmp (option, _T("joyportfriendlyname2")) == 0 || _tcscmp (option, _T("joyportfriendlyname3")) == 0) { inputdevice_joyport_config (p, value, _tcscmp (option, _T("joyportfriendlyname2")) == 0 ? 2 : 3, -1, 2); return 1; } if (_tcscmp (option, _T("joyportname0")) == 0 || _tcscmp (option, _T("joyportname1")) == 0) { inputdevice_joyport_config (p, value, _tcscmp (option, _T("joyportname0")) == 0 ? 0 : 1, -1, 1); return 1; } if (_tcscmp (option, _T("joyportname2")) == 0 || _tcscmp (option, _T("joyportname3")) == 0) { inputdevice_joyport_config (p, value, _tcscmp (option, _T("joyportname2")) == 0 ? 2 : 3, -1, 1); return 1; } if (_tcscmp (option, _T("joyport0")) == 0 || _tcscmp (option, _T("joyport1")) == 0) { inputdevice_joyport_config (p, value, _tcscmp (option, _T("joyport0")) == 0 ? 0 : 1, -1, 0); return 1; } if (_tcscmp (option, _T("joyport2")) == 0 || _tcscmp (option, _T("joyport3")) == 0) { inputdevice_joyport_config (p, value, _tcscmp (option, _T("joyport2")) == 0 ? 2 : 3, -1, 0); return 1; } if (cfgfile_strval (option, value, _T("joyport0mode"), &p->jports[0].mode, joyportmodes, 0)) return 1; if (cfgfile_strval (option, value, _T("joyport1mode"), &p->jports[1].mode, joyportmodes, 0)) return 1; if (cfgfile_strval (option, value, _T("joyport2mode"), &p->jports[2].mode, joyportmodes, 0)) return 1; if (cfgfile_strval (option, value, _T("joyport3mode"), &p->jports[3].mode, joyportmodes, 0)) return 1; if (cfgfile_strval (option, value, _T("joyport0autofire"), &p->jports[0].autofire, joyaf, 0)) return 1; if (cfgfile_strval (option, value, _T("joyport1autofire"), &p->jports[1].autofire, joyaf, 0)) return 1; if (cfgfile_strval (option, value, _T("joyport2autofire"), &p->jports[2].autofire, joyaf, 0)) return 1; if (cfgfile_strval (option, value, _T("joyport3autofire"), &p->jports[3].autofire, joyaf, 0)) return 1; if (cfgfile_path (option, value, _T("statefile_quit"), p->quitstatefile, sizeof p->quitstatefile / sizeof (TCHAR))) return 1; if (cfgfile_string (option, value, _T("statefile_name"), tmpbuf, sizeof tmpbuf / sizeof (TCHAR))) { fetch_statefilepath (savestate_fname, sizeof savestate_fname / sizeof (TCHAR)); _tcscat (savestate_fname, tmpbuf); if (_tcslen (savestate_fname) >= 4 && _tcsicmp (savestate_fname + _tcslen (savestate_fname) - 4, _T(".uss"))) _tcscat (savestate_fname, _T(".uss")); return 1; } if (cfgfile_path (option, value, _T("statefile"), tmpbuf, sizeof tmpbuf / sizeof (TCHAR))) { _tcscpy (p->statefile, tmpbuf); _tcscpy (savestate_fname, tmpbuf); if (zfile_exists (savestate_fname)) { savestate_state = STATE_DORESTORE; } else { int ok = 0; #ifdef FSUAE // code above seems broken, checks dir but removes file // simple fix: force ok (but leave WIN32 version as it // is, in case it is supposed to work like this ok = 1; #else if (savestate_fname[0]) { for (;;) { TCHAR *p; if (my_existsdir (savestate_fname)) { ok = 1; break; } p = _tcsrchr (savestate_fname, '\\'); if (!p) p = _tcsrchr (savestate_fname, '/'); if (!p) break; *p = 0; } } #endif if (!ok) { TCHAR tmp[MAX_DPATH]; fetch_statefilepath (tmp, sizeof tmp / sizeof (TCHAR)); _tcscat (tmp, savestate_fname); if (zfile_exists (tmp)) { _tcscpy (savestate_fname, tmp); savestate_state = STATE_DORESTORE; } else { savestate_fname[0] = 0; } } } return 1; } if (cfgfile_strval (option, value, _T("sound_channels"), &p->sound_stereo, stereomode, 1)) { if (p->sound_stereo == SND_NONE) { /* "mixed stereo" compatibility hack */ p->sound_stereo = SND_STEREO; p->sound_mixed_stereo_delay = 5; p->sound_stereo_separation = 7; } return 1; } if (_tcscmp (option, _T("kbd_lang")) == 0) { KbdLang l; if ((l = KBD_LANG_DE, strcasecmp (value, _T("de")) == 0) || (l = KBD_LANG_DK, strcasecmp (value, _T("dk")) == 0) || (l = KBD_LANG_SE, strcasecmp (value, _T("se")) == 0) || (l = KBD_LANG_US, strcasecmp (value, _T("us")) == 0) || (l = KBD_LANG_FR, strcasecmp (value, _T("fr")) == 0) || (l = KBD_LANG_IT, strcasecmp (value, _T("it")) == 0) || (l = KBD_LANG_ES, strcasecmp (value, _T("es")) == 0)) p->keyboard_lang = l; else write_log (_T("Unknown keyboard language\n")); return 1; } if (cfgfile_string (option, value, _T("config_version"), tmpbuf, sizeof (tmpbuf) / sizeof (TCHAR))) { TCHAR *tmpp2; tmpp = _tcschr (value, '.'); if (tmpp) { *tmpp++ = 0; tmpp2 = tmpp; p->config_version = _tstol (tmpbuf) << 16; tmpp = _tcschr (tmpp, '.'); if (tmpp) { *tmpp++ = 0; p->config_version |= _tstol (tmpp2) << 8; p->config_version |= _tstol (tmpp); } } return 1; } if (cfgfile_string (option, value, _T("keyboard_leds"), tmpbuf, sizeof (tmpbuf) / sizeof (TCHAR))) { TCHAR *tmpp2 = tmpbuf; int i, num; p->keyboard_leds[0] = p->keyboard_leds[1] = p->keyboard_leds[2] = 0; p->keyboard_leds_in_use = 0; _tcscat (tmpbuf, _T(",")); for (i = 0; i < 3; i++) { tmpp = _tcschr (tmpp2, ':'); if (!tmpp) break; *tmpp++= 0; num = -1; if (!strcasecmp (tmpp2, _T("numlock"))) num = 0; if (!strcasecmp (tmpp2, _T("capslock"))) num = 1; if (!strcasecmp (tmpp2, _T("scrolllock"))) num = 2; tmpp2 = tmpp; tmpp = _tcschr (tmpp2, ','); if (!tmpp) break; *tmpp++= 0; if (num >= 0) { p->keyboard_leds[num] = match_string (kbleds, tmpp2); if (p->keyboard_leds[num]) p->keyboard_leds_in_use = 1; } tmpp2 = tmpp; } return 1; } if (_tcscmp (option, _T("displaydata")) == 0 || _tcscmp (option, _T("displaydata_pal")) == 0 || _tcscmp (option, _T("displaydata_ntsc")) == 0) { _tcsncpy (tmpbuf, value, sizeof tmpbuf / sizeof (TCHAR) - 1); tmpbuf[sizeof tmpbuf / sizeof (TCHAR) - 1] = '\0'; int vert = -1, horiz = -1, lace = -1, ntsc = -1, framelength = -1, vsync = -1; bool locked = false; bool rtg = false; double rate = -1; TCHAR cmd[MAX_DPATH], label[16] = { 0 }; TCHAR *tmpp = tmpbuf; TCHAR *end = tmpbuf + _tcslen (tmpbuf); cmd[0] = 0; for (;;) { TCHAR *next = _tcschr (tmpp, ','); TCHAR *equals = _tcschr (tmpp, '='); if (!next) next = end; if (equals == NULL || equals > next) equals = NULL; else equals++; *next = 0; if (rate < 0) rate = _tstof (tmpp); else if (!_tcsnicmp (tmpp, _T("v="), 2)) vert = _tstol (equals); else if (!_tcsnicmp (tmpp, _T("h="), 2)) horiz = _tstol (equals); else if (!_tcsnicmp (tmpp, _T("t="), 2)) _tcsncpy (label, equals, sizeof label / sizeof (TCHAR) - 1); else if (equals) { if (_tcslen (cmd) + _tcslen (tmpp) + 2 < sizeof (cmd) / sizeof(TCHAR)) { _tcscat (cmd, tmpp); _tcscat (cmd, _T("\n")); } } if (!_tcsnicmp (tmpp, _T("locked"), 4)) locked = true; if (!_tcsnicmp (tmpp, _T("nlace"), 5)) lace = 0; if (!_tcsnicmp (tmpp, _T("lace"), 4)) lace = 1; if (!_tcsnicmp (tmpp, _T("nvsync"), 5)) vsync = 0; if (!_tcsnicmp (tmpp, _T("vsync"), 4)) vsync = 1; if (!_tcsnicmp (tmpp, _T("ntsc"), 4)) ntsc = 1; if (!_tcsnicmp (tmpp, _T("pal"), 3)) ntsc = 0; if (!_tcsnicmp (tmpp, _T("lof"), 3)) framelength = 1; if (!_tcsnicmp (tmpp, _T("shf"), 3)) framelength = 0; if (!_tcsnicmp (tmpp, _T("rtg"), 3)) rtg = true; tmpp = next; if (tmpp >= end) break; tmpp++; } if (rate > 0) { for (int i = 0; i < MAX_CHIPSET_REFRESH; i++) { if (_tcscmp (option, _T("displaydata_pal")) == 0) { i = CHIPSET_REFRESH_PAL; p->cr[i].rate = -1; _tcscpy (label, _T("PAL")); } else if (_tcscmp (option, _T("displaydata_ntsc")) == 0) { i = CHIPSET_REFRESH_NTSC; p->cr[i].rate = -1; _tcscpy (label, _T("NTSC")); } if (p->cr[i].rate <= 0) { p->cr[i].horiz = horiz; p->cr[i].vert = vert; p->cr[i].lace = lace; p->cr[i].ntsc = ntsc; p->cr[i].vsync = vsync; p->cr[i].locked = locked; p->cr[i].rtg = rtg; p->cr[i].framelength = framelength; p->cr[i].rate = rate; _tcscpy (p->cr[i].commands, cmd); _tcscpy (p->cr[i].label, label); break; } } } return 1; } return 0; } static void decode_rom_ident (TCHAR *romfile, int maxlen, const TCHAR *ident, int romflags) { const TCHAR *p; int ver, rev, subver, subrev, round, i; TCHAR model[64], *modelp; struct romlist **rl; TCHAR *romtxt; if (!ident[0]) return; romtxt = xmalloc (TCHAR, 10000); romtxt[0] = 0; for (round = 0; round < 2; round++) { ver = rev = subver = subrev = -1; modelp = NULL; memset (model, 0, sizeof model); p = ident; while (*p) { TCHAR c = *p++; int *pp1 = NULL, *pp2 = NULL; if (_totupper (c) == 'V' && _istdigit (*p)) { pp1 = &ver; pp2 = &rev; } else if (_totupper (c) == 'R' && _istdigit (*p)) { pp1 = &subver; pp2 = &subrev; } else if (!_istdigit (c) && c != ' ') { _tcsncpy (model, p - 1, (sizeof model) / sizeof (TCHAR) - 1); p += _tcslen (model); modelp = model; } if (pp1) { *pp1 = _tstol (p); while (*p != 0 && *p != '.' && *p != ' ') p++; if (*p == '.') { p++; if (pp2) *pp2 = _tstol (p); } } if (*p == 0 || *p == ';') { rl = getromlistbyident (ver, rev, subver, subrev, modelp, romflags, round > 0); if (rl) { for (i = 0; rl[i]; i++) { if (round) { TCHAR romname[MAX_DPATH]; getromname(rl[i]->rd, romname); _tcscat (romtxt, romname); _tcscat (romtxt, _T("\n")); } else { _tcsncpy (romfile, rl[i]->path, maxlen); goto end; } } xfree (rl); } } } } end: if (round && romtxt[0]) { notify_user_parms (NUMSG_ROMNEED, romtxt, romtxt); } xfree (romtxt); } static struct uaedev_config_info *getuci (struct uae_prefs *p) { if (p->mountitems < MOUNT_CONFIG_SIZE) return &p->mountconfig[p->mountitems++]; return NULL; } struct uaedev_config_info *add_filesys_config (struct uae_prefs *p, int index, const TCHAR *devname, const TCHAR *volname, const TCHAR *rootdir, bool readonly, int cyls, int secspertrack, int surfaces, int reserved, int blocksize, int bootpri, const TCHAR *filesysdir, int hdc, int flag, int pcyls, int pheads, int psecs) { struct uaedev_config_info *uci; int i; TCHAR *s; if (index < 0 && devname && _tcslen (devname) > 0) { for (i = 0; i < p->mountitems; i++) { if (p->mountconfig[i].devname && !_tcscmp (p->mountconfig[i].devname, devname)) return 0; } } if (index < 0) { uci = getuci(p); uci->configoffset = -1; } else { uci = &p->mountconfig[index]; } if (!uci) return 0; uci->ishdf = volname == NULL ? 1 : 0; _tcscpy (uci->devname, devname ? devname : _T("")); _tcscpy (uci->volname, volname ? volname : _T("")); _tcscpy (uci->rootdir, rootdir ? rootdir : _T("")); validatedevicename (uci->devname); validatevolumename (uci->volname); uci->readonly = readonly; uci->cyls = cyls; uci->sectors = secspertrack; uci->surfaces = surfaces; uci->reserved = reserved; uci->blocksize = blocksize; uci->bootpri = bootpri; uci->donotmount = 0; uci->autoboot = 0; if (!pcyls || !pheads || !psecs) pcyls = pheads = psecs = 0; uci->pcyls = pcyls; uci->pheads = pheads; uci->psecs = psecs; if (bootpri < -128) uci->donotmount = 1; else if (bootpri >= -127) uci->autoboot = 1; uci->controller = hdc; _tcscpy (uci->filesys, filesysdir ? filesysdir : _T("")); if (!uci->devname[0]) { TCHAR base[32]; TCHAR base2[32]; int num = 0; if (uci->rootdir[0] == 0 && !uci->ishdf) _tcscpy (base, _T("RDH")); else _tcscpy (base, _T("DH")); _tcscpy (base2, base); for (i = 0; i < p->mountitems; i++) { _stprintf (base2, _T("%s%d"), base, num); if (!_tcscmp(base2, p->mountconfig[i].devname)) { num++; i = -1; continue; } } _tcscpy (uci->devname, base2); validatedevicename (uci->devname); } s = filesys_createvolname (volname, rootdir, _T("Harddrive")); _tcscpy (uci->volname, s); xfree (s); return uci; } static void parse_addmem (struct uae_prefs *p, TCHAR *buf, int num) { int size = 0, addr = 0; if (!getintval2 (&buf, &addr, ',')) return; if (!getintval2 (&buf, &size, 0)) return; if (addr & 0xffff) return; if ((size & 0xffff) || (size & 0xffff0000) == 0) return; p->custom_memory_addrs[num] = addr; p->custom_memory_sizes[num] = size; } static int get_filesys_controller (const TCHAR *hdc) { int hdcv = HD_CONTROLLER_UAE; if(_tcslen (hdc) >= 4 && !_tcsncmp (hdc, _T("ide"), 3)) { hdcv = hdc[3] - '0' + HD_CONTROLLER_IDE0; if (hdcv < HD_CONTROLLER_IDE0 || hdcv > HD_CONTROLLER_IDE3) hdcv = 0; } if(_tcslen (hdc) >= 5 && !_tcsncmp (hdc, _T("scsi"), 4)) { hdcv = hdc[4] - '0' + HD_CONTROLLER_SCSI0; if (hdcv < HD_CONTROLLER_SCSI0 || hdcv > HD_CONTROLLER_SCSI6) hdcv = 0; } if (_tcslen (hdc) >= 6 && !_tcsncmp (hdc, _T("scsram"), 6)) hdcv = HD_CONTROLLER_PCMCIA_SRAM; if (_tcslen (hdc) >= 5 && !_tcsncmp (hdc, _T("scide"), 6)) hdcv = HD_CONTROLLER_PCMCIA_IDE; return hdcv; } static int cfgfile_parse_newfilesys (struct uae_prefs *p, int nr, bool hdf, TCHAR *value) { int cyls, secs, heads, reserved, bs, bp, hdcv; int pcyls, pheads, psecs; bool ro; TCHAR *dname = NULL, *aname = _T(""), *root = NULL, *fs = NULL, *hdc; TCHAR *tmpp = _tcschr (value, ','); TCHAR *str = NULL; config_newfilesystem = 1; if (tmpp == 0) goto invalid_fs; *tmpp++ = '\0'; if (strcasecmp (value, _T("ro")) == 0) ro = true; else if (strcasecmp (value, _T("rw")) == 0) ro = false; else goto invalid_fs; cyls = 0,secs = 0; heads = 0; reserved = 0; bs = 0; bp = 0; fs = 0; hdc = 0; hdcv = 0; pcyls = pheads = psecs = 0; value = tmpp; if (!hdf) { tmpp = _tcschr (value, ':'); if (tmpp == 0) goto empty_fs; *tmpp++ = 0; dname = value; aname = tmpp; tmpp = _tcschr (tmpp, ':'); if (tmpp == 0) goto empty_fs; *tmpp++ = 0; root = tmpp; tmpp = _tcschr (tmpp, ','); if (tmpp == 0) goto empty_fs; *tmpp++ = 0; if (! getintval (&tmpp, &bp, 0)) goto empty_fs; } else { tmpp = _tcschr (value, ':'); if (tmpp == 0) goto invalid_fs; *tmpp++ = '\0'; dname = value; root = tmpp; tmpp = _tcschr (tmpp, ','); if (tmpp == 0) goto invalid_fs; *tmpp++ = 0; aname = 0; if (! getintval (&tmpp, &secs, ',') || ! getintval (&tmpp, &heads, ',') || ! getintval (&tmpp, &reserved, ',') || ! getintval (&tmpp, &bs, ',')) goto invalid_fs; if (getintval2 (&tmpp, &bp, ',')) { fs = tmpp; tmpp = _tcschr (tmpp, ','); if (tmpp != 0) { *tmpp++ = 0; TCHAR *tmpp2 = _tcschr (tmpp, ','); if (tmpp2) *tmpp2++ = 0; hdcv = get_filesys_controller (tmpp); if (tmpp2) { if (getintval2 (&tmpp2, &cyls, ',')) { getintval (&tmpp2, &pcyls, '/'); getintval (&tmpp2, &pheads, '/'); getintval2 (&tmpp2, &psecs, '/'); } } } } } empty_fs: if (root) { if (_tcslen (root) > 3 && root[0] == 'H' && root[1] == 'D' && root[2] == '_') { root += 2; *root = ':'; } str = cfgfile_subst_path_load (UNEXPANDED, &p->path_hardfile, root, false); } #ifdef FILESYS add_filesys_config (p, nr, dname, aname, str, ro, cyls, secs, heads, reserved, bs, bp, fs, hdcv, 0, pcyls, pheads, psecs); #endif xfree (str); return 1; invalid_fs: write_log (_T("Invalid filesystem/hardfile specification.\n")); return 1; } static int cfgfile_parse_filesys (struct uae_prefs *p, const TCHAR *option, TCHAR *value) { int i; for (i = 0; i < MAX_FILESYSTEM_UNITS; i++) { TCHAR tmp[100]; _stprintf (tmp, _T("uaehf%d"), i); if (_tcscmp (option, tmp) == 0) { for (;;) { bool hdf = false; TCHAR *tmpp = _tcschr (value, ','); if (tmpp == NULL) return 1; *tmpp++ = 0; if (strcasecmp (value, _T("hdf")) == 0) { hdf = true; } else if (strcasecmp (value, _T("dir")) != 0) { return 1; } #if 0 // not yet return cfgfile_parse_newfilesys (p, i, hdf, tmpp); #else return 1; #endif } return 1; } else if (!_tcsncmp (option, tmp, _tcslen (tmp)) && option[_tcslen (tmp)] == '_') { struct uaedev_config_info *uci = &currprefs.mountconfig[i]; if (uci->devname) { const TCHAR *s = &option[_tcslen (tmp) + 1]; if (!_tcscmp (s, _T("bootpri"))) { getintval (&value, &uci->bootpri, 0); } else if (!_tcscmp (s, _T("read-only"))) { cfgfile_yesno (NULL, value, NULL, &uci->readonly); } else if (!_tcscmp (s, _T("volumename"))) { _tcscpy (uci->volname, value); } else if (!_tcscmp (s, _T("devicename"))) { _tcscpy (uci->devname, value); } else if (!_tcscmp (s, _T("root"))) { _tcscpy (uci->rootdir, value); } else if (!_tcscmp (s, _T("filesys"))) { _tcscpy (uci->filesys, value); } else if (!_tcscmp (s, _T("controller"))) { uci->controller = get_filesys_controller (value); } } } } if (_tcscmp (option, _T("filesystem")) == 0 || _tcscmp (option, _T("hardfile")) == 0) { int secs, heads, reserved, bs; bool ro; TCHAR *aname, *root; TCHAR *tmpp = _tcschr (value, ','); TCHAR *str; if (config_newfilesystem) return 1; if (tmpp == 0) goto invalid_fs; *tmpp++ = '\0'; if (_tcscmp (value, _T("1")) == 0 || strcasecmp (value, _T("ro")) == 0 || strcasecmp (value, _T("readonly")) == 0 || strcasecmp (value, _T("read-only")) == 0) ro = true; else if (_tcscmp (value, _T("0")) == 0 || strcasecmp (value, _T("rw")) == 0 || strcasecmp (value, _T("readwrite")) == 0 || strcasecmp (value, _T("read-write")) == 0) ro = false; else goto invalid_fs; secs = 0; heads = 0; reserved = 0; bs = 0; value = tmpp; if (_tcscmp (option, _T("filesystem")) == 0) { tmpp = _tcschr (value, ':'); if (tmpp == 0) goto invalid_fs; *tmpp++ = '\0'; aname = value; root = tmpp; } else { if (! getintval (&value, &secs, ',') || ! getintval (&value, &heads, ',') || ! getintval (&value, &reserved, ',') || ! getintval (&value, &bs, ',')) goto invalid_fs; root = value; aname = 0; } str = cfgfile_subst_path_load (UNEXPANDED, &p->path_hardfile, root, true); #ifdef FILESYS add_filesys_config (p, -1, NULL, aname, str, ro, 0, secs, heads, reserved, bs, 0, NULL, 0, 0, 0, 0, 0); #endif xfree (str); return 1; invalid_fs: write_log (_T("Invalid filesystem/hardfile specification.\n")); return 1; } if (_tcscmp (option, _T("filesystem2")) == 0) return cfgfile_parse_newfilesys (p, -1, false, value); if (_tcscmp (option, _T("hardfile2")) == 0) return cfgfile_parse_newfilesys (p, -1, true, value); return 0; } static int cfgfile_parse_hardware (struct uae_prefs *p, const TCHAR *option, TCHAR *value) { int tmpval, dummyint, i; bool tmpbool, dummybool; TCHAR *section = 0; TCHAR tmpbuf[CONFIG_BLEN]; if (cfgfile_yesno (option, value, _T("cpu_cycle_exact"), &p->cpu_cycle_exact) || cfgfile_yesno (option, value, _T("blitter_cycle_exact"), &p->blitter_cycle_exact)) { if (p->cpu_model >= 68020 && p->cachesize > 0) p->cpu_cycle_exact = p->blitter_cycle_exact = 0; /* we don't want cycle-exact in 68020/40+JIT modes */ return 1; } if (cfgfile_yesno (option, value, _T("cycle_exact"), &tmpbool)) { p->cpu_cycle_exact = p->blitter_cycle_exact = tmpbool; if (p->cpu_model >= 68020 && p->cachesize > 0) p->cpu_cycle_exact = p->blitter_cycle_exact = false; return 1; } if (cfgfile_string (option, value, _T("cpu_multiplier"), tmpbuf, sizeof tmpbuf / sizeof (TCHAR))) { p->cpu_clock_multiplier = (int)(_tstof (tmpbuf) * 256.0); return 1; } if (cfgfile_yesno (option, value, _T("scsi_a3000"), &dummybool)) { if (dummybool) p->cs_mbdmac = 1; return 1; } if (cfgfile_yesno (option, value, _T("scsi_a4000t"), &dummybool)) { if (dummybool) p->cs_mbdmac = 2; return 1; } if (cfgfile_string (option, value, _T("a2065"), p->a2065name, sizeof p->a2065name / sizeof (TCHAR))) return 1; if (cfgfile_yesno (option, value, _T("immediate_blits"), &p->immediate_blits) || cfgfile_yesno (option, value, _T("cd32cd"), &p->cs_cd32cd) || cfgfile_yesno (option, value, _T("cd32c2p"), &p->cs_cd32c2p) || cfgfile_yesno (option, value, _T("cd32nvram"), &p->cs_cd32nvram) || cfgfile_yesno (option, value, _T("cdtvcd"), &p->cs_cdtvcd) || cfgfile_yesno (option, value, _T("cdtvram"), &p->cs_cdtvram) || cfgfile_yesno (option, value, _T("a1000ram"), &p->cs_a1000ram) || cfgfile_yesno (option, value, _T("pcmcia"), &p->cs_pcmcia) || cfgfile_yesno (option, value, _T("scsi_cdtv"), &p->cs_cdtvscsi) || cfgfile_yesno (option, value, _T("scsi_a4091"), &p->cs_a4091) || cfgfile_yesno (option, value, _T("scsi_a2091"), &p->cs_a2091) || cfgfile_yesno (option, value, _T("cia_overlay"), &p->cs_ciaoverlay) || cfgfile_yesno (option, value, _T("bogomem_fast"), &p->cs_slowmemisfast) || cfgfile_yesno (option, value, _T("ksmirror_e0"), &p->cs_ksmirror_e0) || cfgfile_yesno (option, value, _T("ksmirror_a8"), &p->cs_ksmirror_a8) || cfgfile_yesno (option, value, _T("resetwarning"), &p->cs_resetwarning) || cfgfile_yesno (option, value, _T("denise_noehb"), &p->cs_denisenoehb) || cfgfile_yesno (option, value, _T("ics_agnus"), &p->cs_dipagnus) || cfgfile_yesno (option, value, _T("agnus_bltbusybug"), &p->cs_agnusbltbusybug) || cfgfile_yesno (option, value, _T("fastmem_autoconfig"), &p->fastmem_autoconfig) || cfgfile_yesno (option, value, _T("gfxcard_hardware_vblank"), &p->rtg_hardwareinterrupt) || cfgfile_yesno (option, value, _T("gfxcard_hardware_sprite"), &p->rtg_hardwaresprite) || cfgfile_yesno (option, value, _T("synchronize_clock"), &p->tod_hack) || cfgfile_yesno (option, value, _T("kickshifter"), &p->kickshifter) || cfgfile_yesno (option, value, _T("ntsc"), &p->ntscmode) || cfgfile_yesno (option, value, _T("sana2"), &p->sana2) || cfgfile_yesno (option, value, _T("genlock"), &p->genlock) || cfgfile_yesno (option, value, _T("cpu_compatible"), &p->cpu_compatible) || cfgfile_yesno (option, value, _T("cpu_24bit_addressing"), &p->address_space_24) || cfgfile_yesno (option, value, _T("parallel_on_demand"), &p->parallel_demand) || cfgfile_yesno (option, value, _T("parallel_postscript_emulation"), &p->parallel_postscript_emulation) || cfgfile_yesno (option, value, _T("parallel_postscript_detection"), &p->parallel_postscript_detection) || cfgfile_yesno (option, value, _T("serial_on_demand"), &p->serial_demand) || cfgfile_yesno (option, value, _T("serial_hardware_ctsrts"), &p->serial_hwctsrts) || cfgfile_yesno (option, value, _T("serial_direct"), &p->serial_direct) || cfgfile_yesno (option, value, _T("comp_nf"), &p->compnf) || cfgfile_yesno (option, value, _T("comp_constjump"), &p->comp_constjump) || cfgfile_yesno (option, value, _T("comp_oldsegv"), &p->comp_oldsegv) || cfgfile_yesno (option, value, _T("compforcesettings"), &dummybool) || cfgfile_yesno (option, value, _T("compfpu"), &p->compfpu) || cfgfile_yesno (option, value, _T("fpu_strict"), &p->fpu_strict) || cfgfile_yesno (option, value, _T("comp_midopt"), &p->comp_midopt) || cfgfile_yesno (option, value, _T("comp_lowopt"), &p->comp_lowopt) || cfgfile_yesno (option, value, _T("rtg_nocustom"), &p->picasso96_nocustom) || cfgfile_yesno (option, value, _T("floppy_write_protected"), &p->floppy_read_only) || cfgfile_yesno (option, value, _T("uaeserial"), &p->uaeserial)) return 1; if (cfgfile_intval (option, value, _T("cachesize"), &p->cachesize, 1) || cfgfile_intval (option, value, _T("serial_stopbits"), &p->serial_stopbits, 1) || cfgfile_intval (option, value, _T("cpu060_revision"), &p->cpu060_revision, 1) || cfgfile_intval (option, value, _T("fpu_revision"), &p->fpu_revision, 1) || cfgfile_intval (option, value, _T("cdtvramcard"), &p->cs_cdtvcard, 1) || cfgfile_intval (option, value, _T("fatgary"), &p->cs_fatgaryrev, 1) || cfgfile_intval (option, value, _T("ramsey"), &p->cs_ramseyrev, 1) || cfgfile_doubleval (option, value, _T("chipset_refreshrate"), &p->chipset_refreshrate) || cfgfile_intval (option, value, _T("fastmem_size"), &p->fastmem_size, 0x100000) || cfgfile_intval (option, value, _T("fastmem2_size"), &p->fastmem2_size, 0x100000) || cfgfile_intval (option, value, _T("a3000mem_size"), &p->mbresmem_low_size, 0x100000) || cfgfile_intval (option, value, _T("mbresmem_size"), &p->mbresmem_high_size, 0x100000) || cfgfile_intval (option, value, _T("z3mem_size"), &p->z3fastmem_size, 0x100000) || cfgfile_intval (option, value, _T("z3mem2_size"), &p->z3fastmem2_size, 0x100000) || cfgfile_intval (option, value, _T("megachipmem_size"), &p->z3chipmem_size, 0x100000) || cfgfile_intval (option, value, _T("z3mem_start"), &p->z3fastmem_start, 1) || cfgfile_intval (option, value, _T("bogomem_size"), &p->bogomem_size, 0x40000) || cfgfile_intval (option, value, _T("gfxcard_size"), &p->rtgmem_size, 0x100000) || cfgfile_strval (option, value, _T("gfxcard_type"), &p->rtgmem_type, rtgtype, 0) || cfgfile_intval (option, value, _T("rtg_modes"), &p->picasso96_modeflags, 1) || cfgfile_intval (option, value, _T("floppy_speed"), &p->floppy_speed, 1) || cfgfile_intval (option, value, _T("floppy_write_length"), &p->floppy_write_length, 1) || cfgfile_intval (option, value, _T("floppy_random_bits_min"), &p->floppy_random_bits_min, 1) || cfgfile_intval (option, value, _T("floppy_random_bits_max"), &p->floppy_random_bits_max, 1) || cfgfile_intval (option, value, _T("nr_floppies"), &p->nr_floppies, 1) || cfgfile_intval (option, value, _T("floppy0type"), &p->floppyslots[0].dfxtype, 1) || cfgfile_intval (option, value, _T("floppy1type"), &p->floppyslots[1].dfxtype, 1) || cfgfile_intval (option, value, _T("floppy2type"), &p->floppyslots[2].dfxtype, 1) || cfgfile_intval (option, value, _T("floppy3type"), &p->floppyslots[3].dfxtype, 1) || cfgfile_intval (option, value, _T("maprom"), &p->maprom, 1) || cfgfile_intval (option, value, _T("parallel_autoflush"), &p->parallel_autoflush_time, 1) || cfgfile_intval (option, value, _T("uae_hide"), &p->uae_hide, 1) || cfgfile_intval (option, value, _T("cpu_frequency"), &p->cpu_frequency, 1) || cfgfile_intval (option, value, _T("kickstart_ext_rom_file2addr"), &p->romextfile2addr, 1) || cfgfile_intval (option, value, _T("catweasel"), &p->catweasel, 1)) return 1; if (cfgfile_strval (option, value, _T("comp_trustbyte"), &p->comptrustbyte, compmode, 0) || cfgfile_strval (option, value, _T("rtc"), &p->cs_rtc, rtctype, 0) || cfgfile_strval (option, value, _T("ciaatod"), &p->cs_ciaatod, ciaatodmode, 0) || cfgfile_strval (option, value, _T("ide"), &p->cs_ide, idemode, 0) || cfgfile_strval (option, value, _T("scsi"), &p->scsi, scsimode, 0) || cfgfile_strval (option, value, _T("comp_trustword"), &p->comptrustword, compmode, 0) || cfgfile_strval (option, value, _T("comp_trustlong"), &p->comptrustlong, compmode, 0) || cfgfile_strval (option, value, _T("comp_trustnaddr"), &p->comptrustnaddr, compmode, 0) || cfgfile_strval (option, value, _T("collision_level"), &p->collision_level, collmode, 0) || cfgfile_strval (option, value, _T("parallel_matrix_emulation"), &p->parallel_matrix_emulation, epsonprinter, 0) || cfgfile_strval (option, value, _T("monitoremu"), &p->monitoremu, specialmonitors, 0) || cfgfile_strval (option, value, _T("waiting_blits"), &p->waiting_blits, waitblits, 0) || cfgfile_strval (option, value, _T("floppy_auto_extended_adf"), &p->floppy_auto_ext2, autoext2, 0) || cfgfile_strboolval (option, value, _T("comp_flushmode"), &p->comp_hardflush, flushmode, 0)) return 1; if (cfgfile_path (option, value, _T("kickstart_rom_file"), p->romfile, sizeof p->romfile / sizeof (TCHAR), &p->path_rom) || cfgfile_path (option, value, _T("kickstart_ext_rom_file"), p->romextfile, sizeof p->romextfile / sizeof (TCHAR), &p->path_rom) || cfgfile_path (option, value, _T("kickstart_ext_rom_file2"), p->romextfile2, sizeof p->romextfile2 / sizeof (TCHAR), &p->path_rom) || cfgfile_rom (option, value, _T("kickstart_rom_file_id"), p->romfile, sizeof p->romfile / sizeof (TCHAR)) || cfgfile_rom (option, value, _T("kickstart_ext_rom_file_id"), p->romextfile, sizeof p->romextfile / sizeof (TCHAR)) || cfgfile_path (option, value, _T("amax_rom_file"), p->amaxromfile, sizeof p->amaxromfile / sizeof (TCHAR)) || cfgfile_path (option, value, _T("flash_file"), p->flashfile, sizeof p->flashfile / sizeof (TCHAR), &p->path_rom) || cfgfile_path (option, value, _T("cart_file"), p->cartfile, sizeof p->cartfile / sizeof (TCHAR), &p->path_rom) || cfgfile_path (option, value, _T("rtc_file"), p->rtcfile, sizeof p->rtcfile / sizeof (TCHAR), &p->path_rom) || cfgfile_string (option, value, _T("pci_devices"), p->pci_devices, sizeof p->pci_devices / sizeof (TCHAR)) || cfgfile_string (option, value, _T("ghostscript_parameters"), p->ghostscript_parameters, sizeof p->ghostscript_parameters / sizeof (TCHAR))) return 1; if (cfgfile_strval (option, value, _T("chipset_compatible"), &p->cs_compatible, cscompa, 0)) { built_in_chipset_prefs (p); return 1; } if (cfgfile_strval (option, value, _T("cart_internal"), &p->cart_internal, cartsmode, 0)) { if (p->cart_internal) { struct romdata *rd = getromdatabyid (63); if (rd) _stprintf (p->cartfile, _T(":%s"), rd->configname); } return 1; } if (cfgfile_string (option, value, _T("kickstart_rom"), p->romident, sizeof p->romident / sizeof (TCHAR))) { decode_rom_ident (p->romfile, sizeof p->romfile / sizeof (TCHAR), p->romident, ROMTYPE_ALL_KICK); return 1; } if (cfgfile_string (option, value, _T("kickstart_ext_rom"), p->romextident, sizeof p->romextident / sizeof (TCHAR))) { decode_rom_ident (p->romextfile, sizeof p->romextfile / sizeof (TCHAR), p->romextident, ROMTYPE_ALL_EXT); return 1; } if (cfgfile_string (option, value, _T("cart"), p->cartident, sizeof p->cartident / sizeof (TCHAR))) { decode_rom_ident (p->cartfile, sizeof p->cartfile / sizeof (TCHAR), p->cartident, ROMTYPE_ALL_CART); return 1; } for (i = 0; i < 4; i++) { _stprintf (tmpbuf, _T("floppy%d"), i); if (cfgfile_path (option, value, tmpbuf, p->floppyslots[i].df, sizeof p->floppyslots[i].df / sizeof (TCHAR), &p->path_floppy)) return 1; } if (cfgfile_intval (option, value, _T("chipmem_size"), &dummyint, 1)) { if (dummyint < 0) p->chipmem_size = 0x20000; /* 128k, prototype support */ else if (dummyint == 0) p->chipmem_size = 0x40000; /* 256k */ else p->chipmem_size = dummyint * 0x80000; return 1; } if (cfgfile_string (option, value, _T("addmem1"), tmpbuf, sizeof tmpbuf / sizeof (TCHAR))) { parse_addmem (p, tmpbuf, 0); return 1; } if (cfgfile_string (option, value, _T("addmem2"), tmpbuf, sizeof tmpbuf / sizeof (TCHAR))) { parse_addmem (p, tmpbuf, 1); return 1; } if (cfgfile_strval (option, value, _T("chipset"), &tmpval, csmode, 0)) { set_chipset_mask (p, tmpval); return 1; } if (cfgfile_string (option, value, _T("mmu_model"), tmpbuf, sizeof tmpbuf / sizeof (TCHAR))) { p->mmu_model = _tstol (tmpbuf); return 1; } if (cfgfile_string (option, value, _T("fpu_model"), tmpbuf, sizeof tmpbuf / sizeof (TCHAR))) { p->fpu_model = _tstol (tmpbuf); return 1; } if (cfgfile_string (option, value, _T("cpu_model"), tmpbuf, sizeof tmpbuf / sizeof (TCHAR))) { p->cpu_model = _tstol (tmpbuf); p->fpu_model = 0; return 1; } /* old-style CPU configuration */ if (cfgfile_string (option, value, _T("cpu_type"), tmpbuf, sizeof tmpbuf / sizeof (TCHAR))) { p->fpu_model = 0; p->address_space_24 = 0; p->cpu_model = 680000; if (!_tcscmp (tmpbuf, _T("68000"))) { p->cpu_model = 68000; } else if (!_tcscmp (tmpbuf, _T("68010"))) { p->cpu_model = 68010; } else if (!_tcscmp (tmpbuf, _T("68ec020"))) { p->cpu_model = 68020; p->address_space_24 = 1; } else if (!_tcscmp (tmpbuf, _T("68020"))) { p->cpu_model = 68020; } else if (!_tcscmp (tmpbuf, _T("68ec020/68881"))) { p->cpu_model = 68020; p->fpu_model = 68881; p->address_space_24 = 1; } else if (!_tcscmp (tmpbuf, _T("68020/68881"))) { p->cpu_model = 68020; p->fpu_model = 68881; } else if (!_tcscmp (tmpbuf, _T("68040"))) { p->cpu_model = 68040; p->fpu_model = 68040; } else if (!_tcscmp (tmpbuf, _T("68060"))) { p->cpu_model = 68060; p->fpu_model = 68060; } return 1; } /* Broken earlier versions used to write this out as a string. */ if (cfgfile_strval (option, value, _T("finegraincpu_speed"), &p->m68k_speed, speedmode, 1)) { p->m68k_speed--; return 1; } if (cfgfile_strval (option, value, _T("cpu_speed"), &p->m68k_speed, speedmode, 1)) { p->m68k_speed--; return 1; } if (cfgfile_intval (option, value, _T("cpu_speed"), &p->m68k_speed, 1)) { p->m68k_speed *= CYCLE_UNIT; return 1; } if (cfgfile_doubleval (option, value, _T("cpu_throttle"), &p->m68k_speed_throttle)) { return 1; } if (cfgfile_intval (option, value, _T("finegrain_cpu_speed"), &p->m68k_speed, 1)) { if (OFFICIAL_CYCLE_UNIT > CYCLE_UNIT) { int factor = OFFICIAL_CYCLE_UNIT / CYCLE_UNIT; p->m68k_speed = (p->m68k_speed + factor - 1) / factor; } if (strcasecmp (value, _T("max")) == 0) p->m68k_speed = -1; return 1; } if (cfgfile_intval (option, value, _T("dongle"), &p->dongle, 1)) { if (p->dongle == 0) cfgfile_strval (option, value, _T("dongle"), &p->dongle, dongles, 0); return 1; } if (strcasecmp (option, _T("quickstart")) == 0) { int model = 0; TCHAR *tmpp = _tcschr (value, ','); if (tmpp) { *tmpp++ = 0; TCHAR *tmpp2 = _tcschr (value, ','); if (tmpp2) *tmpp2 = 0; cfgfile_strval (option, value, option, &model, qsmodes, 0); if (model >= 0) { int config = _tstol (tmpp); built_in_prefs (p, model, config, 0, 0); } } return 1; } if (cfgfile_parse_filesys (p, option, value)) return 1; return 0; } static bool createconfigstore (struct uae_prefs*); static int getconfigstoreline (const TCHAR *option, TCHAR *value); static void calcformula (struct uae_prefs *prefs, TCHAR *in) { TCHAR out[MAX_DPATH], configvalue[CONFIG_BLEN]; TCHAR *p = out; double val; int cnt1, cnt2; static bool updatestore; if (_tcslen (in) < 2 || in[0] != '[' || in[_tcslen (in) - 1] != ']') return; if (!configstore || updatestore) createconfigstore (prefs); updatestore = false; if (!configstore) return; cnt1 = cnt2 = 0; for (int i = 1; i < _tcslen (in) - 1; i++) { TCHAR c = _totupper (in[i]); if (c >= 'A' && c <='Z') { TCHAR *start = &in[i]; while (_istalnum (c) || c == '_' || c == '.') { i++; c = in[i]; } TCHAR store = in[i]; in[i] = 0; //write_log (_T("'%s'\n"), start); if (!getconfigstoreline (start, configvalue)) return; _tcscpy (p, configvalue); p += _tcslen (p); in[i] = store; i--; cnt1++; } else { cnt2++; *p ++= c; } } *p = 0; if (cnt1 == 0 && cnt2 == 0) return; /* single config entry only? */ if (cnt1 == 1 && cnt2 == 0) { _tcscpy (in, out); updatestore = true; return; } if (calc (out, &val)) { _stprintf (in, _T("%d"), (int)val); updatestore = true; return; } } int cfgfile_parse_option (struct uae_prefs *p, TCHAR *option, TCHAR *value, int type) { calcformula (p, value); if (!_tcscmp (option, _T("debug"))) { write_log (_T("CONFIG DEBUG: '%s'\n"), value); return 1; } if (!_tcscmp (option, _T("config_hardware"))) return 1; if (!_tcscmp (option, _T("config_host"))) return 1; if (cfgfile_path (option, value, _T("config_hardware_path"), p->config_hardware_path, sizeof p->config_hardware_path / sizeof (TCHAR))) return 1; if (cfgfile_path (option, value, _T("config_host_path"), p->config_host_path, sizeof p->config_host_path / sizeof (TCHAR))) return 1; if (type == 0 || (type & CONFIG_TYPE_HARDWARE)) { if (cfgfile_parse_hardware (p, option, value)) return 1; } if (type == 0 || (type & CONFIG_TYPE_HOST)) { if (cfgfile_parse_host (p, option, value)) return 1; } if (type > 0 && (type & (CONFIG_TYPE_HARDWARE | CONFIG_TYPE_HOST)) != (CONFIG_TYPE_HARDWARE | CONFIG_TYPE_HOST)) return 1; return 0; } static int isutf8ext (TCHAR *s) { if (_tcslen (s) > _tcslen (UTF8NAME) && !_tcscmp (s + _tcslen (s) - _tcslen (UTF8NAME), UTF8NAME)) { s[_tcslen (s) - _tcslen (UTF8NAME)] = 0; return 1; } return 0; } static int cfgfile_separate_linea (const TCHAR *filename, char *line, TCHAR *line1b, TCHAR *line2b) { char *line1, *line2; int i; line1 = line; line1 += strspn (line1, "\t \r\n"); if (*line1 == ';') return 0; line2 = strchr (line, '='); if (! line2) { TCHAR *s = au (line1); write_log (_T("CFGFILE: '%s', linea was incomplete with only %s\n"), filename, s); xfree (s); return 0; } *line2++ = '\0'; /* Get rid of whitespace. */ i = strlen (line2); while (i > 0 && (line2[i - 1] == '\t' || line2[i - 1] == ' ' || line2[i - 1] == '\r' || line2[i - 1] == '\n')) line2[--i] = '\0'; line2 += strspn (line2, "\t \r\n"); i = strlen (line); while (i > 0 && (line[i - 1] == '\t' || line[i - 1] == ' ' || line[i - 1] == '\r' || line[i - 1] == '\n')) line[--i] = '\0'; line += strspn (line, "\t \r\n"); au_copy (line1b, MAX_DPATH, line); if (isutf8ext (line1b)) { if (line2[0]) { TCHAR *s = utf8u (line2); _tcscpy (line2b, s); xfree (s); } } else { au_copy (line2b, MAX_DPATH, line2); } return 1; } static int cfgfile_separate_line (TCHAR *line, TCHAR *line1b, TCHAR *line2b) { TCHAR *line1, *line2; int i; line1 = line; line1 += _tcsspn (line1, _T("\t \r\n")); if (*line1 == ';') return 0; line2 = _tcschr (line, '='); if (! line2) { write_log (_T("CFGFILE: line was incomplete with only %s\n"), line1); return 0; } *line2++ = '\0'; /* Get rid of whitespace. */ i = _tcslen (line2); while (i > 0 && (line2[i - 1] == '\t' || line2[i - 1] == ' ' || line2[i - 1] == '\r' || line2[i - 1] == '\n')) line2[--i] = '\0'; line2 += _tcsspn (line2, _T("\t \r\n")); _tcscpy (line2b, line2); i = _tcslen (line); while (i > 0 && (line[i - 1] == '\t' || line[i - 1] == ' ' || line[i - 1] == '\r' || line[i - 1] == '\n')) line[--i] = '\0'; line += _tcsspn (line, _T("\t \r\n")); _tcscpy (line1b, line); if (line2b[0] == '"' || line2b[0] == '\"') { TCHAR c = line2b[0]; int i = 0; memmove (line2b, line2b + 1, (_tcslen (line2b) + 1) * sizeof (TCHAR)); while (line2b[i] != 0 && line2b[i] != c) i++; line2b[i] = 0; } if (isutf8ext (line1b)) return 0; return 1; } static int isobsolete (TCHAR *s) { int i = 0; while (obsolete[i]) { if (!strcasecmp (s, obsolete[i])) { write_log (_T("obsolete config entry '%s'\n"), s); return 1; } i++; } if (_tcslen (s) > 2 && !_tcsncmp (s, _T("w."), 2)) return 1; if (_tcslen (s) >= 10 && !_tcsncmp (s, _T("gfx_opengl"), 10)) { write_log (_T("obsolete config entry '%s\n"), s); return 1; } if (_tcslen (s) >= 6 && !_tcsncmp (s, _T("gfx_3d"), 6)) { write_log (_T("obsolete config entry '%s\n"), s); return 1; } return 0; } static void cfgfile_parse_separated_line (struct uae_prefs *p, TCHAR *line1b, TCHAR *line2b, int type) { TCHAR line3b[CONFIG_BLEN], line4b[CONFIG_BLEN]; struct strlist *sl; int ret; _tcscpy (line3b, line1b); _tcscpy (line4b, line2b); ret = cfgfile_parse_option (p, line1b, line2b, type); if (!isobsolete (line3b)) { for (sl = p->all_lines; sl; sl = sl->next) { if (sl->option && !strcasecmp (line1b, sl->option)) break; } if (!sl) { struct strlist *u = xcalloc (struct strlist, 1); u->option = my_strdup (line3b); u->value = my_strdup (line4b); u->next = p->all_lines; p->all_lines = u; if (!ret) { u->unknown = 1; write_log (_T("unknown config entry: '%s=%s'\n"), u->option, u->value); } } } } void cfgfile_parse_lines (struct uae_prefs *p, const TCHAR *lines, int type) { TCHAR *buf = my_strdup (lines); TCHAR *t = buf; for (;;) { if (_tcslen (t) == 0) break; TCHAR *t2 = _tcschr (t, '\n'); if (t2) *t2 = 0; cfgfile_parse_line (p, t, type); if (!t2) break; t = t2 + 1; } xfree (buf); } void cfgfile_parse_line (struct uae_prefs *p, TCHAR *line, int type) { TCHAR line1b[CONFIG_BLEN], line2b[CONFIG_BLEN]; if (!cfgfile_separate_line (line, line1b, line2b)) return; cfgfile_parse_separated_line (p, line1b, line2b, type); } static void subst (TCHAR *p, TCHAR *f, int n) { TCHAR *str = cfgfile_subst_path (UNEXPANDED, p, f); _tcsncpy (f, str, n - 1); f[n - 1] = '\0'; free (str); } static int getconfigstoreline (const TCHAR *option, TCHAR *value) { TCHAR tmp[CONFIG_BLEN * 2], tmp2[CONFIG_BLEN * 2]; int idx = 0; if (!configstore) return 0; zfile_fseek (configstore, 0, SEEK_SET); for (;;) { if (!zfile_fgets (tmp, sizeof tmp / sizeof (TCHAR), configstore)) return 0; if (!cfgfile_separate_line (tmp, tmp2, value)) continue; if (!_tcsicmp (option, tmp2)) return 1; } } static bool createconfigstore (struct uae_prefs *p) { uae_u8 zeros[4] = { 0 }; zfile_fclose (configstore); configstore = zfile_fopen_empty (NULL, _T("configstore"), 50000); if (!configstore) return false; zfile_fseek (configstore, 0, SEEK_SET); uaeconfig++; cfgfile_save_options (configstore, p, 0); uaeconfig--; zfile_fwrite (zeros, 1, sizeof zeros, configstore); zfile_fseek (configstore, 0, SEEK_SET); return true; } static char *cfg_fgets (char *line, int max, struct zfile *fh) { #ifdef SINGLEFILE extern TCHAR singlefile_config[]; static TCHAR *sfile_ptr; TCHAR *p; #endif if (fh) return zfile_fgetsa (line, max, fh); #ifdef SINGLEFILE if (sfile_ptr == 0) { sfile_ptr = singlefile_config; if (*sfile_ptr) { write_log (_T("singlefile config found\n")); while (*sfile_ptr++); } } if (*sfile_ptr == 0) { sfile_ptr = singlefile_config; return 0; } p = sfile_ptr; while (*p != 13 && *p != 10 && *p != 0) p++; memset (line, 0, max); memcpy (line, sfile_ptr, (p - sfile_ptr) * sizeof (TCHAR)); sfile_ptr = p + 1; if (*sfile_ptr == 13) sfile_ptr++; if (*sfile_ptr == 10) sfile_ptr++; return line; #endif return 0; } static int cfgfile_load_2 (struct uae_prefs *p, const TCHAR *filename, bool real, int *type) { int i; struct zfile *fh; char linea[CONFIG_BLEN]; TCHAR line[CONFIG_BLEN], line1b[CONFIG_BLEN], line2b[CONFIG_BLEN]; struct strlist *sl; bool type1 = false, type2 = false; int askedtype = 0; if (type) { askedtype = *type; *type = 0; } if (real) { p->config_version = 0; config_newfilesystem = 0; //reset_inputdevice_config (p); } fh = zfile_fopen (filename, _T("r"), ZFD_NORMAL); #ifndef SINGLEFILE if (! fh) return 0; #endif while (cfg_fgets (linea, sizeof (linea), fh) != 0) { trimwsa (linea); if (strlen (linea) > 0) { if (linea[0] == '#' || linea[0] == ';') { struct strlist *u = xcalloc (struct strlist, 1); u->option = NULL; TCHAR *com = au (linea); u->value = my_strdup (com); xfree (com); u->unknown = 1; u->next = p->all_lines; p->all_lines = u; continue; } if (!cfgfile_separate_linea (filename, linea, line1b, line2b)) continue; type1 = type2 = 0; if (cfgfile_yesno (line1b, line2b, _T("config_hardware"), &type1) || cfgfile_yesno (line1b, line2b, _T("config_host"), &type2)) { if (type1 && type) *type |= CONFIG_TYPE_HARDWARE; if (type2 && type) *type |= CONFIG_TYPE_HOST; continue; } if (real) { cfgfile_parse_separated_line (p, line1b, line2b, askedtype); } else { cfgfile_string (line1b, line2b, _T("config_description"), p->description, sizeof p->description / sizeof (TCHAR)); cfgfile_path (line1b, line2b, _T("config_hardware_path"), p->config_hardware_path, sizeof p->config_hardware_path / sizeof (TCHAR)); cfgfile_path (line1b, line2b, _T("config_host_path"), p->config_host_path, sizeof p->config_host_path / sizeof (TCHAR)); cfgfile_string (line1b, line2b, _T("config_window_title"), p->config_window_title, sizeof p->config_window_title / sizeof (TCHAR)); } } } if (type && *type == 0) *type = CONFIG_TYPE_HARDWARE | CONFIG_TYPE_HOST; zfile_fclose (fh); if (!real) return 1; for (sl = temp_lines; sl; sl = sl->next) { _stprintf (line, _T("%s=%s"), sl->option, sl->value); cfgfile_parse_line (p, line, 0); } for (i = 0; i < 4; i++) subst (p->path_floppy.path[0], p->floppyslots[i].df, sizeof p->floppyslots[i].df / sizeof (TCHAR)); subst (p->path_rom.path[0], p->romfile, sizeof p->romfile / sizeof (TCHAR)); subst (p->path_rom.path[0], p->romextfile, sizeof p->romextfile / sizeof (TCHAR)); subst (p->path_rom.path[0], p->romextfile2, sizeof p->romextfile2 / sizeof (TCHAR)); return 1; } int cfgfile_load (struct uae_prefs *p, const TCHAR *filename, int *type, int ignorelink, int userconfig) { int v; TCHAR tmp[MAX_DPATH]; int type2; static int recursive; if (recursive > 1) return 0; recursive++; write_log (_T("load config '%s':%d\n"), filename, type ? *type : -1); v = cfgfile_load_2 (p, filename, 1, type); if (!v) { write_log (_T("load failed\n")); goto end; } if (userconfig) target_addtorecent (filename, 0); if (!ignorelink) { if (p->config_hardware_path[0]) { fetch_configurationpath (tmp, sizeof (tmp) / sizeof (TCHAR)); _tcsncat (tmp, p->config_hardware_path, sizeof (tmp) / sizeof (TCHAR) - _tcslen(tmp) - 1); type2 = CONFIG_TYPE_HARDWARE; cfgfile_load (p, tmp, &type2, 1, 0); } if (p->config_host_path[0]) { fetch_configurationpath (tmp, sizeof (tmp) / sizeof (TCHAR)); _tcsncat (tmp, p->config_host_path, sizeof (tmp) / sizeof (TCHAR) - _tcslen(tmp) - 1); type2 = CONFIG_TYPE_HOST; cfgfile_load (p, tmp, &type2, 1, 0); } } end: recursive--; fixup_prefs (p); return v; } void cfgfile_backup (const TCHAR *path) { TCHAR dpath[MAX_DPATH]; fetch_configurationpath (dpath, sizeof (dpath) / sizeof (TCHAR)); _tcscat (dpath, _T("configuration.backup")); bool hidden = my_isfilehidden (dpath); my_unlink (dpath); my_rename (path, dpath); if (hidden) my_setfilehidden (dpath, hidden); } int cfgfile_save (struct uae_prefs *p, const TCHAR *filename, int type) { struct zfile *fh; #ifdef FSUAE // don't back up config file #else cfgfile_backup (filename); #endif fh = zfile_fopen (filename, unicode_config ? _T("w, ccs=UTF-8") : _T("w"), ZFD_NORMAL); if (! fh) return 0; if (!type) type = CONFIG_TYPE_HARDWARE | CONFIG_TYPE_HOST; cfgfile_save_options (fh, p, type); zfile_fclose (fh); return 1; } int cfgfile_get_description (const TCHAR *filename, TCHAR *description, TCHAR *hostlink, TCHAR *hardwarelink, int *type) { int result = 0; struct uae_prefs *p = xmalloc (struct uae_prefs, 1); p->description[0] = 0; p->config_host_path[0] = 0; p->config_hardware_path[0] = 0; if (cfgfile_load_2 (p, filename, 0, type)) { result = 1; if (description) _tcscpy (description, p->description); if (hostlink) _tcscpy (hostlink, p->config_host_path); if (hardwarelink) _tcscpy (hardwarelink, p->config_hardware_path); } xfree (p); return result; } int cfgfile_configuration_change (int v) { static int mode; if (v >= 0) mode = v; return mode; } void cfgfile_show_usage (void) { int i; write_log (_T("UAE Configuration Help:\n") \ _T("=======================\n")); for (i = 0; i < sizeof opttable / sizeof *opttable; i++) write_log (_T("%s: %s\n"), opttable[i].config_label, opttable[i].config_help); } /* This implements the old commandline option parsing. I've re-added this because the new way of doing things is painful for me (it requires me to type a couple hundred characters when invoking UAE). The following is far less annoying to use. */ static void parse_gfx_specs (struct uae_prefs *p, const TCHAR *spec) { TCHAR *x0 = my_strdup (spec); TCHAR *x1, *x2; x1 = _tcschr (x0, ':'); if (x1 == 0) goto argh; x2 = _tcschr (x1+1, ':'); if (x2 == 0) goto argh; *x1++ = 0; *x2++ = 0; p->gfx_size_win.width = p->gfx_size_fs.width = _tstoi (x0); p->gfx_size_win.height = p->gfx_size_fs.height = _tstoi (x1); p->gfx_resolution = _tcschr (x2, 'l') != 0 ? 1 : 0; p->gfx_xcenter = _tcschr (x2, 'x') != 0 ? 1 : _tcschr (x2, 'X') != 0 ? 2 : 0; p->gfx_ycenter = _tcschr (x2, 'y') != 0 ? 1 : _tcschr (x2, 'Y') != 0 ? 2 : 0; p->gfx_vresolution = _tcschr (x2, 'd') != 0 ? VRES_DOUBLE : VRES_NONDOUBLE; p->gfx_scanlines = _tcschr (x2, 'D') != 0; if (p->gfx_scanlines) p->gfx_vresolution = VRES_DOUBLE; p->gfx_apmode[0].gfx_fullscreen = _tcschr (x2, 'a') != 0; p->gfx_apmode[1].gfx_fullscreen = _tcschr (x2, 'p') != 0; free (x0); return; argh: write_log (_T("Bad display mode specification.\n")); write_log (_T("The format to use is: \"width:height:modifiers\"\n")); write_log (_T("Type \"uae -h\" for detailed help.\n")); free (x0); } static void parse_sound_spec (struct uae_prefs *p, const TCHAR *spec) { TCHAR *x0 = my_strdup (spec); TCHAR *x1, *x2 = NULL, *x3 = NULL, *x4 = NULL, *x5 = NULL; x1 = _tcschr (x0, ':'); if (x1 != NULL) { *x1++ = '\0'; x2 = _tcschr (x1 + 1, ':'); if (x2 != NULL) { *x2++ = '\0'; x3 = _tcschr (x2 + 1, ':'); if (x3 != NULL) { *x3++ = '\0'; x4 = _tcschr (x3 + 1, ':'); if (x4 != NULL) { *x4++ = '\0'; x5 = _tcschr (x4 + 1, ':'); } } } } p->produce_sound = _tstoi (x0); if (x1) { p->sound_stereo_separation = 0; if (*x1 == 'S') { p->sound_stereo = SND_STEREO; p->sound_stereo_separation = 7; } else if (*x1 == 's') p->sound_stereo = SND_STEREO; else p->sound_stereo = SND_MONO; } if (x3) p->sound_freq = _tstoi (x3); if (x4) p->sound_maxbsiz = _tstoi (x4); free (x0); } static void parse_joy_spec (struct uae_prefs *p, const TCHAR *spec) { int v0 = 2, v1 = 0; if (_tcslen(spec) != 2) goto bad; switch (spec[0]) { case '0': v0 = JSEM_JOYS; break; case '1': v0 = JSEM_JOYS + 1; break; case 'M': case 'm': v0 = JSEM_MICE; break; case 'A': case 'a': v0 = JSEM_KBDLAYOUT; break; case 'B': case 'b': v0 = JSEM_KBDLAYOUT + 1; break; case 'C': case 'c': v0 = JSEM_KBDLAYOUT + 2; break; default: goto bad; } switch (spec[1]) { case '0': v1 = JSEM_JOYS; break; case '1': v1 = JSEM_JOYS + 1; break; case 'M': case 'm': v1 = JSEM_MICE; break; case 'A': case 'a': v1 = JSEM_KBDLAYOUT; break; case 'B': case 'b': v1 = JSEM_KBDLAYOUT + 1; break; case 'C': case 'c': v1 = JSEM_KBDLAYOUT + 2; break; default: goto bad; } if (v0 == v1) goto bad; /* Let's scare Pascal programmers */ if (0) bad: write_log (_T("Bad joystick mode specification. Use -J xy, where x and y\n") _T("can be 0 for joystick 0, 1 for joystick 1, M for mouse, and\n") _T("a, b or c for different keyboard settings.\n")); p->jports[0].id = v0; p->jports[1].id = v1; } static void parse_filesys_spec (struct uae_prefs *p, bool readonly, const TCHAR *spec) { TCHAR buf[256]; TCHAR *s2; _tcsncpy (buf, spec, 255); buf[255] = 0; s2 = _tcschr (buf, ':'); if (s2) { *s2++ = '\0'; #ifdef __DOS__ { TCHAR *tmp; while ((tmp = _tcschr (s2, '\\'))) *tmp = '/'; } #endif #ifdef FILESYS add_filesys_config (p, -1, NULL, buf, s2, readonly, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); #endif } else { write_log (_T("Usage: [-m | -M] VOLNAME:mount_point\n")); } } static void parse_hardfile_spec (struct uae_prefs *p, const TCHAR *spec) { TCHAR *x0 = my_strdup (spec); TCHAR *x1, *x2, *x3, *x4; x1 = _tcschr (x0, ':'); if (x1 == NULL) goto argh; *x1++ = '\0'; x2 = _tcschr (x1 + 1, ':'); if (x2 == NULL) goto argh; *x2++ = '\0'; x3 = _tcschr (x2 + 1, ':'); if (x3 == NULL) goto argh; *x3++ = '\0'; x4 = _tcschr (x3 + 1, ':'); if (x4 == NULL) goto argh; *x4++ = '\0'; #ifdef FILESYS add_filesys_config (p, -1, NULL, NULL, x4, 0, 0, _tstoi (x0), _tstoi (x1), _tstoi (x2), _tstoi (x3), 0, 0, 0, 0, 0, 0, 0); #endif free (x0); return; argh: free (x0); write_log (_T("Bad hardfile parameter specified - type \"uae -h\" for help.\n")); return; } static void parse_cpu_specs (struct uae_prefs *p, const TCHAR *spec) { if (*spec < '0' || *spec > '4') { write_log (_T("CPU parameter string must begin with '0', '1', '2', '3' or '4'.\n")); return; } p->cpu_model = (*spec++) * 10 + 68000; p->address_space_24 = p->cpu_model < 68020; p->cpu_compatible = 0; while (*spec != '\0') { switch (*spec) { case 'a': if (p->cpu_model < 68020) write_log (_T("In 68000/68010 emulation, the address space is always 24 bit.\n")); else if (p->cpu_model >= 68040) write_log (_T("In 68040/060 emulation, the address space is always 32 bit.\n")); else p->address_space_24 = 1; break; case 'c': if (p->cpu_model != 68000) write_log (_T("The more compatible CPU emulation is only available for 68000\n") _T("emulation, not for 68010 upwards.\n")); else p->cpu_compatible = 1; break; default: write_log (_T("Bad CPU parameter specified - type \"uae -h\" for help.\n")); break; } spec++; } } static void cmdpath (TCHAR *dst, const TCHAR *src, int maxsz) { TCHAR *s = target_expand_environment (src); _tcsncpy (dst, s, maxsz); dst[maxsz] = 0; xfree (s); } /* Returns the number of args used up (0 or 1). */ int parse_cmdline_option (struct uae_prefs *p, TCHAR c, const TCHAR *arg) { struct strlist *u = xcalloc (struct strlist, 1); const TCHAR arg_required[] = _T("0123rKpImWSAJwNCZUFcblOdHRv"); if (_tcschr (arg_required, c) && ! arg) { write_log (_T("Missing argument for option `-%c'!\n"), c); return 0; } u->option = xmalloc (TCHAR, 2); u->option[0] = c; u->option[1] = 0; u->value = my_strdup (arg); u->next = p->all_lines; p->all_lines = u; switch (c) { case 'h': usage (); exit (0); case '0': cmdpath (p->floppyslots[0].df, arg, 255); break; case '1': cmdpath (p->floppyslots[1].df, arg, 255); break; case '2': cmdpath (p->floppyslots[2].df, arg, 255); break; case '3': cmdpath (p->floppyslots[3].df, arg, 255); break; case 'r': cmdpath (p->romfile, arg, 255); break; case 'K': cmdpath (p->romextfile, arg, 255); break; case 'p': _tcsncpy (p->prtname, arg, 255); p->prtname[255] = 0; break; /* case 'I': _tcsncpy (p->sername, arg, 255); p->sername[255] = 0; currprefs.use_serial = 1; break; */ case 'm': case 'M': parse_filesys_spec (p, c == 'M', arg); break; case 'W': parse_hardfile_spec (p, arg); break; case 'S': parse_sound_spec (p, arg); break; case 'R': p->gfx_framerate = _tstoi (arg); break; case 'i': p->illegal_mem = 1; break; case 'J': parse_joy_spec (p, arg); break; case 'w': p->m68k_speed = _tstoi (arg); break; /* case 'g': p->use_gfxlib = 1; break; */ case 'G': p->start_gui = 0; break; case 'D': p->start_debugger = 1; break; case 'n': if (_tcschr (arg, 'i') != 0) p->immediate_blits = 1; break; case 'v': set_chipset_mask (p, _tstoi (arg)); break; case 'C': parse_cpu_specs (p, arg); break; case 'Z': p->z3fastmem_size = _tstoi (arg) * 0x100000; break; case 'U': p->rtgmem_size = _tstoi (arg) * 0x100000; break; case 'F': p->fastmem_size = _tstoi (arg) * 0x100000; break; case 'b': p->bogomem_size = _tstoi (arg) * 0x40000; break; case 'c': p->chipmem_size = _tstoi (arg) * 0x80000; break; case 'l': if (0 == strcasecmp(arg, _T("de"))) p->keyboard_lang = KBD_LANG_DE; else if (0 == strcasecmp(arg, _T("dk"))) p->keyboard_lang = KBD_LANG_DK; else if (0 == strcasecmp(arg, _T("us"))) p->keyboard_lang = KBD_LANG_US; else if (0 == strcasecmp(arg, _T("se"))) p->keyboard_lang = KBD_LANG_SE; else if (0 == strcasecmp(arg, _T("fr"))) p->keyboard_lang = KBD_LANG_FR; else if (0 == strcasecmp(arg, _T("it"))) p->keyboard_lang = KBD_LANG_IT; else if (0 == strcasecmp(arg, _T("es"))) p->keyboard_lang = KBD_LANG_ES; break; case 'O': parse_gfx_specs (p, arg); break; case 'd': if (_tcschr (arg, 'S') != NULL || _tcschr (arg, 's')) { write_log (_T(" Serial on demand.\n")); p->serial_demand = 1; } if (_tcschr (arg, 'P') != NULL || _tcschr (arg, 'p')) { write_log (_T(" Parallel on demand.\n")); p->parallel_demand = 1; } break; case 'H': p->color_mode = _tstoi (arg); if (p->color_mode < 0) { write_log (_T("Bad color mode selected. Using default.\n")); p->color_mode = 0; } break; default: write_log (_T("Unknown option `-%c'!\n"), c); break; } return !! _tcschr (arg_required, c); } void cfgfile_addcfgparam (TCHAR *line) { struct strlist *u; TCHAR line1b[CONFIG_BLEN], line2b[CONFIG_BLEN]; if (!line) { struct strlist **ps = &temp_lines; while (*ps) { struct strlist *s = *ps; *ps = s->next; xfree (s->value); xfree (s->option); xfree (s); } temp_lines = 0; return; } if (!cfgfile_separate_line (line, line1b, line2b)) return; u = xcalloc (struct strlist, 1); u->option = my_strdup (line1b); u->value = my_strdup (line2b); u->next = temp_lines; temp_lines = u; } #if 0 static int cfgfile_handle_custom_event (TCHAR *custom, int mode) { TCHAR option[CONFIG_BLEN], value[CONFIG_BLEN]; TCHAR option2[CONFIG_BLEN], value2[CONFIG_BLEN]; TCHAR *tmp, *p, *nextp; struct zfile *configstore = NULL; int cnt = 0, cnt_ok = 0; if (!mode) { TCHAR zero = 0; configstore = zfile_fopen_empty ("configstore", 50000); cfgfile_save_options (configstore, &currprefs, 0); cfg_write (&zero, configstore); } nextp = NULL; tmp = p = xcalloc (TCHAR, _tcslen (custom) + 2); _tcscpy (tmp, custom); while (p && *p) { if (*p == '\"') { TCHAR *p2; p++; p2 = p; while (*p2 != '\"' && *p2 != 0) p2++; if (*p2 == '\"') { *p2++ = 0; nextp = p2 + 1; if (*nextp == ' ') nextp++; } } if (cfgfile_separate_line (p, option, value)) { cnt++; if (mode) { cfgfile_parse_option (&changed_prefs, option, value, 0); } else { zfile_fseek (configstore, 0, SEEK_SET); for (;;) { if (!getconfigstoreline (configstore, option2, value2)) break; if (!_tcscmpi (option, option2) && !_tcscmpi (value, value2)) { cnt_ok++; break; } } } } p = nextp; } xfree (tmp); zfile_fclose (configstore); if (cnt > 0 && cnt == cnt_ok) return 1; return 0; } #endif int cmdlineparser (const TCHAR *s, TCHAR *outp[], int max) { int j, cnt = 0; int slash = 0; int quote = 0; TCHAR tmp1[MAX_DPATH]; const TCHAR *prev; int doout; doout = 0; prev = s; j = 0; outp[0] = 0; while (cnt < max) { TCHAR c = *s++; if (!c) break; if (c < 32) continue; if (c == '\\') slash = 1; if (!slash && c == '"') { if (quote) { quote = 0; doout = 1; } else { quote = 1; j = -1; } } if (!quote && c == ' ') doout = 1; if (!doout) { if (j >= 0) { tmp1[j] = c; tmp1[j + 1] = 0; } j++; } if (doout) { if (_tcslen (tmp1) > 0) { outp[cnt++] = my_strdup (tmp1); outp[cnt] = 0; } tmp1[0] = 0; doout = 0; j = 0; } slash = 0; } if (j > 0 && cnt < max) { outp[cnt++] = my_strdup (tmp1); outp[cnt] = 0; } return cnt; } #define UAELIB_MAX_PARSE 100 static bool cfgfile_parse_uaelib_option (struct uae_prefs *p, TCHAR *option, TCHAR *value, int type) { return false; } uae_u32 cfgfile_modify (uae_u32 index, TCHAR *parms, uae_u32 size, TCHAR *out, uae_u32 outsize) { TCHAR *p; TCHAR *argc[UAELIB_MAX_PARSE]; int argv, i; uae_u32 err; TCHAR zero = 0; static TCHAR *configsearch; static int configsearchfound; #ifdef FSUAE write_log("*** cfgfile_modify *** %s\n", parms); #endif config_changed = 1; err = 0; argv = 0; p = 0; if (index != 0xffffffff) { if (!configstore) { err = 20; goto end; } if (configsearch) { TCHAR tmp[CONFIG_BLEN]; int j = 0; TCHAR *in = configsearch; int inlen = _tcslen (configsearch); int joker = 0; if (in[inlen - 1] == '*') { joker = 1; inlen--; } for (;;) { uae_u8 b = 0; if (zfile_fread (&b, 1, 1, configstore) != 1) { err = 10; if (configsearch) err = 5; if (configsearchfound) err = 0; goto end; } if (j >= sizeof (tmp) / sizeof (TCHAR) - 1) j = sizeof (tmp) / sizeof (TCHAR) - 1; if (b == 0) { err = 10; if (configsearch) err = 5; if (configsearchfound) err = 0; goto end; } if (b == '\n') { if (configsearch && !_tcsncmp (tmp, in, inlen) && ((inlen > 0 && _tcslen (tmp) > inlen && tmp[inlen] == '=') || (joker))) { TCHAR *p; if (joker) p = tmp - 1; else p = _tcschr (tmp, '='); if (p) { for (i = 0; out && i < outsize - 1; i++) { TCHAR b = *++p; out[i] = b; out[i + 1] = 0; if (!b) break; } } err = 0xffffffff; configsearchfound++; goto end; } index--; j = 0; } else { tmp[j++] = b; tmp[j] = 0; } } } err = 0xffffffff; for (i = 0; out && i < outsize - 1; i++) { uae_u8 b = 0; if (zfile_fread (&b, 1, 1, configstore) != 1) err = 0; if (b == 0) err = 0; if (b == '\n') b = 0; out[i] = b; out[i + 1] = 0; if (!b) break; } goto end; } if (size > 10000) return 10; argv = cmdlineparser (parms, argc, UAELIB_MAX_PARSE); if (argv <= 1 && index == 0xffffffff) { createconfigstore (&currprefs); xfree (configsearch); configsearch = NULL; if (!configstore) { err = 20; goto end; } if (argv > 0 && _tcslen (argc[0]) > 0) configsearch = my_strdup (argc[0]); err = 0xffffffff; configsearchfound = 0; goto end; } for (i = 0; i < argv; i++) { if (i + 2 <= argv) { if (!_tcsicmp (argc[i], _T("dbg"))) { debug_parser (argc[i + 1], out, outsize); } else if (!inputdevice_uaelib (argc[i], argc[i + 1])) { if (!cfgfile_parse_uaelib_option (&changed_prefs, argc[i], argc[i + 1], 0)) { if (!cfgfile_parse_option (&changed_prefs, argc[i], argc[i + 1], 0)) { err = 5; break; } } } set_special (SPCFLAG_BRK); i++; } } end: for (i = 0; i < argv; i++) xfree (argc[i]); xfree (p); return err; } uae_u32 cfgfile_uaelib_modify (uae_u32 index, uae_u32 parms, uae_u32 size, uae_u32 out, uae_u32 outsize) { uae_char *p, *parms_p = NULL, *parms_out = NULL; int i, ret; TCHAR *out_p = NULL, *parms_in = NULL; if (out) put_byte (out, 0); if (size == 0) { while (get_byte (parms + size) != 0) size++; } parms_p = xmalloc (uae_char, size + 1); if (!parms_p) { ret = 10; goto end; } if (out) { out_p = xmalloc (TCHAR, outsize + 1); if (!out_p) { ret = 10; goto end; } out_p[0] = 0; } p = parms_p; for (i = 0; i < size; i++) { p[i] = get_byte (parms + i); if (p[i] == 10 || p[i] == 13 || p[i] == 0) break; } p[i] = 0; parms_in = au (parms_p); ret = cfgfile_modify (index, parms_in, size, out_p, outsize); xfree (parms_in); if (out) { parms_out = ua (out_p); p = parms_out; for (i = 0; i < outsize - 1; i++) { uae_u8 b = *p++; put_byte (out + i, b); put_byte (out + i + 1, 0); if (!b) break; } } xfree (parms_out); end: xfree (out_p); xfree (parms_p); return ret; } uae_u32 cfgfile_uaelib (int mode, uae_u32 name, uae_u32 dst, uae_u32 maxlen) { TCHAR tmp[CONFIG_BLEN]; int i; struct strlist *sl; if (mode) return 0; for (i = 0; i < sizeof (tmp) / sizeof (TCHAR); i++) { tmp[i] = get_byte (name + i); if (tmp[i] == 0) break; } tmp[sizeof(tmp) / sizeof (TCHAR) - 1] = 0; if (tmp[0] == 0) return 0; for (sl = currprefs.all_lines; sl; sl = sl->next) { if (!strcasecmp (sl->option, tmp)) break; } if (sl) { char *s = ua (sl->value); for (i = 0; i < maxlen; i++) { put_byte (dst + i, s[i]); if (s[i] == 0) break; } xfree (s); return dst; } return 0; } uae_u8 *restore_configuration (uae_u8 *src) { TCHAR *s = au ((char*)src); //write_log (s); xfree (s); src += strlen ((char*)src) + 1; return src; } uae_u8 *save_configuration (int *len, bool fullconfig) { int tmpsize = 100000; uae_u8 *dstbak, *dst, *p; int index = -1; dstbak = dst = xcalloc (uae_u8, tmpsize); p = dst; for (;;) { TCHAR tmpout[1000]; int ret; tmpout[0] = 0; ret = cfgfile_modify (index, _T("*"), 1, tmpout, sizeof (tmpout) / sizeof (TCHAR)); index++; if (_tcslen (tmpout) > 0) { char *out; if (!fullconfig && !_tcsncmp (tmpout, _T("input."), 6)) continue; //write_log (_T("'%s'\n"), tmpout); out = uutf8 (tmpout); strcpy ((char*)p, out); xfree (out); strcat ((char*)p, "\n"); p += strlen ((char*)p); if (p - dstbak >= tmpsize - sizeof (tmpout)) break; } if (ret >= 0) break; } *len = p - dstbak + 1; return dstbak; } static void default_prefs_mini (struct uae_prefs *p, int type) { _tcscpy (p->description, _T("UAE default A500 configuration")); p->nr_floppies = 1; p->floppyslots[0].dfxtype = DRV_35_DD; p->floppyslots[1].dfxtype = DRV_NONE; p->cpu_model = 68000; p->address_space_24 = 1; p->chipmem_size = 0x00080000; p->bogomem_size = 0x00080000; } #include "sounddep/sound.h" void default_prefs (struct uae_prefs *p, int type) { int i; int roms[] = { 6, 7, 8, 9, 10, 14, 5, 4, 3, 2, 1, -1 }; TCHAR zero = 0; struct zfile *f; reset_inputdevice_config (p); memset (p, 0, sizeof (*p)); _tcscpy (p->description, _T("UAE default configuration")); p->config_hardware_path[0] = 0; p->config_host_path[0] = 0; p->gfx_scandoubler = 0; p->start_gui = 1; p->start_debugger = 0; p->all_lines = 0; /* Note to porters: please don't change any of these options! UAE is supposed * to behave identically on all platforms if possible. * (TW says: maybe it is time to update default config..) */ p->illegal_mem = 0; p->use_serial = 0; p->serial_demand = 0; p->serial_hwctsrts = 1; p->serial_stopbits = 0; p->parallel_demand = 0; p->parallel_matrix_emulation = 0; p->parallel_postscript_emulation = 0; p->parallel_postscript_detection = 0; p->parallel_autoflush_time = 5; p->ghostscript_parameters[0] = 0; p->uae_hide = 0; p->mountitems = 0; for (i = 0; i < MOUNT_CONFIG_SIZE; i++) { p->mountconfig[i].configoffset = -1; } memset (&p->jports[0], 0, sizeof (struct jport)); memset (&p->jports[1], 0, sizeof (struct jport)); memset (&p->jports[2], 0, sizeof (struct jport)); memset (&p->jports[3], 0, sizeof (struct jport)); p->jports[0].id = JSEM_MICE; p->jports[1].id = JSEM_KBDLAYOUT; p->jports[2].id = -1; p->jports[3].id = -1; p->keyboard_lang = KBD_LANG_US; p->produce_sound = 3; p->sound_stereo = SND_STEREO; p->sound_stereo_separation = 7; p->sound_mixed_stereo_delay = 0; p->sound_freq = DEFAULT_SOUND_FREQ; p->sound_maxbsiz = DEFAULT_SOUND_MAXB; p->sound_interpol = 1; p->sound_filter = FILTER_SOUND_EMUL; p->sound_filter_type = 0; p->sound_auto = 1; p->sampler_stereo = false; p->sampler_buffer = 0; p->sampler_freq = 0; p->comptrustbyte = 0; p->comptrustword = 0; p->comptrustlong = 0; p->comptrustnaddr= 0; p->compnf = 1; p->comp_hardflush = 0; p->comp_constjump = 1; p->comp_oldsegv = 0; p->compfpu = 1; p->fpu_strict = 0; p->cachesize = 0; p->avoid_cmov = 0; p->comp_midopt = 0; p->comp_lowopt = 0; for (i = 0;i < 10; i++) p->optcount[i] = -1; p->optcount[0] = 4; /* How often a block has to be executed before it is translated */ p->optcount[1] = 0; /* How often to use the naive translation */ p->optcount[2] = 0; p->optcount[3] = 0; p->optcount[4] = 0; p->optcount[5] = 0; p->gfx_framerate = 1; p->gfx_autoframerate = 50; p->gfx_size_fs.width = 800; p->gfx_size_fs.height = 600; p->gfx_size_win.width = 720; p->gfx_size_win.height = 568; for (i = 0; i < 4; i++) { p->gfx_size_fs_xtra[i].width = 0; p->gfx_size_fs_xtra[i].height = 0; p->gfx_size_win_xtra[i].width = 0; p->gfx_size_win_xtra[i].height = 0; } p->gfx_resolution = RES_HIRES; p->gfx_vresolution = VRES_DOUBLE; p->gfx_apmode[0].gfx_fullscreen = GFX_WINDOW; p->gfx_apmode[1].gfx_fullscreen = GFX_WINDOW; p->gfx_xcenter = 0; p->gfx_ycenter = 0; p->gfx_xcenter_pos = -1; p->gfx_ycenter_pos = -1; p->gfx_xcenter_size = -1; p->gfx_ycenter_size = -1; p->gfx_max_horizontal = RES_HIRES; p->gfx_max_vertical = VRES_DOUBLE; p->gfx_autoresolution_minv = 0; p->gfx_autoresolution_minh = 0; p->color_mode = 2; p->gfx_blackerthanblack = 0; p->gfx_apmode[0].gfx_backbuffers = 2; p->gfx_apmode[1].gfx_backbuffers = 1; p->immediate_blits = 0; p->waiting_blits = 0; p->collision_level = 2; p->leds_on_screen = 0; p->leds_on_screen_mask[0] = p->leds_on_screen_mask[1] = (1 << LED_MAX) - 1; p->keyboard_leds_in_use = 0; p->keyboard_leds[0] = p->keyboard_leds[1] = p->keyboard_leds[2] = 0; p->scsi = 0; p->uaeserial = 0; p->cpu_idle = 0; p->turbo_emulation = 0; p->headless = 0; p->catweasel = 0; p->tod_hack = 0; p->maprom = 0; p->filesys_no_uaefsdb = 0; p->filesys_custom_uaefsdb = 1; p->picasso96_nocustom = 1; p->cart_internal = 1; p->sana2 = 0; p->clipboard_sharing = false; p->native_code = false; p->cs_compatible = 1; p->cs_rtc = 2; p->cs_df0idhw = 1; p->cs_a1000ram = 0; p->cs_fatgaryrev = -1; p->cs_ramseyrev = -1; p->cs_agnusrev = -1; p->cs_deniserev = -1; p->cs_mbdmac = 0; p->cs_a2091 = 0; p->cs_a4091 = 0; p->cs_cd32c2p = p->cs_cd32cd = p->cs_cd32nvram = false; p->cs_cdtvcd = p->cs_cdtvram = false; p->cs_cdtvcard = 0; p->cs_pcmcia = 0; p->cs_ksmirror_e0 = 1; p->cs_ksmirror_a8 = 0; p->cs_ciaoverlay = 1; p->cs_ciaatod = 0; p->cs_df0idhw = 1; p->cs_slowmemisfast = 0; p->cs_resetwarning = 1; p->gfx_filter = 0; p->gfx_filtershader[0] = 0; p->gfx_filtermask[0] = 0; p->gfx_filter_horiz_zoom_mult = 1000; p->gfx_filter_vert_zoom_mult = 1000; p->gfx_filter_bilinear = 0; p->gfx_filter_filtermode = 0; p->gfx_filter_scanlineratio = (1 << 4) | 1; p->gfx_filter_keep_aspect = 0; p->gfx_filter_autoscale = AUTOSCALE_STATIC_AUTO; p->gfx_filter_keep_autoscale_aspect = false; p->gfx_filteroverlay_overscan = 0; p->rtg_horiz_zoom_mult = 1000; p->rtg_vert_zoom_mult = 1000; _tcscpy (p->floppyslots[0].df, _T("df0.adf")); _tcscpy (p->floppyslots[1].df, _T("df1.adf")); _tcscpy (p->floppyslots[2].df, _T("df2.adf")); _tcscpy (p->floppyslots[3].df, _T("df3.adf")); configure_rom (p, roms, 0); _tcscpy (p->romextfile, _T("")); _tcscpy (p->romextfile2, _T("")); p->romextfile2addr = 0; _tcscpy (p->flashfile, _T("")); _tcscpy (p->cartfile, _T("")); _tcscpy (p->rtcfile, _T("")); _tcscpy (p->path_rom.path[0], _T("./")); _tcscpy (p->path_floppy.path[0], _T("./")); _tcscpy (p->path_hardfile.path[0], _T("./")); p->prtname[0] = 0; p->sername[0] = 0; p->fpu_model = 0; p->cpu_model = 68000; p->m68k_speed_throttle = 0; p->cpu_clock_multiplier = 0; p->cpu_frequency = 0; p->mmu_model = 0; p->cpu060_revision = 6; p->fpu_revision = -1; p->m68k_speed = 0; p->cpu_compatible = 1; p->address_space_24 = 1; p->cpu_cycle_exact = 0; p->blitter_cycle_exact = 0; p->chipset_mask = CSMASK_ECS_AGNUS; p->genlock = 0; p->ntscmode = 0; p->filesys_limit = 0; p->fastmem_size = 0x00000000; p->fastmem2_size = 0x00000000; p->mbresmem_low_size = 0x00000000; p->mbresmem_high_size = 0x00000000; p->z3fastmem_size = 0x00000000; p->z3fastmem2_size = 0x00000000; p->z3fastmem_start = 0x10000000; p->chipmem_size = 0x00080000; p->bogomem_size = 0x00080000; p->rtgmem_size = 0x00000000; p->rtgmem_type = 1; p->custom_memory_addrs[0] = 0; p->custom_memory_sizes[0] = 0; p->custom_memory_addrs[1] = 0; p->custom_memory_sizes[1] = 0; p->fastmem_autoconfig = true; p->nr_floppies = 2; p->floppy_read_only = false; p->floppyslots[0].dfxtype = DRV_35_DD; p->floppyslots[1].dfxtype = DRV_35_DD; p->floppyslots[2].dfxtype = DRV_NONE; p->floppyslots[3].dfxtype = DRV_NONE; p->floppy_speed = 100; p->floppy_write_length = 0; p->floppy_random_bits_min = 1; p->floppy_random_bits_max = 3; p->dfxclickvolume = 33; p->dfxclickchannelmask = 0xffff; p->statecapturebuffersize = 100; p->statecapturerate = 5 * 50; p->inprec_autoplay = true; #ifdef UAE_MINI default_prefs_mini (p, 0); #endif p->input_tablet = TABLET_OFF; p->input_magic_mouse = 0; p->input_magic_mouse_cursor = 0; inputdevice_default_prefs (p); blkdev_default_prefs (p); p->cr_selected = -1; struct chipset_refresh *cr; for (int i = 0; i < MAX_CHIPSET_REFRESH_TOTAL; i++) { cr = &p->cr[i]; cr->index = i; cr->rate = -1; } cr = &p->cr[CHIPSET_REFRESH_PAL]; cr->index = CHIPSET_REFRESH_PAL; cr->horiz = -1; cr->vert = -1; cr->lace = -1; cr->vsync = - 1; cr->framelength = -1; cr->rate = 50.0; cr->ntsc = 0; cr->locked = false; _tcscpy (cr->label, _T("PAL")); cr = &p->cr[CHIPSET_REFRESH_NTSC]; cr->index = CHIPSET_REFRESH_NTSC; cr->horiz = -1; cr->vert = -1; cr->lace = -1; cr->vsync = - 1; cr->framelength = -1; cr->rate = 60.0; cr->ntsc = 1; cr->locked = false; _tcscpy (cr->label, _T("NTSC")); target_default_options (p, type); zfile_fclose (default_file); default_file = NULL; f = zfile_fopen_empty (NULL, _T("configstore")); if (f) { uaeconfig++; cfgfile_save_options (f, p, 0); uaeconfig--; cfg_write (&zero, f); default_file = f; } } static void buildin_default_prefs_68020 (struct uae_prefs *p) { p->cpu_model = 68020; p->address_space_24 = 1; p->cpu_compatible = 1; p->chipset_mask = CSMASK_ECS_AGNUS | CSMASK_ECS_DENISE | CSMASK_AGA; p->chipmem_size = 0x200000; p->bogomem_size = 0; p->m68k_speed = -1; } static void buildin_default_host_prefs (struct uae_prefs *p) { #if 0 p->sound_filter = FILTER_SOUND_OFF; p->sound_stereo = SND_STEREO; p->sound_stereo_separation = 7; p->sound_mixed_stereo = 0; #endif } static void buildin_default_prefs (struct uae_prefs *p) { buildin_default_host_prefs (p); p->floppyslots[0].dfxtype = DRV_35_DD; if (p->nr_floppies != 1 && p->nr_floppies != 2) p->nr_floppies = 2; p->floppyslots[1].dfxtype = p->nr_floppies >= 2 ? DRV_35_DD : DRV_NONE; p->floppyslots[2].dfxtype = DRV_NONE; p->floppyslots[3].dfxtype = DRV_NONE; p->floppy_speed = 100; p->fpu_model = 0; p->cpu_model = 68000; p->cpu_clock_multiplier = 0; p->cpu_frequency = 0; p->cpu060_revision = 1; p->fpu_revision = -1; p->m68k_speed = 0; p->cpu_compatible = 1; p->address_space_24 = 1; p->cpu_cycle_exact = 0; p->blitter_cycle_exact = 0; p->chipset_mask = CSMASK_ECS_AGNUS; p->immediate_blits = 0; p->waiting_blits = 0; p->collision_level = 2; if (p->produce_sound < 1) p->produce_sound = 1; p->scsi = 0; p->uaeserial = 0; p->cpu_idle = 0; p->turbo_emulation = 0; p->catweasel = 0; p->tod_hack = 0; p->maprom = 0; p->cachesize = 0; p->socket_emu = 0; p->sound_volume = 0; p->sound_volume_cd = 0; p->clipboard_sharing = false; p->chipmem_size = 0x00080000; p->bogomem_size = 0x00080000; p->fastmem_size = 0x00000000; p->mbresmem_low_size = 0x00000000; p->mbresmem_high_size = 0x00000000; p->z3fastmem_size = 0x00000000; p->z3fastmem2_size = 0x00000000; p->z3chipmem_size = 0x00000000; p->rtgmem_size = 0x00000000; p->rtgmem_type = 1; p->cs_rtc = 0; p->cs_a1000ram = false; p->cs_fatgaryrev = -1; p->cs_ramseyrev = -1; p->cs_agnusrev = -1; p->cs_deniserev = -1; p->cs_mbdmac = 0; p->cs_a2091 = false; p->cs_a4091 = false; p->cs_cd32c2p = p->cs_cd32cd = p->cs_cd32nvram = false; p->cs_cdtvcd = p->cs_cdtvram = p->cs_cdtvcard = false; p->cs_ide = 0; p->cs_pcmcia = 0; p->cs_ksmirror_e0 = 1; p->cs_ksmirror_a8 = 0; p->cs_ciaoverlay = 1; p->cs_ciaatod = 0; p->cs_df0idhw = 1; p->cs_resetwarning = 0; _tcscpy (p->romfile, _T("")); _tcscpy (p->romextfile, _T("")); _tcscpy (p->flashfile, _T("")); _tcscpy (p->cartfile, _T("")); _tcscpy (p->rtcfile, _T("")); _tcscpy (p->amaxromfile, _T("")); p->prtname[0] = 0; p->sername[0] = 0; p->mountitems = 0; target_default_options (p, 1); } static void set_68020_compa (struct uae_prefs *p, int compa, int cd32) { switch (compa) { case 0: p->blitter_cycle_exact = 1; p->m68k_speed = 0; if (p->cpu_model == 68020 && p->cachesize == 0) { p->cpu_cycle_exact = 1; p->cpu_clock_multiplier = 4 << 8; } break; case 1: p->cpu_compatible = true; p->m68k_speed = 0; break; case 2: p->cpu_compatible = 0; p->m68k_speed = -1; p->address_space_24 = 0; break; case 3: p->cpu_compatible = 0; p->address_space_24 = 0; p->cachesize = 8192; break; } } /* 0: cycle-exact * 1: more compatible * 2: no more compatible, no 100% sound * 3: no more compatible, waiting blits, no 100% sound */ static void set_68000_compa (struct uae_prefs *p, int compa) { p->cpu_clock_multiplier = 2 << 8; switch (compa) { case 0: p->cpu_cycle_exact = p->blitter_cycle_exact = 1; break; case 1: break; case 2: p->cpu_compatible = 0; break; case 3: p->produce_sound = 2; p->cpu_compatible = 0; break; } } static int bip_a3000 (struct uae_prefs *p, int config, int compa, int romcheck) { int roms[2]; if (config == 2) roms[0] = 61; else if (config == 1) roms[0] = 71; else roms[0] = 59; roms[1] = -1; p->bogomem_size = 0; p->chipmem_size = 0x200000; p->cpu_model = 68030; p->fpu_model = 68882; p->chipset_mask = CSMASK_ECS_AGNUS | CSMASK_ECS_DENISE; p->cpu_compatible = p->address_space_24 = 0; p->m68k_speed = -1; p->immediate_blits = 0; p->produce_sound = 2; p->cachesize = 8192; p->floppyslots[0].dfxtype = DRV_35_HD; p->floppy_speed = 0; p->cpu_idle = 150; p->cs_compatible = CP_A3000; p->mbresmem_low_size = 8 * 1024 * 1024; built_in_chipset_prefs (p); p->cs_ciaatod = p->ntscmode ? 2 : 1; return configure_rom (p, roms, romcheck); } static int bip_a4000 (struct uae_prefs *p, int config, int compa, int romcheck) { int roms[8]; roms[0] = 16; roms[1] = 31; roms[2] = 13; roms[3] = 12; roms[4] = -1; p->bogomem_size = 0; p->chipmem_size = 0x200000; p->mbresmem_low_size = 8 * 1024 * 1024; p->cpu_model = 68030; p->fpu_model = 68882; if (config > 0) p->cpu_model = p->fpu_model = 68040; p->chipset_mask = CSMASK_AGA | CSMASK_ECS_AGNUS | CSMASK_ECS_DENISE; p->cpu_compatible = p->address_space_24 = 0; p->m68k_speed = -1; p->immediate_blits = 0; p->produce_sound = 2; p->cachesize = 8192; p->floppyslots[0].dfxtype = DRV_35_HD; p->floppyslots[1].dfxtype = DRV_35_HD; p->floppy_speed = 0; p->cpu_idle = 150; p->cs_compatible = CP_A4000; built_in_chipset_prefs (p); p->cs_ciaatod = p->ntscmode ? 2 : 1; return configure_rom (p, roms, romcheck); } static int bip_a4000t (struct uae_prefs *p, int config, int compa, int romcheck) { int roms[8]; roms[0] = 16; roms[1] = 31; roms[2] = 13; roms[3] = -1; p->bogomem_size = 0; p->chipmem_size = 0x200000; p->mbresmem_low_size = 8 * 1024 * 1024; p->cpu_model = 68030; p->fpu_model = 68882; if (config > 0) p->cpu_model = p->fpu_model = 68040; p->chipset_mask = CSMASK_AGA | CSMASK_ECS_AGNUS | CSMASK_ECS_DENISE; p->cpu_compatible = p->address_space_24 = 0; p->m68k_speed = -1; p->immediate_blits = 0; p->produce_sound = 2; p->cachesize = 8192; p->floppyslots[0].dfxtype = DRV_35_HD; p->floppyslots[1].dfxtype = DRV_35_HD; p->floppy_speed = 0; p->cpu_idle = 150; p->cs_compatible = CP_A4000T; built_in_chipset_prefs (p); p->cs_ciaatod = p->ntscmode ? 2 : 1; return configure_rom (p, roms, romcheck); } static int bip_a1000 (struct uae_prefs *p, int config, int compa, int romcheck) { int roms[2]; #ifdef FSUAE roms[0] = 5; #else roms[0] = 24; #endif roms[1] = -1; p->chipset_mask = 0; p->bogomem_size = 0; p->sound_filter = FILTER_SOUND_ON; set_68000_compa (p, compa); p->floppyslots[1].dfxtype = DRV_NONE; p->cs_compatible = CP_A1000; p->cs_slowmemisfast = 1; p->cs_dipagnus = 1; p->cs_agnusbltbusybug = 1; built_in_chipset_prefs (p); if (config > 0) p->cs_denisenoehb = 1; if (config > 1) p->chipmem_size = 0x40000; return configure_rom (p, roms, romcheck); } static int bip_cdtv (struct uae_prefs *p, int config, int compa, int romcheck) { int roms[4]; p->bogomem_size = 0; p->chipmem_size = 0x100000; p->chipset_mask = CSMASK_ECS_AGNUS; p->cs_cdtvcd = p->cs_cdtvram = 1; if (config > 0) p->cs_cdtvcard = 64; p->cs_rtc = 1; p->nr_floppies = 0; p->floppyslots[0].dfxtype = DRV_NONE; if (config > 0) p->floppyslots[0].dfxtype = DRV_35_DD; p->floppyslots[1].dfxtype = DRV_NONE; set_68000_compa (p, compa); p->cs_compatible = CP_CDTV; built_in_chipset_prefs (p); fetch_datapath (p->flashfile, sizeof (p->flashfile) / sizeof (TCHAR)); _tcscat (p->flashfile, _T("cdtv.nvr")); roms[0] = 6; roms[1] = 32; roms[2] = -1; if (!configure_rom (p, roms, romcheck)) return 0; roms[0] = 20; roms[1] = 21; roms[2] = 22; roms[3] = -1; if (!configure_rom (p, roms, romcheck)) return 0; return 1; } static int bip_cd32 (struct uae_prefs *p, int config, int compa, int romcheck) { int roms[2]; buildin_default_prefs_68020 (p); p->cs_cd32c2p = p->cs_cd32cd = p->cs_cd32nvram = 1; p->nr_floppies = 0; p->floppyslots[0].dfxtype = DRV_NONE; p->floppyslots[1].dfxtype = DRV_NONE; set_68020_compa (p, compa, 1); p->cs_compatible = CP_CD32; built_in_chipset_prefs (p); fetch_datapath (p->flashfile, sizeof (p->flashfile) / sizeof (TCHAR)); _tcscat (p->flashfile, _T("cd32.nvr")); roms[0] = 64; roms[1] = -1; if (!configure_rom (p, roms, 0)) { roms[0] = 18; roms[1] = -1; if (!configure_rom (p, roms, romcheck)) return 0; roms[0] = 19; if (!configure_rom (p, roms, romcheck)) return 0; } if (config > 0) { roms[0] = 23; if (!configure_rom (p, roms, romcheck)) return 0; } return 1; } static int bip_a1200 (struct uae_prefs *p, int config, int compa, int romcheck) { int roms[4]; buildin_default_prefs_68020 (p); roms[0] = 11; roms[1] = 15; roms[2] = 31; roms[3] = -1; p->cs_rtc = 0; if (config == 1) { p->fastmem_size = 0x400000; p->cs_rtc = 2; } set_68020_compa (p, compa, 0); p->cs_compatible = CP_A1200; built_in_chipset_prefs (p); return configure_rom (p, roms, romcheck); } static int bip_a600 (struct uae_prefs *p, int config, int compa, int romcheck) { int roms[4]; roms[0] = 10; roms[1] = 9; roms[2] = 8; roms[3] = -1; p->bogomem_size = 0; p->chipmem_size = 0x100000; if (config > 0) p->cs_rtc = 1; if (config == 1) p->chipmem_size = 0x200000; if (config == 2) p->fastmem_size = 0x400000; p->chipset_mask = CSMASK_ECS_AGNUS | CSMASK_ECS_DENISE; set_68000_compa (p, compa); p->cs_compatible = CP_A600; built_in_chipset_prefs (p); return configure_rom (p, roms, romcheck); } static int bip_a500p (struct uae_prefs *p, int config, int compa, int romcheck) { int roms[2]; roms[0] = 7; roms[1] = -1; p->bogomem_size = 0; p->chipmem_size = 0x100000; if (config > 0) p->cs_rtc = 1; if (config == 1) p->chipmem_size = 0x200000; if (config == 2) p->fastmem_size = 0x400000; p->chipset_mask = CSMASK_ECS_AGNUS | CSMASK_ECS_DENISE; set_68000_compa (p, compa); p->cs_compatible = CP_A500P; built_in_chipset_prefs (p); return configure_rom (p, roms, romcheck); } static int bip_a500 (struct uae_prefs *p, int config, int compa, int romcheck) { int roms[4]; roms[0] = roms[1] = roms[2] = roms[3] = -1; switch (config) { case 0: // KS 1.3, OCS Agnus, 0.5M Chip + 0.5M Slow roms[0] = 6; roms[1] = 32; p->chipset_mask = 0; break; case 1: // KS 1.3, ECS Agnus, 0.5M Chip + 0.5M Slow roms[0] = 6; roms[1] = 32; break; case 2: // KS 1.3, ECS Agnus, 1.0M Chip roms[0] = 6; roms[1] = 32; p->bogomem_size = 0; p->chipmem_size = 0x100000; break; case 3: // KS 1.3, OCS Agnus, 0.5M Chip roms[0] = 6; roms[1] = 32; p->bogomem_size = 0; p->chipset_mask = 0; p->cs_rtc = 0; p->floppyslots[1].dfxtype = DRV_NONE; break; case 4: // KS 1.2, OCS Agnus, 0.5M Chip roms[0] = 5; roms[1] = 4; roms[2] = 3; p->bogomem_size = 0; p->chipset_mask = 0; p->cs_rtc = 0; p->floppyslots[1].dfxtype = DRV_NONE; break; case 5: // KS 1.2, OCS Agnus, 0.5M Chip + 0.5M Slow roms[0] = 5; roms[1] = 4; roms[2] = 3; p->chipset_mask = 0; break; } set_68000_compa (p, compa); p->cs_compatible = CP_A500; built_in_chipset_prefs (p); return configure_rom (p, roms, romcheck); } static int bip_super (struct uae_prefs *p, int config, int compa, int romcheck) { int roms[8]; roms[0] = 46; roms[1] = 16; roms[2] = 31; roms[3] = 15; roms[4] = 14; roms[5] = 12; roms[6] = 11; roms[7] = -1; p->bogomem_size = 0; p->chipmem_size = 0x400000; p->z3fastmem_size = 8 * 1024 * 1024; p->rtgmem_size = 16 * 1024 * 1024; p->cpu_model = 68040; p->fpu_model = 68040; p->chipset_mask = CSMASK_AGA | CSMASK_ECS_AGNUS | CSMASK_ECS_DENISE; p->cpu_compatible = p->address_space_24 = 0; p->m68k_speed = -1; p->immediate_blits = 1; p->produce_sound = 2; p->cachesize = 8192; p->floppyslots[0].dfxtype = DRV_35_HD; p->floppyslots[1].dfxtype = DRV_35_HD; p->floppy_speed = 0; p->cpu_idle = 150; p->scsi = 1; p->uaeserial = 1; p->socket_emu = 1; p->cart_internal = 0; p->picasso96_nocustom = 1; p->cs_compatible = 1; built_in_chipset_prefs (p); p->cs_ide = -1; p->cs_ciaatod = p->ntscmode ? 2 : 1; //_tcscat(p->flashfile, _T("battclock.nvr")); return configure_rom (p, roms, romcheck); } static int bip_arcadia (struct uae_prefs *p, int config, int compa, int romcheck) { int roms[4], i; struct romlist **rl; p->bogomem_size = 0; p->chipset_mask = 0; p->cs_rtc = 0; p->nr_floppies = 0; p->floppyslots[0].dfxtype = DRV_NONE; p->floppyslots[1].dfxtype = DRV_NONE; set_68000_compa (p, compa); p->cs_compatible = CP_A500; built_in_chipset_prefs (p); fetch_datapath (p->flashfile, sizeof (p->flashfile) / sizeof (TCHAR)); _tcscat (p->flashfile, _T("arcadia.nvr")); roms[0] = 5; roms[1] = 4; roms[2] = -1; if (!configure_rom (p, roms, romcheck)) return 0; roms[0] = 49; roms[1] = 50; roms[2] = 51; roms[3] = -1; if (!configure_rom (p, roms, romcheck)) return 0; rl = getarcadiaroms (); for (i = 0; rl[i]; i++) { if (config-- == 0) { roms[0] = rl[i]->rd->id; roms[1] = -1; configure_rom (p, roms, 0); break; } } xfree (rl); return 1; } int built_in_prefs (struct uae_prefs *p, int model, int config, int compa, int romcheck) { int v = 0; buildin_default_prefs (p); switch (model) { case 0: v = bip_a500 (p, config, compa, romcheck); break; case 1: v = bip_a500p (p, config, compa, romcheck); break; case 2: v = bip_a600 (p, config, compa, romcheck); break; case 3: v = bip_a1000 (p, config, compa, romcheck); break; case 4: v = bip_a1200 (p, config, compa, romcheck); break; case 5: v = bip_a3000 (p, config, compa, romcheck); break; case 6: v = bip_a4000 (p, config, compa, romcheck); break; case 7: v = bip_a4000t (p, config, compa, romcheck); break; case 8: v = bip_cd32 (p, config, compa, romcheck); break; case 9: v = bip_cdtv (p, config, compa, romcheck); break; case 10: v = bip_arcadia (p, config , compa, romcheck); break; case 11: v = bip_super (p, config, compa, romcheck); break; } if ((p->cpu_model >= 68020 || !p->cpu_cycle_exact) && !p->immediate_blits) p->waiting_blits = 1; return v; } int built_in_chipset_prefs (struct uae_prefs *p) { if (!p->cs_compatible) return 1; #ifdef FSUAE write_log("\n"); write_log("built_in_chipset_prefs\n"); write_log("\n"); #endif p->cs_a1000ram = 0; p->cs_cd32c2p = p->cs_cd32cd = p->cs_cd32nvram = 0; p->cs_cdtvcd = p->cs_cdtvram = p->cs_cdtvscsi = 0; p->cs_a2091 = p->cs_a4091 = 0; p->cs_fatgaryrev = -1; p->cs_ide = 0; p->cs_ramseyrev = -1; p->cs_deniserev = -1; p->cs_agnusrev = -1; p->cs_denisenoehb = 0; p->cs_dipagnus = 0; p->cs_agnusbltbusybug = 0; p->cs_mbdmac = 0; p->cs_pcmcia = 0; p->cs_ksmirror_e0 = 1; p->cs_ksmirror_a8 = 0; p->cs_ciaoverlay = 1; p->cs_ciaatod = 0; p->cs_rtc = 0; p->cs_rtc_adjust_mode = p->cs_rtc_adjust = 0; p->cs_df0idhw = 1; p->cs_resetwarning = 1; p->cs_slowmemisfast = 0; switch (p->cs_compatible) { case CP_GENERIC: // generic p->cs_rtc = 2; p->cs_fatgaryrev = 0; p->cs_ide = -1; p->cs_mbdmac = -1; p->cs_ramseyrev = 0x0f; break; case CP_CDTV: // CDTV p->cs_rtc = 1; p->cs_cdtvcd = p->cs_cdtvram = 1; p->cs_df0idhw = 1; p->cs_ksmirror_e0 = 0; break; case CP_CD32: // CD32 p->cs_cd32c2p = p->cs_cd32cd = p->cs_cd32nvram = 1; p->cs_ksmirror_e0 = 0; p->cs_ksmirror_a8 = 1; p->cs_ciaoverlay = 0; p->cs_resetwarning = 0; break; case CP_A500: // A500 p->cs_df0idhw = 0; p->cs_resetwarning = 0; if (p->bogomem_size || p->chipmem_size > 0x80000 || p->fastmem_size) p->cs_rtc = 1; break; case CP_A500P: // A500+ p->cs_rtc = 1; p->cs_resetwarning = 0; break; case CP_A600: // A600 p->cs_rtc = 1; p->cs_ide = IDE_A600A1200; p->cs_pcmcia = 1; p->cs_ksmirror_a8 = 1; p->cs_ciaoverlay = 0; p->cs_resetwarning = 0; break; case CP_A1000: // A1000 p->cs_a1000ram = 1; p->cs_ciaatod = p->ntscmode ? 2 : 1; p->cs_ksmirror_e0 = 0; p->cs_agnusbltbusybug = 1; p->cs_dipagnus = 1; break; case CP_A1200: // A1200 p->cs_ide = IDE_A600A1200; p->cs_pcmcia = 1; p->cs_ksmirror_a8 = 1; p->cs_ciaoverlay = 0; if (p->fastmem_size || p->z3fastmem_size) p->cs_rtc = 1; break; case CP_A2000: // A2000 p->cs_rtc = 1; p->cs_ciaatod = p->ntscmode ? 2 : 1; break; case CP_A3000: // A3000 p->cs_rtc = 2; p->cs_fatgaryrev = 0; p->cs_ramseyrev = 0x0d; p->cs_mbdmac = 1; p->cs_ksmirror_e0 = 0; p->cs_ciaatod = p->ntscmode ? 2 : 1; break; case CP_A3000T: // A3000T p->cs_rtc = 2; p->cs_fatgaryrev = 0; p->cs_ramseyrev = 0x0d; p->cs_mbdmac = 1; p->cs_ksmirror_e0 = 0; p->cs_ciaatod = p->ntscmode ? 2 : 1; break; case CP_A4000: // A4000 p->cs_rtc = 2; p->cs_fatgaryrev = 0; p->cs_ramseyrev = 0x0f; p->cs_ide = IDE_A4000; p->cs_mbdmac = 0; p->cs_ksmirror_a8 = 0; p->cs_ksmirror_e0 = 0; p->cs_ciaoverlay = 0; break; case CP_A4000T: // A4000T p->cs_rtc = 2; p->cs_fatgaryrev = 0; p->cs_ramseyrev = 0x0f; p->cs_ide = IDE_A4000; p->cs_mbdmac = 2; p->cs_ksmirror_a8 = 0; p->cs_ksmirror_e0 = 0; p->cs_ciaoverlay = 0; break; } return 1; } void config_check_vsync (void) { if (config_changed) { // if (config_changed == 1) // write_log (_T("* configuration check trigger\n")); config_changed++; if (config_changed >= 3) config_changed = 0; } } fs-uae-2.2.3+dfsg/src/table68k0000644000175000017500000003300412162366655016207 0ustar glaubitzglaubitz% 0: bit 0 % 1: bit 1 % c: condition code % C: condition codes, except F % f: direction % i: immediate % I: immediate, except 00 and ff % j: immediate 1..8 % J: immediate 0..15 % k: immediate 0..7 % K: immediate 0..63 % p: immediate 0..3 (CINV and CPUSH: cache field) % s: source mode % S: source reg % d: dest mode % D: dest reg % r: reg % z: size % % Actually, a sssSSS may appear as a destination, and % vice versa. The only difference between sssSSS and % dddDDD are the valid addressing modes. There is % no match for immediate and pc-rel. addressing modes % in case of dddDDD. % % Arp: --> -(Ar) % ArP: --> (Ar)+ % Ara: --> (Ar) % L: (xxx.L) % % Fields on a line: % 16 chars bitpattern : % CPU level / privilege level : % CPU level 0: 68000 % 1: 68010 % 2: 68020 % 3: 68030 % 4: 68040 % 5: 68060 % [Everything from 68020 possibly allows for FPU emulation] % Unimplemented after: % 0: Normal % 3: Not implemented in 68030 and later % 4: Not implemented in 68040 and later % 5: Not implemented in 68060 % privilege level 0: not privileged % 1: unprivileged only on 68000 (check regs.s) % 2: privileged (check regs.s) % 3: privileged if size == word (check regs.s) % Flags set by instruction: XNZVC : % Flags used by instruction: XNZVC : % - means flag unaffected / unused % 0 means flag reset % 1 means flag set % ? means programmer was too lazy to check or instruction may trap % + means instruction is conditional branch % everything else means flag set/used % / means instruction is unconditional branch/call % x means flag is unknown and well-behaved programs shouldn't check it % srcaddr status destaddr status : % bitmasks of % 1 means fetched % 2 means stored % 4 means jump offset % 8 means jump address % instruction % 0000 0000 0011 1100:000:XNZVC:XNZVC:10: ORSR.B #1 0000 0000 0111 1100:002:?????:?????:10: ORSR.W #1 0000 0zz0 11ss sSSS:250:?????:?????:11: CHK2.z #1,s[!Dreg,Areg,Aipi,Apdi,Immd] 0000 0000 zzdd dDDD:000:-NZ00:-----:13: OR.z #z,d[!Areg] 0000 0010 0011 1100:000:XNZVC:XNZVC:10: ANDSR.B #1 0000 0010 0111 1100:002:?????:?????:10: ANDSR.W #1 0000 0010 zzdd dDDD:000:-NZ00:-----:13: AND.z #z,d[!Areg] 0000 0100 zzdd dDDD:000:XNZVC:-----:13: SUB.z #z,d[!Areg] 0000 0110 zzdd dDDD:000:XNZVC:-----:13: ADD.z #z,d[!Areg] 0000 0110 11ss sSSS:230:?????:?????:10: CALLM s[!Dreg,Areg,Aipi,Apdi,Immd] 0000 0110 11ss sSSS:230:?????:?????:10: RTM s[Dreg,Areg] 0000 1000 00ss sSSS:000:--Z--:-----:11: BTST #1,s[!Areg] 0000 1000 01ss sSSS:000:--Z--:-----:13: BCHG #1,s[!Areg,Immd] 0000 1000 10ss sSSS:000:--Z--:-----:13: BCLR #1,s[!Areg,Immd] 0000 1000 11ss sSSS:000:--Z--:-----:13: BSET #1,s[!Areg,Immd] 0000 1010 0011 1100:000:XNZVC:XNZVC:10: EORSR.B #1 0000 1010 0111 1100:002:?????:?????:10: EORSR.W #1 0000 1010 zzdd dDDD:000:-NZ00:-----:13: EOR.z #z,d[!Areg] 0000 1100 zzss sSSS:000:-NZVC:-----:11: CMP.z #z,s[!Areg,Immd,PC8r,PC16] 0000 1100 zzss sSSS:200:-NZVC:-----:11: CMP.z #z,s[PC8r,PC16] 0000 1010 11ss sSSS:200:?????:?????:13: CAS.B #1,s[!Dreg,Areg,Immd,PC8r,PC16] 0000 1100 11ss sSSS:200:?????:?????:13: CAS.W #1,s[!Dreg,Areg,Immd,PC8r,PC16] 0000 1100 1111 1100:250:?????:?????:10: CAS2.W #2 0000 1110 zzss sSSS:202:?????:?????:13: MOVES.z #1,s[!Dreg,Areg,Immd,PC8r,PC16] 0000 1110 11ss sSSS:200:?????:?????:13: CAS.L #1,s[!Dreg,Areg,Immd,PC8r,PC16] 0000 1110 1111 1100:250:?????:?????:10: CAS2.L #2 0000 rrr1 00dd dDDD:000:-----:-----:12: MVPMR.W d[Areg-Ad16],Dr 0000 rrr1 01dd dDDD:000:-----:-----:12: MVPMR.L d[Areg-Ad16],Dr 0000 rrr1 10dd dDDD:000:-----:-----:12: MVPRM.W Dr,d[Areg-Ad16] 0000 rrr1 11dd dDDD:000:-----:-----:12: MVPRM.L Dr,d[Areg-Ad16] 0000 rrr1 00ss sSSS:000:--Z--:-----:11: BTST Dr,s[!Areg] 0000 rrr1 01ss sSSS:000:--Z--:-----:13: BCHG Dr,s[!Areg,Immd] 0000 rrr1 10ss sSSS:000:--Z--:-----:13: BCLR Dr,s[!Areg,Immd] 0000 rrr1 11ss sSSS:000:--Z--:-----:13: BSET Dr,s[!Areg,Immd] 0001 DDDd ddss sSSS:000:-NZ00:-----:12: MOVE.B s,d[!Areg] 0010 DDDd ddss sSSS:000:-----:-----:12: MOVEA.L s,d[Areg] 0010 DDDd ddss sSSS:000:-NZ00:-----:12: MOVE.L s,d[!Areg] 0011 DDDd ddss sSSS:000:-----:-----:12: MOVEA.W s,d[Areg] 0011 DDDd ddss sSSS:000:-NZ00:-----:12: MOVE.W s,d[!Areg] 0100 0000 zzdd dDDD:000:XxZxC:X-Z--:30: NEGX.z d[!Areg] 0100 0000 11dd dDDD:001:?????:?????:10: MVSR2.W d[!Areg] 0100 0010 zzdd dDDD:000:-0100:-----:20: CLR.z d[!Areg] 0100 0010 11dd dDDD:100:?????:?????:10: MVSR2.B d[!Areg] 0100 0100 zzdd dDDD:000:XNZVC:-----:30: NEG.z d[!Areg] 0100 0100 11ss sSSS:000:XNZVC:-----:10: MV2SR.B s[!Areg] 0100 0110 zzdd dDDD:000:-NZ00:-----:30: NOT.z d[!Areg] 0100 0110 11ss sSSS:002:?????:?????:10: MV2SR.W s[!Areg] 0100 1000 0000 1rrr:200:-----:-----:31: LINK.L Ar,#2 0100 1000 00dd dDDD:000:X?Z?C:X-Z--:30: NBCD.B d[!Areg] 0100 1000 0100 1kkk:200:?????:?????:10: BKPT #k 0100 1000 01ss sSSS:000:-NZ00:-----:30: SWAP.W s[Dreg] 0100 1000 01ss sSSS:000:-----:-----:00: PEA.L s[!Dreg,Areg,Aipi,Apdi,Immd] 0100 1000 10dd dDDD:000:-NZ00:-----:30: EXT.W d[Dreg] 0100 1000 10dd dDDD:000:-----:-----:02: MVMLE.W #1,d[!Dreg,Areg,Aipi] 0100 1000 11dd dDDD:000:-NZ00:-----:30: EXT.L d[Dreg] 0100 1000 11dd dDDD:000:-----:-----:02: MVMLE.L #1,d[!Dreg,Areg,Aipi] 0100 1001 11dd dDDD:200:-NZ00:-----:30: EXT.B d[Dreg] 0100 1010 zzss sSSS:000:-NZ00:-----:10: TST.z s[!Areg,PC16,PC8r] 0100 1010 zzss sSSS:200:-NZ00:-----:10: TST.z s[Areg,PC16,PC8r] 0100 1010 11dd dDDD:000:?????:?????:30: TAS.B d[!Areg] 0100 1010 1111 1100:000:?????:?????:00: ILLEGAL 0100 1100 00ss sSSS:200:-NZVC:-----:13: MULL.L #1,s[!Areg] 0100 1100 01ss sSSS:200:?????:?????:13: DIVL.L #1,s[!Areg] 0100 1100 10ss sSSS:000:-----:-----:01: MVMEL.W #1,s[!Dreg,Areg,Apdi,Immd] 0100 1100 11ss sSSS:000:-----:-----:01: MVMEL.L #1,s[!Dreg,Areg,Apdi,Immd] 0100 1110 0100 JJJJ:000:-----:XNZVC:10: TRAP #J 0100 1110 0101 0rrr:000:-----:-----:31: LINK.W Ar,#1 0100 1110 0101 1rrr:000:-----:-----:30: UNLK.L Ar 0100 1110 0110 0rrr:002:-----:-----:10: MVR2USP.L Ar 0100 1110 0110 1rrr:002:-----:-----:20: MVUSP2R.L Ar 0100 1110 0111 0000:002:-----:-----:00: RESET 0100 1110 0111 0001:000:-----:-----:00: NOP 0100 1110 0111 0010:002:XNZVC:-----:10: STOP #1 0100 1110 0111 0011:002:XNZVC:-----:00: RTE 0100 1110 0111 0100:000:?????:?????:10: RTD #1 0100 1110 0111 0101:000:-----:-----:00: RTS 0100 1110 0111 0110:000:-----:XNZVC:00: TRAPV 0100 1110 0111 0111:000:XNZVC:-----:00: RTR 0100 1110 0111 1010:102:?????:?????:10: MOVEC2 #1 0100 1110 0111 1011:102:?????:?????:10: MOVE2C #1 0100 1110 10ss sSSS:000://///://///:80: JSR.L s[!Dreg,Areg,Aipi,Apdi,Immd] 0100 rrr1 00ss sSSS:200:?????:?????:11: CHK.L s[!Areg],Dr 0100 rrr1 10ss sSSS:000:?????:?????:11: CHK.W s[!Areg],Dr 0100 1110 11ss sSSS:000://///://///:80: JMP.L s[!Dreg,Areg,Aipi,Apdi,Immd] 0100 rrr1 11ss sSSS:000:-----:-----:02: LEA.L s[!Dreg,Areg,Aipi,Apdi,Immd],Ar 0101 jjj0 01dd dDDD:000:-----:-----:13: ADDA.W #j,d[Areg] 0101 jjj0 10dd dDDD:000:-----:-----:13: ADDA.L #j,d[Areg] 0101 jjj0 zzdd dDDD:000:XNZVC:-----:13: ADD.z #j,d[!Areg] 0101 jjj1 01dd dDDD:000:-----:-----:13: SUBA.W #j,d[Areg] 0101 jjj1 10dd dDDD:000:-----:-----:13: SUBA.L #j,d[Areg] 0101 jjj1 zzdd dDDD:000:XNZVC:-----:13: SUB.z #j,d[!Areg] 0101 cccc 1100 1rrr:000:-----:-++++:31: DBcc.W Dr,#1 0101 cccc 11dd dDDD:000:-----:-++++:20: Scc.B d[!Areg] 0101 cccc 1111 1010:200:?????:?????:10: TRAPcc #1 0101 cccc 1111 1011:200:?????:?????:10: TRAPcc #2 0101 cccc 1111 1100:200:?????:?????:00: TRAPcc % Bxx.L is 68020 only, but setting the CPU level to 2 would give illegal % instruction exceptions when compiling a 68000 only emulation, which isn't % what we want either. 0110 0001 0000 0000:000://///://///:40: BSR.W #1 0110 0001 IIII IIII:000://///://///:40: BSR.B #i 0110 0001 1111 1111:000://///://///:40: BSR.L #2 0110 CCCC 0000 0000:000:-----:-++++:40: Bcc.W #1 0110 CCCC IIII IIII:000:-----:-++++:40: Bcc.B #i 0110 CCCC 1111 1111:000:-----:-++++:40: Bcc.L #2 0111 rrr0 iiii iiii:000:-NZ00:-----:12: MOVE.L #i,Dr 1000 rrr0 zzss sSSS:000:-NZ00:-----:13: OR.z s[!Areg],Dr 1000 rrr0 11ss sSSS:000:?????:?????:13: DIVU.W s[!Areg],Dr 1000 rrr1 00dd dDDD:000:XxZxC:X-Z--:13: SBCD.B d[Dreg],Dr 1000 rrr1 00dd dDDD:000:XxZxC:X-Z--:13: SBCD.B d[Areg-Apdi],Arp 1000 rrr1 zzdd dDDD:000:-NZ00:-----:13: OR.z Dr,d[!Areg,Dreg] 1000 rrr1 01dd dDDD:200:?????:?????:12: PACK d[Dreg],Dr 1000 rrr1 01dd dDDD:200:?????:?????:12: PACK d[Areg-Apdi],Arp 1000 rrr1 10dd dDDD:200:?????:?????:12: UNPK d[Dreg],Dr 1000 rrr1 10dd dDDD:200:?????:?????:12: UNPK d[Areg-Apdi],Arp 1000 rrr1 11ss sSSS:000:?????:?????:13: DIVS.W s[!Areg],Dr 1001 rrr0 zzss sSSS:000:XNZVC:-----:13: SUB.z s,Dr 1001 rrr0 11ss sSSS:000:-----:-----:13: SUBA.W s,Ar 1001 rrr1 zzdd dDDD:000:XNZVC:X-Z--:13: SUBX.z d[Dreg],Dr 1001 rrr1 zzdd dDDD:000:XNZVC:X-Z--:13: SUBX.z d[Areg-Apdi],Arp 1001 rrr1 zzdd dDDD:000:XNZVC:-----:13: SUB.z Dr,d[!Areg,Dreg] 1001 rrr1 11ss sSSS:000:-----:-----:13: SUBA.L s,Ar 1011 rrr0 zzss sSSS:000:-NZVC:-----:11: CMP.z s,Dr 1011 rrr0 11ss sSSS:000:-NZVC:-----:11: CMPA.W s,Ar 1011 rrr1 11ss sSSS:000:-NZVC:-----:11: CMPA.L s,Ar 1011 rrr1 zzdd dDDD:000:-NZVC:-----:11: CMPM.z d[Areg-Aipi],ArP 1011 rrr1 zzdd dDDD:000:-NZ00:-----:13: EOR.z Dr,d[!Areg] 1100 rrr0 zzss sSSS:000:-NZ00:-----:13: AND.z s[!Areg],Dr 1100 rrr0 11ss sSSS:000:-NZ00:-----:13: MULU.W s[!Areg],Dr 1100 rrr1 00dd dDDD:000:XxZxC:X-Z--:13: ABCD.B d[Dreg],Dr 1100 rrr1 00dd dDDD:000:XxZxC:X-Z--:13: ABCD.B d[Areg-Apdi],Arp 1100 rrr1 zzdd dDDD:000:-NZ00:-----:13: AND.z Dr,d[!Areg,Dreg] 1100 rrr1 01dd dDDD:000:-----:-----:33: EXG.L Dr,d[Dreg] 1100 rrr1 01dd dDDD:000:-----:-----:33: EXG.L Ar,d[Areg] 1100 rrr1 10dd dDDD:000:-----:-----:33: EXG.L Dr,d[Areg] 1100 rrr1 11ss sSSS:000:-NZ00:-----:13: MULS.W s[!Areg],Dr 1101 rrr0 zzss sSSS:000:XNZVC:-----:13: ADD.z s,Dr 1101 rrr0 11ss sSSS:000:-----:-----:13: ADDA.W s,Ar 1101 rrr1 zzdd dDDD:000:XNZVC:X-Z--:13: ADDX.z d[Dreg],Dr 1101 rrr1 zzdd dDDD:000:XNZVC:X-Z--:13: ADDX.z d[Areg-Apdi],Arp 1101 rrr1 zzdd dDDD:000:XNZVC:-----:13: ADD.z Dr,d[!Areg,Dreg] 1101 rrr1 11ss sSSS:000:-----:-----:13: ADDA.L s,Ar 1110 jjjf zz00 0RRR:000:XNZVC:-----:13: ASf.z #j,DR 1110 jjjf zz00 1RRR:000:XNZ0C:-----:13: LSf.z #j,DR 1110 jjjf zz01 0RRR:000:XNZ0C:X----:13: ROXf.z #j,DR 1110 jjjf zz01 1RRR:000:-NZ0C:-----:13: ROf.z #j,DR 1110 rrrf zz10 0RRR:000:XNZVC:X----:13: ASf.z Dr,DR 1110 rrrf zz10 1RRR:000:XNZ0C:X----:13: LSf.z Dr,DR 1110 rrrf zz11 0RRR:000:XNZ0C:X----:13: ROXf.z Dr,DR 1110 rrrf zz11 1RRR:000:-NZ0C:-----:13: ROf.z Dr,DR 1110 000f 11dd dDDD:000:XNZVC:-----:13: ASfW.W d[!Dreg,Areg] 1110 001f 11dd dDDD:000:XNZ0C:-----:13: LSfW.W d[!Dreg,Areg] 1110 010f 11dd dDDD:000:XNZ0C:X----:13: ROXfW.W d[!Dreg,Areg] 1110 011f 11dd dDDD:000:-NZ0C:-----:13: ROfW.W d[!Dreg,Areg] 1110 1000 11ss sSSS:200:?????:?????:11: BFTST #1,s[!Areg,Apdi,Aipi,Immd] 1110 1001 11ss sSSS:200:?????:?????:11: BFEXTU #1,s[!Areg,Apdi,Aipi,Immd] 1110 1010 11ss sSSS:200:?????:?????:13: BFCHG #1,s[!Areg,Apdi,Aipi,Immd,PC8r,PC16] 1110 1011 11ss sSSS:200:?????:?????:11: BFEXTS #1,s[!Areg,Apdi,Aipi,Immd] 1110 1100 11ss sSSS:200:?????:?????:13: BFCLR #1,s[!Areg,Apdi,Aipi,Immd,PC8r,PC16] 1110 1101 11ss sSSS:200:?????:?????:11: BFFFO #1,s[!Areg,Apdi,Aipi,Immd] 1110 1110 11ss sSSS:200:?????:?????:13: BFSET #1,s[!Areg,Apdi,Aipi,Immd,PC8r,PC16] 1110 1111 11ss sSSS:200:?????:?????:13: BFINS #1,s[!Areg,Apdi,Aipi,Immd,PC8r,PC16] % floating point co processor 1111 0010 00ss sSSS:200:?????:?????:11: FPP #1,s 1111 0010 01ss sSSS:200:?????:?????:11: FDBcc #1,s[Areg-Dreg] 1111 0010 01ss sSSS:200:?????:?????:11: FScc #1,s[!Areg,Immd,PC8r,PC16] 1111 0010 0111 1010:200:?????:?????:10: FTRAPcc #1 1111 0010 0111 1011:200:?????:?????:10: FTRAPcc #2 1111 0010 0111 1100:200:?????:?????:00: FTRAPcc 1111 0010 10KK KKKK:200:?????:?????:11: FBcc #K,#1 1111 0010 11KK KKKK:200:?????:?????:11: FBcc #K,#2 1111 0011 00ss sSSS:202:?????:?????:20: FSAVE s[!Dreg,Areg,Aipi,Immd,PC8r,PC16] 1111 0011 01ss sSSS:202:?????:?????:10: FRESTORE s[!Dreg,Areg,Apdi,Immd] % 68030 MMU (allowed addressing modes not checked!) 1111 0000 00ss sSSS:342:?????:?????:11: MMUOP030 s[Dreg,Areg,Apdi,Aipi,Aind,Ad16,Ad8r,absl,absw],#1 % 68040/68060 instructions 1111 0100 pp00 1rrr:402:-----:-----:02: CINVL #p,Ar 1111 0100 pp01 0rrr:402:-----:-----:02: CINVP #p,Ar 1111 0100 pp01 1rrr:402:-----:-----:00: CINVA #p 1111 0100 pp10 1rrr:402:-----:-----:02: CPUSHL #p,Ar 1111 0100 pp11 0rrr:402:-----:-----:02: CPUSHP #p,Ar 1111 0100 pp11 1rrr:402:-----:-----:00: CPUSHA #p 1111 0101 0000 0rrr:402:-----:-----:00: PFLUSHN Ara 1111 0101 0000 1rrr:402:-----:-----:00: PFLUSH Ara 1111 0101 0001 0rrr:402:-----:-----:00: PFLUSHAN Ara 1111 0101 0001 1rrr:402:-----:-----:00: PFLUSHA Ara % 68040 only 1111 0101 0100 1rrr:452:-----:-----:00: PTESTR Ara 1111 0101 0110 1rrr:452:-----:-----:00: PTESTW Ara % destination register number is encoded in the following word 1111 0110 0010 0rrr:400:-----:-----:12: MOVE16 ArP,AxP 1111 0110 00ss sSSS:400:-----:-----:12: MOVE16 s[Dreg-Aipi],L 1111 0110 00dd dDDD:400:-----:-----:12: MOVE16 L,d[Areg-Aipi] 1111 0110 00ss sSSS:400:-----:-----:12: MOVE16 s[Aind],L 1111 0110 00dd dDDD:400:-----:-----:12: MOVE16 L,d[Aipi-Aind] % 68060 1111 1000 0000 0000:502:?????:?????:10: LPSTOP #1 1111 0101 1000 1rrr:502:-----:-----:00: PLPAR Ara 1111 0101 1100 1rrr:502:-----:-----:00: PLPAW Ara fs-uae-2.2.3+dfsg/src/sana2.cpp0000644000175000017500000013422612162366655016364 0ustar glaubitzglaubitz/* * UAE - The Un*x Amiga Emulator * * SanaII emulation * * partially based on code from 3c589 PCMCIA driver by Neil Cafferke * * Copyright 2007 Toni Wilen * */ #include "sysconfig.h" #include "sysdeps.h" #include "threaddep/thread.h" #include "options.h" #include "uae/memory.h" #include "custom.h" #include "events.h" #include "newcpu.h" #include "autoconf.h" #include "traps.h" #include "execlib.h" #include "native2amiga.h" #include "blkdev.h" #include "uae.h" #include "sana2.h" #include "win32_uaenet.h" #include "execio.h" #define SANA2NAME _T("uaenet.device") #define MAX_ASYNC_REQUESTS 200 #define MAX_OPEN_DEVICES 20 #define S2_START (CMD_NONSTD) // 9 #define S2_DEVICEQUERY (S2_START+ 0) // 9 #define S2_GETSTATIONADDRESS (S2_START+ 1) // 10 #define S2_CONFIGINTERFACE (S2_START+ 2) // 11 #define S2_ADDMULTICASTADDRESS (S2_START+ 5) // 14 #define S2_DELMULTICASTADDRESS (S2_START+ 6) // 15 #define S2_MULTICAST (S2_START+ 7) // 16 #define S2_BROADCAST (S2_START+ 8) // 17 #define S2_TRACKTYPE (S2_START+ 9) // 18 #define S2_UNTRACKTYPE (S2_START+10) // 19 #define S2_GETTYPESTATS (S2_START+11) // 20 #define S2_GETSPECIALSTATS (S2_START+12) // 21 #define S2_GETGLOBALSTATS (S2_START+13) // 22 #define S2_ONEVENT (S2_START+14) // 23 #define S2_READORPHAN (S2_START+15) // 24 #define S2_ONLINE (S2_START+16) // 25 #define S2_OFFLINE (S2_START+17) // 26 #define S2_ADDMULTICASTADDRESSES 0xC000 #define S2_DELMULTICASTADDRESSES 0xC001 #define S2_GETPEERADDRESS 0xC002 #define S2_GETDNSADDRESS 0xC003 #define S2_GETEXTENDEDGLOBALSTATS 0xC004 #define S2_CONNECT 0xC005 #define S2_DISCONNECT 0xC006 #define S2_SAMPLE_THROUGHPUT 0xC007 #define S2WireType_Ethernet 1 #define S2WireType_IEEE802 6 #define SANA2_MAX_ADDR_BITS (128) #define SANA2_MAX_ADDR_BYTES ((SANA2_MAX_ADDR_BITS+7)/8) #define ADDR_SIZE 6 #define ETH_HEADER_SIZE (ADDR_SIZE + ADDR_SIZE + 2) #define S2ERR_NO_ERROR 0 /* peachy-keen */ #define S2ERR_NO_RESOURCES 1 /* resource allocation failure */ #define S2ERR_BAD_ARGUMENT 3 /* garbage somewhere */ #define S2ERR_BAD_STATE 4 /* inappropriate state */ #define S2ERR_BAD_ADDRESS 5 /* who? */ #define S2ERR_MTU_EXCEEDED 6 /* too much to chew */ #define S2ERR_NOT_SUPPORTED 8 /* hardware can't support cmd */ #define S2ERR_SOFTWARE 9 /* software error detected */ #define S2ERR_OUTOFSERVICE 10 /* driver is OFFLINE */ #define S2ERR_TX_FAILURE 11 /* Transmission attempt failed */ #define S2WERR_GENERIC_ERROR 0 /* no specific info available */ #define S2WERR_NOT_CONFIGURED 1 /* unit not configured */ #define S2WERR_UNIT_ONLINE 2 /* unit is currently online */ #define S2WERR_UNIT_OFFLINE 3 /* unit is currently offline */ #define S2WERR_ALREADY_TRACKED 4 /* protocol already tracked */ #define S2WERR_NOT_TRACKED 5 /* protocol not tracked */ #define S2WERR_BUFF_ERROR 6 /* buff mgt func returned error */ #define S2WERR_SRC_ADDRESS 7 /* source address problem */ #define S2WERR_DST_ADDRESS 8 /* destination address problem */ #define S2WERR_BAD_BROADCAST 9 /* broadcast address problem */ #define S2WERR_BAD_MULTICAST 10 /* multicast address problem */ #define S2WERR_MULTICAST_FULL 11 /* multicast address list full */ #define S2WERR_BAD_EVENT 12 /* unsupported event class */ #define S2WERR_BAD_STATDATA 13 /* statdata failed sanity check */ #define S2WERR_IS_CONFIGURED 15 /* attempt to config twice */ #define S2WERR_NULL_POINTER 16 /* null pointer detected */ #define S2WERR_TOO_MANY_RETIRES 17 /* tx failed - too many retries */ #define S2WERR_RCVREL_HDW_ERR 18 /* Driver fixable HW error */ #define S2EVENT_ERROR (1L<<0) /* error catch all */ #define S2EVENT_TX (1L<<1) /* transmitter error catch all */ #define S2EVENT_RX (1L<<2) /* receiver error catch all */ #define S2EVENT_ONLINE (1L<<3) /* unit is in service */ #define S2EVENT_OFFLINE (1L<<4) /* unit is not in service */ #define S2EVENT_BUFF (1L<<5) /* buff mgt function error */ #define S2EVENT_HARDWARE (1L<<6) /* hardware error catch all */ #define S2EVENT_SOFTWARE (1L<<7) /* software error catch all */ #define KNOWN_EVENTS (S2EVENT_ERROR|S2EVENT_TX|S2EVENT_RX|S2EVENT_ONLINE|\ S2EVENT_OFFLINE|S2EVENT_BUFF|S2EVENT_HARDWARE|S2EVENT_SOFTWARE) #define SANA2OPB_MINE 0 #define SANA2OPF_MINE (1<= MAX_TOTAL_NET_DEVICES || unit < 0) return 0; return &devst[unit]; } static struct priv_s2devstruct *getps2devstruct (uaecptr request) { int i = get_long (request + 24); if (i < 0 || i >= MAX_OPEN_DEVICES || pdevst[i].inuse == 0) { write_log (_T("%s: corrupt iorequest %08X %d\n"), SANA2NAME, request, i); return 0; } return &pdevst[i]; } static void *dev_thread (void *devs); static int start_thread (struct s2devstruct *dev) { if (dev->thread_running) return 1; init_comm_pipe (&dev->requests, 100, 1); uae_sem_init (&dev->sync_sem, 0, 0); uae_start_thread (SANA2NAME, dev_thread, dev, NULL); uae_sem_wait (&dev->sync_sem); return dev->thread_running; } static uae_u32 REGPARAM2 dev_close_2 (TrapContext *context) { uae_u32 request = m68k_areg (regs, 1); struct priv_s2devstruct *pdev = getps2devstruct (request); struct s2devstruct *dev; if (!pdev) { write_log (_T("%s close with unknown request %08X!?\n"), SANA2NAME, request); return 0; } dev = gets2devstruct (pdev->unit); if (!dev) { write_log (_T("%s:%d close with unknown request %08X!?\n"), SANA2NAME, pdev->unit, request); return 0; } if (log_net) write_log (_T("%s:%d close, open=%d req=%08X\n"), SANA2NAME, pdev->unit, dev->opencnt, request); put_long (request + 24, 0); dev->opencnt--; pdev->inuse = 0; if (!dev->opencnt) { dev->exclusive = 0; if (pdev->tempbuf) { m68k_areg (regs, 1) = pdev->tempbuf; m68k_dreg (regs, 0) = pdev->td->mtu + ETH_HEADER_SIZE + 2; CallLib (context, get_long (4), -0xD2); /* FreeMem */ pdev->tempbuf = 0; } uaenet_close (dev->sysdata); xfree (dev->sysdata); dev->sysdata = NULL; write_comm_pipe_u32 (&dev->requests, 0, 1); write_log (_T("%s: opencnt == 0, all instances closed\n"), SANA2NAME); } put_word (m68k_areg (regs, 6) + 32, get_word (m68k_areg (regs, 6) + 32) - 1); return 0; } static uae_u32 REGPARAM2 dev_close (TrapContext *context) { return dev_close_2 (context); } static uae_u32 REGPARAM2 diskdev_close (TrapContext *context) { return dev_close_2 (context); } static int openfail (uaecptr ioreq, int error) { put_long (ioreq + 20, -1); put_byte (ioreq + 31, error); put_long (ioreq + 32, 0); /* io_device */ if (log_net) write_log (_T("-> failed with error %d\n"), error); return (uae_u32)-1; } static uae_u32 REGPARAM2 uaenet_int_handler (TrapContext *ctx); static int irq_init; static int initint (TrapContext *ctx) { uae_u32 tmp1; uaecptr p; if (irq_init) return 1; m68k_dreg (regs, 0) = 26; m68k_dreg (regs, 1) = 65536 + 1; p = CallLib (ctx, get_long (4), -0xC6); /* AllocMem */ if (!p) return 0; tmp1 = here (); calltrap (deftrap2 (uaenet_int_handler, TRAPFLAG_EXTRA_STACK, _T("uaenet_int_handler"))); put_word (p + 8, 0x020a); put_long (p + 10, ROM_netdev_resid); put_long (p + 18, tmp1); m68k_areg (regs, 1) = p; m68k_dreg (regs, 0) = 13; /* EXTER */ dw (0x4a80); /* TST.L D0 */ dw (0x4e75); /* RTS */ CallLib (ctx, get_long (4), -168); /* AddIntServer */ irq_init = 1; return 1; } static uae_u32 REGPARAM2 dev_open_2 (TrapContext *context) { uaecptr ioreq = m68k_areg (regs, 1); uae_u32 unit = m68k_dreg (regs, 0); uae_u32 flags = m68k_dreg (regs, 1); uaecptr buffermgmt; struct s2devstruct *dev = gets2devstruct (unit); struct priv_s2devstruct *pdev = 0; int i; uaecptr tagp, tagpnext; if (!dev) return openfail (ioreq, IOERR_OPENFAIL); if (!initint(context)) return openfail (ioreq, IOERR_SELFTEST); if (log_net) write_log (_T("opening %s:%d opencnt=%d ioreq=%08X\n"), SANA2NAME, unit, dev->opencnt, ioreq); if (get_word (ioreq + 0x12) < IOSTDREQ_SIZE) return openfail (ioreq, IOERR_BADLENGTH); if ((flags & SANA2OPF_PROM) && dev->opencnt > 0) return openfail (ioreq, IOERR_UNITBUSY); for (i = 0; i < MAX_OPEN_DEVICES; i++) { pdev = &pdevst[i]; if (pdev->inuse == 0) break; } if (i == MAX_OPEN_DEVICES) return openfail (ioreq, IOERR_UNITBUSY); put_long (ioreq + 24, pdev - pdevst); pdev->unit = unit; pdev->flags = flags; pdev->inuse = 1; pdev->td = td ? &td[unit] : NULL; pdev->promiscuous = (flags & SANA2OPF_PROM) ? 1 : 0; if (pdev->td == NULL || pdev->td->active == 0) return openfail (ioreq, IOERR_OPENFAIL); if (dev->opencnt == 0) { dev->unit = unit; dev->sysdata = xcalloc (uae_u8, uaenet_getdatalenght ()); if (!uaenet_open (dev->sysdata, pdev->td, dev, uaenet_gotdata, uaenet_getdata, pdev->promiscuous)) { xfree (dev->sysdata); dev->sysdata = NULL; return openfail (ioreq, IOERR_OPENFAIL); } write_log (_T("%s: initializing unit %d\n"), getdevname (), unit); dev->td = pdev->td; dev->adapter = pdev->td ? pdev->td->active : 0; if (dev->adapter) { dev->online = 1; dev->configured = 1; } start_thread (dev); } if (kickstart_version >= 36) { m68k_areg (regs, 0) = get_long (4) + 350; m68k_areg (regs, 1) = timerdevname; CallLib (context, get_long (4), -0x114); /* FindName('timer.device') */ pdev->timerbase = m68k_dreg (regs, 0); } pdev->copyfrombuff = pdev->copytobuff = pdev->packetfilter = 0; pdev->tempbuf = 0; if (get_word (ioreq + 0x12) >= SANA2_IOREQSIZE) { buffermgmt = get_long (ioreq + 32 + 4 + 4 + SANA2_MAX_ADDR_BYTES * 2 + 4 + 4 + 4); tagpnext = buffermgmt; while (tagpnext) { uae_u32 tag = get_long (tagpnext); uae_u32 val = get_long (tagpnext + 4); tagp = tagpnext; tagpnext += 8; switch (tag) { case TAG_DONE: tagpnext = 0; break; case TAG_IGNORE: break; case TAG_MORE: tagpnext = val; break; case TAG_SKIP: tagpnext = tagp + val * 8; break; case S2_CopyToBuff: pdev->copytobuff = val; break; case S2_CopyFromBuff: pdev->copyfrombuff = val; break; case S2_PacketFilter: pdev->packetfilter = val; break; } } if (log_net) write_log (_T("%s:%d CTB=%08x CFB=%08x PF=%08x\n"), getdevname(), unit, pdev->copytobuff, pdev->copyfrombuff, pdev->packetfilter); m68k_dreg (regs, 0) = dev->td->mtu + ETH_HEADER_SIZE + 2; m68k_dreg (regs, 1) = 1; pdev->tempbuf = CallLib (context, get_long (4), -0xC6); /* AllocMem */ if (!pdev->tempbuf) { if (dev->opencnt == 0) { uaenet_close (dev->sysdata); xfree (dev->sysdata); dev->sysdata = NULL; } return openfail (ioreq, S2ERR_BAD_ARGUMENT); } /* buffermanagement */ put_long (ioreq + 32 + 4 + 4 + SANA2_MAX_ADDR_BYTES * 2 + 4 + 4 + 4, pdev->tempbuf); } dev->exclusive = flags & SANA2OPF_MINE; dev->opencnt++; put_word (m68k_areg (regs, 6) + 32, get_word (m68k_areg (regs, 6) + 32) + 1); put_byte (ioreq + 31, 0); put_byte (ioreq + 8, 7); return 0; } static uae_u32 REGPARAM2 dev_open (TrapContext *context) { return dev_open_2 (context); } static uae_u32 REGPARAM2 dev_expunge (TrapContext *context) { return 0; } static uae_u32 REGPARAM2 diskdev_expunge (TrapContext *context) { return 0; } static void freepacket (struct s2packet *s2p) { xfree (s2p->data); xfree (s2p); } static void add_async_packet (struct s2devstruct *dev, struct s2packet *s2p, uaecptr request) { struct asyncreq *ar, *ar2; ar = xcalloc (struct asyncreq, 1); ar->s2p = s2p; if (!dev->s2p) { dev->s2p = ar; } else { ar2 = dev->s2p; while (ar2->next) ar2 = ar2->next; ar2->next = ar; } ar->request = request; } static void rem_async_packet (struct s2devstruct *dev, uaecptr request) { struct asyncreq *ar, *prevar; uae_sem_wait (&async_sem); ar = dev->s2p; prevar = NULL; while (ar) { if (ar->request == request) { if (prevar == NULL) dev->s2p = ar->next; else prevar->next = ar->next; uae_sem_post (&async_sem); freepacket (ar->s2p); xfree (ar); return; } prevar = ar; ar = ar->next; } uae_sem_post (&async_sem); } static struct asyncreq *get_async_request (struct s2devstruct *dev, uaecptr request, int ready) { struct asyncreq *ar; int ret = 0; uae_sem_wait (&async_sem); ar = dev->ar; while (ar) { if (ar->request == request) { if (ready) ar->ready = 1; break; } ar = ar->next; } uae_sem_post (&async_sem); return ar; } static int add_async_request (struct s2devstruct *dev, uaecptr request) { struct asyncreq *ar, *ar2; if (log_net) write_log (_T("%s:%d async request %x added\n"), getdevname(), dev->unit, request); uae_sem_wait (&async_sem); ar = xcalloc (struct asyncreq, 1); ar->request = request; if (!dev->ar) { dev->ar = ar; } else { ar2 = dev->ar; while (ar2->next) ar2 = ar2->next; ar2->next = ar; } uae_sem_post (&async_sem); return 1; } static int release_async_request (struct s2devstruct *dev, uaecptr request) { struct asyncreq *ar, *prevar; uae_sem_wait (&async_sem); ar = dev->ar; prevar = NULL; while (ar) { if (ar->request == request) { if (prevar == NULL) dev->ar = ar->next; else prevar->next = ar->next; uae_sem_post (&async_sem); xfree (ar); if (log_net) write_log (_T("%s:%d async request %x removed\n"), getdevname(), dev->unit, request); return 1; } prevar = ar; ar = ar->next; } uae_sem_post (&async_sem); write_log (_T("%s:%d async request %x not found for removal!\n"), getdevname(), dev->unit, request); return 0; } static void do_abort_async (struct s2devstruct *dev, uaecptr request) { put_byte (request + 30, get_byte (request + 30) | 0x20); put_byte (request + 31, IOERR_ABORTED); put_long (request + 32, S2WERR_GENERIC_ERROR); write_comm_pipe_u32 (&dev->requests, request, 1); } static void abort_async (struct s2devstruct *dev, uaecptr request) { struct asyncreq *ar = get_async_request (dev, request, 1); if (!ar) { write_log (_T("%s:%d: abort async but no request %x found!\n"), getdevname(), dev->unit, request); return; } if (log_net) write_log (_T("%s:%d asyncronous request=%08X aborted\n"), getdevname(), dev->unit, request); do_abort_async (dev, request); } static void signalasync (struct s2devstruct *dev, struct asyncreq *ar, int actual, int err) { uaecptr request = ar->request; int command = get_word (request + 28); if (log_net) write_log (_T("%s:%d CMD=%d async request %x completed\n"), getdevname(), dev->unit, command, request); put_long (request + 32, actual); put_byte (request + 31, err); ar->ready = 1; write_comm_pipe_u32 (&dev->requests, request, 1); } static uae_u32 copytobuff (TrapContext *ctx, uaecptr from, uaecptr to, uae_u32 len, uaecptr func) { m68k_areg (regs, 0) = to; m68k_areg (regs, 1) = from; m68k_dreg (regs, 0) = len; return CallFunc (ctx, func); } static uae_u32 copyfrombuff (TrapContext *ctx, uaecptr from, uaecptr to, uae_u32 len, uaecptr func) { m68k_areg (regs, 0) = to; m68k_areg (regs, 1) = from; m68k_dreg (regs, 0) = len; return CallFunc (ctx, func); } static uae_u32 packetfilter (TrapContext *ctx, uaecptr hook, uaecptr ios2, uaecptr data) { uae_u32 a2, v; a2 = m68k_areg (regs, 2); m68k_areg (regs, 0) = hook; m68k_areg (regs, 2) = ios2; m68k_areg (regs, 1) = data; v = CallFunc (ctx, get_long (hook + 8)); m68k_areg (regs, 2) = a2; return v; } static int isbroadcast (const uae_u8 *d) { if (d[0] == 0xff && d[1] == 0xff && d[2] == 0xff && d[3] == 0xff && d[4] == 0xff && d[5] == 0xff) return 1; return 0; } static int ismulticast (const uae_u8 *d) { if (isbroadcast (d)) return 0; if (d[0] & 1) return 1; return 0; } static uae_u64 addrto64 (const uae_u8 *d) { int i; uae_u64 addr = 0; for (i = 0; i < ADDR_SIZE; i++) { addr <<= 8; addr |= d[i]; } return addr; } static uae_u64 amigaaddrto64 (uaecptr d) { int i; uae_u64 addr = 0; for (i = 0; i < ADDR_SIZE; i++) { addr <<= 8; addr |= get_byte (d + i); } return addr; } static void addmulticastaddresses (struct s2devstruct *dev, uae_u64 start, uae_u64 end) { struct mcast *mc, *mc2; if (!end) end = start; mc = dev->mc; while (mc) { if (start == mc->start && end == mc->end) { mc->cnt++; return; } mc = mc->next; } mc = xcalloc (struct mcast, 1); mc->start = start; mc->end = end; mc->cnt = 1; if (!dev->mc) { dev->mc = mc; } else { mc2 = dev->mc; while (mc2->next) mc2 = mc2->next; mc2->next = mc; } } static int delmulticastaddresses (struct s2devstruct *dev, uae_u64 start, uae_u64 end) { struct mcast *mc, *prevmc; if (!end) end = start; mc = dev->mc; prevmc = NULL; while (mc) { if (start == mc->start && end == mc->end) { mc->cnt--; if (mc->cnt > 0) return 1; if (prevmc == NULL) dev->mc = mc->next; else prevmc->next = mc->next; xfree (mc); return 1; } prevmc = mc; mc = mc->next; } return 0; } static struct s2packet *createreadpacket (struct s2devstruct *dev, const uae_u8 *d, int len) { struct s2packet *s2p = xcalloc (struct s2packet, 1); s2p->data = xmalloc (uae_u8, dev->td->mtu + ETH_HEADER_SIZE + 2); memcpy (s2p->data, d, len); s2p->len = len; return s2p; } static int handleread (TrapContext *ctx, struct priv_s2devstruct *pdev, uaecptr request, uae_u8 *d, int len, int cmd) { uae_u8 flags = get_byte (request + 30); uaecptr data = get_long (request + 32 + 4 + 4 + SANA2_MAX_ADDR_BYTES * 2 + 4); uaecptr srcaddr = request + 32 + 4 + 4; uaecptr dstaddr = request + 32 + 4 + 4 + SANA2_MAX_ADDR_BYTES; uae_u16 type = (d[2 * ADDR_SIZE] << 8) | d[2 * ADDR_SIZE + 1]; uae_u32 v = 0; uaecptr data2; memcpyha_safe (pdev->tempbuf, d, len); memcpyha_safe (dstaddr, d, ADDR_SIZE); memcpyha_safe (srcaddr, d + ADDR_SIZE, ADDR_SIZE); put_long (request + 32 + 4, type); if (pdev->tracks[type]) { pdev->bytesreceived += len; pdev->packetsreceived++; } flags &= ~(SANA2IOF_BCAST | SANA2IOF_MCAST); if (isbroadcast (d)) flags |= SANA2IOF_BCAST; else if (ismulticast (d)) flags |= SANA2IOF_MCAST; put_byte (request + 30, flags); data2 = pdev->tempbuf; if (!(flags & SANA2IOF_RAW)) { len -= ETH_HEADER_SIZE; data2 += ETH_HEADER_SIZE; } put_long (request + 32 + 4 + 4 + SANA2_MAX_ADDR_BYTES * 2, len); if (pdev->packetfilter && cmd == CMD_READ && packetfilter (ctx, pdev->packetfilter, request, data2) == 0) return 0; if (!copytobuff (ctx, data2, data, len, pdev->copytobuff)) { put_long (request + 32, S2WERR_BUFF_ERROR); put_byte (request + 31, S2ERR_NO_RESOURCES); } return 1; } void uaenet_gotdata (struct s2devstruct *dev, const uae_u8 *d, int len) { uae_u16 type; struct mcast *mc; struct s2packet *s2p; if (!dev->online) return; /* drop if bogus size */ if (len < 20 || len >= dev->td->mtu + ETH_HEADER_SIZE + 2) return; /* drop if dst == broadcast and src == me */ if (isbroadcast (d) && !memcmp (d + 6, dev->td->mac, ADDR_SIZE)) return; /* drop if not promiscuous and dst != broadcast and dst != me */ if (!dev->promiscuous && !isbroadcast (d) && memcmp (d, dev->td->mac, ADDR_SIZE)) return; /* drop if multicast with unknown address */ if (ismulticast (d)) { uae_u64 mac64 = addrto64 (d); /* multicast */ mc = dev->mc; while (mc) { if (mac64 >= mc->start && mac64 <= mc->end) break; mc = mc->next; } if (!mc) return; } type = (d[12] << 8) | d[13]; s2p = createreadpacket (dev, d, len); if (log_net) write_log (_T("<-DST:%02X.%02X.%02X.%02X.%02X.%02X SRC:%02X.%02X.%02X.%02X.%02X.%02X E=%04X L=%d P=%p\n"), d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7], d[8], d[9], d[10], d[11], type, len, s2p); uae_sem_wait (&async_sem); if (!dev->readqueue) { dev->readqueue = s2p; } else { struct s2packet *s2p2 = dev->readqueue; while (s2p2->next) s2p2 = s2p2->next; s2p2->next = s2p; } uaenet_int_requested = 1; uae_sem_post (&async_sem); } static struct s2packet *createwritepacket (TrapContext *ctx, uaecptr request) { uae_u8 flags = get_byte (request + 30); uae_u32 datalength = get_long (request + 32 + 4 + 4 + SANA2_MAX_ADDR_BYTES * 2); uaecptr data = get_long (request + 32 + 4 + 4 + SANA2_MAX_ADDR_BYTES * 2 + 4); uaecptr srcaddr = request + 32 + 4 + 4; uaecptr dstaddr = request + 32 + 4 + 4 + SANA2_MAX_ADDR_BYTES; uae_u16 packettype = get_long (request + 32 + 4); struct priv_s2devstruct *pdev = getps2devstruct (request); struct s2packet *s2p; if (!pdev) return NULL; if (!copyfrombuff (ctx, data, pdev->tempbuf, datalength, pdev->copyfrombuff)) return NULL; s2p = xcalloc (struct s2packet, 1); s2p->data = xmalloc (uae_u8, pdev->td->mtu + ETH_HEADER_SIZE + 2); if (flags & SANA2IOF_RAW) { memcpyah_safe (s2p->data, pdev->tempbuf, datalength); packettype = (s2p->data[2 * ADDR_SIZE + 0] << 8) | (s2p->data[2 * ADDR_SIZE + 1]); s2p->len = datalength; } else { memcpyah_safe (s2p->data + ETH_HEADER_SIZE, pdev->tempbuf, datalength); memcpy (s2p->data + ADDR_SIZE, pdev->td->mac, ADDR_SIZE); memcpyah_safe (s2p->data, dstaddr, ADDR_SIZE); s2p->data[2 * ADDR_SIZE + 0] = packettype >> 8; s2p->data[2 * ADDR_SIZE + 1] = packettype; s2p->len = datalength + ETH_HEADER_SIZE; } if (pdev->tracks[packettype]) { pdev->packetssent++; pdev->bytessent += datalength; } return s2p; } static int uaenet_getdata (struct s2devstruct *dev, uae_u8 *d, int *len) { int gotit; struct asyncreq *ar; uae_sem_wait (&async_sem); ar = dev->ar; gotit = 0; while (ar && !gotit) { if (!ar->ready) { uaecptr request = ar->request; int command = get_word (request + 28); uae_u32 packettype = get_long (request + 32 + 4); if (command == CMD_WRITE || command == S2_BROADCAST || command == S2_MULTICAST) { struct priv_s2devstruct *pdev = getps2devstruct (request); struct asyncreq *ars2p = dev->s2p; while (ars2p) { if (ars2p->request == request) { *len = ars2p->s2p->len; memcpy (d, ars2p->s2p->data, *len); if (log_net) write_log (_T("->DST:%02X.%02X.%02X.%02X.%02X.%02X SRC:%02X.%02X.%02X.%02X.%02X.%02X E=%04X S=%d\n"), d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7], d[8], d[9], d[10], d[11], packettype, *len); gotit = 1; dev->packetssent++; signalasync (dev, ar, *len, 0); break; } ars2p = ars2p->next; } } } ar = ar->next; } uae_sem_post (&async_sem); return gotit; } void checkevents (struct s2devstruct *dev, int mask, int sem) { struct asyncreq *ar; if (sem) uae_sem_wait (&async_sem); ar = dev->ar; while (ar) { if (!ar->ready) { uaecptr request = ar->request; int command = get_word (request + 28); uae_u32 cmask = get_long (request + 32); if (command == S2_ONEVENT && (mask & cmask)) signalasync (dev, ar, 0, 0); } ar = ar->next; } if (sem) uae_sem_post (&async_sem); } static int checksize (uaecptr request, struct s2devstruct *dev) { uae_u32 datalength = get_long (request + 32 + 4 + 4 + SANA2_MAX_ADDR_BYTES * 2); if (datalength > dev->td->mtu) return 0; return 1; } static void flush (struct priv_s2devstruct *pdev) { struct asyncreq *ar; struct s2devstruct *dev; dev = gets2devstruct (pdev->unit); ar = dev->ar; while (ar) { if (!ar->ready && getps2devstruct (ar->request) == pdev) { ar->ready = 1; do_abort_async (dev, ar->request); } ar = ar->next; } } static int dev_do_io_2 (struct s2devstruct *dev, uaecptr request, int quick) { uae_u8 flags = get_byte (request + 30); uae_u32 command = get_word (request + 28); uae_u32 packettype = get_long (request + 32 + 4); uaecptr data = get_long (request + 32 + 4 + 4 + SANA2_MAX_ADDR_BYTES * 2 + 4); uae_u32 datalength = get_long (request + 32 + 4 + 4 + SANA2_MAX_ADDR_BYTES * 2); uaecptr srcaddr = request + 32 + 4 + 4; uaecptr dstaddr = request + 32 + 4 + 4 + SANA2_MAX_ADDR_BYTES; uaecptr statdata = get_long (request + 32 + 4 + 4 + SANA2_MAX_ADDR_BYTES * 2 + 4 + 4); uaecptr buffermgmt = get_long (request + 32 + 4 + 4 + SANA2_MAX_ADDR_BYTES * 2 + 4 + 4 + 4); uae_u32 io_error = 0; uae_u32 wire_error = 0; int i; int async = 0; struct priv_s2devstruct *pdev = getps2devstruct (request); if (log_net) write_log (_T("S2: C=%02d T=%04X S=%02X%02X%02X%02X%02X%02X D=%02X%02X%02X%02X%02X%02X L=%d D=%08X SD=%08X BM=%08X\n"), command, packettype, get_byte (srcaddr + 0), get_byte (srcaddr + 1), get_byte (srcaddr + 2), get_byte (srcaddr + 3), get_byte (srcaddr + 4), get_byte (srcaddr + 5), get_byte (dstaddr + 0), get_byte (dstaddr + 1), get_byte (dstaddr + 2), get_byte (dstaddr + 3), get_byte (dstaddr + 4), get_byte (dstaddr + 5), datalength, data, statdata, buffermgmt); if (command == CMD_READ || command == S2_READORPHAN || command == CMD_WRITE || command == S2_BROADCAST || command == S2_MULTICAST) { if (!pdev->copyfrombuff || !pdev->copytobuff) { io_error = S2ERR_BAD_ARGUMENT; wire_error = S2WERR_BUFF_ERROR; goto end; } } switch (command) { case CMD_READ: if (!dev->online) goto offline; async = 1; break; case S2_READORPHAN: if (!dev->online) goto offline; async = 1; break; case S2_BROADCAST: case CMD_WRITE: if (!dev->online) goto offline; if (!checksize (request, dev)) goto toobig; async = 1; break; case S2_MULTICAST: if (!dev->online) goto offline; if ((get_byte (dstaddr + 0) & 1) == 0) { io_error = S2ERR_BAD_ADDRESS; wire_error = S2WERR_BAD_MULTICAST; goto end; } if (!checksize (request, dev)) goto toobig; async = 1; break; case CMD_FLUSH: dev->flush_timeout_cnt = 0; dev->flush_timeout = FLUSH_TIMEOUT; if (log_net) write_log (_T("CMD_FLUSH started %08x\n"), request); uae_sem_wait (&async_sem); flush (pdev); uae_sem_post (&async_sem); async = 1; uaenet_vsync_requested++; break; case S2_ADDMULTICASTADDRESS: addmulticastaddresses (dev, amigaaddrto64 (srcaddr), 0); break; case S2_DELMULTICASTADDRESS: if (!delmulticastaddresses (dev, amigaaddrto64 (srcaddr), 0)) { io_error = S2ERR_BAD_STATE; wire_error = S2WERR_BAD_MULTICAST; } break; case S2_ADDMULTICASTADDRESSES: addmulticastaddresses (dev, amigaaddrto64 (srcaddr), amigaaddrto64 (dstaddr)); break; case S2_DELMULTICASTADDRESSES: if (!delmulticastaddresses (dev, amigaaddrto64 (srcaddr), amigaaddrto64 (dstaddr))) { io_error = S2ERR_BAD_STATE; wire_error = S2WERR_BAD_MULTICAST; } break; case S2_DEVICEQUERY: { int size = get_long (statdata); if (size > 30) size = 30; put_long (statdata + 4, size); if (size >= 12) put_long (statdata + 8, 0); if (size >= 16) put_long (statdata + 12, 0); if (size >= 18) put_word (statdata + 16, ADDR_SIZE * 8); if (size >= 22) put_long (statdata + 18, dev->td->mtu); if (size >= 26) put_long (statdata + 22, 10000000); if (size >= 30) put_long (statdata + 26, S2WireType_Ethernet); } break; case S2_GETTYPESTATS: if (pdev->trackcnt) { put_long (statdata + 0, pdev->packetssent); put_long (statdata + 4, pdev->packetsreceived); put_long (statdata + 8, pdev->bytessent); put_long (statdata + 12, pdev->bytesreceived); put_long (statdata + 16, pdev->packetsdropped); } else { io_error = S2ERR_BAD_STATE; wire_error = S2WERR_NOT_TRACKED; } break; case S2_GETGLOBALSTATS: put_long (statdata + 0, dev->packetsreceived); put_long (statdata + 4, dev->packetssent); put_long (statdata + 8, dev->baddata); put_long (statdata + 12, dev->overruns); put_long (statdata + 16, 0); put_long (statdata + 20, dev->unknowntypesreceived); put_long (statdata + 24, dev->reconfigurations); put_long (statdata + 28, dev->online_secs); put_long (statdata + 32, dev->online_micro); break; case S2_GETSPECIALSTATS: put_long (statdata + 1, 0); break; case S2_GETSTATIONADDRESS: for (i = 0; i < ADDR_SIZE; i++) { put_byte (srcaddr + i, dev->td->mac[i]); put_byte (dstaddr + i, dev->td->mac[i]); } break; case S2_CONFIGINTERFACE: if (dev->configured) { io_error = S2ERR_BAD_STATE; wire_error = S2WERR_IS_CONFIGURED; } else { dev->configured = TRUE; } break; case S2_ONLINE: if (!dev->configured) { io_error = S2ERR_BAD_STATE; wire_error = S2WERR_NOT_CONFIGURED; } if (!dev->adapter) { io_error = S2ERR_OUTOFSERVICE; wire_error = S2WERR_RCVREL_HDW_ERR; } if (!io_error) { uaenet_vsync_requested++; async = 1; } break; case S2_TRACKTYPE: if (packettype <= 65535) { if (pdev->tracks[packettype]) { io_error = S2ERR_BAD_STATE; wire_error = S2WERR_ALREADY_TRACKED; } else { pdev->tracks[packettype] = 1; pdev->trackcnt++; } } else { io_error = S2ERR_BAD_ARGUMENT; } break; case S2_UNTRACKTYPE: if (packettype <= 65535) { if (!pdev->tracks[packettype]) { io_error = S2ERR_BAD_STATE; wire_error = S2WERR_NOT_TRACKED; } else { pdev->tracks[packettype] = 0; pdev->trackcnt--; } } else { io_error = S2ERR_BAD_ARGUMENT; } break; case S2_OFFLINE: if (dev->online) { dev->online = 0; checkevents (dev, S2EVENT_OFFLINE, 1); } break; case S2_ONEVENT: { uae_u32 events; uae_u32 wanted_events = get_long (request + 32); if (wanted_events & ~KNOWN_EVENTS) { io_error = S2ERR_NOT_SUPPORTED; events = S2WERR_BAD_EVENT; } else { if (dev->online) events = S2EVENT_ONLINE; else events = S2EVENT_OFFLINE; events &= wanted_events; if (events) { wire_error = events; } else { async = 1; } } } break; default: io_error = IOERR_NOCMD; break; offline: io_error = S2ERR_OUTOFSERVICE; wire_error = S2WERR_UNIT_OFFLINE; break; toobig: io_error = S2ERR_MTU_EXCEEDED; wire_error = S2WERR_GENERIC_ERROR; break; } end: if (log_net && (io_error || wire_error)) write_log (_T("-> %d (%d)\n"), io_error, wire_error); put_long (request + 32, wire_error); put_byte (request + 31, io_error); return async; } static int dev_do_io (struct s2devstruct *dev, uaecptr request, int quick) { uae_u32 command = get_word (request + 28); struct priv_s2devstruct *pdev = getps2devstruct (request); uaecptr data = get_long (request + 32 + 4 + 4 + SANA2_MAX_ADDR_BYTES * 2 + 4); put_byte (request + 31, 0); if (!pdev) { write_log (_T("%s unknown iorequest %08x\n"), getdevname (), request); return 0; } if (command == NSCMD_DEVICEQUERY) { uae_u32 data = get_long (request + 40); /* io_data */ put_long (data + 0, 0); put_long (data + 4, 16); /* size */ put_word (data + 8, 7); /* NSDEVTYPE_SANA2 */ put_word (data + 10, 0); put_long (data + 12, nscmd_cmd); put_long (request + 32, 16); /* io_actual */ return 0; } else if (get_word (request + 0x12) < SANA2_IOREQSIZE) { put_byte (request + 31, IOERR_BADLENGTH); return 0; } return dev_do_io_2 (dev, request, quick); } static int dev_can_quick (uae_u32 command) { switch (command) { case NSCMD_DEVICEQUERY: case S2_DEVICEQUERY: case S2_CONFIGINTERFACE: case S2_GETSTATIONADDRESS: case S2_TRACKTYPE: case S2_UNTRACKTYPE: return 1; } return 0; } static int dev_canquick (struct s2devstruct *dev, uaecptr request) { uae_u32 command = get_word (request + 28); return dev_can_quick (command); } static uae_u32 REGPARAM2 dev_beginio (TrapContext *context) { uae_u32 request = m68k_areg (regs, 1); uae_u8 flags = get_byte (request + 30); int command = get_word (request + 28); struct priv_s2devstruct *pdev = getps2devstruct (request); struct s2devstruct *dev; put_byte (request + 8, NT_MESSAGE); if (!pdev) { write_log (_T("%s unknown iorequest (1) %08x\n"), getdevname (), request); put_byte (request + 31, 32); return get_byte (request + 31); } dev = gets2devstruct (pdev->unit); if (!dev) { write_log (_T("%s unknown iorequest (2) %08x\n"), getdevname (), request); put_byte (request + 31, 32); return get_byte (request + 31); } put_byte (request + 31, 0); if ((flags & 1) && dev_canquick (dev, request)) { if (dev_do_io (dev, request, 1)) write_log (_T("%s: command %d bug with IO_QUICK\n"), SANA2NAME, command); return get_byte (request + 31); } else { if (command == CMD_WRITE || command == S2_BROADCAST || command == S2_MULTICAST) { struct s2packet *s2p; if (!pdev->copyfrombuff || !pdev->copytobuff) { put_long (request + 32, S2ERR_BAD_ARGUMENT); put_byte (request + 31, S2WERR_BUFF_ERROR); } else { if (command == S2_BROADCAST) { uaecptr dstaddr = request + 32 + 4 + 4 + SANA2_MAX_ADDR_BYTES; put_byte (dstaddr + 0, 0xff); put_byte (dstaddr + 1, 0xff); put_byte (dstaddr + 2, 0xff); put_byte (dstaddr + 3, 0xff); put_byte (dstaddr + 4, 0xff); put_byte (dstaddr + 5, 0xff); } s2p = createwritepacket (context, request); if (s2p) { uae_sem_wait (&async_sem); add_async_packet (dev, s2p, request); uae_sem_post (&async_sem); } if (!s2p) { put_long (request + 32, S2WERR_BUFF_ERROR); put_byte (request + 31, S2ERR_NO_RESOURCES); } } } put_byte (request + 30, get_byte (request + 30) & ~1); write_comm_pipe_u32 (&dev->requests, request, 1); return 0; } } static void *dev_thread (void *devs) { struct s2devstruct *dev = (struct s2devstruct*)devs; uae_set_thread_priority (NULL, 1); dev->thread_running = 1; uae_sem_post (&dev->sync_sem); for (;;) { uaecptr request = (uaecptr)read_comm_pipe_u32_blocking (&dev->requests); uae_sem_wait (&change_sem); if (!request) { dev->thread_running = 0; uae_sem_post (&dev->sync_sem); uae_sem_post (&change_sem); write_log (_T("%s: dev_thread killed\n"), getdevname ()); return 0; } else if (get_async_request (dev, request, 1)) { uae_ReplyMsg (request); release_async_request (dev, request); rem_async_packet (dev, request); } else if (dev_do_io (dev, request, 0) == 0) { uae_ReplyMsg (request); rem_async_packet (dev, request); } else { add_async_request (dev, request); uaenet_trigger (dev->sysdata); } uae_sem_post (&change_sem); } return 0; } static uae_u32 REGPARAM2 dev_init_2 (TrapContext *context) { uae_u32 base = m68k_dreg (regs,0); if (log_net) write_log (_T("%s init\n"), SANA2NAME); return base; } static uae_u32 REGPARAM2 dev_init (TrapContext *context) { return dev_init_2 (context); } static uae_u32 REGPARAM2 dev_abortio (TrapContext *context) { uae_u32 request = m68k_areg (regs, 1); struct priv_s2devstruct *pdev = getps2devstruct (request); struct s2devstruct *dev; if (!pdev) { write_log (_T("%s abortio but no request %08x found!\n"), getdevname(), request); put_byte (request + 31, 32); return get_byte (request + 31); } dev = gets2devstruct (pdev->unit); if (!dev) { write_log (_T("%s (%d) abortio but no request %08x found!\n"), getdevname(), pdev->unit, request); put_byte (request + 31, 32); return get_byte (request + 31); } if (log_net) write_log (_T("%s:%d abortio %08x\n"), getdevname(), dev->unit, request); abort_async (dev, request); return 0; } static uae_u32 REGPARAM2 uaenet_int_handler (TrapContext *ctx) { int i, j; int gotit; struct asyncreq *ar; if (uae_sem_trywait (&async_sem)) { uaenet_int_requested = 0; uaenet_int_late = 1; return 0; } for (i = 0; i < MAX_OPEN_DEVICES; i++) pdevst[i].tmp = 0; for (i = 0; i < MAX_TOTAL_NET_DEVICES; i++) { struct s2devstruct *dev = &devst[i]; struct s2packet *p; if (dev->online) { while (dev->readqueue) { uae_u16 type; p = dev->readqueue; type = (p->data[2 * ADDR_SIZE] << 8) | p->data[2 * ADDR_SIZE + 1]; ar = dev->ar; gotit = 0; while (ar) { if (!ar->ready) { uaecptr request = ar->request; int command = get_word (request + 28); uae_u32 packettype = get_long (request + 32 + 4); if (command == CMD_READ && (packettype == type || (packettype <= 1500 && type <= 1500))) { struct priv_s2devstruct *pdev = getps2devstruct (request); if (pdev && pdev->tmp == 0) { if (handleread (ctx, pdev, request, p->data, p->len, command)) { if (log_net) write_log (_T("-> %p Accepted, CMD_READ, REQ=%08X LEN=%d\n"), p, request, p->len); write_comm_pipe_u32 (&dev->requests, request, 1); dev->packetsreceived++; gotit = 1; pdev->tmp = 1; } else { if (log_net) write_log (_T("-> %p PacketFilter() rejected, CMD_READ, REQ=%08X LEN=%d\n"), p, request, p->len); pdev->tmp = -1; } } } } ar = ar->next; } ar = dev->ar; while (ar) { if (!ar->ready) { uaecptr request = ar->request; int command = get_word (request + 28); if (command == S2_READORPHAN) { struct priv_s2devstruct *pdev = getps2devstruct (request); if (pdev && pdev->tmp <= 0) { if (log_net) write_log (_T("-> %p Accepted, S2_READORPHAN, REQ=%08X LEN=%d\n"), p, request, p->len); handleread (ctx, pdev, request, p->data, p->len, command); write_comm_pipe_u32 (&dev->requests, request, 1); dev->packetsreceived++; dev->unknowntypesreceived++; gotit = 1; pdev->tmp = 1; } } } ar = ar->next; } if (!gotit) { if (log_net) write_log (_T("-> %p packet dropped, LEN=%d\n"), p, p->len); for (j = 0; j < MAX_OPEN_DEVICES; j++) { if (pdevst[j].unit == dev->unit) { if (pdevst[j].tracks[type]) pdevst[j].packetsdropped++; } } } dev->readqueue = dev->readqueue->next; freepacket (p); } } else { while (dev->readqueue) { p = dev->readqueue; dev->readqueue = dev->readqueue->next; freepacket (p); } } ar = dev->ar; while (ar) { if (!ar->ready) { uaecptr request = ar->request; int command = get_word (request + 28); if (command == S2_ONLINE) { struct priv_s2devstruct *pdev = getps2devstruct (request); dev->packetsreceived = 0; dev->packetssent = 0; dev->baddata = 0; dev->overruns = 0; dev->unknowntypesreceived = 0; dev->reconfigurations = 0; if (pdev && pdev->timerbase) { m68k_areg (regs, 0) = pdev->tempbuf; CallLib (ctx, pdev->timerbase, -0x42); /* GetSysTime() */ } else { put_long (pdev->tempbuf + 0, 0); put_long (pdev->tempbuf + 4, 0); } dev->online_secs = get_long (pdev->tempbuf + 0); dev->online_micro = get_long (pdev->tempbuf + 4); checkevents (dev, S2EVENT_ONLINE, 0); dev->online = 1; write_comm_pipe_u32 (&dev->requests, request, 1); uaenet_vsync_requested--; } else if (command == CMD_FLUSH) { /* do not reply CMD_FLUSH until all other requests are gone */ if (dev->ar->next == NULL) { if (log_net) write_log (_T("CMD_FLUSH replied %08x\n"), request); write_comm_pipe_u32 (&dev->requests, request, 1); uaenet_vsync_requested--; } else { struct priv_s2devstruct *pdev = getps2devstruct (request); if (pdev) { dev->flush_timeout--; if (dev->flush_timeout <= 0) { dev->flush_timeout = FLUSH_TIMEOUT; if (dev->flush_timeout_cnt > 1) write_log (_T("WARNING: %s:%d CMD_FLUSH possibly frozen..\n"), getdevname(), pdev->unit); dev->flush_timeout_cnt++; flush (pdev); } } } } } ar = ar->next; } } if (uaenet_int_late) uaenet_int_requested = 1; else uaenet_int_requested = 0; uaenet_int_late = 0; uae_sem_post (&async_sem); return 0; } static void dev_reset (void) { int i; struct s2devstruct *dev; int unitnum = 0; write_log (_T("%s reset\n"), getdevname()); for (i = 0; i < MAX_TOTAL_NET_DEVICES; i++) { dev = &devst[i]; if (dev->opencnt) { struct asyncreq *ar = dev->ar; while (ar) { if (!ar->ready) { dev->ar->ready = 1; do_abort_async (dev, ar->request); } ar = ar->next; } write_comm_pipe_u32 (&dev->requests, 0, 1); uae_sem_wait (&dev->sync_sem); } while (dev->mc) delmulticastaddresses (dev, dev->mc->start, dev->mc->end); memset (dev, 0, sizeof (struct s2devstruct)); } for (i = 0; i < MAX_OPEN_DEVICES; i++) memset (&pdevst[i], 0, sizeof (struct priv_s2devstruct)); uaenet_vsync_requested = 0; uaenet_int_requested = 0; irq_init = 0; } uaecptr netdev_startup (uaecptr resaddr) { if (!currprefs.sana2) return resaddr; if (log_net) write_log (_T("netdev_startup(0x%x)\n"), resaddr); /* Build a struct Resident. This will set up and initialize * the uaescsi.device */ put_word (resaddr + 0x0, 0x4AFC); put_long (resaddr + 0x2, resaddr); put_long (resaddr + 0x6, resaddr + 0x1A); /* Continue scan here */ put_word (resaddr + 0xA, 0x8101); /* RTF_AUTOINIT|RTF_COLDSTART; Version 1 */ put_word (resaddr + 0xC, 0x0305); /* NT_DEVICE; pri 05 */ put_long (resaddr + 0xE, ROM_netdev_resname); put_long (resaddr + 0x12, ROM_netdev_resid); put_long (resaddr + 0x16, ROM_netdev_init); /* calls scsidev_init */ resaddr += 0x1A; return resaddr; } void netdev_install (void) { uae_u32 functable, datatable; uae_u32 initcode, openfunc, closefunc, expungefunc; uae_u32 beginiofunc, abortiofunc; if (!currprefs.sana2) return; if (log_net) write_log (_T("netdev_install(): 0x%x\n"), here ()); uaenet_enumerate_free (td); uaenet_enumerate (&td, NULL); ROM_netdev_resname = ds (getdevname()); ROM_netdev_resid = ds (_T("UAE net.device 0.2")); timerdevname = ds (_T("timer.device")); /* initcode */ initcode = here (); calltrap (deftrap2 (dev_init, TRAPFLAG_EXTRA_STACK, _T("uaenet.init"))); dw (RTS); /* Open */ openfunc = here (); calltrap (deftrap2 (dev_open, TRAPFLAG_EXTRA_STACK, _T("uaenet.open"))); dw (RTS); /* Close */ closefunc = here (); calltrap (deftrap2 (dev_close, TRAPFLAG_EXTRA_STACK, _T("uaenet.close"))); dw (RTS); /* Expunge */ expungefunc = here (); calltrap (deftrap2 (dev_expunge, TRAPFLAG_EXTRA_STACK, _T("uaenet.expunge"))); dw (RTS); /* BeginIO */ beginiofunc = here (); calltrap (deftrap2 (dev_beginio, TRAPFLAG_EXTRA_STACK, _T("uaenet.beginio"))); dw (RTS); /* AbortIO */ abortiofunc = here (); calltrap (deftrap2 (dev_abortio, TRAPFLAG_EXTRA_STACK, _T("uaenet.abortio"))); dw (RTS); /* FuncTable */ functable = here (); dl (openfunc); /* Open */ dl (closefunc); /* Close */ dl (expungefunc); /* Expunge */ dl (EXPANSION_nullfunc); /* Null */ dl (beginiofunc); /* BeginIO */ dl (abortiofunc); /* AbortIO */ dl (0xFFFFFFFFul); /* end of table */ /* DataTable */ datatable = here (); dw (0xE000); /* INITBYTE */ dw (0x0008); /* LN_TYPE */ dw (0x0300); /* NT_DEVICE */ dw (0xC000); /* INITLONG */ dw (0x000A); /* LN_NAME */ dl (ROM_netdev_resname); dw (0xE000); /* INITBYTE */ dw (0x000E); /* LIB_FLAGS */ dw (0x0600); /* LIBF_SUMUSED | LIBF_CHANGED */ dw (0xD000); /* INITWORD */ dw (0x0014); /* LIB_VERSION */ dw (0x0004); /* 0.4 */ dw (0xD000); /* INITWORD */ dw (0x0016); /* LIB_REVISION */ dw (0x0000); /* end of table already ??? */ dw (0xC000); /* INITLONG */ dw (0x0018); /* LIB_IDSTRING */ dl (ROM_netdev_resid); dw (0x0000); /* end of table */ ROM_netdev_init = here (); dl (0x00000100); /* size of device base */ dl (functable); dl (datatable); dl (initcode); nscmd_cmd = here (); dw (CMD_READ); dw (CMD_WRITE); dw (CMD_FLUSH); dw (S2_DEVICEQUERY); dw (S2_GETSTATIONADDRESS); dw (S2_CONFIGINTERFACE); dw (S2_ADDMULTICASTADDRESS); dw (S2_DELMULTICASTADDRESS); dw (S2_MULTICAST); dw (S2_BROADCAST); dw (S2_TRACKTYPE); dw (S2_UNTRACKTYPE); dw (S2_GETTYPESTATS); dw (S2_GETSPECIALSTATS); dw (S2_GETGLOBALSTATS); dw (S2_ONEVENT); dw (S2_READORPHAN); dw (S2_ONLINE); dw (S2_OFFLINE); dw (S2_ADDMULTICASTADDRESSES); dw (S2_DELMULTICASTADDRESSES); dw (NSCMD_DEVICEQUERY); dw (0); } void netdev_start_threads (void) { if (!currprefs.sana2) return; if (log_net) write_log (_T("netdev_start_threads()\n")); uae_sem_init (&change_sem, 0, 1); uae_sem_init (&async_sem, 0, 1); } void netdev_reset (void) { if (!currprefs.sana2) return; dev_reset (); } fs-uae-2.2.3+dfsg/src/enforcer.cpp0000644000175000017500000004240712162366655017162 0ustar glaubitzglaubitz/* * UAE - The Un*x Amiga Emulator * * Enforcer Like Support * * Copyright 2000-2003 Bernd Roesch and Sebastian Bauer */ #include #include "sysconfig.h" #include "sysdeps.h" #include "options.h" #include "uae/memory.h" #include "custom.h" #include "newcpu.h" #include "uae.h" #include "xwin.h" #include "enforcer.h" #if defined(AHI) #if defined(JIT) #define special_mem_r special_mem |= S_READ #define special_mem_w special_mem |= S_WRITE #define NMEM_OFFSET NATMEM_OFFSET #else #define special_mem_r #define special_mem_w #define NMEM_OFFSET 0 #endif /* Configurable options */ #define ENFORCESIZE 1024 #define STACKLINES 5 #define BACKTRACELONGS 500 #define INSTRUCTIONLINES 17 #define ISEXEC(addr) ((addr) >= 4 && (addr) <= 7) #define ISILLEGAL_LONG(addr) ((addr) < 4 || ((addr) > 4 && (addr) < ENFORCESIZE)) #define ISILLEGAL_WORD(addr) ((addr) < ENFORCESIZE) #define ISILLEGAL_BYTE(addr) ((addr) < ENFORCESIZE) extern uae_u8 *natmem_offset; static int enforcer_installed = 0; int enforcermode = 0; static int enforcer_hit = 0; /* set to 1 if displaying the hit */ #define ENFORCER_BUF_SIZE 8192 static TCHAR enforcer_buf[ENFORCER_BUF_SIZE]; uae_u32 (REGPARAM3 *saved_chipmem_lget) (uaecptr addr); uae_u32 (REGPARAM3 *saved_chipmem_wget) (uaecptr addr); uae_u32 (REGPARAM3 *saved_chipmem_bget) (uaecptr addr); void (REGPARAM3 *saved_chipmem_lput) (uaecptr addr, uae_u32 l); void (REGPARAM3 *saved_chipmem_wput) (uaecptr addr, uae_u32 w); void (REGPARAM3 *saved_chipmem_bput) (uaecptr addr, uae_u32 b); int (REGPARAM3 *saved_chipmem_check) (uaecptr addr, uae_u32 size); uae_u8 *(REGPARAM3 *saved_chipmem_xlate) (uaecptr addr); uae_u32 (REGPARAM3 *saved_dummy_lget) (uaecptr addr); uae_u32 (REGPARAM3 *saved_dummy_wget) (uaecptr addr); uae_u32 (REGPARAM3 *saved_dummy_bget) (uaecptr addr); void (REGPARAM3 *saved_dummy_lput) (uaecptr addr, uae_u32 l); void (REGPARAM3 *saved_dummy_wput) (uaecptr addr, uae_u32 w); void (REGPARAM3 *saved_dummy_bput) (uaecptr addr, uae_u32 b); int (REGPARAM3 *saved_dummy_check) (uaecptr addr, uae_u32 size); /************************************************************* Returns the first node entry of an exec list or 0 if empty *************************************************************/ static uae_u32 amiga_list_first (uae_u32 list) { uae_u32 node = get_long (list); /* lh_Head */ if (!node) return 0; if (!get_long (node)) return 0; /* ln_Succ */ return node; } /************************************************************* Returns the next node of an exec node or 0 if it was the last element *************************************************************/ static uae_u32 amiga_node_next (uae_u32 node) { uae_u32 next = get_long (node); /* ln_Succ */ if (!next) return 0; if (!get_long (next)) return 0; /* ln_Succ */ return next; } /************************************************************* Converts an amiga address to a native one or NULL if this is not possible, Size specified the number of bytes you want to access *************************************************************/ static uae_u8 *amiga2native (uae_u32 aptr, int size) { addrbank bank = get_mem_bank (aptr); /* Check if the address can be translated to native */ if (bank.check (aptr, size)) { return bank.xlateaddr (aptr); } return NULL; } /************************************************************* Writes the Hunk and Offset of the given Address into buf *************************************************************/ static int enforcer_decode_hunk_and_offset (TCHAR *buf, uae_u32 pc) { uae_u32 sysbase = get_long (4); uae_u32 semaphore_list = sysbase + 532; /* First step is searching for the SegTracker semaphore */ uae_u32 node = amiga_list_first (semaphore_list); while (node) { uae_u32 string = get_long (node + 10); /* ln_Name */ uae_u8 *native_string = amiga2native (string, 100); if (native_string) { if (!strcmp ((char*)native_string, "SegTracker")) break; } node = amiga_node_next (node); } if (node) { /* We have found the segtracker semaphore. Soon after the * public documented semaphore structure Segtracker holds * an own list of all segements. We will use this list to * find out the hunk and offset (simliar to segtracker). * * Source of segtracker can be found at: * http://www.sinz.org/Michael.Sinz/Enforcer/SegTracker.c.html */ uae_u32 seg_list = node + 46 + 4; /* sizeof(struct SignalSemaphore) + seg find */ node = amiga_list_first (seg_list); while (node) { uae_u32 seg_entry = node + 12; uae_u32 address, size; int hunk = 0; /* Go through all entries until an address is 0 * or the segment has been found */ while ((address = get_long (seg_entry))) { size = get_long (seg_entry + 4); if (pc > address && pc < address + size) { uae_u32 name, offset; TCHAR *native_name; offset = pc - address - 4; name = get_long (node + 8); /* ln_Name */ if (name) { native_name = au ((char*)amiga2native(name,100)); if (!native_name) native_name = my_strdup (_T("Unknown")); } else { native_name = my_strdup (_T("Unknown")); } _stprintf (buf, _T("----> %08lx - \"%s\" Hunk %04lx Offset %08lx\n"), pc, native_name, hunk, offset); xfree (native_name); return 1; } seg_entry += 8; hunk++; } node = amiga_node_next (node); } } return 0; } /************************************************************* Display the enforcer hit *************************************************************/ static void enforcer_display_hit (const TCHAR *addressmode, uae_u32 pc, uaecptr addr) { uae_u32 a7; uae_u32 sysbase; uae_u32 this_task; uae_u32 task_name; TCHAR *native_task_name = NULL; int i, j; static TCHAR buf[256],instrcode[256]; static TCHAR lines[INSTRUCTIONLINES/2][256]; static uaecptr bestpc_array[INSTRUCTIONLINES/2][5]; static int bestpc_idxs[INSTRUCTIONLINES/2]; TCHAR *enforcer_buf_ptr = enforcer_buf; uaecptr bestpc, pospc, nextpc, temppc; if (enforcer_hit) return; /* our function itself generated a hit ;), avoid endless loop */ if (regs.vbr < 0x100 && addr >= 0x0c && addr < 0x80) return; enforcer_hit = 1; sysbase = get_long (4); if (sysbase < 0x100 || !valid_address (sysbase, 1000)) goto end; this_task = get_long (sysbase + 276); if (this_task < 0x100 || !valid_address (this_task, 1000)) goto end; task_name = get_long (this_task + 10); /* ln_Name */ native_task_name = au ((char*)amiga2native (task_name, 100)); /*if (strcmp(native_task_name,"c:MCP")!=0) { Exception (0x2d,0); }*/ _tcscpy (enforcer_buf_ptr, _T("Enforcer Hit! Bad program\n")); enforcer_buf_ptr += _tcslen (enforcer_buf_ptr); _stprintf (buf, _T("Illegal %s: %08lx"), addressmode, addr); _stprintf (enforcer_buf_ptr, _T("%-48sPC: %0lx\n"), buf, pc); enforcer_buf_ptr += _tcslen (enforcer_buf_ptr); /* Data registers */ _stprintf (enforcer_buf_ptr, _T("Data: %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n"), m68k_dreg (regs, 0), m68k_dreg (regs, 1), m68k_dreg (regs, 2), m68k_dreg (regs, 3), m68k_dreg (regs, 4), m68k_dreg (regs, 5), m68k_dreg (regs, 6), m68k_dreg (regs, 7)); enforcer_buf_ptr += _tcslen (enforcer_buf_ptr); /* Address registers */ _stprintf (enforcer_buf_ptr, _T("Addr: %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n"), m68k_areg (regs, 0), m68k_areg (regs, 1), m68k_areg (regs, 2), m68k_areg (regs, 3), m68k_areg (regs, 4), m68k_areg (regs, 5), m68k_areg (regs, 6), m68k_areg (regs, 7)); enforcer_buf_ptr += _tcslen (enforcer_buf_ptr); /* Stack */ a7 = m68k_areg (regs, 7); for (i = 0; i < 8 * STACKLINES; i++) { a7 += 4; if (!(i % 8)) { _tcscpy (enforcer_buf_ptr, _T("Stck:")); enforcer_buf_ptr += _tcslen (enforcer_buf_ptr); } _stprintf (enforcer_buf_ptr, _T(" %08lx"),get_long (a7)); enforcer_buf_ptr += _tcslen (enforcer_buf_ptr); if (i%8 == 7) *enforcer_buf_ptr++ = '\n'; } /* Segtracker output */ a7 = m68k_areg (regs, 7); if (get_long (a7 - 4) != pc) { if (enforcer_decode_hunk_and_offset (buf, pc)) { _tcscpy (enforcer_buf_ptr, buf); enforcer_buf_ptr += _tcslen (enforcer_buf_ptr); } } for (i = 0; i < BACKTRACELONGS; i++) { a7 += 4; if (enforcer_decode_hunk_and_offset (buf, get_long (a7))) { int l = _tcslen (buf); if (ENFORCER_BUF_SIZE - (enforcer_buf_ptr - enforcer_buf) > l + 256) { _tcscpy (enforcer_buf_ptr, buf); enforcer_buf_ptr += l; } } } /* Decode the instructions around the pc where the enforcer hit was caused. * * At first, the area before the pc, this not always done correctly because * it's done backwards */ temppc = pc; memset (bestpc_array, 0, sizeof (bestpc_array)); for (i = 0; i < INSTRUCTIONLINES / 2; i++) bestpc_idxs[i] = -1; for (i = 0; i < INSTRUCTIONLINES / 2; i++) { pospc = temppc; bestpc = 0; if (bestpc_idxs[i] == -1) { for (j = 0; j < 5; j++) { pospc -= 2; sm68k_disasm (buf, NULL, pospc, &nextpc); if (nextpc == temppc) { bestpc_idxs[i] = j; bestpc_array[i][j] = bestpc = pospc; } } } else { bestpc = bestpc_array[i][bestpc_idxs[i]]; } if (!bestpc) { /* there was no best pc found, so it is high probable that * a former used best pc was wrong. * * We trace back and use the former best pc instead */ int former_idx; int leave = 0; do { if (!i) { leave = 1; break; } i--; former_idx = bestpc_idxs[i]; bestpc_idxs[i] = -1; bestpc_array[i][former_idx] = 0; for (j = former_idx - 1; j >= 0; j--) { if (bestpc_array[i][j]) { bestpc_idxs[i] = j; break; } } } while (bestpc_idxs[i] == -1); if (leave) break; if (i) temppc = bestpc_array[i-1][bestpc_idxs[i-1]]; else temppc = pc; i--; /* will be increased in after continue */ continue; } sm68k_disasm (buf, instrcode, bestpc, NULL); _stprintf (lines[i], _T("%08lx : %-20s %s\n"), bestpc, instrcode, buf); temppc = bestpc; } i--; for (; i >= 0; i--) { _tcscpy (enforcer_buf_ptr, lines[i]); enforcer_buf_ptr += _tcslen (enforcer_buf_ptr); } /* Now the instruction after the pc including the pc */ temppc = pc; for (i = 0; i < (INSTRUCTIONLINES + 1) / 2; i++) { sm68k_disasm (buf, instrcode, temppc, &nextpc); _stprintf (enforcer_buf_ptr, _T("%08lx : %s %-20s %s\n"), temppc, (i == 0 ? _T("*") : _T(" ")), instrcode, buf); enforcer_buf_ptr += _tcslen (enforcer_buf_ptr); temppc = nextpc; } if (!native_task_name) native_task_name = _T("Unknown"); _stprintf (enforcer_buf_ptr, _T("Name: \"%s\"\n\n"), native_task_name); enforcer_buf_ptr += _tcslen (enforcer_buf_ptr); console_out (enforcer_buf); write_log (enforcer_buf); sleep_millis (5); doflashscreen (); end: xfree (native_task_name); enforcer_hit = 0; } uae_u32 REGPARAM2 chipmem_lget2 (uaecptr addr) { uae_u32 *m; addr -= chipmem_start & chipmem_mask; addr &= chipmem_mask; m = (uae_u32 *)(chipmemory + addr); if (ISILLEGAL_LONG (addr)) { enforcer_display_hit (_T("LONG READ from"),(uae_u32)(regs.pc_p - NMEM_OFFSET),addr); if (enforcermode & 1) set_special (SPCFLAG_TRAP); } return do_get_mem_long (m); } uae_u32 REGPARAM2 chipmem_wget2(uaecptr addr) { uae_u16 *m; addr -= chipmem_start & chipmem_mask; addr &= chipmem_mask; m = (uae_u16 *)(chipmemory + addr); if (ISILLEGAL_WORD (addr)) { enforcer_display_hit (_T("WORD READ from"),(uae_u32)(regs.pc_p - NMEM_OFFSET),addr); if (enforcermode & 1) set_special (SPCFLAG_TRAP); } return do_get_mem_word (m); } uae_u32 REGPARAM2 chipmem_bget2 (uaecptr addr) { addr -= chipmem_start & chipmem_mask; addr &= chipmem_mask; if (ISILLEGAL_BYTE (addr)) { enforcer_display_hit (_T("BYTE READ from"),(uae_u32)(regs.pc_p - NMEM_OFFSET),addr); if (enforcermode & 1) set_special (SPCFLAG_TRAP); } return chipmemory[addr]; } void REGPARAM2 chipmem_lput2 (uaecptr addr, uae_u32 l) { uae_u32 *m; addr -= chipmem_start & chipmem_mask; addr &= chipmem_mask; m = (uae_u32 *)(chipmemory + addr); if (ISILLEGAL_LONG (addr)) { enforcer_display_hit (_T("LONG WRITE to"),(uae_u32)(regs.pc_p - NMEM_OFFSET),addr); if (enforcermode & 1) if (addr != 0x100) set_special (SPCFLAG_TRAP); } if (ISEXEC (addr) || ISEXEC (addr + 1) || ISEXEC (addr + 2) || ISEXEC (addr + 3)) return; do_put_mem_long (m, l); } void REGPARAM2 chipmem_wput2 (uaecptr addr, uae_u32 w) { uae_u16 *m; addr -= chipmem_start & chipmem_mask; addr &= chipmem_mask; m = (uae_u16 *)(chipmemory + addr); if (ISILLEGAL_WORD (addr)) { enforcer_display_hit (_T("WORD WRITE to"),(uae_u32)(regs.pc_p - NMEM_OFFSET),addr); if (enforcermode & 1) set_special (SPCFLAG_TRAP); } if (ISEXEC (addr) || ISEXEC (addr + 1)) return; do_put_mem_word (m, w); } void REGPARAM2 chipmem_bput2 (uaecptr addr, uae_u32 b) { addr -= chipmem_start & chipmem_mask; addr &= chipmem_mask; if (ISILLEGAL_BYTE (addr)) { enforcer_display_hit (_T("BYTE WRITE to"),(uae_u32)(regs.pc_p - NMEM_OFFSET),addr); if (enforcermode & 1) set_special (SPCFLAG_TRAP); } if (ISEXEC (addr)) return; chipmemory[addr] = b; } int REGPARAM2 chipmem_check2 (uaecptr addr, uae_u32 size) { addr -= chipmem_start & chipmem_mask; addr &= chipmem_mask; return (addr + size) <= allocated_chipmem; } uae_u8 * REGPARAM2 chipmem_xlate2 (uaecptr addr) { addr -= chipmem_start & chipmem_mask; addr &= chipmem_mask; return chipmemory + addr; } uae_u32 REGPARAM2 dummy_lget2 (uaecptr addr) { special_mem_r; enforcer_display_hit (_T("LONG READ from"),(uae_u32)(regs.pc_p - NMEM_OFFSET), addr); if (enforcermode & 1) { set_special (SPCFLAG_TRAP); return 0; } return 0xbadedeef; } #ifdef JIT static int warned_JIT_0xF10000 = 0; #endif uae_u32 REGPARAM2 dummy_wget2 (uaecptr addr) { special_mem_r; #ifdef JIT if (addr >= 0x00F10000 && addr <= 0x00F7FFFF) { if (!warned_JIT_0xF10000) { warned_JIT_0xF10000 = 1; enforcer_display_hit (_T("LONG READ from"),(uae_u32)(regs.pc_p - NMEM_OFFSET),addr); } return 0; } #endif enforcer_display_hit (_T("WORD READ from"),(uae_u32)(regs.pc_p - NMEM_OFFSET),addr); if (enforcermode & 1) { set_special (SPCFLAG_TRAP); return 0; } return 0xbadf; } uae_u32 REGPARAM2 dummy_bget2 (uaecptr addr) { special_mem_r; enforcer_display_hit (_T("BYTE READ from"),(uae_u32)(regs.pc_p - NMEM_OFFSET),addr); if (enforcermode & 1) { set_special (SPCFLAG_TRAP); return 0; } return 0xbadedeef; } void REGPARAM2 dummy_lput2 (uaecptr addr, uae_u32 l) { special_mem_w; enforcer_display_hit (_T("LONG WRITE to"),(uae_u32)(regs.pc_p - NMEM_OFFSET),addr); if (enforcermode & 1) { set_special (SPCFLAG_TRAP); return; } } void REGPARAM2 dummy_wput2 (uaecptr addr, uae_u32 w) { special_mem_w; enforcer_display_hit (_T("WORD WRITE to"),(uae_u32)(regs.pc_p - NMEM_OFFSET),addr); if (enforcermode & 1) { set_special (SPCFLAG_TRAP); return; } } void REGPARAM2 dummy_bput2 (uaecptr addr, uae_u32 b) { special_mem_w; enforcer_display_hit (_T("BYTE WRITE to"),(uae_u32)(regs.pc_p - NMEM_OFFSET),addr); if (enforcermode & 1) { set_special (SPCFLAG_TRAP); return; } } int REGPARAM2 dummy_check2 (uaecptr addr, uae_u32 size) { special_mem_r; enforcer_display_hit (_T("CHECK from "),(uae_u32)(regs.pc_p - NMEM_OFFSET),addr); return 0; } /************************************************************* enable the enforcer like support, maybe later this make MMU exceptions so enforcer can use it. Returns 1 if enforcer is enabled *************************************************************/ int enforcer_enable (int enfmode) { extern addrbank chipmem_bank, dummy_bank; enforcermode = enfmode; if (!enforcer_installed) { saved_dummy_lget = dummy_bank.lget; saved_dummy_wget = dummy_bank.wget; saved_dummy_bget = dummy_bank.bget; saved_dummy_lput = dummy_bank.lput; saved_dummy_wput = dummy_bank.wput; saved_dummy_bput = dummy_bank.bput; saved_chipmem_lget = chipmem_bank.lget; saved_chipmem_wget = chipmem_bank.wget; saved_chipmem_bget = chipmem_bank.bget; saved_chipmem_lput = chipmem_bank.lput; saved_chipmem_wput = chipmem_bank.wput; saved_chipmem_bput = chipmem_bank.bput; saved_chipmem_xlate = chipmem_bank.xlateaddr; saved_chipmem_check = chipmem_bank.check; dummy_bank.lget = dummy_lget2; dummy_bank.wget = dummy_wget2; dummy_bank.bget = dummy_bget2; dummy_bank.lput = dummy_lput2; dummy_bank.wput = dummy_wput2; dummy_bank.bput = dummy_bput2; chipmem_bank.lget = chipmem_lget2; chipmem_bank.wget = chipmem_wget2; chipmem_bank.bget = chipmem_bget2; chipmem_bank.lput = chipmem_lput2; chipmem_bank.wput = chipmem_wput2; chipmem_bank.bput = chipmem_bput2; chipmem_bank.xlateaddr = chipmem_xlate2; chipmem_bank.check = chipmem_check2; enforcer_installed = 1; } return 1; } /************************************************************* Disable Enforcer like support *************************************************************/ int enforcer_disable (void) { if (enforcer_installed) { dummy_bank.lget = saved_dummy_lget; dummy_bank.wget = saved_dummy_wget; dummy_bank.bget = saved_dummy_bget; dummy_bank.lput = saved_dummy_lput; dummy_bank.wput = saved_dummy_wput; dummy_bank.bput = saved_dummy_bput; chipmem_bank.lget = saved_chipmem_lget; chipmem_bank.wget = saved_chipmem_wget; chipmem_bank.bget = saved_chipmem_bget; chipmem_bank.lput = saved_chipmem_lput; chipmem_bank.wput = saved_chipmem_wput; chipmem_bank.bput = saved_chipmem_bput; chipmem_bank.xlateaddr = saved_chipmem_xlate; chipmem_bank.check = saved_chipmem_check; enforcer_installed = 0; } return 1; } #endif fs-uae-2.2.3+dfsg/src/readcpu.cpp0000644000175000017500000005144512162366655017004 0ustar glaubitzglaubitz/* * UAE - The Un*x Amiga Emulator * * Read 68000 CPU specs from file "table68k" * * Copyright 1995,1996 Bernd Schmidt */ #include "sysconfig.h" #include "sysdeps.h" #include #include "readcpu.h" int nr_cpuop_funcs; struct mnemolookup lookuptab[] = { { i_ILLG, _T("ILLEGAL") }, { i_OR, _T("OR") }, { i_CHK, _T("CHK") }, { i_CHK2, _T("CHK2") }, { i_AND, _T("AND") }, { i_EOR, _T("EOR") }, { i_ORSR, _T("ORSR") }, { i_ANDSR, _T("ANDSR") }, { i_EORSR, _T("EORSR") }, { i_SUB, _T("SUB") }, { i_SUBA, _T("SUBA") }, { i_SUBX, _T("SUBX") }, { i_SBCD, _T("SBCD") }, { i_ADD, _T("ADD") }, { i_ADDA, _T("ADDA") }, { i_ADDX, _T("ADDX") }, { i_ABCD, _T("ABCD") }, { i_NEG, _T("NEG") }, { i_NEGX, _T("NEGX") }, { i_NBCD, _T("NBCD") }, { i_CLR, _T("CLR") }, { i_NOT, _T("NOT") }, { i_TST, _T("TST") }, { i_BTST, _T("BTST") }, { i_BCHG, _T("BCHG") }, { i_BCLR, _T("BCLR") }, { i_BSET, _T("BSET") }, { i_CMP, _T("CMP") }, { i_CMPM, _T("CMPM") }, { i_CMPA, _T("CMPA") }, { i_MVPRM, _T("MVPRM") }, { i_MVPMR, _T("MVPMR") }, { i_MOVE, _T("MOVE") }, { i_MOVEA, _T("MOVEA") }, { i_MVSR2, _T("MVSR2") }, { i_MV2SR, _T("MV2SR") }, { i_SWAP, _T("SWAP") }, { i_EXG, _T("EXG") }, { i_EXT, _T("EXT") }, { i_MVMEL, _T("MVMEL"), _T("MOVEM") }, { i_MVMLE, _T("MVMLE"), _T("MOVEM") }, { i_TRAP, _T("TRAP") }, { i_MVR2USP, _T("MVR2USP") }, { i_MVUSP2R, _T("MVUSP2R") }, { i_NOP, _T("NOP") }, { i_RESET, _T("RESET") }, { i_RTE, _T("RTE") }, { i_RTD, _T("RTD") }, { i_LINK, _T("LINK") }, { i_UNLK, _T("UNLK") }, { i_RTS, _T("RTS") }, { i_STOP, _T("STOP") }, { i_TRAPV, _T("TRAPV") }, { i_RTR, _T("RTR") }, { i_JSR, _T("JSR") }, { i_JMP, _T("JMP") }, { i_BSR, _T("BSR") }, { i_Bcc, _T("Bcc") }, { i_LEA, _T("LEA") }, { i_PEA, _T("PEA") }, { i_DBcc, _T("DBcc") }, { i_Scc, _T("Scc") }, { i_DIVU, _T("DIVU") }, { i_DIVS, _T("DIVS") }, { i_MULU, _T("MULU") }, { i_MULS, _T("MULS") }, { i_ASR, _T("ASR") }, { i_ASL, _T("ASL") }, { i_LSR, _T("LSR") }, { i_LSL, _T("LSL") }, { i_ROL, _T("ROL") }, { i_ROR, _T("ROR") }, { i_ROXL, _T("ROXL") }, { i_ROXR, _T("ROXR") }, { i_ASRW, _T("ASRW") }, { i_ASLW, _T("ASLW") }, { i_LSRW, _T("LSRW") }, { i_LSLW, _T("LSLW") }, { i_ROLW, _T("ROLW") }, { i_RORW, _T("RORW") }, { i_ROXLW, _T("ROXLW") }, { i_ROXRW, _T("ROXRW") }, { i_MOVE2C, _T("MOVE2C"), _T("MOVEC") }, { i_MOVEC2, _T("MOVEC2"), _T("MOVEC") }, { i_CAS, _T("CAS") }, { i_CAS2, _T("CAS2") }, { i_MULL, _T("MULL") }, { i_DIVL, _T("DIVL") }, { i_BFTST, _T("BFTST") }, { i_BFEXTU, _T("BFEXTU") }, { i_BFCHG, _T("BFCHG") }, { i_BFEXTS, _T("BFEXTS") }, { i_BFCLR, _T("BFCLR") }, { i_BFFFO, _T("BFFFO") }, { i_BFSET, _T("BFSET") }, { i_BFINS, _T("BFINS") }, { i_PACK, _T("PACK") }, { i_UNPK, _T("UNPK") }, { i_TAS, _T("TAS") }, { i_BKPT, _T("BKPT") }, { i_CALLM, _T("CALLM") }, { i_RTM, _T("RTM") }, { i_TRAPcc, _T("TRAPcc") }, { i_MOVES, _T("MOVES") }, { i_FPP, _T("FPP") }, { i_FDBcc, _T("FDBcc") }, { i_FScc, _T("FScc") }, { i_FTRAPcc, _T("FTRAPcc") }, { i_FBcc, _T("FBcc") }, { i_FBcc, _T("FBcc") }, { i_FSAVE, _T("FSAVE") }, { i_FRESTORE, _T("FRESTORE") }, { i_CINVL, _T("CINVL") }, { i_CINVP, _T("CINVP") }, { i_CINVA, _T("CINVA") }, { i_CPUSHL, _T("CPUSHL") }, { i_CPUSHP, _T("CPUSHP") }, { i_CPUSHA, _T("CPUSHA") }, { i_MOVE16, _T("MOVE16") }, { i_MMUOP030, _T("MMUOP030") }, { i_PFLUSHN, _T("PFLUSHN") }, { i_PFLUSH, _T("PFLUSH") }, { i_PFLUSHAN, _T("PFLUSHAN") }, { i_PFLUSHA, _T("PFLUSHA") }, { i_PLPAR, _T("PLPAR") }, { i_PLPAW, _T("PLPAW") }, { i_PTESTR, _T("PTESTR") }, { i_PTESTW, _T("PTESTW") }, { i_LPSTOP, _T("LPSTOP") }, { i_ILLG, _T("") }, }; struct instr *table68k; static amodes mode_from_str (const TCHAR *str) { if (_tcsncmp (str, _T("Dreg"), 4) == 0) return Dreg; if (_tcsncmp (str, _T("Areg"), 4) == 0) return Areg; if (_tcsncmp (str, _T("Aind"), 4) == 0) return Aind; if (_tcsncmp (str, _T("Apdi"), 4) == 0) return Apdi; if (_tcsncmp (str, _T("Aipi"), 4) == 0) return Aipi; if (_tcsncmp (str, _T("Ad16"), 4) == 0) return Ad16; if (_tcsncmp (str, _T("Ad8r"), 4) == 0) return Ad8r; if (_tcsncmp (str, _T("absw"), 4) == 0) return absw; if (_tcsncmp (str, _T("absl"), 4) == 0) return absl; if (_tcsncmp (str, _T("PC16"), 4) == 0) return PC16; if (_tcsncmp (str, _T("PC8r"), 4) == 0) return PC8r; if (_tcsncmp (str, _T("Immd"), 4) == 0) return imm; abort (); return 0; } STATIC_INLINE amodes mode_from_mr (int mode, int reg) { switch (mode) { case 0: return Dreg; case 1: return Areg; case 2: return Aind; case 3: return Aipi; case 4: return Apdi; case 5: return Ad16; case 6: return Ad8r; case 7: switch (reg) { case 0: return absw; case 1: return absl; case 2: return PC16; case 3: return PC8r; case 4: return imm; case 5: case 6: case 7: return am_illg; } } abort (); return 0; } static void build_insn (int insn) { int find = -1; int variants; int isjmp = 0; struct instr_def id; const TCHAR *opcstr; int i; int flaglive = 0, flagdead = 0; id = defs68k[insn]; /* Note: We treat anything with unknown flags as a jump. That is overkill, but "the programmer" was lazy quite often, and *this* programmer can't be bothered to work out what can and can't trap. Usually, this will be overwritten with the gencomp based information, anyway. */ for (i = 0; i < 5; i++) { switch (id.flaginfo[i].flagset){ case fa_unset: break; case fa_isjmp: isjmp = 1; break; case fa_isbranch: isjmp = 1; break; case fa_zero: flagdead |= 1 << i; break; case fa_one: flagdead |= 1 << i; break; case fa_dontcare: flagdead |= 1 << i; break; case fa_unknown: isjmp = 1; flagdead = -1; goto out1; case fa_set: flagdead |= 1 << i; break; } } out1: for (i = 0; i < 5; i++) { switch (id.flaginfo[i].flaguse) { case fu_unused: break; case fu_isjmp: isjmp = 1; flaglive |= 1 << i; break; case fu_maybecc: isjmp = 1; flaglive |= 1 << i; break; case fu_unknown: isjmp = 1; flaglive |= 1 << i; break; case fu_used: flaglive |= 1 << i; break; } } opcstr = id.opcstr; for (variants = 0; variants < (1 << id.n_variable); variants++) { int bitcnt[lastbit]; int bitval[lastbit]; int bitpos[lastbit]; int i; uae_u16 opc = id.bits; uae_u16 msk, vmsk; int pos = 0; int mnp = 0; int bitno = 0; TCHAR mnemonic[10]; wordsizes sz = sz_long; int srcgather = 0, dstgather = 0; int usesrc = 0, usedst = 0; int srctype = 0; int srcpos = -1, dstpos = -1; amodes srcmode = am_unknown, destmode = am_unknown; int srcreg = -1, destreg = -1; for (i = 0; i < lastbit; i++) bitcnt[i] = bitval[i] = 0; vmsk = 1 << id.n_variable; for (i = 0, msk = 0x8000; i < 16; i++, msk >>= 1) { if (!(msk & id.mask)) { int currbit = id.bitpos[bitno++]; int bit_set; vmsk >>= 1; bit_set = variants & vmsk ? 1 : 0; if (bit_set) opc |= msk; bitpos[currbit] = 15 - i; bitcnt[currbit]++; bitval[currbit] <<= 1; bitval[currbit] |= bit_set; } } if (bitval[bitj] == 0) bitval[bitj] = 8; /* first check whether this one does not match after all */ if (bitval[bitz] == 3 || bitval[bitC] == 1) continue; if (bitcnt[bitI] && (bitval[bitI] == 0x00 || bitval[bitI] == 0xff)) continue; /* bitI and bitC get copied to biti and bitc */ if (bitcnt[bitI]) { bitval[biti] = bitval[bitI]; bitpos[biti] = bitpos[bitI]; } if (bitcnt[bitC]) bitval[bitc] = bitval[bitC]; pos = 0; while (opcstr[pos] && !_istspace(opcstr[pos])) { if (opcstr[pos] == '.') { pos++; switch (opcstr[pos]) { case 'B': sz = sz_byte; break; case 'W': sz = sz_word; break; case 'L': sz = sz_long; break; case 'z': switch (bitval[bitz]) { case 0: sz = sz_byte; break; case 1: sz = sz_word; break; case 2: sz = sz_long; break; default: abort(); } break; default: abort(); } } else { mnemonic[mnp] = opcstr[pos]; if (mnemonic[mnp] == 'f') { find = -1; switch (bitval[bitf]) { case 0: mnemonic[mnp] = 'R'; break; case 1: mnemonic[mnp] = 'L'; break; default: abort(); } } mnp++; } pos++; } mnemonic[mnp] = 0; /* now, we have read the mnemonic and the size */ while (opcstr[pos] && _istspace(opcstr[pos])) pos++; /* A goto a day keeps the D******a away. */ if (opcstr[pos] == 0) goto endofline; /* parse the source address */ usesrc = 1; switch (opcstr[pos++]) { case 'D': srcmode = Dreg; switch (opcstr[pos++]) { case 'r': srcreg = bitval[bitr]; srcgather = 1; srcpos = bitpos[bitr]; break; case 'R': srcreg = bitval[bitR]; srcgather = 1; srcpos = bitpos[bitR]; break; default: abort(); } break; case 'A': srcmode = Areg; switch (opcstr[pos++]) { case 'r': srcreg = bitval[bitr]; srcgather = 1; srcpos = bitpos[bitr]; break; case 'R': srcreg = bitval[bitR]; srcgather = 1; srcpos = bitpos[bitR]; break; default: abort(); } switch (opcstr[pos]) { case 'p': srcmode = Apdi; pos++; break; case 'P': srcmode = Aipi; pos++; break; case 'a': srcmode = Aind; pos++; break; } break; case 'L': srcmode = absl; break; case '#': switch (opcstr[pos++]) { case 'z': srcmode = imm; break; case '0': srcmode = imm0; break; case '1': srcmode = imm1; break; case '2': srcmode = imm2; break; case 'i': srcmode = immi; srcreg = (uae_s32)(uae_s8)bitval[biti]; if (CPU_EMU_SIZE < 4) { /* Used for branch instructions */ srctype = 1; srcgather = 1; srcpos = bitpos[biti]; } break; case 'j': srcmode = immi; srcreg = bitval[bitj]; if (CPU_EMU_SIZE < 3) { /* 1..8 for ADDQ/SUBQ and rotshi insns */ srcgather = 1; srctype = 3; srcpos = bitpos[bitj]; } break; case 'J': srcmode = immi; srcreg = bitval[bitJ]; if (CPU_EMU_SIZE < 5) { /* 0..15 */ srcgather = 1; srctype = 2; srcpos = bitpos[bitJ]; } break; case 'k': srcmode = immi; srcreg = bitval[bitk]; if (CPU_EMU_SIZE < 3) { srcgather = 1; srctype = 4; srcpos = bitpos[bitk]; } break; case 'K': srcmode = immi; srcreg = bitval[bitK]; if (CPU_EMU_SIZE < 5) { /* 0..15 */ srcgather = 1; srctype = 5; srcpos = bitpos[bitK]; } break; case 'p': srcmode = immi; srcreg = bitval[bitK]; if (CPU_EMU_SIZE < 5) { /* 0..3 */ srcgather = 1; srctype = 7; srcpos = bitpos[bitp]; } break; default: abort(); } break; case 'd': srcreg = bitval[bitD]; srcmode = mode_from_mr(bitval[bitd],bitval[bitD]); if (srcmode == am_illg) continue; if (CPU_EMU_SIZE < 2 && (srcmode == Areg || srcmode == Dreg || srcmode == Aind || srcmode == Ad16 || srcmode == Ad8r || srcmode == Aipi || srcmode == Apdi)) { srcgather = 1; srcpos = bitpos[bitD]; } if (opcstr[pos] == '[') { pos++; if (opcstr[pos] == '!') { /* exclusion */ do { pos++; if (mode_from_str(opcstr+pos) == srcmode) goto nomatch; pos += 4; } while (opcstr[pos] == ','); pos++; } else { if (opcstr[pos+4] == '-') { /* replacement */ if (mode_from_str(opcstr+pos) == srcmode) srcmode = mode_from_str(opcstr+pos+5); else goto nomatch; pos += 10; } else { /* normal */ while(mode_from_str(opcstr+pos) != srcmode) { pos += 4; if (opcstr[pos] == ']') goto nomatch; pos++; } while(opcstr[pos] != ']') pos++; pos++; break; } } } /* Some addressing modes are invalid as destination */ if (srcmode == imm || srcmode == PC16 || srcmode == PC8r) goto nomatch; break; case 's': srcreg = bitval[bitS]; srcmode = mode_from_mr(bitval[bits],bitval[bitS]); if (srcmode == am_illg) continue; if (CPU_EMU_SIZE < 2 && (srcmode == Areg || srcmode == Dreg || srcmode == Aind || srcmode == Ad16 || srcmode == Ad8r || srcmode == Aipi || srcmode == Apdi)) { srcgather = 1; srcpos = bitpos[bitS]; } if (opcstr[pos] == '[') { pos++; if (opcstr[pos] == '!') { /* exclusion */ do { pos++; if (mode_from_str(opcstr+pos) == srcmode) goto nomatch; pos += 4; } while (opcstr[pos] == ','); pos++; } else { if (opcstr[pos+4] == '-') { /* replacement */ if (mode_from_str(opcstr+pos) == srcmode) srcmode = mode_from_str(opcstr+pos+5); else goto nomatch; pos += 10; } else { /* normal */ while(mode_from_str(opcstr+pos) != srcmode) { pos += 4; if (opcstr[pos] == ']') goto nomatch; pos++; } while(opcstr[pos] != ']') pos++; pos++; } } } break; default: abort(); } /* safety check - might have changed */ if (srcmode != Areg && srcmode != Dreg && srcmode != Aind && srcmode != Ad16 && srcmode != Ad8r && srcmode != Aipi && srcmode != Apdi && srcmode != immi) { srcgather = 0; } if (srcmode == Areg && sz == sz_byte) goto nomatch; if (opcstr[pos] != ',') goto endofline; pos++; /* parse the destination address */ usedst = 1; switch (opcstr[pos++]) { case 'D': destmode = Dreg; switch (opcstr[pos++]) { case 'r': destreg = bitval[bitr]; dstgather = 1; dstpos = bitpos[bitr]; break; case 'R': destreg = bitval[bitR]; dstgather = 1; dstpos = bitpos[bitR]; break; default: abort(); } if (dstpos < 0 || dstpos >= 32) abort (); break; case 'A': destmode = Areg; switch (opcstr[pos++]) { case 'r': destreg = bitval[bitr]; dstgather = 1; dstpos = bitpos[bitr]; break; case 'R': destreg = bitval[bitR]; dstgather = 1; dstpos = bitpos[bitR]; break; case 'x': destreg = 0; dstgather = 0; dstpos = 0; break; default: abort(); } if (dstpos < 0 || dstpos >= 32) abort (); switch (opcstr[pos]) { case 'p': destmode = Apdi; pos++; break; case 'P': destmode = Aipi; pos++; break; } break; case 'L': destmode = absl; break; case '#': switch (opcstr[pos++]) { case 'z': destmode = imm; break; case '0': destmode = imm0; break; case '1': destmode = imm1; break; case '2': destmode = imm2; break; case 'i': destmode = immi; destreg = (uae_s32)(uae_s8)bitval[biti]; break; case 'j': destmode = immi; destreg = bitval[bitj]; break; case 'J': destmode = immi; destreg = bitval[bitJ]; break; case 'k': destmode = immi; destreg = bitval[bitk]; break; case 'K': destmode = immi; destreg = bitval[bitK]; break; default: abort(); } break; case 'd': destreg = bitval[bitD]; destmode = mode_from_mr(bitval[bitd],bitval[bitD]); if (destmode == am_illg) continue; if (CPU_EMU_SIZE < 1 && (destmode == Areg || destmode == Dreg || destmode == Aind || destmode == Ad16 || destmode == Ad8r || destmode == Aipi || destmode == Apdi)) { dstgather = 1; dstpos = bitpos[bitD]; } if (opcstr[pos] == '[') { pos++; if (opcstr[pos] == '!') { /* exclusion */ do { pos++; if (mode_from_str(opcstr+pos) == destmode) goto nomatch; pos += 4; } while (opcstr[pos] == ','); pos++; } else { if (opcstr[pos+4] == '-') { /* replacement */ if (mode_from_str(opcstr+pos) == destmode) destmode = mode_from_str(opcstr+pos+5); else goto nomatch; pos += 10; } else { /* normal */ while(mode_from_str(opcstr+pos) != destmode) { pos += 4; if (opcstr[pos] == ']') goto nomatch; pos++; } while(opcstr[pos] != ']') pos++; pos++; break; } } } /* Some addressing modes are invalid as destination */ if (destmode == imm || destmode == PC16 || destmode == PC8r) goto nomatch; break; case 's': destreg = bitval[bitS]; destmode = mode_from_mr(bitval[bits],bitval[bitS]); if (destmode == am_illg) continue; if (CPU_EMU_SIZE < 1 && (destmode == Areg || destmode == Dreg || destmode == Aind || destmode == Ad16 || destmode == Ad8r || destmode == Aipi || destmode == Apdi)) { dstgather = 1; dstpos = bitpos[bitS]; } if (opcstr[pos] == '[') { pos++; if (opcstr[pos] == '!') { /* exclusion */ do { pos++; if (mode_from_str(opcstr+pos) == destmode) goto nomatch; pos += 4; } while (opcstr[pos] == ','); pos++; } else { if (opcstr[pos+4] == '-') { /* replacement */ if (mode_from_str(opcstr+pos) == destmode) destmode = mode_from_str(opcstr+pos+5); else goto nomatch; pos += 10; } else { /* normal */ while(mode_from_str(opcstr+pos) != destmode) { pos += 4; if (opcstr[pos] == ']') goto nomatch; pos++; } while(opcstr[pos] != ']') pos++; pos++; } } } break; default: abort(); } /* safety check - might have changed */ if (destmode != Areg && destmode != Dreg && destmode != Aind && destmode != Ad16 && destmode != Ad8r && destmode != Aipi && destmode != Apdi) { dstgather = 0; } if (destmode == Areg && sz == sz_byte) goto nomatch; #if 0 if (sz == sz_byte && (destmode == Aipi || destmode == Apdi)) { dstgather = 0; } #endif endofline: /* now, we have a match */ if (table68k[opc].mnemo != i_ILLG) ;//write_log (_T("Double match: %x: %s\n"), opc, opcstr); if (find == -1) { for (find = 0;; find++) { if (_tcscmp (mnemonic, lookuptab[find].name) == 0) { table68k[opc].mnemo = lookuptab[find].mnemo; break; } if (_tcslen (lookuptab[find].name) == 0) abort(); } } else { table68k[opc].mnemo = lookuptab[find].mnemo; } table68k[opc].cc = bitval[bitc]; if (table68k[opc].mnemo == i_BTST || table68k[opc].mnemo == i_BSET || table68k[opc].mnemo == i_BCLR || table68k[opc].mnemo == i_BCHG) { sz = destmode == Dreg ? sz_long : sz_byte; } table68k[opc].size = sz; table68k[opc].sreg = srcreg; table68k[opc].dreg = destreg; table68k[opc].smode = srcmode; table68k[opc].dmode = destmode; table68k[opc].spos = srcgather ? srcpos : -1; table68k[opc].dpos = dstgather ? dstpos : -1; table68k[opc].suse = usesrc; table68k[opc].duse = usedst; table68k[opc].stype = srctype; table68k[opc].plev = id.plevel; table68k[opc].clev = id.cpulevel; table68k[opc].unimpclev = id.unimpcpulevel; #if 0 for (i = 0; i < 5; i++) { table68k[opc].flaginfo[i].flagset = id.flaginfo[i].flagset; table68k[opc].flaginfo[i].flaguse = id.flaginfo[i].flaguse; } #endif table68k[opc].flagdead = flagdead; table68k[opc].flaglive = flaglive; table68k[opc].isjmp = isjmp; nomatch: /* FOO! */; } } void read_table68k (void) { int i; free (table68k); table68k = xmalloc (struct instr, 65536); for (i = 0; i < 65536; i++) { table68k[i].mnemo = i_ILLG; table68k[i].handler = -1; } for (i = 0; i < n_defs68k; i++) { build_insn (i); } } static int imismatch; static void handle_merges (long int opcode) { uae_u16 smsk; uae_u16 dmsk; int sbitdst, dstend; int srcreg, dstreg; if (table68k[opcode].spos == -1) { sbitdst = 1; smsk = 0; } else { switch (table68k[opcode].stype) { case 0: smsk = 7; sbitdst = 8; break; case 1: smsk = 255; sbitdst = 256; break; case 2: smsk = 15; sbitdst = 16; break; case 3: smsk = 7; sbitdst = 8; break; case 4: smsk = 7; sbitdst = 8; break; case 5: smsk = 63; sbitdst = 64; break; case 7: smsk = 3; sbitdst = 4; break; default: smsk = 0; sbitdst = 0; abort(); break; } smsk <<= table68k[opcode].spos; } if (table68k[opcode].dpos == -1) { dstend = 1; dmsk = 0; } else { dmsk = 7 << table68k[opcode].dpos; dstend = 8; } for (srcreg=0; srcreg < sbitdst; srcreg++) { for (dstreg=0; dstreg < dstend; dstreg++) { uae_u16 code = (uae_u16)opcode; code = (code & ~smsk) | (srcreg << table68k[opcode].spos); code = (code & ~dmsk) | (dstreg << table68k[opcode].dpos); /* Check whether this is in fact the same instruction. * The instructions should never differ, except for the * Bcc.(BW) case. */ if (table68k[code].mnemo != table68k[opcode].mnemo || table68k[code].size != table68k[opcode].size || table68k[code].suse != table68k[opcode].suse || table68k[code].duse != table68k[opcode].duse) { imismatch++; continue; } if (table68k[opcode].suse && (table68k[opcode].spos != table68k[code].spos || table68k[opcode].smode != table68k[code].smode || table68k[opcode].stype != table68k[code].stype)) { imismatch++; continue; } if (table68k[opcode].duse && (table68k[opcode].dpos != table68k[code].dpos || table68k[opcode].dmode != table68k[code].dmode)) { imismatch++; continue; } if (code != opcode) table68k[code].handler = opcode; } } } void do_merges (void) { long int opcode; int nr = 0; imismatch = 0; for (opcode = 0; opcode < 65536; opcode++) { if (table68k[opcode].handler != -1 || table68k[opcode].mnemo == i_ILLG) continue; nr++; handle_merges (opcode); } nr_cpuop_funcs = nr; } int get_no_mismatches (void) { return imismatch; } fs-uae-2.2.3+dfsg/src/bsdsocket.cpp0000644000175000017500000014631212162366654017337 0ustar glaubitzglaubitz/* * UAE - The Un*x Amiga Emulator * * bsdsocket.library emulation machine-independent part * * Copyright 1997, 1998 Mathias Ortmann * * Library initialization code (c) Tauno Taipaleenmaki */ #include "sysconfig.h" #include "sysdeps.h" #include #include #include "options.h" #include "uae/memory.h" #include "custom.h" #include "newcpu.h" #include "autoconf.h" #include "traps.h" #include "bsdsocket.h" #include "threaddep/thread.h" #include "native2amiga.h" #ifdef BSDSOCKET int log_bsd; struct socketbase *socketbases; static uae_u32 SockLibBase; #define SOCKPOOLSIZE 128 #define UNIQUE_ID (-1) /* ObtainSocket()/ReleaseSocket() public socket pool */ struct sockd { long sockpoolids[SOCKPOOLSIZE]; SOCKET_TYPE sockpoolsocks[SOCKPOOLSIZE]; uae_u32 sockpoolflags[SOCKPOOLSIZE]; }; static long curruniqid = 65536; static struct sockd *sockdata; uae_u32 strncpyha (uae_u32 dst, const uae_char *src, int size) { uae_u32 res = dst; if (!addr_valid (_T("strncpyha"), dst, size)) return res; while (size--) { put_byte (dst++, *src); if (!*src++) return res; } return res; } uae_u32 addstr (uae_u32 * dst, const TCHAR *src) { uae_u32 res = *dst; int len; char *s = ua (src); len = strlen (s) + 1; strcpyha_safe (*dst, s); (*dst) += len; xfree (s); return res; } uae_u32 addstr_ansi (uae_u32 * dst, const uae_char *src) { uae_u32 res = *dst; int len; len = strlen (src) + 1; strcpyha_safe (*dst, src); (*dst) += len; return res; } uae_u32 addmem (uae_u32 * dst, const uae_char *src, int len) { uae_u32 res = *dst; if (!src) return 0; memcpyha_safe (*dst, (uae_u8*)src, len); (*dst) += len; return res; } /* Get current task */ static uae_u32 gettask (TrapContext *context) { uae_u32 currtask, a1 = m68k_areg (regs, 1); TCHAR *tskname; m68k_areg (regs, 1) = 0; currtask = CallLib (context, get_long (4), -0x126); /* FindTask */ m68k_areg (regs, 1) = a1; tskname = au((char*)get_real_address (get_long (currtask + 10))); BSDTRACE ((_T("[%s] "), tskname)); xfree (tskname); return currtask; } /* errno/herrno setting */ void bsdsocklib_seterrno (SB, int sb_errno) { sb->sb_errno = sb_errno; if (sb->sb_errno >= 1001 && sb->sb_errno <= 1005) bsdsocklib_setherrno(sb,sb->sb_errno-1000); if (sb->errnoptr) { switch (sb->errnosize) { case 1: put_byte (sb->errnoptr, sb_errno); break; case 2: put_word (sb->errnoptr, sb_errno); break; case 4: put_long (sb->errnoptr, sb_errno); } } } void bsdsocklib_setherrno (SB, int sb_herrno) { sb->sb_herrno = sb_herrno; if (sb->herrnoptr) { switch (sb->herrnosize) { case 1: put_byte (sb->herrnoptr, sb_herrno); break; case 2: put_word (sb->herrnoptr, sb_herrno); break; case 4: put_long (sb->herrnoptr, sb_herrno); } } } uae_u32 callfdcallback (TrapContext *context, SB, uae_u32 fd, uae_u32 action) { uae_u32 v; if (!sb->fdcallback) return 0; BSDTRACE((_T("FD_CALLBACK(%d,%d) "), fd, action)); m68k_dreg (regs, 0) = fd; m68k_dreg (regs, 1) = action; v = CallFunc (context, sb->fdcallback); BSDTRACE((_T("-> %d\n"), v)); return v; } BOOL checksd(TrapContext *context, SB, int sd) { int iCounter; SOCKET s; s = getsock(sb,sd); if (s != INVALID_SOCKET) { for (iCounter = 1; iCounter <= sb->dtablesize; iCounter++) { if (iCounter != sd) { if (getsock(sb,iCounter) == s) { releasesock(context, sb, sd); return TRUE; } } } for (iCounter = 0; iCounter < SOCKPOOLSIZE; iCounter++) { if (s == sockdata->sockpoolsocks[iCounter]) return TRUE; } } BSDTRACE((_T("checksd FALSE s 0x%x sd %d\n"),s,sd)); return FALSE; } void setsd(TrapContext *context, SB, int sd, SOCKET_TYPE s) { callfdcallback (context, sb, sd - 1, FDCB_ALLOC); sb->dtable[sd - 1] = s; } /* Socket descriptor/opaque socket handle management */ int getsd (TrapContext *context, SB, SOCKET_TYPE s) { int i, fdcb; SOCKET_TYPE *dt = sb->dtable; /* return socket descriptor if already exists */ for (i = sb->dtablesize; i--;) { if (dt[i] == s) return i + 1; } /* create new table entry */ fdcb = 0; for (i = 0; i < sb->dtablesize; i++) { if (dt[i] == -1) { if (callfdcallback (context, sb, i, FDCB_CHECK)) { /* fd was allocated by link lib */ dt[i] = -2; continue; } dt[i] = s; sb->ftable[i] = SF_BLOCKING; return i + 1; } else if (dt[i] == -2) { fdcb = 1; } } /* recheck callback allocated FDs */ if (fdcb) { for (i = 0; i < sb->dtablesize; i++) { if (dt[i] == -2) { if (!callfdcallback (context, sb, i, FDCB_CHECK)) { dt[i] = s; sb->ftable[i] = SF_BLOCKING; return i + 1; } } } } /* descriptor table full. */ bsdsocklib_seterrno (sb, 24); /* EMFILE */ return -1; } SOCKET_TYPE getsock (SB, int sd) { if ((unsigned int) (sd - 1) >= (unsigned int) sb->dtablesize) { BSDTRACE ((_T("Invalid Socket Descriptor (%d)\n"), sd)); bsdsocklib_seterrno (sb, 38); /* ENOTSOCK */ return -1; } if (sb->dtable[sd - 1] == INVALID_SOCKET) { struct socketbase *sb1, *nsb; uaecptr ot; if (!addr_valid (_T("getsock1"), sb->ownertask + 10, 4)) return -1; ot = get_long (sb->ownertask + 10); if (!addr_valid (_T("getsock2"), ot, 1)) return -1; // Fix for Newsrog (All Tasks of Newsrog using the same dtable) for (sb1 = socketbases; sb1; sb1 = nsb) { uaecptr ot1; if (!addr_valid (_T("getsock3"), sb1->ownertask + 10, 4)) break; ot1 = get_long (sb1->ownertask + 10); if (!addr_valid (_T("getsock4"), ot1, 1)) break; if (strcmp((char*)get_real_address (ot1), (char*)get_real_address (ot)) == 0) { // Task with same name already exists -> use same dtable if (sb1->dtable[sd - 1] != INVALID_SOCKET) return sb1->dtable[sd - 1]; } nsb = sb1->next; } } return sb->dtable[sd - 1]; } void releasesock (TrapContext *context, SB, int sd) { if ((unsigned int) (sd - 1) < (unsigned int) sb->dtablesize) { sb->dtable[sd - 1] = -1; callfdcallback (context, sb, sd - 1, FDCB_FREE); } } /* Signal queue */ /* @@@ TODO: ensure proper interlocking */ #if 1 struct socketbase *sbsigqueue; volatile int bsd_int_requested; #endif void addtosigqueue (SB, int events) { locksigqueue (); if (events) sb->sigstosend |= sb->eventsigs; else sb->sigstosend |= ((uae_u32) 1) << sb->signal; if (!sb->dosignal) { sb->nextsig = sbsigqueue; sbsigqueue = sb; } sb->dosignal = 1; bsd_int_requested |= 1; unlocksigqueue (); } void bsdsock_fake_int_handler(void) { locksigqueue (); bsd_int_requested = 0; if (sbsigqueue != NULL) { SB; for (sb = sbsigqueue; sb; sb = sb->nextsig) { if (sb->dosignal == 1) { uae_Signal (sb->ownertask, sb->sigstosend); sb->sigstosend = 0; } sb->dosignal = 0; } sbsigqueue = NULL; } unlocksigqueue (); } void waitsig (TrapContext *context, SB) { long sigs; m68k_dreg (regs, 0) = (((uae_u32) 1) << sb->signal) | sb->eintrsigs; if ((sigs = CallLib (context, sb->sysbase, -0x13e)) & sb->eintrsigs) { /* Wait */ sockabort (sb); bsdsocklib_seterrno (sb, 4); /* EINTR */ // Set signal m68k_dreg (regs, 0) = sigs; m68k_dreg (regs, 1) = sb->eintrsigs; sigs = CallLib (context, sb->sysbase, -0x132); /* SetSignal() */ sb->eintr = 1; } else sb->eintr = 0; } void cancelsig (TrapContext *context, SB) { locksigqueue (); if (sb->dosignal) sb->dosignal = 2; unlocksigqueue (); m68k_dreg (regs, 0) = 0; m68k_dreg (regs, 1) = ((uae_u32) 1) << sb->signal; CallLib (context, sb->sysbase, -0x132); /* SetSignal() */ } /* Allocate and initialize per-task state structure */ static struct socketbase *alloc_socketbase (TrapContext *context) { SB; int i; if ((sb = xcalloc (struct socketbase, 1)) != NULL) { sb->ownertask = gettask (context); sb->sysbase = get_long (4); m68k_dreg (regs, 0) = -1; sb->signal = CallLib (context, sb->sysbase, -0x14A); /* AllocSignal */ if (sb->signal == -1) { write_log (_T("bsdsocket: ERROR: Couldn't allocate signal for task 0x%lx.\n"), sb->ownertask); free (sb); return NULL; } m68k_dreg (regs, 0) = SCRATCHBUFSIZE; m68k_dreg (regs, 1) = 0; sb->dtablesize = DEFAULT_DTABLE_SIZE; /* @@@ check malloc() result */ sb->dtable = (SOCKET*)malloc (sb->dtablesize * sizeof (*sb->dtable)); sb->ftable = (int*)malloc (sb->dtablesize * sizeof (*sb->ftable)); for (i = sb->dtablesize; i--;) sb->dtable[i] = -1; sb->eintrsigs = 0x1000; /* SIGBREAKF_CTRL_C */ sb->logfacility = 1 << 3; /* LOG_USER */ sb->logmask = 0xff; if (!host_sbinit (context, sb)) { /* @@@ free everything */ } locksigqueue(); if (socketbases) sb->next = socketbases; socketbases = sb; unlocksigqueue(); return sb; } return NULL; } STATIC_INLINE struct socketbase *get_socketbase (TrapContext *context) { return (struct socketbase*)get_pointer (m68k_areg (regs, 6) + offsetof (struct UAEBSDBase, sb)); } static void free_socketbase (TrapContext *context) { struct socketbase *sb, *nsb; if ((sb = get_socketbase (context)) != NULL) { m68k_dreg (regs, 0) = sb->signal; CallLib (context, sb->sysbase, -0x150); /* FreeSignal */ if (sb->hostent) { m68k_areg (regs, 1) = sb->hostent; m68k_dreg (regs, 0) = sb->hostentsize; CallLib (context, sb->sysbase, -0xD2); /* FreeMem */ } if (sb->protoent) { m68k_areg (regs, 1) = sb->protoent; m68k_dreg (regs, 0) = sb->protoentsize; CallLib (context, sb->sysbase, -0xD2); /* FreeMem */ } if (sb->servent) { m68k_areg (regs, 1) = sb->servent; m68k_dreg (regs, 0) = sb->serventsize; CallLib (context, sb->sysbase, -0xD2); /* FreeMem */ } host_sbcleanup (sb); free (sb->dtable); free (sb->ftable); locksigqueue (); if (sb == socketbases) socketbases = sb->next; else { for (nsb = socketbases; nsb; nsb = nsb->next) { if (sb == nsb->next) { nsb->next = sb->next; break; } } } #if 1 if (sb == sbsigqueue) sbsigqueue = sb->next; else { for (nsb = sbsigqueue; nsb; nsb = nsb->next) { if (sb == nsb->next) { nsb->next = sb->next; break; } } } #endif unlocksigqueue (); free (sb); } } static uae_u32 REGPARAM2 bsdsocklib_Expunge (TrapContext *context) { BSDTRACE ((_T("Expunge() -> [ignored]\n"))); return 0; } static uae_u32 functable, datatable, inittable; static uae_u32 REGPARAM2 bsdsocklib_Open (TrapContext *context) { uae_u32 result = 0; int opencount; SB; BSDTRACE ((_T("OpenLibrary() -> "))); if ((sb = alloc_socketbase (context)) != NULL) { put_word (SockLibBase + 32, opencount = get_word (SockLibBase + 32) + 1); m68k_areg (regs, 0) = functable; m68k_areg (regs, 1) = datatable; m68k_areg (regs, 2) = 0; m68k_dreg (regs, 0) = sizeof (struct UAEBSDBase); m68k_dreg (regs, 1) = 0; result = CallLib (context, sb->sysbase, -0x54); /* MakeLibrary */ put_pointer (result + offsetof (struct UAEBSDBase, sb), sb); BSDTRACE ((_T("%0x [%d]\n"), result, opencount)); } else BSDTRACE ((_T("failed (out of memory)\n"))); return result; } static uae_u32 REGPARAM2 bsdsocklib_Close (TrapContext *context) { int opencount; uae_u32 base = m68k_areg (regs, 6); uae_u32 negsize = get_word (base + 16); free_socketbase (context); put_word (SockLibBase + 32, opencount = get_word (SockLibBase + 32) - 1); m68k_areg (regs, 1) = base - negsize; m68k_dreg (regs, 0) = negsize + get_word (base + 18); CallLib (context, get_long (4), -0xD2); /* FreeMem */ BSDTRACE ((_T("CloseLibrary() -> [%d]\n"), opencount)); return 0; } /* socket(domain, type, protocol)(d0/d1/d2) */ static uae_u32 REGPARAM2 bsdsocklib_socket (TrapContext *context) { struct socketbase *sb = get_socketbase (context); return host_socket (context, sb, m68k_dreg (regs, 0), m68k_dreg (regs, 1), m68k_dreg (regs, 2)); } /* bind(s, name, namelen)(d0/a0/d1) */ static uae_u32 REGPARAM2 bsdsocklib_bind (TrapContext *context) { struct socketbase *sb = get_socketbase (context); return host_bind (context, sb, m68k_dreg (regs, 0), m68k_areg (regs, 0), m68k_dreg (regs, 1)); } /* listen(s, backlog)(d0/d1) */ static uae_u32 REGPARAM2 bsdsocklib_listen (TrapContext *context) { struct socketbase *sb = get_socketbase (context); return host_listen (context, sb, m68k_dreg (regs, 0), m68k_dreg (regs, 1)); } /* accept(s, addr, addrlen)(d0/a0/a1) */ static uae_u32 REGPARAM2 bsdsocklib_accept (TrapContext *context) { struct socketbase *sb = get_socketbase (context); host_accept (context, sb, m68k_dreg (regs, 0), m68k_areg (regs, 0), m68k_areg (regs, 1)); return sb->resultval; } /* connect(s, name, namelen)(d0/a0/d1) */ static uae_u32 REGPARAM2 bsdsocklib_connect (TrapContext *context) { struct socketbase *sb = get_socketbase (context); host_connect (context, sb, m68k_dreg (regs, 0), m68k_areg (regs, 0), m68k_dreg (regs, 1)); return sb->sb_errno ? -1 : 0; } /* sendto(s, msg, len, flags, to, tolen)(d0/a0/d1/d2/a1/d3) */ static uae_u32 REGPARAM2 bsdsocklib_sendto (TrapContext *context) { struct socketbase *sb = get_socketbase (context); host_sendto (context, sb, m68k_dreg (regs, 0), m68k_areg (regs, 0), m68k_dreg (regs, 1), m68k_dreg (regs, 2), m68k_areg (regs, 1), m68k_dreg (regs, 3)); return sb->resultval; } /* send(s, msg, len, flags)(d0/a0/d1/d2) */ static uae_u32 REGPARAM2 bsdsocklib_send (TrapContext *context) { struct socketbase *sb = get_socketbase (context); host_sendto (context, sb, m68k_dreg (regs, 0), m68k_areg (regs, 0), m68k_dreg (regs, 1), m68k_dreg (regs, 2), 0, 0); return sb->resultval; } /* recvfrom(s, buf, len, flags, from, fromlen)(d0/a0/d1/d2/a1/a2) */ static uae_u32 REGPARAM2 bsdsocklib_recvfrom (TrapContext *context) { struct socketbase *sb = get_socketbase (context); host_recvfrom (context, sb, m68k_dreg (regs, 0), m68k_areg (regs, 0), m68k_dreg (regs, 1), m68k_dreg (regs, 2), m68k_areg (regs, 1), m68k_areg (regs, 2)); return sb->resultval; } /* recv(s, buf, len, flags)(d0/a0/d1/d2) */ static uae_u32 REGPARAM2 bsdsocklib_recv (TrapContext *context) { struct socketbase *sb = get_socketbase (context); host_recvfrom (context, sb, m68k_dreg (regs, 0), m68k_areg (regs, 0), m68k_dreg (regs, 1), m68k_dreg (regs, 2), 0, 0); return sb->resultval; } /* shutdown(s, how)(d0/d1) */ static uae_u32 REGPARAM2 bsdsocklib_shutdown (TrapContext *context) { struct socketbase *sb = get_socketbase (context); return host_shutdown (sb, m68k_dreg (regs, 0), m68k_dreg (regs, 1)); } /* setsockopt(s, level, optname, optval, optlen)(d0/d1/d2/a0/d3) */ static uae_u32 REGPARAM2 bsdsocklib_setsockopt (TrapContext *context) { struct socketbase *sb = get_socketbase (context); host_setsockopt (sb, m68k_dreg (regs, 0), m68k_dreg (regs, 1), m68k_dreg (regs, 2), m68k_areg (regs, 0), m68k_dreg (regs, 3)); return sb->resultval; } /* getsockopt(s, level, optname, optval, optlen)(d0/d1/d2/a0/a1) */ static uae_u32 REGPARAM2 bsdsocklib_getsockopt (TrapContext *context) { struct socketbase *sb = get_socketbase (context); return host_getsockopt (sb, m68k_dreg (regs, 0), m68k_dreg (regs, 1), m68k_dreg (regs, 2), m68k_areg (regs, 0), m68k_areg (regs, 1)); } /* getsockname(s, hostname, namelen)(d0/a0/a1) */ static uae_u32 REGPARAM2 bsdsocklib_getsockname (TrapContext *context) { struct socketbase *sb = get_socketbase (context); return host_getsockname (sb, m68k_dreg (regs, 0), m68k_areg (regs, 0), m68k_areg (regs, 1)); } /* getpeername(s, hostname, namelen)(d0/a0/a1) */ static uae_u32 REGPARAM2 bsdsocklib_getpeername (TrapContext *context) { struct socketbase *sb = get_socketbase (context); return host_getpeername (sb, m68k_dreg (regs, 0), m68k_areg (regs, 0), m68k_areg (regs, 1)); } /* *------ generic system calls related to sockets */ /* IoctlSocket(d, request, argp)(d0/d1/a0) */ static uae_u32 REGPARAM2 bsdsocklib_IoctlSocket (TrapContext *context) { struct socketbase *sb = get_socketbase (context); return host_IoctlSocket (context, sb, m68k_dreg (regs, 0), m68k_dreg (regs, 1), m68k_areg (regs, 0)); } /* *------ AmiTCP/IP specific stuff */ /* CloseSocket(d)(d0) */ static uae_u32 REGPARAM2 bsdsocklib_CloseSocket (TrapContext *context) { struct socketbase *sb = get_socketbase (context); return host_CloseSocket (context, sb, m68k_dreg (regs, 0)); } /* WaitSelect(nfds, readfds, writefds, execptfds, timeout, maskp)(d0/a0/a1/a2/a3/d1) */ static uae_u32 REGPARAM2 bsdsocklib_WaitSelect (TrapContext *context) { struct socketbase *sb = get_socketbase (context); host_WaitSelect (context, sb, m68k_dreg (regs, 0), m68k_areg (regs, 0), m68k_areg (regs, 1), m68k_areg (regs, 2), m68k_areg (regs, 3), m68k_dreg (regs, 1)); return sb->resultval; } /* SetSocketSignals(SIGINTR, SIGIO, SIGURG)(d0/d1/d2) */ static uae_u32 REGPARAM2 bsdsocklib_SetSocketSignals (TrapContext *context) { struct socketbase *sb = get_socketbase (context); BSDTRACE ((_T("SetSocketSignals(0x%08lx,0x%08lx,0x%08lx) -> "), m68k_dreg (regs, 0), m68k_dreg (regs, 1), m68k_dreg (regs, 2))); sb->eintrsigs = m68k_dreg (regs, 0); sb->eventsigs = m68k_dreg (regs, 1); return 0; } /* SetDTableSize(size)(d0) */ static uae_u32 bsdsocklib_SetDTableSize (SB, int newSize) { int *newdtable; int *newftable; unsigned int *newmtable; int i; if (newSize < sb->dtablesize) { /* I don't support lowering the size */ return 0; } newdtable = xcalloc (int, newSize); newftable = xcalloc (int, newSize); newmtable = xcalloc (unsigned int, newSize); if (newdtable == NULL || newftable == NULL || newmtable == NULL) { sb->resultval = -1; bsdsocklib_seterrno(sb, ENOMEM); free (newdtable); free (newftable); free (newmtable); return -1; } memcpy (newdtable, sb->dtable, sb->dtablesize * sizeof(*sb->dtable)); memcpy (newftable, sb->ftable, sb->dtablesize * sizeof(*sb->ftable)); memcpy (newmtable, sb->mtable, sb->dtablesize * sizeof(*sb->mtable)); for (i = sb->dtablesize + 1; i < newSize; i++) newdtable[i] = -1; sb->dtablesize = newSize; free(sb->dtable); free(sb->ftable); free(sb->mtable); sb->dtable = (SOCKET*)newdtable; sb->ftable = newftable; sb->mtable = newmtable; sb->resultval = 0; return 0; } static int sockpoolindex (long id) { int i; for (i = 0; i < SOCKPOOLSIZE; i++) if (sockdata->sockpoolids[i] == id) return i; return -1; } /* ObtainSocket(id, domain, type, protocol)(d0/d1/d2/d3) */ static uae_u32 REGPARAM2 bsdsocklib_ObtainSocket (TrapContext *context) { struct socketbase *sb = get_socketbase (context); int sd; long id; SOCKET_TYPE s; int i; id = m68k_dreg (regs, 0); BSDTRACE ((_T("ObtainSocket(%d,%d,%d,%d) -> "), id, m68k_dreg (regs, 1), m68k_dreg (regs, 2), m68k_dreg (regs, 3))); i = sockpoolindex (id); if (i == -1) { BSDTRACE ((_T("[invalid key]\n"))); return -1; } s = sockdata->sockpoolsocks[i]; sd = getsd (context, sb, s); BSDTRACE ((_T(" -> Socket=%d\n"), sd)); if (sd != -1) { sb->ftable[sd - 1] = sockdata->sockpoolflags[i]; callfdcallback (context, sb, sd - 1, FDCB_ALLOC); sockdata->sockpoolids[i] = UNIQUE_ID; return sd - 1; } return -1; } /* ReleaseSocket(fd, id)(d0/d1) */ static uae_u32 REGPARAM2 bsdsocklib_ReleaseSocket (TrapContext *context) { struct socketbase *sb = get_socketbase (context); int sd; long id; SOCKET_TYPE s; int i; uae_u32 flags; sd = m68k_dreg (regs, 0); id = m68k_dreg (regs, 1); sd++; BSDTRACE ((_T("ReleaseSocket(%d,%d) -> "), sd, id)); s = getsock (sb, sd); if (s != -1) { flags = sb->ftable[sd - 1]; if (flags & REP_ALL) { write_log (_T("bsdsocket: ERROR: ReleaseSocket() is not supported for sockets with async event notification enabled!\n")); return -1; } releasesock (context, sb, sd); if (id == UNIQUE_ID) { for (;;) { if (sockpoolindex (curruniqid) == -1) break; curruniqid += 129; if ((unsigned long) (curruniqid + 1) < 65536) curruniqid += 65537; } id = curruniqid; } else if (id < 0 && id > 65535) { if (sockpoolindex (id) != -1) { BSDTRACE ((_T("[unique ID already exists]\n"))); return -1; } } i = sockpoolindex (-1); if (i == -1) { BSDTRACE ((_T("-1\n"))); write_log (_T("bsdsocket: ERROR: Global socket pool overflow\n")); return -1; } sockdata->sockpoolids[i] = id; sockdata->sockpoolsocks[i] = s; sockdata->sockpoolflags[i] = flags; BSDTRACE ((_T("id %d s 0x%x\n"), id,s)); } else { BSDTRACE ((_T("[invalid socket descriptor]\n"))); return -1; } return id; } /* ReleaseCopyOfSocket(fd, id)(d0/d1) */ static uae_u32 REGPARAM2 bsdsocklib_ReleaseCopyOfSocket (TrapContext *context) { struct socketbase *sb = get_socketbase (context); int sd; long id; SOCKET_TYPE s; int i; uae_u32 flags; sd = m68k_dreg (regs, 0); id = m68k_dreg (regs, 1); sd++; BSDTRACE ((_T("ReleaseSocket(%d,%d) -> "), sd, id)); s = getsock (sb, sd); if (s != -1) { flags = sb->ftable[sd - 1]; if (flags & REP_ALL) { write_log (_T("bsdsocket: ERROR: ReleaseCopyOfSocket() is not supported for sockets with async event notification enabled!\n")); return -1; } if (id == UNIQUE_ID) { for (;;) { if (sockpoolindex (curruniqid) == -1) break; curruniqid += 129; if ((unsigned long) (curruniqid + 1) < 65536) curruniqid += 65537; } id = curruniqid; } else if (id < 0 && id > 65535) { if (sockpoolindex (id) != -1) { BSDTRACE ((_T("[unique ID already exists]\n"))); return -1; } } i = sockpoolindex (-1); if (i == -1) { BSDTRACE ((_T("-1\n"))); write_log (_T("bsdsocket: ERROR: Global socket pool overflow\n")); return -1; } sockdata->sockpoolids[i] = id; sockdata->sockpoolsocks[i] = s; sockdata->sockpoolflags[i] = flags; BSDTRACE ((_T("id %d s 0x%x\n"), id,s)); } else { BSDTRACE ((_T("[invalid socket descriptor]\n"))); return -1; } return id; } /* Errno()() */ static uae_u32 REGPARAM2 bsdsocklib_Errno (TrapContext *context) { struct socketbase *sb = get_socketbase (context); BSDTRACE ((_T("Errno() -> %d\n"), sb->sb_errno)); return sb->sb_errno; } /* SetErrnoPtr(errno_p, size)(a0/d0) */ static uae_u32 REGPARAM2 bsdsocklib_SetErrnoPtr (TrapContext *context) { struct socketbase *sb = get_socketbase (context); uae_u32 errnoptr = m68k_areg (regs, 0), size = m68k_dreg (regs, 0); BSDTRACE ((_T("SetErrnoPtr(0x%lx,%d) -> "), errnoptr, size)); if (size == 1 || size == 2 || size == 4) { sb->errnoptr = errnoptr; sb->errnosize = size; BSDTRACE ((_T("OK\n"))); return 0; } bsdsocklib_seterrno (sb, 22); /* EINVAL */ return -1; } /* *------ inet library calls related to inet address manipulation */ /* Inet_NtoA(in)(d0) */ static uae_u32 REGPARAM2 bsdsocklib_Inet_NtoA (TrapContext *context) { struct socketbase *sb = get_socketbase (context); return host_Inet_NtoA (context, sb, m68k_dreg (regs, 0)); } /* inet_addr(cp)(a0) */ static uae_u32 REGPARAM2 bsdsocklib_inet_addr (TrapContext *context) { return host_inet_addr (m68k_areg (regs, 0)); } /* Inet_LnaOf(in)(d0) */ static uae_u32 REGPARAM2 bsdsocklib_Inet_LnaOf (TrapContext *context) { write_log (_T("bsdsocket: UNSUPPORTED: Inet_LnaOf()\n")); return 0; } /* Inet_NetOf(in)(d0) */ static uae_u32 REGPARAM2 bsdsocklib_Inet_NetOf (TrapContext *context) { write_log (_T("bsdsocket: UNSUPPORTED: Inet_NetOf()\n")); return 0; } /* Inet_MakeAddr(net, host)(d0/d1) */ static uae_u32 REGPARAM2 bsdsocklib_Inet_MakeAddr (TrapContext *context) { write_log (_T("bsdsocket: UNSUPPORTED: Inet_MakeAddr()\n")); return 0; } /* inet_network(cp)(a0) */ static uae_u32 REGPARAM2 bsdsocklib_inet_network (TrapContext *context) { return host_inet_addr (m68k_areg (regs, 0)); } /* *------ gethostbyname etc */ /* gethostbyname(name)(a0) */ static uae_u32 REGPARAM2 bsdsocklib_gethostbyname (TrapContext *context) { struct socketbase *sb = get_socketbase (context); host_gethostbynameaddr (context, sb, m68k_areg (regs, 0), 0, -1); return sb->sb_herrno ? 0 : sb->hostent; } /* gethostbyaddr(addr, len, type)(a0/d0/d1) */ static uae_u32 REGPARAM2 bsdsocklib_gethostbyaddr (TrapContext *context) { struct socketbase *sb = get_socketbase (context); host_gethostbynameaddr (context, sb, m68k_areg (regs, 0), m68k_dreg (regs, 0), m68k_dreg (regs, 1)); return sb->sb_herrno ? 0 : sb->hostent; } /* getnetbyname(name)(a0) */ static uae_u32 REGPARAM2 bsdsocklib_getnetbyname (TrapContext *context) { write_log (_T("bsdsocket: UNSUPPORTED: getnetbyname()\n")); return 0; } /* getnetbyaddr(net, type)(d0/d1) */ static uae_u32 REGPARAM2 bsdsocklib_getnetbyaddr (TrapContext *context) { write_log (_T("bsdsocket: UNSUPPORTED: getnetbyaddr()\n")); return 0; } /* getservbyname(name, proto)(a0/a1) */ static uae_u32 REGPARAM2 bsdsocklib_getservbyname (TrapContext *context) { struct socketbase *sb = get_socketbase (context); host_getservbynameport (context, sb, m68k_areg (regs, 0), m68k_areg (regs, 1), 0); return sb->sb_errno ? 0 : sb->servent; } /* getservbyport(port, proto)(d0/a0) */ static uae_u32 REGPARAM2 bsdsocklib_getservbyport (TrapContext *context) { struct socketbase *sb = get_socketbase (context); host_getservbynameport (context, sb, m68k_dreg (regs, 0), m68k_areg (regs, 0), 1); return sb->sb_errno ? 0 : sb->servent; } /* getprotobyname(name)(a0) */ static uae_u32 REGPARAM2 bsdsocklib_getprotobyname (TrapContext *context) { struct socketbase *sb = get_socketbase (context); host_getprotobyname (context, sb, m68k_areg (regs, 0)); return sb->sb_errno ? 0 : sb->protoent; } /* getprotobynumber(proto)(d0) */ static uae_u32 REGPARAM2 bsdsocklib_getprotobynumber (TrapContext *context) { struct socketbase *sb = get_socketbase (context); host_getprotobynumber (context, sb, m68k_dreg (regs, 0)); return sb->sb_errno ? 0 : sb->protoent; } /* *------ AmiTCP/IP 1.1 extensions */ /* Dup2Socket(fd1, fd2)(d0/d1) */ static uae_u32 REGPARAM2 bsdsocklib_Dup2Socket (TrapContext *context) { struct socketbase *sb = get_socketbase (context); return host_dup2socket (context, sb, m68k_dreg (regs, 0), m68k_dreg (regs, 1)); } static uae_u32 REGPARAM2 bsdsocklib_sendmsg (TrapContext *context) { write_log (_T("bsdsocket: UNSUPPORTED: sendmsg()\n")); return 0; } static uae_u32 REGPARAM2 bsdsocklib_recvmsg (TrapContext *context) { write_log (_T("bsdsocket: UNSUPPORTED: recvmsg()\n")); return 0; } static uae_u32 REGPARAM2 bsdsocklib_gethostname (TrapContext *context) { return host_gethostname (m68k_areg (regs, 0), m68k_dreg (regs, 0)); } static uae_u32 REGPARAM2 bsdsocklib_gethostid (TrapContext *context) { write_log (_T("bsdsocket: WARNING: Process '%s' calls deprecated function gethostid() - returning 127.0.0.1\n"), get_real_address (get_long (gettask (context) + 10))); return 0x7f000001; } static const TCHAR *errortexts[] = {_T("No error"), _T("Operation not permitted"), _T("No such file or directory"), _T("No such process"), _T("Interrupted system call"), _T("Input/output error"), _T("Device not configured"), _T("Argument list too long"), _T("Exec format error"), _T("Bad file descriptor"), _T("No child processes"), _T("Resource deadlock avoided"), _T("Cannot allocate memory"), _T("Permission denied"), _T("Bad address"), _T("Block device required"), _T("Device busy"), _T("Object exists"), _T("Cross-device link"), _T("Operation not supported by device"), _T("Not a directory"), _T("Is a directory"), _T("Invalid argument"), _T("Too many open files in system"), _T("Too many open files"), _T("Inappropriate ioctl for device"), _T("Text file busy"), _T("File too large"), _T("No space left on device"), _T("Illegal seek"), _T("Read-only file system"), _T("Too many links"), _T("Broken pipe"), _T("Numerical argument out of domain"), _T("Result too large"), _T("Resource temporarily unavailable"), _T("Operation now in progress"), _T("Operation already in progress"), _T("Socket operation on non-socket"), _T("Destination address required"), _T("Message too long"), _T("Protocol wrong type for socket"), _T("Protocol not available"), _T("Protocol not supported"), _T("Socket type not supported"), _T("Operation not supported"), _T("Protocol family not supported"), _T("Address family not supported by protocol family"), _T("Address already in use"), _T("Can't assign requested address"), _T("Network is down"), _T("Network is unreachable"), _T("Network dropped connection on reset"), _T("Software caused connection abort"), _T("Connection reset by peer"), _T("No buffer space available"), _T("Socket is already connected"), _T("Socket is not connected"), _T("Can't send after socket shutdown"), _T("Too many references: can't splice"), _T("Connection timed out"), _T("Connection refused"), _T("Too many levels of symbolic links"), _T("File name too long"), _T("Host is down"), _T("No route to host"), _T("Directory not empty"), _T("Too many processes"), _T("Too many users"), _T("Disc quota exceeded"), _T("Stale NFS file handle"), _T("Too many levels of remote in path"), _T("RPC struct is bad"), _T("RPC version wrong"), _T("RPC prog. not avail"), _T("Program version wrong"), _T("Bad procedure for program"), _T("No locks available"), _T("Function not implemented"), _T("Inappropriate file type or format"), _T("PError 0")}; static uae_u32 errnotextptrs[sizeof (errortexts) / sizeof (*errortexts)]; static const uae_u32 number_sys_error = sizeof (errortexts) / sizeof (*errortexts); /* *------ syslog functions */ /* Syslog(level, format, ap)(d0/a0/a1) */ static uae_u32 REGPARAM2 bsdsocklib_vsyslog (TrapContext *context) { #if 0 struct socketbase *sb = get_socketbase (context); uae_char format_dst[512]; char out[256]; TCHAR *s; uae_u8 paramtable[32 * 4]; int paramcnt, len; uae_char *found = NULL; uae_u32 level = m68k_dreg (regs, 0); uaecptr format = m68k_areg (regs, 0); uaecptr params = m68k_areg (regs, 1); strcpyah_safe (format_dst, format, sizeof format_dst); ((uae_u8**)paramtable)[0] = (uae_u8*)format_dst; paramcnt = 4; for (int i = 0; format_dst[i]; i++) { if (format_dst[i] == '%') { if (found) found = NULL; else found = &format_dst[i]; len = 4; } else if (found) { char c = toupper (format_dst[i]); if (c < 'A' || c > 'Z') continue; if (c == 'H') { len = 2; continue; } if (c == 'M') { int err = sb->sb_errno; if (sb->sb_errno < 0 || sb->sb_errno >= sizeof (errortexts) / sizeof (*errortexts)) err = sizeof (errortexts) / sizeof (*errortexts) - 1; int errlen = _tcslen (errortexts[err]) - (&format_dst[i] - found); memmove (&format_dst[i] + errlen, &format_dst[i] + 1, strlen (&format_dst[i] + 1) + 1); ua_copy (found, sizeof format_dst, errortexts[err]); i += errlen - 1; continue; } if (c == 'P' || c == 'S' || c == 'N') { uaecptr pt = get_long (params); if (!valid_address (pt, 2)) goto end; ((uae_u8**)(paramtable + paramcnt))[0] = get_real_address (pt); params += 4; paramcnt += sizeof (uae_u8*); } else { if (len == 2) ((uae_u16*)(paramtable + paramcnt))[0] = get_word (params); else ((uae_u32*)(paramtable + paramcnt))[0] = get_long (params); params += len; paramcnt += len; } found = NULL; } } va_list parms; va_start (parms, paramtable); _vsnprintf (out, sizeof out, format_dst, parms); va_end (parms); s = au (out); write_log (_T("SYSLOG: %s\n"), s); xfree (s); end: #endif return 0; } static const TCHAR *herrortexts[] = {_T("No error"), _T("Unknown host"), _T("Host name lookup failure"), _T("Unknown server error"), _T("No address associated with name")}; static uae_u32 herrnotextptrs[sizeof (herrortexts) / sizeof (*herrortexts)]; static const uae_u32 number_host_error = sizeof (herrortexts) / sizeof (*herrortexts); static const TCHAR *sana2io_errlist[] = { _T("No error"), /* S2ERR_NO_ERROR */ _T("Resource allocation failure"), /* S2ERR_NO_RESOURCES */ _T("Unknown error code (2)"), _T("Invalid argument"), /* S2ERR_BAD_ARGUMENT */ _T("Inappropriate state"), /* S2ERR_BAD_STATE */ _T("Invalid address"), /* S2ERR_BAD_ADDRESS */ _T("Requested packet too large"), /* S2ERR_MTU_EXCEEDED */ _T("Unknown error (7)"), _T("Command is not supporter"), /* S2ERR_NOT_SUPPORTED */ _T("Driver software error detected"), /* S2ERR_SOFTWARE */ _T("Device driver is offline"), /* S2ERR_OUTOFSERVICE */ _T("Transmission attempt failed") /* S2ERR_TX_FAILURE */ }; static uae_u32 sana2iotextptrs[sizeof (sana2io_errlist) / sizeof (*sana2io_errlist)]; static const uae_u32 number_sana2io_error = sizeof (sana2io_errlist) / sizeof (*sana2io_errlist); static const TCHAR *sana2wire_errlist[] = { _T("Generic error: 0"), /* S2WERR_GENERIC_ERROR */ _T("Unit not configured"), /* S2WERR_NOT_CONFIGURED */ _T("Unit is currently online"), /* S2WERR_UNIT_ONLINE */ _T("Unit is currently offline"), /* S2WERR_UNIT_OFFLINE */ _T("Protocol already tracked"), /* S2WERR_ALREADY_TRACKED */ _T("Protocol not tracked"), /* S2WERR_NOT_TRACKED */ _T("Buff management function error"), /* S2WERR_BUFF_ERROR */ _T("Source address error"), /* S2WERR_SRC_ADDRESS */ _T("Destination address error"), /* S2WERR_DST_ADDRESS */ _T("Broadcast address error"), /* S2WERR_BAD_BROADCAST */ _T("Multicast address error"), /* S2WERR_BAD_MULTICAST */ _T("Multicast address list full"), /* S2WERR_MULTICAST_FULL */ _T("Unsupported event class"), /* S2WERR_BAD_EVENT */ _T("Statdata failed sanity check"), /* S2WERR_BAD_STATDATA */ _T("Unknown wire error (14)"), _T("Attempt to config twice"), /* S2WERR_IS_CONFIGURED */ _T("Null pointer detected"), /* S2WERR_NULL_POINTER */ _T("tx failed - too many retries"), /* S2WERR_TOO_MANY_RETIRES */ _T("Driver fixable HW error") /* S2WERR_RCVREL_HDW_ERR */ }; static uae_u32 sana2wiretextptrs[sizeof (sana2wire_errlist) / sizeof (*sana2wire_errlist)]; static const uae_u32 number_sana2wire_error = sizeof (sana2wire_errlist) / sizeof (*sana2wire_errlist); static const TCHAR *io_errlist[] = { _T("Unknown error"), /* 0 */ _T("Device or unit failed to open"), /* IOERR_OPENFAIL */ _T("Request aborted"), /* IOERR_ABORTED */ _T("Command not supported by device"), /* IOERR_NOCMD */ _T("Invalid length"), /* IOERR_BADLENGTH */ _T("Invalid address"), /* IOERR_BADADDRESS */ _T("Requested unit is busy"), /* IOERR_UNITBUSY */ _T("Hardware self-test failed") /* IOERR_SELFTEST */ }; static uae_u32 iotextptrs[sizeof (io_errlist) / sizeof (*io_errlist)]; static const uae_u32 number_io_error = sizeof (io_errlist) / sizeof (*io_errlist); static const TCHAR * const strErr = _T("Errlist lookup error"); static uae_u32 strErrptr; #define TAG_DONE (0L) /* terminates array of TagItems. ti_Data unused */ #define TAG_IGNORE (1L) /* ignore this item, not end of array */ #define TAG_MORE (2L) /* ti_Data is pointer to another array of TagItems */ #define TAG_SKIP (3L) /* skip this and the next ti_Data items */ #define TAG_USER ((uae_u32)(1L << 31)) #define SBTF_VAL 0x0000 #define SBTF_REF 0x8000 #define SBTB_CODE 1 #define SBTS_CODE 0x3FFF #define SBTM_CODE(tag) ((((UWORD)(tag)) >> SBTB_CODE) & SBTS_CODE) #define SBTF_GET 0x0 #define SBTF_SET 0x1 #define SBTM_GETREF(code) \ (TAG_USER | SBTF_REF | (((code) & SBTS_CODE) << SBTB_CODE)) #define SBTM_GETVAL(code) (TAG_USER | (((code) & SBTS_CODE) << SBTB_CODE)) #define SBTM_SETREF(code) \ (TAG_USER | SBTF_REF | (((code) & SBTS_CODE) << SBTB_CODE) | SBTF_SET) #define SBTM_SETVAL(code) \ (TAG_USER | (((code) & SBTS_CODE) << SBTB_CODE) | SBTF_SET) #define SBTC_BREAKMASK 1 #define SBTC_SIGIOMASK 2 #define SBTC_SIGURGMASK 3 #define SBTC_SIGEVENTMASK 4 #define SBTC_ERRNO 6 #define SBTC_HERRNO 7 #define SBTC_DTABLESIZE 8 #define SBTC_FDCALLBACK 9 #define SBTC_LOGSTAT 10 #define SBTC_LOGTAGPTR 11 #define SBTC_LOGFACILITY 12 #define SBTC_LOGMASK 13 #define SBTC_ERRNOSTRPTR 14 /* */ #define SBTC_HERRNOSTRPTR 15 /* */ #define SBTC_IOERRNOSTRPTR 16 /* */ #define SBTC_S2ERRNOSTRPTR 17 /* */ #define SBTC_S2WERRNOSTRPTR 18 /* */ #define SBTC_ERRNOBYTEPTR 21 #define SBTC_ERRNOWORDPTR 22 #define SBTC_ERRNOLONGPTR 24 #define SBTC_HERRNOLONGPTR 25 #define SBTC_RELEASESTRPTR 29 #define LOG_FACMASK 0x03f8 static void tagcopy (uae_u32 currtag, uae_u32 currval, uae_u32 tagptr, uae_u32 * ptr) { switch (currtag & 0x8001) { case 0x0000: /* SBTM_GETVAL */ put_long (tagptr + 4, ptr ? *ptr : 0); break; case 0x8000: /* SBTM_GETREF */ put_long (currval, ptr ? *ptr : 0); break; case 0x0001: /* SBTM_SETVAL */ if (ptr) *ptr = currval; break; default: /* SBTM_SETREF */ if (ptr) *ptr = get_long (currval); break; } } static uae_u32 REGPARAM2 bsdsocklib_SocketBaseTagList (TrapContext *context) { struct socketbase *sb = get_socketbase (context); uae_u32 tagptr = m68k_areg (regs, 0); uae_u32 tagsprocessed = 0; uae_u32 currtag; uae_u32 currval; BSDTRACE ((_T("SocketBaseTagList("))); for (;;) { currtag = get_long (tagptr); currval = get_long (tagptr + 4); tagsprocessed++; if (!(currtag & TAG_USER)) { switch (currtag) { case TAG_DONE: BSDTRACE ((_T("TAG_DONE"))); tagsprocessed = 0; goto done; case TAG_IGNORE: BSDTRACE ((_T("TAG_IGNORE"))); break; case TAG_MORE: BSDTRACE ((_T("TAG_MORE(0x%lx)"), currval)); tagptr = currval; break; case TAG_SKIP: BSDTRACE ((_T("TAG_SKIP(%d)"), currval)); tagptr += currval * 8; break; default: write_log (_T("bsdsocket: WARNING: Unsupported tag type (%08x) in SocketBaseTagList(%x)\n"), currtag, m68k_areg (regs, 0)); goto done; } } else { BSDTRACE ((_T("SBTM_"))); BSDTRACE ((currtag & 0x0001 ? _T("SET") : _T("GET"))); BSDTRACE ((currtag & 0x8000 ? _T("REF(") : _T("VAL("))); switch ((currtag >> 1) & SBTS_CODE) { case SBTC_BREAKMASK: BSDTRACE ((_T("SBTC_BREAKMASK),0x%x,0x%x"), currval, sb->eintrsigs)); tagcopy (currtag, currval, tagptr, &sb->eintrsigs); break; case SBTC_SIGIOMASK: BSDTRACE ((_T("SBTC_SIGIOMASK),0x%x,0x%x"), currval, sb->eventsigs)); tagcopy (currtag, currval, tagptr, &sb->eventsigs); break; case SBTC_SIGURGMASK: BSDTRACE ((_T("SBTC_SIGURGMASK),0x%x"), currval)); break; case SBTC_SIGEVENTMASK: BSDTRACE ((_T("SBTC_SIGEVENTMASK),0x%x,0x%x"), currval, sb->eventsigs)); tagcopy (currtag, currval, tagptr, &sb->eventsigs); break; case SBTC_ERRNO: BSDTRACE ((_T("SBTC_ERRNO),%x,%d"), currval, sb->sb_errno)); tagcopy (currtag, currval, tagptr, (uae_u32*)&sb->sb_errno); break; case SBTC_HERRNO: BSDTRACE ((_T("SBTC_HERRNO),%x,%d"), currval, sb->sb_herrno)); tagcopy (currtag, currval, tagptr, (uae_u32*)&sb->sb_herrno); break; case SBTC_DTABLESIZE: BSDTRACE ((_T("SBTC_DTABLESIZE),0x%lx"), currval)); if (currtag & 1) { bsdsocklib_SetDTableSize(sb, currval); } else { put_long (tagptr + 4, sb->dtablesize); } break; case SBTC_FDCALLBACK: BSDTRACE ((_T("SBTC_FDCALLBACK),%08x"), currval)); tagcopy (currtag, currval, tagptr, &sb->fdcallback); break; case SBTC_LOGSTAT: BSDTRACE ((_T("SBTC_LOGSTAT),%08x"), currval)); tagcopy (currtag, currval, tagptr, &sb->logstat); sb->logstat &= 0xff; break; case SBTC_LOGTAGPTR: BSDTRACE ((_T("SBTC_LOGTAGPTR),%08x"), currval)); tagcopy (currtag, currval, tagptr, &sb->logptr); break; case SBTC_LOGFACILITY: BSDTRACE ((_T("SBTC_LOGFACILITY),%08x"), currval)); if (((currtag & 1) && currval != 0 && (currval & ~LOG_FACMASK)) || !(currtag & 1)) tagcopy (currtag, currval, tagptr, &sb->logfacility); break; case SBTC_LOGMASK: BSDTRACE ((_T("SBTC_LOGMASK),%08x"), currval)); tagcopy (currtag, currval, tagptr, &sb->logmask); sb->logmask &= 0xff; break; case SBTC_IOERRNOSTRPTR: if (currtag & 1) { BSDTRACE ((_T("IOERRNOSTRPTR),invalid"))); goto done; } else { unsigned long ulTmp; if (currtag & 0x8000) { /* SBTM_GETREF */ ulTmp = get_long (currval); } else { /* SBTM_GETVAL */ ulTmp = currval; } BSDTRACE ((_T("IOERRNOSTRPTR),%d"), ulTmp)); if (ulTmp < number_sys_error) { tagcopy (currtag, currval, tagptr, &iotextptrs[ulTmp]); } else { tagcopy (currtag, currval, tagptr, &strErrptr); } } break; case SBTC_S2ERRNOSTRPTR: if (currtag & 1) { BSDTRACE ((_T("S2ERRNOSTRPTR),invalid"))); goto done; } else { unsigned long ulTmp; if (currtag & 0x8000) { /* SBTM_GETREF */ ulTmp = get_long (currval); } else { /* SBTM_GETVAL */ ulTmp = currval; } BSDTRACE ((_T("S2ERRNOSTRPTR),%d"), ulTmp)); if (ulTmp < number_sys_error) { tagcopy (currtag, currval, tagptr, &sana2iotextptrs[ulTmp]); } else { tagcopy (currtag, currval, tagptr, &strErrptr); } } break; case SBTC_S2WERRNOSTRPTR: if (currtag & 1) { BSDTRACE ((_T("S2WERRNOSTRPTR),invalid"))); goto done; } else { unsigned long ulTmp; if (currtag & 0x8000) { /* SBTM_GETREF */ ulTmp = get_long (currval); } else { /* SBTM_GETVAL */ ulTmp = currval; } BSDTRACE ((_T("S2WERRNOSTRPTR),%d"), ulTmp)); if (ulTmp < number_sys_error) { tagcopy (currtag, currval, tagptr, &sana2wiretextptrs[ulTmp]); } else { tagcopy (currtag, currval, tagptr, &strErrptr); } } break; case SBTC_ERRNOSTRPTR: if (currtag & 1) { BSDTRACE ((_T("ERRNOSTRPTR),invalid"))); goto done; } else { unsigned long ulTmp; if (currtag & 0x8000) { /* SBTM_GETREF */ ulTmp = get_long (currval); } else { /* SBTM_GETVAL */ ulTmp = currval; } BSDTRACE ((_T("ERRNOSTRPTR),%d"), ulTmp)); if (ulTmp < number_sys_error) { tagcopy (currtag, currval, tagptr, &errnotextptrs[ulTmp]); } else { tagcopy (currtag, currval, tagptr, &strErrptr); } } break; case SBTC_HERRNOSTRPTR: if (currtag & 1) { BSDTRACE ((_T("HERRNOSTRPTR),invalid"))); goto done; } else { unsigned long ulTmp; if (currtag & 0x8000) { /* SBTM_GETREF */ ulTmp = get_long (currval); } else { /* SBTM_GETVAL */ ulTmp = currval; } BSDTRACE ((_T("HERRNOSTRPTR),%d"), ulTmp)); if (ulTmp < number_host_error) { tagcopy (currtag, currval, tagptr, &herrnotextptrs[ulTmp]); } else { tagcopy (currtag, currval, tagptr, &strErrptr); } } break; case SBTC_ERRNOBYTEPTR: BSDTRACE ((_T("SBTC_ERRNOBYTEPTR),0x%lx"), currval)); tagcopy (currtag, currval, tagptr, &sb->errnoptr); sb->errnosize = 1; break; case SBTC_ERRNOWORDPTR: BSDTRACE ((_T("SBTC_ERRNOWORDPTR),0x%lx"), currval)); tagcopy (currtag, currval, tagptr, &sb->errnoptr); sb->errnosize = 2; break; case SBTC_ERRNOLONGPTR: BSDTRACE ((_T("SBTC_ERRNOLONGPTR),0x%lx"), currval)); tagcopy (currtag, currval, tagptr, &sb->errnoptr); sb->errnosize = 4; break; case SBTC_HERRNOLONGPTR: BSDTRACE ((_T("SBTC_HERRNOLONGPTR),0x%lx"), currval)); tagcopy (currtag, currval, tagptr, &sb->herrnoptr); sb->herrnosize = 4; break; default: write_log (_T("bsdsocket: WARNING: Unsupported tag type (%08x=%d) in SocketBaseTagList(%x)\n"), currtag, (currtag / 2) & SBTS_CODE, m68k_areg (regs, 0)); goto done; } } BSDTRACE ((_T(","))); tagptr += 8; } done: BSDTRACE ((_T(") -> %d\n"), tagsprocessed)); return tagsprocessed; } static uae_u32 REGPARAM2 bsdsocklib_GetSocketEvents (TrapContext *context) { #ifdef WINDOWS struct socketbase *sb = get_socketbase (context); int i; int flags; uae_u32 ptr = m68k_areg (regs, 0); BSDTRACE ((_T("GetSocketEvents(0x%x) -> "), ptr)); for (i = sb->dtablesize; i--; sb->eventindex++) { if (sb->eventindex >= sb->dtablesize) sb->eventindex = 0; if (sb->mtable[sb->eventindex]) { flags = sb->ftable[sb->eventindex] & SET_ALL; if (flags) { sb->ftable[sb->eventindex] &= ~SET_ALL; put_long (m68k_areg (regs, 0), flags >> 8); BSDTRACE ((_T("%d (0x%x)\n"), sb->eventindex + 1, flags >> 8)); return sb->eventindex; // xxx } } } #endif BSDTRACE ((_T("-1\n"))); return -1; } static uae_u32 REGPARAM2 bsdsocklib_getdtablesize (TrapContext *context) { return get_socketbase (context)->dtablesize; } static uae_u32 REGPARAM2 bsdsocklib_null (TrapContext *context) { return 0; } static uae_u32 REGPARAM2 bsdsocklib_init (TrapContext *context) { uae_u32 tmp1; int i; write_log (_T("Creating UAE bsdsocket.library 4.1\n")); if (SockLibBase) bsdlib_reset (); m68k_areg (regs, 0) = functable; m68k_areg (regs, 1) = datatable; m68k_areg (regs, 2) = 0; m68k_dreg (regs, 0) = LIBRARY_SIZEOF; m68k_dreg (regs, 1) = 0; tmp1 = CallLib (context, m68k_areg (regs, 6), -0x54); /* MakeLibrary */ if (!tmp1) { write_log (_T("bsdoscket: FATAL: Cannot create bsdsocket.library!\n")); return 0; } m68k_areg (regs, 1) = tmp1; CallLib (context, m68k_areg (regs, 6), -0x18c); /* AddLibrary */ SockLibBase = tmp1; /* Install error strings in Amiga memory */ tmp1 = 0; for (i = number_sys_error; i--;) tmp1 += _tcslen (errortexts[i]) + 1; for (i = number_host_error; i--;) tmp1 += _tcslen (herrortexts[i]) + 1; for (i = number_sana2io_error; i--;) tmp1 += _tcslen (sana2io_errlist[i]) + 1; for (i = number_sana2wire_error; i--;) tmp1 += _tcslen (sana2wire_errlist[i]) + 1; tmp1 += _tcslen (strErr) + 1; m68k_dreg (regs, 0) = tmp1; m68k_dreg (regs, 1) = 0; tmp1 = CallLib (context, m68k_areg (regs, 6), -0xC6); /* AllocMem */ if (!tmp1) { write_log (_T("bsdsocket: FATAL: Ran out of memory while creating bsdsocket.library!\n")); return 0; } for (i = 0; i < (int) (number_sys_error); i++) errnotextptrs[i] = addstr (&tmp1, errortexts[i]); for (i = 0; i < (int) (number_host_error); i++) herrnotextptrs[i] = addstr (&tmp1, herrortexts[i]); for (i = 0; i < (int) (number_sana2io_error); i++) sana2iotextptrs[i] = addstr (&tmp1, sana2io_errlist[i]); for (i = 0; i < (int) (number_sana2wire_error); i++) sana2wiretextptrs[i] = addstr (&tmp1, sana2wire_errlist[i]); strErrptr = addstr (&tmp1, strErr); #if 0 /* @@@ someone please implement a proper interrupt handler setup here :) */ tmp1 = here (); calltrap (deftrap2 (bsdsock_int_handler, TRAPFLAG_EXTRA_STACK | TRAPFLAG_NO_RETVAL, "bsdsock_int_handler")); dw (0x4ef9); dl (get_long (context->regs.vbr + 0x78)); put_long (context->regs.vbr + 0x78, tmp1); #endif m68k_dreg (regs, 0) = 1; return 0; } void bsdlib_reset (void) { SB, *nsb; int i; if (!SockLibBase) return; SockLibBase = 0; write_log (_T("BSDSOCK: cleanup start..\n")); host_sbcleanup (NULL); for (sb = socketbases; sb; sb = nsb) { nsb = sb->next; write_log (_T("BSDSOCK: cleanup start socket %x\n"), sb); host_sbcleanup (sb); free (sb->dtable); free (sb->ftable); free (sb); } write_log (_T("BSDSOCK: cleanup end\n")); socketbases = NULL; #if 1 sbsigqueue = NULL; #endif for (i = 0; i < SOCKPOOLSIZE; i++) { if (sockdata->sockpoolids[i] != UNIQUE_ID) { sockdata->sockpoolids[i] = UNIQUE_ID; host_closesocketquick (sockdata->sockpoolsocks[i]); } } host_sbreset (); write_log (_T("BSDSOCK: cleanup finished\n")); } static const TrapHandler sockfuncs[] = { bsdsocklib_init, bsdsocklib_Open, bsdsocklib_Close, bsdsocklib_Expunge, bsdsocklib_socket, bsdsocklib_bind, bsdsocklib_listen, bsdsocklib_accept, bsdsocklib_connect, bsdsocklib_sendto, bsdsocklib_send, bsdsocklib_recvfrom, bsdsocklib_recv, bsdsocklib_shutdown, bsdsocklib_setsockopt, bsdsocklib_getsockopt, bsdsocklib_getsockname, bsdsocklib_getpeername, bsdsocklib_IoctlSocket, bsdsocklib_CloseSocket, bsdsocklib_WaitSelect, bsdsocklib_SetSocketSignals, bsdsocklib_getdtablesize, bsdsocklib_ObtainSocket, bsdsocklib_ReleaseSocket, bsdsocklib_ReleaseCopyOfSocket, bsdsocklib_Errno, bsdsocklib_SetErrnoPtr, bsdsocklib_Inet_NtoA, bsdsocklib_inet_addr, bsdsocklib_Inet_LnaOf, bsdsocklib_Inet_NetOf, bsdsocklib_Inet_MakeAddr, bsdsocklib_inet_network, bsdsocklib_gethostbyname, bsdsocklib_gethostbyaddr, bsdsocklib_getnetbyname, bsdsocklib_getnetbyaddr, bsdsocklib_getservbyname, bsdsocklib_getservbyport, bsdsocklib_getprotobyname, bsdsocklib_getprotobynumber, bsdsocklib_vsyslog, bsdsocklib_Dup2Socket, bsdsocklib_sendmsg, bsdsocklib_recvmsg, bsdsocklib_gethostname, bsdsocklib_gethostid, bsdsocklib_SocketBaseTagList, bsdsocklib_GetSocketEvents }; static const TCHAR * const funcnames[] = { _T("bsdsocklib_init"), _T("bsdsocklib_Open"), _T("bsdsocklib_Close"), _T("bsdsocklib_Expunge"), _T("bsdsocklib_socket"), _T("bsdsocklib_bind"), _T("bsdsocklib_listen"), _T("bsdsocklib_accept"), _T("bsdsocklib_connect"), _T("bsdsocklib_sendto"), _T("bsdsocklib_send"), _T("bsdsocklib_recvfrom"), _T("bsdsocklib_recv"), _T("bsdsocklib_shutdown"), _T("bsdsocklib_setsockopt"), _T("bsdsocklib_getsockopt"), _T("bsdsocklib_getsockname"), _T("bsdsocklib_getpeername"), _T("bsdsocklib_IoctlSocket"), _T("bsdsocklib_CloseSocket"), _T("bsdsocklib_WaitSelect"), _T("bsdsocklib_SetSocketSignals"), _T("bsdsocklib_getdtablesize"), _T("bsdsocklib_ObtainSocket"), _T("bsdsocklib_ReleaseSocket"), _T("bsdsocklib_ReleaseCopyOfSocket"), _T("bsdsocklib_Errno"), _T("bsdsocklib_SetErrnoPtr"), _T("bsdsocklib_Inet_NtoA"), _T("bsdsocklib_inet_addr"), _T("bsdsocklib_Inet_LnaOf"), _T("bsdsocklib_Inet_NetOf"), _T("bsdsocklib_Inet_MakeAddr"), _T("bsdsocklib_inet_network"), _T("bsdsocklib_gethostbyname"), _T("bsdsocklib_gethostbyaddr"), _T("bsdsocklib_getnetbyname"), _T("bsdsocklib_getnetbyaddr"), _T("bsdsocklib_getservbyname"), _T("bsdsocklib_getservbyport"), _T("bsdsocklib_getprotobyname"), _T("bsdsocklib_getprotobynumber"), _T("bsdsocklib_vsyslog"), _T("bsdsocklib_Dup2Socket"), _T("bsdsocklib_sendmsg"), _T("bsdsocklib_recvmsg"), _T("bsdsocklib_gethostname"), _T("bsdsocklib_gethostid"), _T("bsdsocklib_SocketBaseTagList"), _T("bsdsocklib_GetSocketEvents") }; static uae_u32 sockfuncvecs[sizeof (sockfuncs) / sizeof (*sockfuncs)]; static uae_u32 res_name, res_id, res_init; uaecptr bsdlib_startup (uaecptr resaddr) { if (res_name == 0 || !currprefs.socket_emu) return resaddr; put_word (resaddr + 0x0, 0x4AFC); put_long (resaddr + 0x2, resaddr); put_long (resaddr + 0x6, resaddr + 0x1A); /* Continue scan here */ put_word (resaddr + 0xA, 0x8004); /* RTF_AUTOINIT, RT_VERSION */ put_word (resaddr + 0xC, 0x0970); /* NT_LIBRARY, RT_PRI */ put_long (resaddr + 0xE, res_name); put_long (resaddr + 0x12, res_id); put_long (resaddr + 0x16, res_init); resaddr += 0x1A; return resaddr; } void bsdlib_install (void) { int i; if (!sockdata) { sockdata = xcalloc (struct sockd, 1); for (i = 0; i < SOCKPOOLSIZE; i++) sockdata->sockpoolids[i] = UNIQUE_ID; } if (!init_socket_layer ()) return; res_name = ds (_T("bsdsocket.library")); res_id = ds (_T("UAE bsdsocket.library 4.1")); for (i = 0; i < (int) (sizeof (sockfuncs) / sizeof (sockfuncs[0])); i++) { sockfuncvecs[i] = here (); calltrap (deftrap2 (sockfuncs[i], TRAPFLAG_EXTRA_STACK, funcnames[i])); dw (RTS); } /* FuncTable */ functable = here (); for (i = 1; i < 4; i++) dl (sockfuncvecs[i]); /* Open / Close / Expunge */ dl (EXPANSION_nullfunc); /* Null */ for (i = 4; i < (int) (sizeof (sockfuncs) / sizeof (sockfuncs[0])); i++) dl (sockfuncvecs[i]); dl (0xFFFFFFFF); /* end of table */ /* DataTable */ datatable = here (); dw (0xE000); /* INITBYTE */ dw (0x0008); /* LN_TYPE */ dw (0x0900); /* NT_LIBRARY */ dw (0xE000); /* INITBYTE */ dw (0x0009); /* LN_PRI */ dw (0xCE00); /* -50 */ dw (0xC000); /* INITLONG */ dw (0x000A); /* LN_NAME */ dl (res_name); dw (0xE000); /* INITBYTE */ dw (0x000E); /* LIB_FLAGS */ dw (0x0600); /* LIBF_SUMUSED | LIBF_CHANGED */ dw (0xD000); /* INITWORD */ dw (0x0014); /* LIB_VERSION */ dw (0x0004); dw (0xD000); dw (0x0016); /* LIB_REVISION */ dw (0x0001); dw (0xC000); dw (0x0018); /* LIB_IDSTRING */ dl (res_id); dl (0x00000000); /* end of table */ res_init = here (); dl (512); dl (functable); dl (datatable); dl (*sockfuncvecs); write_log (_T("bsdsocket.library installed\n")); } #endif /* ! BSDSOCKET */ fs-uae-2.2.3+dfsg/src/rommgr.cpp0000644000175000017500000012667612162366655016675 0ustar glaubitzglaubitz /* * UAE - The Un*x Amiga Emulator * * ROM file management * */ #include "sysconfig.h" #include "sysdeps.h" #include "options.h" #include "uae.h" #include "gui.h" #include "rommgr.h" #include "uae/memory.h" #include "zfile.h" #include "crc32.h" #include "autoconf.h" static struct romlist *rl; static int romlist_cnt; struct romlist *romlist_getit (void) { return rl; } int romlist_count (void) { return romlist_cnt; } TCHAR *romlist_get (const struct romdata *rd) { int i; if (!rd) return 0; for (i = 0; i < romlist_cnt; i++) { if (rl[i].rd->id == rd->id) return rl[i].path; } return 0; } static struct romlist *romlist_getrl (const struct romdata *rd) { int i; if (!rd) return 0; for (i = 0; i < romlist_cnt; i++) { if (rl[i].rd == rd) return &rl[i]; } return 0; } static void romlist_cleanup (void); void romlist_add (const TCHAR *path, struct romdata *rd) { struct romlist *rl2; if (path == NULL || rd == NULL) { romlist_cleanup (); return; } romlist_cnt++; rl = xrealloc (struct romlist, rl, romlist_cnt); rl2 = rl + romlist_cnt - 1; rl2->path = my_strdup (path); rl2->rd = rd; } struct romdata *getromdatabypath (const TCHAR *path) { int i; for (i = 0; i < romlist_cnt; i++) { struct romdata *rd = rl[i].rd; if (rd->configname && path[0] == ':') { if (!_tcscmp(path + 1, rd->configname)) return rd; } if (!_tcscmp(rl[i].path, path)) return rl[i].rd; } return NULL; } #define NEXT_ROM_ID 74 static struct romheader romheaders[] = { { _T("Freezer Cartridges"), 1 }, { _T("Arcadia Games"), 2 }, { NULL, 0 } }; #define ALTROM(id,grp,num,size,flags,crc32,a,b,c,d,e) \ { _T("X"), 0, 0, 0, 0, 0, size, id, 0, 0, flags, (grp << 16) | num, 0, NULL, crc32, a, b, c, d, e }, #define ALTROMPN(id,grp,num,size,flags,pn,crc32,a,b,c,d,e) \ { _T("X"), 0, 0, 0, 0, 0, size, id, 0, 0, flags, (grp << 16) | num, 0, pn, crc32, a, b, c, d, e }, static struct romdata roms[] = { { _T(" AROS KS ROM (built-in)"), 0, 0, 0, 0, _T("AROS\0"), 524288 * 2, 66, 0, 0, ROMTYPE_KICK, 0, 0, NULL, 0xffffffff, 0, 0, 0, 0, 0, _T("AROS") }, { _T("Cloanto Amiga Forever ROM key"), 0, 0, 0, 0, 0, 2069, 0, 0, 1, ROMTYPE_KEY, 0, 0, NULL, 0x869ae1b1, 0x801bbab3,0x2e3d3738,0x6dd1636d,0x4f1d6fa7,0xe21d5874 }, { _T("Cloanto Amiga Forever 2006 ROM key"), 0, 0, 0, 0, 0, 750, 48, 0, 1, ROMTYPE_KEY, 0, 0, NULL, 0xb01c4b56, 0xbba8e5cd,0x118b8d92,0xafed5693,0x5eeb9770,0x2a662d8f }, { _T("Cloanto Amiga Forever 2010 ROM key"), 0, 0, 0, 0, 0, 1544, 73, 0, 1, ROMTYPE_KEY, 0, 0, NULL, 0x8c4dd05c, 0x05034f62,0x0b5bb7b2,0x86954ea9,0x164fdb90,0xfb2897a4 }, { _T("KS ROM v1.0 (A1000)(NTSC)"), 1, 0, 1, 0, _T("A1000\0"), 262144, 1, 0, 0, ROMTYPE_KICK, 0, 0, NULL, 0x299790ff, 0x00C15406,0xBEB4B8AB,0x1A16AA66,0xC05860E1,0xA7C1AD79 }, { _T("KS ROM v1.1 (A1000)(NTSC)"), 1, 1, 31, 34, _T("A1000\0"), 262144, 2, 0, 0, ROMTYPE_KICK, 0, 0, NULL, 0xd060572a, 0x4192C505,0xD130F446,0xB2ADA6BD,0xC91DAE73,0x0ACAFB4C}, { _T("KS ROM v1.1 (A1000)(PAL)"), 1, 1, 31, 34, _T("A1000\0"), 262144, 3, 0, 0, ROMTYPE_KICK, 0, 0, NULL, 0xec86dae2, 0x16DF8B5F,0xD524C5A1,0xC7584B24,0x57AC15AF,0xF9E3AD6D }, { _T("KS ROM v1.2 (A1000)"), 1, 2, 33, 166, _T("A1000\0"), 262144, 4, 0, 0, ROMTYPE_KICK, 0, 0, NULL, 0x9ed783d0, 0x6A7BFB5D,0xBD6B8F17,0x9F03DA84,0xD8D95282,0x67B6273B }, { _T("KS ROM v1.2 (A500,A1000,A2000)"), 1, 2, 33, 180, _T("A500\0A1000\0A2000\0"), 262144, 5, 0, 0, ROMTYPE_KICK, 0, 0, _T("315093-01"), 0xa6ce1636, 0x11F9E62C,0xF299F721,0x84835B7B,0x2A70A163,0x33FC0D88 }, { _T("KS ROM v1.3 (A500,A1000,A2000)"), 1, 3, 34, 5, _T("A500\0A1000\0A2000\0"), 262144, 6, 0, 0, ROMTYPE_KICK, 0, 0, _T("315093-02"), 0xc4f0f55f, 0x891E9A54,0x7772FE0C,0x6C19B610,0xBAF8BC4E,0xA7FCB785 }, { _T("KS ROM v1.3 (A3000)(SK)"), 1, 3, 34, 5, _T("A3000\0"), 262144, 32, 0, 0, ROMTYPE_KICK, 0, 0, NULL, 0xe0f37258, 0xC39BD909,0x4D4E5F4E,0x28C1411F,0x30869504,0x06062E87 }, { _T("KS ROM v1.4 (A3000)"), 1, 4, 36, 16, _T("A3000\0"), 524288, 59, 3, 0, ROMTYPE_KICK, 0, 0, NULL, 0xbc0ec13f, 0xF76316BF,0x36DFF14B,0x20FA349E,0xD02E4B11,0xDD932B07 }, ALTROMPN(59, 1, 1, 262144, ROMTYPE_EVEN, _T("390629-02"), 0x58327536,0xd1713d7f,0x31474a59,0x48e6d488,0xe3368606,0x1cf3d1e2) ALTROMPN(59, 1, 2, 262144, ROMTYPE_ODD , _T("390630-02"), 0xfe2f7fb9,0xc05c9c52,0xd014c66f,0x9019152b,0x3f2a2adc,0x2c678794) { _T("KS ROM v2.04 (A500+)"), 2, 4, 37, 175, _T("A500+\0"), 524288, 7, 0, 0, ROMTYPE_KICK, 0, 0, _T("390979-01"), 0xc3bdb240, 0xC5839F5C,0xB98A7A89,0x47065C3E,0xD2F14F5F,0x42E334A1 }, { _T("KS ROM v2.05 (A600)"), 2, 5, 37, 299, _T("A600\0"), 524288, 8, 0, 0, ROMTYPE_KICK, 0, 0, _T("391388-01"), 0x83028fb5, 0x87508DE8,0x34DC7EB4,0x7359CEDE,0x72D2E3C8,0xA2E5D8DB }, { _T("KS ROM v2.05 (A600HD)"), 2, 5, 37, 300, _T("A600HD\0A600\0"), 524288, 9, 0, 0, ROMTYPE_KICK, 0, 0, _T("391304-01"), 0x64466c2a, 0xF72D8914,0x8DAC39C6,0x96E30B10,0x859EBC85,0x9226637B }, { _T("KS ROM v2.05 (A600HD)"), 2, 5, 37, 350, _T("A600HD\0A600\0"), 524288, 10, 0, 0, ROMTYPE_KICK, 0, 0, _T("391304-02"), 0x43b0df7b, 0x02843C42,0x53BBD29A,0xBA535B0A,0xA3BD9A85,0x034ECDE4 }, { _T("KS ROM v2.04 (A3000)"), 2, 4, 37, 175, _T("A3000\0"), 524288, 71, 3, 0, ROMTYPE_KICK, 0, 0, NULL, 0x234a7233, 0xd82ebb59,0xafc53540,0xddf2d718,0x7ecf239b,0x7ea91590 }, ALTROMPN(71, 1, 1, 262144, ROMTYPE_EVEN, _T("390629-03"), 0xa245dbdf,0x83bab8e9,0x5d378b55,0xb0c6ae65,0x61385a96,0xf638598f) ALTROMPN(71, 1, 2, 262144, ROMTYPE_ODD , _T("390630-03"), 0x7db1332b,0x48f14b31,0x279da675,0x7848df6f,0xeb531881,0x8f8f576c) { _T("KS ROM v3.0 (A1200)"), 3, 0, 39, 106, _T("A1200\0"), 524288, 11, 0, 0, ROMTYPE_KICK, 0, 0, NULL, 0x6c9b07d2, 0x70033828,0x182FFFC7,0xED106E53,0x73A8B89D,0xDA76FAA5 }, ALTROMPN(11, 1, 1, 262144, ROMTYPE_EVEN, _T("391523-01"), 0xc742a412,0x999eb81c,0x65dfd07a,0x71ee1931,0x5d99c7eb,0x858ab186) ALTROMPN(11, 1, 2, 262144, ROMTYPE_ODD , _T("391524-01"), 0xd55c6ec6,0x3341108d,0x3a402882,0xb5ef9d3b,0x242cbf3c,0x8ab1a3e9) { _T("KS ROM v3.0 (A4000)"), 3, 0, 39, 106, _T("A4000\0"), 524288, 12, 2 | 4, 0, ROMTYPE_KICK, 0, 0, NULL, 0x9e6ac152, 0xF0B4E9E2,0x9E12218C,0x2D5BD702,0x0E4E7852,0x97D91FD7 }, ALTROMPN(12, 1, 1, 262144, ROMTYPE_EVEN, _T("391513-02"), 0x36f64dd0,0x196e9f3f,0x9cad934e,0x181c07da,0x33083b1f,0x0a3c702f) ALTROMPN(12, 1, 2, 262144, ROMTYPE_ODD , _T("391514-02"), 0x17266a55,0x42fbed34,0x53d1f11c,0xcbde89a9,0x826f2d11,0x75cca5cc) { _T("KS ROM v3.1 (A4000)"), 3, 1, 40, 70, _T("A4000\0"), 524288, 13, 2 | 4, 0, ROMTYPE_KICK, 0, 0, NULL, 0x2b4566f1, 0x81c631dd,0x096bbb31,0xd2af9029,0x9c76b774,0xdb74076c }, ALTROM(13, 1, 1, 262144, ROMTYPE_EVEN, 0xf9cbecc9,0x138d8cb4,0x3b8312fe,0x16d69070,0xde607469,0xb3d4078e) ALTROM(13, 1, 2, 262144, ROMTYPE_ODD , 0xf8248355,0xc2379547,0x9fae3910,0xc185512c,0xa268b82f,0x1ae4fe05) { _T("KS ROM v3.1 (A500,A600,A2000)"), 3, 1, 40, 63, _T("A500\0A600\0A2000\0"), 524288, 14, 0, 0, ROMTYPE_KICK, 0, 0, NULL, 0xfc24ae0d, 0x3B7F1493,0xB27E2128,0x30F989F2,0x6CA76C02,0x049F09CA }, { _T("KS ROM v3.1 (A1200)"), 3, 1, 40, 68, _T("A1200\0"), 524288, 15, 1, 0, ROMTYPE_KICK, 0, 0, NULL, 0x1483a091, 0xE2154572,0x3FE8374E,0x91342617,0x604F1B3D,0x703094F1 }, ALTROMPN(15, 1, 1, 262144, ROMTYPE_EVEN, _T("391773-01"), 0x08dbf275,0xb8800f5f,0x90929810,0x9ea69690,0xb1b8523f,0xa22ddb37) ALTROMPN(15, 1, 2, 262144, ROMTYPE_ODD , _T("391774-01"), 0x16c07bf8,0x90e331be,0x1970b0e5,0x3f53a9b0,0x390b51b5,0x9b3869c2) { _T("KS ROM v3.1 (A3000)"), 3, 1, 40, 68, _T("A3000\0"), 524288, 61, 2, 0, ROMTYPE_KICK, 0, 0, NULL, 0xefb239cc, 0xF8E210D7,0x2B4C4853,0xE0C9B85D,0x223BA20E,0x3D1B36EE }, ALTROM(61, 1, 1, 262144, ROMTYPE_EVEN, 0x286b9a0d,0x6763a225,0x8ec493f7,0x408cf663,0x110dae9a,0x17803ad1) ALTROM(61, 1, 2, 262144, ROMTYPE_ODD , 0x0b8cde6a,0x5f02e97b,0x48ebbba8,0x7d516a56,0xb0400c6f,0xc3434d8d) { _T("KS ROM v3.1 (A4000)(Cloanto)"), 3, 1, 40, 68, _T("A4000\0"), 524288, 31, 2 | 4, 1, ROMTYPE_KICK, 0, 0, NULL, 0x43b6dd22, 0xC3C48116,0x0866E60D,0x085E436A,0x24DB3617,0xFF60B5F9 }, { _T("KS ROM v3.1 (A4000)"), 3, 1, 40, 68, _T("A4000\0"), 524288, 16, 2 | 4, 0, ROMTYPE_KICK, 0, 0, NULL, 0xd6bae334, 0x5FE04842,0xD04A4897,0x20F0F4BB,0x0E469481,0x99406F49 }, ALTROM(16, 1, 1, 262144, ROMTYPE_EVEN, 0xb2af34f8,0x24e52b5e,0xfc020495,0x17387ab7,0xb1a1475f,0xc540350e) ALTROM(16, 1, 2, 262144, ROMTYPE_ODD , 0xe65636a3,0x313c7cbd,0xa5779e56,0xf19a41d3,0x4e760f51,0x7626d882) { _T("KS ROM v3.1 (A4000T)"), 3, 1, 40, 70, _T("A4000T\0"), 524288, 17, 2 | 4, 0, ROMTYPE_KICK, 0, 0, NULL, 0x75932c3a, 0xB0EC8B84,0xD6768321,0xE01209F1,0x1E6248F2,0xF5281A21 }, ALTROMPN(17, 1, 1, 262144, ROMTYPE_EVEN, _T("391657-01"), 0x0ca94f70,0xb3806eda,0xcb3362fc,0x16a154ce,0x1eeec5bf,0x5bc24789) ALTROMPN(17, 1, 2, 262144, ROMTYPE_ODD , _T("391658-01"), 0xdfe03120,0xcd7a706c,0x431b04d8,0x7814d3a2,0xd8b39710,0x0cf44c0c) { _T("KS ROM v3.X (A4000)(Cloanto)"), 3, 10, 45, 57, _T("A4000\0"), 524288, 46, 2 | 4, 0, ROMTYPE_KICK, 0, 0, NULL, 0x3ac99edc, 0x3cbfc9e1,0xfe396360,0x157bd161,0xde74fc90,0x1abee7ec }, { _T("CD32 KS ROM v3.1"), 3, 1, 40, 60, _T("CD32\0"), 524288, 18, 1, 0, ROMTYPE_KICKCD32, 0, 0, NULL, 0x1e62d4a5, 0x3525BE88,0x87F79B59,0x29E017B4,0x2380A79E,0xDFEE542D }, { _T("CD32 extended ROM"), 3, 1, 40, 60, _T("CD32\0"), 524288, 19, 1, 0, ROMTYPE_EXTCD32, 0, 0, NULL, 0x87746be2, 0x5BEF3D62,0x8CE59CC0,0x2A66E6E4,0xAE0DA48F,0x60E78F7F }, /* plain CD32 rom */ { _T("CD32 ROM (KS + extended)"), 3, 1, 40, 60, _T("CD32\0"), 2 * 524288, 64, 1, 0, ROMTYPE_KICKCD32 | ROMTYPE_EXTCD32 | ROMTYPE_CD32, 0, 0, NULL, 0xf5d4f3c8, 0x9fa14825,0xc40a2475,0xa2eba5cf,0x325bd483,0xc447e7c1 }, /* real CD32 rom dump 391640-03 */ ALTROMPN(64, 1, 1, 2 * 524288, ROMTYPE_CD32, _T("391640-03"), 0xa4fbc94a, 0x816ce6c5,0x07787585,0x0c7d4345,0x2230a9ba,0x3a2902db ) { _T("CD32 MPEG Cartridge ROM"), 3, 1, 40, 30, _T("CD32FMV\0"), 262144, 23, 1, 0, ROMTYPE_CD32CART, 0, 0, NULL, 0xc35c37bf, 0x03ca81c7,0xa7b259cf,0x64bc9582,0x863eca0f,0x6529f435 }, { _T("CDTV extended ROM v1.00"), 1, 0, 1, 0, _T("CDTV\0"), 262144, 20, 0, 0, ROMTYPE_EXTCDTV, 0, 0, NULL, 0x42baa124, 0x7BA40FFA,0x17E500ED,0x9FED041F,0x3424BD81,0xD9C907BE }, ALTROMPN(20, 1, 1, 131072, ROMTYPE_EVEN | ROMTYPE_8BIT, _T("252606-01"), 0x791cb14b,0x277a1778,0x92449635,0x3ffe56be,0x68063d2a,0x334360e4) ALTROMPN(20, 1, 2, 131072, ROMTYPE_ODD | ROMTYPE_8BIT, _T("252607-01"), 0xaccbbc2e,0x41b06d16,0x79c6e693,0x3c3378b7,0x626025f7,0x641ebc5c) { _T("CDTV extended ROM v2.07"), 2, 7, 2, 7, _T("CDTV\0"), 262144, 22, 0, 0, ROMTYPE_EXTCDTV, 0, 0, NULL, 0xceae68d2, 0x5BC114BB,0xA29F60A6,0x14A31174,0x5B3E2464,0xBFA06846 }, ALTROM(22, 1, 1, 131072, ROMTYPE_EVEN | ROMTYPE_8BIT, 0x36d73cb8,0x9574e546,0x4b390697,0xf28f9a43,0x4e604e5e,0xf5e5490a) ALTROM(22, 1, 2, 131072, ROMTYPE_ODD | ROMTYPE_8BIT, 0x6e84dce7,0x01a0679e,0x895a1a0f,0x559c7253,0xf539606b,0xd447b54f) { _T("CDTV/A570 extended ROM v2.30"), 2, 30, 2, 30, _T("CDTV\0"), 262144, 21, 0, 0, ROMTYPE_EXTCDTV, 0, 0, _T("391298-01"), 0x30b54232, 0xED7E461D,0x1FFF3CDA,0x321631AE,0x42B80E3C,0xD4FA5EBB }, ALTROM(21, 1, 1, 131072, ROMTYPE_EVEN | ROMTYPE_8BIT, 0x48e4d74f,0x54946054,0x2269e410,0x36018402,0xe1f6b855,0xfd89092b) ALTROM(21, 1, 2, 131072, ROMTYPE_ODD | ROMTYPE_8BIT, 0x8a54f362,0x03df800f,0x032046fd,0x892f6e7e,0xec08b76d,0x33981e8c) { _T("A1000 bootstrap ROM"), 0, 0, 0, 0, _T("A1000\0"), 65536, 24, 0, 0, ROMTYPE_KICK, 0, 0, NULL, 0x0b1ad2d0, 0xBA93B8B8,0x5CA0D83A,0x68225CC3,0x3B95050D,0x72D2FDD7 }, ALTROM(24, 1, 1, 8192, 0, 0x62f11c04, 0xC87F9FAD,0xA4EE4E69,0xF3CCA0C3,0x6193BE82,0x2B9F5FE6) ALTROMPN(24, 2, 1, 4096, ROMTYPE_EVEN | ROMTYPE_8BIT, _T("252179-01"), 0x42553bc4,0x8855a97f,0x7a44e3f6,0x2d1c88d9,0x38fee1f4,0xc606af5b) ALTROMPN(24, 2, 2, 4096, ROMTYPE_ODD | ROMTYPE_8BIT, _T("252180-01"), 0x8e5b9a37,0xd10f1564,0xb99f5ffe,0x108fa042,0x362e877f,0x569de2c3) { _T("The Diagnostic 2.0 (Logica)"), 2, 0, 2, 0, _T("LOGICA\0"), 524288, 72, 0, 0, ROMTYPE_KICK | ROMTYPE_SPECIALKICK, 0, 0, NULL, 0x8484f426, 0xba10d161,0x66b2e2d6,0x177c979c,0x99edf846,0x2b21651e }, { _T("Freezer: Action Replay Mk I v1.00"), 1, 0, 1, 0, _T("AR\0"), 65536, 52, 0, 0, ROMTYPE_AR, 0, 1, NULL, 0x2d921771, 0x1EAD9DDA,0x2DAD2914,0x6441F5EF,0x72183750,0x22E01248 }, ALTROM(52, 1, 1, 32768, ROMTYPE_EVEN | ROMTYPE_8BIT, 0x82d6eb87, 0x7c9bac11,0x28666017,0xeee6f019,0x63fb3890,0x7fbea355) ALTROM(52, 1, 2, 32768, ROMTYPE_ODD | ROMTYPE_8BIT, 0x40ae490c, 0x81d8e432,0x01b73fd9,0x2e204ebd,0x68af8602,0xb62ce397) { _T("Freezer: Action Replay Mk I v1.50"), 1, 50, 1, 50, _T("AR\0"), 65536, 25, 0, 0, ROMTYPE_AR, 0, 1, NULL, 0xd4ce0675, 0x843B433B,0x2C56640E,0x045D5FDC,0x854DC6B1,0xA4964E7C }, ALTROM(25, 1, 1, 32768, ROMTYPE_EVEN | ROMTYPE_8BIT, 0x7fbd6de2, 0xb5f71a5c,0x09d65ecc,0xa8a3bc93,0x93558461,0xca190228) ALTROM(25, 1, 2, 32768, ROMTYPE_ODD | ROMTYPE_8BIT, 0x43018069, 0xad8ff242,0xb2cbf125,0x1fc53a73,0x581cf57a,0xb69cee00) { _T("Freezer: Action Replay Mk II v2.05"), 2, 5, 2, 5, _T("AR\0"), 131072, 26, 0, 0, ROMTYPE_AR, 0, 1, NULL, 0x1287301f, 0xF6601DE8,0x888F0050,0x72BF562B,0x9F533BBC,0xAF1B0074 }, { _T("Freezer: Action Replay Mk II v2.12"), 2, 12, 2, 12, _T("AR\0"), 131072, 27, 0, 0, ROMTYPE_AR, 0, 1, NULL, 0x804d0361, 0x3194A07A,0x0A82D8B5,0xF2B6AEFA,0x3CA581D6,0x8BA8762B }, { _T("Freezer: Action Replay Mk II v2.14"), 2, 14, 2, 14, _T("AR\0"), 131072, 28, 0, 0, ROMTYPE_AR, 0, 1, NULL, 0x49650e4f, 0x255D6DF6,0x3A4EAB0A,0x838EB1A1,0x6A267B09,0x59DFF634 }, { _T("Freezer: Action Replay Mk III v3.09"), 3, 9, 3, 9, _T("AR\0"), 262144, 29, 0, 0, ROMTYPE_AR, 0, 1, NULL, 0x0ed9b5aa, 0x0FF3170A,0xBBF0CA64,0xC9DD93D6,0xEC0C7A01,0xB5436824 }, ALTROM(29, 1, 1, 131072, ROMTYPE_EVEN | ROMTYPE_8BIT, 0x2b84519f, 0x7841873b,0xf009d834,0x1dfa2794,0xb3751bac,0xf86adcc8) ALTROM(29, 1, 2, 131072, ROMTYPE_ODD | ROMTYPE_8BIT, 0x1d35bd56, 0x6464be16,0x26b51949,0x9e76e4e3,0x409e8016,0x515d48b6) { _T("Freezer: Action Replay Mk III v3.17"), 3, 17, 3, 17, _T("AR\0"), 262144, 30, 0, 0, ROMTYPE_AR, 0, 1, NULL, 0xc8a16406, 0x5D4987C2,0xE3FFEA8B,0x1B02E314,0x30EF190F,0x2DB76542 }, { _T("Freezer: Action Replay 1200"), 0, 0, 0, 0, _T("AR\0"), 262144, 47, 0, 0, ROMTYPE_AR, 0, 1, NULL, 0x8d760101, 0x0F6AB834,0x2810094A,0xC0642F62,0xBA42F78B,0xC0B07E6A }, { _T("Freezer: Action Cartridge Super IV Professional"), 0, 0, 0, 0, _T("SUPERIV\0"), 0, 62, 0, 0, ROMTYPE_SUPERIV, 0, 1, NULL, 0xffffffff, 0, 0, 0, 0, 0, _T("SuperIV") }, { _T("Freezer: Action Cart. Super IV Pro (+ROM v4.3)"), 4, 3, 4, 3, _T("SUPERIV\0"), 170368, 60, 0, 0, ROMTYPE_SUPERIV, 0, 1, NULL, 0xe668a0be, 0x633A6E65,0xA93580B8,0xDDB0BE9C,0x9A64D4A1,0x7D4B4801 }, { _T("Freezer: X-Power Professional 500 v1.2"), 1, 2, 1, 2, _T("XPOWER\0"), 131072, 65, 0, 0, ROMTYPE_XPOWER, 0, 1, NULL, 0x9e70c231, 0xa2977a1c,0x41a8ca7d,0x4af4a168,0x726da542,0x179d5963 }, ALTROM(65, 1, 1, 65536, ROMTYPE_EVEN|ROMTYPE_SCRAMBLED|ROMTYPE_8BIT, 0xf98742e4,0xe8e683ba,0xd8b38d1f,0x79f3ad83,0xa9e67c6f,0xa91dc96c) ALTROM(65, 1, 2, 65536, ROMTYPE_ODD |ROMTYPE_SCRAMBLED|ROMTYPE_8BIT, 0xdfb9984b,0x8d6bdd49,0x469ec8e2,0x0143fbb3,0x72e92500,0x99f07910) { _T("Freezer: X-Power Professional 500 v1.3"), 1, 2, 1, 2, _T("XPOWER\0"), 131072, 68, 0, 0, ROMTYPE_XPOWER, 0, 1, NULL, 0x31e057f0, 0x84650266,0x465d1859,0x7fd71dee,0x00775930,0xb7e450ee }, ALTROM(68, 1, 1, 65536, ROMTYPE_EVEN|ROMTYPE_SCRAMBLED|ROMTYPE_8BIT, 0x0b2ce0c7,0x45ad5456,0x89192404,0x956f47ce,0xf66a5274,0x57ace33b) ALTROM(68, 1, 2, 65536, ROMTYPE_ODD |ROMTYPE_SCRAMBLED|ROMTYPE_8BIT, 0x34580c35,0x8ad42566,0x7364f238,0x978f4381,0x08f8d5ec,0x470e72ea) { _T("Freezer: Nordic Power v1.5"), 1, 5, 1, 5, _T("NPOWER\0"), 65536, 69, 0, 0, ROMTYPE_NORDIC, 0, 1, NULL, 0x83b4b21c, 0xc56ced25,0x506a5aab,0x3fa13813,0x4fc9e5ae,0x0f9d3709 }, ALTROM(69, 1, 1, 32768, ROMTYPE_EVEN|ROMTYPE_SCRAMBLED|ROMTYPE_8BIT, 0xdd207174,0xae67652d,0x64f5db20,0x0f4b2110,0xee59567f,0xfbd90a1b) ALTROM(69, 1, 2, 32768, ROMTYPE_ODD |ROMTYPE_SCRAMBLED|ROMTYPE_8BIT, 0x8f93d85d,0x73c62d21,0x40c0c092,0x6315b702,0xdd5d0f05,0x3dad7fab) { _T("Freezer: Nordic Power v2.0"), 2, 0, 2, 0, _T("NPOWER\0"), 65536, 67, 0, 0, ROMTYPE_NORDIC, 0, 1, NULL, 0xa4db2906, 0x0aec68f7,0x25470c89,0x6b699ff4,0x6623dec5,0xc777466e }, ALTROM(67, 1, 1, 32768, ROMTYPE_EVEN|ROMTYPE_SCRAMBLED|ROMTYPE_8BIT, 0xb21be46c,0x50dc607c,0xce976bbd,0x3841eaf0,0x591ddc7e,0xa1939ad2) ALTROM(67, 1, 2, 32768, ROMTYPE_ODD |ROMTYPE_SCRAMBLED|ROMTYPE_8BIT, 0x96057aed,0xdd9209e2,0x1d5edfc1,0xcdb52abe,0x93de0f35,0xc43da696) { _T("Freezer: Nordic Power v3.0"), 3, 0, 3, 0, _T("NPOWER\0"), 65536, 70, 0, 0, ROMTYPE_NORDIC, 0, 1, NULL, 0x72850aef, 0x59c91d1f,0xa8f118f9,0x0bdba05a,0x9ae788d7,0x7a6cc7c9 }, ALTROM(70, 1, 1, 32768, ROMTYPE_EVEN|ROMTYPE_SCRAMBLED|ROMTYPE_8BIT, 0xf3330e1f,0x3a597db2,0xb7d11b6c,0xb8e13496,0xc215f223,0x88c4ca3c) ALTROM(70, 1, 2, 32768, ROMTYPE_EVEN|ROMTYPE_SCRAMBLED|ROMTYPE_8BIT, 0xee58e0f9,0x4148f4cb,0xb42cec33,0x8ca144de,0xd4f54118,0xe0f185dd) { _T("Freezer: HRTMon v2.33 (built-in)"), 0, 0, 0, 0, _T("HRTMON\0"), 0, 63, 0, 0, ROMTYPE_HRTMON, 0, 1, NULL, 0xffffffff, 0, 0, 0, 0, 0, _T("HRTMon") }, { _T("A590/A2091 SCSI boot ROM"), 6, 0, 6, 0, _T("A590\0A2091\0"), 16384, 53, 0, 0, ROMTYPE_A2091BOOT, 0, 0, NULL, 0x8396cf4e, 0x5E03BC61,0x8C862ABE,0x7BF79723,0xB4EEF4D2,0x1859A0F2 }, ALTROMPN(53, 1, 1, 8192, ROMTYPE_ODD | ROMTYPE_8BIT, _T("390389-03"), 0xb0b8cf24,0xfcf40175,0x05f4d441,0x814b45d5,0x59c19eab,0x43816b30) ALTROMPN(53, 1, 2, 8192, ROMTYPE_EVEN | ROMTYPE_8BIT, _T("390388-03"), 0x2e77bbff,0x8a098845,0x068f32cf,0xa4d34a27,0x8cd290f6,0x1d35a52c) { _T("A590/A2091 SCSI boot ROM"), 6, 6, 6, 6, _T("A590\0A2091\0"), 16384, 54, 0, 0, ROMTYPE_A2091BOOT, 0, 0, NULL, 0x33e00a7a, 0x739BB828,0xE874F064,0x9360F59D,0x26B5ED3F,0xBC99BB66 }, ALTROMPN(54, 1, 1, 8192, ROMTYPE_ODD | ROMTYPE_8BIT, _T("390722-02"), 0xe536bbb2,0xfd7f8a6d,0xa18c1b02,0xd07eb990,0xc2467a24,0x183ede12) ALTROMPN(54, 1, 2, 8192, ROMTYPE_EVEN | ROMTYPE_8BIT, _T("390721-02"), 0xc0871d25,0xe155f18a,0xbb90cf82,0x0589c15e,0x70559d3b,0x6b391af8) { _T("A590/A2091 SCSI boot ROM"), 7, 0, 7, 0, _T("A590\0A2091\0"), 16384, 55, 0, 0, ROMTYPE_A2091BOOT, 0, 0, NULL, 0x714a97a2, 0xE50F01BA,0xF2899892,0x85547863,0x72A82C33,0x3C91276E }, ALTROMPN(55, 1, 1, 8192, ROMTYPE_ODD | ROMTYPE_8BIT, _T("390722-03"), 0xa9ccffed,0x149f5bd5,0x2e2d2990,0x4e3de483,0xb9ad7724,0x48e9278e) ALTROMPN(55, 1, 2, 8192, ROMTYPE_EVEN | ROMTYPE_8BIT, _T("390721-03"), 0x2942747a,0xdbd7648e,0x79c75333,0x7ff3e4f4,0x91de224b,0xf05e6bb6) { _T("A590/A2091 SCSI Guru boot ROM"), 6, 14, 6, 14, _T("A590\0A2091\0"), 32768, 56, 0, 0, ROMTYPE_A2091BOOT, 0, 0, NULL, 0x04e52f93, 0x6DA21B6F,0x5E8F8837,0xD64507CD,0x8A4D5CDC,0xAC4F426B }, { _T("A4091 SCSI boot ROM"), 40, 9, 40, 9, _T("A4091\0"), 32768, 57, 0, 0, ROMTYPE_A4091BOOT, 0, 0, NULL, 0x00000000, 0, 0, 0, 0, 0 }, { _T("A4091 SCSI boot ROM"), 40, 13, 40, 13, _T("A4091\0"), 32768, 58, 0, 0, ROMTYPE_A4091BOOT, 0, 0, _T("391592-02"), 0x54cb9e85, 0x3CE66919,0xF6FD6797,0x4923A12D,0x91B730F1,0xFFB4A7BA }, { _T("Arcadia OnePlay 2.11"), 0, 0, 0, 0, _T("ARCADIA\0"), 0, 49, 0, 0, ROMTYPE_ARCADIABIOS, 0, 0 }, { _T("Arcadia TenPlay 2.11"), 0, 0, 0, 0, _T("ARCADIA\0"), 0, 50, 0, 0, ROMTYPE_ARCADIABIOS, 0, 0 }, { _T("Arcadia OnePlay 3.00"), 0, 0, 0, 0, _T("ARCADIA\0"), 0, 51, 0, 0, ROMTYPE_ARCADIABIOS, 0, 0 }, { _T("Arcadia SportTime Table Hockey"), 0, 0, 0, 0, _T("ARCADIA\0"), 0, 33, 0, 0, ROMTYPE_ARCADIAGAME, 0, 2 }, { _T("Arcadia SportTime Bowling"), 0, 0, 0, 0, _T("ARCADIA\0"), 0, 34, 0, 0, ROMTYPE_ARCADIAGAME, 0, 2 }, { _T("Arcadia World Darts"), 0, 0, 0, 0, _T("ARCADIA\0"), 0, 35, 0, 0, ROMTYPE_ARCADIAGAME, 0, 2 }, { _T("Arcadia Magic Johnson's Fast Break"), 0, 0, 0, 0, _T("ARCADIA\0"), 0, 36, 0, 0, ROMTYPE_ARCADIAGAME, 0, 2 }, { _T("Arcadia Leader Board Golf"), 0, 0, 0, 0, _T("ARCADIA\0"), 0, 37, 0, 0, ROMTYPE_ARCADIAGAME, 0, 2 }, { _T("Arcadia Leader Board Golf (alt)"), 0, 0, 0, 0, _T("ARCADIA\0"), 0, 38, 0, 0, ROMTYPE_ARCADIAGAME, 0, 2 }, { _T("Arcadia Ninja Mission"), 0, 0, 0, 0, _T("ARCADIA\0"), 0, 39, 0, 0, ROMTYPE_ARCADIAGAME, 0, 2 }, { _T("Arcadia Road Wars"), 0, 0, 0, 0, _T("ARCADIA\0"), 0, 40, 0, 0, ROMTYPE_ARCADIAGAME, 0, 2 }, { _T("Arcadia Sidewinder"), 0, 0, 0, 0, _T("ARCADIA\0"), 0, 41, 0, 0, ROMTYPE_ARCADIAGAME, 0, 2 }, { _T("Arcadia Spot"), 0, 0, 0, 0, _T("ARCADIA\0"), 0, 42, 0, 0, ROMTYPE_ARCADIAGAME, 0, 2 }, { _T("Arcadia Space Ranger"), 0, 0, 0, 0, _T("ARCADIA\0"), 0, 43, 0, 0, ROMTYPE_ARCADIAGAME, 0, 2 }, { _T("Arcadia Xenon"), 0, 0, 0, 0, _T("ARCADIA\0"), 0, 44, 0, 0, ROMTYPE_ARCADIAGAME, 0, 2 }, { _T("Arcadia World Trophy Soccer"), 0, 0, 0, 0, _T("ARCADIA\0"), 0, 45, 0, 0, ROMTYPE_ARCADIAGAME, 0, 2 }, { NULL } }; void romlist_clear (void) { int i; int mask = 0; struct romdata *parent; TCHAR *pn; xfree (rl); rl = 0; romlist_cnt = 0; parent = 0; pn = NULL; for (i = 0; roms[i].name; i++) { struct romdata *rd = &roms[i]; if (rd->group == 0) { parent = rd; mask = rd->type; pn = parent->partnumber; } else { rd->type &= ~ROMTYPE_MASK; rd->type |= mask & ROMTYPE_MASK; if (rd->partnumber && !pn) { TCHAR *newpn; if (parent->partnumber == NULL) parent->partnumber = my_strdup (_T("")); newpn = xcalloc (TCHAR, _tcslen (parent->partnumber) + 1 + _tcslen (rd->partnumber) + 1); if (_tcslen (parent->partnumber) > 0) { _tcscpy (newpn, parent->partnumber); _tcscat (newpn, _T("/")); } _tcscat (newpn, rd->partnumber); xfree (parent->partnumber); parent->partnumber = newpn; } } } } /* remove rom entries that need 2 or more roms but not everything required is present */ static void romlist_cleanup (void) { int i = 0; while (roms[i].name) { struct romdata *rd = &roms[i]; int grp = rd->group >> 16; int ok = 1; int j = i; int k = i; while (rd->name && (rd->group >> 16) == grp && grp > 0) { struct romlist *rl = romlist_getrl (rd); if (!rl) ok = 0; rd++; j++; } if (ok == 0) { while (i < j) { struct romlist *rl2 = romlist_getrl (&roms[i]); if (rl2) { int cnt = romlist_cnt - (rl2 - rl) - 1; write_log (_T("%s '%s' removed from romlist\n"), roms[k].name, rl2->path); xfree (rl2->path); if (cnt > 0) memmove (rl2, rl2 + 1, cnt * sizeof (struct romlist)); romlist_cnt--; } i++; } } i++; } for (i = 0; i < romlist_cnt; i++) { struct romlist *rll = &rl[i]; //write_log (_T("%s (%s)\n"), rll->rd->name, rll->path); } } struct romlist **getromlistbyident (int ver, int rev, int subver, int subrev, const TCHAR *model, int romflags, bool all) { int i, j, ok, out, max; struct romdata *rd; struct romlist **rdout, *rltmp; void *buf; static struct romlist rlstatic; for (i = 0; roms[i].name; i++); if (all) max = i; else max = romlist_cnt; buf = xmalloc (uae_u8, (sizeof (struct romlist*) + sizeof (struct romlist)) * (i + 1)); rdout = (struct romlist**)buf; rltmp = (struct romlist*)((uae_u8*)buf + (i + 1) * sizeof (struct romlist*)); out = 0; for (i = 0; i < max; i++) { ok = 0; if (!all) rd = rl[i].rd; else rd = &roms[i]; if (rd->group) continue; if (model && !_tcsicmp (model, rd->name)) ok = 2; if ((ver < 0 || rd->ver == ver) && (rev < 0 || rd->rev == rev)) { if (subver >= 0) { if (rd->subver == subver && (subrev < 0 || rd->subrev == subrev) && rd->subver > 0) ok = 1; } else { ok = 1; } } if (!ok) continue; if (model && ok < 2) { TCHAR *p = rd->model; ok = 0; while (p && *p) { if (!_tcscmp(rd->model, model)) { ok = 1; break; } p = p + _tcslen(p) + 1; } } if (romflags && (rd->type & romflags) == 0) ok = 0; if (ok) { if (all) { rdout[out++] = rltmp; rltmp->path = NULL; rltmp->rd = rd; rltmp++; } else { rdout[out++] = &rl[i]; } } } if (out == 0) { xfree (rdout); return NULL; } for (i = 0; i < out; i++) { int v1 = rdout[i]->rd->subver * 1000 + rdout[i]->rd->subrev; for (j = i + 1; j < out; j++) { int v2 = rdout[j]->rd->subver * 1000 + rdout[j]->rd->subrev; if (v1 < v2) { struct romlist *rltmp = rdout[j]; rdout[j] = rdout[i]; rdout[i] = rltmp; } } } rdout[out] = NULL; return rdout; } struct romdata *getarcadiarombyname (const TCHAR *name) { int i; for (i = 0; roms[i].name; i++) { if (roms[i].group == 0 && (roms[i].type == ROMTYPE_ARCADIAGAME || roms[i].type == ROMTYPE_ARCADIAGAME)) { TCHAR *p = roms[i].name; p = p + _tcslen (p) + 1; if (_tcslen (name) >= _tcslen (p) + 4) { const TCHAR *p2 = name + _tcslen (name) - _tcslen (p) - 4; if (!memcmp (p, p2, _tcslen (p)) && !memcmp (p2 + _tcslen (p2) - 4, ".zip", 4)) return &roms[i]; } } } return NULL; } struct romlist **getarcadiaroms (void) { int i, out, max; void *buf; struct romlist **rdout, *rltmp; max = 0; for (i = 0; roms[i].name; i++) { if (roms[i].group == 0 && (roms[i].type == ROMTYPE_ARCADIABIOS || roms[i].type == ROMTYPE_ARCADIAGAME)) max++; } buf = xmalloc (uae_u8, (sizeof (struct romlist*) + sizeof (struct romlist)) * (max + 1)); rdout = (struct romlist**)buf; rltmp = (struct romlist*)((uae_u8*)buf + (max + 1) * sizeof (struct romlist*)); out = 0; for (i = 0; roms[i].name; i++) { if (roms[i].group == 0 && (roms[i].type == ROMTYPE_ARCADIABIOS || roms[i].type == ROMTYPE_ARCADIAGAME)) { rdout[out++] = rltmp; rltmp->path = NULL; rltmp->rd = &roms[i]; rltmp++; } } rdout[out] = NULL; return rdout; } static int kickstart_checksum_do (uae_u8 *mem, int size) { uae_u32 cksum = 0, prevck = 0; int i; for (i = 0; i < size; i+=4) { uae_u32 data = mem[i]*65536*256 + mem[i+1]*65536 + mem[i+2]*256 + mem[i+3]; cksum += data; if (cksum < prevck) cksum++; prevck = cksum; } return cksum == 0xffffffff; } #define ROM_KEY_NUM 4 struct rom_key { uae_u8 *key; int size; }; static struct rom_key keyring[ROM_KEY_NUM]; static void addkey (uae_u8 *key, int size, const TCHAR *name) { int i; //write_log (_T("addkey(%08x,%d,'%s')\n"), key, size, name); if (key == NULL || size == 0) { xfree (key); return; } for (i = 0; i < ROM_KEY_NUM; i++) { if (keyring[i].key && keyring[i].size == size && !memcmp (keyring[i].key, key, size)) { xfree (key); //write_log (_T("key already in keyring\n")); return; } } for (i = 0; i < ROM_KEY_NUM; i++) { if (keyring[i].key == NULL) break; } if (i == ROM_KEY_NUM) { xfree (key); //write_log (_T("keyring full\n")); return; } keyring[i].key = key; keyring[i].size = size; write_log (_T("ROM KEY '%s' %d bytes loaded\n"), name, size); } void addkeyfile (const TCHAR *path) { struct zfile *f; int keysize; uae_u8 *keybuf; f = zfile_fopen (path, _T("rb"), ZFD_NORMAL); if (!f) return; zfile_fseek (f, 0, SEEK_END); keysize = zfile_ftell (f); if (keysize > 0) { zfile_fseek (f, 0, SEEK_SET); keybuf = xmalloc (uae_u8, keysize); zfile_fread (keybuf, 1, keysize, f); addkey (keybuf, keysize, path); } zfile_fclose (f); } void addkeydir (const TCHAR *path) { TCHAR tmp[MAX_DPATH]; _tcscpy (tmp, path); if (zfile_exists (tmp)) { int i; for (i = _tcslen (tmp) - 1; i > 0; i--) { if (tmp[i] == '\\' || tmp[i] == '/') break; } tmp[i] = 0; } _tcscat (tmp, _T("/")); _tcscat (tmp, _T("rom.key")); addkeyfile (tmp); } int get_keyring (void) { int i, num = 0; for (i = 0; i < ROM_KEY_NUM; i++) { if (keyring[i].key) num++; } return num; } int load_keyring (struct uae_prefs *p, const TCHAR *path) { uae_u8 *keybuf; int keysize; TCHAR tmp[MAX_PATH], *d; int keyids[] = { 0, 48, 73, -1 }; int cnt, i; free_keyring (); keybuf = target_load_keyfile (p, path, &keysize, tmp); addkey (keybuf, keysize, tmp); for (i = 0; keyids[i] >= 0; i++) { struct romdata *rd = getromdatabyid (keyids[i]); TCHAR *s; if (rd) { s = romlist_get (rd); if (s) addkeyfile (s); } } cnt = 0; for (;;) { keybuf = NULL; keysize = 0; tmp[0] = 0; switch (cnt) { case 0: if (path) _tcscpy (tmp, path); break; case 1: _tcscat (tmp, _T("rom.key")); break; case 2: if (p) { _tcscpy (tmp, p->path_rom.path[0]); _tcscat (tmp, _T("rom.key")); } break; case 3: _tcscpy (tmp, _T("roms/rom.key")); break; case 4: _tcscpy (tmp, start_path_data); _tcscat (tmp, _T("rom.key")); break; case 5: _stprintf (tmp, _T("%s../shared/rom/rom.key"), start_path_data); break; case 6: if (p) { for (i = 0; uae_archive_extensions[i]; i++) { if (_tcsstr (p->romfile, uae_archive_extensions[i])) break; } if (!uae_archive_extensions[i]) { _tcscpy (tmp, p->romfile); d = _tcsrchr (tmp, '/'); if (!d) d = _tcsrchr (tmp, '\\'); if (d) _tcscpy (d + 1, _T("rom.key")); } } break; case 7: return get_keyring (); } cnt++; if (!tmp[0]) continue; addkeyfile (tmp); } } void free_keyring (void) { int i; for (i = 0; i < ROM_KEY_NUM; i++) xfree (keyring[i].key); memset (keyring, 0, sizeof (struct rom_key) * ROM_KEY_NUM); } struct romdata *getromdatabyname (const TCHAR *name) { TCHAR tmp[MAX_PATH]; int i = 0; while (roms[i].name) { if (!roms[i].group) { getromname (&roms[i], tmp); if (!_tcscmp (tmp, name) || !_tcscmp (roms[i].name, name)) return &roms[i]; } i++; } return 0; } struct romdata *getromdatabyid (int id) { int i = 0; while (roms[i].name) { if (id == roms[i].id && roms[i].group == 0) return &roms[i]; i++; } return 0; } struct romdata *getromdatabyidgroup (int id, int group, int subitem) { int i = 0; group = (group << 16) | subitem; while (roms[i].name) { if (id == roms[i].id && roms[i].group == group) return &roms[i]; i++; } return 0; } STATIC_INLINE int notcrc32 (uae_u32 crc32) { if (crc32 == 0xffffffff || crc32 == 0x00000000) return 1; return 0; } struct romdata *getromdatabycrc (uae_u32 crc32) { int i = 0; while (roms[i].name) { if (roms[i].group == 0 && crc32 == roms[i].crc32 && !notcrc32(crc32)) return &roms[i]; i++; } return 0; } static int cmpsha1 (const uae_u8 *s1, const struct romdata *rd) { int i; for (i = 0; i < SHA1_SIZE / 4; i++) { uae_u32 v1 = (s1[0] << 24) | (s1[1] << 16) | (s1[2] << 8) | (s1[3] << 0); uae_u32 v2 = rd->sha1[i]; if (v1 != v2) return -1; s1 += 4; } return 0; } static struct romdata *checkromdata (const uae_u8 *sha1, int size, uae_u32 mask) { int i = 0; while (roms[i].name) { if (!notcrc32(roms[i].crc32) && roms[i].size >= size) { if (roms[i].type & mask) { if (!cmpsha1 (sha1, &roms[i])) return &roms[i]; } } i++; } return NULL; } int decode_cloanto_rom_do (uae_u8 *mem, int size, int real_size) { int cnt, t, i; for (i = ROM_KEY_NUM - 1; i >= 0; i--) { uae_u8 sha1[SHA1_SIZE]; struct romdata *rd; int keysize = keyring[i].size; uae_u8 *key = keyring[i].key; if (!key) continue; for (t = cnt = 0; cnt < size; cnt++, t = (t + 1) % keysize) { mem[cnt] ^= key[t]; if (real_size == cnt + 1) t = keysize - 1; } if ((mem[2] == 0x4e && mem[3] == 0xf9) || (mem[0] == 0x11 && (mem[1] == 0x11 || mem[1] == 0x14))) { cloanto_rom = 1; return 1; } get_sha1 (mem, size, sha1); rd = checkromdata (sha1, size, -1); if (rd) { if (rd->cloanto) cloanto_rom = 1; return 1; } if (i == 0) break; for (t = cnt = 0; cnt < size; cnt++, t = (t + 1) % keysize) { mem[cnt] ^= key[t]; if (real_size == cnt + 1) t = keysize - 1; } } return 0; } static int decode_rekick_rom_do (uae_u8 *mem, int size, int real_size) { uae_u32 d1 = 0xdeadfeed, d0; int i; for (i = 0; i < size / 8; i++) { d0 = ((mem[i * 8 + 0] << 24) | (mem[i * 8 + 1] << 16) | (mem[i * 8 + 2] << 8) | mem[i * 8 + 3]); d1 = d1 ^ d0; mem[i * 8 + 0] = d1 >> 24; mem[i * 8 + 1] = d1 >> 16; mem[i * 8 + 2] = d1 >> 8; mem[i * 8 + 3] = d1; d1 = ((mem[i * 8 + 4] << 24) | (mem[i * 8 + 5] << 16) | (mem[i * 8 + 6] << 8) | mem[i * 8 + 7]); d0 = d0 ^ d1; mem[i * 8 + 4] = d0 >> 24; mem[i * 8 + 5] = d0 >> 16; mem[i * 8 + 6] = d0 >> 8; mem[i * 8 + 7] = d0; } return 1; } int decode_rom (uae_u8 *mem, int size, int mode, int real_size) { if (mode == 1) { if (!decode_cloanto_rom_do (mem, size, real_size)) { #ifndef SINGLEFILE notify_user (NUMSG_NOROMKEY); #endif return 0; } return 1; } else if (mode == 2) { decode_rekick_rom_do (mem, size, real_size); return 1; } return 0; } struct romdata *getromdatabydata (uae_u8 *rom, int size) { uae_u8 sha1[SHA1_SIZE]; uae_u8 tmp[4]; uae_u8 *tmpbuf = NULL; struct romdata *ret = NULL; if (size > 11 && !memcmp (rom, "AMIROMTYPE1", 11)) { uae_u8 *tmpbuf = xmalloc (uae_u8, size); int tmpsize = size - 11; memcpy (tmpbuf, rom + 11, tmpsize); decode_rom (tmpbuf, tmpsize, 1, tmpsize); rom = tmpbuf; size = tmpsize; } #if 0 if (size > 0x6c + 524288 && !memcmp (rom, "AMIG", 4)) { uae_u8 *tmpbuf = (uae_u8*)xmalloc (uae_u8, size); int tmpsize = size - 0x6c; memcpy (tmpbuf, rom + 0x6c, tmpsize); decode_rom (tmpbuf, tmpsize, 2, tmpsize); rom = tmpbuf; size = tmpsize; } #endif get_sha1 (rom, size, sha1); ret = checkromdata(sha1, size, -1); if (!ret) { get_sha1 (rom, size / 2, sha1); ret = checkromdata (sha1, size / 2, -1); if (!ret) { /* ignore AR IO-port range until we have full dump */ memcpy (tmp, rom, 4); memset (rom, 0, 4); get_sha1 (rom, size, sha1); ret = checkromdata (sha1, size, ROMTYPE_AR); memcpy (rom, tmp, 4); } } xfree (tmpbuf); //exit(1); return ret; } struct romdata *getromdatabyzfile (struct zfile *f) { int pos, size; uae_u8 *p; struct romdata *rd; pos = zfile_ftell (f); zfile_fseek (f, 0, SEEK_END); size = zfile_ftell (f); if (size > 2048 * 1024) return NULL; p = xmalloc (uae_u8, size); if (!p) return NULL; memset (p, 0, size); zfile_fseek (f, 0, SEEK_SET); zfile_fread (p, 1, size, f); zfile_fseek (f, pos, SEEK_SET); rd = getromdatabydata (p, size); xfree (p); return rd; } void getromname (const struct romdata *rd, TCHAR *name) { name[0] = 0; if (!rd) return; while (rd->group) rd--; _tcscat (name, rd->name); if ((rd->subrev || rd->subver) && rd->subver != rd->ver) _stprintf (name + _tcslen (name), _T(" rev %d.%d"), rd->subver, rd->subrev); if (rd->size > 0) _stprintf (name + _tcslen (name), _T(" (%dk)"), (rd->size + 1023) / 1024); if (rd->partnumber && _tcslen (rd->partnumber) > 0) _stprintf (name + _tcslen (name), _T(" [%s]"), rd->partnumber); } struct romlist *getromlistbyromdata (const struct romdata *rd) { int ids[2]; ids[0] = rd->id; ids[1] = 0; return getromlistbyids(ids); } struct romlist *getromlistbyids (const int *ids) { struct romdata *rd; int i, j; i = 0; while (ids[i] >= 0) { rd = getromdatabyid (ids[i]); if (rd) { for (j = 0; j < romlist_cnt; j++) { if (rl[j].rd->id == rd->id) return &rl[j]; } } i++; } return NULL; } void romwarning (const int *ids) { int i, exp; TCHAR tmp1[MAX_DPATH], tmp2[MAX_DPATH]; TCHAR tmp3[MAX_DPATH]; exp = 0; tmp2[0] = 0; i = 0; while (ids[i] >= 0) { struct romdata *rd = getromdatabyid (ids[i]); getromname (rd, tmp1); _tcscat (tmp2, _T("- ")); _tcscat (tmp2, tmp1); _tcscat (tmp2, _T("\n")); if (rd->type & (ROMTYPE_A2091BOOT | ROMTYPE_A4091BOOT)) exp++; i++; } translate_message (exp ? NUMSG_EXPROMNEED : NUMSG_ROMNEED, tmp3); gui_message (tmp3, tmp2); } static void byteswap (uae_u8 *buf, int size) { int i; for (i = 0; i < size; i += 2) { uae_u8 t = buf[i]; buf[i] = buf[i + 1]; buf[i + 1] = t; } } static void wordbyteswap (uae_u8 *buf, int size) { int i; for (i = 0; i < size; i += 4) { uae_u8 t; t = buf[i + 0]; buf[i + 0] = buf[i + 2]; buf[i + 2] = t; t = buf[i + 1]; buf[i + 1] = buf[i + 3]; buf[i + 3] = t; } } static void mergecd32 (uae_u8 *dst, uae_u8 *src, int size) { int i, k; k = 0; for (i = 0; i < size / 2; i += 2) { int j = i + size / 2; dst[k + 1] = src[i + 0]; dst[k + 0] = src[i + 1]; dst[k + 3] = src[j + 0]; dst[k + 2] = src[j + 1]; k += 4; } #if 0 { struct zfile *f; f = zfile_fopen ("c:\\d\\1.rom","wb", ZFD_NORMAL); zfile_fwrite (dst, 1, size, f); zfile_fclose(f); } #endif } static void descramble (const struct romdata *rd, uae_u8 *data, int size, int odd) { int flags = rd->type; if (flags & (ROMTYPE_NORDIC | ROMTYPE_XPOWER)) descramble_nordicpro (data, size, odd); } #ifdef FSUAE #define AMIGA_OS_130_SHA1 "\xc3\x9b\xd9\x09\x4d\x4e\x5f\x4e\x28\xc1" \ "\x41\x1f\x30\x86\x95\x04\x06\x06\x2e\x87" #define AMIGA_OS_310_SHA1 "\xc3\xc4\x81\x16\x08\x66\xe6\x0d\x08\x5e" \ "\x43\x6a\x24\xdb\x36\x17\xff\x60\xb5\xf9" void amiga_patch_rom(uae_u8 *buf, size_t size) { write_log("amiga_patch_rom\n"); uae_u8 sha1[SHA1_SIZE]; get_sha1 (buf, size, sha1); write_log("ROM: SHA1="); for (int i = 0; i < SHA1_SIZE; i++) { write_log("%02x", sha1[i]); } write_log("\n"); int converted = 0; if (memcmp(sha1, AMIGA_OS_130_SHA1, SHA1_SIZE) == 0) { write_log("convering amiga-os-130 ROM (in-memory) " "to preferred A500 ROM\n"); buf[413] = '\x08'; buf[176029] = '\xb9'; buf[262121] = '\x26'; converted = 1; } else if (memcmp(sha1, AMIGA_OS_310_SHA1, SHA1_SIZE) == 0) { write_log("convering amiga-os-310 ROM (in-memory) " "to preferred A4000 ROM\n"); buf[220] = '\x74'; buf[222] = '\x7a'; buf[326] = '\x70'; buf[434] = '\x7c'; buf[524264] = '\x45'; buf[524266] = '\x14'; converted = 1; } if (converted) { get_sha1 (buf, size, sha1); write_log("ROM: SHA1="); for (int i = 0; i < SHA1_SIZE; i++) { write_log("%02x", sha1[i]); } write_log("\n"); } } #endif static int read_rom_file (uae_u8 *buf, const struct romdata *rd) { struct zfile *zf; struct romlist *rl = romlist_getrl (rd); uae_char tmp[11]; if (!rl || _tcslen (rl->path) == 0) return 0; zf = zfile_fopen (rl->path, _T("rb"), ZFD_NORMAL); if (!zf) return 0; addkeydir (rl->path); zfile_fread (tmp, sizeof tmp, 1, zf); if (!memcmp (tmp, "AMIROMTYPE1", sizeof tmp)) { zfile_fread (buf, rd->size, 1, zf); decode_cloanto_rom_do (buf, rd->size, rd->size); } else { memcpy (buf, tmp, sizeof tmp); zfile_fread (buf + sizeof tmp, rd->size - sizeof (tmp), 1, zf); } #ifdef FSUAE amiga_patch_rom(buf, rd->size); #endif zfile_fclose (zf); return 1; } struct zfile *read_rom (struct romdata **prd) { struct romdata *rd2 = *prd; struct romdata *rd = *prd; TCHAR *name; int id = rd->id; uae_u32 crc32; int size; uae_u8 *buf, *buf2; /* find parent node */ for (;;) { if (rd2 == &roms[0]) break; if (rd2[-1].id != id) break; rd2--; } *prd = rd2; size = rd2->size; crc32 = rd2->crc32; name = rd->name; buf = xmalloc (uae_u8, size * 2); memset (buf, 0xff, size * 2); if (!buf) return NULL; buf2 = buf + size; while (rd->id == id) { int i, j, add; int ok = 0; uae_u32 flags = rd->type; int odd = (flags & ROMTYPE_ODD) ? 1 : 0; add = 0; for (i = 0; i < 2; i++) { memset (buf, 0, size); if (!(flags & (ROMTYPE_EVEN | ROMTYPE_ODD))) { read_rom_file (buf, rd); if (flags & ROMTYPE_CD32) { memcpy (buf2, buf, size); mergecd32 (buf, buf2, size); } add = 1; i++; } else { int romsize = size / 2; if (i) odd = !odd; if (flags & ROMTYPE_8BIT) { read_rom_file (buf2, rd); if (flags & ROMTYPE_BYTESWAP) byteswap (buf2, romsize); if (flags & ROMTYPE_SCRAMBLED) descramble (rd, buf2, romsize, odd); for (j = 0; j < size; j += 2) buf[j + odd] = buf2[j / 2]; read_rom_file (buf2, rd + 1); if (flags & ROMTYPE_BYTESWAP) byteswap (buf2, romsize); if (flags & ROMTYPE_SCRAMBLED) descramble (rd + 1, buf2, romsize, !odd); for (j = 0; j < size; j += 2) buf[j + (1 - odd)] = buf2[j / 2]; } else { read_rom_file (buf2, rd); if (flags & ROMTYPE_BYTESWAP) byteswap (buf2, romsize); if (flags & ROMTYPE_SCRAMBLED) descramble (rd, buf2, romsize, odd); for (j = 0; j < size; j += 4) { buf[j + 2 * odd + 0] = buf2[j / 2 + 0]; buf[j + 2 * odd + 1] = buf2[j / 2 + 1]; } read_rom_file (buf2, rd + 1); if (flags & ROMTYPE_BYTESWAP) byteswap (buf2, romsize); if (flags & ROMTYPE_SCRAMBLED) descramble (rd + 1, buf2, romsize, !odd); for (j = 0; j < size; j += 4) { buf[j + 2 * (1 - odd) + 0] = buf2[j / 2 + 0]; buf[j + 2 * (1 - odd) + 1] = buf2[j / 2 + 1]; } } add = 2; } if (get_crc32 (buf, size) == crc32) { ok = 1; } if (!ok && (rd->type & ROMTYPE_AR)) { uae_u8 tmp[2]; tmp[0] = buf[0]; tmp[1] = buf[1]; buf[0] = buf[1] = 0; if (get_crc32 (buf, size) == crc32) ok = 1; buf[0] = tmp[0]; buf[1] = tmp[1]; } if (!ok) { /* perhaps it is byteswapped without byteswap entry? */ byteswap (buf, size); if (get_crc32 (buf, size) == crc32) ok = 1; } if (ok) { struct zfile *zf = zfile_fopen_empty (NULL, name, size); if (zf) { zfile_fwrite (buf, size, 1, zf); zfile_fseek (zf, 0, SEEK_SET); } xfree (buf); return zf; } } rd += add; } xfree (buf); return NULL; } struct zfile *rom_fopen (const TCHAR *name, const TCHAR *mode, int mask) { struct zfile *f; //write_log (_T("attempting to load '%s'\n"), name); f = zfile_fopen (name, mode, mask); //write_log (_T("=%p\n"), f); return f; } struct zfile *read_rom_name (const TCHAR *filename) { int i; struct zfile *f; for (i = 0; i < romlist_cnt; i++) { if (!_tcsicmp (filename, rl[i].path)) { struct romdata *rd = rl[i].rd; f = read_rom (&rd); if (f) return f; } } f = rom_fopen (filename, _T("rb"), ZFD_NORMAL); if (f) { uae_u8 tmp[11]; zfile_fread (tmp, sizeof tmp, 1, f); if (!memcmp (tmp, "AMIROMTYPE1", sizeof tmp)) { struct zfile *df; int size; uae_u8 *buf; addkeydir (filename); zfile_fseek (f, 0, SEEK_END); size = zfile_ftell (f) - sizeof tmp; zfile_fseek (f, sizeof tmp, SEEK_SET); buf = xmalloc (uae_u8, size); zfile_fread (buf, size, 1, f); df = zfile_fopen_empty (f, _T("tmp.rom"), size); decode_cloanto_rom_do (buf, size, size); zfile_fwrite (buf, size, 1, df); zfile_fclose (f); xfree (buf); zfile_fseek (df, 0, SEEK_SET); f = df; } else { zfile_fseek (f, -((int)sizeof tmp), SEEK_CUR); } } return f; } struct zfile *read_rom_name_guess (const TCHAR *filename) { int i, j; struct zfile *f; const TCHAR *name; for (i = _tcslen (filename) - 1; i >= 0; i--) { if (filename[i] == '/' || filename[i] == '\\') break; } if (i < 0) return NULL; name = &filename[i]; for (i = 0; i < romlist_cnt; i++) { TCHAR *n = rl[i].path; for (j = _tcslen (n) - 1; j >= 0; j--) { if (n[j] == '/' || n[j] == '\\') break; } if (j < 0) continue; if (!_tcsicmp (name, n + j)) { struct romdata *rd = rl[i].rd; f = read_rom (&rd); if (f) { write_log (_T("ROM %s not found, using %s\n"), filename, rl[i].path); return f; } } } return NULL; } void kickstart_fix_checksum (uae_u8 *mem, int size) { uae_u32 cksum = 0, prevck = 0; int i, ch = size == 524288 ? 0x7ffe8 : (size == 262144 ? 0x3ffe8 : 0x3e); mem[ch] = 0; mem[ch + 1] = 0; mem[ch + 2] = 0; mem[ch + 3] = 0; for (i = 0; i < size; i+=4) { uae_u32 data = (mem[i] << 24) | (mem[i + 1] << 16) | (mem[i + 2] << 8) | mem[i + 3]; cksum += data; if (cksum < prevck) cksum++; prevck = cksum; } cksum ^= 0xffffffff; mem[ch++] = cksum >> 24; mem[ch++] = cksum >> 16; mem[ch++] = cksum >> 8; mem[ch++] = cksum >> 0; } int kickstart_checksum (uae_u8 *mem, int size) { if (!kickstart_checksum_do (mem, size)) { #ifndef SINGLEFILE notify_user (NUMSG_KSROMCRCERROR); #endif return 0; } return 1; } int configure_rom (struct uae_prefs *p, const int *rom, int msg) { struct romdata *rd; TCHAR *path = 0; int i; i = 0; while (rom[i] >= 0) { rd = getromdatabyid (rom[i]); if (!rd) { i++; continue; } path = romlist_get (rd); if (path) break; i++; } if (!path) { if (msg) romwarning(rom); return 0; } if (rd->type & (ROMTYPE_KICK | ROMTYPE_KICKCD32)) _tcscpy (p->romfile, path); if (rd->type & (ROMTYPE_EXTCD32 | ROMTYPE_EXTCDTV | ROMTYPE_ARCADIABIOS)) _tcscpy (p->romextfile, path); if (rd->type & (ROMTYPE_CD32CART | ROMTYPE_ARCADIAGAME | ROMTYPE_HRTMON | ROMTYPE_XPOWER | ROMTYPE_NORDIC | ROMTYPE_AR | ROMTYPE_SUPERIV)) _tcscpy (p->cartfile, path); return 1; } fs-uae-2.2.3+dfsg/src/od-fs/0000755000175000017500000000000012162366654015653 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/src/od-fs/logging.cpp0000644000175000017500000000236712162366655020016 0ustar glaubitzglaubitz#include "sysconfig.h" #include "sysdeps.h" #include "uae.h" #include #include int log_scsi = 0; void write_log (const TCHAR *format, ...) { va_list args; va_start(args, format); char *buffer = fs_strdup_vprintf(format, args); va_end(args); log_function function = g_libamiga_callbacks.log; if (function) { function(buffer); } else { printf("%s", buffer); } free(buffer); } void gui_message (const char *format,...) { va_list args; va_start(args, format); char *buffer = fs_strdup_vprintf(format, args); va_end(args); if (g_amiga_gui_message_function) { g_amiga_gui_message_function(buffer); } else { printf("%s", buffer); } free(buffer); } void jit_abort (const TCHAR *format,...) { va_list args; va_start(args, format); char *buffer = fs_strdup_vprintf(format, args); va_end(args); log_function function = g_libamiga_callbacks.log; if (function) { function(buffer); } else { printf("%s", buffer); } free(buffer); static int happened; int count; if (!happened) gui_message (_T("JIT: Serious error:\n%s"), buffer); happened = 1; uae_reset(1, 1); } fs-uae-2.2.3+dfsg/src/od-fs/keymap.cpp0000644000175000017500000002655012162366654017655 0ustar glaubitzglaubitz#include "sysconfig.h" #include "sysdeps.h" #include "options.h" #include "inputdevice.h" #include "keymap.h" #include "keyboard.h" #if 0 static struct uae_input_device_kbr_default keytrans[] = { { INPUTEVENT_KEY_ESC, INPUTEVENT_KEY_ESC }, { INPUTEVENT_KEY_F1, INPUTEVENT_KEY_F1 }, { INPUTEVENT_KEY_F2, INPUTEVENT_KEY_F2 }, { INPUTEVENT_KEY_F3, INPUTEVENT_KEY_F3 }, { INPUTEVENT_KEY_F4, INPUTEVENT_KEY_F4 }, { INPUTEVENT_KEY_F5, INPUTEVENT_KEY_F5 }, { INPUTEVENT_KEY_F6, INPUTEVENT_KEY_F6 }, { INPUTEVENT_KEY_F7, INPUTEVENT_KEY_F7 }, { INPUTEVENT_KEY_F8, INPUTEVENT_KEY_F8 }, { INPUTEVENT_KEY_F9, INPUTEVENT_KEY_F9 }, { INPUTEVENT_KEY_F10, INPUTEVENT_KEY_F10 }, { INPUTEVENT_KEY_1, INPUTEVENT_KEY_1 }, { INPUTEVENT_KEY_2, INPUTEVENT_KEY_2 }, { INPUTEVENT_KEY_3, INPUTEVENT_KEY_3 }, { INPUTEVENT_KEY_4, INPUTEVENT_KEY_4 }, { INPUTEVENT_KEY_5, INPUTEVENT_KEY_5 }, { INPUTEVENT_KEY_6, INPUTEVENT_KEY_6 }, { INPUTEVENT_KEY_7, INPUTEVENT_KEY_7 }, { INPUTEVENT_KEY_8, INPUTEVENT_KEY_8 }, { INPUTEVENT_KEY_9, INPUTEVENT_KEY_9 }, { INPUTEVENT_KEY_0, INPUTEVENT_KEY_0 }, { INPUTEVENT_KEY_TAB, INPUTEVENT_KEY_TAB }, { INPUTEVENT_KEY_A, INPUTEVENT_KEY_A }, { INPUTEVENT_KEY_B, INPUTEVENT_KEY_B }, { INPUTEVENT_KEY_C, INPUTEVENT_KEY_C }, { INPUTEVENT_KEY_D, INPUTEVENT_KEY_D }, { INPUTEVENT_KEY_E, INPUTEVENT_KEY_E }, { INPUTEVENT_KEY_F, INPUTEVENT_KEY_F }, { INPUTEVENT_KEY_G, INPUTEVENT_KEY_G }, { INPUTEVENT_KEY_H, INPUTEVENT_KEY_H }, { INPUTEVENT_KEY_I, INPUTEVENT_KEY_I }, { INPUTEVENT_KEY_J, INPUTEVENT_KEY_J }, { INPUTEVENT_KEY_K, INPUTEVENT_KEY_K }, { INPUTEVENT_KEY_L, INPUTEVENT_KEY_L }, { INPUTEVENT_KEY_M, INPUTEVENT_KEY_M }, { INPUTEVENT_KEY_N, INPUTEVENT_KEY_N }, { INPUTEVENT_KEY_O, INPUTEVENT_KEY_O }, { INPUTEVENT_KEY_P, INPUTEVENT_KEY_P }, { INPUTEVENT_KEY_Q, INPUTEVENT_KEY_Q }, { INPUTEVENT_KEY_R, INPUTEVENT_KEY_R }, { INPUTEVENT_KEY_S, INPUTEVENT_KEY_S }, { INPUTEVENT_KEY_T, INPUTEVENT_KEY_T }, { INPUTEVENT_KEY_U, INPUTEVENT_KEY_U }, { INPUTEVENT_KEY_W, INPUTEVENT_KEY_W }, { INPUTEVENT_KEY_V, INPUTEVENT_KEY_V }, { INPUTEVENT_KEY_X, INPUTEVENT_KEY_X }, { INPUTEVENT_KEY_Y, INPUTEVENT_KEY_Y }, { INPUTEVENT_KEY_Z, INPUTEVENT_KEY_Z }, { INPUTEVENT_KEY_CAPS_LOCK, INPUTEVENT_KEY_CAPS_LOCK, ID_FLAG_TOGGLE }, { INPUTEVENT_KEY_NP_1, INPUTEVENT_KEY_NP_1 }, { INPUTEVENT_KEY_NP_2, INPUTEVENT_KEY_NP_2 }, { INPUTEVENT_KEY_NP_3, INPUTEVENT_KEY_NP_3 }, { INPUTEVENT_KEY_NP_4, INPUTEVENT_KEY_NP_4 }, { INPUTEVENT_KEY_NP_5, INPUTEVENT_KEY_NP_5 }, { INPUTEVENT_KEY_NP_6, INPUTEVENT_KEY_NP_6 }, { INPUTEVENT_KEY_NP_7, INPUTEVENT_KEY_NP_7 }, { INPUTEVENT_KEY_NP_8, INPUTEVENT_KEY_NP_8 }, { INPUTEVENT_KEY_NP_9, INPUTEVENT_KEY_NP_9 }, { INPUTEVENT_KEY_NP_0, INPUTEVENT_KEY_NP_0 }, { INPUTEVENT_KEY_NP_PERIOD, INPUTEVENT_KEY_NP_PERIOD }, { INPUTEVENT_KEY_NP_ADD, INPUTEVENT_KEY_NP_ADD }, { INPUTEVENT_KEY_NP_SUB, INPUTEVENT_KEY_NP_SUB }, { INPUTEVENT_KEY_NP_MUL, INPUTEVENT_KEY_NP_MUL }, { INPUTEVENT_KEY_NP_DIV, INPUTEVENT_KEY_NP_DIV }, { INPUTEVENT_KEY_ENTER, INPUTEVENT_KEY_ENTER }, { INPUTEVENT_KEY_SUB, INPUTEVENT_KEY_SUB }, { INPUTEVENT_KEY_EQUALS, INPUTEVENT_KEY_EQUALS }, { INPUTEVENT_KEY_BACKSPACE, INPUTEVENT_KEY_BACKSPACE }, { INPUTEVENT_KEY_RETURN, INPUTEVENT_KEY_RETURN }, { INPUTEVENT_KEY_SPACE, INPUTEVENT_KEY_SPACE }, { INPUTEVENT_KEY_SHIFT_LEFT, INPUTEVENT_KEY_SHIFT_LEFT }, { INPUTEVENT_KEY_CTRL, INPUTEVENT_KEY_CTRL }, { INPUTEVENT_KEY_AMIGA_LEFT, INPUTEVENT_KEY_AMIGA_LEFT }, { INPUTEVENT_KEY_ALT_LEFT, INPUTEVENT_KEY_ALT_LEFT }, { INPUTEVENT_KEY_ALT_RIGHT, INPUTEVENT_KEY_ALT_RIGHT }, { INPUTEVENT_KEY_AMIGA_RIGHT, INPUTEVENT_KEY_AMIGA_RIGHT }, { INPUTEVENT_KEY_CTRL_RIGHT, INPUTEVENT_KEY_CTRL_RIGHT }, { INPUTEVENT_KEY_SHIFT_RIGHT, INPUTEVENT_KEY_SHIFT_RIGHT }, { INPUTEVENT_KEY_CURSOR_UP, INPUTEVENT_KEY_CURSOR_UP }, { INPUTEVENT_KEY_CURSOR_DOWN, INPUTEVENT_KEY_CURSOR_DOWN }, { INPUTEVENT_KEY_CURSOR_LEFT, INPUTEVENT_KEY_CURSOR_LEFT }, { INPUTEVENT_KEY_CURSOR_RIGHT, INPUTEVENT_KEY_CURSOR_RIGHT }, { INPUTEVENT_KEY_DEL, INPUTEVENT_KEY_DEL }, { INPUTEVENT_KEY_HELP, INPUTEVENT_KEY_HELP }, { INPUTEVENT_KEY_LEFTBRACKET, INPUTEVENT_KEY_LEFTBRACKET }, { INPUTEVENT_KEY_RIGHTBRACKET, INPUTEVENT_KEY_RIGHTBRACKET }, { INPUTEVENT_KEY_SEMICOLON, INPUTEVENT_KEY_SEMICOLON }, { INPUTEVENT_KEY_SINGLEQUOTE, INPUTEVENT_KEY_SINGLEQUOTE }, { INPUTEVENT_KEY_BACKQUOTE, INPUTEVENT_KEY_BACKQUOTE }, { INPUTEVENT_KEY_BACKSLASH, INPUTEVENT_KEY_BACKSLASH }, { INPUTEVENT_KEY_COMMA, INPUTEVENT_KEY_COMMA }, { INPUTEVENT_KEY_PERIOD, INPUTEVENT_KEY_PERIOD }, { INPUTEVENT_KEY_DIV, INPUTEVENT_KEY_DIV }, { INPUTEVENT_KEY_30, INPUTEVENT_KEY_30 }, { INPUTEVENT_SPC_MASTER_VOLUME_DOWN, INPUTEVENT_SPC_MASTER_VOLUME_DOWN }, { INPUTEVENT_SPC_MASTER_VOLUME_UP, INPUTEVENT_SPC_MASTER_VOLUME_UP }, { INPUTEVENT_SPC_MASTER_VOLUME_MUTE, INPUTEVENT_SPC_MASTER_VOLUME_MUTE }, { INPUTEVENT_KEY_70, INPUTEVENT_KEY_70 }, { INPUTEVENT_KEY_71, INPUTEVENT_KEY_71 }, // { DIK_SYSRQ, INPUTEVENT_KEY_6E }, // { DIK_F12, INPUTEVENT_KEY_6F }, { INPUTEVENT_KEY_47, INPUTEVENT_KEY_47 }, // { DIK_PRIOR, INPUTEVENT_KEY_48 }, { INPUTEVENT_SPC_FREEZEBUTTON, INPUTEVENT_SPC_FREEZEBUTTON }, { INPUTEVENT_KEY_49, INPUTEVENT_KEY_49 }, { INPUTEVENT_KEY_4B, INPUTEVENT_KEY_4B }, { INPUTEVENT_KEY_CDTV_STOP, INPUTEVENT_KEY_CDTV_STOP }, { INPUTEVENT_KEY_CDTV_PLAYPAUSE, INPUTEVENT_KEY_CDTV_PLAYPAUSE }, { INPUTEVENT_KEY_CDTV_PREV, INPUTEVENT_KEY_CDTV_PREV }, { INPUTEVENT_KEY_CDTV_NEXT, INPUTEVENT_KEY_CDTV_NEXT }, { -1, 0 } }; /* static int kb_np[] = { UAEKEY_NUMPAD4, -1, UAEKEY_NUMPAD6, -1, UAEKEY_NUMPAD8, -1, UAEKEY_NUMPAD2, -1, UAEKEY_NUMPAD0, UAEKEY_NUMPAD5, -1, UAEKEY_NUMPAD_PERIOD, UAEKEY_NUMPAD_DIVIDE, UAEKEY_NUMPAD_ENTER, -1, -1 }; //static int kb_np[] = { AK_NP4, -1, AK_NP6, -1, AK_NP8, -1, AK_NP2, -1, UAEKEY_NUMPAD0, UAEKEY_NUMPAD5, -1, UAEKEY_NUMPADPERIOD, UAEKEY_NUMPADDIV, UAEKEY_ENTER, -1, -1 }; static int kb_ck[] = { UAEKEY_CURSOR_LEFT, -1, UAEKEY_CURSOR_RIGHT, -1, UAEKEY_CURSOR_UP, -1, UAEKEY_CURSOR_DOWN, -1, UAEKEY_RIGHT_CTRL, UAEKEY_RIGHT_ALT, -1, UAEKEY_LEFT_SHIFT, -1, -1 }; static int kb_se[] = { UAEKEY_A, -1, UAEKEY_D, -1, UAEKEY_W, -1, UAEKEY_S, -1, UAEKEY_LEFT_ALT, -1, UAEKEY_RIGHT_SHIFT, -1, -1 }; static int kb_cd32_np[] = { UAEKEY_NUMPAD4, -1, UAEKEY_NUMPAD6, -1, UAEKEY_NUMPAD8, -1, UAEKEY_NUMPAD2, -1, UAEKEY_NUMPAD1, -1, UAEKEY_NUMPAD3, -1, UAEKEY_NUMPAD7, -1, UAEKEY_NUMPAD9, -1, UAEKEY_PERIOD, -1, UAEKEY_NUMPAD_MINUS, -1, UAEKEY_NUMPAD_MULTIPLY, -1, -1 }; static int kb_cd32_ck[] = { UAEKEY_CURSOR_LEFT, -1, UAEKEY_CURSOR_RIGHT, -1, UAEKEY_CURSOR_UP, -1, UAEKEY_CURSOR_DOWN, -1, UAEKEY_NUMPAD1, -1, UAEKEY_NUMPAD3, -1, UAEKEY_NUMPAD7, -1, UAEKEY_NUMPAD9, -1, UAEKEY_NUMPAD_DIVIDE, -1, UAEKEY_NUMPAD_MINUS, -1, UAEKEY_NUMPAD_MULTIPLY, -1, -1 }; static int kb_cd32_se[] = { UAEKEY_A, -1, UAEKEY_D, -1, UAEKEY_W, -1, UAEKEY_S, -1, UAEKEY_NUMPAD1, -1, UAEKEY_NUMPAD3, -1, UAEKEY_NUMPAD7, -1, UAEKEY_NUMPAD9, -1, UAEKEY_NUMPAD_DIVIDE, -1, UAEKEY_NUMPAD_MINUS, -1, UAEKEY_NUMPAD_MULTIPLY, -1, -1 }; static int kb_xa1[] = { UAEKEY_NUMPAD4, -1, UAEKEY_NUMPAD6, -1, UAEKEY_NUMPAD8, -1, UAEKEY_NUMPAD2, UAEKEY_NUMPAD5, -1, UAEKEY_LEFT_CTRL, -1, UAEKEY_LEFT_ALT, -1, UAEKEY_SPACE, -1, -1 }; static int kb_xa2[] = { UAEKEY_D, -1, UAEKEY_G, -1, UAEKEY_R, -1, UAEKEY_F, -1, UAEKEY_A, -1, UAEKEY_S, -1, UAEKEY_Q, -1 }; static int kb_arcadia[] = { UAEKEY_F2, -1, UAEKEY_1, -1, UAEKEY_2, -1, UAEKEY_5, -1, UAEKEY_6, -1, -1 }; static int kb_arcadiaxa[] = { UAEKEY_1, -1, UAEKEY_2, -1, UAEKEY_3, -1, UAEKEY_4, -1, UAEKEY_6, -1, UAEKEY_LEFTBRACKET, UAEKEY_LEFT_SHIFT, -1, UAEKEY_RIGHTBRACKET, -1, UAEKEY_C, -1, UAEKEY_5, -1, UAEKEY_Z, -1, UAEKEY_X, -1, -1 }; static int *kbmaps[] = { kb_np, kb_ck, kb_se, kb_cd32_np, kb_cd32_ck, kb_cd32_se, kb_xa1, kb_xa2, kb_arcadia, kb_arcadiaxa }; */ //static int kb_np[] = { INPUTEVENT_KEY_NP_4, -1, INPUTEVENT_KEY_NP_6, -1, INPUTEVENT_KEY_NP_8, -1, INPUTEVENT_KEY_NP_2, -1, INPUTEVENT_KEY_NP_0, INPUTEVENT_KEY_NP_5, -1, INPUTEVENT_KEY_NP_PERIOD, INPUTEVENT_KEY_NP_DIV, INPUTEVENT_KEY_ENTER, -1, -1 }; /* static int kb_np[] = { 260, -1, AK_NP6, -1, 264, -1, AK_NP2, -1, INPUTEVENT_KEY_NP_0, 261, -1, INPUTEVENT_KEY_NP_PERIOD, INPUTEVENT_KEY_NP_DIV, INPUTEVENT_KEY_ENTER, -1, -1 }; static int kb_ck[] = { INPUTEVENT_KEY_CURSOR_LEFT, -1, INPUTEVENT_KEY_CURSOR_RIGHT, -1, INPUTEVENT_KEY_CURSOR_UP, -1, INPUTEVENT_KEY_CURSOR_DOWN, -1, INPUTEVENT_KEY_CTRL, INPUTEVENT_KEY_ALT_RIGHT, -1, INPUTEVENT_KEY_SHIFT_LEFT, -1, -1 }; static int kb_se[] = { INPUTEVENT_KEY_A, -1, INPUTEVENT_KEY_D, -1, INPUTEVENT_KEY_W, -1, INPUTEVENT_KEY_S, -1, INPUTEVENT_KEY_ALT_LEFT, -1, INPUTEVENT_KEY_SHIFT_RIGHT, -1, -1 }; static int kb_cd32_np[] = { INPUTEVENT_KEY_NP_4, -1, INPUTEVENT_KEY_NP_6, -1, INPUTEVENT_KEY_NP_8, -1, INPUTEVENT_KEY_NP_2, -1, INPUTEVENT_KEY_NP_1, -1, INPUTEVENT_KEY_NP_3, -1, INPUTEVENT_KEY_NP_7, -1, INPUTEVENT_KEY_NP_9, -1, INPUTEVENT_KEY_PERIOD, -1, INPUTEVENT_KEY_NP_SUB, -1, INPUTEVENT_KEY_NP_MUL, -1, -1 }; static int kb_cd32_ck[] = { INPUTEVENT_KEY_CURSOR_LEFT, -1, INPUTEVENT_KEY_CURSOR_RIGHT, -1, INPUTEVENT_KEY_CURSOR_UP, -1, INPUTEVENT_KEY_CURSOR_DOWN, -1, INPUTEVENT_KEY_NP_1, -1, INPUTEVENT_KEY_NP_3, -1, INPUTEVENT_KEY_NP_7, -1, INPUTEVENT_KEY_NP_9, -1, INPUTEVENT_KEY_NP_DIV, -1, INPUTEVENT_KEY_NP_SUB, -1, INPUTEVENT_KEY_NP_MUL, -1, -1 }; static int kb_cd32_se[] = { INPUTEVENT_KEY_A, -1, INPUTEVENT_KEY_D, -1, INPUTEVENT_KEY_W, -1, INPUTEVENT_KEY_S, -1, INPUTEVENT_KEY_NP_1, -1, INPUTEVENT_KEY_NP_3, -1, INPUTEVENT_KEY_NP_7, -1, INPUTEVENT_KEY_NP_9, -1, INPUTEVENT_KEY_NP_DIV, -1, INPUTEVENT_KEY_NP_SUB, -1, INPUTEVENT_KEY_NP_MUL, -1, -1 }; static int kb_xa1[] = { INPUTEVENT_KEY_NP_4, -1, INPUTEVENT_KEY_NP_6, -1, INPUTEVENT_KEY_NP_8, -1, INPUTEVENT_KEY_NP_2, INPUTEVENT_KEY_NP_5, -1, INPUTEVENT_KEY_CTRL, -1, INPUTEVENT_KEY_ALT_LEFT, -1, INPUTEVENT_KEY_SPACE, -1, -1 }; static int kb_xa2[] = { INPUTEVENT_KEY_D, -1, INPUTEVENT_KEY_G, -1, INPUTEVENT_KEY_R, -1, INPUTEVENT_KEY_F, -1, INPUTEVENT_KEY_A, -1, INPUTEVENT_KEY_S, -1, INPUTEVENT_KEY_Q, -1 }; static int kb_arcadia[] = { INPUTEVENT_KEY_F2, -1, INPUTEVENT_KEY_1, -1, INPUTEVENT_KEY_2, -1, INPUTEVENT_KEY_5, -1, INPUTEVENT_KEY_6, -1, -1 }; static int kb_arcadiaxa[] = { INPUTEVENT_KEY_1, -1, INPUTEVENT_KEY_2, -1, INPUTEVENT_KEY_3, -1, INPUTEVENT_KEY_4, -1, INPUTEVENT_KEY_6, -1, INPUTEVENT_KEY_LEFTBRACKET, INPUTEVENT_KEY_SHIFT_LEFT, -1, INPUTEVENT_KEY_RIGHTBRACKET, -1, INPUTEVENT_KEY_C, -1, INPUTEVENT_KEY_5, -1, INPUTEVENT_KEY_Z, -1, INPUTEVENT_KEY_X, -1, -1 }; static int *kbmaps[] = { kb_np, kb_ck, kb_se, kb_cd32_np, kb_cd32_ck, kb_cd32_se, kb_xa1, kb_xa2, kb_arcadia, kb_arcadiaxa }; */ #endif static struct uae_input_device_kbr_default keytrans_amiga[] = { { INPUTEVENT_KEY_CAPS_LOCK, INPUTEVENT_KEY_CAPS_LOCK, ID_FLAG_TOGGLE }, { -1, 0 } }; static struct uae_input_device_kbr_default *keytrans[] = { keytrans_amiga, keytrans_amiga, keytrans_amiga, }; static int kb_none[] = { -1 }; static int *kbmaps[] = { kb_none, kb_none, kb_none, kb_none, kb_none, kb_none, kb_none, kb_none, kb_none, kb_none }; /* * Build a default key translation table using the * specified host keymap. */ void keyboard_settrans (void) { write_log("KB: keyboard_settrans\n"); inputdevice_setkeytranslation (keytrans, kbmaps); } fs-uae-2.2.3+dfsg/src/od-fs/fsdb_host.cpp0000644000175000017500000006453612162366654020350 0ustar glaubitzglaubitz/* * UAE - The Un*x Amiga Emulator * * Library of functions to make emulated filesystem as independent as * possible of the host filesystem's capabilities. * * Copyright 1997 Mathias Ortmann * Copyright 1999 Bernd Schmidt * Copyright 2012 Frode Solheim */ #include "sysconfig.h" #include "sysdeps.h" #include "options.h" #include "uae/memory.h" #include "fsdb.h" #include "zfile.h" #include #include #include #include #include #ifdef WINDOWS #include #else #include #endif #include #include "fsdb_host.h" void fsdb_lock() { // FIXME } void fsdb_unlock() { // FIXME } static char g_fsdb_file_path_buffer[PATH_MAX + 1] = { }; char *fsdb_file_path(const char* nname) { strncpy(g_fsdb_file_path_buffer, nname, PATH_MAX); return g_fsdb_file_path_buffer; } int fsdb_name_invalid(const TCHAR *n) { if (g_fsdb_debug) { write_log("fsdb_name_invalid n=%s\n", n); } return 0; } int fsdb_name_invalid_dir(const TCHAR *n) { if (g_fsdb_debug) { write_log("fsdb_name_invalid_dir n=%s\n", n); } return 0; } uae_u32 filesys_parse_mask(uae_u32 mask) { return mask ^ 0xf; } int fsdb_exists(const TCHAR *nname) { return fs_path_exists(nname); } #define PERM_OFFSET 0 #define PERM_LEN 8 //#define DAYS_LEN 5 //#define MINS_LEN 4 //#define TICKS_LEN 4 #define COMMENT_OFFSET 25 //#define TIME_OFFSET PERM_LEN + 1 //#define TIME_LEN (1 + DAYS_LEN + 1 + MINS_LEN + 1 + TICKS_LEN + 1) #define TIME_LEN 22 void fsdb_init_file_info(fsdb_file_info *info) { info->days = 0; info->mins = 0; info->ticks = 0; info->comment = NULL; info->mode = A_FIBF_READ | A_FIBF_WRITE | A_FIBF_EXECUTE | A_FIBF_DELETE; if (uae_deterministic_mode()) { // leave time at 0, 0, 0 } else { fs_time_val tv; fs_get_current_time(&tv); struct mytimeval mtv; mtv.tv_sec = tv.tv_sec + fs_get_local_time_offset(tv.tv_sec); mtv.tv_usec = tv.tv_usec; timeval_to_amiga (&mtv, &info->days, &info->mins, &info->ticks); if (g_fsdb_debug) { write_log("- initialized date/time from current time\n"); write_log("- days %d mins %d ticks %d - %lld %d\n", info->days, info->mins, info->ticks, mtv.tv_sec, mtv.tv_usec); } } } FILE *fsdb_open_meta_file_for_path(const char *path, const char *mode, int always_open) { char *meta_file = fs_strconcat(path, ".uaem", NULL); if (g_fsdb_debug) { write_log("opening meta file %s mode %s\n", meta_file, mode); } if (!always_open) { if (!fs_path_exists(meta_file)) { if (g_fsdb_debug) { write_log("- didn't exist, don't force open\n"); } return NULL; } } FILE *f = fs_fopen(meta_file, mode); if (g_fsdb_debug) { write_log("FILE is %p\n", f); } free(meta_file); return f; } /* return supported combination */ int fsdb_mode_supported(const a_inode *aino) { int mask = aino->amigaos_mode; return mask; } #define NUM_EVILCHARS 9 static TCHAR evilchars[NUM_EVILCHARS] = { '%', '\\', '*', '?', '\"', '/', '|', '<', '>'}; static char hex_chars[] = "0123456789abcdef"; char *aname_to_nname(const char *aname, int ascii) { size_t len = strlen(aname); int repl_1 = -1; int repl_2 = -1; TCHAR a = aname[0]; TCHAR b = (a == '\0' ? a : aname[1]); TCHAR c = (b == '\0' ? b : aname[2]); TCHAR d = (c == '\0' ? c : aname[3]); if (a >= 'a' && a <= 'z') a -= 32; if (b >= 'a' && b <= 'z') b -= 32; if (c >= 'a' && c <= 'z') c -= 32; // reserved dos devices in Windows size_t ll = 0; if (a == 'A' && b == 'U' && c == 'X') ll = 3; // AUX if (a == 'C' && b == 'O' && c == 'N') ll = 3; // CON if (a == 'P' && b == 'R' && c == 'N') ll = 3; // PRN if (a == 'N' && b == 'U' && c == 'L') ll = 3; // NUL if (a == 'L' && b == 'P' && c == 'T' && (d >= '0' && d <= '9')) ll = 4; // LPT# if (a == 'C' && b == 'O' && c == 'M' && (d >= '0' && d <= '9')) ll = 4; // COM# // AUX.anything, CON.anything etc.. are also illegal names in Windows if (ll && (len == ll || (len > ll && aname[ll] == '.'))) { repl_1 = 2; } // spaces and periods at the end are a no-no in Windows int i = len - 1; if (aname[i] == '.' || aname[i] == ' ') { repl_2 = i; } // allocating for worst-case scenario here (max replacements) char *buf = (char*) malloc(len * 3 + 1); char *p = buf; int repl, j; unsigned char x; for (i = 0; i < (int) len; i++) { x = (unsigned char) aname[i]; repl = 0; if (i == repl_1) { repl = 1; } else if (i == repl_2) { repl = 2; } else if (x < 32) { // these are not allowed on Windows repl = 1; } else if (ascii && x > 127) { repl = 1; } for (j = 0; j < NUM_EVILCHARS; j++) { if (x == evilchars[j]) { repl = 1; break; } } if (i == len - 1) { // last character, we can now check the file ending if (len >= 5 && strncasecmp(aname + len - 5, ".uaem", 5) == 0) { // we don't allow Amiga files ending with .uaem, so we replace // the last character repl = 1; } } if (repl) { *p++ = '%'; *p++ = hex_chars[(x & 0xf0) >> 4]; *p++ = hex_chars[x & 0xf]; } else { *p++ = x; } } *p++ = '\0'; if (ascii) { return buf; } char* result = fs_utf8_from_latin1(buf, -1); free(buf); if (g_fsdb_debug) { write_log("aname_to_nname %s => %s\n", aname, result); } return result; } static unsigned char char_to_hex(unsigned char c) { if (c >= '0' && c <= '9') { return c - '0'; } if (c >= 'a' && c <= 'f') { return 10 + c - 'a'; } if (c >= 'A' && c <= 'F') { return 10 + c - 'A'; } return 0; } char *nname_to_aname(const char *nname, int noconvert) { int len = strlen(nname); char *result = strdup(nname); unsigned char *p = (unsigned char *) result; for (int i = 0; i < len; i++) { unsigned char c = nname[i]; if (c == '%' && i < len - 2) { *p++ = (char_to_hex(nname[i + 1]) << 4) | char_to_hex(nname[i + 2]); i += 2; } else { *p++ = c; } } *p++ = '\0'; if (noconvert) { return result; } char* cresult = fs_utf8_to_latin1(result, -1); free(result); if (g_fsdb_debug) { if (cresult) { write_log("nname_to_aname %s => %s\n", nname, cresult); } else { write_log("nname_to_aname %s => Failed\n", nname); } } return cresult; } /* Return nonzero if we can represent the amigaos_mode of AINO within the * native FS. Return zero if that is not possible. */ int fsdb_mode_representable_p(const a_inode *aino, int amigaos_mode) { return 1; } TCHAR *fsdb_create_unique_nname(a_inode *base, const TCHAR *suggestion) { char *nname = aname_to_nname(suggestion, 0); TCHAR *p = build_nname(base->nname, nname); free(nname); return p; } /* Return 1 if the nname is a special host-only name which must be translated * to aname using fsdb. */ int custom_fsdb_used_as_nname(a_inode *base, const TCHAR *nname) { //STUB("base=? nname=\"%s\"", nname); return 1; } int fsdb_get_file_info(const char *nname, fsdb_file_info *info) { int error = 0; if (g_fsdb_debug) { write_log("fsdb_get_file_info %s\n", nname); } info->comment = NULL; if (!fs_path_exists(nname)) { if (g_fsdb_debug) { write_log("- file does not exist: %s\n", nname); } info->type = 0; return ERROR_OBJECT_NOT_AROUND; } info->type = fs_path_is_dir(nname) ? 2 : 1; info->mode = 0; int read_perm = 0; int read_time = 0; int read_comment = 0; char *meta_file = fs_strconcat(nname, ".uaem", NULL); FILE *f = fsdb_open_meta_file_for_path(nname, "rb", 1); int file_size = 0; if (f == NULL) { if (g_fsdb_debug) { write_log("fsdb_get_file_info - could not open file\n"); } error = host_errno_to_dos_errno(errno); } else { fseek(f, 0, SEEK_END); file_size = ftell(f); fseek(f, 0, SEEK_SET); } char *data = (char *) malloc(file_size + 1); data[file_size] = '\0'; char *p = data; char *end = data + file_size; if (end - data > 0) { int count = fread(data, 1, file_size, f); if (count != file_size) { write_log("WARNING: could not read permissions " "from %s (%d)\n", meta_file, errno); error = host_errno_to_dos_errno(errno); end = data; } } if (f != NULL) { fclose(f); } if ((end - p) >= 3) { if (p[0] == 0xef && p[1] == 0xbb && p[2] == 0xbf) { p += 3; } } //while (*p == ' ') { // p++; //} if ((end - p) >= 8) { info->mode |= *(p++) == 'h' ? A_FIBF_HIDDEN : 0; info->mode |= *(p++) == 's' ? A_FIBF_SCRIPT : 0; info->mode |= *(p++) == 'p' ? A_FIBF_PURE : 0; info->mode |= *(p++) == 'a' ? A_FIBF_ARCHIVE : 0; info->mode |= *(p++) == 'r' ? A_FIBF_READ : 0; info->mode |= *(p++) == 'w' ? A_FIBF_WRITE : 0; info->mode |= *(p++) == 'e' ? A_FIBF_EXECUTE : 0; info->mode |= *(p++) == 'd' ? A_FIBF_DELETE : 0; read_perm = 1; } //while (*p == ' ') { // p++; //} p++; if ((end - p) >= TIME_LEN) { //p[TIME_LEN - 1] = '\0'; struct tm tm; tm.tm_isdst = -1; // haven't got strptime on Windows... p[4] = '\0'; tm.tm_year = atoi(p) - 1900; p += 5; p[2] = '\0'; tm.tm_mon = atoi(p) - 1; p += 3; p[2] = '\0'; tm.tm_mday = atoi(p); p += 3; p[2] = '\0'; tm.tm_hour = atoi(p); p += 3; p[2] = '\0'; tm.tm_min = atoi(p); p += 3; p[2] = '\0'; tm.tm_sec = atoi(p); p += 3; p[2] = '\0'; int sub = atoi(p); p += 3; //printf("hrs: %d\n", tm.tm_hour); //printf("min: %d\n", tm.tm_min); //printf("sec: %d\n", tm.tm_sec); //printf("sub: %d\n", sub); struct mytimeval mtv; mtv.tv_sec = fs_timegm(&tm); if (mtv.tv_sec == -1) { // an error occured while parsing time - invalid time write_log("- warning, error reading time from metadata\n"); } else { mtv.tv_usec = sub * 10000; timeval_to_amiga(&mtv, &info->days, &info->mins, &info->ticks); read_time = 1; } } if ((end - p) > 0) { int len = end - p; info->comment = (char*) malloc(len + 1); if (g_fsdb_debug) { write_log("- malloced comment len %d (+1)\n", len); } char *o = info->comment; while (p < end && *p != '\r' && *p != '\n') { *o++ = *p++; } *o = '\0'; } free(data); free(meta_file); if (!read_perm) { if (g_fsdb_debug) { write_log("- setting default perms\n"); } info->mode |= A_FIBF_READ; info->mode |= A_FIBF_WRITE; info->mode |= A_FIBF_EXECUTE; info->mode |= A_FIBF_DELETE; if (! uae_deterministic_mode()) { // FIXME: remove WRITE and DELETE if file is not writable } } if (!read_time) { if (uae_deterministic_mode()) { // this is not a very good solution. For instance, WB 1.3 does // not update .info files correctly when the file date/time is // constant. info->days = 0; info->mins = 0; info->ticks = 0; } else { struct fs_stat buf; if (fs_stat(nname, &buf) != 0) { if (g_fsdb_debug) { write_log("- error stating %s (%d)\n", nname, errno); } } mytimeval mtv; mtv.tv_sec = buf.mtime + fs_get_local_time_offset(buf.mtime); mtv.tv_usec = buf.mtime_nsec / 1000; timeval_to_amiga(&mtv, &info->days, &info->mins, &info->ticks); if (g_fsdb_debug) { write_log("- initialized date/time from file mtime\n"); write_log("- days %d mins %d ticks %d - %lld %d\n", info->days, info->mins, info->ticks, mtv.tv_sec, mtv.tv_usec); } } } return error; } int fsdb_set_file_info(const char *nname, fsdb_file_info *info) { FILE *f = NULL; if (g_fsdb_debug) { write_log("fsdb_set_file_info %s\n", nname); } int error = 0; if (!fs_path_exists(nname)) { error = ERROR_OBJECT_NOT_AROUND; } int need_metadata_file = 1; if (info->comment != NULL) { if (g_fsdb_debug) { write_log("- comment is not NULL: \"%s\"\n", info->comment); } } else if (info->mode != (A_FIBF_READ | A_FIBF_WRITE | A_FIBF_EXECUTE | \ A_FIBF_DELETE)) { if (g_fsdb_debug) { write_log("- mode was %d\n", info->mode); } } else { struct mytimeval mtv; amiga_to_timeval(&mtv, info->days, info->mins, info->ticks); mtv.tv_sec -= fs_get_local_time_offset(mtv.tv_sec); if (g_fsdb_debug) { write_log("- days %d mins %d ticks %d - %lld %d\n", info->days, info->mins, info->ticks, mtv.tv_sec, mtv.tv_usec); write_log("- fs_get_local_time_offset %d\n", fs_get_local_time_offset(mtv.tv_sec)); } struct timeval tv; tv.tv_sec = mtv.tv_sec; tv.tv_usec = mtv.tv_usec; if (fs_set_file_time(nname, &tv) != 0) { if (g_fsdb_debug) { write_log("- errno %d setting file mtime\n", errno); } error = errno; } else { if (g_fsdb_debug) { write_log("- checking if precision is good enough!\n"); } struct fs_stat buf; if (fs_stat(nname, &buf) == 0) { write_log("- %d vs %d\n", (int) buf.mtime, (int) mtv.tv_sec); write_log("- %d vs %d\n", (int) buf.mtime_nsec, (int) (mtv.tv_usec * 1000)); if (buf.mtime == mtv.tv_sec && buf.mtime_nsec == mtv.tv_usec * 1000) { if (g_fsdb_debug) { write_log("- good enough!\n"); need_metadata_file = 0; } } else { if (g_fsdb_debug) { write_log("- *not* good enough!\n"); } } } } } // always write metadata file, for now... need_metadata_file = 1; if (!error) { f = fsdb_open_meta_file_for_path(nname, "wb", need_metadata_file); if (f == NULL) { if (g_fsdb_debug) { write_log("fsdb_set_file_info - could not open file\n"); } error = host_errno_to_dos_errno(errno); } } if (need_metadata_file == 0 && f == NULL) { return 0; } if (!error) { char astr[] = "--------"; if (info->mode & A_FIBF_HIDDEN) astr[0] = 'h'; if (info->mode & A_FIBF_SCRIPT) astr[1] = 's'; if (info->mode & A_FIBF_PURE) astr[2] = 'p'; if (info->mode & A_FIBF_ARCHIVE) astr[3] = 'a'; if (info->mode & A_FIBF_READ) astr[4] = 'r'; if (info->mode & A_FIBF_WRITE) astr[5] = 'w'; if (info->mode & A_FIBF_EXECUTE) astr[6] = 'e'; if (info->mode & A_FIBF_DELETE) astr[7] = 'd'; write_log("- writing mode %s\n", astr); if (fwrite(astr, 8, 1, f) != 1) { error = host_errno_to_dos_errno(errno); } } if (!error) { struct mytimeval mtv; amiga_to_timeval(&mtv, info->days, info->mins, info->ticks); // FIXME: reentrant? time_t secs = mtv.tv_sec; struct tm *gt = gmtime(&secs); if (fprintf(f, " %04d-%02d-%02d %02d:%02d:%02d.%02d ", 1900 + gt->tm_year, 1 + gt->tm_mon, gt->tm_mday, gt->tm_hour, gt->tm_min, gt->tm_sec, mtv.tv_usec / 10000) < 0) { //if (fprintf(f, " %05d %04d %04d ", info->days, info->mins, // info->ticks) < 0) { if (g_fsdb_debug) { write_log("fsdb_set_file_time - fprintf failed\n"); } error = host_errno_to_dos_errno(errno); } } if (!error) { if (info->comment) { write_log("- writing comment %s\n", info->comment); int len = strlen(info->comment); if (len && fwrite(info->comment, len, 1, f) != 1) { error = host_errno_to_dos_errno(errno); } } } if (!error) { fprintf(f, "\n"); } if (f != NULL) { fclose(f); } if (info->comment) { free(info->comment); } return error; } void fsdb_get_file_time(a_inode *aino, int *days, int *mins, int *ticks) { fsdb_file_info info; fsdb_get_file_info(aino->nname, &info); if (info.type) { *days = info.days; *mins = info.mins; *ticks = info.ticks; if (info.comment) { free(info.comment); } } else { // FIXME: file does not exist *days = 0; *mins = 0; *ticks = 0; } } bool my_utime(const char *name, struct mytimeval *tv) { int days = 0; int mins = 0; int ticks = 0; if (tv == NULL) { fs_time_val tv; fs_get_current_time(&tv); struct mytimeval mtv; mtv.tv_sec = tv.tv_sec + fs_get_local_time_offset(tv.tv_sec); mtv.tv_usec = tv.tv_usec; timeval_to_amiga (&mtv, &days, &mins, &ticks); } else { struct mytimeval mtv2; mtv2.tv_sec = tv->tv_sec + fs_get_local_time_offset(tv->tv_sec); mtv2.tv_usec = tv->tv_usec; timeval_to_amiga(&mtv2, &days, &mins, &ticks); } if (g_fsdb_debug) { write_log("fsdb_set_file_time nname is %s\n", name); } if (!fs_path_exists(name)) { write_log("WARNING: fsdb_set_file_time file \"%s\" does not exist\n", name); my_errno = ERROR_OBJECT_NOT_AROUND; return 0; } fsdb_file_info info; fsdb_get_file_info(name, &info); info.days = days; info.mins = mins; info.ticks = ticks; my_errno = fsdb_set_file_info(name, &info); return my_errno == 0; } extern unsigned char g_latin1_lower_table[256]; static void lower_latin1(char *s) { unsigned char *u = (unsigned char*) s; while (*u) { *u = g_latin1_lower_table[*u]; u++; } } int fsdb_fill_file_attrs(a_inode *base, a_inode *aino) { if (g_fsdb_debug) { write_log("fsdb_fill_file_attrs nname is %s\n", aino->nname); } fsdb_file_info info; fsdb_get_file_info(aino->nname, &info); if (!info.type) { // file does not exist return 0; } aino->dir = info.type == 2; aino->amigaos_mode = filesys_parse_mask(info.mode); if (info.comment) { aino->comment = nname_to_aname(info.comment, 1); free(info.comment); } else { aino->comment = NULL; } return 1; } int fsdb_set_file_attrs(a_inode *aino) { if (g_fsdb_debug) { write_log("fsdb_set_file_attrs nname is %s\n", aino->nname); } if (!fs_path_exists(aino->nname)) { write_log("WARNING: fsdb_set_file_attrs file \"%s\" does not exist\n", aino->nname); return ERROR_OBJECT_NOT_AROUND; } fsdb_file_info info; fsdb_get_file_info(aino->nname, &info); info.mode = filesys_parse_mask(aino->amigaos_mode); if (info.comment) { free(info.comment); info.comment = NULL; } if (aino->comment && aino->comment[0]) { if (g_fsdb_debug) { write_log("- setting comment to %s\n", aino->comment); } info.comment = aname_to_nname(aino->comment, 1); } return fsdb_set_file_info(aino->nname, &info); } static void find_nname_case(const char *dir_path, char **name) { // FIXME: should cache these results...!! if (g_fsdb_debug) { write_log("find case for %s in dir %s\n", *name, dir_path); } fs_dir *dir = fs_dir_open(dir_path, 0); if (dir == NULL) { write_log("open dir %s failed\n", *name); return; } //gsize read, written; //gchar *cmp_name = g_convert(*name, -1, "ISO-8859-1", "UTF-8", &read, // &written, NULL); char *cmp_name = fs_utf8_to_latin1(*name, -1); if (cmp_name == NULL) { write_log("WARNING: could not convert to latin1: %s", *name); return; } lower_latin1(cmp_name); const char *result; while (1) { result = fs_dir_read_name(dir); if (!result) { break; } //char *cmp_result = g_convert(result, -1, "ISO-8859-1", "UTF-8", &read, // &written, NULL); char *cmp_result = fs_utf8_to_latin1(result, -1); //printf("%s %s\n", result, cmp_result); if (cmp_result == NULL) { // file name could not be represented as ISO-8859-1, so it // will be ignored write_log("cannot convert name \"%s\" to ISO-8859-1 - ignoring\n", result); continue; } lower_latin1(cmp_result); if (strcmp(cmp_name, cmp_result) == 0) { // FIXME: memory leak, free name first? *name = fs_strdup(result); if (g_fsdb_debug) { write_log(" %s\n", *name); } break; } free(cmp_result); } fs_dir_close(dir); free(cmp_name); } char *fsdb_native_path(const char *root_dir, const char *amiga_path) { if (g_fsdb_debug) { write_log("fsdb_native_path (%s) %s\n", root_dir, amiga_path); } // splitting / allocating strings is not the most efficient way to do it, // but the code gets very readable... char *current_path = fs_strdup(root_dir); char **parts = fs_strsplit(amiga_path, "/", 0); char **part = parts; while (*part) { if (g_fsdb_debug) { write_log("- %s\n", *part); } char *nname = aname_to_nname(*part, 0); find_nname_case(current_path, &nname); char *free_me = current_path; current_path = fs_path_join(current_path, nname, NULL); free(free_me); free(nname); part++; } fs_strfreev(parts); return current_path; } a_inode *custom_fsdb_lookup_aino_aname(a_inode *base, const TCHAR *aname) { //STUB("base=? aname=\"%s\"", aname); char *nname = aname_to_nname(aname, 0); find_nname_case(base->nname, &nname); char *full_nname = build_nname(base->nname, (TCHAR*) nname); fsdb_file_info info; fsdb_get_file_info(full_nname, &info); if (!info.type) { if (g_fsdb_debug) { write_log("custom_fsdb_lookup_aino_aname aname = %s " "(does not exist)\n", aname); } if (info.comment) { free(info.comment); info.comment = NULL; } free(full_nname); free(nname); return NULL; } a_inode *aino = xcalloc (a_inode, 1); aino->aname = nname_to_aname(nname, 0); free(nname); aino->nname = full_nname; if (info.comment) { aino->comment = nname_to_aname(info.comment, 1); free(info.comment); } else { aino->comment = NULL; } aino->amigaos_mode = filesys_parse_mask(info.mode); aino->dir = info.type == 2; aino->has_dbentry = 0; aino->dirty = 0; aino->db_offset = 0; if (g_fsdb_debug) { write_log("custom_fsdb_lookup_aino_aname aname = %s " "(full_nname = %s)\n", aname, full_nname); } return aino; } a_inode *custom_fsdb_lookup_aino_nname(a_inode *base, const TCHAR *nname) { //STUB("base=? nname=\"%s\"", nname); char *full_nname = build_nname(base->nname, (TCHAR*) nname); fsdb_file_info info; fsdb_get_file_info(full_nname, &info); if (!info.type) { if (info.comment) { free(info.comment); info.comment = NULL; } free(full_nname); return NULL; } a_inode *aino = xcalloc (a_inode, 1); aino->aname = nname_to_aname(nname, 0); aino->nname = full_nname; if (info.comment) { aino->comment = nname_to_aname(info.comment, 1); free(info.comment); } else { aino->comment = NULL; } aino->amigaos_mode = filesys_parse_mask(info.mode); aino->dir = info.type == 2; aino->has_dbentry = 0; aino->dirty = 0; aino->db_offset = 0; return aino; } unsigned char g_latin1_lower_table[256] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 215, 248, 249, 250, 251, 252, 253, 254, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, }; fs-uae-2.2.3+dfsg/src/od-fs/sysconfig.h0000644000175000017500000003177712162366654020047 0ustar glaubitzglaubitz// FIXME: this file was created by configure for PUAE and has been // manually altered with reasonable values. // New macros that are explicitly used in code are added to config.h for // now, to separate them from this messy file. Have to eventually consider // using autotools... #include "config.h" /* src/sysconfig.h. Generated from sysconfig.h.in by configure. */ /* src/sysconfig.h.in. Generated from configure.in by autoheader. */ /* Define if building universal (internal helper macro) */ /* #undef AC_APPLE_UNIVERSAL_BUILD */ /* CPU is 64bit */ /* #undef CPU_64_BIT */ /* we want ecs_denise */ /* #undef ECS_DENISE */ /* CPU supports 3DNOW */ /* #undef HAVE_3DNOW */ /* Define to 1 if you have the `alarm' function. */ #define HAVE_ALARM 1 /* Define to 1 if you have the 'bswap_16' function. */ //#define HAVE_BSWAP_16 1 /* Define to 1 if you have the 'bswap_32' function. */ //#define HAVE_BSWAP_32 1 /* Define to 1 if you have the header file. */ //#define HAVE_BYTESWAP_H 1 /* Define to 1 if you have the header file. */ #define HAVE_CAPS_CAPSIMAGE_H 1 /* Define to 1 if you have the header file. */ #define HAVE_CURSES_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_CYBERGRAPHX_CYBERGRAPHICS_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_DEVICES_AHI_H */ /* Define to 1 if you have the header file, and it defines `DIR'. */ #define HAVE_DIRENT_H 1 /* "Define to 1 if you have 'dlopen' function */ #define HAVE_DLOPEN 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_DUSTAT_H */ /* Define to 1 if you have the header file. */ #define HAVE_FCNTL_H 1 /* Define to 1 if you have the CAPS framework. */ /* #undef HAVE_FRAMEWORK_CAPSIMAGE */ /* Define to 1 if you have the `gettimeofday' function. */ #define HAVE_GETTIMEOFDAY 1 /* Define to 1 if you have the `gmtime_r' function. */ #define HAVE_GMTIME_R 1 /* Define to 1 if you have the header file. */ #define HAVE_INTTYPES_H 1 /* Define if exists, doesn't clash with , and declares uintmax_t. */ #define HAVE_INTTYPES_H_WITH_UINTMAX 1 /* Define to 1 if you have the `isinf' function. */ #define HAVE_ISINF 1 /* Define to 1 if you have the `isnan' function. */ #define HAVE_ISNAN 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_LIBRARIES_CYBERGRAPHICS_H */ /* Define to 1 if you have the `localtime_r' function. */ #define HAVE_LOCALTIME_R 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_MACHINE_JOYSTICK_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_MACHINE_SOUNDCARD_H */ /* Define to 1 if you have the header file. */ #define HAVE_MEMORY_H 1 /* CPU supports MMX */ /* #undef HAVE_MMX */ /* Define to 1 if you have the `nanosleep' function. */ #ifndef WINDOWS #define HAVE_NANOSLEEP 1 #endif /* Define to 1 if you have the header file. */ #define HAVE_NCURSES_H 1 /* Define to 1 if you have the header file, and it defines `DIR'. */ /* #undef HAVE_NDIR_H */ /* Define if you have POSIX threads libraries and header files. */ /* #undef HAVE_PTHREAD */ /* Define to 1 if you have the `readdir_r' function. */ #define HAVE_READDIR_R 1 /* Define to 1 if you have the `select' function. */ #define HAVE_SELECT 1 /* Define to 1 if you have the `setitimer' function. */ #define HAVE_SETITIMER 1 /* Define to 1 if you have the `sigaction' function. */ #define HAVE_SIGACTION 1 /* Define to 1 if you have the `sleep' function. */ #define HAVE_SLEEP 1 /* CPU supports SSE */ /* #undef HAVE_SSE */ /* CPU supports SSE2 */ /* #undef HAVE_SSE2 */ /* CPU supports SSE4_1 */ /* #undef HAVE_SSE4_1 */ /* CPU supports SSSE3 */ /* #undef HAVE_SSSE3 */ /* Define to 1 if stdbool.h conforms to C99. */ #define HAVE_STDBOOL_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDINT_H 1 /* Define if exists, doesn't clash with , and declares uintmax_t. */ #define HAVE_STDINT_H_WITH_UINTMAX 1 /* Define to 1 if you have the header file. */ #define HAVE_STDLIB_H 1 /* Define to 1 if you have the `strcasecmp' function. */ #define HAVE_STRCASECMP 1 /* Define to 1 if you have the `strcmpi' function. */ /* #undef HAVE_STRCMPI */ /* Define to 1 if you have the `strdup' function. */ #define HAVE_STRDUP 1 /* Define to 1 if you have the `strerror' function. */ #define HAVE_STRERROR 1 /* Define to 1 if you have the `stricmp' function. */ /* #undef HAVE_STRICMP */ /* Define to 1 if you have the header file. */ #define HAVE_STRINGS_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STRING_H 1 /* Define to 1 if you have the `strstr' function. */ #define HAVE_STRSTR 1 /* Define to 1 if `st_blocks' is a member of `struct stat'. */ //#ifndef WINDOWS //#define HAVE_STRUCT_STAT_ST_BLOCKS 1 //#endif /* Define to 1 if your `struct stat' has `st_blocks'. Deprecated, use `HAVE_STRUCT_STAT_ST_BLOCKS' instead. */ //#ifndef WINDOWS //#define HAVE_ST_BLOCKS 1 //#endif /* Define to 1 if you have the header file. */ /* #undef HAVE_SUN_AUDIOIO_H */ /* Define to 1 if you have the `sync' function. */ #define HAVE_SYNC 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_AUDIOIO_H */ /* Define to 1 if you have the header file, and it defines `DIR'. */ /* #undef HAVE_SYS_DIR_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_FILIO_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_FILSYS_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_FS_S5PARAM_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_FS_TYPES_H */ /* Define to 1 if you have the header file. */ #define HAVE_SYS_IOCTL_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_IPC_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_MMAN_H 1 /* Define to 1 if you have the header file, and it defines `DIR'. */ /* #undef HAVE_SYS_NDIR_H */ /* Define to 1 if you have the header file. */ #define HAVE_SYS_SHM_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_SOUNDCARD_H 1 /* Define to 1 if you have the header file. */ #if !defined(WINDOWS) && !defined(ANDROID) #define HAVE_SYS_STATVFS_H 1 #endif /* Define to 1 if you have the header file. */ #define HAVE_SYS_STAT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_TERMIOS_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_TIME_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_TYPES_H 1 /* Define to 1 if you have the `timegm' function. */ #define HAVE_TIMEGM 1 /* Define if you have the 'uintmax_t' type in or . */ #define HAVE_UINTMAX_T 1 /* Define to 1 if you have the header file. */ #define HAVE_UNISTD_H 1 /* Define if you have the 'unsigned long long' type. */ #define HAVE_UNSIGNED_LONG_LONG 1 /* Define to 1 if you have the `usleep' function. */ #define HAVE_USLEEP 1 /* Define to 1 if you have the header file. */ #define HAVE_UTIME_H 1 /* Define to 1 if `utime(file, NULL)' sets file's timestamp to the present. */ #define HAVE_UTIME_NULL 1 /* Define to 1 if you have the header file. */ //#ifdef _MAC //#else //#define HAVE_VALUES_H 1 //#endif /* Define to 1 if you have the `vfprintf' function. */ #define HAVE_VFPRINTF 1 /* Define to 1 if you have the `vprintf' function. */ #define HAVE_VPRINTF 1 /* Define to 1 if you have the `vsprintf' function. */ #define HAVE_VSPRINTF 1 /* Define to 1 if the system has the type `_Bool'. */ #define HAVE__BOOL 1 /* Define to 1 if your CPU profitably supports multiplication. */ #define MULTIPLICATION_PROFITABLE 1 /* Name of package */ //#define PACKAGE "fs-uae" /* Define to the address where bug reports for this package should be sent. */ //#define PACKAGE_BUGREPORT "" /* Define to the full name of this package. */ //#define PACKAGE_NAME "FS-UAE" /* Define to the full name and version of this package. */ //#define PACKAGE_STRING "FS-UAE 1.0.0" /* Define to the one symbol short name of this package. */ //#define PACKAGE_TARNAME "fs-uae" /* Define to the home page for this package. */ //#define PACKAGE_URL "" /* Define to the version of this package. */ //#define PACKAGE_VERSION "1.0.0" /* Define to the necessary symbol if this constant uses a non-standard name on your system. */ /* #undef PTHREAD_CREATE_JOINABLE */ /* Define as the return type of signal handlers (`int' or `void'). */ #define RETSIGTYPE void /* The size of `char', as computed by sizeof. */ #define SIZEOF_CHAR 1 /* The size of `int', as computed by sizeof. */ #define SIZEOF_INT 4 /* The size of `long', as computed by sizeof. */ #define SIZEOF_LONG 4 /* The size of `long long', as computed by sizeof. */ #define SIZEOF_LONG_LONG 8 /* The size of `short', as computed by sizeof. */ #define SIZEOF_SHORT 2 /* The size of `void *', as computed by sizeof. */ #if __LP64__ #define SIZEOF_VOID_P 8 #else #define SIZEOF_VOID_P 4 #endif /* The size of `__int64', as computed by sizeof. */ #define SIZEOF___INT64 0 /* Define if the block counts reported by statfs may be truncated to 2GB and the correct values may be stored in the f_spare array. (SunOS 4.1.2, 4.1.3, and 4.1.3_U1 are reported to have this problem. SunOS 4.1.1 seems not to be affected.) */ /* #undef STATFS_TRUNCATES_BLOCK_COUNTS */ /* Define if there is no specific function for reading filesystems usage information and you have the header file. (SVR2) */ /* #undef STAT_READ_FILSYS */ /* Define if statfs takes 2 args and struct statfs has a field named f_bsize. (4.3BSD, SunOS 4, HP-UX, AIX PS/2) */ #define STAT_STATFS2_BSIZE 1 /* Define if statfs takes 2 args and struct statfs has a field named f_fsize. (4.4BSD, NetBSD) */ /* #undef STAT_STATFS2_FSIZE */ /* Define if statfs takes 2 args and the second argument has type struct fs_data. (Ultrix) */ /* #undef STAT_STATFS2_FS_DATA */ /* Define if statfs takes 3 args. (DEC Alpha running OSF/1) */ /* #undef STAT_STATFS3_OSF1 */ /* Define if statfs takes 4 args. (SVR3, Dynix, Irix, Dolphin) */ /* #undef STAT_STATFS4 */ /* Define if there is a function named statvfs. (SVR4) */ /* #undef STAT_STATVFS */ /* Define to 1 if you have the ANSI C header files. */ #define STDC_HEADERS 1 /* Define to 1 if you can safely include both and . */ #define TIME_WITH_SYS_TIME 1 /* Define to 1 if your declares `struct tm'. */ /* #undef TM_IN_SYS_TIME */ /* Enable extensions on AIX 3, Interix. */ #ifndef _ALL_SOURCE # define _ALL_SOURCE 1 #endif /* Enable GNU extensions on systems that have them. */ #ifndef _GNU_SOURCE # define _GNU_SOURCE 1 #endif /* Enable threading extensions on Solaris. */ #ifndef _POSIX_PTHREAD_SEMANTICS # define _POSIX_PTHREAD_SEMANTICS 1 #endif /* Enable extensions on HP NonStop. */ #ifndef _TANDEM_SOURCE # define _TANDEM_SOURCE 1 #endif /* Enable general extensions on Solaris. */ #ifndef __EXTENSIONS__ # define __EXTENSIONS__ 1 #endif /* Version number of package */ #define VERSION "2.3.1" /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most significant byte first (like Motorola and SPARC, unlike Intel). */ #ifdef __BIG_ENDIAN__ #define WORDS_BIGENDIAN 1 #endif /* Define to 1 if the X Window System is missing or not being used. */ /* #undef X_DISPLAY_MISSING */ /* Number of bits in a file offset, on hosts where this is settable. */ #define _FILE_OFFSET_BITS 64 /* Define for large files, on AIX-style hosts. */ /* #undef _LARGE_FILES */ /* Define to 1 if on MINIX. */ /* #undef _MINIX */ /* Define to 2 if the system does not provide POSIX.1 features except with this defined. */ /* #undef _POSIX_1_SOURCE */ /* Define to 1 if you need to in order for `stat' and other things to work. */ /* #undef _POSIX_SOURCE */ /* Define to empty if `const' does not conform to ANSI C. */ /* #undef const */ /* Define to `__inline__' or `__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ #ifndef __cplusplus /* #undef inline */ #endif /* Define to `int' if does not define. */ /* #undef mode_t */ /* Define to `long int' if does not define. */ /* #undef off_t */ /* Define to `unsigned int' if does not define. */ /* #undef size_t */ /* Substitute for socklen_t */ /* #undef socklen_t */ /* Define to unsigned long or unsigned long long if and don't define. */ /* #undef uintmax_t */ /* Define to empty if the keyword `volatile' does not work. Warning: valid code using `volatile' can become incorrect without. Disable with care. */ /* #undef volatile */ #include "defines.h" #include "libamiga_internal.h" fs-uae-2.2.3+dfsg/src/od-fs/picasso96.cpp0000644000175000017500000050072012162366655020204 0ustar glaubitzglaubitz/* * UAE - The U*nix Amiga Emulator * * Picasso96 Support Module * * Copyright 1997-2001 Brian King * Copyright 2000-2001 Bernd Roesch <> * * Theory of operation: * On the Amiga side, a Picasso card consists mainly of a memory area that * contains the frame buffer. On the UAE side, we allocate a block of memory * that will hold the frame buffer. This block is in normal memory, it is * never directly on the graphics card. All graphics operations, which are * mainly reads and writes into this block and a few basic operations like * filling a rectangle, operate on this block of memory. * Since the memory is not on the graphics card, some work must be done to * synchronize the display with the data in the Picasso frame buffer. There * are various ways to do this. One possibility is to allocate a second * buffer of the same size, and perform all write operations twice. Since * we never read from the second buffer, it can actually be placed in video * memory. The X11 driver could be made to use the Picasso frame buffer as * the data buffer of an XImage, which could then be XPutImage()d from time * to time. Another possibility is to translate all Picasso accesses into * Xlib (or GDI, or whatever your graphics system is) calls. This possibility * is a bit tricky, since there is a risk of generating very many single pixel * accesses which may be rather slow. * * TODO: * - we want to add a manual switch to override SetSwitch for hardware banging * programs started from a Picasso workbench. */ #define MULTIDISPLAY 0 #define WINCURSOR 1 #include "sysconfig.h" #include "sysdeps.h" #if defined(PICASSO96) #include "options.h" #include "threaddep/thread.h" #include "uae/memory.h" #include "custom.h" #include "events.h" #include "newcpu.h" #include "xwin.h" #include "savestate.h" #include "autoconf.h" #include "traps.h" #include "native2amiga.h" #include "drawing.h" #include "inputdevice.h" #include "debug.h" //#include "registry.h" #include "dxwrap.h" //#include "rp.h" #include "picasso96.h" //#include "win32gfx.h" //#include "direct3d.h" #include "clipboard.h" #define NOBLITTER 0 #define NOBLITTER_BLIT 0 #define USE_HARDWARESPRITE 1 #define P96TRACING_ENABLED 0 #define P96SPRTRACING_ENABLED 0 #ifdef FSUAE #include "libamiga_internal.h" // FIXME: justing setting static value here -FS #define CURSORMAXWIDTH 128 // FIXME: justing setting static value here -FS #define CURSORMAXHEIGHT 128 // FIXME: justing setting static value here -FS int default_freq = 50; static uae_u8 *gfx_lock_picasso2 (bool fullupdate) { #if 0 if (currprefs.gfx_api) { int pitch; uae_u8 *p = D3D_locktexture (&pitch, fullupdate); picasso_vidinfo.rowbytes = pitch; return p; } else { if (!DirectDraw_SurfaceLock ()) { dx_check (); return 0; } picasso_vidinfo.rowbytes = DirectDraw_GetSurfacePitch (); return DirectDraw_GetSurfacePointer (); } #endif // FIXME: //picasso_vidinfo.rowbytes = 1024 * 4; //gfxvidinfo.drawbuffer.rowbytes //printf("returning %p\n", gfxvidinfo.drawbuffer.bufmem); //return gfxvidinfo. uae_u8 *buffer = uae_get_render_buffer(); //printf("gfx_lock_picasso2 buffer=%p\n", buffer); return buffer; } static int rtg_locked = 0; uae_u8 *gfx_lock_picasso (bool fullupdate, bool doclear) { // FIXME: currently ignoring fullupdate (what does it do?) if (rtg_locked) { write_log (_T("rtg already locked!\n")); abort (); } #if 0 EnterCriticalSection (&screen_cs); #endif uae_u8 *p = gfx_lock_picasso2 (fullupdate); if (!p) { #if 0 LeaveCriticalSection (&screen_cs); #endif } else { rtg_locked = true; if (doclear) { uae_u8 *p2 = p; for (int h = 0; h < picasso_vidinfo.height; h++) { // FIXME: is width, pixbytes and rowbytes correctly updated at this point? memset (p2, 0, picasso_vidinfo.width * picasso_vidinfo.pixbytes); p2 += picasso_vidinfo.rowbytes; } } } return p; } void gfx_unlock_picasso (bool dorender) { #if 0 if (!rtg_locked) EnterCriticalSection (&screen_cs); #endif //printf("gfx_unlock_picasso\n"); rtg_locked = false; //render_screen(1); //show_screen(); } #if 0 void gfx_set_picasso_state (int on) { printf("gfx_set_picasso_state %d\n", on); #if 0 //struct winuae_currentmode wc; int mode; if (screen_is_picasso == on) return; screen_is_picasso = on; //rp_rtg_switch (); //memcpy (&wc, currentmode, sizeof (wc)); //updatemodes (); //update_gfxparams (); //clearscreen (); if (currprefs.gfx_apmode[0].gfx_fullscreen != currprefs.gfx_apmode[1].gfx_fullscreen || (currprefs.gfx_apmode[0].gfx_fullscreen == GFX_FULLSCREEN && currprefs.gfx_api)) { mode = 1; } else { mode = modeswitchneeded (&wc); if (!mode) goto end; } if (mode < 0) { open_windows (0); } else { open_screen (); // reopen everything } if (on && isvsync_rtg () < 0) vblank_calibrate (0, false); end: #ifdef RETROPLATFORM rp_set_hwnd (hAmigaWnd); #endif #endif } #endif #if 0 void gfx_set_picasso_modeinfo (uae_u32 w, uae_u32 h, uae_u32 depth, RGBFTYPE rgbfmt) { printf("gfx_set_picasso_modeinfo %d %d %d %d\n", w, h, depth, rgbfmt); exit(1); #if 0 int need; if (!screen_is_picasso) return; clearscreen (); #endif gfx_set_picasso_colors (rgbfmt); #if 0 updatemodes (); need = modeswitchneeded (currentmode); update_gfxparams (); if (need > 0) { open_screen (); } else if (need < 0) { open_windows (0); } #endif #ifdef RETROPLATFORM rp_set_hwnd (hAmigaWnd); #endif } #endif #endif static int hwsprite = 0; static int picasso96_BT = BT_uaegfx; static int picasso96_GCT = GCT_Unknown; static int picasso96_PCT = PCT_Unknown; //int mman_GetWriteWatch (PVOID lpBaseAddress, SIZE_T dwRegionSize, PVOID *lpAddresses, PULONG_PTR lpdwCount, PULONG lpdwGranularity); //void mman_ResetWatch (PVOID lpBaseAddress, SIZE_T dwRegionSize); int p96refresh_active; bool have_done_picasso = 1; /* For the JIT compiler */ static int p96syncrate; int p96hsync_counter, full_refresh; #if defined(X86_MSVC_ASSEMBLY) #define SWAPSPEEDUP #endif #ifdef PICASSO96 #ifdef DEBUG // Change this to _DEBUG for debugging //#define P96TRACING_ENABLED 1 //#define P96TRACING_LEVEL 1 #endif static bool flushpixels (void); #if P96TRACING_ENABLED #define P96TRACE(x) do { write_log x; } while(0) #else #define P96TRACE(x) #endif #if P96SPRTRACING_ENABLED #define P96TRACE_SPR(x) do { write_log x; } while(0) #else #define P96TRACE_SPR(x) #endif #define P96TRACE2(x) do { write_log x; } while(0) static void REGPARAM2 gfxmem_lputx (uaecptr, uae_u32) REGPARAM; static void REGPARAM2 gfxmem_wputx (uaecptr, uae_u32) REGPARAM; static void REGPARAM2 gfxmem_bputx (uaecptr, uae_u32) REGPARAM; static uae_u8 all_ones_bitmap, all_zeros_bitmap; /* yuk */ struct picasso96_state_struct picasso96_state; struct picasso_vidbuf_description picasso_vidinfo; static struct PicassoResolution *newmodes; static int picasso_convert, host_mode; /* These are the maximum resolutions... They are filled in by GetSupportedResolutions() */ /* have to fill this in, otherwise problems occur on the Amiga side P96 s/w which expects /* data here. */ static struct ScreenResolution planar = { 320, 240 }; static struct ScreenResolution chunky = { 640, 480 }; static struct ScreenResolution hicolour = { 640, 480 }; static struct ScreenResolution truecolour = { 640, 480 }; static struct ScreenResolution alphacolour = { 640, 480 }; uae_u32 p96_rgbx16[65536]; uae_u32 p96rc[256], p96gc[256], p96bc[256]; static int cursorwidth, cursorheight, cursorok; static uae_u8 *cursordata; static uae_u32 cursorrgb[4], cursorrgbn[4]; static int cursordeactivate, setupcursor_needed; static bool cursorvisible; //static HCURSOR wincursor; static int wincursor_shown; static uaecptr boardinfo, ABI_interrupt; static int interrupt_enabled; double p96vblank; static int rtg_clear_flag; static int uaegfx_old, uaegfx_active; static uae_u32 reserved_gfxmem; static uaecptr uaegfx_resname, uaegfx_resid, uaegfx_init, uaegfx_base, uaegfx_rom; typedef enum { BLIT_FALSE, BLIT_NOR, BLIT_ONLYDST, BLIT_NOTSRC, BLIT_ONLYSRC, BLIT_NOTDST, BLIT_EOR, BLIT_NAND, BLIT_AND, BLIT_NEOR, BLIT_DST, BLIT_NOTONLYSRC, BLIT_SRC, BLIT_NOTONLYDST, BLIT_OR, BLIT_TRUE, BLIT_SWAP = 30 } BLIT_OPCODE; //#include "win32gui.h" //#include "resource" #define UAE_RTG_LIBRARY_VERSION 40 #define UAE_RTG_LIBRARY_REVISION 3994 static void checkrtglibrary(void) { uae_u32 v; static int checked = FALSE; if (checked) return; v = get_long (4); // execbase v += 378; // liblist while ((v = get_long (v))) { uae_u32 v2 = get_long (v + 10); // name uae_u8 *p; addrbank *b = &get_mem_bank (v2); if (!b || !b->check (v2, 12)) continue; p = b->xlateaddr(v2); if (!memcmp(p, "rtg.library\0", 12)) { uae_u16 ver = get_word (v + 20); uae_u16 rev = get_word (v + 22); if (ver * 10000 + rev < UAE_RTG_LIBRARY_VERSION * 10000 + UAE_RTG_LIBRARY_REVISION) { //TCHAR msg[2000]; //WIN32GUI_LoadUIString(IDS_OLDRTGLIBRARY, msg, sizeof(msg)); gui_message("rtg.library %d.%d is old - updating to %d.%d " "is recommended", ver, rev, UAE_RTG_LIBRARY_VERSION, UAE_RTG_LIBRARY_REVISION); } else { write_log (_T("P96: rtg.library %d.%d detected\n"), ver, rev); } checked = TRUE; } } } static uae_u32 p2ctab[256][2]; static int set_gc_called = 0, init_picasso_screen_called = 0; //fastscreen static uaecptr oldscr = 0; #ifdef WORDS_BIGENDIAN #define endianswap(a, b) #else STATIC_INLINE void endianswap (uae_u32 *vp, int bpp) { uae_u32 v = *vp; switch (bpp) { case 2: *vp = (((v >> 8) & 0x00ff) | (v << 8)) & 0xffff; break; case 4: *vp = ((v >> 24) & 0x000000ff) | ((v >> 8) & 0x0000ff00) | ((v << 8) & 0x00ff0000) | ((v << 24) & 0xff000000); break; } } #endif #if P96TRACING_ENABLED /* * Debugging dumps */ static void DumpModeInfoStructure (uaecptr amigamodeinfoptr) { write_log (_T("ModeInfo Structure Dump:\n")); write_log (_T(" Node.ln_Succ = 0x%x\n"), get_long (amigamodeinfoptr)); write_log (_T(" Node.ln_Pred = 0x%x\n"), get_long (amigamodeinfoptr + 4)); write_log (_T(" Node.ln_Type = 0x%x\n"), get_byte (amigamodeinfoptr + 8)); write_log (_T(" Node.ln_Pri = %d\n"), get_byte (amigamodeinfoptr + 9)); /*write_log (_T(" Node.ln_Name = %s\n"), uaememptr->Node.ln_Name); */ write_log (_T(" OpenCount = %d\n"), get_word (amigamodeinfoptr + PSSO_ModeInfo_OpenCount)); write_log (_T(" Active = %d\n"), get_byte (amigamodeinfoptr + PSSO_ModeInfo_Active)); write_log (_T(" Width = %d\n"), get_word (amigamodeinfoptr + PSSO_ModeInfo_Width)); write_log (_T(" Height = %d\n"), get_word (amigamodeinfoptr + PSSO_ModeInfo_Height)); write_log (_T(" Depth = %d\n"), get_byte (amigamodeinfoptr + PSSO_ModeInfo_Depth)); write_log (_T(" Flags = %d\n"), get_byte (amigamodeinfoptr + PSSO_ModeInfo_Flags)); write_log (_T(" HorTotal = %d\n"), get_word (amigamodeinfoptr + PSSO_ModeInfo_HorTotal)); write_log (_T(" HorBlankSize = %d\n"), get_word (amigamodeinfoptr + PSSO_ModeInfo_HorBlankSize)); write_log (_T(" HorSyncStart = %d\n"), get_word (amigamodeinfoptr + PSSO_ModeInfo_HorSyncStart)); write_log (_T(" HorSyncSize = %d\n"), get_word (amigamodeinfoptr + PSSO_ModeInfo_HorSyncSize)); write_log (_T(" HorSyncSkew = %d\n"), get_byte (amigamodeinfoptr + PSSO_ModeInfo_HorSyncSkew)); write_log (_T(" HorEnableSkew = %d\n"), get_byte (amigamodeinfoptr + PSSO_ModeInfo_HorEnableSkew)); write_log (_T(" VerTotal = %d\n"), get_word (amigamodeinfoptr + PSSO_ModeInfo_VerTotal)); write_log (_T(" VerBlankSize = %d\n"), get_word (amigamodeinfoptr + PSSO_ModeInfo_VerBlankSize)); write_log (_T(" VerSyncStart = %d\n"), get_word (amigamodeinfoptr + PSSO_ModeInfo_VerSyncStart)); write_log (_T(" VerSyncSize = %d\n"), get_word (amigamodeinfoptr + PSSO_ModeInfo_VerSyncSize)); write_log (_T(" Clock = %d\n"), get_byte (amigamodeinfoptr + PSSO_ModeInfo_first_union)); write_log (_T(" ClockDivide = %d\n"), get_byte (amigamodeinfoptr + PSSO_ModeInfo_second_union)); write_log (_T(" PixelClock = %d\n"), get_long (amigamodeinfoptr + PSSO_ModeInfo_PixelClock)); } static void DumpLibResolutionStructure (uaecptr amigalibresptr) { int i; uaecptr amigamodeinfoptr; struct LibResolution *uaememptr = (struct LibResolution *)get_mem_bank(amigalibresptr).xlateaddr(amigalibresptr); write_log (_T("LibResolution Structure Dump:\n")); if (get_long (amigalibresptr + PSSO_LibResolution_DisplayID) == 0xFFFFFFFF) { write_log (_T(" Finished With LibResolutions...\n")); } else { write_log (_T(" Name = %s\n"), uaememptr->P96ID); write_log (_T(" DisplayID = 0x%x\n"), get_long (amigalibresptr + PSSO_LibResolution_DisplayID)); write_log (_T(" Width = %d\n"), get_word (amigalibresptr + PSSO_LibResolution_Width)); write_log (_T(" Height = %d\n"), get_word (amigalibresptr + PSSO_LibResolution_Height)); write_log (_T(" Flags = %d\n"), get_word (amigalibresptr + PSSO_LibResolution_Flags)); for (i = 0; i < MAXMODES; i++) { amigamodeinfoptr = get_long (amigalibresptr + PSSO_LibResolution_Modes + i*4); write_log (_T(" ModeInfo[%d] = 0x%x\n"), i, amigamodeinfoptr); if (amigamodeinfoptr) DumpModeInfoStructure (amigamodeinfoptr); } write_log (_T(" BoardInfo = 0x%x\n"), get_long (amigalibresptr + PSSO_LibResolution_BoardInfo)); } } static TCHAR binary_byte[9] = { 0,0,0,0,0,0,0,0,0 }; static TCHAR *BuildBinaryString (uae_u8 value) { int i; for (i = 0; i < 8; i++) { binary_byte[i] = (value & (1 << (7 - i))) ? '#' : '.'; } return binary_byte; } static void DumpPattern (struct Pattern *patt) { uae_u8 *mem; int row, col; for (row = 0; row < (1 << patt->Size); row++) { mem = patt->Memory + row * 2; for (col = 0; col < 2; col++) { write_log (_T("%s "), BuildBinaryString (*mem++)); } write_log (_T("\n")); } } static void DumpTemplate (struct Template *tmp, unsigned long w, unsigned long h) { uae_u8 *mem = tmp->Memory; unsigned int row, col, width; width = (w + 7) >> 3; write_log (_T("xoffset = %d, bpr = %d\n"), tmp->XOffset, tmp->BytesPerRow); for (row = 0; row < h; row++) { mem = tmp->Memory + row * tmp->BytesPerRow; for (col = 0; col < width; col++) { write_log (_T("%s "), BuildBinaryString (*mem++)); } write_log (_T("\n")); } } static void DumpLine(struct Line *line) { if (line) { write_log (_T("Line->X = %d\n"), line->X); write_log (_T("Line->Y = %d\n"), line->Y); write_log (_T("Line->Length = %d\n"), line->Length); write_log (_T("Line->dX = %d\n"), line->dX); write_log (_T("Line->dY = %d\n"), line->dY); write_log (_T("Line->sDelta = %d\n"), line->sDelta); write_log (_T("Line->lDelta = %d\n"), line->lDelta); write_log (_T("Line->twoSDminusLD = %d\n"), line->twoSDminusLD); write_log (_T("Line->LinePtrn = %d\n"), line->LinePtrn); write_log (_T("Line->PatternShift = %d\n"), line->PatternShift); write_log (_T("Line->FgPen = 0x%x\n"), line->FgPen); write_log (_T("Line->BgPen = 0x%x\n"), line->BgPen); write_log (_T("Line->Horizontal = %d\n"), line->Horizontal); write_log (_T("Line->DrawMode = %d\n"), line->DrawMode); write_log (_T("Line->Xorigin = %d\n"), line->Xorigin); write_log (_T("Line->Yorigin = %d\n"), line->Yorigin); } } static void ShowSupportedResolutions (void) { int i = 0; write_log (_T("-----------------\n")); while (newmodes[i].depth >= 0) { write_log (_T("%s\n"), newmodes[i].name); i++; } write_log (_T("-----------------\n")); } #endif static void **gwwbuf; static int gwwbufsize, gwwpagesize, gwwpagemask; extern uae_u8 *natmem_offset; static uae_u8 GetBytesPerPixel (uae_u32 RGBfmt) { switch (RGBfmt) { case RGBFB_CLUT: return 1; case RGBFB_A8R8G8B8: case RGBFB_A8B8G8R8: case RGBFB_R8G8B8A8: case RGBFB_B8G8R8A8: return 4; case RGBFB_B8G8R8: case RGBFB_R8G8B8: return 3; case RGBFB_R5G5B5: case RGBFB_R5G6B5: case RGBFB_R5G6B5PC: case RGBFB_R5G5B5PC: case RGBFB_B5G6R5PC: case RGBFB_B5G5R5PC: return 2; } return 0; } /* * Amiga <-> native structure conversion functions */ static int CopyRenderInfoStructureA2U (uaecptr amigamemptr, struct RenderInfo *ri) { uaecptr memp = get_long (amigamemptr + PSSO_RenderInfo_Memory); if (valid_address (memp, PSSO_RenderInfo_sizeof)) { ri->Memory = get_real_address (memp); ri->BytesPerRow = get_word (amigamemptr + PSSO_RenderInfo_BytesPerRow); ri->RGBFormat = (RGBFTYPE)get_long (amigamemptr + PSSO_RenderInfo_RGBFormat); return 1; } write_log (_T("ERROR - Invalid RenderInfo memory area...\n")); return 0; } static int CopyPatternStructureA2U (uaecptr amigamemptr, struct Pattern *pattern) { uaecptr memp = get_long (amigamemptr + PSSO_Pattern_Memory); if (valid_address (memp, PSSO_Pattern_sizeof)) { pattern->Memory = get_real_address (memp); pattern->XOffset = get_word (amigamemptr + PSSO_Pattern_XOffset); pattern->YOffset = get_word (amigamemptr + PSSO_Pattern_YOffset); pattern->FgPen = get_long (amigamemptr + PSSO_Pattern_FgPen); pattern->BgPen = get_long (amigamemptr + PSSO_Pattern_BgPen); pattern->Size = get_byte (amigamemptr + PSSO_Pattern_Size); pattern->DrawMode = get_byte (amigamemptr + PSSO_Pattern_DrawMode); return 1; } write_log (_T("ERROR - Invalid Pattern memory area...\n")); return 0; } static void CopyColorIndexMappingA2U (uaecptr amigamemptr, struct ColorIndexMapping *cim, int Bpp) { int i; cim->ColorMask = get_long (amigamemptr); for (i = 0; i < 256; i++, amigamemptr += 4) { uae_u32 v = get_long (amigamemptr + 4); endianswap (&v, Bpp); cim->Colors[i] = v; } } static int CopyBitMapStructureA2U (uaecptr amigamemptr, struct BitMap *bm) { int i; bm->BytesPerRow = get_word (amigamemptr + PSSO_BitMap_BytesPerRow); bm->Rows = get_word (amigamemptr + PSSO_BitMap_Rows); bm->Flags = get_byte (amigamemptr + PSSO_BitMap_Flags); bm->Depth = get_byte (amigamemptr + PSSO_BitMap_Depth); /* ARGH - why is THIS happening? */ if(bm->Depth > 8) bm->Depth = 8; for (i = 0; i < bm->Depth; i++) { uaecptr plane = get_long (amigamemptr + PSSO_BitMap_Planes + i * 4); switch (plane) { case 0: bm->Planes[i] = &all_zeros_bitmap; break; case 0xFFFFFFFF: bm->Planes[i] = &all_ones_bitmap; break; default: if (valid_address (plane, bm->BytesPerRow * bm->Rows)) bm->Planes[i] = get_real_address (plane); else return 0; break; } } return 1; } static int CopyTemplateStructureA2U (uaecptr amigamemptr, struct Template *tmpl) { uaecptr memp = get_long (amigamemptr + PSSO_Template_Memory); if (valid_address (memp, sizeof(struct Template))) { tmpl->Memory = get_real_address (memp); tmpl->BytesPerRow = get_word (amigamemptr + PSSO_Template_BytesPerRow); tmpl->XOffset = get_byte (amigamemptr + PSSO_Template_XOffset); tmpl->DrawMode = get_byte (amigamemptr + PSSO_Template_DrawMode); tmpl->FgPen = get_long (amigamemptr + PSSO_Template_FgPen); tmpl->BgPen = get_long (amigamemptr + PSSO_Template_BgPen); return 1; } write_log (_T("ERROR - Invalid Template memory area...\n")); return 0; } static int CopyLineStructureA2U(uaecptr amigamemptr, struct Line *line) { if (valid_address(amigamemptr, sizeof(struct Line))) { line->X = get_word (amigamemptr + PSSO_Line_X); line->Y = get_word (amigamemptr + PSSO_Line_Y); line->Length = get_word (amigamemptr + PSSO_Line_Length); line->dX = get_word (amigamemptr + PSSO_Line_dX); line->dY = get_word (amigamemptr + PSSO_Line_dY); line->lDelta = get_word (amigamemptr + PSSO_Line_lDelta); line->sDelta = get_word (amigamemptr + PSSO_Line_sDelta); line->twoSDminusLD = get_word (amigamemptr + PSSO_Line_twoSDminusLD); line->LinePtrn = get_word (amigamemptr + PSSO_Line_LinePtrn); line->PatternShift = get_word (amigamemptr + PSSO_Line_PatternShift); line->FgPen = get_long (amigamemptr + PSSO_Line_FgPen); line->BgPen = get_long (amigamemptr + PSSO_Line_BgPen); line->Horizontal = get_word (amigamemptr + PSSO_Line_Horizontal); line->DrawMode = get_byte (amigamemptr + PSSO_Line_DrawMode); line->Xorigin = get_word (amigamemptr + PSSO_Line_Xorigin); line->Yorigin = get_word (amigamemptr + PSSO_Line_Yorigin); return 1; } write_log (_T("ERROR - Invalid Line structure...\n")); return 0; } /* list is Amiga address of list, in correct endian format for UAE * node is Amiga address of node, in correct endian format for UAE */ static void AmigaListAddTail (uaecptr l, uaecptr n) { put_long (n + 0, l + 4); // n->ln_Succ = (struct Node *)&l->lh_Tail; put_long (n + 4, get_long (l + 8)); // n->ln_Pred = l->lh_TailPred; put_long (get_long (l + 8) + 0, n); // l->lh_TailPred->ln_Succ = n; put_long (l + 8, n); // l->lh_TailPred = n; } static int renderinfo_is_current_screen (struct RenderInfo *ri) { if (! picasso_on) return 0; if (ri->Memory != gfxmemory + (picasso96_state.Address - gfxmem_start)) return 0; return 1; } /* * Fill a rectangle in the screen. */ static void do_fillrect_frame_buffer (struct RenderInfo *ri, int X, int Y, int Width, int Height, uae_u32 Pen, int Bpp) { int cols; uae_u8 *dst; int lines; int bpr = ri->BytesPerRow; dst = ri->Memory + X * Bpp + Y * ri->BytesPerRow; endianswap (&Pen, Bpp); switch (Bpp) { case 1: for (lines = 0; lines < Height; lines++, dst += bpr) { memset (dst, Pen, Width); } break; case 2: Pen |= Pen << 16; for (lines = 0; lines < Height; lines++, dst += bpr) { uae_u32 *p = (uae_u32*)dst; for (cols = 0; cols < Width / 2; cols++) *p++ = Pen; if (Width & 1) ((uae_u16*)p)[0] = Pen; } break; case 3: for (lines = 0; lines < Height; lines++, dst += bpr) { uae_u8 *p = (uae_u8*)dst; for (cols = 0; cols < Width; cols++) { *p++ = Pen >> 0; *p++ = Pen >> 8; *p++ = Pen >> 16; } } break; case 4: for (lines = 0; lines < Height; lines++, dst += bpr) { uae_u32 *p = (uae_u32*)dst; for (cols = 0; cols < Width; cols++) *p++ = Pen; } break; } } static void setupcursor (void) { STUB(""); #if 0 uae_u8 *dptr = NULL; int bpp = 4; DWORD pitch; D3DLOCKED_RECT locked; HRESULT hr; gfx_lock (); setupcursor_needed = 1; if (cursorsurfaced3d) { if (SUCCEEDED (hr = cursorsurfaced3d->LockRect (0, &locked, NULL, 0))) { dptr = (uae_u8*)locked.pBits; pitch = locked.Pitch; for (int y = 0; y < CURSORMAXHEIGHT; y++) { uae_u8 *p2 = dptr + pitch * y; memset (p2, 0, CURSORMAXWIDTH * bpp); } if (cursordata && cursorwidth && cursorheight) { dptr = (uae_u8*)locked.pBits; pitch = locked.Pitch; for (int y = 0; y < cursorheight; y++) { uae_u8 *p1 = cursordata + cursorwidth * bpp * y; uae_u8 *p2 = dptr + pitch * y; memcpy (p2, p1, cursorwidth * bpp); } } cursorsurfaced3d->UnlockRect (0); setupcursor_needed = 0; P96TRACE_SPR((_T("cursorsurface3d updated\n"))); } else { P96TRACE_SPR((_T("cursorsurfaced3d LockRect() failed %08x\n"), hr)); } } gfx_unlock (); #endif } static void disablemouse (void) { cursorok = FALSE; cursordeactivate = 0; if (!hwsprite) return; if (!currprefs.gfx_api) return; printf("disablemouse\n"); #if 0 D3D_setcursor (0, 0, 0, 0, false); #endif } static int newcursor_x, newcursor_y; static void mouseupdate (void) { int x = newcursor_x; int y = newcursor_y; int forced = 0; if (!hwsprite) return; if (cursordeactivate > 0) { cursordeactivate--; if (cursordeactivate == 0) { disablemouse (); cursorvisible = false; } } if (!currprefs.gfx_api) return; printf("mouseupdate\n"); #if 0 D3D_setcursor (x, y, picasso96_state.Width, picasso96_state.Height, cursorvisible); #endif } //static int framecnt; int p96skipmode = -1; static int doskip (void) { // FIXME: more than one framecnt in libuae... if (framecnt >= currprefs.gfx_framerate) framecnt = 0; return framecnt > 0; } void picasso_trigger_vblank (void) { //if (!ABI_interrupt || !uaegfx_base || !interrupt_enabled || !currprefs.rtg_hardwareinterrupt) if (!ABI_interrupt || !uaegfx_base || !interrupt_enabled || currprefs.win32_rtgvblankrate < -1) return; put_long (uaegfx_base + CARD_IRQPTR, ABI_interrupt + PSSO_BoardInfo_SoftInterrupt); put_byte (uaegfx_base + CARD_IRQFLAG, 1); if (currprefs.win32_rtgvblankrate != 0) INTREQ (0x8000 | 0x0008); } static bool rtg_render (void) { bool flushed = false; if (doskip () && p96skipmode == 0) { ; } else { flushed = flushpixels (); } return flushed; } static void rtg_show (void) { gfx_unlock_picasso (true); } static void rtg_clear (void) { rtg_clear_flag = 4; } static void picasso_handle_vsync2 (void) { static int vsynccnt; int thisisvsync = 1; int vsync = isvsync_rtg (); int mult; bool rendered = false; if (vsync < 0) { vsync_busywait_end (NULL); vsync_busywait_do (NULL, false, false); } getvsyncrate (currprefs.chipset_refreshrate, &mult); if (vsync && mult < 0) { vsynccnt++; if (vsynccnt < 2) thisisvsync = 0; else vsynccnt = 0; } framecnt++; mouseupdate (); //printf("picasso_handle_vsync2 %d\n", thisisvsync); if (thisisvsync) { rendered = rtg_render (); frame_drawn (); } if (setupcursor_needed) setupcursor (); if (thisisvsync) picasso_trigger_vblank (); if (vsync < 0) { vsync_busywait_start (); } if (thisisvsync && !rendered) rtg_show (); } static int p96hsync; void picasso_handle_vsync (void) { if (currprefs.rtgmem_size == 0) return; if (!picasso_on) { createwindowscursor (0, 0, 0, 0, 0, 1); picasso_trigger_vblank (); return; } int vsync = isvsync_rtg (); //printf("isvsync_rtg = %d currprefs.win32_rtgvblankrate = %d\n", // vsync, currprefs.win32_rtgvblankrate); if (vsync < 0) { p96hsync = 0; picasso_handle_vsync2 (); } else if (currprefs.win32_rtgvblankrate == 0) { picasso_handle_vsync2 (); } } void picasso_handle_hsync (void) { if (currprefs.rtgmem_size == 0) return; int vsync = isvsync_rtg (); if (vsync < 0) { p96hsync++; if (p96hsync >= p96syncrate * 3) { p96hsync = 0; // kickstart vblank vsync_busywait stuff picasso_handle_vsync (); } return; } if (currprefs.win32_rtgvblankrate == 0) return; p96hsync++; if (p96hsync >= p96syncrate) { if (!picasso_on) { createwindowscursor (0, 0, 0, 0, 0, 1); picasso_trigger_vblank (); } else { picasso_handle_vsync2 (); } p96hsync = 0; } } static int set_panning_called = 0; typedef enum { /* DEST = RGBFB_B8G8R8A8,32 */ RGBFB_A8R8G8B8_32 = 1, RGBFB_A8B8G8R8_32, RGBFB_R8G8B8A8_32, RGBFB_B8G8R8A8_32, RGBFB_R8G8B8_32, RGBFB_B8G8R8_32, RGBFB_R5G6B5PC_32, RGBFB_R5G5B5PC_32, RGBFB_R5G6B5_32, RGBFB_R5G5B5_32, RGBFB_B5G6R5PC_32, RGBFB_B5G5R5PC_32, RGBFB_CLUT_RGBFB_32, /* DEST = RGBFB_R5G6B5PC,16 */ RGBFB_A8R8G8B8_16, RGBFB_A8B8G8R8_16, RGBFB_R8G8B8A8_16, RGBFB_B8G8R8A8_16, RGBFB_R8G8B8_16, RGBFB_B8G8R8_16, RGBFB_R5G6B5PC_16, RGBFB_R5G5B5PC_16, RGBFB_R5G6B5_16, RGBFB_R5G5B5_16, RGBFB_B5G6R5PC_16, RGBFB_B5G5R5PC_16, RGBFB_CLUT_RGBFB_16, /* DEST = RGBFB_CLUT,8 */ RGBFB_CLUT_8 }; static uae_u32 setspriteimage (uaecptr bi); static void recursor (void) { cursorok = FALSE; setspriteimage (boardinfo); } static void setconvert (void) { static int ohost_mode, orgbformat; int d = picasso_vidinfo.pixbytes; int v; v = 0; switch (picasso96_state.RGBFormat) { case RGBFB_CLUT: if (d == 1) v = RGBFB_CLUT_8; else if (d == 2) v = RGBFB_CLUT_RGBFB_16; else if (d == 4) v = RGBFB_CLUT_RGBFB_32; break; case RGBFB_B5G6R5PC: if (d == 2) v = RGBFB_B5G6R5PC_16; else if (d == 4) v = RGBFB_B5G6R5PC_32; break; case RGBFB_R5G6B5PC: if (d == 2) v = RGBFB_R5G6B5PC_16; else if (d == 4) v = RGBFB_R5G6B5PC_32; break; case RGBFB_R5G5B5PC: if (d == 4) v = RGBFB_R5G5B5PC_32; else if (d == 2) v = RGBFB_R5G5B5PC_16; break; case RGBFB_R5G6B5: if (d == 4) v = RGBFB_R5G6B5_32; else v = RGBFB_R5G6B5_16; break; case RGBFB_R5G5B5: if (d == 4) v = RGBFB_R5G5B5_32; else v = RGBFB_R5G5B5_16; break; case RGBFB_B5G5R5PC: if (d == 4) v = RGBFB_B5G5R5PC_32; else v = RGBFB_B5G5R5PC_16; break; case RGBFB_A8R8G8B8: if (d == 2) v = RGBFB_A8R8G8B8_16; else if (d == 4) v = RGBFB_A8R8G8B8_32; break; case RGBFB_R8G8B8: if (d == 2) v = RGBFB_R8G8B8_16; else if (d == 4) v = RGBFB_R8G8B8_32; break; case RGBFB_B8G8R8: if (d == 2) v = RGBFB_B8G8R8_16; else if (d == 4) v = RGBFB_B8G8R8_32; break; case RGBFB_A8B8G8R8: if (d == 2) v = RGBFB_A8B8G8R8_16; else if (d == 4) v = RGBFB_A8B8G8R8_32; break; case RGBFB_B8G8R8A8: if (d == 2) v = RGBFB_B8G8R8A8_16; else if (d == 4) { if (g_amiga_video_format == AMIGA_VIDEO_FORMAT_BGRA) { v = RGBFB_B8G8R8A8_32; } else { // FIXME: overriden - FS v = RGBFB_R8G8B8A8_32; } } break; case RGBFB_R8G8B8A8: if (d == 2) v = RGBFB_R8G8B8A8_16; else if (d == 4) v = RGBFB_R8G8B8A8_32; break; } /* if (d == 4) { printf("overriding picasso convert...\n"); v = RGBFB_R8G8B8A8_32; } */ picasso_convert = v; if (g_amiga_video_format == AMIGA_VIDEO_FORMAT_RGBA) { host_mode = RGBFB_R8G8B8A8; } else if (g_amiga_video_format == AMIGA_VIDEO_FORMAT_BGRA) { #ifdef WORDS_BIGENDIAN host_mode = RGBFB_A8R8G8B8; #else host_mode = RGBFB_B8G8R8A8; #endif } else { // AMIGA_VIDEO_FORMAT_R5G6B5 #ifdef WORDS_BIGENDIAN host_mode = RGBFB_R5G6B5; #else host_mode = RGBFB_R5G6B5PC; #endif } #if 0 if (currprefs.gfx_api) { host_mode = d == 4 ? RGBFB_B8G8R8A8 : RGBFB_B5G6R5PC; } else { printf("WARNING: cannot get host surface pixel format\n"); #if 0 host_mode = DirectDraw_GetSurfacePixelFormat (NULL); #endif } #endif if (d == 4) { alloc_colors_rgb (8, 8, 8, 16, 8, 0, 0, 0, 0, 0, p96rc, p96gc, p96bc); } else { alloc_colors_rgb (5, 6, 5, 11, 5, 0, 0, 0, 0, 0, p96rc, p96gc, p96bc); } gfx_set_picasso_colors (picasso96_state.RGBFormat); picasso_palette (); if (host_mode != ohost_mode || picasso96_state.RGBFormat != orgbformat) { write_log (_T("RTG conversion: Depth=%d HostRGBF=%d P96RGBF=%d Mode=%d\n"), d, host_mode, picasso96_state.RGBFormat, v); ohost_mode = host_mode; orgbformat = picasso96_state.RGBFormat; } recursor (); full_refresh = 1; } /* Clear our screen, since we've got a new Picasso screen-mode, and refresh with the proper contents * This is called on several occasions: * 1. Amiga-->Picasso transition, via SetSwitch() * 2. Picasso-->Picasso transition, via SetPanning(). * 3. whenever the graphics code notifies us that the screen contents have been lost. */ void picasso_refresh (void) { struct RenderInfo ri; if (! picasso_on) return; full_refresh = 1; setconvert (); setupcursor (); rtg_clear (); /* Make sure that the first time we show a Picasso video mode, we don't blit any crap. * We can do this by checking if we have an Address yet. */ if (picasso96_state.Address) { unsigned int width, height; /* blit the stuff from our static frame-buffer to the gfx-card */ ri.Memory = gfxmemory + (picasso96_state.Address - gfxmem_start); ri.BytesPerRow = picasso96_state.BytesPerRow; ri.RGBFormat = picasso96_state.RGBFormat; if (set_panning_called) { width = (picasso96_state.VirtualWidth < picasso96_state.Width) ? picasso96_state.VirtualWidth : picasso96_state.Width; height = (picasso96_state.VirtualHeight < picasso96_state.Height) ? picasso96_state.VirtualHeight : picasso96_state.Height; // Let's put a black-border around the case where we've got a sub-screen... if (!picasso96_state.BigAssBitmap) { if (picasso96_state.XOffset || picasso96_state.YOffset) { printf("DX_FILL..\n"); #if 0 DX_Fill (0, 0, picasso96_state.Width, picasso96_state.Height, 0); #endif } } } else { width = picasso96_state.Width; height = picasso96_state.Height; } } else { write_log (_T("ERROR - picasso_refresh() can't refresh!\n")); } } #define BLT_SIZE 4 #define BLT_MULT 1 #define BLT_NAME BLIT_FALSE_32 #define BLT_FUNC(s,d) *d = 0 #include "p96_blit.cpp" #define BLT_NAME BLIT_NOR_32 #define BLT_FUNC(s,d) *d = ~(*s | * d) #include "p96_blit.cpp" #define BLT_NAME BLIT_ONLYDST_32 #define BLT_FUNC(s,d) *d = (*d) & ~(*s) #include "p96_blit.cpp" #define BLT_NAME BLIT_NOTSRC_32 #define BLT_FUNC(s,d) *d = ~(*s) #include "p96_blit.cpp" #define BLT_NAME BLIT_ONLYSRC_32 #define BLT_FUNC(s,d) *d = (*s) & ~(*d) #include "p96_blit.cpp" #define BLT_NAME BLIT_NOTDST_32 #define BLT_FUNC(s,d) *d = ~(*d) #include "p96_blit.cpp" #define BLT_NAME BLIT_EOR_32 #define BLT_FUNC(s,d) *d = (*s) ^ (*d) #include "p96_blit.cpp" #define BLT_NAME BLIT_NAND_32 #define BLT_FUNC(s,d) *d = ~((*s) & (*d)) #include "p96_blit.cpp" #define BLT_NAME BLIT_AND_32 #define BLT_FUNC(s,d) *d = (*s) & (*d) #include "p96_blit.cpp" #define BLT_NAME BLIT_NEOR_32 #define BLT_FUNC(s,d) *d = ~((*s) ^ (*d)) #include "p96_blit.cpp" #define BLT_NAME BLIT_NOTONLYSRC_32 #define BLT_FUNC(s,d) *d = ~(*s) | (*d) #include "p96_blit.cpp" #define BLT_NAME BLIT_NOTONLYDST_32 #define BLT_FUNC(s,d) *d = ~(*d) | (*s) #include "p96_blit.cpp" #define BLT_NAME BLIT_OR_32 #define BLT_FUNC(s,d) *d = (*s) | (*d) #include "p96_blit.cpp" #define BLT_NAME BLIT_TRUE_32 #define BLT_FUNC(s,d) *d = 0xffffffff #include "p96_blit.cpp" #define BLT_NAME BLIT_SWAP_32 #define BLT_FUNC(s,d) tmp = *d ; *d = *s; *s = tmp; #define BLT_TEMP #include "p96_blit.cpp" #undef BLT_SIZE #undef BLT_MULT #define BLT_SIZE 3 #define BLT_MULT 1 #define BLT_NAME BLIT_FALSE_24 #define BLT_FUNC(s,d) *d = 0 #include "p96_blit.cpp" #define BLT_NAME BLIT_NOR_24 #define BLT_FUNC(s,d) *d = ~(*s | * d) #include "p96_blit.cpp" #define BLT_NAME BLIT_ONLYDST_24 #define BLT_FUNC(s,d) *d = (*d) & ~(*s) #include "p96_blit.cpp" #define BLT_NAME BLIT_NOTSRC_24 #define BLT_FUNC(s,d) *d = ~(*s) #include "p96_blit.cpp" #define BLT_NAME BLIT_ONLYSRC_24 #define BLT_FUNC(s,d) *d = (*s) & ~(*d) #include "p96_blit.cpp" #define BLT_NAME BLIT_NOTDST_24 #define BLT_FUNC(s,d) *d = ~(*d) #include "p96_blit.cpp" #define BLT_NAME BLIT_EOR_24 #define BLT_FUNC(s,d) *d = (*s) ^ (*d) #include "p96_blit.cpp" #define BLT_NAME BLIT_NAND_24 #define BLT_FUNC(s,d) *d = ~((*s) & (*d)) #include "p96_blit.cpp" #define BLT_NAME BLIT_AND_24 #define BLT_FUNC(s,d) *d = (*s) & (*d) #include "p96_blit.cpp" #define BLT_NAME BLIT_NEOR_24 #define BLT_FUNC(s,d) *d = ~((*s) ^ (*d)) #include "p96_blit.cpp" #define BLT_NAME BLIT_NOTONLYSRC_24 #define BLT_FUNC(s,d) *d = ~(*s) | (*d) #include "p96_blit.cpp" #define BLT_NAME BLIT_NOTONLYDST_24 #define BLT_FUNC(s,d) *d = ~(*d) | (*s) #include "p96_blit.cpp" #define BLT_NAME BLIT_OR_24 #define BLT_FUNC(s,d) *d = (*s) | (*d) #include "p96_blit.cpp" #define BLT_NAME BLIT_TRUE_24 #define BLT_FUNC(s,d) *d = 0xffffffff #include "p96_blit.cpp" #define BLT_NAME BLIT_SWAP_24 #define BLT_FUNC(s,d) tmp = *d ; *d = *s; *s = tmp; #define BLT_TEMP #include "p96_blit.cpp" #undef BLT_SIZE #undef BLT_MULT #define BLT_SIZE 2 #define BLT_MULT 2 #define BLT_NAME BLIT_FALSE_16 #define BLT_FUNC(s,d) *d = 0 #include "p96_blit.cpp" #define BLT_NAME BLIT_NOR_16 #define BLT_FUNC(s,d) *d = ~(*s | * d) #include "p96_blit.cpp" #define BLT_NAME BLIT_ONLYDST_16 #define BLT_FUNC(s,d) *d = (*d) & ~(*s) #include "p96_blit.cpp" #define BLT_NAME BLIT_NOTSRC_16 #define BLT_FUNC(s,d) *d = ~(*s) #include "p96_blit.cpp" #define BLT_NAME BLIT_ONLYSRC_16 #define BLT_FUNC(s,d) *d = (*s) & ~(*d) #include "p96_blit.cpp" #define BLT_NAME BLIT_NOTDST_16 #define BLT_FUNC(s,d) *d = ~(*d) #include "p96_blit.cpp" #define BLT_NAME BLIT_EOR_16 #define BLT_FUNC(s,d) *d = (*s) ^ (*d) #include "p96_blit.cpp" #define BLT_NAME BLIT_NAND_16 #define BLT_FUNC(s,d) *d = ~((*s) & (*d)) #include "p96_blit.cpp" #define BLT_NAME BLIT_AND_16 #define BLT_FUNC(s,d) *d = (*s) & (*d) #include "p96_blit.cpp" #define BLT_NAME BLIT_NEOR_16 #define BLT_FUNC(s,d) *d = ~((*s) ^ (*d)) #include "p96_blit.cpp" #define BLT_NAME BLIT_NOTONLYSRC_16 #define BLT_FUNC(s,d) *d = ~(*s) | (*d) #include "p96_blit.cpp" #define BLT_NAME BLIT_NOTONLYDST_16 #define BLT_FUNC(s,d) *d = ~(*d) | (*s) #include "p96_blit.cpp" #define BLT_NAME BLIT_OR_16 #define BLT_FUNC(s,d) *d = (*s) | (*d) #include "p96_blit.cpp" #define BLT_NAME BLIT_TRUE_16 #define BLT_FUNC(s,d) *d = 0xffffffff #include "p96_blit.cpp" #define BLT_NAME BLIT_SWAP_16 #define BLT_FUNC(s,d) tmp = *d ; *d = *s; *s = tmp; #define BLT_TEMP #include "p96_blit.cpp" #undef BLT_SIZE #undef BLT_MULT #define BLT_SIZE 1 #define BLT_MULT 4 #define BLT_NAME BLIT_FALSE_8 #define BLT_FUNC(s,d) *d = 0 #include "p96_blit.cpp" #define BLT_NAME BLIT_NOR_8 #define BLT_FUNC(s,d) *d = ~(*s | * d) #include "p96_blit.cpp" #define BLT_NAME BLIT_ONLYDST_8 #define BLT_FUNC(s,d) *d = (*d) & ~(*s) #include "p96_blit.cpp" #define BLT_NAME BLIT_NOTSRC_8 #define BLT_FUNC(s,d) *d = ~(*s) #include "p96_blit.cpp" #define BLT_NAME BLIT_ONLYSRC_8 #define BLT_FUNC(s,d) *d = (*s) & ~(*d) #include "p96_blit.cpp" #define BLT_NAME BLIT_NOTDST_8 #define BLT_FUNC(s,d) *d = ~(*d) #include "p96_blit.cpp" #define BLT_NAME BLIT_EOR_8 #define BLT_FUNC(s,d) *d = (*s) ^ (*d) #include "p96_blit.cpp" #define BLT_NAME BLIT_NAND_8 #define BLT_FUNC(s,d) *d = ~((*s) & (*d)) #include "p96_blit.cpp" #define BLT_NAME BLIT_AND_8 #define BLT_FUNC(s,d) *d = (*s) & (*d) #include "p96_blit.cpp" #define BLT_NAME BLIT_NEOR_8 #define BLT_FUNC(s,d) *d = ~((*s) ^ (*d)) #include "p96_blit.cpp" #define BLT_NAME BLIT_NOTONLYSRC_8 #define BLT_FUNC(s,d) *d = ~(*s) | (*d) #include "p96_blit.cpp" #define BLT_NAME BLIT_NOTONLYDST_8 #define BLT_FUNC(s,d) *d = ~(*d) | (*s) #include "p96_blit.cpp" #define BLT_NAME BLIT_OR_8 #define BLT_FUNC(s,d) *d = (*s) | (*d) #include "p96_blit.cpp" #define BLT_NAME BLIT_TRUE_8 #define BLT_FUNC(s,d) *d = 0xffffffff #include "p96_blit.cpp" #define BLT_NAME BLIT_SWAP_8 #define BLT_FUNC(s,d) tmp = *d ; *d = *s; *s = tmp; #define BLT_TEMP #include "p96_blit.cpp" #undef BLT_SIZE #undef BLT_MULT #define PARMS width, height, src, dst, ri->BytesPerRow, dstri->BytesPerRow /* * Functions to perform an action on the frame-buffer */ static int do_blitrect_frame_buffer (struct RenderInfo *ri, struct RenderInfo *dstri, unsigned long srcx, unsigned long srcy, unsigned long dstx, unsigned long dsty, unsigned long width, unsigned long height, uae_u8 mask, BLIT_OPCODE opcode) { uae_u8 *src, *dst; uae_u8 Bpp = GetBytesPerPixel (ri->RGBFormat); unsigned long total_width = width * Bpp; src = ri->Memory + srcx * Bpp + srcy * ri->BytesPerRow; dst = dstri->Memory + dstx * Bpp + dsty * dstri->BytesPerRow; if (mask != 0xFF && Bpp > 1) { write_log (_T("WARNING - BlitRect() has mask 0x%x with Bpp %d.\n"), mask, Bpp); } P96TRACE ((_T("(%dx%d)=(%dx%d)=(%dx%d)=%d\n"), srcx, srcy, dstx, dsty, width, height, opcode)); if (mask == 0xFF || Bpp > 1) { if(opcode == BLIT_SRC) { /* handle normal case efficiently */ if (ri->Memory == dstri->Memory && dsty == srcy) { unsigned long i; for (i = 0; i < height; i++, src += ri->BytesPerRow, dst += dstri->BytesPerRow) memmove (dst, src, total_width); } else if (dsty < srcy) { unsigned long i; for (i = 0; i < height; i++, src += ri->BytesPerRow, dst += dstri->BytesPerRow) memcpy (dst, src, total_width); } else { unsigned long i; src += (height - 1) * ri->BytesPerRow; dst += (height - 1) * dstri->BytesPerRow; for (i = 0; i < height; i++, src -= ri->BytesPerRow, dst -= dstri->BytesPerRow) memcpy (dst, src, total_width); } return 1; } else if (Bpp == 4) { /* 32-bit optimized */ switch (opcode) { case BLIT_FALSE: BLIT_FALSE_32 (PARMS); break; case BLIT_NOR: BLIT_NOR_32 (PARMS); break; case BLIT_ONLYDST: BLIT_ONLYDST_32 (PARMS); break; case BLIT_NOTSRC: BLIT_NOTSRC_32 (PARMS); break; case BLIT_ONLYSRC: BLIT_ONLYSRC_32 (PARMS); break; case BLIT_NOTDST: BLIT_NOTDST_32 (PARMS); break; case BLIT_EOR: BLIT_EOR_32 (PARMS); break; case BLIT_NAND: BLIT_NAND_32 (PARMS); break; case BLIT_AND: BLIT_AND_32 (PARMS); break; case BLIT_NEOR: BLIT_NEOR_32 (PARMS); break; case BLIT_NOTONLYSRC: BLIT_NOTONLYSRC_32 (PARMS); break; case BLIT_NOTONLYDST: BLIT_NOTONLYDST_32 (PARMS); break; case BLIT_OR: BLIT_OR_32 (PARMS); break; case BLIT_TRUE: BLIT_TRUE_32 (PARMS); break; case BLIT_SWAP: BLIT_SWAP_32 (PARMS); break; } } else if (Bpp == 3) { /* 24-bit (not very) optimized */ switch (opcode) { case BLIT_FALSE: BLIT_FALSE_24 (PARMS); break; case BLIT_NOR: BLIT_NOR_24 (PARMS); break; case BLIT_ONLYDST: BLIT_ONLYDST_24 (PARMS); break; case BLIT_NOTSRC: BLIT_NOTSRC_24 (PARMS); break; case BLIT_ONLYSRC: BLIT_ONLYSRC_24 (PARMS); break; case BLIT_NOTDST: BLIT_NOTDST_24 (PARMS); break; case BLIT_EOR: BLIT_EOR_24 (PARMS); break; case BLIT_NAND: BLIT_NAND_24 (PARMS); break; case BLIT_AND: BLIT_AND_24 (PARMS); break; case BLIT_NEOR: BLIT_NEOR_24 (PARMS); break; case BLIT_NOTONLYSRC: BLIT_NOTONLYSRC_24 (PARMS); break; case BLIT_NOTONLYDST: BLIT_NOTONLYDST_24 (PARMS); break; case BLIT_OR: BLIT_OR_24 (PARMS); break; case BLIT_TRUE: BLIT_TRUE_24 (PARMS); break; case BLIT_SWAP: BLIT_SWAP_24 (PARMS); break; } } else if (Bpp == 2) { /* 16-bit optimized */ switch (opcode) { case BLIT_FALSE: BLIT_FALSE_16 (PARMS); break; case BLIT_NOR: BLIT_NOR_16 (PARMS); break; case BLIT_ONLYDST: BLIT_ONLYDST_16 (PARMS); break; case BLIT_NOTSRC: BLIT_NOTSRC_16 (PARMS); break; case BLIT_ONLYSRC: BLIT_ONLYSRC_16 (PARMS); break; case BLIT_NOTDST: BLIT_NOTDST_16 (PARMS); break; case BLIT_EOR: BLIT_EOR_16 (PARMS); break; case BLIT_NAND: BLIT_NAND_16 (PARMS); break; case BLIT_AND: BLIT_AND_16 (PARMS); break; case BLIT_NEOR: BLIT_NEOR_16 (PARMS); break; case BLIT_NOTONLYSRC: BLIT_NOTONLYSRC_16 (PARMS); break; case BLIT_NOTONLYDST: BLIT_NOTONLYDST_16 (PARMS); break; case BLIT_OR: BLIT_OR_16 (PARMS); break; case BLIT_TRUE: BLIT_TRUE_16 (PARMS); break; case BLIT_SWAP: BLIT_SWAP_16 (PARMS); break; } } else if (Bpp == 1) { /* 8-bit optimized */ switch (opcode) { case BLIT_FALSE: BLIT_FALSE_8 (PARMS); break; case BLIT_NOR: BLIT_NOR_8 (PARMS); break; case BLIT_ONLYDST: BLIT_ONLYDST_8 (PARMS); break; case BLIT_NOTSRC: BLIT_NOTSRC_8 (PARMS); break; case BLIT_ONLYSRC: BLIT_ONLYSRC_8 (PARMS); break; case BLIT_NOTDST: BLIT_NOTDST_8 (PARMS); break; case BLIT_EOR: BLIT_EOR_8 (PARMS); break; case BLIT_NAND: BLIT_NAND_8 (PARMS); break; case BLIT_AND: BLIT_AND_8 (PARMS); break; case BLIT_NEOR: BLIT_NEOR_8 (PARMS); break; case BLIT_NOTONLYSRC: BLIT_NOTONLYSRC_8 (PARMS); break; case BLIT_NOTONLYDST: BLIT_NOTONLYDST_8 (PARMS); break; case BLIT_OR: BLIT_OR_8 (PARMS); break; case BLIT_TRUE: BLIT_TRUE_8 (PARMS); break; case BLIT_SWAP: BLIT_SWAP_8 (PARMS); break; } } return 1; } return 0; } /* SetSpritePosition: Synopsis: SetSpritePosition(bi, RGBFormat); Inputs: a0: struct BoardInfo *bi d7: RGBFTYPE RGBFormat */ static uae_u32 REGPARAM2 picasso_SetSpritePosition (TrapContext *ctx) { uaecptr bi = m68k_areg (regs, 0); boardinfo = bi; newcursor_x = (uae_s16)get_word (bi + PSSO_BoardInfo_MouseX) - picasso96_state.XOffset; newcursor_y = (uae_s16)get_word (bi + PSSO_BoardInfo_MouseY) - picasso96_state.YOffset; if (!hwsprite) return 0; return 1; } /* SetSpriteColor: Synopsis: SetSpriteColor(bi, index, red, green, blue, RGBFormat); Inputs: a0: struct BoardInfo *bi d0.b: index d1.b: red d2.b: green d3.b: blue d7: RGBFTYPE RGBFormat This function changes one of the possible three colors of the hardware sprite. */ static uae_u32 REGPARAM2 picasso_SetSpriteColor (TrapContext *ctx) { uaecptr bi = m68k_areg (regs, 0); uae_u8 idx = m68k_dreg (regs, 0); uae_u8 red = m68k_dreg (regs, 1); uae_u8 green = m68k_dreg (regs, 2); uae_u8 blue = m68k_dreg (regs, 3); boardinfo = bi; idx++; if (!hwsprite) return 0; if (idx >= 4) return 0; cursorrgb[idx] = (red << 16) | (green << 8) | (blue << 0); P96TRACE_SPR ((_T("SetSpriteColor(%08x,%d:%02X%02X%02X). %x\n"), bi, idx, red, green, blue, bi + PSSO_BoardInfo_MousePens)); return 1; } STATIC_INLINE uae_u16 rgb32torgb16pc (uae_u32 rgb) { return (((rgb >> (16 + 3)) & 0x1f) << 11) | (((rgb >> (8 + 2)) & 0x3f) << 5) | (((rgb >> (0 + 3)) & 0x1f) << 0); } static void updatesprcolors (int bpp) { int i; for (i = 0; i < 4; i++) { uae_u32 v = cursorrgb[i]; switch (bpp) { case 2: cursorrgbn[i] = rgb32torgb16pc (v); break; case 4: if (i > 0) v |= 0xff000000; else v &= 0x00ffffff; cursorrgbn[i] = v; break; } } } STATIC_INLINE void putmousepixel (uae_u8 *d, int bpp, int idx) { uae_u32 val; val = cursorrgbn[idx]; switch (bpp) { case 2: ((uae_u16*)d)[0] = (uae_u16)val; break; case 4: ((uae_u32*)d)[0] = (uae_u32)val; break; } } #if 0 static void putwinmousepixel (HDC andDC, HDC xorDC, int x, int y, int c, uae_u32 *ct) { STUB(""); #if 0 if (c == 0) { SetPixel (andDC, x, y, RGB (255, 255, 255)); SetPixel (xorDC, x, y, RGB (0, 0, 0)); } else { uae_u32 val = ct[c]; SetPixel (andDC, x, y, RGB (0, 0, 0)); SetPixel (xorDC, x, y, RGB ((val >> 16) & 0xff, (val >> 8) & 0xff, val & 0xff)); } #endif } #endif static int wincursorcnt; static int tmp_sprite_w, tmp_sprite_h, tmp_sprite_hires, tmp_sprite_doubled; static uae_u8 *tmp_sprite_data; static uae_u32 tmp_sprite_colors[4]; extern uaecptr sprite_0; extern int sprite_0_width, sprite_0_height, sprite_0_doubled; extern uae_u32 sprite_0_colors[4]; int createwindowscursor (uaecptr src, int w, int h, int hiressprite, int doubledsprite, int chipset) { //STUB(""); #if 0 HBITMAP andBM, xorBM; HBITMAP andoBM, xoroBM; HDC andDC, xorDC, DC, mainDC; ICONINFO ic; int x, y, yy, w2, h2; int ret, isdata, datasize; HCURSOR oldwincursor = wincursor; uae_u8 *realsrc; uae_u32 *ct; ret = 0; wincursor_shown = 0; if (isfullscreen () > 0 || currprefs.input_tablet == 0 || currprefs.input_magic_mouse == 0) goto exit; if (currprefs.input_magic_mouse_cursor != MAGICMOUSE_HOST_ONLY) goto exit; if (chipset) { if (!sprite_0 || !mousehack_alive ()) { if (wincursor) SetCursor (normalcursor); goto exit; } w2 = w = sprite_0_width; h2 = h = sprite_0_height; hiressprite = sprite_0_width / 16; doubledsprite = sprite_0_doubled; if (doubledsprite) { h2 *= 2; w2 *= 2; } src = sprite_0; ct = sprite_0_colors; } else { h2 = h; w2 = w; ct = cursorrgbn; } datasize = h * ((w + 15) / 16) * 4; realsrc = get_real_address (src); if (w > 64 || h > 64) goto exit; if (wincursor && tmp_sprite_data) { if (w == tmp_sprite_w && h == tmp_sprite_h && !memcmp (tmp_sprite_data, realsrc, datasize) && !memcmp (tmp_sprite_colors, ct, sizeof (uae_u32)*4) && hiressprite == tmp_sprite_hires && doubledsprite == tmp_sprite_doubled ) { if (GetCursor () == wincursor) { wincursor_shown = 1; return 1; } } } write_log (_T("wincursor: %dx%d hires=%d doubled=%d\n"), w2, h2, hiressprite, doubledsprite); xfree (tmp_sprite_data); tmp_sprite_data = NULL; tmp_sprite_w = tmp_sprite_h = 0; DC = mainDC = andDC = xorDC = NULL; andBM = xorBM = NULL; DC = GetDC (NULL); if (!DC) goto end; mainDC = CreateCompatibleDC (DC); andDC = CreateCompatibleDC (DC); xorDC = CreateCompatibleDC (DC); if (!mainDC || !andDC || !xorDC) goto end; andBM = CreateCompatibleBitmap (DC, w2, h2); xorBM = CreateCompatibleBitmap (DC, w2, h2); if (!andBM || !xorBM) goto end; andoBM = (HBITMAP)SelectObject (andDC, andBM); xoroBM = (HBITMAP)SelectObject (xorDC, xorBM); isdata = 0; for (y = 0, yy = 0; y < h2; yy++) { int dbl; uaecptr img = src + yy * 4 * hiressprite; for (dbl = 0; dbl < (doubledsprite ? 2 : 1); dbl++) { x = 0; while (x < w2) { uae_u32 d1 = get_long (img); uae_u32 d2 = get_long (img + 2 * hiressprite); int bits; int maxbits = w2 - x; if (maxbits > 16 * hiressprite) maxbits = 16 * hiressprite; for (bits = 0; bits < maxbits && x < w2; bits++) { uae_u8 c = ((d2 & 0x80000000) ? 2 : 0) + ((d1 & 0x80000000) ? 1 : 0); d1 <<= 1; d2 <<= 1; putwinmousepixel (andDC, xorDC, x, y, c, ct); if (c > 0) isdata = 1; x++; if (doubledsprite && x < w2) { putwinmousepixel (andDC, xorDC, x, y, c, ct); x++; } } } if (y <= h2) y++; } } ret = 1; SelectObject (andDC, andoBM); SelectObject (xorDC, xoroBM); end: DeleteDC (xorDC); DeleteDC (andDC); DeleteDC (mainDC); ReleaseDC (NULL, DC); if (!isdata) { wincursor = LoadCursor (NULL, IDC_ARROW); } else if (ret) { memset (&ic, 0, sizeof ic); ic.hbmColor = xorBM; ic.hbmMask = andBM; wincursor = CreateIconIndirect (&ic); tmp_sprite_w = w; tmp_sprite_h = h; tmp_sprite_data = xmalloc (uae_u8, datasize); tmp_sprite_hires = hiressprite; tmp_sprite_doubled = doubledsprite; memcpy (tmp_sprite_data, realsrc, datasize); memcpy (tmp_sprite_colors, ct, sizeof (uae_u32) * 4); } DeleteObject (andBM); DeleteObject (xorBM); if (wincursor) { SetCursor (wincursor); wincursor_shown = 1; } if (!ret) write_log (_T("RTG Windows color cursor creation failed\n")); exit: if (currprefs.input_tablet && currprefs.input_magic_mouse && currprefs.input_magic_mouse_cursor == MAGICMOUSE_NATIVE_ONLY) { if (GetCursor () != NULL) SetCursor (NULL); } else { if (wincursor == oldwincursor && normalcursor != NULL) SetCursor (normalcursor); } if (oldwincursor) DestroyIcon (oldwincursor); oldwincursor = NULL; return ret; #endif return 0; } int picasso_setwincursor (void) { STUB(""); #if 0 if (wincursor) { #if 0 SetCursor (wincursor); #endif return 1; } else if (!picasso_on) { #if 0 if (createwindowscursor (0, 0, 0, 0, 0, 1)) #endif return 1; } #endif return 0; } static uae_u32 setspriteimage (uaecptr bi) { uae_u32 flags; int x, y, yy, bits, bpp; int hiressprite, doubledsprite; int ret = 0; int w, h; cursordeactivate = 0; if (!hwsprite) return 0; xfree (cursordata); cursordata = NULL; bpp = 4; w = get_byte (bi + PSSO_BoardInfo_MouseWidth); h = get_byte (bi + PSSO_BoardInfo_MouseHeight); flags = get_long (bi + PSSO_BoardInfo_Flags); hiressprite = 1; doubledsprite = 0; if (flags & BIF_HIRESSPRITE) hiressprite = 2; if (flags & BIF_BIGSPRITE) doubledsprite = 1; updatesprcolors (bpp); P96TRACE_SPR ((_T("SetSpriteImage(%08x,%08x,w=%d,h=%d,%d/%d,%08x)\n"), bi, get_long (bi + PSSO_BoardInfo_MouseImage), w, h, hiressprite - 1, doubledsprite, bi + PSSO_BoardInfo_MouseImage)); if (!w || !h || get_long (bi + PSSO_BoardInfo_MouseImage) == 0) { cursordeactivate = 1; ret = 1; goto end; } createwindowscursor (get_long (bi + PSSO_BoardInfo_MouseImage) + 4 * hiressprite, w, h, hiressprite, doubledsprite, 0); cursordata = xmalloc (uae_u8, w * h * bpp); for (y = 0, yy = 0; y < h; y++, yy++) { uae_u8 *p = cursordata + w * bpp * y; uae_u8 *pprev = p; uaecptr img = get_long (bi + PSSO_BoardInfo_MouseImage) + 4 * hiressprite + yy * 4 * hiressprite; x = 0; while (x < w) { uae_u32 d1 = get_long (img); uae_u32 d2 = get_long (img + 2 * hiressprite); int maxbits = w - x; if (maxbits > 16 * hiressprite) maxbits = 16 * hiressprite; for (bits = 0; bits < maxbits && x < w; bits++) { uae_u8 c = ((d2 & 0x80000000) ? 2 : 0) + ((d1 & 0x80000000) ? 1 : 0); d1 <<= 1; d2 <<= 1; putmousepixel (p, bpp, c); p += bpp; x++; if (doubledsprite && x < w) { putmousepixel (p, bpp, c); p += bpp; x++; } } } if (doubledsprite && y < h) { y++; memcpy (p, pprev, w * bpp); } } cursorwidth = w; if (cursorwidth > CURSORMAXWIDTH) cursorwidth = CURSORMAXWIDTH; cursorheight = h; if (cursorheight > CURSORMAXHEIGHT) cursorheight = CURSORMAXHEIGHT; setupcursor (); ret = 1; cursorok = TRUE; P96TRACE_SPR ((_T("hardware sprite created\n"))); end: return ret; } /* SetSpriteImage: Synopsis: SetSpriteImage(bi, RGBFormat); Inputs: a0: struct BoardInfo *bi d7: RGBFTYPE RGBFormat This function gets new sprite image data from the MouseImage field of the BoardInfo structure and writes it to the board. There are three possible cases: BIB_HIRESSPRITE is set: skip the first two long words and the following sprite data is arranged as an array of two longwords. Those form the two bit planes for one image line respectively. BIB_HIRESSPRITE and BIB_BIGSPRITE are not set: skip the first two words and the following sprite data is arranged as an array of two words. Those form the two bit planes for one image line respectively. BIB_HIRESSPRITE is not set and BIB_BIGSPRITE is set: skip the first two words and the following sprite data is arranged as an array of two words. Those form the two bit planes for one image line respectively. You have to double each pixel horizontally and vertically. All coordinates used in this case already assume a zoomed sprite, only the sprite data is not zoomed yet. You will have to compensate for this when accounting for hotspot offsets and sprite dimensions. */ static uae_u32 REGPARAM2 picasso_SetSpriteImage (TrapContext *ctx) { uaecptr bi = m68k_areg (regs, 0); boardinfo = bi; return setspriteimage (bi); } /* SetSprite: Synopsis: SetSprite(bi, activate, RGBFormat); Inputs: a0: struct BoardInfo *bi d0: BOOL activate d7: RGBFTYPE RGBFormat This function activates or deactivates the hardware sprite. */ static uae_u32 REGPARAM2 picasso_SetSprite (TrapContext *ctx) { uae_u32 result = 0; uae_u32 activate = m68k_dreg (regs, 0); if (!hwsprite) return 0; if (activate) { picasso_SetSpriteImage (ctx); cursorvisible = true; } else { cursordeactivate = 2; } result = 1; P96TRACE_SPR ((_T("SetSprite: %d\n"), activate)); return result; } /* * BOOL FindCard(struct BoardInfo *bi); and * * FindCard is called in the first stage of the board initialisation and * configuration and is used to look if there is a free and unconfigured * board of the type the driver is capable of managing. If it finds one, * it immediately reserves it for use by Picasso96, usually by clearing * the CDB_CONFIGME bit in the flags field of the ConfigDev struct of * this expansion card. But this is only a common example, a driver can * do whatever it wants to mark this card as used by the driver. This * mechanism is intended to ensure that a board is only configured and * used by one driver. FindBoard also usually fills some fields of the * BoardInfo struct supplied by the caller, the rtg.library, for example * the MemoryBase, MemorySize and RegisterBase fields. */ static void picasso96_alloc2 (TrapContext *ctx); static uae_u32 REGPARAM2 picasso_FindCard (TrapContext *ctx) { uaecptr AmigaBoardInfo = m68k_areg (regs, 0); /* NOTES: See BoardInfo struct definition in Picasso96 dev info */ if (!uaegfx_active || !gfxmem_start) return 0; if (uaegfx_base) { put_long (uaegfx_base + CARD_BOARDINFO, AmigaBoardInfo); } else if (uaegfx_old) { picasso96_alloc2 (ctx); } boardinfo = AmigaBoardInfo; if (allocated_gfxmem && !picasso96_state.CardFound) { /* Fill in MemoryBase, MemorySize */ put_long (AmigaBoardInfo + PSSO_BoardInfo_MemoryBase, gfxmem_start); put_long (AmigaBoardInfo + PSSO_BoardInfo_MemorySize, allocated_gfxmem - reserved_gfxmem); picasso96_state.CardFound = 1; /* mark our "card" as being found */ return -1; } else return 0; } static void FillBoardInfo (uaecptr amigamemptr, struct LibResolution *res, int width, int height, int depth) { int i; switch (depth) { case 8: res->Modes[CHUNKY] = amigamemptr; break; case 15: case 16: res->Modes[HICOLOR] = amigamemptr; break; case 24: res->Modes[TRUECOLOR] = amigamemptr; break; default: res->Modes[TRUEALPHA] = amigamemptr; break; } for (i = 0; i < PSSO_ModeInfo_sizeof; i++) put_byte (amigamemptr + i, 0); put_word (amigamemptr + PSSO_ModeInfo_Width, width); put_word (amigamemptr + PSSO_ModeInfo_Height, height); put_byte (amigamemptr + PSSO_ModeInfo_Depth, depth); put_byte (amigamemptr + PSSO_ModeInfo_Flags, 0); put_word (amigamemptr + PSSO_ModeInfo_HorTotal, width); put_word (amigamemptr + PSSO_ModeInfo_HorBlankSize, 0); put_word (amigamemptr + PSSO_ModeInfo_HorSyncStart, 0); put_word (amigamemptr + PSSO_ModeInfo_HorSyncSize, 0); put_byte (amigamemptr + PSSO_ModeInfo_HorSyncSkew, 0); put_byte (amigamemptr + PSSO_ModeInfo_HorEnableSkew, 0); put_word (amigamemptr + PSSO_ModeInfo_VerTotal, height); put_word (amigamemptr + PSSO_ModeInfo_VerBlankSize, 0); put_word (amigamemptr + PSSO_ModeInfo_VerSyncStart, 0); put_word (amigamemptr + PSSO_ModeInfo_VerSyncSize, 0); put_byte (amigamemptr + PSSO_ModeInfo_first_union, 98); put_byte (amigamemptr + PSSO_ModeInfo_second_union, 14); put_long (amigamemptr + PSSO_ModeInfo_PixelClock, width * height * (currprefs.gfx_apmode[1].gfx_refreshrate ? abs (currprefs.gfx_apmode[1].gfx_refreshrate) : default_freq)); } struct modeids { int width, height; int id; }; static struct modeids mi[] = { /* "original" modes */ 320, 200, 0, 320, 240, 1, 640, 400, 2, 640, 480, 3, 800, 600, 4, 1024, 768, 5, 1152, 864, 6, 1280,1024, 7, 1600,1280, 8, 320, 256, 9, 640, 512,10, /* new modes */ 704, 480, 129, 704, 576, 130, 720, 480, 131, 720, 576, 132, 768, 483, 133, 768, 576, 134, 800, 480, 135, 848, 480, 136, 854, 480, 137, 948, 576, 138, 1024, 576, 139, 1152, 768, 140, 1152, 864, 141, 1280, 720, 142, 1280, 768, 143, 1280, 800, 144, 1280, 854, 145, 1280, 960, 146, 1366, 768, 147, 1440, 900, 148, 1440, 960, 149, 1600,1200, 150, 1680,1050, 151, 1920,1080, 152, 1920,1200, 153, 2048,1152, 154, 2048,1536, 155, 2560,1600, 156, 2560,2048, 157, 400, 300, 158, 512, 384, 159, 640, 432, 160, 1360, 768, 161, 1360,1024, 162, 1400,1050, 163, 1792,1344, 164, 1800,1440, 165, 1856,1392, 166, 1920,1440, 167, 480, 360, 168, 640, 350, 169, 1600, 900, 170, 960, 600, 171, 1088, 612, 172, 1152, 648, 173, 1776,1000, 174, 2560,1440, 175, -1,-1,0 }; static int AssignModeID (int w, int h, int *unkcnt) { int i; #ifdef NEWMODES2 return 0x40000000 | (w << 14) | h; #endif for (i = 0; mi[i].width > 0; i++) { if (w == mi[i].width && h == mi[i].height) return 0x50001000 | (mi[i].id * 0x10000); } (*unkcnt)++; write_log (_T("P96: Non-unique mode %dx%d\n"), w, h); return 0x51001000 - (*unkcnt) * 0x10000; } static uaecptr picasso96_amem, picasso96_amemend; static void CopyLibResolutionStructureU2A (struct LibResolution *libres, uaecptr amigamemptr) { int i; for (i = 0; i < PSSO_LibResolution_sizeof; i++) put_byte (amigamemptr + i, 0); for (i = 0; i < strlen (libres->P96ID); i++) put_byte (amigamemptr + PSSO_LibResolution_P96ID + i, libres->P96ID[i]); put_long (amigamemptr + PSSO_LibResolution_DisplayID, libres->DisplayID); put_word (amigamemptr + PSSO_LibResolution_Width, libres->Width); put_word (amigamemptr + PSSO_LibResolution_Height, libres->Height); put_word (amigamemptr + PSSO_LibResolution_Flags, libres->Flags); for (i = 0; i < MAXMODES; i++) put_long (amigamemptr + PSSO_LibResolution_Modes + i * 4, libres->Modes[i]); put_long (amigamemptr + 10, amigamemptr + PSSO_LibResolution_P96ID); put_long (amigamemptr + PSSO_LibResolution_BoardInfo, libres->BoardInfo); } static void init_alloc (TrapContext *ctx, int size) { #if 0 SYSTEM_INFO si; #endif picasso96_amem = picasso96_amemend = 0; if (uaegfx_base) { int size = get_long (uaegfx_base + CARD_RESLISTSIZE); picasso96_amem = get_long (uaegfx_base + CARD_RESLIST); } else if (uaegfx_active) { reserved_gfxmem = size; picasso96_amem = gfxmem_start + allocated_gfxmem - size; } picasso96_amemend = picasso96_amem + size; write_log (_T("P96 RESINFO: %08X-%08X (%d,%d)\n"), picasso96_amem, picasso96_amemend, size / PSSO_ModeInfo_sizeof, size); xfree (gwwbuf); #if 0 GetSystemInfo (&si); gwwpagesize = si.dwPageSize; #endif printf("setting gwwpagesize to something...\n"); gwwpagesize = 1024*1024*4; // FIXME:... gwwbufsize = allocated_gfxmem / gwwpagesize + 1; gwwpagemask = gwwpagesize - 1; gwwbuf = xmalloc (void*, gwwbufsize); } static int p96depth (int depth) { uae_u32 f = currprefs.picasso96_modeflags; int ok = 0; if (depth == 8 && (f & RGBFF_CLUT)) ok = 1; if (depth == 15 && (f & (RGBFF_R5G5B5PC | RGBFF_R5G5B5 | RGBFF_B5G5R5PC))) ok = 2; if (depth == 16 && (f & (RGBFF_R5G6B5PC | RGBFF_R5G6B5 | RGBFF_B5G6R5PC))) ok = 2; if (depth == 24 && (f & (RGBFF_R8G8B8 | RGBFF_B8G8R8))) ok = 3; if (depth == 32 && (f & (RGBFF_A8R8G8B8 | RGBFF_A8B8G8R8 | RGBFF_R8G8B8A8 | RGBFF_B8G8R8A8))) ok = 4; return ok; } static int _cdecl resolution_compare (const void *a, const void *b) { struct PicassoResolution *ma = (struct PicassoResolution *)a; struct PicassoResolution *mb = (struct PicassoResolution *)b; if (ma->res.width < mb->res.width) return -1; if (ma->res.width > mb->res.width) return 1; if (ma->res.height < mb->res.height) return -1; if (ma->res.height > mb->res.height) return 1; return ma->depth - mb->depth; } static int missmodes[] = { 320, 200, 320, 240, 320, 256, 640, 400, 640, 480, 640, 512, 800, 600, 1024, 768, 1280, 1024, -1 }; static uaecptr uaegfx_card_install (TrapContext *ctx, uae_u32 size); static void add_mode (struct MultiDisplay *md, int w, int h, int d, int freq, int lace) { int ct; int i, j; /* int w = dm->dmPelsWidth; int h = dm->dmPelsHeight; int d = dm->dmBitsPerPel; bool lace = false; int freq = 0; if (dm->dmFields & DM_DISPLAYFREQUENCY) { freq = dm->dmDisplayFrequency; if (freq < 10) freq = 0; } if (dm->dmFields & DM_DISPLAYFLAGS) { lace = (dm->dmDisplayFlags & DM_INTERLACED) != 0; } */ int rawmode = 0; ct = 0; if (d == 8) ct = RGBMASK_8BIT; if (d == 15) ct = RGBMASK_15BIT; if (d == 16) ct = RGBMASK_16BIT; if (d == 24) ct = RGBMASK_24BIT; if (d == 32) ct = RGBMASK_32BIT; if (ct == 0) return; d /= 8; i = 0; while (md->DisplayModes[i].depth >= 0) { if (md->DisplayModes[i].depth == d && md->DisplayModes[i].res.width == w && md->DisplayModes[i].res.height == h) { for (j = 0; j < MAX_REFRESH_RATES; j++) { if (md->DisplayModes[i].refresh[j] == 0 || md->DisplayModes[i].refresh[j] == freq) break; } if (j < MAX_REFRESH_RATES) { md->DisplayModes[i].refresh[j] = freq; md->DisplayModes[i].refreshtype[j] = rawmode; md->DisplayModes[i].refresh[j + 1] = 0; return; } } i++; } i = 0; while (md->DisplayModes[i].depth >= 0) i++; if (i >= MAX_PICASSO_MODES - 1) return; md->DisplayModes[i].rawmode = rawmode; md->DisplayModes[i].lace = lace; md->DisplayModes[i].res.width = w; md->DisplayModes[i].res.height = h; md->DisplayModes[i].depth = d; md->DisplayModes[i].refresh[0] = freq; md->DisplayModes[i].refreshtype[0] = rawmode; md->DisplayModes[i].refresh[1] = 0; md->DisplayModes[i].colormodes = ct; md->DisplayModes[i + 1].depth = -1; _stprintf (md->DisplayModes[i].name, _T("%dx%d%s, %d-bit"), md->DisplayModes[i].res.width, md->DisplayModes[i].res.height, lace ? _T("i") : _T(""), md->DisplayModes[i].depth * 8); } static void picasso96_alloc2 (TrapContext *ctx) { int i, j, size, cnt; int misscnt, depths; xfree (newmodes); newmodes = NULL; picasso96_amem = picasso96_amemend = 0; if (allocated_gfxmem == 0) return; misscnt = 0; newmodes = xmalloc (struct PicassoResolution, MAX_PICASSO_MODES); size = 0; depths = 0; if (p96depth (8)) depths++; if (p96depth (15)) depths++; if (p96depth (16)) depths++; if (p96depth (24)) depths++; if (p96depth (32)) depths++; #ifdef FSUAE printf("\n\npicasso96_alloc2\n\n\n"); MultiDisplay *md1 = Displays; md1->monitorname = strdup("Monitor Name"); md1->monitorid = strdup("Monitor ID"); md1->fullname = strdup("Monitor Full Name"); md1->adapterid = strdup("Display Adapter ID"); md1->adapterkey = strdup("Display Adapter Key"); md1->adaptername = strdup("Display Adapter Name"); md1->DisplayModes = xmalloc (struct PicassoResolution, MAX_PICASSO_MODES); md1->DisplayModes[0].depth = -1; //add_mode (md1, 700, 500, 32, 50, 1); int k = 0; while (1) { int w = g_amiga_rtg_modes[k]; int h = g_amiga_rtg_modes[k + 1]; if (w == -1 || h == -1) { break; } if (w > 0 && h > 0) { add_mode (md1, w, h, 32, 50, 1); } k += 2; } #if 0 struct PicassoResolution *pr; pr = &md1->DisplayModes[idx2]; if (pr->res.width == dm.dmPelsWidth && pr->res.height == dm.dmPelsHeight && pr->depth == dm.dmBitsPerPel / 8) { for (i = 0; pr->refresh[i]; i++) { if (pr->refresh[i] == dm.dmDisplayFrequency) { found = 1; break; } } } idx2++; } if (!found && dm.dmBitsPerPel > 8) { int freq = 0; #if 0 write_log (_T("EnumDisplaySettings(%dx%dx%d %dHz %08x)\n"), dm.dmPelsWidth, dm.dmPelsHeight, dm.dmBitsPerPel, dm.dmDisplayFrequency, dm.dmFields); #endif if ((dm.dmFields & DM_PELSWIDTH) && (dm.dmFields & DM_PELSHEIGHT) && (dm.dmFields & DM_BITSPERPEL)) { addmode (md1, &dm, mode); } } idx++; } } //dhack(); sortmodes (md1); modesList (md1); i = 0; while (md1->DisplayModes[i].depth > 0) i++; write_log (_T("%d display modes.\n"), i); md1++; } #endif #endif for (int mon = 0; Displays[mon].monitorname; mon++) { struct PicassoResolution *DisplayModes = Displays[mon].DisplayModes; i = 0; while (DisplayModes[i].depth >= 0) { for (j = 0; missmodes[j * 2] >= 0; j++) { if (DisplayModes[i].res.width == missmodes[j * 2 + 0] && DisplayModes[i].res.height == missmodes[j * 2 + 1]) { missmodes[j * 2 + 0] = 0; missmodes[j * 2 + 1] = 0; } } i++; } } cnt = 0; for (int mon = 0; Displays[mon].monitorname; mon++) { printf("monitor: %d\n", mon); struct PicassoResolution *DisplayModes = Displays[mon].DisplayModes; i = 0; while (DisplayModes[i].depth >= 0) { if (DisplayModes[i].rawmode) { i++; continue; } j = i; size += PSSO_LibResolution_sizeof; while (missmodes[misscnt * 2] == 0) misscnt++; if (missmodes[misscnt * 2] >= 0) { int w = DisplayModes[i].res.width; int h = DisplayModes[i].res.height; if (w > missmodes[misscnt * 2 + 0] || (w == missmodes[misscnt * 2 + 0] && h > missmodes[misscnt * 2 + 1])) { struct PicassoResolution *pr = &newmodes[cnt]; memcpy (pr, &DisplayModes[i], sizeof (struct PicassoResolution)); pr->res.width = missmodes[misscnt * 2 + 0]; pr->res.height = missmodes[misscnt * 2 + 1]; _stprintf (pr->name, _T("%dx%d FAKE"), pr->res.width, pr->res.height); size += PSSO_ModeInfo_sizeof * depths; cnt++; misscnt++; continue; } } int k; for (k = 0; k < cnt; k++) { if (newmodes[k].res.width == DisplayModes[i].res.width && newmodes[k].res.height == DisplayModes[i].res.height && newmodes[k].depth == DisplayModes[i].depth) break; } if (k >= cnt) { memcpy (&newmodes[cnt], &DisplayModes[i], sizeof (struct PicassoResolution)); size += PSSO_ModeInfo_sizeof * depths; cnt++; } i++; } } qsort (newmodes, cnt, sizeof (struct PicassoResolution), resolution_compare); #if MULTIDISPLAY for (i = 0; Displays[i].name; i++) { size += PSSO_LibResolution_sizeof; size += PSSO_ModeInfo_sizeof * depths; } #endif newmodes[cnt].depth = -1; for (i = 0; i < cnt; i++) { int depth; for (depth = 8; depth <= 32; depth++) { if (!p96depth (depth)) continue; switch (depth) { case 1: if (newmodes[i].res.width > chunky.width) chunky.width = newmodes[i].res.width; if (newmodes[i].res.height > chunky.height) chunky.height = newmodes[i].res.height; break; case 2: if (newmodes[i].res.width > hicolour.width) hicolour.width = newmodes[i].res.width; if (newmodes[i].res.height > hicolour.height) hicolour.height = newmodes[i].res.height; break; case 3: if (newmodes[i].res.width > truecolour.width) truecolour.width = newmodes[i].res.width; if (newmodes[i].res.height > truecolour.height) truecolour.height = newmodes[i].res.height; break; case 4: if (newmodes[i].res.width > alphacolour.width) alphacolour.width = newmodes[i].res.width; if (newmodes[i].res.height > alphacolour.height) alphacolour.height = newmodes[i].res.height; break; } } } #if 0 ShowSupportedResolutions (); #endif uaegfx_card_install (ctx, size); init_alloc (ctx, size); } void picasso96_alloc (TrapContext *ctx) { if (uaegfx_old) return; uaegfx_resname = ds (_T("uaegfx.card")); picasso96_alloc2 (ctx); } static void inituaegfxfuncs (uaecptr start, uaecptr ABI); static void inituaegfx (uaecptr ABI) { uae_u32 flags; cursorvisible = false; cursorok = 0; cursordeactivate = 0; write_log (_T("RTG mode mask: %x\n"), currprefs.picasso96_modeflags); put_word (ABI + PSSO_BoardInfo_BitsPerCannon, 8); put_word (ABI + PSSO_BoardInfo_RGBFormats, currprefs.picasso96_modeflags); put_long (ABI + PSSO_BoardInfo_BoardType, picasso96_BT); put_long (ABI + PSSO_BoardInfo_GraphicsControllerType, picasso96_GCT); put_long (ABI + PSSO_BoardInfo_PaletteChipType, picasso96_PCT); put_long (ABI + PSSO_BoardInfo_BoardName, uaegfx_resname); put_long (ABI + PSSO_BoardInfo_BoardType, 1); /* only 1 clock */ put_long (ABI + PSSO_BoardInfo_PixelClockCount + PLANAR * 4, 1); put_long (ABI + PSSO_BoardInfo_PixelClockCount + CHUNKY * 4, 1); put_long (ABI + PSSO_BoardInfo_PixelClockCount + HICOLOR * 4, 1); put_long (ABI + PSSO_BoardInfo_PixelClockCount + TRUECOLOR * 4, 1); put_long (ABI + PSSO_BoardInfo_PixelClockCount + TRUEALPHA * 4, 1); /* we have 16 bits for horizontal and vertical timings - hack */ put_word (ABI + PSSO_BoardInfo_MaxHorValue + PLANAR * 2, 0xffff); put_word (ABI + PSSO_BoardInfo_MaxHorValue + CHUNKY * 2, 0xffff); put_word (ABI + PSSO_BoardInfo_MaxHorValue + HICOLOR * 2, 0xffff); put_word (ABI + PSSO_BoardInfo_MaxHorValue + TRUECOLOR * 2, 0xffff); put_word (ABI + PSSO_BoardInfo_MaxHorValue + TRUEALPHA * 2, 0xffff); put_word (ABI + PSSO_BoardInfo_MaxVerValue + PLANAR * 2, 0xffff); put_word (ABI + PSSO_BoardInfo_MaxVerValue + CHUNKY * 2, 0xffff); put_word (ABI + PSSO_BoardInfo_MaxVerValue + HICOLOR * 2, 0xffff); put_word (ABI + PSSO_BoardInfo_MaxVerValue + TRUECOLOR * 2, 0xffff); put_word (ABI + PSSO_BoardInfo_MaxVerValue + TRUEALPHA * 2, 0xffff); flags = get_long (ABI + PSSO_BoardInfo_Flags); flags &= 0xffff0000; flags |= BIF_BLITTER | BIF_NOMEMORYMODEMIX; flags &= ~BIF_HARDWARESPRITE; #if 0 if (currprefs.gfx_api && D3D_goodenough () && USE_HARDWARESPRITE) { #endif if (0) { printf("FIXME: fix hardware sprite via OpenGL?\n"); hwsprite = 1; flags |= BIF_HARDWARESPRITE; write_log (_T("P96: Hardware sprite support enabled\n")); } else { hwsprite = 0; write_log (_T("P96: Hardware sprite support disabled\n")); } if (flags & BIF_NOBLITTER) write_log (_T("P96: Blitter disabled in devs:monitors/uaegfx!\n")); if (currprefs.win32_rtgvblankrate >= -1 && !uaegfx_old) flags |= BIF_VBLANKINTERRUPT; if (!(flags & BIF_INDISPLAYCHAIN)) { write_log (_T("P96: BIF_INDISPLAYCHAIN force-enabled!\n")); flags |= BIF_INDISPLAYCHAIN; } put_long (ABI + PSSO_BoardInfo_Flags, flags); put_word (ABI + PSSO_BoardInfo_MaxHorResolution + 0, planar.width); put_word (ABI + PSSO_BoardInfo_MaxHorResolution + 2, chunky.width); put_word (ABI + PSSO_BoardInfo_MaxHorResolution + 4, hicolour.width); put_word (ABI + PSSO_BoardInfo_MaxHorResolution + 6, truecolour.width); put_word (ABI + PSSO_BoardInfo_MaxHorResolution + 8, alphacolour.width); put_word (ABI + PSSO_BoardInfo_MaxVerResolution + 0, planar.height); put_word (ABI + PSSO_BoardInfo_MaxVerResolution + 2, chunky.height); put_word (ABI + PSSO_BoardInfo_MaxVerResolution + 4, hicolour.height); put_word (ABI + PSSO_BoardInfo_MaxVerResolution + 6, truecolour.height); put_word (ABI + PSSO_BoardInfo_MaxVerResolution + 8, alphacolour.height); inituaegfxfuncs (uaegfx_rom, ABI); } static void addmode (uaecptr AmigaBoardInfo, uaecptr *amem, struct LibResolution *res, int w, int h, const TCHAR *name, int display, int *unkcnt) { int depth; if (display > 0) { res->DisplayID = 0x51000000 + display * 0x100000; } else { res->DisplayID = AssignModeID (w, h, unkcnt); } res->BoardInfo = AmigaBoardInfo; res->Width = w; res->Height = h; res->Flags = P96F_PUBLIC; memcpy (res->P96ID, "P96-0:", 6); if (name) { char *n2 = ua (name); strcpy (res->Name, n2); xfree (n2); } else { sprintf (res->Name, "UAE:%4dx%4d", w, h); } for (depth = 8; depth <= 32; depth++) { if (!p96depth (depth)) continue; if(allocated_gfxmem >= w * h * (depth + 7) / 8) { FillBoardInfo (*amem, res, w, h, depth); *amem += PSSO_ModeInfo_sizeof; } } } /**************************************** * InitCard() * * a2: BoardInfo structure ptr - Amiga-based address in Intel endian-format * */ static uae_u32 REGPARAM2 picasso_InitCard (TrapContext *ctx) { int LibResolutionStructureCount = 0; int i, j, unkcnt, cnt; uaecptr amem; uaecptr AmigaBoardInfo = m68k_areg (regs, 0); if (!picasso96_amem) { write_log (_T("P96: InitCard() but no resolution memory!\n")); return 0; } amem = picasso96_amem; inituaegfx (AmigaBoardInfo); i = 0; unkcnt = cnt = 0; while (newmodes[i].depth >= 0) { struct LibResolution res = { 0 }; TCHAR *s; j = i; addmode (AmigaBoardInfo, &amem, &res, newmodes[i].res.width, newmodes[i].res.height, NULL, 0, &unkcnt); s = au (res.Name); write_log (_T("%2d: %08X %4dx%4d %s\n"), ++cnt, res.DisplayID, res.Width, res.Height, s); xfree (s); while (newmodes[i].depth >= 0 && newmodes[i].res.width == newmodes[j].res.width && newmodes[i].res.height == newmodes[j].res.height) i++; LibResolutionStructureCount++; CopyLibResolutionStructureU2A (&res, amem); #if P96TRACING_ENABLED && P96TRACING_LEVEL > 1 DumpLibResolutionStructure(amem); #endif AmigaListAddTail (AmigaBoardInfo + PSSO_BoardInfo_ResolutionsList, amem); amem += PSSO_LibResolution_sizeof; } #if MULTIDISPLAY for (i = 0; Displays[i].name; i++) { struct LibResolution res = { 0 }; struct MultiDisplay *md = &Displays[i]; int w = md->rect.right - md->rect.left; int h = md->rect.bottom - md->rect.top; TCHAR tmp[100]; if (md->primary) strcpy (tmp, "UAE:Primary"); else _stprintf (tmp, "UAE:Display#%d", i); addmode (AmigaBoardInfo, &amem, &res, w, h, tmp, i + 1, &unkcnt); write_log (_T("%08X %4dx%4d %s\n"), res.DisplayID, res.Width + 16, res.Height, res.Name); LibResolutionStructureCount++; CopyLibResolutionStructureU2A (&res, amem); #if P96TRACING_ENABLED && P96TRACING_LEVEL > 1 DumpLibResolutionStructure(amem); #endif AmigaListAddTail (AmigaBoardInfo + PSSO_BoardInfo_ResolutionsList, amem); amem += PSSO_LibResolution_sizeof; } #endif if (amem > picasso96_amemend) write_log (_T("P96: display resolution list corruption %08x<>%08x (%d)\n"), amem, picasso96_amemend, i); return -1; } /* * SetSwitch: * a0: struct BoardInfo * d0.w: BOOL state * this function should set a board switch to let the Amiga signal pass * through when supplied with a 0 in d0 and to show the board signal if * a 1 is passed in d0. You should remember the current state of the * switch to avoid unneeded switching. If your board has no switch, then * simply supply a function that does nothing except a RTS. * * NOTE: Return the opposite of the switch-state. BDK */ static uae_u32 REGPARAM2 picasso_SetSwitch (TrapContext *ctx) { uae_u16 flag = m68k_dreg (regs, 0) & 0xFFFF; TCHAR p96text[100]; /* Do not switch immediately. Tell the custom chip emulation about the * desired state, and wait for custom.c to call picasso_enablescreen * whenever it is ready to change the screen state. */ picasso_requested_on = flag != 0; p96text[0] = 0; if (flag) _stprintf (p96text, _T("Picasso96 %dx%dx%d (%dx%dx%d)"), picasso96_state.Width, picasso96_state.Height, picasso96_state.BytesPerPixel * 8, picasso_vidinfo.width, picasso_vidinfo.height, picasso_vidinfo.pixbytes * 8); write_log (_T("SetSwitch() - %s\n"), flag ? p96text : _T("amiga")); /* Put old switch-state in D0 */ return !flag; } static void init_picasso_screen (void); void picasso_enablescreen (int on) { if (!init_picasso_screen_called) init_picasso_screen (); picasso_refresh (); checkrtglibrary(); } static void resetpalette(void) { for (int i = 0; i < 256; i++) picasso96_state.CLUT[i].Pad = 0xff; } /* * SetColorArray: * a0: struct BoardInfo * d0.w: startindex * d1.w: count * when this function is called, your driver has to fetch "count" color * values starting at "startindex" from the CLUT field of the BoardInfo * structure and write them to the hardware. The color values are always * between 0 and 255 for each component regardless of the number of bits * per cannon your board has. So you might have to shift the colors * before writing them to the hardware. */ static int updateclut (uaecptr clut, int start, int count) { int i, changed = 0; clut += start * 3; for (i = start; i < start + count; i++) { int r = get_byte (clut); int g = get_byte (clut + 1); int b = get_byte (clut + 2); //write_log(_T("%d: %02x%02x%02x\n"), i, r, g, b); changed |= picasso96_state.CLUT[i].Red != r || picasso96_state.CLUT[i].Green != g || picasso96_state.CLUT[i].Blue != b; if (picasso96_state.CLUT[i].Pad) { changed = 1; picasso96_state.CLUT[i].Pad = 0; } picasso96_state.CLUT[i].Red = r; picasso96_state.CLUT[i].Green = g; picasso96_state.CLUT[i].Blue = b; clut += 3; } changed |= picasso_palette (); return changed; } static uae_u32 REGPARAM2 picasso_SetColorArray (TrapContext *ctx) { /* Fill in some static UAE related structure about this new CLUT setting * We need this for CLUT-based displays, and for mapping CLUT to hi/true colour */ uae_u16 start = m68k_dreg (regs, 0); uae_u16 count = m68k_dreg (regs, 1); uaecptr boardinfo = m68k_areg (regs, 0); uaecptr clut = boardinfo + PSSO_BoardInfo_CLUT; if (updateclut (clut, start, count)) full_refresh = 1; P96TRACE((_T("SetColorArray(%d,%d)\n"), start, count)); return 1; } /* * SetDAC: * a0: struct BoardInfo * d7: RGBFTYPE RGBFormat * This function is called whenever the RGB format of the display changes, * e.g. from chunky to TrueColor. Usually, all you have to do is to set * the RAMDAC of your board accordingly. */ static uae_u32 REGPARAM2 picasso_SetDAC (TrapContext *ctx) { /* Fill in some static UAE related structure about this new DAC setting * Lets us keep track of what pixel format the Amiga is thinking about in our frame-buffer */ P96TRACE((_T("SetDAC()\n"))); rtg_clear (); return 1; } static void init_picasso_screen (void) { if(set_panning_called) { picasso96_state.Extent = picasso96_state.Address + picasso96_state.BytesPerRow * picasso96_state.VirtualHeight; } if (set_gc_called) { gfx_set_picasso_modeinfo (picasso96_state.Width, picasso96_state.Height, picasso96_state.GC_Depth, picasso96_state.RGBFormat); set_gc_called = 0; } if((picasso_vidinfo.width == picasso96_state.Width) && (picasso_vidinfo.height == picasso96_state.Height) && (picasso_vidinfo.depth == (picasso96_state.GC_Depth >> 3)) && (picasso_vidinfo.selected_rgbformat == picasso96_state.RGBFormat)) { picasso_refresh (); } init_picasso_screen_called = 1; printf("FIXME: not calling mman_ResetWatch (p96ram_start + natmem_offset, allocated_gfxmem);\n"); #if 0 mman_ResetWatch (p96ram_start + natmem_offset, allocated_gfxmem); #endif } /* * SetGC: * a0: struct BoardInfo * a1: struct ModeInfo * d0: BOOL Border * This function is called whenever another ModeInfo has to be set. This * function simply sets up the CRTC and TS registers to generate the * timing used for that screen mode. You should not set the DAC, clocks * or linear start adress. They will be set when appropriate by their * own functions. */ static uae_u32 REGPARAM2 picasso_SetGC (TrapContext *ctx) { /* Fill in some static UAE related structure about this new ModeInfo setting */ uaecptr AmigaBoardInfo = m68k_areg (regs, 0); uae_u32 border = m68k_dreg (regs, 0); uaecptr modeinfo = m68k_areg (regs, 1); put_long (AmigaBoardInfo + PSSO_BoardInfo_ModeInfo, modeinfo); put_word (AmigaBoardInfo + PSSO_BoardInfo_Border, border); picasso96_state.Width = get_word (modeinfo + PSSO_ModeInfo_Width); picasso96_state.VirtualWidth = picasso96_state.Width; /* in case SetPanning doesn't get called */ picasso96_state.Height = get_word (modeinfo + PSSO_ModeInfo_Height); picasso96_state.VirtualHeight = picasso96_state.Height; /* in case SetPanning doesn't get called */ picasso96_state.GC_Depth = get_byte (modeinfo + PSSO_ModeInfo_Depth); picasso96_state.GC_Flags = get_byte (modeinfo + PSSO_ModeInfo_Flags); write_log(_T("SetGC(%d,%d,%d,%d)\n"), picasso96_state.Width, picasso96_state.Height, picasso96_state.GC_Depth, border); set_gc_called = 1; picasso96_state.HostAddress = NULL; init_picasso_screen (); init_hz_p96 (); return 1; } /* * SetPanning: * a0: struct BoardInfo * a1: UBYTE *Memory * d0: uae_u16 Width * d1: WORD XOffset * d2: WORD YOffset * d7: RGBFTYPE RGBFormat * This function sets the view origin of a display which might also be * overscanned. In register a1 you get the start address of the screen * bitmap on the Amiga side. You will have to subtract the starting * address of the board memory from that value to get the memory start * offset within the board. Then you get the offset in pixels of the * left upper edge of the visible part of an overscanned display. From * these values you will have to calculate the LinearStartingAddress * fields of the CRTC registers. * NOTE: SetPanning() can be used to know when a Picasso96 screen is * being opened. Better to do the appropriate clearing of the * background here than in SetSwitch() derived functions, * because SetSwitch() is not called for subsequent Picasso screens. */ static void picasso_SetPanningInit (void) { picasso96_state.XYOffset = picasso96_state.Address + (picasso96_state.XOffset * picasso96_state.BytesPerPixel) + (picasso96_state.YOffset * picasso96_state.BytesPerRow); if(picasso96_state.VirtualWidth > picasso96_state.Width || picasso96_state.VirtualHeight > picasso96_state.Height) picasso96_state.BigAssBitmap = 1; else picasso96_state.BigAssBitmap = 0; } static uae_u32 REGPARAM2 picasso_SetPanning (TrapContext *ctx) { uae_u16 Width = m68k_dreg (regs, 0); uaecptr start_of_screen = m68k_areg (regs, 1); uaecptr bi = m68k_areg (regs, 0); uaecptr bmeptr = get_long (bi + PSSO_BoardInfo_BitMapExtra); /* Get our BoardInfo ptr's BitMapExtra ptr */ uae_u16 bme_width, bme_height; int changed = 0; RGBFTYPE rgbf; if (oldscr == 0) { oldscr = start_of_screen; changed = 1; } if (oldscr != start_of_screen) { oldscr = start_of_screen; changed = 1; } bme_width = get_word (bmeptr + PSSO_BitMapExtra_Width); bme_height = get_word (bmeptr + PSSO_BitMapExtra_Height); rgbf = picasso96_state.RGBFormat; picasso96_state.Address = start_of_screen; /* Amiga-side address */ picasso96_state.XOffset = (uae_s16)(m68k_dreg (regs, 1) & 0xFFFF); picasso96_state.YOffset = (uae_s16)(m68k_dreg (regs, 2) & 0xFFFF); put_word (bi + PSSO_BoardInfo_XOffset, picasso96_state.XOffset); put_word (bi + PSSO_BoardInfo_YOffset, picasso96_state.YOffset); picasso96_state.VirtualWidth = bme_width; picasso96_state.VirtualHeight = bme_height; picasso96_state.RGBFormat = (RGBFTYPE)m68k_dreg (regs, 7); picasso96_state.BytesPerPixel = GetBytesPerPixel (picasso96_state.RGBFormat); picasso96_state.BytesPerRow = picasso96_state.VirtualWidth * picasso96_state.BytesPerPixel; picasso_SetPanningInit(); if (rgbf != picasso96_state.RGBFormat) setconvert (); full_refresh = 1; set_panning_called = 1; P96TRACE((_T("SetPanning(%d, %d, %d) (%dx%d) Start 0x%x, BPR %d Bpp %d RGBF %d\n"), Width, picasso96_state.XOffset, picasso96_state.YOffset, bme_width, bme_height, start_of_screen, picasso96_state.BytesPerRow, picasso96_state.BytesPerPixel, picasso96_state.RGBFormat)); init_picasso_screen (); set_panning_called = 0; return 1; } #ifdef CPU_64_BIT static void do_xor8 (uae_u8 *p, int w, uae_u32 v) { while (ALIGN_POINTER_TO32 (p) != 7 && w) { *p ^= v; p++; w--; } uae_u64 vv = v | (v << 32); while (w >= 2 * 8) { *((uae_u64*)p) ^= vv; p += 8; *((uae_u64*)p) ^= vv; p += 8; w -= 2 * 8; } while (w) { *p ^= v; p++; w--; } } #else static void do_xor8 (uae_u8 *p, int w, uae_u32 v) { while (ALIGN_POINTER_TO32 (p) != 3 && w) { *p ^= v; p++; w--; } while (w >= 2 * 4) { *((uae_u32*)p) ^= v; p += 4; *((uae_u32*)p) ^= v; p += 4; w -= 2 * 4; } while (w) { *p ^= v; p++; w--; } } #endif /* * InvertRect: * * Inputs: * a0:struct BoardInfo *bi * a1:struct RenderInfo *ri * d0.w:X * d1.w:Y * d2.w:Width * d3.w:Height * d4.l:Mask * d7.l:RGBFormat * * This function is used to invert a rectangular area on the board. It is called by BltBitMap, * BltPattern and BltTemplate. */ static uae_u32 REGPARAM2 picasso_InvertRect (TrapContext *ctx) { uaecptr renderinfo = m68k_areg (regs, 1); unsigned long X = (uae_u16)m68k_dreg (regs, 0); unsigned long Y = (uae_u16)m68k_dreg (regs, 1); unsigned long Width = (uae_u16)m68k_dreg (regs, 2); unsigned long Height = (uae_u16)m68k_dreg (regs, 3); uae_u8 mask = (uae_u8)m68k_dreg (regs, 4); int Bpp = GetBytesPerPixel (m68k_dreg (regs, 7)); uae_u32 xorval; unsigned int lines; struct RenderInfo ri; uae_u8 *uae_mem, *rectstart; unsigned long width_in_bytes; uae_u32 result = 0; if (NOBLITTER) return 0; if (CopyRenderInfoStructureA2U (renderinfo, &ri)) { P96TRACE((_T("InvertRect %dbpp 0x%lx\n"), Bpp, (long)mask)); if (mask != 0xFF && Bpp > 1) mask = 0xFF; xorval = 0x01010101 * (mask & 0xFF); width_in_bytes = Bpp * Width; rectstart = uae_mem = ri.Memory + Y * ri.BytesPerRow + X * Bpp; for (lines = 0; lines < Height; lines++, uae_mem += ri.BytesPerRow) do_xor8 (uae_mem, width_in_bytes, xorval); result = 1; } return result; /* 1 if supported, 0 otherwise */ } /*********************************************************** FillRect: *********************************************************** * a0: struct BoardInfo * * a1: struct RenderInfo * * d0: WORD X * d1: WORD Y * d2: WORD Width * d3: WORD Height * d4: uae_u32 Pen * d5: UBYTE Mask * d7: uae_u32 RGBFormat ***********************************************************/ static uae_u32 REGPARAM2 picasso_FillRect (TrapContext *ctx) { uaecptr renderinfo = m68k_areg (regs, 1); uae_u32 X = (uae_u16)m68k_dreg (regs, 0); uae_u32 Y = (uae_u16)m68k_dreg (regs, 1); uae_u32 Width = (uae_u16)m68k_dreg (regs, 2); uae_u32 Height = (uae_u16)m68k_dreg (regs, 3); uae_u32 Pen = m68k_dreg (regs, 4); uae_u8 Mask = (uae_u8)m68k_dreg (regs, 5); RGBFTYPE RGBFormat = (RGBFTYPE)m68k_dreg (regs, 7); uae_u8 *oldstart; int Bpp; struct RenderInfo ri; uae_u32 result = 0; if (NOBLITTER) return 0; if (CopyRenderInfoStructureA2U (renderinfo, &ri) && Y != 0xFFFF) { Bpp = GetBytesPerPixel (RGBFormat); P96TRACE((_T("FillRect(%d, %d, %d, %d) Pen 0x%x BPP %d BPR %d Mask 0x%x\n"), X, Y, Width, Height, Pen, Bpp, ri.BytesPerRow, Mask)); if(Bpp > 1) Mask = 0xFF; if (Mask == 0xFF) { /* Do the fill-rect in the frame-buffer */ do_fillrect_frame_buffer (&ri, X, Y, Width, Height, Pen, Bpp); result = 1; } else { /* We get here only if Mask != 0xFF */ if (Bpp != 1) { write_log (_T("WARNING - FillRect() has unhandled mask 0x%x with Bpp %d. Using fall-back routine.\n"), Mask, Bpp); } else { Pen &= Mask; Mask = ~Mask; oldstart = ri.Memory + Y * ri.BytesPerRow + X * Bpp; { uae_u8 *start = oldstart; uae_u8 *end = start + Height * ri.BytesPerRow; for (; start != end; start += ri.BytesPerRow) { uae_u8 *p = start; unsigned long cols; for (cols = 0; cols < Width; cols++) { uae_u32 tmpval = do_get_mem_byte (p + cols) & Mask; do_put_mem_byte (p + cols, (uae_u8)(Pen | tmpval)); } } } result = 1; } } } return result; } /* * BlitRect() is a generic (any chunky pixel format) rectangle copier * NOTE: If dstri is NULL, then we're only dealing with one RenderInfo area, and called from picasso_BlitRect() * * OpCodes: * 0 = FALSE: dst = 0 * 1 = NOR: dst = ~(src | dst) * 2 = ONLYDST: dst = dst & ~src * 3 = NOTSRC: dst = ~src * 4 = ONLYSRC: dst = src & ~dst * 5 = NOTDST: dst = ~dst * 6 = EOR: dst = src^dst * 7 = NAND: dst = ~(src & dst) * 8 = AND: dst = (src & dst) * 9 = NEOR: dst = ~(src ^ dst) *10 = DST: dst = dst *11 = NOTONLYSRC: dst = ~src | dst *12 = SRC: dst = src *13 = NOTONLYDST: dst = ~dst | src *14 = OR: dst = src | dst *15 = TRUE: dst = 0xFF */ struct blitdata { struct RenderInfo ri_struct; struct RenderInfo dstri_struct; struct RenderInfo *ri; /* Self-referencing pointers */ struct RenderInfo *dstri; unsigned long srcx; unsigned long srcy; unsigned long dstx; unsigned long dsty; unsigned long width; unsigned long height; uae_u8 mask; BLIT_OPCODE opcode; } blitrectdata; STATIC_INLINE int BlitRectHelper (void) { struct RenderInfo *ri = blitrectdata.ri; struct RenderInfo *dstri = blitrectdata.dstri; unsigned long srcx = blitrectdata.srcx; unsigned long srcy = blitrectdata.srcy; unsigned long dstx = blitrectdata.dstx; unsigned long dsty = blitrectdata.dsty; unsigned long width = blitrectdata.width; unsigned long height = blitrectdata.height; uae_u8 mask = blitrectdata.mask; BLIT_OPCODE opcode = blitrectdata.opcode; uae_u8 Bpp = GetBytesPerPixel (ri->RGBFormat); if (opcode == BLIT_DST) { write_log ( _T("WARNING: BlitRect() being called with opcode of BLIT_DST\n") ); return 1; } /* * If we have no destination RenderInfo, then we're dealing with a single-buffer action, called * from picasso_BlitRect(). The code in do_blitrect_frame_buffer() deals with the frame-buffer, * while the do_blit() code deals with the visible screen. * * If we have a destination RenderInfo, then we've been called from picasso_BlitRectNoMaskComplete() * and we need to put the results on the screen from the frame-buffer. */ if (dstri == NULL || dstri->Memory == ri->Memory) { if (mask != 0xFF && Bpp > 1) mask = 0xFF; dstri = ri; } /* Do our virtual frame-buffer memory first */ return do_blitrect_frame_buffer (ri, dstri, srcx, srcy, dstx, dsty, width, height, mask, opcode); } STATIC_INLINE int BlitRect (uaecptr ri, uaecptr dstri, unsigned long srcx, unsigned long srcy, unsigned long dstx, unsigned long dsty, unsigned long width, unsigned long height, uae_u8 mask, BLIT_OPCODE opcode) { /* Set up the params */ CopyRenderInfoStructureA2U(ri, &blitrectdata.ri_struct); blitrectdata.ri = &blitrectdata.ri_struct; if(dstri) { CopyRenderInfoStructureA2U(dstri, &blitrectdata.dstri_struct); blitrectdata.dstri = &blitrectdata.dstri_struct; } else { blitrectdata.dstri = NULL; } blitrectdata.srcx = srcx; blitrectdata.srcy = srcy; blitrectdata.dstx = dstx; blitrectdata.dsty = dsty; blitrectdata.width = width; blitrectdata.height = height; blitrectdata.mask = mask; blitrectdata.opcode = opcode; return BlitRectHelper (); } /*********************************************************** BlitRect: *********************************************************** * a0: struct BoardInfo * a1: struct RenderInfo * d0: WORD SrcX * d1: WORD SrcY * d2: WORD DstX * d3: WORD DstY * d4: WORD Width * d5: WORD Height * d6: UBYTE Mask * d7: uae_u32 RGBFormat ***********************************************************/ static uae_u32 REGPARAM2 picasso_BlitRect (TrapContext *ctx) { uaecptr renderinfo = m68k_areg (regs, 1); unsigned long srcx = (uae_u16)m68k_dreg (regs, 0); unsigned long srcy = (uae_u16)m68k_dreg (regs, 1); unsigned long dstx = (uae_u16)m68k_dreg (regs, 2); unsigned long dsty = (uae_u16)m68k_dreg (regs, 3); unsigned long width = (uae_u16)m68k_dreg (regs, 4); unsigned long height = (uae_u16)m68k_dreg (regs, 5); uae_u8 Mask = (uae_u8)m68k_dreg (regs, 6); uae_u32 result = 0; if (NOBLITTER_BLIT) return 0; P96TRACE((_T("BlitRect(%d, %d, %d, %d, %d, %d, 0x%x)\n"), srcx, srcy, dstx, dsty, width, height, Mask)); result = BlitRect (renderinfo, (uaecptr)NULL, srcx, srcy, dstx, dsty, width, height, Mask, BLIT_SRC); return result; } /*********************************************************** BlitRectNoMaskComplete: *********************************************************** * a0: struct BoardInfo * a1: struct RenderInfo (src) * a2: struct RenderInfo (dst) * d0: WORD SrcX * d1: WORD SrcY * d2: WORD DstX * d3: WORD DstY * d4: WORD Width * d5: WORD Height * d6: UBYTE OpCode * d7: uae_u32 RGBFormat * NOTE: MUST return 0 in D0 if we're not handling this operation * because the RGBFormat or opcode aren't supported. * OTHERWISE return 1 ***********************************************************/ static uae_u32 REGPARAM2 picasso_BlitRectNoMaskComplete (TrapContext *ctx) { uaecptr srcri = m68k_areg (regs, 1); uaecptr dstri = m68k_areg (regs, 2); unsigned long srcx = (uae_u16)m68k_dreg (regs, 0); unsigned long srcy = (uae_u16)m68k_dreg (regs, 1); unsigned long dstx = (uae_u16)m68k_dreg (regs, 2); unsigned long dsty = (uae_u16)m68k_dreg (regs, 3); unsigned long width = (uae_u16)m68k_dreg (regs, 4); unsigned long height = (uae_u16)m68k_dreg (regs, 5); BLIT_OPCODE OpCode = (BLIT_OPCODE)(m68k_dreg (regs, 6) & 0xff); uae_u32 RGBFmt = m68k_dreg (regs, 7); uae_u32 result = 0; if (NOBLITTER_BLIT) return 0; P96TRACE((_T("BlitRectNoMaskComplete() op 0x%02x, %08x:(%4d,%4d) --> %08x:(%4d,%4d), wh(%4d,%4d)\n"), OpCode, get_long (srcri + PSSO_RenderInfo_Memory), srcx, srcy, get_long (dstri + PSSO_RenderInfo_Memory), dstx, dsty, width, height)); result = BlitRect (srcri, dstri, srcx, srcy, dstx, dsty, width, height, 0xFF, OpCode); return result; } /* NOTE: fgpen MUST be in host byte order */ STATIC_INLINE void PixelWrite (uae_u8 *mem, int bits, uae_u32 fgpen, int Bpp, uae_u32 mask) { switch (Bpp) { case 1: if (mask != 0xFF) fgpen = (fgpen & mask) | (mem[bits] & ~mask); mem[bits] = (uae_u8)fgpen; break; case 2: ((uae_u16 *)mem)[bits] = (uae_u16)fgpen; break; case 3: mem[bits * 3 + 0] = fgpen >> 0; mem[bits * 3 + 1] = fgpen >> 8; mem[bits * 3 + 2] = fgpen >> 16; break; case 4: ((uae_u32 *)mem)[bits] = fgpen; break; } } /* * BlitPattern: * * Synopsis:BlitPattern(bi, ri, pattern, X, Y, Width, Height, Mask, RGBFormat); * Inputs: * a0:struct BoardInfo *bi * a1:struct RenderInfo *ri * a2:struct Pattern *pattern * d0.w:X * d1.w:Y * d2.w:Width * d3.w:Height * d4.w:Mask * d7.l:RGBFormat * * This function is used to paint a pattern on the board memory using the blitter. It is called by * BltPattern, if a AreaPtrn is used with positive AreaPtSz. The pattern consists of a b/w image * using a single plane of image data which will be expanded repeatedly to the destination RGBFormat * using ForeGround and BackGround pens as well as draw modes. The width of the pattern data is * always 16 pixels (one word) and the height is calculated as 2^Size. The data must be shifted up * and to the left by XOffset and YOffset pixels at the beginning. */ static uae_u32 REGPARAM2 picasso_BlitPattern (TrapContext *ctx) { uaecptr rinf = m68k_areg (regs, 1); uaecptr pinf = m68k_areg (regs, 2); unsigned long X = (uae_u16)m68k_dreg (regs, 0); unsigned long Y = (uae_u16)m68k_dreg (regs, 1); unsigned long W = (uae_u16)m68k_dreg (regs, 2); unsigned long H = (uae_u16)m68k_dreg (regs, 3); uae_u8 Mask = (uae_u8)m68k_dreg (regs, 4); uae_u32 RGBFmt = m68k_dreg (regs, 7); uae_u8 Bpp = GetBytesPerPixel (RGBFmt); int inversion = 0; struct RenderInfo ri; struct Pattern pattern; unsigned long rows; uae_u8 *uae_mem; int xshift; unsigned long ysize_mask; uae_u32 result = 0; if (NOBLITTER) return 0; if(CopyRenderInfoStructureA2U (rinf, &ri) && CopyPatternStructureA2U (pinf, &pattern)) { Bpp = GetBytesPerPixel(ri.RGBFormat); uae_mem = ri.Memory + Y * ri.BytesPerRow + X * Bpp; /* offset with address */ if (pattern.DrawMode & INVERS) inversion = 1; pattern.DrawMode &= 0x03; if (Mask != 0xFF) { if(Bpp > 1) Mask = 0xFF; result = 1; } else { result = 1; } if(result) { uae_u32 fgpen, bgpen; P96TRACE((_T("BlitPattern() xy(%d,%d), wh(%d,%d) draw 0x%x, off(%d,%d), ph %d\n"), X, Y, W, H, pattern.DrawMode, pattern.XOffset, pattern.YOffset, 1 << pattern.Size)); #if P96TRACING_ENABLED DumpPattern(&pattern); #endif ysize_mask = (1 << pattern.Size) - 1; xshift = pattern.XOffset & 15; fgpen = pattern.FgPen; endianswap (&fgpen, Bpp); bgpen = pattern.BgPen; endianswap (&bgpen, Bpp); for (rows = 0; rows < H; rows++, uae_mem += ri.BytesPerRow) { unsigned long prow = (rows + pattern.YOffset) & ysize_mask; unsigned int d = do_get_mem_word (((uae_u16 *)pattern.Memory) + prow); uae_u8 *uae_mem2 = uae_mem; unsigned long cols; if (xshift != 0) d = (d << xshift) | (d >> (16 - xshift)); for (cols = 0; cols < W; cols += 16, uae_mem2 += Bpp * 16) { long bits; long max = W - cols; unsigned int data = d; if (max > 16) max = 16; switch (pattern.DrawMode) { case JAM1: { for (bits = 0; bits < max; bits++) { int bit_set = data & 0x8000; data <<= 1; if (inversion) bit_set = !bit_set; if (bit_set) PixelWrite (uae_mem2, bits, fgpen, Bpp, Mask); } break; } case JAM2: { for (bits = 0; bits < max; bits++) { int bit_set = data & 0x8000; data <<= 1; if (inversion) bit_set = !bit_set; PixelWrite (uae_mem2, bits, bit_set ? fgpen : bgpen, Bpp, Mask); } break; } case COMP: { for (bits = 0; bits < max; bits++) { int bit_set = data & 0x8000; data <<= 1; if (bit_set) { switch (Bpp) { case 1: { uae_mem2[bits] ^= 0xff & Mask; } break; case 2: { uae_u16 *addr = (uae_u16 *)uae_mem2; addr[bits] ^= 0xffff; } break; case 3: { uae_u32 *addr = (uae_u32 *)(uae_mem2 + bits * 3); do_put_mem_long (addr, do_get_mem_long (addr) ^ 0x00ffffff); } break; case 4: { uae_u32 *addr = (uae_u32 *)uae_mem2; addr[bits] ^= 0xffffffff; } break; } } } break; } } } } result = 1; } } return result; } /************************************************* BlitTemplate: ************************************************** * Synopsis: BlitTemplate(bi, ri, template, X, Y, Width, Height, Mask, RGBFormat); * a0: struct BoardInfo *bi * a1: struct RenderInfo *ri * a2: struct Template *template * d0.w: X * d1.w: Y * d2.w: Width * d3.w: Height * d4.w: Mask * d7.l: RGBFormat * * This function is used to paint a template on the board memory using the blitter. * It is called by BltPattern and BltTemplate. The template consists of a b/w image * using a single plane of image data which will be expanded to the destination RGBFormat * using ForeGround and BackGround pens as well as draw modes. ***********************************************************************************/ static uae_u32 REGPARAM2 picasso_BlitTemplate (TrapContext *ctx) { uae_u8 inversion = 0; uaecptr rinf = m68k_areg (regs, 1); uaecptr tmpl = m68k_areg (regs, 2); unsigned long X = (uae_u16)m68k_dreg (regs, 0); unsigned long Y = (uae_u16)m68k_dreg (regs, 1); unsigned long W = (uae_u16)m68k_dreg (regs, 2); unsigned long H = (uae_u16)m68k_dreg (regs, 3); uae_u16 Mask = (uae_u16)m68k_dreg (regs, 4); struct Template tmp; struct RenderInfo ri; unsigned long rows; int bitoffset; uae_u8 *uae_mem, Bpp; uae_u8 *tmpl_base; uae_u32 result = 0; if (NOBLITTER) return 0; if (CopyRenderInfoStructureA2U (rinf, &ri) && CopyTemplateStructureA2U (tmpl, &tmp)) { Bpp = GetBytesPerPixel (ri.RGBFormat); uae_mem = ri.Memory + Y * ri.BytesPerRow + X * Bpp; /* offset into address */ if (tmp.DrawMode & INVERS) inversion = 1; tmp.DrawMode &= 0x03; if (Mask != 0xFF) { if(Bpp > 1) Mask = 0xFF; if(tmp.DrawMode == COMP) { write_log (_T("WARNING - BlitTemplate() has unhandled mask 0x%x with COMP DrawMode. Using fall-back routine.\n"), Mask); return 0; } else { result = 1; } } else { result = 1; } if(result) { uae_u32 fgpen, bgpen; P96TRACE((_T("BlitTemplate() xy(%d,%d), wh(%d,%d) draw 0x%x fg 0x%x bg 0x%x \n"), X, Y, W, H, tmp.DrawMode, tmp.FgPen, tmp.BgPen)); bitoffset = tmp.XOffset % 8; #if P96TRACING_ENABLED && P96TRACING_LEVEL > 0 DumpTemplate(&tmp, W, H); #endif tmpl_base = tmp.Memory + tmp.XOffset / 8; fgpen = tmp.FgPen; endianswap (&fgpen, Bpp); bgpen = tmp.BgPen; endianswap (&bgpen, Bpp); for (rows = 0; rows < H; rows++, uae_mem += ri.BytesPerRow, tmpl_base += tmp.BytesPerRow) { unsigned long cols; uae_u8 *tmpl_mem = tmpl_base; uae_u8 *uae_mem2 = uae_mem; unsigned int data = *tmpl_mem; for (cols = 0; cols < W; cols += 8, uae_mem2 += Bpp * 8) { unsigned int byte; long bits; long max = W - cols; if (max > 8) max = 8; data <<= 8; data |= *++tmpl_mem; byte = data >> (8 - bitoffset); switch (tmp.DrawMode) { case JAM1: { for (bits = 0; bits < max; bits++) { int bit_set = (byte & 0x80); byte <<= 1; if (inversion) bit_set = !bit_set; if (bit_set) PixelWrite (uae_mem2, bits, fgpen, Bpp, Mask); } break; } case JAM2: { for (bits = 0; bits < max; bits++) { int bit_set = (byte & 0x80); byte <<= 1; if (inversion) bit_set = !bit_set; PixelWrite (uae_mem2, bits, bit_set ? fgpen : bgpen, Bpp, Mask); } break; } case COMP: { for (bits = 0; bits < max; bits++) { int bit_set = (byte & 0x80); byte <<= 1; if (bit_set) { switch (Bpp) { case 1: { uae_u8 *addr = uae_mem2; addr[bits] ^= 0xff; } break; case 2: { uae_u16 *addr = (uae_u16 *)uae_mem2; addr[bits] ^= 0xffff; } break; case 3: { uae_u32 *addr = (uae_u32 *)(uae_mem2 + bits * 3); do_put_mem_long (addr, do_get_mem_long (addr) ^ 0x00FFFFFF); } break; case 4: { uae_u32 *addr = (uae_u32 *)uae_mem2; addr[bits] ^= 0xffffffff; } break; } } } break; } } } } result = 1; } } return 1; } /* * CalculateBytesPerRow: * a0: struct BoardInfo * d0: uae_u16 Width * d7: RGBFTYPE RGBFormat * This function calculates the amount of bytes needed for a line of * "Width" pixels in the given RGBFormat. */ static uae_u32 REGPARAM2 picasso_CalculateBytesPerRow (TrapContext *ctx) { uae_u16 width = m68k_dreg (regs, 0); uae_u32 type = m68k_dreg (regs, 7); width = GetBytesPerPixel (type) * width; return width; } /* * SetDisplay: * a0: struct BoardInfo * d0: BOOL state * This function enables and disables the video display. * * NOTE: return the opposite of the state */ static uae_u32 REGPARAM2 picasso_SetDisplay (TrapContext *ctx) { uae_u32 state = m68k_dreg (regs, 0); P96TRACE ((_T("SetDisplay(%d)\n"), state)); resetpalette (); return !state; } void init_hz_p96 (void) { #if 1 if (0) { #else if (currprefs.win32_rtgvblankrate < 0 || isvsync_rtg ()) { double rate = getcurrentvblankrate (); if (rate < 0) p96vblank = vblank_hz; else p96vblank = getcurrentvblankrate (); #endif } else if (currprefs.win32_rtgvblankrate == 0) { p96vblank = vblank_hz; } else { p96vblank = currprefs.win32_rtgvblankrate; } if (p96vblank <= 0) p96vblank = 60; if (p96vblank >= 300) p96vblank = 300; p96syncrate = maxvpos_nom * vblank_hz / p96vblank; write_log (_T("P96FREQ: %d*%.4f = %.4f / %.1f = %d\n"), maxvpos_nom, vblank_hz, maxvpos_nom * vblank_hz, p96vblank, p96syncrate); } /* NOTE: Watch for those planeptrs of 0x00000000 and 0xFFFFFFFF for all zero / all one bitmaps !!!! */ static void PlanarToChunky (struct RenderInfo *ri, struct BitMap *bm, unsigned long srcx, unsigned long srcy, unsigned long dstx, unsigned long dsty, unsigned long width, unsigned long height, uae_u8 mask) { int j; uae_u8 *PLANAR[8], *image = ri->Memory + dstx * GetBytesPerPixel (ri->RGBFormat) + dsty * ri->BytesPerRow; int Depth = bm->Depth; unsigned long rows, bitoffset = srcx & 7; long eol_offset; /* Set up our bm->Planes[] pointers to the right horizontal offset */ for (j = 0; j < Depth; j++) { uae_u8 *p = bm->Planes[j]; if (p != &all_zeros_bitmap && p != &all_ones_bitmap) p += srcx / 8 + srcy * bm->BytesPerRow; PLANAR[j] = p; if ((mask & (1 << j)) == 0) PLANAR[j] = &all_zeros_bitmap; } eol_offset = (long)bm->BytesPerRow - (long)((width + 7) >> 3); for (rows = 0; rows < height; rows++, image += ri->BytesPerRow) { unsigned long cols; for (cols = 0; cols < width; cols += 8) { int k; uae_u32 a = 0, b = 0; unsigned int msk = 0xFF; long tmp = cols + 8 - width; if (tmp > 0) { msk <<= tmp; b = do_get_mem_long ((uae_u32 *)(image + cols + 4)); if (tmp < 4) b &= 0xFFFFFFFF >> (32 - tmp * 8); else if (tmp > 4) { a = do_get_mem_long ((uae_u32 *)(image + cols)); a &= 0xFFFFFFFF >> (64 - tmp * 8); } } for (k = 0; k < Depth; k++) { unsigned int data; if (PLANAR[k] == &all_zeros_bitmap) data = 0; else if (PLANAR[k] == &all_ones_bitmap) data = 0xFF; else { data = (uae_u8)(do_get_mem_word ((uae_u16 *)PLANAR[k]) >> (8 - bitoffset)); PLANAR[k]++; } data &= msk; a |= p2ctab[data][0] << k; b |= p2ctab[data][1] << k; } do_put_mem_long ((uae_u32 *)(image + cols), a); do_put_mem_long ((uae_u32 *)(image + cols + 4), b); } for (j = 0; j < Depth; j++) { if (PLANAR[j] != &all_zeros_bitmap && PLANAR[j] != &all_ones_bitmap) { PLANAR[j] += eol_offset; } } } } /* * BlitPlanar2Chunky: * a0: struct BoardInfo *bi * a1: struct BitMap *bm - source containing planar information and assorted details * a2: struct RenderInfo *ri - dest area and its details * d0.w: SrcX * d1.w: SrcY * d2.w: DstX * d3.w: DstY * d4.w: SizeX * d5.w: SizeY * d6.b: MinTerm - uh oh! * d7.b: Mask - uh oh! * * This function is currently used to blit from planar bitmaps within system memory to chunky bitmaps * on the board. Watch out for plane pointers that are 0x00000000 (represents a plane with all bits "0") * or 0xffffffff (represents a plane with all bits "1"). */ static uae_u32 REGPARAM2 picasso_BlitPlanar2Chunky (TrapContext *ctx) { uaecptr bm = m68k_areg (regs, 1); uaecptr ri = m68k_areg (regs, 2); unsigned long srcx = (uae_u16)m68k_dreg (regs, 0); unsigned long srcy = (uae_u16)m68k_dreg (regs, 1); unsigned long dstx = (uae_u16)m68k_dreg (regs, 2); unsigned long dsty = (uae_u16)m68k_dreg (regs, 3); unsigned long width = (uae_u16)m68k_dreg (regs, 4); unsigned long height = (uae_u16)m68k_dreg (regs, 5); uae_u8 minterm = m68k_dreg (regs, 6) & 0xFF; uae_u8 mask = m68k_dreg (regs, 7) & 0xFF; struct RenderInfo local_ri; struct BitMap local_bm; uae_u32 result = 0; if (NOBLITTER) return 0; if (minterm != 0x0C) { write_log (_T("ERROR - BlitPlanar2Chunky() has minterm 0x%x, which I don't handle. Using fall-back routine.\n"), minterm); } else if (CopyRenderInfoStructureA2U (ri, &local_ri) && CopyBitMapStructureA2U (bm, &local_bm)) { P96TRACE((_T("BlitPlanar2Chunky(%d, %d, %d, %d, %d, %d) Minterm 0x%x, Mask 0x%x, Depth %d\n"), srcx, srcy, dstx, dsty, width, height, minterm, mask, local_bm.Depth)); P96TRACE((_T("P2C - BitMap has %d BPR, %d rows\n"), local_bm.BytesPerRow, local_bm.Rows)); PlanarToChunky (&local_ri, &local_bm, srcx, srcy, dstx, dsty, width, height, mask); result = 1; } return result; } /* NOTE: Watch for those planeptrs of 0x00000000 and 0xFFFFFFFF for all zero / all one bitmaps !!!! */ static void PlanarToDirect (struct RenderInfo *ri, struct BitMap *bm, unsigned long srcx, unsigned long srcy, unsigned long dstx, unsigned long dsty, unsigned long width, unsigned long height, uae_u8 mask, struct ColorIndexMapping *cim) { int j; int bpp = GetBytesPerPixel (ri->RGBFormat); uae_u8 *PLANAR[8]; uae_u8 *image = ri->Memory + dstx * bpp + dsty * ri->BytesPerRow; int Depth = bm->Depth; unsigned long rows; long eol_offset; if(!bpp) return; /* Set up our bm->Planes[] pointers to the right horizontal offset */ for (j = 0; j < Depth; j++) { uae_u8 *p = bm->Planes[j]; if (p != &all_zeros_bitmap && p != &all_ones_bitmap) p += srcx / 8 + srcy * bm->BytesPerRow; PLANAR[j] = p; if ((mask & (1 << j)) == 0) PLANAR[j] = &all_zeros_bitmap; } eol_offset = (long)bm->BytesPerRow - (long)((width + (srcx & 7)) >> 3); for (rows = 0; rows < height; rows++, image += ri->BytesPerRow) { unsigned long cols; uae_u8 *image2 = image; unsigned int bitoffs = 7 - (srcx & 7); int i; for (cols = 0; cols < width; cols ++) { int v = 0, k; for (k = 0; k < Depth; k++) { if (PLANAR[k] == &all_ones_bitmap) v |= 1 << k; else if (PLANAR[k] != &all_zeros_bitmap) { v |= ((*PLANAR[k] >> bitoffs) & 1) << k; } } switch (bpp) { case 2: ((uae_u16 *)image2)[0] = (uae_u16)(cim->Colors[v]); image2 += 2; break; case 3: image2[0] = cim->Colors[v] >> 0; image2[1] = cim->Colors[v] >> 8; image2[2] = cim->Colors[v] >> 16; image2 += 3; break; case 4: ((uae_u32 *)image2)[0] = cim->Colors[v]; image2 += 4; break; } bitoffs--; bitoffs &= 7; if (bitoffs == 7) { int k; for (k = 0; k < Depth; k++) { if (PLANAR[k] != &all_zeros_bitmap && PLANAR[k] != &all_ones_bitmap) { PLANAR[k]++; } } } } for (i = 0; i < Depth; i++) { if (PLANAR[i] != &all_zeros_bitmap && PLANAR[i] != &all_ones_bitmap) { PLANAR[i] += eol_offset; } } } } /* * BlitPlanar2Direct: * * Synopsis: * BlitPlanar2Direct(bi, bm, ri, cim, SrcX, SrcY, DstX, DstY, SizeX, SizeY, MinTerm, Mask); * Inputs: * a0:struct BoardInfo *bi * a1:struct BitMap *bm * a2:struct RenderInfo *ri * a3:struct ColorIndexMapping *cmi * d0.w:SrcX * d1.w:SrcY * d2.w:DstX * d3.w:DstY * d4.w:SizeX * d5.w:SizeY * d6.b:MinTerm * d7.b:Mask * * This function is currently used to blit from planar bitmaps within system memory to direct color * bitmaps (15, 16, 24 or 32 bit) on the board. Watch out for plane pointers that are 0x00000000 (represents * a plane with all bits "0") or 0xffffffff (represents a plane with all bits "1"). The ColorIndexMapping is * used to map the color index of each pixel formed by the bits in the bitmap's planes to a direct color value * which is written to the destination RenderInfo. The color mask and all colors within the mapping are words, * triple bytes or longwords respectively similar to the color values used in FillRect(), BlitPattern() or * BlitTemplate(). */ static uae_u32 REGPARAM2 picasso_BlitPlanar2Direct (TrapContext *ctx) { uaecptr bm = m68k_areg (regs, 1); uaecptr ri = m68k_areg (regs, 2); uaecptr cim = m68k_areg (regs, 3); unsigned long srcx = (uae_u16)m68k_dreg (regs, 0); unsigned long srcy = (uae_u16)m68k_dreg (regs, 1); unsigned long dstx = (uae_u16)m68k_dreg (regs, 2); unsigned long dsty = (uae_u16)m68k_dreg (regs, 3); unsigned long width = (uae_u16)m68k_dreg (regs, 4); unsigned long height = (uae_u16)m68k_dreg (regs, 5); uae_u8 minterm = m68k_dreg (regs, 6); uae_u8 Mask = m68k_dreg (regs, 7); struct RenderInfo local_ri; struct BitMap local_bm; struct ColorIndexMapping local_cim; uae_u32 result = 0; if (NOBLITTER) return 0; if (minterm != 0x0C) { write_log (_T("WARNING - BlitPlanar2Direct() has unhandled op-code 0x%x. Using fall-back routine.\n"), minterm); return 0; } if (CopyRenderInfoStructureA2U (ri, &local_ri) && CopyBitMapStructureA2U (bm, &local_bm)) { Mask = 0xFF; CopyColorIndexMappingA2U (cim, &local_cim, GetBytesPerPixel (local_ri.RGBFormat)); P96TRACE((_T("BlitPlanar2Direct(%d, %d, %d, %d, %d, %d) Minterm 0x%x, Mask 0x%x, Depth %d\n"), srcx, srcy, dstx, dsty, width, height, minterm, Mask, local_bm.Depth)); PlanarToDirect (&local_ri, &local_bm, srcx, srcy, dstx, dsty, width, height, Mask, &local_cim); result = 1; } return result; } #include "statusline.h" static void statusline (uae_u8 *dst) { int y, yy, slx, sly; int dst_height, dst_width, pitch; dst_height = picasso96_state.Height; if (dst_height > picasso_vidinfo.height) dst_height = picasso_vidinfo.height; dst_width = picasso96_state.Width; if (dst_width > picasso_vidinfo.width) dst_width = picasso_vidinfo.width; pitch = picasso_vidinfo.rowbytes; statusline_getpos (&slx, &sly, picasso96_state.Width, dst_height); yy = 0; for (y = 0; y < TD_TOTAL_HEIGHT; y++) { uae_u8 *buf = dst + (y + sly) * pitch; draw_status_line_single (buf, picasso_vidinfo.pixbytes, y, dst_width, p96rc, p96gc, p96bc, NULL); yy++; } } static void copyrow (uae_u8 *src, uae_u8 *dst, int x, int y, int width) { uae_u8 *src2 = src + y * picasso96_state.BytesPerRow; uae_u8 *dst2 = dst + y * picasso_vidinfo.rowbytes; int endx = x + width, endx4; int dstpix = picasso_vidinfo.pixbytes; int srcpix = picasso96_state.BytesPerPixel; if (picasso96_state.RGBFormat == host_mode) { memcpy (dst2 + x * dstpix, src2 + x * srcpix, width * dstpix); return; } // native match? //printf("copyrow %d\n", picasso_convert); if (currprefs.gfx_api) { switch (picasso_convert) { #ifdef WORDS_BIGENDIAN case RGBFB_A8R8G8B8_32: case RGBFB_R5G6B5_16: #else case RGBFB_B8G8R8A8_32: case RGBFB_R5G6B5PC_16: #endif memcpy (dst2 + x * dstpix, src2 + x * srcpix, width * dstpix); return; } } else { switch (picasso_convert) { #ifdef WORDS_BIGENDIAN case RGBFB_A8R8G8B8_32: case RGBFB_R5G6B5_16: #else case RGBFB_B8G8R8A8_32: case RGBFB_R5G6B5PC_16: #endif memcpy (dst2 + x * dstpix, src2 + x * srcpix, width * dstpix); return; } } endx4 = endx & ~3; switch (picasso_convert) { /* 24bit->32bit */ case RGBFB_R8G8B8_32: while (x < endx) { ((uae_u32*)dst2)[x] = (src2[x * 3 + 0] << 16) | (src2[x * 3 + 1] << 8) | (src2[x * 3 + 2] << 0); x++; } break; case RGBFB_B8G8R8_32: while (x < endx) { ((uae_u32*)dst2)[x] = ((uae_u32*)(src2 + x * 3))[0] & 0x00ffffff; x++; } break; /* 32bit->32bit */ case RGBFB_R8G8B8A8_32: //printf("a\n"); while (x < endx) { ((uae_u32*)dst2)[x] = (src2[x * 4 + 0] << 16) | (src2[x * 4 + 1] << 8) | (src2[x * 4 + 2] << 0); x++; } break; case RGBFB_A8R8G8B8_32: //printf("b\n"); while (x < endx) { ((uae_u32*)dst2)[x] = (src2[x * 4 + 1] << 16) | (src2[x * 4 + 2] << 8) | (src2[x * 4 + 3] << 0); x++; } break; case RGBFB_A8B8G8R8_32: //printf("c\n"); while (x < endx) { ((uae_u32*)dst2)[x] = ((uae_u32*)src2)[x] >> 8; x++; } break; /* 15/16bit->32bit */ case RGBFB_R5G6B5PC_32: case RGBFB_R5G5B5PC_32: case RGBFB_R5G6B5_32: case RGBFB_R5G5B5_32: case RGBFB_B5G6R5PC_32: case RGBFB_B5G5R5PC_32: { while ((x & 3) && x < endx) { ((uae_u32*)dst2)[x] = p96_rgbx16[((uae_u16*)src2)[x]]; x++; } while (x < endx4) { ((uae_u32*)dst2)[x] = p96_rgbx16[((uae_u16*)src2)[x]]; x++; ((uae_u32*)dst2)[x] = p96_rgbx16[((uae_u16*)src2)[x]]; x++; ((uae_u32*)dst2)[x] = p96_rgbx16[((uae_u16*)src2)[x]]; x++; ((uae_u32*)dst2)[x] = p96_rgbx16[((uae_u16*)src2)[x]]; x++; } while (x < endx) { ((uae_u32*)dst2)[x] = p96_rgbx16[((uae_u16*)src2)[x]]; x++; } } break; /* 16/15bit->16bit */ case RGBFB_R5G5B5PC_16: case RGBFB_R5G6B5_16: case RGBFB_R5G5B5_16: case RGBFB_B5G5R5PC_16: case RGBFB_B5G6R5PC_16: case RGBFB_R5G6B5PC_16: { while ((x & 3) && x < endx) { ((uae_u16*)dst2)[x] = (uae_u16)p96_rgbx16[((uae_u16*)src2)[x]]; x++; } while (x < endx4) { ((uae_u16*)dst2)[x] = (uae_u16)p96_rgbx16[((uae_u16*)src2)[x]]; x++; ((uae_u16*)dst2)[x] = (uae_u16)p96_rgbx16[((uae_u16*)src2)[x]]; x++; ((uae_u16*)dst2)[x] = (uae_u16)p96_rgbx16[((uae_u16*)src2)[x]]; x++; ((uae_u16*)dst2)[x] = (uae_u16)p96_rgbx16[((uae_u16*)src2)[x]]; x++; } while (x < endx) { ((uae_u16*)dst2)[x] = (uae_u16)p96_rgbx16[((uae_u16*)src2)[x]]; x++; } } break; /* 24bit->16bit */ case RGBFB_R8G8B8_16: while (x < endx) { uae_u8 r, g, b; r = src2[x * 3 + 0]; g = src2[x * 3 + 1]; b = src2[x * 3 + 2]; ((uae_u16*)dst2)[x] = p96_rgbx16[(((r >> 3) & 0x1f) << 11) | (((g >> 2) & 0x3f) << 5) | (((b >> 3) & 0x1f) << 0)]; x++; } break; case RGBFB_B8G8R8_16: while (x < endx) { uae_u32 v; v = ((uae_u32*)(&src2[x * 3]))[0] >> 8; ((uae_u16*)dst2)[x] = p96_rgbx16[(((v >> (8 + 3)) & 0x1f) << 11) | (((v >> (0 + 2)) & 0x3f) << 5) | (((v >> (16 + 3)) & 0x1f) << 0)]; x++; } break; /* 32bit->16bit */ case RGBFB_R8G8B8A8_16: while (x < endx) { uae_u32 v; v = ((uae_u32*)src2)[x]; ((uae_u16*)dst2)[x] = p96_rgbx16[(((v >> (0 + 3)) & 0x1f) << 11) | (((v >> (8 + 2)) & 0x3f) << 5) | (((v >> (16 + 3)) & 0x1f) << 0)]; x++; } break; case RGBFB_A8R8G8B8_16: while (x < endx) { uae_u32 v; v = ((uae_u32*)src2)[x]; ((uae_u16*)dst2)[x] = p96_rgbx16[(((v >> (8 + 3)) & 0x1f) << 11) | (((v >> (16 + 2)) & 0x3f) << 5) | (((v >> (24 + 3)) & 0x1f) << 0)]; x++; } break; case RGBFB_A8B8G8R8_16: while (x < endx) { uae_u32 v; v = ((uae_u32*)src2)[x]; ((uae_u16*)dst2)[x] = p96_rgbx16[(((v >> (24 + 3)) & 0x1f) << 11) | (((v >> (16 + 2)) & 0x3f) << 5) | (((v >> (8 + 3)) & 0x1f) << 0)]; x++; } break; case RGBFB_B8G8R8A8_16: while (x < endx) { uae_u32 v; v = ((uae_u32*)src2)[x]; ((uae_u16*)dst2)[x] = p96_rgbx16[(((v >> (16 + 3)) & 0x1f) << 11) | (((v >> (8 + 2)) & 0x3f) << 5) | (((v >> (0 + 3)) & 0x1f) << 0)]; x++; } break; /* 8bit->32bit */ case RGBFB_CLUT_RGBFB_32: { while ((x & 3) && x < endx) { ((uae_u32*)dst2)[x] = picasso_vidinfo.clut[src2[x]]; x++; } while (x < endx4) { ((uae_u32*)dst2)[x] = picasso_vidinfo.clut[src2[x]]; x++; ((uae_u32*)dst2)[x] = picasso_vidinfo.clut[src2[x]]; x++; ((uae_u32*)dst2)[x] = picasso_vidinfo.clut[src2[x]]; x++; ((uae_u32*)dst2)[x] = picasso_vidinfo.clut[src2[x]]; x++; } while (x < endx) { ((uae_u32*)dst2)[x] = picasso_vidinfo.clut[src2[x]]; x++; } } break; /* 8bit->16bit */ case RGBFB_CLUT_RGBFB_16: { while ((x & 3) && x < endx) { ((uae_u16*)dst2)[x] = picasso_vidinfo.clut[src2[x]]; x++; } while (x < endx4) { ((uae_u16*)dst2)[x] = picasso_vidinfo.clut[src2[x]]; x++; ((uae_u16*)dst2)[x] = picasso_vidinfo.clut[src2[x]]; x++; ((uae_u16*)dst2)[x] = picasso_vidinfo.clut[src2[x]]; x++; ((uae_u16*)dst2)[x] = picasso_vidinfo.clut[src2[x]]; x++; } while (x < endx) { ((uae_u16*)dst2)[x] = picasso_vidinfo.clut[src2[x]]; x++; } } break; } } static void copyallinvert (uae_u8 *src, uae_u8 *dst, int pwidth, int pheight) { int x, y, w; w = pwidth * picasso_vidinfo.pixbytes; if (picasso96_state.RGBFormat == host_mode) { for (y = 0; y < pheight; y++) { for (x = 0; x < w; x++) dst[x] = src[x] ^ 0xff; dst += picasso_vidinfo.rowbytes; src += picasso96_state.BytesPerRow; } } else { uae_u8 *src2 = src; for (y = 0; y < pheight; y++) { for (x = 0; x < w; x++) src2[x] ^= 0xff; copyrow (src, dst, 0, y, pwidth); for (x = 0; x < w; x++) src2[x] ^= 0xff; src2 += picasso96_state.BytesPerRow; } } } static void copyall (uae_u8 *src, uae_u8 *dst, int pwidth, int pheight) { int y; picasso_vidinfo.rowbytes = pwidth * g_amiga_video_bpp; if (picasso96_state.RGBFormat == host_mode) { //printf("fastcopy\n"); int w = pwidth * picasso_vidinfo.pixbytes; for (y = 0; y < pheight; y++) { memcpy (dst, src, w); dst += picasso_vidinfo.rowbytes; src += picasso96_state.BytesPerRow; } } else { //printf("slowcopy\n"); for (y = 0; y < pheight; y++) copyrow (src, dst, 0, y, pwidth); } // (picasso96_state.RGBFormat: 9 = RGBFB_B8G8R8A8) // printf("%d - %d\n", picasso96_state.RGBFormat, host_mode); } // FIXME: #ifndef NATMEM_OFFSET uae_u8 *natmem_offset = NULL; #endif static bool flushpixels (void) { int i; #ifdef NATMEM_OFFSET uae_u8 *src = p96ram_start + natmem_offset; //printf("flushpixels, natmem_offset = %p, p96ram_start = %d\n", natmem_offset, p96ram_start); #else uae_u8 *src = gfxmemory; #endif int off = picasso96_state.XYOffset - gfxmem_start; uae_u8 *src_start; uae_u8 *src_end; int lock = 0; uae_u8 *dst = NULL; uintptr_t gwwcnt; int pwidth = picasso96_state.Width > picasso96_state.VirtualWidth ? picasso96_state.VirtualWidth : picasso96_state.Width; int pheight = picasso96_state.Height > picasso96_state.VirtualHeight ? picasso96_state.VirtualHeight : picasso96_state.Height; int maxy = -1; int miny = pheight - 1; picasso_vidinfo.extra_mem = 1; //picasso_vidinfo.width = 640; //picasso_vidinfo.height = 400; src_start = src + (off & ~gwwpagemask); src_end = src + ((off + picasso96_state.BytesPerRow * pheight + gwwpagesize - 1) & ~gwwpagemask); #if 0 write_log (_T("%dx%d %dx%d %dx%d (%dx%d)\n"), picasso96_state.Width, picasso96_state.Width, picasso96_state.VirtualWidth, picasso96_state.VirtualHeight, picasso_vidinfo.width, picasso_vidinfo.height, pwidth, pheight); #endif if (!picasso_vidinfo.extra_mem || !gwwbuf || src_start >= src_end) { printf("%d %d %d returning\n", picasso_vidinfo.extra_mem, gwwbuf, src_start >= src_end); return false; } if (flashscreen) { full_refresh = 1; } if (full_refresh || rtg_clear_flag) full_refresh = -1; for (;;) { bool dofull; gwwcnt = 0; if (doskip () && p96skipmode == 1) { printf("breaking\n"); break; } if (full_refresh < 0) { gwwcnt = (src_end - src_start) / gwwpagesize + 1; full_refresh = 1; for (i = 0; i < gwwcnt; i++) gwwbuf[i] = src_start + i * gwwpagesize; } else { ULONG ps; gwwcnt = gwwbufsize; //printf("FIXME: not calling if (mman_GetWriteWatch (src_start, src_end - src_start, gwwbuf, &gwwcnt, &ps))\n"); #if 0 if (mman_GetWriteWatch (src_start, src_end - src_start, gwwbuf, &gwwcnt, &ps)) break; #endif } if (gwwcnt == 0) break; dofull = gwwcnt >= ((src_end - src_start) / gwwpagesize) * 80 / 100; dst = gfx_lock_picasso (dofull, rtg_clear_flag != 0); if (rtg_clear_flag) rtg_clear_flag--; if (dst == NULL) break; lock = 1; dst += picasso_vidinfo.offset; if (doskip () && p96skipmode == 2) { printf("breaking (2)\n"); break; } if (dofull) { //printf("doing full off=%d, src + off %p dst %p, w %d h %d\n", off, // src + off, dst, pwidth, pheight); if (flashscreen != 0) copyallinvert (src + off, dst, pwidth, pheight); else copyall (src + off, dst, pwidth, pheight); miny = 0; maxy = pheight; break; } for (i = 0; i < gwwcnt; i++) { uae_u8 *p = (uae_u8*)gwwbuf[i]; if (p >= src_start && p < src_end) { int y, x, realoffset; if (p >= src + off) { realoffset = p - (src + off); } else { realoffset = 0; } y = realoffset / picasso96_state.BytesPerRow; if (y < pheight) { int w = gwwpagesize / picasso96_state.BytesPerPixel; x = (realoffset % picasso96_state.BytesPerRow) / picasso96_state.BytesPerPixel; if (x < pwidth) copyrow (src + off, dst, x, y, pwidth - x); w = (gwwpagesize - (picasso96_state.BytesPerRow - x * picasso96_state.BytesPerPixel)) / picasso96_state.BytesPerPixel; if (y < miny) miny = y; y++; while (y < pheight && w > 0) { int maxw = w > pwidth ? pwidth : w; copyrow (src + off, dst, 0, y, maxw); w -= maxw; y++; } if (y > maxy) maxy = y; } } } break; } if (currprefs.leds_on_screen & STATUSLINE_RTG) { if (dst == NULL) { dst = gfx_lock_picasso (false, false); if (dst) lock = 1; } if (dst) { statusline (dst); maxy = picasso_vidinfo.height; if (miny > picasso_vidinfo.height - TD_TOTAL_HEIGHT) miny = picasso_vidinfo.height - TD_TOTAL_HEIGHT; } } if (maxy >= 0) { if (doskip () && p96skipmode == 4) { ; } else { #if 0 DX_Invalidate (0, miny, pwidth, maxy - miny); #endif //printf("FIXME: invalidate %d %d %d\n", 0, miny, pwidth, maxy - miny); } } if (lock) gfx_unlock_picasso (true); if (dst && gwwcnt) { if (doskip () && p96skipmode == 3) { ; } else { //printf("FIXME: not calling mman_ResetWatch (src_start, src_end - src_start);\n"); #if 0 mman_ResetWatch (src_start, src_end - src_start); #endif } full_refresh = 0; } return lock != 0; } static uae_u32 REGPARAM2 gfxmem_lgetx (uaecptr addr) { uae_u32 *m; addr -= gfxmem_start & gfxmem_mask; addr &= gfxmem_mask; m = (uae_u32 *)(gfxmemory + addr); return do_get_mem_long (m); } static uae_u32 REGPARAM2 gfxmem_wgetx (uaecptr addr) { uae_u16 *m; addr -= gfxmem_start & gfxmem_mask; addr &= gfxmem_mask; m = (uae_u16 *)(gfxmemory + addr); return do_get_mem_word (m); } static uae_u32 REGPARAM2 gfxmem_bgetx (uaecptr addr) { addr -= gfxmem_start & gfxmem_mask; addr &= gfxmem_mask; return gfxmemory[addr]; } static void REGPARAM2 gfxmem_lputx (uaecptr addr, uae_u32 l) { uae_u32 *m; addr -= gfxmem_start & gfxmem_mask; addr &= gfxmem_mask; m = (uae_u32 *)(gfxmemory + addr); do_put_mem_long (m, l); } static void REGPARAM2 gfxmem_wputx (uaecptr addr, uae_u32 w) { uae_u16 *m; addr -= gfxmem_start & gfxmem_mask; addr &= gfxmem_mask; m = (uae_u16 *)(gfxmemory + addr); do_put_mem_word (m, (uae_u16)w); } static void REGPARAM2 gfxmem_bputx (uaecptr addr, uae_u32 b) { addr -= gfxmem_start & gfxmem_mask; addr &= gfxmem_mask; gfxmemory[addr] = b; } static int REGPARAM2 gfxmem_check (uaecptr addr, uae_u32 size) { addr -= gfxmem_start & gfxmem_mask; addr &= gfxmem_mask; return (addr + size) < allocated_gfxmem; } static uae_u8 *REGPARAM2 gfxmem_xlate (uaecptr addr) { addr -= gfxmem_start & gfxmem_mask; addr &= gfxmem_mask; return gfxmemory + addr; } addrbank gfxmem_bank = { gfxmem_lgetx, gfxmem_wgetx, gfxmem_bgetx, gfxmem_lputx, gfxmem_wputx, gfxmem_bputx, gfxmem_xlate, gfxmem_check, NULL, _T("RTG RAM"), dummy_lgeti, dummy_wgeti, ABFLAG_RAM }; /* Call this function first, near the beginning of code flow * Place in InitGraphics() which seems reasonable... * Also put it in reset_drawing() for safe-keeping. */ void InitPicasso96 (void) { int i; //fastscreen oldscr = 0; //fastscreen memset (&picasso96_state, 0, sizeof (struct picasso96_state_struct)); for (i = 0; i < 256; i++) { p2ctab[i][0] = (((i & 128) ? 0x01000000 : 0) | ((i & 64) ? 0x010000 : 0) | ((i & 32) ? 0x0100 : 0) | ((i & 16) ? 0x01 : 0)); p2ctab[i][1] = (((i & 8) ? 0x01000000 : 0) | ((i & 4) ? 0x010000 : 0) | ((i & 2) ? 0x0100 : 0) | ((i & 1) ? 0x01 : 0)); } picasso_vidinfo.pixbytes = g_amiga_video_bpp; } #endif static uae_u32 REGPARAM2 picasso_SetInterrupt (TrapContext *ctx) { uaecptr bi = m68k_areg (regs, 0); uae_u32 onoff = m68k_dreg (regs, 0); interrupt_enabled = onoff; //write_log (_T("Picasso_SetInterrupt(%08x,%d)\n"), bi, onoff); return onoff; } static uaecptr uaegfx_vblankname, uaegfx_portsname; static void initvblankABI (uaecptr base, uaecptr ABI) { for (int i = 0; i < 22; i++) put_byte (ABI + PSSO_BoardInfo_HardInterrupt + i, get_byte (base + CARD_PORTSIRQ + i)); ABI_interrupt = ABI; } static void initvblankirq (TrapContext *ctx, uaecptr base) { uaecptr p1 = base + CARD_VBLANKIRQ; uaecptr p2 = base + CARD_PORTSIRQ; uaecptr c = base + CARD_IRQCODE; put_word (p1 + 8, 0x0205); put_long (p1 + 10, uaegfx_vblankname); put_long (p1 + 14, base + CARD_IRQFLAG); put_long (p1 + 18, c); put_word (p2 + 8, 0x0205); put_long (p2 + 10, uaegfx_portsname); put_long (p2 + 14, base + CARD_IRQFLAG); put_long (p2 + 18, c); put_word (c, 0x4a11); c += 2; // tst.b (a1) put_word (c, 0x670e); c += 2; // beq.s label put_word (c, 0x4211); c += 2; // clr.b (a1) put_long (c, 0x22690004); c += 4; // move.l 4(a1),a1 put_long (c, 0x2c780004); c += 4; // move.l 4.w,a6 put_long (c, 0x4eaeff4c); c += 4; // jsr Cause(a6) put_word (c, 0x7000); c += 2; // label: moveq #0,d0 put_word (c, RTS); // rts m68k_areg (regs, 1) = p1; m68k_dreg (regs, 0) = 5; /* VERTB */ CallLib (ctx, get_long (4), -168); /* AddIntServer */ m68k_areg (regs, 1) = p2; m68k_dreg (regs, 0) = 3; /* PORTS */ CallLib (ctx, get_long (4), -168); /* AddIntServer */ } static uae_u32 REGPARAM2 picasso_SetClock(TrapContext *ctx) { uaecptr bi = m68k_areg (regs, 0); P96TRACE((_T("SetClock\n"))); return 0; } static uae_u32 REGPARAM2 picasso_SetMemoryMode(TrapContext *ctx) { uaecptr bi = m68k_areg (regs, 0); uae_u32 rgbformat = m68k_dreg (regs, 7); P96TRACE((_T("SetMemoryMode\n"))); return 0; } #define PUTABI(func) \ if (ABI) \ put_long (ABI + func, here ()); #define RTGCALL(func,funcdef,call) \ PUTABI (func); \ dl (0x48e78000); \ calltrap (deftrap (call)); \ dw (0x4a80); \ dl (0x4cdf0001);\ dw (0x6604); \ dw (0x2f28); \ dw (funcdef); \ dw (RTS); #define RTGCALL2(func,call) \ PUTABI (func); \ calltrap (deftrap (call)); \ dw (RTS); #define RTGCALLDEFAULT(func,funcdef) \ PUTABI (func); \ dw (0x2f28); \ dw (funcdef); \ dw (RTS); #define RTGNONE(func) \ if (ABI) \ put_long (ABI + func, start); static void inituaegfxfuncs (uaecptr start, uaecptr ABI) { uaecptr old = here (); uaecptr ptr; if (uaegfx_old) return; org (start); dw (RTS); /* ResolvePixelClock move.l D0,gmi_PixelClock(a1) ; pass the pixelclock through moveq #0,D0 ; index is 0 move.b #98,gmi_Numerator(a1) ; whatever move.b #14,gmi_Denominator(a1) ; whatever rts */ PUTABI (PSSO_BoardInfo_ResolvePixelClock); dl (0x2340002c); dw (0x7000); dl (0x137c0062); dw (0x002a); dl (0x137c000e); dw (0x002b); dw (RTS); /* GetPixelClock move.l #CLOCK,D0 ; fill in D0 with our one true pixel clock rts */ PUTABI (PSSO_BoardInfo_GetPixelClock); dw (0x203c); dl (100227260); dw (RTS); /* CalculateMemory ; this is simple, because we're not supporting planar modes in UAE move.l a1,d0 rts */ PUTABI (PSSO_BoardInfo_CalculateMemory); dw (0x2009); dw (RTS); /* GetCompatibleFormats ; all formats can coexist without any problems, since we don't support planar stuff in UAE move.l #RGBMASK_8BIT | RGBMASK_15BIT | RGBMASK_16BIT | RGBMASK_24BIT | RGBMASK_32BIT,d0 rts */ PUTABI (PSSO_BoardInfo_GetCompatibleFormats); dw (0x203c); dl (RGBMASK_8BIT | RGBMASK_15BIT | RGBMASK_16BIT | RGBMASK_24BIT | RGBMASK_32BIT); dw (RTS); /* CalculateBytesPerRow (optimized) */ PUTABI (PSSO_BoardInfo_CalculateBytesPerRow); dl (0x0c400140); // cmp.w #320,d0 dw (0x6504); // bcs.s .l1 calltrap (deftrap (picasso_CalculateBytesPerRow)); dw (RTS); dw (0x0c87); dl (0x00000010); // l1: cmp.l #$10,d7 dw (0x640a); // bcc.s .l2 dw (0x7200); // moveq #0,d1 dl (0x123b7010); // move.b table(pc,d7.w),d1 dw (0x6b04); // bmi.s l3 dw (0xe368); // lsl.w d1,d0 dw (RTS); // .l2 dw (0x3200); // .l3 move.w d0,d1 dw (0xd041); // add.w d1,d0 dw (0xd041); // add.w d1,d0 dw (RTS); dl (0x0000ffff); // table dl (0x01010202); dl (0x02020101); dl (0x01010100); //RTGCALL2(PSSO_BoardInfo_SetClock, picasso_SetClock); //RTGCALL2(PSSO_BoardInfo_SetMemoryMode, picasso_SetMemoryMode); RTGNONE(PSSO_BoardInfo_SetClock); RTGNONE(PSSO_BoardInfo_SetMemoryMode); RTGNONE(PSSO_BoardInfo_SetWriteMask); RTGNONE(PSSO_BoardInfo_SetClearMask); RTGNONE(PSSO_BoardInfo_SetReadPlane); #if 1 RTGNONE(PSSO_BoardInfo_WaitVerticalSync); #else PUTABI (PSSO_BoardInfo_WaitVerticalSync); dl (0x48e7203e); // movem.l d2/a5/a6,-(sp) dl (0x2c68003c); dw (0x93c9); dl (0x4eaefeda); dw (0x2440); dw (0x70ff); dl (0x4eaefeb6); dw (0x7400); dw (0x1400); dw (0x6b40); dw (0x49f9); dl (uaegfx_base + CARD_VSYNCLIST); dw (0x47f9); dl (uaegfx_base + CARD_VSYNCLIST + CARD_VSYNCMAX * 8); dl (0x4eaeff88); dw (0xb9cb); dw (0x6606); dl (0x4eaeff82); dw (0x601c); dw (0x4a94); dw (0x6704); dw (0x508c); dw (0x60ee); dw (0x288a); dl (0x29420004); dl (0x4eaeff82); dw (0x7000); dw (0x05c0); dl (0x4eaefec2); dw (0x4294); dw (0x7000); dw (0x1002); dw (0x6b04); dl (0x4eaefeb0); dl (0x4cdf7c04); dw (RTS); #endif RTGNONE(PSSO_BoardInfo_WaitBlitter); #if 0 RTGCALL2(PSSO_BoardInfo_, picasso_); RTGCALL(PSSO_BoardInfo_, PSSO_BoardInfo_Default, picasso_); RTGCALLDEFAULT(PSSO_BoardInfo_, PSSO_BoardInfo_Default); #endif RTGCALL(PSSO_BoardInfo_BlitPlanar2Direct, PSSO_BoardInfo_BlitPlanar2DirectDefault, picasso_BlitPlanar2Direct); RTGCALL(PSSO_BoardInfo_FillRect, PSSO_BoardInfo_FillRectDefault, picasso_FillRect); RTGCALL(PSSO_BoardInfo_BlitRect, PSSO_BoardInfo_BlitRectDefault, picasso_BlitRect); RTGCALL(PSSO_BoardInfo_BlitPlanar2Chunky, PSSO_BoardInfo_BlitPlanar2ChunkyDefault, picasso_BlitPlanar2Chunky); RTGCALL(PSSO_BoardInfo_BlitTemplate, PSSO_BoardInfo_BlitTemplateDefault, picasso_BlitTemplate); RTGCALL(PSSO_BoardInfo_InvertRect, PSSO_BoardInfo_InvertRectDefault, picasso_InvertRect); RTGCALL(PSSO_BoardInfo_BlitRectNoMaskComplete, PSSO_BoardInfo_BlitRectNoMaskCompleteDefault, picasso_BlitRectNoMaskComplete); RTGCALL(PSSO_BoardInfo_BlitPattern, PSSO_BoardInfo_BlitPatternDefault, picasso_BlitPattern); RTGCALL2(PSSO_BoardInfo_SetSwitch, picasso_SetSwitch); RTGCALL2(PSSO_BoardInfo_SetColorArray, picasso_SetColorArray); RTGCALL2(PSSO_BoardInfo_SetDAC, picasso_SetDAC); RTGCALL2(PSSO_BoardInfo_SetGC, picasso_SetGC); RTGCALL2(PSSO_BoardInfo_SetPanning, picasso_SetPanning); RTGCALL2(PSSO_BoardInfo_SetDisplay, picasso_SetDisplay); RTGCALL2(PSSO_BoardInfo_SetSprite, picasso_SetSprite); RTGCALL2(PSSO_BoardInfo_SetSpritePosition, picasso_SetSpritePosition); RTGCALL2(PSSO_BoardInfo_SetSpriteImage, picasso_SetSpriteImage); RTGCALL2(PSSO_BoardInfo_SetSpriteColor, picasso_SetSpriteColor); RTGCALLDEFAULT(PSSO_BoardInfo_ScrollPlanar, PSSO_BoardInfo_ScrollPlanarDefault); RTGCALLDEFAULT(PSSO_BoardInfo_UpdatePlanar, PSSO_BoardInfo_UpdatePlanarDefault); RTGCALLDEFAULT(PSSO_BoardInfo_DrawLine, PSSO_BoardInfo_DrawLineDefault); RTGCALL2(PSSO_BoardInfo_SetInterrupt, picasso_SetInterrupt); write_log (_T("uaegfx.card magic code: %08X-%08X ABI=%08X\n"), start, here (), ABI); //if (ABI && currprefs.rtg_hardwareinterrupt) { if (ABI && currprefs.win32_rtgvblankrate >= -1) { printf("initvblankABI ...%d\n", ABI); initvblankABI (uaegfx_base, ABI); } } void picasso_reset (void) { if (savestate_state != STATE_RESTORE) { uaegfx_base = 0; uaegfx_old = 0; uaegfx_active = 0; interrupt_enabled = 0; reserved_gfxmem = 0; resetpalette (); InitPicasso96 (); } } void uaegfx_install_code (uaecptr start) { uaegfx_rom = start; org (start); inituaegfxfuncs (start, 0); } #define UAEGFX_VERSION 3 #define UAEGFX_REVISION 3 static uae_u32 REGPARAM2 gfx_open (TrapContext *context) { put_word (uaegfx_base + 32, get_word (uaegfx_base + 32) + 1); return uaegfx_base; } static uae_u32 REGPARAM2 gfx_close (TrapContext *context) { put_word (uaegfx_base + 32, get_word (uaegfx_base + 32) - 1); return 0; } static uae_u32 REGPARAM2 gfx_expunge (TrapContext *context) { return 0; } static uaecptr uaegfx_card_install (TrapContext *ctx, uae_u32 extrasize) { uae_u32 functable, datatable, a2; uaecptr openfunc, closefunc, expungefunc; uaecptr findcardfunc, initcardfunc; uaecptr exec = get_long (4); if (uaegfx_old || !gfxmem_start) return NULL; uaegfx_resid = ds (_T("UAE Graphics Card 3.3")); uaegfx_vblankname = ds (_T("UAE Graphics Card VBLANK")); uaegfx_portsname = ds (_T("UAE Graphics Card PORTS")); /* Open */ openfunc = here (); calltrap (deftrap (gfx_open)); dw (RTS); /* Close */ closefunc = here (); calltrap (deftrap (gfx_close)); dw (RTS); /* Expunge */ expungefunc = here (); calltrap (deftrap (gfx_expunge)); dw (RTS); /* FindCard */ findcardfunc = here (); calltrap (deftrap (picasso_FindCard)); dw (RTS); /* InitCard */ initcardfunc = here (); calltrap (deftrap (picasso_InitCard)); dw (RTS); functable = here (); dl (openfunc); dl (closefunc); dl (expungefunc); dl (EXPANSION_nullfunc); dl (findcardfunc); dl (initcardfunc); dl (0xFFFFFFFF); /* end of table */ datatable = makedatatable (uaegfx_resid, uaegfx_resname, 0x09, -50, UAEGFX_VERSION, UAEGFX_REVISION); a2 = m68k_areg (regs, 2); m68k_areg (regs, 0) = functable; m68k_areg (regs, 1) = datatable; m68k_areg (regs, 2) = 0; m68k_dreg (regs, 0) = CARD_SIZEOF + extrasize; m68k_dreg (regs, 1) = 0; uaegfx_base = CallLib (ctx, exec, -0x54); /* MakeLibrary */ m68k_areg (regs, 2) = a2; if (!uaegfx_base) return 0; m68k_areg (regs, 1) = uaegfx_base; CallLib (ctx, exec, -0x18c); /* AddLibrary */ m68k_areg (regs, 1) = EXPANSION_explibname; m68k_dreg (regs, 0) = 0; put_long (uaegfx_base + CARD_EXPANSIONBASE, CallLib (ctx, exec, -0x228)); /* OpenLibrary */ put_long (uaegfx_base + CARD_EXECBASE, exec); put_long (uaegfx_base + CARD_NAME, uaegfx_resname); put_long (uaegfx_base + CARD_RESLIST, uaegfx_base + CARD_SIZEOF); put_long (uaegfx_base + CARD_RESLISTSIZE, extrasize); //changed_prefs.win32_rtgvblankrate = 50; //currprefs.win32_rtgvblankrate = 50; //printf("%d\n", currprefs.win32_rtgvblankrate); if (currprefs.win32_rtgvblankrate >= -1) initvblankirq (ctx, uaegfx_base); write_log (_T("uaegfx.card %d.%d init @%08X\n"), UAEGFX_VERSION, UAEGFX_REVISION, uaegfx_base); uaegfx_active = 1; return uaegfx_base; } uae_u32 picasso_demux (uae_u32 arg, TrapContext *ctx) { uae_u32 num = get_long (m68k_areg (regs, 7) + 4); if (uaegfx_base) { if (num >= 16 && num <= 39) { write_log (_T("uaelib: obsolete Picasso96 uaelib hook called, call ignored\n")); return 0; } } if (!uaegfx_old) { write_log (_T("uaelib: uaelib hook in use\n")); uaegfx_old = 1; uaegfx_active = 1; } switch (num) { case 16: return picasso_FindCard (ctx); case 17: return picasso_FillRect (ctx); case 18: return picasso_SetSwitch (ctx); case 19: return picasso_SetColorArray (ctx); case 20: return picasso_SetDAC (ctx); case 21: return picasso_SetGC (ctx); case 22: return picasso_SetPanning (ctx); case 23: return picasso_CalculateBytesPerRow (ctx); case 24: return picasso_BlitPlanar2Chunky (ctx); case 25: return picasso_BlitRect (ctx); case 26: return picasso_SetDisplay (ctx); case 27: return picasso_BlitTemplate (ctx); case 28: return picasso_BlitRectNoMaskComplete (ctx); case 29: return picasso_InitCard (ctx); case 30: return picasso_BlitPattern (ctx); case 31: return picasso_InvertRect (ctx); case 32: return picasso_BlitPlanar2Direct (ctx); //case 34: return picasso_WaitVerticalSync (ctx); case 35: return allocated_gfxmem ? 1 : 0; case 36: return picasso_SetSprite (ctx); case 37: return picasso_SetSpritePosition (ctx); case 38: return picasso_SetSpriteImage (ctx); case 39: return picasso_SetSpriteColor (ctx); } return 0; } void restore_p96_finish (void) { init_alloc (NULL, 0); if (uaegfx_rom && boardinfo) inituaegfxfuncs (uaegfx_rom, boardinfo); if (set_gc_called) { init_picasso_screen (); init_hz_p96 (); } } uae_u8 *restore_p96 (uae_u8 *src) { uae_u32 flags; int i; if (restore_u32 () != 2) return src; InitPicasso96 (); flags = restore_u32 (); picasso_requested_on = !!(flags & 1); hwsprite = !!(flags & 8); cursorvisible = !!(flags & 16); picasso96_state.SwitchState = picasso_requested_on; picasso_on = 0; init_picasso_screen_called = 0; set_gc_called = !!(flags & 2); set_panning_called = !!(flags & 4); interrupt_enabled = !!(flags & 32); changed_prefs.rtgmem_size = restore_u32 (); picasso96_state.Address = restore_u32 (); picasso96_state.RGBFormat = (RGBFTYPE)restore_u32 (); picasso96_state.Width = restore_u16 (); picasso96_state.Height = restore_u16 (); picasso96_state.VirtualWidth = restore_u16 (); picasso96_state.VirtualHeight = restore_u16 (); picasso96_state.XOffset = restore_u16 (); picasso96_state.YOffset = restore_u16 (); picasso96_state.GC_Depth = restore_u8 (); picasso96_state.GC_Flags = restore_u8 (); picasso96_state.BytesPerRow = restore_u16 (); picasso96_state.BytesPerPixel = restore_u8 (); uaegfx_base = restore_u32 (); uaegfx_rom = restore_u32 (); boardinfo = restore_u32 (); for (i = 0; i < 4; i++) cursorrgb[i] = restore_u32 (); if (flags & 64) { for (i = 0; i < 256; i++) { picasso96_state.CLUT[i].Red = restore_u8 (); picasso96_state.CLUT[i].Green = restore_u8 (); picasso96_state.CLUT[i].Blue = restore_u8 (); } } picasso96_state.HostAddress = NULL; picasso_SetPanningInit(); picasso96_state.Extent = picasso96_state.Address + picasso96_state.BytesPerRow * picasso96_state.VirtualHeight; return src; } uae_u8 *save_p96 (int *len, uae_u8 *dstptr) { uae_u8 *dstbak, *dst; int i; if (currprefs.rtgmem_size == 0) return NULL; if (dstptr) dstbak = dst = dstptr; else dstbak = dst = xmalloc (uae_u8, 1000); save_u32 (2); save_u32 ((picasso_on ? 1 : 0) | (set_gc_called ? 2 : 0) | (set_panning_called ? 4 : 0) | (hwsprite ? 8 : 0) | (cursorvisible ? 16 : 0) | (interrupt_enabled ? 32 : 0) | 64); save_u32 (currprefs.rtgmem_size); save_u32 (picasso96_state.Address); save_u32 (picasso96_state.RGBFormat); save_u16 (picasso96_state.Width); save_u16 (picasso96_state.Height); save_u16 (picasso96_state.VirtualWidth); save_u16 (picasso96_state.VirtualHeight); save_u16 (picasso96_state.XOffset); save_u16 (picasso96_state.YOffset); save_u8 (picasso96_state.GC_Depth); save_u8 (picasso96_state.GC_Flags); save_u16 (picasso96_state.BytesPerRow); save_u8 (picasso96_state.BytesPerPixel); save_u32 (uaegfx_base); save_u32 (uaegfx_rom); save_u32 (boardinfo); for (i = 0; i < 4; i++) save_u32 (cursorrgb[i]); for (i = 0; i < 256; i++) { save_u8 (picasso96_state.CLUT[i].Red); save_u8 (picasso96_state.CLUT[i].Green); save_u8 (picasso96_state.CLUT[i].Blue); } *len = dst - dstbak; return dstbak; } #endif fs-uae-2.2.3+dfsg/src/od-fs/cda_play.cpp0000644000175000017500000000646212162366655020144 0ustar glaubitzglaubitz#include "sysconfig.h" #include "sysdeps.h" #include "cda_play.h" #include "libamiga_internal.h" static int (*g_audio_callback)(int type, int16_t *buffer, int size) = NULL; int amiga_set_cd_audio_callback(audio_callback func) { g_audio_callback = func; return 1; } cda_audio::~cda_audio() { write_log("cda_audio::~cda_audio()\n"); wait(0); wait(1); #if 0 write_log("waiting for cdda thread\n"); mStopThread = 1; uae_wait_thread(mThread); write_log("done waiting for cdda thread\n"); #endif for (int i = 0; i < 2; i++) { xfree (buffers[i]); buffers[i] = NULL; } } #if 0 #define BYTES_PER_SEC (44100 * 2 * 2) static void *audio_thread(void *cda_pointer) { cda_audio *cda = (cda_audio *) cda_pointer; int bufnum = 0; while (!cda->mStopThread) { if (g_amiga_paused) { Sleep(10); continue; } if (cda->mBufferDone[bufnum]) { // waiting for buffer to become ready to play Sleep(1); continue; } uae_s16 *p = (uae_s16*)(cda->buffers[bufnum]); if (g_audio_callback) { for (int i = 0; i < cda->num_sectors; i++) { g_audio_callback(3, p, 2352); p += (2352 / 2); // FIXME: use a clock here as well, to time the sleeps // better.. Sleep(1000 * 2352.0 / BYTES_PER_SEC); } } cda->mBufferDone[bufnum] = 1; bufnum = !bufnum; } write_log("end of cdda thread\n"); return NULL; } #endif cda_audio::cda_audio(int num_sectors) { write_log("cda_audio::cda_audio(num_sectors=%d)\n", num_sectors); #if 0 mStopThread = 0; mBufferDone[0] = 1; mBufferDone[1] = 1; uae_start_thread("cdda", audio_thread, this, &mThread); #endif active = false; playing = false; volume[0] = volume[1] = 0; bufsize = num_sectors * 2352; for (int i = 0; i < 2; i++) { buffer_ids[i] = 0; buffers[i] = xcalloc (uae_u8, num_sectors * 4096); } this->num_sectors = num_sectors; active = true; playing = true; } void cda_audio::setvolume(int master, int left, int right) { for (int j = 0; j < 2; j++) { volume[j] = j == 0 ? left : right; volume[j] = (100 - master) * volume[j] / 100; if (volume[j]) volume[j]++; if (volume[j] >= 32768) volume[j] = 32768; } } bool cda_audio::play(int bufnum) { if (!active) { return false; } uae_s16 *p = (uae_s16*)(buffers[bufnum]); for (int i = 0; i < num_sectors * 2352 / 4; i++) { p[i * 2 + 0] = p[i * 2 + 0] * volume[0] / 32768; p[i * 2 + 1] = p[i * 2 + 1] * volume[1] / 32768; } if (g_audio_callback) { buffer_ids[bufnum] = g_audio_callback(3, p, num_sectors * 2352); } else { buffer_ids[bufnum] = 0; } #if 0 mBufferDone[bufnum] = 0; #endif return true; } void cda_audio::wait(int bufnum) { if (!active || !playing) { return; } if (buffer_ids[bufnum] == 0) { return; } // calling g_audio_callback with NULL parameter to check status while (!g_audio_callback(3, NULL, buffer_ids[bufnum])) { Sleep (10); } #if 0 while (!mBufferDone[bufnum]) { Sleep (10); } #endif } fs-uae-2.2.3+dfsg/src/od-fs/util.cpp0000644000175000017500000000033412162366654017334 0ustar glaubitzglaubitz#include "sysconfig.h" #include "sysdeps.h" //#include "../writelog.cpp" /* uae_u8 *mapped_malloc (size_t s, TCHAR *file) { return xmalloc (uae_u8, s); } void mapped_free (uae_u8 *p) { xfree (p); } */ fs-uae-2.2.3+dfsg/src/od-fs/input.cpp0000644000175000017500000003614512162366654017527 0ustar glaubitzglaubitz#include "sysconfig.h" #include "sysdeps.h" #include "options.h" #include "inputdevice.h" #if 0 int sdl_key_to_dik (int keycode); #endif //static void disk_swap(int drive, int entry) { // amiga_floppy_set_frm //} int tablet_log = 0; static int g_joystick_port_autofire[4]; void amiga_set_joystick_port_autofire(int port, int autofire) { if (port < 0 || port > 3) { return; } g_joystick_port_autofire[port] = (autofire > 0); } static int handle_custom_action(int action, int state) { write_log("handle_custom_action %d\n", action); if (action >= INPUTEVENT_SPC_DISKSWAPPER_0_0 && action <= INPUTEVENT_SPC_DISKSWAPPER_3_19) { int offset = action - INPUTEVENT_SPC_DISKSWAPPER_0_0; int drive = offset / AMIGA_FLOPPY_LIST_SIZE; int entry = offset % AMIGA_FLOPPY_LIST_SIZE; //disk_swap(drive, entry); amiga_floppy_set_from_list(drive, entry); return 1; } /* if (state && action >= INPUTEVENT_AMIGA_JOYPORT_0_AUTOFIRE && action <= INPUTEVENT_AMIGA_JOYPORT_3_AUTOFIRE) { int port = action - INPUTEVENT_AMIGA_JOYPORT_0_AUTOFIRE; g_joystick_port_autofire[port] = !g_joystick_port_autofire[port]; } */ return 0; } #define MAX_MICE 2 #define MAX_MICE_AXES 2 extern "C" { int amiga_send_input_event(int input_event, int state) { //#ifdef DEBUG_SYNC write_sync_log("apply action %d state=%d\n", input_event, state); //#endif //printf("amiga_send_input_event %d %d\n", input_event, state); int isabs = 0; if (input_event > INPUTEVENT_PRIVATE_START) { return handle_custom_action(input_event, state); } // FIXME: is max = 1 always appropriate? int max = 1; switch (input_event) { case INPUTEVENT_MOUSE1_HORIZ: case INPUTEVENT_MOUSE1_VERT: case INPUTEVENT_MOUSE1_WHEEL: case INPUTEVENT_MOUSE2_HORIZ: case INPUTEVENT_MOUSE2_VERT: max = 0; break; case INPUTEVENT_KEY_CAPS_LOCK: // handled specially because of toggle mode // keyboard 0, using input event as scan code (correctly mapped // in keymap.cpp) inputdevice_translatekeycode(0, INPUTEVENT_KEY_CAPS_LOCK, state); return 1; } int autofire = 0; if (input_event == INPUTEVENT_JOY1_FIRE_BUTTON && g_joystick_port_autofire[0]) { autofire = 1; } else if (input_event == INPUTEVENT_JOY2_FIRE_BUTTON && g_joystick_port_autofire[1]) { autofire = 1; } else if (input_event == INPUTEVENT_PAR_JOY1_FIRE_BUTTON && g_joystick_port_autofire[2]) { autofire = 1; } else if (input_event == INPUTEVENT_PAR_JOY2_FIRE_BUTTON && g_joystick_port_autofire[3]) { autofire = 1; } bool canstopplayback = 1; bool playbackevent = 0; //amiga_configure_port_from_input_event(input_event); int result = amiga_handle_input_event (input_event, state, max, autofire, canstopplayback, playbackevent); if (result != 1) { write_log("amiga_handle_input_event(%d, %d, ...) failed with " "result %d", input_event, state, result); } return result; } } // extern "C" extern void uae_quit (void); void setid (struct uae_input_device *uid, int i, int slot, int sub, int port, int evt) { uid[i].eventid[slot][sub] = evt; uid[i].port[slot][sub] = port + 1; } void setid_af (struct uae_input_device *uid, int i, int slot, int sub, int port, int evt, int af) { setid (uid, i, slot, sub, port, evt); uid[i].flags[slot][sub] &= ~(ID_FLAG_AUTOFIRE | ID_FLAG_TOGGLE); if (af >= JPORT_AF_NORMAL) uid[i].flags[slot][sub] |= ID_FLAG_AUTOFIRE; if (af == JPORT_AF_TOGGLE) uid[i].flags[slot][sub] |= ID_FLAG_TOGGLE; } /* * Default inputdevice config for SDL mouse */ int input_get_default_mouse (struct uae_input_device *uid, int i, int port, int af, bool gp) { write_log("input_get_default_mouse\n"); /* SDL supports only one mouse */ setid (uid, i, ID_AXIS_OFFSET + 0, 0, port, port ? INPUTEVENT_MOUSE2_HORIZ : INPUTEVENT_MOUSE1_HORIZ); setid (uid, i, ID_AXIS_OFFSET + 1, 0, port, port ? INPUTEVENT_MOUSE2_VERT : INPUTEVENT_MOUSE1_VERT); setid (uid, i, ID_AXIS_OFFSET + 2, 0, port, port ? 0 : INPUTEVENT_MOUSE1_WHEEL); setid_af (uid, i, ID_BUTTON_OFFSET + 0, 0, port, port ? INPUTEVENT_JOY2_FIRE_BUTTON : INPUTEVENT_JOY1_FIRE_BUTTON, af); setid (uid, i, ID_BUTTON_OFFSET + 1, 0, port, port ? INPUTEVENT_JOY2_2ND_BUTTON : INPUTEVENT_JOY1_2ND_BUTTON); setid (uid, i, ID_BUTTON_OFFSET + 2, 0, port, port ? INPUTEVENT_JOY2_3RD_BUTTON : INPUTEVENT_JOY1_3RD_BUTTON); if (port == 0) { /* map back and forward to ALT+LCUR and ALT+RCUR */ // if (isrealbutton (did, 3)) { setid (uid, i, ID_BUTTON_OFFSET + 3, 0, port, INPUTEVENT_KEY_ALT_LEFT); setid (uid, i, ID_BUTTON_OFFSET + 3, 1, port, INPUTEVENT_KEY_CURSOR_LEFT); // if (isrealbutton (did, 4)) { setid (uid, i, ID_BUTTON_OFFSET + 4, 0, port, INPUTEVENT_KEY_ALT_LEFT); setid (uid, i, ID_BUTTON_OFFSET + 4, 1, port, INPUTEVENT_KEY_CURSOR_RIGHT); // } // } } if (i == 0) return 1; return 0; } void handle_events (void) { #ifdef DEBUG_SYNC static int count = 0; write_sync_log(" -- event handler for frame -- frame=%d\n", count); count++; #endif if (g_libamiga_callbacks.event) { g_libamiga_callbacks.event(0); } //frame_wait_for_filesys(); //filesys_handle_events(); } void toggle_mousegrab (void) { STUB(""); } void setmouseactivexy (int x, int y, int dir) { STUB(""); } void setmouseactive (int active) { STUB(""); } static int get_mouse_num (void) { return 2; } static TCHAR *get_mouse_friendlyname (int mouse) { //VERBOSE_STUB("(possible memory leak here)"); if (mouse == 0) { return (char*) "Mouse 0"; } else if (mouse == 1) { return (char*) "Mouse 1"; } else { return (char*) "Mouse"; } } static TCHAR *get_mouse_uniquename (int mouse) { //VERBOSE_STUB("(possible memory leak here)"); if (mouse == 0) { return (char*) "MOUSE0"; } else if (mouse == 1) { return (char*) "MOUSE1"; } else { return (char*) "MOUSE"; } } static int get_mouse_widget_num (int mouse) { return 0; } static int get_mouse_widget_first (int mouse, int type) { return 0; } static int get_mouse_widget_type (int mouse, int num, TCHAR *name, uae_u32 *code) { return 0; } static int init_mouse (void) { return 1; } static void close_mouse (void) { } static int acquire_mouse (int num, int flags) { STUB("num=%d flags=%d", num, flags); return 0; } static void unacquire_mouse (int num) { STUB("num=%d", num); } static void read_mouse (void) { } static int get_mouse_flags (int num) { return 1; } struct inputdevice_functions inputdevicefunc_mouse = { init_mouse, close_mouse, acquire_mouse, unacquire_mouse, read_mouse, get_mouse_num, get_mouse_friendlyname, get_mouse_uniquename, get_mouse_widget_num, get_mouse_widget_type, get_mouse_widget_first, get_mouse_flags }; static int init_kb (void) { LOG_STUB(""); return 1; } static void close_kb (void) { LOG_STUB(""); } static int acquire_kb (int num, int flags) { STUB(""); return 1; } static void unacquire_kb (int num) { STUB(""); } static void read_kb (void) { } static int get_kb_num (void) { return 1; } static TCHAR *get_kb_friendlyname (int kb) { VERBOSE_STUB("(possible memory leak here)"); return strdup("Default Keyboard"); } static TCHAR *get_kb_uniquename (int kb) { VERBOSE_STUB("(possible memory leak here)"); return strdup("KEYBOARD0"); } static int get_kb_widget_num (int kb) { // FIXME: WHAT is this? return 255; } static int get_kb_widget_first (int kb, int type) { STUB(""); return 0; } static int get_kb_widget_type (int kb, int num, TCHAR *name, uae_u32 *code) { // FIXME: What is this? *code = num; return IDEV_WIDGET_KEY; } static int get_kb_flags (int num) { return 0; } struct inputdevice_functions inputdevicefunc_keyboard = { init_kb, close_kb, acquire_kb, unacquire_kb, read_kb, get_kb_num, get_kb_friendlyname, get_kb_uniquename, get_kb_widget_num, get_kb_widget_type, get_kb_widget_first, get_kb_flags }; int target_checkcapslock (int scancode, int *state) { return 0; } int getcapslockstate (void) { return 0; } void setcapslockstate (int state) { } int input_get_default_keyboard (int num) { if (num == 0) { return 1; } return 0; } int input_get_default_joystick_analog (struct uae_input_device *uid, int num, int port, int af, bool gp) { return 0; } int input_get_default_lightpen (struct uae_input_device *uid, int i, int port, int af, bool gp) { return 0; } void gui_gameport_axis_change (int port, int axis, int state, int max) { } void gui_gameport_button_change (int port, int button, int onoff) { } #ifdef WINDOWS #include #endif int handle_msgpump (void) { if (g_libamiga_callbacks.event) { g_libamiga_callbacks.event(1); } #ifdef WINDOWS // this message queue is used to dispatch messages for bsdsocket emulation // on Windows. Socket functions are run asynchronously with results posted // to a dummy Window. int got = 0; MSG msg; while (PeekMessage (&msg, 0, 0, 0, PM_REMOVE)) { got = 1; TranslateMessage (&msg); DispatchMessage (&msg); } return got; #else return 0; #endif } int is_tablet (void) { return 0; } /* * SDL Joystick code * * Copyright 1997 Bernd Schmidt * Copyright 1998 Krister Walfridsson * Copyright 2003-2005 Richard Drummond */ /* #include #define MAX_MAPPINGS 256 static unsigned int nr_joysticks; static int initialized; struct joyinfo { SDL_Joystick *joy; unsigned int axles; unsigned int buttons; }; static struct joyinfo joys[MAX_INPUT_DEVICES]; */ /* static void read_joy (unsigned int nr) { unsigned int num, i, axes, axis; SDL_Joystick *joy; if (currprefs.input_selected_setting == 0) { if (jsem_isjoy (0, &currprefs) != (int)nr && jsem_isjoy (1, &currprefs) != (int)nr) return; } joy = joys[nr].joy; axes = SDL_JoystickNumAxes (joy); for (i = 0; i < axes; i++) { axis = SDL_JoystickGetAxis (joy, i); setjoystickstate (nr, i, axis, 32767); } num = SDL_JoystickNumButtons (joy); for (i = 0; i < num; i++) { int bs = SDL_JoystickGetButton (joy, i) ? 1 : 0; setjoybuttonstate (nr, i, bs); } } */ static int get_joystick_num (void) { return 4; } static int get_joystick_widget_num (int joy) { write_log("get_joystick_widget_num joy=%d\n", joy); return 0; } static int get_joystick_widget_type (int joy, int num, char *name, uae_u32 *code) { return IDEV_WIDGET_NONE; } static int get_joystick_widget_first (int joy, int type) { return -1; } static char *get_joystick_friendlyname (int joy) { if (joy == 0) { return (char*) "Joystick 1"; } else if (joy == 1) { return (char*) "Joystick 2"; } else if (joy == 2) { return (char*) "Joystick 3"; } else if (joy == 3) { return (char*) "Joystick 4"; } else { return (char*) "Joystick"; } } static char *get_joystick_uniquename (int joy) { if (joy == 0) { return (char*) "JOYSTICK1"; } else if (joy == 1) { return (char*) "JOYSTICK2"; } else if (joy == 2) { return (char*) "JOYSTICK3"; } else if (joy == 3) { return (char*) "JOYSTICK4"; } else { return (char*) "JOYSTICK"; } } static void read_joystick (void) { VERBOSE_STUB(""); } static int init_joystick (void) { write_log("init_joystick\n"); return 1; } static void close_joystick (void) { } static int acquire_joystick (int num, int flags) { //return num < get_joystick_num (); return 1; } static void unacquire_joystick (int num) { } static int get_joystick_flags (int num) { return 0; } struct inputdevice_functions inputdevicefunc_joystick = { init_joystick, close_joystick, acquire_joystick, unacquire_joystick, read_joystick, get_joystick_num, get_joystick_friendlyname, get_joystick_uniquename, get_joystick_widget_num, get_joystick_widget_type, get_joystick_widget_first, get_joystick_flags }; int input_get_default_joystick (struct uae_input_device *uid, int num, int port, int af, int mode, bool gp) { int h,v; unsigned int j; struct didata *did; //SDL_Joystick *joy; //joy = joys[i].joy; write_log("input_get_default_joystick num=%d port=%d af=%d mode=%d\n", num, port, af, mode); /* if (i >= get_joystick_num ()) return 0; */ if (mode == JSEM_MODE_MOUSE_CDTV) { h = INPUTEVENT_MOUSE_CDTV_HORIZ; v = INPUTEVENT_MOUSE_CDTV_VERT; } else if (port >= 2) { h = port == 3 ? INPUTEVENT_PAR_JOY2_HORIZ : INPUTEVENT_PAR_JOY1_HORIZ; v = port == 3 ? INPUTEVENT_PAR_JOY2_VERT : INPUTEVENT_PAR_JOY1_VERT; } else { h = port ? INPUTEVENT_JOY2_HORIZ : INPUTEVENT_JOY1_HORIZ;; v = port ? INPUTEVENT_JOY2_VERT : INPUTEVENT_JOY1_VERT; } setid (uid, num, ID_AXIS_OFFSET + 0, 0, port, h); setid (uid, num, ID_AXIS_OFFSET + 1, 0, port, v); if (port >= 2) { setid_af (uid, num, ID_BUTTON_OFFSET + 0, 0, port, port == 3 ? INPUTEVENT_PAR_JOY2_FIRE_BUTTON : INPUTEVENT_PAR_JOY1_FIRE_BUTTON, af); } else { setid_af (uid, num, ID_BUTTON_OFFSET + 0, 0, port, port ? INPUTEVENT_JOY2_FIRE_BUTTON : INPUTEVENT_JOY1_FIRE_BUTTON, af); setid (uid, num, ID_BUTTON_OFFSET + 1, 0, port, port ? INPUTEVENT_JOY2_2ND_BUTTON : INPUTEVENT_JOY1_2ND_BUTTON); setid (uid, num, ID_BUTTON_OFFSET + 2, 0, port, port ? INPUTEVENT_JOY2_3RD_BUTTON : INPUTEVENT_JOY1_3RD_BUTTON); } if (mode == JSEM_MODE_JOYSTICK_CD32) { setid_af (uid, num, ID_BUTTON_OFFSET + 0, 0, port, port ? INPUTEVENT_JOY2_CD32_RED : INPUTEVENT_JOY1_CD32_RED, af); setid_af (uid, num, ID_BUTTON_OFFSET + 0, 1, port, port ? INPUTEVENT_JOY2_FIRE_BUTTON : INPUTEVENT_JOY1_FIRE_BUTTON, af); setid (uid, num, ID_BUTTON_OFFSET + 1, 0, port, port ? INPUTEVENT_JOY2_CD32_BLUE : INPUTEVENT_JOY1_CD32_BLUE); setid (uid, num, ID_BUTTON_OFFSET + 1, 1, port, port ? INPUTEVENT_JOY2_2ND_BUTTON : INPUTEVENT_JOY1_2ND_BUTTON); setid (uid, num, ID_BUTTON_OFFSET + 2, 0, port, port ? INPUTEVENT_JOY2_CD32_GREEN : INPUTEVENT_JOY1_CD32_GREEN); setid (uid, num, ID_BUTTON_OFFSET + 3, 0, port, port ? INPUTEVENT_JOY2_CD32_YELLOW : INPUTEVENT_JOY1_CD32_YELLOW); setid (uid, num, ID_BUTTON_OFFSET + 4, 0, port, port ? INPUTEVENT_JOY2_CD32_RWD : INPUTEVENT_JOY1_CD32_RWD); setid (uid, num, ID_BUTTON_OFFSET + 5, 0, port, port ? INPUTEVENT_JOY2_CD32_FFW : INPUTEVENT_JOY1_CD32_FFW); setid (uid, num, ID_BUTTON_OFFSET + 6, 0, port, port ? INPUTEVENT_JOY2_CD32_PLAY : INPUTEVENT_JOY1_CD32_PLAY); } if (num == 0) { return 1; } return 0; } fs-uae-2.2.3+dfsg/src/od-fs/cdimage_stubs.cpp0000644000175000017500000000273512162366654021177 0ustar glaubitzglaubitz#include "sysconfig.h" #include "sysdeps.h" #include "mp3decoder.h" #include "FLAC/stream_decoder.h" #include "cda_play.h" FLAC_API FLAC__StreamDecoder *FLAC__stream_decoder_new(void) { return NULL; } FLAC_API FLAC__bool FLAC__stream_decoder_set_md5_checking( FLAC__StreamDecoder *decoder, FLAC__bool value) { return 0; } FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_stream( FLAC__StreamDecoder *decoder, FLAC__StreamDecoderReadCallback read_callback, FLAC__StreamDecoderSeekCallback seek_callback, FLAC__StreamDecoderTellCallback tell_callback, FLAC__StreamDecoderLengthCallback length_callback, FLAC__StreamDecoderEofCallback eof_callback, FLAC__StreamDecoderWriteCallback write_callback, FLAC__StreamDecoderMetadataCallback metadata_callback, FLAC__StreamDecoderErrorCallback error_callback, void *client_data) { return FLAC__STREAM_DECODER_INIT_STATUS_UNSUPPORTED_CONTAINER; } FLAC_API FLAC__bool FLAC__stream_decoder_process_until_end_of_metadata(FLAC__StreamDecoder *decoder) { return 0; } FLAC_API FLAC__bool FLAC__stream_decoder_process_until_end_of_stream(FLAC__StreamDecoder *decoder) { return 0; } FLAC_API void FLAC__stream_decoder_delete(FLAC__StreamDecoder *decoder) { } mp3decoder::~mp3decoder() { } mp3decoder::mp3decoder() { } uae_u8 *mp3decoder::get (struct zfile *zf, uae_u8 *outbuf, int maxsize) { return NULL; } uae_u32 mp3decoder::getsize (struct zfile *zf) { return 0; } fs-uae-2.2.3+dfsg/src/od-fs/caps_types.h0000644000175000017500000000313412162366654020177 0ustar glaubitzglaubitztypedef uint8_t UBYTE; typedef uint16_t UWORD; typedef int32_t SDWORD; typedef uint32_t UDWORD; typedef uint64_t UQUAD; typedef void *PVOID; typedef char *PCHAR; typedef UBYTE *PUBYTE; typedef UDWORD *PUDWORD; typedef SDWORD *PSDWORD; typedef struct CapsDateTimeExt *PCAPSDATETIMEEXT; typedef struct CapsImageInfo *PCAPSIMAGEINFO; typedef struct CapsTrackInfo *PCAPSTRACKINFO; typedef struct CapsTrackInfoT1 *PCAPSTRACKINFOT1; typedef struct CapsTrackInfoT2 *PCAPSTRACKINFOT2; typedef struct CapsVersionInfo *PCAPSVERSIONINFO; typedef struct CapsSectorInfo *PCAPSSECTORINFO; typedef struct CapsDataInfo *PCAPSDATAINFO; typedef struct CapsDrive *PCAPSDRIVE; typedef struct CapsFdc *PCAPSFDC; typedef struct CapsFormatBlock *PCAPSFORMATBLOCK; typedef struct CapsFormatTrack *PCAPSFORMATTRACK; #define DF_0 (1L<<0) #define DF_1 (1L<<1) #define DF_2 (1L<<2) #define DF_3 (1L<<3) #define DF_4 (1L<<4) #define DF_5 (1L<<5) #define DF_6 (1L<<6) #define DF_7 (1L<<7) #define DF_8 (1L<<8) #define DF_9 (1L<<9) #define DF_10 (1L<<10) #define DF_11 (1L<<11) #define DF_12 (1L<<12) #define DF_13 (1L<<13) #define DF_14 (1L<<14) #define DF_15 (1L<<15) #define DF_16 (1L<<16) #define DF_17 (1L<<17) #define DF_18 (1L<<18) #define DF_19 (1L<<19) #define DF_20 (1L<<20) #define DF_21 (1L<<21) #define DF_22 (1L<<22) #define DF_23 (1L<<23) #define DF_24 (1L<<24) #define DF_25 (1L<<25) #define DF_26 (1L<<26) #define DF_27 (1L<<27) #define DF_28 (1L<<28) #define DF_29 (1L<<29) #define DF_30 (1L<<30) #define DF_31 (1L<<31) fs-uae-2.2.3+dfsg/src/od-fs/clipboard.cpp0000644000175000017500000000234012162366654020315 0ustar glaubitzglaubitz#include "sysconfig.h" #include "sysdeps.h" #include #include #include "clipboard.h" #include "threaddep/thread.h" #include "uae/memory.h" #include "native2amiga_api.h" int clipboard_debug; static uaecptr clipboard_data; static int vdelay, signaling, initialized; static uae_u8 *to_amiga; static uae_u32 to_amiga_size; static int clipopen; static int clipactive; static int clipboard_change; static void *clipboard_delayed_data; static int clipboard_delayed_size; void amiga_clipboard_die (void) { signaling = 0; write_log ("clipboard not initialized\n"); } void amiga_clipboard_init (void) { signaling = 0; write_log ("clipboard initialized\n"); initialized = 1; } void amiga_clipboard_task_start (uaecptr data) { clipboard_data = data; signaling = 1; write_log ("clipboard task init: %08x\n", clipboard_data); } uae_u32 amiga_clipboard_proc_start (void) { write_log ("clipboard process init: %08x\n", clipboard_data); signaling = 1; return clipboard_data; } void amiga_clipboard_got_data (uaecptr data, uae_u32 size, uae_u32 actual) { uae_u8 *addr; if (!initialized) { write_log ("clipboard: got_data() before initialized!?\n"); return; } } fs-uae-2.2.3+dfsg/src/od-fs/hardfile_host.cpp0000644000175000017500000005476312162366655021212 0ustar glaubitzglaubitz/** * UAE - The Un*x Amiga Emulator * * Hardfile emulation for *nix systems * * Copyright 2003-2006 Richard Drummond * Copyright 2008-2010 Mustafa TUFAN * Based on hardfile_win32.c */ #include "sysconfig.h" #include "sysdeps.h" #include "filesys.h" #include "zfile.h" #ifdef MACOSX #include #include #endif #define hfd_log write_log static int g_debug = 0; //#define HDF_DEBUG #ifdef HDF_DEBUG #define DEBUG_LOG write_log ( "%s: ", __func__); write_log #else #define DEBUG_LOG(...) do ; while(0) #endif static int usefloppydrives = 0; struct hardfilehandle { int zfile; struct zfile *zf; FILE *h; }; struct uae_driveinfo { char vendor_id[128]; char product_id[128]; char product_rev[128]; char product_serial[128]; char device_name[2048]; char device_path[2048]; uae_u64 size; uae_u64 offset; int bytespersector; int removablemedia; int nomedia; int dangerous; int readonly; }; #define HDF_HANDLE_WIN32 1 #define HDF_HANDLE_ZFILE 2 #define HDF_HANDLE_LINUX 3 #define INVALID_HANDLE_VALUE NULL #define CACHE_SIZE 16384 #define CACHE_FLUSH_TIME 5 /* safety check: only accept drives that: * - contain RDSK in block 0 * - block 0 is zeroed */ int harddrive_dangerous, do_rdbdump; static struct uae_driveinfo uae_drives[MAX_FILESYSTEM_UNITS]; static void rdbdump (FILE *h, uae_u64 offset, uae_u8 *buf, int blocksize) { static int cnt = 1; int i, blocks; char name[100]; FILE *f; blocks = (buf[132] << 24) | (buf[133] << 16) | (buf[134] << 8) | (buf[135] << 0); if (blocks < 0 || blocks > 100000) return; _stprintf (name, "rdb_dump_%d.rdb", cnt); f = uae_fopen (name, "wb"); if (!f) return; for (i = 0; i <= blocks; i++) { long outlen; if (uae_fseeko64 (h, offset, SEEK_SET) != 0) break; outlen = fread (buf, 1, blocksize, h); fwrite (buf, 1, blocksize, f); offset += blocksize; } fclose (f); cnt++; } //static int ismounted (int hd) //FIXME: static int ismounted (FILE* f) { STUB(""); int mounted; //mounted = 1; mounted = 0; return mounted; } #define CA "Commodore\0Amiga\0" static int safetycheck (FILE *h, const char *name, uae_u64 offset, uae_u8 *buf, int blocksize) { int i, j, blocks = 63, empty = 1; long outlen; for (j = 0; j < blocks; j++) { if (uae_fseeko64 (h, offset, SEEK_SET) != 0) { write_log ("hd ignored, SetFilePointer failed, error %d\n", errno); return 1; } memset (buf, 0xaa, blocksize); outlen = fread (buf, 1, blocksize, h); if (outlen != blocksize) { write_log ("hd ignored, read error %d!\n", errno); return 2; } if (j == 0 && offset > 0) return -5; if (j == 0 && buf[0] == 0x39 && buf[1] == 0x10 && buf[2] == 0xd3 && buf[3] == 0x12) { // ADIDE "CPRM" hidden block.. if (do_rdbdump) rdbdump (h, offset, buf, blocksize); write_log ("hd accepted (adide rdb detected at block %d)\n", j); return -3; } if (!memcmp (buf, "RDSK", 4) || !memcmp (buf, "DRKS", 4)) { if (do_rdbdump) rdbdump (h, offset, buf, blocksize); write_log ("hd accepted (rdb detected at block %d)\n", j); return -1; } if (!memcmp (buf + 2, "CIS@", 4) && !memcmp (buf + 16, CA, strlen (CA))) { write_log ("hd accepted (PCMCIA RAM)\n"); return -2; } if (j == 0) { for (i = 0; i < blocksize; i++) { if (buf[i]) empty = 0; } } offset += blocksize; } if (!empty) { int mounted; mounted = ismounted (h); if (!mounted) { write_log ("hd accepted, not empty and not mounted in Windows\n"); return -8; } if (mounted < 0) { write_log ("hd ignored, NTFS partitions\n"); return 0; } if (harddrive_dangerous == 0x1234dead) return -6; write_log ("hd ignored, not empty and no RDB detected or Windows mounted\n"); return 0; } write_log ("hd accepted (empty)\n"); return -9; } /* static void trim (TCHAR *s) { while(_tcslen(s) > 0 && s[_tcslen(s) - 1] == ' ') { s[_tcslen(s) - 1] = 0; } } */ int isharddrive (const TCHAR *name) { int i; for (i = 0; i < hdf_getnumharddrives (); i++) { if (!_tcscmp (uae_drives[i].device_name, name)) return i; } return -1; } static const char *hdz[] = { "hdz", "zip", "rar", "7z", NULL }; int hdf_open_target (struct hardfiledata *hfd, const char *pname) { FILE *h = INVALID_HANDLE_VALUE; int i; struct uae_driveinfo *udi; char *name = strdup (pname); if (getenv("FS_DEBUG_HDF")) { g_debug = 1; } if (g_debug) { write_log("\n\n-- hdf_open_target pname = %s\n", pname); } hfd->flags = 0; hfd->drive_empty = 0; hdf_close (hfd); hfd->cache = (uae_u8*)xmalloc (uae_u8, CACHE_SIZE); hfd->cache_valid = 0; hfd->virtual_size = 0; hfd->virtual_rdb = NULL; if (!hfd->cache) { write_log ("VirtualAlloc(%d) failed, error %d\n", CACHE_SIZE, errno); goto end; } hfd->handle = xcalloc (struct hardfilehandle, 1); hfd->handle->h = INVALID_HANDLE_VALUE; hfd_log ("hfd open: '%s'\n", name); if (_tcslen (name) > 4 && !_tcsncmp (name,"HD_", 3)) { hdf_init_target (); i = isharddrive (name); if (i >= 0) { long r; udi = &uae_drives[i]; hfd->flags = HFD_FLAGS_REALDRIVE; if (udi->nomedia) hfd->drive_empty = -1; if (udi->readonly) hfd->readonly = 1; h = uae_fopen (udi->device_path, hfd->readonly ? "rb" : "r+b"); hfd->handle->h = h; if (h == INVALID_HANDLE_VALUE) goto end; _tcsncpy (hfd->vendor_id, udi->vendor_id, 8); _tcsncpy (hfd->product_id, udi->product_id, 16); _tcsncpy (hfd->product_rev, udi->product_rev, 4); hfd->offset = udi->offset; hfd->physsize = hfd->virtsize = udi->size; hfd->blocksize = udi->bytespersector; if (hfd->offset == 0 && !hfd->drive_empty) { int sf = safetycheck (hfd->handle->h, udi->device_path, 0, hfd->cache, hfd->blocksize); if (sf > 0) goto end; if (sf == 0 && !hfd->readonly && harddrive_dangerous != 0x1234dead) { write_log ("'%s' forced read-only, safetycheck enabled\n", udi->device_path); hfd->dangerous = 1; // clear GENERIC_WRITE fclose (h); h = uae_fopen (udi->device_path, "r+b"); hfd->handle->h = h; if (h == INVALID_HANDLE_VALUE) goto end; } } hfd->handle_valid = HDF_HANDLE_LINUX; hfd->emptyname = strdup (name); } else { hfd->flags = HFD_FLAGS_REALDRIVE; hfd->drive_empty = -1; hfd->emptyname = strdup (name); } } else { int zmode = 0; char *ext = _tcsrchr (name, '.'); if (ext != NULL) { ext++; for (i = 0; hdz[i]; i++) { if (!_tcsicmp (ext, hdz[i])) zmode = 1; } } h = uae_fopen (name, hfd->readonly ? "rb" : "r+b"); if (h == INVALID_HANDLE_VALUE) goto end; hfd->handle->h = h; i = _tcslen (name) - 1; while (i >= 0) { if ((i > 0 && (name[i - 1] == '/' || name[i - 1] == '\\')) || i == 0) { _tcscpy (hfd->vendor_id, "UAE"); _tcsncpy (hfd->product_id, name + i, 15); _tcscpy (hfd->product_rev, "0.3"); break; } i--; } if (h != INVALID_HANDLE_VALUE) { // determine size of hdf file int ret; off_t low; #ifdef MACOSX // check type of file struct stat st; ret = stat(name,&st); if (ret) { write_log("osx: can't stat '%s'\n", name); goto end; } // block devices need special handling on osx if (S_ISBLK(st.st_mode) || S_ISCHR(st.st_mode)) { uint32_t block_size; uint64_t block_count; int fh = fileno(h); // get number of blocks ret = ioctl(fh, DKIOCGETBLOCKCOUNT, &block_count); if (ret) { write_log("osx: can't get block count of '%s' (%d)\n", name, fh); goto end; } // get block size ret = ioctl(fh, DKIOCGETBLOCKSIZE, &block_size); if (ret) { write_log("osx: can't get block size of '%s' (%d)\n", name, fh); goto end; } write_log("osx: found raw device: block_size=%u " "block_count=%llu\n", block_size, block_count); low = block_size * block_count; } else { #endif // regular file size: seek to end and ftell ret = uae_fseeko64 (h, 0, SEEK_END); if (ret) goto end; low = uae_ftello64 (h); if (low == -1) goto end; #ifdef MACOSX } #endif low &= ~(hfd->blocksize - 1); hfd->physsize = hfd->virtsize = low; if (g_debug) { write_log("set physsize = virtsize = %lld (low)\n", hfd->virtsize); } hfd->handle_valid = HDF_HANDLE_LINUX; if (hfd->physsize < 64 * 1024 * 1024 && zmode) { write_log ("HDF '%s' re-opened in zfile-mode\n", name); fclose (h); hfd->handle->h = INVALID_HANDLE_VALUE; hfd->handle->zf = zfile_fopen(name, hfd->readonly ? "rb" : "r+b", ZFD_NORMAL); hfd->handle->zfile = 1; if (!h) goto end; zfile_fseek (hfd->handle->zf, 0, SEEK_END); hfd->physsize = hfd->virtsize = zfile_ftell (hfd->handle->zf); if (g_debug) { write_log("set physsize = virtsize = %lld\n", hfd->virtsize); } zfile_fseek (hfd->handle->zf, 0, SEEK_SET); hfd->handle_valid = HDF_HANDLE_ZFILE; } } else { write_log ("HDF '%s' failed to open. error = %d\n", name, errno); } } if (hfd->handle_valid || hfd->drive_empty) { hfd_log ("HDF '%s' opened, size=%dK mode=%d empty=%d\n", name, (int) (hfd->physsize / 1024), hfd->handle_valid, hfd->drive_empty); return 1; } end: hdf_close (hfd); xfree (name); return 0; } /* static void freehandle (struct hardfilehandle *h) { if (!h) return; if (!h->zfile && h->h != INVALID_HANDLE_VALUE) fclose (h->h); if (h->zfile && h->zf) zfile_fclose (h->zf); h->zf = NULL; h->h = INVALID_HANDLE_VALUE; h->zfile = 0; } */ void hdf_close_target (struct hardfiledata *hfd) { write_log("hdf_close_target\n"); if (hfd->handle && hfd->handle->h) { write_log("closing file handle %p\n", hfd->handle->h); fclose(hfd->handle->h); } //freehandle (hfd->handle); xfree (hfd->handle); xfree (hfd->emptyname); hfd->emptyname = NULL; hfd->handle = NULL; hfd->handle_valid = 0; if (hfd->cache) xfree (hfd->cache); xfree(hfd->virtual_rdb); hfd->virtual_rdb = 0; hfd->virtual_size = 0; hfd->cache = 0; hfd->cache_valid = 0; hfd->drive_empty = 0; hfd->dangerous = 0; } int hdf_dup_target (struct hardfiledata *dhfd, const struct hardfiledata *shfd) { if (!shfd->handle_valid) return 0; return 0; } static int hdf_seek (struct hardfiledata *hfd, uae_u64 offset) { size_t ret; if (hfd->handle_valid == 0) { gui_message ("hd: hdf handle is not valid. bug."); abort(); } if (offset >= hfd->physsize - hfd->virtual_size) { gui_message ("hd: tried to seek out of bounds! (0x%llx >= 0x%llx)\n", offset, hfd->physsize); abort (); } offset += hfd->offset; if (offset & (hfd->blocksize - 1)) { gui_message ("hd: poscheck failed, offset=0x%llx not aligned to blocksize=%d! (0x%llx & 0x%04.4x = 0x%04.4x)\n", offset, hfd->blocksize, offset, hfd->blocksize, offset & (hfd->blocksize - 1)); abort (); } if (hfd->handle_valid == HDF_HANDLE_LINUX) { ret = uae_fseeko64 (hfd->handle->h, offset, SEEK_SET); if (ret) { write_log("hdf_seek failed\n"); return -1; } } else if (hfd->handle_valid == HDF_HANDLE_ZFILE) { zfile_fseek (hfd->handle->zf, (long)offset, SEEK_SET); } return 0; } static void poscheck (struct hardfiledata *hfd, int len) { int ret; uae_u64 pos = 0; if (hfd->handle_valid == HDF_HANDLE_LINUX) { ret = uae_fseeko64 (hfd->handle->h, 0, SEEK_CUR); if (ret) { gui_message ("hd: poscheck failed. seek failure, ret %d", ret); abort (); } pos = uae_ftello64 (hfd->handle->h); } else if (hfd->handle_valid == HDF_HANDLE_ZFILE) { pos = zfile_ftell (hfd->handle->zf); } if (len < 0) { gui_message ("hd: poscheck failed, negative length! (%d)", len); abort (); } if (pos < hfd->offset) { gui_message ("hd: poscheck failed, offset out of bounds! (0x%llx < 0x%llx)", pos, hfd->offset); abort (); } if (pos >= hfd->offset + hfd->physsize - hfd->virtual_size || pos >= hfd->offset + hfd->physsize + len - hfd->virtual_size) { gui_message ("hd: poscheck failed, offset out of bounds! (0x%llx >= 0x%llx, LEN=%d)", pos, hfd->offset + hfd->physsize, len); abort (); } if (pos & (hfd->blocksize - 1)) { gui_message ("hd: poscheck failed, offset not aligned to blocksize! (0x%llx & 0x%04.4x = 0x%04.4x\n", pos, hfd->blocksize, pos & hfd->blocksize); abort (); } } static int isincache (struct hardfiledata *hfd, uae_u64 offset, int len) { if (!hfd->cache_valid) return -1; if (offset >= hfd->cache_offset && offset + len <= hfd->cache_offset + CACHE_SIZE) return (int)(offset - hfd->cache_offset); return -1; } #if 0 void hfd_flush_cache (struct hardfiledata *hfd, int now) { DWORD outlen = 0; if (!hfd->cache_needs_flush || !hfd->cache_valid) return; if (now || time (NULL) > hfd->cache_needs_flush + CACHE_FLUSH_TIME) { hdf_log ("flushed %d %d %d\n", now, time(NULL), hfd->cache_needs_flush); hdf_seek (hfd, hfd->cache_offset); poscheck (hfd, CACHE_SIZE); WriteFile (hfd->handle, hfd->cache, CACHE_SIZE, &outlen, NULL); hfd->cache_needs_flush = 0; } } #endif static int hdf_read_2 (struct hardfiledata *hfd, void *buffer, uae_u64 offset, int len) { long outlen = 0; int coffset; if (offset == 0) hfd->cache_valid = 0; coffset = isincache (hfd, offset, len); if (coffset >= 0) { memcpy (buffer, hfd->cache + coffset, len); return len; } hfd->cache_offset = offset; if (offset + CACHE_SIZE > hfd->offset + (hfd->physsize - hfd->virtual_size)) hfd->cache_offset = hfd->offset + (hfd->physsize - hfd->virtual_size) - CACHE_SIZE; hdf_seek (hfd, hfd->cache_offset); poscheck (hfd, CACHE_SIZE); if (hfd->handle_valid == HDF_HANDLE_LINUX) outlen = fread (hfd->cache, 1, CACHE_SIZE, hfd->handle->h); else if (hfd->handle_valid == HDF_HANDLE_ZFILE) outlen = zfile_fread (hfd->cache, 1, CACHE_SIZE, hfd->handle->zf); hfd->cache_valid = 0; if (outlen != CACHE_SIZE) return 0; hfd->cache_valid = 1; coffset = isincache (hfd, offset, len); if (coffset >= 0) { memcpy (buffer, hfd->cache + coffset, len); return len; } write_log ("hdf_read: cache bug! offset=0x%llx len=%d\n", offset, len); hfd->cache_valid = 0; return 0; } int hdf_read_target (struct hardfiledata *hfd, void *buffer, uae_u64 offset, int len) { int got = 0; uae_u8 *p = (uae_u8*)buffer; if (hfd->drive_empty) return 0; if (offset < hfd->virtual_size) { uae_u64 len2 = offset + len <= hfd->virtual_size ? len : hfd->virtual_size - offset; if (!hfd->virtual_rdb) return 0; memcpy (buffer, hfd->virtual_rdb + offset, len2); return len2; } offset -= hfd->virtual_size; while (len > 0) { int maxlen; int ret = 0; if (hfd->physsize < CACHE_SIZE) { hfd->cache_valid = 0; hdf_seek (hfd, offset); poscheck (hfd, len); if (hfd->handle_valid == HDF_HANDLE_LINUX) { ret = fread (hfd->cache, 1, len, hfd->handle->h); memcpy (buffer, hfd->cache, ret); } else if (hfd->handle_valid == HDF_HANDLE_ZFILE) { ret = zfile_fread (buffer, 1, len, hfd->handle->zf); } maxlen = len; } else { maxlen = len > CACHE_SIZE ? CACHE_SIZE : len; ret = hdf_read_2 (hfd, p, offset, maxlen); } got += ret; if (ret != maxlen) return got; offset += maxlen; p += maxlen; len -= maxlen; } return got; } static int hdf_write_2 (struct hardfiledata *hfd, void *buffer, uae_u64 offset, int len) { size_t outlen = 0; if (hfd->readonly) { if (g_debug) { write_log("hfd->readonly\n"); } return 0; } if (hfd->dangerous) { if (g_debug) { write_log("hfd->dangerous\n"); } return 0; } hfd->cache_valid = 0; hdf_seek (hfd, offset); poscheck (hfd, len); memcpy (hfd->cache, buffer, len); if (hfd->handle_valid == HDF_HANDLE_LINUX) { outlen = fwrite (hfd->cache, 1, len, hfd->handle->h); //fflush(hfd->handle->h); if (g_debug) { write_log("wrote %zu bytes (wanted %d) at offset %llx\n", outlen, len, offset); } if (offset == 0) { long outlen2; uae_u8 *tmp; int tmplen = 512; tmp = (uae_u8*)xmalloc (uae_u8, tmplen); if (tmp) { memset (tmp, 0xa1, tmplen); hdf_seek (hfd, offset); outlen2 = fread (tmp, 1, tmplen, hfd->handle->h); if (memcmp (hfd->cache, tmp, tmplen) != 0 || outlen != len) gui_message ("Harddrive\n%s\nblock zero write failed!", hfd->device_name); xfree (tmp); } } } else if (hfd->handle_valid == HDF_HANDLE_ZFILE) { outlen = zfile_fwrite (hfd->cache, 1, len, hfd->handle->zf); } return outlen; } int hdf_write_target (struct hardfiledata *hfd, void *buffer, uae_u64 offset, int len) { int got = 0; uae_u8 *p = (uae_u8*)buffer; if (g_debug) { write_log("hdf_write_target off %llx len %d virtual size %lld\n", offset, len, hfd->virtual_size); } if (hfd->drive_empty) { if (g_debug) { write_log("hfd->drive_empty\n"); } return 0; } if (offset < hfd->virtual_size) { if (g_debug) { write_log("offset < hfd->virtual_size\n"); } return len; } offset -= hfd->virtual_size; while (len > 0) { int maxlen = len > CACHE_SIZE ? CACHE_SIZE : len; int ret = hdf_write_2 (hfd, p, offset, maxlen); if (ret < 0) return ret; got += ret; if (ret != maxlen) return got; offset += maxlen; p += maxlen; len -= maxlen; } return got; } int hdf_resize_target (struct hardfiledata *hfd, uae_u64 newsize) { int err = 0; write_log ("hdf_resize_target: SetEndOfFile() %d\n", err); return 0; } static int num_drives; static int hdf_init2 (int force) { int index = 0, index2 = 0, drive; uae_u8 *buffer; int errormode; int dwDriveMask; static int done; if (done && !force) return num_drives; done = 1; num_drives = 0; return num_drives; } int hdf_init_target (void) { return hdf_init2 (0); } int hdf_getnumharddrives (void) { return num_drives; } TCHAR *hdf_getnameharddrive (int index, int flags, int *sectorsize, int *dangerousdrive) { static char name[512]; char tmp[32]; uae_u64 size = uae_drives[index].size; int nomedia = uae_drives[index].nomedia; const char *dang = "?"; const char *rw = "RW"; if (dangerousdrive) *dangerousdrive = 0; switch (uae_drives[index].dangerous) { case -5: dang = "[PART]"; break; case -6: dang = "[MBR]"; break; case -7: dang = "[!]"; break; case -8: dang = "[UNK]"; break; case -9: dang = "[EMPTY]"; break; case -3: dang = "(CPRM)"; break; case -2: dang = "(SRAM)"; break; case -1: dang = "(RDB)"; break; case 0: dang = "[OS]"; if (dangerousdrive) *dangerousdrive |= 1; break; } if (nomedia) { dang = "[NO MEDIA]"; if (dangerousdrive) *dangerousdrive &= ~1; } if (uae_drives[index].readonly) { rw = "RO"; if (dangerousdrive && !nomedia) *dangerousdrive |= 2; } if (sectorsize) *sectorsize = uae_drives[index].bytespersector; if (flags & 1) { if (nomedia) { _tcscpy (tmp, "N/A"); } else { if (size >= 1024 * 1024 * 1024) _stprintf (tmp, "%.1fG", ((double)(uae_u32)(size / (1024 * 1024))) / 1024.0); else if (size < 10 * 1024 * 1024) _stprintf (tmp, "%dK", (int) (size / 1024)); else _stprintf (tmp, "%.1fM", ((double)(uae_u32)(size / (1024))) / 1024.0); } _stprintf (name, "%10s [%s,%s] %s", dang, tmp, rw, uae_drives[index].device_name + 3); return name; } if (flags & 2) return uae_drives[index].device_path; return uae_drives[index].device_name; } fs-uae-2.2.3+dfsg/src/od-fs/mp3decoder.h0000644000175000017500000000027412162366655020055 0ustar glaubitzglaubitz class mp3decoder { void *g_mp3stream; public: mp3decoder(); ~mp3decoder(); uae_u8 *get(struct zfile *zf, uae_u8 *, int maxsize); uae_u32 getsize(struct zfile *zf); }; fs-uae-2.2.3+dfsg/src/od-fs/winuae_compat.h0000644000175000017500000000405712162366654020665 0ustar glaubitzglaubitz#ifndef LIBAMIGA_WINUAE_COMPAT_H_ #define LIBAMIGA_WINUAE_COMPAT_H_ // use custom versions of these functions for platform-specific behaviour #define _tfopen uae_fopen #define _ftelli64 uae_ftello64 #define _fseeki64 uae_fseeko64 // convert windows libc names to standard libc function names #define _stprintf sprintf #define _wunlink unlink #define _tcscspn strcspn #define _tcscmp strcmp #define _tcsncmp strncmp #define _tcslen strlen #define _tcscpy strcpy #define _tcsncpy strncpy #define _tcsdup strdup #define _tcscat strcat #define _tcsncat strncat #define _tcsspn strspn #define _tcsicmp strcasecmp #define _tcsnicmp strncasecmp #define stricmp strcasecmp #define strnicmp strncasecmp #define _tcsrchr strrchr #define _tcschr strchr #define _istdigit isdigit #define _istspace isspace #define _istupper isupper #define _tcsstr strstr #define _tcsftime strftime #define _tcsftime strftime #define _tstol atol #define _tstof atof #define _tcstod strtod #define _tcstol strtol #define _strtoui64 strtoll #define _totupper toupper #define _totlower tolower #define _tcstok strtok #define _tstoi atoi #define _vsntprintf vsnprintf #define _vsnprintf vsnprintf #define _tprintf printf //#define _timezone timezone //#define _daylight daylight #ifdef WINDOWS #else extern int _timezone; extern int _daylight; #endif #define _tzset tzset #define _istalnum isalnum // needed by e.g drawing.cpp #define NOINLINE #ifdef WINDOWS // including windef.h now to get RECT and DWORD defined (and not collide with // later includes of windows.h #include "windef.h" #undef _WIN32 #undef WIN32 #endif #ifndef WINDOWS #define _ftime ftime #define _timeb timeb #define _cdecl #ifndef ULONG #define ULONG unsigned long #endif //typedef unsigned int UAE_DWORD; typedef unsigned int DWORD; typedef struct tagRECT { int left; int top; int right; int bottom; } RECT, *PRECT, *PPRECT; //#ifndef WINDOWS //#define DWORD UAE_DWORD //#define RECT UAE_RECT //#endif #endif // needed by e.g. include/commpipe.h #define STATIC_INLINE static inline #endif // LIBAMIGA_WINUAE_COMPAT_H_ fs-uae-2.2.3+dfsg/src/od-fs/audio.cpp0000644000175000017500000002030212162366654017455 0ustar glaubitzglaubitz#include "sysconfig.h" #include "sysdeps.h" #include "include/uae.h" #include "include/options.h" static int (*g_audio_callback)(int type, int16_t *buffer, int size) = NULL; static int g_audio_frequency = 44100; static int g_audio_buffer_size = 512 * 2 * 2; int amiga_set_audio_callback(audio_callback func) { g_audio_callback = func; return 1; } int amiga_set_audio_buffer_size(int size) { g_audio_buffer_size = size; return 1; } int amiga_set_audio_frequency(int frequency) { char freq[13]; snprintf(freq, 13, "%d", frequency); amiga_set_option("sound_frequency", freq); /* write_log("amiga_set_audio_frequency: %d\n", frequency); g_audio_frequency = frequency; changed_prefs.sound_freq = frequency; write_log("changed_prefs: %p\n", &changed_prefs); config_changed = 1; */ return 1; } extern int maxhpos, maxhpos_short; extern int maxvpos, maxvpos_nom; extern float sample_evtime, scaled_sample_evtime; //extern float sampler_evtime; float scaled_sample_evtime_orig; int obtainedfreq; int have_sound = 0; void update_sound (double freq, int longframe, int linetoggle) { static int lastfreq; double lines = 0; double hpos; if (freq < 0) freq = lastfreq; lastfreq = freq; if (!have_sound) return; if (linetoggle) { hpos = maxhpos_short + 0.5; lines += 0.5; } else { if (longframe < 0) lines += 0.5; else if (longframe > 0) lines += 1.0; hpos = maxhpos_short; } lines += maxvpos_nom; scaled_sample_evtime = hpos * lines * freq * CYCLE_UNIT / (double) obtainedfreq; #ifdef SAMPLER sampler_evtime = hpos * lines * freq * CYCLE_UNIT; #endif } /* * UAE - The Un*x Amiga Emulator * * Support for SDL sound * * Copyright 1997 Bernd Schmidt * Copyright 2003-2006 Richard Drummond * Copyright 2009-2010 Mustafa TUFAN */ #include "audio.h" #include "uae/memory.h" #include "events.h" #include "custom.h" #include "gui.h" #include "gensound.h" #include "driveclick.h" #include "sounddep/sound.h" #include "threaddep/thread.h" //#include static int statuscnt; uae_u16 paula_sndbuffer[44100]; uae_u16 *paula_sndbufpt; int paula_sndbufsize; //static SDL_AudioSpec spec; static smp_comm_pipe to_sound_pipe; static uae_sem_t data_available_sem, callback_done_sem, sound_init_sem; static struct sound_data sdpaula; static struct sound_data *sdp = &sdpaula; static int in_callback, closing_sound; static void clearbuffer (void) { memset (paula_sndbuffer, 0, sizeof (paula_sndbuffer)); } void finish_sound_buffer (void) { if (currprefs.turbo_emulation) return; #ifdef DRIVESOUND driveclick_mix ((uae_s16*)paula_sndbuffer, paula_sndbufsize / 2, currprefs.dfxclickchannelmask); #endif if (!have_sound) return; if (statuscnt > 0) { statuscnt--; if (statuscnt == 0) gui_data.sndbuf_status = 0; } if (gui_data.sndbuf_status == 3) gui_data.sndbuf_status = 0; /* static int get_audio_buffer_fill() { return g_audio_buffer_queue_size * SYS_BUFFER_BYTES + g_audio_buffer_pos; } */ if (g_audio_callback) { g_audio_callback(0, (int16_t *) paula_sndbuffer, paula_sndbufsize); } //uae_sem_post (&data_available_sem); //uae_sem_wait (&callback_done_sem); } /* Try to determine whether sound is available. */ int setup_sound (void) { int success = 1; sound_available = success; return sound_available; } static int open_sound (void) { if (!currprefs.produce_sound) return 0; config_changed = 1; clearbuffer(); currprefs.sound_stereo = 1; //currprefs.sound_freq = fs_emu_get_audio_frequency(); //changed_prefs.sound_freq = g_audio_frequency; //init_sound_table16 (); sample_handler = currprefs.sound_stereo ? sample16s_handler : sample16_handler; //obtainedfreq = currprefs.sound_freq; obtainedfreq = g_audio_frequency; have_sound = 1; sound_available = 1; update_sound (fake_vblank_hz, 1, currprefs.ntscmode); //paula_sndbufsize = spec.samples * 2 * spec.channels; //paula_sndbufsize = fs_emu_get_audio_buffer_size(); paula_sndbufsize = g_audio_buffer_size; paula_sndbufpt = paula_sndbuffer; #ifdef DRIVESOUND write_log("initialize drivesound\n"); driveclick_init(); #endif write_log("open_sound returning 1\n"); return 1; } static void *sound_thread (void *dummy) { for (;;) { int cmd = read_comm_pipe_int_blocking(&to_sound_pipe); switch(cmd) { case 0: open_sound(); uae_sem_post(&sound_init_sem); break; case 1: uae_sem_post(&sound_init_sem); return 0; } } } /* We need a thread for this, since communication between finish_sound_buffer * and the callback works through semaphores. In theory, this is unnecessary, * since SDL uses a sound thread internally, and the callback runs in its * context. But we don't want to depend on SDL's internals too much. */ static void init_sound_thread(void) { write_log("init_sound_thread\n"); uae_thread_id tid; init_comm_pipe (&to_sound_pipe, 20, 1); uae_sem_init (&data_available_sem, 0, 0); uae_sem_init (&callback_done_sem, 0, 0); uae_sem_init (&sound_init_sem, 0, 0); uae_start_thread ("Sound", sound_thread, NULL, &tid); } void close_sound (void) { config_changed = 1; gui_data.sndbuf = 0; gui_data.sndbuf_status = 3; if (!have_sound) return; // SDL_PauseAudio (1); clearbuffer(); if (in_callback) { closing_sound = 1; uae_sem_post (&data_available_sem); } write_comm_pipe_int (&to_sound_pipe, 1, 1); uae_sem_wait (&sound_init_sem); // SDL_CloseAudio (); uae_sem_destroy (&data_available_sem); uae_sem_destroy (&sound_init_sem); uae_sem_destroy (&callback_done_sem); have_sound = 0; } int init_sound(void) { write_log("init_sound\n"); gui_data.sndbuf_status = 3; gui_data.sndbuf = 0; if (!sound_available) return 0; if (currprefs.produce_sound <= 1) return 0; if (have_sound) return 1; in_callback = 0; closing_sound = 0; init_sound_thread (); write_comm_pipe_int (&to_sound_pipe, 0, 1); uae_sem_wait (&sound_init_sem); // SDL_PauseAudio (0); #ifdef DRIVESOUND driveclick_reset (); #endif return have_sound; } void pause_sound (void) { write_log("STUB: pause_sound\n"); if (!have_sound) return; #if 0 SDL_PauseAudio (1); #endif } void resume_sound (void) { write_log("STUB: resume_sound\n"); if (!have_sound) return; clearbuffer(); #if 0 SDL_PauseAudio (0); #endif } void reset_sound (void) { clearbuffer(); return; } void sound_volume (int dir) { } void pause_sound_buffer(void) { if (g_audio_callback) { g_audio_callback(1, NULL, 0); } } void restart_sound_buffer(void) { if (g_audio_callback) { g_audio_callback(2, NULL, 0); } } void audio_save_options (FILE *f, const struct uae_prefs *p) { } int audio_parse_option (struct uae_prefs *p, const char *option, const char *value) { return 0; } void set_volume_sound_device (struct sound_data *sd, int volume, int mute) { } void set_volume (int volume, int mute) { set_volume_sound_device (sdp, volume, mute); config_changed = 1; } static int setget_master_volume_linux (int setvolume, int *volume, int *mute) { unsigned int ok = 0; if (setvolume) { ;//set } else { ;//get } return ok; } static int set_master_volume (int volume, int mute) { return setget_master_volume_linux (1, &volume, &mute); } static int get_master_volume (int *volume, int *mute) { *volume = 0; *mute = 0; return setget_master_volume_linux (0, volume, mute); } void master_sound_volume (int dir) { int vol, mute, r; r = get_master_volume (&vol, &mute); if (!r) return; if (dir == 0) mute = mute ? 0 : 1; vol += dir * (65536 / 10); if (vol < 0) vol = 0; if (vol > 65535) vol = 65535; set_master_volume (vol, mute); config_changed = 1; } void sound_mute(int newmute) { write_log("STUB: sound_mute\n"); } fs-uae-2.2.3+dfsg/src/od-fs/threaddep/0000755000175000017500000000000012162366654017613 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/src/od-fs/threaddep/thread.h0000644000175000017500000000254312162366654021237 0ustar glaubitzglaubitz#ifndef THREADDEP_THREAD_H #define THREADDEP_THREAD_H #include typedef fs_semaphore *uae_sem_t; typedef fs_thread *uae_thread_id; static inline int uae_sem_init(uae_sem_t *sem, int dummy, int init) { *sem = fs_semaphore_create(init); return (*sem == 0); } static inline void uae_sem_destroy(uae_sem_t *sem) { return fs_semaphore_destroy(*sem); } static inline int uae_sem_post(uae_sem_t *sem) { return fs_semaphore_post(*sem); } static inline int uae_sem_wait(uae_sem_t *sem) { return fs_semaphore_wait(*sem); } static inline int uae_sem_trywait(uae_sem_t *sem) { return fs_semaphore_try_wait(*sem); } //#define uae_sem_post(PSEM) SDL_SemPost (*PSEM) //#define uae_sem_wait(PSEM) SDL_SemWait (*PSEM) //#define uae_sem_trywait(PSEM) SDL_SemTryWait (*PSEM) //#define uae_sem_getvalue(PSEM) SDL_SemValue (*PSEM) #include "commpipe.h" #define BAD_THREAD NULL #define uae_set_thread_priority(thread_id, pri) //typedef int (*uae_thread_function) (void *); typedef fs_thread_function uae_thread_function; int uae_start_thread (const char *name, uae_thread_function fn, void *arg, uae_thread_id *tid); int uae_wait_thread (uae_thread_id thread); void uae_end_thread (uae_thread_id *thread); /* Do nothing; thread exits if thread function returns. */ #define UAE_THREAD_EXIT do {} while (0) #endif // THREADDEP_THREAD_H fs-uae-2.2.3+dfsg/src/od-fs/machdep/0000755000175000017500000000000012162366654017254 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/src/od-fs/machdep/ppc/0000755000175000017500000000000012162366654020036 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/src/od-fs/machdep/ppc/maccess.h0000644000175000017500000000132312162366654021624 0ustar glaubitzglaubitz /* * UAE - The Un*x Amiga Emulator * * Memory access functions * * Copyright 1996 Bernd Schmidt */ STATIC_INLINE uae_u32 do_get_mem_long (uae_u32 *a) { return *a; } STATIC_INLINE uae_u16 do_get_mem_word (uae_u16 *a) { return *a; } STATIC_INLINE uae_u8 do_get_mem_byte (uae_u8 *a) { return *a; } STATIC_INLINE void do_put_mem_long (uae_u32 *a, uae_u32 v) { *a = v; } STATIC_INLINE void do_put_mem_word (uae_u16 *a, uae_u16 v) { *a = v; } STATIC_INLINE void do_put_mem_byte (uae_u8 *a, uae_u8 v) { *a = v; } #define call_mem_get_func(func, addr) ((*func)(addr)) #define call_mem_put_func(func, addr, v) ((*func)(addr, v)) #define ALIGN_POINTER_TO32(p) ((~(unsigned long)(p)) & 3) fs-uae-2.2.3+dfsg/src/od-fs/machdep/rpt.h0000644000175000017500000000062412162366654020234 0ustar glaubitzglaubitz#ifndef MACHDEP_RPT_H #define MACHDEP_RPT_H #include #include extern int64_t g_uae_epoch; static inline frame_time_t read_processor_time() { // with frame_time_t being int, the value will wrap around in // about 23 days.. return (fs_get_monotonic_time() - g_uae_epoch); //return (fs_get_monotonic_time() - g_uae_epoch) / 100; } #endif // MACHDEP_RPT_H fs-uae-2.2.3+dfsg/src/od-fs/machdep/x86/0000755000175000017500000000000012162366654017701 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/src/od-fs/machdep/x86/maccess.h0000644000175000017500000000766112162366654021502 0ustar glaubitzglaubitz /* * UAE - The Un*x Amiga Emulator * * Memory access functions * * Copyright 1996 Bernd Schmidt */ STATIC_INLINE uae_u32 do_get_mem_long (uae_u32 *a) { uae_u32 retval; __asm__ ("bswap %0" : "=r" (retval) : "0" (*a) : "cc"); return retval; } STATIC_INLINE uae_u32 do_get_mem_word (uae_u16 *a) { uae_u32 retval; #ifdef X86_PPRO_OPT __asm__ ("movzwl %w1,%k0\n\tshll $16,%k0\n\tbswap %k0\n" : "=&r" (retval) : "m" (*a) : "cc"); #else __asm__ ("xorl %k0,%k0\n\tmovw %w1,%w0\n\trolw $8,%w0" : "=&r" (retval) : "m" (*a) : "cc"); #endif return retval; } #define do_get_mem_byte(a) ((uae_u32)*((uae_u8 *)a)) STATIC_INLINE void do_put_mem_long (uae_u32 *a, uae_u32 v) { __asm__ ("bswap %0" : "=r" (v) : "0" (v) : "cc"); *a = v; } STATIC_INLINE void do_put_mem_word (uae_u16 *a, uae_u32 v) { #ifdef X86_PPRO_OPT __asm__ ("bswap %0" : "=&r" (v) : "0" (v << 16) : "cc"); #else __asm__ ("rolw $8,%w0" : "=r" (v) : "0" (v) : "cc"); #endif *a = v; } #define do_put_mem_byte(a,v) (*(uae_u8 *)(a) = (v)) #define call_mem_get_func(func,addr) ((*func)(addr)) #define call_mem_put_func(func,addr,v) ((*func)(addr,v)) #undef NO_INLINE_MEMORY_ACCESS #undef MD_HAVE_MEM_1_FUNCS #ifdef MD_HAVE_MEM_1_FUNCS STATIC_INLINE uae_u32 longget_1 (uae_cptr addr) { uae_u32 result; __asm__ ("andl $0x00FFFFFF,%1\n" "\tcmpb $0,(%1,%3)\n" "\tleal 1f,%%ecx\n" "\tje longget_stub\n" "\taddl address_space,%1\n" "\tmovl (%1),%0\n" "\tbswap %0\n" "\t1:" : "=c" (result), "=d" (addr) : "1" (addr), "r" (good_address_map) : "cc"); return result; } STATIC_INLINE uae_u32 wordget_1 (uae_cptr addr) { uae_u32 result; __asm__ ("andl $0x00FFFFFF,%1\n" "\tcmpb $0,(%1,%3)\n" "\tleal 1f,%%ecx\n" "\tje wordget_stub\n" "\taddl address_space,%1\n" "\tmovzwl (%1),%0\n" "\trolw $8,%w0\n" "\t1:" : "=c" (result), "=d" (addr) : "1" (addr), "r" (good_address_map) : "cc"); return result; } STATIC_INLINE uae_u32 byteget_1 (uae_cptr addr) { uae_u32 result; __asm__ ("andl $0x00FFFFFF,%1\n" "\tcmpb $0,(%1,%3)\n" "\tleal 1f,%%ecx\n" "\tje byteget_stub\n" "\taddl address_space,%1\n" "\tmovzbl (%1),%0\n" "\t1:" : "=c" (result), "=d" (addr) : "1" (addr), "r" (good_address_map) : "cc"); return result; } STATIC_INLINE void longput_1 (uae_cptr addr, uae_u32 l) { __asm__ __volatile__("andl $0x00FFFFFF,%0\n" "\tcmpb $0,(%0,%3)\n" "\tleal 1f,%%ecx\n" "\tje longput_stub\n" "\taddl address_space,%0\n" "\tbswap %1\n" "\tmovl %1,(%0)\n" "\t1:" : "=d" (addr), "=b" (l) : "0" (addr), "r" (good_address_map), "1" (l) : "cc", "memory", "ecx"); } STATIC_INLINE void wordput_1 (uae_cptr addr, uae_u32 w) { __asm__ __volatile__("andl $0x00FFFFFF,%0\n" "\tcmpb $0,(%0,%3)\n" "\tleal 1f,%%ecx\n" "\tje wordput_stub\n" "\taddl address_space,%0\n" "\trolw $8,%1\n" "\tmovw %w1,(%0)\n" "\t1:" : "=d" (addr), "=b" (w) : "0" (addr), "r" (good_address_map), "1" (w) : "cc", "memory", "ecx"); } STATIC_INLINE void byteput_1 (uae_cptr addr, uae_u32 b) { __asm__ __volatile__("andl $0x00FFFFFF,%0\n" "\tcmpb $0,(%0,%3)\n" "\tleal 1f,%%ecx\n" "\tje byteput_stub\n" "\taddl address_space,%0\n" "\tmovb %b1,(%0)\n" "\t1:" : "=d" (addr), "=b" (b) : "0" (addr), "r" (good_address_map), "1" (b) : "cc", "memory", "ecx"); } #endif #define ALIGN_POINTER_TO32(p) ((~(unsigned long)(p)) & 3) /* Not the best place for this, but then there's no good place for a kludge * like this... */ #define HAVE_UAE_U24 typedef struct { unsigned char a, b, c; } __attribute__ ((packed)) uae_u24; STATIC_INLINE uae_u24 uae24_convert (uae_u32 v) { return *(uae_u24 *)&v; } fs-uae-2.2.3+dfsg/src/od-fs/machdep/machdep.h0000644000175000017500000000073212162366654021030 0ustar glaubitzglaubitz/* * E-UAE - The portable Amiga Emulator * * Processor-specific definitions */ #ifndef MACHDEP_MACHDEP_H #define MACHDEP_MACHDEP_H #include #define MACHDEP_X86 #define MACHDEP_NAME "x86" #define HAVE_MACHDEP_TIMER //typedef uae_s64 frame_time_t; //typedef unsigned long frame_time_t; //typedef int64_t frame_time_t; //#define MAX_FRAME_TIME 9223372036854775807LL // frame_time_t is often cast to int in the code... typedef int frame_time_t; #endif fs-uae-2.2.3+dfsg/src/od-fs/machdep/maccess.h0000644000175000017500000000022212162366654021037 0ustar glaubitzglaubitz#ifdef __ARM_EABI__ #include "machdep/arm/maccess.h" #elif __ppc__ #include "machdep/ppc/maccess.h" #else #include "machdep/x86/maccess.h" #endif fs-uae-2.2.3+dfsg/src/od-fs/machdep/m68k.h0000644000175000017500000000753512162366654020224 0ustar glaubitzglaubitz/* * UAE - The Un*x Amiga Emulator * * MC68000 emulation - machine dependent bits * * Copyright 1996 Bernd Schmidt * Copyright 2004-2007 Richard Drummond */ /* * Machine dependent structure for holding the 68k CCR flags */ struct flag_struct { unsigned int cznv; unsigned int x; }; extern struct flag_struct regflags; /* * The bits in the cznv field in the above structure are assigned to * allow the easy mirroring of the x86 condition flags. (For example, * from the AX register - the x86 overflow flag can be copied to AL * with a setto %AL instr and the other flags copied to AH with an * lahf instr). * * The 68k CZNV flags are thus assigned in cznv as: * * <--AL--> <--AH--> * 76543210 FEDCBA98 --------- --------- * xxxxxxxV NZxxxxxC xxxxxxxxx xxxxxxxxx */ #define FLAGBIT_N 15 #define FLAGBIT_Z 14 #define FLAGBIT_C 8 #define FLAGBIT_V 0 #define FLAGBIT_X 8 #define FLAGVAL_N (1 << FLAGBIT_N) #define FLAGVAL_Z (1 << FLAGBIT_Z) #define FLAGVAL_C (1 << FLAGBIT_C) #define FLAGVAL_V (1 << FLAGBIT_V) #define FLAGVAL_X (1 << FLAGBIT_X) #define SET_ZFLG(y) (regflags.cznv = (regflags.cznv & ~FLAGVAL_Z) | (((y) ? 1 : 0) << FLAGBIT_Z)) #define SET_CFLG(y) (regflags.cznv = (regflags.cznv & ~FLAGVAL_C) | (((y) ? 1 : 0) << FLAGBIT_C)) #define SET_VFLG(y) (regflags.cznv = (regflags.cznv & ~FLAGVAL_V) | (((y) ? 1 : 0) << FLAGBIT_V)) #define SET_NFLG(y) (regflags.cznv = (regflags.cznv & ~FLAGVAL_N) | (((y) ? 1 : 0) << FLAGBIT_N)) #define SET_XFLG(y) (regflags.x = ((y) ? 1 : 0) << FLAGBIT_X) #define GET_ZFLG() ((regflags.cznv >> FLAGBIT_Z) & 1) #define GET_CFLG() ((regflags.cznv >> FLAGBIT_C) & 1) #define GET_VFLG() ((regflags.cznv >> FLAGBIT_V) & 1) #define GET_NFLG() ((regflags.cznv >> FLAGBIT_N) & 1) #define GET_XFLG() ((regflags.x >> FLAGBIT_X) & 1) #define CLEAR_CZNV() (regflags.cznv = 0) #define GET_CZNV (regflags.cznv) #define IOR_CZNV(X) (regflags.cznv |= (X)) #define SET_CZNV(X) (regflags.cznv = (X)) #define COPY_CARRY() (regflags.x = regflags.cznv) /* * Test CCR condition */ STATIC_INLINE int cctrue (int cc) { uae_u32 cznv = regflags.cznv; switch (cc) { case 0: return 1; /* T */ case 1: return 0; /* F */ case 2: return (cznv & (FLAGVAL_C | FLAGVAL_Z)) == 0; /* !CFLG && !ZFLG HI */ case 3: return (cznv & (FLAGVAL_C | FLAGVAL_Z)) != 0; /* CFLG || ZFLG LS */ case 4: return (cznv & FLAGVAL_C) == 0; /* !CFLG CC */ case 5: return (cznv & FLAGVAL_C) != 0; /* CFLG CS */ case 6: return (cznv & FLAGVAL_Z) == 0; /* !ZFLG NE */ case 7: return (cznv & FLAGVAL_Z) != 0; /* ZFLG EQ */ case 8: return (cznv & FLAGVAL_V) == 0; /* !VFLG VC */ case 9: return (cznv & FLAGVAL_V) != 0; /* VFLG VS */ case 10: return (cznv & FLAGVAL_N) == 0; /* !NFLG PL */ case 11: return (cznv & FLAGVAL_N) != 0; /* NFLG MI */ case 12: return (((cznv << (FLAGBIT_N - FLAGBIT_V)) ^ cznv) & FLAGVAL_N) == 0; /* NFLG == VFLG GE */ case 13: return (((cznv << (FLAGBIT_N - FLAGBIT_V)) ^ cznv) & FLAGVAL_N) != 0; /* NFLG != VFLG LT */ case 14: cznv &= (FLAGVAL_N | FLAGVAL_Z | FLAGVAL_V); /* ZFLG && (NFLG == VFLG) GT */ return (((cznv << (FLAGBIT_N - FLAGBIT_V)) ^ cznv) & (FLAGVAL_N | FLAGVAL_Z)) == 0; case 15: cznv &= (FLAGVAL_N | FLAGVAL_Z | FLAGVAL_V); /* ZFLG && (NFLG != VFLG) LE */ return (((cznv << (FLAGBIT_N - FLAGBIT_V)) ^ cznv) & (FLAGVAL_N | FLAGVAL_Z)) != 0; } abort (); return 0; } #define USE_X86_FPUCW 1 fs-uae-2.2.3+dfsg/src/od-fs/machdep/arm/0000755000175000017500000000000012162366654020033 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/src/od-fs/machdep/arm/maccess.h0000644000175000017500000000216712162366654021630 0ustar glaubitzglaubitz /* * UAE - The Un*x Amiga Emulator * * Memory access functions * * Copyright 1996 Bernd Schmidt */ static __inline__ uint32_t do_get_mem_long(uint32_t *a) { uint8_t *b = (uint8_t *)a; return (*b << 24) | (*(b+1) << 16) | (*(b+2) << 8) | (*(b+3)); } static __inline__ uint16_t do_get_mem_word(uint16_t *a) { uint8_t *b = (uint8_t *)a; return (*b << 8) | (*(b+1)); } static __inline__ uint8_t do_get_mem_byte(uint8_t *a) { return *a; } static __inline__ void do_put_mem_long(uint32_t *a, uint32_t v) { uint8_t *b = (uint8_t *)a; *b = v >> 24; *(b+1) = v >> 16; *(b+2) = v >> 8; *(b+3) = v; } static __inline__ void do_put_mem_word(uint16_t *a, uint16_t v) { uint8_t *b = (uint8_t *)a; *b = v >> 8; *(b+1) = v; } static __inline__ void do_put_mem_byte(uint8_t *a, uint8_t v) { *a = v; } #define ALIGN_POINTER_TO32(p) ((~(unsigned long)(p)) & 3) #define call_mem_get_func(func, addr) ((*func)(addr)) #define call_mem_put_func(func, addr, v) ((*func)(addr, v)) #undef USE_MAPPED_MEMORY #undef CAN_MAP_MEMORY #undef NO_INLINE_MEMORY_ACCESS #undef MD_HAVE_MEM_1_FUNCS fs-uae-2.2.3+dfsg/src/od-fs/CapsAPI.h0000644000175000017500000001607412162366655017255 0ustar glaubitzglaubitz#ifndef CAPSAPI_H #define CAPSAPI_H #define CAPS_FILEEXT "ipf" #define CAPS_FILEPFX ".ipf" // Flags provided for locking, in order: // 0: re-align data as index synced recording // 1: decode track to word aligned size // 2: generate cell density for variable density tracks // 3: generate density for automatically sized cells // 4: generate density for unformatted cells // 5: generate unformatted data // 6: generate unformatted data, that changes each revolution // 7: directly use source memory buffer supplied with LockImageMemory // 8: flakey/weak data is created on one revolution, updated with each lock // 9: ...Info.type holds the expected structure type // 10: alternate density map as fractions // 11: overlap position is in bits // 12: tracklen is in bits, and the track buffer is bit sized // 13: track overlap or weak data is never updated, just initialized // 14: set weak bit generator seed value #define DI_LOCK_INDEX DF_0 #define DI_LOCK_ALIGN DF_1 #define DI_LOCK_DENVAR DF_2 #define DI_LOCK_DENAUTO DF_3 #define DI_LOCK_DENNOISE DF_4 #define DI_LOCK_NOISE DF_5 #define DI_LOCK_NOISEREV DF_6 #define DI_LOCK_MEMREF DF_7 #define DI_LOCK_UPDATEFD DF_8 #define DI_LOCK_TYPE DF_9 #define DI_LOCK_DENALT DF_10 #define DI_LOCK_OVLBIT DF_11 #define DI_LOCK_TRKBIT DF_12 #define DI_LOCK_NOUPDATE DF_13 #define DI_LOCK_SETWSEED DF_14 #define CAPS_MAXPLATFORM 4 #define CAPS_MTRS 5 #define CTIT_FLAG_FLAKEY DF_31 #define CTIT_MASK_TYPE 0xff #pragma pack(push, 1) // decoded caps date.time struct CapsDateTimeExt { UDWORD year; UDWORD month; UDWORD day; UDWORD hour; UDWORD min; UDWORD sec; UDWORD tick; }; typedef struct CapsDateTimeExt *PCAPSDATETIMEEXT; // library version information block struct CapsVersionInfo { UDWORD type; // library type UDWORD release; // release ID UDWORD revision; // revision ID UDWORD flag; // supported flags }; typedef struct CapsVersionInfo *PCAPSVERSIONINFO; // disk image information block struct CapsImageInfo { UDWORD type; // image type UDWORD release; // release ID UDWORD revision; // release revision ID UDWORD mincylinder; // lowest cylinder number UDWORD maxcylinder; // highest cylinder number UDWORD minhead; // lowest head number UDWORD maxhead; // highest head number struct CapsDateTimeExt crdt; // image creation date.time UDWORD platform[CAPS_MAXPLATFORM]; // intended platform(s) }; typedef struct CapsImageInfo *PCAPSIMAGEINFO; // disk track information block struct CapsTrackInfo { UDWORD type; // track type UDWORD cylinder; // cylinder# UDWORD head; // head# UDWORD sectorcnt; // available sectors UDWORD sectorsize; // sector size UDWORD trackcnt; // track variant count PUBYTE trackbuf; // track buffer memory UDWORD tracklen; // track buffer memory length PUBYTE trackdata[CAPS_MTRS]; // track data pointer if available UDWORD tracksize[CAPS_MTRS]; // track data size UDWORD timelen; // timing buffer length PUDWORD timebuf; // timing buffer }; typedef struct CapsTrackInfo *PCAPSTRACKINFO; // disk track information block struct CapsTrackInfoT1 { UDWORD type; // track type UDWORD cylinder; // cylinder# UDWORD head; // head# UDWORD sectorcnt; // available sectors UDWORD sectorsize; // sector size PUBYTE trackbuf; // track buffer memory UDWORD tracklen; // track buffer memory length UDWORD timelen; // timing buffer length PUDWORD timebuf; // timing buffer SDWORD overlap; // overlap position }; typedef struct CapsTrackInfoT1 *PCAPSTRACKINFOT1; // disk track information block struct CapsTrackInfoT2 { UDWORD type; // track type UDWORD cylinder; // cylinder# UDWORD head; // head# UDWORD sectorcnt; // available sectors UDWORD sectorsize; // sector size, unused PUBYTE trackbuf; // track buffer memory UDWORD tracklen; // track buffer memory length UDWORD timelen; // timing buffer length PUDWORD timebuf; // timing buffer SDWORD overlap; // overlap position UDWORD startbit; // start position of the decoding UDWORD wseed; // weak bit generator data UDWORD weakcnt; // number of weak data areas }; typedef struct CapsTrackInfoT2 *PCAPSTRACKINFOT2; // disk sector information block struct CapsSectorInfo { UDWORD descdatasize; // data size in bits from IPF descriptor UDWORD descgapsize; // gap size in bits from IPF descriptor UDWORD datasize; // data size in bits from decoder UDWORD gapsize; // gap size in bits from decoder UDWORD datastart; // data start position in bits from decoder UDWORD gapstart; // gap start position in bits from decoder UDWORD gapsizews0; // gap size before write splice UDWORD gapsizews1; // gap size after write splice UDWORD gapws0mode; // gap size mode before write splice UDWORD gapws1mode; // gap size mode after write splice UDWORD celltype; // bitcell type UDWORD enctype; // encoder type }; typedef struct CapsSectorInfo *PCAPSSECTORINFO; // disk data information block struct CapsDataInfo { UDWORD type; // data type UDWORD start; // start position UDWORD size; // size in bits }; typedef struct CapsDataInfo *PCAPSDATAINFO; #pragma pack(pop) // CapsImageInfo.image type enum { ciitNA=0, // invalid image type ciitFDD // floppy disk }; // CapsImageInfo.platform IDs, not about configuration, but intended use enum { ciipNA=0, // invalid platform (dummy entry) ciipAmiga, ciipAtariST, ciipPC, ciipAmstradCPC, ciipSpectrum, ciipSamCoupe, ciipArchimedes, ciipC64, ciipAtari8 }; // CapsTrackInfo.track type enum { ctitNA=0, // invalid type ctitNoise, // cells are unformatted (random size) ctitAuto, // automatic cell size, according to track size ctitVar // variable density }; // CapsSectorInfo.bitcell type enum { csicNA=0, // invalid cell type csic2us // 2us cells }; // CapsSectorInfo.encoder type enum { csieNA=0, // undefined encoder csieMFM, // MFM csieRaw // no encoder used, test data only }; // CapsSectorInfo.gap size mode enum { csiegmFixed=0, // fixed size, can't be changed csiegmAuto, // size can be changed, resize information calculated automatically csiegmResize // size can be changed, resize information is scripted }; // CapsDataInfo.data type enum { cditNA=0, // undefined cditWeak // weak bits }; // CAPSGetInfo inftype enum { cgiitNA=0, // illegal cgiitSector, // CapsSectorInfo cgiitWeak // CapsDataInfo, weak bits }; // image error status enum { imgeOk=0, imgeUnsupported, imgeGeneric, imgeOutOfRange, imgeReadOnly, imgeOpen, imgeType, imgeShort, imgeTrackHeader, imgeTrackStream, imgeTrackData, imgeDensityHeader, imgeDensityStream, imgeDensityData, imgeIncompatible, imgeUnsupportedType, imgeBadBlockType, imgeBadBlockSize, imgeBadDataStart, imgeBufferShort }; #endif fs-uae-2.2.3+dfsg/src/od-fs/cda_play.h0000644000175000017500000000070312162366654017600 0ustar glaubitzglaubitzclass cda_audio { private: int bufsize; int volume[2]; bool playing; bool active; int buffer_ids[2]; public: uae_u8 *buffers[2]; #if 0 uae_thread_id mThread; volatile int mBufferDone[2]; int mStopThread; #endif int num_sectors; cda_audio(int num_sectors); ~cda_audio(); void setvolume(int master, int left, int right); bool play(int bufnum); void wait(void); void wait(int bufnum); }; fs-uae-2.2.3+dfsg/src/od-fs/serial_host.cpp0000644000175000017500000004052612162366655020703 0ustar glaubitzglaubitz/* * UAE - The Un*x Amiga Emulator * * Serial Line Emulation * * (c) 1996, 1997 Stefan Reinauer * (c) 1997 Christian Schmitt * */ #include "sysconfig.h" #ifdef SERIAL_ENET #include "enet/enet.h" #endif #include "sysdeps.h" #include "options.h" #include "uae.h" #include "uae/memory.h" #include "custom.h" #include "events.h" #include "newcpu.h" #include "cia.h" #include "serial.h" #include "enforcer.h" #include "od-fs/parser.h" #define SERIALLOGGING 0 #define SERIALDEBUG 0 /* 0, 1, 2 3 */ #define SERIALHSDEBUG 0 #define MODEMTEST 0 /* 0 or 1 */ static int data_in_serdat; /* new data written to SERDAT */ static int data_in_serdatr; /* new data received */ static int data_in_sershift; /* data transferred from SERDAT to shift register */ static uae_u16 serdatshift; /* serial shift register */ static int ovrun; static int dtr; static int serial_period_hsyncs, serial_period_hsync_counter; static int ninebit; int serdev; int seriallog = 0, log_sercon = 0; int serial_enet; void serial_open (void); void serial_close (void); uae_u16 serper, serdat, serdatr; static int allowed_baudrates[] = { 0, 110, 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 31400, 38400, 57600, 115200, 128000, 256000, -1 }; void SERPER (uae_u16 w) { int baud = 0, i, per; static int warned; if (serper == w) /* don't set baudrate if it's already ok */ return; ninebit = 0; serper = w; if (w & 0x8000) ninebit = 1; w &= 0x7fff; if (w < 13) w = 13; per = w; if (per == 0) per = 1; per = 3546895 / (per + 1); if (per <= 0) per = 1; i = 0; while (allowed_baudrates[i] >= 0 && per > allowed_baudrates[i] * 100 / 97) i++; baud = allowed_baudrates[i]; serial_period_hsyncs = (((serper & 0x7fff) + 1) * 10) / maxhpos; if (serial_period_hsyncs <= 0) serial_period_hsyncs = 1; #if SERIALLOGGING > 0 serial_period_hsyncs = 1; seriallog = 1; #endif if (log_sercon) { serial_period_hsyncs = 1; seriallog = 1; } serial_period_hsync_counter = 0; write_log (_T("SERIAL: period=%d, baud=%d, hsyncs=%d, bits=%d, PC=%x\n"), w, baud, serial_period_hsyncs, ninebit ? 9 : 8, M68K_GETPC); if (ninebit) baud *= 2; if (currprefs.serial_direct) { if (baud != 31400 && baud < 115200) baud = 115200; serial_period_hsyncs = 1; } #ifdef SERIAL_PORT setbaud (baud); #endif } static TCHAR dochar (int v) { v &= 0xff; if (v >= 32 && v < 127) return v; if (v == 10) return 10; return '.'; } static void checkreceive_enet (int mode) { #ifdef SERIAL_ENET static uae_u32 lastchartime; struct timeval tv; uae_u16 recdata; if (!enet_readseravail ()) return; if (data_in_serdatr) { /* probably not needed but there may be programs that expect OVRUNs.. */ gettimeofday (&tv, NULL); if (tv.tv_sec > lastchartime) { ovrun = 1; INTREQ (0x8000 | 0x0800); while (enet_readser (&recdata)); write_log (_T("SERIAL: overrun\n")); } return; } if (!enet_readser (&recdata)) return; serdatr = recdata & 0x1ff; if (recdata & 0x200) serdatr |= 0x200; else serdatr |= 0x100; gettimeofday (&tv, NULL); lastchartime = tv.tv_sec + 5; data_in_serdatr = 1; serial_check_irq (); #if SERIALDEBUG > 2 write_log (_T("SERIAL: received %02X (%c)\n"), serdatr & 0xff, dochar (serdatr)); #endif #endif } static void checkreceive_serial (int mode) { #ifdef SERIAL_PORT static uae_u32 lastchartime; static int ninebitdata; struct timeval tv; int recdata; if (!readseravail ()) return; if (data_in_serdatr) { /* probably not needed but there may be programs that expect OVRUNs.. */ gettimeofday (&tv, NULL); if (tv.tv_sec > lastchartime) { ovrun = 1; INTREQ (0x8000 | 0x0800); while (readser (&recdata)); write_log (_T("SERIAL: overrun\n")); } return; } if (ninebit) { for (;;) { if (!readser (&recdata)) return; if (ninebitdata) { serdatr = (ninebitdata & 1) << 8; serdatr |= recdata; serdatr |= 0x200; ninebitdata = 0; break; } else { ninebitdata = recdata; if ((ninebitdata & ~1) != 0xa8) { write_log (_T("SERIAL: 9-bit serial emulation sync lost, %02X != %02X\n"), ninebitdata & ~1, 0xa8); ninebitdata = 0; return; } continue; } } } else { if (!readser (&recdata)) return; serdatr = recdata; serdatr |= 0x100; } gettimeofday (&tv, NULL); lastchartime = tv.tv_sec + 5; data_in_serdatr = 1; serial_check_irq (); #if SERIALDEBUG > 2 write_log (_T("SERIAL: received %02X (%c)\n"), serdatr & 0xff, dochar (serdatr)); #endif #endif } static void checksend (int mode) { int bufstate = 0; #ifdef SERIAL_PORT bufstate = checkserwrite (); #endif #ifdef SERIAL_ENET if (serial_enet) bufstate = 1; #endif if (!data_in_serdat && !data_in_sershift) return; if (data_in_sershift && mode == 0 && bufstate) data_in_sershift = 0; if (data_in_serdat && !data_in_sershift) { data_in_sershift = 1; serdatshift = serdat; #ifdef SERIAL_ENET if (serial_enet) { enet_writeser (serdatshift); } #endif #ifdef SERIAL_PORT if (ninebit) writeser (((serdatshift >> 8) & 1) | 0xa8); writeser (serdatshift); #endif data_in_serdat = 0; INTREQ (0x8000 | 0x0001); #if SERIALDEBUG > 2 write_log (_T("SERIAL: send %04X (%c)\n"), serdatshift, dochar (serdatshift)); #endif } } void serial_hsynchandler (void) { #ifdef AHI extern void hsyncstuff(void); hsyncstuff(); #endif if (serial_period_hsyncs == 0) return; serial_period_hsync_counter++; if (serial_period_hsyncs == 1 || (serial_period_hsync_counter % (serial_period_hsyncs - 1)) == 0) { checkreceive_serial (0); checkreceive_enet (0); } if ((serial_period_hsync_counter % serial_period_hsyncs) == 0) checksend (0); } void SERDAT (uae_u16 w) { serdat = w; if (!(w & 0x3ff)) { #if SERIALDEBUG > 1 write_log (_T("SERIAL: zero serial word written?! PC=%x\n"), M68K_GETPC); #endif return; } #if SERIALDEBUG > 1 if (data_in_serdat) { write_log (_T("SERIAL: program wrote to SERDAT but old byte wasn't fetched yet\n")); } #endif if (seriallog) write_log (_T("%c"), dochar (w)); if (serper == 372) { #ifdef ENFORCER if (enforcermode & 2) { console_out_f (_T("%c"), dochar (w)); if (w == 256 + 10) console_out (_T("\n")); } #endif } data_in_serdat = 1; if (!data_in_sershift) checksend (1); #if SERIALDEBUG > 2 write_log (_T("SERIAL: wrote 0x%04x (%c) PC=%x\n"), w, dochar (w), M68K_GETPC); #endif return; } uae_u16 SERDATR (void) { serdatr &= 0x03ff; if (!data_in_serdat) serdatr |= 0x2000; if (!data_in_sershift) serdatr |= 0x1000; if (data_in_serdatr) serdatr |= 0x4000; if (ovrun) serdatr |= 0x8000; #if SERIALDEBUG > 2 write_log (_T("SERIAL: read 0x%04x (%c) %x\n"), serdatr, dochar (serdatr), M68K_GETPC); #endif ovrun = 0; data_in_serdatr = 0; return serdatr; } void serial_check_irq (void) { if (data_in_serdatr) INTREQ_0 (0x8000 | 0x0800); } void serial_dtr_on (void) { #if SERIALHSDEBUG > 0 write_log ( "SERIAL: DTR on\n" ); #endif dtr = 1; if (currprefs.serial_demand) serial_open (); #ifdef SERIAL_PORT setserstat(TIOCM_DTR, dtr); #endif } void serial_dtr_off (void) { #if SERIALHSDEBUG > 0 write_log ( "SERIAL: DTR off\n" ); #endif dtr = 0; #ifdef SERIAL_PORT if (currprefs.serial_demand) serial_close (); setserstat(TIOCM_DTR, dtr); #endif } void serial_flush_buffer (void) { } static uae_u8 oldserbits; static void serial_status_debug (TCHAR *s) { #if SERIALHSDEBUG > 1 write_log (_T("%s: DTR=%d RTS=%d CD=%d CTS=%d DSR=%d\n"), s, (oldserbits & 0x80) ? 0 : 1, (oldserbits & 0x40) ? 0 : 1, (oldserbits & 0x20) ? 0 : 1, (oldserbits & 0x10) ? 0 : 1, (oldserbits & 0x08) ? 0 : 1); #endif } uae_u8 serial_readstatus (uae_u8 dir) { int status = 0; uae_u8 serbits = oldserbits; #ifdef SERIAL_PORT getserstat (&status); #endif if (!(status & TIOCM_CAR)) { if (!(serbits & 0x20)) { serbits |= 0x20; #if SERIALHSDEBUG > 0 write_log ( "SERIAL: CD off\n" ); #endif } } else { if (serbits & 0x20) { serbits &= ~0x20; #if SERIALHSDEBUG > 0 write_log ( "SERIAL: CD on\n" ); #endif } } if (!(status & TIOCM_DSR)) { if (!(serbits & 0x08)) { serbits |= 0x08; #if SERIALHSDEBUG > 0 write_log ( "SERIAL: DSR off\n" ); #endif } } else { if (serbits & 0x08) { serbits &= ~0x08; #if SERIALHSDEBUG > 0 write_log ( "SERIAL: DSR on\n" ); #endif } } if (!(status & TIOCM_CTS)) { if (!(serbits & 0x10)) { serbits |= 0x10; #if SERIALHSDEBUG > 0 write_log ( "SERIAL: CTS off\n" ); #endif } } else { if (serbits & 0x10) { serbits &= ~0x10; #if SERIALHSDEBUG > 0 write_log ( "SERIAL: CTS on\n" ); #endif } } serbits &= 0x08 | 0x10 | 0x20; oldserbits &= ~(0x08 | 0x10 | 0x20); oldserbits |= serbits; serial_status_debug (_T("read")); return oldserbits; } uae_u8 serial_writestatus (uae_u8 newstate, uae_u8 dir) { static int logcnt = 10; #ifdef SERIAL_PORT if (((oldserbits ^ newstate) & 0x80) && (dir & 0x80)) { if (newstate & 0x80) serial_dtr_off(); else serial_dtr_on(); } if (!currprefs.serial_hwctsrts && (dir & 0x40)) { if ((oldserbits ^ newstate) & 0x40) { if (newstate & 0x40) { setserstat (TIOCM_RTS, 0); #if SERIALHSDEBUG > 0 write_log (_T("SERIAL: RTS cleared\n")); #endif } else { setserstat (TIOCM_RTS, 1); #if SERIALHSDEBUG > 0 write_log (_T("SERIAL: RTS set\n")); #endif } } } #if 0 /* CIA io-pins can be read even when set to output.. */ if ((newstate & 0x20) != (oldserbits & 0x20) && (dir & 0x20)) write_log (_T("SERIAL: warning, program tries to use CD as an output!\n")); if ((newstate & 0x10) != (oldserbits & 0x10) && (dir & 0x10)) write_log (_T("SERIAL: warning, program tries to use CTS as an output!\n")); if ((newstate & 0x08) != (oldserbits & 0x08) && (dir & 0x08)) write_log (_T("SERIAL: warning, program tries to use DSR as an output!\n")); #endif if (logcnt > 0) { if (((newstate ^ oldserbits) & 0x40) && !(dir & 0x40)) { write_log (_T("SERIAL: warning, program tries to use RTS as an input! PC=%x\n"), M68K_GETPC); logcnt--; } if (((newstate ^ oldserbits) & 0x80) && !(dir & 0x80)) { write_log (_T("SERIAL: warning, program tries to use DTR as an input! PC=%x\n"), M68K_GETPC); logcnt--; } } #endif oldserbits &= ~(0x80 | 0x40); newstate &= 0x80 | 0x40; oldserbits |= newstate; serial_status_debug (_T("write")); return oldserbits; } static int enet_is (TCHAR *name) { return !_tcsnicmp (name, _T("ENET:"), 5); } void serial_open (void) { #ifdef SERIAL_PORT if (serdev) return; serper = 0; #ifdef SERIAL_ENET if (enet_is (currprefs.sername)) { enet_open (currprefs.sername); } else { #endif if(!openser (currprefs.sername)) { write_log (_T("SERIAL: Could not open device %s\n"), currprefs.sername); return; } #ifdef SERIAL_ENET } #endif serdev = 1; #endif } void serial_close (void) { #ifdef SERIAL_PORT closeser (); #ifdef SERIAL_ENET enet_close (); #endif serdev = 0; #endif } void serial_init (void) { #ifdef SERIAL_PORT if (!currprefs.use_serial) return; if (!currprefs.serial_demand) serial_open (); #endif } void serial_exit (void) { #ifdef SERIAL_PORT serial_close (); /* serial_close can always be called because it */ #endif dtr = 0; /* just closes *opened* filehandles which is ok */ oldserbits = 0; /* when exiting. */ } void serial_uartbreak (int v) { #ifdef SERIAL_PORT serialuartbreak (v); #endif } #ifdef SERIAL_ENET static ENetHost *enethost, *enetclient; static ENetPeer *enetpeer, *enet; static int enetmode; static uae_u16 enet_receive[256]; static int enet_receive_off_w, enet_receive_off_r; static void enet_service (int serveronly) { ENetEvent evt; ENetAddress address; int got; if (enetmode == 0) return; got = 1; while (got) { got = 0; if (enetmode > 0) { while (enet_host_service (enethost, &evt, 0)) { got = 1; switch (evt.type) { case ENET_EVENT_TYPE_CONNECT: address = evt.peer->address; write_log (_T("ENET_SERVER: connect from %d.%d.%d.%d:%u\n"), (address.host >> 0) & 0xff, (address.host >> 8) & 0xff, (address.host >> 16) & 0xff, (address.host >> 24) & 0xff, address.port); evt.peer->data = 0; break; case ENET_EVENT_TYPE_RECEIVE: { uae_u8 *p = evt.packet->data; int len = evt.packet->dataLength; if (len == 6 && !memcmp (p, "UAE_", 4)) { if (((enet_receive_off_w + 1) & 0xff) != enet_receive_off_r) { enet_receive[enet_receive_off_w++] = (p[4] << 8) | p[5]; } } enet_packet_destroy (evt.packet); } break; case ENET_EVENT_TYPE_DISCONNECT: address = evt.peer->address; write_log (_T("ENET_SERVER: disconnect from %d.%d.%d.%d:%u\n"), (address.host >> 0) & 0xff, (address.host >> 8) & 0xff, (address.host >> 16) & 0xff, (address.host >> 24) & 0xff, address.port); break; } } } if (!serveronly) { while (enet_host_service (enetclient, &evt, 0)) { got = 1; switch (evt.type) { default: write_log (_T("ENET_CLIENT: %d\n"), evt.type); break; } } } } } static void enet_disconnect (ENetPeer *peer) { ENetEvent evt; int cnt = 30; if (!peer) return; write_log (_T("ENET_CLIENT: disconnecting..\n")); enet_peer_disconnect (peer, 0); while (cnt-- > 0) { enet_service (1); while (enet_host_service (enetclient, &evt, 100) > 0) { switch (evt.type) { case ENET_EVENT_TYPE_RECEIVE: enet_packet_destroy (evt.packet); break; case ENET_EVENT_TYPE_DISCONNECT: write_log (_T("ENET_CLIENT: disconnection succeeded\n")); enetpeer = NULL; return; } } } write_log (_T("ENET_CLIENT: disconnection forced\n")); enet_peer_reset (enetpeer); enetpeer = NULL; } void enet_close (void) { enet_disconnect (enetpeer); if (enetclient) enet_host_destroy (enetclient); enetclient = NULL; if (enethost) enet_host_destroy (enethost); enethost = NULL; serial_enet = 0; enetmode = 0; } int enet_open (TCHAR *name) { ENetAddress address; ENetPacket *p; static int initialized; uae_u8 data[16]; int cnt; if (!initialized) { int err = enet_initialize (); if (err) { write_log (_T("ENET: initialization failed: %d\n"), err); return 0; } initialized = 1; } enet_close (); enetmode = 0; if (!_tcsnicmp (name, _T("ENET:H"), 6)) { address.host = ENET_HOST_ANY; address.port = 1234; enethost = enet_host_create (&address, 2, 0, 0); if (enethost == NULL) { write_log (_T("ENET_SERVER: enet_host_create(server) failed\n")); enet_close (); return 0; } write_log (_T("ENET_SERVER: server created\n")); enetmode = 1; } else { enetmode = -1; } enetclient = enet_host_create (NULL, 1, 0, 0); if (enetclient == NULL) { write_log (_T("ENET_CLIENT: enet_host_create(client) failed\n")); enet_close (); return 0; } write_log (_T("ENET_CLIENT: client created\n")); enet_address_set_host (&address, enetmode > 0 ? "127.0.0.1" : "192.168.0.10"); address.port = 1234; enetpeer = enet_host_connect (enetclient, &address, 2); if (enetpeer == NULL) { write_log (_T("ENET_CLIENT: connection to host %d.%d.%d.%d:%d failed\n"), (address.host >> 0) & 0xff, (address.host >> 8) & 0xff, (address.host >> 16) & 0xff, (address.host >> 24) & 0xff, address.port); enet_host_destroy (enetclient); enetclient = NULL; } write_log (_T("ENET_CLIENT: connecting to %d.%d.%d.%d:%d...\n"), (address.host >> 0) & 0xff, (address.host >> 8) & 0xff, (address.host >> 16) & 0xff, (address.host >> 24) & 0xff, address.port); cnt = 10 * 5; while (cnt-- > 0) { ENetEvent evt; enet_service (0); if (enet_host_service (enetclient, &evt, 100) > 0) { if (evt.type == ENET_EVENT_TYPE_CONNECT) break; } } if (cnt <= 0) { write_log (_T("ENET_CLIENT: connection failed, no response in 5 seconds\n")); enet_close (); return 0; } memcpy (data, "UAE_HELLO", 10); p = enet_packet_create (data, sizeof data, ENET_PACKET_FLAG_RELIABLE); enet_peer_send (enetpeer, 0, p); enet_host_flush (enetclient); write_log (_T("ENET: connected\n")); serial_enet = 1; return 1; } void enet_writeser (uae_u16 w) { ENetPacket *p; uae_u8 data[16]; memcpy (data, "UAE_", 4); data[4] = w >> 8; data[5] = w >> 0; write_log (_T("W=%04X "), w); p = enet_packet_create (data, 6, ENET_PACKET_FLAG_RELIABLE); enet_peer_send (enetpeer, 0, p); enet_host_flush (enetclient); } int enet_readseravail (void) { enet_service (0); return enet_receive_off_r != enet_receive_off_w; } int enet_readser (uae_u16 *data) { if (enet_receive_off_r == enet_receive_off_w) return 0; *data = enet_receive[enet_receive_off_r++]; write_log (_T("R=%04X "), *data); enet_receive_off_r &= 0xff; return 1; } #endif fs-uae-2.2.3+dfsg/src/od-fs/include/0000755000175000017500000000000012162366655017277 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/src/od-fs/include/uae/0000755000175000017500000000000012162366655020051 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/src/od-fs/include/uae/uae.h0000644000175000017500000001267212162366655021004 0ustar glaubitzglaubitz#ifndef LIBAMIGA_LIBAMIGA_H_ #define LIBAMIGA_LIBAMIGA_H_ #include #ifdef __cplusplus extern "C" { #endif #ifdef WITH_LUA #include void amiga_init_lua(void (*lock)(void), void (*unlock)(void)); void amiga_init_lua_state(lua_State *L); #endif #define AMIGA_FLOPPY_LIST_SIZE 20 // FIXME #define amiga_log_warning printf #define AMIGA_VIDEO_FORMAT_RGBA 0 #define AMIGA_VIDEO_FORMAT_BGRA 1 #define AMIGA_VIDEO_FORMAT_R5G6B5 2 #define AMIGA_VIDEO_FORMAT_R5G5B5A1 3 int amiga_init(); int amiga_set_synchronization_log_file(const char *path); int amiga_quickstart(int model, int config, int accuracy); //int amiga_main(int argc, char** argv); // must call before amiga_main void amiga_set_video_format(int format); // must be called before main_main void amiga_add_rtg_resolution(int width, int height); // must be called early void amiga_set_builtin_driveclick_path(const char *path); // for custom floppy sound files void amiga_set_floppy_sounds_dir(const char *path); void amiga_main(); int amiga_reset(int hard); int amiga_pause(int pause); int amiga_cpu_get_speed(); int amiga_cpu_set_speed(int speed); void amiga_set_deterministic_mode(); void amiga_set_save_state_compression(int compress); int amiga_enable_serial_port(const char *serial_name); void amiga_set_save_image_dir(const char *path); enum { AMIGA_FLOPPY_DRIVE_NONE, AMIGA_FLOPPY_DRIVE_35_DD, AMIGA_FLOPPY_DRIVE_35_HD, AMIGA_FLOPPY_DRIVE_DRIVE_525_SD , AMIGA_FLOPPY_DRIVE_DRIVE_35_DD_ESCOM, }; int amiga_get_rand_checksum(); int amiga_get_state_checksum(); void amiga_floppy_set_writable_images(int writable); const char *amiga_floppy_get_file(int index); const char *amiga_floppy_get_list_entry(int index); int amiga_floppy_set_file(int index, const char *file); int amiga_get_num_cdrom_drives(); int amiga_get_num_floppy_drives(); const char *amiga_cdrom_get_file(int index); int amiga_cdrom_set_file(int index, const char *file); int amiga_floppy_get_drive_type(int index); int amiga_floppy_get_speed(); int amiga_floppy_set_speed(int speed); // FIMXE: REMOVE int amiga_floppy_set_from_list(int drive, int index); int amiga_state_save(int slot); int amiga_state_load(int slot); int amiga_quit(); void amiga_set_render_buffer(void *data, int size, int need_redraw, void *(*grow)(int width, int height)); #define AMIGA_MAX_LINES 2048 #define AMIGA_VIDEO_RTG_MODE 1 #define AMIGA_VIDEO_LOW_RESOLUTION 2 #define AMIGA_VIDEO_LINE_DOUBLING 4 typedef struct _RenderData { unsigned char* pixels; int width; int height; int limit_x; int limit_y; int limit_w; int limit_h; //int updated; char line[AMIGA_MAX_LINES]; int flags; void *(*grow)(int width, int height); int refresh_rate; int bpp; } RenderData; typedef void (*event_function)(int); typedef void (*init_function)(void); typedef void (*render_function)(RenderData *rd); typedef void (*display_function)(); typedef void (*log_function)(const char *msg); typedef void (*amiga_led_function)(int led, int on); typedef void (*amiga_media_function)(int drive, const char *path); void amiga_set_event_function(event_function function); void amiga_set_init_function(init_function function); void amiga_set_render_function(render_function function); void amiga_set_display_function(display_function function); void amiga_set_log_function(log_function function); void amiga_set_gui_message_function(log_function function); void amiga_set_led_function(amiga_led_function function); void amiga_set_media_function(amiga_media_function function); typedef int (*audio_callback)(int type, int16_t *buffer, int size); int amiga_set_audio_callback(audio_callback func); int amiga_set_cd_audio_callback(audio_callback func); int amiga_set_audio_buffer_size(int size); int amiga_set_audio_frequency(int frequency); int amiga_set_option(const char *option, const char *value); int amiga_set_hardware_option(const char *option, const char *value); int amiga_set_int_option(const char *option, int value); void amiga_map_cd_drives(int enable); void amiga_set_cpu_idle(int idle); void amiga_write_uae_config(const char *path); //void amiga_mouse_set_button(int mouse, int button, int state); //void amiga_mouse_set_axis(int mouse, int axis, int rel, int abs); //void amiga_mouse_set_axis(int mouse, int axis, int value, int is_abs); //void amiga_keyboard_set_host_key(int keycode, int state); //void amiga_joystick_set_button(int joystick, int button, int state); //void amiga_joystick_set_axis(int joystick, int axis, double value); #define AMIGA_JOYPORT_NONE 0 #define AMIGA_JOYPORT_MOUSE 1 #define AMIGA_JOYPORT_DJOY 2 #define AMIGA_JOYPORT_GAMEPAD 3 #define AMIGA_JOYPORT_AJOY 4 #define AMIGA_JOYPORT_CDTVJOY 5 #define AMIGA_JOYPORT_CD32JOY 6 #define AMIGA_JOYPORT_LIGHTPEN 7 /* int amiga_get_joystick_port_mode(int port); */ void amiga_set_joystick_port_mode(int port, int mode); void amiga_set_joystick_port_autofire(int port, int autofire); int amiga_send_input_event(int input_event, int state); void amiga_write_config(const char *path); void amiga_add_key_dir(const char *path); int amiga_add_rom_file(const char *path); void amiga_set_paths(const char **rom_paths, const char **floppy_paths, const char **cd_paths, const char **hd_paths); #ifdef __cplusplus } // extern "C" #endif #ifndef LIBAMIGA_INTERNAL_H_ #define DEFEVENT(A, B, C, D, E, F) INPUTEVENT_ ## A, enum inputevents { INPUTEVENT_ZERO, #include "uae_inputevents_def.h" INPUTEVENT_END }; #undef DEFEVENT #endif #endif // LIBAMIGA_LIBAMIGA_H_ fs-uae-2.2.3+dfsg/src/od-fs/include/uae/uae_inputevents_def.h0000644000175000017500000000024612162366655024260 0ustar glaubitzglaubitz#ifndef LIBAMIGA_LIBAMIGA_INPUT_EVENTS_H_ #define LIBAMIGA_LIBAMIGA_INPUT_EVENTS_H_ #include "../../../inputevents.def" #endif // LIBAMIGA_LIBAMIGA_INPUT_EVENTS_H_ fs-uae-2.2.3+dfsg/src/od-fs/dxwrap.h0000644000175000017500000001053512162366654017335 0ustar glaubitzglaubitz#ifndef __DXWRAP_H__ #define __DXWRAP_H__ #include "rtgmodes.h" #define MAX_DISPLAYS 10 extern int ddforceram; extern int useoverlay; #if 0 struct ddstuff { int ddinit; int ddzeroguid; GUID ddguid; LPDIRECTDRAW7 maindd; LPDIRECTDRAWCLIPPER dclip; LPDIRECTDRAWSURFACE7 primary, secondary, flipping[2]; DDOVERLAYFX overlayfx; DWORD overlayflags; int fsmodeset, backbuffers; int width, height, depth, freq; int vblank_skip, vblank_skip_cnt; int swidth, sheight; DDSURFACEDESC2 native; DDSURFACEDESC2 locksurface; int lockcnt; DWORD pitch; HWND hwnd; uae_u32 colorkey; int islost, isoverlay; LPDIRECTDRAWSURFACE7 statussurface; }; struct ddcaps { int maxwidth, maxheight; int cancolorkey; int cannonlocalvidmem; }; extern struct ddstuff dxdata; extern struct ddcaps dxcaps; #endif struct ScreenResolution { uae_u32 width; /* in pixels */ uae_u32 height; /* in pixels */ }; #define MAX_PICASSO_MODES 300 #define MAX_REFRESH_RATES 100 struct PicassoResolution { struct ScreenResolution res; int depth; /* depth in bytes-per-pixel */ int residx; int refresh[MAX_REFRESH_RATES]; /* refresh-rates in Hz */ int refreshtype[MAX_REFRESH_RATES]; /* 0=normal,1=raw */ TCHAR name[25]; /* Bit mask of RGBFF_xxx values. */ uae_u32 colormodes; int rawmode; bool lace; }; struct MultiDisplay { bool primary; //GUID ddguid; TCHAR *adaptername, *adapterid, *adapterkey; TCHAR *monitorname, *monitorid; TCHAR *fullname; struct PicassoResolution *DisplayModes; RECT rect; }; extern struct MultiDisplay Displays[MAX_DISPLAYS]; typedef enum { red_mask, green_mask, blue_mask } DirectDraw_Mask_e; #if 0 extern const TCHAR *DXError (HRESULT hr); extern TCHAR *outGUID (const GUID *guid); HRESULT DirectDraw_GetDisplayMode (void); void DirectDraw_Release(void); int DirectDraw_Start(void); void DirectDraw_get_GUIDs (void); void clearsurface(LPDIRECTDRAWSURFACE7 surf); int locksurface (LPDIRECTDRAWSURFACE7 surf, LPDDSURFACEDESC2 desc); void unlocksurface (LPDIRECTDRAWSURFACE7 surf); HRESULT restoresurface (LPDIRECTDRAWSURFACE7 surf); LPDIRECTDRAWSURFACE7 allocsurface (int width, int height); LPDIRECTDRAWSURFACE7 allocsystemsurface (int width, int height); LPDIRECTDRAWSURFACE7 createsurface (uae_u8 *ptr, int pitch, int width, int height); void freesurface (LPDIRECTDRAWSURFACE7 surf); void DirectDraw_FreeMainSurface (void); HRESULT DirectDraw_CreateMainSurface (int width, int height); HRESULT DirectDraw_SetDisplayMode(int width, int height, int bits, int freq); HRESULT DirectDraw_SetCooperativeLevel (HWND window, int fullscreen, int doset); HRESULT DirectDraw_CreateClipper (void); HRESULT DirectDraw_SetClipper(HWND hWnd); RGBFTYPE DirectDraw_GetSurfacePixelFormat(LPDDSURFACEDESC2 surface); DWORD DirectDraw_CurrentWidth (void); DWORD DirectDraw_CurrentHeight (void); DWORD DirectDraw_GetCurrentDepth (void); int DirectDraw_SurfaceLock (void); void DirectDraw_SurfaceUnlock (void); uae_u8 *DirectDraw_GetSurfacePointer (void); DWORD DirectDraw_GetSurfacePitch (void); int DirectDraw_IsLocked (void); DWORD DirectDraw_GetPixelFormatBitMask (DirectDraw_Mask_e mask); RGBFTYPE DirectDraw_GetPixelFormat (void); DWORD DirectDraw_GetBytesPerPixel (void); HRESULT DirectDraw_GetDC(HDC *hdc); HRESULT DirectDraw_ReleaseDC(HDC hdc); int DirectDraw_GetVerticalBlankStatus (void); DWORD DirectDraw_CurrentRefreshRate (void); void DirectDraw_GetPrimaryPixelFormat (DDSURFACEDESC2 *desc); HRESULT DirectDraw_FlipToGDISurface (void); int DirectDraw_Flip (int doflip); int DirectDraw_BlitToPrimary (RECT *rect); int DirectDraw_BlitToPrimaryScale (RECT *dstrect, RECT *srcrect); int DirectDraw_Blit (LPDIRECTDRAWSURFACE7 dst, LPDIRECTDRAWSURFACE7 src); int DirectDraw_BlitRect (LPDIRECTDRAWSURFACE7 dst, RECT *dstrect, LPDIRECTDRAWSURFACE7 src, RECT *scrrect); int DirectDraw_BlitRectCK (LPDIRECTDRAWSURFACE7 dst, RECT *dstrect, LPDIRECTDRAWSURFACE7 src, RECT *scrrect); void DirectDraw_FillSurface (LPDIRECTDRAWSURFACE7 dst, RECT *rect, uae_u32 color); void DirectDraw_Fill (RECT *rect, uae_u32 color); void DirectDraw_FillPrimary (void); bool DD_getvblankpos (int *vpos); void DD_vblank_reset (double freq); void dx_check (void); int dx_islost (void); #endif #define DDFORCED_NONLOCAL 0 #define DDFORCED_DEFAULT 1 #define DDFORCED_VIDMEM 2 #define DDFORCED_SYSMEM 3 #endif fs-uae-2.2.3+dfsg/src/od-fs/parser.h0000644000175000017500000000313712162366655017325 0ustar glaubitzglaubitz/* * UAE - The Un*x Amiga Emulator * * Not a parser, but parallel and serial emulation for Win32 * * Copyright 1997 Mathias Ortmann * Copyright 1998-1999 Brian King */ #define PRTBUFSIZE 65536 int setbaud (long baud ); void getserstat(int *status); void setserstat (int mask, int onoff); int readser (int *buffer); int readseravail (void); void writeser (int c); int openser (const TCHAR *sername); void closeser (void); void doserout (void); void closeprinter (void); void flushprinter (void); int checkserwrite (void); void serialuartbreak (int); #define TIOCM_CAR 1 #define TIOCM_DSR 2 #define TIOCM_RI 4 #define TIOCM_DTR 8 #define TIOCM_RTS 16 #define TIOCM_CTS 32 extern void unload_ghostscript (void); extern int load_ghostscript (void); #define MAX_MIDI_PORTS 100 struct midiportinfo { TCHAR *name; unsigned int devid; }; extern struct midiportinfo *midiinportinfo[MAX_MIDI_PORTS]; extern struct midiportinfo *midioutportinfo[MAX_MIDI_PORTS]; #define MAX_SERPAR_PORTS 100 struct serparportinfo { TCHAR *dev; TCHAR *cfgname; TCHAR *name; }; extern struct serparportinfo *comports[MAX_SERPAR_PORTS]; extern struct serparportinfo *parports[MAX_SERPAR_PORTS]; extern int enumserialports (void); extern int enummidiports (void); extern void sernametodev (TCHAR*); extern void serdevtoname (TCHAR*); extern void epson_printchar (uae_u8 c); extern int epson_init (const TCHAR *printername, int pins); extern void epson_close (void); #define PARALLEL_MATRIX_TEXT 1 #define PARALLEL_MATRIX_EPSON 2 #define PARALLEL_MATRIX_EPSON9 2 #define PARALLEL_MATRIX_EPSON24 3 #define PARALLEL_MATRIX_EPSON48 4 fs-uae-2.2.3+dfsg/src/od-fs/threading.cpp0000644000175000017500000000217612162366655020333 0ustar glaubitzglaubitz#include "sysconfig.h" #include "sysdeps.h" #include int uae_start_thread_fast (void *(*f)(void *), void *arg, uae_thread_id *thread) { // FIXME: what is the supposed difference between uae_start_thread and // uae_start_thread_fast? return uae_start_thread("(fast)", f, arg, thread); } int uae_start_thread (const char *name, uae_thread_function fn, void *arg, uae_thread_id *tid) { int result = 1; write_log("uae_start_tread \"%s\" function at %p arg %p\n", name, fn, arg); #if 0 uae_thread_id thread_id = SDL_CreateThread(fn, arg); #endif uae_thread_id thread_id = fs_thread_create(fn, arg); if (thread_id == NULL) { write_log("ERROR creating thread\n"); result = 0; } if (tid) { *tid = thread_id; } return result; } int uae_wait_thread (uae_thread_id thread) { //SDL_WaitThread (thread, (int*)0); fs_thread_wait(thread); return 0; } void uae_end_thread (uae_thread_id *thread) { STUB(""); //SDL_KillThread(SDL_Thread *thread); fs_thread_destroy(*thread); if (thread) { *thread = NULL; } } fs-uae-2.2.3+dfsg/src/od-fs/libamiga.cpp0000644000175000017500000004444412162366655020137 0ustar glaubitzglaubitz#include "sysconfig.h" #include "sysdeps.h" #include "uae.h" #include "autoconf.h" #include #include #include #include #include "uae/memory.h" #include "options.h" #include "keyboard.h" #include "inputdevice.h" #include "disk.h" #include "gui.h" #include "events.h" #include "luascript.h" #include "uae/fs.h" void keyboard_settrans (void); libamiga_callbacks g_libamiga_callbacks = {}; log_function g_amiga_gui_message_function = NULL; amiga_led_function g_amiga_led_function = NULL; amiga_media_function g_amiga_media_function = NULL; int g_uae_deterministic_mode = 0; int g_amiga_paused = 0; char *g_libamiga_save_image_path = NULL; int g_amiga_savestate_docompress = 1; #ifdef DEBUG_SYNC FILE* g_fs_uae_sync_debug_file = NULL; #endif int g_amiga_video_format = AMIGA_VIDEO_FORMAT_RGBA; int g_amiga_video_bpp = 4; static char *g_floppy_sounds_dir; int g_fs_uae_writable_disk_images = 0; // This is called from the main UAE thread to inform the GUI that a floppy // disk has been inserted or ejected. void gui_filename (int num, const char *name) { if (g_amiga_media_function) { g_amiga_media_function(num, name); } } static void gui_flicker_led2 (int led, int unitnum, int status) { static int resetcounter[LED_MAX]; static uae_s8 gui_data_hd, gui_data_cd, gui_data_md; uae_s8 old; uae_s8 *p; if (led == LED_HD) p = &gui_data_hd; else if (led == LED_CD) p = &gui_data_cd; else if (led == LED_MD) p = &gui_data_md; else return; old = *p; if (status < 0) { if (old < 0) { *p = 0; gui_led (led, 0); } return; } if (status == 0 && old < 0) { resetcounter[led] = 0; return; } if (status == 0) { resetcounter[led]--; if (resetcounter[led] > 0) return; } *p = status; resetcounter[led] = 6; if (old != *p) gui_led (led, *p); } void gui_flicker_led (int led, int unitnum, int status) { if (led < 0) { gui_flicker_led2 (LED_HD, 0, 0); gui_flicker_led2 (LED_CD, 0, 0); gui_flicker_led2 (LED_MD, 0, 0); } else { gui_flicker_led2 (led, unitnum, status); } } void gui_led (int led, int state) { //STUB("led %d state %d", led, state); int out_led = -1; int out_state = state; if (led == LED_DF0) out_led = 0; else if (led == LED_DF1) out_led = 1; else if (led == LED_DF2) out_led = 2; else if (led == LED_DF3) out_led = 3; else if (led == LED_POWER) { //printf("POWER %d b %d\n", state, gui_data.powerled_brightness); out_led = 8; } else if (led == LED_HD) out_led = 9; else if (led == LED_CD) { out_led = 10; if (state == 0) { out_state = 0; } else if (state == 4) { out_state = 2; } else { out_state = 1; } } else if (led == LED_MD) out_led = 11; if (led >= LED_DF0 && led <= LED_DF3) { if (gui_data.drive_writing[led - 1]) { out_state = 2; } } if (g_amiga_led_function && out_led > -1) { g_amiga_led_function(out_led, out_state); } } extern "C" { void amiga_set_save_state_compression(int compress) { g_amiga_savestate_docompress = compress ? 1 : 0; } void amiga_init_lua(void (*lock)(void), void (*unlock)(void)) { #ifdef WITH_LUA uae_lua_init(lock, unlock); #endif } void amiga_init_lua_state(lua_State *L) { #ifdef WITH_LUA uae_lua_init_state(L); #endif } void amiga_set_floppy_sounds_dir(const char *path) { int len = strlen(path); if (path[len - 1] == '/') { g_floppy_sounds_dir = fs_strdup(path); } else { // must have directory separator at the end g_floppy_sounds_dir = fs_strconcat(path, "/", NULL); } } void amiga_set_led_function(amiga_led_function function) { g_amiga_led_function = function; } void amiga_set_media_function(amiga_media_function function) { g_amiga_media_function = function; } void amiga_floppy_set_writable_images(int writable) { g_fs_uae_writable_disk_images = writable; } int amiga_init() { printf("libamiga (based on emulation core from %s) initialized\n", get_libamiga_base_version()); write_log("libamiga (based on emulation core from %s) initialized\n", get_libamiga_base_version()); // because frame_time_t is sometimes cast to int, we make sure to // start from 0 wo it will work for "a while". Should be fixed // properly g_uae_epoch = fs_get_monotonic_time(); /* #ifdef DEBUG_SYNC g_sync_debug_file = fopen("sync.log", "wb"); #endif */ // clock sync base is 1000000 (microseconds) syncbase = 1000000; // clock sync base is 10000 (tenths of milliseconds) //syncbase = 10000; filesys_host_init(); return 1; } void amiga_set_video_format(int format) { g_amiga_video_format = format; if (format == AMIGA_VIDEO_FORMAT_R5G6B5) { g_amiga_video_bpp = 2; } else if (format == AMIGA_VIDEO_FORMAT_R5G5B5A1) { g_amiga_video_bpp = 2; } else { g_amiga_video_bpp = 4; } } void amiga_add_rtg_resolution(int width, int height) { write_log("adding rtg resolution %dx%d\n", width, height); int *m = g_amiga_rtg_modes; while (1) { if (*m == -1) { write_log("too many resolutions\n"); return; } if (*m == width && *(m + 1) == height) { write_log("resolution already exists\n"); return; } if (*m == 0 && *(m + 1) ==0) { *m = width; *(m + 1) = height; return; } m += 2; } } void amiga_map_cd_drives(int enable) { write_log("setting automount_cddrives to %d\n", enable != 0); currprefs.win32_automount_cddrives = (enable != 0); changed_prefs.win32_automount_cddrives = (enable != 0); } void amiga_set_deterministic_mode() { write_log("libamiga enabling net play mode\n"); g_uae_deterministic_mode = 1; } void amiga_write_uae_config(const char *path) { write_log("writing uae config to %s\n", path); cfgfile_save(&currprefs, path, 0); } void amiga_set_paths(const char **rom_paths, const char **floppy_paths, const char **cd_paths, const char **hd_paths) { for (int i = 0; i < MAX_PATHS; i++) { if (floppy_paths[i] == NULL || floppy_paths[i][0] == '\0') { break; } strncpy(&(currprefs.path_floppy.path[i][0]), floppy_paths[i], MAX_PATH - 1); strncpy(&(changed_prefs.path_floppy.path[i][0]), floppy_paths[i], MAX_PATH - 1); } for (int i = 0; i < MAX_PATHS; i++) { if (cd_paths[i] == NULL || cd_paths[i][0] == '\0') { break; } strncpy(&(currprefs.path_cd.path[i][0]), cd_paths[i], MAX_PATH - 1); strncpy(&(changed_prefs.path_cd.path[i][0]), cd_paths[i], MAX_PATH - 1); } for (int i = 0; i < MAX_PATHS; i++) { if (hd_paths[i] == NULL || hd_paths[i][0] == '\0') { break; } strncpy(&(currprefs.path_hardfile.path[i][0]), hd_paths[i], MAX_PATH - 1); strncpy(&(changed_prefs.path_hardfile.path[i][0]), hd_paths[i], MAX_PATH - 1); } for (int i = 0; i < MAX_PATHS; i++) { if (rom_paths[i] == NULL || rom_paths[i][0] == '\0') { break; } strncpy(&(currprefs.path_rom.path[i][0]), rom_paths[i], MAX_PATH - 1); strncpy(&(changed_prefs.path_rom.path[i][0]), rom_paths[i], MAX_PATH - 1); } } int amiga_set_synchronization_log_file(const char *path) { #ifdef DEBUG_SYNC FILE *f = fs_fopen(path, "wb"); if (f) { write_log("sync debug log to %s\n", path); g_fs_uae_sync_debug_file = f; return 1; } else { write_log("error opening synchronization log file\n"); return 0; } #endif } int amiga_quickstart(int quickstart_model, int quickstart_config, int accuracy) { int quickstart_compa = 1 - accuracy; int quickstart_romcheck = 0; write_log("amiga_quickstart model=%d config=%d compa=%d (accuracy %d)\n", quickstart_model, quickstart_config, quickstart_compa, accuracy); return built_in_prefs(&currprefs, quickstart_model, quickstart_config, quickstart_compa, quickstart_romcheck); } void amiga_set_save_image_dir(const char *path) { write_log("amiga_set_save_image_dir %s\n", path); g_libamiga_save_image_path = fs_strdup(path); } int amiga_get_rand_checksum() { return uaerand() & 0x00ffffff; } int amiga_get_state_checksum() { int checksum = uae_get_memory_checksum(); #ifdef DEBUG_SYNC write_sync_log("memcheck: %08x\n", checksum); #endif return checksum & 0x00ffffff; } //int amiga_main(int argc, char** argv) { void amiga_main() { write_log("amiga_main\n"); keyboard_settrans(); int argc = 1; char *argv[4] = { strdup("fs-uae"), NULL, }; real_main(argc, argv); #ifdef FILESYS write_log("real_main returned\n"); write_log("calling filesys_flush_cache\n"); filesys_flush_cache (); #endif write_log("flushing all file streams\n"); fflush(NULL); } void amiga_write_config(const char *path) { cfgfile_save(&currprefs, path, 0); } int amiga_enable_serial_port(const char *serial_name) { write_log("amiga_enable_serial_port\n"); if (serial_name != NULL && serial_name[0]) { write_log("serial port device: %s\n", serial_name); strcpy(changed_prefs.sername, serial_name); strcpy(currprefs.sername, serial_name); changed_prefs.use_serial = 1; currprefs.use_serial = 1; } /* else { write_log("serial: using dummy serial port\n"); } */ //config_changed = 1; return 1; } void amiga_set_cpu_idle(int idle) { write_log("setting cpu_idle = %d\n", idle); changed_prefs.cpu_idle = idle; currprefs.cpu_idle = idle; } int amiga_pause(int pause) { //pause_emulation = pause; if (pause) { write_log("calling pausemode (1)\n"); //pausemode(-1); g_amiga_paused = 1; pausemode(9); } else { write_log("calling pausemode (0)\n"); g_amiga_paused = 0; //pausemode(-1); pausemode(0); } return 0; } int amiga_reset(int hard) { uae_reset(hard, 1); return hard; } int amiga_state_save(int slot) { if (slot < 0) { return 0; } if (slot >= 9) { return 0; } write_log("amiga_state_save %d\n", slot); int code = AKS_STATESAVEQUICK1 + slot * 2; inputdevice_add_inputcode(code, 1); return 1; } int amiga_state_load(int slot) { if (slot < 0) { return 0; } if (slot >= 9) { return 0; } write_log("amiga_state_load %d\n", slot); int code = AKS_STATERESTOREQUICK1 + slot * 2; inputdevice_add_inputcode(code, 1); return 1; } const char *amiga_floppy_get_file(int index) { return currprefs.floppyslots[index].df; } const char *amiga_floppy_get_list_entry(int index) { return currprefs.dfxlist[index]; } int amiga_floppy_get_drive_type(int index) { return currprefs.floppyslots[index].dfxtype + 1; } int amiga_get_num_cdrom_drives() { // FIXME: this is a bit of a hack, if CD devices / SCSI system // has not been enabled, it seems type is 0 in all slots, which // is why we return 0 at the end of the function. for (int i = 0; i < MAX_TOTAL_SCSI_DEVICES; i++) { if (currprefs.cdslots[i].type != 0) { return i; } } return 0; } int amiga_get_num_floppy_drives() { for (int i = 0; i < 4; i++) { if (currprefs.floppyslots[i].dfxtype < 0) { return i; } } return 4; } int amiga_floppy_set_from_list(int drive, int index) { write_log("insert floppy (%d) into drive (%d)\n", index, drive); if (drive < 0 || drive > 3) { // assert return 0; } if (index < 0 || index >= AMIGA_FLOPPY_LIST_SIZE) { // assert return 0; } write_log("perform disk_swap drive %d floppy entry %d\n", drive, index); strcpy(changed_prefs.floppyslots[drive].df, currprefs.dfxlist[index]); //strcpy(currprefs.floppyslots[drive].df, currprefs.dfxlist[entry]); disk_insert(drive, currprefs.floppyslots[drive].df); /* int i; // eject disk from other drive (if inserted) for (i = 0; i < 4; i++) { if (strcmp (currprefs.floppyslots[i].df, currprefs.dfxlist[index]) == 0) changed_prefs.floppyslots[i].df[0] = 0; } // insert disk // FIXME: IMPORTANT: CHECK length of file (prevent buffer overrun) strcpy(changed_prefs.floppyslots[drive].df, currprefs.dfxlist[index]); config_changed = 1; return 1; */ return 1; } int amiga_floppy_set_file(int drive, const char *file) { write_log("insert floppy (%s) into drive (%d)\n", file, drive); int i; // eject disk from other drive (if inserted) for (i = 0; i < 4; i++) { if (strcmp (currprefs.floppyslots[i].df, file) == 0) { changed_prefs.floppyslots[i].df[0] = 0; } } // insert disk // FIXME: IMPORTANT: CHECK length of file (prevent buffer overrun) strcpy(changed_prefs.floppyslots[drive].df, file); config_changed = 1; return 1; } const char *amiga_cdrom_get_file(int index) { return currprefs.cdslots[index].name; } int amiga_cdrom_set_file(int drive, const char *file) { write_log("insert CD (%s) into drive (%d)\n", file, drive); int i; // eject CD from other drive (if inserted) for (i = 0; i < 4; i++) { if (file[0] != '\0' && strcmp (currprefs.cdslots[i].name, file) == 0) { changed_prefs.cdslots[i].name[0] = 0; changed_prefs.cdslots[i].inuse = 0; } } // insert CD // FIXME: IMPORTANT: CHECK length of file (prevent buffer overrun) strcpy(changed_prefs.cdslots[drive].name, file); if (file[0] == '\0') { changed_prefs.cdslots[drive].inuse = 0; } else { changed_prefs.cdslots[drive].inuse = 1; } config_changed = 1; return 1; } int amiga_floppy_get_speed() { int speed = currprefs.floppy_speed; write_log("speed is %d\n", speed); return speed / 100; } int amiga_floppy_set_speed(int speed) { write_log("set floppy speed to %d\n", speed); changed_prefs.floppy_speed = speed * 100; config_changed = 1; return 1; } int amiga_cpu_get_speed() { int speed = currprefs.m68k_speed; write_log("cpu speed is %d\n", speed); write_log("cpu freq is %d\n", currprefs.cpu_frequency); write_log("cpu mult is %d\n", currprefs.cpu_clock_multiplier); return speed; } int amiga_cpu_set_speed(int speed) { static int initialized = 0; static int org_cpu_clock_multiplier; static int org_cpu_cycle_exact; if (!initialized) { org_cpu_clock_multiplier = currprefs.cpu_clock_multiplier; org_cpu_cycle_exact = currprefs.cpu_cycle_exact; initialized = 1; } write_log("set cpu speed to %d\n", speed); changed_prefs.m68k_speed = speed; if (speed == 0) { changed_prefs.cpu_clock_multiplier = org_cpu_clock_multiplier; changed_prefs.cpu_cycle_exact = org_cpu_cycle_exact; } else { changed_prefs.cpu_clock_multiplier = 32; changed_prefs.cpu_cycle_exact = 0; } config_changed = 1; return 1; } int amiga_parse_option(const char *option, const char *value, int type) { // some strings are modified during parsing char *value2 = strdup(value); int result = cfgfile_parse_option(&currprefs, (char*) option, (char*) value2, type); free(value2); write_log("set option \"%s\" to \"%s\" (result: %d)\n", option, value, result); if (result != 1) { // FIXME: Log amiga_log_warning("failed to set option \"%s\" to \"%s\" " "(result: %d)\n", option, value, result); } return result; } int amiga_set_option(const char *option, const char *value) { return amiga_parse_option(option, value, 0); } int amiga_set_hardware_option(const char *option, const char *value) { return amiga_parse_option(option, value, CONFIG_TYPE_HARDWARE); } int amiga_set_int_option(const char *option, int value) { char *str_value = fs_strdup_printf("%d", value); int result = amiga_set_option(option, str_value); free(str_value); return result; } int amiga_quit() { uae_quit(); return 1; } void amiga_set_display_function(display_function event_handler) { g_libamiga_callbacks.display = event_handler; } void amiga_set_event_function(event_function event_handler) { g_libamiga_callbacks.event = event_handler; } void amiga_set_init_function(init_function function) { g_libamiga_callbacks.init = function; } void amiga_set_render_function(render_function function) { g_libamiga_callbacks.render = function; } void amiga_set_log_function(log_function function) { g_libamiga_callbacks.log = function; } void amiga_set_gui_message_function(log_function function) { g_amiga_gui_message_function = function; } } // extern "C" int disk_setwriteprotect (int num, const TCHAR *name, bool writeprotected); void gui_disk_image_change (int unitnum, const TCHAR *name, bool writeprotected) { if (name && strlen(name) > 0) { write_log("gui_disk_image_change drive %d name %s write protected %d\n", unitnum, name, writeprotected); /* if (writeprotected) { write_log("calling disk_setwriteprotect 0\n"); disk_setwriteprotect(unitnum, name, 0); } */ } else { write_log("gui_disk_image_change drive %d \n", unitnum); } } bool get_plugin_path (TCHAR *out, int size, const TCHAR *path) { static char* plugin_path_none = NULL; if (strcmp(path, "floppysounds") == 0) { if (g_floppy_sounds_dir) { strncpy(out, g_floppy_sounds_dir, size); } else { strncpy(out, "floppy_sounds", size); } // make sure out is null-terminated in any case out[size - 1] = '\0'; } else { write_log("\n-----------------> STUB: get_plugin_path, " "size: %d, path: %s\n", size, path); out[0] = '\0'; } return TRUE; } fs-uae-2.2.3+dfsg/src/od-fs/bsdsocket_posix.cpp0000644000175000017500000013014512162366654021566 0ustar glaubitzglaubitz/* * UAE - The Un*x Amiga Emulator * * bsdsocket.library emulation - Unix * * Copyright 2000-2001 Carl Drougge * Copyright 2003-2005 Richard Drummond * Copyright 2004 Jeff Shepherd * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "sysconfig.h" #include "sysdeps.h" #include "options.h" #include "uae/memory.h" #include "custom.h" #include "newcpu.h" #include "autoconf.h" #include "traps.h" #include "threaddep/thread.h" #include "native2amiga.h" #include "bsdsocket.h" #ifndef BSDSOCKET volatile int bsd_int_requested; void bsdsock_fake_int_handler(void) { STUB(""); } #else #include #include #include #include #ifdef HAVE_SYS_FILIO_H # include #endif #include #include #include #include #include #include //#define DEBUG_BSDSOCKET #ifdef DEBUG_BSDSOCKET #define DEBUG_LOG write_log #else #define DEBUG_LOG(...) do ; while(0) #endif #define WAITSIGNAL waitsig (context, sb) #ifdef ANDROID #define IPPROTO_ENCAP 98 #endif /* Sigqueue is unsafe on SMP machines. * Temporary work-around. */ //#define SETSIGNAL addtosigqueue (sb, 0) #define SETSIGNAL \ do { \ uae_Signal (sb->ownertask, sb->sigstosend | ((uae_u32) 1) << sb->signal); \ sb->dosignal = 1; \ } while (0) #define SETERRNO bsdsocklib_seterrno (sb,mapErrno (errno)) #define SETHERRNO bsdsocklib_setherrno (sb, h_errno) /* BSD-systems don't seem to have MSG_NOSIGNAL.. @@@ We need to catch SIGPIPE on those systems! (?) */ #ifndef MSG_NOSIGNAL #define MSG_NOSIGNAL 0 #endif #define S_GL_result(res) sb->resultval = (res) uae_u32 bsdthr_Accept_2 (SB); uae_u32 bsdthr_Recv_2 (SB); uae_u32 bsdthr_blockingstuff (uae_u32 (*tryfunc)(SB), SB); uae_u32 bsdthr_SendRecvAcceptConnect (uae_u32 (*tryfunc)(SB), SB); uae_u32 bsdthr_Send_2 (SB); uae_u32 bsdthr_Connect_2 (SB); uae_u32 bsdthr_WaitSelect (SB); uae_u32 bsdthr_Wait (SB); void clearsockabort (SB); static uae_sem_t sem_queue; /** ** Helper functions **/ /* * Map host errno to amiga errno */ static int mapErrno (int e) { switch (e) { case EINTR: e = 4; break; case EDEADLK: e = 11; break; case EAGAIN: e = 35; break; case EINPROGRESS: e = 36; break; case EALREADY: e = 37; break; case ENOTSOCK: e = 38; break; case EDESTADDRREQ: e = 39; break; case EMSGSIZE: e = 40; break; case EPROTOTYPE: e = 41; break; case ENOPROTOOPT: e = 42; break; case EPROTONOSUPPORT: e = 43; break; case ESOCKTNOSUPPORT: e = 44; break; case EOPNOTSUPP: e = 45; break; case EPFNOSUPPORT: e = 46; break; case EAFNOSUPPORT: e = 47; break; case EADDRINUSE: e = 48; break; case EADDRNOTAVAIL: e = 49; break; case ENETDOWN: e = 50; break; case ENETUNREACH: e = 51; break; case ENETRESET: e = 52; break; case ECONNABORTED: e = 53; break; case ECONNRESET: e = 54; break; case ENOBUFS: e = 55; break; case EISCONN: e = 56; break; case ENOTCONN: e = 57; break; case ESHUTDOWN: e = 58; break; case ETOOMANYREFS: e = 59; break; case ETIMEDOUT: e = 60; break; case ECONNREFUSED: e = 61; break; case ELOOP: e = 62; break; case ENAMETOOLONG: e = 63; break; default: break; } return e; } /* * Map amiga (s|g)etsockopt level into native one */ static int mapsockoptlevel (int level) { switch (level) { case 0xffff: return SOL_SOCKET; case 0: return IPPROTO_IP; case 1: return IPPROTO_ICMP; case 2: return IPPROTO_IGMP; #ifdef IPPROTO_IPIP case 4: return IPPROTO_IPIP; #endif case 6: return IPPROTO_TCP; case 8: return IPPROTO_EGP; case 12: return IPPROTO_PUP; case 17: return IPPROTO_UDP; case 22: return IPPROTO_IDP; #ifdef IPPROTO_TP case 29: return IPPROTO_TP; #endif case 98: return IPPROTO_ENCAP; default: DEBUG_LOG ("Unknown sockopt level %d\n", level); return level; } } /* * Map amiga (s|g)etsockopt optname into native one */ static int mapsockoptname (int level, int optname) { switch (level) { case SOL_SOCKET: switch (optname) { case 0x0001: return SO_DEBUG; case 0x0002: return SO_ACCEPTCONN; case 0x0004: return SO_REUSEADDR; case 0x0008: return SO_KEEPALIVE; case 0x0010: return SO_DONTROUTE; case 0x0020: return SO_BROADCAST; #ifdef SO_USELOOPBACK case 0x0040: return SO_USELOOPBACK; #endif case 0x0080: return SO_LINGER; case 0x0100: return SO_OOBINLINE; #ifdef SO_REUSEPORT case 0x0200: return SO_REUSEPORT; #endif case 0x1001: return SO_SNDBUF; case 0x1002: return SO_RCVBUF; case 0x1003: return SO_SNDLOWAT; case 0x1004: return SO_RCVLOWAT; case 0x1005: return SO_SNDTIMEO; case 0x1006: return SO_RCVTIMEO; case 0x1007: return SO_ERROR; case 0x1008: return SO_TYPE; default: DEBUG_LOG ("Invalid setsockopt option %x for level %d\n", optname, level); return -1; } break; case IPPROTO_IP: switch (optname) { case 1: return IP_OPTIONS; case 2: return IP_HDRINCL; case 3: return IP_TOS; case 4: return IP_TTL; case 5: return IP_RECVOPTS; case 6: return IP_RECVRETOPTS; case 8: return IP_RETOPTS; case 9: return IP_MULTICAST_IF; case 10: return IP_MULTICAST_TTL; case 11: return IP_MULTICAST_LOOP; case 12: return IP_ADD_MEMBERSHIP; default: DEBUG_LOG ("Invalid setsockopt option %x for level %d\n", optname, level); return -1; } break; case IPPROTO_TCP: switch (optname) { case 1: return TCP_NODELAY; case 2: return TCP_MAXSEG; default: DEBUG_LOG ("Invalid setsockopt option %x for level %d\n", optname, level); return -1; } break; default: DEBUG_LOG ("Unknown level %d\n", level); return -1; } } /* * Map amiga (s|g)etsockopt return value into the correct form */ static void mapsockoptreturn(int level, int optname, uae_u32 optval, void *buf) { switch (level) { case SOL_SOCKET: switch (optname) { case SO_DEBUG: case SO_ACCEPTCONN: case SO_REUSEADDR: case SO_KEEPALIVE: case SO_DONTROUTE: case SO_BROADCAST: #ifdef SO_USELOOPBACK case SO_USELOOPBACK: #endif case SO_LINGER: case SO_OOBINLINE: #ifdef SO_REUSEPORT case SO_REUSEPORT: #endif case SO_SNDBUF: case SO_RCVBUF: case SO_SNDLOWAT: case SO_RCVLOWAT: case SO_SNDTIMEO: case SO_RCVTIMEO: case SO_TYPE: put_long (optval, *(int *)buf); break; case SO_ERROR: DEBUG_LOG("New errno is %d\n", mapErrno(*(int *)buf)); put_long (optval, mapErrno(*(int *)buf)); break; default: break; } break; case IPPROTO_IP: switch (optname) { case IP_OPTIONS: case IP_HDRINCL: case IP_TOS: case IP_TTL: case IP_RECVOPTS: //case IP_RECVRETOPTS: //case IP_RETOPTS: case IP_MULTICAST_IF: case IP_MULTICAST_TTL: case IP_MULTICAST_LOOP: case IP_ADD_MEMBERSHIP: put_long (optval, *(int *)buf); break; default: break; } break; case IPPROTO_TCP: switch (optname) { case TCP_NODELAY: case TCP_MAXSEG: put_long (optval,*(int *)buf); break; default: break; } break; default: break; } } /* * Map amiga (s|g)etsockopt value from amiga to the appropriate value */ static void mapsockoptvalue(int level, int optname, uae_u32 optval, void *buf) { switch (level) { case SOL_SOCKET: switch (optname) { case SO_DEBUG: case SO_ACCEPTCONN: case SO_REUSEADDR: case SO_KEEPALIVE: case SO_DONTROUTE: case SO_BROADCAST: #ifdef SO_USELOOPBACK case SO_USELOOPBACK: #endif case SO_LINGER: case SO_OOBINLINE: #ifdef SO_REUSEPORT case SO_REUSEPORT: #endif case SO_SNDBUF: case SO_RCVBUF: case SO_SNDLOWAT: case SO_RCVLOWAT: case SO_SNDTIMEO: case SO_RCVTIMEO: case SO_TYPE: case SO_ERROR: *((int *)buf) = get_long (optval); break; default: break; } break; case IPPROTO_IP: switch (optname) { case IP_OPTIONS: case IP_HDRINCL: case IP_TOS: case IP_TTL: case IP_RECVOPTS: //case IP_RECVRETOPTS: //case IP_RETOPTS: case IP_MULTICAST_IF: case IP_MULTICAST_TTL: case IP_MULTICAST_LOOP: case IP_ADD_MEMBERSHIP: *((int *)buf) = get_long (optval); break; default: break; } break; case IPPROTO_TCP: switch (optname) { case TCP_NODELAY: case TCP_MAXSEG: *((int *)buf) = get_long (optval); break; default: break; } break; default: break; } } STATIC_INLINE void fd_zero (uae_u32 fdset, uae_u32 nfds) { unsigned int i; for (i = 0; i < nfds; i += 32, fdset += 4) put_long (fdset, 0); } STATIC_INLINE int bsd_amigaside_FD_ISSET (int n, uae_u32 set) { uae_u32 foo = get_long (set + (n / 32)); if (foo & (1 << (n % 32))) return 1; return 0; } STATIC_INLINE void bsd_amigaside_FD_ZERO (uae_u32 set) { put_long (set, 0); put_long (set + 4, 0); } STATIC_INLINE void bsd_amigaside_FD_SET (int n, uae_u32 set) { set = set + (n / 32); put_long (set, get_long (set) | (1 << (n % 32))); } #ifdef DEBUG_BSDSOCKET static void printSockAddr (struct sockaddr_in *in) { DEBUG_LOG ("Family %d, ", in->sin_family); DEBUG_LOG ("Port %d,", ntohs (in->sin_port)); DEBUG_LOG ("Address %s,", inet_ntoa (in->sin_addr)); } #else #define printSockAddr(sockAddr) #endif /* * Copy a sockaddr object from amiga space to native space */ static int copysockaddr_a2n (struct sockaddr_in *addr, uae_u32 a_addr, unsigned int len) { if ((len > sizeof (struct sockaddr_in)) || (len < 8)) return 1; if (a_addr == 0) return 0; addr->sin_family = get_byte (a_addr + 1); addr->sin_port = htons (get_word (a_addr + 2)); addr->sin_addr.s_addr = htonl (get_long (a_addr + 4)); if (len > 8) memcpy (&addr->sin_zero, get_real_address (a_addr + 8), len - 8); /* Pointless? */ return 0; } /* * Copy a sockaddr object from native space to amiga space */ static int copysockaddr_n2a (uae_u32 a_addr, const struct sockaddr_in *addr, unsigned int len) { if (len < 8) return 1; if (a_addr == 0) return 0; put_byte (a_addr, 0); /* Anyone use this field? */ put_byte (a_addr + 1, addr->sin_family); put_word (a_addr + 2, ntohs (addr->sin_port)); put_long (a_addr + 4, ntohl (addr->sin_addr.s_addr)); if (len > 8) memset (get_real_address (a_addr + 8), 0, len - 8); return 0; } /* * Copy a hostent object from native space to amiga space */ static void copyHostent (const struct hostent *hostent, SB) { int size = 28; int i; int numaddr = 0; int numaliases = 0; uae_u32 aptr; if (hostent->h_name != NULL) size += strlen(hostent->h_name)+1; if (hostent->h_aliases != NULL) while (hostent->h_aliases[numaliases]) size += strlen(hostent->h_aliases[numaliases++]) + 5; if (hostent->h_addr_list != NULL) { while (hostent->h_addr_list[numaddr]) numaddr++; size += numaddr*(hostent->h_length+4); } aptr = sb->hostent + 28 + numaliases * 4 + numaddr * 4; // transfer hostent to Amiga memory put_long (sb->hostent + 4, sb->hostent + 20); put_long (sb->hostent + 8, hostent->h_addrtype); put_long (sb->hostent + 12, hostent->h_length); put_long (sb->hostent + 16, sb->hostent + 24 + numaliases*4); for (i = 0; i < numaliases; i++) put_long (sb->hostent + 20 + i * 4, addstr (&aptr, hostent->h_aliases[i])); put_long (sb->hostent + 20 + numaliases * 4, 0); for (i = 0; i < numaddr; i++) { put_long (sb->hostent + 24 + (numaliases + i) * 4, addmem (&aptr, hostent->h_addr_list[i], hostent->h_length)); } put_long (sb->hostent + 24 + numaliases * 4 + numaddr * 4, 0); put_long (sb->hostent, aptr); addstr (&aptr, hostent->h_name); BSDTRACE (("OK (%s)\n",hostent->h_name)); bsdsocklib_seterrno (sb,0); } /* * Copy a protoent object from native space to Amiga space */ static void copyProtoent (TrapContext *context, SB, const struct protoent *p) { size_t size = 16; int numaliases = 0; int i; uae_u32 aptr; // compute total size of protoent if (p->p_name != NULL) size += strlen (p->p_name) + 1; if (p->p_aliases != NULL) while (p->p_aliases[numaliases]) size += strlen (p->p_aliases[numaliases++]) + 5; if (sb->protoent) { uae_FreeMem (context, sb->protoent, sb->protoentsize, sb->sysbase); } sb->protoent = uae_AllocMem (context, size, 0, sb->sysbase); if (!sb->protoent) { write_log ("BSDSOCK: WARNING - copyProtoent() ran out of Amiga memory (couldn't allocate %d bytes)\n", size); bsdsocklib_seterrno (sb, 12); // ENOMEM return; } sb->protoentsize = size; aptr = sb->protoent + 16 + numaliases * 4; // transfer protoent to Amiga memory put_long (sb->protoent + 4, sb->protoent + 12); put_long (sb->protoent + 8, p->p_proto); for (i = 0; i < numaliases; i++) put_long (sb->protoent + 12 + i * 4, addstr (&aptr, p->p_aliases[i])); put_long (sb->protoent + 12 + numaliases * 4, 0); put_long (sb->protoent, aptr); addstr (&aptr, p->p_name); bsdsocklib_seterrno(sb, 0); } uae_u32 bsdthr_WaitSelect (SB) { fd_set sets [3]; int i, s, set, a_s, max; uae_u32 a_set; struct timeval tv; int r; DEBUG_LOG ("WaitSelect: %d 0x%x 0x%x 0x%x 0x%x 0x%x\n", sb->nfds, sb->sets [0], sb->sets [1], sb->sets [2], sb->timeout, sb->sigmp); if (sb->timeout) DEBUG_LOG ("WaitSelect: timeout %d %d\n", get_long (sb->timeout), get_long (sb->timeout + 4)); FD_ZERO (&sets [0]); FD_ZERO (&sets [1]); FD_ZERO (&sets [2]); /* Set up the abort socket */ FD_SET (sb->sockabort[0], &sets[0]); FD_SET (sb->sockabort[0], &sets[2]); max = sb->sockabort[0]; for (set = 0; set < 3; set++) { if (sb->sets [set] != 0) { a_set = sb->sets [set]; for (i = 0; i < sb->nfds; i++) { if (bsd_amigaside_FD_ISSET (i, a_set)) { s = getsock (sb, i + 1); DEBUG_LOG ("WaitSelect: AmigaSide %d set. NativeSide %d.\n", i, s); if (s == -1) { write_log ("BSDSOCK: WaitSelect() called with invalid descriptor %d in set %d.\n", i, set); } else { FD_SET (s, &sets [set]); if (max < s) max = s; } } } } } max++; if (sb->timeout) { tv.tv_sec = get_long (sb->timeout); tv.tv_usec = get_long (sb->timeout + 4); } DEBUG_LOG("Select going to select\n"); r = select (max, &sets [0], &sets [1], &sets [2], (sb->timeout == 0) ? NULL : &tv); DEBUG_LOG("Select returns %d, errno is %d\n", r, errno); if( r > 0 ) { /* Socket told us to abort */ if (FD_ISSET (sb->sockabort[0], &sets[0])) { /* read from the pipe to reset it */ DEBUG_LOG ("WaitSelect aborted from signal\n"); r = 0; for (set = 0; set < 3; set++) if (sb->sets [set] != 0) bsd_amigaside_FD_ZERO (sb->sets [set]); clearsockabort (sb); } else /* This is perhaps slightly inefficient, but I don't care.. */ for (set = 0; set < 3; set++) { a_set = sb->sets [set]; if (a_set != 0) { bsd_amigaside_FD_ZERO (a_set); for (i = 0; i < sb->nfds; i++) { a_s = getsock (sb, i + 1); if (a_s != -1) { if (FD_ISSET (a_s, &sets [set])) { DEBUG_LOG ("WaitSelect: NativeSide %d set. AmigaSide %d.\n", a_s, i); bsd_amigaside_FD_SET (i, a_set); } } } } } } else if (r == 0) { /* Timeout. I think we're supposed to clear the sets.. */ for (set = 0; set < 3; set++) if (sb->sets [set] != 0) bsd_amigaside_FD_ZERO (sb->sets [set]); } DEBUG_LOG ("WaitSelect: %d(%d)\n", r, errno); return r; } uae_u32 bsdthr_Accept_2 (SB) { int foo, s, s2; long flags; struct sockaddr_in addr; socklen_t hlen = sizeof (struct sockaddr_in); if ((s = accept (sb->s, (struct sockaddr *)&addr, &hlen)) >= 0) { if ((flags = fcntl (s, F_GETFL)) == -1) flags = 0; fcntl (s, F_SETFL, flags & ~O_NONBLOCK); /* @@@ Don't do this if it's supposed to stay nonblocking... */ s2 = getsd (sb->context, sb, s); sb->ftable[s2-1] = sb->ftable[sb->len]; /* new socket inherits the old socket's properties */ DEBUG_LOG ("Accept: AmigaSide %d, NativeSide %d, len %d(%d)", sb->resultval, s, &hlen, get_long (sb->a_addrlen)); printSockAddr (&addr); foo = get_long (sb->a_addrlen); if (foo > 16) put_long (sb->a_addrlen, 16); copysockaddr_n2a (sb->a_addr, &addr, foo); return s2 - 1; } else { return -1; } } uae_u32 bsdthr_Recv_2 (SB) { int foo; int l, i; if (sb->from == 0) { foo = recv (sb->s, sb->buf, sb->len, sb->flags /*| MSG_NOSIGNAL*/); DEBUG_LOG ("recv2, recv returns %d, errno is %d\n", foo, errno); } else { struct sockaddr_in addr; socklen_t l = sizeof (struct sockaddr_in); i = get_long (sb->fromlen); copysockaddr_a2n (&addr, sb->from, i); foo = recvfrom (sb->s, sb->buf, sb->len, sb->flags | MSG_NOSIGNAL, (struct sockaddr *)&addr, &l); DEBUG_LOG ("recv2, recvfrom returns %d, errno is %d\n", foo, errno); if (foo >= 0) { copysockaddr_n2a (sb->from, &addr, l); put_long (sb->fromlen, l); } } return foo; } uae_u32 bsdthr_Send_2 (SB) { if (sb->to == 0) { return send (sb->s, sb->buf, sb->len, sb->flags | MSG_NOSIGNAL); } else { struct sockaddr_in addr; int l = sizeof (struct sockaddr_in); copysockaddr_a2n (&addr, sb->to, sb->tolen); return sendto (sb->s, sb->buf, sb->len, sb->flags | MSG_NOSIGNAL, (struct sockaddr *)&addr, l); } } uae_u32 bsdthr_Connect_2 (SB) { if (sb->action == 1) { struct sockaddr_in addr; int len = sizeof (struct sockaddr_in); int retval; copysockaddr_a2n (&addr, sb->a_addr, sb->a_addrlen); retval = connect (sb->s, (struct sockaddr *)&addr, len); DEBUG_LOG ("Connect returns %d, errno is %d\n", retval, errno); /* Hack: I need to set the action to something other than * 1 but I know action == 2 does the correct thing */ sb->action = 2; if (retval == 0) { errno = 0; } return retval; } else { int foo; socklen_t bar; bar = sizeof (foo); if (getsockopt (sb->s, SOL_SOCKET, SO_ERROR, &foo, &bar) == 0) { errno = foo; DEBUG_LOG("Connect status is %d\n", foo); return (foo == 0) ? 0 : -1; } return -1; } } uae_u32 bsdthr_SendRecvAcceptConnect (uae_u32 (*tryfunc)(SB), SB) { return bsdthr_blockingstuff (tryfunc, sb); } uae_u32 bsdthr_blockingstuff (uae_u32 (*tryfunc)(SB), SB) { int done = 0, foo; long flags; int nonblock; if ((flags = fcntl (sb->s, F_GETFL)) == -1) flags = 0; nonblock = (flags & O_NONBLOCK); fcntl (sb->s, F_SETFL, flags | O_NONBLOCK); while (!done) { done = 1; foo = tryfunc (sb); if (foo < 0 && !nonblock) { if ((errno == EAGAIN) || (errno == EWOULDBLOCK) || (errno == EINPROGRESS)) { fd_set readset, writeset, exceptset; int maxfd = (sb->s > sb->sockabort[0]) ? sb->s : sb->sockabort[0]; int num; FD_ZERO (&readset); FD_ZERO (&writeset); FD_ZERO (&exceptset); if (sb->action == 3 || sb->action == 6) FD_SET (sb->s, &readset); if (sb->action == 2 || sb->action == 1 || sb->action == 4) FD_SET (sb->s, &writeset); FD_SET (sb->sockabort[0], &readset); num = select (maxfd + 1, &readset, &writeset, &exceptset, NULL); if (num == -1) { DEBUG_LOG ("Blocking select(%d) returns -1,errno is %d\n", sb->sockabort[0],errno); fcntl (sb->s, F_SETFL, flags); return -1; } if (FD_ISSET (sb->sockabort[0], &readset) || FD_ISSET (sb->sockabort[0], &writeset)) { /* reset sock abort pipe */ /* read from the pipe to reset it */ DEBUG_LOG ("select aborted from signal\n"); clearsockabort (sb); DEBUG_LOG ("Done read\n"); errno = EINTR; done = 1; } else { done = 0; } } else if (errno == EINTR) done = 1; } } fcntl (sb->s, F_SETFL, flags); return foo; } static void *bsdlib_threadfunc (void *arg) { struct socketbase *sb = (struct socketbase *) arg; DEBUG_LOG ("THREAD_START\n"); while (1) { uae_sem_wait (&sb->sem); DEBUG_LOG ("Socket thread got action %d\n", sb->action); switch (sb->action) { case 0: /* kill thread (CloseLibrary) */ DEBUG_LOG ("THREAD_END\n"); uae_sem_destroy (&sb->sem); return NULL; case 1: /* Connect */ sb->resultval = bsdthr_SendRecvAcceptConnect (bsdthr_Connect_2, sb); break; /* @@@ Should check (from|to)len so it's 16.. */ case 2: /* Send[to] */ sb->resultval = bsdthr_SendRecvAcceptConnect (bsdthr_Send_2, sb); break; case 3: /* Recv[from] */ sb->resultval = bsdthr_SendRecvAcceptConnect (bsdthr_Recv_2, sb); break; case 4: { /* Gethostbyname */ struct hostent *tmphostent = gethostbyname ((char *)get_real_address (sb->name)); if (tmphostent) { copyHostent (tmphostent, sb); bsdsocklib_setherrno (sb, 0); } else SETHERRNO; break; } case 5: /* WaitSelect */ sb->resultval = bsdthr_WaitSelect (sb); break; case 6: /* Accept */ sb->resultval = bsdthr_SendRecvAcceptConnect (bsdthr_Accept_2, sb); break; case 7: { struct hostent *tmphostent = gethostbyaddr (get_real_address (sb->name), sb->a_addrlen, sb->flags); if (tmphostent) { copyHostent (tmphostent, sb); bsdsocklib_setherrno (sb, 0); } else SETHERRNO; break; } } SETERRNO; SETSIGNAL; } return NULL; /* Just to keep GCC happy.. */ } void host_connect (TrapContext *context, SB, uae_u32 sd, uae_u32 name, uae_u32 namelen) { sb->s = getsock (sb, sd + 1); if (sb->s == -1) { sb->resultval = -1; bsdsocklib_seterrno (sb, 9); /* EBADF */ return; } sb->a_addr = name; sb->a_addrlen = namelen; sb->action = 1; uae_sem_post (&sb->sem); WAITSIGNAL; } void host_sendto (TrapContext *context, SB, uae_u32 sd, uae_u32 msg, uae_u32 len, uae_u32 flags, uae_u32 to, uae_u32 tolen) { sb->s = getsock (sb, sd + 1); if (sb->s == -1) { sb->resultval = -1; bsdsocklib_seterrno (sb, 9); /* EBADF */ return; } sb->buf = get_real_address (msg); sb->len = len; sb->flags = flags; sb->to = to; sb->tolen = tolen; sb->action = 2; uae_sem_post (&sb->sem); WAITSIGNAL; } void host_recvfrom (TrapContext *context, SB, uae_u32 sd, uae_u32 msg, uae_u32 len, uae_u32 flags, uae_u32 addr, uae_u32 addrlen) { int s = getsock (sb, sd + 1); DEBUG_LOG ("Recv[from](%lx, %d, %lx, %ld, %lx, %lx, %d)\n", sb, sd, msg, len, flags, addr, addrlen); if (s == -1) { sb->resultval = -1; bsdsocklib_seterrno (sb, 9); /* EBADF */; return; } sb->s = s; sb->buf = get_real_address (msg); sb->len = len; sb->flags = flags; sb->from = addr; sb->fromlen= addrlen; sb->action = 3; uae_sem_post (&sb->sem); WAITSIGNAL; } void host_setsockopt (SB, uae_u32 sd, uae_u32 level, uae_u32 optname, uae_u32 optval, uae_u32 optlen) { int s = getsock (sb, sd + 1); int nativelevel = mapsockoptlevel (level); int nativeoptname = mapsockoptname(nativelevel, optname); void *buf; if (s == -1) { sb->resultval = -1; bsdsocklib_seterrno (sb, 9); /* EBADF */; return; } if (optval) { buf = malloc(optlen); mapsockoptvalue(nativelevel, nativeoptname, optval, buf); } else { buf = NULL; } sb->resultval = setsockopt (s, nativelevel, nativeoptname, buf, optlen); if (buf) free(buf); SETERRNO; DEBUG_LOG ("setsockopt: sock %d, level %d, 'name' %d(%d), len %d -> %d, %d\n", s, level, optname, nativeoptname, optlen, sb->resultval, errno); } uae_u32 host_getsockname (SB, uae_u32 sd, uae_u32 name, uae_u32 namelen) { int s; socklen_t len = sizeof (struct sockaddr_in); struct sockaddr_in addr; DEBUG_LOG ("getsockname(%d,0x%lx,%d) -> ", sd, name, len); s = getsock (sb, sd + 1); if (s != -1) { if (getsockname (s, (struct sockaddr *)&addr, &len)) { SETERRNO; DEBUG_LOG ("failed (%d)\n", sb->sb_errno); } else { int a_nl; DEBUG_LOG ("okay\n"); a_nl = get_long (namelen); copysockaddr_n2a (name, &addr, a_nl); if (a_nl > 16) put_long (namelen, 16); return 0; } } return -1; } uae_u32 host_getpeername (SB, uae_u32 sd, uae_u32 name, uae_u32 namelen) { int s; socklen_t len = sizeof (struct sockaddr_in); struct sockaddr_in addr; DEBUG_LOG ("getpeername(%d,0x%lx,%d) -> ", sd, name, len); s = getsock (sb, sd + 1); if (s != -1) { if (getpeername (s, (struct sockaddr *)&addr, &len)) { SETERRNO; DEBUG_LOG ("failed (%d)\n", sb->sb_errno); } else { int a_nl; DEBUG_LOG ("okay\n"); a_nl = get_long (namelen); copysockaddr_n2a (name, &addr, a_nl); if (a_nl > 16) put_long (namelen, 16); return 0; } } return -1; } void host_gethostbynameaddr (TrapContext *context, SB, uae_u32 name, uae_u32 namelen, long addrtype) { sb->name = name; sb->a_addrlen = namelen; sb->flags = addrtype; if (addrtype == -1) sb->action = 4; else sb->action = 7; uae_sem_post (&sb->sem); WAITSIGNAL; } void host_WaitSelect (TrapContext *context, SB, uae_u32 nfds, uae_u32 readfds, uae_u32 writefds, uae_u32 exceptfds, uae_u32 timeout, uae_u32 sigmp) { uae_u32 wssigs = (sigmp) ? get_long (sigmp) : 0; uae_u32 sigs; if (wssigs) { m68k_dreg (regs, 0) = 0; m68k_dreg (regs, 1) = wssigs; sigs = CallLib (context, get_long (4), -0x132) & wssigs; // SetSignal() if (sigs) { DEBUG_LOG ("WaitSelect preempted by signals 0x%08x\n", sigs & wssigs); put_long (sigmp, sigs); // Check for zero address -> otherwise WinUAE crashes if (readfds) fd_zero (readfds, nfds); if (writefds) fd_zero (writefds, nfds); if (exceptfds) fd_zero (exceptfds, nfds); sb->resultval = 0; bsdsocklib_seterrno (sb, 0); return; } } if (nfds == 0) { /* No sockets - Just wait on signals */ m68k_dreg (regs, 0) = wssigs; sigs = CallLib (context, get_long (4), -0x13e); // Wait() if (sigmp) put_long (sigmp, sigs & wssigs); if (readfds) fd_zero (readfds, nfds); if (writefds) fd_zero (writefds, nfds); if (exceptfds) fd_zero (exceptfds, nfds); sb->resultval = 0; return; } sb->nfds = nfds; sb->sets [0] = readfds; sb->sets [1] = writefds; sb->sets [2] = exceptfds; sb->timeout = timeout; sb->sigmp = wssigs; sb->action = 5; uae_sem_post (&sb->sem); m68k_dreg (regs, 0) = (((uae_u32)1) << sb->signal) | sb->eintrsigs | wssigs; sigs = CallLib (context, get_long (4), -0x13e); // Wait() if (sigmp) put_long (sigmp, sigs & (sb->eintrsigs | wssigs)); if (sigs & wssigs) { /* Received the signals we were waiting on */ DEBUG_LOG ("WaitSelect: got signal(s) %lx\n", sigs); if (!(sigs & (((uae_u32)1) << sb->signal))) { sockabort (sb); WAITSIGNAL; } sb->resultval = 0; if (readfds) fd_zero (readfds, nfds); if (writefds) fd_zero (writefds, nfds); if (exceptfds) fd_zero (exceptfds, nfds); bsdsocklib_seterrno (sb, 0); } else if (sigs & sb->eintrsigs) { /* Wait select was interrupted */ DEBUG_LOG ("WaitSelect: interrupted\n"); if (!(sigs & (((uae_u32)1) << sb->signal))) { sockabort (sb); WAITSIGNAL; } sb->resultval = -1; bsdsocklib_seterrno (sb, mapErrno (EINTR)); } clearsockabort(sb); } void host_accept (TrapContext *context, SB, uae_u32 sd, uae_u32 name, uae_u32 namelen) { sb->s = getsock (sb, sd + 1); if (sb->s == -1) { sb->resultval = -1; bsdsocklib_seterrno (sb, 9); /* EBADF */ return; } DEBUG_LOG ("accept(%d, %lx, %lx)\n", sb->s, name, namelen); sb->a_addr = name; sb->a_addrlen = namelen; sb->action = 6; sb->len = sd; // used by bsdthr_Accept_2 sb->context = context; uae_sem_post (&sb->sem); WAITSIGNAL; DEBUG_LOG ("Accept returns %d\n", sb->resultval); } int host_socket (TrapContext *context, SB, int af, int type, int protocol) { int sd; int s; DEBUG_LOG ("socket(%s,%s,%d) -> ",af == AF_INET ? "AF_INET" : "AF_other", type == SOCK_STREAM ? "SOCK_STREAM" : type == SOCK_DGRAM ? "SOCK_DGRAM " : "SOCK_RAW", protocol); if ((s = socket (af, type, protocol)) == -1) { SETERRNO; DEBUG_LOG ("failed (%d)\n", sb->sb_errno); return -1; } else { int arg = 1; sd = getsd (context, sb, s); setsockopt (s, SOL_SOCKET, SO_REUSEADDR, &arg, sizeof(arg)); } sb->ftable[sd-1] = SF_BLOCKING; DEBUG_LOG ("socket returns Amiga %d, NativeSide %d\n", sd - 1, s); return sd - 1; } uae_u32 host_bind (TrapContext *context, SB, uae_u32 sd, uae_u32 name, uae_u32 namelen) { uae_u32 success = 0; struct sockaddr_in addr; int len = sizeof (struct sockaddr_in); int s; s = getsock (sb, sd + 1); if (s == -1) { sb->resultval = -1; bsdsocklib_seterrno (sb, 9); /* EBADF */ return -1; } DEBUG_LOG ("bind(%d[%d],0x%lx,%d) -> ", sd, s, name, namelen); copysockaddr_a2n (&addr, name, namelen); printSockAddr (&addr); if ((success = bind (s, (struct sockaddr *)&addr, len)) != 0) { SETERRNO; DEBUG_LOG ("failed (%d)\n",sb->sb_errno); } else { DEBUG_LOG ("OK\n"); } return success; } uae_u32 host_listen (TrapContext *context, SB, uae_u32 sd, uae_u32 backlog) { int s; uae_u32 success = -1; DEBUG_LOG ("listen(%d,%d) -> ", sd, backlog); s = getsock (sb, sd + 1); if (s == -1) { bsdsocklib_seterrno (sb, 9); return -1; } if ((success = listen (s, backlog)) != 0) { SETERRNO; DEBUG_LOG ("failed (%d)\n", sb->sb_errno); } else { DEBUG_LOG ("OK\n"); } return success; } void host_getprotobyname (TrapContext *context, SB, uae_u32 name) { struct protoent *p = getprotobyname ((char *)get_real_address (name)); DEBUG_LOG ("Getprotobyname(%s)=%lx\n", get_real_address (name), p); if (p == NULL) { SETERRNO; return; } copyProtoent (context, sb, p); BSDTRACE (("OK (%s, %d)\n", p->p_name, p->p_proto)); } void host_getprotobynumber (TrapContext *context, SB, uae_u32 number) { struct protoent *p = getprotobynumber(number); DEBUG_LOG("getprotobynumber(%d)=%lx\n", number, p); if (p == NULL) { SETERRNO; return; } copyProtoent (context, sb, p); BSDTRACE (("OK (%s, %d)\n", p->p_name, p->p_proto)); } void host_getservbynameport (TrapContext *context, SB, uae_u32 name, uae_u32 proto, uae_u32 type) { struct servent *s = (type) ? getservbyport (name, (char *)get_real_address (proto)) : getservbyname ((char *)get_real_address (name), (char *)get_real_address (proto)); size_t size = 20; int numaliases = 0; uae_u32 aptr; int i; if (type) { DEBUG_LOG("Getservbyport(%d, %s) = %lx\n", name, get_real_address (proto), s); } else { DEBUG_LOG("Getservbyname(%s, %s) = %lx\n", get_real_address (name), get_real_address (proto), s); } if (s == NULL) { SETERRNO; return; } // compute total size of servent if (s->s_name != NULL) size += strlen (s->s_name) + 1; if (s->s_proto != NULL) size += strlen (s->s_proto) + 1; if (s->s_aliases != NULL) while (s->s_aliases[numaliases]) size += strlen (s->s_aliases[numaliases++]) + 5; if (sb->servent) { uae_FreeMem (context, sb->servent, sb->serventsize, sb->sysbase); } sb->servent = uae_AllocMem (context, size, 0, sb->sysbase); if (!sb->servent) { write_log ("BSDSOCK: WARNING - getservby%s() ran out of Amiga memory (couldn't allocate %d bytes)\n",type ? "port" : "name", size); bsdsocklib_seterrno (sb, 12); // ENOMEM return; } sb->serventsize = size; aptr = sb->servent + 20 + numaliases * 4; // transfer servent to Amiga memory put_long (sb->servent + 4, sb->servent + 16); put_long (sb->servent + 8, (unsigned short)htons (s->s_port)); for (i = 0; i < numaliases; i++) put_long (sb->servent + 16 + i * 4, addstr (&aptr, s->s_aliases[i])); put_long (sb->servent + 16 + numaliases * 4, 0); put_long (sb->servent, aptr); addstr (&aptr, s->s_name); put_long (sb->servent + 12, aptr); addstr (&aptr, s->s_proto); BSDTRACE (("OK (%s, %d)\n", s->s_name, (unsigned short)htons (s->s_port))); bsdsocklib_seterrno (sb,0); } int host_sbinit (TrapContext *context, SB) { if (pipe (sb->sockabort) < 0) { return 0; } if (fcntl (sb->sockabort[0], F_SETFL, O_NONBLOCK) < 0) { write_log ("Set nonblock failed %d\n", errno); } if (uae_sem_init (&sb->sem, 0, 0)) { write_log ("BSDSOCK: Failed to create semaphore.\n"); close (sb->sockabort[0]); close (sb->sockabort[1]); return 0; } /* Alloc hostent buffer */ sb->hostent = uae_AllocMem (context, 1024, 0, sb->sysbase); sb->hostentsize = 1024; /* @@@ The thread should be PTHREAD_CREATE_DETACHED */ if (uae_start_thread ("bsdsocket", bsdlib_threadfunc, (void *)sb, &sb->thread) == BAD_THREAD) { write_log ("BSDSOCK: Failed to create thread.\n"); uae_sem_destroy (&sb->sem); close (sb->sockabort[0]); close (sb->sockabort[1]); return 0; } return 1; } void host_sbcleanup (SB) { int i; if (!sb) { return; } uae_thread_id thread = sb->thread; close (sb->sockabort[0]); close (sb->sockabort[1]); for (i = 0; i < sb->dtablesize; i++) { if (sb->dtable[i] != -1) { close(sb->dtable[i]); } } sb->action = 0; uae_sem_post (&sb->sem); /* destroy happens on socket thread */ /* We need to join with the socket thread to allow the thread to die * and clean up resources when the underlying thread layer is pthreads. * Ideally, this shouldn't be necessary, but, for example, when SDL uses * pthreads, it always creates joinable threads - and we can't do anything * about that. */ uae_wait_thread (thread); } void host_sbreset (void) { /* TODO */ } uae_u32 host_Inet_NtoA (TrapContext *context, SB, uae_u32 in) { char *addr; struct in_addr ina; uae_u32 buf; *(uae_u32 *)&ina = htonl (in); BSDTRACE (("Inet_NtoA(%x) -> ", in)); if ((addr = inet_ntoa(ina)) != NULL) { buf = m68k_areg (regs, 6) + offsetof (struct UAEBSDBase, scratchbuf); strncpyha (buf, addr, SCRATCHBUFSIZE); BSDTRACE (("%s\n", addr)); return buf; } else SETERRNO; BSDTRACE (("failed (%d)\n", sb->sb_errno)); return 0; } uae_u32 host_inet_addr (uae_u32 cp) { uae_u32 addr; char *cp_rp; cp_rp = (char *)get_real_address (cp); addr = htonl (inet_addr (cp_rp)); BSDTRACE (("inet_addr(%s) -> 0x%08x\n", cp_rp, addr)); return addr; } uae_u32 host_shutdown (SB, uae_u32 sd, uae_u32 how) { SOCKET s; BSDTRACE (("shutdown(%d,%d) -> ", sd, how)); s = getsock (sb, sd + 1); if (s != -1) { if (shutdown (s, how)) { SETERRNO; BSDTRACE (("failed (%d)\n", sb->sb_errno)); } else { BSDTRACE (("OK\n")); return 0; } } return -1; } int host_dup2socket (TrapContext *context, SB, int fd1, int fd2) { int s1, s2; BSDTRACE (("dup2socket(%d,%d) -> ", fd1, fd2)); fd1++; s1 = getsock (sb, fd1); if (s1 != -1) { if (fd2 != -1) { if ((unsigned int) (fd2) >= (unsigned int) sb->dtablesize) { BSDTRACE (("Bad file descriptor (%d)\n", fd2)); bsdsocklib_seterrno (sb, 9); /* EBADF */ } fd2++; s2 = getsock (sb, fd2); if (s2 != -1) { close (s2); } setsd (context, sb, fd2, dup (s1)); BSDTRACE (("0(%d)\n", getsock (sb, fd2))); return 0; } else { fd2 = getsd (context, sb, 1); if (fd2 != -1) { setsd (context, sb, fd2, dup (s1)); BSDTRACE (("%d(%d)\n", fd2, getsock (sb, fd2))); return (fd2 - 1); } else { BSDTRACE(("-1\n")); return -1; } } } BSDTRACE (("-1\n")); return -1; } uae_u32 host_getsockopt (SB, uae_u32 sd, uae_u32 level, uae_u32 optname, uae_u32 optval, uae_u32 optlen) { socklen_t len = 0; int r; int s; int nativelevel = mapsockoptlevel(level); int nativeoptname = mapsockoptname(nativelevel, optname); void *buf = NULL; s = getsock (sb, sd + 1); if (s == -1) { bsdsocklib_seterrno(sb, 9); /* EBADF */ return -1; } if (optlen) { len = get_long (optlen); buf = malloc(len); if (buf == NULL) { return -1; } } r = getsockopt (s, nativelevel, nativeoptname, optval ? buf : NULL, optlen ? &len : NULL); if (optlen) put_long (optlen, len); SETERRNO; DEBUG_LOG ("getsockopt: sock AmigaSide %d NativeSide %d, level %d, 'name' %x(%d), len %d -> %d, %d\n", sd, s, level, optname, nativeoptname, len, r, errno); if (optval) { if (r == 0) { mapsockoptreturn(nativelevel, nativeoptname, optval, buf); } } if (buf != NULL) free(buf); return r; } uae_u32 host_IoctlSocket (TrapContext *context, SB, uae_u32 sd, uae_u32 request, uae_u32 arg) { int sock = getsock (sb, sd + 1); int r, argval = get_long (arg); long flags; if (sock == -1) { sb->resultval = -1; bsdsocklib_seterrno (sb, 9); /* EBADF */ return -1; } if ((flags = fcntl (sock, F_GETFL)) == -1) { SETERRNO; return -1; } DEBUG_LOG ("Ioctl code is %lx, flags are %d\n", request, flags); switch (request) { case 0x8004667B: /* FIOGETOWN */ sb->ownertask = get_long (arg); return 0; case 0x8004667C: /* FIOSETOWN */ put_long (arg,sb->ownertask); return 0; case 0x8004667D: /* FIOASYNC */ # ifdef O_ASYNC r = fcntl (sock, F_SETFL, argval ? flags | O_ASYNC : flags & ~O_ASYNC); return r; # else /* O_ASYNC is only available on Linux and BSD systems */ return fcntl (sock, F_GETFL); # endif case 0x8004667E: /* FIONBIO */ if (sd == 0) { printf("WARNING: sd was 0 ???\n"); sb->resultval = -1; bsdsocklib_seterrno (sb, 9); /* EBADF */ return -1; } r = fcntl (sock, F_SETFL, argval ? flags | O_NONBLOCK : flags & ~O_NONBLOCK); if (argval) { DEBUG_LOG ("nonblocking\n"); sb->ftable[sd-1] &= ~SF_BLOCKING; } else { DEBUG_LOG ("blocking\n"); sb->ftable[sd-1] |= SF_BLOCKING; } return r; case 0x4004667F: /* FIONREAD */ r = ioctl (sock, FIONREAD, &flags); if (r >= 0) { put_long (arg, flags); } return r; } /* end switch */ bsdsocklib_seterrno (sb, EINVAL); return -1; } int host_CloseSocket (TrapContext *context, SB, int sd) { int s = getsock (sb, sd + 1); int retval; if (s == -1) { bsdsocklib_seterrno (sb, 9); /* EBADF */ return -1; } /* if (checksd (sb, sd + 1) == 1) { return 0; } */ DEBUG_LOG ("CloseSocket Amiga: %d, NativeSide %d\n", sd, s); retval = close (s); SETERRNO; releasesock (context, sb, sd + 1); return retval; } void host_closesocketquick (int s) { struct linger l; l.l_onoff = 0; l.l_linger = 0; if(s != -1) { setsockopt (s, SOL_SOCKET, SO_LINGER, &l, sizeof(l)); close (s); } } uae_u32 host_gethostname (uae_u32 name, uae_u32 namelen) { return gethostname ((char *)get_real_address (name), namelen); } int init_socket_layer(void) { if (uae_sem_init(&sem_queue, 0, 1) < 0) { DEBUG_LOG("Can't create sem %d\n", errno); return 0; } return 1; } void clearsockabort (SB) { int chr; int num; while ((num = read (sb->sockabort[0], &chr, sizeof(chr))) >= 0) { DEBUG_LOG ("Sockabort got %d bytes\n", num); ; } } void sockabort (SB) { int chr = 1; DEBUG_LOG ("Sock abort!!\n"); write (sb->sockabort[1], &chr, sizeof (chr)); } void locksigqueue (void) { uae_sem_wait(&sem_queue); } void unlocksigqueue (void) { uae_sem_post(&sem_queue); } #endif fs-uae-2.2.3+dfsg/src/od-fs/config.h0000644000175000017500000000133512162366654017273 0ustar glaubitzglaubitz// FIXME: consider using autotools for this #if defined(WINDOWS) #elif defined(ANDROID) #elif defined(MACOSX) && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1060 // no posix_memalign #else #define HAVE_POSIX_MEMALIGN 1 #endif #if !defined(WINDOWS) #define POSIX_SERIAL 1 #endif #if defined(WINDOWS) || defined(LINUX) #define HAVE_FSEEKO64 1 #endif #if defined(WINDOWS) || defined(LINUX) #define HAVE_FTELLO64 1 #endif //#if defined(FREEBSD) || defined(OPENBSD) #if !defined(WINDOWS) #define HAVE_SYS_MOUNT_H 1 #endif //#if defined(FREEBSD) || defined(OPENBSD) #if !defined(WINDOWS) #define HAVE_SYS_PARAM_H 1 #endif #if defined(LINUX) #define HAVE_SYS_VFS_H 1 #endif #if defined(LINUX) #define HAVE_SYS_STATFS_H 1 #endif fs-uae-2.2.3+dfsg/src/od-fs/blkdev-linux.cpp0000644000175000017500000005736712162366654021005 0ustar glaubitzglaubitz /* * E-UAE - The portable Amiga Emulator * * SCSI layer back-end for Linux hosts * * Copyright 2006 Jochen Becher * Copyright 2006 Richard Drummond * */ #ifdef LINUX #include "sysconfig.h" #include "sysdeps.h" #include "options.h" #include "blkdev.h" #include "scsidev.h" #include "uae/memory.h" #include "gui.h" #include #include #undef DEBUG_ME #ifdef DEBUG_ME # define DEBUG_LOG(fmt,args...) write_log(_T(fmt) ,##args) #else # define DEBUG_LOG(...) do { ; } while (0); #endif struct scsidevdata { const TCHAR *name; int fd; int isatapi; int cdda_paused; struct cd_toc_head toc; uae_u8 buf[DEVICE_SCSI_BUFSIZE]; }; #define MAX_SCSI_DRIVES 16 static struct scsidevdata drives[MAX_SCSI_DRIVES]; static uae_u8 *execscsicmd_in (int unitnum, uae_u8 *cmd_data, int cmd_len, int *outlen); /* * this little piece of magic from Toni Wilen is needed to detect * ATAPI devices. */ static int is_atapi_drive (int unitnum) { static uae_u8 cmd[6] = {0x12, 0, 0, 0, 36, 0}; /* INQUIRY */ uae_u8 out[36]; int outlen = sizeof (out); uae_u8 *p = execscsicmd_in (unitnum, cmd, sizeof (cmd), &outlen); if (!p) { DEBUG_LOG ("SCSIDEV: Inquiry command failed; unit %d is not ATAPI drive\n", unitnum); return 0; } if (outlen >= 2 && (p[0] & 31) == 5 && (p[2] & 7) == 0) { DEBUG_LOG ("SCSIDEV: unit %d is ATAPI drive\n", unitnum); return 1; } DEBUG_LOG ("SCSIDEV: unit %d is not ATAPI drive\n", unitnum); return 0; } static int open_bus ( int flags) { int i; DEBUG_LOG ("SCSIDEV: open_bus: 0x%x\n", flags); for (i = 0; i < MAX_TOTAL_SCSI_DEVICES; i++) { drives[i].name = NULL; drives[i].fd = -1; drives[i].isatapi = 0; } return 1; } static void close_bus (void) { DEBUG_LOG ("SCSIDEV: close_bus\n"); } static int open_device (int unitnum, const TCHAR *ident, int flags) { int result = 0; struct scsidevdata *sdd = &drives[unitnum]; DEBUG_LOG ("SCSIDEV: unit = %d: open_device %s\n", unitnum, ident); DEBUG_LOG ("SCSIDEV: unit = %d, name = %s, fd = %d\n", unitnum, ident, sdd->fd); if (sdd->fd == -1) { sdd->name = ident; if ((sdd->fd = open (sdd->name, O_RDONLY|O_NONBLOCK)) >= 0) { DEBUG_LOG ("SCSIDEV: Successfully opened drive %s\n", sdd->name); sdd->isatapi = is_atapi_drive (unitnum); result = 1; } else { DEBUG_LOG ("SCSIDEV: Failed to open drive %s: %d\n", sdd->name, errno); } } else { /* already open */ DEBUG_LOG ("SCSIDEV: unit %d is already opened as %s.\n", unitnum, sdd->name); result = 1; } return result; } static void close_device (int unitnum) { struct scsidevdata *sdd = &drives[unitnum]; DEBUG_LOG ("SCSIDEV: unit = %d: close_device\n", unitnum); if (sdd->fd != -1) { close (sdd->fd); sdd->fd = -1; } } static struct scsidevdata *unitisopen(int unitnum) { if (drives[unitnum].fd) return &drives[unitnum]; return NULL; } static int media_check (struct scsidevdata *sdd) { if (ioctl (sdd->fd, CDROM_DRIVE_STATUS, CDSL_CURRENT) == CDS_DISC_OK) return 1; else return 0; } static int ismedia_ioctl ( int unitnum, int quick) { struct scsidevdata *sdd = unitisopen(unitnum); if (!sdd) return -1; return media_check(sdd); } static inline void dscsi(struct cdrom_generic_command *cmd) { int i; DEBUG_LOG("\t cmd:"); for (i = 0; i < 12; i++) DEBUG_LOG(" %02x", cmd->cmd[i]); DEBUG_LOG("\n"); DEBUG_LOG("\t buffer: %p\n", cmd->buffer); DEBUG_LOG("\t buflen: %d\n", cmd->buflen); DEBUG_LOG("\t stat : %d\n", cmd->stat); DEBUG_LOG("\t sense :"); if (0 && cmd->sense) { uae_u8 *bp = (uae_u8 *)cmd->sense; for (i = 0; i < sizeof(*cmd->sense); i++) { DEBUG_LOG(" %02x", bp[i]); } } else { DEBUG_LOG(" %p", cmd->sense); } DEBUG_LOG("\n"); DEBUG_LOG("\t dir : %d\n", cmd->data_direction); DEBUG_LOG("\t quiet : %d\n", cmd->quiet); DEBUG_LOG("\t timeout: %d\n", cmd->timeout); } static uae_u8 *execscsicmd_out (int unitnum, uae_u8 *cmd_data, int cmd_len) { struct scsidevdata *sdd = unitisopen(unitnum); struct cdrom_generic_command cmd; int io_error; DEBUG_LOG ("SCSIDEV: unit = %d, execscsicmd_out\n", unitnum); if (!sdd) { DEBUG_LOG ("SCSIDEV: illegal unit %d.\n", unitnum); return 0; } if (cmd_len > CDROM_PACKET_SIZE) { DEBUG_LOG ("SCSIDEV: cmd_len too large (%d)\n", cmd_len); return 0; } memcpy (cmd.cmd, cmd_data, cmd_len); cmd.buffer = 0; cmd.buflen = 0; cmd.stat = 0; cmd.sense = 0; cmd.data_direction = CGC_DATA_WRITE; cmd.quiet = 0; cmd.timeout = 80*60; gui_flicker_led (LED_CD, unitnum, LED_CD_ACTIVE); dscsi(&cmd); io_error = ioctl (sdd->fd, CDROM_SEND_PACKET, &cmd); dscsi(&cmd); DEBUG_LOG ("SCSIDEV: error: %d, stat: %d\n", io_error, cmd.stat); if (io_error != 0) { DEBUG_LOG ("SCSIDEV: errno: %d, %s\n", errno, strerror (errno)); return 0; } return cmd_data; } static uae_u8 *execscsicmd_in (int unitnum, uae_u8 *cmd_data, int cmd_len, int *outlen) { struct scsidevdata *sdd = unitisopen(unitnum); struct cdrom_generic_command cmd; int io_error; DEBUG_LOG ("SCSIDEV: unit = %d, execscsicmd_in\n", unitnum); if (!sdd) { DEBUG_LOG ("SCSIDEV: illegal unit %d\n", unitnum); return 0; } if (cmd_len > CDROM_PACKET_SIZE) { DEBUG_LOG ("SCSIDEV: cmd_len too large (%d)\n", cmd_len); return 0; } memcpy (cmd.cmd, cmd_data, cmd_len); cmd.buffer = sdd->buf; cmd.buflen = sizeof (sdd->buf); cmd.stat = 0; cmd.sense = 0; cmd.data_direction = CGC_DATA_READ; cmd.quiet = 0; cmd.timeout = 80*60; gui_flicker_led (LED_CD, unitnum, LED_CD_ACTIVE); dscsi(&cmd); io_error = ioctl (sdd->fd, CDROM_SEND_PACKET, &cmd); dscsi(&cmd); DEBUG_LOG ("SCSIDEV: error: %d, stat: %d\n", io_error, cmd.stat); if (io_error != 0) { DEBUG_LOG ("SCSIDEV: errno: %d, %s\n", errno, strerror (errno)); return 0; } if (outlen) { *outlen = cmd.buflen; } return sdd->buf; } static int execscsicmd_direct (int unitnum, struct amigascsi *as) { struct scsidevdata *sdd = unitisopen(unitnum); struct cdrom_generic_command cmd; struct request_sense sense; uae_u8 *scsi_data = as->data; int scsi_len = as->len; uae_u8 *scsi_cmd = as->cmd; int scsi_cmd_len = as->cmd_len; uae_u8 scsi_flags = as->flags; uae_u8 scsi_status = as->status; uae_u8 *scsi_sense = as->sensedata; uae_u16 scsi_sense_len = as->sense_len; int io_error; unsigned int senselen; int parm, i; uae_u8 *scsi_datap; uae_u8 *scsi_datap_org; DEBUG_LOG ("SCSIDEV: unit = %d: execscsicmd_direct\n", unitnum); DEBUG_LOG ("SCSIDEV: scsi_len = %d, scsi_cmd_len = %d, scsi_sense_len = %d, scsi_flags = %x\n", scsi_len, scsi_cmd_len, scsi_sense_len, scsi_flags); if (!sdd) { DEBUG_LOG ("SCSIDEV: illegal unit %d.\n", unitnum); return -1; /* TODO: better error code */ } if (scsi_cmd_len > CDROM_PACKET_SIZE) { DEBUG_LOG ("SCSIDEV: scsi_cmd_len too large (%d)\n", scsi_cmd_len); return -5; /* TODO: better code */ } scsi_datap = scsi_datap_org = (scsi_len ? scsi_data : NULL); memcpy (cmd.cmd, scsi_cmd, scsi_cmd_len); cmd.buffer = scsi_datap; cmd.buflen = scsi_len; cmd.stat = scsi_status; if (sdd->isatapi) { scsi_atapi_fixup_pre (cmd.cmd, &scsi_cmd_len, &scsi_datap, &scsi_len, &parm); } senselen = (scsi_flags & 4) ? 4 : /* SCSIF_OLDAUTOSENSE */ (scsi_flags & 2) ? scsi_sense_len : /* SCSIF_AUTOSENSE */ 0; cmd.sense = senselen > 0 ? &sense : 0; cmd.data_direction = (scsi_flags & 1) ? CGC_DATA_READ : CGC_DATA_WRITE; cmd.quiet = 0; cmd.timeout = 80*60; gui_flicker_led (LED_CD, unitnum, LED_CD_ACTIVE); io_error = ioctl (sdd->fd, CDROM_SEND_PACKET, &cmd); as->cmdactual = (io_error >= 0) ? scsi_cmd_len : 0; dscsi(&cmd); DEBUG_LOG ("SCSIDEV: error: %d, stat: %d\n", io_error, cmd.stat); as->status = cmd.stat; if (cmd.stat != 0) { int n; io_error = 45; /* HFERR_BadStatus */ as->actual = 0; memcpy(&as->sensedata[0], &sense, as->sense_len); as->sactual = as->sense_len; } else { if (io_error < 0) { io_error = 20; as->actual = 0; as->sactual = 0; } else { io_error = 0; if (sdd->isatapi) scsi_atapi_fixup_post (cmd.cmd, scsi_cmd_len, scsi_datap, scsi_datap, &as->len, parm); as->actual = as->len - cmd.buflen; as->sactual = 0; } } return io_error; } static struct device_info *info_device (int unitnum, struct device_info *di, int quick, int session) { struct scsidevdata *sdd = unitisopen(unitnum); DEBUG_LOG ("SCSIDEV: unit = %d: info_device\n", unitnum); if (sdd) { media_check (sdd); di->bus = 0; di->target = unitnum; di->lun = 0; di->media_inserted = media_check (sdd); di->write_protected = 1; di->bytespersector = 2048; di->cylinders = 1; di->type = INQ_ROMD; /* We only support CD/DVD drives for now */ di->unitnum = unitnum; /* TODO: Create a more informative device label */ sprintf (di->label, "[%s]", sdd->name); } else { di = 0; } return di; } static int pause_ioctl (int unitnum, int paused) { struct scsidevdata *sdd = unitisopen(unitnum); DEBUG_LOG ("SCSIDEV: unit = %d, pause_ioctl\n", unitnum); if (sdd) { int old = sdd->cdda_paused; if (ioctl(sdd->fd, paused ? CDROMPAUSE : CDROMRESUME, 0) == 0) sdd->cdda_paused = paused ? 1 : 0; return old; } return -1; } static int stop_ioctl (int unitnum) { struct scsidevdata *sdd = unitisopen(unitnum); DEBUG_LOG ("SCSIDEV: unit = %d, stop_ioctl\n", unitnum); if (sdd) { int err; err = ioctl(sdd->fd, CDROMSTOP, 0); return (err >= 0) ? 1 : 0; } return -1; } static uae_u32 volume_ioctl (int unitnum, uae_u16 volume_left, uae_u16 volume_right) { struct scsidevdata *sdd = unitisopen(unitnum); DEBUG_LOG ("SCSIDEV: unit = %d, volume_ioctl\n", unitnum); if (sdd) { struct cdrom_volctrl cdvol; int err; uae_u32 old = 0; err = ioctl(sdd->fd, CDROMVOLREAD, (long)&cdvol); DEBUG_LOG("SCSIDEV: err %d, errno %d\n", err, errno); if (err == 0) old = ((unsigned int)cdvol.channel1 << 16) | cdvol.channel0; cdvol.channel0 = volume_left >> 8; cdvol.channel1 = volume_right >> 8; ioctl(sdd->fd, CDROMVOLCTRL, (long)&cdvol); return old; } return -1; } static int play_ioctl (int unitnum, int startlsn, int endlsn, int scan, play_status_callback statusfunc, play_subchannel_callback subfunc) { struct scsidevdata *sdd = unitisopen(unitnum); DEBUG_LOG ("SCSIDEV: unit = %d, play_ioctl\n", unitnum); if (sdd) { int err; struct cdrom_msf msf; startlsn += 150; endlsn += 150; msf.cdmsf_min0 = (startlsn / 75) / 60; msf.cdmsf_sec0 = (startlsn / 75) % 60; msf.cdmsf_frame0 = (startlsn % 75); msf.cdmsf_min1 = (endlsn / 75) / 60; msf.cdmsf_sec1 = (endlsn / 75) % 60; msf.cdmsf_frame1 = (endlsn % 75); err = ioctl(sdd->fd, CDROMPLAYMSF, (long)&msf); DEBUG_LOG("SCSIDEV: err %d, errno %d\n", err, errno); return (err >= 0) ? 1 : 0; } return -1; } static int tobcd(int val) { return (val % 10) | ((val / 10) << 4); } static int qcode_ioctl (int unitnum, uae_u8 *buf, int sector) { struct scsidevdata *sdd = unitisopen(unitnum); DEBUG_LOG ("SCSIDEV: unit = %d, qcode_ioctl\n", unitnum); if (sdd) { int err; struct cdrom_subchnl qcode; qcode.cdsc_format = CDROM_MSF; err = ioctl(sdd->fd, CDROMSUBCHNL, &qcode); if (err < 0) { DEBUG_LOG ("SCSIDEV: unit = %d, qcode_ioctl err %d\n", unitnum,errno); return 0; } buf[0] = 0; buf[1] = qcode.cdsc_audiostatus; buf[2] = 0; buf[3] = 12; buf[4] = 0; buf[5] = (qcode.cdsc_adr << 4) | qcode.cdsc_ctrl; buf[6] = qcode.cdsc_trk; buf[7] = qcode.cdsc_ind; buf[8] = qcode.cdsc_absaddr.msf.minute; buf[9] = qcode.cdsc_absaddr.msf.second; buf[10] = qcode.cdsc_absaddr.msf.frame; buf[11] = qcode.cdsc_reladdr.msf.minute; buf[12] = qcode.cdsc_reladdr.msf.second; buf[13] = qcode.cdsc_reladdr.msf.frame; DEBUG_LOG("SCSIDEV: QCODE:"); for (int i = 0; i < 14; i++) DEBUG_LOG(" %02x", buf[i]); DEBUG_LOG("\n"); return 1; } return -1; } void encode_l2 (uae_u8 *p, int address); static int read_block (struct scsidevdata *sdd, int unitnum, uae_u8 *data, int sector, int size, int sectorsize) { DWORD len; uae_u8 p[4096]; int ret; int origsize = size; int origsector = sector; uae_u8 *origdata = data; bool got; retry: ret = 0; while (size-- > 0) { got = false; if ((sectorsize == 2048 || sectorsize == 2352)) { int err; struct cdrom_msf *msf = (struct cdrom_msf *)&p[0]; msf->cdmsf_min0 = ((sector+150) / 75) / 60; msf->cdmsf_sec0 = ((sector+150) / 75) % 60; msf->cdmsf_frame0 = (sector+150) % 75; err = ioctl(sdd->fd, CDROMREADMODE1, (long)msf); if (err >= 0) { if (sectorsize == 2352) { memset (data, 0, 16); memcpy (data + 16, p, 2048); encode_l2 (data, sector + 150); sector++; data += sectorsize; ret += sectorsize; } else if (sectorsize == 2048) { memcpy (data, p, 2048); sector++; data += sectorsize; ret += sectorsize; } got = true; } else { DEBUG_LOG("SCSIDEV: CDROMREADMODE1: errno %d\n", errno); } } if (!got) { int err; struct cdrom_msf *msf = (struct cdrom_msf *)&p[0]; msf->cdmsf_min0 = ((sector+150) / 75) / 60; msf->cdmsf_sec0 = ((sector+150) / 75) % 60; msf->cdmsf_frame0 = (sector+150) % 75; err = ioctl(sdd->fd, CDROMREADRAW, (long)msf); if (err >= 0) { if (data) { if (sectorsize >= 2352) { memcpy (data, p, 2352); memset (data + 2352, 0xff, sectorsize - 2352); data += sectorsize; ret += sectorsize; } else { memcpy (data, p + 16, sectorsize); data += sectorsize; ret += sectorsize; } } got = true; } else { DEBUG_LOG("SCSIDEV: CDROMREADRAW: errno %d\n", errno); } } sector++; } return ret; } static int rawread_ioctl(int unitnum, uae_u8 *data, int sector, int size, int sectorsize, uae_u32 extra) { struct scsidevdata *sdd = unitisopen(unitnum); DEBUG_LOG ("SCSIDEV: unit = %d, rawread_ioctl\n", unitnum); if (sdd) { int err; int ret = 0; uint8_t p[4096]; DEBUG_LOG ("SCSIDEV: rawread: sector %d, size %d, sectorsize %d, extra 0x%x\n", sector, size, sectorsize, extra); gui_flicker_led (LED_CD, unitnum, LED_CD_ACTIVE); if (sectorsize > 0) { if (sectorsize != 2336 && sectorsize != 2352 && sectorsize != 2048 && sectorsize != 2336 + 96 && sectorsize != 2352 + 96 && sectorsize != 2048 + 96) return 0; while (size-- > 0) { if (!read_block (sdd, unitnum, data, sector, 1, sectorsize)) break; data += sectorsize; ret += sectorsize; sector++; } } else { uae_u8 sectortype = extra >> 16; uae_u8 cmd9 = extra >> 8; int sync = (cmd9 >> 7) & 1; int headercodes = (cmd9 >> 5) & 3; int userdata = (cmd9 >> 4) & 1; int edcecc = (cmd9 >> 3) & 1; int errorfield = (cmd9 >> 1) & 3; uae_u8 subs = extra & 7; if (subs != 0 && subs != 1 && subs != 2 && subs != 4) return -1; if (errorfield >= 3) return -1; if (isaudiotrack (&sdd->toc, sector)) { if (sectortype != 0 && sectortype != 1) return -2; for (int i = 0; i < size; i++) { uae_u8 *odata = data; int blocksize = errorfield == 0 ? 2352 : (errorfield == 1 ? 2352 + 294 : 2352 + 296); int readblocksize = errorfield == 0 ? 2352 : 2352 + 296; if (!read_block (sdd, unitnum, NULL, sector, 1, readblocksize)) { return ret; } if (subs == 0) { memcpy (data, p, blocksize); data += blocksize; } else if (subs == 4) { // all, de-interleaved memcpy (data, p, blocksize); data += blocksize; sub_to_deinterleaved (p + readblocksize, data); data += SUB_CHANNEL_SIZE; } else if (subs == 2) { // q-only memcpy (data, p, blocksize); data += blocksize; uae_u8 subdata[SUB_CHANNEL_SIZE]; sub_to_deinterleaved (p + readblocksize, subdata); memcpy (data, subdata + SUB_ENTRY_SIZE, SUB_ENTRY_SIZE); } else if (subs == 1) { // all, interleaved memcpy (data, p, blocksize); memcpy (data + blocksize, p + readblocksize, SUB_CHANNEL_SIZE); data += blocksize + SUB_CHANNEL_SIZE; } ret += data - odata; sector++; } } } return ret; } return -1; } static int read_ioctl (int unitnum, uae_u8 *data, int sector, int size) { struct scsidevdata *sdd = unitisopen(unitnum); DEBUG_LOG ("SCSIDEV: unit = %d, read_ioctl sector %d, size %d\n", unitnum, sector, size); if (sdd) { int err; int ret = 0; lseek(sdd->fd, sector * 2048, SEEK_SET); ret = read(sdd->fd, data, size); return ret; while (size > 0) { struct cdrom_read cdr; int tocopy = (size > 2048) ? 2048 : size; cdr.cdread_lba = sector; cdr.cdread_bufaddr = (char *)data; cdr.cdread_buflen = 2048; err = ioctl(sdd->fd, CDROMREADMODE1, (long)&cdr); if (err < 0) return ret; sector++; size -= tocopy; data += tocopy; } return ret; } return -1; } static int write_ioctl (int unitnum, uae_u8 *data, int sector, int size) { DEBUG_LOG ("SCSIDEV: unit = %d, write_ioctl not implemented\n", unitnum); return -1; } static int toc_ioctl (int unitnum, struct cd_toc_head *tocout) { struct scsidevdata *sdd = unitisopen(unitnum); DEBUG_LOG ("SCSIDEV: unit = %d, toc_ioctl\n", unitnum); if (sdd) { int err; struct cd_toc_head *th = &sdd->toc; struct cdrom_tochdr hdr; err = ioctl(sdd->fd, CDROMREADTOCHDR, (long)&hdr); if (err >= 0) { int i; memset(th, 0, sizeof(*th)); th->first_track = hdr.cdth_trk0; th->first_track_offset = 0; th->last_track = hdr.cdth_trk1; th->tracks = th->last_track - th->first_track + 1; th->points = 0; struct cd_toc *t = &th->toc[0]; t->adr = 1; t->point = 0xa0; t->track = th->first_track; th->points++; t++; for (i = 0; i < th->tracks; i++) { struct cdrom_tocentry te; te.cdte_track = th->first_track + i; te.cdte_format = CDROM_LBA; err = ioctl(sdd->fd, CDROMREADTOCENTRY, &te); if (err < 0) { DEBUG_LOG("SCSIDEV: errno %d\n", errno); break; } t->adr = te.cdte_adr; t->control = te.cdte_ctrl; t->paddress = te.cdte_addr.lba; t->point = t->track = th->first_track + i; th->points++; t++; } th->lastaddress = (t-1)->paddress; th->last_track_offset = th->tracks; t->adr = 1; t->point = 0xa1; t->track = th->last_track; t++; th->points++; t->adr = 1; t->point = 0xa2; t->paddress = th->lastaddress; t++; th->points++; DEBUG_LOG("th: first_track %d (%d), last_track %d (%d)\n", th->first_track, th->first_track_offset, th->last_track, th->last_track_offset); DEBUG_LOG(" firstaddress %d, lastaddress %d\n", th->firstaddress, th->lastaddress); DEBUG_LOG(" tracks %d, points %d\n", th->tracks, th->points); for (i = 0; i < th->points; i++) { struct cd_toc *t = &th->toc[i]; DEBUG_LOG("%d: %02x track %d adr 0x%x ctrl 0x%x lsn %d\n", i, t->point, t->track, t->adr, t->control, t->paddress); } memcpy(tocout, th, sizeof (struct cd_toc_head)); return 1; } } return -1; } static int check_isatapi_ioctl (int unitnum) { struct scsidevdata *sdd = unitisopen(unitnum); DEBUG_LOG ("SCSIDEV: unit = %d, check_isatapi_ioctl\n", unitnum); if (sdd) { return sdd->isatapi; } return 0; } struct device_functions devicefunc_scsi_linux_raw = { _T("SPTI"), open_bus, /* open_bus_func openbus; */ close_bus, /* close_bus_func closebus; */ open_device, /* open_device_func opendev; */ close_device, /* close_device_func closedev; */ info_device, /* info_device_func info; */ execscsicmd_out, /* execscsicmd_out_func exec_out; */ execscsicmd_in, /* execscsicmd_in_func exec_in; */ execscsicmd_direct, /* execscsicmd_direct_func exec_direct; */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ismedia_ioctl, /* ismedia_func ismedia; */ 0, /* scsiemu_func scsiemu; */ }; struct device_functions devicefunc_scsi_linux_ioctl = { _T("IOCTL"), open_bus, /* open_bus_func openbus; */ close_bus, /* close_bus_func closebus; */ open_device, /* open_device_func opendev; */ close_device, /* close_device_func closedev; */ info_device, /* info_device_func info; */ execscsicmd_out, /* execscsicmd_out_func exec_out; */ execscsicmd_in, /* execscsicmd_in_func exec_in; */ execscsicmd_direct, /* execscsicmd_direct_func exec_direct; */ pause_ioctl, /* pause_func pause; */ stop_ioctl, /* stop_func stop; */ play_ioctl, /* play_func play; */ volume_ioctl, /* volume_func volume; */ qcode_ioctl, /* qcode_func qcode; */ toc_ioctl, /* toc_func toc; */ read_ioctl, /* read_func read; */ rawread_ioctl, /* rawread_func rawread; */ write_ioctl, /* write_func write; */ check_isatapi_ioctl, /* isatapi_func isatapi; */ ismedia_ioctl, /* ismedia_func ismedia; */ 0, /* scsiemu_func scsiemu; */ }; #endif fs-uae-2.2.3+dfsg/src/od-fs/driveclick.cpp0000644000175000017500000000553712162366654020510 0ustar glaubitzglaubitz#include "sysconfig.h" #include "sysdeps.h" #include #include #include "include/driveclick.h" static void *g_driveclick_data[DS_END]; static int g_driveclick_size[DS_END]; static char *g_driveclick_path = ""; //static char *g_driveclick_name = NULL; extern "C" { void amiga_set_builtin_driveclick_path(const char *path) { g_driveclick_path = fs_strdup(path); } #if 0 void amiga_set_drive_sound_name(const char *name) { g_driveclick_name = fs_strdup(name); } #endif } // extern C int driveclick_loadresource (struct drvsample *sp, int drivetype) { int type, ok; ok = 1; for (type = 0; type < DS_END; type++) { //int type = -1; //int len = -1; //unsigned char* data = NULL; const char *name = NULL; switch(type) { case 0: //type = DS_CLICK; //data = drive_click_data; //len = drive_click_data_size; name = "drive_click.wav"; break; case 1: //type = DS_SPIN; //data = drive_spin_data; //len = drive_spin_data_size; name = "drive_spin.wav"; break; case 2: //type = DS_SPINND; //data = drive_spinnd_data; //len = drive_spinnd_data_size; name = "drive_spinnd.wav"; break; case 3: //type = DS_START; //data = drive_startup_data; //len = drive_startup_data_size; name = "drive_startup.wav"; break; case 4: //type = DS_SNATCH; //data = drive_snatch_data; //len = drive_snatch_data_size; name = "drive_snatch.wav"; break; } if (!name) { continue; } char *path = fs_path_join(g_driveclick_path, name, NULL); int64_t size = fs_path_get_size(path); if (size >= 0) { int len = (int) size; void *buffer = malloc(len); FILE* f = fs_fopen(path, "rb"); int read = fread(buffer, 1, len, f); if (read == size) { struct drvsample* s = sp + type; //write_log("decode drive click sample %d from %p len %d\n", // type, data, len); s->p = decodewav((uae_u8*) buffer, &len); s->len = len; } free(buffer); } } return ok; } void driveclick_fdrawcmd_close(int drive) { } int driveclick_fdrawcmd_open(int drive) { return 0; } void driveclick_fdrawcmd_detect(void) { } void driveclick_fdrawcmd_seek(int drive, int cyl) { } void driveclick_fdrawcmd_motor (int drive, int running) { } void driveclick_fdrawcmd_vsync(void) { } fs-uae-2.2.3+dfsg/src/od-fs/uaemisc.cpp0000644000175000017500000002007112162366654020005 0ustar glaubitzglaubitz#include "sysconfig.h" #include "sysdeps.h" #include "include/options.h" #include "sleep.h" #ifndef PICASSO96 // just to make ncr_scsi compile. it will not work, of course, // so do not try to use functions in ncr_scsi uaecptr p96ram_start; #endif #ifdef WINDOWS #else // need to fake _timezone because some code from WinUAE depend on it (a // Windows global variable) int _timezone; int _daylight; #endif int pause_emulation = 0; int uaelib_debug = 0; int sleep_resolution = 1000 / 1; int pissoff_value = 25000; extern int uaeser_getdatalength (void); int uaeser_getdatalenght (void) { return uaeser_getdatalength(); } void target_default_options (struct uae_prefs *p, int type) { //write_log("STUB: target_default_options p=%p type=%d\n", p, type); write_log("target_default_options p=%p type=%d\n", p, type); // FIXME: move out of here - into a (lib)amiga_ function write_log("target_default_options: enabling floppy sounds\n"); p->floppyslots[0].dfxclick = 1; p->floppyslots[1].dfxclick = 1; p->floppyslots[2].dfxclick = 1; p->floppyslots[3].dfxclick = 1; p->dfxclickvolume = 80; if (type == 2 || type == 0) { // if this isn't set to -1, will caused problems for parallel // port joysticks p->win32_samplersoundcard = -1; } p->win32_rtgvblankrate = 0; #ifdef __BIG_ENDIAN__ p->picasso96_modeflags = 0x442; #else p->picasso96_modeflags = 0x212; #endif return; } /** * sleep_millis_main was introduced to custom.cpp in WinUAE 2.4.0b5. * FIXME: what does _main signify here? */ void sleep_millis_main (int ms) { // FIXME: HOW EXACT MUST THE SLEEP BE? //printf("sleep_millis_main %d\n", ms); usleep(ms * 1000); //uae_msleep(ms); } void sleep_millis (int ms) { // FIXME: HOW EXACT MUST THE SLEEP BE? //printf("sleep_millis %d\n", ms); // FIXME: check usage of this for CD32 usleep(ms * 1000); //uae_msleep(ms); } int same_aname (const char *an1, const char *an2) { // FIXME: latin 1 chars? // FIXME: compare with latin1 table in charset/filesys_host/fsdb_host return strcasecmp (an1, an2) == 0; } void console_out_f(const TCHAR *fmt, ...) { va_list arg_ptr; va_start(arg_ptr, fmt); vprintf(fmt, arg_ptr); va_end(arg_ptr); } void f_out(void *f, const TCHAR *format, ...) { if (f == NULL) { return; } va_list arg_ptr; va_start(arg_ptr, format); vfprintf((FILE*) f, format, arg_ptr); va_end(arg_ptr); } void console_out (const TCHAR *msg) { printf("%s", msg); } int console_get_gui (TCHAR *out, int maxlen) { STUB(""); return 0; } int console_get(TCHAR *in, int maxlen) { TCHAR *res = fgets(in, maxlen, stdin); if (res == NULL) { return -1; } int len = strlen(in); return len - 1; } void console_flush(void) { fflush(stdout); } TCHAR console_getch (void) { STUB(""); return 0; } void close_console (void) { STUB(""); } bool console_isch (void) { STUB(""); return false; } /* struct uae_filter usedfilter_storage struct uae_filter *usedfilter = &usedfilter_storage; */ //struct uae_prefs currprefs; /* uae_u8 *mapped_malloc (size_t s, TCHAR *file) { return xmalloc (uae_u8, s); } void mapped_free (uae_u8 *p) { xfree (p); } */ //#include "fsdb.h" // FIXME: to fsdb_unix.cpp int my_setcurrentdir (const TCHAR *curdir, TCHAR *oldcur) { STUB("curdir=\"%s\" oldcur=\"%s\"", curdir, oldcur); return 0; } bool my_isfilehidden (const TCHAR *path) { STUB("path=\"%s\"", path); return 0; } void my_setfilehidden (const TCHAR *path, bool hidden) { STUB("path=\"%s\" hidden=%d", path, hidden); } int amiga_clipboard_want_data (void) { STUB(""); return 0; } int target_get_volume_name (struct uaedev_mount_info *mtinf, const TCHAR *volumepath, TCHAR *volumename, int size, bool inserted, bool fullcheck) { STUB(""); return 0; } static char *console_buffer; static int console_buffer_size; char *setconsolemode (char *buffer, int maxlen) { char *ret = NULL; if (buffer) { console_buffer = buffer; console_buffer_size = maxlen; } else { ret = console_buffer; console_buffer = NULL; } return ret; } // writelog TCHAR* buf_out (TCHAR *buffer, int *bufsize, const TCHAR *format, ...) { va_list parms; va_start (parms, format); if (buffer == NULL) { return 0; } vsnprintf (buffer, (*bufsize) - 1, format, parms); va_end (parms); *bufsize -= _tcslen (buffer); return buffer + _tcslen (buffer); } void fixtrailing (TCHAR *p) { if (strlen(p) == 0) { return; } if (p[strlen(p) - 1] == '/' || p[strlen(p) - 1] == '\\') { return; } strcat(p, FSDB_DIR_SEPARATOR_S); } void getpathpart(TCHAR *outpath, int size, const TCHAR *inpath) { strcpy(outpath, inpath); TCHAR *p = strrchr(outpath, '/'); #ifdef WINDOWS if (!p) { p = strrchr(outpath, '\\'); } #endif if (p) { p[0] = 0; } fixtrailing(outpath); } void getfilepart(TCHAR *out, int size, const TCHAR *path) { out[0] = 0; const TCHAR *p = strrchr(path, '/'); #ifdef WINDOWS if (!p) { p = strrchr(path, '\\'); } #endif if (p) { strcpy(out, p + 1); } else { strcpy(out, path); } } // convert path to absolute or relative void fullpath (TCHAR *path, int size) { // FIXME: forward/backslash fix needed if (path[0] == 0 || (path[0] == '\\' && path[1] == '\\') || path[0] == ':') { return; } /* : is supposed to mean same as :\ */ } TCHAR start_path_data[MAX_DPATH]; void fetch_path (TCHAR *name, TCHAR *out, int size) { int size2 = size; //printf("fetch_path %s\n", name); //_tcscpy (start_path_data, "./"); _tcscpy (start_path_data, ""); _tcscpy (out, start_path_data); /* if (!name) { return; } if (!_tcscmp (name, "FloppyPath")) { _tcscat (out, "./"); } else if (!_tcscmp (name, "CDPath")) { _tcscat (out, "./"); } else if (!_tcscmp (name, "hdfPath")) { _tcscat (out, "./"); } else if (!_tcscmp (name, "KickstartPath")) { _tcscat (out, "./"); } else if (!_tcscmp (name, "ConfigurationPath")) { _tcscat (out, "./"); } */ } void fetch_saveimagepath (TCHAR *out, int size, int dir) { fetch_path("SaveimagePath", out, size); out[0] = '\0'; if (g_libamiga_save_image_path) { strcpy(out, g_libamiga_save_image_path); } } void fetch_configurationpath (TCHAR *out, int size) { fetch_path("ConfigurationPath", out, size); } void fetch_screenshotpath (TCHAR *out, int size) { fetch_path("ScreenshotPath", out, size); } void fetch_ripperpath (TCHAR *out, int size) { fetch_path("RipperPath", out, size); } void fetch_statefilepath (TCHAR *out, int size) { fetch_path("StatefilePath", out, size); } void fetch_inputfilepath (TCHAR *out, int size) { fetch_path("InputPath", out, size); } void fetch_datapath (TCHAR *out, int size) { fetch_path (NULL, out, size); } void to_lower (TCHAR *s, int len) { for (int i = 0; i < len; i++) { s[i] = tolower(s[i]); } } void to_upper (TCHAR *s, int len) { for (int i = 0; i < len; i++) { s[i] = toupper(s[i]); } } TCHAR *target_expand_environment (const TCHAR *path) { // FIXME: return strdup(path); } // sana2.cpp volatile int uaenet_int_requested; volatile int uaenet_vsync_requested; #include #include "debug.h" #ifdef __cplusplus_disabled static RETSIGTYPE sigbrkhandler(...) #else static RETSIGTYPE sigbrkhandler (int foo) #endif { #ifdef DEBUGGER activate_debugger (); #endif #if !defined(__unix) || defined(__NeXT__) signal (SIGINT, sigbrkhandler); #endif } void setup_brkhandler (void) { /* #if defined(__unix) && !defined(__NeXT__) struct sigaction sa; sa.sa_handler = sigbrkhandler; sa.sa_flags = 0; #ifdef SA_RESTART sa.sa_flags = SA_RESTART; #endif sigemptyset (&sa.sa_mask); sigaction (SIGINT, &sa, NULL); #else signal (SIGINT, sigbrkhandler); #endif */ } fs-uae-2.2.3+dfsg/src/od-fs/bsdsocket_host.cpp0000644000175000017500000000013212162366655021372 0ustar glaubitzglaubitz#ifdef WINDOWS #include "bsdsocket_win32.cpp" #else #include "bsdsocket_posix.cpp" #endif fs-uae-2.2.3+dfsg/src/od-fs/video.cpp0000644000175000017500000005340312162366654017472 0ustar glaubitzglaubitz#include "sysconfig.h" #include "sysdeps.h" #include "include/options.h" #include "include/xwin.h" #include "include/uae.h" #include "include/custom.h" #include "include/drawing.h" #include "include/gfxfilter.h" #include #include #ifdef PICASSO96 #include "picasso96_host.h" #endif volatile bool vblank_found_chipset; volatile bool vblank_found_rtg; int flashscreen = 0; #define MAXBLOCKLINES_MAX INT_MAX; #define AMIGA_WIDTH (AMIGA_WIDTH_MAX * 2) //#define AMIGA_HEIGHT (AMIGA_HEIGHT_MAX * 2) //#define AMIGA_HEIGHT 574 #define AMIGA_HEIGHT 572 uae_s32 tyhrgb[65536]; uae_s32 tylrgb[65536]; uae_s32 tcbrgb[65536]; uae_s32 tcrrgb[65536]; //#define USE_BUFMEM //#define USE_LINEMEM struct MultiDisplay Displays[MAX_DISPLAYS] = {}; static int g_picasso_enabled = 0; static int g_picasso_width = 0; static int g_picasso_height = 0; static int g_picasso_depth = 0; static int g_picasso_format = 0; static int g_has_flushed_line = 0; static int g_has_flushed_block = 0; static int g_has_flushed_screen = 0; static int g_largest_width = 0; static int g_largest_height = 0; struct uae_filter uaefilters[] = { { UAE_FILTER_NULL, 0, 1, _T("Null filter"), _T("null"), UAE_FILTER_MODE_16_16 | UAE_FILTER_MODE_32_32 }, { 0 } }; #define SET_FLAG(x, y) ((x) |= (y)) #define CLEAR_FLAG(x, y) ((x) &= ~(y)) #define SET_OR_CLEAR_FLAG(x, y, z) ((z) ? \ SET_FLAG((x), (y)) : CLEAR_FLAG((x), (y))) static bool render_ok; volatile bool thread_vblank_found; // --- win32gfx.c int screen_is_picasso = 0; struct uae_filter *usedfilter; uae_u32 redc[3 * 256], grec[3 * 256], bluc[3 * 256]; static double remembered_vblank; static int vblankbasewait, vblankbasefull; RenderData g_renderdata; static int g_screen_updated = 0; static uae_u8 g_linemem[4096 * 4]; static unsigned char* g_bufmem = NULL; static int g_red_bits; static int g_green_bits; static int g_blue_bits; static int g_alpha_bits; static int g_red_shift; static int g_green_shift; static int g_blue_shift; static int g_alpha_shift; int g_amiga_rtg_modes[] = { 640, 360, // 16:9 800, 450, // 16:9 800, 500, // 16:10 800, 600, 1024, 576, // 16:9 1024, 600, // 16:10 1024, 768, 1280, 720, // 16:9 //add_mode (md1, 1280, 800, 32, 50, 1); // 16:10 //add_mode (md1, 1280, 720, 32, 50, 1); 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, }; #if 0 void uae_line_update(int line, int update) { printf("%d %d\n", line, update); if (!update) { return; } // mark this line as not needing copy from the previous render buffer g_renderdata.line[line] = 0; g_screen_updated = 1; } #endif void frame_drawn(void) { } void flush_screen (struct vidbuffer *buffer, int first_line, int last_line) { //write_log("flush_screen\n"); g_has_flushed_screen = 1; } bool target_graphics_buffer_update (void) { write_log("target_graphics_buffer_update - clearing buffer\n"); memset(g_renderdata.pixels, 0, \ AMIGA_WIDTH * AMIGA_HEIGHT * g_amiga_video_bpp); memset(g_renderdata.line, 0, AMIGA_MAX_LINES); return 0; } bool render_screen (bool immediate) { // FIXME: immediate is a new parameter //write_log("render_screen line: %d block %d screen %d\n", // g_has_flushed_line, g_has_flushed_block, g_has_flushed_screen); int flushed = g_has_flushed_line || g_has_flushed_block || g_has_flushed_screen; g_renderdata.bpp = g_amiga_video_bpp; static int cx, cy, cw, ch, crealh; //printf("g_picasso_enabled %d\n", g_picasso_enabled); if (g_picasso_enabled) { g_renderdata.width = g_picasso_width; g_renderdata.height = g_picasso_height; g_renderdata.limit_x = 0; g_renderdata.limit_y = 0; g_renderdata.limit_w = g_picasso_width; g_renderdata.limit_h = g_picasso_height; //g_renderdata.updated = g_screen_updated; g_renderdata.flags |= AMIGA_VIDEO_RTG_MODE; #ifdef USE_BUFMEM //memcpy(g_renderdata.pixels, g_bufmem, g_picasso_width * g_picasso_height * g_amiga_video_bpp); #endif // FIXME memset(g_renderdata.line, 0, AMIGA_MAX_LINES); } else { if (gfxvidinfo.outbuffer) { // if gfxvidinfo.outbuffer is not set, get_custom_limits will // crash if (flushed) { get_custom_limits(&cw, &ch, &cx, &cy, &crealh); // FIXME: crealh is new - find out what it does } else { // reuse last custom limits } } if (cx < 0) { //write_log("WARNING: custom limit x (%d) is < 0 - clamping\n", cx); cx = 0; } if (cy < 0) { //write_log("WARNING: custom limit y (%d) is < 0 - clamping\n", cy); cy = 0; } if (cx + cw > AMIGA_WIDTH) { //write_log("WARNING: custom limit x (%d) + w (%d) is > " // "AMIGA_WIDTH (%d) - clamping\n", cx, cw, AMIGA_WIDTH); cw = AMIGA_WIDTH - cx; } if (cy + ch > AMIGA_HEIGHT) { //write_log("WARNING: custom limit y (%d) + h (%d) is > " // "AMIGA_HEIGHT (%d) - clamping\n", cy, ch, AMIGA_HEIGHT); ch = AMIGA_HEIGHT - cy; } g_renderdata.width = AMIGA_WIDTH; g_renderdata.height = AMIGA_HEIGHT; g_renderdata.limit_x = cx; g_renderdata.limit_y = cy; g_renderdata.limit_w = cw; g_renderdata.limit_h = ch; //g_renderdata.updated = g_screen_updated; CLEAR_FLAG(g_renderdata.flags, AMIGA_VIDEO_RTG_MODE); SET_OR_CLEAR_FLAG(g_renderdata.flags, AMIGA_VIDEO_LOW_RESOLUTION, currprefs.gfx_resolution == 0); SET_OR_CLEAR_FLAG(g_renderdata.flags, AMIGA_VIDEO_LINE_DOUBLING, currprefs.gfx_vresolution == 1); #ifdef USE_BUFMEM //printf("g_renderdata.pixels %p %p", g_renderdata.pixels, g_bufmem); memcpy(g_renderdata.pixels, g_bufmem, AMIGA_WIDTH * AMIGA_HEIGHT * g_amiga_video_bpp); #endif } //g_renderdata.line[first_line] = 0; //g_renderdata.line[first_line + 1] = 0; //for (int y = first_line; y <= last_line; y++) { // g_renderdata.line[y] = 0; //} g_screen_updated = 0; //printf("flush_screen (%d -> %d) %d %d %d %d\n", first_line, last_line, // cx, cy, cw, ch); if (currprefs.turbo_emulation) { g_renderdata.refresh_rate = -1; } else { g_renderdata.refresh_rate = (int) (currprefs.chipset_refreshrate + 0.5); } //printf("%d\n", g_renderdata.refresh_rate); if (g_libamiga_callbacks.render) { g_libamiga_callbacks.render(&g_renderdata); } g_has_flushed_line = 0; g_has_flushed_block = 0; g_has_flushed_screen = 0; return 1; } void show_screen (void) { //write_log("show_screen\n\n"); if (g_libamiga_callbacks.display) { g_libamiga_callbacks.display(); } } bool show_screen_maybe (bool show) { //printf("show_screen_maybe %d\n", show); //show_screen (); //return false; 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 (show) show_screen (); return false; } return false; /* if (ap->gfx_vflip < 0) { doflipevent (); return true; } return false; */ } double vblank_calibrate (double approx_vblank, bool waitonly) { STUB(""); return -1; } // FIXME: What is this? int extraframewait = 0; static int frame_missed, frame_counted, frame_errors; static int frame_usage, frame_usage_avg, frame_usage_total; //extern int log_vsync; static bool dooddevenskip; static volatile frame_time_t vblank_prev_time, thread_vblank_time; //static bool vblankbaselace; static int vblankbaselace_chipset; //static bool vblankthread_oddeven; int log_vsync = 0, debug_vsync_min_delay = 0, debug_vsync_forced_delay = 0; void vsync_busywait_start(void) { STUB(""); //changevblankthreadmode_fast (VBLANKTH_ACTIVE_START); vblank_prev_time = thread_vblank_time; } static bool isthreadedvsync (void) { return isvsync_chipset () <= -2 || isvsync_rtg () < 0; } // FIXME bool vsync_isdone (void) { return vblank_found_chipset || dooddevenskip; } int vsync_busywait_do (int *freetime, bool lace, bool oddeven) { STUB(""); return false; #if 0 bool v; static bool framelost; int ti; frame_time_t t; frame_time_t prevtime = vblank_prev_time; dooddevenskip = false; if (lace) vblankbaselace_chipset = oddeven; else vblankbaselace_chipset = -1; t = read_processor_time (); ti = t - prevtime; //if (ti > 2 * vblankbasefull || ti < -2 * vblankbasefull) { if (ti > 1 * vblankbasefull || ti < -1 * vblankbasefull) { #if 0 waitvblankstate (false, NULL); #endif t = read_processor_time (); vblank_prev_time = t; thread_vblank_time = t; frame_missed++; return true; } //if (log_vsync) { // console_out_f(_T("F:%8d M:%8d E:%8d %3d%% (%3d%%) %10d\r"), frame_counted, frame_missed, frame_errors, frame_usage, frame_usage_avg, (t - vblank_prev_time) - vblankbasefull); //} if (freetime) *freetime = 0; if (currprefs.turbo_emulation) { frame_missed++; return true; } #if 0 frame_usage = (t - prevtime) * 100 / vblankbasefull; if (frame_usage > 99) frame_usage = 99; else if (frame_usage < 0) frame_usage = 0; frame_usage_total += frame_usage; if (freetime) *freetime = frame_usage; if (frame_counted) frame_usage_avg = frame_usage_total / frame_counted; #endif v = false; if (isthreadedvsync ()) { framelost = false; v = true; } else { #if 0 bool doskip = false; if (!framelost && t - prevtime > vblankbasefull) { framelost = true; frame_missed++; return true; } if (vblanklaceskip ()) { doskip = true; dooddevenskip = true; } if (!doskip) { while (!framelost && read_processor_time () - prevtime < vblankbasewait1) { vsync_sleep (false); } v = vblank_wait (); } else { v = true; } framelost = false; #endif } if (v) { vblank_prev_time = read_processor_time (); frame_counted++; return true; } frame_errors++; return false; #endif } static void vsync_sleep (bool preferbusy) { #if 0 struct apmode *ap = picasso_on ? &currprefs.gfx_apmode[1] : &currprefs.gfx_apmode[0]; bool dowait; if (vsync_busy_wait_mode == 0) { dowait = ap->gfx_vflip || !preferbusy; } else if (vsync_busy_wait_mode < 0) { dowait = true; } else { dowait = false; } dowait = true; if (dowait && currprefs.m68k_speed >= 0) sleep_millis_main (1); #endif } static void vsync_notvblank (void) { return; #if 0 for (;;) { int vp; if (!getvblankpos (&vp)) return; if (vp > 0) { //write_log (_T("%d "), vpos); break; } vsync_sleep (true); } #endif } int target_get_display (const TCHAR *name) { return 0; } const TCHAR *target_get_display_name (int num, bool friendlyname) { // FIXME return (TCHAR *) "Dummy Display"; } // FIXME extern "C" { int fs_ml_get_vblank_count(); } frame_time_t vsync_busywait_end (int *flipdelay) { #if 0 printf("vsync_busywait_end\n"); show_screen (); static int last_vblank = 0; while (fs_ml_get_vblank_count() == last_vblank) { } last_vblank++;// = fs_ml_get_vblank_count(); if (!dooddevenskip) { #if 0 vsync_notvblank (); while (!vblank_found && vblankthread_mode == VBLANKTH_ACTIVE) { vsync_sleep (currprefs.m68k_speed < 0); } #endif } //changevblankthreadmode_fast (VBLANKTH_ACTIVE_WAIT); #if 0 return thread_vblank_time; write_log("vsync_busywait_end\n"); #endif #endif return read_processor_time(); } double getcurrentvblankrate (void) { STUB(""); if (remembered_vblank) { return remembered_vblank; } write_log("STUB: getcurrentvblankrate\n"); STUB(""); return 50; } static int uae_bits_in_mask (unsigned int mask) { int n = 0; while (mask) { n += mask & 1; mask >>= 1; } return n; } static int uae_mask_shift (unsigned int mask) { int n = 0; while (!(mask & 1)) { n++; mask >>= 1; } return n; } static int init_colors (void) { write_log("init_colors\n"); alloc_colors64k(g_red_bits, g_green_bits, g_blue_bits, g_red_shift, g_green_shift, g_blue_shift, 0, 0, 0, 0); return 1; } #ifdef PICASSO96 void gfx_set_picasso_colors (RGBFTYPE rgbfmt) { write_log("gfx_set_picasso_colors %d\n", rgbfmt); alloc_colors_picasso(g_red_bits, g_green_bits, g_blue_bits, g_red_shift, g_green_shift, g_blue_shift, rgbfmt); } int picasso_palette (void) { int i, changed; changed = 0; for (i = 0; i < 256; i++) { int r = picasso96_state.CLUT[i].Red; int g = picasso96_state.CLUT[i].Green; int b = picasso96_state.CLUT[i].Blue; uae_u32 v = (doMask256 (r, g_red_bits, g_red_shift) | doMask256 (g, g_green_bits, g_green_shift) | doMask256 (b, g_blue_bits, g_blue_shift)) | doMask256 (0xff, g_alpha_bits, g_alpha_shift); if (v != picasso_vidinfo.clut[i]) { //write_log (_T("%d:%08x\n"), i, v); picasso_vidinfo.clut[i] = v; changed = 1; } } return changed; } #endif void getgfxoffset (int *dxp, int *dyp, int *mxp, int *myp) { //FIXME: WHAT DOES THIS DO? *dxp = 0; *dyp = 0; *mxp = 0; *myp = 0; } void toggle_fullscreen (int mode) { } int isfullscreen (void) { return 0; } void flush_line (struct vidbuffer *buffer, int line_no) { //printf("- flush_line %d\n", line_no); //scrlinebuf #ifdef USE_LINEMEM unsigned char *dst = g_renderdata.pixels + AMIGA_WIDTH * g_amiga_video_bpp * line_no; memcpy(dst, g_linemem, AMIGA_WIDTH * g_amiga_video_bpp); #endif #ifndef USE_BUFMEM // mark this line as not needing copy from the previous render buffer g_renderdata.line[line_no] = 0; #endif g_screen_updated = 1; g_has_flushed_line = 1; } void flush_block (struct vidbuffer *buffer, int first_line, int last_line) { //printf("- flush_block %d %d\n", first_line, last_line); //g_screen_updated = 1; g_has_flushed_block = 1; } int lockscr(struct vidbuffer *buffer, bool fullupdate) { return gfxvidinfo.drawbuffer.lockscr(&gfxvidinfo, buffer); } void unlockscr(struct vidbuffer *buffer) { gfxvidinfo.drawbuffer.unlockscr(&gfxvidinfo, buffer); } int graphics_setup() { write_log("graphics_setup\n"); return 1; } static void grow_render_buffer(int width, int height) { unsigned char *new_pixels = (unsigned char*) g_renderdata.grow(width, height); if (new_pixels != g_renderdata.pixels) { //printf("new %p old %p\n", new_pixels, g_renderdata.pixels); //printf("grow_render_buffer %d %d\n", width, height); g_renderdata.pixels = new_pixels; gfxvidinfo.drawbuffer.bufmem = new_pixels; init_row_map(); //printf("grow_render_buffer %d %d done\n", width, height); } } void amiga_set_render_buffer(void *data, int size, int need_redraw, void *(*grow)(int width, int height)) { //printf("set render buffer %p\n", data); g_renderdata.grow = grow; g_renderdata.pixels = (unsigned char *) data; //printf("\n\n\n\n\n\n\n\n set buffer %p %d\n", data, size); //g_renderdata.pixels = (unsigned char*) data; //g_renderdata.pixels = (unsigned char*) data; #ifndef USE_BUFMEM // reset line information memset(g_renderdata.line, 1, AMIGA_MAX_LINES); #ifndef USE_LINEMEM //printf("setting bufmem\n"); gfxvidinfo.drawbuffer.bufmem = (unsigned char*) data; #endif //printf("updating row map\n"); grow_render_buffer(g_largest_width, g_largest_height); init_row_map(); #endif } void gfx_set_picasso_state (int on) { write_log("gfx_set_picasso_state %d\n", on); g_picasso_enabled = (on != 0); } void gfx_set_picasso_modeinfo (uae_u32 w, uae_u32 h, uae_u32 depth, RGBFTYPE rgbfmt) { write_log("gfx_set_picasso_modeinfo %d %d %d %d\n", w, h, depth, rgbfmt); g_picasso_width = w; g_picasso_height = h; g_picasso_depth = depth; g_picasso_format = rgbfmt; // register largest width seen, so render buffers can be adjusted if // necessary if (g_picasso_width > g_largest_width) { g_largest_width = g_picasso_width; } if (g_picasso_height > g_largest_height) { g_largest_height = g_picasso_height; } grow_render_buffer(g_largest_width, g_largest_height); gfx_set_picasso_colors (rgbfmt); } uint8_t *uae_get_render_buffer() { return g_renderdata.pixels; } #define RGBA_MASK_R 0x000000ff #define RGBA_MASK_G 0x0000ff00 #define RGBA_MASK_B 0x00ff0000 #define RGBA_MASK_A 0xff000000 #define R5G6B5_MASK_R 0xf800 #define R5G6B5_MASK_G 0x07e0 #define R5G6B5_MASK_B 0x001f #define R5G5B5A1_MASK_R 0xf800 #define R5G5B5A1_MASK_G 0x07c0 #define R5G5B5A1_MASK_B 0x003e #define R5G5B5A1_MASK_A 0x0001 int graphics_init(bool mousecapture) { write_log("graphics_init\n"); // FIXME: perhaps modify so custom_limits defaults to -1, -1, -1, -1 set_custom_limits (-1, -1, -1, -1); if (g_amiga_video_format == AMIGA_VIDEO_FORMAT_R5G6B5) { g_red_bits = uae_bits_in_mask(R5G6B5_MASK_R); g_red_shift = uae_mask_shift(R5G6B5_MASK_R); g_green_bits = uae_bits_in_mask(R5G6B5_MASK_G); g_green_shift = uae_mask_shift(R5G6B5_MASK_G); g_blue_bits = uae_bits_in_mask(R5G6B5_MASK_B); g_blue_shift = uae_mask_shift(R5G6B5_MASK_B); g_alpha_bits = 0; g_alpha_shift = 0; } else if (g_amiga_video_format == AMIGA_VIDEO_FORMAT_R5G5B5A1) { g_red_bits = uae_bits_in_mask(R5G5B5A1_MASK_R); g_red_shift = uae_mask_shift(R5G5B5A1_MASK_R); g_green_bits = uae_bits_in_mask(R5G5B5A1_MASK_G); g_green_shift = uae_mask_shift(R5G5B5A1_MASK_G); g_blue_bits = uae_bits_in_mask(R5G5B5A1_MASK_B); g_blue_shift = uae_mask_shift(R5G5B5A1_MASK_B); g_alpha_bits = uae_bits_in_mask(R5G5B5A1_MASK_A); g_alpha_shift = uae_mask_shift(R5G5B5A1_MASK_A); } else { // RGBA or BGRA if (g_amiga_video_format == AMIGA_VIDEO_FORMAT_RGBA) { g_red_bits = uae_bits_in_mask(RGBA_MASK_R); g_red_shift = uae_mask_shift(RGBA_MASK_R); g_blue_bits = uae_bits_in_mask(RGBA_MASK_B); g_blue_shift = uae_mask_shift(RGBA_MASK_B); } else { // BGRA g_red_bits = uae_bits_in_mask(RGBA_MASK_B); g_red_shift = uae_mask_shift(RGBA_MASK_B); g_blue_bits = uae_bits_in_mask(RGBA_MASK_R); g_blue_shift = uae_mask_shift(RGBA_MASK_R); } g_green_bits = uae_bits_in_mask(RGBA_MASK_G); g_green_shift = uae_mask_shift(RGBA_MASK_G); g_alpha_bits = uae_bits_in_mask(RGBA_MASK_A); g_alpha_shift = uae_mask_shift(RGBA_MASK_A); } //g_renderdata.pixels = (unsigned char*) malloc(AMIGA_WIDTH*AMIGA_HEIGHT*4); memset(g_renderdata.line, 0, AMIGA_MAX_LINES); gfxvidinfo.maxblocklines = 0; #ifdef USE_BUFMEM g_bufmem = (unsigned char*) malloc(AMIGA_WIDTH * AMIGA_HEIGHT * g_amiga_video_bpp); gfxvidinfo.drawbuffer.bufmem = g_bufmem; memset(g_bufmem, 0, AMIGA_WIDTH * AMIGA_HEIGHT * g_amiga_video_bpp); gfxvidinfo.maxblocklines = MAXBLOCKLINES_MAX; #endif #ifdef USE_LINEMEM gfxvidinfo.drawbuffer.emergmem = 0; gfxvidinfo.drawbuffer.linemem = g_linemem; #else gfxvidinfo.drawbuffer.emergmem = 0; //g_linemem; gfxvidinfo.drawbuffer.linemem = 0; #endif gfxvidinfo.drawbuffer.pixbytes = g_amiga_video_bpp; gfxvidinfo.drawbuffer.rowbytes = AMIGA_WIDTH * g_amiga_video_bpp; gfxvidinfo.drawbuffer.height_allocated = AMIGA_HEIGHT; gfxvidinfo.drawbuffer.inheight = AMIGA_HEIGHT; gfxvidinfo.drawbuffer.outheight = AMIGA_HEIGHT; gfxvidinfo.drawbuffer.width_allocated = AMIGA_WIDTH; gfxvidinfo.drawbuffer.inwidth = AMIGA_WIDTH; gfxvidinfo.drawbuffer.outwidth = AMIGA_WIDTH; //gfxvidinfo.flush_block = libamiga_flush_block; //gfxvidinfo.flush_screen = libamiga_flush_screen; //SDL_SetColors (display, arSDLColors, 0, 256); write_log("calling reset_drawing\n"); reset_drawing (); init_colors (); //#ifdef USE_BUFMEM // init_row_map(); //#endif //write_log("FIXME: NOT USING VSYNC TRICK\n"); // Trick UAE into sending believing we are in vsync / fullscreen // so a flush command is sent for each frame update in do_flush_screen. if (currprefs.m68k_speed == -1) { write_log("currprefs.m68k_speed is -1, not allowing full sync\n"); } else { //currprefs.gfx_apmode[0].gfx_fullscreen = GFX_FULLSCREEN; currprefs.gfx_apmode[0].gfx_vsync = 1; } //currprefs.gfx_apmode[0].gfx_fullscreen = GFX_FULLSCREEN; //currprefs.gfx_apmode[0].gfx_vsync = 1; //currprefs.gfx_apmode[0].gfx_vsyncmode = 1; //currprefs.gfx_apmode[1].gfx_fullscreen = GFX_FULLSCREEN; //currprefs.gfx_apmode[1].gfx_vsync = 1; //amiga_set_option("gfx_vsync", "true"); //amiga_set_option("gfx_vsyncmode", "busywait"); return 1; } void graphics_leave (void) { } int check_prefs_changed_gfx (void) { //write_log("check_prefs_changed_gfx\n"); return 0; } void gui_fps(int fps, int idle) { //double ffps = (fps + 5) / 10; //write_log("fps %0.1f idle %d\n", ffps, idle); } int gui_update (void) { return 0; } fs-uae-2.2.3+dfsg/src/od-fs/parser.cpp0000644000175000017500000001743612162366655017667 0ustar glaubitzglaubitz/* * UAE - The Un*x Amiga Emulator * * Not a parser, but parallel and serial emulation for Linux * * Copyright 2010 Mustafa TUFAN */ #include "sysconfig.h" #undef SERIAL_ENET #include "config.h" #include "sysdeps.h" #include "options.h" #include "gensound.h" #include "events.h" #include "uae.h" #include "uae/memory.h" #include "custom.h" #include "autoconf.h" #include "newcpu.h" #include "traps.h" #include "threaddep/thread.h" #include "serial.h" #include "savestate.h" #include "xwin.h" #include "drawing.h" #ifdef POSIX_SERIAL #include #include #include #endif #if !defined B300 || !defined B1200 || !defined B2400 || !defined B4800 || !defined B9600 #undef POSIX_SERIAL #endif #if !defined B19200 || !defined B57600 || !defined B115200 || !defined B230400 #undef POSIX_SERIAL #endif #ifdef POSIX_SERIAL struct termios tios; #endif #define MIN_PRTBYTES 10 struct uaeserialdata { long hCom; long evtr, evtw, evtt, evtwce; long olr, olw, olwce; int writeactive; void *readdata, *writedata; volatile int threadactive; uae_sem_t change_sem, sync_sem; void *user; }; int uaeser_getdatalength (void) { return sizeof (struct uaeserialdata); } void uaeser_initdata (void *vsd, void *user) { STUB(""); } int uaeser_query (void *vsd, uae_u16 *status, uae_u32 *pending) { STUB(""); return 0; } int uaeser_break (void *vsd, int brklen) { STUB(""); return 0; } int uaeser_setparams (void *vsd, int baud, int rbuffer, int bits, int sbits, int rtscts, int parity, uae_u32 xonxoff) { STUB(""); return 0; } void uaeser_trigger (void *vsd) { STUB(""); } int uaeser_write (void *vsd, uae_u8 *data, uae_u32 len) { STUB(""); return 0; } int uaeser_read (void *vsd, uae_u8 *data, uae_u32 len) { STUB(""); return 0; } void uaeser_clearbuffers (void *vsd) { STUB(""); } int uaeser_open (void *vsd, void *user, int unit) { STUB(""); return 0; } void uaeser_close (void *vsd) { STUB(""); } #define SERIAL_WRITE_BUFFER 100 #define SERIAL_READ_BUFFER 100 /* static uae_u8 outputbuffer[SERIAL_WRITE_BUFFER]; static uae_u8 outputbufferout[SERIAL_WRITE_BUFFER]; static uae_u8 inputbuffer[SERIAL_READ_BUFFER]; static int datainoutput; static int dataininput, dataininputcnt; static int writepending; */ void initparallel (void) { #if 0 if (uae_boot_rom) { uaecptr a = here (); //this install the ahisound org (rtarea_base + 0xFFC0); calltrap (deftrapres (ahi_demux, 0, _T("ahi_winuae"))); dw (RTS); org (a); init_ahi_v2 (); } #endif } int isprinter (void) { return 0; } void doprinter (uae_u8 val) { //parflush = 0; //DoSomeWeirdPrintingStuff (val); } int parallel_direct_write_status (uae_u8 v, uae_u8 dir) { return 0; } int parallel_direct_read_status (uae_u8 *vp) { return 0; } int parallel_direct_write_data (uae_u8 v, uae_u8 dir) { return 0; } int parallel_direct_read_data (uae_u8 *v) { return 0; } // ----- Paula serial emulation host calls ----- static int ser_fd = -1; int openser (const TCHAR *sername) { #ifdef POSIX_SERIAL ser_fd = open (currprefs.sername, O_RDWR|O_NONBLOCK|O_BINARY, 0); write_log("serial: open '%s' -> fd=%d\n", sername, ser_fd); return (ser_fd >= 0); #else return 0; #endif } void closeser (void) { #ifdef POSIX_SERIAL write_log("serial: close fd=%d\n", ser_fd); if(ser_fd >= 0) { close(ser_fd); ser_fd = 0; } #endif } int setbaud (long baud) { if (!currprefs.use_serial) { return 1; } #if defined POSIX_SERIAL int pspeed; /* device not open? */ if (ser_fd < 0) { return 0; } /* map to terminal baud rate constant */ write_log ("serial: setbaud: %ld\n", baud); switch (baud) { case 300: pspeed=B300; break; case 1200: pspeed=B1200; break; case 2400: pspeed=B2400; break; case 4800: pspeed=B4800; break; case 9600: pspeed=B9600; break; case 19200: pspeed=B19200; break; case 38400: pspeed=B38400; break; case 57600: pspeed=B57600; break; case 115200: pspeed=B115200; break; case 230400: pspeed=B230400; break; default: write_log ("serial: unsupported baudrate %ld\n", baud); return 0; } /* Only access hardware when we own it */ if (tcgetattr (ser_fd, &tios) < 0) { write_log ("serial: TCGETATTR failed\n"); return 0; } if (cfsetispeed (&tios, pspeed) < 0) { /* set serial input speed */ write_log ("serial: CFSETISPEED (%ld bps) failed\n", baud); return 0; } if (cfsetospeed (&tios, pspeed) < 0) { /* set serial output speed */ write_log ("serial: CFSETOSPEED (%ld bps) failed\n", baud); return 0; } if (tcsetattr (ser_fd, TCSADRAIN, &tios) < 0) { write_log ("serial: TCSETATTR failed\n"); return 0; } #endif return 1; } int readseravail (void) { if (!currprefs.use_serial) { return 0; } #ifdef POSIX_SERIAL /* device is closed */ if(ser_fd < 0) { return 0; } /* poll if read data is available */ struct timeval tv; fd_set fd; tv.tv_sec = 0; tv.tv_usec = 0; FD_ZERO(&fd); FD_SET(ser_fd, &fd); int num_ready = select (FD_SETSIZE, &fd, NULL, NULL, &tv); return (num_ready == 1); #else return 0; #endif } int readser (int *buffer) { if (ser_fd < 0 || !currprefs.use_serial) { return 0; } char b; int num = read(ser_fd, &b, 1); if (num == 1) { *buffer = b; return 1; } else { return 0; } } int checkserwrite (void) { if (ser_fd < 0 || !currprefs.use_serial) { return 1; } /* we assume that we can write always */ return 1; } void writeser (int c) { if (ser_fd < 0 || !currprefs.use_serial) { return; } char b = (char)c; write(ser_fd, &b, 1); } void getserstat (int *pstatus) { *pstatus = 0; if (ser_fd < 0 || !currprefs.use_serial) { return; } #ifdef POSIX_SERIAL int status = 0; /* read control signals */ if (ioctl (ser_fd, TIOCMGET, &status) < 0) { write_log ("serial: ioctl TIOCMGET failed\n"); *pstatus = TIOCM_CTS | TIOCM_CAR | TIOCM_DSR; return; } int out = 0; if (status & TIOCM_CTS) out |= TIOCM_CTS; if (status & TIOCM_CAR) out |= TIOCM_CAR; if (status & TIOCM_DSR) out |= TIOCM_DSR; if (status & TIOCM_RI) out |= TIOCM_RI; *pstatus = out; #endif } void setserstat (int mask, int onoff) { if (ser_fd < 0 || !currprefs.use_serial) { return; } #ifdef POSIX_SERIAL int status = 0; /* read control signals */ if (ioctl (ser_fd, TIOCMGET, &status) < 0) { write_log ("serial: ioctl TIOCMGET failed\n"); return; } if (mask & TIOCM_DTR) { if(onoff) { status |= TIOCM_DTR; } else { status &= ~TIOCM_DTR; } } if (!currprefs.serial_hwctsrts) { if (mask & TIOCM_RTS) { if(onoff) { status |= TIOCM_RTS; } else { status &= ~TIOCM_RTS; } } } /* write control signals */ if(ioctl( ser_fd, TIOCMSET, &status) < 0) { write_log ("serial: ioctl TIOCMSET failed\n"); } #endif } void serialuartbreak (int v) { if (ser_fd < 0 || !currprefs.use_serial) { return; } #ifdef POSIX_SERIAL if(v) { /* in posix serial calls we can't fulfill this function interface completely: as we are not able to toggle the break mode with "v". We simply trigger a default break here if v is enabled... */ if(tcsendbreak(ser_fd, 0) < 0) { write_log("serial: TCSENDBREAK failed\n"); } } #endif } fs-uae-2.2.3+dfsg/src/od-fs/caps.cpp0000644000175000017500000002377412162366654017322 0ustar glaubitzglaubitz// more or less direct port of od-win32/caps/caps_win32.cpp #include "sysconfig.h" #include "sysdeps.h" #ifndef WINDOWS #include #define __int64 long long typedef void* HMODULE; #define __cdecl #ifdef MACOSX #define CAPSLIB_NAME "libfs-capsimage.dylib" #include #else #define CAPSLIB_NAME "libfs-capsimage.so.4" #endif void *GetProcAddress(void *handle, const char *symbol) { return dlsym(handle, symbol); } void *load_caps_library() { void *handle = NULL; write_log("load_capslib\n"); #ifdef MACOSX char *buffer = (char *) malloc(2048); unsigned int usize = 2047; int result = _NSGetExecutablePath(buffer, &usize); if (result != 0) { write_log("_NSGetExecutablePath failed with result %d\n", result); free(buffer); return 0; } buffer[2047] = '\0'; if (strlen(buffer) > 6) { buffer[strlen(buffer) - 6] = '\0'; } strcat(buffer, "../Frameworks/libfs-capsimage.dylib"); write_log("trying to load %s\n", buffer); handle = dlopen(buffer, RTLD_LAZY); free(buffer); #else /* This could be done more elegantly ;-) */ if (!handle) { write_log("trying to load /usr/local/lib/fs-uae/libfs-capsimage.so\n"); handle = dlopen("/usr/local/lib/fs-uae/libfs-capsimage.so", RTLD_LAZY); } if (!handle) { write_log("trying to load /usr/lib/fs-uae/libfs-capsimage.so\n"); handle = dlopen("/usr/lib/fs-uae/libfs-capsimage.so", RTLD_LAZY); } #endif if (!handle) { write_log("trying to load " CAPSLIB_NAME "\n"); handle = dlopen(CAPSLIB_NAME, RTLD_LAZY); } return handle; } #endif #ifdef CAPS #ifdef WINDOWS #include #include #endif #include "zfile.h" #include "gui.h" #include "uae.h" #include "caps_types.h" #include "CapsAPI.h" static SDWORD caps_cont[4]= {-1, -1, -1, -1}; static int caps_locked[4]; static int caps_flags = DI_LOCK_DENVAR|DI_LOCK_DENNOISE|DI_LOCK_NOISE|DI_LOCK_UPDATEFD|DI_LOCK_TYPE|DI_LOCK_OVLBIT; static struct CapsVersionInfo cvi; static bool oldlib, canseed; typedef SDWORD (__cdecl* CAPSINIT)(void); static CAPSINIT pCAPSInit; typedef SDWORD (__cdecl* CAPSADDIMAGE)(void); static CAPSADDIMAGE pCAPSAddImage; typedef SDWORD (__cdecl* CAPSLOCKIMAGEMEMORY)(SDWORD,PUBYTE,UDWORD,UDWORD); static CAPSLOCKIMAGEMEMORY pCAPSLockImageMemory; typedef SDWORD (__cdecl* CAPSUNLOCKIMAGE)(SDWORD); static CAPSUNLOCKIMAGE pCAPSUnlockImage; typedef SDWORD (__cdecl* CAPSLOADIMAGE)(SDWORD,UDWORD); static CAPSLOADIMAGE pCAPSLoadImage; typedef SDWORD (__cdecl* CAPSGETIMAGEINFO)(PCAPSIMAGEINFO,SDWORD); static CAPSGETIMAGEINFO pCAPSGetImageInfo; typedef SDWORD (__cdecl* CAPSLOCKTRACK)(PCAPSTRACKINFO,SDWORD,UDWORD,UDWORD,UDWORD); static CAPSLOCKTRACK pCAPSLockTrack; typedef SDWORD (__cdecl* CAPSUNLOCKTRACK)(SDWORD,UDWORD); static CAPSUNLOCKTRACK pCAPSUnlockTrack; typedef SDWORD (__cdecl* CAPSUNLOCKALLTRACKS)(SDWORD); static CAPSUNLOCKALLTRACKS pCAPSUnlockAllTracks; typedef SDWORD (__cdecl* CAPSGETVERSIONINFO)(PCAPSVERSIONINFO,UDWORD); static CAPSGETVERSIONINFO pCAPSGetVersionInfo; int caps_init (void) { static int init = 0, noticed = 0; int i; HMODULE h; TCHAR *dllname = "CAPSImg.dll"; if (init) return 1; //h = WIN32_LoadLibrary (dllname); #if WINDOWS h = LoadLibrary (dllname); if (!h) { write_log("LoadLibrary (\"CAPSImg.dll\") failed\n"); TCHAR tmp[MAX_DPATH]; if (SUCCEEDED (SHGetFolderPath (NULL, CSIDL_PROGRAM_FILES_COMMON, NULL, 0, tmp))) { _tcscat (tmp, "\\Software Preservation Society\\"); _tcscat (tmp, dllname); h = LoadLibrary (tmp); if (!h) { if (noticed) return 0; notify_user (NUMSG_NOCAPS); noticed = 1; return 0; } } } #else h = load_caps_library(); if (h == NULL) { if (noticed) { return 0; } notify_user (NUMSG_NOCAPS); noticed = 1; return 0; } #endif if (GetProcAddress (h, "CAPSLockImageMemory") == 0 || GetProcAddress (h, "CAPSGetVersionInfo") == 0) { if (noticed) return 0; notify_user (NUMSG_OLDCAPS); noticed = 1; return 0; } pCAPSInit = (CAPSINIT)GetProcAddress (h, "CAPSInit"); pCAPSAddImage = (CAPSADDIMAGE)GetProcAddress (h, "CAPSAddImage"); pCAPSLockImageMemory = (CAPSLOCKIMAGEMEMORY)GetProcAddress (h, "CAPSLockImageMemory"); pCAPSUnlockImage = (CAPSUNLOCKIMAGE)GetProcAddress (h, "CAPSUnlockImage"); pCAPSLoadImage = (CAPSLOADIMAGE)GetProcAddress (h, "CAPSLoadImage"); pCAPSGetImageInfo = (CAPSGETIMAGEINFO)GetProcAddress (h, "CAPSGetImageInfo"); pCAPSLockTrack = (CAPSLOCKTRACK)GetProcAddress (h, "CAPSLockTrack"); pCAPSUnlockTrack = (CAPSUNLOCKTRACK)GetProcAddress (h, "CAPSUnlockTrack"); pCAPSUnlockAllTracks = (CAPSUNLOCKALLTRACKS)GetProcAddress (h, "CAPSUnlockAllTracks"); pCAPSGetVersionInfo = (CAPSGETVERSIONINFO)GetProcAddress (h, "CAPSGetVersionInfo"); init = 1; cvi.type = 1; pCAPSGetVersionInfo (&cvi, 0); write_log ("CAPS: library version %u.%u (flags=%08X)\n", cvi.release, cvi.revision, cvi.flag); oldlib = (cvi.flag & (DI_LOCK_TRKBIT | DI_LOCK_OVLBIT)) != (DI_LOCK_TRKBIT | DI_LOCK_OVLBIT); if (!oldlib) caps_flags |= DI_LOCK_TRKBIT | DI_LOCK_OVLBIT; canseed = (cvi.flag & DI_LOCK_SETWSEED) != 0; for (i = 0; i < 4; i++) caps_cont[i] = pCAPSAddImage (); return 1; } void caps_unloadimage (int drv) { if (!caps_locked[drv]) return; pCAPSUnlockAllTracks (caps_cont[drv]); pCAPSUnlockImage (caps_cont[drv]); caps_locked[drv] = 0; } int caps_loadimage (struct zfile *zf, int drv, int *num_tracks) { static int notified; struct CapsImageInfo ci; int len, ret; uae_u8 *buf; TCHAR s1[100]; struct CapsDateTimeExt *cdt; if (!caps_init ()) return 0; caps_unloadimage (drv); zfile_fseek (zf, 0, SEEK_END); len = zfile_ftell (zf); zfile_fseek (zf, 0, SEEK_SET); buf = xmalloc (uae_u8, len); if (!buf) return 0; if (zfile_fread (buf, len, 1, zf) == 0) return 0; ret = pCAPSLockImageMemory (caps_cont[drv], buf, len, 0); xfree (buf); if (ret != imgeOk) { if (ret == imgeIncompatible || ret == imgeUnsupported) { if (!notified) notify_user (NUMSG_OLDCAPS); notified = 1; } write_log ("caps: CAPSLockImageMemory() returned %d\n", ret); return 0; } caps_locked[drv] = 1; ret = pCAPSGetImageInfo(&ci, caps_cont[drv]); *num_tracks = (ci.maxcylinder - ci.mincylinder + 1) * (ci.maxhead - ci.minhead + 1); if (cvi.release < 4) { // pre-4.x bug workaround struct CapsTrackInfoT1 cit; cit.type = 1; if (pCAPSLockTrack ((PCAPSTRACKINFO)&cit, caps_cont[drv], 0, 0, caps_flags) == imgeIncompatible) { if (!notified) notify_user (NUMSG_OLDCAPS); notified = 1; caps_unloadimage (drv); return 0; } pCAPSUnlockAllTracks (caps_cont[drv]); } ret = pCAPSLoadImage(caps_cont[drv], caps_flags); cdt = &ci.crdt; //_stprintf (s1, _T("%d.%d.%d %d:%d:%d"), cdt->day, cdt->month, cdt->year, cdt->hour, cdt->min, cdt->sec); //write_log ("caps: type:%d date:%s rel:%d rev:%d\n", // ci.type, s1, ci.release, ci.revision); return 1; } #if 0 static void outdisk (void) { struct CapsTrackInfo ci; int tr; FILE *f; static int done; if (done) return; done = 1; f = fopen("c:\\out3.dat", "wb"); if (!f) return; for (tr = 0; tr < 160; tr++) { pCAPSLockTrack(&ci, caps_cont[0], tr / 2, tr & 1, caps_flags); fwrite (ci.trackdata[0], ci.tracksize[0], 1, f); fwrite ("XXXX", 4, 1, f); } fclose (f); } #endif static void mfmcopy (uae_u16 *mfm, uae_u8 *data, int len) { int memlen = (len + 7) / 8; for (int i = 0; i < memlen; i+=2) { if (i + 1 < memlen) *mfm++ = (data[i] << 8) + data[i + 1]; else *mfm++ = (data[i] << 8); } } static int load (struct CapsTrackInfoT2 *ci, int drv, int track, bool seed) { int flags; flags = caps_flags; if (canseed) { ci->type = 2; if (seed) { flags |= DI_LOCK_SETWSEED; ci->wseed = uaerand (); } } else { ci->type = 1; } if (pCAPSLockTrack ((PCAPSTRACKINFO)ci, caps_cont[drv], track / 2, track & 1, flags) != imgeOk) return 0; return 1; } int caps_loadrevolution (uae_u16 *mfmbuf, int drv, int track, int *tracklength) { int len; struct CapsTrackInfoT2 ci; if (!load (&ci, drv, track, false)) return 0; if (oldlib) len = ci.tracklen * 8; else len = ci.tracklen; *tracklength = len; mfmcopy (mfmbuf, ci.trackbuf, len); return 1; } int caps_loadtrack (uae_u16 *mfmbuf, uae_u16 *tracktiming, int drv, int track, int *tracklength, int *multirev, int *gapoffset) { int len; struct CapsTrackInfoT2 ci; if (tracktiming) *tracktiming = 0; if (!load (&ci, drv, track, true)) return 0; *multirev = (ci.type & CTIT_FLAG_FLAKEY) ? 1 : 0; if (oldlib) { len = ci.tracklen * 8; *gapoffset = ci.overlap >= 0 ? ci.overlap * 8 : -1; } else { len = ci.tracklen; *gapoffset = ci.overlap >= 0 ? ci.overlap : -1; } //write_log (_T("%d %d %d %d\n"), track, len, ci.tracklen, ci.overlap); *tracklength = len; mfmcopy (mfmbuf, ci.trackbuf, len); #if 0 { FILE *f=fopen("c:\\1.txt","wb"); fwrite (ci.trackbuf, len, 1, f); fclose (f); } #endif if (ci.timelen > 0 && tracktiming) { for (unsigned int i = 0; i < ci.timelen; i++) tracktiming[i] = (uae_u16)ci.timebuf[i]; } #if 0 write_log (_T("caps: drive:%d track:%d len:%d multi:%d timing:%d type:%d overlap:%d\n"), drv, track, len, *multirev, ci.timelen, type, ci.overlap); #endif return 1; } #endif fs-uae-2.2.3+dfsg/src/od-fs/version.cpp0000644000175000017500000000010712162366655020043 0ustar glaubitzglaubitzconst char *get_libamiga_base_version() { return "WinUAE 2.5.1"; } fs-uae-2.2.3+dfsg/src/od-fs/target.h0000644000175000017500000000166212162366654017317 0ustar glaubitzglaubitz/* * UAE - The Un*x Amiga Emulator * * Target specific stuff, *nix version * * Copyright 1997 Bernd Schmidt */ #define TARGET_NAME "fsuae" #define TARGET_ROM_PATH "~/" #define TARGET_FLOPPY_PATH "~/" #define TARGET_HARDFILE_PATH "~/" #define TARGET_SAVESTATE_PATH "~/" #ifndef OPTIONSFILENAME #define OPTIONSFILENAME "unused.uaerc" #endif #define OPTIONS_IN_HOME #define DEFPRTNAME "lpr" #define DEFSERNAME "/dev/ttyS1" void filesys_host_init(); int filesys_get_unit_with_package(); void filesys_register_package_available(int unit); int filesys_get_max_frame_packages(); //int filesys_has_more_packages(); //void filesys_wait_for_frame(); //void frame_wait_for_filesys(); //void filesys_handle_events(); extern int g_uae_deterministic_mode; static inline int uae_deterministic_mode() { return g_uae_deterministic_mode; } //void uae_line_update(int line, int updated); uint8_t *uae_get_render_buffer(); fs-uae-2.2.3+dfsg/src/od-fs/md-fpp.h0000644000175000017500000000246112162366654017212 0ustar glaubitzglaubitz /* * UAE - The Un*x Amiga Emulator * * MC68881 emulation * Support functions for IEEE 754-compatible host CPUs. * These functions use a GCC extension (type punning through unions) and * should only be compiled with compilers that support this. * * Copyright 1999 Sam Jordan * Copyright 2007 Richard Drummond */ STATIC_INLINE double to_single (uae_u32 value) { union { float f; uae_u32 u; } val; val.u = value; return val.f; } STATIC_INLINE uae_u32 from_single (double src) { union { float f; uae_u32 u; } val; val.f = src; return val.u; } STATIC_INLINE double to_double (uae_u32 wrd1, uae_u32 wrd2) { union { double d; uae_u32 u[2]; } val; #ifdef WORDS_BIGENDIAN val.u[0] = wrd1; val.u[1] = wrd2; #else val.u[1] = wrd1; val.u[0] = wrd2; #endif return val.d; } STATIC_INLINE void from_double (double src, uae_u32 * wrd1, uae_u32 * wrd2) { union { double d; uae_u32 u[2]; } val; val.d = src; #ifdef WORDS_BIGENDIAN *wrd1 = val.u[0]; *wrd2 = val.u[1]; #else *wrd1 = val.u[1]; *wrd2 = val.u[0]; #endif } #define HAVE_from_double #define HAVE_to_double #define HAVE_from_single #define HAVE_to_single /* Get the rest of the conversion functions defined. */ #include "fpp-unknown.h" fs-uae-2.2.3+dfsg/src/od-fs/caps/0000755000175000017500000000000012162366654016601 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/src/od-fs/caps/caps.h0000644000175000017500000000056712162366654017710 0ustar glaubitzglaubitzint caps_init (void); void caps_unloadimage (int drv); int caps_loadimage (struct zfile *zf, int drv, int *num_tracks); int caps_loadtrack (uae_u16 *mfmbuf, uae_u16 *tracktiming, int drv, int track, int *tracklength, int *multirev, int *gapoffset); int caps_loadrevolution (uae_u16 *mfmbuf, int drv, int track, int *tracklength); fs-uae-2.2.3+dfsg/src/od-fs/uae_host.cpp0000644000175000017500000000243712162366654020174 0ustar glaubitzglaubitz#define DO_NOT_INCLUDE_WINUAE_COMPAT_H #include "sysconfig.h" #include "sysdeps.h" #include #include #include int64_t uae_ftello64(FILE *stream) { #ifdef HAVE_FTELLO64 return ftello64(stream); #else return ftello(stream); #endif } int uae_fseeko64(FILE *stream, int64_t offset, int whence) { #ifdef HAVE_FSEEKO64 return fseeko64(stream, offset, whence); #else return fseeko(stream, offset, whence); #endif } char *uae_expand_path(const char *path) { /* write_log("expand_path %s\n", path); gchar* lower = g_ascii_strdown(path, -1); int replace = 0; if (g_str_has_prefix(lower, "~/") || g_str_has_prefix(lower, "~\\")) { replace = 2; } if (g_str_has_prefix(lower, "$home/") || g_str_has_prefix(lower, "$home\\")) { replace = 6; } free(lower); if (replace) { const gchar *src = path + replace; printf("... %s\n", g_build_filename(g_get_home_dir(), src, NULL)); return g_build_filename(g_get_home_dir(), src, NULL); } else { return fs_strdup(path); } */ return fs_strdup(path); } FILE *uae_fopen(const char *path, const char *mode) { char *p = uae_expand_path(path); FILE *f = fs_fopen(p, mode); free(p); return f; } fs-uae-2.2.3+dfsg/src/od-fs/sound.h0000644000175000017500000000076112162366654017160 0ustar glaubitzglaubitz//extern int init_sound (void); //extern void close_sound (void); //extern int setup_sound (void); extern void resume_sound (void); extern void pause_sound (void); //extern void reset_sound (void); //extern void sound_setadjust (double); //extern int enumerate_sound_devices (void); //extern int drivesound_init (void); //extern void drivesound_free (void); extern void sound_mute (int); extern void sound_volume (int); //extern void set_volume (int, int); extern void master_sound_volume (int); fs-uae-2.2.3+dfsg/src/od-fs/charset.cpp0000644000175000017500000000606012162366654020012 0ustar glaubitzglaubitz#include "sysconfig.h" #include "sysdeps.h" #include // fs-uae uses only chars / UTF-8 internally, so TCHAR is typedefed to // char (WinUAE uses wchar_t internally). char *ua(const TCHAR *s) { if (s == NULL) return NULL; return strdup(s); } char *au(const TCHAR *s) { if (s == NULL) return NULL; return strdup(s); } TCHAR* utf8u(const char *s) { if (s == NULL) return NULL; return ua(s); } char* uutf8(const TCHAR *s) { if (s == NULL) return NULL; return ua(s); } char *ua_copy (char *dst, int maxlen, const TCHAR *src) { dst[0] = 0; strncpy(dst, src, maxlen); return dst; } TCHAR *au_copy (TCHAR *dst, int maxlen, const char *src) { dst[0] = 0; strncpy(dst, src, maxlen); return dst; } TCHAR *my_strdup_ansi (const char *src) { return strdup(src); } #define NO_TRANSLATION TCHAR *au_fs (const char *src) { #ifdef NO_TRANSLATION if (src == NULL) return NULL; return strdup(src); #else gsize read, written; gchar *result = g_convert(src, -1, "UTF-8", "ISO-8859-1", &read, &written, NULL); if (result == NULL) { write_log("WARNING: au_fs_copy failed to convert string %s", src); return strdup(""); } return result; #endif } char *ua_fs (const TCHAR *s, int defchar) { #ifdef NO_TRANSLATION if (s == NULL) return NULL; return strdup(s); #else // we convert from fs-uae's internal encoding (UTF-8) to latin-1 here, // so file names can be read properly in the amiga char def[] = "?"; if (defchar < 128) { def[0] = defchar; } gsize read, written; gchar *result = g_convert_with_fallback(s, -1, "ISO-8859-1", "UTF-8", def, &read, &written, NULL); if (result == NULL) { write_log("WARNING: ua_fs failed to convert string %s", s); return strdup(""); } // duplicate with libc malloc char *result_malloced = strdup(result); free(result); return result_malloced; #endif } TCHAR *au_fs_copy (TCHAR *dst, int maxlen, const char *src) { #ifdef NO_TRANSLATION dst[0] = 0; strncpy(dst, src, maxlen); return dst; #else gsize read, written; gchar *result = g_convert(src, -1, "UTF-8", "ISO-8859-1", &read, &written, NULL); if (result == NULL) { write_log("WARNING: au_fs_copy failed to convert string %s", src); dst[0] = '\0'; return dst; } strncpy(dst, result, maxlen); free(result); return dst; #endif } char *ua_fs_copy (char *dst, int maxlen, const TCHAR *src, int defchar) { #ifdef NO_TRANSLATION dst[0] = 0; strncpy(dst, src, maxlen); return dst; #else char def[] = "?"; if (defchar < 128) { def[0] = defchar; } gsize read, written; gchar *result = g_convert_with_fallback(src, -1, "ISO-8859-1", "UTF-8", def, &read, &written, NULL); if (result == NULL) { write_log("WARNING: ua_fs_copy failed to convert string %s", src); dst[0] = '\0'; return dst; } strncpy(dst, result, maxlen); free(result); return dst; #endif } fs-uae-2.2.3+dfsg/src/od-fs/FLAC/0000755000175000017500000000000012162366654016360 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/src/od-fs/FLAC/ordinals.h0000644000175000017500000000521212162366654020344 0ustar glaubitzglaubitz/* libFLAC - Free Lossless Audio Codec library * Copyright (C) 2000,2001,2002,2003,2004,2005,2006,2007 Josh Coalson * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * - Neither the name of the Xiph.org Foundation nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef FLAC__ORDINALS_H #define FLAC__ORDINALS_H #if !(defined(_MSC_VER) || defined(__BORLANDC__) || defined(__EMX__)) #include #endif typedef signed char FLAC__int8; typedef unsigned char FLAC__uint8; #if defined(_MSC_VER) || defined(__BORLANDC__) typedef __int16 FLAC__int16; typedef __int32 FLAC__int32; typedef __int64 FLAC__int64; typedef unsigned __int16 FLAC__uint16; typedef unsigned __int32 FLAC__uint32; typedef unsigned __int64 FLAC__uint64; #elif defined(__EMX__) typedef short FLAC__int16; typedef long FLAC__int32; typedef long long FLAC__int64; typedef unsigned short FLAC__uint16; typedef unsigned long FLAC__uint32; typedef unsigned long long FLAC__uint64; #else typedef int16_t FLAC__int16; typedef int32_t FLAC__int32; typedef int64_t FLAC__int64; typedef uint16_t FLAC__uint16; typedef uint32_t FLAC__uint32; typedef uint64_t FLAC__uint64; #endif typedef int FLAC__bool; typedef FLAC__uint8 FLAC__byte; #ifdef true #undef true #endif #ifdef false #undef false #endif #ifndef __cplusplus #define true 1 #define false 0 #endif #endif fs-uae-2.2.3+dfsg/src/od-fs/FLAC/metadata.h0000644000175000017500000030234712162366654020322 0ustar glaubitzglaubitz/* libFLAC - Free Lossless Audio Codec library * Copyright (C) 2001,2002,2003,2004,2005,2006,2007 Josh Coalson * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * - Neither the name of the Xiph.org Foundation nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef FLAC__METADATA_H #define FLAC__METADATA_H #include /* for off_t */ #include "export.h" #include "callback.h" #include "format.h" /* -------------------------------------------------------------------- (For an example of how all these routines are used, see the source code for the unit tests in src/test_libFLAC/metadata_*.c, or metaflac in src/metaflac/) ------------------------------------------------------------------*/ /** \file include/FLAC/metadata.h * * \brief * This module provides functions for creating and manipulating FLAC * metadata blocks in memory, and three progressively more powerful * interfaces for traversing and editing metadata in FLAC files. * * See the detailed documentation for each interface in the * \link flac_metadata metadata \endlink module. */ /** \defgroup flac_metadata FLAC/metadata.h: metadata interfaces * \ingroup flac * * \brief * This module provides functions for creating and manipulating FLAC * metadata blocks in memory, and three progressively more powerful * interfaces for traversing and editing metadata in native FLAC files. * Note that currently only the Chain interface (level 2) supports Ogg * FLAC files, and it is read-only i.e. no writing back changed * metadata to file. * * There are three metadata interfaces of increasing complexity: * * Level 0: * Read-only access to the STREAMINFO, VORBIS_COMMENT, CUESHEET, and * PICTURE blocks. * * Level 1: * Read-write access to all metadata blocks. This level is write- * efficient in most cases (more on this below), and uses less memory * than level 2. * * Level 2: * Read-write access to all metadata blocks. This level is write- * efficient in all cases, but uses more memory since all metadata for * the whole file is read into memory and manipulated before writing * out again. * * What do we mean by efficient? Since FLAC metadata appears at the * beginning of the file, when writing metadata back to a FLAC file * it is possible to grow or shrink the metadata such that the entire * file must be rewritten. However, if the size remains the same during * changes or PADDING blocks are utilized, only the metadata needs to be * overwritten, which is much faster. * * Efficient means the whole file is rewritten at most one time, and only * when necessary. Level 1 is not efficient only in the case that you * cause more than one metadata block to grow or shrink beyond what can * be accomodated by padding. In this case you should probably use level * 2, which allows you to edit all the metadata for a file in memory and * write it out all at once. * * All levels know how to skip over and not disturb an ID3v2 tag at the * front of the file. * * All levels access files via their filenames. In addition, level 2 * has additional alternative read and write functions that take an I/O * handle and callbacks, for situations where access by filename is not * possible. * * In addition to the three interfaces, this module defines functions for * creating and manipulating various metadata objects in memory. As we see * from the Format module, FLAC metadata blocks in memory are very primitive * structures for storing information in an efficient way. Reading * information from the structures is easy but creating or modifying them * directly is more complex. The metadata object routines here facilitate * this by taking care of the consistency and memory management drudgery. * * Unless you will be using the level 1 or 2 interfaces to modify existing * metadata however, you will not probably not need these. * * From a dependency standpoint, none of the encoders or decoders require * the metadata module. This is so that embedded users can strip out the * metadata module from libFLAC to reduce the size and complexity. */ #ifdef __cplusplus extern "C" { #endif /** \defgroup flac_metadata_level0 FLAC/metadata.h: metadata level 0 interface * \ingroup flac_metadata * * \brief * The level 0 interface consists of individual routines to read the * STREAMINFO, VORBIS_COMMENT, CUESHEET, and PICTURE blocks, requiring * only a filename. * * They try to skip any ID3v2 tag at the head of the file. * * \{ */ /** Read the STREAMINFO metadata block of the given FLAC file. This function * will try to skip any ID3v2 tag at the head of the file. * * \param filename The path to the FLAC file to read. * \param streaminfo A pointer to space for the STREAMINFO block. Since * FLAC__StreamMetadata is a simple structure with no * memory allocation involved, you pass the address of * an existing structure. It need not be initialized. * \assert * \code filename != NULL \endcode * \code streaminfo != NULL \endcode * \retval FLAC__bool * \c true if a valid STREAMINFO block was read from \a filename. Returns * \c false if there was a memory allocation error, a file decoder error, * or the file contained no STREAMINFO block. (A memory allocation error * is possible because this function must set up a file decoder.) */ FLAC_API FLAC__bool FLAC__metadata_get_streaminfo(const char *filename, FLAC__StreamMetadata *streaminfo); /** Read the VORBIS_COMMENT metadata block of the given FLAC file. This * function will try to skip any ID3v2 tag at the head of the file. * * \param filename The path to the FLAC file to read. * \param tags The address where the returned pointer will be * stored. The \a tags object must be deleted by * the caller using FLAC__metadata_object_delete(). * \assert * \code filename != NULL \endcode * \code tags != NULL \endcode * \retval FLAC__bool * \c true if a valid VORBIS_COMMENT block was read from \a filename, * and \a *tags will be set to the address of the metadata structure. * Returns \c false if there was a memory allocation error, a file * decoder error, or the file contained no VORBIS_COMMENT block, and * \a *tags will be set to \c NULL. */ FLAC_API FLAC__bool FLAC__metadata_get_tags(const char *filename, FLAC__StreamMetadata **tags); /** Read the CUESHEET metadata block of the given FLAC file. This * function will try to skip any ID3v2 tag at the head of the file. * * \param filename The path to the FLAC file to read. * \param cuesheet The address where the returned pointer will be * stored. The \a cuesheet object must be deleted by * the caller using FLAC__metadata_object_delete(). * \assert * \code filename != NULL \endcode * \code cuesheet != NULL \endcode * \retval FLAC__bool * \c true if a valid CUESHEET block was read from \a filename, * and \a *cuesheet will be set to the address of the metadata * structure. Returns \c false if there was a memory allocation * error, a file decoder error, or the file contained no CUESHEET * block, and \a *cuesheet will be set to \c NULL. */ FLAC_API FLAC__bool FLAC__metadata_get_cuesheet(const char *filename, FLAC__StreamMetadata **cuesheet); /** Read a PICTURE metadata block of the given FLAC file. This * function will try to skip any ID3v2 tag at the head of the file. * Since there can be more than one PICTURE block in a file, this * function takes a number of parameters that act as constraints to * the search. The PICTURE block with the largest area matching all * the constraints will be returned, or \a *picture will be set to * \c NULL if there was no such block. * * \param filename The path to the FLAC file to read. * \param picture The address where the returned pointer will be * stored. The \a picture object must be deleted by * the caller using FLAC__metadata_object_delete(). * \param type The desired picture type. Use \c -1 to mean * "any type". * \param mime_type The desired MIME type, e.g. "image/jpeg". The * string will be matched exactly. Use \c NULL to * mean "any MIME type". * \param description The desired description. The string will be * matched exactly. Use \c NULL to mean "any * description". * \param max_width The maximum width in pixels desired. Use * \c (unsigned)(-1) to mean "any width". * \param max_height The maximum height in pixels desired. Use * \c (unsigned)(-1) to mean "any height". * \param max_depth The maximum color depth in bits-per-pixel desired. * Use \c (unsigned)(-1) to mean "any depth". * \param max_colors The maximum number of colors desired. Use * \c (unsigned)(-1) to mean "any number of colors". * \assert * \code filename != NULL \endcode * \code picture != NULL \endcode * \retval FLAC__bool * \c true if a valid PICTURE block was read from \a filename, * and \a *picture will be set to the address of the metadata * structure. Returns \c false if there was a memory allocation * error, a file decoder error, or the file contained no PICTURE * block, and \a *picture will be set to \c NULL. */ FLAC_API FLAC__bool FLAC__metadata_get_picture(const char *filename, FLAC__StreamMetadata **picture, FLAC__StreamMetadata_Picture_Type type, const char *mime_type, const FLAC__byte *description, unsigned max_width, unsigned max_height, unsigned max_depth, unsigned max_colors); /* \} */ /** \defgroup flac_metadata_level1 FLAC/metadata.h: metadata level 1 interface * \ingroup flac_metadata * * \brief * The level 1 interface provides read-write access to FLAC file metadata and * operates directly on the FLAC file. * * The general usage of this interface is: * * - Create an iterator using FLAC__metadata_simple_iterator_new() * - Attach it to a file using FLAC__metadata_simple_iterator_init() and check * the exit code. Call FLAC__metadata_simple_iterator_is_writable() to * see if the file is writable, or only read access is allowed. * - Use FLAC__metadata_simple_iterator_next() and * FLAC__metadata_simple_iterator_prev() to traverse the blocks. * This is does not read the actual blocks themselves. * FLAC__metadata_simple_iterator_next() is relatively fast. * FLAC__metadata_simple_iterator_prev() is slower since it needs to search * forward from the front of the file. * - Use FLAC__metadata_simple_iterator_get_block_type() or * FLAC__metadata_simple_iterator_get_block() to access the actual data at * the current iterator position. The returned object is yours to modify * and free. * - Use FLAC__metadata_simple_iterator_set_block() to write a modified block * back. You must have write permission to the original file. Make sure to * read the whole comment to FLAC__metadata_simple_iterator_set_block() * below. * - Use FLAC__metadata_simple_iterator_insert_block_after() to add new blocks. * Use the object creation functions from * \link flac_metadata_object here \endlink to generate new objects. * - Use FLAC__metadata_simple_iterator_delete_block() to remove the block * currently referred to by the iterator, or replace it with padding. * - Destroy the iterator with FLAC__metadata_simple_iterator_delete() when * finished. * * \note * The FLAC file remains open the whole time between * FLAC__metadata_simple_iterator_init() and * FLAC__metadata_simple_iterator_delete(), so make sure you are not altering * the file during this time. * * \note * Do not modify the \a is_last, \a length, or \a type fields of returned * FLAC__StreamMetadata objects. These are managed automatically. * * \note * If any of the modification functions * (FLAC__metadata_simple_iterator_set_block(), * FLAC__metadata_simple_iterator_delete_block(), * FLAC__metadata_simple_iterator_insert_block_after(), etc.) return \c false, * you should delete the iterator as it may no longer be valid. * * \{ */ struct FLAC__Metadata_SimpleIterator; /** The opaque structure definition for the level 1 iterator type. * See the * \link flac_metadata_level1 metadata level 1 module \endlink * for a detailed description. */ typedef struct FLAC__Metadata_SimpleIterator FLAC__Metadata_SimpleIterator; /** Status type for FLAC__Metadata_SimpleIterator. * * The iterator's current status can be obtained by calling FLAC__metadata_simple_iterator_status(). */ typedef enum { FLAC__METADATA_SIMPLE_ITERATOR_STATUS_OK = 0, /**< The iterator is in the normal OK state */ FLAC__METADATA_SIMPLE_ITERATOR_STATUS_ILLEGAL_INPUT, /**< The data passed into a function violated the function's usage criteria */ FLAC__METADATA_SIMPLE_ITERATOR_STATUS_ERROR_OPENING_FILE, /**< The iterator could not open the target file */ FLAC__METADATA_SIMPLE_ITERATOR_STATUS_NOT_A_FLAC_FILE, /**< The iterator could not find the FLAC signature at the start of the file */ FLAC__METADATA_SIMPLE_ITERATOR_STATUS_NOT_WRITABLE, /**< The iterator tried to write to a file that was not writable */ FLAC__METADATA_SIMPLE_ITERATOR_STATUS_BAD_METADATA, /**< The iterator encountered input that does not conform to the FLAC metadata specification */ FLAC__METADATA_SIMPLE_ITERATOR_STATUS_READ_ERROR, /**< The iterator encountered an error while reading the FLAC file */ FLAC__METADATA_SIMPLE_ITERATOR_STATUS_SEEK_ERROR, /**< The iterator encountered an error while seeking in the FLAC file */ FLAC__METADATA_SIMPLE_ITERATOR_STATUS_WRITE_ERROR, /**< The iterator encountered an error while writing the FLAC file */ FLAC__METADATA_SIMPLE_ITERATOR_STATUS_RENAME_ERROR, /**< The iterator encountered an error renaming the FLAC file */ FLAC__METADATA_SIMPLE_ITERATOR_STATUS_UNLINK_ERROR, /**< The iterator encountered an error removing the temporary file */ FLAC__METADATA_SIMPLE_ITERATOR_STATUS_MEMORY_ALLOCATION_ERROR, /**< Memory allocation failed */ FLAC__METADATA_SIMPLE_ITERATOR_STATUS_INTERNAL_ERROR /**< The caller violated an assertion or an unexpected error occurred */ } FLAC__Metadata_SimpleIteratorStatus; /** Maps a FLAC__Metadata_SimpleIteratorStatus to a C string. * * Using a FLAC__Metadata_SimpleIteratorStatus as the index to this array * will give the string equivalent. The contents should not be modified. */ extern FLAC_API const char * const FLAC__Metadata_SimpleIteratorStatusString[]; /** Create a new iterator instance. * * \retval FLAC__Metadata_SimpleIterator* * \c NULL if there was an error allocating memory, else the new instance. */ FLAC_API FLAC__Metadata_SimpleIterator *FLAC__metadata_simple_iterator_new(void); /** Free an iterator instance. Deletes the object pointed to by \a iterator. * * \param iterator A pointer to an existing iterator. * \assert * \code iterator != NULL \endcode */ FLAC_API void FLAC__metadata_simple_iterator_delete(FLAC__Metadata_SimpleIterator *iterator); /** Get the current status of the iterator. Call this after a function * returns \c false to get the reason for the error. Also resets the status * to FLAC__METADATA_SIMPLE_ITERATOR_STATUS_OK. * * \param iterator A pointer to an existing iterator. * \assert * \code iterator != NULL \endcode * \retval FLAC__Metadata_SimpleIteratorStatus * The current status of the iterator. */ FLAC_API FLAC__Metadata_SimpleIteratorStatus FLAC__metadata_simple_iterator_status(FLAC__Metadata_SimpleIterator *iterator); /** Initialize the iterator to point to the first metadata block in the * given FLAC file. * * \param iterator A pointer to an existing iterator. * \param filename The path to the FLAC file. * \param read_only If \c true, the FLAC file will be opened * in read-only mode; if \c false, the FLAC * file will be opened for edit even if no * edits are performed. * \param preserve_file_stats If \c true, the owner and modification * time will be preserved even if the FLAC * file is written to. * \assert * \code iterator != NULL \endcode * \code filename != NULL \endcode * \retval FLAC__bool * \c false if a memory allocation error occurs, the file can't be * opened, or another error occurs, else \c true. */ FLAC_API FLAC__bool FLAC__metadata_simple_iterator_init(FLAC__Metadata_SimpleIterator *iterator, const char *filename, FLAC__bool read_only, FLAC__bool preserve_file_stats); /** Returns \c true if the FLAC file is writable. If \c false, calls to * FLAC__metadata_simple_iterator_set_block() and * FLAC__metadata_simple_iterator_insert_block_after() will fail. * * \param iterator A pointer to an existing iterator. * \assert * \code iterator != NULL \endcode * \retval FLAC__bool * See above. */ FLAC_API FLAC__bool FLAC__metadata_simple_iterator_is_writable(const FLAC__Metadata_SimpleIterator *iterator); /** Moves the iterator forward one metadata block, returning \c false if * already at the end. * * \param iterator A pointer to an existing initialized iterator. * \assert * \code iterator != NULL \endcode * \a iterator has been successfully initialized with * FLAC__metadata_simple_iterator_init() * \retval FLAC__bool * \c false if already at the last metadata block of the chain, else * \c true. */ FLAC_API FLAC__bool FLAC__metadata_simple_iterator_next(FLAC__Metadata_SimpleIterator *iterator); /** Moves the iterator backward one metadata block, returning \c false if * already at the beginning. * * \param iterator A pointer to an existing initialized iterator. * \assert * \code iterator != NULL \endcode * \a iterator has been successfully initialized with * FLAC__metadata_simple_iterator_init() * \retval FLAC__bool * \c false if already at the first metadata block of the chain, else * \c true. */ FLAC_API FLAC__bool FLAC__metadata_simple_iterator_prev(FLAC__Metadata_SimpleIterator *iterator); /** Returns a flag telling if the current metadata block is the last. * * \param iterator A pointer to an existing initialized iterator. * \assert * \code iterator != NULL \endcode * \a iterator has been successfully initialized with * FLAC__metadata_simple_iterator_init() * \retval FLAC__bool * \c true if the current metadata block is the last in the file, * else \c false. */ FLAC_API FLAC__bool FLAC__metadata_simple_iterator_is_last(const FLAC__Metadata_SimpleIterator *iterator); /** Get the offset of the metadata block at the current position. This * avoids reading the actual block data which can save time for large * blocks. * * \param iterator A pointer to an existing initialized iterator. * \assert * \code iterator != NULL \endcode * \a iterator has been successfully initialized with * FLAC__metadata_simple_iterator_init() * \retval off_t * The offset of the metadata block at the current iterator position. * This is the byte offset relative to the beginning of the file of * the current metadata block's header. */ FLAC_API off_t FLAC__metadata_simple_iterator_get_block_offset(const FLAC__Metadata_SimpleIterator *iterator); /** Get the type of the metadata block at the current position. This * avoids reading the actual block data which can save time for large * blocks. * * \param iterator A pointer to an existing initialized iterator. * \assert * \code iterator != NULL \endcode * \a iterator has been successfully initialized with * FLAC__metadata_simple_iterator_init() * \retval FLAC__MetadataType * The type of the metadata block at the current iterator position. */ FLAC_API FLAC__MetadataType FLAC__metadata_simple_iterator_get_block_type(const FLAC__Metadata_SimpleIterator *iterator); /** Get the length of the metadata block at the current position. This * avoids reading the actual block data which can save time for large * blocks. * * \param iterator A pointer to an existing initialized iterator. * \assert * \code iterator != NULL \endcode * \a iterator has been successfully initialized with * FLAC__metadata_simple_iterator_init() * \retval unsigned * The length of the metadata block at the current iterator position. * The is same length as that in the * metadata block header, * i.e. the length of the metadata body that follows the header. */ FLAC_API unsigned FLAC__metadata_simple_iterator_get_block_length(const FLAC__Metadata_SimpleIterator *iterator); /** Get the application ID of the \c APPLICATION block at the current * position. This avoids reading the actual block data which can save * time for large blocks. * * \param iterator A pointer to an existing initialized iterator. * \param id A pointer to a buffer of at least \c 4 bytes where * the ID will be stored. * \assert * \code iterator != NULL \endcode * \code id != NULL \endcode * \a iterator has been successfully initialized with * FLAC__metadata_simple_iterator_init() * \retval FLAC__bool * \c true if the ID was successfully read, else \c false, in which * case you should check FLAC__metadata_simple_iterator_status() to * find out why. If the status is * \c FLAC__METADATA_SIMPLE_ITERATOR_STATUS_ILLEGAL_INPUT, then the * current metadata block is not an \c APPLICATION block. Otherwise * if the status is * \c FLAC__METADATA_SIMPLE_ITERATOR_STATUS_READ_ERROR or * \c FLAC__METADATA_SIMPLE_ITERATOR_STATUS_SEEK_ERROR, an I/O error * occurred and the iterator can no longer be used. */ FLAC_API FLAC__bool FLAC__metadata_simple_iterator_get_application_id(FLAC__Metadata_SimpleIterator *iterator, FLAC__byte *id); /** Get the metadata block at the current position. You can modify the * block but must use FLAC__metadata_simple_iterator_set_block() to * write it back to the FLAC file. * * You must call FLAC__metadata_object_delete() on the returned object * when you are finished with it. * * \param iterator A pointer to an existing initialized iterator. * \assert * \code iterator != NULL \endcode * \a iterator has been successfully initialized with * FLAC__metadata_simple_iterator_init() * \retval FLAC__StreamMetadata* * The current metadata block, or \c NULL if there was a memory * allocation error. */ FLAC_API FLAC__StreamMetadata *FLAC__metadata_simple_iterator_get_block(FLAC__Metadata_SimpleIterator *iterator); /** Write a block back to the FLAC file. This function tries to be * as efficient as possible; how the block is actually written is * shown by the following: * * Existing block is a STREAMINFO block and the new block is a * STREAMINFO block: the new block is written in place. Make sure * you know what you're doing when changing the values of a * STREAMINFO block. * * Existing block is a STREAMINFO block and the new block is a * not a STREAMINFO block: this is an error since the first block * must be a STREAMINFO block. Returns \c false without altering the * file. * * Existing block is not a STREAMINFO block and the new block is a * STREAMINFO block: this is an error since there may be only one * STREAMINFO block. Returns \c false without altering the file. * * Existing block and new block are the same length: the existing * block will be replaced by the new block, written in place. * * Existing block is longer than new block: if use_padding is \c true, * the existing block will be overwritten in place with the new * block followed by a PADDING block, if possible, to make the total * size the same as the existing block. Remember that a padding * block requires at least four bytes so if the difference in size * between the new block and existing block is less than that, the * entire file will have to be rewritten, using the new block's * exact size. If use_padding is \c false, the entire file will be * rewritten, replacing the existing block by the new block. * * Existing block is shorter than new block: if use_padding is \c true, * the function will try and expand the new block into the following * PADDING block, if it exists and doing so won't shrink the PADDING * block to less than 4 bytes. If there is no following PADDING * block, or it will shrink to less than 4 bytes, or use_padding is * \c false, the entire file is rewritten, replacing the existing block * with the new block. Note that in this case any following PADDING * block is preserved as is. * * After writing the block, the iterator will remain in the same * place, i.e. pointing to the new block. * * \param iterator A pointer to an existing initialized iterator. * \param block The block to set. * \param use_padding See above. * \assert * \code iterator != NULL \endcode * \a iterator has been successfully initialized with * FLAC__metadata_simple_iterator_init() * \code block != NULL \endcode * \retval FLAC__bool * \c true if successful, else \c false. */ FLAC_API FLAC__bool FLAC__metadata_simple_iterator_set_block(FLAC__Metadata_SimpleIterator *iterator, FLAC__StreamMetadata *block, FLAC__bool use_padding); /** This is similar to FLAC__metadata_simple_iterator_set_block() * except that instead of writing over an existing block, it appends * a block after the existing block. \a use_padding is again used to * tell the function to try an expand into following padding in an * attempt to avoid rewriting the entire file. * * This function will fail and return \c false if given a STREAMINFO * block. * * After writing the block, the iterator will be pointing to the * new block. * * \param iterator A pointer to an existing initialized iterator. * \param block The block to set. * \param use_padding See above. * \assert * \code iterator != NULL \endcode * \a iterator has been successfully initialized with * FLAC__metadata_simple_iterator_init() * \code block != NULL \endcode * \retval FLAC__bool * \c true if successful, else \c false. */ FLAC_API FLAC__bool FLAC__metadata_simple_iterator_insert_block_after(FLAC__Metadata_SimpleIterator *iterator, FLAC__StreamMetadata *block, FLAC__bool use_padding); /** Deletes the block at the current position. This will cause the * entire FLAC file to be rewritten, unless \a use_padding is \c true, * in which case the block will be replaced by an equal-sized PADDING * block. The iterator will be left pointing to the block before the * one just deleted. * * You may not delete the STREAMINFO block. * * \param iterator A pointer to an existing initialized iterator. * \param use_padding See above. * \assert * \code iterator != NULL \endcode * \a iterator has been successfully initialized with * FLAC__metadata_simple_iterator_init() * \retval FLAC__bool * \c true if successful, else \c false. */ FLAC_API FLAC__bool FLAC__metadata_simple_iterator_delete_block(FLAC__Metadata_SimpleIterator *iterator, FLAC__bool use_padding); /* \} */ /** \defgroup flac_metadata_level2 FLAC/metadata.h: metadata level 2 interface * \ingroup flac_metadata * * \brief * The level 2 interface provides read-write access to FLAC file metadata; * all metadata is read into memory, operated on in memory, and then written * to file, which is more efficient than level 1 when editing multiple blocks. * * Currently Ogg FLAC is supported for read only, via * FLAC__metadata_chain_read_ogg() but a subsequent * FLAC__metadata_chain_write() will fail. * * The general usage of this interface is: * * - Create a new chain using FLAC__metadata_chain_new(). A chain is a * linked list of FLAC metadata blocks. * - Read all metadata into the the chain from a FLAC file using * FLAC__metadata_chain_read() or FLAC__metadata_chain_read_ogg() and * check the status. * - Optionally, consolidate the padding using * FLAC__metadata_chain_merge_padding() or * FLAC__metadata_chain_sort_padding(). * - Create a new iterator using FLAC__metadata_iterator_new() * - Initialize the iterator to point to the first element in the chain * using FLAC__metadata_iterator_init() * - Traverse the chain using FLAC__metadata_iterator_next and * FLAC__metadata_iterator_prev(). * - Get a block for reading or modification using * FLAC__metadata_iterator_get_block(). The pointer to the object * inside the chain is returned, so the block is yours to modify. * Changes will be reflected in the FLAC file when you write the * chain. You can also add and delete blocks (see functions below). * - When done, write out the chain using FLAC__metadata_chain_write(). * Make sure to read the whole comment to the function below. * - Delete the chain using FLAC__metadata_chain_delete(). * * \note * Even though the FLAC file is not open while the chain is being * manipulated, you must not alter the file externally during * this time. The chain assumes the FLAC file will not change * between the time of FLAC__metadata_chain_read()/FLAC__metadata_chain_read_ogg() * and FLAC__metadata_chain_write(). * * \note * Do not modify the is_last, length, or type fields of returned * FLAC__StreamMetadata objects. These are managed automatically. * * \note * The metadata objects returned by FLAC__metadata_iterator_get_block() * are owned by the chain; do not FLAC__metadata_object_delete() them. * In the same way, blocks passed to FLAC__metadata_iterator_set_block() * become owned by the chain and they will be deleted when the chain is * deleted. * * \{ */ struct FLAC__Metadata_Chain; /** The opaque structure definition for the level 2 chain type. */ typedef struct FLAC__Metadata_Chain FLAC__Metadata_Chain; struct FLAC__Metadata_Iterator; /** The opaque structure definition for the level 2 iterator type. */ typedef struct FLAC__Metadata_Iterator FLAC__Metadata_Iterator; typedef enum { FLAC__METADATA_CHAIN_STATUS_OK = 0, /**< The chain is in the normal OK state */ FLAC__METADATA_CHAIN_STATUS_ILLEGAL_INPUT, /**< The data passed into a function violated the function's usage criteria */ FLAC__METADATA_CHAIN_STATUS_ERROR_OPENING_FILE, /**< The chain could not open the target file */ FLAC__METADATA_CHAIN_STATUS_NOT_A_FLAC_FILE, /**< The chain could not find the FLAC signature at the start of the file */ FLAC__METADATA_CHAIN_STATUS_NOT_WRITABLE, /**< The chain tried to write to a file that was not writable */ FLAC__METADATA_CHAIN_STATUS_BAD_METADATA, /**< The chain encountered input that does not conform to the FLAC metadata specification */ FLAC__METADATA_CHAIN_STATUS_READ_ERROR, /**< The chain encountered an error while reading the FLAC file */ FLAC__METADATA_CHAIN_STATUS_SEEK_ERROR, /**< The chain encountered an error while seeking in the FLAC file */ FLAC__METADATA_CHAIN_STATUS_WRITE_ERROR, /**< The chain encountered an error while writing the FLAC file */ FLAC__METADATA_CHAIN_STATUS_RENAME_ERROR, /**< The chain encountered an error renaming the FLAC file */ FLAC__METADATA_CHAIN_STATUS_UNLINK_ERROR, /**< The chain encountered an error removing the temporary file */ FLAC__METADATA_CHAIN_STATUS_MEMORY_ALLOCATION_ERROR, /**< Memory allocation failed */ FLAC__METADATA_CHAIN_STATUS_INTERNAL_ERROR, /**< The caller violated an assertion or an unexpected error occurred */ FLAC__METADATA_CHAIN_STATUS_INVALID_CALLBACKS, /**< One or more of the required callbacks was NULL */ FLAC__METADATA_CHAIN_STATUS_READ_WRITE_MISMATCH, /**< FLAC__metadata_chain_write() was called on a chain read by * FLAC__metadata_chain_read_with_callbacks()/FLAC__metadata_chain_read_ogg_with_callbacks(), * or * FLAC__metadata_chain_write_with_callbacks()/FLAC__metadata_chain_write_with_callbacks_and_tempfile() * was called on a chain read by * FLAC__metadata_chain_read()/FLAC__metadata_chain_read_ogg(). * Matching read/write methods must always be used. */ FLAC__METADATA_CHAIN_STATUS_WRONG_WRITE_CALL /**< FLAC__metadata_chain_write_with_callbacks() was called when the * chain write requires a tempfile; use * FLAC__metadata_chain_write_with_callbacks_and_tempfile() instead. * Or, FLAC__metadata_chain_write_with_callbacks_and_tempfile() was * called when the chain write does not require a tempfile; use * FLAC__metadata_chain_write_with_callbacks() instead. * Always check FLAC__metadata_chain_check_if_tempfile_needed() * before writing via callbacks. */ } FLAC__Metadata_ChainStatus; /** Maps a FLAC__Metadata_ChainStatus to a C string. * * Using a FLAC__Metadata_ChainStatus as the index to this array * will give the string equivalent. The contents should not be modified. */ extern FLAC_API const char * const FLAC__Metadata_ChainStatusString[]; /*********** FLAC__Metadata_Chain ***********/ /** Create a new chain instance. * * \retval FLAC__Metadata_Chain* * \c NULL if there was an error allocating memory, else the new instance. */ FLAC_API FLAC__Metadata_Chain *FLAC__metadata_chain_new(void); /** Free a chain instance. Deletes the object pointed to by \a chain. * * \param chain A pointer to an existing chain. * \assert * \code chain != NULL \endcode */ FLAC_API void FLAC__metadata_chain_delete(FLAC__Metadata_Chain *chain); /** Get the current status of the chain. Call this after a function * returns \c false to get the reason for the error. Also resets the * status to FLAC__METADATA_CHAIN_STATUS_OK. * * \param chain A pointer to an existing chain. * \assert * \code chain != NULL \endcode * \retval FLAC__Metadata_ChainStatus * The current status of the chain. */ FLAC_API FLAC__Metadata_ChainStatus FLAC__metadata_chain_status(FLAC__Metadata_Chain *chain); /** Read all metadata from a FLAC file into the chain. * * \param chain A pointer to an existing chain. * \param filename The path to the FLAC file to read. * \assert * \code chain != NULL \endcode * \code filename != NULL \endcode * \retval FLAC__bool * \c true if a valid list of metadata blocks was read from * \a filename, else \c false. On failure, check the status with * FLAC__metadata_chain_status(). */ FLAC_API FLAC__bool FLAC__metadata_chain_read(FLAC__Metadata_Chain *chain, const char *filename); /** Read all metadata from an Ogg FLAC file into the chain. * * \note Ogg FLAC metadata data writing is not supported yet and * FLAC__metadata_chain_write() will fail. * * \param chain A pointer to an existing chain. * \param filename The path to the Ogg FLAC file to read. * \assert * \code chain != NULL \endcode * \code filename != NULL \endcode * \retval FLAC__bool * \c true if a valid list of metadata blocks was read from * \a filename, else \c false. On failure, check the status with * FLAC__metadata_chain_status(). */ FLAC_API FLAC__bool FLAC__metadata_chain_read_ogg(FLAC__Metadata_Chain *chain, const char *filename); /** Read all metadata from a FLAC stream into the chain via I/O callbacks. * * The \a handle need only be open for reading, but must be seekable. * The equivalent minimum stdio fopen() file mode is \c "r" (or \c "rb" * for Windows). * * \param chain A pointer to an existing chain. * \param handle The I/O handle of the FLAC stream to read. The * handle will NOT be closed after the metadata is read; * that is the duty of the caller. * \param callbacks * A set of callbacks to use for I/O. The mandatory * callbacks are \a read, \a seek, and \a tell. * \assert * \code chain != NULL \endcode * \retval FLAC__bool * \c true if a valid list of metadata blocks was read from * \a handle, else \c false. On failure, check the status with * FLAC__metadata_chain_status(). */ FLAC_API FLAC__bool FLAC__metadata_chain_read_with_callbacks(FLAC__Metadata_Chain *chain, FLAC__IOHandle handle, FLAC__IOCallbacks callbacks); /** Read all metadata from an Ogg FLAC stream into the chain via I/O callbacks. * * The \a handle need only be open for reading, but must be seekable. * The equivalent minimum stdio fopen() file mode is \c "r" (or \c "rb" * for Windows). * * \note Ogg FLAC metadata data writing is not supported yet and * FLAC__metadata_chain_write() will fail. * * \param chain A pointer to an existing chain. * \param handle The I/O handle of the Ogg FLAC stream to read. The * handle will NOT be closed after the metadata is read; * that is the duty of the caller. * \param callbacks * A set of callbacks to use for I/O. The mandatory * callbacks are \a read, \a seek, and \a tell. * \assert * \code chain != NULL \endcode * \retval FLAC__bool * \c true if a valid list of metadata blocks was read from * \a handle, else \c false. On failure, check the status with * FLAC__metadata_chain_status(). */ FLAC_API FLAC__bool FLAC__metadata_chain_read_ogg_with_callbacks(FLAC__Metadata_Chain *chain, FLAC__IOHandle handle, FLAC__IOCallbacks callbacks); /** Checks if writing the given chain would require the use of a * temporary file, or if it could be written in place. * * Under certain conditions, padding can be utilized so that writing * edited metadata back to the FLAC file does not require rewriting the * entire file. If rewriting is required, then a temporary workfile is * required. When writing metadata using callbacks, you must check * this function to know whether to call * FLAC__metadata_chain_write_with_callbacks() or * FLAC__metadata_chain_write_with_callbacks_and_tempfile(). When * writing with FLAC__metadata_chain_write(), the temporary file is * handled internally. * * \param chain A pointer to an existing chain. * \param use_padding * Whether or not padding will be allowed to be used * during the write. The value of \a use_padding given * here must match the value later passed to * FLAC__metadata_chain_write_with_callbacks() or * FLAC__metadata_chain_write_with_callbacks_with_tempfile(). * \assert * \code chain != NULL \endcode * \retval FLAC__bool * \c true if writing the current chain would require a tempfile, or * \c false if metadata can be written in place. */ FLAC_API FLAC__bool FLAC__metadata_chain_check_if_tempfile_needed(FLAC__Metadata_Chain *chain, FLAC__bool use_padding); /** Write all metadata out to the FLAC file. This function tries to be as * efficient as possible; how the metadata is actually written is shown by * the following: * * If the current chain is the same size as the existing metadata, the new * data is written in place. * * If the current chain is longer than the existing metadata, and * \a use_padding is \c true, and the last block is a PADDING block of * sufficient length, the function will truncate the final padding block * so that the overall size of the metadata is the same as the existing * metadata, and then just rewrite the metadata. Otherwise, if not all of * the above conditions are met, the entire FLAC file must be rewritten. * If you want to use padding this way it is a good idea to call * FLAC__metadata_chain_sort_padding() first so that you have the maximum * amount of padding to work with, unless you need to preserve ordering * of the PADDING blocks for some reason. * * If the current chain is shorter than the existing metadata, and * \a use_padding is \c true, and the final block is a PADDING block, the padding * is extended to make the overall size the same as the existing data. If * \a use_padding is \c true and the last block is not a PADDING block, a new * PADDING block is added to the end of the new data to make it the same * size as the existing data (if possible, see the note to * FLAC__metadata_simple_iterator_set_block() about the four byte limit) * and the new data is written in place. If none of the above apply or * \a use_padding is \c false, the entire FLAC file is rewritten. * * If \a preserve_file_stats is \c true, the owner and modification time will * be preserved even if the FLAC file is written. * * For this write function to be used, the chain must have been read with * FLAC__metadata_chain_read()/FLAC__metadata_chain_read_ogg(), not * FLAC__metadata_chain_read_with_callbacks()/FLAC__metadata_chain_read_ogg_with_callbacks(). * * \param chain A pointer to an existing chain. * \param use_padding See above. * \param preserve_file_stats See above. * \assert * \code chain != NULL \endcode * \retval FLAC__bool * \c true if the write succeeded, else \c false. On failure, * check the status with FLAC__metadata_chain_status(). */ FLAC_API FLAC__bool FLAC__metadata_chain_write(FLAC__Metadata_Chain *chain, FLAC__bool use_padding, FLAC__bool preserve_file_stats); /** Write all metadata out to a FLAC stream via callbacks. * * (See FLAC__metadata_chain_write() for the details on how padding is * used to write metadata in place if possible.) * * The \a handle must be open for updating and be seekable. The * equivalent minimum stdio fopen() file mode is \c "r+" (or \c "r+b" * for Windows). * * For this write function to be used, the chain must have been read with * FLAC__metadata_chain_read_with_callbacks()/FLAC__metadata_chain_read_ogg_with_callbacks(), * not FLAC__metadata_chain_read()/FLAC__metadata_chain_read_ogg(). * Also, FLAC__metadata_chain_check_if_tempfile_needed() must have returned * \c false. * * \param chain A pointer to an existing chain. * \param use_padding See FLAC__metadata_chain_write() * \param handle The I/O handle of the FLAC stream to write. The * handle will NOT be closed after the metadata is * written; that is the duty of the caller. * \param callbacks A set of callbacks to use for I/O. The mandatory * callbacks are \a write and \a seek. * \assert * \code chain != NULL \endcode * \retval FLAC__bool * \c true if the write succeeded, else \c false. On failure, * check the status with FLAC__metadata_chain_status(). */ FLAC_API FLAC__bool FLAC__metadata_chain_write_with_callbacks(FLAC__Metadata_Chain *chain, FLAC__bool use_padding, FLAC__IOHandle handle, FLAC__IOCallbacks callbacks); /** Write all metadata out to a FLAC stream via callbacks. * * (See FLAC__metadata_chain_write() for the details on how padding is * used to write metadata in place if possible.) * * This version of the write-with-callbacks function must be used when * FLAC__metadata_chain_check_if_tempfile_needed() returns true. In * this function, you must supply an I/O handle corresponding to the * FLAC file to edit, and a temporary handle to which the new FLAC * file will be written. It is the caller's job to move this temporary * FLAC file on top of the original FLAC file to complete the metadata * edit. * * The \a handle must be open for reading and be seekable. The * equivalent minimum stdio fopen() file mode is \c "r" (or \c "rb" * for Windows). * * The \a temp_handle must be open for writing. The * equivalent minimum stdio fopen() file mode is \c "w" (or \c "wb" * for Windows). It should be an empty stream, or at least positioned * at the start-of-file (in which case it is the caller's duty to * truncate it on return). * * For this write function to be used, the chain must have been read with * FLAC__metadata_chain_read_with_callbacks()/FLAC__metadata_chain_read_ogg_with_callbacks(), * not FLAC__metadata_chain_read()/FLAC__metadata_chain_read_ogg(). * Also, FLAC__metadata_chain_check_if_tempfile_needed() must have returned * \c true. * * \param chain A pointer to an existing chain. * \param use_padding See FLAC__metadata_chain_write() * \param handle The I/O handle of the original FLAC stream to read. * The handle will NOT be closed after the metadata is * written; that is the duty of the caller. * \param callbacks A set of callbacks to use for I/O on \a handle. * The mandatory callbacks are \a read, \a seek, and * \a eof. * \param temp_handle The I/O handle of the FLAC stream to write. The * handle will NOT be closed after the metadata is * written; that is the duty of the caller. * \param temp_callbacks * A set of callbacks to use for I/O on temp_handle. * The only mandatory callback is \a write. * \assert * \code chain != NULL \endcode * \retval FLAC__bool * \c true if the write succeeded, else \c false. On failure, * check the status with FLAC__metadata_chain_status(). */ FLAC_API FLAC__bool FLAC__metadata_chain_write_with_callbacks_and_tempfile(FLAC__Metadata_Chain *chain, FLAC__bool use_padding, FLAC__IOHandle handle, FLAC__IOCallbacks callbacks, FLAC__IOHandle temp_handle, FLAC__IOCallbacks temp_callbacks); /** Merge adjacent PADDING blocks into a single block. * * \note This function does not write to the FLAC file, it only * modifies the chain. * * \warning Any iterator on the current chain will become invalid after this * call. You should delete the iterator and get a new one. * * \param chain A pointer to an existing chain. * \assert * \code chain != NULL \endcode */ FLAC_API void FLAC__metadata_chain_merge_padding(FLAC__Metadata_Chain *chain); /** This function will move all PADDING blocks to the end on the metadata, * then merge them into a single block. * * \note This function does not write to the FLAC file, it only * modifies the chain. * * \warning Any iterator on the current chain will become invalid after this * call. You should delete the iterator and get a new one. * * \param chain A pointer to an existing chain. * \assert * \code chain != NULL \endcode */ FLAC_API void FLAC__metadata_chain_sort_padding(FLAC__Metadata_Chain *chain); /*********** FLAC__Metadata_Iterator ***********/ /** Create a new iterator instance. * * \retval FLAC__Metadata_Iterator* * \c NULL if there was an error allocating memory, else the new instance. */ FLAC_API FLAC__Metadata_Iterator *FLAC__metadata_iterator_new(void); /** Free an iterator instance. Deletes the object pointed to by \a iterator. * * \param iterator A pointer to an existing iterator. * \assert * \code iterator != NULL \endcode */ FLAC_API void FLAC__metadata_iterator_delete(FLAC__Metadata_Iterator *iterator); /** Initialize the iterator to point to the first metadata block in the * given chain. * * \param iterator A pointer to an existing iterator. * \param chain A pointer to an existing and initialized (read) chain. * \assert * \code iterator != NULL \endcode * \code chain != NULL \endcode */ FLAC_API void FLAC__metadata_iterator_init(FLAC__Metadata_Iterator *iterator, FLAC__Metadata_Chain *chain); /** Moves the iterator forward one metadata block, returning \c false if * already at the end. * * \param iterator A pointer to an existing initialized iterator. * \assert * \code iterator != NULL \endcode * \a iterator has been successfully initialized with * FLAC__metadata_iterator_init() * \retval FLAC__bool * \c false if already at the last metadata block of the chain, else * \c true. */ FLAC_API FLAC__bool FLAC__metadata_iterator_next(FLAC__Metadata_Iterator *iterator); /** Moves the iterator backward one metadata block, returning \c false if * already at the beginning. * * \param iterator A pointer to an existing initialized iterator. * \assert * \code iterator != NULL \endcode * \a iterator has been successfully initialized with * FLAC__metadata_iterator_init() * \retval FLAC__bool * \c false if already at the first metadata block of the chain, else * \c true. */ FLAC_API FLAC__bool FLAC__metadata_iterator_prev(FLAC__Metadata_Iterator *iterator); /** Get the type of the metadata block at the current position. * * \param iterator A pointer to an existing initialized iterator. * \assert * \code iterator != NULL \endcode * \a iterator has been successfully initialized with * FLAC__metadata_iterator_init() * \retval FLAC__MetadataType * The type of the metadata block at the current iterator position. */ FLAC_API FLAC__MetadataType FLAC__metadata_iterator_get_block_type(const FLAC__Metadata_Iterator *iterator); /** Get the metadata block at the current position. You can modify * the block in place but must write the chain before the changes * are reflected to the FLAC file. You do not need to call * FLAC__metadata_iterator_set_block() to reflect the changes; * the pointer returned by FLAC__metadata_iterator_get_block() * points directly into the chain. * * \warning * Do not call FLAC__metadata_object_delete() on the returned object; * to delete a block use FLAC__metadata_iterator_delete_block(). * * \param iterator A pointer to an existing initialized iterator. * \assert * \code iterator != NULL \endcode * \a iterator has been successfully initialized with * FLAC__metadata_iterator_init() * \retval FLAC__StreamMetadata* * The current metadata block. */ FLAC_API FLAC__StreamMetadata *FLAC__metadata_iterator_get_block(FLAC__Metadata_Iterator *iterator); /** Set the metadata block at the current position, replacing the existing * block. The new block passed in becomes owned by the chain and it will be * deleted when the chain is deleted. * * \param iterator A pointer to an existing initialized iterator. * \param block A pointer to a metadata block. * \assert * \code iterator != NULL \endcode * \a iterator has been successfully initialized with * FLAC__metadata_iterator_init() * \code block != NULL \endcode * \retval FLAC__bool * \c false if the conditions in the above description are not met, or * a memory allocation error occurs, otherwise \c true. */ FLAC_API FLAC__bool FLAC__metadata_iterator_set_block(FLAC__Metadata_Iterator *iterator, FLAC__StreamMetadata *block); /** Removes the current block from the chain. If \a replace_with_padding is * \c true, the block will instead be replaced with a padding block of equal * size. You can not delete the STREAMINFO block. The iterator will be * left pointing to the block before the one just "deleted", even if * \a replace_with_padding is \c true. * * \param iterator A pointer to an existing initialized iterator. * \param replace_with_padding See above. * \assert * \code iterator != NULL \endcode * \a iterator has been successfully initialized with * FLAC__metadata_iterator_init() * \retval FLAC__bool * \c false if the conditions in the above description are not met, * otherwise \c true. */ FLAC_API FLAC__bool FLAC__metadata_iterator_delete_block(FLAC__Metadata_Iterator *iterator, FLAC__bool replace_with_padding); /** Insert a new block before the current block. You cannot insert a block * before the first STREAMINFO block. You cannot insert a STREAMINFO block * as there can be only one, the one that already exists at the head when you * read in a chain. The chain takes ownership of the new block and it will be * deleted when the chain is deleted. The iterator will be left pointing to * the new block. * * \param iterator A pointer to an existing initialized iterator. * \param block A pointer to a metadata block to insert. * \assert * \code iterator != NULL \endcode * \a iterator has been successfully initialized with * FLAC__metadata_iterator_init() * \retval FLAC__bool * \c false if the conditions in the above description are not met, or * a memory allocation error occurs, otherwise \c true. */ FLAC_API FLAC__bool FLAC__metadata_iterator_insert_block_before(FLAC__Metadata_Iterator *iterator, FLAC__StreamMetadata *block); /** Insert a new block after the current block. You cannot insert a STREAMINFO * block as there can be only one, the one that already exists at the head when * you read in a chain. The chain takes ownership of the new block and it will * be deleted when the chain is deleted. The iterator will be left pointing to * the new block. * * \param iterator A pointer to an existing initialized iterator. * \param block A pointer to a metadata block to insert. * \assert * \code iterator != NULL \endcode * \a iterator has been successfully initialized with * FLAC__metadata_iterator_init() * \retval FLAC__bool * \c false if the conditions in the above description are not met, or * a memory allocation error occurs, otherwise \c true. */ FLAC_API FLAC__bool FLAC__metadata_iterator_insert_block_after(FLAC__Metadata_Iterator *iterator, FLAC__StreamMetadata *block); /* \} */ /** \defgroup flac_metadata_object FLAC/metadata.h: metadata object methods * \ingroup flac_metadata * * \brief * This module contains methods for manipulating FLAC metadata objects. * * Since many are variable length we have to be careful about the memory * management. We decree that all pointers to data in the object are * owned by the object and memory-managed by the object. * * Use the FLAC__metadata_object_new() and FLAC__metadata_object_delete() * functions to create all instances. When using the * FLAC__metadata_object_set_*() functions to set pointers to data, set * \a copy to \c true to have the function make it's own copy of the data, or * to \c false to give the object ownership of your data. In the latter case * your pointer must be freeable by free() and will be free()d when the object * is FLAC__metadata_object_delete()d. It is legal to pass a null pointer as * the data pointer to a FLAC__metadata_object_set_*() function as long as * the length argument is 0 and the \a copy argument is \c false. * * The FLAC__metadata_object_new() and FLAC__metadata_object_clone() function * will return \c NULL in the case of a memory allocation error, otherwise a new * object. The FLAC__metadata_object_set_*() functions return \c false in the * case of a memory allocation error. * * We don't have the convenience of C++ here, so note that the library relies * on you to keep the types straight. In other words, if you pass, for * example, a FLAC__StreamMetadata* that represents a STREAMINFO block to * FLAC__metadata_object_application_set_data(), you will get an assertion * failure. * * For convenience the FLAC__metadata_object_vorbiscomment_*() functions * maintain a trailing NUL on each Vorbis comment entry. This is not counted * toward the length or stored in the stream, but it can make working with plain * comments (those that don't contain embedded-NULs in the value) easier. * Entries passed into these functions have trailing NULs added if missing, and * returned entries are guaranteed to have a trailing NUL. * * The FLAC__metadata_object_vorbiscomment_*() functions that take a Vorbis * comment entry/name/value will first validate that it complies with the Vorbis * comment specification and return false if it does not. * * There is no need to recalculate the length field on metadata blocks you * have modified. They will be calculated automatically before they are * written back to a file. * * \{ */ /** Create a new metadata object instance of the given type. * * The object will be "empty"; i.e. values and data pointers will be \c 0, * with the exception of FLAC__METADATA_TYPE_VORBIS_COMMENT, which will have * the vendor string set (but zero comments). * * Do not pass in a value greater than or equal to * \a FLAC__METADATA_TYPE_UNDEFINED unless you really know what you're * doing. * * \param type Type of object to create * \retval FLAC__StreamMetadata* * \c NULL if there was an error allocating memory or the type code is * greater than FLAC__MAX_METADATA_TYPE_CODE, else the new instance. */ FLAC_API FLAC__StreamMetadata *FLAC__metadata_object_new(FLAC__MetadataType type); /** Create a copy of an existing metadata object. * * The copy is a "deep" copy, i.e. dynamically allocated data within the * object is also copied. The caller takes ownership of the new block and * is responsible for freeing it with FLAC__metadata_object_delete(). * * \param object Pointer to object to copy. * \assert * \code object != NULL \endcode * \retval FLAC__StreamMetadata* * \c NULL if there was an error allocating memory, else the new instance. */ FLAC_API FLAC__StreamMetadata *FLAC__metadata_object_clone(const FLAC__StreamMetadata *object); /** Free a metadata object. Deletes the object pointed to by \a object. * * The delete is a "deep" delete, i.e. dynamically allocated data within the * object is also deleted. * * \param object A pointer to an existing object. * \assert * \code object != NULL \endcode */ FLAC_API void FLAC__metadata_object_delete(FLAC__StreamMetadata *object); /** Compares two metadata objects. * * The compare is "deep", i.e. dynamically allocated data within the * object is also compared. * * \param block1 A pointer to an existing object. * \param block2 A pointer to an existing object. * \assert * \code block1 != NULL \endcode * \code block2 != NULL \endcode * \retval FLAC__bool * \c true if objects are identical, else \c false. */ FLAC_API FLAC__bool FLAC__metadata_object_is_equal(const FLAC__StreamMetadata *block1, const FLAC__StreamMetadata *block2); /** Sets the application data of an APPLICATION block. * * If \a copy is \c true, a copy of the data is stored; otherwise, the object * takes ownership of the pointer. The existing data will be freed if this * function is successful, otherwise the original data will remain if \a copy * is \c true and malloc() fails. * * \note It is safe to pass a const pointer to \a data if \a copy is \c true. * * \param object A pointer to an existing APPLICATION object. * \param data A pointer to the data to set. * \param length The length of \a data in bytes. * \param copy See above. * \assert * \code object != NULL \endcode * \code object->type == FLAC__METADATA_TYPE_APPLICATION \endcode * \code (data != NULL && length > 0) || * (data == NULL && length == 0 && copy == false) \endcode * \retval FLAC__bool * \c false if \a copy is \c true and malloc() fails, else \c true. */ FLAC_API FLAC__bool FLAC__metadata_object_application_set_data(FLAC__StreamMetadata *object, FLAC__byte *data, unsigned length, FLAC__bool copy); /** Resize the seekpoint array. * * If the size shrinks, elements will truncated; if it grows, new placeholder * points will be added to the end. * * \param object A pointer to an existing SEEKTABLE object. * \param new_num_points The desired length of the array; may be \c 0. * \assert * \code object != NULL \endcode * \code object->type == FLAC__METADATA_TYPE_SEEKTABLE \endcode * \code (object->data.seek_table.points == NULL && object->data.seek_table.num_points == 0) || * (object->data.seek_table.points != NULL && object->data.seek_table.num_points > 0) \endcode * \retval FLAC__bool * \c false if memory allocation error, else \c true. */ FLAC_API FLAC__bool FLAC__metadata_object_seektable_resize_points(FLAC__StreamMetadata *object, unsigned new_num_points); /** Set a seekpoint in a seektable. * * \param object A pointer to an existing SEEKTABLE object. * \param point_num Index into seekpoint array to set. * \param point The point to set. * \assert * \code object != NULL \endcode * \code object->type == FLAC__METADATA_TYPE_SEEKTABLE \endcode * \code object->data.seek_table.num_points > point_num \endcode */ FLAC_API void FLAC__metadata_object_seektable_set_point(FLAC__StreamMetadata *object, unsigned point_num, FLAC__StreamMetadata_SeekPoint point); /** Insert a seekpoint into a seektable. * * \param object A pointer to an existing SEEKTABLE object. * \param point_num Index into seekpoint array to set. * \param point The point to set. * \assert * \code object != NULL \endcode * \code object->type == FLAC__METADATA_TYPE_SEEKTABLE \endcode * \code object->data.seek_table.num_points >= point_num \endcode * \retval FLAC__bool * \c false if memory allocation error, else \c true. */ FLAC_API FLAC__bool FLAC__metadata_object_seektable_insert_point(FLAC__StreamMetadata *object, unsigned point_num, FLAC__StreamMetadata_SeekPoint point); /** Delete a seekpoint from a seektable. * * \param object A pointer to an existing SEEKTABLE object. * \param point_num Index into seekpoint array to set. * \assert * \code object != NULL \endcode * \code object->type == FLAC__METADATA_TYPE_SEEKTABLE \endcode * \code object->data.seek_table.num_points > point_num \endcode * \retval FLAC__bool * \c false if memory allocation error, else \c true. */ FLAC_API FLAC__bool FLAC__metadata_object_seektable_delete_point(FLAC__StreamMetadata *object, unsigned point_num); /** Check a seektable to see if it conforms to the FLAC specification. * See the format specification for limits on the contents of the * seektable. * * \param object A pointer to an existing SEEKTABLE object. * \assert * \code object != NULL \endcode * \code object->type == FLAC__METADATA_TYPE_SEEKTABLE \endcode * \retval FLAC__bool * \c false if seek table is illegal, else \c true. */ FLAC_API FLAC__bool FLAC__metadata_object_seektable_is_legal(const FLAC__StreamMetadata *object); /** Append a number of placeholder points to the end of a seek table. * * \note * As with the other ..._seektable_template_... functions, you should * call FLAC__metadata_object_seektable_template_sort() when finished * to make the seek table legal. * * \param object A pointer to an existing SEEKTABLE object. * \param num The number of placeholder points to append. * \assert * \code object != NULL \endcode * \code object->type == FLAC__METADATA_TYPE_SEEKTABLE \endcode * \retval FLAC__bool * \c false if memory allocation fails, else \c true. */ FLAC_API FLAC__bool FLAC__metadata_object_seektable_template_append_placeholders(FLAC__StreamMetadata *object, unsigned num); /** Append a specific seek point template to the end of a seek table. * * \note * As with the other ..._seektable_template_... functions, you should * call FLAC__metadata_object_seektable_template_sort() when finished * to make the seek table legal. * * \param object A pointer to an existing SEEKTABLE object. * \param sample_number The sample number of the seek point template. * \assert * \code object != NULL \endcode * \code object->type == FLAC__METADATA_TYPE_SEEKTABLE \endcode * \retval FLAC__bool * \c false if memory allocation fails, else \c true. */ FLAC_API FLAC__bool FLAC__metadata_object_seektable_template_append_point(FLAC__StreamMetadata *object, FLAC__uint64 sample_number); /** Append specific seek point templates to the end of a seek table. * * \note * As with the other ..._seektable_template_... functions, you should * call FLAC__metadata_object_seektable_template_sort() when finished * to make the seek table legal. * * \param object A pointer to an existing SEEKTABLE object. * \param sample_numbers An array of sample numbers for the seek points. * \param num The number of seek point templates to append. * \assert * \code object != NULL \endcode * \code object->type == FLAC__METADATA_TYPE_SEEKTABLE \endcode * \retval FLAC__bool * \c false if memory allocation fails, else \c true. */ FLAC_API FLAC__bool FLAC__metadata_object_seektable_template_append_points(FLAC__StreamMetadata *object, FLAC__uint64 sample_numbers[], unsigned num); /** Append a set of evenly-spaced seek point templates to the end of a * seek table. * * \note * As with the other ..._seektable_template_... functions, you should * call FLAC__metadata_object_seektable_template_sort() when finished * to make the seek table legal. * * \param object A pointer to an existing SEEKTABLE object. * \param num The number of placeholder points to append. * \param total_samples The total number of samples to be encoded; * the seekpoints will be spaced approximately * \a total_samples / \a num samples apart. * \assert * \code object != NULL \endcode * \code object->type == FLAC__METADATA_TYPE_SEEKTABLE \endcode * \code total_samples > 0 \endcode * \retval FLAC__bool * \c false if memory allocation fails, else \c true. */ FLAC_API FLAC__bool FLAC__metadata_object_seektable_template_append_spaced_points(FLAC__StreamMetadata *object, unsigned num, FLAC__uint64 total_samples); /** Append a set of evenly-spaced seek point templates to the end of a * seek table. * * \note * As with the other ..._seektable_template_... functions, you should * call FLAC__metadata_object_seektable_template_sort() when finished * to make the seek table legal. * * \param object A pointer to an existing SEEKTABLE object. * \param samples The number of samples apart to space the placeholder * points. The first point will be at sample \c 0, the * second at sample \a samples, then 2*\a samples, and * so on. As long as \a samples and \a total_samples * are greater than \c 0, there will always be at least * one seekpoint at sample \c 0. * \param total_samples The total number of samples to be encoded; * the seekpoints will be spaced * \a samples samples apart. * \assert * \code object != NULL \endcode * \code object->type == FLAC__METADATA_TYPE_SEEKTABLE \endcode * \code samples > 0 \endcode * \code total_samples > 0 \endcode * \retval FLAC__bool * \c false if memory allocation fails, else \c true. */ FLAC_API FLAC__bool FLAC__metadata_object_seektable_template_append_spaced_points_by_samples(FLAC__StreamMetadata *object, unsigned samples, FLAC__uint64 total_samples); /** Sort a seek table's seek points according to the format specification, * removing duplicates. * * \param object A pointer to a seek table to be sorted. * \param compact If \c false, behaves like FLAC__format_seektable_sort(). * If \c true, duplicates are deleted and the seek table is * shrunk appropriately; the number of placeholder points * present in the seek table will be the same after the call * as before. * \assert * \code object != NULL \endcode * \code object->type == FLAC__METADATA_TYPE_SEEKTABLE \endcode * \retval FLAC__bool * \c false if realloc() fails, else \c true. */ FLAC_API FLAC__bool FLAC__metadata_object_seektable_template_sort(FLAC__StreamMetadata *object, FLAC__bool compact); /** Sets the vendor string in a VORBIS_COMMENT block. * * For convenience, a trailing NUL is added to the entry if it doesn't have * one already. * * If \a copy is \c true, a copy of the entry is stored; otherwise, the object * takes ownership of the \c entry.entry pointer. * * \note If this function returns \c false, the caller still owns the * pointer. * * \param object A pointer to an existing VORBIS_COMMENT object. * \param entry The entry to set the vendor string to. * \param copy See above. * \assert * \code object != NULL \endcode * \code object->type == FLAC__METADATA_TYPE_VORBIS_COMMENT \endcode * \code (entry.entry != NULL && entry.length > 0) || * (entry.entry == NULL && entry.length == 0) \endcode * \retval FLAC__bool * \c false if memory allocation fails or \a entry does not comply with the * Vorbis comment specification, else \c true. */ FLAC_API FLAC__bool FLAC__metadata_object_vorbiscomment_set_vendor_string(FLAC__StreamMetadata *object, FLAC__StreamMetadata_VorbisComment_Entry entry, FLAC__bool copy); /** Resize the comment array. * * If the size shrinks, elements will truncated; if it grows, new empty * fields will be added to the end. * * \param object A pointer to an existing VORBIS_COMMENT object. * \param new_num_comments The desired length of the array; may be \c 0. * \assert * \code object != NULL \endcode * \code object->type == FLAC__METADATA_TYPE_VORBIS_COMMENT \endcode * \code (object->data.vorbis_comment.comments == NULL && object->data.vorbis_comment.num_comments == 0) || * (object->data.vorbis_comment.comments != NULL && object->data.vorbis_comment.num_comments > 0) \endcode * \retval FLAC__bool * \c false if memory allocation fails, else \c true. */ FLAC_API FLAC__bool FLAC__metadata_object_vorbiscomment_resize_comments(FLAC__StreamMetadata *object, unsigned new_num_comments); /** Sets a comment in a VORBIS_COMMENT block. * * For convenience, a trailing NUL is added to the entry if it doesn't have * one already. * * If \a copy is \c true, a copy of the entry is stored; otherwise, the object * takes ownership of the \c entry.entry pointer. * * \note If this function returns \c false, the caller still owns the * pointer. * * \param object A pointer to an existing VORBIS_COMMENT object. * \param comment_num Index into comment array to set. * \param entry The entry to set the comment to. * \param copy See above. * \assert * \code object != NULL \endcode * \code object->type == FLAC__METADATA_TYPE_VORBIS_COMMENT \endcode * \code comment_num < object->data.vorbis_comment.num_comments \endcode * \code (entry.entry != NULL && entry.length > 0) || * (entry.entry == NULL && entry.length == 0) \endcode * \retval FLAC__bool * \c false if memory allocation fails or \a entry does not comply with the * Vorbis comment specification, else \c true. */ FLAC_API FLAC__bool FLAC__metadata_object_vorbiscomment_set_comment(FLAC__StreamMetadata *object, unsigned comment_num, FLAC__StreamMetadata_VorbisComment_Entry entry, FLAC__bool copy); /** Insert a comment in a VORBIS_COMMENT block at the given index. * * For convenience, a trailing NUL is added to the entry if it doesn't have * one already. * * If \a copy is \c true, a copy of the entry is stored; otherwise, the object * takes ownership of the \c entry.entry pointer. * * \note If this function returns \c false, the caller still owns the * pointer. * * \param object A pointer to an existing VORBIS_COMMENT object. * \param comment_num The index at which to insert the comment. The comments * at and after \a comment_num move right one position. * To append a comment to the end, set \a comment_num to * \c object->data.vorbis_comment.num_comments . * \param entry The comment to insert. * \param copy See above. * \assert * \code object != NULL \endcode * \code object->type == FLAC__METADATA_TYPE_VORBIS_COMMENT \endcode * \code object->data.vorbis_comment.num_comments >= comment_num \endcode * \code (entry.entry != NULL && entry.length > 0) || * (entry.entry == NULL && entry.length == 0 && copy == false) \endcode * \retval FLAC__bool * \c false if memory allocation fails or \a entry does not comply with the * Vorbis comment specification, else \c true. */ FLAC_API FLAC__bool FLAC__metadata_object_vorbiscomment_insert_comment(FLAC__StreamMetadata *object, unsigned comment_num, FLAC__StreamMetadata_VorbisComment_Entry entry, FLAC__bool copy); /** Appends a comment to a VORBIS_COMMENT block. * * For convenience, a trailing NUL is added to the entry if it doesn't have * one already. * * If \a copy is \c true, a copy of the entry is stored; otherwise, the object * takes ownership of the \c entry.entry pointer. * * \note If this function returns \c false, the caller still owns the * pointer. * * \param object A pointer to an existing VORBIS_COMMENT object. * \param entry The comment to insert. * \param copy See above. * \assert * \code object != NULL \endcode * \code object->type == FLAC__METADATA_TYPE_VORBIS_COMMENT \endcode * \code (entry.entry != NULL && entry.length > 0) || * (entry.entry == NULL && entry.length == 0 && copy == false) \endcode * \retval FLAC__bool * \c false if memory allocation fails or \a entry does not comply with the * Vorbis comment specification, else \c true. */ FLAC_API FLAC__bool FLAC__metadata_object_vorbiscomment_append_comment(FLAC__StreamMetadata *object, FLAC__StreamMetadata_VorbisComment_Entry entry, FLAC__bool copy); /** Replaces comments in a VORBIS_COMMENT block with a new one. * * For convenience, a trailing NUL is added to the entry if it doesn't have * one already. * * Depending on the the value of \a all, either all or just the first comment * whose field name(s) match the given entry's name will be replaced by the * given entry. If no comments match, \a entry will simply be appended. * * If \a copy is \c true, a copy of the entry is stored; otherwise, the object * takes ownership of the \c entry.entry pointer. * * \note If this function returns \c false, the caller still owns the * pointer. * * \param object A pointer to an existing VORBIS_COMMENT object. * \param entry The comment to insert. * \param all If \c true, all comments whose field name matches * \a entry's field name will be removed, and \a entry will * be inserted at the position of the first matching * comment. If \c false, only the first comment whose * field name matches \a entry's field name will be * replaced with \a entry. * \param copy See above. * \assert * \code object != NULL \endcode * \code object->type == FLAC__METADATA_TYPE_VORBIS_COMMENT \endcode * \code (entry.entry != NULL && entry.length > 0) || * (entry.entry == NULL && entry.length == 0 && copy == false) \endcode * \retval FLAC__bool * \c false if memory allocation fails or \a entry does not comply with the * Vorbis comment specification, else \c true. */ FLAC_API FLAC__bool FLAC__metadata_object_vorbiscomment_replace_comment(FLAC__StreamMetadata *object, FLAC__StreamMetadata_VorbisComment_Entry entry, FLAC__bool all, FLAC__bool copy); /** Delete a comment in a VORBIS_COMMENT block at the given index. * * \param object A pointer to an existing VORBIS_COMMENT object. * \param comment_num The index of the comment to delete. * \assert * \code object != NULL \endcode * \code object->type == FLAC__METADATA_TYPE_VORBIS_COMMENT \endcode * \code object->data.vorbis_comment.num_comments > comment_num \endcode * \retval FLAC__bool * \c false if realloc() fails, else \c true. */ FLAC_API FLAC__bool FLAC__metadata_object_vorbiscomment_delete_comment(FLAC__StreamMetadata *object, unsigned comment_num); /** Creates a Vorbis comment entry from NUL-terminated name and value strings. * * On return, the filled-in \a entry->entry pointer will point to malloc()ed * memory and shall be owned by the caller. For convenience the entry will * have a terminating NUL. * * \param entry A pointer to a Vorbis comment entry. The entry's * \c entry pointer should not point to allocated * memory as it will be overwritten. * \param field_name The field name in ASCII, \c NUL terminated. * \param field_value The field value in UTF-8, \c NUL terminated. * \assert * \code entry != NULL \endcode * \code field_name != NULL \endcode * \code field_value != NULL \endcode * \retval FLAC__bool * \c false if malloc() fails, or if \a field_name or \a field_value does * not comply with the Vorbis comment specification, else \c true. */ FLAC_API FLAC__bool FLAC__metadata_object_vorbiscomment_entry_from_name_value_pair(FLAC__StreamMetadata_VorbisComment_Entry *entry, const char *field_name, const char *field_value); /** Splits a Vorbis comment entry into NUL-terminated name and value strings. * * The returned pointers to name and value will be allocated by malloc() * and shall be owned by the caller. * * \param entry An existing Vorbis comment entry. * \param field_name The address of where the returned pointer to the * field name will be stored. * \param field_value The address of where the returned pointer to the * field value will be stored. * \assert * \code (entry.entry != NULL && entry.length > 0) \endcode * \code memchr(entry.entry, '=', entry.length) != NULL \endcode * \code field_name != NULL \endcode * \code field_value != NULL \endcode * \retval FLAC__bool * \c false if memory allocation fails or \a entry does not comply with the * Vorbis comment specification, else \c true. */ FLAC_API FLAC__bool FLAC__metadata_object_vorbiscomment_entry_to_name_value_pair(const FLAC__StreamMetadata_VorbisComment_Entry entry, char **field_name, char **field_value); /** Check if the given Vorbis comment entry's field name matches the given * field name. * * \param entry An existing Vorbis comment entry. * \param field_name The field name to check. * \param field_name_length The length of \a field_name, not including the * terminating \c NUL. * \assert * \code (entry.entry != NULL && entry.length > 0) \endcode * \retval FLAC__bool * \c true if the field names match, else \c false */ FLAC_API FLAC__bool FLAC__metadata_object_vorbiscomment_entry_matches(const FLAC__StreamMetadata_VorbisComment_Entry entry, const char *field_name, unsigned field_name_length); /** Find a Vorbis comment with the given field name. * * The search begins at entry number \a offset; use an offset of 0 to * search from the beginning of the comment array. * * \param object A pointer to an existing VORBIS_COMMENT object. * \param offset The offset into the comment array from where to start * the search. * \param field_name The field name of the comment to find. * \assert * \code object != NULL \endcode * \code object->type == FLAC__METADATA_TYPE_VORBIS_COMMENT \endcode * \code field_name != NULL \endcode * \retval int * The offset in the comment array of the first comment whose field * name matches \a field_name, or \c -1 if no match was found. */ FLAC_API int FLAC__metadata_object_vorbiscomment_find_entry_from(const FLAC__StreamMetadata *object, unsigned offset, const char *field_name); /** Remove first Vorbis comment matching the given field name. * * \param object A pointer to an existing VORBIS_COMMENT object. * \param field_name The field name of comment to delete. * \assert * \code object != NULL \endcode * \code object->type == FLAC__METADATA_TYPE_VORBIS_COMMENT \endcode * \retval int * \c -1 for memory allocation error, \c 0 for no matching entries, * \c 1 for one matching entry deleted. */ FLAC_API int FLAC__metadata_object_vorbiscomment_remove_entry_matching(FLAC__StreamMetadata *object, const char *field_name); /** Remove all Vorbis comments matching the given field name. * * \param object A pointer to an existing VORBIS_COMMENT object. * \param field_name The field name of comments to delete. * \assert * \code object != NULL \endcode * \code object->type == FLAC__METADATA_TYPE_VORBIS_COMMENT \endcode * \retval int * \c -1 for memory allocation error, \c 0 for no matching entries, * else the number of matching entries deleted. */ FLAC_API int FLAC__metadata_object_vorbiscomment_remove_entries_matching(FLAC__StreamMetadata *object, const char *field_name); /** Create a new CUESHEET track instance. * * The object will be "empty"; i.e. values and data pointers will be \c 0. * * \retval FLAC__StreamMetadata_CueSheet_Track* * \c NULL if there was an error allocating memory, else the new instance. */ FLAC_API FLAC__StreamMetadata_CueSheet_Track *FLAC__metadata_object_cuesheet_track_new(void); /** Create a copy of an existing CUESHEET track object. * * The copy is a "deep" copy, i.e. dynamically allocated data within the * object is also copied. The caller takes ownership of the new object and * is responsible for freeing it with * FLAC__metadata_object_cuesheet_track_delete(). * * \param object Pointer to object to copy. * \assert * \code object != NULL \endcode * \retval FLAC__StreamMetadata_CueSheet_Track* * \c NULL if there was an error allocating memory, else the new instance. */ FLAC_API FLAC__StreamMetadata_CueSheet_Track *FLAC__metadata_object_cuesheet_track_clone(const FLAC__StreamMetadata_CueSheet_Track *object); /** Delete a CUESHEET track object * * \param object A pointer to an existing CUESHEET track object. * \assert * \code object != NULL \endcode */ FLAC_API void FLAC__metadata_object_cuesheet_track_delete(FLAC__StreamMetadata_CueSheet_Track *object); /** Resize a track's index point array. * * If the size shrinks, elements will truncated; if it grows, new blank * indices will be added to the end. * * \param object A pointer to an existing CUESHEET object. * \param track_num The index of the track to modify. NOTE: this is not * necessarily the same as the track's \a number field. * \param new_num_indices The desired length of the array; may be \c 0. * \assert * \code object != NULL \endcode * \code object->type == FLAC__METADATA_TYPE_CUESHEET \endcode * \code object->data.cue_sheet.num_tracks > track_num \endcode * \code (object->data.cue_sheet.tracks[track_num].indices == NULL && object->data.cue_sheet.tracks[track_num].num_indices == 0) || * (object->data.cue_sheet.tracks[track_num].indices != NULL && object->data.cue_sheet.tracks[track_num].num_indices > 0) \endcode * \retval FLAC__bool * \c false if memory allocation error, else \c true. */ FLAC_API FLAC__bool FLAC__metadata_object_cuesheet_track_resize_indices(FLAC__StreamMetadata *object, unsigned track_num, unsigned new_num_indices); /** Insert an index point in a CUESHEET track at the given index. * * \param object A pointer to an existing CUESHEET object. * \param track_num The index of the track to modify. NOTE: this is not * necessarily the same as the track's \a number field. * \param index_num The index into the track's index array at which to * insert the index point. NOTE: this is not necessarily * the same as the index point's \a number field. The * indices at and after \a index_num move right one * position. To append an index point to the end, set * \a index_num to * \c object->data.cue_sheet.tracks[track_num].num_indices . * \param index The index point to insert. * \assert * \code object != NULL \endcode * \code object->type == FLAC__METADATA_TYPE_CUESHEET \endcode * \code object->data.cue_sheet.num_tracks > track_num \endcode * \code object->data.cue_sheet.tracks[track_num].num_indices >= index_num \endcode * \retval FLAC__bool * \c false if realloc() fails, else \c true. */ FLAC_API FLAC__bool FLAC__metadata_object_cuesheet_track_insert_index(FLAC__StreamMetadata *object, unsigned track_num, unsigned index_num, FLAC__StreamMetadata_CueSheet_Index index); /** Insert a blank index point in a CUESHEET track at the given index. * * A blank index point is one in which all field values are zero. * * \param object A pointer to an existing CUESHEET object. * \param track_num The index of the track to modify. NOTE: this is not * necessarily the same as the track's \a number field. * \param index_num The index into the track's index array at which to * insert the index point. NOTE: this is not necessarily * the same as the index point's \a number field. The * indices at and after \a index_num move right one * position. To append an index point to the end, set * \a index_num to * \c object->data.cue_sheet.tracks[track_num].num_indices . * \assert * \code object != NULL \endcode * \code object->type == FLAC__METADATA_TYPE_CUESHEET \endcode * \code object->data.cue_sheet.num_tracks > track_num \endcode * \code object->data.cue_sheet.tracks[track_num].num_indices >= index_num \endcode * \retval FLAC__bool * \c false if realloc() fails, else \c true. */ FLAC_API FLAC__bool FLAC__metadata_object_cuesheet_track_insert_blank_index(FLAC__StreamMetadata *object, unsigned track_num, unsigned index_num); /** Delete an index point in a CUESHEET track at the given index. * * \param object A pointer to an existing CUESHEET object. * \param track_num The index into the track array of the track to * modify. NOTE: this is not necessarily the same * as the track's \a number field. * \param index_num The index into the track's index array of the index * to delete. NOTE: this is not necessarily the same * as the index's \a number field. * \assert * \code object != NULL \endcode * \code object->type == FLAC__METADATA_TYPE_CUESHEET \endcode * \code object->data.cue_sheet.num_tracks > track_num \endcode * \code object->data.cue_sheet.tracks[track_num].num_indices > index_num \endcode * \retval FLAC__bool * \c false if realloc() fails, else \c true. */ FLAC_API FLAC__bool FLAC__metadata_object_cuesheet_track_delete_index(FLAC__StreamMetadata *object, unsigned track_num, unsigned index_num); /** Resize the track array. * * If the size shrinks, elements will truncated; if it grows, new blank * tracks will be added to the end. * * \param object A pointer to an existing CUESHEET object. * \param new_num_tracks The desired length of the array; may be \c 0. * \assert * \code object != NULL \endcode * \code object->type == FLAC__METADATA_TYPE_CUESHEET \endcode * \code (object->data.cue_sheet.tracks == NULL && object->data.cue_sheet.num_tracks == 0) || * (object->data.cue_sheet.tracks != NULL && object->data.cue_sheet.num_tracks > 0) \endcode * \retval FLAC__bool * \c false if memory allocation error, else \c true. */ FLAC_API FLAC__bool FLAC__metadata_object_cuesheet_resize_tracks(FLAC__StreamMetadata *object, unsigned new_num_tracks); /** Sets a track in a CUESHEET block. * * If \a copy is \c true, a copy of the track is stored; otherwise, the object * takes ownership of the \a track pointer. * * \param object A pointer to an existing CUESHEET object. * \param track_num Index into track array to set. NOTE: this is not * necessarily the same as the track's \a number field. * \param track The track to set the track to. You may safely pass in * a const pointer if \a copy is \c true. * \param copy See above. * \assert * \code object != NULL \endcode * \code object->type == FLAC__METADATA_TYPE_CUESHEET \endcode * \code track_num < object->data.cue_sheet.num_tracks \endcode * \code (track->indices != NULL && track->num_indices > 0) || * (track->indices == NULL && track->num_indices == 0) * \retval FLAC__bool * \c false if \a copy is \c true and malloc() fails, else \c true. */ FLAC_API FLAC__bool FLAC__metadata_object_cuesheet_set_track(FLAC__StreamMetadata *object, unsigned track_num, FLAC__StreamMetadata_CueSheet_Track *track, FLAC__bool copy); /** Insert a track in a CUESHEET block at the given index. * * If \a copy is \c true, a copy of the track is stored; otherwise, the object * takes ownership of the \a track pointer. * * \param object A pointer to an existing CUESHEET object. * \param track_num The index at which to insert the track. NOTE: this * is not necessarily the same as the track's \a number * field. The tracks at and after \a track_num move right * one position. To append a track to the end, set * \a track_num to \c object->data.cue_sheet.num_tracks . * \param track The track to insert. You may safely pass in a const * pointer if \a copy is \c true. * \param copy See above. * \assert * \code object != NULL \endcode * \code object->type == FLAC__METADATA_TYPE_CUESHEET \endcode * \code object->data.cue_sheet.num_tracks >= track_num \endcode * \retval FLAC__bool * \c false if \a copy is \c true and malloc() fails, else \c true. */ FLAC_API FLAC__bool FLAC__metadata_object_cuesheet_insert_track(FLAC__StreamMetadata *object, unsigned track_num, FLAC__StreamMetadata_CueSheet_Track *track, FLAC__bool copy); /** Insert a blank track in a CUESHEET block at the given index. * * A blank track is one in which all field values are zero. * * \param object A pointer to an existing CUESHEET object. * \param track_num The index at which to insert the track. NOTE: this * is not necessarily the same as the track's \a number * field. The tracks at and after \a track_num move right * one position. To append a track to the end, set * \a track_num to \c object->data.cue_sheet.num_tracks . * \assert * \code object != NULL \endcode * \code object->type == FLAC__METADATA_TYPE_CUESHEET \endcode * \code object->data.cue_sheet.num_tracks >= track_num \endcode * \retval FLAC__bool * \c false if \a copy is \c true and malloc() fails, else \c true. */ FLAC_API FLAC__bool FLAC__metadata_object_cuesheet_insert_blank_track(FLAC__StreamMetadata *object, unsigned track_num); /** Delete a track in a CUESHEET block at the given index. * * \param object A pointer to an existing CUESHEET object. * \param track_num The index into the track array of the track to * delete. NOTE: this is not necessarily the same * as the track's \a number field. * \assert * \code object != NULL \endcode * \code object->type == FLAC__METADATA_TYPE_CUESHEET \endcode * \code object->data.cue_sheet.num_tracks > track_num \endcode * \retval FLAC__bool * \c false if realloc() fails, else \c true. */ FLAC_API FLAC__bool FLAC__metadata_object_cuesheet_delete_track(FLAC__StreamMetadata *object, unsigned track_num); /** Check a cue sheet to see if it conforms to the FLAC specification. * See the format specification for limits on the contents of the * cue sheet. * * \param object A pointer to an existing CUESHEET object. * \param check_cd_da_subset If \c true, check CUESHEET against more * stringent requirements for a CD-DA (audio) disc. * \param violation Address of a pointer to a string. If there is a * violation, a pointer to a string explanation of the * violation will be returned here. \a violation may be * \c NULL if you don't need the returned string. Do not * free the returned string; it will always point to static * data. * \assert * \code object != NULL \endcode * \code object->type == FLAC__METADATA_TYPE_CUESHEET \endcode * \retval FLAC__bool * \c false if cue sheet is illegal, else \c true. */ FLAC_API FLAC__bool FLAC__metadata_object_cuesheet_is_legal(const FLAC__StreamMetadata *object, FLAC__bool check_cd_da_subset, const char **violation); /** Calculate and return the CDDB/freedb ID for a cue sheet. The function * assumes the cue sheet corresponds to a CD; the result is undefined * if the cuesheet's is_cd bit is not set. * * \param object A pointer to an existing CUESHEET object. * \assert * \code object != NULL \endcode * \code object->type == FLAC__METADATA_TYPE_CUESHEET \endcode * \retval FLAC__uint32 * The unsigned integer representation of the CDDB/freedb ID */ FLAC_API FLAC__uint32 FLAC__metadata_object_cuesheet_calculate_cddb_id(const FLAC__StreamMetadata *object); /** Sets the MIME type of a PICTURE block. * * If \a copy is \c true, a copy of the string is stored; otherwise, the object * takes ownership of the pointer. The existing string will be freed if this * function is successful, otherwise the original string will remain if \a copy * is \c true and malloc() fails. * * \note It is safe to pass a const pointer to \a mime_type if \a copy is \c true. * * \param object A pointer to an existing PICTURE object. * \param mime_type A pointer to the MIME type string. The string must be * ASCII characters 0x20-0x7e, NUL-terminated. No validation * is done. * \param copy See above. * \assert * \code object != NULL \endcode * \code object->type == FLAC__METADATA_TYPE_PICTURE \endcode * \code (mime_type != NULL) \endcode * \retval FLAC__bool * \c false if \a copy is \c true and malloc() fails, else \c true. */ FLAC_API FLAC__bool FLAC__metadata_object_picture_set_mime_type(FLAC__StreamMetadata *object, char *mime_type, FLAC__bool copy); /** Sets the description of a PICTURE block. * * If \a copy is \c true, a copy of the string is stored; otherwise, the object * takes ownership of the pointer. The existing string will be freed if this * function is successful, otherwise the original string will remain if \a copy * is \c true and malloc() fails. * * \note It is safe to pass a const pointer to \a description if \a copy is \c true. * * \param object A pointer to an existing PICTURE object. * \param description A pointer to the description string. The string must be * valid UTF-8, NUL-terminated. No validation is done. * \param copy See above. * \assert * \code object != NULL \endcode * \code object->type == FLAC__METADATA_TYPE_PICTURE \endcode * \code (description != NULL) \endcode * \retval FLAC__bool * \c false if \a copy is \c true and malloc() fails, else \c true. */ FLAC_API FLAC__bool FLAC__metadata_object_picture_set_description(FLAC__StreamMetadata *object, FLAC__byte *description, FLAC__bool copy); /** Sets the picture data of a PICTURE block. * * If \a copy is \c true, a copy of the data is stored; otherwise, the object * takes ownership of the pointer. Also sets the \a data_length field of the * metadata object to what is passed in as the \a length parameter. The * existing data will be freed if this function is successful, otherwise the * original data and data_length will remain if \a copy is \c true and * malloc() fails. * * \note It is safe to pass a const pointer to \a data if \a copy is \c true. * * \param object A pointer to an existing PICTURE object. * \param data A pointer to the data to set. * \param length The length of \a data in bytes. * \param copy See above. * \assert * \code object != NULL \endcode * \code object->type == FLAC__METADATA_TYPE_PICTURE \endcode * \code (data != NULL && length > 0) || * (data == NULL && length == 0 && copy == false) \endcode * \retval FLAC__bool * \c false if \a copy is \c true and malloc() fails, else \c true. */ FLAC_API FLAC__bool FLAC__metadata_object_picture_set_data(FLAC__StreamMetadata *object, FLAC__byte *data, FLAC__uint32 length, FLAC__bool copy); /** Check a PICTURE block to see if it conforms to the FLAC specification. * See the format specification for limits on the contents of the * PICTURE block. * * \param object A pointer to existing PICTURE block to be checked. * \param violation Address of a pointer to a string. If there is a * violation, a pointer to a string explanation of the * violation will be returned here. \a violation may be * \c NULL if you don't need the returned string. Do not * free the returned string; it will always point to static * data. * \assert * \code object != NULL \endcode * \code object->type == FLAC__METADATA_TYPE_PICTURE \endcode * \retval FLAC__bool * \c false if PICTURE block is illegal, else \c true. */ FLAC_API FLAC__bool FLAC__metadata_object_picture_is_legal(const FLAC__StreamMetadata *object, const char **violation); /* \} */ #ifdef __cplusplus } #endif #endif fs-uae-2.2.3+dfsg/src/od-fs/FLAC/stream_decoder.h0000644000175000017500000021232512162366654021516 0ustar glaubitzglaubitz/* libFLAC - Free Lossless Audio Codec library * Copyright (C) 2000,2001,2002,2003,2004,2005,2006,2007 Josh Coalson * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * - Neither the name of the Xiph.org Foundation nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef FLAC__STREAM_DECODER_H #define FLAC__STREAM_DECODER_H #include /* for FILE */ #include "export.h" #include "format.h" #ifdef __cplusplus extern "C" { #endif /** \file include/FLAC/stream_decoder.h * * \brief * This module contains the functions which implement the stream * decoder. * * See the detailed documentation in the * \link flac_stream_decoder stream decoder \endlink module. */ /** \defgroup flac_decoder FLAC/ \*_decoder.h: decoder interfaces * \ingroup flac * * \brief * This module describes the decoder layers provided by libFLAC. * * The stream decoder can be used to decode complete streams either from * the client via callbacks, or directly from a file, depending on how * it is initialized. When decoding via callbacks, the client provides * callbacks for reading FLAC data and writing decoded samples, and * handling metadata and errors. If the client also supplies seek-related * callback, the decoder function for sample-accurate seeking within the * FLAC input is also available. When decoding from a file, the client * needs only supply a filename or open \c FILE* and write/metadata/error * callbacks; the rest of the callbacks are supplied internally. For more * info see the \link flac_stream_decoder stream decoder \endlink module. */ /** \defgroup flac_stream_decoder FLAC/stream_decoder.h: stream decoder interface * \ingroup flac_decoder * * \brief * This module contains the functions which implement the stream * decoder. * * The stream decoder can decode native FLAC, and optionally Ogg FLAC * (check FLAC_API_SUPPORTS_OGG_FLAC) streams and files. * * The basic usage of this decoder is as follows: * - The program creates an instance of a decoder using * FLAC__stream_decoder_new(). * - The program overrides the default settings using * FLAC__stream_decoder_set_*() functions. * - The program initializes the instance to validate the settings and * prepare for decoding using * - FLAC__stream_decoder_init_stream() or FLAC__stream_decoder_init_FILE() * or FLAC__stream_decoder_init_file() for native FLAC, * - FLAC__stream_decoder_init_ogg_stream() or FLAC__stream_decoder_init_ogg_FILE() * or FLAC__stream_decoder_init_ogg_file() for Ogg FLAC * - The program calls the FLAC__stream_decoder_process_*() functions * to decode data, which subsequently calls the callbacks. * - The program finishes the decoding with FLAC__stream_decoder_finish(), * which flushes the input and output and resets the decoder to the * uninitialized state. * - The instance may be used again or deleted with * FLAC__stream_decoder_delete(). * * In more detail, the program will create a new instance by calling * FLAC__stream_decoder_new(), then call FLAC__stream_decoder_set_*() * functions to override the default decoder options, and call * one of the FLAC__stream_decoder_init_*() functions. * * There are three initialization functions for native FLAC, one for * setting up the decoder to decode FLAC data from the client via * callbacks, and two for decoding directly from a FLAC file. * * For decoding via callbacks, use FLAC__stream_decoder_init_stream(). * You must also supply several callbacks for handling I/O. Some (like * seeking) are optional, depending on the capabilities of the input. * * For decoding directly from a file, use FLAC__stream_decoder_init_FILE() * or FLAC__stream_decoder_init_file(). Then you must only supply an open * \c FILE* or filename and fewer callbacks; the decoder will handle * the other callbacks internally. * * There are three similarly-named init functions for decoding from Ogg * FLAC streams. Check \c FLAC_API_SUPPORTS_OGG_FLAC to find out if the * library has been built with Ogg support. * * Once the decoder is initialized, your program will call one of several * functions to start the decoding process: * * - FLAC__stream_decoder_process_single() - Tells the decoder to process at * most one metadata block or audio frame and return, calling either the * metadata callback or write callback, respectively, once. If the decoder * loses sync it will return with only the error callback being called. * - FLAC__stream_decoder_process_until_end_of_metadata() - Tells the decoder * to process the stream from the current location and stop upon reaching * the first audio frame. The client will get one metadata, write, or error * callback per metadata block, audio frame, or sync error, respectively. * - FLAC__stream_decoder_process_until_end_of_stream() - Tells the decoder * to process the stream from the current location until the read callback * returns FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM or * FLAC__STREAM_DECODER_READ_STATUS_ABORT. The client will get one metadata, * write, or error callback per metadata block, audio frame, or sync error, * respectively. * * When the decoder has finished decoding (normally or through an abort), * the instance is finished by calling FLAC__stream_decoder_finish(), which * ensures the decoder is in the correct state and frees memory. Then the * instance may be deleted with FLAC__stream_decoder_delete() or initialized * again to decode another stream. * * Seeking is exposed through the FLAC__stream_decoder_seek_absolute() method. * At any point after the stream decoder has been initialized, the client can * call this function to seek to an exact sample within the stream. * Subsequently, the first time the write callback is called it will be * passed a (possibly partial) block starting at that sample. * * If the client cannot seek via the callback interface provided, but still * has another way of seeking, it can flush the decoder using * FLAC__stream_decoder_flush() and start feeding data from the new position * through the read callback. * * The stream decoder also provides MD5 signature checking. If this is * turned on before initialization, FLAC__stream_decoder_finish() will * report when the decoded MD5 signature does not match the one stored * in the STREAMINFO block. MD5 checking is automatically turned off * (until the next FLAC__stream_decoder_reset()) if there is no signature * in the STREAMINFO block or when a seek is attempted. * * The FLAC__stream_decoder_set_metadata_*() functions deserve special * attention. By default, the decoder only calls the metadata_callback for * the STREAMINFO block. These functions allow you to tell the decoder * explicitly which blocks to parse and return via the metadata_callback * and/or which to skip. Use a FLAC__stream_decoder_set_metadata_respond_all(), * FLAC__stream_decoder_set_metadata_ignore() ... or FLAC__stream_decoder_set_metadata_ignore_all(), * FLAC__stream_decoder_set_metadata_respond() ... sequence to exactly specify * which blocks to return. Remember that metadata blocks can potentially * be big (for example, cover art) so filtering out the ones you don't * use can reduce the memory requirements of the decoder. Also note the * special forms FLAC__stream_decoder_set_metadata_respond_application(id) * and FLAC__stream_decoder_set_metadata_ignore_application(id) for * filtering APPLICATION blocks based on the application ID. * * STREAMINFO and SEEKTABLE blocks are always parsed and used internally, but * they still can legally be filtered from the metadata_callback. * * \note * The "set" functions may only be called when the decoder is in the * state FLAC__STREAM_DECODER_UNINITIALIZED, i.e. after * FLAC__stream_decoder_new() or FLAC__stream_decoder_finish(), but * before FLAC__stream_decoder_init_*(). If this is the case they will * return \c true, otherwise \c false. * * \note * FLAC__stream_decoder_finish() resets all settings to the constructor * defaults, including the callbacks. * * \{ */ /** State values for a FLAC__StreamDecoder * * The decoder's state can be obtained by calling FLAC__stream_decoder_get_state(). */ typedef enum { FLAC__STREAM_DECODER_SEARCH_FOR_METADATA = 0, /**< The decoder is ready to search for metadata. */ FLAC__STREAM_DECODER_READ_METADATA, /**< The decoder is ready to or is in the process of reading metadata. */ FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC, /**< The decoder is ready to or is in the process of searching for the * frame sync code. */ FLAC__STREAM_DECODER_READ_FRAME, /**< The decoder is ready to or is in the process of reading a frame. */ FLAC__STREAM_DECODER_END_OF_STREAM, /**< The decoder has reached the end of the stream. */ FLAC__STREAM_DECODER_OGG_ERROR, /**< An error occurred in the underlying Ogg layer. */ FLAC__STREAM_DECODER_SEEK_ERROR, /**< An error occurred while seeking. The decoder must be flushed * with FLAC__stream_decoder_flush() or reset with * FLAC__stream_decoder_reset() before decoding can continue. */ FLAC__STREAM_DECODER_ABORTED, /**< The decoder was aborted by the read callback. */ FLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR, /**< An error occurred allocating memory. The decoder is in an invalid * state and can no longer be used. */ FLAC__STREAM_DECODER_UNINITIALIZED /**< The decoder is in the uninitialized state; one of the * FLAC__stream_decoder_init_*() functions must be called before samples * can be processed. */ } FLAC__StreamDecoderState; /** Maps a FLAC__StreamDecoderState to a C string. * * Using a FLAC__StreamDecoderState as the index to this array * will give the string equivalent. The contents should not be modified. */ extern FLAC_API const char * const FLAC__StreamDecoderStateString[]; /** Possible return values for the FLAC__stream_decoder_init_*() functions. */ typedef enum { FLAC__STREAM_DECODER_INIT_STATUS_OK = 0, /**< Initialization was successful. */ FLAC__STREAM_DECODER_INIT_STATUS_UNSUPPORTED_CONTAINER, /**< The library was not compiled with support for the given container * format. */ FLAC__STREAM_DECODER_INIT_STATUS_INVALID_CALLBACKS, /**< A required callback was not supplied. */ FLAC__STREAM_DECODER_INIT_STATUS_MEMORY_ALLOCATION_ERROR, /**< An error occurred allocating memory. */ FLAC__STREAM_DECODER_INIT_STATUS_ERROR_OPENING_FILE, /**< fopen() failed in FLAC__stream_decoder_init_file() or * FLAC__stream_decoder_init_ogg_file(). */ FLAC__STREAM_DECODER_INIT_STATUS_ALREADY_INITIALIZED /**< FLAC__stream_decoder_init_*() was called when the decoder was * already initialized, usually because * FLAC__stream_decoder_finish() was not called. */ } FLAC__StreamDecoderInitStatus; /** Maps a FLAC__StreamDecoderInitStatus to a C string. * * Using a FLAC__StreamDecoderInitStatus as the index to this array * will give the string equivalent. The contents should not be modified. */ extern FLAC_API const char * const FLAC__StreamDecoderInitStatusString[]; /** Return values for the FLAC__StreamDecoder read callback. */ typedef enum { FLAC__STREAM_DECODER_READ_STATUS_CONTINUE, /**< The read was OK and decoding can continue. */ FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM, /**< The read was attempted while at the end of the stream. Note that * the client must only return this value when the read callback was * called when already at the end of the stream. Otherwise, if the read * itself moves to the end of the stream, the client should still return * the data and \c FLAC__STREAM_DECODER_READ_STATUS_CONTINUE, and then on * the next read callback it should return * \c FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM with a byte count * of \c 0. */ FLAC__STREAM_DECODER_READ_STATUS_ABORT /**< An unrecoverable error occurred. The decoder will return from the process call. */ } FLAC__StreamDecoderReadStatus; /** Maps a FLAC__StreamDecoderReadStatus to a C string. * * Using a FLAC__StreamDecoderReadStatus as the index to this array * will give the string equivalent. The contents should not be modified. */ extern FLAC_API const char * const FLAC__StreamDecoderReadStatusString[]; /** Return values for the FLAC__StreamDecoder seek callback. */ typedef enum { FLAC__STREAM_DECODER_SEEK_STATUS_OK, /**< The seek was OK and decoding can continue. */ FLAC__STREAM_DECODER_SEEK_STATUS_ERROR, /**< An unrecoverable error occurred. The decoder will return from the process call. */ FLAC__STREAM_DECODER_SEEK_STATUS_UNSUPPORTED /**< Client does not support seeking. */ } FLAC__StreamDecoderSeekStatus; /** Maps a FLAC__StreamDecoderSeekStatus to a C string. * * Using a FLAC__StreamDecoderSeekStatus as the index to this array * will give the string equivalent. The contents should not be modified. */ extern FLAC_API const char * const FLAC__StreamDecoderSeekStatusString[]; /** Return values for the FLAC__StreamDecoder tell callback. */ typedef enum { FLAC__STREAM_DECODER_TELL_STATUS_OK, /**< The tell was OK and decoding can continue. */ FLAC__STREAM_DECODER_TELL_STATUS_ERROR, /**< An unrecoverable error occurred. The decoder will return from the process call. */ FLAC__STREAM_DECODER_TELL_STATUS_UNSUPPORTED /**< Client does not support telling the position. */ } FLAC__StreamDecoderTellStatus; /** Maps a FLAC__StreamDecoderTellStatus to a C string. * * Using a FLAC__StreamDecoderTellStatus as the index to this array * will give the string equivalent. The contents should not be modified. */ extern FLAC_API const char * const FLAC__StreamDecoderTellStatusString[]; /** Return values for the FLAC__StreamDecoder length callback. */ typedef enum { FLAC__STREAM_DECODER_LENGTH_STATUS_OK, /**< The length call was OK and decoding can continue. */ FLAC__STREAM_DECODER_LENGTH_STATUS_ERROR, /**< An unrecoverable error occurred. The decoder will return from the process call. */ FLAC__STREAM_DECODER_LENGTH_STATUS_UNSUPPORTED /**< Client does not support reporting the length. */ } FLAC__StreamDecoderLengthStatus; /** Maps a FLAC__StreamDecoderLengthStatus to a C string. * * Using a FLAC__StreamDecoderLengthStatus as the index to this array * will give the string equivalent. The contents should not be modified. */ extern FLAC_API const char * const FLAC__StreamDecoderLengthStatusString[]; /** Return values for the FLAC__StreamDecoder write callback. */ typedef enum { FLAC__STREAM_DECODER_WRITE_STATUS_CONTINUE, /**< The write was OK and decoding can continue. */ FLAC__STREAM_DECODER_WRITE_STATUS_ABORT /**< An unrecoverable error occurred. The decoder will return from the process call. */ } FLAC__StreamDecoderWriteStatus; /** Maps a FLAC__StreamDecoderWriteStatus to a C string. * * Using a FLAC__StreamDecoderWriteStatus as the index to this array * will give the string equivalent. The contents should not be modified. */ extern FLAC_API const char * const FLAC__StreamDecoderWriteStatusString[]; /** Possible values passed back to the FLAC__StreamDecoder error callback. * \c FLAC__STREAM_DECODER_ERROR_STATUS_LOST_SYNC is the generic catch- * all. The rest could be caused by bad sync (false synchronization on * data that is not the start of a frame) or corrupted data. The error * itself is the decoder's best guess at what happened assuming a correct * sync. For example \c FLAC__STREAM_DECODER_ERROR_STATUS_BAD_HEADER * could be caused by a correct sync on the start of a frame, but some * data in the frame header was corrupted. Or it could be the result of * syncing on a point the stream that looked like the starting of a frame * but was not. \c FLAC__STREAM_DECODER_ERROR_STATUS_UNPARSEABLE_STREAM * could be because the decoder encountered a valid frame made by a future * version of the encoder which it cannot parse, or because of a false * sync making it appear as though an encountered frame was generated by * a future encoder. */ typedef enum { FLAC__STREAM_DECODER_ERROR_STATUS_LOST_SYNC, /**< An error in the stream caused the decoder to lose synchronization. */ FLAC__STREAM_DECODER_ERROR_STATUS_BAD_HEADER, /**< The decoder encountered a corrupted frame header. */ FLAC__STREAM_DECODER_ERROR_STATUS_FRAME_CRC_MISMATCH, /**< The frame's data did not match the CRC in the footer. */ FLAC__STREAM_DECODER_ERROR_STATUS_UNPARSEABLE_STREAM /**< The decoder encountered reserved fields in use in the stream. */ } FLAC__StreamDecoderErrorStatus; /** Maps a FLAC__StreamDecoderErrorStatus to a C string. * * Using a FLAC__StreamDecoderErrorStatus as the index to this array * will give the string equivalent. The contents should not be modified. */ extern FLAC_API const char * const FLAC__StreamDecoderErrorStatusString[]; /*********************************************************************** * * class FLAC__StreamDecoder * ***********************************************************************/ struct FLAC__StreamDecoderProtected; struct FLAC__StreamDecoderPrivate; /** The opaque structure definition for the stream decoder type. * See the \link flac_stream_decoder stream decoder module \endlink * for a detailed description. */ typedef struct { struct FLAC__StreamDecoderProtected *protected_; /* avoid the C++ keyword 'protected' */ struct FLAC__StreamDecoderPrivate *private_; /* avoid the C++ keyword 'private' */ } FLAC__StreamDecoder; /** Signature for the read callback. * * A function pointer matching this signature must be passed to * FLAC__stream_decoder_init*_stream(). The supplied function will be * called when the decoder needs more input data. The address of the * buffer to be filled is supplied, along with the number of bytes the * buffer can hold. The callback may choose to supply less data and * modify the byte count but must be careful not to overflow the buffer. * The callback then returns a status code chosen from * FLAC__StreamDecoderReadStatus. * * Here is an example of a read callback for stdio streams: * \code * FLAC__StreamDecoderReadStatus read_cb(const FLAC__StreamDecoder *decoder, FLAC__byte buffer[], size_t *bytes, void *client_data) * { * FILE *file = ((MyClientData*)client_data)->file; * if(*bytes > 0) { * *bytes = fread(buffer, sizeof(FLAC__byte), *bytes, file); * if(ferror(file)) * return FLAC__STREAM_DECODER_READ_STATUS_ABORT; * else if(*bytes == 0) * return FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM; * else * return FLAC__STREAM_DECODER_READ_STATUS_CONTINUE; * } * else * return FLAC__STREAM_DECODER_READ_STATUS_ABORT; * } * \endcode * * \note In general, FLAC__StreamDecoder functions which change the * state should not be called on the \a decoder while in the callback. * * \param decoder The decoder instance calling the callback. * \param buffer A pointer to a location for the callee to store * data to be decoded. * \param bytes A pointer to the size of the buffer. On entry * to the callback, it contains the maximum number * of bytes that may be stored in \a buffer. The * callee must set it to the actual number of bytes * stored (0 in case of error or end-of-stream) before * returning. * \param client_data The callee's client data set through * FLAC__stream_decoder_init_*(). * \retval FLAC__StreamDecoderReadStatus * The callee's return status. Note that the callback should return * \c FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM if and only if * zero bytes were read and there is no more data to be read. */ typedef FLAC__StreamDecoderReadStatus (*FLAC__StreamDecoderReadCallback)(const FLAC__StreamDecoder *decoder, FLAC__byte buffer[], size_t *bytes, void *client_data); /** Signature for the seek callback. * * A function pointer matching this signature may be passed to * FLAC__stream_decoder_init*_stream(). The supplied function will be * called when the decoder needs to seek the input stream. The decoder * will pass the absolute byte offset to seek to, 0 meaning the * beginning of the stream. * * Here is an example of a seek callback for stdio streams: * \code * FLAC__StreamDecoderSeekStatus seek_cb(const FLAC__StreamDecoder *decoder, FLAC__uint64 absolute_byte_offset, void *client_data) * { * FILE *file = ((MyClientData*)client_data)->file; * if(file == stdin) * return FLAC__STREAM_DECODER_SEEK_STATUS_UNSUPPORTED; * else if(fseeko(file, (off_t)absolute_byte_offset, SEEK_SET) < 0) * return FLAC__STREAM_DECODER_SEEK_STATUS_ERROR; * else * return FLAC__STREAM_DECODER_SEEK_STATUS_OK; * } * \endcode * * \note In general, FLAC__StreamDecoder functions which change the * state should not be called on the \a decoder while in the callback. * * \param decoder The decoder instance calling the callback. * \param absolute_byte_offset The offset from the beginning of the stream * to seek to. * \param client_data The callee's client data set through * FLAC__stream_decoder_init_*(). * \retval FLAC__StreamDecoderSeekStatus * The callee's return status. */ typedef FLAC__StreamDecoderSeekStatus (*FLAC__StreamDecoderSeekCallback)(const FLAC__StreamDecoder *decoder, FLAC__uint64 absolute_byte_offset, void *client_data); /** Signature for the tell callback. * * A function pointer matching this signature may be passed to * FLAC__stream_decoder_init*_stream(). The supplied function will be * called when the decoder wants to know the current position of the * stream. The callback should return the byte offset from the * beginning of the stream. * * Here is an example of a tell callback for stdio streams: * \code * FLAC__StreamDecoderTellStatus tell_cb(const FLAC__StreamDecoder *decoder, FLAC__uint64 *absolute_byte_offset, void *client_data) * { * FILE *file = ((MyClientData*)client_data)->file; * off_t pos; * if(file == stdin) * return FLAC__STREAM_DECODER_TELL_STATUS_UNSUPPORTED; * else if((pos = ftello(file)) < 0) * return FLAC__STREAM_DECODER_TELL_STATUS_ERROR; * else { * *absolute_byte_offset = (FLAC__uint64)pos; * return FLAC__STREAM_DECODER_TELL_STATUS_OK; * } * } * \endcode * * \note In general, FLAC__StreamDecoder functions which change the * state should not be called on the \a decoder while in the callback. * * \param decoder The decoder instance calling the callback. * \param absolute_byte_offset A pointer to storage for the current offset * from the beginning of the stream. * \param client_data The callee's client data set through * FLAC__stream_decoder_init_*(). * \retval FLAC__StreamDecoderTellStatus * The callee's return status. */ typedef FLAC__StreamDecoderTellStatus (*FLAC__StreamDecoderTellCallback)(const FLAC__StreamDecoder *decoder, FLAC__uint64 *absolute_byte_offset, void *client_data); /** Signature for the length callback. * * A function pointer matching this signature may be passed to * FLAC__stream_decoder_init*_stream(). The supplied function will be * called when the decoder wants to know the total length of the stream * in bytes. * * Here is an example of a length callback for stdio streams: * \code * FLAC__StreamDecoderLengthStatus length_cb(const FLAC__StreamDecoder *decoder, FLAC__uint64 *stream_length, void *client_data) * { * FILE *file = ((MyClientData*)client_data)->file; * struct stat filestats; * * if(file == stdin) * return FLAC__STREAM_DECODER_LENGTH_STATUS_UNSUPPORTED; * else if(fstat(fileno(file), &filestats) != 0) * return FLAC__STREAM_DECODER_LENGTH_STATUS_ERROR; * else { * *stream_length = (FLAC__uint64)filestats.st_size; * return FLAC__STREAM_DECODER_LENGTH_STATUS_OK; * } * } * \endcode * * \note In general, FLAC__StreamDecoder functions which change the * state should not be called on the \a decoder while in the callback. * * \param decoder The decoder instance calling the callback. * \param stream_length A pointer to storage for the length of the stream * in bytes. * \param client_data The callee's client data set through * FLAC__stream_decoder_init_*(). * \retval FLAC__StreamDecoderLengthStatus * The callee's return status. */ typedef FLAC__StreamDecoderLengthStatus (*FLAC__StreamDecoderLengthCallback)(const FLAC__StreamDecoder *decoder, FLAC__uint64 *stream_length, void *client_data); /** Signature for the EOF callback. * * A function pointer matching this signature may be passed to * FLAC__stream_decoder_init*_stream(). The supplied function will be * called when the decoder needs to know if the end of the stream has * been reached. * * Here is an example of a EOF callback for stdio streams: * FLAC__bool eof_cb(const FLAC__StreamDecoder *decoder, void *client_data) * \code * { * FILE *file = ((MyClientData*)client_data)->file; * return feof(file)? true : false; * } * \endcode * * \note In general, FLAC__StreamDecoder functions which change the * state should not be called on the \a decoder while in the callback. * * \param decoder The decoder instance calling the callback. * \param client_data The callee's client data set through * FLAC__stream_decoder_init_*(). * \retval FLAC__bool * \c true if the currently at the end of the stream, else \c false. */ typedef FLAC__bool (*FLAC__StreamDecoderEofCallback)(const FLAC__StreamDecoder *decoder, void *client_data); /** Signature for the write callback. * * A function pointer matching this signature must be passed to one of * the FLAC__stream_decoder_init_*() functions. * The supplied function will be called when the decoder has decoded a * single audio frame. The decoder will pass the frame metadata as well * as an array of pointers (one for each channel) pointing to the * decoded audio. * * \note In general, FLAC__StreamDecoder functions which change the * state should not be called on the \a decoder while in the callback. * * \param decoder The decoder instance calling the callback. * \param frame The description of the decoded frame. See * FLAC__Frame. * \param buffer An array of pointers to decoded channels of data. * Each pointer will point to an array of signed * samples of length \a frame->header.blocksize. * Channels will be ordered according to the FLAC * specification; see the documentation for the * frame header. * \param client_data The callee's client data set through * FLAC__stream_decoder_init_*(). * \retval FLAC__StreamDecoderWriteStatus * The callee's return status. */ typedef FLAC__StreamDecoderWriteStatus (*FLAC__StreamDecoderWriteCallback)(const FLAC__StreamDecoder *decoder, const FLAC__Frame *frame, const FLAC__int32 * const buffer[], void *client_data); /** Signature for the metadata callback. * * A function pointer matching this signature must be passed to one of * the FLAC__stream_decoder_init_*() functions. * The supplied function will be called when the decoder has decoded a * metadata block. In a valid FLAC file there will always be one * \c STREAMINFO block, followed by zero or more other metadata blocks. * These will be supplied by the decoder in the same order as they * appear in the stream and always before the first audio frame (i.e. * write callback). The metadata block that is passed in must not be * modified, and it doesn't live beyond the callback, so you should make * a copy of it with FLAC__metadata_object_clone() if you will need it * elsewhere. Since metadata blocks can potentially be large, by * default the decoder only calls the metadata callback for the * \c STREAMINFO block; you can instruct the decoder to pass or filter * other blocks with FLAC__stream_decoder_set_metadata_*() calls. * * \note In general, FLAC__StreamDecoder functions which change the * state should not be called on the \a decoder while in the callback. * * \param decoder The decoder instance calling the callback. * \param metadata The decoded metadata block. * \param client_data The callee's client data set through * FLAC__stream_decoder_init_*(). */ typedef void (*FLAC__StreamDecoderMetadataCallback)(const FLAC__StreamDecoder *decoder, const FLAC__StreamMetadata *metadata, void *client_data); /** Signature for the error callback. * * A function pointer matching this signature must be passed to one of * the FLAC__stream_decoder_init_*() functions. * The supplied function will be called whenever an error occurs during * decoding. * * \note In general, FLAC__StreamDecoder functions which change the * state should not be called on the \a decoder while in the callback. * * \param decoder The decoder instance calling the callback. * \param status The error encountered by the decoder. * \param client_data The callee's client data set through * FLAC__stream_decoder_init_*(). */ typedef void (*FLAC__StreamDecoderErrorCallback)(const FLAC__StreamDecoder *decoder, FLAC__StreamDecoderErrorStatus status, void *client_data); /*********************************************************************** * * Class constructor/destructor * ***********************************************************************/ /** Create a new stream decoder instance. The instance is created with * default settings; see the individual FLAC__stream_decoder_set_*() * functions for each setting's default. * * \retval FLAC__StreamDecoder* * \c NULL if there was an error allocating memory, else the new instance. */ FLAC_API FLAC__StreamDecoder *FLAC__stream_decoder_new(void); /** Free a decoder instance. Deletes the object pointed to by \a decoder. * * \param decoder A pointer to an existing decoder. * \assert * \code decoder != NULL \endcode */ FLAC_API void FLAC__stream_decoder_delete(FLAC__StreamDecoder *decoder); /*********************************************************************** * * Public class method prototypes * ***********************************************************************/ /** Set the serial number for the FLAC stream within the Ogg container. * The default behavior is to use the serial number of the first Ogg * page. Setting a serial number here will explicitly specify which * stream is to be decoded. * * \note * This does not need to be set for native FLAC decoding. * * \default \c use serial number of first page * \param decoder A decoder instance to set. * \param serial_number See above. * \assert * \code decoder != NULL \endcode * \retval FLAC__bool * \c false if the decoder is already initialized, else \c true. */ FLAC_API FLAC__bool FLAC__stream_decoder_set_ogg_serial_number(FLAC__StreamDecoder *decoder, long serial_number); /** Set the "MD5 signature checking" flag. If \c true, the decoder will * compute the MD5 signature of the unencoded audio data while decoding * and compare it to the signature from the STREAMINFO block, if it * exists, during FLAC__stream_decoder_finish(). * * MD5 signature checking will be turned off (until the next * FLAC__stream_decoder_reset()) if there is no signature in the * STREAMINFO block or when a seek is attempted. * * Clients that do not use the MD5 check should leave this off to speed * up decoding. * * \default \c false * \param decoder A decoder instance to set. * \param value Flag value (see above). * \assert * \code decoder != NULL \endcode * \retval FLAC__bool * \c false if the decoder is already initialized, else \c true. */ FLAC_API FLAC__bool FLAC__stream_decoder_set_md5_checking(FLAC__StreamDecoder *decoder, FLAC__bool value); /** Direct the decoder to pass on all metadata blocks of type \a type. * * \default By default, only the \c STREAMINFO block is returned via the * metadata callback. * \param decoder A decoder instance to set. * \param type See above. * \assert * \code decoder != NULL \endcode * \a type is valid * \retval FLAC__bool * \c false if the decoder is already initialized, else \c true. */ FLAC_API FLAC__bool FLAC__stream_decoder_set_metadata_respond(FLAC__StreamDecoder *decoder, FLAC__MetadataType type); /** Direct the decoder to pass on all APPLICATION metadata blocks of the * given \a id. * * \default By default, only the \c STREAMINFO block is returned via the * metadata callback. * \param decoder A decoder instance to set. * \param id See above. * \assert * \code decoder != NULL \endcode * \code id != NULL \endcode * \retval FLAC__bool * \c false if the decoder is already initialized, else \c true. */ FLAC_API FLAC__bool FLAC__stream_decoder_set_metadata_respond_application(FLAC__StreamDecoder *decoder, const FLAC__byte id[4]); /** Direct the decoder to pass on all metadata blocks of any type. * * \default By default, only the \c STREAMINFO block is returned via the * metadata callback. * \param decoder A decoder instance to set. * \assert * \code decoder != NULL \endcode * \retval FLAC__bool * \c false if the decoder is already initialized, else \c true. */ FLAC_API FLAC__bool FLAC__stream_decoder_set_metadata_respond_all(FLAC__StreamDecoder *decoder); /** Direct the decoder to filter out all metadata blocks of type \a type. * * \default By default, only the \c STREAMINFO block is returned via the * metadata callback. * \param decoder A decoder instance to set. * \param type See above. * \assert * \code decoder != NULL \endcode * \a type is valid * \retval FLAC__bool * \c false if the decoder is already initialized, else \c true. */ FLAC_API FLAC__bool FLAC__stream_decoder_set_metadata_ignore(FLAC__StreamDecoder *decoder, FLAC__MetadataType type); /** Direct the decoder to filter out all APPLICATION metadata blocks of * the given \a id. * * \default By default, only the \c STREAMINFO block is returned via the * metadata callback. * \param decoder A decoder instance to set. * \param id See above. * \assert * \code decoder != NULL \endcode * \code id != NULL \endcode * \retval FLAC__bool * \c false if the decoder is already initialized, else \c true. */ FLAC_API FLAC__bool FLAC__stream_decoder_set_metadata_ignore_application(FLAC__StreamDecoder *decoder, const FLAC__byte id[4]); /** Direct the decoder to filter out all metadata blocks of any type. * * \default By default, only the \c STREAMINFO block is returned via the * metadata callback. * \param decoder A decoder instance to set. * \assert * \code decoder != NULL \endcode * \retval FLAC__bool * \c false if the decoder is already initialized, else \c true. */ FLAC_API FLAC__bool FLAC__stream_decoder_set_metadata_ignore_all(FLAC__StreamDecoder *decoder); /** Get the current decoder state. * * \param decoder A decoder instance to query. * \assert * \code decoder != NULL \endcode * \retval FLAC__StreamDecoderState * The current decoder state. */ FLAC_API FLAC__StreamDecoderState FLAC__stream_decoder_get_state(const FLAC__StreamDecoder *decoder); /** Get the current decoder state as a C string. * * \param decoder A decoder instance to query. * \assert * \code decoder != NULL \endcode * \retval const char * * The decoder state as a C string. Do not modify the contents. */ FLAC_API const char *FLAC__stream_decoder_get_resolved_state_string(const FLAC__StreamDecoder *decoder); /** Get the "MD5 signature checking" flag. * This is the value of the setting, not whether or not the decoder is * currently checking the MD5 (remember, it can be turned off automatically * by a seek). When the decoder is reset the flag will be restored to the * value returned by this function. * * \param decoder A decoder instance to query. * \assert * \code decoder != NULL \endcode * \retval FLAC__bool * See above. */ FLAC_API FLAC__bool FLAC__stream_decoder_get_md5_checking(const FLAC__StreamDecoder *decoder); /** Get the total number of samples in the stream being decoded. * Will only be valid after decoding has started and will contain the * value from the \c STREAMINFO block. A value of \c 0 means "unknown". * * \param decoder A decoder instance to query. * \assert * \code decoder != NULL \endcode * \retval unsigned * See above. */ FLAC_API FLAC__uint64 FLAC__stream_decoder_get_total_samples(const FLAC__StreamDecoder *decoder); /** Get the current number of channels in the stream being decoded. * Will only be valid after decoding has started and will contain the * value from the most recently decoded frame header. * * \param decoder A decoder instance to query. * \assert * \code decoder != NULL \endcode * \retval unsigned * See above. */ FLAC_API unsigned FLAC__stream_decoder_get_channels(const FLAC__StreamDecoder *decoder); /** Get the current channel assignment in the stream being decoded. * Will only be valid after decoding has started and will contain the * value from the most recently decoded frame header. * * \param decoder A decoder instance to query. * \assert * \code decoder != NULL \endcode * \retval FLAC__ChannelAssignment * See above. */ FLAC_API FLAC__ChannelAssignment FLAC__stream_decoder_get_channel_assignment(const FLAC__StreamDecoder *decoder); /** Get the current sample resolution in the stream being decoded. * Will only be valid after decoding has started and will contain the * value from the most recently decoded frame header. * * \param decoder A decoder instance to query. * \assert * \code decoder != NULL \endcode * \retval unsigned * See above. */ FLAC_API unsigned FLAC__stream_decoder_get_bits_per_sample(const FLAC__StreamDecoder *decoder); /** Get the current sample rate in Hz of the stream being decoded. * Will only be valid after decoding has started and will contain the * value from the most recently decoded frame header. * * \param decoder A decoder instance to query. * \assert * \code decoder != NULL \endcode * \retval unsigned * See above. */ FLAC_API unsigned FLAC__stream_decoder_get_sample_rate(const FLAC__StreamDecoder *decoder); /** Get the current blocksize of the stream being decoded. * Will only be valid after decoding has started and will contain the * value from the most recently decoded frame header. * * \param decoder A decoder instance to query. * \assert * \code decoder != NULL \endcode * \retval unsigned * See above. */ FLAC_API unsigned FLAC__stream_decoder_get_blocksize(const FLAC__StreamDecoder *decoder); /** Returns the decoder's current read position within the stream. * The position is the byte offset from the start of the stream. * Bytes before this position have been fully decoded. Note that * there may still be undecoded bytes in the decoder's read FIFO. * The returned position is correct even after a seek. * * \warning This function currently only works for native FLAC, * not Ogg FLAC streams. * * \param decoder A decoder instance to query. * \param position Address at which to return the desired position. * \assert * \code decoder != NULL \endcode * \code position != NULL \endcode * \retval FLAC__bool * \c true if successful, \c false if the stream is not native FLAC, * or there was an error from the 'tell' callback or it returned * \c FLAC__STREAM_DECODER_TELL_STATUS_UNSUPPORTED. */ FLAC_API FLAC__bool FLAC__stream_decoder_get_decode_position(const FLAC__StreamDecoder *decoder, FLAC__uint64 *position); /** Initialize the decoder instance to decode native FLAC streams. * * This flavor of initialization sets up the decoder to decode from a * native FLAC stream. I/O is performed via callbacks to the client. * For decoding from a plain file via filename or open FILE*, * FLAC__stream_decoder_init_file() and FLAC__stream_decoder_init_FILE() * provide a simpler interface. * * This function should be called after FLAC__stream_decoder_new() and * FLAC__stream_decoder_set_*() but before any of the * FLAC__stream_decoder_process_*() functions. Will set and return the * decoder state, which will be FLAC__STREAM_DECODER_SEARCH_FOR_METADATA * if initialization succeeded. * * \param decoder An uninitialized decoder instance. * \param read_callback See FLAC__StreamDecoderReadCallback. This * pointer must not be \c NULL. * \param seek_callback See FLAC__StreamDecoderSeekCallback. This * pointer may be \c NULL if seeking is not * supported. If \a seek_callback is not \c NULL then a * \a tell_callback, \a length_callback, and \a eof_callback must also be supplied. * Alternatively, a dummy seek callback that just * returns \c FLAC__STREAM_DECODER_SEEK_STATUS_UNSUPPORTED * may also be supplied, all though this is slightly * less efficient for the decoder. * \param tell_callback See FLAC__StreamDecoderTellCallback. This * pointer may be \c NULL if not supported by the client. If * \a seek_callback is not \c NULL then a * \a tell_callback must also be supplied. * Alternatively, a dummy tell callback that just * returns \c FLAC__STREAM_DECODER_TELL_STATUS_UNSUPPORTED * may also be supplied, all though this is slightly * less efficient for the decoder. * \param length_callback See FLAC__StreamDecoderLengthCallback. This * pointer may be \c NULL if not supported by the client. If * \a seek_callback is not \c NULL then a * \a length_callback must also be supplied. * Alternatively, a dummy length callback that just * returns \c FLAC__STREAM_DECODER_LENGTH_STATUS_UNSUPPORTED * may also be supplied, all though this is slightly * less efficient for the decoder. * \param eof_callback See FLAC__StreamDecoderEofCallback. This * pointer may be \c NULL if not supported by the client. If * \a seek_callback is not \c NULL then a * \a eof_callback must also be supplied. * Alternatively, a dummy length callback that just * returns \c false * may also be supplied, all though this is slightly * less efficient for the decoder. * \param write_callback See FLAC__StreamDecoderWriteCallback. This * pointer must not be \c NULL. * \param metadata_callback See FLAC__StreamDecoderMetadataCallback. This * pointer may be \c NULL if the callback is not * desired. * \param error_callback See FLAC__StreamDecoderErrorCallback. This * pointer must not be \c NULL. * \param client_data This value will be supplied to callbacks in their * \a client_data argument. * \assert * \code decoder != NULL \endcode * \retval FLAC__StreamDecoderInitStatus * \c FLAC__STREAM_DECODER_INIT_STATUS_OK if initialization was successful; * see FLAC__StreamDecoderInitStatus for the meanings of other return values. */ FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_stream( FLAC__StreamDecoder *decoder, FLAC__StreamDecoderReadCallback read_callback, FLAC__StreamDecoderSeekCallback seek_callback, FLAC__StreamDecoderTellCallback tell_callback, FLAC__StreamDecoderLengthCallback length_callback, FLAC__StreamDecoderEofCallback eof_callback, FLAC__StreamDecoderWriteCallback write_callback, FLAC__StreamDecoderMetadataCallback metadata_callback, FLAC__StreamDecoderErrorCallback error_callback, void *client_data ); /** Initialize the decoder instance to decode Ogg FLAC streams. * * This flavor of initialization sets up the decoder to decode from a * FLAC stream in an Ogg container. I/O is performed via callbacks to the * client. For decoding from a plain file via filename or open FILE*, * FLAC__stream_decoder_init_ogg_file() and FLAC__stream_decoder_init_ogg_FILE() * provide a simpler interface. * * This function should be called after FLAC__stream_decoder_new() and * FLAC__stream_decoder_set_*() but before any of the * FLAC__stream_decoder_process_*() functions. Will set and return the * decoder state, which will be FLAC__STREAM_DECODER_SEARCH_FOR_METADATA * if initialization succeeded. * * \note Support for Ogg FLAC in the library is optional. If this * library has been built without support for Ogg FLAC, this function * will return \c FLAC__STREAM_DECODER_INIT_STATUS_UNSUPPORTED_CONTAINER. * * \param decoder An uninitialized decoder instance. * \param read_callback See FLAC__StreamDecoderReadCallback. This * pointer must not be \c NULL. * \param seek_callback See FLAC__StreamDecoderSeekCallback. This * pointer may be \c NULL if seeking is not * supported. If \a seek_callback is not \c NULL then a * \a tell_callback, \a length_callback, and \a eof_callback must also be supplied. * Alternatively, a dummy seek callback that just * returns \c FLAC__STREAM_DECODER_SEEK_STATUS_UNSUPPORTED * may also be supplied, all though this is slightly * less efficient for the decoder. * \param tell_callback See FLAC__StreamDecoderTellCallback. This * pointer may be \c NULL if not supported by the client. If * \a seek_callback is not \c NULL then a * \a tell_callback must also be supplied. * Alternatively, a dummy tell callback that just * returns \c FLAC__STREAM_DECODER_TELL_STATUS_UNSUPPORTED * may also be supplied, all though this is slightly * less efficient for the decoder. * \param length_callback See FLAC__StreamDecoderLengthCallback. This * pointer may be \c NULL if not supported by the client. If * \a seek_callback is not \c NULL then a * \a length_callback must also be supplied. * Alternatively, a dummy length callback that just * returns \c FLAC__STREAM_DECODER_LENGTH_STATUS_UNSUPPORTED * may also be supplied, all though this is slightly * less efficient for the decoder. * \param eof_callback See FLAC__StreamDecoderEofCallback. This * pointer may be \c NULL if not supported by the client. If * \a seek_callback is not \c NULL then a * \a eof_callback must also be supplied. * Alternatively, a dummy length callback that just * returns \c false * may also be supplied, all though this is slightly * less efficient for the decoder. * \param write_callback See FLAC__StreamDecoderWriteCallback. This * pointer must not be \c NULL. * \param metadata_callback See FLAC__StreamDecoderMetadataCallback. This * pointer may be \c NULL if the callback is not * desired. * \param error_callback See FLAC__StreamDecoderErrorCallback. This * pointer must not be \c NULL. * \param client_data This value will be supplied to callbacks in their * \a client_data argument. * \assert * \code decoder != NULL \endcode * \retval FLAC__StreamDecoderInitStatus * \c FLAC__STREAM_DECODER_INIT_STATUS_OK if initialization was successful; * see FLAC__StreamDecoderInitStatus for the meanings of other return values. */ FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_ogg_stream( FLAC__StreamDecoder *decoder, FLAC__StreamDecoderReadCallback read_callback, FLAC__StreamDecoderSeekCallback seek_callback, FLAC__StreamDecoderTellCallback tell_callback, FLAC__StreamDecoderLengthCallback length_callback, FLAC__StreamDecoderEofCallback eof_callback, FLAC__StreamDecoderWriteCallback write_callback, FLAC__StreamDecoderMetadataCallback metadata_callback, FLAC__StreamDecoderErrorCallback error_callback, void *client_data ); /** Initialize the decoder instance to decode native FLAC files. * * This flavor of initialization sets up the decoder to decode from a * plain native FLAC file. For non-stdio streams, you must use * FLAC__stream_decoder_init_stream() and provide callbacks for the I/O. * * This function should be called after FLAC__stream_decoder_new() and * FLAC__stream_decoder_set_*() but before any of the * FLAC__stream_decoder_process_*() functions. Will set and return the * decoder state, which will be FLAC__STREAM_DECODER_SEARCH_FOR_METADATA * if initialization succeeded. * * \param decoder An uninitialized decoder instance. * \param file An open FLAC file. The file should have been * opened with mode \c "rb" and rewound. The file * becomes owned by the decoder and should not be * manipulated by the client while decoding. * Unless \a file is \c stdin, it will be closed * when FLAC__stream_decoder_finish() is called. * Note however that seeking will not work when * decoding from \c stdout since it is not seekable. * \param write_callback See FLAC__StreamDecoderWriteCallback. This * pointer must not be \c NULL. * \param metadata_callback See FLAC__StreamDecoderMetadataCallback. This * pointer may be \c NULL if the callback is not * desired. * \param error_callback See FLAC__StreamDecoderErrorCallback. This * pointer must not be \c NULL. * \param client_data This value will be supplied to callbacks in their * \a client_data argument. * \assert * \code decoder != NULL \endcode * \code file != NULL \endcode * \retval FLAC__StreamDecoderInitStatus * \c FLAC__STREAM_DECODER_INIT_STATUS_OK if initialization was successful; * see FLAC__StreamDecoderInitStatus for the meanings of other return values. */ FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_FILE( FLAC__StreamDecoder *decoder, FILE *file, FLAC__StreamDecoderWriteCallback write_callback, FLAC__StreamDecoderMetadataCallback metadata_callback, FLAC__StreamDecoderErrorCallback error_callback, void *client_data ); /** Initialize the decoder instance to decode Ogg FLAC files. * * This flavor of initialization sets up the decoder to decode from a * plain Ogg FLAC file. For non-stdio streams, you must use * FLAC__stream_decoder_init_ogg_stream() and provide callbacks for the I/O. * * This function should be called after FLAC__stream_decoder_new() and * FLAC__stream_decoder_set_*() but before any of the * FLAC__stream_decoder_process_*() functions. Will set and return the * decoder state, which will be FLAC__STREAM_DECODER_SEARCH_FOR_METADATA * if initialization succeeded. * * \note Support for Ogg FLAC in the library is optional. If this * library has been built without support for Ogg FLAC, this function * will return \c FLAC__STREAM_DECODER_INIT_STATUS_UNSUPPORTED_CONTAINER. * * \param decoder An uninitialized decoder instance. * \param file An open FLAC file. The file should have been * opened with mode \c "rb" and rewound. The file * becomes owned by the decoder and should not be * manipulated by the client while decoding. * Unless \a file is \c stdin, it will be closed * when FLAC__stream_decoder_finish() is called. * Note however that seeking will not work when * decoding from \c stdout since it is not seekable. * \param write_callback See FLAC__StreamDecoderWriteCallback. This * pointer must not be \c NULL. * \param metadata_callback See FLAC__StreamDecoderMetadataCallback. This * pointer may be \c NULL if the callback is not * desired. * \param error_callback See FLAC__StreamDecoderErrorCallback. This * pointer must not be \c NULL. * \param client_data This value will be supplied to callbacks in their * \a client_data argument. * \assert * \code decoder != NULL \endcode * \code file != NULL \endcode * \retval FLAC__StreamDecoderInitStatus * \c FLAC__STREAM_DECODER_INIT_STATUS_OK if initialization was successful; * see FLAC__StreamDecoderInitStatus for the meanings of other return values. */ FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_ogg_FILE( FLAC__StreamDecoder *decoder, FILE *file, FLAC__StreamDecoderWriteCallback write_callback, FLAC__StreamDecoderMetadataCallback metadata_callback, FLAC__StreamDecoderErrorCallback error_callback, void *client_data ); /** Initialize the decoder instance to decode native FLAC files. * * This flavor of initialization sets up the decoder to decode from a plain * native FLAC file. If POSIX fopen() semantics are not sufficient, (for * example, with Unicode filenames on Windows), you must use * FLAC__stream_decoder_init_FILE(), or FLAC__stream_decoder_init_stream() * and provide callbacks for the I/O. * * This function should be called after FLAC__stream_decoder_new() and * FLAC__stream_decoder_set_*() but before any of the * FLAC__stream_decoder_process_*() functions. Will set and return the * decoder state, which will be FLAC__STREAM_DECODER_SEARCH_FOR_METADATA * if initialization succeeded. * * \param decoder An uninitialized decoder instance. * \param filename The name of the file to decode from. The file will * be opened with fopen(). Use \c NULL to decode from * \c stdin. Note that \c stdin is not seekable. * \param write_callback See FLAC__StreamDecoderWriteCallback. This * pointer must not be \c NULL. * \param metadata_callback See FLAC__StreamDecoderMetadataCallback. This * pointer may be \c NULL if the callback is not * desired. * \param error_callback See FLAC__StreamDecoderErrorCallback. This * pointer must not be \c NULL. * \param client_data This value will be supplied to callbacks in their * \a client_data argument. * \assert * \code decoder != NULL \endcode * \retval FLAC__StreamDecoderInitStatus * \c FLAC__STREAM_DECODER_INIT_STATUS_OK if initialization was successful; * see FLAC__StreamDecoderInitStatus for the meanings of other return values. */ FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_file( FLAC__StreamDecoder *decoder, const char *filename, FLAC__StreamDecoderWriteCallback write_callback, FLAC__StreamDecoderMetadataCallback metadata_callback, FLAC__StreamDecoderErrorCallback error_callback, void *client_data ); /** Initialize the decoder instance to decode Ogg FLAC files. * * This flavor of initialization sets up the decoder to decode from a plain * Ogg FLAC file. If POSIX fopen() semantics are not sufficient, (for * example, with Unicode filenames on Windows), you must use * FLAC__stream_decoder_init_ogg_FILE(), or FLAC__stream_decoder_init_ogg_stream() * and provide callbacks for the I/O. * * This function should be called after FLAC__stream_decoder_new() and * FLAC__stream_decoder_set_*() but before any of the * FLAC__stream_decoder_process_*() functions. Will set and return the * decoder state, which will be FLAC__STREAM_DECODER_SEARCH_FOR_METADATA * if initialization succeeded. * * \note Support for Ogg FLAC in the library is optional. If this * library has been built without support for Ogg FLAC, this function * will return \c FLAC__STREAM_DECODER_INIT_STATUS_UNSUPPORTED_CONTAINER. * * \param decoder An uninitialized decoder instance. * \param filename The name of the file to decode from. The file will * be opened with fopen(). Use \c NULL to decode from * \c stdin. Note that \c stdin is not seekable. * \param write_callback See FLAC__StreamDecoderWriteCallback. This * pointer must not be \c NULL. * \param metadata_callback See FLAC__StreamDecoderMetadataCallback. This * pointer may be \c NULL if the callback is not * desired. * \param error_callback See FLAC__StreamDecoderErrorCallback. This * pointer must not be \c NULL. * \param client_data This value will be supplied to callbacks in their * \a client_data argument. * \assert * \code decoder != NULL \endcode * \retval FLAC__StreamDecoderInitStatus * \c FLAC__STREAM_DECODER_INIT_STATUS_OK if initialization was successful; * see FLAC__StreamDecoderInitStatus for the meanings of other return values. */ FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_ogg_file( FLAC__StreamDecoder *decoder, const char *filename, FLAC__StreamDecoderWriteCallback write_callback, FLAC__StreamDecoderMetadataCallback metadata_callback, FLAC__StreamDecoderErrorCallback error_callback, void *client_data ); /** Finish the decoding process. * Flushes the decoding buffer, releases resources, resets the decoder * settings to their defaults, and returns the decoder state to * FLAC__STREAM_DECODER_UNINITIALIZED. * * In the event of a prematurely-terminated decode, it is not strictly * necessary to call this immediately before FLAC__stream_decoder_delete() * but it is good practice to match every FLAC__stream_decoder_init_*() * with a FLAC__stream_decoder_finish(). * * \param decoder An uninitialized decoder instance. * \assert * \code decoder != NULL \endcode * \retval FLAC__bool * \c false if MD5 checking is on AND a STREAMINFO block was available * AND the MD5 signature in the STREAMINFO block was non-zero AND the * signature does not match the one computed by the decoder; else * \c true. */ FLAC_API FLAC__bool FLAC__stream_decoder_finish(FLAC__StreamDecoder *decoder); /** Flush the stream input. * The decoder's input buffer will be cleared and the state set to * \c FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC. This will also turn * off MD5 checking. * * \param decoder A decoder instance. * \assert * \code decoder != NULL \endcode * \retval FLAC__bool * \c true if successful, else \c false if a memory allocation * error occurs (in which case the state will be set to * \c FLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR). */ FLAC_API FLAC__bool FLAC__stream_decoder_flush(FLAC__StreamDecoder *decoder); /** Reset the decoding process. * The decoder's input buffer will be cleared and the state set to * \c FLAC__STREAM_DECODER_SEARCH_FOR_METADATA. This is similar to * FLAC__stream_decoder_finish() except that the settings are * preserved; there is no need to call FLAC__stream_decoder_init_*() * before decoding again. MD5 checking will be restored to its original * setting. * * If the decoder is seekable, or was initialized with * FLAC__stream_decoder_init*_FILE() or FLAC__stream_decoder_init*_file(), * the decoder will also attempt to seek to the beginning of the file. * If this rewind fails, this function will return \c false. It follows * that FLAC__stream_decoder_reset() cannot be used when decoding from * \c stdin. * * If the decoder was initialized with FLAC__stream_encoder_init*_stream() * and is not seekable (i.e. no seek callback was provided or the seek * callback returns \c FLAC__STREAM_DECODER_SEEK_STATUS_UNSUPPORTED), it * is the duty of the client to start feeding data from the beginning of * the stream on the next FLAC__stream_decoder_process() or * FLAC__stream_decoder_process_interleaved() call. * * \param decoder A decoder instance. * \assert * \code decoder != NULL \endcode * \retval FLAC__bool * \c true if successful, else \c false if a memory allocation occurs * (in which case the state will be set to * \c FLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR) or a seek error * occurs (the state will be unchanged). */ FLAC_API FLAC__bool FLAC__stream_decoder_reset(FLAC__StreamDecoder *decoder); /** Decode one metadata block or audio frame. * This version instructs the decoder to decode a either a single metadata * block or a single frame and stop, unless the callbacks return a fatal * error or the read callback returns * \c FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM. * * As the decoder needs more input it will call the read callback. * Depending on what was decoded, the metadata or write callback will be * called with the decoded metadata block or audio frame. * * Unless there is a fatal read error or end of stream, this function * will return once one whole frame is decoded. In other words, if the * stream is not synchronized or points to a corrupt frame header, the * decoder will continue to try and resync until it gets to a valid * frame, then decode one frame, then return. If the decoder points to * a frame whose frame CRC in the frame footer does not match the * computed frame CRC, this function will issue a * FLAC__STREAM_DECODER_ERROR_STATUS_FRAME_CRC_MISMATCH error to the * error callback, and return, having decoded one complete, although * corrupt, frame. (Such corrupted frames are sent as silence of the * correct length to the write callback.) * * \param decoder An initialized decoder instance. * \assert * \code decoder != NULL \endcode * \retval FLAC__bool * \c false if any fatal read, write, or memory allocation error * occurred (meaning decoding must stop), else \c true; for more * information about the decoder, check the decoder state with * FLAC__stream_decoder_get_state(). */ FLAC_API FLAC__bool FLAC__stream_decoder_process_single(FLAC__StreamDecoder *decoder); /** Decode until the end of the metadata. * This version instructs the decoder to decode from the current position * and continue until all the metadata has been read, or until the * callbacks return a fatal error or the read callback returns * \c FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM. * * As the decoder needs more input it will call the read callback. * As each metadata block is decoded, the metadata callback will be called * with the decoded metadata. * * \param decoder An initialized decoder instance. * \assert * \code decoder != NULL \endcode * \retval FLAC__bool * \c false if any fatal read, write, or memory allocation error * occurred (meaning decoding must stop), else \c true; for more * information about the decoder, check the decoder state with * FLAC__stream_decoder_get_state(). */ FLAC_API FLAC__bool FLAC__stream_decoder_process_until_end_of_metadata(FLAC__StreamDecoder *decoder); /** Decode until the end of the stream. * This version instructs the decoder to decode from the current position * and continue until the end of stream (the read callback returns * \c FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM), or until the * callbacks return a fatal error. * * As the decoder needs more input it will call the read callback. * As each metadata block and frame is decoded, the metadata or write * callback will be called with the decoded metadata or frame. * * \param decoder An initialized decoder instance. * \assert * \code decoder != NULL \endcode * \retval FLAC__bool * \c false if any fatal read, write, or memory allocation error * occurred (meaning decoding must stop), else \c true; for more * information about the decoder, check the decoder state with * FLAC__stream_decoder_get_state(). */ FLAC_API FLAC__bool FLAC__stream_decoder_process_until_end_of_stream(FLAC__StreamDecoder *decoder); /** Skip one audio frame. * This version instructs the decoder to 'skip' a single frame and stop, * unless the callbacks return a fatal error or the read callback returns * \c FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM. * * The decoding flow is the same as what occurs when * FLAC__stream_decoder_process_single() is called to process an audio * frame, except that this function does not decode the parsed data into * PCM or call the write callback. The integrity of the frame is still * checked the same way as in the other process functions. * * This function will return once one whole frame is skipped, in the * same way that FLAC__stream_decoder_process_single() will return once * one whole frame is decoded. * * This function can be used in more quickly determining FLAC frame * boundaries when decoding of the actual data is not needed, for * example when an application is separating a FLAC stream into frames * for editing or storing in a container. To do this, the application * can use FLAC__stream_decoder_skip_single_frame() to quickly advance * to the next frame, then use * FLAC__stream_decoder_get_decode_position() to find the new frame * boundary. * * This function should only be called when the stream has advanced * past all the metadata, otherwise it will return \c false. * * \param decoder An initialized decoder instance not in a metadata * state. * \assert * \code decoder != NULL \endcode * \retval FLAC__bool * \c false if any fatal read, write, or memory allocation error * occurred (meaning decoding must stop), or if the decoder * is in the FLAC__STREAM_DECODER_SEARCH_FOR_METADATA or * FLAC__STREAM_DECODER_READ_METADATA state, else \c true; for more * information about the decoder, check the decoder state with * FLAC__stream_decoder_get_state(). */ FLAC_API FLAC__bool FLAC__stream_decoder_skip_single_frame(FLAC__StreamDecoder *decoder); /** Flush the input and seek to an absolute sample. * Decoding will resume at the given sample. Note that because of * this, the next write callback may contain a partial block. The * client must support seeking the input or this function will fail * and return \c false. Furthermore, if the decoder state is * \c FLAC__STREAM_DECODER_SEEK_ERROR, then the decoder must be flushed * with FLAC__stream_decoder_flush() or reset with * FLAC__stream_decoder_reset() before decoding can continue. * * \param decoder A decoder instance. * \param sample The target sample number to seek to. * \assert * \code decoder != NULL \endcode * \retval FLAC__bool * \c true if successful, else \c false. */ FLAC_API FLAC__bool FLAC__stream_decoder_seek_absolute(FLAC__StreamDecoder *decoder, FLAC__uint64 sample); /* \} */ #ifdef __cplusplus } #endif #endif fs-uae-2.2.3+dfsg/src/od-fs/FLAC/assert.h0000644000175000017500000000367112162366654020041 0ustar glaubitzglaubitz/* libFLAC - Free Lossless Audio Codec library * Copyright (C) 2001,2002,2003,2004,2005,2006,2007 Josh Coalson * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * - Neither the name of the Xiph.org Foundation nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef FLAC__ASSERT_H #define FLAC__ASSERT_H /* we need this since some compilers (like MSVC) leave assert()s on release code (and we don't want to use their ASSERT) */ #ifdef DEBUG #include #define FLAC__ASSERT(x) assert(x) #define FLAC__ASSERT_DECLARATION(x) x #else #define FLAC__ASSERT(x) #define FLAC__ASSERT_DECLARATION(x) #endif #endif fs-uae-2.2.3+dfsg/src/od-fs/FLAC/format.h0000644000175000017500000011716112162366654020030 0ustar glaubitzglaubitz/* libFLAC - Free Lossless Audio Codec library * Copyright (C) 2000,2001,2002,2003,2004,2005,2006,2007 Josh Coalson * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * - Neither the name of the Xiph.org Foundation nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef FLAC__FORMAT_H #define FLAC__FORMAT_H #include "export.h" #include "ordinals.h" #ifdef __cplusplus extern "C" { #endif /** \file include/FLAC/format.h * * \brief * This module contains structure definitions for the representation * of FLAC format components in memory. These are the basic * structures used by the rest of the interfaces. * * See the detailed documentation in the * \link flac_format format \endlink module. */ /** \defgroup flac_format FLAC/format.h: format components * \ingroup flac * * \brief * This module contains structure definitions for the representation * of FLAC format components in memory. These are the basic * structures used by the rest of the interfaces. * * First, you should be familiar with the * FLAC format. Many of the values here * follow directly from the specification. As a user of libFLAC, the * interesting parts really are the structures that describe the frame * header and metadata blocks. * * The format structures here are very primitive, designed to store * information in an efficient way. Reading information from the * structures is easy but creating or modifying them directly is * more complex. For the most part, as a user of a library, editing * is not necessary; however, for metadata blocks it is, so there are * convenience functions provided in the \link flac_metadata metadata * module \endlink to simplify the manipulation of metadata blocks. * * \note * It's not the best convention, but symbols ending in _LEN are in bits * and _LENGTH are in bytes. _LENGTH symbols are \#defines instead of * global variables because they are usually used when declaring byte * arrays and some compilers require compile-time knowledge of array * sizes when declared on the stack. * * \{ */ /* Most of the values described in this file are defined by the FLAC format specification. There is nothing to tune here. */ /** The largest legal metadata type code. */ #define FLAC__MAX_METADATA_TYPE_CODE (126u) /** The minimum block size, in samples, permitted by the format. */ #define FLAC__MIN_BLOCK_SIZE (16u) /** The maximum block size, in samples, permitted by the format. */ #define FLAC__MAX_BLOCK_SIZE (65535u) /** The maximum block size, in samples, permitted by the FLAC subset for * sample rates up to 48kHz. */ #define FLAC__SUBSET_MAX_BLOCK_SIZE_48000HZ (4608u) /** The maximum number of channels permitted by the format. */ #define FLAC__MAX_CHANNELS (8u) /** The minimum sample resolution permitted by the format. */ #define FLAC__MIN_BITS_PER_SAMPLE (4u) /** The maximum sample resolution permitted by the format. */ #define FLAC__MAX_BITS_PER_SAMPLE (32u) /** The maximum sample resolution permitted by libFLAC. * * \warning * FLAC__MAX_BITS_PER_SAMPLE is the limit of the FLAC format. However, * the reference encoder/decoder is currently limited to 24 bits because * of prevalent 32-bit math, so make sure and use this value when * appropriate. */ #define FLAC__REFERENCE_CODEC_MAX_BITS_PER_SAMPLE (24u) /** The maximum sample rate permitted by the format. The value is * ((2 ^ 16) - 1) * 10; see FLAC format * as to why. */ #define FLAC__MAX_SAMPLE_RATE (655350u) /** The maximum LPC order permitted by the format. */ #define FLAC__MAX_LPC_ORDER (32u) /** The maximum LPC order permitted by the FLAC subset for sample rates * up to 48kHz. */ #define FLAC__SUBSET_MAX_LPC_ORDER_48000HZ (12u) /** The minimum quantized linear predictor coefficient precision * permitted by the format. */ #define FLAC__MIN_QLP_COEFF_PRECISION (5u) /** The maximum quantized linear predictor coefficient precision * permitted by the format. */ #define FLAC__MAX_QLP_COEFF_PRECISION (15u) /** The maximum order of the fixed predictors permitted by the format. */ #define FLAC__MAX_FIXED_ORDER (4u) /** The maximum Rice partition order permitted by the format. */ #define FLAC__MAX_RICE_PARTITION_ORDER (15u) /** The maximum Rice partition order permitted by the FLAC Subset. */ #define FLAC__SUBSET_MAX_RICE_PARTITION_ORDER (8u) /** The version string of the release, stamped onto the libraries and binaries. * * \note * This does not correspond to the shared library version number, which * is used to determine binary compatibility. */ extern FLAC_API const char *FLAC__VERSION_STRING; /** The vendor string inserted by the encoder into the VORBIS_COMMENT block. * This is a NUL-terminated ASCII string; when inserted into the * VORBIS_COMMENT the trailing null is stripped. */ extern FLAC_API const char *FLAC__VENDOR_STRING; /** The byte string representation of the beginning of a FLAC stream. */ extern FLAC_API const FLAC__byte FLAC__STREAM_SYNC_STRING[4]; /* = "fLaC" */ /** The 32-bit integer big-endian representation of the beginning of * a FLAC stream. */ extern FLAC_API const unsigned FLAC__STREAM_SYNC; /* = 0x664C6143 */ /** The length of the FLAC signature in bits. */ extern FLAC_API const unsigned FLAC__STREAM_SYNC_LEN; /* = 32 bits */ /** The length of the FLAC signature in bytes. */ #define FLAC__STREAM_SYNC_LENGTH (4u) /***************************************************************************** * * Subframe structures * *****************************************************************************/ /*****************************************************************************/ /** An enumeration of the available entropy coding methods. */ typedef enum { FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE = 0, /**< Residual is coded by partitioning into contexts, each with it's own * 4-bit Rice parameter. */ FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2 = 1 /**< Residual is coded by partitioning into contexts, each with it's own * 5-bit Rice parameter. */ } FLAC__EntropyCodingMethodType; /** Maps a FLAC__EntropyCodingMethodType to a C string. * * Using a FLAC__EntropyCodingMethodType as the index to this array will * give the string equivalent. The contents should not be modified. */ extern FLAC_API const char * const FLAC__EntropyCodingMethodTypeString[]; /** Contents of a Rice partitioned residual */ typedef struct { unsigned *parameters; /**< The Rice parameters for each context. */ unsigned *raw_bits; /**< Widths for escape-coded partitions. Will be non-zero for escaped * partitions and zero for unescaped partitions. */ unsigned capacity_by_order; /**< The capacity of the \a parameters and \a raw_bits arrays * specified as an order, i.e. the number of array elements * allocated is 2 ^ \a capacity_by_order. */ } FLAC__EntropyCodingMethod_PartitionedRiceContents; /** Header for a Rice partitioned residual. (c.f. format specification) */ typedef struct { unsigned order; /**< The partition order, i.e. # of contexts = 2 ^ \a order. */ const FLAC__EntropyCodingMethod_PartitionedRiceContents *contents; /**< The context's Rice parameters and/or raw bits. */ } FLAC__EntropyCodingMethod_PartitionedRice; extern FLAC_API const unsigned FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_ORDER_LEN; /**< == 4 (bits) */ extern FLAC_API const unsigned FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_PARAMETER_LEN; /**< == 4 (bits) */ extern FLAC_API const unsigned FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2_PARAMETER_LEN; /**< == 5 (bits) */ extern FLAC_API const unsigned FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_RAW_LEN; /**< == 5 (bits) */ extern FLAC_API const unsigned FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_ESCAPE_PARAMETER; /**< == (1<format specification) */ typedef struct { FLAC__EntropyCodingMethodType type; union { FLAC__EntropyCodingMethod_PartitionedRice partitioned_rice; } data; } FLAC__EntropyCodingMethod; extern FLAC_API const unsigned FLAC__ENTROPY_CODING_METHOD_TYPE_LEN; /**< == 2 (bits) */ /*****************************************************************************/ /** An enumeration of the available subframe types. */ typedef enum { FLAC__SUBFRAME_TYPE_CONSTANT = 0, /**< constant signal */ FLAC__SUBFRAME_TYPE_VERBATIM = 1, /**< uncompressed signal */ FLAC__SUBFRAME_TYPE_FIXED = 2, /**< fixed polynomial prediction */ FLAC__SUBFRAME_TYPE_LPC = 3 /**< linear prediction */ } FLAC__SubframeType; /** Maps a FLAC__SubframeType to a C string. * * Using a FLAC__SubframeType as the index to this array will * give the string equivalent. The contents should not be modified. */ extern FLAC_API const char * const FLAC__SubframeTypeString[]; /** CONSTANT subframe. (c.f. format specification) */ typedef struct { FLAC__int32 value; /**< The constant signal value. */ } FLAC__Subframe_Constant; /** VERBATIM subframe. (c.f. format specification) */ typedef struct { const FLAC__int32 *data; /**< A pointer to verbatim signal. */ } FLAC__Subframe_Verbatim; /** FIXED subframe. (c.f. format specification) */ typedef struct { FLAC__EntropyCodingMethod entropy_coding_method; /**< The residual coding method. */ unsigned order; /**< The polynomial order. */ FLAC__int32 warmup[FLAC__MAX_FIXED_ORDER]; /**< Warmup samples to prime the predictor, length == order. */ const FLAC__int32 *residual; /**< The residual signal, length == (blocksize minus order) samples. */ } FLAC__Subframe_Fixed; /** LPC subframe. (c.f. format specification) */ typedef struct { FLAC__EntropyCodingMethod entropy_coding_method; /**< The residual coding method. */ unsigned order; /**< The FIR order. */ unsigned qlp_coeff_precision; /**< Quantized FIR filter coefficient precision in bits. */ int quantization_level; /**< The qlp coeff shift needed. */ FLAC__int32 qlp_coeff[FLAC__MAX_LPC_ORDER]; /**< FIR filter coefficients. */ FLAC__int32 warmup[FLAC__MAX_LPC_ORDER]; /**< Warmup samples to prime the predictor, length == order. */ const FLAC__int32 *residual; /**< The residual signal, length == (blocksize minus order) samples. */ } FLAC__Subframe_LPC; extern FLAC_API const unsigned FLAC__SUBFRAME_LPC_QLP_COEFF_PRECISION_LEN; /**< == 4 (bits) */ extern FLAC_API const unsigned FLAC__SUBFRAME_LPC_QLP_SHIFT_LEN; /**< == 5 (bits) */ /** FLAC subframe structure. (c.f. format specification) */ typedef struct { FLAC__SubframeType type; union { FLAC__Subframe_Constant constant; FLAC__Subframe_Fixed fixed; FLAC__Subframe_LPC lpc; FLAC__Subframe_Verbatim verbatim; } data; unsigned wasted_bits; } FLAC__Subframe; /** == 1 (bit) * * This used to be a zero-padding bit (hence the name * FLAC__SUBFRAME_ZERO_PAD_LEN) but is now a reserved bit. It still has a * mandatory value of \c 0 but in the future may take on the value \c 0 or \c 1 * to mean something else. */ extern FLAC_API const unsigned FLAC__SUBFRAME_ZERO_PAD_LEN; extern FLAC_API const unsigned FLAC__SUBFRAME_TYPE_LEN; /**< == 6 (bits) */ extern FLAC_API const unsigned FLAC__SUBFRAME_WASTED_BITS_FLAG_LEN; /**< == 1 (bit) */ extern FLAC_API const unsigned FLAC__SUBFRAME_TYPE_CONSTANT_BYTE_ALIGNED_MASK; /**< = 0x00 */ extern FLAC_API const unsigned FLAC__SUBFRAME_TYPE_VERBATIM_BYTE_ALIGNED_MASK; /**< = 0x02 */ extern FLAC_API const unsigned FLAC__SUBFRAME_TYPE_FIXED_BYTE_ALIGNED_MASK; /**< = 0x10 */ extern FLAC_API const unsigned FLAC__SUBFRAME_TYPE_LPC_BYTE_ALIGNED_MASK; /**< = 0x40 */ /*****************************************************************************/ /***************************************************************************** * * Frame structures * *****************************************************************************/ /** An enumeration of the available channel assignments. */ typedef enum { FLAC__CHANNEL_ASSIGNMENT_INDEPENDENT = 0, /**< independent channels */ FLAC__CHANNEL_ASSIGNMENT_LEFT_SIDE = 1, /**< left+side stereo */ FLAC__CHANNEL_ASSIGNMENT_RIGHT_SIDE = 2, /**< right+side stereo */ FLAC__CHANNEL_ASSIGNMENT_MID_SIDE = 3 /**< mid+side stereo */ } FLAC__ChannelAssignment; /** Maps a FLAC__ChannelAssignment to a C string. * * Using a FLAC__ChannelAssignment as the index to this array will * give the string equivalent. The contents should not be modified. */ extern FLAC_API const char * const FLAC__ChannelAssignmentString[]; /** An enumeration of the possible frame numbering methods. */ typedef enum { FLAC__FRAME_NUMBER_TYPE_FRAME_NUMBER, /**< number contains the frame number */ FLAC__FRAME_NUMBER_TYPE_SAMPLE_NUMBER /**< number contains the sample number of first sample in frame */ } FLAC__FrameNumberType; /** Maps a FLAC__FrameNumberType to a C string. * * Using a FLAC__FrameNumberType as the index to this array will * give the string equivalent. The contents should not be modified. */ extern FLAC_API const char * const FLAC__FrameNumberTypeString[]; /** FLAC frame header structure. (c.f. format specification) */ typedef struct { unsigned blocksize; /**< The number of samples per subframe. */ unsigned sample_rate; /**< The sample rate in Hz. */ unsigned channels; /**< The number of channels (== number of subframes). */ FLAC__ChannelAssignment channel_assignment; /**< The channel assignment for the frame. */ unsigned bits_per_sample; /**< The sample resolution. */ FLAC__FrameNumberType number_type; /**< The numbering scheme used for the frame. As a convenience, the * decoder will always convert a frame number to a sample number because * the rules are complex. */ union { FLAC__uint32 frame_number; FLAC__uint64 sample_number; } number; /**< The frame number or sample number of first sample in frame; * use the \a number_type value to determine which to use. */ FLAC__uint8 crc; /**< CRC-8 (polynomial = x^8 + x^2 + x^1 + x^0, initialized with 0) * of the raw frame header bytes, meaning everything before the CRC byte * including the sync code. */ } FLAC__FrameHeader; extern FLAC_API const unsigned FLAC__FRAME_HEADER_SYNC; /**< == 0x3ffe; the frame header sync code */ extern FLAC_API const unsigned FLAC__FRAME_HEADER_SYNC_LEN; /**< == 14 (bits) */ extern FLAC_API const unsigned FLAC__FRAME_HEADER_RESERVED_LEN; /**< == 1 (bits) */ extern FLAC_API const unsigned FLAC__FRAME_HEADER_BLOCKING_STRATEGY_LEN; /**< == 1 (bits) */ extern FLAC_API const unsigned FLAC__FRAME_HEADER_BLOCK_SIZE_LEN; /**< == 4 (bits) */ extern FLAC_API const unsigned FLAC__FRAME_HEADER_SAMPLE_RATE_LEN; /**< == 4 (bits) */ extern FLAC_API const unsigned FLAC__FRAME_HEADER_CHANNEL_ASSIGNMENT_LEN; /**< == 4 (bits) */ extern FLAC_API const unsigned FLAC__FRAME_HEADER_BITS_PER_SAMPLE_LEN; /**< == 3 (bits) */ extern FLAC_API const unsigned FLAC__FRAME_HEADER_ZERO_PAD_LEN; /**< == 1 (bit) */ extern FLAC_API const unsigned FLAC__FRAME_HEADER_CRC_LEN; /**< == 8 (bits) */ /** FLAC frame footer structure. (c.f. format specification) */ typedef struct { FLAC__uint16 crc; /**< CRC-16 (polynomial = x^16 + x^15 + x^2 + x^0, initialized with * 0) of the bytes before the crc, back to and including the frame header * sync code. */ } FLAC__FrameFooter; extern FLAC_API const unsigned FLAC__FRAME_FOOTER_CRC_LEN; /**< == 16 (bits) */ /** FLAC frame structure. (c.f. format specification) */ typedef struct { FLAC__FrameHeader header; FLAC__Subframe subframes[FLAC__MAX_CHANNELS]; FLAC__FrameFooter footer; } FLAC__Frame; /*****************************************************************************/ /***************************************************************************** * * Meta-data structures * *****************************************************************************/ /** An enumeration of the available metadata block types. */ typedef enum { FLAC__METADATA_TYPE_STREAMINFO = 0, /**< STREAMINFO block */ FLAC__METADATA_TYPE_PADDING = 1, /**< PADDING block */ FLAC__METADATA_TYPE_APPLICATION = 2, /**< APPLICATION block */ FLAC__METADATA_TYPE_SEEKTABLE = 3, /**< SEEKTABLE block */ FLAC__METADATA_TYPE_VORBIS_COMMENT = 4, /**< VORBISCOMMENT block (a.k.a. FLAC tags) */ FLAC__METADATA_TYPE_CUESHEET = 5, /**< CUESHEET block */ FLAC__METADATA_TYPE_PICTURE = 6, /**< PICTURE block */ FLAC__METADATA_TYPE_UNDEFINED = 7 /**< marker to denote beginning of undefined type range; this number will increase as new metadata types are added */ } FLAC__MetadataType; /** Maps a FLAC__MetadataType to a C string. * * Using a FLAC__MetadataType as the index to this array will * give the string equivalent. The contents should not be modified. */ extern FLAC_API const char * const FLAC__MetadataTypeString[]; /** FLAC STREAMINFO structure. (c.f. format specification) */ typedef struct { unsigned min_blocksize, max_blocksize; unsigned min_framesize, max_framesize; unsigned sample_rate; unsigned channels; unsigned bits_per_sample; FLAC__uint64 total_samples; FLAC__byte md5sum[16]; } FLAC__StreamMetadata_StreamInfo; extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_MIN_BLOCK_SIZE_LEN; /**< == 16 (bits) */ extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_MAX_BLOCK_SIZE_LEN; /**< == 16 (bits) */ extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_MIN_FRAME_SIZE_LEN; /**< == 24 (bits) */ extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_MAX_FRAME_SIZE_LEN; /**< == 24 (bits) */ extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_SAMPLE_RATE_LEN; /**< == 20 (bits) */ extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_CHANNELS_LEN; /**< == 3 (bits) */ extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_BITS_PER_SAMPLE_LEN; /**< == 5 (bits) */ extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_TOTAL_SAMPLES_LEN; /**< == 36 (bits) */ extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_MD5SUM_LEN; /**< == 128 (bits) */ /** The total stream length of the STREAMINFO block in bytes. */ #define FLAC__STREAM_METADATA_STREAMINFO_LENGTH (34u) /** FLAC PADDING structure. (c.f. format specification) */ typedef struct { int dummy; /**< Conceptually this is an empty struct since we don't store the * padding bytes. Empty structs are not allowed by some C compilers, * hence the dummy. */ } FLAC__StreamMetadata_Padding; /** FLAC APPLICATION structure. (c.f. format specification) */ typedef struct { FLAC__byte id[4]; FLAC__byte *data; } FLAC__StreamMetadata_Application; extern FLAC_API const unsigned FLAC__STREAM_METADATA_APPLICATION_ID_LEN; /**< == 32 (bits) */ /** SeekPoint structure used in SEEKTABLE blocks. (c.f. format specification) */ typedef struct { FLAC__uint64 sample_number; /**< The sample number of the target frame. */ FLAC__uint64 stream_offset; /**< The offset, in bytes, of the target frame with respect to * beginning of the first frame. */ unsigned frame_samples; /**< The number of samples in the target frame. */ } FLAC__StreamMetadata_SeekPoint; extern FLAC_API const unsigned FLAC__STREAM_METADATA_SEEKPOINT_SAMPLE_NUMBER_LEN; /**< == 64 (bits) */ extern FLAC_API const unsigned FLAC__STREAM_METADATA_SEEKPOINT_STREAM_OFFSET_LEN; /**< == 64 (bits) */ extern FLAC_API const unsigned FLAC__STREAM_METADATA_SEEKPOINT_FRAME_SAMPLES_LEN; /**< == 16 (bits) */ /** The total stream length of a seek point in bytes. */ #define FLAC__STREAM_METADATA_SEEKPOINT_LENGTH (18u) /** The value used in the \a sample_number field of * FLAC__StreamMetadataSeekPoint used to indicate a placeholder * point (== 0xffffffffffffffff). */ extern FLAC_API const FLAC__uint64 FLAC__STREAM_METADATA_SEEKPOINT_PLACEHOLDER; /** FLAC SEEKTABLE structure. (c.f. format specification) * * \note From the format specification: * - The seek points must be sorted by ascending sample number. * - Each seek point's sample number must be the first sample of the * target frame. * - Each seek point's sample number must be unique within the table. * - Existence of a SEEKTABLE block implies a correct setting of * total_samples in the stream_info block. * - Behavior is undefined when more than one SEEKTABLE block is * present in a stream. */ typedef struct { unsigned num_points; FLAC__StreamMetadata_SeekPoint *points; } FLAC__StreamMetadata_SeekTable; /** Vorbis comment entry structure used in VORBIS_COMMENT blocks. (c.f. format specification) * * For convenience, the APIs maintain a trailing NUL character at the end of * \a entry which is not counted toward \a length, i.e. * \code strlen(entry) == length \endcode */ typedef struct { FLAC__uint32 length; FLAC__byte *entry; } FLAC__StreamMetadata_VorbisComment_Entry; extern FLAC_API const unsigned FLAC__STREAM_METADATA_VORBIS_COMMENT_ENTRY_LENGTH_LEN; /**< == 32 (bits) */ /** FLAC VORBIS_COMMENT structure. (c.f. format specification) */ typedef struct { FLAC__StreamMetadata_VorbisComment_Entry vendor_string; FLAC__uint32 num_comments; FLAC__StreamMetadata_VorbisComment_Entry *comments; } FLAC__StreamMetadata_VorbisComment; extern FLAC_API const unsigned FLAC__STREAM_METADATA_VORBIS_COMMENT_NUM_COMMENTS_LEN; /**< == 32 (bits) */ /** FLAC CUESHEET track index structure. (See the * format specification for * the full description of each field.) */ typedef struct { FLAC__uint64 offset; /**< Offset in samples, relative to the track offset, of the index * point. */ FLAC__byte number; /**< The index point number. */ } FLAC__StreamMetadata_CueSheet_Index; extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_INDEX_OFFSET_LEN; /**< == 64 (bits) */ extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_INDEX_NUMBER_LEN; /**< == 8 (bits) */ extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_INDEX_RESERVED_LEN; /**< == 3*8 (bits) */ /** FLAC CUESHEET track structure. (See the * format specification for * the full description of each field.) */ typedef struct { FLAC__uint64 offset; /**< Track offset in samples, relative to the beginning of the FLAC audio stream. */ FLAC__byte number; /**< The track number. */ char isrc[13]; /**< Track ISRC. This is a 12-digit alphanumeric code plus a trailing \c NUL byte */ unsigned type:1; /**< The track type: 0 for audio, 1 for non-audio. */ unsigned pre_emphasis:1; /**< The pre-emphasis flag: 0 for no pre-emphasis, 1 for pre-emphasis. */ FLAC__byte num_indices; /**< The number of track index points. */ FLAC__StreamMetadata_CueSheet_Index *indices; /**< NULL if num_indices == 0, else pointer to array of index points. */ } FLAC__StreamMetadata_CueSheet_Track; extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_OFFSET_LEN; /**< == 64 (bits) */ extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_NUMBER_LEN; /**< == 8 (bits) */ extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_ISRC_LEN; /**< == 12*8 (bits) */ extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_TYPE_LEN; /**< == 1 (bit) */ extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_PRE_EMPHASIS_LEN; /**< == 1 (bit) */ extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_RESERVED_LEN; /**< == 6+13*8 (bits) */ extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_NUM_INDICES_LEN; /**< == 8 (bits) */ /** FLAC CUESHEET structure. (See the * format specification * for the full description of each field.) */ typedef struct { char media_catalog_number[129]; /**< Media catalog number, in ASCII printable characters 0x20-0x7e. In * general, the media catalog number may be 0 to 128 bytes long; any * unused characters should be right-padded with NUL characters. */ FLAC__uint64 lead_in; /**< The number of lead-in samples. */ FLAC__bool is_cd; /**< \c true if CUESHEET corresponds to a Compact Disc, else \c false. */ unsigned num_tracks; /**< The number of tracks. */ FLAC__StreamMetadata_CueSheet_Track *tracks; /**< NULL if num_tracks == 0, else pointer to array of tracks. */ } FLAC__StreamMetadata_CueSheet; extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_MEDIA_CATALOG_NUMBER_LEN; /**< == 128*8 (bits) */ extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_LEAD_IN_LEN; /**< == 64 (bits) */ extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_IS_CD_LEN; /**< == 1 (bit) */ extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_RESERVED_LEN; /**< == 7+258*8 (bits) */ extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_NUM_TRACKS_LEN; /**< == 8 (bits) */ /** An enumeration of the PICTURE types (see FLAC__StreamMetadataPicture and id3 v2.4 APIC tag). */ typedef enum { FLAC__STREAM_METADATA_PICTURE_TYPE_OTHER = 0, /**< Other */ FLAC__STREAM_METADATA_PICTURE_TYPE_FILE_ICON_STANDARD = 1, /**< 32x32 pixels 'file icon' (PNG only) */ FLAC__STREAM_METADATA_PICTURE_TYPE_FILE_ICON = 2, /**< Other file icon */ FLAC__STREAM_METADATA_PICTURE_TYPE_FRONT_COVER = 3, /**< Cover (front) */ FLAC__STREAM_METADATA_PICTURE_TYPE_BACK_COVER = 4, /**< Cover (back) */ FLAC__STREAM_METADATA_PICTURE_TYPE_LEAFLET_PAGE = 5, /**< Leaflet page */ FLAC__STREAM_METADATA_PICTURE_TYPE_MEDIA = 6, /**< Media (e.g. label side of CD) */ FLAC__STREAM_METADATA_PICTURE_TYPE_LEAD_ARTIST = 7, /**< Lead artist/lead performer/soloist */ FLAC__STREAM_METADATA_PICTURE_TYPE_ARTIST = 8, /**< Artist/performer */ FLAC__STREAM_METADATA_PICTURE_TYPE_CONDUCTOR = 9, /**< Conductor */ FLAC__STREAM_METADATA_PICTURE_TYPE_BAND = 10, /**< Band/Orchestra */ FLAC__STREAM_METADATA_PICTURE_TYPE_COMPOSER = 11, /**< Composer */ FLAC__STREAM_METADATA_PICTURE_TYPE_LYRICIST = 12, /**< Lyricist/text writer */ FLAC__STREAM_METADATA_PICTURE_TYPE_RECORDING_LOCATION = 13, /**< Recording Location */ FLAC__STREAM_METADATA_PICTURE_TYPE_DURING_RECORDING = 14, /**< During recording */ FLAC__STREAM_METADATA_PICTURE_TYPE_DURING_PERFORMANCE = 15, /**< During performance */ FLAC__STREAM_METADATA_PICTURE_TYPE_VIDEO_SCREEN_CAPTURE = 16, /**< Movie/video screen capture */ FLAC__STREAM_METADATA_PICTURE_TYPE_FISH = 17, /**< A bright coloured fish */ FLAC__STREAM_METADATA_PICTURE_TYPE_ILLUSTRATION = 18, /**< Illustration */ FLAC__STREAM_METADATA_PICTURE_TYPE_BAND_LOGOTYPE = 19, /**< Band/artist logotype */ FLAC__STREAM_METADATA_PICTURE_TYPE_PUBLISHER_LOGOTYPE = 20, /**< Publisher/Studio logotype */ FLAC__STREAM_METADATA_PICTURE_TYPE_UNDEFINED } FLAC__StreamMetadata_Picture_Type; /** Maps a FLAC__StreamMetadata_Picture_Type to a C string. * * Using a FLAC__StreamMetadata_Picture_Type as the index to this array * will give the string equivalent. The contents should not be * modified. */ extern FLAC_API const char * const FLAC__StreamMetadata_Picture_TypeString[]; /** FLAC PICTURE structure. (See the * format specification * for the full description of each field.) */ typedef struct { FLAC__StreamMetadata_Picture_Type type; /**< The kind of picture stored. */ char *mime_type; /**< Picture data's MIME type, in ASCII printable characters * 0x20-0x7e, NUL terminated. For best compatibility with players, * use picture data of MIME type \c image/jpeg or \c image/png. A * MIME type of '-->' is also allowed, in which case the picture * data should be a complete URL. In file storage, the MIME type is * stored as a 32-bit length followed by the ASCII string with no NUL * terminator, but is converted to a plain C string in this structure * for convenience. */ FLAC__byte *description; /**< Picture's description in UTF-8, NUL terminated. In file storage, * the description is stored as a 32-bit length followed by the UTF-8 * string with no NUL terminator, but is converted to a plain C string * in this structure for convenience. */ FLAC__uint32 width; /**< Picture's width in pixels. */ FLAC__uint32 height; /**< Picture's height in pixels. */ FLAC__uint32 depth; /**< Picture's color depth in bits-per-pixel. */ FLAC__uint32 colors; /**< For indexed palettes (like GIF), picture's number of colors (the * number of palette entries), or \c 0 for non-indexed (i.e. 2^depth). */ FLAC__uint32 data_length; /**< Length of binary picture data in bytes. */ FLAC__byte *data; /**< Binary picture data. */ } FLAC__StreamMetadata_Picture; extern FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_TYPE_LEN; /**< == 32 (bits) */ extern FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_MIME_TYPE_LENGTH_LEN; /**< == 32 (bits) */ extern FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_DESCRIPTION_LENGTH_LEN; /**< == 32 (bits) */ extern FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_WIDTH_LEN; /**< == 32 (bits) */ extern FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_HEIGHT_LEN; /**< == 32 (bits) */ extern FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_DEPTH_LEN; /**< == 32 (bits) */ extern FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_COLORS_LEN; /**< == 32 (bits) */ extern FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_DATA_LENGTH_LEN; /**< == 32 (bits) */ /** Structure that is used when a metadata block of unknown type is loaded. * The contents are opaque. The structure is used only internally to * correctly handle unknown metadata. */ typedef struct { FLAC__byte *data; } FLAC__StreamMetadata_Unknown; /** FLAC metadata block structure. (c.f. format specification) */ typedef struct { FLAC__MetadataType type; /**< The type of the metadata block; used determine which member of the * \a data union to dereference. If type >= FLAC__METADATA_TYPE_UNDEFINED * then \a data.unknown must be used. */ FLAC__bool is_last; /**< \c true if this metadata block is the last, else \a false */ unsigned length; /**< Length, in bytes, of the block data as it appears in the stream. */ union { FLAC__StreamMetadata_StreamInfo stream_info; FLAC__StreamMetadata_Padding padding; FLAC__StreamMetadata_Application application; FLAC__StreamMetadata_SeekTable seek_table; FLAC__StreamMetadata_VorbisComment vorbis_comment; FLAC__StreamMetadata_CueSheet cue_sheet; FLAC__StreamMetadata_Picture picture; FLAC__StreamMetadata_Unknown unknown; } data; /**< Polymorphic block data; use the \a type value to determine which * to use. */ } FLAC__StreamMetadata; extern FLAC_API const unsigned FLAC__STREAM_METADATA_IS_LAST_LEN; /**< == 1 (bit) */ extern FLAC_API const unsigned FLAC__STREAM_METADATA_TYPE_LEN; /**< == 7 (bits) */ extern FLAC_API const unsigned FLAC__STREAM_METADATA_LENGTH_LEN; /**< == 24 (bits) */ /** The total stream length of a metadata block header in bytes. */ #define FLAC__STREAM_METADATA_HEADER_LENGTH (4u) /*****************************************************************************/ /***************************************************************************** * * Utility functions * *****************************************************************************/ /** Tests that a sample rate is valid for FLAC. * * \param sample_rate The sample rate to test for compliance. * \retval FLAC__bool * \c true if the given sample rate conforms to the specification, else * \c false. */ FLAC_API FLAC__bool FLAC__format_sample_rate_is_valid(unsigned sample_rate); /** Tests that a sample rate is valid for the FLAC subset. The subset rules * for valid sample rates are slightly more complex since the rate has to * be expressible completely in the frame header. * * \param sample_rate The sample rate to test for compliance. * \retval FLAC__bool * \c true if the given sample rate conforms to the specification for the * subset, else \c false. */ FLAC_API FLAC__bool FLAC__format_sample_rate_is_subset(unsigned sample_rate); /** Check a Vorbis comment entry name to see if it conforms to the Vorbis * comment specification. * * Vorbis comment names must be composed only of characters from * [0x20-0x3C,0x3E-0x7D]. * * \param name A NUL-terminated string to be checked. * \assert * \code name != NULL \endcode * \retval FLAC__bool * \c false if entry name is illegal, else \c true. */ FLAC_API FLAC__bool FLAC__format_vorbiscomment_entry_name_is_legal(const char *name); /** Check a Vorbis comment entry value to see if it conforms to the Vorbis * comment specification. * * Vorbis comment values must be valid UTF-8 sequences. * * \param value A string to be checked. * \param length A the length of \a value in bytes. May be * \c (unsigned)(-1) to indicate that \a value is a plain * UTF-8 NUL-terminated string. * \assert * \code value != NULL \endcode * \retval FLAC__bool * \c false if entry name is illegal, else \c true. */ FLAC_API FLAC__bool FLAC__format_vorbiscomment_entry_value_is_legal(const FLAC__byte *value, unsigned length); /** Check a Vorbis comment entry to see if it conforms to the Vorbis * comment specification. * * Vorbis comment entries must be of the form 'name=value', and 'name' and * 'value' must be legal according to * FLAC__format_vorbiscomment_entry_name_is_legal() and * FLAC__format_vorbiscomment_entry_value_is_legal() respectively. * * \param entry An entry to be checked. * \param length The length of \a entry in bytes. * \assert * \code value != NULL \endcode * \retval FLAC__bool * \c false if entry name is illegal, else \c true. */ FLAC_API FLAC__bool FLAC__format_vorbiscomment_entry_is_legal(const FLAC__byte *entry, unsigned length); /** Check a seek table to see if it conforms to the FLAC specification. * See the format specification for limits on the contents of the * seek table. * * \param seek_table A pointer to a seek table to be checked. * \assert * \code seek_table != NULL \endcode * \retval FLAC__bool * \c false if seek table is illegal, else \c true. */ FLAC_API FLAC__bool FLAC__format_seektable_is_legal(const FLAC__StreamMetadata_SeekTable *seek_table); /** Sort a seek table's seek points according to the format specification. * This includes a "unique-ification" step to remove duplicates, i.e. * seek points with identical \a sample_number values. Duplicate seek * points are converted into placeholder points and sorted to the end of * the table. * * \param seek_table A pointer to a seek table to be sorted. * \assert * \code seek_table != NULL \endcode * \retval unsigned * The number of duplicate seek points converted into placeholders. */ FLAC_API unsigned FLAC__format_seektable_sort(FLAC__StreamMetadata_SeekTable *seek_table); /** Check a cue sheet to see if it conforms to the FLAC specification. * See the format specification for limits on the contents of the * cue sheet. * * \param cue_sheet A pointer to an existing cue sheet to be checked. * \param check_cd_da_subset If \c true, check CUESHEET against more * stringent requirements for a CD-DA (audio) disc. * \param violation Address of a pointer to a string. If there is a * violation, a pointer to a string explanation of the * violation will be returned here. \a violation may be * \c NULL if you don't need the returned string. Do not * free the returned string; it will always point to static * data. * \assert * \code cue_sheet != NULL \endcode * \retval FLAC__bool * \c false if cue sheet is illegal, else \c true. */ FLAC_API FLAC__bool FLAC__format_cuesheet_is_legal(const FLAC__StreamMetadata_CueSheet *cue_sheet, FLAC__bool check_cd_da_subset, const char **violation); /** Check picture data to see if it conforms to the FLAC specification. * See the format specification for limits on the contents of the * PICTURE block. * * \param picture A pointer to existing picture data to be checked. * \param violation Address of a pointer to a string. If there is a * violation, a pointer to a string explanation of the * violation will be returned here. \a violation may be * \c NULL if you don't need the returned string. Do not * free the returned string; it will always point to static * data. * \assert * \code picture != NULL \endcode * \retval FLAC__bool * \c false if picture data is illegal, else \c true. */ FLAC_API FLAC__bool FLAC__format_picture_is_legal(const FLAC__StreamMetadata_Picture *picture, const char **violation); /* \} */ #ifdef __cplusplus } #endif #endif fs-uae-2.2.3+dfsg/src/od-fs/FLAC/callback.h0000644000175000017500000001605512162366654020274 0ustar glaubitzglaubitz/* libFLAC - Free Lossless Audio Codec library * Copyright (C) 2004,2005,2006,2007 Josh Coalson * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * - Neither the name of the Xiph.org Foundation nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef FLAC__CALLBACK_H #define FLAC__CALLBACK_H #include "ordinals.h" #include /* for size_t */ /** \file include/FLAC/callback.h * * \brief * This module defines the structures for describing I/O callbacks * to the other FLAC interfaces. * * See the detailed documentation for callbacks in the * \link flac_callbacks callbacks \endlink module. */ /** \defgroup flac_callbacks FLAC/callback.h: I/O callback structures * \ingroup flac * * \brief * This module defines the structures for describing I/O callbacks * to the other FLAC interfaces. * * The purpose of the I/O callback functions is to create a common way * for the metadata interfaces to handle I/O. * * Originally the metadata interfaces required filenames as the way of * specifying FLAC files to operate on. This is problematic in some * environments so there is an additional option to specify a set of * callbacks for doing I/O on the FLAC file, instead of the filename. * * In addition to the callbacks, a FLAC__IOHandle type is defined as an * opaque structure for a data source. * * The callback function prototypes are similar (but not identical) to the * stdio functions fread, fwrite, fseek, ftell, feof, and fclose. If you use * stdio streams to implement the callbacks, you can pass fread, fwrite, and * fclose anywhere a FLAC__IOCallback_Read, FLAC__IOCallback_Write, or * FLAC__IOCallback_Close is required, and a FILE* anywhere a FLAC__IOHandle * is required. \warning You generally CANNOT directly use fseek or ftell * for FLAC__IOCallback_Seek or FLAC__IOCallback_Tell since on most systems * these use 32-bit offsets and FLAC requires 64-bit offsets to deal with * large files. You will have to find an equivalent function (e.g. ftello), * or write a wrapper. The same is true for feof() since this is usually * implemented as a macro, not as a function whose address can be taken. * * \{ */ #ifdef __cplusplus extern "C" { #endif /** This is the opaque handle type used by the callbacks. Typically * this is a \c FILE* or address of a file descriptor. */ typedef void* FLAC__IOHandle; /** Signature for the read callback. * The signature and semantics match POSIX fread() implementations * and can generally be used interchangeably. * * \param ptr The address of the read buffer. * \param size The size of the records to be read. * \param nmemb The number of records to be read. * \param handle The handle to the data source. * \retval size_t * The number of records read. */ typedef size_t (*FLAC__IOCallback_Read) (void *ptr, size_t size, size_t nmemb, FLAC__IOHandle handle); /** Signature for the write callback. * The signature and semantics match POSIX fwrite() implementations * and can generally be used interchangeably. * * \param ptr The address of the write buffer. * \param size The size of the records to be written. * \param nmemb The number of records to be written. * \param handle The handle to the data source. * \retval size_t * The number of records written. */ typedef size_t (*FLAC__IOCallback_Write) (const void *ptr, size_t size, size_t nmemb, FLAC__IOHandle handle); /** Signature for the seek callback. * The signature and semantics mostly match POSIX fseek() WITH ONE IMPORTANT * EXCEPTION: the offset is a 64-bit type whereas fseek() is generally 'long' * and 32-bits wide. * * \param handle The handle to the data source. * \param offset The new position, relative to \a whence * \param whence \c SEEK_SET, \c SEEK_CUR, or \c SEEK_END * \retval int * \c 0 on success, \c -1 on error. */ typedef int (*FLAC__IOCallback_Seek) (FLAC__IOHandle handle, FLAC__int64 offset, int whence); /** Signature for the tell callback. * The signature and semantics mostly match POSIX ftell() WITH ONE IMPORTANT * EXCEPTION: the offset is a 64-bit type whereas ftell() is generally 'long' * and 32-bits wide. * * \param handle The handle to the data source. * \retval FLAC__int64 * The current position on success, \c -1 on error. */ typedef FLAC__int64 (*FLAC__IOCallback_Tell) (FLAC__IOHandle handle); /** Signature for the EOF callback. * The signature and semantics mostly match POSIX feof() but WATCHOUT: * on many systems, feof() is a macro, so in this case a wrapper function * must be provided instead. * * \param handle The handle to the data source. * \retval int * \c 0 if not at end of file, nonzero if at end of file. */ typedef int (*FLAC__IOCallback_Eof) (FLAC__IOHandle handle); /** Signature for the close callback. * The signature and semantics match POSIX fclose() implementations * and can generally be used interchangeably. * * \param handle The handle to the data source. * \retval int * \c 0 on success, \c EOF on error. */ typedef int (*FLAC__IOCallback_Close) (FLAC__IOHandle handle); /** A structure for holding a set of callbacks. * Each FLAC interface that requires a FLAC__IOCallbacks structure will * describe which of the callbacks are required. The ones that are not * required may be set to NULL. * * If the seek requirement for an interface is optional, you can signify that * a data sorce is not seekable by setting the \a seek field to \c NULL. */ typedef struct { FLAC__IOCallback_Read read; FLAC__IOCallback_Write write; FLAC__IOCallback_Seek seek; FLAC__IOCallback_Tell tell; FLAC__IOCallback_Eof eof; FLAC__IOCallback_Close close; } FLAC__IOCallbacks; /* \} */ #ifdef __cplusplus } #endif #endif fs-uae-2.2.3+dfsg/src/od-fs/FLAC/stream_encoder.h0000644000175000017500000023614012162366654021531 0ustar glaubitzglaubitz/* libFLAC - Free Lossless Audio Codec library * Copyright (C) 2000,2001,2002,2003,2004,2005,2006,2007 Josh Coalson * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * - Neither the name of the Xiph.org Foundation nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef FLAC__STREAM_ENCODER_H #define FLAC__STREAM_ENCODER_H #include /* for FILE */ #include "export.h" #include "format.h" #include "stream_decoder.h" #ifdef __cplusplus extern "C" { #endif /** \file include/FLAC/stream_encoder.h * * \brief * This module contains the functions which implement the stream * encoder. * * See the detailed documentation in the * \link flac_stream_encoder stream encoder \endlink module. */ /** \defgroup flac_encoder FLAC/ \*_encoder.h: encoder interfaces * \ingroup flac * * \brief * This module describes the encoder layers provided by libFLAC. * * The stream encoder can be used to encode complete streams either to the * client via callbacks, or directly to a file, depending on how it is * initialized. When encoding via callbacks, the client provides a write * callback which will be called whenever FLAC data is ready to be written. * If the client also supplies a seek callback, the encoder will also * automatically handle the writing back of metadata discovered while * encoding, like stream info, seek points offsets, etc. When encoding to * a file, the client needs only supply a filename or open \c FILE* and an * optional progress callback for periodic notification of progress; the * write and seek callbacks are supplied internally. For more info see the * \link flac_stream_encoder stream encoder \endlink module. */ /** \defgroup flac_stream_encoder FLAC/stream_encoder.h: stream encoder interface * \ingroup flac_encoder * * \brief * This module contains the functions which implement the stream * encoder. * * The stream encoder can encode to native FLAC, and optionally Ogg FLAC * (check FLAC_API_SUPPORTS_OGG_FLAC) streams and files. * * The basic usage of this encoder is as follows: * - The program creates an instance of an encoder using * FLAC__stream_encoder_new(). * - The program overrides the default settings using * FLAC__stream_encoder_set_*() functions. At a minimum, the following * functions should be called: * - FLAC__stream_encoder_set_channels() * - FLAC__stream_encoder_set_bits_per_sample() * - FLAC__stream_encoder_set_sample_rate() * - FLAC__stream_encoder_set_ogg_serial_number() (if encoding to Ogg FLAC) * - FLAC__stream_encoder_set_total_samples_estimate() (if known) * - If the application wants to control the compression level or set its own * metadata, then the following should also be called: * - FLAC__stream_encoder_set_compression_level() * - FLAC__stream_encoder_set_verify() * - FLAC__stream_encoder_set_metadata() * - The rest of the set functions should only be called if the client needs * exact control over how the audio is compressed; thorough understanding * of the FLAC format is necessary to achieve good results. * - The program initializes the instance to validate the settings and * prepare for encoding using * - FLAC__stream_encoder_init_stream() or FLAC__stream_encoder_init_FILE() * or FLAC__stream_encoder_init_file() for native FLAC * - FLAC__stream_encoder_init_ogg_stream() or FLAC__stream_encoder_init_ogg_FILE() * or FLAC__stream_encoder_init_ogg_file() for Ogg FLAC * - The program calls FLAC__stream_encoder_process() or * FLAC__stream_encoder_process_interleaved() to encode data, which * subsequently calls the callbacks when there is encoder data ready * to be written. * - The program finishes the encoding with FLAC__stream_encoder_finish(), * which causes the encoder to encode any data still in its input pipe, * update the metadata with the final encoding statistics if output * seeking is possible, and finally reset the encoder to the * uninitialized state. * - The instance may be used again or deleted with * FLAC__stream_encoder_delete(). * * In more detail, the stream encoder functions similarly to the * \link flac_stream_decoder stream decoder \endlink, but has fewer * callbacks and more options. Typically the client will create a new * instance by calling FLAC__stream_encoder_new(), then set the necessary * parameters with FLAC__stream_encoder_set_*(), and initialize it by * calling one of the FLAC__stream_encoder_init_*() functions. * * Unlike the decoders, the stream encoder has many options that can * affect the speed and compression ratio. When setting these parameters * you should have some basic knowledge of the format (see the * user-level documentation * or the formal description). The * FLAC__stream_encoder_set_*() functions themselves do not validate the * values as many are interdependent. The FLAC__stream_encoder_init_*() * functions will do this, so make sure to pay attention to the state * returned by FLAC__stream_encoder_init_*() to make sure that it is * FLAC__STREAM_ENCODER_INIT_STATUS_OK. Any parameters that are not set * before FLAC__stream_encoder_init_*() will take on the defaults from * the constructor. * * There are three initialization functions for native FLAC, one for * setting up the encoder to encode FLAC data to the client via * callbacks, and two for encoding directly to a file. * * For encoding via callbacks, use FLAC__stream_encoder_init_stream(). * You must also supply a write callback which will be called anytime * there is raw encoded data to write. If the client can seek the output * it is best to also supply seek and tell callbacks, as this allows the * encoder to go back after encoding is finished to write back * information that was collected while encoding, like seek point offsets, * frame sizes, etc. * * For encoding directly to a file, use FLAC__stream_encoder_init_FILE() * or FLAC__stream_encoder_init_file(). Then you must only supply a * filename or open \c FILE*; the encoder will handle all the callbacks * internally. You may also supply a progress callback for periodic * notification of the encoding progress. * * There are three similarly-named init functions for encoding to Ogg * FLAC streams. Check \c FLAC_API_SUPPORTS_OGG_FLAC to find out if the * library has been built with Ogg support. * * The call to FLAC__stream_encoder_init_*() currently will also immediately * call the write callback several times, once with the \c fLaC signature, * and once for each encoded metadata block. Note that for Ogg FLAC * encoding you will usually get at least twice the number of callbacks than * with native FLAC, one for the Ogg page header and one for the page body. * * After initializing the instance, the client may feed audio data to the * encoder in one of two ways: * * - Channel separate, through FLAC__stream_encoder_process() - The client * will pass an array of pointers to buffers, one for each channel, to * the encoder, each of the same length. The samples need not be * block-aligned, but each channel should have the same number of samples. * - Channel interleaved, through * FLAC__stream_encoder_process_interleaved() - The client will pass a single * pointer to data that is channel-interleaved (i.e. channel0_sample0, * channel1_sample0, ... , channelN_sample0, channel0_sample1, ...). * Again, the samples need not be block-aligned but they must be * sample-aligned, i.e. the first value should be channel0_sample0 and * the last value channelN_sampleM. * * Note that for either process call, each sample in the buffers should be a * signed integer, right-justified to the resolution set by * FLAC__stream_encoder_set_bits_per_sample(). For example, if the resolution * is 16 bits per sample, the samples should all be in the range [-32768,32767]. * * When the client is finished encoding data, it calls * FLAC__stream_encoder_finish(), which causes the encoder to encode any * data still in its input pipe, and call the metadata callback with the * final encoding statistics. Then the instance may be deleted with * FLAC__stream_encoder_delete() or initialized again to encode another * stream. * * For programs that write their own metadata, but that do not know the * actual metadata until after encoding, it is advantageous to instruct * the encoder to write a PADDING block of the correct size, so that * instead of rewriting the whole stream after encoding, the program can * just overwrite the PADDING block. If only the maximum size of the * metadata is known, the program can write a slightly larger padding * block, then split it after encoding. * * Make sure you understand how lengths are calculated. All FLAC metadata * blocks have a 4 byte header which contains the type and length. This * length does not include the 4 bytes of the header. See the format page * for the specification of metadata blocks and their lengths. * * \note * If you are writing the FLAC data to a file via callbacks, make sure it * is open for update (e.g. mode "w+" for stdio streams). This is because * after the first encoding pass, the encoder will try to seek back to the * beginning of the stream, to the STREAMINFO block, to write some data * there. (If using FLAC__stream_encoder_init*_file() or * FLAC__stream_encoder_init*_FILE(), the file is managed internally.) * * \note * The "set" functions may only be called when the encoder is in the * state FLAC__STREAM_ENCODER_UNINITIALIZED, i.e. after * FLAC__stream_encoder_new() or FLAC__stream_encoder_finish(), but * before FLAC__stream_encoder_init_*(). If this is the case they will * return \c true, otherwise \c false. * * \note * FLAC__stream_encoder_finish() resets all settings to the constructor * defaults. * * \{ */ /** State values for a FLAC__StreamEncoder. * * The encoder's state can be obtained by calling FLAC__stream_encoder_get_state(). * * If the encoder gets into any other state besides \c FLAC__STREAM_ENCODER_OK * or \c FLAC__STREAM_ENCODER_UNINITIALIZED, it becomes invalid for encoding and * must be deleted with FLAC__stream_encoder_delete(). */ typedef enum { FLAC__STREAM_ENCODER_OK = 0, /**< The encoder is in the normal OK state and samples can be processed. */ FLAC__STREAM_ENCODER_UNINITIALIZED, /**< The encoder is in the uninitialized state; one of the * FLAC__stream_encoder_init_*() functions must be called before samples * can be processed. */ FLAC__STREAM_ENCODER_OGG_ERROR, /**< An error occurred in the underlying Ogg layer. */ FLAC__STREAM_ENCODER_VERIFY_DECODER_ERROR, /**< An error occurred in the underlying verify stream decoder; * check FLAC__stream_encoder_get_verify_decoder_state(). */ FLAC__STREAM_ENCODER_VERIFY_MISMATCH_IN_AUDIO_DATA, /**< The verify decoder detected a mismatch between the original * audio signal and the decoded audio signal. */ FLAC__STREAM_ENCODER_CLIENT_ERROR, /**< One of the callbacks returned a fatal error. */ FLAC__STREAM_ENCODER_IO_ERROR, /**< An I/O error occurred while opening/reading/writing a file. * Check \c errno. */ FLAC__STREAM_ENCODER_FRAMING_ERROR, /**< An error occurred while writing the stream; usually, the * write_callback returned an error. */ FLAC__STREAM_ENCODER_MEMORY_ALLOCATION_ERROR /**< Memory allocation failed. */ } FLAC__StreamEncoderState; /** Maps a FLAC__StreamEncoderState to a C string. * * Using a FLAC__StreamEncoderState as the index to this array * will give the string equivalent. The contents should not be modified. */ extern FLAC_API const char * const FLAC__StreamEncoderStateString[]; /** Possible return values for the FLAC__stream_encoder_init_*() functions. */ typedef enum { FLAC__STREAM_ENCODER_INIT_STATUS_OK = 0, /**< Initialization was successful. */ FLAC__STREAM_ENCODER_INIT_STATUS_ENCODER_ERROR, /**< General failure to set up encoder; call FLAC__stream_encoder_get_state() for cause. */ FLAC__STREAM_ENCODER_INIT_STATUS_UNSUPPORTED_CONTAINER, /**< The library was not compiled with support for the given container * format. */ FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_CALLBACKS, /**< A required callback was not supplied. */ FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_NUMBER_OF_CHANNELS, /**< The encoder has an invalid setting for number of channels. */ FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_BITS_PER_SAMPLE, /**< The encoder has an invalid setting for bits-per-sample. * FLAC supports 4-32 bps but the reference encoder currently supports * only up to 24 bps. */ FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_SAMPLE_RATE, /**< The encoder has an invalid setting for the input sample rate. */ FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_BLOCK_SIZE, /**< The encoder has an invalid setting for the block size. */ FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_MAX_LPC_ORDER, /**< The encoder has an invalid setting for the maximum LPC order. */ FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_QLP_COEFF_PRECISION, /**< The encoder has an invalid setting for the precision of the quantized linear predictor coefficients. */ FLAC__STREAM_ENCODER_INIT_STATUS_BLOCK_SIZE_TOO_SMALL_FOR_LPC_ORDER, /**< The specified block size is less than the maximum LPC order. */ FLAC__STREAM_ENCODER_INIT_STATUS_NOT_STREAMABLE, /**< The encoder is bound to the Subset but other settings violate it. */ FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_METADATA, /**< The metadata input to the encoder is invalid, in one of the following ways: * - FLAC__stream_encoder_set_metadata() was called with a null pointer but a block count > 0 * - One of the metadata blocks contains an undefined type * - It contains an illegal CUESHEET as checked by FLAC__format_cuesheet_is_legal() * - It contains an illegal SEEKTABLE as checked by FLAC__format_seektable_is_legal() * - It contains more than one SEEKTABLE block or more than one VORBIS_COMMENT block */ FLAC__STREAM_ENCODER_INIT_STATUS_ALREADY_INITIALIZED /**< FLAC__stream_encoder_init_*() was called when the encoder was * already initialized, usually because * FLAC__stream_encoder_finish() was not called. */ } FLAC__StreamEncoderInitStatus; /** Maps a FLAC__StreamEncoderInitStatus to a C string. * * Using a FLAC__StreamEncoderInitStatus as the index to this array * will give the string equivalent. The contents should not be modified. */ extern FLAC_API const char * const FLAC__StreamEncoderInitStatusString[]; /** Return values for the FLAC__StreamEncoder read callback. */ typedef enum { FLAC__STREAM_ENCODER_READ_STATUS_CONTINUE, /**< The read was OK and decoding can continue. */ FLAC__STREAM_ENCODER_READ_STATUS_END_OF_STREAM, /**< The read was attempted at the end of the stream. */ FLAC__STREAM_ENCODER_READ_STATUS_ABORT, /**< An unrecoverable error occurred. */ FLAC__STREAM_ENCODER_READ_STATUS_UNSUPPORTED /**< Client does not support reading back from the output. */ } FLAC__StreamEncoderReadStatus; /** Maps a FLAC__StreamEncoderReadStatus to a C string. * * Using a FLAC__StreamEncoderReadStatus as the index to this array * will give the string equivalent. The contents should not be modified. */ extern FLAC_API const char * const FLAC__StreamEncoderReadStatusString[]; /** Return values for the FLAC__StreamEncoder write callback. */ typedef enum { FLAC__STREAM_ENCODER_WRITE_STATUS_OK = 0, /**< The write was OK and encoding can continue. */ FLAC__STREAM_ENCODER_WRITE_STATUS_FATAL_ERROR /**< An unrecoverable error occurred. The encoder will return from the process call. */ } FLAC__StreamEncoderWriteStatus; /** Maps a FLAC__StreamEncoderWriteStatus to a C string. * * Using a FLAC__StreamEncoderWriteStatus as the index to this array * will give the string equivalent. The contents should not be modified. */ extern FLAC_API const char * const FLAC__StreamEncoderWriteStatusString[]; /** Return values for the FLAC__StreamEncoder seek callback. */ typedef enum { FLAC__STREAM_ENCODER_SEEK_STATUS_OK, /**< The seek was OK and encoding can continue. */ FLAC__STREAM_ENCODER_SEEK_STATUS_ERROR, /**< An unrecoverable error occurred. */ FLAC__STREAM_ENCODER_SEEK_STATUS_UNSUPPORTED /**< Client does not support seeking. */ } FLAC__StreamEncoderSeekStatus; /** Maps a FLAC__StreamEncoderSeekStatus to a C string. * * Using a FLAC__StreamEncoderSeekStatus as the index to this array * will give the string equivalent. The contents should not be modified. */ extern FLAC_API const char * const FLAC__StreamEncoderSeekStatusString[]; /** Return values for the FLAC__StreamEncoder tell callback. */ typedef enum { FLAC__STREAM_ENCODER_TELL_STATUS_OK, /**< The tell was OK and encoding can continue. */ FLAC__STREAM_ENCODER_TELL_STATUS_ERROR, /**< An unrecoverable error occurred. */ FLAC__STREAM_ENCODER_TELL_STATUS_UNSUPPORTED /**< Client does not support seeking. */ } FLAC__StreamEncoderTellStatus; /** Maps a FLAC__StreamEncoderTellStatus to a C string. * * Using a FLAC__StreamEncoderTellStatus as the index to this array * will give the string equivalent. The contents should not be modified. */ extern FLAC_API const char * const FLAC__StreamEncoderTellStatusString[]; /*********************************************************************** * * class FLAC__StreamEncoder * ***********************************************************************/ struct FLAC__StreamEncoderProtected; struct FLAC__StreamEncoderPrivate; /** The opaque structure definition for the stream encoder type. * See the \link flac_stream_encoder stream encoder module \endlink * for a detailed description. */ typedef struct { struct FLAC__StreamEncoderProtected *protected_; /* avoid the C++ keyword 'protected' */ struct FLAC__StreamEncoderPrivate *private_; /* avoid the C++ keyword 'private' */ } FLAC__StreamEncoder; /** Signature for the read callback. * * A function pointer matching this signature must be passed to * FLAC__stream_encoder_init_ogg_stream() if seeking is supported. * The supplied function will be called when the encoder needs to read back * encoded data. This happens during the metadata callback, when the encoder * has to read, modify, and rewrite the metadata (e.g. seekpoints) gathered * while encoding. The address of the buffer to be filled is supplied, along * with the number of bytes the buffer can hold. The callback may choose to * supply less data and modify the byte count but must be careful not to * overflow the buffer. The callback then returns a status code chosen from * FLAC__StreamEncoderReadStatus. * * Here is an example of a read callback for stdio streams: * \code * FLAC__StreamEncoderReadStatus read_cb(const FLAC__StreamEncoder *encoder, FLAC__byte buffer[], size_t *bytes, void *client_data) * { * FILE *file = ((MyClientData*)client_data)->file; * if(*bytes > 0) { * *bytes = fread(buffer, sizeof(FLAC__byte), *bytes, file); * if(ferror(file)) * return FLAC__STREAM_ENCODER_READ_STATUS_ABORT; * else if(*bytes == 0) * return FLAC__STREAM_ENCODER_READ_STATUS_END_OF_STREAM; * else * return FLAC__STREAM_ENCODER_READ_STATUS_CONTINUE; * } * else * return FLAC__STREAM_ENCODER_READ_STATUS_ABORT; * } * \endcode * * \note In general, FLAC__StreamEncoder functions which change the * state should not be called on the \a encoder while in the callback. * * \param encoder The encoder instance calling the callback. * \param buffer A pointer to a location for the callee to store * data to be encoded. * \param bytes A pointer to the size of the buffer. On entry * to the callback, it contains the maximum number * of bytes that may be stored in \a buffer. The * callee must set it to the actual number of bytes * stored (0 in case of error or end-of-stream) before * returning. * \param client_data The callee's client data set through * FLAC__stream_encoder_set_client_data(). * \retval FLAC__StreamEncoderReadStatus * The callee's return status. */ typedef FLAC__StreamEncoderReadStatus (*FLAC__StreamEncoderReadCallback)(const FLAC__StreamEncoder *encoder, FLAC__byte buffer[], size_t *bytes, void *client_data); /** Signature for the write callback. * * A function pointer matching this signature must be passed to * FLAC__stream_encoder_init*_stream(). The supplied function will be called * by the encoder anytime there is raw encoded data ready to write. It may * include metadata mixed with encoded audio frames and the data is not * guaranteed to be aligned on frame or metadata block boundaries. * * The only duty of the callback is to write out the \a bytes worth of data * in \a buffer to the current position in the output stream. The arguments * \a samples and \a current_frame are purely informational. If \a samples * is greater than \c 0, then \a current_frame will hold the current frame * number that is being written; otherwise it indicates that the write * callback is being called to write metadata. * * \note * Unlike when writing to native FLAC, when writing to Ogg FLAC the * write callback will be called twice when writing each audio * frame; once for the page header, and once for the page body. * When writing the page header, the \a samples argument to the * write callback will be \c 0. * * \note In general, FLAC__StreamEncoder functions which change the * state should not be called on the \a encoder while in the callback. * * \param encoder The encoder instance calling the callback. * \param buffer An array of encoded data of length \a bytes. * \param bytes The byte length of \a buffer. * \param samples The number of samples encoded by \a buffer. * \c 0 has a special meaning; see above. * \param current_frame The number of the current frame being encoded. * \param client_data The callee's client data set through * FLAC__stream_encoder_init_*(). * \retval FLAC__StreamEncoderWriteStatus * The callee's return status. */ typedef FLAC__StreamEncoderWriteStatus (*FLAC__StreamEncoderWriteCallback)(const FLAC__StreamEncoder *encoder, const FLAC__byte buffer[], size_t bytes, unsigned samples, unsigned current_frame, void *client_data); /** Signature for the seek callback. * * A function pointer matching this signature may be passed to * FLAC__stream_encoder_init*_stream(). The supplied function will be called * when the encoder needs to seek the output stream. The encoder will pass * the absolute byte offset to seek to, 0 meaning the beginning of the stream. * * Here is an example of a seek callback for stdio streams: * \code * FLAC__StreamEncoderSeekStatus seek_cb(const FLAC__StreamEncoder *encoder, FLAC__uint64 absolute_byte_offset, void *client_data) * { * FILE *file = ((MyClientData*)client_data)->file; * if(file == stdin) * return FLAC__STREAM_ENCODER_SEEK_STATUS_UNSUPPORTED; * else if(fseeko(file, (off_t)absolute_byte_offset, SEEK_SET) < 0) * return FLAC__STREAM_ENCODER_SEEK_STATUS_ERROR; * else * return FLAC__STREAM_ENCODER_SEEK_STATUS_OK; * } * \endcode * * \note In general, FLAC__StreamEncoder functions which change the * state should not be called on the \a encoder while in the callback. * * \param encoder The encoder instance calling the callback. * \param absolute_byte_offset The offset from the beginning of the stream * to seek to. * \param client_data The callee's client data set through * FLAC__stream_encoder_init_*(). * \retval FLAC__StreamEncoderSeekStatus * The callee's return status. */ typedef FLAC__StreamEncoderSeekStatus (*FLAC__StreamEncoderSeekCallback)(const FLAC__StreamEncoder *encoder, FLAC__uint64 absolute_byte_offset, void *client_data); /** Signature for the tell callback. * * A function pointer matching this signature may be passed to * FLAC__stream_encoder_init*_stream(). The supplied function will be called * when the encoder needs to know the current position of the output stream. * * \warning * The callback must return the true current byte offset of the output to * which the encoder is writing. If you are buffering the output, make * sure and take this into account. If you are writing directly to a * FILE* from your write callback, ftell() is sufficient. If you are * writing directly to a file descriptor from your write callback, you * can use lseek(fd, SEEK_CUR, 0). The encoder may later seek back to * these points to rewrite metadata after encoding. * * Here is an example of a tell callback for stdio streams: * \code * FLAC__StreamEncoderTellStatus tell_cb(const FLAC__StreamEncoder *encoder, FLAC__uint64 *absolute_byte_offset, void *client_data) * { * FILE *file = ((MyClientData*)client_data)->file; * off_t pos; * if(file == stdin) * return FLAC__STREAM_ENCODER_TELL_STATUS_UNSUPPORTED; * else if((pos = ftello(file)) < 0) * return FLAC__STREAM_ENCODER_TELL_STATUS_ERROR; * else { * *absolute_byte_offset = (FLAC__uint64)pos; * return FLAC__STREAM_ENCODER_TELL_STATUS_OK; * } * } * \endcode * * \note In general, FLAC__StreamEncoder functions which change the * state should not be called on the \a encoder while in the callback. * * \param encoder The encoder instance calling the callback. * \param absolute_byte_offset The address at which to store the current * position of the output. * \param client_data The callee's client data set through * FLAC__stream_encoder_init_*(). * \retval FLAC__StreamEncoderTellStatus * The callee's return status. */ typedef FLAC__StreamEncoderTellStatus (*FLAC__StreamEncoderTellCallback)(const FLAC__StreamEncoder *encoder, FLAC__uint64 *absolute_byte_offset, void *client_data); /** Signature for the metadata callback. * * A function pointer matching this signature may be passed to * FLAC__stream_encoder_init*_stream(). The supplied function will be called * once at the end of encoding with the populated STREAMINFO structure. This * is so the client can seek back to the beginning of the file and write the * STREAMINFO block with the correct statistics after encoding (like * minimum/maximum frame size and total samples). * * \note In general, FLAC__StreamEncoder functions which change the * state should not be called on the \a encoder while in the callback. * * \param encoder The encoder instance calling the callback. * \param metadata The final populated STREAMINFO block. * \param client_data The callee's client data set through * FLAC__stream_encoder_init_*(). */ typedef void (*FLAC__StreamEncoderMetadataCallback)(const FLAC__StreamEncoder *encoder, const FLAC__StreamMetadata *metadata, void *client_data); /** Signature for the progress callback. * * A function pointer matching this signature may be passed to * FLAC__stream_encoder_init*_file() or FLAC__stream_encoder_init*_FILE(). * The supplied function will be called when the encoder has finished * writing a frame. The \c total_frames_estimate argument to the * callback will be based on the value from * FLAC__stream_encoder_set_total_samples_estimate(). * * \note In general, FLAC__StreamEncoder functions which change the * state should not be called on the \a encoder while in the callback. * * \param encoder The encoder instance calling the callback. * \param bytes_written Bytes written so far. * \param samples_written Samples written so far. * \param frames_written Frames written so far. * \param total_frames_estimate The estimate of the total number of * frames to be written. * \param client_data The callee's client data set through * FLAC__stream_encoder_init_*(). */ typedef void (*FLAC__StreamEncoderProgressCallback)(const FLAC__StreamEncoder *encoder, FLAC__uint64 bytes_written, FLAC__uint64 samples_written, unsigned frames_written, unsigned total_frames_estimate, void *client_data); /*********************************************************************** * * Class constructor/destructor * ***********************************************************************/ /** Create a new stream encoder instance. The instance is created with * default settings; see the individual FLAC__stream_encoder_set_*() * functions for each setting's default. * * \retval FLAC__StreamEncoder* * \c NULL if there was an error allocating memory, else the new instance. */ FLAC_API FLAC__StreamEncoder *FLAC__stream_encoder_new(void); /** Free an encoder instance. Deletes the object pointed to by \a encoder. * * \param encoder A pointer to an existing encoder. * \assert * \code encoder != NULL \endcode */ FLAC_API void FLAC__stream_encoder_delete(FLAC__StreamEncoder *encoder); /*********************************************************************** * * Public class method prototypes * ***********************************************************************/ /** Set the serial number for the FLAC stream to use in the Ogg container. * * \note * This does not need to be set for native FLAC encoding. * * \note * It is recommended to set a serial number explicitly as the default of '0' * may collide with other streams. * * \default \c 0 * \param encoder An encoder instance to set. * \param serial_number See above. * \assert * \code encoder != NULL \endcode * \retval FLAC__bool * \c false if the encoder is already initialized, else \c true. */ FLAC_API FLAC__bool FLAC__stream_encoder_set_ogg_serial_number(FLAC__StreamEncoder *encoder, long serial_number); /** Set the "verify" flag. If \c true, the encoder will verify it's own * encoded output by feeding it through an internal decoder and comparing * the original signal against the decoded signal. If a mismatch occurs, * the process call will return \c false. Note that this will slow the * encoding process by the extra time required for decoding and comparison. * * \default \c false * \param encoder An encoder instance to set. * \param value Flag value (see above). * \assert * \code encoder != NULL \endcode * \retval FLAC__bool * \c false if the encoder is already initialized, else \c true. */ FLAC_API FLAC__bool FLAC__stream_encoder_set_verify(FLAC__StreamEncoder *encoder, FLAC__bool value); /** Set the Subset flag. If \c true, * the encoder will comply with the Subset and will check the * settings during FLAC__stream_encoder_init_*() to see if all settings * comply. If \c false, the settings may take advantage of the full * range that the format allows. * * Make sure you know what it entails before setting this to \c false. * * \default \c true * \param encoder An encoder instance to set. * \param value Flag value (see above). * \assert * \code encoder != NULL \endcode * \retval FLAC__bool * \c false if the encoder is already initialized, else \c true. */ FLAC_API FLAC__bool FLAC__stream_encoder_set_streamable_subset(FLAC__StreamEncoder *encoder, FLAC__bool value); /** Set the number of channels to be encoded. * * \default \c 2 * \param encoder An encoder instance to set. * \param value See above. * \assert * \code encoder != NULL \endcode * \retval FLAC__bool * \c false if the encoder is already initialized, else \c true. */ FLAC_API FLAC__bool FLAC__stream_encoder_set_channels(FLAC__StreamEncoder *encoder, unsigned value); /** Set the sample resolution of the input to be encoded. * * \warning * Do not feed the encoder data that is wider than the value you * set here or you will generate an invalid stream. * * \default \c 16 * \param encoder An encoder instance to set. * \param value See above. * \assert * \code encoder != NULL \endcode * \retval FLAC__bool * \c false if the encoder is already initialized, else \c true. */ FLAC_API FLAC__bool FLAC__stream_encoder_set_bits_per_sample(FLAC__StreamEncoder *encoder, unsigned value); /** Set the sample rate (in Hz) of the input to be encoded. * * \default \c 44100 * \param encoder An encoder instance to set. * \param value See above. * \assert * \code encoder != NULL \endcode * \retval FLAC__bool * \c false if the encoder is already initialized, else \c true. */ FLAC_API FLAC__bool FLAC__stream_encoder_set_sample_rate(FLAC__StreamEncoder *encoder, unsigned value); /** Set the compression level * * The compression level is roughly proportional to the amount of effort * the encoder expends to compress the file. A higher level usually * means more computation but higher compression. The default level is * suitable for most applications. * * Currently the levels range from \c 0 (fastest, least compression) to * \c 8 (slowest, most compression). A value larger than \c 8 will be * treated as \c 8. * * This function automatically calls the following other \c _set_ * functions with appropriate values, so the client does not need to * unless it specifically wants to override them: * - FLAC__stream_encoder_set_do_mid_side_stereo() * - FLAC__stream_encoder_set_loose_mid_side_stereo() * - FLAC__stream_encoder_set_apodization() * - FLAC__stream_encoder_set_max_lpc_order() * - FLAC__stream_encoder_set_qlp_coeff_precision() * - FLAC__stream_encoder_set_do_qlp_coeff_prec_search() * - FLAC__stream_encoder_set_do_escape_coding() * - FLAC__stream_encoder_set_do_exhaustive_model_search() * - FLAC__stream_encoder_set_min_residual_partition_order() * - FLAC__stream_encoder_set_max_residual_partition_order() * - FLAC__stream_encoder_set_rice_parameter_search_dist() * * The actual values set for each level are: * * * * * * * * * * * * *
level * do mid-side stereo * loose mid-side stereo * apodization * max lpc order * qlp coeff precision * qlp coeff prec search * escape coding * exhaustive model search * min residual partition order * max residual partition order * rice parameter search dist *
0 false false tukey(0.5) 0 0 false false false 0 3 0
1 true true tukey(0.5) 0 0 false false false 0 3 0
2 true false tukey(0.5) 0 0 false false false 0 3 0
3 false false tukey(0.5) 6 0 false false false 0 4 0
4 true true tukey(0.5) 8 0 false false false 0 4 0
5 true false tukey(0.5) 8 0 false false false 0 5 0
6 true false tukey(0.5) 8 0 false false false 0 6 0
7 true false tukey(0.5) 8 0 false false true 0 6 0
8 true false tukey(0.5) 12 0 false false true 0 6 0
* * \default \c 5 * \param encoder An encoder instance to set. * \param value See above. * \assert * \code encoder != NULL \endcode * \retval FLAC__bool * \c false if the encoder is already initialized, else \c true. */ FLAC_API FLAC__bool FLAC__stream_encoder_set_compression_level(FLAC__StreamEncoder *encoder, unsigned value); /** Set the blocksize to use while encoding. * * The number of samples to use per frame. Use \c 0 to let the encoder * estimate a blocksize; this is usually best. * * \default \c 0 * \param encoder An encoder instance to set. * \param value See above. * \assert * \code encoder != NULL \endcode * \retval FLAC__bool * \c false if the encoder is already initialized, else \c true. */ FLAC_API FLAC__bool FLAC__stream_encoder_set_blocksize(FLAC__StreamEncoder *encoder, unsigned value); /** Set to \c true to enable mid-side encoding on stereo input. The * number of channels must be 2 for this to have any effect. Set to * \c false to use only independent channel coding. * * \default \c false * \param encoder An encoder instance to set. * \param value Flag value (see above). * \assert * \code encoder != NULL \endcode * \retval FLAC__bool * \c false if the encoder is already initialized, else \c true. */ FLAC_API FLAC__bool FLAC__stream_encoder_set_do_mid_side_stereo(FLAC__StreamEncoder *encoder, FLAC__bool value); /** Set to \c true to enable adaptive switching between mid-side and * left-right encoding on stereo input. Set to \c false to use * exhaustive searching. Setting this to \c true requires * FLAC__stream_encoder_set_do_mid_side_stereo() to also be set to * \c true in order to have any effect. * * \default \c false * \param encoder An encoder instance to set. * \param value Flag value (see above). * \assert * \code encoder != NULL \endcode * \retval FLAC__bool * \c false if the encoder is already initialized, else \c true. */ FLAC_API FLAC__bool FLAC__stream_encoder_set_loose_mid_side_stereo(FLAC__StreamEncoder *encoder, FLAC__bool value); /** Sets the apodization function(s) the encoder will use when windowing * audio data for LPC analysis. * * The \a specification is a plain ASCII string which specifies exactly * which functions to use. There may be more than one (up to 32), * separated by \c ';' characters. Some functions take one or more * comma-separated arguments in parentheses. * * The available functions are \c bartlett, \c bartlett_hann, * \c blackman, \c blackman_harris_4term_92db, \c connes, \c flattop, * \c gauss(STDDEV), \c hamming, \c hann, \c kaiser_bessel, \c nuttall, * \c rectangle, \c triangle, \c tukey(P), \c welch. * * For \c gauss(STDDEV), STDDEV specifies the standard deviation * (0blocksize / (2 ^ order). * * Set both min and max values to \c 0 to force a single context, * whose Rice parameter is based on the residual signal variance. * Otherwise, set a min and max order, and the encoder will search * all orders, using the mean of each context for its Rice parameter, * and use the best. * * \default \c 0 * \param encoder An encoder instance to set. * \param value See above. * \assert * \code encoder != NULL \endcode * \retval FLAC__bool * \c false if the encoder is already initialized, else \c true. */ FLAC_API FLAC__bool FLAC__stream_encoder_set_min_residual_partition_order(FLAC__StreamEncoder *encoder, unsigned value); /** Set the maximum partition order to search when coding the residual. * This is used in tandem with * FLAC__stream_encoder_set_min_residual_partition_order(). * * The partition order determines the context size in the residual. * The context size will be approximately blocksize / (2 ^ order). * * Set both min and max values to \c 0 to force a single context, * whose Rice parameter is based on the residual signal variance. * Otherwise, set a min and max order, and the encoder will search * all orders, using the mean of each context for its Rice parameter, * and use the best. * * \default \c 0 * \param encoder An encoder instance to set. * \param value See above. * \assert * \code encoder != NULL \endcode * \retval FLAC__bool * \c false if the encoder is already initialized, else \c true. */ FLAC_API FLAC__bool FLAC__stream_encoder_set_max_residual_partition_order(FLAC__StreamEncoder *encoder, unsigned value); /** Deprecated. Setting this value has no effect. * * \default \c 0 * \param encoder An encoder instance to set. * \param value See above. * \assert * \code encoder != NULL \endcode * \retval FLAC__bool * \c false if the encoder is already initialized, else \c true. */ FLAC_API FLAC__bool FLAC__stream_encoder_set_rice_parameter_search_dist(FLAC__StreamEncoder *encoder, unsigned value); /** Set an estimate of the total samples that will be encoded. * This is merely an estimate and may be set to \c 0 if unknown. * This value will be written to the STREAMINFO block before encoding, * and can remove the need for the caller to rewrite the value later * if the value is known before encoding. * * \default \c 0 * \param encoder An encoder instance to set. * \param value See above. * \assert * \code encoder != NULL \endcode * \retval FLAC__bool * \c false if the encoder is already initialized, else \c true. */ FLAC_API FLAC__bool FLAC__stream_encoder_set_total_samples_estimate(FLAC__StreamEncoder *encoder, FLAC__uint64 value); /** Set the metadata blocks to be emitted to the stream before encoding. * A value of \c NULL, \c 0 implies no metadata; otherwise, supply an * array of pointers to metadata blocks. The array is non-const since * the encoder may need to change the \a is_last flag inside them, and * in some cases update seek point offsets. Otherwise, the encoder will * not modify or free the blocks. It is up to the caller to free the * metadata blocks after encoding finishes. * * \note * The encoder stores only copies of the pointers in the \a metadata array; * the metadata blocks themselves must survive at least until after * FLAC__stream_encoder_finish() returns. Do not free the blocks until then. * * \note * The STREAMINFO block is always written and no STREAMINFO block may * occur in the supplied array. * * \note * By default the encoder does not create a SEEKTABLE. If one is supplied * in the \a metadata array, but the client has specified that it does not * support seeking, then the SEEKTABLE will be written verbatim. However * by itself this is not very useful as the client will not know the stream * offsets for the seekpoints ahead of time. In order to get a proper * seektable the client must support seeking. See next note. * * \note * SEEKTABLE blocks are handled specially. Since you will not know * the values for the seek point stream offsets, you should pass in * a SEEKTABLE 'template', that is, a SEEKTABLE object with the * required sample numbers (or placeholder points), with \c 0 for the * \a frame_samples and \a stream_offset fields for each point. If the * client has specified that it supports seeking by providing a seek * callback to FLAC__stream_encoder_init_stream() or both seek AND read * callback to FLAC__stream_encoder_init_ogg_stream() (or by using * FLAC__stream_encoder_init*_file() or FLAC__stream_encoder_init*_FILE()), * then while it is encoding the encoder will fill the stream offsets in * for you and when encoding is finished, it will seek back and write the * real values into the SEEKTABLE block in the stream. There are helper * routines for manipulating seektable template blocks; see metadata.h: * FLAC__metadata_object_seektable_template_*(). If the client does * not support seeking, the SEEKTABLE will have inaccurate offsets which * will slow down or remove the ability to seek in the FLAC stream. * * \note * The encoder instance \b will modify the first \c SEEKTABLE block * as it transforms the template to a valid seektable while encoding, * but it is still up to the caller to free all metadata blocks after * encoding. * * \note * A VORBIS_COMMENT block may be supplied. The vendor string in it * will be ignored. libFLAC will use it's own vendor string. libFLAC * will not modify the passed-in VORBIS_COMMENT's vendor string, it * will simply write it's own into the stream. If no VORBIS_COMMENT * block is present in the \a metadata array, libFLAC will write an * empty one, containing only the vendor string. * * \note The Ogg FLAC mapping requires that the VORBIS_COMMENT block be * the second metadata block of the stream. The encoder already supplies * the STREAMINFO block automatically. If \a metadata does not contain a * VORBIS_COMMENT block, the encoder will supply that too. Otherwise, if * \a metadata does contain a VORBIS_COMMENT block and it is not the * first, the init function will reorder \a metadata by moving the * VORBIS_COMMENT block to the front; the relative ordering of the other * blocks will remain as they were. * * \note The Ogg FLAC mapping limits the number of metadata blocks per * stream to \c 65535. If \a num_blocks exceeds this the function will * return \c false. * * \default \c NULL, 0 * \param encoder An encoder instance to set. * \param metadata See above. * \param num_blocks See above. * \assert * \code encoder != NULL \endcode * \retval FLAC__bool * \c false if the encoder is already initialized, else \c true. * \c false if the encoder is already initialized, or if * \a num_blocks > 65535 if encoding to Ogg FLAC, else \c true. */ FLAC_API FLAC__bool FLAC__stream_encoder_set_metadata(FLAC__StreamEncoder *encoder, FLAC__StreamMetadata **metadata, unsigned num_blocks); /** Get the current encoder state. * * \param encoder An encoder instance to query. * \assert * \code encoder != NULL \endcode * \retval FLAC__StreamEncoderState * The current encoder state. */ FLAC_API FLAC__StreamEncoderState FLAC__stream_encoder_get_state(const FLAC__StreamEncoder *encoder); /** Get the state of the verify stream decoder. * Useful when the stream encoder state is * \c FLAC__STREAM_ENCODER_VERIFY_DECODER_ERROR. * * \param encoder An encoder instance to query. * \assert * \code encoder != NULL \endcode * \retval FLAC__StreamDecoderState * The verify stream decoder state. */ FLAC_API FLAC__StreamDecoderState FLAC__stream_encoder_get_verify_decoder_state(const FLAC__StreamEncoder *encoder); /** Get the current encoder state as a C string. * This version automatically resolves * \c FLAC__STREAM_ENCODER_VERIFY_DECODER_ERROR by getting the * verify decoder's state. * * \param encoder A encoder instance to query. * \assert * \code encoder != NULL \endcode * \retval const char * * The encoder state as a C string. Do not modify the contents. */ FLAC_API const char *FLAC__stream_encoder_get_resolved_state_string(const FLAC__StreamEncoder *encoder); /** Get relevant values about the nature of a verify decoder error. * Useful when the stream encoder state is * \c FLAC__STREAM_ENCODER_VERIFY_DECODER_ERROR. The arguments should * be addresses in which the stats will be returned, or NULL if value * is not desired. * * \param encoder An encoder instance to query. * \param absolute_sample The absolute sample number of the mismatch. * \param frame_number The number of the frame in which the mismatch occurred. * \param channel The channel in which the mismatch occurred. * \param sample The number of the sample (relative to the frame) in * which the mismatch occurred. * \param expected The expected value for the sample in question. * \param got The actual value returned by the decoder. * \assert * \code encoder != NULL \endcode */ FLAC_API void FLAC__stream_encoder_get_verify_decoder_error_stats(const FLAC__StreamEncoder *encoder, FLAC__uint64 *absolute_sample, unsigned *frame_number, unsigned *channel, unsigned *sample, FLAC__int32 *expected, FLAC__int32 *got); /** Get the "verify" flag. * * \param encoder An encoder instance to query. * \assert * \code encoder != NULL \endcode * \retval FLAC__bool * See FLAC__stream_encoder_set_verify(). */ FLAC_API FLAC__bool FLAC__stream_encoder_get_verify(const FLAC__StreamEncoder *encoder); /** Get the frame header. * * \param encoder An initialized encoder instance in the OK state. * \param buffer An array of pointers to each channel's signal. * \param samples The number of samples in one channel. * \assert * \code encoder != NULL \endcode * \code FLAC__stream_encoder_get_state(encoder) == FLAC__STREAM_ENCODER_OK \endcode * \retval FLAC__bool * \c true if successful, else \c false; in this case, check the * encoder state with FLAC__stream_encoder_get_state() to see what * went wrong. */ FLAC_API FLAC__bool FLAC__stream_encoder_process(FLAC__StreamEncoder *encoder, const FLAC__int32 * const buffer[], unsigned samples); /** Submit data for encoding. * This version allows you to supply the input data where the channels * are interleaved into a single array (i.e. channel0_sample0, * channel1_sample0, ... , channelN_sample0, channel0_sample1, ...). * The samples need not be block-aligned but they must be * sample-aligned, i.e. the first value should be channel0_sample0 * and the last value channelN_sampleM. Each sample should be a signed * integer, right-justified to the resolution set by * FLAC__stream_encoder_set_bits_per_sample(). For example, if the * resolution is 16 bits per sample, the samples should all be in the * range [-32768,32767]. * * For applications where channel order is important, channels must * follow the order as described in the * frame header. * * \param encoder An initialized encoder instance in the OK state. * \param buffer An array of channel-interleaved data (see above). * \param samples The number of samples in one channel, the same as for * FLAC__stream_encoder_process(). For example, if * encoding two channels, \c 1000 \a samples corresponds * to a \a buffer of 2000 values. * \assert * \code encoder != NULL \endcode * \code FLAC__stream_encoder_get_state(encoder) == FLAC__STREAM_ENCODER_OK \endcode * \retval FLAC__bool * \c true if successful, else \c false; in this case, check the * encoder state with FLAC__stream_encoder_get_state() to see what * went wrong. */ FLAC_API FLAC__bool FLAC__stream_encoder_process_interleaved(FLAC__StreamEncoder *encoder, const FLAC__int32 buffer[], unsigned samples); /* \} */ #ifdef __cplusplus } #endif #endif fs-uae-2.2.3+dfsg/src/od-fs/FLAC/export.h0000644000175000017500000000576712162366654020071 0ustar glaubitzglaubitz/* libFLAC - Free Lossless Audio Codec library * Copyright (C) 2000,2001,2002,2003,2004,2005,2006,2007 Josh Coalson * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * - Neither the name of the Xiph.org Foundation nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef FLAC__EXPORT_H #define FLAC__EXPORT_H /** \file include/FLAC/export.h * * \brief * This module contains #defines and symbols for exporting function * calls, and providing version information and compiled-in features. * * See the \link flac_export export \endlink module. */ /** \defgroup flac_export FLAC/export.h: export symbols * \ingroup flac * * \brief * This module contains #defines and symbols for exporting function * calls, and providing version information and compiled-in features. * * If you are compiling with MSVC and will link to the static library * (libFLAC.lib) you should define FLAC__NO_DLL in your project to * make sure the symbols are exported properly. * * \{ */ #if defined(FLAC__NO_DLL) || !defined(_MSC_VER) #define FLAC_API #else #ifdef FLAC_API_EXPORTS #define FLAC_API _declspec(dllexport) #else #define FLAC_API _declspec(dllimport) #endif #endif /** These #defines will mirror the libtool-based library version number, see * http://www.gnu.org/software/libtool/manual.html#Libtool-versioning */ #define FLAC_API_VERSION_CURRENT 10 #define FLAC_API_VERSION_REVISION 0 /**< see above */ #define FLAC_API_VERSION_AGE 2 /**< see above */ #ifdef __cplusplus extern "C" { #endif /** \c 1 if the library has been compiled with support for Ogg FLAC, else \c 0. */ extern FLAC_API int FLAC_API_SUPPORTS_OGG_FLAC; #ifdef __cplusplus } #endif /* \} */ #endif fs-uae-2.2.3+dfsg/src/od-fs/FLAC/all.h0000644000175000017500000003712212162366654017306 0ustar glaubitzglaubitz/* libFLAC - Free Lossless Audio Codec library * Copyright (C) 2000,2001,2002,2003,2004,2005,2006,2007 Josh Coalson * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * - Neither the name of the Xiph.org Foundation nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef FLAC__ALL_H #define FLAC__ALL_H #include "export.h" #include "assert.h" #include "callback.h" #include "format.h" #include "metadata.h" #include "ordinals.h" #include "stream_decoder.h" #include "stream_encoder.h" /** \mainpage * * \section intro Introduction * * This is the documentation for the FLAC C and C++ APIs. It is * highly interconnected; this introduction should give you a top * level idea of the structure and how to find the information you * need. As a prerequisite you should have at least a basic * knowledge of the FLAC format, documented * here. * * \section c_api FLAC C API * * The FLAC C API is the interface to libFLAC, a set of structures * describing the components of FLAC streams, and functions for * encoding and decoding streams, as well as manipulating FLAC * metadata in files. The public include files will be installed * in your include area (for example /usr/include/FLAC/...). * * By writing a little code and linking against libFLAC, it is * relatively easy to add FLAC support to another program. The * library is licensed under Xiph's BSD license. * Complete source code of libFLAC as well as the command-line * encoder and plugins is available and is a useful source of * examples. * * Aside from encoders and decoders, libFLAC provides a powerful * metadata interface for manipulating metadata in FLAC files. It * allows the user to add, delete, and modify FLAC metadata blocks * and it can automatically take advantage of PADDING blocks to avoid * rewriting the entire FLAC file when changing the size of the * metadata. * * libFLAC usually only requires the standard C library and C math * library. In particular, threading is not used so there is no * dependency on a thread library. However, libFLAC does not use * global variables and should be thread-safe. * * libFLAC also supports encoding to and decoding from Ogg FLAC. * However the metadata editing interfaces currently have limited * read-only support for Ogg FLAC files. * * \section cpp_api FLAC C++ API * * The FLAC C++ API is a set of classes that encapsulate the * structures and functions in libFLAC. They provide slightly more * functionality with respect to metadata but are otherwise * equivalent. For the most part, they share the same usage as * their counterparts in libFLAC, and the FLAC C API documentation * can be used as a supplement. The public include files * for the C++ API will be installed in your include area (for * example /usr/include/FLAC++/...). * * libFLAC++ is also licensed under * Xiph's BSD license. * * \section getting_started Getting Started * * A good starting point for learning the API is to browse through * the modules. Modules are logical * groupings of related functions or classes, which correspond roughly * to header files or sections of header files. Each module includes a * detailed description of the general usage of its functions or * classes. * * From there you can go on to look at the documentation of * individual functions. You can see different views of the individual * functions through the links in top bar across this page. * * If you prefer a more hands-on approach, you can jump right to some * example code. * * \section porting_guide Porting Guide * * Starting with FLAC 1.1.3 a \link porting Porting Guide \endlink * has been introduced which gives detailed instructions on how to * port your code to newer versions of FLAC. * * \section embedded_developers Embedded Developers * * libFLAC has grown larger over time as more functionality has been * included, but much of it may be unnecessary for a particular embedded * implementation. Unused parts may be pruned by some simple editing of * src/libFLAC/Makefile.am. In general, the decoders, encoders, and * metadata interface are all independent from each other. * * It is easiest to just describe the dependencies: * * - All modules depend on the \link flac_format Format \endlink module. * - The decoders and encoders depend on the bitbuffer. * - The decoder is independent of the encoder. The encoder uses the * decoder because of the verify feature, but this can be removed if * not needed. * - Parts of the metadata interface require the stream decoder (but not * the encoder). * - Ogg support is selectable through the compile time macro * \c FLAC__HAS_OGG. * * For example, if your application only requires the stream decoder, no * encoder, and no metadata interface, you can remove the stream encoder * and the metadata interface, which will greatly reduce the size of the * library. * * Also, there are several places in the libFLAC code with comments marked * with "OPT:" where a #define can be changed to enable code that might be * faster on a specific platform. Experimenting with these can yield faster * binaries. */ /** \defgroup porting Porting Guide for New Versions * * This module describes differences in the library interfaces from * version to version. It assists in the porting of code that uses * the libraries to newer versions of FLAC. * * One simple facility for making porting easier that has been added * in FLAC 1.1.3 is a set of \c #defines in \c export.h of each * library's includes (e.g. \c include/FLAC/export.h). The * \c #defines mirror the libraries' * libtool version numbers, * e.g. in libFLAC there are \c FLAC_API_VERSION_CURRENT, * \c FLAC_API_VERSION_REVISION, and \c FLAC_API_VERSION_AGE. * These can be used to support multiple versions of an API during the * transition phase, e.g. * * \code * #if !defined(FLAC_API_VERSION_CURRENT) || FLAC_API_VERSION_CURRENT <= 7 * legacy code * #else * new code * #endif * \endcode * * The the source will work for multiple versions and the legacy code can * easily be removed when the transition is complete. * * Another available symbol is FLAC_API_SUPPORTS_OGG_FLAC (defined in * include/FLAC/export.h), which can be used to determine whether or not * the library has been compiled with support for Ogg FLAC. This is * simpler than trying to call an Ogg init function and catching the * error. */ /** \defgroup porting_1_1_2_to_1_1_3 Porting from FLAC 1.1.2 to 1.1.3 * \ingroup porting * * \brief * This module describes porting from FLAC 1.1.2 to FLAC 1.1.3. * * The main change between the APIs in 1.1.2 and 1.1.3 is that they have * been simplified. First, libOggFLAC has been merged into libFLAC and * libOggFLAC++ has been merged into libFLAC++. Second, both the three * decoding layers and three encoding layers have been merged into a * single stream decoder and stream encoder. That is, the functionality * of FLAC__SeekableStreamDecoder and FLAC__FileDecoder has been merged * into FLAC__StreamDecoder, and FLAC__SeekableStreamEncoder and * FLAC__FileEncoder into FLAC__StreamEncoder. Only the * FLAC__StreamDecoder and FLAC__StreamEncoder remain. What this means * is there is now a single API that can be used to encode or decode * streams to/from native FLAC or Ogg FLAC and the single API can work * on both seekable and non-seekable streams. * * Instead of creating an encoder or decoder of a certain layer, now the * client will always create a FLAC__StreamEncoder or * FLAC__StreamDecoder. The old layers are now differentiated by the * initialization function. For example, for the decoder, * FLAC__stream_decoder_init() has been replaced by * FLAC__stream_decoder_init_stream(). This init function takes * callbacks for the I/O, and the seeking callbacks are optional. This * allows the client to use the same object for seekable and * non-seekable streams. For decoding a FLAC file directly, the client * can use FLAC__stream_decoder_init_file() and pass just a filename * and fewer callbacks; most of the other callbacks are supplied * internally. For situations where fopen()ing by filename is not * possible (e.g. Unicode filenames on Windows) the client can instead * open the file itself and supply the FILE* to * FLAC__stream_decoder_init_FILE(). The init functions now returns a * FLAC__StreamDecoderInitStatus instead of FLAC__StreamDecoderState. * Since the callbacks and client data are now passed to the init * function, the FLAC__stream_decoder_set_*_callback() functions and * FLAC__stream_decoder_set_client_data() are no longer needed. The * rest of the calls to the decoder are the same as before. * * There are counterpart init functions for Ogg FLAC, e.g. * FLAC__stream_decoder_init_ogg_stream(). All the rest of the calls * and callbacks are the same as for native FLAC. * * As an example, in FLAC 1.1.2 a seekable stream decoder would have * been set up like so: * * \code * FLAC__SeekableStreamDecoder *decoder = FLAC__seekable_stream_decoder_new(); * if(decoder == NULL) do_something; * FLAC__seekable_stream_decoder_set_md5_checking(decoder, true); * [... other settings ...] * FLAC__seekable_stream_decoder_set_read_callback(decoder, my_read_callback); * FLAC__seekable_stream_decoder_set_seek_callback(decoder, my_seek_callback); * FLAC__seekable_stream_decoder_set_tell_callback(decoder, my_tell_callback); * FLAC__seekable_stream_decoder_set_length_callback(decoder, my_length_callback); * FLAC__seekable_stream_decoder_set_eof_callback(decoder, my_eof_callback); * FLAC__seekable_stream_decoder_set_write_callback(decoder, my_write_callback); * FLAC__seekable_stream_decoder_set_metadata_callback(decoder, my_metadata_callback); * FLAC__seekable_stream_decoder_set_error_callback(decoder, my_error_callback); * FLAC__seekable_stream_decoder_set_client_data(decoder, my_client_data); * if(FLAC__seekable_stream_decoder_init(decoder) != FLAC__SEEKABLE_STREAM_DECODER_OK) do_something; * \endcode * * In FLAC 1.1.3 it is like this: * * \code * FLAC__StreamDecoder *decoder = FLAC__stream_decoder_new(); * if(decoder == NULL) do_something; * FLAC__stream_decoder_set_md5_checking(decoder, true); * [... other settings ...] * if(FLAC__stream_decoder_init_stream( * decoder, * my_read_callback, * my_seek_callback, // or NULL * my_tell_callback, // or NULL * my_length_callback, // or NULL * my_eof_callback, // or NULL * my_write_callback, * my_metadata_callback, // or NULL * my_error_callback, * my_client_data * ) != FLAC__STREAM_DECODER_INIT_STATUS_OK) do_something; * \endcode * * or you could do; * * \code * [...] * FILE *file = fopen("somefile.flac","rb"); * if(file == NULL) do_somthing; * if(FLAC__stream_decoder_init_FILE( * decoder, * file, * my_write_callback, * my_metadata_callback, // or NULL * my_error_callback, * my_client_data * ) != FLAC__STREAM_DECODER_INIT_STATUS_OK) do_something; * \endcode * * or just: * * \code * [...] * if(FLAC__stream_decoder_init_file( * decoder, * "somefile.flac", * my_write_callback, * my_metadata_callback, // or NULL * my_error_callback, * my_client_data * ) != FLAC__STREAM_DECODER_INIT_STATUS_OK) do_something; * \endcode * * Another small change to the decoder is in how it handles unparseable * streams. Before, when the decoder found an unparseable stream * (reserved for when the decoder encounters a stream from a future * encoder that it can't parse), it changed the state to * \c FLAC__STREAM_DECODER_UNPARSEABLE_STREAM. Now the decoder instead * drops sync and calls the error callback with a new error code * \c FLAC__STREAM_DECODER_ERROR_STATUS_UNPARSEABLE_STREAM. This is * more robust. If your error callback does not discriminate on the the * error state, your code does not need to be changed. * * The encoder now has a new setting: * FLAC__stream_encoder_set_apodization(). This is for setting the * method used to window the data before LPC analysis. You only need to * add a call to this function if the default is not suitable. There * are also two new convenience functions that may be useful: * FLAC__metadata_object_cuesheet_calculate_cddb_id() and * FLAC__metadata_get_cuesheet(). * * The \a bytes parameter to FLAC__StreamDecoderReadCallback, * FLAC__StreamEncoderReadCallback, and FLAC__StreamEncoderWriteCallback * is now \c size_t instead of \c unsigned. */ /** \defgroup porting_1_1_3_to_1_1_4 Porting from FLAC 1.1.3 to 1.1.4 * \ingroup porting * * \brief * This module describes porting from FLAC 1.1.3 to FLAC 1.1.4. * * There were no changes to any of the interfaces from 1.1.3 to 1.1.4. * There was a slight change in the implementation of * FLAC__stream_encoder_set_metadata(); the function now makes a copy * of the \a metadata array of pointers so the client no longer needs * to maintain it after the call. The objects themselves that are * pointed to by the array are still not copied though and must be * maintained until the call to FLAC__stream_encoder_finish(). */ /** \defgroup porting_1_1_4_to_1_2_0 Porting from FLAC 1.1.4 to 1.2.0 * \ingroup porting * * \brief * This module describes porting from FLAC 1.1.4 to FLAC 1.2.0. * * There were only very minor changes to the interfaces from 1.1.4 to 1.2.0. * In libFLAC, \c FLAC__format_sample_rate_is_subset() was added. * In libFLAC++, \c FLAC::Decoder::Stream::get_decode_position() was added. * * Finally, value of the constant \c FLAC__FRAME_HEADER_RESERVED_LEN * has changed to reflect the conversion of one of the reserved bits * into active use. It used to be \c 2 and now is \c 1. However the * FLAC frame header length has not changed, so to skip the proper * number of bits, use \c FLAC__FRAME_HEADER_RESERVED_LEN + * \c FLAC__FRAME_HEADER_BLOCKING_STRATEGY_LEN */ /** \defgroup flac FLAC C API * * The FLAC C API is the interface to libFLAC, a set of structures * describing the components of FLAC streams, and functions for * encoding and decoding streams, as well as manipulating FLAC * metadata in files. * * You should start with the format components as all other modules * are dependent on it. */ #endif fs-uae-2.2.3+dfsg/src/od-fs/random.cpp0000644000175000017500000000600012162366655017634 0ustar glaubitzglaubitz#include "sysconfig.h" #include "sysdeps.h" #include "options.h" #include "custom.h" #include //#include /* Period parameters */ #define N 624 #define M 397 #define MATRIX_A 0x9908b0df /* constant vector a */ #define UPPER_MASK 0x80000000 /* most significant w-r bits */ #define LOWER_MASK 0x7fffffff /* least significant r bits */ /* Tempering parameters */ #define TEMPERING_MASK_B 0x9d2c5680 #define TEMPERING_MASK_C 0xefc60000 #define TEMPERING_SHIFT_U(y) (y >> 11) #define TEMPERING_SHIFT_S(y) (y << 7) #define TEMPERING_SHIFT_T(y) (y << 15) #define TEMPERING_SHIFT_L(y) (y >> 18) struct rand_context { uint32_t mt[N]; /* the array for the state vector */ unsigned int mti; }; void rand_set_seed(rand_context *rand, uint32_t seed) { if (rand == NULL) { return; } rand->mt[0] = seed; for (rand->mti = 1; rand->mti < N; rand->mti++) rand->mt[rand->mti] = 1812433253UL * (rand->mt[rand->mti - 1] ^ (rand->mt[rand->mti - 1] >> 30)) + rand->mti; } uint32_t rand_int(rand_context *rand) { uint32_t y; static const uint32_t mag01[2] = { 0x0, MATRIX_A }; /* mag01[x] = x * MATRIX_A for x=0,1 */ if (rand == NULL) { return 0; } if (rand->mti >= N) { /* generate N words at one time */ int kk; for (kk = 0; kk < N - M; kk++) { y = (rand->mt[kk] & UPPER_MASK) | (rand->mt[kk + 1] & LOWER_MASK); rand->mt[kk] = rand->mt[kk + M] ^ (y >> 1) ^ mag01[y & 0x1]; } for (; kk < N - 1; kk++) { y = (rand->mt[kk] & UPPER_MASK) | (rand->mt[kk + 1] & LOWER_MASK); rand->mt[kk] = rand->mt[kk + (M - N)] ^ (y >> 1) ^ mag01[y & 0x1]; } y = (rand->mt[N - 1] & UPPER_MASK) | (rand->mt[0] & LOWER_MASK); rand->mt[N - 1] = rand->mt[M - 1] ^ (y >> 1) ^ mag01[y & 0x1]; rand->mti = 0; } y = rand->mt[rand->mti++]; y ^= TEMPERING_SHIFT_U(y); y ^= TEMPERING_SHIFT_S(y) & TEMPERING_MASK_B; y ^= TEMPERING_SHIFT_T(y) & TEMPERING_MASK_C; y ^= TEMPERING_SHIFT_L(y); return y; } // the following functions where moved here from main.cpp, in order to // implemented deterministic behavior for netplay. TODO: be able to // set seed from netplay server - currently using fixed seed static uae_u32 randseed; static int oldhcounter; int g_random_debug_logging = 0; static rand_context g_rand_context; uae_u32 uaesrand (uae_u32 seed) { oldhcounter = -1; randseed = seed; //randseed = 0x12345678; if (g_random_debug_logging) { write_log (_T("seed=%08x\n"), randseed); } return randseed; } uae_u32 uaerand (void) { if (oldhcounter != hsync_counter) { rand_set_seed (&g_rand_context, hsync_counter ^ randseed); oldhcounter = hsync_counter; } uae_u32 r = rand_int (&g_rand_context); if (g_random_debug_logging) { write_log (_T("rand=%08x\n"), r); } return r; } uae_u32 uaerandgetseed (void) { return randseed; } fs-uae-2.2.3+dfsg/src/od-fs/stubs.cpp0000644000175000017500000000664512162366655017533 0ustar glaubitzglaubitz#include "sysconfig.h" #include "sysdeps.h" #include "options.h" #include "scsidev.h" void clipboard_vsync (void) { } void gui_lock (void) { } void gui_unlock (void) { } void gui_display (int shortcut) { STUB("shortcut=%d", shortcut); } int gui_init() { LOG_STUB(""); return 1; } void gui_exit() { LOG_STUB(""); } int get_guid_target (uae_u8 *out) { return 0; } uae_u8 *save_log (int bootlog, int *len) { STUB(""); return NULL; } int GetDriveType(TCHAR* vol) { // FIXME: return 0; } uae_u32 emulib_target_getcpurate (uae_u32 v, uae_u32 *low) { STUB("v=%d", v); // FIXME: return 0; } void update_debug_info(void) { // used to update debug info in debugger UI , currently FS only supports // using console debugging on Linux/Mac OS X (The Windows version is // not a console application). } void debugger_change (int mode) { STUB("mode=%d", mode); } void screenshot (int mode, int doprepare) { STUB("mode=%d doprepare=%d", mode, doprepare); } void write_dlog (const TCHAR *format, ...) { STUB("format=\"%s\"", format); } void target_addtorecent (const TCHAR *name, int t) { STUB("name=\"%s\" t=%d", name, t); } void notify_user (int msg) { STUB("msg=%d", msg); } uae_u8 sampler_getsample (int) { return 0; } int sampler_init (void) { return 0; } void sampler_free (void) { } void sampler_vsync (void) { } #include "include/zfile.h" // --- win32gui.cpp --- static int qs_override; int target_cfgfile_load (struct uae_prefs *p, const TCHAR *filename, int type, int isdefault) { LOG_STUB(""); return 1; } void target_save_options (struct zfile *f, struct uae_prefs *p) { LOG_STUB("zfile=%p p=%p", f, p); } int target_parse_option (struct uae_prefs *p, const TCHAR *option, const TCHAR *value) { STUB("p=%p\n, option=\"%s\"", p, option); return 0; } void target_startup_sequence (struct uae_prefs *p) { STUB("p=%p\n", p); } void notify_user_parms (int msg, const TCHAR *parms, ...) { STUB("msg=%d parms=\"%s\"", msg, parms); } uae_u8 *target_load_keyfile (struct uae_prefs *p, const TCHAR *path, int *sizep, TCHAR *name) { STUB(""); return NULL; } bool vsync_switchmode (int hz) { STUB("hz=%d", hz); return 0; } void ahi_hsync (void) { VERBOSE_STUB(""); } int enforcer_disable(void) { STUB(""); return 1; } void refreshtitle (void) { STUB(""); } void updatedisplayarea (void) { LOG_STUB(""); } void filesys_addexternals() { LOG_STUB(""); } void machdep_free (void) { LOG_STUB(""); } void target_run (void) { LOG_STUB(""); } void target_reset (void) { LOG_STUB(""); } void target_restart (void) { STUB(""); } void target_quit (void) { write_log("UAE emulation core is quitting\n"); printf("UAE emulation core is quitting\n"); } void target_fixup_options (struct uae_prefs *p) { LOG_STUB(""); } int debuggable (void) { return 0; } void logging_init(void) { LOG_STUB(""); } void flush_log(void) { STUB(""); } int translate_message (int msg, TCHAR *out) { STUB(""); return 0; } void machdep_save_options (FILE *f, const struct uae_prefs *p) { LOG_STUB(""); } int machdep_parse_option (struct uae_prefs *p, const char *option, const char *value) { STUB(""); return 0; } void machdep_default_options (struct uae_prefs *p) { STUB(""); } //void fpux_save (int *v) { // STUB(""); //} void fpux_restore (int *v) { LOG_STUB(""); } fs-uae-2.2.3+dfsg/src/od-fs/bsdsocket_win32.cpp0000755000175000017500000020666012162366655021400 0ustar glaubitzglaubitz/* * UAE - The Un*x Amiga Emulator * * bsdsocket.library emulation - Win32 OS-dependent part * * Copyright 1997,98 Mathias Ortmann * Copyright 1999,2000 Brian King * * GNU Public License * */ #include #include #include "sysconfig.h" #include "sysdeps.h" #if defined(BSDSOCKET) #ifdef FSUAE // only using default values instead for FS-UAE #else #include "resource.h" #endif #include #include #include "options.h" #include "uae/memory.h" #include "custom.h" #include "events.h" #include "newcpu.h" #include "autoconf.h" #include "traps.h" #include "bsdsocket.h" #include "threaddep/thread.h" #ifdef FSUAE #else #include "registry.h" #endif #include "native2amiga.h" #ifdef FSUAE #else #include "win32gui.h" #endif #include "wininet.h" #include "mmsystem.h" #ifdef FSUAE #else #include "win32.h" #endif #ifdef FSUAE // __try and __except is a MS exception to C/C++. What are the consequence // of ignoring these constructs in the code below? #define __try #define __except(x) #endif int rawsockets = 0; static int hWndSelector = 0; /* Set this to zero to get hSockWnd */ struct threadargs { struct socketbase *sb; uae_u32 args1; uae_u32 args2; int args3; long args4; uae_char buf[MAXGETHOSTSTRUCT]; int wscnt; }; struct threadargsw { struct socketbase *sb; uae_u32 nfds; uae_u32 readfds; uae_u32 writefds; uae_u32 exceptfds; uae_u32 timeout; int wscnt; }; #define MAX_SELECT_THREADS 64 #define MAX_GET_THREADS 64 struct bsdsockdata { HWND hSockWnd; HANDLE hSockThread; HANDLE hSockReq; HANDLE hSockReqHandled; CRITICAL_SECTION csSigQueueLock; CRITICAL_SECTION SockThreadCS; unsigned int threadid; WSADATA wsbData; volatile HANDLE hGetThreads[MAX_GET_THREADS]; volatile struct threadargs *threadGetargs[MAX_GET_THREADS]; volatile int threadGetargs_inuse[MAX_GET_THREADS]; volatile HANDLE hGetEvents[MAX_GET_THREADS]; volatile HANDLE hGetEvents2[MAX_GET_THREADS]; volatile HANDLE hThreads[MAX_SELECT_THREADS]; volatile struct threadargsw *threadargsw[MAX_SELECT_THREADS]; volatile HANDLE hEvents[MAX_SELECT_THREADS]; struct socketbase *asyncsb[MAXPENDINGASYNC]; SOCKET asyncsock[MAXPENDINGASYNC]; uae_u32 asyncsd[MAXPENDINGASYNC]; int asyncindex; }; static struct bsdsockdata *bsd; static int threadindextable[MAX_GET_THREADS]; static unsigned int __stdcall sock_thread(void *); extern HWND hAmigaWnd; #define THREAD(func,arg) (HANDLE)_beginthreadex(NULL, 0, func, arg, 0, &bsd->threadid) #define THREADEND(result) _endthreadex(result) #define SETERRNO bsdsocklib_seterrno(sb, WSAGetLastError() - WSABASEERR) #define SETHERRNO bsdsocklib_setherrno(sb, WSAGetLastError() - WSABASEERR) #define WAITSIGNAL waitsig(context, sb) #define SETSIGNAL addtosigqueue(sb,0) #define CANCELSIGNAL cancelsig(context, sb) #define FIOSETOWN _IOW('f', 124, long) /* set owner (struct Task *) */ #define FIOGETOWN _IOR('f', 123, long) /* get owner (struct Task *) */ #define BEGINBLOCKING if (sb->ftable[sd - 1] & SF_BLOCKING) sb->ftable[sd - 1] |= SF_BLOCKINGINPROGRESS #define ENDBLOCKING sb->ftable[sd - 1] &= ~SF_BLOCKINGINPROGRESS static LRESULT CALLBACK SocketWindowProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam); //static int PASCAL WSAEventSelect(SOCKET,HANDLE,long); #define PREPARE_THREAD EnterCriticalSection(&bsd->SockThreadCS) #define TRIGGER_THREAD { SetEvent(bsd->hSockReq); WaitForSingleObject(bsd->hSockReqHandled, INFINITE); LeaveCriticalSection(&bsd->SockThreadCS); } #define SOCKVER_MAJOR 2 #define SOCKVER_MINOR 2 #define SF_RAW_RAW 0x20000000 #define SF_RAW_UDP 0x10000000 #define SF_RAW_RUDP 0x08000000 #define SF_RAW_RICMP 0x04000000 #define SF_RAW_HDR 0x02000000 typedef struct ip_option_information { u_char Ttl; /* Time To Live (used for traceroute) */ u_char Tos; /* Type Of Service (usually 0) */ u_char Flags; /* IP header flags (usually 0) */ u_char OptionsSize; /* Size of options data (usually 0, max 40) */ u_char FAR *OptionsData; /* Options data buffer */ } IPINFO, *PIPINFO, FAR *LPIPINFO; static void bsdsetpriority (HANDLE thread) { int pri = THREAD_PRIORITY_NORMAL; SetThreadPriority(thread, pri); } static int mySockStartup(void) { int result = 0, i; SOCKET dummy; DWORD lasterror; TCHAR *ss; if (!bsd) { bsd = xcalloc (struct bsdsockdata, 1); for (i = 0; i < MAX_GET_THREADS; i++) threadindextable[i] = i; } if (WSAStartup (MAKEWORD (SOCKVER_MAJOR, SOCKVER_MINOR), &bsd->wsbData)) { lasterror = WSAGetLastError(); if(lasterror == WSAVERNOTSUPPORTED) { #ifdef FSUAE gui_message("Winsock2 needed"); #else TCHAR szMessage[MAX_DPATH]; WIN32GUI_LoadUIString(IDS_WSOCK2NEEDED, szMessage, MAX_DPATH); gui_message(szMessage); #endif } else write_log (_T("BSDSOCK: ERROR - Unable to initialize Windows socket layer! Error code: %d\n"), lasterror); return 0; } ss = au (bsd->wsbData.szDescription); write_log (_T("BSDSOCK: using %s\n"), ss); xfree (ss); // make sure WSP/NSPStartup gets called from within the regular stack // (Windows 95/98 need this) if((dummy = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP)) != INVALID_SOCKET) { closesocket(dummy); result = 1; } else { write_log (_T("BSDSOCK: ERROR - WSPStartup/NSPStartup failed! Error code: %d\n"), WSAGetLastError()); result = 0; } return result; } int init_socket_layer (void) { int result = 0; if (bsd) return -1; deinit_socket_layer (); if (currprefs.socket_emu) { if((result = mySockStartup())) { if(bsd->hSockThread == NULL) { WNDCLASS wc; // Set up an invisible window and dummy wndproc InitializeCriticalSection(&bsd->csSigQueueLock); InitializeCriticalSection(&bsd->SockThreadCS); bsd->hSockReq = CreateEvent(NULL, FALSE, FALSE, NULL); bsd->hSockReqHandled = CreateEvent(NULL, FALSE, FALSE, NULL); wc.style = CS_BYTEALIGNCLIENT | CS_BYTEALIGNWINDOW; wc.lpfnWndProc = SocketWindowProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = GetModuleHandle(NULL); #ifdef FSUAE wc.hIcon = NULL; wc.hCursor = NULL; #else wc.hIcon = LoadIcon (GetModuleHandle (NULL), MAKEINTRESOURCE (IDI_APPICON)); wc.hCursor = LoadCursor (NULL, IDC_ARROW); #endif wc.hbrBackground = (HBRUSH)GetStockObject (BLACK_BRUSH); wc.lpszMenuName = 0; wc.lpszClassName = _T("SocketFun"); RegisterClass(&wc); bsd->hSockWnd = CreateWindowEx (0, _T("SocketFun"), _T("WinUAE Socket Window"), WS_POPUP, 0, 0, 1, 1, NULL, NULL, 0, NULL); bsd->hSockThread = THREAD(sock_thread, NULL); if (!bsd->hSockWnd) { write_log (_T("bsdsocket initialization failed\n")); deinit_socket_layer(); return 0; } } } } return result; } static void close_selectget_threads(void) { int i; for (i = 0; i < MAX_SELECT_THREADS; i++) { if (bsd->hEvents[i]) { HANDLE h = bsd->hEvents[i]; bsd->hEvents[i] = NULL; CloseHandle (h); } if (bsd->hThreads[i]) { CloseHandle (bsd->hThreads[i]); bsd->hThreads[i] = NULL; } } for (i = 0; i < MAX_GET_THREADS; i++) { if (bsd->hGetThreads[i]) { HANDLE h = bsd->hGetThreads[i]; bsd->hGetThreads[i] = NULL; CloseHandle (h); } if (bsd->hGetEvents[i]) { CloseHandle (bsd->hGetEvents[i]); bsd->hGetEvents[i] = NULL; } if (bsd->hGetEvents2[i]) { CloseHandle (bsd->hGetEvents2[i]); bsd->hGetEvents2[i] = NULL; } bsd->threadGetargs_inuse[i] = 0; } } void deinit_socket_layer(void) { if (!bsd) return; if(bsd->hSockThread) { HANDLE t = bsd->hSockThread; DeleteCriticalSection(&bsd->csSigQueueLock); DeleteCriticalSection(&bsd->SockThreadCS); bsd->hSockThread = NULL; SetEvent (bsd->hSockReq); WaitForSingleObject(bsd->hSockThread, INFINITE); CloseHandle(t); CloseHandle(bsd->hSockReq); CloseHandle(bsd->hSockReqHandled); bsd->hSockReq = NULL; bsd->hSockThread = NULL; bsd->hSockReqHandled = NULL; DestroyWindow (bsd->hSockWnd); bsd->hSockWnd = NULL; UnregisterClass (_T("SocketFun"), GetModuleHandle(NULL)); } close_selectget_threads (); WSACleanup(); xfree (bsd); bsd = NULL; } #ifdef BSDSOCKET void locksigqueue(void) { EnterCriticalSection(&bsd->csSigQueueLock); } void unlocksigqueue(void) { LeaveCriticalSection(&bsd->csSigQueueLock); } // Asynchronous completion notification // We use window messages posted to hAmigaWnd in the range from 0xb000 to 0xb000+MAXPENDINGASYNC*2 // Socket events cause even-numbered messages, task events odd-numbered messages // Message IDs are allocated on a round-robin basis and deallocated by the main thread. // WinSock tends to choke on WSAAsyncCancelMessage(s,w,m,0,0) called too often with an event pending // @@@ Enabling all socket event messages for every socket by default and basing things on that would // be cleaner (and allow us to write a select() emulation that doesn't need to be kludge-aborted). // However, the latency of the message queue is too high for that at the moment (setting up a dummy // window from a separate thread would fix that). // Blocking sockets with asynchronous event notification are currently not safe to use. int host_sbinit(TrapContext *context, SB) { sb->sockAbort = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); if (sb->sockAbort == INVALID_SOCKET) return 0; if ((sb->hEvent = CreateEvent(NULL,FALSE,FALSE,NULL)) == NULL) return 0; sb->mtable = xcalloc(unsigned int, sb->dtablesize); return 1; } void host_closesocketquick(SOCKET s) { BOOL b = 1; if(s) { setsockopt(s, SOL_SOCKET, SO_DONTLINGER, (uae_char*)&b, sizeof(b)); shutdown(s, 1); closesocket(s); } } void host_sbcleanup(SB) { int i; if (!sb) { close_selectget_threads (); return; } for (i = 0; i < MAXPENDINGASYNC; i++) { if (bsd->asyncsb[i] == sb) bsd->asyncsb[i] = NULL; } if (sb->hEvent != NULL) { CloseHandle(sb->hEvent); sb->hEvent = NULL; } for (i = sb->dtablesize; i--; ) { if (sb->dtable[i] != INVALID_SOCKET) host_closesocketquick(sb->dtable[i]); sb->dtable[i] = INVALID_SOCKET; if (sb->mtable && sb->mtable[i]) bsd->asyncsb[(sb->mtable[i] - 0xb000) / 2] = NULL; } shutdown(sb->sockAbort, 1); closesocket(sb->sockAbort); free(sb->mtable); sb->mtable = NULL; } void host_sbreset(void) { int i; for (i = 0; i < MAXPENDINGASYNC; i++) { bsd->asyncsb[i] = 0; bsd->asyncsock[i] = 0; bsd->asyncsd[i] = 0; } for (i = 0; i < MAX_GET_THREADS; i++) { bsd->threadargsw[i] = 0; } } void sockmsg(unsigned int msg, WPARAM wParam, LPARAM lParam) { SB; unsigned int index; int sdi; index = (msg - 0xb000) / 2; sb = bsd->asyncsb[index]; if (!(msg & 1)) { // is this one really for us? if ((SOCKET)wParam != bsd->asyncsock[index]) { // cancel socket event WSAAsyncSelect((SOCKET)wParam, hWndSelector ? hAmigaWnd : bsd->hSockWnd, 0, 0); BSDTRACE((_T("unknown sockmsg %d\n"), index)); return; } sdi = bsd->asyncsd[index] - 1; // asynchronous socket event? if (sb && !(sb->ftable[sdi] & SF_BLOCKINGINPROGRESS) && sb->mtable[sdi]) { long wsbevents = WSAGETSELECTEVENT(lParam); int fmask = 0; // regular socket event? if (wsbevents & FD_READ) fmask = REP_READ; else if (wsbevents & FD_WRITE) fmask = REP_WRITE; else if (wsbevents & FD_OOB) fmask = REP_OOB; else if (wsbevents & FD_ACCEPT) fmask = REP_ACCEPT; else if (wsbevents & FD_CONNECT) fmask = REP_CONNECT; else if (wsbevents & FD_CLOSE) fmask = REP_CLOSE; // error? if (WSAGETSELECTERROR(lParam)) fmask |= REP_ERROR; // notify if (sb->ftable[sdi] & fmask) sb->ftable[sdi] |= fmask << 8; addtosigqueue(sb, 1); return; } } locksigqueue(); if (sb != NULL) { bsd->asyncsb[index] = NULL; if (WSAGETASYNCERROR(lParam)) { bsdsocklib_seterrno(sb, WSAGETASYNCERROR(lParam) - WSABASEERR); if (sb->sb_errno >= 1001 && sb->sb_errno <= 1005) { bsdsocklib_setherrno(sb, sb->sb_errno - 1000); } else if (sb->sb_errno == 55) { // ENOBUFS write_log (_T("BSDSOCK: ERROR - Buffer overflow - %d bytes requested\n"), WSAGETASYNCBUFLEN(lParam)); } } else { bsdsocklib_seterrno(sb,0); } SETSIGNAL; } unlocksigqueue(); } static unsigned int allocasyncmsg(SB,uae_u32 sd,SOCKET s) { int i; locksigqueue(); for (i = bsd->asyncindex + 1; i != bsd->asyncindex; i++) { if (i >= MAXPENDINGASYNC) i = 0; if (!bsd->asyncsb[i]) { bsd->asyncsb[i] = sb; if (++bsd->asyncindex >= MAXPENDINGASYNC) bsd->asyncindex = 0; unlocksigqueue(); if (s == INVALID_SOCKET) { return i * 2 + 0xb001; } else { bsd->asyncsd[i] = sd; bsd->asyncsock[i] = s; return i * 2 + 0xb000; } } } unlocksigqueue(); bsdsocklib_seterrno(sb, 12); // ENOMEM write_log (_T("BSDSOCK: ERROR - Async operation completion table overflow\n")); return 0; } static void cancelasyncmsg(TrapContext *context, unsigned int wMsg) { SB; wMsg = (wMsg-0xb000) / 2; sb = bsd->asyncsb[wMsg]; if (sb != NULL) { bsd->asyncsb[wMsg] = NULL; CANCELSIGNAL; } } void sockabort(SB) { locksigqueue(); unlocksigqueue(); } void setWSAAsyncSelect(SB, uae_u32 sd, SOCKET s, long lEvent ) { if (sb->mtable[sd - 1]) { long wsbevents = 0; long eventflags; int i; locksigqueue(); eventflags = sb->ftable[sd - 1] & REP_ALL; if (eventflags & REP_ACCEPT) wsbevents |= FD_ACCEPT; if (eventflags & REP_CONNECT) wsbevents |= FD_CONNECT; if (eventflags & REP_OOB) wsbevents |= FD_OOB; if (eventflags & REP_READ) wsbevents |= FD_READ; if (eventflags & REP_WRITE) wsbevents |= FD_WRITE; if (eventflags & REP_CLOSE) wsbevents |= FD_CLOSE; wsbevents |= lEvent; i = (sb->mtable[sd - 1] - 0xb000) / 2; bsd->asyncsb[i] = sb; bsd->asyncsd[i] = sd; bsd->asyncsock[i] = s; WSAAsyncSelect(s, hWndSelector ? hAmigaWnd : bsd->hSockWnd, sb->mtable[sd - 1], wsbevents); unlocksigqueue(); } } // address cleaning static void prephostaddr(SOCKADDR_IN *addr) { addr->sin_family = AF_INET; } static void prepamigaaddr(struct sockaddr *realpt, int len) { // little endian address family value to the byte sin_family member ((uae_u8*)realpt)[1] = *((uae_u8*)realpt); // set size of address *((uae_u8*)realpt) = len; } int host_dup2socket(TrapContext *context, SB, int fd1, int fd2) { SOCKET s1,s2; BSDTRACE((_T("dup2socket(%d,%d) -> "),fd1,fd2)); fd1++; s1 = getsock(sb, fd1); if (s1 != INVALID_SOCKET) { if (fd2 != -1) { if ((unsigned int) (fd2) >= (unsigned int) sb->dtablesize) { BSDTRACE ((_T("Bad file descriptor (%d)\n"), fd2)); bsdsocklib_seterrno (sb, 9); /* EBADF */ } fd2++; s2 = getsock(sb,fd2); if (s2 != INVALID_SOCKET) { shutdown(s2,1); closesocket(s2); } setsd(context, sb, fd2, s1); BSDTRACE((_T("0\n"))); return 0; } else { fd2 = getsd(context, sb, 1); setsd(context, sb, fd2, s1); BSDTRACE((_T("%d\n"),fd2)); return (fd2 - 1); } } BSDTRACE((_T("-1\n"))); return -1; } int host_socket(TrapContext *context, SB, int af, int type, int protocol) { int sd; SOCKET s; unsigned long nonblocking = 1; int faketype; BSDTRACE((_T("socket(%s,%s,%d) -> "),af == AF_INET ? _T("AF_INET") : _T("AF_other"),type == SOCK_STREAM ? _T("SOCK_STREAM") : type == SOCK_DGRAM ? _T("SOCK_DGRAM ") : _T("SOCK_RAW"),protocol)); faketype = type; if (protocol == IPPROTO_UDP && type == SOCK_RAW && !rawsockets) faketype = SOCK_DGRAM; if ((s = socket(af,faketype,protocol)) == INVALID_SOCKET) { SETERRNO; BSDTRACE((_T("failed (%d)\n"),sb->sb_errno)); return -1; } else { sd = getsd(context, sb,s); } sb->ftable[sd-1] = SF_BLOCKING; ioctlsocket(s,FIONBIO,&nonblocking); BSDTRACE((_T(" -> Socket=%d %x\n"),sd,s)); if (type == SOCK_RAW) { if (protocol==IPPROTO_UDP) { sb->ftable[sd-1] |= SF_RAW_UDP; } else if (protocol==IPPROTO_ICMP) { struct sockaddr_in sin = { 0 }; sin.sin_family = AF_INET; sin.sin_addr.s_addr = INADDR_ANY; if (bind(s,(struct sockaddr *)&sin,sizeof(sin))) write_log (_T("IPPROTO_ICMP socket bind() failed: %d\n"), WSAGetLastError ()); } else if (protocol==IPPROTO_RAW) { sb->ftable[sd-1] |= SF_RAW_RAW; } } callfdcallback (context, sb, sd - 1, FDCB_ALLOC); return sd-1; } uae_u32 host_bind(TrapContext *context, SB, uae_u32 sd, uae_u32 name, uae_u32 namelen) { uae_char buf[MAXADDRLEN]; uae_u32 success = 0; SOCKET s; sd++; BSDTRACE((_T("bind(%d,0x%x,%d) -> "),sd, name, namelen)); s = getsock(sb, sd); if (s != INVALID_SOCKET) { if (namelen <= sizeof buf) { if (!addr_valid (_T("host_bind"), name, namelen)) return 0; memcpy(buf, get_real_address (name), namelen); // some Amiga programs set this field to bogus values prephostaddr((SOCKADDR_IN *)buf); if ((success = bind(s,(struct sockaddr *)buf, namelen)) != 0) { SETERRNO; BSDTRACE((_T("failed (%d)\n"),sb->sb_errno)); } else BSDTRACE((_T("OK\n"))); } else write_log (_T("BSDSOCK: ERROR - Excessive namelen (%d) in bind()!\n"), namelen); } return success; } uae_u32 host_listen(TrapContext *context, SB, uae_u32 sd, uae_u32 backlog) { SOCKET s; uae_u32 success = -1; sd++; BSDTRACE((_T("listen(%d,%d) -> "), sd, backlog)); s = getsock(sb, sd); if (s != INVALID_SOCKET) { if ((success = listen(s,backlog)) != 0) { SETERRNO; BSDTRACE((_T("failed (%d)\n"),sb->sb_errno)); } else BSDTRACE((_T("OK\n"))); } return success; } void host_accept(TrapContext *context, SB, uae_u32 sd, uae_u32 name, uae_u32 namelen) { struct sockaddr *rp_name, *rp_nameuae; struct sockaddr sockaddr; int hlen, hlenuae = 0; SOCKET s, s2; int success = 0; unsigned int wMsg; sd++; if (name != 0) { if (!addr_valid (_T("host_accept1"), name, sizeof(struct sockaddr)) || !addr_valid (_T("host_accept2"), namelen, 4)) return; rp_nameuae = rp_name = (struct sockaddr *)get_real_address (name); hlenuae = hlen = get_long (namelen); if (hlenuae < sizeof(sockaddr)) { // Fix for CNET BBS Windows must have 16 Bytes (sizeof(sockaddr)) otherwise Error WSAEFAULT rp_name = &sockaddr; hlen = sizeof(sockaddr); } } else { rp_name = &sockaddr; hlen = sizeof(sockaddr); } BSDTRACE((_T("accept(%d,%d,%d) -> "),sd,name,hlenuae)); s = getsock(sb, (int)sd); if (s != INVALID_SOCKET) { BEGINBLOCKING; s2 = accept(s, rp_name, &hlen); if (s2 == INVALID_SOCKET) { SETERRNO; if ((sb->ftable[sd - 1] & SF_BLOCKING) && sb->sb_errno == WSAEWOULDBLOCK - WSABASEERR) { if (sb->mtable[sd - 1] || (wMsg = allocasyncmsg(sb, sd, s)) != 0) { if (sb->mtable[sd - 1] == 0) { WSAAsyncSelect(s,hWndSelector ? hAmigaWnd : bsd->hSockWnd, wMsg, FD_ACCEPT); } else { setWSAAsyncSelect(sb, sd, s, FD_ACCEPT); } WAITSIGNAL; if (sb->mtable[sd - 1] == 0) { cancelasyncmsg(context, wMsg); } else { setWSAAsyncSelect(sb, sd, s, 0); } if (sb->eintr) { BSDTRACE((_T("[interrupted]\n"))); ENDBLOCKING; return; } s2 = accept(s, rp_name, &hlen); if (s2 == INVALID_SOCKET) { SETERRNO; if (sb->sb_errno == WSAEWOULDBLOCK - WSABASEERR) write_log (_T("BSDSOCK: ERRRO - accept() would block despite FD_ACCEPT message\n")); } } } } if (s2 == INVALID_SOCKET) { sb->resultval = -1; BSDTRACE((_T("failed (%d)\n"),sb->sb_errno)); } else { sb->resultval = getsd(context, sb, s2); sb->ftable[sb->resultval - 1] = sb->ftable[sd - 1]; // new socket inherits the old socket's properties callfdcallback(context, sb, sb->resultval - 1, FDCB_ALLOC); sb->resultval--; if (rp_name != 0) { // 1.11.2002 XXX if (hlen <= hlenuae) { // Fix for CNET BBS Part 2 prepamigaaddr(rp_name, hlen); if (namelen != 0) { put_long (namelen, hlen); } } else { // Copy only the number of bytes requested if (hlenuae != 0) { prepamigaaddr(rp_name, hlenuae); memcpy(rp_nameuae, rp_name, hlenuae); put_long (namelen, hlenuae); } } } BSDTRACE((_T("%d/%d\n"), sb->resultval, hlen)); } ENDBLOCKING; } } typedef enum { connect_req, recvfrom_req, sendto_req, abort_req, last_req } threadsock_e; struct threadsock_packet { threadsock_e packet_type; union { struct sendto_params { uae_char *buf; uae_char *realpt; uae_u32 sd; uae_u32 msg; uae_u32 len; uae_u32 flags; uae_u32 to; uae_u32 tolen; } sendto_s; struct recvfrom_params { uae_char *realpt; uae_u32 addr; uae_u32 len; uae_u32 flags; struct sockaddr *rp_addr; int *hlen; } recvfrom_s; struct connect_params { uae_char *buf; uae_u32 namelen; } connect_s; struct abort_params { SOCKET *newsock; } abort_s; } params; SOCKET s; SB; int wscnt; } sockreq; // sockreg.sb may be gone if thread dies at right time.. fixme.. */ static BOOL HandleStuff(void) { BOOL quit = FALSE; SB = NULL; BOOL handled = TRUE; if (bsd->hSockReq) { // 100ms sleepiness might need some tuning... //if(WaitForSingleObject( hSockReq, 100 ) == WAIT_OBJECT_0 ) { BSDTRACE((_T("sockreq start %d:%d\n"), sockreq.packet_type,sockreq.wscnt)); switch(sockreq.packet_type) { case connect_req: sockreq.sb->resultval = connect(sockreq.s,(struct sockaddr *)(sockreq.params.connect_s.buf),sockreq.params.connect_s.namelen); break; case sendto_req: if(sockreq.params.sendto_s.to) { sockreq.sb->resultval = sendto(sockreq.s,sockreq.params.sendto_s.realpt,sockreq.params.sendto_s.len,sockreq.params.sendto_s.flags,(struct sockaddr *)(sockreq.params.sendto_s.buf),sockreq.params.sendto_s.tolen); } else { sockreq.sb->resultval = send(sockreq.s,sockreq.params.sendto_s.realpt,sockreq.params.sendto_s.len,sockreq.params.sendto_s.flags); } break; case recvfrom_req: if(sockreq.params.recvfrom_s.addr) { sockreq.sb->resultval = recvfrom(sockreq.s, sockreq.params.recvfrom_s.realpt, sockreq.params.recvfrom_s.len, sockreq.params.recvfrom_s.flags, sockreq.params.recvfrom_s.rp_addr, sockreq.params.recvfrom_s.hlen); } else { sockreq.sb->resultval = recv(sockreq.s, sockreq.params.recvfrom_s.realpt, sockreq.params.recvfrom_s.len, sockreq.params.recvfrom_s.flags); } break; case abort_req: *(sockreq.params.abort_s.newsock) = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); if (*(sockreq.params.abort_s.newsock) != sb->sockAbort) { shutdown(sb->sockAbort, 1); closesocket(sb->sockAbort); } handled = FALSE; /* Don't bother the SETERRNO section after the switch() */ break; case last_req: default: write_log (_T("BSDSOCK: Invalid sock-thread request!\n")); handled = FALSE; break; } if(handled) { if(sockreq.sb->resultval == SOCKET_ERROR) { sb = sockreq.sb; SETERRNO; } } BSDTRACE((_T("sockreq end %d,%d,%d:%d\n"), sockreq.packet_type,sockreq.sb->resultval,sockreq.sb->sb_errno,sockreq.wscnt)); SetEvent(bsd->hSockReqHandled); } } else { quit = TRUE; } return quit; } static LRESULT CALLBACK SocketWindowProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { if(message >= 0xB000 && message < 0xB000 + MAXPENDINGASYNC * 2) { BSDTRACE((_T("sockmsg(0x%x[%d], 0x%x, 0x%x)\n"), message, (message - 0xb000) / 2, wParam, lParam)); sockmsg(message, wParam, lParam); return 0; } return DefWindowProc(hwnd, message, wParam, lParam); } static unsigned int sock_thread2(void *blah) { unsigned int result = 0; HANDLE WaitHandle; MSG msg; if(bsd->hSockWnd) { // Make sure we're outrunning the wolves SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_ABOVE_NORMAL); while(bsd->hSockThread && bsd->hSockWnd) { DWORD wait; WaitHandle = bsd->hSockReq; wait = MsgWaitForMultipleObjects (1, &WaitHandle, FALSE, INFINITE, QS_POSTMESSAGE); if (wait == WAIT_ABANDONED_0) break; if (wait == WAIT_OBJECT_0) { if (!bsd->hSockThread || !bsd->hSockWnd) break; if (HandleStuff()) // See if its time to quit... break; } else if (wait == WAIT_OBJECT_0 + 1) { if (!bsd->hSockThread || !bsd->hSockWnd) break; while(PeekMessage(&msg, NULL, WM_USER, 0xB000 + MAXPENDINGASYNC * 2, PM_REMOVE)) { TranslateMessage(&msg); DispatchMessage(&msg); } } } } write_log (_T("BSDSOCK: We have exited our sock_thread()\n")); THREADEND(result); return result; } static unsigned int __stdcall sock_thread(void *p) { __try { return sock_thread2 (p); } __except(WIN32_ExceptionFilter (GetExceptionInformation (), GetExceptionCode ())) { } return 0; } void host_connect(TrapContext *context, SB, uae_u32 sd, uae_u32 name, uae_u32 namelen) { SOCKET s; int success = 0; unsigned int wMsg; uae_char buf[MAXADDRLEN]; static int wscounter; int wscnt; sd++; wscnt = ++wscounter; BSDTRACE((_T("connect(%d,0x%x,%d):%d -> "), sd, name, namelen, wscnt)); if (!addr_valid (_T("host_connect"), name, namelen)) return; s = getsock(sb,(int)sd); if (s != INVALID_SOCKET) { if (namelen <= MAXADDRLEN) { if (sb->mtable[sd-1] || (wMsg = allocasyncmsg(sb,sd,s)) != 0) { if (sb->mtable[sd-1] == 0) { WSAAsyncSelect(s, hWndSelector ? hAmigaWnd : bsd->hSockWnd, wMsg, FD_CONNECT); } else { setWSAAsyncSelect(sb, sd, s, FD_CONNECT); } BEGINBLOCKING; PREPARE_THREAD; memcpy(buf, get_real_address (name), namelen); prephostaddr((SOCKADDR_IN *)buf); sockreq.packet_type = connect_req; sockreq.s = s; sockreq.sb = sb; sockreq.params.connect_s.buf = buf; sockreq.params.connect_s.namelen = namelen; sockreq.wscnt = wscnt; TRIGGER_THREAD; if (sb->resultval) { if (sb->sb_errno == WSAEWOULDBLOCK - WSABASEERR) { if (sb->ftable[sd-1] & SF_BLOCKING) { bsdsocklib_seterrno(sb, 0); WAITSIGNAL; if (sb->eintr) { // Destroy socket to cancel abort, replace it with fake socket to enable proper closing. // This is in accordance with BSD behaviour. shutdown(s,1); closesocket(s); sb->dtable[sd-1] = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); } } else { bsdsocklib_seterrno(sb, 36); // EINPROGRESS } } else { CANCELSIGNAL; // Cancel pending signal } } ENDBLOCKING; if (sb->mtable[sd-1] == 0) { cancelasyncmsg(context, wMsg); } else { setWSAAsyncSelect(sb,sd,s,0); } } } else { write_log (_T("BSDSOCK: WARNING - Excessive namelen (%d) in connect():%d!\n"), namelen, wscnt); } } BSDTRACE((_T(" -> connect %d:%d\n"),sb->sb_errno, wscnt)); } #if 0 struct ip { u_char ip_v:4; /* 0 version */ u_char ip_hl:4; /* 0 header length */ u_char ip_tos; /* 1 type of service */ short ip_len; /* 2 total length */ u_short ip_id; /* 4 identification */ short ip_off; /* 6 fragment offset field */ u_char ip_ttl; /* 8 time to live */ u_char ip_p; /* 9 protocol */ u_short ip_sum; /* 10 checksum */ struct in_addr ip_src,ip_dst; /* 12 source and dest address */ }; /* 20 */ struct udphdr { u_short uh_sport; /* 20 source port */ u_short uh_dport; /* 22 destination port */ short uh_ulen; /* 24 udp length */ u_short uh_sum; /* 26 udp checksum */ }; /* 28 */ #endif void host_sendto (TrapContext *context, SB, uae_u32 sd, uae_u32 msg, uae_u32 len, uae_u32 flags, uae_u32 to, uae_u32 tolen) { SOCKET s; char *realpt; unsigned int wMsg; uae_char buf[MAXADDRLEN]; SOCKADDR_IN *sa = NULL; int iCut = 0; static int wscounter; int wscnt; wscnt = ++wscounter; if (to) BSDTRACE((_T("sendto(%d,0x%x,%d,0x%x,0x%x,%d):%d-> "),sd,msg,len,flags,to,tolen,wscnt)); else BSDTRACE((_T("send(%d,0x%x,%d,%d):%d -> "),sd,msg,len,flags,wscnt)); sd++; s = getsock(sb,sd); if (s != INVALID_SOCKET) { if (!addr_valid (_T("host_sendto1"), msg, 4)) return; realpt = (char*)get_real_address (msg); if (to) { if (tolen > sizeof buf) { write_log (_T("BSDSOCK: WARNING - Target address in sendto() too large (%d):%d!\n"), tolen,wscnt); } else { if (!addr_valid (_T("host_sendto2"), to, tolen)) return; memcpy(buf, get_real_address (to), tolen); // some Amiga software sets this field to bogus values sa = (SOCKADDR_IN*)buf; prephostaddr(sa); } } if (sb->ftable[sd-1] & SF_RAW_RAW) { if (realpt[9] == IPPROTO_ICMP) { struct sockaddr_in sin; shutdown(s,1); closesocket(s); s = socket(AF_INET,SOCK_RAW,IPPROTO_ICMP); sin.sin_family = AF_INET; sin.sin_addr.s_addr = INADDR_ANY; sin.sin_port = htons(realpt[20] * 256 + realpt[21]); bind(s,(struct sockaddr *)&sin,sizeof(sin)); sb->dtable[sd-1] = s; sb->ftable[sd-1]&= ~SF_RAW_RAW; sb->ftable[sd-1]|= SF_RAW_RICMP; } else if (realpt[9] == IPPROTO_UDP) { struct sockaddr_in sin; shutdown(s,1); closesocket(s); s = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP); sin.sin_family = AF_INET; sin.sin_addr.s_addr = INADDR_ANY; sin.sin_port = htons(realpt[20] * 256 + realpt[21]); bind(s,(struct sockaddr *)&sin,sizeof(sin)); sb->dtable[sd-1] = s; sb->ftable[sd-1]&= ~SF_RAW_RAW; sb->ftable[sd-1]|= SF_RAW_RUDP; } else { write_log(_T("Unknown RAW protocol %d\n"), realpt[9]); } } BEGINBLOCKING; for (;;) { PREPARE_THREAD; if (sb->ftable[sd - 1] & SF_RAW_UDP) { // Copy DST-Port sa->sin_port = htons(realpt[2] * 256 + realpt[3]); iCut = 8; } else if (sb->ftable[sd - 1] & SF_RAW_RUDP) { int iTTL = realpt[8]; setsockopt(s,IPPROTO_IP,IP_TTL,(char*) &iTTL,sizeof(iTTL)); // Copy DST-Port sa->sin_port = htons(realpt[22] * 256 + realpt[23]); iCut = 28; } else if (sb->ftable[sd - 1] & SF_RAW_RICMP) { int iTTL = realpt[8]; setsockopt(s,IPPROTO_IP,IP_TTL,(char*) &iTTL,sizeof(iTTL)); iCut = 20; } sockreq.params.sendto_s.realpt = realpt + iCut; sockreq.params.sendto_s.len = len - iCut; sockreq.packet_type = sendto_req; sockreq.s = s; sockreq.sb = sb; sockreq.params.sendto_s.buf = buf; sockreq.params.sendto_s.sd = sd; sockreq.params.sendto_s.msg = msg; sockreq.params.sendto_s.flags = flags; sockreq.params.sendto_s.to = to; sockreq.params.sendto_s.tolen = tolen; sockreq.wscnt = wscnt; TRIGGER_THREAD; sb->resultval += iCut; if (sb->resultval == -1) { if (sb->sb_errno != WSAEWOULDBLOCK - WSABASEERR || !(sb->ftable[sd - 1] & SF_BLOCKING)) break; } else { realpt += sb->resultval; len -= sb->resultval; if (len <= 0) break; else continue; } if (sb->mtable[sd - 1] || (wMsg = allocasyncmsg(sb, sd, s)) != 0) { if (sb->mtable[sd - 1] == 0) { WSAAsyncSelect(s,hWndSelector ? hAmigaWnd : bsd->hSockWnd,wMsg,FD_WRITE); } else { setWSAAsyncSelect(sb, sd, s, FD_WRITE); } WAITSIGNAL; if (sb->mtable[sd-1] == 0) { cancelasyncmsg(context, wMsg); } else { setWSAAsyncSelect(sb, sd, s, 0); } if (sb->eintr) { BSDTRACE((_T("[interrupted]\n"))); return; } } else break; } ENDBLOCKING; } else sb->resultval = -1; if (sb->resultval == -1) BSDTRACE((_T("sendto failed (%d):%d\n"),sb->sb_errno,wscnt)); else BSDTRACE((_T("sendto %d:%d\n"),sb->resultval,wscnt)); } void host_recvfrom(TrapContext *context, SB, uae_u32 sd, uae_u32 msg, uae_u32 len, uae_u32 flags, uae_u32 addr, uae_u32 addrlen) { SOCKET s; uae_char *realpt; struct sockaddr *rp_addr = NULL; int hlen; unsigned int wMsg; int waitall, waitallgot; static int wscounter; int wscnt; wscnt = ++wscounter; if (addr) BSDTRACE((_T("recvfrom(%d,0x%x,%d,0x%x,0x%x,%d):%d -> "),sd,msg,len,flags,addr,get_long (addrlen),wscnt)); else BSDTRACE((_T("recv(%d,0x%x,%d,0x%x):%d -> "),sd,msg,len,flags,wscnt)); sd++; s = getsock(sb,sd); if (s != INVALID_SOCKET) { if (!addr_valid (_T("host_recvfrom1"), msg, 4)) return; realpt = (char*)get_real_address (msg); if (addr) { if (!addr_valid (_T("host_recvfrom1"), addrlen, 4)) return; hlen = get_long (addrlen); if (!addr_valid (_T("host_recvfrom2"), addr, hlen)) return; rp_addr = (struct sockaddr *)get_real_address (addr); } BEGINBLOCKING; waitall = flags & 0x40; flags &= ~0x40; waitallgot = 0; for (;;) { PREPARE_THREAD; sockreq.packet_type = recvfrom_req; sockreq.s = s; sockreq.sb = sb; sockreq.params.recvfrom_s.addr = addr; sockreq.params.recvfrom_s.flags = flags; sockreq.params.recvfrom_s.hlen = &hlen; sockreq.params.recvfrom_s.len = len; sockreq.params.recvfrom_s.realpt = realpt; sockreq.params.recvfrom_s.rp_addr = rp_addr; sockreq.wscnt = wscnt; TRIGGER_THREAD; if (waitall) { if (sb->resultval > 0) { int l = sb->resultval; realpt += l; len -= l; waitallgot += l; if (len <= 0) { sb->resultval = waitallgot; break; } else { sb->sb_errno = WSAEWOULDBLOCK - WSABASEERR; sb->resultval = -1; } } else if (sb->resultval == 0) { sb->resultval = waitallgot; } } if (sb->resultval == -1) { if (sb->sb_errno == WSAEWOULDBLOCK - WSABASEERR && (sb->ftable[sd-1] & SF_BLOCKING)) { if (sb->mtable[sd-1] || (wMsg = allocasyncmsg(sb,sd,s)) != 0) { if (sb->mtable[sd-1] == 0) { WSAAsyncSelect(s, hWndSelector ? hAmigaWnd : bsd->hSockWnd, wMsg, FD_READ|FD_CLOSE); } else { setWSAAsyncSelect(sb, sd, s, FD_READ|FD_CLOSE); } WAITSIGNAL; if (sb->mtable[sd-1] == 0) { cancelasyncmsg(context, wMsg); } else { setWSAAsyncSelect(sb, sd, s, 0); } if (sb->eintr) { BSDTRACE((_T("[interrupted]\n"))); return; } } else break; } else break; } else break; } ENDBLOCKING; if (addr) { prepamigaaddr(rp_addr,hlen); put_long (addrlen,hlen); } } else sb->resultval = -1; if (sb->resultval == -1) BSDTRACE((_T("recv failed (%d):%d\n"),sb->sb_errno,wscnt)); else BSDTRACE((_T("recv %d:%d\n"),sb->resultval,wscnt)); } uae_u32 host_shutdown(SB, uae_u32 sd, uae_u32 how) { SOCKET s; BSDTRACE((_T("shutdown(%d,%d) -> "),sd,how)); sd++; s = getsock(sb,sd); if (s != INVALID_SOCKET) { if (shutdown(s,how)) { SETERRNO; BSDTRACE((_T("failed (%d)\n"),sb->sb_errno)); } else { BSDTRACE((_T("OK\n"))); return 0; } } return -1; } void host_setsockopt(SB, uae_u32 sd, uae_u32 level, uae_u32 optname, uae_u32 optval, uae_u32 len) { SOCKET s; uae_char buf[MAXADDRLEN]; int i; BSDTRACE((_T("setsockopt(%d,%d,0x%x,0x%x[0x%x],%d) -> "),sd,(short)level,optname,optval,get_long(optval),len)); sd++; s = getsock(sb,sd); if (s != INVALID_SOCKET) { if (len > sizeof buf) { write_log (_T("BSDSOCK: WARNING - Excessive optlen in setsockopt() (%d)\n"), len); len = sizeof buf; } #if 1 if (level == IPPROTO_IP && optname == IP_HDRINCL) { // IP_HDRINCL emulated by icmp.dll sb->resultval = 0; return; } #endif for (i = 0; i < len / 4; i++) { ((long*)buf)[i] = get_long (optval + i * 4); } if (len - i == 2) ((long*)buf)[i] = get_word (optval + i * 4); else if (len - i == 1) ((long*)buf)[i] = get_byte (optval + i * 4); /* timeval -> milliseconds */ if (level == SOL_SOCKET && (optname == SO_SNDTIMEO || optname == SO_RCVTIMEO)) { uae_u32 millis = ((long*)buf)[0] * 1000 + ((long*)buf)[1] / 1000; ((long*)buf)[0] = millis; len = 4; } // handle SO_EVENTMASK if (level == SOL_SOCKET && optname == 0x2001) { long wsbevents = 0; uae_u32 eventflags = get_long (optval); sb->ftable[sd-1] = (sb->ftable[sd-1] & ~REP_ALL) | (eventflags & REP_ALL); if (eventflags & REP_ACCEPT) wsbevents |= FD_ACCEPT; if (eventflags & REP_CONNECT) wsbevents |= FD_CONNECT; if (eventflags & REP_OOB) wsbevents |= FD_OOB; if (eventflags & REP_READ) wsbevents |= FD_READ; if (eventflags & REP_WRITE) wsbevents |= FD_WRITE; if (eventflags & REP_CLOSE) wsbevents |= FD_CLOSE; if (sb->mtable[sd-1] || (sb->mtable[sd-1] = allocasyncmsg(sb,sd,s))) { WSAAsyncSelect(s,hWndSelector ? hAmigaWnd : bsd->hSockWnd,sb->mtable[sd-1],wsbevents); sb->resultval = 0; } else sb->resultval = -1; } else { sb->resultval = setsockopt(s,level,optname,buf,len); } if (!sb->resultval) { BSDTRACE((_T("OK\n"))); return; } else SETERRNO; BSDTRACE((_T("failed (%d)\n"),sb->sb_errno)); } } uae_u32 host_getsockopt(SB, uae_u32 sd, uae_u32 level, uae_u32 optname, uae_u32 optval, uae_u32 optlen) { SOCKET s; uae_char buf[MAXADDRLEN]; int len = sizeof buf; uae_u32 outlen; if (optval) outlen = get_long (optlen); else outlen = 0; BSDTRACE((_T("getsockopt(%d,%d,0x%x,0x%x,0x%x[%d]) -> "),sd,(short)level,optname,optval,optlen,outlen)); sd++; s = getsock(sb,sd); if (s != INVALID_SOCKET) { if (!getsockopt(s,level,optname,buf,&len)) { BSDTRACE((_T("0x%x, %d -> "), *((long*)buf), len)); uae_u32 outcnt = 0; if (outlen) { if (level == SOL_SOCKET && (optname == SO_SNDTIMEO || optname == SO_RCVTIMEO)) { /* long milliseconds -> timeval */ uae_u32 millis = *((long*)buf); ((long*)buf)[0] = millis / 1000; /* secs */ ((long*)buf)[1] = (millis % 1000) * 1000; /* usecs */ len = 8; } // len can equal 1 */ for (int i = 0; i < len; i += 4) { uae_u32 v; if (len - i >= 4) v = *((long*)(buf + i)); else if (len - i >= 2) v = *((short*)(buf + i)); else v = buf[i]; if (outlen >= 4) { put_long (optval + outcnt, v); outlen -= 4; outcnt += 4; } else if (outlen >= 2) { put_word (optval + outcnt, v); outlen -= 2; outcnt += 2; } else if (outlen > 0) { put_byte (optval + outcnt, v); outlen -= 1; outcnt += 1; } } put_long (optlen,outcnt); } BSDTRACE((_T("OK (%d,0x%x)\n"),outcnt,get_long(optval))); return 0; } else { SETERRNO; BSDTRACE((_T("failed (%d)\n"),sb->sb_errno)); } } return -1; } uae_u32 host_getsockname(SB, uae_u32 sd, uae_u32 name, uae_u32 namelen) { SOCKET s; int len; struct sockaddr *rp_name; sd++; if (!addr_valid (_T("host_getsockname1"), namelen, 4)) return -1; len = get_long (namelen); BSDTRACE((_T("getsockname(%d,0x%x,%d) -> "),sd,name,len)); s = getsock(sb,sd); if (s != INVALID_SOCKET) { if (!addr_valid (_T("host_getsockname2"), name, len)) return -1; rp_name = (struct sockaddr *)get_real_address (name); if (getsockname(s,rp_name,&len)) { SETERRNO; BSDTRACE((_T("failed (%d)\n"),sb->sb_errno)); } else { BSDTRACE((_T("%d\n"),len)); prepamigaaddr(rp_name,len); put_long (namelen,len); return 0; } } return -1; } uae_u32 host_getpeername(SB, uae_u32 sd, uae_u32 name, uae_u32 namelen) { SOCKET s; int len; struct sockaddr *rp_name; sd++; if (!addr_valid (_T("host_getpeername1"), namelen, 4)) return -1; len = get_long (namelen); BSDTRACE((_T("getpeername(%d,0x%x,%d) -> "),sd,name,len)); s = getsock(sb,sd); if (s != INVALID_SOCKET) { if (!addr_valid (_T("host_getpeername2"), name, len)) return -1; rp_name = (struct sockaddr *)get_real_address (name); if (getpeername(s,rp_name,&len)) { SETERRNO; BSDTRACE((_T("failed (%d)\n"),sb->sb_errno)); } else { BSDTRACE((_T("%d\n"),len)); prepamigaaddr(rp_name,len); put_long (namelen,len); return 0; } } return -1; } uae_u32 host_IoctlSocket(TrapContext *context, SB, uae_u32 sd, uae_u32 request, uae_u32 arg) { SOCKET s; uae_u32 data; int success = SOCKET_ERROR; BSDTRACE((_T("IoctlSocket(%d,0x%x,0x%x) "),sd,request,arg)); sd++; s = getsock(sb,sd); if (s != INVALID_SOCKET) { switch (request) { case FIOSETOWN: sb->ownertask = get_long (arg); success = 0; break; case FIOGETOWN: put_long (arg,sb->ownertask); success = 0; break; case FIONBIO: BSDTRACE((_T("[FIONBIO] -> "))); if (get_long (arg)) { BSDTRACE((_T("nonblocking\n"))); sb->ftable[sd-1] &= ~SF_BLOCKING; } else { BSDTRACE((_T("blocking\n"))); sb->ftable[sd-1] |= SF_BLOCKING; } success = 0; break; case FIONREAD: ioctlsocket(s,request,(u_long *)&data); BSDTRACE((_T("[FIONREAD] -> %d\n"),data)); put_long (arg,data); success = 0; break; case FIOASYNC: if (get_long (arg)) { sb->ftable[sd-1] |= REP_ALL; BSDTRACE((_T("[FIOASYNC] -> enabled\n"))); if (sb->mtable[sd-1] || (sb->mtable[sd-1] = allocasyncmsg(sb,sd,s))) { WSAAsyncSelect(s,hWndSelector ? hAmigaWnd : bsd-> hSockWnd, sb->mtable[sd-1], FD_ACCEPT | FD_CONNECT | FD_OOB | FD_READ | FD_WRITE | FD_CLOSE); success = 0; break; } } else write_log (_T("BSDSOCK: WARNING - FIOASYNC disabling unsupported.\n")); success = -1; break; default: write_log (_T("BSDSOCK: WARNING - Unknown IoctlSocket request: 0x%08lx\n"), request); bsdsocklib_seterrno(sb, 22); // EINVAL break; } } return success; } int host_CloseSocket(TrapContext *context, SB, int sd) { unsigned int wMsg; SOCKET s; BSDTRACE((_T("CloseSocket(%d) -> "),sd)); sd++; s = getsock(sb,sd); if (s != INVALID_SOCKET) { if (sb->mtable[sd-1]) { bsd->asyncsb[(sb->mtable[sd-1]-0xb000)/2] = NULL; sb->mtable[sd-1] = 0; } if (checksd(context, sb ,sd) == TRUE) return 0; BEGINBLOCKING; for (;;) { shutdown(s,1); if (!closesocket(s)) { releasesock(context, sb, sd); BSDTRACE((_T("OK\n"))); return 0; } SETERRNO; if (sb->sb_errno != WSAEWOULDBLOCK-WSABASEERR || !(sb->ftable[sd-1] & SF_BLOCKING)) break; if ((wMsg = allocasyncmsg(sb,sd,s)) != 0) { WSAAsyncSelect(s,hWndSelector ? hAmigaWnd : bsd->hSockWnd,wMsg,FD_CLOSE); WAITSIGNAL; cancelasyncmsg(context, wMsg); if (sb->eintr) { BSDTRACE((_T("[interrupted]\n"))); break; } } else break; } ENDBLOCKING; } BSDTRACE((_T("failed (%d)\n"),sb->sb_errno)); return -1; } // For the sake of efficiency, we do not malloc() the fd_sets here. // 64 sockets should be enough for everyone. static void makesocktable(SB, uae_u32 fd_set_amiga, struct fd_set *fd_set_win, int nfds, SOCKET addthis, const TCHAR *name) { int i, j; uae_u32 currlong, mask; SOCKET s; if (addthis != INVALID_SOCKET) { *fd_set_win->fd_array = addthis; fd_set_win->fd_count = 1; } else fd_set_win->fd_count = 0; if (!fd_set_amiga) { fd_set_win->fd_array[fd_set_win->fd_count] = INVALID_SOCKET; return; } if (nfds > sb->dtablesize) { write_log (_T("BSDSOCK: ERROR - select()ing more sockets (%d) than socket descriptors available (%d)!\n"), nfds, sb->dtablesize); nfds = sb->dtablesize; } for (j = 0; ; j += 32, fd_set_amiga += 4) { currlong = get_long (fd_set_amiga); mask = 1; for (i = 0; i < 32; i++, mask <<= 1) { if (i+j > nfds) { fd_set_win->fd_array[fd_set_win->fd_count] = INVALID_SOCKET; return; } if (currlong & mask) { s = getsock(sb,j+i+1); if (s != INVALID_SOCKET) { BSDTRACE((_T("%s:%d=%x\n"), name, fd_set_win->fd_count, s)); fd_set_win->fd_array[fd_set_win->fd_count++] = s; if (fd_set_win->fd_count >= FD_SETSIZE) { write_log (_T("BSDSOCK: ERROR - select()ing more sockets (%d) than the hard-coded fd_set limit (%d) - please report\n"), nfds, FD_SETSIZE); return; } } } } } fd_set_win->fd_array[fd_set_win->fd_count] = INVALID_SOCKET; } static void makesockbitfield(SB, uae_u32 fd_set_amiga, struct fd_set *fd_set_win, int nfds) { int n, i, j, val, mask; SOCKET currsock; for (n = 0; n < nfds; n += 32) { val = 0; mask = 1; for (i = 0; i < 32; i++, mask <<= 1) { if ((currsock = getsock(sb, n+i+1)) != INVALID_SOCKET) { // Do not use sb->dtable directly because of Newsrog for (j = fd_set_win->fd_count; j--; ) { if (fd_set_win->fd_array[j] == currsock) { val |= mask; break; } } } } put_long (fd_set_amiga, val); fd_set_amiga += 4; } } static void fd_zero(uae_u32 fdset, uae_u32 nfds) { unsigned int i; for (i = 0; i < nfds; i += 32, fdset += 4) put_long (fdset,0); } // This seems to be the only way of implementing a cancelable WinSock2 select() call... sigh. static unsigned int thread_WaitSelect2(void *indexp) { int index = *((int*)indexp); unsigned int result = 0, resultval; int wscnt; long nfds; uae_u32 readfds, writefds, exceptfds; uae_u32 timeout; struct fd_set readsocks, writesocks, exceptsocks; struct timeval tv; volatile struct threadargsw *args; SB; while (bsd->hEvents[index]) { if (WaitForSingleObject(bsd->hEvents[index], INFINITE) == WAIT_ABANDONED) break; if (bsd->hEvents[index] == NULL) break; if ((args = bsd->threadargsw[index]) != NULL) { sb = args->sb; nfds = args->nfds; readfds = args->readfds; writefds = args->writefds; exceptfds = args->exceptfds; timeout = args->timeout; wscnt = args->wscnt; // construct descriptor tables makesocktable(sb, readfds, &readsocks, nfds, sb->sockAbort, _T("R")); if (writefds) makesocktable(sb, writefds, &writesocks, nfds, INVALID_SOCKET, _T("W")); if (exceptfds) makesocktable(sb, exceptfds, &exceptsocks, nfds, INVALID_SOCKET, _T("E")); if (timeout) { tv.tv_sec = get_long (timeout); tv.tv_usec = get_long (timeout+4); BSDTRACE((_T("(to: %d.%06d) "),tv.tv_sec,tv.tv_usec)); } BSDTRACE((_T("tWS2(%d) -> "), wscnt)); resultval = select(nfds+1, readsocks.fd_count > 0 ? &readsocks : NULL, writefds && writesocks.fd_count > 0 ? &writesocks : NULL, exceptfds && exceptsocks.fd_count > 0 ? &exceptsocks : NULL, timeout ? &tv : NULL); if (bsd->hEvents[index] == NULL) break; BSDTRACE((_T("tWS2(%d,%d) -> "), resultval, wscnt)); if (resultval == 0) { BSDTRACE((_T("timeout -> "))); } sb->resultval = resultval; if (sb->resultval == SOCKET_ERROR) { // select was stopped by sb->sockAbort if (readsocks.fd_count > 1) { makesocktable(sb, readfds, &readsocks, nfds, INVALID_SOCKET, _T("R2")); tv.tv_sec = 0; tv.tv_usec = 10000; // Check for 10ms if data is available resultval = select(nfds+1, &readsocks, writefds ? &writesocks : NULL,exceptfds ? &exceptsocks : NULL,&tv); if (bsd->hEvents[index] == NULL) break; sb->resultval = resultval; #if 0 /* what was this doing here? */ if (sb->resultval == 0) { // Now timeout -> really no data available if (GetLastError() != 0) { sb->resultval = SOCKET_ERROR; // Set old resultval } } #endif } } if (FD_ISSET(sb->sockAbort,&readsocks)) { BSDTRACE((_T("tWS2 abort %d:%d\n"), sb->resultval, wscnt)); if (sb->resultval != SOCKET_ERROR) { sb->resultval--; } } else { sb->needAbort = 0; } if (sb->resultval == SOCKET_ERROR) { SETERRNO; BSDTRACE((_T("tWS2 failed %d:%d - "),sb->sb_errno,wscnt)); if (readfds) fd_zero(readfds,nfds); if (writefds) fd_zero(writefds,nfds); if (exceptfds) fd_zero(exceptfds,nfds); } else { BSDTRACE((_T("tWS2 ok %d\n"), wscnt)); if (readfds) makesockbitfield(sb,readfds,&readsocks,nfds); if (writefds) makesockbitfield(sb,writefds,&writesocks,nfds); if (exceptfds) makesockbitfield(sb,exceptfds,&exceptsocks,nfds); } SETSIGNAL; bsd->threadargsw[index] = NULL; SetEvent(sb->hEvent); } } write_log (_T("BSDSOCK: thread_WaitSelect2 terminated\n")); THREADEND(result); return result; } static unsigned int __stdcall thread_WaitSelect(void *p) { __try { return thread_WaitSelect2 (p); } __except(WIN32_ExceptionFilter(GetExceptionInformation(), GetExceptionCode())) { } return 0; } static void fddebug(const TCHAR *name, uae_u32 nfds, uae_u32 fd) { if (!ISBSDTRACE) return; if (!nfds) return; if (!fd) return; TCHAR out[40]; uae_u32 v = get_long (fd); for (int i = 0; i < nfds && i < 32; i++) { out[i] = (v & (1 << i)) ? 'x' : '-'; out[i + 1] = 0; } BSDTRACE((_T("%s: %08x %s\n"), name, v, out)); } void host_WaitSelect(TrapContext *context, SB, uae_u32 nfds, uae_u32 readfds, uae_u32 writefds, uae_u32 exceptfds, uae_u32 timeout, uae_u32 sigmp) { static int wscount; uae_u32 sigs, wssigs; int i; struct threadargsw taw; int wscnt; wscnt = ++wscount; wssigs = sigmp ? get_long (sigmp) : 0; BSDTRACE((_T("WaitSelect(%d,0x%x,0x%x,0x%x,0x%x,0x%x):%d\n"), nfds, readfds, writefds, exceptfds, timeout, wssigs, wscnt)); fddebug(_T("read :"), nfds, readfds); fddebug(_T("write :"), nfds, writefds); fddebug(_T("except:"), nfds, exceptfds); if (!readfds && !writefds && !exceptfds && !timeout && !wssigs) { sb->resultval = 0; BSDTRACE((_T("-> [ignored]\n"))); return; } if (wssigs) { m68k_dreg (regs,0) = 0; m68k_dreg (regs,1) = wssigs; sigs = CallLib (context, sb->sysbase, -0x132) & wssigs; // SetSignal() if (sigs) { BSDTRACE((_T("-> [preempted by signals 0x%08lx]\n"),sigs & wssigs)); put_long (sigmp,sigs & wssigs); // Check for zero address -> otherwise WinUAE crashes if (readfds) fd_zero(readfds,nfds); if (writefds) fd_zero(writefds,nfds); if (exceptfds) fd_zero(exceptfds,nfds); sb->resultval = 0; bsdsocklib_seterrno(sb,0); return; } } if (nfds == 0) { // No sockets to check, only wait for signals if (wssigs != 0) { m68k_dreg (regs, 0) = wssigs; sigs = CallLib (context, sb->sysbase, -0x13e); // Wait() put_long (sigmp, sigs & wssigs); } if (readfds) fd_zero(readfds,nfds); if (writefds) fd_zero(writefds,nfds); if (exceptfds) fd_zero(exceptfds,nfds); sb->resultval = 0; return; } ResetEvent(sb->hEvent); sb->needAbort = 1; locksigqueue (); for (i = 0; i < MAX_SELECT_THREADS; i++) { if (bsd->hThreads[i] && !bsd->threadargsw[i]) break; } if (i >= MAX_SELECT_THREADS) { for (i = 0; i < MAX_SELECT_THREADS; i++) { if (!bsd->hThreads[i]) { bsd->hEvents[i] = CreateEvent(NULL,FALSE,FALSE,NULL); bsd->hThreads[i] = THREAD(thread_WaitSelect, &threadindextable[i]); if (bsd->hEvents[i] == NULL || bsd->hThreads[i] == NULL) { bsd->hThreads[i] = 0; unlocksigqueue (); write_log (_T("BSDSOCK: ERROR - Thread/Event creation failed - error code: %d\n"), GetLastError()); bsdsocklib_seterrno(sb,12); // ENOMEM sb->resultval = -1; return; } // this should improve responsiveness SetThreadPriority(bsd->hThreads[i], THREAD_PRIORITY_ABOVE_NORMAL); break; } } } unlocksigqueue (); if (i >= MAX_SELECT_THREADS) { write_log (_T("BSDSOCK: ERROR - Too many select()s, %d\n"), wscnt); } else { SOCKET newsock = INVALID_SOCKET; taw.sb = sb; taw.nfds = nfds; taw.readfds = readfds; taw.writefds = writefds; taw.exceptfds = exceptfds; taw.timeout = timeout; taw.wscnt = wscnt; bsd->threadargsw[i] = &taw; SetEvent(bsd->hEvents[i]); m68k_dreg (regs, 0) = (((uae_u32)1) << sb->signal) | sb->eintrsigs | wssigs; sigs = CallLib (context, sb->sysbase, -0x13e); // Wait() /* if ((1<signal) & sigs) { // 2.3.2002/SR Fix for AmiFTP -> Thread is ready, no need to Abort sb->needAbort = 0; } */ if (sb->needAbort) { if ((newsock = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP)) == INVALID_SOCKET) write_log (_T("BSDSOCK: ERROR - Cannot create socket: %d, %d\n"), WSAGetLastError(),wscnt); shutdown(sb->sockAbort,1); if (newsock != sb->sockAbort) { shutdown(sb->sockAbort, 1); closesocket(sb->sockAbort); } } WaitForSingleObject(sb->hEvent, INFINITE); CANCELSIGNAL; if (newsock != INVALID_SOCKET) sb->sockAbort = newsock; if(sigmp) put_long (sigmp, sigs & wssigs); if (sigs & wssigs) { uae_u32 gotsigs = sigs & wssigs; BSDTRACE((_T("[interrupted by signals 0x%08lx]:%d\n"), gotsigs, wscnt)); if (readfds) fd_zero(readfds,nfds); if (writefds) fd_zero(writefds,nfds); if (exceptfds) fd_zero(exceptfds,nfds); bsdsocklib_seterrno(sb,0); sb->resultval = 0; } else if (sigs & sb->eintrsigs) { uae_u32 gotsigs = sigs & sb->eintrsigs; BSDTRACE((_T("[interrupted 0x%08x]:%d\n"), gotsigs, wscnt)); sb->resultval = -1; bsdsocklib_seterrno(sb,4); // EINTR /* EINTR signals are kept active */ m68k_dreg (regs,0) = gotsigs; m68k_dreg (regs,1) = gotsigs; CallLib (context, sb->sysbase, -0x132); // SetSignal } if (sb->resultval >= 0) { BSDTRACE((_T("WaitSelect, %d:%d\n"),sb->resultval,wscnt)); } else { BSDTRACE((_T("WaitSelect error, %d errno %d:%d\n"),sb->resultval,sb->sb_errno,wscnt)); } } } uae_u32 host_Inet_NtoA(TrapContext *context, SB, uae_u32 in) { uae_char *addr; struct in_addr ina; uae_u32 scratchbuf; *(uae_u32 *)&ina = htonl(in); BSDTRACE((_T("Inet_NtoA(%x) -> "),in)); if ((addr = inet_ntoa(ina)) != NULL) { scratchbuf = m68k_areg (regs,6) + offsetof(struct UAEBSDBase,scratchbuf); strncpyha(scratchbuf,addr,SCRATCHBUFSIZE); if (ISBSDTRACE) { TCHAR *s = au (addr); BSDTRACE((_T("%s\n"),s)); xfree (s); } return scratchbuf; } else SETERRNO; BSDTRACE((_T("failed (%d)\n"),sb->sb_errno)); return 0; } uae_u32 host_inet_addr(uae_u32 cp) { uae_u32 addr; char *cp_rp; if (!addr_valid (_T("host_inet_addr"), cp, 4)) return 0; cp_rp = (char*)get_real_address (cp); addr = htonl(inet_addr(cp_rp)); if (ISBSDTRACE) { TCHAR *s = au (cp_rp); BSDTRACE((_T("inet_addr(%s) -> 0x%08lx\n"),s,addr)); xfree (s); } return addr; } int isfullscreen (void); static BOOL CheckOnline(SB) { DWORD dwFlags; BOOL bReturn = TRUE; #ifdef FSUAE // We don't mess with the dialer in FS-UAE #else if (InternetGetConnectedState(&dwFlags,0) == FALSE) { // Internet is offline if (InternetAttemptConnect(0) != ERROR_SUCCESS) { // Show Dialer window sb->sb_errno = 10001; sb->sb_herrno = 1; bReturn = FALSE; // No success or aborted } if (isfullscreen() > 0) { ShowWindow (hAmigaWnd, SW_RESTORE); SetActiveWindow(hAmigaWnd); } } #endif return bReturn; } #define GET_STATE_FREE 0 #define GET_STATE_ACTIVE 1 #define GET_STATE_CANCEL 2 #define GET_STATE_FINISHED 3 #define GET_STATE_DONE 4 #define GET_STATE_REALLY_DONE 5 static unsigned int thread_get2 (void *indexp) { int index = *((int*)indexp); int wscnt; unsigned int result = 0; volatile struct threadargs *args; uae_u32 name; uae_u32 namelen; long addrtype; char *name_rp; SB; while (bsd->hGetEvents[index]) { if (WaitForSingleObject(bsd->hGetEvents[index], INFINITE) == WAIT_ABANDONED) break; if (bsd->hGetEvents[index] == NULL) break; args = bsd->threadGetargs[index]; BSDTRACE((_T("tg2 %p,%d,%d:%d -> "), args->sb, index, bsd->threadGetargs_inuse[index], args->wscnt)); if (bsd->threadGetargs_inuse[index] == GET_STATE_ACTIVE) { wscnt = args->wscnt; sb = args->sb; if (args->args1 == 0) { // gethostbyname or gethostbyaddr struct hostent *host; name = args->args2; namelen = args->args3; addrtype = args->args4; if (addr_valid (_T("thread_get1"), name, 1)) name_rp = (char*)get_real_address (name); else name_rp = ""; if (strchr (name_rp, '.') == 0 || CheckOnline(sb) == TRUE) { // Local Address or Internet Online ? BSDTRACE((_T("tg2_0a %d:%d -> "),addrtype,wscnt)); if (addrtype == -1) { host = gethostbyname (name_rp); } else { host = gethostbyaddr (name_rp, namelen, addrtype); } BSDTRACE((_T("tg2_0b %d -> "), wscnt)); if (bsd->threadGetargs_inuse[index] != GET_STATE_CANCEL) { // No CTRL-C Signal if (host == 0) { // Error occured SETERRNO; BSDTRACE((_T("tg2_0 failed %d:%d -> "), sb->sb_errno,wscnt)); } else { bsdsocklib_seterrno(sb, 0); memcpy((void*)args->buf, host, sizeof(HOSTENT)); } } } } else if (args->args1 == 1) { // getprotobyname struct protoent *proto; name = args->args2; if (addr_valid (_T("thread_get2"), name, 1)) name_rp = (char*)get_real_address (name); else name_rp = ""; proto = getprotobyname (name_rp); if (bsd->threadGetargs_inuse[index] != GET_STATE_CANCEL) { // No CTRL-C Signal if (proto == 0) { // Error occured SETERRNO; BSDTRACE((_T("tg2_1 failed %d:%d -> "), sb->sb_errno, wscnt)); } else { bsdsocklib_seterrno(sb, 0); memcpy((void*)args->buf, proto, sizeof(struct protoent)); } } } else if (args->args1 == 2) { // getservbyport and getservbyname uae_u32 nameport; uae_u32 proto; uae_u32 type; char *proto_rp = 0; struct servent *serv; nameport = args->args2; proto = args->args3; type = args->args4; if (proto) { if (addr_valid (_T("thread_get3"), proto, 1)) proto_rp = (char*)get_real_address (proto); } if (type) { serv = getservbyport(nameport, proto_rp); } else { if (addr_valid (_T("thread_get4"), nameport, 1)) name_rp = (char*)get_real_address (nameport); serv = getservbyname(name_rp, proto_rp); } if (bsd->threadGetargs_inuse[index] != GET_STATE_CANCEL) { // No CTRL-C Signal if (serv == 0) { // Error occured SETERRNO; BSDTRACE((_T("tg2_2 failed %d:%d -> "), sb->sb_errno, wscnt)); } else { bsdsocklib_seterrno(sb, 0); memcpy((void*)args->buf, serv, sizeof (struct servent)); } } } locksigqueue (); bsd->threadGetargs_inuse[index] = GET_STATE_FINISHED; unlocksigqueue (); SETSIGNAL; locksigqueue (); bsd->threadGetargs_inuse[index] = GET_STATE_DONE; unlocksigqueue (); SetEvent(bsd->hGetEvents2[index]); BSDTRACE((_T("tg2 done %d:%d\n"), index, wscnt)); } } write_log (_T("BSDSOCK: thread_get2 terminated\n")); THREADEND(result); return result; } static unsigned int __stdcall thread_get(void *p) { __try { return thread_get2 (p); } __except(WIN32_ExceptionFilter(GetExceptionInformation(), GetExceptionCode())) { } return 0; } static int run_get_thread(TrapContext *context, SB, struct threadargs *args) { int i; sb->eintr = 0; locksigqueue (); for (i = 0; i < MAX_GET_THREADS; i++) { if (bsd->threadGetargs_inuse[i] == GET_STATE_REALLY_DONE) { bsd->threadGetargs_inuse[i] = GET_STATE_FREE; } if (bsd->hGetThreads[i] && bsd->threadGetargs_inuse[i] == GET_STATE_FREE) { break; } } if (i >= MAX_GET_THREADS) { for (i = 0; i < MAX_GET_THREADS; i++) { if (bsd->hGetThreads[i] == NULL) { bsd->threadGetargs_inuse[i] = GET_STATE_FREE; bsd->hGetEvents[i] = CreateEvent(NULL,FALSE,FALSE,NULL); bsd->hGetEvents2[i] = CreateEvent(NULL,FALSE,FALSE,NULL); if (bsd->hGetEvents[i] && bsd->hGetEvents2[i]) bsd->hGetThreads[i] = THREAD(thread_get, &threadindextable[i]); if (bsd->hGetEvents[i] == NULL || bsd->hGetEvents2[i] == NULL || bsd->hGetThreads[i] == NULL) { if (bsd->hGetEvents[i]) CloseHandle (bsd->hGetEvents[i]); bsd->hGetEvents[i] = NULL; if (bsd->hGetEvents2[i]) CloseHandle (bsd->hGetEvents2[i]); bsd->hGetEvents2[i] = NULL; write_log (_T("BSDSOCK: ERROR - Thread/Event creation failed - error code: %d:%d\n"), GetLastError(), args->wscnt); bsdsocklib_seterrno(sb, 12); // ENOMEM sb->resultval = -1; unlocksigqueue (); return -1; } bsdsetpriority (bsd->hGetThreads[i]); break; } } } if (i >= MAX_GET_THREADS) { write_log (_T("BSDSOCK: ERROR - Too many gethostbyname()s:%d\n"), args->wscnt); bsdsocklib_seterrno(sb, 12); // ENOMEM sb->resultval = -1; unlocksigqueue (); return -1; } else { bsd->threadGetargs[i] = args; bsd->threadGetargs_inuse[i] = GET_STATE_ACTIVE; ResetEvent(bsd->hGetEvents2[i]); SetEvent(bsd->hGetEvents[i]); } unlocksigqueue (); while (bsd->threadGetargs_inuse[i] != GET_STATE_FINISHED && bsd->threadGetargs_inuse[i] != GET_STATE_DONE) { WAITSIGNAL; locksigqueue (); int inuse = bsd->threadGetargs_inuse[i]; if (sb->eintr == 1 && inuse != GET_STATE_FINISHED && inuse != GET_STATE_DONE) bsd->threadGetargs_inuse[i] = GET_STATE_CANCEL; unlocksigqueue (); } if (bsd->threadGetargs_inuse[i] >= GET_STATE_FINISHED) WaitForSingleObject(bsd->hGetEvents2[i], INFINITE); CANCELSIGNAL; return i; } static void release_get_thread(int index) { if (index < 0) return; bsd->threadGetargs_inuse[index] = GET_STATE_REALLY_DONE; } void host_gethostbynameaddr (TrapContext *context, SB, uae_u32 name, uae_u32 namelen, long addrtype) { static int wscounter; HOSTENT *h; int size, numaliases = 0, numaddr = 0; uae_u32 aptr; char *name_rp; int i, tindex; struct threadargs args; volatile struct threadargs *argsp; uae_u32 addr; uae_u32 *addr_list[2]; volatile uae_char *buf; unsigned int wMsg = 0; // TCHAR on = 1; // InternetSetOption(0,INTERNET_OPTION_SETTINGS_CHANGED,&on,strlen(&on)); // Do not use: Causes locks with some machines tindex = -1; memset(&args, 0, sizeof (args)); argsp = &args; argsp->wscnt = ++wscounter; buf = argsp->buf; name_rp = ""; if (addr_valid (_T("host_gethostbynameaddr"), name, 1)) name_rp = (char*)get_real_address (name); if (addrtype == -1) { if (ISBSDTRACE) { TCHAR *s = au (name_rp); BSDTRACE((_T("gethostbyname(%s) -> "),s)); xfree (s); } // workaround for numeric host "names" if ((addr = inet_addr(name_rp)) != INADDR_NONE) { bsdsocklib_seterrno(sb,0); ((HOSTENT *)buf)->h_name = name_rp; ((HOSTENT *)buf)->h_aliases = NULL; ((HOSTENT *)buf)->h_addrtype = AF_INET; ((HOSTENT *)buf)->h_length = 4; ((HOSTENT *)buf)->h_addr_list = (uae_char**)&addr_list; addr_list[0] = &addr; addr_list[1] = NULL; goto kludge; } } else { BSDTRACE((_T("gethostbyaddr(0x%x,0x%x,%ld):%d -> "),name,namelen,addrtype,argsp->wscnt)); } argsp->sb = sb; argsp->args1 = 0; argsp->args2 = name; argsp->args3 = namelen; argsp->args4 = addrtype; tindex = run_get_thread(context, sb, &args); if (tindex < 0) return; buf = argsp->buf; if (!sb->sb_errno) { kludge: h = (HOSTENT *)buf; // compute total size of hostent size = 28; if (h->h_name != NULL) size += strlen(h->h_name) + 1; if (h->h_aliases != NULL) while (h->h_aliases[numaliases]) size += strlen(h->h_aliases[numaliases++]) + 5; if (h->h_addr_list != NULL) { while (h->h_addr_list[numaddr]) numaddr++; size += numaddr*(h->h_length + 4); } if (sb->hostent) { uae_FreeMem(context, sb->hostent, sb->hostentsize, sb->sysbase); } sb->hostent = uae_AllocMem(context, size, 0, sb->sysbase); if (!sb->hostent) { write_log (_T("BSDSOCK: WARNING - gethostby%s() ran out of Amiga memory ") _T("(couldn't allocate %ld bytes) while returning result of lookup for '%s':%d\n"), addrtype == -1 ? _T("name") : _T("addr"), size, name_rp, argsp->wscnt); bsdsocklib_seterrno(sb, 12); // ENOMEM release_get_thread (tindex); return; } sb->hostentsize = size; aptr = sb->hostent + 28 + numaliases * 4 + numaddr * 4; // transfer hostent to Amiga memory put_long (sb->hostent + 4, sb->hostent + 20); put_long (sb->hostent + 8, h->h_addrtype); put_long (sb->hostent + 12, h->h_length); put_long (sb->hostent + 16, sb->hostent + 24 + numaliases * 4); for (i = 0; i < numaliases; i++) put_long (sb->hostent + 20 + i * 4, addstr_ansi (&aptr, h->h_aliases[i])); put_long (sb->hostent + 20 + numaliases * 4, 0); for (i = 0; i < numaddr; i++) put_long (sb->hostent + 24 + (numaliases + i) * 4, addmem (&aptr, h->h_addr_list[i], h->h_length)); put_long (sb->hostent + 24 + numaliases * 4 + numaddr * 4, 0); put_long (sb->hostent, aptr); addstr_ansi (&aptr, h->h_name); if (ISBSDTRACE) { TCHAR *s = au (h->h_name); BSDTRACE((_T("OK (%s):%d\n"), s, argsp->wscnt)); xfree (s); } bsdsocklib_seterrno(sb, 0); bsdsocklib_setherrno(sb, 0); } else { BSDTRACE((_T("failed (%d/%d):%d\n"), sb->sb_errno, sb->sb_herrno,argsp->wscnt)); } release_get_thread (tindex); } void host_getprotobyname(TrapContext *context, SB, uae_u32 name) { static int wscounter; PROTOENT *p; int size, numaliases = 0; uae_u32 aptr; char *name_rp; int i, tindex; struct threadargs args; volatile struct threadargs *argsp; memset(&args, 0, sizeof (args)); argsp = &args; argsp->sb = sb; argsp->wscnt = ++wscounter; name_rp = ""; if (addr_valid (_T("host_gethostbynameaddr"), name, 1)) name_rp = (char*)get_real_address (name); if (ISBSDTRACE) { TCHAR *s = au (name_rp); BSDTRACE((_T("getprotobyname(%s):%d -> "),s, argsp->wscnt)); xfree (s); } argsp->args1 = 1; argsp->args2 = name; tindex = run_get_thread(context, sb, &args); if (tindex < 0) return; if (!sb->sb_errno) { p = (PROTOENT *)argsp->buf; // compute total size of protoent size = 16; if (p->p_name != NULL) size += strlen(p->p_name)+1; if (p->p_aliases != NULL) while (p->p_aliases[numaliases]) size += strlen(p->p_aliases[numaliases++])+5; if (sb->protoent) { uae_FreeMem(context, sb->protoent, sb->protoentsize, sb->sysbase); } sb->protoent = uae_AllocMem(context, size, 0, sb->sysbase); if (!sb->protoent) { if (ISBSDTRACE) { TCHAR *s = au (name_rp); write_log (_T("BSDSOCK: WARNING - getprotobyname() ran out of Amiga memory ") _T("(couldn't allocate %ld bytes) while returning result of lookup for '%s':%d\n"), size, s, argsp->wscnt); xfree (s); } bsdsocklib_seterrno(sb,12); // ENOMEM release_get_thread (tindex); return; } sb->protoentsize = size; aptr = sb->protoent+16+numaliases*4; // transfer protoent to Amiga memory put_long (sb->protoent+4,sb->protoent+12); put_long (sb->protoent+8,p->p_proto); for (i = 0; i < numaliases; i++) put_long (sb->protoent + 12 + i * 4, addstr_ansi (&aptr, p->p_aliases[i])); put_long (sb->protoent + 12 + numaliases * 4,0); put_long (sb->protoent, aptr); addstr_ansi (&aptr, p->p_name); if (ISBSDTRACE) { TCHAR *s = au (p->p_name); BSDTRACE((_T("OK (%s, %d):%d\n"), s, p->p_proto, argsp->wscnt)); xfree (s); } bsdsocklib_seterrno (sb,0); } else { BSDTRACE((_T("failed (%d):%d\n"), sb->sb_errno, argsp->wscnt)); } release_get_thread (tindex); } void host_getprotobynumber(TrapContext *context, SB, uae_u32 name) { bsdsocklib_seterrno(sb, 1); } void host_getservbynameport(TrapContext *context, SB, uae_u32 nameport, uae_u32 proto, uae_u32 type) { static int wscounter; SERVENT *s; int size, numaliases = 0; uae_u32 aptr; TCHAR *name_rp = NULL, *proto_rp = NULL; int i, tindex; struct threadargs args; volatile struct threadargs *argsp; memset(&args, 0, sizeof (args)); argsp = &args; argsp->sb = sb; argsp->wscnt = ++wscounter; if (proto) { if (addr_valid (_T("host_getservbynameport1"), proto, 1)) proto_rp = au ((char*)get_real_address (proto)); } if (type) { BSDTRACE((_T("getservbyport(%d,%s);%d -> "),nameport, proto_rp ? proto_rp : _T("NULL"), argsp->wscnt)); } else { if (addr_valid (_T("host_getservbynameport2"), nameport, 1)) name_rp = au ((char*)get_real_address (nameport)); BSDTRACE((_T("getservbyname(%s,%s):%d -> "),name_rp, proto_rp ? proto_rp : _T("NULL"), argsp->wscnt)); } argsp->args1 = 2; argsp->args2 = nameport; argsp->args3 = proto; argsp->args4 = type; tindex = run_get_thread (context, sb, &args); if (tindex < 0) return; if (!sb->sb_errno) { s = (SERVENT *)argsp->buf; // compute total size of servent size = 20; if (s->s_name != NULL) size += strlen(s->s_name)+1; if (s->s_proto != NULL) size += strlen(s->s_proto)+1; if (s->s_aliases != NULL) while (s->s_aliases[numaliases]) size += strlen(s->s_aliases[numaliases++])+5; if (sb->servent) { uae_FreeMem(context, sb->servent, sb->serventsize, sb->sysbase); } sb->servent = uae_AllocMem(context, size, 0, sb->sysbase); if (!sb->servent) { write_log (_T("BSDSOCK: WARNING - getservby%s() ran out of Amiga memory (couldn't allocate %ld bytes):%d\n"), type ? _T("port") : _T("name"), size, argsp->wscnt); bsdsocklib_seterrno(sb, 12); // ENOMEM release_get_thread (tindex); return; } sb->serventsize = size; aptr = sb->servent + 20 + numaliases * 4; // transfer servent to Amiga memory put_long (sb->servent + 4, sb->servent + 16); put_long (sb->servent + 8, (unsigned short)htons(s->s_port)); for (i = 0; i < numaliases; i++) put_long (sb->servent + 16 + i * 4,addstr_ansi (&aptr,s->s_aliases[i])); put_long (sb->servent + 16 + numaliases * 4,0); put_long (sb->servent, aptr); addstr_ansi (&aptr, s->s_name); put_long (sb->servent + 12, aptr); addstr_ansi (&aptr, s->s_proto); if (ISBSDTRACE) { TCHAR *ss = au (s->s_name); BSDTRACE((_T("OK (%s, %d):%d\n"), ss, (unsigned short)htons(s->s_port), argsp->wscnt)); xfree (ss); } bsdsocklib_seterrno(sb, 0); } else { BSDTRACE((_T("failed (%d):%d\n"),sb->sb_errno, argsp->wscnt)); } release_get_thread (tindex); } uae_u32 host_gethostname(uae_u32 name, uae_u32 namelen) { if (!addr_valid (_T("host_gethostname"), name, namelen)) return -1; return gethostname ((char*)get_real_address (name),namelen); } #endif #endif fs-uae-2.2.3+dfsg/src/od-fs/fsdb_host.h0000644000175000017500000000102212162366654017772 0ustar glaubitzglaubitz#ifndef FSDB_HOST_H_ #define FSDB_HOST_H_ typedef struct fsdb_file_info { int type; uint32_t mode; int days; int mins; int ticks; char *comment; } fsdb_file_info; FILE *fsdb_open_meta_file_for_path(const char *path, int r, int w, int e, int d); void fsdb_init_file_info(fsdb_file_info *info); int fsdb_get_file_info(const char *nname, fsdb_file_info *info); int fsdb_set_file_info(const char *nname, fsdb_file_info *info); extern int g_fsdb_debug; extern int my_errno; #endif // FSDB_HOST_H_ fs-uae-2.2.3+dfsg/src/od-fs/sounddep/0000755000175000017500000000000012162366655017475 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/src/od-fs/sounddep/sound.h0000644000175000017500000001127112162366655021000 0ustar glaubitzglaubitz /* * UAE - The Un*x Amiga Emulator * * Support for SDL sound * * Copyright 1997 Bernd Schmidt */ #define SOUNDSTUFF 1 #define AUDIO_NAME "sdl" extern uae_u16 paula_sndbuffer[]; extern uae_u16 *paula_sndbufpt; extern int paula_sndbufsize; extern void finish_sound_buffer (void); extern void restart_sound_buffer (void); extern void pause_sound_buffer (void); extern int init_sound (void); extern void close_sound (void); extern int setup_sound (void); extern void resume_sound (void); extern void pause_sound (void); extern void reset_sound (void); extern void sound_setadjust (double); extern int enumerate_sound_devices (void); extern int drivesound_init (void); extern void drivesound_free (void); extern void sound_mute (int); extern void sound_volume (int); extern void set_volume (int, int); extern void master_sound_volume (int); struct sound_dp; struct sound_data { int waiting_for_buffer; int devicetype; int obtainedfreq; int paused; int mute; int channels; int freq; int samplesize; int sndbufsize; struct sound_dp *data; }; void send_sound (struct sound_data *sd, uae_u16 *sndbuffer); int open_sound_device (struct sound_data *sd, int index, int exclusive, int bufsize, int freq, int channels); void close_sound_device (struct sound_data *sd); void pause_sound_device (struct sound_data *sd); void resume_sound_device (struct sound_data *sd); void set_volume_sound_device (struct sound_data *sd, int volume, int mute); int get_offset_sound_device (struct sound_data *sd); int blocking_sound_device (struct sound_data *sd); #if SOUNDSTUFF > 0 //extern int outputsample, doublesample; #endif //static uae_u16 *paula_sndbufpt_prev, *paula_sndbufpt_start; STATIC_INLINE void set_sound_buffers (void) { #if SOUNDSTUFF > 1 paula_sndbufpt_prev = paula_sndbufpt_start; paula_sndbufpt_start = paula_sndbufpt; #endif } STATIC_INLINE void check_sound_buffers (void) { #if SOUNDSTUFF > 1 int len; #endif if (currprefs.sound_stereo == SND_4CH_CLONEDSTEREO) { ((uae_u16*)paula_sndbufpt)[0] = ((uae_u16*)paula_sndbufpt)[-2]; ((uae_u16*)paula_sndbufpt)[1] = ((uae_u16*)paula_sndbufpt)[-1]; paula_sndbufpt = (uae_u16 *)(((uae_u8 *)paula_sndbufpt) + 2 * 2); } else if (currprefs.sound_stereo == SND_6CH_CLONEDSTEREO) { uae_s16 *p = ((uae_s16*)paula_sndbufpt); uae_s32 sum; p[2] = p[-2]; p[3] = p[-1]; sum = (uae_s32)(p[-2]) + (uae_s32)(p[-1]) + (uae_s32)(p[2]) + (uae_s32)(p[3]); p[0] = sum / 8; p[1] = sum / 8; paula_sndbufpt = (uae_u16 *)(((uae_u8 *)paula_sndbufpt) + 4 * 2); } #if SOUNDSTUFF > 1 if (outputsample == 0) return; len = paula_sndbufpt - paula_sndbufpt_start; if (outputsample < 0) { int i; uae_s16 *p1 = (uae_s16*)paula_sndbufpt_prev; uae_s16 *p2 = (uae_s16*)paula_sndbufpt_start; for (i = 0; i < len; i++) { *p1 = (*p1 + *p2) / 2; } paula_sndbufpt = paula_sndbufpt_start; } #endif if ((uae_u8*)paula_sndbufpt - (uae_u8*)paula_sndbuffer >= paula_sndbufsize) { finish_sound_buffer (); paula_sndbufpt = paula_sndbuffer; } #if SOUNDSTUFF > 1 while (doublesample-- > 0) { memcpy (paula_sndbufpt, paula_sndbufpt_start, len * 2); paula_sndbufpt += len; if ((uae_u8*)paula_sndbufpt - (uae_u8*)paula_sndbuffer >= paula_sndbufsize) { finish_sound_buffer (); paula_sndbufpt = paula_sndbuffer; } } #endif } STATIC_INLINE void clear_sound_buffers (void) { memset (paula_sndbuffer, 0, paula_sndbufsize); paula_sndbufpt = paula_sndbuffer; } #define PUT_SOUND_WORD(b) do { *(uae_u16 *)paula_sndbufpt = b; paula_sndbufpt = (uae_u16 *)(((uae_u8 *)paula_sndbufpt) + 2); } while (0) #define PUT_SOUND_WORD_LEFT(b) do { if (currprefs.sound_filter) b = filter (b, &sound_filter_state[0]); PUT_SOUND_WORD(b); } while (0) #define PUT_SOUND_WORD_RIGHT(b) do { if (currprefs.sound_filter) b = filter (b, &sound_filter_state[1]); PUT_SOUND_WORD(b); } while (0) #define PUT_SOUND_WORD_LEFT2(b) do { if (currprefs.sound_filter) b = filter (b, &sound_filter_state[2]); PUT_SOUND_WORD(b); } while (0) #define PUT_SOUND_WORD_RIGHT2(b) do { if (currprefs.sound_filter) b = filter (b, &sound_filter_state[3]); PUT_SOUND_WORD(b); } while (0) #define PUT_SOUND_WORD_MONO(b) PUT_SOUND_WORD_LEFT(b) #define SOUND16_BASE_VAL 0 #define SOUND8_BASE_VAL 128 #define DEFAULT_SOUND_MAXB 16384 #define DEFAULT_SOUND_MINB 16384 #define DEFAULT_SOUND_BITS 16 #define DEFAULT_SOUND_FREQ 44100 #define HAVE_STEREO_SUPPORT #define FILTER_SOUND_OFF 0 #define FILTER_SOUND_EMUL 1 #define FILTER_SOUND_ON 2 #define FILTER_SOUND_TYPE_A500 0 #define FILTER_SOUND_TYPE_A1200 1 fs-uae-2.2.3+dfsg/src/od-fs/tchar.h0000644000175000017500000000054612162366655017133 0ustar glaubitzglaubitz#ifndef LIBAMIGA_TCHAR_H_ #define LIBAMIGA_TCHAR_H_ // we include this very early, so later #defines of _w* functions is defined // _after_ wchar.h is processed #include // libamiga only uses chars and strings in UTF-8 format internally typedef char TCHAR; #define _T(x) x //typedef char WCHAR //#define WCHAR char #endif // LIBAMIGA_TCHAR_H_ fs-uae-2.2.3+dfsg/src/od-fs/clock.cpp0000644000175000017500000000165012162366654017454 0ustar glaubitzglaubitz#include "sysconfig.h" #include "sysdeps.h" #include #include #include int64_t g_uae_epoch = 0; static struct tm g_amiga_time; // using a global variable, this function should be access only // from the emulation thread struct tm *uae_get_amiga_time() { //printf("uae_get_amiga_time\n"); if (uae_deterministic_mode()) { // FIXME: get synchronized clock here time_t t = 0; #ifdef DEBUG_SYNC write_sync_log("uae_get_amiga_time: (fixed to %d)\n", 0); #endif fs_gmtime_r(&t, &g_amiga_time); } else { time_t t = time(NULL); //t += currprefs.cs_rtc_adjust; fs_localtime_r(&t, &g_amiga_time); //printf("returning year %d\n", g_local_time->tm_year); } return &g_amiga_time; } // added for WinUAE 2.5.0 beta 21 merge uae_u32 getlocaltime (void) { // check src/od-win32/posixemu.cpp STUB(""); return 0; } fs-uae-2.2.3+dfsg/src/od-fs/keymap.h0000644000175000017500000002523012162366654017314 0ustar glaubitzglaubitz/* * UAE - The Un*x Amiga Emulator * * Support for platform-independent key-mapping * * Copyright 2004 Richard Drummond */ /* * Platform-independent key-codes */ enum { UAEKEY_ESCAPE = 1, UAEKEY_F1, UAEKEY_F2, UAEKEY_F3, UAEKEY_F4, UAEKEY_F5, UAEKEY_F6, UAEKEY_F7, UAEKEY_F8, UAEKEY_F9, UAEKEY_F10, UAEKEY_F11, UAEKEY_F12, UAEKEY_PRINTSCR, UAEKEY_SCROLL_LOCK, UAEKEY_PAUSE, UAEKEY_1, UAEKEY_2, UAEKEY_3, UAEKEY_4, UAEKEY_5, UAEKEY_6, UAEKEY_7, UAEKEY_8, UAEKEY_9, UAEKEY_0, UAEKEY_MINUS, UAEKEY_EQUALS, UAEKEY_BACKSPACE, UAEKEY_ENTER, UAEKEY_SPACE, UAEKEY_TAB, UAEKEY_A, UAEKEY_B, UAEKEY_C, UAEKEY_D, UAEKEY_E, UAEKEY_F, UAEKEY_G, UAEKEY_H, UAEKEY_I, UAEKEY_J, UAEKEY_K, UAEKEY_L, UAEKEY_M, UAEKEY_N, UAEKEY_O, UAEKEY_P, UAEKEY_Q, UAEKEY_R, UAEKEY_S, UAEKEY_T, UAEKEY_U, UAEKEY_V, UAEKEY_W, UAEKEY_X, UAEKEY_Y, UAEKEY_Z, UAEKEY_LEFTBRACKET, UAEKEY_RIGHTBRACKET, UAEKEY_SEMICOLON, UAEKEY_SINGLEQUOTE, UAEKEY_GRAVE, UAEKEY_BACKSLASH, UAEKEY_COMMA, UAEKEY_PERIOD, UAEKEY_SLASH, UAEKEY_LTGT, UAEKEY_NUMLOCK, UAEKEY_NUMPAD1, UAEKEY_NUMPAD2, UAEKEY_NUMPAD3, UAEKEY_NUMPAD4, UAEKEY_NUMPAD5, UAEKEY_NUMPAD6, UAEKEY_NUMPAD7, UAEKEY_NUMPAD8, UAEKEY_NUMPAD9, UAEKEY_NUMPAD0, UAEKEY_NUMPAD_PERIOD, UAEKEY_NUMPAD_PLUS, UAEKEY_NUMPAD_MINUS, UAEKEY_NUMPAD_MULTIPLY, UAEKEY_NUMPAD_DIVIDE, UAEKEY_NUMPAD_ENTER, UAEKEY_NUMPAD_EQUALS, /* Mac keyboards have this */ UAEKEY_NUMPAD_LPAREN, /* Amiga keyboards have this */ UAEKEY_NUMPAD_RPAREN, /* Amiga keyboards have this */ UAEKEY_INSERT, UAEKEY_DELETE, UAEKEY_HOME, UAEKEY_END, UAEKEY_PAGEUP, UAEKEY_PAGEDOWN, UAEKEY_CURSOR_UP, UAEKEY_CURSOR_DOWN, UAEKEY_CURSOR_LEFT, UAEKEY_CURSOR_RIGHT, UAEKEY_LEFT_CTRL, UAEKEY_LEFT_SHIFT, UAEKEY_LEFT_ALT, UAEKEY_LEFT_SUPER, UAEKEY_RIGHT_SUPER, UAEKEY_RIGHT_ALT, UAEKEY_MENU, UAEKEY_RIGHT_SHIFT, UAEKEY_RIGHT_CTRL, UAEKEY_CAPSLOCK, UAEKEY_HELP, UAEKEY_POWER, UAEKEY_SLEEP, UAEKEY_WAKE, UAEKEY_TOTAL_KEYS }; /* * Platform-independent modifier codes */ enum { UAEMODKEY_LSHIFT, UAEMODKEY_LCTRL, UAEMODKEY_LALT, UAEMODKEY_LSUPER, UAEMODKEY_RSUPER, UAEMODKEY_RALT, UAEMODKEY_RCTRL, UAEMODKEY_RSHIFT, UAEMODKEY_CAPSLOCK, UAEMODKEY_TOTAL_KEYS }; struct uaekey_hostmap { short hostkey; short uaekey; }; #define DIK_ESCAPE 0x01 #define DIK_1 0x02 #define DIK_2 0x03 #define DIK_3 0x04 #define DIK_4 0x05 #define DIK_5 0x06 #define DIK_6 0x07 #define DIK_7 0x08 #define DIK_8 0x09 #define DIK_9 0x0A #define DIK_0 0x0B #define DIK_MINUS 0x0C /* - on main keyboard */ #define DIK_EQUALS 0x0D #define DIK_BACK 0x0E /* backspace */ #define DIK_TAB 0x0F #define DIK_Q 0x10 #define DIK_W 0x11 #define DIK_E 0x12 #define DIK_R 0x13 #define DIK_T 0x14 #define DIK_Y 0x15 #define DIK_U 0x16 #define DIK_I 0x17 #define DIK_O 0x18 #define DIK_P 0x19 #define DIK_LBRACKET 0x1A #define DIK_RBRACKET 0x1B #define DIK_RETURN 0x1C /* Enter on main keyboard */ #define DIK_LCONTROL 0x1D #define DIK_A 0x1E #define DIK_S 0x1F #define DIK_D 0x20 #define DIK_F 0x21 #define DIK_G 0x22 #define DIK_H 0x23 #define DIK_J 0x24 #define DIK_K 0x25 #define DIK_L 0x26 #define DIK_SEMICOLON 0x27 #define DIK_APOSTROPHE 0x28 #define DIK_GRAVE 0x29 /* accent grave */ #define DIK_LSHIFT 0x2A #define DIK_BACKSLASH 0x2B #define DIK_Z 0x2C #define DIK_X 0x2D #define DIK_C 0x2E #define DIK_V 0x2F #define DIK_B 0x30 #define DIK_N 0x31 #define DIK_M 0x32 #define DIK_COMMA 0x33 #define DIK_PERIOD 0x34 /* . on main keyboard */ #define DIK_SLASH 0x35 /* / on main keyboard */ #define DIK_RSHIFT 0x36 #define DIK_MULTIPLY 0x37 /* * on numeric keypad */ #define DIK_LMENU 0x38 /* left Alt */ #define DIK_SPACE 0x39 #define DIK_CAPITAL 0x3A #define DIK_F1 0x3B #define DIK_F2 0x3C #define DIK_F3 0x3D #define DIK_F4 0x3E #define DIK_F5 0x3F #define DIK_F6 0x40 #define DIK_F7 0x41 #define DIK_F8 0x42 #define DIK_F9 0x43 #define DIK_F10 0x44 #define DIK_NUMLOCK 0x45 #define DIK_SCROLL 0x46 /* Scroll Lock */ #define DIK_NUMPAD7 0x47 #define DIK_NUMPAD8 0x48 #define DIK_NUMPAD9 0x49 #define DIK_SUBTRACT 0x4A /* - on numeric keypad */ #define DIK_NUMPAD4 0x4B #define DIK_NUMPAD5 0x4C #define DIK_NUMPAD6 0x4D #define DIK_ADD 0x4E /* + on numeric keypad */ #define DIK_NUMPAD1 0x4F #define DIK_NUMPAD2 0x50 #define DIK_NUMPAD3 0x51 #define DIK_NUMPAD0 0x52 #define DIK_DECIMAL 0x53 /* . on numeric keypad */ #define DIK_OEM_102 0x56 /* < > | on UK/Germany keyboards */ #define DIK_F11 0x57 #define DIK_F12 0x58 #define DIK_F13 0x64 /* (NEC PC98) */ #define DIK_F14 0x65 /* (NEC PC98) */ #define DIK_F15 0x66 /* (NEC PC98) */ #define DIK_KANA 0x70 /* (Japanese keyboard) */ #define DIK_ABNT_C1 0x73 /* / ? on Portugese (Brazilian) keyboards */ #define DIK_CONVERT 0x79 /* (Japanese keyboard) */ #define DIK_NOCONVERT 0x7B /* (Japanese keyboard) */ #define DIK_YEN 0x7D /* (Japanese keyboard) */ #define DIK_ABNT_C2 0x7E /* Numpad . on Portugese (Brazilian) keyboards */ #define DIK_NUMPADEQUALS 0x8D /* = on numeric keypad (NEC PC98) */ #define DIK_PREVTRACK 0x90 /* Previous Track (#define DIK_CIRCUMFLEX on Japanese keyboard) */ #define DIK_AT 0x91 /* (NEC PC98) */ #define DIK_COLON 0x92 /* (NEC PC98) */ #define DIK_UNDERLINE 0x93 /* (NEC PC98) */ #define DIK_KANJI 0x94 /* (Japanese keyboard) */ #define DIK_STOP 0x95 /* (NEC PC98) */ #define DIK_AX 0x96 /* (Japan AX) */ #define DIK_UNLABELED 0x97 /* (J3100) */ #define DIK_NEXTTRACK 0x99 /* Next Track */ #define DIK_NUMPADENTER 0x9C /* Enter on numeric keypad */ #define DIK_RCONTROL 0x9D #define DIK_MUTE 0xA0 /* Mute */ #define DIK_CALCULATOR 0xA1 /* Calculator */ #define DIK_PLAYPAUSE 0xA2 /* Play / Pause */ #define DIK_MEDIASTOP 0xA4 /* Media Stop */ #define DIK_VOLUMEDOWN 0xAE /* Volume - */ #define DIK_VOLUMEUP 0xB0 /* Volume + */ #define DIK_WEBHOME 0xB2 /* Web home */ #define DIK_NUMPADCOMMA 0xB3 /* , on numeric keypad (NEC PC98) */ #define DIK_DIVIDE 0xB5 /* / on numeric keypad */ #define DIK_SYSRQ 0xB7 #define DIK_RMENU 0xB8 /* right Alt */ #define DIK_PAUSE 0xC5 /* Pause */ #define DIK_HOME 0xC7 /* Home on arrow keypad */ #define DIK_UP 0xC8 /* UpArrow on arrow keypad */ #define DIK_PRIOR 0xC9 /* PgUp on arrow keypad */ #define DIK_LEFT 0xCB /* LeftArrow on arrow keypad */ #define DIK_RIGHT 0xCD /* RightArrow on arrow keypad */ #define DIK_END 0xCF /* End on arrow keypad */ #define DIK_DOWN 0xD0 /* DownArrow on arrow keypad */ #define DIK_NEXT 0xD1 /* PgDn on arrow keypad */ #define DIK_INSERT 0xD2 /* Insert on arrow keypad */ #define DIK_DELETE 0xD3 /* Delete on arrow keypad */ #define DIK_LWIN 0xDB /* Left Windows key */ #define DIK_RWIN 0xDC /* Right Windows key */ #define DIK_APPS 0xDD /* AppMenu key */ #define DIK_POWER 0xDE /* System Power */ #define DIK_SLEEP 0xDF /* System Sleep */ #define DIK_WAKE 0xE3 /* System Wake */ #define DIK_WEBSEARCH 0xE5 /* Web Search */ #define DIK_WEBFAVORITES 0xE6 /* Web Favorites */ #define DIK_WEBREFRESH 0xE7 /* Web Refresh */ #define DIK_WEBSTOP 0xE8 /* Web Stop */ #define DIK_WEBFORWARD 0xE9 /* Web Forward */ #define DIK_WEBBACK 0xEA /* Web Back */ #define DIK_MYCOMPUTER 0xEB /* My Computer */ #define DIK_MAIL 0xEC /* Mail */ #define DIK_MEDIASELECT 0xED /* Media Select */ /* Alternate names for keys, to facilitate transition from DOS. */ #define DIK_BACKSPACE DIK_BACK /* backspace */ #define DIK_NUMPADSTAR DIK_MULTIPLY /* * on numeric keypad */ #define DIK_LALT DIK_LMENU /* left Alt */ #define DIK_CAPSLOCK DIK_CAPITAL /* CapsLock */ #define DIK_NUMPADMINUS DIK_SUBTRACT /* - on numeric keypad */ #define DIK_NUMPADPLUS DIK_ADD /* + on numeric keypad */ #define DIK_NUMPADPERIOD DIK_DECIMAL /* . on numeric keypad */ #define DIK_NUMPADSLASH DIK_DIVIDE /* / on numeric keypad */ #define DIK_RALT DIK_RMENU /* right Alt */ #define DIK_UPARROW DIK_UP /* UpArrow on arrow keypad */ #define DIK_PGUP DIK_PRIOR /* PgUp on arrow keypad */ #define DIK_LEFTARROW DIK_LEFT /* LeftArrow on arrow keypad */ #define DIK_RIGHTARROW DIK_RIGHT /* RightArrow on arrow keypad */ #define DIK_DOWNARROW DIK_DOWN /* DownArrow on arrow keypad */ #define DIK_PGDN DIK_NEXT /* PgDn on arrow keypad */ /* Alternate names for keys originally not used on US keyboards. */ #define DIK_CIRCUMFLEX DIK_PREVTRACK /* Japanese keyboard */ struct uae_input_device_kbr_default *uaekey_make_default_kbr (const struct uaekey_hostmap *hostkeys); fs-uae-2.2.3+dfsg/src/od-fs/mman_host.h0000644000175000017500000000214512162366654020013 0ustar glaubitzglaubitz// Implement MMAN and SHM functionality for Win32 // Copyright (C) 2000, Brian King // GNU Public License #ifndef _MMAN_H_ #define _MMAN_H_ //#include #include // for size_t #include #include #define MAX_SHMID 256 extern uae_u8 *natmem_offset, *natmem_offset_end; typedef int uae_key_t; typedef USHORT ushort; /* One shmid data structure for each shared memory segment in the system. */ struct shmid_ds { uae_key_t key; size_t size; size_t rosize; void *addr; TCHAR name[MAX_PATH]; void *attached; int mode; void *natmembase; bool fake; int maprom; }; //int mprotect (void *addr, size_t len, int prot); void *uae_shmat (int shmid, void *shmaddr, int shmflg); int uae_shmdt (const void *shmaddr); int uae_shmget (uae_key_t key, size_t size, int shmflg, const TCHAR* name); int uae_shmctl (int shmid, int cmd, struct shmid_ds *buf); bool init_shm (void); #define PROT_READ 0x01 #define PROT_WRITE 0x02 #define PROT_EXEC 0x04 #define IPC_PRIVATE 0x01 #define IPC_RMID 0x02 #define IPC_CREAT 0x04 #define IPC_STAT 0x08 #endif fs-uae-2.2.3+dfsg/src/od-fs/uae_util.h0000644000175000017500000000017412162366655017636 0ustar glaubitzglaubitz#ifndef LIBAMIGA_UAE_UTIL_H_ #define LIBAMIGA_UAE_UTIL_H_ struct tm *uae_get_amiga_time(); #endif // LIBAMIGA_UAE_UTIL_H_ fs-uae-2.2.3+dfsg/src/od-fs/roms.cpp0000644000175000017500000000701412162366655017342 0ustar glaubitzglaubitz#include "sysconfig.h" #include "sysdeps.h" #include "gui.h" #include "options.h" #include "uae/memory.h" #include "rommgr.h" #include "custom.h" #include "events.h" #include "newcpu.h" #include "traps.h" #include "disk.h" #include "uae.h" #include "threaddep/thread.h" #include "filesys.h" #include "autoconf.h" #include "inputdevice.h" #include "inputrecord.h" #include "xwin.h" #include "keyboard.h" #include "zfile.h" #include "parallel.h" #include "audio.h" #include "arcadia.h" #include "drawing.h" #include "fsdb.h" #include "crc32.h" #include #include #include void amiga_patch_rom(uae_u8 *buf, size_t size); static struct romdata *scan_single_rom_2 (struct zfile *f) { uae_u8 buffer[20] = { 0 }; uae_u8 *rombuf; int cl = 0, size; struct romdata *rd = 0; zfile_fseek (f, 0, SEEK_END); size = zfile_ftell (f); zfile_fseek (f, 0, SEEK_SET); if (size > 524288 * 2) {/* don't skip KICK disks or 1M ROMs */ write_log (_T("'%s': too big %d, ignored\n"), zfile_getname(f), size); return 0; } zfile_fread (buffer, 1, 11, f); if (!memcmp (buffer, "KICK", 4)) { zfile_fseek (f, 512, SEEK_SET); if (size > 262144) size = 262144; } else if (!memcmp (buffer, "AMIROMTYPE1", 11)) { cl = 1; size -= 11; } else { zfile_fseek (f, 0, SEEK_SET); } rombuf = xcalloc (uae_u8, size); if (!rombuf) return 0; zfile_fread (rombuf, 1, size, f); if (cl > 0) { decode_cloanto_rom_do (rombuf, size, size); cl = 0; } amiga_patch_rom(rombuf, size); if (!cl) { rd = getromdatabydata (rombuf, size); if (!rd && (size & 65535) == 0) { /* check byteswap */ int i; for (i = 0; i < size; i+=2) { uae_u8 b = rombuf[i]; rombuf[i] = rombuf[i + 1]; rombuf[i + 1] = b; } rd = getromdatabydata (rombuf, size); } } if (!rd) { write_log (_T("!: Name='%s':%d\nCRC32=%08X SHA1=%s\n"), zfile_getname (f), size, get_crc32 (rombuf, size), get_sha1_txt (rombuf, size)); } else { TCHAR tmp[MAX_DPATH]; getromname (rd, tmp); write_log (_T("*: %s:%d = %s\nCRC32=%08X SHA1=%s\n"), zfile_getname (f), size, tmp, get_crc32 (rombuf, size), get_sha1_txt (rombuf, size)); } xfree (rombuf); return rd; } static struct romdata *scan_single_rom (const TCHAR *path) { struct zfile *z; TCHAR tmp[MAX_DPATH]; struct romdata *rd; _tcscpy (tmp, path); rd = scan_arcadia_rom (tmp, 0); if (rd) return rd; rd = getromdatabypath (path); if (rd && rd->crc32 == 0xffffffff) return rd; z = zfile_fopen (path, _T("rb"), ZFD_NORMAL); if (!z) return 0; return scan_single_rom_2 (z); } extern "C" { void amiga_add_key_dir(const char *path) { char *p = fs_path_join(path, "rom.key", NULL); addkeyfile(p); free(p); } int amiga_add_rom_file(const char *path) { write_log("amiga_add_rom_file %s\n", path); struct romdata *rd = scan_single_rom(path); if (rd) { //write_log("rom data at %p\n", rd); //write_log("adding to rom list (id: %d)\n", rd->id); //if (rd->name) { // write_log("rom name: %s\n", rd->name); //} romlist_add(path, rd); // FIXME: Should rd be freed here? } else { write_log("not a known rom file\n"); } write_log("done\n"); return 0; } } fs-uae-2.2.3+dfsg/src/od-fs/sleep.h0000644000175000017500000000423312162366655017137 0ustar glaubitzglaubitz /* * UAE - The Un*x Amiga Emulator * * Wrapper for platform-specific sleep routine * * Copyright 2003-2005 Richard Drummond */ #ifdef __BEOS__ # include #else # ifdef TARGET_AMIGAOS # include # include # else # ifdef USE_SDL # include # endif # endif #endif #define ONE_THOUSAND 1000 #define ONE_MILLION (1000 * 1000) /* The following would offer no advantage since we always call use_msleep() with * a constant and all arithmetic can be done at compile time. */ #if 0 /* This may seem a little odd, but using a nice, round binary factor will speed * up the arithmetic for only a 2% error (5% for nanosleep). Our target sleep * routines are not tha accurate - and even if they were, we don't need more * accuracy. */ #define ONE_THOUSAND 1024 #define ONE_MILLION (1024 * 1024) #endif /* * void msleep (int ms) * * Sleep for ms milliseconds using an appropriate system-dependent sleep * functions. */ # if 0 #ifdef __BEOS__ # define uae_msleep(msecs) snooze (msecs * ONE_THOUSAND) #else # if 0 //defined _WIN32 # define uae_msleep(msecs) Sleep (msecs) # else # if defined TARGET_AMIGAOS # if defined __amigaos4__ || defined __MORPHOS__ # define uae_msleep(msecs) TimeDelay (0, msecs / ONE_THOUSAND, (msecs % ONE_THOUSAND) * ONE_THOUSAND) # else # define uae_msleep(msecs) Delay (msecs <= 20 ? 1 : msecs/20); # endif # else # ifdef HAVE_NANOSLEEP # define uae_msleep(msecs) \ { \ if (msecs < 1000) { \ struct timespec t = { 0, (msecs) * ONE_MILLION }; \ nanosleep (&t, 0); \ } else { \ int secs = msecs / ONE_THOUSAND; \ int millisecs = msecs % ONE_THOUSAND; \ struct timespec t = { secs, millisecs * ONE_MILLION }; \ nanosleep (&t, 0); \ } \ } # else # ifdef HAVE_USLEEP # define uae_msleep(msecs) usleep (msecs * ONE_THOUSAND) # else # ifdef USE_SDL # define uae_msleep(msecs) SDL_Delay (msecs) # else # error "No system sleep function found" # endif # endif # endif # endif # endif #endif #endif void sleep_test (void); fs-uae-2.2.3+dfsg/src/od-fs/uae_host.h0000644000175000017500000000054312162366654017635 0ustar glaubitzglaubitz#ifndef LIBAMIGA_UAE_HOST_H_ #define LIBAMIGA_UAE_HOST_H_ #include #include #if 0 int uae_random(); #endif int64_t uae_ftello64(FILE *stream); int uae_fseeko64(FILE *stream, int64_t offset, int whence); char *uae_expand_path(const char *path); FILE *uae_fopen(const char *path, const char *mode); #endif // LIBAMIGA_UAE_HOST_H_ fs-uae-2.2.3+dfsg/src/od-fs/picasso96_host.h0000644000175000017500000006304212162366654020706 0ustar glaubitzglaubitz/* * UAE - The U*nix Amiga Emulator * * Picasso96 Support Module Header * * Copyright 1997 Brian King */ #ifndef __PICASSO96_H__ #define __PICASSO96_H__ #ifdef PICASSO96 #include "dxwrap.h" #define NOSIGNAL 0xFFFFFFFF /************************************************************************/ /* Types for BoardType Identification */ typedef enum { BT_NoBoard, BT_oMniBus, BT_Graffity, BT_CyberVision, BT_Domino, BT_Merlin, BT_PicassoII, BT_Piccolo, BT_RetinaBLT, BT_Spectrum, BT_PicassoIV, BT_PiccoloSD64, BT_A2410, BT_Pixel64, BT_uaegfx, BT_CVision3D, BT_Altais, BT_Prototype1, BT_Prototype2, BT_Prototype3, BT_Prototype4, BT_Prototype5, BT_MaxBoardTypes } BTYPE; /************************************************************************/ /* Types for PaletteChipType Identification */ typedef enum { PCT_Unknown, PCT_S11483, // Sierra S11483: HiColor 15 bit, oMniBus, Domino PCT_S15025, // Sierra S15025: TrueColor 32 bit, oMniBus PCT_CirrusGD542x, // Cirrus GD542x internal: TrueColor 24 bit PCT_Domino, // is in fact a Sierra S11483 PCT_BT482, // BrookTree BT482: TrueColor 32 bit, Merlin PCT_Music, // Music MU9C4910: TrueColor 24 bit, oMniBus PCT_ICS5300, // ICS 5300: ...., Retina BLT Z3 PCT_CirrusGD5446, // Cirrus GD5446 internal: TrueColor 24 bit PCT_CirrusGD5434, // Cirrus GD5434 internal: TrueColor 32 bit PCT_S3Trio64, // S3 Trio64 internal: TrueColor 32 bit PCT_A2410_xxx, // A2410 DAC, *type unknown* PCT_S3ViRGE, // S3 ViRGE internal: TrueColor 32 bit PCT_MaxPaletteChipTypes } PCTYPE; /************************************************************************/ /* Types for GraphicsControllerType Identification */ typedef enum { GCT_Unknown, GCT_ET4000, GCT_ETW32, GCT_CirrusGD542x, GCT_NCR77C32BLT, GCT_CirrusGD5446, GCT_CirrusGD5434, GCT_S3Trio64, GCT_TI34010, GCT_S3ViRGE, GCT_MaxGraphicsControllerTypes } GCTYPE; #define JAM1 0 #define JAM2 1 #define COMP 2 #define INVERS 4 /************************************************************************/ enum { PLANAR, CHUNKY, HICOLOR, TRUECOLOR, TRUEALPHA, MAXMODES }; /************************************************************************/ struct MyCLUTEntry { uae_u8 Red; uae_u8 Green; uae_u8 Blue; uae_u8 Pad; }; struct ColorIndexMapping { uae_u32 ColorMask; uae_u32 Colors[256]; }; struct CLUTEntry { uae_u8 Red; uae_u8 Green; uae_u8 Blue; }; #define PSSO_BitMap_BytesPerRow 0 #define PSSO_BitMap_Rows 2 #define PSSO_BitMap_Flags 4 #define PSSO_BitMap_Depth 5 #define PSSO_BitMap_pad 6 #define PSSO_BitMap_Planes 8 #define PSSO_BitMap_sizeof 40 struct BitMap { uae_u16 BytesPerRow; uae_u16 Rows; uae_u8 Flags; uae_u8 Depth; uae_u16 pad; uae_u8 *Planes[8]; }; /************************************************************************/ #define SETTINGSNAMEMAXCHARS 30 #define BOARDNAMEMAXCHARS 30 struct Settings { uae_u32 BoardType; /* a value discribing assignment to nth board local to boardtype * to be used for reassignment when boards are added or removed. */ uae_u16 LocalOrdering; uae_s16 LastSelected; char NameField[SETTINGSNAMEMAXCHARS]; /* neu! */ char *BoardName; }; #define MAXRESOLUTIONNAMELENGTH 22 /******************************** * only used within rtg.library * ********************************/ #define PSSO_LibResolution_P96ID 14 #define PSSO_LibResolution_Name 20 #define PSSO_LibResolution_DisplayID 42 /* Name + MAXRESOLUTIONNAMELENGTH */ #define PSSO_LibResolution_Width 46 #define PSSO_LibResolution_Height 48 #define PSSO_LibResolution_Flags 50 #define PSSO_LibResolution_Modes 52 #define PSSO_LibResolution_BoardInfo (52 + MAXMODES * 4) #define PSSO_LibResolution_sizeof (60 + MAXMODES * 4) struct LibResolution { char P96ID[6]; char Name[MAXRESOLUTIONNAMELENGTH]; uae_u32 DisplayID; uae_u16 Width; uae_u16 Height; uae_u16 Flags; uaecptr Modes[MAXMODES]; uaecptr BoardInfo; }; #define P96B_FAMILY 0 /* obsolete (Resolution is an entire family) */ #define P96B_PUBLIC 1 /* Resolution should be added to the public */ #define P96B_MONITOOL 2 #define P96F_FAMILY (1< #undef _WIN32 #undef WIN32 #undef WCHAR #endif */ #include "tchar.h" // rename init_audio to make init_audio available #define init_audio uae_init_audio #include "uae_host.h" #define STUB(format, ...) { write_log(" -- stub -- %s " format "\n", \ __func__, ##__VA_ARGS__); \ printf(" -- stub -- %s " format "\n", __func__, ##__VA_ARGS__); } #define LOG_STUB(format, ...) { write_log(" -- stub -- %s " format "\n", \ __func__, ##__VA_ARGS__); } #define VERBOSE_STUB(format, ...) // we are using our own main function, not the one from UAE... #define NO_MAIN_IN_MAIN_C #ifndef WINDOWS #define CAN_PRINTF_LONG_LONG #endif // UAE code must use this instead of RAND_MAX, and use uaerand for all // random number generation #define UAE_RAND_MAX 2147483647 /* unsigned int uaerand_impl (void); static inline unsigned int uaerand (void) { printf(" >>>> uaerand <<<< %s:%d:%s\n", __BASE_FILE__, __LINE__, __func__); return uaerand_impl(); } */ #define DEBUG_SYNC //#define DEBUG_SYNC_MEMORY #ifdef DEBUG_SYNC #include extern FILE *g_fs_uae_sync_debug_file; #define write_sync_log(format, ...) \ if (g_fs_uae_sync_debug_file) { \ fprintf(g_fs_uae_sync_debug_file, format, __VA_ARGS__); \ } #endif // needed to include functions in include/debug.h, which in turn // is needed by code #define DEBUGGER 1 #define A_DMS #define A_ZIP //#define A2065 #define A2091 #define ACTION_REPLAY #define AGA //#define AHI #define ARCADIA #define AUTOCONFIG #if !defined(ANDROID) && !defined(__LSB_VERSION__) #define BSDSOCKET #endif #define CD32 #define CDTV #define ECS_DENISE #define CAPS #define CPUEMU_0 #define CPUEMU_11 #define CPUEMU_12 #define CPUEMU_20 #define CPUEMU_21 #define CPUEMU_22 #define CPUEMU_31 //#define DEBUGGER #define DRIVESOUND //#define ENFORCER #define FDI2RAW #define FILESYS #define FPUEMU /* FPU emulation */ #define FPU_UAE #define GFXFILTER #if defined(__x86_64__) || defined(__ppc__) || defined(__ARMEL__) // no JIT for these architectures #elif defined(OPENBSD) // no sys/ucontext.h header #else #define JIT #define JIT_DEBUG #endif #define MMU #define MMUEMU /* Aranym 68040 MMU */ //#define MULTIDISPLAY 1 #define NATMEM_OFFSET natmem_offset #define FULLMMU /* Aranym 68040 MMU */ #define PARALLEL_PORT #define PICASSO96 #define PICASSO96_SUPPORTED #define SAVESTATE #define SCSIEMU #define SERIAL_PORT #define SUPPORT_THREADS #define UNALIGNED_PROFITABLE #define UAESERIAL #define UAE_FILESYS_THREADS //#define UAE_FILESYS_ASYNCHRONOUS //#define USE_SDL #define XARCADE #define GNU_SOURCE 1 // needed several places in the code #define MAX_DPATH 1024 #ifndef MAX_PATH #define MAX_PATH PATH_MAX //#ifdef WINDOWS //#define MAX_PATH 512 //#else //define MAX_PATH 1024 //#endif #endif // needed by serial.cpp #ifdef WINDOWS // FIXME: DUMMY #define O_NDELAY 0 #endif // These should be valid on all supported systems, also Windows #define FSDB_DIR_SEPARATOR '/' #define FSDB_DIR_SEPARATOR_S "/" // FIXME: OK? #define _stat64 stat #define INVALID_SOCKET -1 #ifdef WINDOWS typedef unsigned int SOCKET; #else typedef int SOCKET; #endif typedef unsigned short USHORT; #ifndef DO_NOT_INCLUDE_WINUAE_COMPAT_H // we do not always want to include these, especially not in uae_host.cpp // were we actually need access to some of the underlying function names #include "winuae_compat.h" #endif #include "../include/sysdeps.h" // make use of enums compatible with C++: in C++ you cannot assign an // enum value to an int #undef ENUMNAME #undef ENUMDECL #define ENUMDECL enum #define ENUMNAME(name) ; typedef int name ; #include "machdep/machdep.h" // some code needs uae_sem_t but does not include thread.h properly // (include/bsdsocket.h) #include "threaddep/thread.h" // FIXME: IMPLEMENT //void _stprintf(wchar_t* buffer, wchar_t* format, ...); extern TCHAR start_path_data[]; extern void picasso_reset (void); extern void picasso_handle_hsync (void); extern void init_hz_p96 (void); int GetDriveType(TCHAR* vol); void sleep_millis(int ms); //void install_driver(int flags); extern int uae_start_thread_fast (void *(*f)(void *), void *arg, uae_thread_id *thread); #ifdef WINDOWS #else #endif #define FILEFLAG_WRITE S_IWUSR #define FILEFLAG_READ S_IRUSR #define FILEFLAG_EXECUTE S_IXUSR #define FILEFLAG_DIR S_IFDIR #define Sleep sleep_millis typedef unsigned int WPARAM; typedef long LPARAM; typedef int BOOL; #define TRUE 1 #define FALSE 0 // needed to compile gencpu.cpp as C code (which is needed because // of int to enum conversions (illegal in C++) #ifndef __cplusplus // FIXME: //typedef int bool #define bool int #define true 1 #define false 0 #endif // -------------------------- windows temp -------------------------- // FIXME: THESE ARE HERE IN ORDER TO COMPILE blkdev.cpp #define UAESCSI_CDEMU 0 #define UAESCSI_SPTI 1 #define UAESCSI_SPTISCAN 2 #define UAESCSI_ASPI_FIRST 3 #define UAESCSI_ADAPTECASPI 3 #define UAESCSI_NEROASPI 4 #define UAESCSI_FROGASPI 5 //#ifndef WINDOWS // just setting DRIVE_CDROM to something here.. #define DRIVE_CDROM 0 //#endif #include "uae_util.h" #include #define __STDC_FORMAT_MACROS #include #if defined(__ppc__) || defined(__ARMEL__) // REGPARAM are used in JIT code, so for PPC (which does not have JIT) this // can be set to nothing #define REGPARAM #else #define REGPARAM __attribute__((regparm(3))) #endif #define REGPARAM2 REGPARAM #define REGPARAM3 #endif // EXTRA_DEFINES_H fs-uae-2.2.3+dfsg/src/od-fs/support.cpp0000644000175000017500000000066512162366655020103 0ustar glaubitzglaubitz#include "sysconfig.h" #include "sysdeps.h" #include "options.h" int machdep_init(void) { // We call libamiga_callbacks.init here because machdep_init is called // very early in real_main2, just after default configuration and before // it is too late to change the configuration built_in_prefs(&currprefs, 1, 0, 0, 0); if (g_libamiga_callbacks.init) { g_libamiga_callbacks.init(); } return 1; } fs-uae-2.2.3+dfsg/src/od-fs/filesys_host.cpp0000644000175000017500000003164312162366654021101 0ustar glaubitzglaubitz#include "sysconfig.h" #include "sysdeps.h" #include "fsdb.h" #include "uae_host.h" #include "filesys.h" #include "zfile.h" #include #include #include #ifdef WINDOWS #include #endif #include "fsdb_host.h" int g_fsdb_debug = 0; struct my_opendir_s { //GDir *dir; char *path; fs_list *items; fs_list *current; }; struct my_openfile_s { int fd; char *path; }; int my_errno = 0; bool my_chmod (const TCHAR *name, uae_u32 mode) { STUB(""); // return result of mystat so invalid file will return false struct mystat ms; return my_stat(name, &ms); } bool my_stat (const TCHAR *name, struct mystat *ms) { struct fs_stat sonuc; int ret = 0; if (fs_stat(name, &sonuc) == -1) { write_log("my_stat: stat on file %s failed\n", name); return false; } ms->size = sonuc.size; // FIXME: read mode more accurately ms->mode = 0; if (sonuc.mode & S_IRUSR) { ms->mode |= FILEFLAG_READ; } if (sonuc.mode & S_IWUSR) { ms->mode |= FILEFLAG_WRITE; } ms->mtime.tv_sec = sonuc.mtime; ms->mtime.tv_usec = 0; #ifdef HAVE_ST_BLOCKS //ms->blocks = sonuc.st_blocks; #endif return true; } static int compare_strings(const void *a, const void *b) { return strcmp((const char *) a, (const char *) b); } struct my_opendir_s *my_opendir(const TCHAR *name, const TCHAR *mask) { if (g_fsdb_debug) { write_log("my_opendir %s\n", name); } // mask is ignored if (mask && strcmp(mask, "*.*") != 0) { write_log("WARNING: directory mask was not *.*"); } fs_dir *dir = fs_dir_open(name, 0); if (!dir) { my_errno = errno; write_log("my_opendir %s failed\n", name); return NULL; } struct my_opendir_s *mod = xmalloc(struct my_opendir_s, 1); //mod->dir = dir; mod->path = fs_strdup(name); mod->items = NULL; const char *result; while (1) { result = fs_dir_read_name(dir); if (!result) { break; } int len = strlen(result); if (strcasecmp(result, "_UAEFSDB.___") == 0) { continue; } if (strcasecmp(result, "Thumbs.db") == 0) { continue; } if (strcasecmp(result, ".DS_Store") == 0) { continue; } if (strcasecmp(result, "UAEFS.ini") == 0) { continue; } if (len > 5 && strncmp(result + len - 5, ".uaem", 5) == 0) { // ignore metadata / attribute files, obviously continue; } char *cresult = fs_utf8_to_latin1(result, -1); if (cresult == NULL) { // file name could not be represented as ISO-8859-1, so it // will be ignored write_log("ignoring file %s (cannot be represented in " "ISO-8859-1)\n", result); continue; } free(cresult); mod->items = fs_list_append(mod->items, fs_strdup(result)); } mod->items = fs_list_sort(mod->items, compare_strings); mod->current = mod->items; fs_dir_close(dir); return mod; } struct my_opendir_s *my_opendir(const TCHAR *name) { return my_opendir(name, _T("*.*")); } void my_closedir(struct my_opendir_s* mod) { if (g_fsdb_debug) { write_log("my_closedir (%s)\n", mod->path); } my_errno = 0; if (mod) { free(mod->path); fs_list *item = mod->items; while (item) { free(item->data); item = item->next; } fs_list_free(mod->items); xfree(mod); } } int my_readdir(struct my_opendir_s* mod, TCHAR* name) { if (mod->current) { strcpy(name, (const char*) mod->current->data); if (g_fsdb_debug) { write_log("my_readdir => %s\n", name); } mod->current = mod->current->next; return 1; } // no more items return 0; } int my_existsfile(const char *name) { if (g_fsdb_debug) { write_log("my_existsfile %s\n", name); } return fs_path_is_file(name); } int my_existsdir(const char *name) { if (g_fsdb_debug) { write_log("my_existsdir %s\n", name); } return fs_path_is_dir(name); } uae_s64 my_fsize(struct my_openfile_s* mos) { struct fs_stat sonuc; int ret = 0; if (fs_fstat(mos->fd, &sonuc) == -1) { write_log("my_fsize: fstat on file %s failed\n", mos->path); return -1; } return sonuc.size; } int my_getvolumeinfo(const char *root) { if (g_fsdb_debug) { write_log("my_getvolumeinfo %s\n", root); } // FIXME: check what this is supposed to do write_log("my_getvolumeinfo %s\n", root); struct fs_stat sonuc; int ret = 0; if (fs_stat(root, &sonuc) == -1) { return -1; } if (!S_ISDIR(sonuc.mode)) { return -1; } ret |= MYVOLUMEINFO_STREAMS; return ret; } struct my_openfile_s *my_open(const TCHAR *name, int flags) { if (g_fsdb_debug) { write_log("my_open %s flags=%d\n", name, flags); } int open_flags = O_BINARY; if (flags & O_TRUNC) { open_flags = open_flags | O_TRUNC; //write_log(" O_TRUNC\n"); } if (flags & O_CREAT) { open_flags = open_flags | O_CREAT; //write_log(" O_CREAT\n"); } if (flags & O_RDWR) { open_flags = open_flags | O_RDWR; //write_log(" O_RDRW\n"); } else if (flags & O_RDONLY) { open_flags = open_flags | O_RDONLY; //write_log(" O_RDONLY\n"); } else if (flags & O_WRONLY) { open_flags = open_flags | O_WRONLY; //write_log(" O_WRONLY\n"); } char *path = uae_expand_path(name); int file_existed = fs_path_exists(path); int file = fs_open(path, open_flags, 0644); if (file == -1) { my_errno = errno; write_log("WARNING: my_open could not open (%s, %d)\n", name, open_flags); if (open_flags & O_TRUNC) { write_log(" O_TRUNC\n"); } if (open_flags & O_CREAT) { write_log(" O_CREAT\n"); } if (open_flags & O_RDWR) { write_log(" O_RDWR\n"); } else if (open_flags & O_RDONLY) { write_log(" O_RDONLY\n"); } else if (open_flags & O_WRONLY) { write_log(" O_WRONLY\n"); } free(path); return NULL; } if (!file_existed) { fsdb_file_info info; fsdb_init_file_info(&info); int error = fsdb_set_file_info(path, &info); if (error != 0) { if (g_fsdb_debug) { write_log("WARNING: fsdb_set_file_info error %d\n", error); } } } free(path); struct my_openfile_s *mos = xmalloc (struct my_openfile_s, 1); mos->fd = file; mos->path = fs_strdup(name); my_errno = 0; return mos; } void my_close(struct my_openfile_s* mos) { if (g_fsdb_debug) { write_log("my_close %d (%s)\n", mos->fd, mos->path); } errno = 0; free(mos->path); #ifdef WINDOWS int result = _close(mos->fd); #else int result = close(mos->fd); #endif my_errno = errno; if (result != 0) { write_log("error closing file\n"); #ifdef WINDOWS write_log("Windows error code %lu\n", GetLastError()); #endif } xfree(mos); } unsigned int my_read(struct my_openfile_s *mos, void *b, unsigned int size) { ssize_t bytes_read = read(mos->fd, b, size); if (bytes_read == -1) { my_errno = errno; write_log("WARNING: my_read failed (-1)\n"); // can only return 0 since return type is unsigned... return 0; } my_errno = 0; if (g_fsdb_debug) { write_log("my_read fd=%d buffer=%p size=%d => %zd\n", mos->fd, b, size, bytes_read); } return (unsigned int) bytes_read; } unsigned int my_write(struct my_openfile_s *mos, void *b, unsigned int size) { ssize_t bytes_written = write(mos->fd, b, size); if (bytes_written == -1) { my_errno = errno; write_log("WARNING: my_write failed (-1) fd=%d buffer=%p size=%d\n", mos->fd, b, size); // can only return 0 since return type is unsigned... write_log("errno %d\n", my_errno); write_log(" mos %p -> fd=%d\n", mos, mos->fd); //write_log(" GetLastError = %d\n", GetLastError()); return 0; } my_errno = 0; if (g_fsdb_debug) { write_log("my_write fd=%d buffer=%p size=%d => %zd\n", mos->fd, b, size, bytes_written); } return (unsigned int) bytes_written; } int my_mkdir(const TCHAR *path) { if (g_fsdb_debug) { write_log("my_mkdir %s\n", path); } int error = fs_mkdir(path, 0755); if (error) { my_errno = errno; return -1; } int file_existed = 0; if (!file_existed) { fsdb_file_info info; fsdb_init_file_info(&info); int error = fsdb_set_file_info(path, &info); if (error != 0) { if (g_fsdb_debug) { write_log("WARNING: fsdb_set_file_info error %d\n", error); } } } my_errno = 0; return 0; } int my_truncate(const TCHAR *name, uae_u64 len) { int int_len = (int) len; if (g_fsdb_debug) { write_log("my_truncate %s len = %d\n", name, int_len); } struct my_openfile_s *mos = my_open(name, O_WRONLY); if (mos == NULL) { my_errno = errno; write_log("WARNING: opening file for truncation failed\n"); return -1; } #ifdef WINDOWS int result = _chsize(mos->fd, int_len); #else int result = ftruncate(mos->fd, int_len); #endif my_close(mos); my_errno = 0; return result; } int my_rmdir(const TCHAR *path) { if (g_fsdb_debug) { write_log("my_rmdir %s\n", path); } errno = 0; int result = fs_rmdir(path); my_errno = errno; char *meta_name = fs_strconcat(path, ".uaem", NULL); fs_unlink(meta_name); free(meta_name); return result; } int my_unlink(const TCHAR *path) { if (g_fsdb_debug) { write_log("my_unlink %s\n", path); } errno = 0; int result = fs_unlink(path); my_errno = errno; char *meta_name = fs_strconcat(path, ".uaem", NULL); fs_unlink(meta_name); free(meta_name); return result; } static int rename_file(const char *oldname, const char *newname) { int result = 0; for (int i = 0; i < 10; i++) { result = fs_rename(oldname, newname); my_errno = errno; if (result == 0) { break; } #ifdef WINDOWS write_log("Could not rename \"%s\" to \"%s\": Windows error" "code %lu\n", oldname, newname, GetLastError()); #endif sleep_millis(10); } return result; } int my_rename(const TCHAR *oldname, const TCHAR *newname) { if (g_fsdb_debug) { write_log("my_rename %s => %s\n", oldname, newname); } errno = 0; int result = rename_file(oldname, newname); if (result != 0) { // could not rename file return result; } char *oldname2 = fs_strconcat(oldname, ".uaem", NULL); if (fs_path_exists(oldname2)) { char *newname2 = fs_strconcat(newname, ".uaem", NULL); if (rename_file(oldname2, newname2) != 0) { // could not rename meta file, revert changes int saved_errno = my_errno; rename_file(newname, oldname); my_errno = saved_errno; result = -1; } free(newname2); } free(oldname2); return result; } uae_s64 my_lseek(struct my_openfile_s *mos, uae_s64 offset, int whence) { if (g_fsdb_debug) { write_log("my_lseek %s\n", mos->path); } errno = 0; off_t result = lseek(mos->fd, offset, whence); my_errno = errno; return result; } FILE *my_opentext(const TCHAR* name) { if (g_fsdb_debug) { write_log("my_opentext %s\n", name); } // FIXME: WinUAE's version does some content checking related to unicode. // see fsdb_mywin32.cpp return fs_fopen(name, "rb"); } int host_errno_to_dos_errno(int err) { static int warned = 0; switch (err) { case ENOMEM: return ERROR_NO_FREE_STORE; case EEXIST: return ERROR_OBJECT_EXISTS; case EACCES: case EROFS: return ERROR_WRITE_PROTECTED; //case ENOMEDIUM: case EINVAL: case ENOENT: case EBADF: return ERROR_OBJECT_NOT_AROUND; case ENOSPC: return ERROR_DISK_IS_FULL; case EBUSY: return ERROR_OBJECT_IN_USE; case ENOTEMPTY: return ERROR_DIRECTORY_NOT_EMPTY; case ESPIPE: return ERROR_SEEK_ERROR; default: if (!warned) { gui_message(_T("Unimplemented error %d\nContact author!"), err); warned = 1; } return ERROR_NOT_IMPLEMENTED; } } int dos_errno(void) { if (g_fsdb_debug) { write_log(_T("dos_errno: my_errno=%d\n"), my_errno); } return host_errno_to_dos_errno(my_errno); } void filesys_host_init() { if (getenv("FS_DEBUG_FILESYS")) { g_fsdb_debug = 1; } } fs-uae-2.2.3+dfsg/src/od-fs/libamiga_internal.h0000644000175000017500000000143112162366654021464 0ustar glaubitzglaubitz#ifndef LIBAMIGA_INTERNAL_H_ #define LIBAMIGA_INTERNAL_H_ #include "uae/uae.h" typedef struct _libamiga_callbacks { display_function display; event_function event; render_function render; init_function init; log_function log; } libamiga_callbacks; extern log_function g_amiga_gui_message_function; extern libamiga_callbacks g_libamiga_callbacks; extern char *g_libamiga_save_image_path; extern int g_amiga_paused; int amiga_handle_input_event (int nr, int state, int max, int autofire, bool canstopplayback, bool playbackevent); const char *get_libamiga_base_version(); void amiga_configure_port_from_input_event(int input_event); extern int g_amiga_video_format; extern int g_amiga_video_bpp; extern int g_amiga_rtg_modes[]; #endif // LIBAMIGA_INTERNAL_H_ fs-uae-2.2.3+dfsg/src/od-fs/mman.cpp0000644000175000017500000011205612162366655017315 0ustar glaubitzglaubitz// Implement mprotect() for Win32 // Copyright (C) 2000, Brian King // GNU Public License #ifdef WINDOWS #define _WIN32_WINNT 0x0501 #include #endif #include #include "sysconfig.h" #include "sysdeps.h" #include "mman_host.h" #include "uae/memory.h" #include "options.h" #include "autoconf.h" #ifdef __x86_64__ static int os_64bit = 1; #else static int os_64bit = 0; #endif #ifdef WINDOWS #else #ifdef HAVE_SYS_PARAM_H #include #endif #if defined(__APPLE__) #include #endif #include #define MEM_COMMIT 0x00001000 #define MEM_RESERVE 0x00002000 #define MEM_DECOMMIT 0x4000 #define MEM_RELEASE 0x8000 #define MEM_WRITE_WATCH 0x00200000 #define PAGE_EXECUTE 0x10 #define PAGE_EXECUTE_READ 0x20 #define PAGE_EXECUTE_READWRITE 0x40 #define PAGE_EXECUTE_WRITECOPY 0x80 #define PAGE_NOACCESS 0x01 #define PAGE_READONLY 0x02 #define PAGE_READWRITE 0x04 #define PAGE_WRITECOPY 0x08 typedef void * LPVOID; typedef size_t SIZE_T; typedef struct { int dwPageSize; } SYSTEM_INFO; void GetSystemInfo(SYSTEM_INFO *si) { si->dwPageSize = sysconf(_SC_PAGESIZE); } void *VirtualAlloc(void *lpAddress, size_t dwSize, int flAllocationType, int flProtect) { write_log("- VirtualAlloc %p %zu %d %d\n", lpAddress, dwSize, flAllocationType, flProtect); if (flAllocationType & MEM_RESERVE) { write_log(" MEM_RESERVE\n"); } if (flAllocationType & MEM_COMMIT) { write_log(" MEM_COMMIT\n"); } if (flAllocationType & PAGE_READWRITE) { write_log(" PAGE_READWRITE\n"); } int prot = 0; void *memory = NULL; if (flAllocationType == MEM_COMMIT && lpAddress == NULL) { memory = malloc(dwSize); if (memory == NULL) { write_log("memory allocated failed errno %d\n", errno); } return memory; } if (flAllocationType & MEM_RESERVE) { memory = malloc(dwSize); if (memory == NULL) { write_log("memory allocated failed errno %d\n", errno); } #if 0 memory = mmap(lpAddress, dwSize, prot, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); printf("mmap result: %p\n", memory); if (memory == (void *) -1) { printf("mmap failed errno %d\n", errno); } #endif } else { memory = lpAddress; } if (flAllocationType & MEM_COMMIT) { #if 0 int lockresult = mlock(memory, dwSize); if (lockresult != 0) { printf("mlock failed errno %d\n", errno); perror("mlock failed"); } #endif } return memory; } bool VirtualFree(void *lpAddress, size_t dwSize, int dwFreeType) { #if 0 int result = 0; if (dwFreeType == MEM_DECOMMIT) { result = munlock(lpAddress, dwSize); if (result != 0) { printf("munlock failed %d\n", errno); } } else if (dwFreeType == MEM_RELEASE) { result = munmap(lpAddress, dwSize); if (result != 0) { printf("mlock failed\n"); } } return result == 0; #endif return 1; } static int GetLastError() { return errno; } #ifdef HAVE_POSIX_MEMALIGN // FIXME: Set HAVE_POSIX_MEMALIGN when available in config.h, // possibly via autoconf #define valloc my_valloc static void *my_valloc(size_t size) { size_t alignment = sysconf(_SC_PAGESIZE); void *memptr = NULL; if (posix_memalign(&memptr, alignment, size) == 0) { return memptr; } return NULL; } #endif static int my_getpagesize (void) { return sysconf(_SC_PAGESIZE); } #define getpagesize my_getpagesize #endif #if defined(NATMEM_OFFSET) #define VAMODE 1 uae_u32 max_z3fastmem; /* JIT can access few bytes outside of memory block if it executes code at the very end of memory block */ #define BARRIER 32 #define MAXZ3MEM32 0x7F000000 #define MAXZ3MEM64 0xF0000000 static struct shmid_ds shmids[MAX_SHMID]; uae_u8 *natmem_offset, *natmem_offset_end; static uae_u8 *p96mem_offset; static int p96mem_size; static SYSTEM_INFO si; int maxmem; uae_u32 natmem_size; static uae_u8 *virtualallocwithlock (LPVOID addr, SIZE_T size, DWORD allocationtype, DWORD protect) { uae_u8 *p = (uae_u8*)VirtualAlloc (addr, size, allocationtype, protect); return p; } static void virtualfreewithlock (LPVOID addr, SIZE_T size, DWORD freetype) { VirtualFree(addr, size, freetype); } void cache_free (uae_u8 *cache) { #ifdef WINDOWS virtualfreewithlock (cache, 0, MEM_RELEASE); #else // FIXME: Must add (address, size) to a list in cache_alloc, so the memory // can be correctly released here... printf("TODO: free memory with munmap\n"); //munmap(cache, size); #endif } uae_u8 *cache_alloc (int size) { printf("cache_alloc size = %d\n", size); #ifdef WINDOWS return virtualallocwithlock (NULL, size, MEM_COMMIT, PAGE_EXECUTE_READWRITE); #else size = size < getpagesize() ? getpagesize() : size; void *cache = mmap(0, size, PROT_READ | PROT_WRITE | PROT_EXEC, MAP_PRIVATE | MAP_ANON, -1, 0); if (!cache) { write_log ("Cache_Alloc of %d failed. ERR=%d\n", size, errno); } return (uae_u8 *) cache; #endif } #if 0 static void setworkingset(void) { typedef BOOL (CALLBACK* SETPROCESSWORKINGSETSIZE)(HANDLE,SIZE_T,SIZE_T); SETPROCESSWORKINGSETSIZE pSetProcessWorkingSetSize; pSetProcessWorkingSetSize = (SETPROCESSWORKINGSETSIZE)GetProcAddress(GetModuleHandle("kernal32.dll", "GetProcessWorkingSetSize"); if (!pSetProcessWorkingSetSize) return; pSetProcessWorkingSetSize(GetCurrentProcess (), ); } #endif static uae_u32 lowmem (void) { uae_u32 change = 0; if (currprefs.z3fastmem_size + currprefs.z3fastmem2_size + currprefs.z3chipmem_size >= 8 * 1024 * 1024) { if (currprefs.z3fastmem2_size) { change = currprefs.z3fastmem2_size; currprefs.z3fastmem2_size = 0; } else if (currprefs.z3chipmem_size) { if (currprefs.z3chipmem_size <= 16 * 1024 * 1024) { change = currprefs.z3chipmem_size; currprefs.z3chipmem_size = 0; } else { change = currprefs.z3chipmem_size / 2; currprefs.z3chipmem_size /= 2; } } else { change = currprefs.z3fastmem_size - currprefs.z3fastmem_size / 4; currprefs.z3fastmem2_size = changed_prefs.z3fastmem2_size = currprefs.z3fastmem_size / 4; currprefs.z3fastmem_size /= 2; changed_prefs.z3fastmem_size = currprefs.z3fastmem_size; } } else if (currprefs.rtgmem_type && currprefs.rtgmem_size >= 1 * 1024 * 1024) { change = currprefs.rtgmem_size - currprefs.rtgmem_size / 2; currprefs.rtgmem_size /= 2; changed_prefs.rtgmem_size = currprefs.rtgmem_size; } if (currprefs.z3fastmem2_size < 128 * 1024 * 1024) currprefs.z3fastmem2_size = changed_prefs.z3fastmem2_size = 0; return change; } #ifdef FSUAE #else int mman_GetWriteWatch (PVOID lpBaseAddress, SIZE_T dwRegionSize, PVOID *lpAddresses, PULONG_PTR lpdwCount, PULONG lpdwGranularity) { return GetWriteWatch (0, lpBaseAddress, dwRegionSize, lpAddresses, lpdwCount, lpdwGranularity); } void mman_ResetWatch (PVOID lpBaseAddress, SIZE_T dwRegionSize) { if (ResetWriteWatch (lpBaseAddress, dwRegionSize)) write_log (_T("ResetWriteWatch() failed, %d\n"), GetLastError ()); } #endif static uae_u64 size64; #ifdef WINDOWS typedef BOOL (CALLBACK* GLOBALMEMORYSTATUSEX)(LPMEMORYSTATUSEX); #endif static void clear_shm (void) { shm_start = NULL; for (int i = 0; i < MAX_SHMID; i++) { memset (&shmids[i], 0, sizeof (struct shmid_ds)); shmids[i].key = -1; } } bool preinit_shm (void) { write_log("preinit_shm\n"); uae_u64 total64; uae_u64 totalphys64; #ifdef WINDOWS MEMORYSTATUS memstats; GLOBALMEMORYSTATUSEX pGlobalMemoryStatusEx; MEMORYSTATUSEX memstatsex; #endif uae_u32 max_allowed_mman; if (natmem_offset) #ifdef WINDOWS VirtualFree (natmem_offset, 0, MEM_RELEASE); #else free (natmem_offset); #endif natmem_offset = NULL; if (p96mem_offset) #ifdef WINDOWS VirtualFree (p96mem_offset, 0, MEM_RELEASE); #else // Don't free p96mem_offset - it is freed as part of natmem_offset //free (p96mem_offset); ; #endif p96mem_offset = NULL; GetSystemInfo (&si); max_allowed_mman = 512 + 256; #if 1 if (os_64bit) { #ifdef WIN64 max_allowed_mman = 3072; #else max_allowed_mman = 2048; #endif } #endif #ifdef WINDOWS memstats.dwLength = sizeof(memstats); GlobalMemoryStatus(&memstats); totalphys64 = memstats.dwTotalPhys; total64 = (uae_u64)memstats.dwAvailPageFile + (uae_u64)memstats.dwTotalPhys; #ifdef FSUAE pGlobalMemoryStatusEx = GlobalMemoryStatusEx; #else pGlobalMemoryStatusEx = (GLOBALMEMORYSTATUSEX)GetProcAddress (GetModuleHandle (_T("kernel32.dll")), "GlobalMemoryStatusEx"); #endif if (pGlobalMemoryStatusEx) { memstatsex.dwLength = sizeof (MEMORYSTATUSEX); if (pGlobalMemoryStatusEx(&memstatsex)) { totalphys64 = memstatsex.ullTotalPhys; total64 = memstatsex.ullAvailPageFile + memstatsex.ullTotalPhys; } } #elif defined(__APPLE__) int mib[2]; size_t len; mib[0] = CTL_HW; // FIXME: check 64-bit compat mib[1] = HW_MEMSIZE; /* gives a 64 bit int */ len = sizeof(totalphys64); sysctl(mib, 2, &totalphys64, &len, NULL, 0); total64 = (uae_u64) totalphys64; #else totalphys64 = sysconf (_SC_PHYS_PAGES) * getpagesize(); total64 = (uae_u64)sysconf (_SC_PHYS_PAGES) * (uae_u64)getpagesize(); #endif size64 = total64; if (os_64bit) { if (size64 > MAXZ3MEM64) size64 = MAXZ3MEM64; } else { if (size64 > MAXZ3MEM32) size64 = MAXZ3MEM32; } if (maxmem < 0) size64 = MAXZ3MEM64; else if (maxmem > 0) size64 = maxmem * 1024 * 1024; if (size64 < 8 * 1024 * 1024) size64 = 8 * 1024 * 1024; if (max_allowed_mman * 1024 * 1024 > size64) max_allowed_mman = size64 / (1024 * 1024); if (!os_64bit) { if (max_allowed_mman * 1024 * 1024 > (totalphys64 / 2)) max_allowed_mman = (totalphys64 / 2) / (1024 * 1024); } natmem_size = (max_allowed_mman + 1) * 1024 * 1024; if (natmem_size < 256 * 1024 * 1024) natmem_size = 256 * 1024 * 1024; write_log (_T("Total physical RAM %lluM, all RAM %lluM. Attempting to reserve: %uM.\n"), totalphys64 >> 20, total64 >> 20, natmem_size >> 20); natmem_offset = 0; if (natmem_size <= 768 * 1024 * 1024) { uae_u32 p = 0x78000000 - natmem_size; for (;;) { natmem_offset = (uae_u8*)VirtualAlloc ((void*)p, natmem_size, MEM_RESERVE | (VAMODE == 1 ? MEM_WRITE_WATCH : 0), PAGE_READWRITE); if (natmem_offset) break; p -= 128 * 1024 * 1024; if (p <= 128 * 1024 * 1024) break; } } if (!natmem_offset) { for (;;) { natmem_offset = (uae_u8*)VirtualAlloc (NULL, natmem_size, MEM_RESERVE | (VAMODE == 1 ? MEM_WRITE_WATCH : 0), PAGE_READWRITE); if (natmem_offset) break; natmem_size -= 128 * 1024 * 1024; if (!natmem_size) { write_log (_T("Can't allocate 256M of virtual address space!?\n")); return false; } } } max_z3fastmem = natmem_size; write_log (_T("Reserved: 0x%p-0x%p (%08x %dM)\n"), natmem_offset, (uae_u8*)natmem_offset + natmem_size, natmem_size, natmem_size >> 20); clear_shm (); // write_log (_T("Max Z3FastRAM %dM. Total physical RAM %uM\n"), max_z3fastmem >> 20, totalphys64 >> 20); canbang = 1; return true; } static void resetmem (bool decommit) { int i; if (!shm_start) return; for (i = 0; i < MAX_SHMID; i++) { struct shmid_ds *s = &shmids[i]; int size = s->size; uae_u8 *shmaddr; uae_u8 *result; if (!s->attached) continue; if (!s->natmembase) continue; if (s->fake) continue; if (!decommit && ((uae_u8*)s->attached - (uae_u8*)s->natmembase) >= 0x10000000) continue; shmaddr = natmem_offset + ((uae_u8*)s->attached - (uae_u8*)s->natmembase); if (decommit) { VirtualFree (shmaddr, size, MEM_DECOMMIT); } else { result = virtualallocwithlock (shmaddr, size, decommit ? MEM_DECOMMIT : MEM_COMMIT, PAGE_READWRITE); if (result != shmaddr) write_log (_T("NATMEM: realloc(%p-%p,%d,%d,%s) failed, err=%d\n"), shmaddr, shmaddr + size, size, s->mode, s->name, GetLastError ()); else write_log (_T("NATMEM: rellocated(%p-%p,%d,%s)\n"), shmaddr, shmaddr + size, size, s->name); } } } static ULONG getz2rtgaddr (void) { ULONG start; start = changed_prefs.fastmem_size; while (start & (changed_prefs.rtgmem_size - 1) && start < 4 * 1024 * 1024) start += 1024 * 1024; return start + 2 * 1024 * 1024; } #if 0 int init_shm (void) { uae_u32 size, totalsize, z3size, natmemsize; uae_u32 rtgbarrier, z3chipbarrier, rtgextra; int rounds = 0; ULONG z3rtgmem_size = currprefs.rtgmem_type ? currprefs.rtgmem_size : 0; restart: for (;;) { int lowround = 0; uae_u8 *blah = NULL; if (rounds > 0) write_log (_T("NATMEM: retrying %d..\n"), rounds); rounds++; if (natmem_offset) VirtualFree (natmem_offset, 0, MEM_RELEASE); natmem_offset = NULL; natmem_offset_end = NULL; canbang = 0; z3size = 0; size = 0x1000000; rtgextra = 0; z3chipbarrier = 0; rtgbarrier = si.dwPageSize; if (currprefs.cpu_model >= 68020) size = 0x10000000; if (currprefs.z3fastmem_size || currprefs.z3fastmem2_size || currprefs.z3chipmem_size) { z3size = currprefs.z3fastmem_size + currprefs.z3fastmem2_size + currprefs.z3chipmem_size + (currprefs.z3fastmem_start - 0x10000000); if (z3rtgmem_size) { rtgbarrier = 16 * 1024 * 1024 - ((currprefs.z3fastmem_size + currprefs.z3fastmem2_size) & 0x00ffffff); } if (currprefs.z3chipmem_size && (currprefs.z3fastmem_size || currprefs.z3fastmem2_size)) z3chipbarrier = 16 * 1024 * 1024; } else { rtgbarrier = 0; } totalsize = size + z3size + z3rtgmem_size; while (totalsize > size64) { int change = lowmem (); if (!change) return 0; write_log (_T("NATMEM: %d, %dM > %dM = %dM\n"), ++lowround, totalsize >> 20, size64 >> 20, (totalsize - change) >> 20); totalsize -= change; } if ((rounds > 1 && totalsize < 0x10000000) || rounds > 20) { write_log (_T("NATMEM: No special area could be allocated (3)!\n")); return 0; } natmemsize = size + z3size; if (z3rtgmem_size) { rtgextra = si.dwPageSize; } else { rtgbarrier = 0; rtgextra = 0; } natmem_size = natmemsize + rtgbarrier + z3chipbarrier + z3rtgmem_size + rtgextra + 16 * si.dwPageSize; blah = (uae_u8*)VirtualAlloc (NULL, natmem_size, MEM_RESERVE, PAGE_READWRITE); if (blah) { natmem_offset = blah; break; } natmem_size = 0; write_log (_T("NATMEM: %dM area failed to allocate, err=%d (Z3=%dM,RTG=%dM)\n"), natmemsize >> 20, GetLastError (), (currprefs.z3fastmem_size + currprefs.z3fastmem2_size + currprefs.z3chipmem_size) >> 20, z3rtgmem_size >> 20); if (!lowmem ()) { write_log (_T("NATMEM: No special area could be allocated (2)!\n")); return 0; } } p96mem_size = z3rtgmem_size; if (currprefs.rtgmem_size && currprefs.rtgmem_type) { VirtualFree (natmem_offset, 0, MEM_RELEASE); if (!VirtualAlloc (natmem_offset, natmemsize + rtgbarrier + z3chipbarrier, MEM_RESERVE, PAGE_READWRITE)) { write_log (_T("VirtualAlloc() part 2 error %d. RTG disabled.\n"), GetLastError ()); currprefs.rtgmem_size = changed_prefs.rtgmem_size = 0; rtgbarrier = si.dwPageSize; rtgextra = 0; goto restart; } p96mem_offset = (uae_u8*)VirtualAlloc (natmem_offset + natmemsize + rtgbarrier + z3chipbarrier, p96mem_size + rtgextra, MEM_RESERVE | MEM_WRITE_WATCH, PAGE_READWRITE); if (!p96mem_offset) { currprefs.rtgmem_size = changed_prefs.rtgmem_size = 0; z3rtgmem_size = 0; write_log (_T("NATMEM: failed to allocate special Picasso96 GFX RAM, err=%d\n"), GetLastError ()); } } else if (currprefs.rtgmem_size && !currprefs.rtgmem_type) { // This so annoying.. VirtualFree (natmem_offset, 0, MEM_RELEASE); // Chip + Z2Fast if (!VirtualAlloc (natmem_offset, 2 * 1024 * 1024 + currprefs.fastmem_size, MEM_RESERVE, PAGE_READWRITE)) { write_log (_T("VirtualAlloc() part 2 error %d. RTG disabled.\n"), GetLastError ()); currprefs.rtgmem_size = changed_prefs.rtgmem_size = 0; rtgbarrier = si.dwPageSize; rtgextra = 0; goto restart; } // After RTG if (!VirtualAlloc (natmem_offset + 2 * 1024 * 1024 + 8 * 1024 * 1024, natmemsize + rtgbarrier + z3chipbarrier - (2 * 1024 * 1024 + 8 * 1024 * 1024) + si.dwPageSize, MEM_RESERVE, PAGE_READWRITE)) { write_log (_T("VirtualAlloc() part 2 error %d. RTG disabled.\n"), GetLastError ()); currprefs.rtgmem_size = changed_prefs.rtgmem_size = 0; rtgbarrier = si.dwPageSize; rtgextra = 0; goto restart; } // RTG p96mem_offset = (uae_u8*)VirtualAlloc (natmem_offset + getz2rtgaddr (), 10 * 1024 * 1024 - getz2rtgaddr (), MEM_RESERVE | MEM_WRITE_WATCH, PAGE_READWRITE); if (!p96mem_offset) { currprefs.rtgmem_size = changed_prefs.rtgmem_size = 0; write_log (_T("NATMEM: failed to allocate special Picasso96 GFX RAM, err=%d\n"), GetLastError ()); } } if (!natmem_offset) { write_log (_T("NATMEM: No special area could be allocated! (1) err=%d\n"), GetLastError ()); } else { write_log (_T("NATMEM: Our special area: 0x%p-0x%p (%08x %dM)\n"), natmem_offset, (uae_u8*)natmem_offset + natmemsize, natmemsize, natmemsize >> 20); if (currprefs.rtgmem_size) write_log (_T("NATMEM: P96 special area: 0x%p-0x%p (%08x %dM)\n"), p96mem_offset, (uae_u8*)p96mem_offset + currprefs.rtgmem_size, currprefs.rtgmem_size, currprefs.rtgmem_size >> 20); canbang = 1; if (p96mem_size) natmem_offset_end = p96mem_offset + p96mem_size; else natmem_offset_end = natmem_offset + natmemsize; } resetmem (false); return canbang; } #endif static uae_u8 *va (uae_u32 offset, uae_u32 len, DWORD alloc, DWORD protect) { uae_u8 *addr; addr = (uae_u8*)VirtualAlloc (natmem_offset + offset, len, alloc, protect); if (addr) { write_log (_T("VA(%p - %p, %4uM, %s)\n"), natmem_offset + offset, natmem_offset + offset + len, len >> 20, (alloc & MEM_WRITE_WATCH) ? _T("WATCH") : _T("RESERVED")); return addr; } write_log (_T("VA(%p - %p, %4uM, %s) failed %d\n"), natmem_offset + offset, natmem_offset + offset + len, len >> 20, (alloc & MEM_WRITE_WATCH) ? _T("WATCH") : _T("RESERVED"), GetLastError ()); return NULL; } static int doinit_shm (void) { write_log("doinit_shm\n"); uae_u32 size, totalsize, z3size, natmemsize; uae_u32 rtgbarrier, z3chipbarrier, rtgextra; int rounds = 0; ULONG z3rtgmem_size; for (;;) { int lowround = 0; uae_u8 *blah = NULL; if (rounds > 0) write_log (_T("NATMEM: retrying %d..\n"), rounds); rounds++; z3size = 0; size = 0x1000000; rtgextra = 0; z3chipbarrier = 0; rtgbarrier = si.dwPageSize; z3rtgmem_size = changed_prefs.rtgmem_type ? changed_prefs.rtgmem_size : 0; if (changed_prefs.cpu_model >= 68020) size = 0x10000000; if (changed_prefs.z3fastmem_size || changed_prefs.z3fastmem2_size || changed_prefs.z3chipmem_size) { z3size = changed_prefs.z3fastmem_size + changed_prefs.z3fastmem2_size + changed_prefs.z3chipmem_size + (changed_prefs.z3fastmem_start - 0x10000000); if (z3rtgmem_size) { rtgbarrier = 16 * 1024 * 1024 - ((changed_prefs.z3fastmem_size + changed_prefs.z3fastmem2_size) & 0x00ffffff); } if (changed_prefs.z3chipmem_size && (changed_prefs.z3fastmem_size || changed_prefs.z3fastmem2_size)) z3chipbarrier = 16 * 1024 * 1024; } else { rtgbarrier = 0; } totalsize = size + z3size + z3rtgmem_size; while (totalsize > size64) { int change = lowmem (); if (!change) return 0; write_log (_T("NATMEM: %d, %dM > %dM = %dM\n"), ++lowround, totalsize >> 20, size64 >> 20, (totalsize - change) >> 20); totalsize -= change; } if ((rounds > 1 && totalsize < 0x10000000) || rounds > 20) { write_log (_T("NATMEM: No special area could be allocated (3)!\n")); return 0; } natmemsize = size + z3size; if (z3rtgmem_size) { rtgextra = si.dwPageSize; } else { rtgbarrier = 0; rtgextra = 0; } if (natmemsize + rtgbarrier + z3chipbarrier + z3rtgmem_size + rtgextra + 16 * si.dwPageSize <= natmem_size) break; write_log (_T("NATMEM: %dM area failed to allocate, err=%d (Z3=%dM,RTG=%dM)\n"), natmemsize >> 20, GetLastError (), (changed_prefs.z3fastmem_size + changed_prefs.z3fastmem2_size + changed_prefs.z3chipmem_size) >> 20, z3rtgmem_size >> 20); if (!lowmem ()) { write_log (_T("NATMEM: No special area could be allocated (2)!\n")); return 0; } } #if VAMODE == 1 p96mem_offset = NULL; p96mem_size = z3rtgmem_size; if (changed_prefs.rtgmem_size && changed_prefs.rtgmem_type) { p96mem_offset = natmem_offset + natmemsize + rtgbarrier + z3chipbarrier; } else if (changed_prefs.rtgmem_size && !changed_prefs.rtgmem_type) { p96mem_offset = natmem_offset + getz2rtgaddr (); } #else if (p96mem_offset) VirtualFree (p96mem_offset, 0, MEM_RELEASE); p96mem_offset = NULL; p96mem_size = z3rtgmem_size; if (changed_prefs.rtgmem_size && changed_prefs.rtgmem_type) { uae_u32 s, l; VirtualFree (natmem_offset, 0, MEM_RELEASE); s = 0; l = natmemsize + rtgbarrier + z3chipbarrier; if (!va (s, l, MEM_RESERVE, PAGE_READWRITE)) return 0; s = natmemsize + rtgbarrier + z3chipbarrier; l = p96mem_size + rtgextra; p96mem_offset = va (s, l, MEM_RESERVE | MEM_WRITE_WATCH, PAGE_READWRITE); if (!p96mem_offset) { currprefs.rtgmem_size = changed_prefs.rtgmem_size = 0; z3rtgmem_size = 0; write_log (_T("NATMEM: failed to allocate special Picasso96 GFX RAM, err=%d\n"), GetLastError ()); } #if 0 s = natmemsize + rtgbarrier + z3chipbarrier + p96mem_size + rtgextra + 4096; l = natmem_size - s - 4096; if (natmem_size > l) { if (!va (s, l, MEM_RESERVE, PAGE_READWRITE)) return 0; } #endif } else if (changed_prefs.rtgmem_size && !changed_prefs.rtgmem_type) { uae_u32 s, l; VirtualFree (natmem_offset, 0, MEM_RELEASE); // Chip + Z2Fast s = 0; l = 2 * 1024 * 1024 + changed_prefs.fastmem_size; if (!va (s, l, MEM_RESERVE, PAGE_READWRITE)) { currprefs.rtgmem_size = changed_prefs.rtgmem_size = 0; } // After RTG s = 2 * 1024 * 1024 + 8 * 1024 * 1024; l = natmem_size - (2 * 1024 * 1024 + 8 * 1024 * 1024) + si.dwPageSize; if (!va (s, l, MEM_RESERVE, PAGE_READWRITE)) { currprefs.rtgmem_size = changed_prefs.rtgmem_size = 0; } // RTG s = getz2rtgaddr (); l = 10 * 1024 * 1024 - getz2rtgaddr (); p96mem_offset = va (s, l, MEM_RESERVE | MEM_WRITE_WATCH, PAGE_READWRITE); if (!p96mem_offset) { currprefs.rtgmem_size = changed_prefs.rtgmem_size = 0; } } else { VirtualFree (natmem_offset, 0, MEM_RELEASE); if (!VirtualAlloc (natmem_offset, natmem_size, MEM_RESERVE, PAGE_READWRITE)) { write_log (_T("NATMEM: No special area could be reallocated! (1) err=%d\n"), GetLastError ()); return 0; } } #endif if (!natmem_offset) { write_log (_T("NATMEM: No special area could be allocated! err=%d\n"), GetLastError ()); } else { write_log (_T("NATMEM: Our special area: 0x%p-0x%p (%08x %dM)\n"), natmem_offset, (uae_u8*)natmem_offset + natmemsize, natmemsize, natmemsize >> 20); if (changed_prefs.rtgmem_size) write_log (_T("NATMEM: P96 special area: 0x%p-0x%p (%08x %dM)\n"), p96mem_offset, (uae_u8*)p96mem_offset + changed_prefs.rtgmem_size, changed_prefs.rtgmem_size, changed_prefs.rtgmem_size >> 20); canbang = 1; if (p96mem_size) natmem_offset_end = p96mem_offset + p96mem_size; else natmem_offset_end = natmem_offset + natmemsize; } return canbang; } bool init_shm (void) { write_log("init_shm\n"); static uae_u32 oz3fastmem_size, oz3fastmem2_size; static uae_u32 oz3chipmem_size; static uae_u32 ortgmem_size; static int ortgmem_type; if ( oz3fastmem_size == changed_prefs.z3fastmem_size && oz3fastmem2_size == changed_prefs.z3fastmem2_size && oz3chipmem_size == changed_prefs.z3chipmem_size && ortgmem_size == changed_prefs.rtgmem_size && ortgmem_type == changed_prefs.rtgmem_type) return false; oz3fastmem_size = changed_prefs.z3fastmem_size; oz3fastmem2_size = changed_prefs.z3fastmem2_size; oz3chipmem_size = changed_prefs.z3chipmem_size;; ortgmem_size = changed_prefs.rtgmem_size; ortgmem_type = changed_prefs.rtgmem_type; doinit_shm (); resetmem (false); clear_shm (); memory_hardreset (2); return true; } void free_shm (void) { resetmem (true); clear_shm (); } void mapped_free (uae_u8 *mem) { shmpiece *x = shm_start; if (mem == filesysory) { while(x) { if (mem == x->native_address) { int shmid = x->id; shmids[shmid].key = -1; shmids[shmid].name[0] = '\0'; shmids[shmid].size = 0; shmids[shmid].attached = 0; shmids[shmid].mode = 0; shmids[shmid].natmembase = 0; } x = x->next; } return; } while(x) { if(mem == x->native_address) uae_shmdt (x->native_address); x = x->next; } x = shm_start; while(x) { struct shmid_ds blah; if (mem == x->native_address) { if (uae_shmctl (x->id, IPC_STAT, &blah) == 0) uae_shmctl (x->id, IPC_RMID, &blah); } x = x->next; } } static uae_key_t get_next_shmkey (void) { uae_key_t result = -1; int i; for (i = 0; i < MAX_SHMID; i++) { if (shmids[i].key == -1) { shmids[i].key = i; result = i; break; } } return result; } STATIC_INLINE uae_key_t find_shmkey (uae_key_t key) { int result = -1; if(shmids[key].key == key) { result = key; } return result; } int mprotect (void *addr, size_t len, int prot) #ifdef PANDORA __THROW #endif { int result = 0; return result; } void *uae_shmat (int shmid, void *shmaddr, int shmflg) { write_log("uae_shmat shmid %d shmaddr %p, shmflg %d natmem_offset = %p\n", shmid, shmaddr, shmflg, natmem_offset); void *result = (void *)-1; BOOL got = FALSE, readonly = FALSE, maprom = FALSE; int p96special = FALSE; #ifdef NATMEM_OFFSET unsigned int size = shmids[shmid].size; unsigned int readonlysize = size; if (shmids[shmid].attached) return shmids[shmid].attached; if ((uae_u8*)shmaddr < natmem_offset) { if(!_tcscmp (shmids[shmid].name, _T("chip"))) { shmaddr=natmem_offset; got = TRUE; if (getz2endaddr () <= 2 * 1024 * 1024 || currprefs.chipmem_size < 2 * 1024 * 1024) size += BARRIER; } else if(!_tcscmp (shmids[shmid].name, _T("kick"))) { shmaddr=natmem_offset + 0xf80000; got = TRUE; size += BARRIER; readonly = TRUE; maprom = TRUE; } else if(!_tcscmp (shmids[shmid].name, _T("rom_a8"))) { shmaddr=natmem_offset + 0xa80000; got = TRUE; readonly = TRUE; maprom = TRUE; } else if(!_tcscmp (shmids[shmid].name, _T("rom_e0"))) { shmaddr=natmem_offset + 0xe00000; got = TRUE; readonly = TRUE; maprom = TRUE; } else if(!_tcscmp (shmids[shmid].name, _T("rom_f0"))) { shmaddr=natmem_offset + 0xf00000; got = TRUE; readonly = TRUE; } else if(!_tcscmp (shmids[shmid].name, _T("rtarea"))) { shmaddr=natmem_offset + rtarea_base; got = TRUE; readonly = TRUE; readonlysize = RTAREA_TRAPS; } else if(!_tcscmp (shmids[shmid].name, _T("fast"))) { shmaddr=natmem_offset + 0x200000; got = TRUE; if (!(currprefs.rtgmem_size && !currprefs.rtgmem_type)) size += BARRIER; } else if(!_tcscmp (shmids[shmid].name, _T("z2_gfx"))) { ULONG start = getz2rtgaddr (); got = TRUE; p96special = TRUE; shmaddr = natmem_offset + start; p96ram_start = start; if (start + currprefs.rtgmem_size < 10 * 1024 * 1024) size += BARRIER; } else if(!_tcscmp (shmids[shmid].name, _T("ramsey_low"))) { shmaddr=natmem_offset + a3000lmem_start; got = TRUE; } else if(!_tcscmp (shmids[shmid].name, _T("ramsey_high"))) { shmaddr=natmem_offset + a3000hmem_start; got = TRUE; } else if(!_tcscmp (shmids[shmid].name, _T("z3"))) { shmaddr=natmem_offset + z3fastmem_start; if (!currprefs.z3fastmem2_size) size += BARRIER; got = TRUE; } else if(!_tcscmp (shmids[shmid].name, _T("z3_2"))) { shmaddr=natmem_offset + z3fastmem_start + currprefs.z3fastmem_size; size += BARRIER; got = TRUE; } else if(!_tcscmp (shmids[shmid].name, _T("z3_chip"))) { shmaddr=natmem_offset + z3chipmem_start; size += BARRIER; got = TRUE; } else if(!_tcscmp (shmids[shmid].name, _T("z3_gfx"))) { got = TRUE; p96special = TRUE; p96ram_start = p96mem_offset - natmem_offset; shmaddr = natmem_offset + p96ram_start; size += BARRIER; } else if(!_tcscmp (shmids[shmid].name, _T("bogo"))) { shmaddr=natmem_offset+0x00C00000; got = TRUE; if (currprefs.bogomem_size <= 0x100000) size += BARRIER; } else if(!_tcscmp (shmids[shmid].name, _T("filesys"))) { static uae_u8 *filesysptr; if (filesysptr == NULL) filesysptr = xcalloc (uae_u8, size); result = filesysptr; shmids[shmid].attached = result; shmids[shmid].fake = true; return result; } else if(!_tcscmp (shmids[shmid].name, _T("custmem1"))) { shmaddr=natmem_offset + currprefs.custom_memory_addrs[0]; got = TRUE; } else if(!_tcscmp (shmids[shmid].name, _T("custmem2"))) { shmaddr=natmem_offset + currprefs.custom_memory_addrs[1]; got = TRUE; } else if(!_tcscmp (shmids[shmid].name, _T("hrtmem"))) { shmaddr=natmem_offset + 0x00a10000; got = TRUE; } else if(!_tcscmp (shmids[shmid].name, _T("arhrtmon"))) { shmaddr=natmem_offset + 0x00800000; size += BARRIER; got = TRUE; } else if(!_tcscmp (shmids[shmid].name, _T("xpower_e2"))) { shmaddr=natmem_offset + 0x00e20000; size += BARRIER; got = TRUE; } else if(!_tcscmp (shmids[shmid].name, _T("xpower_f2"))) { shmaddr=natmem_offset + 0x00f20000; size += BARRIER; got = TRUE; } else if(!_tcscmp (shmids[shmid].name, _T("nordic_f0"))) { shmaddr=natmem_offset + 0x00f00000; size += BARRIER; got = TRUE; } else if(!_tcscmp (shmids[shmid].name, _T("nordic_f4"))) { shmaddr=natmem_offset + 0x00f40000; size += BARRIER; got = TRUE; } else if(!_tcscmp (shmids[shmid].name, _T("nordic_f6"))) { shmaddr=natmem_offset + 0x00f60000; size += BARRIER; got = TRUE; } else if(!_tcscmp(shmids[shmid].name, _T("superiv_b0"))) { shmaddr=natmem_offset + 0x00b00000; size += BARRIER; got = TRUE; } else if(!_tcscmp (shmids[shmid].name, _T("superiv_d0"))) { shmaddr=natmem_offset + 0x00d00000; size += BARRIER; got = TRUE; } else if(!_tcscmp (shmids[shmid].name, _T("superiv_e0"))) { shmaddr=natmem_offset + 0x00e00000; size += BARRIER; got = TRUE; } } #endif if (shmids[shmid].key == shmid && shmids[shmid].size) { DWORD protect = readonly ? PAGE_READONLY : PAGE_READWRITE; shmids[shmid].mode = protect; shmids[shmid].rosize = readonlysize; shmids[shmid].natmembase = natmem_offset; shmids[shmid].maprom = maprom ? 1 : 0; if (shmaddr) virtualfreewithlock (shmaddr, size, MEM_DECOMMIT); result = virtualallocwithlock (shmaddr, size, MEM_COMMIT, PAGE_READWRITE); if (result == NULL) virtualfreewithlock (shmaddr, 0, MEM_DECOMMIT); result = virtualallocwithlock (shmaddr, size, MEM_COMMIT, PAGE_READWRITE); if (result == NULL) { result = (void*)-1; write_log (_T("VA %08X - %08X %x (%dk) failed %d\n"), (uae_u8*)shmaddr - natmem_offset, (uae_u8*)shmaddr - natmem_offset + size, size, size >> 10, GetLastError ()); } else { shmids[shmid].attached = result; write_log (_T("VA %08X - %08X %x (%dk) ok (%08X)%s\n"), (uae_u8*)shmaddr - natmem_offset, (uae_u8*)shmaddr - natmem_offset + size, size, size >> 10, shmaddr, p96special ? _T(" P96") : _T("")); } } return result; } void unprotect_maprom (void) { bool protect = false; for (int i = 0; i < MAX_SHMID; i++) { DWORD old; struct shmid_ds *shm = &shmids[i]; if (shm->mode != PAGE_READONLY) continue; if (!shm->attached || !shm->rosize) continue; if (shm->maprom <= 0) continue; shm->maprom = -1; #ifdef WINDOWS if (!VirtualProtect (shm->attached, shm->rosize, protect ? PAGE_READONLY : PAGE_READWRITE, &old)) { write_log (_T("VP %08X - %08X %x (%dk) failed %d\n"), (uae_u8*)shm->attached - natmem_offset, (uae_u8*)shm->attached - natmem_offset + shm->size, shm->size, shm->size >> 10, GetLastError ()); } #endif } } void protect_roms (bool protect) { if (protect) { // protect only if JIT enabled, always allow unprotect if (!currprefs.cachesize || currprefs.comptrustbyte || currprefs.comptrustword || currprefs.comptrustlong) return; } for (int i = 0; i < MAX_SHMID; i++) { DWORD old; struct shmid_ds *shm = &shmids[i]; if (shm->mode != PAGE_READONLY) continue; if (!shm->attached || !shm->rosize) continue; if (shm->maprom < 0 && protect) continue; #ifdef WINDOWS if (!VirtualProtect (shm->attached, shm->rosize, protect ? PAGE_READONLY : PAGE_READWRITE, &old)) { write_log (_T("VP %08X - %08X %x (%dk) failed %d\n"), (uae_u8*)shm->attached - natmem_offset, (uae_u8*)shm->attached - natmem_offset + shm->size, shm->size, shm->size >> 10, GetLastError ()); } #endif } } int uae_shmdt (const void *shmaddr) { return 0; } int uae_shmget (uae_key_t key, size_t size, int shmflg, const TCHAR *name) { int result = -1; if((key == IPC_PRIVATE) || ((shmflg & IPC_CREAT) && (find_shmkey (key) == -1))) { write_log (_T("shmget of size %d (%dk) for %s\n"), size, size >> 10, name); if ((result = get_next_shmkey ()) != -1) { shmids[result].size = size; _tcscpy (shmids[result].name, name); } else { result = -1; } } return result; } int uae_shmctl (int shmid, int cmd, struct shmid_ds *buf) { int result = -1; if ((find_shmkey (shmid) != -1) && buf) { switch (cmd) { case IPC_STAT: *buf = shmids[shmid]; result = 0; break; case IPC_RMID: VirtualFree (shmids[shmid].attached, shmids[shmid].size, MEM_DECOMMIT); shmids[shmid].key = -1; shmids[shmid].name[0] = '\0'; shmids[shmid].size = 0; shmids[shmid].attached = 0; shmids[shmid].mode = 0; result = 0; break; } } return result; } #endif #ifdef FSUAE #else int isinf (double x) { const int nClass = _fpclass (x); int result; if (nClass == _FPCLASS_NINF || nClass == _FPCLASS_PINF) result = 1; else result = 0; return result; } #endif fs-uae-2.2.3+dfsg/src/od-fs/mman_windows.h0000644000175000017500000000204412162366654020526 0ustar glaubitzglaubitz// Implement MMAN and SHM functionality for Win32 // Copyright (C) 2000, Brian King // GNU Public License #ifndef _MMAN_H_ #define _MMAN_H_ #include #include // for size_t #include #include #define MAX_SHMID 256 extern uae_u8 *natmem_offset, *natmem_offset_end; typedef int uae_key_t; typedef USHORT ushort; /* One shmid data structure for each shared memory segment in the system. */ struct shmid_ds { uae_key_t key; size_t size; void *addr; TCHAR name[MAX_PATH]; void *attached; int mode; void *natmembase; }; int mprotect (void *addr, size_t len, int prot); void *shmat (int shmid, LPVOID shmaddr, int shmflg); int shmdt (const void *shmaddr); int shmget (uae_key_t key, size_t size, int shmflg, const TCHAR*); int shmctl (int shmid, int cmd, struct shmid_ds *buf); int init_shm (void); #define PROT_READ 0x01 #define PROT_WRITE 0x02 #define PROT_EXEC 0x04 #define IPC_PRIVATE 0x01 #define IPC_RMID 0x02 #define IPC_CREAT 0x04 #define IPC_STAT 0x08 #endif fs-uae-2.2.3+dfsg/src/cpummu.cpp0000644000175000017500000006246012162366655016666 0ustar glaubitzglaubitz/* * cpummu.cpp - MMU emulation * * Copyright (c) 2001-2004 Milan Jurik of ARAnyM dev team (see AUTHORS) * * Inspired by UAE MMU patch * * This file is part of the ARAnyM project which builds a new and powerful * TOS/FreeMiNT compatible virtual machine running on almost any hardware. * * ARAnyM is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * ARAnyM is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with ARAnyM; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #define DEBUG 0 #define USETAG 0 #include "sysconfig.h" #include "sysdeps.h" #include "options.h" #include "uae/memory.h" #include "newcpu.h" #include "debug.h" #include "cpummu.h" static void REGPARAM3 mmu_flush_atc(uaecptr addr, bool super, bool global) REGPARAM; static void REGPARAM3 mmu_flush_atc_all(bool global) REGPARAM; #define DBG_MMU_VERBOSE 1 #define DBG_MMU_SANITY 1 #ifdef FULLMMU mmu_atc_l1_array atc_l1[2]; mmu_atc_l1_array *current_atc; static struct mmu_atc_line atc_l2[2][ATC_L2_SIZE]; # ifdef ATC_STATS static unsigned int mmu_atc_hits[ATC_L2_SIZE]; # endif static void mmu_dump_ttr(const TCHAR * label, uae_u32 ttr) { DUNUSED(label); uae_u32 from_addr, to_addr; from_addr = ttr & MMU_TTR_LOGICAL_BASE; to_addr = (ttr & MMU_TTR_LOGICAL_MASK) << 8; D(bug(_T("%s: [%08lx] %08lx - %08lx enabled=%d supervisor=%d wp=%d cm=%02d\n"), label, ttr, from_addr, to_addr, ttr & MMU_TTR_BIT_ENABLED ? 1 : 0, (ttr & (MMU_TTR_BIT_SFIELD_ENABLED | MMU_TTR_BIT_SFIELD_SUPER)) >> MMU_TTR_SFIELD_SHIFT, ttr & MMU_TTR_BIT_WRITE_PROTECT ? 1 : 0, (ttr & MMU_TTR_CACHE_MASK) >> MMU_TTR_CACHE_SHIFT )); } void mmu_make_transparent_region(uaecptr baseaddr, uae_u32 size, int datamode) { uae_u32 * ttr; uae_u32 * ttr0 = datamode ? ®s.dtt0 : ®s.itt0; uae_u32 * ttr1 = datamode ? ®s.dtt1 : ®s.itt1; if ((*ttr1 & MMU_TTR_BIT_ENABLED) == 0) ttr = ttr1; else if ((*ttr0 & MMU_TTR_BIT_ENABLED) == 0) ttr = ttr0; else return; *ttr = baseaddr & MMU_TTR_LOGICAL_BASE; *ttr |= ((baseaddr + size - 1) & MMU_TTR_LOGICAL_BASE) >> 8; *ttr |= MMU_TTR_BIT_ENABLED; D(bug(_T("MMU: map transparent mapping of %08x\n"), *ttr)); } /* check if an address matches a ttr */ static int mmu_do_match_ttr(uae_u32 ttr, uaecptr addr, bool super) { if (ttr & MMU_TTR_BIT_ENABLED) { /* TTR enabled */ uae_u8 msb, mask; msb = ((addr ^ ttr) & MMU_TTR_LOGICAL_BASE) >> 24; mask = (ttr & MMU_TTR_LOGICAL_MASK) >> 16; if (!(msb & ~mask)) { if ((ttr & MMU_TTR_BIT_SFIELD_ENABLED) == 0) { if (((ttr & MMU_TTR_BIT_SFIELD_SUPER) == 0) != (super == 0)) { return TTR_NO_MATCH; } } return (ttr & MMU_TTR_BIT_WRITE_PROTECT) ? TTR_NO_WRITE : TTR_OK_MATCH; } } return TTR_NO_MATCH; } static inline int mmu_match_ttr(uaecptr addr, bool super, bool data) { int res; if (data) { res = mmu_do_match_ttr(regs.dtt0, addr, super); if (res == TTR_NO_MATCH) res = mmu_do_match_ttr(regs.dtt1, addr, super); } else { res = mmu_do_match_ttr(regs.itt0, addr, super); if (res == TTR_NO_MATCH) res = mmu_do_match_ttr(regs.itt1, addr, super); } return res; } #if DEBUG /* {{{ mmu_dump_table */ static void mmu_dump_table(const char * label, uaecptr root_ptr) { DUNUSED(label); const int ROOT_TABLE_SIZE = 128, PTR_TABLE_SIZE = 128, PAGE_TABLE_SIZE = 64, ROOT_INDEX_SHIFT = 25, PTR_INDEX_SHIFT = 18; // const int PAGE_INDEX_SHIFT = 12; int root_idx, ptr_idx, page_idx; uae_u32 root_des, ptr_des, page_des; uaecptr ptr_des_addr, page_addr, root_log, ptr_log, page_log; D(bug(_T("%s: root=%lx\n"), label, root_ptr)); for (root_idx = 0; root_idx < ROOT_TABLE_SIZE; root_idx++) { root_des = phys_get_long(root_ptr + root_idx); if ((root_des & 2) == 0) continue; /* invalid */ D(bug(_T("ROOT: %03d U=%d W=%d UDT=%02d\n"), root_idx, root_des & 8 ? 1 : 0, root_des & 4 ? 1 : 0, root_des & 3 )); root_log = root_idx << ROOT_INDEX_SHIFT; ptr_des_addr = root_des & MMU_ROOT_PTR_ADDR_MASK; for (ptr_idx = 0; ptr_idx < PTR_TABLE_SIZE; ptr_idx++) { struct { uaecptr log, phys; int start_idx, n_pages; /* number of pages covered by this entry */ uae_u32 match; } page_info[PAGE_TABLE_SIZE]; int n_pages_used; ptr_des = phys_get_long(ptr_des_addr + ptr_idx); ptr_log = root_log | (ptr_idx << PTR_INDEX_SHIFT); if ((ptr_des & 2) == 0) continue; /* invalid */ page_addr = ptr_des & (regs.mmu_pagesize_8k ? MMU_PTR_PAGE_ADDR_MASK_8 : MMU_PTR_PAGE_ADDR_MASK_4); n_pages_used = -1; for (page_idx = 0; page_idx < PAGE_TABLE_SIZE; page_idx++) { page_des = phys_get_long(page_addr + page_idx); page_log = ptr_log | (page_idx << 2); // ??? PAGE_INDEX_SHIFT switch (page_des & 3) { case 0: /* invalid */ continue; case 1: case 3: /* resident */ case 2: /* indirect */ if (n_pages_used == -1 || page_info[n_pages_used].match != page_des) { /* use the next entry */ n_pages_used++; page_info[n_pages_used].match = page_des; page_info[n_pages_used].n_pages = 1; page_info[n_pages_used].start_idx = page_idx; page_info[n_pages_used].log = page_log; } else { page_info[n_pages_used].n_pages++; } break; } } if (n_pages_used == -1) continue; D(bug(_T(" PTR: %03d U=%d W=%d UDT=%02d\n"), ptr_idx, ptr_des & 8 ? 1 : 0, ptr_des & 4 ? 1 : 0, ptr_des & 3 )); for (page_idx = 0; page_idx <= n_pages_used; page_idx++) { page_des = page_info[page_idx].match; if ((page_des & MMU_PDT_MASK) == 2) { D(bug(_T(" PAGE: %03d-%03d log=%08lx INDIRECT --> addr=%08lx\n"), page_info[page_idx].start_idx, page_info[page_idx].start_idx + page_info[page_idx].n_pages - 1, page_info[page_idx].log, page_des & MMU_PAGE_INDIRECT_MASK )); } else { D(bug(_T(" PAGE: %03d-%03d log=%08lx addr=%08lx UR=%02d G=%d U1/0=%d S=%d CM=%d M=%d U=%d W=%d\n"), page_info[page_idx].start_idx, page_info[page_idx].start_idx + page_info[page_idx].n_pages - 1, page_info[page_idx].log, page_des & (regs.mmu_pagesize_8k ? MMU_PAGE_ADDR_MASK_8 : MMU_PAGE_ADDR_MASK_4), (page_des & (regs.mmu_pagesize_8k ? MMU_PAGE_UR_MASK_8 : MMU_PAGE_UR_MASK_4)) >> MMU_PAGE_UR_SHIFT, page_des & MMU_DES_GLOBAL ? 1 : 0, (page_des & MMU_TTR_UX_MASK) >> MMU_TTR_UX_SHIFT, page_des & MMU_DES_SUPER ? 1 : 0, (page_des & MMU_TTR_CACHE_MASK) >> MMU_TTR_CACHE_SHIFT, page_des & MMU_DES_MODIFIED ? 1 : 0, page_des & MMU_DES_USED ? 1 : 0, page_des & MMU_DES_WP ? 1 : 0 )); } } } } } /* }}} */ #endif /* {{{ mmu_dump_atc */ void mmu_dump_atc(void) { int i, j; for (i = 0; i < 2; i++) { for (j = 0; j < ATC_L2_SIZE; j++) { if (atc_l2[i][j].tag == 0x8000) continue; D(bug(_T("ATC[%02d] G=%d TT=%d M=%d WP=%d VD=%d VI=%d tag=%08x --> phys=%08x\n"), j, atc_l2[i][j].global, atc_l2[i][j].tt, atc_l2[i][j].modified, atc_l2[i][j].write_protect, atc_l2[i][j].valid_data, atc_l2[i][j].valid_inst, atc_l2[i][j].tag, atc_l2[i][j].phys)); } } } /* }}} */ /* {{{ mmu_dump_tables */ void mmu_dump_tables(void) { D(bug(_T("URP: %08x SRP: %08x MMUSR: %x TC: %x\n"), regs.urp, regs.srp, regs.mmusr, regs.tcr)); mmu_dump_ttr(_T("DTT0"), regs.dtt0); mmu_dump_ttr(_T("DTT1"), regs.dtt1); mmu_dump_ttr(_T("ITT0"), regs.itt0); mmu_dump_ttr(_T("ITT1"), regs.itt1); mmu_dump_atc(); #if DEBUG mmu_dump_table("SRP", regs.srp); #endif } /* }}} */ static uaecptr REGPARAM2 mmu_lookup_pagetable(uaecptr addr, bool super, bool write); static ALWAYS_INLINE int mmu_get_fc(bool super, bool data) { return (super ? 4 : 0) | (data ? 1 : 2); } static void mmu_bus_error(uaecptr addr, int fc, bool write, int size) { uae_u16 ssw = 0; ssw |= fc & MMU_SSW_TM; /* Copy TM */ switch (size) { case sz_byte: ssw |= MMU_SSW_SIZE_B; break; case sz_word: ssw |= MMU_SSW_SIZE_W; break; case sz_long: ssw |= MMU_SSW_SIZE_L; break; } regs.wb3_status = write ? 0x80 | ssw : 0; if (!write) ssw |= MMU_SSW_RW; regs.mmu_fault_addr = addr; regs.mmu_ssw = ssw | MMU_SSW_ATC; D(bug(_T("BUS ERROR: fc=%d w=%d log=%08x ssw=%04x PC=%08x\n"), fc, write, addr, ssw, m68k_getpc())); //write_log(_T("BUS ERROR: fc=%d w=%d log=%08x ssw=%04x PC=%08x\n"), fc, write, addr, ssw, m68k_getpc()); //activate_debugger(); THROW(2); } /* * Update the atc line for a given address by doing a mmu lookup. */ static uaecptr mmu_fill_atc_l2(uaecptr addr, bool super, bool data, bool write, struct mmu_atc_line *l) { int res; uae_u32 desc; l->tag = ATC_TAG(addr); l->hw = l->bus_fault = 0; /* check ttr0 */ res = mmu_match_ttr(addr, super, data); if (res != TTR_NO_MATCH) { l->tt = 1; if (data) { l->valid_data = 1; l->valid_inst = mmu_match_ttr(addr, super, 0) == res; } else { l->valid_inst = 1; l->valid_data = mmu_match_ttr(addr, super, 1) == res; } l->global = 1; l->modified = 1; l->write_protect = (res == TTR_NO_WRITE); l->phys = 0; return 0; } l->tt = 0; if (!regs.mmu_enabled) { l->valid_data = l->valid_inst = 1; l->global = 1; l->modified = 1; l->write_protect = 0; l->phys = 0; return 0; } SAVE_EXCEPTION; TRY(prb) { desc = mmu_lookup_pagetable(addr, super, write); #if DEBUG > 2 D(bug(_T("translate: %x,%u,%u,%u -> %x\n"), addr, super, write, data, desc)); #endif RESTORE_EXCEPTION; } CATCH(prb) { RESTORE_EXCEPTION; /* bus error during table search */ desc = 0; goto fail; } if ((desc & 1) == 0 || (!super && desc & MMU_MMUSR_S)) { fail: l->valid_data = l->valid_inst = 0; l->global = 0; } else { l->valid_data = l->valid_inst = 1; if (regs.mmu_pagesize_8k) l->phys = (desc & ~0x1fff) - (addr & ~0x1fff); else l->phys = (desc & ~0xfff) - (addr & ~0xfff); l->global = (desc & MMU_MMUSR_G) != 0; l->modified = (desc & MMU_MMUSR_M) != 0; l->write_protect = (desc & MMU_MMUSR_W) != 0; } return desc; } static ALWAYS_INLINE bool mmu_fill_atc_l1(uaecptr addr, bool super, bool data, bool write, struct mmu_atc_line *l1) { int idx = ATC_L2_INDEX(addr); int tag = ATC_TAG(addr); struct mmu_atc_line *l = &atc_l2[super ? 1 : 0][idx]; if (l->tag != tag) { restart: mmu_fill_atc_l2(addr, super, data, write, l); } if (!(data ? l->valid_data : l->valid_inst)) { D(bug(_T("MMU: non-resident page (%x,%x,%x)!\n"), addr, regs.pc, regs.instruction_pc)); goto fail; } if (write) { if (l->write_protect) { D(bug(_T("MMU: write protected (via %s) %lx\n"), l->tt ? "ttr" : "atc", addr)); goto fail; } if (!l->modified) goto restart; } *l1 = *l; #if 0 uaecptr phys_addr = addr + l1->phys; if ((phys_addr & 0xfff00000) == 0x00f00000) { l1->hw = 1; goto fail; } if ((phys_addr & 0xfff00000) == 0xfff00000) { l1->hw = 1; l1->phys -= 0xff000000; goto fail; } if (!test_ram_boundary(phys_addr, 1, super, write)) { l1->bus_fault = 1; goto fail; } #endif return true; fail: l1->tag = ~l1->tag; return false; } uaecptr REGPARAM2 mmu_translate(uaecptr addr, bool super, bool data, bool write) { struct mmu_atc_line *l; l = &atc_l2[super ? 1 : 0][ATC_L2_INDEX(addr)]; mmu_fill_atc_l2(addr, super, data, write, l); if (!(data ? l->valid_data : l->valid_inst)) THROW(2); return addr + l->phys; } /* * Lookup the address by walking the page table and updating * the page descriptors accordingly. Returns the found descriptor * or produces a bus error. */ static uaecptr REGPARAM2 mmu_lookup_pagetable(uaecptr addr, bool super, bool write) { uae_u32 desc, desc_addr, wp; int i; wp = 0; desc = super ? regs.srp : regs.urp; /* fetch root table descriptor */ i = (addr >> 23) & 0x1fc; desc_addr = (desc & MMU_ROOT_PTR_ADDR_MASK) | i; desc = phys_get_long(desc_addr); if ((desc & 2) == 0) { D(bug(_T("MMU: invalid root descriptor for %lx\n"), addr)); return 0; } wp |= desc; if ((desc & MMU_DES_USED) == 0) phys_put_long(desc_addr, desc | MMU_DES_USED); /* fetch pointer table descriptor */ i = (addr >> 16) & 0x1fc; desc_addr = (desc & MMU_ROOT_PTR_ADDR_MASK) | i; desc = phys_get_long(desc_addr); if ((desc & 2) == 0) { D(bug(_T("MMU: invalid ptr descriptor for %lx\n"), addr)); return 0; } wp |= desc; if ((desc & MMU_DES_USED) == 0) phys_put_long(desc_addr, desc | MMU_DES_USED); /* fetch page table descriptor */ if (regs.mmu_pagesize_8k) { i = (addr >> 11) & 0x7c; desc_addr = (desc & MMU_PTR_PAGE_ADDR_MASK_8) | i; } else { i = (addr >> 10) & 0xfc; desc_addr = (desc & MMU_PTR_PAGE_ADDR_MASK_4) | i; } desc = phys_get_long(desc_addr); if ((desc & 3) == 2) { /* indirect */ desc_addr = desc & MMU_PAGE_INDIRECT_MASK; desc = phys_get_long(desc_addr); } if ((desc & 1) == 0) { D(bug(_T("MMU: invalid page descriptor log=%08lx desc=%08lx @%08lx\n"), addr, desc, desc_addr)); return desc; } desc |= wp & MMU_DES_WP; if (write) { if (desc & MMU_DES_WP) { if ((desc & MMU_DES_USED) == 0) { desc |= MMU_DES_USED; phys_put_long(desc_addr, desc); } } else if ((desc & (MMU_DES_USED|MMU_DES_MODIFIED)) != (MMU_DES_USED|MMU_DES_MODIFIED)) { desc |= MMU_DES_USED|MMU_DES_MODIFIED; phys_put_long(desc_addr, desc); } } else { if ((desc & MMU_DES_USED) == 0) { desc |= MMU_DES_USED; phys_put_long(desc_addr, desc); } } return desc; } uae_u16 REGPARAM2 mmu_get_word_unaligned(uaecptr addr, bool data) { uae_u16 res; res = (uae_u16)mmu_get_byte(addr, data, sz_word) << 8; SAVE_EXCEPTION; TRY(prb) { res |= mmu_get_byte(addr + 1, data, sz_word); RESTORE_EXCEPTION; } CATCH(prb) { RESTORE_EXCEPTION; regs.mmu_fault_addr = addr; regs.mmu_ssw |= MMU_SSW_MA; THROW_AGAIN(prb); } return res; } uae_u32 REGPARAM2 mmu_get_long_unaligned(uaecptr addr, bool data) { uae_u32 res; if (likely(!(addr & 1))) { res = (uae_u32)mmu_get_word(addr, data, sz_long) << 16; SAVE_EXCEPTION; TRY(prb) { res |= mmu_get_word(addr + 2, data, sz_long); RESTORE_EXCEPTION; } CATCH(prb) { RESTORE_EXCEPTION; regs.mmu_fault_addr = addr; regs.mmu_ssw |= MMU_SSW_MA; THROW_AGAIN(prb); } } else { res = (uae_u32)mmu_get_byte(addr, data, sz_long) << 8; SAVE_EXCEPTION; TRY(prb) { res = (res | mmu_get_byte(addr + 1, data, sz_long)) << 8; res = (res | mmu_get_byte(addr + 2, data, sz_long)) << 8; res |= mmu_get_byte(addr + 3, data, sz_long); RESTORE_EXCEPTION; } CATCH(prb) { RESTORE_EXCEPTION; regs.mmu_fault_addr = addr; regs.mmu_ssw |= MMU_SSW_MA; THROW_AGAIN(prb); } } return res; } uae_u8 REGPARAM2 mmu_get_byte_slow(uaecptr addr, bool super, bool data, int size, struct mmu_atc_line *cl) { uae_u32 tag = ATC_TAG(addr); if (USETAG && cl->tag == (uae_u16)~tag) { redo: if (cl->hw) return HWget_b(cl->phys + addr); mmu_bus_error(addr, mmu_get_fc(super, data), 0, size); return 0; } if (!mmu_fill_atc_l1(addr, super, data, 0, cl)) goto redo; return phys_get_byte(mmu_get_real_address(addr, cl)); } uae_u16 REGPARAM2 mmu_get_word_slow(uaecptr addr, bool super, bool data, int size, struct mmu_atc_line *cl) { uae_u32 tag = ATC_TAG(addr); if (USETAG && cl->tag == (uae_u16)~tag) { redo: if (cl->hw) return HWget_w(cl->phys + addr); mmu_bus_error(addr, mmu_get_fc(super, data), 0, size); return 0; } if (!mmu_fill_atc_l1(addr, super, data, 0, cl)) goto redo; return phys_get_word(mmu_get_real_address(addr, cl)); } uae_u32 REGPARAM2 mmu_get_long_slow(uaecptr addr, bool super, bool data, int size, struct mmu_atc_line *cl) { uae_u32 tag = ATC_TAG(addr); if (USETAG && cl->tag == (uae_u16)~tag) { redo: if (cl->hw) return HWget_l(cl->phys + addr); mmu_bus_error(addr, mmu_get_fc(super, data), 0, size); return 0; } if (!mmu_fill_atc_l1(addr, super, data, 0, cl)) goto redo; return phys_get_long(mmu_get_real_address(addr, cl)); } void REGPARAM2 mmu_put_long_unaligned(uaecptr addr, uae_u32 val, bool data) { SAVE_EXCEPTION; TRY(prb) { if (likely(!(addr & 1))) { mmu_put_word(addr, val >> 16, data, sz_long); mmu_put_word(addr + 2, val, data, sz_long); } else { mmu_put_byte(addr, val >> 24, data, sz_long); mmu_put_byte(addr + 1, val >> 16, data, sz_long); mmu_put_byte(addr + 2, val >> 8, data, sz_long); mmu_put_byte(addr + 3, val, data, sz_long); } RESTORE_EXCEPTION; } CATCH(prb) { RESTORE_EXCEPTION; regs.wb3_data = val; if (regs.mmu_fault_addr != addr) { regs.mmu_fault_addr = addr; regs.mmu_ssw |= MMU_SSW_MA; } THROW_AGAIN(prb); } } void REGPARAM2 mmu_put_word_unaligned(uaecptr addr, uae_u16 val, bool data) { SAVE_EXCEPTION; TRY(prb) { mmu_put_byte(addr, val >> 8, data, sz_word); mmu_put_byte(addr + 1, val, data, sz_word); RESTORE_EXCEPTION; } CATCH(prb) { RESTORE_EXCEPTION; regs.wb3_data = val; if (regs.mmu_fault_addr != addr) { regs.mmu_fault_addr = addr; regs.mmu_ssw |= MMU_SSW_MA; } THROW_AGAIN(prb); } } void REGPARAM2 mmu_put_byte_slow(uaecptr addr, uae_u8 val, bool super, bool data, int size, struct mmu_atc_line *cl) { uae_u32 tag = ATC_TAG(addr); if (USETAG && cl->tag == (uae_u16)~tag) { redo: if (cl->hw) { HWput_b(cl->phys + addr, val); return; } regs.wb3_data = val; mmu_bus_error(addr, mmu_get_fc(super, data), 1, size); return; } if (!mmu_fill_atc_l1(addr, super, data, 1, cl)) goto redo; phys_put_byte(mmu_get_real_address(addr, cl), val); } void REGPARAM2 mmu_put_word_slow(uaecptr addr, uae_u16 val, bool super, bool data, int size, struct mmu_atc_line *cl) { uae_u32 tag = ATC_TAG(addr); if (USETAG && cl->tag == (uae_u16)~tag) { redo: if (cl->hw) { HWput_w(cl->phys + addr, val); return; } regs.wb3_data = val; mmu_bus_error(addr, mmu_get_fc(super, data), 1, size); return; } if (!mmu_fill_atc_l1(addr, super, data, 1, cl)) goto redo; phys_put_word(mmu_get_real_address(addr, cl), val); } void REGPARAM2 mmu_put_long_slow(uaecptr addr, uae_u32 val, bool super, bool data, int size, struct mmu_atc_line *cl) { uae_u32 tag = ATC_TAG(addr); if (USETAG && cl->tag == (uae_u16)~tag) { redo: if (cl->hw) { HWput_l(cl->phys + addr, val); return; } regs.wb3_data = val; mmu_bus_error(addr, mmu_get_fc(super, data), 1, size); return; } if (!mmu_fill_atc_l1(addr, super, data, 1, cl)) goto redo; phys_put_long(mmu_get_real_address(addr, cl), val); } uae_u32 REGPARAM2 sfc_get_long(uaecptr addr) { bool super = (regs.sfc & 4) != 0; bool data = (regs.sfc & 3) != 2; uae_u32 res; if (likely(!is_unaligned(addr, 4))) return mmu_get_user_long(addr, super, data, sz_long); if (likely(!(addr & 1))) { res = (uae_u32)mmu_get_user_word(addr, super, data, sz_long) << 16; SAVE_EXCEPTION; TRY(prb) { res |= mmu_get_user_word(addr + 2, super, data, sz_long); RESTORE_EXCEPTION; } CATCH(prb) { RESTORE_EXCEPTION; regs.mmu_fault_addr = addr; regs.mmu_ssw |= MMU_SSW_MA; THROW_AGAIN(prb); } } else { res = (uae_u32)mmu_get_user_byte(addr, super, data, sz_long) << 8; SAVE_EXCEPTION; TRY(prb) { res = (res | mmu_get_user_byte(addr + 1, super, data, sz_long)) << 8; res = (res | mmu_get_user_byte(addr + 2, super, data, sz_long)) << 8; res |= mmu_get_user_byte(addr + 3, super, data, sz_long); RESTORE_EXCEPTION; } CATCH(prb) { RESTORE_EXCEPTION; regs.mmu_fault_addr = addr; regs.mmu_ssw |= MMU_SSW_MA; THROW_AGAIN(prb); } } return res; } uae_u16 REGPARAM2 sfc_get_word(uaecptr addr) { bool super = (regs.sfc & 4) != 0; bool data = (regs.sfc & 3) != 2; uae_u16 res; if (likely(!is_unaligned(addr, 2))) return mmu_get_user_word(addr, super, data, sz_word); res = (uae_u16)mmu_get_user_byte(addr, super, data, sz_word) << 8; SAVE_EXCEPTION; TRY(prb) { res |= mmu_get_user_byte(addr + 1, super, data, sz_word); RESTORE_EXCEPTION; } CATCH(prb) { RESTORE_EXCEPTION; regs.mmu_fault_addr = addr; regs.mmu_ssw |= MMU_SSW_MA; THROW_AGAIN(prb); } return res; } uae_u8 REGPARAM2 sfc_get_byte(uaecptr addr) { bool super = (regs.sfc & 4) != 0; bool data = (regs.sfc & 3) != 2; return mmu_get_user_byte(addr, super, data, sz_byte); } void REGPARAM2 dfc_put_long(uaecptr addr, uae_u32 val) { bool super = (regs.dfc & 4) != 0; bool data = (regs.dfc & 3) != 2; SAVE_EXCEPTION; TRY(prb) { if (likely(!is_unaligned(addr, 4))) mmu_put_user_long(addr, val, super, data, sz_long); else if (likely(!(addr & 1))) { mmu_put_user_word(addr, val >> 16, super, data, sz_long); mmu_put_user_word(addr + 2, val, super, data, sz_long); } else { mmu_put_user_byte(addr, val >> 24, super, data, sz_long); mmu_put_user_byte(addr + 1, val >> 16, super, data, sz_long); mmu_put_user_byte(addr + 2, val >> 8, super, data, sz_long); mmu_put_user_byte(addr + 3, val, super, data, sz_long); } RESTORE_EXCEPTION; } CATCH(prb) { RESTORE_EXCEPTION; regs.wb3_data = val; if (regs.mmu_fault_addr != addr) { regs.mmu_fault_addr = addr; regs.mmu_ssw |= MMU_SSW_MA; } THROW_AGAIN(prb); } } void REGPARAM2 dfc_put_word(uaecptr addr, uae_u16 val) { bool super = (regs.dfc & 4) != 0; bool data = (regs.dfc & 3) != 2; SAVE_EXCEPTION; TRY(prb) { if (likely(!is_unaligned(addr, 2))) mmu_put_user_word(addr, val, super, data, sz_word); else { mmu_put_user_byte(addr, val >> 8, super, data, sz_word); mmu_put_user_byte(addr + 1, val, super, data, sz_word); } RESTORE_EXCEPTION; } CATCH(prb) { RESTORE_EXCEPTION; regs.wb3_data = val; if (regs.mmu_fault_addr != addr) { regs.mmu_fault_addr = addr; regs.mmu_ssw |= MMU_SSW_MA; } THROW_AGAIN(prb); } } void REGPARAM2 dfc_put_byte(uaecptr addr, uae_u8 val) { bool super = (regs.dfc & 4) != 0; bool data = (regs.dfc & 3) != 2; SAVE_EXCEPTION; TRY(prb) { mmu_put_user_byte(addr, val, super, data, sz_byte); RESTORE_EXCEPTION; } CATCH(prb) { RESTORE_EXCEPTION; regs.wb3_data = val; THROW_AGAIN(prb); } } void REGPARAM2 mmu_op_real(uae_u32 opcode, uae_u16 extra) { bool super = (regs.dfc & 4) != 0; DUNUSED(extra); if ((opcode & 0xFE0) == 0x0500) { bool glob; int regno; //D(didflush = 0); uae_u32 addr; /* PFLUSH */ regno = opcode & 7; glob = (opcode & 8) != 0; if (opcode & 16) { D(bug(_T("pflusha(%u,%u)\n"), glob, regs.dfc)); mmu_flush_atc_all(glob); } else { addr = m68k_areg(regs, regno); D(bug(_T("pflush(%u,%u,%x)\n"), glob, regs.dfc, addr)); mmu_flush_atc(addr, super, glob); } flush_internals(); #ifdef USE_JIT flush_icache(0); #endif } else if ((opcode & 0x0FD8) == 0x548) { bool write; int regno; uae_u32 addr; regno = opcode & 7; write = (opcode & 32) == 0; addr = m68k_areg(regs, regno); D(bug(_T("PTEST%c (A%d) %08x DFC=%d\n"), write ? 'W' : 'R', regno, addr, regs.dfc)); mmu_flush_atc(addr, super, true); SAVE_EXCEPTION; TRY(prb) { struct mmu_atc_line *l; uae_u32 desc; bool data = (regs.dfc & 3) != 2; l = &atc_l2[super ? 1 : 0][ATC_L2_INDEX(addr)]; desc = mmu_fill_atc_l2(addr, super, data, write, l); if (!(data ? l->valid_data : l->valid_inst)) regs.mmusr = MMU_MMUSR_B; else if (l->tt) regs.mmusr = MMU_MMUSR_T | MMU_MMUSR_R; else { regs.mmusr = desc & (~0xfff|MMU_MMUSR_G|MMU_MMUSR_Ux|MMU_MMUSR_S| MMU_MMUSR_CM|MMU_MMUSR_M|MMU_MMUSR_W); regs.mmusr |= MMU_MMUSR_R; } } CATCH(prb) { regs.mmusr = MMU_MMUSR_B; } RESTORE_EXCEPTION; D(bug(_T("PTEST result: mmusr %08x\n"), regs.mmusr)); } else op_illg (opcode); } static void REGPARAM2 mmu_flush_atc(uaecptr addr, bool super, bool global) { struct mmu_atc_line *l; int i, j; l = atc_l1[super ? 1 : 0][0][0]; i = ATC_L1_INDEX(addr); for (j = 0; j < 4; j++) { if (global || !l[i].global) l[i].tag = 0x8000; l += ATC_L1_SIZE; } if (regs.mmu_pagesize_8k) { i = ATC_L1_INDEX(addr) ^ 1; for (j = 0; j < 4; j++) { if (global || !l[i].global) l[i].tag = 0x8000; l += ATC_L1_SIZE; } } l = atc_l2[super ? 1 : 0]; i = ATC_L2_INDEX(addr); if (global || !l[i].global) l[i].tag = 0x8000; if (regs.mmu_pagesize_8k) { i ^= 1; if (global || !l[i].global) l[i].tag = 0x8000; } } static void REGPARAM2 mmu_flush_atc_all(bool global) { struct mmu_atc_line *l; unsigned int i; l = atc_l1[0][0][0]; for (i = 0; i < sizeof(atc_l1) / sizeof(*l); l++, i++) { if (global || !l->global) l->tag = 0x8000; } l = atc_l2[0]; for (i = 0; i < sizeof(atc_l2) / sizeof(*l); l++, i++) { if (global || !l->global) l->tag = 0x8000; } } void REGPARAM2 mmu_reset(void) { mmu_flush_atc_all(true); #if 0 regs.urp = regs.srp = 0; regs.itt0 = regs.itt1 = 0; regs.dtt0 = regs.dtt1 = 0; regs.mmusr = 0; #endif } void REGPARAM2 mmu_set_tc(uae_u16 tc) { #if 0 if (regs.tcr == tc) return; regs.tcr = tc; #endif regs.mmu_enabled = tc & 0x8000 ? 1 : 0; regs.mmu_pagesize_8k = tc & 0x4000 ? 1 : 0; mmu_flush_atc_all(true); write_log(_T("MMU: enabled=%d page8k=%d\n"), regs.mmu_enabled, regs.mmu_pagesize_8k); } void REGPARAM2 mmu_set_super(bool super) { current_atc = &atc_l1[super ? 1 : 0]; } #else void mmu_op(uae_u32 opcode, uae_u16 /*extra*/) { if ((opcode & 0xFE0) == 0x0500) { /* PFLUSH instruction */ flush_internals(); } else if ((opcode & 0x0FD8) == 0x548) { /* PTEST instruction */ } else op_illg(opcode); } #endif /* vim:ts=4:sw=4: */ fs-uae-2.2.3+dfsg/src/zfile_archive.cpp0000644000175000017500000014637212162366655020177 0ustar glaubitzglaubitz/* * UAE - The Un*x Amiga Emulator * * transparent archive handling * * 2007 Toni Wilen */ #include "sysconfig.h" #include "sysdeps.h" #ifdef _WIN32 #include #include "win32.h" #endif #include "options.h" #include "zfile.h" #include "archivers/zip/unzip.h" #include "archivers/dms/pfile.h" #include "crc32.h" #include "zarchive.h" #include "disk.h" #include #define unpack_log write_log #undef unpack_log #define unpack_log static time_t fromdostime (uae_u32 dd) { struct tm tm; time_t t; memset (&tm, 0, sizeof tm); tm.tm_hour = (dd >> 11) & 0x1f; tm.tm_min = (dd >> 5) & 0x3f; tm.tm_sec = ((dd >> 0) & 0x1f) * 2; tm.tm_year = ((dd >> 25) & 0x7f) + 80; tm.tm_mon = ((dd >> 21) & 0x0f) - 1; tm.tm_mday = (dd >> 16) & 0x1f; t = mktime (&tm); _tzset (); t -= _timezone; return t; } static struct zvolume *getzvolume (struct znode *parent, struct zfile *zf, unsigned int id) { struct zvolume *zv = NULL; switch (id) { #ifdef A_ZIP case ArchiveFormatZIP: zv = archive_directory_zip (zf); break; #endif #ifdef A_7Z case ArchiveFormat7Zip: zv = archive_directory_7z (zf); break; #endif #ifdef A_RAR case ArchiveFormatRAR: zv = archive_directory_rar (zf); break; #endif #ifdef A_LHA case ArchiveFormatLHA: zv = archive_directory_lha (zf); break; #endif #ifdef A_LZX case ArchiveFormatLZX: zv = archive_directory_lzx (zf); break; #endif case ArchiveFormatPLAIN: zv = archive_directory_plain (zf); break; case ArchiveFormatADF: zv = archive_directory_adf (parent, zf); break; case ArchiveFormatRDB: zv = archive_directory_rdb (zf); break; case ArchiveFormatTAR: zv = archive_directory_tar (zf); break; case ArchiveFormatFAT: zv = archive_directory_fat (zf); break; } #ifdef ARCHIVEACCESS if (!zv) zv = archive_directory_arcacc (zf, id); #endif return zv; } struct zfile *archive_access_select (struct znode *parent, struct zfile *zf, unsigned int id, int dodefault, int *retcode, int index) { struct zvolume *zv; struct znode *zn; int zipcnt, first, select; TCHAR tmphist[MAX_DPATH]; struct zfile *z = NULL; int we_have_file; int diskimg; int mask = zf->zfdmask; int canhistory = (mask & ZFD_DISKHISTORY) && !(mask & ZFD_CHECKONLY); int getflag = (mask & ZFD_DELAYEDOPEN) ? FILE_DELAYEDOPEN : 0; if (retcode) *retcode = 0; if (index > 0) return NULL; if (zfile_needwrite (zf)) { if (retcode) *retcode = -1; return NULL; } zv = getzvolume (parent, zf, id); if (!zv) return NULL; we_have_file = 0; tmphist[0] = 0; zipcnt = 1; first = 1; zn = &zv->root; while (zn) { int isok = 1; diskimg = -1; if (zn->type != ZNODE_FILE) isok = 0; if (zfile_is_ignore_ext (zn->fullname)) isok = 0; diskimg = zfile_is_diskimage (zn->fullname); if (isok) { if (tmphist[0]) { #ifndef _CONSOLE if (diskimg >= 0 && canhistory) DISK_history_add (tmphist, -1, diskimg, 1); #endif tmphist[0] = 0; first = 0; } if (first) { if (diskimg >= 0) _tcscpy (tmphist, zn->fullname); } else { _tcscpy (tmphist, zn->fullname); #ifndef _CONSOLE if (diskimg >= 0 && canhistory) DISK_history_add (tmphist, -1, diskimg, 1); #endif tmphist[0] = 0; } select = 0; if (!zf->zipname) select = 1; if (zf->zipname && _tcslen (zn->fullname) >= _tcslen (zf->zipname) && !strcasecmp (zf->zipname, zn->fullname + _tcslen (zn->fullname) - _tcslen (zf->zipname))) select = -1; if (zf->zipname && zf->zipname[0] == '#' && _tstol (zf->zipname + 1) == zipcnt) select = -1; if (select && we_have_file < 10) { struct zfile *zt = NULL; TCHAR *ext = _tcsrchr (zn->fullname, '.'); int whf = 1; int ft = 0; if (mask & ZFD_CD) { if (ext && !_tcsicmp (ext, _T(".iso"))) { whf = 2; ft = ZFILE_CDIMAGE; } if (ext && !_tcsicmp (ext, _T(".ccd"))) { whf = 9; ft = ZFILE_CDIMAGE; } if (ext && !_tcsicmp (ext, _T(".cue"))) { whf = 10; ft = ZFILE_CDIMAGE; } } else { zt = archive_getzfile (zn, id, getflag); ft = zfile_gettype (zt); } if ((select < 0 || ft) && whf > we_have_file) { if (!zt) zt = archive_getzfile (zn, id, getflag); we_have_file = whf; if (z) zfile_fclose (z); z = zt; zt = NULL; } zfile_fclose (zt); } } zipcnt++; zn = zn->next; } #ifndef _CONSOLE diskimg = zfile_is_diskimage (zfile_getname (zf)); if (diskimg >= 0 && first && tmphist[0] && canhistory) DISK_history_add (zfile_getname (zf), -1, diskimg, 1); #endif zfile_fclose_archive (zv); if (z) { zfile_fclose (zf); zf = z; } else if (!dodefault && zf->zipname && zf->zipname[0]) { if (retcode) *retcode = -1; zf = NULL; } else { zf = NULL; } return zf; } struct zfile *archive_access_arcacc_select (struct zfile *zf, unsigned int id, int *retcode) { if (zfile_needwrite (zf)) { if (retcode) *retcode = -1; return NULL; } return zf; } void archive_access_scan (struct zfile *zf, zfile_callback zc, void *user, unsigned int id) { struct zvolume *zv; struct znode *zn; zv = getzvolume (NULL, zf, id); if (!zv) return; zn = &zv->root; while (zn) { if (zn->type == ZNODE_FILE) { struct zfile *zf2 = archive_getzfile (zn, id, 0); if (zf2) { int ztype = iszip (zf2); if (ztype) { zfile_fclose (zf2); } else { int ret = zc (zf2, user); zfile_fclose (zf2); if (ret) break; } } } zn = zn->next; } zfile_fclose_archive (zv); } /* TAR */ static void archive_close_tar (void *handle) { } struct zvolume *archive_directory_tar (struct zfile *z) { struct zvolume *zv; struct znode *zn; _tzset (); zv = zvolume_alloc (z, ArchiveFormatTAR, NULL, NULL); for (;;) { uae_u8 block[512]; char name[MAX_DPATH]; int ustar = 0; struct zarchive_info zai; int valid = 1; uae_u64 size; if (zfile_fread (block, 512, 1, z) != 1) break; if (block[0] == 0) break; if (!memcmp (block + 257, "ustar ", 8)) ustar = 1; name[0] = 0; if (ustar) strcpy (name, (char*)block + 345); strcat (name, (char*)block); if (name[0] == 0) valid = 0; if (block[156] != '0') valid = 0; if (ustar && (block[256] != 0 && block[256] != '0')) valid = 0; size = _strtoui64 ((char*)block + 124, NULL, 8); if (valid) { memset (&zai, 0, sizeof zai); zai.name = au (name); zai.size = size; zai.tv.tv_sec = _strtoui64 ((char*)block + 136, NULL, 8); zai.tv.tv_sec += _timezone; if (_daylight) zai.tv.tv_sec -= 1 * 60 * 60; if (zai.name[_tcslen (zai.name) - 1] == '/') { zn = zvolume_adddir_abs (zv, &zai); } else { zn = zvolume_addfile_abs (zv, &zai); if (zn) zn->offset = zfile_ftell (z); } xfree (zai.name); } zfile_fseek (z, (size + 511) & ~511, SEEK_CUR); } zv->method = ArchiveFormatTAR; return zv; } struct zfile *archive_access_tar (struct znode *zn) { #if 0 struct zfile *zf = zfile_fopen_empty (zn->volume->archive, zn->fullname, zn->size); zfile_fseek (zn->volume->archive, zn->offset, SEEK_SET); zfile_fwrite (zf->data, zn->size, 1, zn->volume->archive); return zf; #else return zfile_fopen_parent (zn->volume->archive, zn->fullname, zn->offset, zn->size); #endif } /* ZIP */ #ifdef A_ZIP static void archive_close_zip (void *handle) { } struct zvolume *archive_directory_zip (struct zfile *z) { unzFile uz; unz_file_info file_info; struct zvolume *zv; int err; uz = unzOpen (z); if (!uz) return 0; if (unzGoToFirstFile (uz) != UNZ_OK) return 0; zv = zvolume_alloc (z, ArchiveFormatZIP, NULL, NULL); for (;;) { char filename_inzip2[MAX_DPATH]; TCHAR c; struct zarchive_info zai; time_t t; unsigned int dd; TCHAR *filename_inzip; err = unzGetCurrentFileInfo (uz, &file_info, filename_inzip2, sizeof (filename_inzip2), NULL, 0, NULL, 0); if (err != UNZ_OK) return 0; if (file_info.flag & (1 << 11)) { // UTF-8 encoded filename_inzip = utf8u (filename_inzip2); } else { filename_inzip = au (filename_inzip2); } dd = file_info.dosDate; t = fromdostime (dd); memset (&zai, 0, sizeof zai); zai.name = filename_inzip; zai.tv.tv_sec = t; zai.flags = -1; c = filename_inzip[_tcslen (filename_inzip) - 1]; if (c != '/' && c != '\\') { int err = unzOpenCurrentFile (uz); if (err == UNZ_OK) { struct znode *zn; zai.size = file_info.uncompressed_size; zn = zvolume_addfile_abs (zv, &zai); } } else { filename_inzip[_tcslen (filename_inzip) - 1] = 0; zvolume_adddir_abs (zv, &zai); } xfree (filename_inzip); err = unzGoToNextFile (uz); if (err != UNZ_OK) break; } unzClose (uz); zv->method = ArchiveFormatZIP; return zv; } static struct zfile *archive_do_zip (struct znode *zn, struct zfile *z, int flags) { unzFile uz; int i; TCHAR tmp[MAX_DPATH]; TCHAR *name = z ? z->archiveparent->name : zn->volume->root.fullname; char *s; uz = unzOpen (z ? z->archiveparent : zn->volume->archive); if (!uz) return 0; if (z) _tcscpy (tmp, z->archiveparent->name); else _tcscpy (tmp, zn->fullname + _tcslen (zn->volume->root.fullname) + 1); if (unzGoToFirstFile (uz) != UNZ_OK) goto error; for (i = 0; tmp[i]; i++) { if (tmp[i] == '\\') tmp[i] = '/'; } s = ua (tmp); if (unzLocateFile (uz, s, 1) != UNZ_OK) { xfree (s); for (i = 0; tmp[i]; i++) { #ifdef FSUAE #else if (tmp[i] == '/') tmp[i] = '\\'; #endif } s = ua (tmp); if (unzLocateFile (uz, s, 1) != UNZ_OK) { xfree (s); goto error; } } xfree (s); s = NULL; if (unzOpenCurrentFile (uz) != UNZ_OK) goto error; if (!z) z = zfile_fopen_empty (NULL, zn->fullname, zn->size); if (z) { int err = -1; if (!(flags & FILE_DELAYEDOPEN) || z->size <= PEEK_BYTES) { unpack_log (_T("ZIP: unpacking %s, flags=%d\n"), name, flags); err = unzReadCurrentFile (uz, z->data, z->datasize); unpack_log (_T("ZIP: unpacked, code=%d\n"), err); } else { z->archiveparent = zfile_dup (zn->volume->archive); if (z->archiveparent) { unpack_log (_T("ZIP: delayed open '%s'\n"), name); xfree (z->archiveparent->name); z->archiveparent->name = my_strdup (tmp); z->datasize = PEEK_BYTES; err = unzReadCurrentFile (uz, z->data, z->datasize); unpack_log (_T("ZIP: unpacked, code=%d\n"), err); } else { unpack_log (_T("ZIP: unpacking %s (failed DELAYEDOPEN)\n"), name); err = unzReadCurrentFile (uz, z->data, z->datasize); unpack_log (_T("ZIP: unpacked, code=%d\n"), err); } } } unzCloseCurrentFile (uz); unzClose (uz); return z; error: unzClose (uz); return NULL; } static struct zfile *archive_access_zip (struct znode *zn, int flags) { return archive_do_zip (zn, NULL, flags); } static struct zfile *archive_unpack_zip (struct zfile *zf) { return archive_do_zip (NULL, zf, 0); } #endif #ifdef A_7Z /* 7Z */ #include "7z/7z.h" #include "7z/Alloc.h" #include "7z/7zFile.h" #include "7z/7zVersion.h" #include "7z/7zCrc.h" static void *SzAlloc (void *p, size_t size) { return xmalloc (uae_u8, size); } static void SzFree(void *p, void *address) { xfree (address); } static ISzAlloc allocImp; static ISzAlloc allocTempImp; static SRes SzFileReadImp (void *object, void *buffer, size_t *size) { CFileInStream *s = (CFileInStream *)object; struct zfile *zf = (struct zfile*)s->file.myhandle; *size = zfile_fread (buffer, 1, *size, zf); return SZ_OK; } static SRes SzFileSeekImp(void *object, Int64 *pos, ESzSeek origin) { CFileInStream *s = (CFileInStream *)object; struct zfile *zf = (struct zfile*)s->file.myhandle; int org = 0; switch (origin) { case SZ_SEEK_SET: org = SEEK_SET; break; case SZ_SEEK_CUR: org = SEEK_CUR; break; case SZ_SEEK_END: org = SEEK_END; break; } zfile_fseek (zf, *pos, org); *pos = zfile_ftell (zf); return SZ_OK; } static void init_7z (void) { static int initialized; if (initialized) return; initialized = 1; allocImp.Alloc = SzAlloc; allocImp.Free = SzFree; allocTempImp.Alloc = SzAlloc; allocTempImp.Free = SzFree; CrcGenerateTable (); _tzset (); } struct SevenZContext { CSzArEx db; CFileInStream archiveStream; CLookToRead lookStream; Byte *outBuffer; size_t outBufferSize; UInt32 blockIndex; }; static void archive_close_7z (void *ctx) { struct SevenZContext *ctx7 = (struct SevenZContext*)ctx; SzArEx_Free (&ctx7->db, &allocImp); allocImp.Free (&allocImp, ctx7->outBuffer); xfree (ctx); } #define EPOCH_DIFF 0x019DB1DED53E8000LL /* 116444736000000000 nsecs */ #define RATE_DIFF 10000000 /* 100 nsecs */ struct zvolume *archive_directory_7z (struct zfile *z) { SRes res; struct zvolume *zv; int i; struct SevenZContext *ctx; init_7z (); ctx = xcalloc (struct SevenZContext, 1); ctx->blockIndex = 0xffffffff; ctx->archiveStream.s.Read = SzFileReadImp; ctx->archiveStream.s.Seek = SzFileSeekImp; ctx->archiveStream.file.myhandle = (void*)z; LookToRead_CreateVTable (&ctx->lookStream, False); ctx->lookStream.realStream = &ctx->archiveStream.s; LookToRead_Init (&ctx->lookStream); SzArEx_Init (&ctx->db); res = SzArEx_Open (&ctx->db, &ctx->lookStream.s, &allocImp, &allocTempImp); if (res != SZ_OK) { write_log (_T("7Z: SzArchiveOpen %s returned %d\n"), zfile_getname (z), res); xfree (ctx); return NULL; } zv = zvolume_alloc (z, ArchiveFormat7Zip, ctx, NULL); for (i = 0; i < ctx->db.db.NumFiles; i++) { CSzFileItem *f = ctx->db.db.Files + i; TCHAR *name = (TCHAR*)(ctx->db.FileNames.data + ctx->db.FileNameOffsets[i] * 2); struct zarchive_info zai; memset(&zai, 0, sizeof zai); zai.name = name; zai.flags = f->AttribDefined ? f->Attrib : -1; zai.size = f->Size; if (f->MTimeDefined) { uae_u64 t = (((uae_u64)f->MTime.High) << 32) | f->MTime.Low; if (t >= EPOCH_DIFF) { zai.tv.tv_sec = (t - EPOCH_DIFF) / RATE_DIFF; zai.tv.tv_sec -= _timezone; if (_daylight) zai.tv.tv_sec += 1 * 60 * 60; } } if (!f->IsDir) { struct znode *zn = zvolume_addfile_abs (zv, &zai); zn->offset = i; } } zv->method = ArchiveFormat7Zip; return zv; } static struct zfile *archive_access_7z (struct znode *zn) { SRes res; struct zvolume *zv = zn->volume; struct zfile *z = NULL; size_t offset; size_t outSizeProcessed; struct SevenZContext *ctx; z = zfile_fopen_empty (NULL, zn->fullname, zn->size); if (!z) return NULL; ctx = (struct SevenZContext*)zv->handle; res = SzArEx_Extract (&ctx->db, &ctx->lookStream.s, zn->offset, &ctx->blockIndex, &ctx->outBuffer, &ctx->outBufferSize, &offset, &outSizeProcessed, &allocImp, &allocTempImp); if (res == SZ_OK) { zfile_fwrite (ctx->outBuffer + offset, zn->size, 1, z); } else { write_log (_T("7Z: SzExtract %s returned %d\n"), zn->fullname, res); zfile_fclose (z); z = NULL; } return z; } #endif /* RAR */ #ifdef A_RAR /* copy and paste job? you are only imagining it! */ static struct zfile *rarunpackzf; /* stupid unrar.dll */ #include typedef HANDLE (_stdcall* RAROPENARCHIVEEX)(struct RAROpenArchiveDataEx*); static RAROPENARCHIVEEX pRAROpenArchiveEx; typedef int (_stdcall* RARREADHEADEREX)(HANDLE,struct RARHeaderDataEx*); static RARREADHEADEREX pRARReadHeaderEx; typedef int (_stdcall* RARPROCESSFILE)(HANDLE,int,char*,char*); static RARPROCESSFILE pRARProcessFile; typedef int (_stdcall* RARCLOSEARCHIVE)(HANDLE); static RARCLOSEARCHIVE pRARCloseArchive; typedef void (_stdcall* RARSETCALLBACK)(HANDLE,UNRARCALLBACK,LONG); static RARSETCALLBACK pRARSetCallback; typedef int (_stdcall* RARGETDLLVERSION)(void); static RARGETDLLVERSION pRARGetDllVersion; static int canrar (void) { static int israr; if (israr == 0) { israr = -1; #ifdef _WIN32 { HMODULE rarlib; rarlib = WIN32_LoadLibrary (_T("unrar.dll")); if (rarlib) { TCHAR tmp[MAX_DPATH]; tmp[0] = 0; GetModuleFileName (rarlib, tmp, sizeof tmp / sizeof (TCHAR)); pRAROpenArchiveEx = (RAROPENARCHIVEEX)GetProcAddress (rarlib, "RAROpenArchiveEx"); pRARReadHeaderEx = (RARREADHEADEREX)GetProcAddress (rarlib, "RARReadHeaderEx"); pRARProcessFile = (RARPROCESSFILE)GetProcAddress (rarlib, "RARProcessFile"); pRARCloseArchive = (RARCLOSEARCHIVE)GetProcAddress (rarlib, "RARCloseArchive"); pRARSetCallback = (RARSETCALLBACK)GetProcAddress (rarlib, "RARSetCallback"); pRARGetDllVersion = (RARGETDLLVERSION)GetProcAddress (rarlib, "RARGetDllVersion"); if (pRAROpenArchiveEx && pRARReadHeaderEx && pRARProcessFile && pRARCloseArchive && pRARSetCallback) { int version = -1; israr = 1; if (pRARGetDllVersion) version = pRARGetDllVersion (); write_log (_T("%s version %08X detected\n"), tmp, version); if (version < 4) { write_log (_T("Too old unrar.dll, must be at least version 4\n")); israr = -1; } } } } #endif } return israr < 0 ? 0 : 1; } static int CALLBACK RARCallbackProc (UINT msg,LONG UserData,LONG P1,LONG P2) { if (msg == UCM_PROCESSDATA) { zfile_fwrite ((uae_u8*)P1, 1, P2, rarunpackzf); return 0; } return -1; } struct RARContext { struct RAROpenArchiveDataEx OpenArchiveData; struct RARHeaderDataEx HeaderData; HANDLE hArcData; }; static void archive_close_rar (void *ctx) { struct RARContext* rc = (struct RARContext*)ctx; xfree (rc); } struct zvolume *archive_directory_rar (struct zfile *z) { struct zvolume *zv; struct RARContext *rc; struct zfile *zftmp; int cnt; if (!canrar ()) return archive_directory_arcacc (z, ArchiveFormatRAR); if (z->data) /* wtf? stupid unrar.dll only accept filename as an input.. */ return archive_directory_arcacc (z, ArchiveFormatRAR); rc = xcalloc (struct RARContext, 1); zv = zvolume_alloc (z, ArchiveFormatRAR, rc, NULL); rc->OpenArchiveData.ArcNameW = z->name; rc->OpenArchiveData.OpenMode = RAR_OM_LIST; rc->hArcData = pRAROpenArchiveEx (&rc->OpenArchiveData); if (rc->OpenArchiveData.OpenResult != 0) { zfile_fclose_archive (zv); return archive_directory_arcacc (z, ArchiveFormatRAR); } pRARSetCallback (rc->hArcData, RARCallbackProc, 0); cnt = 0; while (pRARReadHeaderEx (rc->hArcData, &rc->HeaderData) == 0) { struct zarchive_info zai; struct znode *zn; memset (&zai, 0, sizeof zai); zai.name = rc->HeaderData.FileNameW; zai.size = rc->HeaderData.UnpSize; zai.flags = -1; zai.tv.tv_sec = fromdostime (rc->HeaderData.FileTime); zn = zvolume_addfile_abs (zv, &zai); zn->offset = cnt++; pRARProcessFile (rc->hArcData, RAR_SKIP, NULL, NULL); } pRARCloseArchive (rc->hArcData); zftmp = zfile_fopen_empty (z, z->name, 0); zv->archive = zftmp; zv->method = ArchiveFormatRAR; return zv; } static struct zfile *archive_access_rar (struct znode *zn) { struct RARContext *rc = (struct RARContext*)zn->volume->handle; int i; struct zfile *zf = NULL; if (zn->volume->method != ArchiveFormatRAR) return archive_access_arcacc (zn); rc->OpenArchiveData.OpenMode = RAR_OM_EXTRACT; rc->hArcData = pRAROpenArchiveEx (&rc->OpenArchiveData); if (rc->OpenArchiveData.OpenResult != 0) return NULL; pRARSetCallback (rc->hArcData, RARCallbackProc, 0); for (i = 0; i <= zn->offset; i++) { if (pRARReadHeaderEx (rc->hArcData, &rc->HeaderData)) return NULL; if (i < zn->offset) { if (pRARProcessFile (rc->hArcData, RAR_SKIP, NULL, NULL)) goto end; } } zf = zfile_fopen_empty (zn->volume->archive, zn->fullname, zn->size); if (zf) { rarunpackzf = zf; if (pRARProcessFile (rc->hArcData, RAR_TEST, NULL, NULL)) { zfile_fclose (zf); zf = NULL; } } end: pRARCloseArchive(rc->hArcData); return zf; } #endif /* ArchiveAccess */ #if defined(ARCHIVEACCESS) struct aaFILETIME { uae_u32 dwLowDateTime; uae_u32 dwHighDateTime; }; typedef void* aaHandle; // This struct contains file information from an archive. The caller may store // this information for accessing this file after calls to findFirst, findNext #define FileInArchiveInfoStringSize 1024 struct aaFileInArchiveInfo { int ArchiveHandle; // handle for Archive/class pointer uae_u64 CompressedFileSize; uae_u64 UncompressedFileSize; uae_u32 attributes; int IsDir; struct aaFILETIME LastWriteTime; char path[FileInArchiveInfoStringSize]; }; typedef HRESULT (__stdcall *aaReadCallback)(int StreamID, uae_u64 offset, uae_u32 count, void* buf, uae_u32 *processedSize); typedef HRESULT (__stdcall *aaWriteCallback)(int StreamID, uae_u64 offset, uae_u32 count, const void *buf, uae_u32 *processedSize); typedef aaHandle (__stdcall *aapOpenArchive)(aaReadCallback function, int StreamID, uae_u64 FileSize, int ArchiveType, int *result, TCHAR *password); typedef int (__stdcall *aapGetFileCount)(aaHandle ArchiveHandle); typedef int (__stdcall *aapGetFileInfo)(aaHandle ArchiveHandle, int FileNum, struct aaFileInArchiveInfo *FileInfo); typedef int (__stdcall *aapExtract)(aaHandle ArchiveHandle, int FileNum, int StreamID, aaWriteCallback WriteFunc, uae_u64 *written); typedef int (__stdcall *aapCloseArchive)(aaHandle ArchiveHandle); static aapOpenArchive aaOpenArchive; static aapGetFileCount aaGetFileCount; static aapGetFileInfo aaGetFileInfo; static aapExtract aaExtract; static aapCloseArchive aaCloseArchive; #ifdef _WIN32 static HMODULE arcacc_mod; static void arcacc_free (void) { if (arcacc_mod) FreeLibrary (arcacc_mod); arcacc_mod = NULL; } static int arcacc_init (struct zfile *zf) { if (arcacc_mod) return 1; arcacc_mod = WIN32_LoadLibrary (_T("archiveaccess.dll")); if (!arcacc_mod) { write_log (_T("failed to open archiveaccess.dll ('%s')\n"), zfile_getname (zf)); return 0; } aaOpenArchive = (aapOpenArchive) GetProcAddress (arcacc_mod, "aaOpenArchive"); aaGetFileCount = (aapGetFileCount) GetProcAddress (arcacc_mod, "aaGetFileCount"); aaGetFileInfo = (aapGetFileInfo) GetProcAddress (arcacc_mod, "aaGetFileInfo"); aaExtract = (aapExtract) GetProcAddress (arcacc_mod, "aaExtract"); aaCloseArchive = (aapCloseArchive) GetProcAddress (arcacc_mod, "aaCloseArchive"); if (!aaOpenArchive || !aaGetFileCount || !aaGetFileInfo || !aaExtract || !aaCloseArchive) { write_log (_T("Missing functions in archiveaccess.dll. Old version?\n")); arcacc_free (); return 0; } return 1; } #endif #define ARCACC_STACKSIZE 10 static struct zfile *arcacc_stack[ARCACC_STACKSIZE]; static int arcacc_stackptr = -1; static int arcacc_push (struct zfile *f) { if (arcacc_stackptr == ARCACC_STACKSIZE - 1) return -1; arcacc_stackptr++; arcacc_stack[arcacc_stackptr] = f; return arcacc_stackptr; } static void arcacc_pop (void) { arcacc_stackptr--; } static HRESULT __stdcall readCallback (int StreamID, uae_u64 offset, uae_u32 count, void *buf, uae_u32 *processedSize) { struct zfile *f = arcacc_stack[StreamID]; int ret; zfile_fseek (f, (long)offset, SEEK_SET); ret = zfile_fread (buf, 1, count, f); if (processedSize) *processedSize = ret; return 0; } static HRESULT __stdcall writeCallback (int StreamID, uae_u64 offset, uae_u32 count, const void *buf, uae_u32 *processedSize) { struct zfile *f = arcacc_stack[StreamID]; int ret; ret = zfile_fwrite ((void*)buf, 1, count, f); if (processedSize) *processedSize = ret; if (ret != count) return -1; return 0; } struct zvolume *archive_directory_arcacc (struct zfile *z, unsigned int id) { aaHandle ah; int id_r, status; int fc, f; struct zvolume *zv; int skipsize = 0; if (!arcacc_init (z)) return NULL; zv = zvolume_alloc (z, ArchiveFormatAA, NULL, NULL); id_r = arcacc_push (z); ah = aaOpenArchive (readCallback, id_r, zv->archivesize, id, &status, NULL); if (!status) { zv->handle = ah; fc = aaGetFileCount (ah); for (f = 0; f < fc; f++) { struct aaFileInArchiveInfo fi; TCHAR *name; struct znode *zn; struct zarchive_info zai; memset (&fi, 0, sizeof (fi)); aaGetFileInfo (ah, f, &fi); if (fi.IsDir) continue; name = au (fi.path); memset (&zai, 0, sizeof zai); zai.name = name; zai.flags = -1; zai.size = (unsigned int)fi.UncompressedFileSize; zn = zvolume_addfile_abs (zv, &zai); xfree (name); zn->offset = f; zn->method = id; if (id == ArchiveFormat7Zip) { if (fi.CompressedFileSize) skipsize = 0; skipsize += (int)fi.UncompressedFileSize; } } aaCloseArchive (ah); } arcacc_pop (); zv->method = ArchiveFormatAA; return zv; } static struct zfile *archive_access_arcacc (struct znode *zn) { struct zfile *zf; struct zfile *z = zn->volume->archive; int status, id_r, id_w; aaHandle ah; int ok = 0; id_r = arcacc_push (z); ah = aaOpenArchive (readCallback, id_r, zn->volume->archivesize, zn->method, &status, NULL); if (!status) { int err; uae_u64 written = 0; struct aaFileInArchiveInfo fi; memset (&fi, 0, sizeof (fi)); aaGetFileInfo (ah, zn->offset, &fi); zf = zfile_fopen_empty (z, zn->fullname, zn->size); id_w = arcacc_push (zf); err = aaExtract(ah, zn->offset, id_w, writeCallback, &written); if (zf->seek == fi.UncompressedFileSize) ok = 1; arcacc_pop(); } aaCloseArchive(ah); arcacc_pop(); if (ok) return zf; zfile_fclose(zf); return NULL; } #endif /* plain single file */ static struct znode *addfile (struct zvolume *zv, struct zfile *zf, const TCHAR *path, uae_u8 *data, int size) { struct zarchive_info zai; struct znode *zn; struct zfile *z; z = zfile_fopen_empty (zf, path, size); if (!z) return NULL; zfile_fwrite (data, size, 1, z); memset (&zai, 0, sizeof zai); zai.name = my_strdup (path); zai.flags = -1; zai.size = size; zn = zvolume_addfile_abs (zv, &zai); if (zn) zn->f = z; else zfile_fclose (z); xfree (zai.name); return zn; } static uae_u8 exeheader[]={0x00,0x00,0x03,0xf3,0x00,0x00,0x00,0x00}; struct zvolume *archive_directory_plain (struct zfile *z) { struct zfile *zf, *zf2; struct zvolume *zv; struct znode *zn; struct zarchive_info zai; uae_u8 id[8]; int rc, index; memset (&zai, 0, sizeof zai); zv = zvolume_alloc (z, ArchiveFormatPLAIN, NULL, NULL); memset(id, 0, sizeof id); zai.name = zfile_getfilename (z); zai.flags = -1; zfile_fseek(z, 0, SEEK_END); zai.size = zfile_ftell (z); zfile_fseek(z, 0, SEEK_SET); zfile_fread(id, sizeof id, 1, z); zfile_fseek(z, 0, SEEK_SET); zn = zvolume_addfile_abs (zv, &zai); if (!memcmp (id, exeheader, sizeof id)) { char *an = ua (zai.name); char *data = xmalloc (char, 1 + strlen (an) + 1 + 1 + 1); sprintf (data, "\"%s\"\n", an); zn = addfile (zv, z, _T("s/startup-sequence"), (uae_u8*)data, strlen (data)); xfree (data); xfree (an); } index = 0; for (;;) { zf = zfile_dup (z); if (!zf) break; zf2 = zuncompress (NULL, zf, 0, ZFD_ALL & ~ZFD_ADF, &rc, index); if (zf2) { zf = NULL; zai.name = zfile_getfilename (zf2); zai.flags = -1; zfile_fseek (zf2, 0, SEEK_END); zai.size = zfile_ftell (zf2); zfile_fseek (zf2, 0, SEEK_SET); zn = zvolume_addfile_abs (zv, &zai); zn->f = zf2; // if (zn) // zn->offset = index + 1; // zfile_fclose (zf2); } else { if (rc == 0) { zfile_fclose (zf); break; } } index++; zfile_fclose (zf); } return zv; } static struct zfile *archive_access_plain (struct znode *zn) { struct zfile *z; if (zn->offset) { struct zfile *zf; z = zfile_fopen_empty (zn->volume->archive, zn->fullname, zn->size); zf = zfile_fopen (zfile_getname (zn->volume->archive), _T("rb"), zn->volume->archive->zfdmask & ~ZFD_ADF, zn->offset - 1); if (zf) { zfile_fread (z->data, zn->size, 1, zf); zfile_fclose (zf); } } else { z = zfile_fopen_empty (zn->volume->archive, zn->fullname, zn->size); if (z) { zfile_fseek (zn->volume->archive, 0, SEEK_SET); zfile_fread (z->data, zn->size, 1, zn->volume->archive); } } return z; } struct adfhandle { int size; int highblock; int blocksize; int rootblock; struct zfile *z; uae_u8 block[65536]; uae_u32 dostype; }; static int dos_checksum (uae_u8 *p, int blocksize) { uae_u32 cs = 0; int i; for (i = 0; i < blocksize; i += 4) cs += (p[i] << 24) | (p[i + 1] << 16) | (p[i + 2] << 8) | (p[i + 3] << 0); return cs; } static int sfs_checksum (uae_u8 *p, int blocksize, int sfs2) { uae_u32 cs = sfs2 ? 2 : 1; int i; for (i = 0; i < blocksize; i += 4) cs += (p[i] << 24) | (p[i + 1] << 16) | (p[i + 2] << 8) | (p[i + 3] << 0); return cs; } static TCHAR *getBSTR (uae_u8 *bstr) { int n = *bstr++; uae_char buf[257]; int i; for (i = 0; i < n; i++) buf[i] = *bstr++; buf[i] = 0; return au (buf); } static uae_u32 gl (struct adfhandle *adf, int off) { uae_u8 *p = adf->block + off; return (p[0] << 24) | (p[1] << 16) | (p[2] << 8) | (p[3] << 0); } static uae_u32 glx (uae_u8 *p) { return (p[0] << 24) | (p[1] << 16) | (p[2] << 8) | (p[3] << 0); } static uae_u32 gwx (uae_u8 *p) { return (p[0] << 8) | (p[1] << 0); } static const int secs_per_day = 24 * 60 * 60; static const int diff = (8 * 365 + 2) * (24 * 60 * 60); static const int diff2 = (-8 * 365 - 2) * (24 * 60 * 60); static time_t put_time (long days, long mins, long ticks) { time_t t; if (days < 0) days = 0; if (days > 9900 * 365) days = 9900 * 365; // in future far enough? if (mins < 0 || mins >= 24 * 60) mins = 0; if (ticks < 0 || ticks >= 60 * 50) ticks = 0; t = ticks / 50; t += mins * 60; t += ((uae_u64)days) * secs_per_day; t += diff; return t; } static int adf_read_block (struct adfhandle *adf, int block) { memset (adf->block, 0, adf->blocksize); if (block >= adf->highblock || block < 0) return 0; zfile_fseek (adf->z, block * adf->blocksize, SEEK_SET); zfile_fread (adf->block, adf->blocksize, 1, adf->z); return 1; } static void recurseadf (struct znode *zn, int root, TCHAR *name) { int i; struct zvolume *zv = zn->volume; struct adfhandle *adf = (struct adfhandle*)zv->handle; TCHAR name2[MAX_DPATH]; int bs = adf->blocksize; for (i = 0; i < bs / 4 - 56; i++) { int block; if (!adf_read_block (adf, root)) return; block = gl (adf, (i + 6) * 4); while (block > 0 && block < adf->size / bs) { struct zarchive_info zai; TCHAR *fname; uae_u32 size, secondary; if (!adf_read_block (adf, block)) return; if (gl (adf, 0) != 2) break; if (gl (adf, 1 * 4) != block) break; secondary = gl (adf, bs - 1 * 4); if (secondary != -3 && secondary != 2) break; memset (&zai, 0, sizeof zai); fname = getBSTR (adf->block + bs - 20 * 4); size = gl (adf, bs - 47 * 4); name2[0] = 0; if (name[0]) { TCHAR sep[] = { FSDB_DIR_SEPARATOR, 0 }; _tcscpy (name2, name); _tcscat (name2, sep); } _tcscat (name2, fname); zai.name = name2; if (size < 0 || size > 0x7fffffff) size = 0; zai.size = size; zai.flags = gl (adf, bs - 48 * 4); amiga_to_timeval (&zai.tv, gl (adf, bs - 23 * 4), gl (adf, bs - 22 * 4),gl (adf, bs - 21 * 4)); if (secondary == -3) { struct znode *znnew = zvolume_addfile_abs (zv, &zai); znnew->offset = block; } else { struct znode *znnew = zvolume_adddir_abs (zv, &zai); znnew->offset = block; recurseadf (znnew, block, name2); if (!adf_read_block (adf, block)) return; } xfree (fname); block = gl (adf, bs - 4 * 4); } } } static void recursesfs (struct znode *zn, int root, TCHAR *name, int sfs2) { struct zvolume *zv = zn->volume; struct adfhandle *adf = (struct adfhandle*)zv->handle; TCHAR name2[MAX_DPATH]; int bs = adf->blocksize; int block; uae_u8 *p, *s; struct zarchive_info zai; block = root; while (block) { if (!adf_read_block (adf, block)) return; p = adf->block + 12 + 3 * 4; while (glx (p + 4) && p < adf->block + adf->blocksize - 27) { TCHAR *fname; int i; int align; memset (&zai, 0, sizeof zai); zai.flags = glx (p + 8) ^ 0x0f; s = p + (sfs2 ? 27 : 25); fname = au ((char*)s); i = 0; while (*s) { s++; i++; } s++; i++; if (*s) zai.comment = au ((char*)s); while (*s) { s++; i++; } s++; i++; i += sfs2 ? 27 : 25; align = i & 1; name2[0] = 0; if (name[0]) { TCHAR sep[] = { FSDB_DIR_SEPARATOR, 0 }; _tcscpy (name2, name); _tcscat (name2, sep); } _tcscat (name2, fname); zai.name = name2; if (sfs2) zai.tv.tv_sec = glx (p + 22) - diff2; else zai.tv.tv_sec = glx (p + 20) - diff; if (p[sfs2 ? 26 : 24] & 0x80) { // dir struct znode *znnew = zvolume_adddir_abs (zv, &zai); int newblock = glx (p + 16); if (newblock) { znnew->offset = block; recursesfs (znnew, newblock, name2, sfs2); } if (!adf_read_block (adf, block)) return; } else { struct znode *znnew; if (sfs2) { uae_u64 b1 = p[16]; uae_u64 b2 = p[17]; zai.size = (b1 << 40) | (b2 << 32) | glx (p + 18) ; } else { zai.size = glx (p + 16); } znnew = zvolume_addfile_abs (zv, &zai); znnew->offset = block; znnew->offset2 = p - adf->block; } xfree (zai.comment); xfree (fname); p += i + align; } block = gl (adf, 12 + 4); } } struct zvolume *archive_directory_adf (struct znode *parent, struct zfile *z) { struct zvolume *zv; struct adfhandle *adf; TCHAR *volname = NULL; TCHAR name[MAX_DPATH]; int gotroot = 0; adf = xcalloc (struct adfhandle, 1); zfile_fseek (z, 0, SEEK_END); adf->size = zfile_ftell (z); zfile_fseek (z, 0, SEEK_SET); adf->blocksize = 512; if (parent && parent->offset2) { if (parent->offset2 == 1024 || parent->offset2 == 2048 || parent->offset2 == 4096 || parent->offset2 == 8192 || parent->offset2 == 16384 || parent->offset2 == 32768 || parent->offset2 == 65536) { adf->blocksize = parent->offset2; gotroot = 1; } } adf->highblock = adf->size / adf->blocksize; adf->z = z; if (!adf_read_block (adf, 0)) goto fail; adf->dostype = gl (adf, 0); if ((adf->dostype & 0xffffff00) == 'DOS\0') { int bs = adf->blocksize; int res; adf->rootblock = ((adf->size / bs) - 1 + 2) / 2; if (!gotroot) { for (res = 2; res >= 1; res--) { for (bs = 512; bs < 65536; bs <<= 1) { adf->blocksize = bs; adf->rootblock = ((adf->size / bs) - 1 + res) / 2; if (!adf_read_block (adf, adf->rootblock)) continue; if (gl (adf, 0) != 2 || gl (adf, bs - 1 * 4) != 1) continue; if (dos_checksum (adf->block, bs) != 0) continue; gotroot = 1; break; } if (gotroot) break; } } if (!gotroot) { bs = adf->blocksize = 512; if (adf->size < 2000000 && adf->rootblock != 880) { adf->rootblock = 880; if (!adf_read_block (adf, adf->rootblock)) goto fail; if (gl (adf, 0) != 2 || gl (adf, bs - 1 * 4) != 1) goto fail; if (dos_checksum (adf->block, bs) != 0) goto fail; } } if (!adf_read_block (adf, adf->rootblock)) goto fail; if (gl (adf, 0) != 2 || gl (adf, bs - 1 * 4) != 1) goto fail; if (dos_checksum (adf->block, adf->blocksize) != 0) goto fail; adf->blocksize = bs; adf->highblock = adf->size / adf->blocksize; volname = getBSTR (adf->block + adf->blocksize - 20 * 4); zv = zvolume_alloc (z, ArchiveFormatADF, NULL, NULL); zv->method = ArchiveFormatADF; zv->handle = adf; name[0] = 0; recurseadf (&zv->root, adf->rootblock, name); } else if ((adf->dostype & 0xffffff00) == 'SFS\0') { uae_u16 version, sfs2; for (;;) { for (;;) { version = gl (adf, 12) >> 16; sfs2 = version > 3; if (version > 4) break; adf->rootblock = gl (adf, 104); if (!adf_read_block (adf, adf->rootblock)) break; if (gl (adf, 0) != 'OBJC') break; if (sfs_checksum (adf->block, adf->blocksize, sfs2)) break; adf->rootblock = gl (adf, 40); if (!adf_read_block (adf, adf->rootblock)) break; if (gl (adf, 0) != 'OBJC') break; if (sfs_checksum (adf->block, adf->blocksize, sfs2)) break; gotroot = 1; break; } if (gotroot) break; adf->blocksize <<= 1; if (adf->blocksize == 65536) break; } if (!gotroot) goto fail; zv = zvolume_alloc (z, ArchiveFormatADF, NULL, NULL); zv->method = ArchiveFormatADF; zv->handle = adf; name[0] = 0; recursesfs (&zv->root, adf->rootblock, name, version > 3); } else { goto fail; } xfree (volname); return zv; fail: xfree (adf); return NULL; } struct sfsblock { int block; int length; }; static int sfsfindblock (struct adfhandle *adf, int btree, int theblock, struct sfsblock **sfsb, int *sfsblockcnt, int *sfsmaxblockcnt, int sfs2) { int nodecount, isleaf, nodesize; int i; uae_u8 *p; if (!btree) return 0; if (!adf_read_block (adf, btree)) return 0; if (memcmp (adf->block, "BNDC", 4)) return 0; nodecount = gwx (adf->block + 12); isleaf = adf->block[14]; nodesize = adf->block[15]; p = adf->block + 16; for (i = 0; i < nodecount; i++) { if (isleaf) { uae_u32 key = glx (p); uae_u32 next = glx (p + 4); uae_u32 prev = glx (p + 8); uae_u32 blocks; if (sfs2) blocks = glx (p + 12); else blocks = gwx (p + 12); if (key == theblock) { struct sfsblock *sb; if (*sfsblockcnt >= *sfsmaxblockcnt) { *sfsmaxblockcnt += 100; *sfsb = xrealloc (struct sfsblock, *sfsb, *sfsmaxblockcnt); } sb = *sfsb + (*sfsblockcnt); sb->block = key; sb->length = blocks; (*sfsblockcnt)++; return next; } } else { uae_u32 key = glx (p); uae_u32 data = glx (p + 4); int newblock = sfsfindblock (adf, data, theblock, sfsb, sfsblockcnt, sfsmaxblockcnt, sfs2); if (newblock) return newblock; if (!adf_read_block (adf, btree)) return 0; if (memcmp (adf->block, "BNDC", 4)) return 0; } p += nodesize; } return 0; } static struct zfile *archive_access_adf (struct znode *zn) { struct zfile *z = NULL; int root, ffs; struct adfhandle *adf = (struct adfhandle*)zn->volume->handle; int size, bs; int i; uae_u8 *dst; size = zn->size; bs = adf->blocksize; z = zfile_fopen_empty (zn->volume->archive, zn->fullname, size); if (!z) return NULL; if ((adf->dostype & 0xffffff00) == 'DOS\0') { ffs = adf->dostype & 1; root = zn->offset; dst = z->data; for (;;) { adf_read_block (adf, root); for (i = bs / 4 - 51; i >= 6; i--) { int bsize = ffs ? bs : bs - 24; int block = gl (adf, i * 4); if (size < bsize) bsize = size; if (ffs) zfile_fseek (adf->z, block * adf->blocksize, SEEK_SET); else zfile_fseek (adf->z, block * adf->blocksize + 24, SEEK_SET); zfile_fread (dst, bsize, 1, adf->z); size -= bsize; dst += bsize; if (size <= 0) break; } if (size <= 0) break; root = gl (adf, bs - 2 * 4); } } else if ((adf->dostype & 0xffffff00) == 'SFS\0') { struct sfsblock *sfsblocks; int sfsblockcnt, sfsmaxblockcnt, i; int bsize; int block = zn->offset; int dblock; int btree, version, sfs2; uae_u8 *p; if (!adf_read_block (adf, 0)) goto end; btree = glx (adf->block + 108); version = gwx (adf->block + 12); sfs2 = version > 3; if (!adf_read_block (adf, block)) goto end; p = adf->block + zn->offset2; dblock = glx (p + 12); sfsblockcnt = 0; sfsmaxblockcnt = 0; sfsblocks = NULL; if (size > 0) { int nextblock = dblock; while (nextblock) { nextblock = sfsfindblock (adf, btree, nextblock, &sfsblocks, &sfsblockcnt, &sfsmaxblockcnt, sfs2); } } bsize = 0; for (i = 0; i < sfsblockcnt; i++) bsize += sfsblocks[i].length * adf->blocksize; if (bsize < size) write_log (_T("SFS extracting error, %s size mismatch %d<%d\n"), z->name, bsize, size); dst = z->data; block = zn->offset; for (i = 0; i < sfsblockcnt; i++) { block = sfsblocks[i].block; bsize = sfsblocks[i].length * adf->blocksize; zfile_fseek (adf->z, block * adf->blocksize, SEEK_SET); if (bsize > size) bsize = size; zfile_fread (dst, bsize, 1, adf->z); dst += bsize; size -= bsize; } xfree (sfsblocks); } return z; end: zfile_fclose (z); return NULL; } static void archive_close_adf (void *v) { struct adfhandle *adf = (struct adfhandle*)v; xfree (adf); } static int rl (uae_u8 *p) { return (p[0] << 24) | (p[1] << 16) | (p[2] << 8) | (p[3]); } static TCHAR *tochar (uae_u8 *s, int len) { int i, j; uae_char tmp[256]; j = 0; for (i = 0; i < len; i++) { uae_char c = *s++; if (c >= 0 && c <= 9) { tmp[j++] = FSDB_DIR_SEPARATOR; tmp[j++] = '0' + c; } else if (c < ' ' || c > 'z') { tmp[j++] = '.'; } else { tmp[j++] = c; } tmp[j] = 0; } return au (tmp); } struct zvolume *archive_directory_rdb (struct zfile *z) { uae_u8 buf[512] = { 0 }; int partnum, bs; TCHAR *devname; struct zvolume *zv; struct zarchive_info zai; uae_u8 *p; struct znode *zn; zv = zvolume_alloc (z, ArchiveFormatRDB, NULL, NULL); zfile_fseek (z, 0, SEEK_SET); zfile_fread (buf, 1, 512, z); partnum = 0; for (;;) { int partblock; TCHAR tmp[MAX_DPATH]; int surf, spt, spb, lowcyl, highcyl, reserved; int size, block, blocksize, rootblock; TCHAR comment[81], *dos; if (partnum == 0) partblock = rl (buf + 28); else partblock = rl (buf + 4 * 4); partnum++; if (partblock <= 0) break; zfile_fseek (z, partblock * 512, SEEK_SET); zfile_fread (buf, 1, 512, z); if (memcmp (buf, "PART", 4)) break; p = buf + 128 - 16; surf = rl (p + 28); spb = rl (p + 32); spt = rl (p + 36); reserved = rl (p + 40); lowcyl = rl (p + 52); highcyl = rl (p + 56); blocksize = rl (p + 20) * 4 * spb; block = lowcyl * surf * spt; size = (highcyl - lowcyl + 1) * surf * spt; size *= blocksize; dos = tochar (buf + 192, 4); if (!memcmp (dos, _T("DOS"), 3)) rootblock = ((size / blocksize) - 1 + 2) / 2; else rootblock = 0; devname = getBSTR (buf + 36); _stprintf (tmp, _T("%s.hdf"), devname); memset (&zai, 0, sizeof zai); _stprintf (comment, _T("FS=%s LO=%d HI=%d HEADS=%d SPT=%d RES=%d BLOCK=%d ROOT=%d"), dos, lowcyl, highcyl, surf, spt, reserved, blocksize, rootblock); zai.comment = comment; xfree (dos); zai.name = tmp; zai.size = size; zai.flags = -1; zn = zvolume_addfile_abs (zv, &zai); zn->offset = partblock; zn->offset2 = blocksize; // abuse of offset2.. } zfile_fseek (z, 0, SEEK_SET); p = buf; zfile_fread (buf, 1, 512, z); zai.name = _T("rdb_dump.dat"); bs = rl (p + 16); zai.size = rl (p + 140) * bs; zai.comment = NULL; zn = zvolume_addfile_abs (zv, &zai); zn->offset = 0; zv->method = ArchiveFormatRDB; return zv; } static struct zfile *archive_access_rdb (struct znode *zn) { struct zfile *z = zn->volume->archive; struct zfile *zf; uae_u8 buf[512] = { 0 }; int surf, spb, spt, lowcyl, highcyl; int size, block, blocksize; uae_u8 *p; if (zn->offset) { zfile_fseek (z, zn->offset * 512, SEEK_SET); zfile_fread (buf, 1, 512, z); p = buf + 128 - 16; surf = rl (p + 28); spb = rl (p + 32); spt = rl (p + 36); lowcyl = rl (p + 52); highcyl = rl (p + 56); blocksize = rl (p + 20) * 4; block = lowcyl * surf * spt; size = (highcyl - lowcyl + 1) * surf * spt; size *= blocksize; } else { zfile_fseek (z, 0, SEEK_SET); zfile_fread (buf, 1, 512, z); p = buf; blocksize = rl (p + 16); block = 0; size = zn->size; } zf = zfile_fopen_parent (z, zn->fullname, block * blocksize, size); return zf; } int isfat (uae_u8 *p) { int i, b; if ((p[0x15] & 0xf0) != 0xf0) return 0; if (p[0x0b] != 0x00 || p[0x0c] != 0x02) return 0; b = 0; for (i = 0; i < 8; i++) { if (p[0x0d] & (1 << i)) b++; } if (b != 1) return 0; if (p[0x0f] != 0) return 0; if (p[0x0e] > 8 || p[0x0e] == 0) return 0; if (p[0x10] == 0 || p[0x10] > 8) return 0; b = (p[0x12] << 8) | p[0x11]; if (b > 8192 || b <= 0) return 0; b = p[0x16] | (p[0x17] << 8); if (b == 0 || b > 8192) return 0; return 1; } /* * The epoch of FAT timestamp is 1980. * : bits : value * date: 0 - 4: day (1 - 31) * date: 5 - 8: month (1 - 12) * date: 9 - 15: year (0 - 127) from 1980 * time: 0 - 4: sec (0 - 29) 2sec counts * time: 5 - 10: min (0 - 59) * time: 11 - 15: hour (0 - 23) */ #define SECS_PER_MIN 60 #define SECS_PER_HOUR (60 * 60) #define SECS_PER_DAY (SECS_PER_HOUR * 24) #define UNIX_SECS_1980 315532800L #if BITS_PER_LONG == 64 #define UNIX_SECS_2108 4354819200L #endif /* days between 1.1.70 and 1.1.80 (2 leap days) */ #define DAYS_DELTA (365 * 10 + 2) /* 120 (2100 - 1980) isn't leap year */ #define YEAR_2100 120 #define IS_LEAP_YEAR(y) (!((y) & 3) && (y) != YEAR_2100) /* Linear day numbers of the respective 1sts in non-leap years. */ static time_t days_in_year[] = { /* Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec */ 0, 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 0, 0, 0, }; /* Convert a FAT time/date pair to a UNIX date (seconds since 1 1 70). */ static time_t fat_time_fat2unix (uae_u16 time, uae_u16 date, int fat12) { time_t second, day, leap_day, month, year; if (0 && fat12) { year = date & 0x7f; month = (date >> 7) & 0x0f; day = (date >> 11); } else { year = date >> 9; month = max(1, (date >> 5) & 0xf); day = max(1, date & 0x1f) - 1; } leap_day = (year + 3) / 4; if (year > YEAR_2100) /* 2100 isn't leap year */ leap_day--; if (IS_LEAP_YEAR(year) && month > 2) leap_day++; second = (time & 0x1f) << 1; second += ((time >> 5) & 0x3f) * SECS_PER_MIN; second += (time >> 11) * SECS_PER_HOUR; second += (year * 365 + leap_day + days_in_year[month] + day + DAYS_DELTA) * SECS_PER_DAY; return second; } static int getcluster (struct zfile *z, int cluster, int fatstart, int fatbits) { uae_u32 fat = 0; uae_u8 p[4]; int offset = cluster * fatbits; zfile_fseek (z, fatstart * 512 + offset / 8, SEEK_SET); if (fatbits == 12) { zfile_fread (p, 2, 1, z); if ((offset & 4)) fat = ((p[0] & 0xf0) >> 4) | (p[1] << 4); else fat = (p[0]) | ((p[1] & 0x0f) << 8); if (fat >= 0xff0) return -1; } else if (fatbits == 16) { zfile_fread (p, 2, 1, z); fat = p[0] | (p[1] << 8); if (fat >= 0xfff0) return -1; } else if (fatbits == 32) { zfile_fread (p, 4, 1, z); fat = p[0] | (p[1] << 8) | (p[2] << 16) | (p[3] << 24); fat &= ~0x0fffffff; if (fat >= 0x0ffffff0) return -1; } return fat; } static void fatdirectory (struct zfile *z, struct zvolume *zv, TCHAR *name, int startblock, int entries, int sectorspercluster, int fatstart, int dataregion, int fatbits) { struct zarchive_info zai; struct znode *znnew; int i, j; for (i = 0; i < entries; i++) { TCHAR name2[MAX_DPATH], *fname; uae_s64 size; uae_u8 fatname[16]; uae_u8 buf[32]; int attr, cnt, ext; int startcluster; memset (buf, 0, sizeof buf); memset (&zai, 0, sizeof zai); zfile_fseek (z, startblock * 512 + i * 32, SEEK_SET); zfile_fread (buf, 32, 1, z); if (buf[0] == 0) break; if (buf[0] == 0xe5) continue; if (buf[0] == 0x05) buf[0] = 0xe5; size = buf[0x1c] | (buf[0x1d] << 8) | (buf[0x1e] << 16) | (buf[0x1f] << 24); attr = buf[0x0b]; startcluster = buf[0x1a] | (buf[0x1b] << 8); if ((attr & (0x4 | 0x2)) == 0x06) // system+hidden continue; if (attr & 8) // disk name continue; if (attr & 1) // read-only zai.flags |= 1 << 3; if (!(attr & 32)) // archive zai.flags |= 1 << 4; cnt = 0; ext = 0; for (j = 0; j < 8 && buf[j] != 0x20 && buf[j] != 0; j++) fatname[cnt++] = buf[j]; for (j = 0; j < 3 && buf[8 + j] != 0x20 && buf[8 + j] != 0; j++) { if (ext == 0) fatname[cnt++] = '.'; ext = 1; fatname[cnt++] = buf[8 + j]; } fatname[cnt] = 0; fname = au ((char*)fatname); name2[0] = 0; if (name[0]) { TCHAR sep[] = { FSDB_DIR_SEPARATOR, 0 }; _tcscpy (name2, name); _tcscat (name2, sep); } _tcscat (name2, fname); zai.name = name2; zai.tv.tv_sec = fat_time_fat2unix (buf[0x16] | (buf[0x17] << 8), buf[0x18] | (buf[0x19] << 8), 1); if (attr & (16 | 8)) { int nextblock, cluster; nextblock = dataregion + (startcluster - 2) * sectorspercluster; cluster = getcluster (z, startcluster, fatstart, fatbits); if ((cluster < 0 || cluster >= 3) && nextblock != startblock) { znnew = zvolume_adddir_abs (zv, &zai); fatdirectory (z, zv, name2, nextblock, sectorspercluster * 512 / 32, sectorspercluster, fatstart, dataregion, fatbits); while (cluster >= 3) { nextblock = dataregion + (cluster - 2) * sectorspercluster; fatdirectory (z, zv, name2, nextblock, sectorspercluster * 512 / 32, sectorspercluster, fatstart, dataregion, fatbits); cluster = getcluster (z, cluster, fatstart, fatbits); } } } else { zai.size = size; znnew = zvolume_addfile_abs (zv, &zai); znnew->offset = startcluster; } xfree (fname); } } struct zvolume *archive_directory_fat (struct zfile *z) { uae_u8 buf[512] = { 0 }; int fatbits = 12; struct zvolume *zv; int rootdir, reserved, sectorspercluster; int numfats, sectorsperfat, rootentries; int dataregion; zfile_fseek (z, 0, SEEK_SET); zfile_fread (buf, 1, 512, z); if (!isfat (buf)) return NULL; reserved = buf[0x0e] | (buf[0x0f] << 8); numfats = buf[0x10]; sectorsperfat = buf[0x16] | (buf[0x17] << 8); rootentries = buf[0x11] | (buf[0x12] << 8); sectorspercluster = buf[0x0d]; rootdir = reserved + numfats * sectorsperfat; dataregion = rootdir + rootentries * 32 / 512; zv = zvolume_alloc (z, ArchiveFormatFAT, NULL, NULL); fatdirectory (z, zv, _T(""), rootdir, rootentries, sectorspercluster, reserved, dataregion, fatbits); zv->method = ArchiveFormatFAT; return zv; } static struct zfile *archive_access_fat (struct znode *zn) { uae_u8 buf[512] = { 0 }; int fatbits = 12; int size = zn->size; struct zfile *sz, *dz; int rootdir, reserved, sectorspercluster; int numfats, sectorsperfat, rootentries; int dataregion; int offset, cluster; sz = zn->volume->archive; zfile_fseek (sz, 0, SEEK_SET); zfile_fread (buf, 1, 512, sz); if (!isfat (buf)) return NULL; reserved = buf[0x0e] | (buf[0x0f] << 8); numfats = buf[0x10]; sectorsperfat = buf[0x16] | (buf[0x17] << 8); rootentries = buf[0x11] | (buf[0x12] << 8); sectorspercluster = buf[0x0d]; rootdir = reserved + numfats * sectorsperfat; dataregion = rootdir + rootentries * 32 / 512; dz = zfile_fopen_empty (sz, zn->fullname, size); if (!dz) return NULL; offset = 0; cluster = zn->offset; while (size && cluster >= 2) { int left = size > sectorspercluster * 512 ? sectorspercluster * 512 : size; int sector = dataregion + (cluster - 2) * sectorspercluster; zfile_fseek (sz, sector * 512, SEEK_SET); zfile_fread (dz->data + offset, 1, left, sz); size -= left; offset += left; cluster = getcluster (sz, cluster, reserved, fatbits); } return dz; } void archive_access_close (void *handle, unsigned int id) { switch (id) { #ifdef A_ZIP case ArchiveFormatZIP: archive_close_zip (handle); break; #endif #ifdef A_7Z case ArchiveFormat7Zip: archive_close_7z (handle); break; #endif #ifdef A_RAR case ArchiveFormatRAR: archive_close_rar (handle); break; #endif #ifdef A_LHA case ArchiveFormatLHA: break; #endif case ArchiveFormatADF: archive_close_adf (handle); break; case ArchiveFormatTAR: archive_close_tar (handle); break; } } static struct zfile *archive_access_dir (struct znode *zn) { return zfile_fopen (zn->fullname, _T("rb"), 0); } struct zfile *archive_unpackzfile (struct zfile *zf) { struct zfile *zout = NULL; if (!zf->archiveparent) return NULL; unpack_log (_T("delayed unpack '%s'\n"), zf->name); zf->datasize = zf->size; switch (zf->archiveid) { #ifdef A_ZIP case ArchiveFormatZIP: zout = archive_unpack_zip (zf); break; #endif } zfile_fclose (zf->archiveparent); zf->archiveparent = NULL; zf->archiveid = 0; return NULL; } struct zfile *archive_getzfile (struct znode *zn, unsigned int id, int flags) { struct zfile *zf = NULL; switch (id) { #ifdef A_ZIP case ArchiveFormatZIP: zf = archive_access_zip (zn, flags); break; #endif #ifdef A_7Z case ArchiveFormat7Zip: zf = archive_access_7z (zn); break; #endif #ifdef A_RAR case ArchiveFormatRAR: zf = archive_access_rar (zn); break; #endif #ifdef A_LHA case ArchiveFormatLHA: zf = archive_access_lha (zn); break; #endif #ifdef A_LZX case ArchiveFormatLZX: zf = archive_access_lzx (zn); break; #endif case ArchiveFormatPLAIN: zf = archive_access_plain (zn); break; case ArchiveFormatADF: zf = archive_access_adf (zn); break; case ArchiveFormatRDB: zf = archive_access_rdb (zn); break; case ArchiveFormatFAT: zf = archive_access_fat (zn); break; case ArchiveFormatDIR: zf = archive_access_dir (zn); break; case ArchiveFormatTAR: zf = archive_access_tar (zn); break; } if (zf) zf->archiveid = id; return zf; } fs-uae-2.2.3+dfsg/src/cd32_fmv.cpp0000644000175000017500000002043712162366655016761 0ustar glaubitzglaubitz/* * UAE - The Un*x Amiga Emulator * * CD32 FMV cartridge * * Copyright 2008-2010 Toni Wilen * */ #include "sysconfig.h" #include "sysdeps.h" #include "options.h" #include "uae/memory.h" #include "rommgr.h" #include "custom.h" #include "newcpu.h" #include "zfile.h" #include "cd32_fmv.h" #include "uae.h" #define FMV_DEBUG 1 /* 0x200000 - 0x23FFFF ROM 0x240000 io/status (single word register?) 0x2500xx L64111 audio decoder (word registers) 0x2700xx CL450 video decoder (word registers) 0x280000 - 0x2FFFFF RAM */ #define IO_BASE 0x040000 #define L64111_BASE 0x050000 #define CL450_BASE 0x070000 #define VRAM_BASE 0x080000 #define BANK_MASK 0x0F0000 #define IO_IRQ_L641111 0x4000 #define IO_IRQ_CL450 0x8000 // L64111 registers (from datasheet) #define A_DATA 0 //0 #define A_CONTROL1 1 //2 #define A_CONTROL2 2 //4 #define A_CONTROL3 3 //6 #define A_INT1 4 //8 #define A_INT2 5 //10 #define A_TCR 6 //12 #define A_TORH 7 //14 #define A_TORL 8 //16 #define A_PARAM1 9 //18 #define A_PARAM2 10 //20 #define A_PARAM3 11 //22 #define A_PRESENT1 12 //24 #define A_PRESENT2 13 //26 #define A_PRESENT3 14 //28 #define A_PRESENT4 15 //30 #define A_PRESENT5 16 //32 #define A_FIFO 17 //34 #define A_CB_STATUS 18 //36 #define A_CB_WRITE 19 //38 #define A_CB_READ 20 //40 static int fmv_mask; static uae_u8 *rom; static int rom_size = 262144; static uaecptr fmv_start = 0x00200000; static int fmv_size = 1048576; static uae_u16 l64111regs[32]; static uae_u16 l64111intmask1, l64111intmask2, l64111intstatus1, l64111intstatus2; static uae_u16 io_reg; static int isdebug (uaecptr addr) { #if FMV_DEBUG > 2 if (M68K_GETPC >= 0x200100) return 1; return 0; #endif #if (FMV_DEBUG == 2) if (M68K_GETPC >= 0x200100 && (addr & fmv_mask) >= VRAM_BASE) return 1; return 0; #endif return 0; } static uae_u8 io_bget (uaecptr addr) { addr &= 0xffff; write_log (_T("FMV: IO byte read access %08x!\n"), addr); return 0; } static uae_u16 io_wget (uaecptr addr) { addr &= 0xffff; if (addr != 0) return 0; return io_reg; } static void io_bput (uaecptr addr, uae_u8 v) { addr &= 0xffff; write_log (_T("FMV: IO byte write access %08x!\n"), addr); } static void io_wput (uaecptr addr, uae_u16 v) { addr &= 0xffff; if (addr != 0) return; write_log (_T("FMV: IO=%04x\n"), v); io_reg = v; } static uae_u8 l64111_bget (uaecptr addr) { write_log (_T("FMV: L64111 byte read access %08x!\n"), addr); return 0; } static void l64111_bput (uaecptr addr, uae_u8 v) { write_log (_T("FMV: L64111 byte write access %08x!\n"), addr); } static uae_u16 l64111_wget (uaecptr addr) { addr >>= 1; addr &= 31; #if FMV_DEBUG > 0 write_log (_T("FMV: L64111 read reg %d -> %04x\n"), addr, l64111regs[addr]); #endif if (addr == 4) return l64111intstatus1; if (addr == 5) return l64111intstatus1; return l64111regs[addr]; } static void l64111_wput (uaecptr addr, uae_u16 v) { addr >>= 1; addr &= 31; #if FMV_DEBUG > 0 write_log (_T("FMV: L64111 write reg %d = %04x\n"), addr, v); #endif if (addr == 4) { l64111intmask1 = v; return; } if (addr == 5) { l64111intmask2 = v; return; } l64111regs[addr] = v; } static uae_u8 cl450_bget (uaecptr addr) { addr &= 0xff; write_log (_T("FMV: CL450 byte read access %08x!\n"), addr); return 0; } static uae_u16 cl450_wget (uaecptr addr) { addr &= 0xff; addr >>= 1; write_log (_T("FMV: CL450 read reg %d\n"), addr); return 0; } static void cl450_bput (uaecptr addr, uae_u8 v) { addr &= 0xff; write_log (_T("FMV: CL450 byte write access %08x!\n"), addr); } static void cl450_wput (uaecptr addr, uae_u16 v) { addr &= 0xff; write_log (_T("FMV: CL450 write reg %d = %04x\n"), addr, v); } static uae_u8 romram_bget (uaecptr addr) { #ifdef FMV_DEBUG if (isdebug (addr)) write_log (_T("romram_bget %08X PC=%08X\n"), addr, M68K_GETPC); #endif if (addr >= IO_BASE && addr < VRAM_BASE) return 0; return rom[addr]; } static uae_u16 romram_wget (uaecptr addr) { #ifdef FMV_DEBUG if (isdebug (addr)) write_log (_T("romram_wget %08X PC=%08X\n"), addr, M68K_GETPC); #endif if (addr >= IO_BASE && addr < VRAM_BASE) return 0; return (rom[addr] << 8) | (rom[addr + 1] << 0); } static void ram_bput (uaecptr addr, uae_u8 v) { if (addr < VRAM_BASE) return; rom[addr] = v; if (isdebug (addr)) { write_log (_T("ram_bput %08X=%02X PC=%08X\n"), addr, v & 0xff, M68K_GETPC); } } static void ram_wput (uaecptr addr, uae_u16 v) { if (addr < VRAM_BASE) return; rom[addr + 0] = v >> 8; rom[addr + 1] = v >> 0; if (isdebug (addr)) { write_log (_T("ram_wput %08X=%04X PC=%08X\n"), addr, v & 0xffff, M68K_GETPC); } } static uae_u32 REGPARAM2 fmv_wget (uaecptr addr) { uae_u32 v; addr -= fmv_start & fmv_mask; addr &= fmv_mask; int mask = addr & BANK_MASK; if (mask == L64111_BASE) v = l64111_wget (addr); else if (mask == CL450_BASE) v = cl450_wget (addr); else if (mask == IO_BASE) v = io_wget (addr); else v = romram_wget (addr); #ifdef FMV_DEBUG if (isdebug (addr)) write_log (_T("fmv_wget %08X=%04X PC=%08X\n"), addr, v, M68K_GETPC); #endif return v; } static uae_u32 REGPARAM2 fmv_lget (uaecptr addr) { uae_u32 v; v = (fmv_wget (addr) << 16) | (fmv_wget (addr + 2) << 0); #ifdef FMV_DEBUG if (isdebug (addr)) write_log (_T("fmv_lget %08X=%08X PC=%08X\n"), addr, v, M68K_GETPC); #endif return v; } static uae_u32 REGPARAM2 fmv_bget (uaecptr addr) { uae_u32 v; addr -= fmv_start & fmv_mask; addr &= fmv_mask; int mask = addr & BANK_MASK; if (mask == L64111_BASE) v = l64111_bget (addr); else if (mask == CL450_BASE) v = cl450_bget (addr); else if (mask == IO_BASE) v = io_bget (addr); else v = romram_bget (addr); return v; } static void REGPARAM2 fmv_wput (uaecptr addr, uae_u32 w) { addr -= fmv_start & fmv_mask; addr &= fmv_mask; #ifdef FMV_DEBUG if (isdebug (addr)) write_log (_T("fmv_wput %04X=%04X PC=%08X\n"), addr, w & 65535, M68K_GETPC); #endif int mask = addr & BANK_MASK; if (mask == L64111_BASE) l64111_wput (addr, w); else if (mask == CL450_BASE) cl450_wput (addr, w); else if (mask == IO_BASE) io_wput (addr, w); else ram_wput (addr, w); } static void REGPARAM2 fmv_lput (uaecptr addr, uae_u32 w) { #ifdef FMV_DEBUG if (isdebug (addr)) write_log (_T("fmv_lput %08X=%08X PC=%08X\n"), addr, w, M68K_GETPC); #endif fmv_wput (addr + 0, w >> 16); fmv_wput (addr + 2, w >> 0); } static void REGPARAM2 fmv_bput (uaecptr addr, uae_u32 w) { addr -= fmv_start & fmv_mask; addr &= fmv_mask; int mask = addr & BANK_MASK; if (mask == L64111_BASE) l64111_bput (addr, w); else if (mask == CL450_BASE) cl450_bput (addr, w); else if (mask == IO_BASE) io_bput (addr, w); else ram_bput (addr, w); } static uae_u32 REGPARAM2 fmv_wgeti (uaecptr addr) { uae_u32 v = 0; uae_u8 *m; #ifdef JIT special_mem |= S_READ; #endif addr -= fmv_start & fmv_mask; addr &= fmv_mask; m = rom + addr; if (addr < rom_size) return do_get_mem_word ((uae_u16 *)m); #ifdef FMV_DEBUG write_log (_T("fmv_wgeti %08X %08X PC=%08X\n"), addr, v, M68K_GETPC); #endif return v; } static uae_u32 REGPARAM2 fmv_lgeti (uaecptr addr) { uae_u32 v = 0; uae_u8 *m; #ifdef JIT special_mem |= S_READ; #endif addr -= fmv_start & fmv_mask; addr &= fmv_mask; m = rom + addr; if (addr < rom_size) return do_get_mem_long ((uae_u32 *)m); #ifdef FMV_DEBUG write_log (_T("fmv_lgeti %08X %08X PC=%08X\n"), addr, v, M68K_GETPC); #endif return v; } static int REGPARAM2 fmv_check (uaecptr addr, uae_u32 size) { addr -= fmv_start & fmv_mask; addr &= fmv_mask; return (addr + size) <= fmv_size; } static uae_u8 *REGPARAM2 fmv_xlate (uaecptr addr) { addr -= fmv_start & fmv_mask; addr &= fmv_mask; return rom + addr; } static addrbank fmv_bank = { fmv_lget, fmv_wget, fmv_bget, fmv_lput, fmv_wput, fmv_bput, fmv_xlate, fmv_check, NULL, _T("CD32 FMV module"), fmv_lgeti, fmv_wgeti, ABFLAG_ROM | ABFLAG_IO }; void cd32_fmv_init (uaecptr start) { int ids[] = { 23, -1 }; struct romlist *rl = getromlistbyids (ids); struct romdata *rd; struct zfile *z; write_log (_T("CD32 FMV mapped @$%lx\n"), start); if (start != fmv_start) return; if (!rl) return; rd = rl->rd; z = read_rom (&rd); if (z) { write_log (_T("CD32 FMV ROM %d.%d\n"), rd->ver, rd->rev); rom = mapped_malloc (fmv_size, _T("fast")); if (rom) zfile_fread (rom, rd->size, 1, z); zfile_fclose (z); } fmv_mask = fmv_size - 1; fmv_bank.baseaddr = rom; map_banks (&fmv_bank, start >> 16, fmv_size >> 16, 0); } fs-uae-2.2.3+dfsg/src/uaeipc.cpp0000644000175000017500000001642312162366654016623 0ustar glaubitzglaubitz #include "sysconfig.h" #include #include #include "sysdeps.h" #include "uaeipc.h" #include "options.h" #include "zfile.h" #include "inputdevice.h" #include #define IPC_BUFFER_SIZE 16384 #define MAX_OUTMESSAGES 30 #define MAX_BINMESSAGE 32 struct uaeipc { HANDLE hipc, olevent; OVERLAPPED ol; uae_u8 buffer[IPC_BUFFER_SIZE], outbuf[IPC_BUFFER_SIZE]; int connected, readpending, writepending; int binary; TCHAR *outmsg[MAX_OUTMESSAGES]; int outmessages; uae_u8 outbin[MAX_OUTMESSAGES][MAX_BINMESSAGE]; int outbinlen[MAX_OUTMESSAGES]; }; static void parsemessage(TCHAR *in, struct uae_prefs *p, TCHAR *out, int outsize) { out[0] = 0; if (!_tcsncmp (in, _T("CFG "), 4) || !_tcsncmp (in, _T("EVT "), 4)) { TCHAR tmpout[256]; int index = -1; int cnt = 0; in += 4; for (;;) { int ret; tmpout[0] = 0; ret = cfgfile_modify (index, in, _tcslen (in), tmpout, sizeof (tmpout) * sizeof (TCHAR)); index++; if (_tcslen (tmpout) > 0) { if (_tcslen (out) == 0) _tcscat (out, _T("200 ")); _tcsncat (out, _T("\n"), outsize); _tcsncat (out, tmpout, outsize); } cnt++; if (ret >= 0) break; } if (_tcslen (out) == 0) _tcscat (out, _T("404")); } else { _tcscpy (out, _T("501")); } } static int listenIPC (void *vipc) { struct uaeipc *ipc = (struct uaeipc*)vipc; DWORD err; memset(&ipc->ol, 0, sizeof (OVERLAPPED)); ipc->ol.hEvent = ipc->olevent; if (ConnectNamedPipe(ipc->hipc, &ipc->ol)) { write_log (_T("IPC: ConnectNamedPipe init failed, err=%d\n"), GetLastError()); closeIPC(ipc); return 0; } err = GetLastError(); if (err == ERROR_PIPE_CONNECTED) { if (SetEvent(ipc->olevent)) { write_log (_T("IPC: ConnectNamedPipe SetEvent failed, err=%d\n"), GetLastError()); closeIPC(ipc); return 0; } } else if (err != ERROR_IO_PENDING) { write_log (_T("IPC: ConnectNamedPipe failed, err=%d\n"), err); closeIPC(ipc); return 0; } return 1; } static void disconnectIPC (void *vipc) { struct uaeipc *ipc = (struct uaeipc*)vipc; ipc->readpending = ipc->writepending = FALSE; if (ipc->connected) { if (!DisconnectNamedPipe(ipc->hipc)) write_log (_T("IPC: DisconnectNamedPipe failed, err=%d\n"), GetLastError()); ipc->connected = FALSE; } } static void resetIPC (void *vipc) { struct uaeipc *ipc = (struct uaeipc*)vipc; disconnectIPC (ipc); listenIPC (ipc); } void closeIPC (void *vipc) { struct uaeipc *ipc = (struct uaeipc*)vipc; if (!ipc) return; disconnectIPC (ipc); if (ipc->hipc == INVALID_HANDLE_VALUE) return; CloseHandle (ipc->hipc); ipc->hipc = INVALID_HANDLE_VALUE; if (ipc->olevent != INVALID_HANDLE_VALUE) CloseHandle (ipc->olevent); ipc->olevent = INVALID_HANDLE_VALUE; xfree (ipc); } void *createIPC (const TCHAR *name, int binary) { TCHAR tmpname[100]; int cnt = 0; struct uaeipc *ipc; ipc = xcalloc (struct uaeipc, 1); ipc->connected = FALSE; ipc->readpending = FALSE; ipc->writepending = FALSE; ipc->olevent = INVALID_HANDLE_VALUE; ipc->binary = 1; while (cnt < 10) { _stprintf (tmpname, _T("\\\\.\\pipe\\%s"), name); if (cnt > 0) { TCHAR *p = tmpname + _tcslen (tmpname); _stprintf (p, _T("_%d"), cnt); } ipc->hipc = CreateNamedPipe (tmpname, PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED | FILE_FLAG_FIRST_PIPE_INSTANCE, PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE, 1, IPC_BUFFER_SIZE, IPC_BUFFER_SIZE, NMPWAIT_USE_DEFAULT_WAIT, NULL); if (ipc->hipc == INVALID_HANDLE_VALUE) { DWORD err = GetLastError (); if (err == ERROR_ALREADY_EXISTS || err == ERROR_PIPE_BUSY) { cnt++; continue; } return 0; } break; } write_log (_T("IPC: Named Pipe '%s' open\n"), tmpname); ipc->olevent = CreateEvent(NULL, TRUE, TRUE, NULL); if (listenIPC(ipc)) return ipc; closeIPC(ipc); return NULL; } void *geteventhandleIPC (void *vipc) { struct uaeipc *ipc = (struct uaeipc*)vipc; if (!ipc) return INVALID_HANDLE_VALUE; return ipc->olevent; } int sendIPC (void *vipc, TCHAR *msg) { struct uaeipc *ipc = (struct uaeipc*)vipc; if (ipc->hipc == INVALID_HANDLE_VALUE) return 0; if (ipc->outmessages >= MAX_OUTMESSAGES) return 0; ipc->outmsg[ipc->outmessages++] = my_strdup (msg); if (!ipc->readpending && !ipc->writepending) SetEvent (ipc->olevent); return 1; } int sendBinIPC (void *vipc, uae_u8 *msg, int len) { struct uaeipc *ipc = (struct uaeipc*)vipc; if (ipc->hipc == INVALID_HANDLE_VALUE) return 0; if (ipc->outmessages >= MAX_OUTMESSAGES) return 0; ipc->outbinlen[ipc->outmessages] = len; memcpy (&ipc->outbin[ipc->outmessages++][0], msg, len); if (!ipc->readpending && !ipc->writepending) SetEvent (ipc->olevent); return 1; } int checkIPC (void *vipc, struct uae_prefs *p) { struct uaeipc *ipc = (struct uaeipc*)vipc; BOOL ok; DWORD ret, err; if (!ipc) return 0; if (ipc->hipc == INVALID_HANDLE_VALUE) return 0; if (WaitForSingleObject(ipc->olevent, 0) != WAIT_OBJECT_0) return 0; if (!ipc->readpending && !ipc->writepending && ipc->outmessages > 0) { memset (&ipc->ol, 0, sizeof (OVERLAPPED)); ipc->ol.hEvent = ipc->olevent; if (ipc->binary) { ok = WriteFile (ipc->hipc, &ipc->outbin[ipc->outmessages][0], ipc->outbinlen[ipc->outmessages], &ret, &ipc->ol); } else { ok = WriteFile (ipc->hipc, ipc->outmsg[ipc->outmessages], (_tcslen (ipc->outmsg[ipc->outmessages]) + 1) * sizeof (TCHAR), &ret, &ipc->ol); } xfree (ipc->outmsg[ipc->outmessages--]); err = GetLastError (); if (!ok && err != ERROR_IO_PENDING) { write_log (_T("IPC: WriteFile() err=%d\n"), err); resetIPC (ipc); return 0; } ipc->writepending = TRUE; return 1; } if (ipc->readpending || ipc->writepending) { ok = GetOverlappedResult (ipc->hipc, &ipc->ol, &ret, FALSE); if (!ok) { err = GetLastError (); if (err == ERROR_IO_INCOMPLETE) return 0; write_log (_T("IPC: GetOverlappedResult error %d\n"), err); resetIPC (ipc); return 0; } if (!ipc->connected) { write_log (_T("IPC: Pipe connected\n")); ipc->connected = TRUE; return 0; } if (ipc->writepending) { ipc->writepending = FALSE; SetEvent (ipc->ol.hEvent); memset (&ipc->ol, 0, sizeof (OVERLAPPED)); ipc->ol.hEvent = ipc->olevent; return 0; } } if (!ipc->readpending) { ok = ReadFile (ipc->hipc, ipc->buffer, IPC_BUFFER_SIZE, &ret, &ipc->ol); err = GetLastError (); if (!ok) { if (err == ERROR_IO_PENDING) { ipc->readpending = TRUE; return 0; } else if (err == ERROR_BROKEN_PIPE) { write_log (_T("IPC: IPC client disconnected\n")); } else { write_log (_T("IPC: ReadFile() err=%d\n"), err); } resetIPC (ipc); return 0; } } ipc->readpending = FALSE; if (ipc->binary) { } else { write_log (_T("IPC: got message '%s'\n"), ipc->buffer); parsemessage ((TCHAR*)ipc->buffer, p, (TCHAR*)ipc->outbuf, sizeof ipc->outbuf); memset (&ipc->ol, 0, sizeof (OVERLAPPED)); ipc->ol.hEvent = ipc->olevent; ok = WriteFile (ipc->hipc, ipc->outbuf, strlen ((char*)ipc->outbuf) + 1, &ret, &ipc->ol); err = GetLastError (); if (!ok && err != ERROR_IO_PENDING) { write_log (_T("IPC: WriteFile() err=%d\n"), err); resetIPC (ipc); return 0; } ipc->writepending = TRUE; } return 1; } int isIPC (const TCHAR *pipename) { HANDLE p; p = CreateFile( pipename, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); if (p == INVALID_HANDLE_VALUE) return 0; CloseHandle (p); return 1; } fs-uae-2.2.3+dfsg/src/.gitignore0000644000175000017500000000052712162366654016637 0ustar glaubitzglaubitz*.lib *.old *.dsp *.aps *.opt *.dsw *.dsp *.user *.obj *.pdb *.idb *.res *.pch *.ini release debug fullrelease Release Debug FullRelease singlefilehelper ipctester soundcheck spsutil fdrawcmd resourcedll consolewrapper decompress *.bak *.tlog *.lastbuildstate *.log *.opensdf *.ncb *.sdf *.suo *.db *.exe *.dep *.htm *.orig *.rej aros.rom.cpp fs-uae-2.2.3+dfsg/src/readdisk.cpp0000644000175000017500000001110212162366654017130 0ustar glaubitzglaubitz/* * readdisk * * Read files from Amiga disk files * * Copyright 1996 Bernd Schmidt * Copyright 1998 Jim Cooper */ #include "sysconfig.h" #include "sysdeps.h" #include "uae.h" void write_log (const char *s,...) { fprintf (stderr, "%s", s); } unsigned char filemem[901120]; typedef struct afile { struct afile *sibling; unsigned char *data; uae_u32 size; char name[32]; } afile; typedef struct directory { struct directory *sibling; struct directory *subdirs; struct afile *files; char name[32]; } directory; static int secdatasize, secdataoffset; static uae_u32 readlong (unsigned char *buffer, int pos) { return ((*(buffer + pos) << 24) + (*(buffer + pos + 1) << 16) + (*(buffer + pos + 2) << 8) + *(buffer + pos + 3)); } static afile *read_file (unsigned char *filebuf) { afile *a = (afile *) xmalloc (sizeof (afile)); int sizeleft; unsigned char *datapos; uae_u32 numblocks, blockpos; /* BCPL strings... Yuk. */ memset (a->name, 0, 32); strncpy (a->name, (const char *) filebuf + 0x1B1, *(filebuf + 0x1B0)); sizeleft = a->size = readlong (filebuf, 0x144); a->data = (unsigned char *) xmalloc (a->size); numblocks = readlong (filebuf, 0x8); blockpos = 0x134; datapos = a->data; while (numblocks) { unsigned char *databuf = filemem + 512 * readlong (filebuf, blockpos); int readsize = sizeleft > secdatasize ? secdatasize : sizeleft; memcpy (datapos, databuf + secdataoffset, readsize); datapos += readsize; sizeleft -= readsize; blockpos -= 4; numblocks--; if (!numblocks) { uae_u32 nextflb = readlong (filebuf, 0x1F8); if (nextflb) { filebuf = filemem + 512 * nextflb; blockpos = 0x134; numblocks = readlong (filebuf, 0x8); if (!filebuf) { write_log ("Disk structure corrupted. Use DISKDOCTOR to correct it.\n"); abort (); } } } } return a; } static directory *read_dir (unsigned char *dirbuf) { directory *d = (directory *) xmalloc (sizeof (directory)); uae_u32 hashsize; uae_u32 i; memset (d->name, 0, 32); strncpy (d->name, (const char *) dirbuf + 0x1B1, *(dirbuf + 0x1B0)); d->sibling = 0; d->subdirs = 0; d->files = 0; hashsize = readlong (dirbuf, 0xc); if (!hashsize) hashsize = 72; if (hashsize != 72) write_log ("Warning: Hash table with != 72 entries.\n"); for (i = 0; i < hashsize; i++) { uae_u32 subblock = readlong (dirbuf, 0x18 + 4 * i); while (subblock) { directory *subdir; afile *subfile; unsigned char *subbuf = filemem + 512 * subblock; long dirtype; dirtype = (uae_s32) readlong (subbuf, 0x1FC); if (dirtype > 0) { subdir = read_dir (subbuf); subdir->sibling = d->subdirs; d->subdirs = subdir; } else if (dirtype < 0) { subfile = read_file (subbuf); subfile->sibling = d->files; d->files = subfile; } else { write_log ("Disk structure corrupted. Use DISKDOCTOR to correct it.\n"); abort (); } subblock = readlong (subbuf, 0x1F0); } } return d; } static void writedir (directory * dir) { directory *subdir; afile *f; if (mkdir (dir->name, 0777) < 0 && errno != EEXIST) { write_log ("Could not create directory \"%s\". Giving up.\n", dir->name); exit (20); } if (chdir (dir->name) < 0) { write_log ("Could not enter directory \"%s\". Giving up.\n", dir->name); exit (20); } for (subdir = dir->subdirs; subdir; subdir = subdir->sibling) writedir (subdir); for (f = dir->files; f; f = f->sibling) { int fd = creat (f->name, 0666); if (fd < 0) { write_log ("Could not create file. Giving up.\n"); exit (20); } write (fd, f->data, f->size); close (fd); } chdir (".."); } int main (int argc, char **argv) { directory *root; FILE *inf; if (argc < 2 || argc > 3) { write_log ("Usage: readdisk []\n"); exit (20); } inf = fopen (argv[1], "rb"); if (inf == NULL) { write_log ("can't open file\n"); exit (20); } fread (filemem, 1, 901120, inf); if (strncmp ((const char *) filemem, "DOS\0", 4) == 0 || strncmp ((const char *) filemem, "DOS\2", 4) == 0) { secdatasize = 488; secdataoffset = 24; } else if (strncmp ((const char *) filemem, "DOS\1", 4) == 0 || strncmp ((const char *) filemem, "DOS\3", 4) == 0) { secdatasize = 512; secdataoffset = 0; } else { write_log ("Not a DOS disk.\n"); exit (20); } root = read_dir (filemem + 880 * 512); if (argc == 3) if (chdir (argv[2]) < 0) { write_log ("Couldn't change to %s. Giving up.\n", argv[2]); exit (20); } writedir (root); return 0; } fs-uae-2.2.3+dfsg/src/sinctable.cpp0000644000175000017500000014371712162366655017331 0ustar glaubitzglaubitz /* * Table generated by contrib/sinc-integral.py. */ /* tables are: a500 off, a500 on, a1200 off, a1200 on, vanilla. */ const int winsinc_integral[5][SINC_QUEUE_MAX_AGE] = { { 131072,131072,131072,131072,131072,131072,131072,131072,131072,131072,131072, 131071,131071,131071,131071,131071,131071,131071,131071,131071,131071,131071,131070, 131070,131070,131070,131070,131069,131069,131069,131069,131068,131068,131067,131067, 131066,131066,131065,131065,131064,131063,131062,131062,131061,131060,131058,131057, 131056,131055,131053,131051,131050,131048,131046,131043,131041,131039,131036,131033, 131030,131027,131023,131019,131016,131011,131007,131002,130997,130992,130986,130980, 130973,130967,130959,130952,130944,130935,130926,130917,130907,130896,130885,130873, 130861,130848,130835,130820,130805,130789,130773,130756,130737,130718,130698,130677, 130655,130633,130609,130584,130557,130530,130502,130472,130441,130408,130375,130339, 130303,130265,130225,130184,130141,130096,130050,130002,129952,129900,129846,129790, 129732,129672,129609,129545,129478,129409,129337,129263,129186,129107,129025,128940, 128852,128762,128669,128572,128473,128370,128264,128155,128043,127927,127807,127684, 127558,127428,127293,127156,127014,126868,126718,126564,126406,126243,126076,125905, 125729,125549,125364,125174,124980,124780,124576,124367,124152,123933,123708,123478, 123243,123002,122756,122505,122247,121985,121716,121442,121162,120876,120584,120286, 119982,119672,119356,119033,118705,118370,118029,117682,117328,116967,116601,116228, 115848,115462,115069,114670,114264,113851,113432,113006,112573,112134,111688,111236, 110777,110311,109838,109359,108874,108381,107882,107377,106865,106346,105821,105290, 104752,104208,103657,103100,102537,101968,101392,100811,100224,99630,99031,98426, 97816,97199,96578,95950,95318,94680,94037,93389,92736,92079,91416,90749,90077,89401, 88721,88037,87348,86656,85960,85260,84557,83851,83141,82429,81713,80995,80274,79551, 78826,78098,77369,76638,75905,75171,74435,73699,72961,72223,71484,70745,70006,69266, 68527,67788,67050,66312,65576,64840,64106,63373,62641,61912,61184,60459,59736,59015, 58297,57582,56871,56162,55457,54755,54058,53364,52674,51989,51308,50632,49960,49294, 48632,47976,47325,46680,46041,45407,44780,44158,43543,42934,42332,41737,41148,40566, 39991,39424,38863,38310,37765,37227,36696,36173,35659,35152,34652,34161,33678,33204, 32737,32279,31828,31387,30953,30528,30112,29704,29304,28913,28530,28155,27790,27432, 27083,26743,26411,26087,25772,25465,25166,24875,24593,24318,24052,23794,23543,23300, 23066,22838,22619,22406,22202,22004,21814,21631,21454,21285,21122,20966,20816,20673, 20536,20404,20279,20160,20046,19938,19835,19738,19645,19558,19475,19396,19322,19253, 19187,19126,19068,19014,18963,18915,18871,18830,18791,18755,18721,18690,18661,18633, 18608,18584,18561,18540,18520,18501,18483,18465,18448,18431,18414,18398,18381,18364, 18347,18329,18310,18291,18270,18249,18226,18203,18177,18150,18122,18092,18060,18026, 17990,17951,17911,17868,17823,17775,17725,17672,17617,17559,17498,17434,17368,17298, 17226,17150,17072,16990,16906,16818,16727,16634,16537,16437,16334,16228,16119,16007, 15892,15774,15653,15529,15403,15273,15141,15006,14868,14728,14585,14440,14293,14143, 13990,13836,13680,13521,13361,13198,13035,12869,12702,12533,12363,12192,12019,11846, 11671,11496,11320,11143,10966,10789,10611,10433,10255,10076,9898,9721,9543,9367,9190, 9015,8840,8666,8493,8322,8151,7982,7814,7648,7484,7321,7160,7002,6845,6690,6537, 6387,6239,6094,5951,5811,5673,5538,5406,5277,5151,5027,4907,4790,4676,4565,4458, 4354,4253,4155,4061,3970,3882,3798,3718,3640,3567,3496,3430,3366,3306,3250,3197, 3147,3100,3057,3018,2981,2948,2918,2892,2868,2847,2830,2815,2804,2795,2789,2786, 2785,2787,2792,2799,2809,2820,2834,2851,2869,2889,2911,2935,2961,2988,3017,3048, 3079,3113,3147,3182,3218,3256,3294,3332,3372,3412,3452,3493,3534,3575,3616,3657, 3698,3739,3780,3820,3860,3899,3937,3975,4012,4048,4083,4118,4151,4183,4213,4243, 4271,4297,4323,4346,4368,4389,4407,4424,4440,4453,4465,4474,4482,4488,4492,4494, 4494,4491,4487,4481,4472,4462,4449,4435,4418,4399,4378,4355,4330,4303,4274,4243, 4210,4176,4139,4100,4060,4017,3973,3927,3880,3831,3780,3728,3674,3619,3562,3504, 3445,3384,3323,3260,3196,3132,3066,2999,2932,2864,2796,2727,2657,2587,2516,2446, 2375,2304,2232,2161,2090,2019,1948,1878,1807,1738,1668,1599,1531,1464,1397,1331, 1266,1201,1138,1076,1015,954,896,838,782,726,673,620,570,520,473,426,382,339,297, 258,220,184,149,116,86,56,29,4,-20,-42,-62,-80,-96,-111,-123,-134,-143,-151,-156, -160,-162,-162,-161,-158,-153,-147,-139,-130,-119,-107,-93,-78,-61,-43,-24,-4,17,40, 64,89,114,141,168,197,226,256,286,318,349,381,414,447,481,514,548,582,616,651,685, 719,753,787,821,854,887,920,953,985,1016,1047,1077,1107,1136,1164,1192,1218,1244, 1269,1293,1316,1338,1359,1379,1398,1416,1433,1449,1463,1477,1489,1500,1509,1518, 1525,1531,1536,1539,1541,1542,1542,1541,1538,1534,1528,1522,1514,1505,1495,1483, 1471,1457,1442,1426,1409,1391,1372,1352,1331,1309,1286,1262,1238,1212,1186,1159, 1131,1102,1073,1044,1013,983,951,919,887,855,822,789,755,722,688,654,620,586,552, 518,484,451,417,384,351,318,285,253,221,190,159,129,99,69,41,12,-15,-42,-68,-93, -118,-142,-165,-187,-209,-229,-249,-268,-285,-302,-318,-333,-347,-361,-373,-384, -394,-403,-412,-419,-425,-430,-435,-438,-440,-442,-442,-442,-440,-438,-435,-431, -426,-420,-413,-405,-397,-388,-378,-367,-356,-344,-331,-318,-304,-289,-274,-258, -242,-225,-208,-191,-173,-154,-136,-117,-97,-78,-58,-38,-18,2,22,43,63,83,104,124, 144,164,184,204,223,243,262,281,299,317,335,352,369,386,402,418,433,448,462,475, 488,501,513,524,535,545,554,563,571,579,586,592,597,602,606,610,612,615,616,617, 617,616,615,613,610,607,603,599,593,588,581,574,567,559,550,541,532,521,511,500, 488,476,464,451,438,424,411,397,382,368,353,338,322,307,291,275,259,243,227,211, 195,179,163,147,130,115,99,83,67,52,37,21,7,-8,-22,-36,-50,-64,-77,-90,-103,-115, -127,-138,-149,-160,-170,-180,-189,-198,-207,-215,-222,-229,-236,-242,-248,-253, -258,-262,-266,-269,-272,-274,-276,-277,-278,-278,-278,-278,-277,-275,-273,-271, -268,-265,-262,-258,-253,-248,-243,-238,-232,-226,-219,-212,-205,-198,-190,-182, -174,-166,-157,-148,-139,-130,-121,-112,-102,-92,-83,-73,-63,-53,-43,-33,-23,-13,-3, 7,17,27,36,46,55,65,74,83,92,101,109,118,126,134,141,149,156,163,170,177,183,189, 194,200,205,210,214,218,222,226,229,232,234,237,239,240,241,242,243,243,244,243, 243,242,241,239,237,235,233,230,227,224,221,217,213,209,205,200,196,191,186,180, 175,169,163,157,151,145,139,132,126,119,113,106,99,92,85,79,72,65,58,51,44,37,31, 24,17,11,4,-2,-9,-15,-21,-27,-33,-39,-44,-50,-55,-60,-65,-70,-74,-79,-83,-87,-91, -95,-98,-102,-105,-108,-110,-113,-115,-117,-119,-121,-122,-123,-124,-125,-126,-126, -126,-126,-126,-126,-125,-124,-123,-122,-121,-119,-118,-116,-114,-112,-110,-107, -105,-102,-99,-96,-93,-90,-86,-83,-80,-76,-72,-69,-65,-61,-57,-53,-49,-45,-41,-37, -33,-29,-25,-21,-17,-13,-8,-4,0,3,7,11,15,19,22,26,30,33,36,40,43,46,49,52,55,57, 60,62,65,67,69,71,73,74,76,78,79,80,81,82,83,84,84,85,85,85,85,85,85,85,85,84,83, 83,82,81,80,79,77,76,75,73,72,70,68,66,64,62,60,58,56,54,52,49,47,45,42,40,37,35, 32,30,27,25,22,20,17,15,12,10,8,5,3,0,-2,-4,-6,-9,-11,-13,-15,-17,-19,-21,-22,-24, -26,-27,-29,-30,-32,-33,-34,-35,-37,-38,-39,-39,-40,-41,-42,-42,-43,-43,-43,-44, -44,-44,-44,-44,-44,-44,-44,-43,-43,-42,-42,-41,-41,-40,-39,-39,-38,-37,-36,-35, -34,-33,-32,-31,-29,-28,-27,-26,-24,-23,-22,-20,-19,-18,-16,-15,-14,-12,-11,-9,-8, -6,-5,-4,-2,-1,0,2,3,4,6,7,8,9,10,12,13,14,15,16,17,18,18,19,20,21,22,22,23,23,24, 24,25,25,26,26,26,27,27,27,27,27,27,27,27,27,27,27,26,26,26,25,25,25,24,24,23,23, 22,22,21,21,20,19,19,18,17,16,16,15,14,13,13,12,11,10,9,9,8,7,6,5,5,4,3,2,2,1,0, -1,-1,-2,-3,-3,-4,-5,-5,-6,-6,-7,-8,-8,-9,-9,-9,-10,-10,-11,-11,-11,-12,-12,-12, -12,-13,-13,-13,-13,-13,-13,-13,-13,-13,-13,-13,-13,-13,-13,-13,-13,-13,-12,-12, -12,-12,-11,-11,-11,-11,-10,-10,-10,-9,-9,-9,-8,-8,-8,-7,-7,-6,-6,-5,-5,-5,-4,-4, -3,-3,-3,-2,-2,-1,-1,-1,0,0,1,1,1,2,2,2,3,3,3,4,4,4,5,5,5,5,6,6,6,6,6,6,7,7,7,7,7, 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,6,6,6,6,6,6,5,5,5,5,5,4,4,4,4,4,3,3,3,3,3, 2,2,2,2,2,1,1,1,1,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-2,-2,-2,-2,-2,-2,-2,-2,-3,-3,-3, -3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3, -3,-3,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0, 0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, }, { 131072,131072,131072,131072,131072,131072,131072,131072,131072,131072,131072, 131072,131071,131071,131071,131071,131071,131071,131071,131071,131071,131071,131071, 131071,131071,131071,131071,131071,131071,131071,131071,131071,131071,131071,131071, 131070,131070,131070,131070,131070,131070,131070,131070,131070,131070,131070,131070, 131070,131070,131070,131070,131070,131070,131070,131070,131070,131070,131069,131069, 131069,131069,131069,131069,131069,131069,131069,131069,131069,131069,131069,131069, 131069,131068,131068,131068,131068,131068,131068,131068,131068,131068,131068,131067, 131067,131067,131067,131067,131067,131067,131066,131066,131066,131066,131066,131065, 131065,131065,131065,131064,131064,131064,131064,131063,131063,131062,131062,131062, 131061,131061,131060,131060,131059,131059,131058,131058,131057,131056,131056,131055, 131054,131053,131052,131052,131051,131050,131049,131048,131046,131045,131044,131043, 131041,131040,131038,131037,131035,131034,131032,131030,131028,131026,131024,131022, 131020,131017,131015,131012,131010,131007,131004,131001,130998,130994,130991,130987, 130984,130980,130976,130972,130968,130963,130959,130954,130949,130944,130938,130933, 130927,130921,130915,130909,130902,130895,130888,130881,130873,130865,130857,130849, 130840,130831,130822,130813,130803,130793,130782,130771,130760,130749,130737,130725, 130712,130699,130685,130672,130657,130643,130628,130612,130596,130580,130563,130545, 130528,130509,130490,130471,130451,130430,130409,130388,130365,130343,130319,130295, 130270,130245,130219,130193,130165,130137,130109,130079,130049,130018,129987,129954, 129921,129887,129853,129817,129781,129744,129706,129667,129627,129587,129545,129503, 129459,129415,129370,129324,129276,129228,129179,129129,129078,129026,128972,128918, 128862,128806,128748,128690,128630,128569,128507,128443,128379,128313,128246,128178, 128109,128038,127966,127893,127819,127743,127667,127588,127509,127428,127346,127262, 127177,127091,127004,126915,126824,126732,126639,126545,126449,126351,126252,126152, 126050,125947,125842,125736,125628,125519,125408,125296,125182,125067,124950,124832, 124712,124591,124468,124344,124218,124090,123961,123830,123698,123564,123429,123292, 123154,123014,122872,122729,122585,122438,122291,122141,121990,121838,121684,121528, 121371,121212,121052,120891,120727,120562,120396,120228,120059,119888,119715,119541, 119366,119189,119011,118831,118649,118467,118282,118097,117909,117721,117531,117339, 117146,116952,116757,116560,116361,116161,115960,115758,115554,115349,115143,114935, 114726,114516,114305,114092,113878,113663,113447,113229,113011,112791,112570,112348, 112124,111900,111675,111448,111220,110992,110762,110531,110300,110067,109833,109598, 109363,109126,108889,108650,108411,108171,107930,107688,107445,107201,106957,106712, 106466,106219,105972,105723,105474,105225,104974,104723,104471,104219,103966,103712, 103458,103203,102948,102692,102435,102178,101920,101662,101403,101144,100885,100624, 100364,100103,99841,99579,99317,99054,98791,98527,98264,97999,97735,97470,97204,96939, 96673,96407,96140,95873,95606,95339,95071,94804,94536,94267,93999,93730,93461,93192, 92923,92653,92383,92114,91844,91573,91303,91033,90762,90491,90220,89949,89678,89407, 89136,88865,88593,88321,88050,87778,87506,87234,86962,86690,86418,86146,85874,85602, 85330,85057,84785,84513,84240,83968,83696,83423,83151,82878,82606,82333,82061,81789, 81516,81244,80971,80699,80427,80154,79882,79610,79337,79065,78793,78521,78249,77977, 77705,77433,77161,76889,76617,76345,76074,75802,75531,75259,74988,74717,74446,74175, 73904,73633,73362,73092,72821,72551,72280,72010,71740,71470,71201,70931,70661,70392, 70123,69854,69585,69317,69048,68780,68512,68244,67976,67709,67441,67174,66907,66641, 66374,66108,65842,65576,65311,65046,64781,64516,64252,63988,63724,63460,63197,62934, 62672,62409,62147,61886,61624,61363,61103,60843,60583,60323,60064,59805,59547,59289, 59031,58774,58517,58261,58005,57749,57494,57239,56985,56731,56478,56225,55973,55721, 55470,55219,54968,54718,54469,54220,53971,53724,53476,53229,52983,52737,52492,52247, 52003,51759,51516,51274,51032,50791,50550,50310,50070,49831,49593,49355,49118,48881, 48645,48410,48175,47941,47707,47474,47242,47010,46779,46549,46319,46090,45861,45633, 45406,45179,44953,44728,44503,44279,44056,43833,43611,43389,43168,42948,42728,42510, 42291,42074,41857,41640,41425,41210,40995,40782,40568,40356,40144,39933,39723,39513, 39304,39095,38887,38680,38473,38267,38062,37857,37653,37449,37247,37044,36843,36642, 36442,36242,36043,35845,35647,35450,35253,35057,34862,34667,34473,34280,34087,33894, 33703,33512,33321,33132,32942,32754,32566,32378,32192,32006,31820,31635,31451,31267, 31084,30901,30719,30538,30357,30177,29997,29818,29640,29462,29285,29108,28932,28756, 28581,28407,28233,28060,27888,27716,27545,27374,27204,27034,26865,26697,26529,26362, 26195,26029,25863,25699,25534,25371,25207,25045,24883,24722,24561,24401,24241,24082, 23924,23766,23609,23453,23297,23142,22987,22833,22679,22526,22374,22222,22071,21921, 21771,21622,21473,21325,21177,21031,20884,20739,20594,20449,20306,20162,20020,19878, 19737,19596,19456,19316,19178,19039,18902,18765,18628,18493,18358,18223,18089,17956, 17823,17691,17560,17429,17299,17169,17040,16912,16784,16657,16531,16405,16280,16155, 16031,15908,15785,15663,15541,15420,15300,15180,15061,14942,14824,14707,14590,14474, 14358,14243,14129,14015,13901,13789,13677,13565,13454,13344,13234,13125,13016,12908, 12801,12694,12588,12482,12377,12272,12168,12064,11961,11859,11757,11655,11554,11454, 11354,11255,11156,11058,10960,10863,10766,10670,10575,10480,10385,10291,10197,10104, 10012,9920,9828,9737,9646,9556,9466,9377,9289,9200,9113,9025,8939,8852,8766,8681, 8596,8512,8428,8344,8261,8178,8096,8014,7933,7852,7772,7692,7612,7533,7455,7376, 7299,7221,7144,7068,6992,6916,6841,6766,6692,6618,6544,6471,6398,6326,6254,6182, 6111,6041,5970,5901,5831,5762,5693,5625,5557,5490,5423,5356,5290,5224,5159,5093, 5029,4965,4901,4837,4774,4711,4649,4587,4525,4464,4404,4343,4283,4224,4164,4105, 4047,3989,3931,3874,3817,3760,3704,3648,3593,3538,3483,3429,3375,3321,3268,3215, 3163,3111,3059,3008,2957,2906,2856,2806,2756,2707,2658,2610,2562,2514,2466,2419, 2373,2326,2280,2235,2189,2144,2100,2056,2012,1968,1925,1882,1839,1797,1755,1714, 1672,1631,1591,1551,1511,1471,1432,1393,1354,1316,1278,1240,1203,1165,1129,1092, 1056,1020,984,949,914,879,845,811,777,743,710,677,644,612,580,548,516,485,454,423, 393,362,332,303,273,244,215,186,158,129,101,74,46,19,-8,-35,-61,-88,-114,-140,-165, -191,-216,-241,-265,-290,-314,-338,-362,-386,-409,-432,-455,-478,-501,-523,-545, -567,-589,-610,-632,-653,-674,-694,-715,-735,-756,-775,-795,-815,-834,-853,-872, -891,-910,-928,-947,-965,-983,-1000,-1018,-1035,-1052,-1069,-1086,-1103,-1119,-1136, -1152,-1168,-1184,-1199,-1215,-1230,-1245,-1260,-1275,-1289,-1304,-1318,-1332,-1346, -1360,-1373,-1387,-1400,-1413,-1426,-1439,-1452,-1464,-1477,-1489,-1501,-1513,-1524, -1536,-1547,-1558,-1570,-1581,-1591,-1602,-1612,-1623,-1633,-1643,-1653,-1663,-1672, -1682,-1691,-1700,-1709,-1718,-1727,-1735,-1744,-1752,-1760,-1768,-1776,-1784,-1792, -1799,-1807,-1814,-1821,-1828,-1835,-1842,-1848,-1855,-1861,-1867,-1873,-1879,-1885, -1891,-1896,-1902,-1907,-1913,-1918,-1923,-1928,-1932,-1937,-1942,-1946,-1950,-1955, -1959,-1963,-1967,-1971,-1974,-1978,-1981,-1985,-1988,-1991,-1994,-1997,-2000,-2003, -2006,-2009,-2011,-2013,-2016,-2018,-2020,-2022,-2024,-2026,-2028,-2030,-2032,-2033, -2035,-2036,-2037,-2039,-2040,-2041,-2042,-2043,-2044,-2045,-2045,-2046,-2047,-2047, -2048,-2048,-2048,-2049,-2049,-2049,-2049,-2049,-2049,-2049,-2049,-2048,-2048,-2048, -2047,-2047,-2046,-2046,-2045,-2044,-2043,-2043,-2042,-2041,-2040,-2039,-2038,-2036, -2035,-2034,-2033,-2031,-2030,-2028,-2027,-2025,-2024,-2022,-2020,-2019,-2017,-2015, -2013,-2011,-2009,-2007,-2005,-2003,-2001,-1998,-1996,-1994,-1992,-1989,-1987,-1984, -1982,-1979,-1977,-1974,-1971,-1969,-1966,-1963,-1960,-1957,-1954,-1952,-1949,-1946, -1942,-1939,-1936,-1933,-1930,-1927,-1923,-1920,-1917,-1913,-1910,-1906,-1903,-1899, -1896,-1892,-1889,-1885,-1881,-1878,-1874,-1870,-1866,-1863,-1859,-1855,-1851,-1847, -1843,-1839,-1835,-1831,-1827,-1823,-1819,-1814,-1810,-1806,-1802,-1798,-1793,-1789, -1785,-1780,-1776,-1771,-1767,-1763,-1758,-1754,-1749,-1745,-1740,-1736,-1731,-1726, -1722,-1717,-1713,-1708,-1703,-1698,-1694,-1689,-1684,-1680,-1675,-1670,-1665,-1660, -1656,-1651,-1646,-1641,-1636,-1631,-1626,-1622,-1617,-1612,-1607,-1602,-1597,-1592, -1587,-1582,-1577,-1572,-1567,-1562,-1557,-1552,-1547,-1542,-1537,-1532,-1527,-1522, -1517,-1512,-1507,-1502,-1497,-1492,-1487,-1482,-1477,-1471,-1466,-1461,-1456,-1451, -1446,-1441,-1436,-1431,-1426,-1421,-1416,-1411,-1406,-1401,-1395,-1390,-1385,-1380, -1375,-1370,-1365,-1360,-1355,-1350,-1345,-1340,-1335,-1330,-1325,-1320,-1315,-1310, -1305,-1300,-1295,-1290,-1285,-1280,-1275,-1270,-1265,-1260,-1255,-1250,-1245,-1240, -1235,-1230,-1225,-1220,-1215,-1210,-1205,-1200,-1195,-1190,-1185,-1180,-1175,-1171, -1166,-1161,-1156,-1151,-1146,-1141,-1136,-1131,-1127,-1122,-1117,-1112,-1107,-1102, -1098,-1093,-1088,-1083,-1078,-1074,-1069,-1064,-1059,-1055,-1050,-1045,-1040,-1036, -1031,-1026,-1022,-1017,-1012,-1007,-1003,-998,-994,-989,-984,-980,-975,-970,-966, -961,-957,-952,-948,-943,-938,-934,-929,-925,-920,-916,-911,-907,-902,-898,-894, -889,-885,-880,-876,-872,-867,-863,-858,-854,-850,-845,-841,-837,-833,-828,-824, -820,-816,-811,-807,-803,-799,-795,-790,-786,-782,-778,-774,-770,-766,-762,-757, -753,-749,-745,-741,-737,-733,-729,-725,-721,-717,-714,-710,-706,-702,-698,-694, -690,-686,-683,-679,-675,-671,-667,-664,-660,-656,-652,-649,-645,-641,-638,-634, -630,-627,-623,-620,-616,-612,-609,-605,-602,-598,-595,-591,-588,-584,-581,-577, -574,-571,-567,-564,-560,-557,-554,-550,-547,-544,-540,-537,-534,-530,-527,-524, -521,-518,-514,-511,-508,-505,-502,-499,-495,-492,-489,-486,-483,-480,-477,-474, -471,-468,-465,-462,-459,-456,-453,-450,-447,-444,-441,-438,-435,-433,-430,-427, -424,-421,-418,-416,-413,-410,-407,-405,-402,-399,-396,-394,-391,-388,-386,-383, -380,-378,-375,-373,-370,-367,-365,-362,-360,-357,-355,-352,-350,-347,-345,-342, -340,-337,-335,-333,-330,-328,-325,-323,-321,-318,-316,-314,-311,-309,-307,-305, -302,-300,-298,-296,-293,-291,-289,-287,-285,-282,-280,-278,-276,-274,-272,-270, -268,-266,-264,-261,-259,-257,-255,-253,-251,-249,-247,-246,-244,-242,-240,-238, -236,-234,-232,-230,-228,-227,-225,-223,-221,-219,-217,-216,-214,-212,-210,-209, -207,-205,-203,-202,-200,-198,-197,-195,-193,-192,-190,-188,-187,-185,-184,-182, -180,-179,-177,-176,-174,-173,-171,-170,-168,-167,-165,-164,-162,-161,-159,-158, -156,-155,-154,-152,-151,-149,-148,-147,-145,-144,-143,-141,-140,-139,-137,-136, -135,-133,-132,-131,-130,-128,-127,-126,-125,-123,-122,-121,-120,-119,-117,-116, -115,-114,-113,-112,-111,-109,-108,-107,-106,-105,-104,-103,-102,-101,-100,-99,-98, -97,-96,-95,-94,-93,-92,-91,-90,-89,-88,-87,-86,-85,-84,-83,-82,-81,-80,-79,-78, -78,-77,-76,-75,-74,-73,-72,-71,-71,-70,-69,-68,-67,-67,-66,-65,-64,-63,-63,-62, -61,-60,-60,-59,-58,-58,-57,-56,-55,-55,-54,-53,-53,-52,-51,-51,-50,-49,-49,-48, -47,-47,-46,-45,-45,-44,-44,-43,-42,-42,-41,-41,-40,-40,-39,-38,-38,-37,-37,-36, -36,-35,-35,-34,-34,-33,-33,-32,-32,-31,-31,-30,-30,-29,-29,-28,-28,-28,-27,-27, -26,-26,-25,-25,-25,-24,-24,-23,-23,-23,-22,-22,-21,-21,-21,-20,-20,-20,-19,-19, -19,-18,-18,-17,-17,-17,-17,-16,-16,-16,-15,-15,-15,-14,-14,-14,-13,-13,-13,-13, -12,-12,-12,-12,-11,-11,-11,-11,-10,-10,-10,-10,-9,-9,-9,-9,-9,-8,-8,-8,-8,-7,-7, -7,-7,-7,-7,-6,-6,-6,-6,-6,-5,-5,-5,-5,-5,-5,-5,-4,-4,-4,-4,-4,-4,-4,-3,-3,-3,-3, -3,-3,-3,-3,-3,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, }, { 131072,131072,131072,131072,131072,131072,131072,131072,131072,131072,131072, 131072,131072,131072,131071,131071,131071,131071,131071,131071,131070,131070,131070, 131070,131069,131069,131069,131068,131068,131067,131066,131066,131065,131064,131063, 131062,131061,131059,131058,131056,131055,131053,131051,131049,131046,131044,131041, 131038,131035,131031,131028,131024,131019,131015,131010,131004,130998,130992,130986, 130979,130971,130963,130955,130945,130936,130925,130914,130903,130890,130877,130863, 130849,130833,130816,130799,130781,130761,130740,130719,130696,130672,130646,130619, 130591,130562,130531,130498,130463,130427,130390,130350,130308,130265,130219,130172, 130122,130069,130015,129958,129898,129836,129772,129704,129633,129560,129483,129404, 129321,129235,129145,129051,128954,128854,128749,128640,128527,128410,128289,128163, 128033,127898,127758,127613,127463,127308,127147,126982,126810,126633,126450,126261, 126066,125864,125657,125443,125222,124994,124759,124518,124269,124013,123749,123478, 123199,122912,122617,122314,122003,121683,121355,121017,120672,120317,119953,119579, 119197,118805,118403,117992,117570,117139,116698,116246,115784,115312,114829,114336, 113831,113316,112790,112253,111705,111145,110575,109992,109399,108794,108177,107549, 106909,106257,105594,104918,104231,103532,102821,102098,101363,100616,99858,99087, 98304,97510,96703,95885,95054,94212,93358,92493,91616,90727,89827,88915,87992,87058, 86113,85157,84190,83212,82224,81225,80216,79196,78167,77128,76079,75021,73953,72877, 71792,70698,69596,68485,67367,66241,65108,63967,62820,61666,60506,59339,58168,56990, 55808,54621,53429,52234,51034,49832,48626,47417,46206,44994,43779,42563,41347,40130, 38913,37696,36480,35265,34052,32841,31632,30426,29223,28023,26828,25637,24451,23270, 22095,20926,19764,18609,17461,16321,15190,14067,12953,11849,10755,9671,8598,7537, 6487,5449,4423,3410,2411,1425,453,-504,-1447,-2375,-3287,-4184,-5064,-5928,-6775, -7605,-8417,-9212,-9989,-10747,-11487,-12208,-12910,-13592,-14255,-14898,-15521, -16124,-16706,-17268,-17809,-18329,-18829,-19306,-19763,-20198,-20612,-21004,-21374, -21723,-22050,-22355,-22639,-22900,-23140,-23358,-23555,-23729,-23883,-24014,-24124, -24213,-24281,-24328,-24353,-24359,-24343,-24307,-24251,-24175,-24079,-23964,-23830, -23677,-23505,-23314,-23106,-22879,-22636,-22375,-22097,-21804,-21494,-21168,-20827, -20472,-20102,-19718,-19320,-18909,-18486,-18050,-17603,-17144,-16674,-16194,-15705, -15205,-14697,-14181,-13657,-13125,-12587,-12042,-11491,-10936,-10375,-9810,-9242, -8670,-8096,-7520,-6942,-6363,-5783,-5204,-4625,-4047,-3471,-2897,-2325,-1756,-1191, -630,-74,477,1023,1563,2096,2623,3142,3654,4157,4652,5138,5614,6081,6537,6983,7418, 7842,8255,8655,9044,9420,9783,10134,10471,10795,11105,11401,11684,11952,12205,12444, 12669,12878,13073,13252,13417,13567,13701,13820,13924,14012,14086,14144,14187,14215, 14228,14226,14209,14178,14132,14071,13996,13907,13805,13688,13558,13415,13259,13089, 12908,12714,12508,12290,12061,11821,11570,11309,11038,10756,10466,10166,9858,9542, 9218,8886,8547,8201,7850,7492,7129,6761,6388,6011,5631,5247,4860,4471,4080,3687, 3294,2899,2504,2110,1716,1323,931,541,154,-231,-613,-991,-1365,-1736,-2101,-2462, -2817,-3166,-3510,-3847,-4177,-4500,-4816,-5124,-5424,-5716,-5999,-6273,-6539,-6795, -7042,-7279,-7506,-7722,-7929,-8125,-8310,-8485,-8649,-8802,-8943,-9074,-9193,-9300, -9397,-9481,-9555,-9617,-9667,-9706,-9733,-9749,-9754,-9748,-9730,-9701,-9661,-9610, -9548,-9476,-9393,-9300,-9196,-9083,-8960,-8827,-8685,-8534,-8373,-8204,-8027,-7842, -7648,-7447,-7238,-7023,-6801,-6572,-6337,-6096,-5849,-5598,-5341,-5080,-4815,-4545, -4273,-3997,-3718,-3436,-3153,-2867,-2581,-2293,-2004,-1715,-1425,-1136,-848,-560, -274,11,293,574,852,1127,1399,1667,1932,2192,2448,2699,2946,3187,3423,3653,3877, 4095,4306,4511,4709,4900,5084,5261,5430,5591,5744,5889,6026,6155,6276,6388,6492, 6587,6673,6750,6819,6879,6931,6973,7007,7031,7047,7055,7053,7043,7024,6997,6962, 6918,6866,6805,6737,6661,6577,6486,6387,6281,6168,6048,5922,5789,5650,5504,5353, 5196,5034,4866,4694,4517,4336,4150,3960,3767,3571,3371,3168,2963,2755,2546,2334, 2122,1907,1692,1477,1261,1044,828,612,397,183,-30,-241,-451,-659,-864,-1067,-1268, -1465,-1659,-1850,-2037,-2221,-2400,-2575,-2746,-2912,-3073,-3230,-3381,-3527,-3667, -3802,-3931,-4054,-4172,-4283,-4388,-4487,-4579,-4665,-4745,-4818,-4884,-4944,-4997, -5043,-5082,-5115,-5141,-5160,-5173,-5179,-5178,-5171,-5157,-5136,-5110,-5076,-5037, -4991,-4940,-4882,-4819,-4749,-4675,-4594,-4509,-4418,-4322,-4221,-4116,-4006,-3891, -3772,-3650,-3523,-3393,-3259,-3123,-2983,-2840,-2694,-2546,-2396,-2244,-2090,-1934, -1777,-1619,-1459,-1299,-1139,-978,-817,-655,-495,-334,-175,-16,141,298,452,605,757, 906,1053,1197,1339,1478,1615,1748,1878,2004,2127,2247,2362,2474,2582,2685,2785, 2880,2970,3056,3137,3214,3286,3353,3415,3473,3525,3572,3615,3652,3684,3711,3733, 3750,3762,3769,3771,3768,3760,3747,3729,3707,3680,3648,3611,3570,3525,3476,3422, 3364,3302,3236,3166,3093,3016,2936,2852,2766,2676,2583,2488,2390,2290,2187,2082, 1976,1867,1757,1645,1532,1418,1303,1187,1070,952,835,717,599,481,363,246,129,13, -102,-216,-329,-440,-550,-659,-766,-871,-974,-1075,-1174,-1270,-1364,-1456,-1544, -1630,-1714,-1794,-1871,-1945,-2016,-2084,-2148,-2209,-2267,-2321,-2372,-2418,-2462, -2502,-2538,-2570,-2599,-2624,-2645,-2662,-2676,-2686,-2693,-2695,-2694,-2690,-2682, -2670,-2655,-2636,-2614,-2589,-2560,-2528,-2493,-2455,-2414,-2370,-2323,-2274,-2221, -2167,-2109,-2050,-1988,-1923,-1857,-1789,-1719,-1647,-1574,-1499,-1422,-1345,-1266, -1186,-1105,-1023,-941,-858,-774,-690,-606,-522,-438,-354,-270,-187,-104,-21,61,142, 222,301,379,456,532,606,679,750,820,888,954,1018,1081,1141,1199,1255,1309,1361, 1410,1457,1502,1544,1584,1621,1655,1687,1717,1743,1768,1789,1808,1824,1838,1849, 1857,1863,1866,1867,1864,1860,1853,1843,1831,1816,1800,1780,1759,1735,1709,1681, 1651,1619,1585,1549,1511,1472,1431,1388,1344,1298,1251,1202,1153,1102,1050,997,943, 889,833,778,721,664,607,549,491,433,375,317,259,201,143,86,29,-27,-83,-138,-193, -246,-299,-351,-402,-452,-501,-548,-595,-640,-684,-726,-767,-807,-845,-882,-917, -950,-982,-1012,-1040,-1067,-1091,-1115,-1136,-1155,-1173,-1189,-1203,-1215,-1226, -1235,-1241,-1246,-1250,-1251,-1251,-1249,-1245,-1239,-1232,-1223,-1213,-1201,-1187, -1172,-1155,-1137,-1117,-1096,-1074,-1051,-1026,-1000,-973,-944,-915,-885,-854,-822, -789,-755,-720,-685,-650,-613,-577,-539,-502,-464,-426,-387,-349,-310,-272,-233, -194,-156,-118,-80,-42,-4,33,69,105,141,176,210,244,277,309,341,372,401,430,458,485, 512,537,561,584,606,626,646,665,682,698,713,727,740,751,762,771,778,785,791,795, 798,800,801,800,799,796,792,787,781,774,766,757,747,736,724,711,697,682,667,650, 633,616,597,578,558,538,517,496,474,452,429,406,382,359,335,311,286,262,237,213, 188,163,139,114,90,65,41,17,-6,-30,-53,-75,-98,-120,-141,-162,-183,-203,-222,-241, -260,-277,-295,-311,-327,-342,-357,-371,-384,-396,-408,-419,-429,-439,-448,-456, -463,-469,-475,-480,-484,-488,-490,-492,-493,-494,-493,-492,-491,-488,-485,-481, -477,-472,-466,-460,-453,-445,-437,-428,-419,-410,-399,-389,-378,-366,-354,-342, -329,-316,-303,-290,-276,-262,-248,-233,-218,-204,-189,-174,-159,-144,-129,-114,-99, -84,-69,-54,-39,-24,-10,4,18,32,46,59,73,85,98,110,122,134,145,156,167,177,186,196, 205,213,221,229,236,243,249,255,260,265,269,273,277,280,282,284,286,287,288,288, 288,287,286,285,283,281,278,275,272,268,264,259,254,249,244,238,232,225,219,212, 205,198,190,182,175,167,158,150,142,133,125,116,107,98,90,81,72,63,54,46,37,28,20, 11,3,-5,-13,-21,-29,-37,-45,-52,-59,-66,-73,-79,-86,-92,-98,-104,-109,-114,-119, -124,-128,-132,-136,-140,-143,-146,-149,-152,-154,-156,-158,-159,-160,-161,-162, -162,-163,-162,-162,-161,-161,-159,-158,-157,-155,-153,-151,-148,-146,-143,-140, -137,-133,-130,-126,-122,-118,-114,-110,-106,-101,-97,-92,-88,-83,-78,-73,-68,-64, -59,-54,-49,-44,-39,-34,-29,-24,-19,-14,-9,-5,0,5,9,14,18,22,26,30,34,38,42,45,49, 52,55,58,61,64,67,69,72,74,76,78,79,81,82,84,85,86,86,87,88,88,88,88,88,88,88,87, 87,86,85,84,83,82,80,79,77,75,74,72,70,68,66,64,61,59,57,54,52,49,47,44,42,39,36, 34,31,28,25,23,20,17,15,12,9,7,4,2,-1,-3,-6,-8,-10,-12,-15,-17,-19,-21,-23,-25, -26,-28,-30,-31,-33,-34,-36,-37,-38,-39,-40,-41,-42,-43,-43,-44,-45,-45,-45,-46, -46,-46,-46,-46,-46,-46,-45,-45,-45,-44,-44,-43,-42,-42,-41,-40,-39,-38,-37,-36, -35,-34,-33,-32,-30,-29,-28,-27,-25,-24,-23,-21,-20,-18,-17,-16,-14,-13,-11,-10,-9, -7,-6,-5,-3,-2,-1,1,2,3,4,5,7,8,9,10,11,12,13,14,14,15,16,17,17,18,19,19,20,20,21, 21,21,22,22,22,22,22,23,23,23,23,23,22,22,22,22,22,21,21,21,20,20,20,19,19,18,18, 17,16,16,15,15,14,13,13,12,11,11,10,9,9,8,7,7,6,5,5,4,3,3,2,1,1,0,-1,-1,-2,-2,-3, -3,-4,-4,-5,-5,-6,-6,-7,-7,-7,-8,-8,-8,-9,-9,-9,-9,-10,-10,-10,-10,-10,-10,-10, -10,-11,-11,-11,-11,-10,-10,-10,-10,-10,-10,-10,-10,-10,-9,-9,-9,-9,-8,-8,-8,-8,-7, -7,-7,-7,-6,-6,-6,-5,-5,-5,-4,-4,-4,-3,-3,-3,-2,-2,-2,-2,-1,-1,-1,0,0,0,0,1,1,1,2, 2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4, 4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2, -2,-2,-2,-2,-2,-2,-2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, }, { 131072,131072,131072,131072,131072,131072,131072,131072,131072,131072,131072, 131072,131072,131072,131072,131072,131072,131072,131072,131072,131072,131072,131072, 131072,131072,131072,131072,131072,131072,131072,131071,131071,131071,131071,131071, 131071,131071,131071,131071,131071,131071,131071,131071,131071,131071,131071,131071, 131071,131071,131071,131071,131071,131071,131071,131071,131071,131071,131071,131071, 131071,131071,131071,131071,131071,131070,131070,131070,131070,131070,131070,131070, 131070,131070,131070,131070,131069,131069,131069,131069,131069,131069,131068,131068, 131068,131068,131068,131067,131067,131067,131066,131066,131066,131065,131065,131064, 131064,131064,131063,131062,131062,131061,131061,131060,131059,131058,131058,131057, 131056,131055,131054,131053,131052,131051,131049,131048,131047,131045,131044,131042, 131040,131039,131037,131035,131033,131031,131028,131026,131024,131021,131018,131015, 131012,131009,131006,131003,130999,130995,130991,130987,130983,130978,130974,130969, 130964,130959,130953,130947,130941,130935,130929,130922,130915,130908,130900,130892, 130884,130876,130867,130858,130848,130838,130828,130817,130806,130795,130783,130771, 130758,130745,130731,130717,130702,130687,130671,130655,130638,130621,130603,130585, 130566,130546,130526,130505,130483,130461,130437,130414,130389,130364,130338,130311, 130283,130255,130225,130195,130164,130132,130099,130065,130031,129995,129958,129920, 129881,129841,129800,129758,129715,129671,129625,129578,129531,129481,129431,129379, 129326,129272,129216,129159,129101,129041,128980,128918,128853,128788,128721,128652, 128582,128510,128437,128362,128285,128206,128126,128045,127961,127876,127789,127700, 127609,127517,127422,127326,127228,127128,127026,126922,126816,126708,126598,126486, 126371,126255,126137,126016,125894,125769,125642,125513,125382,125248,125112,124974, 124834,124691,124546,124399,124250,124098,123944,123787,123628,123467,123303,123137, 122969,122798,122625,122449,122271,122090,121907,121722,121534,121343,121150,120955, 120757,120557,120354,120149,119941,119731,119519,119304,119086,118866,118644,118419, 118192,117962,117730,117495,117258,117019,116777,116533,116287,116038,115787,115533, 115277,115019,114759,114496,114232,113965,113695,113424,113150,112874,112597,112317, 112035,111750,111464,111176,110886,110594,110300,110004,109706,109406,109105,108801, 108496,108189,107881,107571,107259,106945,106630,106313,105995,105675,105354,105032, 104708,104382,104056,103728,103398,103068,102736,102403,102070,101735,101398,101061, 100723,100384,100044,99704,99362,99020,98676,98333,97988,97643,97297,96950,96603, 96256,95908,95559,95211,94861,94512,94162,93812,93461,93111,92760,92409,92058,91707, 91356,91005,90654,90303,89952,89601,89250,88899,88549,88199,87849,87499,87150,86801, 86452,86104,85756,85408,85061,84715,84369,84023,83678,83334,82990,82646,82304,81962, 81620,81279,80939,80600,80261,79923,79586,79249,78914,78579,78244,77911,77578,77247, 76916,76585,76256,75927,75600,75273,74947,74622,74297,73974,73651,73329,73008,72688, 72369,72051,71733,71417,71101,70786,70472,70159,69847,69535,69225,68915,68606,68298, 67990,67684,67378,67073,66769,66466,66163,65861,65560,65260,64960,64661,64363,64066, 63769,63473,63178,62884,62590,62296,62004,61712,61421,61130,60840,60550,60262,59973, 59686,59399,59112,58826,58541,58256,57972,57688,57405,57122,56840,56558,56277,55996, 55715,55436,55156,54877,54599,54321,54043,53766,53490,53213,52938,52662,52387,52113, 51839,51565,51292,51019,50747,50475,50203,49932,49661,49391,49121,48852,48583,48314, 48046,47778,47511,47244,46978,46712,46446,46181,45917,45653,45389,45126,44864,44601, 44340,44079,43818,43558,43299,43040,42782,42524,42267,42010,41754,41499,41244,40990, 40737,40484,40232,39980,39729,39479,39230,38981,38733,38486,38239,37994,37749,37504, 37261,37018,36777,36536,36296,36056,35818,35580,35343,35108,34873,34639,34405,34173, 33942,33712,33482,33254,33026,32800,32574,32349,32126,31903,31682,31461,31242,31023, 30806,30589,30374,30160,29946,29734,29523,29313,29104,28896,28689,28483,28278,28074, 27872,27670,27470,27270,27072,26875,26678,26483,26289,26096,25904,25713,25524,25335, 25147,24961,24775,24591,24407,24225,24043,23863,23684,23505,23328,23152,22976,22802, 22628,22456,22285,22114,21945,21776,21608,21442,21276,21111,20947,20784,20622,20460, 20300,20140,19981,19823,19666,19510,19355,19200,19046,18893,18741,18589,18438,18288, 18139,17990,17843,17696,17549,17403,17258,17114,16970,16827,16685,16543,16402,16262, 16122,15983,15845,15707,15569,15433,15296,15161,15026,14891,14758,14624,14492,14359, 14228,14097,13966,13836,13707,13578,13449,13321,13194,13067,12941,12815,12689,12565, 12440,12317,12193,12071,11948,11826,11705,11584,11464,11344,11225,11107,10988,10871, 10753,10637,10521,10405,10290,10175,10061,9948,9835,9722,9610,9499,9388,9278,9168, 9059,8950,8842,8735,8628,8522,8416,8311,8206,8102,7998,7896,7793,7692,7591,7490, 7390,7291,7192,7094,6997,6900,6804,6709,6614,6520,6426,6333,6241,6149,6058,5968, 5878,5789,5700,5613,5526,5439,5353,5268,5184,5100,5017,4935,4853,4772,4691,4611, 4532,4454,4376,4299,4222,4146,4071,3997,3923,3849,3777,3705,3634,3563,3493,3423, 3354,3286,3219,3152,3085,3020,2954,2890,2826,2762,2700,2637,2576,2515,2454,2394, 2335,2276,2218,2160,2102,2046,1989,1934,1878,1824,1769,1716,1662,1610,1557,1505, 1454,1403,1352,1302,1253,1203,1155,1106,1058,1011,963,917,870,824,778,733,688,643, 599,555,512,468,425,383,341,299,257,216,175,134,93,53,13,-26,-65,-105,-143,-182, -220,-258,-296,-333,-370,-407,-444,-480,-516,-552,-588,-623,-659,-694,-728,-763, -797,-831,-865,-898,-932,-965,-997,-1030,-1062,-1094,-1126,-1158,-1189,-1220,-1251, -1282,-1312,-1343,-1373,-1402,-1432,-1461,-1490,-1519,-1547,-1575,-1603,-1631,-1659, -1686,-1713,-1739,-1766,-1792,-1818,-1844,-1869,-1894,-1919,-1944,-1968,-1992,-2016, -2039,-2063,-2086,-2108,-2131,-2153,-2175,-2196,-2218,-2239,-2259,-2280,-2300,-2320, -2339,-2359,-2378,-2396,-2415,-2433,-2451,-2469,-2486,-2503,-2520,-2536,-2552,-2568, -2584,-2599,-2614,-2629,-2644,-2658,-2672,-2686,-2699,-2712,-2725,-2738,-2750,-2762, -2774,-2786,-2797,-2808,-2819,-2829,-2840,-2850,-2860,-2869,-2878,-2888,-2896,-2905, -2914,-2922,-2930,-2938,-2945,-2953,-2960,-2967,-2973,-2980,-2986,-2992,-2998,-3004, -3010,-3015,-3020,-3026,-3030,-3035,-3040,-3044,-3048,-3053,-3057,-3060,-3064,-3068, -3071,-3074,-3077,-3080,-3083,-3086,-3089,-3091,-3094,-3096,-3098,-3100,-3102,-3104, -3106,-3108,-3109,-3111,-3112,-3113,-3115,-3116,-3117,-3118,-3119,-3120,-3120,-3121, -3122,-3122,-3123,-3123,-3123,-3124,-3124,-3124,-3124,-3124,-3124,-3124,-3124,-3123, -3123,-3123,-3122,-3122,-3121,-3121,-3120,-3120,-3119,-3118,-3117,-3116,-3115,-3114, -3113,-3112,-3111,-3110,-3108,-3107,-3105,-3104,-3102,-3101,-3099,-3097,-3096,-3094, -3092,-3090,-3088,-3086,-3083,-3081,-3079,-3076,-3074,-3071,-3069,-3066,-3063,-3061, -3058,-3055,-3052,-3049,-3045,-3042,-3039,-3035,-3032,-3028,-3025,-3021,-3017,-3013, -3010,-3005,-3001,-2997,-2993,-2989,-2984,-2980,-2975,-2971,-2966,-2961,-2956,-2951, -2946,-2941,-2936,-2931,-2925,-2920,-2915,-2909,-2903,-2898,-2892,-2886,-2880,-2874, -2868,-2862,-2856,-2850,-2843,-2837,-2830,-2824,-2817,-2811,-2804,-2797,-2791,-2784, -2777,-2770,-2763,-2756,-2749,-2742,-2734,-2727,-2720,-2713,-2705,-2698,-2690,-2683, -2675,-2668,-2660,-2653,-2645,-2637,-2630,-2622,-2614,-2606,-2599,-2591,-2583,-2575, -2567,-2559,-2551,-2544,-2536,-2528,-2520,-2512,-2504,-2496,-2488,-2480,-2472,-2464, -2456,-2448,-2440,-2432,-2424,-2416,-2408,-2400,-2392,-2384,-2376,-2368,-2360,-2352, -2344,-2336,-2328,-2321,-2313,-2305,-2297,-2289,-2281,-2273,-2266,-2258,-2250,-2242, -2234,-2227,-2219,-2211,-2203,-2196,-2188,-2180,-2172,-2165,-2157,-2149,-2142,-2134, -2127,-2119,-2111,-2104,-2096,-2089,-2081,-2074,-2066,-2059,-2051,-2044,-2036,-2029, -2021,-2014,-2006,-1999,-1991,-1984,-1976,-1969,-1962,-1954,-1947,-1939,-1932,-1925, -1917,-1910,-1902,-1895,-1888,-1880,-1873,-1865,-1858,-1851,-1843,-1836,-1829,-1821, -1814,-1806,-1799,-1792,-1784,-1777,-1770,-1762,-1755,-1747,-1740,-1733,-1725,-1718, -1711,-1703,-1696,-1689,-1681,-1674,-1667,-1659,-1652,-1644,-1637,-1630,-1622,-1615, -1608,-1600,-1593,-1586,-1578,-1571,-1564,-1556,-1549,-1542,-1535,-1527,-1520,-1513, -1506,-1498,-1491,-1484,-1477,-1469,-1462,-1455,-1448,-1441,-1433,-1426,-1419,-1412, -1405,-1398,-1391,-1384,-1377,-1370,-1363,-1356,-1349,-1342,-1335,-1328,-1321,-1314, -1307,-1300,-1293,-1287,-1280,-1273,-1266,-1260,-1253,-1246,-1240,-1233,-1226,-1220, -1213,-1207,-1200,-1193,-1187,-1181,-1174,-1168,-1161,-1155,-1149,-1142,-1136,-1130, -1123,-1117,-1111,-1105,-1099,-1093,-1087,-1081,-1074,-1068,-1062,-1057,-1051,-1045, -1039,-1033,-1027,-1021,-1015,-1010,-1004,-998,-992,-987,-981,-976,-970,-964,-959, -953,-948,-942,-937,-931,-926,-920,-915,-910,-904,-899,-894,-888,-883,-878,-873, -868,-862,-857,-852,-847,-842,-837,-832,-827,-822,-817,-812,-807,-802,-797,-792, -787,-782,-777,-772,-768,-763,-758,-753,-748,-744,-739,-734,-729,-725,-720,-715, -711,-706,-702,-697,-692,-688,-683,-679,-674,-670,-665,-661,-657,-652,-648,-643, -639,-635,-630,-626,-622,-617,-613,-609,-605,-600,-596,-592,-588,-584,-579,-575, -571,-567,-563,-559,-555,-551,-547,-543,-539,-535,-531,-527,-523,-519,-516,-512, -508,-504,-500,-497,-493,-489,-485,-482,-478,-474,-471,-467,-463,-460,-456,-453, -449,-446,-442,-439,-435,-432,-428,-425,-422,-418,-415,-412,-408,-405,-402,-399, -395,-392,-389,-386,-383,-379,-376,-373,-370,-367,-364,-361,-358,-355,-352,-349, -346,-343,-340,-338,-335,-332,-329,-326,-323,-321,-318,-315,-312,-310,-307,-304, -302,-299,-296,-294,-291,-289,-286,-283,-281,-278,-276,-273,-271,-268,-266,-264, -261,-259,-256,-254,-252,-249,-247,-245,-242,-240,-238,-236,-233,-231,-229,-227, -224,-222,-220,-218,-216,-214,-212,-209,-207,-205,-203,-201,-199,-197,-195,-193, -191,-189,-187,-185,-183,-181,-180,-178,-176,-174,-172,-170,-168,-166,-165,-163, -161,-159,-157,-156,-154,-152,-151,-149,-147,-145,-144,-142,-140,-139,-137,-136, -134,-132,-131,-129,-128,-126,-124,-123,-121,-120,-118,-117,-115,-114,-113,-111, -110,-108,-107,-105,-104,-103,-101,-100,-99,-97,-96,-95,-93,-92,-91,-89,-88,-87,-86, -84,-83,-82,-81,-80,-78,-77,-76,-75,-74,-73,-71,-70,-69,-68,-67,-66,-65,-64,-63, -62,-61,-60,-59,-58,-57,-56,-55,-54,-53,-52,-51,-50,-49,-48,-47,-46,-46,-45,-44, -43,-42,-41,-40,-40,-39,-38,-37,-36,-36,-35,-34,-33,-32,-32,-31,-30,-30,-29,-28, -27,-27,-26,-25,-25,-24,-23,-23,-22,-21,-21,-20,-19,-19,-18,-18,-17,-16,-16,-15, -15,-14,-14,-13,-12,-12,-11,-11,-10,-10,-9,-9,-8,-8,-7,-7,-6,-6,-5,-5,-5,-4,-4,-3, -3,-2,-2,-1,-1,-1,0,0,0,1,1,2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,7,7,7,8,8,8,9,9,9,9, 10,10,10,10,11,11,11,11,11,12,12,12,12,12,13,13,13,13,13,14,14,14,14,14,14,14,15, 15,15,15,15,15,15,16,16,16,16,16,16,16,16,16,16,17,17,17,17,17,17,17,17,17,17,17, 17,17,17,17,17,17,17,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18, 18,18,18,18,18,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,16,16, 16,16,16,16,16,16,16,16,16,16,16,15,15,15,15,15,15,15,15,15,15,14,14,14,14,14,14, 14,14,14,13,13,13,13,13,13,13,13,12,12,12,12,12,12,12,12,11,11,11,11,11,11,11,10, 10,10,10,10,10,10,9,9,9,9,9,9,8,8,8,8,8,8,8,7,7,7,7,7,7,6,6,6,6,6,6,5,5,5,5,5,5,4, 4,4,4,4,4,3,3,3,3,3,2,2,2,2,2,2,1,1,1,1,1,1,0,0,0, }, { 131072,131072,131072,131072,131072,131072,131072,131072,131071,131071,131071, 131071,131071,131070,131070,131070,131069,131069,131068,131068,131067,131066,131066, 131065,131064,131063,131061,131060,131058,131057,131055,131053,131051,131048,131046, 131043,131040,131037,131033,131029,131025,131021,131016,131011,131005,130999,130993, 130986,130978,130970,130962,130953,130943,130933,130922,130910,130897,130884,130870, 130855,130839,130822,130804,130785,130765,130744,130721,130697,130672,130646,130618, 130589,130558,130525,130491,130455,130417,130377,130336,130292,130246,130198,130147, 130095,130039,129982,129921,129858,129792,129723,129651,129576,129497,129416,129330, 129242,129149,129053,128953,128849,128741,128628,128512,128390,128265,128134,127998, 127858,127712,127561,127405,127243,127076,126903,126723,126538,126346,126148,125944, 125733,125515,125290,125058,124818,124572,124317,124055,123785,123508,123222,122927, 122624,122313,121993,121664,121326,120978,120622,120255,119880,119494,119099,118693, 118278,117852,117415,116968,116510,116042,115562,115072,114570,114057,113532,112996, 112448,111889,111317,110734,110139,109532,108912,108280,107636,106980,106311,105630, 104936,104229,103510,102778,102034,101276,100506,99724,98928,98120,97299,96466,95620, 94761,93889,93005,92109,91200,90279,89345,88400,87442,86472,85490,84497,83492,82475, 81447,80408,79358,78297,77225,76142,75050,73947,72834,71712,70580,69439,68289,67130, 65963,64787,63604,62413,61215,60009,58797,57578,56354,55123,53887,52646,51401,50151, 48897,47639,46378,45115,43848,42580,41310,40039,38767,37495,36223,34951,33680,32410, 31142,29877,28614,27354,26098,24846,23598,22355,21118,19887,18662,17444,16233,15030, 13835,12649,11472,10304,9147,8001,6865,5741,4629,3529,2442,1368,308,-738,-1769,-2786, -3787,-4772,-5741,-6693,-7628,-8546,-9447,-10329,-11192,-12037,-12863,-13669,-14455, -15221,-15967,-16692,-17396,-18079,-18741,-19380,-19998,-20593,-21167,-21717,-22245, -22750,-23232,-23690,-24126,-24538,-24926,-25291,-25632,-25949,-26243,-26513,-26759, -26981,-27179,-27354,-27505,-27633,-27737,-27818,-27875,-27910,-27921,-27909,-27875, -27818,-27739,-27638,-27516,-27371,-27206,-27019,-26812,-26584,-26336,-26069,-25782, -25476,-25151,-24808,-24448,-24070,-23674,-23263,-22835,-22391,-21933,-21459,-20972, -20470,-19955,-19428,-18888,-18337,-17775,-17202,-16619,-16027,-15425,-14816,-14199, -13574,-12943,-12306,-11663,-11016,-10364,-9709,-9051,-8390,-7728,-7064,-6400,-5735, -5071,-4408,-3747,-3088,-2432,-1779,-1131,-486,153,786,1413,2034,2647,3253,3850,4439, 5018,5587,6147,6696,7233,7759,8274,8776,9265,9741,10204,10652,11087,11507,11912, 12303,12677,13037,13380,13707,14018,14313,14590,14851,15095,15321,15531,15723,15897, 16055,16194,16316,16420,16507,16577,16628,16663,16679,16679,16661,16627,16575,16507, 16422,16320,16203,16069,15920,15755,15575,15380,15170,14946,14708,14456,14191,13913, 13622,13319,13004,12678,12340,11992,11633,11265,10887,10501,10106,9703,9292,8875, 8451,8021,7585,7145,6699,6250,5797,5341,4883,4422,3960,3497,3033,2570,2106,1644, 1183,724,268,-186,-636,-1082,-1524,-1961,-2393,-2820,-3240,-3654,-4061,-4460,-4852, -5236,-5611,-5977,-6334,-6682,-7019,-7347,-7664,-7970,-8265,-8549,-8822,-9082,-9331, -9567,-9791,-10002,-10200,-10386,-10558,-10718,-10864,-10997,-11116,-11222,-11314, -11393,-11458,-11510,-11548,-11573,-11584,-11582,-11566,-11537,-11496,-11441,-11373, -11293,-11200,-11095,-10978,-10849,-10708,-10556,-10392,-10218,-10032,-9837,-9631, -9415,-9190,-8955,-8712,-8460,-8200,-7931,-7656,-7373,-7083,-6787,-6485,-6177,-5864, -5547,-5224,-4898,-4568,-4235,-3899,-3560,-3220,-2878,-2535,-2191,-1847,-1502,-1158, -816,-474,-134,204,540,872,1202,1528,1849,2167,2480,2788,3091,3388,3678,3963,4241, 4512,4776,5033,5281,5522,5754,5979,6194,6400,6598,6786,6965,7134,7293,7443,7582, 7711,7830,7939,8038,8126,8203,8271,8327,8373,8409,8434,8448,8452,8446,8429,8403, 8366,8319,8262,8195,8119,8033,7938,7834,7721,7599,7469,7330,7183,7028,6865,6695, 6518,6334,6143,5946,5743,5534,5319,5100,4875,4646,4412,4175,3934,3689,3442,3192, 2940,2685,2429,2172,1913,1654,1394,1135,875,616,359,102,-153,-406,-657,-906,-1152, -1394,-1634,-1870,-2101,-2329,-2552,-2771,-2985,-3193,-3396,-3594,-3785,-3971,-4150, -4323,-4490,-4649,-4802,-4947,-5086,-5217,-5340,-5456,-5564,-5665,-5757,-5842,-5919, -5987,-6048,-6101,-6145,-6181,-6209,-6229,-6241,-6245,-6241,-6229,-6210,-6182,-6147, -6104,-6053,-5996,-5930,-5858,-5779,-5693,-5600,-5501,-5395,-5283,-5165,-5041,-4911, -4777,-4637,-4491,-4341,-4187,-4028,-3865,-3699,-3528,-3354,-3177,-2998,-2815,-2630, -2444,-2255,-2064,-1872,-1680,-1486,-1292,-1097,-902,-708,-513,-320,-127,64,254,442, 629,813,995,1174,1351,1525,1695,1862,2026,2185,2341,2493,2640,2783,2921,3054,3183, 3306,3424,3537,3645,3746,3843,3933,4018,4097,4170,4237,4298,4353,4402,4445,4482, 4512,4536,4555,4567,4573,4573,4566,4554,4537,4513,4483,4448,4407,4361,4309,4252, 4190,4122,4050,3973,3891,3805,3714,3619,3520,3417,3310,3200,3086,2969,2849,2726, 2600,2472,2341,2209,2074,1938,1800,1660,1520,1378,1236,1093,950,806,663,520,377,235, 93,-48,-187,-325,-462,-597,-730,-862,-991,-1118,-1242,-1364,-1483,-1599,-1712, -1822,-1929,-2032,-2132,-2228,-2320,-2409,-2494,-2575,-2651,-2724,-2792,-2856,-2916, -2971,-3022,-3069,-3111,-3148,-3181,-3210,-3234,-3253,-3268,-3278,-3284,-3285,-3282, -3275,-3263,-3247,-3227,-3202,-3174,-3141,-3104,-3064,-3019,-2971,-2919,-2864,-2805, -2743,-2678,-2610,-2539,-2464,-2387,-2308,-2226,-2142,-2055,-1966,-1876,-1783,-1689, -1594,-1497,-1399,-1299,-1199,-1098,-996,-894,-791,-689,-586,-483,-380,-278,-176,-75, 26,126,224,322,418,513,606,698,788,877,963,1047,1129,1209,1287,1362,1434,1504, 1572,1637,1698,1757,1814,1867,1917,1964,2008,2049,2086,2121,2152,2180,2205,2227, 2245,2260,2272,2280,2286,2288,2287,2283,2276,2265,2252,2236,2216,2194,2169,2142, 2111,2078,2042,2004,1963,1921,1875,1828,1778,1727,1673,1618,1561,1502,1442,1380, 1317,1253,1187,1120,1053,984,915,846,775,705,633,562,491,419,348,277,206,135,65,-5, -74,-142,-209,-276,-341,-406,-469,-531,-592,-651,-709,-765,-820,-873,-924,-974, -1021,-1067,-1111,-1153,-1193,-1231,-1267,-1301,-1332,-1362,-1389,-1414,-1437,-1457, -1476,-1492,-1505,-1517,-1526,-1534,-1538,-1541,-1542,-1540,-1536,-1530,-1522,-1512, -1500,-1486,-1470,-1452,-1432,-1410,-1387,-1362,-1335,-1306,-1276,-1245,-1212,-1178, -1142,-1105,-1067,-1028,-987,-946,-904,-861,-817,-772,-727,-681,-635,-588,-541,-494, -446,-399,-351,-303,-255,-208,-160,-113,-66,-20,26,72,117,161,205,248,290,331,371, 411,449,486,523,558,592,624,656,686,715,743,769,794,817,839,860,879,897,913,928, 941,953,963,972,979,985,989,992,993,993,992,989,984,979,972,963,954,943,931,917, 903,887,870,852,833,813,792,771,748,724,700,675,649,623,596,568,540,512,483,453, 424,394,363,333,302,272,241,210,180,149,119,88,58,28,-1,-30,-59,-88,-115,-143,-170, -196,-222,-247,-272,-296,-319,-341,-363,-384,-404,-423,-441,-459,-476,-491,-506, -520,-533,-545,-557,-567,-576,-584,-592,-598,-604,-608,-612,-614,-616,-617,-616, -615,-613,-610,-607,-602,-597,-591,-583,-576,-567,-558,-548,-537,-526,-514,-501, -488,-474,-460,-445,-430,-414,-398,-382,-365,-347,-330,-312,-294,-276,-257,-239, -220,-201,-182,-163,-144,-126,-107,-88,-69,-51,-32,-14,4,22,39,56,73,90,106,122,137, 152,167,181,195,208,221,233,245,257,267,277,287,296,305,313,320,327,333,339,344, 348,352,355,358,360,362,363,363,363,362,361,359,357,354,351,347,343,338,333,327, 321,315,308,301,293,285,277,268,259,250,241,231,221,211,201,190,180,169,158,147, 136,125,114,103,91,80,69,58,47,36,25,15,4,-7,-17,-27,-37,-47,-56,-66,-75,-84,-92, -101,-109,-117,-124,-131,-138,-145,-151,-157,-163,-168,-173,-178,-182,-186,-189, -193,-196,-198,-200,-202,-204,-205,-206,-206,-206,-206,-206,-205,-204,-203,-201, -199,-197,-194,-191,-188,-185,-181,-178,-174,-169,-165,-160,-155,-150,-145,-140, -135,-129,-123,-117,-111,-105,-99,-93,-87,-81,-74,-68,-62,-55,-49,-43,-36,-30,-24, -18,-12,-6,0,6,12,18,23,29,34,39,44,49,54,58,63,67,71,75,79,82,86,89,92,95,97,100, 102,104,106,107,109,110,111,112,112,113,113,113,113,113,112,112,111,110,109,107, 106,104,103,101,99,97,94,92,89,87,84,81,78,75,72,69,66,63,60,56,53,50,46,43,39,36, 32,29,25,22,18,15,12,8,5,2,-1,-5,-8,-11,-14,-17,-19,-22,-25,-27,-30,-32,-35,-37, -39,-41,-43,-45,-46,-48,-50,-51,-52,-53,-54,-55,-56,-57,-58,-58,-59,-59,-59,-59, -59,-59,-59,-59,-58,-58,-57,-57,-56,-55,-54,-54,-53,-51,-50,-49,-48,-46,-45,-44, -42,-41,-39,-37,-36,-34,-32,-31,-29,-27,-25,-23,-22,-20,-18,-16,-14,-12,-11,-9,-7, -5,-4,-2,0,1,3,5,6,8,9,11,12,13,15,16,17,18,19,20,21,22,23,24,25,25,26,27,27,28, 28,29,29,29,29,29,30,30,30,30,29,29,29,29,29,28,28,27,27,27,26,25,25,24,24,23,22, 21,21,20,19,18,17,16,16,15,14,13,12,11,10,9,8,7,7,6,5,4,3,2,1,0,0,-1,-2,-3,-3,-4, -5,-6,-6,-7,-7,-8,-9,-9,-10,-10,-11,-11,-11,-12,-12,-12,-13,-13,-13,-13,-14,-14, -14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-14,-13,-13,-13,-13,-13,-12,-12,-12,-11, -11,-11,-10,-10,-10,-9,-9,-9,-8,-8,-7,-7,-6,-6,-6,-5,-5,-4,-4,-3,-3,-3,-2,-2,-1,-1, -1,0,0,1,1,1,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, 6,6,6,6,5,5,5,5,5,5,5,4,4,4,4,4,4,3,3,3,3,3,2,2,2,2,2,2,1,1,1,1,1,0,0,0,0,0,0,-1, -1,-1,-1,-1,-1,-1,-1,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-3,-3,-3,-3,-3,-3, -3,-3,-3,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, }, }; fs-uae-2.2.3+dfsg/src/scsiemul.cpp0000644000175000017500000010335412162366655017202 0ustar glaubitzglaubitz/* * UAE - The Un*x Amiga Emulator * * scsi.device emulation * * Copyright 1995 Bernd Schmidt * Copyright 1999 Patrick Ohly * Copyright 2001 Brian King * Copyright 2002 Toni Wilen * */ #include "sysconfig.h" #include "sysdeps.h" #include "threaddep/thread.h" #include "options.h" #include "uae/memory.h" #include "custom.h" #include "events.h" #include "newcpu.h" #include "autoconf.h" #include "traps.h" #include "execlib.h" #include "native2amiga.h" #include "blkdev.h" #include "scsidev.h" #include "uae.h" #include "execio.h" #define CDDEV_COMMANDS #define UAEDEV_SCSI _T("uaescsi.device") #define UAEDEV_SCSI_ID 1 #define UAEDEV_DISK _T("uaedisk.device") #define UAEDEV_DISK_ID 2 #define MAX_ASYNC_REQUESTS 20 #define MAX_OPEN_DEVICES 20 #define ASYNC_REQUEST_NONE 0 #define ASYNC_REQUEST_TEMP 1 #define ASYNC_REQUEST_CHANGEINT 10 #define ASYNC_REQUEST_FRAMEINT 11 struct devstruct { int unitnum, aunit; int opencnt; int changenum; int drivetype; int iscd; volatile uaecptr d_request[MAX_ASYNC_REQUESTS]; volatile int d_request_type[MAX_ASYNC_REQUESTS]; volatile uae_u32 d_request_data[MAX_ASYNC_REQUESTS]; struct device_info di; uaecptr changeint; int changeint_mediastate; int configblocksize; int volumelevel; int fadeframes; int fadetarget; int fadecounter; smp_comm_pipe requests; int thread_running; uae_sem_t sync_sem; }; struct priv_devstruct { int inuse; int unit; int mode; int type; int flags; /* OpenDevice() */ }; static struct devstruct devst[MAX_TOTAL_SCSI_DEVICES]; static struct priv_devstruct pdevst[MAX_OPEN_DEVICES]; static uae_u32 nscmd_cmd; static uae_sem_t change_sem; static struct device_info *devinfo (struct devstruct *devst, struct device_info *di) { struct device_info *dio = sys_command_info (devst->unitnum, di, 0); if (dio) { if (!devst->configblocksize) devst->configblocksize = dio->bytespersector; } return di; } static void io_log (const TCHAR *msg, uaecptr request) { if (log_scsi) write_log (_T("%s: %08X %d %08X %d %d io_actual=%d io_error=%d\n"), msg, request, get_word (request + 28), get_long (request + 40), get_long (request + 36), get_long (request + 44), get_long (request + 32), get_byte (request + 31)); } static struct devstruct *getdevstruct (int unit) { int i; for (i = 0; i < MAX_TOTAL_SCSI_DEVICES; i++) { if (unit >= 0 && devst[i].aunit == unit) return &devst[i]; } return 0; } static struct priv_devstruct *getpdevstruct (uaecptr request) { int i = get_long (request + 24); if (i < 0 || i >= MAX_OPEN_DEVICES || pdevst[i].inuse == 0) { write_log (_T("uaescsi.device: corrupt iorequest %08X %d\n"), request, i); return 0; } return &pdevst[i]; } static TCHAR *getdevname (int type) { switch (type) { case UAEDEV_SCSI_ID: return UAEDEV_SCSI; case UAEDEV_DISK_ID: return UAEDEV_DISK; default: return _T("NULL"); } } static void *dev_thread (void *devs); static int start_thread (struct devstruct *dev) { if (dev->thread_running) return 1; init_comm_pipe (&dev->requests, 100, 1); uae_sem_init (&dev->sync_sem, 0, 0); uae_start_thread (_T("uaescsi"), dev_thread, dev, NULL); uae_sem_wait (&dev->sync_sem); return dev->thread_running; } static void dev_close_3 (struct devstruct *dev, struct priv_devstruct *pdev) { if (!dev->opencnt) return; dev->opencnt--; if (!dev->opencnt) { sys_command_close (dev->unitnum); pdev->inuse = 0; write_comm_pipe_u32 (&dev->requests, 0, 1); } } static uae_u32 REGPARAM2 dev_close_2 (TrapContext *context) { uae_u32 request = m68k_areg (regs, 1); struct priv_devstruct *pdev = getpdevstruct (request); struct devstruct *dev; if (!pdev) return 0; dev = getdevstruct (pdev->unit); if (log_scsi) write_log (_T("%s:%d close, req=%08X\n"), getdevname (pdev->type), pdev->unit, request); if (!dev) return 0; dev_close_3 (dev, pdev); put_long (request + 24, 0); put_word (m68k_areg (regs, 6) + 32, get_word (m68k_areg (regs, 6) + 32) - 1); return 0; } static uae_u32 REGPARAM2 dev_close (TrapContext *context) { return dev_close_2 (context); } static uae_u32 REGPARAM2 diskdev_close (TrapContext *context) { return dev_close_2 (context); } static int openfail (uaecptr ioreq, int error) { put_long (ioreq + 20, -1); put_byte (ioreq + 31, error); return (uae_u32)-1; } static uae_u32 REGPARAM2 dev_open_2 (TrapContext *context, int type) { uaecptr ioreq = m68k_areg (regs, 1); uae_u32 unit = m68k_dreg (regs, 0); uae_u32 flags = m68k_dreg (regs, 1); struct devstruct *dev = getdevstruct (unit); struct priv_devstruct *pdev = 0; int i; if (log_scsi) write_log (_T("opening %s:%d ioreq=%08X\n"), getdevname (type), unit, ioreq); if (get_word (ioreq + 0x12) < IOSTDREQ_SIZE && get_word (ioreq + 0x12) > 0) return openfail (ioreq, IOERR_BADLENGTH); if (!dev) return openfail (ioreq, 32); /* badunitnum */ if (!dev->opencnt) { for (i = 0; i < MAX_OPEN_DEVICES; i++) { pdev = &pdevst[i]; if (pdev->inuse == 0) break; } if (!sys_command_open (dev->unitnum)) return openfail (ioreq, IOERR_OPENFAIL); pdev->type = type; pdev->unit = unit; pdev->flags = flags; pdev->inuse = 1; put_long (ioreq + 24, pdev - pdevst); start_thread (dev); } else { for (i = 0; i < MAX_OPEN_DEVICES; i++) { pdev = &pdevst[i]; if (pdev->inuse && pdev->unit == unit) break; } if (i == MAX_OPEN_DEVICES) return openfail (ioreq, IOERR_OPENFAIL); put_long (ioreq + 24, pdev - pdevst); } dev->opencnt++; put_word (m68k_areg (regs, 6) + 32, get_word (m68k_areg (regs, 6) + 32) + 1); put_byte (ioreq + 31, 0); put_byte (ioreq + 8, 7); return 0; } static uae_u32 REGPARAM2 dev_open (TrapContext *context) { return dev_open_2 (context, UAEDEV_SCSI_ID); } static uae_u32 REGPARAM2 diskdev_open (TrapContext *context) { return dev_open_2 (context, UAEDEV_DISK_ID); } static uae_u32 REGPARAM2 dev_expunge (TrapContext *context) { return 0; } static uae_u32 REGPARAM2 diskdev_expunge (TrapContext *context) { return 0; } static int is_async_request (struct devstruct *dev, uaecptr request) { int i = 0; while (i < MAX_ASYNC_REQUESTS) { if (dev->d_request[i] == request) return 1; i++; } return 0; } #if 0 static int scsiemul_switchscsi (const TCHAR *name) { struct devstruct *dev = NULL; struct device_info *discsi, discsi2; int i, opened[MAX_TOTAL_SCSI_DEVICES]; bool wasopen = false; for (i = 0; i < MAX_TOTAL_SCSI_DEVICES; i++) opened[i] = sys_command_isopen (i); dev = &devst[0]; if (dev->opencnt) wasopen = true; sys_command_close (dev->unitnum); dev = NULL; if (device_func_init (DEVICE_TYPE_ANY)) { if (devst[0].di.media_inserted < 0) devst[0].di.media_inserted = 0; i = 0; while (i < MAX_TOTAL_SCSI_DEVICES && dev == NULL) { discsi = 0; if (sys_command_open ( i)) { discsi = sys_command_info (i, &discsi2, 0); if (discsi && discsi->type == INQ_ROMD) { if (!_tcsicmp (currprefs.cdimagefile[0], discsi->label)) { dev = &devst[0]; dev->unitnum = i; dev->drivetype = discsi->type; memcpy (&dev->di, discsi, sizeof (struct device_info)); dev->iscd = 1; write_log (_T("%s mounted as uaescsi.device:0\n"), discsi->label); if (dev->di.media_inserted) { dev->di.media_inserted = 0; scsi_do_disk_change (dev->di.id, 1, NULL); } } } if (opened[i] == 0 && !wasopen) sys_command_close ( i); } i++; } if (dev) return dev->unitnum; } return -1; } #endif // pollmode is 1 if no change interrupts found -> increase time of media change int scsi_do_disk_change (int unitnum, int insert, int *pollmode) { int i, j, ret; ret = -1; if (!change_sem) return ret; uae_sem_wait (&change_sem); for (i = 0; i < MAX_TOTAL_SCSI_DEVICES; i++) { struct devstruct *dev = &devst[i]; if (dev->di.unitnum == unitnum + 1) { ret = i; if ((dev->changeint_mediastate > 0 && insert == 0) || (dev->changeint_mediastate <= 0 && insert)) { dev->changeint_mediastate = insert; if (pollmode) *pollmode = 1; if (dev->aunit >= 0) { struct priv_devstruct *pdev = &pdevst[dev->aunit]; devinfo (dev, &dev->di); } dev->changenum++; j = 0; while (j < MAX_ASYNC_REQUESTS) { if (dev->d_request_type[j] == ASYNC_REQUEST_CHANGEINT) { uae_Cause (dev->d_request_data[j]); if (pollmode) *pollmode = 0; } j++; } if (dev->changeint) { uae_Cause (dev->changeint); if (pollmode) *pollmode = 0; } } } } uae_sem_post (&change_sem); return ret; } static int add_async_request (struct devstruct *dev, uaecptr request, int type, uae_u32 data) { int i; if (log_scsi) write_log (_T("async request %08x (%d) added\n"), request, type); i = 0; while (i < MAX_ASYNC_REQUESTS) { if (dev->d_request[i] == request) { dev->d_request_type[i] = type; dev->d_request_data[i] = data; return 0; } i++; } i = 0; while (i < MAX_ASYNC_REQUESTS) { if (dev->d_request[i] == 0) { dev->d_request[i] = request; dev->d_request_type[i] = type; dev->d_request_data[i] = data; return 0; } i++; } return -1; } static int release_async_request (struct devstruct *dev, uaecptr request) { int i = 0; if (log_scsi) write_log (_T("async request %08x removed\n"), request); while (i < MAX_ASYNC_REQUESTS) { if (dev->d_request[i] == request) { int type = dev->d_request_type[i]; dev->d_request[i] = 0; dev->d_request_data[i] = 0; dev->d_request_type[i] = 0; return type; } i++; } return -1; } static void abort_async (struct devstruct *dev, uaecptr request, int errcode, int type) { int i; i = 0; while (i < MAX_ASYNC_REQUESTS) { if (dev->d_request[i] == request && dev->d_request_type[i] == ASYNC_REQUEST_TEMP) { /* ASYNC_REQUEST_TEMP = request is processing */ sleep_millis (10); i = 0; continue; } i++; } i = release_async_request (dev, request); if (i >= 0 && log_scsi) write_log (_T("asyncronous request=%08X aborted, error=%d\n"), request, errcode); } static int command_read (struct devstruct *dev, uaecptr data, uae_u64 offset, uae_u32 length, uae_u32 *io_actual) { int blocksize = dev->di.bytespersector; length /= blocksize; offset /= blocksize; while (length > 0) { uae_u8 buffer[4096]; if (!sys_command_read (dev->unitnum, buffer, offset, 1)) return 20; memcpyha_safe (data, buffer, blocksize); data += blocksize; offset++; length--; } return 0; } static int command_write (struct devstruct *dev, uaecptr data, uae_u64 offset, uae_u32 length, uae_u32 *io_actual) { uae_u32 blocksize = dev->di.bytespersector; length /= blocksize; offset /= blocksize; while (length > 0) { uae_u8 buffer[4096]; int err; memcpyah_safe (buffer, data, blocksize); err = sys_command_write (dev->unitnum, buffer, offset, 1); if (!err) return 20; if (err < 0) return 28; // write protected data += blocksize; offset++; length--; } return 0; } static int command_cd_read (struct devstruct *dev, uaecptr data, uae_u64 offset, uae_u32 length, uae_u32 *io_actual) { uae_u32 len, sector, startoffset; int blocksize; blocksize = dev->configblocksize; *io_actual = 0; startoffset = offset % blocksize; offset -= startoffset; sector = offset / blocksize; while (length > 0) { uae_u8 temp[4096]; if (blocksize != 2048) { if (!sys_command_cd_rawread (dev->unitnum, temp, sector, 1, blocksize)) return 20; } else { if (!sys_command_cd_read (dev->unitnum, temp, sector, 1)) return 20; } if (startoffset > 0) { len = blocksize - startoffset; if (len > length) len = length; memcpyha_safe (data, temp + startoffset, len); length -= len; data += len; startoffset = 0; *io_actual += len; } else if (length >= blocksize) { len = blocksize; memcpyha_safe (data, temp, len); length -= len; data += len; *io_actual += len; } else { memcpyha_safe (data, temp, length); *io_actual += length; length = 0; } sector++; } return 0; } static int dev_do_io (struct devstruct *dev, uaecptr request) { uae_u32 command; uae_u32 io_data = get_long (request + 40); // 0x28 uae_u32 io_length = get_long (request + 36); // 0x24 uae_u32 io_actual = get_long (request + 32); // 0x20 uae_u32 io_offset = get_long (request + 44); // 0x2c uae_u32 io_error = 0; uae_u64 io_offset64; int async = 0; int bmask = dev->di.bytespersector - 1; struct priv_devstruct *pdev = getpdevstruct (request); if (!pdev) return 0; command = get_word (request + 28); if (log_scsi) write_log (_T("%d: DATA=%08X LEN=%08X OFFSET=%08X ACTUAL=%08X\n"), command, io_data, io_length, io_offset, io_actual); switch (command) { case CMD_READ: if (dev->di.media_inserted <= 0) goto no_media; if (dev->drivetype == INQ_ROMD) { io_error = command_cd_read (dev, io_data, io_offset, io_length, &io_actual); } else { if ((io_offset & bmask) || bmask == 0 || io_data == 0) goto bad_command; if ((io_length & bmask) || io_length == 0) goto bad_len; io_error = command_read (dev, io_data, io_offset, io_length, &io_actual); } break; case TD_READ64: case NSCMD_TD_READ64: if (dev->di.media_inserted <= 0) goto no_media; io_offset64 = get_long (request + 44) | ((uae_u64)get_long (request + 32) << 32); if ((io_offset64 & bmask) || bmask == 0 || io_data == 0) goto bad_command; if ((io_length & bmask) || io_length == 0) goto bad_len; if (dev->drivetype == INQ_ROMD) io_error = command_cd_read (dev, io_data, io_offset64, io_length, &io_actual); else io_error = command_read (dev, io_data, io_offset64, io_length, &io_actual); break; case CMD_WRITE: if (dev->di.media_inserted <= 0) goto no_media; if (dev->di.write_protected || dev->drivetype == INQ_ROMD) { io_error = 28; /* writeprotect */ } else if ((io_offset & bmask) || bmask == 0 || io_data == 0) { goto bad_command; } else if ((io_length & bmask) || io_length == 0) { goto bad_len; } else { io_error = command_write (dev, io_data, io_offset, io_length, &io_actual); } break; case TD_WRITE64: case NSCMD_TD_WRITE64: if (dev->di.media_inserted <= 0) goto no_media; io_offset64 = get_long (request + 44) | ((uae_u64)get_long (request + 32) << 32); if (dev->di.write_protected || dev->drivetype == INQ_ROMD) { io_error = 28; /* writeprotect */ } else if ((io_offset64 & bmask) || bmask == 0 || io_data == 0) { goto bad_command; } else if ((io_length & bmask) || io_length == 0) { goto bad_len; } else { io_error = command_write (dev, io_data, io_offset64, io_length, &io_actual); } break; case CMD_FORMAT: if (dev->di.media_inserted <= 0) goto no_media; if (dev->di.write_protected || dev->drivetype == INQ_ROMD) { io_error = 28; /* writeprotect */ } else if ((io_offset & bmask) || bmask == 0 || io_data == 0) { goto bad_command; } else if ((io_length & bmask) || io_length == 0) { goto bad_len; } else { io_error = command_write (dev, io_data, io_offset, io_length, &io_actual); } break; case TD_FORMAT64: case NSCMD_TD_FORMAT64: if (dev->di.media_inserted <= 0) goto no_media; io_offset64 = get_long (request + 44) | ((uae_u64)get_long (request + 32) << 32); if (dev->di.write_protected || dev->drivetype == INQ_ROMD) { io_error = 28; /* writeprotect */ } else if ((io_offset64 & bmask) || bmask == 0 || io_data == 0) { goto bad_command; } else if ((io_length & bmask) || io_length == 0) { goto bad_len; } else { io_error = command_write (dev, io_data, io_offset64, io_length, &io_actual); } break; case CMD_UPDATE: case CMD_CLEAR: case CMD_FLUSH: case CMD_MOTOR: case CMD_SEEK: io_actual = 0; break; case CMD_REMOVE: io_actual = dev->changeint; dev->changeint = io_data; dev->changeint_mediastate = dev->di.media_inserted; break; case CMD_CHANGENUM: io_actual = dev->changenum; break; case CMD_CHANGESTATE: if (dev->di.media_inserted >= 0) { io_actual = devinfo (dev, &dev->di)->media_inserted > 0 ? 0 : 1; } else { io_actual = 1; } break; case CMD_PROTSTATUS: io_actual = devinfo (dev, &dev->di)->write_protected ? -1 : 0; break; case CMD_GETDRIVETYPE: io_actual = dev->drivetype; break; case CMD_GETNUMTRACKS: if (dev->di.media_inserted <= 0) goto no_media; io_actual = dev->di.cylinders; break; case CMD_GETGEOMETRY: { struct device_info *di; di = devinfo (dev, &dev->di); if (di->media_inserted <= 0) goto no_media; put_long (io_data + 0, di->bytespersector); put_long (io_data + 4, di->sectorspertrack * di->trackspercylinder * di->cylinders); put_long (io_data + 8, di->cylinders); put_long (io_data + 12, di->sectorspertrack * di->trackspercylinder); put_long (io_data + 16, di->trackspercylinder); put_long (io_data + 20, di->sectorspertrack); put_long (io_data + 24, 0); /* bufmemtype */ put_byte (io_data + 28, di->type); put_byte (io_data + 29, di->removable ? 1 : 0); /* flags */ io_actual = 30; } break; case CMD_ADDCHANGEINT: dev->changeint_mediastate = dev->di.media_inserted; io_error = add_async_request (dev, request, ASYNC_REQUEST_CHANGEINT, io_data); if (!io_error) async = 1; break; case CMD_REMCHANGEINT: release_async_request (dev, request); break; case CD_TOCLSN: case CD_TOCMSF: { int msf = command == CD_TOCMSF; struct cd_toc_head toc; if (sys_command_cd_toc (dev->di.unitnum, &toc)) { if (io_offset == 0 && io_length > 0) { int pos = toc.lastaddress; put_byte (io_data, toc.first_track); put_byte (io_data + 1, toc.last_track); if (msf) pos = lsn2msf (pos); put_long (io_data + 2, pos); io_offset++; io_length--; io_data += 6; io_actual++; } for (int i = toc.first_track_offset; i < toc.last_track_offset && io_length > 0; i++) { if (io_offset == toc.toc[i].point) { int pos = toc.toc[i].paddress; put_byte (io_data, (toc.toc[i].control << 4) | toc.toc[i].adr); put_byte (io_data + 1, toc.toc[i].point); if (msf) pos = lsn2msf (pos); put_long (io_data + 2, pos); io_offset++; io_length--; io_data += 6; io_actual++; } } } else { io_error = IOERR_NotSpecified; } } break; case CD_ADDFRAMEINT: io_error = add_async_request (dev, request, ASYNC_REQUEST_FRAMEINT, io_data); if (!io_error) async = 1; break; case CD_REMFRAMEINT: release_async_request (dev, request); break; case CD_ATTENUATE: { if (io_offset != -1) { dev->fadeframes = io_length & 0x7fff; dev->fadetarget = io_offset & 0x7fff; } io_actual = dev->volumelevel; } break; case CD_INFO: { uae_u16 status = 0; struct cd_toc_head toc; uae_u8 subq[SUBQ_SIZE] = { 0 }; sys_command_cd_qcode (dev->di.unitnum, subq); status |= 1 << 0; // door closed if (dev->di.media_inserted) { status |= 1 << 1; status |= 1 << 2; // motor on if (sys_command_cd_toc (dev->di.unitnum, &toc)) { status |= 1 << 3; // toc if (subq[1] == AUDIO_STATUS_IN_PROGRESS || subq[1] == AUDIO_STATUS_PAUSED) status |= 1 << 5; // audio play if (subq[1] == AUDIO_STATUS_PAUSED) status |= 1 << 6; // paused if (isdatatrack (&toc, 0)) status |= 1 << 4; // data track } } put_word (io_data + 0, 75); // PlaySpeed put_word (io_data + 2, 1200); // ReadSpeed (randomly chose 16x) put_word (io_data + 4, 1200); // ReadXLSpeed put_word (io_data + 6, dev->configblocksize); // SectorSize put_word (io_data + 8, -1); // XLECC put_word (io_data + 10, 0); // EjectReset put_word (io_data + 12, 0); // Reserved * 4 put_word (io_data + 14, 0); put_word (io_data + 16, 0); put_word (io_data + 18, 0); put_word (io_data + 20, 1200); // MaxSpeed put_word (io_data + 22, 0xffff); // AudioPrecision (volume) put_word (io_data + 24, status); // Status put_word (io_data + 26, 0); // Reserved2 * 4 put_word (io_data + 28, 0); put_word (io_data + 30, 0); put_word (io_data + 32, 0); io_actual = 34; } break; case CD_CONFIG: { while (get_long (io_data) != TAG_DONE) { uae_u32 tag = get_long (io_data); uae_u32 data = get_long (io_data + 4); if (tag == 4) { // TAGCD_SECTORSIZE if (data == 2048 || data == 2336 || data == 2352) dev->configblocksize = data; else io_error = IOERR_BADADDRESS; } io_data += 8; } break; } case CD_PAUSE: { int old = sys_command_cd_pause (dev->di.unitnum, io_length); if (old >= 0) io_actual = old; else io_error = IOERR_BADADDRESS; break; } case CD_PLAYLSN: { int start = io_offset; int end = io_length + start; if (!sys_command_cd_play (dev->di.unitnum, start, end, 0)) io_error = IOERR_BADADDRESS; } break; case CD_PLAYMSF: { int start = msf2lsn (io_offset); int end = msf2lsn (io_length) + start; if (!sys_command_cd_play (dev->di.unitnum, start, end, 0)) io_error = IOERR_BADADDRESS; } break; case CD_PLAYTRACK: { struct cd_toc_head toc; int ok = 0; if (sys_command_cd_toc (dev->di.unitnum, &toc)) { for (int i = toc.first_track_offset; i < toc.last_track_offset; i++) { if (i == io_offset && i + io_length <= toc.last_track_offset) { ok = sys_command_cd_play (dev->di.unitnum, toc.toc[i].address, toc.toc[i + io_length].address, 0); break; } } } if (!ok) io_error = IOERR_BADADDRESS; } break; case CD_QCODEMSF: case CD_QCODELSN: { uae_u8 subq[SUBQ_SIZE]; if (sys_command_cd_qcode (dev->di.unitnum, subq)) { if (subq[1] == AUDIO_STATUS_IN_PROGRESS || subq[1] == AUDIO_STATUS_PAUSED) { put_byte (io_data + 0, subq[4 + 0]); put_byte (io_data + 1, frombcd (subq[4 + 1])); put_byte (io_data + 2, frombcd (subq[4 + 2])); put_byte (io_data + 3, subq[4 + 6]); int trackpos = fromlongbcd (subq + 4 + 3); int diskpos = fromlongbcd (subq + 4 + 7); if (command == CD_QCODELSN) { trackpos = msf2lsn (trackpos); diskpos = msf2lsn (diskpos); } put_long (io_data + 4, trackpos); put_long (io_data + 8, diskpos); io_actual = 12; } else { io_error = IOERR_InvalidState; } } else { io_error = IOERR_BADADDRESS; } } break; case HD_SCSICMD: { uae_u32 sdd = get_long (request + 40); io_error = sys_command_scsi_direct (dev->unitnum, sdd); if (log_scsi) write_log (_T("scsidev: did io: sdd %08x request %08x error %d\n"), sdd, request, get_byte (request + 31)); } break; case NSCMD_DEVICEQUERY: put_long (io_data + 0, 0); put_long (io_data + 4, 16); /* size */ put_word (io_data + 8, NSDEVTYPE_TRACKDISK); put_word (io_data + 10, 0); put_long (io_data + 12, nscmd_cmd); io_actual = 16; break; default: io_error = IOERR_NOCMD; break; bad_len: io_error = IOERR_BADLENGTH; break; bad_command: io_error = IOERR_BADADDRESS; break; no_media: io_error = TDERR_DiskChanged; break; } put_long (request + 32, io_actual); put_byte (request + 31, io_error); io_log (_T("dev_io"),request); return async; } static int dev_can_quick (uae_u32 command) { switch (command) { case CMD_RESET: case CMD_STOP: case CMD_START: case CMD_CHANGESTATE: case CMD_PROTSTATUS: case CMD_GETDRIVETYPE: return 1; case CMD_GETNUMTRACKS: case CMD_ADDCHANGEINT: case CMD_REMCHANGEINT: case CD_ADDFRAMEINT: case CD_REMFRAMEINT: return -1; } return 0; } static int dev_canquick (struct devstruct *dev, uaecptr request) { uae_u32 command = get_word (request + 28); return dev_can_quick (command); } static uae_u32 REGPARAM2 dev_beginio (TrapContext *context) { uae_u32 request = m68k_areg (regs, 1); uae_u8 flags = get_byte (request + 30); int command = get_word (request + 28); struct priv_devstruct *pdev = getpdevstruct (request); struct devstruct *dev; int canquick; put_byte (request + 8, NT_MESSAGE); if (!pdev) { put_byte (request + 31, 32); return get_byte (request + 31); } dev = getdevstruct (pdev->unit); if (!dev) { put_byte (request + 31, 32); return get_byte (request + 31); } put_byte (request + 31, 0); canquick = dev_canquick (dev, request); if (((flags & 1) && canquick) || (canquick < 0)) { dev_do_io (dev, request); if (!(flags & 1)) uae_ReplyMsg (request); return get_byte (request + 31); } else { add_async_request (dev, request, ASYNC_REQUEST_TEMP, 0); put_byte (request + 30, get_byte (request + 30) & ~1); write_comm_pipe_u32 (&dev->requests, request, 1); return 0; } } static void *dev_thread (void *devs) { struct devstruct *dev = (struct devstruct*)devs; uae_set_thread_priority (NULL, 1); dev->thread_running = 1; uae_sem_post (&dev->sync_sem); for (;;) { uaecptr request = (uaecptr)read_comm_pipe_u32_blocking (&dev->requests); uae_sem_wait (&change_sem); if (!request) { dev->thread_running = 0; uae_sem_post (&dev->sync_sem); uae_sem_post (&change_sem); return 0; } else if (dev_do_io (dev, request) == 0) { put_byte (request + 30, get_byte (request + 30) & ~1); release_async_request (dev, request); uae_ReplyMsg (request); } else { if (log_scsi) write_log (_T("%s:%d async request %08X\n"), getdevname(0), dev->unitnum, request); } uae_sem_post (&change_sem); } return 0; } static uae_u32 REGPARAM2 dev_init_2 (TrapContext *context, int type) { uae_u32 base = m68k_dreg (regs,0); if (log_scsi) write_log (_T("%s init\n"), getdevname (type)); return base; } static uae_u32 REGPARAM2 dev_init (TrapContext *context) { return dev_init_2 (context, UAEDEV_SCSI_ID); } static uae_u32 REGPARAM2 diskdev_init (TrapContext *context) { return dev_init_2 (context, UAEDEV_DISK_ID); } static uae_u32 REGPARAM2 dev_abortio (TrapContext *context) { uae_u32 request = m68k_areg (regs, 1); struct priv_devstruct *pdev = getpdevstruct (request); struct devstruct *dev; if (!pdev) { put_byte (request + 31, 32); return get_byte (request + 31); } dev = getdevstruct (pdev->unit); if (!dev) { put_byte (request + 31, 32); return get_byte (request + 31); } put_byte (request + 31, IOERR_ABORTED); if (log_scsi) write_log (_T("abortio %s unit=%d, request=%08X\n"), getdevname (pdev->type), pdev->unit, request); abort_async (dev, request, IOERR_ABORTED, 0); return 0; } #define BTL2UNIT(bus, target, lun) (2 * (bus) + (target) / 8) * 100 + (lun) * 10 + (target % 8) uae_u32 scsi_get_cd_drive_mask (void) { uae_u32 mask = 0; for (int i = 0; i < MAX_TOTAL_SCSI_DEVICES; i++) { struct devstruct *dev = &devst[i]; if (dev->iscd) mask |= 1 << i; } return mask; } uae_u32 scsi_get_cd_drive_media_mask (void) { uae_u32 mask = 0; for (int i = 0; i < MAX_TOTAL_SCSI_DEVICES; i++) { struct devstruct *dev = &devst[i]; if (dev->iscd && dev->changeint_mediastate) mask |= 1 << i; } return mask; } static void dev_reset (void) { int i, j; struct devstruct *dev; int unitnum = 0; for (i = 0; i < MAX_TOTAL_SCSI_DEVICES; i++) { dev = &devst[i]; if (dev->opencnt > 0) { for (j = 0; j < MAX_ASYNC_REQUESTS; j++) { uaecptr request; if ((request = dev->d_request[i])) abort_async (dev, request, 0, 0); } dev->opencnt = 1; sys_command_close (dev->unitnum); } memset (dev, 0, sizeof (struct devstruct)); dev->unitnum = dev->aunit = -1; } for (i = 0; i < MAX_OPEN_DEVICES; i++) memset (&pdevst[i], 0, sizeof (struct priv_devstruct)); device_func_init (0); i = 0; while (i < MAX_TOTAL_SCSI_DEVICES) { dev = &devst[i]; struct device_info *discsi, discsi2; if (sys_command_open (i)) { discsi = sys_command_info (i, &discsi2, 0); if (discsi) { dev->unitnum = i; dev->drivetype = discsi->type; memcpy (&dev->di, discsi, sizeof (struct device_info)); dev->changeint_mediastate = discsi->media_inserted; dev->configblocksize = discsi->bytespersector; if (discsi->type == INQ_ROMD) dev->iscd = 1; } } i++; } unitnum = 0; for (i = 0; i < MAX_TOTAL_SCSI_DEVICES; i++) { dev = &devst[i]; if (dev->unitnum >= 0) sys_command_close (dev->unitnum); if (dev->unitnum >= 0 && dev->iscd) { dev->aunit = unitnum; dev->volumelevel = 0x7fff; unitnum++; } } if (unitnum == 0) unitnum = 1; for (i = 0; i < MAX_TOTAL_SCSI_DEVICES; i++) { dev = &devst[i]; if (dev->unitnum >= 0) { if (!dev->iscd) { dev->aunit = unitnum; unitnum++; } write_log (_T("%s:%d = %s:'%s'\n"), UAEDEV_SCSI, dev->aunit, dev->di.backend, dev->di.label); } dev->di.label[0] = 0; } } static uaecptr ROM_scsidev_resname = 0, ROM_scsidev_resid = 0, ROM_scsidev_init = 0; static uaecptr ROM_diskdev_resname = 0, ROM_diskdev_resid = 0, ROM_diskdev_init = 0; static uaecptr diskdev_startup (uaecptr resaddr) { /* Build a struct Resident. This will set up and initialize * the cd.device */ if (log_scsi) write_log (_T("diskdev_startup(0x%x)\n"), resaddr); put_word (resaddr + 0x0, 0x4AFC); put_long (resaddr + 0x2, resaddr); put_long (resaddr + 0x6, resaddr + 0x1A); /* Continue scan here */ put_word (resaddr + 0xA, 0x8101); /* RTF_AUTOINIT|RTF_COLDSTART; Version 1 */ put_word (resaddr + 0xC, 0x0305); /* NT_DEVICE; pri 05 */ put_long (resaddr + 0xE, ROM_diskdev_resname); put_long (resaddr + 0x12, ROM_diskdev_resid); put_long (resaddr + 0x16, ROM_diskdev_init); resaddr += 0x1A; return resaddr; } uaecptr scsidev_startup (uaecptr resaddr) { if (currprefs.scsi != 1) return resaddr; if (log_scsi) write_log (_T("scsidev_startup(0x%x)\n"), resaddr); /* Build a struct Resident. This will set up and initialize * the uaescsi.device */ put_word (resaddr + 0x0, 0x4AFC); put_long (resaddr + 0x2, resaddr); put_long (resaddr + 0x6, resaddr + 0x1A); /* Continue scan here */ put_word (resaddr + 0xA, 0x8101); /* RTF_AUTOINIT|RTF_COLDSTART; Version 1 */ put_word (resaddr + 0xC, 0x0305); /* NT_DEVICE; pri 05 */ put_long (resaddr + 0xE, ROM_scsidev_resname); put_long (resaddr + 0x12, ROM_scsidev_resid); put_long (resaddr + 0x16, ROM_scsidev_init); /* calls scsidev_init */ resaddr += 0x1A; return resaddr; return diskdev_startup (resaddr); } static void diskdev_install (void) { uae_u32 functable, datatable; uae_u32 initcode, openfunc, closefunc, expungefunc; uae_u32 beginiofunc, abortiofunc; if (currprefs.scsi != 1) return; if (log_scsi) write_log (_T("diskdev_install(): 0x%x\n"), here ()); ROM_diskdev_resname = ds (UAEDEV_DISK); ROM_diskdev_resid = ds (_T("UAE disk.device 0.1")); /* initcode */ initcode = here (); calltrap (deftrap (diskdev_init)); dw (RTS); /* Open */ openfunc = here (); calltrap (deftrap (diskdev_open)); dw (RTS); /* Close */ closefunc = here (); calltrap (deftrap (diskdev_close)); dw (RTS); /* Expunge */ expungefunc = here (); calltrap (deftrap (diskdev_expunge)); dw (RTS); /* BeginIO */ beginiofunc = here (); calltrap (deftrap (dev_beginio)); dw (RTS); /* AbortIO */ abortiofunc = here (); calltrap (deftrap (dev_abortio)); dw (RTS); /* FuncTable */ functable = here (); dl (openfunc); /* Open */ dl (closefunc); /* Close */ dl (expungefunc); /* Expunge */ dl (EXPANSION_nullfunc); /* Null */ dl (beginiofunc); /* BeginIO */ dl (abortiofunc); /* AbortIO */ dl (0xFFFFFFFFul); /* end of table */ /* DataTable */ datatable = here (); dw (0xE000); /* INITBYTE */ dw (0x0008); /* LN_TYPE */ dw (0x0300); /* NT_DEVICE */ dw (0xC000); /* INITLONG */ dw (0x000A); /* LN_NAME */ dl (ROM_diskdev_resname); dw (0xE000); /* INITBYTE */ dw (0x000E); /* LIB_FLAGS */ dw (0x0600); /* LIBF_SUMUSED | LIBF_CHANGED */ dw (0xD000); /* INITWORD */ dw (0x0014); /* LIB_VERSION */ dw (0x0004); /* 0.4 */ dw (0xD000); /* INITWORD */ dw (0x0016); /* LIB_REVISION */ dw (0x0000); /* end of table already ??? */ dw (0xC000); /* INITLONG */ dw (0x0018); /* LIB_IDSTRING */ dl (ROM_diskdev_resid); dw (0x0000); /* end of table */ ROM_diskdev_init = here (); dl (0x00000100); /* size of device base */ dl (functable); dl (datatable); dl (initcode); } void scsidev_install (void) { uae_u32 functable, datatable; uae_u32 initcode, openfunc, closefunc, expungefunc; uae_u32 beginiofunc, abortiofunc; if (currprefs.scsi != 1) return; if (log_scsi) write_log (_T("scsidev_install(): 0x%x\n"), here ()); ROM_scsidev_resname = ds (UAEDEV_SCSI); ROM_scsidev_resid = ds (_T("UAE scsi.device 0.2")); /* initcode */ initcode = here (); calltrap (deftrap (dev_init)); dw (RTS); /* Open */ openfunc = here (); calltrap (deftrap (dev_open)); dw (RTS); /* Close */ closefunc = here (); calltrap (deftrap (dev_close)); dw (RTS); /* Expunge */ expungefunc = here (); calltrap (deftrap (dev_expunge)); dw (RTS); /* BeginIO */ beginiofunc = here (); calltrap (deftrap (dev_beginio)); dw (RTS); /* AbortIO */ abortiofunc = here (); calltrap (deftrap (dev_abortio)); dw (RTS); /* FuncTable */ functable = here (); dl (openfunc); /* Open */ dl (closefunc); /* Close */ dl (expungefunc); /* Expunge */ dl (EXPANSION_nullfunc); /* Null */ dl (beginiofunc); /* BeginIO */ dl (abortiofunc); /* AbortIO */ dl (0xFFFFFFFFul); /* end of table */ /* DataTable */ datatable = here (); dw (0xE000); /* INITBYTE */ dw (0x0008); /* LN_TYPE */ dw (0x0300); /* NT_DEVICE */ dw (0xC000); /* INITLONG */ dw (0x000A); /* LN_NAME */ dl (ROM_scsidev_resname); dw (0xE000); /* INITBYTE */ dw (0x000E); /* LIB_FLAGS */ dw (0x0600); /* LIBF_SUMUSED | LIBF_CHANGED */ dw (0xD000); /* INITWORD */ dw (0x0014); /* LIB_VERSION */ dw (0x0004); /* 0.4 */ dw (0xD000); /* INITWORD */ dw (0x0016); /* LIB_REVISION */ dw (0x0000); dw (0xC000); /* INITLONG */ dw (0x0018); /* LIB_IDSTRING */ dl (ROM_scsidev_resid); dw (0x0000); /* end of table */ ROM_scsidev_init = here (); dl (0x00000100); /* size of device base */ dl (functable); dl (datatable); dl (initcode); nscmd_cmd = here (); dw (NSCMD_DEVICEQUERY); dw (CMD_RESET); dw (CMD_READ); dw (CMD_WRITE); dw (CMD_UPDATE); dw (CMD_CLEAR); dw (CMD_START); dw (CMD_STOP); dw (CMD_FLUSH); dw (CMD_MOTOR); dw (CMD_SEEK); dw (CMD_FORMAT); dw (CMD_REMOVE); dw (CMD_CHANGENUM); dw (CMD_CHANGESTATE); dw (CMD_PROTSTATUS); dw (CMD_GETDRIVETYPE); dw (CMD_GETGEOMETRY); dw (CMD_ADDCHANGEINT); dw (CMD_REMCHANGEINT); dw (HD_SCSICMD); dw (NSCMD_TD_READ64); dw (NSCMD_TD_WRITE64); dw (NSCMD_TD_SEEK64); dw (NSCMD_TD_FORMAT64); dw (0); diskdev_install (); } void scsidev_start_threads (void) { if (currprefs.scsi != 1) /* quite useless.. */ return; if (log_scsi) write_log (_T("scsidev_start_threads()\n")); uae_sem_init (&change_sem, 0, 1); } void scsidev_reset (void) { if (currprefs.scsi != 1) return; dev_reset (); } fs-uae-2.2.3+dfsg/src/sampler.cpp0000644000175000017500000001560212162366654017016 0ustar glaubitzglaubitz/* * Parallel port audio digitizer * * Toni Wilen 2010 */ #include "sysconfig.h" #include "sysdeps.h" #include "options.h" #include "events.h" #include "custom.h" #include "sampler.h" #include "dxwrap.h" #include #include #include "win32.h" #define SAMPLESIZE 4 static LPDIRECTSOUNDCAPTURE lpDS2r = NULL; static LPDIRECTSOUNDCAPTUREBUFFER lpDSBprimary2r = NULL; static LPDIRECTSOUNDCAPTUREBUFFER lpDSB2r = NULL; static int inited; static uae_u8 *samplebuffer; static int sampleframes; static int recordbufferframes; static float clockspersample; static int vsynccnt; static int safediff; float sampler_evtime; static int capture_init (void) { HRESULT hr; DSCBUFFERDESC sound_buffer_rec; WAVEFORMATEX wavfmt; TCHAR *name; int samplerate = 44100; if (currprefs.sampler_freq) samplerate = currprefs.sampler_freq; name = record_devices[currprefs.win32_samplersoundcard]->name; wavfmt.wFormatTag = WAVE_FORMAT_PCM; wavfmt.nChannels = 2; wavfmt.nSamplesPerSec = samplerate; wavfmt.wBitsPerSample = 16; wavfmt.nBlockAlign = wavfmt.wBitsPerSample / 8 * wavfmt.nChannels; wavfmt.nAvgBytesPerSec = wavfmt.nBlockAlign * wavfmt.nSamplesPerSec; wavfmt.cbSize = 0; clockspersample = sampler_evtime / samplerate; sampleframes = (samplerate + 49) / 50; recordbufferframes = 16384; if (currprefs.sampler_buffer) recordbufferframes = currprefs.sampler_buffer; hr = DirectSoundCaptureCreate (&record_devices[currprefs.win32_samplersoundcard]->guid, &lpDS2r, NULL); if (FAILED (hr)) { write_log (_T("SAMPLER: DirectSoundCaptureCreate('%s') failure: %s\n"), name, DXError (hr)); return 0; } memset (&sound_buffer_rec, 0, sizeof (DSCBUFFERDESC)); sound_buffer_rec.dwSize = sizeof (DSCBUFFERDESC); sound_buffer_rec.dwBufferBytes = recordbufferframes * SAMPLESIZE; sound_buffer_rec.lpwfxFormat = &wavfmt; sound_buffer_rec.dwFlags = 0 ; hr = lpDS2r->CreateCaptureBuffer (&sound_buffer_rec, &lpDSB2r, NULL); if (FAILED (hr)) { write_log (_T("SAMPLER: CreateCaptureSoundBuffer('%s') failure: %s\n"), name, DXError(hr)); return 0; } hr = lpDSB2r->Start (DSCBSTART_LOOPING); if (FAILED (hr)) { write_log (_T("SAMPLER: DirectSoundCaptureBuffer_Start('%s') failed: %s\n"), name, DXError (hr)); return 0; } samplebuffer = xcalloc (uae_u8, sampleframes * SAMPLESIZE); write_log (_T("SAMPLER: Parallel port sampler initialized, CPS=%f, '%s'\n"), clockspersample, name); return 1; } static void capture_free (void) { if (lpDSB2r) { lpDSB2r->Stop (); lpDSB2r->Release (); write_log (_T("SAMPLER: Parallel port sampler freed\n")); } lpDSB2r = NULL; if (lpDS2r) lpDS2r->Release (); lpDS2r = NULL; xfree (samplebuffer); samplebuffer = NULL; } static evt oldcycles; static int oldoffset; uae_u8 sampler_getsample (int channel) { #if 0 int cur_pos; static int cap_pos; static float diffsample; #endif static double doffset_offset; HRESULT hr; DWORD t; void *p1, *p2; DWORD len1, len2; evt cycles; int sample, samplecnt; double doffset; int offset; if (!currprefs.sampler_stereo) channel = 0; if (!inited) { DWORD pos; if (!capture_init ()) { capture_free (); return 0; } inited = 1; oldcycles = get_cycles (); oldoffset = -1; doffset_offset = 0; hr = lpDSB2r->GetCurrentPosition (&t, &pos); if (FAILED (hr)) { sampler_free (); return 0; } if (t >= pos) safediff = t - pos; else safediff = recordbufferframes * SAMPLESIZE - pos + t; write_log (_T("SAMPLER: safediff %d %d\n"), safediff, safediff + sampleframes * SAMPLESIZE); safediff += 4 * sampleframes * SAMPLESIZE; #if 0 diffsample = 0; safepos = -recordbufferframes / 10 * SAMPLESIZE; hr = lpDSB2r->GetCurrentPosition (&t, &pos); cap_pos = pos; cap_pos += safepos; if (cap_pos < 0) cap_pos += recordbufferframes * SAMPLESIZE; if (cap_pos >= recordbufferframes * SAMPLESIZE) cap_pos -= recordbufferframes * SAMPLESIZE; if (FAILED (hr)) { sampler_free (); return 0; } #endif } if (clockspersample < 1) return 0; uae_s16 *sbuf = (uae_s16*)samplebuffer; vsynccnt = 0; sample = 0; samplecnt = 0; cycles = (int)get_cycles () - (int)oldcycles; doffset = doffset_offset + cycles / clockspersample; offset = (int)doffset; if (oldoffset < 0 || offset >= sampleframes || offset < 0) { if (offset >= sampleframes) { doffset -= offset; doffset_offset = doffset; } if (oldoffset >= 0 && offset >= sampleframes) { while (oldoffset < sampleframes) { sample += sbuf[oldoffset * SAMPLESIZE / 2 + channel]; oldoffset++; samplecnt++; } } hr = lpDSB2r->GetCurrentPosition (&t, NULL); int pos = t; pos -= safediff; if (pos < 0) pos += recordbufferframes * SAMPLESIZE; hr = lpDSB2r->Lock (pos, sampleframes * SAMPLESIZE, &p1, &len1, &p2, &len2, 0); if (FAILED (hr)) { write_log (_T("SAMPLER: Lock() failed %x\n"), hr); return 0; } memcpy (samplebuffer, p1, len1); if (p2) memcpy (samplebuffer + len1, p2, len2); lpDSB2r->Unlock (p1, len1, p2, len2); #if 0 cap_pos = t; cap_pos += sampleframes * SAMPLESIZE; if (cap_pos < 0) cap_pos += RECORDBUFFER * SAMPLESIZE; if (cap_pos >= RECORDBUFFER * SAMPLESIZE) cap_pos -= RECORDBUFFER * SAMPLESIZE; hr = lpDSB2r->GetCurrentPosition (&t, &pos); cur_pos = pos; if (FAILED (hr)) return 0; cur_pos += safepos; if (cur_pos < 0) cur_pos += RECORDBUFFER * SAMPLESIZE; if (cur_pos >= RECORDBUFFER * SAMPLESIZE) cur_pos -= RECORDBUFFER * SAMPLESIZE; int diff; if (cur_pos >= cap_pos) diff = cur_pos - cap_pos; else diff = RECORDBUFFER * SAMPLESIZE - cap_pos + cur_pos; if (diff > RECORDBUFFER * SAMPLESIZE / 2) diff -= RECORDBUFFER * SAMPLESIZE; diff /= SAMPLESIZE; int diff2 = 100 * diff / (RECORDBUFFER / 2); diffsample = -pow (diff2 < 0 ? -diff2 : diff2, 3.1); if (diff2 < 0) diffsample = -diffsample; write_log (_T("%d\n"), diff); write_log (_T("CAP=%05d CUR=%05d (%-05d) OFF=%05d %f\n"), cap_pos / SAMPLESIZE, cur_pos / SAMPLESIZE, (cap_pos - cur_pos) / SAMPLESIZE, offset, doffset_offset); #endif if (offset < 0) offset = 0; if (offset >= sampleframes) offset -= sampleframes; oldoffset = 0; oldcycles = get_cycles (); } while (oldoffset <= offset) { sample += sbuf[oldoffset * SAMPLESIZE / 2 + channel]; samplecnt++; oldoffset++; } oldoffset = offset; if (samplecnt > 0) sample /= samplecnt; #if 1 /* yes, not 256, without this max recording volume would still be too quiet on my sound cards */ sample /= 128; if (sample < -128) sample = 0; else if (sample > 127) sample = 127; return (uae_u8)(sample - 128); #else return (Uae_u8)((sample / 256) - 128); #endif } int sampler_init (void) { if (currprefs.win32_samplersoundcard < 0) return 0; return 1; } void sampler_free (void) { inited = 0; vsynccnt = 0; capture_free (); } void sampler_vsync (void) { if (!inited) return; vsynccnt++; if (vsynccnt > 1) { oldcycles = get_cycles (); } if (vsynccnt > 50) { sampler_free (); return; } }fs-uae-2.2.3+dfsg/src/cpuopti.cpp0000644000175000017500000001506412162366654017040 0ustar glaubitzglaubitz/* * UAE - The Un*x Amiga Emulator * * cpuopti.c - Small optimizer for cpu*.s files * Based on work by Tauno Taipaleenmaki * * Copyright 1996 Bernd Schmidt */ #include "sysconfig.h" #include "sysdeps.h" #include struct line { struct line *next, *prev; int delet; char *data; }; struct func { struct line *first_line, *last_line; int initial_offset; }; static void oops(void) { fprintf(stderr, "Corrupted assembly file!\n"); abort(); } /* Not strictly true to definition, as it only checks for match/no match, not for ordering */ static int mystrncmp(const char* a, const char* b, int len) { int biswhite=0; while (len) { if (isspace(*a)) { if (!biswhite) { biswhite=isspace(*b++); while (isspace(*b)) b++; } if (!biswhite) return -1; } else { biswhite=0; if (*a!=*b++) return -1; } a++; len--; } return 0; } static char * match(struct line *l, const char *m) { char *str = l->data; int len = strlen(m); while (isspace(*str)) str++; if (mystrncmp(str, m, len) != 0) return NULL; return str + len; } static int insn_references_reg (struct line *l, char *reg) { if (reg[0] != 'e') { fprintf(stderr, "Unknown register?!?\n"); abort(); } if (strstr (l->data, reg) != 0) return 1; if (strstr (l->data, reg+1) != 0) return 1; if (strcmp (reg, "eax") == 0 && (strstr (l->data, "%al") != 0 || strstr (l->data, "%ah") != 0)) return 1; if (strcmp (reg, "ebx") == 0 && (strstr (l->data, "%bl") != 0 || strstr (l->data, "%bh") != 0)) return 1; if (strcmp (reg, "ecx") == 0 && (strstr (l->data, "%cl") != 0 || strstr (l->data, "%ch") != 0)) return 1; if (strcmp (reg, "edx") == 0 && (strstr (l->data, "%dl") != 0 || strstr (l->data, "%dh") != 0)) return 1; return 0; } static void do_function(struct func *f) { int v; int pops_at_end = 0; struct line *l, *l1, *fl, *l2; char *s, *s2; int in_pop_area = 1; f->initial_offset = 0; l = f->last_line; fl = f->first_line; if (!match(l,"ret")) oops(); while (!match(fl, "op_")) fl = fl->next; fl = fl->next; /* Try reordering the insns at the end of the function so that the * pops are all at the end. */ l2 = l->prev; /* Tolerate one stack adjustment */ if (match (l2, "addl $") && strstr(l2->data, "esp") != 0) l2 = l2->prev; for (;;) { char *forbidden_reg; struct line *l3, *l4; while (match (l2, "popl %")) l2 = l2->prev; l3 = l2; for (;;) { forbidden_reg = match (l3, "popl %"); if (forbidden_reg) break; if (l3 == fl) goto reordered; /* Jumps and labels put an end to our attempts... */ if (strstr (l3->data, ".L") != 0) goto reordered; /* Likewise accesses to the stack pointer... */ if (strstr (l3->data, "esp") != 0) goto reordered; /* Function calls... */ if (strstr (l3->data, "call") != 0) goto reordered; l3 = l3->prev; } if (l3 == l2) abort(); for (l4 = l2; l4 != l3; l4 = l4->prev) { /* The register may not be referenced by any of the insns that we * move the popl past */ if (insn_references_reg (l4, forbidden_reg)) goto reordered; } l3->prev->next = l3->next; l3->next->prev = l3->prev; l2->next->prev = l3; l3->next = l2->next; l2->next = l3; l3->prev = l2; } reordered: l = l->prev; s = match (l, "addl $"); s2 = match (fl, "subl $"); l1 = l; if (s == 0) { char *t = match (l, "popl %"); if (t != 0 && (strcmp (t, "ecx") == 0 || strcmp (t, "edx") == 0)) { s = "4,%esp"; l = l->prev; t = match (l, "popl %"); if (t != 0 && (strcmp (t, "ecx") == 0 || strcmp (t, "edx") == 0)) { s = "8,%esp"; l = l->prev; } } } else { l = l->prev; } if (s && s2) { int v = 0; if (strcmp (s, s2) != 0) { fprintf (stderr, "Stack adjustment not matching.\n"); return; } while (isdigit(*s)) { v = v * 10 + (*s) - '0'; s++; } if (strcmp (s, ",%esp") != 0) { fprintf (stderr, "Not adjusting the stack pointer.\n"); return; } f->initial_offset = v; fl->delet = 3; fl = fl->next; l1->delet = 2; l1 = l1->prev; while (l1 != l) { l1->delet = 1; l1 = l1->prev; } } while (in_pop_area) { char *popm, *pushm; popm = match (l, "popl %"); pushm = match (fl, "pushl %"); if (popm && pushm && strcmp(pushm, popm) == 0) { pops_at_end++; fl->delet = l->delet = 1; } else in_pop_area = 0; l = l->prev; fl = fl->next; } if (f->initial_offset) f->initial_offset += 4 * pops_at_end; } static void output_function(struct func *f) { struct line *l = f->first_line; while (l) { switch (l->delet) { case 1: break; case 0: printf("%s\n", l->data); break; case 2: if (f->initial_offset) printf("\taddl $%d,%%esp\n", f->initial_offset); break; case 3: if (f->initial_offset) printf("\tsubl $%d,%%esp\n", f->initial_offset); break; } l = l->next; } } int main(int argc, char **argv) { FILE *infile = stdin; char tmp[4096]; #ifdef __mc68000__ if(system("perl machdep/cpuopti")==-1) { perror("perl machdep/cpuopti"); return 10; } else return 0; #endif /* For debugging... */ if (argc == 2) infile = fopen (argv[1], "r"); for(;;) { char *s; if ((fgets(tmp, 4095, infile)) == NULL) break; s = strchr (tmp, '\n'); if (s != NULL) *s = 0; if (mystrncmp(tmp, ".globl op_", 10) == 0) { struct line *first_line = NULL, *prev = NULL; struct line **nextp = &first_line; struct func f; int nr_rets = 0; int can_opt = 1; do { struct line *current; if (strcmp (tmp, "#APP") != 0 && strcmp (tmp, "#NO_APP") != 0) { current = *nextp = (struct line *)malloc(sizeof (struct line)); nextp = ¤t->next; current->prev = prev; prev = current; current->next = NULL; current->delet = 0; current->data = my_strdup (tmp); if (match (current, "movl %esp,%ebp") || match (current, "enter")) { fprintf (stderr, "GCC failed to eliminate fp: %s\n", first_line->data); can_opt = 0; } if (match (current, "ret")) nr_rets++; } if ((fgets(tmp, 4095, infile)) == NULL) oops(); s = strchr (tmp, '\n'); if (s != NULL) *s = 0; } while (strncmp (tmp,".Lfe", 4) != 0); f.first_line = first_line; f.last_line = prev; if (nr_rets == 1 && can_opt) do_function(&f); /*else fprintf(stderr, "Too many RET instructions: %s\n", first_line->data);*/ output_function(&f); } printf("%s\n", tmp); } return 0; } fs-uae-2.2.3+dfsg/src/hrtmon.rom.cpp0000644000175000017500000076420312162366654017466 0ustar glaubitzglaubitzunsigned char hrtrom[] = { 0x1f, 0x8b, 0x08, 0x08, 0xa8, 0xba, 0x39, 0x4d, 0x02, 0x03, 0x68, 0x72, 0x74, 0x6d, 0x6f, 0x6e, 0x2e, 0x72, 0x6f, 0x6d, 0x00, 0xec, 0xfd, 0x0f, 0x7c, 0x14, 0xc7, 0x91, 0x28, 0x8e, 0xd7, 0xfe, 0xd1, 0x6a, 0xb5, 0x2c, 0x62, 0x11, 0xb2, 0xbc, 0x96, 0x65, 0x18, 0x84, 0x2c, 0x0b, 0x2c, 0xc4, 0xea, 0x8f, 0x65, 0x19, 0x0b, 0xd8, 0x5d, 0xfd, 0x61, 0xb5, 0x12, 0x42, 0xac, 0x04, 0x08, 0x8c, 0xed, 0x19, 0xfd, 0x99, 0x41, 0x20, 0xa4, 0xcd, 0x6a, 0x85, 0x81, 0xe8, 0xf0, 0x82, 0x1d, 0xa2, 0x10, 0x3f, 0x3f, 0x4c, 0x38, 0x1f, 0xc7, 0xf9, 0xf9, 0x80, 0xf3, 0xf3, 0x11, 0xc7, 0xcf, 0x27, 0x13, 0x42, 0x30, 0xe1, 0x39, 0x0b, 0xc6, 0x18, 0x63, 0x42, 0x64, 0x42, 0x1c, 0xc2, 0x71, 0x06, 0x13, 0x8c, 0x05, 0x21, 0x44, 0x26, 0x98, 0xc8, 0x8a, 0xcc, 0xfe, 0xaa, 0xba, 0x67, 0x56, 0x12, 0x60, 0xc7, 0xb9, 0xbb, 0x77, 0xdf, 0xdf, 0xfb, 0xbc, 0x08, 0x76, 0xaa, 0xbb, 0xba, 0xba, 0xba, 0xbb, 0xba, 0xba, 0xba, 0x7a, 0xa6, 0xa7, 0xc7, 0x1f, 0xa9, 0x6c, 0xf7, 0xf8, 0x6a, 0xc6, 0x57, 0x7e, 0xa3, 0xb2, 0x5d, 0x84, 0xb8, 0xdd, 0x04, 0x81, 0xfd, 0xc5, 0x5f, 0xe1, 0x10, 0x46, 0xc1, 0xb0, 0xbf, 0xca, 0x92, 0xf9, 0x98, 0x01, 0xf4, 0x30, 0x1e, 0xbe, 0xe2, 0x2f, 0x6d, 0x5e, 0x89, 0x6f, 0xaa, 0x80, 0x84, 0xcb, 0x5a, 0x5b, 0xb2, 0x1a, 0xa4, 0xa0, 0x24, 0xe4, 0x64, 0xe5, 0xe6, 0x0a, 0x19, 0x2b, 0x56, 0x64, 0xe1, 0xff, 0x1c, 0x87, 0x23, 0x7f, 0xa2, 0x05, 0xc0, 0xf3, 0xc9, 0x93, 0x37, 0x5c, 0xfd, 0x91, 0x8e, 0xdc, 0x01, 0x48, 0x81, 0xed, 0xa5, 0x26, 0xeb, 0x43, 0xa0, 0x83, 0x6d, 0x90, 0x2e, 0x9b, 0x11, 0x93, 0xa4, 0x62, 0xf4, 0x51, 0x4c, 0x1e, 0x61, 0xf2, 0x0a, 0x21, 0x6f, 0xd3, 0x4a, 0x0a, 0x1d, 0x1c, 0x80, 0xaa, 0x54, 0xfd, 0xf1, 0x7d, 0xb0, 0x5d, 0x29, 0x9c, 0xb0, 0x1f, 0xb6, 0xcf, 0xb8, 0x41, 0x57, 0xa7, 0x9e, 0xe3, 0x9e, 0xe8, 0x60, 0x31, 0x13, 0x8f, 0x7d, 0x7b, 0x1f, 0x8b, 0x59, 0x72, 0x1e, 0xa2, 0x9c, 0x0b, 0x5c, 0xb9, 0x18, 0x2b, 0x35, 0x4e, 0x38, 0x0c, 0xdb, 0xf4, 0xbd, 0x74, 0x8d, 0xdb, 0xe7, 0x7d, 0x08, 0xcb, 0x99, 0x38, 0xef, 0x73, 0xd8, 0x5e, 0xf6, 0x0b, 0x16, 0x1e, 0xa7, 0x00, 0xdc, 0x60, 0xa1, 0x7b, 0x95, 0xe6, 0x09, 0x03, 0xf0, 0xdb, 0x10, 0xc0, 0xb6, 0xbf, 0x7b, 0xc1, 0xfd, 0x06, 0x5e, 0xb7, 0x62, 0x6d, 0x28, 0xf6, 0x52, 0xee, 0x80, 0x8e, 0xe0, 0xcb, 0x2a, 0xdc, 0x91, 0x3b, 0xa0, 0x27, 0xf8, 0x4a, 0xee, 0x80, 0x81, 0xe0, 0xab, 0xb9, 0x03, 0x46, 0x82, 0xaf, 0xe5, 0x0e, 0xc4, 0x10, 0xec, 0xca, 0x1d, 0x30, 0x11, 0xdc, 0x99, 0x3b, 0x10, 0x4b, 0x70, 0x97, 0x0a, 0x77, 0xe7, 0x0e, 0x94, 0x12, 0xdc, 0x23, 0x02, 0xac, 0x1f, 0xe4, 0x0d, 0x46, 0xce, 0x9b, 0x41, 0xe4, 0x0d, 0x66, 0xce, 0x1b, 0xac, 0x9c, 0x37, 0xd8, 0x38, 0x6f, 0x48, 0xe4, 0xbc, 0xc1, 0xce, 0x79, 0xa3, 0x34, 0x19, 0x6f, 0x06, 0x77, 0xab, 0x70, 0x0f, 0xb6, 0xe1, 0x94, 0xc0, 0xda, 0x40, 0xa1, 0x0d, 0x14, 0xda, 0xca, 0xda, 0x27, 0xc8, 0x89, 0x88, 0xf9, 0x37, 0x41, 0x50, 0xd3, 0xfe, 0xcd, 0x41, 0xa1, 0xad, 0x63, 0xfa, 0x6f, 0x18, 0x51, 0x66, 0x3e, 0x3f, 0xd8, 0x88, 0xea, 0x9e, 0x30, 0x96, 0x5b, 0xf1, 0x27, 0x88, 0x35, 0x27, 0x7a, 0x3e, 0x87, 0x58, 0x94, 0xf7, 0x55, 0xa9, 0xa0, 0xe2, 0xcc, 0x93, 0x37, 0xfc, 0x80, 0x3a, 0xb3, 0x7d, 0xe4, 0x1e, 0xd8, 0x1e, 0x2f, 0xe0, 0xaf, 0x13, 0xb6, 0x5b, 0x43, 0xf8, 0xeb, 0x41, 0x5c, 0x15, 0xc6, 0x7b, 0x61, 0xfb, 0xa8, 0x5a, 0xfc, 0x85, 0x61, 0xbb, 0x2d, 0x03, 0x7f, 0x1b, 0xf0, 0xd7, 0x27, 0xc1, 0x88, 0x2b, 0x7f, 0x7f, 0x34, 0x17, 0x71, 0x33, 0x7a, 0x15, 0x63, 0xe5, 0xaa, 0xc3, 0xba, 0x09, 0x47, 0xb1, 0x2f, 0xce, 0x0b, 0x15, 0x45, 0xd8, 0x03, 0xff, 0x92, 0xe2, 0x28, 0x84, 0x48, 0xea, 0xc9, 0x39, 0x87, 0x23, 0x03, 0x9a, 0x3e, 0xfe, 0xc7, 0xfe, 0x50, 0xaf, 0xd9, 0x3f, 0x0a, 0x93, 0xbe, 0xc3, 0x5f, 0xff, 0xfe, 0xfa, 0xf7, 0xd7, 0xbf, 0xff, 0x67, 0xff, 0x5c, 0x35, 0x0b, 0xc7, 0xa3, 0xd5, 0x3f, 0xc8, 0x67, 0x28, 0x3e, 0x39, 0xd5, 0xad, 0x14, 0x5c, 0xcd, 0x52, 0x53, 0x8b, 0x30, 0x4b, 0x6a, 0x6e, 0x5c, 0x2a, 0x64, 0x78, 0x5a, 0x03, 0x2d, 0x8d, 0x41, 0xa1, 0x55, 0x46, 0x74, 0xbd, 0x14, 0x0c, 0x48, 0xab, 0x26, 0x0a, 0x38, 0x1b, 0xe1, 0xac, 0x15, 0xb9, 0x21, 0x14, 0x26, 0xe4, 0xcd, 0x5b, 0xe1, 0xc5, 0x79, 0xc8, 0x99, 0x20, 0x5b, 0xba, 0xde, 0x40, 0x3b, 0xe6, 0xc7, 0xf9, 0xe2, 0xf8, 0x04, 0xb2, 0x68, 0x7e, 0x09, 0x3e, 0x4f, 0xaf, 0xc4, 0x79, 0xa2, 0xb3, 0xc0, 0x8b, 0x57, 0x28, 0x94, 0x4d, 0x14, 0xfb, 0x6f, 0x5d, 0x68, 0x6d, 0xb7, 0x7b, 0x7f, 0xa7, 0x58, 0xd0, 0xc6, 0x6e, 0x2f, 0x5f, 0x8e, 0x3f, 0xc1, 0xf1, 0x10, 0x59, 0xc0, 0xee, 0x42, 0x70, 0x8c, 0xc1, 0x9c, 0x33, 0x27, 0x11, 0xdd, 0x8f, 0xaf, 0xaa, 0xf3, 0x4f, 0x9e, 0xf0, 0x10, 0xd9, 0x61, 0x25, 0x3d, 0xdd, 0xe9, 0x1d, 0xb3, 0x44, 0x48, 0x5f, 0x49, 0xf6, 0x59, 0xb5, 0xd8, 0x56, 0x07, 0xa5, 0xed, 0xb2, 0xe5, 0x02, 0x88, 0x8c, 0xfb, 0xe6, 0x75, 0x74, 0x7d, 0x3e, 0x48, 0xf6, 0xf3, 0xef, 0x06, 0x72, 0x3b, 0x8a, 0xbf, 0x03, 0xab, 0x73, 0x3b, 0x40, 0xd0, 0x9d, 0xce, 0xed, 0x70, 0xac, 0x81, 0x67, 0xf1, 0xba, 0x1f, 0x36, 0x20, 0xa6, 0x00, 0x36, 0xe2, 0xb5, 0x1b, 0x36, 0xe1, 0x15, 0x74, 0x66, 0x76, 0xb5, 0xb0, 0xab, 0x89, 0x5d, 0x31, 0xef, 0x46, 0x9c, 0x86, 0x59, 0x58, 0x8f, 0xf6, 0x9d, 0x3c, 0x84, 0x4f, 0x9c, 0x61, 0xaa, 0x0b, 0xb6, 0x24, 0x4d, 0x58, 0x01, 0x46, 0xc1, 0x7c, 0xae, 0xb3, 0x31, 0xb9, 0xa8, 0x07, 0x52, 0xfd, 0x10, 0xb8, 0xb3, 0x7b, 0xc1, 0x9c, 0x77, 0x23, 0x03, 0xa5, 0xce, 0xae, 0xc5, 0xe0, 0x93, 0x8d, 0x7e, 0x10, 0xf5, 0xfe, 0x48, 0xc5, 0x19, 0x83, 0xbe, 0xb2, 0x1d, 0xed, 0xed, 0xb6, 0xb8, 0x3a, 0xf5, 0xf7, 0xec, 0x4d, 0xbf, 0xba, 0xff, 0xfc, 0xdf, 0x1d, 0x81, 0x9b, 0x70, 0xe2, 0xff, 0x99, 0x72, 0xbe, 0xfe, 0xaf, 0xb2, 0xad, 0x74, 0xe0, 0x3e, 0x98, 0xf0, 0x7b, 0xe6, 0xc5, 0x64, 0xe6, 0xfe, 0x0a, 0xaf, 0x93, 0x72, 0x7f, 0x0f, 0x26, 0x84, 0x0e, 0x36, 0xcf, 0x9f, 0xf9, 0xd4, 0x94, 0x3b, 0x30, 0x8a, 0x60, 0x88, 0xd3, 0x92, 0x8e, 0x94, 0x8e, 0x50, 0x0e, 0x0b, 0xb3, 0xa9, 0x27, 0x5f, 0xa3, 0x99, 0xf0, 0xc9, 0x9c, 0x93, 0xaf, 0x0f, 0xc0, 0x4b, 0xb1, 0x29, 0x35, 0x87, 0x23, 0xd7, 0xab, 0x10, 0x5b, 0x6a, 0x15, 0xe1, 0xce, 0xa9, 0xd1, 0xb9, 0xac, 0x23, 0x16, 0xcc, 0x9f, 0x93, 0xcf, 0x00, 0x19, 0x8a, 0x9e, 0x73, 0xf1, 0x7c, 0x1e, 0x89, 0xa0, 0x66, 0x05, 0x85, 0x29, 0xa0, 0xef, 0xda, 0x87, 0x29, 0xd0, 0x98, 0x84, 0x10, 0x79, 0x34, 0xc4, 0x0b, 0xa4, 0x73, 0x41, 0x37, 0xf5, 0x67, 0x46, 0x65, 0xdb, 0xec, 0xcf, 0x09, 0x2b, 0xc1, 0x17, 0x93, 0x24, 0xec, 0x58, 0xeb, 0x4a, 0xf4, 0x35, 0x50, 0x23, 0x97, 0x15, 0x54, 0xae, 0x02, 0x23, 0xd3, 0xe6, 0x53, 0x18, 0x8a, 0x61, 0xa1, 0x0f, 0x31, 0x64, 0x62, 0xa1, 0x73, 0x18, 0x8a, 0x65, 0xa1, 0x0b, 0x18, 0x32, 0xb0, 0xd0, 0x07, 0xd7, 0xfa, 0xae, 0x9d, 0xfc, 0xcc, 0x3e, 0xeb, 0x73, 0x38, 0xd3, 0x0b, 0x13, 0xae, 0x30, 0x3e, 0x97, 0xcd, 0x59, 0xd8, 0x56, 0xbd, 0xdc, 0x27, 0xe0, 0x48, 0x99, 0xd1, 0x95, 0xdb, 0x8d, 0xd7, 0x5d, 0x13, 0x7a, 0x50, 0x1a, 0xdb, 0x67, 0xec, 0x36, 0x3f, 0x04, 0x31, 0xf0, 0xd3, 0xb3, 0x3a, 0x39, 0x31, 0xb5, 0x90, 0xc6, 0x55, 0xf5, 0x1a, 0xc5, 0xe2, 0xc8, 0x82, 0xb1, 0xe1, 0x0e, 0xd0, 0x2b, 0x57, 0x2b, 0x17, 0xa3, 0x5f, 0xb6, 0x7d, 0xc6, 0x9b, 0x13, 0x3e, 0xa7, 0x9c, 0xf8, 0xdb, 0xcb, 0xc6, 0xca, 0xae, 0x70, 0x87, 0x00, 0xb2, 0x89, 0xa5, 0x75, 0xb9, 0x69, 0xdc, 0x1d, 0xc0, 0x3a, 0xeb, 0x58, 0x9d, 0x2d, 0x95, 0xab, 0xcc, 0x3a, 0x56, 0x17, 0xc2, 0xe9, 0x19, 0xae, 0x05, 0xeb, 0xa7, 0x67, 0xb8, 0x43, 0x7e, 0x40, 0xac, 0x89, 0xb0, 0xb2, 0x6d, 0xc2, 0x80, 0x7b, 0x6e, 0xb5, 0x0f, 0x47, 0xdc, 0x9d, 0x98, 0x6e, 0x16, 0xe3, 0xb5, 0x76, 0x37, 0xa3, 0x2f, 0x62, 0xe6, 0xf4, 0x47, 0x58, 0xc9, 0x7b, 0xf1, 0x77, 0x8c, 0x49, 0x6c, 0xaf, 0x96, 0x5b, 0x31, 0x21, 0x8d, 0x41, 0x8c, 0x9f, 0x30, 0x50, 0x55, 0xe4, 0x9b, 0x86, 0xbd, 0x31, 0x80, 0x71, 0x33, 0xcb, 0x73, 0x9c, 0x8f, 0x77, 0x25, 0xa9, 0x72, 0x55, 0xa7, 0x0e, 0xdb, 0xd9, 0x0c, 0xdb, 0x46, 0x6e, 0x19, 0xdf, 0xc1, 0x34, 0xb3, 0x59, 0x34, 0x4a, 0xa0, 0x5f, 0x25, 0x81, 0x61, 0x21, 0x4a, 0x7a, 0xde, 0x84, 0x81, 0x48, 0x84, 0xfa, 0xa8, 0x8c, 0x3c, 0xcf, 0xed, 0x9e, 0x5f, 0x2a, 0x8b, 0x99, 0x35, 0x49, 0x54, 0xe2, 0xdd, 0x0c, 0xba, 0x19, 0x56, 0xf4, 0xf1, 0x56, 0x73, 0xf9, 0x51, 0xdb, 0x15, 0xdb, 0xa2, 0x4e, 0x87, 0xad, 0xc7, 0x73, 0xd6, 0x53, 0xd6, 0x5f, 0x35, 0xbd, 0xfb, 0x9a, 0x1e, 0x26, 0xa0, 0x54, 0x3d, 0x69, 0x02, 0xf6, 0xf2, 0x88, 0x0b, 0x19, 0x44, 0x77, 0x60, 0x22, 0x96, 0x38, 0xa2, 0x07, 0x6c, 0x2a, 0x8f, 0x24, 0xef, 0xc0, 0x94, 0x95, 0x44, 0x03, 0x7a, 0x11, 0xbe, 0x38, 0x8e, 0xb5, 0x28, 0xc0, 0x1a, 0x3c, 0xed, 0x28, 0x7c, 0x32, 0x32, 0xcd, 0x09, 0x5b, 0xf0, 0xf7, 0x3c, 0xfe, 0x5e, 0x40, 0x9c, 0x09, 0x6b, 0xe7, 0x94, 0x20, 0xf5, 0xa8, 0x26, 0xd3, 0x56, 0x21, 0xda, 0x6a, 0x2b, 0xab, 0xc3, 0xf1, 0xca, 0x6f, 0x76, 0x1a, 0x44, 0x4b, 0x34, 0x6c, 0x66, 0xa1, 0x37, 0x2b, 0xc5, 0x2c, 0x82, 0x7b, 0xa7, 0x53, 0x8f, 0xec, 0xe2, 0xb5, 0x50, 0xdb, 0x93, 0x08, 0xf3, 0x43, 0x30, 0xe1, 0x32, 0xa4, 0x61, 0x5b, 0xf7, 0xb8, 0xfa, 0xab, 0x9f, 0x9d, 0xe8, 0x81, 0x34, 0xeb, 0x1b, 0x5a, 0xeb, 0x6f, 0x49, 0xdf, 0x42, 0xe9, 0x54, 0xdf, 0x19, 0xbb, 0x41, 0x2f, 0x81, 0xee, 0x99, 0x68, 0xaf, 0xf1, 0x52, 0x8f, 0x54, 0x7e, 0x33, 0x64, 0x8e, 0xd6, 0x6f, 0x6c, 0xb4, 0xe7, 0xa2, 0xa9, 0x9d, 0x7a, 0xd6, 0x5f, 0x87, 0x2a, 0xbf, 0x09, 0xfa, 0xa8, 0x3e, 0x67, 0x31, 0xdc, 0x29, 0xc4, 0x19, 0x59, 0xe8, 0x43, 0x0c, 0xc5, 0xb0, 0xd0, 0x39, 0x0c, 0x99, 0x58, 0xe8, 0x02, 0x86, 0x62, 0xb9, 0x16, 0x53, 0x7c, 0x33, 0x9c, 0xeb, 0xbc, 0xe2, 0x49, 0xcd, 0x02, 0xe3, 0xb9, 0xef, 0x5c, 0x29, 0xdb, 0xe9, 0xa4, 0x7e, 0x72, 0xda, 0x95, 0x54, 0x37, 0x83, 0xae, 0xcf, 0xc1, 0x18, 0x02, 0x1c, 0xa3, 0x38, 0xb6, 0x84, 0x42, 0x30, 0xc4, 0xa6, 0x5c, 0xe8, 0x14, 0x7e, 0x2d, 0xfc, 0x1a, 0x7d, 0xd6, 0x7e, 0x46, 0x79, 0xa7, 0x92, 0x40, 0x12, 0x40, 0xc9, 0xa5, 0x09, 0xab, 0x3e, 0xeb, 0xc0, 0x7a, 0xe9, 0xc4, 0x64, 0x55, 0x3f, 0xe2, 0x49, 0x3f, 0xc6, 0xaf, 0x24, 0xed, 0xe0, 0x7a, 0x01, 0x9d, 0x15, 0x9f, 0x3f, 0x19, 0x19, 0x3a, 0x2e, 0xd9, 0xe8, 0xfe, 0x24, 0x74, 0x98, 0xcb, 0xd2, 0x35, 0xe8, 0x15, 0xd7, 0xfc, 0x70, 0x80, 0x8d, 0x67, 0xcb, 0x0f, 0x99, 0x4d, 0x68, 0xd0, 0x67, 0x6c, 0xa8, 0xed, 0xac, 0x7d, 0x06, 0xcb, 0xbd, 0xc0, 0x7d, 0x67, 0x26, 0x87, 0x03, 0x83, 0x1e, 0x74, 0xc5, 0x99, 0x31, 0x3a, 0xb2, 0xe1, 0x91, 0x1b, 0xd2, 0x6b, 0xbc, 0x46, 0xb2, 0x65, 0xfc, 0x80, 0xaa, 0x93, 0x66, 0x57, 0x7f, 0xff, 0x22, 0xaa, 0x1b, 0xb7, 0xf4, 0xd1, 0x74, 0xe2, 0xd4, 0x89, 0xe9, 0x5c, 0xaa, 0x07, 0x88, 0xa2, 0xb2, 0x7d, 0x0a, 0x68, 0x72, 0xaf, 0x9f, 0x14, 0x95, 0x7b, 0x0a, 0x8d, 0x30, 0x8c, 0x19, 0x58, 0x4e, 0x63, 0xa8, 0xc3, 0x0c, 0xa1, 0x0e, 0x30, 0x93, 0xf4, 0x45, 0x23, 0x49, 0x53, 0x18, 0x47, 0xa5, 0xcf, 0x2c, 0xf4, 0x43, 0x59, 0x1f, 0xd8, 0xb2, 0x12, 0x4b, 0xfa, 0xc1, 0x97, 0xb1, 0xbe, 0x04, 0x25, 0x17, 0x1f, 0xae, 0x5c, 0x65, 0xd7, 0xf9, 0x75, 0x33, 0xaf, 0xd9, 0x21, 0x73, 0x4c, 0xfa, 0xa6, 0xf2, 0xdf, 0x42, 0xca, 0xa4, 0x3b, 0x26, 0x6d, 0x42, 0x8a, 0xb4, 0xca, 0x55, 0x36, 0xbd, 0x5f, 0x8f, 0x21, 0x4b, 0xef, 0x14, 0x0b, 0x44, 0x06, 0xfc, 0x06, 0x0c, 0xa3, 0xdc, 0x6c, 0x26, 0x3f, 0x8e, 0x51, 0xbb, 0xd9, 0x6f, 0x9a, 0xf4, 0xad, 0xf4, 0x75, 0x19, 0xdf, 0xae, 0x38, 0x53, 0x78, 0x0e, 0x6b, 0xe6, 0x05, 0xb4, 0x7c, 0x28, 0xaf, 0x3e, 0x94, 0xd4, 0xf7, 0x7b, 0x81, 0xcf, 0x82, 0x19, 0x65, 0x28, 0x85, 0x19, 0xa9, 0x27, 0x99, 0x1c, 0xfa, 0xcb, 0x18, 0x0e, 0x2d, 0x8c, 0xfe, 0x21, 0x27, 0xe8, 0x43, 0x1d, 0x21, 0x78, 0x88, 0x34, 0xbf, 0x03, 0xe5, 0xfe, 0x3c, 0x62, 0x53, 0x30, 0x96, 0xa2, 0x62, 0xb7, 0x30, 0xec, 0x16, 0xb2, 0x46, 0x18, 0x1b, 0xab, 0x62, 0x5f, 0x60, 0xd8, 0x17, 0x10, 0x6b, 0xc3, 0x98, 0x4d, 0xc5, 0xbe, 0x38, 0x91, 0x24, 0x74, 0x19, 0x8c, 0x15, 0x67, 0xc6, 0x31, 0x39, 0x87, 0x9c, 0xbc, 0xf4, 0xc9, 0x4d, 0x20, 0x80, 0x30, 0xad, 0x09, 0xd7, 0xad, 0x79, 0xd3, 0x9a, 0x74, 0xe7, 0x75, 0xe7, 0x11, 0x73, 0x16, 0xce, 0x62, 0xd8, 0xaa, 0xb3, 0xe2, 0x55, 0xaf, 0xd3, 0x63, 0xea, 0x6a, 0x58, 0x8d, 0xd7, 0x17, 0xe1, 0x45, 0xc4, 0x9c, 0xd6, 0x9d, 0x46, 0x9a, 0x67, 0xe1, 0x59, 0xbc, 0x6e, 0x84, 0x8d, 0x88, 0x19, 0xd0, 0x21, 0x1f, 0x9d, 0x59, 0x67, 0xc6, 0xb0, 0x49, 0x67, 0xc2, 0x30, 0x76, 0x00, 0xd2, 0x3f, 0x8f, 0x35, 0x6f, 0x82, 0x17, 0xb0, 0x4e, 0x4d, 0xb0, 0x05, 0xb6, 0x54, 0x9c, 0xd1, 0xb3, 0xb2, 0x21, 0x3c, 0x66, 0x00, 0xc2, 0xf0, 0xd3, 0xe3, 0x80, 0x30, 0x02, 0x3f, 0xfd, 0x05, 0x41, 0x03, 0xfc, 0xf4, 0x9c, 0x6e, 0x0c, 0xcd, 0x36, 0x3f, 0xbd, 0x42, 0xb0, 0x13, 0x7e, 0xfa, 0x3b, 0x1d, 0x4f, 0x7f, 0x1f, 0x48, 0x9b, 0xbd, 0x37, 0xa6, 0x75, 0xe0, 0x1c, 0x94, 0x87, 0xb3, 0x36, 0x70, 0x2e, 0x5a, 0xa8, 0x37, 0x44, 0x9a, 0x77, 0xe7, 0xdb, 0x4c, 0xa3, 0x7d, 0x8a, 0x89, 0xc5, 0x0e, 0xfb, 0x2b, 0xf8, 0x3a, 0xba, 0xda, 0xb5, 0x5c, 0x9f, 0x68, 0x97, 0xa0, 0x2d, 0xd5, 0xe7, 0x9c, 0xf3, 0x5e, 0xe4, 0xba, 0xab, 0xff, 0xf7, 0x5d, 0x82, 0x99, 0x68, 0x3c, 0x1f, 0x04, 0xcc, 0x12, 0x3c, 0x61, 0xd2, 0xe8, 0xfc, 0x53, 0x96, 0xc7, 0x12, 0x65, 0xa0, 0x8f, 0x53, 0x56, 0x9c, 0xd1, 0x8d, 0xaa, 0x6c, 0x2f, 0x1d, 0x10, 0x60, 0x70, 0xcd, 0x3f, 0x8d, 0x3c, 0x8e, 0xd3, 0xa2, 0x69, 0x1a, 0xf3, 0x5a, 0xc8, 0x9b, 0x79, 0xf7, 0xb2, 0x04, 0xbe, 0x45, 0x7c, 0x04, 0xd0, 0x88, 0x2c, 0xc3, 0xb5, 0xe2, 0x44, 0x94, 0x3c, 0x5a, 0xaa, 0x62, 0x3f, 0xb8, 0xae, 0xe8, 0x9c, 0x81, 0x3b, 0x84, 0x30, 0x79, 0x1f, 0x12, 0xc4, 0x16, 0xb3, 0x3a, 0xde, 0x23, 0x37, 0x4b, 0x30, 0xad, 0x93, 0x85, 0x93, 0x95, 0x24, 0x96, 0xeb, 0x5a, 0x80, 0xd5, 0x29, 0x31, 0x20, 0xc1, 0x32, 0x5c, 0x79, 0x2e, 0x37, 0xb1, 0xd4, 0xbb, 0x6f, 0x4a, 0xfd, 0x1e, 0xa6, 0x9e, 0x92, 0xa0, 0xbd, 0x47, 0x82, 0xa0, 0x87, 0xd9, 0x60, 0xb4, 0x92, 0x63, 0x83, 0x4c, 0xff, 0xf7, 0x52, 0x6d, 0x8e, 0xec, 0x93, 0xc0, 0x73, 0x95, 0xcd, 0x0a, 0xbb, 0x31, 0x35, 0x53, 0x02, 0xef, 0x69, 0x66, 0x0b, 0x92, 0x18, 0xbf, 0x14, 0xc5, 0x44, 0x73, 0xb3, 0x33, 0x89, 0x46, 0xf0, 0x5b, 0x9b, 0x24, 0x28, 0x49, 0x16, 0xc8, 0x76, 0xa0, 0x0d, 0xe9, 0xea, 0x80, 0xde, 0x65, 0x57, 0x51, 0xe2, 0x4f, 0x62, 0xfa, 0x2c, 0xd5, 0xbb, 0x4b, 0x56, 0xbd, 0xbb, 0x04, 0xe6, 0xdd, 0x59, 0xb9, 0x77, 0xc7, 0x3d, 0x39, 0x09, 0x6e, 0xac, 0x0b, 0x42, 0x22, 0xd1, 0x4d, 0xc8, 0x3d, 0x80, 0x79, 0xf2, 0xb8, 0xe6, 0x4d, 0xeb, 0x78, 0x0a, 0x48, 0x63, 0xc3, 0x02, 0x6c, 0xf1, 0xeb, 0x59, 0xd9, 0xe3, 0x59, 0xd9, 0xe3, 0x95, 0x3e, 0xd4, 0xf0, 0x5e, 0x56, 0xeb, 0x79, 0xcc, 0xee, 0xce, 0x93, 0x8d, 0x95, 0x01, 0x01, 0xc8, 0x17, 0xb0, 0x11, 0xc5, 0x2c, 0xea, 0x09, 0xe7, 0x3c, 0xc5, 0x5e, 0xcd, 0x52, 0xab, 0x5d, 0xd4, 0x66, 0x67, 0xad, 0xcd, 0x66, 0xeb, 0x01, 0x1d, 0x4a, 0xb0, 0x9f, 0xfa, 0x22, 0x01, 0xba, 0x18, 0xad, 0x62, 0x1b, 0x5e, 0xba, 0x68, 0x65, 0x3c, 0xf3, 0x96, 0x1a, 0x6d, 0xe8, 0x8d, 0x8c, 0xa1, 0x3b, 0x29, 0xb3, 0xc8, 0x5f, 0x75, 0x56, 0x48, 0x10, 0x73, 0x89, 0xcb, 0x5d, 0xc1, 0xb9, 0x03, 0xf6, 0x90, 0x2d, 0xb3, 0xbe, 0xc9, 0x30, 0x49, 0x0a, 0x44, 0x96, 0x93, 0x44, 0x3c, 0x27, 0xa8, 0x16, 0x7c, 0x44, 0xf1, 0xd1, 0xc6, 0x5b, 0xa3, 0xf6, 0x17, 0xe6, 0x08, 0x9c, 0xc4, 0x39, 0x29, 0x85, 0xc9, 0xb8, 0x4a, 0x82, 0xd9, 0x87, 0x67, 0x90, 0x4e, 0xf6, 0xae, 0x30, 0xcc, 0xc4, 0xdc, 0xde, 0xcb, 0xab, 0x0c, 0xde, 0xbb, 0x15, 0x4b, 0xee, 0x41, 0xc2, 0x49, 0xf0, 0xcd, 0xa3, 0xbe, 0xe2, 0x39, 0x3f, 0x8b, 0x5c, 0xc9, 0x3d, 0x43, 0xf1, 0xca, 0xf6, 0xa1, 0x6d, 0x56, 0xfa, 0x18, 0xcf, 0xda, 0xa5, 0x97, 0xa8, 0x44, 0x9e, 0xe2, 0xe7, 0xed, 0xaf, 0xd5, 0xa4, 0x4f, 0xed, 0x9c, 0xc2, 0x67, 0xad, 0xab, 0x36, 0x07, 0xda, 0xee, 0xc7, 0xb9, 0x6d, 0x64, 0xb3, 0xf0, 0x09, 0xf4, 0xe1, 0x77, 0xb0, 0x59, 0xf3, 0x04, 0xf9, 0x16, 0xa4, 0x01, 0x33, 0x01, 0x25, 0xb5, 0x2d, 0xb1, 0x46, 0x82, 0xa5, 0xc7, 0xa8, 0x3e, 0x9e, 0x0c, 0xa6, 0x8f, 0xbb, 0x3b, 0x62, 0x1c, 0x4c, 0xb7, 0x37, 0x74, 0xc0, 0x88, 0x37, 0xfe, 0x55, 0x71, 0xfa, 0xd6, 0x61, 0x0f, 0xf4, 0x75, 0xc4, 0x70, 0x9a, 0xe9, 0x2c, 0xed, 0x45, 0x4c, 0x4b, 0x3f, 0x3a, 0xc5, 0x2a, 0x41, 0xf9, 0x1e, 0x92, 0xf7, 0xcc, 0x90, 0x3f, 0x96, 0x5a, 0xd9, 0xfd, 0x74, 0xc6, 0xe3, 0x27, 0xc3, 0x1c, 0x83, 0x7c, 0x97, 0xcf, 0xf9, 0x79, 0xe4, 0x94, 0xe7, 0x9f, 0xc3, 0x50, 0xf1, 0x06, 0x59, 0x51, 0x4f, 0xb7, 0xd7, 0xb9, 0xd4, 0x9c, 0x58, 0x08, 0x82, 0x04, 0xad, 0x55, 0x15, 0xff, 0x08, 0x06, 0xff, 0x88, 0x54, 0x93, 0x47, 0x4d, 0x43, 0xfc, 0x74, 0xc4, 0x17, 0xb0, 0xfe, 0xab, 0xe8, 0xc2, 0xfe, 0xc0, 0x3a, 0x77, 0x22, 0xac, 0x94, 0xed, 0xb6, 0x7d, 0xf0, 0x24, 0x7a, 0x95, 0x3a, 0x9a, 0x77, 0xb9, 0x2e, 0x72, 0xf9, 0x63, 0xea, 0x2c, 0xb9, 0x8e, 0x52, 0xb5, 0x12, 0x52, 0xa9, 0x0d, 0x37, 0x0e, 0x0c, 0x40, 0xd5, 0x2f, 0xf6, 0x5b, 0xb3, 0xc1, 0x0b, 0x3a, 0xd9, 0x86, 0xb0, 0x1a, 0x7d, 0x35, 0x33, 0x42, 0x1f, 0x18, 0x14, 0x3b, 0x42, 0x37, 0xe2, 0x93, 0x54, 0x7c, 0x3c, 0xc7, 0xcb, 0x4c, 0xcb, 0x3d, 0xbf, 0xbc, 0x5d, 0x39, 0x7c, 0x0e, 0x11, 0xfe, 0x73, 0xff, 0x2c, 0xc0, 0x7c, 0x62, 0xa7, 0xa0, 0x54, 0x30, 0x8d, 0x17, 0xa8, 0x6f, 0x99, 0x17, 0x6c, 0x56, 0x67, 0x2b, 0xb3, 0x36, 0x5b, 0xa1, 0xed, 0x0d, 0xfb, 0x21, 0x37, 0x4c, 0x5e, 0xf5, 0x04, 0xba, 0x86, 0xb0, 0x9f, 0xb7, 0xc5, 0x3a, 0xc8, 0x1e, 0xff, 0x10, 0x67, 0xcf, 0x7b, 0x23, 0x6c, 0x7e, 0xc6, 0x19, 0xd1, 0x80, 0xd6, 0x92, 0x73, 0x95, 0xdd, 0xac, 0x05, 0x42, 0x94, 0x97, 0x3a, 0x33, 0x12, 0xaf, 0x9b, 0x73, 0x6b, 0xf3, 0xa9, 0x41, 0x47, 0x35, 0x29, 0x45, 0x0b, 0xa7, 0x3f, 0x46, 0xfa, 0x44, 0x96, 0x0c, 0xf5, 0x8d, 0xad, 0x02, 0xf9, 0xfc, 0x8d, 0x39, 0xfb, 0xc0, 0x38, 0xb7, 0x93, 0xdd, 0x0f, 0x3c, 0xf3, 0x29, 0xa8, 0xbe, 0xfe, 0xe9, 0xca, 0x6e, 0xd2, 0x35, 0xee, 0x23, 0xb3, 0x72, 0xc7, 0x0b, 0x53, 0x3f, 0x7d, 0x35, 0x6a, 0x03, 0x2b, 0xa6, 0x75, 0x6c, 0xd4, 0xe9, 0x60, 0x32, 0xae, 0xd8, 0xfe, 0xb8, 0x1f, 0x9e, 0xe5, 0x16, 0x71, 0xb2, 0x13, 0xe7, 0x8c, 0x0e, 0x2b, 0xae, 0xcf, 0x58, 0xdc, 0x3a, 0x0d, 0x6b, 0x05, 0x76, 0x5d, 0x88, 0xc1, 0x64, 0xdd, 0xda, 0xc9, 0x1d, 0x50, 0x08, 0x27, 0x70, 0xb6, 0x60, 0xeb, 0x39, 0x76, 0x1d, 0x10, 0x01, 0x7a, 0xa2, 0xf7, 0x4e, 0x01, 0x36, 0x11, 0x8f, 0xc9, 0x1d, 0x99, 0x25, 0xf0, 0x31, 0xce, 0x2d, 0x68, 0x5f, 0x61, 0x31, 0xd1, 0xdf, 0xdd, 0xa9, 0x3b, 0x3d, 0xad, 0x23, 0xc1, 0x85, 0x33, 0x8a, 0x9a, 0x37, 0xd2, 0xa5, 0xb3, 0x70, 0x0e, 0x78, 0xfd, 0x86, 0x2e, 0x8c, 0x57, 0xb3, 0xee, 0x20, 0x5e, 0xe3, 0x75, 0x1f, 0xe2, 0x35, 0x45, 0x77, 0x00, 0xaf, 0x63, 0x75, 0x87, 0xf0, 0x5a, 0xaa, 0x3b, 0x37, 0xad, 0x43, 0x6f, 0xd5, 0x1d, 0x66, 0xf4, 0x47, 0xf1, 0x6a, 0xd0, 0x61, 0x3d, 0xf5, 0xa0, 0x3b, 0x8f, 0xe1, 0x18, 0xdd, 0x11, 0xbc, 0xde, 0xa3, 0x3b, 0x86, 0x35, 0x1f, 0x8f, 0x35, 0xbf, 0xa9, 0xce, 0xa2, 0x67, 0xb0, 0xa5, 0x99, 0xbc, 0xa5, 0xc2, 0xbf, 0xaf, 0xa5, 0x83, 0x56, 0x64, 0xd9, 0x58, 0xd5, 0x4a, 0x99, 0x98, 0x8d, 0xcb, 0x43, 0x7b, 0xf4, 0x82, 0x64, 0x25, 0xce, 0xf0, 0x02, 0xd3, 0x4c, 0xf4, 0x0f, 0xc2, 0x87, 0xb8, 0xec, 0xd1, 0x26, 0xe0, 0x1c, 0x68, 0x06, 0xd4, 0x73, 0x3f, 0x85, 0x2f, 0xeb, 0x4a, 0xe1, 0x9c, 0x1d, 0xc7, 0xc9, 0x0a, 0x05, 0x6e, 0xe4, 0x21, 0x2c, 0xe1, 0x7a, 0xee, 0xac, 0x66, 0xfc, 0x37, 0xcb, 0xe4, 0x07, 0xcf, 0x60, 0x36, 0xc6, 0xc9, 0x2d, 0x27, 0xb7, 0xa7, 0xa3, 0x43, 0x36, 0xf0, 0x71, 0x0b, 0x04, 0x4b, 0x4d, 0x4c, 0x3f, 0x37, 0xe3, 0x5a, 0xcc, 0x44, 0x33, 0x6d, 0x40, 0x6f, 0xc3, 0xd5, 0x4f, 0x17, 0xfe, 0x94, 0x7e, 0xb4, 0xb0, 0xd7, 0xcc, 0x6f, 0x70, 0x7c, 0xc5, 0x99, 0x7a, 0x03, 0x9b, 0x5b, 0xc3, 0xda, 0x4c, 0x49, 0xf3, 0x90, 0xe7, 0x1c, 0x8e, 0xea, 0x0f, 0x38, 0xc6, 0x3f, 0x2e, 0x3a, 0xbf, 0xb2, 0x59, 0x73, 0xe9, 0x01, 0x3e, 0x6b, 0xe6, 0x31, 0xbb, 0x78, 0xa2, 0x10, 0x26, 0xfb, 0x13, 0x34, 0x0a, 0x4c, 0x7d, 0x89, 0x34, 0xd4, 0x7b, 0xd5, 0xc1, 0x52, 0xbb, 0x9d, 0x8e, 0x6c, 0xe8, 0xe7, 0x7c, 0xce, 0x79, 0x02, 0x90, 0x50, 0x08, 0x6b, 0x91, 0xf3, 0x4b, 0xfe, 0xd8, 0x28, 0x4f, 0x1d, 0x4b, 0xfd, 0x15, 0xe3, 0xbc, 0x58, 0x9b, 0x8f, 0x0d, 0xa3, 0xa8, 0x4e, 0x61, 0xf0, 0xc3, 0x20, 0xe7, 0x25, 0xc5, 0x98, 0xfa, 0x6e, 0xa4, 0xaf, 0xe2, 0x0c, 0x60, 0x8d, 0xb9, 0xc5, 0xb1, 0xd9, 0xb8, 0xcd, 0x31, 0x7d, 0x80, 0x50, 0x5c, 0x46, 0xb1, 0xba, 0x16, 0x0b, 0x93, 0x55, 0x25, 0x59, 0x18, 0x8c, 0x9f, 0x65, 0xd8, 0x73, 0x2d, 0x16, 0x26, 0x0f, 0x0d, 0x5b, 0x2f, 0x73, 0xaa, 0xd9, 0x6a, 0xfc, 0x37, 0x32, 0x4f, 0xd7, 0xe2, 0x0d, 0x8a, 0x09, 0xaf, 0x8d, 0x2a, 0x55, 0x95, 0x8a, 0x3d, 0xcf, 0xb0, 0x1f, 0xab, 0xb4, 0x1a, 0x56, 0x66, 0x58, 0x45, 0xa5, 0x9d, 0xa3, 0x62, 0x2f, 0x30, 0xec, 0x27, 0x2a, 0x2d, 0xc3, 0x62, 0xaf, 0x80, 0x29, 0x93, 0x6c, 0xb2, 0xb3, 0x40, 0xd5, 0x14, 0xd0, 0x77, 0xb2, 0xfe, 0x4d, 0x97, 0xd0, 0xbd, 0x25, 0x1a, 0x77, 0x35, 0x6b, 0xb1, 0x71, 0xe7, 0x52, 0xd0, 0xb7, 0xe0, 0x98, 0x56, 0xac, 0xd5, 0x18, 0xf2, 0x2d, 0xa5, 0xd5, 0xc7, 0xd2, 0x5e, 0xa4, 0x7d, 0x54, 0x4e, 0x60, 0x79, 0xab, 0x14, 0x0b, 0x59, 0xef, 0xa3, 0x8b, 0xd4, 0xf2, 0x8a, 0x58, 0x79, 0xc5, 0x32, 0xae, 0x9c, 0x9b, 0x93, 0x6e, 0xc7, 0x49, 0x3e, 0x30, 0xc8, 0xc9, 0xd4, 0x89, 0xdc, 0xb6, 0x23, 0xfd, 0x6c, 0x39, 0x8f, 0x68, 0x31, 0x76, 0x8e, 0x71, 0xad, 0x54, 0x8c, 0xee, 0x6a, 0x31, 0xc5, 0x5b, 0x2d, 0x27, 0xe5, 0xef, 0x83, 0x2a, 0xef, 0x52, 0xb2, 0xc1, 0x3c, 0x8f, 0xf2, 0x02, 0xe5, 0xaf, 0xae, 0xa6, 0x7e, 0x62, 0x16, 0x7e, 0xba, 0x9a, 0x73, 0x87, 0x9a, 0xd3, 0x84, 0x39, 0x66, 0x8b, 0x69, 0xd6, 0x6a, 0x98, 0xbd, 0x2c, 0x25, 0x7f, 0x5f, 0x24, 0x32, 0xb4, 0xfc, 0x6a, 0xc6, 0x43, 0x9e, 0x4e, 0xbc, 0x7c, 0xc4, 0x23, 0x0d, 0x79, 0x54, 0xa0, 0x35, 0xd8, 0xab, 0x72, 0xa9, 0x53, 0xb9, 0xd8, 0x72, 0xee, 0x07, 0xbd, 0x1b, 0xa9, 0xbc, 0x2e, 0xc5, 0x87, 0x96, 0xe3, 0x79, 0x86, 0x9f, 0xad, 0x94, 0xa2, 0x0d, 0x0c, 0xb9, 0xab, 0x03, 0xa3, 0xd8, 0x78, 0x7a, 0x41, 0xbf, 0x12, 0x46, 0x11, 0x24, 0x3d, 0x73, 0xbe, 0x10, 0xc6, 0xb9, 0x83, 0x69, 0xc4, 0x8b, 0xef, 0x87, 0xbd, 0xb6, 0x79, 0xef, 0x46, 0x4e, 0x4b, 0xd0, 0xf0, 0xaa, 0xab, 0x07, 0x66, 0x5b, 0xd1, 0xeb, 0x95, 0x8d, 0xd5, 0xd5, 0x22, 0x79, 0x79, 0x3a, 0xb1, 0x94, 0xb5, 0xa8, 0x30, 0xa8, 0x1b, 0x6c, 0x6d, 0xd0, 0x86, 0x56, 0x90, 0xdd, 0x13, 0x70, 0xa6, 0x79, 0x77, 0x80, 0x75, 0x1e, 0xce, 0xb0, 0xa1, 0xb1, 0x58, 0xd7, 0xdd, 0x42, 0x06, 0x58, 0x15, 0x4b, 0xaa, 0xb3, 0xf2, 0x39, 0x05, 0x47, 0xf4, 0x17, 0x7e, 0xf4, 0xa9, 0x23, 0xa2, 0x91, 0xb7, 0x64, 0x49, 0x03, 0x9b, 0xc7, 0x00, 0x0e, 0xf3, 0xfa, 0x2f, 0xd9, 0xae, 0x72, 0xb4, 0x53, 0xfd, 0x1f, 0xa4, 0x67, 0x42, 0x46, 0xd0, 0xef, 0x64, 0x90, 0xb5, 0xe3, 0x85, 0x9b, 0xdb, 0xe1, 0xfb, 0x9a, 0xed, 0xa8, 0x3f, 0x7f, 0x9b, 0x76, 0x54, 0x0c, 0x91, 0xed, 0x57, 0xb5, 0xc6, 0xa6, 0xb5, 0xa6, 0xe1, 0x18, 0xb6, 0xc6, 0x36, 0xd8, 0x9a, 0x81, 0xed, 0xbc, 0x35, 0xbc, 0x6f, 0x9b, 0x9e, 0xc7, 0xd6, 0xcc, 0x93, 0x97, 0x53, 0x5b, 0x4a, 0xb9, 0x07, 0x55, 0x88, 0xd8, 0x63, 0xa9, 0x85, 0xf4, 0xb4, 0x6a, 0xf8, 0x53, 0xae, 0xe3, 0x6b, 0xf9, 0xf3, 0x2d, 0xe4, 0xf1, 0x18, 0xd3, 0xf8, 0x7b, 0x26, 0x30, 0x8d, 0xc6, 0x5f, 0x21, 0x9f, 0x79, 0xc5, 0x2c, 0xcc, 0xbb, 0x91, 0x61, 0x0b, 0x29, 0x85, 0x2c, 0xc2, 0x8c, 0x1b, 0x15, 0x17, 0x71, 0xb6, 0x37, 0xb2, 0x9a, 0xd6, 0xc8, 0xfa, 0xfd, 0xae, 0xd4, 0x35, 0xc8, 0x21, 0x05, 0x29, 0x93, 0xb1, 0xec, 0x05, 0xb2, 0x83, 0x8d, 0x10, 0x3e, 0x2a, 0xd2, 0x10, 0xeb, 0x8b, 0xe6, 0x32, 0x81, 0xb1, 0x54, 0xcd, 0xf5, 0x96, 0x3b, 0x15, 0xed, 0xc7, 0x9f, 0x2e, 0x48, 0xb0, 0xf8, 0x7c, 0x74, 0x04, 0x9d, 0xc2, 0xfc, 0x55, 0x72, 0x15, 0xef, 0x87, 0xa6, 0x64, 0xee, 0x4d, 0x90, 0x75, 0x2a, 0xd5, 0x53, 0x7d, 0x7f, 0x71, 0x20, 0xb5, 0x90, 0xa6, 0x6e, 0x86, 0x31, 0xb2, 0x76, 0xe8, 0x7d, 0x6e, 0x4c, 0x49, 0xac, 0x76, 0xa7, 0xee, 0x9f, 0x73, 0x84, 0xfc, 0xf5, 0x3f, 0x6d, 0x0a, 0x70, 0x4b, 0xa3, 0x67, 0x4f, 0xe6, 0xd0, 0xd3, 0x5a, 0xfc, 0x34, 0x72, 0x9d, 0x23, 0x17, 0x10, 0x57, 0xea, 0x31, 0xbe, 0xf2, 0x28, 0xfd, 0xca, 0x95, 0x87, 0xbc, 0x23, 0xba, 0x9e, 0xd0, 0x61, 0xee, 0xb9, 0x72, 0x92, 0xd6, 0xa6, 0xb2, 0xcb, 0xe4, 0x91, 0xce, 0xda, 0x4a, 0x1e, 0xe9, 0xac, 0xc3, 0x98, 0xe6, 0x42, 0xcd, 0x09, 0x45, 0x5b, 0x5c, 0xa9, 0xe4, 0x60, 0x89, 0xe2, 0x0c, 0xe0, 0x75, 0x77, 0xa0, 0x06, 0x91, 0x26, 0xfc, 0x22, 0xec, 0x9f, 0x9d, 0x30, 0x00, 0x02, 0xad, 0x17, 0xdd, 0xd5, 0x84, 0x95, 0xa0, 0x71, 0xba, 0x63, 0x1c, 0x8e, 0xc5, 0x0b, 0xa2, 0xd3, 0x5b, 0x4d, 0x7d, 0xb4, 0x78, 0x12, 0xcf, 0x73, 0xfc, 0x17, 0xd5, 0x65, 0xa4, 0x79, 0xdc, 0x8b, 0x2a, 0xb9, 0x08, 0xba, 0xc0, 0xec, 0x8d, 0xd5, 0x09, 0xa7, 0x68, 0x3d, 0x42, 0x3c, 0x66, 0x00, 0xcf, 0xdf, 0x70, 0xc3, 0x31, 0x8e, 0xc6, 0xb0, 0xf2, 0x12, 0xd6, 0xa2, 0x14, 0x6b, 0x71, 0x84, 0xcb, 0x4d, 0xe1, 0xe3, 0xbf, 0x4a, 0x5e, 0xa2, 0xd6, 0x48, 0xe5, 0x3b, 0xc8, 0xb3, 0xe8, 0x22, 0x54, 0x95, 0x5c, 0x8c, 0x44, 0x02, 0x95, 0x1b, 0xab, 0x97, 0xe6, 0x8c, 0x49, 0x25, 0xce, 0x89, 0xfb, 0x40, 0x10, 0xd3, 0xb5, 0x1a, 0xdc, 0x5a, 0xbe, 0xa8, 0xbf, 0x4d, 0x0d, 0x3a, 0x58, 0x0b, 0xd2, 0xc4, 0x4a, 0xbc, 0x36, 0xbb, 0xab, 0xd3, 0xa2, 0xe5, 0x04, 0x21, 0x4f, 0x47, 0x3d, 0x56, 0x72, 0x35, 0x03, 0x8a, 0x2e, 0x41, 0x95, 0x7f, 0x4c, 0x1a, 0xf3, 0x90, 0x1c, 0x3a, 0xcc, 0x55, 0xea, 0x73, 0xf1, 0xd1, 0x24, 0xf7, 0x20, 0x7e, 0x80, 0x7a, 0x94, 0x7c, 0x5c, 0x96, 0x86, 0x36, 0x4f, 0x26, 0xbf, 0xf2, 0x71, 0x79, 0x12, 0xb5, 0x66, 0x0a, 0x5b, 0x43, 0xdd, 0xf9, 0xb1, 0x04, 0x22, 0xb7, 0x1e, 0xd5, 0x0a, 0xbb, 0xfb, 0xe4, 0xac, 0x26, 0xfc, 0x1d, 0x4b, 0x10, 0xbf, 0x41, 0x78, 0x1c, 0xe9, 0xdd, 0xd8, 0xfe, 0x17, 0xa2, 0xbd, 0x50, 0x25, 0xa3, 0x3c, 0xe5, 0x53, 0x83, 0xed, 0xf6, 0xb9, 0xb4, 0xd6, 0x60, 0xab, 0x59, 0x6b, 0x78, 0xab, 0xc7, 0x14, 0x0e, 0xb6, 0xa6, 0xfe, 0x35, 0x6a, 0x8d, 0x3c, 0x4f, 0xf4, 0xe1, 0xf5, 0xc5, 0x68, 0x6b, 0x98, 0xae, 0xf9, 0x5c, 0xc3, 0x5b, 0x14, 0xe9, 0xc2, 0xb5, 0xe7, 0x98, 0x7b, 0xc7, 0x6b, 0x6d, 0xaa, 0x0f, 0x54, 0xbb, 0x68, 0x04, 0xcb, 0x97, 0x10, 0x5b, 0x38, 0xb4, 0x45, 0xf5, 0xb5, 0xc8, 0x4d, 0xaf, 0xcd, 0x72, 0xb4, 0x46, 0xfb, 0xd6, 0x11, 0xc5, 0x88, 0x35, 0x75, 0xe2, 0x0a, 0x42, 0x9d, 0xf3, 0xe0, 0x80, 0x36, 0xa7, 0xc0, 0x1e, 0xa4, 0x4e, 0x65, 0xf5, 0xbe, 0xaa, 0xd9, 0x62, 0x16, 0xbb, 0xae, 0xce, 0x14, 0x3c, 0xd6, 0x9f, 0x98, 0x0d, 0xc0, 0x64, 0x83, 0xdc, 0xbc, 0x36, 0x05, 0x75, 0x76, 0xc8, 0x5c, 0xe4, 0x53, 0x0a, 0xc8, 0x72, 0x37, 0x2f, 0xe4, 0xed, 0x4f, 0x2b, 0x3b, 0xfe, 0x8b, 0x41, 0x3d, 0xfc, 0x65, 0xb8, 0x04, 0xfb, 0xa3, 0xec, 0x52, 0x24, 0x72, 0x47, 0xda, 0x1b, 0xef, 0xca, 0xfd, 0x09, 0x6b, 0x7d, 0xaa, 0x3e, 0xd6, 0xbd, 0x26, 0x66, 0x54, 0x7c, 0x0f, 0x0c, 0x58, 0xe7, 0x1c, 0x5f, 0x35, 0x72, 0xa8, 0x5a, 0x66, 0x1f, 0x36, 0xf3, 0xa0, 0xde, 0x8b, 0x1e, 0x6e, 0x67, 0xbc, 0x36, 0xf9, 0x19, 0x37, 0x6b, 0x8b, 0xf0, 0x38, 0x6a, 0x72, 0x2a, 0x5b, 0xeb, 0xf4, 0xf1, 0x3a, 0x10, 0xb7, 0x6a, 0x27, 0x5b, 0x09, 0xdd, 0xa0, 0x32, 0xdf, 0x0f, 0xd3, 0xf8, 0x2f, 0x79, 0x31, 0x30, 0x3b, 0xe1, 0x24, 0xc9, 0xdc, 0x6d, 0x74, 0xb1, 0xb8, 0xcd, 0xae, 0x98, 0xb1, 0xfd, 0x82, 0x72, 0x5d, 0x8c, 0x27, 0x4b, 0xcc, 0x2d, 0x9d, 0xaf, 0xb3, 0xea, 0x60, 0x75, 0x27, 0xdd, 0xc5, 0x19, 0xbf, 0x38, 0x00, 0xde, 0x04, 0x25, 0x2b, 0xdd, 0x9b, 0xea, 0x49, 0xba, 0x5b, 0xb1, 0xd9, 0xee, 0x92, 0x60, 0xbe, 0x7d, 0x37, 0x28, 0x57, 0xb1, 0x05, 0x89, 0xe2, 0xf9, 0xd4, 0x49, 0x60, 0xde, 0xb9, 0x0f, 0xb6, 0x55, 0x1f, 0x55, 0x4c, 0x13, 0x8e, 0x50, 0xde, 0xb4, 0x38, 0xf1, 0x3c, 0xd7, 0x0e, 0xef, 0x1a, 0x45, 0xf4, 0x1a, 0xe5, 0xac, 0x12, 0xaa, 0xd1, 0x16, 0x47, 0x02, 0xb7, 0xc4, 0x43, 0x6b, 0xe3, 0xaf, 0xb4, 0x31, 0x8d, 0xf4, 0xf9, 0xf4, 0x3e, 0x18, 0x95, 0x7b, 0x9c, 0x6c, 0x36, 0xb3, 0x81, 0xe5, 0x82, 0xbb, 0xbc, 0x9f, 0xaf, 0xd6, 0x4a, 0xe3, 0xd8, 0xd5, 0x32, 0xe1, 0xe7, 0x58, 0x9b, 0x06, 0xb6, 0x36, 0x18, 0xc1, 0x30, 0xd6, 0x29, 0x3a, 0xde, 0xa3, 0x49, 0x7f, 0x92, 0xe0, 0xb1, 0x78, 0x9e, 0xce, 0x52, 0x46, 0x64, 0xad, 0x82, 0xc5, 0x12, 0xfc, 0x61, 0x80, 0xfc, 0x77, 0x09, 0xb2, 0xbc, 0xec, 0xbe, 0xbb, 0x55, 0x49, 0x74, 0xf5, 0x43, 0xbe, 0x04, 0x8f, 0x9e, 0x73, 0xb1, 0xbb, 0xef, 0x7c, 0xdd, 0x7f, 0x7b, 0x8d, 0x7e, 0xf4, 0x4d, 0x16, 0x2f, 0x27, 0xab, 0x5e, 0xd9, 0x3e, 0x69, 0xd2, 0x24, 0xa1, 0xbe, 0x75, 0xd9, 0x32, 0xa9, 0xa5, 0x41, 0xa8, 0x0f, 0x48, 0x6d, 0x8b, 0x1b, 0x1b, 0x04, 0xc4, 0x59, 0xf8, 0xf3, 0x26, 0x9f, 0xf6, 0xe0, 0x69, 0xdb, 0x82, 0x80, 0x16, 0xf4, 0x44, 0x71, 0x8b, 0x8a, 0x61, 0xdb, 0xa3, 0x36, 0xfc, 0x55, 0xcd, 0xba, 0x0d, 0xae, 0x38, 0x8a, 0x7b, 0xb8, 0x1b, 0xb6, 0xc9, 0xa9, 0xf8, 0x3b, 0xe0, 0x8e, 0xe2, 0xa4, 0x2c, 0x2d, 0x58, 0x14, 0xc5, 0x89, 0x4b, 0xb4, 0x60, 0x4d, 0x14, 0xf7, 0xf8, 0x86, 0xe8, 0xb3, 0xf0, 0x28, 0xee, 0xd1, 0x7e, 0xd8, 0xf6, 0x58, 0x29, 0xfe, 0x3a, 0xab, 0xa2, 0xb8, 0x3d, 0x27, 0xb5, 0xe0, 0x8c, 0x28, 0xae, 0x76, 0x93, 0x16, 0xac, 0x88, 0xe2, 0x6a, 0xf4, 0x5a, 0xb0, 0x36, 0x8a, 0xab, 0x3e, 0xaa, 0x05, 0x67, 0x0e, 0xe2, 0x7a, 0xb4, 0x60, 0x69, 0x14, 0x57, 0x15, 0xcd, 0x32, 0x3b, 0x8a, 0x2b, 0x8c, 0xe2, 0x5c, 0x43, 0xdb, 0xab, 0xfe, 0x55, 0x47, 0x71, 0xd3, 0xac, 0x5a, 0x70, 0xce, 0x20, 0x5d, 0x54, 0x44, 0x25, 0x51, 0x5c, 0x5e, 0x1f, 0x6c, 0x7b, 0xe0, 0x15, 0xfc, 0x9d, 0x2a, 0x2d, 0xd3, 0x70, 0x73, 0x16, 0x6b, 0xc9, 0x3e, 0x8d, 0xe1, 0xb6, 0xb9, 0x2f, 0x6b, 0xb8, 0xf9, 0x83, 0xb8, 0x57, 0xa3, 0x32, 0x2d, 0x8e, 0xb6, 0x37, 0xa8, 0xe1, 0x8a, 0xb5, 0x86, 0x6c, 0x53, 0x9e, 0x8e, 0xd6, 0x79, 0x10, 0x37, 0x29, 0x2a, 0xfb, 0x28, 0xbf, 0xb2, 0x68, 0xdb, 0x6a, 0xa2, 0x74, 0xe5, 0x0b, 0xa3, 0x6d, 0x73, 0x45, 0xdb, 0xb6, 0x3e, 0x2a, 0xe7, 0x28, 0xae, 0x48, 0x8e, 0xe2, 0xa2, 0xfc, 0x6a, 0x5e, 0x89, 0xe6, 0xd5, 0x3a, 0x6e, 0xdb, 0x3b, 0x0e, 0x0d, 0xe7, 0x76, 0x47, 0xdb, 0xd1, 0x11, 0x95, 0x7d, 0x34, 0xaf, 0x23, 0x2a, 0xbf, 0x59, 0xf3, 0x35, 0x5c, 0x66, 0x54, 0x15, 0x7d, 0xd1, 0xf6, 0x36, 0x3c, 0x33, 0x48, 0xa7, 0x22, 0xb7, 0x4d, 0x39, 0x35, 0xd8, 0x36, 0x0d, 0x57, 0x16, 0x55, 0x9d, 0xd2, 0x32, 0xb5, 0x71, 0xdb, 0x7c, 0xab, 0xa3, 0xb2, 0x2a, 0xf3, 0xdd, 0x52, 0xe7, 0x2a, 0x57, 0x85, 0xd6, 0xe7, 0x1f, 0x68, 0xb8, 0xdc, 0xec, 0x72, 0x0d, 0xd7, 0x1f, 0x6d, 0x6f, 0x89, 0x56, 0x46, 0xe1, 0x01, 0x0d, 0x57, 0x56, 0xac, 0xf6, 0xf0, 0xb6, 0x07, 0xa3, 0x75, 0x2e, 0x2e, 0xd1, 0xf8, 0xe5, 0x67, 0x44, 0xcb, 0x88, 0xd6, 0x79, 0x48, 0xbf, 0xe5, 0x68, 0xf5, 0xcb, 0xbd, 0x12, 0xad, 0x73, 0x8e, 0x46, 0x97, 0xf7, 0x98, 0x86, 0x9b, 0x57, 0xa2, 0xd5, 0xf9, 0xbe, 0xf3, 0x83, 0x7d, 0xa4, 0x8e, 0xae, 0x6d, 0x4e, 0x67, 0x54, 0x37, 0x66, 0xab, 0x4d, 0xdf, 0x96, 0xb1, 0x36, 0x3a, 0xb6, 0x6a, 0xaa, 0x8b, 0xd4, 0x3a, 0x47, 0xf5, 0xbe, 0x66, 0x41, 0x55, 0x89, 0xaa, 0xf7, 0xa5, 0x43, 0xf2, 0x2e, 0xe0, 0xb8, 0x87, 0x7a, 0x06, 0xe5, 0xe2, 0xab, 0x51, 0xdb, 0x11, 0xa5, 0x2b, 0x2f, 0xab, 0xa8, 0x50, 0xc7, 0x51, 0x54, 0x56, 0xc5, 0xbe, 0xb2, 0x79, 0x25, 0x1c, 0x37, 0x28, 0xe7, 0x12, 0xf7, 0x5c, 0x36, 0xe6, 0xb6, 0x55, 0x5c, 0x8d, 0xf6, 0xdb, 0xec, 0x9a, 0xd9, 0xac, 0x25, 0xdb, 0x3c, 0x17, 0xa2, 0xf2, 0xab, 0xac, 0xe1, 0xd2, 0xda, 0xe6, 0x89, 0xca, 0xa0, 0xa4, 0xb6, 0xa8, 0xa4, 0x8a, 0xcb, 0x25, 0x3a, 0x3e, 0x66, 0x95, 0xab, 0x3d, 0xb7, 0x6d, 0x5a, 0x73, 0xb4, 0xce, 0x15, 0x25, 0x2e, 0x8e, 0xcb, 0x8e, 0xda, 0x1c, 0x5f, 0x89, 0x7b, 0xf6, 0xec, 0x1a, 0x56, 0x97, 0x68, 0x19, 0xa5, 0xb3, 0x7d, 0xb3, 0x5c, 0x0c, 0x37, 0x5f, 0x88, 0x8e, 0xf3, 0xb9, 0x35, 0x55, 0x73, 0x19, 0x6e, 0xea, 0x89, 0xa8, 0x4c, 0x4b, 0x6a, 0x66, 0xb9, 0xa8, 0xe0, 0x6d, 0x39, 0xd3, 0xa3, 0x36, 0x71, 0xb6, 0xaf, 0xb2, 0x84, 0xd1, 0x95, 0x25, 0x45, 0xcb, 0xf5, 0x94, 0x17, 0x57, 0x93, 0x7a, 0x6c, 0x9b, 0xb7, 0x6b, 0x78, 0x19, 0x73, 0xa8, 0x8c, 0x93, 0x83, 0xba, 0x56, 0x5d, 0x8e, 0xb4, 0xc3, 0xe8, 0x66, 0xb9, 0xca, 0x4b, 0x58, 0x4b, 0x86, 0xb4, 0xc3, 0x53, 0x52, 0x5b, 0x31, 0xbb, 0x88, 0xe8, 0xee, 0xbb, 0x11, 0x1d, 0xfb, 0x51, 0x1b, 0x71, 0x2c, 0xda, 0x97, 0xf3, 0x35, 0x63, 0xb7, 0xed, 0x3d, 0xef, 0xad, 0x36, 0xe2, 0x68, 0xd4, 0xfe, 0xcd, 0x8f, 0x8e, 0x99, 0xa3, 0xd7, 0xa3, 0xb8, 0x39, 0x51, 0xdc, 0xb1, 0x28, 0xae, 0x4a, 0xd3, 0xab, 0x9f, 0x6d, 0x1c, 0x82, 0x9b, 0xaf, 0xe2, 0x0e, 0x0c, 0xe2, 0xe6, 0x6b, 0x74, 0x57, 0x07, 0x71, 0x9a, 0x9e, 0x1e, 0x4b, 0x1d, 0xc4, 0x55, 0xcf, 0x2a, 0xe2, 0x38, 0xdf, 0x57, 0xee, 0x75, 0xe8, 0x07, 0x0b, 0xce, 0xc8, 0x36, 0x11, 0x3e, 0x37, 0xa9, 0xfb, 0x1d, 0x96, 0xd3, 0x86, 0x07, 0x0b, 0xd8, 0xec, 0x6c, 0x5e, 0xef, 0xb3, 0x65, 0x44, 0x22, 0x12, 0xcc, 0x6e, 0x60, 0xab, 0xd3, 0x49, 0x36, 0x1b, 0x86, 0x6b, 0x69, 0xbd, 0xa9, 0x24, 0x30, 0x8f, 0xd5, 0x4e, 0xf3, 0x5c, 0xd9, 0x2f, 0x90, 0x4f, 0x8a, 0x68, 0xab, 0xfa, 0x5c, 0x0d, 0x8f, 0x13, 0x8d, 0x78, 0xbd, 0x4f, 0x82, 0x79, 0xbb, 0x45, 0xe8, 0x7b, 0xd5, 0xd3, 0xb8, 0x42, 0x58, 0xd6, 0xda, 0xd0, 0x28, 0xb4, 0xca, 0xb2, 0x60, 0x81, 0xc1, 0x68, 0x0b, 0xc6, 0xe6, 0x49, 0xcd, 0x4d, 0x0d, 0x82, 0x14, 0x50, 0xda, 0x97, 0x35, 0xb6, 0x04, 0xdb, 0xa6, 0x22, 0x36, 0x53, 0x25, 0x5c, 0x05, 0x99, 0x74, 0xc7, 0xac, 0x58, 0x82, 0xea, 0x8a, 0xa5, 0x50, 0xf9, 0x4c, 0x4b, 0xd2, 0x24, 0x38, 0xd2, 0x11, 0xc1, 0xb5, 0x4e, 0x75, 0x21, 0xc6, 0x3b, 0x5a, 0x4c, 0x99, 0x70, 0x14, 0xe3, 0xfb, 0xbe, 0x55, 0x0f, 0x95, 0x2d, 0x42, 0x49, 0x6a, 0xa9, 0x54, 0xeb, 0xfd, 0xb6, 0x62, 0xc1, 0xb2, 0x05, 0x2c, 0x7b, 0xaa, 0x48, 0x33, 0x76, 0x36, 0x86, 0x1c, 0xfc, 0x3e, 0xca, 0xe6, 0x0e, 0x9c, 0xe9, 0xd3, 0xb0, 0x46, 0xc9, 0x45, 0xad, 0xed, 0xcd, 0x0d, 0x2d, 0xf7, 0x05, 0x05, 0xb9, 0x89, 0xe6, 0xe4, 0x56, 0xbf, 0xbf, 0x31, 0x30, 0xb9, 0xb9, 0xa9, 0x2d, 0x68, 0x81, 0xa2, 0xc1, 0x88, 0x20, 0xb7, 0xb6, 0x63, 0xb2, 0x14, 0x14, 0xd2, 0xc0, 0xf3, 0x89, 0xd3, 0x21, 0xc1, 0x6f, 0x37, 0xe6, 0x0e, 0x3c, 0x15, 0x82, 0x33, 0xbd, 0xcf, 0xd3, 0x5d, 0x3d, 0x09, 0xe0, 0xd4, 0xea, 0x48, 0xe0, 0xc6, 0xeb, 0xef, 0x36, 0x7b, 0x77, 0x6e, 0x50, 0x8c, 0x35, 0x9d, 0xe2, 0xb5, 0x34, 0x4f, 0x4d, 0x67, 0xba, 0x77, 0xc1, 0x7a, 0x49, 0x54, 0x7a, 0x4a, 0x2e, 0xdd, 0x80, 0x1f, 0xd1, 0xdd, 0x3d, 0x68, 0x36, 0xfe, 0xed, 0x11, 0x5c, 0x6d, 0x54, 0xc8, 0x97, 0xd1, 0xef, 0x11, 0x7e, 0xf4, 0x5e, 0xab, 0x31, 0xad, 0x1c, 0xe3, 0x85, 0x4a, 0x2f, 0x52, 0xe6, 0xcb, 0xfd, 0xb5, 0xeb, 0x57, 0x83, 0x60, 0xa1, 0xe7, 0xc4, 0x9b, 0x3b, 0xa6, 0x80, 0x9f, 0x38, 0x5f, 0x16, 0xd0, 0x93, 0xfd, 0xed, 0x8a, 0xdc, 0x01, 0x60, 0xe5, 0xe5, 0x0e, 0x3c, 0x19, 0x41, 0xf8, 0x02, 0xf9, 0x24, 0x15, 0x67, 0xac, 0x7a, 0xf2, 0xd6, 0xd6, 0x82, 0x23, 0xc1, 0x8c, 0xdc, 0x99, 0x0f, 0xd6, 0x5b, 0x67, 0x15, 0xe3, 0xbd, 0x4e, 0xc5, 0xd4, 0xd5, 0xa1, 0xbb, 0x51, 0x4f, 0x7b, 0x2d, 0xf2, 0x72, 0xfb, 0xa1, 0x80, 0xf2, 0x64, 0x26, 0x08, 0x85, 0xf0, 0x42, 0x08, 0x42, 0xab, 0x20, 0x23, 0x2d, 0xc4, 0x9f, 0xf6, 0xf4, 0xe8, 0xd8, 0x3d, 0x40, 0x84, 0xf5, 0xd7, 0x71, 0xb5, 0x7b, 0xa6, 0x77, 0x6c, 0xda, 0xba, 0xf0, 0x2a, 0x30, 0x57, 0x9c, 0x01, 0x17, 0xed, 0xab, 0xf3, 0x7c, 0x12, 0x0e, 0xe5, 0x14, 0x82, 0x4d, 0x1a, 0xab, 0xd8, 0x10, 0x1a, 0xa5, 0x24, 0xc5, 0x8c, 0xd2, 0xcc, 0x93, 0xa0, 0xe6, 0x5c, 0xee, 0x7e, 0xd8, 0x36, 0x71, 0x00, 0xd7, 0x55, 0x86, 0xca, 0x76, 0x0c, 0x63, 0x09, 0x5f, 0xc6, 0x33, 0x8c, 0xbc, 0x86, 0xcb, 0x5a, 0x12, 0xe4, 0x40, 0x63, 0xa3, 0xd0, 0xd4, 0x12, 0x6c, 0x0c, 0x04, 0xda, 0xfd, 0x41, 0x61, 0xbc, 0x85, 0x76, 0xcd, 0xf4, 0x15, 0xa2, 0x87, 0xdd, 0x11, 0x99, 0xc9, 0x9e, 0x8e, 0x09, 0xf7, 0x43, 0x48, 0x32, 0x71, 0xdf, 0x89, 0x63, 0xc8, 0xdf, 0xdb, 0xfc, 0x42, 0xfe, 0xfd, 0x3a, 0x93, 0xd9, 0x00, 0x71, 0x8a, 0x89, 0xe2, 0x5b, 0x5e, 0xf8, 0xe4, 0x91, 0x43, 0x1d, 0x10, 0xfb, 0xbb, 0xf2, 0xe3, 0x6f, 0x91, 0xaf, 0x79, 0xbf, 0x87, 0x64, 0x81, 0x53, 0xe2, 0x33, 0x82, 0x33, 0xc3, 0x23, 0x41, 0x9e, 0x58, 0xf1, 0x02, 0x18, 0x6a, 0x3b, 0x19, 0xb6, 0xb9, 0xab, 0x43, 0x0f, 0x0d, 0xfe, 0xae, 0x0e, 0xe8, 0x94, 0x4d, 0xc2, 0x52, 0x08, 0x89, 0xa7, 0x31, 0xbc, 0x9e, 0x85, 0x9f, 0x16, 0xbb, 0x51, 0x66, 0xa1, 0x65, 0x16, 0xbc, 0xbe, 0xd9, 0x62, 0xcc, 0x5d, 0x03, 0x80, 0x21, 0x93, 0x3c, 0x56, 0x2d, 0x55, 0x77, 0xfb, 0x32, 0xf3, 0xe0, 0x9c, 0xd7, 0x9b, 0x23, 0x80, 0x92, 0xf4, 0x20, 0xcf, 0x01, 0xb2, 0xb1, 0xba, 0x54, 0xb1, 0x8a, 0xd8, 0x03, 0x91, 0x88, 0x62, 0x14, 0x21, 0xb2, 0x8a, 0xed, 0x73, 0xf9, 0x0f, 0xfe, 0xb1, 0xa7, 0xe1, 0x51, 0xf0, 0xf5, 0xe8, 0x6f, 0xf3, 0xf7, 0xa5, 0xe9, 0xff, 0x4e, 0x7e, 0x5f, 0x92, 0xff, 0x66, 0x54, 0x04, 0x02, 0x3a, 0xab, 0x0d, 0xb2, 0xe4, 0x49, 0xbe, 0x4e, 0x1b, 0xae, 0xca, 0xcb, 0xe9, 0xfe, 0x82, 0x5b, 0x49, 0x09, 0xe8, 0x11, 0xce, 0x57, 0x12, 0x03, 0x46, 0xba, 0xf3, 0xa4, 0x58, 0x5d, 0xfd, 0xba, 0x38, 0x09, 0x7c, 0xeb, 0x44, 0x80, 0x81, 0x31, 0xa8, 0x5f, 0x93, 0x57, 0xa0, 0xa5, 0x99, 0xb7, 0x14, 0xbc, 0xcf, 0x2b, 0x9e, 0x92, 0x7e, 0xbd, 0xb3, 0xa8, 0x5f, 0xb7, 0x2b, 0x31, 0x19, 0xd7, 0x59, 0x1f, 0x22, 0xe5, 0x68, 0x7a, 0xf6, 0x27, 0xdc, 0x45, 0xcf, 0x11, 0x17, 0x4e, 0xdf, 0x55, 0x08, 0x3a, 0x19, 0xc7, 0xbc, 0x6e, 0x24, 0x62, 0x4b, 0xc5, 0x53, 0x18, 0xd7, 0xb3, 0x38, 0xae, 0xdc, 0x7c, 0xf9, 0xe2, 0x11, 0xd4, 0x5a, 0xf4, 0xf0, 0x7d, 0x99, 0x62, 0x38, 0xc3, 0x89, 0xd8, 0x16, 0xe4, 0x74, 0xb5, 0xa4, 0x5f, 0xf7, 0x4a, 0xed, 0x7a, 0xef, 0x5d, 0x4a, 0xce, 0x1b, 0x27, 0xe5, 0xeb, 0xd5, 0xdf, 0x59, 0xd0, 0xb9, 0x60, 0xbd, 0xd0, 0x03, 0xc6, 0xb4, 0x4b, 0x60, 0x4c, 0xc0, 0xd5, 0xb2, 0x7c, 0x15, 0x73, 0x9d, 0x91, 0x60, 0xce, 0x75, 0xc1, 0x4a, 0xa5, 0x2c, 0xb8, 0xa2, 0x5f, 0xc9, 0x9e, 0xc1, 0xef, 0x12, 0x17, 0x09, 0x56, 0x36, 0xe6, 0x12, 0xb4, 0xe7, 0xe1, 0x48, 0xd9, 0x83, 0x94, 0x47, 0x45, 0xb7, 0x04, 0xd9, 0x97, 0xb1, 0x84, 0x4d, 0x58, 0x82, 0x19, 0x4b, 0xf0, 0xf8, 0x47, 0xe1, 0xba, 0x2e, 0xd1, 0xd7, 0x59, 0xfb, 0x9d, 0xda, 0xf5, 0xb8, 0x4e, 0xb9, 0x86, 0x94, 0xff, 0x13, 0x29, 0xb7, 0x8b, 0x76, 0xdb, 0x5e, 0x48, 0x4e, 0x7d, 0x26, 0x6d, 0x13, 0x62, 0xea, 0x11, 0xb3, 0x01, 0xed, 0x93, 0x15, 0x4b, 0xe9, 0x14, 0xe1, 0x0f, 0xab, 0xa1, 0xac, 0xb9, 0xb9, 0x51, 0x91, 0x9a, 0x85, 0xb6, 0xa6, 0x55, 0x8d, 0x42, 0x9b, 0xbf, 0xb1, 0xbe, 0x49, 0x6e, 0x6a, 0x0c, 0x08, 0xe3, 0x85, 0x8c, 0xd6, 0x96, 0xe6, 0x95, 0x42, 0x56, 0x9d, 0x90, 0xf5, 0x84, 0x90, 0xd5, 0x2c, 0x48, 0xcd, 0xcd, 0xad, 0x4f, 0x34, 0x36, 0x4c, 0xb4, 0xc0, 0xac, 0xc6, 0x65, 0xad, 0x81, 0x95, 0xc2, 0x13, 0x52, 0xb0, 0x7e, 0x31, 0x37, 0x57, 0x59, 0x75, 0x16, 0xc8, 0x7a, 0x02, 0x7f, 0xcd, 0x37, 0xa5, 0xb6, 0x35, 0x06, 0x39, 0xc5, 0x30, 0x6c, 0x00, 0x23, 0xcb, 0x1b, 0x55, 0x53, 0x57, 0xd3, 0xda, 0x2a, 0xe0, 0x5a, 0x65, 0xa5, 0xb0, 0x6c, 0x28, 0x09, 0x8e, 0x53, 0x57, 0x43, 0x43, 0xa0, 0xb1, 0xad, 0x4d, 0x58, 0xd6, 0x8e, 0xb6, 0xb1, 0xae, 0x51, 0x68, 0x5c, 0xde, 0xd8, 0x12, 0xad, 0x16, 0x1a, 0xf3, 0xfc, 0x02, 0x87, 0xc3, 0x21, 0xf8, 0x03, 0xad, 0xf5, 0x48, 0xd5, 0x1a, 0x98, 0x68, 0xf9, 0xff, 0xf3, 0x9d, 0x7e, 0x9e, 0x4f, 0xa0, 0x97, 0x56, 0xf3, 0x59, 0x47, 0x95, 0x3c, 0x57, 0x7f, 0xe4, 0x74, 0x51, 0x7f, 0xa4, 0xaa, 0xa4, 0x3f, 0xb2, 0xc1, 0x6b, 0x57, 0x4c, 0xe9, 0x0b, 0xd2, 0x7e, 0x21, 0x5e, 0xe7, 0xcf, 0x97, 0x61, 0x65, 0x08, 0xd8, 0xee, 0x24, 0x75, 0x27, 0x0a, 0xed, 0xa1, 0x99, 0x92, 0x01, 0x69, 0x15, 0x67, 0x46, 0xa9, 0xcf, 0x77, 0xd0, 0x5a, 0xf6, 0x22, 0x87, 0x2d, 0xc8, 0x21, 0x1e, 0x39, 0x78, 0xfd, 0x50, 0xbb, 0x1e, 0xd7, 0xc6, 0xa5, 0xe9, 0x0b, 0xaa, 0x41, 0x36, 0x27, 0x8c, 0xd9, 0x99, 0xa0, 0x5c, 0x11, 0x13, 0x28, 0x9c, 0x33, 0x66, 0xa7, 0x4f, 0x39, 0x27, 0x9a, 0x52, 0xc7, 0xec, 0xdc, 0xa8, 0x9c, 0x9a, 0xf0, 0x1e, 0x96, 0xfe, 0x21, 0xdf, 0x47, 0x31, 0x7e, 0x25, 0xf1, 0x66, 0x5c, 0x0d, 0xfa, 0xf9, 0x4f, 0x46, 0x70, 0x36, 0xdd, 0x96, 0xf5, 0x6f, 0x22, 0x9c, 0x2a, 0x24, 0x0c, 0xed, 0x84, 0x61, 0x4f, 0x29, 0x42, 0xac, 0xc6, 0xff, 0xa6, 0xd0, 0xcc, 0x8b, 0x10, 0x35, 0x28, 0x09, 0x47, 0x4a, 0xa5, 0x30, 0x35, 0x92, 0x45, 0x9a, 0x3a, 0xbf, 0x98, 0xdb, 0xe5, 0xf9, 0xd4, 0x69, 0xd8, 0xa3, 0x6a, 0x1f, 0xd6, 0x2f, 0x96, 0x5a, 0x14, 0xad, 0x83, 0x5d, 0xfd, 0x37, 0x7a, 0xfd, 0xa3, 0xdc, 0x76, 0x5a, 0x3b, 0x73, 0x0f, 0x60, 0x76, 0xbc, 0x08, 0x9f, 0x1a, 0x5d, 0xcd, 0xcd, 0xc3, 0xfb, 0xbc, 0xa1, 0xb1, 0xb9, 0x31, 0xd8, 0xd8, 0x60, 0xc1, 0xf9, 0xa8, 0xfc, 0x88, 0x0c, 0x33, 0xd9, 0x0c, 0x55, 0x56, 0x85, 0xb1, 0x7d, 0x32, 0x94, 0x0e, 0xb0, 0x58, 0x4d, 0xc5, 0xe7, 0xf4, 0xdc, 0xb0, 0xac, 0x6a, 0x67, 0xa8, 0x15, 0x4a, 0x7b, 0xc8, 0x4a, 0x96, 0xd5, 0x4a, 0x30, 0x73, 0xb1, 0x77, 0xb4, 0x02, 0xa5, 0xd7, 0x6c, 0xa3, 0x15, 0xac, 0xd5, 0xcc, 0xb4, 0x84, 0xb0, 0x78, 0xad, 0xe2, 0x73, 0x03, 0x10, 0x25, 0x7b, 0x0e, 0x7a, 0x2e, 0x9d, 0x3f, 0x89, 0xaf, 0x46, 0x8b, 0xfd, 0x5a, 0x09, 0xcb, 0x95, 0x90, 0x8c, 0x33, 0x29, 0xc0, 0xd6, 0xf4, 0xce, 0x0c, 0xcf, 0x1b, 0xb4, 0xb3, 0x1d, 0x1a, 0xe3, 0xad, 0x6f, 0xd0, 0xfe, 0x2f, 0x7a, 0xd6, 0xa6, 0x24, 0x88, 0x56, 0x2b, 0x3d, 0x27, 0xe1, 0x31, 0x23, 0xae, 0xcc, 0x57, 0xdb, 0x70, 0x74, 0x49, 0x50, 0x7a, 0x68, 0x27, 0xc8, 0x07, 0xb3, 0xcc, 0x09, 0xc9, 0xca, 0x74, 0xe4, 0xf0, 0xd8, 0xd7, 0xcc, 0xed, 0x44, 0x8b, 0x94, 0x88, 0xb9, 0x3b, 0x77, 0x82, 0x72, 0x50, 0x98, 0x89, 0xf6, 0xda, 0x2f, 0xc4, 0x56, 0xb3, 0x7b, 0x8b, 0x33, 0x8f, 0x67, 0x77, 0x08, 0x02, 0x98, 0xdd, 0x19, 0x60, 0x21, 0xa9, 0xce, 0xc3, 0x16, 0xcd, 0xba, 0xc4, 0x68, 0x2a, 0xd8, 0x93, 0xa4, 0x02, 0xf4, 0x32, 0xb0, 0x7f, 0xe6, 0xc8, 0x88, 0x3f, 0x2e, 0xc2, 0xef, 0x0f, 0xa3, 0x1c, 0x17, 0x61, 0xf8, 0x90, 0x04, 0x1f, 0xad, 0xc7, 0xf0, 0xaf, 0x30, 0xbc, 0x17, 0x2d, 0xdb, 0x4a, 0xd9, 0x29, 0xc1, 0x6f, 0x16, 0xb9, 0xfa, 0x00, 0x67, 0xf5, 0x40, 0x44, 0x08, 0x0f, 0xff, 0x37, 0xe7, 0xdd, 0xc8, 0x15, 0x4c, 0xdf, 0xa8, 0x3d, 0x13, 0x64, 0x7b, 0xd7, 0x76, 0xe7, 0xa2, 0x46, 0x91, 0xbe, 0xf1, 0xe7, 0xa7, 0xc8, 0x7d, 0xc9, 0xd0, 0x9e, 0x69, 0xc2, 0x30, 0x0e, 0xbe, 0xfa, 0xe6, 0x46, 0x29, 0x40, 0x3d, 0x8a, 0x93, 0x6a, 0x70, 0x71, 0x23, 0x8e, 0xd8, 0xfa, 0xc5, 0x4d, 0x2d, 0x8d, 0x3c, 0x3d, 0xd0, 0x58, 0xd7, 0xda, 0x1a, 0x1c, 0x6f, 0xc9, 0x58, 0xd0, 0xda, 0xce, 0x31, 0x8b, 0xa5, 0xe5, 0x8d, 0x42, 0xb0, 0x15, 0x53, 0x9a, 0x5a, 0xda, 0x82, 0x68, 0x3a, 0xd4, 0x37, 0x30, 0x26, 0x5a, 0x5c, 0x81, 0x46, 0x61, 0x25, 0x92, 0xb5, 0xb5, 0xab, 0x81, 0x27, 0xa4, 0x96, 0x20, 0x91, 0xd6, 0xb7, 0xb6, 0x04, 0x9b, 0x5a, 0xda, 0x1b, 0x85, 0x19, 0x42, 0xc6, 0xca, 0x29, 0x2d, 0x13, 0x47, 0xc2, 0xd7, 0x7e, 0x30, 0x3b, 0x92, 0xed, 0xb2, 0x99, 0x79, 0x5c, 0x82, 0x12, 0x91, 0xf4, 0x00, 0x5e, 0xe0, 0x52, 0x25, 0xff, 0xb1, 0xc4, 0x6e, 0x0b, 0x7b, 0x6d, 0xf2, 0x35, 0x8e, 0xb1, 0x6e, 0x98, 0x8b, 0x8b, 0x5c, 0x39, 0x11, 0x3d, 0x94, 0xed, 0x23, 0xf7, 0xd0, 0x1d, 0xee, 0x78, 0x21, 0x8d, 0xae, 0x9d, 0xe2, 0x63, 0xd6, 0xaa, 0x22, 0x8f, 0x9c, 0xec, 0xcd, 0x40, 0x7b, 0xce, 0xd2, 0xad, 0x21, 0x4a, 0xb7, 0xf6, 0x50, 0xfa, 0xc8, 0x2a, 0x71, 0xba, 0x15, 0x3d, 0x5f, 0x9e, 0x12, 0xdf, 0x4b, 0x29, 0xa3, 0x6a, 0x29, 0x65, 0x54, 0x58, 0x4c, 0xb3, 0xe2, 0x72, 0x8a, 0xa7, 0xd8, 0x32, 0x28, 0xc5, 0xb6, 0x81, 0x52, 0x6c, 0x7d, 0x22, 0x59, 0xeb, 0x79, 0x12, 0x54, 0x8c, 0x15, 0xcd, 0xda, 0x9b, 0x0a, 0x88, 0x79, 0x04, 0x31, 0x56, 0xb6, 0xcf, 0xeb, 0x6a, 0xd7, 0x3e, 0xaa, 0x87, 0x4c, 0xfe, 0xeb, 0x02, 0x0a, 0x5b, 0x43, 0x2c, 0xec, 0xa3, 0x70, 0x7c, 0x2f, 0x0b, 0x7b, 0x29, 0x6c, 0xcb, 0x60, 0x61, 0x17, 0x8e, 0x05, 0xec, 0xff, 0xdf, 0x1d, 0xd6, 0x8c, 0xf6, 0xd2, 0xc6, 0x95, 0xcb, 0x24, 0xbf, 0xd0, 0x22, 0x2d, 0x6b, 0x64, 0x26, 0xb3, 0x3e, 0xd8, 0x3e, 0x88, 0x6d, 0x6a, 0x13, 0xa6, 0x0a, 0x80, 0x0d, 0x46, 0x37, 0xd3, 0x63, 0x81, 0x62, 0x0b, 0x94, 0x5a, 0x20, 0x08, 0x7f, 0x7b, 0xa4, 0x80, 0xdd, 0xa1, 0xdb, 0xcc, 0xee, 0x86, 0x4f, 0x35, 0xaa, 0xe3, 0x42, 0x14, 0xf4, 0x24, 0xa3, 0xac, 0xbe, 0xca, 0x37, 0x60, 0x7b, 0x6e, 0x71, 0x3a, 0x28, 0xc5, 0xa4, 0x73, 0xb9, 0x17, 0xb1, 0xcc, 0xc7, 0x84, 0x04, 0xd2, 0xcb, 0x6a, 0x27, 0xc3, 0x5c, 0x40, 0x4c, 0x85, 0x60, 0x09, 0xe8, 0x11, 0x93, 0xc5, 0x30, 0xbf, 0x45, 0xcc, 0x54, 0xa1, 0x08, 0xaf, 0x79, 0x74, 0x9f, 0xea, 0xbd, 0xe9, 0xd5, 0xc5, 0xb2, 0xa9, 0x20, 0x46, 0x82, 0x0f, 0x2f, 0xfb, 0xdc, 0xb5, 0xeb, 0x77, 0x75, 0x80, 0x53, 0xde, 0x8c, 0xf5, 0xb6, 0x61, 0x85, 0xd2, 0x00, 0xd7, 0x62, 0x5a, 0x7f, 0x15, 0x75, 0x51, 0x7f, 0x15, 0x65, 0x49, 0x90, 0xea, 0x95, 0xe7, 0x91, 0xec, 0x66, 0x1e, 0x0f, 0xe2, 0x0a, 0x60, 0xf1, 0xee, 0x2c, 0x50, 0x4a, 0x73, 0x07, 0xd8, 0xce, 0xbc, 0x94, 0x55, 0x50, 0x58, 0x08, 0xff, 0x28, 0x74, 0xc0, 0x3f, 0x3d, 0x99, 0x22, 0xc4, 0x04, 0x46, 0xe0, 0x08, 0xd9, 0x24, 0x67, 0x9c, 0x5a, 0x93, 0x1a, 0x8b, 0x72, 0x46, 0x5c, 0x7a, 0x21, 0x40, 0x12, 0x5a, 0x8d, 0xe6, 0x7c, 0xf5, 0xf9, 0x58, 0xb5, 0x6c, 0x9c, 0x73, 0x2c, 0xd2, 0x9d, 0x1a, 0x2b, 0xc1, 0x92, 0x4d, 0x22, 0x5c, 0xde, 0x1c, 0x2d, 0xcf, 0x49, 0xe5, 0xb9, 0xdf, 0x94, 0x60, 0xfc, 0x29, 0xb9, 0x59, 0x2d, 0x0f, 0x73, 0x2e, 0x2e, 0xc5, 0xf2, 0x16, 0x09, 0x33, 0xad, 0x3b, 0x60, 0x64, 0x18, 0x20, 0x91, 0x79, 0xf5, 0x3e, 0x09, 0xbc, 0x0d, 0xe2, 0x4d, 0xb5, 0xb8, 0xb9, 0xcc, 0x25, 0x9d, 0x72, 0xda, 0xd0, 0x9a, 0xcd, 0x3d, 0x21, 0x27, 0x9e, 0x5a, 0x73, 0x4b, 0x2d, 0xd0, 0xe2, 0x5d, 0x4e, 0x98, 0x1f, 0x68, 0x6d, 0x51, 0xd0, 0x31, 0x6d, 0x6e, 0xe4, 0xb3, 0x2d, 0xf6, 0x18, 0x72, 0x28, 0xfd, 0x50, 0xce, 0xc2, 0x3e, 0x46, 0xd3, 0xd1, 0x0c, 0xee, 0x24, 0xee, 0x55, 0xba, 0xe3, 0x99, 0xb5, 0xb3, 0xa7, 0x53, 0xfa, 0x9b, 0x72, 0x3c, 0xf7, 0x4b, 0x1f, 0x0c, 0x15, 0x80, 0x08, 0xbf, 0x3d, 0x32, 0x89, 0x56, 0x41, 0xf6, 0xd5, 0xb1, 0x7b, 0x79, 0xae, 0x04, 0x29, 0xb9, 0xe6, 0x5b, 0xda, 0x1e, 0x8e, 0xb2, 0x9d, 0x73, 0x7e, 0x1e, 0xe9, 0x99, 0xf0, 0x36, 0x51, 0x20, 0xed, 0x8b, 0xe4, 0xed, 0x92, 0xbd, 0x7b, 0xd0, 0xcf, 0x79, 0x70, 0x3a, 0xc7, 0x40, 0xa3, 0x60, 0x1b, 0x80, 0xb4, 0x80, 0xc1, 0x81, 0xbd, 0x34, 0xa7, 0xe7, 0xfd, 0xfd, 0x8e, 0x01, 0x21, 0xcd, 0x91, 0x5b, 0x05, 0x01, 0xb4, 0x55, 0x73, 0x4e, 0xbe, 0xbf, 0x5f, 0x18, 0x10, 0x84, 0x87, 0x85, 0x8f, 0x67, 0x95, 0x5d, 0xad, 0x02, 0xe1, 0xb4, 0x70, 0xda, 0x31, 0x60, 0x01, 0xee, 0x23, 0xf3, 0xfb, 0xb4, 0xae, 0x1e, 0xa8, 0xb2, 0x56, 0x35, 0x0a, 0xf2, 0xd8, 0x1a, 0xb2, 0x89, 0xc9, 0x73, 0x43, 0x4b, 0x13, 0x27, 0x81, 0xb4, 0x21, 0x5a, 0x8f, 0x49, 0x74, 0x87, 0x96, 0xde, 0xc8, 0xe1, 0xf4, 0x53, 0x80, 0xed, 0x52, 0x31, 0xce, 0x75, 0xf2, 0x7b, 0xaa, 0xc2, 0x38, 0x96, 0x3b, 0x8b, 0x72, 0x97, 0x9c, 0xae, 0x09, 0xa9, 0x12, 0x18, 0x8b, 0x3c, 0xd0, 0xea, 0xd5, 0x7c, 0x8b, 0xb7, 0x80, 0x78, 0x68, 0x1c, 0x3d, 0x27, 0x89, 0x9b, 0xd6, 0x93, 0xae, 0xe5, 0xd4, 0x93, 0xce, 0x6b, 0xbc, 0x0f, 0x25, 0x08, 0x3c, 0x26, 0xc2, 0xa5, 0x2e, 0x1a, 0x83, 0xe5, 0x02, 0xf6, 0x1d, 0xae, 0xbd, 0x3c, 0x3b, 0xd0, 0x03, 0xbb, 0x0c, 0x49, 0x2c, 0x47, 0x28, 0xad, 0xcc, 0x1f, 0x3b, 0xf8, 0xe4, 0xc0, 0x8f, 0x2b, 0x4e, 0x51, 0x9f, 0x70, 0x52, 0x9d, 0x93, 0xfe, 0x01, 0xa9, 0x57, 0xf1, 0x72, 0xd0, 0x06, 0xa3, 0xd5, 0xf0, 0x34, 0x23, 0xf6, 0xef, 0xac, 0xaf, 0xc2, 0xb6, 0xbf, 0x6d, 0x01, 0xab, 0x42, 0x63, 0x6f, 0x33, 0x62, 0xe7, 0x09, 0x99, 0x60, 0xa4, 0x91, 0x50, 0xb5, 0x18, 0x31, 0x4b, 0x11, 0x53, 0x8c, 0x18, 0x33, 0xc3, 0xac, 0x12, 0x12, 0xe5, 0x67, 0xb1, 0x0e, 0x99, 0x93, 0x27, 0x4f, 0x16, 0x2a, 0x69, 0x40, 0x4e, 0x1e, 0xfc, 0xc3, 0xb0, 0x50, 0xdc, 0xb8, 0xbc, 0xa9, 0x9e, 0xb0, 0xf4, 0xbf, 0xb4, 0x29, 0x80, 0x5e, 0x8d, 0xbb, 0xb9, 0xb5, 0x7e, 0xa9, 0x10, 0xa5, 0xa8, 0xac, 0x63, 0x88, 0xb6, 0x68, 0x4e, 0x0b, 0xb7, 0x81, 0x43, 0x2d, 0x21, 0x0b, 0x97, 0x15, 0x97, 0x0c, 0x8d, 0x96, 0x36, 0xe3, 0x2a, 0x72, 0x25, 0x8b, 0x02, 0xdf, 0xd3, 0x25, 0xa3, 0x87, 0x0b, 0x3b, 0x70, 0x26, 0x7c, 0x49, 0x84, 0x8b, 0x5b, 0xd4, 0x77, 0xc7, 0x48, 0xa7, 0x5f, 0x46, 0xdc, 0x06, 0x31, 0x99, 0xef, 0xdd, 0x67, 0x98, 0x37, 0x10, 0xb3, 0x9a, 0x76, 0x5f, 0xc2, 0x11, 0x0c, 0x05, 0x69, 0x3c, 0xef, 0xb4, 0xd1, 0xac, 0x53, 0x6e, 0x53, 0x92, 0x02, 0xd8, 0x1b, 0xa2, 0x20, 0xc7, 0xa3, 0x9f, 0xb9, 0x1a, 0x53, 0xd1, 0x96, 0x41, 0x98, 0x68, 0x75, 0xd8, 0x6b, 0x33, 0x3d, 0x43, 0x68, 0xed, 0x48, 0x8b, 0x1e, 0xf0, 0xe3, 0xd7, 0x18, 0xed, 0x1a, 0x4c, 0x9d, 0x84, 0xb4, 0x9b, 0x18, 0xed, 0x77, 0x31, 0x96, 0x82, 0xf3, 0x11, 0xa8, 0x5c, 0x2d, 0x3c, 0x9f, 0x84, 0xda, 0x22, 0x42, 0xcf, 0x40, 0x65, 0x2b, 0x6b, 0x0f, 0x5b, 0xa3, 0xc9, 0x52, 0x7d, 0xa3, 0x05, 0x4a, 0x2a, 0xaa, 0x5d, 0x35, 0x42, 0x51, 0x71, 0x6e, 0x8e, 0x50, 0x15, 0x68, 0x15, 0x66, 0xb5, 0x36, 0xb4, 0xe3, 0x90, 0xb9, 0x89, 0x68, 0xa6, 0xb4, 0x12, 0x91, 0xae, 0xec, 0x1c, 0x74, 0x02, 0x6f, 0x9f, 0x94, 0xe7, 0xb8, 0x35, 0x09, 0xca, 0x58, 0xd9, 0x58, 0x2b, 0xf4, 0x80, 0x4b, 0xd7, 0xa1, 0x7e, 0xe4, 0x3f, 0xd4, 0x81, 0xe8, 0x45, 0xde, 0x2a, 0xb2, 0xb0, 0xba, 0x52, 0xc4, 0xfa, 0x51, 0x16, 0xb8, 0xea, 0x2f, 0x5d, 0x8c, 0xa9, 0x89, 0x2c, 0x35, 0x5d, 0x4d, 0xcd, 0xb0, 0xda, 0x51, 0x6a, 0xfd, 0xd5, 0x9d, 0xa9, 0x1e, 0xef, 0x5d, 0xf2, 0xc0, 0x98, 0x0e, 0xb0, 0xd0, 0xfd, 0x81, 0xd2, 0xe9, 0x98, 0xe3, 0x34, 0xc2, 0x7c, 0x47, 0x26, 0xe8, 0x69, 0x04, 0x55, 0x92, 0xfe, 0x9c, 0x42, 0x4c, 0x1a, 0x62, 0x4c, 0x0c, 0xb3, 0x10, 0x31, 0x27, 0x11, 0x93, 0x80, 0x18, 0x2b, 0xc3, 0x78, 0x10, 0xf3, 0xaf, 0x88, 0x81, 0x40, 0x0c, 0x51, 0x85, 0x2f, 0x83, 0x15, 0x7f, 0xfa, 0xc0, 0x88, 0x73, 0x3b, 0x58, 0x3a, 0x69, 0xdd, 0x7b, 0x38, 0x3a, 0xce, 0x56, 0xb6, 0x93, 0xfa, 0x04, 0x9a, 0x70, 0x4e, 0x75, 0x60, 0x27, 0x4f, 0x45, 0xa7, 0xb7, 0xb1, 0xad, 0xb1, 0x25, 0x68, 0x81, 0x9b, 0xf0, 0x52, 0xdd, 0x4d, 0xe8, 0xec, 0x2f, 0x21, 0xcf, 0x1e, 0x46, 0x8e, 0x11, 0xa6, 0xb0, 0xec, 0x6f, 0x2a, 0xd3, 0xa9, 0xea, 0xc6, 0x40, 0x13, 0xce, 0x24, 0x2d, 0xad, 0x6a, 0xbc, 0x68, 0x65, 0x33, 0xae, 0xa7, 0x1b, 0x03, 0x6d, 0x6a, 0xdc, 0xd3, 0x28, 0x35, 0xb4, 0x0d, 0xa3, 0xaf, 0x0f, 0xb6, 0x06, 0xda, 0x78, 0xbc, 0x72, 0x8a, 0x8b, 0x31, 0x2d, 0x92, 0xfc, 0x52, 0x7d, 0x53, 0x70, 0x25, 0x43, 0x66, 0xcc, 0x72, 0x93, 0x8b, 0xae, 0x8d, 0xdf, 0x69, 0xbb, 0x69, 0xfc, 0x4e, 0xcb, 0x2b, 0x52, 0x47, 0xf7, 0xb4, 0x97, 0x59, 0x3c, 0x4d, 0x82, 0x53, 0x2f, 0x74, 0xc0, 0x6a, 0x18, 0xb4, 0xcd, 0x75, 0xaf, 0x64, 0x02, 0xcd, 0xe9, 0x0c, 0x13, 0xa2, 0xd9, 0xa1, 0x6e, 0x73, 0x16, 0xc8, 0x95, 0xd6, 0x95, 0x10, 0x87, 0xfa, 0x64, 0xa6, 0xa7, 0xa9, 0xb4, 0xc3, 0xae, 0xdc, 0xcc, 0x47, 0xb0, 0xd7, 0x2e, 0x0f, 0x54, 0x77, 0x5a, 0x33, 0x60, 0x2a, 0xad, 0x8b, 0xd1, 0xca, 0x4d, 0x49, 0x2d, 0x2d, 0xba, 0x08, 0xa8, 0x81, 0xb6, 0xbb, 0x44, 0x3d, 0x7f, 0x86, 0xe3, 0xb6, 0x0d, 0xe1, 0xe6, 0x45, 0xdb, 0x5f, 0x28, 0x94, 0x4e, 0xca, 0x40, 0xbb, 0x9f, 0xa7, 0x59, 0x7b, 0xb2, 0xef, 0x21, 0xd8, 0xfb, 0x54, 0xb3, 0x3e, 0x3d, 0x66, 0xcb, 0x53, 0xa9, 0x26, 0x6e, 0xf5, 0x25, 0x68, 0xd8, 0xec, 0x0d, 0xc9, 0xf1, 0x64, 0xd3, 0x1b, 0x0f, 0x63, 0xc8, 0xe8, 0xfd, 0x96, 0x7c, 0x22, 0xd5, 0x44, 0x1e, 0x5e, 0xc3, 0xa4, 0xd4, 0x58, 0x06, 0x53, 0xb1, 0x0d, 0x59, 0x22, 0x5c, 0x40, 0xe8, 0xd2, 0xe3, 0x8c, 0x14, 0x52, 0x98, 0x35, 0xf7, 0x5c, 0x66, 0xd7, 0x1e, 0xb1, 0x20, 0x8d, 0x76, 0xd9, 0x5c, 0x66, 0x7b, 0x6d, 0x7a, 0x68, 0xaf, 0x96, 0xe7, 0x32, 0xbb, 0xf6, 0xd0, 0xb8, 0x78, 0x38, 0x03, 0x67, 0xa9, 0x2b, 0x64, 0x51, 0xca, 0x8f, 0xb3, 0xf8, 0x34, 0x8c, 0x7f, 0x28, 0xe0, 0x5c, 0x5b, 0x7e, 0x52, 0x84, 0x8f, 0x8f, 0xcd, 0x6e, 0x0f, 0xfa, 0xdb, 0x83, 0x9a, 0x7b, 0x26, 0x07, 0x5a, 0x97, 0xd1, 0x8c, 0x8a, 0xfe, 0x53, 0x1a, 0xcd, 0x25, 0xce, 0x8d, 0x32, 0x3c, 0xcc, 0xde, 0xfd, 0xf1, 0xf4, 0x62, 0xec, 0x69, 0x8c, 0x1d, 0x64, 0xb1, 0x6b, 0x1b, 0xa8, 0x84, 0xde, 0x56, 0x78, 0x78, 0x17, 0xe2, 0x9b, 0x11, 0xff, 0x2a, 0xc3, 0xf7, 0x49, 0xf0, 0xeb, 0x4c, 0x3f, 0x4c, 0x76, 0xea, 0x68, 0x87, 0x1a, 0x52, 0xd0, 0x13, 0x40, 0x4f, 0x1f, 0x3d, 0xc9, 0xf4, 0x5c, 0xf3, 0x47, 0x5e, 0x3f, 0xd2, 0x6c, 0xfe, 0xa1, 0x59, 0xe9, 0x13, 0xcc, 0xd5, 0xd8, 0x47, 0xbf, 0xae, 0x0d, 0x44, 0xba, 0xd6, 0x28, 0xcc, 0xde, 0x95, 0x7b, 0x45, 0x36, 0x8e, 0x1f, 0x3e, 0x80, 0xf5, 0x9b, 0x8e, 0x35, 0xcb, 0x2b, 0xf9, 0x06, 0xf9, 0x1e, 0xe8, 0x25, 0x4a, 0x6d, 0x59, 0x16, 0x48, 0xf7, 0x60, 0x39, 0x46, 0x39, 0x85, 0xcf, 0x67, 0x0f, 0x4f, 0x4f, 0x75, 0x4e, 0x78, 0x17, 0x79, 0x0e, 0x68, 0x23, 0x08, 0x7d, 0x32, 0x93, 0x50, 0x2e, 0xc2, 0xc4, 0x43, 0xe4, 0x31, 0xfc, 0x71, 0x3b, 0xca, 0x12, 0xa6, 0x5e, 0xa1, 0x1e, 0xb4, 0x9a, 0x69, 0x1d, 0xe4, 0x19, 0x90, 0x60, 0x02, 0xbd, 0x5b, 0xb4, 0xdd, 0x6a, 0x2a, 0x60, 0x76, 0x5a, 0xdd, 0x9d, 0x34, 0x10, 0x84, 0x3c, 0x86, 0x3d, 0xe1, 0xae, 0x59, 0xdb, 0xbd, 0x96, 0xaf, 0x48, 0xdc, 0xfb, 0x70, 0xae, 0xde, 0x8e, 0xe1, 0x78, 0x0c, 0x77, 0x89, 0x70, 0xfe, 0x65, 0x89, 0x39, 0x1a, 0x95, 0xdf, 0x90, 0x60, 0xc6, 0x6a, 0xe4, 0xfc, 0x26, 0x9b, 0x4f, 0x6d, 0xa9, 0x28, 0xa3, 0x19, 0x2d, 0x18, 0x7f, 0x8d, 0xc5, 0x13, 0x37, 0xac, 0x69, 0x85, 0xa9, 0xdb, 0x49, 0x7b, 0xca, 0x70, 0x55, 0x3d, 0xa3, 0x46, 0x82, 0x93, 0x63, 0xd5, 0x75, 0x83, 0x8d, 0x9e, 0x63, 0x96, 0xf5, 0xec, 0xec, 0x00, 0x83, 0x92, 0x84, 0x57, 0x9d, 0x62, 0xb6, 0x85, 0x5f, 0x7f, 0x77, 0x59, 0xbf, 0x18, 0xef, 0xe0, 0xd0, 0x24, 0x30, 0x88, 0x79, 0x9c, 0x58, 0x62, 0x9e, 0x99, 0x76, 0xa4, 0xff, 0xf4, 0xac, 0x8e, 0xc1, 0xed, 0x7f, 0x3f, 0x80, 0x38, 0x81, 0xed, 0xc4, 0xbb, 0x9c, 0x3b, 0x80, 0x55, 0xd9, 0xfe, 0xf7, 0xd8, 0x7f, 0xe7, 0xe3, 0xa3, 0x18, 0xe0, 0x98, 0xdf, 0x0c, 0x68, 0x18, 0xc3, 0x56, 0x15, 0x73, 0x49, 0x1b, 0x23, 0x53, 0x37, 0xd2, 0x98, 0x98, 0x8a, 0x96, 0x72, 0xfa, 0x5e, 0x19, 0x1e, 0xea, 0xc7, 0xdf, 0xf5, 0x0c, 0x6c, 0xc1, 0xf4, 0x57, 0x31, 0x74, 0x19, 0x7f, 0x3d, 0xe9, 0x90, 0x0a, 0x82, 0xf1, 0xf9, 0xa7, 0x5b, 0xe1, 0x21, 0xb4, 0x3f, 0xbf, 0xaa, 0x1b, 0xf4, 0xa0, 0x1e, 0x0f, 0xa2, 0x56, 0xc7, 0xa7, 0x19, 0x49, 0x53, 0xeb, 0xc7, 0xd2, 0x55, 0x5a, 0x8f, 0x14, 0xcf, 0x23, 0xff, 0xf5, 0x51, 0xfe, 0x39, 0xc4, 0xff, 0xa1, 0x2e, 0x6d, 0x0e, 0x55, 0x6c, 0x98, 0xda, 0x1c, 0x4d, 0x4d, 0x64, 0xa9, 0x1b, 0x9f, 0x3b, 0x9c, 0xba, 0x92, 0xdf, 0x17, 0xfd, 0xed, 0x92, 0xaf, 0xda, 0x0f, 0x5b, 0x25, 0x0e, 0xdd, 0x0f, 0x2b, 0xc1, 0x07, 0x27, 0x06, 0x6b, 0xf3, 0xd8, 0x05, 0xac, 0x0d, 0xe8, 0x5e, 0xd2, 0x46, 0x17, 0x5a, 0x61, 0x1c, 0x4d, 0x19, 0xfb, 0x5c, 0xbe, 0xea, 0x79, 0xe8, 0x51, 0x59, 0x97, 0xe3, 0xb8, 0xa9, 0x5b, 0x21, 0x83, 0x6e, 0x2d, 0xf3, 0xaf, 0xb6, 0xcf, 0x08, 0xd2, 0xf8, 0x03, 0x5c, 0xef, 0xd4, 0xd5, 0x21, 0xb6, 0x99, 0x63, 0xff, 0x6e, 0x80, 0xb0, 0x7a, 0xb2, 0x09, 0x15, 0x88, 0x9d, 0xc7, 0xb1, 0x5b, 0xd8, 0x58, 0x35, 0x12, 0x36, 0x1f, 0xb1, 0x4e, 0x8e, 0xfd, 0xfb, 0x81, 0xe5, 0x02, 0x62, 0xd2, 0x10, 0x93, 0xc5, 0x31, 0xde, 0xd3, 0xcb, 0x51, 0x6f, 0xeb, 0x12, 0x10, 0x93, 0x22, 0xcc, 0x14, 0xaa, 0xd0, 0xd7, 0xdb, 0xb6, 0xf1, 0x08, 0x58, 0xd1, 0x7e, 0x5c, 0x4f, 0x8d, 0x0d, 0x02, 0x72, 0xb1, 0x76, 0x23, 0x17, 0xa9, 0x17, 0x31, 0xfd, 0x24, 0x31, 0x11, 0xd7, 0x61, 0x2b, 0x93, 0x25, 0xb8, 0x13, 0x2d, 0xf9, 0x07, 0x8b, 0xd0, 0xfe, 0xdf, 0x81, 0x3a, 0x8d, 0x5e, 0xe1, 0x89, 0x24, 0x0c, 0xa3, 0x17, 0xef, 0xc4, 0xd9, 0xe2, 0x97, 0x57, 0xa2, 0xeb, 0xca, 0x43, 0x83, 0xed, 0x7d, 0xf4, 0x3a, 0xb5, 0x17, 0x76, 0x0d, 0x69, 0x67, 0x8e, 0xd6, 0x4e, 0x69, 0x03, 0xd2, 0x6e, 0x61, 0x75, 0xc2, 0xf2, 0xd2, 0x71, 0x64, 0x4b, 0xa8, 0xa1, 0xd0, 0x49, 0x25, 0x3e, 0x8e, 0xbe, 0xf5, 0x0a, 0x9c, 0xb7, 0xef, 0x5c, 0x8c, 0x9c, 0x2f, 0xa1, 0x3e, 0x1f, 0x45, 0xad, 0x3c, 0x2b, 0xc1, 0x2f, 0x5e, 0xc2, 0x30, 0x7a, 0xe2, 0x33, 0x4e, 0x20, 0xbe, 0x43, 0x2d, 0xb1, 0x66, 0x48, 0x79, 0xeb, 0xb0, 0xbc, 0xe2, 0x21, 0xa5, 0xe5, 0x46, 0x4b, 0x4b, 0x95, 0x33, 0x59, 0x59, 0x77, 0x6d, 0xa5, 0x16, 0x9a, 0x44, 0x6a, 0x61, 0xbc, 0x6c, 0x17, 0x6d, 0x6a, 0x9b, 0x05, 0xb2, 0x1b, 0xe2, 0x80, 0x6c, 0x62, 0xe5, 0xa3, 0xc4, 0x7f, 0x19, 0x10, 0xe1, 0x23, 0xb9, 0x0a, 0x17, 0x7c, 0x6d, 0x74, 0xe7, 0xb4, 0xad, 0x31, 0x10, 0x14, 0x1a, 0x9a, 0xda, 0x96, 0xe2, 0xa4, 0x41, 0xab, 0x3f, 0x3f, 0xbb, 0x29, 0x43, 0x37, 0x6c, 0x70, 0x99, 0x91, 0x35, 0x12, 0x6e, 0x43, 0x98, 0xf3, 0x75, 0x09, 0x73, 0x6f, 0x4b, 0xf8, 0xef, 0xd8, 0x9a, 0x3b, 0xb8, 0x02, 0x7c, 0xf0, 0x31, 0xd2, 0xda, 0xfc, 0xd3, 0x83, 0x5a, 0xdb, 0xb3, 0xeb, 0xab, 0xb4, 0x76, 0xd6, 0x2b, 0xc3, 0xb5, 0xf6, 0xc4, 0xd8, 0x41, 0xa9, 0x2e, 0x72, 0x50, 0x2f, 0xea, 0x0f, 0xde, 0x46, 0x6b, 0x8b, 0x34, 0xf9, 0x3e, 0x7e, 0x40, 0x06, 0xfd, 0xf6, 0x9b, 0xb5, 0xf6, 0x71, 0x1c, 0xa1, 0xfa, 0x67, 0x6e, 0xd6, 0xda, 0xc7, 0x9f, 0x47, 0xec, 0xf2, 0x9b, 0xb5, 0xf6, 0x71, 0xb4, 0x7c, 0x7a, 0x71, 0xa8, 0xd6, 0x3e, 0x8e, 0x16, 0x4a, 0x5f, 0x39, 0x54, 0x6b, 0x1f, 0x5f, 0x84, 0x98, 0xc2, 0xe1, 0x5a, 0xab, 0x3b, 0xa2, 0xf6, 0x20, 0x38, 0x89, 0x62, 0x2a, 0x52, 0x24, 0xbb, 0xfa, 0x9c, 0xe6, 0xef, 0xbd, 0x8b, 0x5e, 0xf0, 0xb8, 0x9f, 0xa2, 0x65, 0x2f, 0xcc, 0xc8, 0x84, 0x74, 0x13, 0xc6, 0x46, 0x4e, 0x5b, 0xb2, 0x3b, 0xb4, 0x4c, 0x9f, 0x0e, 0x2f, 0x3c, 0x45, 0x79, 0x90, 0x9a, 0xf2, 0x5f, 0xa6, 0x1e, 0x7f, 0x34, 0xe8, 0x5d, 0x87, 0x23, 0x33, 0x53, 0x82, 0xe5, 0x0e, 0x09, 0x12, 0x51, 0x02, 0xbf, 0x08, 0xb8, 0xfa, 0x6f, 0xdc, 0x8f, 0x33, 0x32, 0xea, 0xe0, 0xfb, 0x99, 0x18, 0x46, 0x1b, 0x3a, 0x6d, 0x11, 0xe2, 0xb5, 0x95, 0x22, 0xe8, 0x76, 0x0e, 0xca, 0xe8, 0x11, 0x2b, 0x1b, 0xd9, 0x5b, 0x07, 0x65, 0x53, 0x14, 0xd5, 0xf4, 0xc7, 0x5e, 0x46, 0xda, 0x75, 0xbc, 0x06, 0x4f, 0x0d, 0x0c, 0xd6, 0x20, 0x8d, 0xd5, 0x08, 0xd3, 0xd7, 0x61, 0xba, 0x4c, 0xb5, 0x58, 0x74, 0x05, 0x6b, 0x11, 0x90, 0xa0, 0xfd, 0x55, 0xac, 0x43, 0xb3, 0x04, 0xc7, 0xaf, 0xb8, 0xfa, 0xbf, 0xe8, 0xc6, 0x16, 0x9c, 0x97, 0xa0, 0x7b, 0x07, 0x86, 0x7f, 0x87, 0x61, 0xf4, 0x9e, 0x8e, 0x87, 0xa2, 0x75, 0xc8, 0x1a, 0xac, 0xc3, 0xc2, 0x4e, 0x56, 0x87, 0x21, 0xfd, 0x53, 0x14, 0xd5, 0xff, 0xc7, 0x52, 0x91, 0x56, 0x9f, 0x6e, 0x62, 0xa5, 0x26, 0xef, 0xc7, 0xbe, 0x79, 0xcc, 0x86, 0xa3, 0xad, 0x97, 0x95, 0xba, 0x02, 0x4b, 0x9c, 0x2a, 0xc1, 0x98, 0x7e, 0xee, 0x3f, 0x20, 0xff, 0xe5, 0x58, 0x96, 0x09, 0xcb, 0xc2, 0x3a, 0x74, 0x3b, 0x30, 0xdc, 0x8e, 0x61, 0x11, 0xf1, 0xe6, 0xe8, 0x28, 0xdf, 0x3d, 0xe8, 0x99, 0x2c, 0xb4, 0x61, 0xb9, 0xfb, 0x78, 0xa9, 0x54, 0x1a, 0xe7, 0x29, 0xbf, 0x64, 0xdd, 0x44, 0x1a, 0x22, 0xbf, 0xc0, 0xca, 0x04, 0xd3, 0xb3, 0xcb, 0xb1, 0x8e, 0x52, 0xe1, 0x73, 0x87, 0x8b, 0xfa, 0xa8, 0xa7, 0x1e, 0x5e, 0x3e, 0xb4, 0xdf, 0x16, 0x79, 0xc4, 0x45, 0x43, 0xe3, 0x8f, 0x06, 0x64, 0x1f, 0xf5, 0x62, 0x51, 0x1f, 0x7b, 0x9b, 0x8b, 0xf5, 0xe3, 0x54, 0x31, 0x1d, 0x26, 0x01, 0xef, 0xb9, 0x47, 0x7d, 0x72, 0x0e, 0xdd, 0xdf, 0x51, 0x79, 0xa1, 0xcf, 0x91, 0x16, 0x73, 0x62, 0x1f, 0xe5, 0x2d, 0x5e, 0xbb, 0x9c, 0x46, 0xf2, 0x89, 0xa1, 0xdc, 0x1e, 0xb9, 0x44, 0x75, 0x7a, 0x64, 0x03, 0xf6, 0xe4, 0x0b, 0x22, 0xfc, 0xdb, 0x06, 0x6d, 0x94, 0xe4, 0x15, 0xd0, 0x28, 0xc9, 0xdd, 0x8d, 0xf8, 0xac, 0xc1, 0xf6, 0x2c, 0x70, 0x92, 0x1c, 0x8d, 0x53, 0x79, 0x8b, 0x34, 0xad, 0xd7, 0x24, 0xf9, 0xc8, 0x8b, 0x32, 0x18, 0xc7, 0xb2, 0x9d, 0x26, 0xa9, 0xac, 0x85, 0xf3, 0x94, 0x64, 0x76, 0xcf, 0x88, 0xc7, 0x8a, 0xe8, 0xae, 0x3a, 0xbd, 0xb7, 0xf7, 0xb0, 0x43, 0x04, 0x43, 0xef, 0xcd, 0x23, 0xe2, 0x11, 0x51, 0x06, 0xc3, 0xd9, 0x9b, 0x47, 0xc4, 0x23, 0x5e, 0xc4, 0x1e, 0xe1, 0x6f, 0x29, 0x95, 0xb0, 0xfd, 0xd0, 0xae, 0x7e, 0xc3, 0x69, 0x7a, 0x63, 0xcc, 0x6b, 0x57, 0xf4, 0x79, 0xcf, 0xd5, 0x7c, 0xa7, 0x86, 0xdd, 0xcb, 0xc6, 0xfe, 0x39, 0xd3, 0xdb, 0x39, 0xf8, 0x9e, 0x2a, 0x83, 0xa1, 0x9b, 0x47, 0xd2, 0xc2, 0x01, 0xe4, 0xd6, 0x31, 0x74, 0x24, 0x2d, 0xbc, 0x84, 0x98, 0x25, 0xac, 0x05, 0x74, 0xf7, 0xfe, 0x34, 0xdb, 0x9f, 0x7c, 0x3a, 0xad, 0xe2, 0x36, 0x16, 0xc1, 0xaa, 0x59, 0x84, 0xb2, 0xcd, 0x39, 0x1b, 0x7d, 0xc5, 0xac, 0xe4, 0x9f, 0x45, 0x7a, 0xb8, 0x5d, 0x18, 0x3e, 0xf2, 0xf4, 0x5b, 0x99, 0x36, 0xa4, 0xd2, 0x8c, 0xc6, 0xfb, 0xd8, 0x69, 0x26, 0xd9, 0x3f, 0x5e, 0xab, 0xca, 0x9e, 0x69, 0xf7, 0xc2, 0x96, 0xcc, 0x02, 0x80, 0x25, 0xfa, 0xe2, 0x75, 0x55, 0xeb, 0x04, 0x97, 0x80, 0xde, 0xe5, 0x06, 0xec, 0xa7, 0xd2, 0xe7, 0x27, 0xc1, 0x0b, 0x21, 0x85, 0xcd, 0x53, 0x28, 0xf1, 0xeb, 0xa8, 0x67, 0x7a, 0x57, 0x7f, 0xff, 0x4f, 0x24, 0x78, 0x08, 0x7b, 0xfa, 0x67, 0xfb, 0x5c, 0xfd, 0x7f, 0xc2, 0x75, 0xd4, 0x43, 0x97, 0x25, 0xf8, 0xf9, 0x26, 0x4d, 0xe7, 0xf4, 0x3b, 0xb8, 0x7e, 0x0e, 0xf6, 0xd4, 0xfc, 0xe7, 0xb1, 0xa7, 0x0e, 0xf2, 0x7e, 0xd2, 0xfa, 0x67, 0xc1, 0x0d, 0xf9, 0x55, 0xea, 0x89, 0xa2, 0x1c, 0x99, 0x6a, 0x15, 0x93, 0xce, 0x46, 0x1d, 0xe2, 0x2f, 0xf0, 0xd2, 0x17, 0x84, 0xb0, 0xdc, 0xe6, 0x53, 0x21, 0x56, 0x2e, 0xae, 0xe6, 0x7e, 0xbe, 0x1e, 0xcb, 0x45, 0x3d, 0x7f, 0x08, 0x3d, 0xbb, 0x9f, 0x15, 0x63, 0xf8, 0x3b, 0x18, 0x0e, 0x22, 0x3e, 0x25, 0x5a, 0xae, 0xe3, 0x96, 0x72, 0xc7, 0xde, 0xa6, 0xdc, 0x75, 0x6a, 0xb9, 0xb9, 0x37, 0x95, 0xdb, 0xc2, 0x4a, 0x4a, 0x44, 0x8e, 0xb8, 0x22, 0xff, 0xbc, 0x0b, 0xb9, 0xa3, 0xa7, 0x76, 0xf4, 0x14, 0x96, 0x34, 0x0e, 0xc3, 0x16, 0x09, 0x8e, 0xed, 0x8c, 0x8e, 0xe6, 0x43, 0x37, 0x97, 0x34, 0x6f, 0xd7, 0x6d, 0x4a, 0x4a, 0xe1, 0x25, 0xe1, 0xd8, 0x7a, 0x69, 0xe8, 0xd8, 0x7a, 0xf4, 0xac, 0x36, 0xb6, 0x0a, 0x92, 0x87, 0x6a, 0x7f, 0xed, 0x65, 0x91, 0xd9, 0x97, 0xc1, 0xb9, 0xbd, 0xf6, 0x14, 0x96, 0xb5, 0x90, 0xea, 0x55, 0xdb, 0x81, 0xe5, 0x77, 0x62, 0xbd, 0x5c, 0x98, 0x0b, 0xa5, 0x71, 0xd4, 0x8d, 0xe1, 0x6f, 0x63, 0x18, 0xad, 0xd0, 0xb1, 0xe4, 0x41, 0x2b, 0x73, 0x4b, 0xbd, 0x52, 0x6e, 0xad, 0x57, 0xed, 0xd3, 0x6a, 0xbd, 0x72, 0xd4, 0x7a, 0xa9, 0xf3, 0x7a, 0x2d, 0xfa, 0xd9, 0xc0, 0xac, 0x6c, 0x6d, 0x3c, 0x71, 0x75, 0xf5, 0xf7, 0xa1, 0x5c, 0x0a, 0xd0, 0x9f, 0x7b, 0xef, 0x04, 0x96, 0x76, 0x17, 0x86, 0x31, 0xf7, 0xcf, 0x5e, 0x8d, 0xda, 0x96, 0xf0, 0xcd, 0xa5, 0xcd, 0x7d, 0xed, 0x36, 0xa5, 0x25, 0xa9, 0xa5, 0xe5, 0xaa, 0xa5, 0x0d, 0x99, 0xd9, 0xe7, 0xf7, 0xcb, 0xab, 0xc4, 0x80, 0xaa, 0x9d, 0x0b, 0x87, 0xea, 0xe6, 0xa2, 0x7d, 0x24, 0x07, 0x1a, 0x05, 0xf3, 0x3f, 0x90, 0xe7, 0xa5, 0x73, 0xcd, 0xa4, 0xd9, 0xc0, 0x3c, 0xc9, 0x80, 0xb8, 0x03, 0x83, 0x36, 0x25, 0xff, 0x83, 0xa8, 0x4d, 0xb1, 0x71, 0x9b, 0xb2, 0x28, 0x34, 0x54, 0xaa, 0xf3, 0x9f, 0x1f, 0xee, 0x3b, 0xcc, 0x5f, 0xc7, 0x7d, 0x87, 0xf9, 0xb8, 0xe2, 0xff, 0x59, 0xbe, 0x08, 0xbf, 0x9e, 0x54, 0xd9, 0x1a, 0x14, 0x24, 0xf5, 0x8e, 0xaf, 0xd0, 0x46, 0xb7, 0x82, 0xd9, 0x3d, 0xaf, 0xf1, 0x96, 0xdb, 0x3d, 0xed, 0x1b, 0xf6, 0x18, 0xef, 0xe6, 0x27, 0x7d, 0x43, 0xe0, 0x50, 0x3a, 0x06, 0x22, 0x7f, 0xfe, 0x61, 0xe1, 0x6d, 0x9e, 0x1e, 0x62, 0x3e, 0x96, 0xf5, 0xdf, 0xf7, 0x74, 0xf2, 0x2f, 0x7a, 0x7a, 0xc9, 0xab, 0x3d, 0x8c, 0x2f, 0xae, 0x95, 0x76, 0x8b, 0x70, 0x92, 0xee, 0xb6, 0xa0, 0x5f, 0x99, 0xcf, 0xf6, 0x12, 0x3b, 0xc7, 0x79, 0x6d, 0x8a, 0xd1, 0x6d, 0x13, 0xf5, 0x3e, 0xf4, 0xbf, 0x7f, 0x75, 0x79, 0xf6, 0xdc, 0x9a, 0x6a, 0xba, 0x6b, 0x41, 0xe2, 0xa2, 0x9d, 0x0e, 0x12, 0x3c, 0xf0, 0x21, 0xa7, 0xb3, 0xda, 0x70, 0x15, 0x32, 0x48, 0x79, 0x40, 0xbb, 0x0b, 0x5c, 0x87, 0x0b, 0xc2, 0x16, 0xba, 0xb7, 0xa4, 0x6e, 0xfb, 0xc3, 0xe5, 0x17, 0x7b, 0xa7, 0xa7, 0x2c, 0x57, 0x64, 0x6f, 0x82, 0x94, 0xe5, 0x4a, 0x90, 0x83, 0xde, 0xf5, 0xe4, 0x3d, 0x6c, 0xd5, 0x83, 0x76, 0x31, 0x67, 0x09, 0xc6, 0x5e, 0x61, 0xb1, 0x34, 0x5a, 0x19, 0x96, 0x09, 0xad, 0x30, 0x79, 0x8b, 0xfa, 0x6c, 0x45, 0xe0, 0x6b, 0xb6, 0xc9, 0xeb, 0xcd, 0x3a, 0x06, 0xd7, 0x6a, 0xeb, 0xa3, 0x9c, 0x3c, 0x8c, 0xd5, 0xe6, 0x12, 0xe7, 0x1e, 0x9a, 0x19, 0x5c, 0x4c, 0x2f, 0x25, 0x23, 0xd6, 0x25, 0x3f, 0x95, 0xca, 0x49, 0xdb, 0xc9, 0x78, 0xa1, 0x75, 0x5b, 0x9e, 0xce, 0xde, 0x95, 0x2a, 0xcb, 0x55, 0x8c, 0xbe, 0x50, 0xf5, 0x53, 0x6c, 0x2d, 0x95, 0x82, 0x1e, 0xf1, 0x31, 0x5a, 0x49, 0xc9, 0x32, 0xda, 0xdd, 0x7f, 0x8a, 0xa4, 0x2c, 0xf8, 0x2e, 0xad, 0x36, 0xcb, 0x04, 0x5a, 0x6d, 0x96, 0xa5, 0x65, 0x94, 0xb1, 0x15, 0xe2, 0xb9, 0xaf, 0xf3, 0x34, 0x25, 0xf1, 0xea, 0xee, 0x9a, 0x16, 0x6b, 0x57, 0xcd, 0x32, 0xb3, 0xf0, 0xee, 0xeb, 0xef, 0x35, 0x03, 0x9c, 0xa8, 0xf9, 0x4e, 0x74, 0x14, 0x1d, 0xfe, 0xe1, 0x91, 0x65, 0x3b, 0x45, 0x1c, 0x4d, 0xff, 0xe1, 0x52, 0x9e, 0xd9, 0xbd, 0xa9, 0xc5, 0xd2, 0xb5, 0x69, 0x99, 0x89, 0x95, 0xd2, 0x12, 0x2d, 0xa3, 0x01, 0x4b, 0xd8, 0x2d, 0x3e, 0xf6, 0x1f, 0xe6, 0x9f, 0xb9, 0x3b, 0x11, 0xf9, 0x27, 0xaa, 0xfc, 0xe3, 0x7d, 0x1a, 0x7f, 0x23, 0xf1, 0x17, 0xf6, 0x91, 0xe6, 0xb0, 0x77, 0x42, 0xb7, 0x95, 0xe3, 0x4a, 0x23, 0xf7, 0x24, 0x7b, 0x4b, 0x14, 0x7b, 0xef, 0xe1, 0x3d, 0x0c, 0x37, 0x17, 0x71, 0x07, 0x85, 0x38, 0x2a, 0x8f, 0x63, 0x2b, 0xdb, 0xab, 0xeb, 0xa5, 0x16, 0x21, 0x40, 0x0f, 0xdf, 0xf8, 0x9d, 0xf6, 0xc9, 0x78, 0x91, 0xc0, 0xd1, 0x21, 0xc3, 0xfd, 0x5b, 0xb3, 0x20, 0x3d, 0x36, 0x23, 0x36, 0xda, 0x2b, 0x4f, 0x55, 0x3f, 0x5d, 0xc4, 0x3d, 0x97, 0xb2, 0x60, 0x84, 0xf7, 0xcf, 0x12, 0x7a, 0x2e, 0x8e, 0xeb, 0x9b, 0xdc, 0x16, 0x11, 0x7e, 0xd9, 0x80, 0xbd, 0x75, 0x90, 0xf5, 0xd6, 0x63, 0x81, 0xa8, 0xf7, 0xa3, 0xb3, 0xee, 0x7a, 0x0e, 0x7b, 0xd7, 0x94, 0xb1, 0xe0, 0xeb, 0xb4, 0x6f, 0x4c, 0xc5, 0x9e, 0x9a, 0x96, 0x83, 0xbb, 0x6b, 0x96, 0x85, 0x85, 0x89, 0x91, 0x81, 0x34, 0xf6, 0x96, 0x51, 0xd9, 0x44, 0xac, 0xe9, 0x0a, 0x16, 0xca, 0xc0, 0x92, 0x8c, 0xe2, 0x4b, 0x83, 0xdc, 0xe1, 0x35, 0xe2, 0x0e, 0x3b, 0xbe, 0x1e, 0xf7, 0x84, 0x2b, 0x7b, 0x36, 0x21, 0xf7, 0x4d, 0xb7, 0x70, 0x4f, 0xd6, 0xb8, 0xe7, 0xbc, 0x3c, 0x84, 0x7b, 0x15, 0xf2, 0xae, 0xf8, 0x9a, 0x9c, 0x37, 0xed, 0x49, 0x6c, 0x39, 0xbc, 0x3b, 0x71, 0xd9, 0xc1, 0xe1, 0x9c, 0xa7, 0x86, 0xa3, 0x9c, 0x2b, 0xc4, 0x1d, 0x69, 0x6b, 0x7f, 0x34, 0x80, 0xfd, 0x6f, 0x6f, 0x36, 0x0b, 0x5e, 0x01, 0xed, 0xdf, 0xc0, 0x8d, 0x9b, 0x9f, 0xd5, 0xe5, 0xa4, 0x8b, 0x70, 0x22, 0x85, 0xdf, 0xea, 0x6d, 0xc7, 0xa5, 0x4f, 0x4d, 0x75, 0x74, 0x63, 0xee, 0x78, 0x7a, 0xca, 0xf9, 0xce, 0x4e, 0x7a, 0xa7, 0xa0, 0xac, 0x42, 0x09, 0xf0, 0x67, 0xb2, 0x13, 0x7a, 0xc0, 0x8c, 0xf1, 0x3c, 0x84, 0x56, 0x84, 0x05, 0x08, 0x6d, 0x08, 0x0b, 0x11, 0x26, 0x22, 0x74, 0x22, 0xcc, 0x40, 0x58, 0x8c, 0x30, 0x13, 0xa1, 0xa7, 0xa8, 0x1f, 0xce, 0x8e, 0x2f, 0x03, 0x33, 0xc2, 0xf3, 0x08, 0xad, 0x08, 0x7b, 0x10, 0xda, 0x10, 0x5e, 0x46, 0x98, 0x88, 0xb0, 0x17, 0x61, 0x06, 0xc2, 0x6b, 0x08, 0x33, 0xa9, 0x5e, 0xb3, 0xae, 0x49, 0x90, 0xfd, 0xac, 0xd8, 0xc1, 0x4b, 0xc4, 0x94, 0x17, 0x7f, 0x88, 0xa5, 0xca, 0x66, 0xf6, 0x3c, 0x38, 0x8f, 0xf1, 0xda, 0x8c, 0x18, 0xab, 0x8a, 0x29, 0x60, 0x5c, 0x37, 0x22, 0xc6, 0xa6, 0x62, 0x0a, 0x19, 0xff, 0x67, 0x10, 0x93, 0xa8, 0x62, 0x9c, 0xac, 0xa4, 0x75, 0x88, 0xc9, 0x50, 0x31, 0xc5, 0xac, 0xcc, 0x10, 0x62, 0x32, 0x55, 0x8c, 0x87, 0x97, 0x5e, 0x89, 0xd2, 0xcd, 0xc6, 0xf9, 0xef, 0x9d, 0x78, 0x11, 0x7e, 0xa1, 0x2f, 0x6e, 0xac, 0x6b, 0x57, 0xb4, 0xcd, 0x59, 0x68, 0xb4, 0x86, 0xc6, 0x65, 0x99, 0xac, 0xd8, 0x18, 0xfe, 0x6e, 0xe7, 0x04, 0x11, 0x7e, 0xf2, 0x12, 0x86, 0xf5, 0x6a, 0x78, 0x33, 0x7b, 0x97, 0x9c, 0x87, 0x9f, 0x19, 0x43, 0x3d, 0xca, 0xc3, 0xb4, 0xdb, 0x28, 0x46, 0x0d, 0x07, 0x31, 0x6c, 0x52, 0xc3, 0x8b, 0xe9, 0x2d, 0x0e, 0xf5, 0xfd, 0xdb, 0x09, 0x8a, 0xed, 0x63, 0x8f, 0xf0, 0x4d, 0x48, 0xc0, 0x71, 0xb1, 0x8e, 0x79, 0xb3, 0x13, 0xe8, 0x9d, 0x0d, 0xf5, 0x74, 0xaf, 0x6d, 0x95, 0x2f, 0xe2, 0xef, 0x47, 0xf8, 0x3b, 0x8e, 0xbf, 0x3f, 0xc0, 0xb6, 0xd9, 0xa3, 0xf1, 0x97, 0x3d, 0x58, 0xb3, 0xa9, 0x82, 0xbb, 0xbd, 0x4d, 0x68, 0x0c, 0x04, 0x5a, 0x03, 0x43, 0x2b, 0x3c, 0x55, 0xd0, 0x8c, 0xb1, 0xc4, 0xb7, 0x2d, 0xdc, 0x3e, 0x91, 0x9e, 0x86, 0x06, 0xda, 0xeb, 0x83, 0x4d, 0xad, 0x2d, 0xc3, 0x09, 0x8a, 0x9b, 0x96, 0x37, 0xb5, 0x21, 0x96, 0xce, 0xfe, 0x59, 0xd5, 0x18, 0x68, 0x1d, 0x9e, 0x5a, 0xd1, 0xd4, 0xd2, 0x38, 0xd9, 0xf5, 0xe5, 0xb9, 0x59, 0x7a, 0xe9, 0xf0, 0x74, 0xd0, 0xde, 0x25, 0x2e, 0x8d, 0xc3, 0x31, 0x75, 0x8e, 0xef, 0x4e, 0x97, 0x60, 0x31, 0xdf, 0x5f, 0x6e, 0x51, 0x2c, 0x7c, 0xa7, 0x3a, 0xae, 0xed, 0x9a, 0xe9, 0x24, 0xb9, 0xdd, 0x89, 0x74, 0xfd, 0x97, 0xc5, 0xec, 0xba, 0x83, 0xf4, 0x5c, 0xc9, 0x0a, 0x44, 0x84, 0xfd, 0xf4, 0x8f, 0xce, 0xa8, 0x53, 0x32, 0xe9, 0x5e, 0x5c, 0xb9, 0x19, 0x79, 0x3d, 0x3f, 0x78, 0xb7, 0xf5, 0x8e, 0xef, 0x56, 0x3b, 0x11, 0xc3, 0x9e, 0x62, 0xdf, 0xb1, 0x0d, 0xc3, 0x41, 0x16, 0xda, 0x8d, 0xa1, 0x25, 0x2c, 0x74, 0x0c, 0x43, 0x22, 0x0b, 0x9d, 0xc3, 0xd0, 0x3c, 0xb6, 0x03, 0xfe, 0x3c, 0x86, 0x2a, 0x58, 0xa8, 0x1b, 0x43, 0x6e, 0x16, 0xda, 0x8f, 0x21, 0xf6, 0x26, 0x71, 0xd2, 0x0e, 0x0c, 0x65, 0xb1, 0xd0, 0x46, 0x0c, 0xa5, 0xb1, 0x50, 0x08, 0x43, 0x6c, 0x54, 0x27, 0x39, 0x31, 0x64, 0x63, 0xa1, 0x4c, 0x0c, 0xb1, 0xf9, 0x33, 0x69, 0x8c, 0x04, 0x59, 0xfb, 0xf8, 0x1b, 0xbf, 0x12, 0xdc, 0xbf, 0x41, 0x86, 0xf4, 0x6e, 0xc1, 0x89, 0xb8, 0x1d, 0x22, 0x74, 0xbf, 0x88, 0x98, 0xd5, 0x88, 0x79, 0x53, 0xdb, 0x4b, 0x70, 0xbf, 0x1f, 0x63, 0x5d, 0xb7, 0xee, 0x25, 0x48, 0x7f, 0x81, 0xef, 0x25, 0x08, 0x80, 0x36, 0xdb, 0xdd, 0x5f, 0xba, 0x14, 0xd2, 0x97, 0xb4, 0xb0, 0x77, 0x87, 0xca, 0x7a, 0xf2, 0xf5, 0x3e, 0xd7, 0x98, 0x90, 0x00, 0x67, 0x3b, 0xe7, 0x1c, 0x89, 0x5c, 0xf7, 0x15, 0x1d, 0x7f, 0xeb, 0x87, 0x03, 0x88, 0xdf, 0xb1, 0xac, 0xbb, 0xda, 0x85, 0x74, 0x6e, 0x6d, 0xb7, 0xc1, 0x0f, 0x0f, 0x23, 0xaf, 0x2a, 0xbe, 0xc3, 0xc0, 0xc6, 0x77, 0x18, 0x2c, 0x57, 0x2d, 0x50, 0x33, 0x3d, 0x6f, 0xf7, 0x9c, 0xfb, 0x7a, 0xfb, 0x05, 0xe2, 0x6d, 0xbe, 0xce, 0xae, 0x14, 0xf9, 0xcd, 0x3c, 0x5d, 0xba, 0x57, 0x34, 0x25, 0xdd, 0xbd, 0x3b, 0x45, 0xde, 0x89, 0x25, 0xf7, 0xd1, 0x9e, 0x0c, 0xba, 0x1b, 0x7b, 0xbb, 0x7d, 0x03, 0xf9, 0x38, 0x0b, 0x4c, 0xde, 0x49, 0x3b, 0x32, 0xc4, 0x75, 0x37, 0xdb, 0xa2, 0xc9, 0x5b, 0x44, 0xf8, 0xf9, 0x06, 0xb2, 0x3a, 0x93, 0x5a, 0x64, 0xb8, 0xf7, 0xb5, 0x70, 0x47, 0xe4, 0x86, 0x26, 0x93, 0x49, 0x8b, 0x10, 0xf3, 0x42, 0x14, 0x33, 0x4c, 0x2e, 0xf7, 0x3e, 0xad, 0xed, 0xb1, 0x48, 0x37, 0xd2, 0x9a, 0xf1, 0x5e, 0xf6, 0x84, 0xaf, 0xac, 0x16, 0x7d, 0x91, 0x49, 0xb2, 0x99, 0xde, 0xd9, 0x97, 0xfb, 0xc5, 0xcb, 0x36, 0x1b, 0xed, 0xbb, 0xb8, 0xf7, 0x4d, 0xdb, 0x90, 0x7d, 0x17, 0x24, 0x89, 0x7b, 0x4b, 0xb3, 0xe2, 0xf8, 0x9a, 0x33, 0x33, 0x8e, 0xf3, 0x99, 0x14, 0xb7, 0xc2, 0xf2, 0xfa, 0x3b, 0x28, 0x95, 0xf5, 0x51, 0xab, 0x1f, 0xe2, 0x72, 0x99, 0x62, 0xa6, 0x7d, 0x74, 0x23, 0xed, 0x42, 0xa9, 0x1f, 0xdb, 0xbf, 0x3a, 0x28, 0x94, 0xd8, 0xec, 0xa9, 0xa5, 0x09, 0x77, 0xed, 0x34, 0x2a, 0x35, 0x3b, 0x41, 0xbe, 0x9e, 0xe6, 0x49, 0x2f, 0x4b, 0x4c, 0x56, 0x12, 0x12, 0xee, 0x46, 0x4c, 0xcf, 0xae, 0x42, 0x98, 0xa4, 0xf4, 0xee, 0xd4, 0x2b, 0x97, 0xc5, 0xd3, 0x19, 0xf3, 0xbf, 0x8e, 0x44, 0xad, 0x6f, 0x22, 0x67, 0xb4, 0xd3, 0xab, 0x93, 0x05, 0x9c, 0x4d, 0x33, 0xd7, 0x0b, 0x8f, 0xd7, 0x74, 0x8a, 0x10, 0x09, 0x8a, 0x70, 0x6c, 0x85, 0x04, 0x13, 0x6b, 0x65, 0x48, 0xdb, 0xac, 0x49, 0x64, 0x22, 0xae, 0x4b, 0xd3, 0xd6, 0x0f, 0x97, 0x86, 0x26, 0x87, 0xb4, 0x01, 0x92, 0x43, 0x5a, 0x27, 0x97, 0x03, 0x6f, 0x79, 0xda, 0xce, 0x9b, 0x5b, 0x9e, 0x56, 0xa1, 0xb6, 0xfc, 0xf4, 0x2d, 0x2d, 0xdf, 0x10, 0x6d, 0xf9, 0xba, 0xc1, 0x96, 0x7f, 0x9d, 0x16, 0x8c, 0x18, 0xa0, 0x9a, 0xdf, 0xb9, 0x6f, 0x88, 0x64, 0xa6, 0x0e, 0x91, 0x8c, 0x95, 0x4b, 0x06, 0x65, 0x72, 0x55, 0x3c, 0x27, 0xdc, 0xc9, 0x4f, 0x93, 0x98, 0x79, 0x7c, 0x34, 0xbd, 0x77, 0x1c, 0x67, 0x1b, 0xa0, 0x5d, 0xaa, 0xb9, 0x37, 0x5c, 0xea, 0x1d, 0x80, 0xfb, 0xb1, 0xfd, 0x3e, 0x6a, 0x3f, 0xce, 0xf5, 0x3f, 0xc3, 0xf6, 0x67, 0xd4, 0x2e, 0x85, 0x09, 0x1d, 0x8a, 0xc5, 0x0f, 0xfc, 0xed, 0xdd, 0xf9, 0xce, 0x80, 0xae, 0x6b, 0x4d, 0x0b, 0x4c, 0x58, 0xec, 0x0d, 0x61, 0x4a, 0x9d, 0x8b, 0xad, 0x94, 0xbd, 0x0e, 0x00, 0x05, 0x26, 0xd4, 0xcc, 0x73, 0xd2, 0x89, 0x89, 0x48, 0x05, 0x6c, 0x6c, 0xe3, 0xaa, 0xf1, 0xfe, 0xa9, 0xf4, 0xfc, 0x2f, 0x37, 0x0f, 0xb9, 0x4d, 0xd2, 0x76, 0x92, 0xfc, 0x4c, 0x18, 0x7c, 0x27, 0xdf, 0x79, 0x27, 0xc6, 0x6d, 0x34, 0x42, 0xef, 0xbb, 0x82, 0xfc, 0xb2, 0x64, 0x7e, 0x7e, 0xd3, 0x6e, 0x8d, 0xf6, 0xe8, 0x35, 0xed, 0xde, 0xc4, 0x84, 0x17, 0x48, 0xbe, 0x13, 0xd0, 0x3f, 0xbe, 0xef, 0xa0, 0x0c, 0x13, 0x8c, 0x54, 0x7e, 0xea, 0x0d, 0xba, 0xef, 0x1d, 0x5e, 0x3b, 0xb8, 0x32, 0xf2, 0x6c, 0xc2, 0x95, 0x51, 0x4a, 0x9a, 0x31, 0x75, 0x66, 0xfa, 0x44, 0x74, 0xa4, 0x0c, 0xa9, 0x86, 0xe3, 0x6b, 0x05, 0x3d, 0xad, 0x43, 0xbc, 0xd7, 0xd9, 0xf5, 0x05, 0xa4, 0xdf, 0xc1, 0x9e, 0x38, 0x9a, 0x65, 0xf6, 0x36, 0x4f, 0x62, 0x03, 0x6a, 0xfa, 0xa6, 0x80, 0x59, 0x30, 0xe1, 0xcc, 0xfc, 0x0c, 0x96, 0xb8, 0x36, 0x5a, 0xe2, 0x24, 0x2c, 0xd1, 0xa2, 0xdd, 0x05, 0x9f, 0xb3, 0x93, 0xcb, 0xc8, 0x6d, 0x4b, 0xc5, 0x9e, 0xf5, 0x9d, 0xc0, 0xf2, 0xcd, 0xe9, 0x2e, 0x7a, 0x02, 0xe3, 0x43, 0x4f, 0xf7, 0x68, 0x85, 0x96, 0x2b, 0xf5, 0x5a, 0x07, 0x68, 0x79, 0x7c, 0xaf, 0x51, 0x2d, 0x61, 0xcb, 0x14, 0xe0, 0x94, 0x73, 0x4e, 0x09, 0xe3, 0xbc, 0x21, 0x3a, 0x0f, 0xc1, 0xb7, 0x2e, 0xd5, 0xc9, 0x9f, 0x4b, 0xd9, 0x70, 0xbd, 0x94, 0xe6, 0x09, 0x8e, 0x4d, 0x0c, 0xd3, 0x7b, 0x87, 0xee, 0x84, 0x12, 0xfe, 0x4c, 0x2a, 0x59, 0xd4, 0xdb, 0x4e, 0xb1, 0xe7, 0xd0, 0xea, 0x93, 0xb0, 0x89, 0xbd, 0xde, 0x89, 0x30, 0x4d, 0xb1, 0xd2, 0xc8, 0x9d, 0xeb, 0xc7, 0xf8, 0x59, 0xd1, 0x22, 0x60, 0x1b, 0x03, 0xd8, 0xaa, 0xec, 0x5e, 0x86, 0x5d, 0x89, 0xd8, 0x23, 0x82, 0x7a, 0xa6, 0xc9, 0x23, 0xae, 0xe3, 0xae, 0xd0, 0x7e, 0x8f, 0xd3, 0xeb, 0xa4, 0x77, 0xcf, 0xff, 0xf7, 0x2a, 0x55, 0xbb, 0xac, 0xa9, 0xb4, 0xc3, 0x31, 0xc9, 0x1b, 0x6a, 0x81, 0x48, 0xc7, 0xb9, 0x67, 0x1b, 0xa2, 0x96, 0x60, 0xe2, 0x06, 0x11, 0xde, 0x5b, 0x27, 0x08, 0x42, 0x46, 0x71, 0x99, 0x6f, 0x22, 0x5f, 0xc3, 0xa5, 0x2f, 0x94, 0x61, 0xfc, 0x16, 0xc1, 0x99, 0xea, 0x71, 0x7f, 0x1f, 0x8c, 0x7e, 0xc8, 0x29, 0x84, 0x48, 0xf7, 0xe6, 0x06, 0xbd, 0x2f, 0x44, 0x6f, 0x5d, 0x97, 0x86, 0x26, 0x38, 0x01, 0xdb, 0xfe, 0x5e, 0x15, 0xb6, 0xc1, 0x27, 0xd2, 0xd9, 0x1b, 0xf3, 0xe9, 0xd4, 0x8d, 0xb2, 0x5d, 0x98, 0x53, 0xc0, 0x9c, 0x22, 0x1b, 0x29, 0xaf, 0x62, 0x2c, 0x01, 0x63, 0xf9, 0x24, 0x8b, 0xf1, 0x0e, 0x7a, 0xa2, 0x6f, 0x3a, 0xd3, 0x02, 0xe3, 0xd3, 0x49, 0x57, 0xca, 0xba, 0xe8, 0xd9, 0xcb, 0xbd, 0x57, 0x31, 0x3d, 0x89, 0xa5, 0xdb, 0x18, 0x76, 0xe7, 0xf1, 0xd0, 0x4e, 0xa2, 0x3b, 0xdb, 0x02, 0xc2, 0x0d, 0xe6, 0xdf, 0xbe, 0xca, 0x7c, 0xd1, 0x9d, 0x07, 0x06, 0xf4, 0x70, 0x1c, 0xa5, 0xf1, 0xe6, 0xb3, 0x52, 0x96, 0x9c, 0x46, 0xde, 0x4a, 0xd9, 0xab, 0xfc, 0xcc, 0x88, 0xb2, 0x2e, 0xeb, 0x43, 0x30, 0x9f, 0x4a, 0x97, 0xb1, 0x7f, 0xf2, 0x1a, 0xa4, 0xa9, 0xf4, 0x66, 0x65, 0xde, 0x5a, 0xa4, 0xdd, 0x23, 0xc2, 0x91, 0x57, 0x71, 0xae, 0xb7, 0xd1, 0x7d, 0x9d, 0x72, 0x81, 0x9f, 0x05, 0xe4, 0xed, 0x55, 0x4c, 0x2c, 0xbe, 0x9c, 0x76, 0x3a, 0x4f, 0xbb, 0xc6, 0x75, 0xa2, 0xe2, 0x8c, 0x99, 0x9f, 0x91, 0xe3, 0xb8, 0x89, 0xd6, 0xc6, 0xcf, 0x13, 0xf2, 0xf6, 0xca, 0xc9, 0x3c, 0x57, 0xda, 0x52, 0xb0, 0xba, 0x7f, 0x00, 0x09, 0x7e, 0x5d, 0xe5, 0x2b, 0x60, 0xe3, 0x73, 0x65, 0xc5, 0x19, 0x2b, 0xe6, 0xee, 0x80, 0xe9, 0xb4, 0x2f, 0x85, 0xcd, 0x42, 0x2f, 0xa6, 0xd0, 0x7e, 0x4c, 0x55, 0xdf, 0xec, 0x6a, 0x1f, 0xd8, 0x4e, 0x77, 0xc0, 0x88, 0x39, 0x3f, 0x8f, 0x7c, 0x88, 0xeb, 0x38, 0x2b, 0x8e, 0xb1, 0x24, 0xe9, 0x59, 0xac, 0xa1, 0x45, 0x7d, 0x5e, 0xcf, 0x6e, 0x81, 0x37, 0xb5, 0x09, 0xb3, 0xcb, 0xd1, 0xd5, 0x29, 0x6d, 0x0d, 0x2c, 0x93, 0xd4, 0xdb, 0xe2, 0x4d, 0x2d, 0x42, 0x03, 0x7b, 0x4c, 0x0b, 0x7c, 0x2b, 0x94, 0x30, 0x63, 0xf0, 0xfe, 0xb6, 0xb0, 0x9a, 0xfa, 0x71, 0x3e, 0xb6, 0xe4, 0xbe, 0xc3, 0x83, 0x23, 0x55, 0x82, 0x29, 0x1f, 0x30, 0x7c, 0x12, 0xe2, 0xbb, 0x24, 0xf4, 0x7e, 0x5c, 0xfd, 0x3d, 0x6f, 0x60, 0xf8, 0x25, 0xb6, 0x2b, 0x6c, 0xb9, 0x04, 0x37, 0x2e, 0xc9, 0x7e, 0x3a, 0x29, 0x8a, 0xef, 0x0c, 0x5b, 0x1d, 0xc1, 0xb1, 0x1a, 0xd0, 0x9e, 0x23, 0x50, 0xfd, 0x73, 0xfd, 0x45, 0xec, 0xc9, 0xb8, 0x7f, 0x1c, 0x9d, 0x52, 0xa4, 0x9e, 0x54, 0x74, 0x9d, 0x97, 0x8a, 0xa3, 0x03, 0xb5, 0x89, 0x76, 0x3d, 0xff, 0x30, 0x2c, 0x41, 0x8d, 0x5b, 0x7b, 0x7e, 0x3f, 0xbf, 0xd2, 0x51, 0x68, 0x40, 0x0d, 0xcd, 0xa6, 0x3a, 0x6d, 0x7f, 0xc0, 0x8f, 0xb1, 0x6f, 0x60, 0x8c, 0x30, 0xc7, 0xb0, 0xc4, 0x97, 0x44, 0x78, 0x77, 0xac, 0x56, 0xef, 0x71, 0x87, 0xa2, 0xf5, 0xb6, 0x0d, 0xab, 0xf7, 0x58, 0xad, 0xde, 0xe9, 0x7d, 0x12, 0xec, 0xdd, 0x87, 0xf5, 0x46, 0x6c, 0xfa, 0x65, 0x56, 0xef, 0x55, 0xc8, 0x25, 0x47, 0x0e, 0xfe, 0x65, 0xf5, 0xab, 0xde, 0xae, 0xd5, 0x6f, 0xde, 0x6b, 0xbc, 0x7e, 0x8e, 0x0f, 0x87, 0xd6, 0xcf, 0xd1, 0xcd, 0xd3, 0x53, 0x3d, 0xfe, 0x27, 0xdd, 0x7f, 0x4f, 0x23, 0x4f, 0xd8, 0x57, 0x3c, 0xbb, 0x5a, 0x47, 0xda, 0xe1, 0x40, 0x8d, 0xce, 0x46, 0xcf, 0xf0, 0x8b, 0x1e, 0x11, 0x0e, 0xd7, 0xa1, 0x65, 0x70, 0xcb, 0x30, 0xf6, 0x55, 0x75, 0x37, 0x19, 0xed, 0x97, 0x41, 0x8d, 0xcb, 0xda, 0x5b, 0xd5, 0xd9, 0x21, 0xd8, 0x0e, 0x05, 0xd0, 0x77, 0xca, 0xfa, 0xc0, 0x76, 0x08, 0xf1, 0xa9, 0x01, 0xd6, 0x3f, 0xa3, 0x0f, 0x7f, 0xb4, 0x39, 0x01, 0x6c, 0x9f, 0xda, 0xe0, 0xcb, 0x20, 0xd1, 0xb2, 0x1c, 0xf7, 0x06, 0x0d, 0x81, 0xd8, 0xf7, 0x43, 0x0d, 0x26, 0x0c, 0x67, 0x8b, 0xf4, 0x94, 0xda, 0x81, 0x23, 0xad, 0x17, 0x61, 0x16, 0x5a, 0x87, 0x0b, 0xd5, 0x9d, 0x18, 0xb2, 0xb8, 0xed, 0x9a, 0xb5, 0xbe, 0xf7, 0xb4, 0x08, 0xef, 0x1c, 0xf7, 0x7c, 0x72, 0x76, 0xe8, 0x79, 0x11, 0x05, 0x83, 0xe7, 0x45, 0x68, 0x27, 0x3d, 0xf0, 0x73, 0x23, 0x7e, 0x32, 0x10, 0x88, 0x4d, 0xcc, 0x02, 0xd3, 0xae, 0x5b, 0x4e, 0x7c, 0xa0, 0x51, 0xeb, 0x3d, 0x51, 0x71, 0x06, 0x62, 0x2b, 0xdb, 0x6d, 0x76, 0xb4, 0x4f, 0x2f, 0xb3, 0xf7, 0x2e, 0xae, 0x55, 0x77, 0x92, 0x15, 0x9c, 0x0a, 0x4b, 0xe1, 0x9e, 0x75, 0x84, 0xbf, 0x27, 0x30, 0x88, 0x4f, 0x9d, 0x2e, 0xc3, 0x3d, 0x75, 0x7b, 0x3b, 0xc0, 0xb6, 0x6c, 0x89, 0xcc, 0x4f, 0x97, 0xdb, 0x2d, 0x36, 0x63, 0x7c, 0x8c, 0x6a, 0xc3, 0xdf, 0xc4, 0x70, 0xa2, 0x1a, 0xde, 0x8b, 0xe1, 0xd1, 0xb2, 0x99, 0x9d, 0xa7, 0xbb, 0x4b, 0x2c, 0xc5, 0x58, 0x82, 0x9a, 0xe7, 0x80, 0x58, 0x80, 0xb1, 0x3b, 0xd4, 0xd8, 0x21, 0x71, 0x12, 0xc6, 0x92, 0xd4, 0xd8, 0x71, 0x31, 0x05, 0x63, 0x77, 0xaa, 0xb1, 0x23, 0x62, 0xbc, 0x48, 0xd6, 0x6f, 0xfb, 0x8c, 0xe0, 0xc7, 0xb3, 0xc6, 0x87, 0xaa, 0x80, 0xee, 0x30, 0x1c, 0x3a, 0x81, 0x9e, 0xcf, 0xe1, 0x80, 0x99, 0xbd, 0x19, 0x1e, 0x14, 0xee, 0xa2, 0xf4, 0x52, 0xf4, 0xfc, 0x26, 0x67, 0xaa, 0x61, 0x1c, 0x7f, 0x93, 0x05, 0x35, 0x7c, 0x2f, 0x86, 0x13, 0xd5, 0x70, 0x16, 0x86, 0xcd, 0x6a, 0xf8, 0x41, 0x9c, 0xf7, 0x07, 0xd4, 0x30, 0x7a, 0x88, 0x99, 0xbd, 0x6a, 0xb8, 0x0c, 0xc3, 0xe7, 0xd5, 0x30, 0xae, 0x7f, 0x33, 0x4f, 0xaa, 0xe1, 0xc7, 0x30, 0x7c, 0x54, 0x0d, 0x2b, 0x18, 0x0e, 0xab, 0x61, 0xd4, 0xa9, 0xcc, 0x5d, 0x6a, 0x18, 0x6d, 0x71, 0xe6, 0x0e, 0x35, 0x8c, 0x36, 0x28, 0xf3, 0x05, 0x35, 0xfc, 0x5d, 0x0c, 0x6f, 0x50, 0xc3, 0x9b, 0x30, 0xfc, 0xb4, 0x1a, 0xfe, 0x1f, 0x18, 0x5e, 0xc1, 0x76, 0xff, 0xed, 0x66, 0xf1, 0xef, 0x63, 0x7c, 0x31, 0x3f, 0xd7, 0x8f, 0xc5, 0x7f, 0x8c, 0xf1, 0x5a, 0x16, 0x7f, 0x93, 0xc5, 0x0f, 0x62, 0xdc, 0xc3, 0xe2, 0xec, 0xec, 0xb5, 0xd2, 0xf7, 0x31, 0x5e, 0xc0, 0xcf, 0x95, 0x63, 0xda, 0x11, 0x8f, 0xf1, 0x0c, 0x16, 0x3f, 0xc2, 0xe2, 0x28, 0x87, 0x4c, 0x76, 0x6a, 0xdc, 0x8c, 0xe3, 0x2c, 0x8e, 0x5a, 0x9d, 0xc9, 0x9e, 0x9c, 0xcf, 0x38, 0xc6, 0xf2, 0xff, 0x01, 0xe7, 0xea, 0x3e, 0x16, 0xfa, 0xb7, 0x80, 0x91, 0x9f, 0xe9, 0x87, 0x98, 0x0b, 0x43, 0xce, 0xf5, 0x4b, 0xab, 0x61, 0x7b, 0x65, 0x67, 0xf4, 0x2a, 0xc9, 0xb5, 0x9d, 0xe4, 0x93, 0x19, 0x9e, 0x76, 0x24, 0xd2, 0x39, 0x7f, 0xdd, 0x4e, 0xda, 0x3d, 0xf3, 0xc8, 0x40, 0xf7, 0x35, 0x00, 0x7e, 0xf6, 0x10, 0xa6, 0x2d, 0xc6, 0x75, 0x56, 0x35, 0x72, 0x3b, 0x6f, 0xad, 0xa9, 0x6c, 0x93, 0x2d, 0x35, 0x9d, 0x18, 0x2f, 0xa1, 0x38, 0xcb, 0xe9, 0x15, 0x12, 0x59, 0x59, 0x17, 0x68, 0xe4, 0xdc, 0xcf, 0xbc, 0xd6, 0x52, 0x1b, 0x3d, 0xd9, 0xa7, 0x5d, 0x86, 0xd6, 0xa4, 0x8a, 0x33, 0x63, 0x0c, 0xb8, 0xf2, 0xd2, 0xe3, 0x3f, 0x13, 0xbb, 0xf2, 0x7f, 0x49, 0x10, 0x0f, 0x76, 0x5c, 0xeb, 0xb2, 0x98, 0xe7, 0x93, 0x27, 0xfb, 0xa8, 0x34, 0x3a, 0xe7, 0x4a, 0xdf, 0xaf, 0x9d, 0x5e, 0x24, 0x41, 0xd0, 0xa7, 0xcd, 0x98, 0xa9, 0x6f, 0x56, 0x9c, 0x19, 0x77, 0xa3, 0xb2, 0x3d, 0x00, 0x4c, 0xa7, 0x9f, 0x1d, 0xd4, 0xdd, 0x71, 0x6b, 0x65, 0x48, 0x3e, 0x40, 0x5a, 0xe5, 0xcc, 0x48, 0x77, 0x62, 0xaa, 0x1f, 0xd3, 0xee, 0x53, 0x3c, 0x8c, 0xa2, 0xb7, 0xba, 0x93, 0xdd, 0x25, 0x3b, 0xce, 0x4f, 0x10, 0x22, 0x9f, 0x7f, 0x9c, 0x8f, 0xaf, 0x8b, 0xca, 0x8e, 0x8b, 0x90, 0xdc, 0xc2, 0x43, 0x19, 0xe5, 0x58, 0xee, 0x5a, 0xbe, 0x0a, 0xb8, 0x8b, 0xad, 0x00, 0x7c, 0xdf, 0xa5, 0x35, 0x40, 0xd5, 0x7e, 0xf1, 0x35, 0xaf, 0x4e, 0x1e, 0x9b, 0x4e, 0x75, 0xcb, 0x40, 0xde, 0x89, 0x8c, 0x77, 0x3c, 0xa3, 0xf7, 0xd9, 0x43, 0x55, 0xfb, 0x7d, 0xdf, 0x15, 0x7b, 0x90, 0x02, 0x0e, 0xda, 0x59, 0xfd, 0x33, 0x04, 0xeb, 0xf2, 0xd8, 0x55, 0xa3, 0x24, 0x80, 0x9d, 0x65, 0x97, 0x81, 0xad, 0x62, 0x66, 0xd2, 0xce, 0x47, 0x7e, 0xaa, 0x50, 0xf5, 0xbc, 0xf7, 0x22, 0x17, 0x26, 0x1c, 0x25, 0x3a, 0x11, 0xde, 0xe2, 0xfd, 0x71, 0xc3, 0xa1, 0xe7, 0xbb, 0xe5, 0xac, 0x55, 0x8b, 0x05, 0x79, 0x12, 0xed, 0x95, 0x1b, 0xdb, 0x95, 0xaa, 0xbf, 0xf8, 0x9d, 0x0d, 0x6b, 0x32, 0x9c, 0xd5, 0x6e, 0x69, 0xf1, 0x50, 0x3e, 0xe3, 0xf7, 0x60, 0xad, 0xae, 0xb8, 0x87, 0xed, 0xba, 0xe3, 0x7b, 0xee, 0xaa, 0x9d, 0x1b, 0xdc, 0x43, 0xf8, 0x38, 0x18, 0x9f, 0xc5, 0xdd, 0x38, 0xef, 0x82, 0x2d, 0xc3, 0xf9, 0xb7, 0x74, 0xb2, 0x87, 0x5b, 0x4a, 0x89, 0xf2, 0xf1, 0x13, 0x57, 0xe2, 0xc5, 0x6b, 0xe3, 0x07, 0xfe, 0xae, 0xf6, 0xaa, 0x51, 0xf4, 0xd6, 0x80, 0x6e, 0x05, 0xb7, 0x74, 0x34, 0x37, 0x8e, 0xe1, 0x3d, 0x90, 0x4d, 0x7d, 0x3b, 0xf1, 0x25, 0x16, 0x7e, 0x98, 0x56, 0x3e, 0x33, 0x97, 0x06, 0xb0, 0x0e, 0x1d, 0xb1, 0x41, 0x9d, 0x2d, 0x25, 0xf1, 0x53, 0x80, 0x02, 0x38, 0x5c, 0xd2, 0xe3, 0xb1, 0xfd, 0x01, 0x8b, 0xfb, 0x83, 0x13, 0x90, 0xf3, 0xa5, 0x9a, 0xce, 0x39, 0xc7, 0x22, 0xe7, 0xf8, 0x7e, 0x42, 0x94, 0x5c, 0x12, 0x7f, 0xab, 0x9b, 0x7a, 0xec, 0x9e, 0x6e, 0x19, 0xee, 0xb2, 0xb1, 0x1e, 0x73, 0x30, 0xa9, 0x39, 0x48, 0x6a, 0x7e, 0xb4, 0xb5, 0xb0, 0x5b, 0xeb, 0x6f, 0xe1, 0x18, 0xd6, 0xd0, 0x19, 0x95, 0xda, 0x79, 0x56, 0x4f, 0x87, 0x08, 0x07, 0xba, 0x6e, 0x96, 0x5a, 0x8b, 0x20, 0x67, 0x52, 0x6b, 0xef, 0x59, 0x95, 0xaa, 0xff, 0x9d, 0x2a, 0x35, 0xe4, 0xb5, 0x24, 0xca, 0xe9, 0x69, 0xe2, 0x84, 0x35, 0xba, 0xfc, 0xe7, 0xe4, 0x86, 0x9c, 0x72, 0x18, 0x27, 0x07, 0x93, 0x9b, 0x53, 0x93, 0x1b, 0x72, 0x4b, 0x89, 0x72, 0xcb, 0xd7, 0xb8, 0xf1, 0x1a, 0x69, 0x92, 0x1b, 0xab, 0xce, 0x0e, 0x28, 0xbf, 0x02, 0xd5, 0x17, 0x1c, 0x80, 0x16, 0xf2, 0xc8, 0xb5, 0x39, 0x25, 0x43, 0x76, 0xf5, 0x80, 0x99, 0x30, 0x7e, 0x08, 0xce, 0xb0, 0xa5, 0xd8, 0x50, 0x6a, 0xb4, 0xda, 0xb3, 0xbd, 0xe3, 0xb6, 0x73, 0x29, 0xa9, 0xeb, 0x83, 0xbc, 0x21, 0xeb, 0x83, 0x85, 0xea, 0xb9, 0x51, 0xd6, 0x09, 0x03, 0x1a, 0x4e, 0xc4, 0xf5, 0xc1, 0x8f, 0x16, 0x0d, 0xc6, 0x31, 0xf6, 0x92, 0x98, 0x33, 0x64, 0x15, 0x91, 0x3e, 0x24, 0x8f, 0x8a, 0x13, 0x71, 0xbe, 0xfb, 0x51, 0xc6, 0x60, 0x1c, 0x63, 0x7e, 0xd6, 0x2b, 0x8b, 0x79, 0xaf, 0xe0, 0x8a, 0xe3, 0x04, 0x3b, 0xb5, 0x22, 0x8b, 0x46, 0xd7, 0x9d, 0xc1, 0xc1, 0xd1, 0x95, 0x92, 0x26, 0xc3, 0x9d, 0x0d, 0xfc, 0x6e, 0xf1, 0x9d, 0x8b, 0x98, 0x0f, 0xb8, 0x4f, 0xf3, 0xe7, 0xf7, 0xa7, 0x31, 0x0a, 0x3d, 0xa6, 0xa4, 0x93, 0x27, 0x7c, 0xa7, 0x80, 0xfe, 0xa0, 0x0e, 0xa0, 0x19, 0xee, 0x4c, 0xa2, 0xd9, 0x41, 0x3b, 0xaf, 0x4b, 0x84, 0x70, 0xbf, 0x5f, 0x27, 0x5e, 0xe6, 0xe7, 0x36, 0x38, 0x13, 0xab, 0xab, 0x14, 0xb3, 0xf0, 0x38, 0x7f, 0xff, 0x60, 0xf8, 0x9b, 0x0a, 0xc2, 0xe3, 0xf4, 0x9e, 0x82, 0x08, 0xdf, 0x47, 0x2f, 0x9b, 0x79, 0x8a, 0xfb, 0xba, 0xfe, 0x05, 0xe7, 0x37, 0xb3, 0x30, 0x4e, 0xa5, 0x1e, 0xa7, 0x9e, 0xa6, 0x16, 0xcd, 0xc1, 0x56, 0x68, 0xfb, 0xf8, 0x7d, 0xd4, 0x68, 0xee, 0x45, 0xb4, 0x2b, 0xfc, 0x4e, 0x76, 0x66, 0x5d, 0xd9, 0x51, 0x76, 0xfe, 0x8e, 0x99, 0x59, 0x81, 0xa3, 0xf4, 0xc6, 0x90, 0x02, 0x49, 0x9b, 0x06, 0xdb, 0x77, 0x77, 0xb1, 0x0c, 0x49, 0x4f, 0xb3, 0x76, 0x85, 0x59, 0xda, 0x8a, 0x21, 0x69, 0x19, 0x98, 0xb6, 0x98, 0xa5, 0x1d, 0x64, 0x69, 0x8b, 0x86, 0xa4, 0x59, 0x31, 0xad, 0x82, 0xa5, 0x1d, 0x56, 0x57, 0x8f, 0xe1, 0x8d, 0x21, 0x56, 0xe7, 0xc3, 0xc7, 0x43, 0x1a, 0x86, 0x56, 0xd7, 0x49, 0xe9, 0x82, 0x33, 0xcd, 0xc5, 0xee, 0x1f, 0x1f, 0x96, 0xe0, 0x87, 0xdb, 0xf9, 0x4e, 0x2c, 0x76, 0x8f, 0xf6, 0xa8, 0x62, 0xb5, 0xd9, 0x6c, 0xef, 0x27, 0x84, 0x5f, 0x3f, 0xb2, 0xec, 0xba, 0x68, 0x4a, 0x38, 0x89, 0xb0, 0x1f, 0x69, 0x4e, 0x88, 0xf0, 0xd3, 0xc3, 0x54, 0xe2, 0x1d, 0x97, 0x24, 0x48, 0x9a, 0xba, 0x1a, 0xb0, 0x5c, 0xaf, 0x6c, 0x5c, 0x1d, 0x11, 0x73, 0xf8, 0x19, 0x40, 0x6c, 0xa5, 0x06, 0xfe, 0x88, 0x77, 0xc3, 0x52, 0x9b, 0x7b, 0x43, 0x36, 0x7a, 0xee, 0xe3, 0x9d, 0x60, 0x42, 0xfd, 0xb2, 0x88, 0x97, 0xd9, 0x6a, 0x6d, 0x1a, 0x6a, 0x31, 0xae, 0x7f, 0x7e, 0xba, 0xb6, 0x9a, 0xb5, 0x58, 0x7f, 0x7c, 0xb0, 0xe6, 0xc9, 0x3e, 0x19, 0xee, 0xd8, 0xc8, 0x7b, 0xf4, 0x8e, 0xf5, 0x69, 0xec, 0xfc, 0x48, 0x2f, 0x78, 0x9f, 0x5b, 0x6a, 0xff, 0xd1, 0xfb, 0x8a, 0xa9, 0xe8, 0x22, 0xf2, 0xb8, 0x6a, 0x6d, 0x8a, 0x44, 0xc0, 0x28, 0xfb, 0x59, 0xec, 0x7c, 0x94, 0x02, 0xf3, 0x79, 0x9f, 0x93, 0xcd, 0x3c, 0x55, 0xa5, 0xed, 0xf1, 0x7e, 0x5b, 0x49, 0x4f, 0x5d, 0x9f, 0xe1, 0x45, 0x8f, 0xca, 0x99, 0x5b, 0x03, 0xc6, 0x09, 0xcd, 0x64, 0xe9, 0x71, 0x0d, 0x66, 0x61, 0x2b, 0xb2, 0x5f, 0x62, 0x4d, 0x70, 0xb5, 0x94, 0x76, 0x43, 0x1c, 0xab, 0x52, 0x25, 0x13, 0x55, 0x34, 0x7d, 0x0f, 0x6a, 0xd0, 0x39, 0x4c, 0xff, 0x50, 0x84, 0x37, 0x4f, 0xe4, 0xe1, 0xca, 0xc4, 0xfd, 0x1c, 0xae, 0x84, 0x4c, 0x5d, 0xac, 0x47, 0x15, 0xe3, 0xbd, 0x4e, 0xd0, 0x4f, 0xe8, 0x60, 0xcf, 0x57, 0x4c, 0xb9, 0x1d, 0x54, 0x6e, 0x34, 0x27, 0x6a, 0x6d, 0xca, 0x0e, 0xcc, 0x89, 0x3e, 0xe8, 0x9b, 0x5b, 0xd0, 0x6f, 0x3a, 0xcb, 0xee, 0xf4, 0xdd, 0xc5, 0xae, 0xc9, 0xec, 0x7a, 0x37, 0xbb, 0xa6, 0x70, 0x69, 0xa1, 0xac, 0xe6, 0xc9, 0xf1, 0xd6, 0xc5, 0xac, 0x65, 0xaa, 0xac, 0xac, 0x3b, 0x38, 0x67, 0x25, 0x21, 0xb5, 0x2a, 0x67, 0x5f, 0xe5, 0x1b, 0xe4, 0x5f, 0xd6, 0x6f, 0x98, 0xe0, 0x05, 0xbd, 0x98, 0x96, 0x5a, 0xf5, 0x43, 0x76, 0xfa, 0xa2, 0xcc, 0xde, 0x42, 0x75, 0xa6, 0x68, 0x67, 0xd0, 0x89, 0x96, 0x9c, 0x7d, 0xde, 0x01, 0x86, 0xbb, 0x8b, 0x71, 0x79, 0x99, 0x8d, 0xb7, 0xbb, 0x14, 0x7b, 0xf4, 0x0e, 0x2f, 0xdd, 0xd1, 0xed, 0x65, 0xbc, 0x0a, 0xc6, 0x7b, 0xc1, 0x56, 0x71, 0x26, 0x36, 0x96, 0x9f, 0x74, 0x19, 0xad, 0x49, 0x3a, 0x4a, 0x91, 0xd5, 0x44, 0x49, 0xc2, 0x92, 0x77, 0x80, 0x31, 0x5a, 0x13, 0xd3, 0x84, 0xc5, 0x34, 0x4f, 0x32, 0xce, 0x1f, 0x44, 0xcf, 0xc8, 0x3c, 0x28, 0xb4, 0x42, 0x3c, 0x6f, 0x59, 0xb4, 0x37, 0xf2, 0xa2, 0x3d, 0x61, 0x7c, 0x5d, 0xeb, 0xb9, 0x1e, 0x07, 0x93, 0x20, 0x97, 0x14, 0xdd, 0x79, 0x28, 0xbb, 0xc6, 0x6a, 0x9a, 0x5c, 0x71, 0x66, 0x02, 0x88, 0xf0, 0xb2, 0x9b, 0xe0, 0x14, 0x76, 0xba, 0x25, 0xe3, 0x2b, 0xb0, 0xbb, 0x58, 0x7d, 0x9e, 0xe3, 0x06, 0xa8, 0x38, 0x63, 0xc4, 0x9f, 0x8e, 0xd9, 0xb1, 0xb2, 0x6b, 0xa9, 0x9d, 0xa9, 0xbc, 0x35, 0x17, 0x21, 0x84, 0xed, 0x38, 0x44, 0xab, 0x9b, 0x09, 0x1e, 0x08, 0x55, 0xb2, 0x37, 0xd2, 0x27, 0xac, 0x24, 0x1c, 0xb0, 0xfd, 0x84, 0x65, 0xd7, 0x1e, 0xed, 0xa4, 0x3c, 0x28, 0xed, 0xd1, 0xd1, 0xba, 0x55, 0x7e, 0x59, 0xdd, 0xc6, 0x37, 0x51, 0xeb, 0xa2, 0x35, 0x54, 0x7b, 0x76, 0x48, 0x4d, 0xef, 0x56, 0xef, 0xb0, 0xf4, 0x4d, 0x61, 0xbc, 0xe9, 0x14, 0xe1, 0xff, 0xf9, 0x8c, 0x16, 0xd6, 0xd2, 0x2a, 0xdb, 0x78, 0x49, 0x01, 0x33, 0x96, 0xe5, 0x88, 0x96, 0x25, 0x78, 0xbf, 0x0f, 0xa6, 0xa5, 0x16, 0x61, 0x34, 0x1b, 0x03, 0x19, 0xa2, 0x59, 0x0d, 0xdd, 0x89, 0x5a, 0xbf, 0x1a, 0x67, 0xe1, 0x55, 0xac, 0x1e, 0x47, 0x45, 0xd8, 0xb7, 0x04, 0x47, 0x45, 0x9d, 0x36, 0x23, 0x4d, 0x60, 0x6f, 0xd4, 0x22, 0x5f, 0xf4, 0xa3, 0xee, 0xcc, 0x93, 0x21, 0xa1, 0xb6, 0xab, 0x03, 0x0c, 0x75, 0x90, 0x50, 0xc5, 0xd6, 0xaf, 0x66, 0x8c, 0xe9, 0x65, 0xb4, 0xa0, 0x77, 0xda, 0x31, 0xad, 0x90, 0x8d, 0x79, 0xf4, 0x56, 0xf7, 0xa5, 0x23, 0xc6, 0x84, 0x98, 0x52, 0x3e, 0x96, 0x12, 0xa6, 0xb3, 0x19, 0x0d, 0x3d, 0x98, 0xa4, 0x5e, 0xee, 0x29, 0x97, 0x31, 0x1b, 0xe6, 0xcc, 0xa4, 0xbb, 0x6e, 0x19, 0x4e, 0x9a, 0x6f, 0x18, 0x2f, 0x9d, 0x1c, 0x3f, 0x25, 0x51, 0xc8, 0x8c, 0x0c, 0x94, 0x86, 0x3c, 0xce, 0xd7, 0x37, 0x89, 0xe9, 0x54, 0x9a, 0x2c, 0x4c, 0x49, 0x9c, 0x92, 0x09, 0x46, 0xc2, 0x77, 0xd3, 0x13, 0x36, 0xe3, 0xeb, 0x9b, 0x5e, 0x7f, 0x15, 0xf5, 0xa2, 0xe6, 0xe7, 0x33, 0x65, 0x63, 0xc1, 0xbe, 0xca, 0x8d, 0x74, 0xb2, 0xe3, 0xe7, 0x1f, 0xaa, 0xbe, 0xd1, 0x48, 0x09, 0x96, 0xe6, 0x67, 0x3c, 0x9e, 0x45, 0x3c, 0x41, 0x49, 0xa2, 0xf3, 0x03, 0xab, 0x9d, 0xae, 0x13, 0x45, 0xd7, 0x56, 0x40, 0x42, 0xf4, 0xdc, 0xc0, 0xd5, 0x60, 0xad, 0xf1, 0x0e, 0xc8, 0x46, 0xf3, 0x3b, 0x60, 0x9b, 0xce, 0x4a, 0x7f, 0x93, 0x4a, 0x37, 0x66, 0xfc, 0xa3, 0x68, 0x7d, 0x93, 0xca, 0x34, 0x4d, 0x7c, 0x1c, 0x30, 0x76, 0x32, 0x6c, 0x8e, 0xa5, 0xb3, 0xa3, 0xcc, 0x33, 0x01, 0x72, 0xdf, 0x21, 0x3a, 0x6d, 0xb6, 0xbb, 0xcb, 0xc3, 0x66, 0xb9, 0x4c, 0x11, 0x7e, 0x52, 0x80, 0x12, 0x1b, 0x3b, 0x38, 0x87, 0x27, 0xa1, 0xfd, 0x1b, 0x5d, 0xc1, 0x5b, 0x3e, 0xba, 0x98, 0xb7, 0x7c, 0x68, 0x6b, 0x57, 0xc7, 0xb2, 0xfa, 0x66, 0x0d, 0xfa, 0x72, 0x4b, 0xd6, 0x0d, 0x3d, 0x87, 0xd2, 0xae, 0xee, 0xa9, 0x9b, 0xf7, 0xf3, 0xc8, 0x49, 0xad, 0x8c, 0xbd, 0x27, 0x86, 0xbe, 0x77, 0x50, 0x2c, 0xc8, 0x00, 0x6b, 0x69, 0x3e, 0xbe, 0x63, 0x6b, 0x26, 0x4c, 0x82, 0x2d, 0x34, 0x27, 0x27, 0x66, 0x94, 0x48, 0xd0, 0x77, 0xd2, 0x1f, 0xab, 0xf1, 0x59, 0xe2, 0xe8, 0xfe, 0xd6, 0xbe, 0x90, 0x52, 0x3a, 0x09, 0xf6, 0xae, 0x5b, 0x76, 0x4e, 0x7b, 0xf3, 0xa1, 0x98, 0xcd, 0xba, 0x82, 0x69, 0x6e, 0x88, 0x66, 0x5e, 0xe1, 0xf2, 0xfb, 0xfb, 0x69, 0xde, 0x15, 0x06, 0x8a, 0xeb, 0xb3, 0xe6, 0xd3, 0x5b, 0x10, 0x19, 0x38, 0x87, 0xf6, 0x6d, 0x74, 0x24, 0xd2, 0x1e, 0x6c, 0xe1, 0x18, 0xbd, 0x19, 0x61, 0xc1, 0xd1, 0x01, 0x7a, 0x21, 0x26, 0x5a, 0xbf, 0x4a, 0xed, 0xdd, 0x06, 0x76, 0xd6, 0x50, 0x2a, 0x62, 0x0a, 0xc5, 0xab, 0x5f, 0xfe, 0x9e, 0x03, 0xd6, 0xd6, 0x43, 0x75, 0x4d, 0xbc, 0x96, 0x09, 0x19, 0xb8, 0xee, 0xe8, 0xcb, 0xf3, 0x83, 0xc6, 0xab, 0xe9, 0x99, 0xee, 0x75, 0x19, 0xce, 0x4c, 0xd4, 0xae, 0xbe, 0xb1, 0x83, 0x35, 0x6f, 0x5a, 0x7e, 0x3a, 0x34, 0xe1, 0x10, 0xb5, 0x7c, 0xe8, 0x1b, 0x10, 0x77, 0x7e, 0x40, 0x65, 0x22, 0x9f, 0x57, 0x65, 0x18, 0xc5, 0x76, 0x13, 0x97, 0x59, 0x89, 0xdf, 0x1f, 0xcf, 0xa3, 0xfc, 0xf3, 0x07, 0xe5, 0x0f, 0xa7, 0x70, 0xc6, 0x4d, 0x7f, 0x9f, 0x34, 0x85, 0xbd, 0x67, 0x54, 0x66, 0xe5, 0x4f, 0x11, 0x95, 0x0e, 0xe4, 0xb1, 0x11, 0xbd, 0xdc, 0x15, 0x2c, 0xb6, 0x06, 0x63, 0x4f, 0x8b, 0xf0, 0xc6, 0x2a, 0x49, 0xe6, 0x6f, 0xe5, 0x0c, 0xf7, 0xc4, 0x12, 0x4b, 0xb1, 0x94, 0x75, 0x43, 0x7b, 0x8f, 0x7a, 0x4e, 0xb0, 0x46, 0x3d, 0x98, 0x06, 0xfc, 0xc9, 0x9a, 0x07, 0x33, 0xee, 0x25, 0xea, 0xd3, 0x3f, 0x2e, 0x64, 0xa9, 0xdf, 0x15, 0xd8, 0x89, 0x46, 0x42, 0x68, 0x3c, 0x9f, 0x7d, 0xcc, 0xf8, 0xe3, 0xf9, 0xfe, 0x1e, 0x7d, 0xe3, 0x81, 0x8c, 0xc7, 0xf3, 0x79, 0xfb, 0x9f, 0x09, 0xe8, 0x6d, 0xb8, 0x5e, 0x19, 0xb7, 0x98, 0xf7, 0x41, 0x75, 0x91, 0xdc, 0xab, 0xb5, 0x35, 0xe9, 0x52, 0x54, 0x07, 0x9e, 0xd5, 0x74, 0x60, 0x4f, 0x37, 0xae, 0x05, 0x56, 0xd0, 0x7b, 0xbd, 0xa3, 0xdc, 0x1f, 0xb1, 0xf7, 0x7b, 0x47, 0x4d, 0x55, 0x61, 0xce, 0x47, 0x9d, 0x69, 0x10, 0x48, 0x60, 0xfe, 0xff, 0x05, 0x3e, 0x9f, 0xe1, 0x75, 0x82, 0x8c, 0x73, 0xfd, 0x98, 0xd5, 0x32, 0xe8, 0xb6, 0x67, 0x40, 0x80, 0x7a, 0xf1, 0x08, 0xf3, 0x64, 0x4c, 0x81, 0x51, 0x18, 0x7e, 0x13, 0xc3, 0x85, 0xb2, 0x1b, 0x29, 0x16, 0x21, 0x45, 0x28, 0x03, 0xac, 0x76, 0xc8, 0x24, 0x2f, 0x47, 0x82, 0xf8, 0x73, 0x98, 0x56, 0x8b, 0x74, 0x7a, 0x3a, 0x85, 0x8e, 0x9d, 0x51, 0x66, 0x0a, 0x24, 0xd1, 0x37, 0x71, 0x30, 0x5c, 0x8d, 0xe1, 0x91, 0x18, 0x5e, 0x2d, 0x82, 0xce, 0x1b, 0xd0, 0x89, 0xe4, 0x11, 0x8d, 0x97, 0x73, 0x90, 0x4f, 0x22, 0xf2, 0x29, 0x50, 0xf9, 0x8c, 0x65, 0x7c, 0xb6, 0x30, 0x3e, 0xc6, 0x40, 0x9c, 0x58, 0xc9, 0xb8, 0x18, 0x03, 0x16, 0xb1, 0x18, 0xf3, 0x25, 0x04, 0xcc, 0x62, 0x21, 0x62, 0xa6, 0xcb, 0x19, 0x12, 0x24, 0x9c, 0xc6, 0x7c, 0xa0, 0xe6, 0x4b, 0x64, 0xf9, 0xea, 0xd4, 0x7c, 0x56, 0x91, 0x4a, 0x3d, 0x1f, 0x18, 0x21, 0xc6, 0x57, 0x77, 0x06, 0x46, 0x23, 0x6d, 0x17, 0x6a, 0xfe, 0x89, 0x0c, 0x40, 0xff, 0x7b, 0x5b, 0xcb, 0x9e, 0xaa, 0xef, 0x7a, 0xef, 0xc7, 0x51, 0x0b, 0xf0, 0xea, 0xae, 0x1f, 0xa0, 0x1d, 0xea, 0xcd, 0xbf, 0x1f, 0x4c, 0x87, 0x3a, 0x20, 0xb2, 0xb3, 0x48, 0x3e, 0x6f, 0xff, 0x1e, 0xd1, 0x2c, 0xf1, 0x1d, 0x77, 0xad, 0x82, 0xe4, 0x5c, 0x1b, 0xec, 0x2d, 0x04, 0xd3, 0x32, 0x8f, 0x9c, 0x2a, 0x58, 0x6b, 0x42, 0xe9, 0xc6, 0xe7, 0x43, 0xbb, 0x69, 0xcc, 0x3c, 0xd9, 0x02, 0xb0, 0x79, 0x37, 0xcd, 0xa7, 0xa1, 0x65, 0xb8, 0x72, 0xba, 0xab, 0x08, 0x74, 0x62, 0xb1, 0x60, 0x9d, 0x17, 0xa5, 0x78, 0x32, 0xd2, 0xb2, 0x9c, 0xd2, 0x43, 0xb0, 0xac, 0x85, 0x52, 0xcf, 0x96, 0xe3, 0x55, 0x2f, 0x0a, 0xc8, 0x2d, 0x46, 0xb6, 0xae, 0xd2, 0xa9, 0x27, 0x9c, 0xe9, 0x57, 0xe9, 0x8b, 0x2e, 0x63, 0x5e, 0x63, 0xc2, 0xc1, 0xb3, 0xcf, 0xcc, 0xf9, 0x59, 0xa4, 0xdf, 0x0f, 0xb6, 0x5c, 0x1b, 0xdd, 0x8f, 0x88, 0x95, 0x1d, 0x7e, 0xbd, 0x4a, 0x95, 0xee, 0x37, 0x88, 0xa9, 0x3b, 0xe9, 0x0e, 0x81, 0x29, 0x30, 0x46, 0x84, 0x48, 0xa1, 0x97, 0xfa, 0xc2, 0x86, 0xa1, 0x1c, 0xd2, 0xc8, 0x25, 0x05, 0xf4, 0x64, 0xdf, 0x8f, 0x33, 0xcd, 0xd8, 0x1b, 0x6c, 0x6c, 0x6d, 0x5b, 0x22, 0x20, 0xe6, 0xac, 0x1f, 0xc4, 0xcb, 0xb3, 0xdb, 0xd9, 0x07, 0x30, 0xf8, 0xb3, 0x6d, 0xf6, 0xf8, 0x4d, 0xc8, 0xca, 0xca, 0xb2, 0xc0, 0x6d, 0x9e, 0xac, 0xf1, 0x04, 0xa0, 0x53, 0xad, 0x87, 0xfe, 0xd3, 0x1b, 0xe8, 0x9f, 0xc1, 0x68, 0x30, 0x52, 0x0c, 0x74, 0x31, 0xb1, 0x26, 0xbc, 0xc6, 0x32, 0xac, 0x4e, 0x4f, 0x27, 0x4c, 0x33, 0x9f, 0xf0, 0x32, 0x2b, 0xf7, 0xb4, 0x7f, 0x46, 0xf4, 0x7c, 0x37, 0x23, 0x9d, 0xef, 0x66, 0x3f, 0x3c, 0xf4, 0xbc, 0x68, 0xa2, 0x66, 0x5e, 0x23, 0xa7, 0xfe, 0xe8, 0x16, 0xea, 0x2d, 0x43, 0xa9, 0xf3, 0x1f, 0x28, 0x70, 0xe4, 0xe0, 0x25, 0x3b, 0x1f, 0xf5, 0xd7, 0x3f, 0x74, 0x6c, 0xac, 0xd6, 0xd9, 0x12, 0x59, 0x4f, 0x86, 0x59, 0x3f, 0x5a, 0xbb, 0xc6, 0x28, 0xc6, 0xaa, 0xef, 0x8a, 0x57, 0x25, 0x3b, 0xce, 0x4f, 0x03, 0x33, 0x66, 0xcc, 0x10, 0xfc, 0x3a, 0x7e, 0x27, 0x48, 0x88, 0xad, 0x38, 0x13, 0x8f, 0x52, 0x29, 0xfa, 0x2d, 0xe8, 0x6d, 0xbf, 0x66, 0xff, 0x70, 0xc4, 0x38, 0xb0, 0xbf, 0xc3, 0xd8, 0xdf, 0x1f, 0x7b, 0x2a, 0x7f, 0x02, 0x0b, 0x29, 0x86, 0x56, 0x77, 0x94, 0x92, 0x66, 0xcb, 0x04, 0x5d, 0x98, 0x46, 0x01, 0x79, 0x04, 0xdb, 0x96, 0xf6, 0xd9, 0x7e, 0x4d, 0xef, 0x44, 0xb0, 0x5e, 0xf8, 0x1d, 0xdd, 0x25, 0x8e, 0x24, 0x54, 0xb6, 0x23, 0x65, 0xbc, 0x92, 0x1a, 0xa5, 0xb4, 0x13, 0x65, 0x73, 0xdc, 0x2d, 0x94, 0x49, 0xf4, 0x3d, 0x2e, 0xd2, 0x75, 0xf6, 0x7b, 0x16, 0x7f, 0x2f, 0xd3, 0xd8, 0xc1, 0x1f, 0x7a, 0x65, 0x70, 0x03, 0x75, 0x19, 0x35, 0x54, 0x97, 0x8f, 0xbf, 0x0a, 0xfc, 0x2d, 0xc1, 0x5f, 0x27, 0xfe, 0xd0, 0xef, 0xd2, 0x1d, 0xc6, 0xdf, 0x59, 0x11, 0xf4, 0x66, 0xfc, 0x59, 0xf0, 0x57, 0x88, 0x3f, 0x1f, 0xfe, 0xaa, 0xf0, 0x87, 0x74, 0x7a, 0xa4, 0xd3, 0xbf, 0xc6, 0xf7, 0xef, 0xba, 0x32, 0x6b, 0x33, 0x17, 0x4c, 0x2d, 0xa8, 0x6b, 0x0a, 0xc2, 0x50, 0x44, 0x76, 0x3e, 0x61, 0xe8, 0xae, 0xd9, 0x04, 0xb2, 0x33, 0x54, 0x57, 0xdf, 0xb7, 0xe9, 0xbd, 0xc3, 0xbb, 0xf3, 0xdf, 0xdf, 0x8f, 0x6b, 0x94, 0xe1, 0xb8, 0x54, 0x66, 0x45, 0x32, 0xf1, 0x57, 0xcb, 0xd2, 0x32, 0x6e, 0x4a, 0xd7, 0xb3, 0xf4, 0x89, 0xb7, 0x4b, 0x4b, 0xbe, 0x30, 0x98, 0xf7, 0x4b, 0x69, 0x0e, 0xf0, 0xfc, 0x2a, 0xdd, 0x02, 0x46, 0xf3, 0xc8, 0x4d, 0x34, 0x2f, 0x32, 0x9a, 0x47, 0x6f, 0x9b, 0xb6, 0x96, 0xa7, 0x0d, 0xcb, 0x4f, 0xe9, 0xfa, 0x8f, 0x3c, 0x44, 0x55, 0xf3, 0x6d, 0x9a, 0x71, 0x92, 0x17, 0x0d, 0x69, 0xd9, 0xf0, 0x14, 0xf7, 0x4d, 0xed, 0xbb, 0x95, 0x42, 0x88, 0x52, 0x0c, 0x72, 0x37, 0xa0, 0x85, 0x24, 0x3a, 0xba, 0xea, 0xe6, 0x7d, 0x3b, 0x60, 0xc2, 0x99, 0xbb, 0x6f, 0x48, 0x19, 0xb7, 0x4b, 0x3f, 0x79, 0x9b, 0x92, 0xd4, 0x56, 0xdc, 0xb5, 0x2f, 0x9a, 0x56, 0x7d, 0x3b, 0x29, 0xdd, 0xf5, 0xc2, 0x60, 0xfa, 0x2d, 0xd2, 0x72, 0xb1, 0x2b, 0xeb, 0x4b, 0x6e, 0x11, 0x64, 0xdb, 0x90, 0x9c, 0x75, 0xac, 0x56, 0x37, 0xb5, 0xe9, 0xae, 0x0a, 0xc2, 0x92, 0xcd, 0x4a, 0x60, 0x94, 0x9e, 0x35, 0x9e, 0xfd, 0xdd, 0x6b, 0x58, 0x2d, 0x73, 0x28, 0x85, 0xd2, 0xe6, 0x51, 0x9a, 0xfe, 0xa3, 0xb2, 0x04, 0x96, 0x2b, 0x9a, 0x9e, 0xa0, 0xb6, 0x32, 0xe3, 0x76, 0xb2, 0xb2, 0x5f, 0xbb, 0x8d, 0x36, 0x0c, 0xa7, 0x38, 0x7e, 0x1b, 0x9d, 0x18, 0xd2, 0x52, 0xfb, 0xce, 0xa1, 0xd2, 0x3e, 0x07, 0xd5, 0x25, 0x55, 0xe8, 0x0e, 0x37, 0x81, 0xab, 0xb8, 0x08, 0x55, 0xb6, 0x91, 0x43, 0x5d, 0x3b, 0x87, 0xfa, 0x00, 0x87, 0x06, 0x89, 0x43, 0xe3, 0x37, 0x38, 0x8c, 0x51, 0x38, 0x34, 0x3d, 0xc1, 0x61, 0xec, 0x32, 0x0e, 0xcd, 0x7f, 0xc3, 0x61, 0xdc, 0x4a, 0x0e, 0x2d, 0xad, 0x1c, 0x8e, 0x78, 0x92, 0x43, 0x6b, 0x3d, 0x87, 0x23, 0xdb, 0x38, 0x8c, 0x9f, 0x88, 0xc2, 0x2d, 0xc6, 0x72, 0xef, 0xe5, 0x50, 0xf7, 0x00, 0x87, 0xfa, 0x1c, 0x0e, 0x0d, 0xe3, 0x39, 0x34, 0x66, 0x73, 0x18, 0x73, 0x1f, 0x87, 0xa6, 0x07, 0x39, 0x8c, 0x9d, 0xcc, 0xa1, 0x79, 0x1a, 0x87, 0x71, 0x0f, 0x71, 0x68, 0x99, 0xc2, 0xe1, 0x88, 0x19, 0x1c, 0x5a, 0x27, 0x70, 0x38, 0x32, 0x97, 0xc3, 0x78, 0x0b, 0xb8, 0xaa, 0x2b, 0xd0, 0xe6, 0x98, 0x38, 0xd4, 0x25, 0x71, 0xa8, 0x8f, 0xe7, 0xd0, 0x3c, 0x96, 0xc3, 0xb8, 0xef, 0x80, 0xbb, 0xac, 0x06, 0xeb, 0x97, 0xc6, 0xa1, 0x2e, 0x8f, 0x43, 0x7d, 0x26, 0x87, 0xe6, 0x42, 0x0e, 0xe3, 0xde, 0x85, 0xa2, 0x59, 0x55, 0x48, 0xf7, 0x36, 0x87, 0xba, 0x5f, 0x72, 0xa8, 0x3f, 0xce, 0xa1, 0x61, 0x3f, 0x87, 0xc6, 0xf7, 0x39, 0x8c, 0x79, 0x87, 0x43, 0xd3, 0xaf, 0x38, 0x8c, 0xfd, 0x19, 0x87, 0xe6, 0x7f, 0xe3, 0x30, 0xee, 0xd7, 0x1c, 0x5a, 0x7e, 0xce, 0xe1, 0x88, 0x33, 0x1c, 0x5a, 0xdf, 0xe2, 0x70, 0xe4, 0x2f, 0x38, 0x8c, 0x3f, 0x0b, 0x45, 0x74, 0x18, 0x9c, 0xed, 0x3c, 0x87, 0xba, 0xcb, 0x1c, 0x9a, 0xc3, 0x08, 0x17, 0x20, 0xfe, 0x20, 0x87, 0xba, 0xa3, 0x1c, 0x9a, 0xa7, 0x42, 0x71, 0x09, 0xca, 0x7d, 0xd4, 0x21, 0x0e, 0x75, 0x1f, 0x70, 0xa8, 0x3f, 0xc6, 0xa1, 0xf9, 0x43, 0x0e, 0xe3, 0xca, 0xa0, 0x84, 0xce, 0xbe, 0xb2, 0x95, 0x70, 0xa8, 0x9b, 0xcb, 0xa1, 0xde, 0xc7, 0xa1, 0xc1, 0xc5, 0xa1, 0x71, 0x0e, 0x87, 0x31, 0x33, 0x39, 0x34, 0xcd, 0xe7, 0x30, 0x76, 0x16, 0x87, 0xe6, 0x47, 0x39, 0x8c, 0x5b, 0xc0, 0xa1, 0x65, 0x36, 0x87, 0x23, 0x1e, 0xe7, 0xd0, 0x5a, 0xc4, 0xe1, 0xc8, 0x6a, 0x0e, 0xe3, 0x93, 0xa1, 0xac, 0x92, 0xea, 0x77, 0x81, 0x43, 0xdd, 0x75, 0x0e, 0xf5, 0x57, 0x38, 0x34, 0xdf, 0xe0, 0x30, 0xee, 0xfb, 0x50, 0x51, 0xec, 0xc2, 0xfa, 0xfd, 0x4f, 0x0e, 0x75, 0x3f, 0xe2, 0x50, 0xbf, 0x93, 0x43, 0xc3, 0x36, 0x0e, 0x8d, 0xaf, 0x73, 0x18, 0xf3, 0xcf, 0x1c, 0x9a, 0x7e, 0xcc, 0x61, 0xec, 0xff, 0xe2, 0xd0, 0xfc, 0xbf, 0x39, 0x8c, 0x7b, 0x83, 0x43, 0xcb, 0xbf, 0x70, 0x38, 0xe2, 0xa7, 0x1c, 0x5a, 0xff, 0x89, 0xc3, 0x91, 0x3f, 0xe4, 0x30, 0x7e, 0x3b, 0x42, 0x92, 0xf7, 0xcb, 0x1c, 0xea, 0x76, 0x73, 0x98, 0xf4, 0x1a, 0x87, 0xe6, 0x37, 0x39, 0xb4, 0x6c, 0x45, 0x48, 0xf2, 0x7f, 0x89, 0x43, 0xdd, 0x2e, 0x0e, 0xf5, 0xaf, 0x72, 0x68, 0xde, 0xc7, 0x61, 0x5c, 0x29, 0x54, 0x54, 0x93, 0x7c, 0xe7, 0x71, 0xa8, 0xaf, 0xe4, 0xd0, 0xfc, 0x18, 0x87, 0x71, 0x5e, 0x0e, 0x47, 0xc5, 0xc1, 0x6c, 0x1f, 0xb5, 0x37, 0x86, 0x43, 0xdd, 0x1d, 0x1c, 0xea, 0x13, 0x38, 0x34, 0xe8, 0x38, 0x34, 0x8e, 0xe6, 0x30, 0x26, 0x96, 0x43, 0xd3, 0x9d, 0x1c, 0xc6, 0x8e, 0xe4, 0xd0, 0x7c, 0x0f, 0x87, 0x71, 0x77, 0x71, 0x68, 0x19, 0xc5, 0xe1, 0x88, 0x71, 0x1c, 0x5a, 0x0d, 0x1c, 0x8e, 0x1c, 0xc3, 0x61, 0xfc, 0x24, 0xf0, 0xcd, 0xa6, 0x71, 0x92, 0xce, 0xa1, 0x2e, 0x9f, 0x43, 0x7d, 0x16, 0x87, 0xe6, 0xe9, 0x1c, 0xc6, 0x2d, 0x41, 0x48, 0xf5, 0x94, 0x39, 0xd4, 0x2d, 0xe7, 0x50, 0xdf, 0xc2, 0xa1, 0x79, 0x35, 0x87, 0x71, 0x17, 0xa1, 0xda, 0x4d, 0x76, 0xe6, 0x63, 0x0e, 0x75, 0x9f, 0x71, 0xa8, 0xbf, 0xca, 0xa1, 0xe1, 0x23, 0x0e, 0x8d, 0x9f, 0x72, 0x18, 0xf3, 0x09, 0x87, 0xa6, 0x3f, 0x72, 0x18, 0xfb, 0x3b, 0x0e, 0xcd, 0x5f, 0x70, 0x18, 0xf7, 0x39, 0x87, 0x96, 0xdf, 0x73, 0x38, 0x22, 0xc2, 0xa1, 0xf5, 0x37, 0x1c, 0x8e, 0xfc, 0x03, 0x87, 0xf1, 0xdf, 0x82, 0xea, 0x1a, 0x92, 0xdb, 0xdf, 0x72, 0xa8, 0xdf, 0xc8, 0xa1, 0x61, 0x0d, 0x87, 0xc6, 0xe7, 0x38, 0x8c, 0xf9, 0x36, 0x87, 0xa6, 0xbf, 0xe3, 0x30, 0xf6, 0xbf, 0x71, 0x68, 0xfe, 0x1f, 0x1c, 0xc6, 0xfd, 0x3d, 0x87, 0x96, 0xff, 0xce, 0xe1, 0x88, 0x7f, 0xe4, 0xd0, 0xfa, 0x14, 0x87, 0x23, 0xbf, 0xc7, 0x61, 0xfc, 0x3a, 0x84, 0xa4, 0x1f, 0xcf, 0x73, 0x98, 0xf4, 0x2c, 0x87, 0xe6, 0xa7, 0x11, 0x92, 0x3e, 0x6c, 0xe2, 0x50, 0xff, 0x0c, 0x87, 0xe6, 0x06, 0x84, 0x0b, 0x11, 0x1f, 0xe4, 0x50, 0xff, 0x02, 0x87, 0xe6, 0x17, 0x39, 0x8c, 0x4b, 0x84, 0x1a, 0x9f, 0x1b, 0xd3, 0x53, 0x38, 0x34, 0x1b, 0xa1, 0xa6, 0x9a, 0xe2, 0x56, 0x0e, 0xcd, 0x07, 0xc0, 0x87, 0x76, 0xdc, 0x09, 0x9a, 0x3d, 0xdf, 0x00, 0xee, 0x22, 0x6c, 0xf7, 0xe8, 0x2e, 0x84, 0xd5, 0x08, 0x7b, 0xc1, 0x5d, 0x32, 0x07, 0xa1, 0x03, 0xdc, 0xb3, 0xca, 0x10, 0x76, 0x83, 0xbb, 0xb2, 0x04, 0xa1, 0x0d, 0xdc, 0x55, 0xd8, 0x7f, 0xa3, 0x43, 0xe0, 0xa6, 0xfe, 0x1e, 0x5d, 0x05, 0xee, 0x79, 0x94, 0xcf, 0x8f, 0x90, 0xf2, 0xd9, 0xa1, 0xa8, 0x02, 0xe3, 0x09, 0x27, 0x11, 0xa2, 0xdd, 0x4c, 0xa8, 0x45, 0x88, 0xf9, 0x13, 0xf6, 0x20, 0x9c, 0x87, 0xf0, 0x08, 0xda, 0x0b, 0x6c, 0x57, 0x42, 0x27, 0x42, 0x6c, 0x47, 0x42, 0x0f, 0x8e, 0x4f, 0x8a, 0x1f, 0x46, 0x48, 0xf1, 0x4b, 0x50, 0x49, 0xa7, 0xfc, 0x25, 0x5c, 0x83, 0xaa, 0x12, 0x92, 0xe3, 0x09, 0x84, 0x98, 0xdf, 0x50, 0x87, 0x10, 0xf5, 0x61, 0x8c, 0x07, 0xaa, 0x3c, 0x88, 0x4f, 0xf8, 0x2e, 0x42, 0x6c, 0x47, 0xc2, 0x08, 0x84, 0x54, 0x4e, 0x39, 0xc2, 0x72, 0x84, 0x66, 0x84, 0x94, 0xff, 0x14, 0x42, 0xe2, 0xbb, 0x10, 0x21, 0xf1, 0x5d, 0x0c, 0x55, 0x74, 0xc4, 0x63, 0xc2, 0x0f, 0x10, 0x52, 0xbe, 0xfb, 0x11, 0x52, 0xbe, 0x0c, 0x84, 0x44, 0xdf, 0x8f, 0x90, 0xe8, 0x57, 0x21, 0x24, 0xfa, 0x02, 0x94, 0x0b, 0xb5, 0xa3, 0x0f, 0x21, 0xd1, 0xad, 0x40, 0x48, 0xed, 0x78, 0x05, 0x6a, 0x5c, 0x44, 0xb7, 0x03, 0x21, 0xd1, 0x3d, 0x02, 0x35, 0x74, 0x64, 0x65, 0xc2, 0xdd, 0x08, 0xb1, 0xfd, 0x09, 0xdf, 0x84, 0x1a, 0x9a, 0xa7, 0x12, 0x34, 0xb9, 0x6b, 0xfd, 0xa0, 0xc9, 0x5d, 0xeb, 0x87, 0x87, 0x81, 0x1d, 0x5c, 0x98, 0xb0, 0x17, 0x21, 0xf1, 0x5b, 0x0f, 0x35, 0xb5, 0x54, 0xbf, 0x2d, 0x08, 0x89, 0xcf, 0x3f, 0x20, 0x24, 0xfe, 0x9b, 0xa1, 0x66, 0x01, 0xe1, 0x7f, 0x82, 0x90, 0xe8, 0xfe, 0x04, 0xb5, 0x45, 0xd8, 0x0f, 0x09, 0x80, 0xf2, 0xa7, 0x23, 0xfa, 0xd6, 0x22, 0xc4, 0xfe, 0x18, 0xa3, 0x57, 0x4f, 0x47, 0x3c, 0x0d, 0xde, 0x59, 0x18, 0x4f, 0xac, 0x40, 0x48, 0xf3, 0x43, 0x33, 0x87, 0x89, 0x1d, 0x1c, 0xde, 0xb1, 0x88, 0xc3, 0x11, 0xa9, 0xe0, 0xa5, 0xf9, 0x6a, 0x84, 0x80, 0x90, 0xc6, 0xdb, 0x00, 0x87, 0x77, 0xd4, 0xc0, 0xac, 0x79, 0x95, 0x18, 0x2f, 0x46, 0x58, 0x35, 0x44, 0x4f, 0x9c, 0xe0, 0xab, 0xa1, 0xf6, 0x2f, 0x45, 0x88, 0xf9, 0x12, 0x44, 0x84, 0x54, 0x4f, 0x4d, 0x7f, 0xfe, 0x15, 0xf5, 0x8e, 0xe4, 0xf8, 0x1e, 0xcc, 0x77, 0x11, 0xdd, 0x6f, 0xa1, 0xd6, 0x4d, 0xf5, 0x8e, 0x44, 0xd8, 0xbd, 0x83, 0x51, 0x12, 0x98, 0x71, 0x5d, 0xfa, 0xfd, 0xeb, 0x2c, 0x56, 0x2e, 0x41, 0xec, 0x55, 0x8c, 0xf5, 0xb0, 0x58, 0x3e, 0xc6, 0xce, 0x63, 0xec, 0x94, 0x76, 0x97, 0x21, 0xf6, 0x03, 0x8c, 0x1d, 0x65, 0xb1, 0x47, 0x31, 0x86, 0xfe, 0xf5, 0xf7, 0xd9, 0x33, 0xc2, 0x3b, 0x5b, 0x30, 0xb6, 0x17, 0x63, 0x5d, 0x2c, 0x86, 0xeb, 0xfa, 0xd8, 0x57, 0x31, 0xb6, 0x9d, 0xc5, 0x7e, 0x80, 0xb1, 0x17, 0x31, 0xb6, 0x89, 0xc5, 0x36, 0x63, 0x6c, 0x03, 0xc6, 0xd6, 0xe1, 0xca, 0x4c, 0x5a, 0x66, 0xc1, 0xeb, 0xaa, 0x16, 0x63, 0x77, 0x21, 0x9c, 0xad, 0x6c, 0xa7, 0x95, 0x31, 0xc3, 0x2c, 0x64, 0x18, 0xa1, 0xb2, 0x7d, 0x27, 0xa3, 0xd9, 0xc9, 0x68, 0x8e, 0x33, 0x1a, 0xfa, 0xa6, 0x90, 0xf6, 0x06, 0xaf, 0xd5, 0x06, 0xf7, 0xc9, 0x02, 0xbb, 0x6b, 0x9e, 0x41, 0x4f, 0xbe, 0x64, 0x33, 0xc3, 0x98, 0x7c, 0x9d, 0x09, 0x61, 0xf1, 0x92, 0xfb, 0x2e, 0xfe, 0x25, 0x20, 0x4c, 0xb5, 0xb0, 0xf5, 0xf8, 0x15, 0xc4, 0x5e, 0x25, 0x9c, 0x7b, 0x34, 0xf1, 0xf1, 0x47, 0xf9, 0xb0, 0x75, 0xd4, 0xfb, 0x6c, 0xed, 0xd5, 0x8d, 0x1c, 0x26, 0xab, 0xf7, 0xe3, 0xbb, 0x7d, 0x9d, 0x41, 0xf0, 0x03, 0x62, 0x26, 0xf0, 0xd3, 0xbc, 0x90, 0x8b, 0x03, 0xd7, 0xa8, 0xb4, 0x32, 0x7f, 0x08, 0x57, 0xad, 0xa7, 0x36, 0x60, 0xfc, 0xc4, 0xda, 0x74, 0xfd, 0xc7, 0xeb, 0x4f, 0x3c, 0x75, 0x82, 0xaf, 0xdd, 0xde, 0x17, 0x4f, 0x22, 0xfd, 0xbd, 0x72, 0x2a, 0xe5, 0xb5, 0xd9, 0x89, 0x62, 0x29, 0x40, 0x17, 0xe6, 0xd0, 0x61, 0x8e, 0x1d, 0x27, 0xd6, 0x3e, 0x0d, 0x2a, 0xdd, 0x39, 0x56, 0xd7, 0x0c, 0x4e, 0xa7, 0x00, 0x3c, 0x33, 0xa4, 0x05, 0x66, 0x5f, 0xe7, 0x47, 0xeb, 0x13, 0x41, 0xbc, 0xe0, 0xeb, 0x54, 0xa9, 0x9b, 0x11, 0xbf, 0x48, 0x36, 0xfa, 0x3a, 0x45, 0x4b, 0xaa, 0x87, 0x79, 0xae, 0xc7, 0xe5, 0x14, 0xc9, 0xef, 0x0d, 0x29, 0x49, 0x9c, 0x62, 0x0a, 0xbb, 0x0f, 0x73, 0x61, 0x51, 0x5a, 0x62, 0x06, 0xed, 0xaa, 0x2a, 0x14, 0xca, 0x30, 0x47, 0x1a, 0xf1, 0x2f, 0x62, 0xcf, 0xc9, 0x68, 0x4d, 0x7f, 0xe3, 0xd9, 0xc0, 0xa8, 0xae, 0x6c, 0x1b, 0xcc, 0x7f, 0x37, 0xd2, 0xef, 0x75, 0x2d, 0xb5, 0x5f, 0x5c, 0xff, 0xb4, 0x4b, 0xe5, 0x7f, 0x8a, 0xf1, 0xfc, 0x85, 0x02, 0x91, 0x64, 0xf1, 0x58, 0x75, 0xa7, 0xc0, 0xd7, 0xcb, 0xdd, 0x8a, 0xbe, 0x98, 0x3f, 0x0b, 0x78, 0x1f, 0xe5, 0x16, 0xcf, 0xa4, 0xb6, 0x22, 0xdd, 0xac, 0xd2, 0xc6, 0x17, 0xf5, 0xeb, 0x32, 0x12, 0x33, 0x22, 0x91, 0x5d, 0x85, 0x54, 0xb7, 0xa2, 0x7e, 0x58, 0x18, 0x04, 0xef, 0x68, 0x25, 0x95, 0x76, 0x83, 0x05, 0x62, 0x6d, 0xc9, 0x58, 0x62, 0x4a, 0xd7, 0xdd, 0xb2, 0xd5, 0x3b, 0x06, 0x4b, 0xbc, 0x9a, 0x36, 0x11, 0xcc, 0x19, 0xde, 0xa2, 0x8b, 0x60, 0x15, 0x4f, 0x09, 0x15, 0x36, 0x9b, 0x92, 0x24, 0xc1, 0x17, 0x74, 0xd2, 0xdd, 0xb6, 0x95, 0x1b, 0xba, 0xee, 0x52, 0xcc, 0xde, 0xd1, 0x72, 0x1f, 0x2e, 0xbe, 0x8a, 0x04, 0x3d, 0xae, 0xbe, 0xb1, 0x2c, 0x8b, 0x70, 0xff, 0xe4, 0x49, 0x53, 0xd2, 0x3b, 0x26, 0x66, 0x3d, 0x0a, 0xc5, 0xda, 0x89, 0xae, 0xdb, 0x67, 0x04, 0x8b, 0xb3, 0xa3, 0xe1, 0x15, 0xc5, 0x39, 0xd1, 0x70, 0x47, 0x71, 0x6e, 0x34, 0x1c, 0x2a, 0xce, 0x8b, 0x86, 0x9f, 0x2e, 0x7e, 0x20, 0x1a, 0xee, 0x2c, 0xce, 0x8f, 0x86, 0x9f, 0x29, 0x7e, 0x30, 0x1a, 0xde, 0xe0, 0x1a, 0xe4, 0xbf, 0xc9, 0x35, 0xc8, 0x7f, 0xb3, 0x6b, 0x90, 0xff, 0x0b, 0xae, 0x41, 0xfe, 0x5b, 0x5d, 0x83, 0xfc, 0x5f, 0x72, 0x0d, 0xf2, 0xdf, 0xe1, 0x1a, 0xe4, 0xff, 0xaa, 0x6b, 0x90, 0x7f, 0x57, 0x55, 0x51, 0x34, 0xbc, 0x7b, 0x9e, 0xdb, 0xa7, 0x85, 0x0f, 0x14, 0xb9, 0x8a, 0x7c, 0x6a, 0xf8, 0x50, 0x91, 0xcb, 0xa5, 0x85, 0x8f, 0x54, 0x15, 0x45, 0x69, 0x8e, 0xb3, 0xaf, 0xf3, 0xa9, 0xf8, 0x32, 0xed, 0x90, 0xdb, 0xed, 0x33, 0x8e, 0xcd, 0x1a, 0x0c, 0x1f, 0x9f, 0x3b, 0x18, 0x7e, 0xb3, 0xa4, 0xb6, 0x44, 0x2b, 0xcd, 0x58, 0x51, 0x32, 0x4f, 0xab, 0x35, 0x3b, 0xf3, 0x13, 0x75, 0x22, 0x43, 0xb6, 0xd1, 0x19, 0x52, 0xf0, 0x2a, 0x6a, 0xff, 0x44, 0x19, 0x74, 0x26, 0x31, 0x1d, 0xb1, 0x8f, 0xc8, 0x76, 0x86, 0x7d, 0x1e, 0xb1, 0x8f, 0xd2, 0xdb, 0x89, 0xa4, 0x4d, 0xe7, 0xe3, 0x85, 0x44, 0xd1, 0x2c, 0xc1, 0xc0, 0x09, 0xc4, 0x7c, 0xc8, 0x4e, 0xb5, 0x73, 0xfa, 0x3a, 0xa7, 0xe8, 0x12, 0x50, 0x97, 0x06, 0xe4, 0x9d, 0x74, 0x82, 0xb9, 0xd5, 0x13, 0xf2, 0x84, 0xf9, 0x7e, 0x55, 0x31, 0x15, 0x31, 0xf3, 0x11, 0x13, 0xd6, 0x9e, 0x66, 0x8b, 0xb6, 0x9d, 0xfc, 0x2b, 0x0b, 0xdb, 0x73, 0xd9, 0x6e, 0xe9, 0xb2, 0x9e, 0xd4, 0x71, 0x95, 0xed, 0x53, 0x74, 0xb8, 0xa6, 0x5f, 0x91, 0x0a, 0x6c, 0xff, 0xa6, 0x95, 0x4a, 0x8d, 0x2c, 0xc1, 0x92, 0xd7, 0x8b, 0x57, 0x10, 0x33, 0x45, 0xc5, 0xd4, 0x22, 0x66, 0x87, 0x78, 0x5a, 0xd0, 0xf1, 0x1c, 0x98, 0x72, 0xbf, 0xac, 0xf7, 0x75, 0xf2, 0xd1, 0x89, 0x14, 0x7b, 0x8b, 0x43, 0xa2, 0x5e, 0xda, 0xc5, 0xb8, 0xdc, 0xcf, 0x30, 0x3b, 0x8e, 0x87, 0xc4, 0xab, 0xd1, 0xf4, 0x2d, 0x1b, 0x43, 0xe2, 0x79, 0x9e, 0x7b, 0xc2, 0xcf, 0xb1, 0xe4, 0x13, 0x83, 0x6f, 0xfd, 0x2b, 0x16, 0xe9, 0x35, 0x3a, 0x7d, 0xa4, 0xc3, 0xc4, 0xbe, 0x7b, 0xb3, 0xad, 0x23, 0xb6, 0xb2, 0x9d, 0xbe, 0xd8, 0x57, 0x76, 0xc2, 0x1f, 0xa9, 0x6c, 0x07, 0x9d, 0xe7, 0x93, 0xad, 0x6c, 0x97, 0x40, 0xd9, 0x49, 0x4f, 0x37, 0x18, 0x3c, 0xce, 0x03, 0xe1, 0x3c, 0x5d, 0x05, 0x85, 0x5c, 0x07, 0xc2, 0x27, 0x5c, 0x1e, 0xb7, 0xdb, 0x4d, 0xb1, 0x03, 0xe1, 0xe3, 0x6b, 0x2b, 0xce, 0xe8, 0x62, 0x68, 0x4c, 0xec, 0x09, 0xed, 0x77, 0xb9, 0x8d, 0xde, 0xd0, 0x12, 0x63, 0x71, 0xa8, 0xd4, 0xe8, 0x5d, 0x83, 0x70, 0x4d, 0xa9, 0x91, 0xde, 0x56, 0xe2, 0x36, 0xb6, 0xec, 0x2c, 0x71, 0x0a, 0xc2, 0x4e, 0xfe, 0xfc, 0x31, 0xc5, 0xeb, 0x52, 0x9e, 0xf5, 0x38, 0xc3, 0x4f, 0x85, 0xf6, 0xe7, 0x01, 0xf1, 0x73, 0x64, 0x80, 0x3e, 0xb4, 0x3f, 0x8c, 0x36, 0x44, 0xb4, 0x9f, 0xeb, 0x3c, 0xf7, 0x1d, 0x95, 0xee, 0x1a, 0xd2, 0x41, 0x44, 0x26, 0xaa, 0x83, 0x4f, 0x79, 0x8d, 0x38, 0x16, 0xd7, 0xa6, 0xe2, 0xd8, 0xd0, 0xdd, 0xa3, 0x8d, 0x43, 0x1a, 0x3b, 0x1d, 0x97, 0x82, 0x91, 0xe8, 0x98, 0x33, 0xd0, 0x98, 0xeb, 0xdf, 0x31, 0x38, 0xe6, 0xf2, 0x26, 0x82, 0x91, 0x8d, 0x39, 0x13, 0x8d, 0x39, 0x87, 0x3a, 0xb2, 0xf8, 0x68, 0x62, 0xe3, 0x48, 0xc7, 0x46, 0x90, 0x9e, 0x8d, 0x1d, 0x03, 0x1b, 0x35, 0x46, 0x36, 0x5e, 0x62, 0xd8, 0x48, 0x31, 0xb1, 0x31, 0x12, 0xcb, 0x46, 0x87, 0x99, 0x8d, 0x8b, 0x38, 0x36, 0x22, 0x2c, 0x6c, 0x2c, 0x8c, 0x60, 0xa3, 0xc0, 0xca, 0xf4, 0x7f, 0x24, 0xd3, 0xfc, 0x78, 0xa6, 0xf3, 0xa3, 0x98, 0xb6, 0xdb, 0x98, 0xd6, 0x8e, 0x66, 0xda, 0x9e, 0xc0, 0xf4, 0x73, 0x4c, 0x35, 0x5d, 0x13, 0x99, 0xce, 0xdf, 0xc1, 0x34, 0x3c, 0x89, 0xe9, 0xf6, 0x9d, 0xb4, 0x53, 0x7c, 0x75, 0x1f, 0xfb, 0x6e, 0x38, 0x3b, 0xf9, 0x93, 0xbf, 0x63, 0x99, 0x51, 0x56, 0x72, 0x19, 0xcc, 0x13, 0x9d, 0x60, 0x4c, 0xf7, 0xd0, 0xdb, 0xa7, 0x99, 0x31, 0xfb, 0xe8, 0x7e, 0x61, 0xa8, 0xd5, 0xd8, 0xf1, 0xa4, 0x6f, 0x9d, 0x60, 0xaa, 0x0e, 0xc9, 0xa6, 0xc4, 0x93, 0xee, 0x64, 0x71, 0x9e, 0xcd, 0x3e, 0x86, 0x7d, 0xe1, 0x28, 0xc1, 0xbe, 0x13, 0xe4, 0xb1, 0x2b, 0x74, 0xd5, 0xeb, 0x7c, 0x4f, 0x57, 0xaf, 0x53, 0x4c, 0x5d, 0x76, 0xba, 0x8f, 0xbc, 0xe5, 0xe9, 0xe2, 0xe2, 0xc4, 0x70, 0xe2, 0x41, 0xef, 0xb7, 0x94, 0x4c, 0x71, 0x6f, 0x51, 0x4f, 0xe4, 0xc6, 0x0a, 0xb0, 0xe9, 0x18, 0x85, 0x99, 0xe5, 0xb8, 0x5a, 0xdd, 0x49, 0x54, 0xd5, 0x4f, 0x3b, 0x8c, 0x89, 0xbf, 0x9e, 0x73, 0x34, 0x32, 0x90, 0x18, 0xf6, 0x7e, 0x4b, 0xde, 0x20, 0x58, 0x8a, 0xb0, 0xfc, 0x0d, 0xdf, 0xc9, 0x08, 0xed, 0x0e, 0xb5, 0xa4, 0x52, 0x58, 0x30, 0x14, 0x87, 0x32, 0x42, 0x82, 0x21, 0xc1, 0x70, 0xfe, 0xbb, 0xa9, 0xff, 0x5a, 0xfd, 0x94, 0xdc, 0x7f, 0xa0, 0x03, 0x0c, 0xa2, 0x3e, 0xe1, 0x5f, 0xe9, 0x8c, 0xf8, 0xaa, 0xd0, 0xcd, 0x6f, 0x87, 0xe6, 0x0e, 0xac, 0x61, 0x2d, 0xaa, 0x38, 0x33, 0x6e, 0x35, 0xfb, 0xa2, 0xcc, 0xd9, 0x41, 0x0a, 0xde, 0x56, 0xef, 0x86, 0xa5, 0xf9, 0x15, 0x27, 0xc1, 0x90, 0xe6, 0x79, 0x3f, 0xfc, 0x8b, 0xfd, 0xaf, 0x1f, 0x51, 0x8a, 0xfd, 0x60, 0x13, 0x96, 0xc6, 0x8f, 0xa1, 0x33, 0x82, 0x06, 0xc6, 0xbc, 0x4f, 0x5c, 0xc4, 0x1e, 0x4f, 0xa8, 0xd4, 0x99, 0x20, 0x8c, 0xd9, 0x4f, 0xb1, 0x31, 0x3a, 0x4a, 0x11, 0x4f, 0x54, 0x75, 0x0a, 0x19, 0x60, 0x4c, 0x80, 0xf3, 0x9d, 0xa9, 0x27, 0x51, 0x12, 0x5a, 0x4d, 0xd8, 0x69, 0xf5, 0x5f, 0x5e, 0x8f, 0x58, 0x03, 0xdd, 0xbd, 0x37, 0x05, 0xd5, 0x6f, 0xba, 0x99, 0x30, 0x9c, 0x4c, 0x35, 0x3b, 0xdb, 0xc7, 0x4e, 0xb6, 0xb8, 0xac, 0xd8, 0x52, 0x3d, 0x69, 0xce, 0x44, 0xba, 0x03, 0xb7, 0x9e, 0xce, 0xa7, 0xf7, 0x5c, 0xe6, 0xdf, 0xad, 0x18, 0x3c, 0x25, 0xbf, 0x8b, 0x9d, 0xd9, 0xd5, 0x6c, 0x62, 0xcf, 0x18, 0x78, 0xcc, 0xb8, 0x8c, 0xc7, 0x8c, 0x0f, 0x3a, 0x41, 0xcf, 0xbf, 0x40, 0x40, 0xdf, 0x17, 0x74, 0x3a, 0xdd, 0x35, 0xd1, 0x7d, 0xc6, 0x1b, 0xb5, 0xd3, 0xfc, 0x8b, 0xae, 0x9a, 0xe1, 0xf8, 0x2f, 0x70, 0xc6, 0xab, 0xc2, 0xf9, 0xce, 0xa2, 0x78, 0xf1, 0x1a, 0x27, 0x5b, 0x1d, 0x63, 0xc2, 0x1d, 0x91, 0xbe, 0x2a, 0x67, 0x7e, 0x48, 0xa4, 0x27, 0xe2, 0x23, 0x65, 0xfa, 0x0e, 0xcc, 0x81, 0x84, 0x90, 0x7a, 0xa6, 0x7f, 0xaa, 0xf6, 0xfd, 0x09, 0xfd, 0x9b, 0xbe, 0x9a, 0x5d, 0x35, 0x2d, 0x7a, 0xa9, 0x72, 0x17, 0x3b, 0xdd, 0x9f, 0x7d, 0x0d, 0x45, 0xa6, 0xd3, 0xfd, 0xc5, 0x4d, 0x5e, 0x50, 0x26, 0xa9, 0x54, 0x9b, 0x55, 0xaa, 0x0c, 0x77, 0xf5, 0x10, 0xba, 0xe9, 0xfc, 0x2b, 0x00, 0x8a, 0x55, 0x84, 0xc8, 0x62, 0x95, 0xb2, 0x05, 0xfb, 0x26, 0x96, 0x7f, 0xff, 0xaa, 0xd4, 0x2c, 0xdb, 0xdd, 0x35, 0xec, 0x29, 0xdf, 0x66, 0x94, 0x1c, 0x7d, 0x17, 0x25, 0x5f, 0xfd, 0xe2, 0x51, 0x2f, 0xbd, 0x9b, 0x31, 0x45, 0x1f, 0xd4, 0x49, 0xc6, 0x34, 0xf6, 0x05, 0xc7, 0x70, 0x78, 0xc8, 0x2e, 0x0d, 0x75, 0xaf, 0x07, 0xdf, 0xf3, 0x51, 0xd4, 0x6b, 0x56, 0x9f, 0xbf, 0x6c, 0x60, 0x92, 0xda, 0xe0, 0xf6, 0x39, 0xc5, 0x0c, 0xfa, 0x1a, 0xe6, 0xd7, 0xf9, 0x87, 0x7d, 0xfb, 0x01, 0xbf, 0x3b, 0x1b, 0x88, 0x39, 0x70, 0xa0, 0xda, 0x35, 0xe4, 0xdc, 0xbc, 0xeb, 0x6a, 0x1d, 0xe9, 0xbc, 0x57, 0xf6, 0x2d, 0x2e, 0xad, 0x6c, 0x7d, 0x37, 0x2f, 0x5b, 0xdf, 0x7d, 0xbb, 0xb2, 0xb1, 0x4e, 0x71, 0x7f, 0x59, 0xf9, 0x7e, 0x76, 0x82, 0x53, 0x68, 0xac, 0x12, 0x9f, 0xa3, 0xaf, 0x76, 0x1d, 0x20, 0xfe, 0xfb, 0x03, 0x99, 0xa2, 0x39, 0x87, 0xbe, 0xae, 0x31, 0x79, 0x78, 0x9d, 0x2a, 0xce, 0x18, 0x50, 0xa3, 0xbe, 0x54, 0x32, 0x46, 0x2e, 0x99, 0x54, 0x8f, 0x43, 0x5f, 0xcd, 0x9e, 0x46, 0x7d, 0x2f, 0x4c, 0x4f, 0xcf, 0x6e, 0x95, 0xcf, 0xf8, 0xaf, 0xf9, 0x37, 0x28, 0x1f, 0x56, 0x9b, 0x98, 0x6a, 0xd7, 0x78, 0xe0, 0xff, 0x86, 0x49, 0x68, 0xe3, 0x10, 0x09, 0x19, 0xb9, 0x84, 0xb4, 0x3a, 0xe8, 0xbb, 0xa9, 0x0e, 0xfa, 0xee, 0xdb, 0xcb, 0xe9, 0x2f, 0xa9, 0xc7, 0xad, 0x72, 0x7a, 0x6e, 0x98, 0x9c, 0x86, 0xd6, 0x8c, 0xcb, 0xc9, 0xf3, 0x49, 0x5f, 0x9f, 0x5a, 0xc7, 0x8e, 0xa1, 0xdf, 0x9a, 0x48, 0x65, 0xb5, 0xa5, 0x1a, 0xfc, 0x82, 0xde, 0x18, 0xdc, 0x3e, 0xe9, 0x55, 0x1a, 0x3f, 0x63, 0x1a, 0x56, 0xcc, 0x26, 0xff, 0x33, 0xd1, 0x6e, 0xcb, 0x13, 0xa0, 0xe4, 0x0f, 0x68, 0x40, 0x97, 0x40, 0x0b, 0x54, 0xe1, 0xf5, 0x34, 0x6c, 0x1d, 0xb3, 0x44, 0xe7, 0x85, 0x5e, 0xbc, 0xee, 0xd1, 0x39, 0xc7, 0x2c, 0xd1, 0xa7, 0xeb, 0x36, 0xe0, 0x75, 0x93, 0xee, 0xec, 0x98, 0x25, 0x06, 0xbd, 0xde, 0x81, 0x57, 0xbf, 0x3e, 0x94, 0x70, 0x1c, 0xad, 0xd9, 0x01, 0x4d, 0x97, 0xcd, 0x74, 0x56, 0xf1, 0x99, 0xde, 0x24, 0xe5, 0x0a, 0xea, 0x3c, 0xeb, 0xab, 0xb3, 0xa2, 0xfa, 0xed, 0x94, 0xf0, 0xc5, 0xb2, 0x3c, 0xd7, 0x71, 0xfa, 0xe7, 0x1d, 0xb3, 0xd6, 0x06, 0x07, 0x3b, 0x20, 0x52, 0xc2, 0x6a, 0x90, 0x98, 0x83, 0x25, 0xb3, 0x1a, 0x95, 0x5c, 0x15, 0x80, 0xd7, 0xf3, 0x78, 0xf8, 0x00, 0xd5, 0x74, 0x7f, 0xc2, 0xc6, 0xbf, 0xb4, 0x3e, 0x15, 0x67, 0x4c, 0x6c, 0xa7, 0xc1, 0x59, 0xff, 0x60, 0x79, 0xc7, 0xd9, 0x0e, 0x0f, 0xa7, 0xde, 0xfb, 0x9c, 0x62, 0x4e, 0x5f, 0x70, 0x27, 0x96, 0x2e, 0x5e, 0xfb, 0xb2, 0xf2, 0x37, 0x3a, 0xff, 0xe3, 0x35, 0x88, 0x8f, 0x25, 0x0b, 0xa8, 0xcf, 0x63, 0x23, 0xbb, 0x1c, 0xfd, 0x1f, 0xfb, 0xe0, 0x57, 0xe8, 0x24, 0x98, 0xb6, 0x91, 0xbe, 0x25, 0xfe, 0x56, 0x78, 0x89, 0xde, 0xed, 0xec, 0xea, 0xd0, 0x87, 0x96, 0x19, 0x1d, 0x85, 0xfa, 0x27, 0x73, 0xc3, 0x84, 0xbb, 0xe0, 0x21, 0xf8, 0xad, 0x43, 0x8c, 0xe2, 0x00, 0x51, 0xf0, 0x27, 0x2e, 0x54, 0x97, 0x2e, 0x17, 0x52, 0xea, 0xaa, 0x9d, 0x8c, 0xf2, 0x80, 0x27, 0x1c, 0x42, 0x1c, 0xa3, 0x3e, 0x8c, 0x65, 0xd1, 0x8e, 0xa7, 0x6d, 0xeb, 0xc6, 0xc9, 0xfc, 0xbd, 0x8b, 0x6d, 0x6f, 0x1d, 0x45, 0x6f, 0x7f, 0x5d, 0x74, 0x94, 0x20, 0x8d, 0x6a, 0x3f, 0x28, 0x7c, 0xc8, 0xea, 0xa0, 0xe7, 0xa0, 0x4a, 0x83, 0xd7, 0xa9, 0x64, 0xb2, 0x70, 0x44, 0x49, 0x43, 0xf8, 0x30, 0xc2, 0x14, 0x84, 0xd3, 0x10, 0x26, 0x22, 0xcc, 0x40, 0x68, 0x45, 0x98, 0x89, 0xd0, 0x58, 0xed, 0x14, 0xbb, 0x8b, 0xd8, 0x77, 0x55, 0x12, 0x7a, 0x01, 0x7c, 0x58, 0x73, 0xa8, 0x52, 0x04, 0x96, 0x0a, 0x8a, 0x9d, 0xe5, 0x06, 0xc5, 0x86, 0x70, 0x22, 0x9d, 0x9d, 0xcd, 0x4b, 0x90, 0x4f, 0xb8, 0x47, 0xd3, 0x1b, 0x4b, 0xec, 0x7b, 0x56, 0xf9, 0x4b, 0x1e, 0x73, 0xb3, 0x3a, 0x6a, 0xba, 0x22, 0xb1, 0xf3, 0xb6, 0x43, 0xea, 0x37, 0x03, 0xbb, 0xb9, 0xf5, 0x27, 0x89, 0x4d, 0xe5, 0xa3, 0x89, 0x7d, 0x89, 0xc8, 0xab, 0xea, 0xf2, 0xd8, 0x52, 0x5b, 0x29, 0x2e, 0xd6, 0xf1, 0xb7, 0x15, 0x7f, 0xbd, 0xa5, 0x19, 0x3a, 0x27, 0xfe, 0x36, 0xe0, 0xef, 0x6c, 0x69, 0x86, 0xde, 0xc1, 0xdf, 0x6d, 0x23, 0x6e, 0x74, 0xc2, 0xeb, 0xba, 0x71, 0xb4, 0x8f, 0x4e, 0x2b, 0xe7, 0xcb, 0xf8, 0xb3, 0xde, 0xf1, 0xf2, 0xbd, 0x62, 0x7f, 0xbe, 0x04, 0xb6, 0xf3, 0xc4, 0xab, 0xbe, 0x43, 0x97, 0x01, 0x96, 0xff, 0x53, 0xa7, 0xe7, 0x9e, 0x0d, 0x39, 0x0f, 0xa8, 0xdf, 0x25, 0xdf, 0xb6, 0x6e, 0xac, 0x52, 0xcc, 0x64, 0x36, 0x36, 0xda, 0x06, 0x55, 0x37, 0xa8, 0x3f, 0xa9, 0x0d, 0xb6, 0x42, 0x98, 0x9b, 0x50, 0x08, 0xaf, 0xbc, 0x6e, 0xfb, 0x21, 0xd6, 0xfd, 0x75, 0xac, 0x3b, 0xc2, 0xde, 0xd7, 0xb1, 0xee, 0x3f, 0xc4, 0xba, 0x23, 0x3c, 0xfb, 0x43, 0xac, 0x7b, 0xe9, 0x01, 0xac, 0x37, 0x1f, 0x15, 0x21, 0x55, 0x4f, 0x6a, 0x86, 0x96, 0x22, 0x17, 0x33, 0xa9, 0xfd, 0x27, 0x95, 0x32, 0x45, 0xdb, 0x3b, 0xb1, 0xdc, 0xed, 0xb0, 0xd1, 0x13, 0x7f, 0x13, 0x7d, 0xf3, 0x33, 0x8a, 0x15, 0x47, 0xef, 0x03, 0x8b, 0x0d, 0x30, 0x0d, 0x7d, 0xf4, 0x3f, 0x5e, 0xe2, 0xdf, 0x03, 0xe5, 0x5f, 0x9f, 0xc2, 0x54, 0x75, 0xcf, 0x22, 0x7a, 0x1a, 0x4f, 0xaa, 0x14, 0x87, 0x91, 0xab, 0x7e, 0x18, 0x4d, 0xe9, 0x20, 0x0d, 0xe3, 0xa5, 0x43, 0x4a, 0x9c, 0x67, 0xff, 0xf8, 0xa2, 0x46, 0x79, 0xd6, 0x49, 0x69, 0x7c, 0x4d, 0x5a, 0x8d, 0x0e, 0x24, 0x8e, 0xf5, 0x51, 0xa3, 0x5f, 0x17, 0xc0, 0x06, 0x3d, 0x9d, 0xb4, 0xff, 0x1c, 0xd7, 0x99, 0x4c, 0x1a, 0x7d, 0x4e, 0xb3, 0x0e, 0x62, 0xe7, 0xbd, 0x85, 0xd4, 0x33, 0x48, 0xb7, 0x3b, 0xad, 0xc5, 0xae, 0xe3, 0x1d, 0x60, 0xf9, 0xb8, 0xec, 0xf8, 0x7e, 0x3b, 0xae, 0xe6, 0xd1, 0xdb, 0x36, 0x15, 0x87, 0x30, 0x34, 0x99, 0x9e, 0x42, 0xa6, 0xa1, 0x9d, 0x4c, 0xbd, 0x4b, 0x71, 0xee, 0x5c, 0xdb, 0x62, 0xda, 0xb4, 0xc6, 0x17, 0x12, 0xaf, 0x57, 0xaf, 0x91, 0x2d, 0x5e, 0xfa, 0x42, 0xe7, 0x5b, 0xa3, 0x8b, 0x23, 0x11, 0x0c, 0x25, 0x56, 0xbd, 0x85, 0x1e, 0x82, 0x89, 0x62, 0xa2, 0xd9, 0x6d, 0xa0, 0x77, 0x61, 0x44, 0x2b, 0x79, 0x1f, 0xf5, 0x7a, 0x3f, 0x74, 0xe3, 0x3a, 0xdd, 0x16, 0x16, 0xf7, 0x62, 0xe9, 0xe3, 0xe8, 0x0c, 0xf3, 0x87, 0xb7, 0x1c, 0x81, 0x98, 0xcf, 0x3e, 0x02, 0xd8, 0xfc, 0x7c, 0x08, 0x46, 0xb9, 0x9d, 0xa0, 0x5b, 0xb7, 0x15, 0xe0, 0x3e, 0x1b, 0x3a, 0xc9, 0xf4, 0x8d, 0x8a, 0x06, 0xf2, 0x81, 0xc9, 0x7b, 0x56, 0xf5, 0xc2, 0xcf, 0xda, 0xd3, 0x40, 0xa7, 0x86, 0x04, 0x98, 0xbd, 0x1a, 0x2d, 0xe6, 0x15, 0x82, 0xb2, 0x33, 0x79, 0xfe, 0x91, 0xc8, 0x00, 0x59, 0xf4, 0xd1, 0xd2, 0xdf, 0xbe, 0x97, 0x67, 0x49, 0x38, 0xe0, 0x73, 0xe1, 0xcc, 0x71, 0x96, 0x5b, 0x21, 0x9a, 0x2b, 0x69, 0x67, 0x51, 0xb9, 0x95, 0xde, 0x82, 0x2e, 0x4f, 0xc9, 0x29, 0xb4, 0xd2, 0x57, 0x35, 0xdf, 0x65, 0xbb, 0x63, 0x0c, 0x3c, 0x9d, 0xec, 0x73, 0x39, 0xed, 0x5b, 0xb8, 0x6d, 0x7a, 0xa4, 0x2f, 0xdd, 0x13, 0x84, 0x3c, 0x78, 0x7a, 0x00, 0x46, 0xec, 0x5a, 0x49, 0x6f, 0x48, 0xca, 0x19, 0xfc, 0xbd, 0x49, 0x41, 0xef, 0x71, 0xd2, 0x9b, 0x52, 0xb2, 0x1d, 0xb5, 0x84, 0xed, 0x74, 0x98, 0x93, 0xf9, 0x7e, 0xd8, 0x3f, 0x23, 0xfd, 0x64, 0x3a, 0xfb, 0xfe, 0xb3, 0xe8, 0xa4, 0x15, 0x20, 0x7d, 0xd1, 0x56, 0xc9, 0x64, 0x7e, 0xcb, 0x08, 0x9e, 0xcf, 0xbd, 0x99, 0xfe, 0x71, 0xfa, 0xc0, 0x88, 0xd5, 0xa8, 0x21, 0xba, 0x63, 0xca, 0xab, 0xfe, 0x08, 0xed, 0x34, 0x52, 0x32, 0x55, 0xde, 0x6c, 0xf6, 0xd7, 0xde, 0x61, 0xa1, 0x9d, 0xa1, 0xb7, 0xab, 0x09, 0xae, 0xee, 0xbd, 0x9c, 0xbf, 0x3f, 0x32, 0x34, 0x1f, 0xd5, 0x4c, 0x2d, 0x0b, 0xeb, 0x37, 0xbc, 0x76, 0xc2, 0xbf, 0x0a, 0xff, 0x4a, 0xb5, 0x23, 0x1f, 0x4c, 0x99, 0x7a, 0x73, 0x09, 0x5e, 0xc6, 0x77, 0xa9, 0xfa, 0xde, 0x9e, 0x32, 0x55, 0x7b, 0xeb, 0x53, 0xc9, 0x2a, 0xea, 0x81, 0x11, 0xc1, 0x88, 0xdf, 0xe2, 0x5b, 0xeb, 0xb5, 0xcf, 0xc3, 0xfc, 0x4a, 0x41, 0x00, 0xaa, 0x3b, 0xdd, 0x76, 0xdf, 0x9a, 0xd7, 0xdf, 0x55, 0x8c, 0x74, 0xf6, 0xee, 0xce, 0x0e, 0x18, 0xa1, 0x54, 0xf1, 0x92, 0xc8, 0xce, 0x28, 0x99, 0xd4, 0xe6, 0x6e, 0xf7, 0x41, 0x2c, 0xff, 0xfd, 0x03, 0xd4, 0x4e, 0xb8, 0x20, 0xa7, 0x88, 0x5d, 0x83, 0x69, 0x51, 0x19, 0x44, 0x30, 0xed, 0x88, 0x92, 0x78, 0x3b, 0x19, 0xb8, 0x1f, 0xba, 0xb5, 0x9e, 0xe1, 0x10, 0xae, 0xda, 0x70, 0x15, 0xb6, 0x1e, 0x57, 0xb0, 0x37, 0x7a, 0x7c, 0x4e, 0xf4, 0x35, 0xa0, 0xda, 0x25, 0x5f, 0xc5, 0x35, 0x6d, 0x21, 0x62, 0x37, 0x6b, 0xd4, 0x3a, 0x43, 0x94, 0x3a, 0x09, 0xf1, 0x93, 0x90, 0xda, 0x31, 0x94, 0x7a, 0x7d, 0xcb, 0x6d, 0x28, 0x13, 0x90, 0x6a, 0xd3, 0x50, 0xaa, 0x1b, 0x3d, 0xb7, 0xa1, 0x8a, 0x97, 0xe0, 0x8b, 0xf3, 0x83, 0x54, 0xc3, 0x29, 0x86, 0x7e, 0x71, 0xb5, 0xd4, 0xe2, 0x09, 0x7b, 0xf6, 0x67, 0x78, 0xf8, 0x5b, 0x39, 0x98, 0x8b, 0xed, 0x37, 0x2f, 0x8f, 0xf1, 0xba, 0x1e, 0xa1, 0xf7, 0x8e, 0x8c, 0x4b, 0x92, 0xe9, 0x3d, 0x2c, 0xd3, 0x59, 0xde, 0xe6, 0x55, 0x11, 0xe1, 0x6d, 0xfa, 0x97, 0xfb, 0x36, 0xc9, 0x81, 0xde, 0xc8, 0xf5, 0x9e, 0x7f, 0x93, 0xed, 0x83, 0x9c, 0x4f, 0xbb, 0xdd, 0x06, 0x3c, 0xe1, 0x49, 0xb0, 0x1e, 0x25, 0x27, 0xc4, 0x78, 0xf8, 0xbb, 0x79, 0x17, 0x30, 0xdf, 0x4f, 0xdf, 0x87, 0x69, 0x1d, 0x38, 0xa9, 0xd3, 0x57, 0xc5, 0xd9, 0x57, 0xc2, 0x59, 0x4a, 0x3f, 0xfb, 0xea, 0xf1, 0x8b, 0xd3, 0x3a, 0x9e, 0x03, 0x78, 0x91, 0x7a, 0xd3, 0x3b, 0x20, 0x9b, 0xa6, 0x75, 0x3c, 0x0d, 0x84, 0x2b, 0xfe, 0x0e, 0xac, 0x46, 0xbd, 0xb3, 0xa9, 0x6f, 0x32, 0x01, 0x9c, 0xe4, 0x14, 0x4a, 0x12, 0x7a, 0x30, 0x06, 0x3a, 0xdf, 0x4e, 0xb6, 0xe6, 0xb2, 0xb7, 0xac, 0xcb, 0xcd, 0x22, 0xc0, 0x5e, 0x9c, 0x61, 0x17, 0xf3, 0xf7, 0x79, 0x74, 0x1b, 0xe8, 0x2c, 0x59, 0x83, 0x99, 0x7d, 0xc7, 0x3b, 0x82, 0xd2, 0xd8, 0x40, 0xab, 0x9a, 0x72, 0x6b, 0x2a, 0x1c, 0xc7, 0x95, 0x63, 0x1e, 0xcc, 0xbc, 0x9c, 0x04, 0x3f, 0x0e, 0xb7, 0xa6, 0xbe, 0xb1, 0xbf, 0x79, 0xac, 0x04, 0x03, 0x5b, 0x53, 0x0b, 0x91, 0x0b, 0x74, 0xed, 0xa3, 0xd6, 0x2b, 0x26, 0x8c, 0x21, 0x14, 0x5c, 0x74, 0x6f, 0xa3, 0xe2, 0x4c, 0x9c, 0x41, 0x2d, 0xd5, 0x4e, 0xf5, 0xf0, 0x5e, 0x90, 0xab, 0xac, 0x2b, 0x61, 0x04, 0xb5, 0x79, 0x59, 0xa9, 0x04, 0xc6, 0x57, 0x44, 0x2b, 0x96, 0x24, 0xa8, 0x75, 0x64, 0xde, 0x84, 0x37, 0x22, 0x67, 0xaa, 0xeb, 0x9d, 0x34, 0xed, 0xcb, 0xe7, 0xc3, 0xbf, 0x44, 0xea, 0xc3, 0x51, 0xa7, 0x5f, 0x42, 0x77, 0x20, 0x71, 0x05, 0x52, 0x87, 0x7a, 0x75, 0x1c, 0xcb, 0x4a, 0x56, 0xeb, 0xde, 0x2d, 0x81, 0xfa, 0x35, 0xe8, 0x17, 0xa7, 0x51, 0x89, 0xfd, 0x28, 0x19, 0xb5, 0xe7, 0x9e, 0x8c, 0x44, 0x6d, 0x2c, 0xca, 0x93, 0xd3, 0xa3, 0xc1, 0x0c, 0x61, 0x9e, 0x3a, 0xbd, 0x0d, 0x9e, 0x94, 0x16, 0xe9, 0x36, 0x48, 0xb5, 0x3a, 0xf6, 0xf5, 0x72, 0xd9, 0x3e, 0xe4, 0xdb, 0x14, 0x63, 0xf9, 0xb7, 0x29, 0x74, 0x54, 0x93, 0x1b, 0x7c, 0x7e, 0x44, 0xc9, 0x3e, 0x7f, 0x33, 0x2f, 0xe4, 0x93, 0x4c, 0xfc, 0xa4, 0x44, 0xe4, 0x63, 0xc3, 0x98, 0x55, 0xf7, 0xc6, 0x60, 0x0e, 0x94, 0xa3, 0x9e, 0xeb, 0x8c, 0x3f, 0x2e, 0xfa, 0x1d, 0x5d, 0xbd, 0x7f, 0x4c, 0x42, 0x16, 0x98, 0x76, 0xf2, 0xf7, 0x7b, 0x0e, 0x47, 0xae, 0x55, 0x9c, 0x71, 0x1a, 0x86, 0xd1, 0x66, 0x0f, 0xa1, 0xad, 0xff, 0x6a, 0x5a, 0x47, 0xa1, 0xee, 0xee, 0x28, 0x35, 0x79, 0x5c, 0x0f, 0xde, 0x8e, 0xde, 0xbc, 0x81, 0x74, 0x34, 0x12, 0x30, 0x77, 0x23, 0x7c, 0x9e, 0xed, 0x80, 0x39, 0xcb, 0x5b, 0x81, 0x92, 0x46, 0xad, 0xb0, 0xed, 0xe3, 0x5e, 0xa3, 0xf7, 0x72, 0xd5, 0x29, 0xbf, 0x71, 0xb9, 0x9e, 0x49, 0x06, 0x22, 0x6e, 0x6c, 0x13, 0x8e, 0x3d, 0x92, 0x6f, 0x24, 0x9f, 0x49, 0x8d, 0xe2, 0x99, 0x01, 0x08, 0x8e, 0x3b, 0xbe, 0xc6, 0x3c, 0x1a, 0x62, 0x14, 0xbd, 0x6f, 0x0d, 0x4b, 0xb5, 0xb3, 0x94, 0x84, 0x39, 0x47, 0x22, 0x3d, 0x2c, 0x6e, 0xf6, 0xae, 0x99, 0x7f, 0x8a, 0xed, 0xa2, 0xd9, 0x8d, 0x2b, 0x67, 0xfe, 0x4d, 0xd8, 0xf0, 0x50, 0xb9, 0xe5, 0xc0, 0x71, 0x17, 0x93, 0xfa, 0x17, 0xf2, 0x54, 0xdd, 0x06, 0x7e, 0xb2, 0x93, 0xfb, 0x1b, 0xb6, 0x7e, 0xac, 0x21, 0xce, 0x8e, 0x37, 0x0e, 0xa3, 0xbe, 0x1a, 0xa9, 0x66, 0x8a, 0x85, 0xea, 0x51, 0x83, 0x29, 0xe2, 0x65, 0xae, 0x15, 0x44, 0xc5, 0x7a, 0xe5, 0x0b, 0x5d, 0x77, 0xd4, 0xda, 0x3b, 0xd5, 0xde, 0x60, 0x1c, 0x95, 0xa9, 0xbc, 0x24, 0xaa, 0xd3, 0x8d, 0xd5, 0xac, 0x3f, 0xbe, 0xe0, 0x25, 0x70, 0x5d, 0x42, 0xec, 0x62, 0x29, 0x85, 0xe7, 0xe0, 0x3c, 0xbb, 0x9d, 0xb9, 0x38, 0x1a, 0xa1, 0x9f, 0x38, 0xea, 0xf9, 0x6a, 0x03, 0xdc, 0x46, 0xa4, 0x73, 0x4e, 0x89, 0xe3, 0x14, 0x39, 0x8c, 0xfa, 0xb8, 0x2b, 0x27, 0xdb, 0xd6, 0x9f, 0xfa, 0x78, 0x3e, 0x9c, 0x73, 0x9e, 0x73, 0xed, 0x74, 0x2e, 0xb3, 0x52, 0x7d, 0x37, 0x3a, 0x1d, 0xba, 0xe0, 0x0d, 0xd1, 0x86, 0x52, 0xd6, 0x6d, 0x70, 0x05, 0xf5, 0xa2, 0x89, 0xee, 0x17, 0x57, 0x1d, 0xa4, 0xb3, 0x8a, 0xa7, 0xc4, 0xdd, 0x54, 0xce, 0x53, 0x80, 0xf9, 0x0f, 0xd1, 0x6e, 0x4d, 0x13, 0xe6, 0xd5, 0x8b, 0x46, 0xcc, 0x85, 0xb3, 0xfc, 0x0d, 0xbd, 0xd7, 0x48, 0x6f, 0x09, 0xdf, 0x48, 0xaf, 0x38, 0x03, 0x6c, 0x85, 0xb1, 0xc6, 0xb6, 0xda, 0x38, 0xad, 0xc3, 0x09, 0x90, 0x86, 0xd6, 0x65, 0x4f, 0x3a, 0x9b, 0xcd, 0x26, 0x97, 0x83, 0xe0, 0x28, 0xdc, 0x42, 0xdf, 0x59, 0xd6, 0xc3, 0x0b, 0xd3, 0x9c, 0x90, 0x46, 0xbf, 0x21, 0x5a, 0xdb, 0x40, 0xb0, 0xce, 0x8e, 0x16, 0x63, 0x6c, 0x18, 0x69, 0x94, 0xcb, 0x2a, 0x87, 0x44, 0xc5, 0x3a, 0xe7, 0xe7, 0x91, 0x9d, 0xb9, 0xec, 0x14, 0x06, 0xf6, 0xfe, 0xe4, 0x1a, 0x66, 0xd1, 0xce, 0x66, 0x15, 0xce, 0xc5, 0x3f, 0xa1, 0x82, 0xce, 0x85, 0xf1, 0x9e, 0xc7, 0x5f, 0x0f, 0x0b, 0x5d, 0xc0, 0xdf, 0xa5, 0x15, 0x96, 0xe5, 0x90, 0x5a, 0x5e, 0x74, 0x31, 0x0f, 0xd2, 0xca, 0x7f, 0x44, 0xef, 0xc2, 0x1f, 0xb7, 0x2e, 0x2c, 0xfe, 0x8e, 0x7c, 0xcd, 0xea, 0x2b, 0xfe, 0x8e, 0x72, 0xc5, 0x36, 0x09, 0xf4, 0x09, 0x93, 0xc0, 0x14, 0x8e, 0x3d, 0x10, 0xdb, 0x8d, 0xaa, 0xb1, 0x1b, 0xed, 0x40, 0xc9, 0x25, 0xe3, 0x74, 0xf1, 0x84, 0xef, 0xa9, 0x92, 0x4b, 0x90, 0x21, 0x24, 0xa7, 0x26, 0x87, 0xbf, 0x7d, 0xe0, 0xdb, 0xdd, 0xa1, 0xd0, 0x9a, 0x4c, 0x98, 0x62, 0x29, 0xb9, 0x14, 0xe9, 0xf6, 0xc3, 0xaa, 0xb8, 0xd4, 0xe4, 0x1f, 0x86, 0x68, 0x8f, 0x59, 0xda, 0xe3, 0xe1, 0x6f, 0x77, 0xad, 0xc3, 0xd5, 0xdc, 0x4d, 0x74, 0x7e, 0x98, 0x5a, 0x08, 0x33, 0x88, 0x6a, 0xe8, 0x8f, 0x4e, 0xf9, 0x53, 0x73, 0x78, 0x99, 0x55, 0x39, 0xaf, 0xe4, 0x73, 0xeb, 0xa2, 0x98, 0xab, 0x19, 0x14, 0xd3, 0x57, 0x3d, 0x99, 0x3a, 0x49, 0x0f, 0x42, 0x94, 0x5b, 0x46, 0x98, 0x72, 0xb1, 0xd4, 0xf3, 0xfc, 0xb9, 0x84, 0x37, 0x22, 0x1a, 0x71, 0x5d, 0x97, 0x83, 0x3a, 0x19, 0xa1, 0xdd, 0x98, 0xac, 0xad, 0x3d, 0x94, 0xce, 0x42, 0x97, 0x88, 0x4f, 0x86, 0x87, 0xa5, 0xd2, 0x79, 0x04, 0x85, 0x9a, 0xfc, 0x07, 0x1a, 0x86, 0xca, 0xff, 0xd4, 0x4d, 0xf2, 0x8f, 0x4a, 0xfb, 0x7a, 0x94, 0x3e, 0x8f, 0x49, 0xb7, 0x77, 0xe6, 0x70, 0x3b, 0x96, 0x0b, 0xfd, 0x9c, 0xcf, 0x24, 0x26, 0xf5, 0xcc, 0x98, 0xd3, 0xeb, 0xc8, 0xea, 0x95, 0x1b, 0x15, 0xf6, 0x5c, 0xa0, 0x3c, 0x46, 0xb6, 0xe5, 0x14, 0x1a, 0x66, 0xa4, 0x1f, 0xe2, 0xff, 0x68, 0xf5, 0xcb, 0xe9, 0x67, 0xfe, 0x36, 0x46, 0x90, 0xac, 0xd4, 0x82, 0xf2, 0x98, 0x8a, 0x33, 0xa3, 0xb0, 0x6e, 0xf4, 0x2e, 0x60, 0xb9, 0x0e, 0xfb, 0x13, 0xed, 0x6a, 0xb9, 0x7e, 0x85, 0x45, 0x4a, 0x9f, 0xf9, 0x5b, 0xa3, 0xd3, 0xb4, 0x12, 0x22, 0x14, 0xe7, 0x6d, 0xc6, 0x96, 0x5e, 0xe2, 0xb2, 0xe2, 0x5f, 0xa1, 0xf6, 0xd2, 0xf9, 0xdf, 0xe5, 0xb5, 0x9d, 0xc2, 0x40, 0xf1, 0x77, 0x8a, 0xbf, 0xc3, 0xec, 0x3b, 0x48, 0x7e, 0xd7, 0x6f, 0xc1, 0x4c, 0x6f, 0x43, 0xc2, 0x56, 0xa9, 0x41, 0xad, 0x4d, 0x66, 0x19, 0x9b, 0xc1, 0xd5, 0x3a, 0x55, 0xf8, 0xe9, 0x4d, 0xd9, 0x71, 0x19, 0x61, 0xfe, 0x0f, 0xf5, 0xe8, 0x3a, 0x4f, 0xcf, 0x60, 0x6f, 0x5e, 0x56, 0x75, 0xae, 0x7e, 0x52, 0x48, 0x49, 0x87, 0x73, 0x74, 0x0f, 0xfc, 0x69, 0x57, 0x8f, 0x6e, 0x40, 0x30, 0x48, 0xab, 0x5c, 0x3d, 0x37, 0x80, 0xce, 0x32, 0x47, 0xee, 0xce, 0x9c, 0x42, 0x1d, 0x48, 0x35, 0x18, 0x2a, 0xe0, 0x6b, 0x23, 0x07, 0x30, 0x6a, 0x0b, 0xd2, 0xf9, 0x50, 0xdb, 0xad, 0x95, 0xed, 0xe1, 0x6f, 0xa5, 0xc1, 0x4f, 0xd6, 0xa6, 0xea, 0x4f, 0xac, 0x3d, 0xf7, 0x1d, 0xf3, 0x7e, 0x18, 0x77, 0x60, 0x6d, 0x68, 0x8d, 0x39, 0x83, 0xee, 0x01, 0x2b, 0x46, 0x73, 0x08, 0xc6, 0x09, 0x61, 0xba, 0x53, 0x52, 0xed, 0xf2, 0x43, 0x9a, 0xfd, 0x47, 0xf4, 0x56, 0x73, 0x3f, 0xe6, 0x18, 0x77, 0x33, 0x2e, 0x6d, 0x5c, 0xf8, 0x5b, 0x5f, 0x87, 0x57, 0x82, 0x8d, 0xed, 0x6e, 0xb6, 0xa2, 0x97, 0x6c, 0xc2, 0xeb, 0x7e, 0x88, 0xc5, 0x51, 0xb8, 0x06, 0x62, 0x6d, 0x6b, 0xd8, 0x6e, 0xb9, 0x16, 0xfc, 0x1d, 0x15, 0x41, 0x97, 0x89, 0xbf, 0x2c, 0xfc, 0x85, 0x30, 0x6e, 0xc2, 0x5f, 0x26, 0xda, 0x99, 0xce, 0x8f, 0xcb, 0xca, 0xfe, 0x68, 0x4b, 0x3c, 0x5f, 0x26, 0x9a, 0x84, 0x06, 0xc9, 0xcd, 0xdf, 0xb0, 0xae, 0x38, 0x33, 0xda, 0xf0, 0x71, 0xd9, 0x94, 0xbf, 0xb3, 0xc1, 0xec, 0x3f, 0xda, 0xe0, 0x7c, 0x19, 0xb3, 0x48, 0xc3, 0x29, 0x57, 0x7d, 0x19, 0xe5, 0x14, 0xe8, 0xfe, 0x01, 0x18, 0xbd, 0x4b, 0xc1, 0x26, 0xa7, 0x46, 0xdf, 0x62, 0x2e, 0x96, 0xe0, 0xba, 0x97, 0xdf, 0xf7, 0xf7, 0xf6, 0x4e, 0x01, 0x3f, 0x5a, 0x44, 0xe8, 0x17, 0xc6, 0x89, 0x99, 0xd6, 0xa5, 0xe8, 0x37, 0x73, 0x4a, 0xf6, 0x96, 0x33, 0x79, 0x4b, 0xd7, 0x85, 0xdc, 0x01, 0x1e, 0x53, 0x29, 0xbb, 0x91, 0x52, 0x4f, 0x6f, 0x55, 0x7f, 0x96, 0x2c, 0x90, 0x8c, 0x80, 0xde, 0x68, 0xbb, 0x4d, 0x29, 0x6e, 0xa4, 0x38, 0x7f, 0x53, 0x29, 0x9b, 0x30, 0xef, 0x24, 0xb5, 0x14, 0x21, 0x5a, 0x8a, 0x1d, 0x29, 0xf7, 0x0e, 0x2b, 0x65, 0x49, 0xb4, 0x0c, 0x27, 0x95, 0x81, 0x70, 0x4b, 0x65, 0x3b, 0xe3, 0x3f, 0xf8, 0x2e, 0x36, 0xce, 0xd8, 0x9f, 0x3d, 0x3d, 0x8c, 0x7f, 0xde, 0x97, 0x72, 0x5f, 0x34, 0x8c, 0xbb, 0x55, 0xe3, 0xde, 0xf7, 0x2c, 0x7b, 0x97, 0x21, 0x44, 0xe7, 0x0b, 0xc3, 0x6a, 0xc6, 0x3f, 0x3f, 0xca, 0x1f, 0xb5, 0x0d, 0x73, 0xa6, 0x6a, 0x25, 0x68, 0x2b, 0x29, 0x25, 0xcb, 0xaf, 0x7e, 0x3b, 0x83, 0x7b, 0x9d, 0xec, 0xab, 0xcb, 0xb5, 0x6a, 0xa9, 0x79, 0xd1, 0x52, 0xd1, 0x13, 0xb9, 0x76, 0x41, 0x2b, 0xf5, 0x2b, 0xf3, 0xa6, 0x60, 0xdf, 0xaf, 0xbb, 0x5d, 0xaa, 0x5f, 0x27, 0xb6, 0x0c, 0xf3, 0x05, 0x36, 0xd0, 0x0c, 0x80, 0xb5, 0xb6, 0xb0, 0xfb, 0x45, 0xe4, 0x6d, 0xd1, 0x6e, 0xf4, 0xa7, 0xf9, 0x9c, 0xf6, 0xc7, 0x6b, 0x18, 0x5e, 0x81, 0xf0, 0x72, 0x34, 0x35, 0x5e, 0xd7, 0xcd, 0x9f, 0xf7, 0x94, 0x9b, 0xfd, 0x11, 0x31, 0x55, 0xd7, 0xfd, 0x25, 0xa5, 0x98, 0x75, 0x68, 0x39, 0x45, 0xbd, 0x5f, 0x47, 0x6f, 0x71, 0x30, 0x1d, 0x7d, 0x05, 0x7f, 0xc7, 0xf0, 0x77, 0x0d, 0x7f, 0x57, 0xf1, 0xd7, 0xab, 0xea, 0x68, 0xd6, 0x30, 0xcd, 0x33, 0xa3, 0xe6, 0xa1, 0xdc, 0x98, 0xee, 0x5d, 0xbf, 0x9d, 0x96, 0x9e, 0x0d, 0x49, 0xf9, 0xa4, 0x19, 0x1f, 0x97, 0xb9, 0x58, 0x8e, 0x3c, 0x5d, 0xce, 0xfd, 0x74, 0x82, 0x7e, 0xcc, 0x71, 0x6f, 0x48, 0x31, 0x63, 0xdd, 0x46, 0xaa, 0xfe, 0x6f, 0x2c, 0xdd, 0x71, 0x1a, 0x9e, 0x57, 0xa0, 0xb3, 0x44, 0xb6, 0xe9, 0x5f, 0x0a, 0x8e, 0xfa, 0xf1, 0x49, 0x85, 0x66, 0xfe, 0x7e, 0x1e, 0xf7, 0x6e, 0x96, 0x07, 0xc6, 0x97, 0xd3, 0x4a, 0x2b, 0xce, 0xc8, 0xbf, 0x05, 0xdf, 0xf5, 0x03, 0x30, 0x37, 0xdb, 0xa8, 0x1c, 0xce, 0xdd, 0x30, 0x6f, 0x38, 0x77, 0xe0, 0x73, 0x38, 0x48, 0xaf, 0xdc, 0x4c, 0x69, 0xcc, 0xbb, 0x95, 0x92, 0xfe, 0x69, 0xef, 0xe6, 0x15, 0xb1, 0xb7, 0xff, 0x53, 0x47, 0x2b, 0xc6, 0x54, 0x97, 0xd8, 0xc7, 0xdf, 0x0c, 0xa7, 0x53, 0xef, 0x75, 0x93, 0x50, 0x63, 0xf4, 0x52, 0x3e, 0x3f, 0x3b, 0x9f, 0x9d, 0x20, 0x41, 0x29, 0x3a, 0xe6, 0x1b, 0x53, 0x4a, 0x8a, 0x46, 0xeb, 0xd7, 0xce, 0xb5, 0x37, 0xd2, 0x1d, 0x72, 0xbe, 0x12, 0xe9, 0x00, 0x9e, 0x4a, 0x67, 0x4d, 0xe8, 0x5f, 0xb1, 0x6e, 0xf0, 0x15, 0x57, 0x97, 0x2b, 0xf1, 0xbe, 0x75, 0xec, 0x19, 0x8a, 0x0d, 0xf5, 0xee, 0x55, 0xf1, 0xc3, 0xcc, 0x0c, 0xd8, 0x20, 0x64, 0x00, 0x9d, 0x8a, 0xf6, 0x62, 0x30, 0xd2, 0xb5, 0x96, 0x4e, 0xd6, 0x41, 0xea, 0x0e, 0xeb, 0x06, 0xfa, 0xfe, 0x22, 0x9d, 0x08, 0x8c, 0xa9, 0xe1, 0xb3, 0x9d, 0xe8, 0x21, 0xa3, 0x91, 0x94, 0xfd, 0x25, 0x17, 0x61, 0xde, 0x8f, 0x06, 0xc8, 0x6a, 0x36, 0x37, 0xa7, 0xae, 0x4f, 0xf5, 0xba, 0x9f, 0x2b, 0xe9, 0x81, 0xb4, 0x99, 0x17, 0x21, 0xa9, 0xec, 0x22, 0xe4, 0xbb, 0xbf, 0x17, 0x84, 0xc4, 0xe4, 0xa4, 0x03, 0xf6, 0x03, 0xa2, 0xc5, 0x96, 0x6c, 0x0f, 0x4b, 0x70, 0x76, 0x6c, 0x12, 0x9d, 0x34, 0x71, 0x0d, 0xb9, 0xbc, 0x14, 0x3e, 0x44, 0x27, 0x38, 0xa4, 0x65, 0xc0, 0x0e, 0x9f, 0xfb, 0xe0, 0xa1, 0x4d, 0xa1, 0x09, 0x6e, 0x30, 0xe7, 0xba, 0xc0, 0x36, 0xa1, 0x83, 0x7f, 0xe1, 0x80, 0x6a, 0xdb, 0x85, 0xd2, 0xd2, 0xdd, 0x98, 0x50, 0x05, 0x6a, 0x5b, 0xe9, 0x9b, 0xe1, 0x32, 0x44, 0x64, 0xf5, 0x64, 0xa4, 0xaf, 0xb8, 0x33, 0xc3, 0xee, 0x7f, 0xa1, 0x04, 0x70, 0xf5, 0xc3, 0xbe, 0x5b, 0x56, 0x6e, 0x4f, 0x5f, 0x15, 0x39, 0x3a, 0xc4, 0xa7, 0xa8, 0x62, 0x3e, 0x05, 0xc0, 0x16, 0xba, 0x77, 0xf2, 0x77, 0xbb, 0xbc, 0xb9, 0x00, 0x4b, 0x7b, 0x2e, 0xc6, 0x1d, 0x28, 0x04, 0xdb, 0xda, 0x42, 0xd8, 0xca, 0xb0, 0x3b, 0xef, 0x5c, 0x03, 0xc0, 0x42, 0xbb, 0xef, 0xdc, 0x07, 0x97, 0xc9, 0xdb, 0x84, 0x0f, 0x64, 0x99, 0xe7, 0xb0, 0x61, 0x0e, 0x66, 0x71, 0xe7, 0xd1, 0x9b, 0x52, 0x0c, 0xf7, 0x52, 0xd1, 0x1f, 0x90, 0x1e, 0xd7, 0xfc, 0x39, 0xa3, 0xcf, 0x2e, 0x70, 0xec, 0x27, 0x4f, 0x89, 0xde, 0x88, 0xca, 0xd9, 0x01, 0xfa, 0x5c, 0xf6, 0x96, 0x14, 0x5e, 0xad, 0x60, 0x0c, 0x80, 0x23, 0x03, 0x96, 0x63, 0x5e, 0xb3, 0xa2, 0x4f, 0x00, 0x6c, 0xb3, 0xe9, 0x26, 0x8e, 0x46, 0x36, 0x2e, 0x22, 0x15, 0x67, 0x46, 0x98, 0xb8, 0x9f, 0xef, 0x7d, 0x03, 0xd3, 0xb7, 0xca, 0x76, 0x46, 0xb7, 0x87, 0xd5, 0xb5, 0x7f, 0x30, 0x8f, 0x38, 0x55, 0x58, 0x75, 0xe3, 0x9a, 0xcd, 0xb6, 0xa4, 0x8f, 0x7f, 0x43, 0x41, 0xb6, 0x0e, 0x49, 0x1b, 0xeb, 0xfc, 0x84, 0xee, 0x1d, 0x0d, 0x62, 0x6c, 0x36, 0x3d, 0x80, 0x21, 0x54, 0x08, 0x1d, 0xb6, 0x50, 0xe9, 0x99, 0xc1, 0x7b, 0x71, 0x6a, 0x19, 0x39, 0xb7, 0xc8, 0x28, 0xc8, 0x4b, 0xa5, 0xbc, 0x4b, 0xf4, 0x62, 0xcf, 0xcd, 0xad, 0x17, 0x2b, 0x6e, 0xc9, 0xe1, 0xc6, 0xfa, 0x34, 0x60, 0x7d, 0xae, 0xfc, 0xe5, 0xf5, 0xa1, 0x9d, 0xf6, 0x54, 0x23, 0x6a, 0x3d, 0xaf, 0xd9, 0xad, 0x3d, 0xe9, 0x9d, 0x83, 0x7a, 0xd9, 0x93, 0xbe, 0xea, 0x8b, 0x81, 0x3c, 0xb5, 0xef, 0x04, 0x58, 0x7a, 0x6d, 0xb0, 0xef, 0xf2, 0x26, 0x82, 0xfe, 0xe0, 0x45, 0x9c, 0x19, 0xdc, 0x48, 0x17, 0x0e, 0x1d, 0xe8, 0x9a, 0x83, 0x5e, 0xde, 0x1e, 0x46, 0xfb, 0xda, 0x9d, 0xf4, 0xb6, 0xb4, 0x87, 0x85, 0xbb, 0x28, 0xec, 0x76, 0x7a, 0x9c, 0x21, 0xa4, 0x45, 0x4f, 0x67, 0xd4, 0x5a, 0xf0, 0x38, 0xbb, 0x9a, 0xc0, 0x48, 0x27, 0x01, 0xf9, 0x80, 0xd1, 0xbc, 0x4a, 0x34, 0x79, 0xaa, 0x2e, 0xa8, 0xa1, 0x57, 0x50, 0x17, 0x74, 0x6a, 0x98, 0xf4, 0x42, 0xa0, 0x6f, 0x24, 0xdf, 0x58, 0x78, 0x93, 0x5c, 0x4a, 0x87, 0x69, 0xc4, 0x28, 0xc7, 0xfb, 0x5f, 0xfd, 0x0f, 0x75, 0xe5, 0xc3, 0xaf, 0xd6, 0x82, 0x2f, 0x91, 0xc3, 0xf5, 0xf4, 0x55, 0x03, 0xd7, 0xbe, 0x5a, 0x0e, 0xa1, 0x03, 0x4c, 0x12, 0x47, 0x99, 0x1c, 0x0e, 0xfd, 0x45, 0x72, 0xd8, 0xfc, 0x17, 0xc8, 0xc1, 0x21, 0x0c, 0xe9, 0xd5, 0xa5, 0xd7, 0xb8, 0x76, 0xb0, 0x53, 0x21, 0x7a, 0x86, 0xcb, 0x22, 0x67, 0xf3, 0x57, 0xff, 0x23, 0x59, 0xe0, 0xea, 0xc0, 0x7c, 0x93, 0x3c, 0x2c, 0x78, 0x8d, 0x95, 0x2f, 0x0d, 0x97, 0x8a, 0xbf, 0xf7, 0x16, 0xa9, 0x60, 0x5b, 0x75, 0x7a, 0x26, 0x9b, 0x81, 0xf4, 0x55, 0x7f, 0x3a, 0x99, 0xaf, 0xca, 0xc6, 0x31, 0x4c, 0x36, 0xf9, 0x28, 0x9b, 0x43, 0xa4, 0x23, 0x45, 0x48, 0x77, 0x22, 0xf4, 0x16, 0x93, 0xcd, 0xd1, 0x7c, 0x55, 0x36, 0x0e, 0x94, 0x4d, 0xbe, 0x2a, 0x1b, 0xc7, 0x97, 0xc9, 0xe6, 0x45, 0x1f, 0xe4, 0xab, 0xb2, 0x71, 0xf0, 0x10, 0xca, 0x46, 0x0d, 0xbd, 0x72, 0xe7, 0x5a, 0x07, 0xf8, 0x1d, 0xf9, 0x5c, 0x36, 0x98, 0x5e, 0xed, 0xbe, 0x45, 0x36, 0x8b, 0xb8, 0x6c, 0xd2, 0xc4, 0x9b, 0xa4, 0xb3, 0xe5, 0xab, 0xff, 0x71, 0xe9, 0xfc, 0xe9, 0x12, 0xda, 0xd1, 0xd7, 0xbe, 0x5a, 0x42, 0xa3, 0xd8, 0xfe, 0x9c, 0x27, 0xfb, 0xd8, 0x9d, 0x9d, 0xb8, 0x2c, 0x7d, 0xa6, 0x8e, 0xee, 0x9b, 0xfe, 0xcb, 0x62, 0xef, 0x73, 0x8a, 0x8d, 0x85, 0x76, 0x60, 0xc8, 0x84, 0xd4, 0xa0, 0xc3, 0x59, 0xdc, 0x7a, 0x92, 0xde, 0x89, 0xd6, 0x5d, 0x4a, 0x77, 0xa6, 0x92, 0x2d, 0x36, 0xba, 0xbf, 0x0f, 0x76, 0xfc, 0xd9, 0xdc, 0x13, 0xa1, 0x10, 0x7f, 0xd3, 0x24, 0x88, 0xdf, 0x47, 0xe7, 0xce, 0x70, 0xbb, 0x2c, 0x4c, 0x04, 0x23, 0x7d, 0x09, 0xc8, 0x3e, 0x20, 0x41, 0x42, 0x92, 0xca, 0xe5, 0x35, 0xef, 0xb7, 0x97, 0x80, 0x2e, 0x0f, 0x73, 0x25, 0x4a, 0x30, 0x6a, 0xcb, 0x92, 0x78, 0x9c, 0xe3, 0xcc, 0xcc, 0x0f, 0xa0, 0xd4, 0x0d, 0x68, 0xef, 0xcd, 0xf8, 0xb3, 0x22, 0xa7, 0x5d, 0x99, 0x06, 0x77, 0x8c, 0xca, 0x89, 0xce, 0x6f, 0x9a, 0xe7, 0x8d, 0x91, 0x2d, 0x5d, 0xdf, 0x07, 0x73, 0xbd, 0xb1, 0xea, 0xed, 0x4c, 0x03, 0xe3, 0xbc, 0x5d, 0x82, 0xd1, 0xfb, 0x94, 0x04, 0x2c, 0xc9, 0x2c, 0x81, 0x6d, 0x21, 0xc6, 0xa6, 0x33, 0x3e, 0x1e, 0xf4, 0xc6, 0xbb, 0x90, 0x47, 0x9f, 0x9c, 0xac, 0xa6, 0x4d, 0xc7, 0x34, 0xf2, 0x98, 0xe2, 0xa2, 0x65, 0xa5, 0x39, 0x0a, 0x75, 0xbd, 0xe2, 0x8b, 0xde, 0x18, 0xc5, 0xba, 0xef, 0x29, 0xc5, 0x2c, 0x98, 0x18, 0x47, 0x3a, 0x2f, 0x19, 0x40, 0xa7, 0x1b, 0x50, 0x2c, 0xf4, 0xac, 0x1c, 0xcb, 0x33, 0xd2, 0xdb, 0x58, 0xf1, 0xe9, 0x99, 0x58, 0x87, 0xf1, 0xdf, 0x27, 0x21, 0x8a, 0x96, 0xcc, 0x0c, 0x5d, 0xef, 0xf8, 0x26, 0x30, 0xeb, 0x7a, 0xb5, 0x19, 0xc8, 0xd6, 0x8f, 0x3e, 0x3d, 0xdc, 0x95, 0xc7, 0xbf, 0xd3, 0xe2, 0x7f, 0xd2, 0xfd, 0x82, 0x7a, 0x36, 0x12, 0xcd, 0x48, 0x34, 0x7b, 0xea, 0x89, 0x1e, 0x8c, 0x65, 0x58, 0x2f, 0x17, 0x9d, 0xa0, 0x14, 0x9b, 0x71, 0x72, 0x90, 0x02, 0xd3, 0x8c, 0xba, 0x6b, 0xe3, 0xe9, 0xcd, 0xd1, 0x2f, 0x74, 0x03, 0xe3, 0x4b, 0x75, 0xbd, 0xc8, 0x71, 0x07, 0xaf, 0xb9, 0xfd, 0x2c, 0x86, 0x17, 0x8b, 0x01, 0x09, 0x46, 0x6e, 0x1f, 0x94, 0x06, 0xbb, 0x9b, 0x15, 0xab, 0xb6, 0xa5, 0x56, 0x02, 0xda, 0x21, 0x67, 0xdb, 0xa9, 0x90, 0x3d, 0xf0, 0xf2, 0xb6, 0x8f, 0x1c, 0x50, 0x4c, 0xac, 0x85, 0x47, 0x78, 0x2e, 0x4d, 0xb2, 0x13, 0x16, 0xeb, 0x8a, 0x21, 0x91, 0xbd, 0x9b, 0x8b, 0x65, 0x29, 0xc9, 0xf4, 0x2d, 0x58, 0xd6, 0x66, 0x3d, 0xc6, 0x86, 0x72, 0xd5, 0x0b, 0x71, 0xe4, 0x31, 0xb8, 0x9f, 0xa3, 0x53, 0x2a, 0xbc, 0x21, 0xae, 0x27, 0xde, 0x35, 0x4a, 0x71, 0xaa, 0x2b, 0x7d, 0x0e, 0xf5, 0xb2, 0x17, 0x7b, 0x5d, 0xc9, 0xc4, 0x5e, 0x3c, 0xa2, 0xb6, 0x93, 0xd5, 0xf7, 0xce, 0x78, 0x6c, 0x4d, 0xa2, 0xae, 0xd8, 0xbb, 0x03, 0xe7, 0x2e, 0xd3, 0xf8, 0xc5, 0xba, 0x3c, 0xf2, 0x67, 0x46, 0x9d, 0xc2, 0x96, 0x24, 0xe1, 0x6f, 0x6d, 0xe5, 0x2b, 0x60, 0x75, 0x3f, 0x47, 0x36, 0x9c, 0xce, 0xbe, 0x20, 0x9e, 0x1a, 0xbf, 0x8c, 0x89, 0x90, 0xb8, 0x19, 0x35, 0x6a, 0xf7, 0xd3, 0xad, 0xfa, 0x74, 0xa3, 0xf7, 0x29, 0xd4, 0x34, 0x4b, 0x86, 0x1b, 0xb9, 0x46, 0xe7, 0xf9, 0xa4, 0x9d, 0xc8, 0xe9, 0x28, 0xfa, 0x18, 0x57, 0x11, 0x6b, 0xdf, 0x80, 0x9a, 0x47, 0xa7, 0x35, 0x6d, 0x80, 0x65, 0x09, 0x42, 0x86, 0xae, 0x8f, 0x5a, 0x67, 0xfa, 0x3e, 0xc5, 0xc1, 0x26, 0x1e, 0x46, 0x6e, 0x76, 0xe4, 0x66, 0x0b, 0xc4, 0x9d, 0x7b, 0xb5, 0xb8, 0xf8, 0x64, 0x07, 0xcc, 0xe4, 0x5c, 0x3e, 0xae, 0x10, 0x1c, 0x4e, 0xfb, 0xf9, 0x8a, 0x54, 0x4c, 0x3f, 0x80, 0xb9, 0x75, 0x11, 0xed, 0xdc, 0x9d, 0xa4, 0x9a, 0x49, 0xec, 0x7c, 0xef, 0x2d, 0x6b, 0xf6, 0x3e, 0xd5, 0xbc, 0x8a, 0x63, 0xdf, 0xdf, 0xff, 0xfc, 0xb7, 0xfe, 0x15, 0xeb, 0x54, 0x5d, 0x62, 0x3f, 0x89, 0x6b, 0xea, 0x81, 0xea, 0xe2, 0x25, 0xa9, 0x6a, 0x2f, 0xa8, 0x25, 0x62, 0xbe, 0x14, 0xac, 0x55, 0xbe, 0xbc, 0x68, 0xc5, 0x4c, 0xad, 0xf4, 0xe1, 0x25, 0xed, 0x66, 0xdf, 0x88, 0x5a, 0x96, 0x22, 0x54, 0x48, 0x70, 0x47, 0x6f, 0xd9, 0x65, 0x3d, 0x10, 0x1d, 0xce, 0x68, 0xf6, 0xe7, 0x59, 0x8a, 0xfc, 0x8a, 0x28, 0x68, 0x75, 0xb8, 0xa3, 0x3b, 0x00, 0x5a, 0xc9, 0xbf, 0xa2, 0x72, 0x8b, 0xb0, 0xdc, 0xf7, 0x22, 0x03, 0xaa, 0xb7, 0x86, 0xde, 0x00, 0x8d, 0xda, 0x41, 0xc9, 0x55, 0x5d, 0x84, 0x42, 0x2e, 0x3d, 0x3a, 0x6b, 0x6b, 0x03, 0x49, 0x2f, 0xd4, 0x9a, 0x4c, 0xdf, 0x6e, 0x91, 0xb2, 0xd4, 0xfb, 0x8c, 0xb6, 0x13, 0xa1, 0xe7, 0x43, 0xa4, 0x9d, 0x3a, 0x8f, 0x68, 0x44, 0x88, 0xbd, 0x10, 0x6f, 0xbf, 0x1d, 0xbf, 0x48, 0x5f, 0x86, 0x3b, 0x1d, 0x86, 0xca, 0xfb, 0x0e, 0x5c, 0x29, 0xc5, 0xd3, 0x5b, 0x86, 0xe6, 0xff, 0x13, 0xf2, 0x4e, 0x3c, 0x3f, 0x44, 0xde, 0x7c, 0xa5, 0x31, 0x4c, 0xe2, 0xb6, 0xd3, 0x24, 0xf1, 0xa8, 0x64, 0x4e, 0xde, 0x4e, 0xf6, 0x89, 0x5b, 0x51, 0xd3, 0xf7, 0xca, 0xf2, 0xd7, 0x92, 0xfd, 0xf3, 0x24, 0x7b, 0x2e, 0x73, 0xad, 0x07, 0x50, 0xf6, 0x93, 0xa2, 0xf5, 0xa9, 0xb9, 0x59, 0xf6, 0x58, 0x83, 0xf7, 0x86, 0xd4, 0x60, 0xde, 0xe0, 0x73, 0x85, 0x9b, 0x25, 0x45, 0x6f, 0xcf, 0x8d, 0xcc, 0x91, 0x41, 0x6f, 0xba, 0x49, 0x52, 0xab, 0xa8, 0xae, 0x32, 0xae, 0x46, 0x2c, 0xaf, 0x2d, 0x41, 0x3a, 0x53, 0xa7, 0x66, 0xef, 0xd0, 0x02, 0x9d, 0xe2, 0xb9, 0xc7, 0x3b, 0x75, 0x7d, 0xb4, 0x56, 0xb5, 0xee, 0x26, 0x8e, 0xc8, 0xeb, 0x8a, 0x30, 0x8e, 0xa7, 0x04, 0x9e, 0x74, 0x6f, 0xa6, 0x67, 0x37, 0x6a, 0xab, 0x99, 0x17, 0xce, 0xde, 0x4d, 0x25, 0xdb, 0x13, 0xb5, 0x17, 0x98, 0xb3, 0x03, 0x73, 0xed, 0x19, 0xd6, 0x1f, 0x10, 0xa9, 0xd3, 0x7a, 0x44, 0x30, 0xde, 0xdc, 0x27, 0xe1, 0x0e, 0x5d, 0x04, 0xe7, 0xb4, 0x53, 0x9a, 0x94, 0xb4, 0x16, 0x8e, 0xf1, 0x0d, 0xf6, 0xd2, 0xfb, 0xfb, 0x8b, 0xd7, 0x1c, 0x67, 0xb2, 0xda, 0xf9, 0x54, 0xab, 0x3e, 0xd5, 0xf0, 0x0b, 0xb4, 0xd8, 0xf8, 0xb3, 0x3f, 0xbf, 0x46, 0xd4, 0xa3, 0x5c, 0xde, 0x1d, 0x94, 0x4b, 0xe2, 0x74, 0x36, 0x56, 0xad, 0xd8, 0x3f, 0xd8, 0x8b, 0x12, 0xc4, 0x1d, 0x8c, 0xf6, 0x13, 0x6b, 0xcf, 0x08, 0x9c, 0x8b, 0x12, 0x71, 0xbd, 0x1e, 0xf3, 0xcc, 0x60, 0xdb, 0xe1, 0xc3, 0xe1, 0x6d, 0x1f, 0xb1, 0x97, 0xd3, 0x8e, 0xb9, 0xfa, 0x97, 0xb5, 0x7d, 0x68, 0x9b, 0x91, 0x4b, 0x10, 0x39, 0x74, 0xad, 0x98, 0x89, 0x75, 0x70, 0x2e, 0x11, 0x86, 0xd5, 0x01, 0xe7, 0x86, 0x31, 0xb8, 0x4e, 0x89, 0x31, 0x47, 0xeb, 0xb0, 0x90, 0xa7, 0xfb, 0xd0, 0x4e, 0x7d, 0x5c, 0x31, 0x3e, 0x44, 0x72, 0x10, 0x54, 0x7d, 0x69, 0xc5, 0xf5, 0xcf, 0x98, 0xc5, 0xb4, 0x0e, 0x1f, 0x53, 0x27, 0x30, 0x1d, 0xc5, 0x51, 0x65, 0xfb, 0x75, 0xf8, 0xf9, 0xd0, 0xfb, 0x28, 0x01, 0xfc, 0x25, 0xa2, 0x7c, 0x13, 0x50, 0x47, 0x12, 0x49, 0x4f, 0x86, 0x96, 0x63, 0xb9, 0x8a, 0x79, 0xb2, 0x34, 0x3d, 0xa1, 0x11, 0xea, 0x7d, 0x6a, 0x49, 0xca, 0x2e, 0xa4, 0x6a, 0xb6, 0x4d, 0xa0, 0x19, 0xc0, 0x4a, 0xf3, 0x25, 0xce, 0x9d, 0x76, 0xb1, 0x80, 0x5d, 0x73, 0xbc, 0x4f, 0xc9, 0x89, 0xde, 0xb5, 0x4b, 0x2c, 0x83, 0xa9, 0xbf, 0x44, 0x6a, 0x31, 0x19, 0x7b, 0x22, 0x71, 0xe3, 0xda, 0x9d, 0x94, 0x73, 0x48, 0xda, 0x04, 0x17, 0xd8, 0x49, 0xc3, 0x70, 0x5e, 0x4a, 0x6c, 0x35, 0x21, 0x3e, 0x11, 0xec, 0x5e, 0xa4, 0x59, 0xc2, 0xe6, 0xe2, 0xc1, 0x91, 0xcc, 0xe7, 0xf3, 0xaf, 0x98, 0xcd, 0x51, 0x63, 0x62, 0x2c, 0x6c, 0x36, 0x0f, 0xdc, 0x6e, 0x36, 0x47, 0x4d, 0xbd, 0x7a, 0xeb, 0x4c, 0x3e, 0x3a, 0x07, 0x5b, 0x48, 0xdf, 0xb0, 0x99, 0xce, 0xe7, 0xef, 0xd8, 0x53, 0x37, 0xcd, 0xdf, 0xe9, 0x83, 0xf3, 0xb7, 0xe9, 0xda, 0x9f, 0x9f, 0xbf, 0x6d, 0xe7, 0xb0, 0xa7, 0x06, 0xb4, 0xf9, 0xdb, 0xbc, 0x05, 0x63, 0xab, 0x89, 0x0f, 0x6a, 0x07, 0x9b, 0xc3, 0x62, 0x0b, 0xb4, 0xf9, 0xdb, 0xbc, 0x1a, 0xd3, 0xea, 0x86, 0xce, 0xdf, 0xb0, 0xf7, 0x76, 0xf3, 0xb7, 0x6d, 0xc3, 0xed, 0xe7, 0x6f, 0x93, 0xfc, 0xd5, 0xf3, 0x77, 0xdc, 0x54, 0xb2, 0x90, 0xa3, 0x83, 0xff, 0xb1, 0xf9, 0x9b, 0xcf, 0xa2, 0x7c, 0xfe, 0x36, 0xf7, 0xf0, 0x9a, 0x8f, 0x16, 0x30, 0xbc, 0x03, 0x61, 0x27, 0xce, 0x7c, 0x66, 0x3e, 0xfb, 0x0d, 0xda, 0x11, 0xde, 0x4f, 0x82, 0x8b, 0xbe, 0xfe, 0x35, 0xb7, 0xf3, 0xf5, 0xfd, 0xcb, 0xec, 0x56, 0x3b, 0x4c, 0x51, 0xac, 0x43, 0xbf, 0x03, 0x86, 0x3f, 0xc9, 0x6d, 0x1f, 0xd2, 0x97, 0xf1, 0xd1, 0xbe, 0xa4, 0xf9, 0x7e, 0xac, 0x04, 0x06, 0x27, 0xed, 0xe9, 0xf6, 0x7c, 0x0e, 0x31, 0x88, 0xef, 0xc1, 0xb2, 0x52, 0xd2, 0x9d, 0xd4, 0x7b, 0x54, 0x9a, 0x56, 0x56, 0x48, 0x2d, 0x8b, 0xf0, 0x74, 0x17, 0x73, 0x66, 0xb7, 0x36, 0x7e, 0x47, 0x2d, 0x8a, 0xca, 0x2c, 0xe9, 0xae, 0x42, 0x98, 0x22, 0xd5, 0xc8, 0x29, 0x52, 0xba, 0x54, 0x29, 0x27, 0xa1, 0xed, 0xba, 0x26, 0x9f, 0x14, 0x13, 0x11, 0x3b, 0x55, 0x9a, 0x2e, 0x9b, 0x5c, 0xbf, 0x85, 0x24, 0x29, 0x99, 0x6c, 0xe9, 0x49, 0x3d, 0xf2, 0xd5, 0xa9, 0xbb, 0x00, 0xe8, 0xfc, 0x3a, 0xa3, 0xf6, 0xdc, 0x9f, 0xbe, 0x51, 0xf8, 0x7e, 0x58, 0x34, 0xdd, 0x25, 0x48, 0x56, 0xd9, 0xc8, 0xd7, 0xb7, 0xea, 0xfa, 0xd1, 0xfc, 0xc6, 0x00, 0x96, 0xbb, 0x56, 0xb6, 0x64, 0xec, 0xcb, 0xc2, 0x3f, 0x7f, 0x04, 0x7d, 0x50, 0xf4, 0x03, 0x6c, 0x98, 0xaa, 0xca, 0xe1, 0x7e, 0x30, 0x9f, 0xeb, 0xd4, 0xea, 0x15, 0x7f, 0x10, 0x35, 0xe0, 0x43, 0xae, 0xaf, 0xa0, 0xd7, 0x68, 0x68, 0x54, 0xed, 0xdc, 0x47, 0x92, 0x50, 0xcc, 0x0c, 0xee, 0x90, 0x4b, 0x35, 0x0f, 0x62, 0xa8, 0x1f, 0x12, 0x8f, 0x96, 0x28, 0x76, 0x2b, 0xfa, 0x0a, 0x3d, 0xd8, 0x0a, 0xfa, 0x36, 0xd2, 0xcb, 0x12, 0x18, 0x45, 0xde, 0xdf, 0xae, 0x5e, 0x30, 0xbe, 0x3e, 0x00, 0xdb, 0x5e, 0xf7, 0xd0, 0x59, 0x97, 0x82, 0x5d, 0xa1, 0x3b, 0x49, 0xeb, 0x06, 0x7b, 0xa1, 0xd9, 0x28, 0xb8, 0xc4, 0x84, 0x2f, 0xeb, 0x89, 0x2f, 0x1b, 0x53, 0x10, 0xc2, 0x39, 0x76, 0x37, 0xf6, 0xc4, 0xf2, 0xd4, 0x50, 0x56, 0x68, 0x0a, 0x8e, 0x28, 0xde, 0x0b, 0x34, 0xb6, 0x68, 0x04, 0x69, 0xba, 0x36, 0xf2, 0x32, 0xd6, 0xcc, 0x24, 0x57, 0x96, 0xf5, 0x80, 0x3d, 0x30, 0x53, 0x48, 0x91, 0x2d, 0x74, 0x0f, 0x97, 0x7c, 0x22, 0xd1, 0x49, 0xe3, 0x47, 0x6b, 0xff, 0x48, 0x6c, 0xbf, 0xe9, 0x43, 0x39, 0x9d, 0x7b, 0x6c, 0x65, 0xa8, 0x75, 0x9a, 0xd7, 0x36, 0xef, 0x22, 0x4c, 0xa3, 0x11, 0xa2, 0x69, 0xa1, 0x10, 0x27, 0x9a, 0x30, 0x7f, 0x44, 0x34, 0xab, 0x73, 0xfe, 0x55, 0xcd, 0x12, 0x9c, 0x75, 0x06, 0x75, 0x12, 0x5c, 0x1b, 0x8b, 0xb5, 0x32, 0xa5, 0x3a, 0x25, 0x33, 0xe9, 0x1e, 0xdf, 0x2b, 0xa1, 0xe9, 0x5e, 0xd4, 0x7b, 0xc0, 0x11, 0x1e, 0xad, 0xa1, 0x17, 0x4b, 0x6e, 0x40, 0x99, 0x9d, 0x4a, 0x65, 0xb2, 0x34, 0x64, 0xec, 0xec, 0xc2, 0x11, 0x9c, 0xc2, 0xc6, 0x31, 0xc0, 0x41, 0x1a, 0x69, 0x23, 0xd3, 0x91, 0xc6, 0x49, 0x5f, 0x96, 0x61, 0xe3, 0xf0, 0xc3, 0x3c, 0x10, 0x74, 0xd1, 0x9a, 0x5b, 0x30, 0x2d, 0x8d, 0xbe, 0x17, 0xa5, 0x69, 0x16, 0xf3, 0x57, 0xe3, 0x55, 0xdb, 0xff, 0xb4, 0xe6, 0x6f, 0xca, 0x89, 0x2e, 0x94, 0x81, 0x7f, 0xa6, 0x77, 0xb3, 0x7c, 0x96, 0x9e, 0xe1, 0x6b, 0x77, 0x70, 0xb4, 0x71, 0x39, 0x1e, 0x57, 0x94, 0x34, 0x2e, 0x63, 0x5e, 0x40, 0x9e, 0x27, 0xa3, 0xb6, 0x08, 0x6b, 0x64, 0xc5, 0x11, 0x15, 0x73, 0x40, 0x2e, 0xe0, 0x31, 0xad, 0x5f, 0x53, 0x33, 0xc0, 0x8c, 0x23, 0xb4, 0x40, 0x34, 0x09, 0x69, 0x88, 0xf5, 0xd2, 0x9d, 0x67, 0x9a, 0x7f, 0x15, 0xac, 0x93, 0x75, 0x39, 0xe6, 0xd8, 0x20, 0xa3, 0x65, 0x37, 0xe6, 0x88, 0xdd, 0x18, 0x46, 0xfb, 0x35, 0xf2, 0x9a, 0x36, 0x3a, 0xc6, 0x69, 0x2b, 0x20, 0x5d, 0xfa, 0x4a, 0x1a, 0x43, 0x99, 0xb8, 0x6a, 0xfa, 0x97, 0xcb, 0xa4, 0xef, 0xac, 0x8f, 0x7b, 0xfd, 0xb1, 0xa9, 0x5c, 0xd2, 0x33, 0xbd, 0x36, 0x65, 0x05, 0x6a, 0xc6, 0x54, 0xf9, 0x7a, 0x75, 0xe7, 0x73, 0xef, 0x08, 0x66, 0x9a, 0xe7, 0x61, 0x6c, 0xab, 0xde, 0x3f, 0x96, 0x53, 0x0a, 0x65, 0x81, 0x58, 0x3e, 0x73, 0x25, 0x84, 0x85, 0x99, 0x39, 0x20, 0x9a, 0xe9, 0x2d, 0x8a, 0x9f, 0x79, 0x12, 0xd8, 0xde, 0x47, 0x5f, 0x67, 0x16, 0xeb, 0xdf, 0x7f, 0xe9, 0xe5, 0xe7, 0x77, 0x16, 0x61, 0x09, 0x19, 0x1e, 0x7f, 0xec, 0x1b, 0xdf, 0x91, 0xad, 0x24, 0x81, 0x4c, 0x1a, 0x01, 0xcf, 0x8a, 0x49, 0xc2, 0x18, 0x05, 0xb5, 0x47, 0xa4, 0xbd, 0xbf, 0x96, 0xa8, 0x75, 0x45, 0x3e, 0xba, 0x64, 0xb5, 0x87, 0x53, 0xac, 0x3f, 0xa0, 0x67, 0x10, 0x90, 0xa0, 0xd8, 0x59, 0xc8, 0x80, 0x21, 0xb2, 0xc5, 0xd6, 0xa8, 0x7d, 0xbc, 0xc4, 0xfa, 0x95, 0xea, 0x8b, 0x2b, 0x7a, 0xd2, 0x65, 0xf9, 0x5a, 0x75, 0xe7, 0xeb, 0xef, 0xc8, 0x93, 0x7c, 0xdf, 0x66, 0x67, 0x7f, 0xb2, 0x9e, 0x1a, 0x21, 0xa2, 0x3c, 0x56, 0x61, 0x4f, 0x6d, 0xcd, 0xa4, 0xb1, 0x7e, 0x54, 0x7d, 0xae, 0xc2, 0x39, 0xec, 0x78, 0xee, 0x9d, 0x34, 0xf3, 0x90, 0x56, 0xfd, 0x3d, 0xb5, 0xca, 0x76, 0x20, 0x75, 0x26, 0xfb, 0x1e, 0xe1, 0x91, 0xc8, 0x40, 0x56, 0x9c, 0xef, 0xdb, 0x83, 0x77, 0x0c, 0x47, 0xa0, 0x44, 0x8d, 0x59, 0xec, 0x5c, 0x4e, 0xcc, 0x61, 0xbb, 0x1f, 0xee, 0xc0, 0xfa, 0x1a, 0x79, 0x3a, 0x59, 0x5f, 0x25, 0x87, 0xa8, 0x2c, 0x57, 0x90, 0xca, 0x2c, 0x67, 0x71, 0xaa, 0x22, 0xf5, 0xf4, 0x4b, 0xdd, 0x63, 0xea, 0x6a, 0xa5, 0xdb, 0xfa, 0x06, 0xe9, 0x06, 0x6c, 0xdb, 0x65, 0x55, 0x20, 0x32, 0x7d, 0x48, 0x7d, 0xec, 0xd4, 0x16, 0xa6, 0x47, 0xda, 0x1c, 0x60, 0x12, 0x46, 0xa4, 0xc6, 0xa6, 0x99, 0xb0, 0x0f, 0xfb, 0x98, 0x7d, 0xe9, 0x1d, 0xb4, 0x70, 0x7e, 0xa0, 0x53, 0x4f, 0x51, 0xeb, 0xc7, 0x2e, 0x31, 0xd1, 0x29, 0xa8, 0xa2, 0x7a, 0xdf, 0xd3, 0xbd, 0x01, 0x53, 0x36, 0xde, 0xb7, 0x92, 0xc2, 0x88, 0x35, 0x79, 0x31, 0x4d, 0x39, 0x8f, 0xeb, 0x60, 0xb2, 0x65, 0x16, 0x3a, 0xdb, 0xd6, 0xbd, 0x65, 0xf8, 0x3f, 0xc2, 0x49, 0xc6, 0x34, 0x66, 0xdd, 0xce, 0xf6, 0xce, 0xbc, 0x04, 0x3a, 0xc1, 0xe5, 0xbf, 0x27, 0x18, 0xf1, 0xb9, 0x93, 0x4e, 0xce, 0xa7, 0x7d, 0x23, 0xfa, 0xe0, 0xd8, 0xc4, 0xb5, 0xc8, 0x81, 0x9f, 0x87, 0x14, 0x12, 0xe6, 0xd8, 0x32, 0xe0, 0x0e, 0x9a, 0x23, 0x24, 0x13, 0xbf, 0x6b, 0xed, 0xf9, 0xc4, 0x1f, 0x4e, 0x02, 0xb2, 0x8b, 0x79, 0xb8, 0xc6, 0xcf, 0xc1, 0xd0, 0x81, 0x01, 0x18, 0x69, 0xb3, 0xef, 0x2e, 0x04, 0x03, 0x7b, 0x73, 0xe9, 0x8f, 0x8a, 0x59, 0x4a, 0x25, 0x6f, 0xe3, 0xbd, 0xd4, 0xe3, 0xce, 0x03, 0x1d, 0xb1, 0x11, 0x94, 0xed, 0x87, 0x6b, 0x07, 0xc0, 0xe3, 0x71, 0x2d, 0x72, 0x39, 0x74, 0x1f, 0x7b, 0x2a, 0xce, 0x18, 0xd8, 0x3a, 0x5d, 0xc4, 0xe9, 0x3e, 0xb5, 0x70, 0xb5, 0xb8, 0x4a, 0x32, 0x87, 0x20, 0x56, 0xd1, 0x7b, 0x5c, 0x5d, 0xba, 0x65, 0x96, 0xb3, 0xdf, 0xe9, 0xd2, 0xb5, 0x18, 0xcd, 0x6b, 0x21, 0xc6, 0x86, 0x56, 0x19, 0xd8, 0x3d, 0x0f, 0x70, 0x16, 0xa9, 0x35, 0xd0, 0xb3, 0x1a, 0x9c, 0x0d, 0xdb, 0xee, 0xea, 0xb2, 0xcb, 0x42, 0x00, 0x12, 0x40, 0x4c, 0xb0, 0xdd, 0x25, 0xc1, 0x91, 0xdd, 0x89, 0x40, 0x9a, 0x79, 0xe4, 0xb5, 0x5d, 0x20, 0x9b, 0xb1, 0x67, 0x2f, 0x6b, 0xf7, 0x04, 0x0c, 0xb1, 0xdc, 0x77, 0xe1, 0x96, 0xe1, 0xc7, 0x9f, 0xd3, 0xc9, 0xb1, 0xca, 0x0a, 0xec, 0xa3, 0x73, 0xf4, 0x25, 0xf6, 0xdd, 0x89, 0xc3, 0xad, 0x74, 0xdc, 0xd8, 0x82, 0x42, 0x5d, 0xe1, 0xd4, 0x42, 0xdd, 0x56, 0x76, 0xe6, 0x10, 0xf6, 0xdc, 0x6e, 0xd2, 0xd3, 0xdd, 0xaa, 0x5e, 0x38, 0x9c, 0x30, 0x21, 0x8c, 0x38, 0xe6, 0x97, 0xef, 0x42, 0x7a, 0xf3, 0x15, 0xa9, 0xd0, 0x1b, 0x5a, 0xea, 0x90, 0xb3, 0x4c, 0xd8, 0xd3, 0xa3, 0xce, 0x12, 0x7d, 0x6d, 0xf1, 0x9e, 0x12, 0x59, 0x5b, 0x45, 0x3a, 0xaa, 0xd0, 0xba, 0x98, 0x0f, 0x23, 0xc7, 0x81, 0x15, 0x20, 0xee, 0x92, 0xe2, 0x91, 0x5a, 0xaf, 0x84, 0xbc, 0x21, 0xcd, 0xa6, 0xf9, 0x43, 0x8c, 0x57, 0xa2, 0xf0, 0x10, 0xe5, 0x4d, 0xc7, 0xda, 0xa4, 0xda, 0x65, 0x4b, 0x40, 0xe8, 0x5e, 0xd3, 0xf5, 0x54, 0xf3, 0x58, 0xd1, 0x16, 0x1c, 0x77, 0xee, 0x3b, 0x8d, 0xc9, 0xbe, 0x10, 0xc6, 0xe8, 0x3c, 0xc0, 0x6b, 0x64, 0xe9, 0x77, 0xdb, 0xe4, 0x53, 0xd8, 0x3e, 0x07, 0xda, 0xc8, 0xcc, 0x54, 0xd8, 0x48, 0xa7, 0xe1, 0xda, 0xd3, 0x74, 0x97, 0xd6, 0x73, 0x4e, 0x1f, 0xaf, 0x4f, 0x77, 0x64, 0x00, 0xf9, 0xbd, 0x30, 0xce, 0xf0, 0xd4, 0xf8, 0xa7, 0x32, 0x68, 0xa7, 0xcb, 0xb6, 0xdd, 0x29, 0x54, 0xa6, 0x2e, 0x5e, 0xdd, 0xab, 0xc4, 0xa4, 0x91, 0x05, 0x5c, 0x1e, 0xf2, 0xf4, 0x2c, 0xe0, 0xe5, 0xbf, 0x19, 0x5a, 0x96, 0x43, 0x67, 0xeb, 0x8d, 0x3a, 0xfb, 0x66, 0xa8, 0x39, 0x23, 0x35, 0xf6, 0x2b, 0x79, 0xbf, 0x45, 0xbc, 0x71, 0x64, 0x3d, 0x43, 0x4f, 0x9c, 0x32, 0x63, 0x9f, 0x19, 0x18, 0x75, 0xd6, 0x73, 0xe8, 0x76, 0x52, 0x8d, 0x3d, 0x8c, 0x14, 0xe7, 0xe4, 0xc5, 0xb7, 0xca, 0xd6, 0xbb, 0x4e, 0xc9, 0x18, 0x94, 0x5c, 0xf5, 0xba, 0xda, 0xe2, 0xbd, 0xc5, 0xf2, 0xa5, 0x41, 0x69, 0x63, 0xde, 0x67, 0x56, 0x00, 0x49, 0x4f, 0x3c, 0xf1, 0x65, 0x7d, 0x10, 0x4b, 0xef, 0xce, 0x3c, 0x2d, 0x5b, 0xd0, 0x8b, 0xad, 0xe2, 0x2d, 0x8d, 0x7a, 0x09, 0xbd, 0x74, 0x3f, 0x76, 0x77, 0x8a, 0x92, 0xea, 0x66, 0x90, 0xac, 0xe1, 0xee, 0x44, 0x6d, 0x6e, 0xc5, 0xbc, 0x0e, 0xd6, 0x6a, 0xea, 0x47, 0x0f, 0x1f, 0x35, 0x6c, 0xc7, 0x99, 0xc7, 0xbd, 0x03, 0x12, 0x03, 0xe0, 0x7f, 0xf2, 0x38, 0xdd, 0x99, 0x1b, 0x28, 0x5e, 0x83, 0x7e, 0x6a, 0xe2, 0x90, 0x1d, 0x69, 0x1e, 0xf7, 0x86, 0xa1, 0xa9, 0xa9, 0x6b, 0xa2, 0x69, 0xe8, 0x2f, 0x04, 0xc6, 0x75, 0x6f, 0xe6, 0xff, 0xd8, 0x7e, 0xec, 0x90, 0x62, 0xe1, 0x4f, 0xb6, 0xe8, 0xd9, 0x10, 0xdf, 0x81, 0x54, 0xf9, 0x8d, 0xff, 0xd8, 0x2e, 0xcc, 0xff, 0x84, 0xfc, 0x68, 0xab, 0x01, 0x0c, 0x7e, 0xf8, 0xeb, 0xdf, 0x5f, 0xff, 0xfe, 0xfa, 0xf7, 0xd7, 0xbf, 0xbf, 0xfe, 0xfd, 0xf5, 0xef, 0x6b, 0xed, 0xff, 0x0f, 0xab, 0x5e, 0xa9, 0x44, 0x5f, 0x39, 0xde, 0xb6, 0xa7, 0x20, 0xd5, 0xe5, 0xfd, 0x3e, 0x58, 0x97, 0xa6, 0xfe, 0xf8, 0x22, 0xa0, 0x17, 0xdf, 0x85, 0x61, 0x39, 0xc9, 0xdd, 0x04, 0xb6, 0xb4, 0x26, 0x30, 0x3a, 0x0a, 0x61, 0x86, 0x70, 0x4a, 0x38, 0xc5, 0x76, 0x5b, 0x67, 0xa6, 0x8e, 0x96, 0x8f, 0x4b, 0x35, 0x13, 0xca, 0xf9, 0x1d, 0x15, 0xf7, 0x44, 0x48, 0x60, 0x74, 0xb4, 0xae, 0xdf, 0xa8, 0x51, 0xa7, 0x9d, 0x4c, 0x63, 0x7b, 0xb3, 0x71, 0x2e, 0x66, 0xf3, 0xa9, 0xd3, 0x39, 0xac, 0x14, 0xab, 0xb5, 0xe9, 0xc9, 0x08, 0xd8, 0x14, 0xa3, 0x0f, 0x73, 0x22, 0xbf, 0x1e, 0xf4, 0x07, 0xf9, 0x8e, 0xfa, 0x2e, 0x7f, 0x64, 0x18, 0x65, 0xa0, 0x0b, 0x29, 0x5a, 0xe2, 0x97, 0x99, 0xbc, 0x58, 0x8e, 0x6c, 0x72, 0x4c, 0x04, 0x9b, 0x50, 0x86, 0x39, 0xce, 0xa6, 0x7a, 0x08, 0xa3, 0xf8, 0xe8, 0xfe, 0x56, 0x7a, 0x13, 0x98, 0x03, 0xba, 0x29, 0xb8, 0x56, 0xf4, 0x85, 0xd2, 0x58, 0xee, 0x34, 0xb7, 0xf7, 0x15, 0xcc, 0x9d, 0xde, 0x85, 0x57, 0x59, 0xf8, 0xf1, 0x25, 0x6c, 0x53, 0xb2, 0x77, 0x12, 0xd2, 0x27, 0xfa, 0xd6, 0xf8, 0x42, 0x53, 0x26, 0x81, 0xd1, 0x8d, 0x31, 0x4e, 0x2b, 0x1e, 0x4f, 0x4b, 0x90, 0x8f, 0x6d, 0x58, 0xa3, 0xde, 0x99, 0xb0, 0x57, 0x9c, 0x19, 0xc9, 0x77, 0xb4, 0x6b, 0x12, 0x82, 0xc8, 0xf0, 0xda, 0xa7, 0x33, 0x19, 0x09, 0x4c, 0x46, 0xc9, 0xd4, 0xf6, 0xaa, 0x8b, 0xc8, 0xeb, 0xa6, 0x96, 0x8b, 0x19, 0x58, 0xcb, 0x63, 0xb4, 0x3b, 0x53, 0x93, 0x14, 0x51, 0x0d, 0x95, 0xe8, 0xcd, 0x32, 0x0a, 0xf5, 0x0a, 0xbc, 0x14, 0x27, 0x2b, 0x25, 0x8d, 0xb5, 0xcf, 0x4e, 0x6d, 0x63, 0x2b, 0xa6, 0x26, 0xb6, 0x5a, 0xa7, 0x1a, 0x1a, 0xe9, 0x8e, 0x8d, 0x3f, 0x42, 0x3c, 0x85, 0xd1, 0x72, 0xb7, 0xe6, 0xef, 0x84, 0x68, 0x07, 0x29, 0xe6, 0x2f, 0x62, 0xdf, 0x4f, 0xc0, 0x12, 0x62, 0xd3, 0x3c, 0x69, 0x9d, 0xee, 0x0d, 0xe3, 0xcb, 0xb0, 0xb5, 0x3b, 0xc0, 0x3c, 0x9e, 0x9f, 0x00, 0x6a, 0x75, 0x2f, 0x06, 0x9b, 0x3b, 0x03, 0x6b, 0xec, 0xc1, 0x55, 0x6e, 0x62, 0xd1, 0x45, 0x3d, 0x60, 0x2d, 0x4e, 0x56, 0x9c, 0x89, 0xd5, 0x0d, 0xdf, 0x9b, 0x70, 0xbb, 0x2f, 0xf8, 0xfd, 0x7f, 0x8d, 0x93, 0xe0, 0xc0, 0x8d, 0xa5, 0xf0, 0x66, 0xaa, 0xa2, 0xf7, 0x03, 0x7d, 0xf7, 0xe2, 0x4d, 0x7b, 0x57, 0x87, 0xee, 0x5a, 0x33, 0xbc, 0x69, 0xa3, 0xef, 0x9e, 0x27, 0xbe, 0x4c, 0xd7, 0x49, 0x4b, 0x66, 0xb2, 0x2f, 0xa0, 0x3a, 0xee, 0xd7, 0xd1, 0x6d, 0xb5, 0x51, 0xf3, 0x50, 0x2a, 0x6f, 0xfd, 0x77, 0x0c, 0x8d, 0x60, 0xa1, 0x0d, 0x01, 0x33, 0x86, 0x8d, 0xb2, 0xf5, 0x62, 0x6d, 0xb8, 0x03, 0x62, 0x73, 0x40, 0xd6, 0x07, 0x74, 0xb9, 0xfb, 0x31, 0xa5, 0x79, 0x67, 0x07, 0x98, 0xe6, 0x13, 0xcd, 0x73, 0x98, 0xd7, 0x88, 0x54, 0x71, 0x0a, 0x7d, 0xf1, 0x0f, 0xe3, 0x15, 0x3f, 0x40, 0xcf, 0x6f, 0x63, 0xde, 0xfd, 0xba, 0x81, 0x83, 0x1d, 0x60, 0xd8, 0x45, 0x27, 0x7a, 0x5a, 0xf2, 0x0b, 0x21, 0xbc, 0xb3, 0xa8, 0x55, 0x9f, 0x63, 0xd8, 0xe8, 0xbc, 0x50, 0xe6, 0x73, 0x31, 0xac, 0xb1, 0xc6, 0x85, 0xab, 0x37, 0xb7, 0xa2, 0xf7, 0xb9, 0x2e, 0x96, 0xb1, 0x37, 0xa4, 0xfe, 0xbb, 0xa2, 0x3f, 0xee, 0x62, 0xfc, 0x9f, 0x67, 0x6f, 0xca, 0x6e, 0x7b, 0x6b, 0x73, 0xc5, 0x6f, 0x21, 0x02, 0x67, 0x3d, 0x9f, 0xe3, 0x75, 0xdb, 0x5b, 0x2d, 0x39, 0xf7, 0xeb, 0xcc, 0x58, 0xde, 0x00, 0xd6, 0xc6, 0xc0, 0xce, 0x27, 0x35, 0x56, 0x11, 0x0f, 0xa7, 0xa2, 0xaf, 0x75, 0xb1, 0xf7, 0xb3, 0x9e, 0xdf, 0xd0, 0xa1, 0x73, 0x5e, 0x70, 0x1e, 0x77, 0x32, 0x2e, 0xfb, 0x70, 0xa5, 0x8d, 0x3c, 0x5a, 0xcc, 0x1a, 0x37, 0x16, 0x7f, 0x9e, 0xc5, 0x9d, 0x14, 0x92, 0xc0, 0xe6, 0xcb, 0x1d, 0x78, 0xf2, 0x49, 0xfa, 0x36, 0x81, 0x90, 0x05, 0xc6, 0x73, 0x9d, 0x57, 0x3c, 0xec, 0x5c, 0xd5, 0xab, 0x15, 0x6a, 0x89, 0x9e, 0x2b, 0x54, 0x3e, 0xe3, 0xbd, 0x6f, 0x9a, 0x53, 0x67, 0xc6, 0x9f, 0x65, 0x5a, 0x07, 0x14, 0xc0, 0x46, 0xbc, 0x76, 0xc3, 0x26, 0xbc, 0x82, 0x4e, 0x8f, 0x57, 0xab, 0x6e, 0xc0, 0xfa, 0x10, 0xe8, 0xd8, 0x5e, 0x66, 0x33, 0xc3, 0x9e, 0x16, 0xed, 0xd1, 0xdd, 0xcd, 0x1a, 0xc6, 0x84, 0x50, 0xd0, 0x9d, 0x9e, 0xd6, 0x91, 0xb9, 0x06, 0x9e, 0x65, 0x5f, 0x3b, 0xc9, 0x3c, 0xce, 0xea, 0x18, 0xcd, 0x6b, 0xca, 0x2b, 0x84, 0x6b, 0xa2, 0x31, 0xaf, 0x50, 0x97, 0xb9, 0xd3, 0x8d, 0x12, 0xd3, 0xef, 0xec, 0xd0, 0xc1, 0x32, 0x63, 0x08, 0xaf, 0x98, 0xb2, 0xe6, 0x04, 0x6b, 0xc1, 0xae, 0x0e, 0xdd, 0xfe, 0x65, 0x44, 0xb3, 0x7f, 0x97, 0x9a, 0x2a, 0xc0, 0x47, 0x65, 0xf4, 0xfe, 0xdc, 0x5a, 0xf7, 0x34, 0x17, 0x6c, 0xc0, 0x5a, 0x9e, 0xa7, 0x7d, 0x9e, 0x3a, 0xb6, 0xe7, 0xe4, 0xad, 0x37, 0x73, 0xe0, 0x62, 0x59, 0xc8, 0x45, 0xfb, 0x80, 0xff, 0xde, 0x7c, 0xa0, 0x23, 0x02, 0x21, 0x17, 0x52, 0xb0, 0xfd, 0x1a, 0x6f, 0x35, 0x63, 0x7b, 0xcd, 0x68, 0x2d, 0x0a, 0xc1, 0x26, 0x1a, 0x3f, 0xf2, 0x5c, 0xf4, 0x84, 0x3a, 0x40, 0xc7, 0x7a, 0x63, 0x83, 0x82, 0x7c, 0xcd, 0x80, 0x94, 0xa8, 0x4b, 0xc6, 0x74, 0x09, 0xfe, 0x07, 0x3b, 0x03, 0xdf, 0x7b, 0xc2, 0x66, 0xeb, 0xca, 0x00, 0x1d, 0xbb, 0x57, 0x91, 0x88, 0xf1, 0x0f, 0x46, 0x57, 0x81, 0x4e, 0xb4, 0xb1, 0x7d, 0x9b, 0x1f, 0x2c, 0x81, 0x1b, 0x7b, 0xdc, 0x2c, 0x84, 0xab, 0x62, 0x51, 0x31, 0xd1, 0x69, 0x1f, 0xea, 0x0e, 0xce, 0x93, 0x18, 0x3e, 0xcb, 0x30, 0x1f, 0xc9, 0xec, 0xeb, 0x90, 0x0c, 0xf3, 0x36, 0xc3, 0x2c, 0x90, 0xcd, 0xb6, 0x7d, 0xf0, 0xa4, 0x08, 0x7a, 0x3a, 0xb7, 0xd2, 0x2a, 0xd3, 0xb7, 0x50, 0xcc, 0x54, 0x3b, 0xc5, 0xe4, 0x5b, 0xc9, 0x6a, 0x59, 0x08, 0x23, 0x18, 0x56, 0xc7, 0xb1, 0xd5, 0x1a, 0x76, 0x96, 0x5c, 0xc5, 0x6a, 0xfb, 0x3d, 0xc5, 0xca, 0x28, 0xb7, 0x70, 0xce, 0x81, 0x0c, 0x26, 0xd7, 0x7d, 0x9e, 0xfd, 0x6c, 0x8f, 0xfe, 0x49, 0xc5, 0xf4, 0x16, 0x69, 0xeb, 0xe6, 0x44, 0xa2, 0x7d, 0x96, 0xee, 0x59, 0xbc, 0xd5, 0xb2, 0x3c, 0xf6, 0x9c, 0xa5, 0xd1, 0xfa, 0x8b, 0xe7, 0x26, 0xd1, 0xfe, 0x95, 0xe2, 0xb9, 0xdf, 0x7a, 0xef, 0xb9, 0xda, 0xef, 0xcc, 0x79, 0x2f, 0x42, 0x5f, 0x00, 0xa9, 0x90, 0x6b, 0x55, 0xae, 0x89, 0x4c, 0x67, 0xb6, 0x28, 0x9e, 0xea, 0x7f, 0x17, 0xf7, 0xef, 0xdd, 0x8e, 0x7b, 0xa5, 0x9c, 0x1e, 0xd0, 0x7f, 0xcd, 0x9a, 0xcc, 0xbe, 0x3d, 0xed, 0x6d, 0xf9, 0xea, 0x96, 0xd1, 0x29, 0xaa, 0xe6, 0x16, 0x1b, 0xdd, 0x23, 0xa8, 0xd6, 0x19, 0xa8, 0x8e, 0xcf, 0x92, 0x5c, 0x11, 0xfb, 0xa0, 0x6c, 0xaa, 0x61, 0x75, 0xc6, 0x70, 0xbe, 0x6c, 0x9a, 0xab, 0x85, 0x0b, 0x64, 0x8b, 0x9b, 0x85, 0x55, 0x3a, 0x9b, 0x9c, 0x80, 0x52, 0xb6, 0x91, 0x96, 0x29, 0x66, 0xa3, 0x1a, 0x42, 0xfc, 0x68, 0xc2, 0x9b, 0x81, 0xe3, 0x4d, 0x83, 0x78, 0x21, 0xda, 0x2b, 0x9b, 0xd5, 0x5e, 0xd9, 0xcc, 0x4e, 0x25, 0xb5, 0xa9, 0xd4, 0x9b, 0xd5, 0x1e, 0x24, 0xec, 0x18, 0x39, 0x91, 0xb7, 0x21, 0xf5, 0xae, 0xa0, 0x29, 0x75, 0x3f, 0xdd, 0x7f, 0x52, 0x4b, 0x2d, 0x95, 0xe3, 0x19, 0xd5, 0x9b, 0xfa, 0x95, 0x30, 0x8a, 0x20, 0xe2, 0x1e, 0xa7, 0x53, 0x20, 0x63, 0xd6, 0x62, 0xe8, 0x5e, 0xd9, 0x54, 0xca, 0x34, 0x12, 0xc3, 0x09, 0x6a, 0xf8, 0x39, 0x0c, 0x57, 0xc9, 0x1e, 0x16, 0xfe, 0x9e, 0x9c, 0x9e, 0x43, 0x70, 0x4b, 0x8b, 0x66, 0x9f, 0x36, 0xf3, 0x72, 0xe8, 0xb4, 0xeb, 0xb7, 0x5e, 0x08, 0xc4, 0xa6, 0x9e, 0xa2, 0xfb, 0x5e, 0x62, 0x32, 0x6b, 0xe9, 0x96, 0xe1, 0x69, 0x69, 0xbf, 0xa6, 0x34, 0xe4, 0x96, 0x2b, 0xdb, 0x8b, 0xf8, 0xd7, 0x4e, 0x47, 0x83, 0x5e, 0x31, 0xba, 0x47, 0x8b, 0x66, 0xf7, 0x68, 0xf6, 0xc6, 0xe3, 0x58, 0x11, 0xfe, 0x74, 0x6e, 0xcc, 0x00, 0x30, 0x3b, 0x81, 0xe3, 0xca, 0x0c, 0x2f, 0xb0, 0x37, 0xe9, 0xe7, 0x71, 0x9c, 0x73, 0x16, 0xb3, 0x7c, 0xdf, 0x63, 0x1a, 0xb3, 0x91, 0x76, 0xe3, 0x19, 0x8f, 0x4e, 0xeb, 0xd0, 0x09, 0xf0, 0x3c, 0xb3, 0xb4, 0x03, 0xd3, 0x3a, 0xd6, 0x00, 0x3c, 0x4f, 0x33, 0xce, 0x9b, 0x37, 0x24, 0x08, 0xaf, 0xe7, 0xe5, 0xe7, 0xb1, 0xd1, 0x57, 0xed, 0x16, 0xee, 0xa2, 0x53, 0x6c, 0x0f, 0x3f, 0x46, 0x6f, 0xa6, 0x49, 0x0b, 0x51, 0x26, 0xbd, 0x18, 0xb2, 0x48, 0xf4, 0xd6, 0xd2, 0xb6, 0x9f, 0x8e, 0x41, 0xfa, 0x85, 0xec, 0xcb, 0x58, 0x28, 0x6d, 0x3a, 0x1b, 0xf0, 0xf0, 0x33, 0x0c, 0x7f, 0x2f, 0xe2, 0xd9, 0x5e, 0x93, 0xb7, 0x36, 0x33, 0xec, 0x72, 0x86, 0x7d, 0x10, 0xb1, 0x99, 0x7c, 0x54, 0x33, 0xac, 0x48, 0x77, 0x06, 0xde, 0xda, 0x54, 0x89, 0x57, 0xe1, 0x9a, 0xf6, 0xb6, 0x9f, 0x2d, 0x84, 0x33, 0x9a, 0x0e, 0x29, 0xf5, 0x74, 0xbf, 0xdf, 0xdd, 0x14, 0xf4, 0x37, 0x4b, 0x2d, 0x6d, 0xda, 0xd7, 0x03, 0x85, 0xa9, 0x82, 0x05, 0xaa, 0x9a, 0xea, 0x83, 0xed, 0x81, 0x46, 0xe1, 0x89, 0xa6, 0x86, 0xe0, 0x62, 0x01, 0x51, 0x51, 0xcc, 0xe2, 0xc6, 0x26, 0x65, 0x71, 0x70, 0x28, 0xa6, 0xa1, 0xd1, 0xaf, 0xd2, 0xe0, 0x9f, 0x2a, 0x01, 0xd0, 0x09, 0x12, 0xe8, 0xa7, 0x4b, 0x60, 0x48, 0x75, 0x5d, 0xd1, 0x09, 0x02, 0x3b, 0xc9, 0x9a, 0xae, 0xba, 0x2e, 0x7a, 0x16, 0xa7, 0xdb, 0x10, 0x88, 0x61, 0xef, 0x91, 0x0f, 0xb8, 0xfa, 0xc0, 0xa6, 0x6a, 0xb5, 0xc1, 0xaf, 0x0b, 0x40, 0xda, 0x5d, 0xf4, 0x46, 0x96, 0xcf, 0x45, 0x27, 0x98, 0x0a, 0x64, 0x31, 0xc3, 0x43, 0xf0, 0xc7, 0x38, 0x3e, 0x89, 0x8d, 0x05, 0xca, 0xe9, 0x87, 0x00, 0xac, 0x30, 0x04, 0xc7, 0x9c, 0x1b, 0xd1, 0xa0, 0x0f, 0x26, 0x48, 0x58, 0x2a, 0x52, 0x1c, 0x8d, 0xf4, 0xf2, 0x9c, 0xb7, 0xa4, 0xea, 0x87, 0xa5, 0x5a, 0x02, 0x10, 0xb4, 0x21, 0xd7, 0xcb, 0x7e, 0x6b, 0x80, 0xed, 0x6e, 0xa2, 0xd9, 0x00, 0x5e, 0x46, 0xbc, 0x2e, 0x38, 0x1a, 0x43, 0x27, 0x10, 0xaf, 0x63, 0xf8, 0xcd, 0xaa, 0x25, 0x30, 0xb1, 0xd8, 0x16, 0x4c, 0x0b, 0x21, 0x95, 0x3e, 0x38, 0x12, 0x43, 0xaf, 0x05, 0xc7, 0xa8, 0xb6, 0x52, 0x1f, 0x1c, 0x8d, 0x58, 0x03, 0xe2, 0xb6, 0xa8, 0xb8, 0xe7, 0x10, 0x17, 0x8f, 0x5c, 0x08, 0xb7, 0xce, 0x3f, 0x2a, 0xa0, 0xe7, 0x3d, 0x8e, 0xb1, 0x15, 0xfc, 0x2d, 0x8d, 0x74, 0xfd, 0x8a, 0xd8, 0x8b, 0xff, 0x90, 0x66, 0xa0, 0x77, 0x21, 0xa5, 0x3a, 0x9f, 0x13, 0x6b, 0x77, 0x55, 0x7b, 0x83, 0x82, 0xa5, 0x1a, 0x2e, 0x3e, 0x92, 0xc7, 0x53, 0x8b, 0x6f, 0x4d, 0x5d, 0x37, 0x60, 0xe8, 0xc9, 0x33, 0x48, 0x93, 0x7c, 0x4e, 0x77, 0x91, 0xa7, 0x68, 0xdd, 0x00, 0x34, 0x60, 0x2c, 0x25, 0x1a, 0xb3, 0x60, 0x2c, 0xde, 0xe7, 0xf4, 0x14, 0x21, 0x34, 0x45, 0xf3, 0x85, 0x3d, 0xf4, 0x0e, 0xb5, 0xf8, 0xfe, 0x7e, 0x92, 0xfa, 0xfe, 0x9c, 0x15, 0xc6, 0x7c, 0x38, 0x57, 0xde, 0xfd, 0x56, 0x52, 0xb6, 0x00, 0x7c, 0x67, 0xb9, 0x62, 0xee, 0x29, 0x3f, 0x50, 0x08, 0xbd, 0xa2, 0x11, 0xaf, 0xa3, 0xd6, 0x16, 0xd9, 0xd6, 0xa0, 0xe7, 0x63, 0x2b, 0xba, 0x08, 0x89, 0x58, 0xfe, 0xa9, 0x8a, 0x33, 0x06, 0xe4, 0x73, 0xd6, 0x19, 0x3e, 0x1b, 0xc2, 0x7f, 0xf8, 0x17, 0xc6, 0x7f, 0x67, 0xb7, 0x6e, 0x0d, 0xc1, 0x56, 0xa7, 0x20, 0x84, 0x42, 0x21, 0x61, 0x2b, 0xfe, 0x85, 0xb6, 0x86, 0x42, 0x1c, 0x77, 0x56, 0x44, 0x1a, 0x27, 0xd1, 0x85, 0xb6, 0x86, 0xc3, 0x5b, 0xcf, 0x12, 0x2e, 0x24, 0x38, 0x05, 0x24, 0x11, 0x38, 0xdd, 0x59, 0xa4, 0x23, 0x0a, 0xc6, 0x52, 0xd8, 0x4a, 0xfc, 0x30, 0xef, 0x59, 0x30, 0x3f, 0x44, 0xdf, 0x0d, 0x3a, 0xab, 0x63, 0x3e, 0xc6, 0x51, 0x73, 0x16, 0x7d, 0x9b, 0x85, 0x85, 0x7f, 0xb6, 0x8a, 0x6b, 0xd9, 0x31, 0x45, 0xbf, 0x4a, 0xe7, 0xc8, 0x02, 0x4b, 0x0e, 0x9c, 0x2d, 0xa3, 0x93, 0x68, 0xf3, 0x60, 0x13, 0x8d, 0xee, 0xc3, 0xe8, 0x5b, 0x3c, 0xb9, 0x2c, 0x05, 0x63, 0x38, 0x33, 0x72, 0xcc, 0xa5, 0xba, 0x5f, 0x12, 0x0c, 0xb3, 0xb7, 0xb4, 0x0f, 0x8b, 0x8e, 0x5d, 0x1d, 0x91, 0x35, 0x2d, 0x48, 0x71, 0xe2, 0xcb, 0x28, 0xe2, 0x87, 0xc7, 0xf3, 0x74, 0x8c, 0xea, 0x88, 0xca, 0x59, 0x17, 0xe5, 0x7c, 0x44, 0xa5, 0x3b, 0xc0, 0x6c, 0xce, 0x91, 0x28, 0x67, 0xdd, 0x89, 0x2f, 0xa3, 0x88, 0x1f, 0x1e, 0xa7, 0x2f, 0xc7, 0xf0, 0x37, 0xcf, 0xbd, 0xce, 0x25, 0x66, 0x37, 0x7f, 0x8f, 0x3c, 0x8c, 0x33, 0x72, 0xef, 0x32, 0x0b, 0xce, 0xc8, 0xbf, 0xe7, 0xf1, 0xa2, 0x3e, 0x50, 0xa9, 0x98, 0x06, 0x1d, 0x90, 0x92, 0x53, 0x49, 0x87, 0xbb, 0x86, 0xe2, 0xba, 0x3b, 0x20, 0x93, 0xde, 0x50, 0x40, 0xb8, 0xf2, 0x9c, 0xa7, 0x01, 0xed, 0xe0, 0x18, 0x27, 0xe8, 0x1c, 0x7a, 0xe2, 0xca, 0xac, 0xde, 0x81, 0x2e, 0xf2, 0x14, 0x88, 0x6b, 0x84, 0xbf, 0xad, 0x8e, 0x94, 0x93, 0x18, 0xce, 0xb8, 0xb6, 0x10, 0x8c, 0x09, 0x21, 0x8c, 0xdb, 0xa3, 0x71, 0x3d, 0xe6, 0x36, 0x8f, 0x71, 0x41, 0x1c, 0xbf, 0xfb, 0x87, 0x36, 0x2f, 0x4d, 0x67, 0xc4, 0xb1, 0xec, 0xc4, 0x51, 0x35, 0x8a, 0x8f, 0x5d, 0xf2, 0x64, 0xe0, 0xf9, 0x52, 0x3e, 0xe2, 0xd1, 0xaf, 0x09, 0x09, 0xdc, 0xc6, 0xbd, 0xd5, 0x4d, 0xf5, 0x45, 0xcf, 0xe6, 0x57, 0x82, 0x4d, 0x78, 0x3f, 0x35, 0xcc, 0xdf, 0x1d, 0x30, 0xf0, 0x7b, 0x80, 0xe6, 0xaf, 0xbb, 0xea, 0xd2, 0x39, 0x75, 0xff, 0xce, 0xf5, 0x9a, 0x23, 0xa4, 0xae, 0xdb, 0xfe, 0xba, 0x74, 0xfd, 0xbf, 0xe2, 0xef, 0xaf, 0xfd, 0xf5, 0x7f, 0xd7, 0x9f, 0xf6, 0x5d, 0xbd, 0xae, 0x16, 0xfa, 0x5a, 0xe6, 0xbf, 0x5c, 0x66, 0xd6, 0x78, 0x93, 0x1c, 0xef, 0xea, 0xa7, 0x19, 0xff, 0xc7, 0xaf, 0x72, 0x6f, 0x83, 0xaf, 0x31, 0xd5, 0xaf, 0x66, 0x46, 0x24, 0xf8, 0xe5, 0x63, 0x59, 0xa0, 0x80, 0xde, 0x9a, 0x3b, 0x80, 0xab, 0x53, 0xfe, 0x05, 0xf7, 0x6d, 0xef, 0x6e, 0xe5, 0xdf, 0x01, 0x47, 0x9b, 0x54, 0x71, 0xce, 0x53, 0xed, 0xcc, 0xd1, 0xf6, 0x63, 0x20, 0x8e, 0x7d, 0x71, 0x11, 0xe7, 0x64, 0xcf, 0x0e, 0x84, 0x05, 0xec, 0xea, 0xe1, 0x9e, 0xcd, 0x68, 0x27, 0x38, 0x53, 0x63, 0xd3, 0x0a, 0x89, 0x8a, 0xce, 0xda, 0x02, 0xda, 0xcb, 0xb0, 0x5b, 0x9d, 0x85, 0x1b, 0x78, 0x6e, 0x61, 0xa0, 0xc8, 0x35, 0x6b, 0x26, 0xf3, 0x3b, 0x8c, 0x74, 0x35, 0x83, 0x96, 0x63, 0xb9, 0x15, 0xa9, 0x3b, 0xb5, 0xd5, 0x85, 0x9c, 0xc7, 0x2c, 0x56, 0x0b, 0x9d, 0xec, 0x25, 0xd0, 0xba, 0x9f, 0xed, 0xdc, 0xc7, 0xab, 0x8d, 0x85, 0x13, 0xc1, 0x8a, 0x57, 0x3b, 0xd8, 0xf0, 0x9a, 0x02, 0x89, 0x9e, 0x1e, 0xac, 0x05, 0xed, 0xf7, 0xe1, 0xb3, 0xfb, 0x24, 0xe4, 0x62, 0x62, 0x5c, 0x84, 0x9b, 0xcb, 0x83, 0xd0, 0xb0, 0xf2, 0xec, 0xbc, 0x56, 0xaa, 0x67, 0xa6, 0xfb, 0xa8, 0x09, 0xe9, 0x67, 0xb9, 0xaa, 0xf2, 0x74, 0x6f, 0x0f, 0x60, 0xb9, 0x07, 0xa6, 0xc4, 0x92, 0x4c, 0xb7, 0xa4, 0xd0, 0x5b, 0xac, 0x2f, 0xa4, 0xac, 0x86, 0x6a, 0x5a, 0xcb, 0xe2, 0x4a, 0xed, 0xac, 0xe7, 0xa7, 0xce, 0x6e, 0x67, 0x5e, 0x36, 0x40, 0x7e, 0x0e, 0x40, 0xa1, 0xfe, 0x28, 0x7a, 0x02, 0x17, 0x2b, 0x1d, 0x06, 0xda, 0xa1, 0xfc, 0x8c, 0x73, 0xaa, 0xfe, 0x08, 0xce, 0x13, 0x2c, 0xd6, 0xdb, 0xe3, 0x59, 0xef, 0x2c, 0xd0, 0xf7, 0x54, 0x1c, 0x66, 0x98, 0xb3, 0x1e, 0xa2, 0xe8, 0x74, 0xda, 0x0e, 0xda, 0xde, 0xb6, 0x1d, 0xf2, 0xcd, 0x44, 0x0b, 0xdc, 0x95, 0x35, 0x4e, 0x18, 0x70, 0xcf, 0x2e, 0x5e, 0xa0, 0xc9, 0xf5, 0x82, 0x27, 0x4c, 0x2d, 0x6f, 0x0e, 0xef, 0x17, 0xc2, 0x51, 0x69, 0x9a, 0x9f, 0x5f, 0x2b, 0xc1, 0xaf, 0x96, 0x20, 0x8d, 0x83, 0xd1, 0x3c, 0xf3, 0xbd, 0x77, 0xab, 0x4b, 0xb8, 0x84, 0x0a, 0xb9, 0xb7, 0x5a, 0x9a, 0x66, 0x3f, 0xf1, 0x9d, 0xd4, 0xd8, 0x74, 0xf4, 0x2e, 0x7f, 0xe5, 0x9e, 0x73, 0x2c, 0x72, 0x15, 0x3d, 0x83, 0x8c, 0xe3, 0x44, 0xb1, 0x6f, 0xce, 0xcf, 0x22, 0x1f, 0xa4, 0xc6, 0x06, 0x8d, 0xcb, 0xb1, 0xb7, 0x4f, 0x1d, 0x16, 0x66, 0x0a, 0x19, 0xe8, 0x33, 0x84, 0x26, 0x84, 0x89, 0x73, 0x54, 0x1a, 0x94, 0xcf, 0x42, 0x5f, 0x49, 0xfd, 0xe5, 0x72, 0xee, 0x1b, 0x97, 0x0e, 0x08, 0xc0, 0x35, 0x66, 0xf0, 0x6b, 0xe5, 0x55, 0x43, 0x3f, 0x56, 0x0e, 0xa5, 0xb3, 0x7d, 0xb3, 0x48, 0xef, 0xca, 0x2a, 0xdc, 0xb3, 0x5c, 0x95, 0x95, 0xb3, 0x31, 0x98, 0x52, 0xda, 0xd4, 0x8c, 0xde, 0x69, 0xa0, 0x29, 0x18, 0x6c, 0x64, 0x1f, 0xae, 0xf6, 0xf8, 0x6a, 0x96, 0xb5, 0xb6, 0x08, 0xcb, 0x73, 0xb2, 0x72, 0x73, 0xdd, 0xb3, 0xe8, 0xf8, 0x51, 0xec, 0xbb, 0x61, 0x7f, 0x99, 0x99, 0xea, 0x99, 0x0d, 0x61, 0xf6, 0xb6, 0xc2, 0x78, 0xc5, 0x87, 0x1e, 0x7a, 0x1a, 0x7b, 0xb6, 0x8d, 0x32, 0x77, 0x14, 0xea, 0x21, 0x10, 0x8b, 0x2b, 0x5d, 0x53, 0xd1, 0x15, 0x5d, 0x28, 0x38, 0xce, 0xc1, 0x9e, 0x8d, 0x77, 0xe3, 0xaa, 0x1a, 0x65, 0x47, 0x4f, 0xe6, 0xb0, 0x77, 0xfc, 0x5f, 0x41, 0xc1, 0xe7, 0x47, 0xed, 0xb9, 0x6b, 0xb4, 0x8c, 0x9a, 0xdb, 0xe5, 0x44, 0x2d, 0xbf, 0x89, 0xf7, 0xad, 0xe5, 0x0f, 0xa7, 0xa1, 0xf7, 0xc2, 0xff, 0xde, 0xac, 0xb3, 0xb2, 0x7b, 0x08, 0x26, 0x5e, 0x0a, 0x97, 0x19, 0xbd, 0xd7, 0xef, 0xd7, 0xd1, 0x69, 0x5c, 0x33, 0x7a, 0x1b, 0x2a, 0xfd, 0xf4, 0xc6, 0x89, 0x09, 0xbd, 0x87, 0xc5, 0x8a, 0x1b, 0xaf, 0x1d, 0x4a, 0x21, 0xf5, 0xdd, 0x7b, 0x63, 0x25, 0xd8, 0x95, 0x44, 0xeb, 0x81, 0x9f, 0xb0, 0xdd, 0x19, 0xef, 0xa1, 0x6f, 0xbe, 0xcb, 0x14, 0xee, 0x18, 0x15, 0x39, 0x4f, 0x27, 0x00, 0x6c, 0xcf, 0xea, 0x93, 0x60, 0xb1, 0x53, 0x70, 0x7a, 0x43, 0x32, 0xdb, 0x53, 0xf0, 0x5e, 0xaa, 0x04, 0x3f, 0xbc, 0x20, 0xa5, 0xf3, 0xf7, 0xcf, 0xe9, 0xf3, 0x1c, 0xed, 0x2d, 0x0d, 0x8d, 0x72, 0x53, 0x4b, 0x63, 0x83, 0xd0, 0xd8, 0x12, 0x0c, 0xac, 0x14, 0x9a, 0x5a, 0x82, 0xad, 0x82, 0x27, 0x10, 0x9c, 0xd5, 0xda, 0xc2, 0xf6, 0x9b, 0xbc, 0xe7, 0x11, 0xe1, 0x87, 0xbb, 0x2c, 0x40, 0xef, 0x96, 0x40, 0xa1, 0x02, 0xc6, 0x78, 0xcd, 0x46, 0xbc, 0xea, 0xf5, 0x8e, 0x4e, 0x8f, 0x53, 0xe0, 0x07, 0x87, 0xd0, 0x5e, 0xf8, 0x65, 0xf8, 0x41, 0x17, 0x7d, 0x4d, 0xb7, 0x4b, 0x46, 0xcc, 0xcb, 0xb8, 0x3a, 0xe8, 0xe7, 0x56, 0x42, 0x28, 0x4a, 0x5b, 0x49, 0x39, 0x2b, 0x5f, 0x81, 0xb4, 0x49, 0xa0, 0xc4, 0x0b, 0x45, 0xa9, 0xc5, 0x51, 0x8c, 0x99, 0xeb, 0x89, 0xf7, 0x5b, 0x32, 0x7b, 0xf6, 0xf9, 0xf3, 0xcf, 0xb1, 0x76, 0x1e, 0xde, 0x7a, 0x8a, 0x77, 0xe3, 0xca, 0xe0, 0x87, 0x05, 0x42, 0x11, 0x5e, 0xd9, 0x97, 0x1c, 0xba, 0xb1, 0x75, 0x3f, 0xcc, 0x10, 0x8c, 0xb4, 0xa6, 0xfa, 0x09, 0xfb, 0xf2, 0x6c, 0x77, 0x16, 0x62, 0x92, 0x84, 0x18, 0x09, 0xf6, 0xb2, 0xf6, 0x77, 0x17, 0x60, 0xdc, 0x44, 0xf1, 0x9f, 0x38, 0x39, 0x1f, 0xad, 0xde, 0x86, 0x79, 0x5a, 0xbd, 0x7f, 0xb0, 0x91, 0x6c, 0xdb, 0x0f, 0x70, 0x7d, 0xf0, 0x2f, 0x7b, 0x65, 0x78, 0xa5, 0x9f, 0x6a, 0xfd, 0x2f, 0x5d, 0x18, 0xea, 0xdd, 0xf0, 0x74, 0x2b, 0xbc, 0x72, 0x09, 0xeb, 0x3e, 0x5d, 0xad, 0x7b, 0xd9, 0x90, 0xba, 0x5a, 0xd5, 0xba, 0x86, 0x90, 0x97, 0x4d, 0x24, 0x93, 0xf5, 0x49, 0xef, 0x59, 0x95, 0xbb, 0x17, 0xf3, 0x58, 0xf0, 0x67, 0x62, 0x27, 0xab, 0x99, 0x36, 0x75, 0x80, 0x21, 0x5f, 0x7f, 0x68, 0x00, 0xe6, 0xf0, 0x13, 0x81, 0x5e, 0x7c, 0x2b, 0x6d, 0x76, 0xb5, 0xdb, 0x3f, 0x3b, 0x91, 0xd9, 0xc0, 0x44, 0xf4, 0xdf, 0x51, 0x03, 0xae, 0x0a, 0x06, 0xaa, 0xf1, 0xd1, 0x3d, 0xa9, 0xb3, 0x07, 0xcb, 0xf8, 0xf0, 0x2d, 0xfe, 0x56, 0x7a, 0x40, 0x5a, 0x36, 0x75, 0x71, 0x20, 0x88, 0x7a, 0x3f, 0xb9, 0xad, 0x3e, 0xd0, 0xd8, 0xd8, 0x92, 0x15, 0x5c, 0x11, 0x64, 0x4f, 0xb4, 0xa9, 0x2d, 0xfa, 0xf5, 0xb8, 0x02, 0xa3, 0xbb, 0x15, 0xdb, 0x20, 0x83, 0x9d, 0x93, 0x53, 0x2e, 0xc1, 0xf3, 0x89, 0x9e, 0x15, 0x91, 0x48, 0x9a, 0xb3, 0xf2, 0x12, 0x5a, 0x29, 0x8d, 0xae, 0x0e, 0xe9, 0x02, 0xc3, 0xe9, 0xfe, 0x96, 0xde, 0xf2, 0xd3, 0xd1, 0xf7, 0x19, 0x95, 0x0c, 0x76, 0x52, 0xd4, 0xde, 0x9c, 0x89, 0x60, 0x3a, 0xd0, 0xd1, 0x0b, 0x17, 0x17, 0x24, 0x3c, 0x6c, 0xf3, 0x15, 0x5d, 0x8c, 0x5c, 0x9b, 0xf0, 0x2e, 0xc3, 0x5f, 0x04, 0xeb, 0x5c, 0x97, 0xdc, 0x27, 0xda, 0x18, 0xdd, 0x9b, 0xd1, 0x94, 0x37, 0x53, 0xc9, 0x0a, 0xc6, 0xa4, 0xb2, 0x6f, 0x55, 0xb9, 0x17, 0xe4, 0xbc, 0x41, 0xdc, 0xd8, 0xf7, 0xeb, 0x8c, 0x43, 0xbf, 0xbe, 0xcc, 0xe5, 0x6f, 0x36, 0x5b, 0xad, 0x36, 0x34, 0x70, 0x53, 0x13, 0x85, 0x45, 0x76, 0x5a, 0x45, 0xaa, 0xfd, 0xa1, 0x43, 0xad, 0x79, 0x6d, 0xaa, 0x0c, 0xdf, 0x5f, 0x45, 0xf2, 0x7f, 0xcd, 0x81, 0x21, 0xff, 0x24, 0x10, 0x62, 0x84, 0x41, 0x89, 0x17, 0x8a, 0xa0, 0xdb, 0x12, 0xa5, 0xc7, 0x15, 0xdc, 0x6b, 0x16, 0xa4, 0xf2, 0x32, 0x7a, 0xc0, 0x90, 0xf3, 0x26, 0x7a, 0x27, 0x7d, 0x29, 0x22, 0x4a, 0x2f, 0x4b, 0xf0, 0xbf, 0x4e, 0x21, 0x55, 0x32, 0xd1, 0xff, 0xaf, 0x6e, 0x0c, 0xd9, 0x6e, 0xa2, 0xa7, 0x2f, 0xa6, 0x4c, 0x8d, 0xd2, 0xe7, 0x23, 0xd5, 0x2b, 0x32, 0xec, 0xb8, 0xc4, 0xe8, 0xb7, 0x62, 0xe8, 0xec, 0x4d, 0xf4, 0x38, 0x12, 0x74, 0x96, 0x28, 0xbd, 0x09, 0xa9, 0x56, 0x21, 0xd5, 0x5e, 0x46, 0x8f, 0xfa, 0xbf, 0xa3, 0xeb, 0x26, 0xfa, 0x45, 0x22, 0x7d, 0x33, 0x47, 0xa5, 0x87, 0x0f, 0x5c, 0xfd, 0xba, 0x57, 0xad, 0x19, 0x68, 0x7d, 0x2d, 0xb2, 0xc0, 0x57, 0xfd, 0xe0, 0x0c, 0xa1, 0x2e, 0xbc, 0x9f, 0x01, 0x71, 0x1e, 0x27, 0x5e, 0x2d, 0x0c, 0xe7, 0xc6, 0x10, 0xce, 0x2b, 0x5d, 0x4e, 0xa4, 0xff, 0x2e, 0xc2, 0x02, 0xd6, 0x9b, 0xc5, 0xf4, 0xed, 0x81, 0x3d, 0x99, 0x2c, 0xec, 0xc1, 0xb1, 0xdf, 0xaf, 0xfb, 0x36, 0xa6, 0xa5, 0xd0, 0x48, 0xd8, 0x03, 0x18, 0x7b, 0x0a, 0x63, 0xf1, 0x2c, 0xb5, 0x82, 0x70, 0x3f, 0xbe, 0x8c, 0xb8, 0x20, 0xea, 0x75, 0x3f, 0xc7, 0x6d, 0xa0, 0x5a, 0x78, 0x88, 0xc7, 0x8f, 0x7b, 0x18, 0xa6, 0x4a, 0xf1, 0x21, 0xc5, 0x7c, 0xa4, 0x38, 0xc9, 0xe8, 0xf7, 0x61, 0x6c, 0x06, 0xc6, 0x8e, 0xb0, 0xd4, 0x1a, 0x86, 0xdb, 0x81, 0x38, 0x07, 0xe2, 0x76, 0x73, 0x1c, 0xe3, 0x51, 0xc5, 0x78, 0xbc, 0x24, 0x26, 0xba, 0xfa, 0xc1, 0x2d, 0x5a, 0xf0, 0xda, 0x28, 0x1a, 0xf1, 0x4a, 0x79, 0x9f, 0x55, 0x7b, 0xfc, 0x21, 0x7a, 0x97, 0xec, 0xb2, 0x4e, 0xbe, 0xce, 0x42, 0x67, 0x7a, 0x63, 0x94, 0x68, 0x68, 0x28, 0xae, 0xb2, 0xbd, 0xad, 0xbd, 0xbe, 0xbe, 0xb1, 0xad, 0xcd, 0x02, 0xec, 0xcb, 0x2b, 0x99, 0x42, 0xa0, 0xb1, 0xad, 0xb9, 0x55, 0x6a, 0x10, 0xe4, 0xf6, 0x16, 0xfe, 0xc9, 0x15, 0x59, 0xc2, 0xb9, 0xa0, 0x21, 0x9a, 0xfe, 0xc4, 0xe2, 0x06, 0x96, 0xde, 0xd2, 0x1a, 0x14, 0x24, 0xa4, 0x58, 0xde, 0x28, 0xb4, 0x06, 0x84, 0xd6, 0xe6, 0x86, 0x68, 0xca, 0xf2, 0xc6, 0x40, 0x1b, 0x66, 0xb4, 0x80, 0x4c, 0x93, 0x08, 0xd1, 0xc9, 0xad, 0x68, 0xe1, 0x84, 0x0c, 0xa4, 0x6b, 0x6e, 0x6c, 0x51, 0x82, 0x8b, 0x85, 0x69, 0x82, 0x63, 0xa2, 0x9a, 0x7e, 0x1f, 0xdc, 0x27, 0x50, 0x36, 0x34, 0x7e, 0x68, 0xf4, 0xd0, 0x1a, 0x72, 0x92, 0x69, 0x69, 0x30, 0x0d, 0xe6, 0x7b, 0x8a, 0x2b, 0x18, 0x47, 0x87, 0x23, 0xcb, 0x61, 0x81, 0xfa, 0xc5, 0x4d, 0xfe, 0x65, 0x8d, 0xcb, 0x04, 0x41, 0x48, 0x73, 0xb0, 0x3f, 0x61, 0x32, 0x85, 0xa1, 0x71, 0x05, 0x47, 0x63, 0xe6, 0xc9, 0x74, 0x99, 0x86, 0x97, 0xb6, 0x66, 0x09, 0x6b, 0x46, 0x38, 0x70, 0xf3, 0xbd, 0x3a, 0xd7, 0x67, 0xf5, 0x47, 0xae, 0x8f, 0xc1, 0x95, 0xd9, 0x67, 0x6b, 0x27, 0x55, 0x4c, 0xf8, 0x19, 0xc2, 0xf5, 0x13, 0x0e, 0xe3, 0x75, 0x75, 0x59, 0xff, 0x1d, 0x69, 0x99, 0x23, 0xfd, 0x09, 0x74, 0x12, 0xd4, 0x67, 0xab, 0x53, 0xf9, 0x37, 0x5c, 0xe8, 0xad, 0xc3, 0x01, 0xfe, 0x7d, 0x16, 0x1a, 0xbb, 0x9f, 0x3d, 0x3d, 0xa9, 0x34, 0xe7, 0x1e, 0x87, 0x2e, 0xbc, 0xa8, 0xab, 0xa6, 0xec, 0x32, 0x58, 0xe5, 0x6b, 0x79, 0x99, 0x91, 0xeb, 0x82, 0x89, 0xe7, 0x61, 0xa3, 0x19, 0xf9, 0x2a, 0x36, 0xc7, 0x40, 0x03, 0xfb, 0x06, 0x95, 0x04, 0xe3, 0x9e, 0xf6, 0x79, 0xc4, 0x0c, 0x76, 0xb2, 0x0a, 0xa5, 0x8c, 0x15, 0x06, 0x02, 0x0d, 0x42, 0x1a, 0xff, 0x06, 0x7b, 0x19, 0x7d, 0x55, 0x69, 0x2a, 0x7d, 0x91, 0x8a, 0x76, 0x7b, 0x8d, 0x5b, 0xe8, 0xf3, 0x14, 0x5d, 0x8e, 0xf4, 0xd9, 0x7e, 0xbd, 0x64, 0xc0, 0xbc, 0x03, 0x62, 0x23, 0x91, 0xaa, 0x77, 0x0a, 0xf4, 0x87, 0x3b, 0x22, 0xe0, 0x2d, 0xa6, 0x3b, 0x74, 0x23, 0x4e, 0xef, 0xe9, 0x88, 0x01, 0x16, 0x3a, 0xb0, 0xa7, 0xc3, 0x14, 0x0d, 0xe9, 0x78, 0x68, 0xfd, 0x9e, 0x0e, 0x3d, 0x0f, 0xad, 0xd8, 0xd3, 0x61, 0xe0, 0xa1, 0xc3, 0x45, 0xfd, 0x63, 0x36, 0x78, 0xd6, 0x9e, 0x70, 0xe7, 0x65, 0x0b, 0x30, 0xc5, 0x54, 0xf9, 0x13, 0xa1, 0x38, 0x73, 0x9c, 0x37, 0x96, 0x4e, 0x21, 0xce, 0x98, 0xf5, 0x0f, 0x9f, 0x53, 0xdb, 0x85, 0x91, 0x4c, 0x0b, 0xa8, 0x6e, 0x02, 0x6f, 0x45, 0x82, 0x5d, 0x49, 0x62, 0xe7, 0x42, 0x5f, 0x67, 0xe7, 0x42, 0xf7, 0x6e, 0x2c, 0x04, 0x61, 0xb4, 0x2b, 0x12, 0x11, 0x2f, 0x54, 0x9c, 0x69, 0xbd, 0x41, 0xef, 0x12, 0xe6, 0xb2, 0xd3, 0x40, 0x69, 0xbf, 0x6a, 0x65, 0xbb, 0x43, 0x27, 0xc2, 0xd8, 0x10, 0x93, 0x0d, 0xea, 0xfd, 0xc8, 0xb0, 0x88, 0xf5, 0x1c, 0x33, 0xc0, 0xe4, 0x40, 0xf1, 0x2e, 0x8c, 0x7f, 0x80, 0x35, 0x39, 0x4a, 0x7b, 0xb6, 0x46, 0x74, 0x8b, 0x30, 0x72, 0x7d, 0x73, 0xdb, 0x0a, 0xff, 0x13, 0x0d, 0x75, 0xfe, 0xa2, 0xfe, 0xf1, 0xd8, 0xfe, 0x11, 0x61, 0xfa, 0x22, 0xb2, 0xc3, 0xf4, 0x3b, 0xf6, 0xe4, 0xc3, 0xf6, 0x27, 0x38, 0x87, 0x38, 0x5b, 0xb0, 0xe0, 0xa0, 0x4b, 0xb6, 0x79, 0x41, 0xb1, 0x56, 0x83, 0x62, 0x9e, 0x0f, 0x8a, 0x71, 0x2e, 0xc8, 0xf2, 0xae, 0x42, 0x30, 0x2b, 0xe2, 0xaa, 0x27, 0x8f, 0x94, 0x2e, 0xd7, 0x21, 0xce, 0xba, 0x5c, 0xbf, 0x00, 0x14, 0x93, 0x37, 0x46, 0xae, 0x58, 0x0e, 0x0e, 0xd3, 0x15, 0xf2, 0xc6, 0xd0, 0xe3, 0xd1, 0xa1, 0x77, 0x3c, 0x32, 0xad, 0xda, 0xb0, 0x34, 0x0f, 0x39, 0x7f, 0xd3, 0x6b, 0x50, 0xe2, 0xfd, 0xa3, 0xc2, 0x31, 0x32, 0x7d, 0x01, 0xa4, 0xa1, 0x67, 0xa4, 0x98, 0x48, 0xdf, 0x27, 0x31, 0xc7, 0x80, 0x49, 0xb1, 0x98, 0xdf, 0x86, 0xd8, 0xe2, 0x18, 0x8c, 0x4f, 0xa6, 0x59, 0x6a, 0x2c, 0x7d, 0x91, 0xf9, 0x6f, 0xe8, 0xcd, 0xe9, 0x2f, 0x3e, 0x28, 0xbc, 0xc7, 0x51, 0x78, 0x16, 0xc2, 0xa5, 0x5d, 0x1d, 0x22, 0x7a, 0xd3, 0x91, 0x79, 0x8e, 0xc2, 0xad, 0x18, 0x93, 0x1d, 0x66, 0x13, 0xc4, 0xcb, 0x46, 0xaf, 0x4e, 0x4e, 0x2f, 0xea, 0x1f, 0xf7, 0x8c, 0xff, 0xc9, 0x70, 0x69, 0xe2, 0x5d, 0xe6, 0xb5, 0x74, 0x8e, 0xd6, 0x8a, 0x15, 0x87, 0x4d, 0x7b, 0x0a, 0xc1, 0x31, 0xff, 0xa0, 0x32, 0xb6, 0x4b, 0xaf, 0x24, 0x2f, 0x2a, 0xf3, 0x8e, 0x96, 0xcf, 0x91, 0xce, 0xa9, 0xed, 0x9d, 0xa4, 0xd7, 0x9b, 0x4c, 0x3a, 0x23, 0xa0, 0xd7, 0x66, 0x39, 0x3a, 0xb4, 0xcd, 0xc4, 0x53, 0x29, 0x44, 0x3f, 0x22, 0x56, 0xe9, 0xc6, 0xf6, 0x1f, 0x1f, 0xf3, 0x27, 0xf8, 0x80, 0x4b, 0xcf, 0x62, 0xbe, 0xad, 0x1c, 0x5e, 0x61, 0x72, 0x78, 0x49, 0x02, 0xab, 0xaf, 0x2a, 0xec, 0x36, 0x88, 0x16, 0xe4, 0xb6, 0x42, 0x82, 0xb8, 0x53, 0x92, 0x3b, 0xf8, 0xe4, 0xc1, 0x52, 0x4c, 0x9d, 0x2a, 0x5b, 0x8e, 0x76, 0x18, 0x42, 0x32, 0x7c, 0x61, 0xad, 0x6c, 0xf7, 0x1a, 0x95, 0xc4, 0x60, 0xec, 0xc1, 0x52, 0x69, 0x2c, 0xd2, 0x4d, 0xd5, 0xe4, 0x24, 0x26, 0xe5, 0x99, 0xae, 0x78, 0x0f, 0x62, 0xc8, 0x6b, 0x90, 0x8d, 0xbb, 0x40, 0x49, 0x74, 0xe8, 0xd5, 0x6f, 0x9d, 0xd0, 0x17, 0xbf, 0xfc, 0x41, 0xc7, 0x09, 0xb0, 0x1d, 0xc0, 0xfe, 0x2d, 0x7c, 0x07, 0xc2, 0x73, 0xbb, 0x3a, 0xc2, 0x68, 0xe5, 0x07, 0xde, 0xcc, 0xbf, 0xc7, 0x6c, 0x80, 0x91, 0x32, 0xbd, 0x25, 0xf0, 0x01, 0x51, 0x8b, 0x60, 0xd9, 0x85, 0xf5, 0xa4, 0x5e, 0xde, 0x59, 0xf5, 0xb6, 0xa8, 0x77, 0xc7, 0x38, 0x0a, 0xdf, 0x8a, 0x10, 0x7d, 0x88, 0xe8, 0x9f, 0x1d, 0x43, 0x67, 0x89, 0x60, 0x5b, 0x0a, 0xef, 0x79, 0xbd, 0x14, 0xdb, 0x69, 0x99, 0x77, 0x10, 0xaf, 0x23, 0xe6, 0x85, 0x4f, 0x02, 0x42, 0x2b, 0x41, 0x05, 0x06, 0x16, 0xfb, 0x0b, 0xc2, 0x2e, 0xd9, 0x8c, 0xd2, 0x8b, 0x60, 0x9e, 0x85, 0x73, 0x9c, 0xb2, 0x4d, 0x0d, 0x57, 0x52, 0x1e, 0xa4, 0x28, 0x35, 0xaf, 0x83, 0x91, 0x8a, 0x49, 0xb2, 0x62, 0x39, 0x5e, 0x7a, 0x43, 0x61, 0x68, 0x4d, 0xfd, 0xf5, 0x98, 0x6a, 0x95, 0x93, 0xfc, 0x6d, 0x08, 0x47, 0xc8, 0xf1, 0x88, 0x6b, 0xf2, 0x4b, 0x18, 0xa6, 0x9c, 0x56, 0x1b, 0xe9, 0x57, 0xc0, 0x5b, 0xaa, 0x58, 0xbd, 0x31, 0x0a, 0xfc, 0x89, 0xc6, 0xf2, 0x14, 0xf1, 0x20, 0xb6, 0xeb, 0x8e, 0x70, 0xc7, 0x80, 0xb3, 0xab, 0x63, 0x11, 0xd6, 0xf3, 0x4f, 0x17, 0xfc, 0x33, 0xc2, 0x73, 0x73, 0x40, 0x11, 0xe8, 0x04, 0xf2, 0x06, 0xba, 0xb7, 0x3f, 0xaa, 0x0e, 0xfe, 0xd4, 0x4d, 0xcf, 0x42, 0x1a, 0xe1, 0x4f, 0x87, 0x71, 0x04, 0x58, 0x44, 0x23, 0x5e, 0x27, 0x91, 0xee, 0x48, 0x70, 0xf7, 0x29, 0xc7, 0x3d, 0x12, 0x98, 0x3f, 0xe4, 0xe3, 0xc5, 0xd5, 0xc3, 0xbe, 0x2e, 0xf3, 0x30, 0x6a, 0xc4, 0x6b, 0x38, 0x62, 0x2c, 0xf5, 0xf1, 0x52, 0xa2, 0x1f, 0x90, 0x3a, 0xce, 0x80, 0xa3, 0x21, 0x25, 0xc7, 0x7b, 0xd7, 0x92, 0x01, 0xda, 0xb5, 0x2c, 0x82, 0xf9, 0x84, 0xbf, 0x37, 0x3c, 0x17, 0xcb, 0x5b, 0x4e, 0xf9, 0x2d, 0xa5, 0x62, 0xbc, 0xff, 0x2c, 0x8b, 0xcb, 0x2c, 0x8e, 0x2d, 0x33, 0x27, 0xe1, 0x2f, 0x48, 0xad, 0x73, 0xdc, 0x53, 0xf4, 0x19, 0xdc, 0x10, 0x27, 0x39, 0x74, 0x98, 0x82, 0x63, 0x27, 0x76, 0x00, 0x53, 0x58, 0xbb, 0x45, 0x1b, 0xe1, 0xe2, 0x68, 0xdf, 0xfc, 0xb3, 0x59, 0x4f, 0x60, 0xca, 0x39, 0x4e, 0x2b, 0xc4, 0x89, 0x70, 0xb7, 0x93, 0xa5, 0x9d, 0xc0, 0xb4, 0x40, 0x56, 0x33, 0xa6, 0x1d, 0x12, 0x30, 0xcd, 0x3c, 0x20, 0x9e, 0x63, 0xf8, 0x7d, 0xc4, 0x23, 0x0b, 0x3d, 0x91, 0xd8, 0xd7, 0x6c, 0x3a, 0x4f, 0x08, 0x73, 0x81, 0x78, 0x98, 0xa5, 0xec, 0x15, 0x4d, 0x0c, 0x1e, 0xa2, 0xf3, 0x2e, 0x94, 0x97, 0xc4, 0x37, 0x31, 0x7c, 0x4d, 0x84, 0xd8, 0x3d, 0x5a, 0x0f, 0x8a, 0xe6, 0xc1, 0x51, 0x1d, 0x77, 0x0a, 0x53, 0x76, 0x20, 0x97, 0x1d, 0x8e, 0xc2, 0x4f, 0xc3, 0x61, 0x17, 0xdd, 0xcd, 0x52, 0x8c, 0x22, 0xc4, 0xbd, 0xc6, 0x75, 0x22, 0x6e, 0x2f, 0xc9, 0xc9, 0x0f, 0xb6, 0x7b, 0x64, 0xe8, 0x5f, 0x6f, 0xc3, 0xb6, 0x25, 0xef, 0xc0, 0x1c, 0x07, 0x25, 0x33, 0x5e, 0x0f, 0xab, 0x7d, 0x87, 0xe9, 0x8e, 0x7b, 0x44, 0x48, 0x7e, 0xd6, 0xfa, 0xa8, 0x2e, 0xac, 0x5c, 0x11, 0xa1, 0x5f, 0xa4, 0x3e, 0x59, 0x5b, 0x80, 0x79, 0xe6, 0x39, 0xee, 0x58, 0xde, 0x46, 0x4f, 0x47, 0x65, 0xfd, 0xf2, 0x76, 0xdb, 0x5b, 0x18, 0xb2, 0xb0, 0x5d, 0xe5, 0x2d, 0x12, 0x98, 0x4e, 0x32, 0x1d, 0x34, 0xe3, 0xa8, 0x9e, 0x11, 0x2e, 0x42, 0xda, 0x49, 0x58, 0x1f, 0x2f, 0x7d, 0xe1, 0x36, 0xb6, 0x90, 0xf4, 0x9b, 0x46, 0xb9, 0xc3, 0x80, 0xb1, 0x3c, 0x87, 0xe1, 0x62, 0xad, 0x5a, 0x56, 0x03, 0x96, 0x9b, 0x46, 0x65, 0x2e, 0x87, 0x7c, 0x1c, 0xd9, 0x11, 0x08, 0x17, 0x29, 0x36, 0x8c, 0xcf, 0xa0, 0x1f, 0x7b, 0x1b, 0xb1, 0x4b, 0x34, 0x11, 0x4c, 0x7e, 0x1a, 0x53, 0x59, 0x8b, 0xcc, 0xac, 0x45, 0xe6, 0xd3, 0xbc, 0x45, 0xe6, 0x1e, 0xde, 0x73, 0x9f, 0xef, 0x63, 0x3d, 0xff, 0x8c, 0x98, 0xc4, 0x7b, 0xee, 0xf3, 0x57, 0x59, 0x7c, 0x03, 0x97, 0x9e, 0x79, 0x11, 0xd6, 0xaf, 0x06, 0xa9, 0xf7, 0x52, 0x29, 0xb1, 0x11, 0xaa, 0xdf, 0xe7, 0xeb, 0xcd, 0x4f, 0x61, 0x3b, 0x70, 0xc4, 0x98, 0x5f, 0xe2, 0xbc, 0x74, 0xf1, 0x68, 0xa3, 0x2c, 0x48, 0x15, 0xa2, 0xbd, 0xd9, 0x08, 0x71, 0xec, 0x9a, 0xd0, 0xbf, 0x32, 0xfb, 0x51, 0xf6, 0x31, 0x0a, 0x9d, 0x19, 0x5c, 0x45, 0xd6, 0xd2, 0x94, 0x21, 0x82, 0x89, 0xbe, 0xc0, 0x37, 0x81, 0x6c, 0xec, 0x5d, 0x47, 0x31, 0xb6, 0x10, 0x29, 0x0c, 0x0a, 0x5a, 0x4d, 0x53, 0x00, 0x63, 0x68, 0xe7, 0x4c, 0xd3, 0x11, 0xd6, 0x39, 0xee, 0xe8, 0xea, 0x70, 0x81, 0x62, 0xb7, 0x38, 0xe3, 0x20, 0xdc, 0xf1, 0x13, 0x1c, 0x39, 0x9f, 0x27, 0x8a, 0x16, 0x47, 0xa1, 0x2e, 0xc2, 0xea, 0x68, 0x46, 0x89, 0x3d, 0x05, 0x66, 0xfc, 0xc5, 0xc9, 0xe8, 0x19, 0x9b, 0x53, 0x58, 0x3d, 0x4c, 0xf4, 0xcd, 0xf5, 0xd8, 0x81, 0xa2, 0xfe, 0x7b, 0xfe, 0xf9, 0x6c, 0xb9, 0xed, 0x2e, 0x05, 0xfa, 0xce, 0x76, 0x21, 0x6f, 0xf3, 0x5d, 0x68, 0x87, 0xfa, 0x45, 0xec, 0x0f, 0x53, 0xfa, 0xe5, 0x32, 0xbf, 0x21, 0xec, 0x42, 0x9b, 0x44, 0xdf, 0x2d, 0xae, 0xaf, 0xc4, 0xc9, 0xbb, 0xa9, 0x6e, 0x86, 0x4e, 0xea, 0xc9, 0x19, 0x87, 0xb5, 0xb5, 0xd3, 0x0f, 0x39, 0xeb, 0x00, 0x64, 0xb3, 0x64, 0x65, 0x3c, 0x73, 0x24, 0x07, 0xc1, 0xa2, 0xfe, 0x94, 0x0b, 0x39, 0x86, 0x03, 0xb8, 0xf2, 0xd9, 0x39, 0x47, 0xb1, 0x78, 0xe7, 0x2c, 0x2a, 0x93, 0xaf, 0x8b, 0xd0, 0x17, 0xaa, 0x29, 0xa3, 0xaf, 0x9a, 0xa1, 0xc7, 0x6f, 0x66, 0x57, 0xbd, 0xed, 0x7d, 0x1c, 0x87, 0xb8, 0xae, 0x46, 0x7f, 0xb7, 0x96, 0x9d, 0x10, 0x38, 0x00, 0xb4, 0x5b, 0x17, 0xed, 0xd1, 0xbc, 0x8c, 0x48, 0xc4, 0x16, 0xae, 0x6c, 0xcf, 0xbb, 0xc7, 0xac, 0xa7, 0x2f, 0xa5, 0xf4, 0x15, 0x4b, 0x19, 0x6c, 0x54, 0xe8, 0xc5, 0x6e, 0xc7, 0x1d, 0x66, 0xf6, 0xf5, 0x94, 0x3e, 0x87, 0x74, 0x90, 0x70, 0x79, 0xf7, 0x88, 0xd6, 0xbc, 0x7b, 0x1c, 0x7a, 0xe2, 0x83, 0xd8, 0x64, 0xec, 0x7b, 0xd2, 0x82, 0x6f, 0x3a, 0xf4, 0x97, 0x3d, 0x52, 0x3c, 0xb3, 0x79, 0x7a, 0x29, 0x91, 0xdb, 0x76, 0xcc, 0x19, 0x23, 0x27, 0x87, 0x0b, 0x01, 0x5b, 0x60, 0x97, 0x59, 0xcc, 0x4a, 0x31, 0x59, 0xef, 0x17, 0x10, 0x53, 0xc3, 0x9e, 0xc2, 0xc3, 0x1f, 0x3f, 0xa0, 0x77, 0x89, 0x11, 0x1e, 0x23, 0xdd, 0xc1, 0xf4, 0x58, 0x7e, 0x7e, 0x21, 0xff, 0xb6, 0x95, 0x08, 0xc6, 0x0f, 0x58, 0x3f, 0xa4, 0x48, 0x10, 0x63, 0x9d, 0x9c, 0x21, 0x81, 0x71, 0x0f, 0x86, 0x12, 0x26, 0x66, 0xb2, 0xf0, 0x7a, 0xfa, 0x92, 0x14, 0x9d, 0xea, 0x6e, 0x7c, 0x15, 0x7f, 0x6b, 0x71, 0x36, 0xb1, 0xe5, 0xdd, 0x71, 0xb0, 0xe3, 0xbf, 0x47, 0x76, 0x31, 0x9b, 0xf8, 0xc7, 0x55, 0x58, 0x3f, 0x7d, 0xce, 0x3d, 0x17, 0x17, 0xa0, 0x84, 0xaf, 0x07, 0x6d, 0xe6, 0x35, 0x58, 0xa2, 0x3e, 0x68, 0x47, 0x48, 0x3d, 0x6b, 0x5b, 0xeb, 0x46, 0xbc, 0xbc, 0xd6, 0x4d, 0xa7, 0x48, 0x6b, 0xa3, 0x09, 0xfd, 0x8d, 0x0e, 0x07, 0xca, 0x48, 0x36, 0xd2, 0x7c, 0x82, 0xd2, 0xbd, 0x9f, 0xbe, 0x1e, 0x3d, 0xe6, 0x53, 0x30, 0xf2, 0xf1, 0x68, 0x38, 0x8b, 0xd4, 0xa5, 0x0e, 0xdd, 0xef, 0xd9, 0x7c, 0x92, 0xaf, 0xbb, 0x50, 0x7e, 0xa8, 0x03, 0x0a, 0x42, 0x45, 0x39, 0x80, 0xbc, 0x92, 0xd5, 0xb1, 0xa8, 0x5b, 0x62, 0xa2, 0x99, 0xae, 0x98, 0xbe, 0x72, 0x9a, 0x8c, 0x6b, 0xa6, 0x1e, 0xef, 0x1d, 0x32, 0x5c, 0xbf, 0x3c, 0x43, 0x37, 0x38, 0x56, 0xaf, 0x7f, 0x48, 0x63, 0x35, 0x69, 0x80, 0xfa, 0x37, 0x06, 0xe7, 0x61, 0x43, 0x27, 0x8d, 0xc8, 0x78, 0x1c, 0x91, 0xd7, 0x0f, 0x3a, 0xee, 0x20, 0x59, 0x20, 0xee, 0x34, 0xb7, 0x4e, 0x97, 0x3d, 0x6a, 0x1c, 0xf5, 0x32, 0x66, 0x77, 0xf0, 0x09, 0x94, 0x48, 0x9c, 0xa2, 0x0f, 0x36, 0xdb, 0x0e, 0x20, 0xae, 0x2a, 0xed, 0x8e, 0x83, 0xfb, 0xe2, 0x0b, 0x58, 0xce, 0xf5, 0x69, 0x77, 0xf0, 0xbe, 0xbb, 0xbc, 0x5e, 0xc2, 0x35, 0xa3, 0xe1, 0x54, 0x66, 0x06, 0x8d, 0x99, 0x1b, 0xb4, 0x46, 0xfb, 0x70, 0xe2, 0x54, 0x74, 0xc2, 0xef, 0xa1, 0xef, 0x14, 0xf0, 0xef, 0x6f, 0xd1, 0xe9, 0x85, 0x2a, 0xdf, 0x20, 0xf6, 0x1a, 0x18, 0x5e, 0x9d, 0x8a, 0x63, 0xd7, 0xb0, 0x98, 0xe9, 0xc1, 0x08, 0x05, 0xae, 0x17, 0x8a, 0x16, 0x1e, 0x46, 0xce, 0xe8, 0x0f, 0xc7, 0x54, 0xa9, 0x5a, 0x01, 0x5f, 0xec, 0xc5, 0x59, 0xde, 0x85, 0x70, 0x0f, 0x8d, 0x44, 0xe3, 0x71, 0x9a, 0x61, 0xfd, 0x54, 0x2b, 0x50, 0xf4, 0xfe, 0x66, 0x5b, 0x18, 0x57, 0x5f, 0xaa, 0x55, 0xd2, 0xe9, 0x64, 0x13, 0x59, 0x9e, 0xa4, 0x44, 0x81, 0xae, 0xf1, 0x34, 0xba, 0x8c, 0xdb, 0x25, 0xbd, 0x78, 0x94, 0x8f, 0xe9, 0xcf, 0x4e, 0x52, 0xaa, 0x71, 0x1f, 0x62, 0xf6, 0xf2, 0x51, 0xff, 0xd9, 0x21, 0x86, 0x79, 0xde, 0xfb, 0xe8, 0xfc, 0x77, 0xd0, 0xff, 0xe9, 0xa3, 0xf9, 0x2d, 0x13, 0xfb, 0xf2, 0xb3, 0xd7, 0x1c, 0xf7, 0x90, 0xce, 0x22, 0xef, 0x43, 0x98, 0xde, 0x65, 0x7d, 0x34, 0x0d, 0x88, 0xc2, 0xfa, 0xe8, 0x56, 0x4a, 0xdd, 0xc0, 0x70, 0x77, 0x40, 0x9e, 0x82, 0xa3, 0xfd, 0xb3, 0xb5, 0x18, 0x72, 0xc8, 0xd7, 0x1d, 0xf7, 0x04, 0xec, 0x07, 0x9c, 0x72, 0x72, 0x20, 0x36, 0xd8, 0x76, 0xc0, 0xa9, 0x98, 0x83, 0x0d, 0xd5, 0x3a, 0xa4, 0x6d, 0x20, 0xb9, 0xe9, 0xdf, 0x94, 0xeb, 0x45, 0xfb, 0xce, 0x0e, 0xb0, 0x2b, 0xf0, 0x99, 0x2f, 0x30, 0x81, 0xc6, 0x82, 0xa2, 0x0f, 0x34, 0xd8, 0xf6, 0x4b, 0x70, 0x07, 0x9d, 0x3d, 0xf2, 0x62, 0xe6, 0x84, 0x4b, 0xb8, 0xf2, 0xd1, 0xd7, 0x52, 0xbf, 0x7c, 0xd1, 0xd7, 0xd5, 0x21, 0xd8, 0x30, 0x2f, 0xca, 0xd3, 0xb6, 0x0f, 0x02, 0xb4, 0x37, 0x44, 0xd6, 0x2f, 0xa4, 0x33, 0x3e, 0xba, 0xf9, 0x3c, 0x95, 0x88, 0xfe, 0x96, 0x31, 0x99, 0x68, 0x3f, 0xb2, 0x77, 0x75, 0xac, 0x41, 0xda, 0x6b, 0x03, 0x79, 0x77, 0x48, 0xdd, 0xc8, 0xa9, 0x26, 0x73, 0x82, 0x43, 0xff, 0xbb, 0x5a, 0xf4, 0x0b, 0x70, 0x06, 0xbe, 0x76, 0x01, 0x69, 0x5f, 0xa2, 0x27, 0x89, 0x99, 0xd2, 0x6f, 0x6b, 0xa9, 0x54, 0x11, 0x12, 0x37, 0xa1, 0x9c, 0xdd, 0xb8, 0x3e, 0x82, 0x6b, 0x87, 0xa5, 0x14, 0x1a, 0x61, 0x6a, 0x6c, 0xaf, 0x94, 0xbc, 0x51, 0x7f, 0x00, 0xc7, 0x04, 0xe6, 0x7b, 0x4d, 0x1d, 0xa1, 0xd8, 0x33, 0xd7, 0xb6, 0x0f, 0xf6, 0xcc, 0xb5, 0xe7, 0x1d, 0x85, 0x4f, 0xf5, 0x85, 0xdd, 0x18, 0x7a, 0x46, 0x9b, 0x3f, 0xb0, 0x2f, 0x99, 0xfd, 0xcb, 0xd1, 0x23, 0x8d, 0x85, 0xce, 0x50, 0xd4, 0x3d, 0x43, 0x63, 0x93, 0xc6, 0x81, 0x6e, 0xed, 0xc5, 0x05, 0x18, 0xef, 0xe0, 0x7c, 0x31, 0xd7, 0x3c, 0x3a, 0x2d, 0xc8, 0x70, 0xfa, 0xf7, 0x98, 0x66, 0x38, 0x8e, 0x23, 0x23, 0x9e, 0x8f, 0x0e, 0xf3, 0x7e, 0x88, 0xc1, 0x1f, 0xe6, 0x35, 0xd4, 0xb2, 0xb4, 0xe9, 0x6a, 0x9a, 0x35, 0x9a, 0x1e, 0x4f, 0x34, 0x98, 0x5e, 0xc0, 0xd2, 0xc7, 0xb2, 0x1c, 0x3a, 0xac, 0xab, 0x99, 0x4e, 0x47, 0x42, 0x0c, 0x9d, 0x2a, 0x48, 0x67, 0xf5, 0x5c, 0x62, 0x96, 0xcb, 0x82, 0x96, 0x0b, 0xcb, 0x45, 0x89, 0x5e, 0x43, 0xbc, 0x51, 0xb5, 0xcf, 0xf4, 0xe4, 0x90, 0xce, 0xcd, 0xe9, 0x41, 0xb8, 0x0f, 0x21, 0xfa, 0xaf, 0xec, 0x6b, 0x88, 0xc7, 0x24, 0x92, 0x6d, 0x72, 0x26, 0x5a, 0x80, 0x2f, 0x0e, 0x91, 0xf5, 0xfc, 0x3c, 0x1f, 0xb1, 0x38, 0xa7, 0xea, 0x8f, 0xd0, 0x77, 0x13, 0x91, 0x9f, 0x59, 0x31, 0x8b, 0x09, 0xfc, 0xc4, 0x28, 0xff, 0x13, 0xda, 0x7c, 0x29, 0x5a, 0xfc, 0xcd, 0x9a, 0x14, 0x48, 0x2b, 0x6d, 0x61, 0x31, 0xcb, 0xa1, 0xbb, 0xe0, 0xd9, 0xd0, 0x81, 0xab, 0x64, 0x33, 0x85, 0x44, 0x3d, 0x8d, 0x70, 0xa0, 0xe7, 0x51, 0x61, 0x05, 0xfe, 0x50, 0x7b, 0xd9, 0xc3, 0xd6, 0x27, 0x9c, 0xfa, 0x4f, 0x40, 0xf6, 0x5a, 0x88, 0xae, 0x2d, 0x2c, 0x51, 0xaf, 0xe3, 0xce, 0xca, 0xf6, 0xba, 0x27, 0x9a, 0x27, 0xf1, 0x19, 0x02, 0xc7, 0x29, 0xfc, 0xbe, 0x16, 0xed, 0x18, 0xce, 0xb1, 0x63, 0xb6, 0xaa, 0xf3, 0x9e, 0x24, 0x9a, 0xb5, 0x19, 0x50, 0xa3, 0x18, 0x62, 0xc9, 0x6e, 0x43, 0x31, 0xcc, 0xd2, 0x65, 0x4a, 0x99, 0xb2, 0xff, 0x8a, 0x47, 0xec, 0xe1, 0x36, 0xfd, 0x4e, 0x7a, 0x1b, 0x82, 0x85, 0x92, 0xfa, 0x79, 0x2e, 0x0c, 0x5d, 0xb3, 0xfd, 0xbd, 0x79, 0x33, 0xca, 0x17, 0x57, 0x02, 0x53, 0xe2, 0x52, 0x5b, 0xc1, 0x48, 0x16, 0x3e, 0xf5, 0xf1, 0x9a, 0xbf, 0x1b, 0x1a, 0x57, 0xad, 0x3d, 0xe2, 0x6b, 0x11, 0x6f, 0xbb, 0xab, 0x1a, 0x96, 0x22, 0x5e, 0x64, 0xab, 0x07, 0x2c, 0xb3, 0x00, 0xdb, 0x2d, 0xc8, 0xd6, 0xe0, 0xa8, 0x73, 0xe5, 0xbf, 0xa9, 0xa2, 0x33, 0x82, 0xf2, 0xc1, 0x1d, 0xe3, 0x76, 0xfb, 0x1b, 0x24, 0xbd, 0x5f, 0x5a, 0x61, 0xf6, 0x16, 0x2b, 0x15, 0x31, 0x06, 0xd9, 0xe4, 0x73, 0x57, 0x17, 0x8b, 0x57, 0xbd, 0x6f, 0xab, 0xef, 0x97, 0x85, 0x6d, 0x6b, 0x4d, 0x36, 0x70, 0x60, 0xe9, 0x06, 0x37, 0x4b, 0x53, 0xcc, 0x31, 0x06, 0xc5, 0x58, 0x75, 0x08, 0x69, 0x4c, 0x6c, 0x76, 0x9f, 0xac, 0xd2, 0x4c, 0x21, 0x1a, 0xe4, 0x62, 0xaa, 0x2e, 0xf6, 0xb9, 0xc5, 0x2e, 0xad, 0x54, 0x05, 0x3e, 0xbd, 0x42, 0x7b, 0x72, 0x10, 0x5e, 0xe8, 0xf0, 0x1f, 0x7d, 0x6a, 0x1f, 0x8e, 0xb5, 0x8e, 0x48, 0x4f, 0xfc, 0x69, 0x94, 0x00, 0xab, 0xd1, 0x58, 0xf2, 0x75, 0x31, 0xf5, 0x30, 0x42, 0xab, 0x0c, 0x9f, 0x86, 0x83, 0xb1, 0xe7, 0x46, 0xfc, 0x86, 0xde, 0x93, 0xe8, 0x4f, 0x02, 0xd1, 0x4c, 0x58, 0x4c, 0x7d, 0x05, 0xe1, 0x08, 0x25, 0xde, 0xbb, 0x6e, 0x29, 0x7c, 0xfa, 0x22, 0xfb, 0x66, 0xee, 0xa1, 0xca, 0x76, 0x37, 0x04, 0x63, 0xbd, 0xee, 0xa5, 0xd7, 0xb1, 0xde, 0xc6, 0x6a, 0xb7, 0x78, 0xcd, 0x1b, 0x8e, 0xbe, 0x15, 0xc7, 0x7c, 0x56, 0x1c, 0xaf, 0x0f, 0xfe, 0xad, 0xdd, 0x6d, 0xaa, 0x76, 0x2f, 0xd5, 0x6a, 0x7d, 0x0d, 0x6b, 0x9d, 0xc0, 0x6a, 0x3d, 0x48, 0x93, 0xff, 0xb7, 0x76, 0xe4, 0xd2, 0x85, 0x1c, 0x76, 0x16, 0xf5, 0x27, 0x6e, 0x08, 0x77, 0x8c, 0x82, 0x2b, 0x9e, 0x22, 0xb4, 0xfd, 0x9a, 0x44, 0x69, 0x36, 0x48, 0xdc, 0x4c, 0x77, 0xa1, 0xbb, 0x9d, 0x1c, 0xaf, 0xe2, 0x5e, 0x42, 0xdc, 0xb8, 0x6e, 0xa7, 0x86, 0x45, 0xea, 0xf8, 0x61, 0x33, 0xef, 0xaf, 0x55, 0x29, 0xcc, 0xc0, 0x96, 0x3e, 0x54, 0xcf, 0xe6, 0x15, 0xea, 0x51, 0xf2, 0xc4, 0xcf, 0x7b, 0x3c, 0xab, 0xc0, 0xe2, 0x78, 0x18, 0x4c, 0xef, 0x63, 0x6f, 0x81, 0x0d, 0x04, 0xc8, 0x83, 0x79, 0xb0, 0x02, 0xb6, 0xc0, 0x51, 0x7d, 0x1f, 0xb5, 0xd0, 0x1f, 0x1b, 0x76, 0x0d, 0xd1, 0x13, 0xe9, 0xa6, 0x78, 0xa6, 0xfa, 0xbd, 0xc5, 0x21, 0x78, 0xb2, 0xee, 0x68, 0x95, 0xd1, 0x5b, 0x31, 0xd6, 0x7c, 0x39, 0x05, 0xfe, 0xee, 0x47, 0x2a, 0xf4, 0x2c, 0x8c, 0x59, 0xaa, 0x24, 0x32, 0xa2, 0x14, 0x48, 0xad, 0xf1, 0x31, 0xa0, 0x37, 0x61, 0x24, 0x8f, 0x23, 0xc3, 0x71, 0x07, 0xbd, 0x93, 0xa5, 0xe9, 0xf2, 0xcd, 0xe5, 0x19, 0x8e, 0x39, 0xee, 0xf1, 0x84, 0xdf, 0x7f, 0x03, 0xc7, 0xcb, 0x3a, 0x1c, 0xfb, 0xa7, 0xcc, 0x77, 0xd0, 0xf7, 0xaa, 0x61, 0x0b, 0xa6, 0xec, 0x8a, 0xe6, 0x36, 0xd3, 0x17, 0x56, 0x38, 0xcd, 0x6d, 0xf9, 0x64, 0xfa, 0x1b, 0x30, 0x5f, 0x2c, 0xce, 0x22, 0x58, 0xbe, 0xdf, 0x1f, 0xbe, 0xa3, 0xc7, 0xcc, 0xd3, 0x68, 0x07, 0xa9, 0xa3, 0x10, 0x7a, 0xc3, 0x77, 0x9c, 0x67, 0x6f, 0x7e, 0x7d, 0xf6, 0x6c, 0x6a, 0x36, 0xfb, 0x92, 0x69, 0x96, 0xbf, 0x19, 0x73, 0x60, 0xcf, 0xfb, 0x9f, 0xf0, 0xec, 0xc7, 0x3c, 0xa6, 0xf0, 0x1d, 0x8a, 0xe5, 0x1c, 0x8d, 0x98, 0x49, 0x38, 0x9a, 0xed, 0x1f, 0x7d, 0xff, 0x17, 0x5a, 0x69, 0x13, 0x69, 0x8f, 0x69, 0xcd, 0x2c, 0xb2, 0x64, 0xd9, 0x39, 0x79, 0x05, 0x7e, 0x33, 0xcd, 0x36, 0x86, 0x44, 0xff, 0x4c, 0x9c, 0x61, 0x0a, 0xa1, 0xb8, 0x01, 0x0c, 0x66, 0x84, 0x46, 0x05, 0x0c, 0xe0, 0x77, 0x84, 0xe7, 0x2a, 0xa0, 0xef, 0x9b, 0xa1, 0xcf, 0xbb, 0x47, 0x95, 0x8b, 0x9b, 0xe9, 0xd4, 0x23, 0xe8, 0x07, 0xa3, 0xbf, 0x0a, 0x0f, 0xcb, 0xb5, 0x48, 0xe3, 0xee, 0xf1, 0xa0, 0x7d, 0x8d, 0xa5, 0x33, 0x6f, 0x75, 0x63, 0xad, 0x19, 0xf0, 0x88, 0xfa, 0x3e, 0x26, 0xb5, 0x6b, 0x95, 0x98, 0x89, 0xab, 0xc8, 0x0c, 0xfc, 0x59, 0x85, 0x91, 0xdd, 0xff, 0x63, 0x2e, 0xfa, 0x9f, 0xa3, 0x6c, 0x62, 0x22, 0xc9, 0xa8, 0xfb, 0xbf, 0x2d, 0xa0, 0x98, 0x9e, 0x59, 0x9c, 0x01, 0x78, 0x42, 0xcd, 0xe1, 0x27, 0xbf, 0x4f, 0x9c, 0xca, 0xf9, 0xa2, 0x15, 0x3c, 0x4a, 0x92, 0x21, 0xfe, 0xb2, 0xa0, 0xf2, 0xa6, 0x77, 0x3e, 0x33, 0x86, 0x94, 0x21, 0xa9, 0x27, 0x3d, 0x9b, 0xbc, 0x24, 0xe9, 0xcd, 0x48, 0xab, 0x67, 0x69, 0x8f, 0x62, 0xc8, 0x24, 0xd7, 0xdc, 0x2e, 0x97, 0xbf, 0xc1, 0xeb, 0x5e, 0xc2, 0xa4, 0xeb, 0x28, 0xf4, 0x43, 0xd8, 0xad, 0xfa, 0x82, 0x61, 0x55, 0x92, 0x34, 0xa3, 0xe8, 0xfd, 0x4f, 0x50, 0xaa, 0x09, 0x53, 0x15, 0xcb, 0xef, 0x6b, 0x55, 0x49, 0x1a, 0x45, 0x2b, 0x49, 0xcd, 0x51, 0x78, 0x03, 0xf1, 0xf2, 0x24, 0x26, 0x11, 0x0b, 0x95, 0x28, 0xb3, 0x12, 0xd1, 0x77, 0x75, 0x2b, 0x74, 0x02, 0xb5, 0x8e, 0x97, 0xc3, 0x7c, 0xd4, 0x89, 0x79, 0xe3, 0x70, 0x74, 0xc6, 0x8a, 0x7d, 0x28, 0x85, 0x64, 0x5a, 0x53, 0x0b, 0xe8, 0x7d, 0xc4, 0x5b, 0x70, 0x34, 0x10, 0x8c, 0xb6, 0x1f, 0x67, 0x79, 0xd2, 0x01, 0xe7, 0x4d, 0x23, 0x21, 0x07, 0xdc, 0xd0, 0x00, 0x03, 0xba, 0x0e, 0xfa, 0xc7, 0x7a, 0x01, 0xbd, 0x17, 0xd5, 0xaf, 0x72, 0x4a, 0x30, 0xf2, 0x80, 0xaa, 0xc5, 0x2a, 0x0f, 0xa2, 0x20, 0xfe, 0x23, 0x5f, 0x19, 0xfc, 0x0e, 0xa9, 0xff, 0x46, 0xf7, 0xa3, 0x24, 0x6f, 0xc4, 0x6e, 0x1a, 0x2a, 0x65, 0x4e, 0xc1, 0x35, 0xf4, 0x8b, 0x3e, 0xae, 0x9d, 0xa4, 0x99, 0xdd, 0xff, 0x8d, 0xde, 0x47, 0xfa, 0x6c, 0x1d, 0xd2, 0x37, 0xdc, 0x44, 0xff, 0x5f, 0xa2, 0x99, 0xf0, 0x12, 0xc9, 0x58, 0x5b, 0xaf, 0x79, 0xd9, 0x7d, 0x1e, 0x39, 0x09, 0xf5, 0x2d, 0x52, 0x6f, 0xd5, 0x56, 0x50, 0xb4, 0x2b, 0x44, 0x04, 0xeb, 0x41, 0xbe, 0xb7, 0x12, 0xd3, 0x71, 0x6e, 0xb4, 0xee, 0xe6, 0x7b, 0x32, 0x31, 0x96, 0xe0, 0x71, 0x92, 0xff, 0x64, 0x7d, 0xc9, 0xca, 0xef, 0x82, 0x3d, 0xa5, 0x38, 0xac, 0x0f, 0x71, 0xdf, 0x55, 0x8e, 0xa7, 0x34, 0x5c, 0x07, 0x2d, 0x24, 0x5f, 0xcc, 0x5a, 0x8b, 0xf8, 0x18, 0x46, 0x11, 0x6f, 0xa5, 0x7d, 0x29, 0x8c, 0x97, 0x74, 0x5a, 0x64, 0xf7, 0x51, 0xd8, 0x29, 0xab, 0xd8, 0x16, 0xea, 0x99, 0x8f, 0x3d, 0x13, 0x3e, 0x45, 0xbb, 0x84, 0x75, 0x4d, 0x7d, 0x1c, 0xa5, 0xc6, 0x4b, 0x5a, 0xab, 0x14, 0xa8, 0xa1, 0x6f, 0x29, 0x59, 0x53, 0xcc, 0x74, 0xa7, 0xf4, 0xb3, 0x75, 0xd1, 0xd9, 0x32, 0x9f, 0xd6, 0xe8, 0xac, 0xfe, 0x4f, 0x2b, 0x46, 0x8c, 0xa3, 0xff, 0x39, 0xe2, 0x3c, 0xed, 0xdb, 0xfa, 0xec, 0x69, 0x76, 0x46, 0x3b, 0xa8, 0xf7, 0xc1, 0xbe, 0x85, 0x2b, 0x16, 0x58, 0x62, 0x2a, 0x26, 0x79, 0x4d, 0x0e, 0xd3, 0x9d, 0xf4, 0x88, 0x3a, 0xf7, 0x7e, 0x8b, 0xd6, 0x66, 0xd6, 0x3a, 0x76, 0x27, 0xeb, 0x24, 0x3f, 0x35, 0x71, 0x48, 0x1e, 0x27, 0xe6, 0x71, 0x6a, 0x79, 0x22, 0xc3, 0xf3, 0x64, 0xb1, 0x3c, 0x2f, 0x51, 0x1e, 0xfa, 0xa2, 0x0f, 0xc4, 0xd3, 0xcb, 0x89, 0x50, 0x60, 0xd8, 0x68, 0x58, 0x6b, 0x38, 0x64, 0xd8, 0x6d, 0xb8, 0x60, 0xe8, 0x33, 0x9a, 0x8d, 0x69, 0xc6, 0xa9, 0xc6, 0x62, 0x43, 0x8b, 0x71, 0x4f, 0x4c, 0x52, 0x8c, 0x60, 0x84, 0x11, 0x36, 0xcb, 0x33, 0x31, 0xde, 0x18, 0x5f, 0xcc, 0xc2, 0x98, 0x96, 0x98, 0x15, 0x31, 0x1d, 0xb1, 0x81, 0xd8, 0x2e, 0x8b, 0x6c, 0xf1, 0x5b, 0x5e, 0xb5, 0x1c, 0xb2, 0x9c, 0xb3, 0x5c, 0xb2, 0x5c, 0x1d, 0x61, 0x1d, 0x61, 0x32, 0x59, 0x21, 0x27, 0x26, 0xcd, 0xb4, 0xc9, 0xd4, 0x6c, 0x0a, 0x99, 0x06, 0x0c, 0xaf, 0x19, 0x5e, 0x8c, 0x3d, 0x1c, 0xdb, 0x63, 0x4e, 0x34, 0x07, 0xcd, 0x21, 0xf3, 0x66, 0x73, 0xb7, 0x79, 0xab, 0xa5, 0xdf, 0x92, 0x6c, 0x89, 0x8f, 0xbb, 0x1e, 0xd7, 0x13, 0x6b, 0x34, 0x5c, 0x31, 0x9f, 0x32, 0x7f, 0x60, 0xa8, 0x88, 0x31, 0x99, 0xfb, 0xf5, 0x87, 0x62, 0x76, 0xc4, 0x6c, 0x8c, 0x4b, 0x8e, 0x2b, 0x88, 0x7b, 0x3a, 0xae, 0x2b, 0xe6, 0x52, 0xcc, 0x8d, 0xd8, 0x1c, 0xe3, 0x75, 0x43, 0xa1, 0xf9, 0xb2, 0xb9, 0xc7, 0xd0, 0x6d, 0x38, 0x19, 0x97, 0x15, 0x97, 0x1a, 0x07, 0x26, 0x73, 0x6c, 0x85, 0xb1, 0xca, 0xb8, 0x10, 0xce, 0xeb, 0x53, 0xf4, 0x76, 0xdd, 0x95, 0x48, 0xc4, 0x3b, 0x60, 0xd4, 0x35, 0xb1, 0x6f, 0x72, 0x5f, 0xc6, 0x76, 0x56, 0xfa, 0x8d, 0xba, 0x40, 0x63, 0x5b, 0xe3, 0x35, 0xb6, 0x23, 0xba, 0xf2, 0x1b, 0x46, 0x5d, 0x4b, 0x6b, 0xaf, 0xba, 0x3f, 0xba, 0xb2, 0x0d, 0xd3, 0x82, 0x1f, 0x6b, 0xb1, 0x76, 0x8a, 0xfd, 0x41, 0x8b, 0x3d, 0x41, 0xb1, 0xab, 0x6a, 0xcc, 0xdb, 0x6f, 0xd4, 0xd5, 0x29, 0x2d, 0xe7, 0x59, 0x2c, 0x7c, 0x15, 0x8c, 0x8b, 0x2e, 0x68, 0xbb, 0xac, 0x31, 0x66, 0x78, 0x54, 0x5e, 0xd6, 0xba, 0xbc, 0x31, 0xeb, 0x32, 0x8f, 0x3d, 0xc6, 0x62, 0xcb, 0xb2, 0x2e, 0xb3, 0xd8, 0xe3, 0x6a, 0xac, 0x2f, 0x12, 0xc1, 0x58, 0x09, 0x8b, 0xd5, 0x5f, 0x45, 0x9e, 0x57, 0x43, 0xc6, 0x62, 0x59, 0xad, 0x4c, 0x24, 0xf2, 0x99, 0xcd, 0xa8, 0xf3, 0xcb, 0xcd, 0xed, 0x6d, 0x8b, 0x25, 0x6c, 0xc3, 0x67, 0xf6, 0x68, 0x6c, 0x5b, 0x24, 0xd2, 0x0b, 0x46, 0x0f, 0x8f, 0x7d, 0x04, 0x14, 0x33, 0xcc, 0xe5, 0xb1, 0x3f, 0x60, 0x79, 0x18, 0x9b, 0xc7, 0x63, 0xc8, 0xb3, 0xef, 0x33, 0xf4, 0x3c, 0x79, 0xec, 0x0a, 0xc5, 0xcc, 0x6a, 0xac, 0x07, 0x28, 0xe6, 0xc1, 0x58, 0xb0, 0xb1, 0x2d, 0xf8, 0x47, 0x16, 0x5b, 0xac, 0xc6, 0xae, 0x02, 0xe7, 0x59, 0x16, 0xa5, 0x24, 0x9e, 0xf3, 0xfd, 0xcb, 0xa5, 0xe6, 0xa6, 0xf3, 0x94, 0x06, 0x85, 0x86, 0x91, 0xad, 0x81, 0x8b, 0xaa, 0x24, 0xf4, 0x18, 0x93, 0x5a, 0x1a, 0x2e, 0xf2, 0x98, 0x05, 0x63, 0x8d, 0x6a, 0x22, 0x52, 0x76, 0x18, 0xe2, 0x87, 0x50, 0x62, 0x6c, 0x08, 0x25, 0xc6, 0x34, 0xca, 0x4f, 0xfb, 0xf6, 0x3b, 0x0d, 0x13, 0x1a, 0x57, 0x7c, 0x02, 0x6a, 0xcc, 0x63, 0x48, 0x1b, 0x12, 0xeb, 0x34, 0xdc, 0xab, 0xc5, 0x22, 0x7d, 0x95, 0xb5, 0x86, 0xf4, 0xf6, 0x96, 0xe6, 0xdf, 0xf2, 0x98, 0xc7, 0x6c, 0x78, 0xa8, 0xb9, 0xa9, 0x65, 0x29, 0x8a, 0x9a, 0xd2, 0xaa, 0x0c, 0xf7, 0x61, 0x4c, 0x4b, 0xf3, 0x18, 0xb2, 0xea, 0x96, 0xfa, 0xaf, 0x31, 0x2e, 0xbd, 0x6b, 0x9c, 0x86, 0xe9, 0x7e, 0xa9, 0xfe, 0xb7, 0x6a, 0x2c, 0x64, 0x98, 0xde, 0xde, 0xe2, 0xe7, 0x94, 0xbd, 0x95, 0x4e, 0x43, 0x72, 0x30, 0x20, 0x31, 0xc9, 0x7f, 0x0a, 0x7e, 0xf4, 0xc3, 0xa9, 0x53, 0x3e, 0x65, 0xf5, 0xec, 0x03, 0xc3, 0xc2, 0x66, 0x7f, 0x5b, 0x90, 0xfa, 0x05, 0xb5, 0x20, 0x60, 0x18, 0xc5, 0xc3, 0x2c, 0x16, 0x34, 0x8c, 0x0a, 0x04, 0x99, 0x12, 0xc0, 0x17, 0x11, 0xeb, 0x80, 0x31, 0xb7, 0x5e, 0x6a, 0xcb, 0x79, 0x8d, 0x97, 0xee, 0x34, 0xdc, 0xdd, 0xf6, 0x04, 0xe7, 0x19, 0xe9, 0x2b, 0x0b, 0x1b, 0xee, 0x6e, 0x5c, 0x11, 0x3c, 0xc7, 0x62, 0x7b, 0x3c, 0x21, 0x1d, 0xc6, 0xae, 0xf1, 0x16, 0xf5, 0x9a, 0xc2, 0x86, 0xfc, 0x40, 0xf0, 0x77, 0x3c, 0x76, 0xa3, 0x77, 0x95, 0xd1, 0xe7, 0x57, 0x2b, 0x83, 0xfd, 0xd0, 0x61, 0x9c, 0x13, 0x8d, 0xdd, 0xb8, 0xba, 0xca, 0xe8, 0x92, 0xa3, 0x69, 0x57, 0x3b, 0x8c, 0x4e, 0x2d, 0xd6, 0x7b, 0xa3, 0xaa, 0xdf, 0x58, 0xa0, 0xb5, 0xa1, 0x37, 0x52, 0x35, 0x60, 0x7c, 0x50, 0x8b, 0x61, 0x3d, 0x97, 0x1b, 0x75, 0x18, 0xf3, 0x5f, 0xa7, 0xd8, 0x8c, 0x6b, 0x76, 0x43, 0x45, 0x7d, 0x53, 0xcb, 0xf2, 0x8f, 0x28, 0x56, 0x70, 0xcd, 0x6c, 0x98, 0x45, 0xb1, 0xcb, 0x3c, 0x66, 0xe3, 0xb1, 0x5e, 0x4e, 0x59, 0x80, 0x94, 0x7e, 0xa6, 0x66, 0x94, 0x96, 0x81, 0x69, 0x14, 0xbb, 0xcc, 0x62, 0x0e, 0x35, 0x46, 0x72, 0xe9, 0xbb, 0x2e, 0x18, 0x2a, 0x49, 0x66, 0xd9, 0xbb, 0x31, 0x76, 0xf6, 0x3a, 0x18, 0x16, 0x68, 0xb1, 0x4f, 0x0b, 0x5e, 0x37, 0xc3, 0xb8, 0xfa, 0x65, 0xfe, 0xdf, 0x71, 0xc9, 0xef, 0x07, 0x83, 0x20, 0xd5, 0xd5, 0x9f, 0x57, 0xfb, 0x01, 0x63, 0x6d, 0x5a, 0xcc, 0xf1, 0x3e, 0x40, 0x92, 0xd4, 0xd0, 0xd0, 0xc7, 0x63, 0xcf, 0x61, 0xac, 0xad, 0xbd, 0xae, 0x8f, 0x8f, 0x2a, 0xd4, 0xc1, 0x99, 0x7e, 0x62, 0x2a, 0x9f, 0xe7, 0xb1, 0x52, 0x8a, 0x7d, 0xac, 0xa6, 0x19, 0xbd, 0xfe, 0xe6, 0x56, 0xe9, 0xbc, 0x16, 0x2b, 0x27, 0x4d, 0x66, 0x23, 0x3c, 0xdc, 0x13, 0x36, 0xdc, 0x5f, 0x27, 0x07, 0xd5, 0xd8, 0x25, 0x16, 0xab, 0x5f, 0xfc, 0x09, 0x8b, 0x5d, 0xe6, 0xb1, 0xe6, 0xab, 0x2c, 0x76, 0x85, 0xc5, 0x54, 0xcb, 0x10, 0xbe, 0x18, 0x36, 0x64, 0xd6, 0xc9, 0xd8, 0x67, 0x9f, 0x51, 0xec, 0xb7, 0x5a, 0xec, 0x0f, 0x14, 0xfb, 0x1d, 0x8b, 0xc9, 0xf2, 0xef, 0x19, 0xe5, 0xef, 0xc3, 0x86, 0xc9, 0x75, 0x72, 0x53, 0xcb, 0x1f, 0x58, 0x0c, 0x7b, 0x33, 0xbb, 0x5e, 0x6a, 0x6e, 0xfe, 0x1d, 0x8b, 0x39, 0xc3, 0x86, 0x18, 0xb5, 0x9a, 0x18, 0x73, 0x87, 0x0d, 0x13, 0x07, 0x63, 0xc5, 0x61, 0x83, 0x61, 0x30, 0x56, 0x1a, 0x36, 0x18, 0xa3, 0xb1, 0xde, 0x4a, 0xd1, 0x90, 0x12, 0x8d, 0xdd, 0xa8, 0x5c, 0x65, 0xc8, 0xa0, 0xa6, 0xff, 0x06, 0x63, 0x7f, 0x0a, 0xa1, 0xf6, 0xa4, 0x52, 0x8c, 0x4a, 0xf8, 0xb4, 0x40, 0x67, 0xd6, 0x8d, 0xa7, 0x18, 0xeb, 0xb1, 0x70, 0x1f, 0x18, 0x1f, 0x09, 0xd6, 0x5d, 0xe6, 0x23, 0x27, 0xec, 0x0a, 0x1b, 0x2c, 0xcd, 0x8d, 0x1f, 0xa9, 0xe3, 0x4f, 0x8c, 0x18, 0xa6, 0xd4, 0x05, 0xa4, 0x2c, 0xd6, 0xd3, 0x11, 0x89, 0x62, 0x6d, 0x01, 0x35, 0x86, 0x1e, 0x9d, 0x89, 0xd2, 0xfe, 0xc8, 0xd3, 0x28, 0x86, 0x69, 0x2c, 0x06, 0x98, 0x66, 0xa6, 0xb4, 0x73, 0xc3, 0x62, 0xac, 0xb5, 0x40, 0xa7, 0xeb, 0x13, 0xe5, 0xb9, 0x61, 0x31, 0x96, 0xd6, 0xd5, 0x1b, 0x32, 0x56, 0xfb, 0xcf, 0xa9, 0x56, 0x71, 0x2b, 0x5a, 0xb7, 0x1a, 0x59, 0x8d, 0xf5, 0x62, 0x5d, 0x8c, 0x0e, 0x35, 0x42, 0x31, 0x30, 0xc6, 0x46, 0x63, 0x58, 0x82, 0x31, 0x4e, 0x8b, 0x45, 0xfa, 0x7a, 0x3d, 0xc6, 0x2a, 0x7f, 0xc3, 0x39, 0xd5, 0xb6, 0xf6, 0x3a, 0x8d, 0xb3, 0xfd, 0x7f, 0xd0, 0xd2, 0xae, 0x7a, 0x8c, 0x6e, 0x39, 0x9a, 0x76, 0xd5, 0x69, 0x2c, 0x92, 0xd5, 0xb4, 0xde, 0xbe, 0xaa, 0xc3, 0x46, 0x5b, 0x83, 0x56, 0x5e, 0xb8, 0x2a, 0x6c, 0x4c, 0xf8, 0x43, 0xd4, 0x42, 0x7b, 0xc0, 0x30, 0xa6, 0x45, 0xd5, 0x3a, 0x8c, 0x39, 0x0d, 0x63, 0xfc, 0x9a, 0x94, 0xc2, 0xde, 0xb0, 0x61, 0x4c, 0x50, 0x52, 0xad, 0x7e, 0xb8, 0x32, 0x64, 0x18, 0xb3, 0xa4, 0xed, 0xaa, 0x16, 0xc3, 0xb4, 0x25, 0xcb, 0xd4, 0xd9, 0x22, 0x7c, 0x16, 0x63, 0x52, 0x34, 0xed, 0x23, 0x16, 0xbb, 0xac, 0xc6, 0xce, 0x61, 0xac, 0x39, 0x9a, 0xf6, 0x1b, 0x16, 0xd3, 0xd2, 0xce, 0x63, 0x2c, 0xd0, 0xba, 0xe2, 0x2a, 0x8f, 0x7d, 0xcc, 0x63, 0x97, 0x79, 0xec, 0x02, 0x8b, 0x69, 0xf9, 0x3e, 0x61, 0x31, 0x2d, 0xdf, 0xa7, 0x58, 0x6b, 0x7f, 0x9b, 0xa4, 0xea, 0xfc, 0xa7, 0x54, 0x6b, 0x9c, 0xc8, 0x82, 0xad, 0x81, 0x8f, 0x23, 0xe1, 0x3f, 0x60, 0x9a, 0x1c, 0x4d, 0xfb, 0x03, 0xa6, 0xc9, 0xd1, 0xb4, 0x0a, 0xa7, 0xa1, 0xb0, 0xa1, 0x69, 0x79, 0x7b, 0x33, 0x9b, 0x8f, 0x30, 0x36, 0x0d, 0x63, 0x6d, 0xd1, 0xd8, 0x54, 0x4a, 0x63, 0xf6, 0x93, 0x62, 0x0f, 0x53, 0x9a, 0x1a, 0x03, 0xc3, 0xd4, 0x65, 0xed, 0xcd, 0xed, 0xd1, 0xd8, 0xc3, 0x18, 0x63, 0x69, 0x9f, 0x86, 0x43, 0x61, 0xc3, 0x08, 0xa4, 0xfc, 0x8c, 0xeb, 0xd9, 0x1a, 0x1e, 0xfb, 0x03, 0x8f, 0x85, 0x31, 0x86, 0x94, 0x6a, 0xda, 0x7e, 0x1e, 0x53, 0xd3, 0x5c, 0x21, 0xc3, 0x88, 0xfa, 0xc5, 0x4b, 0x99, 0x66, 0x61, 0x0c, 0x0c, 0x33, 0x28, 0x76, 0x99, 0xf5, 0xd1, 0x86, 0xb0, 0xfe, 0x0e, 0x1c, 0xef, 0x1f, 0xf1, 0x1e, 0xeb, 0xc2, 0x18, 0x5a, 0x0d, 0x35, 0xd6, 0x8d, 0x31, 0xb4, 0x0c, 0x1f, 0x71, 0x0b, 0x1d, 0x02, 0x48, 0x54, 0x85, 0x84, 0xb1, 0x0d, 0x18, 0x6b, 0x6b, 0x3f, 0xa7, 0xc6, 0xba, 0x30, 0x56, 0xaf, 0xf6, 0xd1, 0xa7, 0x10, 0xc6, 0x98, 0xc4, 0xa7, 0x69, 0x8c, 0x75, 0x53, 0xac, 0x41, 0x8b, 0xad, 0x41, 0xcf, 0x66, 0x90, 0x0b, 0x5a, 0x1b, 0xeb, 0x20, 0x97, 0xd7, 0x31, 0xd6, 0xa8, 0x26, 0x7e, 0x0a, 0xfb, 0x31, 0x36, 0xc8, 0xe5, 0x7d, 0x8a, 0xa9, 0x5c, 0x22, 0x61, 0x33, 0x18, 0x46, 0xd7, 0x71, 0xf3, 0x42, 0x31, 0x27, 0xc6, 0xb8, 0x79, 0xa1, 0x58, 0x88, 0x62, 0xcd, 0x6a, 0x4f, 0x9b, 0xc3, 0x18, 0xe3, 0xe6, 0x05, 0x3e, 0xc7, 0x58, 0x4c, 0x4e, 0xbd, 0xaa, 0x67, 0x9f, 0x87, 0x21, 0x6c, 0xca, 0x43, 0x49, 0xec, 0x8c, 0xc6, 0x1e, 0xc0, 0xb6, 0xef, 0xe4, 0xe5, 0x55, 0x01, 0xd8, 0xb1, 0xed, 0x9f, 0xf2, 0xd8, 0x1c, 0x8c, 0xa1, 0x94, 0x78, 0xcc, 0x7e, 0x16, 0xe0, 0x2e, 0x4d, 0x07, 0x31, 0x66, 0x86, 0xbb, 0x9a, 0x07, 0x63, 0x36, 0xb8, 0x4b, 0xd3, 0x33, 0x8c, 0xd9, 0x29, 0xa6, 0xa5, 0x7d, 0xc4, 0xf2, 0x5d, 0xd6, 0x62, 0x2c, 0x5f, 0x34, 0xc6, 0xf3, 0x5d, 0x56, 0x63, 0x2c, 0x9f, 0xaa, 0x83, 0x74, 0xb9, 0x33, 0x3a, 0xa3, 0xd3, 0x29, 0x6b, 0x77, 0x46, 0x67, 0x74, 0xfa, 0x58, 0xc6, 0x9d, 0x58, 0x33, 0x35, 0x66, 0xa2, 0xb4, 0x06, 0x2d, 0xcd, 0x82, 0xb1, 0xa8, 0x5f, 0x80, 0x0e, 0x25, 0xdc, 0x89, 0xed, 0xe3, 0x73, 0x7f, 0x58, 0x07, 0x06, 0xab, 0x26, 0x41, 0x8c, 0x39, 0x31, 0xa6, 0x4a, 0x10, 0x63, 0x21, 0x8a, 0x71, 0x09, 0x62, 0x2c, 0x8c, 0x31, 0x55, 0x82, 0x11, 0x74, 0x4a, 0x61, 0x12, 0x59, 0x3e, 0x6e, 0x89, 0x9c, 0x00, 0x63, 0x5a, 0x1a, 0x15, 0x3e, 0x5b, 0xe0, 0xb2, 0x07, 0xc6, 0xa8, 0xd9, 0x30, 0x56, 0xcc, 0xd2, 0x54, 0x0f, 0x02, 0x4a, 0x29, 0xd6, 0xaa, 0xce, 0xbe, 0xe0, 0xc5, 0x98, 0x5a, 0x38, 0x69, 0x0b, 0x18, 0xef, 0x21, 0x9e, 0xaf, 0x31, 0x4b, 0xb4, 0x15, 0x0c, 0x7a, 0xf4, 0x27, 0x1a, 0x27, 0x7f, 0x44, 0xb1, 0x5e, 0x2d, 0xa6, 0xba, 0x7a, 0x06, 0x7d, 0x43, 0x3d, 0x53, 0x64, 0x90, 0xbc, 0xec, 0x99, 0xac, 0x4e, 0x74, 0x4b, 0x39, 0x6a, 0x88, 0xee, 0x72, 0xa5, 0x79, 0x3e, 0x39, 0x0b, 0x41, 0xe8, 0xd9, 0x2c, 0xe6, 0x45, 0x63, 0xba, 0xb3, 0x9b, 0xc5, 0xf4, 0x68, 0xcc, 0xe0, 0x71, 0x8a, 0xf6, 0x68, 0x2c, 0xe6, 0xa3, 0x4e, 0xf6, 0x6c, 0x94, 0xc7, 0x62, 0x2f, 0x6e, 0x0e, 0x8c, 0x3a, 0xe0, 0xb4, 0xfd, 0xc9, 0x66, 0xa5, 0x93, 0x2e, 0x2a, 0xce, 0x00, 0xae, 0x29, 0x1c, 0xd9, 0x39, 0xb9, 0x79, 0x0f, 0xe4, 0x3f, 0x58, 0xf0, 0x10, 0xce, 0xa1, 0x0d, 0x8d, 0xb2, 0xe7, 0x93, 0x5e, 0x08, 0xc6, 0x75, 0xad, 0xad, 0xa7, 0x15, 0x63, 0x9a, 0xdb, 0xa0, 0xe5, 0x92, 0xcd, 0x5e, 0x5c, 0x6d, 0x7b, 0x0d, 0x8a, 0xa9, 0xea, 0x2d, 0xe4, 0x70, 0x84, 0xbe, 0x61, 0x81, 0x1c, 0x46, 0xd1, 0x1a, 0x80, 0xbe, 0x46, 0x66, 0xe8, 0xe1, 0x2b, 0x2f, 0x76, 0xb6, 0xe9, 0x00, 0x34, 0xa8, 0xeb, 0x30, 0xa7, 0xa8, 0x9f, 0x02, 0xb8, 0x02, 0xad, 0xaf, 0xd7, 0xfb, 0xeb, 0x69, 0x35, 0x47, 0x7b, 0x4c, 0x44, 0xeb, 0x14, 0xf0, 0x8f, 0x0a, 0xff, 0x1d, 0x85, 0x15, 0x93, 0x46, 0xc9, 0xa1, 0xc0, 0xdf, 0x1e, 0x70, 0x16, 0xf5, 0xc3, 0xa4, 0x40, 0x9c, 0xdb, 0x18, 0x74, 0xa4, 0xdf, 0xd5, 0xf5, 0x54, 0xa3, 0xb9, 0xea, 0xe0, 0x86, 0xa7, 0x7c, 0x7a, 0x91, 0xbe, 0x58, 0x6a, 0xa4, 0x2f, 0x95, 0xda, 0x0e, 0xcc, 0x79, 0x37, 0x72, 0x9e, 0x7f, 0x4d, 0xe9, 0xeb, 0x7e, 0x4b, 0x49, 0xfd, 0x5e, 0x45, 0xbc, 0x64, 0x95, 0x2c, 0x55, 0x07, 0xb5, 0x77, 0x15, 0x3e, 0xda, 0x9c, 0x04, 0x32, 0xf1, 0x4c, 0xaa, 0x3a, 0x18, 0x8c, 0x0d, 0x38, 0x3e, 0x30, 0x34, 0xe8, 0x03, 0xd9, 0x36, 0x7a, 0x67, 0xe8, 0x1a, 0xdd, 0x77, 0xac, 0x6c, 0xb7, 0x8e, 0x81, 0x34, 0x59, 0xef, 0x2b, 0x0f, 0xc6, 0x8a, 0x49, 0xd1, 0xb0, 0x41, 0xb4, 0x44, 0xc3, 0x3a, 0x3f, 0x24, 0x8c, 0xd9, 0x59, 0x08, 0x72, 0x9d, 0xb0, 0x11, 0x5b, 0xd1, 0x98, 0xbc, 0x93, 0xbe, 0xfa, 0x44, 0x5f, 0x95, 0xce, 0x6e, 0x8c, 0x47, 0xcc, 0x7d, 0x17, 0x3b, 0x43, 0x3a, 0x5f, 0x39, 0x72, 0x3c, 0x45, 0x67, 0x63, 0x12, 0x35, 0xa3, 0x13, 0x88, 0xae, 0x2e, 0xd9, 0x57, 0x6e, 0xd3, 0xa9, 0x98, 0x78, 0x86, 0x31, 0xfb, 0xca, 0xc3, 0x28, 0x9b, 0x6e, 0x9d, 0x17, 0x88, 0x3a, 0x80, 0x3d, 0xa2, 0xa6, 0x27, 0xb1, 0x74, 0x9b, 0xaf, 0xbc, 0x3b, 0x34, 0x05, 0x3e, 0xee, 0xec, 0xfe, 0xc7, 0xee, 0x35, 0xc8, 0xf5, 0x7c, 0x65, 0x7b, 0x57, 0x5b, 0x53, 0x4b, 0x7d, 0xeb, 0x1f, 0xec, 0x52, 0x1d, 0x69, 0x6f, 0x6d, 0x1b, 0x83, 0x8b, 0x1a, 0x18, 0x48, 0x91, 0x30, 0x05, 0x60, 0x3b, 0xb7, 0x31, 0xe7, 0xda, 0x18, 0xbc, 0xd0, 0xc0, 0x80, 0x55, 0x6a, 0x6b, 0xba, 0x82, 0xf2, 0x91, 0x82, 0x12, 0x82, 0x91, 0x08, 0x5a, 0x7a, 0x60, 0x0f, 0xb7, 0x77, 0xf7, 0xb0, 0x6c, 0x70, 0x57, 0x7d, 0x2b, 0x79, 0xed, 0x5b, 0x1b, 0x9a, 0xc8, 0xdd, 0x3b, 0xdb, 0xc6, 0xe0, 0xf9, 0x06, 0x06, 0x6c, 0x8d, 0xc1, 0x56, 0x1c, 0x21, 0x63, 0x95, 0xc6, 0x60, 0xe3, 0x8a, 0xde, 0x71, 0x08, 0x96, 0x49, 0x57, 0x74, 0x4d, 0x2d, 0xa4, 0xfe, 0x86, 0xa6, 0x96, 0x60, 0xa0, 0x1f, 0xee, 0x68, 0x6e, 0x55, 0xb2, 0xbb, 0x20, 0x09, 0x01, 0xda, 0x9f, 0x44, 0x04, 0x58, 0x90, 0x09, 0x41, 0x8b, 0xff, 0xf5, 0x6d, 0xcb, 0x5a, 0xa9, 0x4a, 0x21, 0xee, 0x99, 0x84, 0xdb, 0x18, 0x3c, 0xd8, 0xc0, 0xc0, 0x3f, 0x2d, 0x6b, 0x27, 0x23, 0xf1, 0x9b, 0x36, 0x06, 0x3f, 0x69, 0x60, 0x20, 0x99, 0x8f, 0xba, 0x85, 0x6d, 0x0c, 0x3e, 0xd6, 0xc0, 0xc0, 0xff, 0x0c, 0x30, 0xd7, 0xe5, 0xe5, 0x36, 0x74, 0x93, 0x3e, 0x86, 0x97, 0xda, 0x94, 0x66, 0xac, 0xdb, 0x3f, 0x23, 0xc0, 0x2c, 0xf1, 0xac, 0x79, 0xa0, 0x47, 0xf1, 0x60, 0x1b, 0x8c, 0x6d, 0xdf, 0x08, 0x60, 0xd5, 0x5c, 0x6d, 0x0c, 0x96, 0x34, 0x30, 0xb0, 0x83, 0x5b, 0xe9, 0x9e, 0x36, 0x06, 0x2f, 0x37, 0x30, 0x30, 0x8a, 0xc9, 0x03, 0xe2, 0x98, 0x3c, 0x20, 0x21, 0xd8, 0xd8, 0x82, 0x0d, 0x9d, 0xca, 0xc7, 0xf5, 0xe8, 0xe0, 0x13, 0xad, 0xd4, 0xec, 0x20, 0xc8, 0xb0, 0xb8, 0xa9, 0xb9, 0xad, 0xbe, 0xbe, 0x1e, 0xeb, 0xd3, 0xf8, 0x8d, 0xe5, 0xf5, 0xcb, 0xdb, 0xfc, 0xcd, 0xcb, 0x9a, 0x94, 0xc6, 0xe6, 0xa0, 0x12, 0x6c, 0x6e, 0xac, 0x43, 0x47, 0xb4, 0xb9, 0xad, 0xb9, 0xbe, 0xad, 0x0d, 0x6b, 0xd6, 0x26, 0xd5, 0x3f, 0xd1, 0xf6, 0x44, 0x7d, 0x53, 0x5b, 0x53, 0xbd, 0xd2, 0xa6, 0x60, 0x8e, 0xfa, 0x7a, 0x19, 0x79, 0x35, 0x7e, 0x03, 0xa0, 0x55, 0x09, 0xe2, 0xaf, 0x11, 0x5a, 0x9b, 0x11, 0x36, 0x23, 0x54, 0x9a, 0xa1, 0x35, 0x00, 0xd0, 0xde, 0x82, 0x3f, 0x24, 0x68, 0xc7, 0xf4, 0x76, 0x4c, 0x6f, 0xc7, 0xf4, 0x76, 0x4c, 0x6f, 0x69, 0x04, 0x2c, 0x1b, 0xa0, 0x0d, 0x19, 0xb4, 0x61, 0x3a, 0x26, 0x03, 0x26, 0x03, 0x26, 0x03, 0x26, 0x03, 0x66, 0xc7, 0x1f, 0xd2, 0x29, 0xb4, 0x85, 0xa8, 0x19, 0x5a, 0x28, 0x8c, 0x89, 0x2d, 0x0a, 0xe1, 0x82, 0x80, 0x95, 0x85, 0x36, 0xa4, 0xcd, 0x7e, 0xbb, 0xea, 0x62, 0x05, 0x76, 0x8e, 0x23, 0x23, 0xe7, 0xfb, 0x1f, 0x63, 0x20, 0x27, 0xa3, 0xf1, 0xfb, 0x3c, 0xde, 0xf8, 0x7d, 0x47, 0x56, 0x57, 0x73, 0x0b, 0xe2, 0xf1, 0x92, 0xed, 0xf8, 0xfe, 0xeb, 0xd9, 0x5d, 0xd9, 0x8e, 0xae, 0xf6, 0xb6, 0xde, 0xcc, 0xfa, 0xfa, 0xab, 0x99, 0x6d, 0x57, 0x27, 0x66, 0x4e, 0xde, 0x31, 0xf1, 0xfe, 0xcc, 0x1d, 0x66, 0xb3, 0xbf, 0x3e, 0x00, 0xe6, 0xd8, 0xb6, 0x80, 0x1f, 0xcc, 0xa6, 0x76, 0xba, 0xc6, 0x2c, 0x5b, 0xd6, 0x1e, 0x30, 0x1b, 0x9b, 0xda, 0x30, 0x6c, 0x58, 0x46, 0x57, 0x7d, 0xbd, 0x24, 0x05, 0xcc, 0xba, 0xe5, 0x75, 0x48, 0x09, 0xed, 0x88, 0x01, 0x73, 0x5d, 0x7b, 0x5b, 0x00, 0x62, 0x1b, 0x82, 0xc1, 0x6c, 0x30, 0xe1, 0xd5, 0x01, 0x31, 0x4d, 0x14, 0x36, 0x36, 0x51, 0xd8, 0x10, 0xac, 0xa7, 0x1e, 0xab, 0x97, 0x90, 0xb5, 0xae, 0x41, 0xae, 0x67, 0x2d, 0xad, 0x87, 0x90, 0x39, 0x18, 0xec, 0xb2, 0x06, 0x83, 0xaf, 0x3b, 0x83, 0xbf, 0x29, 0x6e, 0x08, 0xf4, 0x7a, 0xda, 0x02, 0xbd, 0x15, 0xf5, 0x81, 0xde, 0xaa, 0x7a, 0xe9, 0x72, 0x6d, 0x5b, 0xfd, 0x6f, 0x16, 0x49, 0xbf, 0x11, 0xb1, 0xec, 0xb6, 0xab, 0xa2, 0xbf, 0xed, 0x6a, 0x83, 0xbf, 0xbe, 0xed, 0xea, 0xab, 0xcb, 0x71, 0x81, 0x3e, 0xa9, 0xae, 0xf9, 0x09, 0x03, 0xe8, 0xa3, 0xef, 0x78, 0xc4, 0xfc, 0x75, 0x5f, 0xfd, 0x5f, 0xff, 0xbe, 0xfc, 0x04, 0x86, 0x27, 0xe9, 0xeb, 0x65, 0xdb, 0xba, 0x43, 0xb4, 0xb7, 0x74, 0x44, 0x7f, 0x9a, 0xc7, 0x9b, 0xac, 0x7d, 0xa9, 0x78, 0xc4, 0x8d, 0x49, 0x9e, 0xd7, 0x3f, 0x27, 0x58, 0x67, 0xb7, 0xd9, 0x71, 0x4e, 0x5b, 0x58, 0xd7, 0x8b, 0x57, 0x57, 0xe3, 0x25, 0x73, 0x18, 0x62, 0x46, 0x3b, 0x71, 0xcd, 0x73, 0xb6, 0xac, 0xff, 0x77, 0xe7, 0x84, 0x59, 0x45, 0x97, 0xc1, 0x64, 0x1b, 0x4d, 0xa7, 0x6e, 0x75, 0xd9, 0x65, 0xd0, 0x2d, 0x61, 0x3b, 0x0a, 0xae, 0xd0, 0x8e, 0x5f, 0xab, 0xc9, 0xfd, 0x06, 0x5e, 0xf5, 0xee, 0x05, 0xee, 0x39, 0x8e, 0x4c, 0x3a, 0x01, 0x3c, 0x16, 0xba, 0x3a, 0x8c, 0xa0, 0x80, 0x2e, 0xad, 0xab, 0xc3, 0x40, 0xd0, 0x64, 0xb5, 0x43, 0x16, 0xe6, 0xca, 0xf3, 0x3a, 0xe5, 0x7c, 0xbe, 0xab, 0x0c, 0x31, 0x75, 0x0a, 0x5a, 0x26, 0x1f, 0x8b, 0xe5, 0xec, 0x03, 0xa7, 0x35, 0x03, 0x9e, 0x88, 0xd0, 0xa9, 0xac, 0x27, 0xa3, 0xb8, 0x10, 0xe2, 0x9a, 0x19, 0xee, 0x60, 0x17, 0xed, 0x92, 0x9b, 0xea, 0x56, 0x53, 0xf4, 0xa0, 0xe6, 0x7f, 0x55, 0xa3, 0x35, 0x42, 0x34, 0xff, 0x66, 0x0d, 0x67, 0x82, 0x68, 0xfe, 0xa7, 0xbb, 0x68, 0x6f, 0x9d, 0x63, 0x48, 0xd9, 0x7e, 0xdf, 0x20, 0x2f, 0x9e, 0xf3, 0xb1, 0x61, 0xbc, 0x28, 0x5f, 0x05, 0xed, 0x81, 0x91, 0x05, 0xed, 0x99, 0x1f, 0xe6, 0x7b, 0x42, 0x29, 0x18, 0x56, 0x63, 0xa2, 0x4a, 0xef, 0xa2, 0x3d, 0x7a, 0xf3, 0x86, 0x51, 0x25, 0x68, 0x54, 0x3a, 0x95, 0x97, 0x9c, 0x6f, 0xb5, 0x81, 0x20, 0x3b, 0x7c, 0x9a, 0xbc, 0xe9, 0xfb, 0xf1, 0x82, 0xd2, 0x5b, 0xf5, 0x4e, 0xba, 0x87, 0xa4, 0xe6, 0x09, 0x75, 0x3b, 0x5d, 0xfd, 0x30, 0xcf, 0xe1, 0x00, 0xda, 0x6d, 0x1a, 0x5f, 0x89, 0x2e, 0xba, 0x37, 0x56, 0x8e, 0x77, 0xc7, 0x7a, 0x37, 0x29, 0x63, 0xcb, 0x2e, 0x43, 0xbc, 0x08, 0x37, 0xe8, 0x4c, 0xe6, 0xed, 0x56, 0x73, 0x8e, 0x6d, 0x6d, 0x33, 0xe8, 0x1d, 0x6b, 0xe8, 0xec, 0xc8, 0x27, 0xd9, 0xde, 0x3d, 0xf1, 0x3a, 0xe3, 0x1e, 0xef, 0xf3, 0xf0, 0x90, 0x62, 0xa4, 0x10, 0x2f, 0x49, 0x3d, 0x6b, 0x41, 0x8f, 0xae, 0xa0, 0x00, 0x53, 0x61, 0x3d, 0x2c, 0x47, 0x27, 0xed, 0x03, 0x5d, 0x82, 0x2e, 0x4d, 0x97, 0xa7, 0x2b, 0xd4, 0xd5, 0xe8, 0x1e, 0x33, 0x82, 0xd1, 0x6e, 0x2c, 0x36, 0x56, 0xe8, 0x32, 0x8d, 0xeb, 0x46, 0x1c, 0x33, 0x3e, 0x6b, 0x7c, 0xd1, 0x78, 0xc8, 0x78, 0x23, 0x26, 0x39, 0x66, 0xac, 0x39, 0xd5, 0xbc, 0x71, 0xc4, 0x4b, 0x23, 0x8e, 0x59, 0x4d, 0xd6, 0x85, 0x23, 0x33, 0x47, 0x3a, 0x46, 0xe6, 0x8d, 0x2c, 0x18, 0xe9, 0x31, 0xe9, 0x21, 0xcf, 0x58, 0x65, 0xda, 0x6d, 0x5a, 0x65, 0xda, 0x1c, 0x9b, 0x0e, 0x87, 0x60, 0xa7, 0xf9, 0x80, 0xf9, 0x83, 0x38, 0x7b, 0xdc, 0xa6, 0xb8, 0x2d, 0x71, 0xbb, 0x2d, 0xb6, 0xb8, 0x0f, 0x46, 0x4e, 0x1d, 0xb1, 0x64, 0x44, 0xc3, 0x08, 0xc7, 0x88, 0x49, 0xb1, 0x39, 0xba, 0x64, 0x4b, 0x4e, 0xdc, 0x51, 0xc3, 0x75, 0xe3, 0x54, 0x8b, 0xdb, 0x30, 0x29, 0x66, 0x49, 0x8c, 0xd7, 0x52, 0x6a, 0x59, 0x64, 0xd9, 0x6b, 0xe9, 0x89, 0xd9, 0x17, 0x73, 0x2e, 0x76, 0x85, 0x31, 0xcf, 0xd0, 0x6b, 0xc9, 0x8c, 0x3b, 0x84, 0x2e, 0x67, 0x85, 0x65, 0x9e, 0xa5, 0xc2, 0x32, 0x36, 0xe6, 0x72, 0xec, 0x16, 0x5d, 0x8b, 0x6e, 0x85, 0xde, 0xa4, 0x5f, 0xab, 0x5f, 0xad, 0xb7, 0xd0, 0x73, 0xe3, 0x3f, 0x2e, 0xa2, 0x6f, 0xa2, 0x58, 0xcd, 0x95, 0xed, 0xda, 0xae, 0xc4, 0xf8, 0xe3, 0xae, 0xfe, 0xfe, 0x12, 0x11, 0xe2, 0x83, 0x83, 0x7b, 0x98, 0xe2, 0xdf, 0x44, 0xdc, 0x03, 0x88, 0x13, 0x11, 0x4e, 0xa2, 0x7d, 0xb3, 0xfd, 0x19, 0x88, 0xf5, 0x21, 0xe6, 0x05, 0x3a, 0xc3, 0x9c, 0xee, 0xd8, 0x8e, 0xbc, 0xba, 0x66, 0x25, 0x71, 0xb2, 0xde, 0x4d, 0x3a, 0xf9, 0xcb, 0x30, 0xc2, 0x27, 0x94, 0x54, 0xf3, 0xe7, 0xe8, 0x8c, 0x6f, 0xb7, 0xc6, 0x59, 0xef, 0x67, 0x7d, 0x5a, 0x29, 0x16, 0x20, 0xe5, 0x06, 0x46, 0x93, 0x45, 0x14, 0x32, 0xf1, 0xa1, 0xaf, 0xf3, 0x1c, 0x9e, 0x1b, 0xda, 0xc0, 0xf4, 0x9d, 0xae, 0x23, 0xfa, 0x53, 0x61, 0x89, 0xbe, 0x74, 0xcd, 0xce, 0x7d, 0x00, 0x4f, 0x46, 0xea, 0x8c, 0x22, 0x8c, 0x1c, 0x70, 0xb3, 0x6f, 0xe5, 0x8e, 0xac, 0x61, 0x79, 0xaf, 0xe2, 0xb5, 0x59, 0xbe, 0x8c, 0x79, 0xcd, 0x98, 0xf7, 0x19, 0x9e, 0x77, 0x44, 0x3f, 0xd2, 0x5d, 0x40, 0x1a, 0x07, 0xe7, 0xef, 0xaf, 0xdb, 0x70, 0x37, 0x7b, 0x8f, 0xff, 0xf7, 0x72, 0x2a, 0x62, 0x3f, 0x44, 0xca, 0x3a, 0x8d, 0x72, 0xcd, 0x43, 0x54, 0x2b, 0xc5, 0x82, 0xa5, 0x84, 0x02, 0x4f, 0x76, 0xad, 0xa9, 0xd7, 0xab, 0xfc, 0x4f, 0x88, 0x60, 0x9d, 0x7e, 0xbb, 0x7d, 0x5c, 0x23, 0xf7, 0x62, 0x4a, 0xbe, 0x04, 0xd6, 0xa9, 0x58, 0xca, 0xcb, 0x58, 0xc2, 0x04, 0x19, 0x4e, 0x9c, 0x42, 0x9e, 0xe9, 0x98, 0xf6, 0x98, 0xab, 0xff, 0xf3, 0xd1, 0x88, 0x77, 0x4a, 0x66, 0x0c, 0x8d, 0xc0, 0x50, 0xbe, 0x4a, 0xb1, 0x47, 0x82, 0xcf, 0xfa, 0x30, 0x5e, 0xe8, 0x28, 0xd4, 0x85, 0x91, 0x32, 0x4b, 0xbc, 0x80, 0x5e, 0x5a, 0xfb, 0xc6, 0xbb, 0x15, 0xeb, 0xf1, 0x42, 0xb8, 0x81, 0x14, 0xcf, 0xa3, 0x4d, 0x18, 0x81, 0xfe, 0x61, 0x8b, 0x6c, 0xc2, 0x90, 0xc5, 0x57, 0xce, 0x25, 0x78, 0x62, 0x75, 0xa0, 0x0e, 0xa9, 0x92, 0x10, 0x67, 0x42, 0x4f, 0xee, 0xb7, 0x8a, 0x15, 0xaf, 0xd7, 0x11, 0x2f, 0xa3, 0x83, 0x8a, 0x9c, 0xac, 0xe7, 0xe9, 0x3c, 0x4c, 0xa4, 0x6d, 0x90, 0xed, 0x12, 0x8c, 0xb8, 0x8c, 0xa1, 0xa9, 0x98, 0xea, 0x91, 0x20, 0x36, 0x95, 0xb5, 0x6e, 0x84, 0x18, 0x5f, 0x5d, 0x8e, 0x34, 0x7a, 0xec, 0x03, 0xf4, 0xe8, 0xac, 0x44, 0x9b, 0x89, 0x14, 0x58, 0xdf, 0x58, 0xb8, 0x58, 0xcb, 0x68, 0x2c, 0xf4, 0x7c, 0x87, 0xfc, 0x46, 0xe4, 0xb7, 0x09, 0xeb, 0xd0, 0xa0, 0x90, 0xd7, 0x2a, 0xb3, 0x73, 0x2d, 0x8f, 0x70, 0xfa, 0x5f, 0x5c, 0x17, 0x41, 0x57, 0x60, 0xa6, 0x33, 0x60, 0x91, 0x5e, 0x02, 0x5d, 0x26, 0xa6, 0xbd, 0xec, 0x2f, 0x08, 0xb3, 0xde, 0x56, 0xe0, 0x17, 0x74, 0xa6, 0x02, 0xc1, 0x63, 0x08, 0x0b, 0x11, 0x1e, 0x62, 0xef, 0xdf, 0x8f, 0x4d, 0x60, 0x75, 0xf0, 0xc7, 0x9e, 0x8b, 0xfb, 0x4d, 0x02, 0x9d, 0x92, 0x32, 0xe6, 0x00, 0xc5, 0xcd, 0x6f, 0xd0, 0xf7, 0x81, 0xa8, 0x5c, 0xbe, 0x03, 0x72, 0x05, 0x38, 0x0a, 0x43, 0x54, 0x7a, 0x92, 0x26, 0x73, 0xcf, 0x2a, 0x58, 0x42, 0x75, 0x90, 0xe3, 0xa3, 0x65, 0xe2, 0x18, 0xb5, 0xe6, 0x21, 0x4d, 0x01, 0xab, 0x51, 0x0b, 0x5e, 0x65, 0x79, 0x31, 0x5e, 0xfd, 0x72, 0x5d, 0xd0, 0x8a, 0xb4, 0xf5, 0x4a, 0x52, 0x90, 0x24, 0xd8, 0xa6, 0xc4, 0x07, 0xa9, 0x95, 0x4d, 0xb2, 0x17, 0x63, 0x92, 0x5c, 0xcc, 0x64, 0x19, 0x90, 0x0b, 0x63, 0x68, 0x7c, 0x5b, 0x7c, 0x46, 0xc4, 0x4e, 0xc1, 0xd5, 0x49, 0x8c, 0x32, 0xc9, 0x57, 0x2e, 0xee, 0xc1, 0x76, 0x17, 0x84, 0x99, 0x1e, 0xc8, 0xb4, 0x1b, 0x55, 0x27, 0x27, 0xce, 0x01, 0x39, 0x81, 0x85, 0xf8, 0xf7, 0x86, 0x30, 0x8f, 0xcc, 0xf4, 0x82, 0xf7, 0xe5, 0x71, 0xd4, 0xb7, 0x6b, 0x05, 0xca, 0x58, 0x6c, 0xdf, 0x8c, 0x3a, 0x38, 0xfe, 0x21, 0xdf, 0xf1, 0x78, 0x9c, 0xda, 0x3f, 0xaa, 0x9e, 0x9e, 0x3d, 0x3a, 0x30, 0x76, 0x38, 0xd4, 0xb1, 0x88, 0xce, 0x9d, 0xae, 0x10, 0xc1, 0x12, 0x70, 0x14, 0x76, 0x03, 0x49, 0x55, 0xb6, 0xa3, 0xdf, 0x7e, 0xf7, 0x06, 0xa2, 0x58, 0x8e, 0x74, 0xb1, 0x75, 0xfe, 0x8b, 0x66, 0xea, 0x75, 0x51, 0x64, 0x6d, 0xa9, 0x63, 0x6d, 0x59, 0x94, 0x70, 0x37, 0xf3, 0xdb, 0x6b, 0x76, 0x12, 0x45, 0xe5, 0xf2, 0xd8, 0xe7, 0x75, 0xb1, 0x61, 0xcc, 0x9d, 0xa9, 0x4c, 0xc5, 0xf4, 0x29, 0xca, 0x09, 0x1c, 0x43, 0x93, 0xd1, 0xe2, 0x65, 0xb2, 0x3c, 0x59, 0x2c, 0x4f, 0x46, 0xe2, 0xdd, 0x9b, 0xd8, 0xea, 0x60, 0x17, 0xe5, 0x49, 0xde, 0xa5, 0xab, 0x4f, 0xf2, 0xe9, 0x78, 0xce, 0x5d, 0x3a, 0xf9, 0x9a, 0x18, 0x66, 0x63, 0xd2, 0x42, 0xfb, 0x74, 0x8f, 0x67, 0x49, 0x60, 0xe9, 0xa0, 0x91, 0x6a, 0x41, 0x1d, 0xb1, 0xbc, 0xcc, 0x42, 0x74, 0x6e, 0xe6, 0x21, 0x09, 0xe2, 0x48, 0x9f, 0x33, 0x15, 0x18, 0x58, 0x31, 0xd8, 0xda, 0xf7, 0x6f, 0x48, 0xf0, 0x07, 0x3a, 0xe7, 0x60, 0x5c, 0x1d, 0xbc, 0x7f, 0x15, 0xe9, 0x82, 0xd8, 0xa2, 0xd7, 0x10, 0x16, 0xb0, 0x9c, 0xf4, 0x63, 0x4f, 0x77, 0xe2, 0x0e, 0x60, 0x68, 0x2d, 0xa6, 0x6d, 0x41, 0x58, 0xb5, 0x1c, 0xb0, 0x96, 0x99, 0xa0, 0x97, 0x6d, 0xe6, 0xb7, 0x60, 0x04, 0x6a, 0x4b, 0xbf, 0x0f, 0x75, 0xd0, 0xb2, 0x5a, 0x44, 0x8d, 0xb2, 0xac, 0xe0, 0x1a, 0xf5, 0xfe, 0x4b, 0x74, 0xe6, 0x63, 0xee, 0x5b, 0xbc, 0x66, 0x88, 0x17, 0x45, 0x30, 0x1f, 0xc1, 0x96, 0x52, 0xa9, 0x9d, 0xc4, 0x05, 0xb9, 0x15, 0xab, 0xb5, 0x58, 0x21, 0xc1, 0xd5, 0xa3, 0x0a, 0xbc, 0xef, 0x27, 0x2d, 0xc3, 0x9a, 0x2c, 0xc6, 0x1e, 0x81, 0x6e, 0x60, 0xda, 0x6b, 0x46, 0xba, 0x14, 0x46, 0x27, 0x20, 0xd5, 0xcb, 0x48, 0xe5, 0x55, 0xa9, 0xdc, 0xc3, 0xa9, 0xcc, 0x6f, 0xaa, 0xba, 0x14, 0x47, 0x23, 0xc2, 0xbc, 0x02, 0x31, 0xaf, 0xaa, 0xfc, 0x71, 0xec, 0x5c, 0x7d, 0x81, 0xef, 0x61, 0x7d, 0xdf, 0xca, 0xad, 0x02, 0x49, 0xcb, 0xbc, 0xc9, 0xd5, 0xff, 0x59, 0x21, 0x69, 0x91, 0x92, 0x80, 0x79, 0x0d, 0x84, 0x97, 0x12, 0xa9, 0xfe, 0x98, 0x26, 0x23, 0x8f, 0x3a, 0xde, 0x96, 0xee, 0x93, 0x22, 0xc4, 0x79, 0x1d, 0xf4, 0x3d, 0xb6, 0x1c, 0x07, 0x1b, 0x51, 0x6c, 0x77, 0xa1, 0x75, 0x70, 0x77, 0x61, 0xf7, 0x6e, 0x6c, 0x63, 0x7a, 0x7a, 0x99, 0xf7, 0x1d, 0x25, 0x9e, 0xde, 0xa8, 0x42, 0x89, 0x4d, 0x92, 0x92, 0x30, 0x57, 0x1d, 0x8d, 0xba, 0xb8, 0xb1, 0xf8, 0x13, 0x55, 0x5e, 0xcf, 0x60, 0x99, 0x33, 0x53, 0xcb, 0x13, 0xec, 0x0a, 0x74, 0x87, 0xfc, 0x4f, 0x86, 0x6d, 0x5d, 0x77, 0xcb, 0x26, 0xaf, 0x7d, 0xc9, 0x35, 0xd1, 0x8c, 0xd7, 0x81, 0xf4, 0x32, 0xf1, 0xfc, 0x53, 0xea, 0xa8, 0x4d, 0xb8, 0x1b, 0xf3, 0xd4, 0xcb, 0x36, 0xbf, 0xc1, 0xd5, 0xff, 0xab, 0xe7, 0x77, 0xd2, 0x29, 0xa8, 0x66, 0xda, 0x63, 0x2e, 0x42, 0x77, 0xe9, 0xef, 0x3c, 0xdc, 0x12, 0x63, 0xb9, 0x27, 0x55, 0xce, 0x39, 0x08, 0x33, 0x10, 0x4e, 0xa2, 0x7d, 0xa8, 0x18, 0x9e, 0x88, 0xe1, 0xb1, 0x95, 0xed, 0xcb, 0x49, 0x3b, 0x83, 0x8a, 0x3d, 0xda, 0x67, 0xdc, 0x52, 0xc4, 0x49, 0x6e, 0xec, 0xb5, 0x44, 0xd1, 0x2a, 0xd9, 0x78, 0xfe, 0x9f, 0x5f, 0x95, 0x1c, 0x0e, 0x03, 0xb6, 0x7c, 0x79, 0x49, 0xff, 0xb5, 0x9c, 0x45, 0x5e, 0x6f, 0xc2, 0xd2, 0x94, 0x00, 0xd8, 0x72, 0x6c, 0x7a, 0x25, 0xbe, 0x2b, 0xd7, 0x06, 0xf2, 0x65, 0x9f, 0x0e, 0xb5, 0xd6, 0x28, 0x5f, 0x5e, 0xe7, 0xfb, 0x60, 0x3f, 0xb7, 0x29, 0xb6, 0xbb, 0x51, 0xaa, 0x0d, 0x8a, 0x05, 0xf5, 0x60, 0x14, 0x3b, 0x6f, 0xe5, 0x92, 0x04, 0xfa, 0x0d, 0x3d, 0xb5, 0xeb, 0x9c, 0x58, 0xaf, 0xa9, 0x2a, 0xdf, 0x2d, 0xcc, 0x7e, 0xc1, 0xcf, 0x37, 0x2e, 0x07, 0xe9, 0xec, 0xb7, 0x55, 0x5d, 0x55, 0x71, 0xab, 0x11, 0x77, 0x54, 0xa5, 0x0b, 0x48, 0x66, 0x2d, 0x15, 0x5b, 0x80, 0x9c, 0xcc, 0x34, 0x0a, 0xbe, 0x89, 0x29, 0xb5, 0x52, 0x06, 0xed, 0xcc, 0xf8, 0x9d, 0x27, 0x0f, 0xb8, 0x05, 0xfc, 0x79, 0xa9, 0x94, 0x44, 0x98, 0x90, 0x1b, 0xe3, 0x7f, 0x83, 0xf1, 0x7c, 0x36, 0xc3, 0x59, 0xd8, 0xda, 0xbc, 0x81, 0x9e, 0xf5, 0xf7, 0xbe, 0xaa, 0xc0, 0xcf, 0x69, 0xf7, 0xb2, 0x50, 0x07, 0x3f, 0xb7, 0xa3, 0xef, 0x15, 0x53, 0xd9, 0x1e, 0x1d, 0x9f, 0xf0, 0x73, 0x13, 0x1b, 0xa1, 0x70, 0xec, 0x06, 0xf9, 0x6a, 0xda, 0x68, 0x38, 0xd6, 0x2b, 0x82, 0xa9, 0x13, 0x39, 0x4c, 0x96, 0x33, 0x99, 0x55, 0x41, 0x69, 0x1e, 0x3b, 0x2d, 0x81, 0x69, 0xa1, 0xab, 0xff, 0x0f, 0xd8, 0x87, 0xb1, 0xa5, 0x18, 0x8e, 0xe7, 0x92, 0x3d, 0x76, 0x50, 0xd3, 0x18, 0xda, 0xd9, 0x68, 0xf2, 0x4a, 0x10, 0x73, 0x83, 0xb7, 0xe3, 0xd8, 0x2b, 0x22, 0x7c, 0xde, 0xa3, 0xe6, 0x7e, 0x11, 0xd3, 0x52, 0x5c, 0xfd, 0x57, 0xd1, 0x8e, 0xc7, 0xd2, 0xce, 0xaa, 0xba, 0x9e, 0x5a, 0xfa, 0x26, 0xad, 0x08, 0xb1, 0x16, 0xec, 0x0f, 0x44, 0xc8, 0x55, 0x2a, 0x65, 0x10, 0x39, 0x5c, 0x55, 0x79, 0x2f, 0x0e, 0x50, 0x3b, 0xef, 0x57, 0x8c, 0xd5, 0xe5, 0x01, 0xb5, 0x77, 0x8e, 0xd5, 0x30, 0xad, 0x88, 0x9b, 0xc1, 0xb4, 0x1d, 0xb9, 0xd9, 0xfc, 0x33, 0xb8, 0x75, 0xce, 0x3d, 0x43, 0x57, 0xda, 0xb5, 0x82, 0x54, 0x59, 0x28, 0xbb, 0xd3, 0x6a, 0x8e, 0x54, 0x95, 0x33, 0x9d, 0x9e, 0xbf, 0x59, 0xe5, 0x1c, 0x1f, 0x30, 0x33, 0xce, 0xfa, 0x80, 0xfd, 0x29, 0x75, 0x1c, 0xf8, 0x75, 0xaa, 0x67, 0x37, 0x06, 0x3d, 0xbb, 0xb1, 0x7e, 0x83, 0x4f, 0x8b, 0x3d, 0xa1, 0xd8, 0xfc, 0xfa, 0x68, 0xac, 0x59, 0x86, 0x9f, 0x75, 0x5f, 0x34, 0xf3, 0xd1, 0x46, 0xe3, 0xdd, 0x14, 0xc0, 0xdf, 0x7a, 0xad, 0x3e, 0xa6, 0x15, 0x39, 0x0f, 0x0d, 0xd6, 0x86, 0xef, 0x9c, 0xba, 0x52, 0xcb, 0x75, 0xf4, 0x40, 0x07, 0x14, 0x7c, 0x52, 0xf6, 0xd4, 0xca, 0xe1, 0x3e, 0x88, 0xa9, 0x92, 0x8d, 0x25, 0x33, 0xf3, 0x80, 0x4d, 0xea, 0xce, 0x9b, 0x42, 0x2c, 0x65, 0xc9, 0x18, 0xb2, 0xe4, 0x23, 0x98, 0x6c, 0xc1, 0xb8, 0x83, 0xf7, 0xcd, 0xcf, 0x6a, 0x24, 0xb8, 0xb2, 0x95, 0xbe, 0xb1, 0x86, 0x7d, 0x64, 0x95, 0x52, 0x99, 0x26, 0x60, 0x2b, 0x7f, 0x56, 0x28, 0x25, 0xfd, 0xce, 0x13, 0x72, 0x63, 0xca, 0x1e, 0x91, 0x4b, 0x50, 0x42, 0x6c, 0xba, 0x68, 0xe6, 0x1a, 0xf6, 0xb3, 0x14, 0xad, 0xcf, 0x7f, 0x96, 0xc0, 0xfb, 0xfc, 0x67, 0x16, 0x4f, 0x88, 0xe9, 0x09, 0xb6, 0x8f, 0xb7, 0xeb, 0x68, 0x1f, 0xf6, 0xa5, 0x4e, 0x6b, 0x57, 0xcc, 0x16, 0xe9, 0xa0, 0xc7, 0xc9, 0xf4, 0xcc, 0x27, 0xed, 0x4d, 0xe5, 0xe5, 0x78, 0xa4, 0x2e, 0x15, 0x37, 0x5d, 0x7a, 0xf9, 0x77, 0x9d, 0x6b, 0x43, 0x0c, 0xcb, 0x47, 0x5c, 0x26, 0xea, 0x30, 0x0c, 0x5c, 0x67, 0x12, 0x16, 0x18, 0x4d, 0x32, 0xc3, 0x27, 0x7a, 0x8a, 0x10, 0xff, 0x21, 0xc3, 0x9b, 0xd7, 0xad, 0x11, 0x70, 0x6c, 0xc5, 0x64, 0xd2, 0xa8, 0xc9, 0x2f, 0x34, 0x83, 0xa8, 0xa7, 0x5c, 0x31, 0x74, 0xce, 0x4c, 0x29, 0xe3, 0x85, 0x3e, 0xcd, 0xc0, 0x4e, 0xcd, 0x5e, 0x32, 0x8e, 0x2f, 0x5d, 0x7c, 0xe4, 0xdb, 0xda, 0x18, 0x07, 0x23, 0xb3, 0xe5, 0x46, 0x94, 0xb9, 0xb1, 0x9b, 0x85, 0xb8, 0xff, 0x03, 0x47, 0x0b, 0x6d, 0x77, 0x63, 0xec, 0x02, 0xb6, 0xed, 0x09, 0x05, 0xfe, 0x48, 0x16, 0x94, 0x5a, 0x94, 0xae, 0x8d, 0x72, 0x2e, 0xbd, 0xa3, 0x38, 0x22, 0x7e, 0xe7, 0x15, 0xd9, 0x0e, 0x5c, 0x03, 0xd5, 0x54, 0x40, 0x9c, 0x9e, 0xf8, 0xde, 0xe8, 0x0e, 0x75, 0x64, 0x02, 0xd9, 0x2a, 0xe3, 0x6e, 0xe4, 0xe3, 0x64, 0xbc, 0xad, 0x9c, 0xe2, 0xbd, 0xb3, 0x88, 0x45, 0x0b, 0x26, 0xf6, 0x39, 0x0a, 0xd3, 0x40, 0xbc, 0x4a, 0xef, 0x7c, 0x48, 0x97, 0x11, 0xb7, 0x29, 0xbf, 0x30, 0x0f, 0x44, 0x63, 0x7e, 0xa1, 0x03, 0x12, 0xef, 0x66, 0xf3, 0xf8, 0x58, 0x36, 0x5e, 0xea, 0x31, 0xcf, 0xab, 0x01, 0xc0, 0x79, 0xaa, 0x4d, 0x49, 0x0b, 0xe8, 0x76, 0x91, 0x6d, 0x48, 0x11, 0xe1, 0xbd, 0xcd, 0x01, 0x9b, 0x7f, 0xc2, 0x06, 0xbd, 0x42, 0xe7, 0x15, 0xff, 0x14, 0x69, 0x3a, 0xe9, 0x0d, 0xae, 0x1b, 0x8b, 0xd7, 0x3a, 0x79, 0x1f, 0xbe, 0xb7, 0x82, 0xd7, 0xf2, 0x3d, 0x3f, 0x62, 0x7d, 0xbf, 0xf5, 0x84, 0x5c, 0xa1, 0x22, 0xf1, 0xe9, 0x9c, 0x42, 0xc1, 0xe6, 0x7f, 0x02, 0xbd, 0x3b, 0x8b, 0x79, 0x3f, 0xc4, 0x3d, 0x02, 0x98, 0x5e, 0x85, 0xb5, 0x1f, 0x50, 0x69, 0x8b, 0xe9, 0xab, 0xaf, 0x21, 0x97, 0x04, 0x91, 0x45, 0x22, 0x18, 0xfa, 0x73, 0x0a, 0xd7, 0xd8, 0xa4, 0x6e, 0x95, 0x5f, 0x86, 0x4a, 0x23, 0xd0, 0x17, 0x62, 0x2f, 0xd7, 0x2a, 0xf0, 0x5e, 0x52, 0x8e, 0xaa, 0x2f, 0xef, 0x59, 0xb9, 0x86, 0xbc, 0x87, 0xed, 0xfc, 0xe2, 0xc2, 0x6f, 0x6b, 0x43, 0x2e, 0x6d, 0xf6, 0x74, 0xb0, 0x5e, 0x21, 0x7b, 0x6d, 0x68, 0x19, 0xb2, 0x47, 0x73, 0x07, 0xcf, 0x77, 0xe4, 0x04, 0xd2, 0xbf, 0x96, 0xaf, 0xda, 0x9f, 0x23, 0x38, 0x9f, 0x7e, 0xb1, 0x75, 0x37, 0xae, 0xcf, 0x8e, 0xec, 0x13, 0xf3, 0x86, 0xe4, 0xcc, 0x1b, 0x92, 0xb3, 0x45, 0xcd, 0x89, 0x73, 0xe6, 0x17, 0x41, 0x35, 0xa7, 0x19, 0x2d, 0x25, 0xfa, 0x57, 0x5f, 0x34, 0x90, 0x8d, 0x1c, 0x62, 0x0b, 0x71, 0x9c, 0x1e, 0xc1, 0xbe, 0xd5, 0xf5, 0xba, 0xfa, 0xaf, 0xa0, 0x37, 0xa9, 0x47, 0xab, 0xa3, 0x7b, 0x89, 0x8f, 0xd9, 0x23, 0x0b, 0x69, 0xc4, 0x22, 0xf4, 0x31, 0xca, 0xc9, 0x72, 0x86, 0x66, 0x79, 0x58, 0x3e, 0xda, 0xd7, 0xb4, 0x17, 0x73, 0xad, 0xc6, 0x5c, 0x2f, 0x63, 0x98, 0x4a, 0x9d, 0xa8, 0x30, 0x8f, 0x86, 0xe6, 0x41, 0x5d, 0x17, 0x7a, 0x76, 0x0d, 0xcc, 0x2a, 0xa2, 0x7f, 0xac, 0x3f, 0xc5, 0xc7, 0x1c, 0x7a, 0x68, 0x6c, 0xa6, 0x54, 0xf7, 0x1a, 0x62, 0xe9, 0xef, 0x5e, 0x43, 0xba, 0x42, 0xe4, 0x1c, 0xcb, 0xe6, 0x06, 0xf4, 0x06, 0x91, 0xfa, 0xa5, 0x2f, 0xa5, 0x3e, 0xc4, 0xfd, 0x49, 0x7d, 0x31, 0xe3, 0x3c, 0x96, 0xcd, 0xa1, 0x76, 0xcc, 0xad, 0xe7, 0xd6, 0x40, 0x1f, 0xe0, 0x6d, 0x7f, 0xf7, 0x45, 0x29, 0x4b, 0x34, 0x49, 0x38, 0x23, 0xe9, 0x6b, 0x35, 0x6f, 0x92, 0xed, 0x24, 0x4c, 0x62, 0xd6, 0xc2, 0xe2, 0x1f, 0x75, 0xae, 0xec, 0x37, 0x3e, 0xf2, 0x1c, 0xe9, 0xcb, 0xed, 0xcc, 0x53, 0x75, 0x26, 0xdc, 0x0f, 0x3a, 0xe6, 0x23, 0xc1, 0xbb, 0x22, 0xf3, 0x92, 0xe0, 0xdd, 0x5a, 0x56, 0x8a, 0x85, 0xf9, 0x7b, 0xf0, 0xae, 0xb7, 0x4a, 0x57, 0x53, 0x6e, 0xe0, 0x5e, 0x53, 0x31, 0xf3, 0x9a, 0x8e, 0xaa, 0x5e, 0x53, 0x7e, 0x22, 0xe6, 0xdd, 0xc4, 0xf3, 0xa6, 0xed, 0xe2, 0x79, 0x53, 0x86, 0xe5, 0x8d, 0xaf, 0xd2, 0xd7, 0x94, 0xa3, 0x07, 0x05, 0xef, 0x1a, 0x7d, 0x3a, 0x03, 0xf9, 0x4f, 0x7d, 0xe2, 0x6e, 0x6d, 0xee, 0x90, 0xdc, 0xe2, 0x0a, 0x29, 0x53, 0xac, 0x93, 0xa6, 0x8a, 0x8f, 0x89, 0x0d, 0x92, 0x3a, 0xfb, 0x1f, 0x3e, 0x25, 0xc2, 0xc0, 0x5e, 0xa9, 0x46, 0x8d, 0x1d, 0x15, 0xe1, 0x9a, 0xea, 0x65, 0x1f, 0xa6, 0xf5, 0x8f, 0xa4, 0x24, 0x8a, 0x70, 0x78, 0xb7, 0x8a, 0x79, 0x8d, 0x5b, 0x9d, 0xc3, 0x2f, 0x6b, 0x56, 0xe7, 0xf0, 0x0b, 0xdc, 0xea, 0x1c, 0xde, 0xf4, 0x91, 0xa7, 0xdb, 0xa9, 0xcd, 0xd9, 0x2a, 0x75, 0x88, 0xeb, 0xe2, 0xe1, 0x15, 0xa2, 0x6a, 0xe5, 0x0f, 0xb7, 0xa8, 0xf9, 0xe5, 0x68, 0xfe, 0x45, 0x6a, 0xfe, 0x1a, 0xcd, 0x6f, 0x51, 0x29, 0x8b, 0x99, 0x87, 0x08, 0x87, 0x0b, 0x99, 0x8f, 0x08, 0x87, 0xf3, 0xa2, 0x39, 0x26, 0xa9, 0x39, 0x52, 0x3d, 0xa1, 0xdf, 0x7b, 0x34, 0xed, 0x76, 0xe3, 0x0a, 0xf9, 0xb7, 0x62, 0xc2, 0x98, 0x8f, 0xca, 0x48, 0xbe, 0xde, 0x0c, 0x9c, 0x79, 0xf4, 0x6e, 0xdd, 0xce, 0x5a, 0x25, 0xbe, 0x1b, 0xd7, 0xe9, 0x5d, 0x1d, 0x38, 0xbf, 0x9f, 0x13, 0xe1, 0x9d, 0x2b, 0xbe, 0x72, 0xaf, 0x4e, 0xd1, 0xfb, 0xca, 0xb5, 0x9a, 0xfa, 0x3b, 0x30, 0xdf, 0x62, 0x57, 0x2f, 0xc0, 0x94, 0x11, 0x01, 0xc3, 0xeb, 0x23, 0xe4, 0x04, 0xaf, 0x6d, 0xfe, 0xbb, 0x91, 0x3e, 0x94, 0x67, 0xa3, 0x62, 0xaa, 0x9d, 0x7d, 0xde, 0x53, 0xd9, 0x9e, 0xfe, 0xf8, 0x02, 0xe7, 0x12, 0xf4, 0x91, 0xde, 0xe9, 0x4a, 0xb8, 0x1b, 0xf9, 0xdf, 0x8d, 0x39, 0x92, 0xfc, 0x63, 0x77, 0xfa, 0xc9, 0x5f, 0x99, 0xeb, 0x5c, 0x82, 0x6b, 0x8b, 0x77, 0x9e, 0x3f, 0x87, 0x74, 0xe8, 0xe9, 0xc0, 0x3b, 0xcf, 0xd8, 0xec, 0xec, 0xfc, 0xf1, 0xab, 0x2c, 0xb6, 0xba, 0xb2, 0xbd, 0x86, 0xad, 0x08, 0xd9, 0xea, 0xdc, 0x94, 0x63, 0xf3, 0xd5, 0x1e, 0x77, 0x65, 0x87, 0x6c, 0x68, 0x9b, 0x34, 0x4c, 0x0d, 0x62, 0xc6, 0x33, 0xcc, 0x8f, 0xf9, 0xea, 0x1f, 0xde, 0xf1, 0x90, 0x7d, 0x52, 0x7a, 0xab, 0xcb, 0x35, 0x69, 0xbc, 0x93, 0xaf, 0x5f, 0x19, 0x61, 0x6b, 0x5c, 0xd6, 0xdb, 0x70, 0x63, 0x2f, 0xd0, 0x39, 0x0b, 0x3c, 0x2e, 0x61, 0x7c, 0xf3, 0x90, 0xf4, 0x0c, 0xd9, 0xa1, 0xce, 0xbd, 0x19, 0xbe, 0x72, 0xa0, 0xf3, 0xc4, 0x98, 0xce, 0xde, 0x08, 0xf2, 0xf1, 0x76, 0xe8, 0x12, 0xd2, 0xdc, 0x2f, 0x5b, 0x58, 0x9a, 0x5d, 0xed, 0x2f, 0xf2, 0x09, 0x52, 0x31, 0x17, 0xc9, 0x0d, 0x0e, 0x1d, 0xae, 0xa1, 0x34, 0x41, 0xcd, 0x57, 0xa8, 0xe6, 0xdb, 0xc9, 0xe8, 0x26, 0xc8, 0x7e, 0x96, 0xb3, 0x50, 0x2d, 0x2d, 0x55, 0x4e, 0xf6, 0x95, 0xe3, 0x6a, 0xd0, 0x88, 0x54, 0xa9, 0xca, 0xd8, 0x8f, 0x3a, 0x6d, 0xf7, 0x47, 0x22, 0x73, 0xde, 0x8d, 0x5c, 0x15, 0xe1, 0x50, 0x88, 0x9e, 0x18, 0xd0, 0x7e, 0xa8, 0x9e, 0x4c, 0xb2, 0xbb, 0x9f, 0xec, 0x48, 0x60, 0x73, 0x23, 0x7b, 0xdb, 0x50, 0xa7, 0xd0, 0x53, 0x03, 0x3d, 0xf2, 0x5d, 0xe8, 0x71, 0x4a, 0x76, 0x8f, 0x53, 0x4c, 0x64, 0x5f, 0x0b, 0x88, 0xd4, 0xc1, 0x21, 0x4f, 0x17, 0xdb, 0x51, 0x85, 0xa1, 0xe9, 0x22, 0xdc, 0x38, 0xc4, 0xed, 0xc7, 0xa1, 0x1c, 0xb7, 0x9e, 0xd5, 0xd3, 0xe8, 0x2b, 0xaf, 0x3a, 0x30, 0x43, 0xaf, 0xf1, 0xfe, 0x84, 0xcd, 0x17, 0x9f, 0x54, 0xe4, 0x8d, 0xa3, 0x11, 0x23, 0x83, 0xce, 0xed, 0xd5, 0x2b, 0xfa, 0xe2, 0x10, 0x5a, 0x6c, 0x36, 0x26, 0xe0, 0x30, 0x7d, 0x43, 0xe7, 0x8b, 0xe5, 0xc2, 0x38, 0x5a, 0x8f, 0x17, 0xaf, 0x61, 0xad, 0x49, 0xc2, 0x16, 0x64, 0x50, 0x0b, 0x76, 0xaa, 0x25, 0xbd, 0x8d, 0x6b, 0xe6, 0x1b, 0x8b, 0xc8, 0x87, 0xc4, 0x71, 0x06, 0x6f, 0x1f, 0xc2, 0x74, 0x87, 0x96, 0x4e, 0x75, 0x7a, 0x7b, 0x17, 0xed, 0x79, 0x23, 0xed, 0x55, 0xe2, 0x49, 0xba, 0x8c, 0x6a, 0x2b, 0x7a, 0x57, 0xa3, 0xd4, 0x15, 0x0f, 0xbc, 0xbd, 0x91, 0x8f, 0xe6, 0xb7, 0xd7, 0x7b, 0xd6, 0xf4, 0x2c, 0x08, 0xb9, 0xf8, 0xfc, 0xf5, 0x76, 0x07, 0xbb, 0x87, 0x10, 0xcf, 0xef, 0x1d, 0x60, 0xbc, 0x59, 0x5d, 0x29, 0x4f, 0x92, 0x53, 0x7d, 0xe5, 0x81, 0x9f, 0x1f, 0xbf, 0x5b, 0x49, 0x0e, 0x75, 0xe8, 0xa1, 0x5a, 0xa7, 0x24, 0x58, 0x9c, 0x26, 0x98, 0xab, 0x53, 0x2c, 0x16, 0xa7, 0x1e, 0x16, 0x60, 0x3f, 0xbc, 0xed, 0xe4, 0x92, 0x7f, 0xbb, 0x40, 0x84, 0x2f, 0xc2, 0x7c, 0x1c, 0xbc, 0x9d, 0xc9, 0xe7, 0xa1, 0xb7, 0xd3, 0x58, 0x5a, 0x3a, 0xd6, 0x73, 0x2a, 0xd5, 0x73, 0xf8, 0x9d, 0x07, 0x6c, 0xef, 0x86, 0x54, 0xf0, 0xec, 0xdf, 0x19, 0x92, 0xe1, 0x60, 0x7f, 0x65, 0x3b, 0x52, 0x3d, 0x7c, 0x2b, 0x55, 0x02, 0x78, 0xd6, 0x78, 0xf6, 0x77, 0xad, 0x91, 0x2d, 0xbc, 0xdd, 0x0a, 0x44, 0x52, 0xd4, 0xb5, 0x13, 0x96, 0x7a, 0xf0, 0x00, 0xd6, 0x32, 0x4b, 0x49, 0xc4, 0xbc, 0xcc, 0x4a, 0x62, 0x2f, 0xc1, 0x17, 0x53, 0xb1, 0x9f, 0xe0, 0x8b, 0x3c, 0x36, 0x1b, 0x3e, 0x81, 0x34, 0x2f, 0x62, 0x6a, 0x01, 0xb3, 0x7a, 0xaa, 0x1c, 0x0f, 0x3e, 0x83, 0xe9, 0x89, 0x7f, 0xe6, 0x94, 0x93, 0x6d, 0x9f, 0x3d, 0x4b, 0xda, 0x3f, 0x23, 0xe8, 0x1f, 0xc5, 0xbf, 0x1c, 0xc1, 0xde, 0x66, 0x7f, 0x93, 0x5d, 0x8f, 0xb1, 0xeb, 0x71, 0x76, 0x3d, 0xc0, 0xae, 0x87, 0xd8, 0xf5, 0x08, 0x7f, 0xe3, 0x9d, 0xbf, 0x47, 0x3b, 0x63, 0x57, 0x6a, 0x18, 0x5b, 0xb5, 0x7d, 0xe4, 0x1e, 0xd8, 0x1e, 0x4f, 0x7a, 0x1a, 0xc2, 0x5f, 0x0f, 0x86, 0x7b, 0x61, 0xfb, 0xa8, 0x5a, 0xd8, 0x6e, 0xc3, 0xbe, 0xb5, 0x6d, 0x10, 0xa3, 0xcf, 0xfa, 0x1c, 0xf7, 0x3d, 0xb6, 0x08, 0x1c, 0xdf, 0x78, 0xa2, 0x31, 0x10, 0x5c, 0xd5, 0xde, 0xd4, 0xea, 0xef, 0x99, 0x00, 0x98, 0x26, 0xb5, 0x35, 0xc8, 0xca, 0xe2, 0x25, 0x4b, 0x9b, 0x2f, 0x9e, 0x4d, 0x03, 0x24, 0x2c, 0x5c, 0xb9, 0xa2, 0x7e, 0x79, 0x5d, 0xcb, 0xb2, 0xcc, 0xac, 0xc9, 0x90, 0x85, 0xb9, 0x84, 0x68, 0x9d, 0x27, 0xdf, 0xd4, 0x86, 0x47, 0x1e, 0x9d, 0x32, 0xe9, 0xfe, 0x68, 0x4c, 0xbc, 0x3f, 0x75, 0xd2, 0x27, 0xf7, 0xa6, 0x4f, 0xc9, 0x98, 0x38, 0x6d, 0xc6, 0x63, 0x1d, 0xe0, 0x98, 0x33, 0xbf, 0xc4, 0x57, 0xb3, 0x70, 0x6e, 0xd9, 0xec, 0xaa, 0x81, 0xf1, 0x54, 0x8e, 0xab, 0xba, 0xb8, 0x74, 0xa6, 0xc7, 0x5b, 0x5e, 0x71, 0xfd, 0xfc, 0x3f, 0x51, 0x39, 0xd3, 0x17, 0xd4, 0x16, 0xcd, 0x73, 0x57, 0xce, 0x7a, 0x78, 0xea, 0xe3, 0x7f, 0xa6, 0x9c, 0x6f, 0xfe, 0xcd, 0x4d, 0xe5, 0x4c, 0xf8, 0x2f, 0x29, 0x67, 0x50, 0x6e, 0x93, 0xa7, 0x69, 0x72, 0x5b, 0x49, 0x72, 0x7b, 0xe4, 0xd1, 0x61, 0x72, 0x7b, 0xf8, 0x3e, 0x2e, 0xb7, 0x55, 0x9a, 0xdc, 0xa6, 0xfc, 0x65, 0x72, 0x1b, 0x3f, 0x7e, 0x42, 0xda, 0xbd, 0x8f, 0xa5, 0x4f, 0xca, 0x98, 0xf8, 0xf8, 0xfd, 0x5a, 0x7b, 0x16, 0x50, 0x7b, 0xbe, 0xf9, 0x37, 0xc3, 0xda, 0x33, 0x35, 0x95, 0xb7, 0x67, 0x21, 0x6f, 0x4f, 0xe1, 0xf4, 0x19, 0x7f, 0x59, 0x7b, 0xfe, 0xab, 0xca, 0x19, 0x94, 0xdb, 0x99, 0x5d, 0xc3, 0xf4, 0x6d, 0xe0, 0xfe, 0x61, 0x72, 0xbb, 0x7e, 0x7e, 0xc2, 0x7f, 0x44, 0xdf, 0x56, 0x8f, 0x4f, 0xfd, 0xe7, 0x34, 0x55, 0x0f, 0xc4, 0x61, 0x7a, 0x70, 0x7a, 0xd2, 0xb0, 0xf6, 0x7c, 0x70, 0xf0, 0xb1, 0xff, 0x90, 0x1e, 0xbc, 0xe1, 0xfc, 0x61, 0xd7, 0xbe, 0xff, 0xfd, 0xe6, 0x8f, 0x7f, 0xf0, 0x13, 0xa6, 0x07, 0x1f, 0x77, 0x7d, 0xff, 0xb5, 0x1b, 0x2f, 0xfd, 0x68, 0x5b, 0xdf, 0x6e, 0xae, 0x07, 0x17, 0xce, 0xf0, 0x5d, 0x22, 0xff, 0xf4, 0xf0, 0x7d, 0xbc, 0x3d, 0xaf, 0xff, 0xea, 0x93, 0x57, 0xf6, 0xfe, 0xaf, 0x3d, 0x7f, 0xb1, 0x1e, 0xa4, 0x5f, 0x4c, 0xbd, 0x2f, 0xe3, 0x9f, 0x7b, 0xc6, 0x7f, 0x72, 0x76, 0xe2, 0x64, 0x2c, 0x47, 0x5a, 0xa5, 0xe9, 0xdb, 0x63, 0x69, 0x54, 0xce, 0x37, 0x34, 0xb9, 0x2d, 0x6b, 0x6f, 0x67, 0xe5, 0x3c, 0xc1, 0xe4, 0x96, 0xf9, 0xf0, 0xd4, 0x69, 0x7f, 0x59, 0x39, 0x83, 0xfd, 0xd3, 0xf5, 0x38, 0xca, 0xcd, 0xb5, 0x50, 0xd3, 0x03, 0x60, 0x72, 0x9b, 0xa3, 0xc9, 0x6d, 0xd6, 0xbd, 0x5c, 0x0f, 0xe6, 0x33, 0xb9, 0xcd, 0xc8, 0x9a, 0x72, 0xff, 0x5f, 0xaa, 0x07, 0x13, 0xfe, 0x2b, 0xca, 0x71, 0xb9, 0x8b, 0x8a, 0x4b, 0x90, 0x53, 0x19, 0xb1, 0xaa, 0x9c, 0x5d, 0x35, 0xc7, 0x57, 0x5d, 0x33, 0x77, 0xde, 0xfc, 0xda, 0x05, 0x0b, 0xf9, 0xde, 0x06, 0x65, 0x71, 0x13, 0x09, 0xad, 0xa5, 0xd5, 0xff, 0x8d, 0x40, 0x5b, 0xb0, 0x7d, 0xf9, 0x13, 0x2b, 0x56, 0xae, 0x12, 0x06, 0x37, 0x40, 0x0c, 0xb1, 0x5a, 0xf7, 0x8d, 0x4f, 0x9b, 0x30, 0x19, 0xe5, 0xf9, 0xc8, 0xa3, 0x85, 0xd3, 0x9d, 0x59, 0x17, 0xcf, 0xf6, 0x5c, 0x3f, 0x3f, 0xb0, 0xa8, 0xe3, 0x9f, 0xbb, 0x1e, 0x7f, 0x63, 0xe7, 0x37, 0xff, 0x46, 0xd8, 0xf9, 0x67, 0xfe, 0x84, 0xf1, 0xa9, 0xff, 0x84, 0xfa, 0x78, 0x5f, 0xc6, 0xc4, 0x49, 0xf7, 0x67, 0x4e, 0xce, 0x9a, 0x32, 0x58, 0xc4, 0xd4, 0x87, 0x0b, 0xa7, 0x4d, 0x9f, 0xe1, 0xfc, 0xf2, 0x8a, 0x3e, 0xb2, 0xe8, 0xd1, 0xc7, 0x1e, 0xdf, 0xf9, 0xe5, 0xd5, 0xfd, 0x66, 0xc7, 0xdf, 0xec, 0xfc, 0x64, 0xe0, 0xe2, 0xce, 0xf3, 0x67, 0x77, 0x7e, 0xb2, 0x73, 0x67, 0xcf, 0xce, 0xff, 0xc7, 0xff, 0x06, 0x25, 0xcb, 0x45, 0xfa, 0x1f, 0xfd, 0x76, 0xc7, 0xff, 0xfd, 0x7f, 0xec, 0xbc, 0xaa, 0xe8, 0xc9, 0x21, 0xee, 0x40, 0xa3, 0xb4, 0x54, 0xa8, 0x6a, 0x6d, 0x6a, 0x09, 0x0a, 0x18, 0xac, 0x5f, 0xdc, 0xd8, 0x20, 0x48, 0xc1, 0xe8, 0x09, 0xac, 0x69, 0xe0, 0xad, 0xf6, 0x09, 0x7f, 0x96, 0x68, 0x28, 0x41, 0x5b, 0x63, 0xf0, 0xab, 0x39, 0xdc, 0x42, 0x30, 0x9c, 0x3d, 0xed, 0x85, 0xfa, 0x0a, 0xf6, 0x98, 0x70, 0x2b, 0x4b, 0x86, 0x74, 0x35, 0x37, 0x0f, 0x45, 0xb6, 0x09, 0xf5, 0xcd, 0x8d, 0x52, 0x80, 0xce, 0x63, 0x59, 0x86, 0x4c, 0x03, 0x2b, 0x87, 0x1c, 0x2b, 0xab, 0xb2, 0xcc, 0xca, 0xca, 0xb2, 0x80, 0x8b, 0x9f, 0xcc, 0xd2, 0x10, 0xa0, 0x6b, 0x53, 0x9b, 0xd0, 0xd2, 0xfa, 0x04, 0x9d, 0x20, 0x5b, 0xd9, 0x2a, 0x34, 0x34, 0xb5, 0x2d, 0x15, 0x9a, 0x5a, 0xd4, 0x24, 0x46, 0x5c, 0x13, 0x90, 0xea, 0x97, 0x0a, 0xf5, 0xad, 0x81, 0x40, 0xbb, 0x3f, 0x88, 0xd5, 0x64, 0x48, 0xb7, 0xd4, 0x20, 0xb8, 0x9b, 0x5b, 0xeb, 0x97, 0x3e, 0x5e, 0xb4, 0xb8, 0xb1, 0x7e, 0x69, 0x5b, 0xfb, 0x32, 0x8e, 0xaf, 0xa4, 0x73, 0x5f, 0x84, 0xe2, 0xd9, 0xd5, 0x9c, 0x13, 0xc3, 0x15, 0x33, 0x9e, 0x6d, 0xec, 0xc0, 0xb0, 0xc6, 0xc9, 0xfe, 0x40, 0x6b, 0xb0, 0xb1, 0x3e, 0xca, 0xa8, 0xac, 0x85, 0x76, 0xbc, 0x23, 0xb3, 0xa6, 0xe0, 0x32, 0xc9, 0xaf, 0x65, 0x08, 0x20, 0x05, 0x55, 0x9f, 0x8e, 0x87, 0x69, 0x5c, 0xe6, 0x0f, 0xae, 0x54, 0x89, 0x8b, 0x4b, 0x38, 0x5f, 0x76, 0xda, 0xcc, 0x90, 0x12, 0x5b, 0x84, 0xd2, 0xd2, 0x6a, 0x3a, 0x69, 0xa6, 0xac, 0x25, 0x98, 0xc5, 0xc2, 0xd1, 0xe2, 0x33, 0x66, 0x63, 0x8c, 0x0e, 0x33, 0x2b, 0x2e, 0x9a, 0x4c, 0x09, 0xc4, 0xb2, 0xad, 0xdd, 0xef, 0x6f, 0x0d, 0x60, 0x1d, 0x26, 0x22, 0x4f, 0xf6, 0xce, 0x42, 0xb3, 0xe0, 0x97, 0x82, 0x8b, 0xd5, 0xe2, 0x1b, 0x97, 0x37, 0xd5, 0x0f, 0x3d, 0x9a, 0x86, 0x61, 0x99, 0x0e, 0x49, 0xcd, 0x28, 0xc3, 0x86, 0x95, 0x42, 0xe3, 0x8a, 0xa6, 0x36, 0x94, 0xf6, 0x60, 0xf3, 0xe4, 0x76, 0xec, 0x89, 0x41, 0xba, 0x9b, 0xf2, 0x16, 0x49, 0x2d, 0xf7, 0x05, 0x85, 0x7a, 0xcc, 0x1b, 0x6c, 0x14, 0xd8, 0xb9, 0x36, 0x0c, 0x3d, 0xb7, 0x65, 0x29, 0x4a, 0xbe, 0x45, 0x3b, 0x6e, 0x8d, 0x37, 0x51, 0xad, 0x4e, 0xdb, 0xca, 0x96, 0xa0, 0xb4, 0x62, 0x18, 0x4a, 0xed, 0xcb, 0x61, 0xb8, 0x40, 0xa3, 0x82, 0x35, 0x69, 0x0c, 0x0c, 0x43, 0xa2, 0x44, 0xdb, 0x1b, 0x87, 0x61, 0x5a, 0xa4, 0x65, 0xc3, 0x11, 0x6d, 0xc1, 0x40, 0x53, 0x8b, 0x32, 0x0c, 0xd5, 0xb8, 0x82, 0x36, 0xba, 0xd2, 0xd9, 0x3c, 0xb7, 0x69, 0x07, 0xd7, 0x84, 0xd6, 0x56, 0x01, 0x2b, 0xba, 0x52, 0xa8, 0x63, 0x2a, 0xe7, 0x67, 0x2a, 0xc7, 0x52, 0x5a, 0x65, 0xb9, 0xb5, 0x45, 0x98, 0x1f, 0x68, 0x6d, 0x51, 0xa2, 0x55, 0x12, 0x5a, 0xda, 0x97, 0xd5, 0xa9, 0x35, 0x9b, 0xfc, 0xe7, 0xfe, 0x04, 0x4f, 0x49, 0x45, 0x95, 0x50, 0xe5, 0x9a, 0x59, 0x22, 0xfc, 0x59, 0xda, 0xc9, 0x16, 0x1f, 0x9d, 0xc1, 0x83, 0xe5, 0x08, 0x2d, 0x8d, 0x4f, 0x4c, 0xc6, 0xd6, 0x0a, 0x74, 0x00, 0x72, 0xdb, 0x62, 0xd4, 0x62, 0x54, 0x81, 0x65, 0xad, 0x0d, 0x4d, 0xf2, 0xca, 0x68, 0x35, 0xda, 0x2c, 0x2e, 0xa2, 0xd6, 0x06, 0x42, 0x53, 0x0b, 0x36, 0x1d, 0xa9, 0xa5, 0xb6, 0xb6, 0xc6, 0x65, 0x75, 0xd8, 0xc4, 0xfc, 0x02, 0xc7, 0x0a, 0x07, 0x76, 0x41, 0x43, 0xa3, 0xa5, 0x78, 0x28, 0x21, 0xff, 0x9b, 0x4a, 0x8a, 0x14, 0xa5, 0x9d, 0x72, 0xdb, 0x6c, 0x9e, 0xdb, 0x65, 0x5b, 0xdc, 0xb8, 0x42, 0x68, 0x68, 0x5f, 0xe6, 0x17, 0x5a, 0x65, 0x41, 0x1d, 0x8b, 0x83, 0x75, 0xe3, 0x08, 0xcb, 0xac, 0x7f, 0x6f, 0xc6, 0xca, 0xdb, 0x65, 0x94, 0xda, 0xea, 0xcb, 0xca, 0x6e, 0xca, 0x6a, 0x29, 0xa1, 0x34, 0xec, 0x1d, 0x32, 0x40, 0x51, 0x4a, 0x26, 0xa9, 0x29, 0x42, 0x63, 0x43, 0x13, 0x2a, 0x65, 0x7b, 0x5b, 0xb0, 0x75, 0xd9, 0x10, 0x69, 0xd5, 0x2c, 0xa8, 0x2a, 0x61, 0xbc, 0xb3, 0x84, 0xc1, 0x1c, 0xc1, 0x95, 0xfe, 0x46, 0x8d, 0x65, 0x11, 0xa1, 0xda, 0x02, 0xf5, 0x42, 0x23, 0xaa, 0x77, 0x43, 0x63, 0x5b, 0x90, 0x08, 0xea, 0x5b, 0xfd, 0x68, 0x6c, 0xb4, 0x0a, 0xd7, 0x91, 0x65, 0xb0, 0xcc, 0x61, 0x84, 0xc1, 0x40, 0x70, 0x90, 0x92, 0x08, 0x97, 0xf9, 0xd1, 0x42, 0x09, 0xc1, 0x27, 0x5a, 0x87, 0x51, 0xb7, 0x59, 0x66, 0x0f, 0x23, 0x67, 0xbd, 0x3a, 0x95, 0x06, 0x4b, 0x73, 0xb4, 0xe0, 0x92, 0xdb, 0x14, 0xdc, 0xb8, 0xa2, 0x7e, 0xb1, 0xd4, 0xa2, 0xdc, 0x8e, 0x61, 0xe9, 0xed, 0x19, 0xb6, 0x34, 0x58, 0xd0, 0x0c, 0x0c, 0x49, 0x21, 0x85, 0x50, 0x53, 0xd4, 0x71, 0x21, 0x64, 0x90, 0xe2, 0xd7, 0x4b, 0x6d, 0x8d, 0x6d, 0x8d, 0x2d, 0x6d, 0x4d, 0x64, 0x2c, 0x27, 0x5a, 0x4a, 0xcb, 0xbe, 0x2c, 0x13, 0xd3, 0xa9, 0x76, 0x76, 0x1e, 0x96, 0xa5, 0x68, 0x76, 0xd5, 0x10, 0x2a, 0x55, 0x7c, 0x8c, 0x0a, 0x45, 0xe4, 0x6f, 0x0c, 0x4c, 0x6e, 0x46, 0x39, 0x5b, 0xaa, 0x08, 0xef, 0x6f, 0xaa, 0x6f, 0x69, 0x1d, 0x22, 0x64, 0x45, 0x5e, 0x31, 0x39, 0xd0, 0x44, 0x44, 0x42, 0x06, 0x4b, 0x9b, 0xe6, 0xc8, 0xcc, 0xce, 0xcc, 0xc9, 0xcc, 0xca, 0x9a, 0x28, 0x64, 0xc8, 0xd1, 0xe3, 0x19, 0xb1, 0x84, 0x89, 0x16, 0x8b, 0xfb, 0x16, 0x0d, 0xa0, 0x8e, 0x6d, 0x0c, 0x4e, 0xe1, 0xb3, 0x09, 0x99, 0xc4, 0x26, 0x75, 0x60, 0xb3, 0xd1, 0xca, 0x06, 0xab, 0xc5, 0xed, 0xfd, 0x33, 0xb9, 0x04, 0x9a, 0x66, 0x86, 0x66, 0x28, 0x16, 0x6e, 0xfe, 0xc3, 0x21, 0xd1, 0xd8, 0xdc, 0x18, 0x24, 0x63, 0x38, 0x94, 0x77, 0x9b, 0x65, 0xd6, 0xfc, 0xac, 0x8c, 0xba, 0x8e, 0x27, 0x3a, 0x9a, 0x27, 0x0e, 0x99, 0x76, 0x86, 0x30, 0x57, 0x7b, 0xe7, 0x09, 0x29, 0x58, 0xbf, 0x18, 0x89, 0x6f, 0xc3, 0x78, 0x79, 0x53, 0xe3, 0x13, 0x8c, 0xed, 0x4d, 0xa4, 0xc5, 0x5f, 0x59, 0x87, 0x61, 0xc4, 0x33, 0x6f, 0x27, 0x17, 0xda, 0xa4, 0x2f, 0x61, 0x97, 0xe0, 0xdc, 0xa3, 0x04, 0xa4, 0x65, 0x43, 0x66, 0x5a, 0x4b, 0x0d, 0x12, 0xb4, 0xd4, 0xa1, 0xea, 0xfb, 0x87, 0xd0, 0x07, 0x71, 0xca, 0x6b, 0x1c, 0xda, 0xad, 0x19, 0x6d, 0x13, 0x2d, 0x35, 0xae, 0xdb, 0x70, 0xe6, 0x94, 0x41, 0xd2, 0xd2, 0xfb, 0xd4, 0xc4, 0xfb, 0x68, 0xae, 0x53, 0x5d, 0x06, 0x4b, 0x71, 0x89, 0x7b, 0xee, 0xcc, 0x9b, 0xeb, 0xee, 0xa7, 0x9a, 0x92, 0xe6, 0x36, 0xfa, 0xd9, 0x19, 0x6a, 0xcb, 0xd9, 0x6c, 0xd7, 0x66, 0xb1, 0x14, 0xfb, 0xca, 0xe6, 0x95, 0x08, 0x43, 0x94, 0x82, 0x77, 0x4f, 0x33, 0xa6, 0xab, 0x33, 0x72, 0x86, 0x63, 0x4a, 0xf6, 0x44, 0x34, 0xc9, 0x01, 0xfa, 0x2d, 0xa3, 0x76, 0xa0, 0x66, 0xd1, 0x9c, 0x34, 0x85, 0xcd, 0xae, 0x48, 0x4c, 0xac, 0x2c, 0xb3, 0x66, 0xd7, 0xcc, 0xf6, 0xdd, 0x5c, 0x6c, 0xb0, 0x3d, 0xa0, 0x4d, 0xec, 0xcb, 0x5a, 0x83, 0x74, 0x2c, 0x5b, 0x8b, 0x85, 0x4e, 0xf7, 0x74, 0xd5, 0xb0, 0xf9, 0x61, 0x90, 0x50, 0x63, 0x2d, 0xc8, 0xcd, 0xa8, 0xb3, 0x2b, 0xd9, 0x5c, 0xaa, 0x52, 0xce, 0x19, 0x4a, 0x3a, 0x55, 0xf8, 0x46, 0x7b, 0x13, 0xfa, 0x06, 0xb7, 0xa5, 0x2f, 0x2e, 0xab, 0x2e, 0x2f, 0xf2, 0x94, 0x0f, 0xaf, 0x42, 0x3d, 0x39, 0x0b, 0xb7, 0x10, 0xfa, 0xf8, 0xe4, 0x3b, 0xac, 0x7b, 0x35, 0x17, 0xc0, 0x52, 0x84, 0x9d, 0x7f, 0x4b, 0xb2, 0x3a, 0xe6, 0xeb, 0xdb, 0x03, 0x81, 0x46, 0xf4, 0x85, 0xa2, 0xd4, 0x82, 0x90, 0x71, 0xdf, 0x94, 0xfb, 0x98, 0x7c, 0xc8, 0xca, 0xb4, 0x04, 0x27, 0x5a, 0x2a, 0xa8, 0x83, 0xa9, 0xce, 0xd4, 0x3d, 0x5a, 0x7e, 0x76, 0x12, 0x9d, 0xc4, 0xa7, 0x62, 0xf4, 0x76, 0x54, 0x03, 0x53, 0xad, 0x91, 0x0e, 0x8e, 0x5f, 0x14, 0xbf, 0x34, 0xa8, 0xba, 0xc1, 0x56, 0x35, 0x93, 0xa5, 0xba, 0x4a, 0x18, 0x26, 0x34, 0x21, 0x4a, 0x1a, 0x5c, 0xdc, 0x48, 0x27, 0xdf, 0xb5, 0x93, 0x4b, 0xa1, 0x9e, 0xd1, 0x2f, 0x07, 0xd0, 0xc2, 0x12, 0x7e, 0x70, 0x84, 0x5b, 0x66, 0xb9, 0xca, 0x4b, 0xa8, 0xe5, 0xc3, 0xc4, 0xa9, 0x7a, 0x08, 0x12, 0xcd, 0x6b, 0x43, 0x44, 0x50, 0x5c, 0x52, 0x71, 0x6b, 0x61, 0xda, 0x00, 0xe0, 0x8d, 0xc0, 0x06, 0xe3, 0x88, 0xe7, 0xae, 0xd2, 0x10, 0xd9, 0xcd, 0xae, 0x5a, 0xc0, 0x2c, 0x26, 0xb7, 0x96, 0x6a, 0x21, 0xdc, 0x54, 0xb3, 0x66, 0xf8, 0xaa, 0xb9, 0x4e, 0xf3, 0x16, 0xb7, 0xd4, 0xa9, 0xa3, 0x05, 0x85, 0xc3, 0x15, 0x89, 0x57, 0x7d, 0x68, 0x6f, 0xcd, 0xbf, 0x5d, 0x8e, 0xa1, 0xba, 0x47, 0x42, 0x1a, 0xd6, 0xbd, 0x39, 0xa5, 0xb7, 0x56, 0x9e, 0x15, 0x31, 0x4c, 0x0d, 0x98, 0x22, 0x33, 0x01, 0xe2, 0xa4, 0x24, 0xb5, 0x69, 0x15, 0x2c, 0xcd, 0x29, 0xfe, 0xf2, 0xdc, 0xcc, 0x23, 0xc3, 0x6c, 0xbc, 0xf8, 0x68, 0xbe, 0x21, 0x85, 0xbb, 0xdd, 0xc2, 0x90, 0x7e, 0xd7, 0x04, 0x20, 0x35, 0xd7, 0xb7, 0x37, 0x93, 0xa0, 0xeb, 0x5a, 0x5b, 0x83, 0x93, 0xd9, 0x6c, 0xc1, 0x35, 0x13, 0xdd, 0x58, 0x0b, 0xf9, 0x98, 0xb7, 0x58, 0x1b, 0x05, 0xa7, 0xcf, 0xa6, 0x16, 0xae, 0xe7, 0xec, 0xd4, 0x43, 0x12, 0x0b, 0xf3, 0x46, 0x69, 0x38, 0xb5, 0x59, 0xaa, 0x5c, 0xbe, 0x9a, 0x5b, 0x32, 0x91, 0xa5, 0x67, 0x06, 0x0a, 0x55, 0x31, 0xd8, 0x44, 0xf9, 0xda, 0x2c, 0x15, 0xae, 0x9b, 0x9b, 0x13, 0xd5, 0xc6, 0xe6, 0x66, 0x4b, 0xf5, 0xed, 0x52, 0x99, 0x50, 0x78, 0x6a, 0xd1, 0x97, 0xe8, 0x1c, 0x15, 0x52, 0x1f, 0x68, 0x6f, 0x61, 0x26, 0xa7, 0xa8, 0xa2, 0xc4, 0x75, 0xcb, 0xd8, 0x67, 0xeb, 0x82, 0xa1, 0xd6, 0x92, 0xdb, 0x0d, 0x12, 0x80, 0x90, 0xa1, 0x1e, 0xdf, 0xdb, 0xdc, 0xda, 0x86, 0xe3, 0xc5, 0x57, 0xe2, 0x9e, 0x3d, 0xbb, 0xe6, 0xa6, 0xec, 0x2a, 0x25, 0x65, 0x5a, 0xda, 0xd8, 0xe8, 0xd7, 0x0e, 0xfc, 0x45, 0x73, 0xd7, 0xd4, 0x80, 0xa3, 0xcc, 0x62, 0xa9, 0xa9, 0x1e, 0x1c, 0x34, 0xcd, 0x24, 0x12, 0xd5, 0x38, 0x36, 0xb5, 0x34, 0x92, 0xaa, 0xa0, 0x00, 0x90, 0xa4, 0xf8, 0x66, 0x1a, 0xd2, 0x62, 0xe4, 0x76, 0x13, 0x1d, 0xce, 0xdb, 0x2a, 0x8b, 0x61, 0x76, 0x96, 0x91, 0xb0, 0x99, 0x14, 0x67, 0x67, 0xec, 0x88, 0x66, 0x56, 0x1d, 0x62, 0x80, 0xd3, 0x61, 0x49, 0x6d, 0x51, 0x49, 0xd5, 0xcd, 0x8d, 0x66, 0x7e, 0xce, 0xad, 0x66, 0x76, 0xf6, 0xdc, 0x9a, 0xaa, 0xb9, 0x35, 0xc3, 0xf4, 0x42, 0x1d, 0x15, 0xad, 0xed, 0x41, 0x7f, 0x7b, 0x90, 0x34, 0x58, 0xb5, 0x08, 0xae, 0x52, 0x55, 0x7f, 0xb8, 0xdb, 0xa8, 0x39, 0x5a, 0x9a, 0x0f, 0xf8, 0x40, 0x41, 0x76, 0xbe, 0xa5, 0xb8, 0xf4, 0x36, 0xf3, 0xc2, 0x50, 0xaf, 0x91, 0x93, 0x95, 0x96, 0x95, 0xde, 0xe4, 0x3d, 0x0c, 0x73, 0x1f, 0xb2, 0x54, 0xb2, 0x2a, 0x57, 0xc5, 0xad, 0xea, 0x47, 0xde, 0x1b, 0x25, 0x20, 0x57, 0x7f, 0xb3, 0x84, 0xfe, 0x5f, 0x4d, 0x75, 0xd1, 0x6d, 0x89, 0x58, 0x82, 0x46, 0x95, 0x9b, 0x5d, 0x7e, 0x7b, 0x56, 0x98, 0xb0, 0x78, 0x95, 0x46, 0x26, 0x64, 0x54, 0x05, 0x5a, 0x1b, 0x68, 0x9a, 0x5b, 0xde, 0x14, 0x5c, 0x99, 0x29, 0x94, 0xb4, 0x07, 0x5a, 0x1f, 0x24, 0xa7, 0x23, 0x0b, 0x6d, 0x67, 0xc9, 0x6d, 0x66, 0xde, 0xb6, 0x27, 0x9a, 0x68, 0xfa, 0xf2, 0xb7, 0x3e, 0xd1, 0x48, 0x27, 0x76, 0x36, 0x58, 0xaa, 0x4b, 0x6a, 0x66, 0xb9, 0xaa, 0x70, 0x65, 0xe0, 0x8f, 0x6a, 0xe7, 0x54, 0xa1, 0x1a, 0xe7, 0x7d, 0x26, 0xff, 0xa5, 0x8d, 0x2b, 0x69, 0x61, 0x97, 0x31, 0xb7, 0xda, 0x95, 0x59, 0xe4, 0xc9, 0x2c, 0xce, 0x2c, 0x9d, 0x68, 0x99, 0x81, 0x24, 0x83, 0xcb, 0x0d, 0x35, 0x47, 0x23, 0x2d, 0x5b, 0x98, 0xf9, 0x6b, 0x19, 0x92, 0x68, 0x99, 0x57, 0xe2, 0xbb, 0x4d, 0x1d, 0x88, 0xb3, 0x76, 0xea, 0xb4, 0x7a, 0xa0, 0x68, 0xad, 0x70, 0x1b, 0x8f, 0x02, 0x17, 0x6a, 0x41, 0x4b, 0x79, 0x59, 0x45, 0xc5, 0x2d, 0x29, 0xaa, 0x53, 0xc2, 0x99, 0x58, 0x3c, 0x25, 0xb5, 0x15, 0xb3, 0x8b, 0xca, 0x85, 0x8c, 0xd6, 0x96, 0x0e, 0x74, 0x97, 0x27, 0x0e, 0x69, 0x29, 0x2a, 0x22, 0xfa, 0xe4, 0x52, 0x43, 0x63, 0x7d, 0x13, 0x29, 0x1d, 0x7a, 0xe2, 0x8d, 0x64, 0x68, 0x1a, 0x1a, 0x65, 0xa9, 0xbd, 0x19, 0x55, 0xbf, 0x34, 0x5b, 0xe5, 0x58, 0xc4, 0xc6, 0x18, 0x3f, 0x0c, 0x18, 0x0d, 0x97, 0x8a, 0xad, 0x69, 0x55, 0x14, 0x36, 0xcb, 0xb4, 0x35, 0x62, 0xe7, 0xb3, 0xdc, 0xad, 0x2d, 0x53, 0xb0, 0x0c, 0xcc, 0xe8, 0x50, 0x65, 0xa5, 0x4a, 0x54, 0x52, 0xb0, 0xac, 0xec, 0x29, 0x39, 0x96, 0xd2, 0x07, 0xd5, 0xcc, 0x25, 0x2d, 0xe8, 0x93, 0x4f, 0x29, 0xc1, 0x46, 0x70, 0x4f, 0x23, 0x60, 0x29, 0xcd, 0x1f, 0xce, 0x97, 0x69, 0xcd, 0x14, 0xbc, 0x3a, 0x72, 0x84, 0xa2, 0xaa, 0xb9, 0xac, 0x00, 0x4b, 0x49, 0x5b, 0x3d, 0x27, 0x62, 0x4b, 0xfe, 0x29, 0x4d, 0x0a, 0x0e, 0x98, 0x46, 0x81, 0xde, 0xaa, 0xb2, 0xd4, 0x48, 0x75, 0x3c, 0x49, 0xad, 0x50, 0x5d, 0xb3, 0xd4, 0x42, 0xd6, 0x4f, 0x42, 0xf6, 0x58, 0x96, 0xc5, 0x55, 0x51, 0x23, 0xa8, 0x34, 0xb7, 0x92, 0x31, 0x0e, 0xd5, 0x9e, 0xb2, 0xd2, 0x1a, 0xa1, 0xb8, 0xb1, 0x79, 0x38, 0x85, 0x74, 0x5b, 0x56, 0x1a, 0xd9, 0x10, 0x89, 0x0f, 0x61, 0xe2, 0x96, 0xd0, 0xe6, 0xfa, 0xeb, 0xa3, 0xf6, 0x49, 0x9b, 0xcf, 0x19, 0x49, 0x51, 0x8d, 0x0f, 0x7b, 0xad, 0xdd, 0x9f, 0xd9, 0x40, 0x6b, 0xe4, 0xa9, 0x02, 0xcb, 0xcc, 0xce, 0xbe, 0xd6, 0x8e, 0x27, 0x5f, 0xdc, 0xd4, 0xc6, 0xa6, 0x39, 0xce, 0x6c, 0x90, 0x92, 0x74, 0x1c, 0x59, 0xb5, 0xf1, 0xc9, 0x28, 0xd8, 0xea, 0x9f, 0x52, 0xd7, 0x1a, 0xa4, 0x55, 0x0e, 0xae, 0x8b, 0xd4, 0xee, 0xb1, 0xd0, 0x9a, 0x73, 0x66, 0x69, 0xad, 0xa0, 0x3a, 0xdc, 0x8b, 0x1b, 0x9b, 0xfd, 0xc3, 0x56, 0x9e, 0x16, 0xad, 0x7b, 0x04, 0x26, 0xfd, 0x21, 0x33, 0xb7, 0x2b, 0x10, 0x68, 0x7d, 0x02, 0x87, 0xfa, 0x2c, 0xaa, 0x4f, 0x7b, 0x0b, 0xcd, 0x1e, 0x8d, 0x0d, 0x02, 0xfb, 0x8a, 0x4f, 0x96, 0xa5, 0x7a, 0x71, 0x93, 0x4c, 0x33, 0x6d, 0xa9, 0xd4, 0x16, 0x64, 0x35, 0xb6, 0x64, 0x4f, 0x2e, 0x60, 0x6c, 0x2a, 0x90, 0x6e, 0xca, 0x5c, 0x46, 0xce, 0x88, 0x05, 0x4c, 0xe0, 0x2b, 0x40, 0xfc, 0x2b, 0x6b, 0xa1, 0xa9, 0xbf, 0x8d, 0x1c, 0xb3, 0x86, 0xf6, 0xe6, 0x56, 0xbe, 0xc0, 0xc3, 0xbf, 0xe2, 0xc6, 0xe1, 0xf8, 0x4c, 0x15, 0xcf, 0x55, 0x4d, 0x45, 0xce, 0xb9, 0x99, 0xd8, 0x3f, 0xf4, 0xfb, 0x41, 0x96, 0xf9, 0x37, 0x97, 0x31, 0x3c, 0xd9, 0xf5, 0x65, 0xb9, 0xf9, 0xb7, 0x86, 0x98, 0x53, 0x74, 0xdb, 0xec, 0x6a, 0xba, 0x36, 0x3a, 0xab, 0x1b, 0xf9, 0x64, 0x57, 0xa7, 0x7d, 0xd1, 0x88, 0x44, 0x8f, 0x3e, 0x4f, 0x9b, 0xe6, 0x7b, 0x91, 0xb7, 0xed, 0x51, 0x89, 0x55, 0xe5, 0xf5, 0xb8, 0x66, 0x69, 0x83, 0xa1, 0x64, 0x78, 0x4a, 0x89, 0xc7, 0xad, 0xa5, 0x78, 0xa8, 0x6b, 0xa8, 0x00, 0x3e, 0x4a, 0x68, 0x1a, 0xc6, 0xa1, 0xd2, 0x82, 0x8a, 0xa5, 0x12, 0x68, 0x3a, 0x56, 0xa4, 0x3a, 0x85, 0xad, 0xcd, 0xe4, 0xdb, 0xca, 0x43, 0x28, 0xb5, 0x31, 0x2a, 0x54, 0xd3, 0x0c, 0x33, 0xa5, 0x1a, 0x55, 0x42, 0xfb, 0x94, 0x12, 0xe9, 0x0a, 0x1b, 0x33, 0x4c, 0x23, 0xb4, 0x23, 0x85, 0x6f, 0x51, 0x07, 0xa6, 0x11, 0xf3, 0xcb, 0x6e, 0x67, 0x62, 0x98, 0x2d, 0x62, 0x65, 0x49, 0x75, 0x38, 0x81, 0x44, 0x79, 0x90, 0x86, 0xaa, 0xd3, 0xc8, 0x7c, 0x66, 0x7e, 0x54, 0x2f, 0xf4, 0xcf, 0x38, 0xa1, 0xf3, 0xab, 0x85, 0x5b, 0xdc, 0xd0, 0x2f, 0xf3, 0x42, 0xe7, 0x57, 0x15, 0x6b, 0x6b, 0xd2, 0xe6, 0xc6, 0x96, 0x9b, 0x3c, 0x43, 0x95, 0x5a, 0xbd, 0xdf, 0x46, 0x16, 0x72, 0x7e, 0x95, 0xef, 0x36, 0xe4, 0x2a, 0x81, 0x46, 0xcf, 0x5c, 0x1b, 0xf2, 0xb0, 0x70, 0x1d, 0x8c, 0x39, 0xe6, 0x7f, 0xcd, 0x1c, 0xe4, 0x83, 0xf1, 0x1c, 0xbe, 0xf9, 0x7f, 0x51, 0x19, 0x51, 0x0f, 0x8e, 0xe7, 0xae, 0x9e, 0x55, 0x74, 0x4b, 0xee, 0xb6, 0x96, 0x56, 0xec, 0x30, 0x35, 0x2f, 0xdd, 0xa9, 0x20, 0x0f, 0x0c, 0xfb, 0x18, 0x57, 0x46, 0x32, 0xbf, 0x31, 0x42, 0x7c, 0xd8, 0xbd, 0x98, 0xf9, 0x73, 0x6e, 0xd7, 0x45, 0xb8, 0x4c, 0x09, 0x6a, 0x07, 0x50, 0x5b, 0x6e, 0x5d, 0x4d, 0xde, 0x4c, 0x82, 0x23, 0x03, 0xd7, 0x1b, 0x0d, 0x8d, 0x75, 0xed, 0x8a, 0x90, 0x41, 0x37, 0x54, 0x48, 0xd8, 0x13, 0x2d, 0x00, 0x85, 0x1d, 0x63, 0x57, 0xac, 0x5e, 0x5d, 0x28, 0x17, 0x9a, 0x0e, 0x89, 0x87, 0x0e, 0x15, 0x76, 0xac, 0xe8, 0x28, 0x5c, 0x2d, 0xcb, 0x87, 0xde, 0x7a, 0xeb, 0x06, 0x1d, 0xa9, 0x08, 0x29, 0x20, 0xda, 0xad, 0xa2, 0x5d, 0xfb, 0xb0, 0x8a, 0x0a, 0x0b, 0xed, 0x85, 0x85, 0x29, 0xab, 0x53, 0x56, 0x17, 0x16, 0x42, 0x33, 0x46, 0x0b, 0x0c, 0x56, 0x07, 0xe2, 0xec, 0xf6, 0x66, 0x96, 0x58, 0x08, 0xd0, 0x01, 0x56, 0x87, 0x03, 0x64, 0x08, 0xdb, 0x29, 0x06, 0xf1, 0xda, 0x27, 0xb2, 0x65, 0xd9, 0xd1, 0x2c, 0x8a, 0xb2, 0x6c, 0x37, 0x1d, 0x15, 0xaf, 0x5c, 0x90, 0xe5, 0xa3, 0x18, 0xc4, 0xd2, 0x64, 0xd9, 0xca, 0x4a, 0x73, 0xd0, 0x67, 0xd0, 0x6f, 0x29, 0x4d, 0x2e, 0x90, 0xe5, 0x42, 0xd1, 0x61, 0x42, 0xda, 0x66, 0x19, 0xe4, 0x66, 0x93, 0xdd, 0x0e, 0xb2, 0xdd, 0x3e, 0x1d, 0x4b, 0xb3, 0xdb, 0x1d, 0x56, 0x93, 0x78, 0x08, 0xa1, 0x1d, 0x53, 0x44, 0xbb, 0x48, 0xaf, 0xda, 0xd9, 0xed, 0xab, 0xb5, 0xd2, 0x44, 0x59, 0xc4, 0xe2, 0xec, 0xa6, 0x93, 0xe2, 0x8d, 0xeb, 0x54, 0x9a, 0x9f, 0x4a, 0x2b, 0xc4, 0xea, 0x77, 0x14, 0x4e, 0x2f, 0xec, 0x98, 0xde, 0x61, 0xb7, 0xca, 0xf6, 0xcb, 0x1d, 0x14, 0x2a, 0xec, 0xc0, 0x94, 0x43, 0xf2, 0x6a, 0x68, 0x59, 0x61, 0x32, 0x35, 0x77, 0x88, 0x54, 0x1a, 0x36, 0xe5, 0xd5, 0xc5, 0x56, 0x87, 0x75, 0xb5, 0xc9, 0x61, 0x17, 0x6f, 0xf0, 0xd2, 0xec, 0xf6, 0x0f, 0x11, 0x5d, 0x08, 0x85, 0xe0, 0xe0, 0x6d, 0xa3, 0x92, 0xf9, 0xd3, 0xc9, 0x0e, 0x51, 0x5e, 0xb1, 0xa2, 0x65, 0xb5, 0xdd, 0xd4, 0x2b, 0x7e, 0xf0, 0xa1, 0xdc, 0x71, 0xb4, 0xa3, 0x10, 0x4b, 0xfb, 0x00, 0x33, 0x99, 0xb0, 0x1e, 0xb2, 0x03, 0x19, 0x5a, 0x9b, 0xed, 0x37, 0x64, 0xfa, 0x13, 0x31, 0x76, 0xa8, 0x19, 0x5b, 0xbd, 0xda, 0x6e, 0x4d, 0x39, 0x6a, 0xea, 0xb0, 0x16, 0x4e, 0x5f, 0x0d, 0x11, 0xf1, 0xe4, 0x72, 0x2c, 0x01, 0xac, 0x60, 0x2f, 0x6c, 0xa6, 0x26, 0x38, 0xac, 0xa2, 0xe9, 0x03, 0x90, 0x4d, 0xd8, 0x39, 0x32, 0x2b, 0x26, 0x02, 0xfe, 0x78, 0x79, 0x68, 0xdb, 0x64, 0xd6, 0xb6, 0x43, 0xc7, 0x64, 0xf1, 0x68, 0x73, 0xbc, 0x5d, 0x2e, 0xbc, 0x51, 0x68, 0x17, 0xa7, 0x63, 0xca, 0x6a, 0x56, 0xda, 0x0a, 0xfb, 0x07, 0xac, 0xb0, 0x42, 0x8c, 0x7d, 0x50, 0x80, 0xed, 0x59, 0x6e, 0xb7, 0x9b, 0x6e, 0x20, 0x2f, 0xd9, 0x84, 0x6d, 0x13, 0xf3, 0x4f, 0x3b, 0xb0, 0x6d, 0x76, 0x40, 0x1c, 0x13, 0x37, 0x6b, 0xdb, 0xea, 0xe9, 0xab, 0xe5, 0xe9, 0xb2, 0xd5, 0x4e, 0x4d, 0x1b, 0x6c, 0x5b, 0xb4, 0xdf, 0xe4, 0xa3, 0xa8, 0x25, 0xb2, 0x78, 0x9a, 0x82, 0x85, 0x57, 0x64, 0x7b, 0x98, 0xd5, 0xc3, 0x31, 0x9d, 0xb5, 0x0d, 0xfb, 0xb1, 0x63, 0xba, 0x68, 0x72, 0x60, 0x3d, 0x9a, 0x0b, 0xb1, 0xfb, 0xed, 0x0e, 0xd9, 0x4a, 0x84, 0x56, 0xec, 0x2f, 0x71, 0xc9, 0x31, 0xd1, 0xce, 0x7a, 0xb6, 0xa3, 0x99, 0xba, 0x8b, 0xfa, 0x2d, 0x8c, 0xfd, 0x85, 0x4c, 0xb1, 0x36, 0xa6, 0xe1, 0xa5, 0x91, 0x4e, 0x62, 0x3b, 0x0a, 0x0b, 0x0f, 0xad, 0x46, 0x9d, 0x14, 0x57, 0xcb, 0xd8, 0x63, 0xf6, 0x43, 0x6f, 0xd9, 0x6f, 0x4c, 0xa7, 0x7e, 0x43, 0x79, 0x5a, 0xad, 0xb2, 0xf5, 0x10, 0x2a, 0x85, 0x49, 0xec, 0x48, 0x99, 0x6e, 0x6f, 0x3e, 0x84, 0x3d, 0x5e, 0x68, 0x5f, 0x5d, 0x68, 0xa5, 0xae, 0x2d, 0x20, 0x1d, 0x3c, 0xfa, 0xcd, 0x30, 0xea, 0x24, 0xb6, 0xcd, 0xce, 0x4a, 0xa3, 0x9e, 0x5a, 0x61, 0xc7, 0xbc, 0x85, 0xd3, 0xa7, 0x1b, 0x58, 0xdb, 0xcc, 0xf1, 0xfe, 0xd5, 0x5f, 0xef, 0x49, 0x0b, 0x65, 0xe5, 0x8f, 0x37, 0x4d, 0x37, 0x29, 0xa6, 0xf6, 0x67, 0x1f, 0xf6, 0xf1, 0x21, 0xc7, 0x2d, 0x1c, 0x6e, 0xfc, 0xbf, 0xf2, 0x50, 0x4a, 0x0f, 0xd3, 0x18, 0x0c, 0xc1, 0x7f, 0x83, 0x7f, 0x80, 0x7f, 0x81, 0x43, 0xf0, 0xaf, 0xf0, 0x85, 0x6e, 0xb4, 0xee, 0x4e, 0xdd, 0x24, 0xdd, 0x34, 0x5d, 0x95, 0xae, 0x55, 0xf7, 0xed, 0x5b, 0xbe, 0xca, 0xf5, 0x8f, 0xba, 0x9d, 0xba, 0x5f, 0xe9, 0xae, 0xeb, 0xc7, 0xeb, 0x67, 0xe8, 0x45, 0xfd, 0x93, 0xfa, 0x67, 0xf5, 0xcf, 0xeb, 0x5f, 0xd4, 0xbf, 0xac, 0x7f, 0x4d, 0xbf, 0x5b, 0xff, 0xa6, 0xfe, 0x90, 0xfe, 0x98, 0xfe, 0x03, 0xfd, 0x87, 0xfa, 0x4f, 0xf4, 0xbd, 0xfa, 0xcf, 0x0d, 0x7a, 0xc3, 0x08, 0x43, 0xa2, 0xa1, 0xd0, 0x50, 0x69, 0x10, 0x0d, 0xcb, 0x0c, 0xab, 0x0d, 0xeb, 0x0d, 0xff, 0x60, 0xf8, 0x91, 0xe1, 0x67, 0x86, 0x8b, 0x00, 0x46, 0x8b, 0x71, 0x92, 0x8b, 0x1d, 0xec, 0x8f, 0x8e, 0x0a, 0xbd, 0x40, 0xeb, 0x52, 0xd7, 0x2f, 0x25, 0xf4, 0x5c, 0x25, 0xfa, 0x44, 0xa0, 0x6c, 0xf0, 0x06, 0x18, 0x94, 0xa1, 0x27, 0xaa, 0xa0, 0xa3, 0x54, 0x8c, 0xcb, 0x04, 0x74, 0x61, 0xeb, 0x56, 0x0a, 0x0b, 0x1b, 0x03, 0xad, 0x50, 0xe4, 0x29, 0x47, 0xaf, 0xbe, 0x3c, 0x67, 0x18, 0x6d, 0x8d, 0xcf, 0x55, 0x35, 0x2f, 0x93, 0xae, 0xf5, 0xf5, 0x99, 0xf5, 0x7e, 0x1e, 0x18, 0x46, 0x51, 0x85, 0xcb, 0x66, 0xb4, 0xa9, 0x38, 0x5b, 0xcf, 0x6b, 0x6a, 0x6d, 0x96, 0x78, 0x2e, 0x72, 0x70, 0xa1, 0x02, 0x5d, 0x3f, 0x21, 0xdb, 0x81, 0xbe, 0x57, 0xc9, 0x32, 0x5a, 0xa4, 0x63, 0x75, 0x38, 0x0a, 0xff, 0x06, 0x51, 0x5a, 0x80, 0x9e, 0xf7, 0x34, 0xb2, 0x07, 0x53, 0x50, 0xd4, 0x8a, 0x93, 0x0c, 0x35, 0x09, 0xb1, 0xb8, 0xa2, 0x09, 0xb6, 0xa2, 0x1f, 0x30, 0x84, 0x3b, 0xce, 0xfc, 0xf5, 0x4b, 0xe5, 0x00, 0x4d, 0xab, 0xa5, 0xfc, 0x76, 0x15, 0x6f, 0xeb, 0xdc, 0x96, 0xa6, 0x16, 0x9c, 0x7b, 0xa4, 0xe6, 0xa6, 0x55, 0xe8, 0xc5, 0x0d, 0xb2, 0xab, 0xf6, 0xb7, 0x07, 0x9a, 0x5a, 0xdb, 0xdb, 0x86, 0xa0, 0x2a, 0x1a, 0x97, 0xa3, 0xa7, 0x91, 0x2d, 0xb8, 0xda, 0x83, 0xad, 0x7c, 0x2d, 0x29, 0x64, 0xd4, 0xb8, 0x4b, 0xa6, 0x14, 0x57, 0x97, 0xbb, 0x2b, 0xca, 0xa7, 0x54, 0xcf, 0x2e, 0xad, 0x99, 0xa8, 0x12, 0xe5, 0x0c, 0x23, 0x2a, 0x2a, 0x73, 0x4d, 0x76, 0x4d, 0x29, 0xa9, 0x8d, 0x26, 0xe7, 0x0e, 0x4f, 0x9e, 0x5d, 0x55, 0x55, 0xe2, 0x9b, 0x32, 0xcf, 0x5d, 0xe1, 0xaa, 0x2c, 0x9f, 0xe2, 0xae, 0x28, 0xab, 0xa9, 0x29, 0xf1, 0x69, 0xa4, 0x79, 0xc3, 0x48, 0x5d, 0x73, 0x8b, 0xcb, 0x66, 0x3b, 0x26, 0xe7, 0x6a, 0xa9, 0x0f, 0x0c, 0x4b, 0xf5, 0xb9, 0x4b, 0xa9, 0x32, 0xd5, 0x0b, 0x2a, 0x8b, 0x34, 0x82, 0xfc, 0x5b, 0x2a, 0xe2, 0xe6, 0x15, 0xa9, 0x9c, 0x55, 0x36, 0x24, 0x89, 0x75, 0x99, 0x30, 0xc1, 0xa1, 0xc2, 0x6c, 0x15, 0xe6, 0xa8, 0x30, 0x57, 0x85, 0x79, 0x2a, 0x7c, 0x40, 0x85, 0xf9, 0x2a, 0x7c, 0x50, 0x85, 0x05, 0x2a, 0x7c, 0x48, 0xe3, 0x13, 0x65, 0xa8, 0x71, 0xcc, 0xd6, 0x58, 0x66, 0x6b, 0x3c, 0xb3, 0x35, 0xa6, 0xd9, 0x0f, 0x40, 0x69, 0x15, 0xae, 0x58, 0xa4, 0x16, 0xf4, 0xf2, 0xb0, 0xb6, 0xe4, 0x50, 0xe2, 0x44, 0x3f, 0x17, 0xd7, 0x2e, 0x0d, 0x8d, 0x01, 0xec, 0x9c, 0xa2, 0xd6, 0x96, 0x06, 0x76, 0x1b, 0x85, 0xe8, 0xca, 0x5a, 0x70, 0x4d, 0x86, 0x1e, 0x85, 0xaf, 0xb1, 0x8d, 0x14, 0x18, 0x31, 0x37, 0x69, 0x26, 0x62, 0xe6, 0xb6, 0x60, 0x46, 0xb9, 0xb9, 0xf5, 0x09, 0x8a, 0xcc, 0x46, 0xdf, 0x9d, 0x5c, 0x0d, 0xde, 0xed, 0x84, 0x58, 0x3e, 0x98, 0x58, 0x8d, 0x4b, 0x24, 0x54, 0x01, 0xf4, 0x22, 0x2a, 0x5d, 0x95, 0x3c, 0x6b, 0xd3, 0x32, 0x7f, 0x73, 0xe3, 0x32, 0x5c, 0x8d, 0x60, 0xc9, 0xc5, 0x52, 0x50, 0xa2, 0x47, 0x20, 0x30, 0x6b, 0xd6, 0x5c, 0xaa, 0x86, 0xdc, 0xa4, 0xb4, 0x07, 0xf8, 0x9d, 0x20, 0xce, 0x8e, 0xf0, 0xda, 0xa8, 0x61, 0x05, 0xdd, 0x94, 0xa6, 0x0e, 0x36, 0xde, 0x27, 0x51, 0xa5, 0x1c, 0x54, 0xc1, 0x21, 0x65, 0x95, 0xc8, 0x72, 0x23, 0x7f, 0x3c, 0xab, 0x0e, 0xca, 0x9b, 0xd2, 0xb5, 0x81, 0x38, 0x74, 0x38, 0x75, 0x55, 0x2d, 0xb3, 0x77, 0x2d, 0x06, 0x7d, 0x4b, 0x42, 0x0e, 0x6c, 0xac, 0x3a, 0xee, 0xca, 0x71, 0xd8, 0xcc, 0x8a, 0xa9, 0x7b, 0xbf, 0x60, 0xae, 0x6c, 0x17, 0x16, 0x83, 0x31, 0xd5, 0x2c, 0x9f, 0xf6, 0x03, 0x7d, 0x01, 0x90, 0xed, 0x05, 0xd0, 0x0f, 0x7d, 0xb9, 0x97, 0x2e, 0xcf, 0xcc, 0x8c, 0x64, 0xfc, 0xf5, 0x3d, 0xe7, 0xaf, 0xfe, 0xe3, 0xdf, 0xf5, 0x36, 0xfc, 0x97, 0xef, 0xa5, 0x30, 0xf1, 0x3b, 0x14, 0x5f, 0x83, 0xf2, 0x8e, 0x72, 0xac, 0xdf, 0x74, 0xa0, 0x83, 0x41, 0xa3, 0x61, 0xc3, 0x99, 0xc1, 0x74, 0x56, 0x77, 0xdd, 0x77, 0xc7, 0x19, 0x9f, 0x8e, 0xfc, 0x97, 0xfe, 0xcd, 0xf8, 0x2f, 0x2d, 0x8d, 0x35, 0x35, 0xee, 0xf1, 0xcd, 0x78, 0x75, 0xfe, 0xc5, 0xc2, 0xe6, 0xf9, 0xcc, 0x2c, 0x6f, 0x9c, 0xf7, 0x69, 0x88, 0x33, 0xef, 0x8b, 0x55, 0x53, 0xcc, 0x3b, 0x40, 0x60, 0x9f, 0x4a, 0xbc, 0x1f, 0xaf, 0x71, 0x8f, 0xee, 0xd3, 0x57, 0xc0, 0xf8, 0x94, 0x31, 0xa9, 0x1f, 0x82, 0xf9, 0xd5, 0xdf, 0x41, 0x5c, 0xec, 0x00, 0xa3, 0xc7, 0xbf, 0x7b, 0xe9, 0x1c, 0x1c, 0x96, 0xff, 0xd1, 0xdb, 0xe7, 0xff, 0x9f, 0x2c, 0xff, 0x40, 0x34, 0xbf, 0xe9, 0x74, 0x0a, 0xcf, 0xff, 0xe8, 0xd3, 0x83, 0xf5, 0xb8, 0xd7, 0x0f, 0xa3, 0xeb, 0x0f, 0x68, 0xd3, 0x3e, 0xd6, 0x6b, 0x8f, 0xfa, 0x4d, 0x35, 0xe2, 0x7b, 0xf0, 0xb6, 0x7c, 0xef, 0x25, 0xbe, 0x8f, 0xd5, 0x44, 0xf9, 0xc6, 0xe8, 0x7e, 0xaf, 0xf2, 0x3d, 0x48, 0xc9, 0xc5, 0x7c, 0xd8, 0x3b, 0xdd, 0x15, 0x35, 0xc5, 0xc5, 0xae, 0x1a, 0xa1, 0x78, 0x96, 0xab, 0x68, 0x76, 0xa5, 0x4f, 0x98, 0x57, 0x35, 0xbb, 0x9a, 0x96, 0x85, 0xf3, 0x3c, 0x3c, 0x80, 0x13, 0x08, 0x26, 0xfb, 0x04, 0xef, 0xec, 0x05, 0x0e, 0xa2, 0x43, 0x98, 0x4d, 0xb0, 0xa8, 0xa2, 0x96, 0x80, 0xe0, 0x2a, 0x2e, 0x67, 0xf9, 0xaa, 0x66, 0xd7, 0xb0, 0x74, 0x84, 0xd9, 0x2a, 0x2c, 0xab, 0xac, 0xc2, 0x25, 0x76, 0x89, 0x8f, 0xe5, 0xa7, 0x59, 0x71, 0x01, 0xc2, 0xb2, 0xca, 0x9a, 0x92, 0x4a, 0x17, 0x83, 0xbe, 0x92, 0x39, 0x0c, 0x5f, 0x55, 0xe3, 0x11, 0x38, 0xac, 0x60, 0xb0, 0xa2, 0xa4, 0x52, 0x2b, 0x57, 0x10, 0x7c, 0x25, 0xa5, 0x55, 0x98, 0x8d, 0xd5, 0x6b, 0xbe, 0x56, 0x2f, 0x0c, 0xe0, 0x2c, 0x89, 0xe5, 0x6a, 0xfc, 0x19, 0xac, 0xa2, 0x5b, 0x83, 0x58, 0xee, 0x4c, 0x7a, 0x74, 0x8c, 0xf5, 0xac, 0x29, 0xa9, 0xae, 0x11, 0xaa, 0xa9, 0x98, 0xb9, 0x02, 0x41, 0x9c, 0x51, 0x19, 0xf4, 0xd0, 0xb3, 0x30, 0x84, 0x15, 0xb3, 0x2b, 0x67, 0x0a, 0xd8, 0x7e, 0xe4, 0xe3, 0x50, 0x61, 0x36, 0x41, 0x57, 0xe9, 0xfc, 0x59, 0x0c, 0x56, 0x70, 0x58, 0x44, 0x15, 0xe4, 0xb0, 0x82, 0xa0, 0x5b, 0x8d, 0xbb, 0xd5, 0xb8, 0x4b, 0x8d, 0xbb, 0xd4, 0x78, 0xb1, 0x1a, 0x2f, 0x56, 0xe3, 0xd5, 0x65, 0x0b, 0x4b, 0xb4, 0x72, 0x2a, 0x78, 0x7c, 0x9e, 0x8a, 0xe7, 0x7c, 0x67, 0xcd, 0x2e, 0x66, 0xfc, 0x54, 0xe8, 0x52, 0x61, 0x31, 0x41, 0x5f, 0x09, 0xb6, 0x6c, 0x5e, 0x49, 0xf1, 0x97, 0x41, 0xca, 0x4f, 0x02, 0xa0, 0xfc, 0x2a, 0x74, 0x11, 0xd4, 0xd2, 0xab, 0xab, 0x7c, 0x1e, 0x86, 0xaf, 0xaa, 0x60, 0xb0, 0xa2, 0xac, 0xda, 0x55, 0x56, 0xcc, 0xe4, 0x4b, 0x8e, 0x01, 0xc9, 0x31, 0xbb, 0xa2, 0xc8, 0xa3, 0xc2, 0x0a, 0x82, 0x39, 0x6a, 0x3c, 0x47, 0x8d, 0x7b, 0x67, 0x55, 0x65, 0xab, 0x30, 0x87, 0x60, 0x59, 0x65, 0x35, 0xe6, 0x2f, 0x9b, 0x8f, 0x22, 0xac, 0xe1, 0x70, 0x36, 0x4e, 0xb7, 0xc5, 0xa5, 0x3c, 0x4e, 0x90, 0xe2, 0x4c, 0x9f, 0x04, 0xd2, 0x13, 0x06, 0x79, 0xbf, 0x0b, 0x6a, 0xbf, 0x6b, 0x7a, 0x83, 0x70, 0x6e, 0xb1, 0x83, 0xca, 0xe3, 0xb0, 0x82, 0x43, 0x54, 0x00, 0x82, 0xd4, 0xa1, 0x04, 0xe7, 0xcd, 0xe6, 0xf8, 0xa1, 0xed, 0xd2, 0x20, 0xe2, 0xb3, 0xd5, 0xfc, 0xd9, 0x6a, 0xfe, 0x6c, 0x35, 0x7f, 0xb6, 0x9a, 0x3f, 0x5b, 0xcd, 0x9f, 0xfd, 0x25, 0xf9, 0x73, 0xd4, 0xfc, 0x39, 0x6a, 0xfe, 0x1c, 0x35, 0x7f, 0x8e, 0x9a, 0x3f, 0x47, 0xcd, 0x9f, 0xf3, 0x25, 0xf9, 0x73, 0xd5, 0xfc, 0xb9, 0x6a, 0xfe, 0x5c, 0x35, 0x7f, 0xae, 0x9a, 0x3f, 0x57, 0xcd, 0x9f, 0x7b, 0xbb, 0xfc, 0xd8, 0x2f, 0xd9, 0x4c, 0x5f, 0x18, 0xac, 0x20, 0x98, 0xa3, 0xc6, 0x73, 0xd4, 0x78, 0xae, 0x1a, 0xcf, 0x55, 0xe3, 0x79, 0x6a, 0x3c, 0x4f, 0x8d, 0x3f, 0xa0, 0xc6, 0x1f, 0x50, 0xe3, 0xf9, 0x6a, 0x3c, 0x5f, 0x8d, 0x3f, 0xa8, 0xc6, 0x1f, 0x54, 0xe3, 0x05, 0x6a, 0xbc, 0x40, 0x8d, 0x73, 0xfd, 0x67, 0x30, 0x5b, 0x85, 0x39, 0x2a, 0xcc, 0x65, 0xf5, 0x62, 0xfa, 0x88, 0xf5, 0x51, 0x21, 0xe2, 0xf3, 0xd4, 0x7e, 0x65, 0x74, 0xd9, 0xaa, 0x7e, 0xe5, 0xa8, 0x30, 0x57, 0x85, 0x79, 0x2a, 0x7c, 0x40, 0x85, 0xf9, 0x2a, 0x7c, 0x50, 0x85, 0x05, 0x04, 0x51, 0x3f, 0x1d, 0x54, 0x1f, 0x0e, 0x2b, 0x08, 0x66, 0xab, 0xf1, 0x6c, 0x35, 0x9e, 0xa3, 0xc6, 0x73, 0xd4, 0x78, 0xae, 0x1a, 0xcf, 0x55, 0xe3, 0x79, 0x6a, 0x3c, 0x4f, 0x8d, 0x3f, 0xa0, 0xc6, 0x1f, 0x50, 0xe3, 0xf9, 0x6a, 0x3c, 0x5f, 0x8d, 0x3f, 0xa8, 0xc6, 0x1f, 0x54, 0xe3, 0x0e, 0xb4, 0x28, 0x0c, 0x16, 0xa9, 0x71, 0xac, 0x97, 0x4b, 0x85, 0x6e, 0x56, 0x0f, 0x9e, 0x9e, 0xad, 0xa6, 0x67, 0xab, 0xe9, 0xd9, 0x6a, 0x7a, 0x8e, 0x9a, 0x9e, 0xa3, 0xa6, 0xe7, 0xa8, 0xe9, 0x39, 0x6a, 0x7a, 0xae, 0x9a, 0x9e, 0xab, 0xa6, 0xe7, 0xaa, 0xe9, 0xb9, 0x6a, 0x7a, 0x9e, 0x9a, 0x9e, 0xa7, 0xa6, 0xe7, 0xa9, 0xe9, 0x79, 0x6a, 0xfa, 0x03, 0x6a, 0xfa, 0x03, 0x6a, 0xfa, 0x03, 0x6a, 0xfa, 0x03, 0x6a, 0x7a, 0xbe, 0x9a, 0x9e, 0xaf, 0xa6, 0xe7, 0xab, 0xe9, 0xf9, 0x6a, 0xfa, 0x83, 0x6a, 0xfa, 0x83, 0x6a, 0xfa, 0x83, 0x6a, 0x3a, 0x41, 0x77, 0xd1, 0xec, 0x8a, 0xd9, 0x3e, 0x87, 0x43, 0xe0, 0x30, 0x5b, 0x85, 0x39, 0x2a, 0xcc, 0x55, 0x61, 0x9e, 0x0a, 0x1f, 0x50, 0x61, 0xbe, 0x0a, 0x1f, 0x54, 0x61, 0x81, 0x0a, 0x1f, 0x52, 0xa1, 0x4b, 0x85, 0x6e, 0x15, 0x16, 0xa9, 0xb0, 0x58, 0x85, 0x25, 0x2a, 0x2c, 0xe5, 0x30, 0x5b, 0x2d, 0x3f, 0x5b, 0x2d, 0x3f, 0x5b, 0x2d, 0x3f, 0x5b, 0x2d, 0x3f, 0x5b, 0x2d, 0x3f, 0x5b, 0x2d, 0x3f, 0x5b, 0x2d, 0x3f, 0x5b, 0x2d, 0x3f, 0x5b, 0x2d, 0x3f, 0x5b, 0x2d, 0x3f, 0x5b, 0x2d, 0x3f, 0x5b, 0x2d, 0x3f, 0x5b, 0x2d, 0x3f, 0x5b, 0x2d, 0x3f, 0x5b, 0x2d, 0x3f, 0xbb, 0x54, 0xf0, 0xd4, 0xcc, 0xae, 0xa1, 0x67, 0x6c, 0x9e, 0x6a, 0x66, 0xb6, 0x04, 0x8f, 0x9b, 0x99, 0x31, 0x06, 0x29, 0x3e, 0x4f, 0x4d, 0x9f, 0xa7, 0xa6, 0xcf, 0x53, 0xd3, 0xe7, 0xa9, 0xe9, 0x64, 0x5f, 0x09, 0xc3, 0xe1, 0xec, 0x2a, 0xb2, 0xb3, 0x14, 0xe7, 0x70, 0x76, 0x95, 0x47, 0x9d, 0xaf, 0x3c, 0xea, 0x7c, 0xea, 0x2e, 0x71, 0xcd, 0xa2, 0x01, 0x47, 0xe5, 0x31, 0x3e, 0x2a, 0xf4, 0x14, 0x95, 0xa0, 0x85, 0xf4, 0x91, 0x3d, 0xf5, 0x94, 0xcd, 0x64, 0xe3, 0xd3, 0x43, 0xe3, 0x8d, 0xf8, 0xaa, 0xfa, 0xea, 0x51, 0xc7, 0xab, 0x47, 0x1d, 0xbf, 0x2c, 0xfe, 0xe7, 0xe6, 0x87, 0x9b, 0x61, 0x29, 0x32, 0xa5, 0x9b, 0xeb, 0x95, 0xb3, 0xf9, 0xf3, 0xd1, 0xff, 0xef, 0x3c, 0x68, 0x75, 0x1f, 0xb2, 0x7e, 0xf0, 0x8d, 0x9c, 0xf8, 0x4e, 0xd8, 0xae, 0x14, 0xf2, 0xdf, 0x13, 0x1d, 0xb0, 0xfd, 0xdb, 0xfb, 0xbe, 0x24, 0xeb, 0xb6, 0xf1, 0x8b, 0xbf, 0x56, 0x11, 0x4f, 0xfe, 0x75, 0x9d, 0xf2, 0xd7, 0xbf, 0xbf, 0xfe, 0xfd, 0xf5, 0xef, 0xaf, 0x7f, 0xff, 0x97, 0xfd, 0x25, 0x69, 0x81, 0x62, 0xc7, 0xb4, 0x15, 0xea, 0x9f, 0xf0, 0x1f, 0x0b, 0x58, 0x5c, 0xff, 0x79, 0xac, 0xaa, 0x8a, 0x06, 0x59, 0x09, 0xd5, 0xd5, 0x55, 0x83, 0xb1, 0xb9, 0x43, 0x23, 0xf3, 0xdc, 0xbe, 0xc1, 0x48, 0x35, 0x0f, 0x0b, 0xe8, 0x2b, 0x44, 0x91, 0x96, 0xff, 0x5f, 0x7b, 0x77, 0x93, 0xd2, 0x30, 0x10, 0x86, 0x01, 0x78, 0xc4, 0x5d, 0xbd, 0x44, 0x17, 0x85, 0xee, 0x24, 0x6d, 0xa1, 0x48, 0x77, 0xa5, 0xa5, 0xe8, 0xa2, 0x28, 0x2e, 0xdc, 0x94, 0x20, 0x45, 0xea, 0x0f, 0x16, 0x91, 0xa2, 0x17, 0xf1, 0x06, 0x1e, 0xc3, 0x2b, 0x78, 0x0a, 0x6f, 0xa2, 0x6d, 0x8d, 0x26, 0x56, 0xad, 0x06, 0xa2, 0x52, 0x79, 0x9e, 0x45, 0xc8, 0x84, 0x64, 0x48, 0x66, 0x16, 0x09, 0x6f, 0xc8, 0x97, 0x9d, 0xec, 0xee, 0xfd, 0x6c, 0xa3, 0xd3, 0xee, 0xec, 0x67, 0x5b, 0xed, 0x4c, 0xab, 0xdf, 0x69, 0x6e, 0x45, 0xcd, 0xa8, 0x14, 0x4e, 0xcb, 0x95, 0xd7, 0x8d, 0x95, 0x9c, 0xcb, 0xea, 0xe2, 0x5b, 0xcf, 0x6a, 0x29, 0x14, 0xff, 0x6d, 0x50, 0x29, 0xfc, 0x4c, 0x8f, 0x8f, 0x2b, 0x24, 0x84, 0xec, 0x30, 0x67, 0x9e, 0x7d, 0x72, 0x67, 0x8e, 0xe9, 0x71, 0xe9, 0xbc, 0xff, 0xf1, 0xf3, 0xdb, 0xbb, 0x4c, 0x34, 0xcf, 0xf1, 0x1f, 0x8f, 0x43, 0x9a, 0xdc, 0xad, 0xee, 0x5a, 0xea, 0x8b, 0xb9, 0x5e, 0x5f, 0xb8, 0xf6, 0x10, 0x36, 0x96, 0x8d, 0x4d, 0x26, 0x09, 0x7e, 0x08, 0xb7, 0x37, 0xf7, 0x49, 0x27, 0xdd, 0x5e, 0x54, 0x50, 0xbe, 0xfc, 0xdc, 0xeb, 0x5a, 0xd2, 0x6b, 0xcd, 0xad, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xc7, 0xb2, 0xb7, 0xcc, 0x00, 0x00, 0x00, 0xc0, 0xf7, 0xdc, 0x15, 0x2c, 0xa9, 0x50, 0x79, 0x50, 0xdf, 0x6c, 0x34, 0x66, 0x85, 0x49, 0xda, 0xe3, 0xe1, 0xd9, 0x45, 0xb9, 0x3f, 0x1c, 0x8f, 0xce, 0x73, 0x9e, 0xd9, 0xde, 0xf0, 0x64, 0x74, 0x58, 0x9b, 0xff, 0x8a, 0xa1, 0x35, 0x88, 0xa2, 0xb8, 0xdc, 0x9d, 0x15, 0x9e, 0x9d, 0xae, 0xc6, 0x2f, 0x65, 0x42, 0x5a, 0x83, 0x4a, 0x94, 0x88, 0xcb, 0xdb, 0x93, 0xab, 0x37, 0xed, 0xde, 0xd1, 0xe5, 0x75, 0x6b, 0x30, 0xaf, 0x12, 0x19, 0xcf, 0x4a, 0xf9, 0x4d, 0xf7, 0xde, 0x3d, 0x3e, 0x8e, 0xcd, 0x38, 0x00, 0x00, 0x00, 0xfc, 0xbb, 0xfc, 0xa0, 0x2e, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xf9, 0xc1, 0xe7, 0xe6, 0x3f, 0xe7, 0x99, 0x14, 0x9d, 0x1f, 0xf8, 0xa2, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0xca, 0x13, 0x7a, 0x06, 0x18, 0xa1, 0x1c, 0x07, 0x03, 0x00 }; unsigned int hrtrom_len = 41807; fs-uae-2.2.3+dfsg/src/disk.cpp0000644000175000017500000033016212162366655016307 0ustar glaubitzglaubitz/* * UAE - The Un*x Amiga Emulator * * Floppy disk emulation * * Copyright 1995 Hannu Rummukainen * Copyright 1995-2001 Bernd Schmidt * Copyright 2000-2003 Toni Wilen * * Original High Density Drive Handling by Dr. Adil Temel (C) 2001 [atemel1@hotmail.com] * */ #include "sysconfig.h" #include "sysdeps.h" int disk_debug_logging = 0; int disk_debug_mode = 0; int disk_debug_track = -1; #define MFM_VALIDATOR 0 #include "uae.h" #include "options.h" #include "uae/memory.h" #include "events.h" #include "custom.h" #include "ersatz.h" #include "disk.h" #include "gui.h" #include "zfile.h" #include "newcpu.h" #include "osemu.h" #include "execlib.h" #include "savestate.h" #include "cia.h" #include "debug.h" #ifdef FDI2RAW #include "fdi2raw.h" #endif #include "catweasel.h" #include "driveclick.h" #ifdef CAPS #ifdef FSUAE #include "caps/caps.h" #else #include "caps/caps_win32.h" #endif #endif #include "crc32.h" #include "inputrecord.h" #include "amax.h" #ifdef RETROPLATFORM #include "rp.h" #endif #include "fsdb.h" #undef CATWEASEL static int longwritemode = 0; /* support HD floppies */ #define FLOPPY_DRIVE_HD /* writable track length with normal 2us bitcell/300RPM motor, 12667 PAL, 12797 NTSC */ #define FLOPPY_WRITE_LEN (currprefs.floppy_write_length > 256 ? currprefs.floppy_write_length / 2 : (currprefs.ntscmode ? (12798 / 2) : (12668 / 2))) #define FLOPPY_WRITE_MAXLEN 0x3800 /* This works out to 350 */ #define FLOPPY_GAP_LEN (FLOPPY_WRITE_LEN - 11 * 544) /* (cycles/bitcell) << 8, normal = ((2us/280ns)<<8) = ~1828.5714 */ #define NORMAL_FLOPPY_SPEED (currprefs.ntscmode ? 1812 : 1829) /* max supported floppy drives, for small memory systems */ #define MAX_FLOPPY_DRIVES 4 #ifdef FLOPPY_DRIVE_HD #define DDHDMULT 2 #else #define DDHDMULT 1 #endif #define MAX_SECTORS (DDHDMULT * 11) #undef DEBUG_DRIVE_ID /* UAE-1ADF (ADF_EXT2) * W reserved * W number of tracks (default 2*80=160) * * W reserved * W type, 0=normal AmigaDOS track, 1 = raw MFM (upper byte = disk revolutions - 1) * L available space for track in bytes (must be even) * L track length in bits */ static int side, direction; static uae_u8 selected = 15, disabled; static uae_u8 writebuffer[544 * MAX_SECTORS]; #define DISK_INDEXSYNC 1 #define DISK_WORDSYNC 2 #define DISK_REVOLUTION 4 /* 8,16,32,64 */ #define DSKREADY_UP_TIME 20 #define DSKREADY_DOWN_TIME 50 #define DSKDMA_OFF 0 #define DSKDMA_INIT 1 #define DSKDMA_READ 2 #define DSKDMA_WRITE 3 static int dskdmaen, dsklength, dsklength2, dsklen; static uae_u16 dskbytr_val; static uae_u32 dskpt; static bool fifo_filled; static uae_u16 fifo[3]; static int fifo_inuse[3]; static int dma_enable, bitoffset, syncoffset; static uae_u16 word, dsksync; static unsigned long dsksync_cycles; #define WORDSYNC_TIME 11 /* Always carried through to the next line. */ int disk_hpos; static int disk_jitter; static int indexdecay; static uae_u8 prev_data; static int prev_step; typedef enum { TRACK_AMIGADOS, TRACK_RAW, TRACK_RAW1, TRACK_PCDOS, TRACK_DISKSPARE, TRACK_NONE } image_tracktype; typedef struct { uae_u16 len; uae_u32 offs; int bitlen, track; uae_u16 sync; image_tracktype type; int revolutions; } trackid; #define MAX_TRACKS (2 * 83) /* We have three kinds of Amiga floppy drives * - internal A500/A2000 drive: * ID is always DRIVE_ID_NONE (S.T.A.G expects this) * - HD drive (A3000/A4000): * ID is DRIVE_ID_35DD if DD floppy is inserted or drive is empty * ID is DRIVE_ID_35HD if HD floppy is inserted * - regular external drive: * ID is always DRIVE_ID_35DD */ #define DRIVE_ID_NONE 0x00000000 #define DRIVE_ID_35DD 0xFFFFFFFF #define DRIVE_ID_35HD 0xAAAAAAAA #define DRIVE_ID_525SD 0x55555555 /* 40 track 5.25 drive , kickstart does not recognize this */ typedef enum { ADF_NONE = -1, ADF_NORMAL, ADF_EXT1, ADF_EXT2, ADF_FDI, ADF_IPF, ADF_CATWEASEL, ADF_PCDOS } drive_filetype; typedef struct { struct zfile *diskfile; struct zfile *writediskfile; drive_filetype filetype; trackid trackdata[MAX_TRACKS]; trackid writetrackdata[MAX_TRACKS]; int buffered_cyl, buffered_side; int cyl; bool motoroff; int motordelay; /* dskrdy needs some clock cycles before it changes after switching off motor */ bool state; bool wrprot; uae_u16 bigmfmbuf[0x4000 * DDHDMULT]; uae_u16 tracktiming[0x4000 * DDHDMULT]; int multi_revolution; int skipoffset; int mfmpos; int indexoffset; int tracklen; int revolutions; int prevtracklen; int trackspeed; int num_tracks, write_num_tracks, num_secs; int hard_num_cyls; bool dskchange; int dskchange_time; bool dskready; int dskready_up_time; int dskready_down_time; int writtento; int steplimit; frame_time_t steplimitcycle; int indexhack, indexhackmode; int ddhd; /* 1=DD 2=HD */ int drive_id_scnt; /* drive id shift counter */ int idbit; unsigned long drive_id; /* drive id to be reported */ TCHAR newname[256]; /* storage space for new filename during eject delay */ uae_u32 crc32; #ifdef FDI2RAW FDI *fdi; #endif int useturbo; int floppybitcounter; /* number of bits left */ #ifdef CATWEASEL catweasel_drive *catweasel; #else int catweasel; int amax; #endif } drive; #define MIN_STEPLIMIT_CYCLE (CYCLE_UNIT * 250) static uae_u16 bigmfmbufw[0x4000 * DDHDMULT]; static drive floppy[MAX_FLOPPY_DRIVES]; static TCHAR dfxhistory[2][MAX_PREVIOUS_FLOPPIES][MAX_DPATH]; static uae_u8 exeheader[]={0x00,0x00,0x03,0xf3,0x00,0x00,0x00,0x00}; static uae_u8 bootblock_ofs[]={ 0x44,0x4f,0x53,0x00,0xc0,0x20,0x0f,0x19,0x00,0x00,0x03,0x70,0x43,0xfa,0x00,0x18, 0x4e,0xae,0xff,0xa0,0x4a,0x80,0x67,0x0a,0x20,0x40,0x20,0x68,0x00,0x16,0x70,0x00, 0x4e,0x75,0x70,0xff,0x60,0xfa,0x64,0x6f,0x73,0x2e,0x6c,0x69,0x62,0x72,0x61,0x72, 0x79 }; static uae_u8 bootblock_ffs[]={ 0x44, 0x4F, 0x53, 0x01, 0xE3, 0x3D, 0x0E, 0x72, 0x00, 0x00, 0x03, 0x70, 0x43, 0xFA, 0x00, 0x3E, 0x70, 0x25, 0x4E, 0xAE, 0xFD, 0xD8, 0x4A, 0x80, 0x67, 0x0C, 0x22, 0x40, 0x08, 0xE9, 0x00, 0x06, 0x00, 0x22, 0x4E, 0xAE, 0xFE, 0x62, 0x43, 0xFA, 0x00, 0x18, 0x4E, 0xAE, 0xFF, 0xA0, 0x4A, 0x80, 0x67, 0x0A, 0x20, 0x40, 0x20, 0x68, 0x00, 0x16, 0x70, 0x00, 0x4E, 0x75, 0x70, 0xFF, 0x4E, 0x75, 0x64, 0x6F, 0x73, 0x2E, 0x6C, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x00, 0x65, 0x78, 0x70, 0x61, 0x6E, 0x73, 0x69, 0x6F, 0x6E, 0x2E, 0x6C, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x00, 0x00, 0x00, }; #define FS_OFS_DATABLOCKSIZE 488 #define FS_FLOPPY_BLOCKSIZE 512 #define FS_EXTENSION_BLOCKS 72 #define FS_FLOPPY_TOTALBLOCKS 1760 #define FS_FLOPPY_RESERVED 2 static void writeimageblock (struct zfile *dst, uae_u8 *sector, int offset) { zfile_fseek (dst, offset, SEEK_SET); zfile_fwrite (sector, FS_FLOPPY_BLOCKSIZE, 1, dst); } static void disk_checksum (uae_u8 *p, uae_u8 *c) { uae_u32 cs = 0; int i; for (i = 0; i < FS_FLOPPY_BLOCKSIZE; i+= 4) cs += (p[i] << 24) | (p[i+1] << 16) | (p[i+2] << 8) | (p[i+3] << 0); cs = -cs; c[0] = cs >> 24; c[1] = cs >> 16; c[2] = cs >> 8; c[3] = cs >> 0; } static int dirhash (const uae_char *name) { unsigned long hash; int i; hash = strlen (name); for(i = 0; i < strlen (name); i++) { hash = hash * 13; hash = hash + toupper (name[i]); hash = hash & 0x7ff; } hash = hash % ((FS_FLOPPY_BLOCKSIZE / 4) - 56); return hash; } static void disk_date (uae_u8 *p) { time_t t; struct tm *today; int year, days, minutes, ticks; TCHAR tmp[10]; #ifdef FSUAE today = uae_get_amiga_time(); #else time (&t); today = localtime( &t ); #endif _tcsftime (tmp, sizeof tmp / sizeof (TCHAR), _T("%Y"), today); year = _tstoi (tmp); _tcsftime (tmp, sizeof tmp / sizeof (TCHAR), _T("%j"), today); days = _tstoi (tmp) - 1; _tcsftime (tmp, sizeof tmp / sizeof (TCHAR), _T("%H"), today); minutes = _tstoi (tmp) * 60; _tcsftime (tmp, sizeof tmp / sizeof (TCHAR), _T("%M"), today); minutes += _tstoi (tmp); _tcsftime (tmp, sizeof tmp / sizeof (TCHAR), _T("%S"), today); ticks = _tstoi (tmp) * 50; while (year > 1978) { if ( !(year % 100) ? !(year % 400) : !(year % 4) ) days++; days += 365; year--; } p[0] = days >> 24; p[1] = days >> 16; p[2] = days >> 8; p[3] = days >> 0; p[4] = minutes >> 24; p[5] = minutes >> 16; p[6] = minutes >> 8; p[7] = minutes >> 0; p[8] = ticks >> 24; p[9] = ticks >> 16; p[10] = ticks >> 8; p[11] = ticks >> 0; } static void createbootblock (uae_u8 *sector, int bootable) { memset (sector, 0, FS_FLOPPY_BLOCKSIZE); memcpy (sector, "DOS", 3); if (bootable) memcpy (sector, bootblock_ofs, sizeof bootblock_ofs); } static void createrootblock (uae_u8 *sector, char *disk_name) { memset (sector, 0, FS_FLOPPY_BLOCKSIZE); sector[0+3] = 2; sector[12+3] = 0x48; sector[312] = sector[313] = sector[314] = sector[315] = (uae_u8)0xff; sector[316+2] = 881 >> 8; sector[316+3] = 881 & 255; sector[432] = strlen (disk_name); strcpy ((char*)sector + 433, disk_name); sector[508 + 3] = 1; disk_date (sector + 420); memcpy (sector + 472, sector + 420, 3 * 4); memcpy (sector + 484, sector + 420, 3 * 4); } static int getblock (uae_u8 *bitmap) { int i = 0; while (bitmap[i] != 0xff) { if (bitmap[i] == 0) { bitmap[i] = 1; return i; } i++; } return -1; } static void pl (uae_u8 *sector, int offset, uae_u32 v) { sector[offset + 0] = v >> 24; sector[offset + 1] = v >> 16; sector[offset + 2] = v >> 8; sector[offset + 3] = v >> 0; } static int createdirheaderblock (uae_u8 *sector, int parent, const char *filename, uae_u8 *bitmap) { int block = getblock (bitmap); memset (sector, 0, FS_FLOPPY_BLOCKSIZE); pl (sector, 0, 2); pl (sector, 4, block); disk_date (sector + 512 - 92); sector[512 - 80] = strlen (filename); strcpy ((char*)sector + 512 - 79, filename); pl (sector, 512 - 12, parent); pl (sector, 512 - 4, 2); return block; } static int createfileheaderblock (struct zfile *z,uae_u8 *sector, int parent, const char *filename, struct zfile *src, uae_u8 *bitmap) { uae_u8 sector2[FS_FLOPPY_BLOCKSIZE]; uae_u8 sector3[FS_FLOPPY_BLOCKSIZE]; int block = getblock (bitmap); int datablock = getblock (bitmap); int datasec = 1; int extensions; int extensionblock, extensioncounter, headerextension = 1; int size; zfile_fseek (src, 0, SEEK_END); size = zfile_ftell (src); zfile_fseek (src, 0, SEEK_SET); extensions = (size + FS_OFS_DATABLOCKSIZE - 1) / FS_OFS_DATABLOCKSIZE; memset (sector, 0, FS_FLOPPY_BLOCKSIZE); pl (sector, 0, 2); pl (sector, 4, block); pl (sector, 8, extensions > FS_EXTENSION_BLOCKS ? FS_EXTENSION_BLOCKS : extensions); pl (sector, 16, datablock); pl (sector, FS_FLOPPY_BLOCKSIZE - 188, size); disk_date (sector + FS_FLOPPY_BLOCKSIZE - 92); sector[FS_FLOPPY_BLOCKSIZE - 80] = strlen (filename); strcpy ((char*)sector + FS_FLOPPY_BLOCKSIZE - 79, filename); pl (sector, FS_FLOPPY_BLOCKSIZE - 12, parent); pl (sector, FS_FLOPPY_BLOCKSIZE - 4, -3); extensioncounter = 0; extensionblock = 0; while (size > 0) { int datablock2 = datablock; int extensionblock2 = extensionblock; if (extensioncounter == FS_EXTENSION_BLOCKS) { extensioncounter = 0; extensionblock = getblock (bitmap); if (datasec > FS_EXTENSION_BLOCKS + 1) { pl (sector3, 8, FS_EXTENSION_BLOCKS); pl (sector3, FS_FLOPPY_BLOCKSIZE - 8, extensionblock); pl (sector3, 4, extensionblock2); disk_checksum(sector3, sector3 + 20); writeimageblock (z, sector3, extensionblock2 * FS_FLOPPY_BLOCKSIZE); } else { pl (sector, 512 - 8, extensionblock); } memset (sector3, 0, FS_FLOPPY_BLOCKSIZE); pl (sector3, 0, 16); pl (sector3, FS_FLOPPY_BLOCKSIZE - 12, block); pl (sector3, FS_FLOPPY_BLOCKSIZE - 4, -3); } memset (sector2, 0, FS_FLOPPY_BLOCKSIZE); pl (sector2, 0, 8); pl (sector2, 4, block); pl (sector2, 8, datasec++); pl (sector2, 12, size > FS_OFS_DATABLOCKSIZE ? FS_OFS_DATABLOCKSIZE : size); zfile_fread (sector2 + 24, size > FS_OFS_DATABLOCKSIZE ? FS_OFS_DATABLOCKSIZE : size, 1, src); size -= FS_OFS_DATABLOCKSIZE; datablock = 0; if (size > 0) datablock = getblock (bitmap); pl (sector2, 16, datablock); disk_checksum(sector2, sector2 + 20); writeimageblock (z, sector2, datablock2 * FS_FLOPPY_BLOCKSIZE); if (datasec <= FS_EXTENSION_BLOCKS + 1) pl (sector, 512 - 204 - extensioncounter * 4, datablock2); else pl (sector3, 512 - 204 - extensioncounter * 4, datablock2); extensioncounter++; } if (datasec > FS_EXTENSION_BLOCKS) { pl (sector3, 8, extensioncounter); disk_checksum(sector3, sector3 + 20); writeimageblock (z, sector3, extensionblock * FS_FLOPPY_BLOCKSIZE); } disk_checksum(sector, sector + 20); writeimageblock (z, sector, block * FS_FLOPPY_BLOCKSIZE); return block; } static void createbitmapblock (uae_u8 *sector, uae_u8 *bitmap) { uae_u8 mask; int i, j; memset (sector, 0, FS_FLOPPY_BLOCKSIZE); for (i = FS_FLOPPY_RESERVED; i < FS_FLOPPY_TOTALBLOCKS; i += 8) { mask = 0; for (j = 0; j < 8; j++) { if (bitmap[i + j]) mask |= 1 << j; } sector[4 + i / 8] = mask; } disk_checksum(sector, sector + 0); } static int createimagefromexe (struct zfile *src, struct zfile *dst) { uae_u8 sector1[FS_FLOPPY_BLOCKSIZE], sector2[FS_FLOPPY_BLOCKSIZE]; uae_u8 bitmap[FS_FLOPPY_TOTALBLOCKS + 8]; int exesize; int blocksize = FS_OFS_DATABLOCKSIZE; int blocks, extensionblocks; int totalblocks; int fblock1, dblock1; char *fname1 = "runme.exe"; TCHAR *fname1b = _T("runme.adf"); char *fname2 = "startup-sequence"; char *dirname1 = "s"; struct zfile *ss; memset (bitmap, 0, sizeof bitmap); zfile_fseek (src, 0, SEEK_END); exesize = zfile_ftell (src); blocks = (exesize + blocksize - 1) / blocksize; extensionblocks = (blocks + FS_EXTENSION_BLOCKS - 1) / FS_EXTENSION_BLOCKS; /* bootblock=2, root=1, bitmap=1, startup-sequence=1+1, exefileheader=1 */ totalblocks = 2 + 1 + 1 + 2 + 1 + blocks + extensionblocks; if (totalblocks > FS_FLOPPY_TOTALBLOCKS) return 0; bitmap[880] = 1; bitmap[881] = 1; bitmap[0] = 1; bitmap[1] = 1; dblock1 = createdirheaderblock (sector2, 880, dirname1, bitmap); ss = zfile_fopen_empty (src, fname1b, strlen (fname1)); zfile_fwrite (fname1, strlen(fname1), 1, ss); fblock1 = createfileheaderblock (dst, sector1, dblock1, fname2, ss, bitmap); zfile_fclose (ss); pl (sector2, 24 + dirhash (fname2) * 4, fblock1); disk_checksum(sector2, sector2 + 20); writeimageblock (dst, sector2, dblock1 * FS_FLOPPY_BLOCKSIZE); fblock1 = createfileheaderblock (dst, sector1, 880, fname1, src, bitmap); createrootblock (sector1, "empty"); pl (sector1, 24 + dirhash (fname1) * 4, fblock1); pl (sector1, 24 + dirhash (dirname1) * 4, dblock1); disk_checksum(sector1, sector1 + 20); writeimageblock (dst, sector1, 880 * FS_FLOPPY_BLOCKSIZE); createbitmapblock (sector1, bitmap); writeimageblock (dst, sector1, 881 * FS_FLOPPY_BLOCKSIZE); createbootblock (sector1, 1); writeimageblock (dst, sector1, 0 * FS_FLOPPY_BLOCKSIZE); return 1; } static int get_floppy_speed (void) { int m = currprefs.floppy_speed; if (m <= 10) m = 100; m = NORMAL_FLOPPY_SPEED * 100 / m; return m; } static int get_floppy_speed2 (drive *drv) { int m = get_floppy_speed () * drv->tracklen / (2 * 8 * FLOPPY_WRITE_LEN * drv->ddhd); if (m <= 0) m = 1; return m; } static TCHAR *drive_id_name(drive *drv) { switch(drv->drive_id) { case DRIVE_ID_35HD : return _T("3.5HD"); case DRIVE_ID_525SD: return _T("5.25SD"); case DRIVE_ID_35DD : return _T("3.5DD"); case DRIVE_ID_NONE : return _T("NONE"); } return _T("UNKNOWN"); } /* Simulate exact behaviour of an A3000T 3.5 HD disk drive. * The drive reports to be a 3.5 DD drive whenever there is no * disk or a 3.5 DD disk is inserted. Only 3.5 HD drive id is reported * when a real 3.5 HD disk is inserted. -Adil */ static void drive_settype_id (drive *drv) { int t = currprefs.floppyslots[drv - &floppy[0]].dfxtype; switch (t) { case DRV_35_HD: #ifdef FLOPPY_DRIVE_HD if (!drv->diskfile || drv->ddhd <= 1) drv->drive_id = DRIVE_ID_35DD; else drv->drive_id = DRIVE_ID_35HD; #else drv->drive_id = DRIVE_ID_35DD; #endif break; case DRV_35_DD_ESCOM: case DRV_35_DD: default: drv->drive_id = DRIVE_ID_35DD; break; case DRV_525_SD: drv->drive_id = DRIVE_ID_525SD; break; case DRV_NONE: drv->drive_id = DRIVE_ID_NONE; break; } #ifdef DEBUG_DRIVE_ID write_log (_T("drive_settype_id: DF%d: set to %s\n"), drv-floppy, drive_id_name(drv)); #endif } static void drive_image_free (drive *drv) { switch (drv->filetype) { case ADF_IPF: #ifdef CAPS caps_unloadimage (drv - floppy); #endif break; case ADF_FDI: #ifdef FDI2RAW fdi2raw_header_free (drv->fdi); drv->fdi = 0; #endif break; } drv->filetype = ADF_NONE; zfile_fclose (drv->diskfile); drv->diskfile = 0; zfile_fclose (drv->writediskfile); drv->writediskfile = 0; } static int drive_insert (drive * drv, struct uae_prefs *p, int dnum, const TCHAR *fname, bool fake); static void reset_drive_gui (int num) { gui_data.drive_disabled[num] = 0; gui_data.df[num][0] = 0; gui_data.crc32[num] = 0; if (currprefs.floppyslots[num].dfxtype < 0) gui_data.drive_disabled[num] = 1; } static void setamax (void) { #ifdef AMAX if (currprefs.amaxromfile[0]) { /* Put A-Max as last drive in drive chain */ int j; for (j = 0; j < MAX_FLOPPY_DRIVES; j++) if (floppy[j].amax) return; for (j = 0; j < MAX_FLOPPY_DRIVES; j++) { if ((1 << j) & disabled) { floppy[j].amax = 1; write_log (_T("AMAX: drive %d\n"), j); return; } } } #endif } static void reset_drive (int num) { drive *drv = &floppy[num]; drv->amax = 0; drive_image_free (drv); drv->motoroff = 1; drv->idbit = 0; drv->drive_id = 0; drv->drive_id_scnt = 0; disabled &= ~(1 << num); if (currprefs.floppyslots[num].dfxtype < 0) disabled |= 1 << num; reset_drive_gui (num); /* most internal Amiga floppy drives won't enable * diskready until motor is running at full speed * and next indexsync has been passed */ drv->indexhackmode = 0; if (num == 0 && currprefs.floppyslots[num].dfxtype == 0) drv->indexhackmode = 1; drv->dskchange_time = 0; drv->dskchange = false; drv->dskready_down_time = 0; drv->dskready_up_time = 0; drv->buffered_cyl = -1; drv->buffered_side = -1; gui_led (num + LED_DF0, 0); drive_settype_id (drv); _tcscpy (currprefs.floppyslots[num].df, changed_prefs.floppyslots[num].df); drv->newname[0] = 0; if (!drive_insert (drv, &currprefs, num, currprefs.floppyslots[num].df, false)) disk_eject (num); } /* code for track display */ static void update_drive_gui (int num) { drive *drv = floppy + num; bool writ = dskdmaen == DSKDMA_WRITE && drv->state && !((selected | disabled) & (1 << num)); if (drv->state == gui_data.drive_motor[num] && drv->cyl == gui_data.drive_track[num] && side == gui_data.drive_side && drv->crc32 == gui_data.crc32[num] && writ == gui_data.drive_writing[num] && !_tcscmp (gui_data.df[num], currprefs.floppyslots[num].df)) return; _tcscpy (gui_data.df[num], currprefs.floppyslots[num].df); gui_data.crc32[num] = drv->crc32; gui_data.drive_motor[num] = drv->state; gui_data.drive_track[num] = drv->cyl; gui_data.drive_side = side; gui_data.drive_writing[num] = writ; gui_led (num + LED_DF0, (gui_data.drive_motor[num] ? 1 : 0) | (gui_data.drive_writing[num] ? 2 : 0)); } static void drive_fill_bigbuf (drive * drv,int); int DISK_validate_filename (struct uae_prefs *p, const TCHAR *fname, int leave_open, bool *wrprot, uae_u32 *crc32, struct zfile **zf) { if (zf) *zf = NULL; if (crc32) *crc32 = 0; if (wrprot) *wrprot = p->floppy_read_only ? 1 : 0; if (leave_open || !zf) { struct zfile *f = zfile_fopen (fname, _T("r+b"), ZFD_NORMAL | ZFD_DISKHISTORY); if (!f) { if (wrprot) *wrprot = 1; f = zfile_fopen (fname, _T("rb"), ZFD_NORMAL | ZFD_DISKHISTORY); } if (f && crc32) *crc32 = zfile_crc32 (f); if (!zf) zfile_fclose (f); else *zf = f; return f ? 1 : 0; } else { if (zfile_exists (fname)) { if (wrprot) *wrprot = 0; if (crc32) { struct zfile *f = zfile_fopen (fname, _T("rb"), ZFD_NORMAL | ZFD_DISKHISTORY); if (f) *crc32 = zfile_crc32 (f); zfile_fclose (f); } return 1; } else { if (wrprot) *wrprot = 1; return 0; } } } static void updatemfmpos (drive *drv) { #ifdef FSUAE if (disk_debug_logging) { write_log(_T("drv->mfmpos = %d (updatemfmpos start)\n"), drv->mfmpos); } #endif if (drv->prevtracklen) drv->mfmpos = drv->mfmpos * (drv->tracklen * 1000 / drv->prevtracklen) / 1000; drv->mfmpos %= drv->tracklen; drv->prevtracklen = drv->tracklen; #ifdef FSUAE if (disk_debug_logging) { write_log(_T("drv->mfmpos = %d (updatemfmpos stop)\n"), drv->mfmpos); } #endif } static void track_reset (drive *drv) { drv->tracklen = FLOPPY_WRITE_LEN * drv->ddhd * 2 * 8; drv->revolutions = 1; drv->trackspeed = get_floppy_speed (); drv->buffered_side = -1; drv->skipoffset = -1; drv->tracktiming[0] = 0; memset (drv->bigmfmbuf, 0xaa, FLOPPY_WRITE_LEN * 2 * drv->ddhd); updatemfmpos (drv); } static int read_header_ext2 (struct zfile *diskfile, trackid *trackdata, int *num_tracks, int *ddhd) { uae_u8 buffer[2 + 2 + 4 + 4]; trackid *tid; int offs; int i; zfile_fseek (diskfile, 0, SEEK_SET); zfile_fread (buffer, 1, 8, diskfile); if (strncmp ((char*)buffer, "UAE-1ADF", 8)) return 0; zfile_fread (buffer, 1, 4, diskfile); *num_tracks = buffer[2] * 256 + buffer[3]; offs = 8 + 2 + 2 + (*num_tracks) * (2 + 2 + 4 + 4); for (i = 0; i < (*num_tracks); i++) { tid = trackdata + i; zfile_fread (buffer, 2 + 2 + 4 + 4, 1, diskfile); tid->type = (image_tracktype)buffer[3]; tid->revolutions = buffer[2] + 1; tid->len = buffer[5] * 65536 + buffer[6] * 256 + buffer[7]; tid->bitlen = buffer[9] * 65536 + buffer[10] * 256 + buffer[11]; tid->offs = offs; if (tid->len > 20000 && ddhd) *ddhd = 2; tid->track = i; offs += tid->len; } return 1; } TCHAR *DISK_get_saveimagepath (const TCHAR *name) { #ifdef FSUAE static TCHAR name1[MAX_DPATH]; TCHAR name2[MAX_DPATH]; TCHAR path[MAX_DPATH]; int i; _tcscpy (name2, name); i = _tcslen (name2) - 1; while (i > 0) { if (name2[i] == '.') { name2[i] = 0; break; } i--; } fetch_saveimagepath (path, sizeof path / sizeof (TCHAR), 1); if (strlen(path) > 0) { while (i > 0) { if (name2[i] == '/' || name2[i] == '\\') { i++; break; } i--; } _stprintf (name1, _T("%s/%s.sdf"), path, name2 + i); } else { _stprintf (name1, _T("%s.sdf"), name2); } write_log("DISK_get_saveimagepath returning %s\n", name1); return name1; #else static TCHAR name1[MAX_DPATH]; TCHAR name2[MAX_DPATH]; TCHAR path[MAX_DPATH]; int i; _tcscpy (name2, name); i = _tcslen (name2) - 1; while (i > 0) { if (name2[i] == '.') { name2[i] = 0; break; } i--; } while (i > 0) { if (name2[i] == '/' || name2[i] == '\\') { i++; break; } i--; } fetch_saveimagepath (path, sizeof path / sizeof (TCHAR), 1); _stprintf (name1, _T("%s%s_save.adf"), path, name2 + i); return name1; #endif } static struct zfile *getwritefile (struct uae_prefs *p, const TCHAR *name, bool *wrprot) { struct zfile *zf; DISK_validate_filename (p, DISK_get_saveimagepath (name), 1, wrprot, NULL, &zf); return zf; } static int iswritefileempty (struct uae_prefs *p, const TCHAR *name) { struct zfile *zf; bool wrprot; uae_char buffer[8]; trackid td[MAX_TRACKS]; int tracks, ddhd, i, ret; zf = getwritefile (p, name, &wrprot); if (!zf) return 1; zfile_fread (buffer, sizeof (char), 8, zf); if (strncmp ((uae_char*)buffer, "UAE-1ADF", 8)) return 0; ret = read_header_ext2 (zf, td, &tracks, &ddhd); zfile_fclose (zf); if (!ret) return 1; for (i = 0; i < tracks; i++) { if (td[i].bitlen) return 0; } return 1; } static int openwritefile (struct uae_prefs *p, drive *drv, int create) { bool wrprot = 0; #ifdef FSUAE if (create) { const char *writefile = DISK_get_saveimagepath( currprefs.floppyslots[drv - &floppy[0]].df); FILE *f = fopen(writefile, "rb"); if (f == NULL) { // good, file did not exist write_log("creating write disk file\n"); // create with type=1 (ext2adf) drive_type drvtype = DRV_35_DD; disk_creatediskfile(writefile, 1, drvtype, NULL, false, false, NULL); } else { // not overwriting existing file; fclose(f); } } #endif drv->writediskfile = getwritefile (p, currprefs.floppyslots[drv - &floppy[0]].df, &wrprot); if (drv->writediskfile) { drv->wrprot = wrprot; if (!read_header_ext2 (drv->writediskfile, drv->writetrackdata, &drv->write_num_tracks, 0)) { zfile_fclose (drv->writediskfile); drv->writediskfile = 0; drv->wrprot = 1; } else { if (drv->write_num_tracks > drv->num_tracks) drv->num_tracks = drv->write_num_tracks; } } else if (zfile_iscompressed (drv->diskfile)) { #ifdef FSUAE // overlay .sdf file will be opened on demand #else drv->wrprot = 1; #endif } return drv->writediskfile ? 1 : 0; } static bool diskfile_iswriteprotect (struct uae_prefs *p, const TCHAR *fname, int *needwritefile, drive_type *drvtype) { #ifdef FSUAE write_log("diskfile_iswriteprotect fname=%s\n", fname); #endif struct zfile *zf1, *zf2; bool wrprot1 = 0, wrprot2 = 1; uae_char buffer[25]; *needwritefile = 0; *drvtype = DRV_35_DD; DISK_validate_filename (p, fname, 1, &wrprot1, NULL, &zf1); if (!zf1) return 1; if (zfile_iscompressed (zf1)) { wrprot1 = 1; *needwritefile = 1; } zf2 = getwritefile (p, fname, &wrprot2); zfile_fclose (zf2); zfile_fread (buffer, sizeof (char), 25, zf1); zfile_fclose (zf1); if (strncmp ((uae_char*) buffer, "CAPS", 4) == 0) { *needwritefile = 1; return wrprot2; } if (strncmp ((uae_char*) buffer, "Formatted Disk Image file", 25) == 0) { *needwritefile = 1; return wrprot2; } if (strncmp ((uae_char*) buffer, "UAE-1ADF", 8) == 0) { if (wrprot1) return wrprot2; return wrprot1; } if (strncmp ((uae_char*) buffer, "UAE--ADF", 8) == 0) { *needwritefile = 1; return wrprot2; } if (memcmp (exeheader, buffer, sizeof exeheader) == 0) return 0; if (wrprot1) return wrprot2; return wrprot1; } static int drive_insert (drive * drv, struct uae_prefs *p, int dnum, const TCHAR *fname, bool fake) { #ifdef FSUAE write_log("drive_insert drv=%p dnum=%d fname=%s fake=%d\n", drv, dnum, fname, fake); #endif uae_u8 buffer[2 + 2 + 4 + 4]; trackid *tid; int num_tracks, size; int canauto; const TCHAR *ext; drive_image_free (drv); DISK_validate_filename (p, fname, 1, &drv->wrprot, &drv->crc32, &drv->diskfile); drv->ddhd = 1; drv->num_secs = 0; drv->hard_num_cyls = p->floppyslots[dnum].dfxtype == DRV_525_SD ? 40 : 80; drv->tracktiming[0] = 0; drv->useturbo = 0; drv->indexoffset = 0; #ifdef FSUAE // disks are always writable - using disk write files drv->wrprot = 0; #endif gui_disk_image_change (dnum, fname, drv->wrprot); canauto = 0; ext = _tcsrchr (fname, '.'); if (ext) { if (!_tcsicmp (ext + 1, _T("adf")) || !_tcsicmp (ext + 1, _T("adz")) || !_tcsicmp (ext + 1, _T("st")) || !_tcsicmp (ext + 1, _T("ima")) || !_tcsicmp (ext + 1, _T("img"))) canauto = 1; } if (!drv->motoroff) { drv->dskready_up_time = DSKREADY_UP_TIME; drv->dskready_down_time = 0; } if (drv->diskfile == 0 && !drv->catweasel) { track_reset (drv); return 0; } if (!fake) inprec_recorddiskchange (dnum, fname, drv->wrprot); if (currprefs.floppyslots[dnum].df != fname) { _tcsncpy (currprefs.floppyslots[dnum].df, fname, 255); currprefs.floppyslots[dnum].df[255] = 0; } _tcsncpy (changed_prefs.floppyslots[dnum].df, fname, 255); changed_prefs.floppyslots[dnum].df[255] = 0; _tcscpy (drv->newname, fname); gui_filename (dnum, fname); memset (buffer, 0, sizeof buffer); size = 0; if (drv->diskfile) { zfile_fread (buffer, sizeof (char), 8, drv->diskfile); zfile_fseek (drv->diskfile, 0, SEEK_END); size = zfile_ftell (drv->diskfile); zfile_fseek (drv->diskfile, 0, SEEK_SET); } if (drv->catweasel) { drv->wrprot = 1; drv->filetype = ADF_CATWEASEL; drv->num_tracks = 80; drv->ddhd = 1; #ifdef CAPS } else if (strncmp ((char*)buffer, "CAPS", 4) == 0) { #ifdef FSUAE // always saving data to overlay .sdf-files drv->wrprot = 0; #else drv->wrprot = 1; #endif if (!caps_loadimage (drv->diskfile, drv - floppy, &num_tracks)) { zfile_fclose (drv->diskfile); drv->diskfile = 0; return 0; } drv->num_tracks = num_tracks; drv->filetype = ADF_IPF; #endif #ifdef FDI2RAW } else if (drv->fdi = fdi2raw_header (drv->diskfile)) { drv->wrprot = 1; drv->num_tracks = fdi2raw_get_last_track (drv->fdi); drv->num_secs = fdi2raw_get_num_sector (drv->fdi); drv->filetype = ADF_FDI; #endif } else if (strncmp ((char*)buffer, "UAE-1ADF", 8) == 0) { read_header_ext2 (drv->diskfile, drv->trackdata, &drv->num_tracks, &drv->ddhd); drv->filetype = ADF_EXT2; drv->num_secs = 11; if (drv->ddhd > 1) drv->num_secs = 22; } else if (strncmp ((char*)buffer, "UAE--ADF", 8) == 0) { int offs = 160 * 4 + 8; int i; drv->wrprot = 1; drv->filetype = ADF_EXT1; drv->num_tracks = 160; drv->num_secs = 11; zfile_fseek (drv->diskfile, 8, SEEK_SET); for (i = 0; i < 160; i++) { tid = &drv->trackdata[i]; zfile_fread (buffer, 4, 1, drv->diskfile); tid->sync = buffer[0] * 256 + buffer[1]; tid->len = buffer[2] * 256 + buffer[3]; tid->offs = offs; tid->revolutions = 1; if (tid->sync == 0) { tid->type = TRACK_AMIGADOS; tid->bitlen = 0; } else { tid->type = TRACK_RAW1; tid->bitlen = tid->len * 8; } offs += tid->len; } } else if (memcmp (exeheader, buffer, sizeof exeheader) == 0) { int i; struct zfile *z = zfile_fopen_empty (NULL, _T(""), 512 * 1760); createimagefromexe (drv->diskfile, z); drv->filetype = ADF_NORMAL; zfile_fclose (drv->diskfile); drv->diskfile = z; drv->num_tracks = 160; drv->num_secs = 11; for (i = 0; i < drv->num_tracks; i++) { tid = &drv->trackdata[i]; tid->type = TRACK_AMIGADOS; tid->len = 512 * drv->num_secs; tid->bitlen = 0; tid->offs = i * 512 * drv->num_secs; tid->revolutions = 1; } drv->useturbo = 1; } else if (canauto && ( // double sided size == 9 * 80 * 2 * 512 || size == 18 * 80 * 2 * 512 || size == 10 * 80 * 2 * 512 || size == 20 * 80 * 2 * 512 || size == 9 * 81 * 2 * 512 || size == 18 * 81 * 2 * 512 || size == 10 * 81 * 2 * 512 || size == 20 * 81 * 2 * 512 || size == 9 * 82 * 2 * 512 || size == 18 * 82 * 2 * 512 || size == 10 * 82 * 2 * 512 || size == 20 * 82 * 2 * 512 || // single sided size == 9 * 80 * 1 * 512 || size == 18 * 80 * 1 * 512 || size == 10 * 80 * 1 * 512 || size == 20 * 80 * 1 * 512 || size == 9 * 81 * 1 * 512 || size == 18 * 81 * 1 * 512 || size == 10 * 81 * 1 * 512 || size == 20 * 81 * 1 * 512 || size == 9 * 82 * 1 * 512 || size == 18 * 82 * 1 * 512 || size == 10 * 82 * 1 * 512 || size == 20 * 82 * 1 * 512)) { /* PC formatted image */ int i, side; for (side = 2; side > 0; side--) { if ( size == 9 * 80 * side * 512 || size == 9 * 81 * side * 512 || size == 9 * 82 * side * 512) { drv->num_secs = 9; drv->ddhd = 1; break; } else if (size == 18 * 80 * side * 512 || size == 18 * 81 * side * 512 || size == 18 * 82 * side * 512) { drv->num_secs = 18; drv->ddhd = 2; break; } else if (size == 10 * 80 * side * 512 || size == 10 * 81 * side * 512 || size == 10 * 82 * side * 512) { drv->num_secs = 10; drv->ddhd = 1; break; } else if (size == 20 * 80 * side * 512 || size == 20 * 81 * side * 512 || size == 20 * 82 * side * 512) { drv->num_secs = 20; drv->ddhd = 2; break; } } drv->num_tracks = size / (drv->num_secs * 512); drv->filetype = ADF_PCDOS; tid = &drv->trackdata[0]; for (i = 0; i < drv->num_tracks; i++) { tid->type = TRACK_PCDOS; tid->len = 512 * drv->num_secs; tid->bitlen = 0; tid->offs = i * 512 * drv->num_secs; if (side == 1) { tid++; tid->type = TRACK_NONE; tid->len = 512 * drv->num_secs; } tid->revolutions = 1; tid++; } if (side == 1) drv->num_tracks *= 2; } else { int i, ds; ds = 0; drv->filetype = ADF_NORMAL; /* High-density or diskspare disk? */ drv->num_tracks = 0; if (size > 160 * 11 * 512 + 511) { // larger than standard adf? for (i = 80; i <= 83; i++) { if (size == i * 22 * 512 * 2) { // HD drv->ddhd = 2; drv->num_tracks = size / (512 * (drv->num_secs = 22)); break; } if (size == i * 11 * 512 * 2) { // >80 cyl DD drv->num_tracks = size / (512 * (drv->num_secs = 11)); break; } if (size == i * 12 * 512 * 2) { // ds 12 sectors drv->num_tracks = size / (512 * (drv->num_secs = 12)); ds = 1; break; } if (size == i * 24 * 512 * 2) { // ds 24 sectors drv->num_tracks = size / (512 * (drv->num_secs = 24)); drv->ddhd = 2; ds = 1; break; } } if (drv->num_tracks == 0) { drv->num_tracks = size / (512 * (drv->num_secs = 22)); drv->ddhd = 2; } } else { drv->num_tracks = size / (512 * (drv->num_secs = 11)); } if (!ds && drv->num_tracks > MAX_TRACKS) write_log (_T("Your diskfile is too big, %d bytes!\n"), size); for (i = 0; i < drv->num_tracks; i++) { tid = &drv->trackdata[i]; tid->type = ds ? TRACK_DISKSPARE : TRACK_AMIGADOS; tid->len = 512 * drv->num_secs; tid->bitlen = 0; tid->offs = i * 512 * drv->num_secs; tid->revolutions = 1; } } openwritefile (p, drv, 0); drive_settype_id (drv); /* Set DD or HD drive */ drive_fill_bigbuf (drv, 1); drv->mfmpos = uaerand (); drv->mfmpos |= (uaerand () << 16); drv->mfmpos %= drv->tracklen; #ifdef FSUAE if (disk_debug_logging) { write_log(_T("drv->mfmpos = %d\n"), drv->mfmpos); } #endif drv->prevtracklen = 0; #ifdef DRIVESOUND driveclick_insert (drv - floppy, 0); #endif update_drive_gui (drv - floppy); #ifdef FSUAE write_log("drive_insert returning, drv->wrprot=%d\n", drv->wrprot); #endif return 1; } static void rand_shifter (drive *drv) { int r = ((uaerand () >> 4) & 7) + 1; while (r-- > 0) { word <<= 1; word |= (uaerand () & 0x1000) ? 1 : 0; bitoffset++; bitoffset &= 15; } } static void set_steplimit (drive *drv) { // emulate step limit only if cycle-exact or approximate CPU speed if (currprefs.m68k_speed != 0) return; drv->steplimit = 10; drv->steplimitcycle = get_cycles (); } static int drive_empty (drive * drv) { #ifdef CATWEASEL if (drv->catweasel) return catweasel_disk_changed (drv->catweasel) == 0; #endif return drv->diskfile == 0 && drv->dskchange_time >= 0; } static void drive_step (drive * drv, int step_direction) { #ifdef CATWEASEL if (drv->catweasel) { int dir = direction ? -1 : 1; catweasel_step (drv->catweasel, dir); drv->cyl += dir; if (drv->cyl < 0) drv->cyl = 0; write_log (_T("%d -> %d\n"), dir, drv->cyl); return; } #endif if (!drive_empty (drv)) drv->dskchange = 0; if (drv->steplimit && get_cycles() - drv->steplimitcycle < MIN_STEPLIMIT_CYCLE) { if (disk_debug_logging > 1) write_log (_T(" step ignored drive %d, %d"), drv - floppy, (get_cycles() - drv->steplimitcycle) / CYCLE_UNIT); return; } /* A1200's floppy drive needs at least 30 raster lines between steps * but we'll use very small value for better compatibility with faster CPU emulation * (stupid trackloaders with CPU delay loops) */ set_steplimit (drv); if (step_direction) { if (drv->cyl) { drv->cyl--; #ifdef DRIVESOUND driveclick_click (drv - floppy, drv->cyl); #endif } /* else write_log (_T("program tried to step beyond track zero\n")); "no-click" programs does that */ } else { int maxtrack = drv->hard_num_cyls; if (drv->cyl < maxtrack + 3) { drv->cyl++; #ifdef CATWEASEL if (drv->catweasel) catweasel_step (drv->catweasel, 1); #endif } if (drv->cyl >= maxtrack) write_log (_T("program tried to step over track %d\n"), maxtrack); #ifdef DRIVESOUND driveclick_click (drv - floppy, drv->cyl); #endif } rand_shifter (drv); if (disk_debug_logging > 1) write_log (_T(" ->step %d"), drv->cyl); } static int drive_track0 (drive * drv) { #ifdef CATWEASEL if (drv->catweasel) return catweasel_track0 (drv->catweasel); #endif return drv->cyl == 0; } static int drive_writeprotected (drive * drv) { #ifdef CATWEASEL if (drv->catweasel) return 1; #endif return currprefs.floppy_read_only || drv->wrprot || drv->diskfile == NULL; } static int drive_running (drive * drv) { return !drv->motoroff; } static void motordelay_func (uae_u32 v) { floppy[v].motordelay = 0; } static void drive_motor (drive * drv, bool off) { if (drv->motoroff && !off) { drv->dskready_up_time = DSKREADY_UP_TIME; rand_shifter (drv); #ifdef DRIVESOUND driveclick_motor (drv - floppy, drv->dskready_down_time == 0 ? 2 : 1); #endif if (disk_debug_logging > 1) write_log (_T(" ->motor on")); } if (!drv->motoroff && off) { drv->drive_id_scnt = 0; /* Reset id shift reg counter */ drv->dskready_down_time = DSKREADY_DOWN_TIME; #ifdef DRIVESOUND driveclick_motor (drv - floppy, 0); #endif #ifdef DEBUG_DRIVE_ID write_log (_T("drive_motor: Selected DF%d: reset id shift reg.\n"),drv-floppy); #endif if (disk_debug_logging > 1) write_log (_T(" ->motor off")); if (currprefs.cpu_model <= 68010 && currprefs.m68k_speed == 0) { drv->motordelay = 1; event2_newevent2 (30, drv - floppy, motordelay_func); } } drv->motoroff = off; if (drv->motoroff) { drv->dskready = 0; drv->dskready_up_time = 0; } else { drv->dskready_down_time = 0; } #ifdef CATWEASEL if (drv->catweasel) catweasel_set_motor (drv->catweasel, !drv->motoroff); #endif } static void read_floppy_data (struct zfile *diskfile, trackid *tid, int offset, uae_u8 *dst, int len) { if (len == 0) return; zfile_fseek (diskfile, tid->offs + offset, SEEK_SET); zfile_fread (dst, 1, len, diskfile); } /* Megalomania does not like zero MFM words... */ static void mfmcode (uae_u16 * mfm, int words) { uae_u32 lastword = 0; while (words--) { uae_u32 v = (*mfm) & 0x55555555; uae_u32 lv = (lastword << 16) | v; uae_u32 nlv = 0x55555555 & ~lv; uae_u32 mfmbits = (nlv << 1) & (nlv >> 1); *mfm++ = v | mfmbits; lastword = v; } } static uae_u8 mfmencodetable[16] = { 0x2a, 0x29, 0x24, 0x25, 0x12, 0x11, 0x14, 0x15, 0x4a, 0x49, 0x44, 0x45, 0x52, 0x51, 0x54, 0x55 }; static uae_u16 dos_encode_byte (uae_u8 byte) { uae_u8 b2, b1; uae_u16 word; b1 = byte; b2 = b1 >> 4; b1 &= 15; word = mfmencodetable[b2] <<8 | mfmencodetable[b1]; return (word | ((word & (256 | 64)) ? 0 : 128)); } static uae_u16 *mfmcoder (uae_u8 *src, uae_u16 *dest, int len) { int i; for (i = 0; i < len; i++) { *dest = dos_encode_byte (*src++); *dest |= ((dest[-1] & 1)||(*dest & 0x4000)) ? 0: 0x8000; dest++; } return dest; } static void decode_pcdos (drive *drv) { int i, len; int tr = drv->cyl * 2 + side; uae_u16 *dstmfmbuf, *mfm2; uae_u8 secbuf[1000]; uae_u16 crc16; trackid *ti = drv->trackdata + tr; int tracklen = 12500; mfm2 = drv->bigmfmbuf; *mfm2++ = 0x9254; memset (secbuf, 0x4e, 40); memset (secbuf + 40, 0x00, 12); secbuf[52] = 0xc2; secbuf[53] = 0xc2; secbuf[54] = 0xc2; secbuf[55] = 0xfc; memset (secbuf + 56, 0x4e, 40); dstmfmbuf = mfmcoder (secbuf, mfm2, 96); mfm2[52] = 0x5224; mfm2[53] = 0x5224; mfm2[54] = 0x5224; for (i = 0; i < drv->num_secs; i++) { mfm2 = dstmfmbuf; memset (secbuf, 0x00, 12); secbuf[12] = 0xa1; secbuf[13] = 0xa1; secbuf[14] = 0xa1; secbuf[15] = 0xfe; secbuf[16] = drv->cyl; secbuf[17] = side; secbuf[18] = 1 + i; secbuf[19] = 2; // 128 << 2 = 512 crc16 = get_crc16(secbuf + 12, 3 + 1 + 4); secbuf[20] = crc16 >> 8; secbuf[21] = crc16 & 0xff; memset(secbuf + 22, 0x4e, 22); memset(secbuf + 44, 0x00, 12); secbuf[56] = 0xa1; secbuf[57] = 0xa1; secbuf[58] = 0xa1; secbuf[59] = 0xfb; read_floppy_data (drv->diskfile, ti, i * 512, &secbuf[60], 512); crc16 = get_crc16 (secbuf + 56, 3 + 1 + 512); secbuf[60 + 512] = crc16 >> 8; secbuf[61 + 512] = crc16 & 0xff; len = (tracklen / 2 - 96) / drv->num_secs - 574 / drv->ddhd; if (len > 0) memset(secbuf + 512 + 62, 0x4e, len); dstmfmbuf = mfmcoder (secbuf, mfm2, 60 + 512 + 2 + 76 / drv->ddhd); mfm2[12] = 0x4489; mfm2[13] = 0x4489; mfm2[14] = 0x4489; mfm2[56] = 0x4489; mfm2[57] = 0x4489; mfm2[58] = 0x4489; } while (dstmfmbuf - drv->bigmfmbuf < tracklen / 2) *dstmfmbuf++ = 0x9254; drv->skipoffset = 0; drv->tracklen = (dstmfmbuf - drv->bigmfmbuf) * 16; if (disk_debug_logging > 0) write_log (_T("pcdos read track %d\n"), tr); } static void decode_amigados (drive *drv) { /* Normal AmigaDOS format track */ int tr = drv->cyl * 2 + side; int sec; int dstmfmoffset = 0; uae_u16 *dstmfmbuf = drv->bigmfmbuf; int len = drv->num_secs * 544 + FLOPPY_GAP_LEN; int prevbit; trackid *ti = drv->trackdata + tr; memset (dstmfmbuf, 0xaa, len * 2); dstmfmoffset += FLOPPY_GAP_LEN; drv->skipoffset = (FLOPPY_GAP_LEN * 8) / 3 * 2; drv->tracklen = len * 2 * 8; prevbit = 0; for (sec = 0; sec < drv->num_secs; sec++) { uae_u8 secbuf[544]; uae_u16 mfmbuf[544 + 1]; int i; uae_u32 deven, dodd; uae_u32 hck = 0, dck = 0; secbuf[0] = secbuf[1] = 0x00; secbuf[2] = secbuf[3] = 0xa1; secbuf[4] = 0xff; secbuf[5] = tr; secbuf[6] = sec; secbuf[7] = drv->num_secs - sec; for (i = 8; i < 24; i++) secbuf[i] = 0; read_floppy_data (drv->diskfile, ti, sec * 512, &secbuf[32], 512); mfmbuf[0] = prevbit ? 0x2aaa : 0xaaaa; mfmbuf[1] = 0xaaaa; mfmbuf[2] = mfmbuf[3] = 0x4489; deven = ((secbuf[4] << 24) | (secbuf[5] << 16) | (secbuf[6] << 8) | (secbuf[7])); dodd = deven >> 1; deven &= 0x55555555; dodd &= 0x55555555; mfmbuf[4] = dodd >> 16; mfmbuf[5] = dodd; mfmbuf[6] = deven >> 16; mfmbuf[7] = deven; for (i = 8; i < 48; i++) mfmbuf[i] = 0xaaaa; for (i = 0; i < 512; i += 4) { deven = ((secbuf[i + 32] << 24) | (secbuf[i + 33] << 16) | (secbuf[i + 34] << 8) | (secbuf[i + 35])); dodd = deven >> 1; deven &= 0x55555555; dodd &= 0x55555555; mfmbuf[(i >> 1) + 32] = dodd >> 16; mfmbuf[(i >> 1) + 33] = dodd; mfmbuf[(i >> 1) + 256 + 32] = deven >> 16; mfmbuf[(i >> 1) + 256 + 33] = deven; } for (i = 4; i < 24; i += 2) hck ^= (mfmbuf[i] << 16) | mfmbuf[i + 1]; deven = dodd = hck; dodd >>= 1; mfmbuf[24] = dodd >> 16; mfmbuf[25] = dodd; mfmbuf[26] = deven >> 16; mfmbuf[27] = deven; for (i = 32; i < 544; i += 2) dck ^= (mfmbuf[i] << 16) | mfmbuf[i + 1]; deven = dodd = dck; dodd >>= 1; mfmbuf[28] = dodd >> 16; mfmbuf[29] = dodd; mfmbuf[30] = deven >> 16; mfmbuf[31] = deven; mfmbuf[544] = 0; mfmcode (mfmbuf + 4, 544 - 4 + 1); for (i = 0; i < 544; i++) { dstmfmbuf[dstmfmoffset % len] = mfmbuf[i]; dstmfmoffset++; } prevbit = mfmbuf[i - 1] & 1; // so that final word has correct MFM encoding dstmfmbuf[dstmfmoffset % len] = mfmbuf[i]; } if (disk_debug_logging > 0) write_log (_T("amigados read track %d\n"), tr); } /* * diskspare format * * 0 <4489> <4489> 0 track sector crchi, crclo, data[512] (520 bytes per sector) * * 0xAAAA 0x4489 0x4489 0x2AAA oddhi, oddlo, evenhi, evenlo, ... * * NOTE: data is MFM encoded using same method as ADOS header, not like ADOS data! * */ static void decode_diskspare (drive *drv) { int tr = drv->cyl * 2 + side; int sec; int dstmfmoffset = 0; int size = 512 + 8; uae_u16 *dstmfmbuf = drv->bigmfmbuf; int len = drv->num_secs * size + FLOPPY_GAP_LEN; trackid *ti = drv->trackdata + tr; memset (dstmfmbuf, 0xaa, len * 2); dstmfmoffset += FLOPPY_GAP_LEN; drv->skipoffset = (FLOPPY_GAP_LEN * 8) / 3 * 2; drv->tracklen = len * 2 * 8; for (sec = 0; sec < drv->num_secs; sec++) { uae_u8 secbuf[512 + 8]; uae_u16 mfmbuf[512 + 8]; int i; uae_u32 deven, dodd; uae_u16 chk; secbuf[0] = tr; secbuf[1] = sec; secbuf[2] = 0; secbuf[3] = 0; read_floppy_data (drv->diskfile, ti, sec * 512, &secbuf[4], 512); mfmbuf[0] = 0xaaaa; mfmbuf[1] = 0x4489; mfmbuf[2] = 0x4489; mfmbuf[3] = 0x2aaa; for (i = 0; i < 512; i += 4) { deven = ((secbuf[i + 4] << 24) | (secbuf[i + 5] << 16) | (secbuf[i + 6] << 8) | (secbuf[i + 7])); dodd = deven >> 1; deven &= 0x55555555; dodd &= 0x55555555; mfmbuf[i + 8 + 0] = dodd >> 16; mfmbuf[i + 8 + 1] = dodd; mfmbuf[i + 8 + 2] = deven >> 16; mfmbuf[i + 8 + 3] = deven; } mfmcode (mfmbuf + 8, 512); i = 8; chk = mfmbuf[i++] & 0x7fff; while (i < 512 + 8) chk ^= mfmbuf[i++]; secbuf[2] = chk >> 8; secbuf[3] = chk; deven = ((secbuf[0] << 24) | (secbuf[1] << 16) | (secbuf[2] << 8) | (secbuf[3])); dodd = deven >> 1; deven &= 0x55555555; dodd &= 0x55555555; mfmbuf[4] = dodd >> 16; mfmbuf[5] = dodd; mfmbuf[6] = deven >> 16; mfmbuf[7] = deven; mfmcode (mfmbuf + 4, 4); for (i = 0; i < 512 + 8; i++) { dstmfmbuf[dstmfmoffset % len] = mfmbuf[i]; dstmfmoffset++; } } if (disk_debug_logging > 0) write_log (_T("diskspare read track %d\n"), tr); } static void drive_fill_bigbuf (drive * drv, int force) { int tr = drv->cyl * 2 + side; trackid *ti = drv->trackdata + tr; if ((!drv->diskfile && !drv->catweasel) || tr >= drv->num_tracks) { track_reset (drv); return; } if (!force && drv->catweasel) { drv->buffered_cyl = -1; return; } if (!force && drv->buffered_cyl == drv->cyl && drv->buffered_side == side) return; drv->indexoffset = 0; drv->multi_revolution = 0; drv->tracktiming[0] = 0; drv->skipoffset = -1; drv->revolutions = 1; if (drv->writediskfile && drv->writetrackdata[tr].bitlen > 0) { int i; trackid *wti = &drv->writetrackdata[tr]; drv->tracklen = wti->bitlen; drv->revolutions = wti->revolutions; read_floppy_data (drv->writediskfile, wti, 0, (uae_u8*)drv->bigmfmbuf, (wti->bitlen + 7) / 8); for (i = 0; i < (drv->tracklen + 15) / 16; i++) { uae_u16 *mfm = drv->bigmfmbuf + i; uae_u8 *data = (uae_u8 *) mfm; *mfm = 256 * *data + *(data + 1); } if (disk_debug_logging > 0) write_log (_T("track %d, length %d read from \"saveimage\"\n"), tr, drv->tracklen); } else if (drv->filetype == ADF_CATWEASEL) { #ifdef CATWEASEL drv->tracklen = 0; if (!catweasel_disk_changed (drv->catweasel)) { drv->tracklen = catweasel_fillmfm (drv->catweasel, drv->bigmfmbuf, side, drv->ddhd, 0); } drv->buffered_cyl = -1; if (!drv->tracklen) { track_reset (drv); return; } #endif } else if (drv->filetype == ADF_IPF) { #ifdef CAPS caps_loadtrack (drv->bigmfmbuf, drv->tracktiming, drv - floppy, tr, &drv->tracklen, &drv->multi_revolution, &drv->skipoffset); #endif } else if (drv->filetype == ADF_FDI) { #ifdef FDI2RAW fdi2raw_loadtrack (drv->fdi, drv->bigmfmbuf, drv->tracktiming, tr, &drv->tracklen, &drv->indexoffset, &drv->multi_revolution, 1); #endif } else if (ti->type == TRACK_PCDOS) { decode_pcdos (drv); } else if (ti->type == TRACK_AMIGADOS) { decode_amigados (drv); } else if (ti->type == TRACK_DISKSPARE) { decode_diskspare (drv); } else if (ti->type == TRACK_NONE) { ; } else { int i; int base_offset = ti->type == TRACK_RAW ? 0 : 1; drv->tracklen = ti->bitlen + 16 * base_offset; drv->bigmfmbuf[0] = ti->sync; read_floppy_data (drv->diskfile, ti, 0, (uae_u8*)(drv->bigmfmbuf + base_offset), (ti->bitlen + 7) / 8); for (i = base_offset; i < (drv->tracklen + 15) / 16; i++) { uae_u16 *mfm = drv->bigmfmbuf + i; uae_u8 *data = (uae_u8 *) mfm; *mfm = 256 * *data + *(data + 1); } if (disk_debug_logging > 1) write_log (_T("rawtrack %d image offset=%x\n"), tr, ti->offs); } drv->buffered_side = side; drv->buffered_cyl = drv->cyl; if (drv->tracklen == 0) { drv->tracklen = FLOPPY_WRITE_LEN * drv->ddhd * 2 * 8; memset (drv->bigmfmbuf, 0, FLOPPY_WRITE_LEN * 2 * drv->ddhd); } drv->trackspeed = get_floppy_speed2 (drv); updatemfmpos (drv); } /* Update ADF_EXT2 track header */ static void diskfile_update (struct zfile *diskfile, trackid *ti, int len, image_tracktype type) { uae_u8 buf[2 + 2 + 4 + 4], *zerobuf; ti->revolutions = 1; ti->bitlen = len; zfile_fseek (diskfile, 8 + 4 + (2 + 2 + 4 + 4) * ti->track, SEEK_SET); memset (buf, 0, sizeof buf); ti->type = type; buf[2] = 0; buf[3] = ti->type; do_put_mem_long ((uae_u32 *) (buf + 4), ti->len); do_put_mem_long ((uae_u32 *) (buf + 8), ti->bitlen); zfile_fwrite (buf, sizeof buf, 1, diskfile); if (ti->len > (len + 7) / 8) { zerobuf = xmalloc (uae_u8, ti->len); memset (zerobuf, 0, ti->len); zfile_fseek (diskfile, ti->offs, SEEK_SET); zfile_fwrite (zerobuf, 1, ti->len, diskfile); free (zerobuf); } if (disk_debug_logging > 0) write_log (_T("track %d, raw track length %d written (total size %d)\n"), ti->track, (ti->bitlen + 7) / 8, ti->len); } #define MFMMASK 0x55555555 static uae_u16 getmfmword (uae_u16 *mbuf, int shift) { return (mbuf[0] << shift) | (mbuf[1] >> (16 - shift)); } static uae_u32 getmfmlong (uae_u16 *mbuf, int shift) { return ((getmfmword (mbuf, shift) << 16) | getmfmword (mbuf + 1, shift)) & MFMMASK; } #if MFM_VALIDATOR static void check_valid_mfm (uae_u16 *mbuf, int words, int sector) { int prevbit = 0; for (int i = 0; i < words * 8; i++) { int wordoffset = i / 8; uae_u16 w = mbuf[wordoffset]; uae_u16 wp = mbuf[wordoffset - 1]; int bitoffset = (7 - (i & 7)) * 2; int clockbit = w & (1 << (bitoffset + 1)); int databit = w & (1 << (bitoffset + 0)); if ((clockbit && databit) || (clockbit && !databit && prevbit) || (!clockbit && !databit && !prevbit)) { write_log (_T("illegal mfm sector %d data %04x %04x, bit %d:%d\n"), sector, wp, w, wordoffset, bitoffset); } prevbit = databit; } } #endif static int decode_buffer (uae_u16 *mbuf, int cyl, int drvsec, int ddhd, int filetype, int *drvsecp, int *sectable, int checkmode) { int i, secwritten = 0; int fwlen = FLOPPY_WRITE_LEN * ddhd; int length = 2 * fwlen; uae_u32 odd, even, chksum, id, dlong; uae_u8 *secdata; uae_u8 secbuf[544]; uae_u16 *mend = mbuf + length, *mstart; int shift = 0; memset (sectable, 0, MAX_SECTORS * sizeof (int)); mstart = mbuf; memcpy (mbuf + fwlen, mbuf, fwlen * sizeof (uae_u16)); mend -= (4 + 16 + 8 + 512); while (secwritten < drvsec) { int trackoffs; while (getmfmword (mbuf, shift) != 0x4489) { if (mbuf >= mend) return 1; shift++; if (shift == 16) { shift = 0; mbuf++; } } while (getmfmword (mbuf, shift) == 0x4489) { if (mbuf >= mend) return 1; mbuf++; } odd = getmfmlong (mbuf, shift); even = getmfmlong (mbuf + 2, shift); mbuf += 4; id = (odd << 1) | even; trackoffs = (id & 0xff00) >> 8; if (trackoffs + 1 > drvsec) { write_log (_T("Disk decode: weird sector number %d (%08X, %d)\n"), trackoffs, id, mbuf - mstart); if (filetype == ADF_EXT2) return 2; continue; } #if MFM_VALIDATOR check_valid_mfm (mbuf - 4, 544 - 4 + 1, trackoffs); #endif chksum = odd ^ even; for (i = 0; i < 4; i++) { odd = getmfmlong (mbuf, shift); even = getmfmlong (mbuf + 8, shift); mbuf += 2; dlong = (odd << 1) | even; if (dlong && !checkmode) { if (filetype == ADF_EXT2) return 6; secwritten = -200; } chksum ^= odd ^ even; } /* could check here if the label is nonstandard */ mbuf += 8; odd = getmfmlong (mbuf, shift); even = getmfmlong (mbuf + 2, shift); mbuf += 4; if (((odd << 1) | even) != chksum) { write_log (_T("Disk decode: checksum error on sector %d header\n"), trackoffs); if (filetype == ADF_EXT2) return 3; continue; } if (((id & 0x00ff0000) >> 16) != cyl * 2 + side) { write_log (_T("Disk decode: mismatched track (%d <> %d) on sector %d header\n"), (id & 0x00ff0000) >> 16, cyl * 2 + side, trackoffs); if (filetype == ADF_EXT2) return 3; continue; } odd = getmfmlong (mbuf, shift); even = getmfmlong (mbuf + 2, shift); mbuf += 4; chksum = (odd << 1) | even; secdata = secbuf + 32; for (i = 0; i < 128; i++) { odd = getmfmlong (mbuf, shift); even = getmfmlong (mbuf + 256, shift); mbuf += 2; dlong = (odd << 1) | even; *secdata++ = dlong >> 24; *secdata++ = dlong >> 16; *secdata++ = dlong >> 8; *secdata++ = dlong; chksum ^= odd ^ even; } if (chksum) { write_log (_T("Disk decode: sector %d, data checksum error\n"), trackoffs); if (filetype == ADF_EXT2) return 4; continue; } mbuf += 256; //write_log (_T("Sector %d ok\n"), trackoffs); sectable[trackoffs] = 1; secwritten++; memcpy (writebuffer + trackoffs * 512, secbuf + 32, 512); } if (filetype == ADF_EXT2 && (secwritten == 0 || secwritten < 0)) return 5; if (secwritten == 0) write_log (_T("Disk decode: unsupported format\n")); if (secwritten < 0) write_log (_T("Disk decode: sector labels ignored\n")); *drvsecp = drvsec; return 0; } static uae_u8 mfmdecode (uae_u16 **mfmp, int shift) { uae_u16 mfm = getmfmword (*mfmp, shift); uae_u8 out = 0; int i; (*mfmp)++; mfm &= 0x5555; for (i = 0; i < 8; i++) { out >>= 1; if (mfm & 1) out |= 0x80; mfm >>= 2; } return out; } static int drive_write_pcdos (drive *drv) { int i; int drvsec = drv->num_secs; int fwlen = FLOPPY_WRITE_LEN * drv->ddhd; int length = 2 * fwlen; uae_u16 *mbuf = drv->bigmfmbuf; uae_u16 *mend = mbuf + length; int secwritten = 0, shift = 0, sector = -1; int sectable[18]; uae_u8 secbuf[3 + 1 + 512]; uae_u8 mark; uae_u16 crc; memset (sectable, 0, sizeof sectable); memcpy (mbuf + fwlen, mbuf, fwlen * sizeof (uae_u16)); mend -= 518; secbuf[0] = secbuf[1] = secbuf[2] = 0xa1; secbuf[3] = 0xfb; while (secwritten < drvsec) { int mfmcount; mfmcount = 0; while (getmfmword (mbuf, shift) != 0x4489) { mfmcount++; if (mbuf >= mend) return 1; shift++; if (shift == 16) { shift = 0; mbuf++; } if (sector >= 0 && mfmcount / 16 >= 43) sector = -1; } mfmcount = 0; while (getmfmword (mbuf, shift) == 0x4489) { mfmcount++; if (mbuf >= mend) return 1; mbuf++; } if (mfmcount < 3) // ignore if less than 3 sync markers continue; mark = mfmdecode(&mbuf, shift); if (mark == 0xfe) { uae_u8 tmp[8]; uae_u8 cyl, head, size; cyl = mfmdecode (&mbuf, shift); head = mfmdecode (&mbuf, shift); sector = mfmdecode (&mbuf, shift); size = mfmdecode (&mbuf, shift); crc = (mfmdecode (&mbuf, shift) << 8) | mfmdecode (&mbuf, shift); tmp[0] = 0xa1; tmp[1] = 0xa1; tmp[2] = 0xa1; tmp[3] = mark; tmp[4] = cyl; tmp[5] = head; tmp[6] = sector; tmp[7] = size; // skip 28 bytes for (i = 0; i < 28; i++) mfmdecode (&mbuf, shift); if (get_crc16 (tmp, 8) != crc || cyl != drv->cyl || head != side || size != 2 || sector < 1 || sector > drv->num_secs) { write_log (_T("PCDOS: track %d, corrupted sector header\n"), drv->cyl * 2 + side); return 1; } sector--; continue; } if (mark != 0xfb && mark != 0xfa) { write_log (_T("PCDOS: track %d: unknown address mark %02X\n"), drv->cyl * 2 + side, mark); continue; } if (sector < 0) continue; for (i = 0; i < 512; i++) secbuf[i + 4] = mfmdecode (&mbuf, shift); crc = (mfmdecode (&mbuf, shift) << 8) | mfmdecode (&mbuf, shift); if (get_crc16 (secbuf, 3 + 1 + 512) != crc) { write_log (_T("PCDOS: track %d, sector %d data checksum error\n"), drv->cyl * 2 + side, sector + 1); continue; } sectable[sector] = 1; secwritten++; zfile_fseek (drv->diskfile, drv->trackdata[drv->cyl * 2 + side].offs + sector * 512, SEEK_SET); zfile_fwrite (secbuf + 4, sizeof (uae_u8), 512, drv->diskfile); write_log (_T("PCDOS: track %d sector %d written\n"), drv->cyl * 2 + side, sector + 1); sector = -1; } if (secwritten != drv->num_secs) write_log (_T("PCDOS: track %d, %d corrupted sectors ignored\n"), drv->cyl * 2 + side, drv->num_secs - secwritten); return 0; } static int drive_write_adf_amigados (drive *drv) { int drvsec, i; int sectable[MAX_SECTORS]; if (decode_buffer (drv->bigmfmbuf, drv->cyl, drv->num_secs, drv->ddhd, drv->filetype, &drvsec, sectable, 0)) return 2; if (!drvsec) return 2; if (drv->filetype == ADF_EXT2) diskfile_update (drv->diskfile, &drv->trackdata[drv->cyl * 2 + side], drvsec * 512 * 8, TRACK_AMIGADOS); for (i = 0; i < drvsec; i++) { zfile_fseek (drv->diskfile, drv->trackdata[drv->cyl * 2 + side].offs + i * 512, SEEK_SET); zfile_fwrite (writebuffer + i * 512, sizeof (uae_u8), 512, drv->diskfile); } return 0; } /* write raw track to disk file */ static int drive_write_ext2 (uae_u16 *bigmfmbuf, struct zfile *diskfile, trackid *ti, int tracklen) { int len, i; len = (tracklen + 7) / 8; if (len > ti->len) { write_log (_T("disk raw write: image file's track %d is too small (%d < %d)!\n"), ti->track, ti->len, len); len = ti->len; } diskfile_update (diskfile, ti, tracklen, TRACK_RAW); for (i = 0; i < ti->len / 2; i++) { uae_u16 *mfm = bigmfmbuf + i; uae_u16 *mfmw = bigmfmbufw + i; uae_u8 *data = (uae_u8 *) mfm; *mfmw = 256 * *data + *(data + 1); } zfile_fseek (diskfile, ti->offs, SEEK_SET); zfile_fwrite (bigmfmbufw, 1, len, diskfile); return 1; } #ifdef FSUAE extern int g_fs_uae_writable_disk_images; #endif static void drive_write_data (drive * drv); static bool convert_adf_to_ext2 (drive *drv, int mode) { TCHAR name[MAX_DPATH]; bool hd = drv->ddhd == 2; struct zfile *f; if (drv->filetype != ADF_NORMAL) return false; _tcscpy (name, currprefs.floppyslots[drv - floppy].df); if (!name[0]) return false; if (mode == 1) { TCHAR *p = _tcsrchr (name, '.'); if (!p) p = name + _tcslen (name); _tcscpy (p, _T(".extended.adf")); if (!disk_creatediskfile (name, 1, hd ? DRV_35_HD : DRV_35_DD, NULL, false, false, drv->diskfile)) return false; } else if (mode == 2) { struct zfile *tmp = zfile_fopen_load_zfile (drv->diskfile); if (!tmp) return false; zfile_fclose (drv->diskfile); drv->diskfile = NULL; if (!disk_creatediskfile (name, 1, hd ? DRV_35_HD : DRV_35_DD, NULL, false, false, tmp)) { zfile_fclose (tmp); return false; } } else { return false; } f = zfile_fopen (name, _T("r+b")); if (!f) return false; _tcscpy (currprefs.floppyslots[drv - floppy].df, name); _tcscpy (changed_prefs.floppyslots[drv - floppy].df, name); zfile_fclose (drv->diskfile); drv->diskfile = f; drv->filetype = ADF_EXT2; read_header_ext2 (drv->diskfile, drv->trackdata, &drv->num_tracks, &drv->ddhd); drive_write_data (drv); #ifdef RETROPLATFORM rp_disk_image_change (drv - &floppy[0], name, false); #endif drive_fill_bigbuf (drv, 1); return true; } static void drive_write_data (drive * drv) { int ret = -1; int tr = drv->cyl * 2 + side; #ifdef FSUAE int force_write_disk_file = 1; int write_to_disk_file = 1; switch (drv->filetype) { case ADF_NORMAL: case ADF_EXT2: case ADF_PCDOS: if (g_fs_uae_writable_disk_images) { force_write_disk_file = 0; } break; } if (force_write_disk_file) { if (!drv->writediskfile) { write_log("about to call openwritefile(drv, 1)\n"); openwritefile (&currprefs, drv, 1); } } #endif if (drive_writeprotected (drv) || drv->trackdata[tr].type == TRACK_NONE) { /* read original track back because we didn't really write anything */ drv->buffered_side = 2; return; } if (drv->writediskfile) { drive_write_ext2 (drv->bigmfmbuf, drv->writediskfile, &drv->writetrackdata[tr], longwritemode ? dsklength2 * 8 : drv->tracklen); #ifdef FSUAE // when we have written data to writediskfile, we do not want to write // the the original disk write_to_disk_file = 0; #endif } switch (drv->filetype) { case ADF_NORMAL: #ifdef FSUAE if (write_to_disk_file) { #endif if (drive_write_adf_amigados (drv)) { if (currprefs.floppy_auto_ext2) { convert_adf_to_ext2 (drv, currprefs.floppy_auto_ext2); } else { static int warned; if (!warned) notify_user (NUMSG_NEEDEXT2); warned = 1; } } #ifdef FSUAE } #endif return; case ADF_EXT1: break; case ADF_EXT2: #ifdef FSUAE if (write_to_disk_file) { #endif if (!longwritemode) ret = drive_write_adf_amigados (drv); if (ret) { write_log (_T("not an amigados track %d (error %d), writing as raw track\n"), drv->cyl * 2 + side, ret); drive_write_ext2 (drv->bigmfmbuf, drv->diskfile, &drv->trackdata[drv->cyl * 2 + side], longwritemode ? dsklength2 * 8 : drv->tracklen); } #ifdef FSUAE } #endif return; case ADF_IPF: break; case ADF_PCDOS: #ifdef FSUAE if (write_to_disk_file) { #endif ret = drive_write_pcdos (drv); if (ret) write_log (_T("not a PC formatted track %d (error %d)\n"), drv->cyl * 2 + side, ret); #ifdef FSUAE } #endif break; } drv->tracktiming[0] = 0; } static void drive_eject (drive * drv) { #ifdef DRIVESOUND driveclick_insert (drv - floppy, 1); #endif gui_disk_image_change (drv - floppy, NULL, drv->wrprot); drive_image_free (drv); drv->dskchange = true; drv->ddhd = 1; drv->dskchange_time = 0; drv->dskready = 0; drv->dskready_up_time = 0; drv->dskready_down_time = 0; drv->crc32 = 0; drive_settype_id (drv); /* Back to 35 DD */ if (disk_debug_logging > 0) write_log (_T("eject drive %d\n"), drv - &floppy[0]); inprec_recorddiskchange (drv - floppy, NULL, false); } /* We use this function if we have no Kickstart ROM. * No error checking - we trust our luck. */ void DISK_ersatz_read (int tr, int sec, uaecptr dest) { uae_u8 *dptr = get_real_address (dest); zfile_fseek (floppy[0].diskfile, floppy[0].trackdata[tr].offs + sec * 512, SEEK_SET); zfile_fread (dptr, 1, 512, floppy[0].diskfile); } static void floppy_get_bootblock (uae_u8 *dst, bool ffs, bool bootable) { strcpy ((char*)dst, "DOS"); dst[3] = ffs ? 1 : 0; if (bootable) memcpy (dst, ffs ? bootblock_ffs : bootblock_ofs, ffs ? sizeof bootblock_ffs : sizeof bootblock_ofs); } static void floppy_get_rootblock (uae_u8 *dst, int block, const TCHAR *disk_name, drive_type adftype) { dst[0+3] = 2; dst[12+3] = 0x48; dst[312] = dst[313] = dst[314] = dst[315] = (uae_u8)0xff; dst[316+2] = (block + 1) >> 8; dst[316+3] = (block + 1) & 255; char *s = ua ((disk_name && _tcslen (disk_name) > 0) ? disk_name : _T("empty")); dst[432] = strlen (s); strcpy ((char*)dst + 433, s); xfree (s); dst[508 + 3] = 1; disk_date (dst + 420); memcpy (dst + 472, dst + 420, 3 * 4); memcpy (dst + 484, dst + 420, 3 * 4); disk_checksum (dst, dst + 20); /* bitmap block */ memset (dst + 512 + 4, 0xff, 2 * block / 8); if (adftype == 0) dst[512 + 0x72] = 0x3f; else dst[512 + 0xdc] = 0x3f; disk_checksum (dst + 512, dst + 512); } /* type: 0=regular, 1=ext2adf */ /* adftype: 0=DD,1=HD,2=DD PC,3=HD PC,4=525SD */ bool disk_creatediskfile (const TCHAR *name, int type, drive_type adftype, const TCHAR *disk_name, bool ffs, bool bootable, struct zfile *copyfrom) { int size = 32768; struct zfile *f; int i, l, file_size, tracks, track_len, sectors; uae_u8 *chunk = NULL; int ddhd = 1; bool ok = false; uae_u64 pos; if (type == 1) tracks = 2 * 83; else tracks = 2 * 80; file_size = 880 * 1024; sectors = 11; if (adftype == 2 || adftype == 3) { file_size = 720 * 1024; sectors = 9; } track_len = FLOPPY_WRITE_LEN * 2; if (adftype == 1 || adftype == 3) { file_size *= 2; track_len *= 2; ddhd = 2; } else if (adftype == 4) { file_size /= 2; tracks /= 2; } if (copyfrom) { pos = zfile_ftell (copyfrom); zfile_fseek (copyfrom, 0, SEEK_SET); } f = zfile_fopen (name, _T("wb"), 0); chunk = xmalloc (uae_u8, size); if (f && chunk) { int cylsize = sectors * 2 * 512; memset (chunk, 0, size); if (type == 0) { for (i = 0; i < file_size; i += cylsize) { memset(chunk, 0, cylsize); if (adftype <= 1) { if (i == 0) { /* boot block */ floppy_get_bootblock (chunk, ffs, bootable); } else if (i == file_size / 2) { /* root block */ floppy_get_rootblock (chunk, file_size / 1024, disk_name, adftype); } } zfile_fwrite (chunk, cylsize, 1, f); } ok = true; } else { uae_u8 root[4]; uae_u8 rawtrack[3 * 4], dostrack[3 * 4]; l = track_len; zfile_fwrite ("UAE-1ADF", 8, 1, f); root[0] = 0; root[1] = 0; /* flags (reserved) */ root[2] = 0; root[3] = tracks; /* number of tracks */ zfile_fwrite (root, 4, 1, f); rawtrack[0] = 0; rawtrack[1] = 0; /* flags (reserved) */ rawtrack[2] = 0; rawtrack[3] = 1; /* track type */ rawtrack[4] = 0; rawtrack[5] = 0; rawtrack[6]=(uae_u8)(l >> 8); rawtrack[7] = (uae_u8)l; rawtrack[8] = 0; rawtrack[9] = 0; rawtrack[10] = 0; rawtrack[11] = 0; memcpy (dostrack, rawtrack, sizeof rawtrack); dostrack[3] = 0; dostrack[9] = (l * 8) >> 16; dostrack[10] = (l * 8) >> 8; dostrack[11] = (l * 8) >> 0; bool dodos = ffs || bootable || (disk_name && _tcslen (disk_name) > 0); for (i = 0; i < tracks; i++) { uae_u8 tmp[3 * 4]; memcpy (tmp, rawtrack, sizeof rawtrack); if (dodos || copyfrom) memcpy (tmp, dostrack, sizeof dostrack); zfile_fwrite (tmp, sizeof tmp, 1, f); } for (i = 0; i < tracks; i++) { memset (chunk, 0, size); if (copyfrom) { zfile_fread (chunk, 11 * ddhd, 512, copyfrom); } else { if (dodos) { if (i == 0) floppy_get_bootblock (chunk, ffs, bootable); else if (i == 80) floppy_get_rootblock (chunk, 80 * 11 * ddhd, disk_name, adftype); } } zfile_fwrite (chunk, l, 1, f); } ok = true; } } xfree (chunk); zfile_fclose (f); if (copyfrom) zfile_fseek (copyfrom, pos, SEEK_SET); if (f) DISK_history_add (name, -1, HISTORY_FLOPPY, TRUE); return ok; } int disk_getwriteprotect (struct uae_prefs *p, const TCHAR *name) { int needwritefile; drive_type drvtype; return diskfile_iswriteprotect (p, name, &needwritefile, &drvtype); } static void diskfile_readonly (const TCHAR *name, bool readonly) { struct mystat st; int mode, oldmode; if (!my_stat (name, &st)) return; #ifdef FSUAE // ADF files are not written to currently, anyway, so disable touching // the files. #else oldmode = mode = st.mode; mode &= ~FILEFLAG_WRITE; if (!readonly) mode |= FILEFLAG_WRITE; if (mode != oldmode) my_chmod (name, mode); #endif } static void setdskchangetime (drive *drv, int dsktime) { int i; /* prevent multiple disk insertions at the same time */ if (drv->dskchange_time > 0) return; for (i = 0; i < MAX_FLOPPY_DRIVES; i++) { if (&floppy[i] != drv && floppy[i].dskchange_time > 0 && floppy[i].dskchange_time + 1 >= dsktime) { dsktime = floppy[i].dskchange_time + 1; } } drv->dskchange_time = dsktime; if (disk_debug_logging > 0) write_log (_T("delayed insert enable %d\n"), dsktime); } void DISK_reinsert (int num) { drive_eject (&floppy[num]); setdskchangetime (&floppy[num], 100); } int disk_setwriteprotect (struct uae_prefs *p, int num, const TCHAR *name, bool writeprotected) { int needwritefile, oldprotect; struct zfile *zf1, *zf2; bool wrprot1, wrprot2; int i; TCHAR *name2; drive_type drvtype; oldprotect = diskfile_iswriteprotect (p, name, &needwritefile, &drvtype); DISK_validate_filename (p, name, 1, &wrprot1, NULL, &zf1); if (!zf1) return 0; if (wrprot1 && p->floppy_read_only) return 0; if (zfile_iscompressed (zf1)) wrprot1 = 1; zfile_fclose (zf1); zf2 = getwritefile (p, name, &wrprot2); name2 = DISK_get_saveimagepath (name); if (needwritefile && zf2 == 0) disk_creatediskfile (name2, 1, drvtype, NULL, false, false, NULL); zfile_fclose (zf2); if (writeprotected && iswritefileempty (p, name)) { for (i = 0; i < MAX_FLOPPY_DRIVES; i++) { if (!_tcscmp (name, floppy[i].newname)) drive_eject (&floppy[i]); } _wunlink (name2); } if (!needwritefile) diskfile_readonly (name, writeprotected); diskfile_readonly (name2, writeprotected); DISK_reinsert (num); return 1; } void disk_eject (int num) { config_changed = 1; gui_filename (num, _T("")); drive_eject (floppy + num); *currprefs.floppyslots[num].df = *changed_prefs.floppyslots[num].df = 0; floppy[num].newname[0] = 0; update_drive_gui (num); } int DISK_history_add (const TCHAR *name, int idx, int type, int donotcheck) { int i; if (idx >= MAX_PREVIOUS_FLOPPIES) return 0; if (name == NULL) { dfxhistory[type][idx][0] = 0; return 1; } if (name[0] == 0) return 0; if (!donotcheck) { if (!zfile_exists (name)) { for (i = 0; i < MAX_PREVIOUS_FLOPPIES; i++) { if (!_tcsicmp (dfxhistory[type][i], name)) { while (i < MAX_PREVIOUS_FLOPPIES - 1) { _tcscpy (dfxhistory[type][i], dfxhistory[type][i + 1]); i++; } dfxhistory[type][MAX_PREVIOUS_FLOPPIES - 1][0] = 0; break; } } return 0; } } if (idx >= 0) { if (idx >= MAX_PREVIOUS_FLOPPIES) return 0; dfxhistory[type][idx][0] = 0; for (i = 0; i < MAX_PREVIOUS_FLOPPIES; i++) { if (!_tcsicmp (dfxhistory[type][i], name)) return 0; } _tcscpy (dfxhistory[type][idx], name); return 1; } for (i = 0; i < MAX_PREVIOUS_FLOPPIES; i++) { if (!_tcscmp (dfxhistory[type][i], name)) { while (i < MAX_PREVIOUS_FLOPPIES - 1) { _tcscpy (dfxhistory[type][i], dfxhistory[type][i + 1]); i++; } dfxhistory[type][MAX_PREVIOUS_FLOPPIES - 1][0] = 0; break; } } for (i = MAX_PREVIOUS_FLOPPIES - 2; i >= 0; i--) _tcscpy (dfxhistory[type][i + 1], dfxhistory[type][i]); _tcscpy (dfxhistory[type][0], name); return 1; } TCHAR *DISK_history_get (int idx, int type) { if (idx >= MAX_PREVIOUS_FLOPPIES) return NULL; return dfxhistory[type][idx]; } static void disk_insert_2 (int num, const TCHAR *name, int forced) { drive *drv = floppy + num; if (forced) { drive_insert (drv, &currprefs, num, name, false); return; } if (!_tcscmp (currprefs.floppyslots[num].df, name)) return; _tcscpy (drv->newname, name); _tcscpy (currprefs.floppyslots[num].df, name); DISK_history_add (name, -1, HISTORY_FLOPPY, 0); if (name[0] == 0) { disk_eject (num); } else if (!drive_empty(drv) || drv->dskchange_time > 0) { drive_eject (drv); /* set dskchange_time, disk_insert() will be * called from DISK_check_change() after 2 second delay * this makes sure that all programs detect disk change correctly */ setdskchangetime (drv, 100); } else { setdskchangetime (drv, 1); } } void disk_insert (int num, const TCHAR *name) { config_changed = 1; target_addtorecent (name, 0); disk_insert_2 (num, name, 0); } void disk_insert_force (int num, const TCHAR *name, bool writeprotected) { disk_insert_2 (num, name, 1); } static void DISK_check_change (void) { if (currprefs.floppy_speed != changed_prefs.floppy_speed) currprefs.floppy_speed = changed_prefs.floppy_speed; for (int i = 0; i < MAX_FLOPPY_DRIVES; i++) { drive *drv = floppy + i; if (currprefs.floppyslots[i].dfxtype != changed_prefs.floppyslots[i].dfxtype) { currprefs.floppyslots[i].dfxtype = changed_prefs.floppyslots[i].dfxtype; reset_drive (i); #ifdef RETROPLATFORM rp_floppy_device_enable (i, currprefs.floppyslots[i].dfxtype >= 0); #endif } } } void DISK_vsync (void) { DISK_check_change (); for (int i = 0; i < MAX_FLOPPY_DRIVES; i++) { drive *drv = floppy + i; if (drv->dskchange_time == 0 && _tcscmp (currprefs.floppyslots[i].df, changed_prefs.floppyslots[i].df)) disk_insert (i, changed_prefs.floppyslots[i].df); if (drv->dskready_down_time > 0) drv->dskready_down_time--; /* emulate drive motor turn on time */ if (drv->dskready_up_time > 0 && !drive_empty (drv)) { drv->dskready_up_time--; if (drv->dskready_up_time == 0 && !drv->motoroff) drv->dskready = true; } /* delay until new disk image is inserted */ if (drv->dskchange_time > 0) { drv->dskchange_time--; if (drv->dskchange_time == 0) { drive_insert (drv, &currprefs, i, drv->newname, false); if (disk_debug_logging > 0) write_log (_T("delayed insert, drive %d, image '%s'\n"), i, drv->newname); update_drive_gui (i); } } } } int disk_empty (int num) { return drive_empty (floppy + num); } static TCHAR *tobin (uae_u8 v) { int i; static TCHAR buf[10]; for( i = 7; i >= 0; i--) buf[7 - i] = v & (1 << i) ? '1' : '0'; buf[i] = 0; return buf; } static void fetch_DISK_select(uae_u8 data) { selected = (data >> 3) & 15; side = 1 - ((data >> 2) & 1); direction = (data >> 1) & 1; } void DISK_select_set (uae_u8 data) { prev_data = data; prev_step = data & 1; fetch_DISK_select (data); } void DISK_select (uae_u8 data) { int step_pulse, prev_selected, dr; prev_selected = selected; fetch_DISK_select (data); step_pulse = data & 1; if (disk_debug_logging > 1) write_log (_T("%08X %02X->%02X %s drvmask=%x"), M68K_GETPC, prev_data, data, tobin(data), selected ^ 15); #ifdef AMAX if (currprefs.amaxromfile[0]) amax_disk_select (data, prev_data); #endif if ((prev_data & 0x80) != (data & 0x80)) { for (dr = 0; dr < 4; dr++) { if (floppy[dr].indexhackmode > 1 && !(selected & (1 << dr))) { floppy[dr].indexhack = 1; if (disk_debug_logging > 1) write_log (_T(" indexhack!")); } } } if (disk_debug_logging > 1) { write_log (_T(" %d%d%d%d% "), (selected & 1) ? 0 : 1, (selected & 2) ? 0 : 1, (selected & 4) ? 0 : 1, (selected & 8) ? 0 : 1); if ((prev_data & 0x80) != (data & 0x80)) write_log (_T(" dskmotor %d "), (data & 0x80) ? 1 : 0); if ((prev_data & 0x02) != (data & 0x02)) write_log (_T(" direct %d "), (data & 0x02) ? 1 : 0); if ((prev_data & 0x04) != (data & 0x04)) write_log (_T(" side %d "), (data & 0x04) ? 1 : 0); } // step goes high and drive was selected when step pulse changes: step if (prev_step != step_pulse) { if (disk_debug_logging > 1) write_log (_T(" dskstep %d "), step_pulse); prev_step = step_pulse; if (prev_step && !savestate_state) { for (dr = 0; dr < MAX_FLOPPY_DRIVES; dr++) { if (!((prev_selected | disabled) & (1 << dr))) { drive_step (floppy + dr, direction); if (floppy[dr].indexhackmode > 1 && (data & 0x80)) floppy[dr].indexhack = 1; } } } } if (!savestate_state) { for (dr = 0; dr < MAX_FLOPPY_DRIVES; dr++) { drive *drv = floppy + dr; /* motor on/off workings tested with small assembler code on real Amiga 1200. */ /* motor/id flipflop is set only when drive select goes from high to low */ if (!(selected & (1 << dr)) && (prev_selected & (1 << dr)) ) { drv->drive_id_scnt++; drv->drive_id_scnt &= 31; drv->idbit = (drv->drive_id & (1L << (31 - drv->drive_id_scnt))) ? 1 : 0; if (!(disabled & (1 << dr))) { if ((prev_data & 0x80) == 0 || (data & 0x80) == 0) { /* motor off: if motor bit = 0 in prevdata or data -> turn motor on */ drive_motor (drv, 0); } else if (prev_data & 0x80) { /* motor on: if motor bit = 1 in prevdata only (motor flag state in data has no effect) -> turn motor off */ drive_motor (drv, 1); } } if (!currprefs.cs_df0idhw && dr == 0) drv->idbit = 0; #ifdef DEBUG_DRIVE_ID write_log (_T("DISK_status: sel %d id %s (%08X) [0x%08lx, bit #%02d: %d]\n"), dr, drive_id_name(drv), drv->drive_id, drv->drive_id << drv->drive_id_scnt, 31 - drv->drive_id_scnt, drv->idbit); #endif } } } for (dr = 0; dr < MAX_FLOPPY_DRIVES; dr++) { floppy[dr].state = (!(selected & (1 << dr))) | !floppy[dr].motoroff; update_drive_gui (dr); } prev_data = data; if (disk_debug_logging > 1) write_log (_T("\n")); } uae_u8 DISK_status (void) { uae_u8 st = 0x3c; int dr; for (dr = 0; dr < MAX_FLOPPY_DRIVES; dr++) { drive *drv = floppy + dr; if (drv->amax) { st = amax_disk_status (); } else if (!((selected | disabled) & (1 << dr))) { if (drive_running (drv)) { if (drv->catweasel) { #ifdef CATWEASEL if (catweasel_diskready (drv->catweasel)) st &= ~0x20; #endif } else { if (drv->dskready && !drv->indexhack && currprefs.floppyslots[dr].dfxtype != DRV_35_DD_ESCOM) st &= ~0x20; } } else { if (currprefs.cs_df0idhw || dr > 0) { /* report drive ID */ if (drv->idbit && currprefs.floppyslots[dr].dfxtype != DRV_35_DD_ESCOM) st &= ~0x20; } else { /* non-ID internal drive: mirror real dskready */ if (drv->dskready) st &= ~0x20; } /* dskrdy needs some cycles after switching the motor off.. (Pro Tennis Tour) */ if (!currprefs.cs_df0idhw && dr == 0 && drv->motordelay) st &= ~0x20; } if (drive_track0 (drv)) st &= ~0x10; if (drive_writeprotected (drv)) st &= ~8; if (drv->catweasel) { #ifdef CATWEASEL if (catweasel_disk_changed (drv->catweasel)) st &= ~4; #endif } else if (drv->dskchange && currprefs.floppyslots[dr].dfxtype != DRV_525_SD) { st &= ~4; } } else if (!(selected & (1 << dr))) { if (drv->idbit) st &= ~0x20; } } return st; } static bool unformatted (drive *drv) { int tr = drv->cyl * 2 + side; if (tr >= drv->num_tracks) return true; if (drv->filetype == ADF_EXT2 && drv->trackdata[tr].bitlen == 0 && drv->trackdata[tr].type != TRACK_AMIGADOS) return true; if (drv->trackdata[tr].type == TRACK_NONE) return true; return false; } /* get one bit from MFM bit stream */ STATIC_INLINE uae_u32 getonebit (uae_u16 * mfmbuf, int mfmpos) { uae_u16 *buf; buf = &mfmbuf[mfmpos >> 4]; return (buf[0] & (1 << (15 - (mfmpos & 15)))) ? 1 : 0; } void dumpdisk (void) { int i, j, k; uae_u16 w; for (i = 0; i < MAX_FLOPPY_DRIVES; i++) { drive *drv = &floppy[i]; if (!(disabled & (1 << i))) { console_out_f (_T("Drive %d: motor %s cylinder %2d sel %s %s mfmpos %d/%d\n"), i, drv->motoroff ? _T("off") : _T(" on"), drv->cyl, (selected & (1 << i)) ? _T("no") : _T("yes"), drive_writeprotected (drv) ? _T("ro") : _T("rw"), drv->mfmpos, drv->tracklen); if (drv->motoroff == 0) { w = word; for (j = 0; j < 15; j++) { console_out_f (_T("%04X "), w); for (k = 0; k < 16; k++) { w <<= 1; w |= getonebit (drv->bigmfmbuf, drv->mfmpos + j * 16 + k); } } console_out (_T("\n")); } } } console_out_f (_T("side %d dma %d off %d word %04X pt %08X len %04X bytr %04X adk %04X sync %04X\n"), side, dskdmaen, bitoffset, word, dskpt, dsklen, dskbytr_val, adkcon, dsksync); } static void disk_dmafinished (void) { INTREQ (0x8000 | 0x0002); longwritemode = 0; dskdmaen = DSKDMA_OFF; dsklength = 0; if (disk_debug_logging > 0) { int dr, mfmpos = -1; write_log (_T("disk dma finished %08X MFMpos="), dskpt); for (dr = 0; dr < MAX_FLOPPY_DRIVES; dr++) write_log (_T("%d%s"), floppy[dr].mfmpos, dr < MAX_FLOPPY_DRIVES - 1 ? _T(",") : _T("")); write_log (_T("\n")); } } static void fetchnextrevolution (drive *drv) { drv->trackspeed = get_floppy_speed2 (drv); if (!drv->multi_revolution) return; switch (drv->filetype) { case ADF_IPF: #ifdef CAPS caps_loadrevolution (drv->bigmfmbuf, drv - floppy, drv->cyl * 2 + side, &drv->tracklen); #endif break; case ADF_FDI: #ifdef FDI2RAW fdi2raw_loadrevolution (drv->fdi, drv->bigmfmbuf, drv->tracktiming, drv->cyl * 2 + side, &drv->tracklen, 1); #endif break; } } void DISK_handler (uae_u32 data) { int flag = data & 255; int disk_sync_cycle = data >> 8; int hpos = current_hpos (); event2_remevent (ev2_disk); DISK_update (disk_sync_cycle); if (flag & (DISK_REVOLUTION << 0)) fetchnextrevolution (&floppy[0]); if (flag & (DISK_REVOLUTION << 1)) fetchnextrevolution (&floppy[1]); if (flag & (DISK_REVOLUTION << 2)) fetchnextrevolution (&floppy[2]); if (flag & (DISK_REVOLUTION << 3)) fetchnextrevolution (&floppy[3]); if (flag & DISK_WORDSYNC) INTREQ (0x8000 | 0x1000); if (flag & DISK_INDEXSYNC) { if (!indexdecay) { indexdecay = 2; cia_diskindex (); } } } static void disk_doupdate_write (drive * drv, int floppybits) { int dr; int drives[4]; for (dr = 0; dr < MAX_FLOPPY_DRIVES; dr++) { drive *drv2 = &floppy[dr]; drives[dr] = 0; if (drv2->motoroff) continue; if (selected & (1 << dr)) continue; drives[dr] = 1; } while (floppybits >= drv->trackspeed) { for (dr = 0; dr < MAX_FLOPPY_DRIVES; dr++) { if (drives[dr]) { floppy[dr].mfmpos++; floppy[dr].mfmpos %= drv->tracklen; } } if (dmaen (DMA_DISK) && dskdmaen == DSKDMA_WRITE && dsklength > 0 && fifo_filled) { bitoffset++; bitoffset &= 15; if (!bitoffset) { // fast disk modes, fill the fifo instantly if (currprefs.floppy_speed > 100 && !fifo_inuse[0] && !fifo_inuse[1] && !fifo_inuse[2]) { while (!fifo_inuse[2]) { uae_u16 w = chipmem_wget_indirect (dskpt); DSKDAT (w); dskpt += 2; } } if (disk_fifostatus () >= 0) { uae_u16 w = DSKDATR (); for (dr = 0; dr < MAX_FLOPPY_DRIVES ; dr++) { drive *drv2 = &floppy[dr]; if (drives[dr]) { drv2->bigmfmbuf[drv2->mfmpos >> 4] = w; drv2->bigmfmbuf[(drv2->mfmpos >> 4) + 1] = 0x5555; drv2->writtento = 1; } #ifdef AMAX if (currprefs.amaxromfile[0]) amax_diskwrite (w); #endif } dsklength--; if (dsklength <= 0) { disk_dmafinished (); for (int dr = 0; dr < MAX_FLOPPY_DRIVES ; dr++) { drive *drv = &floppy[dr]; drv->writtento = 0; if (drv->motoroff) continue; if (selected & (1 << dr)) continue; drive_write_data (drv); } } } } } floppybits -= drv->trackspeed; } } static void update_jitter (void) { if (currprefs.floppy_random_bits_max > 0) disk_jitter = ((uaerand () >> 4) % (currprefs.floppy_random_bits_max - currprefs.floppy_random_bits_min + 1)) + currprefs.floppy_random_bits_min; else disk_jitter = 0; } static void updatetrackspeed (drive *drv, int mfmpos) { if (dskdmaen < DSKDMA_WRITE) { int t = drv->tracktiming[mfmpos / 8]; drv->trackspeed = get_floppy_speed2 (drv) * t / 1000; if (drv->trackspeed < 700 || drv->trackspeed > 3000) { static int warned; warned++; if (warned < 50) write_log (_T("corrupted trackspeed value %d\n"), drv->trackspeed); drv->trackspeed = 1000; } } } static void disk_doupdate_predict (int startcycle) { int finaleventcycle = maxhpos << 8; int finaleventflag = 0; for (int dr = 0; dr < MAX_FLOPPY_DRIVES; dr++) { drive *drv = &floppy[dr]; if (drv->motoroff) continue; if (drv->motoroff || !drv->trackspeed) continue; if (selected & (1 << dr)) continue; int diskevent_flag = 0; uae_u32 tword = word; int countcycle = startcycle + (drv->floppybitcounter % drv->trackspeed); int mfmpos = drv->mfmpos; while (countcycle < (maxhpos << 8)) { if (drv->tracktiming[0]) updatetrackspeed (drv, mfmpos); if (dskdmaen != DSKDMA_WRITE || (dskdmaen == DSKDMA_WRITE && !dma_enable)) { tword <<= 1; if (!drive_empty (drv)) { if (unformatted (drv)) tword |= (uaerand () & 0x1000) ? 1 : 0; else tword |= getonebit (drv->bigmfmbuf, mfmpos); } if ((tword & 0xffff) == dsksync && dsksync != 0) diskevent_flag |= DISK_WORDSYNC; } mfmpos++; mfmpos %= drv->tracklen; if (mfmpos == 0) diskevent_flag |= DISK_REVOLUTION << (drv - floppy); if (mfmpos == drv->indexoffset) diskevent_flag |= DISK_INDEXSYNC; if (dskdmaen != DSKDMA_WRITE && mfmpos == drv->skipoffset) { update_jitter (); int skipcnt = disk_jitter; while (skipcnt-- > 0) { mfmpos++; mfmpos %= drv->tracklen; if (mfmpos == 0) diskevent_flag |= DISK_REVOLUTION << (drv - floppy); if (mfmpos == drv->indexoffset) diskevent_flag |= DISK_INDEXSYNC; } } if (diskevent_flag) break; countcycle += drv->trackspeed; } if (drv->tracktiming[0]) updatetrackspeed (drv, drv->mfmpos); if (diskevent_flag && countcycle < finaleventcycle) { finaleventcycle = countcycle; finaleventflag = diskevent_flag; } } if (finaleventflag && (finaleventcycle >> 8) < maxhpos) { event2_newevent (ev2_disk, (finaleventcycle - startcycle) >> 8, ((finaleventcycle >> 8) << 8) | finaleventflag); } } int disk_fifostatus (void) { if (fifo_inuse[0] && fifo_inuse[1] && fifo_inuse[2]) return 1; if (!fifo_inuse[0] && !fifo_inuse[1] && !fifo_inuse[2]) return -1; return 0; } static int doreaddma (void) { if (dmaen (DMA_DISK) && bitoffset == 15 && dma_enable && dskdmaen == DSKDMA_READ && dsklength >= 0) { if (dsklength > 0) { // DSKLEN == 1: finish without DMA transfer. if (dsklength == 1 && dsklength2 == 1) { disk_dmafinished (); return 0; } // fast disk modes, just flush the fifo if (currprefs.floppy_speed > 100 && fifo_inuse[0] && fifo_inuse[1] && fifo_inuse[2]) { while (fifo_inuse[0]) { uae_u16 w = DSKDATR (); chipmem_wput_indirect (dskpt, w); dskpt += 2; } } if (disk_fifostatus () > 0) { write_log (_T("doreaddma() fifo overflow detected, retrying..\n")); return -1; } else { DSKDAT (word); dsklength--; } } return 1; } return 0; } static void disk_doupdate_read_nothing (int floppybits) { int j = 0, k = 1, l = 0; while (floppybits >= get_floppy_speed ()) { word <<= 1; doreaddma (); if ((bitoffset & 7) == 7) { dskbytr_val = word & 0xff; dskbytr_val |= 0x8000; } bitoffset++; bitoffset &= 15; floppybits -= get_floppy_speed (); } } static void disk_doupdate_read (drive * drv, int floppybits) { int j = 0, k = 1, l = 0; /* uae_u16 *mfmbuf = drv->bigmfmbuf; dsksync = 0x4444; adkcon |= 0x400; drv->mfmpos = 0; memset (mfmbuf, 0, 1000); cycles = 0x1000000; // 4444 4444 4444 aaaa aaaaa 4444 4444 4444 // 4444 aaaa aaaa 4444 mfmbuf[0] = 0x4444; mfmbuf[1] = 0x4444; mfmbuf[2] = 0x4444; mfmbuf[3] = 0xaaaa; mfmbuf[4] = 0xaaaa; mfmbuf[5] = 0x4444; mfmbuf[6] = 0x4444; mfmbuf[7] = 0x4444; */ while (floppybits >= drv->trackspeed) { int oldmfmpos = drv->mfmpos; if (drv->tracktiming[0]) updatetrackspeed (drv, drv->mfmpos); word <<= 1; if (!drive_empty (drv)) { if (unformatted (drv)) word |= (uaerand () & 0x1000) ? 1 : 0; else word |= getonebit (drv->bigmfmbuf, drv->mfmpos); } //write_log (_T("%08X bo=%d so=%d mfmpos=%d dma=%d\n"), (word & 0xffffff), bitoffset, syncoffset, drv->mfmpos, dma_enable); drv->mfmpos++; drv->mfmpos %= drv->tracklen; if (drv->mfmpos == drv->indexoffset) { if (disk_debug_logging > 1 && drv->indexhack) write_log (_T("indexhack cleared\n")); drv->indexhack = 0; } if (drv->mfmpos == drv->skipoffset) { update_jitter (); drv->mfmpos += disk_jitter; drv->mfmpos %= drv->tracklen; } if (doreaddma () < 0) { drv->mfmpos = oldmfmpos; return; } if ((bitoffset & 7) == 7) { dskbytr_val = word & 0xff; dskbytr_val |= 0x8000; } if (word == dsksync) { dsksync_cycles = get_cycles () + WORDSYNC_TIME * CYCLE_UNIT; if (dskdmaen != DSKDMA_OFF) { if (disk_debug_logging && dma_enable == 0) write_log (_T("Sync match, DMA started at %d PC=%08x\n"), drv->mfmpos, M68K_GETPC); dma_enable = 1; } if (adkcon & 0x400) { bitoffset = 15; } } bitoffset++; bitoffset &= 15; floppybits -= drv->trackspeed; } } static void disk_dma_debugmsg (void) { write_log (_T("LEN=%04X (%d) SYNC=%04X PT=%08X ADKCON=%04X PC=%08X\n"), dsklength, dsklength, (adkcon & 0x400) ? dsksync : 0xffff, dskpt, adkcon, M68K_GETPC); } /* this is very unoptimized. DSKBYTR is used very rarely, so it should not matter. */ uae_u16 DSKBYTR (int hpos) { uae_u16 v; DISK_update (hpos); v = dskbytr_val; dskbytr_val &= ~0x8000; if (word == dsksync && cycles_in_range (dsksync_cycles)) v |= 0x1000; if (dskdmaen != DSKDMA_OFF && dmaen (DMA_DISK)) v |= 0x4000; if (dsklen & 0x4000) v |= 0x2000; if (disk_debug_logging > 1) write_log (_T("DSKBYTR=%04X hpos=%d\n"), v, hpos); if (disk_debug_mode & DISK_DEBUG_PIO) { int dr; for (dr = 0; dr < MAX_FLOPPY_DRIVES; dr++) { drive *drv = &floppy[dr]; if (drv->motoroff) continue; if (!(selected & (1 << dr))) { if (disk_debug_track < 0 || disk_debug_track == 2 * drv->cyl + side) { disk_dma_debugmsg (); write_log (_T("DSKBYTR=%04X\n"), v); activate_debugger (); break; } } } } return v; } static void DISK_start (void) { int dr; for (int i = 0; i < 3; i++) fifo_inuse[i] = false; fifo_filled = 0; for (dr = 0; dr < MAX_FLOPPY_DRIVES; dr++) { drive *drv = &floppy[dr]; if (!(selected & (1 << dr))) { int tr = drv->cyl * 2 + side; trackid *ti = drv->trackdata + tr; if (dskdmaen == DSKDMA_WRITE) { drv->tracklen = longwritemode ? FLOPPY_WRITE_MAXLEN : FLOPPY_WRITE_LEN * drv->ddhd * 8 * 2; drv->trackspeed = get_floppy_speed (); drv->skipoffset = -1; updatemfmpos (drv); } /* Ugh. A nasty hack. Assume ADF_EXT1 tracks are always read from the start. */ if (ti->type == TRACK_RAW1) { #ifdef FSUAE if (disk_debug_logging) { write_log("setting drv->mfmpos = 0...\n"); } #endif drv->mfmpos = 0; bitoffset = 0; } if (drv->catweasel) drive_fill_bigbuf (drv, 1); } drv->floppybitcounter = 0; } dma_enable = (adkcon & 0x400) ? 0 : 1; } static int linecounter; void DISK_hsync (void) { int dr; for (dr = 0; dr < MAX_FLOPPY_DRIVES; dr++) { drive *drv = &floppy[dr]; if (drv->steplimit) drv->steplimit--; } if (indexdecay) indexdecay--; if (linecounter) { linecounter--; if (! linecounter) disk_dmafinished (); return; } DISK_update (maxhpos); } void DISK_update (int tohpos) { int dr; int cycles; int startcycle = disk_hpos; if (disk_hpos < 0) { disk_hpos = - disk_hpos; return; } cycles = (tohpos << 8) - disk_hpos; #if 0 if (tohpos == 228) write_log (_T("x")); if (tohpos != maxhpos || cycles / 256 != maxhpos) write_log (_T("%d %d %d\n"), tohpos, cycles / 256, disk_hpos / 256); #endif if (cycles <= 0) return; disk_hpos += cycles; if (disk_hpos >= (maxhpos << 8)) disk_hpos %= 1 << 8; for (dr = 0; dr < MAX_FLOPPY_DRIVES; dr++) { drive *drv = &floppy[dr]; if (drv->motoroff || !drv->tracklen || !drv->trackspeed) continue; drv->floppybitcounter += cycles; if (selected & (1 << dr)) { drv->mfmpos += drv->floppybitcounter / drv->trackspeed; drv->mfmpos %= drv->tracklen; drv->floppybitcounter %= drv->trackspeed; continue; } if (drv->diskfile) drive_fill_bigbuf (drv, 0); drv->mfmpos %= drv->tracklen; } int didaccess = 0; for (dr = 0; dr < MAX_FLOPPY_DRIVES; dr++) { drive *drv = &floppy[dr]; if (drv->motoroff || !drv->trackspeed) continue; if (selected & (1 << dr)) continue; /* write dma and wordsync enabled: read until wordsync match found */ if (dskdmaen == DSKDMA_WRITE && dma_enable) disk_doupdate_write (drv, drv->floppybitcounter); else disk_doupdate_read (drv, drv->floppybitcounter); drv->floppybitcounter %= drv->trackspeed; didaccess = 1; } /* no floppy selected but read dma */ if (!didaccess && dskdmaen == DSKDMA_READ) { disk_doupdate_read_nothing (cycles); } /* instantly finish dma if dsklen==0 and wordsync detected */ if (dskdmaen != DSKDMA_OFF && dma_enable && dsklength2 == 0 && dsklength == 0) disk_dmafinished (); disk_doupdate_predict (disk_hpos); } void DSKLEN (uae_u16 v, int hpos) { int dr, prev = dsklen; int noselected = 0; int motormask; DISK_update (hpos); if ((v & 0x8000) && (dsklen & 0x8000)) { dskdmaen = DSKDMA_READ; DISK_start (); } if (!(v & 0x8000)) { if (dskdmaen != DSKDMA_OFF) { /* Megalomania and Knightmare does this */ if (disk_debug_logging > 0 && dskdmaen == DSKDMA_READ) write_log (_T("warning: Disk read DMA aborted, %d words left PC=%x\n"), dsklength, M68K_GETPC); if (dskdmaen == DSKDMA_WRITE) { write_log (_T("warning: Disk write DMA aborted, %d words left PC=%x\n"), dsklength, M68K_GETPC); // did program write something that needs to be stored to file? for (dr = 0; dr < MAX_FLOPPY_DRIVES; dr++) { drive *drv2 = &floppy[dr]; if (!drv2->writtento) continue; drive_write_data (drv2); } } dskdmaen = DSKDMA_OFF; } } dsklen = v; dsklength2 = dsklength = dsklen & 0x3fff; if (dskdmaen == DSKDMA_OFF) return; if (dsklength == 0 && dma_enable) { disk_dmafinished (); return; } if ((v & 0x4000) && (prev & 0x4000)) { if (dsklength == 0) return; if (dsklength == 1) { disk_dmafinished (); return; } dskdmaen = DSKDMA_WRITE; DISK_start (); } if (((disk_debug_mode & DISK_DEBUG_DMA_READ) && dskdmaen == DSKDMA_READ) || ((disk_debug_mode & DISK_DEBUG_DMA_WRITE) && dskdmaen == DSKDMA_WRITE)) { for (dr = 0; dr < MAX_FLOPPY_DRIVES; dr++) { drive *drv = &floppy[dr]; if (drv->motoroff) continue; if (!(selected & (1 << dr))) { if (disk_debug_track < 0 || disk_debug_track == 2 * drv->cyl + side) { disk_dma_debugmsg (); activate_debugger (); break; } } } } motormask = 0; for (dr = 0; dr < MAX_FLOPPY_DRIVES; dr++) { drive *drv = &floppy[dr]; drv->writtento = 0; if (drv->motoroff) continue; motormask |= 1 << dr; if ((selected & (1 << dr)) == 0) break; } if (dr == 4) { write_log (_T("disk %s DMA started, drvmask=%x motormask=%x PC=%08x\n"), dskdmaen == DSKDMA_WRITE ? _T("write") : _T("read"), selected ^ 15, motormask, M68K_GETPC); noselected = 1; } else { if (disk_debug_logging > 0) { write_log (_T("disk %s DMA started, drvmask=%x track %d mfmpos %d dmaen=%d PC=%08X\n"), dskdmaen == DSKDMA_WRITE ? _T("write") : _T("read"), selected ^ 15, floppy[dr].cyl * 2 + side, floppy[dr].mfmpos, dma_enable, M68K_GETPC); disk_dma_debugmsg (); } } for (dr = 0; dr < MAX_FLOPPY_DRIVES; dr++) update_drive_gui (dr); /* Try to make floppy access from Kickstart faster. */ if (dskdmaen != DSKDMA_READ && dskdmaen != DSKDMA_WRITE) return; for (dr = 0; dr < MAX_FLOPPY_DRIVES; dr++) { drive *drv = &floppy[dr]; if (selected & (1 << dr)) continue; if (drv->filetype != ADF_NORMAL) break; } if (dr < MAX_FLOPPY_DRIVES) /* no turbo mode if any selected drive has non-standard ADF */ return; { int done = 0; for (dr = 0; dr < MAX_FLOPPY_DRIVES; dr++) { drive *drv = &floppy[dr]; int pos, i; if (drv->motoroff) continue; if (!drv->useturbo && currprefs.floppy_speed > 0) continue; if (selected & (1 << dr)) continue; pos = drv->mfmpos & ~15; drive_fill_bigbuf (drv, 0); if (dskdmaen == DSKDMA_READ) { /* TURBO read */ if (adkcon & 0x400) { for (i = 0; i < drv->tracklen; i += 16) { pos += 16; pos %= drv->tracklen; if (drv->bigmfmbuf[pos >> 4] == dsksync) { /* must skip first disk sync marker */ pos += 16; pos %= drv->tracklen; break; } } if (i >= drv->tracklen) return; } while (dsklength-- > 0) { chipmem_wput_indirect (dskpt, drv->bigmfmbuf[pos >> 4]); dskpt += 2; pos += 16; pos %= drv->tracklen; } drv->mfmpos = pos; #ifdef FSUAE if (disk_debug_logging) { write_log("drv->mfmpos = %d (2)\n", drv->mfmpos); } #endif INTREQ (0x8000 | 0x1000); done = 1; } else if (dskdmaen == DSKDMA_WRITE) { /* TURBO write */ for (i = 0; i < dsklength; i++) { uae_u16 w = chipmem_wget_indirect (dskpt + i * 2); drv->bigmfmbuf[pos >> 4] = w; #ifdef AMAX if (currprefs.amaxromfile[0]) amax_diskwrite (w); #endif pos += 16; pos %= drv->tracklen; } drv->mfmpos = pos; #ifdef FSUAE if (disk_debug_logging) { write_log("drv->mfmpos = %d (3)\n", drv->mfmpos); } #endif drive_write_data (drv); done = 1; } } if (!done && noselected) { while (dsklength-- > 0) { if (dskdmaen == DSKDMA_WRITE) { uae_u16 w = chipmem_wget_indirect (dskpt); #ifdef AMAX if (currprefs.amaxromfile[0]) amax_diskwrite (w); #endif } else { chipmem_wput_indirect (dskpt, 0); } dskpt += 2; } INTREQ (0x8000 | 0x1000); done = 1; } if (done) { linecounter = 2; dskdmaen = DSKDMA_OFF; return; } } } void DISK_update_adkcon (int hpos, uae_u16 v) { uae_u16 vold = adkcon; uae_u16 vnew = adkcon; if (v & 0x8000) vnew |= v & 0x7FFF; else vnew &= ~v; if ((vnew & 0x400) && !(vold & 0x400)) bitoffset = 0; } void DSKSYNC (int hpos, uae_u16 v) { if (v == dsksync) return; DISK_update (hpos); dsksync = v; } STATIC_INLINE bool iswrite (void) { return dskdmaen == 3; } void DSKDAT (uae_u16 v) { if (fifo_inuse[2]) { write_log (_T("DSKDAT: FIFO overflow!\n")); return; } fifo_inuse[2] = fifo_inuse[1]; fifo[2] = fifo[1]; fifo_inuse[1] = fifo_inuse[0]; fifo[1] = fifo[0]; fifo_inuse[0] = iswrite () ? 2 : 1; fifo[0] = v; fifo_filled = 1; } uae_u16 DSKDATR (void) { int i; uae_u16 v = 0; for (i = 2; i >= 0; i--) { if (fifo_inuse[i]) { fifo_inuse[i] = 0; v = fifo[i]; break; } } if (i < 0) { write_log (_T("DSKDATR: FIFO underflow!\n")); } else if (dskdmaen > 0 && dskdmaen < 3 && dsklength <= 0 && disk_fifostatus () < 0) { disk_dmafinished (); } return v; } uae_u16 disk_dmal (void) { uae_u16 dmal = 0; if (dskdmaen) { if (dskdmaen == 3) { dmal = (1 + 2) * (fifo_inuse[0] ? 1 : 0) + (4 + 8) * (fifo_inuse[1] ? 1 : 0) + (16 + 32) * (fifo_inuse[2] ? 1 : 0); dmal ^= 63; if (dsklength == 2) dmal &= ~(16 + 32); if (dsklength == 1) dmal &= ~(16 + 32 + 4 + 8); } else { dmal = 16 * (fifo_inuse[0] ? 1 : 0) + 4 * (fifo_inuse[1] ? 1 : 0) + 1 * (fifo_inuse[2] ? 1 : 0); } } return dmal; } uaecptr disk_getpt (void) { uaecptr pt = dskpt; dskpt += 2; return pt; } void DSKPTH (uae_u16 v) { dskpt = (dskpt & 0xffff) | ((uae_u32) v << 16); } void DSKPTL (uae_u16 v) { dskpt = (dskpt & ~0xffff) | (v); } void DISK_free (void) { int dr; for (dr = 0; dr < MAX_FLOPPY_DRIVES; dr++) { drive *drv = &floppy[dr]; drive_image_free (drv); } } void DISK_init (void) { int dr; for (dr = 0; dr < MAX_FLOPPY_DRIVES; dr++) { drive *drv = &floppy[dr]; /* reset all drive types to 3.5 DD */ drive_settype_id (drv); if (!drive_insert (drv, &currprefs, dr, currprefs.floppyslots[dr].df, false)) disk_eject (dr); } if (disk_empty (0)) write_log (_T("No disk in drive 0.\n")); amax_init (); } void DISK_reset (void) { int i; if (savestate_state) return; //floppy[0].catweasel = &cwc.drives[0]; disk_hpos = 0; dskdmaen = 0; disabled = 0; for (i = 0; i < MAX_FLOPPY_DRIVES; i++) reset_drive (i); setamax (); } int DISK_examine_image (struct uae_prefs *p, int num, uae_u32 *crc32) { int drvsec; int ret, i; drive *drv = &floppy[num]; uae_u32 dos, crc, crc2; int wasdelayed = drv->dskchange_time; int sectable[MAX_SECTORS]; int oldcyl, oldside; ret = 0; *crc32 = 0; oldcyl = drv->cyl; oldside = side; drv->cyl = 0; side = 0; if (!drive_insert (drv, p, num, p->floppyslots[num].df, true) || !drv->diskfile) { drv->cyl = oldcyl; side = oldside; return 1; } *crc32 = zfile_crc32 (drv->diskfile); decode_buffer (drv->bigmfmbuf, drv->cyl, 11, drv->ddhd, drv->filetype, &drvsec, sectable, 1); drv->cyl = oldcyl; side = oldside; if (sectable[0] == 0 || sectable[1] == 0) { ret = 2; goto end; } crc = crc2 = 0; for (i = 0; i < 1024; i += 4) { uae_u32 v = (writebuffer[i] << 24) | (writebuffer[i + 1] << 16) | (writebuffer[i + 2] << 8) | writebuffer[i + 3]; if (i == 0) dos = v; if (i == 4) { crc2 = v; v = 0; } if (crc + v < crc) crc++; crc += v; } if (dos == 0x4b49434b) { /* KICK */ ret = 10; goto end; } crc ^= 0xffffffff; if (crc != crc2) { ret = 3; goto end; } if (dos == 0x444f5300) ret = 10; else if (dos == 0x444f5301 || dos == 0x444f5302 || dos == 0x444f5303) ret = 11; else if (dos == 0x444f5304 || dos == 0x444f5305 || dos == 0x444f5306 || dos == 0x444f5307) ret = 12; else ret = 4; end: drive_image_free (drv); if (wasdelayed > 1) { drive_eject (drv); currprefs.floppyslots[num].df[0] = 0; drv->dskchange_time = wasdelayed; disk_insert (num, drv->newname); } return ret; } /* Disk save/restore code */ #if defined SAVESTATE || defined DEBUGGER void DISK_save_custom (uae_u32 *pdskpt, uae_u16 *pdsklength, uae_u16 *pdsksync, uae_u16 *pdskbytr) { if (pdskpt) *pdskpt = dskpt; if (pdsklength) *pdsklength = dsklen; if (pdsksync) *pdsksync = dsksync; if (pdskbytr) *pdskbytr = dskbytr_val; } #endif /* SAVESTATE || DEBUGGER */ static uae_u32 getadfcrc (drive *drv) { uae_u8 *b; uae_u32 crc32; int size; if (!drv->diskfile) return 0; zfile_fseek (drv->diskfile, 0, SEEK_END); size = zfile_ftell (drv->diskfile); b = xmalloc (uae_u8, size); if (!b) return 0; zfile_fseek (drv->diskfile, 0, SEEK_SET); zfile_fread (b, 1, size, drv->diskfile); crc32 = get_crc32 (b, size); free (b); return crc32; } #ifdef SAVESTATE void DISK_restore_custom (uae_u32 pdskpt, uae_u16 pdsklength, uae_u16 pdskbytr) { dskpt = pdskpt; dsklen = pdsklength; dskbytr_val = pdskbytr; } void restore_disk_finish (void) { int cnt = 0; for (int i = 0; i < MAX_FLOPPY_DRIVES; i++) { if (currprefs.floppyslots[i].dfxtype >= 0) cnt++; } currprefs.nr_floppies = changed_prefs.nr_floppies = cnt; DISK_check_change (); setamax (); #if 0 if (dskdmaen) dumpdisk (); #endif } uae_u8 *restore_disk (int num,uae_u8 *src) { drive *drv; int state, dfxtype; TCHAR old[MAX_DPATH]; TCHAR *s; int newis; drv = &floppy[num]; disabled &= ~(1 << num); drv->drive_id = restore_u32 (); drv->motoroff = 1; drv->idbit = 0; state = restore_u8 (); if (state & 2) { disabled |= 1 << num; if (changed_prefs.nr_floppies > num) changed_prefs.nr_floppies = num; changed_prefs.floppyslots[num].dfxtype = -1; } else { drv->motoroff = (state & 1) ? 0 : 1; drv->idbit = (state & 4) ? 1 : 0; switch (drv->drive_id) { case DRIVE_ID_35HD: dfxtype = DRV_35_HD; break; case DRIVE_ID_525SD: dfxtype = DRV_525_SD; break; default: dfxtype = DRV_35_DD; break; } currprefs.floppyslots[num].dfxtype = changed_prefs.floppyslots[num].dfxtype = dfxtype; } drv->dskchange = (state & 8) != 0; side = (state & 16) ? 1 : 0; drv->indexhackmode = 0; if (num == 0 && currprefs.floppyslots[num].dfxtype == 0) drv->indexhackmode = 1; drv->buffered_cyl = -1; drv->buffered_side = -1; drv->cyl = restore_u8 (); drv->dskready = restore_u8 () != 0; drv->drive_id_scnt = restore_u8 (); int mfmpos = restore_u32 (); drv->dskchange_time = 0; restore_u32 (); s = restore_path (SAVESTATE_PATH_FLOPPY); if (s && s[0]) write_log (_T("-> '%s'\n"), s); _tcscpy (old, currprefs.floppyslots[num].df); _tcsncpy (changed_prefs.floppyslots[num].df, s, 255); xfree (s); int dskready_up_time = restore_u16 (); int dskready_down_time = restore_u16 (); newis = changed_prefs.floppyslots[num].df[0] ? 1 : 0; if (!(disabled & (1 << num))) { if (!newis && old[0]) { *currprefs.floppyslots[num].df = *changed_prefs.floppyslots[num].df = 0; drv->dskchange = false; } else if (newis) { drive_insert (floppy + num, &currprefs, num, changed_prefs.floppyslots[num].df, false); if (drive_empty (floppy + num)) { if (newis && old[0]) { _tcscpy (changed_prefs.floppyslots[num].df, old); drive_insert (floppy + num, &currprefs, num, changed_prefs.floppyslots[num].df, false); if (drive_empty (floppy + num)) drv->dskchange = true; } else { drv->dskchange_time = -1; } } } } drv->mfmpos = mfmpos; drv->prevtracklen = drv->tracklen; drv->dskready_up_time = dskready_up_time; drv->dskready_down_time = dskready_down_time; reset_drive_gui (num); return src; } uae_u8 *restore_disk2 (int num,uae_u8 *src) { drive *drv = &floppy[num]; uae_u32 m = restore_u32 (); if (m) { drv->floppybitcounter = restore_u16 (); drv->tracklen = restore_u32 (); drv->trackspeed = restore_u16 (); drv->skipoffset = restore_u32 (); drv->indexoffset = restore_u32 (); drv->buffered_cyl = drv->cyl; drv->buffered_side = side; for (int j = 0; j < (drv->tracklen + 15) / 16; j++) { drv->bigmfmbuf[j] = restore_u16 (); if (m & 2) drv->tracktiming[j] = restore_u16 (); } } return src; } uae_u8 *save_disk (int num, int *len, uae_u8 *dstptr, bool usepath) { uae_u8 *dstbak,*dst; drive *drv = &floppy[num]; if (dstptr) dstbak = dst = dstptr; else dstbak = dst = xmalloc (uae_u8, 2 + 1 + 1 + 1 + 1 + 4 + 4 + 256); save_u32 (drv->drive_id); /* drive type ID */ save_u8 ((drv->motoroff ? 0 : 1) | ((disabled & (1 << num)) ? 2 : 0) | (drv->idbit ? 4 : 0) | (drv->dskchange ? 8 : 0) | (side ? 16 : 0)); save_u8 (drv->cyl); /* cylinder */ save_u8 (drv->dskready); /* dskready */ save_u8 (drv->drive_id_scnt); /* id mode position */ save_u32 (drv->mfmpos); /* disk position */ save_u32 (getadfcrc (drv)); /* CRC of disk image */ save_path (usepath ? currprefs.floppyslots[num].df : _T(""), SAVESTATE_PATH_FLOPPY);/* image name */ save_u16 (drv->dskready_up_time); save_u16 (drv->dskready_down_time); *len = dst - dstbak; return dstbak; } uae_u8 *save_disk2 (int num, int *len, uae_u8 *dstptr) { uae_u8 *dstbak,*dst; drive *drv = &floppy[num]; int m = 0; int size = 0; if (drv->motoroff == 0 && drv->buffered_side >= 0 && drv->tracklen > 0) { m = 1; if (drv->tracktiming[0]) m |= 2; size += ((drv->tracklen + 15) * 2) / 8; } if (!m) return NULL; if (dstptr) dstbak = dst = dstptr; else dstbak = dst = xmalloc (uae_u8, 2 + 4 + 2 + 4 + 4 + size); save_u32 (m); save_u16 (drv->floppybitcounter); save_u32 (drv->tracklen); save_u16 (drv->trackspeed); save_u32 (drv->skipoffset); save_u32 (drv->indexoffset); for (int j = 0; j < (drv->tracklen + 15) / 16; j++) { save_u16 (drv->bigmfmbuf[j]); if (drv->tracktiming[0]) save_u16 (drv->tracktiming[j]); } *len = dst - dstbak; return dstbak; } /* internal floppy controller variables */ uae_u8 *restore_floppy (uae_u8 *src) { word = restore_u16 (); bitoffset = restore_u8 (); dma_enable = restore_u8 (); disk_hpos = restore_u8 () & 0xff; dskdmaen = restore_u8 (); for (int i = 0; i < 3; i++) { fifo[i] = restore_u16 (); fifo_inuse[i] = restore_u8 (); if (dskdmaen == 0) fifo_inuse[i] = false; } fifo_filled = fifo_inuse[0] || fifo_inuse[1] || fifo_inuse[2]; dsklength = restore_u16 (); return src; } uae_u8 *save_floppy (int *len, uae_u8 *dstptr) { uae_u8 *dstbak, *dst; if (dstptr) dstbak = dst = dstptr; else dstbak = dst = xmalloc (uae_u8, 100); save_u16 (word); /* shift register */ save_u8 (bitoffset); /* dma bit offset */ save_u8 (dma_enable); /* disk sync found */ save_u8 (disk_hpos & 0xff); /* next bit read position */ save_u8 (dskdmaen); /* dma status */ for (int i = 0; i < 3; i++) { save_u16 (fifo[i]); save_u8 (fifo_inuse[i]); } save_u16 (dsklength); *len = dst - dstbak; return dstbak; } #endif /* SAVESTATE */ #define MAX_DISKENTRIES 4 int disk_prevnext_name (TCHAR *imgp, int dir) { TCHAR img[MAX_DPATH], *ext, *p, *p2, *ps, *dst[MAX_DISKENTRIES]; int num = -1; int cnt, i; TCHAR imgl[MAX_DPATH]; int ret, gotone, wrapped; TCHAR *old; old = my_strdup (imgp); struct zfile *zf = zfile_fopen (imgp, _T("rb"), ZFD_NORMAL); if (zf) { _tcscpy (img, zfile_getname (zf)); zfile_fclose (zf); zf = zfile_fopen (img, _T("rb"), ZFD_NORMAL); if (!zf) // oops, no directory support in this archive type _tcscpy (img, imgp); zfile_fclose (zf); } else { _tcscpy (img, imgp); } wrapped = 0; retry: _tcscpy (imgl, img); to_lower (imgl, sizeof imgl / sizeof (TCHAR)); gotone = 0; ret = 0; ps = imgl; cnt = 0; dst[cnt] = NULL; for (;;) { // disk x of y p = _tcsstr (ps, _T("(disk ")); if (p && _istdigit (p[6])) { p2 = p - imgl + img; num = _tstoi (p + 6); dst[cnt++] = p2 + 6; if (cnt >= MAX_DISKENTRIES - 1) break; gotone = 1; ps = p + 6; continue; } if (gotone) break; p = _tcsstr (ps, _T("disk")); if (p && _istdigit (p[4])) { p2 = p - imgl + img; num = _tstoi (p + 4); dst[cnt++] = p2 + 4; if (cnt >= MAX_DISKENTRIES - 1) break; gotone = 1; ps = p + 4; continue; } if (gotone) break; ext = _tcsrchr (ps, '.'); if (!ext || ext - ps < 4) break; TCHAR *ext2 = ext - imgl + img; // name_x.ext if (ext[-3] == '_' && !_istdigit (ext[-2]) && _istdigit (ext[-1])) { num = _tstoi (ext - 1); dst[cnt++] = ext2 - 1; // name_x.ext, name-x.ext, name x.ext } else if ((ext[-2] == '_' || ext[-2] == '-' || ext[-2] == ' ') && _istdigit (ext[-1])) { num = _tstoi (ext - 1); dst[cnt++] = ext2 - 1; // name_a.ext, name-a.ext, name a .ext } else if ((ext[-2] == '_' || ext[-2] == '-' || ext[-2] == ' ') && ext[-1] >= 'a' && ext[-1] <= 'z') { num = ext[-1] - 'a' + 1; dst[cnt++] = ext2 - 1; // nameA.ext } else if (ext2[-2] >= 'a' && ext2[-2] <= 'z' && ext2[-1] >= 'A' && ext2[-1] <= 'Z') { num = ext[-1] - 'a' + 1; dst[cnt++] = ext2 - 1; // namex.ext } else if (!_istdigit (ext2[-2]) && _istdigit (ext[-1])) { num = ext[-1] - '0'; dst[cnt++] = ext2 - 1; } break; } dst[cnt] = NULL; if (num <= 0 || num >= 19) goto end; num += dir; if (num > 9) goto end; if (num == 9) num = 1; else if (num == 0) num = 9; for (i = 0; i < cnt; i++) { if (!_istdigit (dst[i][0])) { int capital = dst[i][0] >= 'A' && dst[i][0] <= 'Z'; dst[i][0] = (num - 1) + (capital ? 'A' : 'a'); } else { dst[i][0] = num + '0'; } } if (zfile_exists (img)) { ret = 1; goto end; } if (gotone) { // was (disk x but no match, perhaps there are extra tags.. TCHAR *old2 = my_strdup (img); for (;;) { ext = _tcsrchr (img, '.'); if (!ext) break; if (ext == img) break; if (ext[-1] != ']') break; TCHAR *t = _tcsrchr (img, '['); if (!t) break; t[0] = 0; if (zfile_exists (img)) { ret = 1; goto end; } } _tcscpy (img, old2); xfree (old2); } if (!wrapped) { for (i = 0; i < cnt; i++) { if (!_istdigit (dst[i][0])) dst[i][0] = dst[i][0] >= 'A' && dst[i][0] <= 'Z' ? 'A' : 'a'; else dst[i][0] = '1'; if (dir < 0) dst[i][0] += 8; } wrapped++; } if (zfile_exists (img)) { ret = -1; goto end; } if (dir < 0 && wrapped < 2) goto retry; _tcscpy (img, old); end: _tcscpy (imgp, img); xfree (old); return ret; } int disk_prevnext (int drive, int dir) { TCHAR img[MAX_DPATH]; _tcscpy (img, currprefs.floppyslots[drive].df); if (!img[0]) return 0; disk_prevnext_name (img, dir); _tcscpy (changed_prefs.floppyslots[drive].df, img); return 1; } int getdebug(void) { return floppy[0].mfmpos; } fs-uae-2.2.3+dfsg/src/gencpu_mini.cpp0000644000175000017500000015414412162366654017655 0ustar glaubitzglaubitz/* * UAE - The Un*x Amiga Emulator * * MC68000 emulation generator * * This is a fairly stupid program that generates a lot of case labels that * can be #included in a switch statement. * As an alternative, it can generate functions that handle specific * MC68000 instructions, plus a prototype header file and a function pointer * array to look up the function for an opcode. * Error checking is bad, an illegal table68k file will cause the program to * call abort(). * The generated code is sometimes sub-optimal, an optimizing compiler should * take care of this. * * The source for the insn timings is Markt & Technik's Amiga Magazin 8/1992. * * Copyright 1995, 1996, 1997, 1998, 1999, 2000 Bernd Schmidt */ #include "sysconfig.h" #include "sysdeps.h" #include #include "readcpu.h" #define BOOL_TYPE "int" static FILE *headerfile; static FILE *stblfile; static int using_prefetch; static int using_exception_3; static int cpu_level; /* For the current opcode, the next lower level that will have different code. * Initialized to -1 for each opcode. If it remains unchanged, indicates we * are done with that opcode. */ static int next_cpu_level; static int *opcode_map; static int *opcode_next_clev; static int *opcode_last_postfix; static unsigned long *counts; static void read_counts (void) { FILE *file; unsigned long opcode, count, total; char name[20]; int nr = 0; memset (counts, 0, 65536 * sizeof *counts); file = fopen ("frequent.68k", "r"); if (file) { fscanf (file, "Total: %lu\n", &total); while (fscanf (file, "%lx: %lu %s\n", &opcode, &count, name) == 3) { opcode_next_clev[nr] = 5; opcode_last_postfix[nr] = -1; opcode_map[nr++] = opcode; counts[opcode] = count; } fclose (file); } if (nr == nr_cpuop_funcs) return; for (opcode = 0; opcode < 0x10000; opcode++) { if (table68k[opcode].handler == -1 && table68k[opcode].mnemo != i_ILLG && counts[opcode] == 0) { opcode_next_clev[nr] = 5; opcode_last_postfix[nr] = -1; opcode_map[nr++] = opcode; counts[opcode] = count; } } if (nr != nr_cpuop_funcs) abort (); } static char endlabelstr[80]; static int endlabelno = 0; static int need_endlabel; static int n_braces = 0; static int m68k_pc_offset = 0; static void start_brace (void) { n_braces++; printf ("{"); } static void close_brace (void) { assert (n_braces > 0); n_braces--; printf ("}"); } static void finish_braces (void) { while (n_braces > 0) close_brace (); } static void pop_braces (int to) { while (n_braces > to) close_brace (); } static int bit_size (int size) { switch (size) { case sz_byte: return 8; case sz_word: return 16; case sz_long: return 32; default: abort (); } return 0; } static const char *bit_mask (int size) { switch (size) { case sz_byte: return "0xff"; case sz_word: return "0xffff"; case sz_long: return "0xffffffff"; default: abort (); } return 0; } static const char *gen_nextilong (void) { static char buffer[80]; int r = m68k_pc_offset; m68k_pc_offset += 4; sprintf (buffer, "xget_ilong (%d)", r); return buffer; } static const char *gen_nextiword (void) { static char buffer[80]; int r = m68k_pc_offset; m68k_pc_offset += 2; sprintf (buffer, "xget_iword (%d)", r); return buffer; } static const char *gen_nextibyte (void) { static char buffer[80]; int r = m68k_pc_offset; m68k_pc_offset += 2; sprintf (buffer, "xget_ibyte (%d)", r); return buffer; } static void sync_m68k_pc (void) { if (m68k_pc_offset == 0) return; printf ("xm68k_incpc(%d);\n", m68k_pc_offset); m68k_pc_offset = 0; } /* getv == 1: fetch data; getv != 0: check for odd address. If movem != 0, * the calling routine handles Apdi and Aipi modes. * gb-- movem == 2 means the same thing but for a MOVE16 instruction */ static void genamode (amodes mode, char *reg, wordsizes size, char *name, int getv, int movem) { start_brace (); switch (mode) { case Dreg: if (movem) abort (); if (getv == 1) switch (size) { case sz_byte: #if defined(AMIGA) && !defined(WARPUP) /* sam: I don't know why gcc.2.7.2.1 produces a code worse */ /* if it is not done like that: */ printf ("\tuae_s8 %s = ((uae_u8*)&m68k_dreg (regs, %s))[3];\n", name, reg); #else printf ("\tuae_s8 %s = xm68k_dreg (%s);\n", name, reg); #endif break; case sz_word: #if defined(AMIGA) && !defined(WARPUP) printf ("\tuae_s16 %s = ((uae_s16*)&m68k_dreg (regs, %s))[1];\n", name, reg); #else printf ("\tuae_s16 %s = xm68k_dreg (%s);\n", name, reg); #endif break; case sz_long: printf ("\tuae_s32 %s = xm68k_dreg (%s);\n", name, reg); break; default: abort (); } return; case Areg: if (movem) abort (); if (getv == 1) switch (size) { case sz_word: printf ("\tuae_s16 %s = xm68k_areg (%s);\n", name, reg); break; case sz_long: printf ("\tuae_s32 %s = xm68k_areg (%s);\n", name, reg); break; default: abort (); } return; case Aind: printf ("\tuaecptr %sa = xm68k_areg (%s);\n", name, reg); break; case Aipi: printf ("\tuaecptr %sa = xm68k_areg (%s);\n", name, reg); break; case Apdi: switch (size) { case sz_byte: if (movem) printf ("\tuaecptr %sa = xm68k_areg (%s);\n", name, reg); else printf ("\tuaecptr %sa = xm68k_areg (%s) - xareg_byteinc[%s];\n", name, reg, reg); break; case sz_word: printf ("\tuaecptr %sa = xm68k_areg (%s) - %d;\n", name, reg, movem ? 0 : 2); break; case sz_long: printf ("\tuaecptr %sa = xm68k_areg (%s) - %d;\n", name, reg, movem ? 0 : 4); break; default: abort (); } break; case Ad16: printf ("\tuaecptr %sa = xm68k_areg (%s) + (uae_s32)(uae_s16)%s;\n", name, reg, gen_nextiword ()); break; case Ad8r: if (cpu_level > 1) { if (next_cpu_level < 1) next_cpu_level = 1; sync_m68k_pc (); start_brace (); /* This would ordinarily be done in gen_nextiword, which we bypass. */ printf ("\tuaecptr %sa = xget_disp_ea_020 (xm68k_areg (%s), xnext_iword ());\n", name, reg); } else printf ("\tuaecptr %sa = xget_disp_ea_000 (xm68k_areg (%s), %s);\n", name, reg, gen_nextiword ()); break; case PC16: printf ("\tuaecptr %sa = xm68k_getpc () + %d;\n", name, m68k_pc_offset); printf ("\t%sa += (uae_s32)(uae_s16)%s;\n", name, gen_nextiword ()); break; case PC8r: if (cpu_level > 1) { if (next_cpu_level < 1) next_cpu_level = 1; sync_m68k_pc (); start_brace (); /* This would ordinarily be done in gen_nextiword, which we bypass. */ printf ("\tuaecptr tmppc = xm68k_getpc ();\n"); printf ("\tuaecptr %sa = xget_disp_ea_020(tmppc, xnext_iword ());\n", name); } else { printf ("\tuaecptr tmppc = xm68k_getpc () + %d;\n", m68k_pc_offset); printf ("\tuaecptr %sa = xget_disp_ea_000 (tmppc, %s);\n", name, gen_nextiword ()); } break; case absw: printf ("\tuaecptr %sa = (uae_s32)(uae_s16)%s;\n", name, gen_nextiword ()); break; case absl: printf ("\tuaecptr %sa = %s;\n", name, gen_nextilong ()); break; case imm: if (getv != 1) abort (); switch (size) { case sz_byte: printf ("\tuae_s8 %s = %s;\n", name, gen_nextibyte ()); break; case sz_word: printf ("\tuae_s16 %s = %s;\n", name, gen_nextiword ()); break; case sz_long: printf ("\tuae_s32 %s = %s;\n", name, gen_nextilong ()); break; default: abort (); } return; case imm0: if (getv != 1) abort (); printf ("\tuae_s8 %s = %s;\n", name, gen_nextibyte ()); return; case imm1: if (getv != 1) abort (); printf ("\tuae_s16 %s = %s;\n", name, gen_nextiword ()); return; case imm2: if (getv != 1) abort (); printf ("\tuae_s32 %s = %s;\n", name, gen_nextilong ()); return; case immi: if (getv != 1) abort (); printf ("\tuae_u32 %s = %s;\n", name, reg); return; default: abort (); } if (getv == 1) { start_brace (); switch (size) { case sz_byte: printf ("\tuae_s8 %s = xget_byte (%sa);\n", name, name); break; case sz_word: printf ("\tuae_s16 %s = xget_word (%sa);\n", name, name); break; case sz_long: printf ("\tuae_s32 %s = xget_long (%sa);\n", name, name); break; default: abort (); } } /* We now might have to fix up the register for pre-dec or post-inc * addressing modes. */ if (!movem) switch (mode) { case Aipi: switch (size) { case sz_byte: printf ("\txm68k_areg (%s) += xareg_byteinc[%s];\n", reg, reg); break; case sz_word: printf ("\txm68k_areg (%s) += 2;\n", reg); break; case sz_long: printf ("\txm68k_areg (%s) += 4;\n", reg); break; default: abort (); } break; case Apdi: printf ("\txm68k_areg (%s) = %sa;\n", reg, name); break; default: break; } } static void genastore (char *from, amodes mode, char *reg, wordsizes size, char *to) { switch (mode) { case Dreg: switch (size) { case sz_byte: printf ("\txm68k_dreg (%s) = (xm68k_dreg (%s) & ~0xff) | ((%s) & 0xff);\n", reg, reg, from); break; case sz_word: printf ("\txm68k_dreg (%s) = (xm68k_dreg (%s) & ~0xffff) | ((%s) & 0xffff);\n", reg, reg, from); break; case sz_long: printf ("\txm68k_dreg (%s) = (%s);\n", reg, from); break; default: abort (); } break; case Areg: switch (size) { case sz_word: printf ("\txm68k_areg (%s) = (uae_s32)(uae_s16)(%s);\n", reg, from); break; case sz_long: printf ("\txm68k_areg (%s) = (%s);\n", reg, from); break; default: abort (); } break; case Aind: case Aipi: case Apdi: case Ad16: case Ad8r: case absw: case absl: case PC16: case PC8r: if (using_prefetch) sync_m68k_pc (); switch (size) { case sz_byte: printf ("\txput_byte (%sa,%s);\n", to, from); break; case sz_word: if (cpu_level < 2 && (mode == PC16 || mode == PC8r)) abort (); printf ("\txput_word (%sa,%s);\n", to, from); break; case sz_long: if (cpu_level < 2 && (mode == PC16 || mode == PC8r)) abort (); printf ("\txput_long (%sa,%s);\n", to, from); break; default: abort (); } break; case imm: case imm0: case imm1: case imm2: case immi: abort (); break; default: abort (); } } static void genmovemel (uae_u16 opcode) { char getcode[100]; int size = table68k[opcode].size == sz_long ? 4 : 2; if (table68k[opcode].size == sz_long) { strcpy (getcode, "xget_long (srca)"); } else { strcpy (getcode, "(uae_s32)(uae_s16)xget_word (srca)"); } printf ("\tuae_u16 mask = %s;\n", gen_nextiword ()); printf ("\tunsigned int dmask = mask & 0xff, amask = (mask >> 8) & 0xff;\n"); genamode (table68k[opcode].dmode, "dstreg", table68k[opcode].size, "src", 2, 1); start_brace (); printf ("\twhile (dmask) { xm68k_dreg (xmovem_index1[dmask]) = %s; srca += %d; dmask = xmovem_next[dmask]; }\n", getcode, size); printf ("\twhile (amask) { xm68k_areg (xmovem_index1[amask]) = %s; srca += %d; amask = xmovem_next[amask]; }\n", getcode, size); if (table68k[opcode].dmode == Aipi) printf ("\txm68k_areg (dstreg) = srca;\n"); } static void genmovemle (uae_u16 opcode) { char putcode[100]; int size = table68k[opcode].size == sz_long ? 4 : 2; if (table68k[opcode].size == sz_long) { strcpy (putcode, "xput_long (srca,"); } else { strcpy (putcode, "xput_word (srca,"); } printf ("\tuae_u16 mask = %s;\n", gen_nextiword ()); genamode (table68k[opcode].dmode, "dstreg", table68k[opcode].size, "src", 2, 1); if (using_prefetch) sync_m68k_pc (); start_brace (); if (table68k[opcode].dmode == Apdi) { printf ("\tuae_u16 amask = mask & 0xff, dmask = (mask >> 8) & 0xff;\n"); printf ("\twhile (amask) { srca -= %d; %s xm68k_areg (xmovem_index2[amask])); amask = xmovem_next[amask]; }\n", size, putcode); printf ("\twhile (dmask) { srca -= %d; %s xm68k_dreg (xmovem_index2[dmask])); dmask = xmovem_next[dmask]; }\n", size, putcode); printf ("\txm68k_areg (dstreg) = srca;\n"); } else { printf ("\tuae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff;\n"); printf ("\twhile (dmask) { %s xm68k_dreg (xmovem_index1[dmask])); srca += %d; dmask = xmovem_next[dmask]; }\n", putcode, size); printf ("\twhile (amask) { %s xm68k_areg (xmovem_index1[amask])); srca += %d; amask = xmovem_next[amask]; }\n", putcode, size); } } static void duplicate_carry (void) { printf ("\tXCOPY_CARRY;\n"); } typedef enum { flag_logical_noclobber, flag_logical, flag_add, flag_sub, flag_cmp, flag_addx, flag_subx, flag_zn, flag_av, flag_sv } flagtypes; static void genflags_normal (flagtypes type, wordsizes size, char *value, char *src, char *dst) { char vstr[100], sstr[100], dstr[100]; char usstr[100], udstr[100]; char unsstr[100], undstr[100]; switch (size) { case sz_byte: strcpy (vstr, "((uae_s8)("); strcpy (usstr, "((uae_u8)("); break; case sz_word: strcpy (vstr, "((uae_s16)("); strcpy (usstr, "((uae_u16)("); break; case sz_long: strcpy (vstr, "((uae_s32)("); strcpy (usstr, "((uae_u32)("); break; default: abort (); } strcpy (unsstr, usstr); strcpy (sstr, vstr); strcpy (dstr, vstr); strcat (vstr, value); strcat (vstr, "))"); strcat (dstr, dst); strcat (dstr, "))"); strcat (sstr, src); strcat (sstr, "))"); strcpy (udstr, usstr); strcat (udstr, dst); strcat (udstr, "))"); strcat (usstr, src); strcat (usstr, "))"); strcpy (undstr, unsstr); strcat (unsstr, "-"); strcat (undstr, "~"); strcat (undstr, dst); strcat (undstr, "))"); strcat (unsstr, src); strcat (unsstr, "))"); switch (type) { case flag_logical_noclobber: case flag_logical: case flag_zn: case flag_av: case flag_sv: case flag_addx: case flag_subx: break; case flag_add: start_brace (); printf ("uae_u32 %s = %s + %s;\n", value, dstr, sstr); break; case flag_sub: case flag_cmp: start_brace (); printf ("uae_u32 %s = %s - %s;\n", value, dstr, sstr); break; } switch (type) { case flag_logical_noclobber: case flag_logical: case flag_zn: break; case flag_add: case flag_sub: case flag_addx: case flag_subx: case flag_cmp: case flag_av: case flag_sv: start_brace (); printf ("\t" BOOL_TYPE " flgs = %s < 0;\n", sstr); printf ("\t" BOOL_TYPE " flgo = %s < 0;\n", dstr); printf ("\t" BOOL_TYPE " flgn = %s < 0;\n", vstr); break; } switch (type) { case flag_logical: printf ("\tXCLEAR_CZNV;\n"); printf ("\tXSET_ZFLG (%s == 0);\n", vstr); printf ("\tXSET_NFLG (%s < 0);\n", vstr); break; case flag_logical_noclobber: printf ("\tXSET_ZFLG (%s == 0);\n", vstr); printf ("\tXSET_NFLG (%s < 0);\n", vstr); break; case flag_av: printf ("\tXSET_VFLG ((flgs ^ flgn) & (flgo ^ flgn));\n"); break; case flag_sv: printf ("\tXSET_VFLG ((flgs ^ flgo) & (flgn ^ flgo));\n"); break; case flag_zn: printf ("\tXSET_ZFLG (XGET_ZFLG & (%s == 0));\n", vstr); printf ("\tXSET_NFLG (%s < 0);\n", vstr); break; case flag_add: printf ("\tXSET_ZFLG (%s == 0);\n", vstr); printf ("\tXSET_VFLG ((flgs ^ flgn) & (flgo ^ flgn));\n"); printf ("\tXSET_CFLG (%s < %s);\n", undstr, usstr); duplicate_carry (); printf ("\tXSET_NFLG (flgn != 0);\n"); break; case flag_sub: printf ("\tXSET_ZFLG (%s == 0);\n", vstr); printf ("\tXSET_VFLG ((flgs ^ flgo) & (flgn ^ flgo));\n"); printf ("\tXSET_CFLG (%s > %s);\n", usstr, udstr); duplicate_carry (); printf ("\tXSET_NFLG (flgn != 0);\n"); break; case flag_addx: printf ("\tXSET_VFLG ((flgs ^ flgn) & (flgo ^ flgn));\n"); /* minterm SON: 0x42 */ printf ("\tXSET_CFLG (flgs ^ ((flgs ^ flgo) & (flgo ^ flgn)));\n"); /* minterm SON: 0xD4 */ duplicate_carry (); break; case flag_subx: printf ("\tXSET_VFLG ((flgs ^ flgo) & (flgo ^ flgn));\n"); /* minterm SON: 0x24 */ printf ("\tXSET_CFLG (flgs ^ ((flgs ^ flgn) & (flgo ^ flgn)));\n"); /* minterm SON: 0xB2 */ duplicate_carry (); break; case flag_cmp: printf ("\tXSET_ZFLG (%s == 0);\n", vstr); printf ("\tXSET_VFLG ((flgs != flgo) && (flgn != flgo));\n"); printf ("\tXSET_CFLG (%s > %s);\n", usstr, udstr); printf ("\tXSET_NFLG (flgn != 0);\n"); break; } } static void genflags (flagtypes type, wordsizes size, char *value, char *src, char *dst) { /* Temporarily deleted 68k/ARM flag optimizations. I'd prefer to have them in the appropriate m68k.h files and use just one copy of this code here. The API can be changed if necessary. */ #ifdef OPTIMIZED_FLAGS switch (type) { case flag_add: case flag_sub: start_brace (); printf ("\tuae_u32 %s;\n", value); break; default: break; } /* At least some of those casts are fairly important! */ switch (type) { case flag_logical_noclobber: printf ("\t{uae_u32 oldcznv = GET_CZNV & ~(FLAGVAL_Z | FLAGVAL_N);\n"); if (strcmp (value, "0") == 0) { printf ("\tSET_CZNV (olcznv | FLAGVAL_Z);\n"); } else { switch (size) { case sz_byte: printf ("\toptflag_testb ((uae_s8)(%s));\n", value); break; case sz_word: printf ("\toptflag_testw ((uae_s16)(%s));\n", value); break; case sz_long: printf ("\toptflag_testl ((uae_s32)(%s));\n", value); break; } printf ("\tIOR_CZNV (oldcznv);\n"); } printf ("\t}\n"); return; case flag_logical: if (strcmp (value, "0") == 0) { printf ("\tSET_CZNV (FLAGVAL_Z);\n"); } else { switch (size) { case sz_byte: printf ("\toptflag_testb ((uae_s8)(%s));\n", value); break; case sz_word: printf ("\toptflag_testw ((uae_s16)(%s));\n", value); break; case sz_long: printf ("\toptflag_testl ((uae_s32)(%s));\n", value); break; } } return; case flag_add: switch (size) { case sz_byte: printf ("\toptflag_addb (%s, (uae_s8)(%s), (uae_s8)(%s));\n", value, src, dst); break; case sz_word: printf ("\toptflag_addw (%s, (uae_s16)(%s), (uae_s16)(%s));\n", value, src, dst); break; case sz_long: printf ("\toptflag_addl (%s, (uae_s32)(%s), (uae_s32)(%s));\n", value, src, dst); break; } return; case flag_sub: switch (size) { case sz_byte: printf ("\toptflag_subb (%s, (uae_s8)(%s), (uae_s8)(%s));\n", value, src, dst); break; case sz_word: printf ("\toptflag_subw (%s, (uae_s16)(%s), (uae_s16)(%s));\n", value, src, dst); break; case sz_long: printf ("\toptflag_subl (%s, (uae_s32)(%s), (uae_s32)(%s));\n", value, src, dst); break; } return; case flag_cmp: switch (size) { case sz_byte: printf ("\toptflag_cmpb ((uae_s8)(%s), (uae_s8)(%s));\n", src, dst); break; case sz_word: printf ("\toptflag_cmpw ((uae_s16)(%s), (uae_s16)(%s));\n", src, dst); break; case sz_long: printf ("\toptflag_cmpl ((uae_s32)(%s), (uae_s32)(%s));\n", src, dst); break; } return; default: break; } #endif genflags_normal (type, size, value, src, dst); } static void force_range_for_rox (const char *var, wordsizes size) { /* Could do a modulo operation here... which one is faster? */ switch (size) { case sz_long: printf ("\tif (%s >= 33) %s -= 33;\n", var, var); break; case sz_word: printf ("\tif (%s >= 34) %s -= 34;\n", var, var); printf ("\tif (%s >= 17) %s -= 17;\n", var, var); break; case sz_byte: printf ("\tif (%s >= 36) %s -= 36;\n", var, var); printf ("\tif (%s >= 18) %s -= 18;\n", var, var); printf ("\tif (%s >= 9) %s -= 9;\n", var, var); break; } } static const char *cmask (wordsizes size) { switch (size) { case sz_byte: return "0x80"; case sz_word: return "0x8000"; case sz_long: return "0x80000000"; default: abort (); } } static int source_is_imm1_8 (struct instr *i) { return i->stype == 3; } static void gen_opcode (unsigned long int opcode) { struct instr *curi = table68k + opcode; switch (curi->plev) { case 0: /* not privileged */ break; case 1: /* unprivileged only on 68000 */ if (cpu_level == 0) break; if (next_cpu_level < 0) next_cpu_level = 0; /* fall through */ case 2: case 3: return; } m68k_pc_offset = 2; start_brace (); switch (curi->mnemo) { case i_OR: case i_AND: case i_EOR: genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); genamode (curi->dmode, "dstreg", curi->size, "dst", 1, 0); printf ("\tsrc %c= dst;\n", curi->mnemo == i_OR ? '|' : curi->mnemo == i_AND ? '&' : '^'); genflags (flag_logical, curi->size, "src", "", ""); genastore ("src", curi->dmode, "dstreg", curi->size, "dst"); break; case i_SUB: genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); genamode (curi->dmode, "dstreg", curi->size, "dst", 1, 0); start_brace (); genflags (flag_sub, curi->size, "newv", "src", "dst"); genastore ("newv", curi->dmode, "dstreg", curi->size, "dst"); break; case i_SUBA: genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); genamode (curi->dmode, "dstreg", sz_long, "dst", 1, 0); start_brace (); printf ("\tuae_u32 newv = dst - src;\n"); genastore ("newv", curi->dmode, "dstreg", sz_long, "dst"); break; case i_SUBX: genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); genamode (curi->dmode, "dstreg", curi->size, "dst", 1, 0); start_brace (); printf ("\tuae_u32 newv = dst - src - (XGET_XFLG ? 1 : 0);\n"); genflags (flag_subx, curi->size, "newv", "src", "dst"); genflags (flag_zn, curi->size, "newv", "", ""); genastore ("newv", curi->dmode, "dstreg", curi->size, "dst"); break; case i_SBCD: genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); genamode (curi->dmode, "dstreg", curi->size, "dst", 1, 0); start_brace (); printf ("\tuae_u16 newv_lo = (dst & 0xF) - (src & 0xF) - (XGET_XFLG ? 1 : 0);\n"); printf ("\tuae_u16 newv_hi = (dst & 0xF0) - (src & 0xF0);\n"); printf ("\tuae_u16 newv, tmp_newv;\n"); printf ("\tint bcd = 0;\n"); printf ("\tnewv = tmp_newv = newv_hi + newv_lo;\n"); printf ("\tif (newv_lo & 0xF0) { newv -= 6; bcd = 6; };\n"); printf ("\tif ((((dst & 0xFF) - (src & 0xFF) - (XGET_XFLG ? 1 : 0)) & 0x100) > 0xFF) { newv -= 0x60; }\n"); printf ("\tXSET_CFLG ((((dst & 0xFF) - (src & 0xFF) - bcd - (XGET_XFLG ? 1 : 0)) & 0x300) > 0xFF);\n"); duplicate_carry (); genflags (flag_zn, curi->size, "newv", "", ""); printf ("\tXSET_VFLG ((tmp_newv & 0x80) != 0 && (newv & 0x80) == 0);\n"); genastore ("newv", curi->dmode, "dstreg", curi->size, "dst"); break; case i_ADD: genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); genamode (curi->dmode, "dstreg", curi->size, "dst", 1, 0); start_brace (); genflags (flag_add, curi->size, "newv", "src", "dst"); genastore ("newv", curi->dmode, "dstreg", curi->size, "dst"); break; case i_ADDA: genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); genamode (curi->dmode, "dstreg", sz_long, "dst", 1, 0); start_brace (); printf ("\tuae_u32 newv = dst + src;\n"); genastore ("newv", curi->dmode, "dstreg", sz_long, "dst"); break; case i_ADDX: genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); genamode (curi->dmode, "dstreg", curi->size, "dst", 1, 0); start_brace (); printf ("\tuae_u32 newv = dst + src + (XGET_XFLG ? 1 : 0);\n"); genflags (flag_addx, curi->size, "newv", "src", "dst"); genflags (flag_zn, curi->size, "newv", "", ""); genastore ("newv", curi->dmode, "dstreg", curi->size, "dst"); break; case i_ABCD: genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); genamode (curi->dmode, "dstreg", curi->size, "dst", 1, 0); start_brace (); printf ("\tuae_u16 newv_lo = (src & 0xF) + (dst & 0xF) + (XGET_XFLG ? 1 : 0);\n"); printf ("\tuae_u16 newv_hi = (src & 0xF0) + (dst & 0xF0);\n"); printf ("\tuae_u16 newv, tmp_newv;\n"); printf ("\tint cflg;\n"); printf ("\tnewv = tmp_newv = newv_hi + newv_lo;"); printf ("\tif (newv_lo > 9) { newv += 6; }\n"); printf ("\tcflg = (newv & 0x3F0) > 0x90;\n"); printf ("\tif (cflg) newv += 0x60;\n"); printf ("\tXSET_CFLG (cflg);\n"); duplicate_carry (); genflags (flag_zn, curi->size, "newv", "", ""); printf ("\tXSET_VFLG ((tmp_newv & 0x80) == 0 && (newv & 0x80) != 0);\n"); genastore ("newv", curi->dmode, "dstreg", curi->size, "dst"); break; case i_NEG: genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); start_brace (); genflags (flag_sub, curi->size, "dst", "src", "0"); genastore ("dst", curi->smode, "srcreg", curi->size, "src"); break; case i_NEGX: genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); start_brace (); printf ("\tuae_u32 newv = 0 - src - (XGET_XFLG ? 1 : 0);\n"); genflags (flag_subx, curi->size, "newv", "src", "0"); genflags (flag_zn, curi->size, "newv", "", ""); genastore ("newv", curi->smode, "srcreg", curi->size, "src"); break; case i_NBCD: genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); start_brace (); printf ("\tuae_u16 newv_lo = - (src & 0xF) - (XGET_XFLG ? 1 : 0);\n"); printf ("\tuae_u16 newv_hi = - (src & 0xF0);\n"); printf ("\tuae_u16 newv;\n"); printf ("\tint cflg;\n"); printf ("\tif (newv_lo > 9) { newv_lo -= 6; }\n"); printf ("\tnewv = newv_hi + newv_lo;"); printf ("\tcflg = (newv & 0x1F0) > 0x90;\n"); printf ("\tif (cflg) newv -= 0x60;\n"); printf ("\tXSET_CFLG (cflg);\n"); duplicate_carry(); genflags (flag_zn, curi->size, "newv", "", ""); genastore ("newv", curi->smode, "srcreg", curi->size, "src"); break; case i_CLR: genamode (curi->smode, "srcreg", curi->size, "src", 2, 0); genflags (flag_logical, curi->size, "0", "", ""); genastore ("0", curi->smode, "srcreg", curi->size, "src"); break; case i_NOT: genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); start_brace (); printf ("\tuae_u32 dst = ~src;\n"); genflags (flag_logical, curi->size, "dst", "", ""); genastore ("dst", curi->smode, "srcreg", curi->size, "src"); break; case i_TST: genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); genflags (flag_logical, curi->size, "src", "", ""); break; case i_BTST: genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); genamode (curi->dmode, "dstreg", curi->size, "dst", 1, 0); if (curi->size == sz_byte) printf ("\tsrc &= 7;\n"); else printf ("\tsrc &= 31;\n"); printf ("\tXSET_ZFLG (1 ^ ((dst >> src) & 1));\n"); break; case i_BCHG: genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); genamode (curi->dmode, "dstreg", curi->size, "dst", 1, 0); if (curi->size == sz_byte) printf ("\tsrc &= 7;\n"); else printf ("\tsrc &= 31;\n"); printf ("\tdst ^= (1 << src);\n"); printf ("\tXSET_ZFLG (((uae_u32)dst & (1 << src)) >> src);\n"); genastore ("dst", curi->dmode, "dstreg", curi->size, "dst"); break; case i_BCLR: genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); genamode (curi->dmode, "dstreg", curi->size, "dst", 1, 0); if (curi->size == sz_byte) printf ("\tsrc &= 7;\n"); else printf ("\tsrc &= 31;\n"); printf ("\tXSET_ZFLG (1 ^ ((dst >> src) & 1));\n"); printf ("\tdst &= ~(1 << src);\n"); genastore ("dst", curi->dmode, "dstreg", curi->size, "dst"); break; case i_BSET: genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); genamode (curi->dmode, "dstreg", curi->size, "dst", 1, 0); if (curi->size == sz_byte) printf ("\tsrc &= 7;\n"); else printf ("\tsrc &= 31;\n"); printf ("\tXSET_ZFLG (1 ^ ((dst >> src) & 1));\n"); printf ("\tdst |= (1 << src);\n"); genastore ("dst", curi->dmode, "dstreg", curi->size, "dst"); break; case i_CMPM: case i_CMP: genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); genamode (curi->dmode, "dstreg", curi->size, "dst", 1, 0); start_brace (); genflags (flag_cmp, curi->size, "newv", "src", "dst"); break; case i_CMPA: genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); genamode (curi->dmode, "dstreg", sz_long, "dst", 1, 0); start_brace (); genflags (flag_cmp, sz_long, "newv", "src", "dst"); break; /* The next two are coded a little unconventional, but they are doing * weird things... */ case i_MVPRM: genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); printf ("\tuaecptr memp = xm68k_areg (dstreg) + (uae_s32)(uae_s16)%s;\n", gen_nextiword ()); if (curi->size == sz_word) { printf ("\txput_byte (memp, src >> 8); xput_byte (memp + 2, src);\n"); } else { printf ("\txput_byte (memp, src >> 24); xput_byte (memp + 2, src >> 16);\n"); printf ("\txput_byte (memp + 4, src >> 8); xput_byte (memp + 6, src);\n"); } break; case i_MVPMR: printf ("\tuaecptr memp = xm68k_areg (srcreg) + (uae_s32)(uae_s16)%s;\n", gen_nextiword ()); genamode (curi->dmode, "dstreg", curi->size, "dst", 2, 0); if (curi->size == sz_word) { printf ("\tuae_u16 val = (xget_byte (memp) << 8) + xget_byte (memp + 2);\n"); } else { printf ("\tuae_u32 val = (xget_byte (memp) << 24) + (xget_byte (memp + 2) << 16)\n"); printf (" + (xget_byte (memp + 4) << 8) + xget_byte (memp + 6);\n"); } genastore ("val", curi->dmode, "dstreg", curi->size, "dst"); break; case i_MOVE: genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); genamode (curi->dmode, "dstreg", curi->size, "dst", 2, 0); genflags (flag_logical, curi->size, "src", "", ""); genastore ("src", curi->dmode, "dstreg", curi->size, "dst"); break; case i_MOVEA: genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); genamode (curi->dmode, "dstreg", curi->size, "dst", 2, 0); if (curi->size == sz_word) { printf ("\tuae_u32 val = (uae_s32)(uae_s16)src;\n"); } else { printf ("\tuae_u32 val = src;\n"); } genastore ("val", curi->dmode, "dstreg", sz_long, "dst"); break; case i_SWAP: genamode (curi->smode, "srcreg", sz_long, "src", 1, 0); start_brace (); printf ("\tuae_u32 dst = ((src >> 16)&0xFFFF) | ((src&0xFFFF)<<16);\n"); genflags (flag_logical, sz_long, "dst", "", ""); genastore ("dst", curi->smode, "srcreg", sz_long, "src"); break; case i_EXG: genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); genamode (curi->dmode, "dstreg", curi->size, "dst", 1, 0); genastore ("dst", curi->smode, "srcreg", curi->size, "src"); genastore ("src", curi->dmode, "dstreg", curi->size, "dst"); break; case i_EXT: genamode (curi->smode, "srcreg", sz_long, "src", 1, 0); start_brace (); switch (curi->size) { case sz_byte: printf ("\tuae_u32 dst = (uae_s32)(uae_s8)src;\n"); break; case sz_word: printf ("\tuae_u16 dst = (uae_s16)(uae_s8)src;\n"); break; case sz_long: printf ("\tuae_u32 dst = (uae_s32)(uae_s16)src;\n"); break; default: abort (); } genflags (flag_logical, curi->size == sz_word ? sz_word : sz_long, "dst", "", ""); genastore ("dst", curi->smode, "srcreg", curi->size == sz_word ? sz_word : sz_long, "src"); break; case i_MVMEL: genmovemel (opcode); break; case i_MVMLE: genmovemle (opcode); break; case i_NOP: break; case i_LINK: genamode (Apdi, "7", sz_long, "old", 2, 0); genamode (curi->smode, "srcreg", sz_long, "src", 1, 0); genastore ("src", Apdi, "7", sz_long, "old"); genastore ("xm68k_areg (7)", curi->smode, "srcreg", sz_long, "src"); genamode (curi->dmode, "dstreg", curi->size, "offs", 1, 0); printf ("\txm68k_areg (7) += offs;\n"); break; case i_UNLK: genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); printf ("\txm68k_areg (7) = src;\n"); genamode (Aipi, "7", sz_long, "old", 1, 0); genastore ("old", curi->smode, "srcreg", curi->size, "src"); break; case i_RTS: printf ("\txm68k_setpc (xget_long (xm68k_areg (7)));\n"); printf ("\txm68k_areg (7) += 4;\n"); m68k_pc_offset = 0; break; case i_JSR: genamode (curi->smode, "srcreg", curi->size, "src", 0, 0); printf ("\txm68k_areg (7) -= 4;\n"); printf ("\txput_long (xm68k_areg (7), xm68k_getpc () + %d);\n", m68k_pc_offset); printf ("\txm68k_setpc (srca);\n"); m68k_pc_offset = 0; break; case i_JMP: genamode (curi->smode, "srcreg", curi->size, "src", 0, 0); printf ("\txm68k_setpc (srca);\n"); m68k_pc_offset = 0; break; case i_BSR: genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); printf ("\tuae_s32 s = (uae_s32)src + 2;\n"); printf ("\txm68k_areg (7) -= 4;\n"); printf ("\txput_long (xm68k_areg (7), xm68k_getpc () + %d);\n", m68k_pc_offset); printf ("\txm68k_incpc(s);\n"); m68k_pc_offset = 0; break; case i_Bcc: if (curi->size == sz_long) { if (next_cpu_level < 1) next_cpu_level = 1; } genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); printf ("\tif (!xcctrue(%d)) goto didnt_jump;\n", curi->cc); printf ("\txm68k_incpc ((uae_s32)src + 2);\n"); printf ("\treturn;\n"); printf ("didnt_jump:;\n"); need_endlabel = 1; break; case i_LEA: genamode (curi->smode, "srcreg", curi->size, "src", 0, 0); genamode (curi->dmode, "dstreg", curi->size, "dst", 2, 0); genastore ("srca", curi->dmode, "dstreg", curi->size, "dst"); break; case i_PEA: genamode (curi->smode, "srcreg", curi->size, "src", 0, 0); genamode (Apdi, "7", sz_long, "dst", 2, 0); genastore ("srca", Apdi, "7", sz_long, "dst"); break; case i_DBcc: genamode (curi->smode, "srcreg", curi->size, "src", 1, 0); genamode (curi->dmode, "dstreg", curi->size, "offs", 1, 0); printf ("\tif (!xcctrue(%d)) {\n", curi->cc); genastore ("(src-1)", curi->smode, "srcreg", curi->size, "src"); printf ("\t\tif (src) {\n"); printf ("\t\t\txm68k_incpc((uae_s32)offs + 2);\n"); printf ("\t\t}\n"); printf ("\t}\n"); need_endlabel = 1; break; case i_Scc: genamode (curi->smode, "srcreg", curi->size, "src", 2, 0); start_brace (); printf ("\tint val = xcctrue(%d) ? 0xff : 0;\n", curi->cc); genastore ("val", curi->smode, "srcreg", curi->size, "src"); break; case i_DIVU: printf ("\tuaecptr oldpc = xm68k_getpc ();\n"); genamode (curi->smode, "srcreg", sz_word, "src", 1, 0); genamode (curi->dmode, "dstreg", sz_long, "dst", 1, 0); sync_m68k_pc (); start_brace (); /* Clear V flag when dividing by zero - Alcatraz Odyssey demo depends * on this (actually, it's doing a DIVS). */ printf ("\tuae_u32 newv = (uae_u32)dst / (uae_u32)(uae_u16)src;\n"); printf ("\tuae_u32 rem = (uae_u32)dst %% (uae_u32)(uae_u16)src;\n"); /* The N flag appears to be set each time there is an overflow. * Weird. */ printf ("\tif (newv > 0xffff) { XSET_VFLG (1); XSET_NFLG (1); XSET_CFLG (0); } else\n\t{\n"); genflags (flag_logical, sz_word, "newv", "", ""); printf ("\tnewv = (newv & 0xffff) | ((uae_u32)rem << 16);\n"); genastore ("newv", curi->dmode, "dstreg", sz_long, "dst"); printf ("\t}\n"); need_endlabel = 1; break; case i_DIVS: printf ("\tuaecptr oldpc = xm68k_getpc ();\n"); genamode (curi->smode, "srcreg", sz_word, "src", 1, 0); genamode (curi->dmode, "dstreg", sz_long, "dst", 1, 0); sync_m68k_pc (); start_brace (); printf ("\tuae_s32 newv = (uae_s32)dst / (uae_s32)(uae_s16)src;\n"); printf ("\tuae_u16 rem = (uae_s32)dst %% (uae_s32)(uae_s16)src;\n"); printf ("\tif ((newv & 0xffff8000) != 0 && (newv & 0xffff8000) != 0xffff8000) { XSET_VFLG (1); XSET_NFLG (1); XSET_CFLG (0); } else\n\t{\n"); printf ("\tif (((uae_s16)rem < 0) != ((uae_s32)dst < 0)) rem = -rem;\n"); genflags (flag_logical, sz_word, "newv", "", ""); printf ("\tnewv = (newv & 0xffff) | ((uae_u32)rem << 16);\n"); genastore ("newv", curi->dmode, "dstreg", sz_long, "dst"); printf ("\t}\n"); need_endlabel = 1; break; case i_MULU: genamode (curi->smode, "srcreg", sz_word, "src", 1, 0); genamode (curi->dmode, "dstreg", sz_word, "dst", 1, 0); start_brace (); printf ("\tuae_u32 newv = (uae_u32)(uae_u16)dst * (uae_u32)(uae_u16)src;\n"); genflags (flag_logical, sz_long, "newv", "", ""); genastore ("newv", curi->dmode, "dstreg", sz_long, "dst"); break; case i_MULS: genamode (curi->smode, "srcreg", sz_word, "src", 1, 0); genamode (curi->dmode, "dstreg", sz_word, "dst", 1, 0); start_brace (); printf ("\tuae_u32 newv = (uae_s32)(uae_s16)dst * (uae_s32)(uae_s16)src;\n"); genflags (flag_logical, sz_long, "newv", "", ""); genastore ("newv", curi->dmode, "dstreg", sz_long, "dst"); break; case i_ASR: genamode (curi->smode, "srcreg", curi->size, "cnt", 1, 0); genamode (curi->dmode, "dstreg", curi->size, "data", 1, 0); start_brace (); switch (curi->size) { case sz_byte: printf ("\tuae_u32 val = (uae_u8)data;\n"); break; case sz_word: printf ("\tuae_u32 val = (uae_u16)data;\n"); break; case sz_long: printf ("\tuae_u32 val = data;\n"); break; default: abort (); } printf ("\tuae_u32 sign = (%s & val) >> %d;\n", cmask (curi->size), bit_size (curi->size) - 1); printf ("\tcnt &= 63;\n"); printf ("\tXCLEAR_CZNV;\n"); printf ("\tif (cnt >= %d) {\n", bit_size (curi->size)); printf ("\t\tval = %s & (uae_u32)-sign;\n", bit_mask (curi->size)); printf ("\t\tXSET_CFLG (sign);\n"); duplicate_carry (); if (source_is_imm1_8 (curi)) printf ("\t} else {\n"); else printf ("\t} else if (cnt > 0) {\n"); printf ("\t\tval >>= cnt - 1;\n"); printf ("\t\tXSET_CFLG (val & 1);\n"); duplicate_carry (); printf ("\t\tval >>= 1;\n"); printf ("\t\tval |= (%s << (%d - cnt)) & (uae_u32)-sign;\n", bit_mask (curi->size), bit_size (curi->size)); printf ("\t\tval &= %s;\n", bit_mask (curi->size)); printf ("\t}\n"); genflags (flag_logical_noclobber, curi->size, "val", "", ""); genastore ("val", curi->dmode, "dstreg", curi->size, "data"); break; case i_ASL: genamode (curi->smode, "srcreg", curi->size, "cnt", 1, 0); genamode (curi->dmode, "dstreg", curi->size, "data", 1, 0); start_brace (); switch (curi->size) { case sz_byte: printf ("\tuae_u32 val = (uae_u8)data;\n"); break; case sz_word: printf ("\tuae_u32 val = (uae_u16)data;\n"); break; case sz_long: printf ("\tuae_u32 val = data;\n"); break; default: abort (); } printf ("\tcnt &= 63;\n"); printf ("\tXCLEAR_CZNV;\n"); printf ("\tif (cnt >= %d) {\n", bit_size (curi->size)); printf ("\t\tXSET_VFLG (val != 0);\n"); printf ("\t\tXSET_CFLG (cnt == %d ? val & 1 : 0);\n", bit_size (curi->size)); duplicate_carry (); printf ("\t\tval = 0;\n"); if (source_is_imm1_8 (curi)) printf ("\t} else {\n"); else printf ("\t} else if (cnt > 0) {\n"); printf ("\t\tuae_u32 mask = (%s << (%d - cnt)) & %s;\n", bit_mask (curi->size), bit_size (curi->size) - 1, bit_mask (curi->size)); printf ("\t\tXSET_VFLG ((val & mask) != mask && (val & mask) != 0);\n"); printf ("\t\tval <<= cnt - 1;\n"); printf ("\t\tXSET_CFLG ((val & %s) >> %d);\n", cmask (curi->size), bit_size (curi->size) - 1); duplicate_carry (); printf ("\t\tval <<= 1;\n"); printf ("\t\tval &= %s;\n", bit_mask (curi->size)); printf ("\t}\n"); genflags (flag_logical_noclobber, curi->size, "val", "", ""); genastore ("val", curi->dmode, "dstreg", curi->size, "data"); break; case i_LSR: genamode (curi->smode, "srcreg", curi->size, "cnt", 1, 0); genamode (curi->dmode, "dstreg", curi->size, "data", 1, 0); start_brace (); switch (curi->size) { case sz_byte: printf ("\tuae_u32 val = (uae_u8)data;\n"); break; case sz_word: printf ("\tuae_u32 val = (uae_u16)data;\n"); break; case sz_long: printf ("\tuae_u32 val = data;\n"); break; default: abort (); } printf ("\tcnt &= 63;\n"); printf ("\tXCLEAR_CZNV;\n"); printf ("\tif (cnt >= %d) {\n", bit_size (curi->size)); printf ("\t\tXSET_CFLG ((cnt == %d) & (val >> %d));\n", bit_size (curi->size), bit_size (curi->size) - 1); duplicate_carry (); printf ("\t\tval = 0;\n"); if (source_is_imm1_8 (curi)) printf ("\t} else {\n"); else printf ("\t} else if (cnt > 0) {\n"); printf ("\t\tval >>= cnt - 1;\n"); printf ("\t\tXSET_CFLG (val & 1);\n"); duplicate_carry (); printf ("\t\tval >>= 1;\n"); printf ("\t}\n"); genflags (flag_logical_noclobber, curi->size, "val", "", ""); genastore ("val", curi->dmode, "dstreg", curi->size, "data"); break; case i_LSL: genamode (curi->smode, "srcreg", curi->size, "cnt", 1, 0); genamode (curi->dmode, "dstreg", curi->size, "data", 1, 0); start_brace (); switch (curi->size) { case sz_byte: printf ("\tuae_u32 val = (uae_u8)data;\n"); break; case sz_word: printf ("\tuae_u32 val = (uae_u16)data;\n"); break; case sz_long: printf ("\tuae_u32 val = data;\n"); break; default: abort (); } printf ("\tcnt &= 63;\n"); printf ("\tXCLEAR_CZNV;\n"); printf ("\tif (cnt >= %d) {\n", bit_size (curi->size)); printf ("\t\tXSET_CFLG (cnt == %d ? val & 1 : 0);\n", bit_size (curi->size)); duplicate_carry (); printf ("\t\tval = 0;\n"); if (source_is_imm1_8 (curi)) printf ("\t} else {\n"); else printf ("\t} else if (cnt > 0) {\n"); printf ("\t\tval <<= (cnt - 1);\n"); printf ("\t\tXSET_CFLG ((val & %s) >> %d);\n", cmask (curi->size), bit_size (curi->size) - 1); duplicate_carry (); printf ("\t\tval <<= 1;\n"); printf ("\tval &= %s;\n", bit_mask (curi->size)); printf ("\t}\n"); genflags (flag_logical_noclobber, curi->size, "val", "", ""); genastore ("val", curi->dmode, "dstreg", curi->size, "data"); break; case i_ROL: genamode (curi->smode, "srcreg", curi->size, "cnt", 1, 0); genamode (curi->dmode, "dstreg", curi->size, "data", 1, 0); start_brace (); switch (curi->size) { case sz_byte: printf ("\tuae_u32 val = (uae_u8)data;\n"); break; case sz_word: printf ("\tuae_u32 val = (uae_u16)data;\n"); break; case sz_long: printf ("\tuae_u32 val = data;\n"); break; default: abort (); } printf ("\tcnt &= 63;\n"); printf ("\tXCLEAR_CZNV;\n"); if (source_is_imm1_8 (curi)) printf ("{"); else printf ("\tif (cnt > 0) {\n"); printf ("\tuae_u32 loval;\n"); printf ("\tcnt &= %d;\n", bit_size (curi->size) - 1); printf ("\tloval = val >> (%d - cnt);\n", bit_size (curi->size)); printf ("\tval <<= cnt;\n"); printf ("\tval |= loval;\n"); printf ("\tval &= %s;\n", bit_mask (curi->size)); printf ("\tXSET_CFLG (val & 1);\n"); printf ("}\n"); genflags (flag_logical_noclobber, curi->size, "val", "", ""); genastore ("val", curi->dmode, "dstreg", curi->size, "data"); break; case i_ROR: genamode (curi->smode, "srcreg", curi->size, "cnt", 1, 0); genamode (curi->dmode, "dstreg", curi->size, "data", 1, 0); start_brace (); switch (curi->size) { case sz_byte: printf ("\tuae_u32 val = (uae_u8)data;\n"); break; case sz_word: printf ("\tuae_u32 val = (uae_u16)data;\n"); break; case sz_long: printf ("\tuae_u32 val = data;\n"); break; default: abort (); } printf ("\tcnt &= 63;\n"); printf ("\tXCLEAR_CZNV;\n"); if (source_is_imm1_8 (curi)) printf ("{"); else printf ("\tif (cnt > 0) {"); printf ("\tuae_u32 hival;\n"); printf ("\tcnt &= %d;\n", bit_size (curi->size) - 1); printf ("\thival = val << (%d - cnt);\n", bit_size (curi->size)); printf ("\tval >>= cnt;\n"); printf ("\tval |= hival;\n"); printf ("\tval &= %s;\n", bit_mask (curi->size)); printf ("\tXSET_CFLG ((val & %s) >> %d);\n", cmask (curi->size), bit_size (curi->size) - 1); printf ("\t}\n"); genflags (flag_logical_noclobber, curi->size, "val", "", ""); genastore ("val", curi->dmode, "dstreg", curi->size, "data"); break; case i_ROXL: genamode (curi->smode, "srcreg", curi->size, "cnt", 1, 0); genamode (curi->dmode, "dstreg", curi->size, "data", 1, 0); start_brace (); switch (curi->size) { case sz_byte: printf ("\tuae_u32 val = (uae_u8)data;\n"); break; case sz_word: printf ("\tuae_u32 val = (uae_u16)data;\n"); break; case sz_long: printf ("\tuae_u32 val = data;\n"); break; default: abort (); } printf ("\tcnt &= 63;\n"); printf ("\tXCLEAR_CZNV;\n"); if (source_is_imm1_8 (curi)) printf ("{"); else { force_range_for_rox ("cnt", curi->size); printf ("\tif (cnt > 0) {\n"); } printf ("\tcnt--;\n"); printf ("\t{\n\tuae_u32 carry;\n"); printf ("\tuae_u32 loval = val >> (%d - cnt);\n", bit_size (curi->size) - 1); printf ("\tcarry = loval & 1;\n"); printf ("\tval = (((val << 1) | XGET_XFLG) << cnt) | (loval >> 1);\n"); printf ("\tXSET_XFLG (carry);\n"); printf ("\tval &= %s;\n", bit_mask (curi->size)); printf ("\t} }\n"); printf ("\tXSET_CFLG (XGET_XFLG);\n"); genflags (flag_logical_noclobber, curi->size, "val", "", ""); genastore ("val", curi->dmode, "dstreg", curi->size, "data"); break; case i_ROXR: genamode (curi->smode, "srcreg", curi->size, "cnt", 1, 0); genamode (curi->dmode, "dstreg", curi->size, "data", 1, 0); start_brace (); switch (curi->size) { case sz_byte: printf ("\tuae_u32 val = (uae_u8)data;\n"); break; case sz_word: printf ("\tuae_u32 val = (uae_u16)data;\n"); break; case sz_long: printf ("\tuae_u32 val = data;\n"); break; default: abort (); } printf ("\tcnt &= 63;\n"); printf ("\tXCLEAR_CZNV;\n"); if (source_is_imm1_8 (curi)) printf ("{"); else { force_range_for_rox ("cnt", curi->size); printf ("\tif (cnt > 0) {\n"); } printf ("\tcnt--;\n"); printf ("\t{\n\tuae_u32 carry;\n"); printf ("\tuae_u32 hival = (val << 1) | XGET_XFLG;\n"); printf ("\thival <<= (%d - cnt);\n", bit_size (curi->size) - 1); printf ("\tval >>= cnt;\n"); printf ("\tcarry = val & 1;\n"); printf ("\tval >>= 1;\n"); printf ("\tval |= hival;\n"); printf ("\tXSET_XFLG (carry);\n"); printf ("\tval &= %s;\n", bit_mask (curi->size)); printf ("\t} }\n"); printf ("\tXSET_CFLG (XGET_XFLG);\n"); genflags (flag_logical_noclobber, curi->size, "val", "", ""); genastore ("val", curi->dmode, "dstreg", curi->size, "data"); break; case i_ASRW: genamode (curi->smode, "srcreg", curi->size, "data", 1, 0); start_brace (); switch (curi->size) { case sz_byte: printf ("\tuae_u32 val = (uae_u8)data;\n"); break; case sz_word: printf ("\tuae_u32 val = (uae_u16)data;\n"); break; case sz_long: printf ("\tuae_u32 val = data;\n"); break; default: abort (); } printf ("\tuae_u32 sign = %s & val;\n", cmask (curi->size)); printf ("\tuae_u32 cflg = val & 1;\n"); printf ("\tval = (val >> 1) | sign;\n"); genflags (flag_logical, curi->size, "val", "", ""); printf ("\tXSET_CFLG (cflg);\n"); duplicate_carry (); genastore ("val", curi->smode, "srcreg", curi->size, "data"); break; case i_ASLW: genamode (curi->smode, "srcreg", curi->size, "data", 1, 0); start_brace (); switch (curi->size) { case sz_byte: printf ("\tuae_u32 val = (uae_u8)data;\n"); break; case sz_word: printf ("\tuae_u32 val = (uae_u16)data;\n"); break; case sz_long: printf ("\tuae_u32 val = data;\n"); break; default: abort (); } printf ("\tuae_u32 sign = %s & val;\n", cmask (curi->size)); printf ("\tuae_u32 sign2;\n"); printf ("\tval <<= 1;\n"); genflags (flag_logical, curi->size, "val", "", ""); printf ("\tsign2 = %s & val;\n", cmask (curi->size)); printf ("\tXSET_CFLG (sign != 0);\n"); duplicate_carry (); printf ("\tXSET_VFLG (XGET_VFLG | (sign2 != sign));\n"); genastore ("val", curi->smode, "srcreg", curi->size, "data"); break; case i_LSRW: genamode (curi->smode, "srcreg", curi->size, "data", 1, 0); start_brace (); switch (curi->size) { case sz_byte: printf ("\tuae_u32 val = (uae_u8)data;\n"); break; case sz_word: printf ("\tuae_u32 val = (uae_u16)data;\n"); break; case sz_long: printf ("\tuae_u32 val = data;\n"); break; default: abort (); } printf ("\tuae_u32 carry = val & 1;\n"); printf ("\tval >>= 1;\n"); genflags (flag_logical, curi->size, "val", "", ""); printf ("XSET_CFLG (carry);\n"); duplicate_carry (); genastore ("val", curi->smode, "srcreg", curi->size, "data"); break; case i_LSLW: genamode (curi->smode, "srcreg", curi->size, "data", 1, 0); start_brace (); switch (curi->size) { case sz_byte: printf ("\tuae_u8 val = data;\n"); break; case sz_word: printf ("\tuae_u16 val = data;\n"); break; case sz_long: printf ("\tuae_u32 val = data;\n"); break; default: abort (); } printf ("\tuae_u32 carry = val & %s;\n", cmask (curi->size)); printf ("\tval <<= 1;\n"); genflags (flag_logical, curi->size, "val", "", ""); printf ("XSET_CFLG (carry >> %d);\n", bit_size (curi->size) - 1); duplicate_carry (); genastore ("val", curi->smode, "srcreg", curi->size, "data"); break; case i_ROLW: genamode (curi->smode, "srcreg", curi->size, "data", 1, 0); start_brace (); switch (curi->size) { case sz_byte: printf ("\tuae_u8 val = data;\n"); break; case sz_word: printf ("\tuae_u16 val = data;\n"); break; case sz_long: printf ("\tuae_u32 val = data;\n"); break; default: abort (); } printf ("\tuae_u32 carry = val & %s;\n", cmask (curi->size)); printf ("\tval <<= 1;\n"); printf ("\tif (carry) val |= 1;\n"); genflags (flag_logical, curi->size, "val", "", ""); printf ("XSET_CFLG (carry >> %d);\n", bit_size (curi->size) - 1); genastore ("val", curi->smode, "srcreg", curi->size, "data"); break; case i_RORW: genamode (curi->smode, "srcreg", curi->size, "data", 1, 0); start_brace (); switch (curi->size) { case sz_byte: printf ("\tuae_u8 val = data;\n"); break; case sz_word: printf ("\tuae_u16 val = data;\n"); break; case sz_long: printf ("\tuae_u32 val = data;\n"); break; default: abort (); } printf ("\tuae_u32 carry = val & 1;\n"); printf ("\tval >>= 1;\n"); printf ("\tif (carry) val |= %s;\n", cmask (curi->size)); genflags (flag_logical, curi->size, "val", "", ""); printf ("XSET_CFLG (carry);\n"); genastore ("val", curi->smode, "srcreg", curi->size, "data"); break; case i_ROXLW: genamode (curi->smode, "srcreg", curi->size, "data", 1, 0); start_brace (); switch (curi->size) { case sz_byte: printf ("\tuae_u8 val = data;\n"); break; case sz_word: printf ("\tuae_u16 val = data;\n"); break; case sz_long: printf ("\tuae_u32 val = data;\n"); break; default: abort (); } printf ("\tuae_u32 carry = val & %s;\n", cmask (curi->size)); printf ("\tval <<= 1;\n"); printf ("\tif (XGET_XFLG) val |= 1;\n"); genflags (flag_logical, curi->size, "val", "", ""); printf ("XSET_CFLG (carry >> %d);\n", bit_size (curi->size) - 1); duplicate_carry (); genastore ("val", curi->smode, "srcreg", curi->size, "data"); break; case i_ROXRW: genamode (curi->smode, "srcreg", curi->size, "data", 1, 0); start_brace (); switch (curi->size) { case sz_byte: printf ("\tuae_u8 val = data;\n"); break; case sz_word: printf ("\tuae_u16 val = data;\n"); break; case sz_long: printf ("\tuae_u32 val = data;\n"); break; default: abort (); } printf ("\tuae_u32 carry = val & 1;\n"); printf ("\tval >>= 1;\n"); printf ("\tif (XGET_XFLG) val |= %s;\n", cmask (curi->size)); genflags (flag_logical, curi->size, "val", "", ""); printf ("XSET_CFLG (carry);\n"); duplicate_carry (); genastore ("val", curi->smode, "srcreg", curi->size, "data"); break; default: m68k_pc_offset = 0; break; } finish_braces (); sync_m68k_pc (); } static int postfix; static void generate_one_opcode (int rp) { int i; uae_u16 smsk, dmsk; long int opcode = opcode_map[rp]; if (table68k[opcode].mnemo == i_ILLG || table68k[opcode].clev > cpu_level) return; for (i = 0; lookuptab[i].name[0]; i++) { if (table68k[opcode].mnemo == lookuptab[i].mnemo) break; } if (table68k[opcode].handler != -1) return; if (opcode_next_clev[rp] != cpu_level) { fprintf (stblfile, "{ xop_%lx_%d, %ld }, /* %s */\n", opcode, opcode_last_postfix[rp], opcode, lookuptab[i].name); return; } fprintf (stblfile, "{ xop_%lx_%d, %ld }, /* %s */\n", opcode, postfix, opcode, lookuptab[i].name); fprintf (headerfile, "extern xcpuop_func xop_%lx_%d;\n", opcode, postfix); printf ("void xop_%lx_%d(uae_u32 opcode) /* %s */\n{\n", opcode, postfix, lookuptab[i].name); switch (table68k[opcode].stype) { case 0: smsk = 7; break; case 1: smsk = 255; break; case 2: smsk = 15; break; case 3: smsk = 7; break; case 4: smsk = 7; break; case 5: smsk = 63; break; case 7: smsk = 3; break; default: abort (); } dmsk = 7; next_cpu_level = -1; if (table68k[opcode].suse && table68k[opcode].smode != imm && table68k[opcode].smode != imm0 && table68k[opcode].smode != imm1 && table68k[opcode].smode != imm2 && table68k[opcode].smode != absw && table68k[opcode].smode != absl && table68k[opcode].smode != PC8r && table68k[opcode].smode != PC16) { if (table68k[opcode].spos == -1) { if (((int) table68k[opcode].sreg) >= 128) printf ("\tuae_u32 srcreg = (uae_s32)(uae_s8)%d;\n", (int) table68k[opcode].sreg); else printf ("\tuae_u32 srcreg = %d;\n", (int) table68k[opcode].sreg); } else { char source[100]; int pos = table68k[opcode].spos; if (pos) sprintf (source, "((opcode >> %d) & %d)", pos, smsk); else sprintf (source, "(opcode & %d)", smsk); if (table68k[opcode].stype == 3) printf ("\tuae_u32 srcreg = ximm8_table[%s];\n", source); else if (table68k[opcode].stype == 1) printf ("\tuae_u32 srcreg = (uae_s32)(uae_s8)%s;\n", source); else printf ("\tuae_u32 srcreg = %s;\n", source); } } if (table68k[opcode].duse /* Yes, the dmode can be imm, in case of LINK or DBcc */ && table68k[opcode].dmode != imm && table68k[opcode].dmode != imm0 && table68k[opcode].dmode != imm1 && table68k[opcode].dmode != imm2 && table68k[opcode].dmode != absw && table68k[opcode].dmode != absl) { if (table68k[opcode].dpos == -1) { if (((int) table68k[opcode].dreg) >= 128) printf ("\tuae_u32 dstreg = (uae_s32)(uae_s8)%d;\n", (int) table68k[opcode].dreg); else printf ("\tuae_u32 dstreg = %d;\n", (int) table68k[opcode].dreg); } else { int pos = table68k[opcode].dpos; #if 0 /* Check that we can do the little endian optimization safely. */ if (pos < 8 && (dmsk >> (8 - pos)) != 0) abort (); #endif if (pos) printf ("\tuae_u32 dstreg = (opcode >> %d) & %d;\n", pos, dmsk); else printf ("\tuae_u32 dstreg = opcode & %d;\n", dmsk); } } need_endlabel = 0; endlabelno++; sprintf (endlabelstr, "endlabel%d", endlabelno); gen_opcode (opcode); if (need_endlabel) printf ("%s: ;\n", endlabelstr); printf ("}\n"); opcode_next_clev[rp] = next_cpu_level; opcode_last_postfix[rp] = postfix; } static void generate_func (void) { int i, j, rp; using_prefetch = 0; using_exception_3 = 0; for (i = 0; i <= 0; i++) { cpu_level = 5; postfix = i; fprintf (stblfile, "struct xcputbl xop_smalltbl_%d[] = {\n", postfix); rp = 0; for(j=1;j<=8;++j) { int k = (j*nr_cpuop_funcs)/8; for (; rp < k; rp++) generate_one_opcode (rp); } fprintf (stblfile, "{ 0, 0 }};\n"); } } static void generate_includes (FILE * f) { fprintf (f, "#include \"cpu_small.h\"\n"); fprintf (f, "#include \"cputbl_small.h\"\n"); } int main (int argc, char **argv) { read_table68k (); do_merges (); opcode_map = (int *) xmalloc (sizeof (int) * nr_cpuop_funcs); opcode_last_postfix = (int *) xmalloc (sizeof (int) * nr_cpuop_funcs); opcode_next_clev = (int *) xmalloc (sizeof (int) * nr_cpuop_funcs); counts = (unsigned long *) xmalloc (65536 * sizeof (unsigned long)); read_counts (); /* It would be a lot nicer to put all in one file (we'd also get rid of * cputbl.h that way), but cpuopti can't cope. That could be fixed, but * I don't dare to touch the 68k version. */ headerfile = fopen ("cputbl_small.h", "wb"); stblfile = fopen ("cpustbl_small.c", "wb"); generate_includes (stblfile); freopen ("cpuemu_small.c", "wb", stdout); generate_includes (stdout); generate_func (); free (table68k); return 0; } fs-uae-2.2.3+dfsg/src/filesys.cpp0000644000175000017500000061525012162366655017037 0ustar glaubitzglaubitz/* * UAE - The Un*x Amiga Emulator * * Unix file system handler for AmigaDOS * * Copyright 1996 Ed Hanway * Copyright 1996, 1997 Bernd Schmidt * * Version 0.4: 970308 * * Based on example code (c) 1988 The Software Distillery * and published in Transactor for the Amiga, Volume 2, Issues 2-5. * (May - August 1989) * * Known limitations: * Does not support several (useless) 2.0+ packet types. * May not return the correct error code in some cases. * Does not check for sane values passed by AmigaDOS. May crash the emulation * if passed garbage values. * Could do tighter checks on malloc return values. * Will probably fail spectacularly in some cases if the filesystem is * modified at the same time by another process while UAE is running. */ #include "sysconfig.h" #include "sysdeps.h" #include "threaddep/thread.h" #include "options.h" #include "uae.h" #include "uae/memory.h" #include "custom.h" #include "events.h" #include "newcpu.h" #include "filesys.h" #include "autoconf.h" #include "traps.h" #include "fsusage.h" #include "native2amiga.h" #include "scsidev.h" #include "uaeserial.h" #include "fsdb.h" #include "zfile.h" #include "gui.h" #include "gayle.h" #include "savestate.h" #include "a2091.h" #include "cdtv.h" #include "sana2.h" #include "bsdsocket.h" #include "uaeresource.h" #include "inputdevice.h" #include "clipboard.h" #include "consolehook.h" #include "blkdev.h" #include "isofs_api.h" #ifdef RETROPLATFORM #include "rp.h" #endif #define TRACING_ENABLED 1 int log_filesys = 0; #if TRACING_ENABLED #if 0 #define TRACE(x) if (log_filesys > 0 && (unit->volflags & MYVOLUMEINFO_CDFS)) { write_log x; } #else #define TRACE(x) if (log_filesys > 0) { write_log x; } #endif #define TRACEI(x) if (log_filesys > 0) { write_log x; } #define TRACE2(x) if (log_filesys >= 2) { write_log x; } #define TRACE3(x) if (log_filesys >= 3) { write_log x; } #define DUMPLOCK(u,x) dumplock(u,x) #else #define TRACE(x) #define DUMPLOCK(u,x) #define TRACE2(x) #define TRACE3(x) #endif #ifdef FSUAE static int g_packet_delay = 0; #endif #define UNIT_LED(unit) ((unit)->ui.unit_type == UNIT_CDFS ? LED_CD : LED_HD) #define RTAREA_HEARTBEAT 0xFFFC static uae_sem_t test_sem; int bootrom_header, bootrom_items; static uae_u32 dlg (uae_u32 a) { return (dbg (a + 0) << 24) | (dbg (a + 1) << 16) | (dbg (a + 2) << 8) | (dbg (a + 3) << 0); } static void aino_test (a_inode *aino) { #ifdef AINO_DEBUG a_inode *aino2 = aino, *aino3; for (;;) { if (!aino || !aino->next) return; if ((aino->checksum1 ^ aino->checksum2) != 0xaaaa5555) { write_log (_T("PANIC: corrupted or freed but used aino detected!"), aino); } aino3 = aino; aino = aino->next; if (aino->prev != aino3) { write_log (_T("PANIC: corrupted aino linking!\n")); break; } if (aino == aino2) break; } #endif } static void aino_test_init (a_inode *aino) { #ifdef AINO_DEBUG aino->checksum1 = (uae_u32)aino; aino->checksum2 = aino->checksum1 ^ 0xaaaa5555; #endif } uaecptr filesys_initcode; static uae_u32 fsdevname, fshandlername, filesys_configdev; static uae_u32 cdfs_devname, cdfs_handlername; static int filesys_in_interrupt; static uae_u32 mountertask; static int automountunit = -1; static int cd_unit_offset, cd_unit_number; #define FS_STARTUP 0 #define FS_GO_DOWN 1 #define DEVNAMES_PER_HDF 32 #define UNIT_FILESYSTEM 0 #define UNIT_CDFS 1 typedef struct { int unit_type; bool open; TCHAR *devname; /* device name, e.g. UAE0: */ uaecptr devname_amiga; uaecptr startup; uaecptr devicenode; TCHAR *volname; /* volume name, e.g. CDROM, WORK, etc. */ int volflags; /* volume flags, readonly, stream uaefsdb support */ TCHAR *rootdir; /* root native directory/hdf. empty drive if invalid path */ struct zvolume *zarchive; TCHAR *rootdirdiff; /* "diff" file/directory */ bool readonly; /* disallow write access? */ bool locked; /* action write protect */ bool unknown_media; /* ID_UNREADABLE_DISK */ int bootpri; /* boot priority. -128 = no autoboot, -129 = no mount */ int devno; int controller; bool wasisempty; /* if true, this unit was created empty */ bool canremove; /* if true, this unit can be safely ejected and remounted */ bool configureddrive; /* if true, this is drive that was manually configured */ struct hardfiledata hf; /* Threading stuff */ smp_comm_pipe *volatile unit_pipe, *volatile back_pipe; uae_thread_id tid; struct _unit *self; /* Reset handling */ uae_sem_t reset_sync_sem; volatile int reset_state; /* RDB stuff */ uaecptr rdb_devname_amiga[DEVNAMES_PER_HDF]; int rdb_lowcyl; int rdb_highcyl; int rdb_cylblocks; uae_u8 *rdb_filesysstore; int rdb_filesyssize; TCHAR *filesysdir; /* CDFS */ bool cd_open; int cddevno; void *cdfs_superblock; } UnitInfo; struct uaedev_mount_info { UnitInfo ui[MAX_FILESYSTEM_UNITS]; }; static struct uaedev_mount_info mountinfo; int nr_units (void) { int i, cnt = 0; for (i = 0; i < MAX_FILESYSTEM_UNITS; i++) { if (mountinfo.ui[i].open) cnt++; } return cnt; } int nr_directory_units (struct uae_prefs *p) { int i, cnt = 0; if (p) { for (i = 0; i < p->mountitems; i++) { if (p->mountconfig[i].controller == 0) cnt++; } } else { for (i = 0; i < MAX_FILESYSTEM_UNITS; i++) { if (mountinfo.ui[i].open && mountinfo.ui[i].controller == 0) cnt++; } } return cnt; } static int is_virtual (int unit_no) { int t = is_hardfile (unit_no); return t == FILESYS_VIRTUAL || t == FILESYS_CD; } int is_hardfile (int unit_no) { if (mountinfo.ui[unit_no].volname || mountinfo.ui[unit_no].wasisempty || mountinfo.ui[unit_no].unknown_media) { if (unit_no >= cd_unit_offset && unit_no < cd_unit_offset + cd_unit_number) return FILESYS_CD; return FILESYS_VIRTUAL; } if (mountinfo.ui[unit_no].hf.secspertrack == 0) { if (mountinfo.ui[unit_no].hf.flags & 1) return FILESYS_HARDDRIVE; return FILESYS_HARDFILE_RDB; } return FILESYS_HARDFILE; } static void close_filesys_unit (UnitInfo *uip) { if (!uip->open) return; if (uip->hf.handle_valid) hdf_close (&uip->hf); if (uip->volname != 0) xfree (uip->volname); if (uip->devname != 0) xfree (uip->devname); if (uip->rootdir != 0) xfree (uip->rootdir); if (uip->unit_pipe) xfree (uip->unit_pipe); if (uip->back_pipe) xfree (uip->back_pipe); if (uip->cd_open) { sys_command_close (uip->cddevno); isofs_unmount (uip->cdfs_superblock); } uip->unit_pipe = 0; uip->back_pipe = 0; uip->hf.handle_valid = 0; uip->volname = 0; uip->devname = 0; uip->rootdir = 0; uip->open = 0; uip->cd_open = 0; } static uaedev_config_info *getuci (struct uaedev_config_info *uci, int nr) { return &uci[nr]; } static UnitInfo *getuip (struct uae_prefs *p, int index) { if (index < 0) return NULL; index = p->mountconfig[index].configoffset; if (index < 0) return NULL; return &mountinfo.ui[index]; } int get_filesys_unitconfig (struct uae_prefs *p, int index, struct mountedinfo *mi) { UnitInfo *ui = getuip (p, index); struct uaedev_config_info *uci = &p->mountconfig[index]; UnitInfo uitmp; memset (mi, 0, sizeof (struct mountedinfo)); memset (&uitmp, 0, sizeof uitmp); if (!ui) { ui = &uitmp; if (!uci->ishdf) { mi->ismounted = 1; if (uci->rootdir && _tcslen (uci->rootdir) == 0) return FILESYS_VIRTUAL; if (my_existsfile (uci->rootdir)) { mi->ismedia = 1; return FILESYS_VIRTUAL; } if (my_getvolumeinfo (uci->rootdir) < 0) return -1; mi->ismedia = true; return FILESYS_VIRTUAL; } else { ui->hf.readonly = true; ui->hf.blocksize = uci->blocksize; if (!hdf_open (&ui->hf, uci->rootdir)) { mi->ismedia = false; mi->ismounted = true; if (uci->reserved == 0 && uci->sectors == 0 && uci->surfaces == 0) { if (ui->hf.flags & 1) return FILESYS_HARDDRIVE; return FILESYS_HARDFILE_RDB; } return -1; } mi->ismedia = true; if (ui->hf.drive_empty) mi->ismedia = 0; hdf_close (&ui->hf); } } else { if (!ui->controller || (ui->controller && p->cs_ide)) { mi->ismounted = 1; if (uci->ishdf) mi->ismedia = ui->hf.drive_empty ? false : true; else mi->ismedia = true; } } mi->size = ui->hf.virtsize; if (uci->cyls) { mi->nrcyls = uci->cyls; } else { mi->nrcyls = (int)(uci->sectors * uci->surfaces ? (ui->hf.virtsize / uci->blocksize) / (uci->sectors * uci->surfaces) : 0); } if (!uci->ishdf) return FILESYS_VIRTUAL; if (uci->reserved == 0 && uci->sectors == 0 && uci->surfaces == 0) { if (ui->hf.flags & 1) return FILESYS_HARDDRIVE; return FILESYS_HARDFILE_RDB; } return FILESYS_HARDFILE; } static void stripsemicolon (TCHAR *s) { if (!s) return; while (_tcslen(s) > 0 && s[_tcslen(s) - 1] == ':') s[_tcslen(s) - 1] = 0; } static void stripspace (TCHAR *s) { int i; if (!s) return; for (i = 0; i < _tcslen (s); i++) { if (s[i] == ' ') s[i] = '_'; } } static void striplength (TCHAR *s, int len) { if (!s) return; if (_tcslen (s) <= len) return; s[len] = 0; } static void fixcharset (TCHAR *s) { char tmp[MAX_DPATH]; if (!s) return; ua_fs_copy (tmp, MAX_DPATH, s, '_'); au_fs_copy (s, strlen (tmp) + 1, tmp); } TCHAR *validatevolumename (TCHAR *s) { stripsemicolon (s); fixcharset (s); striplength (s, 30); return s; } TCHAR *validatedevicename (TCHAR *s) { stripsemicolon (s); stripspace (s); fixcharset (s); striplength (s, 30); return s; } TCHAR *filesys_createvolname (const TCHAR *volname, const TCHAR *rootdir, const TCHAR *def) { TCHAR *nvol = NULL; int i, archivehd; TCHAR *p = NULL; archivehd = -1; if (my_existsfile (rootdir)) archivehd = 1; else if (my_existsdir (rootdir)) archivehd = 0; if ((!volname || _tcslen (volname) == 0) && rootdir && archivehd >= 0) { p = my_strdup (rootdir); for (i = _tcslen (p) - 1; i >= 0; i--) { TCHAR c = p[i]; if (c == ':' || c == '/' || c == '\\') { if (i == _tcslen (p) - 1) continue; if (!_tcscmp (p + i, _T(":\\"))) { xfree (p); p = xmalloc (TCHAR, 10); p[0] = rootdir[0]; p[1] = 0; i = 0; } else { i++; } break; } } if (i >= 0) nvol = my_strdup (p + i); } if (!nvol && archivehd >= 0) { TCHAR *s = NULL; if (volname && _tcslen (volname) > 0) nvol = my_strdup (volname); else nvol = my_strdup (def); } if (!nvol) { if (volname && _tcslen (volname)) nvol = my_strdup (volname); else nvol = my_strdup (_T("")); } validatevolumename (nvol); xfree (p); return nvol; } static int set_filesys_volume (const TCHAR *rootdir, int *flags, bool *readonly, bool *emptydrive, struct zvolume **zvp) { *emptydrive = 0; if (my_existsfile (rootdir)) { struct zvolume *zv; zv = zfile_fopen_archive (rootdir); if (!zv) { write_log (_T("'%s' is not a supported archive file\n"), rootdir); return -1; } *zvp = zv; *flags = MYVOLUMEINFO_ARCHIVE; *readonly = 1; } else { *flags = my_getvolumeinfo (rootdir); if (*flags < 0) { if (rootdir && rootdir[0]) write_log (_T("directory '%s' not found, mounting as empty drive\n"), rootdir); *emptydrive = 1; *flags = 0; } else if ((*flags) & MYVOLUMEINFO_READONLY) { write_log (_T("'%s' set to read-only\n"), rootdir); *readonly = 1; } } return 1; } static int set_filesys_unit_1 (int nr, const TCHAR *devname, const TCHAR *volname, const TCHAR *rootdir, bool readonly, int cyls, int secspertrack, int surfaces, int reserved, int blocksize, int bootpri, bool donotmount, bool autoboot, const TCHAR *filesysdir, int hdc, int flags) { UnitInfo *ui; int i; bool emptydrive = false; bool iscd; if (hdc) return -1; if (nr < 0) { for (nr = 0; nr < MAX_FILESYSTEM_UNITS; nr++) { if (!mountinfo.ui[nr].open) break; } if (nr == MAX_FILESYSTEM_UNITS) { write_log (_T("No slot allocated for this unit\n")); return -1; } } iscd = nr >= cd_unit_offset && nr < cd_unit_offset + cd_unit_number; for (i = 0; i < MAX_FILESYSTEM_UNITS; i++) { if (nr == i || !mountinfo.ui[i].open || mountinfo.ui[i].rootdir == NULL || is_hardfile (i) == FILESYS_CD) continue; if (rootdir && _tcslen (rootdir) > 0 && !_tcsicmp (mountinfo.ui[i].rootdir, rootdir)) { write_log (_T("directory/hardfile '%s' already added\n"), rootdir); return -1; } } ui = &mountinfo.ui[nr]; memset (ui, 0, sizeof (UnitInfo)); if (iscd) { ui->unit_type = UNIT_CDFS; emptydrive = 1; ui->volflags = MYVOLUMEINFO_CDFS | MYVOLUMEINFO_READONLY; readonly = true; } else if (volname != NULL) { int flags = 0; emptydrive = 1; if (rootdir) { if (set_filesys_volume (rootdir, &flags, &readonly, &emptydrive, &ui->zarchive) < 0) return -1; } ui->volname = filesys_createvolname (volname, rootdir, _T("harddrive")); ui->volflags = flags; } else { ui->unit_type = UNIT_FILESYSTEM; ui->hf.secspertrack = secspertrack; ui->hf.surfaces = surfaces; ui->hf.reservedblocks = reserved; ui->hf.blocksize = blocksize; ui->hf.unitnum = nr; ui->volname = 0; ui->hf.readonly = readonly; if (!hdf_open (&ui->hf, rootdir) && !readonly) { write_log (_T("Attempting to open in read-only mode\n")); ui->hf.readonly = readonly = 1; hdf_open (&ui->hf, rootdir); } ui->hf.readonly = readonly; if (!ui->hf.drive_empty) { if (ui->hf.handle_valid == 0) { write_log (_T("Hardfile %s not found\n"), ui->hf.device_name); goto err; } if ((ui->hf.blocksize & (ui->hf.blocksize - 1)) != 0 || ui->hf.blocksize == 0) { write_log (_T("Hardfile %s bad blocksize\n"), ui->hf.device_name); goto err; } if ((ui->hf.secspertrack || ui->hf.surfaces || ui->hf.reservedblocks) && (ui->hf.secspertrack < 1 || ui->hf.surfaces < 1 || ui->hf.surfaces > 1023 || ui->hf.reservedblocks < 0 || ui->hf.reservedblocks > 1023) != 0) { write_log (_T("Hardfile %s bad hardfile geometry\n"), ui->hf.device_name); goto err; } if (ui->hf.blocksize > ui->hf.virtsize || ui->hf.virtsize == 0) { write_log (_T("Hardfile %s too small\n"), ui->hf.device_name); goto err; } if (cyls) { ui->hf.nrcyls = cyls; } else { ui->hf.nrcyls = (int)(ui->hf.secspertrack * ui->hf.surfaces ? (ui->hf.virtsize / ui->hf.blocksize) / (ui->hf.secspertrack * ui->hf.surfaces) : 0); } } } ui->self = 0; ui->reset_state = FS_STARTUP; ui->wasisempty = emptydrive; ui->canremove = emptydrive && (flags & MYVOLUMEINFO_REUSABLE); ui->rootdir = my_strdup (rootdir); ui->devname = my_strdup (devname); stripsemicolon(ui->devname); if (filesysdir && filesysdir[0]) ui->filesysdir = my_strdup (filesysdir); ui->readonly = readonly; if (!autoboot) bootpri = -128; if (donotmount) bootpri = -129; if (bootpri < -129) bootpri = -129; if (bootpri > 127) bootpri = 127; ui->bootpri = bootpri; ui->open = 1; return nr; err: if (ui->hf.handle_valid) hdf_close (&ui->hf); return -1; } static int set_filesys_unit (int nr, const TCHAR *devname, const TCHAR *volname, const TCHAR *rootdir, bool readonly, int cyls, int secspertrack, int surfaces, int reserved, int blocksize, int bootpri, bool donotmount, bool autoboot, const TCHAR *filesysdir, int hdc, int flags) { int ret; ret = set_filesys_unit_1 (nr, devname, volname, rootdir, readonly, cyls, secspertrack, surfaces, reserved, blocksize, bootpri, donotmount, autoboot, filesysdir, hdc, flags); return ret; } static int add_filesys_unit (const TCHAR *devname, const TCHAR *volname, const TCHAR *rootdir, bool readonly, int cyls, int secspertrack, int surfaces, int reserved, int blocksize, int bootpri, bool donotmount, bool autoboot, const TCHAR *filesysdir, int hdc, int flags) { int ret; if (nr_units () >= MAX_FILESYSTEM_UNITS) return -1; ret = set_filesys_unit_1 (-1, devname, volname, rootdir, readonly, cyls, secspertrack, surfaces, reserved, blocksize, bootpri, donotmount, autoboot, filesysdir, hdc, flags); #ifdef RETROPLATFORM if (ret >= 0) { rp_hd_device_enable (ret, true); rp_harddrive_image_change (ret, readonly, rootdir); } #endif return ret; } int kill_filesys_unitconfig (struct uae_prefs *p, int nr) { struct uaedev_config_info *uci; if (nr < 0) return 0; uci = getuci (p->mountconfig, nr); hardfile_do_disk_change (uci, 0); if (uci->configoffset >= 0 && uci->controller == 0) filesys_media_change (uci->rootdir, 0, uci); while (nr < MOUNT_CONFIG_SIZE) { memmove (&p->mountconfig[nr], &p->mountconfig[nr + 1], sizeof (struct uaedev_config_info)); nr++; } p->mountitems--; memset (&p->mountconfig[MOUNT_CONFIG_SIZE - 1], 0, sizeof (struct uaedev_config_info)); return 1; } int move_filesys_unitconfig (struct uae_prefs *p, int nr, int to) { struct uaedev_config_info *uci1, *uci2, tmpuci; uci1 = getuci (p->mountconfig, nr); uci2 = getuci (p->mountconfig, to); if (nr == to) return 0; memcpy (&tmpuci, uci1, sizeof (struct uaedev_config_info)); memcpy (uci1, uci2, sizeof (struct uaedev_config_info)); memcpy (uci2, &tmpuci, sizeof (struct uaedev_config_info)); return 1; } void filesys_addexternals (void); static void allocuci (struct uae_prefs *p, int nr, int idx) { struct uaedev_config_info *uci = &p->mountconfig[nr]; if (idx >= 0) { UnitInfo *ui; uci->configoffset = idx; ui = &mountinfo.ui[idx]; ui->configureddrive = 1; } else { uci->configoffset = -1; } } static void initialize_mountinfo (void) { int nr; UnitInfo *uip = &mountinfo.ui[0]; cd_unit_offset = MAX_FILESYSTEM_UNITS; for (nr = 0; nr < currprefs.mountitems; nr++) { struct uaedev_config_info *uci = &currprefs.mountconfig[nr]; if (uci->controller == HD_CONTROLLER_UAE) { int idx = set_filesys_unit_1 (-1, uci->devname, uci->ishdf ? NULL : uci->volname, uci->rootdir, uci->readonly, uci->cyls, uci->sectors, uci->surfaces, uci->reserved, uci->blocksize, uci->bootpri, uci->donotmount, uci->autoboot, uci->filesys, 0, MYVOLUMEINFO_REUSABLE); allocuci (&currprefs, nr, idx); } } filesys_addexternals (); nr = nr_units (); cd_unit_offset = nr; cd_unit_number = 0; if (currprefs.scsi && currprefs.win32_automount_cddrives) { uae_u32 mask = scsi_get_cd_drive_mask (); for (int i = 0; i < 32; i++) { if (mask & (1 << i)) { TCHAR cdname[30]; _stprintf (cdname, _T("CD%d"), i); cd_unit_number++; int idx = set_filesys_unit_1 (i + cd_unit_offset, cdname, NULL, _T("/"), true, 0, 1, 1, 0, 2048, 0, false, false, NULL, 0, 0); allocuci (&currprefs, nr, idx); nr++; } } } for (nr = 0; nr < currprefs.mountitems; nr++) { struct uaedev_config_info *uci = &currprefs.mountconfig[nr]; if (uci->controller == HD_CONTROLLER_UAE) continue; if (uci->controller <= HD_CONTROLLER_IDE3) { gayle_add_ide_unit (uci->controller - HD_CONTROLLER_IDE0, uci->rootdir, uci->blocksize, uci->readonly, uci->devname, uci->cyls, uci->sectors, uci->surfaces, uci->reserved, uci->bootpri, uci->filesys, uci->pcyls, uci->pheads, uci->psecs); allocuci (&currprefs, nr, -1); } else if (uci->controller <= HD_CONTROLLER_SCSI6) { if (currprefs.cs_mbdmac > 0) { #ifdef A2091 a3000_add_scsi_unit (uci->controller - HD_CONTROLLER_SCSI0, uci->rootdir, uci->blocksize, uci->readonly, uci->devname, uci->sectors, uci->surfaces, uci->reserved, uci->bootpri, uci->filesys); allocuci (&currprefs, nr, -1); #endif } else if (currprefs.cs_a2091) { #ifdef A2091 a2091_add_scsi_unit (uci->controller - HD_CONTROLLER_SCSI0, uci->rootdir, uci->blocksize, uci->readonly, uci->devname, uci->sectors, uci->surfaces, uci->reserved, uci->bootpri, uci->filesys); allocuci (&currprefs, nr, -1); #endif } else if (currprefs.cs_cdtvscsi) { #ifdef CDTV cdtv_add_scsi_unit (uci->controller - HD_CONTROLLER_SCSI0, uci->rootdir, uci->blocksize, uci->readonly, uci->devname, uci->sectors, uci->surfaces, uci->reserved, uci->bootpri, uci->filesys); allocuci (&currprefs, nr, -1); #endif } } else if (uci->controller == HD_CONTROLLER_PCMCIA_SRAM) { gayle_add_pcmcia_sram_unit (uci->rootdir, uci->readonly); allocuci (&currprefs, nr, -1); } else if (uci->controller == HD_CONTROLLER_PCMCIA_IDE) { gayle_add_pcmcia_ide_unit (uci->rootdir, uci->readonly); allocuci (&currprefs, nr, -1); } } } int sprintf_filesys_unit (TCHAR *buffer, int num) { UnitInfo *uip = mountinfo.ui; if (uip[num].volname != 0) _stprintf (buffer, _T("(DH%d:) Filesystem, %s: %s %s"), num, uip[num].volname, uip[num].rootdir, uip[num].readonly ? "ro" : ""); else _stprintf (buffer, _T("(DH%d:) Hardfile, \"%s\", size %d Mbytes"), num, uip[num].rootdir, (int)(uip[num].hf.virtsize / (1024 * 1024))); return 0; } void free_mountinfo (void) { int i; for (i = 0; i < MAX_FILESYSTEM_UNITS; i++) close_filesys_unit (mountinfo.ui + i); gayle_free_units (); } struct hardfiledata *get_hardfile_data (int nr) { UnitInfo *uip = mountinfo.ui; if (nr < 0 || nr >= MAX_FILESYSTEM_UNITS || uip[nr].open == 0 || is_virtual (nr)) return 0; return &uip[nr].hf; } /* minimal AmigaDOS definitions */ /* field offsets in DosPacket */ #define dp_Type 8 #define dp_Res1 12 #define dp_Res2 16 #define dp_Arg1 20 #define dp_Arg2 24 #define dp_Arg3 28 #define dp_Arg4 32 #define dp_Arg5 36 #define DP64_INIT -3L #define dp64_Type 8 #define dp64_Res0 12 #define dp64_Res2 16 #define dp64_Res1 24 #define dp64_Arg1 32 #define dp64_Arg2 40 #define dp64_Arg3 48 #define dp64_Arg4 52 #define dp64_Arg5 56 /* result codes */ #define DOS_TRUE ((uae_u32)-1L) #define DOS_FALSE (0L) #define MAXFILESIZE32 (0x7fffffff) /* Passed as type to Lock() */ #define SHARED_LOCK -2 /* File is readable by others */ #define ACCESS_READ -2 /* Synonym */ #define EXCLUSIVE_LOCK -1 /* No other access allowed */ #define ACCESS_WRITE -1 /* Synonym */ /* packet types */ #define ACTION_CURRENT_VOLUME 7 #define ACTION_LOCATE_OBJECT 8 #define ACTION_RENAME_DISK 9 #define ACTION_FREE_LOCK 15 #define ACTION_DELETE_OBJECT 16 #define ACTION_RENAME_OBJECT 17 #define ACTION_MORE_CACHE 18 #define ACTION_COPY_DIR 19 #define ACTION_SET_PROTECT 21 #define ACTION_CREATE_DIR 22 #define ACTION_EXAMINE_OBJECT 23 #define ACTION_EXAMINE_NEXT 24 #define ACTION_DISK_INFO 25 #define ACTION_INFO 26 #define ACTION_FLUSH 27 #define ACTION_SET_COMMENT 28 #define ACTION_PARENT 29 #define ACTION_SET_DATE 34 #define ACTION_FIND_WRITE 1004 #define ACTION_FIND_INPUT 1005 #define ACTION_FIND_OUTPUT 1006 #define ACTION_END 1007 #define ACTION_SEEK 1008 #define ACTION_WRITE_PROTECT 1023 #define ACTION_IS_FILESYSTEM 1027 #define ACTION_READ 'R' #define ACTION_WRITE 'W' /* 2.0+ packet types */ #define ACTION_INHIBIT 31 #define ACTION_SET_FILE_SIZE 1022 #define ACTION_LOCK_RECORD 2008 #define ACTION_FREE_RECORD 2009 #define ACTION_SAME_LOCK 40 #define ACTION_CHANGE_MODE 1028 #define ACTION_FH_FROM_LOCK 1026 #define ACTION_COPY_DIR_FH 1030 #define ACTION_PARENT_FH 1031 #define ACTION_EXAMINE_ALL 1033 #define ACTION_EXAMINE_FH 1034 #define ACTION_EXAMINE_ALL_END 1035 #define ACTION_FORMAT 1020 #define ACTION_IS_FILESYSTEM 1027 #define ACTION_ADD_NOTIFY 4097 #define ACTION_REMOVE_NOTIFY 4098 #define ACTION_CHANGE_FILE_POSITION64 8001 #define ACTION_GET_FILE_POSITION64 8002 #define ACTION_CHANGE_FILE_SIZE64 8003 #define ACTION_GET_FILE_SIZE64 8004 /* not supported */ #define ACTION_MAKE_LINK 1021 #define ACTION_READ_LINK 1024 #define DISK_TYPE_DOS 0x444f5300 /* DOS\0 */ #define DISK_TYPE_DOS_FFS 0x444f5301 /* DOS\1 */ #define CDFS_DOSTYPE 0x43440000 /* CDxx */ typedef struct { uae_u32 uniq; /* The directory we're going through. */ a_inode *aino; /* The file we're going to look up next. */ a_inode *curr_file; } ExamineKey; struct lockrecord { struct lockrecord *next; uae_u32 packet; uae_u32 pos; uae_u32 len; uae_u32 mode; uae_u32 timeout; uae_u32 msg; }; typedef struct key { struct key *next; a_inode *aino; uae_u32 uniq; struct fs_filehandle *fd; uae_u64 file_pos; int dosmode; int createmode; int notifyactive; struct lockrecord *record; } Key; typedef struct notify { struct notify *next; uaecptr notifyrequest; TCHAR *fullname; TCHAR *partname; } Notify; typedef struct exallkey { uae_u32 id; struct fs_dirhandle *dirhandle; TCHAR *fn; uaecptr control; } ExAllKey; /* Since ACTION_EXAMINE_NEXT is so braindamaged, we have to keep * some of these around */ #define EXKEYS 128 #define EXALLKEYS 100 #define MAX_AINO_HASH 128 #define NOTIFY_HASH_SIZE 127 /* handler state info */ typedef struct _unit { struct _unit *next; /* Amiga stuff */ uaecptr dosbase; uaecptr volume; uaecptr port; /* Our port */ uaecptr locklist; /* Native stuff */ uae_s32 unit; /* unit number */ UnitInfo ui; /* unit startup info */ TCHAR tmpbuf3[256]; /* Dummy message processing */ uaecptr dummy_message; volatile unsigned int cmds_sent; volatile unsigned int cmds_complete; volatile unsigned int cmds_acked; /* ExKeys */ ExamineKey examine_keys[EXKEYS]; int next_exkey; unsigned long total_locked_ainos; /* ExAll */ ExAllKey exalls[EXALLKEYS]; int exallid; /* Keys */ struct key *keys; struct lockrecord *waitingrecords; a_inode rootnode; unsigned long aino_cache_size; a_inode *aino_hash[MAX_AINO_HASH]; unsigned long nr_cache_hits; unsigned long nr_cache_lookups; struct notify *notifyhash[NOTIFY_HASH_SIZE]; int volflags; uae_u32 lockkey; bool inhibited; bool canremovable; /* increase when media is changed. * used to detect if cached aino is valid */ int mountcount; int mount_changed; struct zvolume *zarchive; void *cdfs_superblock; TCHAR *mount_volume; TCHAR *mount_rootdir; bool mount_readonly; int mount_flags; int reinsertdelay; TCHAR *newvolume; TCHAR *newrootdir; bool newreadonly; int newflags; } Unit; static uae_u32 a_uniq, key_uniq; typedef uaecptr dpacket; #define PUT_PCK_RES1(p,v) do { put_long ((p) + dp_Res1, (v)); } while (0) #define PUT_PCK_RES2(p,v) do { put_long ((p) + dp_Res2, (v)); } while (0) #define GET_PCK_TYPE(p) ((uae_s32)(get_long ((p) + dp_Type))) #define GET_PCK_RES1(p) ((uae_s32)(get_long ((p) + dp_Res1))) #define GET_PCK_RES2(p) ((uae_s32)(get_long ((p) + dp_Res2))) #define GET_PCK_ARG1(p) ((uae_s32)(get_long ((p) + dp_Arg1))) #define GET_PCK_ARG2(p) ((uae_s32)(get_long ((p) + dp_Arg2))) #define GET_PCK_ARG3(p) ((uae_s32)(get_long ((p) + dp_Arg3))) #define GET_PCK_ARG4(p) ((uae_s32)(get_long ((p) + dp_Arg4))) #define GET_PCK_ARG5(p) ((uae_s32)(get_long ((p) + dp_Arg5))) #define PUT_PCK64_RES0(p,v) do { put_long ((p) + dp64_Res0, (v)); } while (0) #define PUT_PCK64_RES1(p,v) do { put_long ((p) + dp64_Res1, (((uae_u64)v) >> 32)); put_long ((p) + dp64_Res1 + 4, ((uae_u32)v)); } while (0) #define PUT_PCK64_RES2(p,v) do { put_long ((p) + dp64_Res2, (v)); } while (0) #define GET_PCK64_TYPE(p) ((uae_s32)(get_long ((p) + dp64_Type))) #define GET_PCK64_RES0(p) ((uae_s32)(get_long ((p) + dp64_Res0))) #define GET_PCK64_RES1(p) ( (((uae_s64)(get_long ((p) + dp64_Res1))) << 32) | (((uae_s64)(get_long ((p) + dp64_Res1 + 4))) << 0) ) #define GET_PCK64_ARG1(p) ((uae_s32)(get_long ((p) + dp64_Arg1))) #define GET_PCK64_ARG2(p) ( (((uae_s64)(get_long ((p) + dp64_Arg2))) << 32) | (((uae_s64)(get_long ((p) + dp64_Arg2 + 4))) << 0) ) #define GET_PCK64_ARG3(p) ((uae_s32)(get_long ((p) + dp64_Arg3))) #define GET_PCK64_ARG4(p) ((uae_s32)(get_long ((p) + dp64_Arg4))) #define GET_PCK64_ARG5(p) ( (((uae_s64)(get_long ((p) + dp64_Arg5))) << 32) | (((uae_s64)(get_long ((p) + dp64_Arg5 + 4))) << 0) ) static int flush_cache (Unit *unit, int num); static TCHAR *char1 (uaecptr addr) { static uae_char buf[1024]; static TCHAR bufx[1024]; unsigned int i = 0; do { buf[i] = get_byte (addr); addr++; } while (buf[i++] && i < sizeof (buf)); return au_fs_copy (bufx, sizeof (bufx) / sizeof (TCHAR), buf); } static TCHAR *bstr1 (uaecptr addr) { static TCHAR bufx[257]; static uae_char buf[257]; int i; int n = get_byte (addr); addr++; for (i = 0; i < n; i++, addr++) buf[i] = get_byte (addr); buf[i] = 0; return au_fs_copy (bufx, sizeof (bufx) / sizeof (TCHAR), buf); } static TCHAR *bstr (Unit *unit, uaecptr addr) { int i; int n = get_byte (addr); uae_char buf[257]; addr++; for (i = 0; i < n; i++, addr++) buf[i] = get_byte (addr); buf[i] = 0; au_fs_copy (unit->tmpbuf3, sizeof (unit->tmpbuf3) / sizeof (TCHAR), buf); return unit->tmpbuf3; } static TCHAR *bstr_cut (Unit *unit, uaecptr addr) { TCHAR *p = unit->tmpbuf3; int i, colon_seen = 0, off; int n = get_byte (addr); uae_char buf[257]; off = 0; addr++; for (i = 0; i < n; i++, addr++) { uae_u8 c = get_byte (addr); buf[i] = c; if (c == '/' || (c == ':' && colon_seen++ == 0)) off = i + 1; } buf[i] = 0; au_fs_copy (unit->tmpbuf3, sizeof (unit->tmpbuf3) / sizeof (TCHAR), buf); return &p[off]; } /* convert time_t to/from AmigaDOS time */ static const uae_s64 msecs_per_day = 24 * 60 * 60 * 1000; static const uae_s64 diff = ((8 * 365 + 2) * (24 * 60 * 60)) * (uae_u64)1000; void timeval_to_amiga (struct mytimeval *tv, int *days, int *mins, int *ticks) { /* tv.tv_sec is secs since 1-1-1970 */ /* days since 1-1-1978 */ /* mins since midnight */ /* ticks past minute @ 50Hz */ uae_s64 t = tv->tv_sec * 1000 + tv->tv_usec / 1000; t -= diff; if (t < 0) t = 0; *days = t / msecs_per_day; t -= *days * msecs_per_day; *mins = t / (60 * 1000); t -= *mins * (60 * 1000); *ticks = t / (1000 / 50); } void amiga_to_timeval (struct mytimeval *tv, int days, int mins, int ticks) { uae_s64 t; if (days < 0) days = 0; if (days > 9900 * 365) days = 9900 * 365; // in future far enough? if (mins < 0 || mins >= 24 * 60) mins = 0; if (ticks < 0 || ticks >= 60 * 50) ticks = 0; t = ticks * 20; t += mins * (60 * 1000); t += ((uae_u64)days) * msecs_per_day; t += diff; tv->tv_sec = t / 1000; tv->tv_usec = (t % 1000) * 1000; } static Unit *units = 0; static Unit* find_unit (uaecptr port) { Unit* u; for (u = units; u; u = u->next) if (u->port == port) break; return u; } static struct fs_dirhandle *fs_opendir (Unit *u, a_inode *aino) { struct fs_dirhandle *fsd = xmalloc (struct fs_dirhandle, 1); fsd->fstype = (u->volflags & MYVOLUMEINFO_ARCHIVE) ? FS_ARCHIVE : ((u->volflags & MYVOLUMEINFO_CDFS) ? FS_CDFS : FS_DIRECTORY); if (fsd->fstype == FS_ARCHIVE) { fsd->zd = zfile_opendir_archive (aino->nname); if (fsd->zd) return fsd; } else if (fsd->fstype == FS_DIRECTORY) { fsd->od = my_opendir (aino->nname); if (fsd->od) return fsd; } else if (fsd->fstype == FS_CDFS) { fsd->isod = isofs_opendir (u->ui.cdfs_superblock, aino->uniq_external); if (fsd->isod) return fsd; } xfree (fsd); return NULL; } static void fs_closedir (struct fs_dirhandle *fsd) { if (!fsd) return; if (fsd->fstype == FS_ARCHIVE) zfile_closedir_archive (fsd->zd); else if (fsd->fstype == FS_DIRECTORY) my_closedir (fsd->od); else if (fsd->fstype == FS_CDFS) isofs_closedir (fsd->isod); xfree (fsd); } static struct fs_filehandle *fs_openfile (Unit *u, a_inode *aino, int flags) { struct fs_filehandle *fsf = xmalloc (struct fs_filehandle, 1); fsf->fstype = (u->volflags & MYVOLUMEINFO_ARCHIVE) ? FS_ARCHIVE : ((u->volflags & MYVOLUMEINFO_CDFS) ? FS_CDFS : FS_DIRECTORY); if (fsf->fstype == FS_ARCHIVE) { fsf->zf = zfile_open_archive (aino->nname, flags); if (fsf->zf) return fsf; } else if (fsf->fstype == FS_DIRECTORY) { fsf->of = my_open (aino->nname, flags); if (fsf->of) return fsf; } else if (fsf->fstype == FS_CDFS) { fsf->isof = isofs_openfile (u->ui.cdfs_superblock, aino->uniq_external, flags); if (fsf->isof) return fsf; } xfree (fsf); return NULL; } static void fs_closefile (struct fs_filehandle *fsf) { if (!fsf) return; if (fsf->fstype == FS_ARCHIVE) { zfile_close_archive (fsf->zf); } else if (fsf->fstype == FS_DIRECTORY) { my_close (fsf->of); } else if (fsf->fstype == FS_CDFS) { isofs_closefile (fsf->isof); } xfree (fsf); } static unsigned int fs_read (struct fs_filehandle *fsf, void *b, unsigned int size) { if (fsf->fstype == FS_ARCHIVE) return zfile_read_archive (fsf->zf, b, size); else if (fsf->fstype == FS_DIRECTORY) return my_read (fsf->of, b, size); else if (fsf->fstype == FS_CDFS) return isofs_read (fsf->isof, b, size); return 0; } static unsigned int fs_write (struct fs_filehandle *fsf, void *b, unsigned int size) { if (fsf->fstype == FS_DIRECTORY) return my_write (fsf->of, b, size); return 0; } /* return value = old position. -1 = error. */ static uae_u64 fs_lseek64 (struct fs_filehandle *fsf, uae_s64 offset, int whence) { if (fsf->fstype == FS_ARCHIVE) return zfile_lseek_archive (fsf->zf, offset, whence); else if (fsf->fstype == FS_DIRECTORY) return my_lseek (fsf->of, offset, whence); else if (fsf->fstype == FS_CDFS) return isofs_lseek (fsf->isof, offset, whence); return -1; } static uae_u32 fs_lseek (struct fs_filehandle *fsf, uae_s32 offset, int whence) { return (uae_u32)fs_lseek64 (fsf, offset, whence); } static uae_u64 fs_fsize64 (struct fs_filehandle *fsf) { if (fsf->fstype == FS_ARCHIVE) return zfile_fsize_archive (fsf->zf); else if (fsf->fstype == FS_DIRECTORY) return my_fsize (fsf->of); else if (fsf->fstype == FS_CDFS) return isofs_fsize (fsf->isof); return -1; } static uae_u32 fs_fsize (struct fs_filehandle *fsf) { return (uae_u32)fs_fsize64 (fsf); } static void set_highcyl (UnitInfo *ui, uae_u32 blocks) { uaecptr startup = get_long (ui->devicenode + 7 * 4) << 2; uaecptr env = get_long (startup + 8) << 2; put_long (env + 10 * 4, blocks); } static void set_volume_name (Unit *unit, struct mytimeval *tv) { int namelen; int i; char *s; s = ua_fs (unit->ui.volname, -1); namelen = strlen (s); put_byte (unit->volume + 44, namelen); for (i = 0; i < namelen; i++) put_byte (unit->volume + 45 + i, s[i]); put_byte (unit->volume + 45 + namelen, 0); if (tv && (tv->tv_sec || tv->tv_usec)) { int days, mins, ticks; timeval_to_amiga (tv, &days, &mins, &ticks); put_long (unit->volume + 16, days); put_long (unit->volume + 20, mins); put_long (unit->volume + 24, ticks); } xfree (s); unit->rootnode.aname = unit->ui.volname; unit->rootnode.nname = unit->ui.rootdir; unit->rootnode.mountcount = unit->mountcount; } static int filesys_isvolume (Unit *unit) { if (!unit->volume) return 0; return get_byte (unit->volume + 44) || unit->ui.unknown_media; } static void clear_exkeys (Unit *unit) { int i; a_inode *a; for (i = 0; i < EXKEYS; i++) { unit->examine_keys[i].aino = 0; unit->examine_keys[i].curr_file = 0; unit->examine_keys[i].uniq = 0; } for (i = 0; i < EXALLKEYS; i++) { fs_closedir (unit->exalls[i].dirhandle); unit->exalls[i].dirhandle = NULL; xfree (unit->exalls[i].fn); unit->exalls[i].fn = NULL; unit->exalls[i].id = 0; } unit->exallid = 0; unit->next_exkey = 1; a = &unit->rootnode; while (a) { a->exnext_count = 0; if (a->locked_children) { a->locked_children = 0; unit->total_locked_ainos--; } a = a->next; if (a == &unit->rootnode) break; } } static void filesys_delayed_change (Unit *u, int frames, const TCHAR *rootdir, const TCHAR *volume, bool readonly, int flags) { u->reinsertdelay = 50; u->newflags = flags; u->newreadonly = readonly; u->newrootdir = my_strdup (rootdir); if (volume) u->newvolume = my_strdup (volume); filesys_eject (u->unit); if (!rootdir || _tcslen (rootdir) == 0) u->reinsertdelay = 0; if (u->reinsertdelay > 0) write_log (_T("FILESYS: delayed insert %d: '%s' ('%s')\n"), u->unit, volume ? volume : _T(""), rootdir); } int filesys_eject (int nr) { UnitInfo *ui = &mountinfo.ui[nr]; Unit *u = ui->self; if (!mountertask || u->mount_changed) return 0; if (!ui->open || u == NULL) return 0; if (!is_virtual (nr)) return 0; if (!filesys_isvolume (u)) return 0; u->mount_changed = -1; u->mountcount++; write_log (_T("FILESYS: volume '%s' removal request\n"), u->ui.volname); // -1 = remove, -2 = remove + remove device node put_byte (u->volume + 172 - 32, ui->unit_type == UNIT_CDFS ? -1 : -2); uae_Signal (get_long (u->volume + 176 - 32), 1 << 13); return 1; } static uae_u32 heartbeat; static int heartbeat_count; static int heartbeat_task; // This uses filesystem process to reduce resource usage void setsystime (void) { if (!currprefs.tod_hack) return; heartbeat = get_long (rtarea_base + RTAREA_HEARTBEAT); heartbeat_task = 1; heartbeat_count = 10; } static void setsystime_vblank (void) { Unit *u; for (u = units; u; u = u->next) { if (is_virtual (u->unit) && filesys_isvolume (u)) { put_byte (u->volume + 173 - 32, 1); uae_Signal (get_long (u->volume + 176 - 32), 1 << 13); break; } } } int filesys_insert (int nr, TCHAR *volume, const TCHAR *rootdir, bool readonly, int flags) { UnitInfo *ui; Unit *u; if (!mountertask) return 0; write_log (_T("filesys_insert(%d,'%s','%s','%d','%d)\n"), nr, volume ? volume : _T(""), rootdir, readonly, flags); if (nr < 0) { for (u = units; u; u = u->next) { if (is_virtual (u->unit)) { if (!filesys_isvolume (u) && mountinfo.ui[u->unit].canremove) break; } } if (!u) { for (u = units; u; u = u->next) { if (is_virtual (u->unit)) { if (mountinfo.ui[u->unit].canremove) break; } } } if (!u) return 0; nr = u->unit; ui = &mountinfo.ui[nr]; } else { ui = &mountinfo.ui[nr]; u = ui->self; } if (!ui->open || u == NULL) return 0; if (u->reinsertdelay) return -1; if (!is_virtual (nr)) return 0; if (filesys_isvolume (u)) { filesys_delayed_change (u, 50, rootdir, volume, readonly, flags); return -1; } u->mountcount++; u->mount_changed = 1; u->mount_volume = volume ? my_strdup (volume) : NULL; u->mount_rootdir = my_strdup (rootdir); u->mount_readonly = readonly; u->mount_flags = flags; write_log (_T("filesys_insert %d done!\n"), nr); put_byte (u->volume + 172 - 32, -3); // wait for insert uae_Signal (get_long (u->volume + 176 - 32), 1 << 13); return 100 + nr; } static uae_u32 filesys_media_change_reply (TrapContext *ctx, int mode) { int nr; UnitInfo *ui = NULL; Unit *u; for (nr = 0; nr < MAX_FILESYSTEM_UNITS; nr++) { ui = &mountinfo.ui[nr]; u = ui->self; if (u && u->mount_changed) break; } if (nr >= MAX_FILESYSTEM_UNITS) { write_log (_T("FILESYS: filesys_media_change_reply without mount_changed flag!?\n")); return 0; } if (u->mount_changed < 0) { // eject if (mode == 0) { write_log (_T("FILESYS: got media change reply, '%s' removal finished\n"), u->ui.volname); flush_cache (u, -1); isofs_unmount (u->ui.cdfs_superblock); ui->cdfs_superblock = u->ui.cdfs_superblock = NULL; zfile_fclose_archive (u->zarchive); u->zarchive = NULL; u->ui.unknown_media = false; #ifdef RETROPLATFORM if (ui->unit_type == UNIT_CDFS) rp_cd_image_change (ui->cddevno, NULL); else rp_harddrive_image_change (nr, false, NULL); #endif } else { u->mount_changed = 0; } return 1; } else if (u->mount_changed > 0) { if (mode == 0) { // insert struct mytimeval ctime = { 0 }; bool emptydrive = false; struct uaedev_config_info *uci = NULL; clear_exkeys (u); xfree (u->ui.rootdir); ui->rootdir = u->ui.rootdir = my_strdup (u->mount_rootdir); flush_cache (u, -1); xfree (u->ui.volname); ui->volname = u->ui.volname = NULL; if (ui->unit_type == UNIT_CDFS) { uae_u64 uniq; ui->cdfs_superblock = u->ui.cdfs_superblock = isofs_mount (ui->cddevno, &uniq); u->rootnode.uniq_external = uniq; u->ui.unknown_media = true; if (!u->ui.cdfs_superblock) return 0; struct isofs_info ii; set_highcyl (ui, 0); bool r = isofs_mediainfo (ui->cdfs_superblock, &ii); if (r && ii.media) { u->ui.unknown_media = ii.unknown_media; if (!ii.unknown_media) { u->ui.volname = ui->volname = my_strdup (ii.volumename); ctime.tv_sec = ii.creation; ctime.tv_usec = 0; set_highcyl (ui, ii.blocks); #ifdef RETROPLATFORM rp_cd_image_change (ui->cddevno, ii.devname); #endif } } } else { if (set_filesys_volume (u->mount_rootdir, &u->mount_flags, &u->mount_readonly, &emptydrive, &u->zarchive) < 0) return 0; if (emptydrive) return 0; xfree (u->ui.volname); ui->volname = u->ui.volname = filesys_createvolname (u->mount_volume, u->mount_rootdir, _T("removable")); #ifdef RETROPLATFORM rp_harddrive_image_change (nr, u->mount_readonly, u->mount_rootdir); #endif uci = getuci (currprefs.mountconfig, nr); } if (u->ui.unknown_media) { write_log (_T("FILESYS: inserted unreadable volume NR=%d RO=%d\n"), nr, u->mount_readonly); } else { write_log (_T("FILESYS: inserted volume NR=%d RO=%d '%s' ('%s')\n"), nr, u->mount_readonly, ui->volname, u->mount_rootdir); set_volume_name (u, &ctime); if (u->mount_flags >= 0) ui->volflags = u->volflags = u->ui.volflags = u->mount_flags; if (uci != NULL) { _tcscpy (uci->volname, ui->volname); _tcscpy (uci->rootdir, u->mount_rootdir); } if (u->mount_flags >= 0) { ui->readonly = u->ui.readonly = u->mount_readonly; if (uci != NULL) uci->readonly = u->mount_readonly; } put_byte (u->volume + 44, 0); put_byte (u->volume + 172 - 32, 1); } xfree (u->mount_volume); xfree (u->mount_rootdir); u->mount_rootdir = NULL; u->mount_volume = NULL; } else { u->mount_changed = 0; } return 1; } return 0; } int filesys_media_change (const TCHAR *rootdir, int inserted, struct uaedev_config_info *uci) { Unit *u; UnitInfo *ui; int nr = -1; TCHAR volname[MAX_DPATH], *volptr; TCHAR devname[MAX_DPATH]; if (!mountertask) return 0; if (automountunit >= 0) return -1; write_log (_T("filesys_media_change('%s',%d,%p)\n"), rootdir, inserted, uci); nr = -1; for (u = units; u; u = u->next) { if (is_virtual (u->unit)) { ui = &mountinfo.ui[u->unit]; if (ui->rootdir && !memcmp (ui->rootdir, rootdir, _tcslen (rootdir)) && _tcslen (rootdir) + 3 >= _tcslen (ui->rootdir)) { if (filesys_isvolume (u) && inserted) { if (uci) filesys_delayed_change (u, 50, rootdir, uci->volname, uci->readonly, 0); return 0; } nr = u->unit; break; } } } ui = NULL; if (nr >= 0) ui = &mountinfo.ui[nr]; /* only configured drives have automount support if automount is disabled */ if (!currprefs.win32_automount_removable && (!ui || !ui->configureddrive) && (inserted == 0 || inserted == 1)) return 0; if (nr < 0 && !inserted) return 0; /* already mounted volume was ejected? */ if (nr >= 0 && !inserted) return filesys_eject (nr); if (inserted) { if (uci) { volptr = my_strdup (uci->volname); } else { volname[0] = 0; target_get_volume_name (&mountinfo, rootdir, volname, MAX_DPATH, 1, 0); volptr = volname; if (!volname[0]) volptr = NULL; if (ui && ui->configureddrive && ui->volname) { volptr = volname; _tcscpy (volptr, ui->volname); } } if (!volptr) { volptr = filesys_createvolname (NULL, rootdir, _T("removable")); _tcscpy (volname, volptr); xfree (volptr); volptr = volname; } /* new volume inserted and it was previously mounted? */ if (nr >= 0) { if (!filesys_isvolume (u)) /* not going to mount twice */ return filesys_insert (nr, volptr, rootdir, false, -1); return 0; } if (inserted < 0) /* -1 = only mount if already exists */ return 0; /* new volume inserted and it was not previously mounted? * perhaps we have some empty device slots? */ nr = filesys_insert (-1, volptr, rootdir, 0, 0); if (nr >= 100) { if (uci) uci->configoffset = nr - 100; return nr; } /* nope, uh, need black magic now.. */ if (uci) _tcscpy (devname, uci->devname); else _stprintf (devname, _T("RDH%d"), nr_units ()); nr = add_filesys_unit (devname, volptr, rootdir, 0, 0, 0, 0, 0, 0, 0, 0, 1, NULL, 0, MYVOLUMEINFO_REUSABLE); if (nr < 0) return 0; if (inserted > 1) mountinfo.ui[nr].canremove = 1; automountunit = nr; uae_Signal (mountertask, 1 << 13); /* poof */ if (uci) uci->configoffset = nr; return 100 + nr; } return 0; } int hardfile_remount (int nr) { /* this does work but every media reinsert duplicates the device.. */ #if 0 if (!mountertask) return 0; automountunit = nr; uae_Signal (mountertask, 1 << 13); #endif return 1; } bool filesys_do_disk_change (int cdunitnum, bool insert) { int nr = cdunitnum + cd_unit_offset; UnitInfo *ui = &mountinfo.ui[nr]; Unit *u = ui->self; if (!ui->cd_open) return false; if (insert) { if (filesys_isvolume (u)) return false; filesys_insert (nr, NULL, _T("/"), true, MYVOLUMEINFO_CDFS | MYVOLUMEINFO_READONLY); return true; } else { if (!filesys_isvolume (u)) return false; filesys_eject (nr); return true; } } /* flags and comments supported? */ static int fsdb_cando (Unit *unit) { if (unit->volflags & (MYVOLUMEINFO_ARCHIVE | MYVOLUMEINFO_CDFS)) return 1; if (currprefs.filesys_custom_uaefsdb && (unit->volflags & MYVOLUMEINFO_STREAMS)) return 1; if (!currprefs.filesys_no_uaefsdb) return 1; return 0; } static void prepare_for_open (TCHAR *name) { } static void de_recycle_aino (Unit *unit, a_inode *aino) { aino_test (aino); if (aino->next == 0 || aino == &unit->rootnode) return; aino->next->prev = aino->prev; aino->prev->next = aino->next; aino->next = aino->prev = 0; unit->aino_cache_size--; } static void dispose_aino (Unit *unit, a_inode **aip, a_inode *aino) { int hash = aino->uniq % MAX_AINO_HASH; if (unit->aino_hash[hash] == aino) unit->aino_hash[hash] = 0; if (aino->dirty && aino->parent) fsdb_dir_writeback (aino->parent); *aip = aino->sibling; if (unit->volflags & MYVOLUMEINFO_ARCHIVE) { ; } else if (unit->volflags & MYVOLUMEINFO_CDFS) { isofs_dispose_inode (unit->ui.cdfs_superblock, aino->uniq_external); } xfree (aino->aname); xfree (aino->comment); xfree (aino->nname); xfree (aino); } static void free_all_ainos (Unit *u, a_inode *parent) { a_inode *a; while ((a = parent->child)) { free_all_ainos (u, a); dispose_aino (u, &parent->child, a); } } static int flush_cache (Unit *unit, int num) { int i = 0; int cnt = 100; //write_log (_T("FILESYS: flushing cache unit %d (max %d items)\n"), unit->unit, num); if (num == 0) num = -1; while (i < num || num < 0) { int ii = i; a_inode *parent = unit->rootnode.prev->parent; a_inode **aip; aip = &parent->child; aino_test (parent); if (parent && !parent->locked_children) { for (;;) { a_inode *aino = *aip; aino_test (aino); if (aino == 0) break; /* Not recyclable if next == 0 (i.e., not chained into recyclable list), or if parent directory is being ExNext()ed. */ if (aino->next == 0) { aip = &aino->sibling; } else { if (aino->shlock > 0 || aino->elock) write_log (_T("panic: freeing locked a_inode!\n")); de_recycle_aino (unit, aino); dispose_aino (unit, aip, aino); i++; } } } { //if (unit->rootnode.next != unit->rootnode.prev) { /* In the previous loop, we went through all children of one parent. Re-arrange the recycled list so that we'll find a different parent the next time around. (infinite loop if there is only one parent?) */ int maxloop = 10000; do { unit->rootnode.next->prev = unit->rootnode.prev; unit->rootnode.prev->next = unit->rootnode.next; unit->rootnode.next = unit->rootnode.prev; unit->rootnode.prev = unit->rootnode.prev->prev; unit->rootnode.prev->next = unit->rootnode.next->prev = &unit->rootnode; } while (unit->rootnode.prev->parent == parent && maxloop-- > 0); } if (i == ii) cnt--; if (cnt <= 0) break; } return unit->aino_cache_size > 0 ? 0 : 1; } static void recycle_aino (Unit *unit, a_inode *new_aino) { aino_test (new_aino); if (new_aino->dir || new_aino->shlock > 0 || new_aino->elock || new_aino == &unit->rootnode) /* Still in use */ return; TRACE3((_T("Recycling; cache size %d, total_locked %d\n"), unit->aino_cache_size, unit->total_locked_ainos)); if (unit->aino_cache_size > 5000 + unit->total_locked_ainos) { /* Reap a few. */ flush_cache (unit, 50); #if 0 { TCHAR buffer[40]; _stprintf (buffer, "%d ainos reaped.\n", i); TRACE ((buffer)); } #endif } aino_test (new_aino); /* Chain it into circular list. */ new_aino->next = unit->rootnode.next; new_aino->prev = &unit->rootnode; new_aino->prev->next = new_aino; new_aino->next->prev = new_aino; aino_test (new_aino->next); aino_test (new_aino->prev); unit->aino_cache_size++; } void filesys_flush_cache (void) { } static void update_child_names (Unit *unit, a_inode *a, a_inode *parent) { int l0 = _tcslen (parent->nname) + 2; while (a != 0) { TCHAR *name_start; TCHAR *new_name; TCHAR dirsep[2] = { FSDB_DIR_SEPARATOR, '\0' }; a->parent = parent; name_start = _tcsrchr (a->nname, FSDB_DIR_SEPARATOR); if (name_start == 0) { write_log (_T("malformed file name")); } name_start++; new_name = xmalloc (TCHAR, _tcslen (name_start) + l0); _tcscpy (new_name, parent->nname); _tcscat (new_name, dirsep); _tcscat (new_name, name_start); xfree (a->nname); a->nname = new_name; if (a->child) update_child_names (unit, a->child, a); a = a->sibling; } } static void move_aino_children (Unit *unit, a_inode *from, a_inode *to) { aino_test (from); aino_test (to); to->child = from->child; from->child = 0; update_child_names (unit, to->child, to); } static void delete_aino (Unit *unit, a_inode *aino) { a_inode **aip; TRACE((_T("deleting aino %x\n"), aino->uniq)); aino_test (aino); aino->dirty = 1; aino->deleted = 1; de_recycle_aino (unit, aino); /* If any ExKeys are currently pointing at us, advance them. */ if (aino->parent->exnext_count > 0) { int i; TRACE((_T("entering exkey validation\n"))); for (i = 0; i < EXKEYS; i++) { ExamineKey *k = unit->examine_keys + i; if (k->uniq == 0) continue; if (k->aino == aino->parent) { TRACE((_T("Same parent found for %d\n"), i)); if (k->curr_file == aino) { k->curr_file = aino->sibling; TRACE((_T("Advancing curr_file\n"))); } } } } aip = &aino->parent->child; while (*aip != aino && *aip != 0) aip = &(*aip)->sibling; if (*aip != aino) { write_log (_T("Couldn't delete aino.\n")); return; } dispose_aino (unit, aip, aino); } static a_inode *lookup_sub (a_inode *dir, uae_u32 uniq) { a_inode **cp = &dir->child; a_inode *c, *retval; for (;;) { c = *cp; if (c == 0) return 0; if (c->uniq == uniq) { retval = c; break; } if (c->dir) { a_inode *a = lookup_sub (c, uniq); if (a != 0) { retval = a; break; } } cp = &c->sibling; } if (! dir->locked_children) { /* Move to the front to speed up repeated lookups. Don't do this if an ExNext is going on in this directory, or we'll terminally confuse it. */ *cp = c->sibling; c->sibling = dir->child; dir->child = c; } return retval; } static a_inode *lookup_aino (Unit *unit, uae_u32 uniq) { a_inode *a; int hash = uniq % MAX_AINO_HASH; if (uniq == 0) return &unit->rootnode; a = unit->aino_hash[hash]; if (a == 0 || a->uniq != uniq) a = lookup_sub (&unit->rootnode, uniq); else unit->nr_cache_hits++; unit->nr_cache_lookups++; unit->aino_hash[hash] = a; aino_test (a); return a; } TCHAR *build_nname (const TCHAR *d, const TCHAR *n) { TCHAR dsep[2] = { FSDB_DIR_SEPARATOR, 0 }; TCHAR *p = xmalloc (TCHAR, _tcslen (d) + 1 + _tcslen (n) + 1); _tcscpy (p, d); _tcscat (p, dsep); _tcscat (p, n); return p; } TCHAR *build_aname (const TCHAR *d, const TCHAR *n) { TCHAR *p = xmalloc (TCHAR, _tcslen (d) + 1 + _tcslen (n) + 1); _tcscpy (p, d); _tcscat (p, _T("/")); _tcscat (p, n); return p; } /* This gets called to translate an Amiga name that some program used to * a name that we can use on the native filesystem. */ static TCHAR *get_nname (Unit *unit, a_inode *base, TCHAR *rel, TCHAR **modified_rel, uae_u64 *uniq_ext) { TCHAR *found; TCHAR *p = 0; *modified_rel = 0; if (unit->volflags & MYVOLUMEINFO_ARCHIVE) { if (zfile_exists_archive (base->nname, rel)) return build_nname (base->nname, rel); return NULL; } else if (unit->volflags & MYVOLUMEINFO_CDFS) { if (isofs_exists (unit->ui.cdfs_superblock, base->uniq_external, rel, uniq_ext)) return build_nname (base->nname, rel); return NULL; } aino_test (base); /* If we have a mapping of some other aname to "rel", we must pretend * it does not exist. * This can happen for example if an Amiga program creates a * file called ".". We can't represent this in our filesystem, * so we create a special file "uae_xxx" and record the mapping * aname "." -> nname "uae_xxx" in the database. Then, the Amiga * program looks up "uae_xxx" (yes, it's contrived). The filesystem * should not make the uae_xxx file visible to the Amiga side. */ if (fsdb_used_as_nname (base, rel)) return 0; /* A file called "." (or whatever else is invalid on this filesystem) * does not exist, as far as the Amiga side is concerned. */ if (fsdb_name_invalid_dir (rel)) return 0; /* See if we have a file that has the same name as the aname we are * looking for. */ found = fsdb_search_dir (base->nname, rel); if (found == 0) return found; if (found == rel) return build_nname (base->nname, rel); *modified_rel = found; return build_nname (base->nname, found); } static TCHAR *create_nname (Unit *unit, a_inode *base, TCHAR *rel) { TCHAR *p; aino_test (base); /* We are trying to create a file called REL. */ /* If the name is used otherwise in the directory (or globally), we * need a new unique nname. */ if (fsdb_name_invalid (rel) || fsdb_used_as_nname (base, rel)) { #if 0 oh_dear: #endif if (currprefs.filesys_no_uaefsdb && !(base->volflags & MYVOLUMEINFO_STREAMS)) { write_log (_T("illegal filename '%s', no stream supporting filesystem and uaefsdb disabled\n"), rel); return 0; } p = fsdb_create_unique_nname (base, rel); return p; } p = build_nname (base->nname, rel); #if 0 /* Delete this code once we know everything works. */ if (access (p, R_OK) >= 0 || errno != ENOENT) { write_log (_T("Filesystem in trouble... please report.\n")); xfree (p); goto oh_dear; } #endif return p; } static int fill_file_attrs (Unit *u, a_inode *base, a_inode *c) { if (u->volflags & MYVOLUMEINFO_ARCHIVE) { int isdir, flags; TCHAR *comment; zfile_fill_file_attrs_archive (c->nname, &isdir, &flags, &comment); c->dir = isdir; c->amigaos_mode = 0; if (flags >= 0) c->amigaos_mode = flags; c->comment = comment; return 1; } else if (u->volflags & MYVOLUMEINFO_CDFS) { int isdir, flags; TCHAR *comment; isofss_fill_file_attrs (u->ui.cdfs_superblock, base->uniq_external, &isdir, &flags, &comment, c->uniq_external); c->dir = isdir; c->amigaos_mode = 0; if (flags >= 0) c->amigaos_mode = flags; #ifdef FSUAE //else { // //c->amigaos_mode = A_FIBF_READ| A_FIBF_EXECUTE; // //c->amigaos_mode = filesys_parse_mask(c->amigaos_mode); //} #endif c->comment = comment; return 1; } else { return fsdb_fill_file_attrs (base, c); } return 0; } /* * This gets called if an ACTION_EXAMINE_NEXT happens and we hit an object * for which we know the name on the native filesystem, but no corresponding * Amiga filesystem name. * @@@ For DOS filesystems, it might make sense to declare the new name * "weak", so that it can get overriden by a subsequent call to get_nname(). * That way, if someone does "dir :" and there is a file "foobar.inf", and * someone else tries to open "foobar.info", get_nname() could maybe made to * figure out that this is supposed to be the file "foobar.inf". * DOS sucks... */ static TCHAR *get_aname (Unit *unit, a_inode *base, TCHAR *rel) { return my_strdup (rel); } static void init_child_aino_tree (Unit *unit, a_inode *base, a_inode *aino) { /* Update tree structure */ aino->parent = base; aino->child = 0; aino->sibling = base->child; base->child = aino; aino->next = aino->prev = 0; aino->volflags = unit->volflags; } static void init_child_aino (Unit *unit, a_inode *base, a_inode *aino) { aino->uniq = ++a_uniq; if (a_uniq == 0xFFFFFFFF) { write_log (_T("Running out of a_inodes (prepare for big trouble)!\n")); } aino->shlock = 0; aino->elock = 0; aino->dirty = 0; aino->deleted = 0; aino->mountcount = unit->mountcount; /* For directories - this one isn't being ExNext()ed yet. */ aino->locked_children = 0; aino->exnext_count = 0; /* But the parent might be. */ if (base->exnext_count) { unit->total_locked_ainos++; base->locked_children++; } init_child_aino_tree (unit, base, aino); aino_test_init (aino); aino_test (aino); } static a_inode *new_child_aino (Unit *unit, a_inode *base, TCHAR *rel) { TCHAR *modified_rel; TCHAR *nn; a_inode *aino = NULL; int isvirtual = unit->volflags & (MYVOLUMEINFO_ARCHIVE | MYVOLUMEINFO_CDFS); TRACE((_T("new_child_aino %s, %s\n"), base->aname, rel)); if (!isvirtual) aino = fsdb_lookup_aino_aname (base, rel); if (aino == 0) { uae_u64 uniq_ext = 0; nn = get_nname (unit, base, rel, &modified_rel, &uniq_ext); if (nn == 0) return 0; aino = xcalloc (a_inode, 1); if (aino == 0) return 0; aino->uniq_external = uniq_ext; aino->aname = modified_rel ? modified_rel : my_strdup (rel); aino->nname = nn; aino->comment = 0; aino->has_dbentry = 0; if (!fill_file_attrs (unit, base, aino)) { xfree (aino); return 0; } if (aino->dir && !isvirtual) fsdb_clean_dir (aino); } init_child_aino (unit, base, aino); recycle_aino (unit, aino); TRACE((_T("created aino %x, lookup, amigaos_mode %d\n"), aino->uniq, aino->amigaos_mode)); return aino; } static a_inode *create_child_aino (Unit *unit, a_inode *base, TCHAR *rel, int isdir) { a_inode *aino = xcalloc (a_inode, 1); if (aino == 0) return 0; aino->nname = create_nname (unit, base, rel); if (!aino->nname) { free (aino); return 0; } aino->aname = my_strdup (rel); init_child_aino (unit, base, aino); aino->amigaos_mode = 0; aino->dir = isdir; aino->comment = 0; aino->has_dbentry = 0; aino->dirty = 1; recycle_aino (unit, aino); TRACE((_T("created aino %x, create\n"), aino->uniq)); return aino; } static a_inode *lookup_child_aino (Unit *unit, a_inode *base, TCHAR *rel, int *err) { a_inode *c = base->child; int l0 = _tcslen (rel); aino_test (base); aino_test (c); if (base->dir == 0) { *err = ERROR_OBJECT_WRONG_TYPE; return 0; } while (c != 0) { int l1 = _tcslen (c->aname); if (l0 <= l1 && same_aname (rel, c->aname + l1 - l0) && (l0 == l1 || c->aname[l1-l0-1] == '/') && c->mountcount == unit->mountcount) break; c = c->sibling; } if (c != 0) return c; c = new_child_aino (unit, base, rel); if (c == 0) *err = ERROR_OBJECT_NOT_AROUND; return c; } /* Different version because for this one, REL is an nname. */ static a_inode *lookup_child_aino_for_exnext (Unit *unit, a_inode *base, TCHAR *rel, uae_u32 *err, uae_u64 uniq_external) { a_inode *c = base->child; int l0 = _tcslen (rel); int isvirtual = unit->volflags & (MYVOLUMEINFO_ARCHIVE | MYVOLUMEINFO_CDFS); aino_test (base); aino_test (c); *err = 0; while (c != 0) { int l1 = _tcslen (c->nname); /* Note: using _tcscmp here. */ if (l0 <= l1 && _tcscmp (rel, c->nname + l1 - l0) == 0 && (l0 == l1 || c->nname[l1-l0-1] == FSDB_DIR_SEPARATOR) && c->mountcount == unit->mountcount) break; c = c->sibling; } if (c != 0) return c; if (!isvirtual) c = fsdb_lookup_aino_nname (base, rel); if (c == 0) { c = xcalloc (a_inode, 1); if (c == 0) { *err = ERROR_NO_FREE_STORE; return 0; } c->nname = build_nname (base->nname, rel); c->aname = get_aname (unit, base, rel); c->comment = 0; c->uniq_external = uniq_external; c->has_dbentry = 0; if (!fill_file_attrs (unit, base, c)) { xfree (c); *err = ERROR_NO_FREE_STORE; return 0; } if (c->dir && !isvirtual) fsdb_clean_dir (c); } init_child_aino (unit, base, c); recycle_aino (unit, c); TRACE((_T("created aino %x, exnext\n"), c->uniq)); return c; } static a_inode *get_aino (Unit *unit, a_inode *base, const TCHAR *rel, int *err) { TCHAR *tmp; TCHAR *p; a_inode *curr; int i; aino_test (base); *err = 0; TRACE((_T("get_path(%s,%s)\n"), base->aname, rel)); /* root-relative path? */ for (i = 0; rel[i] && rel[i] != '/' && rel[i] != ':'; i++) ; if (':' == rel[i]) rel += i+1; tmp = my_strdup (rel); p = tmp; curr = base; while (*p) { /* start with a slash? go up a level. */ if (*p == '/') { if (curr->parent != 0) curr = curr->parent; p++; } else { a_inode *next; TCHAR *component_end; component_end = _tcschr (p, '/'); if (component_end != 0) *component_end = '\0'; next = lookup_child_aino (unit, curr, p, err); if (next == 0) { /* if only last component not found, return parent dir. */ if (*err != ERROR_OBJECT_NOT_AROUND || component_end != 0) curr = 0; /* ? what error is appropriate? */ break; } curr = next; if (component_end) p = component_end+1; else break; } } xfree (tmp); return curr; } static uae_u32 notifyhash (const TCHAR *s) { uae_u32 hash = 0; while (*s) hash = (hash << 5) + *s++; return hash % NOTIFY_HASH_SIZE; } static Notify *new_notify (Unit *unit, TCHAR *name) { Notify *n = xmalloc (Notify, 1); uae_u32 hash = notifyhash (name); n->next = unit->notifyhash[hash]; unit->notifyhash[hash] = n; n->partname = name; return n; } #if 0 static void free_notify_item (Notify *n) { xfree (n->fullname); xfree (n->partname); xfree (n); } #endif static void free_notify (Unit *unit, int hash, Notify *n) { Notify *n1, *prev = 0; for (n1 = unit->notifyhash[hash]; n1; n1 = n1->next) { if (n == n1) { if (prev) prev->next = n->next; else unit->notifyhash[hash] = n->next; break; } prev = n1; } } static void startup_update_unit (Unit *unit, UnitInfo *uinfo) { if (!unit) return; xfree (unit->ui.volname); memcpy (&unit->ui, uinfo, sizeof (UnitInfo)); unit->ui.devname = uinfo->devname; #ifdef FSUAE //printf("%p %s\n", uinfo->volname, uinfo->volname); if (!uinfo->volname) { // prevents a crash on linux/mac, when e.g. a cd-rom // image was not found uinfo->volname = my_strdup(""); } //printf("%p %s\n", uinfo->volname, uinfo->volname); #endif unit->ui.volname = my_strdup (uinfo->volname); /* might free later for rename */ } static Unit *startup_create_unit (UnitInfo *uinfo, int num) { int i; Unit *unit, *u; unit = xcalloc (Unit, 1); /* keep list in insertion order */ u = units; if (u) { while (u->next) u = u->next; u->next = unit; } else { units = unit; } uinfo->self = unit; unit->volume = 0; unit->port = m68k_areg (regs, 5); unit->unit = num; startup_update_unit (unit, uinfo); unit->cmds_complete = 0; unit->cmds_sent = 0; unit->cmds_acked = 0; clear_exkeys (unit); unit->total_locked_ainos = 0; unit->keys = 0; for (i = 0; i < NOTIFY_HASH_SIZE; i++) { Notify *n = unit->notifyhash[i]; while (n) { Notify *n2 = n; n = n->next; xfree (n2->fullname); xfree (n2->partname); xfree (n2); } unit->notifyhash[i] = 0; } unit->rootnode.aname = uinfo->volname; unit->rootnode.nname = uinfo->rootdir; unit->rootnode.sibling = 0; unit->rootnode.next = unit->rootnode.prev = &unit->rootnode; unit->rootnode.uniq = 0; unit->rootnode.parent = 0; unit->rootnode.child = 0; unit->rootnode.dir = 1; unit->rootnode.amigaos_mode = 0; unit->rootnode.shlock = 0; unit->rootnode.elock = 0; unit->rootnode.comment = 0; unit->rootnode.has_dbentry = 0; unit->rootnode.volflags = uinfo->volflags; aino_test_init (&unit->rootnode); unit->aino_cache_size = 0; for (i = 0; i < MAX_AINO_HASH; i++) unit->aino_hash[i] = 0; return unit; } static bool mount_cd (UnitInfo *uinfo, int nr, struct mytimeval *ctime, uae_u64 *uniq) { uinfo->cddevno = nr - cd_unit_offset; if (!sys_command_open (uinfo->cddevno)) { write_log (_T("Failed attempt to open CD unit %d\n"), uinfo->cddevno); return false; } #ifdef RETROPLATFORM rp_cd_device_enable (uinfo->cddevno, true); #endif uinfo->cdfs_superblock = isofs_mount(uinfo->cddevno, uniq); uinfo->wasisempty = true; struct isofs_info ii; if (isofs_mediainfo (uinfo->cdfs_superblock, &ii)) { xfree (uinfo->volname); if (ii.media) { uinfo->wasisempty = false; if (!ii.unknown_media) { uinfo->volname = my_strdup (ii.volumename); if (ctime) { ctime->tv_sec = ii.creation; ctime->tv_usec = 0; } set_highcyl (uinfo, ii.totalblocks); #ifdef RETROPLATFORM rp_cd_image_change (uinfo->cddevno, ii.devname); #endif } } uinfo->unknown_media = ii.unknown_media; } uinfo->cd_open = true; return true; } #ifdef UAE_FILESYS_THREADS static void *filesys_thread (void *unit_v); #endif static void filesys_start_thread (UnitInfo *ui, int nr) { ui->unit_pipe = 0; ui->back_pipe = 0; ui->reset_state = FS_STARTUP; if (!isrestore ()) { ui->startup = 0; ui->self = 0; } #ifdef UAE_FILESYS_THREADS if (is_virtual (nr)) { ui->unit_pipe = xmalloc (smp_comm_pipe, 1); ui->back_pipe = xmalloc (smp_comm_pipe, 1); init_comm_pipe (ui->unit_pipe, 100, 3); init_comm_pipe (ui->back_pipe, 100, 1); #ifdef FSUAE if (!uae_deterministic_mode()) { #endif uae_start_thread (_T("filesys"), filesys_thread, (void *)ui, &ui->tid); #ifdef FSUAE } #endif } #endif if (isrestore ()) { if (ui->unit_type == UNIT_CDFS) { mount_cd (ui, nr, NULL, &ui->self->rootnode.uniq_external); } startup_update_unit (ui->self, ui); } } static uae_u32 REGPARAM2 startup_handler (TrapContext *context) { /* Just got the startup packet. It's in D3. DosBase is in A2, * our allocated volume structure is in A3, A5 is a pointer to * our port. */ uaecptr rootnode = get_long (m68k_areg (regs, 2) + 34); uaecptr dos_info = get_long (rootnode + 24) << 2; uaecptr pkt = m68k_dreg (regs, 3); uaecptr arg1 = get_long (pkt + dp_Arg1); uaecptr arg2 = get_long (pkt + dp_Arg2); uaecptr arg3 = get_long (pkt + dp_Arg3); uaecptr devnode; int nr; Unit *unit; UnitInfo *uinfo; int late = 0; int ed, ef; uae_u64 uniq = 0; uae_u32 cdays; struct mytimeval ctime = { 0 }; // 1.3: // dp_Arg1 contains crap (Should be name of device) // dp_Arg2 = works as documented // dp_Arg3 = NULL (!?). (Should be DeviceNode) for (nr = 0; nr < MAX_FILESYSTEM_UNITS; nr++) { /* Hardfile volume name? */ if (!mountinfo.ui[nr].open) continue; if (!is_virtual (nr)) continue; if (mountinfo.ui[nr].startup == arg2) break; } if (nr == MAX_FILESYSTEM_UNITS) { write_log (_T("Attempt to mount unknown filesystem device\n")); put_long (pkt + dp_Res1, DOS_FALSE); put_long (pkt + dp_Res2, ERROR_DEVICE_NOT_MOUNTED); return 0; } uinfo = mountinfo.ui + nr; //devnode = arg3 << 2; devnode = uinfo->devicenode; cdays = 3800 + nr; if (uinfo->unit_type == UNIT_CDFS) { ed = ef = 0; if (!mount_cd (uinfo, nr, &ctime, &uniq)) { put_long (pkt + dp_Res1, DOS_FALSE); put_long (pkt + dp_Res2, ERROR_DEVICE_NOT_MOUNTED); return 0; } } else { ed = my_existsdir (uinfo->rootdir); ef = my_existsfile (uinfo->rootdir); if (!uinfo->wasisempty && !ef && !ed) { write_log (_T("Failed attempt to mount device '%s' (%s)\n"), uinfo->devname, uinfo->rootdir); put_long (pkt + dp_Res1, DOS_FALSE); put_long (pkt + dp_Res2, ERROR_DEVICE_NOT_MOUNTED); return 0; } } if (!uinfo->unit_pipe) { late = 1; filesys_start_thread (uinfo, nr); } unit = startup_create_unit (uinfo, nr); unit->volflags = uinfo->volflags; unit->rootnode.uniq_external = uniq; /* write_comm_pipe_int (unit->ui.unit_pipe, -1, 1);*/ write_log (_T("FS: %s (flags=%08X,E=%d,ED=%d,EF=%d,native='%s') starting..\n"), unit->ui.volname, unit->volflags, uinfo->wasisempty, ed, ef, unit->ui.rootdir); /* fill in our process in the device node */ put_long (devnode + 8, unit->port); unit->dosbase = m68k_areg (regs, 2); /* make new volume */ unit->volume = m68k_areg (regs, 3) + 32; put_long (unit->volume + 180 - 32, devnode); #ifdef UAE_FILESYS_THREADS unit->locklist = m68k_areg (regs, 3) + 8; #else unit->locklist = m68k_areg (regs, 3); #endif unit->dummy_message = m68k_areg (regs, 3) + 12; put_long (unit->dummy_message + 10, 0); /* Prepare volume information */ put_long (unit->volume + 4, 2); /* Type = dt_volume */ put_long (unit->volume + 12, 0); /* Lock */ put_long (unit->volume + 16, cdays); /* Creation Date */ put_long (unit->volume + 20, 0); put_long (unit->volume + 24, 0); put_long (unit->volume + 28, 0); /* lock list */ put_long (unit->volume + 40, (unit->volume + 44) >> 2); /* Name */ put_byte (unit->volume + 44, 0); if (!uinfo->wasisempty && !uinfo->unknown_media) { int isvirtual = unit->volflags & (MYVOLUMEINFO_ARCHIVE | MYVOLUMEINFO_CDFS); /* Set volume if non-empty */ set_volume_name (unit, &ctime); if (!isvirtual) fsdb_clean_dir (&unit->rootnode); } put_long (unit->volume + 8, unit->port); put_long (unit->volume + 32, uinfo->unit_type == UNIT_CDFS ? DISK_TYPE_DOS : DISK_TYPE_DOS_FFS); put_long (pkt + dp_Res1, DOS_TRUE); return 1 | (late ? 2 : 0); } static void do_info (Unit *unit, dpacket packet, uaecptr info, bool disk_info) { struct fs_usage fsu; int ret, err = ERROR_NO_FREE_STORE; int blocksize, nr; uae_u32 dostype; bool fs = false, media = false; blocksize = 512; /* not FFS because it is not understood by WB1.x C:Info */ dostype = DISK_TYPE_DOS; nr = unit->unit; if (unit->volflags & MYVOLUMEINFO_ARCHIVE) { ret = zfile_fs_usage_archive (unit->ui.rootdir, 0, &fsu); fs = true; media = filesys_isvolume (unit) != 0; } else if (unit->volflags & MYVOLUMEINFO_CDFS) { struct isofs_info ii; ret = isofs_mediainfo (unit->ui.cdfs_superblock, &ii) ? 0 : 1; if (!ret) { media = ii.media; nr = unit->unit - cd_unit_offset; blocksize = ii.blocksize; if (ii.media) { fsu.fsu_blocks = ii.blocks; fsu.fsu_bavail = 0; } } } else { ret = get_fs_usage (unit->ui.rootdir, 0, &fsu); if (ret) err = dos_errno (); fs = true; media = filesys_isvolume (unit) != 0; } if (ret != 0) { PUT_PCK_RES1 (packet, DOS_FALSE); PUT_PCK_RES2 (packet, err); return; } put_long (info, 0); /* errors */ put_long (info + 4, nr); /* unit number */ put_long (info + 8, unit->ui.readonly || unit->ui.locked ? 80 : 82); /* state */ put_long (info + 20, blocksize); /* bytesperblock */ put_long (info + 32, 0); /* inuse */ if (unit->ui.unknown_media) { if (!disk_info) { PUT_PCK_RES1 (packet, DOS_FALSE); PUT_PCK_RES2 (packet, ERROR_NOT_A_DOS_DISK); return; } put_long (info + 12, 0); put_long (info + 16, 0); put_long (info + 24, ('B' << 24) | ('A' << 16) | ('D' << 8) | (0 << 0)); /* ID_UNREADABLE_DISK */ put_long (info + 28, 0); } else if (!media) { if (!disk_info) { PUT_PCK_RES1 (packet, DOS_FALSE); PUT_PCK_RES2 (packet, ERROR_NO_DISK); return; } put_long (info + 12, 0); put_long (info + 16, 0); put_long (info + 24, -1); /* ID_NO_DISK_PRESENT */ put_long (info + 28, 0); } else { if (fs && currprefs.filesys_limit) { if (fsu.fsu_blocks > (uae_u64)currprefs.filesys_limit * 1024 / blocksize) { uae_u32 oldblocks = fsu.fsu_blocks; fsu.fsu_blocks = (uae_u32)((uae_u64)currprefs.filesys_limit * 1024 / blocksize); fsu.fsu_bavail = (uae_u32)((uae_u64)fsu.fsu_bavail * fsu.fsu_blocks / oldblocks); } } put_long (info + 12, fsu.fsu_blocks); /* numblocks */ put_long (info + 16, fsu.fsu_blocks - fsu.fsu_bavail); /* inuse */ put_long (info + 24, dostype); /* disk type */ put_long (info + 28, unit->volume >> 2); /* volume node */ put_long (info + 32, (get_long (unit->volume + 28) || unit->keys) ? -1 : 0); /* inuse */ } PUT_PCK_RES1 (packet, DOS_TRUE); } static void action_disk_info (Unit *unit, dpacket packet) { #ifdef FSUAE g_packet_delay = 10; #endif TRACE((_T("ACTION_DISK_INFO\n"))); do_info (unit, packet, GET_PCK_ARG1 (packet) << 2, true); } static void action_info (Unit *unit, dpacket packet) { #ifdef FSUAE g_packet_delay = 10; #endif TRACE((_T("ACTION_INFO\n"))); do_info (unit, packet, GET_PCK_ARG2 (packet) << 2, false); } static void free_key (Unit *unit, Key *k) { Key *k1; Key *prev = 0; for (k1 = unit->keys; k1; k1 = k1->next) { if (k == k1) { if (prev) prev->next = k->next; else unit->keys = k->next; break; } prev = k1; } for (struct lockrecord *lr = k->record; lr;) { struct lockrecord *next = lr->next; xfree (lr); lr = next; } if (k->fd != NULL) fs_closefile (k->fd); xfree(k); } static Key *lookup_key (Unit *unit, uae_u32 uniq) { Key *k; unsigned int total = 0; /* It's hardly worthwhile to optimize this - most of the time there are * only one or zero keys. */ for (k = unit->keys; k; k = k->next) { total++; if (uniq == k->uniq) return k; } write_log (_T("Error: couldn't find key %u / %u!\n"), uniq, total); return 0; } static Key *new_key (Unit *unit) { Key *k = xcalloc (Key, 1); k->uniq = ++key_uniq; k->fd = NULL; k->file_pos = 0; k->next = unit->keys; unit->keys = k; return k; } #if TRACING_ENABLED static void dumplock (Unit *unit, uaecptr lock) { a_inode *a; TRACE((_T("LOCK: 0x%lx"), lock)); if (!lock) { TRACE((_T("\n"))); return; } TRACE((_T("{ next=0x%lx, mode=%ld, handler=0x%lx, volume=0x%lx, aino %lx "), get_long (lock) << 2, get_long (lock + 8), get_long (lock + 12), get_long (lock + 16), get_long (lock + 4))); a = lookup_aino (unit, get_long (lock + 4)); if (a == 0) { TRACE((_T("not found!"))); } else { TRACE((_T("%s"), a->nname)); } TRACE((_T(" }\n"))); } #endif static a_inode *find_aino (Unit *unit, uaecptr lock, const TCHAR *name, int *err) { a_inode *a; if (lock) { a_inode *olda = lookup_aino (unit, get_long (lock + 4)); if (olda == 0) { /* That's the best we can hope to do. */ a = get_aino (unit, &unit->rootnode, name, err); } else { TRACE((_T("aino: 0x%08lx"), (unsigned long int)olda->uniq)); TRACE((_T(" \"%s\"\n"), olda->nname)); a = get_aino (unit, olda, name, err); } } else { a = get_aino (unit, &unit->rootnode, name, err); } if (a) { TRACE((_T("aino=\"%s\"\n"), a->nname)); } aino_test (a); return a; } static uaecptr make_lock (Unit *unit, uae_u32 uniq, long mode) { /* allocate lock from the list kept by the assembly code */ uaecptr lock; lock = get_long (unit->locklist); put_long (unit->locklist, get_long (lock)); lock += 4; put_long (lock + 4, uniq); put_long (lock + 8, mode); put_long (lock + 12, unit->port); put_long (lock + 16, unit->volume >> 2); /* prepend to lock chain */ put_long (lock, get_long (unit->volume + 28)); put_long (unit->volume + 28, lock >> 2); DUMPLOCK(unit, lock); return lock; } #define NOTIFY_CLASS 0x40000000 #define NOTIFY_CODE 0x1234 #define NRF_SEND_MESSAGE 1 #define NRF_SEND_SIGNAL 2 #define NRF_WAIT_REPLY 8 #define NRF_NOTIFY_INITIAL 16 #define NRF_MAGIC (1 << 31) static void notify_send (Unit *unit, Notify *n) { uaecptr nr = n->notifyrequest; int flags = get_long (nr + 12); if (flags & NRF_SEND_MESSAGE) { if (!(flags & NRF_WAIT_REPLY) || ((flags & NRF_WAIT_REPLY) && !(flags & NRF_MAGIC))) { uae_NotificationHack (unit->port, nr); } else if (flags & NRF_WAIT_REPLY) { put_long (nr + 12, get_long (nr + 12) | NRF_MAGIC); } } else if (flags & NRF_SEND_SIGNAL) { uae_Signal (get_long (nr + 16), 1 << get_byte (nr + 20)); } } static void notify_check (Unit *unit, a_inode *a) { Notify *n; int hash = notifyhash (a->aname); for (n = unit->notifyhash[hash]; n; n = n->next) { uaecptr nr = n->notifyrequest; if (same_aname (n->partname, a->aname)) { int err; a_inode *a2 = find_aino (unit, 0, n->fullname, &err); if (err == 0 && a == a2) notify_send (unit, n); } } if (a->parent) { hash = notifyhash (a->parent->aname); for (n = unit->notifyhash[hash]; n; n = n->next) { uaecptr nr = n->notifyrequest; if (same_aname (n->partname, a->parent->aname)) { int err; a_inode *a2 = find_aino (unit, 0, n->fullname, &err); if (err == 0 && a->parent == a2) notify_send (unit, n); } } } } static void action_add_notify (Unit *unit, dpacket packet) { uaecptr nr = GET_PCK_ARG1 (packet); int flags; Notify *n; TCHAR *name, *p, *partname; TRACE((_T("ACTION_ADD_NOTIFY\n"))); name = my_strdup (char1 (get_long (nr + 4))); flags = get_long (nr + 12); if (!(flags & (NRF_SEND_MESSAGE | NRF_SEND_SIGNAL))) { PUT_PCK_RES1 (packet, DOS_FALSE); PUT_PCK_RES2 (packet, ERROR_BAD_NUMBER); return; } #if 0 write_log (_T("Notify:\n")); write_log (_T("nr_Name '%s'\n"), char1 (get_long (nr + 0))); write_log (_T("nr_FullName '%s'\n"), name); write_log (_T("nr_UserData %08X\n"), get_long (nr + 8)); write_log (_T("nr_Flags %08X\n"), flags); if (flags & NRF_SEND_MESSAGE) { write_log (_T("Message NotifyRequest, port = %08X\n"), get_long (nr + 16)); } else if (flags & NRF_SEND_SIGNAL) { write_log (_T("Signal NotifyRequest, Task = %08X signal = %d\n"), get_long (nr + 16), get_long (nr + 20)); } else { write_log (_T("corrupt NotifyRequest\n")); } #endif p = name + _tcslen (name) - 1; if (p[0] == ':') p--; while (p > name && p[0] != ':' && p[0] != '/') p--; if (p[0] == ':' || p[0] == '/') p++; partname = my_strdup (p); n = new_notify (unit, partname); n->notifyrequest = nr; n->fullname = name; if (flags & NRF_NOTIFY_INITIAL) { int err; a_inode *a = find_aino (unit, 0, n->fullname, &err); if (err == 0) notify_send (unit, n); } PUT_PCK_RES1 (packet, DOS_TRUE); } static void action_remove_notify (Unit *unit, dpacket packet) { uaecptr nr = GET_PCK_ARG1 (packet); Notify *n; int hash; TRACE((_T("ACTION_REMOVE_NOTIFY\n"))); for (hash = 0; hash < NOTIFY_HASH_SIZE; hash++) { for (n = unit->notifyhash[hash]; n; n = n->next) { if (n->notifyrequest == nr) { //write_log (_T("NotifyRequest %08X freed\n"), n->notifyrequest); xfree (n->fullname); xfree (n->partname); free_notify (unit, hash, n); PUT_PCK_RES1 (packet, DOS_TRUE); return; } } } write_log (_T("Tried to free non-existing NotifyRequest %08X\n"), nr); PUT_PCK_RES1 (packet, DOS_TRUE); } static void free_lock (Unit *unit, uaecptr lock) { if (! lock) return; if (lock == get_long (unit->volume + 28) << 2) { put_long (unit->volume + 28, get_long (lock)); } else { uaecptr current = get_long (unit->volume + 28); uaecptr next = 0; while (current) { next = get_long (current << 2); if (lock == next << 2) break; current = next; } if (!current) { write_log (_T("tried to unlock non-existing lock %x\n"), lock); return; } put_long (current << 2, get_long (lock)); } lock -= 4; put_long (lock, get_long (unit->locklist)); put_long (unit->locklist, lock); } static void action_lock (Unit *unit, dpacket packet) { uaecptr lock = GET_PCK_ARG1 (packet) << 2; uaecptr name = GET_PCK_ARG2 (packet) << 2; long mode = GET_PCK_ARG3 (packet); a_inode *a; int err; if (mode != SHARED_LOCK && mode != EXCLUSIVE_LOCK) { TRACE((_T("Bad mode %d (should be %d or %d).\n"), mode, SHARED_LOCK, EXCLUSIVE_LOCK)); mode = SHARED_LOCK; } #ifdef FSUAE g_packet_delay = 2; #endif TRACE((_T("ACTION_LOCK(0x%lx, \"%s\", %d)\n"), lock, bstr (unit, name), mode)); DUMPLOCK(unit, lock); a = find_aino (unit, lock, bstr (unit, name), &err); if (err == 0 && (a->elock || (mode != SHARED_LOCK && a->shlock > 0))) { err = ERROR_OBJECT_IN_USE; } /* Lock() doesn't do access checks. */ if (err != 0) { PUT_PCK_RES1 (packet, DOS_FALSE); PUT_PCK_RES2 (packet, err); return; } if (mode == SHARED_LOCK) a->shlock++; else a->elock = 1; de_recycle_aino (unit, a); PUT_PCK_RES1 (packet, make_lock (unit, a->uniq, mode) >> 2); } static void action_free_lock (Unit *unit, dpacket packet) { uaecptr lock = GET_PCK_ARG1 (packet) << 2; a_inode *a; #ifdef FSUAE g_packet_delay = 2; #endif TRACE((_T("ACTION_FREE_LOCK(0x%lx)\n"), lock)); DUMPLOCK(unit, lock); a = lookup_aino (unit, get_long (lock + 4)); if (a == 0) { PUT_PCK_RES1 (packet, DOS_FALSE); PUT_PCK_RES2 (packet, ERROR_OBJECT_NOT_AROUND); return; } if (a->elock) a->elock = 0; else a->shlock--; recycle_aino (unit, a); free_lock(unit, lock); PUT_PCK_RES1 (packet, DOS_TRUE); } static uaecptr action_dup_lock_2 (Unit *unit, dpacket packet, uae_u32 uniq) { uaecptr out; a_inode *a; a = lookup_aino (unit, uniq); if (a == 0) { PUT_PCK_RES1 (packet, DOS_FALSE); PUT_PCK_RES2 (packet, ERROR_OBJECT_NOT_AROUND); return 0; } /* DupLock()ing exclusive locks isn't possible, says the Autodoc, but * at least the RAM-Handler seems to allow it. Let's see what happens * if we don't. */ if (a->elock) { PUT_PCK_RES1 (packet, DOS_FALSE); PUT_PCK_RES2 (packet, ERROR_OBJECT_IN_USE); return 0; } a->shlock++; de_recycle_aino (unit, a); out = make_lock (unit, a->uniq, -2) >> 2; PUT_PCK_RES1 (packet, out); return out; } static void action_dup_lock (Unit *unit, dpacket packet) { uaecptr lock = GET_PCK_ARG1 (packet) << 2; #ifdef FSUAE g_packet_delay = 2; #endif TRACE((_T("ACTION_DUP_LOCK(0x%lx)\n"), lock)); if (!lock) { PUT_PCK_RES1 (packet, 0); return; } action_dup_lock_2 (unit, packet, get_long (lock + 4)); } static void action_lock_from_fh (Unit *unit, dpacket packet) { Key *k = lookup_key (unit, GET_PCK_ARG1 (packet)); TRACE((_T("ACTION_COPY_DIR_FH(0x%lx,'%s')\n"), GET_PCK_ARG1 (packet), k ? k->aino->aname : _T(""))); if (k == 0) { PUT_PCK_RES1 (packet, DOS_FALSE); return; } action_dup_lock_2 (unit, packet, k->aino->uniq); } static void free_exkey (Unit *unit, ExamineKey *ek) { if (--ek->aino->exnext_count == 0) { TRACE ((_T("Freeing ExKey and reducing total_locked from %d by %d\n"), unit->total_locked_ainos, ek->aino->locked_children)); unit->total_locked_ainos -= ek->aino->locked_children; ek->aino->locked_children = 0; } ek->aino = 0; ek->uniq = 0; } static ExamineKey *lookup_exkey (Unit *unit, uae_u32 uniq) { ExamineKey *ek; int i; ek = unit->examine_keys; for (i = 0; i < EXKEYS; i++, ek++) { /* Did we find a free one? */ if (ek->uniq == uniq) return ek; } write_log (_T("Houston, we have a BIG problem.\n")); return 0; } /* This is so sick... who invented ACTION_EXAMINE_NEXT? What did he THINK??? */ static ExamineKey *new_exkey (Unit *unit, a_inode *aino) { uae_u32 uniq; uae_u32 oldest = 0xFFFFFFFE; ExamineKey *ek, *oldest_ek = 0; int i; ek = unit->examine_keys; for (i = 0; i < EXKEYS; i++, ek++) { /* Did we find a free one? */ if (ek->aino == 0) continue; if (ek->uniq < oldest) oldest = (oldest_ek = ek)->uniq; } ek = unit->examine_keys; for (i = 0; i < EXKEYS; i++, ek++) { /* Did we find a free one? */ if (ek->aino == 0) goto found; } /* This message should usually be harmless. */ write_log (_T("Houston, we have a problem (%s).\n"), aino->nname); free_exkey (unit, oldest_ek); ek = oldest_ek; found: uniq = unit->next_exkey; if (uniq >= 0xFFFFFFFE) { /* Things will probably go wrong, but most likely the Amiga will crash * before this happens because of something else. */ uniq = 1; } unit->next_exkey = uniq + 1; ek->aino = aino; ek->curr_file = 0; ek->uniq = uniq; return ek; } static void move_exkeys (Unit *unit, a_inode *from, a_inode *to) { int i; unsigned long tmp = 0; for (i = 0; i < EXKEYS; i++) { ExamineKey *k = unit->examine_keys + i; if (k->uniq == 0) continue; if (k->aino == from) { k->aino = to; tmp++; } } if (tmp != from->exnext_count) write_log (_T("filesys.c: Bug in ExNext bookkeeping. BAD.\n")); to->exnext_count = from->exnext_count; to->locked_children = from->locked_children; from->exnext_count = 0; from->locked_children = 0; } static void get_fileinfo (Unit *unit, dpacket packet, uaecptr info, a_inode *aino) { struct mystat statbuf; int days, mins, ticks; int i, n, entrytype, blocksize; int fsdb_can = fsdb_cando (unit); TCHAR *xs; char *x, *x2; bool ok = true; memset (&statbuf, 0, sizeof statbuf); /* No error checks - this had better work. */ if (unit->volflags & MYVOLUMEINFO_ARCHIVE) ok = zfile_stat_archive (aino->nname, &statbuf) != 0; else if (unit->volflags & MYVOLUMEINFO_CDFS) ok = isofs_stat (unit->ui.cdfs_superblock, aino->uniq_external, &statbuf); else my_stat (aino->nname, &statbuf); if (!ok) { PUT_PCK_RES1 (packet, DOS_FALSE); PUT_PCK_RES2 (packet, ERROR_NOT_A_DOS_DISK); return; } if (aino->parent == 0) { /* Guru book says ST_ROOT = 1 (root directory, not currently used) * but some programs really expect 2 from root dir.. */ entrytype = 2; xs = unit->ui.volname; } else { entrytype = aino->dir ? 2 : -3; xs = aino->aname; } put_long (info + 4, entrytype); /* AmigaOS docs say these have to contain the same value. */ put_long (info + 120, entrytype); TRACE((_T("name=\"%s\"\n"), xs)); x2 = x = ua_fs (xs, -1); n = strlen (x); if (n > 106) n = 106; i = 8; put_byte (info + i, n); i++; while (n--) put_byte (info + i, *x), i++, x++; while (i < 108) put_byte (info + i, 0), i++; xfree (x2); put_long (info + 116, fsdb_can ? aino->amigaos_mode : fsdb_mode_supported (aino)); put_long (info + 124, statbuf.size > MAXFILESIZE32 ? MAXFILESIZE32 : (uae_u32)statbuf.size); #ifdef HAVE_ST_BLOCKS put_long (info + 128, statbuf.blocks); #else blocksize = (unit->volflags & MYVOLUMEINFO_CDFS) ? 2048 : 512; put_long (info + 128, (statbuf.size + blocksize - 1) / blocksize); #endif #ifdef FSUAE fsdb_get_file_time(aino, &days, &mins, &ticks); #else timeval_to_amiga (&statbuf.mtime, &days, &mins, &ticks); #endif put_long (info + 132, days); put_long (info + 136, mins); put_long (info + 140, ticks); if (aino->comment == 0 || !fsdb_can) put_long (info + 144, 0); else { TRACE((_T("comment=\"%s\"\n"), aino->comment)); i = 144; xs = aino->comment; if (!xs) xs= _T(""); x2 = x = ua_fs (xs, -1); n = strlen (x); if (n > 78) n = 78; put_byte (info + i, n); i++; while (n--) put_byte (info + i, *x), i++, x++; while (i < 224) put_byte (info + i, 0), i++; xfree (x2); } PUT_PCK_RES1 (packet, DOS_TRUE); } int get_native_path (uae_u32 lock, TCHAR *out) { int i = 0; for (i = 0; i < MAX_FILESYSTEM_UNITS; i++) { if (mountinfo.ui[i].self) { a_inode *a = lookup_aino (mountinfo.ui[i].self, get_long ((lock << 2) + 4)); if (a) { _tcscpy (out, a->nname); return 0; } } } return -1; } #define REC_EXCLUSIVE 0 #define REC_EXCLUSIVE_IMMED 1 #define REC_SHARED 2 #define REC_SHARED_IMMED 3 static struct lockrecord *new_record (uae_u32 packet, uae_u32 pos, uae_u32 len, uae_u32 mode, uae_u32 timeout, uae_u32 msg) { struct lockrecord *lr = xcalloc (struct lockrecord, 1); lr->packet = packet; lr->pos = pos; lr->len = len; lr->mode = mode; lr->timeout = timeout * vblank_hz / 50; lr->msg = msg; return lr; } static bool record_hit (Unit *unit, Key *k, uae_u32 pos, uae_u32 len, uae_u32 mode) { bool exclusive = mode == REC_EXCLUSIVE || mode == REC_EXCLUSIVE_IMMED; for (Key *k2 = unit->keys; k2; k2 = k2->next) { if (k2->aino->uniq == k->aino->uniq) { if (k2 == k) continue; for (struct lockrecord *lr = k2->record; lr; lr = lr->next) { bool exclusive2 = lr->mode == REC_EXCLUSIVE || lr->mode == REC_EXCLUSIVE_IMMED; if (exclusive || exclusive2) { uae_u32 a1 = pos; uae_u32 a2 = pos + len; uae_u32 b1 = lr->pos; uae_u32 b2 = lr->pos + lr->len; if (len && lr->len) { bool hit = (a1 >= b1 && a1 < b2) || (a2 > b1 && a2 < b2) || (b1 >= a1 && b1 < a2) || (b2 > a1 && b2 < a2); if (hit) return true; } } } } } return false; } static void record_timeout (Unit *unit) { bool retry = true; while (retry) { retry = false; struct lockrecord *prev = NULL; for (struct lockrecord *lr = unit->waitingrecords; lr; lr = lr->next) { lr->timeout--; if (lr->timeout == 0) { Key *k = lookup_key (unit, GET_PCK_ARG1 (lr->packet)); PUT_PCK_RES1 (lr->packet, DOS_FALSE); PUT_PCK_RES2 (lr->packet, ERROR_LOCK_TIMEOUT); // mark packet as complete put_long (lr->msg + 4, 0xfffffffe); uae_Signal (get_long (unit->volume + 176 - 32), 1 << 13); if (prev) prev->next = lr->next; else unit->waitingrecords = lr->next; write_log (_T("queued record timed out '%s',%d,%d,%d,%d\n"), k ? k->aino->nname : _T("NULL"), lr->pos, lr->len, lr->mode, lr->timeout); xfree (lr); retry = true; break; } prev = lr; } } } static void record_check_waiting (Unit *unit) { bool retry = true; while (retry) { retry = false; struct lockrecord *prev = NULL; for (struct lockrecord *lr = unit->waitingrecords; lr; lr = lr->next) { Key *k = lookup_key (unit, GET_PCK_ARG1 (lr->packet)); if (!k || !record_hit (unit, k, lr->pos, lr->len, lr->mode)) { if (prev) prev->next = lr->next; else unit->waitingrecords = lr->next; write_log (_T("queued record released '%s',%d,%d,%d,%d\n"), k->aino->nname, lr->pos, lr->len, lr->mode, lr->timeout); // mark packet as complete put_long (lr->msg + 4, 0xffffffff); xfree (lr); retry = true; break; } prev = lr; } } } static int action_lock_record (Unit *unit, dpacket packet, uae_u32 msg) { Key *k = lookup_key (unit, GET_PCK_ARG1 (packet)); uae_u32 pos = GET_PCK_ARG2 (packet); uae_u32 len = GET_PCK_ARG3 (packet); uae_u32 mode = GET_PCK_ARG4 (packet); uae_u32 timeout = GET_PCK_ARG5 (packet); bool exclusive = mode == REC_EXCLUSIVE || mode == REC_EXCLUSIVE_IMMED; #ifdef FSUAE g_packet_delay = 2; #endif write_log (_T("action_lock_record('%s',%d,%d,%d,%d)\n"), k ? k->aino->nname : _T("null"), pos, len, mode, timeout); if (!k || mode > REC_SHARED_IMMED) { PUT_PCK_RES1 (packet, DOS_FALSE); PUT_PCK_RES2 (packet, ERROR_OBJECT_WRONG_TYPE); return 1; } if (mode == REC_EXCLUSIVE_IMMED || mode == REC_SHARED_IMMED) timeout = 0; if (record_hit (unit, k, pos, len, mode)) { if (timeout && msg) { // queue it and do not reply struct lockrecord *lr = new_record (packet, pos, len, mode, timeout, msg); if (unit->waitingrecords) { lr->next = unit->waitingrecords; unit->waitingrecords = lr; } else { unit->waitingrecords = lr; } write_log (_T("-> collision, timeout queued\n")); return -1; } PUT_PCK_RES1 (packet, DOS_FALSE); PUT_PCK_RES2 (packet, ERROR_LOCK_COLLISION); write_log (_T("-> ERROR_LOCK_COLLISION\n")); return 1; } struct lockrecord *lr = new_record (GET_PCK_ARG1 (packet), pos, len, mode, timeout, 0); if (k->record) { lr->next = k->record; k->record = lr; } else { k->record = lr; } PUT_PCK_RES1 (packet, DOS_TRUE); write_log (_T("-> OK\n")); return 1; } static void action_free_record (Unit *unit, dpacket packet) { Key *k = lookup_key (unit, GET_PCK_ARG1 (packet)); uae_u32 pos = GET_PCK_ARG2 (packet); uae_u32 len = GET_PCK_ARG3 (packet); write_log (_T("action_free_record('%s',%d,%d)\n"), k ? k->aino->nname : _T("null"), pos, len); if (!k) { PUT_PCK_RES1 (packet, DOS_FALSE); PUT_PCK_RES2 (packet, ERROR_OBJECT_WRONG_TYPE); return; } struct lockrecord *prev = NULL; for (struct lockrecord *lr = k->record; lr; lr = lr->next) { if (lr->pos == pos && lr->len == len) { if (prev) prev->next = lr->next; else k->record = lr->next; xfree (lr); write_log (_T("->OK\n")); record_check_waiting (unit); PUT_PCK_RES1 (packet, DOS_TRUE); return; } } write_log (_T("-> ERROR_RECORD_NOT_LOCKED\n")); PUT_PCK_RES1 (packet, DOS_FALSE); PUT_PCK_RES2 (packet, ERROR_RECORD_NOT_LOCKED); } #define EXALL_DEBUG 0 #define EXALL_END 0xde1111ad static ExAllKey *getexall (Unit *unit, uaecptr control, int id) { int i; if (id < 0) { for (i = 0; i < EXALLKEYS; i++) { if (unit->exalls[i].id == 0) { unit->exallid++; if (unit->exallid == EXALL_END) unit->exallid++; unit->exalls[i].id = unit->exallid; unit->exalls[i].control = control; return &unit->exalls[i]; } } } else if (id > 0) { for (i = 0; i < EXALLKEYS; i++) { if (unit->exalls[i].id == id) return &unit->exalls[i]; } } return NULL; } static int exalldo (uaecptr exalldata, uae_u32 exalldatasize, uae_u32 type, uaecptr control, Unit *unit, a_inode *aino) { uaecptr exp = exalldata; int i; int size, size2; int entrytype; TCHAR *xs = NULL, *commentx = NULL; uae_u32 flags = 15; int days, mins, ticks; struct mystat statbuf; int fsdb_can = fsdb_cando (unit); uae_u16 uid = 0, gid = 0; char *x = NULL, *comment = NULL; int ret = 0; memset (&statbuf, 0, sizeof statbuf); if (unit->volflags & MYVOLUMEINFO_ARCHIVE) zfile_stat_archive (aino->nname, &statbuf); else if (unit->volflags & MYVOLUMEINFO_CDFS) isofs_stat (unit->ui.cdfs_superblock, aino->uniq_external, &statbuf); else my_stat (aino->nname, &statbuf); if (aino->parent == 0) { entrytype = 2; xs = unit->ui.volname; } else { entrytype = aino->dir ? 2 : -3; xs = aino->aname; } x = ua_fs (xs, -1); size = 0; size2 = 4; if (type >= 1) { size2 += 4; size += strlen (x) + 1; size = (size + 3) & ~3; } if (type >= 2) size2 += 4; if (type >= 3) size2 += 4; if (type >= 4) { flags = fsdb_can ? aino->amigaos_mode : fsdb_mode_supported (aino); size2 += 4; } if (type >= 5) { #ifdef FSUAE fsdb_get_file_time(aino, &days, &mins, &ticks); #else timeval_to_amiga (&statbuf.mtime, &days, &mins, &ticks); #endif size2 += 12; } if (type >= 6) { size2 += 4; if (aino->comment == 0 || !fsdb_can) commentx = _T(""); else commentx = aino->comment; comment = ua_fs (commentx, -1); size += strlen (comment) + 1; size = (size + 3) & ~3; } if (type >= 7) { size2 += 4; uid = 0; gid = 0; } i = get_long (control + 0); while (i > 0) { exp = get_long (exp); /* ed_Next */ i--; } if (exalldata + exalldatasize - exp < size + size2) goto end; /* not enough space */ #if EXALL_DEBUG > 0 write_log (_T("ID=%d, %d, %08x: '%s'%s\n"), get_long (control + 4), get_long (control + 0), exp, xs, aino->dir ? _T(" [DIR]") : _T("")); #endif put_long (exp, exp + size + size2); /* ed_Next */ if (type >= 1) { put_long (exp + 4, exp + size2); for (i = 0; i <= strlen (x); i++) { put_byte (exp + size2, x[i]); size2++; } } if (type >= 2) put_long (exp + 8, entrytype); if (type >= 3) put_long (exp + 12, statbuf.size > MAXFILESIZE32 ? MAXFILESIZE32 : statbuf.size); if (type >= 4) put_long (exp + 16, flags); if (type >= 5) { put_long (exp + 20, days); put_long (exp + 24, mins); put_long (exp + 28, ticks); } if (type >= 6) { put_long (exp + 32, exp + size2); put_byte (exp + size2, strlen (comment)); for (i = 0; i <= strlen (comment); i++) { put_byte (exp + size2, comment[i]); size2++; } } if (type >= 7) { put_word (exp + 36, uid); put_word (exp + 38, gid); } put_long (control + 0, get_long (control + 0) + 1); ret = 1; end: xfree (x); xfree (comment); return ret; } static int action_examine_all_do (Unit *unit, uaecptr lock, ExAllKey *eak, uaecptr exalldata, uae_u32 exalldatasize, uae_u32 type, uaecptr control) { a_inode *aino, *base = NULL; int ok; uae_u32 err; struct fs_dirhandle *d; TCHAR fn[MAX_DPATH]; if (lock != 0) base = lookup_aino (unit, get_long (lock + 4)); if (base == 0) base = &unit->rootnode; for (;;) { uae_u64 uniq = 0; d = eak->dirhandle; if (!eak->fn) { do { if (d->fstype == FS_ARCHIVE) ok = zfile_readdir_archive (d->zd, fn); else if (d->fstype == FS_DIRECTORY) ok = my_readdir (d->od, fn); else if (d->fstype == FS_CDFS) ok = isofs_readdir (d->isod, fn, &uniq); else ok = 0; } while (ok && d->fstype == FS_DIRECTORY && fsdb_name_invalid_dir (fn)); if (!ok) return 0; } else { _tcscpy (fn, eak->fn); xfree (eak->fn); eak->fn = NULL; } aino = lookup_child_aino_for_exnext (unit, base, fn, &err, uniq); if (!aino) return 0; eak->id = unit->exallid++; put_long (control + 4, eak->id); if (!exalldo (exalldata, exalldatasize, type, control, unit, aino)) { eak->fn = my_strdup (fn); /* no space in exallstruct, save current entry */ break; } } return 1; } static int action_examine_all_end (Unit *unit, dpacket packet) { uae_u32 id; uae_u32 doserr = 0; ExAllKey *eak; uaecptr control = GET_PCK_ARG5 (packet); if (kickstart_version < 36) return 0; id = get_long (control + 4); eak = getexall (unit, control, id); #if EXALL_DEBUG > 0 write_log (_T("EXALL_END ID=%d %x\n"), id, eak); #endif if (!eak) { write_log (_T("FILESYS: EXALL_END non-existing ID %d\n"), id); doserr = ERROR_OBJECT_WRONG_TYPE; } else { eak->id = 0; fs_closedir (eak->dirhandle); xfree (eak->fn); eak->fn = NULL; eak->dirhandle = NULL; } if (doserr) { PUT_PCK_RES1 (packet, DOS_FALSE); PUT_PCK_RES2 (packet, doserr); } else { PUT_PCK_RES1 (packet, DOS_TRUE); } return 1; } static int action_examine_all (Unit *unit, dpacket packet) { uaecptr lock = GET_PCK_ARG1 (packet) << 2; uaecptr exalldata = GET_PCK_ARG2 (packet); uae_u32 exalldatasize = GET_PCK_ARG3 (packet); uae_u32 type = GET_PCK_ARG4 (packet); uaecptr control = GET_PCK_ARG5 (packet); ExAllKey *eak = NULL; a_inode *base = NULL; struct fs_dirhandle *d; int ok, i; uaecptr exp; uae_u32 id, doserr = ERROR_NO_MORE_ENTRIES; ok = 0; #if EXALL_DEBUG > 0 write_log (_T("exall: %08x %08x-%08x %d %d %08x\n"), lock, exalldata, exalldata + exalldatasize, exalldatasize, type, control); write_log (_T("exall: MatchString %08x, MatchFunc %08x\n"), get_long (control + 8), get_long (control + 12)); #endif put_long (control + 0, 0); /* eac_Entries */ /* EXAMINE ALL might use dos.library MatchPatternNoCase() which is >=36 */ if (kickstart_version < 36) return 0; if (type == 0 || type > 7) { doserr = ERROR_BAD_NUMBER; goto fail; } PUT_PCK_RES1 (packet, DOS_TRUE); id = get_long (control + 4); if (id == EXALL_END) { write_log (_T("FILESYS: EXALL called twice with ERROR_NO_MORE_ENTRIES\n")); goto fail; /* already ended exall() */ } if (id) { eak = getexall (unit, control, id); if (!eak) { write_log (_T("FILESYS: EXALL non-existing ID %d\n"), id); doserr = ERROR_OBJECT_WRONG_TYPE; goto fail; } if (!action_examine_all_do (unit, lock, eak, exalldata, exalldatasize, type, control)) goto fail; if (get_long (control + 0) == 0) { /* uh, no space for first entry.. */ doserr = ERROR_NO_FREE_STORE; goto fail; } } else { eak = getexall (unit, control, -1); if (!eak) goto fail; if (lock != 0) base = lookup_aino (unit, get_long (lock + 4)); if (base == 0) base = &unit->rootnode; #if EXALL_DEBUG > 0 write_log("exall: ID=%d '%s'\n", eak->id, base->nname); #endif d = fs_opendir (unit, base); if (!d) goto fail; eak->dirhandle = d; put_long (control + 4, eak->id); if (!action_examine_all_do (unit, lock, eak, exalldata, exalldatasize, type, control)) goto fail; if (get_long (control + 0) == 0) { /* uh, no space for first entry.. */ doserr = ERROR_NO_FREE_STORE; goto fail; } } ok = 1; fail: /* Clear last ed_Next. This "list" is quite non-Amiga like.. */ exp = exalldata; i = get_long (control + 0); for (;;) { if (i <= 1) { if (exp) put_long (exp, 0); break; } exp = get_long (exp); /* ed_Next */ i--; } #if EXALL_DEBUG > 0 write_log("ok=%d, err=%d, eac_Entries = %d\n", ok, ok ? -1 : doserr, get_long (control + 0)); #endif if (!ok) { PUT_PCK_RES1 (packet, DOS_FALSE); PUT_PCK_RES2 (packet, doserr); if (eak) { eak->id = 0; fs_closedir (eak->dirhandle); eak->dirhandle = NULL; xfree (eak->fn); eak->fn = NULL; } if (doserr == ERROR_NO_MORE_ENTRIES) put_long (control + 4, EXALL_END); } return 1; } static uae_u32 exall_helpder(TrapContext *context) { int i; Unit *u; uaecptr packet = m68k_areg (regs, 4); uaecptr control = get_long (packet + dp_Arg5); uae_u32 id = get_long (control + 4); #if EXALL_DEBUG > 0 write_log (_T("FILESYS: EXALL extra round ID=%d\n"), id); #endif if (id == EXALL_END) return 1; for (u = units; u; u = u->next) { for (i = 0; i < EXALLKEYS; i++) { if (u->exalls[i].id == id && u->exalls[i].control == control) { action_examine_all (u, packet); } } } return 1; } static uae_u32 REGPARAM2 fsmisc_helper (TrapContext *context) { int mode = m68k_dreg (regs, 0); switch (mode) { case 0: return exall_helpder (context); case 1: return filesys_media_change_reply (context, 0); case 2: return filesys_media_change_reply (context, 1); case 3: uae_u32 t = getlocaltime (); uae_u32 secs = (uae_u32)t - (8 * 365 + 2) * 24 * 60 * 60; return secs; } return 0; } static void action_examine_object (Unit *unit, dpacket packet) { uaecptr lock = GET_PCK_ARG1 (packet) << 2; uaecptr info = GET_PCK_ARG2 (packet) << 2; a_inode *aino = 0; TRACE((_T("ACTION_EXAMINE_OBJECT(0x%lx,0x%lx)\n"), lock, info)); DUMPLOCK(unit, lock); if (lock != 0) aino = lookup_aino (unit, get_long (lock + 4)); if (aino == 0) aino = &unit->rootnode; get_fileinfo (unit, packet, info, aino); if (aino->dir) { put_long (info, 0xFFFFFFFF); } else put_long (info, 0); } /* Read a directory's contents, create a_inodes for each file, and mark them as locked in memory so that recycle_aino will not reap them. We do this to avoid problems with the host OS: we don't want to leave the directory open on the host side until all ExNext()s have finished - they may never finish! */ static void populate_directory (Unit *unit, a_inode *base) { struct fs_dirhandle *d; a_inode *aino; d = fs_opendir (unit, base); if (!d) return; for (aino = base->child; aino; aino = aino->sibling) { base->locked_children++; unit->total_locked_ainos++; } TRACE3((_T("Populating directory, child %p, locked_children %d\n"), base->child, base->locked_children)); for (;;) { uae_u64 uniq = 0; TCHAR fn[MAX_DPATH]; int ok; uae_u32 err; /* Find next file that belongs to the Amiga fs (skipping things like "..", "." etc. */ do { if (d->fstype == FS_ARCHIVE) ok = zfile_readdir_archive (d->zd, fn); else if (d->fstype == FS_DIRECTORY) ok = my_readdir (d->od, fn); else if (d->fstype == FS_CDFS) ok = isofs_readdir (d->isod, fn, &uniq); else ok = 0; } while (ok && d->fstype == FS_DIRECTORY && fsdb_name_invalid_dir (fn)); if (!ok) break; /* This calls init_child_aino, which will notice that the parent is being ExNext()ed, and it will increment the locked counts. */ aino = lookup_child_aino_for_exnext (unit, base, fn, &err, uniq); } fs_closedir (d); } static void do_examine (Unit *unit, dpacket packet, ExamineKey *ek, uaecptr info) { for (;;) { TCHAR *name; if (ek->curr_file == 0) break; name = ek->curr_file->nname; get_fileinfo (unit, packet, info, ek->curr_file); ek->curr_file = ek->curr_file->sibling; if (!(unit->volflags & (MYVOLUMEINFO_ARCHIVE | MYVOLUMEINFO_CDFS)) && !fsdb_exists(name)) { TRACE ((_T("%s orphaned"), name)); continue; } TRACE ((_T("curr_file set to %p %s\n"), ek->curr_file, ek->curr_file ? ek->curr_file->aname : _T("NULL"))); return; } TRACE((_T("no more entries\n"))); free_exkey (unit, ek); PUT_PCK_RES1 (packet, DOS_FALSE); PUT_PCK_RES2 (packet, ERROR_NO_MORE_ENTRIES); } static void action_examine_next (Unit *unit, dpacket packet) { uaecptr lock = GET_PCK_ARG1 (packet) << 2; uaecptr info = GET_PCK_ARG2 (packet) << 2; a_inode *aino = 0; ExamineKey *ek; uae_u32 uniq; TRACE((_T("ACTION_EXAMINE_NEXT(0x%lx,0x%lx)\n"), lock, info)); gui_flicker_led (UNIT_LED(unit), unit->unit, 1); DUMPLOCK(unit, lock); if (lock != 0) aino = lookup_aino (unit, get_long (lock + 4)); if (aino == 0) aino = &unit->rootnode; for(;;) { uniq = get_long (info); if (uniq == 0) { write_log (_T("ExNext called for a file! (Houston?)\n")); goto no_more_entries; } else if (uniq == 0xFFFFFFFE) goto no_more_entries; else if (uniq == 0xFFFFFFFF) { TRACE((_T("Creating new ExKey\n"))); ek = new_exkey (unit, aino); if (ek) { if (aino->exnext_count++ == 0) #ifdef FSUAE { g_packet_delay = 320; #endif populate_directory (unit, aino); #ifdef FSUAE } #endif ek->curr_file = aino->child; TRACE((_T("Initial curr_file: %p %s\n"), ek->curr_file, ek->curr_file ? ek->curr_file->aname : _T("NULL"))); } } else { TRACE((_T("Looking up ExKey\n"))); ek = lookup_exkey (unit, get_long (info)); } if (ek == 0) { write_log (_T("Couldn't find a matching ExKey. Prepare for trouble.\n")); goto no_more_entries; } put_long (info, ek->uniq); if (!ek->curr_file || ek->curr_file->mountcount == unit->mountcount) break; ek->curr_file = ek->curr_file->sibling; if (!ek->curr_file) goto no_more_entries; } do_examine (unit, packet, ek, info); return; no_more_entries: PUT_PCK_RES1 (packet, DOS_FALSE); PUT_PCK_RES2 (packet, ERROR_NO_MORE_ENTRIES); } static void do_find (Unit *unit, dpacket packet, int mode, int create, int fallback) { uaecptr fh = GET_PCK_ARG1 (packet) << 2; uaecptr lock = GET_PCK_ARG2 (packet) << 2; uaecptr name = GET_PCK_ARG3 (packet) << 2; a_inode *aino; Key *k; struct fs_filehandle *fd; int err; mode_t openmode; int aino_created = 0; int isvirtual = unit->volflags & (MYVOLUMEINFO_ARCHIVE | MYVOLUMEINFO_CDFS); TRACE((_T("ACTION_FIND_*(0x%lx,0x%lx,\"%s\",%d,%d)\n"), fh, lock, bstr (unit, name), mode, create)); TRACE((_T("fh=%x lock=%x name=%x\n"), fh, lock, name)); DUMPLOCK(unit, lock); aino = find_aino (unit, lock, bstr (unit, name), &err); if (aino == 0 || (err != 0 && err != ERROR_OBJECT_NOT_AROUND)) { /* Whatever it is, we can't handle it. */ PUT_PCK_RES1 (packet, DOS_FALSE); PUT_PCK_RES2 (packet, err); return; } if (err == 0) { /* Object exists. */ if (aino->dir) { PUT_PCK_RES1 (packet, DOS_FALSE); PUT_PCK_RES2 (packet, ERROR_OBJECT_WRONG_TYPE); return; } if (aino->elock || (create == 2 && aino->shlock > 0)) { PUT_PCK_RES1 (packet, DOS_FALSE); PUT_PCK_RES2 (packet, ERROR_OBJECT_IN_USE); return; } if (create == 2 && (aino->amigaos_mode & A_FIBF_DELETE) != 0) { PUT_PCK_RES1 (packet, DOS_FALSE); PUT_PCK_RES2 (packet, ERROR_DELETE_PROTECTED); return; } if (create != 2) { if ((((mode & aino->amigaos_mode) & A_FIBF_WRITE) != 0 || unit->ui.readonly || unit->ui.locked) && fallback) { mode &= ~A_FIBF_WRITE; } /* Kick 1.3 doesn't check read and write access bits - maybe it would be * simpler just not to do that either. */ if ((mode & A_FIBF_WRITE) != 0 && (unit->ui.readonly || unit->ui.locked)) { PUT_PCK_RES1 (packet, DOS_FALSE); PUT_PCK_RES2 (packet, ERROR_DISK_WRITE_PROTECTED); return; } if (((mode & aino->amigaos_mode) & A_FIBF_WRITE) != 0 || mode == 0) { PUT_PCK_RES1 (packet, DOS_FALSE); PUT_PCK_RES2 (packet, ERROR_WRITE_PROTECTED); return; } if (((mode & aino->amigaos_mode) & A_FIBF_READ) != 0) { PUT_PCK_RES1 (packet, DOS_FALSE); PUT_PCK_RES2 (packet, ERROR_READ_PROTECTED); return; } } } else if (create == 0) { PUT_PCK_RES1 (packet, DOS_FALSE); PUT_PCK_RES2 (packet, err); return; } else { /* Object does not exist. aino points to containing directory. */ aino = create_child_aino (unit, aino, my_strdup (bstr_cut (unit, name)), 0); if (aino == 0) { PUT_PCK_RES1 (packet, DOS_FALSE); PUT_PCK_RES2 (packet, ERROR_DISK_IS_FULL); /* best we can do */ return; } aino_created = 1; } prepare_for_open (aino->nname); openmode = (((mode & A_FIBF_READ) == 0 ? O_WRONLY : (mode & A_FIBF_WRITE) == 0 ? O_RDONLY : O_RDWR) | (create ? O_CREAT : 0) | (create == 2 ? O_TRUNC : 0)); #ifdef FSUAE if (openmode & O_CREAT) { // this can be an expensive operation g_packet_delay = 320; } //int t1 = SDL_GetTicks(); #endif fd = fs_openfile (unit, aino, openmode | O_BINARY); #ifdef FSUAE //int t2 = SDL_GetTicks(); //if (t2 - t1 > 9) { // printf("***> %d\n", t2 - t1); //} #endif if (fd == NULL) { if (aino_created) delete_aino (unit, aino); PUT_PCK_RES1 (packet, DOS_FALSE); /* archive and fd == NULL = corrupt archive or out of memory */ PUT_PCK_RES2 (packet, isvirtual ? ERROR_OBJECT_NOT_AROUND : dos_errno ()); return; } k = new_key (unit); k->fd = fd; k->aino = aino; k->dosmode = mode; k->createmode = create; k->notifyactive = create ? 1 : 0; if (create && isvirtual) fsdb_set_file_attrs (aino); put_long (fh + 36, k->uniq); if (create == 2) { aino->elock = 1; // clear comment if file already existed if (aino->comment) { xfree (aino->comment); aino->comment = 0; } fsdb_set_file_attrs (aino); } else { aino->shlock++; } de_recycle_aino (unit, aino); PUT_PCK_RES1 (packet, DOS_TRUE); } static void action_fh_from_lock (Unit *unit, dpacket packet) { uaecptr fh = GET_PCK_ARG1 (packet) << 2; uaecptr lock = GET_PCK_ARG2 (packet) << 2; a_inode *aino; Key *k; struct fs_filehandle *fd; mode_t openmode; int mode; TRACE((_T("ACTION_FH_FROM_LOCK(0x%lx,0x%lx)\n"), fh, lock)); DUMPLOCK(unit,lock); if (!lock) { PUT_PCK_RES1 (packet, DOS_FALSE); PUT_PCK_RES2 (packet, 0); return; } aino = lookup_aino (unit, get_long (lock + 4)); if (aino == 0) aino = &unit->rootnode; mode = aino->amigaos_mode; /* Use same mode for opened filehandle as existing Lock() */ prepare_for_open (aino->nname); TRACE ((_T(" mode is %d\n"), mode)); openmode = (((mode & A_FIBF_READ) ? O_WRONLY : (mode & A_FIBF_WRITE) ? O_RDONLY : O_RDWR)); /* the files on CD really can have the write-bit set. */ if (unit->ui.readonly || unit->ui.locked) openmode = O_RDONLY; fd = fs_openfile (unit, aino, openmode | O_BINARY); if (fd == NULL) { PUT_PCK_RES1 (packet, DOS_FALSE); PUT_PCK_RES2 (packet, dos_errno ()); return; } k = new_key (unit); k->fd = fd; k->aino = aino; put_long (fh + 36, k->uniq); /* I don't think I need to play with shlock count here, because I'm opening from an existing lock ??? */ de_recycle_aino (unit, aino); free_lock (unit, lock); /* lock must be unlocked */ PUT_PCK_RES1 (packet, DOS_TRUE); /* PUT_PCK_RES2 (packet, k->uniq); - this shouldn't be necessary, try without it */ } static void action_find_input (Unit *unit, dpacket packet) { do_find (unit, packet, A_FIBF_READ | A_FIBF_WRITE, 0, 1); } static void action_find_output (Unit *unit, dpacket packet) { if (unit->ui.readonly || unit->ui.locked) { PUT_PCK_RES1 (packet, DOS_FALSE); PUT_PCK_RES2 (packet, ERROR_DISK_WRITE_PROTECTED); return; } do_find (unit, packet, A_FIBF_READ | A_FIBF_WRITE, 2, 0); } static void action_find_write (Unit *unit, dpacket packet) { if (unit->ui.readonly || unit->ui.locked) { PUT_PCK_RES1 (packet, DOS_FALSE); PUT_PCK_RES2 (packet, ERROR_DISK_WRITE_PROTECTED); return; } do_find (unit, packet, A_FIBF_READ | A_FIBF_WRITE, 1, 0); } /* change file/dir's parent dir modification time */ static void updatedirtime (a_inode *a1, int now) { struct mystat statbuf; if (!a1->parent) return; #ifdef FSUAE if (!a1->parent->parent) { return; } #endif if (!now) { if (!my_stat (a1->nname, &statbuf)) return; my_utime (a1->parent->nname, &statbuf.mtime); } else { my_utime (a1->parent->nname, NULL); } } static void action_end (Unit *unit, dpacket packet) { Key *k; TRACE((_T("ACTION_END(0x%lx)\n"), GET_PCK_ARG1 (packet))); k = lookup_key (unit, GET_PCK_ARG1 (packet)); if (k != 0) { if (k->notifyactive) { notify_check (unit, k->aino); updatedirtime (k->aino, 1); } if (k->aino->elock) k->aino->elock = 0; else k->aino->shlock--; recycle_aino (unit, k->aino); free_key (unit, k); } PUT_PCK_RES1 (packet, DOS_TRUE); PUT_PCK_RES2 (packet, 0); } static void action_read (Unit *unit, dpacket packet) { Key *k = lookup_key (unit, GET_PCK_ARG1 (packet)); uaecptr addr = GET_PCK_ARG2 (packet); uae_u32 size = GET_PCK_ARG3 (packet); uae_u32 actual = 0; if (k == 0) { PUT_PCK_RES1 (packet, DOS_FALSE); /* PUT_PCK_RES2 (packet, EINVAL); */ return; } #ifdef FSUAE g_packet_delay = 100; #endif TRACE((_T("ACTION_READ(%s,0x%lx,%ld)\n"), k->aino->nname, addr, size)); gui_flicker_led (UNIT_LED(unit), unit->unit, 1); if (size == 0) { PUT_PCK_RES1 (packet, 0); PUT_PCK_RES2 (packet, 0); } else if (!valid_address (addr, size)) { /* check if filesize < size */ uae_s64 filesize, cur; filesize = fs_fsize64 (k->fd); cur = k->file_pos; if (size > filesize - cur) size = filesize - cur; if (size == 0) { PUT_PCK_RES1 (packet, 0); PUT_PCK_RES2 (packet, 0); } else if (!valid_address (addr, size)) { /* it really crosses memory boundary */ uae_u8 *buf; write_log (_T("unixfs warning: Bad pointer passed for read: %08x, size %d\n"), addr, size); /* ugh this is inefficient but easy */ if (fs_lseek64 (k->fd, k->file_pos, SEEK_SET) < 0) { PUT_PCK_RES1 (packet, 0); PUT_PCK_RES2 (packet, dos_errno ()); return; } buf = xmalloc (uae_u8, size); if (!buf) { PUT_PCK_RES1 (packet, -1); PUT_PCK_RES2 (packet, ERROR_NO_FREE_STORE); return; } actual = fs_read (k->fd, buf, size); if (actual < 0) { PUT_PCK_RES1 (packet, 0); PUT_PCK_RES2 (packet, dos_errno ()); } else { int i; PUT_PCK_RES1 (packet, actual); for (i = 0; i < actual; i++) put_byte (addr + i, buf[i]); k->file_pos += actual; } xfree (buf); flush_dcache (addr, size); size = 0; } } if (size) { /* normal fast read */ uae_u8 *realpt = get_real_address (addr); if (fs_lseek64 (k->fd, k->file_pos, SEEK_SET) < 0) { PUT_PCK_RES1 (packet, 0); PUT_PCK_RES2 (packet, dos_errno ()); return; } actual = fs_read (k->fd, realpt, size); if (actual == 0) { PUT_PCK_RES1 (packet, 0); PUT_PCK_RES2 (packet, 0); } else if (actual < 0) { PUT_PCK_RES1 (packet, 0); PUT_PCK_RES2 (packet, dos_errno ()); } else { PUT_PCK_RES1 (packet, actual); k->file_pos += actual; } flush_dcache (addr, size); } TRACE((_T("=%d\n"), actual)); } static void action_write (Unit *unit, dpacket packet) { Key *k = lookup_key (unit, GET_PCK_ARG1 (packet)); uaecptr addr = GET_PCK_ARG2 (packet); uae_u32 size = GET_PCK_ARG3 (packet); uae_u32 actual; uae_u8 *buf; int i; if (k == 0) { PUT_PCK_RES1 (packet, DOS_FALSE); /* PUT_PCK_RES2 (packet, EINVAL); */ return; } gui_flicker_led (UNIT_LED(unit), unit->unit, 2); #ifdef FSUAE g_packet_delay = 320; #endif TRACE((_T("ACTION_WRITE(%s,0x%lx,%ld)\n"), k->aino->nname, addr, size)); if (unit->ui.readonly || unit->ui.locked) { PUT_PCK_RES1 (packet, DOS_FALSE); PUT_PCK_RES2 (packet, ERROR_DISK_WRITE_PROTECTED); return; } if (size == 0) { actual = 0; PUT_PCK_RES1 (packet, 0); PUT_PCK_RES2 (packet, 0); } else if (valid_address (addr, size)) { uae_u8 *realpt = get_real_address (addr); if (fs_lseek64 (k->fd, k->file_pos, SEEK_SET) < 0) { PUT_PCK_RES1 (packet, 0); PUT_PCK_RES2 (packet, dos_errno ()); return; } actual = fs_write (k->fd, realpt, size); } else { write_log (_T("unixfs warning: Bad pointer passed for write: %08x, size %d\n"), addr, size); /* ugh this is inefficient but easy */ if (fs_lseek64 (k->fd, k->file_pos, SEEK_SET) < 0) { PUT_PCK_RES1 (packet, 0); PUT_PCK_RES2 (packet, dos_errno ()); return; } buf = xmalloc (uae_u8, size); if (!buf) { PUT_PCK_RES1 (packet, -1); PUT_PCK_RES2 (packet, ERROR_NO_FREE_STORE); return; } for (i = 0; i < size; i++) buf[i] = get_byte (addr + i); actual = fs_write (k->fd, buf, size); xfree (buf); } TRACE((_T("=%d\n"), actual)); PUT_PCK_RES1 (packet, actual); if (actual != size) PUT_PCK_RES2 (packet, dos_errno ()); if (actual >= 0) k->file_pos += actual; k->notifyactive = 1; } static void action_seek (Unit *unit, dpacket packet) { Key *k = lookup_key (unit, GET_PCK_ARG1 (packet)); long pos = (uae_s32)GET_PCK_ARG2 (packet); long mode = (uae_s32)GET_PCK_ARG3 (packet); uae_s64 res; uae_s64 cur; int whence = SEEK_CUR; uae_s64 temppos, filesize; if (k == 0) { PUT_PCK_RES1 (packet, -1); PUT_PCK_RES2 (packet, ERROR_INVALID_LOCK); return; } if (mode > 0) whence = SEEK_END; if (mode < 0) whence = SEEK_SET; cur = k->file_pos; TRACE((_T("ACTION_SEEK(%s,%d,%d)=%d\n"), k->aino->nname, pos, mode, cur)); gui_flicker_led (UNIT_LED(unit), unit->unit, 1); filesize = fs_fsize64 (k->fd); if (whence == SEEK_CUR) temppos = cur + pos; if (whence == SEEK_SET) temppos = pos; if (whence == SEEK_END) temppos = filesize + pos; if (filesize < temppos) { PUT_PCK_RES1 (packet, -1); PUT_PCK_RES2 (packet, ERROR_SEEK_ERROR); return; } res = fs_lseek64 (k->fd, pos, whence); if (-1 == res || cur > MAXFILESIZE32) { PUT_PCK_RES1 (packet, -1); PUT_PCK_RES2 (packet, ERROR_SEEK_ERROR); fs_lseek64 (k->fd, cur, SEEK_SET); } else { PUT_PCK_RES1 (packet, cur); k->file_pos = fs_lseek64 (k->fd, 0, SEEK_CUR); } } static void action_set_protect (Unit *unit, dpacket packet) { uaecptr lock = GET_PCK_ARG2 (packet) << 2; uaecptr name = GET_PCK_ARG3 (packet) << 2; uae_u32 mask = GET_PCK_ARG4 (packet); a_inode *a; int err; TRACE((_T("ACTION_SET_PROTECT(0x%lx,\"%s\",0x%lx)\n"), lock, bstr (unit, name), mask)); if (unit->ui.readonly || unit->ui.locked) { PUT_PCK_RES1 (packet, DOS_FALSE); PUT_PCK_RES2 (packet, ERROR_DISK_WRITE_PROTECTED); return; } a = find_aino (unit, lock, bstr (unit, name), &err); if (err != 0) { PUT_PCK_RES1 (packet, DOS_FALSE); PUT_PCK_RES2 (packet, err); return; } a->amigaos_mode = mask; if (!fsdb_cando (unit)) a->amigaos_mode = fsdb_mode_supported (a); err = fsdb_set_file_attrs (a); if (err != 0) { PUT_PCK_RES1 (packet, DOS_FALSE); PUT_PCK_RES2 (packet, err); } else { PUT_PCK_RES1 (packet, DOS_TRUE); } notify_check (unit, a); gui_flicker_led (UNIT_LED(unit), unit->unit, 2); } static void action_set_comment (Unit * unit, dpacket packet) { uaecptr lock = GET_PCK_ARG2 (packet) << 2; uaecptr name = GET_PCK_ARG3 (packet) << 2; uaecptr comment = GET_PCK_ARG4 (packet) << 2; TCHAR *commented = NULL; a_inode *a; int err; if (unit->ui.readonly || unit->ui.locked) { PUT_PCK_RES1 (packet, DOS_FALSE); PUT_PCK_RES2 (packet, ERROR_DISK_WRITE_PROTECTED); return; } if (fsdb_cando (unit)) { commented = bstr (unit, comment); if (_tcslen (commented) > 80) { PUT_PCK_RES1 (packet, DOS_FALSE); PUT_PCK_RES2 (packet, ERROR_COMMENT_TOO_BIG); return; } if (_tcslen (commented) > 0) { TCHAR *p = commented; commented = xmalloc (TCHAR, 81); _tcsncpy (commented, p, 80); commented[80] = 0; } else { commented = NULL; } } TRACE ((_T("ACTION_SET_COMMENT(0x%lx,\"%s\")\n"), lock, commented)); a = find_aino (unit, lock, bstr (unit, name), &err); if (err != 0) { PUT_PCK_RES1 (packet, DOS_FALSE); PUT_PCK_RES2 (packet, err); maybe_free_and_out: if (commented) xfree (commented); return; } PUT_PCK_RES1 (packet, DOS_TRUE); PUT_PCK_RES2 (packet, 0); if (a->comment == 0 && commented == 0) goto maybe_free_and_out; if (a->comment != 0 && commented != 0 && _tcscmp (a->comment, commented) == 0) goto maybe_free_and_out; if (a->comment) xfree (a->comment); a->comment = commented; fsdb_set_file_attrs (a); notify_check (unit, a); gui_flicker_led (UNIT_LED(unit), unit->unit, 2); } static void action_same_lock (Unit *unit, dpacket packet) { uaecptr lock1 = GET_PCK_ARG1 (packet) << 2; uaecptr lock2 = GET_PCK_ARG2 (packet) << 2; TRACE((_T("ACTION_SAME_LOCK(0x%lx,0x%lx)\n"), lock1, lock2)); DUMPLOCK(unit, lock1); DUMPLOCK(unit, lock2); if (!lock1 || !lock2) { PUT_PCK_RES1 (packet, lock1 == lock2 ? DOS_TRUE : DOS_FALSE); } else { PUT_PCK_RES1 (packet, get_long (lock1 + 4) == get_long (lock2 + 4) ? DOS_TRUE : DOS_FALSE); } } static void action_change_mode (Unit *unit, dpacket packet) { #define CHANGE_LOCK 0 #define CHANGE_FH 1 /* will be CHANGE_FH or CHANGE_LOCK value */ long type = GET_PCK_ARG1 (packet); /* either a file-handle or lock */ uaecptr object = GET_PCK_ARG2 (packet) << 2; /* will be EXCLUSIVE_LOCK/SHARED_LOCK if CHANGE_LOCK, * or MODE_OLDFILE/MODE_NEWFILE/MODE_READWRITE if CHANGE_FH * * Above is wrong, it is always *_LOCK. TW. */ long mode = GET_PCK_ARG3 (packet); unsigned long uniq; a_inode *a = NULL, *olda = NULL; int err = 0; TRACE((_T("ACTION_CHANGE_MODE(0x%lx,%d,%d)\n"), object, type, mode)); if (! object || (type != CHANGE_FH && type != CHANGE_LOCK)) { PUT_PCK_RES1 (packet, DOS_FALSE); PUT_PCK_RES2 (packet, ERROR_INVALID_LOCK); return; } if (type == CHANGE_LOCK) { uniq = get_long (object + 4); } else { Key *k = lookup_key (unit, get_long (object + 36)); if (!k) { PUT_PCK_RES1 (packet, DOS_FALSE); PUT_PCK_RES2 (packet, ERROR_OBJECT_NOT_AROUND); return; } uniq = k->aino->uniq; } a = lookup_aino (unit, uniq); if (! a) { err = ERROR_INVALID_LOCK; } else { if (mode == -1) { if (a->shlock > 1) { err = ERROR_OBJECT_IN_USE; } else { a->shlock = 0; a->elock = 1; } } else { /* Must be SHARED_LOCK == -2 */ a->elock = 0; a->shlock++; } } if (err) { PUT_PCK_RES1 (packet, DOS_FALSE); PUT_PCK_RES2 (packet, err); return; } else { de_recycle_aino (unit, a); PUT_PCK_RES1 (packet, DOS_TRUE); } } static void action_parent_common (Unit *unit, dpacket packet, unsigned long uniq) { a_inode *olda = lookup_aino (unit, uniq); if (olda == 0) { PUT_PCK_RES1 (packet, DOS_FALSE); PUT_PCK_RES2 (packet, ERROR_INVALID_LOCK); return; } if (olda->parent == 0) { PUT_PCK_RES1 (packet, 0); PUT_PCK_RES2 (packet, 0); return; } if (olda->parent->elock) { PUT_PCK_RES1 (packet, DOS_FALSE); PUT_PCK_RES2 (packet, ERROR_OBJECT_IN_USE); return; } olda->parent->shlock++; de_recycle_aino (unit, olda->parent); PUT_PCK_RES1 (packet, make_lock (unit, olda->parent->uniq, -2) >> 2); } static void action_parent_fh (Unit *unit, dpacket packet) { Key *k = lookup_key (unit, GET_PCK_ARG1 (packet)); if (!k) { PUT_PCK_RES1 (packet, DOS_FALSE); PUT_PCK_RES2 (packet, ERROR_OBJECT_NOT_AROUND); return; } action_parent_common (unit, packet, k->aino->uniq); } static void action_parent (Unit *unit, dpacket packet) { uaecptr lock = GET_PCK_ARG1 (packet) << 2; TRACE((_T("ACTION_PARENT(0x%lx)\n"),lock)); if (!lock) { PUT_PCK_RES1 (packet, 0); PUT_PCK_RES2 (packet, 0); } else { action_parent_common (unit, packet, get_long (lock + 4)); } TRACE((_T("=%x %d\n"), GET_PCK_RES1 (packet), GET_PCK_RES2 (packet))); } static void action_create_dir (Unit *unit, dpacket packet) { uaecptr lock = GET_PCK_ARG1 (packet) << 2; uaecptr name = GET_PCK_ARG2 (packet) << 2; a_inode *aino; int err; #ifdef FSUAE g_packet_delay = 320; #endif TRACE((_T("ACTION_CREATE_DIR(0x%lx,\"%s\")\n"), lock, bstr (unit, name))); if (unit->ui.readonly || unit->ui.locked) { PUT_PCK_RES1 (packet, DOS_FALSE); PUT_PCK_RES2 (packet, ERROR_DISK_WRITE_PROTECTED); return; } aino = find_aino (unit, lock, bstr (unit, name), &err); if (aino == 0 || (err != 0 && err != ERROR_OBJECT_NOT_AROUND)) { PUT_PCK_RES1 (packet, DOS_FALSE); PUT_PCK_RES2 (packet, err); return; } if (err == 0) { /* Object exists. */ PUT_PCK_RES1 (packet, DOS_FALSE); PUT_PCK_RES2 (packet, ERROR_OBJECT_EXISTS); return; } /* Object does not exist. aino points to containing directory. */ aino = create_child_aino (unit, aino, my_strdup (bstr_cut (unit, name)), 1); if (aino == 0) { PUT_PCK_RES1 (packet, DOS_FALSE); PUT_PCK_RES2 (packet, ERROR_DISK_IS_FULL); /* best we can do */ return; } if (my_mkdir (aino->nname) == -1) { PUT_PCK_RES1 (packet, DOS_FALSE); PUT_PCK_RES2 (packet, dos_errno ()); return; } aino->shlock = 1; fsdb_set_file_attrs (aino); de_recycle_aino (unit, aino); notify_check (unit, aino); updatedirtime (aino, 0); PUT_PCK_RES1 (packet, make_lock (unit, aino->uniq, -2) >> 2); gui_flicker_led (UNIT_LED(unit), unit->unit, 2); } static void action_examine_fh (Unit *unit, dpacket packet) { Key *k; a_inode *aino = 0; uaecptr info = GET_PCK_ARG2 (packet) << 2; TRACE((_T("ACTION_EXAMINE_FH(0x%lx,0x%lx)\n"), GET_PCK_ARG1 (packet), GET_PCK_ARG2 (packet) )); k = lookup_key (unit, GET_PCK_ARG1 (packet)); if (k != 0) aino = k->aino; if (aino == 0) aino = &unit->rootnode; get_fileinfo (unit, packet, info, aino); if (aino->dir) put_long (info, 0xFFFFFFFF); else put_long (info, 0); } /* For a nice example of just how contradictory documentation can be, see the * Autodoc for DOS:SetFileSize and the Packets.txt description of this packet... * This implementation tries to mimic the behaviour of the Kick 3.1 ramdisk * (which seems to match the Autodoc description). */ static void action_set_file_size (Unit *unit, dpacket packet) { Key *k, *k1; off_t offset = GET_PCK_ARG2 (packet); long mode = (uae_s32)GET_PCK_ARG3 (packet); int whence = SEEK_CUR; if (mode > 0) whence = SEEK_END; if (mode < 0) whence = SEEK_SET; #ifdef FSUAE g_packet_delay = 100; #endif TRACE((_T("ACTION_SET_FILE_SIZE(0x%lx, %d, 0x%x)\n"), GET_PCK_ARG1 (packet), offset, mode)); k = lookup_key (unit, GET_PCK_ARG1 (packet)); if (k == 0) { PUT_PCK_RES1 (packet, DOS_TRUE); PUT_PCK_RES2 (packet, ERROR_OBJECT_NOT_AROUND); return; } gui_flicker_led (UNIT_LED(unit), unit->unit, 1); k->notifyactive = 1; /* If any open files have file pointers beyond this size, truncate only * so far that these pointers do not become invalid. */ for (k1 = unit->keys; k1; k1 = k1->next) { if (k != k1 && k->aino == k1->aino) { if (k1->file_pos > offset) offset = (off_t)k1->file_pos; } } /* Write one then truncate: that should give the right size in all cases. */ fs_lseek (k->fd, offset, whence); offset = fs_lseek (k->fd, 0, SEEK_CUR); fs_write (k->fd, /* whatever */(uae_u8*)&k1, 1); if (k->file_pos > offset) k->file_pos = offset; fs_lseek (k->fd, (off_t)k->file_pos, SEEK_SET); /* Brian: no bug here; the file _must_ be one byte too large after writing * The write is supposed to guarantee that the file can't be smaller than * the requested size, the truncate guarantees that it can't be larger. * If we were to write one byte earlier we'd clobber file data. */ if (my_truncate (k->aino->nname, offset) == -1) { PUT_PCK_RES1 (packet, DOS_FALSE); PUT_PCK_RES2 (packet, dos_errno ()); return; } PUT_PCK_RES1 (packet, offset); PUT_PCK_RES2 (packet, 0); } static int relock_do(Unit *unit, a_inode *a1) { Key *k1, *knext; int wehavekeys = 0; for (k1 = unit->keys; k1; k1 = knext) { knext = k1->next; if (k1->aino == a1 && k1->fd) { wehavekeys++; fs_closefile (k1->fd); write_log (_T("handle %p freed\n"), k1->fd); } } return wehavekeys; } static void relock_re (Unit *unit, a_inode *a1, a_inode *a2, int failed) { Key *k1, *knext; for (k1 = unit->keys; k1; k1 = knext) { knext = k1->next; if (k1->aino == a1 && k1->fd) { int mode = (k1->dosmode & A_FIBF_READ) == 0 ? O_WRONLY : (k1->dosmode & A_FIBF_WRITE) == 0 ? O_RDONLY : O_RDWR; mode |= O_BINARY; if (failed) { /* rename still failed, restore fd */ k1->fd = fs_openfile (unit, a1, mode); write_log (_T("restoring old handle '%s' %d\n"), a1->nname, k1->dosmode); } else { /* transfer fd to new name */ if (a2) { k1->aino = a2; k1->fd = fs_openfile (unit, a2, mode); write_log (_T("restoring new handle '%s' %d\n"), a2->nname, k1->dosmode); } else { write_log (_T("no new handle, deleting old lock(s).\n")); } } if (k1->fd == NULL) { write_log (_T("relocking failed '%s' -> '%s'\n"), a1->nname, a2->nname); free_key (unit, k1); } else { fs_lseek64 (k1->fd, k1->file_pos, SEEK_SET); } } } } static void action_delete_object (Unit *unit, dpacket packet) { uaecptr lock = GET_PCK_ARG1 (packet) << 2; uaecptr name = GET_PCK_ARG2 (packet) << 2; a_inode *a; int err; #ifdef FSUAE g_packet_delay = 320; #endif TRACE((_T("ACTION_DELETE_OBJECT(0x%lx,\"%s\")\n"), lock, bstr (unit, name))); if (unit->ui.readonly || unit->ui.locked) { PUT_PCK_RES1 (packet, DOS_FALSE); PUT_PCK_RES2 (packet, ERROR_DISK_WRITE_PROTECTED); return; } a = find_aino (unit, lock, bstr (unit, name), &err); if (err != 0) { PUT_PCK_RES1 (packet, DOS_FALSE); PUT_PCK_RES2 (packet, err); return; } if (a->amigaos_mode & A_FIBF_DELETE) { PUT_PCK_RES1 (packet, DOS_FALSE); PUT_PCK_RES2 (packet, ERROR_DELETE_PROTECTED); return; } if (a->shlock > 0 || a->elock) { PUT_PCK_RES1 (packet, DOS_FALSE); PUT_PCK_RES2 (packet, ERROR_OBJECT_IN_USE); return; } if (a->dir) { /* This should take care of removing the fsdb if no files remain. */ fsdb_dir_writeback (a); if (my_rmdir (a->nname) == -1) { PUT_PCK_RES1 (packet, DOS_FALSE); PUT_PCK_RES2 (packet, dos_errno ()); return; } } else { if (my_unlink (a->nname) == -1) { PUT_PCK_RES1 (packet, DOS_FALSE); PUT_PCK_RES2 (packet, dos_errno ()); return; } } notify_check (unit, a); updatedirtime (a, 1); if (a->child != 0) { write_log (_T("Serious error in action_delete_object.\n")); a->deleted = 1; } else { delete_aino (unit, a); } PUT_PCK_RES1 (packet, DOS_TRUE); gui_flicker_led (UNIT_LED(unit), unit->unit, 2); } static void action_set_date (Unit *unit, dpacket packet) { uaecptr lock = GET_PCK_ARG2 (packet) << 2; uaecptr name = GET_PCK_ARG3 (packet) << 2; uaecptr date = GET_PCK_ARG4 (packet); a_inode *a; struct mytimeval tv; int err; TRACE((_T("ACTION_SET_DATE(0x%lx,\"%s\")\n"), lock, bstr (unit, name))); if (unit->ui.readonly || unit->ui.locked) { PUT_PCK_RES1 (packet, DOS_FALSE); PUT_PCK_RES2 (packet, ERROR_DISK_WRITE_PROTECTED); return; } amiga_to_timeval (&tv, get_long (date), get_long (date + 4), get_long (date + 8)); a = find_aino (unit, lock, bstr (unit, name), &err); write_log (_T("%llu.%u (%d,%d,%d) %s\n"), tv.tv_sec, tv.tv_usec, get_long (date), get_long (date + 4), get_long (date + 8), a->nname); if (err == 0 && !my_utime (a->nname, &tv)) err = dos_errno (); if (err != 0) { PUT_PCK_RES1 (packet, DOS_FALSE); PUT_PCK_RES2 (packet, err); } else { notify_check (unit, a); PUT_PCK_RES1 (packet, DOS_TRUE); } gui_flicker_led (UNIT_LED(unit), unit->unit, 2); } static void action_rename_object (Unit *unit, dpacket packet) { uaecptr lock1 = GET_PCK_ARG1 (packet) << 2; uaecptr name1 = GET_PCK_ARG2 (packet) << 2; uaecptr lock2 = GET_PCK_ARG3 (packet) << 2; uaecptr name2 = GET_PCK_ARG4 (packet) << 2; a_inode *a1, *a2; int err1, err2; Key *k1, *knext; int wehavekeys = 0; TRACE((_T("ACTION_RENAME_OBJECT(0x%lx,\"%s\","), lock1, bstr (unit, name1))); TRACE((_T("0x%lx,\"%s\")\n"), lock2, bstr (unit, name2))); if (unit->ui.readonly || unit->ui.locked) { PUT_PCK_RES1 (packet, DOS_FALSE); PUT_PCK_RES2 (packet, ERROR_DISK_WRITE_PROTECTED); return; } a1 = find_aino (unit, lock1, bstr (unit, name1), &err1); if (err1 != 0) { PUT_PCK_RES1 (packet, DOS_FALSE); PUT_PCK_RES2 (packet, err1); return; } /* rename always fails if file is open for writing */ for (k1 = unit->keys; k1; k1 = knext) { knext = k1->next; if (k1->aino == a1 && k1->fd && k1->createmode == 2) { PUT_PCK_RES1 (packet, DOS_FALSE); PUT_PCK_RES2 (packet, ERROR_OBJECT_IN_USE); return; } } /* See whether the other name already exists in the filesystem. */ a2 = find_aino (unit, lock2, bstr (unit, name2), &err2); if (a2 == a1) { /* Renaming to the same name, but possibly different case. */ if (_tcscmp (a1->aname, bstr_cut (unit, name2)) == 0) { /* Exact match -> do nothing. */ notify_check (unit, a1); updatedirtime (a1, 1); PUT_PCK_RES1 (packet, DOS_TRUE); return; } a2 = a2->parent; } else if (a2 == 0 || err2 != ERROR_OBJECT_NOT_AROUND) { PUT_PCK_RES1 (packet, DOS_FALSE); PUT_PCK_RES2 (packet, err2 == 0 ? ERROR_OBJECT_EXISTS : err2); return; } a2 = create_child_aino (unit, a2, bstr_cut (unit, name2), a1->dir); if (a2 == 0) { PUT_PCK_RES1 (packet, DOS_FALSE); PUT_PCK_RES2 (packet, ERROR_DISK_IS_FULL); /* best we can do */ return; } if (-1 == my_rename (a1->nname, a2->nname)) { int ret = -1; /* maybe we have open file handles that caused failure? */ write_log (_T("rename '%s' -> '%s' failed, trying relocking..\n"), a1->nname, a2->nname); wehavekeys = relock_do (unit, a1); /* try again... */ ret = my_rename (a1->nname, a2->nname); /* restore locks */ relock_re (unit, a1, a2, ret == -1 ? 1 : 0); if (ret == -1) { delete_aino (unit, a2); PUT_PCK_RES1 (packet, DOS_FALSE); PUT_PCK_RES2 (packet, dos_errno ()); return; } } notify_check (unit, a1); notify_check (unit, a2); a2->comment = a1->comment; a1->comment = 0; a2->amigaos_mode = a1->amigaos_mode; a2->uniq = a1->uniq; a2->elock = a1->elock; a2->shlock = a1->shlock; a2->has_dbentry = a1->has_dbentry; a2->db_offset = a1->db_offset; a2->dirty = 0; move_exkeys (unit, a1, a2); move_aino_children (unit, a1, a2); delete_aino (unit, a1); a2->dirty = 1; if (a2->parent) fsdb_dir_writeback (a2->parent); updatedirtime (a2, 1); fsdb_set_file_attrs (a2); if (a2->elock > 0 || a2->shlock > 0 || wehavekeys > 0) de_recycle_aino (unit, a2); PUT_PCK_RES1 (packet, DOS_TRUE); gui_flicker_led (UNIT_LED(unit), unit->unit, 2); } static void action_current_volume (Unit *unit, dpacket packet) { if (filesys_isvolume(unit)) PUT_PCK_RES1 (packet, unit->volume >> 2); else PUT_PCK_RES1 (packet, 0); } static void action_rename_disk (Unit *unit, dpacket packet) { uaecptr name = GET_PCK_ARG1 (packet) << 2; TRACE((_T("ACTION_RENAME_DISK(\"%s\")\n"), bstr (unit, name))); if (unit->ui.readonly || unit->ui.locked) { PUT_PCK_RES1 (packet, DOS_FALSE); PUT_PCK_RES2 (packet, ERROR_DISK_WRITE_PROTECTED); return; } /* get volume name */ xfree (unit->ui.volname); unit->ui.volname = bstr1 (name); set_volume_name (unit, 0); PUT_PCK_RES1 (packet, DOS_TRUE); } static void action_is_filesystem (Unit *unit, dpacket packet) { TRACE((_T("ACTION_IS_FILESYSTEM()\n"))); PUT_PCK_RES1 (packet, DOS_TRUE); } static void action_flush (Unit *unit, dpacket packet) { TRACE((_T("ACTION_FLUSH()\n"))); PUT_PCK_RES1 (packet, DOS_TRUE); flush_cache (unit, 0); } static void action_more_cache (Unit *unit, dpacket packet) { TRACE((_T("ACTION_MORE_CACHE()\n"))); PUT_PCK_RES1 (packet, 50); /* bug but AmigaOS expects it */ if (GET_PCK_ARG1 (packet) != 0) flush_cache (unit, 0); } static void action_inhibit (Unit *unit, dpacket packet) { PUT_PCK_RES1 (packet, DOS_TRUE); flush_cache (unit, 0); unit->inhibited = GET_PCK_ARG1 (packet) != 0; TRACE((_T("ACTION_INHIBIT(%d:%d)\n"), unit->unit, unit->inhibited)); } static void action_write_protect (Unit *unit, dpacket packet) { TRACE((_T("ACTION_WRITE_PROTECT()\n"))); PUT_PCK_RES1 (packet, DOS_TRUE); if (GET_PCK_ARG1 (packet)) { if (!unit->ui.locked) { unit->ui.locked = true; unit->lockkey = GET_PCK_ARG2 (packet); } } else { if (unit->ui.locked) { if (unit->lockkey == GET_PCK_ARG2 (packet) || unit->lockkey == 0) { unit->ui.locked = false; } else { PUT_PCK_RES1 (packet, DOS_FALSE); PUT_PCK_RES2 (packet, 0); } } } } static void action_change_file_position64 (Unit *unit, dpacket packet) { Key *k = lookup_key (unit, GET_PCK64_ARG1 (packet)); uae_s64 pos = GET_PCK64_ARG2 (packet); long mode = GET_PCK64_ARG3 (packet); long whence = SEEK_CUR; uae_s64 res, cur; PUT_PCK64_RES0 (packet, DP64_INIT); if (k == 0) { PUT_PCK64_RES1 (packet, DOS_FALSE); PUT_PCK64_RES2 (packet, ERROR_INVALID_LOCK); return; } if (mode > 0) whence = SEEK_END; if (mode < 0) whence = SEEK_SET; TRACE((_T("ACTION_CHANGE_FILE_POSITION64(%s,%lld,%d)\n"), k->aino->nname, pos, mode)); gui_flicker_led (UNIT_LED(unit), unit->unit, 1); cur = k->file_pos; { uae_s64 temppos; uae_s64 filesize = fs_fsize64 (k->fd); if (whence == SEEK_CUR) temppos = cur + pos; if (whence == SEEK_SET) temppos = pos; if (whence == SEEK_END) temppos = filesize + pos; if (filesize < temppos) { res = -1; PUT_PCK64_RES1 (packet, res); PUT_PCK64_RES2 (packet, ERROR_SEEK_ERROR); return; } } res = fs_lseek64 (k->fd, pos, whence); if (-1 == res) { PUT_PCK64_RES1 (packet, DOS_FALSE); PUT_PCK64_RES2 (packet, ERROR_SEEK_ERROR); } else { PUT_PCK64_RES1 (packet, TRUE); PUT_PCK64_RES2 (packet, 0); k->file_pos = fs_lseek64 (k->fd, 0, SEEK_CUR); } TRACE((_T("= oldpos %lld newpos %lld\n"), cur, k->file_pos)); } static void action_get_file_position64 (Unit *unit, dpacket packet) { Key *k = lookup_key (unit, GET_PCK64_ARG1 (packet)); PUT_PCK64_RES0 (packet, DP64_INIT); if (k == 0) { PUT_PCK64_RES1 (packet, DOS_FALSE); PUT_PCK64_RES2 (packet, ERROR_INVALID_LOCK); return; } TRACE((_T("ACTION_GET_FILE_POSITION64(%s)=%lld\n"), k->aino->nname, k->file_pos)); PUT_PCK64_RES1 (packet, k->file_pos); PUT_PCK64_RES2 (packet, 0); } static void action_change_file_size64 (Unit *unit, dpacket packet) { Key *k, *k1; uae_s64 offset = GET_PCK64_ARG2 (packet); long mode = (uae_s32)GET_PCK64_ARG3 (packet); int whence = SEEK_CUR; PUT_PCK64_RES0 (packet, DP64_INIT); if (mode > 0) whence = SEEK_END; if (mode < 0) whence = SEEK_SET; TRACE((_T("ACTION_CHANGE_FILE_SIZE64(0x%lx, %lld, 0x%x)\n"), GET_PCK64_ARG1 (packet), offset, mode)); k = lookup_key (unit, GET_PCK64_ARG1 (packet)); if (k == 0) { PUT_PCK64_RES1 (packet, DOS_FALSE); PUT_PCK64_RES2 (packet, ERROR_OBJECT_NOT_AROUND); return; } gui_flicker_led (UNIT_LED(unit), unit->unit, 1); k->notifyactive = 1; /* If any open files have file pointers beyond this size, truncate only * so far that these pointers do not become invalid. */ for (k1 = unit->keys; k1; k1 = k1->next) { if (k != k1 && k->aino == k1->aino) { if (k1->file_pos > offset) offset = k1->file_pos; } } /* Write one then truncate: that should give the right size in all cases. */ fs_lseek (k->fd, offset, whence); offset = fs_lseek64 (k->fd, offset, whence); fs_write (k->fd, /* whatever */(uae_u8*)&k1, 1); if (k->file_pos > offset) k->file_pos = offset; fs_lseek64 (k->fd, k->file_pos, SEEK_SET); if (my_truncate (k->aino->nname, offset) == -1) { PUT_PCK64_RES1 (packet, DOS_FALSE); PUT_PCK64_RES2 (packet, dos_errno ()); return; } PUT_PCK64_RES1 (packet, DOS_TRUE); PUT_PCK64_RES2 (packet, 0); } static void action_get_file_size64 (Unit *unit, dpacket packet) { Key *k = lookup_key (unit, GET_PCK64_ARG1 (packet)); uae_s64 filesize; PUT_PCK64_RES0 (packet, DP64_INIT); if (k == 0) { PUT_PCK64_RES1 (packet, DOS_FALSE); PUT_PCK64_RES2 (packet, ERROR_INVALID_LOCK); return; } #ifdef FSUAE g_packet_delay = 50; #endif TRACE((_T("ACTION_GET_FILE_SIZE64(%s)\n"), k->aino->nname)); filesize = fs_fsize64 (k->fd); TRACE((_T("ACTION_GET_FILE_SIZE64(%s)=%lld\n"), k->aino->nname, filesize)); if (filesize >= 0) { PUT_PCK64_RES1 (packet, filesize); PUT_PCK64_RES2 (packet, 0); return; } PUT_PCK64_RES1 (packet, DOS_FALSE); PUT_PCK64_RES2 (packet, ERROR_SEEK_ERROR); } /* We don't want multiple interrupts to be active at the same time. I don't * know whether AmigaOS takes care of that, but this does. */ static uae_sem_t singlethread_int_sem; static uae_u32 REGPARAM2 exter_int_helper (TrapContext *context) { UnitInfo *uip = mountinfo.ui; uaecptr port; int n = m68k_dreg (regs, 0); static int unit_no; switch (n) { case 0: /* Determine whether a given EXTER interrupt is for us. */ if (uae_int_requested & 1) { if (uae_sem_trywait (&singlethread_int_sem) != 0) /* Pretend it isn't for us. We might get it again later. */ return 0; /* Clear the interrupt flag _before_ we do any processing. * That way, we can get too many interrupts, but never not * enough. */ filesys_in_interrupt++; uae_int_requested &= ~1; unit_no = 0; return 1; } return 0; case 1: /* Release a message_lock. This is called as soon as the message is * received by the assembly code. We use the opportunity to check * whether we have some locks that we can give back to the assembler * code. * Note that this is called from the main loop, unlike the other cases * in this switch statement which are called from the interrupt handler. */ #ifdef UAE_FILESYS_THREADS { Unit *unit = find_unit (m68k_areg (regs, 5)); uaecptr msg = m68k_areg (regs, 4); unit->cmds_complete = unit->cmds_acked; while (comm_pipe_has_data (unit->ui.back_pipe)) { uaecptr locks, lockend; int cnt = 0; locks = read_comm_pipe_int_blocking (unit->ui.back_pipe); lockend = locks; while (get_long (lockend) != 0) { if (get_long (lockend) == lockend) { write_log (_T("filesystem lock queue corrupted!\n")); break; } lockend = get_long (lockend); cnt++; } TRACE3((_T("message_lock: %d %x %x %x\n"), cnt, locks, lockend, m68k_areg (regs, 3))); put_long (lockend, get_long (m68k_areg (regs, 3))); put_long (m68k_areg (regs, 3), locks); } } #else write_log (_T("exter_int_helper should not be called with arg 1!\n")); #endif break; case 2: /* Find work that needs to be done: * return d0 = 0: none * d0 = 1: PutMsg(), port in a0, message in a1 * d0 = 2: Signal(), task in a1, signal set in d1 * d0 = 3: ReplyMsg(), message in a1 * d0 = 4: Cause(), interrupt in a1 * d0 = 5: Send FileNofication message, port in a0, notifystruct in a1 */ #ifdef SUPPORT_THREADS /* First, check signals/messages */ while (comm_pipe_has_data (&native2amiga_pending)) { int cmd = read_comm_pipe_int_blocking (&native2amiga_pending); switch (cmd) { case 0: /* Signal() */ m68k_areg (regs, 1) = read_comm_pipe_u32_blocking (&native2amiga_pending); m68k_dreg (regs, 1) = read_comm_pipe_u32_blocking (&native2amiga_pending); return 2; case 1: /* PutMsg() */ m68k_areg (regs, 0) = read_comm_pipe_u32_blocking (&native2amiga_pending); m68k_areg (regs, 1) = read_comm_pipe_u32_blocking (&native2amiga_pending); return 1; case 2: /* ReplyMsg() */ m68k_areg (regs, 1) = read_comm_pipe_u32_blocking (&native2amiga_pending); return 3; case 3: /* Cause() */ m68k_areg (regs, 1) = read_comm_pipe_u32_blocking (&native2amiga_pending); return 4; case 4: /* NotifyHack() */ m68k_areg (regs, 0) = read_comm_pipe_u32_blocking (&native2amiga_pending); m68k_areg (regs, 1) = read_comm_pipe_u32_blocking (&native2amiga_pending); return 5; default: write_log (_T("exter_int_helper: unknown native action %X\n"), cmd); break; } } #endif /* Find some unit that needs a message sent, and return its port, * or zero if all are done. * Take care not to dereference self for units that didn't have their * startup packet sent. */ for (;;) { if (unit_no >= MAX_FILESYSTEM_UNITS) return 0; if (uip[unit_no].open && uip[unit_no].self != 0 && uip[unit_no].self->cmds_acked == uip[unit_no].self->cmds_complete && uip[unit_no].self->cmds_acked != uip[unit_no].self->cmds_sent) break; unit_no++; } uip[unit_no].self->cmds_acked = uip[unit_no].self->cmds_sent; port = uip[unit_no].self->port; if (port) { m68k_areg (regs, 0) = port; m68k_areg (regs, 1) = find_unit (port)->dummy_message; unit_no++; return 1; } break; case 3: uae_sem_wait (&singlethread_int_sem); break; case 4: /* Exit the interrupt, and release the single-threading lock. */ filesys_in_interrupt--; uae_sem_post (&singlethread_int_sem); break; default: write_log (_T("Shouldn't happen in exter_int_helper.\n")); break; } return 0; } static int handle_packet (Unit *unit, dpacket pck, uae_u32 msg) { uae_s32 type = GET_PCK_TYPE (pck); PUT_PCK_RES2 (pck, 0); TRACE((_T("unit=%x packet=%d\n"), unit, type)); if (unit->inhibited && filesys_isvolume (unit) && type != ACTION_INHIBIT && type != ACTION_MORE_CACHE && type != ACTION_DISK_INFO) { PUT_PCK_RES1 (pck, DOS_FALSE); PUT_PCK_RES2 (pck, ERROR_NOT_A_DOS_DISK); return 1; } if (type != ACTION_INHIBIT && type != ACTION_CURRENT_VOLUME && type != ACTION_IS_FILESYSTEM && type != ACTION_MORE_CACHE && type != ACTION_WRITE_PROTECT && type != ACTION_DISK_INFO && !filesys_isvolume (unit)) { PUT_PCK_RES1 (pck, DOS_FALSE); PUT_PCK_RES2 (pck, unit->ui.unknown_media ? ERROR_NOT_A_DOS_DISK : ERROR_NO_DISK); return 1; } #ifdef FSUAE //int t1 = SDL_GetTicks(); #endif switch (type) { case ACTION_LOCATE_OBJECT: action_lock (unit, pck); break; case ACTION_FREE_LOCK: action_free_lock (unit, pck); break; case ACTION_COPY_DIR: action_dup_lock (unit, pck); break; case ACTION_DISK_INFO: action_disk_info (unit, pck); break; case ACTION_INFO: action_info (unit, pck); break; case ACTION_EXAMINE_OBJECT: action_examine_object (unit, pck); break; case ACTION_EXAMINE_NEXT: action_examine_next (unit, pck); break; case ACTION_FIND_INPUT: action_find_input (unit, pck); break; case ACTION_FIND_WRITE: action_find_write (unit, pck); break; case ACTION_FIND_OUTPUT: action_find_output (unit, pck); break; case ACTION_END: action_end (unit, pck); break; case ACTION_READ: action_read (unit, pck); break; case ACTION_WRITE: action_write (unit, pck); break; case ACTION_SEEK: action_seek (unit, pck); break; case ACTION_SET_PROTECT: action_set_protect (unit, pck); break; case ACTION_SET_COMMENT: action_set_comment (unit, pck); break; case ACTION_SAME_LOCK: action_same_lock (unit, pck); break; case ACTION_PARENT: action_parent (unit, pck); break; case ACTION_CREATE_DIR: action_create_dir (unit, pck); break; case ACTION_DELETE_OBJECT: action_delete_object (unit, pck); break; case ACTION_RENAME_OBJECT: action_rename_object (unit, pck); break; case ACTION_SET_DATE: action_set_date (unit, pck); break; case ACTION_CURRENT_VOLUME: action_current_volume (unit, pck); break; case ACTION_RENAME_DISK: action_rename_disk (unit, pck); break; case ACTION_IS_FILESYSTEM: action_is_filesystem (unit, pck); break; case ACTION_FLUSH: action_flush (unit, pck); break; case ACTION_MORE_CACHE: action_more_cache (unit, pck); break; case ACTION_INHIBIT: action_inhibit (unit, pck); break; case ACTION_WRITE_PROTECT: action_write_protect (unit, pck); break; /* 2.0+ packet types */ case ACTION_SET_FILE_SIZE: action_set_file_size (unit, pck); break; case ACTION_EXAMINE_FH: action_examine_fh (unit, pck); break; case ACTION_FH_FROM_LOCK: action_fh_from_lock (unit, pck); break; case ACTION_COPY_DIR_FH: action_lock_from_fh (unit, pck); break; case ACTION_CHANGE_MODE: action_change_mode (unit, pck); break; case ACTION_PARENT_FH: action_parent_fh (unit, pck); break; case ACTION_ADD_NOTIFY: action_add_notify (unit, pck); break; case ACTION_REMOVE_NOTIFY: action_remove_notify (unit, pck); break; case ACTION_EXAMINE_ALL: return action_examine_all (unit, pck); case ACTION_EXAMINE_ALL_END: return action_examine_all_end (unit, pck); case ACTION_LOCK_RECORD: return action_lock_record (unit, pck, msg); break; case ACTION_FREE_RECORD: action_free_record (unit, pck); break; /* OS4+ packet types */ case ACTION_CHANGE_FILE_POSITION64: action_change_file_position64 (unit, pck); break; case ACTION_GET_FILE_POSITION64: action_get_file_position64 (unit, pck); break; case ACTION_CHANGE_FILE_SIZE64: action_change_file_size64 (unit, pck); break; case ACTION_GET_FILE_SIZE64: action_get_file_size64 (unit, pck); break; /* unsupported packets */ case ACTION_MAKE_LINK: case ACTION_READ_LINK: case ACTION_FORMAT: return 0; default: write_log (_T("FILESYS: UNKNOWN PACKET %x\n"), type); return 0; } #ifdef FSUAE //int t2 = SDL_GetTicks(); //if (t2 - t1 >= 9 ) { // write_log("fs action %d took %d ms\n", type, t2 - t1); //} #endif return 1; } #ifdef UAE_FILESYS_THREADS static int filesys_iteration(UnitInfo *ui) { dpacket pck; uaecptr msg; uae_u32 morelocks; pck = read_comm_pipe_u32_blocking (ui->unit_pipe); msg = read_comm_pipe_u32_blocking (ui->unit_pipe); morelocks = (uae_u32)read_comm_pipe_int_blocking (ui->unit_pipe); if (ui->reset_state == FS_GO_DOWN) { if (pck != 0) return 1; /* Death message received. */ uae_sem_post (&ui->reset_sync_sem); /* Die. */ return 0; } put_long (get_long (morelocks), get_long (ui->self->locklist)); put_long (ui->self->locklist, morelocks); int ret = handle_packet (ui->self, pck, msg); if (!ret) { PUT_PCK_RES1 (pck, DOS_FALSE); PUT_PCK_RES2 (pck, ERROR_ACTION_NOT_KNOWN); } if (ret >= 0) { /* Mark the packet as processed for the list scan in the assembly code. */ put_long (msg + 4, 0xffffffff); } /* Acquire the message lock, so that we know we can safely send the message. */ ui->self->cmds_sent++; /* The message is sent by our interrupt handler, so make sure an interrupt happens. */ do_uae_int_requested (); /* Send back the locks. */ if (get_long (ui->self->locklist) != 0) write_comm_pipe_int (ui->back_pipe, (int)(get_long (ui->self->locklist)), 0); put_long (ui->self->locklist, 0); return 1; } static void *filesys_thread (void *unit_v) { UnitInfo *ui = (UnitInfo *)unit_v; uae_set_thread_priority (NULL, 1); for (;;) { if (!filesys_iteration (ui)) { return 0; } } return 0; } #endif /* Talk about spaghetti code... */ static uae_u32 REGPARAM2 filesys_handler (TrapContext *context) { Unit *unit = find_unit (m68k_areg (regs, 5)); uaecptr packet_addr = m68k_dreg (regs, 3); uaecptr message_addr = m68k_areg (regs, 4); if (! valid_address (packet_addr, 36) || ! valid_address (message_addr, 14)) { write_log (_T("FILESYS: Bad address %x/%x passed for packet.\n"), packet_addr, message_addr); goto error2; } put_long (message_addr + 4, 0xffffffff); if (!unit || !unit->volume) { write_log (_T("FILESYS: was not initialized.\n")); goto error; } #ifdef UAE_FILESYS_THREADS { uae_u32 morelocks; if (!unit->ui.unit_pipe) goto error; /* Get two more locks and hand them over to the other thread. */ morelocks = get_long (m68k_areg (regs, 3)); put_long (m68k_areg (regs, 3), get_long (get_long (morelocks))); put_long (get_long (morelocks), 0); /* The packet wasn't processed yet. */ put_long (message_addr + 4, 0); write_comm_pipe_u32 (unit->ui.unit_pipe, packet_addr, 0); write_comm_pipe_u32 (unit->ui.unit_pipe, message_addr, 0); write_comm_pipe_int (unit->ui.unit_pipe, (int)morelocks, 1); /* Don't reply yet. */ return 1; } #endif if (! handle_packet (unit, packet_addr, 0)) { error: PUT_PCK_RES1 (packet_addr, DOS_FALSE); PUT_PCK_RES2 (packet_addr, ERROR_ACTION_NOT_KNOWN); } TRACE((_T("reply: %8lx, %ld\n"), GET_PCK_RES1 (packet_addr), GET_PCK_RES2 (packet_addr))); error2: return 0; } static void init_filesys_diagentry (void) { do_put_mem_long ((uae_u32 *)(filesysory + 0x2100), EXPANSION_explibname); do_put_mem_long ((uae_u32 *)(filesysory + 0x2104), filesys_configdev); do_put_mem_long ((uae_u32 *)(filesysory + 0x2108), EXPANSION_doslibname); do_put_mem_word ((uae_u16 *)(filesysory + 0x210e), nr_units ()); do_put_mem_word ((uae_u16 *)(filesysory + 0x210c), 0); native2amiga_startup (); } void filesys_start_threads (void) { int i; filesys_in_interrupt = 0; for (i = 0; i < MAX_FILESYSTEM_UNITS; i++) { UnitInfo *ui = &mountinfo.ui[i]; if (!ui->open) continue; filesys_start_thread (ui, i); } } void filesys_cleanup (void) { filesys_free_handles (); free_mountinfo (); } void filesys_free_handles (void) { Unit *u, *u1; for (u = units; u; u = u1) { Key *k1, *knext; u1 = u->next; for (k1 = u->keys; k1; k1 = knext) { knext = k1->next; if (k1->fd) fs_closefile (k1->fd); xfree (k1); } u->keys = NULL; struct lockrecord *lrnext; for (struct lockrecord *lr = u->waitingrecords; lr; lr = lrnext) { lrnext = lr->next; xfree (lr); } u->waitingrecords = NULL; free_all_ainos (u, &u->rootnode); u->rootnode.next = u->rootnode.prev = &u->rootnode; u->aino_cache_size = 0; xfree (u->newrootdir); xfree (u->newvolume); u->newrootdir = NULL; u->newvolume = NULL; } } static void filesys_reset2 (void) { Unit *u, *u1; filesys_free_handles (); for (u = units; u; u = u1) { u1 = u->next; xfree (u); } units = 0; key_uniq = 0; a_uniq = 0; free_mountinfo (); } void filesys_reset (void) { if (isrestore ()) return; filesys_reset2 (); initialize_mountinfo (); } static void filesys_prepare_reset2 (void) { UnitInfo *uip; // Unit *u; int i; uip = mountinfo.ui; #ifdef UAE_FILESYS_THREADS for (i = 0; i < MAX_FILESYSTEM_UNITS; i++) { if (uip[i].open && uip[i].unit_pipe != 0) { uae_sem_init (&uip[i].reset_sync_sem, 0, 0); uip[i].reset_state = FS_GO_DOWN; /* send death message */ write_comm_pipe_int (uip[i].unit_pipe, 0, 0); write_comm_pipe_int (uip[i].unit_pipe, 0, 0); write_comm_pipe_int (uip[i].unit_pipe, 0, 1); #ifdef FSUAE if (uae_deterministic_mode()) { while (comm_pipe_has_data(uip[i].unit_pipe)) { // process remaining packets until all are done filesys_hsync(); } } else { #endif uae_sem_wait (&uip[i].reset_sync_sem); uae_end_thread (&uip[i].tid); #ifdef FSUAE } #endif } } #endif filesys_free_handles(); #if 0 u = units; while (u != 0) { free_all_ainos (u, &u->rootnode); u->rootnode.next = u->rootnode.prev = &u->rootnode; u->aino_cache_size = 0; u = u->next; } #endif } void filesys_prepare_reset (void) { if (isrestore ()) return; filesys_prepare_reset2 (); } static uae_u32 REGPARAM2 filesys_diagentry (TrapContext *context) { uaecptr resaddr = m68k_areg (regs, 2) + 0x10; uaecptr start = resaddr; uaecptr residents, tmp; write_log (_T("filesystem: diagentry called: %x\n"), resaddr); filesys_configdev = m68k_areg (regs, 3); init_filesys_diagentry (); if (ROM_hardfile_resid != 0) { /* Build a struct Resident. This will set up and initialize * the uae.device */ put_word (resaddr + 0x0, 0x4AFC); put_long (resaddr + 0x2, resaddr); put_long (resaddr + 0x6, resaddr + 0x1A); /* Continue scan here */ put_word (resaddr + 0xA, 0x8101); /* RTF_AUTOINIT|RTF_COLDSTART; Version 1 */ put_word (resaddr + 0xC, 0x0305); /* NT_DEVICE; pri 05 */ put_long (resaddr + 0xE, ROM_hardfile_resname); put_long (resaddr + 0x12, ROM_hardfile_resid); put_long (resaddr + 0x16, ROM_hardfile_init); /* calls filesys_init */ } resaddr += 0x1A; tmp = resaddr; /* The good thing about this function is that it always gets called * when we boot. So we could put all sorts of stuff that wants to be done * here. * We can simply add more Resident structures here. Although the Amiga OS * only knows about the one at address DiagArea + 0x10, we scan for other * Resident structures and call InitResident() for them at the end of the * diag entry. */ resaddr = uaeres_startup (resaddr); #ifdef BSDSOCKET resaddr = bsdlib_startup (resaddr); #endif #ifdef SCSIEMU resaddr = scsidev_startup (resaddr); #endif #ifdef SANA2 resaddr = netdev_startup (resaddr); #endif #ifdef UAESERIAL resaddr = uaeserialdev_startup (resaddr); #endif /* scan for Residents and return pointer to array of them */ residents = resaddr; while (tmp < residents && tmp > start) { if (get_word (tmp) == 0x4AFC && get_long (tmp + 0x2) == tmp) { put_word (resaddr, 0x227C); /* movea.l #tmp,a1 */ put_long (resaddr + 2, tmp); put_word (resaddr + 6, 0x7200); /* moveq.l #0,d1 */ put_long (resaddr + 8, 0x4EAEFF9A); /* jsr -$66(a6) ; InitResident */ resaddr += 12; tmp = get_long (tmp + 0x6); } else { tmp++; } } /* call setup_exter */ put_word (resaddr + 0, 0x2079); put_long (resaddr + 2, rtarea_base + bootrom_header + 4 + 5 * 4); /* move.l RTAREA_BASE+setup_exter,a0 */ put_word (resaddr + 6, 0xd1fc); put_long (resaddr + 8, rtarea_base + bootrom_header); /* add.l #RTAREA_BASE+bootrom_header,a0 */ put_word (resaddr + 12, 0x4e90); /* jsr (a0) */ put_word (resaddr + 14, 0x7001); /* moveq.l #1,d0 */ put_word (resaddr + 16, RTS); m68k_areg (regs, 0) = residents; return 1; } /* don't forget filesys.asm! */ #define PP_MAXSIZE 4 * 96 #define PP_FSSIZE 400 #define PP_FSPTR 404 #define PP_FSRES 408 #define PP_EXPLIB 412 #define PP_FSHDSTART 416 static uae_u32 REGPARAM2 filesys_dev_bootfilesys (TrapContext *context) { uaecptr devicenode = m68k_areg (regs, 3); uaecptr parmpacket = m68k_areg (regs, 1); uaecptr fsres = get_long (parmpacket + PP_FSRES); uaecptr fsnode; uae_u32 dostype, dostype2; int no = m68k_dreg (regs, 6) & 0x7fffffff; int unit_no = no & 65535; UnitInfo *uip = &mountinfo.ui[unit_no]; int iscd = (m68k_dreg (regs, 6) & 0x80000000) != 0 || uip->unit_type == UNIT_CDFS; int type; if (iscd) { if (!get_long (devicenode + 16)) put_long (devicenode + 16, cdfs_handlername); return 0; } else { type = is_hardfile (unit_no); } if (type == FILESYS_VIRTUAL) { if (!get_long (devicenode + 16)) put_long (devicenode + 16, fshandlername); return 0; } dostype = get_long (parmpacket + 80); fsnode = get_long (fsres + 18); while (get_long (fsnode)) { dostype2 = get_long (fsnode + 14); if (dostype2 == dostype) { int i; uae_u32 pf = get_long (fsnode + 22); // fse_PatchFlags for (i = 0; i < 32; i++) { if (pf & (1 << i)) put_long (devicenode + 4 + i * 4, get_long (fsnode + 22 + 4 + i * 4)); } return 1; } fsnode = get_long (fsnode); } return 0; } extern void picasso96_alloc (TrapContext*); static uae_u32 REGPARAM2 filesys_init_storeinfo (TrapContext *context) { int ret = -1; switch (m68k_dreg (regs, 1)) { case 1: mountertask = m68k_areg (regs, 1); #ifdef PICASSO96 picasso96_alloc (context); #endif break; case 2: ret = automountunit; automountunit = -1; break; case 3: return 0; } return ret; } static uae_u8 *cdfs_handler; static int cdfs_handler_len; /* Remember a pointer AmigaOS gave us so we can later use it to identify * which unit a given startup message belongs to. */ static uae_u32 REGPARAM2 filesys_dev_remember (TrapContext *context) { int no = m68k_dreg (regs, 6) & 0x7fffffff; int unit_no = no & 65535; int sub_no = no >> 16; UnitInfo *uip = &mountinfo.ui[unit_no]; int iscd = (m68k_dreg (regs, 6) & 0x80000000) != 0 || uip->unit_type == UNIT_CDFS; int i; uaecptr devicenode = m68k_areg (regs, 3); uaecptr parmpacket = m68k_areg (regs, 1); int fssize; uae_u8 *fs; uip->devicenode = devicenode; fssize = uip->rdb_filesyssize; fs = uip->rdb_filesysstore; /* copy filesystem loaded from RDB */ if (get_long (parmpacket + PP_FSPTR)) { for (i = 0; i < fssize; i++) put_byte (get_long (parmpacket + PP_FSPTR) + i, fs[i]); } xfree (fs); uip->rdb_filesysstore = 0; uip->rdb_filesyssize = 0; if (m68k_dreg (regs, 3) >= 0) uip->startup = get_long (devicenode + 28); return devicenode; } static int legalrdbblock (UnitInfo *uip, int block) { if (block <= 0) return 0; if (block >= uip->hf.virtsize / uip->hf.blocksize) return 0; return 1; } static uae_u32 rl (uae_u8 *p) { return (p[0] << 24) | (p[1] << 16) | (p[2] << 8) | (p[3]); } int rdb_checksum (uae_char *id, uae_u8 *p, int block) { uae_u32 sum = 0; int i, blocksize; if (memcmp (id, p, 4)) return 0; blocksize = rl (p + 4); if (blocksize < 1 || blocksize * 4 > FILESYS_MAX_BLOCKSIZE) return 0; for (i = 0; i < blocksize; i++) sum += rl (p + i * 4); sum = -sum; if (sum) { TCHAR *s = au (id); write_log (_T("RDB: block %d ('%s') checksum error\n"), block, s); xfree (s); return 0; } return 1; } static int device_isdup (uaecptr expbase, TCHAR *devname) { uaecptr bnode, dnode, name; int len, i; TCHAR dname[256]; bnode = get_long (expbase + 74); /* expansion.library bootnode list */ while (get_long (bnode)) { dnode = get_long (bnode + 16); /* device node */ name = get_long (dnode + 40) << 2; /* device name BSTR */ len = get_byte (name); for (i = 0; i < len; i++) dname[i] = get_byte (name + 1 + i); dname[len] = 0; if (!_tcsicmp (devname, dname)) return 1; bnode = get_long (bnode); } return 0; } static TCHAR *device_dupfix (uaecptr expbase, TCHAR *devname) { int modified; TCHAR newname[256]; _tcscpy (newname, devname); modified = 1; while (modified) { modified = 0; if (device_isdup (expbase, newname)) { if (_tcslen (newname) > 2 && newname[_tcslen (newname) - 2] == '_') { newname[_tcslen (newname) - 1]++; } else { _tcscat (newname, _T("_0")); } modified = 1; } } return my_strdup (newname); } static const TCHAR *dostypes (uae_u32 dostype) { static TCHAR dt[32]; int j; j = 0; for (int i = 0; i < 4; i++) { uae_u8 c = dostype >> ((3 - i) * 8); if (c >= ' ' && c <= 'z') { dt[j++] = c; } else { dt[j++] = '\\'; _stprintf (&dt[j], _T("%d"), c); j += _tcslen (&dt[j]); } } dt[j] = 0; return dt; } static void dump_partinfo (struct hardfiledata *hfd, uae_u8 *pp) { TCHAR *s; uae_u32 dostype; uae_u64 size; int blocksize, surfaces, spb, spt, reserved; int lowcyl, highcyl; uae_u32 block, flags; uae_u8 buf[512]; flags = rl (pp + 20); pp[37 + pp[36]] = 0; s = au ((char*)pp + 37); pp += 128; dostype = rl (pp + 64); size = ((uae_u64)rl (pp + 4)) * 4 * rl (pp + 12) * rl (pp + 20) * (rl (pp + 40) - rl (pp + 36) + 1); blocksize = rl (pp + 4) * 4; surfaces = rl (pp + 12); spb = rl (pp + 16); spt = rl (pp + 20); reserved = rl (pp + 24); lowcyl = rl (pp + 36); highcyl = rl (pp + 40); write_log (_T("RDB: '%s' dostype=%08X (%s) Flags: %08X\n"), s, dostype, dostypes (dostype), flags); write_log (_T("BlockSize: %d, Surfaces: %d, SectorsPerBlock %d\n"), blocksize, surfaces, spb); write_log (_T("SectorsPerTrack: %d, Reserved: %d, LowCyl %d, HighCyl %d, Size %dM\n"), spt, reserved, lowcyl, highcyl, (uae_u32)(size >> 20)); write_log (_T("Buffers: %d, BufMemType: %08x, MaxTransfer: %08x, Mask: %08x, BootPri: %d\n"), rl (pp + 44), rl (pp + 48), rl (pp + 52), rl (pp + 56), rl (pp + 60)); block = lowcyl * surfaces * spt; if (hdf_read (hfd, buf, (uae_u64)blocksize * block, sizeof buf)) { write_log (_T("First block %d dostype: %08X (%s)\n"), block, rl (buf), dostypes (rl (buf))); } else { write_log (_T("First block %d read failed!\n"), block); } xfree (s); if ((uae_u64)highcyl * spt * surfaces * blocksize > hfd->virtsize) { write_log (_T("RDB: WARNING: end of partition > size of disk! (%llu > %llu)\n"), (uae_u64)highcyl * spt * surfaces * blocksize, hfd->virtsize); } } static void dump_rdb (UnitInfo *uip, struct hardfiledata *hfd, uae_u8 *bufrdb, uae_u8 *buf, int readblocksize) { write_log (_T("RDB: HostID: %08x Flags: %08x\n"), rl (bufrdb + 3 * 4), rl (bufrdb + 5 * 4)); write_log (_T("RDB: BL: %d BH: %d LC: %d HC: %d CB: %d HB: %d\n"), rl (bufrdb + 128), rl (bufrdb + 132), rl (bufrdb + 136), rl (bufrdb + 140), rl (bufrdb + 144), rl (bufrdb + 152)); for (int i = 0; i < 100; i++) { int partblock; if (i == 0) partblock = rl (bufrdb + 28); else partblock = rl (buf + 4 * 4); if (partblock == 0xffffffff) break; write_log (_T("RDB: PART block %d:\n"), partblock); if (!legalrdbblock (uip, partblock)) { write_log (_T("RDB: corrupt PART pointer %d\n"), partblock); break; } memset (buf, 0, readblocksize); hdf_read (hfd, buf, partblock * hfd->blocksize, readblocksize); if (!rdb_checksum ("PART", buf, partblock)) { write_log (_T("RDB: checksum error PART block %d\n"), partblock); break; } dump_partinfo (hfd, buf); } for (int i = 0; i < 100; i++) { int fileblock; if (i == 0) fileblock = rl (bufrdb + 32); else fileblock = rl (buf + 4 * 4); if (fileblock == 0xffffffff) break; write_log (_T("RDB: LSEG block %d:\n"), fileblock); if (!legalrdbblock (uip, fileblock)) { write_log (_T("RDB: corrupt FSHD pointer %d\n"), fileblock); break; } memset (buf, 0, readblocksize); hdf_read (hfd, buf, fileblock * hfd->blocksize, readblocksize); if (!rdb_checksum ("FSHD", buf, fileblock)) { write_log (_T("RDB: checksum error FSHD block %d\n"), fileblock); break; } uae_u32 dostype = rl (buf + 32); int version = (buf[36] << 8) | buf[37]; int revision = (buf[38] << 8) | buf[39]; write_log (_T("LSEG: %08x (%s) %d.%d\n"), dostype, dostypes (dostype), version, revision); } } #define rdbmnt write_log (_T("Mounting uaehf.device %d (%d) (size=%llu):\n"), unit_no, partnum, hfd->virtsize); static int rdb_mount (UnitInfo *uip, int unit_no, int partnum, uaecptr parmpacket) { int lastblock = 63, blocksize, readblocksize, badblock, driveinitblock; uae_u8 bufrdb[FILESYS_MAX_BLOCKSIZE], *buf = 0; uae_u8 *fsmem = 0; int rdblock, partblock, fileblock, lsegblock, i; uae_u32 flags; struct hardfiledata *hfd = &uip->hf; uae_u32 dostype; uaecptr fsres, fsnode; int err = 0; int oldversion, oldrevision; int newversion, newrevision; TCHAR *s; bool showdebug = partnum == 0; write_log (_T("%s:\n"), uip->rootdir); if (hfd->drive_empty) { rdbmnt write_log (_T("ignored, drive is empty\n")); return -2; } if (hfd->blocksize == 0) { rdbmnt write_log (_T("failed, blocksize == 0\n")); return -1; } if (lastblock * hfd->blocksize > hfd->virtsize) { rdbmnt write_log (_T("failed, too small (%d*%d > %llu)\n"), lastblock, hfd->blocksize, hfd->virtsize); return -2; } for (rdblock = 0; rdblock < lastblock; rdblock++) { hdf_read_rdb (hfd, bufrdb, rdblock * hfd->blocksize, hfd->blocksize); if (rdb_checksum ("RDSK", bufrdb, rdblock)) break; hdf_read_rdb (hfd, bufrdb, rdblock * hfd->blocksize, hfd->blocksize); if (!memcmp ("RDSK", bufrdb, 4)) { bufrdb[0xdc] = 0; bufrdb[0xdd] = 0; bufrdb[0xde] = 0; bufrdb[0xdf] = 0; if (rdb_checksum ("RDSK", bufrdb, rdblock)) { write_log (_T("Windows 95/98/ME trashed RDB detected, fixing..\n")); hdf_write (hfd, bufrdb, rdblock * hfd->blocksize, hfd->blocksize); break; } } } if (rdblock == lastblock) { rdbmnt write_log (_T("failed, no RDB detected\n")); return -2; } blocksize = rl (bufrdb + 16); readblocksize = blocksize > hfd->blocksize ? blocksize : hfd->blocksize; badblock = rl (bufrdb + 24); if (badblock != -1) { rdbmnt write_log (_T("RDB: badblock list is not yet supported. Contact the author.\n")); return -2; } driveinitblock = rl (bufrdb + 36); if (driveinitblock != -1) { rdbmnt write_log (_T("RDB: driveinit is not yet supported. Contact the author.\n")); return -2; } hfd->cylinders = rl (bufrdb + 64); hfd->sectors = rl (bufrdb + 68); hfd->heads = rl (bufrdb + 72); #if 0 { int cyls, secs, heads; getchsgeometry_hdf (hfd, hfd->virtsize, &cyls, &secs, &heads); if (cyls * secs * heads > hfd->cylinders * hfd->sectors * hfd->heads) { hfd->cylinders = cyls; hfd->sectors = secs; hfd->heads = heads; } } #endif fileblock = rl (bufrdb + 32); buf = xmalloc (uae_u8, readblocksize); if (showdebug) { if ((uae_u64)hfd->cylinders * hfd->sectors * hfd->heads * blocksize > hfd->virtsize) write_log (_T("RDB: WARNING: RDSK header disk size > disk size! (%llu > %llu)\n"), (uae_u64)hfd->cylinders * hfd->sectors * hfd->heads * blocksize, hfd->virtsize); write_log (_T("RDSK dump start\n")); write_log (_T("RDSK at %d, C=%d S=%d H=%d\n"), rdblock, hfd->cylinders, hfd->sectors, hfd->heads); dump_rdb (uip, hfd, bufrdb, buf, readblocksize); write_log (_T("RDSK dump end\n")); } for (i = 0; i <= partnum; i++) { if (i == 0) partblock = rl (bufrdb + 28); else partblock = rl (buf + 4 * 4); if (!legalrdbblock (uip, partblock)) { err = -2; goto error; } memset (buf, 0, readblocksize); hdf_read (hfd, buf, partblock * hfd->blocksize, readblocksize); if (!rdb_checksum ("PART", buf, partblock)) { err = -2; goto error; } } rdbmnt flags = rl (buf + 20); if ((flags & 2) || uip->bootpri <= -129) { /* do not mount */ err = -1; write_log (_T("RDB: Automount disabled, not mounting\n")); goto error; } if (!(flags & 1) || uip->bootpri <= -128) /* not bootable */ m68k_dreg (regs, 7) = m68k_dreg (regs, 7) & ~1; buf[37 + buf[36]] = 0; /* zero terminate BSTR */ s = au ((char*)buf + 37); uip->rdb_devname_amiga[partnum] = ds (device_dupfix (get_long (parmpacket + PP_EXPLIB), s)); xfree (s); put_long (parmpacket, uip->rdb_devname_amiga[partnum]); /* name */ put_long (parmpacket + 4, ROM_hardfile_resname); put_long (parmpacket + 8, uip->devno); put_long (parmpacket + 12, 0); /* Device flags */ for (i = 0; i < PP_MAXSIZE; i++) put_byte (parmpacket + 16 + i, buf[128 + i]); dostype = get_long (parmpacket + 80); if (dostype == 0) { write_log (_T("RDB: mount failed, dostype=0\n")); err = -1; goto error; } err = 2; /* load custom filesystems if needed */ if (fileblock == -1 || !legalrdbblock (uip, fileblock)) goto error; fsres = get_long (parmpacket + PP_FSRES); if (!fsres) { write_log (_T("RDB: FileSystem.resource not found, this shouldn't happen!\n")); goto error; } fsnode = get_long (fsres + 18); while (get_long (fsnode)) { if (get_long (fsnode + 14) == dostype) break; fsnode = get_long (fsnode); } oldversion = oldrevision = -1; if (get_long (fsnode)) { oldversion = get_word (fsnode + 18); oldrevision = get_word (fsnode + 20); } else { fsnode = 0; } for (;;) { if (fileblock == -1) { if (!fsnode) write_log (_T("RDB: FS %08X (%s) not in FileSystem.resource or in RDB\n"), dostype, dostypes (dostype)); goto error; } if (!legalrdbblock (uip, fileblock)) { write_log (_T("RDB: corrupt FSHD pointer %d\n"), fileblock); goto error; } memset (buf, 0, readblocksize); hdf_read (hfd, buf, fileblock * hfd->blocksize, readblocksize); if (!rdb_checksum ("FSHD", buf, fileblock)) { write_log (_T("RDB: checksum error in FSHD block %d\n"), fileblock); goto error; } fileblock = rl (buf + 16); uae_u32 rdbdostype = rl (buf + 32); if (((dostype >> 8) == (rdbdostype >> 8) && (dostype != 0x444f5300 && (dostype & 0xffffff00) == 0x444f5300)) || (dostype == rdbdostype)) break; } newversion = (buf[36] << 8) | buf[37]; newrevision = (buf[38] << 8) | buf[39]; write_log (_T("RDB: RDB filesystem %08X (%s) version %d.%d\n"), dostype, dostypes (dostype), newversion, newrevision); if (fsnode) { write_log (_T("RDB: %08X (%s) in FileSystem.resource version %d.%d\n"), dostype, dostypes (dostype), oldversion, oldrevision); } if (newversion * 65536 + newrevision <= oldversion * 65536 + oldrevision && oldversion >= 0) { write_log (_T("RDB: FS in FileSystem.resource is newer or same, ignoring RDB filesystem\n")); goto error; } for (i = 0; i < 140; i++) put_byte (parmpacket + PP_FSHDSTART + i, buf[32 + i]); put_long (parmpacket + PP_FSHDSTART, dostype); /* we found required FSHD block */ fsmem = xmalloc (uae_u8, 262144); lsegblock = rl (buf + 72); i = 0; for (;;) { int pb = lsegblock; if (!legalrdbblock (uip, lsegblock)) goto error; memset (buf, 0, readblocksize); hdf_read (hfd, buf, lsegblock * hfd->blocksize, readblocksize); if (!rdb_checksum ("LSEG", buf, lsegblock)) goto error; lsegblock = rl (buf + 16); if (lsegblock == pb) goto error; if ((i + 1) * (blocksize - 20) >= 262144) goto error; memcpy (fsmem + i * (blocksize - 20), buf + 20, blocksize - 20); i++; if (lsegblock == -1) break; } write_log (_T("RDB: Filesystem loaded, %d bytes\n"), i * (blocksize - 20)); put_long (parmpacket + PP_FSSIZE, i * (blocksize - 20)); /* RDB filesystem size hack */ uip->rdb_filesysstore = fsmem; uip->rdb_filesyssize = i * (blocksize - 20); xfree (buf); return 2; error: xfree (buf); xfree (fsmem); return err; } static void addfakefilesys (uaecptr parmpacket, uae_u32 dostype) { int i; for (i = 0; i < 140; i++) put_byte (parmpacket + PP_FSHDSTART + i, 0); put_long (parmpacket + 80, dostype); put_long (parmpacket + PP_FSHDSTART, dostype); put_long (parmpacket + PP_FSHDSTART + 8, 0x100 | (dostype == 0x444f5300 ? 0x0 : 0x80)); put_long (parmpacket + PP_FSHDSTART + 44, 0xffffffff); } static int dofakefilesys (UnitInfo *uip, uaecptr parmpacket) { int i, size; TCHAR tmp[MAX_DPATH]; uae_u8 buf[512]; struct zfile *zf; uae_u32 dostype, fsres, fsnode; memset (buf, 0, 4); hdf_read (&uip->hf, buf, 0, 512); dostype = (buf[0] << 24) | (buf[1] << 16) |(buf[2] << 8) | buf[3]; if (dostype == 0) return FILESYS_HARDFILE; fsres = get_long (parmpacket + PP_FSRES); fsnode = get_long (fsres + 18); while (get_long (fsnode)) { if (get_long (fsnode + 14) == dostype) { if (kickstart_version < 36) { addfakefilesys (parmpacket, dostype); } else if ((dostype & 0xffffff00) != 0x444f5300) { addfakefilesys (parmpacket, dostype); } return FILESYS_HARDFILE; } fsnode = get_long (fsnode); } tmp[0] = 0; if (uip->filesysdir && _tcslen (uip->filesysdir) > 0) { _tcscpy (tmp, uip->filesysdir); } else if ((dostype & 0xffffff00) == 0x444f5300) { _tcscpy (tmp, currprefs.romfile); i = _tcslen (tmp); while (i > 0 && tmp[i - 1] != '/' && tmp[i - 1] != '\\') i--; _tcscpy (tmp + i, _T("FastFileSystem")); } if (tmp[0] == 0) { write_log (_T("RDB: no filesystem for dostype 0x%08X (%s)\n"), dostype, dostypes (dostype)); if ((dostype & 0xffffff00) == 0x444f5300) return FILESYS_HARDFILE; write_log (_T("RDB: mounted without filesys\n")); return FILESYS_HARDFILE; } write_log (_T("RDB: fakefilesys, trying to load '%s', dostype 0x%08X (%s)\n"), tmp, dostype, dostypes (dostype)); zf = zfile_fopen (tmp, _T("rb"), ZFD_NORMAL); if (!zf) { write_log (_T("RDB: filesys not found\n")); if ((dostype & 0xffffff00) == 0x444f5300) return FILESYS_HARDFILE; write_log (_T("RDB: mounted without filesys\n")); return FILESYS_HARDFILE; } zfile_fseek (zf, 0, SEEK_END); size = zfile_ftell (zf); if (size > 0) { zfile_fseek (zf, 0, SEEK_SET); uip->rdb_filesysstore = xmalloc (uae_u8, size); zfile_fread (uip->rdb_filesysstore, size, 1, zf); } zfile_fclose (zf); uip->rdb_filesyssize = size; put_long (parmpacket + PP_FSSIZE, uip->rdb_filesyssize); addfakefilesys (parmpacket, dostype); write_log (_T("HDF: faked RDB filesystem %08X (%s) loaded\n"), dostype, dostypes (dostype)); return FILESYS_HARDFILE; } static void get_new_device (int type, uaecptr parmpacket, TCHAR **devname, uaecptr *devname_amiga, int unit_no) { TCHAR buffer[80]; uaecptr expbase = get_long (parmpacket + PP_EXPLIB); if (*devname == 0 || _tcslen (*devname) == 0) { int un = unit_no; for (;;) { _stprintf (buffer, type == FILESYS_CD ? _T("CD%d") : _T("DH%d"), un++); if (type == FILESYS_CD) *devname = my_strdup (buffer); if (!device_isdup (expbase, buffer)) break; } } else { _tcscpy (buffer, *devname); } *devname_amiga = ds (device_dupfix (expbase, buffer)); if (type == FILESYS_CD) write_log (_T("FS: mounted CD unit %s\n"), buffer); else if (type == FILESYS_VIRTUAL) write_log (_T("FS: mounted virtual unit %s (%s)\n"), buffer, mountinfo.ui[unit_no].rootdir); else write_log (_T("FS: mounted HDF unit %s (%04x-%08x, %s)\n"), buffer, (uae_u32)(mountinfo.ui[unit_no].hf.virtsize >> 32), (uae_u32)(mountinfo.ui[unit_no].hf.virtsize), mountinfo.ui[unit_no].rootdir); } /* Fill in per-unit fields of a parampacket */ static uae_u32 REGPARAM2 filesys_dev_storeinfo (TrapContext *context) { UnitInfo *uip = mountinfo.ui; int no = m68k_dreg (regs, 6) & 0x7fffffff; int unit_no = no & 65535; int sub_no = no >> 16; int iscd = (m68k_dreg (regs, 6) & 0x80000000) != 0 || uip[unit_no].unit_type == UNIT_CDFS; int type; uaecptr parmpacket = m68k_areg (regs, 0); if (iscd) { TCHAR *cdname = NULL; uaecptr cdname_amiga; int cd_unit_no = unit_no - cd_unit_offset; if (sub_no) return -2; type = FILESYS_CD; get_new_device (type, parmpacket, &uip[unit_no].devname, &uip[unit_no].devname_amiga, cd_unit_no); cdname_amiga = uip[unit_no].devname_amiga; uip[unit_no].devno = unit_no; type = FILESYS_VIRTUAL; gui_flicker_led (LED_CD, cd_unit_no, -1); write_log (_T("Mounting uaescsi.device %d: (%d)\n"), cd_unit_no, unit_no); put_long (parmpacket + 0, cdname_amiga); put_long (parmpacket + 4, cdfs_devname); put_long (parmpacket + 8, cd_unit_no); put_long (parmpacket + 12, 0); /* Device flags */ put_long (parmpacket + 16, 19); /* Env. size */ put_long (parmpacket + 20, 2048 >> 2); /* longwords per block */ put_long (parmpacket + 24, 0); /* unused */ put_long (parmpacket + 28, 1); /* heads */ put_long (parmpacket + 32, 1); /* sectors per block */ put_long (parmpacket + 36, 1); /* sectors per track */ put_long (parmpacket + 40, 0); /* reserved blocks */ put_long (parmpacket + 44, 0); /* unused */ put_long (parmpacket + 48, 0); /* interleave */ put_long (parmpacket + 52, 0); /* lowCyl */ put_long (parmpacket + 56, 0); /* hiCyl */ put_long (parmpacket + 60, 50); /* Number of buffers */ put_long (parmpacket + 64, 1); /* Buffer mem type */ put_long (parmpacket + 68, 0x7FFFFFFE); /* largest transfer */ put_long (parmpacket + 72, 0xFFFFFFFE); /* dma mask */ put_long (parmpacket + 76, scsi_get_cd_drive_media_mask () & (1 << cd_unit_no) ? -127 : -128); /* bootPri */ put_long (parmpacket + 80, CDFS_DOSTYPE | (((cd_unit_no / 10) + '0') << 8) | ((cd_unit_no % 10) + '0')); put_long (parmpacket + 84, 0); /* baud */ put_long (parmpacket + 88, 0); /* control */ put_long (parmpacket + 92, 0); /* bootblocks */ return type; } else { gui_flicker_led (LED_HD, unit_no, -1); type = is_hardfile (unit_no); if (type == FILESYS_HARDFILE_RDB || type == FILESYS_HARDDRIVE) { /* RDB hardfile */ uip[unit_no].devno = unit_no; return rdb_mount (&uip[unit_no], unit_no, sub_no, parmpacket); } if (sub_no) return -2; write_log (_T("Mounting uaehf.device %d (%d):\n"), unit_no, sub_no); get_new_device (type, parmpacket, &uip[unit_no].devname, &uip[unit_no].devname_amiga, unit_no); uip[unit_no].devno = unit_no; put_long (parmpacket, uip[unit_no].devname_amiga); put_long (parmpacket + 8, uip[unit_no].devno); put_long (parmpacket + 12, 0); /* Device flags */ put_long (parmpacket + 16, 16); /* Env. size */ put_long (parmpacket + 24, 0); /* unused */ put_long (parmpacket + 44, 0); /* unused */ put_long (parmpacket + 48, 0); /* interleave */ put_long (parmpacket + 60, 50); /* Number of buffers */ put_long (parmpacket + 64, 1); /* Buffer mem type */ put_long (parmpacket + 68, 0x7FFFFFFE); /* largest transfer */ put_long (parmpacket + 72, 0xFFFFFFFE); /* dma mask */ put_long (parmpacket + 76, uip[unit_no].bootpri); /* bootPri */ put_long (parmpacket + 80, DISK_TYPE_DOS); /* DOS\0 */ if (type == FILESYS_VIRTUAL) { put_long (parmpacket + 4, fsdevname); put_long (parmpacket + 20, 512 >> 2); /* longwords per block */ put_long (parmpacket + 28, 15); /* heads */ put_long (parmpacket + 32, 1); /* sectors per block */ put_long (parmpacket + 36, 127); /* sectors per track */ put_long (parmpacket + 40, 2); /* reserved blocks */ put_long (parmpacket + 52, 0); /* lowCyl */ put_long (parmpacket + 56, 1); /* hiCyl */ } else { put_long (parmpacket + 4, ROM_hardfile_resname); put_long (parmpacket + 20, uip[unit_no].hf.blocksize >> 2); /* longwords per block */ put_long (parmpacket + 28, uip[unit_no].hf.surfaces); /* heads */ put_long (parmpacket + 32, 1); /* sectors per block */ put_long (parmpacket + 36, uip[unit_no].hf.secspertrack); /* sectors per track */ put_long (parmpacket + 40, uip[unit_no].hf.reservedblocks); /* reserved blocks */ put_long (parmpacket + 52, 0); /* lowCyl */ put_long (parmpacket + 56, uip[unit_no].hf.nrcyls <= 0 ? 0 : uip[unit_no].hf.nrcyls - 1); /* hiCyl */ } if (type == FILESYS_HARDFILE) type = dofakefilesys (&uip[unit_no], parmpacket); if (uip[unit_no].bootpri < -127) m68k_dreg (regs, 7) = m68k_dreg (regs, 7) & ~1; /* do not boot */ if (uip[unit_no].bootpri < -128) return -1; /* do not mount */ return type; } } static uae_u32 REGPARAM2 mousehack_done (TrapContext *context) { int mode = m68k_dreg (regs, 1); if (mode < 10) { uaecptr diminfo = m68k_areg (regs, 2); uaecptr dispinfo = m68k_areg (regs, 3); uaecptr vp = m68k_areg (regs, 4); return input_mousehack_status (mode, diminfo, dispinfo, vp, m68k_dreg (regs, 2)); } else if (mode == 10) { amiga_clipboard_die (); } else if (mode == 11) { amiga_clipboard_got_data (m68k_areg (regs, 2), m68k_dreg (regs, 2), m68k_dreg (regs, 0) + 8); } else if (mode == 12) { return amiga_clipboard_want_data (); } else if (mode == 13) { return amiga_clipboard_proc_start (); } else if (mode == 14) { amiga_clipboard_task_start (m68k_dreg (regs, 0)); } else if (mode == 15) { amiga_clipboard_init (); } else if (mode == 16) { uaecptr a2 = m68k_areg (regs, 2); input_mousehack_mouseoffset (a2); } else if (mode == 17) { uae_u32 v = 0; if (currprefs.clipboard_sharing) v |= 1; if (consolehook_activate ()) v |= 2; return v; } else if (mode == 18) { return rtarea_base + RTAREA_HEARTBEAT; } else if (mode == 101) { consolehook_ret (m68k_areg (regs, 1), m68k_areg (regs, 2)); } else if (mode == 102) { uaecptr ret = consolehook_beginio (m68k_areg (regs, 1)); put_long (m68k_areg (regs, 7) + 4 * 4, ret); } else { write_log (_T("Unknown mousehack hook %d\n"), mode); } return 1; } #ifdef FSUAE static int g_hsync_line = 0; #endif extern void cia_heartbeat (void); void filesys_vsync (void) { Unit *u; if (!uae_boot_rom) return; if (heartbeat == get_long (rtarea_base + RTAREA_HEARTBEAT)) { if (heartbeat_count > 0) heartbeat_count--; return; } heartbeat = get_long (rtarea_base + RTAREA_HEARTBEAT); cia_heartbeat (); for (u = units; u; u = u->next) { if (u->reinsertdelay > 0) { u->reinsertdelay--; if (u->reinsertdelay == 0) { filesys_insert (u->unit, u->newvolume, u->newrootdir, u->newreadonly, u->newflags); xfree (u->newvolume); u->newvolume = NULL; xfree (u->newrootdir); u->newrootdir = NULL; } } record_timeout (u); } #ifdef FSUAE g_hsync_line = 0; #endif } #ifdef FSUAE #ifdef UAE_FILESYS_THREADS static void run_filesys_iterations(int max_count) { UnitInfo *ui; int count = 0; while (count < max_count) { int last_count = count; for (int i = 0; i < MAX_FILESYSTEM_UNITS; i++) { ui = mountinfo.ui + i; if (!ui->unit_pipe) { continue; } if (!comm_pipe_has_data(ui->unit_pipe)) { continue; } count++; filesys_iteration(ui); } if (count == last_count) { // no more packets were processed break; } } } void filesys_hsync() { if (!uae_deterministic_mode()) { return; } //printf("%d\n", g_hsync_line++); static uint64_t counter = 0; static uint64_t next = 0; while (counter == next) { // set packet delay to default value of 10, which means to process // one packet every other hsync. g_packet_delay = 10; run_filesys_iterations(1); // g_packet_delay was possibly modified by packet handlers if (g_packet_delay >= 100) { // ok, for testing, if g_packet_delay is large we try to wait // approximately one frame until processing next package g_packet_delay = 320; } if (g_packet_delay < 0) { // should not happen.. g_packet_delay = 1; } next = counter + g_packet_delay; } counter++; if (heartbeat_count <= 0) return; if (heartbeat_task & 1) { setsystime_vblank (); heartbeat_task &= ~1; } } #endif #endif void filesys_install (void) { uaecptr loop; TRACEI ((_T("Installing filesystem\n"))); uae_sem_init (&singlethread_int_sem, 0, 1); uae_sem_init (&test_sem, 0, 1); ROM_filesys_resname = ds_ansi ("UAEunixfs.resource"); ROM_filesys_resid = ds_ansi ("UAE unixfs 0.4"); fsdevname = ds_ansi ("uae.device"); /* does not really exist */ fshandlername = ds_bstr_ansi ("uaefs"); cdfs_devname = ds_ansi ("uaescsi.device"); cdfs_handlername = ds_bstr_ansi ("uaecdfs"); ROM_filesys_diagentry = here (); calltrap (deftrap2 (filesys_diagentry, 0, _T("filesys_diagentry"))); dw(0x4ED0); /* JMP (a0) - jump to code that inits Residents */ loop = here (); org (rtarea_base + RTAREA_HEARTBEAT); dl (0); heartbeat = 0; heartbeat_task = 0; org (rtarea_base + 0xFF18); calltrap (deftrap2 (filesys_dev_bootfilesys, 0, _T("filesys_dev_bootfilesys"))); dw (RTS); /* Special trap for the assembly make_dev routine */ org (rtarea_base + 0xFF20); calltrap (deftrap2 (filesys_dev_remember, 0, _T("filesys_dev_remember"))); dw (RTS); org (rtarea_base + 0xFF28); calltrap (deftrap2 (filesys_dev_storeinfo, 0, _T("filesys_dev_storeinfo"))); dw (RTS); org (rtarea_base + 0xFF30); calltrap (deftrap2 (filesys_handler, 0, _T("filesys_handler"))); dw (RTS); org (rtarea_base + 0xFF38); calltrap (deftrap2 (mousehack_done, 0, _T("mousehack_done"))); dw (RTS); org (rtarea_base + 0xFF40); calltrap (deftrap2 (startup_handler, 0, _T("startup_handler"))); dw (RTS); org (rtarea_base + 0xFF48); calltrap (deftrap2 (filesys_init_storeinfo, TRAPFLAG_EXTRA_STACK, _T("filesys_init_storeinfo"))); dw (RTS); org (rtarea_base + 0xFF50); calltrap (deftrap2 (exter_int_helper, 0, _T("exter_int_helper"))); dw (RTS); org (rtarea_base + 0xFF58); calltrap (deftrap2 (fsmisc_helper, 0, _T("fsmisc_helper"))); dw (RTS); org (loop); } extern unsigned char cdfs_rom[]; extern unsigned int cdfs_rom_len; void filesys_install_code (void) { uae_u32 a, b; bootrom_header = 3 * 4; align(4); a = here (); #include "filesys_bootrom.cpp" bootrom_items = dlg (a + 8); /* The last offset comes from the code itself, look for it near the top. */ EXPANSION_bootcode = a + bootrom_header + bootrom_items * 4 - 4; b = a + bootrom_header + 3 * 4 - 4; filesys_initcode = a + dlg (b) + bootrom_header - 4; } #ifdef _WIN32 #include "od-win32/win32_filesys.cpp" #endif static uae_u8 *restore_filesys_hardfile (UnitInfo *ui, uae_u8 *src) { struct hardfiledata *hfd = &ui->hf; TCHAR *s; hfd->virtsize = restore_u64 (); hfd->offset = restore_u64 (); hfd->nrcyls = restore_u32 (); hfd->secspertrack = restore_u32 (); hfd->surfaces = restore_u32 (); hfd->reservedblocks = restore_u32 (); hfd->blocksize = restore_u32 (); hfd->readonly = restore_u32 (); hfd->flags = restore_u32 (); hfd->cylinders = restore_u32 (); hfd->sectors = restore_u32 (); hfd->heads = restore_u32 (); s = restore_string (); _tcscpy (hfd->vendor_id, s); xfree (s); s = restore_string (); _tcscpy (hfd->product_id, s); xfree (s); s = restore_string (); _tcscpy (hfd->product_rev, s); xfree (s); s = restore_string (); _tcscpy (hfd->device_name, s); xfree (s); return src; } static uae_u8 *save_filesys_hardfile (UnitInfo *ui, uae_u8 *dst) { struct hardfiledata *hfd = &ui->hf; save_u64 (hfd->virtsize); save_u64 (hfd->offset); save_u32 (hfd->nrcyls); save_u32 (hfd->secspertrack); save_u32 (hfd->surfaces); save_u32 (hfd->reservedblocks); save_u32 (hfd->blocksize); save_u32 (hfd->readonly); save_u32 (hfd->flags); save_u32 (hfd->cylinders); save_u32 (hfd->sectors); save_u32 (hfd->heads); save_string (hfd->vendor_id); save_string (hfd->product_id); save_string (hfd->product_rev); save_string (hfd->device_name); return dst; } static a_inode *restore_filesys_get_base (Unit *u, TCHAR *npath) { TCHAR *path, *p, *p2; a_inode *a; int cnt, err, i; /* no '/' = parent is root */ if (!_tcschr (npath, '/')) return &u->rootnode; /* iterate from root to last to previous path part, * create ainos if not already created. */ path = xcalloc(TCHAR, _tcslen (npath) + 2); cnt = 1; for (;;) { _tcscpy (path, npath); _tcscat (path, _T("/")); p = path; for (i = 0; i < cnt ;i++) { if (i > 0) p++; while (*p != '/' && *p != 0) p++; } if (*p) { *p = 0; err = 0; get_aino (u, &u->rootnode, path, &err); if (err) { write_log (_T("*** FS: missing path '%s'!\n"), path); return NULL; } cnt++; } else { break; } } /* find base (parent) of last path part */ _tcscpy (path, npath); p = path; a = u->rootnode.child; for (;;) { if (*p == 0) { write_log (_T("*** FS: base aino NOT found '%s' ('%s')\n"), a->nname, npath); xfree (path); return NULL; } p2 = p; while(*p2 != '/' && *p2 != '\\' && *p2 != 0) p2++; *p2 = 0; while (a) { if (!same_aname(p, a->aname)) { a = a->sibling; continue; } p = p2 + 1; if (*p == 0) { write_log (_T("FS: base aino found '%s' ('%s')\n"), a->nname, npath); xfree (path); return a; } a = a->child; break; } if (!a) { write_log (_T("*** FS: path part '%s' not found ('%s')\n"), p, npath); xfree (path); return NULL; } } } static TCHAR *makenativepath (UnitInfo *ui, TCHAR *apath) { #ifdef FSUAE return fsdb_native_path(ui->rootdir, apath); #else int i; TCHAR *pn; /* create native path. FIXME: handle 'illegal' characters */ pn = xcalloc (TCHAR, _tcslen (apath) + 1 + _tcslen (ui->rootdir) + 1); _stprintf (pn, _T("%s/%s"), ui->rootdir, apath); if (FSDB_DIR_SEPARATOR != '/') { for (i = 0; i < _tcslen (pn); i++) { if (pn[i] == '/') pn[i] = FSDB_DIR_SEPARATOR; } } return pn; #endif } static uae_u8 *restore_aino (UnitInfo *ui, Unit *u, uae_u8 *src) { TCHAR *p, *p2, *pn; uae_u32 flags; int missing; a_inode *base, *a; missing = 0; a = xcalloc (a_inode, 1); a->uniq = restore_u64 (); a->locked_children = restore_u32 (); a->exnext_count = restore_u32 (); a->shlock = restore_u32 (); flags = restore_u32 (); if (flags & 1) a->elock = 1; if (flags & 4) a->uniq_external = restore_u64 (); /* full Amiga-side path without drive, eg. "C/SetPatch" */ p = restore_string (); /* root (p = volume label) */ if (a->uniq == 0) { a->nname = my_strdup (ui->rootdir); a->aname = p; a->dir = 1; if (ui->volflags < 0) { write_log (_T("FS: Volume '%s' ('%s') missing!\n"), a->aname, a->nname); } else { a->volflags = ui->volflags; recycle_aino (u, a); write_log (_T("FS: Lock (root) '%s' ('%s')\n"), a->aname, a->nname); } return src; } p2 = _tcsrchr(p, '/'); if (p2) p2++; else p2 = p; pn = makenativepath (ui, p); a->nname = pn; a->aname = my_strdup (p2); /* find parent of a->aname (Already restored previously. I hope..) */ if (p2 != p) p2[-1] = 0; base = restore_filesys_get_base (u, p); xfree(p); if (flags & 2) { a->dir = 1; if (!my_existsdir(a->nname)) write_log (_T("*** FS: Directory '%s' missing!\n"), a->nname); else fsdb_clean_dir (a); } else { if (!my_existsfile(a->nname)) write_log (_T("*** FS: File '%s' missing!\n"), a->nname); } if (base) { fill_file_attrs (u, base, a); init_child_aino_tree (u, base, a); } else { write_log (_T("*** FS: parent directory missing '%s' ('%s')\n"), a->aname, a->nname); missing = 1; } if (missing) { write_log (_T("*** FS: Lock restore failed '%s' ('%s')\n"), a->aname, a->nname); xfree (a->nname); xfree (a->aname); xfree (a); } else { write_log (_T("FS: Lock '%s' ('%s')\n"), a->aname, a->nname); recycle_aino (u, a); } return src; } static uae_u8 *restore_key (UnitInfo *ui, Unit *u, uae_u8 *src) { int uniq; TCHAR *p, *pn; mode_t openmode; int err; int missing; a_inode *a; Key *k; uae_u64 savedsize, size, pos; missing = 0; k = xcalloc (Key, 1); k->uniq = restore_u64 (); k->file_pos = restore_u32 (); k->createmode = restore_u32 (); k->dosmode = restore_u32 (); savedsize = restore_u32 (); uniq = restore_u64 (); p = restore_string (); pos = restore_u64 (); size = restore_u64 (); if (size) { savedsize = size; k->file_pos = pos; } pn = makenativepath (ui, p); openmode = ((k->dosmode & A_FIBF_READ) == 0 ? O_WRONLY : (k->dosmode & A_FIBF_WRITE) == 0 ? O_RDONLY : O_RDWR); write_log (_T("FS: open file '%s' ('%s'), pos=%llu\n"), p, pn, k->file_pos); a = get_aino (u, &u->rootnode, p, &err); if (!a) write_log (_T("*** FS: Open file aino creation failed '%s'\n"), p); missing = 1; if (a) { missing = 0; k->aino = a; if (a->uniq != uniq) write_log (_T("*** FS: Open file '%s' aino id %d != %d\n"), p, uniq, a->uniq); if (!my_existsfile (pn)) { write_log (_T("*** FS: Open file '%s' is missing, creating dummy file!\n"), p); if (savedsize < 10 * 1024 * 1024) { k->fd = fs_openfile (u, a, openmode | O_CREAT |O_BINARY); if (k->fd) { uae_u8 *buf = xcalloc (uae_u8, 10000); uae_u64 sp = savedsize; while (sp) { uae_u32 s = sp >= 10000 ? 10000 : sp; fs_write (k->fd, buf, s); sp -= s; } xfree(buf); write_log (_T("*** FS: dummy file created\n")); } else { write_log (_T("*** FS: Open file '%s', couldn't create dummy file!\n"), p); } } else { write_log (_T("*** FS: Too big, ignored\n")); } } else { k->fd = fs_openfile (u, a, openmode | O_BINARY); } if (!k->fd) { write_log (_T("*** FS: Open file '%s' failed to open!\n"), p); missing = 1; } else { uae_s64 s; s = fs_fsize64 (k->fd); if (s != savedsize) write_log (_T("FS: restored file '%s' size changed! orig=%llu, now=%lld!!\n"), p, savedsize, s); if (k->file_pos > s) { write_log (_T("FS: restored filepos larger than size of file '%s'!! %llu > %lld\n"), p, k->file_pos, s); k->file_pos = s; } fs_lseek64 (k->fd, k->file_pos, SEEK_SET); } } xfree (p); if (missing) { xfree (k); } else { k->next = u->keys; u->keys = k; } return src; } static uae_u8 *restore_notify (UnitInfo *ui, Unit *u, uae_u8 *src) { Notify *n = xcalloc (Notify, 1); uae_u32 hash; TCHAR *s; n->notifyrequest = restore_u32 (); s = restore_string (); n->fullname = xmalloc (TCHAR, _tcslen (ui->volname) + 2 + _tcslen (s) + 1); _stprintf (n->fullname, _T("%s:%s"), ui->volname, s); xfree(s); s = _tcsrchr (n->fullname, '/'); if (s) s++; else s = n->fullname; n->partname = my_strdup (s); hash = notifyhash (n->fullname); n->next = u->notifyhash[hash]; u->notifyhash[hash] = n; write_log (_T("FS: notify %08X '%s' '%s'\n"), n->notifyrequest, n->fullname, n->partname); return src; } static uae_u8 *restore_exkey (UnitInfo *ui, Unit *u, uae_u8 *src) { restore_u64 (); restore_u64 (); restore_u64 (); return src; } static uae_u8 *restore_filesys_virtual (UnitInfo *ui, uae_u8 *src, int num) { Unit *u = startup_create_unit (ui, num); int cnt; u->dosbase = restore_u32 (); u->volume = restore_u32 (); u->port = restore_u32 (); u->locklist = restore_u32 (); u->dummy_message = restore_u32 (); u->cmds_sent = restore_u64 (); u->cmds_complete = restore_u64 (); u->cmds_acked = restore_u64 (); u->next_exkey = restore_u32 (); u->total_locked_ainos = restore_u32 (); u->volflags = ui->volflags; cnt = restore_u32 (); write_log (_T("FS: restoring %d locks\n"), cnt); while (cnt-- > 0) src = restore_aino (ui, u, src); cnt = restore_u32 (); write_log (_T("FS: restoring %d open files\n"), cnt); while (cnt-- > 0) src = restore_key (ui, u, src); cnt = restore_u32 (); write_log (_T("FS: restoring %d notifications\n"), cnt); while (cnt-- > 0) src = restore_notify (ui, u, src); cnt = restore_u32 (); write_log (_T("FS: restoring %d exkeys\n"), cnt); while (cnt-- > 0) src = restore_exkey (ui, u, src); return src; } static TCHAR *getfullaname (a_inode *a) { TCHAR *p; int first = 1; p = xcalloc (TCHAR, 2000); while (a) { int len = _tcslen (a->aname); memmove (p + len + 1, p, (_tcslen (p) + 1) * sizeof (TCHAR)); memcpy (p, a->aname, _tcslen (a->aname) * sizeof (TCHAR)); if (!first) p[len] = '/'; first = 0; a = a->parent; if (a && a->uniq == 0) return p; } return p; } /* scan and save all Lock()'d files */ static int recurse_aino (UnitInfo *ui, a_inode *a, int cnt, uae_u8 **dstp) { uae_u8 *dst = NULL; int dirty = 0; a_inode *a2 = a; if (dstp) dst = *dstp; while (a) { //write_log("recurse '%s' '%s' %d %08x\n", a->aname, a->nname, a->uniq, a->parent); if (a->elock || a->shlock || a->uniq == 0) { if (dst) { TCHAR *fn = NULL; write_log (_T("uniq=%d %lld s=%d e=%d d=%d '%s' '%s'\n"), a->uniq, a->uniq_external, a->shlock, a->elock, a->dir, a->aname, a->nname); if (a->aname) { fn = getfullaname (a); write_log (_T("->'%s'\n"), fn); } save_u64 (a->uniq); save_u32 (a->locked_children); save_u32 (a->exnext_count); save_u32 (a->shlock); save_u32 ((a->elock ? 1 : 0) | (a->dir ? 2 : 0) | 4); save_u64 (a->uniq_external); save_string (fn); xfree(fn); } cnt++; } if (a->dirty) dirty = 1; if (a->child) cnt = recurse_aino (ui, a->child, cnt, &dst); a = a->sibling; } if (dirty && a2->parent) fsdb_dir_writeback (a2->parent); if (dst) *dstp = dst; return cnt; } static uae_u8 *save_key (uae_u8 *dst, Key *k) { TCHAR *fn = getfullaname (k->aino); uae_u64 size; save_u64 (k->uniq); save_u32 ((uae_u32)k->file_pos); save_u32 (k->createmode); save_u32 (k->dosmode); size = fs_fsize (k->fd); save_u32 ((uae_u32)size); save_u64 (k->aino->uniq); save_string (fn); save_u64 (k->file_pos); save_u64 (size); write_log (_T("'%s' uniq=%d size=%lld seekpos=%lld mode=%d dosmode=%d\n"), fn, k->uniq, size, k->file_pos, k->createmode, k->dosmode); xfree (fn); return dst; } static uae_u8 *save_notify (UnitInfo *ui, uae_u8 *dst, Notify *n) { TCHAR *s; save_u32 (n->notifyrequest); s = n->fullname; if (_tcslen (s) >= _tcslen (ui->volname) && !_tcsncmp (n->fullname, ui->volname, _tcslen (ui->volname))) s = n->fullname + _tcslen (ui->volname) + 1; save_string (s); write_log (_T("FS: notify %08X '%s'\n"), n->notifyrequest, n->fullname); return dst; } static uae_u8 *save_exkey (uae_u8 *dst, ExamineKey *ek) { save_u64 (ek->uniq); save_u64 (ek->aino->uniq); save_u64 (ek->curr_file->uniq); return dst; } static uae_u8 *save_filesys_virtual (UnitInfo *ui, uae_u8 *dst) { Unit *u = ui->self; Key *k; int cnt, i, j; write_log (_T("FSSAVE: '%s'\n"), ui->devname); save_u32 (u->dosbase); save_u32 (u->volume); save_u32 (u->port); save_u32 (u->locklist); save_u32 (u->dummy_message); save_u64 (u->cmds_sent); save_u64 (u->cmds_complete); save_u64 (u->cmds_acked); save_u32 (u->next_exkey); save_u32 (u->total_locked_ainos); cnt = recurse_aino (ui, &u->rootnode, 0, NULL); save_u32 (cnt); write_log (_T("%d open locks\n"), cnt); cnt = recurse_aino (ui, &u->rootnode, 0, &dst); cnt = 0; for (k = u->keys; k; k = k->next) cnt++; save_u32 (cnt); write_log (_T("%d open files\n"), cnt); for (k = u->keys; k; k = k->next) dst = save_key (dst, k); for (j = 0; j < 2; j++) { cnt = 0; for (i = 0; i < NOTIFY_HASH_SIZE; i++) { Notify *n = u->notifyhash[i]; while (n) { if (j > 0) dst = save_notify (ui, dst, n); cnt++; n = n->next; } } if (j == 0) { save_u32 (cnt); write_log (_T("%d notify requests\n"), cnt); } } for (j = 0; j < 2; j++) { cnt = 0; for (i = 0; i < EXKEYS; i++) { ExamineKey *ek = &u->examine_keys[i]; if (ek->uniq) { cnt++; if (j > 0) dst = save_exkey (dst, ek); } } if (j == 0) { save_u32 (cnt); write_log (_T("%d exkeys\n"), cnt); } } write_log (_T("END\n")); return dst; } uae_u8 *save_filesys_common (int *len) { uae_u8 *dstbak, *dst; if (nr_units () == 0) return NULL; dstbak = dst = xmalloc (uae_u8, 1000); save_u32 (2); save_u64 (a_uniq); save_u64 (key_uniq); *len = dst - dstbak; return dstbak; } uae_u8 *restore_filesys_common (uae_u8 *src) { if (restore_u32 () != 2) return src; cd_unit_offset = MAX_FILESYSTEM_UNITS; cd_unit_number = 0; filesys_prepare_reset2 (); filesys_reset2 (); a_uniq = restore_u64 (); key_uniq = restore_u64 (); return src; } uae_u8 *save_filesys (int num, int *len) { uae_u8 *dstbak, *dst; UnitInfo *ui; int type = is_hardfile (num); ui = &mountinfo.ui[num]; if (!ui->open) return NULL; /* not initialized yet, do not save */ if ((type == FILESYS_VIRTUAL || type == FILESYS_CD) && ui->self == NULL) return NULL; write_log (_T("FS_FILESYS: '%s' '%s'\n"), ui->devname, ui->volname ? ui->volname : _T("")); dstbak = dst = xmalloc (uae_u8, 100000); save_u32 (2); /* version */ save_u32 (ui->devno); save_u16 (type); if (type == FILESYS_VIRTUAL || type == FILESYS_CD) save_path (ui->rootdir, SAVESTATE_PATH_VDIR); else if (type == FILESYS_HARDFILE || type == FILESYS_HARDFILE_RDB) save_path (ui->rootdir, SAVESTATE_PATH_HDF); else if (type == FILESYS_HARDDRIVE) save_path (ui->rootdir, SAVESTATE_PATH_HD); else save_path (ui->rootdir, SAVESTATE_PATH); save_string (ui->devname); save_string (ui->volname); save_path (ui->filesysdir, SAVESTATE_PATH); save_u8 (ui->bootpri); save_u8 (ui->readonly); save_u32 (ui->startup); save_u32 (filesys_configdev); if (type == FILESYS_VIRTUAL || type == FILESYS_CD) dst = save_filesys_virtual (ui, dst); if (type == FILESYS_HARDFILE || type == FILESYS_HARDFILE_RDB) dst = save_filesys_hardfile (ui, dst); *len = dst - dstbak; return dstbak; } uae_u8 *restore_filesys (uae_u8 *src) { int type, devno; UnitInfo *ui; TCHAR *devname = 0, *volname = 0, *rootdir = 0, *filesysdir = 0; int bootpri; bool readonly; uae_u32 startup; if (restore_u32 () != 2) return src; devno = restore_u32 (); type = restore_u16 (); if (type == FILESYS_VIRTUAL) { rootdir = restore_path (SAVESTATE_PATH_VDIR); } else if (type == FILESYS_CD) { rootdir = restore_path (SAVESTATE_PATH_VDIR); if (cd_unit_offset == MAX_FILESYSTEM_UNITS) cd_unit_offset = devno; cd_unit_number++; } else if (type == FILESYS_HARDFILE || type == FILESYS_HARDFILE_RDB) { rootdir = restore_path (SAVESTATE_PATH_HDF); } else if (type == FILESYS_HARDDRIVE) { rootdir = restore_path (SAVESTATE_PATH_HD); } else { rootdir = restore_path (SAVESTATE_PATH); } devname = restore_string (); volname = restore_string (); filesysdir = restore_path (SAVESTATE_PATH); bootpri = restore_u8 (); readonly = restore_u8 () != 0; startup = restore_u32 (); filesys_configdev = restore_u32 (); ui = &mountinfo.ui[devno]; if (type == FILESYS_HARDFILE || type == FILESYS_HARDFILE_RDB) { src = restore_filesys_hardfile (ui, src); xfree (volname); volname = NULL; } if (set_filesys_unit (devno, devname, volname, rootdir, readonly, ui->hf.cylinders, ui->hf.secspertrack, ui->hf.surfaces, ui->hf.reservedblocks, ui->hf.blocksize, bootpri, false, true, filesysdir[0] ? filesysdir : NULL, 0, 0) < 0) { write_log (_T("filesys '%s' failed to restore\n"), rootdir); goto end; } ui->devno = devno; ui->startup = startup; if (type == FILESYS_VIRTUAL || type == FILESYS_CD) src = restore_filesys_virtual (ui, src, devno); write_log (_T("'%s' restored\n"), rootdir); end: xfree (rootdir); xfree (devname); xfree (volname); xfree (filesysdir); return src; } int save_filesys_cando (void) { if (nr_units () == 0) return -1; return filesys_in_interrupt ? 0 : 1; } fs-uae-2.2.3+dfsg/src/inputrecord.cpp0000644000175000017500000005463012162366655017716 0ustar glaubitzglaubitz/* * UAE - The Un*x Amiga Emulator * * Input record/playback * * Copyright 2010 Toni Wilen * */ #define INPUTRECORD_DEBUG 1 #define ENABLE_DEBUGGER 0 #define HEADERSIZE 12 #include "sysconfig.h" #include "sysdeps.h" #include "options.h" #include "inputrecord.h" #include "zfile.h" #include "custom.h" #include "savestate.h" #include "cia.h" #include "events.h" #include "uae.h" #include "disk.h" #include "fsdb.h" #if INPUTRECORD_DEBUG > 0 #include "uae/memory.h" #include "newcpu.h" #endif int inputrecord_debug = 3; extern int inputdevice_logging; #define INPREC_BUFFER_SIZE 10000 static uae_u8 *inprec_buffer, *inprec_p; static struct zfile *inprec_zf; static int inprec_size; int input_record = 0; int input_play = 0; static uae_u8 *inprec_plast, *inprec_plastptr; static int header_end, header_end2; static int replaypos; static int lasthsync, endhsync; static TCHAR inprec_path[MAX_DPATH]; static uae_u32 seed; static uae_u32 lastcycle; static uae_u32 cycleoffset; static uae_u32 pcs[16]; static uae_u32 pcs2[16]; extern void activate_debugger (void); static int warned; extern void refreshtitle (void); static void setlasthsync (void) { if (lasthsync / current_maxvpos () != hsync_counter / current_maxvpos ()) { lasthsync = hsync_counter; refreshtitle (); } } static void flush (void) { if (inprec_p > inprec_buffer) { zfile_fwrite (inprec_buffer, inprec_p - inprec_buffer, 1, inprec_zf); inprec_p = inprec_buffer; } } static void inprec_ru8 (uae_u8 v) { if (!input_record || !inprec_zf) return; *inprec_p++= v; } static void inprec_ru16 (uae_u16 v) { if (!input_record || !inprec_zf) return; inprec_ru8 ((uae_u8)(v >> 8)); inprec_ru8 ((uae_u8)v); } void inprec_ru32 (uae_u32 v) { if (!input_record || !inprec_zf) return; inprec_ru16 ((uae_u16)(v >> 16)); inprec_ru16 ((uae_u16)v); } static void inprec_rstr (const TCHAR *src) { if (!input_record || !inprec_zf) return; char *s = uutf8 (src); char *ss = s; while (*s) { inprec_ru8 (*s); s++; } inprec_ru8 (0); xfree (ss); } static bool inprec_rstart (uae_u8 type) { if (!input_record || !inprec_zf || input_record == INPREC_RECORD_PLAYING) return false; lastcycle = get_cycles (); int mvp = current_maxvpos (); if ((type != INPREC_DEBUG && type != INPREC_DEBUG2 && type != INPREC_CIADEBUG) || (0 && vsync_counter >= 49 && vsync_counter <= 51)) write_log (_T("INPREC: %010d/%03d: %d (%d/%d) %08x\n"), hsync_counter, current_hpos (), type, hsync_counter % mvp, mvp, lastcycle); inprec_plast = inprec_p; inprec_ru8 (type); inprec_ru16 (0xffff); inprec_ru32 (hsync_counter); inprec_ru8 (current_hpos ()); inprec_ru32 (lastcycle); return true; } static void inprec_rend (void) { if (!input_record || !inprec_zf) return; int size = inprec_p - inprec_plast; inprec_plast[1] = size >> 8; inprec_plast[2] = size >> 0; flush (); endhsync = hsync_counter; setlasthsync (); } static bool inprec_realtime (bool stopstart) { if (input_record == INPREC_RECORD_RERECORD) gui_message (_T("INPREC error")); write_log (_T("INPREC: play -> record\n")); input_record = INPREC_RECORD_RERECORD; input_play = 0; int offset = inprec_p - inprec_buffer; zfile_fseek (inprec_zf, offset, SEEK_SET); zfile_truncate (inprec_zf, offset); xfree (inprec_buffer); inprec_size = INPREC_BUFFER_SIZE; inprec_buffer = inprec_p = xmalloc (uae_u8, inprec_size); clear_inputstate (); return true; } static int inprec_pstart (uae_u8 type) { uae_u8 *p = inprec_p; uae_u32 hc = hsync_counter; uae_u8 hpos = current_hpos (); uae_u32 cycles = get_cycles (); static uae_u8 *lastp; uae_u32 hc_orig, hc2_orig; int mvp = current_maxvpos (); if (!input_play || !inprec_zf) return 0; if (savestate_state || hsync_counter > 0xffff0000) return 0; if (p == inprec_buffer + inprec_size) { write_log (_T("INPREC: STOP\n")); if (input_play == INPREC_PLAY_RERECORD) { input_play = 0; inprec_realtime (true); } else { inprec_close (true); } return 0; } else if (p > inprec_buffer + inprec_size) { write_log (_T("INPREC: buffer error\n")); gui_message (_T("INPREC error")); } if (p[0] == INPREC_END) { inprec_close (true); return 0; } else if (p[0] == INPREC_QUIT) { inprec_close (true); uae_quit (); return 0; } hc_orig = hc; for (;;) { uae_u32 type2 = p[0]; uae_u32 hc2 = (p[3] << 24) | (p[4] << 16) | (p[5] << 8) | p[6]; uae_u32 hpos2 = p[7]; uae_u32 cycles2 = (p[8] << 24) | (p[9] << 16) | (p[10] << 8) | p[11]; if (p >= inprec_buffer + inprec_size) break; #if 0 if (p > lastp) { write_log (_T("INPREC: Next %010d/%03d, %010d/%03d (%d/%d): %d (%d)\n"), hc2, hpos2, hc, hpos, hc2 - hc, hpos2 - hpos, p[5 + 1], p[5]); lastp = p; } #endif hc2_orig = hc2; if (type2 == type && hc > hc2) { write_log (_T("INPREC: %010d/%03d > %010d/%03d: %d missed!\n"), hc, hpos, hc2, hpos2, p[0]); #if ENABLE_DEBUGGER == 0 gui_message (_T("INPREC missed error")); #else activate_debugger (); #endif lastcycle = cycles; inprec_plast = p; inprec_plastptr = p + 12; setlasthsync (); return 1; } if (hc2 != hc) { lastp = p; break; } if (type2 == type) { if (type != INPREC_DEBUG && type != INPREC_DEBUG2 && type != INPREC_CIADEBUG && cycles != cycles2) write_log (_T("INPREC: %010d/%03d: %d (%d/%d) (%d/%d) %08X/%08X\n"), hc, hpos, type, hc % mvp, mvp, hc_orig - hc2_orig, hpos - hpos2, cycles, cycles2); if (cycles != cycles2 + cycleoffset) { if (warned > 0) { warned--; for (int i = 0; i < 7; i++) write_log (_T("%08x (%08x) "), pcs[i], pcs2[i]); write_log (_T("\n")); } cycleoffset = cycles - cycles2; #if ENABLE_DEBUGGER == 0 gui_message (_T("INPREC OFFSET=%d\n"), (int)cycleoffset / CYCLE_UNIT); #else activate_debugger (); #endif } lastcycle = cycles; inprec_plast = p; inprec_plastptr = p + 12; setlasthsync (); return 1; } if (type2 == INPREC_END || type2 == INPREC_QUIT) break; p += (p[1] << 8) | (p[2] << 0); } inprec_plast = NULL; return 0; } static void inprec_pend (void) { uae_u8 *p = inprec_p; uae_u32 hc = hsync_counter; uae_u32 hpos = current_hpos (); if (!input_play || !inprec_zf) return; if (!inprec_plast) return; inprec_plast[0] |= 0x80; inprec_plast = NULL; inprec_plastptr = NULL; for (;;) { uae_u32 hc2 = (p[3] << 24) | (p[4] << 16) | (p[5] << 8) | p[6]; uae_u32 hpos2 = p[7]; if (hc2 != hc) break; if ((p[0] & 0x80) == 0) return; p += (p[1] << 8) | (p[2] << 0); inprec_p = p; } } static uae_u8 inprec_pu8 (void) { return *inprec_plastptr++; } static uae_u16 inprec_pu16 (void) { uae_u16 v = inprec_pu8 () << 8; v |= inprec_pu8 (); return v; } static uae_s16 inprec_ps16 (void) { uae_u16 v = inprec_pu8 () << 8; v |= inprec_pu8 (); return (uae_s16)v; } static uae_u32 inprec_pu32 (void) { uae_u32 v = inprec_pu16 () << 16; v |= inprec_pu16 (); return v; } static int inprec_pstr (TCHAR *dst) { char tmp[MAX_DPATH]; char *s; int len = 0; *dst = 0; s = tmp; for(;;) { char v = inprec_pu8 (); *s++ = v; if (!v) break; len++; } if (tmp[0]) { TCHAR *d = utf8u (tmp); _tcscpy (dst, d); xfree (d); } return len; } static void findlast (void) { uae_u32 hsync = 0; uae_u8 *p = inprec_p; while (p < inprec_buffer + inprec_size) { hsync = (p[3] << 24) | (p[4] << 16) | (p[5] << 8) | p[6]; uae_u16 len = (p[1] << 8) | (p[2] << 0); p += len; } endhsync = hsync; } int inprec_open (const TCHAR *fname, const TCHAR *statefilename) { int i; inprec_close (false); if (fname == NULL) inprec_zf = zfile_fopen_empty (NULL, _T("inp")); else inprec_zf = zfile_fopen (fname, input_record ? _T("wb") : _T("rb"), ZFD_NORMAL); if (inprec_zf == NULL) return 0; currprefs.cs_rtc = changed_prefs.cs_rtc = 0; inprec_path[0] = 0; if (fname) getpathpart (inprec_path, sizeof inprec_path / sizeof (TCHAR), fname); seed = (uae_u32)time(0); inprec_size = INPREC_BUFFER_SIZE; lasthsync = 0; endhsync = 0; warned = 10; cycleoffset = 0; header_end2 = 0; if (input_play) { uae_u32 id; zfile_fseek (inprec_zf, 0, SEEK_END); inprec_size = zfile_ftell (inprec_zf); zfile_fseek (inprec_zf, 0, SEEK_SET); inprec_buffer = inprec_p = xmalloc (uae_u8, inprec_size); zfile_fread (inprec_buffer, inprec_size, 1, inprec_zf); inprec_plastptr = inprec_buffer; id = inprec_pu32(); if (id != 'UAE\0') { inprec_close (true); return 0; } int v = inprec_pu8 (); if (v != 2) { inprec_close (true); return 0; } inprec_pu8 (); inprec_pu8 (); inprec_pu8 (); seed = inprec_pu32(); seed = uaesrand (seed); vsync_counter = inprec_pu32 (); hsync_counter = inprec_pu32 (); i = inprec_pu32 (); while (i-- > 0) inprec_pu8 (); header_end = inprec_plastptr - inprec_buffer; inprec_pstr (savestate_fname); if (savestate_fname[0]) { savestate_state = STATE_RESTORE; for (;;) { TCHAR tmp[MAX_DPATH]; _tcscpy (tmp, fname); _tcscat (tmp, _T(".uss")); if (zfile_exists (tmp)) { _tcscpy (savestate_fname, tmp); break; } if (zfile_exists (savestate_fname)) break; TCHAR *p = _tcsrchr (savestate_fname, '\\'); if (!p) p = _tcsrchr (savestate_fname, '/'); if (!p) p = savestate_fname; else p++; if (zfile_exists (p)) { _tcscpy (savestate_fname, p); break; } fetch_statefilepath (tmp, sizeof tmp / sizeof (TCHAR)); _tcscat (tmp, p); if (zfile_exists (tmp)) { _tcscpy (savestate_fname, tmp); break; } fetch_inputfilepath (tmp, sizeof tmp / sizeof (TCHAR)); _tcscat (tmp, p); if (zfile_exists (tmp)) { _tcscpy (savestate_fname, tmp); break; } write_log (_T("Failed to open linked statefile '%s'\n"), savestate_fname); savestate_fname[0] = 0; savestate_state = 0; break; } } inprec_p = inprec_plastptr; header_end2 = inprec_plastptr - inprec_buffer; findlast (); } else if (input_record) { seed = uaesrand (seed); inprec_buffer = inprec_p = xmalloc (uae_u8, inprec_size); inprec_ru32 ('UAE\0'); inprec_ru8 (2); inprec_ru8 (UAEMAJOR); inprec_ru8 (UAEMINOR); inprec_ru8 (UAESUBREV); inprec_ru32 (seed); inprec_ru32 (vsync_counter); inprec_ru32 (hsync_counter); inprec_ru32 (0); // extra header size flush (); header_end2 = header_end = zfile_ftell (inprec_zf); } else { input_record = input_play = 0; return 0; } if (inputrecord_debug) { if (disk_debug_logging < 1) disk_debug_logging = 1 | 2; } write_log (_T("inprec initialized '%s', play=%d rec=%d\n"), fname ? fname : _T(""), input_play, input_record); refreshtitle (); return 1; } void inprec_startup (void) { uaesrand (seed); } bool inprec_prepare_record (const TCHAR *statefilename) { TCHAR state[MAX_DPATH]; int mode = statefilename ? 2 : 1; state[0] = 0; if (statefilename) _tcscpy (state, statefilename); if (hsync_counter > 0 && savestate_state == 0) { TCHAR *s = _tcsrchr (changed_prefs.inprecfile, '\\'); if (!s) s = _tcsrchr (changed_prefs.inprecfile, '/'); if (s) { fetch_statefilepath (state, sizeof state / sizeof (TCHAR)); _tcscat (state, s + 1); } else { _tcscpy (state, changed_prefs.inprecfile); } _tcscat (state, _T(".uss")); savestate_initsave (state, 1, 1, true); save_state (state, _T("input recording test")); mode = 2; } input_record = INPREC_RECORD_NORMAL; inprec_open (changed_prefs.inprecfile, state); changed_prefs.inprecfile[0] = currprefs.inprecfile[0] = 0; return true; } void inprec_close (bool clear) { if (clear) input_play = input_record = 0; if (!inprec_zf) return; if (inprec_buffer && input_record) { if (inprec_rstart (INPREC_END)) inprec_rend (); } zfile_fclose (inprec_zf); inprec_zf = NULL; xfree (inprec_buffer); inprec_buffer = NULL; input_play = input_record = 0; write_log (_T("inprec finished\n")); refreshtitle (); } static void setwriteprotect (const TCHAR *fname, bool readonly) { struct mystat st; int mode, oldmode; if (!my_stat (fname, &st)) return; oldmode = mode = st.mode; mode &= ~FILEFLAG_WRITE; if (!readonly) mode |= FILEFLAG_WRITE; if (mode != oldmode) my_chmod (fname, mode); } void inprec_playdiskchange (void) { if (!input_play) return; while (inprec_pstart (INPREC_DISKREMOVE)) { int drv = inprec_pu8 (); inprec_pend (); write_log (_T("INPREC: disk eject drive %d\n"), drv); disk_eject (drv); } while (inprec_pstart (INPREC_DISKINSERT)) { int drv = inprec_pu8 (); bool wp = inprec_pu8 () != 0; TCHAR tmp[MAX_DPATH], tmp2[MAX_DPATH]; inprec_pstr (tmp); _tcscpy (tmp2, tmp); if (!zfile_exists (tmp)) { TCHAR tmp3[MAX_DPATH]; _tcscpy (tmp3, inprec_path); _tcscat (tmp3, tmp); _tcscpy (tmp, tmp3); } if (!zfile_exists (tmp)) { gui_message (_T("INPREC: Disk image\n'%s'\nnot found!\n"), tmp2); } _tcscpy (currprefs.floppyslots[drv].df, tmp); _tcscpy (changed_prefs.floppyslots[drv].df, tmp); setwriteprotect (tmp, wp); disk_insert_force (drv, tmp, wp); write_log (_T("INPREC: disk insert drive %d '%s'\n"), drv, tmp); inprec_pend (); } } bool inprec_playevent (int *nr, int *state, int *max, int *autofire) { if (inprec_pstart (INPREC_EVENT)) { *nr = inprec_ps16 (); *state = inprec_ps16 (); *max = inprec_pu16 (); *autofire = inprec_ps16 () & 1; inprec_pend (); return true; } return false; } void inprec_recorddebug_cia (uae_u32 v1, uae_u32 v2, uae_u32 v3) { #if INPUTRECORD_DEBUG > 0 if (inprec_rstart (INPREC_CIADEBUG)) { inprec_ru32 (v1); inprec_ru32 (v2); inprec_ru32 (v3); inprec_rend (); } #endif } void inprec_playdebug_cia (uae_u32 v1, uae_u32 v2, uae_u32 v3) { #if INPUTRECORD_DEBUG > 0 int err = 0; if (inprec_pstart (INPREC_CIADEBUG)) { uae_u32 vv1 = inprec_pu32 (); uae_u32 vv2 = inprec_pu32 (); uae_u32 vv3 = inprec_pu32 (); if (vv1 != v1 || vv2 != v2 || vv3 != v3) write_log (_T("CIA SYNC ERROR %08x,%08x %08x,%08x %08x,%08x\n"), vv1, v1, vv2, v2, vv3, v3); inprec_pend (); } #endif } void inprec_recorddebug_cpu (int mode) { #if INPUTRECORD_DEBUG > 0 if (inprec_rstart (INPREC_DEBUG2)) { inprec_ru32 (m68k_getpc ()); inprec_ru32 (get_cycles () | mode); inprec_rend (); } #endif } void inprec_playdebug_cpu (int mode) { #if INPUTRECORD_DEBUG > 0 int err = 0; if (inprec_pstart (INPREC_DEBUG2)) { uae_u32 pc1 = m68k_getpc (); uae_u32 pc2 = inprec_pu32 (); uae_u32 v1 = get_cycles () | mode; uae_u32 v2 = inprec_pu32 (); if (pc1 != pc2) { if (warned > 0) { warned--; write_log (_T("SYNC ERROR2 PC %08x != %08x\n"), pc1, pc2); for (int i = 0; i < 15; i++) write_log (_T("%08x "), pcs[i]); write_log (_T("\n")); } err = 1; } else { memmove (pcs + 1, pcs, 15 * 4); pcs[0] = pc1; memmove (pcs2 + 1, pcs2, 15 * 4); pcs2[0] = get_cycles (); } if (v1 != v2) { if (warned > 0) { warned--; write_log (_T("SYNC ERROR2 %08x != %08x\n"), v1, v2); for (int i = 0; i < 15; i++) write_log (_T("%08x "), pcs[i]); write_log (_T("\n")); } err = 1; } inprec_pend (); } else if (input_play > 0) { if (warned > 0) { warned--; write_log (_T("SYNC ERROR2 debug event missing!?\n")); } } #endif } void inprec_recorddebug (uae_u32 val) { #if INPUTRECORD_DEBUG > 0 if (inprec_rstart (INPREC_DEBUG)) { inprec_ru32 (uaerandgetseed ()); inprec_ru32 (val); inprec_rend (); } #endif } void inprec_playdebug (uae_u32 val) { #if INPUTRECORD_DEBUG > 0 extern void activate_debugger (void); static uae_u32 pcs[16]; int err = 0; if (inprec_pstart (INPREC_DEBUG)) { uae_u32 seed1 = uaerandgetseed (); uae_u32 seed2 = inprec_pu32 (); if (seed1 != seed2) { write_log (_T("SYNC ERROR seed %08x != %08x\n"), seed1, seed2); err = 1; } uae_u32 val2 = inprec_pu32 (); if (val != val2) { write_log (_T("SYNC ERROR val %08x != %08x\n"), val, val2); err = 1; } inprec_pend (); } else if (input_play > 0) { gui_message (_T("SYNC ERROR debug event missing!?\n")); } #endif } void inprec_recordevent (int nr, int state, int max, int autofire) { if (savestate_state) return; if (input_record < INPREC_RECORD_NORMAL) return; if (inprec_rstart (INPREC_EVENT)) { inprec_ru16 (nr); inprec_ru16 (state); inprec_ru16 (max); inprec_ru16 (autofire ? 1 : 0); inprec_rend (); if (input_record == INPREC_RECORD_NORMAL) input_record = INPREC_RECORD_RERECORD; } } void inprec_recorddiskchange (int nr, const TCHAR *fname, bool writeprotected) { if (savestate_state) return; if (input_record < INPREC_RECORD_NORMAL) return; if (fname && fname[0]) { if (inprec_rstart (INPREC_DISKINSERT)) { inprec_ru8 (nr); inprec_ru8 (writeprotected ? 1 : 0); inprec_rstr (fname); write_log (_T("INPREC: disk insert %d '%s'\n"), nr, fname); inprec_rend (); } } else { if (inprec_rstart (INPREC_DISKREMOVE)) { inprec_ru8 (nr); write_log (_T("INPREC: disk eject %d\n"), nr); inprec_rend (); } } } int inprec_getposition (void) { int pos = -1; if (input_play == INPREC_PLAY_RERECORD) { pos = inprec_p - inprec_buffer; } else if (input_record) { pos = zfile_ftell (inprec_zf); } write_log (_T("INPREC: getpos=%d cycles=%08X\n"), pos, lastcycle); if (pos < 0) { write_log (_T("INPREC: getpos failure\n")); gui_message (_T("INPREC error")); } return pos; } // normal play to re-record void inprec_playtorecord (void) { write_log (_T("INPREC: PLAY to RE-RECORD\n")); replaypos = 0; findlast (); input_play = INPREC_PLAY_RERECORD; input_record = INPREC_RECORD_PLAYING; zfile_fclose (inprec_zf); inprec_zf = zfile_fopen_empty (NULL, _T("inp")); zfile_fwrite (inprec_buffer, header_end2, 1, inprec_zf); uae_u8 *p = inprec_buffer + header_end2; uae_u8 *end = inprec_buffer + inprec_size; while (p < end) { int len = (p[1] << 8) | (p[2] << 0); p[0] &= ~0x80; p += len; } zfile_fwrite (inprec_buffer + header_end2, inprec_size - header_end2, 1, inprec_zf); inprec_realtime (false); savestate_capture_request (); } void inprec_setposition (int offset, int replaycounter) { if (!inprec_buffer) return; replaypos = replaycounter; write_log (_T("INPREC: setpos=%d\n"), offset); if (offset < header_end || offset > zfile_size (inprec_zf)) { write_log (_T("INPREC: buffer corruption. offset=%d, size=%d\n"), offset, zfile_size (inprec_zf)); gui_message (_T("INPREC error")); } zfile_fseek (inprec_zf, 0, SEEK_SET); xfree (inprec_buffer); inprec_size = zfile_size (inprec_zf); inprec_buffer = xmalloc (uae_u8, inprec_size); zfile_fread (inprec_buffer, inprec_size, 1, inprec_zf); inprec_p = inprec_plastptr = inprec_buffer + offset; findlast (); input_play = INPREC_PLAY_RERECORD; input_record = INPREC_RECORD_PLAYING; if (currprefs.inprec_autoplay == false) inprec_realtime (false); } static void savelog (const TCHAR *path, const TCHAR *file) { TCHAR tmp[MAX_DPATH]; _tcscpy (tmp, path); _tcscat (tmp, file); _tcscat (tmp, _T(".log.txt")); struct zfile *zfd = zfile_fopen (tmp, _T("wb")); if (zfd) { int loglen; uae_u8 *log; loglen = 0; log = save_log (TRUE, &loglen); if (log) zfile_fwrite (log, loglen, 1, zfd); xfree (log); loglen = 0; log = save_log (FALSE, &loglen); if (log) zfile_fwrite (log, loglen, 1, zfd); xfree (log); zfile_fclose (zfd); write_log (_T("log '%s' saved\n"), tmp); } } static int savedisk (const TCHAR *path, const TCHAR *file, uae_u8 *data, uae_u8 *outdata) { int len = 0; TCHAR *fname = utf8u ((const char*)data + 2); if (fname[0]) { TCHAR tmp[MAX_DPATH]; TCHAR filename[MAX_DPATH]; filename[0] = 0; struct zfile *zf = zfile_fopen (fname, _T("rb"), ZFD_NORMAL); if (!zf) { _tcscpy (tmp, path); _tcscat (tmp, fname); zf = zfile_fopen (tmp, _T("rb"), ZFD_NORMAL); if (!zf) write_log (_T("failed to open '%s'\n"), tmp); } if (zf) { _tcscpy (tmp, path); _tcscpy (filename, file); _tcscat (filename, _T(".")); getfilepart (filename + _tcslen (filename), MAX_DPATH, zfile_getname (zf)); _tcscat (tmp, filename); struct zfile *zfd = zfile_fopen (tmp, _T("wb")); if (zfd) { int size = zfile_size (zf); uae_u8 *data = zfile_getdata (zf, 0, size); zfile_fwrite (data, size, 1, zfd); zfile_fclose (zfd); xfree (data); } zfile_fclose (zf); setwriteprotect (fname, data[1] != 0); } if (filename[0]) { outdata[0] = data[0]; char *fn = uutf8 (filename); strcpy ((char*)outdata + 2, fn); xfree (fn); len = 2 + strlen ((char*)outdata + 2) + 1; } } xfree (fname); return len; } void inprec_save (const TCHAR *filename, const TCHAR *statefilename) { TCHAR path[MAX_DPATH], file[MAX_DPATH]; if (!inprec_buffer) return; getpathpart (path, sizeof path / sizeof (TCHAR), filename); getfilepart (file, sizeof file / sizeof (TCHAR), filename); struct zfile *zf = zfile_fopen (filename, _T("wb"), 0); if (zf) { TCHAR fn[MAX_DPATH]; uae_u8 *data; data = zfile_getdata (inprec_zf, 0, header_end); zfile_fwrite (data, header_end, 1, zf); xfree (data); getfilepart (fn, MAX_DPATH, statefilename); char *s = uutf8 (fn); zfile_fwrite (s, strlen (s) + 1, 1, zf); int len = zfile_size (inprec_zf) - header_end2; data = zfile_getdata (inprec_zf, header_end2, len); uae_u8 *p = data; uae_u8 *end = data + len; while (p < end) { uae_u8 tmp[MAX_DPATH]; int plen = (p[1] << 8) | (p[2] << 0); int wlen = plen - HEADERSIZE; memcpy (tmp, p + HEADERSIZE, wlen); if (p[0] == INPREC_DISKINSERT) { wlen = savedisk (path, file, p + HEADERSIZE, tmp); } if (wlen) { wlen += HEADERSIZE; p[1] = wlen >> 8; p[2] = wlen; zfile_fwrite (p, HEADERSIZE, 1, zf); zfile_fwrite (tmp, wlen - HEADERSIZE, 1, zf); } else { zfile_fwrite (p, plen, 1, zf); } p += plen; } xfree (data); zfile_fclose (zf); savelog (path, file); write_log (_T("inputfile '%s' saved\n"), filename); } else { write_log (_T("failed to open '%s'\n"), filename); } } bool inprec_realtime (void) { if (input_record != INPREC_RECORD_PLAYING || input_play != INPREC_PLAY_RERECORD) return false; //clear_inputstate (); return inprec_realtime (false); } void inprec_getstatus (TCHAR *title) { TCHAR *p; if (!input_record && !input_play) return; _tcscat (title, _T("[")); if (input_record) { if (input_record != INPREC_RECORD_PLAYING) _tcscat (title, _T("-REC-")); else _tcscat (title, _T("REPLAY")); } else if (input_play) { _tcscat (title, _T("PLAY-")); } _tcscat (title, _T(" ")); p = title + _tcslen (title); int mvp = current_maxvpos (); _stprintf (p, _T("%03d %02d:%02d:%02d/%02d:%02d:%02d"), replaypos, lasthsync / (vblank_hz * mvp * 60), ((int)(lasthsync / (vblank_hz * mvp)) % 60), (lasthsync / mvp) % (int)vblank_hz, endhsync / (vblank_hz * mvp * 60), ((int)(endhsync / (vblank_hz * mvp)) % 60), (endhsync / mvp) % (int)vblank_hz); p += _tcslen (p); _tcscat (p, _T("] ")); } fs-uae-2.2.3+dfsg/src/debug.cpp0000644000175000017500000030301712162366655016442 0ustar glaubitzglaubitz/* * UAE - The Un*x Amiga Emulator * * Debugger * * (c) 1995 Bernd Schmidt * (c) 2006 Toni Wilen * */ #include "sysconfig.h" #include "sysdeps.h" #include #include #include "options.h" #include "uae.h" #include "uae/memory.h" #include "custom.h" #include "newcpu.h" #include "cpu_prefetch.h" #include "debug.h" #include "cia.h" #include "xwin.h" #include "identify.h" #include "audio.h" #include "sound.h" #include "disk.h" #include "savestate.h" #include "autoconf.h" #include "akiko.h" #include "inputdevice.h" #include "crc32.h" #include "cpummu.h" #include "rommgr.h" #include "inputrecord.h" #include "calc.h" int debugger_active; static uaecptr skipaddr_start, skipaddr_end; static int skipaddr_doskip; static uae_u32 skipins; static int do_skip; static int debug_rewind; static int memwatch_enabled, memwatch_triggered; static uae_u16 sr_bpmask, sr_bpvalue; int debugging; int exception_debugging; int no_trace_exceptions; int debug_copper = 0; int debug_dma = 0; int debug_sprite_mask = 0xff; int debug_illegal = 0; uae_u64 debug_illegal_mask; static uaecptr processptr; static uae_char *processname; static uaecptr debug_copper_pc; extern int audio_channel_mask; extern int inputdevice_logging; void deactivate_debugger (void) { debugger_active = 0; debugging = 0; exception_debugging = 0; processptr = 0; xfree (processname); processname = NULL; } void activate_debugger (void) { do_skip = 0; if (debugger_active) return; debugger_active = 1; set_special (SPCFLAG_BRK); debugging = 1; mmu_triggered = 0; } int firsthist = 0; int lasthist = 0; static struct regstruct history[MAX_HIST]; static TCHAR help[] = { _T(" HELP for UAE Debugger\n") _T(" -----------------------\n\n") _T(" g [

] Start execution at the current address or
.\n") _T(" c Dump state of the CIA, disk drives and custom registers.\n") _T(" r Dump state of the CPU.\n") _T(" r Modify CPU registers (Dx,Ax,USP,ISP,VBR,...).\n") _T(" m
[] Memory dump starting at
.\n") _T(" d
[] Disassembly starting at
.\n") _T(" t [instructions] Step one or more instructions.\n") _T(" z Step through one instruction - useful for JSR, DBRA etc.\n") _T(" f Step forward until PC in RAM (\"boot block finder\").\n") _T(" f
Add/remove breakpoint.\n") _T(" fa
[] []\n") _T(" Find effective address
.\n") _T(" fi Step forward until PC points to RTS, RTD or RTE.\n") _T(" fi Step forward until PC points to .\n") _T(" fp \"\"/ Step forward until process or is active.\n") _T(" fl List breakpoints.\n") _T(" fd Remove all breakpoints.\n") _T(" fs Break when (SR & mask) = val.\n") _T(" f Step forward until <= PC <= .\n") _T(" e Dump contents of all custom registers, ea = AGA colors.\n") _T(" i [] Dump contents of interrupt and trap vectors.\n") _T(" il [] Exception breakpoint.\n") _T(" o <0-2|addr> []View memory as Copper instructions.\n") _T(" od Enable/disable Copper vpos/hpos tracing.\n") _T(" ot Copper single step trace.\n") _T(" ob Copper breakpoint.\n") _T(" H[H] Show PC history (HH=full CPU info) instructions.\n") _T(" C Search for values like energy or lifes in games.\n") _T(" Cl List currently found trainer addresses.\n") _T(" D[idxzs <[max diff]>] Deep trainer. i=new value must be larger, d=smaller,\n") _T(" x = must be same, z = must be different, s = restart.\n") _T(" W
Write into Amiga memory.\n") _T(" W
'string' Write into Amiga memory.\n") _T(" w
[[.x]] (read/write/opcode/freeze/mustchange).\n") _T(" Add/remove memory watchpoints.\n") _T(" wd [<0-1>] Enable illegal access logger. 1 = enable break.\n") _T(" S Save a block of Amiga memory.\n") _T(" s \"\"/ [] []\n") _T(" Search for string/bytes.\n") _T(" T or Tt Show exec tasks and their PCs.\n") _T(" Td,Tl,Tr Show devices, libraries or resources.\n") _T(" b Step to previous state capture position.\n") _T(" M Enable or disable audio channels, bitplanes or sprites.\n") _T(" sp [] Dump sprite information.\n") _T(" di [] Break on disk access. R=DMA read,W=write,RW=both,P=PIO.\n") _T(" Also enables level 1 disk logging.\n") _T(" did Enable disk logging.\n") _T(" dj [] Enable joystick/mouse input debugging.\n") _T(" smc [<0-1>] Enable self-modifying code detector. 1 = enable break.\n") _T(" dm Dump current address space map.\n") _T(" v [] Show DMA data (accurate only in cycle-exact mode).\n") _T(" v [-1 to -4] = enable visual DMA debugger.\n") _T(" ? Hex ($ and 0x)/Bin (%)/Dec (!) converter.\n") #ifdef _WIN32 _T(" x Close debugger.\n") _T(" xx Switch between console and GUI debugger.\n") _T(" mg
Memory dump starting at
in GUI.\n") _T(" dg
Disassembly starting at
in GUI.\n") #endif _T(" q Quit the emulator. You don't want to use this command.\n\n") }; void debug_help (void) { console_out (help); } static int debug_linecounter; #define MAX_LINECOUNTER 1000 static int debug_out (const TCHAR *format, ...) { va_list parms; TCHAR buffer[4000]; va_start (parms, format); _vsntprintf (buffer, 4000 - 1, format, parms); va_end (parms); console_out (buffer); if (debug_linecounter < MAX_LINECOUNTER) debug_linecounter++; if (debug_linecounter >= MAX_LINECOUNTER) return 0; return 1; } static bool iscancel (int counter) { static int cnt; cnt++; if (cnt < counter) return false; cnt = 0; if (!console_isch ()) return false; console_getch (); return true; } static bool isoperator(TCHAR **cp) { TCHAR c = **cp; return c == '+' || c == '-' || c == '/' || c == '*' || c == '(' || c == ')'; } static void ignore_ws (TCHAR **c) { while (**c && _istspace(**c)) (*c)++; } static TCHAR peekchar (TCHAR **c) { return **c; } static TCHAR readchar (TCHAR **c) { TCHAR cc = **c; (*c)++; return cc; } static TCHAR next_char (TCHAR **c) { ignore_ws (c); return *(*c)++; } static TCHAR peek_next_char (TCHAR **c) { TCHAR *pc = *c; return pc[1]; } static int more_params (TCHAR **c) { ignore_ws (c); return (**c) != 0; } static uae_u32 readint (TCHAR **c); static uae_u32 readbin (TCHAR **c); static uae_u32 readhex (TCHAR **c); static int readregx (TCHAR **c, uae_u32 *valp) { int i; uae_u32 addr; TCHAR *p = *c; TCHAR tmp[10]; int extra = 0; addr = 0; i = 0; while (p[i]) { tmp[i] = _totupper (p[i]); if (i >= sizeof (tmp) / sizeof (TCHAR) - 1) break; i++; } tmp[i] = 0; if (_totupper (tmp[0]) == 'R') { memmove (tmp, tmp + 1, sizeof (tmp) - sizeof (TCHAR)); extra = 1; } if (!_tcscmp (tmp, _T("USP"))) { addr = regs.usp; (*c) += 3; } else if (!_tcscmp (tmp, _T("VBR"))) { addr = regs.vbr; (*c) += 3; } else if (!_tcscmp (tmp, _T("MSP"))) { addr = regs.msp; (*c) += 3; } else if (!_tcscmp (tmp, _T("ISP"))) { addr = regs.isp; (*c) += 3; } else if (!_tcscmp (tmp, _T("PC"))) { addr = regs.pc; (*c) += 2; } else if (tmp[0] == 'A' || tmp[0] == 'D') { int reg = 0; if (tmp[0] == 'A') reg += 8; reg += tmp[1] - '0'; if (reg < 0 || reg > 15) return 0; addr = regs.regs[reg]; (*c) += 2; } else { return 0; } *valp = addr; (*c) += extra; return 1; } static bool readbinx (TCHAR **c, uae_u32 *valp) { uae_u32 val = 0; bool first = true; ignore_ws (c); for (;;) { TCHAR nc = **c; if (nc != '1' && nc != '0') { if (first) return false; break; } first = false; (*c)++; val <<= 1; if (nc == '1') val |= 1; } *valp = val; return true; } static bool readhexx (TCHAR **c, uae_u32 *valp) { uae_u32 val = 0; TCHAR nc; ignore_ws (c); if (!isxdigit (peekchar (c))) return false; while (isxdigit (nc = **c)) { (*c)++; val *= 16; nc = _totupper (nc); if (isdigit (nc)) { val += nc - '0'; } else { val += nc - 'A' + 10; } } *valp = val; return true; } static bool readintx (TCHAR **c, uae_u32 *valp) { uae_u32 val = 0; TCHAR nc; int negative = 0; ignore_ws (c); if (**c == '-') negative = 1, (*c)++; if (!isdigit (peekchar (c))) return false; while (isdigit (nc = **c)) { (*c)++; val *= 10; val += nc - '0'; } *valp = val * (negative ? -1 : 1); return true; } static int checkvaltype2 (TCHAR **c, uae_u32 *val, TCHAR def) { TCHAR nc; ignore_ws (c); nc = _totupper (**c); if (nc == '!') { (*c)++; return readintx (c, val) ? 1 : 0; } if (nc == '$') { (*c)++; return readhexx (c, val) ? 1 : 0; } if (nc == '0' && _totupper ((*c)[1]) == 'X') { (*c)+= 2; return readhexx (c, val) ? 1 : 0; } if (nc == '%') { (*c)++; return readbinx (c, val) ? 1: 0; } if (nc >= 'A' && nc <= 'Z' && nc != 'A' && nc != 'D') { if (readregx (c, val)) return 1; } if (def == '!') { return readintx (c, val) ? -1 : 0; return -1; } else if (def == '$') { return readhexx (c, val) ? -1 : 0; } else if (def == '%') { return readbinx (c, val) ? -1 : 0; } return 0; } static int readsize (int val, TCHAR **c) { TCHAR cc = _totupper (readchar(c)); if (cc == 'B') return 1; if (cc == 'W') return 2; if (cc == '3') return 3; if (cc == 'L') return 4; return 0; } static int checkvaltype (TCHAR **cp, uae_u32 *val, int *size, TCHAR def) { TCHAR form[256], *p; bool gotop = false; double out; form[0] = 0; *size = 0; p = form; for (;;) { uae_u32 v; if (!checkvaltype2 (cp, &v, def)) return 0; *val = v; // stupid but works! _stprintf(p, _T("%u"), v); p += _tcslen (p); if (peekchar (cp) == '.') { readchar (cp); *size = readsize (v, cp); } if (!isoperator (cp)) break; gotop = true; *p++= readchar (cp); *p = 0; } if (!gotop) { if (*size == 0) { uae_s32 v = (uae_s32)(*val); if (v > 255 || v < -127) { *size = 2; } else if (v > 65535 || v < -32767) { *size = 4; } else { *size = 1; } } return 1; } if (calc (form, &out)) { *val = (uae_u32)out; if (*size == 0) { uae_s32 v = (uae_s32)(*val); if (v > 255 || v < -127) { *size = 2; } else if (v > 65535 || v < -32767) { *size = 4; } else { *size = 1; } } return 1; } return 0; } static uae_u32 readnum (TCHAR **c, int *size, TCHAR def) { uae_u32 val; if (checkvaltype (c, &val, size, def)) return val; return 0; } static uae_u32 readint (TCHAR **c) { int size; return readnum (c, &size, '!'); } static uae_u32 readhex (TCHAR **c) { int size; return readnum (c, &size, '$'); } static uae_u32 readbin (TCHAR **c) { int size; return readnum (c, &size, '%'); } static uae_u32 readint (TCHAR **c, int *size) { return readnum (c, size, '!'); } static uae_u32 readhex (TCHAR **c, int *size) { return readnum (c, size, '$'); } static int next_string (TCHAR **c, TCHAR *out, int max, int forceupper) { TCHAR *p = out; int startmarker = 0; if (**c == '\"') { startmarker = 1; (*c)++; } *p = 0; while (**c != 0) { if (**c == '\"' && startmarker) break; if (**c == 32 && !startmarker) { ignore_ws (c); break; } *p = next_char (c); if (forceupper) *p = _totupper(*p); *++p = 0; max--; if (max <= 1) break; } return _tcslen (out); } static void converter (TCHAR **c) { uae_u32 v = readint (c); TCHAR s[100]; TCHAR *p = s; int i; for (i = 0; i < 32; i++) s[i] = (v & (1 << (31 - i))) ? '1' : '0'; s[i] = 0; console_out_f (_T("0x%08X = %%%s = %u = %d\n"), v, s, v, (uae_s32)v); } int notinrom (void) { uaecptr pc = munge24 (m68k_getpc ()); if (pc < 0x00e00000 || pc > 0x00ffffff) return 1; return 0; } static uae_u32 lastaddr (void) { if (currprefs.z3fastmem2_size) return z3fastmem2_start + currprefs.z3fastmem2_size; if (currprefs.z3fastmem_size) return z3fastmem_start + currprefs.z3fastmem_size; if (currprefs.z3chipmem_size) return z3chipmem_start + currprefs.z3chipmem_size; if (currprefs.mbresmem_high_size) return a3000hmem_start + currprefs.mbresmem_high_size; if (currprefs.mbresmem_low_size) return a3000lmem_start + currprefs.mbresmem_low_size; if (currprefs.bogomem_size) return bogomem_start + currprefs.bogomem_size; if (currprefs.fastmem_size) return fastmem_start + currprefs.fastmem_size; return currprefs.chipmem_size; } static uaecptr nextaddr2 (uaecptr addr, int *next) { uaecptr prev, prevx; int size, sizex; if (addr >= lastaddr ()) { *next = -1; return 0xffffffff; } prev = currprefs.z3fastmem_start + currprefs.z3fastmem_size; size = currprefs.z3fastmem2_size; if (currprefs.z3fastmem_size) { prevx = prev; sizex = size; size = currprefs.z3fastmem_size; prev = z3fastmem_start; if (addr == prev + size) { *next = prevx + sizex; return prevx; } } if (currprefs.z3chipmem_size) { prevx = prev; sizex = size; size = currprefs.z3chipmem_size; prev = z3chipmem_start; if (addr == prev + size) { *next = prevx + sizex; return prevx; } } if (currprefs.mbresmem_high_size) { sizex = size; prevx = prev; size = currprefs.mbresmem_high_size; prev = a3000hmem_start; if (addr == prev + size) { *next = prevx + sizex; return prevx; } } if (currprefs.mbresmem_low_size) { prevx = prev; sizex = size; size = currprefs.mbresmem_low_size; prev = a3000lmem_start; if (addr == prev + size) { *next = prevx + sizex; return prevx; } } if (currprefs.bogomem_size) { sizex = size; prevx = prev; size = currprefs.bogomem_size; prev = bogomem_start; if (addr == prev + size) { *next = prevx + sizex; return prevx; } } if (currprefs.fastmem_size) { sizex = size; prevx = prev; size = currprefs.fastmem_size; prev = fastmem_start; if (addr == prev + size) { *next = prevx + sizex; return prevx; } } sizex = size; prevx = prev; size = currprefs.chipmem_size; if (addr == size) { *next = prevx + sizex; return prevx; } if (addr == 1) *next = size; return addr; } static uaecptr nextaddr (uaecptr addr, uaecptr last, uaecptr *end) { static uaecptr old; uaecptr paddr = addr; int next; if (last && 0) { if (addr >= last) return 0xffffffff; return addr + 1; } if (addr == 0xffffffff) { if (end) *end = currprefs.chipmem_size; return 0; } if (end) next = *end; addr = nextaddr2 (addr + 1, &next); if (end) *end = next; if (old != next) { if (addr != 0xffffffff) console_out_f (_T("Scanning.. %08x - %08x (%s)\n"), addr & 0xffffff00, next, get_mem_bank (addr).name); old = next; } #if 0 if (next && addr != 0xffffffff) { uaecptr xa = addr; if (xa == 1) xa = 0; console_out_f ("%08X -> %08X (%08X)...\n", xa, xa + next - 1, next); } #endif return addr; } int safe_addr (uaecptr addr, int size) { addrbank *ab = &get_mem_bank (addr); if (!ab) return 0; if (ab->flags & ABFLAG_SAFE) return 1; if (!ab->check (addr, size)) return 0; if (ab->flags & (ABFLAG_RAM | ABFLAG_ROM | ABFLAG_ROMIN | ABFLAG_SAFE)) return 1; return 0; } uaecptr dumpmem2 (uaecptr addr, TCHAR *out, int osize) { int i, cols = 8; int nonsafe = 0; if (osize <= (9 + cols * 5 + 1 + 2 * cols)) return addr; _stprintf (out, _T("%08lX "), addr); for (i = 0; i < cols; i++) { uae_u8 b1, b2; b1 = b2 = 0; if (safe_addr (addr, 1)) { b1 = get_byte (addr + 0); b2 = get_byte (addr + 1); _stprintf (out + 9 + i * 5, _T("%02X%02X "), b1, b2); out[9 + cols * 5 + 1 + i * 2 + 0] = b1 >= 32 && b1 < 127 ? b1 : '.'; out[9 + cols * 5 + 1 + i * 2 + 1] = b2 >= 32 && b2 < 127 ? b2 : '.'; } else { nonsafe++; _tcscpy (out + 9 + i * 5, _T("**** ")); out[9 + cols * 5 + 1 + i * 2 + 0] = '*'; out[9 + cols * 5 + 1 + i * 2 + 1] = '*'; } addr += 2; } out[9 + cols * 5] = ' '; out[9 + cols * 5 + 1 + 2 * cols] = 0; if (nonsafe == cols) { addrbank *ab = &get_mem_bank (addr); if (ab->name) memcpy (out + (9 + 4 + 1) * sizeof (TCHAR), ab->name, _tcslen (ab->name) * sizeof (TCHAR)); } return addr; } static void dumpmem (uaecptr addr, uaecptr *nxmem, int lines) { TCHAR line[MAX_LINEWIDTH + 1]; for (;lines--;) { addr = dumpmem2 (addr, line, sizeof(line)); debug_out (_T("%s"), line); if (!debug_out (_T("\n"))) break; } *nxmem = addr; } static void dump_custom_regs (int aga) { int len, i, j, end; uae_u8 *p1, *p2, *p3, *p4; if (aga) { dump_aga_custom(); return; } p1 = p2 = save_custom (&len, 0, 1); p1 += 4; // skip chipset type for (i = 0; i < 4; i++) { p4 = p1 + 0xa0 + i * 16; p3 = save_audio (i, &len, 0); p4[0] = p3[12]; p4[1] = p3[13]; p4[2] = p3[14]; p4[3] = p3[15]; p4[4] = p3[4]; p4[5] = p3[5]; p4[6] = p3[8]; p4[7] = p3[9]; p4[8] = 0; p4[9] = p3[1]; p4[10] = p3[10]; p4[11] = p3[11]; free (p3); } end = 0; while (custd[end].name) end++; end++; end /= 2; for (i = 0; i < end; i++) { uae_u16 v1, v2; int addr1, addr2; j = end + i; addr1 = custd[i].adr & 0x1ff; addr2 = custd[j].adr & 0x1ff; v1 = (p1[addr1 + 0] << 8) | p1[addr1 + 1]; v2 = (p1[addr2 + 0] << 8) | p1[addr2 + 1]; console_out_f (_T("%03X %s\t%04X\t%03X %s\t%04X\n"), addr1, custd[i].name, v1, addr2, custd[j].name, v2); } free (p2); } static void dump_vectors (uaecptr addr) { int i = 0, j = 0; if (addr == 0xffffffff) addr = regs.vbr; while (int_labels[i].name || trap_labels[j].name) { if (int_labels[i].name) { console_out_f (_T("$%08X %02d: %12s $%08X "), int_labels[i].adr + addr, int_labels[i].adr / 4, int_labels[i].name, get_long (int_labels[i].adr + addr)); i++; } if (trap_labels[j].name) { console_out_f (_T("$%08X %02d: %12s $%08X"), trap_labels[j].adr + addr, trap_labels[j].adr / 4, trap_labels[j].name, get_long (trap_labels[j].adr + addr)); j++; } console_out (_T("\n")); } } static void disassemble_wait (FILE *file, unsigned long insn) { int vp, hp, ve, he, bfd, v_mask, h_mask; int doout = 0; vp = (insn & 0xff000000) >> 24; hp = (insn & 0x00fe0000) >> 16; ve = (insn & 0x00007f00) >> 8; he = (insn & 0x000000fe); bfd = (insn & 0x00008000) >> 15; /* bit15 can never be masked out*/ v_mask = vp & (ve | 0x80); h_mask = hp & he; if (v_mask > 0) { doout = 1; console_out (_T("vpos ")); if (ve != 0x7f) { console_out_f (_T("& 0x%02x "), ve); } console_out_f (_T(">= 0x%02x"), v_mask); } if (he > 0) { if (v_mask > 0) { console_out (_T(" and")); } console_out (_T(" hpos ")); if (he != 0xfe) { console_out_f (_T("& 0x%02x "), he); } console_out_f (_T(">= 0x%02x"), h_mask); } else { if (doout) console_out (_T(", ")); console_out (_T(", ignore horizontal")); } console_out_f (_T("\n \t; VP %02x, VE %02x; HP %02x, HE %02x; BFD %d\n"), vp, ve, hp, he, bfd); } #define NR_COPPER_RECORDS 100000 /* Record copper activity for the debugger. */ struct cop_rec { int hpos, vpos; uaecptr addr; }; static struct cop_rec *cop_record[2]; static int nr_cop_records[2], curr_cop_set; #define NR_DMA_REC_HPOS 256 #define NR_DMA_REC_VPOS 1000 static struct dma_rec *dma_record[2]; static int dma_record_toggle; void record_dma_reset (void) { int v, h; struct dma_rec *dr, *dr2; if (!dma_record[0]) return; dma_record_toggle ^= 1; dr = dma_record[dma_record_toggle]; for (v = 0; v < NR_DMA_REC_VPOS; v++) { for (h = 0; h < NR_DMA_REC_HPOS; h++) { dr2 = &dr[v * NR_DMA_REC_HPOS + h]; memset (dr2, 0, sizeof (struct dma_rec)); dr2->reg = 0xffff; dr2->addr = 0xffffffff; } } } void record_copper_reset (void) { /* Start a new set of copper records. */ curr_cop_set ^= 1; nr_cop_records[curr_cop_set] = 0; } STATIC_INLINE uae_u32 ledcolor (uae_u32 c, uae_u32 *rc, uae_u32 *gc, uae_u32 *bc, uae_u32 *a) { uae_u32 v = rc[(c >> 16) & 0xff] | gc[(c >> 8) & 0xff] | bc[(c >> 0) & 0xff]; if (a) v |= a[255 - ((c >> 24) & 0xff)]; return v; } STATIC_INLINE void putpixel (uae_u8 *buf, int bpp, int x, xcolnr c8) { if (x <= 0) return; switch (bpp) { case 1: buf[x] = (uae_u8)c8; break; case 2: { uae_u16 *p = (uae_u16*)buf + x; *p = (uae_u16)c8; break; } case 3: /* no 24 bit yet */ break; case 4: { uae_u32 *p = (uae_u32*)buf + x; *p = c8; break; } } } #define lc(x) ledcolor (x, xredcolors, xgreencolors, xbluecolors, NULL); void debug_draw_cycles (uae_u8 *buf, int bpp, int line, int width, int height, uae_u32 *xredcolors, uae_u32 *xgreencolors, uae_u32 *xbluescolors) { int y, x, xx, dx, xplus, yplus; struct dma_rec *dr; int t; uae_u32 cc[DMARECORD_MAX]; if (debug_dma >= 4) yplus = 2; else yplus = 1; if (debug_dma >= 3) xplus = 2; else xplus = 1; t = dma_record_toggle ^ 1; y = line / yplus - 8; if (y < 0) return; if (y > maxvpos) return; if (y >= height) return; dx = width - xplus * ((maxhpos + 1) & ~1) - 16; cc[0] = lc(0x222222); cc[DMARECORD_REFRESH] = lc(0x444444); cc[DMARECORD_CPU] = lc(0x888888); cc[DMARECORD_COPPER] = lc(0xeeee00); cc[DMARECORD_AUDIO] = lc(0xff0000); cc[DMARECORD_BLITTER] = lc(0x00ff00); cc[DMARECORD_BLITTER_LINE] = lc(0x008800); cc[DMARECORD_BITPLANE] = lc(0x0000ff); cc[DMARECORD_SPRITE] = lc(0xff00ff); cc[DMARECORD_DISK] = lc(0xffffff); for (x = 0; x < maxhpos; x++) { uae_u32 c = cc[0]; xx = x * xplus + dx; dr = &dma_record[t][y * NR_DMA_REC_HPOS + x]; if (dr->reg != 0xffff) { c = cc[dr->type]; } putpixel (buf, bpp, xx, c); if (xplus) putpixel (buf, bpp, xx + 1, c); } } void record_dma_event (int evt, int hpos, int vpos) { struct dma_rec *dr; if (!dma_record[0]) return; if (hpos >= NR_DMA_REC_HPOS || vpos >= NR_DMA_REC_VPOS) return; dr = &dma_record[dma_record_toggle][vpos * NR_DMA_REC_HPOS + hpos]; dr->evt |= evt; } struct dma_rec *record_dma (uae_u16 reg, uae_u16 dat, uae_u32 addr, int hpos, int vpos, int type) { struct dma_rec *dr; if (!dma_record[0]) { dma_record[0] = xmalloc (struct dma_rec, NR_DMA_REC_HPOS * NR_DMA_REC_VPOS); dma_record[1] = xmalloc (struct dma_rec, NR_DMA_REC_HPOS * NR_DMA_REC_VPOS); dma_record_toggle = 0; record_dma_reset (); } if (hpos >= NR_DMA_REC_HPOS || vpos >= NR_DMA_REC_VPOS) return NULL; dr = &dma_record[dma_record_toggle][vpos * NR_DMA_REC_HPOS + hpos]; if (dr->reg != 0xffff) { write_log (_T("DMA conflict: v=%d h=%d OREG=%04X NREG=%04X\n"), vpos, hpos, dr->reg, reg); return dr; } dr->reg = reg; dr->dat = dat; dr->addr = addr; dr->type = type; return dr; } static void decode_dma_record (int hpos, int vpos, int toggle, bool logfile) { struct dma_rec *dr; int h, i, maxh, cnt; uae_u32 cycles; if (!dma_record[0]) return; dr = &dma_record[dma_record_toggle ^ toggle][vpos * NR_DMA_REC_HPOS]; if (logfile) write_dlog (_T("Line: %02X %3d HPOS %02X %3d:\n"), vpos, vpos, hpos, hpos); else console_out_f (_T("Line: %02X %3d HPOS %02X %3d:\n"), vpos, vpos, hpos, hpos); h = hpos; dr += hpos; maxh = hpos + 80; if (maxh > maxhpos) maxh = maxhpos; cycles = vsync_cycles; if (toggle) cycles -= maxvpos * maxhpos * CYCLE_UNIT; cnt = 0; while (h < maxh) { int col = 9; int cols = 8; TCHAR l1[81]; TCHAR l2[81]; TCHAR l3[81]; TCHAR l4[81]; TCHAR l5[81]; for (i = 0; i < cols && h < maxh; i++, h++, dr++) { int cl = i * col, cl2; int r = dr->reg; TCHAR *sr; sr = _T(" "); if (dr->type == DMARECORD_COPPER) sr = _T("COP "); else if (dr->type == DMARECORD_BLITTER) sr = _T("BLT "); else if (dr->type == DMARECORD_REFRESH) sr = _T("RFS "); else if (dr->type == DMARECORD_AUDIO) sr = _T("AUD "); else if (dr->type == DMARECORD_DISK) sr = _T("DSK "); else if (dr->type == DMARECORD_SPRITE) sr = _T("SPR "); _stprintf (l1 + cl, _T("[%02X %3d]"), h, h); _tcscpy (l4 + cl, _T(" ")); if (r != 0xffff) { if (r & 0x1000) { if ((r & 0x0100) == 0x0000) _tcscpy (l2 + cl, _T(" CPU-R ")); else if ((r & 0x0100) == 0x0100) _tcscpy (l2 + cl, _T(" CPU-W ")); if ((r & 0xff) == 4) l2[cl + 7] = 'L'; if ((r & 0xff) == 2) l2[cl + 7] = 'W'; if ((r & 0xff) == 1) l2[cl + 7] = 'B'; } else { _stprintf (l2 + cl, _T("%4s %03X"), sr, r); } _stprintf (l3 + cl, _T(" %04X"), dr->dat); if (dr->addr != 0xffffffff) _stprintf (l4 + cl, _T("%08X"), dr->addr & 0x00ffffff); } else { _tcscpy (l2 + cl, _T(" ")); _tcscpy (l3 + cl, _T(" ")); } cl2 = cl; if (dr->evt & DMA_EVENT_BLITNASTY) l3[cl2++] = 'N'; if (dr->evt & DMA_EVENT_BLITFINISHED) l3[cl2++] = 'B'; if (dr->evt & DMA_EVENT_BLITIRQ) l3[cl2++] = 'b'; if (dr->evt & DMA_EVENT_BPLFETCHUPDATE) l3[cl2++] = 'p'; if (dr->evt & DMA_EVENT_COPPERWAKE) l3[cl2++] = 'W'; if (dr->evt & DMA_EVENT_COPPERWANTED) l3[cl2++] = 'c'; if (dr->evt & DMA_EVENT_CPUIRQ) l3[cl2++] = 'I'; if (dr->evt & DMA_EVENT_INTREQ) l3[cl2++] = 'i'; _stprintf (l5 + cl, _T("%08X"), cycles + (vpos * maxhpos + (hpos + cnt)) * CYCLE_UNIT); if (i < cols - 1 && h < maxh - 1) { l1[cl + col - 1] = 32; l2[cl + col - 1] = 32; l3[cl + col - 1] = 32; l4[cl + col - 1] = 32; l5[cl + col - 1] = 32; } cnt++; } if (logfile) { write_dlog (_T("%s\n"), l1); write_dlog (_T("%s\n"), l2); write_dlog (_T("%s\n"), l3); write_dlog (_T("%s\n"), l4); write_dlog (_T("%s\n"), l5); write_dlog (_T("\n")); } else { console_out_f (_T("%s\n"), l1); console_out_f (_T("%s\n"), l2); console_out_f (_T("%s\n"), l3); console_out_f (_T("%s\n"), l4); console_out_f (_T("%s\n"), l5); console_out_f (_T("\n")); } } } void log_dma_record (void) { if (!input_record && !input_play) return; if (!debug_dma) debug_dma = 1; decode_dma_record (0, 0, 0, true); } void record_copper (uaecptr addr, int hpos, int vpos) { int t = nr_cop_records[curr_cop_set]; if (!cop_record[0]) { cop_record[0] = xmalloc (struct cop_rec, NR_COPPER_RECORDS); cop_record[1] = xmalloc (struct cop_rec, NR_COPPER_RECORDS); } if (t < NR_COPPER_RECORDS) { cop_record[curr_cop_set][t].addr = addr; cop_record[curr_cop_set][t].hpos = hpos; cop_record[curr_cop_set][t].vpos = vpos; nr_cop_records[curr_cop_set] = t + 1; } if (debug_copper & 2) { /* trace */ debug_copper &= ~2; activate_debugger (); } if ((debug_copper & 4) && addr >= debug_copper_pc && addr <= debug_copper_pc + 3) { debug_copper &= ~4; activate_debugger (); } } static struct cop_rec *find_copper_records (uaecptr addr) { int s = curr_cop_set ^ 1; int t = nr_cop_records[s]; int i; for (i = 0; i < t; i++) { if (cop_record[s][i].addr == addr) return &cop_record[s][i]; } return 0; } /* simple decode copper by Mark Cox */ static void decode_copper_insn (FILE* file, unsigned long insn, unsigned long addr) { struct cop_rec *cr = NULL; uae_u32 insn_type = insn & 0x00010001; TCHAR here = ' '; TCHAR record[] = _T(" "); if ((cr = find_copper_records (addr))) { _stprintf (record, _T(" [%03x %03x]"), cr->vpos, cr->hpos); } if (get_copper_address (-1) >= addr && get_copper_address(-1) <= addr + 3) here = '*'; console_out_f (_T("%c%08lx: %04lx %04lx%s\t; "), here, addr, insn >> 16, insn & 0xFFFF, record); switch (insn_type) { case 0x00010000: /* WAIT insn */ console_out (_T("Wait for ")); disassemble_wait (file, insn); if (insn == 0xfffffffe) console_out (_T(" \t; End of Copperlist\n")); break; case 0x00010001: /* SKIP insn */ console_out (_T("Skip if ")); disassemble_wait (file, insn); break; case 0x00000000: case 0x00000001: /* MOVE insn */ { int addr = (insn >> 16) & 0x1fe; int i = 0; while (custd[i].name) { if (custd[i].adr == addr + 0xdff000) break; i++; } if (custd[i].name) console_out_f (_T("%s := 0x%04lx\n"), custd[i].name, insn & 0xffff); else console_out_f (_T("%04x := 0x%04lx\n"), addr, insn & 0xffff); } break; default: abort (); } } static uaecptr decode_copperlist (FILE* file, uaecptr address, int nolines) { uae_u32 insn; while (nolines-- > 0) { insn = (chipmem_wget_indirect (address) << 16) | chipmem_wget_indirect (address + 2); decode_copper_insn (file, insn, address); address += 4; } return address; /* You may wonder why I don't stop this at the end of the copperlist? * Well, often nice things are hidden at the end and it is debatable the actual * values that mean the end of the copperlist */ } static int copper_debugger (TCHAR **c) { static uaecptr nxcopper; uae_u32 maddr; int lines; if (**c == 'd') { next_char (c); if (debug_copper) debug_copper = 0; else debug_copper = 1; console_out_f (_T("Copper debugger %s.\n"), debug_copper ? _T("enabled") : _T("disabled")); } else if (**c == 't') { debug_copper = 1|2; return 1; } else if (**c == 'b') { (*c)++; debug_copper = 1|4; if (more_params (c)) { debug_copper_pc = readhex (c); console_out_f (_T("Copper breakpoint @0x%08x\n"), debug_copper_pc); } else { debug_copper &= ~4; } } else { if (more_params (c)) { maddr = readhex (c); if (maddr == 1 || maddr == 2) maddr = get_copper_address (maddr); else if (maddr == 0) maddr = get_copper_address (-1); } else maddr = nxcopper; if (more_params (c)) lines = readhex (c); else lines = 20; nxcopper = decode_copperlist (stdout, maddr, lines); } return 0; } #define MAX_CHEAT_VIEW 100 struct trainerstruct { uaecptr addr; int size; }; static struct trainerstruct *trainerdata; static int totaltrainers; static void clearcheater(void) { if (!trainerdata) trainerdata = xmalloc(struct trainerstruct, MAX_CHEAT_VIEW); memset(trainerdata, 0, sizeof (struct trainerstruct) * MAX_CHEAT_VIEW); totaltrainers = 0; } static int addcheater(uaecptr addr, int size) { if (totaltrainers >= MAX_CHEAT_VIEW) return 0; trainerdata[totaltrainers].addr = addr; trainerdata[totaltrainers].size = size; totaltrainers++; return 1; } static void listcheater(int mode, int size) { int i, skip; if (!trainerdata) return; if (mode) skip = 6; else skip = 8; for(i = 0; i < totaltrainers; i++) { struct trainerstruct *ts = &trainerdata[i]; uae_u16 b; if (size) { b = get_byte (ts->addr); } else { b = get_word (ts->addr); } if (mode) console_out_f (_T("%08X=%04X "), ts->addr, b); else console_out_f (_T("%08X "), ts->addr); if ((i % skip) == skip) console_out (_T("\n")); } } static void deepcheatsearch (TCHAR **c) { static int first = 1; static uae_u8 *memtmp; static int memsize, memsize2; uae_u8 *p1, *p2; uaecptr addr, end; int i, wasmodified, nonmodified; static int size; static int inconly, deconly, maxdiff; int addrcnt, cnt; TCHAR v; v = _totupper (**c); if(!memtmp || v == 'S') { maxdiff = 0x10000; inconly = 0; deconly = 0; size = 1; } if (**c) (*c)++; ignore_ws (c); if ((**c) == '1' || (**c) == '2') { size = **c - '0'; (*c)++; } if (more_params (c)) maxdiff = readint (c); if (!memtmp || v == 'S') { first = 1; xfree (memtmp); memsize = 0; addr = 0xffffffff; while ((addr = nextaddr (addr, 0, &end)) != 0xffffffff) { memsize += end - addr; addr = end - 1; } memsize2 = (memsize + 7) / 8; memtmp = xmalloc (uae_u8, memsize + memsize2); if (!memtmp) return; memset (memtmp + memsize, 0xff, memsize2); p1 = memtmp; addr = 0xffffffff; while ((addr = nextaddr (addr, 0, &end)) != 0xffffffff) { for (i = addr; i < end; i++) *p1++ = get_byte (i); addr = end - 1; } console_out (_T("Deep trainer first pass complete.\n")); return; } inconly = deconly = 0; wasmodified = v == 'X' ? 0 : 1; nonmodified = v == 'Z' ? 1 : 0; if (v == 'I') inconly = 1; if (v == 'D') deconly = 1; p1 = memtmp; p2 = memtmp + memsize; addrcnt = 0; cnt = 0; addr = 0xffffffff; while ((addr = nextaddr (addr, 0, NULL)) != 0xffffffff) { uae_s32 b, b2; int doremove = 0; int addroff = addrcnt >> 3; int addrmask ; if (size == 1) { b = (uae_s8)get_byte (addr); b2 = (uae_s8)p1[addrcnt]; addrmask = 1 << (addrcnt & 7); } else { b = (uae_s16)get_word (addr); b2 = (uae_s16)((p1[addrcnt] << 8) | p1[addrcnt + 1]); addrmask = 3 << (addrcnt & 7); } if (p2[addroff] & addrmask) { if (wasmodified && !nonmodified) { int diff = b - b2; if (b == b2) doremove = 1; if (abs(diff) > maxdiff) doremove = 1; if (inconly && diff < 0) doremove = 1; if (deconly && diff > 0) doremove = 1; } else if (nonmodified && b != b2) { doremove = 1; } else if (!wasmodified && b != b2) { doremove = 1; } if (doremove) p2[addroff] &= ~addrmask; else cnt++; } if (size == 1) { p1[addrcnt] = b; addrcnt++; } else { p1[addrcnt] = b >> 8; p1[addrcnt + 1] = b >> 0; addr = nextaddr (addr, 0, NULL); if (addr == 0xffffffff) break; addrcnt += 2; } if (iscancel (65536)) { console_out_f (_T("Aborted at %08X\n"), addr); break; } } console_out_f (_T("%d addresses found\n"), cnt); if (cnt <= MAX_CHEAT_VIEW) { clearcheater (); cnt = 0; addrcnt = 0; addr = 0xffffffff; while ((addr = nextaddr(addr, 0, NULL)) != 0xffffffff) { int addroff = addrcnt >> 3; int addrmask = (size == 1 ? 1 : 3) << (addrcnt & 7); if (p2[addroff] & addrmask) addcheater (addr, size); addrcnt += size; cnt++; } if (cnt > 0) console_out (_T("\n")); listcheater (1, size); } else { console_out (_T("Now continue with 'g' and use 'D' again after you have lost another life\n")); } } /* cheat-search by Toni Wilen (originally by Holger Jakob) */ static void cheatsearch (TCHAR **c) { static uae_u8 *vlist; static int listsize; static int first = 1; static int size = 1; uae_u32 val, memcnt, prevmemcnt; int i, count, vcnt, memsize; uaecptr addr, end; memsize = 0; addr = 0xffffffff; while ((addr = nextaddr (addr, 0, &end)) != 0xffffffff) { memsize += end - addr; addr = end - 1; } if (_totupper (**c) == 'L') { listcheater (1, size); return; } ignore_ws (c); if (!more_params (c)) { first = 1; console_out (_T("Search reset\n")); xfree (vlist); listsize = memsize; vlist = xcalloc (uae_u8, listsize >> 3); return; } if (first) val = readint (c, &size); else val = readint (c); if (vlist == NULL) { listsize = memsize; vlist = xcalloc (uae_u8, listsize >> 3); } count = 0; vcnt = 0; clearcheater (); addr = 0xffffffff; prevmemcnt = memcnt = 0; while ((addr = nextaddr (addr, 0, &end)) != 0xffffffff) { if (addr + size < end) { for (i = 0; i < size; i++) { int shift = (size - i - 1) * 8; if (get_byte (addr + i) != ((val >> shift) & 0xff)) break; } if (i == size) { int voffset = memcnt >> 3; int vmask = 1 << (memcnt & 7); if (!first) { while (prevmemcnt < memcnt) { vlist[prevmemcnt >> 3] &= ~(1 << (prevmemcnt & 7)); prevmemcnt++; } if (vlist[voffset] & vmask) { count++; addcheater(addr, size); } else { vlist[voffset] &= ~vmask; } prevmemcnt = memcnt + 1; } else { vlist[voffset] |= vmask; count++; } } } memcnt++; if (iscancel (65536)) { console_out_f (_T("Aborted at %08X\n"), addr); break; } } if (!first) { while (prevmemcnt < memcnt) { vlist[prevmemcnt >> 3] &= ~(1 << (prevmemcnt & 7)); prevmemcnt++; } listcheater (0, size); } console_out_f (_T("Found %d possible addresses with 0x%X (%u) (%d bytes)\n"), count, val, val, size); if (count > 0) console_out (_T("Now continue with 'g' and use 'C' with a different value\n")); first = 0; } struct breakpoint_node bpnodes[BREAKPOINT_TOTAL]; static addrbank **debug_mem_banks; static addrbank *debug_mem_area; struct memwatch_node mwnodes[MEMWATCH_TOTAL]; static struct memwatch_node mwhit; static uae_u8 *illgdebug, *illghdebug; static int illgdebug_break; static void illg_free (void) { xfree (illgdebug); illgdebug = NULL; xfree (illghdebug); illghdebug = NULL; } static void illg_init (void) { int i; uae_u8 c = 3; uaecptr addr, end; illgdebug = xcalloc (uae_u8, 0x01000000); illghdebug = xcalloc (uae_u8, 65536); if (!illgdebug || !illghdebug) { illg_free(); return; } addr = 0xffffffff; while ((addr = nextaddr (addr, 0, &end)) != 0xffffffff) { if (end < 0x01000000) { memset (illgdebug + addr, c, end - addr); } else { uae_u32 s = addr >> 16; uae_u32 e = end >> 16; memset (illghdebug + s, c, e - s); } addr = end - 1; } if (currprefs.rtgmem_size) memset (illghdebug + (p96ram_start >> 16), 3, currprefs.rtgmem_size >> 16); i = 0; while (custd[i].name) { int rw = custd[i].rw; illgdebug[custd[i].adr] = rw; illgdebug[custd[i].adr + 1] = rw; i++; } for (i = 0; i < 16; i++) { /* CIAs */ if (i == 11) continue; illgdebug[0xbfe001 + i * 0x100] = c; illgdebug[0xbfd000 + i * 0x100] = c; } memset (illgdebug + 0xf80000, 1, 512 * 1024); /* KS ROM */ memset (illgdebug + 0xdc0000, c, 0x3f); /* clock */ #ifdef CDTV if (currprefs.cs_cdtvram) { memset (illgdebug + 0xdc8000, c, 4096); /* CDTV batt RAM */ memset (illgdebug + 0xf00000, 1, 256 * 1024); /* CDTV ext ROM */ } #endif #ifdef CD32 if (currprefs.cs_cd32cd) { memset (illgdebug + AKIKO_BASE, c, AKIKO_BASE_END - AKIKO_BASE); memset (illgdebug + 0xe00000, 1, 512 * 1024); /* CD32 ext ROM */ } #endif if (currprefs.cs_ksmirror_e0) memset (illgdebug + 0xe00000, 1, 512 * 1024); if (currprefs.cs_ksmirror_a8) memset (illgdebug + 0xa80000, 1, 2 * 512 * 1024); #ifdef FILESYS if (uae_boot_rom) /* filesys "rom" */ memset (illgdebug + rtarea_base, 1, 0x10000); #endif if (currprefs.cs_ide > 0) memset (illgdebug + 0xdd0000, 3, 65536); } /* add special custom register check here */ static void illg_debug_check (uaecptr addr, int rwi, int size, uae_u32 val) { return; } static void illg_debug_do (uaecptr addr, int rwi, int size, uae_u32 val) { uae_u8 mask; uae_u32 pc = m68k_getpc (); int i; for (i = size - 1; i >= 0; i--) { uae_u8 v = val >> (i * 8); uae_u32 ad = addr + i; if (ad >= 0x01000000) mask = illghdebug[ad >> 16]; else mask = illgdebug[ad]; if ((mask & 3) == 3) return; if (mask & 0x80) { illg_debug_check (ad, rwi, size, val); } else if ((mask & 3) == 0) { if (rwi & 2) console_out_f (_T("W: %08X=%02X PC=%08X\n"), ad, v, pc); else if (rwi & 1) console_out_f (_T("R: %08X PC=%08X\n"), ad, pc); if (illgdebug_break) activate_debugger (); } else if (!(mask & 1) && (rwi & 1)) { console_out_f (_T("RO: %08X=%02X PC=%08X\n"), ad, v, pc); if (illgdebug_break) activate_debugger (); } else if (!(mask & 2) && (rwi & 2)) { console_out_f (_T("WO: %08X PC=%08X\n"), ad, pc); if (illgdebug_break) activate_debugger (); } } } static int debug_mem_off (uaecptr addr) { return munge24 (addr) >> 16; } struct smc_item { uae_u32 addr; uae_u8 cnt; }; static int smc_size, smc_mode; static struct smc_item *smc_table; static void smc_free (void) { if (smc_table) console_out (_T("SMCD disabled\n")); xfree(smc_table); smc_mode = 0; smc_table = NULL; } static void initialize_memwatch (int mode); static void smc_detect_init (TCHAR **c) { int v, i; ignore_ws (c); v = readint (c); smc_free (); smc_size = 1 << 24; if (currprefs.z3fastmem_size) smc_size = currprefs.z3fastmem_start + currprefs.z3fastmem_size; smc_size += 4; smc_table = xmalloc (struct smc_item, smc_size); if (!smc_table) return; for (i = 0; i < smc_size; i++) { smc_table[i].addr = 0xffffffff; smc_table[i].cnt = 0; } if (!memwatch_enabled) initialize_memwatch (0); if (v) smc_mode = 1; console_out_f (_T("SMCD enabled. Break=%d\n"), smc_mode); } #define SMC_MAXHITS 8 static void smc_detector (uaecptr addr, int rwi, int size, uae_u32 *valp) { int i, hitcnt; uaecptr hitaddr, hitpc; if (!smc_table) return; if (addr >= smc_size) return; if (rwi == 2) { for (i = 0; i < size; i++) { if (smc_table[addr + i].cnt < SMC_MAXHITS) { smc_table[addr + i].addr = m68k_getpc (); } } return; } hitpc = smc_table[addr].addr; if (hitpc == 0xffffffff) return; hitaddr = addr; hitcnt = 0; while (addr < smc_size && smc_table[addr].addr != 0xffffffff) { smc_table[addr++].addr = 0xffffffff; hitcnt++; } if ((hitpc & 0xFFF80000) == 0xF80000) return; if (currprefs.cpu_model == 68000 && currprefs.cpu_compatible) { /* ignore single-word unconditional jump instructions * (instruction prefetch from PC+2 can cause false positives) */ if (regs.irc == 0x4e75 || regs.irc == 4e74 || regs.irc == 0x4e72 || regs.irc == 0x4e77) return; /* RTS, RTD, RTE, RTR */ if ((regs.irc & 0xff00) == 0x6000 && (regs.irc & 0x00ff) != 0 && (regs.irc & 0x00ff) != 0xff) return; /* BRA.B */ } if (hitcnt < 100) { smc_table[hitaddr].cnt++; console_out_f (_T("SMC at %08X - %08X (%d) from %08X\n"), hitaddr, hitaddr + hitcnt, hitcnt, hitpc); if (smc_mode) activate_debugger (); if (smc_table[hitaddr].cnt >= SMC_MAXHITS) console_out_f (_T("* hit count >= %d, future hits ignored\n"), SMC_MAXHITS); } } uae_u8 *save_debug_memwatch (int *len, uae_u8 *dstptr) { uae_u8 *dstbak, *dst; int total; total = 0; for (int i = 0; i < MEMWATCH_TOTAL; i++) { if (mwnodes[i].size > 0) total++; } if (!total) return NULL; if (dstptr) dstbak = dst = dstptr; else dstbak = dst = xmalloc (uae_u8, 1000); save_u32 (1); save_u8 (total); for (int i = 0; i < MEMWATCH_TOTAL; i++) { struct memwatch_node *m = &mwnodes[i]; if (m->size <= 0) continue; save_store_pos (); save_u8 (i); save_u8 (m->modval_written); save_u8 (m->mustchange); save_u8 (m->frozen); save_u8 (m->val_enabled); save_u8 (m->rwi); save_u32 (m->addr); save_u32 (m->size); save_u32 (m->modval); save_u32 (m->val_mask); save_u32 (m->val_size); save_u32 (m->val); save_u32 (m->pc); save_store_size (); } *len = dst - dstbak; return dstbak; } uae_u8 *restore_debug_memwatch (uae_u8 *src) { if (restore_u32 () != 1) return src; int total = restore_u8 (); for (int i = 0; i < total; i++) { restore_store_pos (); int idx = restore_u8 (); struct memwatch_node *m = &mwnodes[idx]; m->modval_written = restore_u8 (); m->mustchange = restore_u8 (); m->frozen = restore_u8 (); m->val_enabled = restore_u8 (); m->rwi = restore_u8 (); m->addr = restore_u32 (); m->size = restore_u32 (); m->modval = restore_u32 (); m->val_mask = restore_u32 (); m->val_size = restore_u32 (); m->val = restore_u32 (); m->pc = restore_u32 (); restore_store_size (); } return src; } void restore_debug_memwatch_finish (void) { for (int i = 0; i < MEMWATCH_TOTAL; i++) { struct memwatch_node *m = &mwnodes[i]; if (m->size) { if (!memwatch_enabled) initialize_memwatch (0); return; } } } static int memwatch_func (uaecptr addr, int rwi, int size, uae_u32 *valp) { int i, brk; uae_u32 val = *valp; if (illgdebug) illg_debug_do (addr, rwi, size, val); addr = munge24 (addr); if (smc_table && (rwi >= 2)) smc_detector (addr, rwi, size, valp); for (i = 0; i < MEMWATCH_TOTAL; i++) { struct memwatch_node *m = &mwnodes[i]; uaecptr addr2 = m->addr; uaecptr addr3 = addr2 + m->size; int rwi2 = m->rwi; uae_u32 oldval = 0; int isoldval = 0; brk = 0; if (m->size == 0) continue; if (!(rwi & rwi2)) continue; if (addr >= addr2 && addr < addr3) brk = 1; if (!brk && size == 2 && (addr + 1 >= addr2 && addr + 1 < addr3)) brk = 1; if (!brk && size == 4 && ((addr + 2 >= addr2 && addr + 2 < addr3) || (addr + 3 >= addr2 && addr + 3 < addr3))) brk = 1; if (!brk) continue; if (mem_banks[addr >> 16]->check (addr, size)) { uae_u8 *p = mem_banks[addr >> 16]->xlateaddr (addr); if (size == 1) oldval = p[0]; else if (size == 2) oldval = (p[0] << 8) | p[1]; else oldval = (p[0] << 24) | (p[1] << 16) | (p[2] << 8) | (p[3] << 0); isoldval = 1; } if (!m->frozen && m->val_enabled) { int trigger = 0; uae_u32 mask = (1 << (m->size * 8)) - 1; uae_u32 mval = m->val; int scnt = size; for (;;) { if (((mval & mask) & m->val_mask) == ((val & mask) & m->val_mask)) trigger = 1; if (mask & 0x80000000) break; if (m->size == 1) { mask <<= 8; mval <<= 8; scnt--; } else if (m->size == 2) { mask <<= 16; scnt -= 2; mval <<= 16; } if (scnt <= 0) break; } if (!trigger) continue; } if (m->mustchange && rwi == 2 && isoldval) { if (oldval == *valp) continue; } if (m->modval_written) { if (!rwi) { brk = 0; } else if (m->modval_written == 1) { m->modval_written = 2; m->modval = val; brk = 0; } else if (m->modval == val) { brk = 0; } } if (m->frozen) { if (m->val_enabled) { int shift = (addr + size - 1) - (m->addr + m->val_size - 1); uae_u32 sval; uae_u32 mask; if (m->val_size == 4) mask = 0xffffffff; else if (m->val_size == 2) mask = 0x0000ffff; else mask = 0x000000ff; sval = m->val; if (shift < 0) { shift = -8 * shift; sval >>= shift; mask >>= shift; } else { shift = 8 * shift; sval <<= shift; mask <<= shift; } *valp = (sval & mask) | ((*valp) & ~mask); write_log (_T("%p %p %08x %08x %d\n"), addr, m->addr, *valp, mask, shift); return 1; } return 0; } // if (!notinrom ()) // return 1; mwhit.pc = M68K_GETPC; mwhit.addr = addr; mwhit.rwi = rwi; mwhit.size = size; mwhit.val = 0; if (mwhit.rwi & 2) mwhit.val = val; memwatch_triggered = i + 1; debugging = 1; set_special (SPCFLAG_BRK); return 1; } return 1; } static int mmu_hit (uaecptr addr, int size, int rwi, uae_u32 *v); static uae_u32 REGPARAM2 mmu_lget (uaecptr addr) { int off = debug_mem_off (addr); uae_u32 v = 0; if (!mmu_hit (addr, 4, 0, &v)) v = debug_mem_banks[off]->lget (addr); return v; } static uae_u32 REGPARAM2 mmu_wget (uaecptr addr) { int off = debug_mem_off (addr); uae_u32 v = 0; if (!mmu_hit (addr, 2, 0, &v)) v = debug_mem_banks[off]->wget (addr); return v; } static uae_u32 REGPARAM2 mmu_bget (uaecptr addr) { int off = debug_mem_off (addr); uae_u32 v = 0; if (!mmu_hit(addr, 1, 0, &v)) v = debug_mem_banks[off]->bget (addr); return v; } static void REGPARAM2 mmu_lput (uaecptr addr, uae_u32 v) { int off = debug_mem_off (addr); if (!mmu_hit (addr, 4, 1, &v)) debug_mem_banks[off]->lput (addr, v); } static void REGPARAM2 mmu_wput (uaecptr addr, uae_u32 v) { int off = debug_mem_off (addr); if (!mmu_hit (addr, 2, 1, &v)) debug_mem_banks[off]->wput (addr, v); } static void REGPARAM2 mmu_bput (uaecptr addr, uae_u32 v) { int off = debug_mem_off (addr); if (!mmu_hit (addr, 1, 1, &v)) debug_mem_banks[off]->bput (addr, v); } static uae_u32 REGPARAM2 debug_lget (uaecptr addr) { int off = debug_mem_off (addr); uae_u32 v; v = debug_mem_banks[off]->lget (addr); memwatch_func (addr, 1, 4, &v); return v; } static uae_u32 REGPARAM2 mmu_lgeti (uaecptr addr) { int off = debug_mem_off (addr); uae_u32 v = 0; if (!mmu_hit (addr, 4, 4, &v)) v = debug_mem_banks[off]->lgeti (addr); return v; } static uae_u32 REGPARAM2 mmu_wgeti (uaecptr addr) { int off = debug_mem_off (addr); uae_u32 v = 0; if (!mmu_hit (addr, 2, 4, &v)) v = debug_mem_banks[off]->wgeti (addr); return v; } static uae_u32 REGPARAM2 debug_wget (uaecptr addr) { int off = debug_mem_off (addr); uae_u32 v; v = debug_mem_banks[off]->wget (addr); memwatch_func (addr, 1, 2, &v); return v; } static uae_u32 REGPARAM2 debug_bget (uaecptr addr) { int off = debug_mem_off (addr); uae_u32 v; v = debug_mem_banks[off]->bget (addr); memwatch_func (addr, 1, 1, &v); return v; } static uae_u32 REGPARAM2 debug_lgeti (uaecptr addr) { int off = debug_mem_off (addr); uae_u32 v; v = debug_mem_banks[off]->lgeti (addr); memwatch_func (addr, 4, 4, &v); return v; } static uae_u32 REGPARAM2 debug_wgeti (uaecptr addr) { int off = debug_mem_off (addr); uae_u32 v; v = debug_mem_banks[off]->wgeti (addr); memwatch_func (addr, 4, 2, &v); return v; } static void REGPARAM2 debug_lput (uaecptr addr, uae_u32 v) { int off = debug_mem_off (addr); if (memwatch_func (addr, 2, 4, &v)) debug_mem_banks[off]->lput (addr, v); } static void REGPARAM2 debug_wput (uaecptr addr, uae_u32 v) { int off = debug_mem_off (addr); if (memwatch_func (addr, 2, 2, &v)) debug_mem_banks[off]->wput (addr, v); } static void REGPARAM2 debug_bput (uaecptr addr, uae_u32 v) { int off = debug_mem_off (addr); if (memwatch_func (addr, 2, 1, &v)) debug_mem_banks[off]->bput (addr, v); } static int REGPARAM2 debug_check (uaecptr addr, uae_u32 size) { return debug_mem_banks[munge24 (addr) >> 16]->check (addr, size); } static uae_u8 *REGPARAM2 debug_xlate (uaecptr addr) { return debug_mem_banks[munge24 (addr) >> 16]->xlateaddr (addr); } uae_u16 debug_wputpeekdma (uaecptr addr, uae_u32 v) { if (!memwatch_enabled) return v; memwatch_func (addr, 2, 2, &v); return v; } uae_u16 debug_wgetpeekdma (uaecptr addr, uae_u32 v) { uae_u32 vv = v; if (!memwatch_enabled) return v; memwatch_func (addr, 1, 2, &vv); return vv; } void debug_putlpeek (uaecptr addr, uae_u32 v) { if (!memwatch_enabled) return; memwatch_func (addr, 2, 4, &v); } void debug_wputpeek (uaecptr addr, uae_u32 v) { if (!memwatch_enabled) return; memwatch_func (addr, 2, 2, &v); } void debug_bputpeek (uaecptr addr, uae_u32 v) { if (!memwatch_enabled) return; memwatch_func (addr, 2, 1, &v); } void debug_bgetpeek (uaecptr addr, uae_u32 v) { uae_u32 vv = v; if (!memwatch_enabled) return; memwatch_func (addr, 1, 1, &vv); } void debug_wgetpeek (uaecptr addr, uae_u32 v) { uae_u32 vv = v; if (!memwatch_enabled) return; memwatch_func (addr, 1, 2, &vv); } void debug_lgetpeek (uaecptr addr, uae_u32 v) { uae_u32 vv = v; if (!memwatch_enabled) return; memwatch_func (addr, 1, 4, &vv); } struct membank_store { addrbank *addr; addrbank store; }; static struct membank_store *membank_stores; static int deinitialize_memwatch (void) { int i, oldmode; if (!memwatch_enabled && !mmu_enabled) return -1; for (i = 0; membank_stores[i].addr; i++) { memcpy (membank_stores[i].addr, &membank_stores[i].store, sizeof (addrbank)); } oldmode = mmu_enabled ? 1 : 0; xfree (debug_mem_banks); debug_mem_banks = NULL; xfree (debug_mem_area); debug_mem_area = NULL; xfree (membank_stores); membank_stores = NULL; memwatch_enabled = 0; mmu_enabled = 0; xfree (illgdebug); illgdebug = 0; return oldmode; } static void initialize_memwatch (int mode) { int i, j, as; addrbank *a1, *a2, *oa; deinitialize_memwatch (); as = currprefs.address_space_24 ? 256 : 65536; debug_mem_banks = xmalloc (addrbank*, as); debug_mem_area = xmalloc (addrbank, as); membank_stores = xcalloc (struct membank_store, 32); oa = NULL; for (i = 0; i < as; i++) { a1 = debug_mem_banks[i] = debug_mem_area + i; a2 = mem_banks[i]; if (a2 != oa) { for (j = 0; membank_stores[j].addr; j++) { if (membank_stores[j].addr == a2) break; } if (membank_stores[j].addr == NULL) { membank_stores[j].addr = a2; memcpy (&membank_stores[j].store, a2, sizeof (addrbank)); } } memcpy (a1, a2, sizeof (addrbank)); } for (i = 0; i < as; i++) { a2 = mem_banks[i]; a2->bget = mode ? mmu_bget : debug_bget; a2->wget = mode ? mmu_wget : debug_wget; a2->lget = mode ? mmu_lget : debug_lget; a2->bput = mode ? mmu_bput : debug_bput; a2->wput = mode ? mmu_wput : debug_wput; a2->lput = mode ? mmu_lput : debug_lput; a2->check = debug_check; a2->xlateaddr = debug_xlate; a2->wgeti = mode ? mmu_wgeti : debug_wgeti; a2->lgeti = mode ? mmu_lgeti : debug_lgeti; } if (mode) mmu_enabled = 1; else memwatch_enabled = 1; } int debug_bankchange (int mode) { if (mode == -1) { int v = deinitialize_memwatch (); if (v < 0) return -2; return v; } if (mode >= 0) initialize_memwatch (mode); return -1; } static TCHAR *getsizechar (int size) { if (size == 4) return _T(".l"); if (size == 3) return _T(".3"); if (size == 2) return _T(".w"); if (size == 1) return _T(".b"); return _T(""); } void memwatch_dump2 (TCHAR *buf, int bufsize, int num) { int i; struct memwatch_node *mwn; if (buf) memset (buf, 0, bufsize * sizeof (TCHAR)); for (i = 0; i < MEMWATCH_TOTAL; i++) { if ((num >= 0 && num == i) || (num < 0)) { mwn = &mwnodes[i]; if (mwn->size == 0) continue; buf = buf_out (buf, &bufsize, _T("%2d: %08X - %08X (%d) %c%c%c"), i, mwn->addr, mwn->addr + (mwn->size - 1), mwn->size, (mwn->rwi & 1) ? 'R' : ' ', (mwn->rwi & 2) ? 'W' : ' ', (mwn->rwi & 4) ? 'I' : ' '); if (mwn->frozen) buf = buf_out (buf, &bufsize, _T("F")); if (mwn->val_enabled) buf = buf_out (buf, &bufsize, _T(" =%X%s"), mwn->val, getsizechar (mwn->val_size)); if (mwn->modval_written) buf = buf_out (buf, &bufsize, _T(" =M")); if (mwn->mustchange) buf = buf_out (buf, &bufsize, _T(" C")); buf = buf_out (buf, &bufsize, _T("\n")); } } } static void memwatch_dump (int num) { TCHAR *buf; int multiplier = num < 0 ? MEMWATCH_TOTAL : 1; buf = xmalloc (TCHAR, 50 * multiplier); if (!buf) return; memwatch_dump2 (buf, 50 * multiplier, num); f_out (stdout, _T("%s"), buf); xfree (buf); } static void memwatch (TCHAR **c) { int num; struct memwatch_node *mwn; TCHAR nc, *cp; if (!memwatch_enabled) { initialize_memwatch (0); console_out (_T("Memwatch breakpoints enabled\n")); } cp = *c; ignore_ws (c); if (!more_params (c)) { memwatch_dump (-1); return; } nc = next_char (c); if (nc == '-') { deinitialize_memwatch (); console_out (_T("Memwatch breakpoints disabled\n")); return; } if (nc == 'd') { if (illgdebug) { ignore_ws (c); if (more_params (c)) { uae_u32 addr = readhex (c); uae_u32 len = 1; if (more_params (c)) len = readhex (c); console_out_f (_T("Cleared logging addresses %08X - %08X\n"), addr, addr + len); while (len > 0) { addr &= 0xffffff; illgdebug[addr] = 7; addr++; len--; } } else { illg_free(); console_out (_T("Illegal memory access logging disabled\n")); } } else { illg_init (); ignore_ws (c); illgdebug_break = 0; if (more_params (c)) illgdebug_break = 1; console_out_f (_T("Illegal memory access logging enabled. Break=%d\n"), illgdebug_break); } return; } *c = cp; num = readint (c); if (num < 0 || num >= MEMWATCH_TOTAL) return; mwn = &mwnodes[num]; mwn->size = 0; ignore_ws (c); if (!more_params (c)) { console_out_f (_T("Memwatch %d removed\n"), num); return; } mwn->addr = readhex (c); mwn->size = 1; mwn->rwi = 7; mwn->val_enabled = 0; mwn->val_mask = 0xffffffff; mwn->frozen = 0; mwn->modval_written = 0; ignore_ws (c); if (more_params (c)) { mwn->size = readhex (c); ignore_ws (c); if (more_params (c)) { for (;;) { TCHAR ncc = peek_next_char(c); TCHAR nc = _totupper (next_char (c)); if (mwn->rwi == 7) mwn->rwi = 0; if (nc == 'F') mwn->frozen = 1; if (nc == 'W') mwn->rwi |= 2; if (nc == 'I') mwn->rwi |= 4; if (nc == 'R') mwn->rwi |= 1; if (ncc == ' ') break; if (!more_params(c)) break; } ignore_ws (c); if (more_params (c)) { if (_totupper (**c) == 'M') { mwn->modval_written = 1; } else if (_totupper (**c) == 'C') { mwn->mustchange = 1; } else { mwn->val = readhex (c, &mwn->val_size); mwn->val_enabled = 1; } } } } if (mwn->frozen && mwn->rwi == 0) mwn->rwi = 3; memwatch_dump (num); } static void writeintomem (TCHAR **c) { uae_u32 addr = 0; uae_u32 val = 0; TCHAR cc; int len = 1; ignore_ws(c); addr = readhex (c); ignore_ws (c); if (!more_params (c)) return; cc = peekchar (c); if (cc == '\'' || cc == '\"') { next_char (c); while (more_params (c)) { TCHAR str[2]; char *astr; cc = next_char (c); if (cc == '\'' || cc == '\"') break; str[0] = cc; str[1] = 0; astr = ua (str); put_byte (addr, astr[0]); xfree (astr); addr++; } } else { for (;;) { ignore_ws (c); if (!more_params (c)) break; val = readhex (c, &len); if (len == 4) { put_long (addr, val); cc = 'L'; } else if (len == 2) { put_word (addr, val); cc = 'W'; } else if (len == 1) { put_byte (addr, val); cc = 'B'; } else { break; } console_out_f (_T("Wrote %X (%u) at %08X.%c\n"), val, val, addr, cc); addr += len; } } } static uae_u8 *dump_xlate (uae_u32 addr) { if (!mem_banks[addr >> 16]->check (addr, 1)) return NULL; return mem_banks[addr >> 16]->xlateaddr (addr); } static void memory_map_dump_2 (int log) { bool imold; int i, j, max; addrbank *a1 = mem_banks[0]; TCHAR txt[256]; imold = currprefs.illegal_mem; currprefs.illegal_mem = false; max = currprefs.address_space_24 ? 256 : 65536; j = 0; for (i = 0; i < max + 1; i++) { addrbank *a2 = NULL; if (i < max) a2 = mem_banks[i]; if (a1 != a2) { int k, mirrored, size, size_out; TCHAR size_ext; uae_u8 *caddr; const TCHAR *name; TCHAR tmp[MAX_DPATH]; name = a1->name; if (name == NULL) name = _T(""); k = j; caddr = dump_xlate (k << 16); mirrored = caddr ? 1 : 0; k++; while (k < i && caddr) { if (dump_xlate (k << 16) == caddr) mirrored++; k++; } size = (i - j) << (16 - 10); size_out = size; size_ext = 'K'; if (j >= 256) { size_out /= 1024; size_ext = 'M'; } _stprintf (txt, _T("%08X %7d%c/%d = %7d%c %s"), j << 16, size_out, size_ext, mirrored, mirrored ? size_out / mirrored : size_out, size_ext, name); tmp[0] = 0; if (a1->flags == ABFLAG_ROM && mirrored) { TCHAR *p = txt + _tcslen (txt); uae_u32 crc = get_crc32 (a1->xlateaddr(j << 16), (size * 1024) / mirrored); struct romdata *rd = getromdatabycrc (crc); _stprintf (p, _T(" (%08X)"), crc); if (rd) { tmp[0] = '='; getromname (rd, tmp + 1); _tcscat (tmp, _T("\n")); } } _tcscat (txt, _T("\n")); if (log) write_log (_T("%s"),txt); else console_out (txt); if (tmp[0]) { if (log) write_log (_T("%s"),tmp); else console_out (tmp); } j = i; a1 = a2; } } currprefs.illegal_mem = imold; } void memory_map_dump (void) { memory_map_dump_2 (1); } STATIC_INLINE uaecptr BPTR2APTR (uaecptr addr) { return addr << 2; } static TCHAR *BSTR2CSTR (uae_u8 *bstr) { TCHAR *s; char *cstr = xmalloc (char, bstr[0] + 1); if (cstr) { memcpy (cstr, bstr + 1, bstr[0]); cstr[bstr[0]] = 0; } s = au (cstr); xfree (cstr); return s; } static void print_task_info (uaecptr node) { TCHAR *s; int process = get_byte (node + 8) == 13 ? 1 : 0; console_out_f (_T("%08X: "), node); s = au ((char*)get_real_address (get_long (node + 10))); console_out_f (process ? _T(" PROCESS '%s'\n") : _T(" TASK '%s'\n"), s); xfree (s); if (process) { uaecptr cli = BPTR2APTR (get_long (node + 172)); int tasknum = get_long (node + 140); if (cli && tasknum) { uae_u8 *command_bstr = get_real_address (BPTR2APTR (get_long (cli + 16))); TCHAR *command = BSTR2CSTR (command_bstr); console_out_f (_T(" [%d, '%s']\n"), tasknum, command); xfree (command); } else { console_out (_T("\n")); } } } static void show_exec_tasks (void) { uaecptr execbase = get_long (4); uaecptr taskready = get_long (execbase + 406); uaecptr taskwait = get_long (execbase + 420); uaecptr node, end; console_out_f (_T("Execbase at 0x%08X\n"), execbase); console_out (_T("Current:\n")); node = get_long (execbase + 276); print_task_info (node); console_out_f (_T("Ready:\n")); node = get_long (taskready); end = get_long (taskready + 4); while (node) { print_task_info (node); node = get_long (node); } console_out (_T("Waiting:\n")); node = get_long (taskwait); end = get_long (taskwait + 4); while (node) { print_task_info (node); node = get_long (node); } } static uaecptr get_base (const uae_char *name) { uaecptr v = get_long (4); addrbank *b = &get_mem_bank(v); if (!b || !b->check (v, 400) || b->flags != ABFLAG_RAM) return 0; v += 378; // liblist while (v = get_long (v)) { uae_u32 v2; uae_u8 *p; b = &get_mem_bank (v); if (!b || !b->check (v, 32) || b->flags != ABFLAG_RAM) goto fail; v2 = get_long (v + 10); // name b = &get_mem_bank (v2); if (!b || !b->check (v2, 20)) goto fail; if (b->flags == ABFLAG_ROM || b->flags == ABFLAG_RAM) { p = b->xlateaddr (v2); if (!memcmp (p, name, strlen (name) + 1)) return v; } } return 0; fail: return 0xffffffff; } static TCHAR *getfrombstr(uaecptr pp) { uae_u8 *p = get_real_address ((uaecptr)(pp << 2)); TCHAR *s = xmalloc (TCHAR, p[0] + 1); return au_copy (s, p[0] + 1, (char*)p + 1); } static void show_exec_lists (TCHAR t) { uaecptr execbase = get_long (4); uaecptr list = 0, node; if (_totupper (t) == 'O') { // doslist uaecptr dosbase = get_base ("dos.library"); if (dosbase) { uaecptr rootnode = get_long (dosbase + 34); uaecptr dosinfo = get_long (rootnode + 24) << 2; console_out_f (_T("ROOTNODE: %08x DOSINFO: %08x\n"), rootnode, dosinfo); uaecptr doslist = get_long (dosinfo + 4) << 2; while (doslist) { int type = get_long (doslist + 4); uaecptr msgport = get_long (doslist + 8); TCHAR *name = getfrombstr (get_long (doslist + 40)); console_out_f (_T("%08x: %d %08x '%s'\n"), doslist, type, msgport, name); if (type == 0) { console_out_f (_T(" - H=%08x Stack=%5d Pri=%2d Start=%08x Seg=%08x GV=%08x\n"), get_long (doslist + 16) << 2, get_long (doslist + 20), get_long (doslist + 24), get_long (doslist + 28), get_long (doslist + 32) << 2, get_long (doslist + 36)); } xfree (name); doslist = get_long (doslist) << 2; } } else { console_out_f (_T("can't find dos.library\n")); } return; } else if (_totupper (t) == 'I') { // interrupts static const int it[] = { 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0 }; static const int it2[] = { 1, 1, 1, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 6, 6, 7 }; list = execbase + 84; for (int i = 0; i < 16; i++) { console_out_f (_T("%2d %d: %08x\n"), i + 1, it2[i], list); if (it[i]) { console_out_f (_T(" [H] %08x\n"), get_long (list)); node = get_long (list + 8); if (node) { uae_u8 *addr = get_real_address (get_long (node + 10)); TCHAR *name = addr ? au ((char*)addr) : au(""); console_out_f (_T(" %08x (C=%08X D=%08X) '%s'\n"), node, get_long (list + 4), get_long (list), name); xfree (name); } } else { int cnt = 0; node = get_long (list); node = get_long (node); while (get_long (node)) { uae_u8 *addr = get_real_address (get_long (node + 10)); TCHAR *name = addr ? au ((char*)addr) : au(""); console_out_f (_T(" [S] %08x (C=%08x D=%08X) '%s'\n"), node, get_long (node + 18), get_long (node + 14), name); if (i == 4 - 1 || i == 14 - 1) { if (!_tcsicmp (name, _T("cia-a")) || !_tcsicmp (name, _T("cia-b"))) { static const TCHAR *ciai[] = { _T("A"), _T("B"), _T("ALRM"), _T("SP"), _T("FLG") }; uaecptr cia = node + 22; for (int j = 0; j < 5; j++) { uaecptr ciap = get_long (cia); console_out_f (_T(" %5s: %08x"), ciai[j], ciap); if (ciap) { uae_u8 *addr2 = get_real_address (get_long (ciap + 10)); TCHAR *name2 = addr ? au ((char*)addr2) : au(""); console_out_f (_T(" (C=%08x D=%08X) '%s'"), get_long (ciap + 18), get_long (ciap + 14), name2); xfree (name2); } console_out_f (_T("\n")); cia += 4; } } } xfree (name); node = get_long (node); cnt++; } if (!cnt) console_out_f (_T(" [S] \n")); } list += 12; } return; } switch (_totupper (t)) { case 'R': list = execbase + 336; break; case 'D': list = execbase + 350; break; case 'L': list = execbase + 378; break; } if (list == 0) return; node = get_long (list); while (get_long (node)) { TCHAR *name = au ((char*)get_real_address (get_long (node + 10))); console_out_f (_T("%08x %s\n"), node, name); xfree (name); node = get_long (node); } } #if 0 static int trace_same_insn_count; static uae_u8 trace_insn_copy[10]; static struct regstruct trace_prev_regs; #endif static uaecptr nextpc; int instruction_breakpoint (TCHAR **c) { struct breakpoint_node *bpn; int i; if (more_params (c)) { TCHAR nc = _totupper ((*c)[0]); if (nc == 'S') { next_char (c); sr_bpvalue = sr_bpmask = 0; if (more_params (c)) { sr_bpmask = 0xffff; sr_bpvalue = readhex (c); if (more_params (c)) sr_bpmask = readhex (c); } console_out_f (_T("SR breakpoint, value=%04X, mask=%04X\n"), sr_bpvalue, sr_bpmask); return 0; } else if (nc == 'I') { next_char (c); if (more_params (c)) skipins = readhex (c); else skipins = 0x10000; do_skip = 1; skipaddr_doskip = 1; return 1; } else if (nc == 'D' && (*c)[1] == 0) { for (i = 0; i < BREAKPOINT_TOTAL; i++) bpnodes[i].enabled = 0; console_out (_T("All breakpoints removed\n")); return 0; } else if (nc == 'L') { int got = 0; for (i = 0; i < BREAKPOINT_TOTAL; i++) { bpn = &bpnodes[i]; if (!bpn->enabled) continue; console_out_f (_T("%8X "), bpn->addr); got = 1; } if (!got) console_out (_T("No breakpoints\n")); else console_out (_T("\n")); return 0; } skipaddr_doskip = 1; skipaddr_start = readhex (c); if (more_params (c)) { skipaddr_end = readhex (c); } else { for (i = 0; i < BREAKPOINT_TOTAL; i++) { bpn = &bpnodes[i]; if (bpn->enabled && bpn->addr == skipaddr_start) { bpn->enabled = 0; console_out (_T("Breakpoint removed\n")); skipaddr_start = 0xffffffff; skipaddr_doskip = 0; return 0; } } for (i = 0; i < BREAKPOINT_TOTAL; i++) { bpn = &bpnodes[i]; if (bpn->enabled) continue; bpn->addr = skipaddr_start; bpn->enabled = 1; console_out (_T("Breakpoint added\n")); skipaddr_start = 0xffffffff; skipaddr_doskip = 0; break; } return 0; } } #if 0 if (skipaddr_start == 0xC0DEDBAD) { trace_same_insn_count = 0; logfile = fopen ("uae.trace", "w"); memcpy (trace_insn_copy, regs.pc_p, 10); memcpy (&trace_prev_regs, ®s, sizeof regs); } #endif do_skip = 1; skipaddr_doskip = -1; return 1; } static int process_breakpoint (TCHAR **c) { processptr = 0; xfree (processname); processname = NULL; if (!more_params (c)) return 0; if (**c == '\"') { TCHAR pn[200]; next_string (c, pn, 200, 0); processname = ua (pn); } else { processptr = readhex (c); } do_skip = 1; skipaddr_doskip = 1; skipaddr_start = 0; return 1; } static void savemem (TCHAR **cc) { uae_u8 b; uae_u32 src, src2, len, len2; TCHAR *name; FILE *fp; if (!more_params (cc)) goto S_argh; name = *cc; while (**cc != '\0' && !isspace (**cc)) (*cc)++; if (!isspace (**cc)) goto S_argh; **cc = '\0'; (*cc)++; if (!more_params (cc)) goto S_argh; src2 = src = readhex (cc); if (!more_params (cc)) goto S_argh; len2 = len = readhex (cc); fp = _tfopen (name, _T("wb")); if (fp == NULL) { console_out_f (_T("Couldn't open file '%s'\n"), name); return; } while (len > 0) { b = get_byte (src); src++; len--; if (fwrite (&b, 1, 1, fp) != 1) { console_out (_T("Error writing file\n")); break; } } fclose (fp); if (len == 0) console_out_f (_T("Wrote %08X - %08X (%d bytes) to '%s'\n"), src2, src2 + len2, len2, name); return; S_argh: console_out (_T("S-command needs more arguments!\n")); } static void searchmem (TCHAR **cc) { int i, sslen, got, val, stringmode; uae_u8 ss[256]; uae_u32 addr, endaddr; TCHAR nc; got = 0; sslen = 0; stringmode = 0; ignore_ws (cc); if (**cc == '"') { stringmode = 1; (*cc)++; while (**cc != '"' && **cc != 0) { ss[sslen++] = tolower (**cc); (*cc)++; } if (**cc != 0) (*cc)++; } else { for (;;) { if (**cc == 32 || **cc == 0) break; nc = _totupper (next_char (cc)); if (isspace (nc)) break; if (isdigit(nc)) val = nc - '0'; else val = nc - 'A' + 10; if (val < 0 || val > 15) return; val *= 16; if (**cc == 32 || **cc == 0) break; nc = _totupper (next_char (cc)); if (isspace (nc)) break; if (isdigit(nc)) val += nc - '0'; else val += nc - 'A' + 10; if (val < 0 || val > 255) return; ss[sslen++] = (uae_u8)val; } } if (sslen == 0) return; ignore_ws (cc); addr = 0; endaddr = lastaddr (); if (more_params (cc)) { addr = readhex (cc); if (more_params (cc)) endaddr = readhex (cc); } console_out_f (_T("Searching from %08X to %08X..\n"), addr, endaddr); while ((addr = nextaddr (addr, endaddr, NULL)) != 0xffffffff) { if (addr == endaddr) break; for (i = 0; i < sslen; i++) { uae_u8 b = get_byte (addr + i); if (stringmode) { if (tolower (b) != ss[i]) break; } else { if (b != ss[i]) break; } } if (i == sslen) { got++; console_out_f (_T(" %08X"), addr); if (got > 100) { console_out (_T("\nMore than 100 results, aborting..")); break; } } if (iscancel (65536)) { console_out_f (_T("Aborted at %08X\n"), addr); break; } } if (!got) console_out (_T("nothing found")); console_out (_T("\n")); } static int staterecorder (TCHAR **cc) { #if 0 TCHAR nc; if (!more_params (cc)) { if (savestate_dorewind (1)) { debug_rewind = 1; return 1; } return 0; } nc = next_char (cc); if (nc == 'l') { savestate_listrewind (); return 0; } #endif return 0; } static int debugtest_modes[DEBUGTEST_MAX]; static const TCHAR *debugtest_names[] = { _T("Blitter"), _T("Keyboard"), _T("Floppy") }; void debugtest (enum debugtest_item di, const TCHAR *format, ...) { va_list parms; TCHAR buffer[1000]; if (!debugtest_modes[di]) return; va_start (parms, format); _vsntprintf (buffer, 1000 - 1, format, parms); va_end (parms); write_log (_T("%s PC=%08X: %s\n"), debugtest_names[di], M68K_GETPC, buffer); if (debugtest_modes[di] == 2) activate_debugger (); } static void debugtest_set (TCHAR **inptr) { int i, val, val2; ignore_ws (inptr); val2 = 1; if (!more_params (inptr)) { for (i = 0; i < DEBUGTEST_MAX; i++) debugtest_modes[i] = 0; console_out (_T("All debugtests disabled\n")); return; } val = readint (inptr); if (more_params (inptr)) { val2 = readint (inptr); if (val2 > 0) val2 = 2; } if (val < 0) { for (i = 0; i < DEBUGTEST_MAX; i++) debugtest_modes[i] = val2; console_out (_T("All debugtests enabled\n")); return; } if (val >= 0 && val < DEBUGTEST_MAX) { if (debugtest_modes[val]) debugtest_modes[val] = 0; else debugtest_modes[val] = val2; console_out_f (_T("Debugtest '%s': %s. break = %s\n"), debugtest_names[val], debugtest_modes[val] ? _T("on") :_T("off"), val2 == 2 ? _T("on") : _T("off")); } } static void debug_sprite (TCHAR **inptr) { uaecptr saddr, addr, addr2; int xpos, xpos_ecs; int ypos, ypos_ecs; int ypose, ypose_ecs; int attach; uae_u64 w1, w2, ww1, ww2; int size = 1, width; int ecs, sh10; int y, i; TCHAR tmp[80]; int max = 2; addr2 = 0; ignore_ws (inptr); addr = readhex (inptr); ignore_ws (inptr); if (more_params (inptr)) size = readhex (inptr); if (size != 1 && size != 2 && size != 4) { addr2 = size; ignore_ws (inptr); if (more_params (inptr)) size = readint (inptr); if (size != 1 && size != 2 && size != 4) size = 1; } for (;;) { ecs = 0; sh10 = 0; saddr = addr; width = size * 16; w1 = get_word (addr); w2 = get_word (addr + size * 2); console_out_f (_T(" %06X "), addr); for (i = 0; i < size * 2; i++) console_out_f (_T("%04X "), get_word (addr + i * 2)); console_out_f (_T("\n")); ypos = w1 >> 8; xpos = w1 & 255; ypose = w2 >> 8; attach = (w2 & 0x80) ? 1 : 0; if (w2 & 4) ypos |= 256; if (w2 & 2) ypose |= 256; ypos_ecs = ypos; ypose_ecs = ypose; if (w2 & 0x40) ypos_ecs |= 512; if (w2 & 0x20) ypose_ecs |= 512; xpos <<= 1; if (w2 & 0x01) xpos |= 1; xpos_ecs = xpos << 2; if (w2 & 0x10) xpos_ecs |= 2; if (w2 & 0x08) xpos_ecs |= 1; if (w2 & (0x40 | 0x20 | 0x10 | 0x08)) ecs = 1; if (w1 & 0x80) sh10 = 1; if (ypose < ypos) ypose += 256; for (y = ypos; y < ypose; y++) { int x; addr += size * 4; if (addr2) addr2 += size * 4; if (size == 1) { w1 = get_word (addr); w2 = get_word (addr + 2); if (addr2) { ww1 = get_word (addr2); ww2 = get_word (addr2 + 2); } } else if (size == 2) { w1 = get_long (addr); w2 = get_long (addr + 4); if (addr2) { ww1 = get_long (addr2); ww2 = get_long (addr2 + 4); } } else if (size == 4) { w1 = get_long (addr + 0); w2 = get_long (addr + 8); w1 <<= 32; w2 <<= 32; w1 |= get_long (addr + 4); w2 |= get_long (addr + 12); if (addr2) { ww1 = get_long (addr2 + 0); ww2 = get_long (addr2 + 8); ww1 <<= 32; ww2 <<= 32; ww1 |= get_long (addr2 + 4); ww2 |= get_long (addr2 + 12); } } width = size * 16; for (x = 0; x < width; x++) { int v1 = w1 & 1; int v2 = w2 & 1; int v = v1 * 2 + v2; w1 >>= 1; w2 >>= 1; if (addr2) { int vv1 = ww1 & 1; int vv2 = ww2 & 1; int vv = vv1 * 2 + vv2; vv1 >>= 1; vv2 >>= 1; v *= 4; v += vv; tmp[width - (x + 1)] = v >= 10 ? 'A' + v - 10 : v + '0'; } else { tmp[width - (x + 1)] = v + '0'; } } tmp[width] = 0; console_out_f (_T("%3d %06X %s\n"), y, addr, tmp); } console_out_f (_T("Sprite address %08X, width = %d\n"), saddr, size * 16); console_out_f (_T("OCS: StartX=%d StartY=%d EndY=%d\n"), xpos, ypos, ypose); console_out_f (_T("ECS: StartX=%d (%d.%d) StartY=%d EndY=%d%s\n"), xpos_ecs, xpos_ecs / 4, xpos_ecs & 3, ypos_ecs, ypose_ecs, ecs ? _T(" (*)") : _T("")); console_out_f (_T("Attach: %d. AGA SSCAN/SH10 bit: %d\n"), attach, sh10); addr += size * 4; if (get_word (addr) == 0 && get_word (addr + size * 4) == 0) break; max--; if (max <= 0) break; } } static void disk_debug (TCHAR **inptr) { TCHAR parm[10]; int i; if (**inptr == 'd') { (*inptr)++; ignore_ws (inptr); disk_debug_logging = readint (inptr); console_out_f (_T("Disk logging level %d\n"), disk_debug_logging); return; } disk_debug_mode = 0; disk_debug_track = -1; ignore_ws (inptr); if (!next_string (inptr, parm, sizeof (parm) / sizeof (TCHAR), 1)) goto end; for (i = 0; i < _tcslen(parm); i++) { if (parm[i] == 'R') disk_debug_mode |= DISK_DEBUG_DMA_READ; if (parm[i] == 'W') disk_debug_mode |= DISK_DEBUG_DMA_WRITE; if (parm[i] == 'P') disk_debug_mode |= DISK_DEBUG_PIO; } if (more_params(inptr)) disk_debug_track = readint (inptr); if (disk_debug_track < 0 || disk_debug_track > 2 * 83) disk_debug_track = -1; if (disk_debug_logging == 0) disk_debug_logging = 1; end: console_out_f (_T("Disk breakpoint mode %c%c%c track %d\n"), disk_debug_mode & DISK_DEBUG_DMA_READ ? 'R' : '-', disk_debug_mode & DISK_DEBUG_DMA_WRITE ? 'W' : '-', disk_debug_mode & DISK_DEBUG_PIO ? 'P' : '-', disk_debug_track); } static void find_ea (TCHAR **inptr) { uae_u32 ea, sea, dea; uaecptr addr, end; int hits = 0; addr = 0; end = lastaddr (); ea = readhex (inptr); if (more_params(inptr)) { addr = readhex (inptr); if (more_params(inptr)) end = readhex (inptr); } console_out_f (_T("Searching from %08X to %08X\n"), addr, end); while((addr = nextaddr (addr, end, &end)) != 0xffffffff) { if ((addr & 1) == 0 && addr + 6 <= end) { sea = 0xffffffff; dea = 0xffffffff; m68k_disasm_ea (NULL, addr, NULL, 1, &sea, &dea); if (ea == sea || ea == dea) { m68k_disasm (stdout, addr, NULL, 1); hits++; if (hits > 100) { console_out_f (_T("Too many hits. End addr = %08X\n"), addr); break; } } if (iscancel (65536)) { console_out_f (_T("Aborted at %08X\n"), addr); break; } } } } static void m68k_modify (TCHAR **inptr) { uae_u32 v; TCHAR parm[10]; TCHAR c1, c2; int i; if (!next_string (inptr, parm, sizeof (parm) / sizeof (TCHAR), 1)) return; c1 = _totupper (parm[0]); c2 = 99; if (c1 == 'A' || c1 == 'D' || c1 == 'P') { c2 = _totupper (parm[1]); if (isdigit (c2)) c2 -= '0'; else c2 = 99; } v = readhex (inptr); if (c1 == 'A' && c2 < 8) regs.regs[8 + c2] = v; else if (c1 == 'D' && c2 < 8) regs.regs[c2] = v; else if (c1 == 'P' && c2 == 0) regs.irc = v; else if (c1 == 'P' && c2 == 1) regs.ir = v; else if (!_tcscmp (parm, _T("SR"))) { regs.sr = v; MakeFromSR (); } else if (!_tcscmp (parm, _T("CCR"))) { regs.sr = (regs.sr & ~31) | (v & 31); MakeFromSR (); } else if (!_tcscmp (parm, _T("USP"))) { regs.usp = v; } else if (!_tcscmp (parm, _T("ISP"))) { regs.isp = v; } else if (!_tcscmp (parm, _T("PC"))) { m68k_setpc (v); fill_prefetch (); } else { for (i = 0; m2cregs[i].regname; i++) { if (!_tcscmp (parm, m2cregs[i].regname)) val_move2c2 (m2cregs[i].regno, v); } } } static uaecptr nxdis, nxmem; static BOOL debug_line (TCHAR *input) { TCHAR cmd, *inptr; uaecptr addr; inptr = input; cmd = next_char (&inptr); switch (cmd) { case 'c': dumpcia (); dumpdisk (); dumpcustom (); break; case 'i': { if (*inptr == 'l') { next_char (&inptr); if (more_params (&inptr)) { debug_illegal_mask = readhex (&inptr); } else { debug_illegal_mask = debug_illegal ? 0 : -1; debug_illegal_mask &= ~((uae_u64)255 << 24); // mask interrupts } console_out_f (_T("Exception breakpoint mask: %0I64X\n"), debug_illegal_mask); debug_illegal = debug_illegal_mask ? 1 : 0; } else { addr = 0xffffffff; if (more_params (&inptr)) addr = readhex (&inptr); dump_vectors (addr); } break; } case 'e': dump_custom_regs (tolower(*inptr) == 'a'); break; case 'r': { if (more_params(&inptr)) m68k_modify (&inptr); else m68k_dumpstate (stdout, &nextpc); } break; case 'D': deepcheatsearch (&inptr); break; case 'C': cheatsearch (&inptr); break; case 'W': writeintomem (&inptr); break; case 'w': memwatch (&inptr); break; case 'S': savemem (&inptr); break; case 's': if (*inptr == 'c') { screenshot (1, 1); } else if (*inptr == 'p') { inptr++; debug_sprite (&inptr); } else if (*inptr == 'm') { if (*(inptr + 1) == 'c') { next_char (&inptr); next_char (&inptr); if (!smc_table) smc_detect_init (&inptr); else smc_free (); } } else { searchmem (&inptr); } break; case 'd': { if (*inptr == 'i') { next_char (&inptr); disk_debug (&inptr); } else if (*inptr == 'j') { inptr++; inputdevice_logging = 1 | 2; if (more_params (&inptr)) inputdevice_logging = readint (&inptr); console_out_f (_T("Input logging level %d\n"), inputdevice_logging); } else if (*inptr == 'm') { memory_map_dump_2 (0); } else if (*inptr == 't') { next_char (&inptr); debugtest_set (&inptr); #ifdef _WIN32 } else if (*inptr == 'g') { extern void update_disassembly (uae_u32); next_char (&inptr); if (more_params (&inptr)) update_disassembly (readhex (&inptr)); #endif } else { uae_u32 daddr; int count; if (more_params (&inptr)) daddr = readhex (&inptr); else daddr = nxdis; if (more_params (&inptr)) count = readhex (&inptr); else count = 10; m68k_disasm (stdout, daddr, &nxdis, count); } } break; case 'T': if (inptr[0] == 't' || inptr[0] == 0) show_exec_tasks (); else show_exec_lists (inptr[0]); break; case 't': no_trace_exceptions = 0; if (*inptr != 't') { if (more_params (&inptr)) skipaddr_doskip = readint (&inptr); if (skipaddr_doskip <= 0 || skipaddr_doskip > 10000) skipaddr_doskip = 1; } else { no_trace_exceptions = 1; } set_special (SPCFLAG_BRK); exception_debugging = 1; return true; case 'z': skipaddr_start = nextpc; skipaddr_doskip = 1; do_skip = 1; exception_debugging = 1; return true; case 'f': if (inptr[0] == 'a') { next_char (&inptr); find_ea (&inptr); } else if (inptr[0] == 'p') { inptr++; if (process_breakpoint (&inptr)) return true; } else { if (instruction_breakpoint (&inptr)) return true; } break; case 'q': uae_quit(); deactivate_debugger(); return true; case 'g': if (more_params (&inptr)) { m68k_setpc (readhex (&inptr)); fill_prefetch (); } deactivate_debugger(); return true; case 'x': if (_totupper(inptr[0]) == 'X') { debugger_change(-1); } else { deactivate_debugger(); close_console(); return true; } break; case 'H': { int count, temp, badly, skip; uae_u32 addr = 0; uae_u32 oldpc = m68k_getpc (); struct regstruct save_regs = regs; badly = 0; if (inptr[0] == 'H') { badly = 1; inptr++; } if (more_params(&inptr)) count = readint (&inptr); else count = 10; if (count > 1000) { addr = count; count = MAX_HIST; } if (count < 0) break; skip = count; if (more_params (&inptr)) skip = count - readint (&inptr); temp = lasthist; while (count-- > 0 && temp != firsthist) { if (temp == 0) temp = MAX_HIST - 1; else temp--; } while (temp != lasthist) { regs = history[temp]; if (history[temp].pc == addr || addr == 0) { m68k_setpc (history[temp].pc); if (badly) m68k_dumpstate (stdout, NULL); else m68k_disasm (stdout, history[temp].pc, NULL, 1); if (addr && history[temp].pc == addr) break; } if (skip-- < 0) break; if (++temp == MAX_HIST) temp = 0; } regs = save_regs; m68k_setpc (oldpc); } break; case 'M': if (more_params (&inptr)) { switch (next_char (&inptr)) { case 'a': if (more_params (&inptr)) audio_channel_mask = readhex (&inptr); console_out_f (_T("Audio mask = %02X\n"), audio_channel_mask); break; case 's': if (more_params (&inptr)) debug_sprite_mask = readhex (&inptr); console_out_f (_T("Sprite mask: %02X\n"), debug_sprite_mask); break; case 'b': if (more_params (&inptr)) { debug_bpl_mask = readhex (&inptr) & 0xff; if (more_params (&inptr)) debug_bpl_mask_one = readhex (&inptr) & 0xff; notice_screen_contents_lost (); } console_out_f (_T("Bitplane mask: %02X (%02X)\n"), debug_bpl_mask, debug_bpl_mask_one); break; } } break; case 'm': { uae_u32 maddr; int lines; #ifdef _WIN32 if (*inptr == 'g') { extern void update_memdump (uae_u32); next_char (&inptr); if (more_params (&inptr)) update_memdump (readhex (&inptr)); break; } #endif if (more_params (&inptr)) { maddr = readhex (&inptr); } else { maddr = nxmem; } if (more_params (&inptr)) lines = readhex (&inptr); else lines = 20; dumpmem (maddr, &nxmem, lines); } break; case 'v': case 'V': { int v1 = vpos, v2 = 0; if (more_params (&inptr)) v1 = readint (&inptr); if (more_params (&inptr)) v2 = readint (&inptr); if (debug_dma) { decode_dma_record (v2, v1, cmd == 'v', false); } else { debug_dma = v1 < 0 ? -v1 : 1; console_out_f (_T("DMA debugger enabled, mode=%d.\n"), debug_dma); } } break; case 'o': { if (copper_debugger (&inptr)) { debugger_active = 0; debugging = 0; return true; } break; } case 'O': break; case 'b': if (staterecorder (&inptr)) return true; break; case 'U': if (currprefs.cpu_model && more_params (&inptr)) { int i; uaecptr addrl = readhex (&inptr); uaecptr addrp; console_out_f (_T("%08X translates to:\n"), addrl); for (i = 0; i < 4; i++) { bool super = (i & 2) != 0; bool data = (i & 1) != 0; console_out_f (_T("S%dD%d="), super, data); TRY(prb) { addrp = mmu_translate (addrl, super, data, false); console_out_f (_T("%08X"), addrp); TRY(prb2) { addrp = mmu_translate (addrl, super, data, true); console_out_f (_T(" RW")); } CATCH(prb2) { console_out_f (_T(" RO")); } } CATCH(prb) { console_out_f (_T("***********")); } console_out_f (_T(" ")); } console_out_f (_T("\n")); } break; case 'h': case '?': if (more_params (&inptr)) converter (&inptr); else debug_help (); break; } return false; } static void debug_1 (void) { TCHAR input[MAX_LINEWIDTH]; m68k_dumpstate (stdout, &nextpc); nxdis = nextpc; nxmem = 0; debugger_active = 1; for (;;) { int v; if (!debugger_active) return; update_debug_info (); console_out (_T(">")); console_flush (); debug_linecounter = 0; v = console_get (input, MAX_LINEWIDTH); if (v < 0) return; if (v == 0) continue; if (debug_line (input)) return; } } static void addhistory (void) { uae_u32 pc = m68k_getpc (); // if (!notinrom()) // return; history[lasthist] = regs; history[lasthist].pc = m68k_getpc (); if (++lasthist == MAX_HIST) lasthist = 0; if (lasthist == firsthist) { if (++firsthist == MAX_HIST) firsthist = 0; } } void debug (void) { int i; if (savestate_state) return; bogusframe = 1; addhistory (); #if 0 if (do_skip && skipaddr_start == 0xC0DEDBAD) { if (trace_same_insn_count > 0) { if (memcmp (trace_insn_copy, regs.pc_p, 10) == 0 && memcmp (trace_prev_regs.regs, regs.regs, sizeof regs.regs) == 0) { trace_same_insn_count++; return; } } if (trace_same_insn_count > 1) fprintf (logfile, "[ repeated %d times ]\n", trace_same_insn_count); m68k_dumpstate (logfile, &nextpc); trace_same_insn_count = 1; memcpy (trace_insn_copy, regs.pc_p, 10); memcpy (&trace_prev_regs, ®s, sizeof regs); } #endif if (!memwatch_triggered) { if (do_skip) { uae_u32 pc; uae_u16 opcode; int bp = 0; pc = munge24 (m68k_getpc ()); opcode = currprefs.cpu_model < 68020 && (currprefs.cpu_compatible || currprefs.cpu_cycle_exact) ? regs.ir : get_word (pc); for (i = 0; i < BREAKPOINT_TOTAL; i++) { if (!bpnodes[i].enabled) continue; if (bpnodes[i].addr == pc) { bp = 1; console_out_f (_T("Breakpoint at %08X\n"), pc); break; } } if (skipaddr_doskip) { if (skipaddr_start == pc) bp = 1; if ((processptr || processname) && notinrom()) { uaecptr execbase = get_long (4); uaecptr activetask = get_long (execbase + 276); int process = get_byte (activetask + 8) == 13 ? 1 : 0; char *name = (char*)get_real_address (get_long (activetask + 10)); if (process) { uaecptr cli = BPTR2APTR(get_long (activetask + 172)); uaecptr seglist = 0; uae_char *command = NULL; if (cli) { if (processname) command = (char*)get_real_address (BPTR2APTR(get_long (cli + 16))); seglist = BPTR2APTR(get_long (cli + 60)); } else { seglist = BPTR2APTR(get_long (activetask + 128)); seglist = BPTR2APTR(get_long (seglist + 12)); } if (activetask == processptr || (processname && (!stricmp (name, processname) || (command && command[0] && !strnicmp (command + 1, processname, command[0]) && processname[command[0]] == 0)))) { while (seglist) { uae_u32 size = get_long (seglist - 4) - 4; if (pc >= (seglist + 4) && pc < (seglist + size)) { bp = 1; break; } seglist = BPTR2APTR(get_long (seglist)); } } } } else if (skipins != 0xffffffff) { if (skipins == 0x10000) { if (opcode == 0x4e75 || opcode == 0x4e73 || opcode == 0x4e77) bp = 1; } else if (opcode == skipins) bp = 1; } else if (skipaddr_start == 0xffffffff && skipaddr_doskip < 0) { if ((pc < 0xe00000 || pc >= 0x1000000) && opcode != 0x4ef9) bp = 1; } else if (skipaddr_start == 0xffffffff && skipaddr_doskip > 0) { bp = 1; } else if (skipaddr_end != 0xffffffff) { if (pc >= skipaddr_start && pc < skipaddr_end) bp = 1; } } if (sr_bpmask || sr_bpvalue) { MakeSR (); if ((regs.sr & sr_bpmask) == sr_bpvalue) { console_out (_T("SR breakpoint\n")); bp = 1; } } if (!bp) { set_special (SPCFLAG_BRK); return; } } } else { console_out_f (_T("Memwatch %d: break at %08X.%c %c%c%c %08X PC=%08X\n"), memwatch_triggered - 1, mwhit.addr, mwhit.size == 1 ? 'B' : (mwhit.size == 2 ? 'W' : 'L'), (mwhit.rwi & 1) ? 'R' : ' ', (mwhit.rwi & 2) ? 'W' : ' ', (mwhit.rwi & 4) ? 'I' : ' ', mwhit.val, mwhit.pc); memwatch_triggered = 0; } if (skipaddr_doskip > 0) { skipaddr_doskip--; if (skipaddr_doskip > 0) { set_special (SPCFLAG_BRK); return; } } inputdevice_unacquire (); pause_sound (); setmouseactive (0); do_skip = 0; skipaddr_start = 0xffffffff; skipaddr_end = 0xffffffff; skipins = 0xffffffff; skipaddr_doskip = 0; exception_debugging = 0; debug_rewind = 0; processptr = 0; #if 0 if (!currprefs.statecapture) { changed_prefs.statecapture = currprefs.statecapture = 1; savestate_init (); } #endif debug_1 (); if (!debug_rewind && !currprefs.cachesize #ifdef FILESYS && nr_units () == 0 #endif ) { savestate_capture (1); } for (i = 0; i < BREAKPOINT_TOTAL; i++) { if (bpnodes[i].enabled) do_skip = 1; } if (sr_bpmask || sr_bpvalue) do_skip = 1; if (do_skip) { set_special (SPCFLAG_BRK); m68k_resumestopped (); debugging = 1; } resume_sound (); inputdevice_acquire (TRUE); } const TCHAR *debuginfo (int mode) { static TCHAR txt[100]; uae_u32 pc = M68K_GETPC; _stprintf (txt, _T("PC=%08X INS=%04X %04X %04X"), pc, get_word (pc), get_word (pc + 2), get_word (pc + 4)); return txt; } static int mmu_logging; #define MMU_PAGE_SHIFT 16 struct mmudata { uae_u32 flags; uae_u32 addr; uae_u32 len; uae_u32 remap; uae_u32 p_addr; }; static struct mmudata *mmubanks; static uae_u32 mmu_struct, mmu_callback, mmu_regs; static uae_u32 mmu_fault_bank_addr, mmu_fault_addr; static int mmu_fault_size, mmu_fault_rw; static int mmu_slots; static struct regstruct mmur; struct mmunode { struct mmudata *mmubank; struct mmunode *next; }; static struct mmunode **mmunl; extern regstruct mmu_backup_regs; #define MMU_READ_U (1 << 0) #define MMU_WRITE_U (1 << 1) #define MMU_READ_S (1 << 2) #define MMU_WRITE_S (1 << 3) #define MMU_READI_U (1 << 4) #define MMU_READI_S (1 << 5) #define MMU_MAP_READ_U (1 << 8) #define MMU_MAP_WRITE_U (1 << 9) #define MMU_MAP_READ_S (1 << 10) #define MMU_MAP_WRITE_S (1 << 11) #define MMU_MAP_READI_U (1 << 12) #define MMU_MAP_READI_S (1 << 13) void mmu_do_hit (void) { int i; uaecptr p; uae_u32 pc; mmu_triggered = 0; pc = m68k_getpc (); p = mmu_regs + 18 * 4; put_long (p, pc); regs = mmu_backup_regs; regs.intmask = 7; regs.t0 = regs.t1 = 0; if (!regs.s) { regs.usp = m68k_areg (regs, 7); if (currprefs.cpu_model >= 68020) m68k_areg (regs, 7) = regs.m ? regs.msp : regs.isp; else m68k_areg (regs, 7) = regs.isp; regs.s = 1; } MakeSR (); m68k_setpc (mmu_callback); fill_prefetch (); if (currprefs.cpu_model > 68000) { for (i = 0 ; i < 9; i++) { m68k_areg (regs, 7) -= 4; put_long (m68k_areg (regs, 7), 0); } m68k_areg (regs, 7) -= 4; put_long (m68k_areg (regs, 7), mmu_fault_addr); m68k_areg (regs, 7) -= 2; put_word (m68k_areg (regs, 7), 0); /* WB1S */ m68k_areg (regs, 7) -= 2; put_word (m68k_areg (regs, 7), 0); /* WB2S */ m68k_areg (regs, 7) -= 2; put_word (m68k_areg (regs, 7), 0); /* WB3S */ m68k_areg (regs, 7) -= 2; put_word (m68k_areg (regs, 7), (mmu_fault_rw ? 0 : 0x100) | (mmu_fault_size << 5)); /* SSW */ m68k_areg (regs, 7) -= 4; put_long (m68k_areg (regs, 7), mmu_fault_bank_addr); m68k_areg (regs, 7) -= 2; put_word (m68k_areg (regs, 7), 0x7002); } m68k_areg (regs, 7) -= 4; put_long (m68k_areg (regs, 7), get_long (p - 4)); m68k_areg (regs, 7) -= 2; put_word (m68k_areg (regs, 7), mmur.sr); #ifdef JIT set_special(SPCFLAG_END_COMPILE); #endif } static void mmu_do_hit_pre (struct mmudata *md, uaecptr addr, int size, int rwi, uae_u32 v) { uae_u32 p, pc; int i; mmur = regs; pc = m68k_getpc (); if (mmu_logging) console_out_f (_T("MMU: hit %08X SZ=%d RW=%d V=%08X PC=%08X\n"), addr, size, rwi, v, pc); p = mmu_regs; put_long (p, 0); p += 4; for (i = 0; i < 16; i++) { put_long (p, regs.regs[i]); p += 4; } put_long (p, pc); p += 4; put_long (p, 0); p += 4; put_long (p, regs.usp); p += 4; put_long (p, regs.isp); p += 4; put_long (p, regs.msp); p += 4; put_word (p, regs.sr); p += 2; put_word (p, (size << 1) | ((rwi & 2) ? 1 : 0)); /* size and rw */ p += 2; put_long (p, addr); /* fault address */ p += 4; put_long (p, md->p_addr); /* bank address */ p += 4; put_long (p, v); p += 4; mmu_fault_addr = addr; mmu_fault_bank_addr = md->p_addr; mmu_fault_size = size; mmu_fault_rw = rwi; mmu_triggered = 1; } static int mmu_hit (uaecptr addr, int size, int rwi, uae_u32 *v) { int s, trig; uae_u32 flags; struct mmudata *md; struct mmunode *mn; if (mmu_triggered) return 1; mn = mmunl[addr >> MMU_PAGE_SHIFT]; if (mn == NULL) return 0; s = regs.s; while (mn) { md = mn->mmubank; if (addr >= md->addr && addr < md->addr + md->len) { flags = md->flags; if (flags & (MMU_MAP_READ_U | MMU_MAP_WRITE_U | MMU_MAP_READ_S | MMU_MAP_WRITE_S | MMU_MAP_READI_U | MMU_MAP_READI_S)) { trig = 0; if (!s && (flags & MMU_MAP_READ_U) && (rwi & 1)) trig = 1; if (!s && (flags & MMU_MAP_WRITE_U) && (rwi & 2)) trig = 1; if (s && (flags & MMU_MAP_READ_S) && (rwi & 1)) trig = 1; if (s && (flags & MMU_MAP_WRITE_S) && (rwi & 2)) trig = 1; if (!s && (flags & MMU_MAP_READI_U) && (rwi & 4)) trig = 1; if (s && (flags & MMU_MAP_READI_S) && (rwi & 4)) trig = 1; if (trig) { uaecptr maddr = md->remap + (addr - md->addr); if (maddr == addr) /* infinite mmu hit loop? no thanks.. */ return 1; if (mmu_logging) console_out_f (_T("MMU: remap %08X -> %08X SZ=%d RW=%d\n"), addr, maddr, size, rwi); if ((rwi & 2)) { switch (size) { case 4: put_long (maddr, *v); break; case 2: put_word (maddr, *v); break; case 1: put_byte (maddr, *v); break; } } else { switch (size) { case 4: *v = get_long (maddr); break; case 2: *v = get_word (maddr); break; case 1: *v = get_byte (maddr); break; } } return 1; } } if (flags & (MMU_READ_U | MMU_WRITE_U | MMU_READ_S | MMU_WRITE_S | MMU_READI_U | MMU_READI_S)) { trig = 0; if (!s && (flags & MMU_READ_U) && (rwi & 1)) trig = 1; if (!s && (flags & MMU_WRITE_U) && (rwi & 2)) trig = 1; if (s && (flags & MMU_READ_S) && (rwi & 1)) trig = 1; if (s && (flags & MMU_WRITE_S) && (rwi & 2)) trig = 1; if (!s && (flags & MMU_READI_U) && (rwi & 4)) trig = 1; if (s && (flags & MMU_READI_S) && (rwi & 4)) trig = 1; if (trig) { mmu_do_hit_pre (md, addr, size, rwi, *v); return 1; } } } mn = mn->next; } return 0; } static void mmu_free_node(struct mmunode *mn) { if (!mn) return; mmu_free_node (mn->next); xfree (mn); } static void mmu_free(void) { struct mmunode *mn; int i; for (i = 0; i < mmu_slots; i++) { mn = mmunl[i]; mmu_free_node (mn); } xfree (mmunl); mmunl = NULL; xfree (mmubanks); mmubanks = NULL; } static int getmmubank(struct mmudata *snptr, uaecptr p) { snptr->flags = get_long (p); if (snptr->flags == 0xffffffff) return 1; snptr->addr = get_long (p + 4); snptr->len = get_long (p + 8); snptr->remap = get_long (p + 12); snptr->p_addr = p; return 0; } int mmu_init(int mode, uaecptr parm, uaecptr parm2) { uaecptr p, p2, banks; int size; struct mmudata *snptr; struct mmunode *mn; static int wasjit; #ifdef JIT if (currprefs.cachesize) { wasjit = currprefs.cachesize; changed_prefs.cachesize = 0; console_out (_T("MMU: JIT disabled\n")); check_prefs_changed_comp (); } if (mode == 0) { if (mmu_enabled) { mmu_free (); deinitialize_memwatch (); console_out (_T("MMU: disabled\n")); changed_prefs.cachesize = wasjit; } mmu_logging = 0; return 1; } #endif if (mode == 1) { if (!mmu_enabled) return 0xffffffff; return mmu_struct; } p = parm; mmu_struct = p; if (get_long (p) != 1) { console_out_f (_T("MMU: version mismatch %d <> %d\n"), get_long (p), 1); return 0; } p += 4; mmu_logging = get_long (p) & 1; p += 4; mmu_callback = get_long (p); p += 4; mmu_regs = get_long (p); p += 4; if (mode == 3) { int off; uaecptr addr = get_long (parm2 + 4); if (!mmu_enabled) return 0; off = addr >> MMU_PAGE_SHIFT; mn = mmunl[off]; while (mn) { if (mn->mmubank->p_addr == parm2) { getmmubank(mn->mmubank, parm2); if (mmu_logging) console_out_f (_T("MMU: bank update %08X: %08X - %08X %08X\n"), mn->mmubank->flags, mn->mmubank->addr, mn->mmubank->len + mn->mmubank->addr, mn->mmubank->remap); } mn = mn->next; } return 1; } mmu_slots = 1 << ((currprefs.address_space_24 ? 24 : 32) - MMU_PAGE_SHIFT); mmunl = xcalloc (struct mmunode*, mmu_slots); size = 1; p2 = get_long (p); while (get_long (p2) != 0xffffffff) { p2 += 16; size++; } p = banks = get_long (p); snptr = mmubanks = xmalloc (struct mmudata, size); for (;;) { int off; if (getmmubank(snptr, p)) break; p += 16; off = snptr->addr >> MMU_PAGE_SHIFT; if (mmunl[off] == NULL) { mn = mmunl[off] = xcalloc (struct mmunode, 1); } else { mn = mmunl[off]; while (mn->next) mn = mn->next; mn = mn->next = xcalloc (struct mmunode, 1); } mn->mmubank = snptr; snptr++; } initialize_memwatch (1); console_out_f (_T("MMU: enabled, %d banks, CB=%08X S=%08X BNK=%08X SF=%08X, %d*%d\n"), size - 1, mmu_callback, parm, banks, mmu_regs, mmu_slots, 1 << MMU_PAGE_SHIFT); set_special (SPCFLAG_BRK); return 1; } void debug_parser (const TCHAR *cmd, TCHAR *out, uae_u32 outsize) { TCHAR empty[2] = { 0 }; TCHAR *input = my_strdup (cmd); if (out == NULL || outsize == 0) setconsolemode (empty, 1); else setconsolemode (out, outsize); debug_line (input); setconsolemode (NULL, 0); xfree (input); } fs-uae-2.2.3+dfsg/src/scsi.cpp0000644000175000017500000000652712162366655016323 0ustar glaubitzglaubitz/* * UAE - The Un*x Amiga Emulator * * SCSI emulation (not uaescsi.device) * * Copyright 2007 Toni Wilen * */ #include "sysconfig.h" #include "sysdeps.h" #include "options.h" #include "scsi.h" #include "filesys.h" #include "blkdev.h" static int outcmd[] = { 0x0a, 0x2a, 0x2f, 0xaa, -1 }; static int incmd[] = { 0x03, 0x08, 0x12, 0x1a, 0x25, 0x28, 0x37, 0x42, 0x43, 0xa8, -1 }; static int nonecmd[] = { 0x00, 0x35, -1 }; int scsi_data_dir(struct scsi_data *sd) { int i; uae_u8 cmd; cmd = sd->cmd[0]; for (i = 0; outcmd[i] >= 0; i++) { if (cmd == outcmd[i]) { return 1; } } for (i = 0; incmd[i] >= 0; i++) { if (cmd == incmd[i]) { return -1; } } for (i = 0; nonecmd[i] >= 0; i++) { if (cmd == nonecmd[i]) { return 0; } } write_log (_T("SCSI command %02X, no direction specified (IN?)!\n"), sd->cmd[0]); return -2; } void scsi_emulate_cmd(struct scsi_data *sd) { sd->status = 0; if (sd->cmd[0] == 0x03) { /* REQUEST SENSE */ int len = sd->buffer[4]; memset (sd->buffer, 0, len); memcpy (sd->buffer, sd->sense, sd->sense_len > len ? len : sd->sense_len); sd->data_len = len; } else if (sd->nativescsiunit < 0) { sd->status = scsi_emulate(&sd->hfd->hfd, sd->hfd, sd->cmd, sd->len, sd->buffer, &sd->data_len, sd->reply, &sd->reply_len, sd->sense, &sd->sense_len); if (sd->status == 0) { if (sd->reply_len > 0) { memset(sd->buffer, 0, 256); memcpy(sd->buffer, sd->reply, sd->reply_len); } } } else { struct amigascsi as; memset(sd->sense, 0, 256); memset(&as, 0, sizeof as); memcpy (&as.cmd, sd->cmd, sd->len); as.flags = 2 | 1; if (sd->direction > 0) as.flags &= ~1; as.sense_len = 32; as.cmd_len = sd->len; as.data = sd->buffer; as.len = sd->direction < 0 ? DEVICE_SCSI_BUFSIZE : sd->data_len; sys_command_scsi_direct_native(sd->nativescsiunit, &as); sd->status = as.status; sd->data_len = as.len; if (sd->status) { sd->direction = 0; sd->data_len = 0; memcpy(sd->sense, as.sensedata, as.sense_len); } } sd->offset = 0; } struct scsi_data *scsi_alloc(int id, struct hd_hardfiledata *hfd) { struct scsi_data *sd = xcalloc (struct scsi_data, 1); sd->hfd = hfd; sd->id = id; sd->nativescsiunit = -1; return sd; } struct scsi_data *scsi_alloc_native(int id, int nativeunit) { struct scsi_data *sd; if (!sys_command_open (nativeunit)) { write_log (_T("SCSI: native scsi unit %d failed to open\n"), nativeunit); return NULL; } sd = xcalloc (struct scsi_data, 1); sd->id = id; sd->nativescsiunit = nativeunit; return sd; } void scsi_reset(void) { //device_func_init (DEVICE_TYPE_SCSI); } void scsi_free(struct scsi_data *sd) { if (!sd) return; if (sd->nativescsiunit >= 0) { sys_command_close (sd->nativescsiunit); } xfree(sd); } void scsi_start_transfer(struct scsi_data *sd, int len) { sd->len = len; sd->offset = 0; } int scsi_send_data(struct scsi_data *sd, uae_u8 b) { if (sd->direction) { if (sd->offset >= SCSI_DATA_BUFFER_SIZE) { write_log (_T("SCSI data buffer overflow!\n")); return 0; } sd->buffer[sd->offset++] = b; } else { if (sd->offset >= 16) { write_log (_T("SCSI command buffer overflow!\n")); return 0; } sd->cmd[sd->offset++] = b; } if (sd->offset == sd->len) return 1; return 0; } int scsi_receive_data(struct scsi_data *sd, uae_u8 *b) { *b = sd->buffer[sd->offset++]; if (sd->offset == sd->len) return 1; return 0; } fs-uae-2.2.3+dfsg/src/inputdevice.cpp0000644000175000017500000054704212162366654017702 0ustar glaubitzglaubitz/* * UAE - The Un*x Amiga Emulator * * joystick/mouse emulation * * Copyright 2001-2012 Toni Wilen * * new fetures: * - very configurable (and very complex to configure :) * - supports multiple native input devices (joysticks and mice) * - supports mapping joystick/mouse buttons to keys and vice versa * - joystick mouse emulation (supports both ports) * - supports parallel port joystick adapter * - full cd32 pad support (supports both ports) * - fully backward compatible with old joystick/mouse configuration * */ //#define DONGLE_DEBUG #include "sysconfig.h" #include "sysdeps.h" #include "options.h" #include "keyboard.h" #include "inputdevice.h" #include "inputrecord.h" #include "keybuf.h" #include "custom.h" #include "xwin.h" #include "drawing.h" #include "uae/memory.h" #include "events.h" #include "newcpu.h" #include "uae.h" #include "picasso96.h" #include "catweasel.h" #include "debug.h" #include "ar.h" #include "gui.h" #include "disk.h" #include "audio.h" #include "sound.h" #include "savestate.h" #include "arcadia.h" #include "zfile.h" #include "cia.h" #include "autoconf.h" #ifdef RETROPLATFORM #include "rp.h" #endif #include "dongle.h" #include "cdtv.h" extern int bootrom_header, bootrom_items; // 01 = host events // 02 = joystick // 04 = cia buttons // 16 = potgo // 32 = vsync int inputdevice_logging = 0; extern int tablet_log; #define ID_FLAG_CANRELEASE 0x1000 #define ID_FLAG_TOGGLED 0x2000 #define ID_FLAG_CUSTOMEVENT_TOGGLED1 0x4000 #define ID_FLAG_CUSTOMEVENT_TOGGLED2 0x8000 #define ID_FLAG_SAVE_MASK_CONFIG 0x000000ff #define ID_FLAG_SAVE_MASK_QUALIFIERS ID_FLAG_QUALIFIER_MASK #define ID_FLAG_SAVE_MASK_FULL (ID_FLAG_SAVE_MASK_CONFIG | ID_FLAG_SAVE_MASK_QUALIFIERS) #define IE_INVERT 0x80 #define IE_CDTV 0x100 #define INPUTEVENT_JOY1_CD32_FIRST INPUTEVENT_JOY1_CD32_PLAY #define INPUTEVENT_JOY2_CD32_FIRST INPUTEVENT_JOY2_CD32_PLAY #define INPUTEVENT_JOY1_CD32_LAST INPUTEVENT_JOY1_CD32_BLUE #define INPUTEVENT_JOY2_CD32_LAST INPUTEVENT_JOY2_CD32_BLUE /* event masks */ #define AM_KEY 1 /* keyboard allowed */ #define AM_JOY_BUT 2 /* joystick buttons allowed */ #define AM_JOY_AXIS 4 /* joystick axis allowed */ #define AM_MOUSE_BUT 8 /* mouse buttons allowed */ #define AM_MOUSE_AXIS 16 /* mouse direction allowed */ #define AM_AF 32 /* supports autofire */ #define AM_INFO 64 /* information data for gui */ #define AM_DUMMY 128 /* placeholder */ #define AM_CUSTOM 256 /* custom event */ #define AM_K (AM_KEY|AM_JOY_BUT|AM_MOUSE_BUT|AM_AF) /* generic button/switch */ #define AM_KK (AM_KEY|AM_JOY_BUT|AM_MOUSE_BUT) #define JOYMOUSE_CDTV 8 #define DEFEVENT(A, B, C, D, E, F) {_T(#A), B, C, D, E, F }, static struct inputevent events[] = { {0, 0, AM_K,0,0,0}, #include "inputevents.def" {0, 0, 0, 0, 0, 0} }; #undef DEFEVENT static int sublevdir[2][MAX_INPUT_SUB_EVENT]; static const int slotorder1[] = { 0, 1, 2, 3, 4, 5, 6, 7 }; static const int slotorder2[] = { 8, 1, 2, 3, 4, 5, 6, 7 }; struct uae_input_device2 { uae_u32 buttonmask; int states[MAX_INPUT_DEVICE_EVENTS / 2]; }; static struct uae_input_device2 joysticks2[MAX_INPUT_DEVICES]; static struct uae_input_device2 mice2[MAX_INPUT_DEVICES]; static uae_u8 scancodeused[MAX_INPUT_DEVICES][256]; static uae_u64 qualifiers, qualifiers_r; static uae_s16 *qualifiers_evt[MAX_INPUT_QUALIFIERS]; // fire/left mouse button pullup resistors enabled? static bool mouse_pullup = true; static int joymodes[MAX_JPORTS]; static int *joyinputs[MAX_JPORTS]; static int input_acquired; static int testmode, testmode_read, testmode_toggle; struct teststore { int testmode_type; int testmode_num; int testmode_wtype; int testmode_wnum; int testmode_state; int testmode_max; }; #define TESTMODE_MAX 2 static int testmode_count; static struct teststore testmode_data[TESTMODE_MAX]; static struct teststore testmode_wait[TESTMODE_MAX]; static int bouncy; static signed long bouncy_cycles; static int handle_input_event (int nr, int state, int max, int autofire, bool canstoprecord, bool playbackevent); static struct inputdevice_functions idev[IDTYPE_MAX]; static int isdevice (struct uae_input_device *id) { int i, j; for (i = 0; i < MAX_INPUT_DEVICE_EVENTS; i++) { for (j = 0; j < MAX_INPUT_SUB_EVENT; j++) { if (id->eventid[i][j] > 0) return 1; } } return 0; } int inputdevice_uaelib (const TCHAR *s, const TCHAR *parm) { int i; for (i = 1; events[i].name; i++) { if (!_tcscmp (s, events[i].confname)) { handle_input_event (i, _tstol (parm), 1, 0, false, false); return 1; } } return 0; } static struct uae_input_device *joysticks; static struct uae_input_device *mice; static struct uae_input_device *keyboards; static struct uae_input_device *internalevents; static struct uae_input_device_kbr_default *keyboard_default, **keyboard_default_table; #define KBR_DEFAULT_MAP_FIRST 0 #define KBR_DEFAULT_MAP_LAST 5 #define KBR_DEFAULT_MAP_CD32_FIRST 6 #define KBR_DEFAULT_MAP_CD32_LAST 8 #define KBR_DEFAULT_MAP_NP 0 #define KBR_DEFAULT_MAP_CK 1 #define KBR_DEFAULT_MAP_SE 2 #define KBR_DEFAULT_MAP_NP3 3 #define KBR_DEFAULT_MAP_CK3 4 #define KBR_DEFAULT_MAP_SE3 5 #define KBR_DEFAULT_MAP_CD32_NP 6 #define KBR_DEFAULT_MAP_CD32_CK 7 #define KBR_DEFAULT_MAP_CD32_SE 8 #define KBR_DEFAULT_MAP_XA1 9 #define KBR_DEFAULT_MAP_XA2 10 #define KBR_DEFAULT_MAP_ARCADIA 11 #define KBR_DEFAULT_MAP_ARCADIA_XA 12 #define KBR_DEFAULT_MAP_CDTV 13 static int **keyboard_default_kbmaps; static int mouse_axis[MAX_INPUT_DEVICES][MAX_INPUT_DEVICE_EVENTS]; static int oldm_axis[MAX_INPUT_DEVICES][MAX_INPUT_DEVICE_EVENTS]; #define MOUSE_AXIS_TOTAL 4 static uae_s16 mouse_x[MAX_JPORTS], mouse_y[MAX_JPORTS]; static uae_s16 mouse_delta[MAX_JPORTS][MOUSE_AXIS_TOTAL]; static uae_s16 mouse_deltanoreset[MAX_JPORTS][MOUSE_AXIS_TOTAL]; static int joybutton[MAX_JPORTS]; static int joydir[MAX_JPORTS]; static int joydirpot[MAX_JPORTS][2]; static uae_s16 mouse_frame_x[MAX_JPORTS], mouse_frame_y[MAX_JPORTS]; static int mouse_port[NORMAL_JPORTS]; static int cd32_shifter[NORMAL_JPORTS]; static int cd32_pad_enabled[NORMAL_JPORTS]; static int parport_joystick_enabled; static int oldmx[MAX_JPORTS], oldmy[MAX_JPORTS]; static int oleft[MAX_JPORTS], oright[MAX_JPORTS], otop[MAX_JPORTS], obot[MAX_JPORTS]; static int horizclear[MAX_JPORTS], vertclear[MAX_JPORTS]; uae_u16 potgo_value; static int pot_cap[NORMAL_JPORTS][2]; static uae_u8 pot_dat[NORMAL_JPORTS][2]; static int pot_dat_act[NORMAL_JPORTS][2]; static int analog_port[NORMAL_JPORTS][2]; static int digital_port[NORMAL_JPORTS][2]; static int lightpen; #define POTDAT_DELAY_PAL 8 #define POTDAT_DELAY_NTSC 7 static int use_joysticks[MAX_INPUT_DEVICES]; static int use_mice[MAX_INPUT_DEVICES]; static int use_keyboards[MAX_INPUT_DEVICES]; #define INPUT_QUEUE_SIZE 16 struct input_queue_struct { int evt, storedstate, state, max, linecnt, nextlinecnt; TCHAR *custom; }; static struct input_queue_struct input_queue[INPUT_QUEUE_SIZE]; uae_u8 *restore_input (uae_u8 *src) { restore_u32 (); for (int i = 0; i < 2; i++) { for (int j = 0; j < 2; j++) { pot_cap[i][j] = restore_u16 (); } } return src; } uae_u8 *save_input (int *len, uae_u8 *dstptr) { uae_u8 *dstbak, *dst; if (dstptr) dstbak = dst = dstptr; else dstbak = dst = xmalloc (uae_u8, 1000); save_u32 (0); for (int i = 0; i < 2; i++) { for (int j = 0; j < 2; j++) { save_u16 (pot_cap[i][j]); } } *len = dst - dstbak; return dstbak; } static void freejport (struct uae_prefs *dst, int num) { memset (&dst->jports[num], 0, sizeof (struct jport)); dst->jports[num].id = -1; } static void copyjport (const struct uae_prefs *src, struct uae_prefs *dst, int num) { if (!src) return; freejport (dst, num); _tcscpy (dst->jports[num].configname, src->jports[num].configname); _tcscpy (dst->jports[num].name, src->jports[num].name); dst->jports[num].id = src->jports[num].id; dst->jports[num].mode = src->jports[num].mode; dst->jports[num].autofire = src->jports[num].autofire; } static void out_config (struct zfile *f, int id, int num, TCHAR *s1, TCHAR *s2) { TCHAR tmp[MAX_DPATH]; _stprintf (tmp, _T("input.%d.%s%d"), id, s1, num); cfgfile_write_str (f, tmp, s2); } static bool write_config_head (struct zfile *f, int idnum, int devnum, TCHAR *name, struct uae_input_device *id, struct inputdevice_functions *idf) { TCHAR tmp2[CONFIG_BLEN]; if (idnum == GAMEPORT_INPUT_SETTINGS) { if (!isdevice (id)) return false; if (!id->enabled) return false; } TCHAR *s = NULL; if (id->name) s = id->name; else if (devnum < idf->get_num ()) s = idf->get_friendlyname (devnum); if (s) { _stprintf (tmp2, _T("input.%d.%s.%d.friendlyname"), idnum + 1, name, devnum); cfgfile_write_str (f, tmp2, s); } s = NULL; if (id->configname) s = id->configname; else if (devnum < idf->get_num ()) s = idf->get_uniquename (devnum); if (s) { _stprintf (tmp2, _T("input.%d.%s.%d.name"), idnum + 1, name, devnum); cfgfile_write_str (f, tmp2, s); } if (!isdevice (id)) { _stprintf (tmp2, _T("input.%d.%s.%d.empty"), idnum + 1, name, devnum); cfgfile_write_bool (f, tmp2, true); if (id->enabled) { _stprintf (tmp2, _T("input.%d.%s.%d.disabled"), idnum + 1, name, devnum); cfgfile_write (f, tmp2, _T("%d"), id->enabled ? 0 : 1); } return false; } if (idnum == GAMEPORT_INPUT_SETTINGS) { _stprintf (tmp2, _T("input.%d.%s.%d.custom"), idnum + 1, name, devnum); cfgfile_write_bool (f, tmp2, true); } else { _stprintf (tmp2, _T("input.%d.%s.%d.empty"), idnum + 1, name, devnum); cfgfile_write_bool (f, tmp2, false); _stprintf (tmp2, _T("input.%d.%s.%d.disabled"), idnum + 1, name, devnum); cfgfile_write_bool (f, tmp2, id->enabled ? false : true); } return true; } static bool write_slot (TCHAR *p, struct uae_input_device *uid, int i, int j) { bool ok = false; if (i < 0 || j < 0) { _tcscpy (p, _T("NULL")); return false; } uae_u64 flags = uid->flags[i][j]; if (uid->custom[i][j] && _tcslen (uid->custom[i][j]) > 0) { _stprintf (p, _T("'%s'.%d"), uid->custom[i][j], flags & ID_FLAG_SAVE_MASK_CONFIG); ok = true; } else if (uid->eventid[i][j] > 0) { _stprintf (p, _T("%s.%d"), events[uid->eventid[i][j]].confname, flags & ID_FLAG_SAVE_MASK_CONFIG); ok = true; } else { _tcscpy (p, _T("NULL")); } if (ok && (flags & ID_FLAG_SAVE_MASK_QUALIFIERS)) { TCHAR *p2 = p + _tcslen (p); *p2++ = '.'; for (int i = 0; i < MAX_INPUT_QUALIFIERS * 2; i++) { if ((ID_FLAG_QUALIFIER1 << i) & flags) { if (i & 1) _stprintf (p2, _T("%c"), 'a' + i / 2); else _stprintf (p2, _T("%c"), 'A' + i / 2); p2++; } } } return ok; } static struct inputdevice_functions *getidf (int devnum); static void kbrlabel (TCHAR *s) { while (*s) { *s = _totupper (*s); if (*s == ' ') *s = '_'; s++; } } static void write_config2 (struct zfile *f, int idnum, int i, int offset, const TCHAR *extra, struct uae_input_device *id) { TCHAR tmp2[CONFIG_BLEN], tmp3[CONFIG_BLEN], *p; int evt, got, j, k; TCHAR *custom; const int *slotorder; int io = i + offset; tmp2[0] = 0; p = tmp2; got = 0; slotorder = slotorder1; // if gameports non-custom mapping in slot0 -> save slot8 as slot0 if (id->port[io][0] && !(id->flags[io][0] & ID_FLAG_GAMEPORTSCUSTOM_MASK)) slotorder = slotorder2; for (j = 0; j < MAX_INPUT_SUB_EVENT; j++) { evt = id->eventid[io][slotorder[j]]; custom = id->custom[io][slotorder[j]]; if (custom == NULL && evt <= 0) { for (k = j + 1; k < MAX_INPUT_SUB_EVENT; k++) { if ((id->port[io][k] == 0 || id->port[io][k] == MAX_JPORTS + 1) && (id->eventid[io][slotorder[k]] > 0 || id->custom[io][slotorder[k]] != NULL)) break; } if (k == MAX_INPUT_SUB_EVENT) break; } if (p > tmp2) { *p++ = ','; *p = 0; } bool ok = write_slot (p, id, io, slotorder[j]); p += _tcslen (p); if (ok) { if (id->port[io][slotorder[j]] > 0 && id->port[io][slotorder[j]] < MAX_JPORTS + 1) { int pnum = id->port[io][slotorder[j]] - 1; _stprintf (p, _T(".%d"), pnum); p += _tcslen (p); if (idnum != GAMEPORT_INPUT_SETTINGS && j == 0 && id->port[io][SPARE_SUB_EVENT] && slotorder == slotorder1) { *p++ = '.'; write_slot (p, id, io, SPARE_SUB_EVENT); p += _tcslen (p); } } } } if (p > tmp2) { _stprintf (tmp3, _T("input.%d.%s%d"), idnum + 1, extra, i); cfgfile_write_str (f, tmp3, tmp2); } } static void write_kbr_config (struct zfile *f, int idnum, int devnum, struct uae_input_device *kbr, struct inputdevice_functions *idf) { TCHAR tmp1[CONFIG_BLEN], tmp2[CONFIG_BLEN], tmp3[CONFIG_BLEN], tmp4[CONFIG_BLEN], tmp5[CONFIG_BLEN], *p; int i, j, k, evt, skip; const int *slotorder; if (!keyboard_default) return; if (!write_config_head (f, idnum, devnum, _T("keyboard"), kbr, idf)) return; i = 0; while (i < MAX_INPUT_DEVICE_EVENTS && kbr->extra[i] >= 0) { slotorder = slotorder1; // if gameports non-custom mapping in slot0 -> save slot4 as slot0 if (kbr->port[i][0] && !(kbr->flags[i][0] & ID_FLAG_GAMEPORTSCUSTOM_MASK)) slotorder = slotorder2; skip = 0; k = 0; while (keyboard_default[k].scancode >= 0) { if (keyboard_default[k].scancode == kbr->extra[i]) { skip = 1; for (j = 0; j < MAX_INPUT_SUB_EVENT; j++) { if (keyboard_default[k].node[j].evt != 0) { if (keyboard_default[k].node[j].evt != kbr->eventid[i][slotorder[j]] || keyboard_default[k].node[j].flags != (kbr->flags[i][slotorder[j]] & ID_FLAG_SAVE_MASK_FULL)) skip = 0; } else if ((kbr->flags[i][slotorder[j]] & ID_FLAG_SAVE_MASK_FULL) != 0 || kbr->eventid[i][slotorder[j]] > 0) { skip = 0; } } break; } k++; } bool isdefaultspare = kbr->port[i][SPARE_SUB_EVENT] && keyboard_default[k].node[0].evt == kbr->eventid[i][SPARE_SUB_EVENT] && keyboard_default[k].node[0].flags == (kbr->flags[i][SPARE_SUB_EVENT] & ID_FLAG_SAVE_MASK_FULL); if (kbr->port[i][0] > 0 && !(kbr->flags[i][0] & ID_FLAG_GAMEPORTSCUSTOM_MASK) && (kbr->eventid[i][1] <= 0 && kbr->eventid[i][2] <= 0 && kbr->eventid[i][3] <= 0) && (kbr->port[i][SPARE_SUB_EVENT] == 0 || isdefaultspare)) skip = 1; if (kbr->eventid[i][0] == 0 && (kbr->flags[i][0] & ID_FLAG_SAVE_MASK_FULL) == 0 && keyboard_default[k].scancode < 0) skip = 1; if (skip) { i++; continue; } tmp2[0] = 0; p = tmp2; for (j = 0; j < MAX_INPUT_SUB_EVENT; j++) { TCHAR *custom = kbr->custom[i][slotorder[j]]; evt = kbr->eventid[i][slotorder[j]]; if (custom == NULL && evt <= 0) { for (k = j + 1; k < MAX_INPUT_SUB_EVENT; k++) { if (kbr->eventid[i][slotorder[k]] > 0 || kbr->custom[i][slotorder[k]] != NULL) break; } if (k == MAX_INPUT_SUB_EVENT) break; } if (p > tmp2) { *p++ = ','; *p = 0; } bool ok = write_slot (p, kbr, i, slotorder[j]); p += _tcslen (p); if (ok) { // save port number + SPARE SLOT if needed if (kbr->port[i][slotorder[j]] > 0 && (kbr->flags[i][slotorder[j]] & ID_FLAG_GAMEPORTSCUSTOM_MASK)) { _stprintf (p, _T(".%d"), kbr->port[i][slotorder[j]] - 1); p += _tcslen (p); if (idnum != GAMEPORT_INPUT_SETTINGS && j == 0 && kbr->port[i][SPARE_SUB_EVENT] && !isdefaultspare && slotorder == slotorder1) { *p++ = '.'; write_slot (p, kbr, i, SPARE_SUB_EVENT); p += _tcslen (p); } } } } idf->get_widget_type (devnum, i, tmp5, NULL); _stprintf (tmp3, _T("%d%s%s"), kbr->extra[i], tmp5[0] ? _T(".") : _T(""), tmp5[0] ? tmp5 : _T("")); kbrlabel (tmp3); _stprintf (tmp1, _T("keyboard.%d.button.%s"), devnum, tmp3); _stprintf (tmp4, _T("input.%d.%s"), idnum + 1, tmp1); cfgfile_write_str (f, tmp4, tmp2[0] ? tmp2 : _T("NULL")); i++; } } static void write_config (struct zfile *f, int idnum, int devnum, TCHAR *name, struct uae_input_device *id, struct inputdevice_functions *idf) { TCHAR tmp1[MAX_DPATH]; int i; if (!write_config_head (f, idnum, devnum, name, id, idf)) return; _stprintf (tmp1, _T("%s.%d.axis."), name, devnum); for (i = 0; i < ID_AXIS_TOTAL; i++) write_config2 (f, idnum, i, ID_AXIS_OFFSET, tmp1, id); _stprintf (tmp1, _T("%s.%d.button.") ,name, devnum); for (i = 0; i < ID_BUTTON_TOTAL; i++) write_config2 (f, idnum, i, ID_BUTTON_OFFSET, tmp1, id); } static const TCHAR *kbtypes[] = { _T("amiga"), _T("pc"), NULL }; void write_inputdevice_config (struct uae_prefs *p, struct zfile *f) { int i, id; cfgfile_write (f, _T("input.config"), _T("%d"), p->input_selected_setting == GAMEPORT_INPUT_SETTINGS ? 0 : p->input_selected_setting + 1); cfgfile_write (f, _T("input.joymouse_speed_analog"), _T("%d"), p->input_joymouse_multiplier); cfgfile_write (f, _T("input.joymouse_speed_digital"), _T("%d"), p->input_joymouse_speed); cfgfile_write (f, _T("input.joymouse_deadzone"), _T("%d"), p->input_joymouse_deadzone); cfgfile_write (f, _T("input.joystick_deadzone"), _T("%d"), p->input_joystick_deadzone); cfgfile_write (f, _T("input.analog_joystick_multiplier"), _T("%d"), p->input_analog_joystick_mult); cfgfile_write (f, _T("input.analog_joystick_offset"), _T("%d"), p->input_analog_joystick_offset); cfgfile_write (f, _T("input.mouse_speed"), _T("%d"), p->input_mouse_speed); cfgfile_write (f, _T("input.autofire_speed"), _T("%d"), p->input_autofire_linecnt); cfgfile_dwrite_str (f, _T("input.keyboard_type"), kbtypes[p->input_keyboard_type]); cfgfile_dwrite (f, _T("input.contact_bounce"), _T("%d"), p->input_contact_bounce); for (id = 0; id < MAX_INPUT_SETTINGS; id++) { TCHAR tmp[MAX_DPATH]; if (id < GAMEPORT_INPUT_SETTINGS) { _stprintf (tmp, _T("input.%d.name"), id + 1); cfgfile_dwrite_str (f, tmp, p->input_config_name[id]); } for (i = 0; i < MAX_INPUT_DEVICES; i++) write_config (f, id, i, _T("joystick"), &p->joystick_settings[id][i], &idev[IDTYPE_JOYSTICK]); for (i = 0; i < MAX_INPUT_DEVICES; i++) write_config (f, id, i, _T("mouse"), &p->mouse_settings[id][i], &idev[IDTYPE_MOUSE]); for (i = 0; i < MAX_INPUT_DEVICES; i++) write_kbr_config (f, id, i, &p->keyboard_settings[id][i], &idev[IDTYPE_KEYBOARD]); write_config (f, id, 0, _T("internal"), &p->internalevent_settings[id][0], &idev[IDTYPE_INTERNALEVENT]); } } static uae_u64 getqual (const TCHAR **pp) { const TCHAR *p = *pp; uae_u64 mask = 0; while ((*p >= 'A' && *p <= 'Z') || (*p >= 'a' && *p <= 'z')) { bool press = (*p >= 'A' && *p <= 'Z'); int shift, inc; if (press) { shift = *p - 'A'; inc = 0; } else { shift = *p - 'a'; inc = 1; } mask |= ID_FLAG_QUALIFIER1 << (shift * 2 + inc); p++; } while (*p != 0 && *p !='.' && *p != ',') p++; if (*p == '.' || *p == ',') p++; *pp = p; return mask; } static int getnum (const TCHAR **pp) { const TCHAR *p = *pp; int v; if (!_tcsnicmp (p, _T("false"), 5)) v = 0; if (!_tcsnicmp (p, _T("true"), 4)) v = 1; else v = _tstol (p); while (*p != 0 && *p !='.' && *p != ',') p++; if (*p == '.' || *p == ',') p++; *pp = p; return v; } static TCHAR *getstring (const TCHAR **pp) { int i; static TCHAR str[CONFIG_BLEN]; const TCHAR *p = *pp; bool quoteds = false; bool quotedd = false; if (*p == 0) return 0; i = 0; while (*p != 0 && i < 1000 - 1) { if (*p == '\"') quotedd = quotedd ? false : true; if (*p == '\'') quoteds = quoteds ? false : true; if (!quotedd && !quoteds) { if (*p == '.' || *p == ',') break; } str[i++] = *p++; } if (*p == '.' || *p == ',') p++; str[i] = 0; *pp = p; return str; } static void reset_inputdevice_settings (struct uae_input_device *uid) { for (int l = 0; l < MAX_INPUT_DEVICE_EVENTS; l++) { for (int i = 0; i < MAX_INPUT_SUB_EVENT_ALL; i++) { uid->eventid[l][i] = 0; uid->flags[l][i] = 0; xfree (uid->custom[l][i]); uid->custom[l][i] = NULL; } } } static void reset_inputdevice_slot (struct uae_prefs *prefs, int slot) { for (int m = 0; m < MAX_INPUT_DEVICES; m++) { reset_inputdevice_settings (&prefs->joystick_settings[slot][m]); reset_inputdevice_settings (&prefs->mouse_settings[slot][m]); reset_inputdevice_settings (&prefs->keyboard_settings[slot][m]); } } void reset_inputdevice_config (struct uae_prefs *prefs) { for (int i = 0; i< MAX_INPUT_SETTINGS; i++) reset_inputdevice_slot (prefs, i); } static void set_kbr_default_event (struct uae_input_device *kbr, struct uae_input_device_kbr_default *trans, int num) { for (int i = 0; trans[i].scancode >= 0; i++) { if (kbr->extra[num] == trans[i].scancode) { int k; for (k = 0; k < MAX_INPUT_SUB_EVENT; k++) { if (kbr->eventid[num][k] == 0) break; } if (k == MAX_INPUT_SUB_EVENT) { write_log (_T("corrupt default keyboard mappings\n")); return; } int l = 0; while (k < MAX_INPUT_SUB_EVENT && trans[i].node[l].evt) { int evt = trans[i].node[l].evt; if (evt < 0 || evt >= INPUTEVENT_SPC_LAST) gui_message(_T("invalid event in default keyboard table!")); kbr->eventid[num][k] = evt; kbr->flags[num][k] = trans[i].node[l].flags; l++; k++; } break; } } } static void clear_id (struct uae_input_device *id) { #ifndef _DEBUG int i, j; for (i = 0; i < MAX_INPUT_DEVICE_EVENTS; i++) { for (j = 0; j < MAX_INPUT_SUB_EVENT_ALL; j++) xfree (id->custom[i][j]); } #endif TCHAR *cn = id->configname; TCHAR *n = id->name; memset (id, 0, sizeof (struct uae_input_device)); id->configname = cn; id->name = n; } static void set_kbr_default (struct uae_prefs *p, int index, int devnum, struct uae_input_device_kbr_default *trans) { int i, j; struct uae_input_device *kbr; struct inputdevice_functions *id = &idev[IDTYPE_KEYBOARD]; uae_u32 scancode; if (!trans) return; for (j = 0; j < MAX_INPUT_DEVICES; j++) { if (devnum >= 0 && devnum != j) continue; kbr = &p->keyboard_settings[index][j]; for (i = 0; i < MAX_INPUT_DEVICE_EVENTS; i++) { clear_id (kbr); kbr->extra[i] = -1; } if (j < id->get_num ()) { if (input_get_default_keyboard (j)) kbr->enabled = 1; for (i = 0; i < id->get_widget_num (j); i++) { id->get_widget_type (j, i, 0, &scancode); kbr->extra[i] = scancode; set_kbr_default_event (kbr, trans, i); } } } } static void inputdevice_default_kb (struct uae_prefs *p, int num) { if (num == GAMEPORT_INPUT_SETTINGS) { if (p->jports[0].id != JPORT_CUSTOM || p->jports[1].id != JPORT_CUSTOM) reset_inputdevice_slot (p, num); } set_kbr_default (p, num, -1, keyboard_default); } static void inputdevice_default_kb_all (struct uae_prefs *p) { for (int i = 0; i < MAX_INPUT_SETTINGS; i++) inputdevice_default_kb (p, i); } static bool read_slot (TCHAR *parm, int num, int joystick, int button, struct uae_input_device *id, int keynum, int subnum, struct inputevent *ie, uae_u64 flags, int port, TCHAR *custom) { int mask; if (custom == NULL && ie->name == NULL) { if (!_tcscmp (parm, _T("NULL"))) { if (joystick < 0) { id->eventid[keynum][subnum] = 0; id->flags[keynum][subnum] = 0; } else if (button) { id->eventid[num + ID_BUTTON_OFFSET][subnum] = 0; id->flags[num + ID_BUTTON_OFFSET][subnum] = 0; } else { id->eventid[num + ID_AXIS_OFFSET][subnum] = 0; id->flags[num + ID_AXIS_OFFSET][subnum] = 0; } } return false; } if (custom) ie = &events[INPUTEVENT_SPC_CUSTOM_EVENT]; if (joystick < 0) { if (!(ie->allow_mask & AM_K)) return false; id->eventid[keynum][subnum] = ie - events; id->flags[keynum][subnum] = flags; id->port[keynum][subnum] = port; xfree (id->custom[keynum][subnum]); id->custom[keynum][subnum] = custom; } else if (button) { if (joystick) mask = AM_JOY_BUT; else mask = AM_MOUSE_BUT; if (!(ie->allow_mask & mask)) return false; id->eventid[num + ID_BUTTON_OFFSET][subnum] = ie - events; id->flags[num + ID_BUTTON_OFFSET][subnum] = flags; id->port[num + ID_BUTTON_OFFSET][subnum] = port; xfree (id->custom[num + ID_BUTTON_OFFSET][subnum]); id->custom[num + ID_BUTTON_OFFSET][subnum] = custom; } else { if (joystick) mask = AM_JOY_AXIS; else mask = AM_MOUSE_AXIS; if (!(ie->allow_mask & mask)) return false; id->eventid[num + ID_AXIS_OFFSET][subnum] = ie - events; id->flags[num + ID_AXIS_OFFSET][subnum] = flags; id->port[num + ID_AXIS_OFFSET][subnum] = port; xfree (id->custom[num + ID_AXIS_OFFSET][subnum]); id->custom[num + ID_AXIS_OFFSET][subnum] = custom; } return true; } static struct inputevent *readevent (const TCHAR *name, TCHAR **customp) { int i = 1; while (events[i].name) { if (!_tcscmp (events[i].confname, name)) return &events[i]; i++; } if (_tcslen (name) > 2 && name[0] == '\'' && name[_tcslen (name) - 1] == '\'') { TCHAR *custom = my_strdup (name + 1); custom[_tcslen (custom) - 1] = 0; *customp = custom; } return &events[0]; } void read_inputdevice_config (struct uae_prefs *pr, const TCHAR *option, TCHAR *value) { struct uae_input_device *id = 0; struct inputevent *ie; int devnum, num, button, joystick, subnum, idnum, keynum; const TCHAR *p; TCHAR *p2, *custom; option += 6; /* "input." */ p = getstring (&option); if (!strcasecmp (p, _T("config"))) { pr->input_selected_setting = _tstol (value) - 1; if (pr->input_selected_setting == -1) pr->input_selected_setting = GAMEPORT_INPUT_SETTINGS; if (pr->input_selected_setting < 0 || pr->input_selected_setting > MAX_INPUT_SETTINGS) pr->input_selected_setting = 0; } if (!strcasecmp (p, _T("joymouse_speed_analog"))) pr->input_joymouse_multiplier = _tstol (value); if (!strcasecmp (p, _T("joymouse_speed_digital"))) pr->input_joymouse_speed = _tstol (value); if (!strcasecmp (p, _T("joystick_deadzone"))) pr->input_joystick_deadzone = _tstol (value); if (!strcasecmp (p, _T("joymouse_deadzone"))) pr->input_joymouse_deadzone = _tstol (value); if (!strcasecmp (p, _T("mouse_speed"))) pr->input_mouse_speed = _tstol (value); if (!strcasecmp (p, _T("autofire_speed"))) pr->input_autofire_linecnt = _tstol (value); if (!strcasecmp (p, _T("analog_joystick_multiplier"))) pr->input_analog_joystick_mult = _tstol (value); if (!strcasecmp (p, _T("analog_joystick_offset"))) pr->input_analog_joystick_offset = _tstol (value); if (!strcasecmp (p, _T("keyboard_type"))) { cfgfile_strval (option, value, NULL, &pr->input_analog_joystick_offset, kbtypes, 0); keyboard_default = keyboard_default_table[pr->input_keyboard_type]; inputdevice_default_kb_all (pr); } if (!strcasecmp (p, _T("contact_bounce"))) pr->input_contact_bounce = _tstol (value); idnum = _tstol (p); if (idnum <= 0 || idnum > MAX_INPUT_SETTINGS) return; idnum--; if (!_tcscmp (option, _T("name"))) { if (idnum < GAMEPORT_INPUT_SETTINGS) _tcscpy (pr->input_config_name[idnum], value); return; } if (_tcsncmp (option, _T("mouse."), 6) == 0) { p = option + 6; } else if (_tcsncmp (option, _T("joystick."), 9) == 0) { p = option + 9; } else if (_tcsncmp (option, _T("keyboard."), 9) == 0) { p = option + 9; } else if (_tcsncmp (option, _T("internal."), 9) == 0) { p = option + 9; } else return; devnum = getnum (&p); if (devnum < 0 || devnum >= MAX_INPUT_DEVICES) return; p2 = getstring (&p); if (!p2) return; if (_tcsncmp (option, _T("mouse."), 6) == 0) { id = &pr->mouse_settings[idnum][devnum]; joystick = 0; } else if (_tcsncmp (option, _T("joystick."), 9) == 0) { id = &pr->joystick_settings[idnum][devnum]; joystick = 1; } else if (_tcsncmp (option, _T("keyboard."), 9) == 0) { id = &pr->keyboard_settings[idnum][devnum]; joystick = -1; } else if (_tcsncmp (option, _T("internal."), 9) == 0) { if (devnum > 0) return; id = &pr->internalevent_settings[idnum][devnum]; joystick = 1; } if (!id) return; if (!_tcscmp (p2, _T("name"))) { xfree (id->configname); id->configname = my_strdup (value); return; } if (!_tcscmp (p2, _T("friendlyname"))) { xfree (id->name); id->name = my_strdup (value); return; } if (!_tcscmp (p2, _T("custom"))) { int iscustom; p = value; iscustom = getnum (&p); if (idnum == GAMEPORT_INPUT_SETTINGS) { clear_id (id); if (joystick < 0) set_kbr_default (pr, idnum, devnum, keyboard_default); id->enabled = iscustom; } else { id->enabled = false; } return; } if (!_tcscmp (p2, _T("empty"))) { int empty; p = value; empty = getnum (&p); clear_id (id); if (!empty) { if (joystick < 0) set_kbr_default (pr, idnum, devnum, keyboard_default); } id->enabled = 1; if (idnum == GAMEPORT_INPUT_SETTINGS) id->enabled = 0; return; } if (!_tcscmp (p2, _T("disabled"))) { int disabled; p = value; disabled = getnum (&p); id->enabled = disabled == 0 ? 1 : 0; if (idnum == GAMEPORT_INPUT_SETTINGS) id->enabled = 0; return; } if (idnum == GAMEPORT_INPUT_SETTINGS && id->enabled == 0) return; button = 0; keynum = 0; if (joystick < 0) { num = getnum (&p); for (keynum = 0; keynum < MAX_INPUT_DEVICE_EVENTS; keynum++) { if (id->extra[keynum] == num) break; } if (keynum >= MAX_INPUT_DEVICE_EVENTS) return; } else { button = -1; if (!_tcscmp (p2, _T("axis"))) button = 0; else if(!_tcscmp (p2, _T("button"))) button = 1; if (button < 0) return; num = getnum (&p); } p = value; custom = NULL; for (subnum = 0; subnum < MAX_INPUT_SUB_EVENT; subnum++) { uae_u64 flags; int port; xfree (custom); custom = NULL; p2 = getstring (&p); if (!p2) break; ie = readevent (p2, &custom); flags = 0; port = 0; if (p[-1] == '.') flags = getnum (&p) & ID_FLAG_SAVE_MASK_CONFIG; if (p[-1] == '.') { if ((p[0] >= 'A' && p[0] <= 'Z') || (p[0] >= 'a' && p[0] <= 'z')) flags |= getqual (&p); if (p[-1] == '.') port = getnum (&p) + 1; } if (idnum == GAMEPORT_INPUT_SETTINGS && port == 0) continue; if (p[-1] == '.' && idnum != GAMEPORT_INPUT_SETTINGS) { p2 = getstring (&p); if (p2) { int flags2 = 0; if (p[-1] == '.') flags2 = getnum (&p) & ID_FLAG_SAVE_MASK_CONFIG; if (p[-1] == '.' && (p[0] >= 'A' && p[0] <= 'Z') || (p[0] >= 'a' && p[0] <= 'z')) flags |= getqual (&p); TCHAR *custom2 = NULL; struct inputevent *ie2 = readevent (p2, &custom2); read_slot (p2, num, joystick, button, id, keynum, SPARE_SUB_EVENT, ie2, flags2, MAX_JPORTS + 1, custom2); } } while (*p != 0) { if (p[-1] == ',') break; p++; } if (!read_slot (p2, num, joystick, button, id, keynum, subnum, ie, flags, port, custom)) continue; custom = NULL; } xfree (custom); } static int mouseedge_alive, mousehack_alive_cnt; static int lastmx, lastmy; static uaecptr magicmouse_ibase, magicmouse_gfxbase; static int dimensioninfo_width, dimensioninfo_height, dimensioninfo_dbl; static int vp_xoffset, vp_yoffset, mouseoffset_x, mouseoffset_y; static int tablet_maxx, tablet_maxy, tablet_data; int mousehack_alive (void) { return mousehack_alive_cnt > 0 ? mousehack_alive_cnt : 0; } static uaecptr get_base (const uae_char *name) { uaecptr v = get_long (4); addrbank *b = &get_mem_bank(v); if (!b || !b->check (v, 400) || b->flags != ABFLAG_RAM) return 0; v += 378; // liblist while (v = get_long (v)) { uae_u32 v2; uae_u8 *p; b = &get_mem_bank (v); if (!b || !b->check (v, 32) || b->flags != ABFLAG_RAM) goto fail; v2 = get_long (v + 10); // name b = &get_mem_bank (v2); if (!b || !b->check (v2, 20)) goto fail; if (b->flags != ABFLAG_ROM && b->flags != ABFLAG_RAM) return 0; p = b->xlateaddr (v2); if (!memcmp (p, name, strlen (name) + 1)) { TCHAR *s = au (name); write_log (_T("get_base('%s')=%08x\n"), s, v); xfree (s); return v; } } return 0; fail: { TCHAR *s = au (name); write_log (_T("get_base('%s') failed, invalid library list\n"), s); xfree (s); } return 0xffffffff; } static uaecptr get_intuitionbase (void) { if (magicmouse_ibase == 0xffffffff) return 0; if (magicmouse_ibase) return magicmouse_ibase; magicmouse_ibase = get_base ("intuition.library"); return magicmouse_ibase; } static uaecptr get_gfxbase (void) { if (magicmouse_gfxbase == 0xffffffff) return 0; if (magicmouse_gfxbase) return magicmouse_gfxbase; magicmouse_gfxbase = get_base ("graphics.library"); return magicmouse_gfxbase; } #define MH_E 0 #define MH_CNT 2 #define MH_MAXX 4 #define MH_MAXY 6 #define MH_MAXZ 8 #define MH_X 10 #define MH_Y 12 #define MH_Z 14 #define MH_RESX 16 #define MH_RESY 18 #define MH_MAXAX 20 #define MH_MAXAY 22 #define MH_MAXAZ 24 #define MH_AX 26 #define MH_AY 28 #define MH_AZ 30 #define MH_PRESSURE 32 #define MH_BUTTONBITS 34 #define MH_INPROXIMITY 38 #define MH_ABSX 40 #define MH_ABSY 42 #define MH_END 44 #define MH_START 4 int inputdevice_is_tablet (void) { int v; if (!uae_boot_rom) return 0; if (currprefs.input_tablet == TABLET_OFF) return 0; if (currprefs.input_tablet == TABLET_MOUSEHACK) return -1; v = is_tablet (); if (!v) return 0; if (kickstart_version < 37) return v ? -1 : 0; return v ? 1 : 0; } static uaecptr mousehack_address; static bool mousehack_enabled; static void mousehack_reset (void) { dimensioninfo_width = dimensioninfo_height = 0; mouseoffset_x = mouseoffset_y = 0; dimensioninfo_dbl = 0; mousehack_alive_cnt = 0; vp_xoffset = vp_yoffset = 0; tablet_data = 0; if (mousehack_address) put_byte (mousehack_address + MH_E, 0); mousehack_address = 0; mousehack_enabled = false; } static bool mousehack_enable (void) { int mode; if (!uae_boot_rom || currprefs.input_tablet == TABLET_OFF) return false; if (mousehack_address && mousehack_enabled) return true; mode = 0x80; if (currprefs.input_tablet == TABLET_MOUSEHACK) mode |= 1; if (inputdevice_is_tablet () > 0) mode |= 2; if (mousehack_address) { write_log (_T("Mouse driver enabled (%s)\n"), ((mode & 3) == 3 ? _T("tablet+mousehack") : ((mode & 3) == 2) ? _T("tablet") : _T("mousehack"))); put_byte (mousehack_address + MH_E, mode); mousehack_enabled = true; } return true; } void input_mousehack_mouseoffset (uaecptr pointerprefs) { mouseoffset_x = (uae_s16)get_word (pointerprefs + 28); mouseoffset_y = (uae_s16)get_word (pointerprefs + 30); } int input_mousehack_status (int mode, uaecptr diminfo, uaecptr dispinfo, uaecptr vp, uae_u32 moffset) { if (mode == 4) { return mousehack_enable () ? 1 : 0; } else if (mode == 5) { mousehack_address = m68k_dreg (regs, 0); mousehack_enable (); } else if (mode == 0) { if (mousehack_address) { uae_u8 v = get_byte (mousehack_address + MH_E); v |= 0x40; put_byte (mousehack_address + MH_E, v); write_log (_T("Tablet driver running (%08x,%02x)\n"), mousehack_address, v); } } else if (mode == 1) { int x1 = -1, y1 = -1, x2 = -1, y2 = -1; uae_u32 props = 0; dimensioninfo_width = -1; dimensioninfo_height = -1; vp_xoffset = 0; vp_yoffset = 0; if (diminfo) { x1 = get_word (diminfo + 50); y1 = get_word (diminfo + 52); x2 = get_word (diminfo + 54); y2 = get_word (diminfo + 56); dimensioninfo_width = x2 - x1 + 1; dimensioninfo_height = y2 - y1 + 1; } if (vp) { vp_xoffset = get_word (vp + 28); vp_yoffset = get_word (vp + 30); } if (dispinfo) props = get_long (dispinfo + 18); dimensioninfo_dbl = (props & 0x00020000) ? 1 : 0; write_log (_T("%08x %08x %08x (%dx%d)-(%dx%d) d=%dx%d %s\n"), diminfo, props, vp, x1, y1, x2, y2, vp_xoffset, vp_yoffset, (props & 0x00020000) ? _T("dbl") : _T("")); } else if (mode == 2) { if (mousehack_alive_cnt == 0) mousehack_alive_cnt = -100; else if (mousehack_alive_cnt > 0) mousehack_alive_cnt = 100; } return 1; } void get_custom_mouse_limits (int *w, int *h, int *dx, int *dy, int dbl); void inputdevice_tablet_strobe (void) { mousehack_enable (); if (!uae_boot_rom) return; if (!tablet_data) return; if (mousehack_address) put_byte (mousehack_address + MH_CNT, get_byte (mousehack_address + MH_CNT) + 1); } void inputdevice_tablet (int x, int y, int z, int pressure, uae_u32 buttonbits, int inproximity, int ax, int ay, int az) { uae_u8 *p; uae_u8 tmp[MH_END]; mousehack_enable (); if (inputdevice_is_tablet () <= 0 || !mousehack_address) return; //write_log (_T("%d %d %d %d %08X %d %d %d %d\n"), x, y, z, pressure, buttonbits, inproximity, ax, ay, az); p = get_real_address (mousehack_address); memcpy (tmp, p + MH_START, MH_END - MH_START); #if 0 if (currprefs.input_magic_mouse) { int maxx, maxy, diffx, diffy; int dw, dh, ax, ay, aw, ah; float xmult, ymult; float fx, fy; fx = (float)x; fy = (float)y; desktop_coords (&dw, &dh, &ax, &ay, &aw, &ah); xmult = (float)tablet_maxx / dw; ymult = (float)tablet_maxy / dh; diffx = 0; diffy = 0; if (picasso_on) { maxx = gfxvidinfo.width; maxy = gfxvidinfo.height; } else { get_custom_mouse_limits (&maxx, &maxy, &diffx, &diffy); } diffx += ax; diffy += ah; fx -= diffx * xmult; if (fx < 0) fx = 0; if (fx >= aw * xmult) fx = aw * xmult - 1; fy -= diffy * ymult; if (fy < 0) fy = 0; if (fy >= ah * ymult) fy = ah * ymult - 1; x = (int)(fx * (aw * xmult) / tablet_maxx + 0.5); y = (int)(fy * (ah * ymult) / tablet_maxy + 0.5); } #endif p[MH_X] = x >> 8; p[MH_X + 1] = x; p[MH_Y] = y >> 8; p[MH_Y + 1] = y; p[MH_Z] = z >> 8; p[MH_Z + 1] = z; p[MH_AX] = ax >> 8; p[MH_AX + 1] = ax; p[MH_AY] = ay >> 8; p[MH_AY + 1] = ay; p[MH_AZ] = az >> 8; p[MH_AZ + 1] = az; p[MH_MAXX] = tablet_maxx >> 8; p[MH_MAXX + 1] = tablet_maxx; p[MH_MAXY] = tablet_maxy >> 8; p[MH_MAXY + 1] = tablet_maxy; p[MH_PRESSURE] = pressure >> 8; p[MH_PRESSURE + 1] = pressure; p[MH_BUTTONBITS + 0] = buttonbits >> 24; p[MH_BUTTONBITS + 1] = buttonbits >> 16; p[MH_BUTTONBITS + 2] = buttonbits >> 8; p[MH_BUTTONBITS + 3] = buttonbits >> 0; if (inproximity < 0) { p[MH_INPROXIMITY] = p[MH_INPROXIMITY + 1] = 0xff; } else { p[MH_INPROXIMITY] = 0; p[MH_INPROXIMITY + 1] = inproximity ? 1 : 0; } if (!memcmp (tmp, p + MH_START, MH_END - MH_START)) return; if (tablet_log & 1) { static int obuttonbits, oinproximity; if (inproximity != oinproximity || buttonbits != obuttonbits) { obuttonbits = buttonbits; oinproximity = inproximity; write_log (_T("TABLET: B=%08x P=%d\n"), buttonbits, inproximity); } } if (tablet_log & 2) { write_log (_T("TABLET: X=%d Y=%d Z=%d AX=%d AY=%d AZ=%d\n"), x, y, z, ax, ay, az); } p[MH_E] = 0xc0 | 2; p[MH_CNT]++; } void inputdevice_tablet_info (int maxx, int maxy, int maxz, int maxax, int maxay, int maxaz, int xres, int yres) { uae_u8 *p; if (!uae_boot_rom || !mousehack_address) return; p = get_real_address (mousehack_address); tablet_maxx = maxx; tablet_maxy = maxy; p[MH_MAXX] = maxx >> 8; p[MH_MAXX + 1] = maxx; p[MH_MAXY] = maxy >> 8; p[MH_MAXY + 1] = maxy; p[MH_MAXZ] = maxz >> 8; p[MH_MAXZ + 1] = maxz; p[MH_RESX] = xres >> 8; p[MH_RESX + 1] = xres; p[MH_RESY] = yres >> 8; p[MH_RESY + 1] = yres; p[MH_MAXAX] = maxax >> 8; p[MH_MAXAX + 1] = maxax; p[MH_MAXAY] = maxay >> 8; p[MH_MAXAY + 1] = maxay; p[MH_MAXAZ] = maxaz >> 8; p[MH_MAXAZ + 1] = maxaz; } void getgfxoffset (int *dx, int *dy, int*,int*); static void inputdevice_mh_abs (int x, int y, uae_u32 buttonbits) { uae_u8 *p; uae_u8 tmp1[4], tmp2[4]; mousehack_enable (); if (!mousehack_address) return; p = get_real_address (mousehack_address); memcpy (tmp1, p + MH_ABSX, sizeof tmp1); memcpy (tmp2, p + MH_BUTTONBITS, sizeof tmp2); x -= mouseoffset_x + 1; y -= mouseoffset_y + 2; //write_log (_T("%dx%d %08x\n"), x, y, buttonbits); p[MH_ABSX] = x >> 8; p[MH_ABSX + 1] = x; p[MH_ABSY] = y >> 8; p[MH_ABSY + 1] = y; p[MH_BUTTONBITS + 0] = buttonbits >> 24; p[MH_BUTTONBITS + 1] = buttonbits >> 16; p[MH_BUTTONBITS + 2] = buttonbits >> 8; p[MH_BUTTONBITS + 3] = buttonbits >> 0; if (!memcmp (tmp1, p + MH_ABSX, sizeof tmp1) && !memcmp (tmp2, p + MH_BUTTONBITS, sizeof tmp2)) return; p[MH_E] = 0xc0 | 1; p[MH_CNT]++; tablet_data = 1; } #if 0 static void inputdevice_mh_abs_v36 (int x, int y) { uae_u8 *p; uae_u8 tmp[MH_END]; uae_u32 off; int maxx, maxy, diffx, diffy; int fdy, fdx, fmx, fmy; mousehack_enable (); off = getmhoffset (); p = rtarea + off; memcpy (tmp, p + MH_START, MH_END - MH_START); getgfxoffset (&fdx, &fdy, &fmx, &fmy); x -= fdx; y -= fdy; x += vp_xoffset; y += vp_yoffset; diffx = diffy = 0; maxx = maxy = 0; if (picasso_on) { maxx = picasso96_state.Width; maxy = picasso96_state.Height; } else if (dimensioninfo_width > 0 && dimensioninfo_height > 0) { maxx = dimensioninfo_width; maxy = dimensioninfo_height; get_custom_mouse_limits (&maxx, &maxy, &diffx, &diffy, dimensioninfo_dbl); } else { uaecptr gb = get_gfxbase (); maxx = 0; maxy = 0; if (gb) { maxy = get_word (gb + 216); maxx = get_word (gb + 218); } get_custom_mouse_limits (&maxx, &maxy, &diffx, &diffy, 0); } #if 0 { uaecptr gb = get_intuitionbase (); maxy = get_word (gb + 1344 + 2); maxx = get_word (gb + 1348 + 2); write_log (_T("%d %d\n"), maxx, maxy); } #endif #if 1 { uaecptr gb = get_gfxbase (); uaecptr view = get_long (gb + 34); if (view) { uaecptr vp = get_long (view); if (vp) { int w, h, dw, dh; w = get_word (vp + 24); h = get_word (vp + 26) * 2; dw = get_word (vp + 28); dh = get_word (vp + 30); //write_log (_T("%d %d %d %d\n"), w, h, dw, dh); if (w < maxx) maxx = w; if (h < maxy) maxy = h; x -= dw; y -= dh; } } //write_log (_T("* %d %d\n"), get_word (gb + 218), get_word (gb + 216)); } //write_log (_T("%d %d\n"), maxx, maxy); #endif maxx = maxx * 1000 / fmx; maxy = maxy * 1000 / fmy; if (maxx <= 0) maxx = 1; if (maxy <= 0) maxy = 1; x -= diffx; if (x < 0) x = 0; if (x >= maxx) x = maxx - 1; y -= diffy; if (y < 0) y = 0; if (y >= maxy) y = maxy - 1; //write_log (_T("%d %d %d %d\n"), x, y, maxx, maxy); p[MH_X] = x >> 8; p[MH_X + 1] = x; p[MH_Y] = y >> 8; p[MH_Y + 1] = y; p[MH_MAXX] = maxx >> 8; p[MH_MAXX + 1] = maxx; p[MH_MAXY] = maxy >> 8; p[MH_MAXY + 1] = maxy; p[MH_Z] = p[MH_Z + 1] = 0; p[MH_MAXZ] = p[MH_MAXZ + 1] = 0; p[MH_AX] = p[MH_AX + 1] = 0; p[MH_AY] = p[MH_AY + 1] = 0; p[MH_AZ] = p[MH_AZ + 1] = 0; p[MH_PRESSURE] = p[MH_PRESSURE + 1] = 0; p[MH_INPROXIMITY] = p[MH_INPROXIMITY + 1] = 0xff; if (!memcmp (tmp, p + MH_START, MH_END - MH_START)) return; p[MH_CNT]++; tablet_data = 1; } #endif static void mousehack_helper (uae_u32 buttonmask) { int x, y; int fdy, fdx, fmx, fmy; if (currprefs.input_magic_mouse == 0 && currprefs.input_tablet < TABLET_MOUSEHACK) return; #if 0 if (kickstart_version >= 36) { inputdevice_mh_abs_v36 (lastmx, lastmy); return; } #endif x = lastmx; y = lastmy; getgfxoffset (&fdx, &fdy, &fmx, &fmy); #ifdef PICASSO96 if (picasso_on) { x -= picasso96_state.XOffset; y -= picasso96_state.YOffset; x = x * fmx / 1000; y = y * fmy / 1000; x -= fdx * fmx / 1000; y -= fdy * fmy / 1000; } else #endif { x = x * fmx / 1000; y = y * fmy / 1000; x -= fdx * fmx / 1000 - 1; y -= fdy * fmy / 1000 - 2; if (x < 0) x = 0; if (x >= gfxvidinfo.outbuffer->outwidth) x = gfxvidinfo.outbuffer->outwidth - 1; if (y < 0) y = 0; if (y >= gfxvidinfo.outbuffer->outheight) y = gfxvidinfo.outbuffer->outheight - 1; x = coord_native_to_amiga_x (x); y = coord_native_to_amiga_y (y) << 1; } inputdevice_mh_abs (x, y, buttonmask); } static int mouseedge_x, mouseedge_y, mouseedge_time; #define MOUSEEDGE_RANGE 100 #define MOUSEEDGE_TIME 2 extern void setmouseactivexy (int,int,int); static int mouseedge (void) { int x, y, dir; uaecptr ib; static int melast_x, melast_y; static int isnonzero; if (currprefs.input_magic_mouse == 0 || currprefs.input_tablet > 0) return 0; if (magicmouse_ibase == 0xffffffff) return 0; dir = 0; if (!mouseedge_time) { isnonzero = 0; goto end; } ib = get_intuitionbase (); if (!ib || get_word (ib + 20) < 31) // version < 31 return 0; x = get_word (ib + 70); y = get_word (ib + 68); if (x || y) isnonzero = 1; if (!isnonzero) return 0; if (melast_x == x) { if (mouseedge_x < -MOUSEEDGE_RANGE) { mouseedge_x = 0; dir |= 1; goto end; } if (mouseedge_x > MOUSEEDGE_RANGE) { mouseedge_x = 0; dir |= 2; goto end; } } else { mouseedge_x = 0; melast_x = x; } if (melast_y == y) { if (mouseedge_y < -MOUSEEDGE_RANGE) { mouseedge_y = 0; dir |= 4; goto end; } if (mouseedge_y > MOUSEEDGE_RANGE) { mouseedge_y = 0; dir |= 8; goto end; } } else { mouseedge_y = 0; melast_y = y; } return 1; end: mouseedge_time = 0; if (dir) { if (!picasso_on) { int aw = 0, ah = 0, dx, dy; get_custom_mouse_limits (&aw, &ah, &dx, &dy, dimensioninfo_dbl); x += dx; y += dy; } if (!dmaen (DMA_SPRITE)) setmouseactivexy (x, y, 0); else setmouseactivexy (x, y, dir); } return 1; } int magicmouse_alive (void) { return mouseedge_alive > 0; } STATIC_INLINE int adjust (int val) { if (val > 127) return 127; else if (val < -127) return -127; return val; } static int getbuttonstate (int joy, int button) { return (joybutton[joy] & (1 << button)) ? 1 : 0; } static int getvelocity (int num, int subnum, int pct) { int val; int v; if (pct > 1000) pct = 1000; val = mouse_delta[num][subnum]; v = val * pct / 1000; if (!v) { if (val < -maxvpos / 2) v = -2; else if (val < 0) v = -1; else if (val > maxvpos / 2) v = 2; else if (val > 0) v = 1; } if (!mouse_deltanoreset[num][subnum]) { mouse_delta[num][subnum] -= v; gui_gameport_axis_change (num, subnum * 2 + 0, 0, -1); gui_gameport_axis_change (num, subnum * 2 + 1, 0, -1); } return v; } #define MOUSEXY_MAX 16384 static void mouseupdate (int pct, bool vsync) { int v, i; int max = 120; static int mxd, myd; if (vsync) { if (mxd < 0) { if (mouseedge_x > 0) mouseedge_x = 0; else mouseedge_x += mxd; mouseedge_time = MOUSEEDGE_TIME; } if (mxd > 0) { if (mouseedge_x < 0) mouseedge_x = 0; else mouseedge_x += mxd; mouseedge_time = MOUSEEDGE_TIME; } if (myd < 0) { if (mouseedge_y > 0) mouseedge_y = 0; else mouseedge_y += myd; mouseedge_time = MOUSEEDGE_TIME; } if (myd > 0) { if (mouseedge_y < 0) mouseedge_y = 0; else mouseedge_y += myd; mouseedge_time = MOUSEEDGE_TIME; } if (mouseedge_time > 0) { mouseedge_time--; if (mouseedge_time == 0) { mouseedge_x = 0; mouseedge_y = 0; } } mxd = 0; myd = 0; } for (i = 0; i < 2; i++) { if (mouse_port[i]) { v = getvelocity (i, 0, pct); mxd += v; mouse_x[i] += v; if (mouse_x[i] < 0) { mouse_x[i] += MOUSEXY_MAX; mouse_frame_x[i] = mouse_x[i] - v; } if (mouse_x[i] >= MOUSEXY_MAX) { mouse_x[i] -= MOUSEXY_MAX; mouse_frame_x[i] = mouse_x[i] - v; } v = getvelocity (i, 1, pct); myd += v; mouse_y[i] += v; if (mouse_y[i] < 0) { mouse_y[i] += MOUSEXY_MAX; mouse_frame_y[i] = mouse_y[i] - v; } if (mouse_y[i] >= MOUSEXY_MAX) { mouse_y[i] -= MOUSEXY_MAX; mouse_frame_y[i] = mouse_y[i] - v; } v = getvelocity (i, 2, pct); if (v > 0) record_key (0x7a << 1); else if (v < 0) record_key (0x7b << 1); if (!mouse_deltanoreset[i][2]) mouse_delta[i][2] = 0; if (mouse_frame_x[i] - mouse_x[i] > max) { mouse_x[i] = mouse_frame_x[i] - max; mouse_x[i] &= MOUSEXY_MAX - 1; } if (mouse_frame_x[i] - mouse_x[i] < -max) { mouse_x[i] = mouse_frame_x[i] + max; mouse_x[i] &= MOUSEXY_MAX - 1; } if (mouse_frame_y[i] - mouse_y[i] > max) mouse_y[i] = mouse_frame_y[i] - max; if (mouse_frame_y[i] - mouse_y[i] < -max) mouse_y[i] = mouse_frame_y[i] + max; } if (!vsync) { mouse_frame_x[i] = mouse_x[i]; mouse_frame_y[i] = mouse_y[i]; } } } static int input_vpos, input_frame; extern int vpos; static void readinput (void) { uae_u32 totalvpos; int diff; totalvpos = input_frame * current_maxvpos () + vpos; diff = totalvpos - input_vpos; if (diff > 0) { if (diff < 10) { mouseupdate (0, false); } else { mouseupdate (diff * 1000 / current_maxvpos (), false); } } input_vpos = totalvpos; } static void joymousecounter (int joy) { int left = 1, right = 1, top = 1, bot = 1; int b9, b8, b1, b0; int cntx, cnty, ocntx, ocnty; if (joydir[joy] & DIR_LEFT) left = 0; if (joydir[joy] & DIR_RIGHT) right = 0; if (joydir[joy] & DIR_UP) top = 0; if (joydir[joy] & DIR_DOWN) bot = 0; b0 = (bot ^ right) ? 1 : 0; b1 = (right ^ 1) ? 2 : 0; b8 = (top ^ left) ? 1 : 0; b9 = (left ^ 1) ? 2 : 0; cntx = b0 | b1; cnty = b8 | b9; ocntx = mouse_x[joy] & 3; ocnty = mouse_y[joy] & 3; if (cntx == 3 && ocntx == 0) mouse_x[joy] -= 4; else if (cntx == 0 && ocntx == 3) mouse_x[joy] += 4; mouse_x[joy] = (mouse_x[joy] & 0xfc) | cntx; if (cnty == 3 && ocnty == 0) mouse_y[joy] -= 4; else if (cnty == 0 && ocnty == 3) mouse_y[joy] += 4; mouse_y[joy] = (mouse_y[joy] & 0xfc) | cnty; if (!left || !right || !top || !bot) { mouse_frame_x[joy] = mouse_x[joy]; mouse_frame_y[joy] = mouse_y[joy]; } } static uae_u16 getjoystate (int joy) { uae_u16 v; v = (uae_u8)mouse_x[joy] | (mouse_y[joy] << 8); #ifdef DONGLE_DEBUG if (notinrom ()) write_log (_T("JOY%dDAT %04X %s\n"), joy, v, debuginfo (0)); #endif if (inputdevice_logging & 2) write_log (_T("JOY%dDAT=%04x %08x\n"), joy, v, M68K_GETPC); return v; } uae_u16 JOY0DAT (void) { uae_u16 v; readinput (); v = getjoystate (0); v = dongle_joydat (0, v); return v; } uae_u16 JOY1DAT (void) { uae_u16 v; readinput (); v = getjoystate (1); v = dongle_joydat (1, v); if (inputrecord_debug & 2) { if (input_record > 0) inprec_recorddebug_cia (v, -1, m68k_getpc ()); else if (input_play > 0) inprec_playdebug_cia (v, -1, m68k_getpc ()); } return v; } uae_u16 JOYGET (int num) { uae_u16 v; v = getjoystate (num); v = dongle_joydat (num, v); return v; } void JOYSET (int num, uae_u16 dat) { mouse_x[num] = dat & 0xff; mouse_y[num] = (dat >> 8) & 0xff; mouse_frame_x[num] = mouse_x[num]; mouse_frame_y[num] = mouse_y[num]; } void JOYTEST (uae_u16 v) { mouse_x[0] &= 3; mouse_y[0] &= 3; mouse_x[1] &= 3; mouse_y[1] &= 3; mouse_x[0] |= v & 0xFC; mouse_x[1] |= v & 0xFC; mouse_y[0] |= (v >> 8) & 0xFC; mouse_y[1] |= (v >> 8) & 0xFC; mouse_frame_x[0] = mouse_x[0]; mouse_frame_y[0] = mouse_y[0]; mouse_frame_x[1] = mouse_x[1]; mouse_frame_y[1] = mouse_y[1]; dongle_joytest (v); if (inputdevice_logging & 2) write_log (_T("JOYTEST: %04X PC=%x\n"), v , M68K_GETPC); } static uae_u8 parconvert (uae_u8 v, int jd, int shift) { if (jd & DIR_UP) v &= ~(1 << shift); if (jd & DIR_DOWN) v &= ~(2 << shift); if (jd & DIR_LEFT) v &= ~(4 << shift); if (jd & DIR_RIGHT) v &= ~(8 << shift); return v; } /* io-pins floating: dir=1 -> return data, dir=0 -> always return 1 */ uae_u8 handle_parport_joystick (int port, uae_u8 pra, uae_u8 dra) { uae_u8 v; switch (port) { case 0: v = (pra & dra) | (dra ^ 0xff); if (parport_joystick_enabled) { v = parconvert (v, joydir[2], 0); v = parconvert (v, joydir[3], 4); } return v; case 1: v = ((pra & dra) | (dra ^ 0xff)) & 0x7; if (parport_joystick_enabled) { if (getbuttonstate (2, 0)) v &= ~4; if (getbuttonstate (3, 0)) v &= ~1; if (getbuttonstate (2, 1) || getbuttonstate (3, 1)) v &= ~2; /* spare */ } return v; default: abort (); return 0; } } /* p5 is 1 or floating = cd32 2-button mode */ static bool cd32padmode (uae_u16 p5dir, uae_u16 p5dat) { if (!(potgo_value & p5dir) || ((potgo_value & p5dat) && (potgo_value & p5dir))) return false; return true; } static bool is_joystick_pullup (int joy) { return joymodes[joy] == JSEM_MODE_GAMEPAD; } static bool is_mouse_pullup (int joy) { return mouse_pullup; } static void charge_cap (int joy, int idx, int charge) { if (charge < -1 || charge > 1) charge = charge * 80; pot_cap[joy][idx] += charge; if (pot_cap[joy][idx] < 0) pot_cap[joy][idx] = 0; if (pot_cap[joy][idx] > 511) pot_cap[joy][idx] = 511; } static void cap_check (void) { int joy, i; for (joy = 0; joy < 2; joy++) { for (i = 0; i < 2; i++) { int charge = 0, dong, joypot; uae_u16 pdir = 0x0200 << (joy * 4 + i * 2); /* output enable */ uae_u16 pdat = 0x0100 << (joy * 4 + i * 2); /* data */ uae_u16 p5dir = 0x0200 << (joy * 4); uae_u16 p5dat = 0x0100 << (joy * 4); int isbutton = getbuttonstate (joy, i == 0 ? JOYBUTTON_3 : JOYBUTTON_2); if (cd32_pad_enabled[joy]) { // only red and blue can be read if CD32 pad and only if it is in normal pad mode isbutton |= getbuttonstate (joy, JOYBUTTON_CD32_BLUE); // CD32 pad 3rd button line (P5) is always floating if (i == 0) isbutton = 0; if (cd32padmode (p5dir, p5dat)) continue; } dong = dongle_analogjoy (joy, i); if (dong >= 0) { isbutton = 0; joypot = dong; if (pot_cap[joy][i] < joypot) charge = 1; // slow charge via dongle resistor } else { joypot = joydirpot[joy][i]; if (analog_port[joy][i] && pot_cap[joy][i] < joypot) charge = 1; // slow charge via pot variable resistor if ((is_joystick_pullup (joy) && digital_port[joy][i]) || (is_mouse_pullup (joy) && mouse_port[joy])) charge = 1; // slow charge via pull-up resistor } if (!(potgo_value & pdir)) { // input? if (pot_dat_act[joy][i]) pot_dat[joy][i]++; /* first 7 or 8 lines after potgo has been started = discharge cap */ if (pot_dat_act[joy][i] == 1) { if (pot_dat[joy][i] < (currprefs.ntscmode ? POTDAT_DELAY_NTSC : POTDAT_DELAY_PAL)) { charge = -2; /* fast discharge delay */ } else { pot_dat_act[joy][i] = 2; pot_dat[joy][i] = 0; } } if (dong >= 0) { if (pot_dat_act[joy][i] == 2 && pot_cap[joy][i] >= joypot) pot_dat_act[joy][i] = 0; } else { if (analog_port[joy][i] && pot_dat_act[joy][i] == 2 && pot_cap[joy][i] >= joypot) pot_dat_act[joy][i] = 0; if ((digital_port[joy][i] || mouse_port[joy]) && pot_dat_act[joy][i] == 2) { if (pot_cap[joy][i] >= 10 && !isbutton) pot_dat_act[joy][i] = 0; } } } else { // output? charge = (potgo_value & pdat) ? 2 : -2; /* fast (dis)charge if output */ if (potgo_value & pdat) pot_dat_act[joy][i] = 0; // instant stop if output+high if (isbutton) pot_dat[joy][i]++; // "free running" if output+low } if (isbutton) charge = -2; // button press overrides everything if (currprefs.cs_cdtvcd) { /* CDTV P9 is not floating */ if (!(potgo_value & pdir) && i == 1 && charge == 0) charge = 2; } // CD32 pad in 2-button mode: blue button is not floating if (cd32_pad_enabled[joy] && i == 1 && charge == 0) charge = 2; /* official Commodore mouse has pull-up resistors in button lines * NOTE: 3rd party mice may not have pullups! */ if (dong < 0 && (is_mouse_pullup (joy) && mouse_port[joy] && digital_port[joy][i]) && charge == 0) charge = 2; /* emulate pullup resistor if button mapped because there too many broken * programs that read second button in input-mode (and most 2+ button pads have * pullups) */ if (dong < 0 && (is_joystick_pullup (joy) && digital_port[joy][i]) && charge == 0) charge = 2; charge_cap (joy, i, charge); } } } uae_u8 handle_joystick_buttons (uae_u8 pra, uae_u8 dra) { uae_u8 but = 0; int i; cap_check (); for (i = 0; i < 2; i++) { int mask = 0x40 << i; if (cd32_pad_enabled[i]) { uae_u16 p5dir = 0x0200 << (i * 4); uae_u16 p5dat = 0x0100 << (i * 4); but |= mask; if (!cd32padmode (p5dir, p5dat)) { if (getbuttonstate (i, JOYBUTTON_CD32_RED) || getbuttonstate (i, JOYBUTTON_1)) but &= ~mask; } } else { if (!getbuttonstate (i, JOYBUTTON_1)) but |= mask; if (bouncy && cycles_in_range (bouncy_cycles)) { but &= ~mask; if (uaerand () & 1) but |= mask; } if (dra & mask) but = (but & ~mask) | (pra & mask); } } if (inputdevice_logging & 4) { static uae_u8 old; if (but != old) write_log (_T("BFE001: %02X:%02X %x\n"), dra, but, M68K_GETPC); old = but; } return but; } /* joystick 1 button 1 is used as a output for incrementing shift register */ void handle_cd32_joystick_cia (uae_u8 pra, uae_u8 dra) { static int oldstate[2]; int i; cap_check (); for (i = 0; i < 2; i++) { uae_u8 but = 0x40 << i; uae_u16 p5dir = 0x0200 << (i * 4); /* output enable P5 */ uae_u16 p5dat = 0x0100 << (i * 4); /* data P5 */ if (cd32padmode (p5dir, p5dat)) { if ((dra & but) && (pra & but) != oldstate[i]) { if (!(pra & but)) { cd32_shifter[i]--; if (cd32_shifter[i] < 0) cd32_shifter[i] = 0; } } } oldstate[i] = pra & but; } } /* joystick port 1 button 2 is input for button state */ static uae_u16 handle_joystick_potgor (uae_u16 potgor) { int i; cap_check (); for (i = 0; i < 2; i++) { uae_u16 p9dir = 0x0800 << (i * 4); /* output enable P9 */ uae_u16 p9dat = 0x0400 << (i * 4); /* data P9 */ uae_u16 p5dir = 0x0200 << (i * 4); /* output enable P5 */ uae_u16 p5dat = 0x0100 << (i * 4); /* data P5 */ if (cd32_pad_enabled[i] && cd32padmode (p5dir, p5dat)) { /* p5 is floating in input-mode */ potgor &= ~p5dat; potgor |= potgo_value & p5dat; if (!(potgo_value & p9dir)) potgor |= p9dat; /* (P5 output and 1) or floating -> shift register is kept reset (Blue button) */ if (!(potgo_value & p5dir) || ((potgo_value & p5dat) && (potgo_value & p5dir))) cd32_shifter[i] = 8; /* shift at 1 == return one, >1 = return button states */ if (cd32_shifter[i] == 0) potgor &= ~p9dat; /* shift at zero == return zero */ if (cd32_shifter[i] >= 2 && (joybutton[i] & ((1 << JOYBUTTON_CD32_PLAY) << (cd32_shifter[i] - 2)))) potgor &= ~p9dat; } else { potgor &= ~p5dat; if (pot_cap[i][0] > 100) potgor |= p5dat; if (!cd32_pad_enabled[i] || !cd32padmode (p5dir, p5dat)) { potgor &= ~p9dat; if (pot_cap[i][1] > 100) potgor |= p9dat; } } } return potgor; } static int inputdelay; void inputdevice_read (void) { #ifdef FSUAE #if 0 static int lastframe = 0; if (lastframe != vsync_counter) { if (vsync_counter == 900) { handle_input_event(33, 1, 1, 0, 1, 0); } else if (vsync_counter == 911) { handle_input_event(33, 0, 1, 0, 1, 0); } else if (vsync_counter == 4929) { handle_input_event(205, 1, 1, 0, 1, 0); } else if (vsync_counter == 4936) { handle_input_event(205, 0, 1, 0, 1, 0); } lastframe = vsync_counter; } #endif #endif do { handle_msgpump (); idev[IDTYPE_MOUSE].read (); idev[IDTYPE_JOYSTICK].read (); idev[IDTYPE_KEYBOARD].read (); } while (handle_msgpump ()); } static int handle_custom_event (const TCHAR *custom) { TCHAR *p, *buf, *nextp; if (custom == NULL) return 0; config_changed = 1; write_log (_T("%s\n"), custom); p = buf = my_strdup (custom); while (p && *p) { TCHAR *p2; if (*p != '\"') break; p++; p2 = p; while (*p2 != '\"' && *p2 != 0) p2++; if (*p2 == '\"') { *p2++ = 0; nextp = p2 + 1; while (*nextp == ' ') nextp++; } //write_log (_T("-> '%s'\n"), p); if (!_tcsicmp (p, _T("no_config_check"))) { config_changed = 0; } else if (!_tcsicmp (p, _T("do_config_check"))) { config_changed = 1; } else { cfgfile_parse_line (&changed_prefs, p, 0); } p = nextp; } xfree (buf); return 0; } void inputdevice_hsync (void) { static int cnt; cap_check (); #ifdef CATWEASEL catweasel_hsync (); #endif for (int i = 0; i < INPUT_QUEUE_SIZE; i++) { struct input_queue_struct *iq = &input_queue[i]; if (iq->linecnt > 0) { iq->linecnt--; if (iq->linecnt == 0) { if (iq->state) iq->state = 0; else iq->state = iq->storedstate; if (iq->custom) handle_custom_event (iq->custom); if (iq->evt) handle_input_event (iq->evt, iq->state, iq->max, 0, false, true); iq->linecnt = iq->nextlinecnt; } } } if (bouncy && get_cycles () > bouncy_cycles) bouncy = 0; if (input_record && input_record != INPREC_RECORD_PLAYING) { if (vpos == 0) inputdevice_read (); inputdelay = 0; } if (input_play) { inprec_playdiskchange (); int nr, state, max, autofire; while (inprec_playevent (&nr, &state, &max, &autofire)) handle_input_event (nr, state, max, autofire, false, true); if (vpos == 0) handle_msgpump (); } if (!input_record && !input_play) { if ((++cnt & 63) == 63 ) { inputdevice_read (); } else if (inputdelay > 0) { inputdelay--; if (inputdelay == 0) inputdevice_read (); } } } static uae_u16 POTDAT (int joy) { uae_u16 v = (pot_dat[joy][1] << 8) | pot_dat[joy][0]; if (inputdevice_logging & 16) write_log (_T("POTDAT%d: %04X %08X\n"), joy, v, M68K_GETPC); return v; } uae_u16 POT0DAT (void) { return POTDAT (0); } uae_u16 POT1DAT (void) { return POTDAT (1); } /* direction=input, data pin floating, last connected logic level or previous status * written when direction was ouput * otherwise it is currently connected logic level. * direction=output, data pin is current value, forced to zero if joystick button is pressed * it takes some tens of microseconds before data pin changes state */ void POTGO (uae_u16 v) { int i, j; if (inputdevice_logging & 16) write_log (_T("POTGO_W: %04X %08X\n"), v, M68K_GETPC); #ifdef DONGLE_DEBUG if (notinrom ()) write_log (_T("POTGO %04X %s\n"), v, debuginfo(0)); #endif dongle_potgo (v); potgo_value = potgo_value & 0x5500; /* keep state of data bits */ potgo_value |= v & 0xaa00; /* get new direction bits */ for (i = 0; i < 8; i += 2) { uae_u16 dir = 0x0200 << i; if (v & dir) { uae_u16 data = 0x0100 << i; potgo_value &= ~data; potgo_value |= v & data; } } for (i = 0; i < 2; i++) { if (cd32_pad_enabled[i]) { uae_u16 p5dir = 0x0200 << (i * 4); /* output enable P5 */ uae_u16 p5dat = 0x0100 << (i * 4); /* data P5 */ if (!(potgo_value & p5dir) || ((potgo_value & p5dat) && (potgo_value & p5dir))) cd32_shifter[i] = 8; } } if (v & 1) { for (i = 0; i < 2; i++) { for (j = 0; j < 2; j++) { pot_dat_act[i][j] = 1; pot_dat[i][j] = 0; } } } } uae_u16 POTGOR (void) { uae_u16 v; v = handle_joystick_potgor (potgo_value) & 0x5500; v = dongle_potgor (v); #ifdef DONGLE_DEBUG if (notinrom ()) write_log (_T("POTGOR %04X %s\n"), v, debuginfo(0)); #endif if (inputdevice_logging & 16) write_log (_T("POTGO_R: %04X %08X %d\n"), v, M68K_GETPC, cd32_shifter[1]); return v; } static int check_input_queue (int evt) { struct input_queue_struct *iq; int i; for (i = 0; i < INPUT_QUEUE_SIZE; i++) { iq = &input_queue[i]; if (iq->evt == evt && iq->linecnt >= 0) return i; } return -1; } static void queue_input_event (int evt, const TCHAR *custom, int state, int max, int linecnt, int autofire) { struct input_queue_struct *iq; int idx; if (!evt) return; idx = check_input_queue (evt); if (state < 0 && idx >= 0) { iq = &input_queue[idx]; iq->nextlinecnt = -1; iq->linecnt = -1; iq->evt = 0; if (iq->state == 0 && evt > 0) handle_input_event (evt, 0, 1, 0, false, false); } else if (state >= 0 && idx < 0) { if (evt == 0 && custom == NULL) return; for (idx = 0; idx < INPUT_QUEUE_SIZE; idx++) { iq = &input_queue[idx]; if (iq->linecnt < 0) break; } if (idx == INPUT_QUEUE_SIZE) { write_log (_T("input queue overflow\n")); return; } xfree (iq->custom); iq->custom = NULL; if (custom) iq->custom = my_strdup (custom); iq->evt = evt; iq->state = iq->storedstate = state; iq->max = max; iq->linecnt = linecnt < 0 ? maxvpos + maxvpos / 2 : linecnt; iq->nextlinecnt = autofire > 0 ? linecnt : -1; } } static uae_u8 keybuf[256]; static int inputcode_pending, inputcode_pending_state; void inputdevice_release_all_keys (void) { int i; for (i = 0; i < 0x80; i++) { if (keybuf[i] != 0) { keybuf[i] = 0; record_key (i << 1|1); } } } void inputdevice_add_inputcode (int code, int state) { #ifdef FSUAE if (inputdevice_logging) { write_log(" inputcode %d state %d\n", code, state); } #endif inputcode_pending = code; inputcode_pending_state = state; } void inputdevice_do_keyboard (int code, int state) { #ifdef CDTV if (code >= 0x72 && code <= 0x77) { // CDTV keys if (cdtv_front_panel (-1)) { // front panel active if (!state) return; cdtv_front_panel (code - 0x72); return; } } #endif if (code < 0x80) { uae_u8 key = code | (state ? 0x00 : 0x80); keybuf[key & 0x7f] = (key & 0x80) ? 0 : 1; if (key == AK_RESETWARNING) { resetwarning_do (0); return; } else if ((keybuf[AK_CTRL] || keybuf[AK_RCTRL]) && keybuf[AK_LAMI] && keybuf[AK_RAMI]) { int r = keybuf[AK_LALT] | keybuf[AK_RALT]; if (!r && currprefs.cs_resetwarning && resetwarning_do (1)) return; memset (keybuf, 0, sizeof (keybuf)); send_internalevent (INTERNALEVENT_KBRESET); uae_reset (r, 1); } if (record_key ((uae_u8)((key << 1) | (key >> 7)))) { if (inputdevice_logging & 1) write_log (_T("Amiga key %02X %d\n"), key & 0x7f, key >> 7); } return; } inputdevice_add_inputcode (code, state); } // these need cpu trace data static bool needcputrace (int code) { switch (code) { case AKS_ENTERGUI: case AKS_STATECAPTURE: case AKS_STATESAVEQUICK: case AKS_STATESAVEQUICK1: case AKS_STATESAVEQUICK2: case AKS_STATESAVEQUICK3: case AKS_STATESAVEQUICK4: case AKS_STATESAVEQUICK5: case AKS_STATESAVEQUICK6: case AKS_STATESAVEQUICK7: case AKS_STATESAVEQUICK8: case AKS_STATESAVEQUICK9: case AKS_STATESAVEDIALOG: return true; } return false; } void inputdevice_handle_inputcode (void) { static int swapperslot; int code = inputcode_pending; int state = inputcode_pending_state; static int tracer_enable; if (code == 0) goto end; if (needcputrace (code) && can_cpu_tracer () == true && is_cpu_tracer () == false && !input_play && !input_record && !debugging) { if (set_cpu_tracer (true)) { tracer_enable = 1; return; // wait for next frame } } inputcode_pending = 0; if (vpos != 0) write_log (_T("inputcode=%d but vpos = %d"), code, vpos); #ifdef ARCADIA switch (code) { case AKS_ARCADIADIAGNOSTICS: arcadia_flag &= ~1; arcadia_flag |= state ? 1 : 0; break; case AKS_ARCADIAPLY1: arcadia_flag &= ~4; arcadia_flag |= state ? 4 : 0; break; case AKS_ARCADIAPLY2: arcadia_flag &= ~2; arcadia_flag |= state ? 2 : 0; break; case AKS_ARCADIACOIN1: if (state) arcadia_coin[0]++; break; case AKS_ARCADIACOIN2: if (state) arcadia_coin[1]++; break; } #endif if (!state) return; switch (code) { case AKS_ENTERGUI: gui_display (-1); setsystime (); break; case AKS_SCREENSHOT_FILE: screenshot (1, 1); break; case AKS_SCREENSHOT_CLIPBOARD: screenshot (0, 1); break; #ifdef ACTION_REPLAY case AKS_FREEZEBUTTON: action_replay_freeze (); break; #endif case AKS_FLOPPY0: gui_display (0); setsystime (); break; case AKS_FLOPPY1: gui_display (1); setsystime (); break; case AKS_FLOPPY2: gui_display (2); setsystime (); break; case AKS_FLOPPY3: gui_display (3); setsystime (); break; case AKS_EFLOPPY0: disk_eject (0); break; case AKS_EFLOPPY1: disk_eject (1); break; case AKS_EFLOPPY2: disk_eject (2); break; case AKS_EFLOPPY3: disk_eject (3); break; case AKS_IRQ7: NMI_delayed (); break; case AKS_PAUSE: pausemode (-1); break; case AKS_WARP: warpmode (-1); break; case AKS_INHIBITSCREEN: toggle_inhibit_frame (IHF_SCROLLLOCK); break; case AKS_STATEREWIND: savestate_dorewind (-2); break; case AKS_STATECURRENT: savestate_dorewind (-1); break; case AKS_STATECAPTURE: savestate_capture (1); break; case AKS_VOLDOWN: sound_volume (-1); break; case AKS_VOLUP: sound_volume (1); break; case AKS_VOLMUTE: sound_mute (-1); break; case AKS_MVOLDOWN: master_sound_volume (-1); break; case AKS_MVOLUP: master_sound_volume (1); break; case AKS_MVOLMUTE: master_sound_volume (0); break; case AKS_QUIT: uae_quit (); break; case AKS_SOFTRESET: uae_reset (0, 0); break; case AKS_HARDRESET: uae_reset (1, 1); break; case AKS_STATESAVEQUICK: case AKS_STATESAVEQUICK1: case AKS_STATESAVEQUICK2: case AKS_STATESAVEQUICK3: case AKS_STATESAVEQUICK4: case AKS_STATESAVEQUICK5: case AKS_STATESAVEQUICK6: case AKS_STATESAVEQUICK7: case AKS_STATESAVEQUICK8: case AKS_STATESAVEQUICK9: savestate_quick ((code - AKS_STATESAVEQUICK) / 2, 1); break; case AKS_STATERESTOREQUICK: case AKS_STATERESTOREQUICK1: case AKS_STATERESTOREQUICK2: case AKS_STATERESTOREQUICK3: case AKS_STATERESTOREQUICK4: case AKS_STATERESTOREQUICK5: case AKS_STATERESTOREQUICK6: case AKS_STATERESTOREQUICK7: case AKS_STATERESTOREQUICK8: case AKS_STATERESTOREQUICK9: savestate_quick ((code - AKS_STATERESTOREQUICK) / 2, 0); break; case AKS_TOGGLEDEFAULTSCREEN: toggle_fullscreen (-1); break; case AKS_TOGGLEWINDOWEDFULLSCREEN: toggle_fullscreen (0); break; case AKS_TOGGLEFULLWINDOWFULLSCREEN: toggle_fullscreen (1); break; case AKS_TOGGLEWINDOWFULLWINDOW: toggle_fullscreen (2); break; case AKS_TOGGLEMOUSEGRAB: toggle_mousegrab (); break; case AKS_ENTERDEBUGGER: activate_debugger (); break; case AKS_STATESAVEDIALOG: gui_display (5); break; case AKS_STATERESTOREDIALOG: gui_display (4); break; case AKS_DECREASEREFRESHRATE: case AKS_INCREASEREFRESHRATE: { int dir = code == AKS_INCREASEREFRESHRATE ? 5 : -5; if (currprefs.chipset_refreshrate == 0) currprefs.chipset_refreshrate = currprefs.ntscmode ? 60 : 50; changed_prefs.chipset_refreshrate = currprefs.chipset_refreshrate + dir; if (changed_prefs.chipset_refreshrate < 10.0) changed_prefs.chipset_refreshrate = 10.0; if (changed_prefs.chipset_refreshrate > 900.0) changed_prefs.chipset_refreshrate = 900.0; config_changed = 1; } break; case AKS_DISKSWAPPER_NEXT: swapperslot++; if (swapperslot >= MAX_SPARE_DRIVES || currprefs.dfxlist[swapperslot][0] == 0) swapperslot = 0; break; case AKS_DISKSWAPPER_PREV: swapperslot--; if (swapperslot < 0) swapperslot = MAX_SPARE_DRIVES - 1; while (swapperslot > 0) { if (currprefs.dfxlist[swapperslot][0]) break; swapperslot--; } break; case AKS_DISKSWAPPER_INSERT0: case AKS_DISKSWAPPER_INSERT1: case AKS_DISKSWAPPER_INSERT2: case AKS_DISKSWAPPER_INSERT3: _tcscpy (changed_prefs.floppyslots[code - AKS_DISKSWAPPER_INSERT0].df, currprefs.dfxlist[swapperslot]); config_changed = 1; break; break; case AKS_INPUT_CONFIG_1: case AKS_INPUT_CONFIG_2: case AKS_INPUT_CONFIG_3: case AKS_INPUT_CONFIG_4: changed_prefs.input_selected_setting = currprefs.input_selected_setting = code - AKS_INPUT_CONFIG_1; inputdevice_updateconfig (&changed_prefs, &currprefs); break; case AKS_DISK_PREV0: case AKS_DISK_PREV1: case AKS_DISK_PREV2: case AKS_DISK_PREV3: disk_prevnext (code - AKS_DISK_PREV0, -1); break; case AKS_DISK_NEXT0: case AKS_DISK_NEXT1: case AKS_DISK_NEXT2: case AKS_DISK_NEXT3: disk_prevnext (code - AKS_DISK_NEXT0, 1); break; #ifdef CDTV case AKS_CDTV_FRONT_PANEL_STOP: case AKS_CDTV_FRONT_PANEL_PLAYPAUSE: case AKS_CDTV_FRONT_PANEL_PREV: case AKS_CDTV_FRONT_PANEL_NEXT: case AKS_CDTV_FRONT_PANEL_REW: case AKS_CDTV_FRONT_PANEL_FF: cdtv_front_panel (code - AKS_CDTV_FRONT_PANEL_STOP); break; #endif } end: if (tracer_enable) { set_cpu_tracer (false); tracer_enable = 0; } } static int getqualid (int evt) { if (evt > INPUTEVENT_SPC_QUALIFIER_START && evt < INPUTEVENT_SPC_QUALIFIER_END) return evt - INPUTEVENT_SPC_QUALIFIER1; return -1; } static uae_u64 isqual (int evt) { int num = getqualid (evt); if (num < 0) return 0; return ID_FLAG_QUALIFIER1 << (num * 2); } static int handle_input_event (int nr, int state, int max, int autofire, bool canstopplayback, bool playbackevent) { #ifdef FSUAE if (inputdevice_logging) { write_log(" nr %d state %d max %d autofire %d " "canstopplayback %d playbackevent %d\n", nr, state, max, autofire, canstopplayback, playbackevent); } #endif struct inputevent *ie; int joy; bool isaks = false; if (nr <= 0 || nr == INPUTEVENT_SPC_CUSTOM_EVENT) return 0; #ifdef _WIN32 // ignore norrmal GUI event if forced gui key is in use if (currprefs.win32_guikey >= 0 && nr == INPUTEVENT_SPC_ENTERGUI) return 0; #endif ie = &events[nr]; if (isqual (nr)) return 0; // qualifiers do nothing if (ie->unit == 0 && ie->data >= AKS_FIRST) { isaks = true; if (!state) // release AKS_ does nothing return 0; } if (!isaks) { if (input_record && input_record != INPREC_RECORD_PLAYING) inprec_recordevent (nr, state, max, autofire); if (input_play && state && canstopplayback) { if (inprec_realtime ()) { if (input_record && input_record != INPREC_RECORD_PLAYING) inprec_recordevent (nr, state, max, autofire); } } if (!playbackevent && input_play) return 0; } if ((inputdevice_logging & 1) || input_record || input_play) write_log (_T("STATE=%05d MAX=%05d AF=%d QUAL=%06x '%s' \n"), state, max, autofire, (uae_u32)(qualifiers >> 32), ie->name); if (autofire) { if (state) queue_input_event (nr, NULL, state, max, currprefs.input_autofire_linecnt, 1); else queue_input_event (nr, NULL, -1, 0, 0, 1); } switch (ie->unit) { case 5: /* lightpen/gun */ { if (!lightpen_active) { lightpen_x = gfxvidinfo.outbuffer->outwidth / 2; lightpen_y = gfxvidinfo.outbuffer->outheight / 2; } lightpen_active = true; if (ie->type == 0) { int delta = 0; if (max == 0) delta = state * currprefs.input_mouse_speed / 100; else if (state > 0) delta = currprefs.input_joymouse_speed; else if (state < 0) delta = -currprefs.input_joymouse_speed; if (ie->data) lightpen_y += delta; else lightpen_x += delta; } else { int delta = currprefs.input_joymouse_speed; if (ie->data & DIR_LEFT) lightpen_x -= delta; if (ie->data & DIR_RIGHT) lightpen_x += delta; if (ie->data & DIR_UP) lightpen_y -= delta; if (ie->data & DIR_DOWN) lightpen_y += delta; } } break; case 1: /* ->JOY1 */ case 2: /* ->JOY2 */ case 3: /* ->Parallel port joystick adapter port #1 */ case 4: /* ->Parallel port joystick adapter port #2 */ joy = ie->unit - 1; if (ie->type & 4) { int old = joybutton[joy] & (1 << ie->data); if (state) { joybutton[joy] |= 1 << ie->data; gui_gameport_button_change (joy, ie->data, 1); } else { joybutton[joy] &= ~(1 << ie->data); gui_gameport_button_change (joy, ie->data, 0); } if (ie->data == 0 && old != (joybutton[joy] & (1 << ie->data)) && currprefs.cpu_cycle_exact) { if (!input_record && !input_play && currprefs.input_contact_bounce) { // emulate contact bounce, 1st button only, others have capacitors bouncy = 1; bouncy_cycles = get_cycles () + CYCLE_UNIT * currprefs.input_contact_bounce; } } } else if (ie->type & 8) { /* real mouse / analog stick mouse emulation */ int delta; int deadzone = currprefs.input_joymouse_deadzone * max / 100; int unit = ie->data & 0x7f; if (max) { if (state <= deadzone && state >= -deadzone) { state = 0; mouse_deltanoreset[joy][unit] = 0; } else if (state < 0) { state += deadzone; mouse_deltanoreset[joy][unit] = 1; } else { state -= deadzone; mouse_deltanoreset[joy][unit] = 1; } max -= deadzone; delta = state * currprefs.input_joymouse_multiplier / max; } else { delta = state; mouse_deltanoreset[joy][unit] = 0; } if (ie->data & IE_CDTV) { delta = 0; if (state > 0) delta = JOYMOUSE_CDTV; else if (state < 0) delta = -JOYMOUSE_CDTV; } if (ie->data & IE_INVERT) delta = -delta; if (max) mouse_delta[joy][unit] = delta; else mouse_delta[joy][unit] += delta; max = 32; if (unit) { if (delta < 0) { gui_gameport_axis_change (joy, DIR_UP_BIT, abs (delta), max); gui_gameport_axis_change (joy, DIR_DOWN_BIT, 0, max); } if (delta > 0) { gui_gameport_axis_change (joy, DIR_DOWN_BIT, abs (delta), max); gui_gameport_axis_change (joy, DIR_UP_BIT, 0, max); } } else { if (delta < 0) { gui_gameport_axis_change (joy, DIR_LEFT_BIT, abs (delta), max); gui_gameport_axis_change (joy, DIR_RIGHT_BIT, 0, max); } if (delta > 0) { gui_gameport_axis_change (joy, DIR_RIGHT_BIT, abs (delta), max); gui_gameport_axis_change (joy, DIR_LEFT_BIT, 0, max); } } } else if (ie->type & 32) { /* button mouse emulation vertical */ int speed = (ie->data & IE_CDTV) ? JOYMOUSE_CDTV : currprefs.input_joymouse_speed; if (state && (ie->data & DIR_UP)) { mouse_delta[joy][1] = -speed; mouse_deltanoreset[joy][1] = 1; } else if (state && (ie->data & DIR_DOWN)) { mouse_delta[joy][1] = speed; mouse_deltanoreset[joy][1] = 1; } else mouse_deltanoreset[joy][1] = 0; } else if (ie->type & 64) { /* button mouse emulation horizontal */ int speed = (ie->data & IE_CDTV) ? JOYMOUSE_CDTV : currprefs.input_joymouse_speed; if (state && (ie->data & DIR_LEFT)) { mouse_delta[joy][0] = -speed; mouse_deltanoreset[joy][0] = 1; } else if (state && (ie->data & DIR_RIGHT)) { mouse_delta[joy][0] = speed; mouse_deltanoreset[joy][0] = 1; } else mouse_deltanoreset[joy][0] = 0; } else if (ie->type & 128) { /* analog joystick / paddle */ int deadzone = currprefs.input_joymouse_deadzone * max / 100; int unit = ie->data & 0x7f; if (max) { if (state <= deadzone && state >= -deadzone) { state = 0; } else if (state < 0) { state += deadzone; } else { state -= deadzone; } state = state * max / (max - deadzone); } if (ie->data & IE_INVERT) state = -state; if (!unit) { if (state <= 0) gui_gameport_axis_change (joy, DIR_UP_BIT, abs (state), max); if (state >= 0) gui_gameport_axis_change (joy, DIR_DOWN_BIT, abs (state), max); } else { if (state <= 0) gui_gameport_axis_change (joy, DIR_LEFT_BIT, abs (state), max); if (state >= 0) gui_gameport_axis_change (joy, DIR_RIGHT_BIT, abs (state), max); } state = state * currprefs.input_analog_joystick_mult / max; state += (128 * currprefs.input_analog_joystick_mult / 100) + currprefs.input_analog_joystick_offset; if (state < 0) state = 0; if (state > 255) state = 255; joydirpot[joy][unit] = state; mouse_deltanoreset[joy][0] = 1; mouse_deltanoreset[joy][1] = 1; } else { int left = oleft[joy], right = oright[joy], top = otop[joy], bot = obot[joy]; if (ie->type & 16) { /* button to axis mapping */ if (ie->data & DIR_LEFT) { left = oleft[joy] = state ? 1 : 0; if (horizclear[joy] && left) { horizclear[joy] = 0; right = oright[joy] = 0; } } if (ie->data & DIR_RIGHT) { right = oright[joy] = state ? 1 : 0; if (horizclear[joy] && right) { horizclear[joy] = 0; left = oleft[joy] = 0; } } if (ie->data & DIR_UP) { top = otop[joy] = state ? 1 : 0; if (vertclear[joy] && top) { vertclear[joy] = 0; bot = obot[joy] = 0; } } if (ie->data & DIR_DOWN) { bot = obot[joy] = state ? 1 : 0; if (vertclear[joy] && bot) { vertclear[joy] = 0; top = otop[joy] = 0; } } } else { /* "normal" joystick axis */ int deadzone = currprefs.input_joystick_deadzone * max / 100; int neg, pos; if (state < deadzone && state > -deadzone) state = 0; neg = state < 0 ? 1 : 0; pos = state > 0 ? 1 : 0; if (ie->data & DIR_LEFT) { left = oleft[joy] = neg; if (horizclear[joy] && left) { horizclear[joy] = 0; right = oright[joy] = 0; } } if (ie->data & DIR_RIGHT) { right = oright[joy] = pos; if (horizclear[joy] && right) { horizclear[joy] = 0; left = oleft[joy] = 0; } } if (ie->data & DIR_UP) { top = otop[joy] = neg; if (vertclear[joy] && top) { vertclear[joy] = 0; bot = obot[joy] = 0; } } if (ie->data & DIR_DOWN) { bot = obot[joy] = pos; if (vertclear[joy] && bot) { vertclear[joy] = 0; top = otop[joy] = 0; } } } mouse_deltanoreset[joy][0] = 1; mouse_deltanoreset[joy][1] = 1; joydir[joy] = 0; if (left) joydir[joy] |= DIR_LEFT; if (right) joydir[joy] |= DIR_RIGHT; if (top) joydir[joy] |= DIR_UP; if (bot) joydir[joy] |= DIR_DOWN; if (joy == 0 || joy == 1) joymousecounter (joy); gui_gameport_axis_change (joy, DIR_LEFT_BIT, left, 0); gui_gameport_axis_change (joy, DIR_RIGHT_BIT, right, 0); gui_gameport_axis_change (joy, DIR_UP_BIT, top, 0); gui_gameport_axis_change (joy, DIR_DOWN_BIT, bot, 0); } break; case 0: /* ->KEY */ inputdevice_do_keyboard (ie->data, state); break; } return 1; } static void inputdevice_checkconfig (void) { if ( currprefs.jports[0].id != changed_prefs.jports[0].id || currprefs.jports[1].id != changed_prefs.jports[1].id || currprefs.jports[2].id != changed_prefs.jports[2].id || currprefs.jports[3].id != changed_prefs.jports[3].id || currprefs.jports[0].mode != changed_prefs.jports[0].mode || currprefs.jports[1].mode != changed_prefs.jports[1].mode || currprefs.jports[2].mode != changed_prefs.jports[2].mode || currprefs.jports[3].mode != changed_prefs.jports[3].mode || currprefs.input_selected_setting != changed_prefs.input_selected_setting || currprefs.input_joymouse_multiplier != changed_prefs.input_joymouse_multiplier || currprefs.input_joymouse_deadzone != changed_prefs.input_joymouse_deadzone || currprefs.input_joystick_deadzone != changed_prefs.input_joystick_deadzone || currprefs.input_joymouse_speed != changed_prefs.input_joymouse_speed || currprefs.input_autofire_linecnt != changed_prefs.input_autofire_linecnt || currprefs.input_mouse_speed != changed_prefs.input_mouse_speed) { currprefs.input_selected_setting = changed_prefs.input_selected_setting; currprefs.input_joymouse_multiplier = changed_prefs.input_joymouse_multiplier; currprefs.input_joymouse_deadzone = changed_prefs.input_joymouse_deadzone; currprefs.input_joystick_deadzone = changed_prefs.input_joystick_deadzone; currprefs.input_joymouse_speed = changed_prefs.input_joymouse_speed; currprefs.input_autofire_linecnt = changed_prefs.input_autofire_linecnt; currprefs.input_mouse_speed = changed_prefs.input_mouse_speed; inputdevice_updateconfig (&changed_prefs, &currprefs); } if (currprefs.dongle != changed_prefs.dongle) { currprefs.dongle = changed_prefs.dongle; dongle_reset (); } } void inputdevice_vsync (void) { if (inputdevice_logging & 32) write_log (_T("*\n")); input_frame++; mouseupdate (0, true); if (!input_record) { inputdevice_read (); if (!input_play) inputdelay = uaerand () % (maxvpos <= 1 ? 1 : maxvpos - 1); } inputdevice_handle_inputcode (); if (mouseedge_alive > 0) mouseedge_alive--; #ifdef ARCADIA if (arcadia_bios) arcadia_vsync (); #endif if (mouseedge ()) mouseedge_alive = 10; if (mousehack_alive_cnt > 0) { mousehack_alive_cnt--; if (mousehack_alive_cnt == 0) setmouseactive (-1); } else if (mousehack_alive_cnt < 0) { mousehack_alive_cnt++; if (mousehack_alive_cnt == 0) { mousehack_alive_cnt = 100; setmouseactive (0); setmouseactive (1); } } inputdevice_checkconfig (); } void inputdevice_reset (void) { magicmouse_ibase = 0; magicmouse_gfxbase = 0; mousehack_reset (); if (inputdevice_is_tablet ()) mousehack_enable (); bouncy = 0; potgo_value = 0; } static int getoldport (struct uae_input_device *id) { int i, j; for (i = 0; i < MAX_INPUT_DEVICE_EVENTS; i++) { for (j = 0; j < MAX_INPUT_SUB_EVENT; j++) { int evt = id->eventid[i][j]; if (evt > 0) { int unit = events[evt].unit; if (unit >= 1 && unit <= 4) return unit; } } } return -1; } static int switchdevice (struct uae_input_device *id, int num, bool buttonmode) { int i, j; int ismouse = 0; int newport = 0; int flags = 0; TCHAR *name = NULL; int otherbuttonpressed = 0; if (num >= 4) return 0; #ifdef RETROPLATFORM if (rp_isactive ()) return 0; #endif for (i = 0; i < MAX_INPUT_DEVICES; i++) { if (id == &joysticks[i]) { name = idev[IDTYPE_JOYSTICK].get_uniquename (i); newport = num == 0 ? 1 : 0; flags = idev[IDTYPE_JOYSTICK].get_flags (i); for (j = 0; j < MAX_INPUT_DEVICES; j++) { if (j != i) { struct uae_input_device2 *id2 = &joysticks2[j]; if (id2->buttonmask) otherbuttonpressed = 1; } } } if (id == &mice[i]) { ismouse = 1; name = idev[IDTYPE_MOUSE].get_uniquename (i); newport = num == 0 ? 0 : 1; flags = idev[IDTYPE_MOUSE].get_flags (i); } } if (!name) return 0; if (buttonmode) { if (num == 0 && otherbuttonpressed) newport = newport ? 0 : 1; } else { newport = num ? 1 : 0; } /* "GamePorts" switch if in GamePorts mode or Input mode and GamePorts port was not NONE */ if (currprefs.input_selected_setting == GAMEPORT_INPUT_SETTINGS || currprefs.jports[newport].id != JPORT_NONE) { if ((num == 0 || num == 1) && currprefs.jports[newport].id != JPORT_CUSTOM) { int om = jsem_ismouse (num, &currprefs); int om1 = jsem_ismouse (0, &currprefs); int om2 = jsem_ismouse (1, &currprefs); if ((om1 >= 0 || om2 >= 0) && ismouse) return 0; if (flags) return 0; if (name) { write_log (_T("inputdevice change '%s':%d->%d\n"), name, num, newport); inputdevice_joyport_config (&changed_prefs, name, newport, -1, 2); inputdevice_copyconfig (&changed_prefs, &currprefs); return 1; } } return 0; } else { int oldport = getoldport (id); int k, evt; struct inputevent *ie, *ie2; if (flags) return 0; if (oldport <= 0) return 0; newport++; /* do not switch if switching mouse and any "supermouse" mouse enabled */ if (ismouse) { for (i = 0; i < MAX_INPUT_SETTINGS; i++) { if (mice[i].enabled && idev[IDTYPE_MOUSE].get_flags (i)) return 0; } } for (i = 0; i < MAX_INPUT_SETTINGS; i++) { if (getoldport (&joysticks[i]) == newport) joysticks[i].enabled = 0; if (getoldport (&mice[i]) == newport) mice[i].enabled = 0; } id->enabled = 1; for (i = 0; i < MAX_INPUT_DEVICE_EVENTS; i++) { for (j = 0; j < MAX_INPUT_SUB_EVENT; j++) { evt = id->eventid[i][j]; if (evt <= 0) continue; ie = &events[evt]; if (ie->unit == oldport) { k = 1; while (events[k].confname) { ie2 = &events[k]; if (ie2->type == ie->type && ie2->data == ie->data && ie2->allow_mask == ie->allow_mask && ie2->unit == newport) { id->eventid[i][j] = k; break; } k++; } } else if (ie->unit == newport) { k = 1; while (events[k].confname) { ie2 = &events[k]; if (ie2->type == ie->type && ie2->data == ie->data && ie2->allow_mask == ie->allow_mask && ie2->unit == oldport) { id->eventid[i][j] = k; break; } k++; } } } } write_log (_T("inputdevice change '%s':%d->%d\n"), name, num, newport); inputdevice_copyconfig (&currprefs, &changed_prefs); inputdevice_copyconfig (&changed_prefs, &currprefs); return 1; } return 0; } uae_u64 input_getqualifiers (void) { return qualifiers; } static bool checkqualifiers (int evt, uae_u64 flags, uae_u64 *qualmask, uae_s16 events[MAX_INPUT_SUB_EVENT_ALL]) { int i, j; int qualid = getqualid (evt); int nomatch = 0; bool isspecial = (qualifiers & (ID_FLAG_QUALIFIER_SPECIAL | ID_FLAG_QUALIFIER_SPECIAL_R)) != 0; flags &= ID_FLAG_QUALIFIER_MASK; if (qualid >= 0 && events) qualifiers_evt[qualid] = events; /* special set and new qualifier pressed? do not sent it to Amiga-side */ if ((qualifiers & (ID_FLAG_QUALIFIER_SPECIAL | ID_FLAG_QUALIFIER_SPECIAL_R)) && qualid >= 0) return false; for (i = 0; i < MAX_INPUT_SUB_EVENT; i++) { if (qualmask[i]) break; } if (i == MAX_INPUT_SUB_EVENT) { // no qualifiers in any slot and no special = always match return isspecial == false; } for (i = 0; i < MAX_INPUT_SUB_EVENT; i++) { for (j = 0; j < MAX_INPUT_QUALIFIERS; j++) { uae_u64 mask = (ID_FLAG_QUALIFIER1 | ID_FLAG_QUALIFIER1_R) << (j * 2); bool isqualmask = (qualmask[i] & mask) != 0; bool isqual = (qualifiers & mask) != 0; if (isqualmask != isqual) { nomatch++; break; } } } if (nomatch == MAX_INPUT_SUB_EVENT) { // no matched qualifiers in any slot // allow all slots without qualifiers // special = never accept if (isspecial) return false; return flags ? false : true; } for (i = 0; i < MAX_INPUT_QUALIFIERS; i++) { uae_u64 mask = (ID_FLAG_QUALIFIER1 | ID_FLAG_QUALIFIER1_R) << (i * 2); bool isflags = (flags & mask) != 0; bool isqual = (qualifiers & mask) != 0; if (isflags != isqual) return false; } return true; } static void setqualifiers (int evt, int state) { uae_u64 mask = isqual (evt); if (!mask) return; if (state) qualifiers |= mask; else qualifiers &= ~mask; //write_log (_T("%llx\n"), qualifiers); } static uae_u64 getqualmask (uae_u64 *qualmask, struct uae_input_device *id, int num, bool *qualonly) { uae_u64 mask = 0, mask2 = 0; for (int i = 0; i < MAX_INPUT_SUB_EVENT; i++) { int evt = id->eventid[num][i]; mask |= id->flags[num][i]; qualmask[i] = id->flags[num][i] & ID_FLAG_QUALIFIER_MASK; mask2 |= isqual (evt); } mask &= ID_FLAG_QUALIFIER_MASK; *qualonly = false; if (qualifiers & ID_FLAG_QUALIFIER_SPECIAL) { // ID_FLAG_QUALIFIER_SPECIAL already active and this event has one or more qualifiers configured *qualonly = mask2 != 0; } return mask; } static bool process_custom_event (struct uae_input_device *id, int offset, int state, uae_u64 *qualmask, int autofire, int sub) { int idx, slotoffset, custompos; TCHAR *custom; uae_u64 flags, qual; if (!id) return false; slotoffset = sub & ~3; sub &= 3; flags = id->flags[offset][slotoffset]; qual = flags & ID_FLAG_QUALIFIER_MASK; custom = id->custom[offset][slotoffset]; int af = flags & ID_FLAG_AUTOFIRE_MASK; for (idx = 1; idx < 4; idx++) { uae_u64 flags2 = id->flags[offset][slotoffset + idx]; TCHAR *custom2 = id->custom[offset][slotoffset + idx]; // all slots must have same qualifier if ((flags2 & ID_FLAG_QUALIFIER_MASK) != qual) break; // no slot must have autofire if ((flags2 & ID_FLAG_AUTOFIRE_MASK) || (flags & ID_FLAG_AUTOFIRE_MASK)) break; } // at least slot 0 and 2 must have custom if (custom == NULL || id->custom[offset][slotoffset + 2] == NULL) idx = -1; if (idx < 4) { id->flags[offset][slotoffset] &= ~(ID_FLAG_CUSTOMEVENT_TOGGLED1 | ID_FLAG_CUSTOMEVENT_TOGGLED2); int evt2 = id->eventid[offset][slotoffset + sub]; uae_u64 flags2 = id->flags[offset][slotoffset + sub]; if (checkqualifiers (evt2, flags2, qualmask, NULL)) { custom = id->custom[offset][slotoffset + sub]; if (state && custom) { if (autofire) queue_input_event (-1, custom, 1, 1, currprefs.input_autofire_linecnt, 1); handle_custom_event (custom); return true; } } return false; } if (sub != 0) return false; slotoffset = 0; if (!checkqualifiers (id->eventid[offset][slotoffset], id->flags[offset][slotoffset], qualmask, NULL)) { slotoffset = 4; if (!checkqualifiers (id->eventid[offset][slotoffset], id->flags[offset][slotoffset], qualmask, NULL)) return false; } flags = id->flags[offset][slotoffset]; custompos = (flags & ID_FLAG_CUSTOMEVENT_TOGGLED1) ? 1 : 0; custompos |= (flags & ID_FLAG_CUSTOMEVENT_TOGGLED2) ? 2 : 0; if (state < 0) { idx = 0; custompos = 0; } else { if (state > 0) { if (custompos & 1) return false; // waiting for release } else { if (!(custompos & 1)) return false; // waiting for press } idx = custompos; custompos++; } queue_input_event (-1, NULL, -1, 0, 0, 1); if ((id->flags[offset][slotoffset + idx] & ID_FLAG_QUALIFIER_MASK) == qual) { custom = id->custom[offset][slotoffset + idx]; if (autofire) queue_input_event (-1, custom, 1, 1, currprefs.input_autofire_linecnt, 1); if (custom) handle_custom_event (custom); } id->flags[offset][slotoffset] &= ~(ID_FLAG_CUSTOMEVENT_TOGGLED1 | ID_FLAG_CUSTOMEVENT_TOGGLED2); id->flags[offset][slotoffset] |= (custompos & 1) ? ID_FLAG_CUSTOMEVENT_TOGGLED1 : 0; id->flags[offset][slotoffset] |= (custompos & 2) ? ID_FLAG_CUSTOMEVENT_TOGGLED2 : 0; return true; } static void setbuttonstateall (struct uae_input_device *id, struct uae_input_device2 *id2, int button, int state) { static frame_time_t switchdevice_timeout; int i; uae_u32 mask = 1 << button; uae_u32 omask = id2 ? id2->buttonmask & mask : 0; uae_u32 nmask = (state ? 1 : 0) << button; uae_u64 qualmask[MAX_INPUT_SUB_EVENT]; bool qualonly; if (input_play && state) inprec_realtime (); if (input_play) return; if (!id->enabled) { frame_time_t t = read_processor_time (); if (state) { switchdevice_timeout = t; } else { int port = button; if (t - switchdevice_timeout >= syncbase) // 1s port ^= 1; switchdevice (id, port, true); } return; } if (button >= ID_BUTTON_TOTAL) return; getqualmask (qualmask, id, ID_BUTTON_OFFSET + button, &qualonly); bool didcustom = false; for (i = 0; i < MAX_INPUT_SUB_EVENT; i++) { int sub = sublevdir[state == 0 ? 1 : 0][i]; uae_u64 *flagsp = &id->flags[ID_BUTTON_OFFSET + button][sub]; int evt = id->eventid[ID_BUTTON_OFFSET + button][sub]; TCHAR *custom = id->custom[ID_BUTTON_OFFSET + button][sub]; uae_u64 flags = flagsp[0]; int autofire = (flags & ID_FLAG_AUTOFIRE) ? 1 : 0; int toggle = (flags & ID_FLAG_TOGGLE) ? 1 : 0; int inverttoggle = (flags & ID_FLAG_INVERTTOGGLE) ? 1 : 0; if (!state) { didcustom |= process_custom_event (id, ID_BUTTON_OFFSET + button, state, qualmask, autofire, i); } setqualifiers (evt, state > 0); if (qualonly) continue; if (state < 0) { if (!checkqualifiers (evt, flags, qualmask, NULL)) continue; handle_input_event (evt, 1, 1, 0, true, false); didcustom |= process_custom_event (id, ID_BUTTON_OFFSET + button, state, qualmask, 0, i); } else if (inverttoggle) { /* pressed = firebutton, not pressed = autofire */ if (state) { queue_input_event (evt, NULL, -1, 0, 0, 1); handle_input_event (evt, 1, 1, 0, true, false); } else { handle_input_event (evt, 1, 1, autofire, true, false); } didcustom |= process_custom_event (id, ID_BUTTON_OFFSET + button, state, qualmask, autofire, i); } else if (toggle) { if (!state) continue; if (omask & mask) continue; if (!checkqualifiers (evt, flags, qualmask, NULL)) continue; *flagsp ^= ID_FLAG_TOGGLED; int toggled = (*flagsp & ID_FLAG_TOGGLED) ? 1 : 0; handle_input_event (evt, toggled, 1, autofire, true, false); didcustom |= process_custom_event (id, ID_BUTTON_OFFSET + button, toggled, qualmask, autofire, i); } else { if (!checkqualifiers (evt, flags, qualmask, NULL)) { if (!state && !(flags & ID_FLAG_CANRELEASE)) { continue; } else if (state) { continue; } } if (!state) *flagsp &= ~ID_FLAG_CANRELEASE; else *flagsp |= ID_FLAG_CANRELEASE; if ((omask ^ nmask) & mask) { handle_input_event (evt, state, 1, autofire, true, false); if (state) didcustom |= process_custom_event (id, ID_BUTTON_OFFSET + button, state, qualmask, autofire, i); } } } if (!didcustom) queue_input_event (-1, NULL, -1, 0, 0, 1); if (id2 && ((omask ^ nmask) & mask)) { if (state) id2->buttonmask |= mask; else id2->buttonmask &= ~mask; } } /* - detect required number of joysticks and mice from configuration data * - detect if CD32 pad emulation is needed * - detect device type in ports (mouse or joystick) */ static int iscd32 (int ei) { if (ei >= INPUTEVENT_JOY1_CD32_FIRST && ei <= INPUTEVENT_JOY1_CD32_LAST) { cd32_pad_enabled[0] = 1; return 1; } if (ei >= INPUTEVENT_JOY2_CD32_FIRST && ei <= INPUTEVENT_JOY2_CD32_LAST) { cd32_pad_enabled[1] = 1; return 2; } return 0; } static int isparport (int ei) { if (ei > INPUTEVENT_PAR_JOY1_START && ei < INPUTEVENT_PAR_JOY_END) { parport_joystick_enabled = 1; return 1; } return 0; } static int ismouse (int ei) { if (ei >= INPUTEVENT_MOUSE1_FIRST && ei <= INPUTEVENT_MOUSE1_LAST) { mouse_port[0] = 1; return 1; } if (ei >= INPUTEVENT_MOUSE2_FIRST && ei <= INPUTEVENT_MOUSE2_LAST) { mouse_port[1] = 1; return 2; } return 0; } static int isanalog (int ei) { if (ei == INPUTEVENT_JOY1_HORIZ_POT || ei == INPUTEVENT_JOY1_HORIZ_POT_INV) { analog_port[0][0] = 1; return 1; } if (ei == INPUTEVENT_JOY1_VERT_POT || ei == INPUTEVENT_JOY1_VERT_POT_INV) { analog_port[0][1] = 1; return 1; } if (ei == INPUTEVENT_JOY2_HORIZ_POT || ei == INPUTEVENT_JOY2_HORIZ_POT_INV) { analog_port[1][0] = 1; return 1; } if (ei == INPUTEVENT_JOY2_VERT_POT || ei == INPUTEVENT_JOY2_VERT_POT_INV) { analog_port[1][1] = 1; return 1; } return 0; } static int isdigitalbutton (int ei) { if (ei == INPUTEVENT_JOY1_2ND_BUTTON) { digital_port[0][1] = 1; return 1; } if (ei == INPUTEVENT_JOY1_3RD_BUTTON) { digital_port[0][0] = 1; return 1; } if (ei == INPUTEVENT_JOY2_2ND_BUTTON) { digital_port[1][1] = 1; return 1; } if (ei == INPUTEVENT_JOY2_3RD_BUTTON) { digital_port[1][0] = 1; return 1; } return 0; } static int islightpen (int ei) { if (ei >= INPUTEVENT_LIGHTPEN_FIRST && ei < INPUTEVENT_LIGHTPEN_LAST) { lightpen = 1; return 1; } return 0; } static void isqualifier (int ei) { } static void scanevents (struct uae_prefs *p) { int i, j, k, ei; const struct inputevent *e; int n_joy = idev[IDTYPE_JOYSTICK].get_num (); int n_mouse = idev[IDTYPE_MOUSE].get_num (); cd32_pad_enabled[0] = cd32_pad_enabled[1] = 0; parport_joystick_enabled = 0; mouse_port[0] = mouse_port[1] = 0; qualifiers = 0; for (i = 0; i < NORMAL_JPORTS; i++) { for (j = 0; j < 2; j++) { digital_port[i][j] = 0; analog_port[i][j] = 0; joydirpot[i][j] = 128 / (312 * 100 / currprefs.input_analog_joystick_mult) + (128 * currprefs.input_analog_joystick_mult / 100) + currprefs.input_analog_joystick_offset; } } lightpen = 0; if (lightpen_active > 0) lightpen_active = -1; for (i = 0; i < MAX_INPUT_DEVICES; i++) { use_joysticks[i] = 0; use_mice[i] = 0; for (k = 0; k < MAX_INPUT_SUB_EVENT; k++) { for (j = 0; j < ID_BUTTON_TOTAL; j++) { if ((joysticks[i].enabled && i < n_joy) || joysticks[i].enabled < 0) { ei = joysticks[i].eventid[ID_BUTTON_OFFSET + j][k]; e = &events[ei]; iscd32 (ei); isparport (ei); ismouse (ei); isdigitalbutton (ei); isqualifier (ei); islightpen (ei); if (joysticks[i].eventid[ID_BUTTON_OFFSET + j][k] > 0) use_joysticks[i] = 1; } if ((mice[i].enabled && i < n_mouse) || mice[i].enabled < 0) { ei = mice[i].eventid[ID_BUTTON_OFFSET + j][k]; e = &events[ei]; iscd32 (ei); isparport (ei); ismouse (ei); isdigitalbutton (ei); isqualifier (ei); islightpen (ei); if (mice[i].eventid[ID_BUTTON_OFFSET + j][k] > 0) use_mice[i] = 1; } } for (j = 0; j < ID_AXIS_TOTAL; j++) { if ((joysticks[i].enabled && i < n_joy) || joysticks[i].enabled < 0) { ei = joysticks[i].eventid[ID_AXIS_OFFSET + j][k]; iscd32 (ei); isparport (ei); ismouse (ei); isanalog (ei); isdigitalbutton (ei); isqualifier (ei); islightpen (ei); if (ei > 0) use_joysticks[i] = 1; } if ((mice[i].enabled && i < n_mouse) || mice[i].enabled < 0) { ei = mice[i].eventid[ID_AXIS_OFFSET + j][k]; iscd32 (ei); isparport (ei); ismouse (ei); isanalog (ei); isdigitalbutton (ei); isqualifier (ei); islightpen (ei); if (ei > 0) use_mice[i] = 1; } } } } memset (scancodeused, 0, sizeof scancodeused); for (i = 0; i < MAX_INPUT_DEVICES; i++) { use_keyboards[i] = 0; if (keyboards[i].enabled && i < idev[IDTYPE_KEYBOARD].get_num ()) { j = 0; while (j < MAX_INPUT_DEVICE_EVENTS && keyboards[i].extra[j] >= 0) { use_keyboards[i] = 1; for (k = 0; k < MAX_INPUT_SUB_EVENT; k++) { ei = keyboards[i].eventid[j][k]; iscd32 (ei); isparport (ei); ismouse (ei); isdigitalbutton (ei); isqualifier (ei); islightpen (ei); if (ei > 0) scancodeused[i][keyboards[i].extra[j]] = ei; } j++; } } } } static int axistable[] = { INPUTEVENT_MOUSE1_HORIZ, INPUTEVENT_MOUSE1_LEFT, INPUTEVENT_MOUSE1_RIGHT, INPUTEVENT_MOUSE1_VERT, INPUTEVENT_MOUSE1_UP, INPUTEVENT_MOUSE1_DOWN, INPUTEVENT_MOUSE2_HORIZ, INPUTEVENT_MOUSE2_LEFT, INPUTEVENT_MOUSE2_RIGHT, INPUTEVENT_MOUSE2_VERT, INPUTEVENT_MOUSE2_UP, INPUTEVENT_MOUSE2_DOWN, INPUTEVENT_JOY1_HORIZ, INPUTEVENT_JOY1_LEFT, INPUTEVENT_JOY1_RIGHT, INPUTEVENT_JOY1_VERT, INPUTEVENT_JOY1_UP, INPUTEVENT_JOY1_DOWN, INPUTEVENT_JOY2_HORIZ, INPUTEVENT_JOY2_LEFT, INPUTEVENT_JOY2_RIGHT, INPUTEVENT_JOY2_VERT, INPUTEVENT_JOY2_UP, INPUTEVENT_JOY2_DOWN, INPUTEVENT_LIGHTPEN_HORIZ, INPUTEVENT_LIGHTPEN_LEFT, INPUTEVENT_LIGHTPEN_RIGHT, INPUTEVENT_LIGHTPEN_VERT, INPUTEVENT_LIGHTPEN_UP, INPUTEVENT_LIGHTPEN_DOWN, INPUTEVENT_PAR_JOY1_HORIZ, INPUTEVENT_PAR_JOY1_LEFT, INPUTEVENT_PAR_JOY1_RIGHT, INPUTEVENT_PAR_JOY1_VERT, INPUTEVENT_PAR_JOY1_UP, INPUTEVENT_PAR_JOY1_DOWN, INPUTEVENT_PAR_JOY2_HORIZ, INPUTEVENT_PAR_JOY2_LEFT, INPUTEVENT_PAR_JOY2_RIGHT, INPUTEVENT_PAR_JOY2_VERT, INPUTEVENT_PAR_JOY2_UP, INPUTEVENT_PAR_JOY2_DOWN, INPUTEVENT_MOUSE_CDTV_HORIZ, INPUTEVENT_MOUSE_CDTV_LEFT, INPUTEVENT_MOUSE_CDTV_RIGHT, INPUTEVENT_MOUSE_CDTV_VERT, INPUTEVENT_MOUSE_CDTV_UP, INPUTEVENT_MOUSE_CDTV_DOWN, -1 }; int intputdevice_compa_get_eventtype (int evt, int **axistablep) { for (int i = 0; axistable[i] >= 0; i += 3) { *axistablep = &axistable[i]; if (axistable[i] == evt) return IDEV_WIDGET_AXIS; if (axistable[i + 1] == evt) return IDEV_WIDGET_BUTTONAXIS; if (axistable[i + 2] == evt) return IDEV_WIDGET_BUTTONAXIS; } *axistablep = NULL; return IDEV_WIDGET_BUTTON; } static int rem_port1[] = { INPUTEVENT_MOUSE1_HORIZ, INPUTEVENT_MOUSE1_VERT, INPUTEVENT_JOY1_HORIZ, INPUTEVENT_JOY1_VERT, INPUTEVENT_JOY1_HORIZ_POT, INPUTEVENT_JOY1_VERT_POT, INPUTEVENT_JOY1_FIRE_BUTTON, INPUTEVENT_JOY1_2ND_BUTTON, INPUTEVENT_JOY1_3RD_BUTTON, INPUTEVENT_JOY1_CD32_RED, INPUTEVENT_JOY1_CD32_BLUE, INPUTEVENT_JOY1_CD32_GREEN, INPUTEVENT_JOY1_CD32_YELLOW, INPUTEVENT_JOY1_CD32_RWD, INPUTEVENT_JOY1_CD32_FFW, INPUTEVENT_JOY1_CD32_PLAY, INPUTEVENT_MOUSE_CDTV_HORIZ, INPUTEVENT_MOUSE_CDTV_VERT, INPUTEVENT_LIGHTPEN_HORIZ, INPUTEVENT_LIGHTPEN_VERT, -1 }; static int rem_port2[] = { INPUTEVENT_MOUSE2_HORIZ, INPUTEVENT_MOUSE2_VERT, INPUTEVENT_JOY2_HORIZ, INPUTEVENT_JOY2_VERT, INPUTEVENT_JOY2_HORIZ_POT, INPUTEVENT_JOY2_VERT_POT, INPUTEVENT_JOY2_FIRE_BUTTON, INPUTEVENT_JOY2_2ND_BUTTON, INPUTEVENT_JOY2_3RD_BUTTON, INPUTEVENT_JOY2_CD32_RED, INPUTEVENT_JOY2_CD32_BLUE, INPUTEVENT_JOY2_CD32_GREEN, INPUTEVENT_JOY2_CD32_YELLOW, INPUTEVENT_JOY2_CD32_RWD, INPUTEVENT_JOY2_CD32_FFW, INPUTEVENT_JOY2_CD32_PLAY, -1, -1, -1, -1, -1 }; static int rem_port3[] = { INPUTEVENT_PAR_JOY1_LEFT, INPUTEVENT_PAR_JOY1_RIGHT, INPUTEVENT_PAR_JOY1_UP, INPUTEVENT_PAR_JOY1_DOWN, INPUTEVENT_PAR_JOY1_FIRE_BUTTON, INPUTEVENT_PAR_JOY1_2ND_BUTTON, -1 }; static int rem_port4[] = { INPUTEVENT_PAR_JOY2_LEFT, INPUTEVENT_PAR_JOY2_RIGHT, INPUTEVENT_PAR_JOY2_UP, INPUTEVENT_PAR_JOY2_DOWN, INPUTEVENT_PAR_JOY2_FIRE_BUTTON, INPUTEVENT_PAR_JOY2_2ND_BUTTON, -1 }; static int *rem_ports[] = { rem_port1, rem_port2, rem_port3, rem_port4 }; static int af_port1[] = { INPUTEVENT_JOY1_FIRE_BUTTON, INPUTEVENT_JOY1_CD32_RED, -1 }; static int af_port2[] = { INPUTEVENT_JOY2_FIRE_BUTTON, INPUTEVENT_JOY2_CD32_RED, -1 }; static int af_port3[] = { INPUTEVENT_PAR_JOY1_FIRE_BUTTON, INPUTEVENT_PAR_JOY1_2ND_BUTTON, -1 }; static int af_port4[] = { INPUTEVENT_PAR_JOY2_FIRE_BUTTON, INPUTEVENT_PAR_JOY2_2ND_BUTTON, -1 }; static int *af_ports[] = { af_port1, af_port2, af_port3, af_port4 }; static int ip_joy1[] = { INPUTEVENT_JOY1_LEFT, INPUTEVENT_JOY1_RIGHT, INPUTEVENT_JOY1_UP, INPUTEVENT_JOY1_DOWN, INPUTEVENT_JOY1_FIRE_BUTTON, INPUTEVENT_JOY1_2ND_BUTTON, -1 }; static int ip_joy2[] = { INPUTEVENT_JOY2_LEFT, INPUTEVENT_JOY2_RIGHT, INPUTEVENT_JOY2_UP, INPUTEVENT_JOY2_DOWN, INPUTEVENT_JOY2_FIRE_BUTTON, INPUTEVENT_JOY2_2ND_BUTTON, -1 }; static int ip_joypad1[] = { INPUTEVENT_JOY1_LEFT, INPUTEVENT_JOY1_RIGHT, INPUTEVENT_JOY1_UP, INPUTEVENT_JOY1_DOWN, INPUTEVENT_JOY1_FIRE_BUTTON, INPUTEVENT_JOY1_2ND_BUTTON, INPUTEVENT_JOY1_3RD_BUTTON, -1 }; static int ip_joypad2[] = { INPUTEVENT_JOY2_LEFT, INPUTEVENT_JOY2_RIGHT, INPUTEVENT_JOY2_UP, INPUTEVENT_JOY2_DOWN, INPUTEVENT_JOY2_FIRE_BUTTON, INPUTEVENT_JOY2_2ND_BUTTON, INPUTEVENT_JOY2_3RD_BUTTON, -1 }; static int ip_joycd321[] = { INPUTEVENT_JOY1_LEFT, INPUTEVENT_JOY1_RIGHT, INPUTEVENT_JOY1_UP, INPUTEVENT_JOY1_DOWN, INPUTEVENT_JOY1_CD32_RED, INPUTEVENT_JOY1_CD32_BLUE, INPUTEVENT_JOY1_CD32_GREEN, INPUTEVENT_JOY1_CD32_YELLOW, INPUTEVENT_JOY1_CD32_RWD, INPUTEVENT_JOY1_CD32_FFW, INPUTEVENT_JOY1_CD32_PLAY, -1 }; static int ip_joycd322[] = { INPUTEVENT_JOY2_LEFT, INPUTEVENT_JOY2_RIGHT, INPUTEVENT_JOY2_UP, INPUTEVENT_JOY2_DOWN, INPUTEVENT_JOY2_CD32_RED, INPUTEVENT_JOY2_CD32_BLUE, INPUTEVENT_JOY2_CD32_GREEN, INPUTEVENT_JOY2_CD32_YELLOW, INPUTEVENT_JOY2_CD32_RWD, INPUTEVENT_JOY2_CD32_FFW, INPUTEVENT_JOY2_CD32_PLAY, -1 }; static int ip_parjoy1[] = { INPUTEVENT_PAR_JOY1_LEFT, INPUTEVENT_PAR_JOY1_RIGHT, INPUTEVENT_PAR_JOY1_UP, INPUTEVENT_PAR_JOY1_DOWN, INPUTEVENT_PAR_JOY1_FIRE_BUTTON, INPUTEVENT_PAR_JOY1_2ND_BUTTON, -1 }; static int ip_parjoy2[] = { INPUTEVENT_PAR_JOY2_LEFT, INPUTEVENT_PAR_JOY2_RIGHT, INPUTEVENT_PAR_JOY2_UP, INPUTEVENT_PAR_JOY2_DOWN, INPUTEVENT_PAR_JOY2_FIRE_BUTTON, INPUTEVENT_PAR_JOY2_2ND_BUTTON, -1 }; static int ip_parjoy1default[] = { INPUTEVENT_PAR_JOY1_LEFT, INPUTEVENT_PAR_JOY1_RIGHT, INPUTEVENT_PAR_JOY1_UP, INPUTEVENT_PAR_JOY1_DOWN, INPUTEVENT_PAR_JOY1_FIRE_BUTTON, -1 }; static int ip_parjoy2default[] = { INPUTEVENT_PAR_JOY2_LEFT, INPUTEVENT_PAR_JOY2_RIGHT, INPUTEVENT_PAR_JOY2_UP, INPUTEVENT_PAR_JOY2_DOWN, INPUTEVENT_PAR_JOY2_FIRE_BUTTON, -1 }; static int ip_mouse1[] = { INPUTEVENT_MOUSE1_LEFT, INPUTEVENT_MOUSE1_RIGHT, INPUTEVENT_MOUSE1_UP, INPUTEVENT_MOUSE1_DOWN, INPUTEVENT_JOY1_FIRE_BUTTON, INPUTEVENT_JOY1_2ND_BUTTON, -1 }; static int ip_mouse2[] = { INPUTEVENT_MOUSE2_LEFT, INPUTEVENT_MOUSE2_RIGHT, INPUTEVENT_MOUSE2_UP, INPUTEVENT_MOUSE2_DOWN, INPUTEVENT_JOY2_FIRE_BUTTON, INPUTEVENT_JOY2_2ND_BUTTON, -1 }; static int ip_mousecdtv[] = { INPUTEVENT_MOUSE_CDTV_LEFT, INPUTEVENT_MOUSE_CDTV_RIGHT, INPUTEVENT_MOUSE_CDTV_UP, INPUTEVENT_MOUSE_CDTV_DOWN, INPUTEVENT_JOY1_FIRE_BUTTON, INPUTEVENT_JOY1_2ND_BUTTON, -1 }; static int ip_mediacdtv[] = { INPUTEVENT_KEY_CDTV_PLAYPAUSE, INPUTEVENT_KEY_CDTV_STOP, INPUTEVENT_KEY_CDTV_PREV, INPUTEVENT_KEY_CDTV_NEXT, -1 }; static int ip_arcadia[] = { INPUTEVENT_SPC_ARCADIA_DIAGNOSTICS, INPUTEVENT_SPC_ARCADIA_PLAYER1, INPUTEVENT_SPC_ARCADIA_PLAYER2, INPUTEVENT_SPC_ARCADIA_COIN1, INPUTEVENT_SPC_ARCADIA_COIN2, -1 }; static int ip_lightpen1[] = { INPUTEVENT_LIGHTPEN_HORIZ, INPUTEVENT_LIGHTPEN_VERT, INPUTEVENT_JOY1_3RD_BUTTON, -1 }; static int ip_lightpen2[] = { INPUTEVENT_LIGHTPEN_HORIZ, INPUTEVENT_LIGHTPEN_VERT, INPUTEVENT_JOY2_3RD_BUTTON, -1 }; static int ip_analog1[] = { INPUTEVENT_JOY1_HORIZ_POT, INPUTEVENT_JOY1_VERT_POT, INPUTEVENT_JOY1_LEFT, INPUTEVENT_JOY1_RIGHT, -1 }; static int ip_analog2[] = { INPUTEVENT_JOY2_HORIZ_POT, INPUTEVENT_JOY2_VERT_POT, INPUTEVENT_JOY2_LEFT, INPUTEVENT_JOY2_RIGHT, -1 }; static int ip_arcadiaxa[] = { -1 }; static void checkcompakb (int *kb, int *srcmap) { int found = 0, avail = 0; int j, k; k = j = 0; while (kb[j] >= 0) { struct uae_input_device *uid = &keyboards[0]; while (kb[j] >= 0 && srcmap[k] >= 0) { int id = kb[j]; for (int l = 0; l < MAX_INPUT_DEVICE_EVENTS; l++) { if (uid->extra[l] == id) { avail++; if (uid->eventid[l][0] == srcmap[k]) found++; break; } } j++; } if (srcmap[k] < 0) break; j++; k++; } if (avail != found || avail == 0) return; k = j = 0; while (kb[j] >= 0) { struct uae_input_device *uid = &keyboards[0]; while (kb[j] >= 0) { int id = kb[j]; int evt0 = 0, evt1 = 0; k = 0; while (keyboard_default[k].scancode >= 0) { if (keyboard_default[k].scancode == kb[j]) { for (int l = 0; l < MAX_INPUT_DEVICE_EVENTS; l++) { if (uid->extra[l] == id) { for (int m = 0; m < MAX_INPUT_SUB_EVENT && keyboard_default[k].node[m].evt; m++) { uid->eventid[l][m] = keyboard_default[k].node[m].evt; } break; } } break; } k++; } j++; } j++; } } static void setautofireevent (struct uae_input_device *uid, int num, int sub, int af, int index) { if (!af) return; #ifdef RETROPLATFORM // don't override custom AF autofire mappings if (rp_isactive ()) return; #endif int *afp = af_ports[index]; for (int k = 0; afp[k] >= 0; k++) { if (afp[k] == uid->eventid[num][sub]) { uid->flags[num][sub] &= ~ID_FLAG_AUTOFIRE_MASK; if (af >= JPORT_AF_NORMAL) uid->flags[num][sub] |= ID_FLAG_AUTOFIRE; if (af == JPORT_AF_TOGGLE) uid->flags[num][sub] |= ID_FLAG_TOGGLE; if (af == JPORT_AF_ALWAYS) uid->flags[num][sub] |= ID_FLAG_INVERTTOGGLE; return; } } } static void inputdevice_sparerestore (struct uae_input_device *uid, int num, int sub) { if (uid->port[num][SPARE_SUB_EVENT]) { uid->eventid[num][sub] = uid->eventid[num][SPARE_SUB_EVENT]; uid->flags[num][sub] = uid->flags[num][SPARE_SUB_EVENT]; uid->custom[num][sub] = uid->custom[num][SPARE_SUB_EVENT]; } else { uid->eventid[num][sub] = 0; uid->flags[num][sub] = 0; xfree (uid->custom[num][sub]); uid->custom[num][sub] = 0; } uid->eventid[num][SPARE_SUB_EVENT] = 0; uid->flags[num][SPARE_SUB_EVENT] = 0; uid->port[num][SPARE_SUB_EVENT] = 0; uid->custom[num][SPARE_SUB_EVENT] = 0; } void inputdevice_sparecopy (struct uae_input_device *uid, int num, int sub) { if (uid->port[num][SPARE_SUB_EVENT] != 0) return; if (uid->eventid[num][sub] <= 0 && uid->custom[num][sub] == NULL) { uid->eventid[num][SPARE_SUB_EVENT] = 0; uid->flags[num][SPARE_SUB_EVENT] = 0; uid->port[num][SPARE_SUB_EVENT] = 0; xfree (uid->custom[num][SPARE_SUB_EVENT]); uid->custom[num][SPARE_SUB_EVENT] = NULL; } else { uid->eventid[num][SPARE_SUB_EVENT] = uid->eventid[num][sub]; uid->flags[num][SPARE_SUB_EVENT] = uid->flags[num][sub]; uid->port[num][SPARE_SUB_EVENT] = MAX_JPORTS + 1; xfree (uid->custom[num][SPARE_SUB_EVENT]); uid->custom[num][SPARE_SUB_EVENT] = uid->custom[num][sub]; uid->custom[num][sub] = NULL; } } static void setcompakb (int *kb, int *srcmap, int index, int af) { int j, k; k = j = 0; while (kb[j] >= 0 && srcmap[k] >= 0) { while (kb[j] >= 0) { int id = kb[j]; for (int m = 0; m < MAX_INPUT_DEVICES; m++) { struct uae_input_device *uid = &keyboards[m]; for (int l = 0; l < MAX_INPUT_DEVICE_EVENTS; l++) { if (uid->extra[l] == id) { inputdevice_sparecopy (uid, l, 0); uid->eventid[l][0] = srcmap[k]; uid->flags[l][0] = 0; uid->port[l][0] = index + 1; xfree (uid->custom[l][0]); uid->custom[l][0] = NULL; setautofireevent (uid, l, 0, af, index); break; } } } j++; } j++; k++; } } int inputdevice_get_compatibility_input (struct uae_prefs *prefs, int index, int *typelist, int **inputlist, int **at) { if (index >= MAX_JPORTS || joymodes[index] < 0) return 0; *typelist = joymodes[index]; *inputlist = joyinputs[index]; *at = axistable; int cnt = 0; for (int i = 0; joyinputs[index] && joyinputs[index][i] >= 0; i++, cnt++); return cnt; } static void clearevent (struct uae_input_device *uid, int evt) { for (int i = 0; i < MAX_INPUT_DEVICE_EVENTS; i++) { for (int j = 0; j < MAX_INPUT_SUB_EVENT; j++) { if (uid->eventid[i][j] == evt) { uid->eventid[i][j] = 0; uid->flags[i][j] = 0; xfree (uid->custom[i][j]); uid->custom[i][j] = NULL; } } } } static void clearkbrevent (struct uae_input_device *uid, int evt) { for (int i = 0; i < MAX_INPUT_DEVICE_EVENTS; i++) { for (int j = 0; j < MAX_INPUT_SUB_EVENT; j++) { if (uid->eventid[i][j] == evt) { uid->eventid[i][j] = 0; uid->flags[i][j] = 0; xfree (uid->custom[i][j]); uid->custom[i][j] = NULL; if (j == 0) set_kbr_default_event (uid, keyboard_default, i); } } } } static void resetjport (struct uae_prefs *prefs, int index) { int *p = rem_ports[index]; while (*p >= 0) { int evtnum = *p++; for (int l = 0; l < MAX_INPUT_DEVICES; l++) { clearevent (&prefs->joystick_settings[GAMEPORT_INPUT_SETTINGS][l], evtnum); clearevent (&prefs->mouse_settings[GAMEPORT_INPUT_SETTINGS][l], evtnum); clearkbrevent (&prefs->keyboard_settings[GAMEPORT_INPUT_SETTINGS][l], evtnum); } for (int i = 0; axistable[i] >= 0; i += 3) { if (evtnum == axistable[i] || evtnum == axistable[i + 1] || evtnum == axistable[i + 2]) { for (int j = 0; j < 3; j++) { int evtnum2 = axistable[i + j]; for (int l = 0; l < MAX_INPUT_DEVICES; l++) { clearevent (&prefs->joystick_settings[GAMEPORT_INPUT_SETTINGS][l], evtnum2); clearevent (&prefs->mouse_settings[GAMEPORT_INPUT_SETTINGS][l], evtnum2); clearkbrevent (&prefs->keyboard_settings[GAMEPORT_INPUT_SETTINGS][l], evtnum2); } } break; } } } } static void remove_compa_config (struct uae_prefs *prefs, int index) { int typelist, *inputlist, *atp; if (!inputdevice_get_compatibility_input (prefs, index, &typelist, &inputlist, &atp)) return; for (int i = 0; inputlist[i] >= 0; i++) { int evtnum = inputlist[i]; int atpidx = 0; while (*atp >= 0) { if (*atp == evtnum) { atp++; atpidx = 2; break; } if (atp[1] == evtnum || atp[2] == evtnum) { atpidx = 1; break; } atp += 3; } while (atpidx >= 0) { for (int l = 0; l < MAX_INPUT_DEVICES; l++) { clearevent (&prefs->joystick_settings[GAMEPORT_INPUT_SETTINGS][l], evtnum); clearevent (&prefs->mouse_settings[GAMEPORT_INPUT_SETTINGS][l], evtnum); clearkbrevent (&prefs->keyboard_settings[GAMEPORT_INPUT_SETTINGS][l], evtnum); } evtnum = *atp++; atpidx--; } } } static void cleardevgp (struct uae_input_device *uid, int num, bool nocustom, int index) { for (int i = 0; i < MAX_INPUT_DEVICE_EVENTS; i++) { for (int j = 0; j < MAX_INPUT_SUB_EVENT; j++) { if (uid[num].port[i][j] == index + 1) { if (nocustom && (uid[num].flags[i][j] & ID_FLAG_GAMEPORTSCUSTOM_MASK)) continue; uid[num].eventid[i][j] = 0; uid[num].flags[i][j] = 0; xfree (uid[num].custom[i][j]); uid[num].custom[i][j] = NULL; uid[num].port[i][j] = 0; if (uid[num].port[i][SPARE_SUB_EVENT]) inputdevice_sparerestore (&uid[num], i, j); } } } } static void cleardevkbrgp (struct uae_input_device *uid, int num, bool nocustom, int index) { for (int i = 0; i < MAX_INPUT_DEVICE_EVENTS; i++) { for (int j = 0; j < MAX_INPUT_SUB_EVENT; j++) { if (uid[num].port[i][j] == index + 1) { if (nocustom && (uid[num].flags[i][j] & ID_FLAG_GAMEPORTSCUSTOM_MASK)) continue; uid[num].eventid[i][j] = 0; uid[num].flags[i][j] = 0; xfree (uid[num].custom[i][j]); uid[num].custom[i][j] = NULL; uid[num].port[i][j] = 0; if (uid[num].port[i][SPARE_SUB_EVENT]) { inputdevice_sparerestore (&uid[num], i, j); } else if (j == 0) { set_kbr_default_event (&uid[num], keyboard_default, i); } } } } } // remove all gameports mappings mapped to port 'index' static void remove_custom_config (struct uae_prefs *prefs, bool nocustom, int index) { for (int l = 0; l < MAX_INPUT_DEVICES; l++) { cleardevgp (joysticks, l, nocustom, index); cleardevgp (mice, l, nocustom, index); cleardevkbrgp (keyboards, l, nocustom, index); } } // prepare port for custom mapping, remove all current Amiga side device mappings void inputdevice_compa_prepare_custom (struct uae_prefs *prefs, int index, int newmode) { int mode = prefs->jports[index].mode; freejport (prefs, index); resetjport (prefs, index); if (newmode >= 0) { mode = newmode; } else if (mode == 0) { mode = index == 0 ? JSEM_MODE_MOUSE : (prefs->cs_cd32cd ? JSEM_MODE_JOYSTICK_CD32 : JSEM_MODE_JOYSTICK); } prefs->jports[index].mode = mode; prefs->jports[index].id = -2; remove_compa_config (prefs, index); remove_custom_config (prefs, false, index); } // clear device before switching to new one void inputdevice_compa_clear (struct uae_prefs *prefs, int index) { freejport (prefs, index); resetjport (prefs, index); remove_compa_config (prefs, index); } static void cleardev (struct uae_input_device *uid, int num) { for (int i = 0; i < MAX_INPUT_DEVICE_EVENTS; i++) { inputdevice_sparecopy (&uid[num], i, 0); for (int j = 0; j < MAX_INPUT_SUB_EVENT; j++) { uid[num].eventid[i][j] = 0; uid[num].flags[i][j] = 0; xfree (uid[num].custom[i][j]); uid[num].custom[i][j] = NULL; } } } static void enablejoydevice (struct uae_input_device *uid, bool gameportsmode, int evtnum) { for (int i = 0; i < MAX_INPUT_DEVICE_EVENTS; i++) { for (int j = 0; j < MAX_INPUT_SUB_EVENT; j++) { if ((gameportsmode && uid->eventid[i][j] == evtnum) || uid->port[i][j] > 0) { uid->enabled = 1; } } } } static void setjoydevices (struct uae_prefs *prefs, bool gameportsmode, int port) { for (int i = 0; joyinputs[port] && joyinputs[port][i] >= 0; i++) { int evtnum = joyinputs[port][i]; for (int l = 0; l < MAX_INPUT_DEVICES; l++) { enablejoydevice (&joysticks[l], gameportsmode, evtnum); enablejoydevice (&mice[l], gameportsmode, evtnum); enablejoydevice (&keyboards[l], gameportsmode, evtnum); } for (int k = 0; axistable[k] >= 0; k += 3) { if (evtnum == axistable[k] || evtnum == axistable[k + 1] || evtnum == axistable[k + 2]) { for (int j = 0; j < 3; j++) { int evtnum2 = axistable[k + j]; for (int l = 0; l < MAX_INPUT_DEVICES; l++) { enablejoydevice (&joysticks[l], gameportsmode, evtnum2); enablejoydevice (&mice[l], gameportsmode, evtnum2); enablejoydevice (&keyboards[l], gameportsmode, evtnum2); } } break; } } } } static void setjoyinputs (struct uae_prefs *prefs, int port) { joyinputs[port] = NULL; switch (joymodes[port]) { case JSEM_MODE_JOYSTICK: if (port >= 2) joyinputs[port] = port == 3 ? ip_parjoy2 : ip_parjoy1; else joyinputs[port] = port == 1 ? ip_joy2 : ip_joy1; break; case JSEM_MODE_GAMEPAD: joyinputs[port] = port ? ip_joypad2 : ip_joypad1; break; case JSEM_MODE_JOYSTICK_CD32: joyinputs[port] = port ? ip_joycd322 : ip_joycd321; break; case JSEM_MODE_JOYSTICK_ANALOG: joyinputs[port] = port ? ip_analog2 : ip_analog1; break; case JSEM_MODE_MOUSE: joyinputs[port] = port ? ip_mouse2 : ip_mouse1; break; case JSEM_MODE_LIGHTPEN: joyinputs[port] = port ? ip_lightpen2 : ip_lightpen1; break; case JSEM_MODE_MOUSE_CDTV: joyinputs[port] = ip_mousecdtv; break; } } static void setautofire (struct uae_input_device *uid, int port, int af) { int *afp = af_ports[port]; for (int k = 0; afp[k] >= 0; k++) { for (int i = 0; i < MAX_INPUT_DEVICE_EVENTS; i++) { for (int j = 0; j < MAX_INPUT_SUB_EVENT; j++) { if (uid->eventid[i][j] == afp[k]) { uid->flags[i][j] &= ~ID_FLAG_AUTOFIRE_MASK; if (af >= JPORT_AF_NORMAL) uid->flags[i][j] |= ID_FLAG_AUTOFIRE; if (af == JPORT_AF_TOGGLE) uid->flags[i][j] |= ID_FLAG_TOGGLE; if (af == JPORT_AF_ALWAYS) uid->flags[i][j] |= ID_FLAG_INVERTTOGGLE; } } } } } static void setautofires (struct uae_prefs *prefs, int port, int af) { #ifdef RETROPLATFORM // don't override custom AF autofire mappings if (rp_isactive ()) return; #endif for (int l = 0; l < MAX_INPUT_DEVICES; l++) { setautofire (&joysticks[l], port, af); setautofire (&mice[l], port, af); setautofire (&keyboards[l], port, af); } } // merge gameport settings with current input configuration static void compatibility_copy (struct uae_prefs *prefs, bool gameports) { int used[MAX_INPUT_DEVICES] = { 0 }; int i, joy; for (i = 0; i < MAX_JPORTS; i++) { joymodes[i] = prefs->jports[i].mode; joyinputs[i]= NULL; // remove all mappings from this port, except if custom if (prefs->jports[i].id != JPORT_CUSTOM) { if (gameports) remove_compa_config (prefs, i); } remove_custom_config (prefs, prefs->jports[i].id == JPORT_CUSTOM, i); setjoyinputs (prefs, i); } for (i = 0; i < 2; i++) { int af = prefs->jports[i].autofire; if (prefs->jports[i].id >= 0 && joymodes[i] <= 0) { int mode = prefs->jports[i].mode; if (jsem_ismouse (i, prefs) >= 0) { switch (mode) { case JSEM_MODE_DEFAULT: case JSEM_MODE_MOUSE: default: joymodes[i] = JSEM_MODE_MOUSE; joyinputs[i] = i ? ip_mouse2 : ip_mouse1; break; case JSEM_MODE_LIGHTPEN: joymodes[i] = JSEM_MODE_LIGHTPEN; joyinputs[i] = i ? ip_lightpen2 : ip_lightpen1; break; case JSEM_MODE_MOUSE_CDTV: joymodes[i] = JSEM_MODE_MOUSE_CDTV; joyinputs[i] = ip_mousecdtv; break; } } else if (jsem_isjoy (i, prefs) >= 0) { switch (mode) { case JSEM_MODE_DEFAULT: case JSEM_MODE_JOYSTICK: case JSEM_MODE_GAMEPAD: case JSEM_MODE_JOYSTICK_CD32: default: { bool iscd32 = mode == JSEM_MODE_JOYSTICK_CD32 || (mode == JSEM_MODE_DEFAULT && prefs->cs_cd32cd); if (iscd32) { joymodes[i] = JSEM_MODE_JOYSTICK_CD32; joyinputs[i] = i ? ip_joycd322 : ip_joycd321; } else if (mode == JSEM_MODE_GAMEPAD) { joymodes[i] = JSEM_MODE_GAMEPAD; joyinputs[i] = i ? ip_joypad2 : ip_joypad1; } else { joymodes[i] = JSEM_MODE_JOYSTICK; joyinputs[i] = i ? ip_joy2 : ip_joy1; } break; } case JSEM_MODE_JOYSTICK_ANALOG: joymodes[i] = JSEM_MODE_JOYSTICK_ANALOG; joyinputs[i] = i ? ip_analog2 : ip_analog1; break; case JSEM_MODE_MOUSE: joymodes[i] = JSEM_MODE_MOUSE; joyinputs[i] = i ? ip_mouse2 : ip_mouse1; break; case JSEM_MODE_LIGHTPEN: joymodes[i] = JSEM_MODE_LIGHTPEN; joyinputs[i] = i ? ip_lightpen2 : ip_lightpen1; break; case JSEM_MODE_MOUSE_CDTV: joymodes[i] = JSEM_MODE_MOUSE_CDTV; joyinputs[i] = ip_mousecdtv; break; } } else if (prefs->jports[i].id >= 0) { joymodes[i] = i ? JSEM_MODE_JOYSTICK : JSEM_MODE_MOUSE; joyinputs[i] = i ? ip_joy2 : ip_mouse1; } } } for (i = 2; i < MAX_JPORTS; i++) { if (prefs->jports[i].id >= 0 && joymodes[i] <= 0) { int mode = prefs->jports[i].mode; if (jsem_isjoy (i, prefs) >= 0) { joymodes[i] = JSEM_MODE_JOYSTICK; joyinputs[i] = i == 3 ? ip_parjoy2 : ip_parjoy1; } else if (prefs->jports[i].id >= 0) { prefs->jports[i].mode = joymodes[i] = JSEM_MODE_JOYSTICK; joyinputs[i] = i == 3 ? ip_parjoy2 : ip_parjoy1; } } } for (i = 0; i < 2; i++) { int af = prefs->jports[i].autofire; if (prefs->jports[i].id >= 0) { int mode = prefs->jports[i].mode; if ((joy = jsem_ismouse (i, prefs)) >= 0) { if (gameports) cleardev (mice, joy); switch (mode) { case JSEM_MODE_DEFAULT: case JSEM_MODE_MOUSE: default: input_get_default_mouse (mice, joy, i, af, !gameports); joymodes[i] = JSEM_MODE_MOUSE; break; case JSEM_MODE_LIGHTPEN: input_get_default_lightpen (mice, joy, i, af, !gameports); joymodes[i] = JSEM_MODE_LIGHTPEN; break; } _tcsncpy (prefs->jports[i].name, idev[IDTYPE_MOUSE].get_friendlyname (joy), MAX_JPORTNAME - 1); _tcsncpy (prefs->jports[i].configname, idev[IDTYPE_MOUSE].get_uniquename (joy), MAX_JPORTNAME - 1); } } } for (i = 1; i >= 0; i--) { int af = prefs->jports[i].autofire; if (prefs->jports[i].id >= 0) { int mode = prefs->jports[i].mode; joy = jsem_isjoy (i, prefs); if (joy >= 0) { if (gameports) cleardev (joysticks, joy); switch (mode) { case JSEM_MODE_DEFAULT: case JSEM_MODE_JOYSTICK: case JSEM_MODE_GAMEPAD: case JSEM_MODE_JOYSTICK_CD32: default: { bool iscd32 = mode == JSEM_MODE_JOYSTICK_CD32 || (mode == JSEM_MODE_DEFAULT && prefs->cs_cd32cd); input_get_default_joystick (joysticks, joy, i, af, mode, !gameports); if (iscd32) joymodes[i] = JSEM_MODE_JOYSTICK_CD32; else if (mode == JSEM_MODE_GAMEPAD) joymodes[i] = JSEM_MODE_GAMEPAD; else joymodes[i] = JSEM_MODE_JOYSTICK; break; } case JSEM_MODE_JOYSTICK_ANALOG: input_get_default_joystick_analog (joysticks, joy, i, af, !gameports); joymodes[i] = JSEM_MODE_JOYSTICK_ANALOG; break; case JSEM_MODE_MOUSE: input_get_default_mouse (joysticks, joy, i, af, !gameports); joymodes[i] = JSEM_MODE_MOUSE; break; case JSEM_MODE_LIGHTPEN: input_get_default_lightpen (joysticks, joy, i, af, !gameports); joymodes[i] = JSEM_MODE_LIGHTPEN; break; case JSEM_MODE_MOUSE_CDTV: joymodes[i] = JSEM_MODE_MOUSE_CDTV; input_get_default_joystick (joysticks, joy, i, af, mode, !gameports); break; } _tcsncpy (prefs->jports[i].name, idev[IDTYPE_JOYSTICK].get_friendlyname (joy), MAX_JPORTNAME - 1); _tcsncpy (prefs->jports[i].configname, idev[IDTYPE_JOYSTICK].get_uniquename (joy), MAX_JPORTNAME - 1); used[joy] = 1; } } } if (gameports) { // replace possible old mappings with default keyboard mapping for (i = KBR_DEFAULT_MAP_FIRST; i <= KBR_DEFAULT_MAP_LAST; i++) { checkcompakb (keyboard_default_kbmaps[i], ip_joy2); checkcompakb (keyboard_default_kbmaps[i], ip_joy1); checkcompakb (keyboard_default_kbmaps[i], ip_joypad2); checkcompakb (keyboard_default_kbmaps[i], ip_joypad1); checkcompakb (keyboard_default_kbmaps[i], ip_parjoy2); checkcompakb (keyboard_default_kbmaps[i], ip_parjoy1); checkcompakb (keyboard_default_kbmaps[i], ip_mouse2); checkcompakb (keyboard_default_kbmaps[i], ip_mouse1); } for (i = KBR_DEFAULT_MAP_CD32_FIRST; i <= KBR_DEFAULT_MAP_CD32_LAST; i++) { checkcompakb (keyboard_default_kbmaps[i], ip_joycd321); checkcompakb (keyboard_default_kbmaps[i], ip_joycd322); } } for (i = 0; i < 2; i++) { if (prefs->jports[i].id >= 0) { int *kb = NULL; int mode = prefs->jports[i].mode; int af = prefs->jports[i].autofire; for (joy = 0; used[joy]; joy++); if (JSEM_ISANYKBD (i, prefs)) { bool cd32 = mode == JSEM_MODE_JOYSTICK_CD32 || (mode == JSEM_MODE_DEFAULT && prefs->cs_cd32cd); if (JSEM_ISNUMPAD (i, prefs)) { if (cd32) kb = keyboard_default_kbmaps[KBR_DEFAULT_MAP_CD32_NP]; else if (mode == JSEM_MODE_GAMEPAD) kb = keyboard_default_kbmaps[KBR_DEFAULT_MAP_NP3]; else kb = keyboard_default_kbmaps[KBR_DEFAULT_MAP_NP]; } else if (JSEM_ISCURSOR (i, prefs)) { if (cd32) kb = keyboard_default_kbmaps[KBR_DEFAULT_MAP_CD32_CK]; else if (mode == JSEM_MODE_GAMEPAD) kb = keyboard_default_kbmaps[KBR_DEFAULT_MAP_CK3]; else kb = keyboard_default_kbmaps[KBR_DEFAULT_MAP_CK]; } else if (JSEM_ISSOMEWHEREELSE (i, prefs)) { if (cd32) kb = keyboard_default_kbmaps[KBR_DEFAULT_MAP_CD32_SE]; else if (mode == JSEM_MODE_GAMEPAD) kb = keyboard_default_kbmaps[KBR_DEFAULT_MAP_SE3]; else kb = keyboard_default_kbmaps[KBR_DEFAULT_MAP_SE]; } else if (JSEM_ISXARCADE1 (i, prefs)) { kb = keyboard_default_kbmaps[KBR_DEFAULT_MAP_XA1]; } else if (JSEM_ISXARCADE2 (i, prefs)) { kb = keyboard_default_kbmaps[KBR_DEFAULT_MAP_XA2]; } if (kb) { switch (mode) { case JSEM_MODE_JOYSTICK: case JSEM_MODE_GAMEPAD: case JSEM_MODE_JOYSTICK_CD32: case JSEM_MODE_DEFAULT: if (cd32) { setcompakb (kb, i ? ip_joycd322 : ip_joycd321, i, af); joymodes[i] = JSEM_MODE_JOYSTICK_CD32; } else if (mode == JSEM_MODE_GAMEPAD) { setcompakb (kb, i ? ip_joypad2 : ip_joypad1, i, af); joymodes[i] = JSEM_MODE_GAMEPAD; } else { setcompakb (kb, i ? ip_joy2 : ip_joy1, i, af); joymodes[i] = JSEM_MODE_JOYSTICK; } break; case JSEM_MODE_MOUSE: setcompakb (kb, i ? ip_mouse2 : ip_mouse1, i, af); joymodes[i] = JSEM_MODE_MOUSE; break; } used[joy] = 1; } } } } if (arcadia_bios) { setcompakb (keyboard_default_kbmaps[KBR_DEFAULT_MAP_ARCADIA], ip_arcadia, 0, 0); if (JSEM_ISXARCADE1 (i, prefs) || JSEM_ISXARCADE2 (i, prefs)) setcompakb (keyboard_default_kbmaps[KBR_DEFAULT_MAP_ARCADIA_XA], ip_arcadiaxa, JSEM_ISXARCADE2 (i, prefs) ? 1 : 0, prefs->jports[i].autofire); } if (0 && currprefs.cs_cdtvcd) { setcompakb (keyboard_default_kbmaps[KBR_DEFAULT_MAP_CDTV], ip_mediacdtv, 0, 0); } // parport for (i = 2; i < MAX_JPORTS; i++) { int af = prefs->jports[i].autofire; if (prefs->jports[i].id >= 0) { int *kb = NULL; joy = jsem_isjoy (i, prefs); if (joy >= 0) { if (gameports) cleardev (joysticks, joy); input_get_default_joystick (joysticks, joy, i, af, 0, !gameports); _tcsncpy (prefs->jports[i].name, idev[IDTYPE_JOYSTICK].get_friendlyname (joy), MAX_JPORTNAME - 1); _tcsncpy (prefs->jports[i].configname, idev[IDTYPE_JOYSTICK].get_uniquename (joy), MAX_JPORTNAME - 1); used[joy] = 1; joymodes[i] = JSEM_MODE_JOYSTICK; } } } for (i = 2; i < MAX_JPORTS; i++) { if (prefs->jports[i].id >= 0) { int *kb = NULL; for (joy = 0; used[joy]; joy++); if (JSEM_ISANYKBD (i, prefs)) { if (JSEM_ISNUMPAD (i, prefs)) kb = keyboard_default_kbmaps[KBR_DEFAULT_MAP_NP]; else if (JSEM_ISCURSOR (i, prefs)) kb = keyboard_default_kbmaps[KBR_DEFAULT_MAP_CK]; else if (JSEM_ISSOMEWHEREELSE (i, prefs)) kb = keyboard_default_kbmaps[KBR_DEFAULT_MAP_SE]; else if (JSEM_ISXARCADE1 (i, prefs)) kb = keyboard_default_kbmaps[KBR_DEFAULT_MAP_XA1]; else if (JSEM_ISXARCADE2 (i, prefs)) kb = keyboard_default_kbmaps[KBR_DEFAULT_MAP_XA2]; if (kb) { setcompakb (kb, i == 3 ? ip_parjoy2default : ip_parjoy1default, i, prefs->jports[i].autofire); used[joy] = 1; joymodes[i] = JSEM_MODE_JOYSTICK; } } } } for (i = 0; i < MAX_JPORTS; i++) { if (gameports) setautofires (prefs, i, prefs->jports[i].autofire); } for (i = 0; i < MAX_JPORTS; i++) { setjoyinputs (prefs, i); setjoydevices (prefs, gameports, i); } } static void disableifempty2 (struct uae_input_device *uid) { for (int i = 0; i < MAX_INPUT_DEVICE_EVENTS; i++) { for (int j = 0; j < MAX_INPUT_SUB_EVENT; j++) { if (uid->eventid[i][j] > 0 || uid->custom[i][j] != NULL) return; } } uid->enabled = false; } static void disableifempty (struct uae_prefs *prefs) { for (int l = 0; l < MAX_INPUT_DEVICES; l++) { disableifempty2 (&joysticks[l]); disableifempty2 (&mice[l]); disableifempty2 (&keyboards[l]); } prefs->internalevent_settings[0]->enabled = true; } static void matchdevices (struct inputdevice_functions *inf, struct uae_input_device *uid) { int i, j; for (i = 0; i < inf->get_num (); i++) { TCHAR *aname1 = inf->get_friendlyname (i); TCHAR *aname2 = inf->get_uniquename (i); int match = -1; for (j = 0; j < MAX_INPUT_DEVICES; j++) { if (aname2 && uid[j].configname) { bool matched = false; TCHAR bname[MAX_DPATH]; TCHAR bname2[MAX_DPATH]; TCHAR *p1 ,*p2; _tcscpy (bname, uid[j].configname); _tcscpy (bname2, aname2); // strip possible local guid part p1 = _tcschr (bname, '{'); p2 = _tcschr (bname2, '{'); if (!p1 && !p2) { // check possible directinput names too p1 = _tcschr (bname, ' '); p2 = _tcschr (bname2, ' '); } if (!_tcscmp (bname, bname2)) { matched = true; } else if (p1 && p2 && p1 - bname == p2 - bname2) { *p1 = 0; *p2 = 0; if (bname && !_tcscmp (bname2, bname)) matched = true; } if (matched) { if (match >= 0) match = -2; else match = j; } if (match == -2) break; } } // multiple matches -> use complete local-only id string for comparisons if (match == -2) { for (j = 0; j < MAX_INPUT_DEVICES; j++) { TCHAR *bname2 = uid[j].configname; if (aname2 && bname2 && !_tcscmp (aname2, bname2)) { match = j; break; } } } if (match < 0) { // no match, try friend names for (j = 0; j < MAX_INPUT_DEVICES; j++) { TCHAR *bname1 = uid[j].name; if (aname1 && bname1 && !_tcscmp (aname1, bname1)) { match = j; break; } } } if (match >= 0) { j = match; if (j != i) { struct uae_input_device *tmp = xmalloc (struct uae_input_device, 1); memcpy (tmp, &uid[j], sizeof (struct uae_input_device)); memcpy (&uid[j], &uid[i], sizeof (struct uae_input_device)); memcpy (&uid[i], tmp, sizeof (struct uae_input_device)); xfree (tmp); } } } for (i = 0; i < inf->get_num (); i++) { if (uid[i].name == NULL) uid[i].name = my_strdup (inf->get_friendlyname (i)); if (uid[i].configname == NULL) uid[i].configname = my_strdup (inf->get_uniquename (i)); } } static void matchdevices_all (struct uae_prefs *prefs) { int i; for (i = 0; i < MAX_INPUT_SETTINGS; i++) { matchdevices (&idev[IDTYPE_MOUSE], prefs->mouse_settings[i]); matchdevices (&idev[IDTYPE_JOYSTICK], prefs->joystick_settings[i]); matchdevices (&idev[IDTYPE_KEYBOARD], prefs->keyboard_settings[i]); } } bool inputdevice_set_gameports_mapping (struct uae_prefs *prefs, int devnum, int num, int evtnum, uae_u64 flags, int port) { TCHAR name[256]; struct inputevent *ie; int sub; if (evtnum < 0) { joysticks = prefs->joystick_settings[GAMEPORT_INPUT_SETTINGS]; mice = prefs->mouse_settings[GAMEPORT_INPUT_SETTINGS]; keyboards = prefs->keyboard_settings[GAMEPORT_INPUT_SETTINGS]; for (sub = 0; sub < MAX_INPUT_SUB_EVENT; sub++) { int port2 = 0; inputdevice_get_mapping (devnum, num, NULL, &port2, NULL, NULL, sub); if (port2 == port + 1) { inputdevice_set_mapping (devnum, num, NULL, NULL, 0, 0, sub); } } return true; } ie = inputdevice_get_eventinfo (evtnum); if (!inputdevice_get_eventname (ie, name)) return false; joysticks = prefs->joystick_settings[GAMEPORT_INPUT_SETTINGS]; mice = prefs->mouse_settings[GAMEPORT_INPUT_SETTINGS]; keyboards = prefs->keyboard_settings[GAMEPORT_INPUT_SETTINGS]; sub = 0; if (inputdevice_get_widget_type (devnum, num, NULL) != IDEV_WIDGET_KEY) { for (sub = 0; sub < MAX_INPUT_SUB_EVENT; sub++) { int port2 = 0; int evt = inputdevice_get_mapping (devnum, num, NULL, &port2, NULL, NULL, sub); if (port2 == port + 1 && evt == evtnum) break; if (!inputdevice_get_mapping (devnum, num, NULL, NULL, NULL, NULL, sub)) break; } } if (sub >= MAX_INPUT_SUB_EVENT) sub = MAX_INPUT_SUB_EVENT - 1; inputdevice_set_mapping (devnum, num, name, NULL, IDEV_MAPPED_GAMEPORTSCUSTOM1 | flags, port + 1, sub); joysticks = prefs->joystick_settings[prefs->input_selected_setting]; mice = prefs->mouse_settings[prefs->input_selected_setting]; keyboards = prefs->keyboard_settings[prefs->input_selected_setting]; if (prefs->input_selected_setting != GAMEPORT_INPUT_SETTINGS) { int xport; uae_u64 xflags; TCHAR xname[MAX_DPATH], xcustom[MAX_DPATH]; inputdevice_get_mapping (devnum, num, &xflags, &xport, xname, xcustom, 0); if (xport == 0) inputdevice_set_mapping (devnum, num, xname, xcustom, xflags, MAX_JPORTS + 1, SPARE_SUB_EVENT); inputdevice_set_mapping (devnum, num, name, NULL, IDEV_MAPPED_GAMEPORTSCUSTOM1 | flags, port + 1, 0); } return true; } static void resetinput (void) { if ((input_play || input_record) && hsync_counter > 0) return; cd32_shifter[0] = cd32_shifter[1] = 8; for (int i = 0; i < MAX_JPORTS; i++) { oleft[i] = 0; oright[i] = 0; otop[i] = 0; obot[i] = 0; oldmx[i] = -1; oldmy[i] = -1; joybutton[i] = 0; joydir[i] = 0; mouse_deltanoreset[i][0] = 0; mouse_delta[i][0] = 0; mouse_deltanoreset[i][1] = 0; mouse_delta[i][1] = 0; mouse_deltanoreset[i][2] = 0; mouse_delta[i][2] = 0; } memset (keybuf, 0, sizeof keybuf); for (int i = 0; i < INPUT_QUEUE_SIZE; i++) input_queue[i].linecnt = input_queue[i].nextlinecnt = -1; for (int i = 0; i < MAX_INPUT_SUB_EVENT; i++) { sublevdir[0][i] = i; sublevdir[1][i] = MAX_INPUT_SUB_EVENT - i - 1; } } void inputdevice_updateconfig_internal (const struct uae_prefs *srcprrefs, struct uae_prefs *dstprefs) { int i; keyboard_default = keyboard_default_table[currprefs.input_keyboard_type]; copyjport (srcprrefs, dstprefs, 0); copyjport (srcprrefs, dstprefs, 1); copyjport (srcprrefs, dstprefs, 2); copyjport (srcprrefs, dstprefs, 3); resetinput (); joysticks = dstprefs->joystick_settings[dstprefs->input_selected_setting]; mice = dstprefs->mouse_settings[dstprefs->input_selected_setting]; keyboards = dstprefs->keyboard_settings[dstprefs->input_selected_setting]; internalevents = dstprefs->internalevent_settings[dstprefs->input_selected_setting]; matchdevices_all (dstprefs); memset (joysticks2, 0, sizeof joysticks2); memset (mice2, 0, sizeof mice2); joysticks = dstprefs->joystick_settings[GAMEPORT_INPUT_SETTINGS]; mice = dstprefs->mouse_settings[GAMEPORT_INPUT_SETTINGS]; keyboards = dstprefs->keyboard_settings[GAMEPORT_INPUT_SETTINGS]; internalevents = dstprefs->internalevent_settings[GAMEPORT_INPUT_SETTINGS]; for (i = 0; i < MAX_INPUT_SETTINGS; i++) { joysticks[i].enabled = 0; mice[i].enabled = 0; } compatibility_copy (dstprefs, true); joysticks = dstprefs->joystick_settings[dstprefs->input_selected_setting]; mice = dstprefs->mouse_settings[dstprefs->input_selected_setting]; keyboards = dstprefs->keyboard_settings[dstprefs->input_selected_setting]; internalevents = dstprefs->internalevent_settings[dstprefs->input_selected_setting]; if (dstprefs->input_selected_setting != GAMEPORT_INPUT_SETTINGS) { compatibility_copy (dstprefs, false); } disableifempty (dstprefs); scanevents (dstprefs); } void inputdevice_updateconfig (const struct uae_prefs *srcprefs, struct uae_prefs *dstprefs) { inputdevice_updateconfig_internal (srcprefs, dstprefs); config_changed = 1; #ifdef RETROPLATFORM rp_input_change (0); rp_input_change (1); rp_input_change (2); rp_input_change (3); for (int i = 0; i < MAX_JPORTS; i++) rp_update_gameport (i, -1, 0); #endif } /* called when devices get inserted or removed * store old devices temporarily, enumerate all devices * restore old devices back (order may have changed) */ void inputdevice_devicechange (struct uae_prefs *prefs) { int acc = input_acquired; int i, idx; TCHAR *jports[MAX_JPORTS]; int jportskb[MAX_JPORTS], jportsmode[MAX_JPORTS]; int jportid[MAX_JPORTS], jportaf[MAX_JPORTS]; for (i = 0; i < MAX_JPORTS; i++) { jports[i] = NULL; jportskb[i] = -1; jportid[i] = prefs->jports[i].id; jportaf[i] = prefs->jports[i].autofire; idx = inputdevice_getjoyportdevice (i, prefs->jports[i].id); if (idx >= JSEM_LASTKBD) { struct inputdevice_functions *idf; int devidx; idx -= JSEM_LASTKBD; idf = getidf (idx); devidx = inputdevice_get_device_index (idx); jports[i] = my_strdup (idf->get_uniquename (devidx)); } else { jportskb[i] = idx; } jportsmode[i] = prefs->jports[i].mode; } inputdevice_unacquire (); idev[IDTYPE_JOYSTICK].close (); idev[IDTYPE_MOUSE].close (); idev[IDTYPE_KEYBOARD].close (); idev[IDTYPE_JOYSTICK].init (); idev[IDTYPE_MOUSE].init (); idev[IDTYPE_KEYBOARD].init (); matchdevices (&idev[IDTYPE_MOUSE], mice); matchdevices (&idev[IDTYPE_JOYSTICK], joysticks); matchdevices (&idev[IDTYPE_KEYBOARD], keyboards); for (i = 0; i < MAX_JPORTS; i++) { freejport (prefs, i); if (jportid[i] == JPORT_CUSTOM) { inputdevice_joyport_config (prefs, _T("custom"), i, jportsmode[i], 0); } else if (jports[i]) { inputdevice_joyport_config (prefs, jports[i], i, jportsmode[i], 2); } else if (jportskb[i] >= 0) { TCHAR tmp[10]; _stprintf (tmp, _T("kbd%d"), jportskb[i]); inputdevice_joyport_config (prefs, tmp, i, jportsmode[i], 0); } prefs->jports[i].autofire = jportaf[i]; xfree (jports[i]); } if (prefs == &changed_prefs) inputdevice_copyconfig (&changed_prefs, &currprefs); if (acc) inputdevice_acquire (TRUE); #ifdef RETROPLATFORM rp_enumdevices (); #endif config_changed = 1; } // set default prefs to all input configuration settings void inputdevice_default_prefs (struct uae_prefs *p) { inputdevice_init (); p->input_selected_setting = GAMEPORT_INPUT_SETTINGS; p->input_joymouse_multiplier = 100; p->input_joymouse_deadzone = 33; p->input_joystick_deadzone = 33; p->input_joymouse_speed = 10; p->input_analog_joystick_mult = 15; p->input_analog_joystick_offset = -1; p->input_mouse_speed = 100; p->input_autofire_linecnt = 600; p->input_keyboard_type = 0; keyboard_default = keyboard_default_table[p->input_keyboard_type]; inputdevice_default_kb_all (p); } // set default keyboard and keyboard>joystick layouts void inputdevice_setkeytranslation (struct uae_input_device_kbr_default **trans, int **kbmaps) { keyboard_default_table = trans; keyboard_default_kbmaps = kbmaps; } // return true if keyboard/scancode pair is mapped int inputdevice_iskeymapped (int keyboard, int scancode) { struct uae_input_device *na = &keyboards[keyboard]; if (!keyboards || scancode < 0) return 0; return scancodeused[keyboard][scancode]; } int inputdevice_synccapslock (int oldcaps, int *capstable) { struct uae_input_device *na = &keyboards[0]; int j, i; if (!keyboards) return -1; for (j = 0; na->extra[j]; j++) { if (na->extra[j] == INPUTEVENT_KEY_CAPS_LOCK) { for (i = 0; capstable[i]; i += 2) { if (na->extra[j] == capstable[i]) { if (oldcaps != capstable[i + 1]) { oldcaps = capstable[i + 1]; inputdevice_translatekeycode (0, capstable[i], oldcaps ? -1 : 0); } return i; } } } } return -1; } static void rqualifiers (uae_u64 flags, bool release) { uae_u64 mask = ID_FLAG_QUALIFIER1 << 1; for (int i = 0; i < MAX_INPUT_QUALIFIERS; i++) { if ((flags & mask) && (mask & (qualifiers << 1))) { if (release) { if (!(mask & qualifiers_r)) { qualifiers_r |= mask; for (int ii = 0; ii < MAX_INPUT_SUB_EVENT; ii++) { int qevt = qualifiers_evt[i][ii]; if (qevt > 0) { write_log (_T("Released %d '%s'\n"), qevt, events[qevt].name); inputdevice_do_keyboard (events[qevt].data, 0); } } } } else { if ((mask & qualifiers_r)) { qualifiers_r &= ~mask; for (int ii = 0; ii < MAX_INPUT_SUB_EVENT; ii++) { int qevt = qualifiers_evt[i][ii]; if (qevt > 0) { write_log (_T("Pressed %d '%s'\n"), qevt, events[qevt].name); inputdevice_do_keyboard (events[qevt].data, 1); } } } } } mask <<= 2; } } static int inputdevice_translatekeycode_2 (int keyboard, int scancode, int state, bool qualifiercheckonly) { struct uae_input_device *na = &keyboards[keyboard]; int j, k; int handled = 0; bool didcustom = false; if (!keyboards || scancode < 0) return handled; // if (!state) // process_custom_event (NULL, 0, 0, 0, 0, 0); j = 0; while (j < MAX_INPUT_DEVICE_EVENTS && na->extra[j] >= 0) { if (na->extra[j] == scancode) { bool qualonly; uae_u64 qualmask[MAX_INPUT_SUB_EVENT]; getqualmask (qualmask, na, j, &qualonly); if (qualonly) qualifiercheckonly = true; for (k = 0; k < MAX_INPUT_SUB_EVENT; k++) {/* send key release events in reverse order */ uae_u64 *flagsp = &na->flags[j][sublevdir[state == 0 ? 1 : 0][k]]; int evt = na->eventid[j][sublevdir[state == 0 ? 1 : 0][k]]; uae_u64 flags = *flagsp; int autofire = (flags & ID_FLAG_AUTOFIRE) ? 1 : 0; int toggle = (flags & ID_FLAG_TOGGLE) ? 1 : 0; int inverttoggle = (flags & ID_FLAG_INVERTTOGGLE) ? 1 : 0; int toggled; setqualifiers (evt, state > 0); if (qualifiercheckonly) { if (!state && (flags & ID_FLAG_CANRELEASE)) { *flagsp &= ~ID_FLAG_CANRELEASE; handle_input_event (evt, state, 1, autofire, true, false); if (k == 0) { process_custom_event (na, j, state, qualmask, autofire, k); } } continue; } if (!state) { didcustom |= process_custom_event (na, j, state, qualmask, autofire, k); } // if evt == caps and scan == caps: sync with native caps led if (evt == INPUTEVENT_KEY_CAPS_LOCK) { int v; if (state < 0) state = 1; v = target_checkcapslock (scancode, &state); if (v < 0) continue; if (v > 0) toggle = 0; } else if (state < 0) { // it was caps lock resync, ignore, not mapped to caps continue; } if (inverttoggle) { na->flags[j][sublevdir[state == 0 ? 1 : 0][k]] &= ~ID_FLAG_TOGGLED; if (state) { queue_input_event (evt, NULL, -1, 0, 0, 1); handled |= handle_input_event (evt, 1, 1, 0, true, false); } else { handled |= handle_input_event (evt, 1, 1, autofire, true, false); } didcustom |= process_custom_event (na, j, state, qualmask, autofire, k); } else if (toggle) { if (!state) continue; if (!checkqualifiers (evt, flags, qualmask, na->eventid[j])) continue; *flagsp ^= ID_FLAG_TOGGLED; toggled = (*flagsp & ID_FLAG_TOGGLED) ? 1 : 0; handled |= handle_input_event (evt, toggled, 1, autofire, true, false); if (k == 0) didcustom |= process_custom_event (na, j, state, qualmask, autofire, k); } else { rqualifiers (flags, state ? true : false); if (!checkqualifiers (evt, flags, qualmask, na->eventid[j])) { if (!state && !(flags & ID_FLAG_CANRELEASE)) continue; else if (state) continue; } if (state) { *flagsp |= ID_FLAG_CANRELEASE; } else { if (!(flags & ID_FLAG_CANRELEASE)) continue; *flagsp &= ~ID_FLAG_CANRELEASE; } handled |= handle_input_event (evt, state, 1, autofire, true, false); didcustom |= process_custom_event (na, j, state, qualmask, autofire, k); } } if (!didcustom) queue_input_event (-1, NULL, -1, 0, 0, 1); return handled; } j++; } return handled; } #define IECODE_UP_PREFIX 0x80 #define RAW_STEALTH 0x68 #define STEALTHF_E0KEY 0x08 #define STEALTHF_UPSTROKE 0x04 #define STEALTHF_SPECIAL 0x02 #define STEALTHF_E1KEY 0x01 static void sendmmcodes (int code, int newstate) { uae_u8 b; b = RAW_STEALTH | IECODE_UP_PREFIX; record_key (((b << 1) | (b >> 7)) & 0xff); b = IECODE_UP_PREFIX; if ((code >> 8) == 0x01) b |= STEALTHF_E0KEY; if ((code >> 8) == 0x02) b |= STEALTHF_E1KEY; if (!newstate) b |= STEALTHF_UPSTROKE; record_key(((b << 1) | (b >> 7)) & 0xff); b = ((code >> 4) & 0x0f) | IECODE_UP_PREFIX; record_key(((b << 1) | (b >> 7)) & 0xff); b = (code & 0x0f) | IECODE_UP_PREFIX; record_key(((b << 1) | (b >> 7)) & 0xff); } // main keyboard press/release entry point int inputdevice_translatekeycode (int keyboard, int scancode, int state) { if (inputdevice_translatekeycode_2 (keyboard, scancode, state, false)) return 1; if (currprefs.mmkeyboard && scancode > 0) sendmmcodes (scancode, state); return 0; } void inputdevice_checkqualifierkeycode (int keyboard, int scancode, int state) { inputdevice_translatekeycode_2 (keyboard, scancode, state, true); } static const TCHAR *internaleventlabels[] = { _T("CPU reset"), _T("Keyboard reset"), NULL }; static int init_int (void) { return 1; } static void close_int (void) { } static int acquire_int (int num, int flags) { return 1; } static void unacquire_int (int num) { } static void read_int (void) { } static int get_int_num (void) { return 1; } static TCHAR *get_int_friendlyname (int num) { return _T("Internal events"); } static TCHAR *get_int_uniquename (int num) { return _T("INTERNALEVENTS1"); } static int get_int_widget_num (int num) { int i; for (i = 0; internaleventlabels[i]; i++); return i; } static int get_int_widget_type (int kb, int num, TCHAR *name, uae_u32 *code) { if (code) *code = num; if (name) _tcscpy (name, internaleventlabels[num]); return IDEV_WIDGET_BUTTON; } static int get_int_widget_first (int kb, int type) { return 0; } static int get_int_flags (int num) { return 0; } static struct inputdevice_functions inputdevicefunc_internalevent = { init_int, close_int, acquire_int, unacquire_int, read_int, get_int_num, get_int_friendlyname, get_int_uniquename, get_int_widget_num, get_int_widget_type, get_int_widget_first, get_int_flags }; void send_internalevent (int eventid) { setbuttonstateall (&internalevents[0], NULL, eventid, -1); } void inputdevice_init (void) { idev[IDTYPE_JOYSTICK] = inputdevicefunc_joystick; idev[IDTYPE_JOYSTICK].init (); idev[IDTYPE_MOUSE] = inputdevicefunc_mouse; idev[IDTYPE_MOUSE].init (); idev[IDTYPE_KEYBOARD] = inputdevicefunc_keyboard; idev[IDTYPE_KEYBOARD].init (); idev[IDTYPE_INTERNALEVENT] = inputdevicefunc_internalevent; idev[IDTYPE_INTERNALEVENT].init (); } void inputdevice_close (void) { idev[IDTYPE_JOYSTICK].close (); idev[IDTYPE_MOUSE].close (); idev[IDTYPE_KEYBOARD].close (); idev[IDTYPE_INTERNALEVENT].close (); inprec_close (true); } static struct uae_input_device *get_uid (const struct inputdevice_functions *id, int devnum) { struct uae_input_device *uid = 0; if (id == &idev[IDTYPE_JOYSTICK]) { uid = &joysticks[devnum]; } else if (id == &idev[IDTYPE_MOUSE]) { uid = &mice[devnum]; } else if (id == &idev[IDTYPE_KEYBOARD]) { uid = &keyboards[devnum]; } else if (id == &idev[IDTYPE_INTERNALEVENT]) { uid = &internalevents[devnum]; } return uid; } static int get_event_data (const struct inputdevice_functions *id, int devnum, int num, int *eventid, TCHAR **custom, uae_u64 *flags, int *port, int sub) { const struct uae_input_device *uid = get_uid (id, devnum); int type = id->get_widget_type (devnum, num, 0, 0); int i; if (type == IDEV_WIDGET_BUTTON || type == IDEV_WIDGET_BUTTONAXIS) { i = num - id->get_widget_first (devnum, IDEV_WIDGET_BUTTON) + ID_BUTTON_OFFSET; *eventid = uid->eventid[i][sub]; if (flags) *flags = uid->flags[i][sub]; if (port) *port = uid->port[i][sub]; if (custom) *custom = uid->custom[i][sub]; return i; } else if (type == IDEV_WIDGET_AXIS) { i = num - id->get_widget_first (devnum, type) + ID_AXIS_OFFSET; *eventid = uid->eventid[i][sub]; if (flags) *flags = uid->flags[i][sub]; if (port) *port = uid->port[i][sub]; if (custom) *custom = uid->custom[i][sub]; return i; } else if (type == IDEV_WIDGET_KEY) { i = num - id->get_widget_first (devnum, type); *eventid = uid->eventid[i][sub]; if (flags) *flags = uid->flags[i][sub]; if (port) *port = uid->port[i][sub]; if (custom) *custom = uid->custom[i][sub]; return i; } return -1; } static TCHAR *stripstrdup (const TCHAR *s) { TCHAR *out = my_strdup (s); if (!out) return NULL; for (int i = 0; out[i]; i++) { if (out[i] < ' ') out[i] = ' '; } return out; } static int put_event_data (const struct inputdevice_functions *id, int devnum, int num, int eventid, TCHAR *custom, uae_u64 flags, int port, int sub) { struct uae_input_device *uid = get_uid (id, devnum); int type = id->get_widget_type (devnum, num, 0, 0); int i, ret; for (i = 0; i < MAX_INPUT_QUALIFIERS; i++) { uae_u64 mask1 = ID_FLAG_QUALIFIER1 << (i * 2); uae_u64 mask2 = mask1 << 1; if ((flags & (mask1 | mask2)) == (mask1 | mask2)) flags &= ~mask2; } if (custom && custom[0] == 0) custom = NULL; if (custom) eventid = 0; if (eventid <= 0 && !custom) flags = 0; ret = -1; if (type == IDEV_WIDGET_BUTTON || type == IDEV_WIDGET_BUTTONAXIS) { i = num - id->get_widget_first (devnum, IDEV_WIDGET_BUTTON) + ID_BUTTON_OFFSET; uid->eventid[i][sub] = eventid; uid->flags[i][sub] = flags; uid->port[i][sub] = port; xfree (uid->custom[i][sub]); uid->custom[i][sub] = custom && _tcslen (custom) > 0 ? stripstrdup (custom) : NULL; ret = i; } else if (type == IDEV_WIDGET_AXIS) { i = num - id->get_widget_first (devnum, type) + ID_AXIS_OFFSET; uid->eventid[i][sub] = eventid; uid->flags[i][sub] = flags; uid->port[i][sub] = port; xfree (uid->custom[i][sub]); uid->custom[i][sub] = custom && _tcslen (custom) > 0 ? stripstrdup (custom) : NULL; ret = i; } else if (type == IDEV_WIDGET_KEY) { i = num - id->get_widget_first (devnum, type); uid->eventid[i][sub] = eventid; uid->flags[i][sub] = flags; uid->port[i][sub] = port; xfree (uid->custom[i][sub]); uid->custom[i][sub] = custom && _tcslen (custom) > 0 ? stripstrdup (custom) : NULL; ret = i; } if (ret < 0) return -1; if (uid->custom[i][sub]) uid->eventid[i][sub] = INPUTEVENT_SPC_CUSTOM_EVENT; return ret; } static int is_event_used (const struct inputdevice_functions *id, int devnum, int isnum, int isevent) { struct uae_input_device *uid = get_uid (id, devnum); int num, evt, sub; for (num = 0; num < id->get_widget_num (devnum); num++) { for (sub = 0; sub < MAX_INPUT_SUB_EVENT; sub++) { if (get_event_data (id, devnum, num, &evt, NULL, NULL, NULL, sub) >= 0) { if (evt == isevent && isnum != num) return 1; } } } return 0; } // device based index from global device index int inputdevice_get_device_index (int devnum) { int jcnt = idev[IDTYPE_JOYSTICK].get_num (); int mcnt = idev[IDTYPE_MOUSE].get_num (); int kcnt = idev[IDTYPE_KEYBOARD].get_num (); if (devnum < jcnt) return devnum; else if (devnum < jcnt + mcnt) return devnum - jcnt; else if (devnum < jcnt + mcnt + kcnt) return devnum - (jcnt + mcnt); else if (devnum < jcnt + mcnt + kcnt + INTERNALEVENT_COUNT) return devnum - (jcnt + mcnt + kcnt); return -1; } static int getdevnum (int type, int devnum) { int jcnt = idev[IDTYPE_JOYSTICK].get_num (); int mcnt = idev[IDTYPE_MOUSE].get_num (); int kcnt = idev[IDTYPE_KEYBOARD].get_num (); if (type == IDTYPE_JOYSTICK) return devnum; else if (type == IDTYPE_MOUSE) return jcnt + devnum; else if (type == IDTYPE_KEYBOARD) return jcnt + mcnt + devnum; else if (type == IDTYPE_INTERNALEVENT) return jcnt + mcnt + kcnt + devnum; return -1; } static int gettype (int devnum) { int jcnt = idev[IDTYPE_JOYSTICK].get_num (); int mcnt = idev[IDTYPE_MOUSE].get_num (); int kcnt = idev[IDTYPE_KEYBOARD].get_num (); if (devnum < jcnt) return IDTYPE_JOYSTICK; else if (devnum < jcnt + mcnt) return IDTYPE_MOUSE; else if (devnum < jcnt + mcnt + kcnt) return IDTYPE_KEYBOARD; else if (devnum < jcnt + mcnt + kcnt + INTERNALEVENT_COUNT) return IDTYPE_INTERNALEVENT; return -1; } static struct inputdevice_functions *getidf (int devnum) { int type = gettype (devnum); if (type < 0) return NULL; return &idev[type]; } struct inputevent *inputdevice_get_eventinfo (int evt) { return &events[evt]; } /* returns number of devices of type "type" */ int inputdevice_get_device_total (int type) { return idev[type].get_num (); } /* returns the name of device */ TCHAR *inputdevice_get_device_name (int type, int devnum) { return idev[type].get_friendlyname (devnum); } /* returns the name of device */ TCHAR *inputdevice_get_device_name2 (int devnum) { return getidf (devnum)->get_friendlyname (inputdevice_get_device_index (devnum)); } /* returns machine readable name of device */ TCHAR *inputdevice_get_device_unique_name (int type, int devnum) { return idev[type].get_uniquename (devnum); } /* returns state (enabled/disabled) */ int inputdevice_get_device_status (int devnum) { const struct inputdevice_functions *idf = getidf (devnum); if (idf == NULL) return -1; struct uae_input_device *uid = get_uid (idf, inputdevice_get_device_index (devnum)); return uid->enabled; } /* set state (enabled/disabled) */ void inputdevice_set_device_status (int devnum, int enabled) { const struct inputdevice_functions *idf = getidf (devnum); int num = inputdevice_get_device_index (devnum); struct uae_input_device *uid = get_uid (idf, num); if (enabled) { // disable incompatible devices ("super device" vs "raw device") for (int i = 0; i < idf->get_num (); i++) { if (idf->get_flags (i) != idf->get_flags (num)) { struct uae_input_device *uid2 = get_uid (idf, i); uid2->enabled = 0; } } } uid->enabled = enabled; } /* returns number of axis/buttons and keys from selected device */ int inputdevice_get_widget_num (int devnum) { const struct inputdevice_functions *idf = getidf (devnum); return idf->get_widget_num (inputdevice_get_device_index (devnum)); } // return name of event, do not use ie->name directly bool inputdevice_get_eventname (const struct inputevent *ie, TCHAR *out) { if (!out) return false; _tcscpy (out, ie->name); return true; } int inputdevice_iterate (int devnum, int num, TCHAR *name, int *af) { const struct inputdevice_functions *idf = getidf (devnum); static int id_iterator; struct inputevent *ie; int mask, data, type; uae_u64 flags; int devindex = inputdevice_get_device_index (devnum); *af = 0; *name = 0; for (;;) { ie = &events[++id_iterator]; if (!ie->confname) { id_iterator = 0; return 0; } mask = 0; type = idf->get_widget_type (devindex, num, NULL, NULL); if (type == IDEV_WIDGET_BUTTON || type == IDEV_WIDGET_BUTTONAXIS) { if (idf == &idev[IDTYPE_JOYSTICK]) { mask |= AM_JOY_BUT; } else { mask |= AM_MOUSE_BUT; } } else if (type == IDEV_WIDGET_AXIS) { if (idf == &idev[IDTYPE_JOYSTICK]) { mask |= AM_JOY_AXIS; } else { mask |= AM_MOUSE_AXIS; } } else if (type == IDEV_WIDGET_KEY) { mask |= AM_K; } if (ie->allow_mask & AM_INFO) { struct inputevent *ie2 = ie + 1; while (!(ie2->allow_mask & AM_INFO)) { if (is_event_used (idf, devindex, ie2 - ie, -1)) { ie2++; continue; } if (ie2->allow_mask & mask) break; ie2++; } if (!(ie2->allow_mask & AM_INFO)) mask |= AM_INFO; } if (!(ie->allow_mask & mask)) continue; get_event_data (idf, devindex, num, &data, NULL, &flags, NULL, 0); inputdevice_get_eventname (ie, name); *af = (flags & ID_FLAG_AUTOFIRE) ? 1 : 0; return 1; } } // return mapped event from devnum/num/sub int inputdevice_get_mapping (int devnum, int num, uae_u64 *pflags, int *pport, TCHAR *name, TCHAR *custom, int sub) { const struct inputdevice_functions *idf = getidf (devnum); const struct uae_input_device *uid = get_uid (idf, inputdevice_get_device_index (devnum)); int port, data; uae_u64 flags = 0, flag; int devindex = inputdevice_get_device_index (devnum); TCHAR *customp = NULL; if (name) _tcscpy (name, _T("")); if (custom) custom[0] = 0; if (pflags) *pflags = 0; if (pport) *pport = 0; if (uid == 0 || num < 0) return 0; if (get_event_data (idf, devindex, num, &data, &customp, &flag, &port, sub) < 0) return 0; if (customp && custom) _tcscpy (custom, customp); if (flag & ID_FLAG_AUTOFIRE) flags |= IDEV_MAPPED_AUTOFIRE_SET; if (flag & ID_FLAG_TOGGLE) flags |= IDEV_MAPPED_TOGGLE; if (flag & ID_FLAG_INVERTTOGGLE) flags |= IDEV_MAPPED_INVERTTOGGLE; if (flag & ID_FLAG_GAMEPORTSCUSTOM1) flags |= IDEV_MAPPED_GAMEPORTSCUSTOM1; if (flag & ID_FLAG_GAMEPORTSCUSTOM2) flags |= IDEV_MAPPED_GAMEPORTSCUSTOM2; if (flag & ID_FLAG_QUALIFIER_MASK) flags |= flag & ID_FLAG_QUALIFIER_MASK; if (pflags) *pflags = flags; if (pport) *pport = port; if (!data) return 0; if (events[data].allow_mask & AM_AF) flags |= IDEV_MAPPED_AUTOFIRE_POSSIBLE; if (pflags) *pflags = flags; inputdevice_get_eventname (&events[data], name); return data; } // set event name/custom/flags to devnum/num/sub int inputdevice_set_mapping (int devnum, int num, const TCHAR *name, TCHAR *custom, uae_u64 flags, int port, int sub) { const struct inputdevice_functions *idf = getidf (devnum); const struct uae_input_device *uid = get_uid (idf, inputdevice_get_device_index (devnum)); int eid, data, portp, amask; uae_u64 flag; TCHAR ename[256]; int devindex = inputdevice_get_device_index (devnum); TCHAR *customp = NULL; if (uid == 0 || num < 0) return 0; if (name) { eid = 1; while (events[eid].name) { inputdevice_get_eventname (&events[eid], ename); if (!_tcscmp(ename, name)) break; eid++; } if (!events[eid].name) return 0; if (events[eid].allow_mask & AM_INFO) return 0; } else { eid = 0; } if (get_event_data (idf, devindex, num, &data, &customp, &flag, &portp, sub) < 0) return 0; if (data >= 0) { amask = events[eid].allow_mask; flag &= ~(ID_FLAG_AUTOFIRE_MASK | ID_FLAG_GAMEPORTSCUSTOM_MASK | IDEV_MAPPED_QUALIFIER_MASK); if (amask & AM_AF) { flag |= (flags & IDEV_MAPPED_AUTOFIRE_SET) ? ID_FLAG_AUTOFIRE : 0; flag |= (flags & IDEV_MAPPED_TOGGLE) ? ID_FLAG_TOGGLE : 0; flag |= (flags & IDEV_MAPPED_INVERTTOGGLE) ? ID_FLAG_INVERTTOGGLE : 0; } flag |= (flags & IDEV_MAPPED_GAMEPORTSCUSTOM1) ? ID_FLAG_GAMEPORTSCUSTOM1 : 0; flag |= (flags & IDEV_MAPPED_GAMEPORTSCUSTOM2) ? ID_FLAG_GAMEPORTSCUSTOM2 : 0; flag |= flags & IDEV_MAPPED_QUALIFIER_MASK; if (port >= 0) portp = port; put_event_data (idf, devindex, num, eid, custom, flag, portp, sub); return 1; } return 0; } int inputdevice_get_widget_type (int devnum, int num, TCHAR *name) { const struct inputdevice_functions *idf = getidf (devnum); return idf->get_widget_type (inputdevice_get_device_index (devnum), num, name, 0); } static int config_change; void inputdevice_config_change (void) { config_change = 1; } int inputdevice_config_change_test (void) { int v = config_change; config_change = 0; return v; } // copy configuration #src to configuration #dst void inputdevice_copyconfig (const struct uae_prefs *src, struct uae_prefs *dst) { int i, j; dst->input_selected_setting = src->input_selected_setting; dst->input_joymouse_multiplier = src->input_joymouse_multiplier; dst->input_joymouse_deadzone = src->input_joymouse_deadzone; dst->input_joystick_deadzone = src->input_joystick_deadzone; dst->input_joymouse_speed = src->input_joymouse_speed; dst->input_mouse_speed = src->input_mouse_speed; dst->input_autofire_linecnt = src->input_autofire_linecnt; copyjport (src, dst, 0); copyjport (src, dst, 1); copyjport (src, dst, 2); copyjport (src, dst, 3); for (i = 0; i < MAX_INPUT_SETTINGS; i++) { for (j = 0; j < MAX_INPUT_DEVICES; j++) { memcpy (&dst->joystick_settings[i][j], &src->joystick_settings[i][j], sizeof (struct uae_input_device)); memcpy (&dst->mouse_settings[i][j], &src->mouse_settings[i][j], sizeof (struct uae_input_device)); memcpy (&dst->keyboard_settings[i][j], &src->keyboard_settings[i][j], sizeof (struct uae_input_device)); } } inputdevice_updateconfig (src, dst); } static void swapjoydevice (struct uae_input_device *uid, int **swaps) { for (int i = 0; i < MAX_INPUT_DEVICE_EVENTS; i++) { for (int j = 0; j < MAX_INPUT_SUB_EVENT; j++) { bool found = false; for (int k = 0; k < 2 && !found; k++) { int evtnum; for (int kk = 0; (evtnum = swaps[k][kk]) >= 0 && !found; kk++) { if (uid->eventid[i][j] == evtnum) { uid->eventid[i][j] = swaps[1 - k][kk]; found = true; } else { for (int jj = 0; axistable[jj] >= 0; jj += 3) { if (evtnum == axistable[jj] || evtnum == axistable[jj + 1] || evtnum == axistable[jj + 2]) { for (int ii = 0; ii < 3; ii++) { if (uid->eventid[i][j] == axistable[jj + ii]) { int evtnum2 = swaps[1 - k][kk]; for (int m = 0; axistable[m] >= 0; m += 3) { if (evtnum2 == axistable[m] || evtnum2 == axistable[m + 1] || evtnum2 == axistable[m + 2]) { uid->eventid[i][j] = axistable[m + ii]; found = true; } } } } } } } } } } } } // swap gameports ports, remember to handle customized ports too void inputdevice_swap_compa_ports (struct uae_prefs *prefs, int portswap) { struct jport tmp; if ((prefs->jports[portswap].id == JPORT_CUSTOM || prefs->jports[portswap + 1].id == JPORT_CUSTOM)) { int *swaps[2]; swaps[0] = rem_ports[portswap]; swaps[1] = rem_ports[portswap + 1]; for (int l = 0; l < MAX_INPUT_DEVICES; l++) { swapjoydevice (&prefs->joystick_settings[GAMEPORT_INPUT_SETTINGS][l], swaps); swapjoydevice (&prefs->mouse_settings[GAMEPORT_INPUT_SETTINGS][l], swaps); swapjoydevice (&prefs->keyboard_settings[GAMEPORT_INPUT_SETTINGS][l], swaps); } } memcpy (&tmp, &prefs->jports[portswap], sizeof (struct jport)); memcpy (&prefs->jports[portswap], &prefs->jports[portswap + 1], sizeof (struct jport)); memcpy (&prefs->jports[portswap + 1], &tmp, sizeof (struct jport)); inputdevice_updateconfig (NULL, prefs); } // swap device "devnum" ports 0<>1 and 2<>3 void inputdevice_swap_ports (struct uae_prefs *p, int devnum) { const struct inputdevice_functions *idf = getidf (devnum); struct uae_input_device *uid = get_uid (idf, inputdevice_get_device_index (devnum)); int i, j, k, event, unit; const struct inputevent *ie, *ie2; for (i = 0; i < MAX_INPUT_DEVICE_EVENTS; i++) { for (j = 0; j < MAX_INPUT_SUB_EVENT; j++) { event = uid->eventid[i][j]; if (event <= 0) continue; ie = &events[event]; if (ie->unit <= 0) continue; unit = ie->unit; k = 1; while (events[k].confname) { ie2 = &events[k]; if (ie2->type == ie->type && ie2->data == ie->data && ie2->unit - 1 == ((ie->unit - 1) ^ 1) && ie2->allow_mask == ie->allow_mask && uid->port[i][j] == 0) { uid->eventid[i][j] = k; break; } k++; } } } } //memcpy (p->joystick_settings[dst], p->joystick_settings[src], sizeof (struct uae_input_device) * MAX_INPUT_DEVICES); static void copydev (struct uae_input_device *dst, struct uae_input_device *src, int selectedwidget) { for (int i = 0; i < MAX_INPUT_DEVICES; i++) { for (int j = 0; j < MAX_INPUT_DEVICE_EVENTS; j++) { if (j == selectedwidget || selectedwidget < 0) { for (int k = 0; k < MAX_INPUT_SUB_EVENT_ALL; k++) { xfree (dst[i].custom[j][k]); } } } if (selectedwidget < 0) { xfree (dst[i].configname); xfree (dst[i].name); } } if (selectedwidget < 0) { memcpy (dst, src, sizeof (struct uae_input_device) * MAX_INPUT_DEVICES); } else { int j = selectedwidget; for (int i = 0; i < MAX_INPUT_DEVICES; i++) { for (int k = 0; k < MAX_INPUT_SUB_EVENT_ALL; k++) { dst[i].eventid[j][k] = src[i].eventid[j][k]; dst[i].custom[j][k] = src[i].custom[j][k]; dst[i].flags[j][k] = src[i].flags[j][k]; dst[i].port[j][k] = src[i].port[j][k]; } dst[i].extra[j] = src[i].extra[j]; } } for (int i = 0; i < MAX_INPUT_DEVICES; i++) { for (int j = 0; j < MAX_INPUT_DEVICE_EVENTS; j++) { if (j == selectedwidget || selectedwidget < 0) { for (int k = 0; k < MAX_INPUT_SUB_EVENT_ALL; k++) { if (dst[i].custom) dst[i].custom[j][k] = my_strdup (dst[i].custom[j][k]); } } } if (selectedwidget < 0) { dst[i].configname = my_strdup (dst[i].configname); dst[i].name = my_strdup (dst[i].name); } } } // copy whole configuration #x-slot to another // +1 = default // +2 = default (pc keyboard) void inputdevice_copy_single_config (struct uae_prefs *p, int src, int dst, int devnum, int selectedwidget) { if (selectedwidget >= 0) { if (devnum < 0) return; if (gettype (devnum) != IDTYPE_KEYBOARD) return; } if (src >= MAX_INPUT_SETTINGS) { if (gettype (devnum) == IDTYPE_KEYBOARD) { p->input_keyboard_type = src > MAX_INPUT_SETTINGS ? 1 : 0; keyboard_default = keyboard_default_table[p->input_keyboard_type]; inputdevice_default_kb (p, dst); } } if (src == dst) return; if (src < MAX_INPUT_SETTINGS) { if (devnum < 0 || gettype (devnum) == IDTYPE_JOYSTICK) copydev (p->joystick_settings[dst], p->joystick_settings[src], selectedwidget); if (devnum < 0 || gettype (devnum) == IDTYPE_MOUSE) copydev (p->mouse_settings[dst], p->mouse_settings[src], selectedwidget); if (devnum < 0 || gettype (devnum) == IDTYPE_KEYBOARD) copydev (p->keyboard_settings[dst], p->keyboard_settings[src], selectedwidget); } } void inputdevice_acquire (int allmode) { int i; //write_log (_T("inputdevice_acquire\n")); for (i = 0; i < MAX_INPUT_DEVICES; i++) idev[IDTYPE_JOYSTICK].unacquire (i); for (i = 0; i < MAX_INPUT_DEVICES; i++) idev[IDTYPE_MOUSE].unacquire (i); for (i = 0; i < MAX_INPUT_DEVICES; i++) idev[IDTYPE_KEYBOARD].unacquire (i); for (i = 0; i < MAX_INPUT_DEVICES; i++) { if ((use_joysticks[i] && allmode >= 0) || (allmode && !idev[IDTYPE_JOYSTICK].get_flags (i))) idev[IDTYPE_JOYSTICK].acquire (i, 0); } for (i = 0; i < MAX_INPUT_DEVICES; i++) { if ((use_mice[i] && allmode >= 0) || (allmode && !idev[IDTYPE_MOUSE].get_flags (i))) idev[IDTYPE_MOUSE].acquire (i, allmode < 0); } for (i = 0; i < MAX_INPUT_DEVICES; i++) { if ((use_keyboards[i] && allmode >= 0) || (allmode < 0 && !idev[IDTYPE_KEYBOARD].get_flags (i))) idev[IDTYPE_KEYBOARD].acquire (i, allmode < 0); } if (input_acquired) return; idev[IDTYPE_JOYSTICK].acquire (-1, 0); idev[IDTYPE_MOUSE].acquire (-1, 0); idev[IDTYPE_KEYBOARD].acquire (-1, 0); // if (!input_acquired) // write_log (_T("input devices acquired (%s)\n"), allmode ? "all" : "selected only"); input_acquired = 1; } void inputdevice_unacquire (void) { int i; //write_log (_T("inputdevice_unacquire\n")); for (i = 0; i < MAX_INPUT_DEVICES; i++) idev[IDTYPE_JOYSTICK].unacquire (i); for (i = 0; i < MAX_INPUT_DEVICES; i++) idev[IDTYPE_MOUSE].unacquire (i); for (i = 0; i < MAX_INPUT_DEVICES; i++) idev[IDTYPE_KEYBOARD].unacquire (i); if (!input_acquired) return; input_acquired = 0; idev[IDTYPE_JOYSTICK].unacquire (-1); idev[IDTYPE_MOUSE].unacquire (-1); idev[IDTYPE_KEYBOARD].unacquire (-1); } void inputdevice_testrecord (int type, int num, int wtype, int wnum, int state, int max) { //write_log (_T("%d %d %d %d %d/%d\n"), type, num, wtype, wnum, state, max); if (wnum < 0) { testmode = -1; return; } if (testmode_count >= TESTMODE_MAX) return; if (type == IDTYPE_KEYBOARD) { if (wnum == 0x100) { wnum = -1; } else { struct uae_input_device *na = &keyboards[num]; int j = 0; while (j < MAX_INPUT_DEVICE_EVENTS && na->extra[j] >= 0) { if (na->extra[j] == wnum) { wnum = j; break; } j++; } if (j >= MAX_INPUT_DEVICE_EVENTS || na->extra[j] < 0) return; } } // wait until previous event is released before accepting new ones for (int i = 0; i < TESTMODE_MAX; i++) { struct teststore *ts2 = &testmode_wait[i]; if (ts2->testmode_num < 0) continue; if (ts2->testmode_num != num || ts2->testmode_type != type || ts2->testmode_wtype != wtype || ts2->testmode_wnum != wnum) continue; if (max <= 0) { if (state) continue; } else { if (state < -(max / 2) || state > (max / 2)) continue; } ts2->testmode_num = -1; } if (max <= 0) { if (!state) return; } else { if (state >= -(max / 2) && state <= (max / 2)) return; } //write_log (_T("%d %d %d %d %d/%d\n"), type, num, wtype, wnum, state, max); struct teststore *ts = &testmode_data[testmode_count]; ts->testmode_type = type; ts->testmode_num = num; ts->testmode_wtype = wtype; ts->testmode_wnum = wnum; ts->testmode_state = state; ts->testmode_max = max; testmode_count++; } int inputdevice_istest (void) { return testmode; } void inputdevice_settest (int set) { testmode = set; testmode_count = 0; testmode_wait[0].testmode_num = -1; testmode_wait[1].testmode_num = -1; } int inputdevice_testread_count (void) { inputdevice_read (); if (testmode != 1) { testmode = 0; return -1; } return testmode_count; } int inputdevice_testread (int *devnum, int *wtype, int *state, bool doread) { if (doread) { inputdevice_read (); if (testmode != 1) { testmode = 0; return -1; } } if (testmode_count > 0) { testmode_count--; struct teststore *ts = &testmode_data[testmode_count]; *devnum = getdevnum (ts->testmode_type, ts->testmode_num); if (ts->testmode_wnum >= 0 && ts->testmode_wnum < MAX_INPUT_DEVICE_EVENTS) *wtype = idev[ts->testmode_type].get_widget_first (ts->testmode_num, ts->testmode_wtype) + ts->testmode_wnum; else *wtype = ts->testmode_wnum; *state = ts->testmode_state; if (ts->testmode_state) memcpy (&testmode_wait[testmode_count], ts, sizeof (struct teststore)); return 1; } return 0; } /* Call this function when host machine's joystick/joypad/etc button state changes * This function translates button events to Amiga joybutton/joyaxis/keyboard events */ /* button states: * state = -1 -> mouse wheel turned or similar (button without release) * state = 1 -> button pressed * state = 0 -> button released */ void setjoybuttonstate (int joy, int button, int state) { if (testmode) { inputdevice_testrecord (IDTYPE_JOYSTICK, joy, IDEV_WIDGET_BUTTON, button, state, -1); if (state < 0) inputdevice_testrecord (IDTYPE_JOYSTICK, joy, IDEV_WIDGET_BUTTON, button, 0, -1); return; } #if 0 if (ignoreoldinput (joy)) { if (state) switchdevice (&joysticks[joy], button, 1); return; } #endif setbuttonstateall (&joysticks[joy], &joysticks2[joy], button, state ? 1 : 0); } /* buttonmask = 1 = normal toggle button, 0 = mouse wheel turn or similar */ void setjoybuttonstateall (int joy, uae_u32 buttonbits, uae_u32 buttonmask) { int i; #if 0 if (ignoreoldinput (joy)) return; #endif for (i = 0; i < ID_BUTTON_TOTAL; i++) { if (buttonmask & (1 << i)) setbuttonstateall (&joysticks[joy], &joysticks2[joy], i, (buttonbits & (1 << i)) ? 1 : 0); else if (buttonbits & (1 << i)) setbuttonstateall (&joysticks[joy], &joysticks2[joy], i, -1); } } /* mouse buttons (just like joystick buttons) */ void setmousebuttonstateall (int mouse, uae_u32 buttonbits, uae_u32 buttonmask) { int i; uae_u32 obuttonmask = mice2[mouse].buttonmask; for (i = 0; i < ID_BUTTON_TOTAL; i++) { if (buttonmask & (1 << i)) setbuttonstateall (&mice[mouse], &mice2[mouse], i, (buttonbits & (1 << i)) ? 1 : 0); else if (buttonbits & (1 << i)) setbuttonstateall (&mice[mouse], &mice2[mouse], i, -1); } if (obuttonmask != mice2[mouse].buttonmask) mousehack_helper (mice2[mouse].buttonmask); } void setmousebuttonstate (int mouse, int button, int state) { uae_u32 obuttonmask = mice2[mouse].buttonmask; if (testmode) { inputdevice_testrecord (IDTYPE_MOUSE, mouse, IDEV_WIDGET_BUTTON, button, state, -1); return; } setbuttonstateall (&mice[mouse], &mice2[mouse], button, state); if (obuttonmask != mice2[mouse].buttonmask) mousehack_helper (mice2[mouse].buttonmask); } /* same for joystick axis (analog or digital) * (0 = center, -max = full left/top, max = full right/bottom) */ void setjoystickstate (int joy, int axis, int state, int max) { struct uae_input_device *id = &joysticks[joy]; struct uae_input_device2 *id2 = &joysticks2[joy]; int deadzone = currprefs.input_joymouse_deadzone * max / 100; int i, v1, v2; if (testmode) { inputdevice_testrecord (IDTYPE_JOYSTICK, joy, IDEV_WIDGET_AXIS, axis, state, max); return; } v1 = state; v2 = id2->states[axis]; if (v1 < deadzone && v1 > -deadzone) v1 = 0; if (v2 < deadzone && v2 > -deadzone) v2 = 0; if (v1 == v2) return; if (input_play && state) inprec_realtime (); if (input_play) return; if (!joysticks[joy].enabled) { if (v1) switchdevice (&joysticks[joy], axis * 2 + (v1 < 0 ? 0 : 1), false); return; } for (i = 0; i < MAX_INPUT_SUB_EVENT; i++) handle_input_event (id->eventid[ID_AXIS_OFFSET + axis][i], state, max, id->flags[ID_AXIS_OFFSET + axis][i] & ID_FLAG_AUTOFIRE, true, false); id2->states[axis] = state; } int getjoystickstate (int joy) { if (testmode) return 1; return joysticks[joy].enabled; } void setmousestate (int mouse, int axis, int data, int isabs) { int i, v, diff; int *mouse_p, *oldm_p; double d; struct uae_input_device *id = &mice[mouse]; static double fract[MAX_INPUT_DEVICES][MAX_INPUT_DEVICE_EVENTS]; if (testmode) { inputdevice_testrecord (IDTYPE_MOUSE, mouse, IDEV_WIDGET_AXIS, axis, data, -1); // fake "release" event inputdevice_testrecord (IDTYPE_MOUSE, mouse, IDEV_WIDGET_AXIS, axis, 0, -1); return; } if (input_play) return; if (!mice[mouse].enabled) { if (isabs && currprefs.input_tablet > 0) { if (axis == 0) lastmx = data; else lastmy = data; if (axis) mousehack_helper (mice2[mouse].buttonmask); } return; } d = 0; mouse_p = &mouse_axis[mouse][axis]; oldm_p = &oldm_axis[mouse][axis]; if (!isabs) { // eat relative movements while in mousehack mode if (currprefs.input_tablet == TABLET_MOUSEHACK && mousehack_alive ()) return; *oldm_p = *mouse_p; *mouse_p += data; d = (*mouse_p - *oldm_p) * currprefs.input_mouse_speed / 100.0; } else { d = data - *oldm_p; *oldm_p = data; *mouse_p += d; if (axis == 0) lastmx = data; else lastmy = data; if (axis) mousehack_helper (mice2[mouse].buttonmask); if (currprefs.input_tablet == TABLET_MOUSEHACK && mousehack_alive ()) return; } v = (int)d; fract[mouse][axis] += d - v; diff = (int)fract[mouse][axis]; v += diff; fract[mouse][axis] -= diff; for (i = 0; i < MAX_INPUT_SUB_EVENT; i++) handle_input_event (id->eventid[ID_AXIS_OFFSET + axis][i], v, 0, 0, true, false); } int getmousestate (int joy) { if (testmode) return 1; return mice[joy].enabled; } void warpmode (int mode) { int fr, fr2; fr = currprefs.gfx_framerate; if (fr == 0) fr = -1; fr2 = currprefs.turbo_emulation; if (fr2 == -1) fr2 = 0; if (mode < 0) { if (currprefs.turbo_emulation) { changed_prefs.gfx_framerate = currprefs.gfx_framerate = fr2; currprefs.turbo_emulation = 0; } else { currprefs.turbo_emulation = fr; } } else if (mode == 0 && currprefs.turbo_emulation) { if (currprefs.turbo_emulation > 0) changed_prefs.gfx_framerate = currprefs.gfx_framerate = fr2; currprefs.turbo_emulation = 0; } else if (mode > 0 && !currprefs.turbo_emulation) { currprefs.turbo_emulation = fr; } if (currprefs.turbo_emulation) { if (!currprefs.cpu_cycle_exact && !currprefs.blitter_cycle_exact) changed_prefs.gfx_framerate = currprefs.gfx_framerate = 10; pause_sound (); } else { resume_sound (); } compute_vsynctime (); #ifdef RETROPLATFORM rp_turbo_cpu (currprefs.turbo_emulation); #endif changed_prefs.turbo_emulation = currprefs.turbo_emulation; config_changed = 1; setsystime (); } void pausemode (int mode) { if (mode < 0) pause_emulation = pause_emulation ? 0 : 9; else pause_emulation = mode; config_changed = 1; setsystime (); } int jsem_isjoy (int port, const struct uae_prefs *p) { int v = JSEM_DECODEVAL (port, p); if (v < JSEM_JOYS) return -1; v -= JSEM_JOYS; if (v >= inputdevice_get_device_total (IDTYPE_JOYSTICK)) return -1; return v; } int jsem_ismouse (int port, const struct uae_prefs *p) { int v = JSEM_DECODEVAL (port, p); if (v < JSEM_MICE) return -1; v -= JSEM_MICE; if (v >= inputdevice_get_device_total (IDTYPE_MOUSE)) return -1; return v; } int jsem_iskbdjoy (int port, const struct uae_prefs *p) { int v = JSEM_DECODEVAL (port, p); if (v < JSEM_KBDLAYOUT) return -1; v -= JSEM_KBDLAYOUT; if (v >= JSEM_LASTKBD) return -1; return v; } int inputdevice_joyport_config (struct uae_prefs *p, const TCHAR *value, int portnum, int mode, int type) { switch (type) { case 1: case 2: { int i, j; for (j = 0; j < MAX_JPORTS; j++) { struct inputdevice_functions *idf; int type = IDTYPE_MOUSE; int idnum = JSEM_MICE; if (j > 0) { type = IDTYPE_JOYSTICK; idnum = JSEM_JOYS; } idf = &idev[type]; for (i = 0; i < idf->get_num (); i++) { TCHAR *name1 = idf->get_friendlyname (i); TCHAR *name2 = idf->get_uniquename (i); if ((name1 && !_tcscmp (name1, value)) || (name2 && !_tcscmp (name2, value))) { p->jports[portnum].id = idnum + i; if (mode >= 0) p->jports[portnum].mode = mode; config_changed = 1; return 1; } } } } break; case 0: { int start = JPORT_NONE, got = 0, max = -1; const TCHAR *pp = 0; if (_tcsncmp (value, _T("kbd"), 3) == 0) { start = JSEM_KBDLAYOUT; pp = value + 3; got = 1; max = JSEM_LASTKBD; } else if (_tcsncmp (value, _T("joy"), 3) == 0) { start = JSEM_JOYS; pp = value + 3; got = 1; max = idev[IDTYPE_JOYSTICK].get_num (); } else if (_tcsncmp (value, _T("mouse"), 5) == 0) { start = JSEM_MICE; pp = value + 5; got = 1; max = idev[IDTYPE_MOUSE].get_num (); } else if (_tcscmp (value, _T("none")) == 0) { got = 2; } else if (_tcscmp (value, _T("custom")) == 0) { got = 2; start = JPORT_CUSTOM; } if (got) { if (pp && max != 0) { int v = _tstol (pp); if (start >= 0) { if (start == JSEM_KBDLAYOUT && v > 0) v--; if (v >= 0) { if (v >= max) v = 0; start += v; got = 2; } } } if (got == 2) { p->jports[portnum].id = start; if (mode >= 0) p->jports[portnum].mode = mode; config_changed = 1; return 1; } } } break; } return 0; } int inputdevice_getjoyportdevice (int port, int val) { int idx; if (val == JPORT_CUSTOM) { idx = inputdevice_get_device_total (IDTYPE_JOYSTICK) + JSEM_LASTKBD; if (port < 2) idx += inputdevice_get_device_total (IDTYPE_MOUSE); } else if (val < 0) { idx = -1; } else if (val >= JSEM_MICE) { idx = val - JSEM_MICE; if (idx >= inputdevice_get_device_total (IDTYPE_MOUSE)) idx = 0; else idx += inputdevice_get_device_total (IDTYPE_JOYSTICK); idx += JSEM_LASTKBD; } else if (val >= JSEM_JOYS) { idx = val - JSEM_JOYS; if (idx >= inputdevice_get_device_total (IDTYPE_JOYSTICK)) idx = 0; idx += JSEM_LASTKBD; } else { idx = val - JSEM_KBDLAYOUT; } return idx; } // for state recorder use only! uae_u8 *save_inputstate (int *len, uae_u8 *dstptr) { uae_u8 *dstbak, *dst; if (dstptr) dstbak = dst = dstptr; else dstbak = dst = xmalloc (uae_u8, 1000); for (int i = 0; i < MAX_JPORTS; i++) { save_u16 (joydir[i]); save_u16 (joybutton[i]); save_u16 (otop[i]); save_u16 (obot[i]); save_u16 (oleft[i]); save_u16 (oright[i]); } for (int i = 0; i < NORMAL_JPORTS; i++) { save_u16 (cd32_shifter[i]); for (int j = 0; j < 2; j++) { save_u16 (pot_cap[i][j]); save_u16 (joydirpot[i][j]); } } for (int i = 0; i < NORMAL_JPORTS; i++) { for (int j = 0; j < MOUSE_AXIS_TOTAL; j++) { save_u16 (mouse_delta[i][j]); save_u16 (mouse_deltanoreset[i][j]); } save_u16 (mouse_frame_x[i]); save_u16 (mouse_frame_y[i]); } *len = dst - dstbak; return dstbak; } uae_u8 *restore_inputstate (uae_u8 *src) { for (int i = 0; i < MAX_JPORTS; i++) { joydir[i] = restore_u16 (); joybutton[i] = restore_u16 (); otop[i] = restore_u16 (); obot[i] = restore_u16 (); oleft[i] = restore_u16 (); oright[i] = restore_u16 (); } for (int i = 0; i < NORMAL_JPORTS; i++) { cd32_shifter[i] = restore_u16 (); for (int j = 0; j < 2; j++) { pot_cap[i][j] = restore_u16 (); joydirpot[i][j] = restore_u16 (); } } for (int i = 0; i < NORMAL_JPORTS; i++) { for (int j = 0; j < MOUSE_AXIS_TOTAL; j++) { mouse_delta[i][j] = restore_u16 (); mouse_deltanoreset[i][j] = restore_u16 (); } mouse_frame_x[i] = restore_u16 (); mouse_frame_y[i] = restore_u16 (); } return src; } void clear_inputstate (void) { return; for (int i = 0; i < MAX_JPORTS; i++) { horizclear[i] = 1; vertclear[i] = 1; } } fs-uae-2.2.3+dfsg/src/p96_blit.cpp0000644000175000017500000000566412162366655017013 0ustar glaubitzglaubitz #if BLT_SIZE == 3 static void NOINLINE BLT_NAME (unsigned int w, unsigned int h, uae_u8 *src, uae_u8 *dst, int srcpitch, int dstpitch) { uae_u8 *src2 = src; uae_u8 *dst2 = dst; uae_u32 *src2_32 = (uae_u32*)src; uae_u32 *dst2_32 = (uae_u32*)dst; unsigned int y, x, ww, xxd; #ifdef BLT_TEMP uae_u32 tmp; #endif w *= BLT_SIZE; ww = w / 4; xxd = w - (ww * 4); for(y = 0; y < h; y++) { uae_u8 *src_8; uae_u8 *dst_8; uae_u32 *src_32 = (uae_u32*)src2; uae_u32 *dst_32 = (uae_u32*)dst2; for (x = 0; x < ww; x++) { BLT_FUNC (src_32, dst_32); src_32++; dst_32++; } src_8 = (uae_u8*)src_32; dst_8 = (uae_u8*)dst_32; for (x = 0; x < xxd; x++) { BLT_FUNC (src_8, dst_8); src_8++; dst_8++; } dst2 += dstpitch; src2 += srcpitch; } } #else static void NOINLINE BLT_NAME (unsigned int w, unsigned int h, uae_u8 *src, uae_u8 *dst, int srcpitch, int dstpitch) { uae_u8 *src2 = src; uae_u8 *dst2 = dst; uae_u32 *src2_32 = (uae_u32*)src; uae_u32 *dst2_32 = (uae_u32*)dst; unsigned int y, x, ww, xxd; #ifdef BLT_TEMP #if BLT_SIZE == 4 uae_u32 tmp; #elif BLT_SIZE == 2 uae_u16 tmp; #else uae_u8 tmp; #endif #endif if (w < 8 * BLT_MULT) { ww = w / BLT_MULT; for(y = 0; y < h; y++) { uae_u32 *src_32 = (uae_u32*)src2; uae_u32 *dst_32 = (uae_u32*)dst2; for (x = 0; x < ww; x++) { BLT_FUNC (src_32, dst_32); src_32++; dst_32++; } #if BLT_SIZE == 2 if (w & 1) { uae_u16 *src_16 = (uae_u16*)src_32; uae_u16 *dst_16 = (uae_u16*)dst_32; BLT_FUNC (src_16, dst_16); } #elif BLT_SIZE == 1 { int wb = w & 3; uae_u8 *src_8 = (uae_u8*)src_32; uae_u8 *dst_8 = (uae_u8*)dst_32; while (wb--) { BLT_FUNC (src_8, dst_8); src_8++; dst_8++; } } #endif dst2 += dstpitch; src2 += srcpitch; } return; } ww = w / (8 * BLT_MULT); xxd = (w - ww * (8 * BLT_MULT)) / BLT_MULT; for(y = 0; y < h; y++) { uae_u32 *src_32 = (uae_u32*)src2; uae_u32 *dst_32 = (uae_u32*)dst2; for (x = 0; x < ww; x++) { BLT_FUNC (src_32, dst_32); src_32++; dst_32++; BLT_FUNC (src_32, dst_32); src_32++; dst_32++; BLT_FUNC (src_32, dst_32); src_32++; dst_32++; BLT_FUNC (src_32, dst_32); src_32++; dst_32++; BLT_FUNC (src_32, dst_32); src_32++; dst_32++; BLT_FUNC (src_32, dst_32); src_32++; dst_32++; BLT_FUNC (src_32, dst_32); src_32++; dst_32++; BLT_FUNC (src_32, dst_32); src_32++; dst_32++; } for (x = 0; x < xxd; x++) { BLT_FUNC (src_32, dst_32); src_32++; dst_32++; } #if BLT_SIZE == 2 if (w & 1) { uae_u16 *src_16 = (uae_u16*)src_32; uae_u16 *dst_16 = (uae_u16*)dst_32; BLT_FUNC (src_16, dst_16); } #elif BLT_SIZE == 1 { int wb = w & 3; uae_u8 *src_8 = (uae_u8*)src_32; uae_u8 *dst_8 = (uae_u8*)dst_32; while (wb--) { BLT_FUNC (src_8, dst_8); src_8++; dst_8++; } } #endif dst2 += dstpitch; src2 += srcpitch; } } #endif #undef BLT_NAME #undef BLT_FUNC #ifdef BLT_TEMP #undef BLT_TEMP #endiffs-uae-2.2.3+dfsg/src/cdrom.cpp0000644000175000017500000002514612162366655016464 0ustar glaubitzglaubitz#include "sysconfig.h" #include "sysdeps.h" /* CDROM MODE 1 EDC/ECC code (from Reed-Solomon library by Heiko Eissfeldt) */ /*****************************************************************/ /* */ /* CRC LOOKUP TABLE */ /* ================ */ /* The following CRC lookup table was generated automagically */ /* by the Rocksoft^tm Model CRC Algorithm Table Generation */ /* Program V1.0 using the following model parameters: */ /* */ /* Width : 4 bytes. */ /* Poly : 0x8001801BL */ /* Reverse : TRUE. */ /* */ /* For more information on the Rocksoft^tm Model CRC Algorithm, */ /* see the document titled "A Painless Guide to CRC Error */ /* Detection Algorithms" by Ross Williams */ /* (ross@guest.adelaide.edu.au.). This document is likely to be */ /* in the FTP archive "ftp.adelaide.edu.au/pub/rocksoft". */ /* */ /*****************************************************************/ static const uae_u32 EDC_crctable[256] = { 0x00000000L, 0x90910101L, 0x91210201L, 0x01B00300L, 0x92410401L, 0x02D00500L, 0x03600600L, 0x93F10701L, 0x94810801L, 0x04100900L, 0x05A00A00L, 0x95310B01L, 0x06C00C00L, 0x96510D01L, 0x97E10E01L, 0x07700F00L, 0x99011001L, 0x09901100L, 0x08201200L, 0x98B11301L, 0x0B401400L, 0x9BD11501L, 0x9A611601L, 0x0AF01700L, 0x0D801800L, 0x9D111901L, 0x9CA11A01L, 0x0C301B00L, 0x9FC11C01L, 0x0F501D00L, 0x0EE01E00L, 0x9E711F01L, 0x82012001L, 0x12902100L, 0x13202200L, 0x83B12301L, 0x10402400L, 0x80D12501L, 0x81612601L, 0x11F02700L, 0x16802800L, 0x86112901L, 0x87A12A01L, 0x17302B00L, 0x84C12C01L, 0x14502D00L, 0x15E02E00L, 0x85712F01L, 0x1B003000L, 0x8B913101L, 0x8A213201L, 0x1AB03300L, 0x89413401L, 0x19D03500L, 0x18603600L, 0x88F13701L, 0x8F813801L, 0x1F103900L, 0x1EA03A00L, 0x8E313B01L, 0x1DC03C00L, 0x8D513D01L, 0x8CE13E01L, 0x1C703F00L, 0xB4014001L, 0x24904100L, 0x25204200L, 0xB5B14301L, 0x26404400L, 0xB6D14501L, 0xB7614601L, 0x27F04700L, 0x20804800L, 0xB0114901L, 0xB1A14A01L, 0x21304B00L, 0xB2C14C01L, 0x22504D00L, 0x23E04E00L, 0xB3714F01L, 0x2D005000L, 0xBD915101L, 0xBC215201L, 0x2CB05300L, 0xBF415401L, 0x2FD05500L, 0x2E605600L, 0xBEF15701L, 0xB9815801L, 0x29105900L, 0x28A05A00L, 0xB8315B01L, 0x2BC05C00L, 0xBB515D01L, 0xBAE15E01L, 0x2A705F00L, 0x36006000L, 0xA6916101L, 0xA7216201L, 0x37B06300L, 0xA4416401L, 0x34D06500L, 0x35606600L, 0xA5F16701L, 0xA2816801L, 0x32106900L, 0x33A06A00L, 0xA3316B01L, 0x30C06C00L, 0xA0516D01L, 0xA1E16E01L, 0x31706F00L, 0xAF017001L, 0x3F907100L, 0x3E207200L, 0xAEB17301L, 0x3D407400L, 0xADD17501L, 0xAC617601L, 0x3CF07700L, 0x3B807800L, 0xAB117901L, 0xAAA17A01L, 0x3A307B00L, 0xA9C17C01L, 0x39507D00L, 0x38E07E00L, 0xA8717F01L, 0xD8018001L, 0x48908100L, 0x49208200L, 0xD9B18301L, 0x4A408400L, 0xDAD18501L, 0xDB618601L, 0x4BF08700L, 0x4C808800L, 0xDC118901L, 0xDDA18A01L, 0x4D308B00L, 0xDEC18C01L, 0x4E508D00L, 0x4FE08E00L, 0xDF718F01L, 0x41009000L, 0xD1919101L, 0xD0219201L, 0x40B09300L, 0xD3419401L, 0x43D09500L, 0x42609600L, 0xD2F19701L, 0xD5819801L, 0x45109900L, 0x44A09A00L, 0xD4319B01L, 0x47C09C00L, 0xD7519D01L, 0xD6E19E01L, 0x46709F00L, 0x5A00A000L, 0xCA91A101L, 0xCB21A201L, 0x5BB0A300L, 0xC841A401L, 0x58D0A500L, 0x5960A600L, 0xC9F1A701L, 0xCE81A801L, 0x5E10A900L, 0x5FA0AA00L, 0xCF31AB01L, 0x5CC0AC00L, 0xCC51AD01L, 0xCDE1AE01L, 0x5D70AF00L, 0xC301B001L, 0x5390B100L, 0x5220B200L, 0xC2B1B301L, 0x5140B400L, 0xC1D1B501L, 0xC061B601L, 0x50F0B700L, 0x5780B800L, 0xC711B901L, 0xC6A1BA01L, 0x5630BB00L, 0xC5C1BC01L, 0x5550BD00L, 0x54E0BE00L, 0xC471BF01L, 0x6C00C000L, 0xFC91C101L, 0xFD21C201L, 0x6DB0C300L, 0xFE41C401L, 0x6ED0C500L, 0x6F60C600L, 0xFFF1C701L, 0xF881C801L, 0x6810C900L, 0x69A0CA00L, 0xF931CB01L, 0x6AC0CC00L, 0xFA51CD01L, 0xFBE1CE01L, 0x6B70CF00L, 0xF501D001L, 0x6590D100L, 0x6420D200L, 0xF4B1D301L, 0x6740D400L, 0xF7D1D501L, 0xF661D601L, 0x66F0D700L, 0x6180D800L, 0xF111D901L, 0xF0A1DA01L, 0x6030DB00L, 0xF3C1DC01L, 0x6350DD00L, 0x62E0DE00L, 0xF271DF01L, 0xEE01E001L, 0x7E90E100L, 0x7F20E200L, 0xEFB1E301L, 0x7C40E400L, 0xECD1E501L, 0xED61E601L, 0x7DF0E700L, 0x7A80E800L, 0xEA11E901L, 0xEBA1EA01L, 0x7B30EB00L, 0xE8C1EC01L, 0x7850ED00L, 0x79E0EE00L, 0xE971EF01L, 0x7700F000L, 0xE791F101L, 0xE621F201L, 0x76B0F300L, 0xE541F401L, 0x75D0F500L, 0x7460F600L, 0xE4F1F701L, 0xE381F801L, 0x7310F900L, 0x72A0FA00L, 0xE231FB01L, 0x71C0FC00L, 0xE151FD01L, 0xE0E1FE01L, 0x7070FF00L }; /*****************************************************************/ /* End of CRC Lookup Table */ /*****************************************************************/ static uae_u8 rs_l12_alog[255] = { 1, 2, 4, 8,16,32,64,128,29,58,116,232,205,135,19,38,76,152,45,90,180,117,234,201,143, 3, 6,12,24,48,96,192,157,39,78,156,37,74,148,53,106,212,181,119,238,193,159,35,70,140, 5,10,20,40,80,160,93,186,105,210,185,111,222,161,95,190,97,194,153,47,94,188,101,202,137,15,30,60,120,240,253,231,211,187,107,214,177,127,254,225,223,163,91,182,113,226,217,175,67,134,17,34,68,136,13,26,52,104,208,189,103,206,129,31,62,124,248,237,199,147,59,118,236,197,151,51,102,204,133,23,46,92,184,109,218,169,79,158,33,66,132,21,42,84,168,77,154,41,82,164,85,170,73,146,57,114,228,213,183,115,230,209,191,99,198,145,63,126,252,229,215,179,123,246,241,255,227,219,171,75,150,49,98,196,149,55,110,220,165,87,174,65,130,25,50,100,200,141, 7,14,28,56,112,224,221,167,83,166,81,162,89,178,121,242,249,239,195,155,43,86,172,69,138, 9,18,36,72,144,61,122,244,245,247,243,251,235,203,139,11,22,44,88,176,125,250,233,207,131,27,54,108,216,173,71,142,}; static uae_u8 rs_l12_log[256] = { 0, 0, 1,25, 2,50,26,198, 3,223,51,238,27,104,199,75, 4,100,224,14,52,141,239,129,28,193,105,248,200, 8,76,113, 5,138,101,47,225,36,15,33,53,147,142,218,240,18,130,69,29,181,194,125,106,39,249,185,201,154, 9,120,77,228,114,166, 6,191,139,98,102,221,48,253,226,152,37,179,16,145,34,136,54,208,148,206,143,150,219,189,241,210,19,92,131,56,70,64,30,66,182,163,195,72,126,110,107,58,40,84,250,133,186,61,202,94,155,159,10,21,121,43,78,212,229,172,115,243,167,87, 7,112,192,247,140,128,99,13,103,74,222,237,49,197,254,24,227,165,153,119,38,184,180,124,17,68,146,217,35,32,137,46,55,63,209,91,149,188,207,205,144,135,151,178,220,252,190,97,242,86,211,171,20,42,93,158,132,60,57,83,71,109,65,162,31,45,67,216,183,123,164,118,196,23,73,236,127,12,111,246,108,161,59,82,41,157,85,170,251,96,134,177,187,204,62,90,203,89,95,176,156,169,160,81,11,245,22,235,122,117,44,215,79,174,213,233,230,231,173,232,116,214,244,234,168,80,88,175,}; static uae_u8 DQ[2][43] = { {190,96,250,132,59,81,159,154,200,7,111,245,10,20,41,156,168,79,173,231,229,171,210,240,17,67,215,43,120,8,199,74,102,220,251,95,175,87,166,113,75,198,25,}, {97,251,133,60,82,160,155,201,8,112,246,11,21,42,157,169,80,174,232,230,172,211,241,18,68,216,44,121,9,200,75,103,221,252,96,176,88,167,114,76,199,26,1,}, }; static uae_u8 DP[2][24] = { {231,229,171,210,240,17,67,215,43,120,8,199,74,102,220,251,95,175,87,166,113,75,198,25,}, {230,172,211,241,18,68,216,44,121,9,200,75,103,221,252,96,176,88,167,114,76,199,26,1,}, }; /* data sector definitions for RSPC */ /* user data bytes per frame */ #define L2_RAW (1024*2) /* parity bytes for 16 bit units */ #define L2_Q (26*2*2) #define L2_P (43*2*2) #define RS_L12_BITS 8 static uae_u32 build_edc (const uae_u8 *inout, int from, int upto) { const uae_u8 *p = inout + from; uae_u32 result = 0; for (; from <= upto; from++) result = EDC_crctable[(result ^ *p++) & 0xff] ^ (result >> 8); return result; } static void encode_L2_Q(uae_u8 *inout) { uae_u8 *Q; int i,j; Q = inout + 4 + L2_RAW + 4 + 8 + L2_P; memset(Q, 0, L2_Q); for (j = 0; j < 26; j++) { for (i = 0; i < 43; i++) { uae_u8 data; /* LSB */ data = inout[(j*43*2+i*2*44) % (4 + L2_RAW + 4 + 8 + L2_P)]; if (data != 0) { uae_u32 base = rs_l12_log[data]; uae_u32 sum = base + DQ[0][i]; if (sum >= ((1 << RS_L12_BITS)-1)) sum -= (1 << RS_L12_BITS)-1; Q[0] ^= rs_l12_alog[sum]; sum = base + DQ[1][i]; if (sum >= ((1 << RS_L12_BITS)-1)) sum -= (1 << RS_L12_BITS)-1; Q[26*2] ^= rs_l12_alog[sum]; } /* MSB */ data = inout[(j*43*2+i*2*44+1) % (4 + L2_RAW + 4 + 8 + L2_P)]; if (data != 0) { uae_u32 base = rs_l12_log[data]; uae_u32 sum = base+DQ[0][i]; if (sum >= ((1 << RS_L12_BITS)-1)) sum -= (1 << RS_L12_BITS)-1; Q[1] ^= rs_l12_alog[sum]; sum = base + DQ[1][i]; if (sum >= ((1 << RS_L12_BITS)-1)) sum -= (1 << RS_L12_BITS)-1; Q[26*2+1] ^= rs_l12_alog[sum]; } } Q += 2; } } static void encode_L2_P(uae_u8 inout[4 + L2_RAW + 4 + 8 + L2_P]) { uae_u8 *P; int i,j; P = inout + 4 + L2_RAW + 4 + 8; memset(P, 0, L2_P); for (j = 0; j < 43; j++) { for (i = 0; i < 24; i++) { uae_u8 data; /* LSB */ data = inout[i*2*43]; if (data != 0) { uae_u32 base = rs_l12_log[data]; uae_u32 sum = base + DP[0][i]; if (sum >= ((1 << RS_L12_BITS)-1)) sum -= (1 << RS_L12_BITS)-1; P[0] ^= rs_l12_alog[sum]; sum = base + DP[1][i]; if (sum >= ((1 << RS_L12_BITS)-1)) sum -= (1 << RS_L12_BITS)-1; P[43*2] ^= rs_l12_alog[sum]; } /* MSB */ data = inout[i*2*43+1]; if (data != 0) { uae_u32 base = rs_l12_log[data]; uae_u32 sum = base + DP[0][i]; if (sum >= ((1 << RS_L12_BITS)-1)) sum -= (1 << RS_L12_BITS)-1; P[1] ^= rs_l12_alog[sum]; sum = base + DP[1][i]; if (sum >= ((1 << RS_L12_BITS)-1)) sum -= (1 << RS_L12_BITS)-1; P[43*2+1] ^= rs_l12_alog[sum]; } } P += 2; inout += 2; } } static uae_u8 tobcd (uae_u8 v) { return ((v / 10) << 4) | (v % 10); } void encode_l2 (uae_u8 *p, int address) { uae_u32 v; p[0] = 0x00; memset (p + 1, 0xff, 11); p[12] = tobcd ((uae_u8)(address / (60 * 75))); p[13] = tobcd ((uae_u8)((address / 75) % 60)); p[14] = tobcd ((uae_u8)(address % 75)); p[15] = 1; /* MODE1 */ v = build_edc (p, 0, 16 + 2048 - 1); p[2064 + 0] = (uae_u8) (v >> 0); p[2064 + 1] = (uae_u8) (v >> 8); p[2064 + 2] = (uae_u8) (v >> 16); p[2064 + 3] = (uae_u8) (v >> 24); memset (p + 2064 + 4, 0, 8); encode_L2_P (p + 12); encode_L2_Q (p + 12); } fs-uae-2.2.3+dfsg/src/epsonprinter.cpp0000644000175000017500000023426512162366655020114 0ustar glaubitzglaubitz/* * Copyright (C) 2002-2004 The DOSBox Team * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Library General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* * Converted to WinUAE by Toni Wilen 2009 * * Freetype to Win32 CreateFont() conversion by TW in 2010 */ #include "sysconfig.h" #include "sysdeps.h" #include "uae.h" #define WINFONT #define C_LIBPNG #include "epsonprinter.h" #include "win32.h" #include "parser.h" #include "threaddep/thread.h" #include //#define DEBUGPRINT _T("C:\\Users\\twilen\\Desktop\\CMD_file.1") int pngprint = 0; #ifdef C_LIBPNG #include #include #endif #define PARAM16(I) (params[I+1]*256+params[I]) #define PIXX ((Bitu)floor(curX*dpiX+0.5)) #define PIXY ((Bitu)floor(curY*dpiY+0.5)) #define true 1 #define false 0 #ifdef WINFONT static const TCHAR *epsonprintername; static HFONT curFont; static float curFontHorizPoints, curFontVertPoints; static TCHAR *curFontName; static HDC memHDC; static LPOUTLINETEXTMETRIC otm; #else static FT_Library FTlib; static FT_Face curFont; #endif static Real64 curX, curY; static Bit16u dpiX, dpiY, ESCCmd; static int ESCSeen; static Bit8u numParam, neededParam; static Bit8u params[20]; static Bit16u style; static Real64 cpi, actcpi; static Bit8u score; static Real64 topMargin, bottomMargin, rightMargin, leftMargin; static Real64 pageWidth, pageHeight, defaultPageWidth, defaultPageHeight; static Real64 lineSpacing, horiztabs[32]; static Bit8u numHorizTabs; static Real64 verttabs[16]; static Bit8u numVertTabs, curCharTable, printQuality; static enum Typeface LQtypeFace; static Real64 extraIntraSpace; static int charRead, autoFeed, printUpperContr; static int printColor, colorPrinted; static struct bitGraphicParams { Bit16u horizDens, vertDens; int adjacent; Bit8u bytesColumn; Bit16u remBytes; Bit8u column[6]; Bit8u readBytesColumn; int pin9; } bitGraph; static Bit8u densk, densl, densy, densz; static Bit16u curMap[256], charTables[4]; static Real64 definedUnit; static int multipoint; static Real64 multiPointSize, multicpi, hmi; static Bit8u msb; static Bit16u numPrintAsChar; static void *outputHandle; static Bit16u multipageOutput, multiPageCounter; static HDC printerDC; static int justification; #define CHARBUFFERSIZE 1000 static int charcnt; static Bit8u charbuffer[CHARBUFFERSIZE]; static uae_u8 *page, *cpage; static int page_w, page_h, page_pitch; static int pagesize; static HMODULE ft; static int pins = 24; static void printCharBuffer(void); static Bit8u colors[] = { 0x00, 0x00, 0x00, // 0 black 0xff, 0x00, 0xff, // 1 magenta (/green) 0x00, 0xff, 0xff, // 2 cyan (/red) 0xff, 0x00, 0xff, // 3 violet 0xff, 0xff, 0x00, // 4 yellow (/blue) 0xff, 0x00, 0x00, // 5 red 0x00, 0xff, 0x00 // 6 green }; // Various ASCII codepage to unicode maps static const Bit16u cp437Map[256] = { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,0x0008,0x0009,0x000a,0x000b,0x000c,0x000d,0x000e,0x000f, 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,0x0018,0x0019,0x001a,0x001b,0x001c,0x001d,0x001e,0x001f, 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,0x0028,0x0029,0x002a,0x002b,0x002c,0x002d,0x002e,0x002f, 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,0x0038,0x0039,0x003a,0x003b,0x003c,0x003d,0x003e,0x003f, 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,0x0048,0x0049,0x004a,0x004b,0x004c,0x004d,0x004e,0x004f, 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,0x0058,0x0059,0x005a,0x005b,0x005c,0x005d,0x005e,0x005f, 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,0x0068,0x0069,0x006a,0x006b,0x006c,0x006d,0x006e,0x006f, 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,0x0078,0x0079,0x007a,0x007b,0x007c,0x007d,0x007e,0x007f, 0x00c7,0x00fc,0x00e9,0x00e2,0x00e4,0x00e0,0x00e5,0x00e7,0x00ea,0x00eb,0x00e8,0x00ef,0x00ee,0x00ec,0x00c4,0x00c5, 0x00c9,0x00e6,0x00c6,0x00f4,0x00f6,0x00f2,0x00fb,0x00f9,0x00ff,0x00d6,0x00dc,0x00a2,0x00a3,0x00a5,0x20a7,0x0192, 0x00e1,0x00ed,0x00f3,0x00fa,0x00f1,0x00d1,0x00aa,0x00ba,0x00bf,0x2310,0x00ac,0x00bd,0x00bc,0x00a1,0x00ab,0x00bb, 0x2591,0x2592,0x2593,0x2502,0x2524,0x2561,0x2562,0x2556,0x2555,0x2563,0x2551,0x2557,0x255d,0x255c,0x255b,0x2510, 0x2514,0x2534,0x252c,0x251c,0x2500,0x253c,0x255e,0x255f,0x255a,0x2554,0x2569,0x2566,0x2560,0x2550,0x256c,0x2567, 0x2568,0x2564,0x2565,0x2559,0x2558,0x2552,0x2553,0x256b,0x256a,0x2518,0x250c,0x2588,0x2584,0x258c,0x2590,0x2580, 0x03b1,0x00df,0x0393,0x03c0,0x03a3,0x03c3,0x00b5,0x03c4,0x03a6,0x0398,0x03a9,0x03b4,0x221e,0x03c6,0x03b5,0x2229, 0x2261,0x00b1,0x2265,0x2264,0x2320,0x2321,0x00f7,0x2248,0x00b0,0x2219,0x00b7,0x221a,0x207f,0x00b2,0x25a0,0x00a0 }; static const Bit16u cp737Map[256] = { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,0x0008,0x0009,0x000a,0x000b,0x000c,0x000d,0x000e,0x000f, 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,0x0018,0x0019,0x001a,0x001b,0x001c,0x001d,0x001e,0x001f, 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,0x0028,0x0029,0x002a,0x002b,0x002c,0x002d,0x002e,0x002f, 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,0x0038,0x0039,0x003a,0x003b,0x003c,0x003d,0x003e,0x003f, 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,0x0048,0x0049,0x004a,0x004b,0x004c,0x004d,0x004e,0x004f, 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,0x0058,0x0059,0x005a,0x005b,0x005c,0x005d,0x005e,0x005f, 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,0x0068,0x0069,0x006a,0x006b,0x006c,0x006d,0x006e,0x006f, 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,0x0078,0x0079,0x007a,0x007b,0x007c,0x007d,0x007e,0x007f, 0x0391,0x0392,0x0393,0x0394,0x0395,0x0396,0x0397,0x0398,0x0399,0x039a,0x039b,0x039c,0x039d,0x039e,0x039f,0x03a0, 0x03a1,0x03a3,0x03a4,0x03a5,0x03a6,0x03a7,0x03a8,0x03a9,0x03b1,0x03b2,0x03b3,0x03b4,0x03b5,0x03b6,0x03b7,0x03b8, 0x03b9,0x03ba,0x03bb,0x03bc,0x03bd,0x03be,0x03bf,0x03c0,0x03c1,0x03c3,0x03c2,0x03c4,0x03c5,0x03c6,0x03c7,0x03c8, 0x2591,0x2592,0x2593,0x2502,0x2524,0x2561,0x2562,0x2556,0x2555,0x2563,0x2551,0x2557,0x255d,0x255c,0x255b,0x2510, 0x2514,0x2534,0x252c,0x251c,0x2500,0x253c,0x255e,0x255f,0x255a,0x2554,0x2569,0x2566,0x2560,0x2550,0x256c,0x2567, 0x2568,0x2564,0x2565,0x2559,0x2558,0x2552,0x2553,0x256b,0x256a,0x2518,0x250c,0x2588,0x2584,0x258c,0x2590,0x2580, 0x03c9,0x03ac,0x03ad,0x03ae,0x03ca,0x03af,0x03cc,0x03cd,0x03cb,0x03ce,0x0386,0x0388,0x0389,0x038a,0x038c,0x038e, 0x038f,0x00b1,0x2265,0x2264,0x03aa,0x03ab,0x00f7,0x2248,0x00b0,0x2219,0x00b7,0x221a,0x207f,0x00b2,0x25a0,0x00a0 }; static const Bit16u cp775Map[256] = { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,0x0008,0x0009,0x000a,0x000b,0x000c,0x000d,0x000e,0x000f, 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,0x0018,0x0019,0x001a,0x001b,0x001c,0x001d,0x001e,0x001f, 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,0x0028,0x0029,0x002a,0x002b,0x002c,0x002d,0x002e,0x002f, 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,0x0038,0x0039,0x003a,0x003b,0x003c,0x003d,0x003e,0x003f, 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,0x0048,0x0049,0x004a,0x004b,0x004c,0x004d,0x004e,0x004f, 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,0x0058,0x0059,0x005a,0x005b,0x005c,0x005d,0x005e,0x005f, 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,0x0068,0x0069,0x006a,0x006b,0x006c,0x006d,0x006e,0x006f, 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,0x0078,0x0079,0x007a,0x007b,0x007c,0x007d,0x007e,0x007f, 0x0106,0x00fc,0x00e9,0x0101,0x00e4,0x0123,0x00e5,0x0107,0x0142,0x0113,0x0156,0x0157,0x012b,0x0179,0x00c4,0x00c5, 0x00c9,0x00e6,0x00c6,0x014d,0x00f6,0x0122,0x00a2,0x015a,0x015b,0x00d6,0x00dc,0x00f8,0x00a3,0x00d8,0x00d7,0x00a4, 0x0100,0x012a,0x00f3,0x017b,0x017c,0x017a,0x201d,0x00a6,0x00a9,0x00ae,0x00ac,0x00bd,0x00bc,0x0141,0x00ab,0x00bb, 0x2591,0x2592,0x2593,0x2502,0x2524,0x0104,0x010c,0x0118,0x0116,0x2563,0x2551,0x2557,0x255d,0x012e,0x0160,0x2510, 0x2514,0x2534,0x252c,0x251c,0x2500,0x253c,0x0172,0x016a,0x255a,0x2554,0x2569,0x2566,0x2560,0x2550,0x256c,0x017d, 0x0105,0x010d,0x0119,0x0117,0x012f,0x0161,0x0173,0x016b,0x017e,0x2518,0x250c,0x2588,0x2584,0x258c,0x2590,0x2580, 0x00d3,0x00df,0x014c,0x0143,0x00f5,0x00d5,0x00b5,0x0144,0x0136,0x0137,0x013b,0x013c,0x0146,0x0112,0x0145,0x2019, 0x00ad,0x00b1,0x201c,0x00be,0x00b6,0x00a7,0x00f7,0x201e,0x00b0,0x2219,0x00b7,0x00b9,0x00b3,0x00b2,0x25a0,0x00a0 }; static const Bit16u cp850Map[256] = { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,0x0008,0x0009,0x000a,0x000b,0x000c,0x000d,0x000e,0x000f, 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,0x0018,0x0019,0x001a,0x001b,0x001c,0x001d,0x001e,0x001f, 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,0x0028,0x0029,0x002a,0x002b,0x002c,0x002d,0x002e,0x002f, 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,0x0038,0x0039,0x003a,0x003b,0x003c,0x003d,0x003e,0x003f, 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,0x0048,0x0049,0x004a,0x004b,0x004c,0x004d,0x004e,0x004f, 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,0x0058,0x0059,0x005a,0x005b,0x005c,0x005d,0x005e,0x005f, 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,0x0068,0x0069,0x006a,0x006b,0x006c,0x006d,0x006e,0x006f, 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,0x0078,0x0079,0x007a,0x007b,0x007c,0x007d,0x007e,0x007f, 0x00c7,0x00fc,0x00e9,0x00e2,0x00e4,0x00e0,0x00e5,0x00e7,0x00ea,0x00eb,0x00e8,0x00ef,0x00ee,0x00ec,0x00c4,0x00c5, 0x00c9,0x00e6,0x00c6,0x00f4,0x00f6,0x00f2,0x00fb,0x00f9,0x00ff,0x00d6,0x00dc,0x00f8,0x00a3,0x00d8,0x00d7,0x0192, 0x00e1,0x00ed,0x00f3,0x00fa,0x00f1,0x00d1,0x00aa,0x00ba,0x00bf,0x00ae,0x00ac,0x00bd,0x00bc,0x00a1,0x00ab,0x00bb, 0x2591,0x2592,0x2593,0x2502,0x2524,0x00c1,0x00c2,0x00c0,0x00a9,0x2563,0x2551,0x2557,0x255d,0x00a2,0x00a5,0x2510, 0x2514,0x2534,0x252c,0x251c,0x2500,0x253c,0x00e3,0x00c3,0x255a,0x2554,0x2569,0x2566,0x2560,0x2550,0x256c,0x00a4, 0x00f0,0x00d0,0x00ca,0x00cb,0x00c8,0x0131,0x00cd,0x00ce,0x00cf,0x2518,0x250c,0x2588,0x2584,0x00a6,0x00cc,0x2580, 0x00d3,0x00df,0x00d4,0x00d2,0x00f5,0x00d5,0x00b5,0x00fe,0x00de,0x00da,0x00db,0x00d9,0x00fd,0x00dd,0x00af,0x00b4, 0x00ad,0x00b1,0x2017,0x00be,0x00b6,0x00a7,0x00f7,0x00b8,0x00b0,0x00a8,0x00b7,0x00b9,0x00b3,0x00b2,0x25a0,0x00a0 }; static const Bit16u cp852Map[256] = { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,0x0008,0x0009,0x000a,0x000b,0x000c,0x000d,0x000e,0x000f, 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,0x0018,0x0019,0x001a,0x001b,0x001c,0x001d,0x001e,0x001f, 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,0x0028,0x0029,0x002a,0x002b,0x002c,0x002d,0x002e,0x002f, 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,0x0038,0x0039,0x003a,0x003b,0x003c,0x003d,0x003e,0x003f, 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,0x0048,0x0049,0x004a,0x004b,0x004c,0x004d,0x004e,0x004f, 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,0x0058,0x0059,0x005a,0x005b,0x005c,0x005d,0x005e,0x005f, 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,0x0068,0x0069,0x006a,0x006b,0x006c,0x006d,0x006e,0x006f, 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,0x0078,0x0079,0x007a,0x007b,0x007c,0x007d,0x007e,0x007f, 0x00c7,0x00fc,0x00e9,0x00e2,0x00e4,0x016f,0x0107,0x00e7,0x0142,0x00eb,0x0150,0x0151,0x00ee,0x0179,0x00c4,0x0106, 0x00c9,0x0139,0x013a,0x00f4,0x00f6,0x013d,0x013e,0x015a,0x015b,0x00d6,0x00dc,0x0164,0x0165,0x0141,0x00d7,0x010d, 0x00e1,0x00ed,0x00f3,0x00fa,0x0104,0x0105,0x017d,0x017e,0x0118,0x0119,0x00ac,0x017a,0x010c,0x015f,0x00ab,0x00bb, 0x2591,0x2592,0x2593,0x2502,0x2524,0x00c1,0x00c2,0x011a,0x015e,0x2563,0x2551,0x2557,0x255d,0x017b,0x017c,0x2510, 0x2514,0x2534,0x252c,0x251c,0x2500,0x253c,0x0102,0x0103,0x255a,0x2554,0x2569,0x2566,0x2560,0x2550,0x256c,0x00a4, 0x0111,0x0110,0x010e,0x00cb,0x010f,0x0147,0x00cd,0x00ce,0x011b,0x2518,0x250c,0x2588,0x2584,0x0162,0x016e,0x2580, 0x00d3,0x00df,0x00d4,0x0143,0x0144,0x0148,0x0160,0x0161,0x0154,0x00da,0x0155,0x0170,0x00fd,0x00dd,0x0163,0x00b4, 0x00ad,0x02dd,0x02db,0x02c7,0x02d8,0x00a7,0x00f7,0x00b8,0x00b0,0x00a8,0x02d9,0x0171,0x0158,0x0159,0x25a0,0x00a0 }; static const Bit16u cp855Map[256] = { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,0x0008,0x0009,0x000a,0x000b,0x000c,0x000d,0x000e,0x000f, 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,0x0018,0x0019,0x001a,0x001b,0x001c,0x001d,0x001e,0x001f, 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,0x0028,0x0029,0x002a,0x002b,0x002c,0x002d,0x002e,0x002f, 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,0x0038,0x0039,0x003a,0x003b,0x003c,0x003d,0x003e,0x003f, 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,0x0048,0x0049,0x004a,0x004b,0x004c,0x004d,0x004e,0x004f, 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,0x0058,0x0059,0x005a,0x005b,0x005c,0x005d,0x005e,0x005f, 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,0x0068,0x0069,0x006a,0x006b,0x006c,0x006d,0x006e,0x006f, 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,0x0078,0x0079,0x007a,0x007b,0x007c,0x007d,0x007e,0x007f, 0x0452,0x0402,0x0453,0x0403,0x0451,0x0401,0x0454,0x0404,0x0455,0x0405,0x0456,0x0406,0x0457,0x0407,0x0458,0x0408, 0x0459,0x0409,0x045a,0x040a,0x045b,0x040b,0x045c,0x040c,0x045e,0x040e,0x045f,0x040f,0x044e,0x042e,0x044a,0x042a, 0x0430,0x0410,0x0431,0x0411,0x0446,0x0426,0x0434,0x0414,0x0435,0x0415,0x0444,0x0424,0x0433,0x0413,0x00ab,0x00bb, 0x2591,0x2592,0x2593,0x2502,0x2524,0x0445,0x0425,0x0438,0x0418,0x2563,0x2551,0x2557,0x255d,0x0439,0x0419,0x2510, 0x2514,0x2534,0x252c,0x251c,0x2500,0x253c,0x043a,0x041a,0x255a,0x2554,0x2569,0x2566,0x2560,0x2550,0x256c,0x00a4, 0x043b,0x041b,0x043c,0x041c,0x043d,0x041d,0x043e,0x041e,0x043f,0x2518,0x250c,0x2588,0x2584,0x041f,0x044f,0x2580, 0x042f,0x0440,0x0420,0x0441,0x0421,0x0442,0x0422,0x0443,0x0423,0x0436,0x0416,0x0432,0x0412,0x044c,0x042c,0x2116, 0x00ad,0x044b,0x042b,0x0437,0x0417,0x0448,0x0428,0x044d,0x042d,0x0449,0x0429,0x0447,0x0427,0x00a7,0x25a0,0x00a0 }; static const Bit16u cp857Map[256] = { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,0x0008,0x0009,0x000a,0x000b,0x000c,0x000d,0x000e,0x000f, 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,0x0018,0x0019,0x001a,0x001b,0x001c,0x001d,0x001e,0x001f, 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,0x0028,0x0029,0x002a,0x002b,0x002c,0x002d,0x002e,0x002f, 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,0x0038,0x0039,0x003a,0x003b,0x003c,0x003d,0x003e,0x003f, 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,0x0048,0x0049,0x004a,0x004b,0x004c,0x004d,0x004e,0x004f, 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,0x0058,0x0059,0x005a,0x005b,0x005c,0x005d,0x005e,0x005f, 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,0x0068,0x0069,0x006a,0x006b,0x006c,0x006d,0x006e,0x006f, 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,0x0078,0x0079,0x007a,0x007b,0x007c,0x007d,0x007e,0x007f, 0x00c7,0x00fc,0x00e9,0x00e2,0x00e4,0x00e0,0x00e5,0x00e7,0x00ea,0x00eb,0x00e8,0x00ef,0x00ee,0x0131,0x00c4,0x00c5, 0x00c9,0x00e6,0x00c6,0x00f4,0x00f6,0x00f2,0x00fb,0x00f9,0x0130,0x00d6,0x00dc,0x00f8,0x00a3,0x00d8,0x015e,0x015f, 0x00e1,0x00ed,0x00f3,0x00fa,0x00f1,0x00d1,0x011e,0x011f,0x00bf,0x00ae,0x00ac,0x00bd,0x00bc,0x00a1,0x00ab,0x00bb, 0x2591,0x2592,0x2593,0x2502,0x2524,0x00c1,0x00c2,0x00c0,0x00a9,0x2563,0x2551,0x2557,0x255d,0x00a2,0x00a5,0x2510, 0x2514,0x2534,0x252c,0x251c,0x2500,0x253c,0x00e3,0x00c3,0x255a,0x2554,0x2569,0x2566,0x2560,0x2550,0x256c,0x00a4, 0x00ba,0x00aa,0x00ca,0x00cb,0x00c8,0x0000,0x00cd,0x00ce,0x00cf,0x2518,0x250c,0x2588,0x2584,0x00a6,0x00cc,0x2580, 0x00d3,0x00df,0x00d4,0x00d2,0x00f5,0x00d5,0x00b5,0x0000,0x00d7,0x00da,0x00db,0x00d9,0x00ec,0x00ff,0x00af,0x00b4, 0x00ad,0x00b1,0x0000,0x00be,0x00b6,0x00a7,0x00f7,0x00b8,0x00b0,0x00a8,0x00b7,0x00b9,0x00b3,0x00b2,0x25a0,0x00a0 }; static const Bit16u cp860Map[256] = { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,0x0008,0x0009,0x000a,0x000b,0x000c,0x000d,0x000e,0x000f, 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,0x0018,0x0019,0x001a,0x001b,0x001c,0x001d,0x001e,0x001f, 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,0x0028,0x0029,0x002a,0x002b,0x002c,0x002d,0x002e,0x002f, 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,0x0038,0x0039,0x003a,0x003b,0x003c,0x003d,0x003e,0x003f, 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,0x0048,0x0049,0x004a,0x004b,0x004c,0x004d,0x004e,0x004f, 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,0x0058,0x0059,0x005a,0x005b,0x005c,0x005d,0x005e,0x005f, 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,0x0068,0x0069,0x006a,0x006b,0x006c,0x006d,0x006e,0x006f, 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,0x0078,0x0079,0x007a,0x007b,0x007c,0x007d,0x007e,0x007f, 0x00c7,0x00fc,0x00e9,0x00e2,0x00e3,0x00e0,0x00c1,0x00e7,0x00ea,0x00ca,0x00e8,0x00cd,0x00d4,0x00ec,0x00c3,0x00c2, 0x00c9,0x00c0,0x00c8,0x00f4,0x00f5,0x00f2,0x00da,0x00f9,0x00cc,0x00d5,0x00dc,0x00a2,0x00a3,0x00d9,0x20a7,0x00d3, 0x00e1,0x00ed,0x00f3,0x00fa,0x00f1,0x00d1,0x00aa,0x00ba,0x00bf,0x00d2,0x00ac,0x00bd,0x00bc,0x00a1,0x00ab,0x00bb, 0x2591,0x2592,0x2593,0x2502,0x2524,0x2561,0x2562,0x2556,0x2555,0x2563,0x2551,0x2557,0x255d,0x255c,0x255b,0x2510, 0x2514,0x2534,0x252c,0x251c,0x2500,0x253c,0x255e,0x255f,0x255a,0x2554,0x2569,0x2566,0x2560,0x2550,0x256c,0x2567, 0x2568,0x2564,0x2565,0x2559,0x2558,0x2552,0x2553,0x256b,0x256a,0x2518,0x250c,0x2588,0x2584,0x258c,0x2590,0x2580, 0x03b1,0x00df,0x0393,0x03c0,0x03a3,0x03c3,0x00b5,0x03c4,0x03a6,0x0398,0x03a9,0x03b4,0x221e,0x03c6,0x03b5,0x2229, 0x2261,0x00b1,0x2265,0x2264,0x2320,0x2321,0x00f7,0x2248,0x00b0,0x2219,0x00b7,0x221a,0x207f,0x00b2,0x25a0,0x00a0 }; static const Bit16u cp861Map[256] = { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,0x0008,0x0009,0x000a,0x000b,0x000c,0x000d,0x000e,0x000f, 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,0x0018,0x0019,0x001a,0x001b,0x001c,0x001d,0x001e,0x001f, 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,0x0028,0x0029,0x002a,0x002b,0x002c,0x002d,0x002e,0x002f, 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,0x0038,0x0039,0x003a,0x003b,0x003c,0x003d,0x003e,0x003f, 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,0x0048,0x0049,0x004a,0x004b,0x004c,0x004d,0x004e,0x004f, 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,0x0058,0x0059,0x005a,0x005b,0x005c,0x005d,0x005e,0x005f, 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,0x0068,0x0069,0x006a,0x006b,0x006c,0x006d,0x006e,0x006f, 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,0x0078,0x0079,0x007a,0x007b,0x007c,0x007d,0x007e,0x007f, 0x00c7,0x00fc,0x00e9,0x00e2,0x00e4,0x00e0,0x00e5,0x00e7,0x00ea,0x00eb,0x00e8,0x00d0,0x00f0,0x00de,0x00c4,0x00c5, 0x00c9,0x00e6,0x00c6,0x00f4,0x00f6,0x00fe,0x00fb,0x00dd,0x00fd,0x00d6,0x00dc,0x00f8,0x00a3,0x00d8,0x20a7,0x0192, 0x00e1,0x00ed,0x00f3,0x00fa,0x00c1,0x00cd,0x00d3,0x00da,0x00bf,0x2310,0x00ac,0x00bd,0x00bc,0x00a1,0x00ab,0x00bb, 0x2591,0x2592,0x2593,0x2502,0x2524,0x2561,0x2562,0x2556,0x2555,0x2563,0x2551,0x2557,0x255d,0x255c,0x255b,0x2510, 0x2514,0x2534,0x252c,0x251c,0x2500,0x253c,0x255e,0x255f,0x255a,0x2554,0x2569,0x2566,0x2560,0x2550,0x256c,0x2567, 0x2568,0x2564,0x2565,0x2559,0x2558,0x2552,0x2553,0x256b,0x256a,0x2518,0x250c,0x2588,0x2584,0x258c,0x2590,0x2580, 0x03b1,0x00df,0x0393,0x03c0,0x03a3,0x03c3,0x00b5,0x03c4,0x03a6,0x0398,0x03a9,0x03b4,0x221e,0x03c6,0x03b5,0x2229, 0x2261,0x00b1,0x2265,0x2264,0x2320,0x2321,0x00f7,0x2248,0x00b0,0x2219,0x00b7,0x221a,0x207f,0x00b2,0x25a0,0x00a0 }; static const Bit16u cp862Map[256] = { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,0x0008,0x0009,0x000a,0x000b,0x000c,0x000d,0x000e,0x000f, 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,0x0018,0x0019,0x001a,0x001b,0x001c,0x001d,0x001e,0x001f, 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,0x0028,0x0029,0x002a,0x002b,0x002c,0x002d,0x002e,0x002f, 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,0x0038,0x0039,0x003a,0x003b,0x003c,0x003d,0x003e,0x003f, 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,0x0048,0x0049,0x004a,0x004b,0x004c,0x004d,0x004e,0x004f, 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,0x0058,0x0059,0x005a,0x005b,0x005c,0x005d,0x005e,0x005f, 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,0x0068,0x0069,0x006a,0x006b,0x006c,0x006d,0x006e,0x006f, 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,0x0078,0x0079,0x007a,0x007b,0x007c,0x007d,0x007e,0x007f, 0x05d0,0x05d1,0x05d2,0x05d3,0x05d4,0x05d5,0x05d6,0x05d7,0x05d8,0x05d9,0x05da,0x05db,0x05dc,0x05dd,0x05de,0x05df, 0x05e0,0x05e1,0x05e2,0x05e3,0x05e4,0x05e5,0x05e6,0x05e7,0x05e8,0x05e9,0x05ea,0x00a2,0x00a3,0x00a5,0x20a7,0x0192, 0x00e1,0x00ed,0x00f3,0x00fa,0x00f1,0x00d1,0x00aa,0x00ba,0x00bf,0x2310,0x00ac,0x00bd,0x00bc,0x00a1,0x00ab,0x00bb, 0x2591,0x2592,0x2593,0x2502,0x2524,0x2561,0x2562,0x2556,0x2555,0x2563,0x2551,0x2557,0x255d,0x255c,0x255b,0x2510, 0x2514,0x2534,0x252c,0x251c,0x2500,0x253c,0x255e,0x255f,0x255a,0x2554,0x2569,0x2566,0x2560,0x2550,0x256c,0x2567, 0x2568,0x2564,0x2565,0x2559,0x2558,0x2552,0x2553,0x256b,0x256a,0x2518,0x250c,0x2588,0x2584,0x258c,0x2590,0x2580, 0x03b1,0x00df,0x0393,0x03c0,0x03a3,0x03c3,0x00b5,0x03c4,0x03a6,0x0398,0x03a9,0x03b4,0x221e,0x03c6,0x03b5,0x2229, 0x2261,0x00b1,0x2265,0x2264,0x2320,0x2321,0x00f7,0x2248,0x00b0,0x2219,0x00b7,0x221a,0x207f,0x00b2,0x25a0,0x00a0 }; static const Bit16u cp863Map[256] = { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,0x0008,0x0009,0x000a,0x000b,0x000c,0x000d,0x000e,0x000f, 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,0x0018,0x0019,0x001a,0x001b,0x001c,0x001d,0x001e,0x001f, 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,0x0028,0x0029,0x002a,0x002b,0x002c,0x002d,0x002e,0x002f, 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,0x0038,0x0039,0x003a,0x003b,0x003c,0x003d,0x003e,0x003f, 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,0x0048,0x0049,0x004a,0x004b,0x004c,0x004d,0x004e,0x004f, 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,0x0058,0x0059,0x005a,0x005b,0x005c,0x005d,0x005e,0x005f, 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,0x0068,0x0069,0x006a,0x006b,0x006c,0x006d,0x006e,0x006f, 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,0x0078,0x0079,0x007a,0x007b,0x007c,0x007d,0x007e,0x007f, 0x00c7,0x00fc,0x00e9,0x00e2,0x00c2,0x00e0,0x00b6,0x00e7,0x00ea,0x00eb,0x00e8,0x00ef,0x00ee,0x2017,0x00c0,0x00a7, 0x00c9,0x00c8,0x00ca,0x00f4,0x00cb,0x00cf,0x00fb,0x00f9,0x00a4,0x00d4,0x00dc,0x00a2,0x00a3,0x00d9,0x00db,0x0192, 0x00a6,0x00b4,0x00f3,0x00fa,0x00a8,0x00b8,0x00b3,0x00af,0x00ce,0x2310,0x00ac,0x00bd,0x00bc,0x00be,0x00ab,0x00bb, 0x2591,0x2592,0x2593,0x2502,0x2524,0x2561,0x2562,0x2556,0x2555,0x2563,0x2551,0x2557,0x255d,0x255c,0x255b,0x2510, 0x2514,0x2534,0x252c,0x251c,0x2500,0x253c,0x255e,0x255f,0x255a,0x2554,0x2569,0x2566,0x2560,0x2550,0x256c,0x2567, 0x2568,0x2564,0x2565,0x2559,0x2558,0x2552,0x2553,0x256b,0x256a,0x2518,0x250c,0x2588,0x2584,0x258c,0x2590,0x2580, 0x03b1,0x00df,0x0393,0x03c0,0x03a3,0x03c3,0x00b5,0x03c4,0x03a6,0x0398,0x03a9,0x03b4,0x221e,0x03c6,0x03b5,0x2229, 0x2261,0x00b1,0x2265,0x2264,0x2320,0x2321,0x00f7,0x2248,0x00b0,0x2219,0x00b7,0x221a,0x207f,0x00b2,0x25a0,0x00a0 }; static const Bit16u cp864Map[256] = { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,0x0008,0x0009,0x000a,0x000b,0x000c,0x000d,0x000e,0x000f, 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,0x0018,0x0019,0x001a,0x001b,0x001c,0x001d,0x001e,0x001f, 0x0020,0x0021,0x0022,0x0023,0x0024,0x066a,0x0026,0x0027,0x0028,0x0029,0x002a,0x002b,0x002c,0x002d,0x002e,0x002f, 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,0x0038,0x0039,0x003a,0x003b,0x003c,0x003d,0x003e,0x003f, 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,0x0048,0x0049,0x004a,0x004b,0x004c,0x004d,0x004e,0x004f, 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,0x0058,0x0059,0x005a,0x005b,0x005c,0x005d,0x005e,0x005f, 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,0x0068,0x0069,0x006a,0x006b,0x006c,0x006d,0x006e,0x006f, 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,0x0078,0x0079,0x007a,0x007b,0x007c,0x007d,0x007e,0x007f, 0x00b0,0x00b7,0x2219,0x221a,0x2592,0x2500,0x2502,0x253c,0x2524,0x252c,0x251c,0x2534,0x2510,0x250c,0x2514,0x2518, 0x03b2,0x221e,0x03c6,0x00b1,0x00bd,0x00bc,0x2248,0x00ab,0x00bb,0xfef7,0xfef8,0x0000,0x0000,0xfefb,0xfefc,0x0000, 0x00a0,0x00ad,0xfe82,0x00a3,0x00a4,0xfe84,0x0000,0x0000,0xfe8e,0xfe8f,0xfe95,0xfe99,0x060c,0xfe9d,0xfea1,0xfea5, 0x0660,0x0661,0x0662,0x0663,0x0664,0x0665,0x0666,0x0667,0x0668,0x0669,0xfed1,0x061b,0xfeb1,0xfeb5,0xfeb9,0x061f, 0x00a2,0xfe80,0xfe81,0xfe83,0xfe85,0xfeca,0xfe8b,0xfe8d,0xfe91,0xfe93,0xfe97,0xfe9b,0xfe9f,0xfea3,0xfea7,0xfea9, 0xfeab,0xfead,0xfeaf,0xfeb3,0xfeb7,0xfebb,0xfebf,0xfec1,0xfec5,0xfecb,0xfecf,0x00a6,0x00ac,0x00f7,0x00d7,0xfec9, 0x0640,0xfed3,0xfed7,0xfedb,0xfedf,0xfee3,0xfee7,0xfeeb,0xfeed,0xfeef,0xfef3,0xfebd,0xfecc,0xfece,0xfecd,0xfee1, 0xfe7d,0x0651,0xfee5,0xfee9,0xfeec,0xfef0,0xfef2,0xfed0,0xfed5,0xfef5,0xfef6,0xfedd,0xfed9,0xfef1,0x25a0, }; static const Bit16u cp865Map[256] = { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,0x0008,0x0009,0x000a,0x000b,0x000c,0x000d,0x000e,0x000f, 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,0x0018,0x0019,0x001a,0x001b,0x001c,0x001d,0x001e,0x001f, 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,0x0028,0x0029,0x002a,0x002b,0x002c,0x002d,0x002e,0x002f, 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,0x0038,0x0039,0x003a,0x003b,0x003c,0x003d,0x003e,0x003f, 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,0x0048,0x0049,0x004a,0x004b,0x004c,0x004d,0x004e,0x004f, 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,0x0058,0x0059,0x005a,0x005b,0x005c,0x005d,0x005e,0x005f, 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,0x0068,0x0069,0x006a,0x006b,0x006c,0x006d,0x006e,0x006f, 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,0x0078,0x0079,0x007a,0x007b,0x007c,0x007d,0x007e,0x007f, 0x00c7,0x00fc,0x00e9,0x00e2,0x00e4,0x00e0,0x00e5,0x00e7,0x00ea,0x00eb,0x00e8,0x00ef,0x00ee,0x00ec,0x00c4,0x00c5, 0x00c9,0x00e6,0x00c6,0x00f4,0x00f6,0x00f2,0x00fb,0x00f9,0x00ff,0x00d6,0x00dc,0x00f8,0x00a3,0x00d8,0x20a7,0x0192, 0x00e1,0x00ed,0x00f3,0x00fa,0x00f1,0x00d1,0x00aa,0x00ba,0x00bf,0x2310,0x00ac,0x00bd,0x00bc,0x00a1,0x00ab,0x00a4, 0x2591,0x2592,0x2593,0x2502,0x2524,0x2561,0x2562,0x2556,0x2555,0x2563,0x2551,0x2557,0x255d,0x255c,0x255b,0x2510, 0x2514,0x2534,0x252c,0x251c,0x2500,0x253c,0x255e,0x255f,0x255a,0x2554,0x2569,0x2566,0x2560,0x2550,0x256c,0x2567, 0x2568,0x2564,0x2565,0x2559,0x2558,0x2552,0x2553,0x256b,0x256a,0x2518,0x250c,0x2588,0x2584,0x258c,0x2590,0x2580, 0x03b1,0x00df,0x0393,0x03c0,0x03a3,0x03c3,0x00b5,0x03c4,0x03a6,0x0398,0x03a9,0x03b4,0x221e,0x03c6,0x03b5,0x2229, 0x2261,0x00b1,0x2265,0x2264,0x2320,0x2321,0x00f7,0x2248,0x00b0,0x2219,0x00b7,0x221a,0x207f,0x00b2,0x25a0,0x00a0 }; static const Bit16u cp866Map[256] = { 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,0x0008,0x0009,0x000a,0x000b,0x000c,0x000d,0x000e,0x000f, 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,0x0018,0x0019,0x001a,0x001b,0x001c,0x001d,0x001e,0x001f, 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,0x0028,0x0029,0x002a,0x002b,0x002c,0x002d,0x002e,0x002f, 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,0x0038,0x0039,0x003a,0x003b,0x003c,0x003d,0x003e,0x003f, 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,0x0048,0x0049,0x004a,0x004b,0x004c,0x004d,0x004e,0x004f, 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,0x0058,0x0059,0x005a,0x005b,0x005c,0x005d,0x005e,0x005f, 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,0x0068,0x0069,0x006a,0x006b,0x006c,0x006d,0x006e,0x006f, 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,0x0078,0x0079,0x007a,0x007b,0x007c,0x007d,0x007e,0x007f, 0x0410,0x0411,0x0412,0x0413,0x0414,0x0415,0x0416,0x0417,0x0418,0x0419,0x041a,0x041b,0x041c,0x041d,0x041e,0x041f, 0x0420,0x0421,0x0422,0x0423,0x0424,0x0425,0x0426,0x0427,0x0428,0x0429,0x042a,0x042b,0x042c,0x042d,0x042e,0x042f, 0x0430,0x0431,0x0432,0x0433,0x0434,0x0435,0x0436,0x0437,0x0438,0x0439,0x043a,0x043b,0x043c,0x043d,0x043e,0x043f, 0x2591,0x2592,0x2593,0x2502,0x2524,0x2561,0x2562,0x2556,0x2555,0x2563,0x2551,0x2557,0x255d,0x255c,0x255b,0x2510, 0x2514,0x2534,0x252c,0x251c,0x2500,0x253c,0x255e,0x255f,0x255a,0x2554,0x2569,0x2566,0x2560,0x2550,0x256c,0x2567, 0x2568,0x2564,0x2565,0x2559,0x2558,0x2552,0x2553,0x256b,0x256a,0x2518,0x250c,0x2588,0x2584,0x258c,0x2590,0x2580, 0x0440,0x0441,0x0442,0x0443,0x0444,0x0445,0x0446,0x0447,0x0448,0x0449,0x044a,0x044b,0x044c,0x044d,0x044e,0x044f, 0x0401,0x0451,0x0404,0x0454,0x0407,0x0457,0x040e,0x045e,0x00b0,0x2219,0x00b7,0x221a,0x2116,0x00a4,0x25a0,0x00a0 }; static const Bit16u codepages[15] = {0, 437, 932, 850, 851, 853, 855, 860, 863, 865, 852, 857, 862, 864, 866}; // TODO: Implement all international charsets static const Bit16u intCharSets[15][12] = { {0x0023, 0x0024, 0x0040, 0x005b, 0x005c, 0x005d, 0x005e, 0x0060, 0x007b, 0x007c, 0x007d, 0x007e}, // USA {0x0023, 0x0024, 0x00e0, 0x00ba, 0x00e7, 0x00a7, 0x005e, 0x0060, 0x00e9, 0x00f9, 0x00e8, 0x00a8}, // France {0x0023, 0x0024, 0x00a7, 0x00c4, 0x00d6, 0x00dc, 0x005e, 0x0060, 0x00e4, 0x00f6, 0x00fc, 0x00df}, // Germany {0x00a3, 0x0024, 0x0040, 0x005b, 0x005c, 0x005d, 0x005e, 0x0060, 0x007b, 0x007c, 0x007d, 0x007e}, // UK {0x0023, 0x0024, 0x0040, 0x005b, 0x005c, 0x005d, 0x005e, 0x0060, 0x007b, 0x007c, 0x007d, 0x007e}, // Denmark I {0x0023, 0x0024, 0x0040, 0x005b, 0x005c, 0x005d, 0x005e, 0x0060, 0x007b, 0x007c, 0x007d, 0x007e}, // Sweden {0x0023, 0x0024, 0x0040, 0x005b, 0x005c, 0x005d, 0x005e, 0x0060, 0x007b, 0x007c, 0x007d, 0x007e}, // Italy {0x0023, 0x0024, 0x0040, 0x005b, 0x005c, 0x005d, 0x005e, 0x0060, 0x007b, 0x007c, 0x007d, 0x007e}, // Spain {0x0023, 0x0024, 0x0040, 0x005b, 0x005c, 0x005d, 0x005e, 0x0060, 0x007b, 0x007c, 0x007d, 0x007e}, // Japan {0x0023, 0x0024, 0x0040, 0x005b, 0x005c, 0x005d, 0x005e, 0x0060, 0x007b, 0x007c, 0x007d, 0x007e}, // Norway {0x0023, 0x0024, 0x0040, 0x005b, 0x005c, 0x005d, 0x005e, 0x0060, 0x007b, 0x007c, 0x007d, 0x007e}, // Denmark II {0x0023, 0x0024, 0x0040, 0x005b, 0x005c, 0x005d, 0x005e, 0x0060, 0x007b, 0x007c, 0x007d, 0x007e}, // Spain II {0x0023, 0x0024, 0x0040, 0x005b, 0x005c, 0x005d, 0x005e, 0x0060, 0x007b, 0x007c, 0x007d, 0x007e}, // Latin America {0x0023, 0x0024, 0x0040, 0x005b, 0x005c, 0x005d, 0x005e, 0x0060, 0x007b, 0x007c, 0x007d, 0x007e}, {0x0023, 0x0024, 0x00a7, 0x00c4, 0x0027, 0x0022, 0x00b6, 0x0060, 0x00a9, 0x00ae, 0x2020, 0x2122} // Legal }; static void selectCodepage(Bit16u cp) { int i; const Bit16u *mapToUse = NULL; switch(cp) { case 0: // Italics, use cp437 case 437: mapToUse = cp437Map; break; case 737: mapToUse = cp737Map; break; case 775: mapToUse = cp775Map; break; case 850: mapToUse = cp850Map; break; case 852: mapToUse = cp852Map; break; case 855: mapToUse = cp855Map; break; case 857: mapToUse = cp857Map; break; case 860: mapToUse = cp860Map; break; case 861: mapToUse = cp861Map; break; case 863: mapToUse = cp863Map; break; case 864: mapToUse = cp864Map; break; case 865: mapToUse = cp865Map; break; case 866: mapToUse = cp866Map; break; default: write_log(_T("Unsupported codepage %i. Using CP437 instead.\n"), cp); mapToUse = cp437Map; } for (i=0; i<256; i++) curMap[i] = mapToUse[i]; } static int selectfont(Bit16u style) { static TCHAR *thisFontName; static float thisFontHorizPoints; static float thisFontVertPoints; static Bit16u thisStyle; if (curFont) { for (;;) { if (thisFontName != curFontName) break; if (thisFontHorizPoints != curFontHorizPoints) break; if (thisFontVertPoints != curFontVertPoints) break; if ((thisStyle & (STYLE_ITALICS | STYLE_PROP)) != (style & (STYLE_ITALICS | STYLE_PROP))) break; // still using same font return 1; } DeleteObject (curFont); curFont = NULL; thisFontName = NULL; xfree (otm); otm = NULL; } thisFontHorizPoints = curFontHorizPoints; thisFontVertPoints = curFontVertPoints; thisStyle = style; thisFontName = curFontName; int ly = GetDeviceCaps (memHDC, LOGPIXELSY); int lx = GetDeviceCaps (memHDC, LOGPIXELSX); int rounds = 0; while (rounds < 2) { curFont = CreateFont (thisFontVertPoints * dpiY / ly + 0.5, thisFontHorizPoints * dpiX / lx + 0.5, 0, 0, FW_NORMAL, (style & STYLE_ITALICS) ? TRUE : FALSE, FALSE, FALSE, DEFAULT_CHARSET, OUT_TT_PRECIS, CLIP_DEFAULT_PRECIS, PROOF_QUALITY, ((style & STYLE_PROP) ? VARIABLE_PITCH : FIXED_PITCH) | FF_DONTCARE, thisFontName); if (curFont) break; rounds++; if (style & STYLE_PROP) thisFontName = curFontName = _T("Times New Roman"); else thisFontName = curFontName = _T("Courier New"); } if (curFont) { SelectObject (memHDC, curFont); int size = GetOutlineTextMetrics (memHDC, 0, NULL); if (size > 0) { otm = (LPOUTLINETEXTMETRIC)xmalloc (uae_u8, size); GetOutlineTextMetrics (memHDC, size, otm); } } return curFont ? 1 : 0; } static void updateFont(void) { Real64 horizPoints = 10.5; Real64 vertPoints = 10.5; TCHAR *fontName; if (curFont != NULL) #ifdef WINFONT DeleteObject (curFont); #else FT_Done_Face(curFont); #endif curFont = NULL; int prop = style & STYLE_PROP; switch (LQtypeFace) { case roman: default: if (prop) fontName = _T("Times New Roman"); else fontName = _T("Courier New"); break; case sansserif: if (prop) fontName = _T("Arial"); else fontName = _T("Lucida Console"); break; } #ifdef WINFONT curFontName = fontName; #else if (!ft) { write_log(_T("EPSONPRINTER: No freetype6.dll, unable to load font %s\n"), fontName); curFont = NULL; } else if (FT_New_Face(FTlib, fontName, 0, &curFont)) { char windowsdir[MAX_DPATH]; GetWindowsDirectoryA (windowsdir, sizeof windowsdir); strcat (windowsdir, "\\Fonts\\"); strcat (windowsdir, fontName); if (FT_New_Face(FTlib, windowsdir, 0, &curFont)) { GetWindowsDirectoryA (windowsdir, sizeof windowsdir); strcat (windowsdir, "\\Fonts\\"); strcat (windowsdir, "times.ttf"); if (FT_New_Face(FTlib, windowsdir, 0, &curFont)) { write_log(_T("Unable to load font %s\n"), fontName); curFont = NULL; } } } #endif if (!multipoint) { actcpi = cpi; if (cpi != 10 && !(style & STYLE_CONDENSED)) { horizPoints *= (Real64)10/(Real64)cpi; vertPoints *= (Real64)10/(Real64)cpi; } if (!style & STYLE_PROP) { if (cpi == 10 && (style & STYLE_CONDENSED)) { actcpi = 17.14; horizPoints *= (Real64)10/(Real64)17.14; vertPoints *= (Real64)10/(Real64)17.14; } if (cpi == 12 && (style & STYLE_CONDENSED)) { actcpi = 20.0; horizPoints *= (Real64)10/(Real64)20.0; vertPoints *= (Real64)10/(Real64)20.0; } } if (style & (STYLE_PROP | STYLE_CONDENSED)) { horizPoints /= (Real64)2.0; vertPoints /= (Real64)2.0; } if ((style & STYLE_DOUBLEWIDTH) || (style & STYLE_DOUBLEWIDTHONELINE)) { actcpi /= 2; horizPoints *= (Real64)2.0; } if (style & STYLE_DOUBLEHEIGHT) vertPoints *= (Real64)2.0; } else { actcpi = multicpi; horizPoints = vertPoints = multiPointSize; } if ((style & STYLE_SUPERSCRIPT) || (style & STYLE_SUBSCRIPT)) { horizPoints *= (Real64)2/(Real64)3; vertPoints *= (Real64)2/(Real64)3; actcpi /= (Real64)2/(Real64)3; } #ifdef WINFONT curFontHorizPoints = horizPoints; curFontVertPoints = vertPoints; #else if (curFont) FT_Set_Char_Size(curFont, (Bit16u)horizPoints*64, (Bit16u)vertPoints*64, dpiX, dpiY); #endif if (style & STYLE_ITALICS || charTables[curCharTable] == 0) { #ifndef WINFONT FT_Matrix matrix; matrix.xx = 0x10000L; matrix.xy = (FT_Fixed)(0.20 * 0x10000L); matrix.yx = 0; matrix.yy = 0x10000L; if (curFont) FT_Set_Transform(curFont, &matrix, 0); #endif } } static void getfname (TCHAR *fname) { TCHAR tmp[MAX_DPATH]; int number = 0; fetch_screenshotpath (tmp, sizeof tmp / sizeof (TCHAR)); for (;;) { FILE *fp; _stprintf (fname, _T("%sPRINT_%03d.png"), tmp, number); if ((fp = _tfopen (fname, _T("rb"))) == NULL) return; number++; fclose (fp); } } static int volatile prt_thread_mode; STATIC_INLINE void getcolor (uae_u8 *Tpage, uae_u8 *Tcpage, int x, int y, int Tpage_pitch, Bit8u *r, Bit8u *g, Bit8u *b) { Bit8u pixel = *((Bit8u*)Tpage + x + (y*Tpage_pitch)); Bit8u c = *((Bit8u*)Tcpage + x + (y*Tpage_pitch)); Bit8u color_r = 0, color_g = 0, color_b = 0; if (c) { Bit32u color = 0; int cindex = 0; while (c) { if (c & 1) { color_r |= (255 - colors[cindex * 3 + 0]) * pixel / 255; color_g |= (255 - colors[cindex * 3 + 1]) * pixel / 255; color_b |= (255 - colors[cindex * 3 + 2]) * pixel / 255; } cindex++; c >>= 1; } } *r = 255 - color_r; *g = 255 - color_g; *b = 255 - color_b; } static void *prt_thread (void *p) { Bit16u x, y; HDC TprinterDC = printerDC; HDC TmemHDC = memHDC; int Tpage_w = page_w; int Tpage_h = page_h; int Tpage_pitch = page_pitch; uae_u8 *Tpage = page; uae_u8 *Tcpage = cpage; int TcolorPrinter = colorPrinted; write_log (_T("EPSONPRINTER: background print thread started\n")); prt_thread_mode = 1; SetThreadPriority (GetCurrentThread (), THREAD_PRIORITY_BELOW_NORMAL); if (TprinterDC) { int hz = GetDeviceCaps (TprinterDC, PHYSICALWIDTH); int vz = GetDeviceCaps (TprinterDC, PHYSICALHEIGHT); int topmargin = GetDeviceCaps (TprinterDC, PHYSICALOFFSETX); int leftmargin = GetDeviceCaps (TprinterDC, PHYSICALOFFSETY); HDC dc = NULL; write_log (_T("EPSONPRINTER: HP=%d WP=%d TM=%d LM=%d W=%d H=%d\n"), hz, vz, topmargin, leftmargin, Tpage_w, Tpage_h); if (TcolorPrinter) dc = GetDC (NULL); HBITMAP bitmap = CreateCompatibleBitmap (dc ? dc : TmemHDC, Tpage_w, Tpage_h); SelectObject (TmemHDC, bitmap); BitBlt (TmemHDC, 0, 0, Tpage_w, Tpage_h, NULL, 0, 0, WHITENESS); // Start new printer job? if (outputHandle == NULL) { DOCINFO docinfo; docinfo.cbSize = sizeof (docinfo); docinfo.lpszDocName = _T("WinUAE Epson Printer"); docinfo.lpszOutput = NULL; docinfo.lpszDatatype = NULL; docinfo.fwType = 0; StartDoc (TprinterDC, &docinfo); multiPageCounter = 1; } StartPage (TprinterDC); // this really needs to use something else than SetPixel().. for (y=0; y Each eight characters for (i = 0; i < 32; i++) horiztabs[i] = i * 8 * (1.0 / (Real64)cpi); numHorizTabs = 32; numVertTabs = 255; } static void resetPrinterHard(void) { charRead = false; initPrinter(); } static int printer_init(Bit16u dpi2, Bit16u width, Bit16u height, const TCHAR *printername, int multipageOutput2, int numpins) { pins = numpins; #ifndef WINFONT if (ft == NULL || FT_Init_FreeType(&FTlib)) { write_log(_T("EPSONPRINTER: Unable to init Freetype2. ASCII printing disabled\n")); return 0; } #endif dpiX = dpiY = dpi2; multipageOutput = multipageOutput2; defaultPageWidth = (Real64)width/(Real64)10; defaultPageHeight = (Real64)height/(Real64)10; if (printername) { #if 0 // Show Print dialog to obtain a printer device context PRINTDLG pd; pd.lStructSize = sizeof(PRINTDLG); pd.hDevMode = (HANDLE) NULL; pd.hDevNames = (HANDLE) NULL; pd.Flags = PD_RETURNDC; pd.hwndOwner = NULL; pd.hDC = (HDC) NULL; pd.nFromPage = 1; pd.nToPage = 1; pd.nMinPage = 0; pd.nMaxPage = 0; pd.nCopies = 1; pd.hInstance = NULL; pd.lCustData = 0L; pd.lpfnPrintHook = (LPPRINTHOOKPROC) NULL; pd.lpfnSetupHook = (LPSETUPHOOKPROC) NULL; pd.lpPrintTemplateName = (LPWSTR) NULL; pd.lpSetupTemplateName = (LPWSTR) NULL; pd.hPrintTemplate = (HANDLE) NULL; pd.hSetupTemplate = (HANDLE) NULL; PrintDlg(&pd); printerDC = pd.hDC; #endif epsonprintername = printername; printerDC = CreateDC (NULL, epsonprintername, NULL, NULL); if (!printerDC) return 0; dpiX = GetDeviceCaps(printerDC, LOGPIXELSX); dpiY = GetDeviceCaps(printerDC, LOGPIXELSY); defaultPageWidth = (Real64)GetDeviceCaps(printerDC, HORZRES) / dpiX; defaultPageHeight = (Real64)GetDeviceCaps(printerDC, VERTRES) / dpiY; } // Create page page_w = (Bitu)(defaultPageWidth*dpiX); page_h = (Bitu)(defaultPageHeight*dpiY); pagesize = page_w * page_h; page_pitch = page_w; page = xcalloc (uae_u8, pagesize); cpage = xcalloc (uae_u8, pagesize); curFont = NULL; charRead = false; autoFeed = false; outputHandle = NULL; write_log (_T("EPSONPRINTER: Page size: %dx%d DPI: %dx%d\n"), page_w, page_h, dpiX, dpiY); initPrinter(); memHDC = CreateCompatibleDC (NULL); return 1; }; static void printer_close(void) { if (page != NULL) { xfree (page); page = NULL; xfree (cpage); cpage = NULL; #ifndef WINFONT if (ft) FT_Done_FreeType(FTlib); #endif write_log (_T("EPSONPRINTER: end\n")); } xfree (otm); otm = NULL; if (curFont) DeleteObject (curFont); curFont = NULL; if (printerDC) DeleteDC(printerDC); printerDC = NULL; if (memHDC) DeleteDC(memHDC); memHDC = NULL; }; static void setupBitImage(Bit8u dens, Bit16u numCols, int pin9) { switch (dens) { case 0: bitGraph.horizDens = 60; bitGraph.vertDens = 60; bitGraph.adjacent = true; bitGraph.bytesColumn = 1; break; case 1: bitGraph.horizDens = 120; bitGraph.vertDens = 60; bitGraph.adjacent = true; bitGraph.bytesColumn = 1; break; case 2: bitGraph.horizDens = 120; bitGraph.vertDens = 60; bitGraph.adjacent = false; bitGraph.bytesColumn = 1; break; case 3: bitGraph.horizDens = 60; bitGraph.vertDens = 240; bitGraph.adjacent = false; bitGraph.bytesColumn = 1; break; case 4: bitGraph.horizDens = 80; bitGraph.vertDens = 60; bitGraph.adjacent = true; bitGraph.bytesColumn = 1; break; case 5: bitGraph.horizDens = 80; bitGraph.vertDens = 72; bitGraph.adjacent = true; bitGraph.bytesColumn = 1; break; case 6: bitGraph.horizDens = 90; bitGraph.vertDens = 60; bitGraph.adjacent = true; bitGraph.bytesColumn = 1; break; case 7: bitGraph.horizDens = 144; bitGraph.vertDens = 72; bitGraph.adjacent = true; bitGraph.bytesColumn = 1; break; case 32: bitGraph.horizDens = 60; bitGraph.vertDens = 180; bitGraph.adjacent = true; bitGraph.bytesColumn = 3; break; case 33: bitGraph.horizDens = 120; bitGraph.vertDens = 180; bitGraph.adjacent = true; bitGraph.bytesColumn = 3; break; case 38: bitGraph.horizDens = 90; bitGraph.vertDens = 180; bitGraph.adjacent = true; bitGraph.bytesColumn = 3; break; case 39: bitGraph.horizDens = 180; bitGraph.vertDens = 180; bitGraph.adjacent = true; bitGraph.bytesColumn = 3; break; case 40: bitGraph.horizDens = 360; bitGraph.vertDens = 180; bitGraph.adjacent = false; bitGraph.bytesColumn = 3; break; case 64: bitGraph.horizDens = 60; bitGraph.vertDens = 360; bitGraph.adjacent = true; bitGraph.bytesColumn = 6; break; case 65: bitGraph.horizDens = 120; bitGraph.vertDens = 360; bitGraph.adjacent = true; bitGraph.bytesColumn = 6; break; case 70: bitGraph.horizDens = 90; bitGraph.vertDens = 360; bitGraph.adjacent = true; bitGraph.bytesColumn = 6; break; case 71: bitGraph.horizDens = 180; bitGraph.vertDens = 360; bitGraph.adjacent = true; bitGraph.bytesColumn = 6; break; case 72: bitGraph.horizDens = 360; bitGraph.vertDens = 360; bitGraph.adjacent = false; bitGraph.bytesColumn = 6; break; case 73: bitGraph.horizDens = 360; bitGraph.vertDens = 360; bitGraph.adjacent = true; bitGraph.bytesColumn = 6; break; default: write_log(_T("EPSONPRINTER: Unsupported bit image density %i\n"), dens); } bitGraph.pin9 = false; if (pins == 9) { if (pin9) { bitGraph.pin9 = true; bitGraph.bytesColumn = 1; } bitGraph.vertDens = 72; } bitGraph.remBytes = numCols * bitGraph.bytesColumn; bitGraph.readBytesColumn = 0; } static int processCommandChar(Bit8u ch) { if (ESCSeen) { ESCCmd = ch; ESCSeen = false; numParam = 0; if (ESCCmd != 0x78) printCharBuffer (); switch (ESCCmd) { case 0x02: // Undocumented case 0x0e: // Select double-width printing (one line) (ESC SO) case 0x0f: // Select condensed printing (ESC SI) case 0x23: // Cancel MSB control (ESC #) case 0x30: // Select 1/8-inch line spacing (ESC 0) case 0x31: // Select 7/72-inch line spacing (ESC 1) case 0x32: // Select 1/6-inch line spacing (ESC 2) case 0x34: // Select italic font (ESC 4) case 0x35: // Cancel italic font (ESC 5) case 0x36: // Enable printing of upper control codes (ESC 6) case 0x37: // Enable upper control codes (ESC 7) case 0x3c: // Unidirectional mode (one line) (ESC <) case 0x3d: // Set MSB to 0 (ESC =) case 0x3e: // Set MSB to 1 (ESC >) case 0x40: // Initialize printer (ESC @) case 0x45: // Select bold font (ESC E) case 0x46: // Cancel bold font (ESC F) case 0x47: // Select double-strike printing (ESC G) case 0x48: // Cancel double-strike printing (ESC H) case 0x4d: // Select 10.5-point, 12-cpi (ESC M) case 0x4f: // Cancel bottom margin case 0x50: // Select 10.5-point, 10-cpi (ESC P) case 0x54: // Cancel superscript/subscript printing (ESC T) case 0x67: // Select 10.5-point, 15-cpi (ESC g) case 0x73: // Select low-speed mode (ESC s) neededParam = 0; break; case 0x19: // Control paper loading/ejecting (ESC EM) case 0x20: // Set intercharacter space (ESC SP) case 0x21: // Master select (ESC !) case 0x2b: // Set n/360-inch line spacing (ESC +) case 0x2d: // Turn underline on/off (ESC -) case 0x2f: // Select vertical tab channel (ESC /) case 0x33: // Set n/180-inch line spacing (ESC 3) case 0x41: // Set n/60-inch line spacing case 0x43: // Set page length in lines (ESC C) case 0x4a: // Advance print position vertically (ESC J n) case 0x4e: // Set bottom margin (ESC N) case 0x51: // Set right margin (ESC Q) case 0x52: // Select an international character set (ESC R) case 0x53: // Select superscript/subscript printing (ESC S) case 0x55: // Turn unidirectional mode on/off (ESC U) case 0x57: // Turn double-width printing on/off (ESC W) case 0x61: // Select justification (ESC a) case 0x6b: // Select typeface (ESC k) case 0x6c: // Set left margin (ESC 1) case 0x70: // Turn proportional mode on/off (ESC p) case 0x72: // Select printing color (ESC r) case 0x74: // Select character table (ESC t) case 0x77: // Turn double-height printing on/off (ESC w) case 0x78: // Select LQ or draft (ESC x) neededParam = 1; break; case 0x24: // Set absolute horizontal print position (ESC $) case 0x3f: // Reassign bit-image mode (ESC ?) case 0x4b: // Select 60-dpi graphics (ESC K) case 0x4c: // Select 120-dpi graphics (ESC L) case 0x59: // Select 120-dpi, double-speed graphics (ESC Y) case 0x5a: // Select 240-dpi graphics (ESC Z) case 0x5e: // Select 60/120-dpi, 9-pin graphics case 0x5c: // Set relative horizontal print position (ESC \) case 0x63: // Set horizontal motion index (HMI) (ESC c) neededParam = 2; break; case 0x2a: // Select bit image (ESC *) case 0x58: // Select font by pitch and point (ESC X) neededParam = 3; break; case 0x62: // Set vertical tabs in VFU channels (ESC b) case 0x42: // Set vertical tabs (ESC B) numVertTabs = 0; return true; case 0x44: // Set horizontal tabs (ESC D) numHorizTabs = 0; return true; case 0x25: // Select user-defined set (ESC %) case 0x26: // Define user-defined characters (ESC &) case 0x3a: // Copy ROM to RAM (ESC :) write_log(_T("User-defined characters not supported!\n")); return true; case 0x28: // Two bytes sequence return true; default: write_log(_T("EPSONPRINTER: Unknown command ESC %c (%02X). Unable to skip parameters.\n"), ESCCmd, ESCCmd); neededParam = 0; ESCCmd = 0; return true; } if (neededParam > 0) return true; } // Two bytes sequence if (ESCCmd == 0x28) { ESCCmd = 0x200 + ch; switch (ESCCmd) { case 0x242: // Bar code setup and print (ESC (B) case 0x25e: // Print data as characters (ESC (^) neededParam = 2; break; case 0x255: // Set unit (ESC (U) neededParam = 3; break; case 0x243: // Set page length in defined unit (ESC (C) case 0x256: // Set absolute vertical print position (ESC (V) case 0x276: // Set relative vertical print position (ESC (v) neededParam = 4; break; case 0x228: // Assign character table (ESC (t) case 0x22d: // Select line/score (ESC (-) neededParam = 5; break; case 0x263: // Set page format (ESC (c) neededParam = 6; break; default: // ESC ( commands are always followed by a "number of parameters" word parameter write_log(_T("EPSONPRINTER: Skipping unsupported command ESC ( %c (%02X).\n"), ESCCmd, ESCCmd); neededParam = 2; ESCCmd = 0x101; return true; } if (neededParam > 0) return true; } // Ignore VFU channel setting if (ESCCmd == 0x62) { ESCCmd = 0x42; return true; } // Collect vertical tabs if (ESCCmd == 0x42) { if (ch == 0 || (numVertTabs>0 && verttabs[numVertTabs-1] > (Real64)ch*lineSpacing)) // Done ESCCmd = 0; else if (numVertTabs < 16) verttabs[numVertTabs++] = (Real64)ch*lineSpacing; } // Collect horizontal tabs if (ESCCmd == 0x44) { if (ch == 0 || (numHorizTabs>0 && horiztabs[numHorizTabs-1] > (Real64)ch*(1/(Real64)cpi))) // Done ESCCmd = 0; else if (numHorizTabs < 32) horiztabs[numHorizTabs++] = (Real64)ch*(1/(Real64)cpi); } if (numParam < neededParam) { params[numParam++] = ch; if (numParam < neededParam) return true; } if (ESCCmd != 0) { switch (ESCCmd) { case 0x02: // Undocumented // Ignore break; case 0x0e: // Select double-width printing (one line) (ESC SO) if (!multipoint) { hmi = -1; style |= STYLE_DOUBLEWIDTHONELINE; updateFont(); } break; case 0x0f: // Select condensed printing (ESC SI) if (!multipoint) { hmi = -1; style |= STYLE_CONDENSED; updateFont(); } break; case 0x19: // Control paper loading/ejecting (ESC EM) // We are not really loading paper, so most commands can be ignored if (params[0] == 'R') newPage(true); break; case 0x20: // Set intercharacter space (ESC SP) if (!multipoint) { extraIntraSpace = (Real64)params[0] / (printQuality==QUALITY_DRAFT?120:180); hmi = -1; updateFont(); } break; case 0x21: // Master select (ESC !) cpi = params[0] & 0x01 ? 12:10; // Reset first seven bits style &= 0xFF80; if (params[0] & 0x02) style |= STYLE_PROP; if (params[0] & 0x04) style |= STYLE_CONDENSED; if (params[0] & 0x08) style |= STYLE_BOLD; if (params[0] & 0x10) style |= STYLE_DOUBLESTRIKE; if (params[0] & 0x20) style |= STYLE_DOUBLEWIDTH; if (params[0] & 0x40) style |= STYLE_ITALICS; if (params[0] & 0x80) { score = SCORE_SINGLE; style |= STYLE_UNDERLINE; } hmi = -1; multipoint = false; updateFont(); break; case 0x23: // Cancel MSB control (ESC #) msb = 255; break; case 0x24: // Set absolute horizontal print position (ESC $) { Real64 newX; Real64 unitSize = definedUnit; if (unitSize < 0) unitSize = (Real64)60.0; newX = leftMargin + ((Real64)PARAM16(0)/unitSize); if (newX <= rightMargin) curX = newX; } break; case 0x2a: // Select bit image (ESC *) setupBitImage(params[0], PARAM16(1), false); break; case 0x2b: // Set n/360-inch line spacing (ESC +) lineSpacing = (Real64)params[0]/360; break; case 0x2d: // Turn underline on/off (ESC -) if (params[0] == 0 || params[0] == 48) style &= 0xFFFF - STYLE_UNDERLINE; if (params[0] == 1 || params[0] == 49) { style |= STYLE_UNDERLINE; score = SCORE_SINGLE; } updateFont(); break; case 0x2f: // Select vertical tab channel (ESC /) // Ignore break; case 0x30: // Select 1/8-inch line spacing (ESC 0) lineSpacing = (Real64)1/8; break; case 0x31: // Select 7/72-inch line spacing (ESC 1) 9-pin ONLY lineSpacing = (Real64)7/72; break; case 0x32: // Select 1/6-inch line spacing (ESC 2) lineSpacing = (Real64)1/6; break; case 0x33: // Set n/180-inch line spacing (ESC 3) lineSpacing = (Real64)params[0]/180; break; case 0x34: // Select italic font (ESC 4) style |= STYLE_ITALICS; updateFont(); break; case 0x35: // Cancel italic font (ESC 5) style &= 0xFFFF - STYLE_ITALICS; updateFont(); break; case 0x36: // Enable printing of upper control codes (ESC 6) printUpperContr = true; break; case 0x37: // Enable upper control codes (ESC 7) printUpperContr = false; break; case 0x3c: // Unidirectional mode (one line) (ESC <) // We don't have a print head, so just ignore this break; case 0x3d: // Set MSB to 0 (ESC =) msb = 0; break; case 0x3e: // Set MSB to 1 (ESC >) msb = 1; break; case 0x3f: // Reassign bit-image mode (ESC ?) if (params[0] == 75) densk = params[1]; if (params[0] == 76) densl = params[1]; if (params[0] == 89) densy = params[1]; if (params[0] == 90) densz = params[1]; break; case 0x40: // Initialize printer (ESC @) initPrinter(); break; case 0x41: // Set n/60-inch line spacing lineSpacing = (Real64)params[0]/60; break; case 0x43: // Set page length in lines (ESC C) if (params[0] != 0) pageHeight = bottomMargin = (Real64)params[0] * lineSpacing; else // == 0 => Set page length in inches { neededParam = 1; numParam = 0; ESCCmd = 0x100; return true; } break; case 0x45: // Select bold font (ESC E) style |= STYLE_BOLD; updateFont(); break; case 0x46: // Cancel bold font (ESC F) style &= 0xFFFF - STYLE_BOLD; updateFont(); break; case 0x47: // Select dobule-strike printing (ESC G) style |= STYLE_DOUBLESTRIKE; break; case 0x48: // Cancel double-strike printing (ESC H) style &= 0xFFFF - STYLE_DOUBLESTRIKE; break; case 0x4a: // Advance print position vertically (ESC J n) curY += (Real64)((Real64)params[0] / (pins == 9 ? 216 : 180)); if (curY > bottomMargin) newPage(true); break; case 0x4b: // Select 60-dpi graphics (ESC K) setupBitImage(densk, PARAM16(0), false); break; case 0x4c: // Select 120-dpi graphics (ESC L) setupBitImage(densl, PARAM16(0), false); break; case 0x4d: // Select 10.5-point, 12-cpi (ESC M) cpi = 12; hmi = -1; multipoint = false; updateFont(); break; case 0x4e: // Set bottom margin (ESC N) topMargin = 0.0; bottomMargin = (Real64)params[0] * lineSpacing; break; case 0x4f: // Cancel bottom (and top) margin topMargin = 0.0; bottomMargin = pageHeight; break; case 0x50: // Select 10.5-point, 10-cpi (ESC P) cpi = 10; hmi = -1; multipoint = false; updateFont(); break; case 0x51: // Set right margin rightMargin = (Real64)(params[0]-1.0) / (Real64)cpi; if (rightMargin < 0) rightMargin = 0; if (rightMargin < leftMargin) rightMargin = leftMargin; break; case 0x52: // Select an international character set (ESC R) if (params[0] <= 13 || params[0] == 64) { if (params[0] == 64) params[0] = 14; curMap[0x23] = intCharSets[params[0]][0]; curMap[0x24] = intCharSets[params[0]][1]; curMap[0x40] = intCharSets[params[0]][2]; curMap[0x5b] = intCharSets[params[0]][3]; curMap[0x5c] = intCharSets[params[0]][4]; curMap[0x5d] = intCharSets[params[0]][5]; curMap[0x5e] = intCharSets[params[0]][6]; curMap[0x60] = intCharSets[params[0]][7]; curMap[0x7b] = intCharSets[params[0]][8]; curMap[0x7c] = intCharSets[params[0]][9]; curMap[0x7d] = intCharSets[params[0]][10]; curMap[0x7e] = intCharSets[params[0]][11]; } break; case 0x53: // Select superscript/subscript printing (ESC S) if (params[0] == 0 || params[0] == 48) style |= STYLE_SUBSCRIPT; if (params[0] == 1 || params[1] == 49) style |= STYLE_SUPERSCRIPT; updateFont(); break; case 0x54: // Cancel superscript/subscript printing (ESC T) style &= 0xFFFF - STYLE_SUPERSCRIPT - STYLE_SUBSCRIPT; updateFont(); break; case 0x55: // Turn unidirectional mode on/off (ESC U) // We don't have a print head, so just ignore this break; case 0x57: // Turn double-width printing on/off (ESC W) if (!multipoint) { hmi = -1; if (params[0] == 0 || params[0] == 48) style &= 0xFFFF - STYLE_DOUBLEWIDTH; if (params[0] == 1 || params[0] == 49) style |= STYLE_DOUBLEWIDTH; updateFont(); } break; case 0x58: // Select font by pitch and point (ESC X) multipoint = true; // Copy currently non-multipoint CPI if no value was set so far if (multicpi == 0) multicpi = cpi; if (params[0] > 0) // Set CPI { if (params[0] == 1) // Proportional spacing style |= STYLE_PROP; else if (params[0] >= 5) multicpi = (Real64)360 / (Real64)params[0]; } if (multiPointSize == 0) multiPointSize = (Real64)10.5; if (PARAM16(1) > 0) // Set points multiPointSize = ((Real64)PARAM16(1)) / 2; updateFont(); break; case 0x59: // Select 120-dpi, double-speed graphics (ESC Y) setupBitImage(densy, PARAM16(0), false); break; case 0x5a: // Select 240-dpi graphics (ESC Z) setupBitImage(densz, PARAM16(0), false); break; case 0x5e: // Select 60/120-dpi, 9-pin graphics setupBitImage(densy, PARAM16(0), true); break; case 0x5c: // Set relative horizontal print position (ESC \) { Bit16s toMove = PARAM16(0); Real64 unitSize = definedUnit; if (unitSize < 0) unitSize = (Real64)(printQuality==QUALITY_DRAFT?120.0:180.0); curX += (Real64)((Real64)toMove / unitSize); } break; case 0x61: // Select justification (ESC a) printCharBuffer (); justification = JUST_LEFT; if (params[0] == 1 || params[0] == 31) justification = JUST_CENTER; if (params[0] == 2 || params[0] == 32) justification = JUST_RIGHT; if (params[0] == 3 || params[0] == 33) justification = JUST_FULL; break; case 0x63: // Set horizontal motion index (HMI) (ESC c) hmi = (Real64)PARAM16(0) / (Real64)360.0; extraIntraSpace = 0.0; break; case 0x67: // Select 10.5-point, 15-cpi (ESC g) cpi = 15; hmi = -1; multipoint = false; updateFont(); break; case 0x6b: // Select typeface (ESC k) if (params[0] <= 11 || params[0] == 30 || params[0] == 31) LQtypeFace = (Typeface)params[0]; updateFont(); break; case 0x6c: // Set left margin (ESC 1) leftMargin = (Real64)(params[0]-1.0) / (Real64)cpi; if (leftMargin < 0) leftMargin = 0; if (curX < leftMargin) curX = leftMargin; break; case 0x70: // Turn proportional mode on/off (ESC p) if (params[0] == 0 || params[0] == 48) style &= (0xffff - STYLE_PROP); if (params[0] == 1 || params[0] == 49) { style |= STYLE_PROP; printQuality = QUALITY_LQ; } multipoint = false; hmi = -1; updateFont(); break; case 0x72: // Select printing color (ESC r) printColor = params[0]; if (printColor > 6) printColor = 0; break; case 0x73: // Select low-speed mode (ESC s) // Ignore break; case 0x74: // Select character table (ESC t) if (params[0] < 4) curCharTable = params[0]; if (params[0] >= 48 && params[0] <= 51) curCharTable = params[0] - 48; selectCodepage(charTables[curCharTable]); updateFont(); break; case 0x77: // Turn double-height printing on/off (ESC w) if (!multipoint) { if (params[0] == 0 || params[0] == 48) style &= 0xFFFF - STYLE_DOUBLEHEIGHT; if (params[0] == 1 || params[0] == 49) style |= STYLE_DOUBLEHEIGHT; updateFont(); } break; case 0x78: // Select LQ or draft (ESC x) if (params[0] == 0 || params[0] == 48) printQuality = QUALITY_DRAFT; if (params[0] == 1 || params[0] == 49) printQuality = QUALITY_LQ; break; case 0x100: // Set page length in inches (ESC C NUL) pageHeight = (Real64)params[0]; bottomMargin = pageHeight; topMargin = 0.0; break; case 0x101: // Skip unsupported ESC ( command neededParam = PARAM16(0); numParam = 0; break; case 0x228: // Assign character table (ESC (t) if (params[2] < 4 && params[3] < 16) { charTables[params[2]] = codepages[params[3]]; if (params[2] == curCharTable) selectCodepage(charTables[curCharTable]); } break; case 0x22d: // Select line/score (ESC (-) style &= 0xFFFF - STYLE_UNDERLINE - STYLE_STRIKETHROUGH - STYLE_OVERSCORE; score = params[4]; if (score) { if (params[3] == 1) style |= STYLE_UNDERLINE; if (params[3] == 2) style |= STYLE_STRIKETHROUGH; if (params[3] == 3) style |= STYLE_OVERSCORE; } updateFont(); break; case 0x242: // Bar code setup and print (ESC (B) write_log(_T("EPSONPRINTER: Barcode printing not supported\n")); // Find out how many bytes to skip neededParam = PARAM16(0); numParam = 0; break; case 0x243: // Set page length in defined unit (ESC (C) if (params[0] != 0 && definedUnit > 0) { pageHeight = bottomMargin = ((Real64)PARAM16(2)) * definedUnit; topMargin = 0.0; } break; case 0x255: // Set unit (ESC (U) definedUnit = (Real64)3600 / (Real64)params[2]; break; case 0x256: // Set absolute vertical print position (ESC (V) { Real64 unitSize = definedUnit; Real64 newPos; if (unitSize < 0) unitSize = (Real64)360.0; newPos = topMargin + (((Real64)PARAM16(2)) * unitSize); if (newPos > bottomMargin) newPage(true); else curY = newPos; } break; case 0x25e: // Print data as characters (ESC (^) numPrintAsChar = PARAM16(0); break; case 0x263: // Set page format (ESC (c) if (definedUnit > 0) { topMargin = ((Real64)PARAM16(2)) * definedUnit; bottomMargin = ((Real64)PARAM16(4)) * definedUnit; } break; case 0x276: // Set relative vertical print position (ESC (v) { Real64 unitSize = definedUnit; Real64 newPos; if (unitSize < 0) unitSize = (Real64)360.0; newPos = curY + ((Real64)((Bit16s)PARAM16(2)) * unitSize); if (newPos > topMargin) { if (newPos > bottomMargin) newPage(true); else curY = newPos; } } break; default: if (ESCCmd < 0x100) write_log(_T("EPSONPRINTER: Skipped unsupported command ESC %c (%02X)\n"), ESCCmd, ESCCmd); else write_log(_T("EPSONPRINTER: Skipped unsupported command ESC ( %c (%02X)\n"), ESCCmd-0x200, ESCCmd-0x200); } ESCCmd = 0; return true; } switch (ch) { case 0x07: // Beeper (BEL) // BEEEP! return true; case 0x08: // Backspace (BS) { Real64 newX = curX - (1/(Real64)actcpi); if (hmi > 0) newX = curX - hmi; if (newX >= leftMargin) curX = newX; } return true; case 0x09: // Tab horizontally (HT) { // Find tab right to current pos Real64 moveTo = -1; Bit8u i; for (i=0; i curX) moveTo = horiztabs[i]; // Nothing found => Ignore if (moveTo > 0 && moveTo < rightMargin) curX = moveTo; } return true; case 0x0b: // Tab vertically (VT) if (numVertTabs == 0) // All tabs cancelled => Act like CR curX = leftMargin; else if (numVertTabs == 255) // No tabs set since reset => Act like LF { curX = leftMargin; curY += lineSpacing; if (curY > bottomMargin) newPage(true); } else { // Find tab below current pos Real64 moveTo = -1; Bit8u i; for (i=0; i curY) moveTo = verttabs[i]; // Nothing found => Act like FF if (moveTo > bottomMargin || moveTo < 0) newPage(true); else curY = moveTo; } if (style & STYLE_DOUBLEWIDTHONELINE) { style &= 0xFFFF - STYLE_DOUBLEWIDTHONELINE; updateFont(); } return true; case 0x0c: // Form feed (FF) printCharBuffer (); if (style & STYLE_DOUBLEWIDTHONELINE) { style &= 0xFFFF - STYLE_DOUBLEWIDTHONELINE; updateFont(); } newPage(true); return true; case 0x0d: // Carriage Return (CR) printCharBuffer (); curX = leftMargin; if (!autoFeed) return true; case 0x0a: // Line feed printCharBuffer (); if (style & STYLE_DOUBLEWIDTHONELINE) { style &= 0xFFFF - STYLE_DOUBLEWIDTHONELINE; updateFont(); } curX = leftMargin; curY += lineSpacing; if (curY > bottomMargin) newPage(true); return true; case 0x0e: //Select Real64-width printing (one line) (SO) if (!multipoint) { hmi = -1; style |= STYLE_DOUBLEWIDTHONELINE; updateFont(); } return true; case 0x0f: // Select condensed printing (SI) if (!multipoint) { hmi = -1; style |= STYLE_CONDENSED; updateFont(); } return true; case 0x11: // Select printer (DC1) // Ignore return true; case 0x12: // Cancel condensed printing (DC2) hmi = -1; style &= 0xFFFF - STYLE_CONDENSED; updateFont(); return true; case 0x13: // Deselect printer (DC3) // Ignore return true; case 0x14: // Cancel double-width printing (one line) (DC4) hmi = -1; style &= 0xFFFF - STYLE_DOUBLEWIDTHONELINE; updateFont(); return true; case 0x18: // Cancel line (CAN) return true; case 0x1b: // ESC ESCSeen = true; return true; default: return false; } return false; } static void printBitGraph(Bit8u ch) { Bitu i; Bitu pixsizeX, pixsizeY; Real64 oldY = curY; bitGraph.column[bitGraph.readBytesColumn++] = ch; bitGraph.remBytes--; // Only print after reading a full column if (bitGraph.readBytesColumn < bitGraph.bytesColumn) return; // When page dpi is greater than graphics dpi, the drawn pixels get "bigger" pixsizeX = dpiX/bitGraph.horizDens > 0?dpiX/bitGraph.horizDens:1; pixsizeY = dpiY/bitGraph.vertDens > 0?dpiY/bitGraph.vertDens:1; for (i=0; i=0; j--) { Bit8u pixel = (bitGraph.column[i] >> j) & 0x01; if (bitGraph.pin9 && i == 1 && j == 7) pixel = bitGraph.column[i] & 0x01; if (pixel != 0) { Bitu xx; for (xx=0; xx= 0) && (desty+y >= 0)) { Bit8u* target = (Bit8u*)page + (x+destx) + (y+desty)*page_pitch; Bit8u* ctarget = (Bit8u*)cpage + (x+destx) + (y+desty)*page_pitch; Bit8u b = *source; if (b >= 64) { b = 255; } else if (b == 0) { b = 0; } else { b = (b << 2) | (b >> 4); } if (add) { if (*target + (unsigned int)b > 255) *target = 255; else *target += b; } else *target = b; *ctarget |= 1 << printColor; } } } if (printColor) colorPrinted = true; } static void drawLine(int fromx, int tox, int y, int broken) { int x; int breakmod = dpiX / 15; int gapstart = (breakmod * 4) / 5; // Draw anti-aliased line for (x=fromx; x<=tox; x++) { // Skip parts if broken line or going over the border if ((!broken || (x%breakmod <= gapstart)) && (x < page_w) && (x >= 0)) { if (y < 0) continue; if (y > 0 && (y-1) < page_h) { *((Bit8u*)page + x + (y-1)*page_pitch) = 120; *((Bit8u*)cpage + x + (y-1)*page_pitch) |= 1 << printColor; } if (y < page_h) { *((Bit8u*)page + x + y*page_pitch) = !broken?255:120; *((Bit8u*)cpage + x + y*page_pitch) |= 1 << printColor; } if (y+1 < page_h) { *((Bit8u*)page + x + (y+1)*page_pitch) = 120; *((Bit8u*)cpage + x + (y+1)*page_pitch) |= 1 << printColor; } } } if (printColor) colorPrinted = true; } static void printSingleChar(Bit8u ch, int doprint) { int penX = PIXX; int penY = PIXY; Bit16u lineStart; int bitmap_left = 0; int bitmap_top = 0; int ascender = 0; int width = 0; int rows = 0; int height = 0; int pitch = 0; int advancex = 0; uae_u8 *gbitmap = NULL; #ifndef WINFONT // Do not print if no font is available if (!curFont) return; bitmap_left = curFont->glyph->bitmap_left; bitmap_top = curFont->glyph->bitmap_top; ascender = curFont->size->metrics.ascender / 64; rows = curFont->glyph->bitmap.rows; advancex = curFont->glyph->advance.x / 64; // Find the glyph for the char to render index = FT_Get_Char_Index(curFont, curMap[ch]); // Load the glyph FT_Load_Glyph(curFont, index, FT_LOAD_DEFAULT); // Render a high-quality bitmap FT_Render_Glyph(curFont->glyph, FT_RENDER_MODE_NORMAL); gbitmap = curFont->glyph->bitmap; #else if (!selectfont (style)) return; MAT2 m2 = {{0, 1}, {0, 0}, {0, 0}, {0, 1}}; GLYPHMETRICS metrics; int bufsize = GetGlyphOutline (memHDC, curMap[ch], GGO_GRAY8_BITMAP, &metrics, 0, NULL, &m2); if (bufsize >= 0) { if (bufsize == 0) bufsize = 4; gbitmap = xcalloc (uae_u8, bufsize); GetGlyphOutline (memHDC, curMap[ch], GGO_GRAY8_BITMAP, &metrics, bufsize, gbitmap, &m2); bitmap_left = metrics.gmptGlyphOrigin.x; bitmap_top = metrics.gmptGlyphOrigin.y; width = metrics.gmBlackBoxX; rows = metrics.gmBlackBoxY; advancex = metrics.gmCellIncX; height = otm->otmTextMetrics.tmHeight; ascender = otm->otmAscent; pitch = (width + 3) & ~3; } #endif int deltaY = 0; if (style & STYLE_SUBSCRIPT) deltaY = rows / 2; else if (style & STYLE_SUPERSCRIPT) deltaY = rows / 2; if (gbitmap) { penX = PIXX + bitmap_left; penY = PIXY - bitmap_top + ascender + deltaY; if (doprint) { // Copy bitmap into page blitGlyph(gbitmap, width, rows, pitch, penX, penY, false); // Doublestrike => Print the glyph a second time one pixel below if (style & STYLE_DOUBLESTRIKE) blitGlyph(gbitmap, width, rows, pitch, penX, penY+1, true); // Bold => Print the glyph a second time one pixel to the right if (style & STYLE_BOLD) { printColor = 0; blitGlyph(gbitmap, width, rows, pitch, penX+1, penY, true); } } } // For line printing lineStart = PIXX; if (style & STYLE_PROP) curX += (Real64)((Real64)(advancex)/(Real64)(dpiX)); else { if (hmi < 0) curX += 1.0/(Real64)actcpi; else curX += hmi; } curX += extraIntraSpace; // Draw lines if desired if (doprint && score != SCORE_NONE && (style & (STYLE_UNDERLINE|STYLE_STRIKETHROUGH|STYLE_OVERSCORE))) { // Find out where to put the line Bit16u lineY = PIXY + deltaY; Bit16u xEnd = lineStart + advancex; if (style & STYLE_UNDERLINE) lineY = PIXY + deltaY + ascender * 100 / 70; if (style & STYLE_STRIKETHROUGH) lineY = PIXY + deltaY + ascender / 2; if (style & STYLE_OVERSCORE) lineY = PIXY + deltaY - otm->otmTextMetrics.tmDescent - ((score == SCORE_DOUBLE || score == SCORE_DOUBLEBROKEN) ? 5 : 0); drawLine(lineStart, xEnd, lineY, score == SCORE_SINGLEBROKEN || score == SCORE_DOUBLEBROKEN); if (score == SCORE_DOUBLE || score == SCORE_DOUBLEBROKEN) drawLine(lineStart, xEnd, lineY + 5, score == SCORE_SINGLEBROKEN || score == SCORE_DOUBLEBROKEN); } #ifdef WINFONT xfree (gbitmap); #endif } static void printCharBuffer(void) { if (justification != JUST_LEFT) { curX = 0; for (int i = 0; i < charcnt; i++) { printSingleChar (charbuffer[i], false); } switch (justification) { case JUST_RIGHT: curX = rightMargin - curX; break; case JUST_CENTER: curX = leftMargin + (rightMargin - leftMargin) / 2 - curX / 2; break; case JUST_FULL: { float width = rightMargin - leftMargin; if (curX > width * 50 / 100) { float extraw = (width - curX) / charcnt; curX = leftMargin; for (int i = 0; i < charcnt; i++) { printSingleChar (charbuffer[i], true); curX += extraw; } charcnt = 0; return; } else { curX = leftMargin; } } break; default: curX = leftMargin; break; } } for (int i = 0; i < charcnt; i++) { printSingleChar(charbuffer[i], true); } charcnt = 0; } static void printChar(Bit8u ch) { #ifndef WINFONT FT_UInt index; #endif charRead = true; if (page == NULL) return; // Don't think that DOS programs uses this but well: Apply MSB if desired if (msb != 255) { if (msb == 0) ch &= 0x7F; if (msb == 1) ch |= 0x80; } // Are we currently printing a bit graphic? if (bitGraph.remBytes > 0) { printBitGraph(ch); return; } // Print everything? if (numPrintAsChar > 0) { numPrintAsChar--; } else if (processCommandChar(ch)) { printCharBuffer (); return; } charbuffer[charcnt++] = ch; if (charcnt >= CHARBUFFERSIZE) { printCharBuffer (); } } static int isBlank(void) { Bit16u x, y; int blank = true; for (y=0; y #include #include "sysconfig.h" #include "sysdeps.h" #include "options.h" #include "uae/memory.h" #include "custom.h" #include "events.h" #include "newcpu.h" #include "ersatz.h" #include "md-fpp.h" #include "savestate.h" #include "cpu_prefetch.h" #include "cpummu.h" #define DEBUG_FPP 0 STATIC_INLINE int isinrom (void) { return (munge24 (m68k_getpc ()) & 0xFFF80000) == 0xF80000 && !currprefs.mmu_model; } static uae_u32 xhex_pi[] ={0x2168c235, 0xc90fdaa2, 0x4000}; uae_u32 xhex_exp_1[] ={0xa2bb4a9a, 0xadf85458, 0x4000}; static uae_u32 xhex_l2_e[] ={0x5c17f0bc, 0xb8aa3b29, 0x3fff}; static uae_u32 xhex_ln_2[] ={0xd1cf79ac, 0xb17217f7, 0x3ffe}; uae_u32 xhex_ln_10[] ={0xaaa8ac17, 0x935d8ddd, 0x4000}; uae_u32 xhex_l10_2[] ={0xfbcff798, 0x9a209a84, 0x3ffd}; uae_u32 xhex_l10_e[] ={0x37287195, 0xde5bd8a9, 0x3ffd}; uae_u32 xhex_1e16[] ={0x04000000, 0x8e1bc9bf, 0x4034}; uae_u32 xhex_1e32[] ={0x2b70b59e, 0x9dc5ada8, 0x4069}; uae_u32 xhex_1e64[] ={0xffcfa6d5, 0xc2781f49, 0x40d3}; uae_u32 xhex_1e128[] ={0x80e98ce0, 0x93ba47c9, 0x41a8}; uae_u32 xhex_1e256[] ={0x9df9de8e, 0xaa7eebfb, 0x4351}; uae_u32 xhex_1e512[] ={0xa60e91c7, 0xe319a0ae, 0x46a3}; uae_u32 xhex_1e1024[]={0x81750c17, 0xc9767586, 0x4d48}; uae_u32 xhex_1e2048[]={0xc53d5de5, 0x9e8b3b5d, 0x5a92}; uae_u32 xhex_1e4096[]={0x8a20979b, 0xc4605202, 0x7525}; static uae_u32 xhex_inf[] ={0x00000000, 0x00000000, 0x7fff}; static uae_u32 xhex_nan[] ={0xffffffff, 0xffffffff, 0x7fff}; #if USE_LONG_DOUBLE static long double *fp_pi = (long double *)xhex_pi; static long double *fp_exp_1 = (long double *)xhex_exp_1; static long double *fp_l2_e = (long double *)xhex_l2_e; static long double *fp_ln_2 = (long double *)xhex_ln_2; static long double *fp_ln_10 = (long double *)xhex_ln_10; static long double *fp_l10_2 = (long double *)xhex_l10_2; static long double *fp_l10_e = (long double *)xhex_l10_e; static long double *fp_1e16 = (long double *)xhex_1e16; static long double *fp_1e32 = (long double *)xhex_1e32; static long double *fp_1e64 = (long double *)xhex_1e64; static long double *fp_1e128 = (long double *)xhex_1e128; static long double *fp_1e256 = (long double *)xhex_1e256; static long double *fp_1e512 = (long double *)xhex_1e512; static long double *fp_1e1024 = (long double *)xhex_1e1024; static long double *fp_1e2048 = (long double *)xhex_1e2048; static long double *fp_1e4096 = (long double *)xhex_1e4096; static long double *fp_inf = (long double *)xhex_inf; static long double *fp_nan = (long double *)xhex_nan; #else static uae_u32 dhex_pi[] ={0x54442D18, 0x400921FB}; static uae_u32 dhex_exp_1[] ={0x8B145769, 0x4005BF0A}; static uae_u32 dhex_l2_e[] ={0x652B82FE, 0x3FF71547}; static uae_u32 dhex_ln_2[] ={0xFEFA39EF, 0x3FE62E42}; static uae_u32 dhex_ln_10[] ={0xBBB55516, 0x40026BB1}; static uae_u32 dhex_l10_2[] ={0x509F79FF, 0x3FD34413}; static uae_u32 dhex_l10_e[] ={0x1526E50E, 0x3FDBCB7B}; static uae_u32 dhex_1e16[] ={0x37E08000, 0x4341C379}; static uae_u32 dhex_1e32[] ={0xB5056E17, 0x4693B8B5}; static uae_u32 dhex_1e64[] ={0xE93FF9F5, 0x4D384F03}; static uae_u32 dhex_1e128[] ={0xF9301D32, 0x5A827748}; static uae_u32 dhex_1e256[] ={0x7F73BF3C, 0x75154FDD}; static uae_u32 dhex_inf[] ={0x00000000, 0x7ff00000}; static uae_u32 dhex_nan[] ={0xffffffff, 0x7fffffff}; static double *fp_pi = (double *)dhex_pi; static double *fp_exp_1 = (double *)dhex_exp_1; static double *fp_l2_e = (double *)dhex_l2_e; static double *fp_ln_2 = (double *)dhex_ln_2; static double *fp_ln_10 = (double *)dhex_ln_10; static double *fp_l10_2 = (double *)dhex_l10_2; static double *fp_l10_e = (double *)dhex_l10_e; static double *fp_1e16 = (double *)dhex_1e16; static double *fp_1e32 = (double *)dhex_1e32; static double *fp_1e64 = (double *)dhex_1e64; static double *fp_1e128 = (double *)dhex_1e128; static double *fp_1e256 = (double *)dhex_1e256; static double *fp_1e512 = (double *)dhex_inf; static double *fp_1e1024 = (double *)dhex_inf; static double *fp_1e2048 = (double *)dhex_inf; static double *fp_1e4096 = (double *)dhex_inf; static double *fp_inf = (double *)dhex_inf; static double *fp_nan = (double *)dhex_nan; #endif double fp_1e8 = 1.0e8; float fp_1e0 = 1, fp_1e1 = 10, fp_1e2 = 100, fp_1e4 = 10000; #define FFLAG_Z 0x4000 #define FFLAG_N 0x0100 #define FFLAG_NAN 0x0400 #define MAKE_FPSR(r) (regs).fp_result=(r) static __inline__ void native_set_fpucw (uae_u32 m68k_cw) { #ifdef _WIN32 static int ex = 0; // RN, RZ, RM, RP static unsigned int fp87_round[4] = { _RC_NEAR, _RC_CHOP, _RC_DOWN, _RC_UP }; // X, S, D, U static unsigned int fp87_prec[4] = { _PC_64 , _PC_24 , _PC_53, 0 }; #if 0 if (m68k_cw & (0x0100 | 0x0200)) ex |= _EM_INEXACT; if (m68k_cw & (0x0400)) ex |= _EM_ZERODIVIDE; if (m68k_cw & (0x0800)) ex |= _EM_UNDERFLOW; if (m68k_cw & (0x1000)) ex |= _EM_OVERFLOW; #endif #ifdef WIN64 _controlfp (ex | fp87_round[(m68k_cw >> 4) & 3], _MCW_RC); #else _control87 (ex | fp87_round[(m68k_cw >> 4) & 3] | fp87_prec[(m68k_cw >> 6) & 3], _MCW_RC | _MCW_PC); #endif #else static uae_u16 x87_cw_tab[] = { 0x137f, 0x1f7f, 0x177f, 0x1b7f, /* Extended */ 0x107f, 0x1c7f, 0x147f, 0x187f, /* Single */ 0x127f, 0x1e7f, 0x167f, 0x1a7f, /* Double */ 0x137f, 0x1f7f, 0x177f, 0x1b7f /* undefined */ }; #if USE_X86_FPUCW uae_u16 x87_cw = x87_cw_tab[(m68k_cw >> 4) & 0xf]; #if defined(X86_MSVC_ASSEMBLY) __asm { fldcw word ptr x87_cw } #elif defined(X86_ASSEMBLY) __asm__ ("fldcw %0" : : "m" (*&x87_cw)); #endif #endif #endif } #if defined(uae_s64) /* Close enough for government work? */ typedef uae_s64 tointtype; #else typedef uae_s32 tointtype; #endif static void fpu_op_illg (uae_u32 opcode, int pcoffset) { if ((currprefs.cpu_model == 68060 && (currprefs.fpu_model == 0 || (regs.pcr & 2))) || (currprefs.cpu_model == 68040 && currprefs.fpu_model == 0)) { /* 68040 unimplemented/68060 FPU disabled exception. * Line F exception with different stack frame.. */ uaecptr newpc = m68k_getpc (); uaecptr oldpc = newpc - pcoffset; regs.t0 = regs.t1 = 0; MakeSR (); if (!regs.s) { regs.usp = m68k_areg (regs, 7); m68k_areg (regs, 7) = regs.isp; } regs.s = 1; m68k_areg (regs, 7) -= 4; x_put_long (m68k_areg (regs, 7), oldpc); m68k_areg (regs, 7) -= 4; x_put_long (m68k_areg (regs, 7), oldpc); m68k_areg (regs, 7) -= 2; x_put_word (m68k_areg (regs, 7), 0x4000 + 11 * 4); m68k_areg (regs, 7) -= 4; x_put_long (m68k_areg (regs, 7), newpc); m68k_areg (regs, 7) -= 2; x_put_word (m68k_areg (regs, 7), regs.sr); write_log (_T("68040/060 FPU disabled exception PC=%x\n"), newpc); newpc = x_get_long (regs.vbr + 11 * 4); m68k_setpc (newpc); #ifdef JIT set_special (SPCFLAG_END_COMPILE); #endif return; } op_illg (opcode); } static bool fault_if_no_fpu (uae_u32 opcode, int pcoffset) { if ((regs.pcr & 2) || currprefs.fpu_model <= 0) { fpu_op_illg (opcode, pcoffset); return true; } return false; } static int get_fpu_version (void) { int v = 0; if (currprefs.fpu_revision >= 0) return currprefs.fpu_revision; switch (currprefs.fpu_model) { case 68881: v = 0x1f; break; case 68882: v = 0x20; /* ??? */ break; case 68040: v = 0x41; break; } return v; } #define fp_round_to_minus_infinity(x) fp_floor(x) #define fp_round_to_plus_infinity(x) fp_ceil(x) #define fp_round_to_zero(x) ((x) >= 0.0 ? floor(x) : ceil(x)) #define fp_round_to_nearest(x) ((int)((x) + 0.5)) STATIC_INLINE tointtype toint (fptype src, fptype minval, fptype maxval) { if (src < minval) src = minval; if (src > maxval) src = maxval; #if defined(X86_MSVC_ASSEMBLY) { fptype tmp_fp; __asm { fld LDPTR src frndint fstp LDPTR tmp_fp } return (tointtype)tmp_fp; } #else /* no X86_MSVC */ { int result = src; #if 0 switch (get_fpcr () & 0x30) { case FPCR_ROUND_ZERO: result = fp_round_to_zero (src); break; case FPCR_ROUND_MINF: result = fp_round_to_minus_infinity (src); break; case FPCR_ROUND_NEAR: result = fp_round_to_nearest (src); break; case FPCR_ROUND_PINF: result = fp_round_to_plus_infinity (src); break; default: result = src; /* should never be reached */ break; #endif return result; } #endif } #ifndef HAVE_ISINF extern int isinf (double x); #endif uae_u32 get_fpsr (void) { uae_u32 answer = regs.fpsr & 0x00ffffff; #ifdef HAVE_ISNAN if (isnan (regs.fp_result)) answer |= 0x01000000; else #endif { if (regs.fp_result == 0) answer |= 0x04000000; else if (regs.fp_result < 0) answer |= 0x08000000; #ifdef HAVE_ISINF if (isinf (regs.fp_result)) answer |= 0x02000000; #endif } return answer; } STATIC_INLINE void set_fpsr (uae_u32 x) { regs.fpsr = x; if (x & 0x01000000) { regs.fp_result = *fp_nan; } else if (x & 0x04000000) regs.fp_result = 0; else if (x & 0x08000000) regs.fp_result = -1; else regs.fp_result = 1; } /* single : S 8*E 23*F */ /* double : S 11*E 52*F */ /* extended : S 15*E 64*F */ /* E = 0 & F = 0 -> 0 */ /* E = MAX & F = 0 -> Infin */ /* E = MAX & F # 0 -> NotANumber */ /* E = biased by 127 (single) ,1023 (double) ,16383 (extended) */ STATIC_INLINE fptype to_pack (uae_u32 wrd1, uae_u32 wrd2, uae_u32 wrd3) { fptype d; char *cp; char str[100]; cp = str; if (wrd1 & 0x80000000) *cp++ = '-'; *cp++ = (wrd1 & 0xf) + '0'; *cp++ = '.'; *cp++ = ((wrd2 >> 28) & 0xf) + '0'; *cp++ = ((wrd2 >> 24) & 0xf) + '0'; *cp++ = ((wrd2 >> 20) & 0xf) + '0'; *cp++ = ((wrd2 >> 16) & 0xf) + '0'; *cp++ = ((wrd2 >> 12) & 0xf) + '0'; *cp++ = ((wrd2 >> 8) & 0xf) + '0'; *cp++ = ((wrd2 >> 4) & 0xf) + '0'; *cp++ = ((wrd2 >> 0) & 0xf) + '0'; *cp++ = ((wrd3 >> 28) & 0xf) + '0'; *cp++ = ((wrd3 >> 24) & 0xf) + '0'; *cp++ = ((wrd3 >> 20) & 0xf) + '0'; *cp++ = ((wrd3 >> 16) & 0xf) + '0'; *cp++ = ((wrd3 >> 12) & 0xf) + '0'; *cp++ = ((wrd3 >> 8) & 0xf) + '0'; *cp++ = ((wrd3 >> 4) & 0xf) + '0'; *cp++ = ((wrd3 >> 0) & 0xf) + '0'; *cp++ = 'E'; if (wrd1 & 0x40000000) *cp++ = '-'; *cp++ = ((wrd1 >> 24) & 0xf) + '0'; *cp++ = ((wrd1 >> 20) & 0xf) + '0'; *cp++ = ((wrd1 >> 16) & 0xf) + '0'; *cp = 0; sscanf (str, "%le", &d); return d; } STATIC_INLINE void from_pack (fptype src, uae_u32 * wrd1, uae_u32 * wrd2, uae_u32 * wrd3) { int i; int t; char *cp; char str[100]; sprintf (str, "%.16e", src); cp = str; *wrd1 = *wrd2 = *wrd3 = 0; if (*cp == '-') { cp++; *wrd1 = 0x80000000; } if (*cp == '+') cp++; *wrd1 |= (*cp++ - '0'); if (*cp == '.') cp++; for (i = 0; i < 8; i++) { *wrd2 <<= 4; if (*cp >= '0' && *cp <= '9') *wrd2 |= *cp++ - '0'; } for (i = 0; i < 8; i++) { *wrd3 <<= 4; if (*cp >= '0' && *cp <= '9') *wrd3 |= *cp++ - '0'; } if (*cp == 'e' || *cp == 'E') { cp++; if (*cp == '-') { cp++; *wrd1 |= 0x40000000; } if (*cp == '+') cp++; t = 0; for (i = 0; i < 3; i++) { if (*cp >= '0' && *cp <= '9') t = (t << 4) | (*cp++ - '0'); } *wrd1 |= t << 16; } } STATIC_INLINE int get_fp_value (uae_u32 opcode, uae_u16 extra, fptype *src) { uaecptr tmppc; uae_u16 tmp; int size, mode, reg; uae_u32 ad = 0; static const int sz1[8] = { 4, 4, 12, 12, 2, 8, 1, 0 }; static const int sz2[8] = { 4, 4, 12, 12, 2, 8, 2, 0 }; if (!(extra & 0x4000)) { *src = regs.fp[(extra >> 10) & 7]; return 1; } mode = (opcode >> 3) & 7; reg = opcode & 7; size = (extra >> 10) & 7; switch (mode) { case 0: switch (size) { case 6: *src = (fptype) (uae_s8) m68k_dreg (regs, reg); break; case 4: *src = (fptype) (uae_s16) m68k_dreg (regs, reg); break; case 0: *src = (fptype) (uae_s32) m68k_dreg (regs, reg); break; case 1: *src = to_single (m68k_dreg (regs, reg)); break; default: return 0; } return 1; case 1: return 0; case 2: ad = m68k_areg (regs, reg); break; case 3: ad = m68k_areg (regs, reg); m68k_areg (regs, reg) += reg == 7 ? sz2[size] : sz1[size]; break; case 4: m68k_areg (regs, reg) -= reg == 7 ? sz2[size] : sz1[size]; ad = m68k_areg (regs, reg); break; case 5: ad = m68k_areg (regs, reg) + (uae_s32) (uae_s16) x_next_iword (); break; case 6: ad = x_get_disp_ea_020 (m68k_areg (regs, reg), x_next_iword ()); break; case 7: switch (reg) { case 0: ad = (uae_s32) (uae_s16) x_next_iword (); break; case 1: ad = x_next_ilong (); break; case 2: ad = m68k_getpc (); ad += (uae_s32) (uae_s16) x_next_iword (); break; case 3: tmppc = m68k_getpc (); tmp = x_next_iword (); ad = x_get_disp_ea_020 (tmppc, tmp); break; case 4: ad = m68k_getpc (); m68k_setpc (ad + sz2[size]); if (size == 6) ad++; break; default: return 0; } } switch (size) { case 0: *src = (fptype) (uae_s32) x_get_long (ad); break; case 1: *src = to_single (x_get_long (ad)); break; case 2:{ uae_u32 wrd1, wrd2, wrd3; wrd1 = x_get_long (ad); ad += 4; wrd2 = x_get_long (ad); ad += 4; wrd3 = x_get_long (ad); *src = to_exten (wrd1, wrd2, wrd3); } break; case 3:{ uae_u32 wrd1, wrd2, wrd3; wrd1 = x_get_long (ad); ad += 4; wrd2 = x_get_long (ad); ad += 4; wrd3 = x_get_long (ad); *src = to_pack (wrd1, wrd2, wrd3); } break; case 4: *src = (fptype) (uae_s16) x_get_word (ad); break; case 5:{ uae_u32 wrd1, wrd2; wrd1 = x_get_long (ad); ad += 4; wrd2 = x_get_long (ad); *src = to_double (wrd1, wrd2); } break; case 6: *src = (fptype) (uae_s8) x_get_byte (ad); break; default: return 0; } return 1; } STATIC_INLINE int put_fp_value (fptype value, uae_u32 opcode, uae_u16 extra) { uae_u16 tmp; uaecptr tmppc; int size, mode, reg; uae_u32 ad; static int sz1[8] = { 4, 4, 12, 12, 2, 8, 1, 0 }; static int sz2[8] = { 4, 4, 12, 12, 2, 8, 2, 0 }; #if DEBUG_FPP if (!isinrom ()) write_log (_T("PUTFP: %f %04X %04X\n"), value, opcode, extra); #endif if (!(extra & 0x4000)) { regs.fp[(extra >> 10) & 7] = value; return 1; } reg = opcode & 7; mode = (opcode >> 3) & 7; size = (extra >> 10) & 7; ad = -1; switch (mode) { case 0: switch (size) { case 6: m68k_dreg (regs, reg) = (uae_u32)(((toint (value, -128.0, 127.0) & 0xff) | (m68k_dreg (regs, reg) & ~0xff))); break; case 4: m68k_dreg (regs, reg) = (uae_u32)(((toint (value, -32768.0, 32767.0) & 0xffff) | (m68k_dreg (regs, reg) & ~0xffff))); break; case 0: m68k_dreg (regs, reg) = (uae_u32)toint (value, -2147483648.0, 2147483647.0); break; case 1: m68k_dreg (regs, reg) = from_single (value); break; default: return 0; } return 1; case 1: return 0; case 2: ad = m68k_areg (regs, reg); break; case 3: ad = m68k_areg (regs, reg); m68k_areg (regs, reg) += reg == 7 ? sz2[size] : sz1[size]; break; case 4: m68k_areg (regs, reg) -= reg == 7 ? sz2[size] : sz1[size]; ad = m68k_areg (regs, reg); break; case 5: ad = m68k_areg (regs, reg) + (uae_s32) (uae_s16) x_next_iword (); break; case 6: ad = x_get_disp_ea_020 (m68k_areg (regs, reg), x_next_iword ()); break; case 7: switch (reg) { case 0: ad = (uae_s32) (uae_s16) x_next_iword (); break; case 1: ad = x_next_ilong (); break; case 2: ad = m68k_getpc (); ad += (uae_s32) (uae_s16) x_next_iword (); break; case 3: tmppc = m68k_getpc (); tmp = x_next_iword (); ad = x_get_disp_ea_020 (tmppc, tmp); break; case 4: ad = m68k_getpc (); m68k_setpc (ad + sz2[size]); break; default: return 0; } } switch (size) { case 0: x_put_long (ad, (uae_u32)toint (value, -2147483648.0, 2147483647.0)); break; case 1: x_put_long (ad, from_single (value)); break; case 2: { uae_u32 wrd1, wrd2, wrd3; from_exten (value, &wrd1, &wrd2, &wrd3); x_put_long (ad, wrd1); ad += 4; x_put_long (ad, wrd2); ad += 4; x_put_long (ad, wrd3); } break; case 3: { uae_u32 wrd1, wrd2, wrd3; from_pack (value, &wrd1, &wrd2, &wrd3); x_put_long (ad, wrd1); ad += 4; x_put_long (ad, wrd2); ad += 4; x_put_long (ad, wrd3); } break; case 4: x_put_word (ad, (uae_s16) toint (value, -32768.0, 32767.0)); break; case 5:{ uae_u32 wrd1, wrd2; from_double (value, &wrd1, &wrd2); x_put_long (ad, wrd1); ad += 4; x_put_long (ad, wrd2); } break; case 6: x_put_byte (ad, (uae_s8)toint (value, -128.0, 127.0)); break; default: return 0; } return 1; } STATIC_INLINE int get_fp_ad (uae_u32 opcode, uae_u32 * ad) { uae_u16 tmp; uaecptr tmppc; int mode; int reg; mode = (opcode >> 3) & 7; reg = opcode & 7; switch (mode) { case 0: case 1: return 0; case 2: *ad = m68k_areg (regs, reg); break; case 3: *ad = m68k_areg (regs, reg); break; case 4: *ad = m68k_areg (regs, reg); break; case 5: *ad = m68k_areg (regs, reg) + (uae_s32) (uae_s16) x_next_iword (); break; case 6: *ad = x_get_disp_ea_020 (m68k_areg (regs, reg), x_next_iword ()); break; case 7: switch (reg) { case 0: *ad = (uae_s32) (uae_s16) x_next_iword (); break; case 1: *ad = x_next_ilong (); break; case 2: *ad = m68k_getpc (); *ad += (uae_s32) (uae_s16) x_next_iword (); break; case 3: tmppc = m68k_getpc (); tmp = x_next_iword (); *ad = x_get_disp_ea_020 (tmppc, tmp); break; default: return 0; } } return 1; } STATIC_INLINE int fpp_cond (int condition) { int N = (regs.fp_result < 0.0); int Z = (regs.fp_result == 0.0); int NotANumber = 0; #ifdef HAVE_ISNAN NotANumber = isnan (regs.fp_result); #endif if (NotANumber) N=Z=0; switch (condition) { case 0x00: return 0; case 0x01: return Z; case 0x02: return !(NotANumber || Z || N); case 0x03: return Z || !(NotANumber || N); case 0x04: return N && !(NotANumber || Z); case 0x05: return Z || (N && !NotANumber); case 0x06: return !(NotANumber || Z); case 0x07: return !NotANumber; case 0x08: return NotANumber; case 0x09: return NotANumber || Z; case 0x0a: return NotANumber || !(N || Z); case 0x0b: return NotANumber || Z || !N; case 0x0c: return NotANumber || (N && !Z); case 0x0d: return NotANumber || Z || N; case 0x0e: return !Z; case 0x0f: return 1; case 0x10: return 0; case 0x11: return Z; case 0x12: return !(NotANumber || Z || N); case 0x13: return Z || !(NotANumber || N); case 0x14: return N && !(NotANumber || Z); case 0x15: return Z || (N && !NotANumber); case 0x16: return !(NotANumber || Z); case 0x17: return !NotANumber; case 0x18: return NotANumber; case 0x19: return NotANumber || Z; case 0x1a: return NotANumber || !(N || Z); case 0x1b: return NotANumber || Z || !N; case 0x1c: return NotANumber || (N && !Z); case 0x1d: return NotANumber || Z || N; case 0x1e: return !Z; case 0x1f: return 1; } return -1; } void fpuop_dbcc (uae_u32 opcode, uae_u16 extra) { uaecptr pc = (uae_u32) m68k_getpc (); uae_s32 disp; int cc; #if DEBUG_FPP if (!isinrom ()) write_log (_T("fdbcc_opp at %08lx\n"), m68k_getpc ()); #endif if (fault_if_no_fpu (opcode, 4)) return; regs.fpiar = m68k_getpc () - 4; disp = (uae_s32) (uae_s16) x_next_iword (); cc = fpp_cond (extra & 0x3f); if (cc == -1) { fpu_op_illg (opcode, 4); } else if (!cc) { int reg = opcode & 0x7; m68k_dreg (regs, reg) = ((m68k_dreg (regs, reg) & 0xffff0000) | (((m68k_dreg (regs, reg) & 0xffff) - 1) & 0xffff)); if ((m68k_dreg (regs, reg) & 0xffff) != 0xffff) m68k_setpc (pc + disp); } } void fpuop_scc (uae_u32 opcode, uae_u16 extra) { uae_u32 ad; int cc; #if DEBUG_FPP if (!isinrom ()) write_log (_T("fscc_opp at %08lx\n"), m68k_getpc ()); #endif if (fault_if_no_fpu (opcode, 4)) return; regs.fpiar = m68k_getpc () - 4; cc = fpp_cond (extra & 0x3f); if (cc == -1) { fpu_op_illg (opcode, 4); } else if ((opcode & 0x38) == 0) { m68k_dreg (regs, opcode & 7) = (m68k_dreg (regs, opcode & 7) & ~0xff) | (cc ? 0xff : 0x00); } else { if (get_fp_ad (opcode, &ad) == 0) { m68k_setpc (m68k_getpc () - 4); op_illg (opcode); } else x_put_byte (ad, cc ? 0xff : 0x00); } } void fpuop_trapcc (uae_u32 opcode, uaecptr oldpc, uae_u16 extra) { int cc; uaecptr pc = m68k_getpc (); #if DEBUG_FPP if (!isinrom ()) write_log (_T("ftrapcc_opp at %08lx\n"), m68k_getpc ()); #endif if (fault_if_no_fpu (opcode, pc - oldpc)) return; regs.fpiar = oldpc; cc = fpp_cond (extra & 0x3f); if (cc == -1) { fpu_op_illg (opcode, pc - oldpc); } if (cc) Exception (7); } void fpuop_bcc (uae_u32 opcode, uaecptr oldpc, uae_u32 extra) { int cc; uaecptr pc = m68k_getpc (); #if DEBUG_FPP if (!isinrom ()) write_log (_T("fbcc_opp at %08lx\n"), m68k_getpc ()); #endif if (fault_if_no_fpu (opcode, pc - oldpc)) return; regs.fpiar = oldpc; cc = fpp_cond (opcode & 0x3f); if (cc == -1) { fpu_op_illg (opcode, pc - oldpc); } else if (cc) { if ((opcode & 0x40) == 0) extra = (uae_s32) (uae_s16) extra; m68k_setpc (oldpc + extra); } } void fpuop_save (uae_u32 opcode) { uae_u32 ad; int incr = (opcode & 0x38) == 0x20 ? -1 : 1; int fpu_version = get_fpu_version(); uaecptr pc = m68k_getpc () - 2; int i; #if DEBUG_FPP if (!isinrom ()) write_log (_T("fsave_opp at %08lx\n"), m68k_getpc ()); #endif if (fault_if_no_fpu (opcode, 2)) return; if (get_fp_ad (opcode, &ad) == 0) { fpu_op_illg (opcode, 2); return; } // if (regs.fpcr == 0 && regs.fpsr == 0 && regs.fpiar == 0 && // regs.fp[0] == regs.fpiar = pc; if (currprefs.fpu_model == 68060) { /* 12 byte 68060 IDLE frame. */ if (incr < 0) { ad -= 4; x_put_long (ad, 0x00000000); ad -= 4; x_put_long (ad, 0x00000000); ad -= 4; x_put_long (ad, 0x00006000); } else { x_put_long (ad, 0x00006000); ad += 4; x_put_long (ad, 0x00000000); ad += 4; x_put_long (ad, 0x00000000); ad += 4; } } else if (currprefs.fpu_model == 68040) { /* 4 byte 68040 IDLE frame. */ if (incr < 0) { ad -= 4; x_put_long (ad, fpu_version << 24); } else { x_put_long (ad, fpu_version << 24); ad += 4; } } else { /* 68881/68882 */ int idle_size = currprefs.fpu_model == 68882 ? 0x38 : 0x18; if (incr < 0) { ad -= 4; x_put_long (ad, 0x70000000); for (i = 0; i < (idle_size - 1) / 4; i++) { ad -= 4; x_put_long (ad, 0x00000000); } ad -= 4; x_put_long (ad, (fpu_version << 24) | (idle_size << 16)); } else { x_put_long (ad, (fpu_version << 24) | (idle_size << 16)); ad += 4; for (i = 0; i < (idle_size - 1) / 4; i++) { x_put_long (ad, 0x00000000); ad += 4; } x_put_long (ad, 0x70000000); ad += 4; } } if ((opcode & 0x38) == 0x18) m68k_areg (regs, opcode & 7) = ad; if ((opcode & 0x38) == 0x20) m68k_areg (regs, opcode & 7) = ad; } void fpuop_restore (uae_u32 opcode) { uaecptr pc = m68k_getpc () - 2; uae_u32 ad; uae_u32 d; int incr = (opcode & 0x38) == 0x20 ? -1 : 1; #if DEBUG_FPP if (!isinrom ()) write_log (_T("frestore_opp at %08lx\n"), m68k_getpc ()); #endif if (fault_if_no_fpu (opcode, 2)) return; if (get_fp_ad (opcode, &ad) == 0) { fpu_op_illg (opcode, 2); return; } regs.fpiar = pc; if (currprefs.fpu_model == 68060) { /* all 68060 FPU frames are 12 bytes */ if (incr < 0) { ad -= 4; d = x_get_long (ad); ad -= 8; } else { d = x_get_long (ad); ad += 4; ad += 8; } } else if (currprefs.fpu_model == 68040) { /* 68040 */ if (incr < 0) { /* @@@ This may be wrong. */ ad -= 4; d = x_get_long (ad); if ((d & 0xff000000) != 0) { /* Not a NULL frame? */ if ((d & 0x00ff0000) == 0) { /* IDLE */ } else if ((d & 0x00ff0000) == 0x00300000) { /* UNIMP */ ad -= 44; } else if ((d & 0x00ff0000) == 0x00600000) { /* BUSY */ ad -= 92; } } } else { d = x_get_long (ad); ad += 4; if ((d & 0xff000000) != 0) { /* Not a NULL frame? */ if ((d & 0x00ff0000) == 0) { /* IDLE */ } else if ((d & 0x00ff0000) == 0x00300000) { /* UNIMP */ ad += 44; } else if ((d & 0x00ff0000) == 0x00600000) { /* BUSY */ ad += 92; } } } } else { /* 68881/68882 */ if (incr < 0) { ad -= 4; d = x_get_long (ad); if ((d & 0xff000000) != 0) { if ((d & 0x00ff0000) == 0x00180000) ad -= 6 * 4; else if ((d & 0x00ff0000) == 0x00380000) ad -= 14 * 4; else if ((d & 0x00ff0000) == 0x00b40000) ad -= 45 * 4; } } else { d = x_get_long (ad); ad += 4; if ((d & 0xff000000) != 0) { if ((d & 0x00ff0000) == 0x00180000) ad += 6 * 4; else if ((d & 0x00ff0000) == 0x00380000) ad += 14 * 4; else if ((d & 0x00ff0000) == 0x00b40000) ad += 45 * 4; } } } if ((opcode & 0x38) == 0x18) m68k_areg (regs, opcode & 7) = ad; if ((opcode & 0x38) == 0x20) m68k_areg (regs, opcode & 7) = ad; } static void fround (int reg) { regs.fp[reg] = (float)regs.fp[reg]; } static void fpuop_arithmetic2 (uae_u32 opcode, uae_u16 extra) { int reg; fptype src; uaecptr pc = m68k_getpc () - 4; #if DEBUG_FPP if (!isinrom ()) write_log (_T("FPP %04lx %04x at %08lx\n"), opcode & 0xffff, extra, pc); #endif if (fault_if_no_fpu (opcode, 4)) return; switch ((extra >> 13) & 0x7) { case 3: if (put_fp_value (regs.fp[(extra >> 7) & 7], opcode, extra) == 0) { m68k_setpc (pc); op_illg (opcode); } return; case 4: case 5: if ((opcode & 0x38) == 0) { if (extra & 0x2000) { if (extra & 0x1000) m68k_dreg (regs, opcode & 7) = regs.fpcr & 0xffff; if (extra & 0x0800) m68k_dreg (regs, opcode & 7) = get_fpsr (); if (extra & 0x0400) m68k_dreg (regs, opcode & 7) = regs.fpiar; } else { if (extra & 0x1000) { regs.fpcr = m68k_dreg (regs, opcode & 7); native_set_fpucw (regs.fpcr); } if (extra & 0x0800) set_fpsr (m68k_dreg (regs, opcode & 7)); if (extra & 0x0400) regs.fpiar = m68k_dreg (regs, opcode & 7); } } else if ((opcode & 0x38) == 0x08) { if (extra & 0x2000) { if (extra & 0x1000) m68k_areg (regs, opcode & 7) = regs.fpcr & 0xffff; if (extra & 0x0800) m68k_areg (regs, opcode & 7) = get_fpsr (); if (extra & 0x0400) m68k_areg (regs, opcode & 7) = regs.fpiar; } else { if (extra & 0x1000) { regs.fpcr = m68k_areg (regs, opcode & 7); native_set_fpucw (regs.fpcr); } if (extra & 0x0800) set_fpsr (m68k_areg (regs, opcode & 7)); if (extra & 0x0400) regs.fpiar = m68k_areg (regs, opcode & 7); } } else if ((opcode & 0x3f) == 0x3c) { if ((extra & 0x2000) == 0) { if (extra & 0x1000) { regs.fpcr = x_next_ilong (); native_set_fpucw (regs.fpcr); } if (extra & 0x0800) set_fpsr (x_next_ilong ()); if (extra & 0x0400) regs.fpiar = x_next_ilong (); } } else if (extra & 0x2000) { /* FMOVEM FPP->memory */ uae_u32 ad; int incr = 0; if (get_fp_ad (opcode, &ad) == 0) { m68k_setpc (pc); op_illg (opcode); return; } if ((opcode & 0x38) == 0x20) { if (extra & 0x1000) incr += 4; if (extra & 0x0800) incr += 4; if (extra & 0x0400) incr += 4; } ad -= incr; if (extra & 0x1000) { x_put_long (ad, regs.fpcr & 0xffff); ad += 4; } if (extra & 0x0800) { x_put_long (ad, get_fpsr()); ad += 4; } if (extra & 0x0400) { x_put_long (ad, regs.fpiar); ad += 4; } ad -= incr; if ((opcode & 0x38) == 0x18) m68k_areg (regs, opcode & 7) = ad; if ((opcode & 0x38) == 0x20) m68k_areg (regs, opcode & 7) = ad; } else { /* FMOVEM memory->FPP */ uae_u32 ad; int incr = 0; if (get_fp_ad (opcode, &ad) == 0) { m68k_setpc (pc); op_illg (opcode); return; } if((opcode & 0x38) == 0x20) { if (extra & 0x1000) incr += 4; if (extra & 0x0800) incr += 4; if (extra & 0x0400) incr += 4; ad = ad - incr; } if (extra & 0x1000) { regs.fpcr = x_get_long (ad); native_set_fpucw (regs.fpcr); ad += 4; } if (extra & 0x0800) { set_fpsr(x_get_long (ad)); ad += 4; } if (extra & 0x0400) { regs.fpiar = x_get_long (ad); ad += 4; } if ((opcode & 0x38) == 0x18) m68k_areg (regs, opcode & 7) = ad; if ((opcode & 0x38) == 0x20) m68k_areg (regs, opcode & 7) = ad - incr; } return; case 6: case 7: { uae_u32 ad, list = 0; int incr = 0; if (extra & 0x2000) { /* FMOVEM FPP->memory */ if (get_fp_ad (opcode, &ad) == 0) { m68k_setpc (pc); op_illg (opcode); return; } switch ((extra >> 11) & 3) { case 0: /* static pred */ list = extra & 0xff; incr = -1; break; case 1: /* dynamic pred */ list = m68k_dreg (regs, (extra >> 4) & 3) & 0xff; incr = -1; break; case 2: /* static postinc */ list = extra & 0xff; incr = 1; break; case 3: /* dynamic postinc */ list = m68k_dreg (regs, (extra >> 4) & 3) & 0xff; incr = 1; break; } if (incr < 0) { for (reg = 7; reg >= 0; reg--) { uae_u32 wrd1, wrd2, wrd3; if (list & 0x80) { from_exten (regs.fp[reg], &wrd1, &wrd2, &wrd3); ad -= 4; x_put_long (ad, wrd3); ad -= 4; x_put_long (ad, wrd2); ad -= 4; x_put_long (ad, wrd1); } list <<= 1; } } else { for (reg = 0; reg <= 7; reg++) { uae_u32 wrd1, wrd2, wrd3; if (list & 0x80) { from_exten (regs.fp[reg], &wrd1, &wrd2, &wrd3); x_put_long (ad, wrd1); ad += 4; x_put_long (ad, wrd2); ad += 4; x_put_long (ad, wrd3); ad += 4; } list <<= 1; } } if ((opcode & 0x38) == 0x18) m68k_areg (regs, opcode & 7) = ad; if ((opcode & 0x38) == 0x20) m68k_areg (regs, opcode & 7) = ad; } else { /* FMOVEM memory->FPP */ if (get_fp_ad (opcode, &ad) == 0) { m68k_setpc (pc); op_illg (opcode); return; } switch ((extra >> 11) & 3) { case 0: /* static pred */ list = extra & 0xff; incr = -1; break; case 1: /* dynamic pred */ list = m68k_dreg (regs, (extra >> 4) & 3) & 0xff; incr = -1; break; case 2: /* static postinc */ list = extra & 0xff; incr = 1; break; case 3: /* dynamic postinc */ list = m68k_dreg (regs, (extra >> 4) & 3) & 0xff; incr = 1; break; } if (incr < 0) { for (reg = 7; reg >= 0; reg--) { uae_u32 wrd1, wrd2, wrd3; if (list & 0x80) { ad -= 4; wrd3 = x_get_long (ad); ad -= 4; wrd2 = x_get_long (ad); ad -= 4; wrd1 = x_get_long (ad); regs.fp[reg] = to_exten(wrd1, wrd2, wrd3); } list <<= 1; } } else { for (reg = 0; reg <= 7; reg++) { uae_u32 wrd1, wrd2, wrd3; if (list & 0x80) { wrd1 = x_get_long (ad); ad += 4; wrd2 = x_get_long (ad); ad += 4; wrd3 = x_get_long (ad); ad += 4; regs.fp[reg] = to_exten(wrd1, wrd2, wrd3); } list <<= 1; } } if ((opcode & 0x38) == 0x18) m68k_areg (regs, opcode & 7) = ad; if ((opcode & 0x38) == 0x20) m68k_areg (regs, opcode & 7) = ad; } } return; case 0: case 2: /* Extremely common */ reg = (extra >> 7) & 7; if ((extra & 0xfc00) == 0x5c00) { switch (extra & 0x7f) { case 0x00: regs.fp[reg] = *fp_pi; break; case 0x0b: regs.fp[reg] = *fp_l10_2; break; case 0x0c: regs.fp[reg] = *fp_exp_1; break; case 0x0d: regs.fp[reg] = *fp_l2_e; break; case 0x0e: regs.fp[reg] = *fp_l10_e; break; case 0x0f: regs.fp[reg] = 0.0; break; case 0x30: regs.fp[reg] = *fp_ln_2; break; case 0x31: regs.fp[reg] = *fp_ln_10; break; case 0x32: regs.fp[reg] = (fptype)fp_1e0; break; case 0x33: regs.fp[reg] = (fptype)fp_1e1; break; case 0x34: regs.fp[reg] = (fptype)fp_1e2; break; case 0x35: regs.fp[reg] = (fptype)fp_1e4; break; case 0x36: regs.fp[reg] = (fptype)fp_1e8; break; case 0x37: regs.fp[reg] = *fp_1e16; break; case 0x38: regs.fp[reg] = *fp_1e32; break; case 0x39: regs.fp[reg] = *fp_1e64; break; case 0x3a: regs.fp[reg] = *fp_1e128; break; case 0x3b: regs.fp[reg] = *fp_1e256; break; case 0x3c: regs.fp[reg] = *fp_1e512; break; case 0x3d: regs.fp[reg] = *fp_1e1024; break; case 0x3e: regs.fp[reg] = *fp_1e2048; break; case 0x3f: regs.fp[reg] = *fp_1e4096; break; default: m68k_setpc (pc); op_illg (opcode); return; } MAKE_FPSR (regs.fp[reg]); return; } if (get_fp_value (opcode, extra, &src) == 0) { m68k_setpc (pc); op_illg (opcode); return; } regs.fpiar = pc; switch (extra & 0x7f) { case 0x00: /* FMOVE */ case 0x40: /* Explicit rounding. This is just a quick fix. */ case 0x44: /* Same for all other cases that have three choices */ regs.fp[reg] = src; /* Brian King was here. */ /* to register needs FPSR updated. See Motorola 68K Manual. */ if ((extra & 0x44) == 0x40) fround (reg); break; case 0x01: /* FINT */ /* need to take the current rounding mode into account */ #if defined(X86_MSVC_ASSEMBLY) { fptype tmp_fp; __asm { fld LDPTR src frndint fstp LDPTR tmp_fp } regs.fp[reg] = tmp_fp; } #else /* no X86_MSVC */ switch ((regs.fpcr >> 4) & 3) { case 0: /* to nearest */ regs.fp[reg] = floor (src + 0.5); break; case 1: /* to zero */ if (src >= 0.0) regs.fp[reg] = floor (src); else regs.fp[reg] = ceil (src); break; case 2: /* down */ regs.fp[reg] = floor (src); break; case 3: /* up */ regs.fp[reg] = ceil (src); break; default: /* never reached */ regs.fp[reg] = src; } #endif /* X86_MSVC */ break; case 0x02: /* FSINH */ regs.fp[reg] = sinh (src); break; case 0x03: /* FINTRZ */ regs.fp[reg] = fp_round_to_zero (src); break; case 0x04: /* FSQRT */ case 0x41: case 0x45: regs.fp[reg] = sqrt (src); if ((extra & 0x44) == 0x40) fround (reg); break; case 0x06: /* FLOGNP1 */ regs.fp[reg] = log (src + 1.0); break; case 0x08: /* FETOXM1 */ regs.fp[reg] = exp (src) - 1.0; break; case 0x09: /* FTANH */ regs.fp[reg] = tanh (src); break; case 0x0a: /* FATAN */ regs.fp[reg] = atan (src); break; case 0x0c: /* FASIN */ regs.fp[reg] = asin (src); break; case 0x0d: /* FATANH */ #if 1 /* The BeBox doesn't have atanh, and it isn't in the HPUX libm either */ regs.fp[reg] = 0.5 * log ((1 + src) / (1 - src)); #else regs.fp[reg] = atanh (src); #endif break; case 0x0e: /* FSIN */ regs.fp[reg] = sin (src); break; case 0x0f: /* FTAN */ regs.fp[reg] = tan (src); break; case 0x10: /* FETOX */ regs.fp[reg] = exp (src); break; case 0x11: /* FTWOTOX */ regs.fp[reg] = pow (2.0, src); break; case 0x12: /* FTENTOX */ regs.fp[reg] = pow (10.0, src); break; case 0x14: /* FLOGN */ regs.fp[reg] = log (src); break; case 0x15: /* FLOG10 */ regs.fp[reg] = log10 (src); break; case 0x16: /* FLOG2 */ regs.fp[reg] = *fp_l2_e * log (src); break; case 0x18: /* FABS */ case 0x58: case 0x5c: regs.fp[reg] = src < 0 ? -src : src; if ((extra & 0x44) == 0x40) fround (reg); break; case 0x19: /* FCOSH */ regs.fp[reg] = cosh (src); break; case 0x1a: /* FNEG */ case 0x5a: case 0x5e: regs.fp[reg] = -src; if ((extra & 0x44) == 0x40) fround (reg); break; case 0x1c: /* FACOS */ regs.fp[reg] = acos (src); break; case 0x1d: /* FCOS */ regs.fp[reg] = cos (src); break; case 0x1e: /* FGETEXP */ { if (src == 0) { regs.fp[reg] = 0; } else { int expon; frexp (src, &expon); regs.fp[reg] = (double) (expon - 1); } } break; case 0x1f: /* FGETMAN */ { if (src == 0) { regs.fp[reg] = 0; } else { int expon; regs.fp[reg] = frexp (src, &expon) * 2.0; } } break; case 0x20: /* FDIV */ case 0x60: case 0x64: regs.fp[reg] /= src; if ((extra & 0x44) == 0x40) fround (reg); break; case 0x21: /* FMOD */ { fptype quot = fp_round_to_zero(regs.fp[reg] / src); regs.fp[reg] = regs.fp[reg] - quot * src; } break; case 0x22: /* FADD */ case 0x62: case 0x66: regs.fp[reg] += src; if ((extra & 0x44) == 0x40) fround (reg); break; case 0x23: /* FMUL */ case 0x63: case 0x67: regs.fp[reg] *= src; if ((extra & 0x44) == 0x40) fround (reg); break; case 0x24: /* FSGLDIV */ regs.fp[reg] /= src; break; case 0x25: /* FREM */ { fptype quot = fp_round_to_nearest(regs.fp[reg] / src); regs.fp[reg] = regs.fp[reg] - quot * src; } break; case 0x26: /* FSCALE */ if (src != 0) { #ifdef ldexp regs.fp[reg] = ldexp (regs.fp[reg], (int) src); #else regs.fp[reg] *= exp (*fp_ln_2 * (int) src); #endif } break; case 0x27: /* FSGLMUL */ regs.fp[reg] *= src; break; case 0x28: /* FSUB */ case 0x68: case 0x6c: regs.fp[reg] -= src; if ((extra & 0x44) == 0x40) fround (reg); break; case 0x30: /* FSINCOS */ case 0x31: case 0x32: case 0x33: case 0x34: case 0x35: case 0x36: case 0x37: regs.fp[extra & 7] = cos (src); regs.fp[reg] = sin (src); break; case 0x38: /* FCMP */ { fptype tmp = regs.fp[reg] - src; regs.fpsr = 0; MAKE_FPSR (tmp); } return; case 0x3a: /* FTST */ regs.fpsr = 0; MAKE_FPSR (src); return; default: m68k_setpc (pc); op_illg (opcode); return; } MAKE_FPSR (regs.fp[reg]); return; } m68k_setpc (pc); op_illg (opcode); } void fpuop_arithmetic (uae_u32 opcode, uae_u16 extra) { regs.fpsr_highbyte = 0; fpuop_arithmetic2 (opcode, extra); if (regs.fpsr_highbyte) { regs.fpsr &= 0xffff00ff; regs.fpsr |= regs.fpsr_highbyte; regs.fpsr |= regs.fpsr_highbyte << 8; write_log (_T("FPU exception: %04x\n"), regs.fpsr); } } void fpu_reset (void) { regs.fpcr = regs.fpsr = regs.fpiar = 0; regs.fp_result = 1; fpux_restore (NULL); } void fpp_setexcept (uae_u16 mask) { regs.fpsr_highbyte |= mask >> 8; } uae_u8 *restore_fpu (uae_u8 *src) { int i; uae_u32 flags; changed_prefs.fpu_model = currprefs.fpu_model = restore_u32 (); flags = restore_u32 (); for (i = 0; i < 8; i++) { uae_u32 w1 = restore_u32 (); uae_u32 w2 = restore_u32 (); uae_u32 w3 = restore_u16 (); regs.fp[i] = to_exten (w1, w2, w3); } regs.fpcr = restore_u32 (); native_set_fpucw (regs.fpcr); regs.fpsr = restore_u32 (); regs.fpiar = restore_u32 (); if (flags & 0x80000000) { restore_u32(); restore_u32(); } write_log (_T("FPU: %d\n"), currprefs.fpu_model); return src; } uae_u8 *save_fpu (int *len, uae_u8 *dstptr) { uae_u8 *dstbak,*dst; int i; *len = 0; if (currprefs.fpu_model == 0) return 0; if (dstptr) dstbak = dst = dstptr; else dstbak = dst = xmalloc (uae_u8, 4+4+8*10+4+4+4+4+4); save_u32 (currprefs.fpu_model); save_u32 (0x80000000); for (i = 0; i < 8; i++) { uae_u32 w1, w2, w3; from_exten (regs.fp[i], &w1, &w2, &w3); save_u32 (w1); save_u32 (w2); save_u16 (w3); } save_u32 (regs.fpcr); save_u32 (regs.fpsr); save_u32 (regs.fpiar); save_u32 (-1); save_u32 (0); *len = dst - dstbak; return dstbak; } fs-uae-2.2.3+dfsg/src/memory.cpp0000644000175000017500000024417412162366655016674 0ustar glaubitzglaubitz/* * UAE - The Un*x Amiga Emulator * * Memory management * * (c) 1995 Bernd Schmidt */ #define DEBUG_STUPID 0 #include "sysconfig.h" #include "sysdeps.h" #include "options.h" #include "uae.h" #include "uae/memory.h" #include "rommgr.h" #include "ersatz.h" #include "zfile.h" #include "custom.h" #include "events.h" #include "newcpu.h" #include "autoconf.h" #include "savestate.h" #include "ar.h" #include "crc32.h" #include "gui.h" #include "cdtv.h" #include "akiko.h" #include "arcadia.h" #include "enforcer.h" #include "a2091.h" #include "gayle.h" #include "debug.h" #ifdef FSUAE extern uae_u8 *natmem_offset, *natmem_offset_end; #endif bool canbang; int candirect = -1; #ifdef JIT /* Set by each memory handler that does not simply access real memory. */ int special_mem; #endif static int mem_hardreset; static bool isdirectjit (void) { return currprefs.cachesize && !currprefs.comptrustbyte; } static bool canjit (void) { if (currprefs.cpu_model < 68020 || currprefs.address_space_24) return false; return true; } static bool needmman (void) { #ifdef _WIN32 return true; #endif if (canjit ()) return true; return false; } static void nocanbang (void) { canbang = 0; } uae_u32 allocated_chipmem; uae_u32 allocated_fastmem; uae_u32 allocated_bogomem; uae_u32 allocated_gfxmem; uae_u32 allocated_z3fastmem, allocated_z3fastmem2, allocated_z3chipmem; uae_u32 allocated_a3000lmem; uae_u32 allocated_a3000hmem; uae_u32 allocated_cardmem; uae_u8 ce_banktype[65536]; uae_u8 ce_cachable[65536]; static size_t bootrom_filepos, chip_filepos, bogo_filepos, rom_filepos, a3000lmem_filepos, a3000hmem_filepos; /* Set if we notice during initialization that settings changed, and we must clear all memory to prevent bogus contents from confusing the Kickstart. */ static bool need_hardreset; static bool bogomem_aliasing; /* The address space setting used during the last reset. */ static bool last_address_space_24; addrbank *mem_banks[MEMORY_BANKS]; /* This has two functions. It either holds a host address that, when added to the 68k address, gives the host address corresponding to that 68k address (in which case the value in this array is even), OR it holds the same value as mem_banks, for those banks that have baseaddr==0. In that case, bit 0 is set (the memory access routines will take care of it). */ uae_u8 *baseaddr[MEMORY_BANKS]; #ifdef NO_INLINE_MEMORY_ACCESS __inline__ uae_u32 longget (uaecptr addr) { return call_mem_get_func (get_mem_bank (addr).lget, addr); } __inline__ uae_u32 wordget (uaecptr addr) { return call_mem_get_func (get_mem_bank (addr).wget, addr); } __inline__ uae_u32 byteget (uaecptr addr) { return call_mem_get_func (get_mem_bank (addr).bget, addr); } __inline__ void longput (uaecptr addr, uae_u32 l) { call_mem_put_func (get_mem_bank (addr).lput, addr, l); } __inline__ void wordput (uaecptr addr, uae_u32 w) { call_mem_put_func (get_mem_bank (addr).wput, addr, w); } __inline__ void byteput (uaecptr addr, uae_u32 b) { call_mem_put_func (get_mem_bank (addr).bput, addr, b); } #endif int addr_valid (const TCHAR *txt, uaecptr addr, uae_u32 len) { addrbank *ab = &get_mem_bank(addr); if (ab == 0 || !(ab->flags & (ABFLAG_RAM | ABFLAG_ROM)) || addr < 0x100 || len < 0 || len > 16777215 || !valid_address (addr, len)) { write_log (_T("corrupt %s pointer %x (%d) detected!\n"), txt, addr, len); return 0; } return 1; } uae_u32 chipmem_mask, chipmem_full_mask, chipmem_full_size; uae_u32 kickmem_mask, extendedkickmem_mask, extendedkickmem2_mask, bogomem_mask; uae_u32 a3000lmem_mask, a3000hmem_mask, cardmem_mask; static int illegal_count; /* A dummy bank that only contains zeros */ static uae_u32 REGPARAM3 dummy_lget (uaecptr) REGPARAM; static uae_u32 REGPARAM3 dummy_wget (uaecptr) REGPARAM; static uae_u32 REGPARAM3 dummy_bget (uaecptr) REGPARAM; static void REGPARAM3 dummy_lput (uaecptr, uae_u32) REGPARAM; static void REGPARAM3 dummy_wput (uaecptr, uae_u32) REGPARAM; static void REGPARAM3 dummy_bput (uaecptr, uae_u32) REGPARAM; static int REGPARAM3 dummy_check (uaecptr addr, uae_u32 size) REGPARAM; #define MAX_ILG 200 #define NONEXISTINGDATA 0 //#define NONEXISTINGDATA 0xffffffff static void dummylog (int rw, uaecptr addr, int size, uae_u32 val, int ins) { if (illegal_count >= MAX_ILG && MAX_ILG > 0) return; /* ignore Zorro3 expansion space */ if (addr >= 0xff000000 && addr <= 0xff000200) return; /* autoconfig and extended rom */ if (addr >= 0xe00000 && addr <= 0xf7ffff) return; /* motherboard ram */ if (addr >= 0x08000000 && addr <= 0x08000007) return; if (addr >= 0x07f00000 && addr <= 0x07f00007) return; if (addr >= 0x07f7fff0 && addr <= 0x07ffffff) return; if (MAX_ILG >= 0) illegal_count++; if (ins) { write_log (_T("WARNING: Illegal opcode %cget at %08x PC=%x\n"), size == 2 ? 'w' : 'l', addr, M68K_GETPC); } else if (rw) { write_log (_T("Illegal %cput at %08x=%08x PC=%x\n"), size == 1 ? 'b' : size == 2 ? 'w' : 'l', addr, val, M68K_GETPC); } else { write_log (_T("Illegal %cget at %08x PC=%x\n"), size == 1 ? 'b' : size == 2 ? 'w' : 'l', addr, M68K_GETPC); } } static uae_u32 dummy_get (uaecptr addr, int size) { uae_u32 v; if (currprefs.cpu_model >= 68020) return NONEXISTINGDATA; v = (regs.irc << 16) | regs.irc; if (size == 4) { ; } else if (size == 2) { v &= 0xffff; } else { v = (addr & 1) ? (v & 0xff) : ((v >> 8) & 0xff); } #if 0 if (addr >= 0x10000000) write_log (_T("%08X %d = %08x\n"), addr, size, v); #endif return v; } static uae_u32 REGPARAM2 dummy_lget (uaecptr addr) { #ifdef JIT special_mem |= S_READ; #endif if (currprefs.illegal_mem) dummylog (0, addr, 4, 0, 0); return dummy_get (addr, 4); } uae_u32 REGPARAM2 dummy_lgeti (uaecptr addr) { #ifdef JIT special_mem |= S_READ; #endif if (currprefs.illegal_mem) dummylog (0, addr, 4, 0, 1); return dummy_get (addr, 4); } static uae_u32 REGPARAM2 dummy_wget (uaecptr addr) { #ifdef JIT special_mem |= S_READ; #endif if (currprefs.illegal_mem) dummylog (0, addr, 2, 0, 0); return dummy_get (addr, 2); } uae_u32 REGPARAM2 dummy_wgeti (uaecptr addr) { #ifdef JIT special_mem |= S_READ; #endif if (currprefs.illegal_mem) dummylog (0, addr, 2, 0, 1); return dummy_get (addr, 2); } static uae_u32 REGPARAM2 dummy_bget (uaecptr addr) { #ifdef JIT special_mem |= S_READ; #endif if (currprefs.illegal_mem) dummylog (0, addr, 1, 0, 0); return dummy_get (addr, 1); } static void REGPARAM2 dummy_lput (uaecptr addr, uae_u32 l) { #ifdef JIT special_mem |= S_WRITE; #endif if (currprefs.illegal_mem) dummylog (1, addr, 4, l, 0); } static void REGPARAM2 dummy_wput (uaecptr addr, uae_u32 w) { #ifdef JIT special_mem |= S_WRITE; #endif if (currprefs.illegal_mem) dummylog (1, addr, 2, w, 0); } static void REGPARAM2 dummy_bput (uaecptr addr, uae_u32 b) { #ifdef JIT special_mem |= S_WRITE; #endif if (currprefs.illegal_mem) dummylog (1, addr, 1, b, 0); } static int REGPARAM2 dummy_check (uaecptr addr, uae_u32 size) { #ifdef JIT special_mem |= S_READ; #endif return 0; } static void REGPARAM2 none_put (uaecptr addr, uae_u32 v) { #ifdef JIT special_mem |= S_WRITE; #endif } static uae_u32 REGPARAM2 ones_get (uaecptr addr) { #ifdef JIT special_mem |= S_READ; #endif return 0xffffffff; } /* Chip memory */ uae_u8 *chipmemory; static int REGPARAM3 chipmem_check (uaecptr addr, uae_u32 size) REGPARAM; static uae_u8 *REGPARAM3 chipmem_xlate (uaecptr addr) REGPARAM; #ifdef AGA /* AGA ce-chipram access */ static void ce2_timeout (void) { wait_cpu_cycle_read (0, -1); } static uae_u32 REGPARAM2 chipmem_lget_ce2 (uaecptr addr) { uae_u32 *m; #ifdef JIT special_mem |= S_READ; #endif addr &= chipmem_mask; m = (uae_u32 *)(chipmemory + addr); ce2_timeout (); return do_get_mem_long (m); } static uae_u32 REGPARAM2 chipmem_wget_ce2 (uaecptr addr) { uae_u16 *m, v; #ifdef JIT special_mem |= S_READ; #endif addr &= chipmem_mask; m = (uae_u16 *)(chipmemory + addr); ce2_timeout (); v = do_get_mem_word (m); return v; } static uae_u32 REGPARAM2 chipmem_bget_ce2 (uaecptr addr) { #ifdef JIT special_mem |= S_READ; #endif addr &= chipmem_mask; ce2_timeout (); return chipmemory[addr]; } static void REGPARAM2 chipmem_lput_ce2 (uaecptr addr, uae_u32 l) { uae_u32 *m; #ifdef JIT special_mem |= S_WRITE; #endif addr &= chipmem_mask; m = (uae_u32 *)(chipmemory + addr); ce2_timeout (); do_put_mem_long (m, l); } static void REGPARAM2 chipmem_wput_ce2 (uaecptr addr, uae_u32 w) { uae_u16 *m; #ifdef JIT special_mem |= S_WRITE; #endif addr &= chipmem_mask; m = (uae_u16 *)(chipmemory + addr); ce2_timeout (); do_put_mem_word (m, w); } static void REGPARAM2 chipmem_bput_ce2 (uaecptr addr, uae_u32 b) { #ifdef JIT special_mem |= S_WRITE; #endif addr &= chipmem_mask; ce2_timeout (); chipmemory[addr] = b; } #endif uae_u32 REGPARAM2 chipmem_lget (uaecptr addr) { uae_u32 *m; addr &= chipmem_mask; m = (uae_u32 *)(chipmemory + addr); #ifdef FSUAE #ifdef DEBUG_MEM printf("chipmem_lget %08x = %08x\n", addr, do_get_mem_long (m)); #endif #endif return do_get_mem_long (m); } static uae_u32 REGPARAM2 chipmem_wget (uaecptr addr) { uae_u16 *m, v; addr &= chipmem_mask; m = (uae_u16 *)(chipmemory + addr); v = do_get_mem_word (m); #ifdef FSUAE #ifdef DEBUG_MEM printf("chipmem_wget %08x = %08x\n", addr, v); #endif #endif return v; } static uae_u32 REGPARAM2 chipmem_bget (uaecptr addr) { uae_u8 v; addr &= chipmem_mask; v = chipmemory[addr]; #ifdef FSUAE #ifdef DEBUG_MEM printf("chipmem_wget %08x = %08x\n", addr, v); #endif #endif return v; } void REGPARAM2 chipmem_lput (uaecptr addr, uae_u32 l) { #ifdef FSUAE #ifdef DEBUG_MEM printf("chipmem_lput %08x %08x\n", addr, l); #endif #endif #ifdef FSUAE #ifdef DEBUG_SYNC_MEMORY write_sync_log("cl %08x %08x\n", addr, l); #endif #endif uae_u32 *m; addr &= chipmem_mask; m = (uae_u32 *)(chipmemory + addr); do_put_mem_long (m, l); } void REGPARAM2 chipmem_wput (uaecptr addr, uae_u32 w) { #ifdef FSUAE #ifdef DEBUG_MEM printf("chipmem_wput %08x %08x\n", addr, w); #endif #endif #ifdef FSUAE #ifdef DEBUG_SYNC_MEMORY write_sync_log("cw %08x %08x\n", addr, w); #endif #endif uae_u16 *m; addr &= chipmem_mask; m = (uae_u16 *)(chipmemory + addr); do_put_mem_word (m, w); } void REGPARAM2 chipmem_bput (uaecptr addr, uae_u32 b) { #ifdef FSUAE #ifdef DEBUG_MEM printf("chipmem_bput %08x %08x\n", addr, b); #endif #endif #ifdef FSUAE #ifdef DEBUG_SYNC_MEMORY write_sync_log("cb %08x %08x\n", addr, b); #endif #endif addr &= chipmem_mask; chipmemory[addr] = b; } /* cpu chipmem access inside agnus addressable ram but no ram available */ static uae_u32 chipmem_dummy (void) { /* not really right but something random that has more ones than zeros.. */ return 0xffff & ~((1 << (uaerand () & 31)) | (1 << (uaerand () & 31))); } void REGPARAM2 chipmem_dummy_bput (uaecptr addr, uae_u32 b) { #ifdef JIT special_mem |= S_WRITE; #endif } void REGPARAM2 chipmem_dummy_wput (uaecptr addr, uae_u32 b) { #ifdef JIT special_mem |= S_WRITE; #endif } void REGPARAM2 chipmem_dummy_lput (uaecptr addr, uae_u32 b) { #ifdef JIT special_mem |= S_WRITE; #endif } static uae_u32 REGPARAM2 chipmem_dummy_bget (uaecptr addr) { #ifdef JIT special_mem |= S_READ; #endif return chipmem_dummy (); } static uae_u32 REGPARAM2 chipmem_dummy_wget (uaecptr addr) { #ifdef JIT special_mem |= S_READ; #endif return chipmem_dummy (); } static uae_u32 REGPARAM2 chipmem_dummy_lget (uaecptr addr) { #ifdef JIT special_mem |= S_READ; #endif return (chipmem_dummy () << 16) | chipmem_dummy (); } static uae_u32 REGPARAM2 chipmem_agnus_lget (uaecptr addr) { uae_u32 *m; addr &= chipmem_full_mask; m = (uae_u32 *)(chipmemory + addr); #ifdef FSUAE #ifdef DEBUG_MEM printf("chipmem_agnus_lget %08x = %08x\n", addr, do_get_mem_long (m)); #endif #endif return do_get_mem_long (m); } uae_u32 REGPARAM2 chipmem_agnus_wget (uaecptr addr) { uae_u16 *m; addr &= chipmem_full_mask; m = (uae_u16 *)(chipmemory + addr); #ifdef FSUAE #ifdef DEBUG_MEM printf("chipmem_agnus_lget %08x = %08x\n", addr, do_get_mem_word (m)); #endif #endif return do_get_mem_word (m); } static uae_u32 REGPARAM2 chipmem_agnus_bget (uaecptr addr) { addr &= chipmem_full_mask; #ifdef FSUAE #ifdef DEBUG_MEM printf("chipmem_agnus_lget %08x = %08x\n", addr, chipmemory[addr]); #endif #endif return chipmemory[addr]; } static void REGPARAM2 chipmem_agnus_lput (uaecptr addr, uae_u32 l) { #ifdef FSUAE #ifdef DEBUG_MEM printf("chipmem_agnus_lput %08x %08x\n", addr, l); #endif #endif uae_u32 *m; addr &= chipmem_full_mask; if (addr >= chipmem_full_size) return; m = (uae_u32 *)(chipmemory + addr); do_put_mem_long (m, l); } void REGPARAM2 chipmem_agnus_wput (uaecptr addr, uae_u32 w) { #ifdef FSUAE #ifdef DEBUG_MEM printf("chipmem_agnus_wput %08x %08x\n", addr, w); #endif #endif uae_u16 *m; addr &= chipmem_full_mask; if (addr >= chipmem_full_size) return; m = (uae_u16 *)(chipmemory + addr); do_put_mem_word (m, w); } static void REGPARAM2 chipmem_agnus_bput (uaecptr addr, uae_u32 b) { #ifdef FSUAE #ifdef DEBUG_MEM printf("chipmem_agnus_bput %08x %08x\n", addr, b); #endif #endif addr &= chipmem_full_mask; if (addr >= chipmem_full_size) return; chipmemory[addr] = b; } static int REGPARAM2 chipmem_check (uaecptr addr, uae_u32 size) { addr &= chipmem_mask; return (addr + size) <= chipmem_full_size; } static uae_u8 *REGPARAM2 chipmem_xlate (uaecptr addr) { addr &= chipmem_mask; return chipmemory + addr; } STATIC_INLINE void REGPARAM2 chipmem_lput_bigmem (uaecptr addr, uae_u32 v) { put_long (addr, v); } STATIC_INLINE void REGPARAM2 chipmem_wput_bigmem (uaecptr addr, uae_u32 v) { put_word (addr, v); } STATIC_INLINE void REGPARAM2 chipmem_bput_bigmem (uaecptr addr, uae_u32 v) { put_byte (addr, v); } STATIC_INLINE uae_u32 REGPARAM2 chipmem_lget_bigmem (uaecptr addr) { return get_long (addr); } STATIC_INLINE uae_u32 REGPARAM2 chipmem_wget_bigmem (uaecptr addr) { return get_word (addr); } STATIC_INLINE uae_u32 REGPARAM2 chipmem_bget_bigmem (uaecptr addr) { return get_byte (addr); } STATIC_INLINE int REGPARAM2 chipmem_check_bigmem (uaecptr addr, uae_u32 size) { return valid_address (addr, size); } STATIC_INLINE uae_u8* REGPARAM2 chipmem_xlate_bigmem (uaecptr addr) { return get_real_address (addr); } uae_u32 (REGPARAM2 *chipmem_lget_indirect)(uaecptr); uae_u32 (REGPARAM2 *chipmem_wget_indirect)(uaecptr); uae_u32 (REGPARAM2 *chipmem_bget_indirect)(uaecptr); void (REGPARAM2 *chipmem_lput_indirect)(uaecptr, uae_u32); void (REGPARAM2 *chipmem_wput_indirect)(uaecptr, uae_u32); void (REGPARAM2 *chipmem_bput_indirect)(uaecptr, uae_u32); int (REGPARAM2 *chipmem_check_indirect)(uaecptr, uae_u32); uae_u8 *(REGPARAM2 *chipmem_xlate_indirect)(uaecptr); static void chipmem_setindirect (void) { if (currprefs.z3chipmem_size) { chipmem_lget_indirect = chipmem_lget_bigmem; chipmem_wget_indirect = chipmem_wget_bigmem; chipmem_bget_indirect = chipmem_bget_bigmem; chipmem_lput_indirect = chipmem_lput_bigmem; chipmem_wput_indirect = chipmem_wput_bigmem; chipmem_bput_indirect = chipmem_bput_bigmem; chipmem_check_indirect = chipmem_check_bigmem; chipmem_xlate_indirect = chipmem_xlate_bigmem; } else { chipmem_lget_indirect = chipmem_lget; chipmem_wget_indirect = chipmem_agnus_wget; chipmem_bget_indirect = chipmem_agnus_bget; chipmem_lput_indirect = chipmem_lput; chipmem_wput_indirect = chipmem_agnus_wput; chipmem_bput_indirect = chipmem_agnus_bput; chipmem_check_indirect = chipmem_check; chipmem_xlate_indirect = chipmem_xlate; } } /* Slow memory */ static uae_u8 *bogomemory; static int bogomemory_allocated; static uae_u32 REGPARAM3 bogomem_lget (uaecptr) REGPARAM; static uae_u32 REGPARAM3 bogomem_wget (uaecptr) REGPARAM; static uae_u32 REGPARAM3 bogomem_bget (uaecptr) REGPARAM; static void REGPARAM3 bogomem_lput (uaecptr, uae_u32) REGPARAM; static void REGPARAM3 bogomem_wput (uaecptr, uae_u32) REGPARAM; static void REGPARAM3 bogomem_bput (uaecptr, uae_u32) REGPARAM; static int REGPARAM3 bogomem_check (uaecptr addr, uae_u32 size) REGPARAM; static uae_u8 *REGPARAM3 bogomem_xlate (uaecptr addr) REGPARAM; static uae_u32 REGPARAM2 bogomem_lget (uaecptr addr) { uae_u32 *m; addr &= bogomem_mask; m = (uae_u32 *)(bogomemory + addr); return do_get_mem_long (m); } static uae_u32 REGPARAM2 bogomem_wget (uaecptr addr) { uae_u16 *m; addr &= bogomem_mask; m = (uae_u16 *)(bogomemory + addr); return do_get_mem_word (m); } static uae_u32 REGPARAM2 bogomem_bget (uaecptr addr) { addr &= bogomem_mask; return bogomemory[addr]; } static void REGPARAM2 bogomem_lput (uaecptr addr, uae_u32 l) { uae_u32 *m; addr &= bogomem_mask; m = (uae_u32 *)(bogomemory + addr); do_put_mem_long (m, l); } static void REGPARAM2 bogomem_wput (uaecptr addr, uae_u32 w) { uae_u16 *m; addr &= bogomem_mask; m = (uae_u16 *)(bogomemory + addr); do_put_mem_word (m, w); } static void REGPARAM2 bogomem_bput (uaecptr addr, uae_u32 b) { addr &= bogomem_mask; bogomemory[addr] = b; } static int REGPARAM2 bogomem_check (uaecptr addr, uae_u32 size) { addr &= bogomem_mask; return (addr + size) <= allocated_bogomem; } static uae_u8 *REGPARAM2 bogomem_xlate (uaecptr addr) { addr &= bogomem_mask; return bogomemory + addr; } /* CDTV expension memory card memory */ uae_u8 *cardmemory; static uae_u32 REGPARAM3 cardmem_lget (uaecptr) REGPARAM; static uae_u32 REGPARAM3 cardmem_wget (uaecptr) REGPARAM; static uae_u32 REGPARAM3 cardmem_bget (uaecptr) REGPARAM; static void REGPARAM3 cardmem_lput (uaecptr, uae_u32) REGPARAM; static void REGPARAM3 cardmem_wput (uaecptr, uae_u32) REGPARAM; static void REGPARAM3 cardmem_bput (uaecptr, uae_u32) REGPARAM; static int REGPARAM3 cardmem_check (uaecptr addr, uae_u32 size) REGPARAM; static uae_u8 *REGPARAM3 cardmem_xlate (uaecptr addr) REGPARAM; static uae_u32 REGPARAM2 cardmem_lget (uaecptr addr) { uae_u32 *m; addr &= cardmem_mask; m = (uae_u32 *)(cardmemory + addr); return do_get_mem_long (m); } static uae_u32 REGPARAM2 cardmem_wget (uaecptr addr) { uae_u16 *m; addr &= cardmem_mask; m = (uae_u16 *)(cardmemory + addr); return do_get_mem_word (m); } static uae_u32 REGPARAM2 cardmem_bget (uaecptr addr) { addr &= cardmem_mask; return cardmemory[addr]; } static void REGPARAM2 cardmem_lput (uaecptr addr, uae_u32 l) { uae_u32 *m; addr &= cardmem_mask; m = (uae_u32 *)(cardmemory + addr); do_put_mem_long (m, l); } static void REGPARAM2 cardmem_wput (uaecptr addr, uae_u32 w) { uae_u16 *m; addr &= cardmem_mask; m = (uae_u16 *)(cardmemory + addr); do_put_mem_word (m, w); } static void REGPARAM2 cardmem_bput (uaecptr addr, uae_u32 b) { addr &= cardmem_mask; cardmemory[addr] = b; } static int REGPARAM2 cardmem_check (uaecptr addr, uae_u32 size) { addr &= cardmem_mask; return (addr + size) <= allocated_cardmem; } static uae_u8 *REGPARAM2 cardmem_xlate (uaecptr addr) { addr &= cardmem_mask; return cardmemory + addr; } /* A3000 motherboard fast memory */ static uae_u8 *a3000lmemory, *a3000hmemory; uae_u32 a3000lmem_start, a3000hmem_start; static uae_u32 REGPARAM3 a3000lmem_lget (uaecptr) REGPARAM; static uae_u32 REGPARAM3 a3000lmem_wget (uaecptr) REGPARAM; static uae_u32 REGPARAM3 a3000lmem_bget (uaecptr) REGPARAM; static void REGPARAM3 a3000lmem_lput (uaecptr, uae_u32) REGPARAM; static void REGPARAM3 a3000lmem_wput (uaecptr, uae_u32) REGPARAM; static void REGPARAM3 a3000lmem_bput (uaecptr, uae_u32) REGPARAM; static int REGPARAM3 a3000lmem_check (uaecptr addr, uae_u32 size) REGPARAM; static uae_u8 *REGPARAM3 a3000lmem_xlate (uaecptr addr) REGPARAM; static uae_u32 REGPARAM2 a3000lmem_lget (uaecptr addr) { uae_u32 *m; addr &= a3000lmem_mask; m = (uae_u32 *)(a3000lmemory + addr); return do_get_mem_long (m); } static uae_u32 REGPARAM2 a3000lmem_wget (uaecptr addr) { uae_u16 *m; addr &= a3000lmem_mask; m = (uae_u16 *)(a3000lmemory + addr); return do_get_mem_word (m); } static uae_u32 REGPARAM2 a3000lmem_bget (uaecptr addr) { addr &= a3000lmem_mask; return a3000lmemory[addr]; } static void REGPARAM2 a3000lmem_lput (uaecptr addr, uae_u32 l) { uae_u32 *m; addr &= a3000lmem_mask; m = (uae_u32 *)(a3000lmemory + addr); do_put_mem_long (m, l); } static void REGPARAM2 a3000lmem_wput (uaecptr addr, uae_u32 w) { uae_u16 *m; addr &= a3000lmem_mask; m = (uae_u16 *)(a3000lmemory + addr); do_put_mem_word (m, w); } static void REGPARAM2 a3000lmem_bput (uaecptr addr, uae_u32 b) { addr &= a3000lmem_mask; a3000lmemory[addr] = b; } static int REGPARAM2 a3000lmem_check (uaecptr addr, uae_u32 size) { addr &= a3000lmem_mask; return (addr + size) <= allocated_a3000lmem; } static uae_u8 *REGPARAM2 a3000lmem_xlate (uaecptr addr) { addr &= a3000lmem_mask; return a3000lmemory + addr; } static uae_u32 REGPARAM3 a3000hmem_lget (uaecptr) REGPARAM; static uae_u32 REGPARAM3 a3000hmem_wget (uaecptr) REGPARAM; static uae_u32 REGPARAM3 a3000hmem_bget (uaecptr) REGPARAM; static void REGPARAM3 a3000hmem_lput (uaecptr, uae_u32) REGPARAM; static void REGPARAM3 a3000hmem_wput (uaecptr, uae_u32) REGPARAM; static void REGPARAM3 a3000hmem_bput (uaecptr, uae_u32) REGPARAM; static int REGPARAM3 a3000hmem_check (uaecptr addr, uae_u32 size) REGPARAM; static uae_u8 *REGPARAM3 a3000hmem_xlate (uaecptr addr) REGPARAM; static uae_u32 REGPARAM2 a3000hmem_lget (uaecptr addr) { uae_u32 *m; addr &= a3000hmem_mask; m = (uae_u32 *)(a3000hmemory + addr); return do_get_mem_long (m); } static uae_u32 REGPARAM2 a3000hmem_wget (uaecptr addr) { uae_u16 *m; addr &= a3000hmem_mask; m = (uae_u16 *)(a3000hmemory + addr); return do_get_mem_word (m); } static uae_u32 REGPARAM2 a3000hmem_bget (uaecptr addr) { addr &= a3000hmem_mask; return a3000hmemory[addr]; } static void REGPARAM2 a3000hmem_lput (uaecptr addr, uae_u32 l) { uae_u32 *m; addr &= a3000hmem_mask; m = (uae_u32 *)(a3000hmemory + addr); do_put_mem_long (m, l); } static void REGPARAM2 a3000hmem_wput (uaecptr addr, uae_u32 w) { uae_u16 *m; addr &= a3000hmem_mask; m = (uae_u16 *)(a3000hmemory + addr); do_put_mem_word (m, w); } static void REGPARAM2 a3000hmem_bput (uaecptr addr, uae_u32 b) { addr &= a3000hmem_mask; a3000hmemory[addr] = b; } static int REGPARAM2 a3000hmem_check (uaecptr addr, uae_u32 size) { addr &= a3000hmem_mask; return (addr + size) <= allocated_a3000hmem; } static uae_u8 *REGPARAM2 a3000hmem_xlate (uaecptr addr) { addr &= a3000hmem_mask; return a3000hmemory + addr; } /* Kick memory */ uae_u8 *kickmemory; uae_u16 kickstart_version; static int kickmem_size; /* * A1000 kickstart RAM handling * * RESET instruction unhides boot ROM and disables write protection * write access to boot ROM hides boot ROM and enables write protection * */ static int a1000_kickstart_mode; static uae_u8 *a1000_bootrom; static void a1000_handle_kickstart (int mode) { if (!a1000_bootrom) return; protect_roms (false); if (mode == 0) { a1000_kickstart_mode = 0; memcpy (kickmemory, kickmemory + 262144, 262144); kickstart_version = (kickmemory[262144 + 12] << 8) | kickmemory[262144 + 13]; } else { a1000_kickstart_mode = 1; memcpy (kickmemory, a1000_bootrom, 262144); kickstart_version = 0; } if (kickstart_version == 0xffff) kickstart_version = 0; } void a1000_reset (void) { a1000_handle_kickstart (1); } static uae_u32 REGPARAM3 kickmem_lget (uaecptr) REGPARAM; static uae_u32 REGPARAM3 kickmem_wget (uaecptr) REGPARAM; static uae_u32 REGPARAM3 kickmem_bget (uaecptr) REGPARAM; static void REGPARAM3 kickmem_lput (uaecptr, uae_u32) REGPARAM; static void REGPARAM3 kickmem_wput (uaecptr, uae_u32) REGPARAM; static void REGPARAM3 kickmem_bput (uaecptr, uae_u32) REGPARAM; static int REGPARAM3 kickmem_check (uaecptr addr, uae_u32 size) REGPARAM; static uae_u8 *REGPARAM3 kickmem_xlate (uaecptr addr) REGPARAM; static uae_u32 REGPARAM2 kickmem_lget (uaecptr addr) { uae_u32 *m; addr &= kickmem_mask; m = (uae_u32 *)(kickmemory + addr); return do_get_mem_long (m); } static uae_u32 REGPARAM2 kickmem_wget (uaecptr addr) { uae_u16 *m; addr &= kickmem_mask; m = (uae_u16 *)(kickmemory + addr); return do_get_mem_word (m); } static uae_u32 REGPARAM2 kickmem_bget (uaecptr addr) { addr &= kickmem_mask; return kickmemory[addr]; } static void REGPARAM2 kickmem_lput (uaecptr addr, uae_u32 b) { uae_u32 *m; #ifdef JIT special_mem |= S_WRITE; #endif if (a1000_kickstart_mode) { if (addr >= 0xfc0000) { addr &= kickmem_mask; m = (uae_u32 *)(kickmemory + addr); do_put_mem_long (m, b); return; } else a1000_handle_kickstart (0); } else if (currprefs.illegal_mem) write_log (_T("Illegal kickmem lput at %08x\n"), addr); } static void REGPARAM2 kickmem_wput (uaecptr addr, uae_u32 b) { uae_u16 *m; #ifdef JIT special_mem |= S_WRITE; #endif if (a1000_kickstart_mode) { if (addr >= 0xfc0000) { addr &= kickmem_mask; m = (uae_u16 *)(kickmemory + addr); do_put_mem_word (m, b); return; } else a1000_handle_kickstart (0); } else if (currprefs.illegal_mem) write_log (_T("Illegal kickmem wput at %08x\n"), addr); } static void REGPARAM2 kickmem_bput (uaecptr addr, uae_u32 b) { #ifdef JIT special_mem |= S_WRITE; #endif if (a1000_kickstart_mode) { if (addr >= 0xfc0000) { addr &= kickmem_mask; kickmemory[addr] = b; return; } else a1000_handle_kickstart (0); } else if (currprefs.illegal_mem) write_log (_T("Illegal kickmem bput at %08x\n"), addr); } static void REGPARAM2 kickmem2_lput (uaecptr addr, uae_u32 l) { uae_u32 *m; #ifdef JIT special_mem |= S_WRITE; #endif addr &= kickmem_mask; m = (uae_u32 *)(kickmemory + addr); do_put_mem_long (m, l); } static void REGPARAM2 kickmem2_wput (uaecptr addr, uae_u32 w) { uae_u16 *m; #ifdef JIT special_mem |= S_WRITE; #endif addr &= kickmem_mask; m = (uae_u16 *)(kickmemory + addr); do_put_mem_word (m, w); } static void REGPARAM2 kickmem2_bput (uaecptr addr, uae_u32 b) { #ifdef JIT special_mem |= S_WRITE; #endif addr &= kickmem_mask; kickmemory[addr] = b; } static int REGPARAM2 kickmem_check (uaecptr addr, uae_u32 size) { addr &= kickmem_mask; return (addr + size) <= kickmem_size; } static uae_u8 *REGPARAM2 kickmem_xlate (uaecptr addr) { addr &= kickmem_mask; return kickmemory + addr; } /* CD32/CDTV extended kick memory */ uae_u8 *extendedkickmemory, *extendedkickmemory2; static int extendedkickmem_size, extendedkickmem2_size; static uae_u32 extendedkickmem_start, extendedkickmem2_start; static int extendedkickmem_type; #define EXTENDED_ROM_CD32 1 #define EXTENDED_ROM_CDTV 2 #define EXTENDED_ROM_KS 3 #define EXTENDED_ROM_ARCADIA 4 static uae_u32 REGPARAM3 extendedkickmem_lget (uaecptr) REGPARAM; static uae_u32 REGPARAM3 extendedkickmem_wget (uaecptr) REGPARAM; static uae_u32 REGPARAM3 extendedkickmem_bget (uaecptr) REGPARAM; static void REGPARAM3 extendedkickmem_lput (uaecptr, uae_u32) REGPARAM; static void REGPARAM3 extendedkickmem_wput (uaecptr, uae_u32) REGPARAM; static void REGPARAM3 extendedkickmem_bput (uaecptr, uae_u32) REGPARAM; static int REGPARAM3 extendedkickmem_check (uaecptr addr, uae_u32 size) REGPARAM; static uae_u8 *REGPARAM3 extendedkickmem_xlate (uaecptr addr) REGPARAM; static uae_u32 REGPARAM2 extendedkickmem_lget (uaecptr addr) { uae_u32 *m; addr -= extendedkickmem_start & extendedkickmem_mask; addr &= extendedkickmem_mask; m = (uae_u32 *)(extendedkickmemory + addr); return do_get_mem_long (m); } static uae_u32 REGPARAM2 extendedkickmem_wget (uaecptr addr) { uae_u16 *m; addr -= extendedkickmem_start & extendedkickmem_mask; addr &= extendedkickmem_mask; m = (uae_u16 *)(extendedkickmemory + addr); return do_get_mem_word (m); } static uae_u32 REGPARAM2 extendedkickmem_bget (uaecptr addr) { addr -= extendedkickmem_start & extendedkickmem_mask; addr &= extendedkickmem_mask; return extendedkickmemory[addr]; } static void REGPARAM2 extendedkickmem_lput (uaecptr addr, uae_u32 b) { #ifdef JIT special_mem |= S_WRITE; #endif if (currprefs.illegal_mem) write_log (_T("Illegal extendedkickmem lput at %08x\n"), addr); } static void REGPARAM2 extendedkickmem_wput (uaecptr addr, uae_u32 b) { #ifdef JIT special_mem |= S_WRITE; #endif if (currprefs.illegal_mem) write_log (_T("Illegal extendedkickmem wput at %08x\n"), addr); } static void REGPARAM2 extendedkickmem_bput (uaecptr addr, uae_u32 b) { #ifdef JIT special_mem |= S_WRITE; #endif if (currprefs.illegal_mem) write_log (_T("Illegal extendedkickmem lput at %08x\n"), addr); } static int REGPARAM2 extendedkickmem_check (uaecptr addr, uae_u32 size) { addr -= extendedkickmem_start & extendedkickmem_mask; addr &= extendedkickmem_mask; return (addr + size) <= extendedkickmem_size; } static uae_u8 *REGPARAM2 extendedkickmem_xlate (uaecptr addr) { addr -= extendedkickmem_start & extendedkickmem_mask; addr &= extendedkickmem_mask; return extendedkickmemory + addr; } static uae_u32 REGPARAM3 extendedkickmem2_lget (uaecptr) REGPARAM; static uae_u32 REGPARAM3 extendedkickmem2_wget (uaecptr) REGPARAM; static uae_u32 REGPARAM3 extendedkickmem2_bget (uaecptr) REGPARAM; static void REGPARAM3 extendedkickmem2_lput (uaecptr, uae_u32) REGPARAM; static void REGPARAM3 extendedkickmem2_wput (uaecptr, uae_u32) REGPARAM; static void REGPARAM3 extendedkickmem2_bput (uaecptr, uae_u32) REGPARAM; static int REGPARAM3 extendedkickmem2_check (uaecptr addr, uae_u32 size) REGPARAM; static uae_u8 *REGPARAM3 extendedkickmem2_xlate (uaecptr addr) REGPARAM; static uae_u32 REGPARAM2 extendedkickmem2_lget (uaecptr addr) { uae_u32 *m; addr -= extendedkickmem2_start & extendedkickmem2_mask; addr &= extendedkickmem2_mask; m = (uae_u32 *)(extendedkickmemory2 + addr); return do_get_mem_long (m); } static uae_u32 REGPARAM2 extendedkickmem2_wget (uaecptr addr) { uae_u16 *m; addr -= extendedkickmem2_start & extendedkickmem2_mask; addr &= extendedkickmem2_mask; m = (uae_u16 *)(extendedkickmemory2 + addr); return do_get_mem_word (m); } static uae_u32 REGPARAM2 extendedkickmem2_bget (uaecptr addr) { addr -= extendedkickmem2_start & extendedkickmem2_mask; addr &= extendedkickmem2_mask; return extendedkickmemory2[addr]; } static void REGPARAM2 extendedkickmem2_lput (uaecptr addr, uae_u32 b) { #ifdef JIT special_mem |= S_WRITE; #endif if (currprefs.illegal_mem) write_log (_T("Illegal extendedkickmem2 lput at %08x\n"), addr); } static void REGPARAM2 extendedkickmem2_wput (uaecptr addr, uae_u32 b) { #ifdef JIT special_mem |= S_WRITE; #endif if (currprefs.illegal_mem) write_log (_T("Illegal extendedkickmem2 wput at %08x\n"), addr); } static void REGPARAM2 extendedkickmem2_bput (uaecptr addr, uae_u32 b) { #ifdef JIT special_mem |= S_WRITE; #endif if (currprefs.illegal_mem) write_log (_T("Illegal extendedkickmem2 lput at %08x\n"), addr); } static int REGPARAM2 extendedkickmem2_check (uaecptr addr, uae_u32 size) { addr -= extendedkickmem2_start & extendedkickmem2_mask; addr &= extendedkickmem2_mask; return (addr + size) <= extendedkickmem2_size; } static uae_u8 *REGPARAM2 extendedkickmem2_xlate (uaecptr addr) { addr -= extendedkickmem2_start & extendedkickmem2_mask; addr &= extendedkickmem2_mask; return extendedkickmemory2 + addr; } /* Default memory access functions */ int REGPARAM2 default_check (uaecptr a, uae_u32 b) { return 0; } static int be_cnt; uae_u8 *REGPARAM2 default_xlate (uaecptr a) { if (quit_program == 0) { /* do this only in 68010+ mode, there are some tricky A500 programs.. */ if ((currprefs.cpu_model > 68000 || !currprefs.cpu_compatible) && !currprefs.mmu_model) { #if defined(ENFORCER) enforcer_disable (); #endif if (be_cnt < 3) { int i, j; uaecptr a2 = a - 32; uaecptr a3 = m68k_getpc () - 32; write_log (_T("Your Amiga program just did something terribly stupid %08X PC=%08X\n"), a, M68K_GETPC); if (debugging || DEBUG_STUPID) activate_debugger (); m68k_dumpstate (0, 0); for (i = 0; i < 10; i++) { write_log (_T("%08X "), i >= 5 ? a3 : a2); for (j = 0; j < 16; j += 2) { write_log (_T(" %04X"), get_word (i >= 5 ? a3 : a2)); if (i >= 5) a3 += 2; else a2 += 2; } write_log (_T("\n")); } memory_map_dump (); } be_cnt++; if (be_cnt > 1000) { uae_reset (0, 0); be_cnt = 0; } else { regs.panic = 1; regs.panic_pc = m68k_getpc (); regs.panic_addr = a; set_special (SPCFLAG_BRK); } } } return kickmem_xlate (2); /* So we don't crash. */ } /* Address banks */ addrbank dummy_bank = { dummy_lget, dummy_wget, dummy_bget, dummy_lput, dummy_wput, dummy_bput, default_xlate, dummy_check, NULL, NULL, dummy_lgeti, dummy_wgeti, ABFLAG_NONE }; addrbank ones_bank = { ones_get, ones_get, ones_get, none_put, none_put, none_put, default_xlate, dummy_check, NULL, _T("Ones"), dummy_lgeti, dummy_wgeti, ABFLAG_NONE }; addrbank chipmem_bank = { chipmem_lget, chipmem_wget, chipmem_bget, chipmem_lput, chipmem_wput, chipmem_bput, chipmem_xlate, chipmem_check, NULL, _T("Chip memory"), chipmem_lget, chipmem_wget, ABFLAG_RAM }; addrbank chipmem_dummy_bank = { chipmem_dummy_lget, chipmem_dummy_wget, chipmem_dummy_bget, chipmem_dummy_lput, chipmem_dummy_wput, chipmem_dummy_bput, default_xlate, dummy_check, NULL, _T("Dummy Chip memory"), dummy_lgeti, dummy_wgeti, ABFLAG_IO }; #ifdef AGA addrbank chipmem_bank_ce2 = { chipmem_lget_ce2, chipmem_wget_ce2, chipmem_bget_ce2, chipmem_lput_ce2, chipmem_wput_ce2, chipmem_bput_ce2, chipmem_xlate, chipmem_check, NULL, _T("Chip memory (68020 'ce')"), chipmem_lget_ce2, chipmem_wget_ce2, ABFLAG_RAM }; #endif addrbank bogomem_bank = { bogomem_lget, bogomem_wget, bogomem_bget, bogomem_lput, bogomem_wput, bogomem_bput, bogomem_xlate, bogomem_check, NULL, _T("Slow memory"), bogomem_lget, bogomem_wget, ABFLAG_RAM }; addrbank cardmem_bank = { cardmem_lget, cardmem_wget, cardmem_bget, cardmem_lput, cardmem_wput, cardmem_bput, cardmem_xlate, cardmem_check, NULL, _T("CDTV memory card"), cardmem_lget, cardmem_wget, ABFLAG_RAM }; addrbank a3000lmem_bank = { a3000lmem_lget, a3000lmem_wget, a3000lmem_bget, a3000lmem_lput, a3000lmem_wput, a3000lmem_bput, a3000lmem_xlate, a3000lmem_check, NULL, _T("RAMSEY memory (low)"), a3000lmem_lget, a3000lmem_wget, ABFLAG_RAM }; addrbank a3000hmem_bank = { a3000hmem_lget, a3000hmem_wget, a3000hmem_bget, a3000hmem_lput, a3000hmem_wput, a3000hmem_bput, a3000hmem_xlate, a3000hmem_check, NULL, _T("RAMSEY memory (high)"), a3000hmem_lget, a3000hmem_wget, ABFLAG_RAM }; addrbank kickmem_bank = { kickmem_lget, kickmem_wget, kickmem_bget, kickmem_lput, kickmem_wput, kickmem_bput, kickmem_xlate, kickmem_check, NULL, _T("Kickstart ROM"), kickmem_lget, kickmem_wget, ABFLAG_ROM }; addrbank kickram_bank = { kickmem_lget, kickmem_wget, kickmem_bget, kickmem2_lput, kickmem2_wput, kickmem2_bput, kickmem_xlate, kickmem_check, NULL, _T("Kickstart Shadow RAM"), kickmem_lget, kickmem_wget, ABFLAG_UNK | ABFLAG_SAFE }; addrbank extendedkickmem_bank = { extendedkickmem_lget, extendedkickmem_wget, extendedkickmem_bget, extendedkickmem_lput, extendedkickmem_wput, extendedkickmem_bput, extendedkickmem_xlate, extendedkickmem_check, NULL, _T("Extended Kickstart ROM"), extendedkickmem_lget, extendedkickmem_wget, ABFLAG_ROM }; addrbank extendedkickmem2_bank = { extendedkickmem2_lget, extendedkickmem2_wget, extendedkickmem2_bget, extendedkickmem2_lput, extendedkickmem2_wput, extendedkickmem2_bput, extendedkickmem2_xlate, extendedkickmem2_check, NULL, _T("Extended 2nd Kickstart ROM"), extendedkickmem2_lget, extendedkickmem2_wget, ABFLAG_ROM }; static uae_u32 allocated_custmem1, allocated_custmem2; static uae_u32 custmem1_mask, custmem2_mask; static uae_u8 *custmem1, *custmem2; static uae_u32 REGPARAM3 custmem1_lget (uaecptr) REGPARAM; static uae_u32 REGPARAM3 custmem1_wget (uaecptr) REGPARAM; static uae_u32 REGPARAM3 custmem1_bget (uaecptr) REGPARAM; static void REGPARAM3 custmem1_lput (uaecptr, uae_u32) REGPARAM; static void REGPARAM3 custmem1_wput (uaecptr, uae_u32) REGPARAM; static void REGPARAM3 custmem1_bput (uaecptr, uae_u32) REGPARAM; static int REGPARAM3 custmem1_check (uaecptr addr, uae_u32 size) REGPARAM; static uae_u8 *REGPARAM3 custmem1_xlate (uaecptr addr) REGPARAM; static uae_u32 REGPARAM2 custmem1_lget (uaecptr addr) { uae_u8 *m; addr -= currprefs.custom_memory_addrs[0] & custmem1_mask; addr &= custmem1_mask; m = custmem1 + addr; return do_get_mem_long ((uae_u32 *)m); } static uae_u32 REGPARAM2 custmem1_wget (uaecptr addr) { uae_u8 *m; addr -= currprefs.custom_memory_addrs[0] & custmem1_mask; addr &= custmem1_mask; m = custmem1 + addr; return do_get_mem_word ((uae_u16 *)m); } static uae_u32 REGPARAM2 custmem1_bget (uaecptr addr) { addr -= currprefs.custom_memory_addrs[0] & custmem1_mask; addr &= custmem1_mask; return custmem1[addr]; } static void REGPARAM2 custmem1_lput (uaecptr addr, uae_u32 l) { uae_u8 *m; addr -= currprefs.custom_memory_addrs[0] & custmem1_mask; addr &= custmem1_mask; m = custmem1 + addr; do_put_mem_long ((uae_u32 *)m, l); } static void REGPARAM2 custmem1_wput (uaecptr addr, uae_u32 w) { uae_u8 *m; addr -= currprefs.custom_memory_addrs[0] & custmem1_mask; addr &= custmem1_mask; m = custmem1 + addr; do_put_mem_word ((uae_u16 *)m, w); } static void REGPARAM2 custmem1_bput (uaecptr addr, uae_u32 b) { addr -= currprefs.custom_memory_addrs[0] & custmem1_mask; addr &= custmem1_mask; custmem1[addr] = b; } static int REGPARAM2 custmem1_check (uaecptr addr, uae_u32 size) { addr -= currprefs.custom_memory_addrs[0] & custmem1_mask; addr &= custmem1_mask; return (addr + size) <= currprefs.custom_memory_sizes[0]; } static uae_u8 *REGPARAM2 custmem1_xlate (uaecptr addr) { addr -= currprefs.custom_memory_addrs[0] & custmem1_mask; addr &= custmem1_mask; return custmem1 + addr; } static uae_u32 REGPARAM3 custmem2_lget (uaecptr) REGPARAM; static uae_u32 REGPARAM3 custmem2_wget (uaecptr) REGPARAM; static uae_u32 REGPARAM3 custmem2_bget (uaecptr) REGPARAM; static void REGPARAM3 custmem2_lput (uaecptr, uae_u32) REGPARAM; static void REGPARAM3 custmem2_wput (uaecptr, uae_u32) REGPARAM; static void REGPARAM3 custmem2_bput (uaecptr, uae_u32) REGPARAM; static int REGPARAM3 custmem2_check (uaecptr addr, uae_u32 size) REGPARAM; static uae_u8 *REGPARAM3 custmem2_xlate (uaecptr addr) REGPARAM; static uae_u32 REGPARAM2 custmem2_lget (uaecptr addr) { uae_u8 *m; addr -= currprefs.custom_memory_addrs[1] & custmem2_mask; addr &= custmem2_mask; m = custmem2 + addr; return do_get_mem_long ((uae_u32 *)m); } static uae_u32 REGPARAM2 custmem2_wget (uaecptr addr) { uae_u8 *m; addr -= currprefs.custom_memory_addrs[1] & custmem2_mask; addr &= custmem2_mask; m = custmem2 + addr; return do_get_mem_word ((uae_u16 *)m); } static uae_u32 REGPARAM2 custmem2_bget (uaecptr addr) { addr -= currprefs.custom_memory_addrs[1] & custmem2_mask; addr &= custmem2_mask; return custmem2[addr]; } static void REGPARAM2 custmem2_lput (uaecptr addr, uae_u32 l) { uae_u8 *m; addr -= currprefs.custom_memory_addrs[1] & custmem2_mask; addr &= custmem2_mask; m = custmem2 + addr; do_put_mem_long ((uae_u32 *)m, l); } static void REGPARAM2 custmem2_wput (uaecptr addr, uae_u32 w) { uae_u8 *m; addr -= currprefs.custom_memory_addrs[1] & custmem2_mask; addr &= custmem2_mask; m = custmem2 + addr; do_put_mem_word ((uae_u16 *)m, w); } static void REGPARAM2 custmem2_bput (uaecptr addr, uae_u32 b) { addr -= currprefs.custom_memory_addrs[1] & custmem2_mask; addr &= custmem2_mask; custmem2[addr] = b; } static int REGPARAM2 custmem2_check (uaecptr addr, uae_u32 size) { addr -= currprefs.custom_memory_addrs[1] & custmem2_mask; addr &= custmem2_mask; return (addr + size) <= currprefs.custom_memory_sizes[1]; } static uae_u8 *REGPARAM2 custmem2_xlate (uaecptr addr) { addr -= currprefs.custom_memory_addrs[1] & custmem2_mask; addr &= custmem2_mask; return custmem2 + addr; } addrbank custmem1_bank = { custmem1_lget, custmem1_wget, custmem1_bget, custmem1_lput, custmem1_wput, custmem1_bput, custmem1_xlate, custmem1_check, NULL, _T("Non-autoconfig RAM #1"), custmem1_lget, custmem1_wget, ABFLAG_RAM }; addrbank custmem2_bank = { custmem1_lget, custmem1_wget, custmem1_bget, custmem1_lput, custmem1_wput, custmem1_bput, custmem1_xlate, custmem1_check, NULL, _T("Non-autoconfig RAM #2"), custmem1_lget, custmem1_wget, ABFLAG_RAM }; #define fkickmem_size 524288 static int a3000_f0; void a3000_fakekick (int map) { static uae_u8 *kickstore; protect_roms (false); if (map) { uae_u8 *fkickmemory = a3000lmemory + allocated_a3000lmem - fkickmem_size; if (fkickmemory[2] == 0x4e && fkickmemory[3] == 0xf9 && fkickmemory[4] == 0x00) { if (!kickstore) kickstore = xmalloc (uae_u8, fkickmem_size); memcpy (kickstore, kickmemory, fkickmem_size); if (fkickmemory[5] == 0xfc) { memcpy (kickmemory, fkickmemory, fkickmem_size / 2); memcpy (kickmemory + fkickmem_size / 2, fkickmemory, fkickmem_size / 2); extendedkickmem_size = 65536; extendedkickmem_mask = extendedkickmem_size - 1; extendedkickmemory = mapped_malloc (extendedkickmem_size, _T("rom_f0")); extendedkickmem_bank.baseaddr = extendedkickmemory; memcpy (extendedkickmemory, fkickmemory + fkickmem_size / 2, 65536); map_banks (&extendedkickmem_bank, 0xf0, 1, 1); a3000_f0 = 1; } else { memcpy (kickmemory, fkickmemory, fkickmem_size); } } } else { if (a3000_f0) { map_banks (&dummy_bank, 0xf0, 1, 1); mapped_free (extendedkickmemory); extendedkickmemory = NULL; a3000_f0 = 0; } if (kickstore) memcpy (kickmemory, kickstore, fkickmem_size); xfree (kickstore); kickstore = NULL; } protect_roms (true); } static uae_char *kickstring = "exec.library"; static int read_kickstart (struct zfile *f, uae_u8 *mem, int size, int dochecksum, int noalias) { uae_char buffer[20]; int i, j, oldpos; int cr = 0, kickdisk = 0; if (size < 0) { zfile_fseek (f, 0, SEEK_END); size = zfile_ftell (f) & ~0x3ff; zfile_fseek (f, 0, SEEK_SET); } oldpos = zfile_ftell (f); i = zfile_fread (buffer, 1, 11, f); if (!memcmp (buffer, "KICK", 4)) { zfile_fseek (f, 512, SEEK_SET); kickdisk = 1; #if 0 } else if (size >= 524288 && !memcmp (buffer, "AMIG", 4)) { /* ReKick */ zfile_fseek (f, oldpos + 0x6c, SEEK_SET); cr = 2; #endif } else if (memcmp ((uae_char*)buffer, "AMIROMTYPE1", 11) != 0) { zfile_fseek (f, oldpos, SEEK_SET); } else { cloanto_rom = 1; cr = 1; } memset (mem, 0, size); for (i = 0; i < 8; i++) mem[size - 16 + i * 2 + 1] = 0x18 + i; mem[size - 20] = size >> 24; mem[size - 19] = size >> 16; mem[size - 18] = size >> 8; mem[size - 17] = size >> 0; i = zfile_fread (mem, 1, size, f); if (kickdisk && i > 262144) i = 262144; #if 0 if (i >= 262144 && (i != 262144 && i != 524288 && i != 524288 * 2 && i != 524288 * 4)) { notify_user (NUMSG_KSROMREADERROR); return 0; } #endif if (i < size - 20) kickstart_fix_checksum (mem, size); j = 1; while (j < i) j <<= 1; i = j; if (!noalias && i == size / 2) memcpy (mem + size / 2, mem, size / 2); if (cr) { if (!decode_rom (mem, size, cr, i)) return 0; } if (currprefs.cs_a1000ram) { int off = 0; a1000_bootrom = xcalloc (uae_u8, 262144); while (off + i < 262144) { memcpy (a1000_bootrom + off, kickmemory, i); off += i; } memset (kickmemory, 0, kickmem_size); a1000_handle_kickstart (1); dochecksum = 0; i = 524288; } for (j = 0; j < 256 && i >= 262144; j++) { if (!memcmp (mem + j, kickstring, strlen (kickstring) + 1)) break; } if (j == 256 || i < 262144) dochecksum = 0; if (dochecksum) kickstart_checksum (mem, size); return i; } static bool load_extendedkickstart (const TCHAR *romextfile, int type) { struct zfile *f; int size, off; bool ret = false; if (_tcslen (romextfile) == 0) return false; if (is_arcadia_rom (romextfile) == ARCADIA_BIOS) { extendedkickmem_type = EXTENDED_ROM_ARCADIA; return false; } f = read_rom_name (romextfile); if (!f) { notify_user (NUMSG_NOEXTROM); return false; } zfile_fseek (f, 0, SEEK_END); size = zfile_ftell (f); extendedkickmem_size = 524288; off = 0; if (type == 0) { if (currprefs.cs_cd32cd) { extendedkickmem_type = EXTENDED_ROM_CD32; } else if (currprefs.cs_cdtvcd || currprefs.cs_cdtvram) { extendedkickmem_type = EXTENDED_ROM_CDTV; } else if (size > 300000) { extendedkickmem_type = EXTENDED_ROM_CD32; } else if (need_uae_boot_rom () != 0xf00000) { extendedkickmem_type = EXTENDED_ROM_CDTV; } } else { extendedkickmem_type = type; } if (extendedkickmem_type) { zfile_fseek (f, off, SEEK_SET); switch (extendedkickmem_type) { case EXTENDED_ROM_CDTV: extendedkickmemory = mapped_malloc (extendedkickmem_size, _T("rom_f0")); extendedkickmem_bank.baseaddr = extendedkickmemory; extendedkickmem_start = 0xf00000; break; case EXTENDED_ROM_CD32: extendedkickmemory = mapped_malloc (extendedkickmem_size, _T("rom_e0")); extendedkickmem_bank.baseaddr = extendedkickmemory; extendedkickmem_start = 0xe00000; break; } if (extendedkickmemory) { read_kickstart (f, extendedkickmemory, extendedkickmem_size, 0, 1); extendedkickmem_mask = extendedkickmem_size - 1; ret = true; } } zfile_fclose (f); return ret; } static int patch_shapeshifter (uae_u8 *kickmemory) { /* Patch Kickstart ROM for ShapeShifter - from Christian Bauer. * Changes 'lea $400,a0' and 'lea $1000,a0' to 'lea $3000,a0' for * ShapeShifter compatability. */ int i, patched = 0; uae_u8 kickshift1[] = { 0x41, 0xf8, 0x04, 0x00 }; uae_u8 kickshift2[] = { 0x41, 0xf8, 0x10, 0x00 }; uae_u8 kickshift3[] = { 0x43, 0xf8, 0x04, 0x00 }; for (i = 0x200; i < 0x300; i++) { if (!memcmp (kickmemory + i, kickshift1, sizeof (kickshift1)) || !memcmp (kickmemory + i, kickshift2, sizeof (kickshift2)) || !memcmp (kickmemory + i, kickshift3, sizeof (kickshift3))) { kickmemory[i + 2] = 0x30; write_log (_T("Kickstart KickShifted @%04X\n"), i); patched++; } } return patched; } /* disable incompatible drivers */ static int patch_residents (uae_u8 *kickmemory, int size) { int i, j, patched = 0; uae_char *residents[] = { "NCR scsi.device", 0 }; // "scsi.device", "carddisk.device", "card.resource" }; uaecptr base = size == 524288 ? 0xf80000 : 0xfc0000; if (currprefs.cs_mbdmac == 2) residents[0] = NULL; for (i = 0; i < size - 100; i++) { if (kickmemory[i] == 0x4a && kickmemory[i + 1] == 0xfc) { uaecptr addr; addr = (kickmemory[i + 2] << 24) | (kickmemory[i + 3] << 16) | (kickmemory[i + 4] << 8) | (kickmemory[i + 5] << 0); if (addr != i + base) continue; addr = (kickmemory[i + 14] << 24) | (kickmemory[i + 15] << 16) | (kickmemory[i + 16] << 8) | (kickmemory[i + 17] << 0); if (addr >= base && addr < base + size) { j = 0; while (residents[j]) { if (!memcmp (residents[j], kickmemory + addr - base, strlen (residents[j]) + 1)) { TCHAR *s = au (residents[j]); write_log (_T("KSPatcher: '%s' at %08X disabled\n"), s, i + base); xfree (s); kickmemory[i] = 0x4b; /* destroy RTC_MATCHWORD */ patched++; break; } j++; } } } } return patched; } static void patch_kick (void) { int patched = 0; if (kickmem_size >= 524288 && currprefs.kickshifter) patched += patch_shapeshifter (kickmemory); patched += patch_residents (kickmemory, kickmem_size); if (extendedkickmemory) { patched += patch_residents (extendedkickmemory, extendedkickmem_size); if (patched) kickstart_fix_checksum (extendedkickmemory, extendedkickmem_size); } if (patched) kickstart_fix_checksum (kickmemory, kickmem_size); } extern unsigned char arosrom[]; extern unsigned int arosrom_len; extern int seriallog; static bool load_kickstart_replacement (void) { struct zfile *f; f = zfile_fopen_data (_T("aros.gz"), arosrom_len, arosrom); if (!f) return false; f = zfile_gunzip (f); if (!f) return false; kickmem_mask = 0x80000 - 1; kickmem_size = 0x80000; extendedkickmem_size = 0x80000; extendedkickmem_type = EXTENDED_ROM_KS; extendedkickmemory = mapped_malloc (extendedkickmem_size, _T("rom_e0")); extendedkickmem_bank.baseaddr = extendedkickmemory; read_kickstart (f, extendedkickmemory, extendedkickmem_size, 0, 1); extendedkickmem_mask = extendedkickmem_size - 1; read_kickstart (f, kickmemory, 0x80000, 1, 0); zfile_fclose (f); seriallog = -1; return true; } static int load_kickstart (void) { struct zfile *f; TCHAR tmprom[MAX_DPATH], tmprom2[MAX_DPATH]; int patched = 0; cloanto_rom = 0; if (!_tcscmp (currprefs.romfile, _T(":AROS"))) return load_kickstart_replacement (); f = read_rom_name (currprefs.romfile); _tcscpy (tmprom, currprefs.romfile); if (f == NULL) { _stprintf (tmprom2, _T("%s%s"), start_path_data, currprefs.romfile); f = rom_fopen (tmprom2, _T("rb"), ZFD_NORMAL); if (f == NULL) { _stprintf (currprefs.romfile, _T("%sroms/kick.rom"), start_path_data); f = rom_fopen (currprefs.romfile, _T("rb"), ZFD_NORMAL); if (f == NULL) { _stprintf (currprefs.romfile, _T("%skick.rom"), start_path_data); f = rom_fopen (currprefs.romfile, _T("rb"), ZFD_NORMAL); if (f == NULL) { _stprintf (currprefs.romfile, _T("%s../shared/rom/kick.rom"), start_path_data); f = rom_fopen (currprefs.romfile, _T("rb"), ZFD_NORMAL); if (f == NULL) { _stprintf (currprefs.romfile, _T("%s../System/rom/kick.rom"), start_path_data); f = rom_fopen (currprefs.romfile, _T("rb"), ZFD_NORMAL); if (f == NULL) f = read_rom_name_guess (tmprom); } } } } else { _tcscpy (currprefs.romfile, tmprom2); } } addkeydir (currprefs.romfile); if (f == NULL) /* still no luck */ goto err; if (f != NULL) { int filesize, size, maxsize; int kspos = 524288; int extpos = 0; maxsize = 524288; zfile_fseek (f, 0, SEEK_END); filesize = zfile_ftell (f); zfile_fseek (f, 0, SEEK_SET); if (filesize == 1760 * 512) { filesize = 262144; maxsize = 262144; } if (filesize == 524288 + 8) { /* GVP 0xf0 kickstart */ zfile_fseek (f, 8, SEEK_SET); } if (filesize >= 524288 * 2) { struct romdata *rd = getromdatabyzfile(f); zfile_fseek (f, kspos, SEEK_SET); } if (filesize >= 524288 * 4) { kspos = 524288 * 3; extpos = 0; zfile_fseek (f, kspos, SEEK_SET); } size = read_kickstart (f, kickmemory, maxsize, 1, 0); if (size == 0) goto err; kickmem_mask = size - 1; kickmem_size = size; if (filesize >= 524288 * 2 && !extendedkickmem_type) { extendedkickmem_size = 0x80000; if (currprefs.cs_cdtvcd || currprefs.cs_cdtvram) { extendedkickmem_type = EXTENDED_ROM_CDTV; extendedkickmem_size *= 2; extendedkickmemory = mapped_malloc (extendedkickmem_size, _T("rom_f0")); extendedkickmem_start = 0xf00000; } else { extendedkickmem_type = EXTENDED_ROM_KS; extendedkickmemory = mapped_malloc (extendedkickmem_size, _T("rom_e0")); extendedkickmem_start = 0xe00000; } extendedkickmem_bank.baseaddr = extendedkickmemory; zfile_fseek (f, extpos, SEEK_SET); read_kickstart (f, extendedkickmemory, extendedkickmem_size, 0, 1); extendedkickmem_mask = extendedkickmem_size - 1; } if (filesize > 524288 * 2) { extendedkickmem2_size = 524288 * 2; extendedkickmemory2 = mapped_malloc (extendedkickmem2_size, _T("rom_a8")); extendedkickmem2_bank.baseaddr = extendedkickmemory2; zfile_fseek (f, extpos + 524288, SEEK_SET); read_kickstart (f, extendedkickmemory2, 524288, 0, 1); zfile_fseek (f, extpos + 524288 * 2, SEEK_SET); read_kickstart (f, extendedkickmemory2 + 524288, 524288, 0, 1); extendedkickmem2_mask = extendedkickmem2_size - 1; extendedkickmem2_start = 0xa80000; } } #if defined(AMIGA) chk_sum: #endif kickstart_version = (kickmemory[12] << 8) | kickmemory[13]; if (kickstart_version == 0xffff) kickstart_version = 0; zfile_fclose (f); return 1; err: _tcscpy (currprefs.romfile, tmprom); zfile_fclose (f); return 0; } #ifndef NATMEM_OFFSET uae_u8 *mapped_malloc (size_t s, const TCHAR *file) { return xmalloc (uae_u8, s); } void mapped_free (uae_u8 *p) { xfree (p); } #else #ifdef FSUAE #include #else #include #include #include #include #endif shmpiece *shm_start; static void dumplist (void) { shmpiece *x = shm_start; write_log (_T("Start Dump:\n")); while (x) { write_log (_T("this=%p,Native %p,id %d,prev=%p,next=%p,size=0x%08x\n"), x, x->native_address, x->id, x->prev, x->next, x->size); x = x->next; } write_log (_T("End Dump:\n")); } static shmpiece *find_shmpiece (uae_u8 *base, bool safe) { shmpiece *x = shm_start; while (x && x->native_address != base) x = x->next; if (!x) { if (safe || bogomem_aliasing) return 0; write_log (_T("NATMEM: Failure to find mapping at %08X, %p\n"), base - NATMEM_OFFSET, base); nocanbang (); return 0; } return x; } static void delete_shmmaps (uae_u32 start, uae_u32 size) { if (!needmman ()) return; while (size) { uae_u8 *base = mem_banks[bankindex (start)]->baseaddr; if (base) { shmpiece *x; //base = ((uae_u8*)NATMEM_OFFSET)+start; x = find_shmpiece (base, true); if (!x) return; if (x->size > size) { if (isdirectjit ()) write_log (_T("NATMEM WARNING: size mismatch mapping at %08x (size %08x, delsize %08x)\n"),start,x->size,size); size = x->size; } #if 0 dumplist (); nocanbang (); return; } #endif #ifdef FSUAE uae_shmdt (x->native_address); #else shmdt (x->native_address); #endif size -= x->size; start += x->size; if (x->next) x->next->prev = x->prev; /* remove this one from the list */ if (x->prev) x->prev->next = x->next; else shm_start = x->next; xfree (x); } else { size -= 0x10000; start += 0x10000; } } } static void add_shmmaps (uae_u32 start, addrbank *what) { shmpiece *x = shm_start; shmpiece *y; uae_u8 *base = what->baseaddr; if (!needmman ()) return; if (!base) return; x = find_shmpiece (base, false); if (!x) return; y = xmalloc (shmpiece, 1); *y = *x; base = ((uae_u8 *) NATMEM_OFFSET) + start; #ifdef FSUAE y->native_address = (uae_u8*)uae_shmat (y->id, base, 0); #else y->native_address = (uae_u8*)shmat (y->id, base, 0); #endif if (y->native_address == (void *) -1) { write_log (_T("NATMEM: Failure to map existing at %08x (%p)\n"), start, base); dumplist (); nocanbang (); return; } y->next = shm_start; y->prev = NULL; if (y->next) y->next->prev = y; shm_start = y; } uae_u8 *mapped_malloc (size_t s, const TCHAR *file) { int id; void *answer; shmpiece *x; static int recurse; if (!needmman ()) { nocanbang (); return xcalloc (uae_u8, s + 4); } #ifdef FSUAE id = uae_shmget (IPC_PRIVATE, s, 0x1ff, file); #else id = shmget (IPC_PRIVATE, s, 0x1ff, file); #endif if (id == -1) { uae_u8 *p; nocanbang (); if (recurse) return NULL; recurse++; p = mapped_malloc (s, file); recurse--; return p; } #ifdef FSUAE answer = uae_shmat (id, 0, 0); uae_shmctl (id, IPC_RMID, NULL); #else answer = shmat (id, 0, 0); shmctl (id, IPC_RMID, NULL); #endif if (answer != (void *) -1) { x = xmalloc (shmpiece, 1); x->native_address = (uae_u8*)answer; x->id = id; x->size = s; x->name = file; x->next = shm_start; x->prev = NULL; if (x->next) x->next->prev = x; shm_start = x; return (uae_u8*)answer; } if (recurse) return NULL; nocanbang (); recurse++; uae_u8 *r = mapped_malloc (s, file); recurse--; return r; } #endif static void init_mem_banks (void) { int i; for (i = 0; i < MEMORY_BANKS; i++) put_mem_bank (i << 16, &dummy_bank, 0); #ifdef NATMEM_OFFSET delete_shmmaps (0, 0xFFFF0000); #endif } static void allocate_memory (void) { bogomem_aliasing = false; /* emulate 0.5M+0.5M with 1M Agnus chip ram aliasing */ if (currprefs.chipmem_size == 0x80000 && currprefs.bogomem_size >= 0x80000 && (currprefs.chipset_mask & CSMASK_ECS_AGNUS) && !(currprefs.chipset_mask & CSMASK_AGA) && currprefs.cpu_model < 68020) { if ((allocated_chipmem != currprefs.chipmem_size || allocated_bogomem != currprefs.bogomem_size)) { int memsize1, memsize2; if (chipmemory) mapped_free (chipmemory); chipmemory = 0; if (bogomemory_allocated) mapped_free (bogomemory); bogomemory = 0; bogomemory_allocated = 0; memsize1 = allocated_chipmem = currprefs.chipmem_size; memsize2 = allocated_bogomem = currprefs.bogomem_size; chipmem_mask = allocated_chipmem - 1; chipmem_full_mask = allocated_chipmem * 2 - 1; chipmem_full_size = 0x80000 * 2; chipmemory = mapped_malloc (memsize1 + memsize2, _T("chip")); bogomemory = chipmemory + memsize1; bogomem_mask = allocated_bogomem - 1; if (chipmemory == 0) { write_log (_T("Fatal error: out of memory for chipmem.\n")); allocated_chipmem = 0; } else { need_hardreset = true; } } bogomem_aliasing = true; } if (allocated_chipmem != currprefs.chipmem_size) { int memsize; if (chipmemory) mapped_free (chipmemory); chipmemory = 0; if (currprefs.chipmem_size > 2 * 1024 * 1024) free_fastmemory (); memsize = allocated_chipmem = chipmem_full_size = currprefs.chipmem_size; chipmem_full_mask = chipmem_mask = allocated_chipmem - 1; if (!canbang && memsize < 0x100000) memsize = 0x100000; if (memsize > 0x100000 && memsize < 0x200000) memsize = 0x200000; chipmemory = mapped_malloc (memsize, _T("chip")); if (chipmemory == 0) { write_log (_T("Fatal error: out of memory for chipmem.\n")); allocated_chipmem = 0; } else { need_hardreset = true; if (memsize > allocated_chipmem) memset (chipmemory + allocated_chipmem, 0xff, memsize - allocated_chipmem); } currprefs.chipset_mask = changed_prefs.chipset_mask; chipmem_full_mask = allocated_chipmem - 1; if ((currprefs.chipset_mask & CSMASK_ECS_AGNUS) && !canbang) { if (allocated_chipmem < 0x100000) chipmem_full_mask = 0x100000 - 1; if (allocated_chipmem > 0x100000 && allocated_chipmem < 0x200000) chipmem_full_mask = chipmem_mask = 0x200000 - 1; } } if (allocated_bogomem != currprefs.bogomem_size) { if (!(allocated_bogomem == 0x200000 && currprefs.bogomem_size == 0x180000)) { if (bogomemory_allocated) mapped_free (bogomemory); bogomemory = 0; bogomemory_allocated = 0; allocated_bogomem = currprefs.bogomem_size; if (allocated_bogomem >= 0x180000) allocated_bogomem = 0x200000; bogomem_mask = allocated_bogomem - 1; if (allocated_bogomem) { bogomemory = mapped_malloc (allocated_bogomem, _T("bogo")); if (bogomemory == 0) { write_log (_T("Out of memory for bogomem.\n")); allocated_bogomem = 0; } } need_hardreset = true; } } if (allocated_a3000lmem != currprefs.mbresmem_low_size) { if (a3000lmemory) mapped_free (a3000lmemory); a3000lmemory = 0; allocated_a3000lmem = currprefs.mbresmem_low_size; a3000lmem_mask = allocated_a3000lmem - 1; a3000lmem_start = 0x08000000 - allocated_a3000lmem; if (allocated_a3000lmem) { a3000lmemory = mapped_malloc (allocated_a3000lmem, _T("ramsey_low")); if (a3000lmemory == 0) { write_log (_T("Out of memory for a3000lowmem.\n")); allocated_a3000lmem = 0; } } need_hardreset = true; } if (allocated_a3000hmem != currprefs.mbresmem_high_size) { if (a3000hmemory) mapped_free (a3000hmemory); a3000hmemory = 0; allocated_a3000hmem = currprefs.mbresmem_high_size; a3000hmem_mask = allocated_a3000hmem - 1; a3000hmem_start = 0x08000000; if (allocated_a3000hmem) { a3000hmemory = mapped_malloc (allocated_a3000hmem, _T("ramsey_high")); if (a3000hmemory == 0) { write_log (_T("Out of memory for a3000highmem.\n")); allocated_a3000hmem = 0; } } need_hardreset = true; } #ifdef CDTV if (allocated_cardmem != currprefs.cs_cdtvcard * 1024) { if (cardmemory) mapped_free (cardmemory); cardmemory = 0; allocated_cardmem = currprefs.cs_cdtvcard * 1024; cardmem_mask = allocated_cardmem - 1; if (allocated_cardmem) { cardmemory = mapped_malloc (allocated_cardmem, _T("rom_e0")); if (cardmemory == 0) { write_log (_T("Out of memory for cardmem.\n")); allocated_cardmem = 0; } } cdtv_loadcardmem(cardmemory, allocated_cardmem); } #endif if (allocated_custmem1 != currprefs.custom_memory_sizes[0]) { if (custmem1) mapped_free (custmem1); custmem1 = 0; allocated_custmem1 = currprefs.custom_memory_sizes[0]; custmem1_mask = allocated_custmem1 - 1; if (allocated_custmem1) { custmem1 = mapped_malloc (allocated_custmem1, _T("custmem1")); if (!custmem1) allocated_custmem1 = 0; } } if (allocated_custmem2 != currprefs.custom_memory_sizes[1]) { if (custmem2) mapped_free (custmem2); custmem2 = 0; allocated_custmem2 = currprefs.custom_memory_sizes[1]; custmem2_mask = allocated_custmem2 - 1; if (allocated_custmem2) { custmem2 = mapped_malloc (allocated_custmem2, _T("custmem2")); if (!custmem2) allocated_custmem2 = 0; } } if (savestate_state == STATE_RESTORE) { if (bootrom_filepos) { protect_roms (false); restore_ram (bootrom_filepos, rtarea); protect_roms (true); } restore_ram (chip_filepos, chipmemory); if (allocated_bogomem > 0) restore_ram (bogo_filepos, bogomemory); if (allocated_a3000lmem > 0) restore_ram (a3000lmem_filepos, a3000lmemory); if (allocated_a3000hmem > 0) restore_ram (a3000hmem_filepos, a3000hmemory); } chipmem_bank.baseaddr = chipmemory; #ifdef AGA chipmem_bank_ce2.baseaddr = chipmemory; #endif bogomem_bank.baseaddr = bogomemory; a3000lmem_bank.baseaddr = a3000lmemory; a3000hmem_bank.baseaddr = a3000hmemory; cardmem_bank.baseaddr = cardmemory; bootrom_filepos = 0; chip_filepos = 0; bogo_filepos = 0; a3000lmem_filepos = 0; a3000hmem_filepos = 0; } static void fill_ce_banks (void) { int i; memset (ce_banktype, CE_MEMBANK_FAST, sizeof ce_banktype); // data cachable regions memset (ce_cachable, 0, sizeof ce_cachable); memset (ce_cachable + (0x00200000 >> 16), 1, currprefs.fastmem_size >> 16); memset (ce_cachable + (0x10000000 >> 16), 1, currprefs.z3fastmem_size >> 16); if (&get_mem_bank (0) == &chipmem_bank) { for (i = 0; i < (0x200000 >> 16); i++) ce_banktype[i] = CE_MEMBANK_CHIP; } if (!currprefs.cs_slowmemisfast) { for (i = (0xc00000 >> 16); i < (0xe00000 >> 16); i++) ce_banktype[i] = CE_MEMBANK_CHIP; } for (i = (0xd00000 >> 16); i < (0xe00000 >> 16); i++) ce_banktype[i] = CE_MEMBANK_CHIP; for (i = (0xa00000 >> 16); i < (0xc00000 >> 16); i++) { addrbank *b; ce_banktype[i] = CE_MEMBANK_CIA; b = &get_mem_bank (i << 16); if (b != &cia_bank) { ce_banktype[i] = CE_MEMBANK_FAST; ce_cachable[i] = 1; } } // CD32 ROM is 16-bit if (currprefs.cs_cd32cd) { for (i = (0xe00000 >> 16); i < (0xe80000 >> 16); i++) ce_banktype[i] = CE_MEMBANK_FAST16BIT; for (i = (0xf80000 >> 16); i <= (0xff0000 >> 16); i++) ce_banktype[i] = CE_MEMBANK_FAST16BIT; } if (currprefs.address_space_24) { for (i = 1; i < 256; i++) memcpy (&ce_banktype[i * 256], &ce_banktype[0], 256); } } void map_overlay (int chip) { int size; addrbank *cb; size = allocated_chipmem >= 0x180000 ? (allocated_chipmem >> 16) : 32; cb = &chipmem_bank; #ifdef AGA #if 0 if (currprefs.cpu_cycle_exact && currprefs.cpu_model >= 68020) cb = &chipmem_bank_ce2; #endif #endif if (chip) { map_banks (&dummy_bank, 0, 32, 0); if (!isdirectjit ()) { map_banks (cb, 0, size, allocated_chipmem); if ((currprefs.chipset_mask & CSMASK_ECS_AGNUS) && allocated_bogomem == 0) { int start = allocated_chipmem >> 16; if (allocated_chipmem < 0x100000) { int dummy = (0x100000 - allocated_chipmem) >> 16; map_banks (&chipmem_dummy_bank, start, dummy, 0); map_banks (&chipmem_dummy_bank, start + 16, dummy, 0); } else if (allocated_chipmem < 0x200000 && allocated_chipmem > 0x100000) { int dummy = (0x200000 - allocated_chipmem) >> 16; map_banks (&chipmem_dummy_bank, start, dummy, 0); } } } else { map_banks (cb, 0, allocated_chipmem >> 16, 0); } } else { addrbank *rb = NULL; if (size < 32) size = 32; cb = &get_mem_bank (0xf00000); if (!rb && cb && (cb->flags & ABFLAG_ROM) && get_word (0xf00000) == 0x1114) rb = cb; cb = &get_mem_bank (0xe00000); if (!rb && cb && (cb->flags & ABFLAG_ROM) && get_word (0xe00000) == 0x1114) rb = cb; if (!rb) rb = &kickmem_bank; map_banks (rb, 0, size, 0x80000); } fill_ce_banks (); if (!isrestore () && valid_address (regs.pc, 4)) m68k_setpc (m68k_getpc ()); } uae_s32 getz2size (struct uae_prefs *p) { ULONG start; start = p->fastmem_size; if (p->rtgmem_size && !p->rtgmem_type) { while (start & (p->rtgmem_size - 1) && start < 8 * 1024 * 1024) start += 1024 * 1024; if (start + p->rtgmem_size > 8 * 1024 * 1024) return -1; } start += p->rtgmem_size; return start; } ULONG getz2endaddr (void) { ULONG start; start = currprefs.fastmem_size; if (currprefs.rtgmem_size && !currprefs.rtgmem_type) { if (!start) start = 0x00200000; while (start & (currprefs.rtgmem_size - 1) && start < 4 * 1024 * 1024) start += 1024 * 1024; } return start + 2 * 1024 * 1024; } void memory_clear (void) { mem_hardreset = 0; if (savestate_state == STATE_RESTORE) return; if (chipmemory) memset (chipmemory, 0, allocated_chipmem); if (bogomemory) memset (bogomemory, 0, allocated_bogomem); if (a3000lmemory) memset (a3000lmemory, 0, allocated_a3000lmem); if (a3000hmemory) memset (a3000hmemory, 0, allocated_a3000hmem); expansion_clear (); } void memory_reset (void) { int bnk, bnk_end; bool gayleorfatgary; need_hardreset = false; /* Use changed_prefs, as m68k_reset is called later. */ if (last_address_space_24 != changed_prefs.address_space_24) need_hardreset = true; last_address_space_24 = changed_prefs.address_space_24; if (mem_hardreset > 2) memory_init (); be_cnt = 0; currprefs.chipmem_size = changed_prefs.chipmem_size; currprefs.bogomem_size = changed_prefs.bogomem_size; currprefs.mbresmem_low_size = changed_prefs.mbresmem_low_size; currprefs.mbresmem_high_size = changed_prefs.mbresmem_high_size; currprefs.cs_ksmirror_e0 = changed_prefs.cs_ksmirror_e0; currprefs.cs_ksmirror_a8 = changed_prefs.cs_ksmirror_a8; currprefs.cs_ciaoverlay = changed_prefs.cs_ciaoverlay; currprefs.cs_cdtvram = changed_prefs.cs_cdtvram; currprefs.cs_cdtvcard = changed_prefs.cs_cdtvcard; currprefs.cs_a1000ram = changed_prefs.cs_a1000ram; currprefs.cs_ide = changed_prefs.cs_ide; currprefs.cs_fatgaryrev = changed_prefs.cs_fatgaryrev; currprefs.cs_ramseyrev = changed_prefs.cs_ramseyrev; gayleorfatgary = (currprefs.chipset_mask & CSMASK_AGA) || currprefs.cs_pcmcia || currprefs.cs_ide > 0 || currprefs.cs_mbdmac; init_mem_banks (); allocate_memory (); chipmem_setindirect (); if (mem_hardreset > 1 || _tcscmp (currprefs.romfile, changed_prefs.romfile) != 0 || _tcscmp (currprefs.romextfile, changed_prefs.romextfile) != 0) { protect_roms (false); write_log (_T("ROM loader.. (%s)\n"), currprefs.romfile); kickstart_rom = 1; a1000_handle_kickstart (0); xfree (a1000_bootrom); a1000_bootrom = 0; a1000_kickstart_mode = 0; memcpy (currprefs.romfile, changed_prefs.romfile, sizeof currprefs.romfile); memcpy (currprefs.romextfile, changed_prefs.romextfile, sizeof currprefs.romextfile); need_hardreset = true; mapped_free (extendedkickmemory); extendedkickmemory = 0; extendedkickmem_size = 0; extendedkickmemory2 = 0; extendedkickmem2_size = 0; extendedkickmem_type = 0; load_extendedkickstart (currprefs.romextfile, 0); load_extendedkickstart (currprefs.romextfile2, EXTENDED_ROM_CDTV); kickmem_mask = 524288 - 1; if (!load_kickstart ()) { if (_tcslen (currprefs.romfile) > 0) { write_log (_T("Failed to open '%s'\n"), currprefs.romfile); notify_user (NUMSG_NOROM); } load_kickstart_replacement (); } else { struct romdata *rd = getromdatabydata (kickmemory, kickmem_size); if (rd) { write_log (_T("Known ROM '%s' loaded\n"), rd->name); if ((rd->cpu & 3) == 3 && changed_prefs.cpu_model != 68030) { notify_user (NUMSG_KS68030); uae_restart (-1, NULL); } else if ((rd->cpu & 3) == 1 && changed_prefs.cpu_model < 68020) { notify_user (NUMSG_KS68EC020); uae_restart (-1, NULL); } else if ((rd->cpu & 3) == 2 && (changed_prefs.cpu_model < 68020 || changed_prefs.address_space_24)) { notify_user (NUMSG_KS68020); uae_restart (-1, NULL); } if (rd->cloanto) cloanto_rom = 1; kickstart_rom = 0; if ((rd->type & (ROMTYPE_SPECIALKICK | ROMTYPE_KICK)) == ROMTYPE_KICK) kickstart_rom = 1; if ((rd->cpu & 4) && currprefs.cs_compatible) { /* A4000 ROM = need ramsey, gary and ide */ if (currprefs.cs_ramseyrev < 0) changed_prefs.cs_ramseyrev = currprefs.cs_ramseyrev = 0x0f; changed_prefs.cs_fatgaryrev = currprefs.cs_fatgaryrev = 0; if (currprefs.cs_ide != IDE_A4000) changed_prefs.cs_ide = currprefs.cs_ide = -1; } } else { write_log (_T("Unknown ROM '%s' loaded\n"), currprefs.romfile); } } patch_kick (); write_log (_T("ROM loader end\n")); protect_roms (true); } if ((cloanto_rom || extendedkickmem_size) && currprefs.maprom && currprefs.maprom < 0x01000000) { currprefs.maprom = changed_prefs.maprom = 0x00a80000; if (extendedkickmem2_size) // can't do if 2M ROM currprefs.maprom = changed_prefs.maprom = 0; } map_banks (&custom_bank, 0xC0, 0xE0 - 0xC0, 0); map_banks (&cia_bank, 0xA0, 32, 0); if (!currprefs.cs_a1000ram) /* D80000 - DDFFFF not mapped (A1000 = custom chips) */ map_banks (&dummy_bank, 0xD8, 6, 0); /* map "nothing" to 0x200000 - 0x9FFFFF (0xBEFFFF if Gayle or Fat Gary) */ bnk = allocated_chipmem >> 16; if (bnk < 0x20 + (currprefs.fastmem_size >> 16)) bnk = 0x20 + (currprefs.fastmem_size >> 16); bnk_end = gayleorfatgary ? 0xBF : 0xA0; map_banks (&dummy_bank, bnk, bnk_end - bnk, 0); if (gayleorfatgary) { // a3000 or a4000 = custom chips from 0xc0 to 0xd0 if (currprefs.cs_ide == IDE_A4000 || currprefs.cs_mbdmac) map_banks (&dummy_bank, 0xd0, 8, 0); else map_banks (&dummy_bank, 0xc0, 0xd8 - 0xc0, 0); } if (bogomemory != 0) { int t = currprefs.bogomem_size >> 16; if (t > 0x1C) t = 0x1C; if (t > 0x18 && ((currprefs.chipset_mask & CSMASK_AGA) || (currprefs.cpu_model >= 68020 && !currprefs.address_space_24))) t = 0x18; map_banks (&bogomem_bank, 0xC0, t, 0); } if (currprefs.cs_ide || currprefs.cs_pcmcia) { if (currprefs.cs_ide == IDE_A600A1200 || currprefs.cs_pcmcia) { map_banks (&gayle_bank, 0xD8, 6, 0); map_banks (&gayle2_bank, 0xDD, 2, 0); } gayle_map_pcmcia (); if (currprefs.cs_ide == IDE_A4000 || currprefs.cs_mbdmac == 2) map_banks (&gayle_bank, 0xDD, 1, 0); if (currprefs.cs_ide < 0 && !currprefs.cs_pcmcia) map_banks (&gayle_bank, 0xD8, 6, 0); if (currprefs.cs_ide < 0) map_banks (&gayle_bank, 0xDD, 1, 0); } if (currprefs.cs_rtc || currprefs.cs_cdtvram) map_banks (&clock_bank, 0xDC, 1, 0); else if (currprefs.cs_ksmirror_a8 || currprefs.cs_ide > 0 || currprefs.cs_pcmcia) map_banks (&clock_bank, 0xDC, 1, 0); /* none clock */ if (currprefs.cs_fatgaryrev >= 0 || currprefs.cs_ramseyrev >= 0) map_banks (&mbres_bank, 0xDE, 1, 0); #ifdef CD32 if (currprefs.cs_cd32c2p || currprefs.cs_cd32cd || currprefs.cs_cd32nvram) { map_banks (&akiko_bank, AKIKO_BASE >> 16, 1, 0); map_banks (&gayle2_bank, 0xDD, 2, 0); } #endif #ifdef CDTV if (currprefs.cs_cdtvcd) cdtv_check_banks (); #endif #ifdef A2091 if (currprefs.cs_mbdmac == 1) a3000scsi_reset (); #endif if (a3000lmemory != 0) map_banks (&a3000lmem_bank, a3000lmem_start >> 16, allocated_a3000lmem >> 16, 0); if (a3000hmemory != 0) map_banks (&a3000hmem_bank, a3000hmem_start >> 16, allocated_a3000hmem >> 16, 0); #ifdef CDTV if (cardmemory != 0) map_banks (&cardmem_bank, cardmem_start >> 16, allocated_cardmem >> 16, 0); #endif map_banks (&kickmem_bank, 0xF8, 8, 0); if (currprefs.maprom) map_banks (&kickram_bank, currprefs.maprom >> 16, extendedkickmem2_size ? 32 : (extendedkickmem_size ? 16 : 8), 0); /* map beta Kickstarts at 0x200000/0xC00000/0xF00000 */ if (kickmemory[0] == 0x11 && kickmemory[2] == 0x4e && kickmemory[3] == 0xf9 && kickmemory[4] == 0x00) { uae_u32 addr = kickmemory[5]; if (addr == 0x20 && currprefs.chipmem_size <= 0x200000 && currprefs.fastmem_size == 0) map_banks (&kickmem_bank, addr, 8, 0); if (addr == 0xC0 && currprefs.bogomem_size == 0) map_banks (&kickmem_bank, addr, 8, 0); if (addr == 0xF0) map_banks (&kickmem_bank, addr, 8, 0); } if (a1000_bootrom) a1000_handle_kickstart (1); #ifdef AUTOCONFIG map_banks (&expamem_bank, 0xE8, 1, 0); #endif if (a3000_f0) map_banks (&extendedkickmem_bank, 0xf0, 1, 0); /* Map the chipmem into all of the lower 8MB */ map_overlay (1); switch (extendedkickmem_type) { case EXTENDED_ROM_KS: map_banks (&extendedkickmem_bank, 0xE0, 8, 0); break; #ifdef CDTV case EXTENDED_ROM_CDTV: map_banks (&extendedkickmem_bank, 0xF0, extendedkickmem_size == 2 * 524288 ? 16 : 8, 0); break; #endif #ifdef CD32 case EXTENDED_ROM_CD32: map_banks (&extendedkickmem_bank, 0xE0, 8, 0); break; #endif } #ifdef AUTOCONFIG if (need_uae_boot_rom ()) map_banks (&rtarea_bank, rtarea_base >> 16, 1, 0); #endif if ((cloanto_rom || currprefs.cs_ksmirror_e0) && (currprefs.maprom != 0xe00000) && !extendedkickmem_type) map_banks (&kickmem_bank, 0xE0, 8, 0); if (currprefs.cs_ksmirror_a8) { if (extendedkickmem2_size) { map_banks (&extendedkickmem2_bank, 0xa8, 16, 0); } else { struct romdata *rd = getromdatabypath (currprefs.cartfile); if (!rd || rd->id != 63) { if (extendedkickmem_type == EXTENDED_ROM_CD32 || extendedkickmem_type == EXTENDED_ROM_KS) map_banks (&extendedkickmem_bank, 0xb0, 8, 0); else map_banks (&kickmem_bank, 0xb0, 8, 0); map_banks (&kickmem_bank, 0xa8, 8, 0); } } } if (currprefs.custom_memory_sizes[0]) { map_banks (&custmem1_bank, currprefs.custom_memory_addrs[0] >> 16, currprefs.custom_memory_sizes[0] >> 16, 0); } if (currprefs.custom_memory_sizes[1]) { map_banks (&custmem2_bank, currprefs.custom_memory_addrs[1] >> 16, currprefs.custom_memory_sizes[1] >> 16, 0); } #ifdef ARCADIA if (is_arcadia_rom (currprefs.romextfile) == ARCADIA_BIOS) { if (_tcscmp (currprefs.romextfile, changed_prefs.romextfile) != 0) memcpy (currprefs.romextfile, changed_prefs.romextfile, sizeof currprefs.romextfile); if (_tcscmp (currprefs.cartfile, changed_prefs.cartfile) != 0) memcpy (currprefs.cartfile, changed_prefs.cartfile, sizeof currprefs.cartfile); arcadia_unmap (); is_arcadia_rom (currprefs.romextfile); is_arcadia_rom (currprefs.cartfile); arcadia_map_banks (); } #endif #ifdef ACTION_REPLAY #ifdef ARCADIA if (!arcadia_bios) { #endif action_replay_memory_reset (); #ifdef ARCADIA } #endif #endif if (mem_hardreset) { memory_clear (); } write_log (_T("memory init end\n")); } void memory_init (void) { init_mem_banks (); virtualdevice_init (); allocated_chipmem = 0; allocated_bogomem = 0; kickmemory = 0; extendedkickmemory = 0; extendedkickmem_size = 0; extendedkickmemory2 = 0; extendedkickmem2_size = 0; extendedkickmem_type = 0; chipmemory = 0; allocated_a3000lmem = allocated_a3000hmem = 0; a3000lmemory = a3000hmemory = 0; bogomemory = 0; cardmemory = 0; custmem1 = 0; custmem2 = 0; kickmemory = mapped_malloc (0x80000, _T("kick")); memset (kickmemory, 0, 0x80000); kickmem_bank.baseaddr = kickmemory; _tcscpy (currprefs.romfile, _T("")); currprefs.romextfile[0] = 0; #ifdef ACTION_REPLAY action_replay_unload (0); action_replay_load (); action_replay_init (1); #ifdef ACTION_REPLAY_HRTMON hrtmon_load (); #endif #endif } void memory_cleanup (void) { if (a3000lmemory) mapped_free (a3000lmemory); if (a3000hmemory) mapped_free (a3000hmemory); if (bogomemory) mapped_free (bogomemory); if (kickmemory) mapped_free (kickmemory); if (a1000_bootrom) xfree (a1000_bootrom); if (chipmemory) mapped_free (chipmemory); #ifdef CDTV if (cardmemory) { cdtv_savecardmem (cardmemory, allocated_cardmem); mapped_free (cardmemory); } #endif if (custmem1) mapped_free (custmem1); if (custmem2) mapped_free (custmem2); bogomemory = 0; kickmemory = 0; a3000lmemory = a3000hmemory = 0; a1000_bootrom = 0; a1000_kickstart_mode = 0; chipmemory = 0; cardmemory = 0; custmem1 = 0; custmem2 = 0; #ifdef ACTION_REPLAY action_replay_cleanup(); #endif #ifdef ARCADIA arcadia_unmap (); #endif } void memory_hardreset (int mode) { if (mode + 1 > mem_hardreset) mem_hardreset = mode + 1; } void map_banks (addrbank *bank, int start, int size, int realsize) { int bnr, old; unsigned long int hioffs = 0, endhioffs = 0x100; addrbank *orgbank = bank; uae_u32 realstart = start; //write_log (_T("MAP_BANK %04X0000 %d %s\n"), start, size, bank->name); old = debug_bankchange (-1); flush_icache (0, 3); /* Sure don't want to keep any old mappings around! */ #ifdef NATMEM_OFFSET delete_shmmaps (start << 16, size << 16); #endif if (!realsize) realsize = size << 16; if ((size << 16) < realsize) { write_log (_T("Broken mapping, size=%x, realsize=%x\nStart is %x\n"), size, realsize, start); } #ifndef ADDRESS_SPACE_24BIT if (start >= 0x100) { int real_left = 0; for (bnr = start; bnr < start + size; bnr++) { if (!real_left) { realstart = bnr; real_left = realsize >> 16; #ifdef NATMEM_OFFSET add_shmmaps (realstart << 16, bank); #endif } put_mem_bank (bnr << 16, bank, realstart << 16); real_left--; } debug_bankchange (old); return; } #endif if (last_address_space_24) endhioffs = 0x10000; #ifdef ADDRESS_SPACE_24BIT endhioffs = 0x100; #endif for (hioffs = 0; hioffs < endhioffs; hioffs += 0x100) { int real_left = 0; for (bnr = start; bnr < start + size; bnr++) { if (!real_left) { realstart = bnr + hioffs; real_left = realsize >> 16; #ifdef NATMEM_OFFSET add_shmmaps (realstart << 16, bank); #endif } put_mem_bank ((bnr + hioffs) << 16, bank, realstart << 16); real_left--; } } debug_bankchange (old); fill_ce_banks (); } #ifdef SAVESTATE /* memory save/restore code */ uae_u8 *save_bootrom (int *len) { if (!uae_boot_rom) return 0; *len = uae_boot_rom_size; return rtarea; } uae_u8 *save_cram (int *len) { *len = allocated_chipmem; return chipmemory; } uae_u8 *save_bram (int *len) { *len = allocated_bogomem; return bogomemory; } uae_u8 *save_a3000lram (int *len) { *len = allocated_a3000lmem; return a3000lmemory; } uae_u8 *save_a3000hram (int *len) { *len = allocated_a3000hmem; return a3000hmemory; } void restore_bootrom (int len, size_t filepos) { bootrom_filepos = filepos; } void restore_cram (int len, size_t filepos) { chip_filepos = filepos; changed_prefs.chipmem_size = len; } void restore_bram (int len, size_t filepos) { bogo_filepos = filepos; changed_prefs.bogomem_size = len; } void restore_a3000lram (int len, size_t filepos) { a3000lmem_filepos = filepos; changed_prefs.mbresmem_low_size = len; } void restore_a3000hram (int len, size_t filepos) { a3000hmem_filepos = filepos; changed_prefs.mbresmem_high_size = len; } uae_u8 *restore_rom (uae_u8 *src) { uae_u32 crc32, mem_start, mem_size, mem_type, version; TCHAR *s, *romn; int i, crcdet; struct romlist *rl = romlist_getit (); mem_start = restore_u32 (); mem_size = restore_u32 (); mem_type = restore_u32 (); version = restore_u32 (); crc32 = restore_u32 (); romn = restore_string (); crcdet = 0; for (i = 0; i < romlist_count (); i++) { if (rl[i].rd->crc32 == crc32 && crc32) { if (zfile_exists (rl[i].path)) { switch (mem_type) { case 0: _tcsncpy (changed_prefs.romfile, rl[i].path, 255); break; case 1: _tcsncpy (changed_prefs.romextfile, rl[i].path, 255); break; } write_log (_T("ROM '%s' = '%s'\n"), romn, rl[i].path); crcdet = 1; } else { write_log (_T("ROM '%s' = '%s' invalid rom scanner path!"), romn, rl[i].path); } break; } } s = restore_string (); if (!crcdet) { if (zfile_exists (s)) { switch (mem_type) { case 0: _tcsncpy (changed_prefs.romfile, s, 255); break; case 1: _tcsncpy (changed_prefs.romextfile, s, 255); break; } write_log (_T("ROM detected (path) as '%s'\n"), s); crcdet = 1; } } xfree (s); if (!crcdet) write_log (_T("WARNING: ROM '%s' %d.%d (CRC32=%08x %08x-%08x) not found!\n"), romn, version >> 16, version & 0xffff, crc32, mem_start, mem_start + mem_size - 1); xfree (romn); return src; } uae_u8 *save_rom (int first, int *len, uae_u8 *dstptr) { static int count; uae_u8 *dst, *dstbak; uae_u8 *mem_real_start; uae_u32 version; TCHAR *path; int mem_start, mem_size, mem_type, saverom; int i; TCHAR tmpname[1000]; version = 0; saverom = 0; if (first) count = 0; for (;;) { mem_type = count; mem_size = 0; switch (count) { case 0: /* Kickstart ROM */ mem_start = 0xf80000; mem_real_start = kickmemory; mem_size = kickmem_size; path = currprefs.romfile; /* 256KB or 512KB ROM? */ for (i = 0; i < mem_size / 2 - 4; i++) { if (longget (i + mem_start) != longget (i + mem_start + mem_size / 2)) break; } if (i == mem_size / 2 - 4) { mem_size /= 2; mem_start += 262144; } version = longget (mem_start + 12); /* version+revision */ _stprintf (tmpname, _T("Kickstart %d.%d"), wordget (mem_start + 12), wordget (mem_start + 14)); break; case 1: /* Extended ROM */ if (!extendedkickmem_type) break; mem_start = extendedkickmem_start; mem_real_start = extendedkickmemory; mem_size = extendedkickmem_size; path = currprefs.romextfile; version = longget (mem_start + 12); /* version+revision */ if (version == 0xffffffff) version = longget (mem_start + 16); _stprintf (tmpname, _T("Extended")); break; default: return 0; } count++; if (mem_size) break; } if (dstptr) dstbak = dst = dstptr; else dstbak = dst = xmalloc (uae_u8, 4 + 4 + 4 + 4 + 4 + 256 + 256 + mem_size); save_u32 (mem_start); save_u32 (mem_size); save_u32 (mem_type); save_u32 (version); save_u32 (get_crc32 (mem_real_start, mem_size)); save_string (tmpname); save_string (path); if (saverom) { for (i = 0; i < mem_size; i++) *dst++ = byteget (mem_start + i); } *len = dst - dstbak; return dstbak; } #endif /* SAVESTATE */ /* memory helpers */ void memcpyha_safe (uaecptr dst, const uae_u8 *src, int size) { if (!addr_valid (_T("memcpyha"), dst, size)) return; while (size--) put_byte (dst++, *src++); } void memcpyha (uaecptr dst, const uae_u8 *src, int size) { while (size--) put_byte (dst++, *src++); } void memcpyah_safe (uae_u8 *dst, uaecptr src, int size) { if (!addr_valid (_T("memcpyah"), src, size)) return; while (size--) *dst++ = get_byte (src++); } void memcpyah (uae_u8 *dst, uaecptr src, int size) { while (size--) *dst++ = get_byte (src++); } uae_char *strcpyah_safe (uae_char *dst, uaecptr src, int maxsize) { uae_char *res = dst; uae_u8 b; dst[0] = 0; do { if (!addr_valid (_T("_tcscpyah"), src, 1)) return res; b = get_byte (src++); *dst++ = b; *dst = 0; maxsize--; if (maxsize <= 1) break; } while (b); return res; } uaecptr strcpyha_safe (uaecptr dst, const uae_char *src) { uaecptr res = dst; uae_u8 b; do { if (!addr_valid (_T("_tcscpyha"), dst, 1)) return res; b = *src++; put_byte (dst++, b); } while (b); return res; } #ifdef FSUAE int uae_get_memory_checksum() { uint32_t checksum = 0; int size; uint32_t *mem; mem = (uint32_t *) chipmemory; size = allocated_chipmem / 4; for (int i = 0; i < size; i++) { //checksum = (checksum + *mem) & 0x00ffffff; checksum += *mem; mem++; } mem = (uint32_t *) bogomemory; size = allocated_bogomem / 4; for (int i = 0; i < size; i++) { checksum += *mem; mem++; } return checksum; } #endif fs-uae-2.2.3+dfsg/src/statusline.cpp0000644000175000017500000001607112162366654017547 0ustar glaubitzglaubitz#include "sysconfig.h" #include "sysdeps.h" #include #include #include "options.h" #include "uae.h" #include "xwin.h" #include "gui.h" #include "custom.h" #include "drawing.h" #include "statusline.h" /* * Some code to put status information on the screen. */ void statusline_getpos (int *x, int *y, int width, int height) { if (currprefs.osd_pos.x >= 20000) { if (currprefs.osd_pos.x >= 30000) *y = width * (currprefs.osd_pos.x - 30000) / 1000; else *y = width - (width * (30000 - currprefs.osd_pos.y) / 1000); } else { if (currprefs.osd_pos.x >= 0) *x = currprefs.osd_pos.x; else *x = -currprefs.osd_pos.x + 1; } if (currprefs.osd_pos.y >= 20000) { if (currprefs.osd_pos.y >= 30000) *y = (height - TD_TOTAL_HEIGHT) * (currprefs.osd_pos.y - 30000) / 1000; else *y = (height - TD_TOTAL_HEIGHT) - ((height - TD_TOTAL_HEIGHT) * (30000 - currprefs.osd_pos.y) / 1000); } else { if (currprefs.osd_pos.y >= 0) *y = height - TD_TOTAL_HEIGHT - currprefs.osd_pos.y; else *y = -currprefs.osd_pos.y + 1; } } static const char *numbers = { /* ugly 0123456789CHD%+- */ "+++++++--++++-+++++++++++++++++-++++++++++++++++++++++++++++++++++++++++++++-++++++-++++----++---+--------------" "+xxxxx+--+xx+-+xxxxx++xxxxx++x+-+x++xxxxx++xxxxx++xxxxx++xxxxx++xxxxx++xxxx+-+x++x+-+xxx++-+xx+-+x---+----------" "+x+++x+--++x+-+++++x++++++x++x+++x++x++++++x++++++++++x++x+++x++x+++x++x++++-+x++x+-+x++x+--+x++x+--+x+----+++--" "+x+-+x+---+x+-+xxxxx++xxxxx++xxxxx++xxxxx++xxxxx+--++x+-+xxxxx++xxxxx++x+----+xxxx+-+x++x+----+x+--+xxx+--+xxx+-" "+x+++x+---+x+-+x++++++++++x++++++x++++++x++x+++x+--+x+--+x+++x++++++x++x++++-+x++x+-+x++x+---+x+x+--+x+----+++--" "+xxxxx+---+x+-+xxxxx++xxxxx+----+x++xxxxx++xxxxx+--+x+--+xxxxx++xxxxx++xxxx+-+x++x+-+xxx+---+x++xx--------------" "+++++++---+++-++++++++++++++----+++++++++++++++++--+++--++++++++++++++++++++-++++++-++++------------------------" }; STATIC_INLINE uae_u32 ledcolor (uae_u32 c, uae_u32 *rc, uae_u32 *gc, uae_u32 *bc, uae_u32 *a) { uae_u32 v = rc[(c >> 16) & 0xff] | gc[(c >> 8) & 0xff] | bc[(c >> 0) & 0xff]; if (a) v |= a[255 - ((c >> 24) & 0xff)]; return v; } static void write_tdnumber (uae_u8 *buf, int bpp, int x, int y, int num, uae_u32 c1, uae_u32 c2) { int j; const char *numptr; numptr = numbers + num * TD_NUM_WIDTH + NUMBERS_NUM * TD_NUM_WIDTH * y; for (j = 0; j < TD_NUM_WIDTH; j++) { if (*numptr == 'x') putpixel (buf, bpp, x + j, c1, 1); else if (*numptr == '+') putpixel (buf, bpp, x + j, c2, 0); numptr++; } } void draw_status_line_single (uae_u8 *buf, int bpp, int y, int totalwidth, uae_u32 *rc, uae_u32 *gc, uae_u32 *bc, uae_u32 *alpha) { int x_start, j, led, border; uae_u32 c1, c2, cb; c1 = ledcolor (0x00ffffff, rc, gc, bc, alpha); c2 = ledcolor (0x00000000, rc, gc, bc, alpha); cb = ledcolor (TD_BORDER, rc, gc, bc, alpha); if (td_pos & TD_RIGHT) x_start = totalwidth - TD_PADX - VISIBLE_LEDS * TD_WIDTH; else x_start = TD_PADX; for (led = 0; led < LED_MAX; led++) { int side, pos, num1 = -1, num2 = -1, num3 = -1, num4 = -1; int x, c, on = 0, am = 2; xcolnr on_rgb, on_rgb2, off_rgb, pen_rgb; int half = 0; if (!(currprefs.leds_on_screen_mask[picasso_on ? 1 : 0] & (1 << led))) continue; pen_rgb = c1; if (led >= LED_DF0 && led <= LED_DF3) { int pled = led - LED_DF0; int track = gui_data.drive_track[pled]; pos = 6 + pled; on_rgb = 0x00cc00; on_rgb2 = 0x006600; off_rgb = 0x003300; if (!gui_data.drive_disabled[pled]) { num1 = -1; num2 = track / 10; num3 = track % 10; on = gui_data.drive_motor[pled]; if (gui_data.drive_writing[pled]) { on_rgb = 0xcc0000; on_rgb2 = 0x880000; } half = gui_data.drive_side ? 1 : -1; if (gui_data.df[pled][0] == 0) pen_rgb = ledcolor (0x00aaaaaa, rc, gc, bc, alpha); } side = gui_data.drive_side; } else if (led == LED_POWER) { pos = 3; on_rgb = ((gui_data.powerled_brightness * 10 / 16) + 0x33) << 16; on = 1; off_rgb = 0x330000; } else if (led == LED_CD) { pos = 5; if (gui_data.cd >= 0) { on = gui_data.cd & (LED_CD_AUDIO | LED_CD_ACTIVE); on_rgb = (on & LED_CD_AUDIO) ? 0x00cc00 : 0x0000cc; if ((gui_data.cd & LED_CD_ACTIVE2) && !(gui_data.cd & LED_CD_AUDIO)) { on_rgb &= 0xfefefe; on_rgb >>= 1; } off_rgb = 0x000033; num1 = -1; num2 = 10; num3 = 12; } } else if (led == LED_HD) { pos = 4; if (gui_data.hd >= 0) { on = gui_data.hd; on_rgb = on == 2 ? 0xcc0000 : 0x0000cc; off_rgb = 0x000033; num1 = -1; num2 = 11; num3 = 12; } } else if (led == LED_FPS) { int fps = (gui_data.fps + 5) / 10; pos = 2; on_rgb = 0x000000; off_rgb = gui_data.fps_color ? 0xcccc00 : 0x000000; if (fps > 999) fps = 999; num1 = fps / 100; num2 = (fps - num1 * 100) / 10; num3 = fps % 10; am = 3; if (num1 == 0) am = 2; } else if (led == LED_CPU) { int idle = (gui_data.idle + 5) / 10; pos = 1; //on = framecnt && !picasso_on; on_rgb = 0xcc0000; off_rgb = 0x000000; num1 = idle / 100; num2 = (idle - num1 * 100) / 10; num3 = idle % 10; num4 = num1 == 0 ? 13 : -1; am = 3; } else if (led == LED_SND) { int snd = abs(gui_data.sndbuf + 5) / 10; if (snd > 99) snd = 99; pos = 0; on = gui_data.sndbuf_status; if (on < 3) { num1 = gui_data.sndbuf < 0 ? 15 : 14; num2 = snd / 10; num3 = snd % 10; } on_rgb = 0x000000; if (on < 0) on_rgb = 0xcccc00; // underflow else if (on == 2) on_rgb = 0xcc0000; // really big overflow else if (on == 1) on_rgb = 0x0000cc; // "normal" overflow off_rgb = 0x000000; am = 3; } else if (led == LED_MD && gui_data.drive_disabled[3]) { // DF3 reused as internal non-volatile ram led (cd32/cdtv) pos = 6 + 3; on = gui_data.md; on_rgb = on == 2 ? 0xcc0000 : 0x00cc00; off_rgb = 0x003300; num1 = -1; num2 = -1; num3 = -1; } else return; on_rgb |= 0x33000000; off_rgb |= 0x33000000; if (half > 0) { c = ledcolor (on ? (y >= TD_TOTAL_HEIGHT / 2 ? on_rgb2 : on_rgb) : off_rgb, rc, gc, bc, alpha); } else if (half < 0) { c = ledcolor (on ? (y < TD_TOTAL_HEIGHT / 2 ? on_rgb2 : on_rgb) : off_rgb, rc, gc, bc, alpha); } else { c = ledcolor (on ? on_rgb : off_rgb, rc, gc, bc, alpha); } border = 0; if (y == 0 || y == TD_TOTAL_HEIGHT - 1) { c = ledcolor (TD_BORDER, rc, gc, bc, alpha); border = 1; } x = x_start + pos * TD_WIDTH; if (!border) putpixel (buf, bpp, x - 1, cb, 0); for (j = 0; j < TD_LED_WIDTH; j++) putpixel (buf, bpp, x + j, c, 0); if (!border) putpixel (buf, bpp, x + j, cb, 0); if (y >= TD_PADY && y - TD_PADY < TD_NUM_HEIGHT) { if (num3 >= 0) { x += (TD_LED_WIDTH - am * TD_NUM_WIDTH) / 2; if (num1 > 0) { write_tdnumber (buf, bpp, x, y - TD_PADY, num1, pen_rgb, c2); x += TD_NUM_WIDTH; } write_tdnumber (buf, bpp, x, y - TD_PADY, num2, pen_rgb, c2); x += TD_NUM_WIDTH; write_tdnumber (buf, bpp, x, y - TD_PADY, num3, pen_rgb, c2); x += TD_NUM_WIDTH; if (num4 > 0) write_tdnumber (buf, bpp, x, y - TD_PADY, num4, pen_rgb, c2); } } } } fs-uae-2.2.3+dfsg/src/events.cpp0000755000175000017500000000655012162366655016665 0ustar glaubitzglaubitz/* * UAE - The Un*x Amiga Emulator * * Event stuff * * Copyright 1995-2002 Bernd Schmidt * Copyright 1995 Alessandro Bissacco * Copyright 2000-2012 Toni Wilen */ #include "sysconfig.h" #include "sysdeps.h" #include "options.h" #include "events.h" unsigned long int event_cycles, nextevent, currcycle; int is_syncline, is_syncline_end; long cycles_to_next_event; long max_cycles_to_next_event; long cycles_to_hsync_event; unsigned long start_cycles; frame_time_t vsyncmintime, vsyncmaxtime, vsyncwaittime; int vsynctimebase; void events_schedule (void) { int i; unsigned long int mintime = ~0L; for (i = 0; i < ev_max; i++) { if (eventtab[i].active) { unsigned long int eventtime = eventtab[i].evtime - currcycle; if (eventtime < mintime) mintime = eventtime; } } nextevent = currcycle + mintime; } void do_cycles_slow (unsigned long cycles_to_add) { if ((pissoff -= cycles_to_add) >= 0) return; cycles_to_add = -pissoff; pissoff = 0; while ((nextevent - currcycle) <= cycles_to_add) { int i; /* Keep only CPU emulation running while waiting for sync point. */ if (is_syncline) { if (!vblank_found_chipset) { if (is_syncline > 0) { int rpt = read_processor_time (); int v = rpt - vsyncmintime; int v2 = rpt - is_syncline_end; if (v > vsynctimebase || v < -vsynctimebase) { v = 0; } if (v < 0 && v2 < 0) { pissoff = pissoff_value; return; } } else if (is_syncline < 0) { int rpt = read_processor_time (); int v = rpt - is_syncline_end; if (v < 0) { pissoff = pissoff_value; return; } } } is_syncline = 0; } cycles_to_add -= nextevent - currcycle; currcycle = nextevent; for (i = 0; i < ev_max; i++) { if (eventtab[i].active && eventtab[i].evtime == currcycle) { (*eventtab[i].handler)(); } } events_schedule (); } currcycle += cycles_to_add; } void MISC_handler (void) { static bool dorecheck; bool recheck; int i; evt mintime; evt ct = get_cycles (); static int recursive; if (recursive) { dorecheck = true; return; } recursive++; eventtab[ev_misc].active = 0; recheck = true; while (recheck) { recheck = false; mintime = ~0L; for (i = 0; i < ev2_max; i++) { if (eventtab2[i].active) { if (eventtab2[i].evtime == ct) { eventtab2[i].active = false; eventtab2[i].handler (eventtab2[i].data); if (dorecheck || eventtab2[i].active) { recheck = true; dorecheck = false; } } else { evt eventtime = eventtab2[i].evtime - ct; if (eventtime < mintime) mintime = eventtime; } } } } if (mintime != ~0L) { eventtab[ev_misc].active = true; eventtab[ev_misc].oldcycles = ct; eventtab[ev_misc].evtime = ct + mintime; events_schedule (); } recursive--; } void event2_newevent_xx (int no, evt t, uae_u32 data, evfunc2 func) { evt et; static int next = ev2_misc; et = t + get_cycles (); if (no < 0) { no = next; for (;;) { if (!eventtab2[no].active) break; if (eventtab2[no].evtime == et && eventtab2[no].handler == func && eventtab2[no].data == data) break; no++; if (no == ev2_max) no = ev2_misc; if (no == next) { write_log (_T("out of event2's!\n")); return; } } next = no; } eventtab2[no].active = true; eventtab2[no].evtime = et; eventtab2[no].handler = func; eventtab2[no].data = data; MISC_handler (); } fs-uae-2.2.3+dfsg/Makefile0000644000175000017500000004553712162366654015532 0ustar glaubitzglaubitzinclude common.mk version = $(strip $(shell cat VERSION)) series = $(strip $(shell cat SERIES)) all: fs-uae mo cppflags = -DFSEMU -DFSUAE -D_FILE_OFFSET_BITS=64 ifeq ($(debug), 1) cppflags += -DDEBUG endif #ifeq ($(wildcard libfsemu), libfsemu) #libfsemu_dir = libfsemu #libfsemu/out/libfsemu.a: # make -C libfsemu arch=$(arch) #libfsemu-target: libfsemu/out/libfsemu.a #else #libfsemu_dir = ../libfsemu #libfsemu-target: #endif libfsemu_dir = libfsemu libfsemu-target: $(make) -C libfsemu debug=$(debug) devel=$(devel) optimize=$(optimize) \ android=$(android) #ifeq ($(wildcard libfs-capsimage), libfs-capsimage) #libfs-capsimage_dir = libfs-capsimage #libfs-capsimage/out/CAPSImg.dll: # make -C libfs-capsimage #libfs-capsimage-target: libfs-capsimage/out/CAPSImg.dll #else #libfs-capsimage_dir = ../libfs-capsimage #libfs-capsimage-target: #endif ifeq ($(android), 1) use_glib := 0 warnings = errors = -Werror=implicit-function-declaration -Werror=return-type cxxflags = $(warnings) $(errors) -Isrc/od-fs -Isrc/od-fs/include \ -Isrc/include -Igensrc -Isrc \ -I$(libfsemu_dir)/include \ -Wno-write-strings -fpermissive cflags = -std=c99 $(cxxflags) ldflags = libs = -L$(libfsemu_dir)/out -lfsemu -lpng -lz else use_glib := 1 use_freetype := 1 common_flags = -Isrc/od-fs -Isrc/od-fs/include \ -Isrc/include -Igensrc -Isrc \ `pkg-config --cflags glib-2.0 gthread-2.0 libpng` \ -I$(libfsemu_dir)/include \ -I$(libfsemu_dir)/src/lua \ `sdl-config --cflags` cflags = $(common_flags) -std=c99 $(CFLAGS) #cxxflags = $(common_flags) -fpermissive $(CXXFLAGS) cxxflags = $(common_flags) $(CXXFLAGS) ldflags = $(LDFLAGS) libs = -L$(libfsemu_dir)/out -lfsemu `sdl-config --libs` \ `pkg-config --libs libpng` -lz ifeq ($(devel), 1) warnings = -Wno-unused-variable -Wno-unused-function -Wno-write-strings \ -Wno-unused-but-set-variable errors = -Werror=implicit-function-declaration -Werror=return-type cflags += $(warnings) $(errors) cxxflags += $(warnings) $(errors) endif endif ifeq ($(use_glib), 1) libs += `pkg-config --libs glib-2.0 gthread-2.0` else ifeq ($(android), 1) else libs += -lrt -lpthread endif ifeq ($(use_freetype), 1) libs += `pkg-config --libs freetype2` endif profile_generate := 0 profile_use := 0 ifeq ($(optimize), 1) cflags += -O2 -ggdb cxxflags += -O2 -ggdb else ifneq ($(noflags), 1) cflags += -O0 -ggdb cxxflags += -O0 -ggdb endif ifeq ($(profile_generate), 1) cflags += -fprofile-generate cxxflags += -fprofile-generate ldflags += -fprofile-generate libs += -lgcov endif ifeq ($(profile_use), 1) cflags += -fprofile-use cxxflags += -fprofile-use endif ifeq ($(force_32bit),1) cflags += -m32 cxxflags += -m32 ldflags += -m32 endif #uae_warn = -Wno-unused-value -Wno-uninitialized -Wno-sign-compare #uae_warn += -fpermissive -Wno-unused-function -Wno-format #uae_warn += -Wmissing-braces -Wall -Wno-sign-compare uae_warn = -Wall -Wno-sign-compare generate = 0 ifeq ($(os), android) cppflags += -DANDROID cxxflags += libs += -lGLESv1_CM else ifeq ($(os), windows) cppflags += -DWINDOWS cxxflags += -U_WIN32 -UWIN32 libs += -lOpenGL32 -lGLU32 -lgdi32 -lWinmm -lOpenAL32 -lWs2_32 -lWininet ifeq ($(devel), 1) libs += -mno-windows endif else ifeq ($(os), macosx) uname_m := $(shell uname -m) ifneq ($(arch),) else ifneq ($(findstring i386,$(uname_m)),) arch = i386 else ifneq ($(findstring Power,$(uname_m)),) arch = ppc else arch = x86_64 endif cflags += -arch $(arch) cxxflags += -arch $(arch) ldflags += -arch $(arch) -headerpad_max_install_names cppflags += -DMACOSX libs += -framework OpenGL -framework Carbon -framework OpenAL else ifeq ($(os), freebsd) cppflags += -DFREEBSD libs += -lGL -lGLU -lopenal -lX11 -lcompat else ifeq ($(os), openbsd) cppflags += -DOPENBSD libs += -lGL -lGLU -lopenal -lX11 -lcompat else cppflags += -DLINUX ldflags += -Wa,--execstack libs += -lGL -lGLU -lopenal -ldl -lX11 generate = 0 endif ifneq ($(os), android) cppflags += -DUSE_SDL -DUSE_GLIB -DWITH_LUA endif objects = \ obj/fs-uae-config.o \ obj/fs-uae-input.o \ obj/fs-uae-joystick.o \ obj/fs-uae-keyboard.o \ obj/fs-uae-luascript.o \ obj/fs-uae-main.o \ obj/fs-uae-menu.o \ obj/fs-uae-mouse.o \ obj/fs-uae-paths.o \ obj/fs-uae-uae_config.o \ obj/fs-uae-version.o \ obj/fs-uae-video.o ifeq ($(os), windows) objects += obj/fs-uae.res endif uae_objects = \ obj/gensrc-blitfunc.o \ obj/gensrc-blittable.o \ obj/gensrc-cpudefs.o \ obj/gensrc-cpuemu_0.o \ obj/gensrc-cpuemu_11.o \ obj/gensrc-cpuemu_12.o \ obj/gensrc-cpuemu_20.o \ obj/gensrc-cpuemu_21.o \ obj/gensrc-cpuemu_22.o \ obj/gensrc-cpuemu_31.o \ obj/gensrc-cpustbl.o \ obj/a2091.o \ obj/akiko.o \ obj/amax.o \ obj/ar.o \ obj/arcadia.o \ obj/aros.rom.o \ obj/audio.o \ obj/autoconf.o \ obj/blitter.o \ obj/blkdev.o \ obj/blkdev_cdimage.o \ obj/bsdsocket.o \ obj/calc.o \ obj/cd32_fmv.o \ obj/cdrom.o \ obj/cdtv.o \ obj/cia.o \ obj/cfgfile.o \ obj/consolehook.o \ obj/cpummu.o \ obj/crc32.o \ obj/custom.o \ obj/debug.o \ obj/disk.o \ obj/diskutil.o \ obj/dongle.o \ obj/drawing.o \ obj/driveclick.o \ obj/enforcer.o \ obj/ersatz.o \ obj/events.o \ obj/expansion.o \ obj/fdi2raw.o \ obj/filesys.o \ obj/fpp.o \ obj/fsdb.o \ obj/fsusage.o \ obj/gayle.o \ obj/gfxutil.o \ obj/hardfile.o \ obj/hrtmon.rom.o \ obj/identify.o \ obj/inputrecord.o \ obj/isofs.o \ obj/keybuf.o \ obj/luascript.o \ obj/main.o \ obj/memory.o \ obj/missing.o \ obj/native2amiga.o \ obj/newcpu.o \ obj/ncr_scsi.o \ obj/readcpu.o \ obj/rommgr.o \ obj/savestate.o \ obj/scsi.o \ obj/scsiemul.o \ obj/specialmonitors.o \ obj/statusline.o \ obj/traps.o \ obj/uaeexe.o \ obj/uaelib.o \ obj/uaeresource.o \ obj/uaeserial.o \ obj/zfile.o \ obj/zfile_archive.o \ obj/jit-compemu.o \ obj/jit-compemu_fpp.o \ obj/jit-compemu_support.o \ obj/jit-compstbl.o \ obj/zip-archiver-unzip.o \ obj/dms-archiver-crc_csum.o \ obj/dms-archiver-getbits.o \ obj/dms-archiver-maketbl.o \ obj/dms-archiver-pfile.o \ obj/dms-archiver-tables.o \ obj/dms-archiver-u_deep.o \ obj/dms-archiver-u_heavy.o \ obj/dms-archiver-u_init.o \ obj/dms-archiver-u_medium.o \ obj/dms-archiver-u_quick.o \ obj/dms-archiver-u_rle.o \ obj/od-fs-audio.o \ obj/od-fs-bsdsocket_host.o \ obj/od-fs-blkdev-linux.o \ obj/od-fs-caps.o \ obj/od-fs-cda_play.o \ obj/od-fs-charset.o \ obj/od-fs-clock.o \ obj/od-fs-cdimage_stubs.o \ obj/od-fs-clipboard.o \ obj/od-fs-driveclick.o \ obj/od-fs-filesys_host.o \ obj/od-fs-fsdb_host.o \ obj/od-fs-hardfile_host.o \ obj/od-fs-input.o \ obj/od-fs-inputdevice.o \ obj/od-fs-keymap.o \ obj/od-fs-libamiga.o \ obj/od-fs-logging.o \ obj/od-fs-mman.o \ obj/od-fs-parser.o \ obj/od-fs-random.o \ obj/od-fs-roms.o \ obj/od-fs-picasso96.o \ obj/od-fs-serial_host.o \ obj/od-fs-stubs.o \ obj/od-fs-support.o \ obj/od-fs-util.o \ obj/od-fs-threading.o \ obj/od-fs-uae_host.o \ obj/od-fs-uaemisc.o \ obj/od-fs-version.o \ obj/od-fs-video.o ifeq ($(generate), 1) gensrc/genblitter: obj/genblitter.o obj/blitops.o obj/writelog.o $(cxx) $(cppflags) $(cxxflags) obj/genblitter.o obj/blitops.o \ obj/writelog.o -o gensrc/genblitter gensrc/gencpu: gensrc/cpudefs.cpp obj/gencpu.o obj/readcpu.o obj/missing.o \ gensrc/cpudefs.cpp $(cxx) $(cppflags) $(cxxflags) obj/gencpu.o obj/readcpu.o obj/missing.o \ gensrc/cpudefs.cpp -o gensrc/gencpu gensrc/genlinetoscr: $(cxx) $(cppflags) $(cxxflags) src/genlinetoscr.cpp -o gensrc/genlinetoscr gensrc/gencomp: src/jit/gencomp.cpp obj/readcpu.o obj/gen-cpudefs.o obj/missing.o obj/writelog.o $(cxx) $(cppflags) $(cxxflags) src/jit/gencomp.cpp obj/readcpu.o obj/gen-cpudefs.o obj/missing.o obj/writelog.o -o gensrc/gencomp gensrc/linetoscr.cpp: gensrc/genlinetoscr gensrc/genlinetoscr > gensrc/linetoscr.cpp gensrc/blit.h: gensrc/genblitter gensrc/genblitter i > gensrc/blit.h gensrc/blitfunc.cpp: gensrc/genblitter gensrc/blitfunc.h gensrc/genblitter f > gensrc/blitfunc.cpp gensrc/blitfunc.h: gensrc/genblitter gensrc/genblitter h > gensrc/blitfunc.h gensrc/blittable.cpp: gensrc/genblitter gensrc/blitfunc.h gensrc/genblitter t > gensrc/blittable.cpp gensrc/build68k: $(cxx) $(cppflags) $(cxxflags) src/build68k.cpp src/writelog.cpp -o gensrc/build68k gensrc/cpudefs.cpp: gensrc/build68k src/table68k ./gensrc/build68k < src/table68k > gensrc/cpudefs.cpp #python util/fix_tchar.py gensrc/cpudefs.cpp gensrc/cpuemu_0.cpp: gensrc/gencpu cd gensrc && ./gencpu --optimized-flags gensrc/cpustbl.cpp: gensrc/cpuemu_0.cpp gensrc/cputbl.h: gensrc/cpuemu_0.cpp gensrc/cpuemu_11.cpp: gensrc/cpuemu_0.cpp gensrc/cpuemu_12.cpp: gensrc/cpuemu_0.cpp gensrc/cpuemu_20.cpp: gensrc/cpuemu_0.cpp gensrc/cpuemu_21.cpp: gensrc/cpuemu_0.cpp gensrc/cpuemu_31.cpp: gensrc/cpuemu_0.cpp endif # Using GCC optimization level O0 instead of O2 for cpuemu*, since a bug # was found caused by the optimizer (where basically (1 ^ 0) & (1 ^ 0) was # evaluated to 0). This fixes Tower of Babel (IPF). obj/gensrc-cpuemu%.o: gensrc/cpuemu%.cpp $(cxx) $(cppflags) $(cxxflags) -O0 -c $< -o $@ obj/gensrc-%.o: gensrc/%.cpp $(cxx) $(cppflags) $(cxxflags) -c $< -o $@ obj/%.o: src/%.cpp $(cxx) $(cppflags) $(cxxflags) $(uae_warn) -c $< -o $@ obj/zip-archiver-%.o: src/archivers/zip/%.cpp $(cxx) $(cppflags) $(cxxflags) $(uae_warn) -c $< -o $@ obj/dms-archiver-%.o: src/archivers/dms/%.cpp $(cxx) $(cppflags) $(cxxflags) $(uae_warn) -c $< -o $@ obj/jit-%.o: src/jit/%.cpp $(cxx) $(cppflags) $(cxxflags) $(uae_warn) -c $< -o $@ obj/jit-compemu_support.o: src/jit/compemu_support.cpp $(cxx) $(cppflags) $(cxxflags) $(uae_warn) -fpermissive -c $< -o $@ obj/bsdsocket.o: src/bsdsocket.cpp $(cxx) $(cppflags) $(cxxflags) $(uae_warn) -fpermissive -c $< -o $@ obj/od-fs-%.o: src/od-fs/%.cpp $(cxx) $(cppflags) $(cxxflags) -c $< -o $@ obj/uae.a: gensrc/blit.h gensrc/linetoscr.cpp $(uae_objects) ifeq ($(os), macosx) rm -f $@ endif $(ar) cru $@ $(uae_objects) ifeq ($(os), macosx) ranlib $@ endif obj/fs-uae.res: src/fs-uae/fs-uae.rc windres $< -O coff -o $@ obj/fs-uae-%.o: src/fs-uae/%.c $(cc) $(cppflags) $(cflags) -c $< -o $@ #ifeq ($(os), windows) #out/CAPSImg.dll: # cp $(libfs-capsimage_dir)/out/CAPSImg.dll out/ #run_deps: out/CAPSImg.dll #else #run_deps: #endif share/locale/%/LC_MESSAGES/fs-uae.mo: po/%.po mkdir -p share/locale/$*/LC_MESSAGES msgfmt --verbose $< -o $@ catalogs = \ share/locale/cs/LC_MESSAGES/fs-uae.mo \ share/locale/de/LC_MESSAGES/fs-uae.mo \ share/locale/es/LC_MESSAGES/fs-uae.mo \ share/locale/fi/LC_MESSAGES/fs-uae.mo \ share/locale/fr/LC_MESSAGES/fs-uae.mo \ share/locale/it/LC_MESSAGES/fs-uae.mo \ share/locale/nb/LC_MESSAGES/fs-uae.mo \ share/locale/pl/LC_MESSAGES/fs-uae.mo \ share/locale/pt/LC_MESSAGES/fs-uae.mo \ share/locale/sr/LC_MESSAGES/fs-uae.mo \ share/locale/tr/LC_MESSAGES/fs-uae.mo mo: $(catalogs) fs-uae: libfsemu-target obj/uae.a $(objects) rm -f out/fs-uae $(cxx) $(ldflags) $(objects) obj/uae.a $(libs) -o fs-uae dist_dir := fs-uae-$(version) dist_dir_launcher := fs-uae-launcher-$(version) distdir-launcher-base: rm -Rf $(dist_dir_launcher)/* mkdir -p $(dist_dir_launcher) cp -a launcher/fs_uae_launcher $(dist_dir_launcher)/ find $(dist_dir_launcher) -name "*.pyc" -delete cp -a launcher/README $(dist_dir_launcher)/ cp -a launcher/COPYING $(dist_dir_launcher)/ cp -a launcher/fs-uae-launcher.py $(dist_dir_launcher)/ cp -a launcher/Makefile.mk $(dist_dir_launcher)/ cp -a launcher/setup.py $(dist_dir_launcher)/ cp -a launcher/setup_py2exe.py $(dist_dir_launcher)/ cp -a launcher/setup_py2app.py $(dist_dir_launcher)/ mkdir -p $(dist_dir_launcher)/debian cp -a launcher/debian/changelog $(dist_dir_launcher)/debian/ cp -a launcher/debian/compat $(dist_dir_launcher)/debian/ cp -a launcher/debian/control $(dist_dir_launcher)/debian/ cp -a launcher/debian/copyright $(dist_dir_launcher)/debian/ cp -a launcher/debian/rules $(dist_dir_launcher)/debian/ cp -a launcher/debian/source $(dist_dir_launcher)/debian/ mkdir -p $(dist_dir_launcher)/scripts cp -a launcher/scripts/fs-uae-launcher $(dist_dir_launcher)/scripts/ cp -a launcher/fs-uae-launcher.spec $(dist_dir_launcher) cp -a launcher/share $(dist_dir_launcher)/ find $(dist_dir_launcher)/share -name *.mo -delete mkdir $(dist_dir_launcher)/po/ cp -a launcher/po/*.po $(dist_dir_launcher)/po/ cp -a launcher/po/update.py $(dist_dir_launcher)/po/ distdir-base: distdir-launcher-base rm -Rf $(dist_dir)/* mkdir -p $(dist_dir) cp -a $(dist_dir_launcher) $(dist_dir)/launcher mkdir -p $(dist_dir)/obj touch $(dist_dir)/obj/.dummy mkdir -p $(dist_dir)/out touch $(dist_dir)/out/.dummy cp -a INSTALL README COPYING VERSION SERIES ChangeLog $(dist_dir) cp -a common.mk targets.mk $(dist_dir) # windows.mk macosx.mk debian.mk cp -a Makefile fs-uae.spec example.conf $(dist_dir) cp -a src share licenses $(dist_dir) rm -Rf $(dist_dir)/src/od-win32 rm -Rf $(dist_dir)/src/prowizard rm -Rf $(dist_dir)/src/archivers/lha rm -Rf $(dist_dir)/src/archivers/lzx rm -Rf $(dist_dir)/src/archivers/xfd rm -Rf $(dist_dir)/src/jit2 rm -f $(dist_dir)/src/akiko2.cpp rm -f $(dist_dir)/src/custom2.cpp find $(dist_dir)/share -name *.mo -delete mkdir -p $(dist_dir)/gensrc cp -a gensrc/*.cpp gensrc/*.h $(dist_dir)/gensrc mkdir -p $(dist_dir)/libfsemu cp -a $(libfsemu_dir)/COPYING $(dist_dir)/libfsemu cp -a $(libfsemu_dir)/README $(dist_dir)/libfsemu cp -a $(libfsemu_dir)/Makefile $(dist_dir)/libfsemu cp -a $(libfsemu_dir)/include $(dist_dir)/libfsemu cp -a $(libfsemu_dir)/src $(dist_dir)/libfsemu mkdir -p $(dist_dir)/libfsemu/obj touch $(dist_dir)/libfsemu/obj/.dummy mkdir -p $(dist_dir)/libfsemu/out touch $(dist_dir)/libfsemu/out/.dummy #mkdir -p $(dist_dir)/libfs-capsimage #cp -a ../libfs-capsimage/Makefile $(dist_dir)/libfs-capsimage #cp -a ../libfs-capsimage/CAPSImage $(dist_dir)/libfs-capsimage #find $(dist_dir)/libfs-capsimage -name *.o -delete #rm -f $(dist_dir)/libfs-capsimage/CAPSImage/config.h #rm -f $(dist_dir)/libfs-capsimage/CAPSImage/config.log #rm -f $(dist_dir)/libfs-capsimage/CAPSImage/config.cache #rm -f $(dist_dir)/libfs-capsimage/CAPSImage/config.status #cp -a ../libfs-capsimage/*.txt $(dist_dir)/libfs-capsimage #mkdir -p $(dist_dir)/libfs-capsimage/out mkdir -p $(dist_dir)/po cp -a po/*.po $(dist_dir)/po/ cp -a po/update.py $(dist_dir)/po/update.py cp -a po/update.sh $(dist_dir)/po/update.sh mkdir -p $(dist_dir)/doc cp -a doc/Default.fs-uae $(dist_dir)/doc/ mkdir -p $(dist_dir)/macosx cp -a macosx/Makefile $(dist_dir)/macosx/ cp -a macosx/fix-app.py $(dist_dir)/macosx/ cp -a macosx/template $(dist_dir)/macosx/ mkdir -p $(dist_dir)/windows cp -a windows/Makefile $(dist_dir)/windows/ cp -a windows/replace_icon.py $(dist_dir)/windows/ cp -a windows/fs-uae-setup.iss $(dist_dir)/windows/ mkdir -p $(dist_dir)/debian cp -a debian/changelog $(dist_dir)/debian/ cp -a debian/compat $(dist_dir)/debian/ cp -a debian/control $(dist_dir)/debian/ cp -a debian/copyright $(dist_dir)/debian/ cp -a debian/rules $(dist_dir)/debian/ cp -a debian/source $(dist_dir)/debian/ mkdir -p $(dist_dir)/server cp -a server/fs_uae_netplay_server $(dist_dir)/server/ find $(dist_dir)/server -name "*.pyc" -delete cp -a server/COPYING $(dist_dir)/server/ cp -a server/README $(dist_dir)/server/ cp -a server/setup.py $(dist_dir)/server/ mkdir -p $(dist_dir)/server/debian cp -a server/debian/changelog $(dist_dir)/server/debian/ cp -a server/debian/compat $(dist_dir)/server/debian/ cp -a server/debian/control $(dist_dir)/server/debian/ cp -a server/debian/copyright $(dist_dir)/server/debian/ cp -a server/debian/rules $(dist_dir)/server/debian/ cp -a server/debian/preinst $(dist_dir)/server/debian/ cp -a server/debian/source $(dist_dir)/server/debian/ cp -a server/debian/*.init $(dist_dir)/server/debian/ cp -a server/debian/*.default $(dist_dir)/server/debian/ mkdir -p $(dist_dir)/server/scripts cp -a server/scripts/fs-uae-netplay-server $(dist_dir)/server/scripts/ cp -a server/scripts/fs-uae-game-server $(dist_dir)/server/scripts/ #mkdir -p $(dist_dir)/launcher #cp -a launcher/fs_uae_launcher $(dist_dir)/launcher/ #find $(dist_dir)/launcher -name "*.pyc" -delete #cp -a launcher/README $(dist_dir)/launcher/ #cp -a launcher/COPYING $(dist_dir)/launcher/ #cp -a launcher/fs-uae-launcher.py $(dist_dir)/launcher/ #cp -a launcher/Makefile.mk $(dist_dir)/launcher/ #cp -a launcher/setup.py $(dist_dir)/launcher/ #cp -a launcher/setup_py2exe.py $(dist_dir)/launcher/ #cp -a launcher/setup_py2app.py $(dist_dir)/launcher/ #mkdir -p $(dist_dir)/launcher/debian #cp -a launcher/debian/changelog $(dist_dir)/launcher/debian/ #cp -a launcher/debian/compat $(dist_dir)/launcher/debian/ #cp -a launcher/debian/control $(dist_dir)/launcher/debian/ #cp -a launcher/debian/copyright $(dist_dir)/launcher/debian/ #cp -a launcher/debian/rules $(dist_dir)/launcher/debian/ #cp -a launcher/debian/source $(dist_dir)/launcher/debian/ #mkdir -p $(dist_dir)/launcher/scripts #cp -a launcher/scripts/fs-uae-launcher $(dist_dir)/launcher/scripts/ #cp -a launcher/fs-uae-launcher.spec $(dist_dir)/launcher/ #cp -a launcher/share $(dist_dir)/launcher/ mkdir -p $(dist_dir)/util #cp -a util/fix_64_bit.py $(dist_dir)/util/ #cd $(dist_dir) && python util/fix_64_bit.py cp -a util/update-version.py $(dist_dir)/util/ mkdir -p $(dist_dir)/icon cp icon/fs-uae.ico $(dist_dir)/icon/ cp icon/fs-uae.icns $(dist_dir)/icon/ cp icon/fs-uae-launcher.ico $(dist_dir)/icon/ cp icon/fs-uae-launcher.icns $(dist_dir)/icon/ cp icon/fs-uae-config.icns $(dist_dir)/icon/ find $(dist_dir) -name *~ -delete distdir: distdir-base cd $(dist_dir) && python util/update-version.py python util/update-version.py $(dist_dir_launcher)/fs-uae-launcher.spec python util/update-version.py $(dist_dir_launcher)/setup.py python util/update-version.py \ $(dist_dir_launcher)/fs_uae_launcher/Version.py \ --update-series python util/update-version.py $(dist_dir_launcher)/debian/changelog distcheck: distdir cd $(dist_dir) && $(make) po-dist: mkdir -p dist/$(series)/po/fs-uae cp po/*.po dist/$(series)/po/fs-uae/ mkdir -p dist/$(series)/po/fs-uae-launcher cp launcher/po/*.po dist/$(series)/po/fs-uae-launcher/ dist: distdir pubfiles-source po-dist find $(dist_dir_launcher) -exec touch \{\} \; find $(dist_dir) -exec touch \{\} \; tar zcfv fs-uae-launcher-$(version).tar.gz $(dist_dir_launcher) tar zcfv fs-uae-$(version).tar.gz $(dist_dir) mkdir -p dist/$(series)/$(version) mv fs-uae-$(version).tar.gz dist/$(series)/$(version)/ mv fs-uae-launcher-$(version).tar.gz dist/$(series)/$(version)/ mkdir -p dist/files/ cp doc/Default.fs-uae dist/files/ cp server/fs_uae_netplay_server/game.py \ dist/files/fs-uae-netplay-server.py cp server/fs_uae_netplay_server/game.py \ dist/$(series)/$(version)/fs-uae-game-server-$(version).py install: install -d $(DESTDIR)$(prefix)/bin install fs-uae $(DESTDIR)$(prefix)/bin/fs-uae install -d $(DESTDIR)$(prefix)/share cp -R share/* $(DESTDIR)$(prefix)/share install -d $(DESTDIR)$(docdir) cp README COPYING example.conf $(DESTDIR)$(docdir) clean: rm -f gensrc/build68k gensrc/genblitter gensrc/gencpu gensrc/genlinetoscr rm -f obj/*.o obj/*.a rm -f out/fs-uae* rm -f fs-uae rm -f fs-uae.exe $(make) -C libfsemu clean distclean: clean include targets.mk fs-uae-2.2.3+dfsg/VERSION0000644000175000017500000000000612162366655015121 0ustar glaubitzglaubitz2.2.3 fs-uae-2.2.3+dfsg/icon/0000755000175000017500000000000012162366654015004 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/icon/fs-uae.icns0000644000175000017500000021511212162366654017044 0ustar glaubitzglaubitzicnsJis32}ɉÉÉÉÅÃÉÅ«„©§¨§«ÅÆ“ƒ– œà­Ë‘ÆÇ}‚‚ ~Û¸ü™}ÇÉhm nø·ÐjhÉÉX^ Xö›ÿh^XÉÊQ€X V¨ÐÖ¦VXQÊÊI€Q#Yö’åMQQIÊË9I:G£Ž¿nIJJBËË9=5›vŠ@€D <ËË@()N^[SJ€H @ËËDNBKJM€L DËÉYHKIKƒHYÉÉÁɇÊÉÁÉɉÉ¢‰¢¢›Ÿ‡ Ÿ›¢ a„YZYYa ¡E‚K JG(E=F¡¢3‚9 8>Q;O2¢£‚' ;zYq#£¤ ¢f³2¤¤€ z´¯…¤¤€$ÿ}÷¤¥ "Á•ùV€ ¥¥M£ù–€ ¥¥…Áÿ•ÿ'€ ¥¥ âºý…€ ¥£ ‚ £¢™£‡¥£™¢¢‰¢ɉÉÉÉÅÃÉÅ«„©¬ª¬«ÅÆ“‚– •Œ*rD–ÆÇ}‚‚ …&Mo}ÇÉh‚m V QIJJBËËIÿ²*-C€D <ËË?–Ä YSJ€H @ËËDI?2+DJM€L DËÉYHJIKƒHYÉÉÁɇÊÉÁÉɉÉs8mk2ëÿÿÿÿÿÿÿÿÿÿë2ëþÿÿÿÿÿÿÿÿÿÿþëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿëþÿÿÿÿÿÿÿÿÿÿþë2ëÿÿÿÿÿÿÿÿÿÿë2il32§ŸÄÄÅ–Ä€›ÄÄÄÀ»“¶»ÀÄÄÅĶ•¯»ÄÅÄÄ—¥ÄÄÄÄ›œ¹·Ÿ«·®€›ÄÄÄÄ‘Àÿé”óÿ²€‘ÄÄÄÄŒ‡’øÿ¤Æÿ߈€‡ÄÄÄÄŒ}ÑÿÒ‘ýü–}ÄÄÄÄ‹s•ÿ÷ˆÜÿÆtsÄÄÄÄŠikçÿ·ÿñy‚iÄÄÄÄŠa©ÿèsñÿ§ƒaÄÄÄĉ]møþ—¹ÿÜeƒ]ÄÄÄĉZÉÿÐxýû‡„ZÄÄÄĈV‚ÿöxÚÿÂX„VÄÄÄćSVâø°øéj…SÄÄÄćO–ãÐdØã™†OÄÄÄĆL[ÊÍ…™Î¹V†LÄÄÄÄGG&'V5'=O˜¹¥`¸·u‡HÄÄÄÄEE*$O n¥£h•¥“G‡EÄÄÄÄEEDQ0ˆ‚aˆ‰\EEÄÄEÄÄEÄÄÄÄ€G7]CgpXhgsGKGÄGGÄ‚GÄÄÄÄI <30c;0IK€>Œ5IKbAKMa5‹,:fiX^ft1,Š#$x|F‚I‚#ŠZœ™>”œ}ƒ‰*³·uw·©.ƒ‰›Ò´AÐÐg„ˆOíæUÁíµ„‡áÿ¬mÿïD…‡†ÿæ<ïÿ–††.øþ~ ÿÚ&†)?(9 ºÿÌDýúg‡:]i+\]ÿõPÒÿ»‡›­…I¯ðÿ¨mÿî<€KýóLàÿä<ñÿ‘‚®ÿÏùþÄÁÿØ# &ôöÿÍöþúb€‚qÜÒLÊÙ£›—›žc•cž‰c“c‰›œ•œ›€ž›‘››ŸŸÄÄÅ–Ä€›ÄÄÄÀ»“¶»ÀÄÄÅĶ•¯»ÄÅÄÄ—¥ÄÄÄÄ›™jgŽgu€›ÄÄÄÄ‘SŠ`€‘ÄÄÄÄŒ‡{k?(ˆ€‡ÄÄÄÄŒ}/5mr}ÄÄÄÄ‹sX t CtsÄÄÄÄŠigOGp‚iÄÄÄÄŠa8h YƒaÄÄÄĉ]Tb-)eƒ]ÄÄÄĉZ#7Qe„ZÄÄÄĈVA fDX„VÄÄÄćSQN8c…SÄÄÄćO-Y W†OÄÄÄĆLD]%,V†LÄÄÄÄLLÁÏ|Ï·O8B^‡HÄÄÄÄEEÿàZðÿm \DG‡EÄÄÄÄEEHãÿ©†ùN.YEEÄÄEÄÄEÄÄÄÄ€Gsþôkj S WGKGÄGGÄ‚GÄÄÄÄI¦Ø Š3.RIMIÄÄIÄÄIÄÄÄÄK P-;77\#+77;uJ xÈaJPl˜ÏmJtÄÄÄÄuƒL $!!+Z"!!ZVLzÀLlÌ^VÄLuÄÄÄÄvƒMJ € \6€ !m‚MzÃMšÉЮUMvÄÄÁă„N FIJLUMDJJSO‰NOQƒNƒÄ¿´Äœ£OœÄ§¤Ä¿a¡Qa¿Ä‹ZÀÄ®bŸRb®Ä½/‚‰ÄÄÀ†›z†ÀÄÄl„‚¿¡Ä½l†A’©¿›Ä¿§‹/ââWˆ‘›››„H†š¡™n„›‹€›{€‹›i‚Yš’kŸck’™4ˆ›g¡^g›u‘…£X…‡›t£St™i–M),,A]>',,bNMMie•G7€jI3c€Gea”B A)$$KY6$$&qBa]”< 955:o;755^M<]Z“6 8GFFmBAFFNh‚6ZV“1OWWa_9€Wv8‚1VR’+?€iz.`iisSƒ+RN‘%)szzDI€zx&ƒ%NK‘ Z€‹n*‡€‹6„ KI 0šœœ‘+oœœša…IIŠ­­¦T>€­$…IHR€¾‹!¥¾¾¯G†HGŽ #ÀÐе;jÐÐ΀†GGŽ ˆááÛq-Ùáá¶/‡GF =ïòò²&¨òòäaˆFEÉÿÿçQR€ÿ¦ˆEEŒ iÿÿþ•ÝÿÿÛC‰ED‹ "ìÿÿÐ5‚ÿÿû‚‰DD‹ šÿÿöo/÷ÿÿÃ+ŠDCŠ >ýÿÿ¶"´ÿÿî]‹CC&(R&&B+ÌÿÿåLS€ÿ¤‹CB:??\7 ??Allÿÿþ’ßÿÿÚ>ŒBA%€s{Zss‚ñÿÿÎ2„ÿÿú€AA€l¦¦¢S$¢¦Úÿÿõl.÷ÿÿÂ'€#ƒAB€ ÌÚÚ®&sáþÿÿ³·ÿÿíZNĺºœ“»¹†‚BB jÿÿú}õÿÿä[W€ÿ¡N¯€-Ã%"Ž#BB‚ÉÿÿÚŠÿÿþ°•âÿÿÙ=€ N¼||>–ÀŽJ‚BB‚ :ûÿÿøÿÿÍâòÿÿú} N·ZZ0?xÀ@BCƒ “ÿýÿÿô´ÿþÿÿ¿'O¯€>»+ ±WCCƒì€ÿ±yüÿÿíX‚O¯z·Á”C›Q„ *LOK!DOO8‰ƒQ™n£n†„˜'¡'˜oH™‚'Ÿ'‚—%‚n˜nR›DRn˜W„i™¡—W†4u‡™›™†o%ââmª¶Á›ÄÁ´¤Z†žÀ¡ÄÀ‰„ž€ÄÀ¾›½¾À€Ä‚‚oÀÄÀ´Ÿ²´ÀÄ¿AªÄ¯ÃÄ’¶Ä¹£¥¹Ä©Áİ£Ÿ°Ä¿Äħ–˜ K56Q•z766~€˜§ÄÄÄÄ£•’ fm&€’£ÄÄÄÄŸ”Œ ‡4ŒSxŒŸÄÄÄÄ›”… B }{ C†…›ÄÄÄÄ—“ mQ1‚‚—ÄÄÄÄ““y#^€_{‚y“ÄÄÄÄŽ’r Mkq(}ƒrŽÄÄÄÄŠ‘l h6v>r„lŠÄÄÄĆ‘e 0 v\Dm„e†ÄÄÄăa RSf%v…aƒÄÄÄÄ‚_tH€_b…_‚ÄÄÄÄ€\ =i\)o†\€ÄÄÄÄŽZ V 8h2p[†ZÄÄÄÄ}ŽX ( sOFb‡X}ÄÄÄÄ|V GT]rˆV|ÄÄÄÄ{To?€_XˆT{ÄÄÄÄyŒQ 4iQ+h‰QyÄÄÄÄw‹O K :_+nP‰OwÄÄÄÄv‹M " oEHYŠMvÄÄÄÄuŠK =URm‹KuÄÄÄÄsHuÕÚØzH¹ÚÚ³VHg5€aL‹HsÄÄÄÄqFHÞÿÿÓ\ÿÿü‘,iF -_ŒFqÄÄÄÄpDDlþÿÿ FÊÿÿÒ ;W$lDpÄÄÄÄq€Eµÿÿëm]ùÿh n=JREH€NLEESMƒEqÄÄÄÄr€GSñÿÿÀS ÍVNkGGvÑÊʲH«ÊÉ¡‚GrÄÄÄÄsH ‰øøó‰L.!p3€aKHHwÁ€H]ÐVT§UHsÄÄÄÄs‚I½ààÅ;~ /`€I wÌšškI®Î¨t‚IsÄÄÄÄt‚J `Åǹ =¸]nJ xÈaJPl˜ÏmJtÄÄÄÄuƒL kƒ4 rKVLzÀLlÌ^VÄLuÄÄÄÄvƒM L-XJm‚MzÃMšÉЮUMvÄÄÁă„N FIJLUMDJJSO‰NOQƒNƒÄ¿´Äœ£OœÄ§¤Ä¿a¡Qa¿Ä‹ZÀÄ®bŸRb®Ä½/‚‰ÄÄÀ†›z†ÀÄÄl„‚¿¡Ä½l†A’©¿›Ä¿§‹/âh8mk   :¤Ò÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷ÔªF|öÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷" |ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ–$9öÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøa ¤ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿2 ÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâI÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúXÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿb"ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿe$ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿf%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿg%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿg%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿg%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿg%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿg%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿg%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿg%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿg%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿg%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿg%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿg%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿg%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿg%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿg%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿg%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿg%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿg%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿg%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿg%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿg%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿg%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿg%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿg%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿg%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿg%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿg%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿg%÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúd$Ôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿä^!ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÉS F÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿú†Aÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ´\* "–øÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿú´d9 $a¿âúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúäɆ\92IYcfgggggggggggggggggggggggggggge_SA* "$%%%%%%%%%%%%%%%%%%%%%%%%%%%%$! it32'7ÿÿÿÿÿÿÿÿ€…ª´»ÁËÄÀº²¤x¡g°ÁÕÄÀ¨OL¬ÃÙÄ 1š¿ÝĽb˜—ÂßÄÁ|–—ãÄ{”Â…ÄÀ½º¹Ë¸¹º½À…ÄÁZ’L¿„ľ·Ó¶·¾„Ä»(‘¬ƒÄø׳¸ÃƒÄ–fÂÄôٱ´Ã‚ÄÂ<°ƒÄ´Û®´ƒÄŽÁ‚ĺݬº‚ľ ‡‚Äìݩ¬Ã‚Ä\ª‚Ļߧ»‚Ä‘´‚İߤ°‚Ħ»‚ĩߢ©‚ijÁ‚ģߟ£‚ľƒÄáƒÄƒÄ¿š¯³„°›—€š¯³„°›—†šƒÄƒÄ¾—­þ„ÿç‘——­þ„ÿ瑆—ƒÄƒÄ½•–é„ÿþ£••–é„ÿþ£‡•ƒÄƒÄ½“¿…ÿÐŒ‘““¿…ÿÐŒ‘‡“ƒÄƒÄ¼™ø„ÿö”™ø„ÿö”ˆƒÄƒÄ¼Ó…ÿ¸Œ€Ó…ÿ¸Œ‰ƒÄƒÄ»‹¥…ÿ匌‹‹¥…ÿ匌‰‹ƒÄƒÄºˆ‰é„ÿþ¢Œˆˆ‰é„ÿþ¢ŒŠˆƒÄƒÄº†¹…ÿÎŒˆ††¹…ÿÎŒˆŠ†ƒÄƒÄ¹ƒŽø„ÿõ“‰ƒƒŽø„ÿõ“‰‹ƒƒÄƒÄ¹Ñ…ÿ¶ŒƒÑ…ÿ¶Œƒ‹ƒÄƒÄ¸~…ÿ㌅~~…ÿ㌅Œ~ƒÄƒÄ·|~è„ÿý Š}|~è„ÿý Š}Œ|ƒÄƒÄ·y´…ÿÌŒyy´…ÿÌŒyƒÄƒÄ¶w„ø„ÿô’†ww„ø„ÿô’†ŽwƒÄƒÄ¶tÎ…ÿµ‹wttÎ…ÿµ‹wŽtƒÄƒÄµr•…ÿâŒrr•…ÿâŒrƒÄƒÄ´orç„ÿýŸˆporç„ÿýŸˆpoƒÄƒÄ´m°…ÿÊŒvmm°…ÿÊŒvmƒÄƒÄ³jzø„ÿó‘jjzø„ÿó‘‘jƒÄƒÄ³hÌ…ÿ³‹lhhÌ…ÿ³‹l‘hƒÄƒÄ²eŽ…ÿàŒxeeŽ…ÿàŒx’eƒÄƒÄ±cgç„ÿüž†dcgç„ÿüž†d’cƒÄƒÄ±a¬…ÿÈŒmaa¬…ÿÈŒm“aƒÄƒÄ°atù„ÿñ‘~aatù„ÿñ‘~”aƒÄƒÄ°`Ì…ÿ±Še``Ì…ÿ±Še”`ƒÄƒÄ¯_Œ…ÿߌt__Œ…ÿߌt•_ƒÄƒÄ®^bè„ÿüœ…_^bè„ÿüœ…_•^ƒÄƒÄ®]¬…ÿÇŒi]]¬…ÿÇŒi–]ƒÄƒÄ­\pù„ÿñ|\\pù„ÿñ|—\ƒÄƒÄ­[Í…ÿ¯Š`[[Í…ÿ¯Š`—[ƒÄƒÄ¬Z‹…ÿÝŒqZZ‹…ÿÝŒq˜ZƒÄƒÄ«Y^ê„ÿû›ƒZY^ê„ÿû›ƒZ˜YƒÄƒÄ«Y­…ÿÅŒfYY­…ÿÅŒf™YƒÄƒÄªXoú„ÿïyXXoú„ÿïyšXƒÄƒÄªWÏ…ÿ­‰\WWÏ…ÿ­‰\šWƒÄƒÄ©V‹…ÿÛŒnVV‹…ÿÛŒn›VƒÄƒÄ¨U\ê„ÿúš‚VU\ê„ÿúš‚V›UƒÄƒÄ¨T­…ÿÃŒaTT­…ÿÃŒaœTƒÄƒÄ§Sl÷„ûêwSSl÷„ûêwSƒÄƒÄ§RÉ…õ¨ˆWRRÉ…õ¨ˆWRƒÄƒÄ¦R†…ðÏŒjRR†…ðÏŒjžRƒÄƒÄ¥QXÚ„ëç–€QQXÚ„ëç–€ŸQƒÄƒÄ¥P¡…æ¶Œ]PP¡…æ¶Œ]ŸPƒÄƒÄ¤OfÞ„áÓŽtOOfÞ„áÓŽt OƒÄƒÄ¤N·…Û ˆSNN·…Û ˆS NƒÄƒÄ£M|…Ö¼ŒfMM|…Ö¼Œf¡MƒÄƒÄ¢LSÄÑÍ“MLSÄÑÍ“M¡LƒÄƒÄ¢K’…Ì©‹XKK’…Ì©‹X¢KƒÄƒÄ¡K`ĄƼqKK`ĄƼq£KƒÄƒÄ¡J¤…Á™‡OJJ¤…Á™‡O£JƒÄƒÄ‚I3*ƒ-`oKII4)ƒ-^oKIs…¼ªŒcIIs…¼ªŒc¤IƒÄƒÄ‚HB„&ŒjHHC„"Œj€HO­„·´}HHO­„·´}¥HƒÄƒÄƒG*…\ŠQGG,…XŠQGG„…²œ‹TGG„…²œ‹T¥GƒÄƒÄƒFE„…y€F„ ƒyFY«„¬¦ŒnFFY«„¬¦Œn¦FƒÄƒÄ„E7„=Œ]EE9„:Œ]‘…§’†IEE‘…§’†I¦EƒÄƒÄ…D„r…HDD„o…¢šŒ_DDh…¢šŒ_§DƒÄƒÄ…D@„‹lDDA„&œ„œ{DDJ–„œ{¨DƒÄƒÄ†E,…U‹REE.„X…•‹REEt…•‹R¨EƒÄƒÄ‡E„ |FEE‚Œ…ŒmEESŒ…Œm©EƒÄƒÄ‡F;„6ŒaFF<€h…„Š…JFFw…„Š…J‚FJ‡dTFGWp‚vdJFƒÄƒÄˆF!„l†KFF#€1…|‚Œ_FF[…|‚Œ_ƒFX‡Ñ‡€FeÂÑÀyŒFƒÄƒÄˆGD „ ŠqGGE j„suŠ{GGJp„suŠ{„GY‡Ò‡GGtÎ…Ò|‹GƒÄƒÄ‰G2…M‹VGG3A…k‹RGG]…k‹R„GYÒÒÑ„`GG³ÒÒ¢v]|´ÒÒÌMŠGƒÄƒÄŠH„}IHH'…clŒnHHN…clŒm…HZÒÒцHSÐÒÆI€H^ÐÒÒhŠHƒÄƒÄŠH?„/ŒeHHU…Z‚ŒgHHV…Z‚…K…HZÒÒцHOÐÒÒ€N€HmpkSŠHƒÄƒÄ‹I&…eˆOM…RjŒqˆOM…RjŒ`†I[ÒÒчI´€ÒÌ pLŽIƒÄƒÄ‹IH „ˆq…JOˆgˆq…JOˆz‡I[€ÒƒÊ€I^Ë‚ÒÉžhŒIƒÄƒÄŒJ7…F^…Bp‰E^…BpŠT‡J\†Ò…J\§Ð‚ÒÑ‹JƒÄƒÄJ„…9LŒJ…9LŒmˆJ\€Òƒ¨rƒJT¦ÊÒlŠJƒÄƒÄKD‚(„12{|(„12{„NˆK]ÓÓÒˆKLL€KLuÂÓÓ’ŠKƒÄƒÄŽK,‚…)SŒ-…)SŒ`‰K]ÓÓÒ†K’ÄЋ‚KƒÓÓ±ŠKƒÄƒÄŽLK€„ *†d„ *†zŠL^ÓÓÒ†LÓÓÀSL§ÓÓžŠLƒÄƒÄL<…bŠ…bŠUŠL^ÓÓÒ†L YÍÓÓ¸ub|¡ÒÓÓwŠLƒÄƒÄM …-Œm …-Œm‹M^ÓÓÒ‡M}†Ó»SŠMƒÄƒÄMH„ u„OH„ u„O‹M^ÓÓÒˆM{ƒÓ¨Y‹MƒÄƒÄON5*ƒ5Nx\NN5*ƒ5Nx\ŒNR€o‰NQo‘‹}\ŒNOƒÄÀ‚ÄZßNZ‚ľº‚ÄfßOf‚ı²‚Ä|ßO|‚Ä£¤‚ÄŸßPŸ‚ÄŒx‚ÄÀ[ÝP[À‚ÄSÀ‚Ä–ÝQ–‚Ľލ‚ÄÃqÛQqÂĕO‚ĽfÙRf½‚ÄÁ1 ƒÄ½r×Rr½ƒÄ‹‘1½ƒÄ×^ÓS^—ÃĹ’bÁ„ÄÀ ~i^TÉST^i~ À„ÄÀG”|ãÄe–{ÁßÄÀe˜Z»ÝĹGš(–ÂÙÄÁ‹<¾ÕĽ•1¡ \‘¦³¾Ëľ±£ŒSÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿ€kˆ–›Ëš•ƒ`¡S›Õ™†?=ŠœÙ›€'šg™Ý—N˜y›ß›d–yãb”g›„›Œ}snjÉijns}Œ›„›H’=™ƒœˆlÓglˆœƒ– ‘Šƒšt×dtšƒxQœ‚šlÙblš‚›0‚œqÛ`qœ‚}Ž›‚„Ý^„‚˜l‚›bÝ\b›‚Iˆ‚‡ßY‡‚t‚rßWr‚…–‚cßUc‚›‚ZßSZ‚˜ƒQßPQƒƒ¿N>;„FZ\€N>;„FZ\†Nƒƒ¾L=„ ‹oLL=„ ‹o†Lƒƒ¾J„  r…MJJ„  r…M†Jƒƒ½H2…CŒ_HH2…CŒ_‡Hƒƒ¼EA„!„yEEA„!„yˆEƒƒ¼C-…b‹NCC-…b‹NˆCƒƒ»A;…&=ŒiAA;…&=Œi‰Aƒƒ»?0„-.zƒB??0„-.zƒB‰?ƒƒº=9…3YŒW==9…3YŒWŠ=ƒƒÂ:A‡uˆ:A‡u‹:ƒƒ¹8>…ApŠD88>…ApŠD‹8ƒƒ¸6:…HXŒb66:…HXŒbŒ6ƒƒ¸4I„NO744I„NO7Œ4ƒƒ·1A…UmŒM11A…UmŒM1ƒƒ¶/3Z„\a‰q//3Z„\a‰qŽ/ƒƒ¶-P…c~‰:--P…c~‰:Ž-ƒƒµ+;…jsŒ[++;…jsŒ[+ƒƒ´)*d„pq‡,)*d„pq‡,)ƒƒ´&K…wŒD&&K…wŒD&ƒƒ³$.z„~‹l$$.z„~‹l‘$ƒƒ³"d……Šˆ/""d……Šˆ/‘"ƒƒ² =†‹ŒT =†‹ŒT’ ƒƒ±!€…’|!!€…’|!’ƒƒ±X…™“Œ;X…™“Œ;“ƒƒ°,›„ žh,›„ žh”ƒƒ°{…§•‡){…§•‡)”ƒƒ¯E…­¤ŒPE…­¤ŒP•ƒƒ®ž„´³’zž„´³’z•ƒƒ®i…º£Œ9i…º£Œ9–ƒƒ­0»„ÁºŽe0»„ÁºŽe—ƒƒ­“…Èž‡&“…Èž‡&—ƒƒ¬P…Ï»ŒMP…Ï»ŒM˜ƒƒ« ½„ÕÓ•y ½„ÕÓ•y˜ƒƒ«|…Ü´Œ5|…Ü´Œ5™ƒƒª5Ý„ã׎c5Ý„ã׎cšƒƒª®…꧆$®…꧆$šƒƒ©\…ñÑŒJ\…ñÑŒJ›ƒƒ¨!Ü„÷ó™w!Ü„÷ó™w›ƒƒ¨…þÃŒ2…þÃŒ2œƒƒ§:ú„ÿî`:ú„ÿî`ƒƒ§À…ÿ«…!À…ÿ«…!ƒƒ¦c…ÿÙŒHc…ÿÙŒHžƒƒ¥ å„ÿú™u å„ÿú™užƒƒ¥“…ÿÁŒ0“…ÿÁŒ0Ÿƒƒ¤;ú„ÿíŽ];ú„ÿíŽ] ƒƒ¤Ã…ÿ©„Ã…ÿ©„ ƒƒ£f…ÿ׌Ef…ÿ׌E¡ƒƒ¢ ç„ÿù˜s ç„ÿù˜s¡ƒƒ¢–…ÿ¿‹,–…ÿ¿‹,¢ƒƒ¡=û„ÿëŽ[=û„ÿëŽ[£ƒƒ¡Æ…ÿ¨ƒÆ…ÿ¨ƒ£ƒƒ‚ ƒ&NX ƒ&LXi…ÿÕŒBi…ÿÕŒB¤ƒƒƒ…6ŒP„3ŒP€!ê„ÿø–q!ê„ÿø–q¥ƒƒƒ…*jˆ#…*gˆ#™…ÿ¾‹)™…ÿ¾‹)¥ƒƒ„5„>Fˆk€4„>E‡k>ü„ÿêX>ü„ÿêX¦ƒƒ„R„SlŒ;R„SkŒ<É…ÿ¦É…ÿ¦¦ƒƒ…B„gh…€A…g„°…ÿÓŒ>l…ÿÓŒ>§ƒƒ…r„{‹Vp„{ˆö„ÿ÷•o!ë„ÿ÷•o¨ƒƒ†>…Š';„Ñ…ÿ»Š'…ÿ»Š'¨ƒƒ‡~„¤¢Žp|‚¤¶þ„ÿèVAý„ÿèV©ƒƒ‡+´„¸§Œ@*³¸ð…ÿ¥€Ì…ÿ¥€‚‡8#'G^O7ƒƒˆt…Ìš‚p€Ìà…ÿÑŒ=p…ÿÑŒ=ƒ)‡Äe€:²‚Ä®SŒƒƒˆÇ„à ÑŽ\Äàâý„ÿö•m$í„ÿö•m„)‡ÄeLÀ…ÄV‹ƒƒ‰W…ôº‹-Sôû…ÿºŠ&¡…ÿºŠ&„)€Ä„Z3ÄćN/VžÄľŠƒƒŠ·„ÿù˜tÃ…ÿçŒUDþ„ÿçŒU…)€Ä† ÃĶ€/ÃÄÄ<ŠƒƒŠ/ö„ÿÙŒFÕ„ÿþ£ŒIЄÿþ£…)€Ä†ÃÄÄZ€BF@!Šƒƒ‹‚…ÿ¬…t…ÿÐŒ¢…t…ÿÐŒ;†)€Ä‡€Ä¼ƒDŽƒƒ‹Ù„ÿïnï„ÿö”«ðnï„ÿö”k‡)€ÄƒºZ€-»‚ĸ;ŒƒƒŒN…ÿÅÓ…ÿ¸íÿÇÓ…ÿ¸‰%‡)†Ä_*ŒÂ‚ÄÃW‹ƒƒª„ÿü…ÿåŒÂÿÿý…ÿåŒSˆ)€ÄƒŽFƒW‹¹Ä?Šƒƒ(ñ‹ÿþ¢šú‡ÿþ¢~ˆ*ÅÅĈ€J¯ÅÅpŠƒƒŽv‹ÿΌڈÿÎŒ:‰*ÅÅĆp²Âf‚\ÅŘŠƒƒŽЉÿõ“¬ˆÿõ“jŠ*ÅÅĆXÅŬ‹ÅÅŠƒƒDýˆÿ¶Šíˆÿ¶‰$Š*ÅÅĆ %½ÅÅ¢I1RƒÄÅÅKŠƒƒž‡ÿãŒQž‡ÿãŒQ‹*ÅÅćS†Å¤Šƒƒ"ë…ÿý }"ë…ÿý }‹*ÅÅĈP®ƒÅ‹#‹ƒƒ`µÁƒÂd-`µÁƒÂd-Œ??>‰>WldQ&Œƒš‚!ß!‚˜•‚/ß/‚Ž‚HßH‚ƒƒ‚qßq‚p`‚˜!Ý!˜‚B™‚gÝg‚—ކ‚›;Û;›‚w?›‚•,Ù,•‚›'€ƒ•;×;•ƒp‘'—ƒ›g!Ó!g›ƒ”’N›„˜qI0"É"0Iq˜„š8”dãQ–b›ßšQ˜H–Ý”8š x›Ù›p0}˜Õ—w'¡It…˜Ë˜ŽƒpBÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿ€…ª´»ÁËÄÀº²¤x¡g°ÁÕÄÀ¨OL¬ÃÙÄ 1š¿ÝĽb˜—ÂßÄÁ|–—ãÄ{”Â…ÄÀ½º¹Ë¸¹º½À…ÄÁZ’L¿„ľ·Ó¶·¾„Ä»(‘¬ƒÄø׳¸ÃƒÄ–fÂÄôٱ´Ã‚ÄÂ<°ƒÄ´Û®´ƒÄŽÁ‚ĺݬº‚ľ ‡‚Äìݩ¬Ã‚Ä\ª‚Ļߧ»‚Ä‘´‚İߤ°‚Ħ»‚ĩߢ©‚ijÁ‚ģߟ£‚ľƒÄáƒÄƒÄ¿š{s„p—€š{s„p—†šƒÄƒÄ¾—x„‹‘——x„‹‘†—ƒÄƒÄ½•”„o••”„o‡•ƒÄƒÄ½“W…9Œ‘““W…9Œ‘‡“ƒÄƒÄ¼… „ ƒ… „ ƒˆƒÄƒÄ¼6…VŒ€6…VŒ‰ƒÄƒÄ»‹l„‹Œ‹‹l„‹Œ‰‹ƒÄƒÄºˆ†„rŒˆˆ†„rŒŠˆƒÄƒÄº†M…;Œˆ††M…;ŒˆŠ†ƒÄƒÄ¹ƒw„ „‰ƒƒw„ „‰‹ƒƒÄƒÄ¹0…XŒƒ0…XŒƒ‹ƒÄƒÄ¸~`…!Œ…~~`…!Œ…Œ~ƒÄƒÄ·|z„sŠ}|z„sŠ}Œ|ƒÄƒÄ·yD…=ŒyyD…=ŒyƒÄƒÄ¶wk„„†wwk„„†ŽwƒÄƒÄ¶t)…[‹wtt)…[‹wŽtƒÄƒÄµrU…#ŒrrU…#ŒrƒÄƒÄ´om„uˆpom„uˆpoƒÄƒÄ´m;…@Œvmm;…@ŒvmƒÄƒÄ³j_„…jj_„…‘jƒÄƒÄ³h#…]‹lhh#…]‹l‘hƒÄƒÄ²eJ…%ŒxeeJ…%Œx’eƒÄƒÄ±ca„w†dca„w†d’cƒÄƒÄ±a3…BŒmaa3…BŒm“aƒÄƒÄ°aV„‡~aaV„‡~”aƒÄƒÄ°`…`Še``…`Še”`ƒÄƒÄ¯_D…(Œt__D…(Œt•_ƒÄƒÄ®^[ „x…_^[ „x…_•^ƒÄƒÄ®]/…EŒi]]/…EŒi–]ƒÄƒÄ­\P„‡|\\P„‡|—\ƒÄƒÄ­[…bŠ`[[…bŠ`—[ƒÄƒÄ¬Z?…*ŒqZZ?…*Œq˜ZƒÄƒÄ«YV „zƒZYV „zƒZ˜YƒÄƒÄ«Y,…GŒfYY,…GŒf™YƒÄƒÄªXL„ˆyXXL„ˆyšXƒÄƒÄªW…d‰\WW…d‰\šWƒÄƒÄ©V;…,ŒnVV;…,Œn›VƒÄƒÄ¨UR „{‚VUR „{‚V›UƒÄƒÄ¨T(…IŒaTT(…IŒaœTƒÄƒÄ§SG„‰wSSG„‰wSƒÄƒÄ§R…fˆWRR…fˆWRƒÄƒÄ¦R7….ŒjRR7….ŒjžRƒÄƒÄ¥QN „}€QQN „}€ŸQƒÄƒÄ¥P%…KŒ]PP%…KŒ]ŸPƒÄƒÄ¤OB„‰tOOB„‰t OƒÄƒÄ¤N…hˆSNN…hˆS NƒÄƒÄ£M2…0ŒfMM2…0Œf¡MƒÄƒÄ¢LH„~MLH„~M¡LƒÄƒÄ¢K"…M‹XKK"…M‹X¢KƒÄƒÄ¡K>„ŠqKK>„Šq£KƒÄƒÄ¡J…j‡OJJ…j‡O£JƒÄƒÄ‚IµÂƒÅ…oKII|µÁƒÅ‡oKI.…3ŒcII.…3Œc¤IƒÄƒÄ‚HXó„ÿàŒjHHUñ„ÿãŒj€HD„}HHD„}¥HƒÄƒÄƒG’…ÿ³ŠQGG…ÿ¶ŠQGG…P‹TGG…P‹T¥GƒÄƒÄƒFGÙ„ÿó’yFFGÔ„ÿõ“yF9„ŠnFF9„Šn¦FƒÄƒÄ„Ejþ„ÿÌŒ]EEfü„ÿÐŒ]„l†IEE„l†I¦EƒÄƒÄ…D°„ÿþ¡…HDD«„ÿþ£R…5Œ_DD*…5Œ_§DƒÄƒÄ…DOî„ÿåŒlDDMë„ÿÙ „ €{DD?„ €{¨DƒÄƒÄ†E‡…ÿ¹‹REEƒ„ÿi…R‹REE…R‹R¨EƒÄƒÄ‡EЄÿö•|FEEÌ‚ÿÌ„‹mEE7„‹m©EƒÄƒÄ‡Fcû„ÿÓŒaFFaú€ÿþ7„n…JFF„n…J‚FJ‡dTFGWp‚vdJFƒÄƒÄˆF§…ÿ¦†KFF¤€ÿš…7Œ_FF*…7Œ_ƒFX‡Ñ‡€FeÂÑÀyŒFƒÄƒÄˆGNé„ÿ êŽqGGMæÿì„ ‚{GGB„ ‚{„GY‡Ò‡GGtÎ…Ò|‹GƒÄƒÄ‰G…ÿ¿‹VGG|ÿe…U‹RGG…U‹R„GYÒÒÑ„`GG³ÒÒ¢v]|´ÒÒÌMŠGƒÄƒÄŠHÄ„úô—IHH˜„‹nHH9…‹m…HZÒÒцHSÐÒÆI€H^ÐÒÒhŠHƒÄƒÄŠH\ë„ñÐŒeHG„pŒgHG„p…K…HZÒÒцHOÐÒÒ€N€HmpkSŠHƒÄƒÄ‹I”…祈O+…:ŒˆO+…:Œ`†I[ÒÒчI´€ÒÌ pLŽIƒÄƒÄ‹ILÅ„ÝÒŽj„ ƒ¢Ój„ ƒz‡I[€ÒƒÊ€I^Ë‚ÒÉžhŒIƒÄƒÄŒJm…Ô°5…WŽÉÔ±5…WŠT‡J\†Ò…J\§Ð‚ÒÑ‹JƒÄƒÄJœ„Ê›„ ‹©ÊÊ›„ ‹mˆJ\€Òƒ¨rƒJT¦ÊÒlŠJƒÄƒÄKU¶‚½»$„r’»½»$„r„NˆK]ÓÓÒˆKLL€KLuÂÓÓ’ŠKƒÄƒÄŽKn‚žZ…<Œ˜žžZ…<Œ`‰K]ÓÓÒ†K’ÄЋ‚KƒÓÓ±ŠKƒÄƒÄLu€t„ „ˆt„ „zŠL^ÓÓÒ†LÓÓÀSL§ÓÓžŠLƒÄƒÄLP€`#…YŠf``#…YŠUŠL^ÓÓÒ†L YÍÓÓ¸ub|¡ÒÓÓwŠLƒÄƒÄMGB2…!ŒmGB2…!Œm‹M^ÓÓÒ‡M}†Ó»SŠMƒÄƒÄMJ&„s„OJ&„s„O‹M^ÓÓÒˆM{ƒÓ¨Y‹MƒÄƒÄON6+ƒ6Nx\NN6+ƒ6Nx\ŒNR€o‰NQo‘‹}\ŒNOƒÄÀ‚ÄZßNZ‚ľº‚ÄfßOf‚ı²‚Ä|ßO|‚Ä£¤‚ÄŸßPŸ‚ÄŒx‚ÄÀ[ÝP[À‚ÄSÀ‚Ä–ÝQ–‚Ľލ‚ÄÃqÛQqÂĕO‚ĽfÙRf½‚ÄÁ1 ƒÄ½r×Rr½ƒÄ‹‘1½ƒÄ×^ÓS^—ÃĹ’bÁ„ÄÀ ~i^TÉST^i~ À„ÄÀG”|ãÄe–{ÁßÄÀe˜Z»ÝĹGš(–ÂÙÄÁ‹<¾ÕĽ•1¡ \‘¦³¾Ëľ±£ŒSÿÿÿÿÿÿÿÿ€t8mk@    $(*+,--------------------------------------------------------------------------,+*($   'e§Ìâöÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷ãέp8,#  D´ôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿö½Y1%  3§ûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿü´O0" Xîÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿñt8'xúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿû’=* xÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ”?*  Xúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿû}=' 3îÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿó`8" §ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿K0 Eûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüu@&  ´ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÊO2 'ôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøa># dÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ“I,  §ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÄT4  ÌÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÝ]; $âÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿìdA%(öÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿújF(*ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿmI*+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿoK+,ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿpL,,ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿqM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- ,ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿqM- ,ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿpL,+÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúoK+*ãÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿîmI*(ÎÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿájF($­ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÊdA% pÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¢];  8öÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùyT4  +½ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÕkI, #Yüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿý^># 2´ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÎoO2 &Oñÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿö†^@&  0tûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿü iK0 "8’ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ³oS8" '=”ûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿü³qX='  *@~óÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿö oX@* *=`¿üÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýΆiS=*'8KuÊøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùÕo^K8' "0@Oa“ÄÝìúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúîáÊ¢yk^O@0"  &2>IT]dimppqrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrqppmid]TI>2&  #,4;AFIKLLMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMLKIFA;4,#   %(*+,--------------------------------------------------------------------------,+*(%     ic08Ž_ jP ‡ ftypjp2 jp2 Ojp2hihdrcolr"cdefjp2cÿOÿQ2ÿd#Creator: JasPer Version 1.900.1ÿR ÿ\@@HHPHHPHHPHHPHHPÿ]@@HHPHHPHHPHHPHHPÿ]@@HHPHHPHHPHHPHHPÿ]@@HHPHHPHHPHHPHHPÿ ÿ“ß‚ xx}Ria‰ü-x+¢Œ/&‰]ð¦ê"ʃoú ÔN!j÷ÈC—¶ Í+•v„ ¸€7u XL Ã1d¯w"„pa¿ß‚8 9¦V`Ö]ëÑ¥Szvœ†Op­õ‹gq©‡.ÿD¡l”­‹€­Ó wùí sñš~,Ì™vçÚ ~ø•70»¹£N-Ïß‚0 xx}Ria™¥‘?ÿ Ï`Ž•uCux½B³›¡‡Ïíþ´*R#må¦+ÃL5gÒ¤WËñÇ+ÏÌãŽý°Ù1ÓC?ßÀ âF9ð=žDD0:,Û…Ìba÷¾šÓ¼Üf²¿ ±`¹ÄÝ%å»lã삤Fq2aªØiO·ÏÀú~ñø)™ ªþƾ20ºw$Û“¾PÜØƒFö ÕŽëDaøxªÔˆ‘Öß|Õ1 iÿ3Ä–9m}˜­JŸ‘Á1¤[C4sg[¯^_²/2j†haˆ–&+¼P±Ge?$éõ;¸ ]e3(ºŒaG<€Ff¨âäÌâAš¸¿)Ø_²XaÔ·ý+rÅc\WœØ©°ˆxüo¿ë>@§Ñ×ËC.Á!ufÈî¨õÞ •Swè&KŸÏÀú~Óó?4§†ƒ ³ã8j÷Ÿá ]>UÅ[Â"­¶ö§o¾œ@TiR…M³L¼a%$Ÿ©À½˜E!Qåü°NŽC‡èlTÐøcèþ¢Î~¢ml·Äü\èÇIòÆØOõoË &4pa‚TÍ3›»QBš&èµoòð !¡xÀ?JÓÈC‹h «›|þ—+aòbXFížk–ý%”7¦1ZˆçÀèïÁ)ÀÒr}‡UZO¶ƒÊ¿%d<2x/ÏÁ~Ñø€-Ö¤Òß8}‰Só¨ìR½¥æäTŽØE°Q®ç'DÒ|<«ÎU‚h9ÑLÉkrxÀoÎR‚BšÀ)‹Ì›C4sg[&^v¢;¦"$Œ3ë*/Ùä6d&õTh à¾QÜÆx ío7|EQ£v ßôO"µê©òë8—):›>T RfÓ¡¶ÍbIׯø~wrvæ–œJνeµ9ÏBc}º®™âpE@A¸…JÑWŰ ùgÚu׿ÏÀ–~qø €4 &áVÒŸí D‹”SÒWH$ Í*UÊì³ÓgäBºxò?ŸC†×éfØ—Õ,››ÄÆô¬kôÝ•µäÄ ,¢ž"¢Î‚ÐbçaÈôg禎üœ›žÁDý•PlnÈo‰Ï½Ÿ…c….…–b@õ*Ëõ‰t©¨<¶Úªöænt#HQU Ý' ÚÊ­3x]ˆšÌßð_m|–Ѓ-î_µDŒ°ÿEÔ _ †ÖŸÚ:î‹á´ókëiÈUªm™ÙT1/ß>)ý»,Le DJÿ4j‡lNT5Q"cÜ ì.z﹆°4d’ó —Ú*KÔõkTÄæäß,jWIÓU"6œT=Ë0A¿ímïödwâê[ʾ±>"ÑŒ7îÓÆV¡N.®VùÈÜ舙OÌÛi›ƒAYœB¬(·Iq}t…ðÊúEÍ&á¦HòÔj‰Fõëjý®è#mù t%ÒçGÔés¦#ôàÅžTÜ“C¿áë¹ÚŸάYÖì–¦?  X^œ K¿ ©†èaÚ¦âS›éa m÷Ï|jNŒÚ/0sxíСPö™æ:-‡ïêubêøì]ìú_mjþ´à;‘ƒk¥ÖYª4Ú !Õsr1y.È4àA"©¾2èyæ«S€á•"uÉW^Ãt(ãz(MŠ6ò™ÌÜ Ûå¹ ÚéžyùŒ¦¡vLò˜^ëFøC+jÞ¡P+0XÕ>C|pvØR_“.ïä®·†Ë/Žõ~Âõ KɇtÁש9›h¿ßw? Ö~tà”6bud¦âv’½“ìwâ†C„Ûþ²´õ$Ë/A9? s®1¤GŽ®¿>Jö¿ƒù÷¢g€°7$¢8ÔìHmo\jJ{¤µ%gÕô¢<ž_„½KÑ‘:®ÿÈmBöµ9ó–‹k.‘/ñ³ƒŸ¢Ó tH¸×•ÌÐ Wbuš:.Ef¡êÎn|$Ô®© ¾0}ÛZ ¨?×›ÌØoZGádèuИ|?pöönÈœ’üD¡* ¨{ Í%³Ó›è“·7~á†qè,¿íä ʶE‚:¸ÏIÔuç‚•œÑ†sùd,”@ˆ6»™—nü×’ŠÆœ4[¨Û¦b4‚¹‘›nì¡A…“»Ú àìœ>îD‚f W: °³…o-c—ÝÎÔUkõŒ£ÉèÂ3.:6˜ß~’Ôf·"bÇ[ù©a7ÜFUV‡#6}j[$›ÿuÂÛ–zX§%¶8E#Ìä¤ãæ –†’ö„Å´sƒh\žÍP\J+B=ÕwŽ:û,Ü3®T¹´¶Úb îUŒ99cÒÖ÷ÛC›Û>h/©‡túÿ”7Èu ]Z;PJÍÚÕ¼-7\\KQ€÷}×b­NßÉØàŸ¨Ü¸Hþë›Ò:'³QÑleCí¨§?|"©iìÓ‰«{Îç6L [j·<"çôËPˆþ™ü‡ì§×ϼŸ…g…4…Ád›|G> :%Üjê$ s£ŸºŠ­T@‘UJ#R.0öÉÂòË¥nöÌ9Ç{ÒËc9b€ ˆ¶Ízø< †!Š#x·Œ‚„–© %ÉPÄàºLÙÂêºP›*ªÔ­QWðv˜KØÅä]’FœBÍþ¤ž¦6õ¡ÕñS!Ùu,niÇW€"ëúò„c¸Â4ãAµÑwiXÌTÚ¼ˆÕV’MÞœ^¥,)ú íœÎ2pñIZòçnì¬)ûä›*DÐý‹ì‡ð?–üAuÌô÷Ÿ~djÖÌún6se(œfwvË©dÓ0Nqõ;f4jìhð¥!Å K""4»‡0zà „­úÙÏ6= E×öý•LãÁž¨ˆï;¬#ô!&Œ”7pxÞ¹\‹?ÏÁ>~ Ñø€b^•‚Eï’‗öX9v]ŒÖ÷µ´=Ì«F:‡Y.0‘ÚÉC”ÙFF|Zy¬>væƒvxÄá Å´ÒMlÛéËuõ1ÆýÛ϶|‰ÙO È$›I\ýW2NcRñO€ƒaÏÁîÔ!e4¸ô•ËÈ2G婵aÕâòÂÔiÄÛ¶ëÕ¥E´íuOþ—TRš#‰Ü”…çä'ükºèømlA‹‰0q5,ýîùÅô37“`7Ášƒ;OÂf§OÌDš`&Ñ~ŸÏÃzgá¸øl0«“Œˆ˜eyÇ ³€?ë"ÉΧŒPðƒ{öDÃ×h<ëÎé%@jq RÈR€è¡s±eÚÄ’Å_¯šAA¹Z¾³ZäU™rÑzvÞ£ÕèÖMzͦ’H^1„€JÒó ìb>óßli˜È¿¤2Z¹&Ý£Œ^e¿f2…µ 3€¬¶Úø÷×sÒ¥QŒå.a' ÖFÀ:쉦£-5üø›IvÃiÈ.Nêð‹h.¸éôÂPÑÃFš eÇÛ|`½’xEz^$‡0ç$zžÐÍòuá4ªMí¢¦Þ_ãxôB(¢Ö…ËÌiM0‹‘SF¾»ŸEB$õ'«ó…Á3/a³Œ=-ZŸN· eŽ'Ew8UŦ{’y4Ì%Õ·ç wñ2ªt” YUü¶žÿ(Îà ÷mÉêMņѱ€û\ÉànN§·ØoLã[ñy¦!ÛùT&yCßâ†^ì‘gÀ"T™\™«k—z¦û70#‹“ ÊÚ¹/.X_yM¹8Ç#0%ËôXX”1T î½?ZJÆì¢ Š|Cß*xÒ=÷kœPuÛ€TîcÇ—9ŠÏb$¯ÐÍ]ÈX[\T §ð³­ó[T7r7MHöJ†`ð¹îi¡þ· Ušþº‘A]•¬_ Ô_?-â,éÙC`Kab›"í»âª‰~¿°Å Ь%ÖžhÿXî’&Â.¦Î®£ˆ•¿ÞƒÍƒd÷¸£Å”Ô}Ê$uD îBLÌ1yÞ•Y\\†teZ# Y.ÁðØ\Ž•ÕÖ° Æh=ÜÊC…©¢^×¾ÙLõuÍ’C$è‡5òM¤ÄÚç¬|±æ?¥䱫Õ8tÊGri4é%ºbmY#Ëc“ôÒ;sïäa1ñ—›ŸèŸqo æ;M Òµä¬0ê vaíRZLƒ=¸@ç£#rÚ[dÑÈG+ ÏïÉP`1ùõKE,zI²Þr¿týJ¾åÍ£NÜŃñŽìûIs–Ô/IÒùâ ÒEËr$#Óæ_ÞOБƒvœSjçó­Ãbjs½Õ24Ü,˜Ïñé¥MR*D‚‚ª==þF¤,šÄ~%È­)]ι¡²Y`.!‘ÝïFÎu¡9yì`€Àa99ªßFNô‡FPÚî×-ž—·îyéç<¼ÖR3¼]Ý Ë'W-ؽ¶|Š {¶Ã›Cî¶æÙ3ø]¨"̵6d*Y%;!Ì×H€úNÇ^ËuÔ ¯Ò¥_ªTÁB#}lIIb®O® þÙ\Ø*;½Œëžv †Ÿm»ÐX½·§šâSCºN²~Š%ý1è´ß«¢±FÙþñ¾rt_]t¦cÎCºÄ»ñM¿Ÿ<0_«¼ÅŽ˜D† óä+±ì 1..Ö¢+."†·Ûfjái+ïR^Kv?\ÆË§‰ÔOuøà?ÿ84¾]˜ÏÙp Eç  N­óXV>»kîÿ)ؼ °”ÖÂ3‰5$><4¯è\¸©dó ´®{SnÂ+’©Š¬4†K.½|1^›(œ ß Ÿ„©~<‚¿è‘›)ƒ4$/:¿u*jÁ`ÌgÍYp(™ùü- Èuy+Í$dž´IU–2Áf× Š›‚œâ=PÌa¤ºå‹ UäÑÝdë T‚²Æ4ò(ܧqƪV…!‰SU¯*X}" ‹ol㈟¿Ä­ B”`ñÒ|6<•¯[ΪòjJ¥¿ÏÃ|'ἑølhÉ ?鯅¨#Š ¥ÐÔ¯ÇáãûŸ.µî"»aÒ·"D2|ñ¶›8Ãx?àúÄ •>†böŽ‚AÙÈõ©«G6¶ZÍ+ xѽõØèµãS5#r®¨1×I1jk+ «+ãŽàq$[Oȉêçùèî¤ EêJZìâã~^úxɇA׊`YTÐ*¤ëÖrÕ ê$M¢Ü©Çö{-§¶ Ù­ Ÿ«O}LÔ„âÇ6ms+C‰²lÿ(OÁÝ øŸ£ïH“xÖÛú Á0ký§¦8¯»ûæ•þ”ÀÝüôh.¾ xÕ‡O´W¥ë/¨’uKÅÌTþyÐŒï!ÁPpÿ‚]“Åe›Ö¿ÔÙ˜^8óäð€¶uDH/Á*ø•¯£µÌÆ*õú±åz/Œ§BÀèZü6`×ܤǙ‚ vÅ|»E–YöQh¹•ñè9‰óƒ7$—ÝÈýj;üWž&ã›LYÆ© ß™0'ÏÌñÿV³‡ëBNf_â^yÕÚ¯žnþÖûR?³{˜Ða:lQýðB´zÓéyyN+ý<æEÃòé ~ ±Ìµy¾°¡>‰ó¸â|?!’ùëé—Û*Ð!u¾r¿’ï» ÑÆn‹({'mK~E3ùúï¸9 »Ñ¢“ºlwÜd›:kÚœÕÿ,ó:“¤„ûw%G_‘|“'VYÖ8…(À hØy}g¹èðUIùìr­(Ò%õqÃÚ÷ˆ²€Míø&Ý´?šÆQu¬ggО1HGž¨5#¶ÿM4ˆ xéê½÷ã| Щ¿òá€ÆÙšçKª¯¦œq/ónòåø I{Ë寘HÀsÝètž ¯l'QôŒv—ú*üE“ ’â&ÂÀŠŠh Í‘Ês£‹K—2,üàŸ[;×fÌ 6™=ÈÔ‚xÓ>™¡âABy'"/2ßLY‘јp€&m¸íÙ%oƵ¸0z¾M+f™Òx¨¤ùDši&Ÿ¬Óøÿ Ù†c°È¡¯„M¤:D¨ ÆÛ’I$’CB.TÄ òŽaSò»rjVv^®NAʦ{ìQÐrI$’?"-öɲßzŽºˆ³û«Kâ¡›ÏΊ÷.%ú½§Y‡…kª˜Û’I$‘ý$‹^0¬¿ñ€+O­ƒ»Í'6\ß¶^q‡ 6Kœ'-)Ãlw~ÓÉ‘Ôä›ôtá·Í7#Üg$’I$~æ1¿ç·à7+S(U ïJŒØ žRP¨…Cñé²Ý[÷ðmùÍÂÜ „¤6ñ·$’I>;S޵rý0·Ú­å§Ex§*L¸ Òø‹ŸY|2ðâæÎÒINnJ&w×­½?Ä8ÝFÚ~™ëÌMÛéL¡˜¤,)¥WöYèMfÞÈÀX:ç‡h\…w`þG;–FJx†£ªêHîï%‡sGl>~•„”˜ºÈ#Ô@áW"mQèùr|uïžÍàÿTfú=’UÌ÷D<Ä‘_«ç¥¸?W}ê,Ðúz‡6ÞyS.‘Ö« €Ež¹ýÒXÏÈ!Êœ¢¤å“;Ò=4“ÅcÃ8²¤á9^5–ª³åÏOXËKí0¿o. VDÃ>ƒ­y¨’žýûH¨­0¨kA}(º‰uÓRb|Õ¤¸¢>Ž’þ Øx΢ÙDãoCä]ÖâlÆe'bWh}NË{t|ˆ•’=V0Ó¡Áóþ¢®¾ì[cZ®!Ű€ÔUoÝ/ÝÝéΧG€¿66ÀèÄvÅ· ÅÂGŸ„ØÍ’R¦bܳv4G­0ºP ÎyMAKó)•ÄÓÞKÞ½AÁÅÏÃ{§áº1øl`«î ï¦0«ÛÏ):aú5²ü3ä™ÙÀ!㇔?eÊãZ£)yèÜs'ÿtiÁÀ¡"6üÓð¥Æôÿ-¨#ª[×Z¸Q½ ÜpÆW9ÆLq|©‘|3Ômd2WØTÒ„äKðω` ×ò}£bÊ „àÓíÐsn‚xÍxþþ¿)e„3")œ¹l'L£¯ÉÇdŠñ„ЄÀ“ÈÃ/ö¥µ)s+;U£Æe÷‹‚œõÓCG" ¥Ô4í•i–jPš@ÌÂØ´oKò?‡°ª´8*i{#.‚¯ToÛÌD½Μ¯@çí_-â,â<~UöÌ[LQKΆÏ0Þ‚Ç‚?J†/„ç ùxû=PÊàeoÕènºç§à`RØuþËp‹bÃ[£ÕQrÝf |üþ¢T Ó(b9½ò(Ôą䩊ÔXƒ+q)b$c0Æe P1ö¦ðšZáøÜZ€ßî.0— ¶zc`¦©´ËÕÉÃÁ¨Åû÷ÓåöÈ4gt@´tIÒOªFkÝð×’n9ºŽè†lZôŸ§ Tn-…‰¶b)èœ]]Ã)Ï šÿ .0ÉP $úQX=v‚óÒ£Öh‰6 tggÈ`ÿ!±²kÙ¦ka¿ƒo}Dä `¿ ßçT8Â~ø,ñSiÚæ"ìãP¢» B‡vPHÜTeMn½<£Z1·#ŒaÇdQ†±‰treã^  Ѹ0 ‹ÕzÿKG$zr’»¥NϲWm"6±o£"î\b@¶z^Ý^Lj†¿î™÷$¯XÇEÒÜŽWåˆÊ¶>wÊýpÃwÿ ãG“_P40d6 ‹—ýÚþ^SÍ~¤GÎàf¤ö¬‹Ÿt ˜¾–ÕcÝ¾Ž¸Îž`ËùBæ±Ôª¸Rü¯Øîu ñçõ?èR<Ï-êÜõ/?ùgÓîVãÌ3ÞëNÖ'LF[YÌøôGBñÝÂÒ^ù²£’{‚ðëÅ ¿ì7hâ(Ç{®øžã0é tê[±““‹É!l^;‘çz”nÃÅb&áI[äÚ‚BXz&暆džÉdqéírF#¿ú˜Z6Ù¾®<³XmÍŒ1½ÿV˜TÒtñIÉSc”XìÞ è83ä¯+[žpx$=\f¯ðàExô,f̰¿òÕh(á„àhœ,ê íã@8™ƒF…'?œnZ}Aµ½75ÝZÆ ÃÂØ&‡ñ¬ÜZ”S}Èú`clÌ«CöúI˜§\)Œò’Ù®Ù†Ä ¿u@5%' ØZIÕù“0ŽÏÔO=~ûO»þÜœVû«M‰28FC2 ?KÁ5Xg%90•ú˜ÑnêìSƒå–횇çö2ÎÏÂ’Ÿ…!µ\ŽH¥^xAºŽßÜ€Ÿž eã@ªfIhR„örFYk|vy3÷3HËc&̤ÞÝÏØ#ªo b'ŽÈ(B:i³í¾˜Ûyäë‹ï“Ýÿ:Z0òÉp’¶0+|’ÍŠŒˆfafCmßþñýÃÔÁ\<ƒ¹xkÀO.8ЇŒtª8^h||¦¨åÁ1qaÈDÛýC¾'¿)SP¥¹’¶KÇdŽ=*xyãâ3œPî"?(Š’K=¸·åmGº4Êåè J[Ä_¡xZï.úòžÒ¹Z[ñ·å©Æ;ÿýì~Š€¼-­q-¾_â&JO<…^<u9ת·Ó{KµÅð;¶ü‰Ë«tÍ&ÞÞ#ñ©”•ᶦÙ*~'S¤«F„¾ ,ù¼Ä\ºµß¹0×é(¨fÄ+·ï@PwËÖÇ1Ý¡ì;ì&C.µn0ܼ¶“Ûœ±)#´Ìp'h¿êîùüyeÒõ÷¼9·®Ô[†AÂm½rB.G­ë†ã(úºÿ|®;º›d‰¡ÍàWÐSÐI(ï.eµZ»òŸ#QA}ìAË¢7 Ä‹ð¾8à˜äF‘,žàw/æÊÔ8"2·ò²Â÷¥’]™Xé®]µo—’ ˆ£)A^Ô%f « ócWƒ2‚ïD?i7»ó3ÒÿTßL3Ì8-’ù99Àë€äk¤…õÄá×Õ­0^T"ikCŠÚdÔsØ÷ÔÌ¢¢Ú¾âx²•pó5K)/‚:â\©òBkÄòc[i-ø*MVI–qo#¼¿ŒùÈÕeÿî Ø0Ì<£mRsŽkBîñ®”]6|s•;‡bÆ:¥ @•ó¬Ã­õ !ðí}eqE†\ ×E3 AQER~ çVvصчG㚺ƞuS²Þ‡©s®åŸ9€ m4GŽÚ'¥íGææÅ'pÖ\á^õ™Ê•Õšm©6ü°QèæÇÚ-f‘l>ª³Üo¨IžKjÓ†ï€TÖ SÇCx£g2]5Ö>>X°…|ƒ`ŽÐh€Ý½Þ 3RxxJ舗 ÛÛµY^™~òEžä|dG Wᾄ8ÏgìÏÚÄoÀ<÷m«ìÓÝ4{šÑù‰ÚÊßú†a6ªuÍ!~¡¥k½P/mB”¦Fõ¯ëxI>\m¥*•»dæ³7ÛÁÂë¶LOMůd:á]OšZK‚ÑÈÆ7ú ZÈѲºT«~`ÍN;ydùªçaev˜åPן LZ•?ǼÌx%üŸï »èÊQ4¯NßÛ 1÷¤œ¢¯üDí}dX}=®`Úé#Ù;[ûB0*¢o€/5á¹qÕ®^/ö£ #~‰mçÔ¿¶CŽõjR«2Þé»v¿ü·¾Hÿx7ÕÂ@ébȰµQcª”H¾ š‰ÒÉðõ “(¢¯dnâœø)ŠCâ*`–Û7%ïô²¨øœ·‹êŠS)›J}¬j”F; hf‡ÿ"ì¹{V$a•Mˆ„™%â:Èå¨ìïÔ/¬bQˆ\ ¸À…ÎŒt¾Q’ ÑÁ‰/"§ÒŠ/,5´ ŠI T)!Šíúû 採©úÿeNÖÕL$&°=Pþ€V40žbÖååÕ«™Ê€7ñ °pí+Ú•…h­ïðþºd¤ú*„aŒdzðiô~‹¦kt}‘†uPy*q] uÅZ¹´ G-Bg#ˆÊ·ž+-r–-¬ó{gÏh'0H™bM|p¨M³(\ßXp°°§¦P6ÏZg6­î1ä§Y¢Ã¸þ/à‚<ÁäßÇó&ëbxûTîòè× Kå/Ó¡ÝBu¥k¹òã¥÷ÈÚšoC¯Q겓½d÷œ¬È‚.w°Óðl™Ð"¼"½K¥Äêqzr‰5MTPÛ ’ŠËþãP&>#;€bPF^¡—S¯¹ÿ}¶E’¡áÀÖ:¦]‰*T£Tû ³ÝéÓF¦`²Òx:„°´1$s@ÿ:’8ƒŽc=¿YŒl ²J6ìGI“F˜ØA®Ttg«ü1dþ¾‘å$2 ŸèÆðÙçð_p²‘ÜAô/el]½œF›tBwìmçN9":m[ñ,¼ëlÔCþ¬õ¿ÉÏùv~ß&®/èêøM¸¶¡ÔJë^€–Ñw®çË× õ8¾Ž3'óÏߨÓÑT ’nnçò±mí÷ºèÍ)nîá°õ¹£½Œ%n 2è¼r‘”gG]ñȈ甶}ý¼–g BJåGÛÚ.B,ìŸbìÌ»°“@s#Ö.F‡|\"Ôÿ&I+28Ç ÿ|‹VÒV†â©SI–89ŽßµFÛÒ2̆@Yv!:aMA'Gg?mY’¦E«¢fA"fWßÎ Ƥ‚(†¯0â’Ôç®Z©3eÜÐwùEæ­gƒÄZ´ï¬]ðñ0x.5ë9±×=öÝÖ™(` Xî²9°v—Lbõ9Æß5ÿV¦Ù®T@Êxex1úÃö$d¥¯‰Æ ž7KôŒ¨·þÞ+Ï뺱·Ui°? ZS…ó7§Ô+|’I„Çæ*…mÙ|R>JgTIDû‹\ª’Yt2“dÜKyárÏ› ¶9Plò¤©´˜{üeÌÇÿ-ÝĆ»’¸£-T2Gû›‰Æ,v°‘c¼ÌKɹ&§pÔðú¿ ëîdÀï¬ë„X ï¶dö[fío¸•>·z†¿f†õ`ÁqÀZŠÂl§»"f9æO¤†£J)“íîP’2ºôŒ_ønÕKé":޲qµVw¤NvYP„‘¹ëîˆ> NÑvgè ø;­¿AÖ#GÚþlå)î“lã›ÑÖr¿²‘ÞH¨=ôc#ÞmÒÃõ öq2eÊÍÿ„à&\x—¹5AA#—tªá?5W‹¿ìž*x§Ó¿}·PlbkŸìUO¯»ŸbuwjGyŽpk¤íÚ¤͆ž Q¿ìM­Õ¾;øƒ_oôí±qA¾B5Üà~>EÆåáÊØ¼ÊÌLŠ5[ «6%$T/¼«À ºÒ HYTZšf}¤â™A .JsútdUéi0…Ÿ3ÞY¯F?N…Úíñ:¥wÕó5z‰ìþ«2ž™¯±ªM`=DUhÏ6 FÂ7·tß¿E4¾Í+#áGºwäîbg%HÇë$,Zmvn­#ù3À”M(œ(|³Óë²Dß0óMvÖc]Ko¶ýbÔζْÍHfRèÔ6²]áÞ|n\A+™;µ‘Èh´ šG´‡ØãůØéKË•«=5øšg¿X2[}§xÕ¤ud\´Yq">ÈÈ@·¹'Ç(oŽözƒÏæùT,°ôØ4ÿcˆ]_ÝŸ›rBÁóaø 3¯(‘Öa£îü¼DÇ5M¯É&_c'éó¡ï^¹‡ÂnrÉ-6ýÛ³§Íþ_ 7ÑÇùˆzÁÔ·S%0n—d¨—ÏÏÃÑb~ˆøvöô•·Ýž#õì·'ô¹r;YÅžƒ÷fÃ'e®€k£“šÓ¤„b{IúEôáò8M™¸ÀÈ*âÅÙWÜ꿌oóÈën(µo–²ôDœ þ‡Ç$qnw.G¶\î-×I½…ê`OhU?„:ûB‹UÛ[­C&Oäý¼¸çzëû²´ÈV‚PÆõUJÉÈò.z’»Óó÷@Å·àe[[ZËÔg#YЂ(p*ÎErY PrjŠhú<9Q@Ô–ÁZ®ÔA~ž‡ váó‚÷âúÞÓ1fìEé8ø<‰jN:PR](EÃUq‹˜ã¾ä>‹—Ü›u2¡.Ïò¨w‰…  ¦å,ƒº^Ë`,ñÄ@p¨+7›á‰B Ï/†ê×AØ7[B7êâ@h½œ håL|>‚$ø‚~!'´~(}ËýY3kòËù¶è»SÊã‘æ(&€ 8y(ŸïaE}É÷åe $¡ÿ; “ÄIg}Rió‘'Á°þ=~Z6$Ò F÷\肞2¤•¡Ù!F§Æ'»ež _Wë‚33ÓMæ<2Š!'øÒå&"ÂTæ|ý%¢Ä¦±'û%C Ç5I±" B23Á8™è ¦)Yj•˜#¿åªÈ‘+»ñ}x`ÌÙì ªTùÕĈ±€ï`$wÆ!^sÎÓ’•î€ôµkIÖ©º±}UKŽn‡{Ëxt)ÞÍP1¬>`|„¶ú%ÕH+µ ˜Ëþ¤À“{×m–jªrkBB¦ú½PðÃÐç‡z-`/‚Û-ªâ÷r´åPc#u‹  [r–If‹uZ¶ùkûÄ‹~…#’ — QUKèxN"˜¿d Ïíç·õ%Ï{=Zÿ¿ûr ÷o&ÄÛqâ躕«Hw2fåbŸ]˜»/ŽÙ€érúCþiéR.g¢?z°G°û~(©g)W=#c~¾·½¤(hâäÌîŒzìUðpÛ’Žs2Ô­¢Tlp׆è»F²§lí¡°þøè…èÅ ÀL?²’}ÆD]„'mÉaÐ2wÃ,BÑÆvÀåÅ€àV?Žpm’6½µž“˜¨”¹¹%HîàÏ9™<Ú;]=Ú¸SÛ'œ ®ÍaW` #÷A •ü—Kør3os‹i}™² –‡æë߀Ûu!‚¹«Ô- ¤'oµ 3³xg0ÔÜ8:’©_ vj0ľL5dj‘7K]³5ù ƒ6¨J§­ù:9mÊ¿ú*ÿ_°½Öbô =Ü#N‘Žšú–@Ð&B$+8›óæQ7äÔðéÝåÊøèùNÁ ª°Òz*RM³Ô³÷¤-e#>… ÷·HzÃÁ ¸44{=#tkiÚ÷$ÃyC:ëïˆ>ᦠAÍéÑzÞ¾IøÝ+"H,p\¯t9ÑT¼EÓ³æo®XÁ*Å ]I Æ–½]g‚3¿öÊäTòrý"f¡­Ü™—¾bûÖ4;d9_¾dŸy„ú¢åZÃ|b.Zs› ©s"K;ÿieúu ñrDQ±ƒŒoô‚h,,a[µþMì½ý¨bb Ç >¯äÍú°=O —s3ø}ú6Ûß=æùAÝdŒi€bndtÿ,I<7#nÞTØÕ\{eÃöÇR  Q´×^ŸAm¸)îòRè dRM¬µÔß¿-ÐJ˜*‚Å­í¢Ïh_Íòç&îL,’cAƒgÐ9ø§üáþ}ʡբ†£Û´8 ‰l÷É:´KoÁ®_?wMK ’â¡‘m݆¥ÁHîÕ#ø‹*ÿ,îLôe?°ÄJk#Î@âÀl-qß<Ó#E&®zÚÎ’ùÚqYÖaË̆01݈«P€N’šV§+\âä5z"@ºeZèj§øù¼jÙ¢kòi n'×þ˜ÆðE[x ÿít¼m 2òµ±cjrE¢ùÍçÍ„œý¨bèkÕOºUñæû¦ÀÁ`C!´p CÞ`CƧ’½Ôåz˜¤;ΔËݦIÑÆp‰†{W}úÔy¼¨=緽Њ͹s—C~¾ôÀdõ†O.‘qÀ”ãMÌkåM°ü)¢øŽöZ<~uîÜ[ÎP#ŽoÍÕyK”Úò\íqîà ZK,$a‚®´L´„XdôÜ©‰†Ñ²üD†äQ“:Ø í‡”híû-DÆùÜ硦ô¾/ÌpïÀ3p ‡šdÞXEË¢ìOõ¥JR”¥)JR”¥F,X†4n4]û4 ÿz ’ìhlöšI̺&câ‰×U¥69ë ÷wòµhÎV’2áµÑ·ÔPõLs¼P: ”·O"qŠKª£FMÂz<·° q#-GýÿY¬@éĪN^ÉFÞtÒYEŒhrc*œêù‰ªzž—a'¦»Ÿ³º—:g7[$•9F3˜¥’£3oÑ{‹_VÒ±…ƒŠh5öÍx0dŽs#<Hi!Æs}IÑù˜Ä]ÓÑûôz‚wØ[© ø·Zš“Óñ°#1¯ÌÛ½¨Œà^ÝךU¢ö,/X6#^µŸ]ÑJiÂ"0úM‡´‹ØÎN-¸UK~{/WÑ`§¯ƒ8Ax‚ r[cˆî(uæ–Å&ÓqÊ»„a;,ï×w‹A ¨:Á[®Œ­ ¶wûg5d ÚÁˆzNÿc>õ†wªI †-‚Z¸&Ž+J‰ŸR§ùmføð)?I—åÖü§¦Ç€× 8µËGž’p~õqšé׸qsÃ-1²ÅËÕ™èEAÇlß;“L5²þv˜AÿubÍyš§mC¢›rI$’I$’I$’I$jÊyU5žx´´Å™ÆÁv KqÞ_:¥qzRÄòÆ~è!ÝO„½/yéÜšMn‡gÓðl|p6}Eň9ðhóx1g„Ô^ìO‘M¸ÑL \k. Ëîá!RÅJ k`·@J/©‡P‹CK%)ˆ!«˜mˆøkœP-/ƒú./PI¹„Ž\Xè–ê¿æìÞÀƒÃYœrS <÷¶<æǸ½ Ì¡µ¾Hh¨1ÝÍàüÜɼ%«Þ ëKC‘ëp-Õ0™ûV3=2€ =»ÿ™jº¼Éä[¦¹dM"we–0r{ùf#&9ðsU$—X91‹©ô+Yž|ÉßF÷nsæ«´6 IM!Ú` ±lÁS¡PÿCÝŒPQp·Ä¨ék j*€·€–¥èÓFÄN’Ú¤™û*ÿ…ÅÊôùd®d‡”<§-^kžþËYS^ŽeÙ'å…šžÊ¿yn˜»ML—·‡£Döûö-¤qùµÞzœc6ô|ZR¤ úÂ묣Þ5w‰Ñ²†ØbMüç½ñM†;Ü«µÝóéž=¿ JÈŒ ‡‰nx±Ë^ñ:~Dl¿ë9ŽÎÎýf[EP 4¶ ¿^^}6ÛšQN~úÞù‰' l9— x¨ôü¤~ ·®ŸZ¢•™à–bÉŒ¢:¯":d&S`Ëï&ÔNß _1¦C}#›Ò2¸{ö_ͯ䎩ð.Fº]µÈ3m• ¿Ö‚±1Rr!àp{2Yæº1„3­¥nžÊ¦²¤RHÚó\C>'¹å‰,I¤v7úÃ2q@ê¹½À OÈnؘkC­Ϙ!tÙ.–c9ªÌl@äŸÙÑ&D á@²wM õÚÆK^µ?ÞßC ’ì/iëÉt‚{ªyêð”šå«sðõÓé±°’¥ìÿ2µ”©´ÜÃd,5–ù»‹¶ºÿ×Ný¦h/ÜcO/¼Ê¢âwáv$«†ÙT‚º îI.€±NÎfG×Ë 8'ÿk­öd‡¹8ýœ(‚Áר^.6~+~°Œ¬_pºÓ<'n‚RüÅå—/ÏYKì ŒŒ¯ÑC?Š‘âK瘋õÝ·IžnàF(lÐ|–’Ž÷£çÚ‹jZâå¼èM‡$aŽªÇyÈÑw¬Á„£Òñ–ú îož(DrMX´]ÚWÊ·$ûËνQz³ ºam ¯xR9ÔE|QÛ,Ê!ÏÏÃÑš>ßA˜ü;uôùK þ5‹ˆ˜©ü»Os£[jŠ@Bi¼÷§hYÉ%i˜_>»Ãµ…d_:°=IÌæ)k|I¶š¨¼c¯ÊpÆžR}3 ¯ÇB¬+ýÎÉ«H§L¬˜0YŸÆbMþ0Qôö÷;(ùw[ÚÑx7†vÓ¥öR“@^¨«É£6ø^$ÿ: þoÒôê¼.ŽªuhówQv555³÷¦¹m¢ ‡*Mƒº¶JCðªâ+ ÷é‘7ë™øB{Š÷@%u \bábqé›lDØyxtT5†ÞèÆ¬.§uÜâ'Ô….#M5°ÖÅÿ'SZ´ö{ÊÁCÍjG—6wòÿC©ìÛ|âÞvðKjðˆÂS)ç‹z×ËÒä…ó™±Iì'8Œ¸‡6>³*6‰S›Õ:bå(F!ÐLJ,ÐsH^ÂF‘àìF‚$V%yM8ôŠ\8…"¤Å¦ñ”•ὡ ÐDRËn})š·Vø¸ûW×lT}¡gœ ˜ ¯˜0ÕN¨2ª ,†{sT‹}ðV‚ƒò«™D{:]û+QÙÊ%„*é‚é죉^ìú»eAb‹upðBË s–¥¶e‘ÝÛSÓöÄ ©õþŠSÅÄ“wÕS±`£‹5º§ç9„0õ© 0à|Ç”ÈqeœSö ý_£ŽßŽÁÆï=%¨M½ÆËN0E˜ @ž: ﺩÍ.<ŠŸŒ1޳¸-¬¯÷PEª™£÷"kDüz¦Ôà ïk¿ Âq´õÇ—UªÅP>ø‡kÏ¢›EÑ]¢Ò‡ g7ìæÂ:HJ;<šÅ®Ô*o"Ï<ôª†*™ä~¯ô‘ñäiͪÎM‰»âÕ˜Lv\+Õ÷5þ}'—Çeï”öàø)%VI–qo#¹ÖË‘—6€ ±í`-ëðxY†'RÔeHÔE[$Ôï4Ák•ó Öìáã&Ô½Zå|‚¹¶+·5¦ñ $øÜßüÝ3“ Ozü×ô?Eøl-ÜUv>ÝÊwƒIUÐ@Bä• âaTX=—´hpˆv4©&)ãÚA‡²w^JÚ ¬r/™’<‚vú:-j7ãôd0Î_ƒªýé“pQs_$Uo‹¬[*Ì&ÉËòP|ÌvüúeŒg\kB7»]0Cÿgþbz—?ø{O×<0änScHŽ)\q•ç}‚æ(È\,4Ùu´Í@ëöýÙEIþ„z.ÌÿXx¢ X0zÞ•µ[øÅCªã£²"|>7’¼· «à²ž‰ SÜ’/ÝRµ £wüÖ27²¶Úf<6ÙiÆü¥*•¶TCØ™{…×mnßMůd:á]OšZK‚Pôm1÷@C»0‰ùh¤e@P0wMpr):cÿ|½Ú‚ªYJÕ:ãÿmô%A€ô'v`Ýt¸’¢ 6$b¢eçEÎ?wðXrï…,F2¤0³Øãmöõ§@ŠçTV†E/Æyt¦Äð ÁÙûPãXfÈ;°–g×4K?ëÁS‹"ú´Ó¿ÕcÁû⪠Šd;ðÉÐzÿrµ<Éð´e±1ðC/ÙÚˆ5•é$»ÝëŠbTÍTæ\g“Á¥bb "'Aµ‡âBªì»öZË£ÊD„y÷ Êe«¿Ôªo¸InF!—ùƒ‡Û(šÚh¡.Ê: °—!´60 e¸¬Bð€ö=¯‰ñ¯£ðªnT§,ÑZÞY]g#ÚSý-(¼éÃF.§sÊn‡¤Wµ?ö‡„‰ªÈ?q×ý`~êË ‡µIýR€a t¯ñdXWœcƒî¡7å¯-õ[îÇM_ÜãRªfdNgÌÆ„]PdPŠJϢߒ .5,¦Ý©,w‹&0Ÿ \Š'”(òh6l½}‘ íµšö&îaÊ£q± 2^Ïd‰åîöªÿ @ÁFK¯zZ¢µ CÌ(ÝàTÇå ÿ|håú-«I¬T?  æÉ}âs°‹·šO|wi™•Xú\B4®†ê*„¬K‡E10ååûhn•uÀº¢.±äöŸ·T΢D6 äŠÚbP°=×™9ÒX·«LÊV;~uÍî=%V÷y«çF™O˜ÒFB<›Â=¤ ùrÖ#æ=§QdÓ.é^‘âøm[ðRÃÛ{Ÿ.:_pP!.Tj_žœðÚÝ þlšèl¿I9èZˆx÷Å­GLù9ìÅ*‚ЕwÌìÂê¬i_í.ÎI@gjü£9Í5T©‚'É;¢Ê¯È˜]½hŒ~ž<áÿ~ß–IðàjóÊ4Ñc ¤íréJÿ‚x€{šù¿[BÊ@Ößî3ùÂ&RÁa0Ç=òª‘ÀûÎÝÛ‘íS‚%Yݓ־],ùs“# 4åvŽ©Ó4h sÊÍþøô0´qNçt/è.[G ’¯ï®£éÒבM§PHöÓKÙnhˆ»eÁ‡¾Äx»WÂmŵ BW\‚ô¦«Ö)å’Ðx‘­H’&›ÚO€¶™‡üt†ïë­>de™û߆‹P²M¤¸x‘Xa÷åòšQc~Ï¡sëÔCÊdð,si£¨X¯¾”e´$È?Ða#íí!vO±vf]ØÉ 9‘ëûv9xÅdÍJ+üÍÿ[ûwO¦ttD”ŸÍµFÕ}-]ïQá"žˆühqI‡Äg5Ó•N+>*ÕÓþÌ´_Ü282Ü»O ¸ãqyQ³Å$†w¡?CMaÞÞ%\^öÐÞo±¨+…Œ]yeZw©Ç,ó~ÿyzI–Fcÿt[_¸êqãÐ6Ƚ¶©¿ltúp€èúÊn…i«“%´6è¨=)Aìkò2âXV+µá­x‡¢Ó¥ôS@Ùúû@dØf^Y.Û7šO¡o?•ÕôÓ­¦¨ÓI}‹Þh§dß-™Þøßû1/ÞýíëQÍŒ¼€ 7Zàk̉M¥ÌLy>(Å 'RSˆ¿Á’y ‚}ôö·ßÇk¢P„'û’ôìÊl“ýèfT‡ØwRÓzwˆhõ]‚é6¼º«¬‹€°@:ð^kwÜ<ᴜ•·o ƒÔ¬†Üå½á7zo.¥˜Ï#–•#ã&îÎÖI ˜“BáöF¿Àµb÷]GÞØnºX¹¸K eù"1VlIB«, Ýí¡îí©iûz‘î*‚Mxˆ*ŠÂðºhnÝuS#U€¨5=*ðbØÀ}æ¿vSè[DZ¼LÛÑËòk‹—±^¨¼#bóÂß³²_$Êgʰ:ø†Ìã×¾bÓ…Ëoš_N™¤Ö6fRMcT¯cUžüü©|ì£mœ|+v ¨ö¾9ŒÚaúŪëJ9×e–,Ï{Š”Vßè‚xe¦QÕknn¨ï(SI ¯ôÿnBÖe/?ÜŸ7[8çÏð¼Z%dèGŠæ¬åO·qEVŒW6™’‰¬n)¢,eM=Ébô[æ™”ôÍ}¥ÅQ7VÝŠ·dƒjŽ÷$X«$å¯iJÎÒ" òGÚ7SÉíì`G=ÁZ Ö7=îÍ>õ¶ÃÝøKóm+š†xLÀ~FEб¯Ü»›Á€9ÎEë÷TÒefîâ#ܬXtÐßS†Ÿjºó{è¹Õѯ8©MK»ë¤f\ià‚ÛT .°Õ¥GKŽ­ÀÇá‡\@`\ßÑfd7ñQUÓÞ•9o3«­ º‹ŠqZíi£¡B°&!4×&ÜÙ‡ÔPÛ+hÖl¢ß…O˜ œìä ¶8døY;ìÓFK–V9¤‰¥Þb—¯[yô~ÂqXKPç m¢òŠ?ÏÃQgá¥1øV ÍÛ3‰j•=2Ȥ§«— 8Ò"©rõ1!¸fÖ5óó|ß7Íó|ß7Íú7p8+9³aôÔÜT„,+©ø|ß7Íó|ß7Íó}4™+×ßNñÐ_wÁ?ÿzœ^ÕÝ䊅ŠVZ¸1Ý|ß7Íó|ß7ζ)[­’æt{.½ |‹º²Y$äŒÿü° àÄ8MXãLDn#SNU0²?NÒÉàý…–=R8mÆé±ƒÏÎu@P\S-¸È*öÛ%à ]‰£™É¼o ¤ŠÛÏ)Ž$0¿‘2 Ñ[îS·Ü§o¹Nßr¾å;}ÊvÎŒÔëgÈáéÿ[½½ýaq:½Ý”ð5’_v/ÿ`ïL¥I¿,n÷†q¤::’>ÿiœ‘~—Ê~ æ"\Y?v½áýu„="ZÙI\· f ôßl]Eý³’ÃG¹3…0è_ÙvÅLjˆÊ“ÏȬñóÃ@ŸÊ`Cuvá…Èö?'?£) ~•Pè3 6=­\7®ojãû6XÛãtaÕ2ó ãVÎMÕOÜvfÊÿ}¡Aâ Îw x.Ñ É¶§ÝgͲhp¬#[·Rm.Ü€kVIE¬¤¯ÿwmØè»‘Ìó2+Uî(&¼«"×#¹/%˜÷-—"XW{]{hÝó2=þ«wâEH ;L÷‚Ux…Ѳ„ܤ‹¤RO|ˆˆ²œÿRz— B¤ÚfS[¼˜Ó+*þuåšÉ1 U…=Ç"“â»b/­ÚĆþGuÚ‡ð–HÝ‹«ŠËV'ÒýaCÞå‡6ó2މ)$’I$’I$&0ßµFàátõ $¤Z?/¤:úŠ Bì©“T_ïêîÁV•Í1@TFBo¢ÿ/5o¢O@S¶@pzÓLö»VFWoÌq×Î!»Îs¡„ƒ˜ÿJ0‚P~¢BÅ~.–µ[3\ó=);KÌt¥#RfÛd‡‚ èw&¡Ã’ @æjb7Èøüúg¶éàÞ »¹½ä,ö ¸a´Y²Õþª‰ ÖºàX·(Éç%A«hHÔáà.Ýããö׿·¤¿ÛÕOí胶Ðý½)~ÞªoHØ~Ö¿Û½·¢Ûµ€àgÍ#ï…ˆ÷žIÀ_K[–,mAa @ý}'cLÌø _¬1øbþ˶XPX_Äø'W)íhŸÜ+?Q~Aøÿ ý*óüÏ·º„PèGÌLÿ rκ(TIßå!«°¦–‚|?wöïÅÔ‡—¿céèTÞ›;…zo;•8 (Ê"ÒÐÍ‚-à¾DÞL+;Ž yù¥'ËÅ•YsbÖ#ʦ_vú ©Áî)í†e©i7w0†OŠn§} nŽç ˆ18ë:žõ?öا“­ŽÕ뎄}l48þu}Ö|¯\«©'ŽìH ½¸5ýÖðºã$nÿ1RC½K¹QÑÒW€Š,=QácðÞåogUái*ã÷s¿ã‡×Û‚ºÅ I&$\DBÙkk !®Þú‹A$þ;·] J6ä\Eÿ*3ï}ïÔ‘3ÆBTsÃHFzrSTfŒÊóæ–cv>[ò·%_SDNŠå»¼Š†&ƒÝÓ½WÆØ¦‹@´ê6Ú»€ã ö.›ïxÌÈ(ýqxFÓ¨ðªJ-­›Šy„t>}ü»0hãâFJ{£qDNù:3ƒöI}wr8b€aÓd Hñ³ÛÕ5´ƒóÝC!òmwœ>Òx8ÕÊ|äˆñ=βø£ySQ˜¼ž{ØœŸi]å%;Wþ[;\7©Öú'è-¦à><‹tYXƒäî7M÷Ú?í÷FÖŸ Å”ÒP#ÙÁƒ‰sS¡²TCÉ0êÄmJ(¢ún  Ž_#ŽH 9FxƒrÝ7Èõ…Œ—„êE~ ˆø±i¼å·Èfûø®.Ði âµË‚Fû™¥›Y{´/\º"Â)`RöGð°1¥ÐÏnµ5QufÀKBøÐcóÀ›CÈwTD!ZÁPó²²äÐ×?ëoæYd“ ª‰ #ê0Ð"x¯¥l{ÚXÖ¡ŠoêlJNƒ‰D¹?øq’±~F&}î ®¿³\ûˆ YcáT«&i@%àŸ4gÈ.Ã$nÓK¦5òŒóB Ŧ=}^ш†¶Uê·+,QUw®1|H¿£ÈN­îÀ+_<7fuì‹×|IúÃ2θðA&w:ÚywËÖPŠ>—6šÔZ™¹’z¶üÛͧn'Ó /5‡›àýä l€ùÃRâ®%8¸h%pÑQ{¯hwMØi¤÷3¦@ðQƒ)"7V ºQª‹j!j Ë#OƒÒ>ÔÈÏ•ƒÙb®ß<,3Ìy‚ƒÉ5[ý‡«î“Ž5€åéUž¯Ðø›þD‘#8r)t»Ù•WÌoeåH‡õ0”‹@|#¡„,,Ù7ƒÆäÎS‰‰més>j¾£Mà!¿‰©¬b€G¡L2™$HwýüQy2“‡9VÈ`ÿx%Q€t¡»ëÃ!&4¹½MÚéPÎÄÃËs¢¿²y8™ÞŠCs¸øŽ›¥ÚZ×Õè„¡Xb‚>çŸ5ßíì}.AGiÅKE¿Ðk½ÇCøH«¶£òa[òÏuYü³zîåÊ©É2åu¸G"øm~p„Úß*«x×É÷Ù L–Š³ÍŠ9šï¤è^"Â3/Ö1EºØò¬¬äR0™ñ wá|¡¸Â¯©Fõò„ V3fƹ-Éëw9=@zÝâ=÷’jêï«ev”뎔e<6ÙM£Ã¢”+v©'E‰"Ä[Žü¨á_þ\[н.ß!Ûðt,Xøª42§i¾ÎnTÓ øÚëÈ Qþ\ªmšážúÈncê‹öü"¨‚èd7_Xûiƒö×hfúÉSü#¯äëöÌÕ1.ãÂ"W±º$ã|”lÎ_Q.ñ`™‘aárñY‡Iƒe®ö… ÛJªQjÉ`þ¶K¬iV7†Ã)•_3·š(¶_°;¦¼oY‘líˆAíXÁÓËUæÞþ5AÉwñ^[ISå.#5D„Ãp.ðk1°§…°ÆçÝ,ƒ Õš«Åboy+¸;½$á¥`4Ònˆ ЦÂÁE*Š[nì@l=³a$.bÝS»ÈÙ÷Ô“ü®ÿzÙãU«z¢ï¢÷ÙG“÷Z¸×ú*TŠÕÕŸÝ O¦”÷f…†_å„ üœ >¡²”àéT'_ Ùvð/Ä·øÃ¦(ûrx)7œSQ‰ ì;n_Çv 6!ÖÎD;Êõ§¹²u%–ûa ‡Ø©ŽðÏü±Ÿ6à<4-y±œðôt‡ã^IÂ=„yÉýýëøÅc)åñ3ZiUoɱQ?¼X˜ÚÝ£`syg÷jg¼­Jª¾ Ô×ÔàýßÐ ìz1‡m’2É©ßv̯½SaϞءqùO!¬A»ÈjºüÌRnv( ¯^[¾\”+u÷nVrJ\ nŠ·“ `ç)eeKY…Ó¬pºý°Õéd4ƒN(¨+zùh€•±{) â5?™š¥S4b£BDq+D‚0¤x@þ/äèG™¹¼¥×éÍh–½×2ö5_ ª™J<&‘¶FÝ·h–ßÂhúÝbm‚ÎÌø`VñW‰Ï§YâÇc´ØÔ"ö!‡¥z:¼¥~Ôs¹û¹\PØëWëCmrÅñʃf®‰Õ„ä§àï‡Ø¼½(³ŠÄÍ6ºkmâï†W\%áI—ÿÊ­¢®žª7büq„Ø¢]R}¶Ùî=a×Êš¨l½d³`E°MÐ'@çƒòОÐk Á\psOQ)G&…FBº±nÈ‘ÉE'×]#™cø q´ÍQyÑ/ ¸„ÚK-òÖܪ(}æ£ä‹³ì¸5 €lû¾!ÖUÌh$`—tÁÖh â{-þ¶ˆb#¦]˜*/FW·æ(¶¯¤Iÿ»AI$»ð¸jœËNwûÚ8c`|QÄ ¥`œ ®VÜ wYh¦ÞkA&úü©_qh¤¢®~í5ø„4¼êü9;Ç—óý´Îf¬kð×´¡ù{4C)ØwÃ_D "ì±Òq\ê‹sËÝ!ìL‹øþß7 ãÃÅ:šm® ¥u_:”ÜarôBÖêHÎH{u!Õž8ÂÉ9¥dTi€òX C¬Ð@í£‹ o*&À`™x±hÚÄø‘ÄNÓ œ Ï!Dp×fp4_—“¤•åUÂþt]Ñ÷n?ïŸÇëï…uûv(œióc?5Q‚ò3’ó¿{,}%ᙘ~¸a¤|»OÔ!‘š„×B”þ¿‡ofÒÿbt•úÕ4aA-DA¤ƒbV—÷"zX‚¾Ð}¯™øí”–=ë,ÅgÜ )ÃÜ"ŠêV FOíøí$U‡âƒg@àtîn[úë¹è…íþªö½¯ý¢m>½çÏÇY£ç¸Q»³àö\&‡¸ÛôÃÝ‘íR\×&¤€†¼©nW ,ySÿׯô&P#ÿAÿ?÷.>œõËØ )?ÿJ1µ)Kú i TY£âí „üJ'.ʰ“ —7ã¾âÁÿ`Äv·yd•dW- P`ÿSÈ-ÔyAÑ.vr6mk&:á(fÀ!äÐæ#Ž.[kQ”Ü|gCÔ!.B¤iro³‰ÕÍ_È›}6©s1a؈JñyD.ÐÆ¢@ð¦I­>p¹Á*fþÚ'=f²j­‡¼’kˤÑ4,ù°žl±FÈâÝÜ ¾¢¨nUYÁ˜ *ä;ïí¡é•UÿEO¶ÎÊ 5úLªÖÙðØk€¾$Éêö>¾’…Î<®„`'ª½ó›Á²Dr| ö¸¯>¦ôlºƒÿ 5HtžMæÈû…‚¤v]¥uò®H‰¯¢dU0~‹T?Ð?Ÿ`=¼R-U2¼!¡ÝòœaGŒ†ÞlÕüÕL ¦÷ZéD|9‹»4øYmÕˆ°ûEìKT fTö£øÐOËCýÍÃ>c„™XË{šà̈¸ëôÙ‚¼‚Lß”ä˜k ½ºnò¨ÿ~Êá±fÓé®î¯TVη&`cD4Š=¯cLke³?Z(õT»iiñ(â©ÄÎà#8†,§[¦tÄŒÍab%Á¥—z³êb…uÅp6\ñ“i¸éö‰­çÊĬr¸C ʱ ^ 8M7@Jf¯Þ¿}>NdU>êâ$ÆÍÁË÷|ž!1‹l?o²iß¡G”åÊ¥¼1íûm(0¶¹Øwuô!$Œ=n}L?7*4‡·ÔW¸¸Eý[äžd¥7T`YPɦû?ê`÷˜Þq¾±ñÖûé¯i£q¬‚LžüO¯TrJ‚žrÍ?€åŒYÈW{N¦ì÷‹iÿcB4h‘h1¼zà‘‡ùýÊ‚‹¡ŽEf ‡Óÿ^D'-–ðøë’éqŸ0Dríx‹Kþ äb› ÏSDéÿ_â ó®¾nas7#bÓpäõ8¤çÔfUDýb¢De%ŽòsÖø ¨Áá@š þ7ÿ?OÚ£»Ö÷&6ƒêã:‚Ìxï‘18¾ýøÿ*¿¸Œ«®_쩟ZWO­5Ül§I"™å ÊÀ ³‚@/‚²F@7Ê¡ˆ_)—ÎÆƒ·ÿtQ!'`^7)(x5b„‹ÿ¤ëÐIÎ/:aÖøsDbùŠÉ ‚™t‹°¨vLÉ4îëƒÜVNчªü{ýˆé·ÿmSD²Ä4RðšC„ݲެò0ç¼ÚŸ:ùO;ëðî§}ÉDÔ{}†:“VUÐ]™Ê ¥‹2‰ïåaå “Ã3‡ÐzT‡1<ÌȪ$¥¬B…}t9xƒc/Ö+‡ã}/߬B¸„ÍW¤®J³S§Þà“¥K—#ßÇPªWp7'²áq`Y[ŸÑòðˆ`rÅroCÿ{<´3¤Í@Ô¹2ËíµüÓ0õ—Ù‘¶Ÿ4F×Î1“2 ’?$w*§?{ÊÅó§MDÎѤq(_ð”}RsÍ^¡ƒÜ_ð‡/oC­Ñ ›·1›mzmnn“d³)uÑ|Âè'¼ÙûíŸv,޹D‚SK#ùØó¸ÇØ—ƒsÔÉÔÇž ÑøJ%pšZ :Í"/ªH$®q¾†Ç}&^&²|¨¤£Äxj©Î‚_1o¹¥nËæ"!VŽiÚíSþr¶o7+59ÔµèYŠYù,4¦Jy’›Ê}}.3+7"«º>´>3qçºÑB@²fǬyJ¾'2Lúœ!V÷ª&n·¬ýËåäê&(ËjcF¹H0|ò»(63ø¬Ö!&ÅÍ•*Öÿ08lé+{zùMÄÈý}Ƹ¯ËïC:º9‘ˆãPlŸóYÞ™æÎzöLÑ^ðI—™Ã±Þ´8×ÚXÆB€¥ì vLm U#—1Ù@ÃÕAUMÂÒ_æ—á³T­,ÙÂqžüÆè.Jtöe[«À´’ÍZ([M©Q2±v\2Á™É£ÆV³Z ‘°HnP¸´/BÀ3lñ÷{¬«÷£ø;T¨v²d›çÊدËÛ#‰JÂYM2Qü 4@™)®,\S sâ?õðni³O„ÜeÆ~ä6-¡5ûqA.WG`@§]êš=»ïMY9Fm(¹uo0][Ú¤TŠ1þØyå#çÕü_ˆ»0R•-õôqßFÿQ¾³/º¥¡)1)âM4è}Yo ÕWS­å•ƒi²ª_b3¨®¢ÊŒ®›þJr¨¥ïÕØ6bòd×+µUóåñóªú’L¾k$ïoÐeYmã/}Í ‹sÛ´|˜FBŸ<%D%07åpYè ¯ßýä°KüŽ[RqRhdbHé[d¿å³`–¶L²»B‘VÈ…Á“ìî›_[Ðeïb šÁq;“ER9ÀmeKÏ-ùÎv¯à‡ÅTÉ‚IÕ{ë™&öA9z¿ã¥Këm˜0êÐËЦ{Äã“I£vð}«Ÿ™ùDöw—vé¸ &ó áîÕ(qÀ%¼vÎ_d\eð'vi"z…ñ,Ø4%#iØŽ f Ú ªß³êo¸ÈöVÔíÌñ€‚—êCÝ›ÝÙ¬J›eÿNí®¥¨ÏñÈ!šØŽ›m§åBÑÙã/–Ûèì¸dFI§btbÓtÍqˆ T'«á†ÍV8n`öó41Šr¡cW4‘ YT j?À½5{©u\ÖŸð3ùTVùoâÝßt$UÔŠ9Ü€ÂÕΓàÿ+#E-*Öñ…é=¯‹þǘ‚õÝ^gs…þ“Á\ir;ö9™¸]JÂã‚Ú9\®Ød=XQý_Õ{·´É»¡NwnóêkÜïVo+¤R?ç ƒ‰ú 8‡fÖÌÓ-GÔ¬FO†ÆPæTHNö¤ûÂay&†-GÙ›PÙ@0«°}Á‰VŽzíw"JÏ/T.Ôß!_·É~‡Œ£OT †Nðœ‡4Ü`’j6ëby³1 ®LÏ•'V;ì£Yvm1fލºÀå »#2ïë©Î‚±%z#”JYü»lÅI×ËXÇKÕwfuâBÄÉîXkÏEMŽ*(‹k¥•¤D1øå¬¤_'÷¹)Óc@žWYfî…ôenX¤ì…ðIq­]Ï6Ò{Ö˜£@Ny_-{ÇkkŒV:P˜>¢µ}Ñ£NøÏ2j™ip¾uBMd»Àƒ`(y:9tr’…ƒíÚø#Ÿæºù(ºÂ[a 6j‹%d‚^­ŒP傺±cÝ‚àòÁ³ÖÐ;䯿ˆÄ~ήxë: 9YÎQ-4/¾åyIÕê'û´+¼ZÁÊ›f`Šý4É©®±* £\fÀ„;c~Ɖi,jÌ„•äààˆò¼Âmid—Ïï~ŽÖþœÉjIM¦mgH_¦Õˤ¼šŽç¸yç¾ .ÍúëÃ'ÇÏÿ}¬sKìÈøôÆÔü¢~ LeZÓèóxoûÑM²S&Væ½QÈíÉ1¸‚̸µÌ@Ñ›Üvuœ×Ìm=xoDh ˜ Ä“¸PìúF†'‹¸ÙkùCÍ*Z($ìÄ*þä¤Â=RüÓoR·0YÕÝT¥¿ãOzî)ß A¸O…Y9±ª³]€è>¨HŠs¯KK®]æmƃkݳh,Sò{ð¿E¶ ‹Þóá?êPšŸLÒé}˜Ÿ‡ùý¬ÁÒàA™r ³…Y@(9¡my|8.ùS¤tÁ†ùJžŸô*Lx€~ ƒœP9Ã#F“½€AÏ3ï B²LY‰Ø“ëñŸæÈkÇóù1îM»ç)YqüP<NTžÔÖÍ•¢Ã~°Û=Ïý@Bä;Ñ> wQW„MßX¡½wðL _¼«Gb‡I2Z_ ­Ëªþÿ„+)Ž2œ:ú`uÇ…šÐ„»ùQ&dÆ(K ã %U±¦Cq¥4¿·ˆR²Ê% º¦øÜHbIŸ“ڣЄŒ‚½‚Ÿ‰3„ÐÃôÁ–v(täÛ½ïäU\-«`2DO±bÅ>‘¹?¹ÀüþGè¬;}bëÍÈ ÍØ«ë\ØèÒ{jàú°óÖÚ˜YQ¶Ôá¬pËîñÙÆ3<ìTu/üœGÌ~ØaÀð&0ˆÈº ú"žŒA&è ñ™ FÃý¾j?xØ—–Y¯òئà3Fƒ?9ª1j¢ æ6 튉À¨^®ŽV iίá@3Æ+-ßU®wXÛ>7:“®'Aƒ>ó„ýR]c Èáôeça7Œ€¯ÉôàèÜHiTóDòJ!)Þ¯#¨€€íÝþG€Ä3æš8­²£é5n ·Ý‰bP{4±Â}@jHŽà6g¹¥”Ž©ðø.®0DT²ú Ë Ð3$«ùî¹¶H¯õû•¶1]8x º<ßÎ;¬+¥Ÿ:ÀȼË@bGñ»Ó³}ƨfí#;ªŽnÄ"8GÔ¸²ïd’A~ ÁÌÝ©fÛ"oyÍ:Q'“ÐŽY)P*`|……Ò3¨= ÷û:¦-^îúá<®?wÐí"®›{va¤ôÓO®Óu;·2­Ìëämãþ<`õsþkÛÍUΤ2~ó˜Õiu6?/1šˆÂÊœíµ\X´4J¤ 3ê…=2å*ל ‘Nâ=8P2ËÞ:knK0nø?h¿‡&T¼@Žf§¹Kæ#ÑUŸ‰rœÓ˜hƒž0#N°¡‡8ÅD/®ø ô“}:n?cFLk\Ëv$ÒÞïÏJEÿ†ä` 4¡Íê/ 8äi“kO]7Ë: êªv"!fc^+^#îlN¦+¬Ž§4¯û‡Ä« CÅë{¤t~nK.mEŸ„€¯R÷±vâ¯kýüá<:ϵ‘N\¯W-ÅèÄr(·~¿‰äS¤.Ãx€’ŒÅPcP§›,ÚNs$بԛ”ûÀˆAKC±£Ð]àbñ„ÃÒßG™EÉ^ݶ°íðƒf4Š2å•¿Æd_ØV@gñ$¶Dök™¾D‡`3mÈß8Bá|~¹üÌàÏJÚNÀ£Í‚!¤ÔçüæÆþ¿§òѶ÷ ཆ¸b`[²Yf‰üYHËV‹žæ§…Knü˜ÐÛäìÁ†jŽºaáèøÒï"?IV«Úø ˜èkUÏ^µðš°Ò<.Äó<oSÿ€D†ŽÚ'B$“{ IÌe9 ¹â½ Ýú D~6,døiZÞX¸’‹qV_y4gþFî,¥ƒ‚Á¬nyÝ5ž¾B϶aòH1NKÍ:wÏç¢Pi¬$bJ£P[Ž»ÁxC¿ÿJ4jÍò©§@žvLß.•0z†¾vÅ?ùsß*#èüã¼°®žª7büq…g˜váûì,³Ð_MªG4‘¤\øváHçª+Þ)žÊV”bò§.úQnGüÐÝJ…ÈpqBÐHÿ-ï©ÛxŠ(ú5Aú)ÔW.„"`BMÆ9@kÝ?7R8¯¥AåDs=|SñÒ×{"]DüKàRã™ñwgù`ëžG[P£ò),\Æ uPàla6cZÔ%.QÁ•Búå;ä^MwóXN?¤¢R®¨aµ£¢íý$­û€¹{K=QªBÎiŒí\n´60ÉÔº˜M$hÓµ\:Ã\eSþÓÏ‚:ÐA*pÚ½Šã)‰éJ8MP\¡?@))ýZ>7ôÃM÷=¡ÞCgP¢•>ÿ/ÙòjÊ‹HÝ„PDœ–½¼Œ –¯LQëÀ±ÀŠ*Zó{<>̧•±8éõµÂ—9§b`Ul)½Q ~š,+ij#˜ø“ù£[ïŒ"ÇYLxÙ|±¤ïÃô䂈>½Ie´æYZ;k(™ß18r˜íäo"žc5&6˜ZÛøÙkl‡5, )ÆN%#oZ¤´Žß±ŒÖ¹)k´)ïï¢Âps°jšX½aB•÷Lz¶‡ M¶_"ÄÕì–C€E?4–ÁHÉIÇÇmÁ‚E7ZÑhŽpÞ½£Ò¦^q¥™è-Y‹¸²T “n¸m9Ô ^½Lr;ü^wóüd¨ ¸^6ìeÃÙ©ÂDµ‘—A¬_Oì:ão:"ƒpCÓ¯·Â,¤ÞÏ4ÄeÕ»?Ä5áS‡oF‰ÆÚøâ1rÀíœÿ; zTùî;ß)ø‘×vÍî|—ÑÀš”¤˜®÷êÙ$>UÇ[âºd0t·WÇäEpˆìGÛãIÙÕ3ü ¿Èy¶gó³"ór½ªsÄáürã(Éľo׹̈¤¸ð?‘7O‘{‰ÿ}–¬¹”QöµÅ0ª²–œ«ûMYçð}úV‰kB, —ZchžÛ©(CÒ/a’™5 å|>!mº¸9È÷_?ÐKcgÈ<òeëhè#‡¡ílÊy ÁŸÈDÝ™? MØ] ý|Úe„ðBL›Å4·^ÒM‡ÁïþÜ&”¨¦²1"ÜõаÆ ÊÁšâ¹P°~€6d¥8Lö³Ð…ÉËæ2»›GlùV¤„»Œp@°+Ú}"~, 2ýZŽýc‘½Q7ÿMhõ8/ùÁA]õ¡B‡ È3ò×Çy€‹š ½ mY%/`GWûÍpn¢û ʯÛÃ' ‹7cr>Ò»TE²ƒ€oy_ ôk!P5éA8²wêëÚçpÔ²…”РHò·Ç¸uùÄÄs`ݪ\hv¨8|÷¯W;õw /¶\º(®s²_ZÝx ¾b]!ûU¨ i ”Y,°ýkk3.T 1 3Íüî‰8BoHׂãúûˆckÈåôq‡òš$¶RìóÿoEwjIB–ú4¥›úT¹ÜùYÏQ Ê¢8h¹P¥×‡k|‚À²Ñ°‰f÷¸6ÞÌQ ›U@’]Øêö)Å›3 OGuq) ùI ÔÇ£×Þ2ŒIeÿ1½yWÉ7L©ýÈó=ˆ `Ó*pG¦{üò%oå|C&¿ÝÑ똨~EùB΂ÿ¨=AªQQÓ/jε-)}žvÚõèg•s?ß›|NòWŽ¡K-!Œü”Î(È&d|Ba澚ŸéŒbÔ<»ôŒcâÃ…oU‹ë/L‹ÜÑÞdšÐv±¾•ôä^Cݵ[âþ×òLšHÐ ‚1´nºÆ7µ¡¤ÒYçEËVÏ™%ºViˆ+À½T`wµƒ¬óW2¹Œ¹t¢@#EX²ßRºa9§ð¸°q󟈄‘%XÝDR*HPå2ÈÚî¼Ü£æpÕ7×Ôèvçöh M³ÈK¸Ù›lK€œa 1Qb×8¤>•>› Ïn:ýŸ‰:KpxH,^µI õ©‘ÜÊáüb—óÕ¬±ŽÛŠy:íùÃHQZÎ^#·§âó‘ô¡Iü†Êë¾v$-‹­¸?ýþe×0mm%ÆŸ]oºüE V¤GL }Ù[™ðÚ>h÷úŽÞDœr MõÏïu™K⢠#f?q»TÐUxC)Œ´±]‰”-ý}ušYÚÓè&Øe#‡Xzd+ˆ©«£÷¾5ŸT–m¢s”ù–k$ä_8Ø;õ=Jþ²oH“¢e„ª„Yñ ±gÕ"x¹œ, \!“]n¡xüŸËº7$ÅäÂöضê»9Ž€]I”HR0©/GɃP.P8¸ñÝÔUõݨ5f±4A) —Üm“OôÔø'h<áv€õò+ꘂ»NÓøxîÝÒ¾MFýǽÉO;Ð\+4jT¥:ÁGIÊÃRLÁdÅšá.àDŠK©À(׉µ?‘6‘­ ÔPÞ17» FYL5 ÜÞ²ì?PÿÐzT‡2¨À¸æèA™ºäWS5 ›U|¸ˆFíêíÎM,Q§$ì¥íÛã{{GÒ¶˜P¼©h¸Ilؽáä×y•¾§…HY¨?¡£KÓ!P÷Ž!Ò%ú±ÝÈ÷õáRÀTWLUýýþbSÐÆˆwß;ÐðºqtÙ‘¶Ÿ½'É-É _l¡¤ú4üY‡c¿í䛫̒ ‡VÑßUL[”ÙuÎÚ?¼‡ø{ •÷ª,ëÿZ&m4‹©9õœõuÒ0«‡Ø”d­ÝŸ•!/óe¡íº|,ëûêg•]S¿ ƒð¾S\wcF; ©ÁG(·â+³{fûJPýTѱí=Ïß}›ßèÂmgkd† ÔׯË/žªü=‡ÌËE?Tœ•€çÒ¡‰ËÝ߬¢ÿ6B¢53Y!{¹W`joŸ° ¦ÓÆ¥‚÷LZ¥íáAꎡ¦üp®ò2îˆ~©ÃŸ²Íc‹õ¿IÔê_‡K6ɦDˆÉái±?¥#‡¼9µ{®jèD ȶ¹X4äµ'3ÚØiÈ<–¼Ç*M˜UNÑè CŠˆËµQiPÖke×áÙÐl]iýc§Ry„u»±eFžüË,µ `Þ˜ŠIŒÆ#°kÇÚe ìÐè9=U6¼ãE¶~˜èîÌu•ÿg«†»¼Îy»åÓ4wò/*´uÖ{P%ÁÒSÀEœ¤öeúÉn‚dcº îç-Û©ìîL)¡sR>i}7¾ÈG,[ÂÙX¸º£x 7É>؇¢A‰¢ÞFõ+W–÷•'íJ¿îr—w1ü¹6¿"Œ3ÆÍS`»0l'“+Ûu§ýo€›Õ ?@Ϙ´ÀÀÔéÒˆ3XUL“î¬Îð^²Ÿñ±š–Wï\®‚®¶.QPÁá¸Òî¶igó}5Ê+Ö€èû0CWH§—¤ÏäÎ$& ²bx9íö÷K-k=-Û.ø$Îÿ„ÈAh(ìµ!Dv¼þ¿3•‚h'|ásK{_yÞwÐLú«9v¬‰Äi·þúçiª€øÇjÄzñáyt͉˜Ó›´9ª•‰å+¾Ž$CÊ6tß\|0iö0–†$PI.¯¼÷ D0?بv@ùÞ‹Õ±„š.~¸¿¿½âÔ2}óiäÕ¢H'ÉGôý7-®Ì÷èĆ2Д‘Ö½"§…ÂòT"a+XÜYö¿§~×çaÀe:¬Ft'ÉX:µ)å£nÖAΪ965ÌcöÃlÌ%P›Yü®LS¥·]óÊÃD>/«p#!÷* Jû›¿2fάÞ#Ç#^\4ÖòÙí,FW µmìôžÓShA<ðo4¨í†Ø!:Ñ”D!ÄÇŒ4=½“ ìï­ìÏ[B4• éi³}GFcó.Y£v1Ñóžµ[’ƒ¸{Ý´ 3É"å]¬[©âGúuíâH KÈæ"÷@µ«¿*k­†hA ïr³ƒÕTY¦Yìu¶BrW`JY.À:{+¾Ž†‚W¿.6 Ä)™s“ÛL×,ò+gZ·ßƒ«ô\ˆòev®WÌq! ƒa¢Y<ÁáÄ+ÿYT´‘Óe/þ©Ž_”¬HWÜŽ¢v|Ùb i?›;³bôÿaú:SOˆ‡v®G–½yyœo KÄ’<¹ßÒ‚Œ³¨˜€á ­ô¤ýá;"­?e”}êóy.¸Àï+}ù£7êÈÁ+ãö×_·¥?ÛÖoíè«¶Îý½+þÞ¯oH¸~ÖÛ½_·¤¿ÛµààgÍ#ï…ˆ÷µ0ûAáÖ;Z…,áD›¿­‘¦É{ÖøÌ%ºr‡=Œ6á Kݺ¼Ø ?xJ6}34òN Â^â`ÎÈ'mÌ—M¥Û‡Ö…àHF›£¥ûÙÝœªê\Ü¢3§ý Ö%¤¸NùäÁr$%ö+_ pj¸—iý©«Ñ^Êä½@È&IkKwÓº3»Üº\É¥¨=9&–°¦C¶–¥¤ÝÜÂ>NÅŸÃdÿç ˆ18ë:žõ?ÿ©ØJ­„‚äóî™Ù¬»OÐÛúG µqÙ±ž‘ÔÈsýµ“(…Ê ”B¸Î„&}tÓ;§5Ú|Do_öõÇ‚Q´ä†,ò1IÔWò»lx+Œ(ÒiÙ²L4;¾ßöž ¥Û…“qÑΩ+Ì“ !E ? fK—È&ý%­á ããLû÷•mY•T,aLÌCÝbXŒ/1:ÎbäºOÚÇÔèÂMfa_˜¡í8ßá@JQ:ÈæOTŒá_#‘é¢7Ðgso¢t(x}ô*ð¹†ïÁNë'ú}iy1oÜš\ücÇ<éB+P…2…oð¶ÁæÏfкðÒÅîñ ¦Î¨?Ó6µIl:Cýö‹¦:<+àEènz×,½æ¹ws‚Yûà`µÄÅΣ~´N¹2UFÐÄp¹fŸ)uÙ­Úƒlo˜€Å¶õÄ<6ðð{V b;)0d¸fQÙuð¦}Ϭë‘è_‘Y`µ.Ø•2 «ˆÒÌ–³¤”É7”d=7¤Ë?‡ZFfh‹âYPC¡š_Þ‚ðuò"ñcùèž#p-#j›8ÇTè4-þDjEˆN ¸µeçÆUаbUÙ%"LÀêÊQþJÖhü Â#µCŒ¹Ð2”^SŽCHœµ´7àðøpHy/ó>Œ; ¢RƉø›µ…dÆ×e—Ã(þª½RØñ'Û1Bc9Ôke¼³lta Í?÷fi$Šä78 ̰˜êÊYËDÀjS0+"}c×áïóƒÜ4M¬×äpv0¢ïUè[qÆé<º}äc_ͯúÍ ÚfxHIÉ ‹.dÃ8²°ÖsmÆ6£;J$N½^S§f;Õ½®˜ŽÑ=fÞ¹&èè#¸£˜Œñ,8<¥ ¼þ™K¯ahˆG®§+¼©.æ0Qi*ûm¹ÌÞü:OÖFY?M©ŠYFŒÛÑ¥jƒ˜£šÙ÷ö½!Ž7…ʨO¨b_ÊNï^Wnt1p=L{ëþÅQyBqÑ,®Š¯ä¦½m"bjOLL‹Åš 4ÄS¯ù/fÚ|\@*¤í1³^_Ñ‘–†³_²¾Çßæyª´Ñzž}ñðB¼¶’“™@Ò‡Œë© TJ£/ öëµ'½˜ÄÞ+KÓ;Çÿ#óË©ƒâ”ha¹Oa½”“ô£±ÃöQ¤ôÇ É,§s¥æ§ žs)“4< Ý‚º bjD¨ŒA ·m PŒM²G*åªÀ èÍb8!„+R OFš#úà°&â­•x]!X*:*ì‰2w…ÑÊ­Ô™¨´!b¹>rrWÕH°iÔ–D.@9[tFw¥%¯ÈOùu“‘é²ötSƒ¤˜ÚíGÔ=Ê០+å²ÜÅIôÇàò/^KKtH̘<=1Y7ŒÆ³¾·0£ÙdÕÜÑ1éã>¡¥hKcîRQ°!MMz\ 6g<ß«à€¸ÕÄ:ôì¨ü<Ùö=˜Ã‚6ÉdÔï»f"ÃuïÅç¡WÝNW`ûíË O{³ ¦Rr»t¹™m¦ÉR¯¥\è+Êçꕎ<ñAçñ•½ìŽ7:Åd}&e”(&ü’ÓÒB”æJ‚·¡–ˆ P‹²®#Sù™ªU0cF*4#%bCxÿ,ý6LKüHQ¬ÜñMU”ÉSÙf¹Ïsž­2€0 H\ýœù׎3è-]÷¬ÜMDÙÑÚ¿·nøuœ­W–ßjüŒrœÔ"ÿ_ñx0¼äû+àyKÏÏ?ÇbÙ‚·ÚÈ/YâŠôb(‚?Á†jŽ«;+åÀ4 ôæ÷¤¥^ow}Z KŠÇ¡ãÚýç{î´z–´ì#À·8øæïé—Õm´q4j—\ ®r&³K~}“Û`onƒB`ågÿ8gúô娺”(ªÏc #>œë€R@¶³øÈ6a¶3=o9x;Ê_4óÿAud¯ÛÛüSNÙO¸è¿þ ‘éj¾WLN÷ù”`x?žäûÚ’º´åµÙŠÛÆš«= jw™fè6–­¹°'½ Aÿ!¯ÿ®žª7büq„Ø¢]R}¶Ùî=a×Êš¨l½d³`EºÔ•æDwçÔ´èt˜ \dÿ@°ƒ$A™žÔ„šˆX¦ "ê#µc3ï`"¨Ç6^Rï<œE«d¼š'yÀfÉy´Y·&â8~«è.!„LîŒy§†…¼Ú EÐ\öz!º0Y²ê"Õd©Ýi/,š‚^Ñ-Æ™oßl´ Ñ6Wdü`ºIbÃíIpÒ`¬‰œôÓ mDUÒƒÌuJI)ç<§í¾ @ Íì{fmûƒÑr°”TÜ­¥Ï·žkîà ^ùŒuÏœ¿#8ª3_¿V6P©çôö)xÔRµ³…,Þó}wÿM”‹"–i¥F«?˜]1é ÕU„%š8ž*?S9³òþp ”ÉžFûy%µþZžË‚ŒËWÑ&ÐàìÆx³‘½÷¯=˜ûP‡©žGç©ø\ò» å9Är\¤öÞÁ ûkz´Š»ûAµÏ‹ e¹4ˆrÓþNi"|~@ãia·_‹>—•ú/ê)þ‚½é4×B£ÔÈÊN‘W–½¼¹ßyV1¸`ÏN±®/³-„v(ƒêí21[åÎ>_à (Bf˜S™{Š‹t£æ¢ʤ~·|õéÖírf”û©Òαö–Æ7k>-RæÁgýaþ7bpºž¨öÆÍø‚¾Ý=— Àz/ãoÞµCOŒïÀ¼ý"$=åõ‡Ñn¬:Ú’êÚßpú"* ÛÚö¸ž[@ãéü´ìB<¼»>µã$Êû÷î_à½Çü·³áR7ë&Ô„ÿlÞ:º—ì„‘q¼[ñß+’@LrüþÏ{’„ýá2' {/þëq›ýrÒ‹uÏsŸq(à±5É8ÆT¡;_ÿNY•óâ""ÌU‚Hi cyvó¢›Vs–7AÉyQç«nT£öÀ¡eÔa5£XÃg¢ì0\l›ËR›e»Ñÿ74¸#]–×l+‡7\3©P\•vìüÕš1ø]+³$ƒ(Tp™zT7îÃí¯¢åFÿtUL}›%¸ùz©MF¸’$v­ðË0 t¬’×´wŸÆæf±FÞj'«1÷•B‚+qx‹–]NçÀWªÖ²{czïPí“¥¢ãÕ8·re'NòÇ» ±5Œ»’@Ñà4ý²{°»É.åÚx…ÊɤⓌ–|wK”´ƒÀïá[8¤HÅÇÌFÒ"Ü€=³xvh9Dõ|¶©®ìÚ6ÎrÂy"J•à\ö'*›Á"ý1¼ år9ˆÆZ!Vž}K ûKX~Aù¶†^¸ ðéïÔsi `¾M¢‹¸º! °«q"Y+H"Ë>äVkƒ—íÊ:&Ën;Y[­Hœ|•¼¤{b:jjè²W‡¥\ÿ† †;Ì0weöÅ<)ÌÿYSIcÞ,Aã²6©Ô…ÊÚ,ëÇPHùÑö±Â€‘HrH-¢k±Øª¾@¿ÿÂäêÉé®î¯TVη&`cD4Š=¯cLke³?Z(õT»iiñ(â©ÄÎà#8†,§[¦tÄŒÍab%Á¥—z³êb…uÅp6\ñ“i¸éö‰­çÊĬr¸C ʱ ^ 8M7@Jf¯Þ¿}>NdU>êâ$¬‹cÿO–@–€l§B‰w-aÿY>O€G Ô#¹}ݬ¹Jòð¹RcxäûvÛùiö ˜@ ê¢á¹±†œ@c· œ~Þ†ÔN=î«0’ !y½¨¬ð@4w­’Zí†zi¶f‡1À’Fè¹5’Ô»•Jø_ÉVk3€>oÝ´÷ò #‹î|["LïщÝÊ\Ëu\ÃLŒhšZÕ3£)Mâì^–ñ~6QnmFåÐl0^´XЂ/ø3‘Šlƒ=M¤?ý®9²8ã;‹@Å ¼ÿc¾[VÔ§cÉ9:MÄFj‰ü${q fœA¹:?œ¤)Èë[cŽä¹1¨czåÞ·ÂG¨ae«t¸ŒÃMq¼SUQÙ£%^iœÒº}i®ãe:IÏ)VkÄÝã?¥>Ãz±l–gÿ¤¶âsê<5FñÿQæ%U¡”b¡±01LGg…ð‰ïéóÄmPH{?¨ ÏŠfáä£Ñ!ƒQ¢¦ò–eE_´2š@*ƒÃ¯ó˜;׊ÅXg2–âœàKQÌgµ³ ñB®ãŽP](Q¨`Ú…:¦ƒã2ÍyÐzT‡1<ÌȪ$¥$ ¨ o€¬”ôœ$ï2€†9yø†¯*[Vvuƒ&MÜ•'eäc´ê×X‡òϨð÷Ö²°È/©u„Ä„N(B¦Sësb‹ƒ0å:eÄñ¿E˜6üÀ£ªJÏÙ‘¶Ÿ4F×Î1“µëŒJ»,FöäÓð•L×CÇ¥(¡” ó ï ”Ki'…D“ðWø ãŸ^ ¡zY]s6Hìt×ÄÆ£5³¨Ñ°¨º¹s‡)/¿¥µ¶–hOôI¬¹kF,såZÇ ¼ÞƒÜØ\ ƒÇ$› åe]G‰µ±ÑTž^2OÅXÎý—-ýu€Äʹ>N•µØ1Ç¿]6¢^3è p†Û0yn¸µ„ÿ ,ù(2c9ïUÎW£[Á\ÍèðúÃ8méIUÕ5ûÈ}/Ñ*fؘj¹“‚7ûw߸މ~÷[¢©‹×Ýð%z×.|à'©þM;ëoº¶˜ˆœ÷‡ e{ÓiÔÝdi·s˜¤º«¯µ]é¿Ñ’ Ø©Œ¸3ºFQ/`ZaqŽÿ»×).ÇOß QaÏžÛ7¸\Ô@e]¯ÝÉÐs#؈Þd‚@·nG.£ÚÐCQv" .ˆÇàšó3c_Å‚ù ëÌèÞp$SØ3Íý¸¯©XZ’SŽ{L1Wòi„ðêŠY*Uºþ»‰ÖãrÁŲpCWY¡Q¬bŒ+ꊽæ Üsô¹d!`<˜äéŽuð2o…`M¹Æ¦ÉE{,ÂßF)¸ ÓT£)¦nk»tkªûô»)·”÷ ã…i ¡AõôñœìÇŸà­*‹mAàeÈü)ˆûê{êÔSä[1L¦dŠ­ª_è«>þdË9’®%%¢ê=‹Õ]1ßfçüaZ—ð£©wE!–ÅŒð,tèGbНT:Û“ÊR,Ž_±\]P/ÐämŽyqR„¨9«å©ÇºHãýE2Tfþ¤)¹ÏóN†XźÉpŸ³r“”ÇØ/¸UNQ?B" û$—H"y—ÊóÓýÎ]kw¤\w‰·p˜èž·ÇYœBs;úgâlþëyk"··ÿ7Ò ‚Âvï{½—dÀ̦ݪÀˆ=²×hèt|º°ZBúkÏ€™ÎÄ6³Ýéñ¬ìÙ¶çò=Ã;€pasy4 Ñ ápúz‹µ^ZÖØþ£”Yµ»ìËmü#Q4GüSe±P_Äšú/§ÜÉžÎ=“YNM(£+iÂÁYÞïŒ8s ½„’¢žýüËõ¡4ã!"v‹îSki³NÒÿJ› ØÆnqW‹Ä_æ&~©SrráÕæÚ@Në%»:I~ q¹sØ´@¬Á¶¶˜—´ŠÃ3ŒT >¶–Ð’ Fæ?zâ.ð9zK)AlÑÖü˜€?1~ †íiÔLi.{³7Ä4nAkaY ý—ýLV¾¯™Þ´5Ñ~C×9#~Æ ª•l YH‹`ãÂéýÀ%Ï‘Ÿ—ˆ’³ŒŒžãã"Zßï70»,l{£U<:h2Jk?w ÍJ*Bhê¡""äQÔ=õ°=—7õ‘€Í8WÀ¾Ô‘ê‘k7áÏ¿tµDŠÞŒÏBŠI¶ÐK* ЫЗ"šcno1…á|0aª\ÈÍZ™{ª\[&>6ã¥íüÛ[jÒš²‘mÁH“M†>ß] òÕD¬g´Nü²/OljIâ8!³=CfÏ 2Ä…ä߉ia°iܡ䮜iеª—¹ØÓ²k ŒU˜[îX–A#ÈeÕDönÀ>Ç®d>;à˜[hŸ6;ÜK”Êí,U%!’xxÐûáÙ€WÍñ8 „ÛÂÔ™l¼Y6¦ŽõöU¯»©ÎK·ì‚`§SmÁ½ ñ#bp™ç»íÏ%ÎÌ£z~©4,På§JQ™(Œb1BNs円4“ì"“U*¥A„œÐ.Ü ¸1‘°·ËúÀøB§ï·¿„Á+HQÍlßmgæ6ܨÞm>PC†õy­.ŠPô¡&CÂémŸ5«t‡üdû›NÛnh¾É¼Ñ#·9ba¤´G p>R†*™‚QØò„„;yð7Ó7v¬¤¬b¶æ$õ-’~Y΃ÎñãöѶ‘ý´oí¦qûh¯ÛE~Ú7öÒ˜~ÕÚÇûYï©°àgÍXï¦ þìÅ –…» "ÿÔŸÑ@…¯‚¿kÆ%ˆh¨Îš -Šö»Ýï9ÔnUÝ‚¿ÂZüR!êû ÞyÑ…"Ȫ¦•=k`À \0E×W5 =Ç”¨‰è¦€7àÅà\~TËùN!4¯Ü‹.šòÑMôÆðYÆ•©J~¸„ï{H ÿFÐ‚à’¥BJÕÔÖügœklÝxâÝ1•È6ÃLƒ'œîEt°¡â Ôb|=‘a7ņZšnï<±?×™bxr`må“„fÁÛ¸YÖ¦ ù ý@ÿ=ˆóìÖ»µµèÅ×øvƒöÊ‘ÅÖÔkš›ÁËvjb>@õSŒ¶FÓ(ùBÒ3¯Ø7‹¨Ã5ò³·ð0\ç¯3·C2wTʱa˜v†§Ì÷Ó¬ùM"# DM:V¦éYņÚ.³ï›û®Ÿ4?=Èñ[Q×v;PßÁËrJOÙ ¯ÜG ©ô÷¼‰Þ]kŸyT1þ\&˜n+¶¨Öç³£%®“Õ M6S¤yøa1Œ/tYI#ŒžæØ³ß¤í1ÏÉìÅþ8qÀtâ H,€ÆÆw†5äŒÞV©)ÁóT[âa2ØcN'Å…cô…úÁyŽ ÔaIˆN÷˜–·Þ$GÀÉð:Ò£[ìEBkqàî¸9Ñ”wµ^AËsén}’‡{æô&S ó->šeójÀéàÊv'ùÿ€ æm•˜r­ýP¤@3ÁʪŽ?Ó=©@Ó0¨%¼èn:³<©š\ŽJ*£ŽbÉGiOž)£%5(¤„±§ãGôÿ^°MOSÚIÑòýµ?êulL”ŒüÜ–ÿˆ­W÷Zª?ÖÓÜN[¨‰Ãgj‰çŸ¶‰.&r¢­zÖno"õîï~2y çç>ùl%O¯,ÊQYQ¤ž=;‚Htt„ Ë.›`7¦hœÉßœûèBº­„Ë×*ÖázWð3gW‚#% 2^ÅÄÿÁÞ64Frۨ괤ÔDœ1H[™‰u/ŸWöè©Éwbø£aS™ˆz¨A›½mÏNu,·—wÞoHz&Ã#8ì6¯4 çàâ.R&¦PÕ¤PÕŒ*/2sÈQ?úÌ0IümO=„0‘¤àçä±³ a{º> ͋ϣ£0á͸ZRi›Ÿ92šêUûá ˜ú`uJ•ëý:«‘n[.ËÇZ› Ó'ƒØuQ9ÿÿ\ÐzT“2¼’º¯ëC×™ª#Ó6¡—v°0Üœ"{Iå Ä#Q!0ÜXÝ\±¿ú“HÊïÅâ½äÇ4+±ï§¶OÌ€âËjЦ- šïYB>ëŸÿ1IŒ2‚ž«ÙÊS¦*‚ʦÆn˜³¸¾Ÿ_3É8nEOpé4ON~YÊ»:þÎø†ëä9¯3˜rà’4Òt 8®Mô:Øû’/ÈñQ}+[\FDL}§LŸ/ØÙá`õó„³WWCí€Ò­]€"b¹/ºdc{*J"Ö@«+¾ »óÂè !Ò‡&¦»Á ± É!»À3Üøs׆x3”))›V¢€QB=Ŷø»u{@áõî Ø?#ΡaÇõ’G4Ã8¬MÍ J{LJê Î|ôᲯŒÀl¬È{¬óGÞij÷å|æih¬žúĵ Ò¼Ý>~˜Á¯ Êæ?ƒi³ÿVxNT(‹íaÔУ|Lz½ñ¾3Ï›ANŸ”œÄóñ±µŸÿÙfs-uae-2.2.3+dfsg/icon/fs-uae-config.icns0000644000175000017500000016526512162366654020324 0ustar glaubitzglaubitzicnsêµis32Ïƒí°†îÞߥë…ï‚á§õë„ð‚åªüõëƒò‚麱¾•ƒõ‚íéÅáÛƒ÷ñèÛíÊöƒùôïÐÒôùƒû€øæÎíßøûƒ ýûûçȹûûýƒ k/› ÷ýýþƒþ\c_¬€ÿþƒÿÁ1BK‚ÿƒ‡ÿƒí°†îÞߥë…ï‚á§õë„ð‚åªüõëƒò‚é‹ZN‚ƒõ‚íHkKÛƒ÷ñ¦}y¬öƒù€ô¦ôùƒû€øàÈæßøûƒ ýûûòêßÊûûýƒ œqiåÉã÷ýýþƒþêÔÚíÒ€ÿþƒÿøÛÑÌ‚ÿƒ‡ÿƒí°†îÞߥë…ï‚á§õë„ð‚åªüõëƒò‚é‹ZN‚ƒõ‚íU#Ûƒ÷ñl,öƒù€ôâM;ôùƒû€ø8EÏøûƒ ýûû±-_ûûýƒ éÚë#X#÷ýýþƒþÜp;˜€ÿþƒÿÊ2MJ‚ÿƒ‡ÿs8mk+88888888ÿÿÿÿÿÿÿ89ÿÿÿÿÿÿÿÿ99ÿÿÿÿÿÿÿÿÿ9:ÿÿÿÿÿÿÿÿÿÿ:;ÿÿÿÿÿÿÿÿÿÿ;=ÿÿÿÿÿÿÿÿÿÿ=>ÿÿÿÿÿÿÿÿÿÿ>?ÿÿÿÿÿÿÿÿÿÿ?@ÿÿÿÿÿÿÿÿÿÿ@AÿÿÿÿÿÿÿÿÿÿACÿÿÿÿÿÿÿÿÿÿCDÿÿÿÿÿÿÿÿÿÿDEÿÿÿÿÿÿÿÿÿÿEEÿÿÿÿÿÿÿÿÿÿE6OXdknnkdXO6il32•¢†éèæâÖÉXŽé…ÛÚÙÖÊ´ãSê†ÜÚÙЬÕäQŒë†ÝÜÚÖµ¹ûÞN‹ë†ÞÝÜÚÁ¨ýøØMŠì‡ßÞÜË¥þúõÒL‰ì‡à ßÞÓ§ÿþùòÍJˆíˆá àÚ·}a_k‰£D‡î‰âßÓ»«¡‘†…‘‡ïŠäáÞ×Ðij¤¢‡ïŠåçâºåâ·¿»‡ñ‰çìüåÏýâÀÎ̇ñ‰èðþµñý´ÚÖׇòˆê ïÿÒçÿÎÝáÝá‡óˆë ÷õ¼÷ó½èåãç‡ô‡í ïÿÁïÿ¼ííëèì‡õ†ï òüå×ýáÕïïîìð‡ö†ðñþ·òü¶ðïô‡÷…òñúÎêúÊê‚òö‡ø„óñÜÙ¿Ý׿ƒóø‡ ùóàãñàçõÇȨÅȧ„õù‡ úæ ¡¶¯¨Ç°¦Ý„öú‡ ûø|:g†“”“£…øû‡ ûùùx:ly—l{ó…ùû‡ üúúÅ!ILHIN½†úü‡ý€ûERj‡ûý‡ý€üôPU×M[é‡üý‡þ‘ýþ‡“þ¢†éèæâÖÉXŽé…ÛÚÙÖÊ´ãSê†ÜÚÙЬÕäQŒë†ÝÜÚÖµ¹ûÞN‹ë†ÞÝÜÚÁ¨ýøØMŠì‡ßÞÜË¥þúõÒL‰ì‡à ßÞÓ§ÿþùòÍJˆíˆá àÚ·}a_k‰£D‡î‰âßÓ»«¡‘†…‘‡ïŠäáÞ×Ðij¤¢‡ïŠåQ'sE'v¿»‡ñ‰çº';š&>ÀÎ̇ñ‰èTG…QGŠÚÖׇòˆê ¢fu•fwÝáÝá‡ó‡ë ㆇª†‡³èåãç‡ô‡í ®¦™ª¦™ííëèì‡õ†ï äÅ¹ÇÆ¶Õïïîìð‡ö†ðÛå²Ýä°ðïô‡÷…òôÿÑìÿÌê‚òö‡ø…ó÷õÄøñÁƒóø‡ ùóàãñàçõðÿÁðÿ¼„õù‡ úê9;§7?ËûåÞþàÝ„öú‡ ûøÂ’µ’âý¹ôü¹…øû‡ ûùùåñ´ìÿÏíÿÊó…ùû‡üúæ÷ôËúðdžúü‡ý€ûòöÿÅôÿº‡ûý‡ýüßÍäÝÍé‡üý‡þ‘ýþ‡“þ¢†éèæâÖÉXŽé…ÛÚÙÖÊ´ãSê†ÜÚÙЬÕäQŒë†ÝÜÚÖµ¹ûÞN‹ë†ÞÝÜÚÁ¨ýøØMŠì‡ßÞÜË¥þúõÒL‰ì‡à ßÞÓ§ÿþùòÍJˆíˆá àÚ·}a_k‰£D‡î‰âßÓ»«¡‘†…‘‡ïŠäáÞ×Ðij¤¢‡ïŠåN"rA"u¿»‡ñ‰ç°‘"ÀÎ̇ñ‰èryÚÖׇòˆê p7^;ÝáÝá‡ó‡ë Û ”©èåãç‡ô‡í 7Q+Wííëèì‡õ†ï °‘$Õïïîìð‡ö†ðv~ðïô‡÷…òn8\=ê‚òö‡ø„óß š°ƒóø‡ ùõïíõïïõ4S)[„õù‡ úööóÄ÷ï” ”'Ý„öú‡ ûøøÿÏíÿ.y‡…øû‡ ûùùñþ·”ƒ:f—íŠò›ÿ³ó’ƒBF…½óópƒBN‹Ñ‹ó›ÿ²óÕLƒJo˜ïóº„J{©Œó›ÿ²óyƒR\‹ÒóëcƒRfŽãŒó›ÿ±ô½„Z€ªôô ƒZ]‡½ô›ÿ°ôëoƒbqæôÛdƒby˜ðô›ÿ°õ¦ƒjl‰ÁõõŒƒjp‹ÔŽõ›ÿ¯õÝsƒršñõÆ„r†©õ›ÿ®õô–ƒz}ŒÖõzæõ›ÿ®õÉ„‚Š­õõ´ƒ‚ƒ‹¿õ›ÿ­õŠ‹èõዃŠ‹šñõ›ÿ­ö»„’ŒÃöö©ƒ’‘ŒÖ‘ö›ÿ¬ö䄚’›óöÔ„š¬’ö›ÿ¬÷³ƒ¢žŒÙ÷ñ©ƒ¢šé’÷›ÿ«÷Ù„ª’®÷÷ʃª¨ŽÂ“÷›ÿª÷ò·ƒ²£ê÷鄲œ›ô“÷›ÿªøÓƒº·ÅøøÇƒº±ŒÙ”ø›ÿ©øì„¡œöøâ„—®•ø›ÿ©øÓƒÊ½ŒÛøô̓Ê±ë•ø›ÿ¨øèƒÒÑš±øøáƒÒ͑Ŗø›ÿ§øõ܃Úº‘ìøñ„Ú«œö–ø›ÿ§ùêƒâÛ‘ÇùùæƒâЌܗù›ÿ¦ùõ„ꯞ÷ùóƒê韱˜ù›ÿ¦ù„òÚŒÞùø„òÈ‘í˜ù›ÿ¬úù ³†úñ“È™ú›ÿ¥úþƒÿÍ’ïúûþƒÿ¸žø™ú›ÿ¤úýƒÿô’ÊúúþƒÿåŒßšú›ÿ¤û„ÿµ úûüƒÿþ¡³›û›ÿ£ûþƒÿãŒàûûþƒÿÍ’ð›û›ÿ¢ûüƒÿý µûûýƒÿõ“Êœû›ÿ¢ûþƒÿË’òûûþƒÿµ úœû›ÿ¡ûýƒÿó’ÌûûþƒÿãŒàû›ÿ ûü„ÿ´¢úûüƒÿý µžû›ÿ ûþƒÿáŒâûûþƒÿÌ’ñžû›ÿŸüýƒÿýž·üüýƒÿó’ÍŸü›ÿ…üçá‚ÚæòüüûäÞ‚Úëó‚üþƒÿÉ“óüü„ÿ´¢ûŸü›ÿ…üzƒ%‹×üüNƒ;Žé€üýƒÿò‘ÏüüþƒÿáŒã ü›ÿ…üó=ƒ&_˜÷üÜ+ƒ&r¨€ü„ÿ±£ûüýƒÿýž·¡ü›ÿ†ü¾ƒ>B„¾üü›ƒ>JŠÓüþƒÿߌåüüþƒÿÊ“ó¡ü›ÿ‡ý…ƒVhéýømƒVr–úƒÿü¹ýýþƒÿò‘Ï¢ý›ÿ‡ýêrƒn„¦ýýÓƒno–üƒÿÈ”õýý„ÿ²£ü¢ý›ÿˆýƇŒÒýý¬ƒ†ÙƒÿñÑýýþƒÿߌæ£ý›ÿˆýú«ƒž•”õýò¢ž¹„ÿ°¥€ýƒÿüº¤ý›ÿ‰ý郶µ’ºýýÜ€¶¸õƒÿÞçýýþƒÿÈ”õ¤ý›ÿŠþރλŒæþýÖÎÎæƒÿû›¼€þƒÿñ‘Ò¥þ›ÿŠþûçƒæ©¢ýþøæéþƒÿÆ–÷þþ„ÿ°¥¦þ›ÿ’þñ‘Îþþý„ÿðÔ€þƒÿÞè¦þ›ÿþƒÿË“ôþþ„ÿ®‘üþþƒÿûœ¼§þ›ÿŽþ‚ÿý ´þþƒÿÛŽ’ÊþþƒÿÆ–÷§þ›ÿŽþƒÿäŒðƒÿûš¿Ï‘ûƒÿðÔ¨þ›ÿþƒÿÁüƒÿ×ùþ¾„ÿ®¨©þ›ÿþƒÿüƒÿî×ÿÿüƒÿÜê©þ›ÿþ‰ÿ¬©†ÿûš¾ªþ›ÿ‘þ‡ÿÚŽí†ÿÄ—øªþ›ÿ‘þ†ÿú™Á†ÿîÕ«þ›ÿ’þ…ÿ˜ùþ…ÿ¬¨¬þ›ÿ’þ„ÿíŽØþþ„ÿÚë¬þ›ÿ×þ›ÿ×þ›ÿ×þ›ÿ×þ›ÿ×ÿ›ÿ×ÿ›ÿ×ÿ›ÿ×ÿ›ÿ×ÿ›ÿ×ÿ›ÿ×ÿ›ÿß›ÿß›ÿß›ÿß›ÿß›ÿßÿÿÿÿˆÿŒÿß›ÿß›ÿ«æçååäáÞÓ¤0‚˜ÿ›ÿ«æ åääããâáßÝÚØ×Å1—ÿ›ÿ«æåä€ã áßÞÛÙ×ÓÐØh–ÿ›ÿ«æååããâàÞÜÚØÕÐÍÈÔo•ÿ›ÿªæ€åããáàÞÛÚØÓÏËÆ¿Õd”ÿ›ÿªæååäããáàÞÜÚ×ÒÎÉĽ½Ôb“ÿ›ÿ«æååããáàÞÜÙ×ÒÎÉĽ²ÍÎa’ÿ›ÿ«æååããâàßÜÚ×ÓÏÊĽ³´ÕË`‘ÿ›ÿ«æååäããáßÝÛØÕÐÌÆ½´©ÔÏÊ`ÿ›ÿ«ç€æääãáßÝÚØÔÏÉÁ·¬ÆÖÎÈ`ÿ›ÿ¬çææåääâàÞÜÙÖÐËĺ¯´áÕÍÇ`Žÿ›ÿ­çææääãâàÝÚØÓÎǼ²§åÝÔÌÆ`ÿ›ÿ­ç€æääâáßÜÙÔÏÉÀ´§ãåÝÓËÆ_Œÿ›ÿ®èççæååãáßÛØÒÌĸ©ÝîæÝÓËÅ_‹ÿ›ÿ¯èççååäâàÝÙÔÎź­ÐóíæÜÒËÅ_Šÿ›ÿ°èççååãáÞÚÕÏÆ»®ÊøôíåÜÒËÆ`‰ÿ›ÿ°éèèçæåãàÜØÑɾ±ÃûùôíåÛÒËÆ`ˆÿ›ÿ±éèèçåäáÝØÒË¿³ºýüùôíåÛÒËÆb‡ÿ›ÿ±éèèçåäâÝÙÔÌÀ³·þþüùôíåÛÒËÆa†ÿ›ÿ²éèçæäâÞÙÔ̵¶ýÿþüùôíäÜÓËÇc…ÿ›ÿ²éèçæäãßÚÔͶ·ýÿÿþüùôíåÜÒÌÇc„ÿ›ÿ²é èççäãßÚÕÎ÷·ý€ÿ þüùôíåÜÓÌÈdƒÿ›ÿ²ê ééèåäàÛÖÏŹºýÿ þüùóíåÜÔÍÈd‚ÿ›ÿ²ê ééèåäáÜÖÏÆ»»ý‚ÿ þüøóíåÝÔÎÉfÿ›ÿ²ê ééèæäáÜ×ÏǼ¾„ÿ ýûøóíåÝÔÎÊh€ÿ›ÿ²ëêééçåâÝØÐÉ¿ºÝÛ×ÔÓÖÙáíîóôïçÞÔÎÊhÿÿ›ÿ²ëêééèåâÞÙÑÊÁ¶§–‡}wtrpnlr˜¶ÏÜÙÑËhÿ›ÿ²ë êêéèåâÞÙÓ˸«‚}{{yxwtsqoko¼ÒÍd…›ÿ²ìëëêéæäàÚÕÍż±¢‘†€€~|zyywqw®ÎV„›ÿ²ìëëêéçåàÜ×ÏÈÀµ¨›Šˆ†„ƒƒ‚€|u‚Ä7ƒ›ÿ²ìëëêéçæâÝØÒÌû±¦™—–•”’‹ˆ„€{¹ ‚›ÿ³ì"ëêêçæãÞÙÕÎÇÁ¹²«§¥£¢ Ÿžœ››š˜•‘Ž‹‡©‚›ÿ³ìëêêèæäàÛ×ÑÌÆÁ»¶³±¯­¬«€ª ©¨¨§¥¢Ÿœš–¢G›ÿ³íììëêèæäßÚÖÑÌÈÿ½ºº¸· ¶¶µµ³²°­ª§¥ ¦›ÿ³í#ììëëéçåâÞÙÖÒÍËÇÅÃÂÁÀÀ¿ÀÁÀ¿¿¾½»¹·´²®´›ÿ´îíììëéçåâßÛØÕÒÏÍÌËÊË ÊÉÈÆÄÂÀ½»¿›ÿ´îííììêèçåãßÜÚØÖÔÓÒÑ‚Ò ÓÓÒÑÐÏÍËÊÈÆÌ›ÿµïîííìëéèçäâàÞÜÛÚ‰ÙØÖÔÓÓÑÕ›ÿµïîîííìëéèèæåãááàà‚߃ÞÝÜÛÚÙÙÛ›ÿ¶ï îîííììêéèèçæåå„ä€ã€âááßÞÞâ›ÿ·ïîî€íìëêêééˆè ççææååäããè›ÿ¸ï€îíìëë‚ê†éƒèé›ÿºð€ïˆî‚íƒì€ëí›ÿ¸ðX&‚5žÖîå;#‚LŸä…íî›ÿ·ñ£„f¦ððuƒ{¸ðƒï›ÿ¶ñæƒ/áñ΃I–ëññ…ð›ÿ¶ñqƒ}»ññDƒ‰Í„ñð›ÿµò̃L—íò¤„f¦‰ò›ÿµò?ƒ‰Ñòèƒ.Žâ‰ò›ÿ´ò „h¨òòrƒ}»Šò›ÿ³òæƒ1Žâò̃K—íŠò›ÿ³ónƒ~½óó@ƒ‰Ñ‹ó›ÿ²óʃN˜ïó¡„h©Œó›ÿ²ó<ƒŠÒóçƒ0ŽãŒó›ÿ±ôœ„kªôônƒ~½ô›ÿ°ôæƒ3æô˃M˜ðô›ÿ°õjƒÁõõ=ƒŠÔŽõ›ÿ¯õȃPšñõž„j©õ›ÿ®õô9ƒŠÖõçƒ3æõ›ÿ®õ™ƒm­õõkƒ¿õ›ÿ­õåƒ5èõɃPšñõ›ÿ­ögƒ €Ãöõ9ƒŠÖ‘ö›ÿ¬öƃR›óö›ƒl¬’ö›ÿ«÷ö6ƒ‹Ù÷çƒ5é’÷›ÿ«÷—ƒn®÷÷hƒ €Â“÷›ÿª÷åƒ8ê÷ǃR›ô“÷›ÿªødƒ ‚Åø÷6ƒ‹Ù”ø›ÿ©øÄƒUœöø—ƒn®•ø›ÿ¨øö2ƒ‹Ûøæƒ7ë•ø›ÿ¨ø’ƒq±øødƒ ‚Å–ø›ÿ§øäƒ:‘ìøÅƒUœö–ø›ÿ§ù`ƒ ƒÇù÷3ƒ‹Ü—ù›ÿ¦ù„Wž÷ù”ƒp±˜ù›ÿ¥ùö/ƒ ‹Þùåƒ:‘í˜ù›ÿ¥úƒr³úúaƒ ƒÈ™ú›ÿ¤úäƒ<’ïúÄWžø™ú›ÿ¤ú\ƒ „Êúø0ƒ ‹ßšú›ÿ£û¿„Y úû‘ƒr³›û›ÿ¢û÷,ƒ"Œàûåƒ<’ð›û›ÿ¢ûŒƒtµûû]ƒ „Êœû›ÿ¡ûâ ƒ?’òû¿„Y úœû›ÿ¡ûXƒ…Ìûø-ƒ"Œàû›ÿ û¼„\¢úûƒtµžû›ÿŸûö)ƒ$Œâûã ƒ?’ñžû›ÿŸü‰ƒv·üüYƒ…ÍŸü›ÿ†üù‚òñòüöƒòóüá ƒA“óü½„\¢ûŸü›ÿ…üýƒÿê×üüþƒÿÖŽé€üTƒ†Ïüø*ƒ$Œã ü›ÿ†üþƒÿ¿˜÷üüþƒÿ©¨üü¸„^£ûü‰ƒu·¡ü›ÿ‡üƒÿù˜¾üüýƒÿíÓö&ƒ&Œåüá ƒA“ó¡ü›ÿ‡ýþƒÿØéýýþƒÿÖƒx¹ýýUƒ†Ï¢ý›ÿˆýþƒÿ¬¦€ýƒÿúˆƒD”õýº„^£ü¢ý›ÿ‰ýƒÿîÒýýþƒÿGƒ‡Ñý÷'ƒ&Œæ£ý›ÿ‰ýþƒÿÅ”õýýþÿ·„a¥ýý…ƒwº¤ý›ÿŠýƒÿûœº€ý€ÿø$ƒ)çýà ƒC”õ¤ý›ÿ‹þƒÿÞŒæ€þÿÿ‚ƒy¼þþQƒ‡Ò¥þ›ÿŒþƒÿ±¢ýþþÿÞ ƒF–÷þ·„`¥¦þ›ÿŒþƒÿò‘΀þMƒˆÔþ÷$ƒ)è¦þ›ÿŒþõƒôÅ“ôþ±„c‘üþ‚ƒy¼§þ›ÿŒþùƒè眴ö ƒ+ŽÊÞƒF–÷§þ›ÿþéƒÝÊŒoƒz°»‘JƒˆÔ¨þ›ÿþûÕƒÒƒH“ÎÑl„c¨©þ›ÿŽþèƒÆ7ƒˆ²ÆÀƒ+ê©þ›ÿþ½«u„e”««Uƒz¾ªþ›ÿþ臆†ƒ.Œ‡†tƒH—øªþ›ÿþ§bb/ƒ|‹bbƒˆÕ«þ›ÿþôP4ƒK˜ÜA*„e¨¬þ›ÿ‘þ°ƒ‰Øþƒ-ë¬þ›ÿ×þ›ÿ×þ›ÿ×þ›ÿ×þ›ÿ×ÿ›ÿ×ÿ›ÿ×ÿ›ÿ×ÿ›ÿ×ÿ›ÿ×ÿ›ÿ×ÿ›ÿß›ÿß›ÿß›ÿß›ÿß›ÿßÿÿÿÿˆÿt8mk@ +012222222222222222222222222222222222222222222222221/+#  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýôà´u; *ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿô«8 3ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿïW<ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷^ CÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøZ"EÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüV$GÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüS$GÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüS$GÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüR$GÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüR$GÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüR$GÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüQ$GÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüR$GÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüR$GÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüR$FÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüQ$FÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüQ$FÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüP$EÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüQ$EÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüP$EÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüP$EÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüP$EÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüP$EÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüO$EÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüN$EÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüN$EÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüL$EÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüJ$DÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûE$Dÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿô:$Dÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿà)$Cÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ $Cÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿö?$Cÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ’ $BÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÒ,$Bÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿñ6 $Bÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿù< $BÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþA$BÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿD $BÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿE"$BÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿE"$AÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿE#$AÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿE#$AÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿE#$AÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿE#$@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿE#$@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿE$$@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿE$$@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿE$$@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿE$$@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿE$$@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿE$$@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿE$$@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿE$$@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿE$$@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿE$$?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿE$$?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿE$$?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿE$$?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿD$$?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿD$$?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿD$$?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿD$$?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿC$$?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿC$$?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿC$$?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿC$$?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿC$$?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿC$$?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿB$$?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿB$$?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿB$$?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿB$$?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿB$$?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿB$$?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿB$$>ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿB$$>ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿB$$>ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿB$$>ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿA$$>ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿA$$>ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿA$$>ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿA$$>ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿA$$>ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿA$$>ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿA$$>ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@$$>ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@$$=ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@$$=ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@$$=ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@$$=ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@$$=ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@$$=ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ?$$=ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ?$$=ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ?$$=ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ?$$=ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ?$$=ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ?$$=ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ?$$=ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ?$$=ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ?$$=ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ?$$=ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ?$$<ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ?$$<ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ?$$<ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ?$$<ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ?$$<ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ?$$<ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ>$$<ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ>$$<ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ>$$<ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ>$$<ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ>$$<ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ>$$<ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ>$";ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ<" 6ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ7 .EWenssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssofXF/ $6EOWZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZWOE6$ $.5:<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:5.$  "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"    ic08sÐ jP ‡ ftypjp2 jp2 Ojp2hihdrcolr"cdefjp2cÿOÿQ2ÿd#Creator: JasPer Version 1.900.1ÿR ÿ\@@HHPHHPHHPHHPHHPÿ]@@HHPHHPHHPHHPHHPÿ]@@HHPHHPHHPHHPHHPÿ]@@HHPHHPHHPHHPHHPÿ rÿ“ß‚o»c+ð“Ûyñ˜MV• tnz¡Å— ¥k‚/¨9„YÃR/žÙS6Åð/éïTˆ/GP´å§ß‚(o²ö¦A_qºmîdÕÙ·âò°Y°< ûaCø“ !Xv•‰²…&- áÄ ('P©ú ƒ5"ÅlÝ´U ª%Ç?ß‚0o²öÒ s ¥«]“pKT‡ê#@É-8$l©qœc~=€¦ªk~o ã2±KIaŽ%KñG[wȸ¥æøÍNß‚_¥Wt8¾yL°×X)c, /ʲµ›V6Bh|r´àfÚ1,Ä¿·ÞBèÝ6‡vÁo¹ÿ~´‰ïçÍP×ÏÀò~ñø€5KŒÕãŽ`qäHQ6xеƒ¢¨ ªnQƒ¶—c®*óXØŠ‡Û)Q'PA S×ä0Ûc·¿ÃHwbíài£ƒ>(ADýã4õ!ReÞVÃr‚äD…-u¯Gå0™®‡éG½Ï©Ò¨œ¹QÃ.F¿+&Ò©ñ9H×Ýk#®9í½‰¹¬Ó3ºŒOA¹6=ÿwK_vÈ‘^c*©DÚ‡®’{ÆÏÀò~Ñø€5KŒÖ9ìu1ûP_§è–ü5ªöúLS§¢®Ë郻Ðð’Ã)éð•[ƒ|§¡Ø„߆OTB‡k¾hßDç]àÛß·½eÏæÍ?y=Þ-¶ÒqM²]£]rÙ%Æ“¼„¡ún¨:;e3¢f„¦} [Å)œ½‹”Ü,!ÎîÙc:àæuý{ZTm²®,¡£ƒU"ZŠm©€\– gfB ikÏÀþ~Óó65K[5XßÓúv/¯(Þv7äS`)³‹ˆr³^‘Ž;ãYmh£¦ÙõêYShʸ¸Àëe&»²§¬î¸šÜÇ-Úy å¢G^…?𮏥Fð_ëÈš±Ô™=déiÉØËmNØ ÃOõC†q]#Fý%Ï/ Ô/ë ÎÈ¢ƒPÞ(aåç#w´à Öƒàä¡àÀ=ڨܙzCy^ò]ö¬–ü.¡ G8HÏÀ’~óó€ËîÌö?Œ¬TèÌkì"~á& ”9â„`µ§ŠÙ ï¢ÜÌ<ä’߬µIp²†~¢]ë‰ÀgKíЈˆ ;¦/áß+ÜìIaí¸Ì‚ !Î@ƒ;c6õ²=Ï¢Ÿ…'?7À£cÏé´tܦêÒ­mÐÈè…žB<ÛøØì\k*¹ÍÛÃçU„T?…ĦÃá‹U<ÿw8Y"¯W™5u:w)Öµ]õ‡Ù¬úQ1T»ï|÷r¡Õãuþ1`§k xMÒX».½ÿ|„Ü[ HÆEéÈqmÄ@æ`.½=¾Q¤GV ÿL¡_éHµ©¤è;˜K@Ùx.áfîÚaóúúç”C¡}ÿ‡f);C·2eåšú~ð-ïBi’±’Ÿšûpy”ÅÀÇf|‘Âá'žkšå÷ùHolO/Ôó>¶[x©Ú¶­CÕé°ßèäÑ5¬jdߤIr1Üã Š&âúЪSÉsêÙ8‡fF*nãúÖçÏÂ¥Ÿ…/?7à£c°“ß²ò£h?FÒ£w‚×äY0fi7½øì‘yqÅ­»£mõãÂ:kô…QѰèm ج?‚VRÍYäµSNÚukÄò3)™˜ˆ ½Y™cÿPÅqùdO3¿ˆW(ü\¦9ò<=®½Ë^áÁL˜Ä–Øtoh¢ÄœŸ&Ç*ÖÌ.H@lÀbRsË_gŠR±€Áh¨Õ¥Ž¤Û²ôåpßK@ÙÇ áè‹xcB@X¶:þ|†í–]3e,‰Æ Oâ1¥-!A·7 ÝYetk^ß[$'º¾Øì_=ƒÙÚ Ø)‹ V”]ÛgÎò„_LfY0Óÿj¼¯s-5iøíÞ“Òƒ%\ûºðþ ˜°¯€ŽH9&ÐùþAJèûö%¡Œ~ʉ‘ˆŽ˜øJ!7†$¬ÏŸEà‹wæŽM _ØõS2»ŠW ŠH5Uû(5£Hk„«ÉBMWiO©;bT}­ÚI©žÜÍ V¨tô¦Œå Û¾d J¸‚ËèUêIt¹È¢(îcP@±Mq´v C³ÚzïvYùéôõ–nmI’`]ïÓ¬ á!¹6ÿV'ßY? n~t•LÖ,;”íð˜âŒð0‚»Þ¶7Öyg¯q€Ú‚ò!å ë0‘û—ݽ-€T󣡨˜”g›^çŒÿ- Lâ·#“95³8wXK› YAMrúÙø-„ ˜¾¯¹ÈÛ8exä0’ ×5yŒ˜q²œ¿hz¼~ "üwC˜Çí`&]Žsä“Ôì#Öÿ"îCòMÑ^e…¿^¹šÌfé(ÊÙnê/nŠ*¤¼!–¯htSÃID÷‡o Žë×C™á.Ö>îú‡¬ø§'L",$äNûn¡ý²ñŠ ˆìe H¹Þ÷ivs*%#ýæsXý7ǤŽÍ^ˆÎU§nº±Ç5YcÜx¾I›’ðTÕ g“ϳ³ÖÁ[…¿üé0–°KëÇ3l™éŠK¡ ­\½?X½k#öH¢ÑÌìõAï¾ÍˆÈEÜÃ0ÅÝ{A²|×À­¨¹ Ä%|“öâ -¯™´½BÍ“Y’ ¸äýÑÞ—*ëWc¼m¼ÕqµÄÎí‚K×?[ä ìÑC%‰³dÑ×X«ÜwÚ_ãNhãŽÐc+Õs?ã{?ÚwrÍÈ·cz@ Ôx!Z0ºƒ:‹š[„ u€5Vè¶ùûÀ´Sð¼II$’Iåg˜h9ïßÏÆÏ¬ÙÚqýIT0)âíR¡X‚‡×Q”5œ./¤ßà&=6Q(öE^Æs’èÙW4ÐnÄK|ÕàAmCbÉú Þt*“~¥˜~7cߤaI¯p»}ÚÌï&ˆe™Ó¤FE2«ƒÏVk!…*01»iôþÜoR ûZëuF™Û’I$’Fºº<$¼3€¥žäà5u¡¨hž+¨O€oЋ@Gýù­äEa߉ë×Ïÿ:Î.Ü’I$’GAñý¬F,ÒwÌÀç<ZµL›ÐBþÇ܈7­LToõ{ø´áNfCÎ%ûæïÚŸ§y Õ&,úÕx€9‡­¤7µy©zC5ý9%äî¥ã73gþßw`´oèeàüäÈYê|ÿ¸OËMÕã“O$X„6¸Ÿ<„Jã€3”<'©,-ïû„–šñ ¢BYÕC“ßÙ,¶ý®leïF3N$°µ3²bÖF«É 7…,ƒ[Ÿˆ¡t»jA‡“õžî…ñšO~þ‘Étø_¤˜÷«à¿!ôÉT‹ƒ@†ÚˆR+´%cÊÒ’’<Âa3"”Âj¹ºžòÈË" $¾"®jT¥w´ñ3NÚ­8’J2N2Qá7`’„"ÿ)ý¾‡¾Æ®HÀ 6T+&!ø‰™yî wÞ+SloÎv¢ ˜Ä x™‘y6»ësüOמ¯eÒ(4Ó€Vô”"U8¨Nä+ðG¨¢;¢®.*44,9ÛßžÈßž²ÏÏGÀ†žý3Ô.bq±R-UðÝÓæ­p ʲ­ éÖu²{ùÜ0k#HË#¶gíÎù{•TTùßîð lïî„vZPÑêÒp|®¥ÐG²GqÝ‘—|¾wW@k«|dS‰ÔéM½.Ïuõ”?¼Ñ­7?B§Aa£¦/¶‹›ñăåØç>I?†U IÏÑ£Àõ5”BÆS–“À4 b­qŽ‘CTtA«Ý-êQ1* ùäZ9ˆBzh§ÿGŠ?ŸG’ÁsÜX~8ÙvV¤±õUí œÕ×rƵ¨-ƒ¡ð½×yµ”÷˜=Ícôßõ}º qeî»Ô„ˆ3^€ðÁÁ«öIµµÂB¨Ü›,õÃfJÆyœÈ@޺Ǹ²oüOßï}V>s?úï¼"Év°DŸ¼áÐGŸ1Üæ"ú\ÝGôVèÝÐˬLŠœÂÌ`/Ū›dé9½£< ÄrMfHt&ã“÷Gz\D^FóÛ:Ђèüía®/Þ1¦Ë½›Ž’ 8tx®õîÛEhÂnñ;ãNh㎚âÊ1òA1Ɔ÷ý?BWÛ6n£Ð™¨øtxkȸ6SfÝϦY·ÚdÂ:Mÿ zí)Epù3ëVG¶‰`¥<{rëñbÁgw¸È¨)–èœÅf¡h>’*$“0<øwOEª¢éy¹lïÝ–º$¥4&Ë$v¢ú%€/fðQ5G™ =ô˜¾³œZn¥÷ºIhß´˜kÍr¼‚ÃÝ ã"ÔæÌlÊF¯å(¿ZPÑLµÞeÃDv G̉‚ 6ä’I#[ÆQERnuèëD-,ªö,·øt› Q¯?ŸÛt×è9ç’vu0;UªâÊʆñ¾7q…Û’I$’Hç1è÷û®:¤W”óáÈêêxÂråkß´ä› šH(Sý‹ÄJæ¬ÄÔ“F8œ|JºÊ!$Œr¯ ‰?¼Øk•¾Þ.(Âu3ž\ÚB?w`´oèeàüô¬/tdýPX)Én׫V¿Û}–…Jj†Ÿ6Ôäú@ÂüÇü —$¬È&`‡³§W=Hh§Š„”EÑéI±è,%†÷i !²DF`‹fmk.ʱW ë‘K&åw6©Äk‚ä•ñoôZÏAÙ»:DC´oˆÐ åÏsEQÓIBâN)ÈIBT×_fa|ÇÊ®ŽaÞ¢:Ü"àý/ áŽ,úÈr. l7÷ÖØ„0ëÝ﬛vWõ/ÅVjRù‰¹ÝP«hIÚó§‚"’V»YC20rÌV{qy“eƒÜ Ɉ…öUÜb5 — ø;R  P›ÕôŸýCÉ7/x†æ‡(OJ${†Çç‹ßÕ1†ûbÆþtßžÑ_ž¹ÏÏJ€†žý3Ô.bq±R-U´™¨)ŽÓðª=ã£þf ŒÊQù½K þAL%W™hú1@áÉ;ú µ°ƒM§¦¬ˆ2ÈÃ]ìß~^^ ”¯¯¦”~ƒ„*QƒùkjpðH»Îȵ#\“‰l ¯ü… м“µî\k-4*fJ ebݪÎ ˜zÞaª‚³â]ÿ Ð`§bt‹R™Þ±(•<úïþ=½ýSª9%¾“eiór” ®¬ZþŽvSK‘Î[ýTðݨUV“m ;‹„ý˜‚2û:&wY’ž0…Šñ‰Å-ߪÑïð%T¨Ò3 ¾ñÆÖ?MódIìõW‰†Ç'†]=I8É‘¸Höq—›ûâ™ Žöðµ$J—Åí‘ û’ïGãâ´ÅK?‰­¯ ^ìð/©7fk1ó"É:¥—Á~âp°NŒ·öÉy[9YÌ’ oË,bMdÈJvŠÒ œÈÓÚ”?‚\2xß?1p f}rVÎtQ:’†qÂdÃw²#´’ VX¦l·Z?_ãNh㎚âÊ@ŒSßþiÓW‰¿nÊ9Ú= ‘üvùâÉæNÔ3]8ÇCv‰€¤¶÷Ÿ8\ŽøR'ÙÃ:T´Z†’’I$’EÙ¢ñm˜ãŒ.jû.;6£[P²åü8–×徆mÀ}Ò¢D¾îÊ$¼×í¿N#£Ž¥<ï0Ìi¢{¹±>Õ«—y{:Ÿ[¹Æf`éÃD†‹z÷YâK²¶oÓÓ Q䎷bHŸ”Ɉ‹³1F¿ˆÝ5ޅ⦸ʜÖ/¼žWÆÛ’I$‘©²ègÑ H:C»Ì‚DLThФš•rye²¤hCtv– Ü)Óªfü5ÿ9w?ÖÚÿujÈ> ·i¡„m;* j©#1ójrä#x¸, Mƒ-«g„0X߈w`´oå«$›f ²À9¢­P…~»öü iGX9ÅUÔZ¼Ç:¯{jTܪT=–œéã¹ÑŸn ;.©×§_Þ;_ZÕ|­ê,]Ð{nïX²d^ Á.¤öôá+cÎNÓ:LÜœ×ð^UUwšôýŠ­`bu]1Åg†¡‚>…—H¶¢©àe°°>˜þ{ÓÂ$Ö/Óu¼ÜˆUÍt 5­,YÐvçÃÑ<”ñ4ø¹l·[Åb3¡3X‡mèòˆ0Nx*½ëX=ê`Ž«ÇÁTa‹pñy­6K6`½Ì÷éÇÖ.:®ð†Œ$M)uÄNp‘œt5o•U¤Ï]{€Z»<S®r¾.’¶ ‚ ó“_èC´¬Ú¸©)DPï_bù“ ÀC—Ï€µ¢?€Â¶ûqÀùÁé…wî /vZ’Þ{Ÿ&AË-‡±[uÓõÁ„wówêD -W ,”“ùoh‡p…ÌǺÓÊSvF:#.X·¼äwÕíWWˆ™)!&»`z3¬±ª©³ Sªÿž\âæ)´ 3è¯5ùô–rÑé$ÏÀ£®Rò—‘'g,¥“mãKïF`{·°:R¸2ÑEˆð‡nÒ €g”ûTÔ£<î^ÊjZ[îÅa Cq"ã…¢¯a@ÄYjGw‡Ö\»"ÖôýÝ\þÍPÁ6¤ÏxTóŒÏ€w`´oèQ  n ‡R’-œ›4Ü?8¸ €Ò½>É}»¶ÉpƒüÒÔ–—Œµ¶j|ôˆ×öË2¿Ïü[óìê?¡À5I™ÿsvJlÓš¤ÑÕ9_3]Æòˆ0¾,¸;³«œV0-HâùFk§FÑ{îåb9¿ßñ‘Ù”M/ ““…ÞSn“®CßÛYfY¶üK/³^Þ›µu¶ä"Ôüˆæ*9´W®~Šm@ö§Ï¤¼¥Ài}áÄš„‰@!ú×P`§ž2c\V ݉סYØãû½‘§ÿËŒåí ¬ÏƒuBlXކ!3…<ÔÁ‡ˆ{Ÿ©T»Á„_‰ 6GXæ—6q» VMZÈ(‰–0}t Õ‰à—³â Ò>f¦ÞXÐ¥fB.•Y õSsüUý8•ôGgØz{“ÖšÌöw“gzŠ£Ú·ÎúänûUïp.ùEzCŒ#¬ŽWCŒj‹±ødµxnZ®Ï+Ê5¶GÖ÷¡µ™;³*¹Ð唊Zn°ÈºÓu âûŸ4¢É¿J©ãíù¹F×ÏòŒySµ YÉ€vÖãJIš£.þ•5*¦A»òR‘|Gqì/ÏUy9ýò™g®M¬]§Dd9Pñm¢ÿc·¹Ç®P7î‹ðÖZY°aèOûCmëkðväzrÐûÉú—ÿroäi“é´<Îôo<'´éï¸7ßö`RV!ƒq9ÇѶêé\Jç.ÿ5!€À?n+‘×ÙÆL¿1v6L4+µ2h+ë²´ÊWÙzþSf¡#rQåà ¥vÂí³êÇQó©mR{Ú£ps4’T “²ê2HWZ‹|¸u6†þtóL`CT¾” Ú1[ë™úâºY‰°ÕƾdµÛðÕ¯I#À5¢]·Š?¯ ·z%j~(IS6Âx€–;Z>:HŒòD"©P"”¦ƒ•ùÝýý> )à! Yò à¿… “& f„Q'\%Ædµ¼Ú£îÞ¢¡€~FG§bƒª.ÅO‘ÔÒ6—û~z¸ÀާD¢½0ŸÏ«ªŒœ<õg)Y^êîáø°+gSJ'ÄÊ_Ÿj¤7Ñ,÷>´3=ó|”¬KÕ½[¡5 ¬S£íÌLö"vz ßÝØù&ñšvÙC4ÓÙxsm‡*óýkóØÚâP?™sÿ mR]9Ú•bpè!ˆÍ>U"{5`m’ÛQ¸ë)ã<¿™cI,È ´‹h×#EøÔhùŽÌPÄlä·?]ÆV1—)J¿Ióéµ¢‰îæIДӰ¬_@Nî‚ßÉl#‰„í§Wv;ÜÖ­¶»Sá E‰$×k>)jŒì}ˆ10 >{µ5'â~3U%6ñ:ãܲÌ=á¿ &®¤¦¾iÀüÔ_B]M)>½ƒûžƒýšËŽýöÓ¯Œ‰>ò†<©*¬mU"¢ À4\~Ø*ë|îÍ”W½ùÀÒ¼ôl2Ú/–Õû0 >ìäXÃÞÑD4ÂþÏMSÿJž¤€ðpÙt§I‡€…ÔÅ„ $†‡šØç5zJ3l4þb~gê¼ç¸ŒQ…5¼à4±w…ê´ Í‰1Rɺ ?1 hÑs²Ü‘B{˜ŒÆ¡¥¼*zK\ÄŸü­XÔ8qÇ&×Ûº}yÍqÁ»q¶wmñ<2y”4 ŒîºÍƽÆÐÌ0Ö÷íÖ¼@H$ƒÏsdN˜¨„[9„ø"œÖïôæA1Œzöîwg3ÿ~†±”%ˆ¤ˆ…®õMÔ5x'7 Ç{Bƒv#6<„ô4î\IŹ€c'}+ë4•ò´¬@ ƒ§2ØQ”4ú$+”ýÐj¸õà¿‘¸Û|ù‡’­Ppc?ÙGëÐC{QGÉ¥@6¤!¿ÿg[œwj®¦«­SƒZkltËx6©¬ MrÇªÞæò[6î óь𗾞 j€ƒšÎ!0|¬€ûÍ0ÂŽí­ÃëÂE¥#r[øF§€|â‰ÿ;Ë#»óÎŒReWn#˜Yâ×tË“Äñ ¦$‹.áä:?‡ð!@h6ä’I$’I$’I$’I$±À¡võHøÅÔÅ&ë=£³¿Ñã5KZÕ[¯äÀ¬Ü‘Ê;?yòÜãÏX'¸‰~úÂX/°¯K ŸJŽle¹‡6²–2»y“Öªi|©d¼:ô~RV¥g çØTéPHm ÿ&ŽDbÅ;®ÚÈQ’Ù‚õI?¤µ¾d¥bbÈ ,jlÊzœð‘¶•méWù>ûnF½A½ípqµºßLò·Ìltg=ý—½n¸íÄTs¶ˆù-¹H¥vs= L”…rI$’I$’I$’I$“ðcT¿Ç0íŠØ,ÙWÓQ{ cµs/Ý‹Ol¬"Dlâvz ƒþß1n—¡Õ”Ky¨ÐqØýbÞÖ²ä¡0Ž,LµU!ÿ KQoÕ ÔéIGÑ…½ïpà=\©uAÖ#—`b턈!ËF3lÂïE}Ü̼ão\ßFU ‰–¥ŒAwgmãtô1*]ÙqÃå]ùk¦À‰Ëåd+c<¶€~®c´’ë¬{sòΣõ÷—ítòU½NÀ÷*Cìf´T+þ´.e–Æl”|À„ö#«‚ ’`|™wq/Ľ‹^ùÈîFÁv%#:’¯nD„Ói“jÇ=” l¢ß\Þ¶Õ(I`ÀU@§Ú'Z¨µvÄ–U&:ßígœ ÆÒ÷nÛ*_°ÞÒêHrÜÂÈ=5¥ºƒÉe0ìm» I÷ ÊvŽC¦“ ãyÁ{¹Î!fñ¸»ïºLa|.®œ’†šÞüäªÇ ã€ûcê”2Æ‘¡®K~?Y= å/-!IÑqwFƒôK ?K}w¢;tzQ·kV³ÏãtNp-9˜,\½@ ˜P. 4p@˜Àç7 Yë°]¿›îln¬Ä*vp¡e6ÙÇëgDz&¨ŽÎưLõ®[Úãº(¡[1Ñ=Õéá°ÖT|èÆ¬åY~ŸÁ1uÕ„ÐDž+âªV¹rÄ¹ÊøýVröYáãD£jºð ä |y¡Ÿl^ Ôv€N‹}gÝØ¢ó<;ÍøPòé­N(e£ô+4s=œÒ{¬ 'Ág¤°Œ(üI5WmÚ6 :Ñ¡8ùžKDºLYY††U©B¯‰ùlr|c4AUpÏÕ“’¶€“ÏäNªO¾ˆBâ•Ðu’cƬ}3­÷rGÏ+É5ýÀÚª.RÔ‚…SÝUÏû«óìÊ?œ@5I™ÿ}š u|Ǩ£º—N,IÂÇ~9æ„ Jôü즦AÊpjçáy;™å!$“–[Sn·V”ŒÉ0Ù¢·`àßg–Ô8‡¸ú¿rjN’‚oPhÀçXAî xzZ$Ô¯ °=J„ÞÄIê=‹dÕ¡k'¥y™dCù¬ß„JEŠI \eNƒh¬ì qýÞÈÓÿ˜Øtàù-ªmi~Ó5?4ª:Š˜â½¿lôUð§1T³†®…KOòÁÓ»Íâf0] pé¿gÛ Ù±w&1×jTþˆi¥$3›¡j™¼‰Ÿhõ•kª•ˆúÌß*gmà ýh‹^tTo1ëiò8&p³ñgv¼±æ›³¼›;ÔU¯³6±½‡ç/·{ˆô²èL Ò>9ºzOÀéßï¡KSByÝÄ„2±6×úFÛ_?¿sÑh Ð Ð}¡LE$5þ¹= 9’º0¶BPùÖÝöXvü«À¥u¸bO¼”v| ^Zü£ ›2UçÙ«Ú(º”Ë2©$Hd,ÿ*Á½"¨ {)ÂÍ`x(°H‚æQ)GÅ×ä(«îÅÖ¨§ájXÿ·P÷Jà"W9wûŤuû#äãÕ«ÀV$`æX·£ðë `£BÀåö]Ù¬ìͺòI>G;º\*=º¯ÛÂo[#Ú@È‚„ß ¤ßa}.¾Íb5˜;w6PHéÕA9U™bßû›Ä–Ðu!eÓ©Q¦'‚ŒÓåR'³VÙ-òpå9€ªÏ%Iÿ ¥>§€GCÇÓWØQ'ÏúÓ/’-Wý&1 µÀÁqÕMf`Hò~‚É =~®>I«‘µðüéƒ#îô:ø´Õ³|pŸLƒƒ½†ã÷E‰$×k>)jŒìz3×3 à<7Õ‡V°†qHr>è6#]B g›AœeLzj/ˆ!.Œ¶Ÿ^Ä»”·y=SÈ!‰¥IUÙ²VU¥ K2„N£6¾ÿAþö>°[”òÍYy¤á{öü6Tä\v +Ï0g÷«µû,¼ y1âºEÃò ¿ÿxŤ@aÇ×T̨i^FƒF™a ¤©4’e0Pæ8¾û K Š]u )Å¯Ò 4“h€õKc~»L&}æo»Ö‘‰"ýš¸Hõ2¢ï¾¾â.×±ÕwÕ›¾ŽtHº{ Hm‰…ÀQI³^‹ôú‰°£´rQw6 ÓèË[Ä÷Íþ[= ¼Þ3]´ >5¯ã‡»Õ‰ÝµþÖ„cwÏvs?ûÄŸ´ ð8þgÌÞã´÷g9ê•Dm²,»õà*jËR­Ä!|†Dœ;¤ÑfR˜åØ¡ê¾ãïEP^ÆÌûù—­¬éú¨"7Q²œ±2œËaFPÐè®R7÷:pGmÇ k2`ú|UOÇ÷­ 8}Ø&VnË8©€ül¼/ÿSðX+jJœlÀGúzd)¥üJ ¼€1zdB?7ÚÍ¢\Ã4—Ý®oä®Î·Î™¼¤ %zXt (.;µ¨ªÆ›á¤±É l¶…²Mjã8þ@åj^JŽª+ÄèþtŸI…âu~’lÝÅP˜qÅ A A·$’I$’I$’I$’I#!FmÍ´©²SKª@šT»ÂaÞÀ0Æ ¯Í[Ž7Æ÷W›¹9²òh8¿Ó»¹Ðצ'Ç£U1\ øí[®`ç‰?(‡¦ *‹\9úãO0èe°°.Udãö5(Žä»ìG¸œ(YM‡vgÖ£!?ŠC³<þÙ5wK¨8@*éÌ,úÈ–½_¶~¤Y†tÊ­à9%'Ðۥ̀«5ðÛ Áß¼“öÙ8Ê—ÂÓçs+ë7 צ"¡vÀú}03¸~¹^'þt’ðð$ÙkT„°¿û_X¨¬DÐG2&±Œ,JÔð¢Ò­¤èªT›Ho’de™ô£NqóS8°åOSÕx†£]=»WÐ+®tCg™‰xIrÉTU…SFò"íVƒËÉüWAîxºiä_&CRë­1bmTrã± nZãRZl@?ûÏÿÛóíÂ?®5I™ú€¼ÄÎFêµ”®‘LjSýé ~uu?ïmaXégÙ&*ï#U0q|èÜPÔÆç&`)»ÛÚB®¯šX22Jô ’¯¦{Ô•^œµi䎳Q?Lz“êÅÈÆžñ(jw}P‹óa¢‰±Öh W ‹™¼ysÖek»ˆžè8öNGÔÅ(/:ž-ÔH1æ†÷Ú]UÃÚƒ ‹‡^¸]Â…¡jiŠÈÞÀ—ßÝì@.ÖÃRÑiW@ê+õ/ÐKMC¥í‘·Žî§xjQ[úà ¾E%½xV8£OþQ$=ÒÆ+p# j¨‰–Ihiz —ÕH;g 6µI {J¯µrÂ5r=iä?àïùHðáàúLGGéâ—xeS‡%vhRÔkŸè Á€HûTÊÈÐ6©[‡Š?EÃÙi„Ù›Új½AÙ e<Á q¨ÌÓŸhñ¢g K`£o¦o¡máÙOX›ê}!Ã3"u 3Nß}Õ%x9‚^èQ;F“Z»(Di?ú‹zO!ÀÄÉ٩ݶ»«˜°¿´È›£x :;=Ÿp”]\€!hЧ“'„v™ÅRÌf \ë‹nðeð#HÈSÉêYìO)x¸Ô dÏa§Û€ëV=K-äÚ×9gQ"A²eí+ÛÞ…VÑ}ÓÎ%TñÊôJ_ '&‹ˆ8ø”äô75«b$,8²(VnLaÐCš|ªDöjÀÛ%ÑÔ3©,‹ýmÎ:"+‡Ý¿k~÷â_TÉÍmgW`Y¼«ó1SÈâeÎÅO Ze¢GŽtÔ¸#”@"ØRµ}k¶´?·à†Ö”Þ¯³>÷¶ž‰f4iyp¬çuºÏ]E‰$×k>)jŒî <€ÏSÿN Õx)ªp›|qŽA€ˆ6š‘¤"M2:ÃRv¥pÂB[ îe‚މÕe­xÓ])i*J®Í’²‚QŒ„ÇíóÓ>­šˆ,³j™â' øì1ÐàÂÛ»"˕Ƞy­Ùg•[ØZìÞ­B¡î/rÿ|V/©Í›ó,¢GGÕV¦æ m†í£ŠOóÚ‘bðMƒR×€@‡ ûÐÝiiX K2üÃÿV`À?ø8lºS±FSF¢€H5%ã•ÀǼÙ5•\ŠÚS°ÈÜÆoƒþfBÿqdê{­K¹€5Å„ZŸw¹ƒû,>þq—^.ÔtÙx€]´¤ÍO$'  µ'CO Ö6ÊkÓ’SÏ¥Ž…î0ã”Êeº® Ìïe8)þ¾nØEqÑP•ªÓöe½±•f; ónb}ºÈ¾Uߪ²5îlŠÁ0ËXä$&¨§ ÿxváä–éE>m>eâø¼G&M‹&víG;ÖÁ'$ÅJž±#áë’= ÝÚU’6:^«\þúLy¤]fö“Wêùè€tåLjN1†€ŸD…r‘¿¹ÄäVfc£[ÅnðXN‰‚F•ùÈF ¶×<”úY,§:íðIŽ~ÔI³ôP2>­{ÿ,­~[Ú*áJ|©¥h²E]~Bl0Ùè°ðBI9úCàÎܳE ;½ý^¡¿—rOuŸ‚a ø+Y÷vaۆׄ‹JFä·ËA­á•S\é”åè4¼& ¥æô‹‹ÜÔÎc#ÙgzatŸÖ÷¡ýpë¾bóXù–‹V~laX<çÐB€ÐmÉ$’I$’I$’I$’HÞg»ž¹êÄYBöxE$5«ëø³^®PC&[}c/šf…o€g—ÓÕ»v ãµ !,a¿6ÔKKîÖ® † 7*)ü×ÙUp è þé ÆwÝ„1¿:,­a‰¨=õ*Ù‹ $ôÜ,Y‡y³Ã>š«hÇJ¿j܉·Ê¼¸æ§%áø¶’(¼ Ϻ&dšCj`™{W—YeïÑù}ŒµSGÄjÔòN»2ME¿µD‹€Ä@PmÉ$’I$’I$’I$’Ouª¥ôPPx|-ñj}`~d"SûÜaã³šË •:O Tã0›e‚©0¬aÔKy¨ÐqØüüúʺ͇fMc¾ œ àD°â n·occÂeѬÕlšVû€³òŽ3A*žøxûÝîTddÌoÀK«‹©Š¯9e™„Òâ@Þ‚+ºÌ¯Ná2ÿ*Eìd$·L*A@9ø0Fî@#¸º\)Úœ·Iî‡xý¦rûVýe3 ZUA£˜÷JÈë&øG2¡¤ÖÜÞ¼ 'qÅÈM1mX›þd&q&*¹Én›“¸ÇQè ºz2l Ï5¤<9ë'Nº²”bË„´ D´çÑÕ±ZRÖ®Jšõ#>A|¥G+³°áh Lœ$çBƒ»Pýþ·)8b‰`ý"ŸEâËã«¶,⣯ïîn$0ê/ÄÝb1m²LçsZ8úÌÉB¸ù¹‡à^Û=“· Þu»(–yî9dæ½éÂÅ(2¥>î$87’¤¹à.©ù~òtÈý&&z¢œzc¾š¸0f¢Û×ùù‚$åå\ «ÚÔÇ= ±55ëêÈå#æYßÍüR»è ìÝçm)ü€õÛ*ÙšV¯ M˜Ç*Ô–%œÝÏ56Â\1Ó<W 4ªô` ”2M=U´¦Á;ÿ )FU÷¼C¾‰ÿ_¦µ·üH6ÏQ†¾ãꤧxáíiGyeåbã¹+]Èfqq‘î(¨ýÍ%çW+zE(âŽVÑ.^Úì#m¥Á[c.g)ŽX†{è\^1®1ÓðKYÃãæ/‹Ž÷y0 É<öò÷)ÔÞ¿sK©µKGnœpQ[‘¶w) ߟªÁ@b´¯/(NÓÍ#”UfRH$í`z€ õ•™QEP Ï}|Í4 m^&µºÖøZ5‰bo‡Ý·™Ö ÅJÎu¬9¡Ê|”ïåjù7}à »Î¶%BX$Uä,¡Q'Â\Ñž‚:‡7ïÐá@ Ùî¾o›¦ð÷5oªÍw×tæÑ!À¶´Õ<ú`/ëÿJ¹,‚IÊßΓüÎ9¯¿E RÞ]w*Ždd?Õ㥇M8ÌHÀ¹:Šö¤&þAFˆß¸ ¡$o¿„›Hp;³1—pQŸøç ™Ê8¦”¨n'71*Ñ;ìÜ©AÏ?XDÉù]Š7·€7é(;vìð‚™~+ðx_ Œj#Nä5$!ïÑ;ü8“q  Ó µK_UGòhÕŸm hM8¬7*bðßÛÿ8;´üÛÔš™†«WÏi]k¡Ã­ø·õ¼kI²¶ï­xʇקÞ7+{ö<Ô6Vô>ëçv2µ\ dËSÁO ß ò†aUGsejËqtažµ£ŒZQÕ<}áàåfKj¸ý[ùê'šâM5yêë$˜nKŸ]šž`‰?÷°ÔòO"+àÿø@õñ_¸0€Êìp‚U©¿`gÑŠ6ò™Â'0á`>×ç&cW½{E.×±ñˆÝ)N7ñ“WPààÎ>f[®¨ —÷áZ‡9üáñœž[‡ÅœýUrâs‰V1Ì8Ô0©"ÿƒµî]ý3¿ôµë°ñÀÍ<%˜ ×ý=V9!­q0Á2´þ^f$Ӊĉý B(jp«~ª,§Ú3~xÍtÔ“Yy÷U ¢Vg[/)¥½Ô?±ìë²Л‚äm«dêm‹™yyyP³ÙõûA»D·*MW—ZèóÑ‹µ€í“=ž÷ˆÿ‚$!&òˆ…©uVT!ŸŸ Þ¯NU+á~À‘9Œûæ.•P0KÙ§µ€o…¥ ±éæÒ6ÆÕjjÁ ªJoC?N….~Û›! ¬¿XKzè-P(I¯ñõJõ…õÒká¤H”(ÜAddóÓa±d`íZßÿ}±â§Ïlíè®8# •6_„Æ}P{p¢çRüzØÃ÷¤©Èp)Å:ß^“è'hлË&®c¿Àz8No­°„’!=ŽmºõàVVªà¸Ç«‚[¥12ÔöÄž8‡6¾šP¤ÂW¿ÙYÕ$‡fшœ ÿRÀãŠ0|ÈΡv!:¤¨È ï?1{FC]ëf­þ%¦@ zªÅùŸÑPr©‰ª+ˆ:.¾ ¯‚ÌösáÑ×2òΚ„‚‘þü‚-Ê(y@I§€€>P OŽ;@åwc;Ê®¦Ûã0×°bp>ȉÓÊ­fº‘ÆPé ÷_7mÿ<1/9ûVe¥¢'‰“ÛëCô’E:Åx˜–¬._ùâõuE±¥‚ßñ|Ås"qLc%Gãà ٠$‘Ÿo}ÿ^x',âL¤xÛYÝzз"®§ï+à¿O ¥kd·z_×÷H+º%lsE¢AO(ŽÄ ÚJh7˨'^K›]g!LŸsÊ“5ïÙÎiUÈwPtk"1¦*­EŸipë'ìZ3/8‚òÆî·*Ú%¤Z;°T¿Y­JdáO­b’ô zÞž»V¨¸/EŽŸ×¼ÉL6FÒx닦¾&säУ“Zx–ˆzšYReœ(Ç™†aŠ/ž•y œ@ÿ)yeÈåcȵƢÁ³´¶\€/Ÿ¨ÜRu³d\Þ/å‚^iEkvH¥KþyôV6ýª7ý#Ÿ¶€1šÛg`ì^ ®K.aA™P“¹¡zJ_  qoï¡Qm=6ÄWO~G ôçFû\—m¡Äé­F¸Ï²à8sE~äX¹#Wå¹úgÈ t‚b ÏÈz·Š©P/õYâ‚(»° óâÛú Gõ ûâÎÊŽž;êfºH $%t8º¦*ûÍ|ýi¶8ó9h2Áè¾Ð©sSËsfyô ÂAA7„„>‚!¹ë@â‘ m{ÅÓ.É låd¼.êsöSPGcƱˆC2åæÖƒG‚|ú}šBm˜–øÈo¶x­ÏuìßÓ¾rI™p0; "ÀeS´—©æ5Õñ§2Áˆ:'¬$#ŠÆ•ä©^ {uñÔ*ãv5áù‡ÁÌÖêc¢Qžž^â³¶¿êail&3©gÍ© ÃÁѱSv ùÖ„—‘H‡ÿ_“íY0¬éÉ?q ‚ïßPÀâwãý•úóB:½…°œ”»Ùe@QÑIÖÃr1l·—¥J·‹²ãmýËGo£B¼Yf‹—W+¼1ÆÂË—R_^§ÉTi<±9ºóí–o—¡»×†N²aÍd¸d͇ß[¹ä½¾…Á^ëƒãæÄ5ì˜Ï°%çdóY­€É‚ŒZ>ñ¶°œÒ²õïÝ<ë/G9|k–HQÙœ7²7ï Ço«â×%­a®}ª¼@ÎÝSú¿Ìœë³`€“À3´ÔÐÝ-RbÈȶJzÑX0ÿ ®6%&—¦h KÿzÍ-¼¯³bQñQÚàŒJ;Zö´÷°Òöç(ß-ZJù,ÇÜ@ $%îø,@ $“8H:-*‡çîó¸1ÜM®ž üª\0+,Ü¡-Çú?ôó| Ôëµ ÓLöªxÂØ€ IÞÏßyiºd÷8rùÊ>ƒHZ³m]pZfh×Z”“"Æt“„õ—ïƒÒ判ût/ÀÐc/ù–mY’=%¿G§ì'TÅ¡¶/V*R¥óåÈt¼ˆº…˜ªTò:Éõ,‡$0­’þR–`ê$_;Ôuýg¯z©¦VR¿W>ìDîqÚ© ½mC¶Ë7Ú¤øj£¾€ˆ¡n7Ý "ßbŽ =ÉN^5…kqÕÿd«=O I÷îšx¿ØßÜÄHyòÎuÇÙo+6†":_øÿfS»%µøV‘¯_ÿƒi%ŽwîÁ+ßY1¯̼] ÿL£·Š1¤4É„â‹V×íÚšjê‘@m/­î•¡C,VnÞúyòšBÛ›º˜r&ÞZ´™úu&ú31?i'"Ý=âjöI&Ý ˆLeB/àÞÊþêrÎ)ðt¥Ñ<ž†1š1ì#òÔLrŽˆ0µCµ“44ø]ÎHÈ^û¡‹,ßv‚1§¶Æˆ £+Í3_Ï¥‘)oÖÀ=$wkQ–X»ú®*"$údU¸ðo 5Æ%6&дú¿ ¾qŠrs,®a'\ÔiKï*OÿGU½L ãºCî=ÝJxÖ×f…õàøŠŸLº’¸Û|IÉE8› ‹%ý𝙗·„æ”·@ç,ÇK»ÿçx“2½ñ¤y™R¥ê“•~P@åô½ôǾÎ;‚¾N>U(ßWÒé|6¨¡‰#lËy”Hj=_Õ*·l·Iàp) ‹[EArúS–¼Š_šßëvÅ¥Ô‰Ÿ¹Ýd©0‘^qÚóü×PuÜ|{Z¬Ù¼ü ³%ëç§`ƒøQXe§ìYt­ù‹©Áx¹luò¶¥C¶Û敌ÇÖZ8î\â­9¹?HCýñmÏvU<_Æþ÷ÛöW$ºŠòäOTnß^!¼7š6¯]#¶ˆ }`Qj¹øúŸÌ4cÙˆ„œ” ­u“²-O°y«±û•FùÛ6̳ú°deîØkNÒsß½“ϵ¹5:ÇGYa†F÷+¤ƒZkÛ>dÉ2&Å´ærö²ž¡c‚â‡Y,ˬӺÜ27l(ÁBú±a5ÿ_ïÔ@%­W«Ð´=û¼*!‚‹ÿí­Ur¨Ô”¿žÏM­&xéAŽÄÙ°ˆÒEîF–"ÄŸž£,‡8SÛzµµï¹f\d©«¯ï^lÁöà¨!)sÒmÆ´ÅG>Ô†£0‘«¯¨Mò¯•X:_ vQº.aCaú7õñjl^߯ŽaÁ5º×ÜÉïŽßÓµ«ûZ9À"ŬÐ9ÌËMH»gx2 Rˆv€ðsL†Ç׉uß%ÖŽkÿBÒXÍiâSU² •r¬ñ1x–Öß2¾]×´AÀèü¨ !r:“í«E-éÖäüÿâÃÕ-³ÃJ‡[-{L(Jäa¼×Ý™³†.À]]þ “Zà ‰^TÏçp¼môãí®N¹Têû/h-“±ÀÎüŸIü{#Æt[/Û˜[5Ž^ùÅ-´óÑó‡­Bèûäÿ^ŸáÉ8UÂÊÌMcQh{Þ´"Þ™›ÑZ•½ÆòáÁ{ÆJYÈ¢ñwíØ4Ô—>…<Ÿàlj‹†5Š™ :VÆv° ·°1U§ÍÞ:¿?ø†za25„úÜ%­C¯ s<À%Ö¿Øü8ÏФËðx2|:] èN¾VYûtÁŒåŠ•Y¥´ÑÖ¸’+‘ýU¯ºÁG?Ch0Àj]ùñ1 ‹JðîKKµðö|½æ-ì-“´ŸŽ‹ÿ9.§S­Þz“~ãÓ»šmºcê–—ˆˆg[IÓ®û©Oœ´åº”‹2U¯Óÿ6q”±roع÷²ZîyÔ²@-™ †y•Hw‡Û±Úf¥úkm˜q|ê SÓy%”P!$×hcd°‰¯²ÔƒPÚ~³˜62µ‡iO‡œMqHöÍßçðWþ§ ÓþÓ§Úüû.¿ Œ¿ CÅö…ÿU7Û¦·Ûz€^RÿDÌ`0ü%‡[e¸#1EXÂÀ~·_7Íó|ß7Íó|ß7ÕvñâN (óÂ$÷_Û´¿þu†Ú{øVàG~iƒ¾µ¡x•ãkVróì‘Ùç™­?Ô˜¯ç?+.ï”l—Òo8=á‡NV!9„Ù‡ÐB)õgb>°Ïÿ+á¯rèJ²·¡g¹¥Í‚öˆ²Þ~æ@äqcßõÿ€È,N=f7!=ì5ÑÑ£ÕÞ²!DDœÚµÕî#ô±­}”¾è¯>2fmÍŒç$¿åu Å;ÙÓ$ᢆ¢®˜VKoëU e„¯4{ä®±ž8½!”àJÄÖU?ƒ36ÍzɨÖEJá'\šü¤Ùó'ŒË«#_`ÛÛä(°¦ùfò†Q ˆ4â/Üy°žÅ‰‘]>£ôK[Î,%Ú,PsrD•dÌÌSí=™ÎÈÖ0´ÒMá¬Å=bÛÏÐûù#GA5ú-Å3‘¶n–HÙ·%½ö?6"áRG–I9É`æ$ v«žâÜ jj!Ú[v¨×þù¼íeSîFþEsÛ*(èí¾¢ÖdÀåá‘Wf¯›ß4³êÞáÃPÌË­üïëçŽôôaÑVnRÁÒòIüç 7`ë;пԭÐÈ¿ÇÐ\"Üo®ò%¨Àót2KF¯8ý«©K“ç ¤¿910D¦ˆ¤'c÷°ÔòO"+àÿø@õñ_°n‚Ç„¹*ŠG¼éä¡Ñj.î5lÛñ²uâŒO ?а Já•w¥à®eÚ@¸ÚÈ·6…¨ùiíA¥•éwæIpêh79‹êþWën.ݨ ,¢œÊ#ddd¿—Šßù€‘û°Z™äY8`bT±}%ƒÿ#µuSï,ö͸hI@™ÓÕæýškq‹ÑÁÛ†’L ²¬_ ͆ó´¿qT~Ïñ«>ÐE${Šî$mƒé£àÀ´¼¢z,‘¡åŽ¥|}úÊ–kWëæ°¶ëæù·ñ†ÐHëHÃNƒRS*˜OÛºÀJ‚e,Ò™"ÔÁñmëM0έ\vÆã}$Ž9J¯Þ¿oX{p´÷BZÕÚìÀ º­ôß37†ª߀¥èýRäµOñÕ0ç•=ßñqîÂzl úë¡hëÒÁá씥Ä®¯ F èÊ4ÏqcËÌ…Ãd`íZßÿ}±â§Ïlíè®8# •6_„Æ}P{p¢çRüzØÃ÷¤©Èp)Å:ß^“è'hлË&®c¿Àz8No­°„’!=Žm™!mµýÁ°r² Qk§Þ® n”ÄËSÛxPàÚúiTæD®÷ÙnߪC³^I ŒEž\«Ùê'øó(™ÓÒ8FbÊ|¡e *;óŸ•3j­:Ñè¨N¨ã-êá©%Çjš`j.5‹vTädŸh¿#à•ßxâ…‚ÖU)~6é &è@ÎçWÝN¹á¡½(E 8¹tÙNØÐyÊg>´õÀÙÂÕ}º Âîé;ß&³;Ö2Võbw>ð€}äIá#èѹr5cBLvÏ4 ¾Ž(™CÛ}ÍV¦A˜% îúÐ÷ƒüܰíoä„ud‡Oõ¬,Ç@!X–:+IħžÑVgøcö;ü<¬œ&Ñu‹ã º£®\€+‘ÞSìS>Ê­¡éáU¤2T?ŠÓÔÞMX•²\S¹%8Þç&ú”n©C¿½þàéÍ8må §?2ôd¥Lûô•eŸ­§Þj.¯qÂ)­Élš 0¦.Òe‚àA|òÇÝD}3RžÇãà ٠$‘Ÿo} Žðãtˆ+{åík3›h‚òVêï DsA“ÌbN*.ñˆÈ7tŽÙlµÐÖmðöí^V0nËäè›{¬ÏÐ(H„° þ i—Mr ±Y‰DK—ݹù|S({Àî´B§ªxÅù‡ôžË½ä‡7”ãû8A$6„wfº‹>Ý‘ÅN„¯Ëÿ\s2A({á/. £®€È˜ÊG0ÿqÙ¨¾$‡E*¿(a!2áÆ',ÒüŸÔ†ˆÔ0# fÒy¦<ø8«ž…LD®S ³™öˆò_?f…EºkToh¢ùšòçÇ$Šëœ©&²Ër6ð(n¤ñ3á³ ƒ-N™Y ã\þG»OEø‡Žœ™uûXñ«€ÝàòÏĺ¼rÚâP €àÊgap ®"3¶`«É( ù'ùO{hvà Y‘îÙeÕáŒÛJ–….˜‡ï'•Ù/u|ö«Ò÷€ˆæÔÊ9`èfå–÷yÆé×£v£=|„êÄm̹×S”ò›ÿ‡‚žÌ«xÂtò™Ü$T>¸_ÿ®´¼˜ØïY b מ÷°Òöç(ß-ZJù,ÇÜ@ $%îø,@ $“8H:{6fçìAPtÃ1KR‚vð‚,„0æ ¸J}è85 oA³ˆ@luéñ‡Tb^ædhxÈŒnÞ „ƒRw„ƒ¤~óøÚ”-í­¢ÐT8Éù:–JÍlDí€|5—ò6a2â_;^o6Φ#öÆäWNNÿAÿ"”·@§çltÉ-þû*˜îÓß!ï¾2uãÒÚÐ}1ÎÃÃO™ŠÜùiqpÍÜa\^\wF î|"BJr@¡Á«ê«!ׯÉ'¹ŽGÁ4B2ªì¢¹H¦Üê‚M‹¿YxÏ"¸Ê¬Bûn€&üBç¬l²Y߇duê6ëb)}ôO¸¦²°w =q©WAÈ\a´ö—ÕσÔFÿ~vªÚR¿_ÿƒi%ŽwîÁ+ßY1¯̼] ÿL£·Š1¤4É„â‹V×íÚšjê‘@m/­cBäKꢸŒtÛµíuþA”ó圯ÊÖÀ¯ÃËÀ‡‚Éꋈ¼d…IwiÅÊâ+öü—X‚ãðS´›l³Ý¬]Ûr¸®¼3+æ9XÞ?6ø‡Z=Pt froz^„³æ•’&–Òl'펶+¡i=öJÕ¸2ý  ;Oó§Ý‡|a„K—3f2é ”PÄtRÑÁ;\ÐßPä8iˆÖ²H/0„ä¿7#·Òø¤‘*uŽâ]’›î¥"&ç‚3¿(„£ò}~çV¼îªœ˜!JJ¶a6“Q®n8¹©6ÀbvôK ê>¯ËÁ‚Áõ7Ûf|¥ÿ2!“ÒïU@+·12Fk~¼ #êaç ãìGª/GZÆë/*pü|éÄ™•ï#»3ƒ/Tœ“Š©<~ Hø¯,ý僬IOÙ6Oý?Ç@ªF¡6u—Ô8=7Ø+x¯"q¦€šq8¬¶½fµce基Ç8éÞ8²–ÞUV.í8ÑF?Ž[ ;úÑž·*Mø"p¼“zrÂÞ"ÃħøÀl cï«TÍk„c9ãGQn!"Í)”È0 -ÆðOEy#Àb3ö±ý;ï’¨Ÿ|S¸Æ’–œ&l>tó‰5Ó‡IË—Ÿ:áäFŸ# Ì=Òæ:jìÎÀíìÖ8ö+Û‰£ÞÁ.Úbv¹ͬ8¾\y‰GW$=ñ²—‰/ÔâZŸ;L§.‘ŸN|{Á¨û@ö§Qz˜\[ŽÞuüUœu®Wx‹†Å¶E õ÷LíÑå¼n”lÿX·bx§îrÒbs Ûh±p;;u#_YIN ka´¢IÝZ5YB¤‚/~OLÛrÀ“ÁA¿"_BSå$GÇ¢Ô…Á×¢%+¹F"‘G;oí˜$zE3¾fz>˜ÍÚìú9õóZè÷`êh;JÃI/›—øp4!¦©AöݯIAÎ"bàeywØ×Õ¬;$\ô`V´ž²míÿ‹21WžCß*˜ùYGãÖ¬'‘Šü@?-”)¦ÕJŒ÷ºØ=¬ÇêþÇà0Ññïæ‘Éûçg  ¶àî ¤ Šýô"¨öƒÀ®„…r$ë)xæ¥Öu‹«0ûóT‹ìh kÍ!%KÃ\桪ÿ.r¶mXoÈ…’ ÇGXi¾w6šÌ¡ä²T—½ ¡0ÛBŒ¾=Hv¯å Ñw¯ø†zÊlÞf˜dwH÷Kâ×È.*F¿hø+%°t‹íl`uWt©‚’ïù&£ÓåÖËW³°‹-·ú<{ —S%`ŠôC×ûþÏy»ž¹P¬^J·)†~“¶÷–è+ ‘ÿ€×²é‰Ì‚#Iï+h¼Ckжϧpìs¡»dc~‚(YÝ|Z‰ Bçþ¸j`t]TSâþUõÀ‘×5õ¡=eoþ¥‘„É‹"$mGËoš”º6³„’0,ü/½nü¿–0þeÿ4÷/„þ¾Ò¸KÏ…V9ÀÛ¥;Òá­–¤JïÏ#ø¨•*íÖL!vå¿çðWþ¯ÿFÿa´:}©ßÏ´ ðß ðÖ¬_h_ðêòûv2ûtœ^RÿDÌ`0ü%‡[e¸#1EXÂÀ~·_7Íó|ß7Íó|ß7ÕvñâN (óÂ$÷_Û´¿þu†Ú{øVàG~iƒ¾µ¡x•ãkVróì‘Ùç™­?Ô˜¯ç?+.ï”l—Òo8=á‡GMÑ`ÞÛj±F=¢&1›ý¡–¬$p3Š\¨OÁiGvÌnTŒKwS©;-;Ñ#³Ä‰°ax5F8cî°I¬2ŸóáÇ@úl¨Ña`ã˜Ü„÷°×GF†uVB&=éˆW˜(ê¼ò+4-ØHAöÔ§e”ä€ H×—â!Àq¼§ÃÖ]÷ ‰"">H¥/Y‰³æN-#—VF¾Á··ÈQaMòÌ3õ°1î˜õ@}¬¥Ãœ™Áï8FÌ ÑZÄÂ"­â(­ª´U:c]÷³–KÇ{6¡R%^õë¹Ô-¼ý¿’4t_ ÜPã9fébèF›`Ô®38ÁÅÌ9­!0B^¹Èjdo±Á(RèCÍžb°<šàf´÷ëB0†²Å˜ü÷%kËrpEï3èBº/nŽgd4§Ñ}ì;½ì$5 Ê€V£xŸ^î$87’¤¹ã”ù9X`YÑ´)Sib±Ÿ©¢«ú6×"Ð`-ÅVsÂ}ncüºø‘ÿ1´BëZã?¡3„ž=xŒ^„ Tr¶Ü­ú¬²T-ßõ}´•˜`w­j¾oê .ƒ/‘¿RïÊÀ Ž Úøä7ºÿ$rÇò2Óc¶œ>y@¬2 òÚÛ…œ€_¦µ·üH6ÏQQ‡VÞôD ÆÜ,ßC“w±WL,Ý6ƒåNËÆÓ©âÚ[^[Ó¦ÃJtÃåÔWýÀž¦–e«¼uî ©—›9Ä&€¼ dÏ®<(.´)«»™Â2—+ ¥Cg2ߪq›’zˆ´äSn˜]ƒ¿÷?ÿ-+…˜Ë5YêRL#ƒÐ¡Ìéþ>±KãøVKKÀ½ lix­Ä€»<«Enhrê!݂րü¡ùQ±#~…ê®ûT},rÂðO#2MUÙᤣǗ¸k[±¢L@a:º‚uðÐVøÈ%ºt´4tºþëFÈXLùïìËépx[Á|›¥î— !Ñ<­F¡Ký?^ôš#;¹æð–¡=»ž¦u 03ÿKqKæåt|ô“¤F&ç‰@ì¨À8 ,ÃñwDÙ([ÕוÄÄ  醗_þON±QàŒƒeЧFc³âÿI;Ÿ BùxÊÒ–&¨Ye¥nM(Ùá¨e“Ï FîÂN°~ëÂcÇ 4fïø{/²¿½_jËרé­ÄQU+"2øAfMÿ[Mõî[ £Œí &*æ(Eûª6¨Çun»›Gi˜3‘Häú?É:{ñóVàS;3ùíIì§ç­Ö¥>Ú«gS`‹IT~DÌÜ+ÜßzvÀ{ü5Óº¾$Lè„Ê2•°¾UÐò`öêI=ìhSþØ]ÅšQÑsu¬PWGpÉBäß’ÊÆUéã (Ü êêÕ÷Ϙ»Ð#÷°Ôðã¢ê­ƒæz‹ïˆ¬ jd£nÉ*v·C5zÑ‚^?ÿ8õ:Qâtx¹N~2±^:®3@#‚ûýýЬój¨V²_¸¿%ñäpBÙÚFÙm9²8‹¤æFáüÄ’³ &Øsõ/2¹¡Nû=ÅRרzUo%À1£©ýå¹I¿Ú{Gü ²¸ßÊA’1JH|Süáû7Dçf§lœF’ýb>¼ù[öékø¹ÂhLÚ!lŒq- ˜k¾uÓÉfG"nÚÉ`í ‚q¯ºxõúĸ5[~NkÚÍdEWªÏwØ 9p9¾o›æô”¤«z¥vkÎEÔïûpÈЊVr§Ò¨`@d“dÌ}ÌJcù]ó\ÏFl5ISÇ„'=ÛµV[=Xu±j™/E/T§¦bÀoo0nj«£,­IØJ!dN§~¾R2£ÇDDG?cqãa"1‡pQö*!’mJ0þûÐdß ØlEd`íZßÿ}±â§Ïlíè®8# •6_„Æ}P{p¢çRüzØÃ÷¤©Èp)Å:ß^“è'hлË&®c¿Àz8No­°„’!=Žm™!mµýÁ°r² Qk§Þ® n”ÄËSÛxPàÚúiTæD®÷ÙnߪC³^I ŒEž\«Ùê'øó(™ÓÒ8FbÊ|¡e *;óŸ•3j­:Ñè¥èß¹Æ[Ô1Â%RJŽÕ4ÀÔ\j.5ì¨3ÈÉ>Ñ~GÁ0S‘ '¾°‚À@¯{Þ)B µówC§‡M±A')R¾`QBº¶<‚ø;]0æXSêñ>3]ì,žÏa .;hd}[ÚœdÑ5|Á:–pû áíÓŤ?½˜i¨â¼€ŠZ!¾¤!­ îwwHùÞù5™Þ±”‚·«¹ð÷„ïV»è(a„~p ®p…§6VŒ‹®HÚ7ÅM„rji-‡­6·0« Í;S”8¥9Ö+ž!‰†Èjq·TuË—÷¤±ö)ŸeX†æ˜k‚Ø18dDéåËf]¹º³6òªúD|IÎ:í•™A·oª.7J—]+£ôƒõ±…Ö˜Þ: kýj¥ýŠEÁyš„Nôolo <`­'º~¢sîâ’2Î}“éé™u@*0ž(ל•^¾RŸiŹœ¼<ü]¼ >¾÷Ý"g,=•[-×"ÓM~¡óÁ£pÔy@ݘzdyÖ~]Çö®™(v¸ÛOH„õr%š6™5¬¹d™Þ}ÅË3Yòz/³ü¯ùWš“ëÎü‰ù‚ÑXÞ!Áõšœ”,¾kKÁ‡;õvú: “AŹAr±.ä±çéØú,´ªÎ ñ¿ Sͳ.áÆ6‰†2ÓÒ9R¨©C%Å€®^Éûj$*W ­ßdû‚~ÜÇ‚ :øÀx¢X@›éö ,ª7l½Oõ‹ê‹ÙèõöÎM]žzÖàtù‚.p—ÔÌn/\Ò[sÝ 0Ù<ԮǞP4q ¦Õpðñ„„ßEŽù ˆ$JE1ºDé(Í`<8rä€>\m *! ío×Ò()ÚENs¨z×ñ@zBŠ“¢¤Ü{îECh%ì™ã¢½gq`ê8PoY}8=€nëðv„ÇP­»Šçxãß(ÿn¦ËXdoº6îŸÌå×]GåN:к.KÝHJˆ–LEÃW#T™)3Þ“ç©ÍlÁÿ&âo(“݈®€z£¡ÔÞAÆF™Ø<°Oõÿ{FŸP›Iå\¾…Ø'» ý«ÒfÿòóhtgõP%ðå+ÎçMpôD‡¿žQJ_ †eæ1æÜʬPéUz‚:ƒˆÏUñÞñ4.+ ‡|…,¦¼oÈüs}LM溠»÷/ª[ Ð„ýš(ˆ®&zKÙ' ¡Ùê(×Ú*ï.0¢*\šçi’ ç|óùöÎøŸuwUæÇŽ{gÇ{aŒãÕnü°óèsögUOç ›k“­?|gtÊÅîÄ\Ën'1QrÊØæÕ ¾ûú¥yþ†í¤Í©¿¬1ÃR‚æÛ,^Œñ[~ˆ"[Ê(¡ê‡U˜F8%üÞæ7o‰Œº;>9ðk?¨yŠÝ]-ª—A¥%’­Þ˜Ëã§É‹ œ²CaÉj¹D´y™tUÓ™Xbá< ÓO7ON {%üÿxY‰ái¾^Ð79D[#OÂ…›.¦1ùãoö–‹ðÁ”eW~÷BMS¢Û#ÜLcΨú6I¼ìꌴPÛ.„#“޶lˆ7V1ß( ÊÈ'A0ðÏC2gÂùÐ3Y! k(¡âñáŒo)öWùÍU›w릊äD&Užé–M‡À“Ç:æÊ7eVÌåUâs_ù§ðÏþbQ&ºpé9ráà\k–’á ¥3p³u¦[J¯b]Õì0UŸó¹®ödMÜÇaC5æã˜å#±­#þúrI3[8ùŠeùœ²mqéj÷‰Œ¼~j¦öˆ‰ W¶?;*ÉäuX¬»1Gbi**J‰  $©£w  }äŸÌDØO‰)Çê'U+ ÊxRôZ¢ET,æÞ”KïÊZFœ1X [ “}8 ›)eŠE;¤ªûUÁ­§Mç„…¼çÛÃ`hyô!J\JûÁSÆi¶ãŠ]Ìan’}™žg‹Òò·¨ßºG«ˆ?ÏÅt í\sXÑÆxdH|ýÑ­ƒpu'PmT¥yšÔ§h‘8ÍçøÔ¿ztSé·e—ñ%%öo»Oâôþ¥¡‚ü˜ñK¬Âõ¦¡Ï'ógÄêÆ•ÎȵÀ¸“ñ£g†3U¢Ýî_+D}ãm¸„à#jó‹šð¸¡U(…&ÔQõäqéaTšðÚ*øyu‹ôÑÙ[‚.ó%Îç}õ)a‘úe/œÏå( æ7ÄË^.âÝZ+­e”^Åö’'G³E2ºæ8þ7Ý/‰ juÙŽÁ¿µú4@Å4ôìÇF'¡‘¹¡Í¿ #)Dª6`Iwݽ€N’NW1^ecµItD£š1”ByÚS@ãf‰ˆ§CãUç¡7ö¤°Áï£uçœeßéË&j‹‚ ˆdP{ÂnPAàu“úmžãƒBiTÀóµCŒÇáƒßÃ%tGæÑ¦5ùFÿüžUÒ¦ÎÌÂ]-ÞTõ"^׃>Ù>¡£€ps½Ô5õü`]dñþú 1 ›€ÈDpªÊÏÌ9þäždÙ€‘hsªÍM ”ð\‹µ¯¹CZ™¯)´ù1Ï©Âծߪá‰$ŸøÓO’ ‹5œõk ›Ä·ã²6a±f¿9ä)™8o¥…C)ùŽÃž ¸F7õgæb6öaüÀ·h˜3Q‘ ‚Ô¥z$ÏL°î|T~®ñ˱¯ˆÚ1øc ªwN´Ñ[qd,É/Ïd•ã²Û½ã7‡üý Ï®1ƒÄB‘ãö•~ÚÛö–~ÓÜ~ÔÛGþÓÚ[…õþÖëê¾ ðo¤Ðÿ&i7 ؼ¦Ødx@Ø1l€cäçt6W„fR·¦âB_W?ñõšMvº/Ø ÷¤qaZ…ñBº1I·ö9[¸8zZèm%3š'R`!Üp6F*& qÇ µ£ùääô±È¶"0häCŒƒ›Ã%Bm² Ž=“¡ÆiÅÁ‰Ô™~D4þ&ö žDþDÇzƒøÿGüÈá mD,w9š-À^q·Ôã`o‚L½­ýHѳù7røÿH.’€ðZÝ|ß6µ½8&¯n]³·ü¯[õ–Õ2Ñø“e! ÛE©a0µ¢è¸<÷ä |"ÒUWÅ ß™7±ÏùºL|ÏRd¼W„!‘)FAfÐê€ÿHüEÀ~·_7Íó|ß7Íó{ãi;p¬­rB¿þ¶“2²fíÞÈ v>þ"¬!Í""£¨6&‹8:ÿÿÿR•%uŠœã¹$’I$’I$’I$’I xB—K´ÿOê :éXÂŒ§•Òû*­¤€ßž±óOlúû@gQ j œ¸ "ÐVá8Bà•åBD!ýpl¢?’˜œ¹øÀR¤]wê› ÛM»¹Ï&œ)wh•äŽã z¯*+L}ÇüÈ ŽîX§«6’„-ݤXV^ ì$ΡާÁ÷>°ª#Û;P>þr$xÃçRWÖþ 3ÐÏ(ƒ\£š´{¥ õ{ Eð?öè©ñ»áz~l/MÜ8¼ H#R[7Üñyƒ‰K£5V¦J/ÂAH3_mâ“þIÓôGh:뺭]NÐ¡Ô |¬Ð[¦«”BýŠuø} €ç:å1p¿à|üˆi¦©‘ržãߣr†Ô¦•Ë­e¯×n™Ûÿ3(îÝ4é ±øê-6½Ìw뀧÷V&ÚàÏlW§Á¥Û¥º[¥_tYÝ÷9à'$!ݵ‹g]K?÷°ÖfÅüåÆˈ§ÿÙfs-uae-2.2.3+dfsg/icon/fs-uae.ico0000644000175000017500000007644612162366654016701 0ustar glaubitzglaubitz hF ¨®00 ¨%V@@ (Bþ:(  @É¢ÉÉ¢ÉÉ¢ÉÁ™Á2É£ÉëÊ¥ÊÿÊ¥ÊÿÊ¥ÊÿÊ¥ÊÿÊ¥ÊÿÊ¥ÊÿÊ¥ÊÿÊ¥ÊÿÊ¥ÊÿÊ¥ÊÿÉ£ÉëÁ™Á2É¢ÉÉ£ÉëYYþH HÿJKÿIIÿKKÿHHÿH HÿH HÿH HÿH HÿH HÿYYþÉ£ÉëË¥ËÿD DÿI Nÿ?âÿ2ºBÿ+ýÿD…KÿJJÿMMÿLLÿLLÿLLÿD DÿË¥ËÿË¥Ëÿ?@ÿ–…(ÿÄÁ)ÿ ÿNÿY•^ÿÿ[ÿS'SÿJJÿHHÿHHÿHHÿ@ @ÿË¥ËÿË¥ËÿI9ÿÿÿM=ÿ²£5ÿù›ÿ*–vÿ-ŠÿC@ÿDDÿDDÿDDÿ<<ÿË¥ËÿË¥Ëÿb 9ÿs"Iÿ{:ÿdGÿÁ£ÿ>•Žÿù¿ÿQVnÿIIÿJJÿJJÿB BÿË¥ËÿʤÊÿIIÿQQÿQQÿPQÿM$YÿÿöÿD}’ÿ÷åÿXMÿQQÿQQÿIIÿʤÊÿʤÊÿQQÿXXÿXXÿXXÿXVÿ/z¨ÿ+´Ðÿ¯ÖÿE…¦ÿWVÿXXÿQQÿʤÊÿɤÉÿXXÿ^^ÿ^^ÿ^^ÿ^^ÿaXÿ¢öÿQf›ÿ³ÿÿf2hÿ^^ÿXXÿɤÉÿÉ£Éÿhhÿm'mÿm'mÿm'mÿm'mÿm'nÿV;ÿ zøÿÛÿMQ¸ÿ;üÿoO™ÿ}2}ÿÇ¢ÇÿÆ¡Æÿ“E“ÿ–K–ÿ–K–ÿ–K–ÿ–K–ÿ–K–ÿ•J–ÿŒGœÿ*(àÿrE­ÿD=Ëÿ–F‘ÿÆ¡ÆÿÅ Åë«a«þ©Y©ÿ©Y©ÿ©Y©ÿ©Y©ÿ©Y©ÿ©Y©ÿ©Y©ÿ¬Z§ÿªY¨ÿ¬Y§ÿ«a«þÅ ÅëÉ¢ÉÛÃ2ÅŸÅëÅ ÅÿÅ ÅÿÅ ÅÿÅ ÅÿÅ ÅÿÅ ÅÿÅ ÅÿÅ ÅÿÅ ÅÿÅ ÅÿÅŸÅëÛÃ2É¢ÉÉ¢ÉÉ¢É( @ €ÄÄÄÄÔÅžÅÏÛÃûÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÛÃûÛÃþÄÄÔÄÄÄÄÛÃûÜÃÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÜÃÿÛÃûÄÄÄÄÔÄÄÿ³‰³ÿ“c“ÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿ“c“ÿ³‰³ÿÄÄÿÄÄÔÅžÅÏÄÄÿ’c’ÿOOÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿ’c’ÿÄÄÿÅžÅÏÛÃûÄÄÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿÄÄÿÛÃûÄÄÿÄÄÿMMÿMMÿMMÿMMÿMMÿ8q3ÿ&Ü%ÿ/Ò0ÿ]L]ÿ'Ê#ÿ+Ù+ÿN£OÿOOÿMMÿMMÿOOÿMMÿÄÄÿMMÿMMÿÄÄÿÄÄÿMMÿMMÿMMÿMMÿÄÄÿÄÄÿÄÄÿÄÄÿKKÿKKÿKKÿKKÿP&Eÿôÿ-ö$ÿÿ$ÿ<ÍNÿuöÿþ%ÿú(ÿ_bcÿKKÿKKÿOOÿKKÿÄÄÿKKÿKKÿKKÿÄÄÿKKÿKKÿKKÿKKÿÄÄÿÄÄÿÄÄÿÄÄÿIIÿIIÿIIÿIIÿ¦® ÿØÿÿ Ï<ÿùGÿþFÿŠÄTÿ3ÁSÿÿEÿ.Ø\ÿR#RÿIIÿMMÿIIÿÄÄÿÄÄÿIIÿÄÄÿÄÄÿIIÿIIÿIIÿIIÿÄÄÿÄÄÿÄÄÿÄÄÿGGÿGGÿGGÿsK7ÿþýÿôóÿkL]ÿjàCÿÿgÿ äpÿSsÿ ”ñÿœÿÿY}§ÿaaÿaaÿaaÿaaÿaaÿaaÿÄÄÿÄÄÿÄÄÿÄÄÿi#iÿi#iÿi#iÿi#iÿi#iÿi#iÿi#iÿi#iÿi#iÿi#iÿi#iÿi#iÿi#iÿg$kÿxçÿÿÿO|·ÿGFÿÿÿ‚ñÿpIyÿi#iÿi#iÿi#iÿi#iÿi#iÿÄÄÿÄÄÿÄÄÿÄÄÿs,sÿs,sÿs,sÿs,sÿs,sÿs,sÿs,sÿs,sÿs,sÿs,sÿs,sÿs,sÿs,sÿs,sÿX:•ÿfÿÿ i÷ÿtXˆÿ ^ÜÿfÿÿCtÆÿt1tÿs,sÿs,sÿs,sÿs,sÿÄÄÿÄÄÿÄÄÿÄÄÿ}5}ÿ}5}ÿ}5}ÿ}5}ÿ}5}ÿ}5}ÿ}5}ÿ}5}ÿ}5}ÿ}5}ÿ}5}ÿ}5}ÿ}5}ÿ}5}ÿ}5}ÿ/IÑÿKÿÿ5bÒÿmA‘ÿKýÿMüÿra–ÿ}5}ÿ}5}ÿ}5}ÿ}5}ÿÄÄÿÄÄÿÄÄÿÄÄÿ‡>‡ÿ‡>‡ÿ‡>‡ÿ‡>‡ÿ‡>‡ÿ‡>‡ÿ‡>‡ÿ‡>‡ÿ‡>‡ÿ‡>‡ÿ‡>‡ÿ‡>‡ÿ‡>‡ÿ‡>‡ÿ‡>‡ÿ{<’ÿ3øÿ0ÿÿkc¤ÿ?;Æÿ0ÿÿ(IßÿˆKˆÿ‡>‡ÿ‡>‡ÿ‡>‡ÿÄÄÿÄÄÿÄÄÿÄÄÿ‘G‘ÿ‘G‘ÿ‘G‘ÿ‘G‘ÿ‘G‘ÿ‘G‘ÿ‘G‘ÿ‘G‘ÿ‘G‘ÿ‘G‘ÿ‘G‘ÿ‘G‘ÿ‘G‘ÿ‘G‘ÿ‘G‘ÿ‘G‘ÿS5Àÿÿÿ+éÿŠW”ÿóÿÿÿ`[²ÿ‘G‘ÿ‘G‘ÿ‘G‘ÿÄÄÿÄÄÿÄÄÿÄÄÿ›O›ÿ›O›ÿ›O›ÿ›O›ÿ›O›ÿ›O›ÿ›O›ÿ›O›ÿ›O›ÿ›O›ÿ›O›ÿ›O›ÿ›O›ÿ›O›ÿ›O›ÿ›O›ÿ™Nœÿj?¹ÿgC·ÿŽVŸÿC«ÿgC·ÿuL®ÿ›R›ÿ›R›ÿ›O›ÿÄÄÿÄÄÿÄœÄÿÄÄÿ¥X¥ÿ¥X¥ÿ¥X¥ÿ¥X¥ÿ¥X¥ÿ¥X¥ÿ¥X¥ÿ¥X¥ÿ¥X¥ÿ¥X¥ÿ¥X¥ÿ¥X¥ÿ¥X¥ÿ¥X¥ÿ¥X¥ÿ¥X¥ÿ¥X¥ÿ¥X¥ÿ¥X¥ÿ¥X¥ÿ¥X¥ÿ¥X¥ÿ¥X¥ÿ¥X¥ÿ¥X¥ÿ¥X¥ÿÄÄÿÄœÄÿÅžÅÿÄÄÿ¶€¶ÿ¯a¯ÿ¯a¯ÿ¯a¯ÿ¯a¯ÿ¯a¯ÿ¯a¯ÿ¯a¯ÿ¯a¯ÿ¯a¯ÿ¯a¯ÿ¯a¯ÿ¯a¯ÿ¯a¯ÿ¯a¯ÿ¯a¯ÿ¯a¯ÿ¯a¯ÿ¯a¯ÿ¯a¯ÿ¯a¯ÿ¯a¯ÿ¯a¯ÿ¯a¯ÿ¯a¯ÿ»ƒ»ÿÄÄÿÅžÅÿÄÄÿÄÄÿÀ”Àÿ»ƒ»ÿ¶k¶ÿ¶k¶ÿ¶k¶ÿ¶k¶ÿ¶k¶ÿ¶k¶ÿ¶k¶ÿ¶k¶ÿ¶k¶ÿ¶k¶ÿ¶k¶ÿ¶k¶ÿ¶k¶ÿ¶k¶ÿ¶k¶ÿ¶k¶ÿ¶k¶ÿ¶k¶ÿ¶k¶ÿ¶k¶ÿ¶k¶ÿ¶k¶ÿ»ƒ»ÿÀ”ÀÿÄÄÿÄÄÿÄÄWÄœÄÿÄœÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄœÄÿÄœÄÿÄÄWÄÄWÄÄÿÅžÅÿÄœÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄœÄÿÄœÄÿÄÄÿÄÄW(0` €% "$%%%%%%%%%%%%%%%%%%%%%%%%%%%%$! 2IYcfgggggggggggggggggggggggggggge_SA* $A4Aa’u’¿©‡©â¿™¿úÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿ¿™¿ú§†§ä‹o‹É/%/†\9"‚i‚–¿™¿øÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿ½—½úlWl´d9‰n‰ÄÄÿÄÄÿÀ˜Àÿnÿ†R†ÿzDzÿzDzÿzDzÿzDzÿzDzÿzDzÿzDzÿzDzÿzDzÿzDzÿzDzÿzDzÿzDzÿzDzÿzDzÿzDzÿzDzÿzDzÿzDzÿzDzÿzDzÿzDzÿzDzÿzDzÿzDzÿzDzÿzDzÿzDzÿzDzÿzDzÿ†R†ÿnÿÀ˜ÀÿÄÄÿÄÄÿlWl´\*  ZHZFÀ™À÷ÄÄÿ®‚®ÿb'bÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿb'bÿ®‚®ÿÄÄÿ½—½ú/%/†A¤„¤ªÄÄÿ¿˜¿ÿa'aÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿa'aÿ¿˜¿ÿÄÄÿ‹o‹ÉS´´ÔÄÄÿœnœÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿœnœÿÄÄÿ§†§ä^!Á›Á÷ÄÄÿƒQƒÿNNÿNNÿNNÿNNÿNNÿNNÿNNÿF*FÿILIÿJOJÿLKLÿU!UÿMMÿDDDÿJOJÿJOJÿS8SÿOOÿNNÿNNÿNNÿNNÿNNÿNNÿNNÿNNÿNNÿNNÿNNÿNNÿOOÿQQÿNNÿNNÿNNÿNNÿNNÿNNÿƒQƒÿÄÄÿ¿™¿úd$ÄÄÿÄÄÿvCvÿMMÿMMÿMMÿMMÿMMÿMMÿLJÿ-ì ÿÿ ÿÿ ÿÿ ÿX±\ÿJy6ÿü ÿÿ ÿÿ ÿí!ÿmXmÿMMÿMMÿMMÿMMÿMMÿzOzÿïÃÿMMÿMMÿMMÿMMÿšzšÿÉ·ÉÿÐÁÐÿ®”®ÿUUÿMMÿMMÿMMÿMMÿvCvÿÄÄÿÄÄÿg%ÄÄÿÄÄÿuCuÿLLÿLLÿLLÿLLÿLLÿLLÿk“$ÿƒÿÿ4ýÿÿ!ÿÿ!ÿ ô+ÿ´Zÿrÿÿþ"ÿÿ!ÿÿ!ÿK¿ZÿV'VÿLLÿLLÿLLÿLLÿzOzÿïÃÿLLÿLLÿLLÿl>lÿÌ»Ìÿ^+^ÿV VÿıÄÿWÿLLÿLLÿLLÿLLÿuCuÿÄÄÿÄÄÿg%ÄÄÿÄÄÿtBtÿJJÿJJÿJJÿJJÿJJÿ`:>ÿÅûÿÇÿÿ¹ÿÿ ø;ÿÿ7ÿÿ7ÿ=Í\ÿ¸â#ÿ]ò+ÿÿ7ÿÿ7ÿú;ÿn}uÿJJÿJJÿJJÿJJÿxNxÿÈ·ÈÿZÿZÿa0aÿJJÿPPÿl?lÿ˜x˜ÿÏÀÏÿm@mÿJJÿJJÿJJÿJJÿtBtÿÄÄÿÄÄÿg%ÄÄÿÄÄÿsBsÿIIÿIIÿIIÿIIÿIIÿ½ÉÿàÿÿàÿÿÅÚ-ÿ;ŠYÿÿLÿÿLÿþMÿ~°nÿ•iÿ âNÿÿLÿÿLÿ/Ùaÿ`=`ÿIIÿIIÿIIÿwNwÿ̼Ìÿš|šÿš|šÿk>kÿIIÿ®–®ÿÎÀÎÿ¨Ž¨ÿtJtÿIIÿIIÿIIÿIIÿIIÿsBsÿÄÄÿÄÄÿg%ÄÄÿÄÄÿsBsÿHHÿHHÿHHÿHHÿ‰j-ÿøÿÿøÿÿóúÿ‰}mÿLFÿ.õSÿÿaÿÿaÿ!äkÿp[pÿ3WOÿÿaÿÿaÿÿaÿa¡{ÿKKÿHHÿHHÿwNwÿÁ¯ÁÿHHÿHHÿHHÿ]-]ÿÐÃÐÿV%VÿT"Tÿ§Ž§ÿU#UÿHHÿHHÿHHÿHHÿsBsÿÄÄÿÄÄÿg%ÄÄÿÄÄÿrBrÿGGÿGGÿGGÿS BÿñÌÿÿÚÿÿÚÿÀ®LÿS&Sÿ s%ÿÍáÿþvÿÿvÿÿvÿV³ÿNNÿ·iÿÿvÿÿvÿíyÿkZnÿGGÿGGÿvNvÿÑÄÑÿʺÊÿʺÊÿ²œ²ÿHHÿ«“«ÿÊ»ÊÿɹÉÿ¡†¡ÿGGÿGGÿGGÿGGÿGGÿrBrÿÄÄÿÄÄÿg%ÄÄÿÄÄÿqAqÿEEÿEEÿEEÿµlÿÿ¦ÿÿ¦ÿë¢ÿmSiÿ]$<ÿù¢ÿÿ¦ÿhÚSÿÿ‹ÿÿ‹ÿ õ‹ÿnlvÿ=.Nÿ÷Šÿÿ‹ÿÿ‹ÿJ‹ÿR'RÿEEÿHHÿNNÿNNÿNNÿLLÿEEÿEEÿS#SÿMMÿEEÿEEÿEEÿEEÿEEÿEEÿqAqÿÄÄÿÄÄÿg%ÄÄÿÄÄÿpApÿDDÿDDÿl%6ÿþsÿÿsÿÿsÿ {dÿFFÿÊZÿÿsÿÿsÿÒ‚-ÿ ñšÿÿŸÿÿŸÿ;ΗÿW2Wÿ$„pÿÿŸÿÿŸÿúžÿl€ÿDDÿDDÿDDÿDDÿDDÿDDÿDDÿDDÿDDÿDDÿDDÿDDÿDDÿDDÿDDÿDDÿpApÿÄÄÿÄÄÿg%ÄÄÿÄÄÿqBqÿFFÿHEÿÞ:ÿÿ?ÿÿ?ÿÓ\5ÿ\7\ÿ 0ÿÿ?ÿÿ?ÿüAÿ‘llÿ,llÿÿ¬ÿÿ¬ÿþ¬ÿi’‰ÿFJÿ ߟÿÿ¬ÿÿ¬ÿ-Ú¢ÿ_>_ÿFFÿFFÿFFÿFFÿFFÿFFÿFFÿFFÿFFÿFFÿFFÿFFÿFFÿFFÿFFÿqBqÿÄÄÿÄÄÿg%ÄÄÿÄÄÿsCsÿHHÿu6ÿÕÿÚ&"ÿØ($ÿzRfÿHHÿ¹ÿÚ&"ÿÚ&"ÿ³BFÿV+VÿHIÿÌ¡ÿÿ¹ÿÿ¹ÿå¯ÿgLgÿ5Sgÿÿ¹ÿÿ¹ÿÿ¹ÿa¤”ÿLLÿHHÿHHÿHHÿHHÿHHÿHHÿHHÿHHÿHHÿHHÿHHÿHHÿHHÿHHÿsCsÿÄÄÿÄÄÿg%ÄÄÿÄÄÿuCuÿKKÿKKÿKKÿKKÿKKÿKKÿKKÿKKÿKKÿKKÿKKÿKKÿKKÿ=>aÿýÆÿÿÇÿÿÇÿU¶¡ÿR"Rÿ´ŸÿÿÇÿÿÇÿî¾ÿm]rÿKKÿKKÿKKÿKKÿKKÿKKÿKKÿKKÿKKÿKKÿKKÿKKÿKKÿKKÿuCuÿÄÄÿÄÄÿg%ÄÄÿÄÄÿvDvÿMMÿMMÿMMÿMMÿMMÿMMÿMMÿMMÿMMÿMMÿMMÿMMÿMMÿMMÿ"ššÿÿÔÿÿÔÿ öÎÿoo}ÿE/\ÿ÷ÏÿÿÔÿÿÔÿHïÿY+YÿMMÿMMÿMMÿMMÿMMÿMMÿMMÿMMÿMMÿMMÿMMÿMMÿMMÿvDvÿÄÄÿÄÄÿg%ÄÄÿÄÄÿwDwÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿK"Wÿ ìÔÿÿáÿÿáÿ:оÿ_5_ÿ+‚“ÿÿáÿÿáÿûÞÿn‚‹ÿPPÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿwDwÿÄÄÿÄÄÿg%ÄÄÿÄÄÿyEyÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿ4i‰ÿÿîÿÿîÿþíÿi•™ÿQVÿÝÖÿÿîÿÿîÿ+ÛÐÿhChÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿyEyÿÄÄÿÄÄÿg%ÄÄÿÄÄÿ{E{ÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿÉÓÿÿüÿÿüÿçäÿoQpÿ?Rÿÿüÿÿüÿÿüÿ_¦©ÿXXÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿ{E{ÿÄÄÿÄÄÿg%ÄÄÿÄÄÿ|F|ÿVVÿVVÿVVÿVVÿVVÿVVÿVVÿVVÿVVÿVVÿVVÿVVÿVVÿVVÿVVÿVVÿG=rÿïýÿòÿÿòÿÿT²¹ÿ]&]ÿ¨ÅÿòÿÿòÿÿäðÿrazÿVVÿVVÿVVÿVVÿVVÿVVÿVVÿVVÿVVÿVVÿVVÿ|F|ÿÄÄÿÄÄÿg%ÄÄÿÄÄÿ}G}ÿXXÿXXÿXXÿXXÿXXÿXXÿXXÿXXÿXXÿXXÿXXÿXXÿXXÿXXÿXXÿXXÿXXÿ(ˆ´ÿáÿÿáÿÿ Ûöÿsq†ÿO-hÿÙøÿáÿÿáÿÿF¶Åÿb/bÿXXÿXXÿXXÿXXÿXXÿXXÿXXÿXXÿXXÿXXÿ}G}ÿÄÄÿÄÄÿg%ÄÄÿÄÄÿGÿZZÿZZÿZZÿZZÿZZÿZZÿZZÿZZÿZZÿZZÿZZÿZZÿZZÿZZÿZZÿZZÿZZÿV#bÿ ÀïÿÐÿÿÐÿÿ8µÑÿh;hÿ2j£ÿÐÿÿÐÿÿÎûÿp€’ÿ[[ÿZZÿZZÿZZÿZZÿZZÿZZÿZZÿZZÿZZÿGÿÄÄÿÄÄÿg%ÄÄÿÄÄÿ€H€ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ=R“ÿ¾ÿÿ¾ÿÿ¾þÿi‹Ÿÿ\!`ÿ¥ãÿ¾ÿÿ¾ÿÿ)¯ÝÿoGoÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ\\ÿ€H€ÿÄÄÿÄÄÿg%ÄÄÿÄÄÿ‚I‚ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿŠÖÿ­ÿÿ­ÿÿ¦èÿtTvÿH>…ÿ­ÿÿ­ÿÿ­ÿÿ_­ÿb$bÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ__ÿ‚I‚ÿÄÄÿÄÄÿg%ÄÄÿÄÄÿƒIƒÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿR0zÿšûÿœÿÿœÿÿS‘»ÿf+fÿ%oÆÿœÿÿœÿÿšñÿvaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿaaÿƒIƒÿÄÄÿÄÄÿg%ÄÄÿÄÄÿ†K†ÿe eÿe eÿe eÿe eÿe eÿe eÿe eÿe eÿe eÿe eÿe eÿe eÿe eÿe eÿe eÿe eÿe eÿe eÿe eÿe eÿ0Z·ÿ‹ÿÿ‹ÿÿ ‹÷ÿvnŠÿ\*sÿ‡÷ÿ‹ÿÿ‹ÿÿD‹Æÿm6mÿe eÿe eÿe eÿe eÿe eÿe eÿe eÿ†K†ÿÄÄÿÄÄÿg%ÄÄÿÄÄÿŠNŠÿl%lÿl%lÿl%lÿl%lÿl%lÿl%lÿl%lÿl%lÿl%lÿl%lÿl%lÿl%lÿl%lÿl%lÿl%lÿl%lÿl%lÿl%lÿl%lÿl%lÿh)rÿsïÿzÿÿzÿÿ6ÒÿvDvÿ>Iªÿzÿÿzÿÿzüÿrx–ÿl&lÿl%lÿl%lÿl%lÿl%lÿl%lÿl%lÿŠNŠÿÄÄÿÄÄÿg%ÄÄÿÄÄÿŽRŽÿr+rÿr+rÿr+rÿr+rÿr+rÿr+rÿr+rÿr+rÿr+rÿr+rÿr+rÿr+rÿr+rÿr+rÿr+rÿr+rÿr+rÿr+rÿr+rÿr+rÿr+rÿM?Ÿÿiÿÿiÿÿiÿÿkz£ÿq.tÿ`åÿiÿÿiÿÿ(sßÿ}S}ÿr+rÿr+rÿr+rÿr+rÿr+rÿr+rÿŽRŽÿÄÄÿÄÄÿg%ÄÄÿÄÄÿ“V“ÿy1yÿy1yÿy1yÿy1yÿy1yÿy1yÿy1yÿy1yÿy1yÿy1yÿy1yÿy1yÿy1yÿy1yÿy1yÿy1yÿy1yÿy1yÿy1yÿy1yÿy1yÿy1yÿ#OÚÿWÿÿWÿÿaéÿ_„ÿ^9—ÿWþÿWÿÿWÿÿ_v°ÿ{8{ÿy1yÿy1yÿy1yÿy1yÿy1yÿ“V“ÿÄÄÿÄÄÿg%ÄÄÿÄÄÿ—Z—ÿ6ÿ6ÿ6ÿ6ÿ6ÿ6ÿ6ÿ6ÿ6ÿ6ÿ6ÿ6ÿ6ÿ6ÿ6ÿ6ÿ6ÿ6ÿ6ÿ6ÿ6ÿ6ÿm8‘ÿGüÿFÿÿFÿÿQm¼ÿBÿ1AÎÿFÿÿFÿÿNñÿ‚hŒÿ6ÿ6ÿ6ÿ6ÿ6ÿ—Z—ÿÄÄÿÄÄÿg%ÄÄÿÄÄÿ›]›ÿ…<…ÿ…<…ÿ…<…ÿ…<…ÿ…<…ÿ…<…ÿ…<…ÿ…<…ÿ…<…ÿ…<…ÿ…<…ÿ…<…ÿ…<…ÿ…<…ÿ…<…ÿ…<…ÿ…<…ÿ…<…ÿ…<…ÿ…<…ÿ…<…ÿ…<…ÿ…<…ÿB9Äÿ5ÿÿ5ÿÿ :øÿ}o“ÿ{;ÿ 7÷ÿ5ÿÿ5ÿÿC^Èÿ†M†ÿ…<…ÿ…<…ÿ…<…ÿ…<…ÿ›]›ÿÄÄÿÄÄÿg%ÄÄÿÄÄÿŸaŸÿŒBŒÿŒBŒÿŒBŒÿŒBŒÿŒBŒÿŒBŒÿŒBŒÿŒBŒÿŒBŒÿŒBŒÿŒBŒÿŒBŒÿŒBŒÿŒBŒÿŒBŒÿŒBŒÿŒBŒÿŒBŒÿŒBŒÿŒBŒÿŒBŒÿŒBŒÿŒBŒÿ‡Aÿ)ñÿ$ÿÿ$ÿÿ4KÔÿŒYŒÿS6»ÿ$ÿÿ$ÿÿ&üÿxqžÿŒBŒÿŒBŒÿŒBŒÿŒBŒÿŸaŸÿÄÄÿÄÄÿf%ÄÄÿÄÄÿ£e£ÿ’G’ÿ’G’ÿ’G’ÿ’G’ÿ’G’ÿ’G’ÿ’G’ÿ’G’ÿ’G’ÿ’G’ÿ’G’ÿ’G’ÿ’G’ÿ’G’ÿ’G’ÿ’G’ÿ’G’ÿ’G’ÿ’G’ÿ’G’ÿ’G’ÿ’G’ÿ’G’ÿ’G’ÿf7³ÿÿÿÿÿÿÿmj¨ÿI’ÿèÿÿÿÿÿ&3àÿcÿ’G’ÿ’G’ÿ’G’ÿ£e£ÿÄÄÿÄÄÿe$ÄÄÿÄÄÿ§i§ÿ˜M˜ÿ˜M˜ÿ˜M˜ÿ˜M˜ÿ˜M˜ÿ˜M˜ÿ˜M˜ÿ˜M˜ÿ˜M˜ÿ˜M˜ÿ˜M˜ÿ˜M˜ÿ˜M˜ÿ˜M˜ÿ˜M˜ÿ˜M˜ÿ˜M˜ÿ˜M˜ÿ˜M˜ÿ˜M˜ÿ˜M˜ÿ˜M˜ÿ˜M˜ÿ˜M˜ÿ˜M˜ÿK)Íÿ5,Õÿ6,ÖÿQAÃÿ•]•ÿz>¬ÿ7'×ÿ6,Öÿ6,Öÿ~b ÿ˜N˜ÿ˜M˜ÿ˜M˜ÿ§i§ÿÄÄÿÄÄÿb"Á›Á÷ÄÄÿ°t°ÿŸSŸÿŸSŸÿŸSŸÿŸSŸÿŸSŸÿŸSŸÿŸSŸÿŸSŸÿŸSŸÿŸSŸÿŸSŸÿŸSŸÿŸSŸÿŸSŸÿŸSŸÿŸSŸÿŸSŸÿŸSŸÿŸSŸÿŸSŸÿŸSŸÿŸSŸÿŸSŸÿŸSŸÿŸSŸÿŸSŸÿŸSŸÿŸSŸÿŸSŸÿŸSŸÿŸSŸÿŸSŸÿŸSŸÿŸSŸÿŸSŸÿŸSŸÿŸSŸÿŸSŸÿ°t°ÿÄÄÿ¿™¿úX¶‘¶ÒÄÄÿ¹…¹ÿ¥X¥ÿ¥X¥ÿ¥X¥ÿ¥X¥ÿ¥X¥ÿ¥X¥ÿ¥X¥ÿ¥X¥ÿ¥X¥ÿ¥X¥ÿ¥X¥ÿ¥X¥ÿ¥X¥ÿ¥X¥ÿ¥X¥ÿ¥X¥ÿ¥X¥ÿ¥X¥ÿ¥X¥ÿ¥X¥ÿ¥X¥ÿ¥X¥ÿ¥X¥ÿ¥X¥ÿ¥X¥ÿ¥X¥ÿ¥X¥ÿ¥X¥ÿ¥X¥ÿ¥X¥ÿ¥X¥ÿ¥X¥ÿ¥X¥ÿ¥X¥ÿ¥X¥ÿ¥X¥ÿ¥X¥ÿ¥X¥ÿ¹…¹ÿÄÄÿ©‡©âI ªˆª¤ÄÄÿÛÃÿ¯g¯ÿ¬^¬ÿ¬^¬ÿ¬^¬ÿ¬^¬ÿ¬^¬ÿ¬^¬ÿ¬^¬ÿ¬^¬ÿ¬^¬ÿ¬^¬ÿ¬^¬ÿ¬^¬ÿ¬^¬ÿ¬^¬ÿ¬^¬ÿ¬^¬ÿ¬^¬ÿ¬^¬ÿ¬^¬ÿ¬^¬ÿ¬^¬ÿ¬^¬ÿ¬^¬ÿ¬^¬ÿ¬^¬ÿ¬^¬ÿ¬^¬ÿ¬^¬ÿ¬^¬ÿ¬^¬ÿ¬^¬ÿ¬^¬ÿ¬^¬ÿ¬^¬ÿ¬^¬ÿ¬^¬ÿ¯g¯ÿÛÃÿÄÄÿ’u’¿2 oYo9ÀšÀöÄÄÿÀ’Àÿ´k´ÿ²c²ÿ²c²ÿ²c²ÿ²c²ÿ²c²ÿ²c²ÿ²c²ÿ²c²ÿ²c²ÿ²c²ÿ²c²ÿ²c²ÿ²c²ÿ²c²ÿ²c²ÿ²c²ÿ²c²ÿ²c²ÿ²c²ÿ²c²ÿ²c²ÿ²c²ÿ²c²ÿ²c²ÿ²c²ÿ²c²ÿ²c²ÿ²c²ÿ²c²ÿ²c²ÿ²c²ÿ²c²ÿ²c²ÿ²c²ÿ´k´ÿÀ’ÀÿÄÄÿ¿™¿øA4Aažž|ÄÄÿÄÄÿÄ›ÄÿÀ‹Àÿ¾€¾ÿ½{½ÿ½{½ÿ½{½ÿ½{½ÿ½{½ÿ½{½ÿ½{½ÿ½{½ÿ½{½ÿ½{½ÿ½{½ÿ½{½ÿ½{½ÿ½{½ÿ½{½ÿ½{½ÿ½{½ÿ½{½ÿ½{½ÿ½{½ÿ½{½ÿ½{½ÿ½{½ÿ½{½ÿ½{½ÿ½{½ÿ½{½ÿ½{½ÿ½{½ÿ½{½ÿ¾€¾ÿÀ‹ÀÿÄ›ÄÿÄÄÿÄÄÿ‚i‚–$žž|ÀšÀöÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÀ™À÷‰n‰" mWm:ªˆª¤¶‘¶ÒÁ›Á÷ÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÁ›Á÷´´Ô¤„¤ªZHZF  (@€ B   !,5;>@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@>;5,! ":Qdqz~~zqdQ:"+ Ps\s¥tЫˆ«ëÁ›ÁýÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÁ›Áý©‡©î‰n‰ÛcOcÀ  ‹mL++QAQt±Ž±èÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿ«‰«ð6,6­|T+ "ˆmˆ•›ÂüÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÀšÀþfRfÇ|L" dQd^›ÂüÄÄÿÄÄÿÀ˜ÀÿZÿp7pÿYYÿSSÿSSÿSSÿSSÿSSÿSSÿSSÿSSÿSSÿSSÿSSÿSSÿSSÿSSÿSSÿSSÿSSÿSSÿSSÿSSÿSSÿSSÿSSÿSSÿSSÿSSÿSSÿSSÿSSÿSSÿSSÿSSÿSSÿSSÿSSÿSSÿSSÿSSÿYYÿp7pÿZÿÀ˜ÀÿÄÄÿÄÄÿÀšÀþ6,6­m:!!&·“·àÄÄÿÄÄÿ®‚®ÿb'bÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿb'bÿ®‚®ÿÄÄÿÄÄÿ«‰«ð  ‹Q! ˜z˜}ÄÄÿÄÄÿÀ˜Àÿa'aÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿQQÿa'aÿÀ˜ÀÿÄÄÿÄÄÿcOcÀd, «Š«¯ÄÄÿÄÄÿŒZŒÿPPÿPPÿPPÿPPÿPPÿPPÿPPÿPPÿPPÿPPÿPPÿPPÿPPÿPPÿPPÿPPÿPPÿPPÿPPÿPPÿPPÿPPÿPPÿPPÿPPÿPPÿPPÿPPÿPPÿPPÿPPÿPPÿPPÿPPÿPPÿPPÿPPÿPPÿPPÿPPÿPPÿPPÿPPÿPPÿPPÿPPÿPPÿPPÿŒZŒÿÄÄÿÄÄÿ‰n‰Úq5º”ºÙÄÄÿÄÄÿm7mÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿm7mÿÄÄÿÄÄÿ©‡©îy;ÜÃûÄÄÿÄÄÿTTÿNNÿNNÿNNÿNNÿNNÿNNÿNNÿNNÿNNÿ8W8ÿ?„?ÿCˆCÿCˆCÿKxKÿ]1]ÿNNÿ8U8ÿ?„?ÿCˆCÿCˆCÿKxKÿ]1]ÿNNÿNNÿNNÿNNÿNNÿNNÿNNÿQQÿo?oÿ^(^ÿNNÿNNÿNNÿNNÿNNÿNNÿ_*_ÿyLyÿf2fÿOOÿNNÿNNÿNNÿNNÿNNÿNNÿTTÿÄÄÿÄÄÿÁ›Áý~>ÄÄÿÄÄÿÄÄÿMMÿMMÿMMÿMMÿMMÿMMÿMMÿMMÿMMÿI<@ÿ%ýÿÿ ÿÿ ÿÿ ÿÿ ÿh¦kÿRGJÿ&ýÿÿ ÿÿ ÿÿ ÿÿ ÿh¦kÿV$VÿMMÿMMÿMMÿMMÿMMÿMMÿW!WÿÓÅÓÿŽiŽÿMMÿMMÿMMÿMMÿW Wÿ½§½ÿÓÅÓÿÒÃÒÿÓÅÓÿ©©ÿPPÿMMÿMMÿMMÿMMÿMMÿMMÿÄÄÿÄÄÿÄÄÿ@ÄÄÿÄÄÿÄÄÿLLÿLLÿLLÿLLÿLLÿLLÿLLÿLLÿLLÿhÈÿpÿÿ$ÿÿÿÿÿÿÿÿì/ÿ€žjÿpÿÿ'ÿÿÿÿÿÿÿÿì/ÿymzÿLLÿLLÿLLÿLLÿLLÿLLÿW!WÿÓÅÓÿiÿLLÿLLÿLLÿLLÿ‘o‘ÿÐÁÐÿklÿqEqÿKKÿQQÿiÿÓÅÓÿsHsÿKKÿKKÿKKÿKKÿKKÿKKÿÄÄÿÄÄÿÄÄÿ@ÄÄÿÄÄÿÄÄÿJJÿJJÿJJÿJJÿJJÿJJÿJJÿS"EÿÅíÿÏÿÿÏÿÿÏÿÿWÚJÿÿ=ÿÿ=ÿÿ=ÿúAÿ…£vÿÌúÿ\ØKÿÿ=ÿÿ=ÿÿ=ÿúAÿw‹~ÿMMÿJJÿJJÿJJÿJJÿU UÿÒÄÒÿÐÂÐÿÏÀÏÿÏÀÏÿ««ÿJJÿJJÿm@mÿªªÿÏÁÏÿÒÄÒÿ±™±ÿOOÿJJÿJJÿJJÿJJÿJJÿJJÿÄÄÿÄÄÿÄÄÿ@ÄÄÿÄÄÿÄÄÿIIÿIIÿIIÿIIÿIIÿIIÿIIÿ¤ŸÿâÿÿâÿÿâÿÿÎå ÿtguÿ ÜNÿÿNÿÿNÿÿNÿ0Øcÿ«¶Zÿufuÿ ×NÿÿNÿÿNÿÿNÿ0ØcÿmSmÿIIÿIIÿIIÿIIÿT TÿÒÄÒÿ£‡£ÿxOxÿxOxÿk?kÿIIÿ`0`ÿÑÄÑÿɸÉÿš|šÿmAmÿKKÿIIÿIIÿIIÿIIÿIIÿIIÿIIÿÄÄÿÄÄÿÄÄÿ@ÄÄÿÄÄÿÄÄÿHHÿHHÿHHÿHHÿHHÿHHÿmE8ÿôýÿöÿÿöÿÿõþÿœ›oÿOOÿQvCÿÿ_ÿÿ_ÿÿ_ÿÿ_ÿhª€ÿY0Yÿ6LMÿÿ_ÿÿ_ÿÿ_ÿÿ_ÿg¨ÿS%SÿHHÿHHÿHHÿS SÿÒÄÒÿ‹h‹ÿHHÿHHÿHHÿHHÿŽmŽÿÏÁÏÿPPÿHHÿ†b†ÿ¯—¯ÿNNÿHHÿHHÿHHÿHHÿHHÿHHÿÄÄÿÄÄÿÄÄÿ@ÄÄÿÄÄÿÄÄÿGGÿGGÿGGÿGGÿGGÿIFÿÜÁÿÿêÿÿêÿÿêÿÌÀ>ÿdFdÿIFÿÜÁÿVøJÿÿoÿÿoÿÿoÿítÿwoyÿGGÿ©aÿÿoÿÿoÿÿoÿítÿwoyÿGGÿGGÿGGÿR RÿÒÄÒÿÅ´Åÿ¸¤¸ÿ¸¤¸ÿ¸¤¸ÿ`3`ÿf:fÿÍ¿ÍÿÁ¯Áÿ²œ²ÿÏÂÏÿ „ ÿGGÿGGÿGGÿGGÿGGÿGGÿGGÿÄÄÿÄÄÿÄÄÿ@ÄÄÿÄÄÿÄÄÿFFÿFFÿFFÿFFÿFFÿ•](ÿÿÂÿÿÂÿÿÂÿó¼ÿ†yyÿGGÿ•](ÿÿÂÿäÈÿ ü{ÿÿ€ÿÿ€ÿÿ€ÿK†ÿ^;^ÿ@&Lÿò}ÿÿ€ÿÿ€ÿÿ€ÿK†ÿ^;^ÿFFÿFFÿKKÿ‡e‡ÿ‡e‡ÿ‡e‡ÿ‡e‡ÿ‡e‡ÿU$UÿFFÿ_2_ÿŠiŠÿpÿh=hÿHHÿFFÿFFÿFFÿFFÿFFÿFFÿFFÿÄÄÿÄÄÿÄÄÿ@ÄÄÿÄÄÿÄÄÿEEÿEEÿEEÿEEÿW?ÿô“ÿÿšÿÿšÿÿšÿ²\ÿU,UÿW?ÿô“ÿÿšÿÿšÿ‹ÈBÿÿÿÿÿÿÿúÿuŽ…ÿIIÿ'xeÿÿÿÿÿÿÿúÿuŽ…ÿIIÿEEÿEEÿEEÿEEÿEEÿEEÿEEÿEEÿEEÿEEÿEEÿEEÿEEÿEEÿEEÿEEÿEEÿEEÿEEÿEEÿEEÿÄÄÿÄÄÿÄÄÿ@ÄÄÿÄÄÿÄÄÿDDÿDDÿDDÿDDÿ½Oÿÿqÿÿqÿÿqÿàx&ÿp\pÿDDÿ½OÿÿqÿÿqÿÿqÿÜ{(ÿä—ÿÿŸÿÿŸÿÿŸÿ.Ù™ÿkTkÿCEÿ ÔÿÿŸÿÿŸÿÿŸÿ.Ù™ÿkTkÿDDÿDDÿDDÿDDÿDDÿDDÿDDÿDDÿDDÿDDÿDDÿDDÿDDÿDDÿDDÿDDÿDDÿDDÿDDÿDDÿDDÿÄÄÿÄÄÿÄÄÿ@ÄÄÿÄÄÿÄÄÿFFÿFFÿFFÿv 4ÿÿHÿÿHÿÿHÿüJÿ˜zsÿKKÿv 4ÿÿHÿÿHÿÿHÿüJÿ˜zsÿ8Tcÿÿªÿÿªÿÿªÿÿªÿeª”ÿR'Rÿ6I]ÿþªÿÿªÿÿªÿÿªÿeª”ÿR'RÿFFÿFFÿFFÿFFÿFFÿFFÿFFÿFFÿFFÿFFÿFFÿFFÿFFÿFFÿFFÿFFÿFFÿFFÿFFÿFFÿÄÄÿÄÄÿÄÄÿ@ÄÄÿÄÄÿÄÄÿHHÿHHÿLFÿã ÿÿ ÿÿ ÿÿ ÿÆUEÿb@bÿLFÿã ÿÿ ÿÿ ÿÿ ÿÆUEÿb@bÿHHÿ«ÿÿ´ÿÿ´ÿÿ´ÿî®ÿyq}ÿHHÿ¦‹ÿÿ´ÿÿ´ÿÿ´ÿî®ÿyq}ÿHHÿHHÿHHÿHHÿHHÿHHÿHHÿHHÿHHÿHHÿHHÿHHÿHHÿHHÿHHÿHHÿHHÿHHÿHHÿHHÿÄÄÿÄÄÿÄÄÿ@ÄÄÿÄÄÿÄÄÿIIÿIIÿVDÿ‚:ÿ‹'Cÿ‹'Cÿ‹'Cÿ`2XÿJJÿVDÿ‚:ÿ‹'Cÿ‹'Cÿ‹'Cÿ`2XÿJJÿIIÿB)Tÿó¹ÿÿ¿ÿÿ¿ÿÿ¿ÿIäÿ`=`ÿC'Sÿñ¸ÿÿ¿ÿÿ¿ÿÿ¿ÿIäÿ`=`ÿIIÿIIÿIIÿIIÿIIÿIIÿIIÿIIÿIIÿIIÿIIÿIIÿIIÿIIÿIIÿIIÿIIÿIIÿIIÿÄÄÿÄÄÿÄÄÿ@ÄÄÿÄÄÿÄÄÿKKÿKKÿKKÿKKÿKKÿKKÿKKÿKKÿKKÿKKÿKKÿKKÿKKÿKKÿKKÿKKÿKKÿKKÿ*{‚ÿÿÉÿÿÉÿÿÉÿúÇÿuÿOOÿ,v€ÿÿÉÿÿÉÿÿÉÿúÇÿuÿOOÿKKÿKKÿKKÿKKÿKKÿKKÿKKÿKKÿKKÿKKÿKKÿKKÿKKÿKKÿKKÿKKÿKKÿKKÿÄÄÿÄÄÿÄÄÿ@ÄÄÿÄÄÿÄÄÿMMÿMMÿMMÿMMÿMMÿMMÿMMÿMMÿMMÿMMÿMMÿMMÿMMÿMMÿMMÿMMÿMMÿMMÿLNÿÖ¼ÿÿÔÿÿÔÿÿÔÿ,Û½ÿqXqÿLNÿÒºÿÿÔÿÿÔÿÿÔÿ,Û½ÿqXqÿMMÿMMÿMMÿMMÿMMÿMMÿMMÿMMÿMMÿMMÿMMÿMMÿMMÿMMÿMMÿMMÿMMÿMMÿÄÄÿÄÄÿÄÄÿ@ÄÄÿÄÄÿÄÄÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿGnÿþÝÿÿÞÿÿÞÿÿÞÿc«£ÿZ*ZÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿOOÿÄÄÿÄÄÿÄÄÿ@ÄÄÿÄÄÿÄÄÿPPÿPPÿPPÿPPÿPPÿPPÿPPÿPPÿPPÿPPÿPPÿPPÿPPÿPPÿPPÿPPÿPPÿPPÿPPÿPPÿ¨°ÿÿèÿÿèÿÿèÿïÛÿzt€ÿPPÿ¤¬ÿÿèÿÿèÿÿèÿïÛÿzt€ÿPPÿPPÿPPÿPPÿPPÿPPÿPPÿPPÿPPÿPPÿPPÿPPÿPPÿPPÿPPÿPPÿPPÿÄÄÿÄÄÿÄÄÿ@ÄÄÿÄÄÿÄÄÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿK+`ÿñêÿÿóÿÿóÿÿóÿGÅ¿ÿhChÿL)_ÿïèÿÿóÿÿóÿÿóÿGÅ¿ÿhChÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿRRÿÄÄÿÄÄÿÄÄÿ@ÄÄÿÄÄÿÄÄÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿ1x›ÿÿýÿÿýÿÿýÿûùÿv’–ÿWWÿ2u˜ÿÿýÿÿýÿÿýÿûùÿv’–ÿWWÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿTTÿÄÄÿÄÄÿÄÄÿ@ÄÄÿÄÄÿÄÄÿUUÿUUÿUUÿUUÿUUÿUUÿUUÿUUÿUUÿUUÿUUÿUUÿUUÿUUÿUUÿUUÿUUÿUUÿUUÿUUÿUUÿTVÿÊÞÿôÿÿôÿÿôÿÿ*ÕÜÿtZtÿTVÿÇÜÿôÿÿôÿÿôÿÿ*ÕÜÿtZtÿUUÿUUÿUUÿUUÿUUÿUUÿUUÿUUÿUUÿUUÿUUÿUUÿUUÿUUÿUUÿÄÄÿÄÄÿÄÄÿ@ÄÄÿÄÄÿÄÄÿWWÿWWÿWWÿWWÿWWÿWWÿWWÿWWÿWWÿWWÿWWÿWWÿWWÿWWÿWWÿWWÿWWÿWWÿWWÿWWÿWWÿWWÿDG|ÿåþÿæÿÿæÿÿæÿÿa¦®ÿa.aÿECyÿåýÿæÿÿæÿÿæÿÿa¦®ÿa.aÿWWÿWWÿWWÿWWÿWWÿWWÿWWÿWWÿWWÿWWÿWWÿWWÿWWÿWWÿÄÄÿÄÄÿÄÄÿ@ÄÄÿÄÄÿÄÄÿYYÿYYÿYYÿYYÿYYÿYYÿYYÿYYÿYYÿYYÿYYÿYYÿYYÿYYÿYYÿYYÿYYÿYYÿYYÿYYÿYYÿYYÿYYÿ#޾ÿÙÿÿÙÿÿÙÿÿÏðÿ|v…ÿZZÿ$‹¼ÿÙÿÿÙÿÿÙÿÿÏðÿ|v…ÿZZÿYYÿYYÿYYÿYYÿYYÿYYÿYYÿYYÿYYÿYYÿYYÿYYÿYYÿÄÄÿÄÄÿÄÄÿ@ÄÄÿÄÄÿÄÄÿ[[ÿ[[ÿ[[ÿ[[ÿ[[ÿ[[ÿ[[ÿ[[ÿ[[ÿ[[ÿ[[ÿ[[ÿ[[ÿ[[ÿ[[ÿ[[ÿ[[ÿ[[ÿ[[ÿ[[ÿ[[ÿ[[ÿ[[ÿT'gÿÀóÿËÿÿËÿÿËÿÿE¬ÆÿmEmÿU&gÿ¿óÿËÿÿËÿÿËÿÿE¬ÆÿmEmÿ[[ÿ[[ÿ[[ÿ[[ÿ[[ÿ[[ÿ[[ÿ[[ÿ[[ÿ[[ÿ[[ÿ[[ÿ[[ÿÄÄÿÄÄÿÄÄÿ@ÄÄÿÄÄÿÄÄÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ8\žÿ¾ÿÿ¾ÿÿ¾ÿÿ½üÿu‹˜ÿ`"`ÿ9[œÿ¾ÿÿ¾ÿÿ¾ÿÿ½üÿu‹˜ÿ`"`ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿ]]ÿÄÄÿÄÄÿÄÄÿ@ÄÄÿÄÄÿÄÄÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ]_ÿ’Þÿ°ÿÿ°ÿÿ°ÿÿ(¦Þÿy^yÿ^_ÿÜÿ°ÿÿ°ÿÿ°ÿÿ(¦Þÿy^yÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿ^^ÿÄÄÿÄÄÿÄÄÿ@ÄÄÿÄÄÿÄÄÿ``ÿ``ÿ``ÿ``ÿ``ÿ``ÿ``ÿ``ÿ``ÿ``ÿ``ÿ``ÿ``ÿ``ÿ``ÿ``ÿ``ÿ``ÿ``ÿ``ÿ``ÿ``ÿ``ÿ``ÿ``ÿL7€ÿ¢ýÿ£ÿÿ£ÿÿ£ÿÿ_“¯ÿi2iÿM7ÿ¢ýÿ£ÿÿ£ÿÿ£ÿÿ_“¯ÿi2iÿ``ÿ``ÿ``ÿ``ÿ``ÿ``ÿ``ÿ``ÿ``ÿ``ÿ``ÿÄÄÿÄÄÿÄÄÿ@ÄÄÿÄÄÿÄÄÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿ(e¿ÿ–ÿÿ–ÿÿ–ÿÿ•ñÿ~vˆÿccÿ)c½ÿ–ÿÿ–ÿÿ–ÿÿ•ñÿ~vˆÿccÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿbbÿÄÄÿÄÄÿÄÄÿ@ÄÄÿÄÄÿÄÄÿg!gÿg!gÿg!gÿg!gÿg!gÿg!gÿg!gÿg!gÿg!gÿg!gÿg!gÿg!gÿg!gÿg!gÿg!gÿg!gÿg!gÿg!gÿg!gÿg!gÿg!gÿg!gÿg!gÿg!gÿg!gÿg!gÿ`(qÿ €óÿˆÿÿˆÿÿˆÿÿCŠÈÿuKuÿa(qÿ €óÿˆÿÿˆÿÿˆÿÿCŠÈÿuKuÿg!gÿg!gÿg!gÿg!gÿg!gÿg!gÿg!gÿg!gÿg!gÿg!gÿÄÄÿÄÄÿÄÄÿ@ÄÄÿÄÄÿÄÄÿk%kÿk%kÿk%kÿk%kÿk%kÿk%kÿk%kÿk%kÿk%kÿk%kÿk%kÿk%kÿk%kÿk%kÿk%kÿk%kÿk%kÿk%kÿk%kÿk%kÿk%kÿk%kÿk%kÿk%kÿk%kÿk%kÿk%kÿBF¤ÿzÿÿzÿÿzÿÿzüÿvƒœÿm,mÿCE£ÿzÿÿzÿÿzÿÿzüÿvƒœÿm,mÿk%kÿk%kÿk%kÿk%kÿk%kÿk%kÿk%kÿk%kÿk%kÿÄÄÿÄÄÿÄÄÿ@ÄÄÿÄÄÿÄÄÿq*qÿq*qÿq*qÿq*qÿq*qÿq*qÿq*qÿq*qÿq*qÿq*qÿq*qÿq*qÿq*qÿq*qÿq*qÿq*qÿq*qÿq*qÿq*qÿq*qÿq*qÿq*qÿq*qÿq*qÿq*qÿq*qÿq*qÿq*rÿ_ßÿmÿÿmÿÿmÿÿ&vßÿ‚f‚ÿq*rÿ^Þÿmÿÿmÿÿmÿÿ&vßÿ‚f‚ÿq*qÿq*qÿq*qÿq*qÿq*qÿq*qÿq*qÿq*qÿq*qÿÄÄÿÄÄÿÄÄÿ@ÄÄÿÄÄÿÄÄÿv.vÿv.vÿv.vÿv.vÿv.vÿv.vÿv.vÿv.vÿv.vÿv.vÿv.vÿv.vÿv.vÿv.vÿv.vÿv.vÿv.vÿv.vÿv.vÿv.vÿv.vÿv.vÿv.vÿv.vÿv.vÿv.vÿv.vÿv.vÿ`7ÿ^ýÿ_ÿÿ_ÿÿ_ÿÿ]}±ÿ{B{ÿ`8ÿ^ýÿ_ÿÿ_ÿÿ_ÿÿ]}±ÿ{B{ÿv.vÿv.vÿv.vÿv.vÿv.vÿv.vÿv.vÿv.vÿÄÄÿÄÄÿÄÄÿ@ÄÄÿÄÄÿÄÄÿ{3{ÿ{3{ÿ{3{ÿ{3{ÿ{3{ÿ{3{ÿ{3{ÿ{3{ÿ{3{ÿ{3{ÿ{3{ÿ{3{ÿ{3{ÿ{3{ÿ{3{ÿ{3{ÿ{3{ÿ{3{ÿ{3{ÿ{3{ÿ{3{ÿ{3{ÿ{3{ÿ{3{ÿ{3{ÿ{3{ÿ{3{ÿ{3{ÿ{3{ÿ5EÇÿRÿÿRÿÿRÿÿXòÿƒyŽÿ{4{ÿ5EÆÿRÿÿRÿÿRÿÿXòÿƒyŽÿ{4{ÿ{3{ÿ{3{ÿ{3{ÿ{3{ÿ{3{ÿ{3{ÿ{3{ÿÄÄÿÄÄÿÄÄÿ@ÄÄÿÄÄÿÄÄÿ€7€ÿ€7€ÿ€7€ÿ€7€ÿ€7€ÿ€7€ÿ€7€ÿ€7€ÿ€7€ÿ€7€ÿ€7€ÿ€7€ÿ€7€ÿ€7€ÿ€7€ÿ€7€ÿ€7€ÿ€7€ÿ€7€ÿ€7€ÿ€7€ÿ€7€ÿ€7€ÿ€7€ÿ€7€ÿ€7€ÿ€7€ÿ€7€ÿ€7€ÿx8‡ÿ CôÿDÿÿDÿÿDÿÿAeÊÿ…Z…ÿx8‡ÿ DôÿDÿÿDÿÿDÿÿAeÊÿ…Z…ÿ€7€ÿ€7€ÿ€7€ÿ€7€ÿ€7€ÿ€7€ÿ€7€ÿÄÄÿÄÄÿÄÄÿ@ÄÄÿÄÄÿÄÄÿ…;…ÿ…;…ÿ…;…ÿ…;…ÿ…;…ÿ…;…ÿ…;…ÿ…;…ÿ…;…ÿ…;…ÿ…;…ÿ…;…ÿ…;…ÿ…;…ÿ…;…ÿ…;…ÿ…;…ÿ…;…ÿ…;…ÿ…;…ÿ…;…ÿ…;…ÿ…;…ÿ…;…ÿ…;…ÿ…;…ÿ…;…ÿ…;…ÿ…;…ÿ…;…ÿT9±ÿ7ÿÿ7ÿÿ7ÿÿ9ýÿuzžÿ†B†ÿU:±ÿ7ÿÿ7ÿÿ7ÿÿ9ýÿuzžÿ†B†ÿ…;…ÿ…;…ÿ…;…ÿ…;…ÿ…;…ÿ…;…ÿÄÄÿÄÄÿÄÄÿ@ÄÄÿÄÄÿÄÄÿŠ@ŠÿŠ@ŠÿŠ@ŠÿŠ@ŠÿŠ@ŠÿŠ@ŠÿŠ@ŠÿŠ@ŠÿŠ@ŠÿŠ@ŠÿŠ@ŠÿŠ@ŠÿŠ@ŠÿŠ@ŠÿŠ@ŠÿŠ@ŠÿŠ@ŠÿŠ@ŠÿŠ@ŠÿŠ@ŠÿŠ@ŠÿŠ@ŠÿŠ@ŠÿŠ@ŠÿŠ@ŠÿŠ@ŠÿŠ@ŠÿŠ@ŠÿŠ@ŠÿŠ@ŠÿŠ@Šÿ!/ãÿ)ÿÿ)ÿÿ)ÿÿ$Cáÿ‹o‹ÿŠ@Šÿ!/âÿ)ÿÿ)ÿÿ)ÿÿ$Cáÿ‹o‹ÿŠ@ŠÿŠ@ŠÿŠ@ŠÿŠ@ŠÿŠ@ŠÿŠ@ŠÿÄÄÿÄÄÿÄÄÿ@ÄÄÿÄÄÿÄÄÿDÿDÿDÿDÿDÿDÿDÿDÿDÿDÿDÿDÿDÿDÿDÿDÿDÿDÿDÿDÿDÿDÿDÿDÿDÿDÿDÿDÿDÿDÿDÿv=¢ÿþÿÿÿÿÿÿÿ\e´ÿŽTŽÿv=¢ÿþÿÿÿÿÿÿÿ\e´ÿŽTŽÿDÿDÿDÿDÿDÿÄÄÿÄÄÿÄÄÿ@ÄÄÿÄÄÿÄÄÿ”I”ÿ”I”ÿ”I”ÿ”I”ÿ”I”ÿ”I”ÿ”I”ÿ”I”ÿ”I”ÿ”I”ÿ”I”ÿ”I”ÿ”I”ÿ”I”ÿ”I”ÿ”I”ÿ”I”ÿ”I”ÿ”I”ÿ”I”ÿ”I”ÿ”I”ÿ”I”ÿ”I”ÿ”I”ÿ”I”ÿ”I”ÿ”I”ÿ”I”ÿ”I”ÿ”I”ÿ”I”ÿB)Ïÿÿÿÿÿÿÿóÿ‡z”ÿ”J”ÿB)Ïÿÿÿÿÿÿÿóÿ‡z”ÿ”J”ÿ”I”ÿ”I”ÿ”I”ÿ”I”ÿÄÄÿÄÄÿÄÄÿ~>ÄÄÿÄÄÿÄÄÿ™M™ÿ™M™ÿ™M™ÿ™M™ÿ™M™ÿ™M™ÿ™M™ÿ™M™ÿ™M™ÿ™M™ÿ™M™ÿ™M™ÿ™M™ÿ™M™ÿ™M™ÿ™M™ÿ™M™ÿ™M™ÿ™M™ÿ™M™ÿ™M™ÿ™M™ÿ™M™ÿ™M™ÿ™M™ÿ™M™ÿ™M™ÿ™M™ÿ™M™ÿ™M™ÿ™M™ÿ™M™ÿ‘Ižÿ: Öÿ6,Öÿ6,Öÿ6,ÖÿiU®ÿ—Y—ÿ‘Ižÿ: Öÿ6,Öÿ6,Öÿ6,ÖÿiU®ÿ—Y—ÿ™M™ÿ™M™ÿ™M™ÿ™M™ÿÄÄÿÄÄÿÄÄÿy;ÜÃûÄÄÿÄÄÿ V ÿžRžÿžRžÿžRžÿžRžÿžRžÿžRžÿžRžÿžRžÿžRžÿžRžÿžRžÿžRžÿžRžÿžRžÿžRžÿžRžÿžRžÿžRžÿžRžÿžRžÿžRžÿžRžÿžRžÿžRžÿžRžÿžRžÿžRžÿžRžÿžRžÿžRžÿžRžÿžRžÿžRžÿžRžÿžRžÿžRžÿžRžÿžRžÿžRžÿžRžÿžRžÿžRžÿžRžÿžRžÿžRžÿžRžÿžRžÿžRžÿ V ÿÄÄÿÄÄÿÁ›Áýp5 ¼–¼ÖÄÄÿÄÄÿ«h«ÿ£V£ÿ£V£ÿ£V£ÿ£V£ÿ£V£ÿ£V£ÿ£V£ÿ£V£ÿ£V£ÿ£V£ÿ£V£ÿ£V£ÿ£V£ÿ£V£ÿ£V£ÿ£V£ÿ£V£ÿ£V£ÿ£V£ÿ£V£ÿ£V£ÿ£V£ÿ£V£ÿ£V£ÿ£V£ÿ£V£ÿ£V£ÿ£V£ÿ£V£ÿ£V£ÿ£V£ÿ£V£ÿ£V£ÿ£V£ÿ£V£ÿ£V£ÿ£V£ÿ£V£ÿ£V£ÿ£V£ÿ£V£ÿ£V£ÿ£V£ÿ£V£ÿ£V£ÿ£V£ÿ£V£ÿ£V£ÿ«h«ÿÄÄÿÄÄÿ«ˆ«ëd, ³³§ÄÄÿÄÄÿ¶|¶ÿ¨Z¨ÿ¨Z¨ÿ¨Z¨ÿ¨Z¨ÿ¨Z¨ÿ¨Z¨ÿ¨Z¨ÿ¨Z¨ÿ¨Z¨ÿ¨Z¨ÿ¨Z¨ÿ¨Z¨ÿ¨Z¨ÿ¨Z¨ÿ¨Z¨ÿ¨Z¨ÿ¨Z¨ÿ¨Z¨ÿ¨Z¨ÿ¨Z¨ÿ¨Z¨ÿ¨Z¨ÿ¨Z¨ÿ¨Z¨ÿ¨Z¨ÿ¨Z¨ÿ¨Z¨ÿ¨Z¨ÿ¨Z¨ÿ¨Z¨ÿ¨Z¨ÿ¨Z¨ÿ¨Z¨ÿ¨Z¨ÿ¨Z¨ÿ¨Z¨ÿ¨Z¨ÿ¨Z¨ÿ¨Z¨ÿ¨Z¨ÿ¨Z¨ÿ¨Z¨ÿ¨Z¨ÿ¨Z¨ÿ¨Z¨ÿ¨Z¨ÿ¨Z¨ÿ¨Z¨ÿ¶|¶ÿÄÄÿÄÄÿ‘t‘ÏQ!­Š­nÄÄÿÄÄÿÛÃÿ°h°ÿ­_­ÿ­_­ÿ­_­ÿ­_­ÿ­_­ÿ­_­ÿ­_­ÿ­_­ÿ­_­ÿ­_­ÿ­_­ÿ­_­ÿ­_­ÿ­_­ÿ­_­ÿ­_­ÿ­_­ÿ­_­ÿ­_­ÿ­_­ÿ­_­ÿ­_­ÿ­_­ÿ­_­ÿ­_­ÿ­_­ÿ­_­ÿ­_­ÿ­_­ÿ­_­ÿ­_­ÿ­_­ÿ­_­ÿ­_­ÿ­_­ÿ­_­ÿ­_­ÿ­_­ÿ­_­ÿ­_­ÿ­_­ÿ­_­ÿ­_­ÿ­_­ÿ­_­ÿ­_­ÿ°h°ÿÛÃÿÄÄÿÄÄÿs\s¥9O?O¾˜¾ØÄÄÿÄÄÿÀ’Àÿµkµÿ²c²ÿ²c²ÿ²c²ÿ²c²ÿ²c²ÿ²c²ÿ²c²ÿ²c²ÿ²c²ÿ²c²ÿ²c²ÿ²c²ÿ²c²ÿ²c²ÿ²c²ÿ²c²ÿ²c²ÿ²c²ÿ²c²ÿ²c²ÿ²c²ÿ²c²ÿ²c²ÿ²c²ÿ²c²ÿ²c²ÿ²c²ÿ²c²ÿ²c²ÿ²c²ÿ²c²ÿ²c²ÿ²c²ÿ²c²ÿ²c²ÿ²c²ÿ²c²ÿ²c²ÿ²c²ÿ²c²ÿ²c²ÿ²c²ÿ²c²ÿ²c²ÿµkµÿÀ’ÀÿÄÄÿÄÄÿ±Ž±è P" ›}›=ÜÃûÄÄÿÄÄÿÄ›Äÿ¾ƒ¾ÿºvºÿ¸k¸ÿ·h·ÿ·h·ÿ·h·ÿ·h·ÿ·h·ÿ·h·ÿ·h·ÿ·h·ÿ·h·ÿ·h·ÿ·h·ÿ·h·ÿ·h·ÿ·h·ÿ·h·ÿ·h·ÿ·h·ÿ·h·ÿ·h·ÿ·h·ÿ·h·ÿ·h·ÿ·h·ÿ·h·ÿ·h·ÿ·h·ÿ·h·ÿ·h·ÿ·h·ÿ·h·ÿ·h·ÿ·h·ÿ·h·ÿ·h·ÿ·h·ÿ·h·ÿ·h·ÿ·h·ÿ¸k¸ÿºvºÿ¾ƒ¾ÿÄ›ÄÿÄÄÿÄÄÿ›ÂüRBRs+±±sÜÃûÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿ›Âüˆmˆ•+›}›=¾˜¾ØÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿ·“·àdQd^"O?O­Š­n³³§¼–¼ÖÜÃûÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÄÄÿÜÃûº”ºÙ«Š«¯˜z˜}!!&   fs-uae-2.2.3+dfsg/icon/fs-uae-launcher.icns0000644000175000017500000021547012162366654020652 0ustar glaubitzglaubitzicns8is320Žÿ›—‡•—›ÿÿ•d‡]d•ÿÿ„K`È…³LÿÿŒ„9Ê´í€9Œÿÿˆƒ( ië¦Ê*(ˆÿÿ‡‚ !ç‹òD‡ÿÿ†‚—ÐÏŸ€†ÿÿ†3ã~Ö € †ÿÿ…)$žº] …ÿÿ….L”q‰$…ÿÿ…/Y`[.aXv;…ÿÿ‡$=-A_*^^‡ÿÿŒ#‡#Œÿÿ–Œ‡…†‡Œ–ŽÿŽÿ¨£¢…¡¢£¨ÿÿ¡y‡sy¡ÿÿœ„`W5REaœÿÿ™„NL]E_N™ÿÿ•ƒ; Qwjw<;•ÿÿ“‚. 1 w¦J..“ÿÿ’‚*޽»—€*’ÿÿ‘&Có‰ä/€& ‘ÿÿ‘$2(/ɬîp" ‘ÿÿ/ƒ^©è§Æ $ÿÿ‘!œÌò³ñCkbG!‘ÿÿ“#)ÛÉà™#j9ii#“ÿÿ™3‡%3™ÿÿ¤™“…’“™¤ŽÿŽÿÄÃÃ…ÂÃÃÄÿÿÁ­‡ª­Áÿÿ½„–…9lM–½ÿÿ¹„‚-Ij‚¹ÿÿµƒn RA5onµÿÿ²‚_ ]R a__²ÿÿ±‚X5/ H€X±ÿÿ°QI HU€Q °ÿÿ¯jy}h BQJ ¯ÿÿ®^ñ”˜44‚D$®ÿÿ¯H¡»fP…~–hH¯ÿÿ±LL?91IL†^……L±ÿÿ¶]‡P]¶ÿÿ¿·²…±²·¿Žÿs8mk8ÑççççççççççÑ8ÑÿÿÿÿÿÿÿÿÿÿÿÿÑçÿÿÿÿÿÿÿÿÿÿÿÿçèÿÿÿÿÿÿÿÿÿÿÿÿèèÿÿÿÿÿÿÿÿÿÿÿÿèèÿÿÿÿÿÿÿÿÿÿÿÿèèÿÿÿÿÿÿÿÿÿÿÿÿèèÿÿÿÿÿÿÿÿÿÿÿÿèèÿÿÿÿÿÿÿÿÿÿÿÿèèÿÿÿÿÿÿÿÿÿÿÿÿèèÿÿÿÿÿÿÿÿÿÿÿÿèçÿÿÿÿÿÿÿÿÿÿÿÿçÑÿÿÿÿÿÿÿÿÿÿÿÿÑ8ÑççççççççççÑ8il32®Àÿžœ‘œž‚ÿœ…„…œÿžr“aržÿœˆ•XˆœÿxŒO QŽ“gm“…ROxÿrŒG ™ÿé`îÿ¦GGrÿn‹> Oöÿ‘¨ÿÞK>>nÿi‹5¼ÿÑZüüz€5iÿeŠ,_ÿ÷dÏÿÂ1€,eÿ`‰#&àÿ°qÿñM#`ÿ]‰†ÿèCíÿ›‚]ÿ\ˆ1÷þ„ŸÿÜ.‚\ÿ\ˆ¸ÿÏHýûmƒ\ÿ[‡TÿöWÏÿ¾ƒ[ÿZ†ÜøªkøéC„ZÿZ†zãÐ;Ö㎅ZÿY…)ÉÍt„θ&…YÿX!= 3 ‹¹¤8¸·_†XÿW$'e¥£K¥†WÿW Iˆ|Bˆ‰9'')€WÿX>?gp3fgh°qM€s›XÿX€:FFTKE[#°q3c–X€XÿX€$$M%(Jž$`#™,Xÿ[#.:*ExJ‰}[ÿ›s•s›ÿž<“<žÿ›s\Y\s›‚ÿž›‘›žÀÿÀÿ±¨§‘¨§¨±‚ÿ±§¨œ‘•œ¨§±ÿ¨¨…“w…¨¨ÿ§–•n–§ÿ¨ˆŒe dKNfUNXgeˆ¨ÿ¨‚Œ\ @+f^\\‚¨ÿ¨}‹R O40hC0I\RR}¨ÿ¨y‹IOKbPLMi€Iy¨ÿ¨tŠ@IfibbfuD€@t¨ÿ¨p‰78z~S‚V7p¨ÿ¨l‰/cœ™K•œ€‚/l¨ÿ¨kˆ-;³·z~·©=‚-k¨ÿ¨jˆ+ Ò´MÐÐnƒ+j¨ÿ¨i‡)[íæ^Äí¶-ƒ)i¨ÿ¨h†'+ãÿ­wÿïN„'h¨ÿ¨g†%ÿæGðÿ™…%g¨ÿ¨f…#;ùþƒ¦ÿÚ3…#f¨ÿ¨e!#+F*<-¾ÿÌPýúm†"e¨ÿ¨d A]i7]]ÿõXÔÿ¼$† d¨ÿ¨d "œ­ˆR¯ðÿªvÿîF 55-"7"€ d¨ÿ¨e!!VýóUáÿäFñÿ”!%µzYˆ|¡#!!e¨ÿ¨e€"²ÿÐùþÄÃÿØ0"&µz@mc€"e¨ÿ¨f€#4ôöÿÍöþúj##'¤3(k2 :##f¨ÿ¨h#{ÜÓVÌÙ¦&##&##V‘…&##h¨ÿ¦•$¦ÿ¨¨K“%K¨¨ÿ±¦¨€jgj€¨¦±‚ÿ±¨¦‘¨¦¨±ÀÿÀÿÄÅ“ÄÅÄ‚ÿ€ÄÁ‘¿Á€ÄÿÅĵ“¯µÄÅÿĺ•¥ºÄÿİŒ› ™jgŽgu››°ÄÿÄ«Œ‘ SŠ`‘‘«ÄÿĦ‹‡ {k?(ˆ‡‡¦ÄÿÄ¡‹}/5mr€}¡ÄÿÄœŠsX t Ct€sœÄÿÄ—‰igOGpi—ÄÿÄ“‰a8h Y‚a“ÄÿÄ‘ˆ]Tb-)e‚]‘ÄÿĈZ#7QeƒZÄÿćVA fDXƒVÄÿÄŒ†SQN8c„SŒÄÿÄŠ†O-Y W…OŠÄÿĈ…LD]%,V…LˆÄÿĆLÁÏ|Ï·O8B^†H†ÄÿÄ…EÿàZðÿm \DG†E…ÄÿÄ…EHãÿ©†ùN.YEWWPFXF€E…ÄÿĆGGsþôkj S WGK‘uœ’±HGG†Äÿć€I¦Ø Š3.RIMÂ’b‡®€I‡ÄÿĈ€KP-‰VžžžžU‹ Ðáá¾4wááÝyŠUžžžžU‹ €ÔÔÎk,ÎÔÔ«(ŠUžžžžTŠ 3ÄÆÆž ‘ÆÆ¼V‹TžžžžTT 63”¹¹¯IC€¹‹TžžžžS %EaL€¬›¬¬ 9ŒSžžžžSW #šŸŸ—/XŸŸžnSžžžžS€ \Q€Šb!‡ŠŠ‰#€ƒSžžžžS<1 tuu€\uuyQRÄÀÀ––½¸t‚SžžžžS bP``k^*€`vR«€6¾!,‘SžžžžS‚ LJJKk^HJJc7€ Rº||;ž¿‹A‚SžžžžT‚ 955\ &55;c S·aa1D€Á2TžžžžTƒ  ,W! ]#S¬€G¶$#»HTžžžžT„€ ^ %O‚S¬€…¹ÀŒTžž›ž^£^ž™ž|£|ž‡„ž;¡;žoHš’;Ÿ;’—%‚n€|_›U_|€X„j™¡ž—X†5v‡™›ž™‡o%ââ]‘›¥›¨¥™ŒM†ˆ¤¡¨¤u„ˆ€¨Ÿ–›“–Ÿ€¨p‚_¤¨¤ˆŸ{ˆ¤¨£8‘¨¨„¡u„¨¨}›¨š£oš¨¥¨‹£i‹¨£¨¨ƒ–c€9KkQ599k€cƒ¨¨¨¨€•]H€h^"3p€]€¨¨¨¨}”W V+""GgA""%sW}¨¨¨¨z”Q C449sN744^]Qz¨¨¨¨w”K FEElTHEENp‚Kw¨¨¨¨t“ERVV`hI€VxJ‚Et¨¨¨¨p’?K€h|Abhhs]ƒ?p¨¨¨¨m‘9 ;syy€QUyyzz:ƒ9m¨¨¨¨j‘3`€Šs;‡€ŠC„3j¨¨¨¨h/ >šœœ‘:wœœšf…/h¨¨¨¨g.Œ­­§]M€­3….g¨¨¨¨g-\€¾‹2©¾¾®P†-g¨¨¨¨fŽ, 3¿ÏÏ´FxÏÏ̇,f¨¨¨¨eŽ* ‹ááÛu>Úáá³;‡*e¨¨¨¨e) Iîòò²3±òòâbˆ)e¨¨¨¨d(ÉÿÿçWb€ÿ£-ˆ(d¨¨¨¨dŒ' qÿÿþ•.âÿÿØJ‰'d¨¨¨¨c‹% 0ìÿÿÏ?Žÿÿù€Š%c¨¨¨¨b‹$ žÿÿör?øÿÿ¾4Š$b¨¨¨¨bŠ# Iüÿÿ´-¼ÿÿë^‹#b¨¨¨¨a!&&Z"%&?=!ÌÿÿäRa€ÿŸ&‹!a¨¨¨¨` 9AAUN'AABptÿÿþ’(ãÿÿÕCŒ `¨¨¨¨_(suu€)Tuu‚ñÿÿÍ9ÿÿø{_¨¨¨¨`€ _©©¦j*¡©Úÿÿôm>úÿÿ¼/ "€%$ -$ƒ `¨¨¨¨`€ "¿Üܺ")PˆÅ?"a¨¨¨¨bƒ# ~ÿýÿÿò´ÿþÿÿ¹0#_±€#S»32¿T#b¨¨¨¨bƒ#%Þ€ÿ¯oüÿÿèX‚#_±€#$½Ä”)#b¨¨¥¨k£$k¨£™¨ˆ£$ˆ¨Œ¨¨K¡%K¨¨vM¤¨žKŸ&Kž¨¡(‚u€¨ˆl›clˆ€¨]„p£¡¨¡]†8}£›¨£v(ââmª¶Á›ÄÁ´¤Z†žÀ¡ÄÀŠ„ž€ÄÁ¿›¾¿Á€Ä‚‚oÀÄøŸ³¸ÃÄ¿AªÄÄ´¡­´ÄÄ’¶Ä½£¦½Ä©Áij£ ³Ä¿ÄÄ­–™UEEZ–}€E…€™­ÄÄÄĪ•“j€i’'€“ªÄÄÄĦ”Œ ˆ1ŒRwŒ¦ÄÄÄÄ£”† E|{ E‡†£ÄÄÄÄŸ“ oN0‚ŸÄÄÄÄœ“y%]€az‚yœÄÄÄÄ™’r Piq*|ƒr™ÄÄÄÄ•‘l h4v=tmƒl•ÄÄÄÄ’‘e 2 u[Gl„e’ÄÄÄÄa SPf$w…aÄÄÄÄ_tG€aa…_ÄÄÄÄ\ >h[-m†\ÄÄÄÄŒŽZ V 7g1r‡ZŒÄÄÄÄ‹ŽX * rOJa‡X‹ÄÄÄÄŠV IS\qˆVŠÄÄÄĉTn=€cWˆT‰ÄÄÄćŒQ 5hQ0e‰Q‡ÄÄÄĆ‹O K :_*oŠO†ÄÄÄÄ…‹M # oDMWŠM…ÄÄÄÄ„ŠK >UQl‹K„ÄÄÄÄ‚HeÙßÞ‰H°Þß½ZH g3€dK‹H‚ÄÄÄÄFFÆÿÿàdnþÿþ.iE 3\ŒFÄÄÄÄ€DDYøÿÿ±KµÿÿÚ =U#mD€ÄÄÄÄ€E›ÿÿô{Ròÿl l<OOEFIEEPIƒEÄÄÄÄ‚€GJãÿÿÎYÏXMiGGyÑÎέK­ÌÈ“‚G‚ÄÄÄÄ‚Hr÷÷ö™J-#r2fJHHz¾€HdÍS\ªNH‚ÄÄÄă‚I¨ÞÞÍA– 6]€I zÊššhJµÎ¦m‚IƒÄÄÄă‚J U¿Å· @¸Z oJ {Ȇ†aJPpžÏbJƒÄÄÄÄ„ƒL `}3jQTL|À€LsÈYXËtL„ÄÄÄÄ…ƒM L,[Ik‚M}À€MN£ÊШRM…ÄÄÁÄŽ£NŽÄ¿´Ä¨£P¨Ä§¤ÄÄr¡QrÄÄ‹ZÀÄ»sŸRs»Ä½/‚Ѐĩ›ˆ©€Äl„‚¿¡Ä½l†A’©¿›Ä¿§‹/âh8mk   :¤Ò÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷ÔªF|öÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷" |ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ–$9öÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøa ¤ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿2 ÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâI÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúXÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿb"ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿe$ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿf%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿg%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿg%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿg%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿg%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿg%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿg%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿg%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿg%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿg%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿg%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿg%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿg%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿg%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿg%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿg%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿg%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿg%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿg%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿg%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿg%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿg%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿg%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿg%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿg%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿg%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿg%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿg%÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúd$Ôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿä^!ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÉS F÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿú†Aÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ´\* "–øÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿú´d9 $a¿âúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúäɆ\92IYcfgggggggggggggggggggggggggggge_SA* "$%%%%%%%%%%%%%%%%%%%%%%%%%%%%$! it32'lÿÿÿÿÿÿÿÿ€kˆ—›Ëžš–„`¡SŽ›Õžš†?=ŠÙžœ€'šg™Ýž—N˜yœßž›d–yãžb”gœžƒ›Œ}snjÉijns}Œ›ƒž›H’=™žžœˆlÓglˆœžž— ‘Š€ž€št×dtš€€žxR€žšlÙblš€žœ0ŽžœqÛ`qœž}Ž›ž„Ý^„ž˜m‚ž›bÝ\b›‚žJˆ‚ž‡ßY‡‚žt‚žrßWr‚ž†—‚žcßUc‚ž›‚žZßSZ‚ž˜ƒžQßPQƒžƒž¿Nr{„†e\€Nr{„†e\†Nƒžƒž¾Lqþ„ÿçoLLqþ„ÿço†Lƒžƒž½JKÚ„ÿþ£…MJKÚ„ÿþ£…M†Jƒžƒž½H“…ÿÐŒ_HH“…ÿÐŒ_‡Hƒžƒž¼ETó„ÿö”yEETó„ÿö”yˆEƒžƒž¼C·…ÿ¸‹NCC·…ÿ¸‹NˆCƒžƒž»Akþ„ÿåŒiAAkþ„ÿåŒi‰Aƒžƒžº?AÛ„ÿþ¢ƒB?AÛ„ÿþ¢ƒB‰?ƒžƒžº=…ÿÎŒW==…ÿÎŒWŠ=ƒžƒž¹:Ló„ÿõ“u::Ló„ÿõ“u‹:ƒžƒž¹8¶…ÿ¶ŠD88¶…ÿ¶ŠD‹8ƒžƒž¸6f…ÿãŒb66f…ÿãŒbŒ6ƒžƒž·47Û„ÿý 747Û„ÿý 7Œ4ƒžƒž·1‹…ÿÌŒM11‹…ÿÌŒM1ƒžƒž¶/Cô„ÿô’q//Cô„ÿô’qŽ/ƒžƒž¶-µ…ÿµ‰:--µ…ÿµ‰:Ž-ƒžƒžµ+`…ÿâŒ[++`…ÿâŒ[+ƒžƒž´)-Ü„ÿýŸ,)-Ü„ÿýŸ,)ƒžƒž´&Š…ÿÊŒD&&Š…ÿÊŒD&ƒžƒž³$;õ„ÿó‘l$$;õ„ÿó‘l‘$ƒžƒž³"´…ÿ³ˆ/""´…ÿ³ˆ/‘"ƒžƒž² […ÿàŒT […ÿàŒT’ ƒžƒž±#Ý„ÿüž|!#Ý„ÿüž|!’ƒžƒž±ˆ…ÿÈŒ;ˆ…ÿÈŒ;“ƒžƒž°7ö„ÿñ‘h7ö„ÿñ‘h”ƒžƒž°·…ÿ±‡)·…ÿ±‡)”ƒžƒž¯\…ÿߌP\…ÿߌP•ƒžƒž®!ß„ÿüœz!ß„ÿüœz•ƒžƒž®‹…ÿÇŒ9‹…ÿÇŒ9–ƒžƒž­8÷„ÿñe8÷„ÿñe—ƒžƒž­º…ÿ¯‡&º…ÿ¯‡&—ƒžƒž¬^…ÿÝŒM^…ÿÝŒM˜ƒžƒž«!á„ÿû›y!á„ÿû›y˜ƒžƒž«…ÿÅŒ5…ÿÅŒ5™ƒžƒžª9ù„ÿïc9ù„ÿïcšƒžƒžª½…ÿ­†$½…ÿ­†$šƒžƒž©`…ÿÛŒJ`…ÿÛŒJ›ƒžƒž¨!ã„ÿúšw!ã„ÿúšw›ƒžƒž¨…ÿÃŒ2…ÿÃŒ2œƒžƒž§9ö„ûê`9ö„ûê`ƒžƒž§¹…õ¨…!¹…õ¨…!ƒžƒž¦^…ðÏŒH^…ðÏŒHžƒžƒž¥Ô„ëç–uÔ„ëç–užƒžƒž¥†…æ¶Œ0†…æ¶Œ0Ÿƒžƒž¤6Ý„áÓŽ]6Ý„áÓŽ] ƒžƒž¤©…Û „©…Û „ ƒžƒž£X…Ö¼ŒEX…Ö¼ŒE¡ƒžƒž¢¾„ÑÍ“s¾„ÑÍ“s¡ƒžƒž¢z…Ì©‹,z…Ì©‹,¢ƒžƒž¡3ÄÆ¼[3ÄÆ¼[£ƒžƒž¡—…Á™ƒ—…Á™ƒ£ƒžƒž‚ ƒ%NXƒ%LXQ…¼ªŒBQ…¼ªŒB¤ƒžƒž‚„&ŒP„"ŒP€¨„·´q¨„·´q¥ƒžƒžƒ …\ˆ# …Xˆ#m…²œ‹)m…²œ‹)¥ƒžƒž„„…k€„ ƒk.ª„¬¦ŒX.ª„¬¦ŒX¦ƒžƒž„…=Œ;…:Œ;……§’……§’¦ƒžƒž…„r€„o…¢šŒ>H…¢šŒ>§ƒžƒž…„‹V„&œ„œo‘„œo¨ƒžƒž† …UŠ' „X…•Š'_…•Š'¨ƒžƒž‡„ p‚Œ…ŒV*Œ…ŒV©ƒžƒž‡…6Œ@h…„Š€k…„Š€‚‡8#'G^O7ƒžƒžˆ „l‚ €1…|‚Œ=<…|‚Œ=ƒ)‡Äe€:²‚Ä®SŒƒžƒžˆ„ Š\ j„suŠml„suŠm„)‡ÄeLÀ…ÄV‹ƒžƒž‰ …M‹- A…kŠ&H…kŠ&„)€Ä„Z3ÄćN/VžÄľŠƒžƒžŠ„}t…clŒU#…clŒU…)€Ä† ÃĶ€/ÃÄÄ<ŠƒžƒžŠ„/ŒFK…Z‚ŒIL…Z‚…)€Ä†ÃÄÄZ€BF@!Šƒžƒž‹ …e…,…RjŒq…,…RjŒ;†)€Ä‡€Ä¼ƒDŽƒžƒžŒ„ˆ_F„JOˆgˆ_F„JOˆk‡)€ÄƒºZ€-»‚ĸ;ŒƒžƒžŒ …F^…Bp‰E^…Bp‰%‡)†Ä_*ŒÂ‚ÄÂT‹ƒžƒž„…9LŒJ…9LŒSˆ)€ÄƒŽFƒW‹¹Ä:Šƒžƒž‚(„12{|(„12{~ˆ*ÅÅĈ€K±ÅÅmŠƒžƒžŽ ‚…)SŒ-…)SŒ:‰*ÅÅĆp²Âf‚]ÅÅ—Šƒžƒž€„ *†d„ *†jŠ*ÅÅĆXÅŬ‹ÅÅŠƒžƒž€…b‰…b‰$Š*ÅÅĆ %½ÅÅ¢I1RƒÄÅÅKŠƒžƒž…-ŒQ…-ŒQ‹*ÅÅćV†Å¤Šƒžƒž„ u}„ u}‹*ÅÅĈV¯ƒÅ‹#‹ƒžƒž !ƒ/Dd- !ƒ/Dd-Œ??>‰>WldQ&Œƒžš‚ž!ß!‚ž˜–‚ž/ß/‚ž‚žHßH‚žƒ„‚žqßq‚žp`‚ž˜!Ý!˜‚žBšžgÝgž—ކž›;Û;›žw?œ€ž•,Ù,•€ž›'€€ž€•;×;•€€žq‘'—žž›g!Ó!g›žž•’N›žƒ˜qI0"É"0Iq˜ƒžš8”dãžQ–b›ßžšQ˜H—Ýž•8š xœÙž›q0}˜Õž—w'¡Jt†˜Ëž˜ƒpBÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿ€r‘™ ¥Ë¨¤Ÿ™Œf¡X—¥Õ¨¤CA“§Ù¨¦ˆ*šn£Ý¨¡S˜¦ß¨¥j–ã¨i”n¦„¨§›ˆ„Ë€„ˆ›§„¨¥M’A£ƒ¨§—Ó}—§ƒ¨ "‘“ƒ¨¥ˆ×{ˆ¥ƒ¨€W§‚¨¥Ùy¥‚¨¦3—‚¨§„Ûv„§‚¨…Ž¥‚¨“Ýt“‚¨¢ t‚¨¦wÝrw¦‚¨N‘‚¨–ßo–‚¨|™‚¨ƒßmƒ‚¨Ž ‚¨wßkw‚¨˜¥‚¨nßhn‚¨¢ƒ¨gßfgƒ¨ƒ¨¿dPL„Rim€dPL„Rim†dƒ¨ƒ¨¾aN„ ‹yaaN„ ‹y†aƒ¨ƒ¨½_^„  r‡a_^„  r‡a†_ƒ¨ƒ¨½]>…CŒm]]>…CŒm‡]ƒ¨ƒ¨¼ZU„!„ZZU„!„ˆZƒ¨ƒ¨¼X5…b‹`XX5…b‹`ˆXƒ¨ƒ¨»VK…&=ŒsVVK…&=Œs‰Vƒ¨ƒ¨»T4„-.z†VTT4„-.z†V‰Tƒ¨ƒ¨ºQD…3YŒdQQD…3YŒdŠQƒ¨ƒ¨¹OM;„:A‡{OOM;„:A‡{‹Oƒ¨ƒ¨¹LE…ApŠULLE…ApŠU‹Lƒ¨ƒ¨¹J…HXŒl€J…HXŒlŒJƒ¨ƒ¨¸HM„NOƒJHHM„NOƒJŒHƒ¨ƒ¨·FM…UmŒ\FFM…UmŒ\Fƒ¨ƒ¨¶CE[„\a‰wCCE[„\a‰wŽCƒ¨ƒ¨¶AW…c~ŠKAAW…c~ŠKŽAƒ¨ƒ¨µ?J…jsŒe??J…jsŒe?ƒ¨ƒ¨´<=g„pq‡?<=g„pq‡?<ƒ¨ƒ¨´:V…wŒR::V…wŒR:ƒ¨ƒ¨³8?{„~‹r88?{„~‹r‘8ƒ¨ƒ¨³5j……Љ@55j……Љ@‘5ƒ¨ƒ¨²3J†‹Œ^33J†‹Œ^’3ƒ¨ƒ¨±13ƒ…’313ƒ…’3’1ƒ¨ƒ¨±0b…™“ŒI00b…™“ŒI“0ƒ¨ƒ¨°/<œ„ žn//<œ„ žn”/ƒ¨ƒ¨°/…§•ˆ://…§•ˆ:”/ƒ¨ƒ¨¯.R…­¤ŒZ..R…­¤ŒZ•.ƒ¨ƒ¨®.2¡„´³’}0.2¡„´³’}0•.ƒ¨ƒ¨®-r…º£ŒF--r…º£ŒF–-ƒ¨ƒ¨­-@¼„ÁºŽl--@¼„ÁºŽl—-ƒ¨ƒ¨­,™…Èž‡6,,™…Èž‡6—,ƒ¨ƒ¨¬,]…Ï»ŒW,,]…Ï»ŒW˜,ƒ¨ƒ¨«+0¿„ÕÓ•|-+0¿„ÕÓ•|-˜+ƒ¨ƒ¨«+……Ü´ŒC++……Ü´ŒC™+ƒ¨ƒ¨ª*CÞ„ã׎i**CÞ„ã׎iš*ƒ¨ƒ¨ª*³…꧇3**³…꧇3š*ƒ¨ƒ¨©)h…ñÑŒT))h…ñÑŒT›)ƒ¨ƒ¨¨)1Þ„÷ó™z*)1Þ„÷ó™z*›)ƒ¨ƒ¨¨(˜…þÃŒ?((˜…þÃŒ?œ(ƒ¨ƒ¨§(Hú„ÿîg((Hú„ÿîg(ƒ¨ƒ¨§'Å…ÿ«†0''Å…ÿ«†0'ƒ¨ƒ¨¦'n…ÿÙŒQ''n…ÿÙŒQž'ƒ¨ƒ¨¥&/ç„ÿú™x'&/ç„ÿú™x'ž&ƒ¨ƒ¨¥&›…ÿÁŒ<&&›…ÿÁŒ<Ÿ&ƒ¨ƒ¨¤%Hû„ÿíŽd%%Hû„ÿíŽd %ƒ¨ƒ¨¤%Ç…ÿ©…-%%Ç…ÿ©…- %ƒ¨ƒ¨£$p…ÿ׌N$$p…ÿ׌N¡$ƒ¨ƒ¨¢$/é„ÿù˜v%$/é„ÿù˜v%¡$ƒ¨ƒ¨¢#…ÿ¿‹8##…ÿ¿‹8¢#ƒ¨ƒ¨¡#Iü„ÿëŽa##Iü„ÿëŽa£#ƒ¨ƒ¨¡"É…ÿ¨„)""É…ÿ¨„)£"ƒ¨ƒ¨‚""ƒ(S_%""!ƒ(Q_%"s…ÿÕŒK""s…ÿÕŒK¤"ƒ¨ƒ¨‚! „6ŒW€!„3ŒW€!.ë„ÿø–u!!.ë„ÿø–u¥!ƒ¨ƒ¨ƒ!%…*j‰0!!$…*g‰0!!Ÿ…ÿ¾‹6!!Ÿ…ÿ¾‹6¥!ƒ¨ƒ¨„ 8„>Fˆo€ 7„>E‡o Iü„ÿê^ Iü„ÿê^¦ ƒ¨ƒ¨„ +R„SlŒD )…SkŒEÌ…ÿ¦ƒ' !Ì…ÿ¦ƒ'¦ ƒ¨ƒ¨…H„gh…$G…g„±…ÿÓŒGt…ÿÓŒG§ƒ¨ƒ¨…$s„{‹\$q„{ˆö„ÿ÷•r.í„ÿ÷•r¨ƒ¨ƒ¨†G…Š2E„Ñ…ÿ»Š3£…ÿ»Š3¨ƒ¨ƒ¨‡ ‚„¤¢Žs! €‚¤¶þ„ÿè] Mý„ÿè]© ƒ¨ƒ¨‡ 8µ„¸§ŒJ 6´¸ð…ÿ¥& !Ï…ÿ¥&‚ $‡E1 !5SiZD$ ƒ¨ƒ¨ˆ z…Ìš„( w€Ìà…ÿÑŒF x…ÿÑŒFƒ 6‡Èn€ F¶‚ȳ]Œ ƒ¨ƒ¨ˆ (É„à ÑŽb &Æàâý„ÿö•q 1î„ÿö•q„ 6‡Èn VÄ…È`‹ ƒ¨ƒ¨‰!a…ôº‹9!!^ôû…ÿºŠ3!!§…ÿºŠ3„!7ÈÈÇ„e?!!¤ÈÈZß$>‚¨˜™‚¨Vß$V‚¨‹Œ‚¨~ß$~‚¨wf‚¨£2Ý%2£‚¨G¤‚¨tÝ%t‚¨¡Ž‚¨¦JÛ%J¦‚¨C¦‚¨ <Ù%< ‚¨¥*ˆƒ¨ K×&K ƒ¨x‘*¡ƒ¨¦u3Ó&3u¦ƒ¨ž’S¥„¨£~W?3(É&(3?W~£„¨¤<”jã¨V–i¥ß¨¤V˜M Ý¨ž<š"€¦Ù¨¥x3…¢Õ¨¡*¡ N|Ž˜¢Ë¨¢˜‹wGÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿ€…ª´»ÁËÄÀº²¤x¡g°ÁÕÄÀ¨OM¬ÃÙÄ 1š¿ÝĽb˜—ÂßÄÁ|–—ãÄ|”Â…ÄÀ½º¹Ë¸¹º½À…ÄÁZ’M¿„ľ·Ó¶·¾„Ä»(‘¬ƒÄø׳¸ÃƒÄ–fÂÄôٱ´Ã‚ÄÂ<°ƒÄ´Û®´ƒÄŽÁ‚ĺݬº‚ľ ‡‚Äìݩ¬Ã‚Ä\ª‚Ļߧ»‚Ä’´‚İߤ°‚Ħ»‚ĩߢ©‚ijÁ‚ģߟ£‚ľƒÄáƒÄƒÄ¿š{s„p—€š{s„p—†šƒÄƒÄ¾—x„‹‘——x„‹‘†—ƒÄƒÄ½•”„o••”„o‡•ƒÄƒÄ½“W…9Œ‘““W…9Œ‘‡“ƒÄƒÄ¼… „ ƒ… „ ƒˆƒÄƒÄ¼6…VŒ€6…VŒ‰ƒÄƒÄ»‹l„‹Œ‹‹l„‹Œ‰‹ƒÄƒÄºˆ†„rŒˆˆ†„rŒŠˆƒÄƒÄº†M…;Œˆ††M…;ŒˆŠ†ƒÄƒÄ¹ƒw„ „‰ƒƒw„ „‰‹ƒƒÄƒÄ¹0…XŒƒ0…XŒƒ‹ƒÄƒÄ¸~`…!Œ…~~`…!Œ…Œ~ƒÄƒÄ·|z„sŠ}|z„sŠ}Œ|ƒÄƒÄ·yD…=ŒyyD…=ŒyƒÄƒÄ¶wk„„†wwk„„†ŽwƒÄƒÄ¶t)…[‹wtt)…[‹wŽtƒÄƒÄµrU…#ŒrrU…#ŒrƒÄƒÄ´om„uˆpom„uˆpoƒÄƒÄ´m;…@Œvmm;…@ŒvmƒÄƒÄ³j_„…jj_„…‘jƒÄƒÄ³h#…]‹lhh#…]‹l‘hƒÄƒÄ²eJ…%ŒxeeJ…%Œx’eƒÄƒÄ±ca„w†dca„w†d’cƒÄƒÄ±a3…BŒmaa3…BŒm“aƒÄƒÄ°aV„‡~aaV„‡~”aƒÄƒÄ°`…`Še``…`Še”`ƒÄƒÄ¯_D…(Œt__D…(Œt•_ƒÄƒÄ®^[ „x…_^[ „x…_•^ƒÄƒÄ®]/…EŒi]]/…EŒi–]ƒÄƒÄ­\P„‡|\\P„‡|—\ƒÄƒÄ­[…bŠ`[[…bŠ`—[ƒÄƒÄ¬Z?…*ŒqZZ?…*Œq˜ZƒÄƒÄ«YV „zƒZYV „zƒZ˜YƒÄƒÄ«Y,…GŒfYY,…GŒf™YƒÄƒÄªXL„ˆyXXL„ˆyšXƒÄƒÄªW…d‰\WW…d‰\šWƒÄƒÄ©V;…,ŒnVV;…,Œn›VƒÄƒÄ¨UR „{‚VUR „{‚V›UƒÄƒÄ¨T(…IŒaTT(…IŒaœTƒÄƒÄ§SG„‰wSSG„‰wSƒÄƒÄ§R…fˆWRR…fˆWRƒÄƒÄ¦R7….ŒjRR7….ŒjžRƒÄƒÄ¥QN „}€QQN „}€ŸQƒÄƒÄ¥P%…KŒ]PP%…KŒ]ŸPƒÄƒÄ¤OB„‰tOOB„‰t OƒÄƒÄ¤N…hˆSNN…hˆS NƒÄƒÄ£M2…0ŒfMM2…0Œf¡MƒÄƒÄ¢LH„~MLH„~M¡LƒÄƒÄ¢K"…M‹XKK"…M‹X¢KƒÄƒÄ¡K>„ŠqKK>„Šq£KƒÄƒÄ¡J…j‡OJJ…j‡O£JƒÄƒÄ‚IµÂƒÅ…oKII|µÁƒÅ‡oKI.…3ŒcII.…3Œc¤IƒÄƒÄ‚HXó„ÿàŒjHHUñ„ÿãŒj€HD„}HHD„}¥HƒÄƒÄƒG’…ÿ³ŠQGG…ÿ¶ŠQGG…P‹TGG…P‹T¥GƒÄƒÄƒFGÙ„ÿó’yFFGÔ„ÿõ“yF9„ŠnFF9„Šn¦FƒÄƒÄ„Ejþ„ÿÌŒ]EEfü„ÿÐŒ]„l†IEE„l†I¦EƒÄƒÄ…D°„ÿþ¡…HDD«„ÿþ£R…5Œ_DD*…5Œ_§DƒÄƒÄ…DOî„ÿåŒlDDMë„ÿÙ „ €{DD?„ €{¨DƒÄƒÄ†E‡…ÿ¹‹REEƒ„ÿi…R‹REE…R‹R¨EƒÄƒÄ‡EЄÿö•|FEEÌ‚ÿÌ„‹mEE7„‹m©EƒÄƒÄ‡Fcû„ÿÓŒaFFaú€ÿþ7„n…JFF„n…J‚FJ‡dTFGWp‚vdJFƒÄƒÄˆF§…ÿ¦†KFF¤€ÿš…7Œ_FF*…7Œ_ƒFX‡Ñ‡€FeÂÑÀyŒFƒÄƒÄˆGNé„ÿ êŽqGGMæÿì„ ‚{GGB„ ‚{„GY‡Ò‡GGtÎ…Ò|‹GƒÄƒÄ‰G…ÿ¿‹VGG|ÿe…U‹RGG…U‹R„GYÒÒÑ„`GG³ÒÒ¢v]|´ÒÒÌMŠGƒÄƒÄŠHÄ„úô—IHH˜„‹nHH9…‹m…HZÒÒцHSÐÒÆI€H^ÐÒÒhŠHƒÄƒÄŠH\ë„ñÐŒeHG„pŒgHG„p…K…HZÒÒцHOÐÒÒ€N€HmpkSŠHƒÄƒÄ‹I”…祈O+…:ŒˆO+…:Œ`†I[ÒÒчI´€ÒÌ pLŽIƒÄƒÄ‹ILÅ„ÝÒŽj„ ƒ¢Ój„ ƒz‡I[€ÒƒÊ€I^Ë‚ÒÉžhŒIƒÄƒÄŒJm…Ô°5…WŽÉÔ±5…WŠT‡J\†Ò…J\§Ð‚ÒÐ|‹JƒÄƒÄJœ„Ê›„ ‹©ÊÊ›„ ‹mˆJ\€Òƒ¨rƒJT¦ÊÒiŠJƒÄƒÄKU¶‚½»$„r’»½»$„r„NˆK]ÓÓÒˆKLL€KLuÄÓÓŠKƒÄƒÄŽKn‚žZ…<Œ˜žžZ…<Œ`‰K]ÓÓÒ†K’ÄЋ‚KƒÓÓ°ŠKƒÄƒÄLu€t„ „ˆt„ „zŠL^ÓÓÒ†LÓÓÀSL§ÓÓžŠLƒÄƒÄLP€`#…YŠf``#…YŠUŠL^ÓÓÒ†L YÍÓÓ¸ub|¡ÒÓÓwŠLƒÄƒÄMGB2…!ŒmGB2…!Œm‹M^ÓÓÒ‡M†Ó»SŠMƒÄƒÄMJ&„s„OJ&„s„O‹M^ÓÓÒˆMÃÓ¨Y‹MƒÄƒÄON6+ƒ6Nx\NN6+ƒ6Nx\ŒNR€o‰NQo‘‹}\ŒNOƒÄÀ‚ÄZßNZ‚ľº‚ÄfßOf‚ı²‚Ä|ßO|‚Ä£¤‚ÄŸßPŸ‚ÄŒx‚ÄÀ[ÝP[À‚ÄTÀ‚Ä–ÝQ–‚Ľލ‚ÄÃqÛQqÂĕO‚ĽfÙRf½‚ÄÁ1 ƒÄ½r×Rr½ƒÄ‹‘1½ƒÄ×^ÓS^—ÃĹ’bÁ„ÄÀ ~i^TÉST^i~ À„ÄÀH”|ãÄe–|ÁßÄÀe˜Z»ÝĹHš(–ÂÙÄÁ‹<¾ÕĽ•1¡ \’¦³¾Ëľ±£ŒTÿÿÿÿÿÿÿÿ€t8mk@    $(*+,--------------------------------------------------------------------------,+*($   'e§Ìâöÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷ãέp8,#  D´ôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿö½Y1%  3§ûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿü´O0" Xîÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿñt8'xúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿû’=* xÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ”?*  Xúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿû}=' 3îÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿó`8" §ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿K0 Eûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüu@&  ´ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÊO2 'ôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøa># dÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ“I,  §ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÄT4  ÌÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÝ]; $âÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿìdA%(öÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿújF(*ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿmI*+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿoK+,ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿpL,,ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿqM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- -ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrM- ,ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿqM- ,ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿpL,+÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúoK+*ãÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿîmI*(ÎÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿájF($­ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÊdA% pÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¢];  8öÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùyT4  +½ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÕkI, #Yüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿý^># 2´ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÎoO2 &Oñÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿö†^@&  0tûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿü iK0 "8’ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ³oS8" '=”ûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿü³qX='  *@~óÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿö oX@* *=`¿üÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýΆiS=*'8KuÊøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùÕo^K8' "0@Oa“ÄÝìúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúîáÊ¢yk^O@0"  &2>IT]dimppqrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrqppmid]TI>2&  #,4;AFIKLLMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMLKIFA;4,#   %(*+,--------------------------------------------------------------------------,+*(%     ic08 jP ‡ ftypjp2 jp2 Ojp2hihdrcolr"cdefjp2cÿOÿQ2ÿd#Creator: JasPer Version 1.900.1ÿR ÿ\@@HHPHHPHHPHHPHHPÿ]@@HHPHHPHHPHHPHHPÿ]@@HHPHHPHHPHHPHHPÿ]@@HHPHHPHHPHHPHHPÿ Ž\ÿ“ß‚0 9¦Va…ÎFÄK‚äu'Ö=§¨Jp±2t8~Í©+ˆšZØDQÔÏzŸ­«ï9L¡)’·SKÉO½HhîA…'„¡lvgß‚ 8 ÇC¥Ýøh9èÒ€aæ Ýe®j˜ 'çô;e . ÙÃ2R’¸Z%®n†ÌUK&óø daV’ /¼w@œ¢thy~gß‚0 xx}Ria™¥‘?ÿ Ï`Ž•uCux½B³›¡‡Ïíþ´*R#må¦+ÃL5gÒ¤WËñÇ+ÏÌãž•Pz¤É¡ŸßÀ âF9ð=žDD0:,Û…Ìba÷¾šÓ¼Üf²¿ ±`¹ÄÝ%å»lã삤Fq2aªØiO·ÏÀþ~“ó@'zκÙ>aÁ†10¯ÅQ”ÈÈ]=Ðî.5â½ð)°z¸–~òâèÁCµøòJ½ýàðyÏtÔ7fÓC  “À„ÆÂÛ]á²SES]c°ꃑ’ú±˜ŽŠ±—Z`qÃq³©užš1­Úí3pÂâ ïÄRbÏ)ìB¶ïV¶Ò cD‚„"±EM†¢ï1–œÚ1ª¹«ŠH1w˜)ÊxgêOŠ`!õnPO×8ªavC/²öÏÀò~³ó>4§‰œI–o(ÛúzÖyÀ%õyÍ=V(+2ý÷S?É*&|BÛ˜ŽA0'AþÁ‚2À)°;;3ùG‰8š…áC*Tí¼‘)7‹ÊÂ6˜µŠpßLpÝ«ÞK´-7xà…"gª>€Í;ó~@¶#I"¡m5JÕ“ãŽõ¾I!Ë¡?'pôT2Â^Çâ¬Øƒ—ýÔcÝfs0>8<ªŒp,ó»[±¼ƒE=÷TÕ‡ÏÁ~Ñø€-Ö¤Òß8}‰Só¨ìR½¥æäTŽØE°Q®ç'DÒ|<«ÎU‚h9ÑLˆç˜NÜ ùÓOL?PóD·_C4sg[&^v¢;¦"$Œ3ë*/Ùä6d&õTh à¾QÛΠ}­æïŒ6bP"‚3¢#Þ®ËO-HEGûÓ¿):›>T RfÓ¡¶ÍbIׯø~wrvæ–œJνeµ9ÏBc}º®™í2¦:áìË{—•”®Ì¿ÒƒË¸ŸÏÀ–~qø €4 &áVÒŸí D‹”SÒWH$ Í*UÊì³ÓgäBºxò?ŸC†×éfØ—Õ,››ÄÆô¬kôÝ•µäÄ ,¢ž"¢Î‚ÐbçaÈôg禎üœ›žÁDý•PlnÈo‰ÏÂß…c?:p‚ú^o]ß\Š¡q€çÉü@º}|ø‹ûWs„Y_ŸŠXth0ÿŽÞg‡Ëêåƒ$UÚòH›¥ïtGê’œÚh&4}ç ;;¡–ìÚñC$E7+5³(×vð•]0*^HPñ¤ÃË¢÷6 Å}*D j‡žï‚FÍÛgGÙyPûÂ|Uì Ò=‡ò0’2ÁÓ±Ö–›ß—5EÏ„cè.ÂÆ+(.¶ã|Ã×ÚâNñ7Ž©ˆ€äÿ¡„ðŸ>­¹NLúðq(K4²øHfÒÇægX#JTŠm£ªK‰Ú¥dëØWm?áÆ9öãpëvBš™ZYö²2RœÓòÆ(5“,c¶M˜UŸGŒ…]TÆU¨fJqY2à÷˜¶RÈ=eà”×Îô0HR1ÉGà”³,@ôxŠôIæŸò½ö¸Å¿Í5÷ûõç¶%Ý­¯£L$1j­Õ`fqNE$-G/ Gù¿…Nì˸nù_üö!ÐlgÛä¶ Ñ‘ªYÔR¬ôÁ(ÿjãOáÈ|!¸õ®é¦ˆ o¶µÜ”4ˆ"§DœÎ|} 裴ôÁkßtÔxuÔÚ—Ö⨚—S{WëUðé­¼ ò‘n¦k$4ݽìzz¸±·ãŽtÞÍ Q芑küé 'ÿjåâì—ßu? ê? l”6—$âôP‡Ž@quMY“j©Rvá£^`ûƒ÷Ï—8¹³M¦bZ5­ÌÞ>4!ºÂf‰ÖYð‘áeD<9ÖSu9·G«V”ÃFÌN'fRª¢©£kÉêÇŸçÑ t š#òe[ûãú2Iå]#ÎêÛƒdö„8¬»ËL#™·²‹§xLÎùRÔéÿÕ'×k*Œ‡XdŠ}Cl> ¹o/¿¶¿ â×Àý÷ \ì’VÐ"÷h­¡*«î‡ÙŸõ*ŠI­}8:Î2É7i Ã3úàê̦Y¡ ÀA&;ÿZ)üŠWKBVôCÄéruBÝá™OÙ>¬F÷‹TtrÞ…t!tÁ\ÅGk|B\Œ¨ßdgÚWsd1ßL4öEtZp*¬ ùÞziïo?´ŒZkkù~Åcííµ¸@À¾¬¦„óGɾ´TØ Yb‘Ž|®´[÷kä¢ðY¥è5ß)#펰^¨p÷üg®Ã±K^wE&¿v¢‹ëн—}Æ\4 Š:à iêys‰#d 8‡y Y"“ –LC·ZpùËsHµ7'ÄM<70ý_Xçð(õâÆ.PYL (h¥PE¿ Å6Ç*7RÕ¹úh%jvyŸZöè=ZÄ&!'(§ ¸qʸ(*š¡‘#wcÛ0/Š˜`™˜¦ ~öàÃ_Ò_ϼŸ…k…4…Ád›|G> :%Üjê$ s£ŸºŠ­T@‘UJ#R.0öÉÂòË¥nöÌ9Ç{ÒËc9b€ ˆ¶Ízø< †!Š#¼ ·Œ‚„–© %¾¼¥rƒ®y Æ®:Ú2åa¬u+A”Uü¦ݹYÒY/¿qY¬ßèIêcoZ(Õ÷,ʤ“…tèê0 ß_¯(F;Œ#N1d=8ßQ4ÔØ @”0&-{Ӌlj1Wú"Ï1" [ù¡N.®Vì6†ìºíw ƒ±U‹Îíš Ë­Æ•Þ¥,)ú íœÎ2pñIZòçnì¬)ûä›*DÐý‹ì‡ð?–üAuÌô÷Ÿ~djÖÌún6se(œfwvË©dÓ0NqõXáìš5v4wÚ§àÍ­Ȉ.áÌÛºC<Þ«óÍI°Á(~›F«{9a\]ŽZe”H- IWÉVñ *©‚/ÏÁ>~ Ñø€b^•‚Eï’‗öX9v]ŒÖ÷µ´=Ì«F:‡Y.0‘ÚÉC”ÙFF|Zy¬>væƒvxÄá Å´ÒMlÛéËuõ1ÆýÛ϶|‰ÙO È$›I\ýW2NcRñO€ƒaÏÁîÔ!e4¸ô•ËÈ2G婵aÕâòÂÔiÄÛ¶ëÕ¥E´íuOþ—TRš#‰Ü”…çä'ükºèømlA‹‰0q5,ýîùÅô37“`7Ášƒ;OÂf§OÌDš`&Ñ~ŸÏÃ~çẑøl€ÀþJµ,3S¸¼Ž ’$ŒõϺ)OzÂà£7ïJ°*¡IyÏh´ú\?;ƒ;k±“™'„ WÐFîÛYMúÇ_>œM,-äÛ½æÀ(FŸúo”e—ôÛ ƒ‡kzŒ²ïâýÒ°ù™ØOŽaô*ØÃcȆZüßí¸ÖccºÎq ­E©iÓL‰è[Xÿ†ŸÉC¢Ò‘¡*ﳩ­µ¬÷.ýžÚø ¥ûÞÃg*¶‘!'UÊL߀Ëõ†taK5[Úô³;HBSç ó¤B$ß© ™0àgÛY<ß(uF>&!…é@@žäýáЮ™ß8ci Ûáà°ýŒáŽ7vèɵûcIÆ¿î€ d¡p¤ÐÅ^+bò!ˆ9d©hÜ ùej‘–uó÷ëáhh‚ݹ…#HmŒXm{Ïžè¼õf¼S9¼W­Ãèó]ë§»C§‡àR•ʯ‰üw\çÄùì@C8@%ÆÊËñè— -ÔËÐ¥:hú}àÏsÖZ-ŸAƒFB¿àË bœþë,cy;¬{Bœb†³‘×/ƒjð ÁN*~ÙÝøC¿+³ðÝcZ‘¤îsí㌪IP^ÇVº¨Ün¸×±À<ßLÄoÙ©^†;ø5^§·Èƒ{ç­L¯T»XbæDbǯHE*~Û…/ÚœÕÿ)h‡µOeÈJ÷Ô‘¡1÷}m@­ÊÏ3ñî1ã/‘·:©š7FQ‰ƒ…á˜v $‘BlýHX *"øˆ$‹J ¿d»›Ylm1æ )jÂÉŸ„ÃWÂÁæIøïò¬7ü‡1Íš]ç ·]àüwDñé6%fq@J2jwœŠ·8¹ %7õBuâ’‚,uŸ80äÌ!Ï%"K'îI\÷…óD8›(WýNm>´= W¹‡ëzA’7Y}=¾çwÊ5e‹™rª¦0J‘„ÇT–™ïèg2R¶ú2nvÂnYÎ5}ÌVî' ŽÂ÷Ö§Ï–Ù5ì2:¼.b¯V æê¨ŠnI$‰± áu÷¨søÓ Vd:Ip¿µF|±Eöʵ°pÔøñxS&ØmÉ$’O-géÖ¢,3žëk¹ZÈO}2#ÆF¬a{ •ŠqZ\n`JFPPmÉ$BqS4ÌLh ¡œ6|¨ä*P€‘5-È¡¹h[ò¾ YYÈw€ìZ”ù:žìÅÏžY(•¢ÀrI$v%*Ž(vŒ³.Σ‘[ÖæÁ` :`˜ÙZJÂ6Óñäï}ãÏÓöÒ©OY/TŠy´wñŽÀCKÀ>‹G]·J…A¬€¿kàHˆ.äÕ¾ò벲ý–œœíýïdT¿*-õÄK†®&Š–.:ˆ%ùæNÇ)Q UßÖI²õ2û§ W¥4ù€±†Š–9¥tP›¦tFt(žŸïñ¬ c/Ç;¾‰¤ÝâN/æ:U.‘8Xir⢊¼Ñž»Q5†VXæ,KÌqö¡¾1áŠ) Åõ˜Œµî:ÌŠÌÆ«Çyéæß4°M0:8…áš6F¯èÃmiH¤9ù☒ë5ÄÅ~yl:‹í}•SR}÷»ÄÒ9Þm¾å%÷F‡sfÆmTÂÔCW lOo‹Q÷E‚T$±î&~øã^³²Œ}ÄS¥>ŸòåZV¡ü‡1 ¿Þ˜ýRáé«,XGAn·’D.ýü·Këy¡Œ+ÙíšþvkÆurÌ×çt²P7G÷¹Åy +Ë"hlòÃ0wÊÛQb Š›âb]álp ¦ ƒ_Þù;õ¯T:@!V{áSªà·µ8ž·")rÀX/eš?ÏÃzgá»ÑølpÐ2Á/ÓM­¤³iÚ‚~ÑdXõùcŒ¼Ì©þw‡Ï@Ÿ_œÇ4'|–zW—ß¾¢Ôù7#Õ³{uî¹-Ñ–-.øñ áf´>úá£-z«`gLè8ò¢Ù£Ý12”.Í y1æÖ&¸e±˜õ—ȶžGÑžñ”>ð£^09 ?¸`/‹˜%á°¨g¥‚Y•ËͻۑDL—G¦cB!Îë Zùi!šÚ§ P6´¥DQÁV2á†`Ÿhâ5Ý7j+VKŸÚšÝf²Ö™ÊT"ÈH§??øAίpof=Ѿ\¨nðÐè:VÔ‹—÷=uÃP@«Ñ¢*r²ë±y½J¥ß*hpú++DÒQÞÓù‡Â¦¡œsž­ˆŸÐ'o—šÐä²([`»ªx¬»Ä¾™±æÿ&Âþ“¢„¬8êY‰äõñ‚ ¹Ê‰ßmÒ}Aw:7ƒºÜf®· yg,Ù%rÝ?(`x¼²Ï¬uìIVPó™d'+éYu 3*'˜YŸöÌIb½ä¥câ 9ñ–Ÿ½EC’Ùsß.ø0¯/ÅØ—µK€â0i±]ùÉw\9ÕU§€Wwe経Lì°˜ÚÊejÃjÛrI$’Y?&6èc¥Ÿ›,Úw)2È"Q¢µ­–º§¨ØF6×.I$’I ÁÕ¿™Ðÿ”5G "2B®ñ´â­]Ãh3S¿‚—Vû`v€mÝA·$’IB±[‚W©Ï†¨!x²VËÅ’˜§GdÜ‹ü„y è´«ÙÅÅ)YÚ¨&³áR:Û’I#éX°…ñ0îË«×ÙI ¿—=£»Ó$./Þ‚÷},NW^'Ü» Ц¹$’I$G“|´›‰&ˆqÄßÏñQ¢¨ãÔæ‘5PTMò‹Ç!œã‹åãûüœ¾ûî^ÙñVnšZ«¹Ùª!+zJJÏš´Pt9 ¸>8W4•b©ãIïÒò­%ÿhHž¢Q‘¯–½ýŒkõÚp<¦~ðX»¡Ì§¥Ñ¤ñÈÞÒ4ÿ~oÜB{Õ•™&S%¤–”xÃ’óßÕNX&ú¦Ä<÷R‡™Fkª©à†É7à»!Àmت茊8½ø ÃOšBèÍŠû˜ûÕc ï2ÛÇ(¢ìX—sÒ³ßÁÌŽAW³PNÏHã³Çóý~§Õ_>ÉL:–~´féCâ–%å&]Œ¹)—Ô1î5J#ê½_eoÌ'1܉4gm@þ<ñœ°Én)Éx ¦DCÐL6ì“}:±/tË:O{;oÉ{|8ÛIÁLÐScÄš"öR(*{¿8þu§ û‚–OŒ‹àîÜ€®GåšÂr ^P”ôdµ©†@D`ÞwŒo–1ŸÍòà(€åö=ÁK‡³òÞYµv?ÏÃ{gáºQølh«î ï¦0«ÛÏ%€7_Éö‹(*ƒO·Aͺ ã5ãûþäÑ,E–̇?ý¡åø§—fœ{øUµÂ¸l¬ y4Ú€ çÅ·÷ÔÚ6Ÿ/]tÎätÆRêvÊ´Ë5(M f alÚ@È7¥ùÃØUZ4½‘—>kÍT h%èu )$eä*-â,â<~UöÌ[LQKΆÏ0Þ‚Ç‚?J†/„ç ùxû=PÊàeoÕènºç§à`RØuþËp‹bÃ[£ÕQrÝf |üþ¢T Ó(b9½ò(Ôą䩊ÔXƒ+q)b$c0Æe P1ö¦ðšZáøÜZ€ßî.0— ¶zc`¦©´ËÕÉÃÁ¨Åû÷ÓåöÈ4gt@´tIÒOªFkÝð×’n9ºŽè†lZôŸ§ Tn-…‰¶b)èœ]]Ã)Ï šøUÝJ|•€$úQX=v‚óÒ£Öh‰6 tggÈ`ÿ!±²dÌÃ5Ž0‰Úl^ž–,ösi „ Q2`+TÈë#0õPÀbJ`XŠþCeäv…ì ‘¸¨*Ê6šÝz‚.®1·#ŒaÇdQ†±‰ ÚýEå+1è5û¾Ìóâ– Cg\oÃU<0 —X*6•š½Vÿ9Ë ¢Ÿ*AèÍ"b³Òöêõåg*³LϹ%zÀ8€z.–är¿,FU±ó¿?Œ7ôhòô±ÑÛ¿DÝHoê¯ ÖΖ¥oÎàf¤ö¬‹Ÿt ˜¾–ÕcÝ¾Ž¸Îž`ËùBæ±Ôª¸Rü¯Øîu ñçõ?è€d4J:N¡FhЂ 'jµZm>$ôj‡Í–:™HaNŸ"ÇÃrv-œõ›|÷Í•“ÞW@¡ÊÑ‚؈^r©%Ð0âÑݲK›óñ­²îlY2<2nÃÅb&áI[äÚƒê1Xºõò ‘=¬zãKÈä±#R`]Rç2ÂÊ—å/¦¼„Ðäfü$jë¡O–¤ä±Â±ð 2-¿R to–U#žúbD¬àn9¹~§B€ „¹óÝRiDû~@ð€Bp4NuöñÈ B‘#Уƒ~™†‘¿pü>,×û­íbÄå'³s|ƒ¤ˆ“xö mwô²ï`«ðx±1çŒ$-ô‘Õ3Òyò `»æŸ|Gd!cÿ*a(Æ[©K ÇZ/…[5þØ?þ¯0Dª=9›rkûÞ­4ÌÄÎì¶9Øè,ùm'Õ &àb4LŠ¢úÆ„y ÚÄ-E£ò囿ÏÂ’Ÿ…!µ\ŽH¥^xAºŽßÜ€Ÿž eã@ªÞÞÀ³õ &z†9kƒ×c -Û*Ûý°½ãdXqMÚ×Wý~°br™’.q6¼1ž>†»¬B øßþVc ƒÇ¾=ï?²W é0êl#Öú0>†”àF2twM'Z¾@Ìvk ö_;~Eßs[€:8@ŽpH%þ \]¯ZŸÓ`h²2/£ Ö¿Âñ¬¤”3Özb`zæÂü mŸ™AhÜB´I—5ðÜRÆÆ€äR‹Êù‘;‚è§ðímO@m·®çF <|ú ¶Ž74³èyú¹ðrí)hjØ—ú4VJQ±ÂŸ´•»^þµ·¹Ùº+µ}ÃLí("‘ÞSª•]ÆÖ^t±š±Ô~J–àKçÛ&§ˆÄ·°öÖd›“mõ×o/œ³#%ŠÙֵѥÂgm›£· UfôŒÚB’ˆ._# ª%Ôsº¬_)ZA:›Ùx íÒZ—µ’`¼d'ž}6â¦aîm€øôy ƒ28”£ C²Wòå^HCtÛž>Fù_‰Å;‡+§ÉSÂù]f6 Öy+?¬Ö8BÍ3¤ å*zÈCuøÑºQ½¿ðbüm>~„»µÂY?¬›fj¿ÈñT¼¯ ¿0¿onΠl¹Á½Ü£;°ák„`o=Y«ó¯ ÙéS”æMyí:wš'ˆËQï®» yŒ¢OE¦Ë¼7ªÕzšX„žDº=Ï‘ëÒ`-Ž•(JÓÇ L[kÔÓ^n g;`!~-ñëß©§éûÏ+ÕCÝ&™*S—Éx'ÕÁG°üôãÙÞôÓÓ‘‚”åëtôHÍk‡Ad’€÷zJÀ •ï,Œ2¨ÒDÉ¿LxÔ͉(„‘ŽÐÈg;ÖõCIÁÖî-œBÙøûo?³ª‚“ËEùœ¨÷ z8|YÓ]|øsßßPu÷9‡7n7Û¸á­R-®¦ç.î`nýßd:.×Õ_à‚Èh.–’NZE2 ™8tñww ¨WÃ;GÛ¼¼éäZgkšV_½³¾°Ÿ]Mů]ˆxa]c‰â³Ww§F0$3|óÞ³A íd%2|Z Ç{î®ÚÒRL?í ¸@ýË7¬…Æø0›¨ì¥Õ›¢p÷Ô¾v?ÍÂ?*Ûòme]ö ê Z=¸«ÕØÄý˵2žfìq ìLMHè(ìÚ@z ÑÿvÖÏ»>!{è„ÄÅźûÍ^Ewdëþƒd´·ÖëÒ70/±K¨7×–mNœºKli š@–6°¿÷7M¿ý£y€|–Ð)ÛÏZšˆ¶ï¥Ûçí£®â…=®úã”$ª(»ùõ*¦ø•zv\Šª‚Õþÿ‡™ÂÉq¸Rêå»*vTÿ7g^Ž’mT$­ Ûu³( êxº ³ã“U˺Ñ’Œ9Ù´}U5È2â†éIê ÀuQA¶,#ôª‰¢"ÊäqK G:έ—£y%<µÿ$·ãE‰<ë•yÕþŠ’xP?ÃÍÛ|È:yyX‹1%Ã$êœ$ëÞŸrÍzÁhœØQÃKf¿oµÎ—@ÔXÚP+6üÊßwùSÇw蕱wQ÷>hwŽð/Ȳ4† k«ÖrTÙ‚µ¼ò§%¯·W îò -Âej]¦#Û ¯{7`ò·Øñe •ØŒçn*r,8êQ[»tŒæAà×Âó¸ß{0Ïìaç/<ÑlSÀå„‚ 0UÁ‰– k¿£ð’ë}_OWù3tôT‚¬8j«'G+>—À k¾b9vÁÓæT¢ŸŒç6ý¢Kò6RI$’I$’I$’I%€·áŸKA8Ô6ªopð+ãD'¨=˜-ýôM׃fñåØÏy×)ï`=ߘZÈ;Ô)¥œV¸#c¿Ò%T oìŒ@3)É>äf]Î/as“ôé`ò.tÍ à ¯žH!ˆ‚&’³ÚÌ,xs ãG™Xí¾SBù†j º…J>Ý$Ü>3¢¼‘ËK¶±·hó×nÉÑÑ]Ä6AW8€½tvL±)ïÜH ½I*³öÖµW†߃_lh­^e£ ˆþ}\jØË(’!쟊•.­qYÀ;Ä3ÒÜÔp²éLÈ:ûÙÅѼkܘzÛØÇ¼’U›pùmˆ3ž? }•èº|Þ‰aæ,ÈŽ•õÓÄŒ¤esótwÍÅI Þa:ÁïO«—ÿ0s=‹M‡´ƒ1L*ÈFXÖœÙXø11ûª.ù¾iŒÈÆ@­{þQp@ÜŠ>($%0—ºO÷]Ðâébòy-&]×ÏáÁÐ@iû$17ˆVj(œ÷½Uñ™ÊS#éõÌ¥7M=‚c×LNÝO•Éü-Üt§¥¼×_?¼ÊM²O†ŽcÞÔÞÎöK=Éfä’I$’I$’I$’I¼t‰+æQ;·6³ùm‰V~n¡%˜0µA¡++Ç«|·5¾EÈŽU9žL+ÃûGÝ=Ý ;Ô÷0í©¦ É(͙֪1×½û5ËP²È­|"×úêA·ûÏ«7´n¹*pœÿJò¬ÉüI¶”Œ{j×Qس™®õwùøã6Á_ºÒÑaEÙÅÅ(þ¹üZ_v…—±7ÐCnÒXF¢ƒXÔ èÞ˜\fP× Â›v‘ƒå7-u㊠h{Ùδ7ˆ2ÔŸÄ7G—¦Lé5´p£ÆžU5Júܳœ¬ØA7ûïHŒ!âÎ `™ØjféMÙ»»“: ˆžd£~åà/}ªTÅœ«¸Õje¡!Xš¬9×ãœýñ'k¡ÍƒÜ(Δ Çt”KŽÔ ¶åLû׿² ¡[n…ÿ„1{½_ ”„oæTwUЙ³éÓÛq(…¯®3’ÕJ-”.¤à2úˆÛiƒqùi´ý]|°[|PçïÝõ,œŽmÓ®6(pÁò¨ƒœ»˜Ë#ÓN!ÿMǯ} uÇ—\¬.E#Q•´í³8ì¡:)Á&ã\Ëþlö‰ˆÉ6°»RkeûÄòòß`†lE Ü.2ëeÁîóK/ v,þ| žßï¤ó°^ ó`ñ2ý\rèÚw0ÖÀ%ä+èGÐjcÄ$€.õ Rå´]qÌ®`[5…0µðÐØâ?x>U¹åÑõ?j)ñ\?ˆjø†ƒ(Ô(õ‹ào¿IHk0Þ j"95úùB¹*¢Ñd\Y±G"%d½ÚÒó.iœ*XÍ;Y/õêäàkÇ5‹ëÞ DYÐÁ´Jóü¯³hiL6ÅruÉÇÞT"’¶suºª¿²ÖN>¸(«qH—M™å¸3NHͱœÉ³"sã4˜6'õœ¯à :,î”óèèû¨±H§·uÅX!ÎE'ôªÞÔÕÃIeWŒÄ]¢¿ëou5ë_¾Îv݈3ea¿Ó­°8rK 0*Â.•3 …ws·Ž}ýEÌX„‘P«òR•›DýÖႼ¨()Z`!—µ41¼ ëïbÿÁØsî¼?Õ60ðû`©æt6Þ×=·“v âÑn°È ®Byº9ÍõÈDXÿTxœ] Cgˆ#Ì&kü‡Ë*<*Zbc–‚L Ë .Ý]/;Óà4ÇÛè¿?Exü;p³ôØ2ѯeVÓƒ0B("k'mH {dó8Õšæ¹.8Pó"ÏZwÕp1ðqŠ2àwëo‚y#þ6pƸÍà9>±»±Wú@ÿ8?Z¯gvû‰Sݬ‡O§ñ7©˜Y_¶ NI‹`@‘I亴à¡fâùãscVÚÿÿwl×›ÉqMµèÐPgô'#!v£nµWëÍÌ”oã‡"1¡Ó)„Ø~³©Ó2Í뮓îÂüPT6F£:£c–²ù-ŠlÈÎpßÔ¢®\ËZõ¦×˶õæ;óÅÆÅlr#-”ëÏõX G*EÃïÕp{s([Sqô{]Z,¤ít¾+¾ ìŽ •& 6ËÆä·OF7š)á½'ûðÆÊûr¾ƒØE¸X»wêqt@JœÓ,\]Áñá!myýÈIÍ=ýÃòp'=žq ­‡\ÓkÁéè¦ÀÝ1ñDmþ~-á•1›ýÿ ”«éW„ Jßü$l7éò_Éî°_­¯V¥3õ–½ýõ¾"[™Á ~xÌo:öÅÑÉÀ>µ £ÆÊW–´`â~`–6Œ[Ý,¹>ä–«âÁ‰?/ë·ÁœÙÖ#ܵÙX*¢r;ÚÒ‘•gâp̉ŒaÃÙ¡Z@ΓíÕ(‹ªXD-…|©AF‡TTFu0LmÊí3ùSsöOuByÿ#ù”zäyçÖc—ñ¹&Dò±fûšÌ½÷0䘂‡ÒX#¿xȇ-0üF&âq¤pÆxÆõ×dßðœžKþpU-æ« -À+¢ŽçýÐÎÔØò“¹éßß8„tŒÚí}†d¸NÍÜÜÅŒc\K=d&`åøa xÑ:šþ¼6)Óä™9®±É-^;2kj­%‹…Z_§©Ê朓‹™¶~Åg-w«âþlël²ÇûÓaà9¥Ñæ+´Dgše©ðå¡’xeUÙºE‰½”Z ÄñÒ‘‚ΰžõ φñK/0Ð:á%¦n€ÊP_yPmH\µÏµ$ˆ¹’x³'sÈó*]öËnxÿtd†½eO­à #¡ØóÔ W”ó¸!šQ=}"Ãx9ð/µ’½˜ÿ~³ÛD Éû¤ï›7*Á·üQ¿ìî_fQ&6Ý’G hXR¼›HbawûÙÿcjÍû(W`$‰PmrɘÄv*t}(‡=2o‚öÿmñÞ 4ÁÞçS;özj;‘ k "6Ýè͉İM+øèÏ>nwÃ/T„#ŠŠCâqb ÕùYî &ÝOj¤Bò}?쪴ê”ç´§Ê爵Ö4F¿b«øG«ü[>DˆkM„rW!ªÄØ•¥À9ÑxÊ­c“ì—hú™3 sÊú&jÄIº¶«žì; +j‡,QgTz ýìx]-ÖFl‰ –¢ðŒ²ßK»cÿM̈ŠS" bd€ÉüRäÚcƒÏ¢øPogú=S>Ô¦+ÿ1F~H¼Î”íÐj›ÉÛ£ôÆ2íqpÜê¶¥¿Ä»·°²"¨Hmÿ*^dïàwIÛš*U"fÒ -“Ôöàa;f]2ãÌ '~±[·DC­nÇïèu‚ÉPÅÆÃ8á²î6qÚ#¸Bâ%2Æ™Â/DUQ'-4-kmŽxÎ] %ø©ˆÚæŸÞzŸ]ë:Z£V»%OsµÉÑ×gv°¾,ÿmã±ÎÖÕBGcRú3^°å4W;XÀoÐÜ.×d9B\¬7üØÏ“ëÑJ¹xÃÍÊëÌx¾iM[H¯iR”¥)JR”¥)G?– ü¨EÕšmyØl¥H?ךÑá•ñЊ á'ñl.¶(N­ÿQÆZiE=O™¬lÚ´ÔSoÇìMBÞ%ë”?ú@“;œ:30‚-ý„ªTÑuÅÖÁ¹Y^ ¢ýTÞ60Â-Õf˜0Å8èÑ™[%¥Ãù×AVPRVa‡Ù¦>i¦W*ÇÕ ëËs+*n çͧÃ9¹%Lzþ)€gE£XlÑ œŽÔZ!îÛpíÝ æ·“÷”bc<¨+Û’I$’I$’I$’I$<óKOGkŸ°ˆˆˆ‡“V`é!Íp‘ŽÄ7 ðú¡ éŠth`Tæy¼gk¢á q‰¸šPm$ "»Éþ'ËM¤ÀÂóc=Ä7ã07pH¯Ö {eú×ÀTzrؾ ‡îŒ;6ïBcyÜdÓílØô@g¯LæÞ‘úO`<ŠWµ ÙÊ|•öŸe ÌDY0ÿå«}ÔKLo3b4Ýc yE2¿·©ê׿ãæ@Ã6K!õ Ìw‘ŒZ©d¸ÿeòtnúµ[ÖïÙÌkÜ鉞"uÉÐÍð5 bG8ªÂÞûÆÀVˆÏê"j’õß•;…_T˜®Ey¸aœÀóÎIÔWþÇŒ6Èëks¾Dj?z ørI$’I$’I$’GÉM[ÒjΟË")hhÕ'#·ØaohÄ㤿Æ(÷pœ{µFåß5°› ©…ϵöDÊo7 ™Ëö|uÁ=(·<‡œkªXæß¼|ñ²«ùÃO-X Õiv;!$F–?3’{f#SJl'Ø}¨ºe‘)·Ø„"æo`‡e‘™ýÖ`á?w›;›Þïé;´e ©Ý“Ѫâ|®Úßd¦ÇÿGáÞgóßÝh؈äwh ºÑÅɪ-r)ZAFƒ¦`£îhãj ÄÙšOAgT¸mšÚ ?p€¯1…© ~Yž„ é,N•„ x ™­ Å‹qÄØOi_kVaÙ¼BüÑ@á2 ´L@J£.®ª›Ä*-“]y½wO mFBDeã}Çd›÷;÷ºu¶ºž"#ƒ2gØ&¥Q¸½nòWšÞ'íÒ=~‘ÎÞD%š&û£¼ÄÅØÝ7 ß"fö:•ÌÄ ÚFAw†át`aщ"€„p\QmfoH ŽI|‰$}LüK¯UÖx^@~ÐSã àª_([¬¨‡^#Ç(Àu¦Û–æHÙ`Ñû/…²P~Äï”ã€áÛ“o8“‹”-w°w:¤çÀçæÂ‘a}955ÍT'›*äN9§iŒèhØôÏ2Mw늱MÀ!þ6:12: ó܉/oä"®GÉ:xB™îé#çŬ<ükj"æššìøS£¯vàÊÈ8‘Ù]¢/›†¡2·Ÿ¦ôƒÙ–ΓÄupÈüPJB–¾¡¬¥ãFѤèƒb'› …˜ÆüÂÄö(#zÜ[){ãV×?t¨°Åh™#ygR޵GS¥cÀ9(b*%úB;ô¯[÷2ÃÁwås@Ý‹œl†!y’­Üfþ”¡:'÷ &€¡%þ'½¢xd8ÀöY¨mòŒÕ–ãkªj¥(´8ßvûç¥Ãôd’`¼à1V‡fš}ñèµùùò*ùñ‡Õu âûö¾Ù’ÓhLWL7â”d?´/ÄÚÍt¬º 0—¦LZh­bÆZ¶Ñ•è0L•/|iÆ«Ýѽ. ÚJ,ÙÃKð¢f&]ã¼½€½Ü÷¾Q½+±- Êß‘Œ4Чv‚x&v-ßA¸ü;vôùK þ5‹ˆ˜©ü»Os£[jŠ@Bi¼÷§hYÉ%i˜_>»Ãµ…d_:°=IÌæ)k|I¶š¨¼c¯ÊpÆžR}3 ¯ÇB¬+ýÎÉ«H§L¬˜0YŸÆbMþ0Qôö÷;(ùw[ÚÑx7†vÓ¥öR“@^¨«É£6ø^$ÿ: þoÒôê¼.ŽªuhówQv555³ø¯T/­0e4RìвR…W]¿L‰¿\ÏÂÜP7º+©×4¯pÚBó‡_xõäϾ¢°º¼`Ä‘Ç'”4u½¦)eää^Ú·ð„ˆÑ­¶ô3g˜4ŸÎÖÂý¢ÔhíÝ2ç¹¶Ž/¬° ׉B,×2¨÷ñŽŽê#y]¡Þ‡õWvÄ ¤mÈG àª?r«Íê7Ók kZâW”ÓH¥ÃˆR*LSÄGâ~—7sÂìIM–ŽƒPK\Êè逳Sx²©»æ¯¶È—•&}¥Bø>2–äÖ`N$dñYÕ›rZJÆe­!ê)`ÙÉfìv¬H¡¯ó—[ÇTpNÅiIeÇ<Ã(q©ï«$3z(OÈüçÂYЇ½ÔàÞ§Ï9+Ã{B ˆ¥–Ü*úS4 n­ñqö¯®Ø¨û1C Ï80^30aªPeU@Y þöæ©ûà­åW2‚€Ò+ç!e,xKKô¸Wl›Sà]2ŠìvÙZ­öù¡³S ИøéJ6ç@ʉʽ4Ž JÎ]¾QUay8D”ú“}н …xÇ 3kèòɨís'.ˆÜ|ƒ Ø'õ|Ž;~;¼ô–¡6÷-8Á`xè3¾êv¤4¸ò*~0Æ:Îà¶²¿ÝAªf܉­ñê›S '½®üƒ ÆÓ×]V«@ûâ¯>-Ieq…«F»¦,ê,° ‡²½jíxRúå“Úu™_2W< ^«Ù2på¹Õ°e²Wc Ä+ÁI)Ô‹J€â/Óé#`|Ñ%*çd*ræhl ¯X Ãýí›L¬˜8‘žö€¹á“›Ç ð³ N¤7¨Ê‘¨Š¶I©Þi‚×+æ­ÙÂ3ÆM©zµÊøslWnjMâIñ¹¿ùºf1'@žõù¯è~‹ðØ[¸ªì*}»”/:îúl¥ ˜Êyþ"˜`Û79(ê7M‡›Æ>ôX…¤ãi`¥ø¹l,*\íM„Ìaäç ®MÒXSËû§ŸYíó"ÌÏ pŠÕCV†\ÞrJ•5<áέ¼Càö­wÃêtsfÆ×$ž¯(\ÔÙK…ƒ«c·¨Ð!~ß»(©?ÐïEÙŸáÖ†èƒV Þ·…%GmVþ1Pê¸è숟… ä¯,jæø,§¢LA&I˜¸è­ò 6­ÈúÛe¤#¨ô^ß·’d¿áë@ψ—çüm¿ÂMůd:á]OšZK‚Pôm1÷@C»0‰ùh¤e@P0wMpr):cÿ|½Ú‚ªYJÕ:ãÿmô%A€ô'v`Ýt¸’¡Äå Ȩ¤yÑsƒÏÝü»áK‚ …© ,ö8Û}½iÐ"¹Õ£a‘Kñž])±<°v~Ô8Ö°âì%™õÍÏúðTâȾ­4ïõCØÈ–[a‰ÕsÒ™ïÃ'AèCÿHFÔó$ OÂÑ”^ÄÇÁ@¿gj ÖW¤’ïw®)‰S5S™pžO•‰ˆ(ˆÖˆe «°ì{Ùk.(çÜ/( –®ÿ)Tßp’ÜŒC/ò=¶Q4ÿZh¡.Ê: °—!´60 e¸¬Bð€ö=¯‰ñ¯£ðªnT§,ÑZÞY]g#ÚSý-(¼éÃK C€…íj޾Žþ @p¥ƒ°µI„õÞà’m6Ô ¥XR[¸×ÝBn?Ë^[ê·ÝŽš¿¹Æ¥TÌȜϙŒ‡ou€çá"Kka‚YG&_È—ë)@ éÎ*wø#×ÞìÒ ž’ÞÐE @fåïi;¸P–C¶˜÷³hE515CD_kç¤ì i/“ľXCïb_¸ß ÿ`‚ ¦V>Å»¯½!=KW°jßX¾ñ9ØEÛÎÍ'¾;´ÌÈJ¬}.! šN×CuBV%ŠÃ¢¹Ü;—œuòÚXÖ2F×'aÍÌy™O`z.Â!Š‚äž£]TÍlÔÙGqŸæ¬ŒªX*/@²Q 3ŸaÏ´£BB,%?{¨+8v𑢪µ<' 8ÆÝšê™XÇCx×°4q„cª®q%¾uvÁðY²á”’ŽíF«I«•8ñü×>œ×ÁZ 4eå徜ðÚÝ þlšèl¿I9èZˆx÷Å­GLù9ìÅ*‚ЕwÌìÂê¬i_óÝz ;WåÎh€“O’wE•_Ÿ·á¡hŠüûÿ}µ‰‹X¬®_±@ˆ7ò¿+Ømžãå@nEœÎi›ÌSXÞ‚Ûâî ¦šÝ_Ú'ÚÇv“áýýݸ{GqÔ¢ÎôP#ÐQìæØ0„ø¦ëÉïïêóXç w‹¦Rž-„·lqçßZoCJ"±2HÿH#ÛQcþwŽq/W¢°ÝƸ«W/ßÇß"žÁ÷—Å竉0Kn±PŠö:NC6fg>W#—þ>zÙg×k‘vQ'ÐêËõ¼X©¹Õ—Ù¢êQþ®1§´sž¸²ç@¦ÃҊ,î×0eQ)“À±Í¦Ž 5æ¥`ë+¤i&iôë圀;^¥ˆм²­ *ÕÓþÌ´_Ü282Ü»O ¸ãqyQ³Å$†w¡?CMaÞÞ%\^öÐÞo±¨+…Œ]yeZw©Ç,ó~ÿyzI–Fcÿt[_¸êqãÐ6Ƚ¶©¿ltúp€èúÊn…i«“%´6è¨=)Aìkò2âXV+µá­x‡¢Ó¥ôS@Ùúû@dØf^Y.Û7šO¡o?•ÕôÓ­¦¨ÓI}‹Þh§dß-™Þøßû1/ÞýíëQÍŒ¼€ 7Zàk̉M¥ÌLy>(Å 'RSˆ¿Á’y ‚}ôö·ßÇk¢P„'û’ôìÊl“ýèfT‡ØwRÓzwˆhõ]‚é6¼º«¬‹€°@:ð^kwÜ<ᴜ•·o ƒÔ¬†Üå½á7zo.¥˜Ï#–•#ã&îÎÖI ˜“BáöF¿Àµb÷]GÞØnºX¹¸K eù"1VlIB«, Ýí¡îí©iûz‘î*‚Mxˆ*ŠÂðºhnÌÅL¦F«^GNž|Åœ-ºDM bË ÁpÛwÔéOAhISŒ¾68‘†iºÏ;d :¶Qªõ÷Zúî^|}õÖÄö0mqv£|ÒútÈu&±³2’k¥{¬÷çåLkçehøÄãà¡[µG·uýþñÌfÓÖ-–$!#¯ÿ.M[$ «’ɺíÛ=#”{h§&Ćü]5¥]®e×"’jr¦³G¼2þ–¬åÄ5ÎÊ—D˜•5âè.”4ôô›Ë7 ­£‚]tØØuÜ•cSÊ-P}(Úö.¯±³£±eHzlò£½É*É9kÚR³´ˆƒF<‘ö€ÍÔò{{ÏpVˆ5€ ÇÏ{³O½m¯ggaÌg¦DÛç* Ù ã‡êÕy±?d$šjÏ/Ö%åaÞ€¢W©š<ì€7}#2=lÒ™»K †ƒðÒñ»eø0¸Ï‰îå4N6QÉòwñó«ÊtY‚6ó_ϔﹿ¢ÌÈo⢫§½*rÞgWZu9â´ Ú*ÓG;B…`LB':i® M¹³¨ 0z:ѬÙE¿ Ÿ07æ½¼ÉmŽ>ÌËk¾üˆ¦"Í ¨G=PbJ‰gðË¥•¯úyݳaF¯ÏÃQgá¥1øV ÍÛ3‰j•=2Ȥ§«— 8Ò"©rõ1!¸fÖ5óó|ß7Íó|ß7Íú7p8+9³aôÔÜT„,+©ø|ß7Íó|ß7Íó}4™+×ßNñÐ_wÁ?ÿzœ^ÕÝ䊅ŠVZ¸1Ý|ß7Íó|ß7ζ)[­’æt{.½ |‹º²Y$äŒÿü° àÄ8MXãLDn#SNU0²?NÒÉàý…–=R8mÆé±ƒÏÎu@P\S-¸È*öÛ%à ]‰£™É¼o ¤ŠÛÏ)Ž$0¿‘2 Ñ[îS·Ü§o¹Nßr¾å;}ÊvÎŒÔëgÈáéÿ[½½ýaq:½Ý”ð5’_v/ÿ`ïL¥I¿,n÷†q¤::’>ÿiœ‘~—Ê~ æ"\Y?v½áýu„="ZÙI\· f ôßl]Eý³’ÃG¹3…0è_ÙvÅLjˆÊ“ÏȬñóÃ@ŸÊ`Cuvá…Èö?'?£) ~•Pè3 6=­\7®ojãû6XÛãtaÕ2ó ãVÎMÕOÜvfÊÿ}¡Aâ Îw x.Ñ É¶§ÝgͲhp¬#[·Rm.Ü€kVIE¬¤¯ÿwmØè»‘Ìó2+Uî(&¼«"×#¹/%˜÷-—"XW{]{hÝó2=þ«wâEH ;L÷‚Ux…Ѳ„ܤ‹¤RO|ˆˆ²œÿRz— B¤ÚfS[¼˜Ó+*þuåšÉ1 U…=Ç"“â»b/­ÚĆþGuÚ‡ð–HÝ‹«ŠËV'ÒýaCÞå‡6ó2މ)$’I$’I$&0ßµFàátõ $¤Z?/¤:úŠ Bì©“T_ïêîÁV•Í1@TFBo¢ÿ/5o¢O@S¶@pzÓLö»VFWoÌq×Î!»Îs¡„ƒ˜ÿJ0‚P~¢BÅ~.–µ[3\ó=);KÌt¥#RfÛd‡‚ èw&¡Ã’ @æjb7Èøüúg¶éàÞ »¹½ä,ö ¸a´Y²Õþª‰ ÖºàX·(Éç%A«hHÔáà.ÝããöØ¿·¨ÛÔçíèß¶Áý½1þÞ©oJX~×oÛÑíè«öíàä% Û¬a^¦“ë¯Wz…ÂÖË)\›oð @ €1J…¬È VÐ̈ò{$*Á€2QÏ3¾o †Ö媉\AÀ$ÊÒE+a6cZ0ös¾ÈwÈÄÃMLlyG.2Äœ/}9&L^uk¤Ø Âs‚`d³kný„Rþ«S!’bµ»ÿVAЬûuA}šD§wþæË¯îˆøñúnµ7ÖšY,Õü@ Yµ?v&~½?lÍzœVÜ~ij’ç ƒ‰ñ,’AÅu‹‚2-7ŒÜuŸîI'×ôX¨êö/4à¸ÇØ‘OÁ0¸ØÁÐÒtgé@})cqœHY>GÃ:¯ï¥Èÿ> Hgße¿‚Øp-L*H;Çéyg3¬xhÆ;}q%Ñ¡JXl¦’ F¥8;šöbÜúÉÕ¢»àˆZ¬,ÀSXñxÊyšEÁ“uTÛô¯ñâíÓû™5ð‘;0 »`ÏmÇÖp¸#úc§™‚.é{ ˆ@¬•è[6*z·°ïaǵ¤4éÍ|ÅË\¥‹‚B†gwÁìÁ!h=˜ãçâ±xŠÈÍ…cÿ~þ3A7ïÆd$ƒ‚‡Ç‚ú¾/*eþŸP–Áê–%|“Ó™|üž‰p ®éòqu§Ýqa 9ŠÊÈ8X0»¦š‘G©!Ú2òxýu;/^Ö›åbnx0Í—_ÿS 2žleR×\ùÏ\™Ð#bQ-²ŽÒ™9R—ÄJah¾Ì%ô-B°1ˆo¾{&·1¡óžfǵ½¨EÐS 궤õdi½Œ3p±*egþ÷Oùâ˱%¾ ÛÙèê´e)®õç¢B⣤âÖqKÜ¡JCryîÎÓM#;Z€t«Hú  úU«ì8-d³jËýâ°¤×5½¤ËÎŽfŸß¿+ôÿC§}‘©i!ÎyCØðÿ¯¼\%Ø~|ùO„lžÁ†T‰’¿®«LÅ´Žïþ)F¡–R´óÈmÝd‚à?Žˆ©cÕîì¾DzÔìùÙà2¢¡r[Ï¿óV‘N+ûÍ/ëL…UzJnÌe9`Òê' š./¿G ñ·QpàóFÒˆûzí¢OTØJâË…¶5ÀÜWžS lÔÆ,yG¨Å\‡6Iƒ¿Îø+ûÃôFÛ‹ ¿—™¬nL5æ9ªŠDroœ¼'S]ÁXöFM² ·i’B°#âsЦ³àÞí¢%’ë `€ž iuA!EaK/1šˆÂÊœï€ÉºøTî8ùPøŒ_\1‚Ÿ Û˜ÁvÒE)%déTH1ºÒÕ]›õ u$T}ze‘±õ¡î1é™I1aÕ­Á‘-‘f!°¬&Æc®ο) ÙûÖ¦¹4kû4…î"µ9„Ø1y—4ò4oÞ^Ý83~ß#nZR<ˆ„OR%Lç\íSÔgç&Q@U#²ØÁèuS@ªÓ=òw}gh2º$Àl‡zzTjê0®x8ïwhlŠÔõÞ>de'šÍÙ{|FMJ®[@?,ØåÁ4 ô`¢4¯·´}xÉ).÷n·xSý«²I]`h'Š´’oNrèqt' ¥îDC¥Õ£ ÂÅ‘G£MžŒ´„÷³.Í£ Ó+“ïA;kµ@”L¢zñIñÖ”ƒ †'¹[zÉl;jÙÅ~Ó¼”ÿ€.)G$bª›#ç·Ë: êªv*ûX6Jl¹ˆÕâI82¯Î’²¿}û‘áš|*MÀ÷Ãå½4Ye™2ò³Îèå8U‹ê! Sç-<MyHW5˜8¶»âTü“ìçL„.t‰ñ¬²ÍâÙKƒšƒõ£¤ë6ø}òóLüG:–ªu·±qu+h=~­ Ôïª;xS‡©wí Hàý†KkpÝè¤cX¯Æ^ˆˆ2¬‰Ö±·%HÐjê¬ìýŸÍÉ`¯¯#FßÄÔƃ¤k‘…›´ ½r<4ŸŒå°¹Ô-8Ðy^%: €öþ ùÁ†jŽºaáèøÒï"?IV«ß³&c¡­Tc=z×À~jÃHðºý„·VÅ PóÄZÊéwCyÎó?òn[ÇŸÀ $ X)$c }0|•yðHˆ­§%aiF†‚`IhN'·ý±2hWdÄ^”òË4T¼Ò§ü5Þ ªÀÂA(¬ƒJyÏç¢P‡8f@Pªûë2C#§Qoþ×7Z¹a¯xÃNwÚ!{A<²húj[xX‘{ô<Ì€sÙ†µÏJ?´®žª7büq…g˜váûì,³Ð_MªG4‘¤\øvá>b=àÎÿk—Mî¼È_ëû›ý"¸’ú‰ƒv“>ÑŒo;%ìïÜ_‘n+v2… Д¤=Š’hÎî8úƒ5‰dÓg¶Z¨ÖÜh—V€=?i§gÇSdûŸ…‰I¬â:hÄ„~ŠuË€a H˜†QWúÓç÷0rš³VUÐ&ÍjF¤{ÞúÞ³„È!Zǂٶ„\*18™±Ð‰ì$‰ÀSú_ƒå`ˆ«f9ŽLz4§‹·‹g€ðݹ¯cd!à¥xôÂ{o#!Ö×îh¯;‚HÕí3ć7÷ôo~P=Y’QÊŸÜ+‘"ê ­ÍÛ'ŸÒšÃæÓ„%ÞÞð­–äaŽ´ÊœIl5ALÊÞ¡ÖG¢‡/ÈÕ2Ù ¦ %\ϦƦ|c3jEUÖåùróá»fv¡·±ï\ DJþ.—ÍʱÞ\o'/‡-B³$äIÁUQ>} Ç:¿=I—alþÍMë[¯ób`£ó—NíìYÃî°¼òÏK9$FA^¢Z¡Šª+qRϰxÇ…Ô@~1êÕ"F–jã-î²4¡\ÿ8»Zô¡CÃ9¾U¤§0“¹•czº'=ëKþšÑõjßécy$Ü-H¤£š¥c¡järÈzK¢1·˜o~êrñžyþý6¡èìnê“"][È,ùPY¨GÖŒKñó•"Z¾)‘}Þn†ÖÕ©œ_夼ëÌz¹’ƒ.{s£x¡ÐÛãfPp«U Wy“ÕšÁ÷›DJãà4ï eBÛN|Uaà`:&Še›¬3Ü*Ó¦hÚ¯é¬_ŸÑ]ÔyÙÉî¶4GAÓ÷†y:Izï!.Fˆ¾mlò¦‚Û+4WÁ˜SpYÎÚj˜€Ff  8üBà˜’¼²#ký˜y½êQçÀaàw`Ôôæ¯^d¢ˆ­åòêTlãÑp.'¡Å 84ð5 ÛÁ8§O’ðÑ@Wë–N@žZŠ¿ËL§a:IˆZ49¯î¡wTú7íjôÄ”ž;ôrµŽ†·‡±‰MD+ÈöjP”Á*Œ˜¢¡éRmÉ0ÜÚ–Ò^ɳòZT¦!‹r˜(nN=»Ô¯JÚXáÚÛ°©%Œáßî×£# þ‚Í(ÏŒº˜íÀQ<ÐOmêõ½M$[š¯<=N»+nr´-^E”¯÷ÔR5Õ+ËmU+µUØnæ«…ßùÛ±x(n˜b‘Ý¥_ðð£,ä(“+à1h\J87td2×›.¾6LmŽ7ÆŸ>”X7W*Í’¥“Ü}(H7×’y«›Iï›m±ßáÀÿÐzT‡2¦(_‡—;ø£bañ7EJFîl×ÖÙì²_#-¬L<¸ÞÖHauU;ùXŠpD "àpÀám%8È'¦E“!Ñ4ÚÎ[+º{ݹmYXB²äoÁ[|a‹T(ÇâXò¶µ ÍÕ˜%ŒÌÈ7Ù‘¶ž^'‹ ©þøÑcýûе ¾Y;1Ñ÷Û •Œ{TEœËמߓ/c— Þ‰7H-WúüÙNe\×BàVr–Ø$‚ééÞHMІ.A˜IV2i¹{”/ ‹nýbÙ^Ñ ýs"P¿Ÿn‘\á7 c ûNöÙŒ•w ¢À4W¯úˆlq $1&É Ë®½xˆÀTWò8ô¤ü¬¦ë –]XcMtsþò”@-”ª¢ð¦¿üN`Q^L6©´¥¦ßO.Ý‚8Ö6ÛÇ¿ 𱨤H2z­E1Ìœ`“¢Ô®¨×XÖÿ]ìU>óì¤cÑŸq’îaU—lòÀ2¢¿%NúQ3!k U~ˆòE$×ÛPæë«<ŠŒg]G=×$ƒKÐãûÃD«Çð#m¹óŒCñRªYp%à`]µ; lC¸¥$!yÁscð߃èE½œJ~F˜Säú©´V‹}ˆUÈ»/ÎD‰Àx¯ø|œÛ²“Üz º>5~©Óøl2—Vð´€}«r¥{+?ʼnýÔ½òVAZ'$ƒ¨cz—Ï-ít–¶ÜþÄÌ.6—lþÒƒó²PŠXüJ«d2P…Œ¿¥$Ê’(öÀ ­ž^LêCó‡a¹ª:¦Dê"×°öýŒ3t>aŒyY‘‹9q3 ÓÝ9;_Y67y+D-Uè„­ô#º`vö¾*PT€{Ð#}ƒæînE½D؈$ÜDž^IЯ,e[N‹Ô [fO)í£C»äùY–š[KÊnO¹‚@W‹+WŽŽ"—8_í3#†Â>sl}ºBWuºdàŸ|Rcœ;£i q•a'¸ê H?޼[N#ÁWÆm¸ ÄïoÆ=`,¹*%­8léOÜä›KYûÐÓÖ¯<˜Ž~á6ÁFèx{2þT êßï!Ų3‡³ß\ ¥ÑbV3Ù½„Â~=æÏµ“²ý†Zzœ±× ²8Rõqë,ÓuøÑÆÎIUQ‚U4K­HÖCBß±^$c»Í‘̓òèc¥L=dÝôæÌƒ{$¯æüt.Ȥ»ž û\Wh¾#5äM£ñºü´A\(aŠÂ/žQÍñB„.ïüN7Žß.n R®J‚6‹(“BþneAÜã;«„þoi~ êÌHØ3òºè ÚZÎ7yÆ÷2tTLlBnÇØ¡n@{Û¯;Š˜ ŠÃV¾bÅ.èk‘wglf?Å8þý)¦7åÌÊÏÒ õðѸ>)QæKÊŒ®ê)>ŽÈÛfé׬Ñl¹ÛÊШîddæ×ïr¼1}dÑ÷uÌåŒ/¿j!â©ÌŸV| « ¹^B…“ö2íÝóηïã·Ì¢í&B½\1!UPßÀîHZ$J°ÇZ²æ)¡WÉYPðÑ¢ ö¿0Þ‰b¨ºÑ\Ó“ ^§¹^»›(É™­AlйÊÓ[PÇw$›‘B7 RL@nð²ß*zem2ÂÉ y¬2íˇå±0i ºË  ÿ!eÖ¨}^]´†0Ñ'íõ.$–ãuš –²§“¿E’hH˜aÞÑÁëâ÷t.ýâsòÀmÔúnoS˜l<óë ¨·²°ÿ ‚ ÃäÃŒÜô7⥦ٻ=m(\©qH³–K³‚ÆJ®ÛVÆ–£F$Â!m¬dOƒ¢ÇrkþïêŸ)x!tÒŠrZI…Î’T“G2&H‹¨Ÿ+æ‹t!œ4…EH0ð=ým‹Á¿ `°Û®B«’Ó±ÊjGIsqõÛÀ Ø­ç>$Œ=^ìjçD½—ú.â°HŽ…Ëfïüò€zVs)»3襲»¦Êœïk;°° ºÁ®gÉ«ŒI÷ÉŽê%/ ½~¬¦3ÕtÌ‹CX¡ó¼4•T!è¾PXøAºÛÝ YcdÔªEA#Hñ^¾°m:wmH9–‡o:we0#TæÌdåÚéùÓí©MiŒï†ràª>¶ìýŸCêÇÙ~©ÿ°¤ß £A¼ÛV‹d”òT½v>z¦ ÖšoÁ†jŽºaáèøêotÅ$nõ¾% ¢`‰ªýîÜ`Ân‹f">ÂЋªì—Èòa—éÑVì ã({*„Ô° iÖZ}~aWæJ%c¢oµ„¦ƒ…°$ 7´Åp mävyæ ÝD¤s¹Pä½î"K™¿–P½(κOiNRÄ5lŸ¨ÁÏ@+ÿz×p•…]1“0t¿‰Í¹ ·m—äpªc& uåWþ“Èqæ3Zÿm´[¥YÕêã4C€MÎdbﮞª7büq„Ø¢]R}±ÓŠ[=Ç» z¦ªMë ³âUw7‘(í 6ªÏzýŽˆìr„ _Q€˜ÑÈ‚ê8äZ¯~¹V;¯$þGÔÁ;•òçžV¬c‘ÂÈÿR&ÿ#+ i8 t³p¢î^ïn`;Vt7J;©šqŠ8²Ÿr’,ʉöÐôÀêÔA PÞÕçÜ3¤¨!|SsÍá%z¼ó21I\©¶À'Ɉ£¤er6æ^0¥Çÿ*ÁºžkâûÑbÝØWy’˜Ê¦9®„Ä -G´QÕ¾ç‡èÛgÓy¢ •#ÏÄ#3ËÔ¼o(lAËŒ\þØ‘L$b(Ÿ!­`l vñH±ó¹âÈ=}u¿9Z൩*üÉSøÿWõﯤ„’ùtZ,La£¿9¼ÚV%fôøÃC%`^£Ý–C’HÈÕÞ(¯½W½Õ@³ sž¶ˆbÅ@CŽblLdždöžÒeÀ‰ÆÄM¡¤‰Ò•“ÂSk®&ïæM³º¦¦¡uîKéå=”¤o,u…g ã@]ÿH®HÏKª2(ERZ @«b?n…ÞT­õÜÍž ·œzrK£pªI;2€%rÉØ-ŒRÔi"sG¹ñÂÌ,4ÓÆù¸ûz¥ÎD1µ1Ig¾2Òh²Ð§Wº–%b]7q¼—Á!ቬg]… ,ÝÙì£so5г GCAN§…*nË£\¥"~-FBÍôzXÕƒÚ ‚sÜzñµ ±” ¦üƒÑúq£†’Ó TÙ¼çµáwîœê>ìœ0çÈDŒ€Œ"þÔÀ2l'¶î¹>¨W–¡a!/{ü¼øu²Ëy‡GìGç.`Tû„ùhªFÀšp¼aúت‡ $ ®lß/Á¨Ñ_,Ë-ŠH?"I ¢Ì-m7çw£ñ{Z¾ÿˆ´›^vY§è‡àÁjÿ] ãbÞÓñ3q_Yµ–²_cÅÆip—¼nƒX½[È,ehÙú…îfÄ T‡À(bÜfO•‰8;¦Tñ‰ÙÌæ& ˜‡ûã) X¢$ìÌ•gí;&gÕULö9ýì é@x•ùA7‡Ç G®”>€ÝÎRá{yFuµN‰èÞhq&}×–·A2ÓÄC3LÈbãÅ*«àÍúé$ÚÌV=p óÎñôöþ7%ì…wE¯ˆ7ÑY‰Q‹!L™ò@éïùÝôó!ŸtQœTš©Îjj:«e  nQpE»Ì„+Q=ì"âPÍ“«|v *f¨#$hâëkR½æ¦“­Ö}ð^™åþK™ ¿œ«°í"—MrýŸ‡’ñ^(‡@a_ÓãÖûbÌS¼é¥.B¯´(?‹ÿ#ºä^çä¸áøÛ >Ü‘}¬£>µKU¾šû§ƒœVª(¼~)aÔ³o®J-\OøI5ë“ ÄÒÀæíÅÌB$wN EÖX#§×{½¨ÓÈÑQ»Þ¢Ê:¿UÀ`é;ŠJÍY2ÉþË%_5ïîB~­…‘ Zûpèƒÿz'®uƒ{ã Ô¸!Ñ—wØ›…)'t¦ÕÕ,üJ¿Atô eú¦ÿgÉrJ`ö÷sHHÀ–yÌûêIÎ/ïZ˜2qG„é7Ú™|Ín†Â+éT·¬TNXþE2¥ó7Áaä´âÇóõ™O Q‹…ô×ߘøFØïÐwÑo[eÊ@~7aOg̦õ YÛBŽÔ+géŒbÔ>΂øð<·ÞpÕ°×%iN)!/±ìÿ@ì=.Ý\‘:½³Í8M-ûóh]ª5œ5søÿ3ã—ÄŠh~‹8ÓÔÌj£ŸRáCY¸n c(sþýûDš°¸ó“€g³¸+úŠ¢¢(&ôw¶…öò¡„Kb¡GomÉM‘‹79ÙŸƒV›4œtRêú6®Èy×Oû°³nÈ£ˆ¢Ùw–XyñÇr`l³¹±Æb½\¥~…ñO ö¡ Ô`LÍ™¦ +R€|&êNæ–µ;9§b&ÈáHª4¹BÓ•Þ¦P¨ºúV3Õf-ˆŸ^®¤!vm ŠkDœúª† ò¥àÁ @)†VCÝ.⣫N«Mµ@˜O¹º²ÄgOÑ/’jßGÔu¦"øí|¦”¬1ÜTš•G$ì_kRµ÷†r p%ãœhÞ¬™#Ø7pW³ï`a~É:(~:y½Ó‰Û [a×%çBµ[çžuü³ôôEÉ‹K6ÉCÎn5ÚÌ2|׳òÍàªD yØòFZ¡Hy›Q÷\sX#„Œ¾bñð»Tâÿ:¨IÍÒx)¡¥èþ•ðöw Õ—|¿çô kd¾ªÉQ­ÅO5 ]ö«§èy "¤»˜±Žlzõv+2­Ð ÷QëφLס:Õ mÌ5®Çl˜9(¼[EV2EHÈ!¸÷jÄÅn.Ô-T©mhö¹‡ÔŠß6%ñ¬—Æù"g2Ò;m±Õ,‡)£IÁ `4îå Ø?DÐzT‡2ªëoç·ìö36™^¸Ø¨à•s¨Û¦)!ÈL±d¶ûbôš_ÆI1k¨°Ü¥‡ÄF¤¢zr:x± rgjSì´¡ªby½ïëqhXŽUyƒ›¢Eeú¸µ¢H€öa×HÞs«ªôFPù@/¤§Ù‘¶Ÿ½'É-É _l¡¤?†çÚYÜŽÐ#œfZß»DL' '5“JÀ˜—ÃÂÿBú´¨V¤ÆÄ6gä0œ›l¢º3D—X*#ýøüæ%Và?Ï9›Ö>ÕX/nÚ鞺ª;0t« ‹“šö>V†ôCò÷’f/úï8/r=²O%AaÆO E&U&öq¤õÕöDóòä‰T¨{B4ˆ½Îra2­Ö×Ñe»2BÃ6ZE.áÈUKݵºewÂùH”ÌúCëÕâz9EHZW«vMš ºÍ ¾+%H¬cQñf=uб+OCß;ÝœtC˜ÙÂÿhé}™v5<´®"’þ%þ ü’ÉužC|ÒˆO¤=Û &hmlL†ú䢹¦Ag 0f&ÊMhð±À3vLë(ÀPø÷noÃr‚pìÍ@AYé"œ€pXuô¦(}{šè@ÞXíÉvF›G†Ø_æÌã¶÷‚jþ;âBÒW3®ö}QÚûåY`1q§pAÞBèjbZÎ)¹À þ‡ZvU.Í]ü#§bÏ'>T=Üu/f·Ä’ónnz%é2/ÈͲƒ z""ÀIí¨xò¢\T~Cõ‚îÌÄtu1ügäߥ#‡ä;ãè…3‚Ãù"ý¤ˆ;.™Kª¹ë‚ƒç˜ÝmkÚâS‰4u°è¸4‰l KBˆ¬*´ìZéæ±Ý¾ŽQ.íEs©Ý_I²°6ÙÄ¡rÏ}žc&Wo&Ž¥=Ê€ªDø^Oo”. “z»zHâ7ØâÖý½ø®Q+F;„:4ʵ±Æ¾ä‚ )Ïp8 lÙ¼2±É_–cjQ~AÛF#Ó¶†áD`UꎷeKj.ÆýäžðÓÎÌvœÖöZ•3¬Wí•ÓÏ¢t²tÿ'Qoûm$“-ÈËÔ‡üä’ôB³œªš’cKë›ííMG‚ÙpÎoeé7Ô8Å_ÿç0ãî È}¾=’ ½^³œßTî`ÑÏ­ðt«ì8²ÖŸX”a¼01”IÒµ¬v]C…(ò0>¿ù½¨•Q³qv½w‹¡ap³ô½ºç*4ØûìqIË…ØÒÖþADó‰°l|Mõ˜v;¥NK}ÞvÆhÁRFFÅÌh¦›ûZ/7’&Òh˜å5MQóÛ]y9 %Š‘ƒ^•Œv;‚yüî”UåÆëÄ6xX'ê“>ºÈZï"DrïUe ¾eßj%·m®Û(!QŒ¾µ?wÎöI~Φ’¢=&¤ÖðLž’n±D"asâeDe9ÙÍÚ6»œÄgÎÛƒ ²9^⇙;PCPýÄë"Å9õ\6§¡R„Îc¨„ðë¥ÜÉ#["^úQòu#¬û0E¸ˆœÓ®Ž™Àú>£€€{ý½p•N½eŸï¥Ü|çÅJñ"˜l þ†òüº·>näR€ÉX6Rñ¤5†tCƒ6¬ Ëì«,ü~q+ôϘÆÅÞ\“ª‚æû\ž=ú§]ûâå÷› pŠò†ªØ¿ÿãö×_·¥/ÛÖ_íè³¶Ìý½-~Þ¯oHø~ÖÛ½_·¤ÏÛµ àgÍ#ï…ˆ÷µ0ûAáÖ;Z…,áD›¿­‘¦É{ÖøÌ%ºr‡=Œ6á Kݺ¼Ø ?xJ6}34òN Â^â`ÎÈ'mÌ—M¥Û‡Ö…àHF›£¥ûÙÝœªê\Ü¢3§ý Ö%¤¸NùäÁr$%ö+_ pj¸—iý©«Ñ^Êä½@È&IkKwÓº3»Üº\É¥¨=9&bºkÚà†“@%lÁÄ0|‹?†Éÿç ˆ18ë:žõ?ÿ©ØJ­„‚äóî™Ù¬»OÐÛúG µqÙ±ž‘ÔÈsýµ“(…Ê ”B¸Î„&}tÓ;§5Ú|Do_öõÇ‚Q´ä†,ò1IÔWò»lx+Œ(ÒiÙ²L4;¾ßöž ¥Û…“qÑΩ+Ì“ !E ? fK—È&ý%­á ããLû÷•mY•T,aLÌCÝbXŒ/1:ÎbäºOÚÇÔèÂMfa_˜¡í8ßá@JQ:ÈæOTŒá_#‘é¢7Ðgso¢t(x}ô*ð¹†ïÁNë'ú}iy1oÜš\ücÇ<éB+P…2…oð¶ÁæÏfкðÒÅîñ ¦Î¨?Ó6µIl:Cýö‹¦:<+àEènz×,½æ¹ws‚Yûà`µÄÅΣ~´N¹2UFÐÄp¹fŸ)uÙ­Úƒlo˜€Å¶õÄ<6ðð{V b;)0d¸fQÙuð¦}Ϭë‘è_‘Y`µ.Ø•2 «ˆÒÌ–³¤”É7”d=7¤Ë?‡ZFfh‹âYPC¡š_Þ‚ðuò"ñcùèž#p-#j›8ÇTè4-þDjEˆN ¸µëÙ 1í–¶"}êÆ 7×–˜‘…·Œj|ˆ5¯fŒ#*¸‘[ŽC²‹3ÚàƒÆßw“¿ep“Ô”Á†g쯢xÆÃ©ŸºqìÞâT£=Uš¦ëd\BDÎvÝÄ!­7”Î_C9ÙrÑŒ? ¼a›F®/±–ó¬üV,‹ùK´×ÆFqðæÈ¢â.ö¶ãеäå¶“ç]ú8ë^wì,²ªG\#†5Ç!Ä9õâ˜Â«4€i™á!'$`$r,¹“ âÊÃYÍ·ÚŒí(DH‘:õxN˜ïVô ºb;Dö›z䛣¤téü”«˜ mLÆì^d«ÉuÞ½ ·`tE¹%ôšµ&Î=åü Žƒ/tÕd‚Ê4fÞ+TųüÖȇ¸µé q¼.U@ú}CþRwzò»s¡‹êcß_ö*‹ÊˆÖ‰etU%5ëiÓPD‚zdjd^,Ñ—vÈ÷4)m(?£_!¤í1³^_Ñ‘–†³_²¾Çßæyª´Ñzž}ñðB¼¶’“™@Ò‡Œë© TJ£/ öëµ'½˜ÄÞ+KÓ;Çÿ#óË©ƒâ”ha¹Oa½”“ô£±ÃöQ¤ôÇ É,§s¥æ§ žs)“4< Ý‚º bjD¨ŒA ·m PŒM²G*åªÀ èÍb8!„+R OFš#úà°&â­•x]!X*:*ì‰2w…ÑÊ­Ô™¨´!b¹>rrWÕH°iÔ–D.@9[tFw¥%¯ÈOùu“‘é²ötSƒ®ªÍ„$"b¦8gÃ?òÆ|ÂXƒßûE¨¥eòÁÂäwy·¸­)oÏ­™ÙuÈúU{.LÚ¦ƒÌŽ)4o‹ÜôÁ+§è¡\B,Ž8o‹MÂÏN1:¨åy°Ùî‘@/&G÷ƒž„LaÁdŒ²jwݳNR…FÚ¦æ¼lèW)¥nV"G=µÀñ(Î' ëñeg•Å:µ€_âÈ€­³WÛÁ—F~¤»%ºTZÄGä]&X£þ|ÍÞèYÃ[fg°¿ËD¨E‚¼w@‚6€9ÙO¯Ä~¡‘pë”õÿT²iG}}³Dʉ®²Ò‡r+ÐÉ_b=yÀÿg–Éôþ`Î`(2s~ =ZMÁü}ãH J„Q+¶Ê‚¯íßž¾g m* öºWÊý7Ô*ÿp‹Ó;œ©(UÙÏcDÉçn%ñª£‹›2Ê)¸(3Y‡Á†jŽ«;+åÀ4 ôæ÷¤¥^ow}Z KŠÇ¡ãÚýç{î´z–´ì#À·8øæïé—Õm»D N0”äþ‡|õ8«!¿Ï²{`ì öðhL¬ÿx ÿ/NåÁï}4.®t€‰KÏMtJFµžæ0²Èð-±™ëyÌkšíà[þ¹_··úô’ž7¢ÿ‚t¿{}ÑH¬ÉhZ,úàšÇŒ1Ô§âqN¥2#¤ K­[Qd‡5ˆ‰OÝé6ý—ÿTí^b®žª7büq„Ø¢]R}¶Ùî=a×Êš¨l½d³`EºÔ•æDwçÔ´èt˜ \dÿ@°ƒ$A™žÔ„šˆX¦ "ê#µc3ï`"¨Ç6^Rï<œE«d¼š'yÀfÉy´Y·&â8~«äíE°r‰ýÑ4ðз›Aˆº žÏD7F 6@ÝDCº¬•;­%ãe“PKÚ%¸Ó-ûí–š&À*쟌÷CI0,X}©.ìÔ^»œ’ÃUj€ú˘0bB€åBMóÊV®¾š0ÖÈó ¼[ÒkVè?ÙjR¥Œ‹#Á£&H« À|Ía ´^¬¨Ý€üXØp¥´×éìRñº©îÀl/'ÝBÚaw–€ÎP- 4꽑éïo÷{úßšº\ºh·iqÚÁGón°ƒo©|%XVÕ㘽låÐ6Á9þ¼Î1i¦K–©;Õ6oZ=5¸H'+·„ÃåiGá7›Ûê,ãªÒ*ïí×>,$Y–äÐ!ËLGù9¤ˆyñù{¥†ÚD°}¥Õv›åÊ»×êª[æPeÂX‚ò Åt´—SÍ«M¤±ÛùgÜÌ=J¼!ûÔÀZàƒëø$¶ ÎÑYýµÉ `Âîƒ;Ô<>;Œ½J}@7k“4¤Ø”µ–u¯®¡#DHFª„pp åa޵_بL[hØ$Q~__oÛYU‚ØÏ;Ùž&OH,²úÀ‘~‘òúÃè·V@í@ŒÉumo¸}íí{\O- qôþZv!‚ÓnÏâ8ñº¥náÀ-–1à½Çü·³áR7ë&Ô„ÿlÞ:º—ì„‘q¼[ñß+’@LrüþÏ{’„ýá2' {/þëq›ýrÒ‹uÏsŸq(à±5É8ÆT¡;_ÿNY•óâ""ÌU‚Hi cyvó¢›Vs–7AÉyQç«nT£öÀ¡eÔa5£XÃg¢ì0\l›ËR›e»Ñÿ74¸#]–×l+‡7\3©P\•vìüÕš1ø]+³$ƒ(Tp™zT7îÃí¯¢åFÿtUL}›%¸ùz©MF¸’$v­ðË0 t¬’×´wŸÆæf±FÞj'«1÷•B‚+qx‹–]NçÀWªÖ²{czïPí“¥¢ãÕ8·re'NòÇ» ±5Œ»’@Ñà4ý²{°»É.åÚx…ÊɤⓌ–|wK”´ƒÀïá[8¤HÅÇÌFÒ"Ü€=³xvh9Dõ|¶©®ìÚ6ÎrÂy"J•à\ö'*›Á"ý1¼ år9ˆÆZ!Vž}K ûKX~Aù¶†^¸ ðéïÔsi `¾M¢‹¸º! °«q"Y+H"Ë>äVkƒ—íÊ:&Ën;Y[­Hœ|•¼¤{b:jjè²W‡¥\ÿ† †;Ì0weöÅ<)ÌÿYSIcÞ,Aã²6©Ô…ÊÚ,ëÇPHùÑö±Â€‘HrH-¢k±Øª¾Ÿ)£¿ðC]ºsûð*Ø#à­*‹mAàeÈü)ˆûê{êÔSä[1L¦dŠ­ª_è«>þdË9’®%%¢ê=‹Õ]1ßfçüaZ—ð£©wE!–ÅŒð,tèGbНT:Û“ÊR,Ž_±\]P/ÐämŽyqR„¨9«å©ÇºHãýE2Tfþ¤)¹ÏóN†XźÉpŸ³r“”ÇØ/¸UNQ?B" û$—H"y—ÊóÓýÎ]kw¤\w‰·p˜èž·ÇYœBs;úgâlþëyk"··ÿ7Ò ‚Âvï{½—dÀ̦ݪÀˆ=²×hèt|º°ZBúkÏ€™ÎÄ6³Ýéñ¬ìÙ¶çò=Ã;€pasy4 Ñ ápúz‹µ^ZÖØþ£”Yµ»ìËmü#Q4GüSe±P_Äšú/§ÜkØJ»óRª«íÁ³A&bs4è\/Íl ¸s ½„’¢žýüËõ¡4ã!"v‹îSdBfóQÝÁÑX9­™%‰DN°8óOÒ3¨%ι¿/%g<ÇÆD´!¿Þn.avXØ÷FªxtÐd”Ö~ï@š”T„ÐÕBDFÌ/°ÑJƒòåoõ‘€Í8WÀ¾Ô‘ê‘k7áÏ¿tµDŠÞŒÏBŠI¶ÐK* ЫЗ"šcno1…á|0aª\ÈÍZ™{ª\T\´æUËÆ×ò‹F ׿÷ 4Ø2ºb½_¶^ÎÞ7Z§0‘ï‰ç*’W2Ë“F/;¢c%’„,$Vkà¾íéMKzZCPU,Ý>Ø­v·í•Ã/Å¡Y¸åÄ£ÊÍ2—X_8„-'¾‰…¯Û̵szƒúDy% ?6(×µªŸxåÖ’§ª-¢[UdS,9 ‰ÑóIå[D¶£Õñ[óǧ0®»cu--M·jö€wÄ{©“öèe„«Û"ä‘x(ËGÃã¾€¤CœN}‘mhú‰sMz6Í\œrpÆÎKë µcÄìÌ^7KPàCVÜ „*~û{øL´…Ø×2žAýŪ£›FŸfXozÓªÿ_}Qd1ˆb‰Wšk 7n 4aã úšþ{ãYsãïé>ÓïC»ÓTp‡å(b°.™>ƒÕy²³"NÒp-NˆåÿÚNêð: ŽéiÒ•ßS)ãöѶ‘ý´oí¦qûh¯ÛE~Ú7öÒ˜~ÕÚÇûYï©°àgÍXï¦ þìÅ –…» "ÿÔŸÑ@…¯‚¿kÆ%ˆh¨Îš -Šö»Ýï9ÔnUÝ‚¿ÂZüR!êû ÞyÑ…"Ȫ¦•=k`À \0E×W5 =Ç”¨‰è¦€7àÅà\~TËùN!4¯Ü‹.šòÑMôÆðYÆ•©J~¸„ï{H ÿFÐ‚à’¥BJÕÔÖügœklÝxâÝ1•È6ÃLƒ'œîEt°¡â Ôb|=‘a7ņZšnï<±?×™bxr`må“„fÁÛ¸YÖ¦ ù ý@ÿ=ˆóìÖ»µµèÅ×øvƒöÊ‘ÅÖÔkš›ÁËvjb>@õSŒ¶FÓ(ùBÒ3¯Ø7‹¨Ã5ò³·ð0\ç¯3·C2wTʱa˜v†§Ì÷Ó¬ùM"# DM:V¦éYņÚ.³ï›û®Ÿ4?=Èñ[Q×v;PßÁËrJOÙ ¯ÜG ©ô÷¼‰Þ]kŸyT1þ\&˜n+¶¨Öç³£%®“Õ M6S¤yøa1Œ/tYI#ŒžæØ³ß¤í1ÏÉìÅþ8qÀtâ H,€ÆÆw†5äŒÞV©)ÁóT[âa2ØcN'Å…cô…úÁyŽ ÔaIˆN÷˜–·Þ$GÀÉð:Ò£[ìEBkqàî¸9Ñ”wµ^AËsén}’‡{æô&S ó->šeójÀéàÊv'ùÿ€ æm•˜r­ýP¤@3ÁʪŽ?Ó=©@Ó0¨%¼èn:³<©š\ŽJ*£ŽbÉGiOž)£%5(¤„±§ãGôÿ^°MOSÚIÑòýµ?êulL”ŒüÜ–ÿˆ­W÷Zª?ÖÓÜN[¨‰Ãgj‰çŸ¶‰.&r¢­zÖno"õîï~2y çç>ùl%O¯,ÊQYQ¤ž=;‚Htt„ Ë.›`7¦hœÉßœûèBº­„Ë×*ÖázWð3gW‚#% 2^ÅÄÿÁÞ64Frۨ괤ÔDœ1H[™‰u/ŸWöè©Éwbø£aS™ˆz¨A›½mÏNu,·—wÞoHz&Ã#8ì6¯4 çàâ.R&¦PÕ¤PÕŒ*/2sÈQ?úÌ0IümO=„0‘¤àçä±³ a{º> ͋ϣ£0á͸ZRi›Ÿ92šêUûá ˜ú`uJ•ëý:«‘n[.ËÇZ› Ó'ƒØuQ9ÿÿ\ÐzT“2¼’º¯ëC×™ª#Ó6¡—v°0Üœ"{Iå Ä#Q!0ÜXÝ\±¿ú“HÊïÅâ½äÇ4+±ï§¶OÌ€âËjЦ- šïYB>ëŸÿ1IŒ2‚ž«ÙÊS¦*‚ʦÆn˜³¸¾Ÿ_3É8nEOpé4ON~YÊ»:þÎø†ëä9¯3˜rà’4Òt 8®Mô:Øû’/ÈñQ}+[\FDL}§LŸ/ØÙá`õó„³WWCí€Ò­]€"b¹/ºdc{*J"Ö@«+¾ »óÂè !Ò‡&¦»Á ± É!»À3Üøs׆x3”))›V¢€QB=Ŷø»u{@áõî Ø?#ΡaÇõ’G4Ã8¬MÍ J{LJê Î|ôᲯŒÀl¬È{¬óGÞij÷å|æih¬žúĵ Ò¼Ý>~˜Á¯ Êæ?ƒi³ÿVxNT(‹íaÔУ|Lz½ñ¾3Ï›ANŸ”œÄóñ±µŸÿÙfs-uae-2.2.3+dfsg/icon/fs-uae-launcher.ico0000755000175000017500000007644612162366654020503 0ustar glaubitzglaubitz hF ¨®00 ¨%V@@ (Bþ:(  @ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿¤–8·™ŒÑ²“‡ç±’†ç±’†ç±’†ç±’†ç±’†ç±’†ç±’†ç±’†ç²“‡ç·™ŒÑ¿¤–8ÿÿÿÿÿÿ¶™ŒÑ]3#ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿ]3#ÿ¶™ŒÑÿÿÿÿÿÿ±“‡çL#ÿL)ÿ?Û$ÿ9É=ÿ1à-ÿI™AÿL#ÿ†j_ÿ^9*ÿ…i^ÿ…i^ÿL#ÿ±“‡çÿÿÿÿÿÿ¯‘…èH!ÿ¡œÿ»Ì/ÿòYÿf³`ÿñ[ÿPC.ÿ…kaÿ~bXÿ–vÿhG;ÿH!ÿ¯‘…èÿÿÿÿÿÿ®…è^/ÿñƒÿ”^.ÿ˜©Lÿè”ÿ4§qÿ4ƉÿD ÿDÿDÿDÿDÿ®…èÿÿÿÿÿÿ¯‘…èj$ÿy2)ÿ}(ÿh/$ÿ ÉžÿB¬ÿîºÿQp]ÿJ"ÿJ"ÿJ"ÿJ"ÿ¯‘…èÿÿÿÿÿÿ°‘†èQ&ÿQ&ÿQ&ÿQ&ÿIC3ÿ óãÿH‰~ÿäÖÿU/ ÿQ&ÿQ&ÿQ&ÿ°‘†èÿÿÿÿÿÿ±’†èX*ÿX*ÿX*ÿX*ÿX*ÿ5Ž—ÿ/½Ðÿ »ÏÿH—ŸÿX*ÿX*ÿX*ÿ±’†èÿÿÿÿÿÿ²“‡è_.ÿ_.ÿ_.ÿ_.ÿ_.ÿ]1!ÿ çÿRw‹ÿ ¦òÿaJDÿ_.ÿ_.ÿ²“‡èÿÿÿÿÿÿµ•ˆèn;(ÿn;(ÿn;(ÿn;(ÿn;(ÿn;(ÿRQiÿwëÿAj¦ÿ5wÊÿo<*ÿn;(ÿµ•ˆèÿÿÿÿÿÿ¹™Œè‚N9ÿ‚N9ÿ‚N9ÿ‚N9ÿ‚N9ÿ‚N9ÿ‚N9ÿ-LÊÿI]´ÿEíÿj_€ÿ‚N9ÿ¹™Œèÿÿÿÿÿÿ½œç–`Kÿ–`Kÿ–`Kÿ–`Kÿ–`Kÿ–`Kÿ–`Kÿ…W`ÿ95ÈÿlR…ÿME³ÿ–aLÿ½œçÿÿÿÿÿÿÁ¡•Ñ­ydÿªs]ÿªs]ÿªs]ÿªs]ÿªs]ÿªs]ÿªs]ÿªs]ÿªs]ÿªs]ÿ­ydÿÁ¡•ÑÿÿÿÿÿÿĨ›8ã—Ñâ•ç¡•ç¡•ç¡•ç¡•ç¡•ç¡•ç¡•ç¡•çâ•çã—ÑĨ›8ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ( @ €ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿı ŨžÃ¦›àĨÿĨÿĨÿĨÿĨÿĨÿĨÿĨÿĨÿĨÿĨÿĨÿĨÿĨÿĨÿĨÿĨÿĨÿĨÿĨÿæ›àŨžÄ± ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿı æ›ÜĨþ¡€sÿŽj\ÿŒgYÿŒgYÿŒgYÿŒgYÿŒgYÿŒgYÿŒgYÿŒgYÿŒgYÿŒgYÿŒgYÿŒgYÿŒgYÿŒgYÿŒgYÿŒgYÿŒgYÿŒgYÿŽj\ÿ¡€sÿĨþæ›Üı ÿÿÿÿÿÿÿÿÿÿÿÿŨžÄ¨þrK<ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿrK<ÿĨþŨžÿÿÿÿÿÿÿÿÿÿÿÿæ›à sÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿ sÿæ›àÿÿÿÿÿÿÿÿÿÿÿÿĨÿ‹h[ÿM#ÿM#ÿM#ÿM#ÿ8{ÿ&Ü#ÿ/Ó.ÿ]V:ÿ'Ìÿ+Ù*ÿN¦EÿO&ÿM#ÿM#ÿO&ÿ™xÿM#ÿM#ÿvVJÿ¦‘‰ÿ…}ÿO&ÿM#ÿM#ÿ‹h[ÿĨÿÿÿÿÿÿÿÿÿÿÿÿÿĨÿˆfXÿK#ÿK#ÿK#ÿP4ÿôÿ-ö$ÿÿ$ÿ<ÍMÿuöÿþ%ÿú(ÿ_jJÿK#ÿK#ÿO'ÿµ¤žÿX3$ÿO(ÿ†k`ÿW2#ÿ± ™ÿ^:,ÿK#ÿK#ÿˆfXÿĨÿÿÿÿÿÿÿÿÿÿÿÿÿĨÿ‡eXÿI"ÿI"ÿI"ÿ¦²ÿØÿÿ Ð:ÿùFÿþFÿŠÄTÿ3ÃKÿÿEÿ.Ø[ÿR0#ÿI"ÿM&ÿµ°ÿ’zqÿb@3ÿ‡mcÿ®–ÿcXÿI"ÿI"ÿI"ÿ‡eXÿĨÿÿÿÿÿÿÿÿÿÿÿÿÿĨÿ†eXÿG!ÿG!ÿsVÿþýÿôóÿkU>ÿjá?ÿÿgÿ äpÿSF3ÿ ñfÿÿgÿW”hÿG!ÿK%ÿµ°ÿ‘zqÿuYMÿœˆ€ÿ’|sÿ±¡›ÿH#ÿG!ÿG!ÿ†eXÿĨÿÿÿÿÿÿÿÿÿÿÿÿÿĨÿ…dWÿE ÿH"ÿ㜠ÿÿ­ÿ©ˆIÿ†Rÿù¯ÿðÿÿˆÿNª|ÿ.vBÿÿˆÿî‰ÿYF9ÿE ÿW5'ÿW5'ÿP-ÿF"ÿX7)ÿF"ÿE ÿE ÿE ÿ…dWÿĨÿÿÿÿÿÿÿÿÿÿÿÿÿĨÿ…dWÿE ÿAÿÿ]ÿài$ÿZ7'ÿð]ÿÿ]ÿmeÿÿ¥ÿ õ£ÿ\XKÿÔÿÿ¥ÿD¼ÿG$ÿE ÿE ÿE ÿE ÿE ÿE ÿE ÿE ÿE ÿ…dWÿĨÿÿÿÿÿÿÿÿÿÿÿÿÿĨÿ†eXÿL!ÿÁ#ÿÏ+!ÿ|F=ÿÿÏ* ÿ·<3ÿO- ÿ¾‹ÿÿ¹ÿ8̤ÿBP8ÿý¸ÿú·ÿ^m_ÿH"ÿH"ÿH"ÿH"ÿH"ÿH"ÿH"ÿH"ÿH"ÿ†eXÿĨÿÿÿÿÿÿÿÿÿÿÿÿÿĨÿˆfYÿL#ÿL#ÿL#ÿL#ÿL#ÿL#ÿL#ÿL#ÿD;)ÿùÉÿþÍÿ]ƒtÿ%¦„ÿÿÎÿ,Ú¸ÿV3&ÿL#ÿL#ÿL#ÿL#ÿL#ÿL#ÿL#ÿL#ÿˆfYÿĨÿÿÿÿÿÿÿÿÿÿÿÿÿĨÿŠgZÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿ-zÿÿãÿæÐÿYG;ÿ ðÖÿÿãÿW™ŽÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿŠgZÿĨÿÿÿÿÿÿÿÿÿÿÿÿÿĨÿŒhZÿS'ÿS'ÿS'ÿS'ÿS'ÿS'ÿS'ÿS'ÿS'ÿQ+ÿãÜÿÿøÿN­ªÿ8wkÿÿøÿïéÿcNCÿS'ÿS'ÿS'ÿS'ÿS'ÿS'ÿS'ÿŒhZÿĨÿÿÿÿÿÿÿÿÿÿÿÿÿĨÿi[ÿV)ÿV)ÿV)ÿV)ÿV)ÿV)ÿV)ÿV)ÿV)ÿV)ÿA[Tÿíÿÿ æöÿf^WÿÄÏÿíÿÿD¶¾ÿX-ÿV)ÿV)ÿV)ÿV)ÿV)ÿV)ÿi[ÿĨÿÿÿÿÿÿÿÿÿÿÿÿÿĨÿj\ÿZ+ÿZ+ÿZ+ÿZ+ÿZ+ÿZ+ÿZ+ÿZ+ÿZ+ÿZ+ÿZ+ÿ# ¸ÿÒÿÿ7´ÏÿQMHÿÐýÿÐûÿenmÿZ+ÿZ+ÿZ+ÿZ+ÿZ+ÿZ+ÿj\ÿĨÿÿÿÿÿÿÿÿÿÿÿÿÿĨÿ‘k\ÿ]-ÿ]-ÿ]-ÿ]-ÿ]-ÿ]-ÿ]-ÿ]-ÿ]-ÿ]-ÿ]-ÿT;1ÿ³÷ÿ·þÿbz„ÿ-~Ÿÿ·ÿÿ)©Üÿe=.ÿ]-ÿ]-ÿ]-ÿ]-ÿ]-ÿ‘k\ÿĨÿÿÿÿÿÿÿÿÿÿÿÿÿĨÿ“l]ÿa/ÿa/ÿa/ÿa/ÿa/ÿa/ÿa/ÿa/ÿa/ÿa/ÿa/ÿa/ÿ8c†ÿœÿÿ™èÿhKCÿ •íÿœÿÿY€›ÿa/ÿa/ÿa/ÿa/ÿa/ÿ“l]ÿĨÿÿÿÿÿÿÿÿÿÿÿÿÿĨÿ—p`ÿi7#ÿi7#ÿi7#ÿi7#ÿi7#ÿi7#ÿi7#ÿi7#ÿi7#ÿi7#ÿi7#ÿi7#ÿg8&ÿzàÿÿÿO~°ÿGSqÿÿÿ‚ñÿpVMÿi7#ÿi7#ÿi7#ÿi7#ÿ—p`ÿĨÿÿÿÿÿÿÿÿÿÿÿÿÿĨÿœteÿs@,ÿs@,ÿs@,ÿs@,ÿs@,ÿs@,ÿs@,ÿs@,ÿs@,ÿs@,ÿs@,ÿs@,ÿs@,ÿXI_ÿfÿÿ i÷ÿtbdÿ bÏÿfÿÿCuÂÿtD1ÿs@,ÿs@,ÿs@,ÿœteÿĨÿÿÿÿÿÿÿÿÿÿÿÿÿĨÿ¡yiÿ}I5ÿ}I5ÿ}I5ÿ}I5ÿ}I5ÿ}I5ÿ}I5ÿ}I5ÿ}I5ÿ}I5ÿ}I5ÿ}I5ÿ}I5ÿ}I5ÿ/O¼ÿKÿÿ5bÑÿmPZÿLüÿMüÿrizÿ}I5ÿ}I5ÿ}I5ÿ¡yiÿĨÿÿÿÿÿÿÿÿÿÿÿÿÿĨÿ¦}nÿ‡R>ÿ‡R>ÿ‡R>ÿ‡R>ÿ‡R>ÿ‡R>ÿ‡R>ÿ‡R>ÿ‡R>ÿ‡R>ÿ‡R>ÿ‡R>ÿ‡R>ÿ‡R>ÿ{OOÿ4öÿ0ÿÿkh‘ÿ?C¨ÿ0ÿÿ(IÞÿˆ\Kÿ‡R>ÿ‡R>ÿ¦}nÿĨÿÿÿÿÿÿÿÿÿÿÿÿÿĨÿ«‚rÿ‘\Gÿ‘\Gÿ‘\Gÿ‘\Gÿ‘\Gÿ‘\Gÿ‘\Gÿ‘\Gÿ‘\Gÿ‘\Gÿ‘\Gÿ‘\Gÿ‘\Gÿ‘\Gÿ‘\GÿS@™ÿÿÿ+éÿŠf`ÿîÿÿÿ`^¦ÿ‘\Gÿ‘\Gÿ«‚rÿĨÿÿÿÿÿÿÿÿÿÿÿÿÿĨÿ°ˆxÿ›eOÿ›eOÿ›eOÿ›eOÿ›eOÿ›eOÿ›eOÿ›eOÿ›eOÿ›eOÿ›eOÿ›eOÿ›eOÿ›eOÿ›eOÿ™dQÿjKŽÿgN“ÿŽfgÿUmÿgN“ÿuX…ÿ›gRÿ›eOÿ°ˆxÿĨÿÿÿÿÿÿÿÿÿÿÿÿÿħœàº–ˆÿ¥nXÿ¥nXÿ¥nXÿ¥nXÿ¥nXÿ¥nXÿ¥nXÿ¥nXÿ¥nXÿ¥nXÿ¥nXÿ¥nXÿ¥nXÿ¥nXÿ¥nXÿ¥nXÿ¥nXÿ¥nXÿ¥nXÿ¥nXÿ¥nXÿ¥nXÿ¥nXÿ¥nXÿº–ˆÿħœàÿÿÿÿÿÿÿÿÿÿÿÿŨžÄ¨þµ…rÿ¯waÿ¯waÿ¯waÿ¯waÿ¯waÿ¯waÿ¯waÿ¯waÿ¯waÿ¯waÿ¯waÿ¯waÿ¯waÿ¯waÿ¯waÿ¯waÿ¯waÿ¯waÿ¯waÿ¯waÿ¯waÿ¯waÿµ…rÿĨþŨžÿÿÿÿÿÿÿÿÿÿÿÿı ħœÜĨþÁœÿ¿•…ÿ¿•„ÿ¿•„ÿ¿•„ÿ¿•„ÿ¿•„ÿ¿•„ÿ¿•„ÿ¿•„ÿ¿•„ÿ¿•„ÿ¿•„ÿ¿•„ÿ¿•„ÿ¿•„ÿ¿•„ÿ¿•„ÿ¿•„ÿ¿•„ÿ¿•…ÿÁœÿĨþħœÜı ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿı ŨžÄ§œàĨÿĨÿĨÿĨÿĨÿĨÿĨÿĨÿĨÿĨÿĨÿĨÿĨÿĨÿĨÿĨÿĨÿĨÿĨÿĨÿħœàŨžÄ± ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ(0` €% "$%%%%%%%%%%%%%%%%%%%%%%%%%%%%$! 2IYcfgggggggggggggggggggggggggggge_SA* $A85a’}v¿©‡â¿£™úĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿ¿£™ú§‡ä‹voÉ/(%†\9"‚pj–¿£™øÄ¨žÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿ½¡—úl]X´d9ŠunĨÿĨÿĨÿ©ˆ|ÿl_ÿˆcUÿˆcUÿˆcUÿˆcUÿˆcUÿˆcUÿˆcUÿˆcUÿˆcUÿˆcUÿˆcUÿˆcUÿˆcUÿˆcUÿˆcUÿˆcUÿˆcUÿˆcUÿˆcUÿˆcUÿˆcUÿˆcUÿˆcUÿˆcUÿˆcUÿˆcUÿˆcUÿˆcUÿˆcUÿˆcUÿl_ÿ©ˆ|ÿĨÿĨÿĨÿl]X´\*  ZMHFÀ¤š÷Ĩÿ»ž’ÿsK;ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿsK;ÿ»ž’ÿĨÿ½¡—ú/(%†A¤Œ„ªÄ¨žÿĨÿrK;ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿrK;ÿĨÿĨžÿ‹voÉS´™ÔĨžÿ¨ˆ|ÿP$ÿP$ÿP$ÿP$ÿP$ÿP$ÿP$ÿP$ÿP$ÿP$ÿP$ÿP$ÿP$ÿP$ÿP$ÿP$ÿP$ÿP$ÿP$ÿP$ÿP$ÿP$ÿP$ÿP$ÿP$ÿP$ÿP$ÿP$ÿP$ÿP$ÿP$ÿP$ÿP$ÿP$ÿP$ÿP$ÿP$ÿP$ÿ¨ˆ|ÿĨžÿ§‡ä^!Á¥›÷ĨžÿŽk^ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿŽk^ÿĨžÿ¿£™úd$ĨžÿĨžÿ…bTÿM#ÿM#ÿM#ÿM#ÿM#ÿM#ÿL%ÿ,Þÿÿ ÿÿ ÿÿ ÿ[¯^ÿIoÿü ÿÿ ÿÿ ÿè%ÿkXOÿM#ÿM#ÿM#ÿM#ÿM#ÿ}_SÿÀ±¬ÿM#ÿM#ÿM#ÿN$ÿ£…ÿʽ¹ÿÐÄÀÿ¨”ŒÿR)ÿM#ÿM#ÿM#ÿM#ÿ…bTÿĨžÿĨžÿg%ĨžÿĨžÿ„bTÿL#ÿL#ÿL#ÿL#ÿL#ÿL#ÿ`~ ÿ}ÿÿ3ýÿÿ ÿÿ ÿò,ÿ´Wÿjÿÿþ!ÿÿ ÿÿ ÿQ¹]ÿT0#ÿL#ÿL#ÿL#ÿL#ÿ|_SÿÀ±¬ÿL#ÿL#ÿL#ÿsSGÿÈ»¶ÿY3$ÿX2#ÿË¿»ÿtTHÿL#ÿL#ÿL#ÿL#ÿ„bTÿĨžÿĨžÿg%ĨžÿĨžÿƒaTÿJ"ÿJ"ÿJ"ÿJ"ÿJ"ÿU5ÿ¿óÿÅÿÿ·ÿÿ ø9ÿÿ5ÿÿ5ÿ@Ê\ÿ¸ä ÿZö&ÿÿ5ÿÿ5ÿ ÷;ÿowcÿJ"ÿJ"ÿJ"ÿJ"ÿ{^SÿÈ»·ÿ†kaÿ†kaÿa>1ÿJ"ÿP)ÿpPDÿžˆ€ÿÏÅÁÿb?2ÿJ"ÿJ"ÿJ"ÿJ"ÿƒaTÿĨžÿĨžÿg%ĨžÿĨžÿƒaSÿI!ÿI!ÿI!ÿI!ÿI!ÿ¨° ÿÞÿÿÞÿÿÍçÿA–LÿÿJÿÿJÿýKÿ°kÿ–¦^ÿ èHÿÿJÿÿJÿ6Ócÿ]A7ÿI!ÿI!ÿI!ÿz]RÿÊ¿ºÿš„|ÿš„|ÿhG;ÿJ"ÿµ¤žÿÎÿÿ¦’‹ÿmMAÿI!ÿI!ÿI!ÿI!ÿI!ÿƒaSÿĨžÿĨžÿg%ĨžÿĨžÿ‚aSÿH!ÿH!ÿH!ÿH!ÿrWÿ÷ÿÿ÷ÿÿöþÿ™•bÿJ%ÿ-òPÿÿ`ÿÿ`ÿ#âkÿrc^ÿ2f*ÿÿ`ÿÿ`ÿÿ`ÿf›vÿJ%ÿH!ÿH!ÿz]Rÿ¾±«ÿH!ÿH!ÿH!ÿdC6ÿ;ÿS/!ÿ\9,ÿª˜‘ÿN)ÿH!ÿH!ÿH!ÿH!ÿ‚aSÿĨžÿĨžÿg%ĨžÿĨžÿ‚`SÿG ÿG ÿG ÿJ"ÿã¿ÿÿÜÿÿÜÿκ<ÿY<1ÿh ÿÏãÿþtÿÿuÿÿuÿX°€ÿM*ÿÁ\ÿÿuÿÿuÿéyÿiYQÿG ÿG ÿy\RÿÑÇÄÿÎÄÀÿÎÄÀÿ­œ–ÿK$ÿ­œ–ÿÌÁ½ÿȽ¸ÿ“|tÿG ÿG ÿG ÿG ÿG ÿ‚`SÿĨžÿĨžÿg%ĨžÿĨžÿ`SÿE ÿE ÿE ÿ›_ ÿÿ©ÿÿ©ÿô¦ÿ{j\ÿR*ÿò¡ÿÿ©ÿlÚQÿÿŠÿÿŠÿ ôŠÿlmbÿ<>!ÿú‡ÿÿŠÿÿŠÿO¼‰ÿO/#ÿE ÿF"ÿI%ÿI%ÿI%ÿI$ÿE ÿE ÿP-ÿI$ÿE ÿE ÿE ÿE ÿE ÿE ÿ`SÿĨžÿĨžÿg%ĨžÿĨžÿ€_SÿDÿDÿY(ÿøsÿÿuÿÿuÿ±€WÿK)ÿµT ÿÿuÿÿuÿÚ‚#ÿ ñšÿÿŸÿÿŸÿ=Í—ÿU9/ÿ#XÿÿŸÿÿŸÿøžÿm{nÿDÿDÿDÿDÿDÿDÿDÿDÿDÿDÿDÿDÿDÿDÿDÿDÿ€_SÿĨžÿĨžÿg%ĨžÿĨžÿ`SÿF ÿF ÿÆ9 ÿÿAÿÿAÿàU%ÿdNEÿn'ÿþAÿÿAÿþBÿpaÿ.tLÿÿ¬ÿÿ¬ÿþ¬ÿi’ÿE(ÿ ã›ÿÿ¬ÿÿ¬ÿ3Õ ÿ\C9ÿF ÿF ÿF ÿF ÿF ÿF ÿF ÿF ÿF ÿF ÿF ÿF ÿF ÿF ÿF ÿ`SÿĨžÿĨžÿg%ĨžÿĨžÿ‚aTÿH!ÿeÿÙÿß&ÿÞ&ÿ‰ZTÿH"ÿ° ÿÞ%ÿß&ÿ½?6ÿZ=3ÿH!ÿÌ”ÿÿ¹ÿÿ¹ÿ ä¯ÿgRIÿ3aCÿÿ¹ÿÿ¹ÿÿ¹ÿdŸÿK&ÿH!ÿH!ÿH!ÿH!ÿH!ÿH!ÿH!ÿH!ÿH!ÿH!ÿH!ÿH!ÿH!ÿH!ÿ‚aTÿĨžÿĨžÿg%ĨžÿĨžÿ„bTÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿ>I3ÿüÄÿÿÆÿÿÆÿU´žÿQ- ÿ¼‘ÿÿÆÿÿÆÿë¼ÿl^VÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿ„bTÿĨžÿĨžÿg%ĨžÿĨžÿ…bUÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿ#ž€ÿÿÔÿÿÔÿ öÎÿorkÿD?,ÿøÎÿÿÔÿÿÔÿM¾«ÿW4(ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿ…bUÿĨžÿĨžÿg%ĨžÿĨžÿ†cUÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿK0ÿ ìÐÿÿáÿÿáÿ:Ͼÿ_?4ÿ*ŽwÿÿáÿÿáÿùÝÿo€yÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿ†cUÿĨžÿĨžÿg%ĨžÿĨžÿ‡dVÿQ'ÿQ'ÿQ'ÿQ'ÿQ'ÿQ'ÿQ'ÿQ'ÿQ'ÿQ'ÿQ'ÿQ'ÿQ'ÿQ'ÿQ'ÿ5q_ÿÿîÿÿîÿþíÿh•ÿQ.ÿâÒÿÿîÿÿîÿ0ØÍÿeJ>ÿQ'ÿQ'ÿQ'ÿQ'ÿQ'ÿQ'ÿQ'ÿQ'ÿQ'ÿQ'ÿQ'ÿQ'ÿ‡dVÿĨžÿĨžÿg%ĨžÿĨžÿ‰dVÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿÉÂÿÿüÿÿüÿçäÿnWNÿ=bUÿÿüÿÿüÿÿüÿc£¡ÿW-ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿ‰dVÿĨžÿĨžÿg%ĨžÿĨžÿŠeWÿV)ÿV)ÿV)ÿV)ÿV)ÿV)ÿV)ÿV)ÿV)ÿV)ÿV)ÿV)ÿV)ÿV)ÿV)ÿV)ÿII<ÿîûÿòÿÿòÿÿS²·ÿ\3$ÿ±µÿòÿÿòÿÿâíÿqb[ÿV)ÿV)ÿV)ÿV)ÿV)ÿV)ÿV)ÿV)ÿV)ÿV)ÿV)ÿŠeWÿĨžÿĨžÿg%ĨžÿĨžÿ‹eWÿX*ÿX*ÿX*ÿX*ÿX*ÿX*ÿX*ÿX*ÿX*ÿX*ÿX*ÿX*ÿX*ÿX*ÿX*ÿX*ÿX*ÿ*‹”ÿáÿÿáÿÿ ÛöÿrurÿO>1ÿÚöÿáÿÿáÿÿJ³Áÿa;-ÿX*ÿX*ÿX*ÿX*ÿX*ÿX*ÿX*ÿX*ÿX*ÿX*ÿ‹eWÿĨžÿĨžÿg%ĨžÿĨžÿŒfXÿZ,ÿZ,ÿZ,ÿZ,ÿZ,ÿZ,ÿZ,ÿZ,ÿZ,ÿZ,ÿZ,ÿZ,ÿZ,ÿZ,ÿZ,ÿZ,ÿZ,ÿV3$ÿ ¿èÿÏÿÿÏÿÿ7´ÑÿgF9ÿ1x„ÿÏÿÿÏÿÿÌúÿr‚ÿZ,ÿZ,ÿZ,ÿZ,ÿZ,ÿZ,ÿZ,ÿZ,ÿZ,ÿZ,ÿŒfXÿĨžÿĨžÿg%ĨžÿĨžÿgXÿ\-ÿ\-ÿ\-ÿ\-ÿ\-ÿ\-ÿ\-ÿ\-ÿ\-ÿ\-ÿ\-ÿ\-ÿ\-ÿ\-ÿ\-ÿ\-ÿ\-ÿ\-ÿ>\dÿ¾ÿÿ¾ÿÿ¾ÿÿh‹—ÿ[2"ÿ©Ýÿ¾ÿÿ¾ÿÿ-®ÚÿmPDÿ\-ÿ\-ÿ\-ÿ\-ÿ\-ÿ\-ÿ\-ÿ\-ÿ\-ÿgXÿĨžÿĨžÿg%ĨžÿĨžÿgYÿ_.ÿ_.ÿ_.ÿ_.ÿ_.ÿ_.ÿ_.ÿ_.ÿ_.ÿ_.ÿ_.ÿ_.ÿ_.ÿ_.ÿ_.ÿ_.ÿ_.ÿ_.ÿ_.ÿŒÂÿ­ÿÿ­ÿÿ§èÿt]SÿGMUÿ­ÿÿ­ÿÿ­ÿÿa¥ÿa3"ÿ_.ÿ_.ÿ_.ÿ_.ÿ_.ÿ_.ÿ_.ÿ_.ÿgYÿĨžÿĨžÿg%ĨžÿĨžÿhYÿa/ÿa/ÿa/ÿa/ÿa/ÿa/ÿa/ÿa/ÿa/ÿa/ÿa/ÿa/ÿa/ÿa/ÿa/ÿa/ÿa/ÿa/ÿa/ÿS>=ÿšúÿœÿÿœÿÿP‘ºÿf:*ÿ$w±ÿœÿÿœÿÿšïÿwfbÿa/ÿa/ÿa/ÿa/ÿa/ÿa/ÿa/ÿa/ÿhYÿĨžÿĨžÿg%ĨžÿĨžÿ’j[ÿe3 ÿe3 ÿe3 ÿe3 ÿe3 ÿe3 ÿe3 ÿe3 ÿe3 ÿe3 ÿe3 ÿe3 ÿe3 ÿe3 ÿe3 ÿe3 ÿe3 ÿe3 ÿe3 ÿe3 ÿ2`“ÿŠÿÿŠÿÿ Šøÿuswÿ[;5ÿ‡õÿŠÿÿŠÿÿGŠÃÿlC4ÿe3 ÿe3 ÿe3 ÿe3 ÿe3 ÿe3 ÿe3 ÿ’j[ÿĨžÿĨžÿg%ĨžÿĨžÿ•m^ÿl9&ÿl9&ÿl9&ÿl9&ÿl9&ÿl9&ÿl9&ÿl9&ÿl9&ÿl9&ÿl9&ÿl9&ÿl9&ÿl9&ÿl9&ÿl9&ÿl9&ÿl9&ÿl9&ÿl9&ÿh;.ÿsæÿyÿÿyÿÿ4€ÔÿvQDÿ=U„ÿyÿÿyÿÿzûÿtz‡ÿm:'ÿl9&ÿl9&ÿl9&ÿl9&ÿl9&ÿl9&ÿ•m^ÿĨžÿĨžÿg%ĨžÿĨžÿ™paÿr?+ÿr?+ÿr?+ÿr?+ÿr?+ÿr?+ÿr?+ÿr?+ÿr?+ÿr?+ÿr?+ÿr?+ÿr?+ÿr?+ÿr?+ÿr?+ÿr?+ÿr?+ÿr?+ÿr?+ÿr?+ÿPKjÿhÿÿhÿÿhÿÿi|žÿqA0ÿbÛÿhÿÿhÿÿ*sÝÿ|]Pÿr?+ÿr?+ÿr?+ÿr?+ÿr?+ÿr?+ÿ™paÿĨžÿĨžÿg%ĨžÿĨžÿœtdÿyE1ÿyE1ÿyE1ÿyE1ÿyE1ÿyE1ÿyE1ÿyE1ÿyE1ÿyE1ÿyE1ÿyE1ÿyE1ÿyE1ÿyE1ÿyE1ÿyE1ÿyE1ÿyE1ÿyE1ÿyE1ÿyE1ÿ%RÃÿVÿÿVÿÿ`êÿh`ÿ]IaÿVþÿVÿÿVÿÿaxªÿzJ8ÿyE1ÿyE1ÿyE1ÿyE1ÿyE1ÿœtdÿĨžÿĨžÿg%ĨžÿĨžÿŸwgÿK7ÿK7ÿK7ÿK7ÿK7ÿK7ÿK7ÿK7ÿK7ÿK7ÿK7ÿK7ÿK7ÿK7ÿK7ÿK7ÿK7ÿK7ÿK7ÿK7ÿK7ÿK7ÿoKPÿFùÿEÿÿEÿÿNl½ÿTCÿ0HµÿEÿÿEÿÿNñÿpnÿK7ÿK7ÿK7ÿK7ÿK7ÿŸwgÿĨžÿĨžÿg%ĨžÿĨžÿ£zjÿ†Q<ÿ†Q<ÿ†Q<ÿ†Q<ÿ†Q<ÿ†Q<ÿ†Q<ÿ†Q<ÿ†Q<ÿ†Q<ÿ†Q<ÿ†Q<ÿ†Q<ÿ†Q<ÿ†Q<ÿ†Q<ÿ†Q<ÿ†Q<ÿ†Q<ÿ†Q<ÿ†Q<ÿ†Q<ÿ†Q<ÿECœÿ4ÿÿ4ÿÿ9ùÿ|sÿ{NLÿ 7õÿ4ÿÿ4ÿÿE^Çÿ‡]Mÿ†Q<ÿ†Q<ÿ†Q<ÿ†Q<ÿ£zjÿĨžÿĨžÿg%ĨžÿĨžÿ¦}mÿŒWBÿŒWBÿŒWBÿŒWBÿŒWBÿŒWBÿŒWBÿŒWBÿŒWBÿŒWBÿŒWBÿŒWBÿŒWBÿŒWBÿŒWBÿŒWBÿŒWBÿŒWBÿŒWBÿŒWBÿŒWBÿŒWBÿŒWBÿˆVGÿ+æÿ"ÿÿ"ÿÿ1GÖÿŒgYÿRA‘ÿ"ÿÿ"ÿÿ%üÿwsÿŒWBÿŒWBÿŒWBÿŒWBÿ¦}mÿĨžÿĨžÿf%ĨžÿĨžÿª€pÿ“]Hÿ“]Hÿ“]Hÿ“]Hÿ“]Hÿ“]Hÿ“]Hÿ“]Hÿ“]Hÿ“]Hÿ“]Hÿ“]Hÿ“]Hÿ“]Hÿ“]Hÿ“]Hÿ“]Hÿ“]Hÿ“]Hÿ“]Hÿ“]Hÿ“]Hÿ“]Hÿ“]HÿjH{ÿÿÿÿÿÿÿih£ÿ’^Lÿ"Üÿÿÿÿÿ'3ßÿpdÿ“]Hÿ“]Hÿ“]Hÿª€pÿĨžÿĨžÿe$ĨžÿĨžÿ­ƒsÿ™cNÿ™cNÿ™cNÿ™cNÿ™cNÿ™cNÿ™cNÿ™cNÿ™cNÿ™cNÿ™cNÿ™cNÿ™cNÿ™cNÿ™cNÿ™cNÿ™cNÿ™cNÿ™cNÿ™cNÿ™cNÿ™cNÿ™cNÿ™cNÿ™cNÿU9ÿE9¼ÿE9¼ÿZK¦ÿ–kZÿ}QoÿE5·ÿE9¼ÿE9¼ÿ…kyÿ™cNÿ™cNÿ™cNÿ­ƒsÿĨžÿĨžÿb"Á¥›÷Ĩžÿ³‹{ÿ iSÿ iSÿ iSÿ iSÿ iSÿ iSÿ iSÿ iSÿ iSÿ iSÿ iSÿ iSÿ iSÿ iSÿ iSÿ iSÿ iSÿ iSÿ iSÿ iSÿ iSÿ iSÿ iSÿ iSÿ iSÿ iSÿ iSÿ iSÿ iSÿ iSÿ iSÿ iSÿ iSÿ iSÿ iSÿ iSÿ iSÿ iSÿ³‹{ÿĨžÿ¿£™úX¶›’ÒĨžÿ½šŒÿ¦oYÿ¦oYÿ¦oYÿ¦oYÿ¦oYÿ¦oYÿ¦oYÿ¦oYÿ¦oYÿ¦oYÿ¦oYÿ¦oYÿ¦oYÿ¦oYÿ¦oYÿ¦oYÿ¦oYÿ¦oYÿ¦oYÿ¦oYÿ¦oYÿ¦oYÿ¦oYÿ¦oYÿ¦oYÿ¦oYÿ¦oYÿ¦oYÿ¦oYÿ¦oYÿ¦oYÿ¦oYÿ¦oYÿ¦oYÿ¦oYÿ¦oYÿ¦oYÿ¦oYÿ½šŒÿĨžÿ©‡âI ª‘ˆ¤Ä¨žÿĨÿ´„qÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ´„qÿĨÿĨžÿ’}v¿2 o_Y9À¤šöĨÿä™ÿ¸ˆtÿ³{dÿ³{dÿ³{dÿ³{dÿ³{dÿ³{dÿ³{dÿ³{dÿ³{dÿ³{dÿ³{dÿ³{dÿ³{dÿ³{dÿ³{dÿ³{dÿ³{dÿ³{dÿ³{dÿ³{dÿ³{dÿ³{dÿ³{dÿ³{dÿ³{dÿ³{dÿ³{dÿ³{dÿ³{dÿ³{dÿ³{dÿ³{dÿ³{dÿ³{dÿ¸ˆtÿä™ÿĨÿ¿£™øA85ažˆ€|ĨÿĨÿĨÿÁŸ‘ÿ¿–†ÿ¾“‚ÿ¾“‚ÿ¾“‚ÿ¾“‚ÿ¾“‚ÿ¾“‚ÿ¾“‚ÿ¾“‚ÿ¾“‚ÿ¾“‚ÿ¾“‚ÿ¾“‚ÿ¾“‚ÿ¾“‚ÿ¾“‚ÿ¾“‚ÿ¾“‚ÿ¾“‚ÿ¾“‚ÿ¾“‚ÿ¾“‚ÿ¾“‚ÿ¾“‚ÿ¾“‚ÿ¾“‚ÿ¾“‚ÿ¾“‚ÿ¾“‚ÿ¾“‚ÿ¾“‚ÿ¿–†ÿÁŸ‘ÿĨÿĨÿĨÿ‚pj–$žˆ€|À¤šöĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿÀ¤š÷Šun" m]W:ª‘ˆ¤¶›’ÒÁ¥›÷ĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿÁ¥›÷´™Ô¤Œ„ªZMHF  (@€ B   !,5;>@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@>;5,! ":Qdqz~~zqdQ:"+ Psb]¥{tЫ’‰ëÁ¥›ýĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿÁ¥›ý©‡îŠunÛcTOÀ ‹mL++QEAt±˜èĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿ«’‰ð6/,­|T+ "‰tm•¦œüĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿÀ¤šþfWRÇ|L" eVQ^¦œüĨÿĨÿÀ£˜ÿiZÿpG7ÿY-ÿS&ÿS&ÿS&ÿS&ÿS&ÿS&ÿS&ÿS&ÿS&ÿS&ÿS&ÿS&ÿS&ÿS&ÿS&ÿS&ÿS&ÿS&ÿS&ÿS&ÿS&ÿS&ÿS&ÿS&ÿS&ÿS&ÿS&ÿS&ÿS&ÿS&ÿS&ÿS&ÿS&ÿS&ÿS&ÿS&ÿS&ÿS&ÿY-ÿpG7ÿiZÿÀ£˜ÿĨÿĨÿÀ¤šþ6/,­m:"&·œ“àĨžÿĨÿ®‚ÿb8'ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿR&ÿb8'ÿ®‚ÿĨÿĨžÿ«’‰ð ‹Q! ˜‚z}ĨžÿĨžÿÀ£˜ÿa7'ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿQ%ÿa7'ÿÀ£˜ÿĨžÿĨžÿcTOÀd, «“‹¯Ä¨žÿĨžÿŒhZÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿP%ÿŒhZÿĨžÿĨžÿŠunÚq5ºž”ÙĨžÿĨžÿmF7ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿO$ÿmF7ÿĨžÿĨžÿ©‡îy;çûĨžÿĨžÿT+ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿ8cÿ?‹'ÿCŽ-ÿCŽ-ÿK2ÿ]>1ÿN$ÿ8aÿ?‹'ÿCŽ-ÿCŽ-ÿK2ÿ]>1ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿQ'ÿoM?ÿ^8(ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿ_9*ÿyYLÿfA2ÿO%ÿN$ÿN$ÿN$ÿN$ÿN$ÿN$ÿT+ÿĨžÿĨžÿÁ¥›ý~>ĨžÿĨžÿĨžÿM#ÿM#ÿM#ÿM#ÿM#ÿM#ÿM#ÿM#ÿM#ÿIIÿ%ýÿÿ ÿÿ ÿÿ ÿÿ ÿh§jÿRS!ÿ&ýÿÿ ÿÿ ÿÿ ÿÿ ÿh§jÿV2$ÿM#ÿM#ÿM#ÿM#ÿM#ÿM#ÿW0!ÿÓÉÅÿŽsiÿM#ÿM#ÿM#ÿM#ÿW/ ÿ½­§ÿÓÉÅÿÒÇÃÿÓÉÅÿ©•ÿP'ÿM#ÿM#ÿM#ÿM#ÿM#ÿM#ÿĨžÿĨžÿĨžÿ@ĨžÿĨžÿĨžÿL#ÿL#ÿL#ÿL#ÿL#ÿL#ÿL#ÿL#ÿL$ÿhÌÿpÿÿ$ÿÿÿÿÿÿÿÿì/ÿ€Ÿfÿpÿÿ'ÿÿÿÿÿÿÿÿì/ÿyqjÿL#ÿL#ÿL#ÿL#ÿL#ÿL#ÿW0!ÿÓÉÅÿsiÿL#ÿL#ÿL#ÿL#ÿ‘xoÿÐÅÁÿkI<ÿP'ÿŒrgÿÓÉÅÿqQDÿL#ÿL#ÿL#ÿL#ÿL#ÿL#ÿĨžÿĨžÿĨžÿ@ĨžÿĨžÿĨžÿK"ÿK"ÿK"ÿK"ÿK"ÿK"ÿK"ÿK"ÿqu ÿ®ÿÿ®ÿÿšÿÿþ-ÿÿ-ÿÿ-ÿÿ-ÿMÀaÿ£Ú.ÿœÿÿþ,ÿÿ-ÿÿ-ÿÿ-ÿMÀaÿaE;ÿK"ÿK"ÿK"ÿK"ÿK"ÿV/!ÿÓÈÅÿsiÿK"ÿK"ÿK"ÿK"ÿlK>ÿqQEÿK"ÿQ)ÿŽtkÿÓÈÅÿsSHÿK"ÿK"ÿK"ÿK"ÿK"ÿK"ÿĨžÿĨžÿĨžÿ@ĨžÿĨžÿĨžÿJ"ÿJ"ÿJ"ÿJ"ÿJ"ÿJ"ÿJ"ÿS1ÿÅîÿÏÿÿÏÿÿÏÿÿWÚJÿÿ=ÿÿ=ÿÿ=ÿúAÿ…£vÿÌúÿ\ØKÿÿ=ÿÿ=ÿÿ=ÿúAÿwŒxÿM'ÿJ"ÿJ"ÿJ"ÿJ"ÿU/ ÿÒÈÄÿÐÆÂÿÏÄÀÿÏÄÀÿ«˜ÿJ"ÿJ"ÿmL@ÿª—ÿÏÅÁÿÒÈÄÿ± ™ÿO(ÿJ"ÿJ"ÿJ"ÿJ"ÿJ"ÿJ"ÿĨžÿĨžÿĨžÿ@ĨžÿĨžÿĨžÿI!ÿI!ÿI!ÿI!ÿI!ÿI!ÿI!ÿ¤¥ÿâÿÿâÿÿâÿÿÎå ÿtlbÿ ÞFÿÿNÿÿNÿÿNÿ0Øcÿ«¶Zÿukbÿ ÙEÿÿNÿÿNÿÿNÿ0ØcÿmZSÿI!ÿI!ÿI!ÿI!ÿT. ÿÒÈÄÿ£‡ÿxZOÿxZOÿkK?ÿI!ÿ`=0ÿÑÇÄÿɽ¸ÿš„|ÿmMAÿK$ÿI!ÿI!ÿI!ÿI!ÿI!ÿI!ÿI!ÿĨžÿĨžÿĨžÿ@ĨžÿĨžÿĨžÿH!ÿH!ÿH!ÿH!ÿH!ÿH!ÿmQÿôýÿöÿÿöÿÿõþÿœ›mÿO,ÿQ#ÿÿ_ÿÿ_ÿÿ_ÿÿ_ÿhª€ÿY;0ÿ6W%ÿÿ_ÿÿ_ÿÿ_ÿÿ_ÿg©~ÿS2%ÿH!ÿH!ÿH!ÿS. ÿÒÈÄÿ‹rhÿH!ÿH!ÿH!ÿH!ÿŽvmÿÏÅÁÿP+ÿH!ÿ†lbÿ¯—ÿN)ÿH!ÿH!ÿH!ÿH!ÿH!ÿH!ÿĨžÿĨžÿĨžÿ@ĨžÿĨžÿĨžÿG ÿG ÿG ÿG ÿG ÿI#ÿÜÄÿÿêÿÿêÿÿêÿÌÀ>ÿdNFÿI#ÿÜÄÿVøJÿÿoÿÿoÿÿoÿítÿwrlÿG ÿ¯MÿÿoÿÿoÿÿoÿítÿwrlÿG ÿG ÿG ÿR- ÿÒÈÄÿŸ´ÿ¸©¤ÿ¸©¤ÿ¸©¤ÿ`?3ÿfF:ÿÍÿÿÁ´¯ÿ²¡œÿÏÅÂÿ Œ„ÿG ÿG ÿG ÿG ÿG ÿG ÿG ÿĨžÿĨžÿĨžÿ@ĨžÿĨžÿĨžÿF ÿF ÿF ÿF ÿF ÿ•e ÿÿÂÿÿÂÿÿÂÿó¼ÿ†|oÿG"ÿ•e ÿÿÂÿäÈÿ ü{ÿÿ€ÿÿ€ÿÿ€ÿK†ÿ^E;ÿ@4ÿó{ÿÿ€ÿÿ€ÿÿ€ÿK†ÿ^E;ÿF ÿF ÿK&ÿ‡oeÿ‡oeÿ‡oeÿ‡oeÿ‡oeÿU1$ÿF ÿ_?2ÿŠriÿypÿhI=ÿH#ÿF ÿF ÿF ÿF ÿF ÿF ÿF ÿĨžÿĨžÿĨžÿ@ĨžÿĨžÿĨžÿEÿEÿEÿEÿW*ÿô“ÿÿšÿÿšÿÿšÿ²\ÿU7,ÿW*ÿô“ÿÿšÿÿšÿ‹ÈBÿÿÿÿÿÿÿúÿuÿI%ÿ'€HÿÿÿÿÿÿÿúÿuÿI%ÿEÿEÿEÿEÿEÿEÿEÿEÿEÿEÿEÿEÿEÿEÿEÿEÿEÿEÿEÿEÿEÿĨžÿĨžÿĨžÿ@ĨžÿĨžÿĨžÿDÿDÿDÿDÿ½Tÿÿqÿÿqÿÿqÿàx&ÿpa\ÿDÿ½TÿÿqÿÿqÿÿqÿÜ{(ÿå”ÿÿŸÿÿŸÿÿŸÿ.Ù™ÿkZTÿC"ÿ Ö†ÿÿŸÿÿŸÿÿŸÿ.Ù™ÿkZTÿDÿDÿDÿDÿDÿDÿDÿDÿDÿDÿDÿDÿDÿDÿDÿDÿDÿDÿDÿDÿDÿĨžÿĨžÿĨžÿ@ĨžÿĨžÿĨžÿF ÿF ÿF ÿv+ ÿÿHÿÿHÿÿHÿüJÿ˜{oÿK(ÿv+ ÿÿHÿÿHÿÿHÿüJÿ˜{oÿ8]?ÿÿªÿÿªÿÿªÿÿªÿeª“ÿR3'ÿ6T5ÿþªÿÿªÿÿªÿÿªÿeª“ÿR3'ÿF ÿF ÿF ÿF ÿF ÿF ÿF ÿF ÿF ÿF ÿF ÿF ÿF ÿF ÿF ÿF ÿF ÿF ÿF ÿF ÿĨžÿĨžÿĨžÿ@ĨžÿĨžÿĨžÿH!ÿH!ÿL!ÿã"ÿÿ ÿÿ ÿÿ ÿÆUEÿbI@ÿL!ÿã"ÿÿ ÿÿ ÿÿ ÿÆUEÿbI@ÿH!ÿ±zÿÿ´ÿÿ´ÿÿ´ÿî®ÿyuoÿH!ÿ«wÿÿ´ÿÿ´ÿÿ´ÿî®ÿyuoÿH!ÿH!ÿH!ÿH!ÿH!ÿH!ÿH!ÿH!ÿH!ÿH!ÿH!ÿH!ÿH!ÿH!ÿH!ÿH!ÿH!ÿH!ÿH!ÿH!ÿĨžÿĨžÿĨžÿ@ĨžÿĨžÿĨžÿI"ÿI"ÿV ÿ‚!ÿ‹.'ÿ‹.'ÿ‹.'ÿ`=2ÿJ#ÿV ÿ‚!ÿ‹.'ÿ‹.'ÿ‹.'ÿ`=2ÿJ#ÿI"ÿB7#ÿô·ÿÿ¿ÿÿ¿ÿÿ¿ÿIäÿ`G=ÿC5!ÿòµÿÿ¿ÿÿ¿ÿÿ¿ÿIäÿ`G=ÿI"ÿI"ÿI"ÿI"ÿI"ÿI"ÿI"ÿI"ÿI"ÿI"ÿI"ÿI"ÿI"ÿI"ÿI"ÿI"ÿI"ÿI"ÿI"ÿĨžÿĨžÿĨžÿ@ĨžÿĨžÿĨžÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿ*„cÿÿÉÿÿÉÿÿÉÿúÇÿu‘‰ÿO)ÿ,~`ÿÿÉÿÿÉÿÿÉÿúÇÿu‘‰ÿO)ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿK#ÿĨžÿĨžÿĨžÿ@ĨžÿĨžÿĨžÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿL'ÿسÿÿÔÿÿÔÿÿÔÿ,Û½ÿq_XÿL&ÿÕ°ÿÿÔÿÿÔÿÿÔÿ,Û½ÿq_XÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿM$ÿĨžÿĨžÿĨžÿ@ĨžÿĨžÿĨžÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿT@ÿþÝÿÿÞÿÿÞÿÿÞÿc«¢ÿZ7*ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿO%ÿĨžÿĨžÿĨžÿ@ĨžÿĨžÿĨžÿP&ÿP&ÿP&ÿP&ÿP&ÿP&ÿP&ÿP&ÿP&ÿP&ÿP&ÿP&ÿP&ÿP&ÿP&ÿP&ÿP&ÿP&ÿP&ÿP&ÿ®šÿÿèÿÿèÿÿèÿïÛÿzxsÿP&ÿª–ÿÿèÿÿèÿÿèÿïÛÿzxsÿP&ÿP&ÿP&ÿP&ÿP&ÿP&ÿP&ÿP&ÿP&ÿP&ÿP&ÿP&ÿP&ÿP&ÿP&ÿP&ÿP&ÿĨžÿĨžÿĨžÿ@ĨžÿĨžÿĨžÿR'ÿR'ÿR'ÿR'ÿR'ÿR'ÿR'ÿR'ÿR'ÿR'ÿR'ÿR'ÿR'ÿR'ÿR'ÿR'ÿR'ÿR'ÿR'ÿR'ÿK:*ÿòæÿÿóÿÿóÿÿóÿGÅ¿ÿhMCÿL8(ÿðäÿÿóÿÿóÿÿóÿGÅ¿ÿhMCÿR'ÿR'ÿR'ÿR'ÿR'ÿR'ÿR'ÿR'ÿR'ÿR'ÿR'ÿR'ÿR'ÿR'ÿR'ÿR'ÿĨžÿĨžÿĨžÿ@ĨžÿĨžÿĨžÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿ1‚wÿÿýÿÿýÿÿýÿûùÿv“‘ÿW.ÿ2tÿÿýÿÿýÿÿýÿûùÿv“‘ÿW.ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿT(ÿĨžÿĨžÿĨžÿ@ĨžÿĨžÿĨžÿU)ÿU)ÿU)ÿU)ÿU)ÿU)ÿU)ÿU)ÿU)ÿU)ÿU)ÿU)ÿU)ÿU)ÿU)ÿU)ÿU)ÿU)ÿU)ÿU)ÿU)ÿT+ÿÍÓÿôÿÿôÿÿôÿÿ*ÕÜÿtbZÿT+ÿÊÐÿôÿÿôÿÿôÿÿ*ÕÜÿtbZÿU)ÿU)ÿU)ÿU)ÿU)ÿU)ÿU)ÿU)ÿU)ÿU)ÿU)ÿU)ÿU)ÿU)ÿU)ÿĨžÿĨžÿĨžÿ@ĨžÿĨžÿĨžÿW*ÿW*ÿW*ÿW*ÿW*ÿW*ÿW*ÿW*ÿW*ÿW*ÿW*ÿW*ÿW*ÿW*ÿW*ÿW*ÿW*ÿW*ÿW*ÿW*ÿW*ÿW*ÿDTLÿåþÿæÿÿæÿÿæÿÿa¦­ÿa<.ÿEPHÿåýÿæÿÿæÿÿæÿÿa¦­ÿa<.ÿW*ÿW*ÿW*ÿW*ÿW*ÿW*ÿW*ÿW*ÿW*ÿW*ÿW*ÿW*ÿW*ÿW*ÿĨžÿĨžÿĨžÿ@ĨžÿĨžÿĨžÿY+ÿY+ÿY+ÿY+ÿY+ÿY+ÿY+ÿY+ÿY+ÿY+ÿY+ÿY+ÿY+ÿY+ÿY+ÿY+ÿY+ÿY+ÿY+ÿY+ÿY+ÿY+ÿY+ÿ#•¥ÿÙÿÿÙÿÿÙÿÿÏðÿ|zwÿZ,ÿ$’¢ÿÙÿÿÙÿÿÙÿÿÏðÿ|zwÿZ,ÿY+ÿY+ÿY+ÿY+ÿY+ÿY+ÿY+ÿY+ÿY+ÿY+ÿY+ÿY+ÿY+ÿĨžÿĨžÿĨžÿ@ĨžÿĨžÿĨžÿ[,ÿ[,ÿ[,ÿ[,ÿ[,ÿ[,ÿ[,ÿ[,ÿ[,ÿ[,ÿ[,ÿ[,ÿ[,ÿ[,ÿ[,ÿ[,ÿ[,ÿ[,ÿ[,ÿ[,ÿ[,ÿ[,ÿ[,ÿT8+ÿÁðÿËÿÿËÿÿËÿÿE¬ÆÿmPEÿU7*ÿÀïÿËÿÿËÿÿËÿÿE¬ÆÿmPEÿ[,ÿ[,ÿ[,ÿ[,ÿ[,ÿ[,ÿ[,ÿ[,ÿ[,ÿ[,ÿ[,ÿ[,ÿ[,ÿĨžÿĨžÿĨžÿ@ĨžÿĨžÿĨžÿ]-ÿ]-ÿ]-ÿ]-ÿ]-ÿ]-ÿ]-ÿ]-ÿ]-ÿ]-ÿ]-ÿ]-ÿ]-ÿ]-ÿ]-ÿ]-ÿ]-ÿ]-ÿ]-ÿ]-ÿ]-ÿ]-ÿ]-ÿ]-ÿ8gvÿ¾ÿÿ¾ÿÿ¾ÿÿ½üÿuŒ“ÿ`3"ÿ9ftÿ¾ÿÿ¾ÿÿ¾ÿÿ½üÿuŒ“ÿ`3"ÿ]-ÿ]-ÿ]-ÿ]-ÿ]-ÿ]-ÿ]-ÿ]-ÿ]-ÿ]-ÿ]-ÿ]-ÿĨžÿĨžÿĨžÿ@ĨžÿĨžÿĨžÿ^.ÿ^.ÿ^.ÿ^.ÿ^.ÿ^.ÿ^.ÿ^.ÿ^.ÿ^.ÿ^.ÿ^.ÿ^.ÿ^.ÿ^.ÿ^.ÿ^.ÿ^.ÿ^.ÿ^.ÿ^.ÿ^.ÿ^.ÿ^.ÿ]/ÿ•Ñÿ°ÿÿ°ÿÿ°ÿÿ(¦Þÿye^ÿ^/ÿ”Îÿ°ÿÿ°ÿÿ°ÿÿ(¦Þÿye^ÿ^.ÿ^.ÿ^.ÿ^.ÿ^.ÿ^.ÿ^.ÿ^.ÿ^.ÿ^.ÿ^.ÿ^.ÿĨžÿĨžÿĨžÿ@ĨžÿĨžÿĨžÿ`/ÿ`/ÿ`/ÿ`/ÿ`/ÿ`/ÿ`/ÿ`/ÿ`/ÿ`/ÿ`/ÿ`/ÿ`/ÿ`/ÿ`/ÿ`/ÿ`/ÿ`/ÿ`/ÿ`/ÿ`/ÿ`/ÿ`/ÿ`/ÿ`/ÿLFJÿ¢ýÿ£ÿÿ£ÿÿ£ÿÿ_“¯ÿiB2ÿMFIÿ¢ýÿ£ÿÿ£ÿÿ£ÿÿ_“¯ÿiB2ÿ`/ÿ`/ÿ`/ÿ`/ÿ`/ÿ`/ÿ`/ÿ`/ÿ`/ÿ`/ÿ`/ÿĨžÿĨžÿĨžÿ@ĨžÿĨžÿĨžÿb0ÿb0ÿb0ÿb0ÿb0ÿb0ÿb0ÿb0ÿb0ÿb0ÿb0ÿb0ÿb0ÿb0ÿb0ÿb0ÿb0ÿb0ÿb0ÿb0ÿb0ÿb0ÿb0ÿb0ÿb0ÿb0ÿ(m£ÿ–ÿÿ–ÿÿ–ÿÿ•ñÿ~zzÿc1ÿ)k ÿ–ÿÿ–ÿÿ–ÿÿ•ñÿ~zzÿc1ÿb0ÿb0ÿb0ÿb0ÿb0ÿb0ÿb0ÿb0ÿb0ÿb0ÿĨžÿĨžÿĨžÿ@ĨžÿĨžÿĨžÿg4!ÿg4!ÿg4!ÿg4!ÿg4!ÿg4!ÿg4!ÿg4!ÿg4!ÿg4!ÿg4!ÿg4!ÿg4!ÿg4!ÿg4!ÿg4!ÿg4!ÿg4!ÿg4!ÿg4!ÿg4!ÿg4!ÿg4!ÿg4!ÿg4!ÿg4!ÿ`:0ÿ ‚îÿˆÿÿˆÿÿˆÿÿCŠÈÿuVKÿa:/ÿ ‚íÿˆÿÿˆÿÿˆÿÿCŠÈÿuVKÿg4!ÿg4!ÿg4!ÿg4!ÿg4!ÿg4!ÿg4!ÿg4!ÿg4!ÿg4!ÿĨžÿĨžÿĨžÿ@ĨžÿĨžÿĨžÿk9%ÿk9%ÿk9%ÿk9%ÿk9%ÿk9%ÿk9%ÿk9%ÿk9%ÿk9%ÿk9%ÿk9%ÿk9%ÿk9%ÿk9%ÿk9%ÿk9%ÿk9%ÿk9%ÿk9%ÿk9%ÿk9%ÿk9%ÿk9%ÿk9%ÿk9%ÿk9%ÿBRyÿzÿÿzÿÿzÿÿzüÿv…—ÿm?,ÿCRwÿzÿÿzÿÿzÿÿzüÿv…—ÿm?,ÿk9%ÿk9%ÿk9%ÿk9%ÿk9%ÿk9%ÿk9%ÿk9%ÿk9%ÿĨžÿĨžÿĨžÿ@ĨžÿĨžÿĨžÿq=*ÿq=*ÿq=*ÿq=*ÿq=*ÿq=*ÿq=*ÿq=*ÿq=*ÿq=*ÿq=*ÿq=*ÿq=*ÿq=*ÿq=*ÿq=*ÿq=*ÿq=*ÿq=*ÿq=*ÿq=*ÿq=*ÿq=*ÿq=*ÿq=*ÿq=*ÿq=*ÿq=+ÿcÐÿmÿÿmÿÿmÿÿ&vßÿ‚mfÿq=+ÿcÎÿmÿÿmÿÿmÿÿ&vßÿ‚mfÿq=*ÿq=*ÿq=*ÿq=*ÿq=*ÿq=*ÿq=*ÿq=*ÿq=*ÿĨžÿĨžÿĨžÿ@ĨžÿĨžÿĨžÿvB.ÿvB.ÿvB.ÿvB.ÿvB.ÿvB.ÿvB.ÿvB.ÿvB.ÿvB.ÿvB.ÿvB.ÿvB.ÿvB.ÿvB.ÿvB.ÿvB.ÿvB.ÿvB.ÿvB.ÿvB.ÿvB.ÿvB.ÿvB.ÿvB.ÿvB.ÿvB.ÿvB.ÿ`HUÿ_üÿ_ÿÿ_ÿÿ_ÿÿ]}±ÿ{RBÿ`HUÿ_üÿ_ÿÿ_ÿÿ_ÿÿ]}±ÿ{RBÿvB.ÿvB.ÿvB.ÿvB.ÿvB.ÿvB.ÿvB.ÿvB.ÿĨžÿĨžÿĨžÿ@ĨžÿĨžÿĨžÿ{G3ÿ{G3ÿ{G3ÿ{G3ÿ{G3ÿ{G3ÿ{G3ÿ{G3ÿ{G3ÿ{G3ÿ{G3ÿ{G3ÿ{G3ÿ{G3ÿ{G3ÿ{G3ÿ{G3ÿ{G3ÿ{G3ÿ{G3ÿ{G3ÿ{G3ÿ{G3ÿ{G3ÿ{G3ÿ{G3ÿ{G3ÿ{G3ÿ{G3ÿ5M¨ÿRÿÿRÿÿRÿÿXòÿƒ}€ÿ{G4ÿ5N§ÿRÿÿRÿÿRÿÿXòÿƒ}€ÿ{G4ÿ{G3ÿ{G3ÿ{G3ÿ{G3ÿ{G3ÿ{G3ÿ{G3ÿĨžÿĨžÿĨžÿ@ĨžÿĨžÿĨžÿ€K7ÿ€K7ÿ€K7ÿ€K7ÿ€K7ÿ€K7ÿ€K7ÿ€K7ÿ€K7ÿ€K7ÿ€K7ÿ€K7ÿ€K7ÿ€K7ÿ€K7ÿ€K7ÿ€K7ÿ€K7ÿ€K7ÿ€K7ÿ€K7ÿ€K7ÿ€K7ÿ€K7ÿ€K7ÿ€K7ÿ€K7ÿ€K7ÿ€K7ÿxKCÿ EîÿDÿÿDÿÿDÿÿAeÊÿ…fZÿxKCÿ EîÿDÿÿDÿÿDÿÿAeÊÿ…fZÿ€K7ÿ€K7ÿ€K7ÿ€K7ÿ€K7ÿ€K7ÿ€K7ÿĨžÿĨžÿĨžÿ@ĨžÿĨžÿĨžÿ…P;ÿ…P;ÿ…P;ÿ…P;ÿ…P;ÿ…P;ÿ…P;ÿ…P;ÿ…P;ÿ…P;ÿ…P;ÿ…P;ÿ…P;ÿ…P;ÿ…P;ÿ…P;ÿ…P;ÿ…P;ÿ…P;ÿ…P;ÿ…P;ÿ…P;ÿ…P;ÿ…P;ÿ…P;ÿ…P;ÿ…P;ÿ…P;ÿ…P;ÿ…P;ÿTG‚ÿ7ÿÿ7ÿÿ7ÿÿ9ýÿu{šÿ†UBÿUG‚ÿ7ÿÿ7ÿÿ7ÿÿ9ýÿu{šÿ†UBÿ…P;ÿ…P;ÿ…P;ÿ…P;ÿ…P;ÿ…P;ÿĨžÿĨžÿĨžÿ@ĨžÿĨžÿĨžÿŠU@ÿŠU@ÿŠU@ÿŠU@ÿŠU@ÿŠU@ÿŠU@ÿŠU@ÿŠU@ÿŠU@ÿŠU@ÿŠU@ÿŠU@ÿŠU@ÿŠU@ÿŠU@ÿŠU@ÿŠU@ÿŠU@ÿŠU@ÿŠU@ÿŠU@ÿŠU@ÿŠU@ÿŠU@ÿŠU@ÿŠU@ÿŠU@ÿŠU@ÿŠU@ÿŠU@ÿ!4Òÿ)ÿÿ)ÿÿ)ÿÿ$Cáÿ‹woÿŠU@ÿ!4Ñÿ)ÿÿ)ÿÿ)ÿÿ$Cáÿ‹woÿŠU@ÿŠU@ÿŠU@ÿŠU@ÿŠU@ÿŠU@ÿĨžÿĨžÿĨžÿ@ĨžÿĨžÿĨžÿYDÿYDÿYDÿYDÿYDÿYDÿYDÿYDÿYDÿYDÿYDÿYDÿYDÿYDÿYDÿYDÿYDÿYDÿYDÿYDÿYDÿYDÿYDÿYDÿYDÿYDÿYDÿYDÿYDÿYDÿYDÿvOdÿýÿÿÿÿÿÿÿ\e³ÿŽdTÿvOdÿýÿÿÿÿÿÿÿ\e³ÿŽdTÿYDÿYDÿYDÿYDÿYDÿĨžÿĨžÿĨžÿ@ĨžÿĨžÿĨžÿ”^Iÿ”^Iÿ”^Iÿ”^Iÿ”^Iÿ”^Iÿ”^Iÿ”^Iÿ”^Iÿ”^Iÿ”^Iÿ”^Iÿ”^Iÿ”^Iÿ”^Iÿ”^Iÿ”^Iÿ”^Iÿ”^Iÿ”^Iÿ”^Iÿ”^Iÿ”^Iÿ”^Iÿ”^Iÿ”^Iÿ”^Iÿ”^Iÿ”^Iÿ”^Iÿ”^Iÿ”^IÿB2®ÿÿÿÿÿÿÿóÿ‡~†ÿ”_JÿB2®ÿÿÿÿÿÿÿóÿ‡~†ÿ”_Jÿ”^Iÿ”^Iÿ”^Iÿ”^IÿĨžÿĨžÿĨžÿ~>ĨžÿĨžÿĨžÿ™bMÿ™bMÿ™bMÿ™bMÿ™bMÿ™bMÿ™bMÿ™bMÿ™bMÿ™bMÿ™bMÿ™bMÿ™bMÿ™bMÿ™bMÿ™bMÿ™bMÿ™bMÿ™bMÿ™bMÿ™bMÿ™bMÿ™bMÿ™bMÿ™bMÿ™bMÿ™bMÿ™bMÿ™bMÿ™bMÿ™bMÿ™bMÿ‘]Vÿ:'¼ÿ6.Ìÿ6.Ìÿ6.Ìÿi[šÿ—jYÿ‘]Vÿ:'¼ÿ6.Ìÿ6.Ìÿ6.Ìÿi[šÿ—jYÿ™bMÿ™bMÿ™bMÿ™bMÿĨžÿĨžÿĨžÿy;çûĨžÿĨžÿ kVÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿžgRÿ kVÿĨžÿĨžÿÁ¥›ýp5 ¼ –ÖĨžÿĨžÿ«{hÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ£lVÿ«{hÿĨžÿĨžÿ«’‰ëd, ³š‘§Ä¨žÿĨžÿ¶|ÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¨qZÿ¶|ÿĨžÿĨžÿ’|tÏQ!­”‹nĨžÿĨžÿæ›ÿ°|hÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ­u_ÿ°|hÿæ›ÿĨžÿĨžÿsb]¥9OC?¾¢˜ØÄ¨žÿĨÿÀŸ’ÿµ€kÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿ²zcÿµ€kÿÀŸ’ÿĨÿĨžÿ±˜è P" ›…}=çûĨÿĨÿħ›ÿ¾”ƒÿº‰vÿ¸kÿ·hÿ·hÿ·hÿ·hÿ·hÿ·hÿ·hÿ·hÿ·hÿ·hÿ·hÿ·hÿ·hÿ·hÿ·hÿ·hÿ·hÿ·hÿ·hÿ·hÿ·hÿ·hÿ·hÿ·hÿ·hÿ·hÿ·hÿ·hÿ·hÿ·hÿ·hÿ·hÿ·hÿ·hÿ·hÿ·hÿ·hÿ·hÿ¸kÿº‰vÿ¾”ƒÿħ›ÿĨÿĨÿ¦œüRFBs+±–sçûĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿ¦œü‰tm•+›…}=¾¢˜ØÄ¨žÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿ·œ“àeVQ^"OC?­”‹n³š‘§¼ –ÖçûĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿĨžÿçûºž”Ù«“‹¯˜‚z}"&   fs-uae-2.2.3+dfsg/README0000644000175000017500000002540212162366655014740 0ustar glaubitzglaubitzFS-UAE 2.2.3 README =================== FS-UAE is an Amiga emulator for Windows, Linux and Mac OS X based on UAE/WinUAE, with a focus on emulating games. Features include emulation of Amiga 500, 1200, 4000, CD32 and CDTV, perfectly smooth scrolling on 50Hz displays, support for floppy images in ADF and IPF formats, CD-ROM images in ISO or BIN/CUE format, mounting folders on your computer as Amiga hard drives, support for Picasso 96 drivers for high-color and high-resolution Workbench displays, and more... A unique feature is support for cross-platform online play. You can now play Amiga games against (or with) friends over the Internet. The emulator uses the latest Amiga emulation code from the WinUAE project and requires a moderately fast computer with accelerated graphics (OpenGL) to work. A game pad or joystick is recommended, but not required (FS-UAE can emulate a joystick using the cursor keys and right ctrl/alt keys). The official home page of FS-UAE is: http://fengestad.no/fs-uae/ Thank you for your interest in FS-UAE :) IMPORTANT INFORMATION ===================== FS-UAE itself does not include a configuration UI, so you must either: * Run FS-UAE via the configuration program FS-UAE Launcher. * Create a configuration file before the emulator will be usable. This is fairly easy, please read on for more information. * Run FS-UAE from a third-party configuration interface / frontend. Please report any errors found in the documentation to fs-uae@fengestad.no. CONFIGURATION FILE ================== You will also need to create a configuration file for FS-UAE. The important things you need to configure is what floppy disks to use, and where the Kickstart ROMs are stored. Documentation (and examples) is available here: http://fengestad.no/wp/fs-uae/documentation You have several options for where to store the configuration file: 1. In the same directory as the FS-UAE executable, as Config.fs-uae. FS-UAE will always try to load this file first. 2. As a per-user configuration file: (My) Documents/FS-UAE/Configurations/Default.fs-uae 3. You can also store the file anywhere you want, and invoke FS-UAE with the config file as a parameter (fs-uae /path/to/config-file.fs-uae) 4. In graphical shells (Windows Explorer, Mac OS Finder), you can also select a configuration file, and then choose to open it in FS-UAE (you may need to browse to find the program), or you may also drag and drop a configuration file in top of the FS-UAE application/executable. (you can see in the log file exactly what path FS-UAE tries to load the default configuration from on your system) KICKSTART ========= You will need Kickstart ROMs for the Amigas you want to emulate. One source for this is your real Amiga, but you can also purchase the Kickstart ROMs in file format from Cloanto - they are bundled with their Amiga Forever product. JOYSTICKS ========= If you have a recognized joystick connected, FS-UAE will automatically try to use this as the primary Amiga joystick. Otherwise, keyboard joystick emulation will be enabled, where the cursor keys and the right control (right alt on Mac) on your keyboard controls the joystick. FS-UAE does not (currently) support two keyboard-emulated joysticks. If you want to use two Amiga joysticks, you need to have at least one real joystick or gamepad. You can specify which joystick to use for each Amiga joystick port in the configuration file, and you can also change this during runtime from the FS-UAE menu. Information about supported controllers here: http://fengestad.no/wp/fs-uae/controllers If your joystick is not recognized by FS-UAE (you can see this in the log file), you can create a configuration file for it. See http://fengestad.no/wp/fs-uae/custom-controller-configuration If you create a configuration file, I would appreciate it if you would send a copy to fs-uae@fengestad.no with the producer and model name of the joystick/gamepad (for inclusing in future versions of FS-UAE). EMULATOR MENU ============= While running the emulator, you press F12 to enter and exit the emulator menu. From here, you can load and save states, and swap floppy disks. On Mac OS X, you can use Cmd+F12 instead (Possibly even Fn+Cmd+F12). With gamepads, you enter the menu either by using the dedicated "menu" button, if the gamepad has one, or you press and hold "start" and "selected" at the same time (or equivalent buttons). You use the same key/button to dismiss the menu. In the menu, you use the following keys for navigation: Cursor keys Enter (choose item, enter sub-menu) Back-space (leave sub-menu) On the game pad, you can use either the hat or the primary analog stick for navigation. You choose items and enter sub-menus with the "primary" button on the game pad. This is generally the "south" button on the right side of the controller. The back button is the "east" button (Just like you would navigate on the Xbox). SCREENSHOTS =========== Press the "Print Scrn" key on the keyboard to save a screenshot of the running game to the desktop. Alternatively, you can use F12+s if you don't have this key. KEYBOARD SHORTCUTS ================== F12 (or Cmd+F12) -Enter/exit GUI. F12+G or Middle mouse click – release input grab. Alt+Tab (or Cmd+Tab) – switch to another window / release input grab. F12+F (or Alt+Enter / Cmd+Enter) – toggle fullscreen mode. F11 (or Cmd+F11) – cycle through zoom settings. Shift + F11 – zoom out a bit (pad the viewport on all sides). PROGRAM ARGUMENTS ================= Use a custom configuration file instead of Default.fs-uae You can also specify any configuration option with --key=value (e.g --floppy-drive-0=/path/to/adf) Some options commonly used as program arguments: --fullscreen Start in fullscreen mode instead of windowed mode --stdout Also log to stdout (not on Windows) LOG FILE AND REPORTING PROBLEMS =============================== A log file is stored as (My) Documents/FS-UAE/Logs/FS-UAE.log When reporting a problem, you should include this log file with you error report. FLOPPY DISKS ============ New data is always saved to overlay ADF files (.sdf). As an example, if you have floppy.adf insert into df0 and the Amiga writes to df0, the data is written to floppy.sdf instead of modifying floppy.adf itself. You need both floppy.adf and floppy.sdf to represent the entire modified disk. The save files are created on demand (when data is written to a drive). The floppy file overlays are by default save in the directory (My) Documents/FS-UAE/Floppy Overlays The GUI does not allow you to browse for files on the file system. Disks can be inserted at startup time (specified in the configuration file), and FS-UAE maintains a list of available floppy images to insert (also specified in the configuration file). See example.conf for more information. SUPPORTED AMIGA MODELS ====================== The following Amiga models are supported: - A1000 - Amiga 1000 - A500 - Amiga 500 (Default) - A500+ - Amiga 500+ - A600 - Amiga 600 - A1200 - Amiga 1200 - A1200/020 Amiga 1200 with full 68020 CPU - A4000/040 Amiga 4000 with 68040 CPU - CD32 - Amiga CD32 - CDTV - Commodore CDTV The default configurations corresponds to the quickstarts in WinUAE for these systems, on the most compatible setting (cycle-exact mode). DISPLAY REFRESH RATE AND RESOLUTION =================================== For really smooth scrolling in games, your display MUST run at the same refresh rate as the Amiga: 50Hz (PAL). Many monitors and TVs with 1920x1080 resolution supports this refresh rate. If FS-UAE detects that you display is running at 50Hz, vsync will automatically be enabled for perfect scrolling. FS-UAE will (not yet) on its own change your refresh rate to 50Hz -you must do this yourself before starting FS-UAE. If you run your display with another refresh rate, the emulator will still work just fine, but scrolling will be somewhat jerky -it varies with games whether this is very noticable or not. Note: On Mac OS X, FS-UAE does not currently detect the refresh rate, which means that full vsync will not be enabled. If you are running at 50Hz, you can force vsync with --video-sync=full FS-UAE will use whatever full-screen resolution you desktop is using, and will assume that you have square pixels. The Amiga image will be scaled to fit the display, and you can choose whether to stretch to fill the entire screen, or scale up while maintaining the original aspect ratio. SUPPORTED HOST OPERATING SYSTEM =============================== - Linux - Windows XP or newer - Mac OS X 10.5 or newer - FreeBSD (Other Unices will probably also work just fine) DEBUGGING SUPPORT ================= FS-UAE does not include a graphical debugger for debugging Amiga programs. It is possible to use the internal UAE debugger from the console. For debugging FS-UAE itself, a native debugger can be used if you compile FS-UAE yourself. Other debug information can be retrieved from the log file. There is debug overlay to debug video, audio and vsync issues. You can toggle the display of this with CTRL+F10. FS-UAE automatically crops the Amiga video output. Sometimes this does not work perfectly. You can override this behaviour in the configuration file. Also, you can press CTRL+F11 when running to visually see the entire amiga output with the crop rectangle. KNOWN ISSUES / TODO =================== Amiga mouse must currently be emulated with a native mouse device. A nice feature would be to be able to emulate the mouse with gamepads - analogue controls for instance. An on-screen keyboard, controllable with a game pad / joystick would also be nice, and is planned for a future version. Floppy list UI does not support scrolling, so if you have many floppy images in the floppy list, some may be obscured. COPYRIGHT AND CREDITS ===================== FS-UAE is Copyright (c) 2011-2013, Frode Solheim Large portions are copyrighted by other individuals. FS-UAE is based on the fantastic work of the original UAE authors, the authors of WinUAE, contributions from external contributors as well as some code from E-UAE and P-UAE. See http://fengestad.no/fs-uae/contributions for an updated list of people having contributed patches, translations and donations. UAE was created by Bernd Schmidt, with the help of a host of volunteer contributors (see the UAE distribution for full credits). WinUAE has been developed and maintained by Mathias Ortmann and Toni Wilen. Toni Wilen has developed WinUAE for the last years and is the current maintainer. E-UAE was developed by Richard Drummond (no longer maintained), and P-UAE is developed by Mustafa "GnoStiC" TUFAN. http://www.amigaemulator.org/ http://www.winuae.net/ http://www.rcdrummond.net/uae/ https://github.com/GnoStiC/PUAE http://www.softpres.org/ libfsemu is Copyright (c) 2011-2013, Frode Solheim IPF decoder library is Copyright (c) 2001-2011 by István Fábián with additional work by Christian Sauer. fs-uae-2.2.3+dfsg/macosx/0000755000175000017500000000000012162366653015345 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/macosx/template/0000755000175000017500000000000012162366653017160 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/macosx/template/Contents/0000755000175000017500000000000012162366653020755 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/macosx/template/Contents/Info.plist0000644000175000017500000000300312162366653022721 0ustar glaubitzglaubitz CFBundleDevelopmentRegion English CFBundleDisplayName FS-UAE CFBundleDocumentTypes CFBundleTypeExtensions fs-uae CFBundleTypeRole Viewer CFBundleTypeName FS-UAE Configuration CFBundleTypeIconFile fs-uae-config.icns CFBundleExecutable fs-uae CFBundleIconFile fs-uae.icns CFBundleIdentifier no.fengestad.fs-uae CFBundleInfoDictionaryVersion 6.0 CFBundleName FS-UAE CFBundlePackageType APPL CFBundleShortVersionString 2.2.3 CFBundleSignature ???? CFBundleVersion 2.2.3 LSHasLocalizedDisplayName LSMinimumSystemVersion 10.5.0 NSAppleScriptEnabled NSHumanReadableCopyright Copyright 2011-2012 Frode Solheim NSMainNibFile NSPrincipalClass NSApplication fs-uae-2.2.3+dfsg/macosx/template/Contents/PkgInfo0000644000175000017500000000001012162366653022224 0ustar glaubitzglaubitzAPPL????fs-uae-2.2.3+dfsg/macosx/fix-app.py0000644000175000017500000000476012162366653017272 0ustar glaubitzglaubitzfrom __future__ import division from __future__ import print_function from __future__ import absolute_import import os import sys import time import shutil import tempfile import subprocess libraries = [ "libSDL-1.2.0.dylib", "libglib-2.0.0.dylib", "libgthread-2.0.0.dylib", "libintl.8.dylib", "libpng15.15.dylib", "libz.1.dylib", "libiconv.2.dylib", "libfreetype.6.dylib", ] def copy_libs(): for name in libraries: if os.path.exists("/usr/local/lib/" + name): print("/usr/local/lib/" + name) shutil.copy2("/usr/local/lib/" + name, "fs-uae.app/Contents/Frameworks/" + name) else: print("/opt/local/lib/" + name) shutil.copy2("/opt/local/lib/" + name, "fs-uae.app/Contents/Frameworks/" + name) def fix_libs(path): print("fixing", path) if not os.path.exists(path): raise Exception("could not find " + repr(path)) args = ["otool", "-L", path] p = subprocess.Popen(args, stdout=subprocess.PIPE) data = p.stdout.read() p.wait() for line in data.split('\n'): line = line.strip() if not line: continue if line.startswith('/opt/local/lib/') or line.startswith('/usr/local/lib/'): old = line.split(' ')[0] old_dir, name = os.path.split(old) new = old.replace(old, '@executable_path/../Frameworks/' + name) args = ["install_name_tool", "-change", old, new, path] print(args) p = subprocess.Popen(args) assert p.wait() == 0 #def fix_deps(): # print("fix update deps") # source_dir = "/opt/local/lib" # dest_dir = os.path.join(get_bundle_dir(), "Contents", "Frameworks") # #names = ["libcrypto.1.0.0.dylib", "libcurl.4.dylib"] # names = ["libcurl.4.dylib"] # for name in names: # source = os.path.join(source_dir, name) # dest = os.path.join(dest_dir, name) # shutil.copy2(source, dest) # fix_libs(dest) # fix_libs(os.path.join(get_bundle_dir(), "Contents", "MacOS", "fs-uae")) for dir_name in os.listdir("."): org_dir = os.getcwd() if os.path.isdir(dir_name) and dir_name.startswith("fs-uae-"): os.chdir(dir_name) copy_libs() for name in libraries: fix_libs("fs-uae.app/Contents/Frameworks/" + name) fix_libs("fs-uae.app/Contents/Frameworks/libfs-capsimage.dylib") fix_libs("fs-uae.app/Contents/MacOS/fs-uae") os.chdir(org_dir) fs-uae-2.2.3+dfsg/macosx/Makefile0000644000175000017500000000330012162366653017001 0ustar glaubitzglaubitzinclude ../common.mk version = $(strip $(shell cat ../VERSION)) bindist: bundle python fix-app.py cp -pPR ../licenses fs-uae-$(version)-macosx/ cp ../COPYING fs-uae-$(version)-macosx/ cp ../README fs-uae-$(version)-macosx/ cp ../example.conf fs-uae-$(version)-macosx/ GZIP=-9 tar zcfv fs-uae-$(version)-macosx.tar.gz fs-uae-$(version)-macosx bundle: make -C .. rm -Rf fs-uae-$(version)-macosx mkdir -p fs-uae-$(version)-macosx mkdir -p fs-uae-$(version)-macosx/FS-UAE.app/Contents/Frameworks mkdir -p fs-uae-$(version)-macosx/FS-UAE.app/Contents/MacOS mkdir -p fs-uae-$(version)-macosx/FS-UAE.app/Contents/Resources cp -pPR template/* fs-uae-$(version)-macosx/FS-UAE.app/ cp ../fs-uae fs-uae-$(version)-macosx/FS-UAE.app/Contents/MacOS cp ../../libfs-capsimage.dylib fs-uae-$(version)-macosx/FS-UAE.app/Contents/Frameworks || cp ../libfs-capsimage.dylib fs-uae-$(version)-macosx/FS-UAE.app/Contents/Frameworks cp -pPR ../share/* fs-uae-$(version)-macosx/FS-UAE.app/Contents/Resources strip fs-uae-$(version)-macosx/FS-UAE.app/Contents/MacOS/* #strip fs-uae-$(version)-macosx/FS-UAE.app/Contents/Frameworks/* cp ../icon/fs-uae.icns fs-uae-$(version)-macosx/FS-UAE.app/Contents/Resources/ cp ../icon/fs-uae-config.icns fs-uae-$(version)-macosx/FS-UAE.app/Contents/Resources/ launcher: make -C ../launcher -f Makefile.mk mkdir -p fs-uae-$(version)-macosx cd ../launcher && python2.7 setup_py2app.py py2app --iconfile ../icon/fs-uae-launcher.icns mv ../launcher/dist/"FS-UAE Launcher.app" fs-uae-$(version)-macosx/ cp -pPR ../launcher/share/* fs-uae-$(version)-macosx/"FS-UAE Launcher.app"/Contents/Resources bindist-plus: GZIP=-9 tar zcfv fs-uae-plus-$(version)-macosx.tar.gz fs-uae-$(version)-macosx fs-uae-2.2.3+dfsg/obj/0000755000175000017500000000000012162366653014625 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/obj/.dummy0000644000175000017500000000000012162366653015747 0ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/debian/0000755000175000017500000000000012162366654015276 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/debian/source/0000755000175000017500000000000012162366654016576 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/debian/source/format0000644000175000017500000000001412162366654020004 0ustar glaubitzglaubitz3.0 (quilt) fs-uae-2.2.3+dfsg/debian/control0000644000175000017500000000130012162366654016673 0ustar glaubitzglaubitzSource: fs-uae Section: otherosfs Priority: extra Maintainer: Frode Solheim Build-Depends: debhelper (>= 7.0.50~), libsdl1.2-dev, libglib2.0-dev, libopenal-dev, gettext, libfreetype6-dev Standards-Version: 3.8.4 Homepage: http://www.fengestad.no/fs-uae #Vcs-Git: git://git.debian.org/collab-maint/fs-uae.git #Vcs-Browser: http://git.debian.org/?p=collab-maint/fs-uae.git;a=summary Package: fs-uae Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Description: Cross-platform Amiga emulator based on UAE/WinUAE FS-UAE is a cross-platform Amiga emulator based on updated emulation code from WinUAE. FS-UAE uses SDL for input, OpenAL for audio and OpenGL for graphics. fs-uae-2.2.3+dfsg/debian/compat0000644000175000017500000000000212162366654016474 0ustar glaubitzglaubitz7 fs-uae-2.2.3+dfsg/debian/rules0000755000175000017500000000067212162366654016363 0ustar glaubitzglaubitz#!/usr/bin/make -f # -*- makefile -*- # Sample debian/rules that uses debhelper. # This file was originally written by Joey Hess and Craig Small. # As a special exception, when this file is copied by dh-make into a # dh-make output file, you may use that output file without restriction. # This special exception was added by Craig Small in version 0.37 of dh-make. # Uncomment this to turn on verbose mode. #export DH_VERBOSE=1 %: dh $@ fs-uae-2.2.3+dfsg/debian/copyright0000644000175000017500000000230312162366654017227 0ustar glaubitzglaubitzThis work was packaged for Debian by: Frode Solheim on Mon, 07 Nov 2011 23:26:15 +0100 It was downloaded from: http://www.fengestad.no/fs-uae/ Upstream Author(s): Frode Solheim Copyright: Copyright (C) 2010-2012 Frode Solheim License: This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this package; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. The Debian packaging is: Copyright (C) 2011 Frode Solheim and is licensed under the GPL version 2, see "/usr/share/common-licenses/GPL-2". fs-uae-2.2.3+dfsg/debian/changelog0000644000175000017500000000251612162366654017154 0ustar glaubitzglaubitzfs-uae (2.2.3-0) unstable; urgency=low * Updated to upstream version 2.2.3 -- Frode Solheim Sat, 11 Feb 2011 12:41:00 +0100 fs-uae (0.9.7-0) unstable; urgency=low * Updated to upstream version 0.9.7 -- Frode Solheim Sat, 11 Feb 2011 12:41:00 +0100 fs-uae (0.9.6-0) unstable; urgency=low * Updated to upstream version 0.9.6 -- Frode Solheim Thu, 09 Feb 2011 21:25:00 +0100 fs-uae (0.9.5-0) unstable; urgency=low * Updated to upstream version 0.9.5 -- Frode Solheim Wed, 08 Feb 2011 00:00:00 +0100 fs-uae (0.9.4-0) unstable; urgency=low * Updated to upstream version 0.9.4 -- Frode Solheim Mon, 06 Feb 2011 19:56:00 +0100 fs-uae (0.9.3-0) unstable; urgency=low * Updated to upstream version 0.9.3 -- Frode Solheim Sun, 05 Feb 2011 18:57:00 +0100 fs-uae (0.9.2-0) unstable; urgency=low * Updated to upstream version 0.9.2 -- Frode Solheim Sun, 05 Feb 2011 12:40:00 +0100 fs-uae (0.9.1-0) unstable; urgency=low * Updated to upstream version 0.9.1 -- Frode Solheim Sat, 04 Feb 2011 22:24:00 +0100 fs-uae (0.9.0-0) unstable; urgency=low * Initial release -- Frode Solheim Mon, 07 Nov 2011 23:26:15 +0100 fs-uae-2.2.3+dfsg/fs-uae.spec0000644000175000017500000000463712162366654016122 0ustar glaubitzglaubitzName: fs-uae Version: 2.2.3 Release: 1%{?dist} Summary: Amiga emulator with on-screen GUI and online play support License: GPL-2.0+ Group: System/Emulators/Other Url: http://fengestad.no/fs-uae/ Source0: http://fengestad.no/fs-uae/files/%{version}/fs-uae-%{version}.tar.gz %if 0%{?suse_version} BuildRequires: fdupes %endif BuildRequires: gcc-c++ BuildRequires: hicolor-icon-theme BuildRequires: pkgconfig(gl) BuildRequires: pkgconfig(glib-2.0) BuildRequires: pkgconfig(glu) BuildRequires: pkgconfig(gthread-2.0) BuildRequires: pkgconfig(libpng) BuildRequires: pkgconfig(openal) BuildRequires: pkgconfig(sdl) BuildRequires: pkgconfig(x11) BuildRequires: pkgconfig(zlib) BuildRequires: pkgconfig(freetype2) %description FS-UAE is an Amiga emulator for Windows, Linux and Mac OS X based on UAE/WinUAE, with a focus on emulating games. Features include emulation of Amiga 500, 1200, 4000, CD32 and CDTV, perfectly smooth scrolling on 50Hz displays, support for floppy images in ADF and IPF formats, CD-ROM images in ISO or BIN/CUE format, mounting folders on your computer as Amiga hard drives, support for Picasso 96 drivers for high-color and high-resolution Workbench displays, and more. A unique feature is support for cross-platform online play. You can now play Amiga games against (or with) friends over the Internet. The emulator uses the latest Amiga emulation code from the WinUAE project and requires a moderately fast computer with accelerated graphics (OpenGL) to work. A game pad or joystick is recommended, but not required (FS-UAE can emulate a joystick using the cursor keys and right ctrl/alt keys). libfs-capsimage is needed for IPF floppy image support. %prep %setup -q %build CFLAGS='%{optflags}' CXXFLAGS='%{optflags}' %if 0%{?mandriva_version} CFLAGS="${CFLAGS} -Wno-error=format-security" CXXFLAGS="${CXXFLAGS} -Wno-error=format-security" %endif export CFLAGS; export CXXFLAGS make %{?_smp_mflags} %install %make_install docdir='%{_defaultdocdir}/fs-uae/' %find_lang %{name} %if 0%{?suse_version} %fdupes %{buildroot}%{_datadir}/fs-uae/ %endif %if 0%{?suse_version} %post %icon_theme_cache_post %postun %icon_theme_cache_postun %endif %files -f %{name}.lang %defattr(0644,root,root,0755) %attr(0755,root,root) %{_bindir}/fs-uae %{_datadir}/fs-uae/ %{_defaultdocdir}/fs-uae/ %{_datadir}/applications/fs-uae.desktop %{_datadir}/icons/*/*/*/* %changelog fs-uae-2.2.3+dfsg/COPYING0000644000175000017500000004325412162366655015120 0ustar glaubitzglaubitz GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. fs-uae-2.2.3+dfsg/server/0000755000175000017500000000000012162366654015362 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/server/fs_uae_netplay_server/0000755000175000017500000000000012162366654021746 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/server/fs_uae_netplay_server/__init__.py0000644000175000017500000000000012162366654024045 0ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/server/fs_uae_netplay_server/service.py0000644000175000017500000001422012162366654023757 0ustar glaubitzglaubitz""" FS-UAE Netplay Service Copyright (C) 2012 Frode Solheim This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA """ from __future__ import print_function import os import sys import uuid import time import random import tempfile import traceback import threading import subprocess import BaseHTTPServer max_games = 30 server_host = "" server_port = 25101 ports_from = 25102 ports_to = 25499 log_dir = "" service_password = "" addresses = "127.0.0.1" for arg in sys.argv[1:]: temp = arg.split("=", 1) key = temp[0] if len(temp) == 2: value = temp[1] else: value = "" if key == "--max-games": max_games = int(value) if key == "--port": server_port = int(value) if key == "--ports-from": ports_from = int(value) if key == "--ports-to": ports_to = int(value) if key == "--log-dir": log_dir = value if key == "--password": service_password = value if key == "--addresses": addresses = value print("addresses: ", addresses) print("max games: ", max_games) print("ports from: ", ports_from) print("ports to: ", ports_to) print("log dir: ", log_dir) print("password: ", service_password) password_chars = "abcdefghijklmnopqrstuvwxyz" + \ "ABCDEFGHIJKLMNOPQRSTUVWZYX0123456789" port_pool = [x for x in range(ports_from, ports_to)] random.shuffle(port_pool) games = {} games_lock = threading.Lock() class Game: def __init__(self): self.id = "" self.proc = None self.password = "" self.players = 0 self.port = 0 self.log_path = "" self.log_file = "" def create_game(s, args): try: client_password = args["password"] except KeyError: return 400, "missing password" if client_password != service_password: return 403, "wrong password" try: players = args["players"] except KeyError: return 400, "missing players" try: players = int(players) except ValueError: return 400, "invalid value for players" if players < 1 or players > 6: return 400, "invalid value for players" if len(games) >= max_games: return 503, "max number of games running already" game = Game() game.players = players game.password = "" for i in range(10): game.password += random.choice(password_chars) game.port = port_pool.pop(0) proc_args = [sys.executable, "-m", "fs_uae_netplay_server.game", "--players=" + str(players), "--password=" + game.password, "--port=" + str(game.port), "--launch-timeout=300", ] game.id = str(uuid.uuid4()) if log_dir: game.log_path = os.path.join(log_dir, game.id + ".game.log") else: t = tempfile.NamedTemporaryFile() with t: pass game.log_path = t.name game.log_file = open(game.log_path, "wb") print("new game: {0} ({1} players)".format(game.id, game.players)) print(" log: {0}".format(game.log_path)) print(proc_args) game.proc = subprocess.Popen(proc_args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) games[game.id] = game # we wait here until the game process has actually started listening # on the socket, so when we report the connection info back to the client, # connections can actually be established immediately data = game.proc.stdout.read(9) assert data == "listening" def cleanup(): try: with games_lock: port_pool.append(game.port) game.log_file.close() del games[game.id] except Exception: traceback.print_exc() def thread_function(): try: while True: data = game.proc.stdout.read(1024) if not data: break result = game.proc.wait() with games_lock: print("game {0} done, result {1}".format(game.id, result)) except Exception: traceback.print_exc() cleanup() else: cleanup() threading.Thread(target=thread_function).start() data = "id={0}&password={1}&port={2}&addresses={3}".format(game.id, game.password, game.port, addresses) return 200, data class NetplayServiceHttpHandler(BaseHTTPServer.BaseHTTPRequestHandler): def do_GET(s): temp = s.path.split("?", 1) path = temp[0] if len(temp) == 2: query_string = temp[1] else: query_string = "" args = {} arg_strings = query_string.split("&") for arg_string in arg_strings: temp = arg_string.split("=", 1) key = temp[0] if len(temp) == 2: value = temp[1] else: value = "" args[key] = value response = 404 data = "" if path == "/game/create": with games_lock: response, data = create_game(s, args) s.send_response(response) s.send_header("Content-Length", str(len(data))) s.end_headers() s.wfile.write(data) def run_server(server_class=BaseHTTPServer.HTTPServer, handler_class=NetplayServiceHttpHandler): server_address = (server_host, server_port) httpd = server_class(server_address, handler_class) print("server listening on", repr((server_host, server_port))) print("serving forever...") httpd.serve_forever() if __name__ == '__main__': run_server() fs-uae-2.2.3+dfsg/server/fs_uae_netplay_server/game.py0000644000175000017500000006135212162366654023240 0ustar glaubitzglaubitz""" FS-UAE Netplay Game Server Copyright (C) 2012 Frode Solheim This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA """ from __future__ import print_function import sys import time from collections import deque import socket import traceback import threading import random from hashlib import sha1 SERVER_PROTOCOL_VERSION = 1 MAX_PLAYERS = 6 if sys.version > '3': PYTHON3 = True else: PYTHON3 = False if PYTHON3: def int_to_bytes(number): return bytes([(number & 0xff000000) >> 24, (number & 0x00ff0000) >> 16, (number & 0x0000ff00) >> 8, (number & 0x000000ff)]) def bytes_to_int(m): return m[0] << 24 | m[1] << 16 | m[2] << 8 | m[3] def byte_ord(v): #print("byte_ord", v) try: return v[0] except TypeError: return v def byte(v): return bytes([v]) server_protocol_version = byte(SERVER_PROTOCOL_VERSION) else: def int_to_bytes(number): return chr((number & 0xff000000) >> 24) + \ chr((number & 0x00ff0000) >> 16) + \ chr((number & 0x0000ff00) >> 8) + \ chr((number & 0x000000ff)) def bytes_to_int(m): return ord(m[0]) << 24 | ord(m[1]) << 16 | ord(m[2]) << 8 | ord(m[3]) def byte_ord(v): return ord(v) def byte(v): return v server_protocol_version = chr(SERVER_PROTOCOL_VERSION) max_drift = 25 num_clients = 2 port = 25100 host = "0.0.0.0" game = None game_password = 0 launch_timeout = 0 def create_game_password(value): # for python 2 + 3 compatibility #if not isinstance(value, unicode): value = value.encode("UTF-8") #print(repr(value)) h = sha1() h.update(b"FSNP") val = b"" for v in value: if byte_ord(v) < 128: val += byte(v) #print("update:", repr(val)) h.update(val) return bytes_to_int(h.digest()[:4]) for arg in sys.argv: if arg.startswith("--"): parts = arg[2:].split("=", 1) if len(parts) == 2: key, value = parts key = key.lower() if key == "port": port = int(value) elif key == "players": num_clients = int(value) elif key == "password": #game_password = crc32(value) & 0xffffffff game_password = create_game_password(value) #print("game password (numeric) is", game_password) elif key == "launch-timeout": launch_timeout = int(value) MESSAGE_READY = 0 MESSAGE_MEM_CHECK = 5 MESSAGE_RND_CHECK = 6 MESSAGE_PING = 7 MESSAGE_PLAYERS = 8 MESSAGE_PLAYER_TAG_0 = 9 MESSAGE_PLAYER_TAG_1 = 10 MESSAGE_PLAYER_TAG_2 = 11 MESSAGE_PLAYER_TAG_3 = 12 MESSAGE_PLAYER_TAG_4 = 13 MESSAGE_PLAYER_TAG_5 = 14 MESSAGE_PLAYER_PING = 15 MESSAGE_PLAYER_LAG = 16 MESSAGE_SET_PLAYER_TAG = 17 MESSAGE_PROTOCOL_VERSION = 18 MESSAGE_EMULATION_VERSION = 19 MESSAGE_ERROR = 20 MESSAGE_TEXT = 21 MESSAGE_SESSION_KEY = 22 #MESSAGE_MEM_CHECK = 5 #MESSAGE_RND_CHECK = 6 #MESSAGE_PING = 7 MESSAGE_MEMCHECK_MASK = (0x80000000 | (MESSAGE_MEM_CHECK << 24)) MESSAGE_RNDCHECK_MASK = (0x80000000 | (MESSAGE_RND_CHECK << 24)) ERROR_PROTOCOL_MISMATCH = 1 ERROR_WRONG_PASSWORD = 2 ERROR_CANNOT_RESUME = 3 ERROR_GAME_ALREADY_STARTED = 4 ERROR_PLAYER_NUMBER = 5 ERROR_EMULATOR_MISMATCH = 6 ERROR_CLIENT_ERROR = 7 ERROR_MEMORY_DESYNC = 8 ERROR_RANDOM_DESYNC = 9 ERROR_SESSION_KEY = 10 ERROR_GAME_STOPPED = 99 def create_ext_message(ext, data): return 0x80000000 | ext << 24 | (data & 0xffffff) class Client: def __init__(self, socket, address): #self.socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) self.socket = socket self.messages = [] self.lock = threading.Lock() self.address = address self.ready = 0 self.tag = b"PLY" self.player = 0 self.playing = False self.frame = 0 self.frame_times = [0.0 for x in range(100)] self.lag = 0.0 self.out_seq = 0 self.memcheck = [(0, 0) for x in range(100)] self.rndcheck = [(0, 0) for x in range(100)] self.ping_sent_at = 0 self.pings = deque([0 for x in range(10)]) self.pings_sum = 0 self.pings_avg = 0 #self.protocol_version = 0 self.emulator_version = b"" self.session_key = 0 self.temp_a = 0 self.temp_b = 0 self.temp_c = 0 threading.Thread(target=self.__thread_function).start() def send_error_message(self, error_num): print(self, "error", error_num) message = 0x80000000 | (MESSAGE_ERROR) << 24 | error_num self.send_message(message) def send_message(self, message): with self.lock: #if message == 0x87000000: # #print("queueing %08x" % (message,)) # #traceback.print_stack() # self.temp_c += 1 self.__send_data(int_to_bytes(message)) def __send_data(self, data): #if data[0] == '\x87': # #print("queueing ping") # #traceback.print_stack() # self.temp_c += 1 self.socket.sendall(data) def queue_message(self, message): with self.lock: #if message == 0x87000000: # #print("queueing %08x" % (message,)) # #traceback.print_stack() # self.temp_c += 1 #print("queueing %08x" % (message,)) #if message & 0x20000000: # traceback.print_stack() self.messages.append(int_to_bytes(message)) if len(self.messages) == 100: self.__send_queued_messages() def queue_bytes(self, message): with self.lock: self.messages.append(message) if len(self.messages) == 100: self.__send_queued_messages() def send_queued_messages(self): with self.lock: self.__send_queued_messages() def __send_queued_messages(self): data = b"".join(self.messages) self.messages[:] = [] #print("sending", repr(data)) self.__send_data(data) def initialize_client(self): print("initialize", self) def read_bytes(num): data = b"" for i in range(num): data = data + self.socket.recv(1) if not len(data) == num: raise Exception("did not get {0} bytes".format(num)) return data # check header message data = read_bytes(4) if data == b"PING": # connection check only self.__send_data(b"PONG") return False if data != b"FSNP": print(data) raise Exception("did not get expected FSNP header") # check protocol version data = self.socket.recv(1) #print(repr(data), repr(server_protocol_version)) if data != server_protocol_version: print("protocol mismatch") self.send_error_message(ERROR_PROTOCOL_MISMATCH) return False # check net play password password = bytes_to_int(read_bytes(4)) if password != game_password: print("wrong password") self.send_error_message(ERROR_WRONG_PASSWORD) return False # read emulator version self.emulator_version = read_bytes(8) # read player number and session key, session key is checked to # make sure another client cannot hijack this player slot self.session_key = bytes_to_int(b"\0" + read_bytes(3)) self.player = byte_ord(self.socket.recv(1)) self.tag = read_bytes(3) # get package sequence number self.resume_from_packet = bytes_to_int(read_bytes(4)) error = game.add_client(self) if error: print(repr(error)) self.send_error_message(error) return False message = create_ext_message(MESSAGE_SESSION_KEY, self.session_key) self.queue_message(message) data = (self.player << 8) | num_clients message = create_ext_message(MESSAGE_PLAYERS, data) self.queue_message(message) game.send_player_tags(self) self.send_queued_messages() print("initialize done for", self) return True def __thread_function(self): try: try: if not self.initialize_client(): #print("initialize failed for", self) return self.receive_loop() except Exception: traceback.print_exc() game.stop = True finally: try: self.socket.close() except Exception: pass def receive_loop(self): data = b"" count = 0 while not game.stop: new_data = self.socket.recv(4 - count) if not new_data: # FIXME return data = data + new_data count = len(data) if count == 4: self.on_message(data) count = 0 data = b"" def send_ping(self): with self.lock: #print("ping?", self.ping_sent_at) if self.ping_sent_at == 0: self.temp_a += 1 self.ping_sent_at = time.time() message = int_to_bytes(0x80000000 | (7 << 24)) self.__send_data(message) assert self.ping_sent_at > 0 def on_ping(self): # may not need lock here with self.lock: self.temp_b += 1 if self.temp_a != self.temp_b: print(self.temp_a, self.temp_b, self.temp_c) assert self.ping_sent_at > 0 t = time.time() new = (t - self.ping_sent_at) / 1.0 #print(t, "-", self.ping_sent_at, "=", new) old = self.pings.popleft() self.pings.append(new) #print(self.pings) self.pings_sum = self.pings_sum - old + new self.pings_avg = self.pings_sum / len(self.pings) self.ping_sent_at = 0 def on_message(self, m): message = bytes_to_int(m) #with game.lock: # if not self.playing: # print(self, "is no longer playing/valid, ignoring message") if message & 0x80000000: # ext message command = (message & 0x7f000000) >> 24 data = message & 0x00ffffff; if command == MESSAGE_MEM_CHECK: self.memcheck[self.frame % 100] = (data, self.frame) elif command == MESSAGE_RND_CHECK: self.rndcheck[self.frame % 100] = (data, self.frame) elif command == MESSAGE_PING: #print("{0:x}".format(message)) self.on_ping() elif command == MESSAGE_TEXT: print("received text command") remaining = data text = b"" while not game.stop: part = self.socket.recv(remaining) count = len(part) text += part remaining = remaining - count if remaining == 0: game.add_text_message(self, text) break elif message & (1 << 30): frame = message & 0x3fffffff #print("received frame", frame) if frame != self.frame + 1: print("error, expected frame", self.frame + 1, "got", frame) #print("received frame", frame) self.frame = frame t = time.time() self.frame_times[self.frame % 100] = t game_t = game.frame_times[self.frame % 100] self.lag = t - game_t elif message & (1 << 29): game.add_input_event(self, message & 0x00ffffff) else: print("warning: unknown command received %x" % (message,)) def __str__(self): return "".format(self.player, self.tag, self.address) def create_session_key(): return random.randint(0, 2**24 - 1) class Game: def __init__(self, num_clients): self.started = False self.frame = 0 self.time = 0 self.clients = [] self.num_clients = 0 self.frame_times = [0.0 for x in range(100)] self.lock = threading.Lock() self.stop = False self.session_keys = [0 for x in range(MAX_PLAYERS)] self.emulator_version = b"" self.verified_frame = -1 def __start(self): if len(self.clients) != num_clients: printf("error - cannot start until all players have connected") return print("{0} clients connected, starting game".format(num_clients)) self.started = True threading.Thread(target=self.__thread_function).start() def add_client(self, client): with self.lock: if client.player == 0xff: if client.resume_from_packet != 0: return ERROR_CLIENT_ERROR if self.started: return ERROR_GAME_ALREADY_STARTED client.player = len(self.clients) if client.player == 0: self.emulator_version = client.emulator_version else: if self.emulator_version != client.emulator_version: return ERROR_EMULATOR_MISMATCH client.session_key = create_session_key() self.session_keys[client.player] = client.session_key self.clients.append(client) client.playing = True if not self.started: if len(self.clients) == num_clients: self.__start() else: if client.player >= len(self.clients): return ERROR_PLAYER_NUMBER if self.session_keys[client.player] != client.session_key: return ERROR_SESSION_KEY old_client = self.clients[client.player] # FIXME: must transfer settings for resuming to work self.clients[client.player] = client client.playing = True if client.resume_from_packet > 0: # cannot resume yet... print("cannot resume at packet", resume_from_packet) return ERROR_CANNOT_RESUME return 0 # FIXME: start the game..? def __thread_function(self): try: self.__game_loop() except Exception: traceback.print_exc() self.stop = True def __send_player_tags(self, send_to_client): for i, client in enumerate(game.clients): data = bytes_to_int(b"\0" + client.tag) message = create_ext_message(MESSAGE_PLAYER_TAG_0 + i, data) send_to_client.queue_message(message) def send_player_tags(self, client): with game.lock: self.__send_player_tags(client) def __game_loop(self): with self.lock: for client in self.clients: self.__send_player_tags(client) print("game loop running") self.time = time.time() while True: if self.stop: print("stopping game loop") # try to send error message to all players with self.lock: for client in self.clients: try: client.send_error_message(ERROR_GAME_STOPPED) except Exception: traceback.print_exc() return self.__game_loop_iteration() def __game_loop_iteration(self): # FIXME: higher precision sleep? target_time = self.time + 0.02 t2 = time.time() diff = target_time - t2 sleep = diff - 0.001 if sleep > 0.0: #print(sleep) time.sleep(sleep) self.time = target_time while time.time() < target_time: # busy-loop until target time pass with self.lock: if self.frame % 100 == 0: self.__send_status() self.frame += 1 self.frame_times[self.frame % 100] = time.time() message = (1 << 30) | self.frame self.__send_to_clients(message, True) if self.frame % 10 == 0: for client in self.clients: client.send_ping() if self.frame % 200 == 0: self.__print_status() self.__check_game() def __check_game(self): oldest_frame, frames = self.__check_frame_status() while oldest_frame > self.verified_frame: self.check_synchronization(self.verified_frame + 1) self.verified_frame += 1 diff = self.frame - oldest_frame if diff <= max_drift: # clients have not drifted too far return first = True count = 0; while diff > 0 and not self.stop: if first: first = False print("---", self.frame, "acked", frames) elif count % 100 == 0: print(" ", self.frame, "acked", frames) time.sleep(0.02) oldest_frame, frames = self.__check_frame_status() diff = self.frame - oldest_frame count += 1 self.time = time.time() - 0.02 def __check_frame_status(self): oldest_frame = self.frame frames = [] with self.lock: for client in self.clients: af = client.frame if af < oldest_frame: oldest_frame = af frames.append(af) return oldest_frame, frames def __print_status(self): for i, client in enumerate(self.clients): print("{0} f {1:6d} p avg: {2:3d} {3:3d}".format(i, client.frame, int(client.pings_avg * 1000), int(client.lag * 1000))) def __send_status(self): for i, client in enumerate(self.clients): v = int(client.lag * 1000) & 0x0000ffff message = 0x80000000 | MESSAGE_PLAYER_LAG << 24 | i << 16 | v self.__send_to_clients(message) v = int(client.pings_avg * 1000) & 0x0000ffff message = 0x80000000 | MESSAGE_PLAYER_PING << 24 | i << 16 | v self.__send_to_clients(message) def add_input_event(self, client, input_event): if not self.started: # game was not started - ignoring input event print("game not started, ignoring input event {0:08x}".format( input_event)) return with self.lock: if not client.playing: print("client", client, "is no longer valid, dropping msg") return # for now, just broadcast out again to all clients message = (1 << 29) | input_event self.__send_to_clients(message) def add_text_message(self, from_client, text): print("add text message") with self.lock: for client in self.clients: #if from_client == client: # continue message = 0x80000000 | MESSAGE_TEXT << 24 \ | from_client.player << 16 | len(text) message = int_to_bytes(message) + text print("send", repr(message), "to", client) client.queue_bytes(message) def send_to_clients(self, message, force_send=False): # using a lock here to ensure that send_to_clients can # be called from multiple threads, but all clients will # still get messages in expected order with self.lock: self.__send_to_clients(message, force_send) def __send_to_clients(self, message, force_send=False): for client in self.clients: #print("send", message, "to", client) client.queue_message(message) if force_send: client.send_queued_messages() def check_synchronization(self, check_frame): # FIXME: MOVE TO GAME CLASS # FIXME: ONLY RUN ONCE PER FRAME, not once per frame * clients #if self.frame == 0: # return with game.lock: #print("received memcheck", data) #check_frame = self.frame - 1 if check_frame < 0: return index = check_frame % 100 mem_check_data = [] rnd_check_data = [] for client in game.clients: if client.frame <= check_frame: # cannot check yet return #print(client, client.frame, client.memcheck) mem_check_data.append((client, client.memcheck[index])) rnd_check_data.append((client, client.rndcheck[index])) check = mem_check_data[0][1] for client, data in mem_check_data: if check != data: print("memcheck failed for frame", check_frame) for c, d in mem_check_data: print("* {0:08x} f {1:05d} {2}".format(d[0], d[1], c)) for c in game.clients: c.send_error_message(ERROR_MEMORY_DESYNC) c.send_queued_messages() raise Exception("mem check failed") check = rnd_check_data[0][1] for client, data in rnd_check_data: if check != data: print("rndcheck failed for frame", check_frame) for c, d in rnd_check_data: print("* {0:08x} f {1:05d} {2}".format(d[0], d[1], c)) for c in game.clients: c.send_error_message(ERROR_RANDOM_DESYNC) c.send_queued_messages() raise Exception("rnd check failed") address_map = { } def accept_client(server_socket): global last_keepalive_time server_socket.settimeout(1) client_socket, client_address = server_socket.accept() #client_socket.setsockopt(socket.SOL_SOCKET, socket.SO_SNDLOWAT, 4) client_socket.setsockopt(socket.SOL_TCP, socket.TCP_NODELAY, 1) client_socket.settimeout(None) client = Client(client_socket, client_address) #client.player = len(game.clients) + 1 print("Client connected", client) last_keepalive_time = time.time() #game.add_client(client) #client.start() #if game.can_start(): # game.start() #stop_accepting = False def accept_thread(server_socket): while not game.stop: try: accept_client(server_socket) except socket.timeout: pass except Exception: traceback.print_exc() time.sleep(1.0) def _run_server(): global game global last_keepalive_time game = Game(num_clients) address = (host, port) server_socket = socket.socket() server_socket.bind(address) server_socket.listen(10) print("listening") sys.stdout.flush() if address[0] != "0.0.0.0": print("server listening on", address[0], "port", address[1]) else: print("server listening on port", address[1]) print("want", num_clients, "client(s)") if num_clients > MAX_PLAYERS: print("ERROR: max clients are", MAX_PLAYERS) threading.Thread(target=accept_thread, args=(server_socket,)).start() last_keepalive_time = time.time() while not game.started: time.sleep(0.1) if launch_timeout: t2 = time.time() if t2 - last_keepalive_time > launch_timeout: print("game not started yet, aborting (timeout)") game.stop = True return #sys.exit() print("game started") while not game.stop: time.sleep(0.1) def run_server(): try: _run_server() except Exception: traceback.print_exc() except KeyboardInterrupt: traceback.print_exc() game.stop = True if __name__ == "__main__": run_server() fs-uae-2.2.3+dfsg/server/README0000644000175000017500000000361012162366654016242 0ustar glaubitzglaubitzFS-UAE NET PLAY SERVER This is the README file for fs-uae-netplay-server See the bottom of the file for copyright notices. INSTALLING THE PACKAGE Run python setup.py install to install the python package to your system. It is also possible to execute the script fs_uae_netplay_server/game.py for a single game server directly without installing. RUNNING WITH PYTHON Then you afterwards can start the netplay service with: python -m fs_uae_netplay_server.service or a single game server with: python -m fs_uae_netplay_server.game INSTALLED SCRIPTS Scripts named fs-uae-netplay-server and fs-uae-netplay-game may also be installed on your system, which can be used to start the service and/or a single game server respectively (same as launching python with the modules above). THE SERVICE The service listens on port 25000 RUNNING AS A LINUX SERVICE If you install the debian packages, you will also get an init scripts which starts fs-uae-netplay-server on startup, running as it's own user and storing log files in /var/log/fs-uae-netplay-server. You must enable the service in the file /etc/defaults/fs-uae-netplay-server first. FS-UAE NET PLAY SERVER COPYRIGHT FS-UAE Net Play Server is copyright (C) 2012-2013 Frode Solheim. This package is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This package is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this package; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA fs-uae-2.2.3+dfsg/server/setup.py0000644000175000017500000000060612162366654017076 0ustar glaubitzglaubitzfrom distutils.core import setup setup(name="fs_uae_netplay_server", version="2.2.3", description="FS-UAE Netplay Server", author="Frode Solheim", author_email="fs-uae@fengestad.no", url="http://www.fengestad.no/fs-uae", packages=["fs_uae_netplay_server"], scripts=["scripts/fs-uae-netplay-server", "scripts/fs-uae-game-server"], ) fs-uae-2.2.3+dfsg/server/debian/0000755000175000017500000000000012162366654016604 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/server/debian/source/0000755000175000017500000000000012162366654020104 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/server/debian/source/format0000644000175000017500000000001412162366654021312 0ustar glaubitzglaubitz3.0 (quilt) fs-uae-2.2.3+dfsg/server/debian/control0000644000175000017500000000103412162366654020205 0ustar glaubitzglaubitzSource: fs-uae-netplay-server Section: unknown Priority: extra X-Python-Version: >= 2.6 Maintainer: Frode Solheim Build-Depends: debhelper (>= 7.0.50~), python (>= 2.6) Standards-Version: 3.8.4 Homepage: http://www.fengestad.no/fs-uae Package: fs-uae-netplay-server Architecture: all Depends: python (>= 2.6), ${misc:Depends} ${python:Depends}, adduser (>= 3.11) Description: Netplay server for FS-UAE online play This package contains the FS-UAE netplay game server, and a service to start game servers on demand. fs-uae-2.2.3+dfsg/server/debian/compat0000644000175000017500000000000212162366654020002 0ustar glaubitzglaubitz7 fs-uae-2.2.3+dfsg/server/debian/fs-uae-netplay-server.default0000644000175000017500000000034012162366654024305 0ustar glaubitzglaubitz# options for fs-uae-netplay-server # set the following option to yes to enable the server FS_UAE_NETPLAY_SERVER_ENABLE=no # there are more options available - see /etc/init.d/fs-uae-netplay-server # for a list of options fs-uae-2.2.3+dfsg/server/debian/fs-uae-netplay-server.init0000755000175000017500000000522312162366654023634 0ustar glaubitzglaubitz#! /bin/sh ### BEGIN INIT INFO # Provides: fs-uae-netplay-server # Required-Start: $local_fs $remote_fs $network $syslog # Required-Stop: $local_fs $remote_fs $network $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: fs-uae-netplay-server - Daemon for FS-UAE game servers # Description: fs-uae-netplay-server - Daemon for FS-UAE game servers ### END INIT INFO PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin DAEMON=/usr/bin/fs-uae-netplay-server EXEC=/usr/bin/python NAME=fs-uae-netplay-server DESC="fs-uae netplay server" test -x $DAEMON || exit 0 set -e . /lib/lsb/init-functions # Edit /etc/default/fs-uae-netplay-server to change this. FS_UAE_NETPLAY_SERVER_ENABLE=no FS_UAE_NETPLAY_SERVER_USER=fs-uae-netplay-server FS_UAE_NETPLAY_SERVER_GROUP=fs-uae-netplay-server FS_UAE_NETPLAY_SERVER_PORT=25101 FS_UAE_NETPLAY_SERVER_PORTS_FROM=25102 FS_UAE_NETPLAY_SERVER_PORTS_TO=25499 FS_UAE_NETPLAY_SERVER_PASSWORD= FS_UAE_NETPLAY_SERVER_ADDRESSES=127.0.0.1 FS_UAE_NETPLAY_SERVER_MAX_GAMES=10 FS_UAE_NETPLAY_SERVER_LOG_DIR=/var/log/fs-uae-netplay-server test -r /etc/default/fs-uae-netplay-server && . /etc/default/fs-uae-netplay-server DAEMON_ARGS="\ --port=$FS_UAE_NETPLAY_SERVER_PORT \ --max-games=$FS_UAE_NETPLAY_SERVER_MAX_GAMES \ --log-dir=$FS_UAE_NETPLAY_SERVER_LOG_DIR \ --password=$FS_UAE_NETPLAY_SERVER_PASSWORD \ --ports-from=$FS_UAE_NETPLAY_SERVER_PORTS_FROM \ --ports-to=$FS_UAE_NETPLAY_SERVER_PORTS_TO \ --addresses=$FS_UAE_NETPLAY_SERVER_ADDRESSES \ " # --name $NAME START_COMMAND="start-stop-daemon --start --oknodo --exec $EXEC \ --chuid $FS_UAE_NETPLAY_SERVER_USER:$FS_UAE_NETPLAY_SERVER_GROUP \ --user $FS_UAE_NETPLAY_SERVER_USER \ --background \ --startas $DAEMON -- $DAEMON_ARGS \ " STOP_COMMAND="start-stop-daemon --stop --oknodo --exec $EXEC \ --user $FS_UAE_NETPLAY_SERVER_USER \ " case "$1" in start) echo -n "Starting $DESC: " if [ $FS_UAE_NETPLAY_SERVER_ENABLE = yes ]; then $START_COMMAND echo "$NAME." else echo "(not enabled)" fi ;; stop) echo -n "Stopping $DESC: " #start-stop-daemon --stop --oknodo --name $NAME --exec $EXEC --user $FS_UAE_NETPLAY_SERVER_USER $STOP_COMMAND echo "$NAME." ;; restart|force-reload) echo -n "Stopping $DESC: " #start-stop-daemon --stop --oknodo --name $NAME --exec $EXEC --user $FS_UAE_NETPLAY_SERVER_USER $STOP_COMMAND echo "$NAME." echo -n "Starting $DESC: " if [ $FS_UAE_NETPLAY_SERVER_ENABLE = yes ]; then $START_COMMAND echo "$NAME." else echo "(not enabled)" fi ;; status) status_of_proc $DAEMON $NAME ;; *) N=/etc/init.d/$NAME echo "Usage: $N {start|stop|restart|force-reload|status}" >&2 exit 1 ;; esac exit 0 fs-uae-2.2.3+dfsg/server/debian/rules0000755000175000017500000000006112162366654017661 0ustar glaubitzglaubitz#!/usr/bin/make -f # -*- makefile -*- %: dh $@ fs-uae-2.2.3+dfsg/server/debian/preinst0000755000175000017500000000435012162366654020220 0ustar glaubitzglaubitz#!/bin/sh case "$1" in install|upgrade) # If the package has default file it could be sourced, so that # the local admin can overwrite the defaults #[ -f "/etc/default/packagename" ] && . /etc/default/fixme # Sane defaults: [ -z "$SERVER_HOME" ] && SERVER_HOME=/var/cache/fs-uae-netplay-server [ -z "$SERVER_USER" ] && SERVER_USER=fs-uae-netplay-server [ -z "$SERVER_NAME" ] && SERVER_NAME="FS-UAE Netplay Server" [ -z "$SERVER_GROUP" ] && SERVER_GROUP=fs-uae-netplay-server # Groups that the user will be added to, if undefined, then none. ADDGROUP="" # create user to avoid running server as root # 1. create group if not existing if ! getent group | grep -q "^$SERVER_GROUP:" ; then echo -n "Adding group $SERVER_GROUP.." addgroup --quiet --system $SERVER_GROUP 2>/dev/null ||true echo "..done" fi # 2. create homedir if not existing test -d $SERVER_HOME || mkdir $SERVER_HOME # 3. create user if not existing if ! getent passwd | grep -q "^$SERVER_USER:"; then echo -n "Adding system user $SERVER_USER.." adduser --quiet \ --system \ --ingroup $SERVER_GROUP \ --no-create-home \ --disabled-password \ $SERVER_USER 2>/dev/null || true echo "..done" fi # 4. adjust passwd entry usermod -c "$SERVER_NAME" \ -d $SERVER_HOME \ -g $SERVER_GROUP \ $SERVER_USER # 5. adjust file and directory permissions if ! dpkg-statoverride --list $SERVER_HOME >/dev/null then chown -R $SERVER_USER:$SERVER_GROUP $SERVER_HOME chmod u=rwx,g=rxs,o= $SERVER_HOME fi # 6. Add the user to the ADDGROUP group if test -n "$ADDGROUP" then if ! groups $SERVER_USER | cut -d: -f2 | \ grep -qw $ADDGROUP; then adduser $SERVER_USER $ADDGROUP fi fi mkdir -p /var/log/fs-uae-netplay-server chown $SERVER_USER /var/log/fs-uae-netplay-server chgrp $SERVER_GROUP /var/log/fs-uae-netplay-server ;; esac fs-uae-2.2.3+dfsg/server/debian/copyright0000644000175000017500000000227612162366654020546 0ustar glaubitzglaubitzThis work was packaged for Debian by: Frode Solheim on Mon, 07 Nov 2011 23:26:15 +0100 It was downloaded from: http://www.fengestad.no/fs-uae/ Upstream Author(s): Frode Solheim Copyright: Copyright (C) 2012 Frode Solheim License: This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this package; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. The Debian packaging is: Copyright (C) 2012 Frode Solheim and is licensed under the GPL version 2, see "/usr/share/common-licenses/GPL-2". fs-uae-2.2.3+dfsg/server/debian/changelog0000644000175000017500000000023312162366654020454 0ustar glaubitzglaubitzfs-uae-netplay-server (2.2.3-0) unstable; urgency=low * Dummy changelog entry -- Frode Solheim Mon, 23 Apr 2012 22:49:01 +0100 fs-uae-2.2.3+dfsg/server/COPYING0000644000175000017500000004325412162366654016425 0ustar glaubitzglaubitz GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. fs-uae-2.2.3+dfsg/server/scripts/0000755000175000017500000000000012162366654017051 5ustar glaubitzglaubitzfs-uae-2.2.3+dfsg/server/scripts/fs-uae-netplay-server0000755000175000017500000000013112162366654023130 0ustar glaubitzglaubitz#!/usr/bin/env python from fs_uae_netplay_server.service import run_server run_server() fs-uae-2.2.3+dfsg/server/scripts/fs-uae-game-server0000755000175000017500000000012612162366654022371 0ustar glaubitzglaubitz#!/usr/bin/env python from fs_uae_netplay_server.game import run_server run_server()